summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAaron Merey <amerey@redhat.com>2022-05-11 14:14:35 -0400
committerAaron Merey <amerey@redhat.com>2022-05-11 14:19:38 -0400
commit040720bbf786b8deb72aabd81d7b0e16a34d1ec5 (patch)
tree8e43e1c1167de35c69ad69b82402b4fe8f31a9c4
parentb2e0ecaf06242acbbe3c9a02da17c4a1529ca563 (diff)
parentd890c720b8c4daf8892a175296d8e88ec992c92d (diff)
downloadbinutils-gdb-040720bbf786b8deb72aabd81d7b0e16a34d1ec5.tar.gz
Merge with master branch
-rw-r--r--.editorconfig47
-rw-r--r--ChangeLog394
-rw-r--r--Makefile.def13
-rw-r--r--Makefile.in502
-rw-r--r--Makefile.tpl3
-rw-r--r--bfd/.gitignore2
-rw-r--r--bfd/ChangeLog258
-rw-r--r--bfd/Makefile.am30
-rw-r--r--bfd/Makefile.in521
-rw-r--r--bfd/archures.c25
-rw-r--r--bfd/bfd-in2.h89
-rw-r--r--bfd/bfd.c11
-rw-r--r--bfd/bfdio.c80
-rw-r--r--bfd/coff-i386.c99
-rw-r--r--bfd/coff-rs6000.c103
-rw-r--r--bfd/coff-x86_64.c99
-rw-r--r--bfd/coff64-rs6000.c70
-rw-r--r--bfd/coffcode.h7
-rw-r--r--bfd/coffgen.c5
-rw-r--r--bfd/config.bfd60
-rwxr-xr-xbfd/configure49
-rw-r--r--bfd/configure.ac8
-rw-r--r--bfd/cpu-amdgcn.c59
-rw-r--r--bfd/cpu-k1om.c37
-rw-r--r--bfd/cpu-l1om.c36
-rw-r--r--bfd/doc/Makefile.am217
-rw-r--r--bfd/doc/bfd.texi2
-rw-r--r--bfd/doc/local.mk155
-rw-r--r--bfd/dwarf2.c197
-rw-r--r--bfd/elf-bfd.h34
-rw-r--r--bfd/elf-eh-frame.c3
-rw-r--r--bfd/elf-properties.c5
-rw-r--r--bfd/elf.c107
-rw-r--r--bfd/elf32-arm.c26
-rw-r--r--bfd/elf32-i386.c92
-rw-r--r--bfd/elf32-microblaze.c116
-rw-r--r--bfd/elf32-or1k.c24
-rw-r--r--bfd/elf32-ppc.c130
-rw-r--r--bfd/elf64-amdgcn.c80
-rw-r--r--bfd/elf64-ppc.c897
-rw-r--r--bfd/elf64-s390.c41
-rw-r--r--bfd/elf64-x86-64.c200
-rw-r--r--bfd/elfcode.h13
-rw-r--r--bfd/elflink.c274
-rw-r--r--bfd/elfnn-loongarch.c501
-rw-r--r--bfd/elfnn-riscv.c78
-rw-r--r--bfd/elfxx-loongarch.c1084
-rw-r--r--bfd/elfxx-loongarch.h10
-rw-r--r--bfd/elfxx-riscv.c136
-rw-r--r--bfd/elfxx-riscv.h3
-rw-r--r--bfd/elfxx-target.h19
-rw-r--r--bfd/elfxx-x86.c959
-rw-r--r--bfd/elfxx-x86.h152
-rw-r--r--bfd/libbfd.h1
-rw-r--r--bfd/libxcoff.h63
-rw-r--r--bfd/linker.c2
-rw-r--r--bfd/peXXigen.c98
-rw-r--r--bfd/peicode.h2
-rw-r--r--bfd/po/SRC-POTFILES.in4
-rw-r--r--bfd/po/bfd.pot2534
-rw-r--r--bfd/po/fr.po3116
-rw-r--r--bfd/po/ro.po9782
-rw-r--r--bfd/po/sr.po3123
-rw-r--r--bfd/po/uk.po3102
-rw-r--r--bfd/reloc.c2
-rw-r--r--bfd/section.c67
-rw-r--r--bfd/som.c10
-rw-r--r--bfd/stamp-h.in1
-rw-r--r--bfd/targets.c16
-rw-r--r--bfd/version.h2
-rw-r--r--bfd/version.m42
-rw-r--r--bfd/vms-alpha.c36
-rw-r--r--bfd/xcofflink.c1262
-rw-r--r--bfd/xcofflink.h19
-rw-r--r--binutils/BRANCHES1
-rw-r--r--binutils/ChangeLog183
-rw-r--r--binutils/MAINTAINERS10
-rw-r--r--binutils/Makefile.am14
-rw-r--r--binutils/Makefile.in11
-rw-r--r--binutils/NEWS11
-rw-r--r--binutils/README-how-to-make-a-release127
-rw-r--r--binutils/addr2line.c75
-rw-r--r--binutils/arlex.l2
-rw-r--r--binutils/config.in3
-rwxr-xr-xbinutils/configure173
-rw-r--r--binutils/configure.ac17
-rw-r--r--binutils/dlltool.c35
-rw-r--r--binutils/doc/binutils.texi40
-rw-r--r--binutils/doc/debug.options.texi17
-rw-r--r--binutils/dwarf-mode.el10
-rw-r--r--binutils/dwarf.c551
-rw-r--r--binutils/dwarf.h7
-rw-r--r--binutils/objcopy.c26
-rw-r--r--binutils/objdump.c386
-rw-r--r--binutils/po/bg.po6003
-rw-r--r--binutils/po/binutils.pot4084
-rw-r--r--binutils/po/fr.po4192
-rw-r--r--binutils/po/ro.po11549
-rw-r--r--binutils/po/sr.po4228
-rw-r--r--binutils/po/sv.po4047
-rw-r--r--binutils/po/uk.po4202
-rw-r--r--binutils/rddbg.c2
-rw-r--r--binutils/readelf.c436
-rw-r--r--binutils/stabs.c8
-rw-r--r--binutils/stamp-h.in1
-rw-r--r--binutils/testsuite/binutils-all/debuginfod.exp14
-rw-r--r--binutils/testsuite/binutils-all/dw5.W4
-rw-r--r--binutils/testsuite/binutils-all/mips/micromips-branch-alias.d17
-rw-r--r--binutils/testsuite/binutils-all/mips/micromips-branch-alias.s17
-rw-r--r--binutils/testsuite/binutils-all/mips/micromips-branch-noalias.d17
-rw-r--r--binutils/testsuite/binutils-all/mips/mips-branch-alias.s18
-rw-r--r--binutils/testsuite/binutils-all/mips/mips.exp8
-rw-r--r--binutils/testsuite/binutils-all/mips/mips1-branch-alias.d17
-rw-r--r--binutils/testsuite/binutils-all/mips/mips1-branch-noalias.d17
-rw-r--r--binutils/testsuite/binutils-all/mips/mips2-branch-alias.d18
-rw-r--r--binutils/testsuite/binutils-all/mips/mips2-branch-noalias.d18
-rw-r--r--binutils/testsuite/binutils-all/mips/mips32r6-branch-alias.d17
-rw-r--r--binutils/testsuite/binutils-all/mips/mips32r6-branch-noalias.d17
-rw-r--r--binutils/testsuite/binutils-all/objcopy.exp61
-rw-r--r--binutils/testsuite/binutils-all/objdump.WL2
-rw-r--r--binutils/testsuite/binutils-all/weaken-gnu-unique.d8
-rw-r--r--binutils/testsuite/binutils-all/x86-64/pr26808.dump82
-rw-r--r--binutils/testsuite/lib/binutils-common.exp22
-rwxr-xr-xconfig.guess1238
-rwxr-xr-xconfig.sub86
-rw-r--r--config/ChangeLog4
-rwxr-xr-xconfigure20
-rw-r--r--configure.ac15
-rw-r--r--cpu/ChangeLog4
-rw-r--r--cpu/mep.opc13
-rw-r--r--elfcpp/ChangeLog4
-rw-r--r--gas/ChangeLog60
-rw-r--r--gas/Makefile.in14
-rw-r--r--gas/NEWS5
-rw-r--r--gas/app.c8
-rw-r--r--gas/as.c2
-rw-r--r--gas/as.h4
-rw-r--r--gas/cond.c1
-rw-r--r--gas/config/bfin-lex.l4
-rw-r--r--gas/config/obj-coff.c18
-rw-r--r--gas/config/obj-coff.h16
-rw-r--r--gas/config/obj-ecoff.h2
-rw-r--r--gas/config/obj-elf.c72
-rw-r--r--gas/config/obj-elf.h2
-rw-r--r--gas/config/obj-multi.h4
-rw-r--r--gas/config/tc-aarch64.c26
-rw-r--r--gas/config/tc-arm.c2
-rw-r--r--gas/config/tc-hppa.c45
-rw-r--r--gas/config/tc-i386-intel.c10
-rw-r--r--gas/config/tc-i386.c186
-rw-r--r--gas/config/tc-i386.h10
-rw-r--r--gas/config/tc-loongarch.c194
-rw-r--r--gas/config/tc-loongarch.h3
-rw-r--r--gas/config/tc-m68k.c43
-rw-r--r--gas/config/tc-m68k.h17
-rw-r--r--gas/config/tc-mips.c6
-rw-r--r--gas/config/tc-ppc.c339
-rw-r--r--gas/config/tc-riscv.c144
-rw-r--r--gas/config/tc-s390.c2
-rw-r--r--gas/config/tc-tic54x.c2
-rw-r--r--gas/config/tc-z80.c10
-rw-r--r--gas/config/tc-z8k.c2
-rwxr-xr-xgas/configure40
-rw-r--r--gas/doc/as.texi27
-rw-r--r--gas/doc/c-i386.texi4
-rw-r--r--gas/doc/c-riscv.texi2
-rw-r--r--gas/doc/c-s390.texi4
-rw-r--r--gas/doc/local.mk4
-rw-r--r--gas/dwarf2dbg.c224
-rw-r--r--gas/ecoff.c2
-rw-r--r--gas/ecoff.h2
-rw-r--r--gas/expr.c15
-rw-r--r--gas/expr.h40
-rw-r--r--gas/input-scrub.c88
-rw-r--r--gas/macro.c56
-rw-r--r--gas/obj.h2
-rw-r--r--gas/po/fr.po4887
-rw-r--r--gas/po/gas.pot3943
-rw-r--r--gas/po/uk.po4880
-rw-r--r--gas/read.c189
-rw-r--r--gas/read.h6
-rw-r--r--gas/sb.h9
-rw-r--r--gas/stamp-h.in1
-rw-r--r--gas/symbols.c195
-rw-r--r--gas/symbols.h10
-rw-r--r--gas/testsuite/gas/aarch64/illegal-ldapr.l24
-rw-r--r--gas/testsuite/gas/aarch64/illegal.l440
-rw-r--r--gas/testsuite/gas/aarch64/inst-directive.d3
-rw-r--r--gas/testsuite/gas/aarch64/inst-directive.s1
-rw-r--r--gas/testsuite/gas/aarch64/inst-dwarf.d15
-rw-r--r--gas/testsuite/gas/aarch64/rng-1.d10
-rw-r--r--gas/testsuite/gas/aarch64/rng-1.s3
-rw-r--r--gas/testsuite/gas/all/cofftag.d24
-rw-r--r--gas/testsuite/gas/all/gas.exp2
-rw-r--r--gas/testsuite/gas/all/macro.l25
-rw-r--r--gas/testsuite/gas/all/macro.s16
-rw-r--r--gas/testsuite/gas/arm/inst-po-dwarf.d21
-rw-r--r--gas/testsuite/gas/arm/mve-vctp-bad.l70
-rw-r--r--gas/testsuite/gas/arm/mve-vldr-bad-3.l68
-rw-r--r--gas/testsuite/gas/arm/mve-vldr-vstr-bad.l1620
-rw-r--r--gas/testsuite/gas/arm/mve-vqdmlah-bad.l12
-rw-r--r--gas/testsuite/gas/arm/mve-vqdmlash-bad.l12
-rw-r--r--gas/testsuite/gas/arm/mve-vrint-bad.l156
-rw-r--r--gas/testsuite/gas/elf/dwarf-3-func.d48
-rw-r--r--gas/testsuite/gas/elf/dwarf-3-func.s40
-rw-r--r--gas/testsuite/gas/elf/dwarf-5-func-global.d40
-rw-r--r--gas/testsuite/gas/elf/dwarf-5-func-local.d37
-rw-r--r--gas/testsuite/gas/elf/dwarf-5-func.d50
-rw-r--r--gas/testsuite/gas/elf/dwarf-5-irp.d118
-rw-r--r--gas/testsuite/gas/elf/dwarf-5-irp.s44
-rw-r--r--gas/testsuite/gas/elf/dwarf-5-loc0.d2
-rw-r--r--gas/testsuite/gas/elf/dwarf2-18.d3
-rw-r--r--gas/testsuite/gas/elf/elf.exp16
-rw-r--r--gas/testsuite/gas/elf/line.l30
-rw-r--r--gas/testsuite/gas/elf/line.s49
-rw-r--r--gas/testsuite/gas/elf/pr27228.d2
-rw-r--r--gas/testsuite/gas/elf/size.d16
-rw-r--r--gas/testsuite/gas/elf/size.s23
-rw-r--r--gas/testsuite/gas/i386/arch-10-5.l2
-rw-r--r--gas/testsuite/gas/i386/arch-10-5.s (renamed from gas/testsuite/gas/i386/k1om-inval.s)1
-rw-r--r--gas/testsuite/gas/i386/avx512_fp16.s4
-rw-r--r--gas/testsuite/gas/i386/equ-2.l17
-rw-r--r--gas/testsuite/gas/i386/equ-2.s11
-rw-r--r--gas/testsuite/gas/i386/equ.d6
-rw-r--r--gas/testsuite/gas/i386/equ.s14
-rw-r--r--gas/testsuite/gas/i386/evex-lig.s25
-rw-r--r--gas/testsuite/gas/i386/evex-lig256-intel.d22
-rw-r--r--gas/testsuite/gas/i386/evex-lig256.d22
-rw-r--r--gas/testsuite/gas/i386/evex-lig512-intel.d22
-rw-r--r--gas/testsuite/gas/i386/evex-lig512.d22
-rw-r--r--gas/testsuite/gas/i386/i386.exp14
-rw-r--r--gas/testsuite/gas/i386/iamcu-6.d3
-rw-r--r--gas/testsuite/gas/i386/iamcu-6.s2
-rw-r--r--gas/testsuite/gas/i386/iamcu-inval-1.l5
-rw-r--r--gas/testsuite/gas/i386/iamcu-inval-1.s4
-rw-r--r--gas/testsuite/gas/i386/ilp32/ilp32.exp1
-rw-r--r--gas/testsuite/gas/i386/ilp32/reloc-2.l4
-rw-r--r--gas/testsuite/gas/i386/ilp32/reloc-2.s7
-rw-r--r--gas/testsuite/gas/i386/ilp32/reloc64.d3
-rw-r--r--gas/testsuite/gas/i386/ilp32/reloc64.l15
-rw-r--r--gas/testsuite/gas/i386/ilp32/reloc64.s18
-rw-r--r--gas/testsuite/gas/i386/ilp32/rex.d44
-rw-r--r--gas/testsuite/gas/i386/inval-avx512f.l16
-rw-r--r--gas/testsuite/gas/i386/inval-avx512f.s7
-rw-r--r--gas/testsuite/gas/i386/inval-equ-2.l6
-rw-r--r--gas/testsuite/gas/i386/inval-pseudo.l6
-rw-r--r--gas/testsuite/gas/i386/inval-pseudo.s3
-rw-r--r--gas/testsuite/gas/i386/k1om-inval.l2
-rw-r--r--gas/testsuite/gas/i386/k1om.d260
-rw-r--r--gas/testsuite/gas/i386/l1om-inval.l2
-rw-r--r--gas/testsuite/gas/i386/l1om-inval.s2
-rw-r--r--gas/testsuite/gas/i386/l1om.d260
-rw-r--r--gas/testsuite/gas/i386/pseudos.d4
-rw-r--r--gas/testsuite/gas/i386/pseudos.s7
-rw-r--r--gas/testsuite/gas/i386/rex.d5
-rw-r--r--gas/testsuite/gas/i386/rex.s6
-rw-r--r--gas/testsuite/gas/i386/secidx.d40
-rw-r--r--gas/testsuite/gas/i386/secidx.s79
-rw-r--r--gas/testsuite/gas/i386/x86-64-avx512_fp16.s8
-rw-r--r--gas/testsuite/gas/i386/x86-64-code16-2.d4
-rw-r--r--gas/testsuite/gas/mmix/err-greg1.s4
-rw-r--r--gas/testsuite/gas/ppc/476.d10
-rw-r--r--gas/testsuite/gas/ppc/aix.exp5
-rw-r--r--gas/testsuite/gas/ppc/prefix-reloc.d2
-rw-r--r--gas/testsuite/gas/ppc/simpshft.d50
-rw-r--r--gas/testsuite/gas/ppc/test1xcoff32.d40
-rw-r--r--gas/testsuite/gas/ppc/vle-simple-5.d10
-rw-r--r--gas/testsuite/gas/ppc/xcoff-visibility-1-32.d70
-rw-r--r--gas/testsuite/gas/ppc/xcoff-visibility-1-64.d70
-rw-r--r--gas/testsuite/gas/ppc/xcoff-visibility-1.s78
-rw-r--r--gas/testsuite/gas/ppc/xcoff-visibility-2-32.d18
-rw-r--r--gas/testsuite/gas/ppc/xcoff-visibility-2-64.d18
-rw-r--r--gas/testsuite/gas/ppc/xcoff-visibility-2.s9
-rw-r--r--gas/testsuite/gas/riscv/c-fld-fsd-fail.l4
-rw-r--r--gas/testsuite/gas/riscv/csr-dw-regnums.d142
-rw-r--r--gas/testsuite/gas/riscv/csr-dw-regnums.s157
-rw-r--r--gas/testsuite/gas/riscv/csr-version-1p10.d192
-rw-r--r--gas/testsuite/gas/riscv/csr-version-1p10.l471
-rw-r--r--gas/testsuite/gas/riscv/csr-version-1p11.d192
-rw-r--r--gas/testsuite/gas/riscv/csr-version-1p11.l471
-rw-r--r--gas/testsuite/gas/riscv/csr-version-1p12.d196
-rw-r--r--gas/testsuite/gas/riscv/csr-version-1p12.l351
-rw-r--r--gas/testsuite/gas/riscv/csr-version-1p9p1.d192
-rw-r--r--gas/testsuite/gas/riscv/csr-version-1p9p1.l475
-rw-r--r--gas/testsuite/gas/riscv/csr.s136
-rw-r--r--gas/testsuite/gas/riscv/insn-dwarf.d71
-rw-r--r--gas/testsuite/gas/riscv/insn.d4
-rw-r--r--gas/testsuite/gas/riscv/insn.s4
-rw-r--r--gas/testsuite/gas/riscv/march-imply-i2p1-01.l40
-rw-r--r--gas/testsuite/gas/riscv/zicbom-fail.d3
-rw-r--r--gas/testsuite/gas/riscv/zicbom-fail.l7
-rw-r--r--gas/testsuite/gas/riscv/zicbom-fail.s7
-rw-r--r--gas/testsuite/gas/riscv/zicbom.d15
-rw-r--r--gas/testsuite/gas/riscv/zicbom.s7
-rw-r--r--gas/testsuite/gas/riscv/zicbop-fail.d3
-rw-r--r--gas/testsuite/gas/riscv/zicbop-fail.l4
-rw-r--r--gas/testsuite/gas/riscv/zicbop-fail.s4
-rw-r--r--gas/testsuite/gas/riscv/zicbop.d12
-rw-r--r--gas/testsuite/gas/riscv/zicbop.s4
-rw-r--r--gas/testsuite/gas/riscv/zicboz-fail.d3
-rw-r--r--gas/testsuite/gas/riscv/zicboz-fail.l5
-rw-r--r--gas/testsuite/gas/riscv/zicboz-fail.s5
-rw-r--r--gas/testsuite/gas/riscv/zicboz.d13
-rw-r--r--gas/testsuite/gas/riscv/zicboz.s5
-rw-r--r--gas/testsuite/gas/riscv/zqinx.d4
-rw-r--r--gas/testsuite/gas/z80/pr28791.d16
-rw-r--r--gas/testsuite/gas/z80/pr28791.s7
-rw-r--r--gdb/MAINTAINERS12
-rw-r--r--gdb/Makefile.in501
-rw-r--r--gdb/NEWS208
-rw-r--r--gdb/README2
-rw-r--r--gdb/aarch64-fbsd-nat.c314
-rw-r--r--gdb/aarch64-fbsd-tdep.c67
-rw-r--r--gdb/aarch64-fbsd-tdep.h3
-rw-r--r--gdb/aarch64-linux-nat.c421
-rw-r--r--gdb/aarch64-linux-tdep.c29
-rw-r--r--gdb/aarch64-linux-tdep.h3
-rw-r--r--gdb/aarch64-nat.c301
-rw-r--r--gdb/aarch64-nat.h109
-rw-r--r--gdb/aarch64-tdep.c115
-rw-r--r--gdb/aarch64-tdep.h10
-rw-r--r--gdb/acinclude.m43
-rw-r--r--gdb/ada-casefold.h1345
-rw-r--r--gdb/ada-exp.h38
-rw-r--r--gdb/ada-exp.y223
-rw-r--r--gdb/ada-lang.c1164
-rw-r--r--gdb/ada-lang.h6
-rw-r--r--gdb/ada-lex.l288
-rw-r--r--gdb/ada-tasks.c80
-rw-r--r--gdb/ada-typeprint.c219
-rwxr-xr-xgdb/ada-unicode.py95
-rw-r--r--gdb/ada-valprint.c145
-rw-r--r--gdb/ada-varobj.c4
-rw-r--r--gdb/addrmap.c26
-rw-r--r--gdb/addrmap.h2
-rw-r--r--gdb/agent.c6
-rw-r--r--gdb/aix-thread.c102
-rw-r--r--gdb/alpha-mdebug-tdep.c4
-rw-r--r--gdb/alpha-tdep.c4
-rw-r--r--gdb/amd64-bsd-nat.c96
-rw-r--r--gdb/amd64-fbsd-nat.c362
-rw-r--r--gdb/amd64-fbsd-tdep.c291
-rw-r--r--gdb/amd64-fbsd-tdep.h27
-rw-r--r--gdb/amd64-linux-tdep.c16
-rw-r--r--gdb/amd64-tdep.c12
-rw-r--r--gdb/amd64-tdep.h5
-rw-r--r--gdb/annotate.c152
-rw-r--r--gdb/arc-linux-tdep.c5
-rw-r--r--gdb/arc-tdep.c53
-rw-r--r--gdb/arc-tdep.h2
-rw-r--r--gdb/arch-utils.c133
-rw-r--r--gdb/arch/aarch32.c2
-rw-r--r--gdb/arch/aarch64.c7
-rw-r--r--gdb/arch/aarch64.h8
-rw-r--r--gdb/arch/amd64.c6
-rw-r--r--gdb/arch/arm.c12
-rw-r--r--gdb/arch/arm.h16
-rw-r--r--gdb/arch/i386.c4
-rw-r--r--gdb/arch/loongarch.c88
-rw-r--r--gdb/arch/loongarch.h73
-rw-r--r--gdb/arm-fbsd-nat.c52
-rw-r--r--gdb/arm-fbsd-tdep.c65
-rw-r--r--gdb/arm-fbsd-tdep.h5
-rw-r--r--gdb/arm-linux-nat.c6
-rw-r--r--gdb/arm-linux-tdep.c12
-rw-r--r--gdb/arm-netbsd-nat.c4
-rw-r--r--gdb/arm-tdep.c1182
-rw-r--r--gdb/arm-tdep.h20
-rw-r--r--gdb/auto-load.c133
-rw-r--r--gdb/auxv.c16
-rw-r--r--gdb/avr-tdep.c26
-rw-r--r--gdb/ax-gdb.c35
-rw-r--r--gdb/ax-general.c24
-rw-r--r--gdb/bcache.c84
-rw-r--r--gdb/bcache.h2
-rw-r--r--gdb/block.c156
-rw-r--r--gdb/block.h240
-rw-r--r--gdb/blockframe.c59
-rw-r--r--gdb/bpf-tdep.c12
-rw-r--r--gdb/break-catch-exec.c222
-rw-r--r--gdb/break-catch-fork.c256
-rw-r--r--gdb/break-catch-load.c282
-rw-r--r--gdb/break-catch-sig.c164
-rw-r--r--gdb/break-catch-syscall.c170
-rw-r--r--gdb/break-catch-throw.c156
-rw-r--r--gdb/breakpoint.c2779
-rw-r--r--gdb/breakpoint.h299
-rw-r--r--gdb/bsd-kvm.c28
-rw-r--r--gdb/bsd-uthread.c4
-rw-r--r--gdb/btrace.c150
-rw-r--r--gdb/build-id.c18
-rw-r--r--gdb/buildsym-legacy.c110
-rw-r--r--gdb/buildsym-legacy.h67
-rw-r--r--gdb/buildsym.c446
-rw-r--r--gdb/buildsym.h60
-rw-r--r--gdb/c-exp.y39
-rw-r--r--gdb/c-lang.c28
-rw-r--r--gdb/c-typeprint.c326
-rw-r--r--gdb/c-valprint.c63
-rw-r--r--gdb/charset.c57
-rw-r--r--gdb/charset.h9
-rw-r--r--gdb/cli-out.c72
-rw-r--r--gdb/cli-out.h2
-rw-r--r--gdb/cli/cli-cmds.c214
-rw-r--r--gdb/cli/cli-decode.c166
-rw-r--r--gdb/cli/cli-decode.h11
-rw-r--r--gdb/cli/cli-dump.c38
-rw-r--r--gdb/cli/cli-interp.c78
-rw-r--r--gdb/cli/cli-logging.c45
-rw-r--r--gdb/cli/cli-script.c14
-rw-r--r--gdb/cli/cli-setshow.c6
-rw-r--r--gdb/cli/cli-style.c56
-rw-r--r--gdb/cli/cli-style.h3
-rw-r--r--gdb/cli/cli-utils.c6
-rw-r--r--gdb/coff-pe-read.c157
-rw-r--r--gdb/coffread.c168
-rw-r--r--gdb/command.h16
-rw-r--r--gdb/compile/compile-c-support.c180
-rw-r--r--gdb/compile/compile-c-symbols.c86
-rw-r--r--gdb/compile/compile-cplus-symbols.c104
-rw-r--r--gdb/compile/compile-cplus-types.c58
-rw-r--r--gdb/compile/compile-internal.h1
-rw-r--r--gdb/compile/compile-loc2c.c118
-rw-r--r--gdb/compile/compile-object-load.c109
-rw-r--r--gdb/compile/compile-object-run.c4
-rw-r--r--gdb/compile/compile.c49
-rw-r--r--gdb/complaints.c80
-rw-r--r--gdb/complaints.h34
-rw-r--r--gdb/completer.c104
-rw-r--r--gdb/completer.h1
-rw-r--r--gdb/config.in6
-rwxr-xr-xgdb/configure215
-rw-r--r--gdb/configure.ac52
-rw-r--r--gdb/configure.host3
-rw-r--r--gdb/configure.nat18
-rw-r--r--gdb/configure.tgt16
-rwxr-xr-xgdb/contrib/gdb-add-index.sh1
-rw-r--r--gdb/contrib/test_pubnames_and_indexes.py30
-rw-r--r--gdb/copying.awk6
-rw-r--r--gdb/copying.c1240
-rw-r--r--gdb/copyright.py2
-rw-r--r--gdb/corefile.c4
-rw-r--r--gdb/corelow.c101
-rw-r--r--gdb/cp-namespace.c108
-rw-r--r--gdb/cp-support.c114
-rw-r--r--gdb/cp-support.h9
-rw-r--r--gdb/cp-valprint.c64
-rw-r--r--gdb/cris-tdep.c14
-rw-r--r--gdb/csky-tdep.c327
-rw-r--r--gdb/ctfread.c87
-rw-r--r--gdb/d-exp.y12
-rw-r--r--gdb/d-namespace.c8
-rw-r--r--gdb/darwin-nat-info.c158
-rw-r--r--gdb/darwin-nat.c96
-rw-r--r--gdb/data-directory/Makefile.in1
-rw-r--r--gdb/dbxread.c189
-rw-r--r--gdb/dcache.c38
-rw-r--r--gdb/debug.c2
-rw-r--r--gdb/debuginfod-support.c155
-rw-r--r--gdb/debuginfod-support.h17
-rw-r--r--gdb/defs.h3
-rw-r--r--gdb/dictionary.c2
-rw-r--r--gdb/disasm-flags.h40
-rw-r--r--gdb/disasm-selftests.c6
-rw-r--r--gdb/disasm.c179
-rw-r--r--gdb/disasm.h52
-rw-r--r--gdb/displaced-stepping.c6
-rw-r--r--gdb/doc/gdb.texinfo570
-rw-r--r--gdb/doc/python.texi419
-rw-r--r--gdb/dtrace-probe.c4
-rw-r--r--gdb/dummy-frame.c8
-rw-r--r--gdb/dwarf2/abbrev-cache.c65
-rw-r--r--gdb/dwarf2/abbrev-cache.h66
-rw-r--r--gdb/dwarf2/abbrev.c170
-rw-r--r--gdb/dwarf2/abbrev.h11
-rw-r--r--gdb/dwarf2/cooked-index.c341
-rw-r--r--gdb/dwarf2/cooked-index.h336
-rw-r--r--gdb/dwarf2/cu.c6
-rw-r--r--gdb/dwarf2/cu.h11
-rw-r--r--gdb/dwarf2/expr.h2
-rw-r--r--gdb/dwarf2/file-and-dir.h18
-rw-r--r--gdb/dwarf2/frame.c12
-rw-r--r--gdb/dwarf2/index-cache.c50
-rw-r--r--gdb/dwarf2/index-common.c14
-rw-r--r--gdb/dwarf2/index-common.h4
-rw-r--r--gdb/dwarf2/index-write.c433
-rw-r--r--gdb/dwarf2/index-write.h2
-rw-r--r--gdb/dwarf2/line-header.c41
-rw-r--r--gdb/dwarf2/line-header.h11
-rw-r--r--gdb/dwarf2/loc.c571
-rw-r--r--gdb/dwarf2/loc.h10
-rw-r--r--gdb/dwarf2/macro.c6
-rw-r--r--gdb/dwarf2/mapped-index.h126
-rw-r--r--gdb/dwarf2/public.h3
-rw-r--r--gdb/dwarf2/read.c4813
-rw-r--r--gdb/dwarf2/read.h100
-rw-r--r--gdb/dwarf2/tag.h67
-rw-r--r--gdb/elfread.c26
-rw-r--r--gdb/eval.c152
-rw-r--r--gdb/event-top.c110
-rw-r--r--gdb/event-top.h6
-rw-r--r--gdb/exceptions.c16
-rw-r--r--gdb/exec.c57
-rw-r--r--gdb/expop.h74
-rw-r--r--gdb/expprint.c68
-rw-r--r--gdb/expression.h22
-rw-r--r--gdb/extension-priv.h6
-rw-r--r--gdb/extension.c20
-rw-r--r--gdb/extension.h8
-rw-r--r--gdb/f-array-walker.h83
-rw-r--r--gdb/f-exp.h182
-rw-r--r--gdb/f-exp.y418
-rw-r--r--gdb/f-lang.c297
-rw-r--r--gdb/f-lang.h30
-rw-r--r--gdb/f-typeprint.c104
-rw-r--r--gdb/f-valprint.c321
-rw-r--r--gdb/fbsd-nat.c409
-rw-r--r--gdb/fbsd-nat.h83
-rw-r--r--gdb/fbsd-tdep.c338
-rw-r--r--gdb/features/Makefile9
-rw-r--r--gdb/features/aarch64-tls.c14
-rw-r--r--gdb/features/aarch64-tls.xml (renamed from gdb/features/i386/64bit-pkeys.xml)8
-rw-r--r--gdb/features/arm/arm-m-system.c15
-rw-r--r--gdb/features/arm/arm-m-system.xml12
-rw-r--r--gdb/features/arm/arm-secext.c17
-rw-r--r--gdb/features/arm/arm-secext.xml15
-rw-r--r--gdb/features/arm/arm-tls.c14
-rw-r--r--gdb/features/arm/arm-tls.xml11
-rw-r--r--gdb/features/i386/64bit-pkeys.c14
-rw-r--r--gdb/features/i386/pkeys.c (renamed from gdb/features/i386/32bit-pkeys.c)4
-rw-r--r--gdb/features/i386/pkeys.xml (renamed from gdb/features/i386/32bit-pkeys.xml)0
-rw-r--r--gdb/features/loongarch/base32.c47
-rw-r--r--gdb/features/loongarch/base32.xml44
-rw-r--r--gdb/features/loongarch/base64.c47
-rw-r--r--gdb/features/loongarch/base64.xml44
-rw-r--r--gdb/filename-seen-cache.h1
-rw-r--r--gdb/filesystem.c10
-rw-r--r--gdb/findcmd.c10
-rw-r--r--gdb/findvar.c60
-rw-r--r--gdb/fork-child.c8
-rw-r--r--gdb/frame-base.c2
-rw-r--r--gdb/frame-unwind.c2
-rw-r--r--gdb/frame.c64
-rw-r--r--gdb/frv-tdep.c2
-rw-r--r--gdb/ft32-tdep.c2
-rw-r--r--gdb/gcore.c15
-rw-r--r--gdb/gcore.in2
-rw-r--r--gdb/gdb-demangle.c22
-rw-r--r--gdb/gdb_bfd.c8
-rw-r--r--gdb/gdbarch-components.py17
-rw-r--r--gdb/gdbarch-gen.h10
-rw-r--r--gdb/gdbarch.c966
-rw-r--r--gdb/gdbarch.h2
-rwxr-xr-xgdb/gdbarch.py52
-rw-r--r--gdb/gdbcopyright.py53
-rw-r--r--gdb/gdbthread.h41
-rw-r--r--gdb/gdbtypes.c589
-rw-r--r--gdb/gdbtypes.h129
-rw-r--r--gdb/glibc-tdep.c2
-rw-r--r--gdb/gnu-nat.c114
-rw-r--r--gdb/gnu-nat.h4
-rw-r--r--gdb/gnu-v3-abi.c42
-rw-r--r--gdb/go-exp.y18
-rw-r--r--gdb/go-lang.c6
-rw-r--r--gdb/go-typeprint.c2
-rw-r--r--gdb/go-valprint.c10
-rw-r--r--gdb/go32-nat.c286
-rw-r--r--gdb/guile/guile.c6
-rw-r--r--gdb/guile/scm-auto-load.c2
-rw-r--r--gdb/guile/scm-block.c34
-rw-r--r--gdb/guile/scm-breakpoint.c10
-rw-r--r--gdb/guile/scm-frame.c8
-rw-r--r--gdb/guile/scm-objfile.c4
-rw-r--r--gdb/guile/scm-param.c8
-rw-r--r--gdb/guile/scm-ports.c4
-rw-r--r--gdb/guile/scm-pretty-print.c44
-rw-r--r--gdb/guile/scm-string.c1
-rw-r--r--gdb/guile/scm-symbol.c30
-rw-r--r--gdb/guile/scm-symtab.c18
-rw-r--r--gdb/guile/scm-type.c5
-rw-r--r--gdb/h8300-tdep.c58
-rw-r--r--gdb/hppa-tdep.c149
-rw-r--r--gdb/i386-bsd-nat.c108
-rw-r--r--gdb/i386-fbsd-nat.c253
-rw-r--r--gdb/i386-fbsd-tdep.c443
-rw-r--r--gdb/i386-fbsd-tdep.h4
-rw-r--r--gdb/i386-linux-tdep.c10
-rw-r--r--gdb/i386-tdep.c113
-rw-r--r--gdb/i386-tdep.h6
-rw-r--r--gdb/i386-windows-tdep.c2
-rw-r--r--gdb/i387-tdep.c156
-rw-r--r--gdb/ia64-libunwind-tdep.c8
-rw-r--r--gdb/ia64-tdep.c148
-rw-r--r--gdb/ia64-vms-tdep.c2
-rw-r--r--gdb/inf-child.c2
-rw-r--r--gdb/inf-loop.c2
-rw-r--r--gdb/inf-ptrace.c59
-rw-r--r--gdb/inf-ptrace.h30
-rw-r--r--gdb/infcall.c84
-rw-r--r--gdb/infcmd.c247
-rw-r--r--gdb/inferior.c54
-rw-r--r--gdb/inferior.h25
-rw-r--r--gdb/inflow.c40
-rw-r--r--gdb/infrun.c565
-rw-r--r--gdb/infrun.h45
-rw-r--r--gdb/inline-frame.c25
-rw-r--r--gdb/interps.c4
-rw-r--r--gdb/interps.h2
-rw-r--r--gdb/jit.c204
-rw-r--r--gdb/jit.h17
-rw-r--r--gdb/language.c81
-rw-r--r--gdb/language.h14
-rw-r--r--gdb/linespec.c233
-rw-r--r--gdb/linespec.h7
-rw-r--r--gdb/linux-fork.c50
-rw-r--r--gdb/linux-nat.c575
-rw-r--r--gdb/linux-nat.h4
-rw-r--r--gdb/linux-record.c188
-rw-r--r--gdb/linux-tdep.c361
-rw-r--r--gdb/linux-thread-db.c66
-rw-r--r--gdb/lm32-tdep.c13
-rw-r--r--gdb/location.c573
-rw-r--r--gdb/location.h28
-rw-r--r--gdb/loongarch-linux-nat.c184
-rw-r--r--gdb/loongarch-linux-tdep.c201
-rw-r--r--gdb/loongarch-tdep.c450
-rw-r--r--gdb/loongarch-tdep.h49
-rw-r--r--gdb/m2-exp.y8
-rw-r--r--gdb/m2-lang.c38
-rw-r--r--gdb/m2-typeprint.c122
-rw-r--r--gdb/m2-valprint.c44
-rw-r--r--gdb/m32c-tdep.c17
-rw-r--r--gdb/m32r-tdep.c2
-rw-r--r--gdb/m68hc11-tdep.c97
-rw-r--r--gdb/machoread.c4
-rw-r--r--gdb/macrocmd.c63
-rw-r--r--gdb/macroexp.c2
-rw-r--r--gdb/macroscope.c7
-rw-r--r--gdb/macrotab.c7
-rw-r--r--gdb/main.c80
-rw-r--r--gdb/maint-test-options.c37
-rw-r--r--gdb/maint-test-settings.c2
-rw-r--r--gdb/maint.c163
-rwxr-xr-xgdb/make-target-delegates421
-rwxr-xr-xgdb/make-target-delegates.py340
-rw-r--r--gdb/mdebugread.c341
-rw-r--r--gdb/memattr.c82
-rw-r--r--gdb/mep-tdep.c15
-rw-r--r--gdb/mi/mi-cmd-break.c10
-rw-r--r--gdb/mi/mi-cmd-file.c4
-rw-r--r--gdb/mi/mi-cmd-stack.c27
-rw-r--r--gdb/mi/mi-cmd-var.c6
-rw-r--r--gdb/mi/mi-cmds.c55
-rw-r--r--gdb/mi/mi-cmds.h54
-rw-r--r--gdb/mi/mi-console.c10
-rw-r--r--gdb/mi/mi-interp.c155
-rw-r--r--gdb/mi/mi-main.c256
-rw-r--r--gdb/mi/mi-out.c32
-rw-r--r--gdb/mi/mi-out.h2
-rw-r--r--gdb/mi/mi-parse.c4
-rw-r--r--gdb/mi/mi-symbol-cmds.c26
-rw-r--r--gdb/minsyms.c173
-rw-r--r--gdb/minsyms.h19
-rw-r--r--gdb/mips-fbsd-tdep.c2
-rw-r--r--gdb/mips-linux-nat.c34
-rw-r--r--gdb/mips-linux-tdep.c14
-rw-r--r--gdb/mips-tdep.c654
-rw-r--r--gdb/mips-tdep.h13
-rw-r--r--gdb/mips64-obsd-tdep.c6
-rw-r--r--gdb/mn10300-tdep.c4
-rw-r--r--gdb/moxie-tdep.c14
-rw-r--r--gdb/msp430-tdep.c2
-rw-r--r--gdb/namespace.h2
-rw-r--r--gdb/nat/aarch64-hw-point.c624
-rw-r--r--gdb/nat/aarch64-hw-point.h126
-rw-r--r--gdb/nat/aarch64-linux-hw-point.c605
-rw-r--r--gdb/nat/aarch64-linux-hw-point.h105
-rw-r--r--gdb/nat/aarch64-linux.c4
-rw-r--r--gdb/nat/linux-btrace.c21
-rw-r--r--gdb/nat/linux-ptrace.c186
-rw-r--r--gdb/nat/linux-ptrace.h5
-rw-r--r--gdb/nat/windows-nat.c158
-rw-r--r--gdb/nat/windows-nat.h226
-rw-r--r--gdb/nat/x86-dregs.c2
-rw-r--r--gdb/nds32-tdep.c32
-rw-r--r--gdb/netbsd-nat.c131
-rw-r--r--gdb/netbsd-tdep.c48
-rw-r--r--gdb/nios2-tdep.c24
-rw-r--r--gdb/nto-procfs.c90
-rw-r--r--gdb/objc-lang.c32
-rw-r--r--gdb/objfiles.c54
-rw-r--r--gdb/objfiles.h2
-rw-r--r--gdb/obsd-tdep.c2
-rw-r--r--gdb/observable.c4
-rw-r--r--gdb/observable.h6
-rw-r--r--gdb/or1k-tdep.c60
-rw-r--r--gdb/osabi.c20
-rw-r--r--gdb/p-exp.y34
-rw-r--r--gdb/p-lang.c30
-rw-r--r--gdb/p-lang.h2
-rw-r--r--gdb/p-typeprint.c220
-rw-r--r--gdb/p-valprint.c102
-rw-r--r--gdb/pager.h91
-rw-r--r--gdb/parse.c113
-rw-r--r--gdb/parser-defs.h57
-rw-r--r--gdb/ppc-linux-tdep.c20
-rw-r--r--gdb/ppc-sysv-tdep.c5
-rw-r--r--gdb/ppc64-tdep.c2
-rw-r--r--gdb/printcmd.c422
-rw-r--r--gdb/probe.c5
-rw-r--r--gdb/proc-service.c2
-rw-r--r--gdb/procfs.c111
-rw-r--r--gdb/producer.c2
-rw-r--r--gdb/progspace.c16
-rw-r--r--gdb/psympriv.h8
-rw-r--r--gdb/psymtab.c351
-rw-r--r--gdb/psymtab.h2
-rw-r--r--gdb/python/lib/gdb/FrameDecorator.py11
-rw-r--r--gdb/python/lib/gdb/__init__.py31
-rw-r--r--gdb/python/lib/gdb/command/explore.py22
-rw-r--r--gdb/python/lib/gdb/command/prompt.py5
-rw-r--r--gdb/python/lib/gdb/printer/bound_registers.py7
-rw-r--r--gdb/python/lib/gdb/printing.py9
-rw-r--r--gdb/python/lib/gdb/styling.py50
-rw-r--r--gdb/python/lib/gdb/xmethod.py8
-rw-r--r--gdb/python/py-arch.c30
-rw-r--r--gdb/python/py-auto-load.c2
-rw-r--r--gdb/python/py-block.c16
-rw-r--r--gdb/python/py-breakpoint.c33
-rw-r--r--gdb/python/py-cmd.c18
-rw-r--r--gdb/python/py-connection.c12
-rw-r--r--gdb/python/py-event.h4
-rw-r--r--gdb/python/py-evts.c6
-rw-r--r--gdb/python/py-finishbreakpoint.c67
-rw-r--r--gdb/python/py-frame.c10
-rw-r--r--gdb/python/py-framefilter.c36
-rw-r--r--gdb/python/py-inferior.c33
-rw-r--r--gdb/python/py-infthread.c33
-rw-r--r--gdb/python/py-lazy-string.c2
-rw-r--r--gdb/python/py-linetable.c20
-rw-r--r--gdb/python/py-membuf.c80
-rw-r--r--gdb/python/py-micmd.c739
-rw-r--r--gdb/python/py-objfile.c10
-rw-r--r--gdb/python/py-param.c120
-rw-r--r--gdb/python/py-prettyprint.c42
-rw-r--r--gdb/python/py-progspace.c25
-rw-r--r--gdb/python/py-record-btrace.c25
-rw-r--r--gdb/python/py-record-full.c4
-rw-r--r--gdb/python/py-record.c2
-rw-r--r--gdb/python/py-registers.c37
-rw-r--r--gdb/python/py-signalevent.c2
-rw-r--r--gdb/python/py-symbol.c47
-rw-r--r--gdb/python/py-symtab.c44
-rw-r--r--gdb/python/py-tui.c18
-rw-r--r--gdb/python/py-type.c86
-rw-r--r--gdb/python/py-unwind.c12
-rw-r--r--gdb/python/py-utils.c88
-rw-r--r--gdb/python/py-value.c102
-rw-r--r--gdb/python/py-xmethods.c18
-rw-r--r--gdb/python/python-internal.h90
-rw-r--r--gdb/python/python.c373
-rw-r--r--gdb/ravenscar-thread.c16
-rw-r--r--gdb/record-btrace.c90
-rw-r--r--gdb/record-full.c296
-rw-r--r--gdb/record.c20
-rw-r--r--gdb/regcache-dump.c35
-rw-r--r--gdb/regcache.c98
-rw-r--r--gdb/reggroups.c300
-rw-r--r--gdb/reggroups.h94
-rw-r--r--gdb/remote-fileio.c4
-rw-r--r--gdb/remote-notif.c16
-rw-r--r--gdb/remote-sim.c97
-rw-r--r--gdb/remote.c446
-rw-r--r--gdb/reverse.c16
-rw-r--r--gdb/riscv-tdep.c248
-rw-r--r--gdb/rl78-tdep.c2
-rw-r--r--gdb/rs6000-aix-nat.c18
-rw-r--r--gdb/rs6000-tdep.c1235
-rw-r--r--gdb/run-on-main-thread.c20
-rw-r--r--gdb/run-on-main-thread.h4
-rw-r--r--gdb/rust-exp.h66
-rw-r--r--gdb/rust-lang.c322
-rw-r--r--gdb/rust-lang.h23
-rw-r--r--gdb/rust-parse.c86
-rw-r--r--gdb/s12z-tdep.c29
-rw-r--r--gdb/s390-linux-nat.c8
-rw-r--r--gdb/s390-linux-tdep.c8
-rw-r--r--gdb/s390-tdep.c64
-rw-r--r--gdb/score-tdep.c1527
-rw-r--r--gdb/score-tdep.h50
-rw-r--r--gdb/selftest-arch.c29
-rw-r--r--gdb/selftest-arch.h3
-rw-r--r--gdb/ser-base.c22
-rw-r--r--gdb/ser-go32.c30
-rw-r--r--gdb/ser-mingw.c1
-rw-r--r--gdb/ser-pipe.c6
-rw-r--r--gdb/ser-tcp.c4
-rw-r--r--gdb/ser-unix.c30
-rw-r--r--gdb/serial.c59
-rw-r--r--gdb/serial.h2
-rw-r--r--gdb/sh-tdep.c2
-rw-r--r--gdb/skip.c55
-rw-r--r--gdb/sol-thread.c46
-rw-r--r--gdb/sol2-tdep.c2
-rw-r--r--gdb/solib-aix.c2
-rw-r--r--gdb/solib-dsbt.c82
-rw-r--r--gdb/solib-frv.c82
-rw-r--r--gdb/solib-svr4.c31
-rw-r--r--gdb/solib.c157
-rw-r--r--gdb/solib.h23
-rw-r--r--gdb/source-cache.c104
-rw-r--r--gdb/source.c163
-rw-r--r--gdb/sparc-tdep.c9
-rw-r--r--gdb/sparc64-tdep.c16
-rw-r--r--gdb/split-name.c81
-rw-r--r--gdb/split-name.h45
-rw-r--r--gdb/stabsread.c393
-rw-r--r--gdb/stack.c313
-rw-r--r--gdb/stack.h17
-rw-r--r--gdb/stap-probe.c21
-rw-r--r--gdb/std-operator.def19
-rw-r--r--gdb/symfile-debug.c220
-rw-r--r--gdb/symfile-mem.c2
-rw-r--r--gdb/symfile.c194
-rw-r--r--gdb/symmisc.c557
-rw-r--r--gdb/symtab.c798
-rw-r--r--gdb/symtab.h693
-rw-r--r--gdb/system-gdbinit/elinos.py2
-rw-r--r--gdb/system-gdbinit/wrs-linux.py4
-rw-r--r--gdb/target-dcache.c6
-rw-r--r--gdb/target-debug.h24
-rw-r--r--gdb/target-delegates.c1438
-rw-r--r--gdb/target-descriptions.c194
-rw-r--r--gdb/target-descriptions.h2
-rw-r--r--gdb/target.c315
-rw-r--r--gdb/target.h47
-rw-r--r--gdb/target/target.c190
-rw-r--r--gdb/target/target.h31
-rw-r--r--gdb/target/waitstatus.h2
-rw-r--r--gdb/testsuite/Makefile.in2
-rw-r--r--gdb/testsuite/README25
-rw-r--r--gdb/testsuite/boards/native-extended-gdbserver.exp2
-rw-r--r--gdb/testsuite/gdb.ada/arrayptr.exp44
-rw-r--r--gdb/testsuite/gdb.ada/char_enum_unicode.exp52
-rw-r--r--gdb/testsuite/gdb.ada/char_enum_unicode/foo.adb30
-rw-r--r--gdb/testsuite/gdb.ada/char_enum_unicode/pck.adb21
-rw-r--r--gdb/testsuite/gdb.ada/char_enum_unicode/pck.ads20
-rw-r--r--gdb/testsuite/gdb.ada/dynamic-iface.exp44
-rw-r--r--gdb/testsuite/gdb.ada/dynamic-iface/concrete.adb23
-rw-r--r--gdb/testsuite/gdb.ada/dynamic-iface/concrete.ads36
-rw-r--r--gdb/testsuite/gdb.ada/dynamic-iface/main.adb24
-rw-r--r--gdb/testsuite/gdb.ada/float-bits.exp70
-rw-r--r--gdb/testsuite/gdb.ada/float-bits/prog.adb22
-rw-r--r--gdb/testsuite/gdb.ada/formatted_ref.exp21
-rw-r--r--gdb/testsuite/gdb.ada/ghost.exp37
-rw-r--r--gdb/testsuite/gdb.ada/ghost/gpck.ads18
-rw-r--r--gdb/testsuite/gdb.ada/ghost/main.adb22
-rw-r--r--gdb/testsuite/gdb.ada/ghost/pck.ads19
-rw-r--r--gdb/testsuite/gdb.ada/inline-section-gc.exp41
-rw-r--r--gdb/testsuite/gdb.ada/inline-section-gc/callee.adb23
-rw-r--r--gdb/testsuite/gdb.ada/inline-section-gc/callee.ads17
-rw-r--r--gdb/testsuite/gdb.ada/inline-section-gc/caller.adb21
-rw-r--r--gdb/testsuite/gdb.ada/interface.exp5
-rw-r--r--gdb/testsuite/gdb.ada/iwide.exp5
-rw-r--r--gdb/testsuite/gdb.ada/literals.exp39
-rw-r--r--gdb/testsuite/gdb.ada/mi_interface.exp5
-rw-r--r--gdb/testsuite/gdb.ada/mi_prot.exp2
-rw-r--r--gdb/testsuite/gdb.ada/non-ascii-latin-1.exp50
-rw-r--r--gdb/testsuite/gdb.ada/non-ascii-latin-1/pack.adb28
-rw-r--r--gdb/testsuite/gdb.ada/non-ascii-latin-1/pack.ads21
-rw-r--r--gdb/testsuite/gdb.ada/non-ascii-latin-1/prog.adb23
-rw-r--r--gdb/testsuite/gdb.ada/non-ascii-latin-3.exp50
-rw-r--r--gdb/testsuite/gdb.ada/non-ascii-latin-3/pack.adb28
-rw-r--r--gdb/testsuite/gdb.ada/non-ascii-latin-3/pack.ads21
-rw-r--r--gdb/testsuite/gdb.ada/non-ascii-latin-3/prog.adb24
-rw-r--r--gdb/testsuite/gdb.ada/non-ascii-utf-8.exp57
-rw-r--r--gdb/testsuite/gdb.ada/non-ascii-utf-8/pack.adb43
-rw-r--r--gdb/testsuite/gdb.ada/non-ascii-utf-8/pack.ads24
-rw-r--r--gdb/testsuite/gdb.ada/non-ascii-utf-8/prog.adb36
-rw-r--r--gdb/testsuite/gdb.ada/ptype_field.exp31
-rw-r--r--gdb/testsuite/gdb.ada/tagged.exp5
-rw-r--r--gdb/testsuite/gdb.ada/tagged_access.exp5
-rw-r--r--gdb/testsuite/gdb.ada/unchecked_union.exp6
-rw-r--r--gdb/testsuite/gdb.ada/unchecked_union/unchecked_union.adb6
-rw-r--r--gdb/testsuite/gdb.ada/widewide.exp23
-rw-r--r--gdb/testsuite/gdb.ada/widewide/foo.adb3
-rw-r--r--gdb/testsuite/gdb.ada/widewide/pck.adb10
-rw-r--r--gdb/testsuite/gdb.ada/widewide/pck.ads2
-rw-r--r--gdb/testsuite/gdb.arch/altivec-regs.exp8
-rw-r--r--gdb/testsuite/gdb.arch/amd64-entry-value.exp2
-rw-r--r--gdb/testsuite/gdb.arch/arm-bl-branch-dest.exp2
-rw-r--r--gdb/testsuite/gdb.arch/vsx-regs.exp31
-rw-r--r--gdb/testsuite/gdb.base/all-architectures.exp.tcl32
-rw-r--r--gdb/testsuite/gdb.base/annota1.exp73
-rw-r--r--gdb/testsuite/gdb.base/array-indices.exp20
-rw-r--r--gdb/testsuite/gdb.base/array-indices.exp.tcl175
-rw-r--r--gdb/testsuite/gdb.base/array-repeat.c63
-rw-r--r--gdb/testsuite/gdb.base/array-repeat.exp20
-rw-r--r--gdb/testsuite/gdb.base/array-repeat.exp.tcl138
-rw-r--r--gdb/testsuite/gdb.base/attach-pie-misread.exp10
-rw-r--r--gdb/testsuite/gdb.base/attach-pie-noexec.exp5
-rw-r--r--gdb/testsuite/gdb.base/attach.exp11
-rw-r--r--gdb/testsuite/gdb.base/bitshift.exp368
-rw-r--r--gdb/testsuite/gdb.base/break-interp.exp2
-rw-r--r--gdb/testsuite/gdb.base/break.exp5
-rw-r--r--gdb/testsuite/gdb.base/cached-source-file.exp38
-rw-r--r--gdb/testsuite/gdb.base/charset.c2
-rw-r--r--gdb/testsuite/gdb.base/clear_non_user_bp.exp94
-rw-r--r--gdb/testsuite/gdb.base/cli-suppress-notification.c26
-rw-r--r--gdb/testsuite/gdb.base/cli-suppress-notification.exp39
-rw-r--r--gdb/testsuite/gdb.base/completion.exp7
-rw-r--r--gdb/testsuite/gdb.base/dbx.exp308
-rw-r--r--gdb/testsuite/gdb.base/default.exp4
-rw-r--r--gdb/testsuite/gdb.base/dfp-test.exp1
-rw-r--r--gdb/testsuite/gdb.base/ending-run.exp16
-rw-r--r--gdb/testsuite/gdb.base/eof-exit.exp88
-rw-r--r--gdb/testsuite/gdb.base/execl-update-breakpoints.exp16
-rw-r--r--gdb/testsuite/gdb.base/fullname.exp12
-rw-r--r--gdb/testsuite/gdb.base/fullpath-expand.exp14
-rw-r--r--gdb/testsuite/gdb.base/info-macros.exp14
-rw-r--r--gdb/testsuite/gdb.base/jit-elf-fork.exp36
-rw-r--r--gdb/testsuite/gdb.base/jit-elf.exp24
-rw-r--r--gdb/testsuite/gdb.base/jit-reader.exp10
-rw-r--r--gdb/testsuite/gdb.base/list.exp81
-rw-r--r--gdb/testsuite/gdb.base/macscp.exp11
-rw-r--r--gdb/testsuite/gdb.base/maint.exp14
-rw-r--r--gdb/testsuite/gdb.base/page.exp7
-rw-r--r--gdb/testsuite/gdb.base/parse_number.exp105
-rw-r--r--gdb/testsuite/gdb.base/printcmds.c2
-rw-r--r--gdb/testsuite/gdb.base/printcmds.exp23
-rw-r--r--gdb/testsuite/gdb.base/remote.exp5
-rw-r--r--gdb/testsuite/gdb.base/return-nodebug.exp7
-rw-r--r--gdb/testsuite/gdb.base/retval-large-struct.c45
-rw-r--r--gdb/testsuite/gdb.base/retval-large-struct.exp37
-rw-r--r--gdb/testsuite/gdb.base/settings.exp10
-rw-r--r--gdb/testsuite/gdb.base/solib-search.exp2
-rw-r--r--gdb/testsuite/gdb.base/source-dir.exp41
-rw-r--r--gdb/testsuite/gdb.base/stap-probe.c22
-rw-r--r--gdb/testsuite/gdb.base/stap-probe.exp146
-rw-r--r--gdb/testsuite/gdb.base/style.exp110
-rw-r--r--gdb/testsuite/gdb.base/until-trailing-insns.c35
-rw-r--r--gdb/testsuite/gdb.base/until-trailing-insns.exp183
-rw-r--r--gdb/testsuite/gdb.base/vfork-follow-parent.c46
-rw-r--r--gdb/testsuite/gdb.base/vfork-follow-parent.exp80
-rw-r--r--gdb/testsuite/gdb.base/watch-before-fork.c29
-rw-r--r--gdb/testsuite/gdb.base/watch-before-fork.exp99
-rw-r--r--gdb/testsuite/gdb.cp/align.exp25
-rw-r--r--gdb/testsuite/gdb.cp/array-indices.exp22
-rw-r--r--gdb/testsuite/gdb.cp/array-repeat.exp22
-rw-r--r--gdb/testsuite/gdb.cp/casts.cc20
-rw-r--r--gdb/testsuite/gdb.cp/casts.exp6
-rw-r--r--gdb/testsuite/gdb.cp/overload.cc10
-rw-r--r--gdb/testsuite/gdb.cp/overload.exp3
-rw-r--r--gdb/testsuite/gdb.cp/ptype-flags.cc23
-rw-r--r--gdb/testsuite/gdb.cp/ptype-flags.exp88
-rw-r--r--gdb/testsuite/gdb.cp/templates.cc47
-rw-r--r--gdb/testsuite/gdb.cp/templates.exp67
-rw-r--r--gdb/testsuite/gdb.debuginfod/fetch_src_and_symbols.exp93
-rw-r--r--gdb/testsuite/gdb.dlang/demangle.exp2
-rw-r--r--gdb/testsuite/gdb.dlang/expression.exp4
-rw-r--r--gdb/testsuite/gdb.dwarf2/calling-convention.c35
-rw-r--r--gdb/testsuite/gdb.dwarf2/calling-convention.exp97
-rw-r--r--gdb/testsuite/gdb.dwarf2/dw2-bad-elf.exp28
-rw-r--r--gdb/testsuite/gdb.dwarf2/dw2-disasm-over-non-stmt.exp56
-rw-r--r--gdb/testsuite/gdb.dwarf2/dw2-inline-header-1.exp70
-rw-r--r--gdb/testsuite/gdb.dwarf2/dw2-inline-header-2.exp66
-rw-r--r--gdb/testsuite/gdb.dwarf2/dw2-inline-header-3.exp66
-rw-r--r--gdb/testsuite/gdb.dwarf2/dw2-inline-many-frames.exp168
-rw-r--r--gdb/testsuite/gdb.dwarf2/dw2-inline-param.exp8
-rw-r--r--gdb/testsuite/gdb.dwarf2/dw2-inline-small-func.exp34
-rw-r--r--gdb/testsuite/gdb.dwarf2/dw2-inline-stepping.exp46
-rw-r--r--gdb/testsuite/gdb.dwarf2/dw2-inline-with-lexical-scope.exp28
-rw-r--r--gdb/testsuite/gdb.dwarf2/dw2-is-stmt-2.exp156
-rw-r--r--gdb/testsuite/gdb.dwarf2/dw2-is-stmt.exp58
-rw-r--r--gdb/testsuite/gdb.dwarf2/dw2-line-number-zero.exp60
-rw-r--r--gdb/testsuite/gdb.dwarf2/dw2-lines.exp39
-rw-r--r--gdb/testsuite/gdb.dwarf2/dw2-missing-cu-tag.exp3
-rw-r--r--gdb/testsuite/gdb.dwarf2/dw2-out-of-range-end-of-seq.exp24
-rw-r--r--gdb/testsuite/gdb.dwarf2/dw2-prologue-end.c28
-rw-r--r--gdb/testsuite/gdb.dwarf2/dw2-prologue-end.exp106
-rw-r--r--gdb/testsuite/gdb.dwarf2/dw2-ranges-base.exp48
-rw-r--r--gdb/testsuite/gdb.dwarf2/dw2-ranges-func.exp120
-rw-r--r--gdb/testsuite/gdb.dwarf2/dw2-step-out-of-function-no-stmt.exp36
-rw-r--r--gdb/testsuite/gdb.dwarf2/dw2-symtab-includes-lookup.exp2
-rw-r--r--gdb/testsuite/gdb.dwarf2/dw2-symtab-includes.exp2
-rw-r--r--gdb/testsuite/gdb.dwarf2/dw2-vendor-extended-opcode.exp14
-rw-r--r--gdb/testsuite/gdb.dwarf2/fission-multi-cu.exp64
-rw-r--r--gdb/testsuite/gdb.dwarf2/fortran-var-string.c31
-rw-r--r--gdb/testsuite/gdb.dwarf2/fortran-var-string.exp175
-rw-r--r--gdb/testsuite/gdb.dwarf2/gdb-index-cxx.exp35
-rw-r--r--gdb/testsuite/gdb.dwarf2/gdb-index-nodebug.exp8
-rw-r--r--gdb/testsuite/gdb.dwarf2/gdb-index.exp5
-rw-r--r--gdb/testsuite/gdb.dwarf2/imported-unit-bp.exp.tcl48
-rw-r--r--gdb/testsuite/gdb.dwarf2/index.cc29
-rw-r--r--gdb/testsuite/gdb.dwarf2/locexpr-data-member-location.exp53
-rw-r--r--gdb/testsuite/gdb.dwarf2/negative-data-member-location.c31
-rw-r--r--gdb/testsuite/gdb.dwarf2/negative-data-member-location.exp77
-rw-r--r--gdb/testsuite/gdb.dwarf2/struct-decl.exp74
-rw-r--r--gdb/testsuite/gdb.dwarf2/subrange-enum.exp78
-rw-r--r--gdb/testsuite/gdb.fortran/array-indices.exp200
-rw-r--r--gdb/testsuite/gdb.fortran/array-repeat.exp167
-rw-r--r--gdb/testsuite/gdb.fortran/array-repeat.f9050
-rw-r--r--gdb/testsuite/gdb.fortran/array-slices-repeat.f9099
-rw-r--r--gdb/testsuite/gdb.fortran/array-slices.exp24
-rw-r--r--gdb/testsuite/gdb.fortran/array-slices.f902
-rw-r--r--gdb/testsuite/gdb.fortran/assumedrank.exp99
-rw-r--r--gdb/testsuite/gdb.fortran/assumedrank.f9049
-rw-r--r--gdb/testsuite/gdb.fortran/complex.exp10
-rw-r--r--gdb/testsuite/gdb.fortran/complex.f907
-rw-r--r--gdb/testsuite/gdb.fortran/intrinsics.exp46
-rw-r--r--gdb/testsuite/gdb.fortran/lbound-ubound.F9049
-rw-r--r--gdb/testsuite/gdb.fortran/lbound-ubound.exp55
-rw-r--r--gdb/testsuite/gdb.fortran/namelist.exp50
-rw-r--r--gdb/testsuite/gdb.fortran/namelist.f9027
-rw-r--r--gdb/testsuite/gdb.fortran/nested-funcs-2.exp29
-rwxr-xr-xgdb/testsuite/gdb.fortran/oop_extend_type.exp190
-rwxr-xr-xgdb/testsuite/gdb.fortran/oop_extend_type.f9069
-rw-r--r--gdb/testsuite/gdb.fortran/size.exp84
-rw-r--r--gdb/testsuite/gdb.fortran/size.f90213
-rw-r--r--gdb/testsuite/gdb.fortran/type-kinds.exp2
-rw-r--r--gdb/testsuite/gdb.fortran/types.exp34
-rw-r--r--gdb/testsuite/gdb.fortran/vla-value-sub-finish.exp2
-rw-r--r--gdb/testsuite/gdb.fortran/vla-value-sub.exp2
-rw-r--r--gdb/testsuite/gdb.gdb/unittest.exp25
-rw-r--r--gdb/testsuite/gdb.go/methods.exp2
-rw-r--r--gdb/testsuite/gdb.linespec/break-ask.exp23
-rw-r--r--gdb/testsuite/gdb.linespec/cpcompletion.exp437
-rw-r--r--gdb/testsuite/gdb.linespec/cpls-ops.exp53
-rw-r--r--gdb/testsuite/gdb.linespec/cpls.cc110
-rw-r--r--gdb/testsuite/gdb.linespec/errors.exp (renamed from gdb/testsuite/gdb.base/linespecs.exp)20
-rw-r--r--gdb/testsuite/gdb.linespec/macro-relative.exp22
-rw-r--r--gdb/testsuite/gdb.mi/interrupt-thread-group.exp16
-rw-r--r--gdb/testsuite/gdb.mi/mi-add-inferior.exp130
-rw-r--r--gdb/testsuite/gdb.mi/mi-break-qualified.exp2
-rw-r--r--gdb/testsuite/gdb.mi/mi-catch-cpp-exceptions.exp2
-rw-r--r--gdb/testsuite/gdb.mi/mi-cmd-user-context.c73
-rw-r--r--gdb/testsuite/gdb.mi/mi-cmd-user-context.exp157
-rw-r--r--gdb/testsuite/gdb.mi/mi-exec-run.exp72
-rw-r--r--gdb/testsuite/gdb.mi/mi-multi-commands.exp131
-rw-r--r--gdb/testsuite/gdb.mi/mi-var-cmd.exp2
-rw-r--r--gdb/testsuite/gdb.mi/mi-var-cp.exp2
-rw-r--r--gdb/testsuite/gdb.mi/mi-var-rtti.exp2
-rw-r--r--gdb/testsuite/gdb.mi/user-selected-context-sync.exp138
-rw-r--r--gdb/testsuite/gdb.multi/attach-no-multi-process.c34
-rw-r--r--gdb/testsuite/gdb.multi/attach-no-multi-process.exp91
-rw-r--r--gdb/testsuite/gdb.multi/multi-target-info-inferiors.exp8
-rw-r--r--gdb/testsuite/gdb.python/py-arch.exp15
-rw-r--r--gdb/testsuite/gdb.python/py-charset.exp50
-rw-r--r--gdb/testsuite/gdb.python/py-events.exp11
-rw-r--r--gdb/testsuite/gdb.python/py-format-address.c32
-rw-r--r--gdb/testsuite/gdb.python/py-format-address.exp178
-rw-r--r--gdb/testsuite/gdb.python/py-format-string.exp57
-rw-r--r--gdb/testsuite/gdb.python/py-framefilter-mi.exp4
-rw-r--r--gdb/testsuite/gdb.python/py-inferior.exp8
-rw-r--r--gdb/testsuite/gdb.python/py-infthread.exp5
-rw-r--r--gdb/testsuite/gdb.python/py-lookup-type.exp26
-rw-r--r--gdb/testsuite/gdb.python/py-mi-cmd.exp339
-rw-r--r--gdb/testsuite/gdb.python/py-mi-cmd.py120
-rw-r--r--gdb/testsuite/gdb.python/py-mi-var-info-path-expression.py12
-rw-r--r--gdb/testsuite/gdb.python/py-mi.exp4
-rw-r--r--gdb/testsuite/gdb.python/py-parameter.exp40
-rw-r--r--gdb/testsuite/gdb.python/py-record-btrace.exp6
-rw-r--r--gdb/testsuite/gdb.python/py-send-packet.py58
-rw-r--r--gdb/testsuite/gdb.python/py-shared.exp7
-rw-r--r--gdb/testsuite/gdb.python/py-source-styling.c29
-rw-r--r--gdb/testsuite/gdb.python/py-source-styling.exp64
-rw-r--r--gdb/testsuite/gdb.python/py-type.c16
-rw-r--r--gdb/testsuite/gdb.python/py-type.exp88
-rw-r--r--gdb/testsuite/gdb.python/py-value.exp55
-rw-r--r--gdb/testsuite/gdb.reverse/ppc_record_test_isa_2_06.c39
-rw-r--r--gdb/testsuite/gdb.reverse/ppc_record_test_isa_2_06.exp105
-rw-r--r--gdb/testsuite/gdb.reverse/ppc_record_test_isa_3_1.c95
-rw-r--r--gdb/testsuite/gdb.reverse/ppc_record_test_isa_3_1.exp341
-rw-r--r--gdb/testsuite/gdb.rust/expr.exp2
-rw-r--r--gdb/testsuite/gdb.rust/fnfield.exp38
-rw-r--r--gdb/testsuite/gdb.rust/fnfield.rs39
-rw-r--r--gdb/testsuite/gdb.rust/simple.exp3
-rw-r--r--gdb/testsuite/gdb.rust/unicode.exp51
-rw-r--r--gdb/testsuite/gdb.rust/unicode.rs26
-rw-r--r--gdb/testsuite/gdb.rust/unsized.exp11
-rw-r--r--gdb/testsuite/gdb.rust/unsized.rs2
-rw-r--r--gdb/testsuite/gdb.server/server-pipe.exp84
-rw-r--r--gdb/testsuite/gdb.threads/access-mem-running-thread-exit.exp30
-rw-r--r--gdb/testsuite/gdb.threads/clone-new-thread-event.c16
-rw-r--r--gdb/testsuite/gdb.threads/clone-new-thread-event.exp2
-rw-r--r--gdb/testsuite/gdb.threads/current-lwp-dead.c101
-rw-r--r--gdb/testsuite/gdb.threads/current-lwp-dead.exp23
-rw-r--r--gdb/testsuite/gdb.threads/fork-plus-threads.exp33
-rw-r--r--gdb/testsuite/gdb.threads/ia64-sigill.exp2
-rw-r--r--gdb/testsuite/gdb.threads/killed-outside.exp4
-rw-r--r--gdb/testsuite/gdb.threads/next-fork-other-thread.c92
-rw-r--r--gdb/testsuite/gdb.threads/next-fork-other-thread.exp116
-rw-r--r--gdb/testsuite/gdb.threads/process-exit-status-is-leader-exit-status.c64
-rw-r--r--gdb/testsuite/gdb.threads/process-exit-status-is-leader-exit-status.exp46
-rw-r--r--gdb/testsuite/gdb.threads/step-over-exec.exp4
-rw-r--r--gdb/testsuite/gdb.threads/vfork-multi-inferior-sleep.c25
-rw-r--r--gdb/testsuite/gdb.threads/vfork-multi-inferior.c55
-rw-r--r--gdb/testsuite/gdb.threads/vfork-multi-inferior.exp115
-rw-r--r--gdb/testsuite/gdb.threads/vfork-multi-thread.c88
-rw-r--r--gdb/testsuite/gdb.threads/vfork-multi-thread.exp96
-rw-r--r--gdb/testsuite/gdb.tui/basic.exp4
-rw-r--r--gdb/testsuite/gdb.tui/empty.exp14
-rw-r--r--gdb/testsuite/gdb.tui/info-win.exp61
-rw-r--r--gdb/testsuite/gdb.tui/new-layout.exp100
-rw-r--r--gdb/testsuite/gdb.tui/regs.exp30
-rw-r--r--gdb/testsuite/gdb.tui/scroll.exp4
-rw-r--r--gdb/testsuite/gdb.tui/tuiterm.exp729
-rw-r--r--gdb/testsuite/gdb.tui/winheight.exp77
-rw-r--r--gdb/testsuite/gdb.tui/winwidth.exp63
-rw-r--r--gdb/testsuite/lib/ada.exp8
-rw-r--r--gdb/testsuite/lib/compiler.c9
-rwxr-xr-xgdb/testsuite/lib/compiler.cc9
-rw-r--r--gdb/testsuite/lib/dwarf.exp72
-rw-r--r--gdb/testsuite/lib/fortran.exp3
-rw-r--r--gdb/testsuite/lib/gdb.exp345
-rw-r--r--gdb/testsuite/lib/jit-elf-helpers.exp8
-rw-r--r--gdb/testsuite/lib/mi-support.exp51
-rw-r--r--gdb/testsuite/lib/rust-support.exp2
-rw-r--r--gdb/testsuite/lib/tuiterm.exp197
-rw-r--r--gdb/thread.c83
-rw-r--r--gdb/top.c303
-rw-r--r--gdb/top.h2
-rw-r--r--gdb/tracectf.c2
-rw-r--r--gdb/tracefile-tfile.c4
-rw-r--r--gdb/tracefile.c5
-rw-r--r--gdb/tracepoint.c490
-rw-r--r--gdb/tracepoint.h5
-rw-r--r--gdb/tui/tui-command.c6
-rw-r--r--gdb/tui/tui-command.h2
-rw-r--r--gdb/tui/tui-disasm.c12
-rw-r--r--gdb/tui/tui-interp.c4
-rw-r--r--gdb/tui/tui-io.c13
-rw-r--r--gdb/tui/tui-layout.c418
-rw-r--r--gdb/tui/tui-layout.h135
-rw-r--r--gdb/tui/tui-regs.c119
-rw-r--r--gdb/tui/tui-regs.h9
-rw-r--r--gdb/tui/tui-source.c2
-rw-r--r--gdb/tui/tui-stack.c8
-rw-r--r--gdb/tui/tui-win.c146
-rw-r--r--gdb/tui/tui-winsource.c2
-rw-r--r--gdb/tui/tui.c26
-rw-r--r--gdb/tui/tui.h14
-rw-r--r--gdb/typeprint.c100
-rw-r--r--gdb/typeprint.h2
-rw-r--r--gdb/ui-file.c72
-rw-r--r--gdb/ui-file.h174
-rw-r--r--gdb/ui-out.c4
-rw-r--r--gdb/ui-out.h16
-rw-r--r--gdb/ui-style.c2
-rw-r--r--gdb/unittests/command-def-selftests.c36
-rw-r--r--gdb/unittests/parallel-for-selftests.c2
-rw-r--r--gdb/unittests/path-join-selftests.c73
-rw-r--r--gdb/unittests/unique_xmalloc_ptr_char.c57
-rw-r--r--gdb/user-regs.c4
-rw-r--r--gdb/utils.c1338
-rw-r--r--gdb/utils.h310
-rw-r--r--gdb/valarith.c274
-rw-r--r--gdb/valops.c75
-rw-r--r--gdb/valprint.c505
-rw-r--r--gdb/valprint.h6
-rw-r--r--gdb/value.c122
-rw-r--r--gdb/value.h16
-rw-r--r--gdb/varobj.c20
-rw-r--r--gdb/version.in2
-rw-r--r--gdb/windows-nat.c639
-rw-r--r--gdb/windows-tdep.c31
-rw-r--r--gdb/x86-bsd-nat.c4
-rw-r--r--gdb/x86-bsd-nat.h3
-rw-r--r--gdb/x86-fbsd-nat.c45
-rw-r--r--gdb/x86-fbsd-nat.h36
-rw-r--r--gdb/x86-linux-nat.c3
-rw-r--r--gdb/x86-linux-nat.h2
-rw-r--r--gdb/x86-nat.c92
-rw-r--r--gdb/x86-nat.h5
-rw-r--r--gdb/xcoffread.c244
-rw-r--r--gdb/xml-support.c10
-rw-r--r--gdb/xml-support.h2
-rw-r--r--gdb/xtensa-tdep.c57
-rw-r--r--gdb/xtensa-tdep.h16
-rw-r--r--gdb/z80-tdep.c17
-rw-r--r--gdbserver/Makefile.in5
-rw-r--r--gdbserver/acinclude.m43
-rw-r--r--gdbserver/ax.cc9
-rwxr-xr-xgdbserver/configure85
-rw-r--r--gdbserver/configure.ac1
-rw-r--r--gdbserver/configure.srv1
-rw-r--r--gdbserver/debug.cc28
-rw-r--r--gdbserver/debug.h41
-rw-r--r--gdbserver/fork-child.cc6
-rw-r--r--gdbserver/gdbthread.h1
-rw-r--r--gdbserver/inferiors.cc26
-rw-r--r--gdbserver/linux-aarch64-ipa.cc8
-rw-r--r--gdbserver/linux-aarch64-low.cc56
-rw-r--r--gdbserver/linux-aarch64-tdesc.cc11
-rw-r--r--gdbserver/linux-aarch64-tdesc.h2
-rw-r--r--gdbserver/linux-arm-tdesc.cc2
-rw-r--r--gdbserver/linux-low.cc1574
-rw-r--r--gdbserver/linux-low.h16
-rw-r--r--gdbserver/linux-s390-low.cc5
-rw-r--r--gdbserver/linux-x86-low.cc5
-rw-r--r--gdbserver/mem-break.cc229
-rw-r--r--gdbserver/netbsd-aarch64-low.cc2
-rw-r--r--gdbserver/notif.cc10
-rw-r--r--gdbserver/remote-utils.cc74
-rw-r--r--gdbserver/server.cc217
-rw-r--r--gdbserver/target.cc134
-rw-r--r--gdbserver/target.h44
-rw-r--r--gdbserver/thread-db.cc44
-rw-r--r--gdbserver/tracepoint.cc48
-rw-r--r--gdbserver/win32-i386-low.cc20
-rw-r--r--gdbserver/win32-low.cc298
-rw-r--r--gdbserver/win32-low.h5
-rw-r--r--gdbsupport/Makefile.am8
-rw-r--r--gdbsupport/Makefile.in34
-rw-r--r--gdbsupport/acinclude.m43
-rw-r--r--gdbsupport/buildargv.h204
-rw-r--r--gdbsupport/common-defs.h3
-rw-r--r--gdbsupport/common-exceptions.h19
-rw-r--r--gdbsupport/common.m431
-rw-r--r--gdbsupport/compiler-type.m459
-rwxr-xr-xgdbsupport/configure100
-rw-r--r--gdbsupport/configure.ac4
-rw-r--r--gdbsupport/event-pipe.cc101
-rw-r--r--gdbsupport/event-pipe.h60
-rw-r--r--gdbsupport/gdb-hashtab.cc44
-rw-r--r--gdbsupport/gdb-hashtab.h50
-rw-r--r--gdbsupport/gdb_obstack.cc (renamed from gdb/gdb_obstack.c)2
-rw-r--r--gdbsupport/gdb_obstack.h (renamed from gdb/gdb_obstack.h)0
-rw-r--r--gdbsupport/gdb_regex.cc (renamed from gdb/gdb_regex.c)2
-rw-r--r--gdbsupport/gdb_regex.h (renamed from gdb/gdb_regex.h)0
-rw-r--r--gdbsupport/gdb_tilde_expand.cc9
-rw-r--r--gdbsupport/gdb_tilde_expand.h4
-rw-r--r--gdbsupport/gdb_unique_ptr.h19
-rw-r--r--gdbsupport/intrusive_list.h13
-rw-r--r--gdbsupport/parallel-for.h165
-rw-r--r--gdbsupport/pathstuff.cc79
-rw-r--r--gdbsupport/pathstuff.h32
-rw-r--r--gdbsupport/print-utils.cc8
-rw-r--r--gdbsupport/selftest.cc46
-rw-r--r--gdbsupport/selftest.h42
-rw-r--r--gdbsupport/thread-pool.cc107
-rw-r--r--gdbsupport/thread-pool.h37
-rw-r--r--gdbsupport/warning.m48
-rw-r--r--gnulib/Makefile.in969
-rw-r--r--gnulib/aclocal.m488
-rw-r--r--gnulib/config.in504
-rw-r--r--gnulib/configure11737
-rw-r--r--gnulib/doc/gendocs_template2
-rw-r--r--gnulib/import/Makefile.am1960
-rw-r--r--gnulib/import/Makefile.in5018
-rw-r--r--gnulib/import/_Noreturn.h26
-rw-r--r--gnulib/import/accept.c16
-rw-r--r--gnulib/import/alloca.c4
-rw-r--r--gnulib/import/alloca.in.h22
-rw-r--r--gnulib/import/arg-nonnull.h10
-rw-r--r--gnulib/import/arpa_inet.in.h18
-rw-r--r--gnulib/import/assure.h16
-rw-r--r--gnulib/import/at-func.c4
-rw-r--r--gnulib/import/attribute.h28
-rw-r--r--gnulib/import/basename-lgpl.c16
-rw-r--r--gnulib/import/basename-lgpl.h26
-rw-r--r--gnulib/import/bind.c16
-rw-r--r--gnulib/import/btowc.c16
-rw-r--r--gnulib/import/c++defs.h10
-rw-r--r--gnulib/import/canonicalize-lgpl.c39
-rw-r--r--gnulib/import/cdefs.h206
-rw-r--r--gnulib/import/chdir-long.c4
-rw-r--r--gnulib/import/chdir-long.h4
-rw-r--r--gnulib/import/chown.c20
-rw-r--r--gnulib/import/cloexec.c20
-rw-r--r--gnulib/import/cloexec.h20
-rw-r--r--gnulib/import/close.c16
-rw-r--r--gnulib/import/closedir.c16
-rw-r--r--gnulib/import/connect.c16
-rw-r--r--gnulib/import/count-one-bits.c18
-rw-r--r--gnulib/import/count-one-bits.h16
-rw-r--r--gnulib/import/ctype.in.h18
-rw-r--r--gnulib/import/dirent-private.h16
-rw-r--r--gnulib/import/dirent.in.h142
-rw-r--r--gnulib/import/dirfd.c16
-rw-r--r--gnulib/import/dirname-lgpl.c16
-rw-r--r--gnulib/import/dirname.h39
-rw-r--r--gnulib/import/dup-safer-flag.c4
-rw-r--r--gnulib/import/dup-safer.c4
-rw-r--r--gnulib/import/dup.c16
-rw-r--r--gnulib/import/dup2.c16
-rw-r--r--gnulib/import/eloop-threshold.h10
-rw-r--r--gnulib/import/errno.in.h18
-rw-r--r--gnulib/import/error.c16
-rw-r--r--gnulib/import/error.h16
-rw-r--r--gnulib/import/exitfail.c16
-rw-r--r--gnulib/import/exitfail.h16
-rwxr-xr-xgnulib/import/extra/gendocs.sh12
-rwxr-xr-xgnulib/import/extra/gitlog-to-changelog7
-rwxr-xr-xgnulib/import/extra/update-copyright4
-rw-r--r--gnulib/import/fchdir.c19
-rw-r--r--gnulib/import/fchown-stub.c16
-rw-r--r--gnulib/import/fcntl.c16
-rw-r--r--gnulib/import/fcntl.in.h20
-rw-r--r--gnulib/import/fd-hook.c18
-rw-r--r--gnulib/import/fd-hook.h18
-rw-r--r--gnulib/import/fd-safer-flag.c4
-rw-r--r--gnulib/import/fd-safer.c4
-rw-r--r--gnulib/import/fdopendir.c4
-rw-r--r--gnulib/import/ffs.c16
-rw-r--r--gnulib/import/filename.h10
-rw-r--r--gnulib/import/filenamecat-lgpl.c16
-rw-r--r--gnulib/import/filenamecat.h25
-rw-r--r--gnulib/import/flexmember.h10
-rw-r--r--gnulib/import/float+.h18
-rw-r--r--gnulib/import/float.c16
-rw-r--r--gnulib/import/float.in.h16
-rw-r--r--gnulib/import/fnmatch.c12
-rw-r--r--gnulib/import/fnmatch.in.h18
-rw-r--r--gnulib/import/fnmatch_loop.c10
-rw-r--r--gnulib/import/fpucw.h16
-rw-r--r--gnulib/import/free.c32
-rw-r--r--gnulib/import/frexp.c16
-rw-r--r--gnulib/import/frexpl.c16
-rw-r--r--gnulib/import/fstat.c16
-rw-r--r--gnulib/import/fstatat.c4
-rw-r--r--gnulib/import/getcwd-lgpl.c28
-rw-r--r--gnulib/import/getcwd.c21
-rw-r--r--gnulib/import/getdelim.c22
-rw-r--r--gnulib/import/getdtablesize.c16
-rw-r--r--gnulib/import/getline.c22
-rw-r--r--gnulib/import/getlogin_r.c18
-rw-r--r--gnulib/import/getprogname.c20
-rw-r--r--gnulib/import/getprogname.h10
-rw-r--r--gnulib/import/getrandom.c22
-rw-r--r--gnulib/import/gettext.h31
-rw-r--r--gnulib/import/gettimeofday.c18
-rw-r--r--gnulib/import/glob-libc.h58
-rw-r--r--gnulib/import/glob.c109
-rw-r--r--gnulib/import/glob.in.h26
-rw-r--r--gnulib/import/glob_internal.h10
-rw-r--r--gnulib/import/glob_pattern_p.c10
-rw-r--r--gnulib/import/globfree.c10
-rw-r--r--gnulib/import/glthread/lock.c18
-rw-r--r--gnulib/import/glthread/lock.h22
-rw-r--r--gnulib/import/glthread/threadlib.c18
-rw-r--r--gnulib/import/hard-locale.c16
-rw-r--r--gnulib/import/hard-locale.h16
-rw-r--r--gnulib/import/idx.h30
-rw-r--r--gnulib/import/inet_ntop.c18
-rw-r--r--gnulib/import/intprops.h48
-rw-r--r--gnulib/import/inttypes.in.h16
-rw-r--r--gnulib/import/isblank.c16
-rw-r--r--gnulib/import/isnan.c16
-rw-r--r--gnulib/import/isnand-nolibm.h16
-rw-r--r--gnulib/import/isnand.c16
-rw-r--r--gnulib/import/isnanl-nolibm.h16
-rw-r--r--gnulib/import/isnanl.c16
-rw-r--r--gnulib/import/itold.c16
-rw-r--r--gnulib/import/lc-charset-dispatch.c22
-rw-r--r--gnulib/import/lc-charset-dispatch.h16
-rw-r--r--gnulib/import/libc-config.h50
-rw-r--r--gnulib/import/limits.in.h34
-rw-r--r--gnulib/import/listen.c16
-rw-r--r--gnulib/import/localcharset.c18
-rw-r--r--gnulib/import/localcharset.h18
-rw-r--r--gnulib/import/locale.in.h22
-rw-r--r--gnulib/import/lstat.c16
-rw-r--r--gnulib/import/m4/00gnulib.m42
-rw-r--r--gnulib/import/m4/__inline.m42
-rw-r--r--gnulib/import/m4/absolute-header.m42
-rw-r--r--gnulib/import/m4/alloca.m412
-rw-r--r--gnulib/import/m4/arpa_inet_h.m433
-rw-r--r--gnulib/import/m4/btowc.m42
-rw-r--r--gnulib/import/m4/builtin-expect.m42
-rw-r--r--gnulib/import/m4/canonicalize.m462
-rw-r--r--gnulib/import/m4/chdir-long.m42
-rw-r--r--gnulib/import/m4/chown.m42
-rw-r--r--gnulib/import/m4/clock_time.m49
-rw-r--r--gnulib/import/m4/close.m42
-rw-r--r--gnulib/import/m4/closedir.m42
-rw-r--r--gnulib/import/m4/codeset.m42
-rw-r--r--gnulib/import/m4/ctype.m432
-rw-r--r--gnulib/import/m4/ctype_h.m447
-rw-r--r--gnulib/import/m4/d-ino.m42
-rw-r--r--gnulib/import/m4/d-type.m42
-rw-r--r--gnulib/import/m4/dirent_h.m447
-rw-r--r--gnulib/import/m4/dirfd.m42
-rw-r--r--gnulib/import/m4/double-slash-root.m42
-rw-r--r--gnulib/import/m4/dup.m42
-rw-r--r--gnulib/import/m4/dup2.m42
-rw-r--r--gnulib/import/m4/eealloc.m42
-rw-r--r--gnulib/import/m4/environ.m47
-rw-r--r--gnulib/import/m4/errno_h.m412
-rw-r--r--gnulib/import/m4/error.m48
-rw-r--r--gnulib/import/m4/exponentd.m42
-rw-r--r--gnulib/import/m4/exponentl.m42
-rw-r--r--gnulib/import/m4/extensions.m42
-rw-r--r--gnulib/import/m4/extern-inline.m428
-rw-r--r--gnulib/import/m4/fchdir.m46
-rw-r--r--gnulib/import/m4/fcntl-o.m42
-rw-r--r--gnulib/import/m4/fcntl.m42
-rw-r--r--gnulib/import/m4/fcntl_h.m441
-rw-r--r--gnulib/import/m4/fdopendir.m42
-rw-r--r--gnulib/import/m4/ffs.m46
-rw-r--r--gnulib/import/m4/filenamecat.m42
-rw-r--r--gnulib/import/m4/flexmember.m42
-rw-r--r--gnulib/import/m4/float_h.m422
-rw-r--r--gnulib/import/m4/fnmatch.m42
-rw-r--r--gnulib/import/m4/fnmatch_h.m440
-rw-r--r--gnulib/import/m4/fpieee.m42
-rw-r--r--gnulib/import/m4/free.m49
-rw-r--r--gnulib/import/m4/frexp.m42
-rw-r--r--gnulib/import/m4/frexpl.m42
-rw-r--r--gnulib/import/m4/fstat.m46
-rw-r--r--gnulib/import/m4/fstatat.m42
-rw-r--r--gnulib/import/m4/getcwd-abort-bug.m421
-rw-r--r--gnulib/import/m4/getcwd-path-max.m42
-rw-r--r--gnulib/import/m4/getcwd.m42
-rw-r--r--gnulib/import/m4/getdelim.m42
-rw-r--r--gnulib/import/m4/getdtablesize.m42
-rw-r--r--gnulib/import/m4/getline.m42
-rw-r--r--gnulib/import/m4/getlogin.m42
-rw-r--r--gnulib/import/m4/getlogin_r.m42
-rw-r--r--gnulib/import/m4/getpagesize.m42
-rw-r--r--gnulib/import/m4/getprogname.m42
-rw-r--r--gnulib/import/m4/getrandom.m42
-rw-r--r--gnulib/import/m4/gettimeofday.m48
-rw-r--r--gnulib/import/m4/glob.m443
-rw-r--r--gnulib/import/m4/glob_h.m440
-rw-r--r--gnulib/import/m4/gnulib-cache.m44
-rw-r--r--gnulib/import/m4/gnulib-common.m4411
-rw-r--r--gnulib/import/m4/gnulib-comp.m4642
-rw-r--r--gnulib/import/m4/gnulib-tool.m410
-rw-r--r--gnulib/import/m4/include_next.m48
-rw-r--r--gnulib/import/m4/inet_ntop.m42
-rw-r--r--gnulib/import/m4/inttypes.m435
-rw-r--r--gnulib/import/m4/isblank.m42
-rw-r--r--gnulib/import/m4/isnand.m42
-rw-r--r--gnulib/import/m4/isnanl.m42
-rw-r--r--gnulib/import/m4/largefile.m430
-rw-r--r--gnulib/import/m4/limits-h.m414
-rw-r--r--gnulib/import/m4/localcharset.m42
-rw-r--r--gnulib/import/m4/locale-fr.m42
-rw-r--r--gnulib/import/m4/locale-ja.m42
-rw-r--r--gnulib/import/m4/locale-zh.m42
-rw-r--r--gnulib/import/m4/locale_h.m440
-rw-r--r--gnulib/import/m4/lock.m42
-rw-r--r--gnulib/import/m4/lstat.m42
-rw-r--r--gnulib/import/m4/malloc.m4157
-rw-r--r--gnulib/import/m4/malloca.m42
-rw-r--r--gnulib/import/m4/math_h.m4229
-rw-r--r--gnulib/import/m4/mbrtowc.m42
-rw-r--r--gnulib/import/m4/mbsinit.m42
-rw-r--r--gnulib/import/m4/mbsrtowcs.m42
-rw-r--r--gnulib/import/m4/mbstate_t.m42
-rw-r--r--gnulib/import/m4/mbtowc.m42
-rw-r--r--gnulib/import/m4/memchr.m46
-rw-r--r--gnulib/import/m4/memmem.m47
-rw-r--r--gnulib/import/m4/mempcpy.m46
-rw-r--r--gnulib/import/m4/memrchr.m46
-rw-r--r--gnulib/import/m4/minmax.m42
-rw-r--r--gnulib/import/m4/mkdir.m42
-rw-r--r--gnulib/import/m4/mkdtemp.m42
-rw-r--r--gnulib/import/m4/mkostemp.m42
-rw-r--r--gnulib/import/m4/mmap-anon.m46
-rw-r--r--gnulib/import/m4/mode_t.m42
-rw-r--r--gnulib/import/m4/msvc-inval.m42
-rw-r--r--gnulib/import/m4/msvc-nothrow.m42
-rw-r--r--gnulib/import/m4/multiarch.m42
-rw-r--r--gnulib/import/m4/netdb_h.m427
-rw-r--r--gnulib/import/m4/netinet_in_h.m410
-rw-r--r--gnulib/import/m4/nocrash.m42
-rw-r--r--gnulib/import/m4/off_t.m42
-rw-r--r--gnulib/import/m4/open-cloexec.m42
-rw-r--r--gnulib/import/m4/open-slash.m42
-rw-r--r--gnulib/import/m4/open.m42
-rw-r--r--gnulib/import/m4/openat.m42
-rw-r--r--gnulib/import/m4/opendir.m42
-rw-r--r--gnulib/import/m4/pathmax.m42
-rw-r--r--gnulib/import/m4/pid_t.m42
-rw-r--r--gnulib/import/m4/pipe.m42
-rw-r--r--gnulib/import/m4/pthread_rwlock_rdlock.m42
-rw-r--r--gnulib/import/m4/rawmemchr.m46
-rw-r--r--gnulib/import/m4/readdir.m42
-rw-r--r--gnulib/import/m4/readlink.m42
-rw-r--r--gnulib/import/m4/realloc.m451
-rw-r--r--gnulib/import/m4/rename.m42
-rw-r--r--gnulib/import/m4/rewinddir.m42
-rw-r--r--gnulib/import/m4/rmdir.m42
-rw-r--r--gnulib/import/m4/save-cwd.m42
-rw-r--r--gnulib/import/m4/select.m46
-rw-r--r--gnulib/import/m4/setenv.m42
-rw-r--r--gnulib/import/m4/setlocale_null.m48
-rw-r--r--gnulib/import/m4/signal_h.m435
-rw-r--r--gnulib/import/m4/socketlib.m42
-rw-r--r--gnulib/import/m4/sockets.m42
-rw-r--r--gnulib/import/m4/socklen.m42
-rw-r--r--gnulib/import/m4/sockpfaf.m48
-rw-r--r--gnulib/import/m4/ssize_t.m42
-rw-r--r--gnulib/import/m4/stat-time.m42
-rw-r--r--gnulib/import/m4/stat.m46
-rw-r--r--gnulib/import/m4/std-gnu11.m42
-rw-r--r--gnulib/import/m4/stdalign.m413
-rw-r--r--gnulib/import/m4/stdbool.m419
-rw-r--r--gnulib/import/m4/stddef_h.m437
-rw-r--r--gnulib/import/m4/stdint.m414
-rw-r--r--gnulib/import/m4/stdio_h.m4199
-rw-r--r--gnulib/import/m4/stdlib_h.m4136
-rw-r--r--gnulib/import/m4/strchrnul.m46
-rw-r--r--gnulib/import/m4/strdup.m48
-rw-r--r--gnulib/import/m4/strerror.m48
-rw-r--r--gnulib/import/m4/strerror_r.m419
-rw-r--r--gnulib/import/m4/string_h.m4128
-rw-r--r--gnulib/import/m4/strings_h.m440
-rw-r--r--gnulib/import/m4/strnlen.m46
-rw-r--r--gnulib/import/m4/strstr.m49
-rw-r--r--gnulib/import/m4/strtok_r.m46
-rw-r--r--gnulib/import/m4/sys_random_h.m427
-rw-r--r--gnulib/import/m4/sys_select_h.m431
-rw-r--r--gnulib/import/m4/sys_socket_h.m460
-rw-r--r--gnulib/import/m4/sys_stat_h.m467
-rw-r--r--gnulib/import/m4/sys_time_h.m436
-rw-r--r--gnulib/import/m4/sys_types_h.m418
-rw-r--r--gnulib/import/m4/sys_uio_h.m425
-rw-r--r--gnulib/import/m4/sys_wait_h.m427
-rw-r--r--gnulib/import/m4/tempname.m42
-rw-r--r--gnulib/import/m4/threadlib.m4130
-rw-r--r--gnulib/import/m4/time_h.m466
-rw-r--r--gnulib/import/m4/time_r.m44
-rw-r--r--gnulib/import/m4/unistd-safer.m42
-rw-r--r--gnulib/import/m4/unistd_h.m4383
-rw-r--r--gnulib/import/m4/vararrays.m472
-rw-r--r--gnulib/import/m4/visibility.m49
-rw-r--r--gnulib/import/m4/warn-on-use.m42
-rw-r--r--gnulib/import/m4/wchar_h.m4113
-rw-r--r--gnulib/import/m4/wchar_t.m42
-rw-r--r--gnulib/import/m4/wctype_h.m441
-rw-r--r--gnulib/import/m4/wint_t.m412
-rw-r--r--gnulib/import/m4/wmemchr.m42
-rw-r--r--gnulib/import/m4/wmempcpy.m42
-rw-r--r--gnulib/import/m4/year2038.m4124
-rw-r--r--gnulib/import/m4/zzgnulib.m42
-rw-r--r--gnulib/import/malloc.c43
-rw-r--r--gnulib/import/malloc/scratch_buffer.h10
-rw-r--r--gnulib/import/malloc/scratch_buffer_dupfree.c10
-rw-r--r--gnulib/import/malloc/scratch_buffer_grow.c10
-rw-r--r--gnulib/import/malloc/scratch_buffer_grow_preserve.c10
-rw-r--r--gnulib/import/malloc/scratch_buffer_set_array_size.c10
-rw-r--r--gnulib/import/malloca.c42
-rw-r--r--gnulib/import/malloca.h41
-rw-r--r--gnulib/import/math.c18
-rw-r--r--gnulib/import/math.in.h35
-rw-r--r--gnulib/import/mbrtowc-impl-utf8.h18
-rw-r--r--gnulib/import/mbrtowc-impl.h16
-rw-r--r--gnulib/import/mbrtowc.c16
-rw-r--r--gnulib/import/mbsinit.c16
-rw-r--r--gnulib/import/mbsrtowcs-impl.h16
-rw-r--r--gnulib/import/mbsrtowcs-state.c16
-rw-r--r--gnulib/import/mbsrtowcs.c16
-rw-r--r--gnulib/import/mbtowc-impl.h16
-rw-r--r--gnulib/import/mbtowc-lock.c16
-rw-r--r--gnulib/import/mbtowc-lock.h28
-rw-r--r--gnulib/import/mbtowc.c16
-rw-r--r--gnulib/import/memchr.c26
-rw-r--r--gnulib/import/memchr.valgrind16
-rw-r--r--gnulib/import/memmem.c18
-rw-r--r--gnulib/import/mempcpy.c23
-rw-r--r--gnulib/import/memrchr.c16
-rw-r--r--gnulib/import/minmax.h18
-rw-r--r--gnulib/import/mkdir.c18
-rw-r--r--gnulib/import/mkdtemp.c16
-rw-r--r--gnulib/import/mkostemp.c16
-rw-r--r--gnulib/import/msvc-inval.c18
-rw-r--r--gnulib/import/msvc-inval.h18
-rw-r--r--gnulib/import/msvc-nothrow.c18
-rw-r--r--gnulib/import/msvc-nothrow.h18
-rw-r--r--gnulib/import/netdb.in.h18
-rw-r--r--gnulib/import/netinet_in.in.h18
-rw-r--r--gnulib/import/open.c16
-rw-r--r--gnulib/import/openat-die.c4
-rw-r--r--gnulib/import/openat-priv.h4
-rw-r--r--gnulib/import/openat-proc.c4
-rw-r--r--gnulib/import/openat.c4
-rw-r--r--gnulib/import/openat.h6
-rw-r--r--gnulib/import/opendir.c16
-rw-r--r--gnulib/import/pathmax.h18
-rw-r--r--gnulib/import/pipe-safer.c4
-rw-r--r--gnulib/import/pipe.c18
-rw-r--r--gnulib/import/rawmemchr.c97
-rw-r--r--gnulib/import/rawmemchr.valgrind16
-rw-r--r--gnulib/import/readdir.c16
-rw-r--r--gnulib/import/readlink.c20
-rw-r--r--gnulib/import/realloc.c66
-rw-r--r--gnulib/import/rename.c20
-rw-r--r--gnulib/import/rewinddir.c16
-rw-r--r--gnulib/import/rmdir.c16
-rw-r--r--gnulib/import/same-inode.h16
-rw-r--r--gnulib/import/save-cwd.c4
-rw-r--r--gnulib/import/save-cwd.h4
-rw-r--r--gnulib/import/scratch_buffer.h118
-rw-r--r--gnulib/import/select.c27
-rw-r--r--gnulib/import/setenv.c16
-rw-r--r--gnulib/import/setlocale-lock.c16
-rw-r--r--gnulib/import/setlocale_null.c16
-rw-r--r--gnulib/import/setlocale_null.h16
-rw-r--r--gnulib/import/setsockopt.c16
-rw-r--r--gnulib/import/signal.in.h16
-rw-r--r--gnulib/import/socket.c16
-rw-r--r--gnulib/import/sockets.c18
-rw-r--r--gnulib/import/sockets.h16
-rw-r--r--gnulib/import/stat-time.c18
-rw-r--r--gnulib/import/stat-time.h22
-rw-r--r--gnulib/import/stat-w32.c16
-rw-r--r--gnulib/import/stat-w32.h16
-rw-r--r--gnulib/import/stat.c16
-rw-r--r--gnulib/import/stdalign.in.h31
-rw-r--r--gnulib/import/stdbool.in.h18
-rw-r--r--gnulib/import/stddef.in.h35
-rw-r--r--gnulib/import/stdint.in.h22
-rw-r--r--gnulib/import/stdio-read.c168
-rw-r--r--gnulib/import/stdio-write.c206
-rw-r--r--gnulib/import/stdio.in.h216
-rw-r--r--gnulib/import/stdlib.in.h372
-rw-r--r--gnulib/import/str-two-way.h18
-rw-r--r--gnulib/import/strchrnul.c16
-rw-r--r--gnulib/import/strchrnul.valgrind16
-rw-r--r--gnulib/import/strdup.c18
-rw-r--r--gnulib/import/streq.h18
-rw-r--r--gnulib/import/strerror-override.c102
-rw-r--r--gnulib/import/strerror-override.h17
-rw-r--r--gnulib/import/strerror.c16
-rw-r--r--gnulib/import/strerror_r.c51
-rw-r--r--gnulib/import/string.in.h233
-rw-r--r--gnulib/import/strings.in.h18
-rw-r--r--gnulib/import/stripslash.c16
-rw-r--r--gnulib/import/strnlen.c18
-rw-r--r--gnulib/import/strnlen1.c16
-rw-r--r--gnulib/import/strnlen1.h16
-rw-r--r--gnulib/import/strstr.c18
-rw-r--r--gnulib/import/strtok_r.c16
-rw-r--r--gnulib/import/sys_random.in.h24
-rw-r--r--gnulib/import/sys_select.in.h31
-rw-r--r--gnulib/import/sys_socket.c18
-rw-r--r--gnulib/import/sys_socket.in.h18
-rw-r--r--gnulib/import/sys_stat.in.h18
-rw-r--r--gnulib/import/sys_time.in.h18
-rw-r--r--gnulib/import/sys_types.in.h18
-rw-r--r--gnulib/import/sys_uio.in.h18
-rw-r--r--gnulib/import/sys_wait.in.h18
-rw-r--r--gnulib/import/tempname.c41
-rw-r--r--gnulib/import/tempname.h16
-rw-r--r--gnulib/import/time.in.h71
-rw-r--r--gnulib/import/time_r.c18
-rw-r--r--gnulib/import/unistd--.h4
-rw-r--r--gnulib/import/unistd-safer.h4
-rw-r--r--gnulib/import/unistd.c18
-rw-r--r--gnulib/import/unistd.in.h50
-rw-r--r--gnulib/import/unsetenv.c16
-rw-r--r--gnulib/import/verify.h51
-rw-r--r--gnulib/import/w32sock.h16
-rw-r--r--gnulib/import/warn-on-use.h16
-rw-r--r--gnulib/import/wchar.in.h126
-rw-r--r--gnulib/import/wctype-h.c19
-rw-r--r--gnulib/import/wctype.in.h28
-rw-r--r--gnulib/import/windows-initguard.h18
-rw-r--r--gnulib/import/windows-mutex.c18
-rw-r--r--gnulib/import/windows-mutex.h18
-rw-r--r--gnulib/import/windows-once.c18
-rw-r--r--gnulib/import/windows-once.h18
-rw-r--r--gnulib/import/windows-recmutex.c18
-rw-r--r--gnulib/import/windows-recmutex.h18
-rw-r--r--gnulib/import/windows-rwlock.c18
-rw-r--r--gnulib/import/windows-rwlock.h18
-rw-r--r--gnulib/import/wmemchr-impl.h16
-rw-r--r--gnulib/import/wmemchr.c16
-rw-r--r--gnulib/import/wmempcpy.c18
-rw-r--r--gnulib/import/xalloc-oversized.h55
-rwxr-xr-xgnulib/update-gnulib.sh2
-rw-r--r--gold/ChangeLog23
-rw-r--r--gold/Makefile.am4
-rw-r--r--gold/Makefile.in24
-rw-r--r--gold/po/fr.po254
-rw-r--r--gold/po/gold.pot248
-rw-r--r--gold/po/sr.po257
-rw-r--r--gold/po/uk.po257
-rw-r--r--gprof/ChangeLog18
-rwxr-xr-xgprof/configure40
-rw-r--r--gprof/po/gprof.pot4
-rw-r--r--gprof/po/ro.po386
-rw-r--r--gprof/po/ru.po273
-rw-r--r--gprof/stamp-h.in1
-rw-r--r--gprofng/Makefile.am79
-rw-r--r--gprofng/Makefile.in953
-rw-r--r--gprofng/README100
-rw-r--r--gprofng/acinclude.m44
-rw-r--r--gprofng/aclocal.m41254
-rw-r--r--gprofng/common/cc_libcollector.h44
-rw-r--r--gprofng/common/config.h.in120
-rw-r--r--gprofng/common/core_pcbe.c3023
-rw-r--r--gprofng/common/cpu_frequency.h303
-rw-r--r--gprofng/common/cpuid.c203
-rw-r--r--gprofng/common/gp-defs.h66
-rw-r--r--gprofng/common/gp-experiment.h186
-rw-r--r--gprofng/common/gp-time.h46
-rw-r--r--gprofng/common/hwc_cpus.h198
-rw-r--r--gprofng/common/hwcdrv.c1454
-rw-r--r--gprofng/common/hwcdrv.h330
-rw-r--r--gprofng/common/hwcentry.h417
-rw-r--r--gprofng/common/hwcfuncs.c704
-rw-r--r--gprofng/common/hwcfuncs.h269
-rw-r--r--gprofng/common/hwctable.c5410
-rw-r--r--gprofng/common/opteron_pcbe.c448
-rw-r--r--gprofng/config/bison.m492
-rwxr-xr-xgprofng/configure19688
-rw-r--r--gprofng/configure.ac229
-rw-r--r--gprofng/doc/Makefile.am37
-rw-r--r--gprofng/doc/Makefile.in (renamed from bfd/doc/Makefile.in)413
-rw-r--r--gprofng/doc/fdl.texi506
-rw-r--r--gprofng/doc/gprofng.texi3399
-rwxr-xr-xgprofng/doc/mdate-sh224
-rw-r--r--gprofng/doc/texinfo.tex11731
-rw-r--r--gprofng/doc/version.texi4
-rw-r--r--gprofng/gp-display-html/Makefile.am60
-rw-r--r--gprofng/gp-display-html/Makefile.in641
-rw-r--r--gprofng/gp-display-html/gp-display-html.in256
-rwxr-xr-xgprofng/libcollector/CHK_LIBC_OBJ82
-rw-r--r--gprofng/libcollector/Makefile.am85
-rw-r--r--gprofng/libcollector/Makefile.in1147
-rw-r--r--gprofng/libcollector/aclocal.m41238
-rw-r--r--gprofng/libcollector/collector.c2494
-rw-r--r--gprofng/libcollector/collector.h236
-rw-r--r--gprofng/libcollector/collectorAPI.c140
-rwxr-xr-xgprofng/libcollector/configure18191
-rw-r--r--gprofng/libcollector/configure.ac64
-rw-r--r--gprofng/libcollector/descendants.h81
-rw-r--r--gprofng/libcollector/dispatcher.c1261
-rw-r--r--gprofng/libcollector/envmgmt.c840
-rw-r--r--gprofng/libcollector/gethrtime.c46
-rw-r--r--gprofng/libcollector/heaptrace.c503
-rw-r--r--gprofng/libcollector/hwprofile.c905
-rw-r--r--gprofng/libcollector/hwprofile.h89
-rw-r--r--gprofng/libcollector/iolib.c1156
-rw-r--r--gprofng/libcollector/iotrace.c3717
-rw-r--r--gprofng/libcollector/jprofile.c1315
-rw-r--r--gprofng/libcollector/libcol-i386-dis.c28
-rw-r--r--gprofng/libcollector/libcol_hwcdrv.c25
-rw-r--r--gprofng/libcollector/libcol_hwcfuncs.c27
-rw-r--r--gprofng/libcollector/libcol_util.c1693
-rw-r--r--gprofng/libcollector/libcol_util.h321
-rw-r--r--gprofng/libcollector/linetrace.c1998
-rw-r--r--gprofng/libcollector/mapfile.aarch64-Linux40
-rw-r--r--gprofng/libcollector/mapfile.amd64-Linux79
-rw-r--r--gprofng/libcollector/mapfile.intel-Linux81
-rw-r--r--gprofng/libcollector/mapfile.sparc-Linux40
-rw-r--r--gprofng/libcollector/mapfile.sparcv9-Linux58
-rw-r--r--gprofng/libcollector/memmgr.c396
-rw-r--r--gprofng/libcollector/memmgr.h59
-rw-r--r--gprofng/libcollector/mmaptrace.c1689
-rw-r--r--gprofng/libcollector/profile.c287
-rw-r--r--gprofng/libcollector/synctrace.c1061
-rw-r--r--gprofng/libcollector/tsd.c149
-rw-r--r--gprofng/libcollector/tsd.h80
-rw-r--r--gprofng/libcollector/unwind.c4639
-rw-r--r--gprofng/src/ABS.h62
-rw-r--r--gprofng/src/Application.cc259
-rw-r--r--gprofng/src/Application.h108
-rw-r--r--gprofng/src/ArchiveExp.cc149
-rw-r--r--gprofng/src/ArchiveExp.h41
-rw-r--r--gprofng/src/BaseMetric.cc975
-rw-r--r--gprofng/src/BaseMetric.h246
-rw-r--r--gprofng/src/BaseMetricTreeNode.cc329
-rw-r--r--gprofng/src/BaseMetricTreeNode.h100
-rw-r--r--gprofng/src/CacheMap.h186
-rw-r--r--gprofng/src/CallStack.cc1250
-rw-r--r--gprofng/src/CallStack.h114
-rw-r--r--gprofng/src/CatchOutOfMemory.cc59
-rw-r--r--gprofng/src/ClassFile.cc1639
-rw-r--r--gprofng/src/ClassFile.h63
-rw-r--r--gprofng/src/Command.cc562
-rw-r--r--gprofng/src/Command.h286
-rw-r--r--gprofng/src/CompCom.cc313
-rw-r--r--gprofng/src/CompCom.h63
-rw-r--r--gprofng/src/DataObject.cc193
-rw-r--r--gprofng/src/DataObject.h82
-rw-r--r--gprofng/src/DataSpace.cc558
-rw-r--r--gprofng/src/DataSpace.h55
-rw-r--r--gprofng/src/DataStream.cc55
-rw-r--r--gprofng/src/DataStream.h51
-rw-r--r--gprofng/src/Data_window.cc241
-rw-r--r--gprofng/src/Data_window.h99
-rw-r--r--gprofng/src/Dbe.cc10371
-rw-r--r--gprofng/src/Dbe.h294
-rw-r--r--gprofng/src/DbeApplication.cc113
-rw-r--r--gprofng/src/DbeApplication.h50
-rw-r--r--gprofng/src/DbeArray.h99
-rw-r--r--gprofng/src/DbeCacheMap.h109
-rw-r--r--gprofng/src/DbeFile.cc541
-rw-r--r--gprofng/src/DbeFile.h103
-rw-r--r--gprofng/src/DbeJarFile.cc505
-rw-r--r--gprofng/src/DbeJarFile.h46
-rw-r--r--gprofng/src/DbeLinkList.h73
-rw-r--r--gprofng/src/DbeLock.cc41
-rw-r--r--gprofng/src/DbeLock.h38
-rw-r--r--gprofng/src/DbeSession.cc3525
-rw-r--r--gprofng/src/DbeSession.cc.13531
-rw-r--r--gprofng/src/DbeSession.h481
-rw-r--r--gprofng/src/DbeSyncMap.h224
-rw-r--r--gprofng/src/DbeThread.cc224
-rw-r--r--gprofng/src/DbeThread.h61
-rw-r--r--gprofng/src/DbeView.cc3126
-rw-r--r--gprofng/src/DbeView.h842
-rw-r--r--gprofng/src/DefaultHandler.h114
-rw-r--r--gprofng/src/DefaultMap.h232
-rw-r--r--gprofng/src/DefaultMap2D.h147
-rw-r--r--gprofng/src/DerivedMetrics.cc293
-rw-r--r--gprofng/src/DerivedMetrics.h54
-rw-r--r--gprofng/src/Disasm.cc419
-rw-r--r--gprofng/src/Disasm.h66
-rw-r--r--gprofng/src/Dwarf.cc1041
-rw-r--r--gprofng/src/Dwarf.h87
-rw-r--r--gprofng/src/DwarfLib.cc2203
-rw-r--r--gprofng/src/DwarfLib.h313
-rw-r--r--gprofng/src/Elf.cc1138
-rw-r--r--gprofng/src/Elf.h170
-rw-r--r--gprofng/src/Emsg.cc614
-rw-r--r--gprofng/src/Emsg.h112
-rw-r--r--gprofng/src/Emsgnum.h135
-rw-r--r--gprofng/src/ExpGroup.cc163
-rw-r--r--gprofng/src/ExpGroup.h50
-rw-r--r--gprofng/src/Exp_Layout.cc422
-rw-r--r--gprofng/src/Exp_Layout.h158
-rw-r--r--gprofng/src/Experiment.cc6961
-rw-r--r--gprofng/src/Experiment.h689
-rw-r--r--gprofng/src/Expression.cc1281
-rw-r--r--gprofng/src/Expression.h178
-rw-r--r--gprofng/src/FileData.cc400
-rw-r--r--gprofng/src/FileData.h522
-rw-r--r--gprofng/src/Filter.cc514
-rw-r--r--gprofng/src/Filter.h111
-rw-r--r--gprofng/src/FilterExp.h56
-rw-r--r--gprofng/src/FilterSet.cc106
-rw-r--r--gprofng/src/FilterSet.h72
-rw-r--r--gprofng/src/Function.cc1160
-rw-r--r--gprofng/src/Function.h222
-rw-r--r--gprofng/src/HashMap.h435
-rw-r--r--gprofng/src/HeapActivity.cc408
-rw-r--r--gprofng/src/HeapActivity.h76
-rw-r--r--gprofng/src/HeapData.cc284
-rw-r--r--gprofng/src/HeapData.h450
-rw-r--r--gprofng/src/HeapMap.cc325
-rw-r--r--gprofng/src/HeapMap.h59
-rw-r--r--gprofng/src/Hist_data.cc1886
-rw-r--r--gprofng/src/Hist_data.h292
-rw-r--r--gprofng/src/Histable.h333
-rw-r--r--gprofng/src/IOActivity.cc825
-rw-r--r--gprofng/src/IOActivity.h86
-rw-r--r--gprofng/src/IndexMap2D.h119
-rw-r--r--gprofng/src/IndexObject.cc554
-rw-r--r--gprofng/src/IndexObject.h111
-rw-r--r--gprofng/src/IntervalMap.h194
-rw-r--r--gprofng/src/LoadObject.cc1242
-rw-r--r--gprofng/src/LoadObject.h210
-rw-r--r--gprofng/src/MachineModel.cc317
-rw-r--r--gprofng/src/Makefile.am217
-rw-r--r--gprofng/src/Makefile.in1206
-rw-r--r--gprofng/src/Map.h61
-rw-r--r--gprofng/src/Map2D.h53
-rw-r--r--gprofng/src/MemObject.cc44
-rw-r--r--gprofng/src/MemObject.h62
-rw-r--r--gprofng/src/MemorySpace.cc452
-rw-r--r--gprofng/src/MemorySpace.h113
-rw-r--r--gprofng/src/Metric.cc1660
-rw-r--r--gprofng/src/Metric.h188
-rw-r--r--gprofng/src/MetricList.cc1075
-rw-r--r--gprofng/src/MetricList.h163
-rw-r--r--gprofng/src/Module.cc1840
-rw-r--r--gprofng/src/Module.h284
-rw-r--r--gprofng/src/Ovw_data.cc242
-rw-r--r--gprofng/src/Ovw_data.h102
-rw-r--r--gprofng/src/PRBTree.cc480
-rw-r--r--gprofng/src/PRBTree.h106
-rw-r--r--gprofng/src/PathTree.cc2637
-rw-r--r--gprofng/src/PathTree.h405
-rw-r--r--gprofng/src/PreviewExp.cc113
-rw-r--r--gprofng/src/PreviewExp.h49
-rw-r--r--gprofng/src/Print.cc3485
-rw-r--r--gprofng/src/Print.h283
-rw-r--r--gprofng/src/QLParser.h61
-rw-r--r--gprofng/src/QLParser.yy418
-rw-r--r--gprofng/src/SAXParser.h49
-rw-r--r--gprofng/src/SAXParserFactory.cc666
-rw-r--r--gprofng/src/SAXParserFactory.h75
-rw-r--r--gprofng/src/Sample.cc94
-rw-r--r--gprofng/src/Sample.h80
-rw-r--r--gprofng/src/SegMem.h76
-rw-r--r--gprofng/src/Settings.cc1586
-rw-r--r--gprofng/src/Settings.h425
-rw-r--r--gprofng/src/SourceFile.cc229
-rw-r--r--gprofng/src/SourceFile.h117
-rw-r--r--gprofng/src/Stabs.cc2650
-rw-r--r--gprofng/src/Stabs.h160
-rw-r--r--gprofng/src/Stats_data.cc203
-rw-r--r--gprofng/src/Stats_data.h59
-rw-r--r--gprofng/src/StringBuilder.cc585
-rw-r--r--gprofng/src/StringBuilder.h101
-rw-r--r--gprofng/src/StringMap.h238
-rw-r--r--gprofng/src/Table.cc1687
-rw-r--r--gprofng/src/Table.h618
-rw-r--r--gprofng/src/UserLabel.cc177
-rw-r--r--gprofng/src/UserLabel.h61
-rw-r--r--gprofng/src/checks.cc516
-rw-r--r--gprofng/src/collctrl.cc3149
-rw-r--r--gprofng/src/collctrl.h405
-rw-r--r--gprofng/src/collect.h156
-rw-r--r--gprofng/src/collector_module.h234
-rw-r--r--gprofng/src/comp_com.c3481
-rw-r--r--gprofng/src/comp_com.h903
-rw-r--r--gprofng/src/count.cc237
-rw-r--r--gprofng/src/data_pckts.h595
-rw-r--r--gprofng/src/dbe_collctrl.cc28
-rw-r--r--gprofng/src/dbe_hwc.h38
-rw-r--r--gprofng/src/dbe_hwcdrv.c23
-rw-r--r--gprofng/src/dbe_hwcfuncs.c23
-rw-r--r--gprofng/src/dbe_hwctable.c23
-rw-r--r--gprofng/src/dbe_memmgr.c118
-rw-r--r--gprofng/src/dbe_structs.h219
-rw-r--r--gprofng/src/dbe_types.h62
-rw-r--r--gprofng/src/debug.h89
-rw-r--r--gprofng/src/enums.h195
-rw-r--r--gprofng/src/envsets.cc420
-rw-r--r--gprofng/src/gethrtime.c170
-rw-r--r--gprofng/src/gp-archive.cc700
-rw-r--r--gprofng/src/gp-archive.h64
-rw-r--r--gprofng/src/gp-collect-app.cc1598
-rw-r--r--gprofng/src/gp-display-src.cc752
-rw-r--r--gprofng/src/gp-display-text.cc2834
-rw-r--r--gprofng/src/gp-print.h118
-rw-r--r--gprofng/src/gprofng.cc301
-rw-r--r--gprofng/src/gprofng.h2m4
-rw-r--r--gprofng/src/gprofng.rc132
-rw-r--r--gprofng/src/i18n.cc30
-rw-r--r--gprofng/src/i18n.h40
-rw-r--r--gprofng/src/info.h73
-rw-r--r--gprofng/src/ipc.cc2829
-rw-r--r--gprofng/src/ipcio.cc1025
-rw-r--r--gprofng/src/ipcio.h176
-rw-r--r--gprofng/src/machinemodels/generic.ermm32
-rw-r--r--gprofng/src/machinemodels/m5.ermm65
-rw-r--r--gprofng/src/machinemodels/m6.ermm65
-rw-r--r--gprofng/src/machinemodels/m7.ermm64
-rw-r--r--gprofng/src/machinemodels/t4.ermm67
-rw-r--r--gprofng/src/machinemodels/t5.ermm65
-rw-r--r--gprofng/src/parse.cc927
-rw-r--r--gprofng/src/stab.h205
-rw-r--r--gprofng/src/util.cc1582
-rw-r--r--gprofng/src/util.h185
-rw-r--r--gprofng/src/vec.h524
-rw-r--r--gprofng/testsuite/config/default.exp38
-rw-r--r--gprofng/testsuite/gprofng.display/display.exp92
-rw-r--r--gprofng/testsuite/gprofng.display/jsynprog/Intface.java6
-rw-r--r--gprofng/testsuite/gprofng.display/jsynprog/Launcher.java90
-rw-r--r--gprofng/testsuite/gprofng.display/jsynprog/Makefile56
-rw-r--r--gprofng/testsuite/gprofng.display/jsynprog/Routine.java224
-rw-r--r--gprofng/testsuite/gprofng.display/jsynprog/Sub_Routine.java54
-rwxr-xr-xgprofng/testsuite/gprofng.display/jsynprog/check_results.pl33
-rw-r--r--gprofng/testsuite/gprofng.display/jsynprog/cloop.cc114
-rw-r--r--gprofng/testsuite/gprofng.display/jsynprog/jsynprog.h74
-rw-r--r--gprofng/testsuite/gprofng.display/jsynprog/jsynprog.java229
-rw-r--r--gprofng/testsuite/gprofng.display/mttest/Makefile41
-rw-r--r--gprofng/testsuite/gprofng.display/mttest/check_results.pl46
-rw-r--r--gprofng/testsuite/gprofng.display/mttest/gethrtime.c270
-rw-r--r--gprofng/testsuite/gprofng.display/mttest/mttest.c1306
-rw-r--r--gprofng/testsuite/gprofng.display/synprog/Makefile66
-rw-r--r--gprofng/testsuite/gprofng.display/synprog/callso.c152
-rw-r--r--gprofng/testsuite/gprofng.display/synprog/callsx.c152
-rwxr-xr-xgprofng/testsuite/gprofng.display/synprog/check_results.pl40
-rw-r--r--gprofng/testsuite/gprofng.display/synprog/endcases.c208
-rw-r--r--gprofng/testsuite/gprofng.display/synprog/fitos.c78
-rw-r--r--gprofng/testsuite/gprofng.display/synprog/inc_body.h26
-rw-r--r--gprofng/testsuite/gprofng.display/synprog/inc_brace.h26
-rw-r--r--gprofng/testsuite/gprofng.display/synprog/inc_entry.h24
-rw-r--r--gprofng/testsuite/gprofng.display/synprog/inc_exit.h25
-rw-r--r--gprofng/testsuite/gprofng.display/synprog/inc_func.h28
-rw-r--r--gprofng/testsuite/gprofng.display/synprog/inc_inline.h32
-rw-r--r--gprofng/testsuite/gprofng.display/synprog/inc_macro.h26
-rw-r--r--gprofng/testsuite/gprofng.display/synprog/iosyn.c614
-rw-r--r--gprofng/testsuite/gprofng.display/synprog/pagethrash.c75
-rw-r--r--gprofng/testsuite/gprofng.display/synprog/so_syn.c69
-rw-r--r--gprofng/testsuite/gprofng.display/synprog/so_syx.c68
-rw-r--r--gprofng/testsuite/gprofng.display/synprog/stopwatch.c294
-rw-r--r--gprofng/testsuite/gprofng.display/synprog/stopwatch.h61
-rw-r--r--gprofng/testsuite/gprofng.display/synprog/synprog.c1823
-rw-r--r--gprofng/testsuite/lib/Makefile.skel61
-rw-r--r--gprofng/testsuite/lib/acct.pm774
-rw-r--r--gprofng/testsuite/lib/display-lib.exp105
-rw-r--r--include/ChangeLog60
-rw-r--r--include/bfdlink.h29
-rw-r--r--include/coff/i386.h1
-rw-r--r--include/coff/internal.h7
-rw-r--r--include/coff/x86_64.h1
-rw-r--r--include/coff/xcoff.h10
-rw-r--r--include/collectorAPI.h73
-rw-r--r--include/ctf-api.h8
-rw-r--r--include/ctf.h8
-rw-r--r--include/diagnostics.h7
-rw-r--r--include/dis-asm.h88
-rw-r--r--include/dwarf2.def2
-rw-r--r--include/elf/amdgpu.h115
-rw-r--r--include/elf/common.h11
-rw-r--r--include/elf/loongarch.h37
-rw-r--r--include/floatformat.h6
-rw-r--r--include/libcollector.h89
-rw-r--r--include/libfcollector.h42
-rw-r--r--include/libiberty.h5
-rw-r--r--include/opcode/loongarch.h4
-rw-r--r--include/opcode/ppc.h34
-rw-r--r--include/opcode/riscv-opc.h238
-rw-r--r--include/opcode/riscv.h3
-rw-r--r--include/plugin-api.h68
-rw-r--r--ld/ChangeLog109
-rw-r--r--ld/Makefile.am8
-rw-r--r--ld/Makefile.in12
-rw-r--r--ld/NEWS41
-rw-r--r--ld/config.in12
-rwxr-xr-xld/configure111
-rw-r--r--ld/configure.ac52
-rw-r--r--ld/configure.tgt26
-rw-r--r--ld/emulparams/armelf_haiku.sh4
-rw-r--r--ld/emulparams/dt-relr.sh18
-rw-r--r--ld/emulparams/elf32_x86_64.sh1
-rw-r--r--ld/emulparams/elf64ppc.sh1
-rw-r--r--ld/emulparams/elf_i386.sh1
-rw-r--r--ld/emulparams/elf_k1om.sh39
-rw-r--r--ld/emulparams/elf_k1om_fbsd.sh3
-rw-r--r--ld/emulparams/elf_l1om.sh39
-rw-r--r--ld/emulparams/elf_l1om_fbsd.sh3
-rw-r--r--ld/emulparams/elf_x86_64.sh1
-rw-r--r--ld/emultempl/aix.em248
-rw-r--r--ld/emultempl/armcoff.em293
-rw-r--r--ld/emultempl/avrelf.em1
-rw-r--r--ld/emultempl/beos.em55
-rw-r--r--ld/emultempl/elf.em68
-rw-r--r--ld/emultempl/emulation.em41
-rw-r--r--ld/emultempl/generic.em39
-rw-r--r--ld/emultempl/msp430.em46
-rw-r--r--ld/emultempl/pe.em84
-rw-r--r--ld/emultempl/pep.em80
-rw-r--r--ld/emultempl/ticoff.em48
-rw-r--r--ld/emultempl/vanilla.em44
-rw-r--r--ld/ld.texi76
-rw-r--r--ld/ldelf.c411
-rw-r--r--ld/ldelf.h2
-rw-r--r--ld/ldelfgen.c3
-rw-r--r--ld/ldemul.c10
-rw-r--r--ld/ldemul.h5
-rw-r--r--ld/ldexp.c30
-rw-r--r--ld/ldexp.h5
-rw-r--r--ld/ldgram.y11
-rw-r--r--ld/ldlang.c175
-rw-r--r--ld/ldlang.h7
-rw-r--r--ld/ldlex.h7
-rw-r--r--ld/ldlex.l1
-rw-r--r--ld/lexsup.c45
-rw-r--r--ld/libdep_plugin.c6
-rw-r--r--ld/mri.c4
-rw-r--r--ld/pe-dll.c58
-rw-r--r--ld/plugin.c7
-rw-r--r--ld/po/BLD-POTFILES.in4
-rw-r--r--ld/po/bg.po4373
-rw-r--r--ld/po/fr.po3330
-rw-r--r--ld/po/ld.pot3082
-rw-r--r--ld/po/sr.po4621
-rw-r--r--ld/po/uk.po3264
-rw-r--r--ld/scripttempl/elf.sc4
-rw-r--r--ld/stamp-h.in1
-rw-r--r--ld/testsuite/config/default.exp40
-rw-r--r--ld/testsuite/ld-cris/globsymw2.s2
-rw-r--r--ld/testsuite/ld-cris/warn3.d2
-rw-r--r--ld/testsuite/ld-ctf/array-char-conflicting-1.c9
-rw-r--r--ld/testsuite/ld-ctf/array-char-conflicting-2.c9
-rw-r--r--ld/testsuite/ld-ctf/array-conflicted-ordering.d26
-rw-r--r--ld/testsuite/ld-ctf/array-extern.c1
-rw-r--r--ld/testsuite/ld-ctf/array-extern.d32
-rw-r--r--ld/testsuite/ld-ctf/conflicting-typedefs.d2
-rw-r--r--ld/testsuite/ld-ctf/data-func-conflicted-vars.d69
-rw-r--r--ld/testsuite/ld-ctf/diag-cttname-invalid.s2
-rw-r--r--ld/testsuite/ld-ctf/diag-cttname-null.s2
-rw-r--r--ld/testsuite/ld-ctf/diag-cuname.s2
-rw-r--r--ld/testsuite/ld-ctf/diag-parlabel.s2
-rw-r--r--ld/testsuite/ld-ctf/diag-parname.s2
-rw-r--r--ld/testsuite/ld-ctf/diag-strlen-invalid.d5
-rw-r--r--ld/testsuite/ld-ctf/diag-strlen-invalid.s44
-rw-r--r--ld/testsuite/ld-ctf/nonrepresentable.d2
-rw-r--r--ld/testsuite/ld-elf/changelma.d2
-rw-r--r--ld/testsuite/ld-elf/dt-relr-1.s13
-rw-r--r--ld/testsuite/ld-elf/dt-relr-1a.d10
-rw-r--r--ld/testsuite/ld-elf/dt-relr-1b.d9
-rw-r--r--ld/testsuite/ld-elf/dt-relr-1c.d9
-rw-r--r--ld/testsuite/ld-elf/dt-relr-2.s20
-rw-r--r--ld/testsuite/ld-elf/dt-relr-2a.d10
-rw-r--r--ld/testsuite/ld-elf/dt-relr-2b.d17
-rw-r--r--ld/testsuite/ld-elf/dt-relr-2c.d17
-rw-r--r--ld/testsuite/ld-elf/dt-relr-2d.d17
-rw-r--r--ld/testsuite/ld-elf/dt-relr-2e.d17
-rw-r--r--ld/testsuite/ld-elf/dt-relr-2f.d8
-rw-r--r--ld/testsuite/ld-elf/dt-relr-2g.d9
-rw-r--r--ld/testsuite/ld-elf/dt-relr-2h.d9
-rw-r--r--ld/testsuite/ld-elf/dt-relr-3.s12
-rw-r--r--ld/testsuite/ld-elf/dt-relr-3a.d9
-rw-r--r--ld/testsuite/ld-elf/dt-relr-3b.d9
-rw-r--r--ld/testsuite/ld-elf/dt-relr-glibc-1.c11
-rw-r--r--ld/testsuite/ld-elf/dt-relr-glibc-1a.rd4
-rw-r--r--ld/testsuite/ld-elf/dt-relr-glibc-1b.rd7
-rw-r--r--ld/testsuite/ld-elf/dt-relr.exp43
-rw-r--r--ld/testsuite/ld-elf/eh4.d2
-rw-r--r--ld/testsuite/ld-elf/eh5.d2
-rw-r--r--ld/testsuite/ld-elf/elf.exp109
-rw-r--r--ld/testsuite/ld-elf/flags1.d2
-rw-r--r--ld/testsuite/ld-elf/linux-x86.exp28
-rw-r--r--ld/testsuite/ld-elf/maxpage5.d2
-rw-r--r--ld/testsuite/ld-elf/note-2.d2
-rw-r--r--ld/testsuite/ld-elf/pr21884.d2
-rw-r--r--ld/testsuite/ld-elf/pr21964-1a.c2
-rw-r--r--ld/testsuite/ld-elf/pr21964-1b.c2
-rw-r--r--ld/testsuite/ld-elf/pr21964-1c.c2
-rw-r--r--ld/testsuite/ld-elf/pr21964-2a.c2
-rw-r--r--ld/testsuite/ld-elf/pr21964-2b.c2
-rw-r--r--ld/testsuite/ld-elf/pr21964-3a.c2
-rw-r--r--ld/testsuite/ld-elf/pr24718-1.d13
-rw-r--r--ld/testsuite/ld-elf/pr24718-1.s7
-rw-r--r--ld/testsuite/ld-elf/pr24718-1.t4
-rw-r--r--ld/testsuite/ld-elf/pr26936.d2
-rw-r--r--ld/testsuite/ld-elf/pr29072-a.s6
-rw-r--r--ld/testsuite/ld-elf/pr29072-b.s5
-rw-r--r--ld/testsuite/ld-elf/pr29072.a.warn1
-rw-r--r--ld/testsuite/ld-elf/pr29072.b.warn2
-rw-r--r--ld/testsuite/ld-elf/pr29072.c.warn1
-rw-r--r--ld/testsuite/ld-elf/rwx-segments-1.l1
-rw-r--r--ld/testsuite/ld-elf/rwx-segments-2.l1
-rw-r--r--ld/testsuite/ld-elf/rwx-segments-2.t20
-rw-r--r--ld/testsuite/ld-elf/shared.exp5
-rw-r--r--ld/testsuite/ld-frv/fdpic1.s1
-rw-r--r--ld/testsuite/ld-frv/fdpic2.s1
-rw-r--r--ld/testsuite/ld-frv/fdpic3.s1
-rw-r--r--ld/testsuite/ld-frv/fdpic4.s1
-rw-r--r--ld/testsuite/ld-frv/fdpic5.s1
-rw-r--r--ld/testsuite/ld-frv/fdpic6.s1
-rw-r--r--ld/testsuite/ld-frv/fdpic7.s1
-rw-r--r--ld/testsuite/ld-frv/fdpic8.s1
-rw-r--r--ld/testsuite/ld-frv/tls-1-dep.s1
-rw-r--r--ld/testsuite/ld-frv/tls-1.s2
-rw-r--r--ld/testsuite/ld-frv/tls-2.s2
-rw-r--r--ld/testsuite/ld-frv/tls-3.s2
-rw-r--r--ld/testsuite/ld-gc/dummy.s1
-rw-r--r--ld/testsuite/ld-i386/dt-relr-1.s14
-rw-r--r--ld/testsuite/ld-i386/dt-relr-1a.d27
-rw-r--r--ld/testsuite/ld-i386/dt-relr-1b.d30
-rw-r--r--ld/testsuite/ld-i386/export-class.exp2
-rw-r--r--ld/testsuite/ld-i386/i386.exp67
-rw-r--r--ld/testsuite/ld-i386/ibt-plt-2a.d2
-rw-r--r--ld/testsuite/ld-i386/ibt-plt-3a.d2
-rw-r--r--ld/testsuite/ld-i386/ibt-plt-3c.d2
-rw-r--r--ld/testsuite/ld-i386/pr20830.d2
-rw-r--r--ld/testsuite/ld-i386/pr21997-1.err2
-rw-r--r--ld/testsuite/ld-i386/pr26869.d2
-rw-r--r--ld/testsuite/ld-i386/pr28870.d10
-rw-r--r--ld/testsuite/ld-i386/pr28870.s6
-rw-r--r--ld/testsuite/ld-i386/pr28875.err2
-rw-r--r--ld/testsuite/ld-i386/pr28875a.c5
-rw-r--r--ld/testsuite/ld-i386/pr28875b.c7
-rw-r--r--ld/testsuite/ld-i386/pr28894.d3
-rw-r--r--ld/testsuite/ld-i386/pr28894.s7
-rw-r--r--ld/testsuite/ld-i386/report-reloc-1.d2
-rw-r--r--ld/testsuite/ld-ifunc/ifunc-2-i386-now.d2
-rw-r--r--ld/testsuite/ld-ifunc/ifunc-2-local-i386-now.d2
-rw-r--r--ld/testsuite/ld-ifunc/ifunc-2-local-x86-64-now.d2
-rw-r--r--ld/testsuite/ld-ifunc/ifunc-2-x86-64-now.d2
-rw-r--r--ld/testsuite/ld-ifunc/pr17154-x86-64-now.d2
-rw-r--r--ld/testsuite/ld-ifunc/pr17154-x86-64.d2
-rw-r--r--ld/testsuite/ld-loongarch-elf/disas-jirl-32.d15
-rw-r--r--ld/testsuite/ld-loongarch-elf/disas-jirl-32.s5
-rw-r--r--ld/testsuite/ld-loongarch-elf/disas-jirl.d3
-rw-r--r--ld/testsuite/ld-loongarch-elf/jmp_op.d2
-rw-r--r--ld/testsuite/ld-loongarch-elf/ld-loongarch-elf.exp9
-rw-r--r--ld/testsuite/ld-loongarch-elf/macro_op.d3
-rw-r--r--ld/testsuite/ld-loongarch-elf/macro_op_32.d729
-rw-r--r--ld/testsuite/ld-loongarch-elf/macro_op_32.s29
-rw-r--r--ld/testsuite/ld-pe/pe.exp15
-rw-r--r--ld/testsuite/ld-pe/pr19803.d2
-rw-r--r--ld/testsuite/ld-pe/secidx.d27
-rw-r--r--ld/testsuite/ld-pe/secidx1.s77
-rw-r--r--ld/testsuite/ld-pe/secidx2.s17
-rw-r--r--ld/testsuite/ld-pe/secidx_64.d27
-rw-r--r--ld/testsuite/ld-plugin/lto.exp59
-rw-r--r--ld/testsuite/ld-plugin/pr28849.d3
-rw-r--r--ld/testsuite/ld-plugin/pr28849a.c2
-rw-r--r--ld/testsuite/ld-plugin/pr28849b.c3
-rw-r--r--ld/testsuite/ld-plugin/pr28879a.cc7
-rw-r--r--ld/testsuite/ld-plugin/pr28879b.cc8
-rw-r--r--ld/testsuite/ld-plugin/pr29086.c19
-rw-r--r--ld/testsuite/ld-powerpc/abs-pie-relr.d34
-rw-r--r--ld/testsuite/ld-powerpc/abs-pie-relr.r8
-rw-r--r--ld/testsuite/ld-powerpc/abs-pie.d34
-rw-r--r--ld/testsuite/ld-powerpc/abs-pie.r8
-rw-r--r--ld/testsuite/ld-powerpc/abs-reloc.s49
-rw-r--r--ld/testsuite/ld-powerpc/abs-shared-relr.d34
-rw-r--r--ld/testsuite/ld-powerpc/abs-shared-relr.r17
-rw-r--r--ld/testsuite/ld-powerpc/abs-shared.d34
-rw-r--r--ld/testsuite/ld-powerpc/abs-shared.r14
-rw-r--r--ld/testsuite/ld-powerpc/abs-static.d32
-rw-r--r--ld/testsuite/ld-powerpc/abs-static.r6
-rw-r--r--ld/testsuite/ld-powerpc/abs32-pie.d26
-rw-r--r--ld/testsuite/ld-powerpc/abs32-pie.r9
-rw-r--r--ld/testsuite/ld-powerpc/abs32-reloc.s22
-rw-r--r--ld/testsuite/ld-powerpc/abs32-shared.d24
-rw-r--r--ld/testsuite/ld-powerpc/abs32-shared.r13
-rw-r--r--ld/testsuite/ld-powerpc/abs32-static.d26
-rw-r--r--ld/testsuite/ld-powerpc/abs32-static.r6
-rw-r--r--ld/testsuite/ld-powerpc/elfv2so.d2
-rw-r--r--ld/testsuite/ld-powerpc/notoc.d2
-rw-r--r--ld/testsuite/ld-powerpc/notoc3.d2
-rw-r--r--ld/testsuite/ld-powerpc/powerpc.exp34
-rw-r--r--ld/testsuite/ld-powerpc/pr28827-1.d5
-rw-r--r--ld/testsuite/ld-powerpc/pr28827-1.s83
-rw-r--r--ld/testsuite/ld-powerpc/pr28827-2.d48
-rw-r--r--ld/testsuite/ld-powerpc/pr28827-2.lnk9
-rw-r--r--ld/testsuite/ld-powerpc/pr28827-2.s15
-rw-r--r--ld/testsuite/ld-powerpc/symtocbase-1.s10
-rw-r--r--ld/testsuite/ld-powerpc/symtocbase-2.s10
-rw-r--r--ld/testsuite/ld-powerpc/symtocbase.d2
-rw-r--r--ld/testsuite/ld-powerpc/tlsdesc2.d2
-rw-r--r--ld/testsuite/ld-powerpc/tlsget.d2
-rw-r--r--ld/testsuite/ld-powerpc/tlsget2.d2
-rw-r--r--ld/testsuite/ld-powerpc/tlsopt5.d2
-rw-r--r--ld/testsuite/ld-powerpc/tlsopt6.d2
-rw-r--r--ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-01.d11
-rw-r--r--ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-01a.s1
-rw-r--r--ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-01b.s1
-rw-r--r--ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-02.d27
-rw-r--r--ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-02a.s1
-rw-r--r--ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-02b.s1
-rw-r--r--ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-02c.s1
-rw-r--r--ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-02d.s1
-rw-r--r--ld/testsuite/ld-riscv-elf/attr-merge-user-ext-01.d9
-rw-r--r--ld/testsuite/ld-riscv-elf/attr-merge-user-ext-rv32i2p1_m2p0.s1
-rw-r--r--ld/testsuite/ld-riscv-elf/attr-merge-user-ext-rv32i2p1_m2p1.s1
-rw-r--r--ld/testsuite/ld-riscv-elf/ld-riscv-elf.exp3
-rw-r--r--ld/testsuite/ld-scripts/defined5.d2
-rw-r--r--ld/testsuite/ld-scripts/output-section-types.d18
-rw-r--r--ld/testsuite/ld-scripts/output-section-types.t7
-rw-r--r--ld/testsuite/ld-tic6x/got-reloc-global.s1
-rw-r--r--ld/testsuite/ld-tic6x/shlib-1.rd2
-rw-r--r--ld/testsuite/ld-tic6x/shlib-1.s1
-rw-r--r--ld/testsuite/ld-tic6x/shlib-1b.rd2
-rw-r--r--ld/testsuite/ld-tic6x/shlib-1r.rd2
-rw-r--r--ld/testsuite/ld-tic6x/shlib-1rb.rd2
-rw-r--r--ld/testsuite/ld-tic6x/shlib-2.s1
-rw-r--r--ld/testsuite/ld-tic6x/shlib-app-1.rd2
-rw-r--r--ld/testsuite/ld-tic6x/shlib-app-1.s1
-rw-r--r--ld/testsuite/ld-tic6x/shlib-app-1b.rd2
-rw-r--r--ld/testsuite/ld-tic6x/shlib-app-1r.rd2
-rw-r--r--ld/testsuite/ld-tic6x/shlib-app-1r.s1
-rw-r--r--ld/testsuite/ld-tic6x/shlib-app-1rb.rd2
-rw-r--r--ld/testsuite/ld-tic6x/shlib-noindex.rd2
-rw-r--r--ld/testsuite/ld-tic6x/static-app-1.rd2
-rw-r--r--ld/testsuite/ld-tic6x/static-app-1b.rd2
-rw-r--r--ld/testsuite/ld-tic6x/static-app-1r.rd2
-rw-r--r--ld/testsuite/ld-tic6x/static-app-1rb.rd2
-rw-r--r--ld/testsuite/ld-unique/unique.s3
-rw-r--r--ld/testsuite/ld-unique/unique_empty.s2
-rw-r--r--ld/testsuite/ld-unique/unique_shared.s1
-rw-r--r--ld/testsuite/ld-vsb/common.c (renamed from ld/testsuite/ld-elfvsb/common.c)0
-rw-r--r--ld/testsuite/ld-vsb/define.s (renamed from ld/testsuite/ld-elfvsb/define.s)6
-rw-r--r--ld/testsuite/ld-vsb/elf-offset.ld (renamed from ld/testsuite/ld-elfvsb/elf-offset.ld)0
-rw-r--r--ld/testsuite/ld-vsb/elfvsb.dat (renamed from ld/testsuite/ld-elfvsb/elfvsb.dat)0
-rw-r--r--ld/testsuite/ld-vsb/hidden0-elf.d (renamed from ld/testsuite/ld-elfvsb/hidden0.d)0
-rw-r--r--ld/testsuite/ld-vsb/hidden1-elf.d (renamed from ld/testsuite/ld-elfvsb/hidden1.d)0
-rw-r--r--ld/testsuite/ld-vsb/hidden2-elf.d (renamed from ld/testsuite/ld-elfvsb/hidden2.d)0
-rw-r--r--ld/testsuite/ld-vsb/hidden2.ld (renamed from ld/testsuite/ld-elfvsb/hidden2.ld)0
-rw-r--r--ld/testsuite/ld-vsb/hidden2.s (renamed from ld/testsuite/ld-elfvsb/hidden2.s)0
-rw-r--r--ld/testsuite/ld-vsb/internal0-elf.d (renamed from ld/testsuite/ld-elfvsb/internal0.d)0
-rw-r--r--ld/testsuite/ld-vsb/internal1-elf.d (renamed from ld/testsuite/ld-elfvsb/internal1.d)0
-rw-r--r--ld/testsuite/ld-vsb/main.c (renamed from ld/testsuite/ld-elfvsb/main.c)8
-rw-r--r--ld/testsuite/ld-vsb/protected0-elf.d (renamed from ld/testsuite/ld-elfvsb/protected0.d)0
-rw-r--r--ld/testsuite/ld-vsb/protected1-elf.d (renamed from ld/testsuite/ld-elfvsb/protected1.d)0
-rw-r--r--ld/testsuite/ld-vsb/sh1.c (renamed from ld/testsuite/ld-elfvsb/sh1.c)10
-rw-r--r--ld/testsuite/ld-vsb/sh2.c (renamed from ld/testsuite/ld-elfvsb/sh2.c)0
-rw-r--r--ld/testsuite/ld-vsb/sh3.c (renamed from ld/testsuite/ld-elfvsb/sh3.c)0
-rw-r--r--ld/testsuite/ld-vsb/test.c (renamed from ld/testsuite/ld-elfvsb/test.c)0
-rw-r--r--ld/testsuite/ld-vsb/undef.s (renamed from ld/testsuite/ld-elfvsb/undef.s)0
-rw-r--r--ld/testsuite/ld-vsb/visibility-1-xcoff-32.d21
-rw-r--r--ld/testsuite/ld-vsb/visibility-1-xcoff-64.d21
-rw-r--r--ld/testsuite/ld-vsb/visibility-2-xcoff-32.d16
-rw-r--r--ld/testsuite/ld-vsb/visibility-2-xcoff-64.d16
-rw-r--r--ld/testsuite/ld-vsb/vsb.exp (renamed from ld/testsuite/ld-elfvsb/elfvsb.exp)112
-rw-r--r--ld/testsuite/ld-vsb/xcoffvsb.dat24
-rw-r--r--ld/testsuite/ld-x86-64/abs-k1om.d12
-rw-r--r--ld/testsuite/ld-x86-64/abs-l1om.d12
-rw-r--r--ld/testsuite/ld-x86-64/bnd-branch-1-now.d2
-rw-r--r--ld/testsuite/ld-x86-64/bnd-ifunc-1-now.d2
-rw-r--r--ld/testsuite/ld-x86-64/bnd-ifunc-2-now.d2
-rw-r--r--ld/testsuite/ld-x86-64/bnd-ifunc-2.d2
-rw-r--r--ld/testsuite/ld-x86-64/bnd-plt-1-now.d2
-rw-r--r--ld/testsuite/ld-x86-64/bnd-plt-1.d2
-rw-r--r--ld/testsuite/ld-x86-64/dt-relr-1.s14
-rw-r--r--ld/testsuite/ld-x86-64/dt-relr-1a-x32.d27
-rw-r--r--ld/testsuite/ld-x86-64/dt-relr-1a.d27
-rw-r--r--ld/testsuite/ld-x86-64/dt-relr-1b-x32.d30
-rw-r--r--ld/testsuite/ld-x86-64/dt-relr-1b.d30
-rw-r--r--ld/testsuite/ld-x86-64/dummy.s1
-rw-r--r--ld/testsuite/ld-x86-64/export-class.exp3
-rw-r--r--ld/testsuite/ld-x86-64/foo.s1
-rw-r--r--ld/testsuite/ld-x86-64/gotpcrel1a.S1
-rw-r--r--ld/testsuite/ld-x86-64/gotpcrel1d.S1
-rw-r--r--ld/testsuite/ld-x86-64/ibt-plt-2a-x32.d2
-rw-r--r--ld/testsuite/ld-x86-64/ibt-plt-2a.d2
-rw-r--r--ld/testsuite/ld-x86-64/ibt-plt-3a-x32.d2
-rw-r--r--ld/testsuite/ld-x86-64/ibt-plt-3a.d2
-rw-r--r--ld/testsuite/ld-x86-64/ilp32-4.d2
-rw-r--r--ld/testsuite/ld-x86-64/load1c.d2
-rw-r--r--ld/testsuite/ld-x86-64/load1d.d2
-rw-r--r--ld/testsuite/ld-x86-64/plt-main-bnd.dd2
-rw-r--r--ld/testsuite/ld-x86-64/plt-main-ibt-x32.dd2
-rw-r--r--ld/testsuite/ld-x86-64/plt-main-ibt.dd2
-rw-r--r--ld/testsuite/ld-x86-64/pr13082-2b.d2
-rw-r--r--ld/testsuite/ld-x86-64/pr14207.d8
-rw-r--r--ld/testsuite/ld-x86-64/pr18176.d4
-rw-r--r--ld/testsuite/ld-x86-64/pr19031b.S1
-rw-r--r--ld/testsuite/ld-x86-64/pr19162.d2
-rw-r--r--ld/testsuite/ld-x86-64/pr19319a.S1
-rw-r--r--ld/testsuite/ld-x86-64/pr19319b.S1
-rw-r--r--ld/testsuite/ld-x86-64/pr19636-2d.d2
-rw-r--r--ld/testsuite/ld-x86-64/pr19636-2l.d2
-rw-r--r--ld/testsuite/ld-x86-64/pr19827a.S2
-rw-r--r--ld/testsuite/ld-x86-64/pr19827b.S1
-rw-r--r--ld/testsuite/ld-x86-64/pr19969a.S1
-rw-r--r--ld/testsuite/ld-x86-64/pr19969b.S1
-rw-r--r--ld/testsuite/ld-x86-64/pr20253-1d.d2
-rw-r--r--ld/testsuite/ld-x86-64/pr20253-1f.d2
-rw-r--r--ld/testsuite/ld-x86-64/pr20253-1j.d2
-rw-r--r--ld/testsuite/ld-x86-64/pr20253-1l.d2
-rw-r--r--ld/testsuite/ld-x86-64/pr20550a.s1
-rw-r--r--ld/testsuite/ld-x86-64/pr20800a.S1
-rw-r--r--ld/testsuite/ld-x86-64/pr20830a-now.d12
-rw-r--r--ld/testsuite/ld-x86-64/pr20830a.d12
-rw-r--r--ld/testsuite/ld-x86-64/pr20830b-now.d14
-rw-r--r--ld/testsuite/ld-x86-64/pr20830b.d14
-rw-r--r--ld/testsuite/ld-x86-64/pr21038a-now.d12
-rw-r--r--ld/testsuite/ld-x86-64/pr21038a.d12
-rw-r--r--ld/testsuite/ld-x86-64/pr21038b-now.d10
-rw-r--r--ld/testsuite/ld-x86-64/pr21038b.d8
-rw-r--r--ld/testsuite/ld-x86-64/pr21038c-now.d14
-rw-r--r--ld/testsuite/ld-x86-64/pr21038c.d14
-rw-r--r--ld/testsuite/ld-x86-64/pr21997-1a.err2
-rw-r--r--ld/testsuite/ld-x86-64/pr21997-1b.err2
-rw-r--r--ld/testsuite/ld-x86-64/pr22791-1b.s1
-rw-r--r--ld/testsuite/ld-x86-64/pr26711.s1
-rw-r--r--ld/testsuite/ld-x86-64/pr28875-data.err2
-rw-r--r--ld/testsuite/ld-x86-64/pr28875-func.err2
-rw-r--r--ld/testsuite/ld-x86-64/property-6c.S1
-rw-r--r--ld/testsuite/ld-x86-64/property-no-copy.S1
-rw-r--r--ld/testsuite/ld-x86-64/property-stack.S1
-rw-r--r--ld/testsuite/ld-x86-64/property-unsorted-1.S1
-rw-r--r--ld/testsuite/ld-x86-64/property-unsorted-2.S1
-rw-r--r--ld/testsuite/ld-x86-64/property-x86-1.S1
-rw-r--r--ld/testsuite/ld-x86-64/property-x86-2.S1
-rw-r--r--ld/testsuite/ld-x86-64/protected-func-3.c41
-rw-r--r--ld/testsuite/ld-x86-64/protected2-k1om.d18
-rw-r--r--ld/testsuite/ld-x86-64/protected2-l1om.d18
-rw-r--r--ld/testsuite/ld-x86-64/protected3-k1om.d17
-rw-r--r--ld/testsuite/ld-x86-64/protected3-l1om.d17
-rw-r--r--ld/testsuite/ld-x86-64/report-reloc-1-x32.d2
-rw-r--r--ld/testsuite/ld-x86-64/report-reloc-1.d2
-rw-r--r--ld/testsuite/ld-x86-64/start.s1
-rw-r--r--ld/testsuite/ld-x86-64/x86-64.exp124
-rw-r--r--ld/testsuite/lib/ld-lib.exp24
-rwxr-xr-xlibbacktrace/configure175
-rw-r--r--libctf/ChangeLog4
-rw-r--r--libctf/Makefile.in1
-rw-r--r--libctf/NEWS9
-rwxr-xr-xlibctf/configure20
-rw-r--r--libctf/ctf-dedup.c21
-rw-r--r--libctf/ctf-impl.h2
-rw-r--r--libctf/ctf-link.c37
-rw-r--r--libctf/ctf-open.c102
-rw-r--r--libctf/ctf-serialize.c219
-rw-r--r--libctf/doc/local.mk1
-rw-r--r--libiberty/ChangeLog139
-rw-r--r--libiberty/Makefile.in24
-rwxr-xr-xlibiberty/configure23
-rw-r--r--libiberty/configure.ac20
-rw-r--r--libiberty/cp-demangle.c5
-rw-r--r--libiberty/d-demangle.c101
-rw-r--r--libiberty/floatformat.c34
-rw-r--r--libiberty/make-temp-file.c16
-rw-r--r--libiberty/regex.c4
-rw-r--r--libiberty/rust-demangle.c47
-rw-r--r--libiberty/simple-object-mach-o.c5
-rw-r--r--libiberty/testsuite/d-demangle-expected58
-rw-r--r--libiberty/testsuite/demangle-expected5
-rw-r--r--libiberty/xmalloc.c2
-rw-r--r--libtool.m416
-rw-r--r--opcodes/ChangeLog46
-rw-r--r--opcodes/Makefile.am6
-rw-r--r--opcodes/Makefile.in6
-rw-r--r--opcodes/aarch64-opc.c2
-rwxr-xr-xopcodes/configure43
-rw-r--r--opcodes/configure.ac3
-rw-r--r--opcodes/csky-dis.c2
-rw-r--r--opcodes/dis-init.c5
-rw-r--r--opcodes/disassemble.c25
-rw-r--r--opcodes/i386-dis-evex-mod.h30
-rw-r--r--opcodes/i386-dis-evex-prefix.h203
-rw-r--r--opcodes/i386-dis-evex-w.h249
-rw-r--r--opcodes/i386-dis-evex.h82
-rw-r--r--opcodes/i386-dis.c882
-rw-r--r--opcodes/i386-gen.c48
-rw-r--r--opcodes/i386-init.h762
-rw-r--r--opcodes/i386-opc.h10
-rw-r--r--opcodes/i386-opc.tbl358
-rw-r--r--opcodes/i386-tbl.h13793
-rw-r--r--opcodes/loongarch-coder.c30
-rw-r--r--opcodes/mep-dis.c13
-rw-r--r--opcodes/microblaze-opc.h2
-rw-r--r--opcodes/microblaze-opcm.h3
-rw-r--r--opcodes/micromips-opc.c4
-rw-r--r--opcodes/mips-opc.c11
-rw-r--r--opcodes/po/de.po512
-rw-r--r--opcodes/po/opcodes.pot446
-rw-r--r--opcodes/po/ro.po2710
-rw-r--r--opcodes/po/sr.po506
-rw-r--r--opcodes/po/uk.po530
-rw-r--r--opcodes/ppc-dis.c5
-rw-r--r--opcodes/ppc-opc.c683
-rw-r--r--opcodes/riscv-dis.c223
-rw-r--r--opcodes/riscv-opc.c19
-rw-r--r--opcodes/rl78-dis.c2
-rw-r--r--opcodes/s390-mkopc.c3
-rw-r--r--opcodes/s390-opc.c2
-rw-r--r--opcodes/s390-opc.txt4
-rw-r--r--opcodes/stamp-h.in1
-rw-r--r--readline/readline/callback.c8
-rw-r--r--readline/readline/doc/rltech.texi11
-rw-r--r--readline/readline/readline.c19
-rw-r--r--readline/readline/readline.h8
-rw-r--r--readline/readline/rlprivate.h1
-rw-r--r--readline/readline/rltty.c4
-rw-r--r--sim/Makefile.in86
-rw-r--r--sim/arm/wrapper.c15
-rwxr-xr-xsim/bpf/configure9
-rw-r--r--sim/common/Make-common.in7
-rw-r--r--sim/common/cgen-trace.c19
-rw-r--r--sim/common/cgen-trace.h1
-rw-r--r--sim/common/gdbinit.in14
-rw-r--r--sim/common/sim-bits.h5
-rw-r--r--sim/common/sim-core.h4
-rw-r--r--sim/common/sim-fpu.c324
-rw-r--r--sim/common/sim-fpu.h61
-rw-r--r--sim/common/sim-load.c2
-rw-r--r--sim/common/sim-memopt.c11
-rw-r--r--sim/common/sim-trace.c14
-rwxr-xr-xsim/configure500
-rw-r--r--sim/configure.ac3
-rw-r--r--sim/cris/sim-if.c13
-rw-r--r--sim/erc32/interf.c3
-rw-r--r--sim/erc32/sis.c18
-rw-r--r--sim/erc32/sis.h3
-rw-r--r--sim/gdbinit.in14
-rw-r--r--sim/m32c/trace.c14
-rw-r--r--sim/m4/sim_ac_output.m47
-rw-r--r--sim/m4/sim_ac_toolchain.m421
-rw-r--r--sim/mips/Makefile.in1
-rwxr-xr-xsim/mips/configure31
-rw-r--r--sim/mips/configure.ac20
-rw-r--r--sim/mips/cp1.c432
-rw-r--r--sim/mips/cp1.h6
-rw-r--r--sim/mips/interp.c6
-rw-r--r--sim/mips/micromips.igen4
-rw-r--r--sim/mips/mips.igen381
-rw-r--r--sim/mips/mips3264r2.igen30
-rw-r--r--sim/mips/mips3264r6.igen1226
-rw-r--r--sim/mips/sim-main.h97
-rwxr-xr-xsim/mn10300/configure9
-rwxr-xr-xsim/or1k/configure9
-rw-r--r--sim/ppc/hw_init.c2
-rw-r--r--sim/ppc/std-config.h2
-rwxr-xr-xsim/riscv/configure9
-rw-r--r--sim/rl78/trace.c14
-rw-r--r--sim/rx/trace.c14
-rw-r--r--sim/testsuite/aarch64/allinsn.exp17
-rw-r--r--sim/testsuite/arm/allinsn.exp22
-rw-r--r--sim/testsuite/arm/iwmmxt/iwmmxt.exp22
-rw-r--r--sim/testsuite/arm/misc.exp22
-rw-r--r--sim/testsuite/arm/thumb/allthumb.exp22
-rw-r--r--sim/testsuite/arm/xscale/xscale.exp22
-rw-r--r--sim/testsuite/avr/allinsn.exp17
-rw-r--r--sim/testsuite/bfin/allinsn.exp17
-rw-r--r--sim/testsuite/bpf/allinsn.exp26
-rw-r--r--sim/testsuite/cr16/allinsn.exp28
-rw-r--r--sim/testsuite/cr16/misc.exp28
-rw-r--r--sim/testsuite/cris/asm/asm.exp48
-rw-r--r--sim/testsuite/cris/asm/endmem1.ms47
-rw-r--r--sim/testsuite/cris/asm/io1.ms1
-rw-r--r--sim/testsuite/cris/asm/io2.ms1
-rw-r--r--sim/testsuite/cris/asm/io3.ms1
-rw-r--r--sim/testsuite/cris/asm/io6.ms1
-rw-r--r--sim/testsuite/cris/asm/io7.ms1
-rw-r--r--sim/testsuite/cris/c/c.exp18
-rw-r--r--sim/testsuite/cris/c/openpf1.c8
-rw-r--r--sim/testsuite/cris/c/stat3.c3
-rw-r--r--sim/testsuite/cris/hw/rv-n-cris/irq1.ms1
-rw-r--r--sim/testsuite/d10v/allinsn.exp17
-rw-r--r--sim/testsuite/example-synacor/allinsn.exp21
-rw-r--r--sim/testsuite/frv/allinsn-a-b.exp3
-rw-r--r--sim/testsuite/frv/allinsn-c.exp3
-rw-r--r--sim/testsuite/frv/allinsn-d-h.exp3
-rw-r--r--sim/testsuite/frv/allinsn-i-l.exp3
-rw-r--r--sim/testsuite/frv/allinsn-m.exp3
-rw-r--r--sim/testsuite/frv/allinsn-n.exp3
-rw-r--r--sim/testsuite/frv/allinsn-o-s.exp3
-rw-r--r--sim/testsuite/frv/allinsn-t-z.exp3
-rw-r--r--sim/testsuite/frv/fr400/allinsn.exp21
-rw-r--r--sim/testsuite/frv/fr500/allinsn.exp21
-rw-r--r--sim/testsuite/frv/fr550/allinsn.exp21
-rw-r--r--sim/testsuite/frv/interrupts.exp21
-rw-r--r--sim/testsuite/frv/misc.exp21
-rw-r--r--sim/testsuite/frv/parallel.exp21
-rw-r--r--sim/testsuite/ft32/allinsn.exp17
-rw-r--r--sim/testsuite/h8300/allinsn.exp16
-rw-r--r--sim/testsuite/iq2000/allinsn.exp17
-rw-r--r--sim/testsuite/lib/sim-defs.exp65
-rw-r--r--sim/testsuite/lm32/allinsn.exp17
-rw-r--r--sim/testsuite/m32c/allinsn.exp17
-rw-r--r--sim/testsuite/m32r/allinsn.exp23
-rw-r--r--sim/testsuite/m32r/misc.exp23
-rw-r--r--sim/testsuite/m68hc11/allinsn.exp17
-rw-r--r--sim/testsuite/mcore/allinsn.exp17
-rw-r--r--sim/testsuite/microblaze/allinsn.exp17
-rw-r--r--sim/testsuite/mips/basic.exp72
-rw-r--r--sim/testsuite/mips/hilo-hazard-3.s2
-rw-r--r--sim/testsuite/mips/r2-fpu.s31
-rw-r--r--sim/testsuite/mips/r6-64.s157
-rw-r--r--sim/testsuite/mips/r6-branch.s291
-rw-r--r--sim/testsuite/mips/r6-forbidden.s51
-rw-r--r--sim/testsuite/mips/r6-fpu.s446
-rw-r--r--sim/testsuite/mips/r6-llsc-dp.s57
-rw-r--r--sim/testsuite/mips/r6-llsc-wp.s41
-rw-r--r--sim/testsuite/mips/r6-removed.csv68
-rw-r--r--sim/testsuite/mips/r6-removed.s18
-rw-r--r--sim/testsuite/mips/r6.s163
-rw-r--r--sim/testsuite/mips/testutils.inc55
-rw-r--r--sim/testsuite/mips/utils-r6.inc150
-rw-r--r--sim/testsuite/mn10300/allinsn.exp17
-rw-r--r--sim/testsuite/moxie/allinsn.exp17
-rw-r--r--sim/testsuite/msp430/allinsn.exp17
-rw-r--r--sim/testsuite/or1k/alltests.exp19
-rw-r--r--sim/testsuite/pru/allinsn.exp17
-rw-r--r--sim/testsuite/riscv/allinsn.exp17
-rw-r--r--sim/testsuite/sh/allinsn.exp6
-rw-r--r--sim/testsuite/v850/allinsns.exp29
-rw-r--r--sim/testsuite/v850/bins.cgs12
-rw-r--r--sim/testsuite/v850/divq.cgs11
-rw-r--r--sim/testsuite/v850/mul.cgs15
-rwxr-xr-xsim/v850/configure9
-rw-r--r--sim/v850/simops.c17
-rwxr-xr-xsrc-release.sh4
-rw-r--r--zlib/CMakeLists.txt2
-rw-r--r--zlib/ChangeLog165
-rw-r--r--zlib/Makefile.am2
-rw-r--r--zlib/Makefile.in193
-rw-r--r--zlib/README14
-rw-r--r--zlib/aclocal.m4191
-rw-r--r--zlib/adler32.c2
-rw-r--r--zlib/compress.c2
-rwxr-xr-xzlib/configure213
-rw-r--r--zlib/contrib/README.contrib21
-rw-r--r--zlib/contrib/blast/blast.h2
-rw-r--r--zlib/contrib/delphi/ZLib.pas2
-rw-r--r--zlib/contrib/dotzlib/DotZLib.chmbin72728 -> 72726 bytes
-rw-r--r--zlib/contrib/dotzlib/DotZLib/UnitTests.cs2
-rw-r--r--zlib/contrib/infback9/inftree9.c6
-rw-r--r--zlib/contrib/iostream2/zstream.h2
-rw-r--r--zlib/contrib/minizip/Makefile12
-rw-r--r--zlib/contrib/minizip/configure.ac2
-rw-r--r--zlib/contrib/minizip/crypt.h19
-rw-r--r--zlib/contrib/minizip/ioapi.c18
-rw-r--r--zlib/contrib/minizip/ioapi.h8
-rw-r--r--zlib/contrib/minizip/miniunz.c35
-rw-r--r--zlib/contrib/minizip/minizip.c41
-rw-r--r--zlib/contrib/minizip/unzip.c31
-rw-r--r--zlib/contrib/minizip/unzip.h12
-rw-r--r--zlib/contrib/minizip/zip.c36
-rw-r--r--zlib/contrib/minizip/zip.h17
-rw-r--r--zlib/contrib/pascal/zlibpas.pas2
-rw-r--r--zlib/contrib/puff/zeros.rawbin1213 -> 2517 bytes
-rw-r--r--zlib/contrib/vstudio/readme.txt2
-rw-r--r--zlib/contrib/vstudio/vc10/zlib.rc8
-rw-r--r--zlib/contrib/vstudio/vc10/zlibvc.def5
-rw-r--r--zlib/contrib/vstudio/vc11/zlib.rc8
-rw-r--r--zlib/contrib/vstudio/vc11/zlibvc.def5
-rw-r--r--zlib/contrib/vstudio/vc12/zlib.rc8
-rw-r--r--zlib/contrib/vstudio/vc12/zlibvc.def5
-rw-r--r--zlib/contrib/vstudio/vc14/zlib.rc8
-rw-r--r--zlib/contrib/vstudio/vc14/zlibvc.def5
-rw-r--r--zlib/contrib/vstudio/vc9/zlib.rc8
-rw-r--r--zlib/contrib/vstudio/vc9/zlibvc.def5
-rw-r--r--zlib/crc32.c1260
-rw-r--r--zlib/crc32.h9877
-rw-r--r--zlib/deflate.c110
-rw-r--r--zlib/deflate.h29
-rw-r--r--zlib/doc/crc-doc.1.0.pdfbin0 -> 776142 bytes
-rw-r--r--zlib/doc/txtvsbin.txt12
-rw-r--r--zlib/examples/README.examples5
-rw-r--r--zlib/examples/enough.c745
-rw-r--r--zlib/examples/gzappend.c2
-rw-r--r--zlib/examples/gzlog.c6
-rw-r--r--zlib/examples/gznorm.c470
-rw-r--r--zlib/examples/zran.c256
-rw-r--r--zlib/examples/zran.h40
-rw-r--r--zlib/gzguts.h3
-rw-r--r--zlib/gzlib.c8
-rw-r--r--zlib/gzread.c12
-rw-r--r--zlib/gzwrite.c38
-rw-r--r--zlib/infback.c3
-rw-r--r--zlib/inffast.c28
-rw-r--r--zlib/inflate.c47
-rw-r--r--zlib/inflate.h5
-rw-r--r--zlib/inftrees.c6
-rw-r--r--zlib/os400/README4002
-rw-r--r--zlib/os400/zlib.inc6
-rw-r--r--zlib/qnx/package.qpg10
-rw-r--r--zlib/test/example.c5
-rw-r--r--zlib/treebuild.xml4
-rw-r--r--zlib/trees.c77
-rw-r--r--zlib/uncompr.c2
-rw-r--r--zlib/win32/Makefile.bor1
-rw-r--r--zlib/win32/Makefile.gcc5
-rw-r--r--zlib/win32/Makefile.msc4
-rw-r--r--zlib/win32/README-WIN32.txt4
-rw-r--r--zlib/win32/zlib.def4
-rw-r--r--zlib/zconf.h18
-rw-r--r--zlib/zlib.36
-rw-r--r--zlib/zlib.3.pdfbin0 -> 8848 bytes
-rw-r--r--zlib/zlib.h221
-rw-r--r--zlib/zlib.map6
-rw-r--r--zlib/zutil.c6
-rw-r--r--zlib/zutil.h23
2643 files changed, 401514 insertions, 104541 deletions
diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 00000000000..d1da30853d4
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,47 @@
+# Copyright 2022 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# This file helps editors auto-configure whitespace settings.
+#
+# See here for more information about the format and editor support:
+#
+# https://editorconfig.org/
+
+root = true
+
+[*]
+end_of_line = lf
+insert_final_newline = true
+tab_width = 8
+
+# Makefile
+[{Makefile*,*.mk}]
+indent_style = tab
+indent_size = 8
+
+# C/C++
+[*.{c,h,cc}]
+indent_style = tab
+indent_size = 2
+
+# Expect / TCL
+[*.{exp,tcl}]
+indent_style = tab
+indent_size = 4
+
+# Python
+[*.py]
+indent_style = space
+indent_size = 4
diff --git a/ChangeLog b/ChangeLog
index 1aeef12e2d6..e6b3e58b8f0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,397 @@
+2022-04-12 Nick Clifton <nickc@redhat.com>
+
+ * zlib: Rebase to the 1.2.12 release.
+
+2022-04-08 Simon Marchi <simon.marchi@efficios.com>
+
+ * configure.ac: Add AC_SUBST(PKG_CONFIG_PATH).
+ * configure: Re-generate.
+ * Makefile.tpl (HOST_EXPORTS): Pass PKG_CONFIG_PATH.
+ (PKG_CONFIG_PATH): New.
+ * Makefile.in: Re-generate.
+
+2022-03-15 Jose E. Marchesi <jose.marchesi@oracle.com>
+
+ * gprofng/src/gp-collect-app.cc (collect::check_args): Use
+ fallthrough comment instead of attribute.
+
+2022-03-11 Vladimir Mezentsev <vladimir.mezentsev@oracle.com>
+
+ * Makefile.def: Add gprofng module.
+ * configure.ac: Add --enable-gprofng option.
+ * src-release.sh: Add gprofng.
+ * Makefile.in: Regenerate.
+ * configure: Regenerate.
+ * gprofng: New directory.
+
+2022-01-22 Nick Clifton <nickc@redhat.com>
+
+ * 2.38 release branch created.
+
+2022-01-17 Nick Clifton <nickc@redhat.com>
+
+ Update config.[guess|sub] from upstream:
+
+ 2022-01-09 Idan Horowitz <idan.horowitz@gmail.com>
+
+ config.guess: recognize SerenityOS
+ * config.guess (*:SerenityOS:*:*): Recognize.
+ (timestamp): Update.
+
+ 2022-01-03 Bernhard Voelker <mail@bernhard-voelker.de>
+
+ Fix GPLv3 license headers to use a comma instead of semicolon
+ See: https://www.gnu.org/licenses/gpl-3.0.html#howto
+
+ Update license headers automatically using the following script:
+
+ $ git grep -l 'Foundation; either version 3' \
+ | xargs sed -i '/Foundation; either version 3/ s/n; e/n, e/'
+
+ * config.guess: Adjust via the above command.
+ (timestamp): Update.
+ * config.sub: Likewise.
+ * doc/config.guess.1: Regenerate.
+ * doc/config.sub.1: Likewise.
+
+ 2022-01-01 Dmitry V. Levin <ldv@altlinux.org>
+
+ Update copyright years
+ * config.guess: Update copyright years.
+ * config.sub: Likewise.
+
+ 2021-12-25 Dmitry V. Levin <ldv@altlinux.org>
+
+ config.sub: alias armh to armv7l
+ ALT uses armh as an alias for armv7l-alt-linux-gnueabihf since 2012.
+
+ * config.sub (armh-unknown|armh-alt): Set cpu, vendor, and basic_os.
+ (timestamp): Update.
+
+ 2021-12-24 Dmitry V. Levin <ldv@altlinux.org>
+
+ config.sub: alias aarch64le to aarch64
+ Apparently, QNX reports aarch64 as aarch64le on little-endian machines.
+
+ * config.sub (aarch64le-*): Set cpu to aarch64.
+ (timestamp): Update.
+
+ 2021-12-13 Dmitry V. Levin <ldv@altlinux.org>
+
+ config.sub: fix typo in timestamp
+ * config.sub: Fix timestamp.
+
+ 2021-11-30 Andreas F. Borchert <github@andreas-borchert.de>
+
+ config.guess: x86_64-pc-solaris2.11 is not properly recognized
+ config.guess guesses Solaris 11 to run on a 32-bit platform
+ despite Solaris 11 no longer supporting any 32-bit platform.
+
+ See the following code at lines 434 to 445:
+
+ | 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 test "$CC_FOR_BUILD" != no_compiler_found; then
+ | if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
+ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+ | grep IS_64BIT_ARCH >/dev/null
+ | then
+ | SUN_ARCH=x86_64
+ | fi
+ | fi
+
+ If "cc" is installed, i.e. the Oracle Studio compiler, this one is
+ chosen for $CC_FOR_BUILD. This compiler, the gcc provided by Oracle
+ and also gcc bootstrapped from sources on that platform with a default
+ configuration will by default generate 32-bit binaries -- even on
+ a 64-bit platform. And __amd64 will not be defined for compilations
+ targeting a 32-bit platform. This is different from the corresponding
+ behaviour on GNU/Linux systems where the local platform is targeted by
+ default.
+
+ Thus, as long as you do not add "-m64" or if you have a custom-built
+ gcc which defaults to 64 bit, you will get 32-bit binaries on Solaris
+ despite living on a 64-bit platform.
+
+ * config.guess (i86pc:SunOS:5.*:* || i86xen:SunOS:5.*:*): Adapt the
+ test by adding the "-m64" flag. This will work properly for Solaris
+ 10 as well (the last Solaris release that supported x86 32-bit
+ platforms).
+
+ 2021-10-27 Jordi Sanfeliu <jordi@fibranet.cat>
+
+ Recognize Fiwix
+ $ make check
+ cd testsuite && bash config-guess.sh && rm uname
+ PASS: config.guess checks (137 tests)
+ cd testsuite && bash config-sub.sh
+ PASS: config.sub checks (882 tests)
+ PASS: config.sub idempotency checks (819 tests)
+ PASS: config.sub canonicalise each config.guess testcase (137 tests)
+
+ * config.guess (i*86:Fiwix:*:*): Recognize.
+ * config.sub (fiwix*): Likewise.
+
+ 2021-10-18 Kinshuk Dua <kinshukdua@gmail.com>
+
+ config.sub: Fix typo in comment
+ Fixes: 5e531d391852a54e7fab2d8ff55625fca514b305
+
+ 2021-08-14 Nick Bowler <nbowler@draconx.ca>
+
+ config.sub: work around command assignment bug in some shells
+ When combining variable assignments with a shell command, some older
+ shells (notably heirloom-sh and presumably also Solaris 10 /bin/sh)
+ have a bug which causes the assignment to alter the current execution
+ environment whenever the command is a shell built-in. For example:
+
+ % dash -c 'x=good; x=bad echo >/dev/null; echo $x'
+ good
+
+ % jsh -c 'x=good; x=bad echo >/dev/null; echo $x'
+ bad
+
+ The config.sub script contains a few commands of the form:
+
+ IFS=- read ...
+
+ which triggers this bug, causing the IFS assignment to persist for the
+ remainder of the script. This can cause misbehaviour in certain cases,
+ for example:
+
+ % jsh config.sub i386-linux-gnu
+ config.sub: test: unknown operator gnu
+
+ % jsh config.sub i386-gnu/linux
+ sed: can't read s|gnu/linux|gnu|: No such file or directory
+ Invalid configuration `i386-gnu/linux': OS `' not recognized
+
+ * config.sub: Save and restore IFS explicitly to avoid shell bugs.
+ * doc/config.sub.1: Regenerate.
+
+ 2021-08-04 Jeremy Soller <jackpot51@gmail.com>
+
+ config.sub: add Linux Relibc Target
+ $ make check
+ cd testsuite && bash config-guess.sh && rm uname
+ PASS: config.guess checks (136 tests)
+ cd testsuite && bash config-sub.sh
+ PASS: config.sub checks (881 tests)
+ PASS: config.sub idempotency checks (818 tests)
+ PASS: config.sub canonicalise each config.guess testcase (136 tests)
+
+ * config.sub (relibc*): Recognize.
+ * doc/config.sub.1: Regenerate.
+ * testsuite/config-sub.data (x86_64-linux-relibc): New test.
+
+ 2021-07-06 Stephanos Ioannidis <root@stephanos.io>
+
+ config.sub: add Zephyr RTOS support
+ This adds the Zephyr RTOS targets in preparation for implementing the
+ Zephyr RTOS-specific toolchain support.
+
+ $ make check
+ cd testsuite && bash config-guess.sh && rm uname
+ PASS: config.guess checks (136 tests)
+ cd testsuite && bash config-sub.sh
+ PASS: config.sub checks (880 tests)
+ PASS: config.sub idempotency checks (817 tests)
+ PASS: config.sub canonicalise each config.guess testcase (136 tests)
+
+ * config.sub (zephyr*): Recognize.
+ * doc/config.sub.1: Regenerate.
+ * testsuite/config-sub.data: Add testcases for *-zephyr.
+
+ 2021-07-03 Ozkan Sezer <sezero@users.sourceforge.net>
+
+ config.sub: disable shellcheck SC2006 / SC2268 warnings
+ This is in line with the recent config.guess change in commit
+ 12fcf67c9108f4c4b581eaa302088782f0ee40ea
+
+ * config.sub (shellcheck disable): Add SC2006,SC2268.
+
+ Suggested-by: Jacob Bachmeyer <jcb@gnu.org>
+
+ 2021-07-03 Ozkan Sezer <sezero@users.sourceforge.net>
+
+ config.sub: normalize the quoting in the `echo FOO | sed ...`
+ Some cases quote the argument to echo and some do not. At runtime
+ it probably does not matter because the substituted values will never
+ contain whitespace, but quoting them all would make shellcheck more
+ useful.
+
+ * config.sub: Consistently quote the argument of echo.
+ * doc/config.sub.1: Regenerate.
+
+ Suggested-by: Jacob Bachmeyer <jcb@gnu.org>
+
+ 2021-07-02 Ozkan Sezer <sezero@users.sourceforge.net>
+
+ config.sub: replace POSIX $( ) with classic ` ` throughout
+ This is in line with the recent config.guess change in commit
+ d70c4fa934de164178054c3a60aaa0024ed07c91.
+
+ The patch was generated using patch-6.gawk script introduced in that
+ commit.
+
+ * config.sub: Revert POSIX command substitutions to classic form.
+
+ 2021-06-04 Vineet Gupta <Vineet.Gupta1@synopsys.com>
+
+ Recognize arc32
+ This is the 32-bit variant of ARCv3 ISA (which is not compatible with the
+ 32-bit ARCv2 ISA)
+
+ | make check
+ | cd testsuite && bash config-guess.sh && rm uname
+ | PASS: config.guess checks (136 tests)
+ | cd testsuite && bash config-sub.sh
+ | PASS: config.sub checks (864 tests)
+ | PASS: config.sub idempotency checks (801 tests)
+ | PASS: config.sub canonicalise each config.guess testcase (136 tests)
+
+ * config.guess (arc32:Linux:*:*): Recognize.
+ * config.sub (arc32): Likewise.
+
+ 2021-05-27 Jacob Bachmeyer <jcb@gnu.org>
+
+ Remove automatic patch generators
+ These tools have served their purposes and need not be kept outside of
+ the repository history any longer. This patch as a diff also collects
+ the contents of the various tools in one convenient place.
+
+ * patch-1.gawk: Remove.
+ * patch-3.gawk: Likewise.
+ * patch-6.gawk: Likewise.
+
+ 2021-05-26 Jacob Bachmeyer <jcb@gnu.org>
+
+ config.guess: manual fixups after previous automatic patch
+ The tool could not handle command substitutions that span lines, but
+ fortunately there were only two such substitutions in the script.
+
+ The test for which universe is active on Pyramid is rewritten into a
+ case block because it was the only use of a command substitution as an
+ argument to the test command, which would require quoting.
+
+ * config.guess: Rewrite "if" for Pyramid systems to "case".
+
+ 2021-05-26 Jacob Bachmeyer <jcb@gnu.org>
+
+ config.guess: replace POSIX $( ) with classic ` ` throughout
+ The previous replacement of backticks with POSIX command substitutions
+ was ill-considered and illogical: this script recognizes many archaic
+ machine types that probably never had POSIX shells, therefore it needs
+ to be able to run successfully under pre-POSIX shells.
+
+ This patch was generated using the included GNU Awk program.
+
+ * config.guess: Revert POSIX command substitutions to classic form.
+ * patch-6.gawk: Store the tool that produced the automated patch.
+
+ 2021-05-26 Jacob Bachmeyer <jcb@gnu.org>
+
+ config.guess: manual fixup after previous automated patches
+ This patch provides the special handling for the GNU system. As these
+ were two small and unique edits, they were not included in the scripts.
+
+ This patch also cleans up other minor issues that must be addressed
+ before reverting to classic command substitutions and updates
+ "shellcheck" directives to account for changes in this script and the
+ change in "shellcheck" towards reporting individual portability issues.
+
+ 2021-05-26 Jacob Bachmeyer <jcb@gnu.org>
+
+ config.guess: automatic fixups after previous automated patch
+ This patch was generated using the following command:
+
+ sed -i config.guess \
+ -e '/="[^"]\+"\(-\|$\)/s/="\([^"([:space:])]\+\)"/=\1/' \
+ -e '/="[^"]\+"[[:alnum:]]/s/="\$\([^([:space:])]\+\)"/=${\1}/' \
+ -e \
+ '/\$(echo[^|]\+|/s/\([^[:space:]]\)[[:space:]]*|[[:space:]]*sed/\1 | sed/g'
+
+ * config.guess: Remove unneeded quotes in other variable assignments,
+ standardize spacing for "echo ... | sed" substitutions.
+
+ 2021-05-26 Jacob Bachmeyer <jcb@gnu.org>
+
+ config.guess: remove unneeded quotes and factor command substitutions
+ This is further cleanup and simplifies some constructs that can confuse
+ Emacs' syntax highlighting while generally reducing required quoting.
+
+ This patch was generated using the included GNU Awk program.
+
+ * config.guess: Remove unneeded variable quotes and factor out command
+ substitutions when setting GUESS.
+ * patch-3.gawk: Store the tool that produced the automated patch.
+
+ 2021-05-25 Jacob Bachmeyer <jcb@gnu.org>
+
+ config.guess: manual fixups after previous automatic patch
+ * config.guess: Adjust a few "leftover" cases that the tool could not
+ easily recognize and fixes comment indentation in a few other special
+ cases.
+
+ 2021-05-25 Jacob Bachmeyer <jcb@gnu.org>
+
+ config.guess: use intermediate variable with uname results
+ This will allow quoting to be significantly simplified in another
+ pass through the file.
+
+ This patch was generated using the included GNU Awk program.
+
+ * config.guess: Use GUESS variable to hold results of uname analysis.
+ * patch-1.gawk: Store the tool that produced the automated patch.
+
+ 2021-05-25 Jacob Bachmeyer <jcb@gnu.org>
+
+ config.guess: introduce intermediate variable with uname results
+ This will allow quoting to be significantly simplified in another
+ pass through the file.
+
+ * config.guess: Introduce GUESS variable to hold results of uname analysis.
+
+ 2021-05-24 Dmitry V. Levin <ldv@altlinux.org>
+
+ config.guess: fix shellcheck warning SC2154
+ While, according to Plan 9 documentation, the environment variable
+ $cputype is set to the name of the kernel's CPU's architecture,
+ shellcheck warns that cputype is referenced but not assigned.
+ Be on the safe side and do not use cputype if it is not defined
+ or empty.
+
+ * config.guess (*:Plan9:*:*): Fix shellcheck warning SC2154.
+
+ 2021-05-24 Dmitry V. Levin <ldv@altlinux.org>
+
+ config.guess: remove redundant quotes in case commands
+ According to the GNU Autoconf Portable Shell Programming manual,
+ the Bourne shell does not systematically split variables and back-quoted
+ expressions, in particular on the right-hand side of assignments and in
+ the argument of 'case'.
+
+ The change is made automatically using the following command:
+ $ sed -E -i 's/(\<case )"(\$[^"]+)"( in\>)/\1\2\3/' config.guess
+
+ * config.guess: Simplify case commands by removing quotes around the
+ argument.
+
+ Suggested-by: Jacob Bachmeyer <jcb@gnu.org>
+
+ 2021-05-24 Dmitry V. Levin <ldv@altlinux.org>
+
+ config.guess: simplify exit status workaround on alphaev67-dec-osf5.1
+ Commit 29865ea8a5622cdd80b7a69a0afa78004b4cd311 introduced an exit trap
+ reset before exiting to avoid a spurious non-zero exit status on
+ alphaev67-dec-osf5.1. Simplify that code a bit by moving the exit trap
+ reset around.
+
+ * config.guess (alpha:OSF1:*:*): Reset exit trap earlier.
+ * doc/config.guess.1: Regenerate.
+
2021-10-29 Eli Zaretskii <eliz@gnu.org>
* gdb/doc/gdb.texinfo (Command Options): (Data): Document
diff --git a/Makefile.def b/Makefile.def
index a504192e6d7..acdcd625ed6 100644
--- a/Makefile.def
+++ b/Makefile.def
@@ -75,6 +75,7 @@ host_modules= { module= libelf; lib_path=.libs; bootstrap=true;
no_install= true; };
host_modules= { module= gold; bootstrap=true; };
host_modules= { module= gprof; };
+host_modules= { module= gprofng; };
host_modules= { module= intl; bootstrap=true; };
host_modules= { module= tcl;
missing=mostlyclean; };
@@ -508,6 +509,16 @@ dependencies = { module=all-gprof; on=all-bfd; };
dependencies = { module=all-gprof; on=all-opcodes; };
dependencies = { module=all-gprof; on=all-intl; };
dependencies = { module=all-gprof; on=all-gas; };
+
+dependencies = { module=configure-gprofng; on=configure-intl; };
+dependencies = { module=all-gprofng; on=all-libiberty; };
+dependencies = { module=all-gprofng; on=all-bfd; };
+dependencies = { module=all-gprofng; on=all-opcodes; };
+dependencies = { module=all-gprofng; on=all-intl; };
+dependencies = { module=all-gprofng; on=all-gas; };
+dependencies = { module=install-gprofng; on=install-opcodes; };
+dependencies = { module=install-gprofng; on=install-bfd; };
+
dependencies = { module=configure-ld; on=configure-intl; };
dependencies = { module=all-ld; on=all-libiberty; };
dependencies = { module=all-ld; on=all-bfd; };
@@ -570,7 +581,7 @@ dependencies = { module=all-sim; on=all-intl; };
dependencies = { module=all-sim; on=all-libiberty; };
dependencies = { module=all-sim; on=all-bfd; };
dependencies = { module=all-sim; on=all-opcodes; };
-dependencies = { module=all-sim; on=all-readline; };
+dependencies = { module=configure-sim; on=all-readline; };
// Other host modules.
dependencies = { module=all-fastjar; on=all-zlib; };
diff --git a/Makefile.in b/Makefile.in
index 2b77a470694..cb39e4790d6 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -218,6 +218,7 @@ HOST_EXPORTS = \
OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
OTOOL="$(OTOOL)"; export OTOOL; \
+ PKG_CONFIG_PATH="$(PKG_CONFIG_PATH)"; export PKG_CONFIG_PATH; \
READELF="$(READELF)"; export READELF; \
AR_FOR_TARGET="$(AR_FOR_TARGET)"; export AR_FOR_TARGET; \
AS_FOR_TARGET="$(AS_FOR_TARGET)"; export AS_FOR_TARGET; \
@@ -444,6 +445,8 @@ LIBCXXFLAGS = $(CXXFLAGS) -fno-implicit-templates
GOCFLAGS = $(CFLAGS)
GDCFLAGS = $(CFLAGS)
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+
# Pass additional PGO and LTO compiler options to the PGO build.
BUILD_CFLAGS = $(PGO_BUILD_CFLAGS) $(PGO_BUILD_LTO_CFLAGS)
override CFLAGS += $(BUILD_CFLAGS)
@@ -1073,6 +1076,7 @@ configure-host: \
maybe-configure-libelf \
maybe-configure-gold \
maybe-configure-gprof \
+ maybe-configure-gprofng \
maybe-configure-intl \
maybe-configure-tcl \
maybe-configure-itcl \
@@ -1228,6 +1232,7 @@ all-host: maybe-all-libelf
all-host: maybe-all-gold
@endif gold-no-bootstrap
all-host: maybe-all-gprof
+all-host: maybe-all-gprofng
@if intl-no-bootstrap
all-host: maybe-all-intl
@endif intl-no-bootstrap
@@ -1357,6 +1362,7 @@ info-host: maybe-info-isl
info-host: maybe-info-libelf
info-host: maybe-info-gold
info-host: maybe-info-gprof
+info-host: maybe-info-gprofng
info-host: maybe-info-intl
info-host: maybe-info-tcl
info-host: maybe-info-itcl
@@ -1447,6 +1453,7 @@ dvi-host: maybe-dvi-isl
dvi-host: maybe-dvi-libelf
dvi-host: maybe-dvi-gold
dvi-host: maybe-dvi-gprof
+dvi-host: maybe-dvi-gprofng
dvi-host: maybe-dvi-intl
dvi-host: maybe-dvi-tcl
dvi-host: maybe-dvi-itcl
@@ -1537,6 +1544,7 @@ pdf-host: maybe-pdf-isl
pdf-host: maybe-pdf-libelf
pdf-host: maybe-pdf-gold
pdf-host: maybe-pdf-gprof
+pdf-host: maybe-pdf-gprofng
pdf-host: maybe-pdf-intl
pdf-host: maybe-pdf-tcl
pdf-host: maybe-pdf-itcl
@@ -1627,6 +1635,7 @@ html-host: maybe-html-isl
html-host: maybe-html-libelf
html-host: maybe-html-gold
html-host: maybe-html-gprof
+html-host: maybe-html-gprofng
html-host: maybe-html-intl
html-host: maybe-html-tcl
html-host: maybe-html-itcl
@@ -1717,6 +1726,7 @@ TAGS-host: maybe-TAGS-isl
TAGS-host: maybe-TAGS-libelf
TAGS-host: maybe-TAGS-gold
TAGS-host: maybe-TAGS-gprof
+TAGS-host: maybe-TAGS-gprofng
TAGS-host: maybe-TAGS-intl
TAGS-host: maybe-TAGS-tcl
TAGS-host: maybe-TAGS-itcl
@@ -1807,6 +1817,7 @@ install-info-host: maybe-install-info-isl
install-info-host: maybe-install-info-libelf
install-info-host: maybe-install-info-gold
install-info-host: maybe-install-info-gprof
+install-info-host: maybe-install-info-gprofng
install-info-host: maybe-install-info-intl
install-info-host: maybe-install-info-tcl
install-info-host: maybe-install-info-itcl
@@ -1897,6 +1908,7 @@ install-dvi-host: maybe-install-dvi-isl
install-dvi-host: maybe-install-dvi-libelf
install-dvi-host: maybe-install-dvi-gold
install-dvi-host: maybe-install-dvi-gprof
+install-dvi-host: maybe-install-dvi-gprofng
install-dvi-host: maybe-install-dvi-intl
install-dvi-host: maybe-install-dvi-tcl
install-dvi-host: maybe-install-dvi-itcl
@@ -1987,6 +1999,7 @@ install-pdf-host: maybe-install-pdf-isl
install-pdf-host: maybe-install-pdf-libelf
install-pdf-host: maybe-install-pdf-gold
install-pdf-host: maybe-install-pdf-gprof
+install-pdf-host: maybe-install-pdf-gprofng
install-pdf-host: maybe-install-pdf-intl
install-pdf-host: maybe-install-pdf-tcl
install-pdf-host: maybe-install-pdf-itcl
@@ -2077,6 +2090,7 @@ install-html-host: maybe-install-html-isl
install-html-host: maybe-install-html-libelf
install-html-host: maybe-install-html-gold
install-html-host: maybe-install-html-gprof
+install-html-host: maybe-install-html-gprofng
install-html-host: maybe-install-html-intl
install-html-host: maybe-install-html-tcl
install-html-host: maybe-install-html-itcl
@@ -2167,6 +2181,7 @@ installcheck-host: maybe-installcheck-isl
installcheck-host: maybe-installcheck-libelf
installcheck-host: maybe-installcheck-gold
installcheck-host: maybe-installcheck-gprof
+installcheck-host: maybe-installcheck-gprofng
installcheck-host: maybe-installcheck-intl
installcheck-host: maybe-installcheck-tcl
installcheck-host: maybe-installcheck-itcl
@@ -2257,6 +2272,7 @@ mostlyclean-host: maybe-mostlyclean-isl
mostlyclean-host: maybe-mostlyclean-libelf
mostlyclean-host: maybe-mostlyclean-gold
mostlyclean-host: maybe-mostlyclean-gprof
+mostlyclean-host: maybe-mostlyclean-gprofng
mostlyclean-host: maybe-mostlyclean-intl
mostlyclean-host: maybe-mostlyclean-tcl
mostlyclean-host: maybe-mostlyclean-itcl
@@ -2347,6 +2363,7 @@ clean-host: maybe-clean-isl
clean-host: maybe-clean-libelf
clean-host: maybe-clean-gold
clean-host: maybe-clean-gprof
+clean-host: maybe-clean-gprofng
clean-host: maybe-clean-intl
clean-host: maybe-clean-tcl
clean-host: maybe-clean-itcl
@@ -2437,6 +2454,7 @@ distclean-host: maybe-distclean-isl
distclean-host: maybe-distclean-libelf
distclean-host: maybe-distclean-gold
distclean-host: maybe-distclean-gprof
+distclean-host: maybe-distclean-gprofng
distclean-host: maybe-distclean-intl
distclean-host: maybe-distclean-tcl
distclean-host: maybe-distclean-itcl
@@ -2527,6 +2545,7 @@ maintainer-clean-host: maybe-maintainer-clean-isl
maintainer-clean-host: maybe-maintainer-clean-libelf
maintainer-clean-host: maybe-maintainer-clean-gold
maintainer-clean-host: maybe-maintainer-clean-gprof
+maintainer-clean-host: maybe-maintainer-clean-gprofng
maintainer-clean-host: maybe-maintainer-clean-intl
maintainer-clean-host: maybe-maintainer-clean-tcl
maintainer-clean-host: maybe-maintainer-clean-itcl
@@ -2675,6 +2694,7 @@ check-host: \
maybe-check-libelf \
maybe-check-gold \
maybe-check-gprof \
+ maybe-check-gprofng \
maybe-check-intl \
maybe-check-tcl \
maybe-check-itcl \
@@ -2812,6 +2832,7 @@ install-host-nogcc: \
maybe-install-libelf \
maybe-install-gold \
maybe-install-gprof \
+ maybe-install-gprofng \
maybe-install-intl \
maybe-install-tcl \
maybe-install-itcl \
@@ -2867,6 +2888,7 @@ install-host: \
maybe-install-libelf \
maybe-install-gold \
maybe-install-gprof \
+ maybe-install-gprofng \
maybe-install-intl \
maybe-install-tcl \
maybe-install-itcl \
@@ -2977,6 +2999,7 @@ install-strip-host: \
maybe-install-strip-libelf \
maybe-install-strip-gold \
maybe-install-strip-gprof \
+ maybe-install-strip-gprofng \
maybe-install-strip-intl \
maybe-install-strip-tcl \
maybe-install-strip-itcl \
@@ -20404,6 +20427,474 @@ maintainer-clean-gprof:
+.PHONY: configure-gprofng maybe-configure-gprofng
+maybe-configure-gprofng:
+@if gcc-bootstrap
+configure-gprofng: stage_current
+@endif gcc-bootstrap
+@if gprofng
+maybe-configure-gprofng: configure-gprofng
+configure-gprofng:
+ @: $(MAKE); $(unstage)
+ @r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ test ! -f $(HOST_SUBDIR)/gprofng/Makefile || exit 0; \
+ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gprofng; \
+ $(HOST_EXPORTS) \
+ echo Configuring in $(HOST_SUBDIR)/gprofng; \
+ cd "$(HOST_SUBDIR)/gprofng" || exit 1; \
+ case $(srcdir) in \
+ /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
+ *) topdir=`echo $(HOST_SUBDIR)/gprofng/ | \
+ sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
+ esac; \
+ module_srcdir=gprofng; \
+ $(SHELL) \
+ $$s/$$module_srcdir/configure \
+ --srcdir=$${topdir}/$$module_srcdir \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} \
+ || exit 1
+@endif gprofng
+
+
+
+
+
+.PHONY: all-gprofng maybe-all-gprofng
+maybe-all-gprofng:
+@if gcc-bootstrap
+all-gprofng: stage_current
+@endif gcc-bootstrap
+@if gprofng
+TARGET-gprofng=all
+maybe-all-gprofng: all-gprofng
+all-gprofng: configure-gprofng
+ @: $(MAKE); $(unstage)
+ @r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ (cd $(HOST_SUBDIR)/gprofng && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) $(STAGE1_FLAGS_TO_PASS) \
+ $(TARGET-gprofng))
+@endif gprofng
+
+
+
+
+.PHONY: check-gprofng maybe-check-gprofng
+maybe-check-gprofng:
+@if gprofng
+maybe-check-gprofng: check-gprofng
+
+check-gprofng:
+ @: $(MAKE); $(unstage)
+ @r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ (cd $(HOST_SUBDIR)/gprofng && \
+ $(MAKE) $(FLAGS_TO_PASS) check)
+
+@endif gprofng
+
+.PHONY: install-gprofng maybe-install-gprofng
+maybe-install-gprofng:
+@if gprofng
+maybe-install-gprofng: install-gprofng
+
+install-gprofng: installdirs
+ @: $(MAKE); $(unstage)
+ @r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ (cd $(HOST_SUBDIR)/gprofng && \
+ $(MAKE) $(FLAGS_TO_PASS) install)
+
+@endif gprofng
+
+.PHONY: install-strip-gprofng maybe-install-strip-gprofng
+maybe-install-strip-gprofng:
+@if gprofng
+maybe-install-strip-gprofng: install-strip-gprofng
+
+install-strip-gprofng: installdirs
+ @: $(MAKE); $(unstage)
+ @r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ (cd $(HOST_SUBDIR)/gprofng && \
+ $(MAKE) $(FLAGS_TO_PASS) install-strip)
+
+@endif gprofng
+
+# Other targets (info, dvi, pdf, etc.)
+
+.PHONY: maybe-info-gprofng info-gprofng
+maybe-info-gprofng:
+@if gprofng
+maybe-info-gprofng: info-gprofng
+
+info-gprofng: \
+ configure-gprofng
+ @: $(MAKE); $(unstage)
+ @[ -f ./gprofng/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing info in gprofng"; \
+ (cd $(HOST_SUBDIR)/gprofng && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ info) \
+ || exit 1
+
+@endif gprofng
+
+.PHONY: maybe-dvi-gprofng dvi-gprofng
+maybe-dvi-gprofng:
+@if gprofng
+maybe-dvi-gprofng: dvi-gprofng
+
+dvi-gprofng: \
+ configure-gprofng
+ @: $(MAKE); $(unstage)
+ @[ -f ./gprofng/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing dvi in gprofng"; \
+ (cd $(HOST_SUBDIR)/gprofng && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ dvi) \
+ || exit 1
+
+@endif gprofng
+
+.PHONY: maybe-pdf-gprofng pdf-gprofng
+maybe-pdf-gprofng:
+@if gprofng
+maybe-pdf-gprofng: pdf-gprofng
+
+pdf-gprofng: \
+ configure-gprofng
+ @: $(MAKE); $(unstage)
+ @[ -f ./gprofng/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in gprofng"; \
+ (cd $(HOST_SUBDIR)/gprofng && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ pdf) \
+ || exit 1
+
+@endif gprofng
+
+.PHONY: maybe-html-gprofng html-gprofng
+maybe-html-gprofng:
+@if gprofng
+maybe-html-gprofng: html-gprofng
+
+html-gprofng: \
+ configure-gprofng
+ @: $(MAKE); $(unstage)
+ @[ -f ./gprofng/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing html in gprofng"; \
+ (cd $(HOST_SUBDIR)/gprofng && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ html) \
+ || exit 1
+
+@endif gprofng
+
+.PHONY: maybe-TAGS-gprofng TAGS-gprofng
+maybe-TAGS-gprofng:
+@if gprofng
+maybe-TAGS-gprofng: TAGS-gprofng
+
+TAGS-gprofng: \
+ configure-gprofng
+ @: $(MAKE); $(unstage)
+ @[ -f ./gprofng/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing TAGS in gprofng"; \
+ (cd $(HOST_SUBDIR)/gprofng && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ TAGS) \
+ || exit 1
+
+@endif gprofng
+
+.PHONY: maybe-install-info-gprofng install-info-gprofng
+maybe-install-info-gprofng:
+@if gprofng
+maybe-install-info-gprofng: install-info-gprofng
+
+install-info-gprofng: \
+ configure-gprofng \
+ info-gprofng
+ @: $(MAKE); $(unstage)
+ @[ -f ./gprofng/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-info in gprofng"; \
+ (cd $(HOST_SUBDIR)/gprofng && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ install-info) \
+ || exit 1
+
+@endif gprofng
+
+.PHONY: maybe-install-dvi-gprofng install-dvi-gprofng
+maybe-install-dvi-gprofng:
+@if gprofng
+maybe-install-dvi-gprofng: install-dvi-gprofng
+
+install-dvi-gprofng: \
+ configure-gprofng \
+ dvi-gprofng
+ @: $(MAKE); $(unstage)
+ @[ -f ./gprofng/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-dvi in gprofng"; \
+ (cd $(HOST_SUBDIR)/gprofng && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ install-dvi) \
+ || exit 1
+
+@endif gprofng
+
+.PHONY: maybe-install-pdf-gprofng install-pdf-gprofng
+maybe-install-pdf-gprofng:
+@if gprofng
+maybe-install-pdf-gprofng: install-pdf-gprofng
+
+install-pdf-gprofng: \
+ configure-gprofng \
+ pdf-gprofng
+ @: $(MAKE); $(unstage)
+ @[ -f ./gprofng/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in gprofng"; \
+ (cd $(HOST_SUBDIR)/gprofng && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ install-pdf) \
+ || exit 1
+
+@endif gprofng
+
+.PHONY: maybe-install-html-gprofng install-html-gprofng
+maybe-install-html-gprofng:
+@if gprofng
+maybe-install-html-gprofng: install-html-gprofng
+
+install-html-gprofng: \
+ configure-gprofng \
+ html-gprofng
+ @: $(MAKE); $(unstage)
+ @[ -f ./gprofng/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-html in gprofng"; \
+ (cd $(HOST_SUBDIR)/gprofng && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ install-html) \
+ || exit 1
+
+@endif gprofng
+
+.PHONY: maybe-installcheck-gprofng installcheck-gprofng
+maybe-installcheck-gprofng:
+@if gprofng
+maybe-installcheck-gprofng: installcheck-gprofng
+
+installcheck-gprofng: \
+ configure-gprofng
+ @: $(MAKE); $(unstage)
+ @[ -f ./gprofng/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing installcheck in gprofng"; \
+ (cd $(HOST_SUBDIR)/gprofng && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ installcheck) \
+ || exit 1
+
+@endif gprofng
+
+.PHONY: maybe-mostlyclean-gprofng mostlyclean-gprofng
+maybe-mostlyclean-gprofng:
+@if gprofng
+maybe-mostlyclean-gprofng: mostlyclean-gprofng
+
+mostlyclean-gprofng:
+ @: $(MAKE); $(unstage)
+ @[ -f ./gprofng/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing mostlyclean in gprofng"; \
+ (cd $(HOST_SUBDIR)/gprofng && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ mostlyclean) \
+ || exit 1
+
+@endif gprofng
+
+.PHONY: maybe-clean-gprofng clean-gprofng
+maybe-clean-gprofng:
+@if gprofng
+maybe-clean-gprofng: clean-gprofng
+
+clean-gprofng:
+ @: $(MAKE); $(unstage)
+ @[ -f ./gprofng/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing clean in gprofng"; \
+ (cd $(HOST_SUBDIR)/gprofng && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ clean) \
+ || exit 1
+
+@endif gprofng
+
+.PHONY: maybe-distclean-gprofng distclean-gprofng
+maybe-distclean-gprofng:
+@if gprofng
+maybe-distclean-gprofng: distclean-gprofng
+
+distclean-gprofng:
+ @: $(MAKE); $(unstage)
+ @[ -f ./gprofng/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing distclean in gprofng"; \
+ (cd $(HOST_SUBDIR)/gprofng && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ distclean) \
+ || exit 1
+
+@endif gprofng
+
+.PHONY: maybe-maintainer-clean-gprofng maintainer-clean-gprofng
+maybe-maintainer-clean-gprofng:
+@if gprofng
+maybe-maintainer-clean-gprofng: maintainer-clean-gprofng
+
+maintainer-clean-gprofng:
+ @: $(MAKE); $(unstage)
+ @[ -f ./gprofng/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing maintainer-clean in gprofng"; \
+ (cd $(HOST_SUBDIR)/gprofng && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ maintainer-clean) \
+ || exit 1
+
+@endif gprofng
+
+
+
.PHONY: configure-intl maybe-configure-intl
maybe-configure-intl:
@if gcc-bootstrap
@@ -62838,6 +63329,8 @@ all-stagetrain-gas: maybe-all-stagetrain-intl
all-stagefeedback-gas: maybe-all-stagefeedback-intl
all-stageautoprofile-gas: maybe-all-stageautoprofile-intl
all-stageautofeedback-gas: maybe-all-stageautofeedback-intl
+install-gprofng: maybe-install-opcodes
+install-gprofng: maybe-install-bfd
configure-ld: maybe-configure-intl
configure-stage1-ld: maybe-configure-stage1-intl
configure-stage2-ld: maybe-configure-stage2-intl
@@ -63072,7 +63565,7 @@ install-strip-sid: maybe-install-strip-tcl
install-sid: maybe-install-tk
install-strip-sid: maybe-install-strip-tk
configure-sim: maybe-all-gnulib
-all-sim: maybe-all-readline
+configure-sim: maybe-all-readline
all-fastjar: maybe-all-build-texinfo
all-libctf: all-libiberty
all-stage1-libctf: all-stage1-libiberty
@@ -63240,6 +63733,7 @@ configure-gdb: stage_last
configure-gdbserver: stage_last
configure-gdbsupport: stage_last
configure-gprof: stage_last
+configure-gprofng: stage_last
configure-sid: stage_last
configure-sim: stage_last
configure-fastjar: stage_last
@@ -63272,6 +63766,12 @@ all-gprof: maybe-all-bfd
all-gprof: maybe-all-opcodes
all-gprof: maybe-all-intl
all-gprof: maybe-all-gas
+configure-gprofng: maybe-configure-intl
+all-gprofng: maybe-all-libiberty
+all-gprofng: maybe-all-bfd
+all-gprofng: maybe-all-opcodes
+all-gprofng: maybe-all-intl
+all-gprofng: maybe-all-gas
all-sid: maybe-all-libiberty
all-sid: maybe-all-bfd
all-sid: maybe-all-opcodes
diff --git a/Makefile.tpl b/Makefile.tpl
index 9df77788345..88db8f44d53 100644
--- a/Makefile.tpl
+++ b/Makefile.tpl
@@ -221,6 +221,7 @@ HOST_EXPORTS = \
OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
OTOOL="$(OTOOL)"; export OTOOL; \
+ PKG_CONFIG_PATH="$(PKG_CONFIG_PATH)"; export PKG_CONFIG_PATH; \
READELF="$(READELF)"; export READELF; \
AR_FOR_TARGET="$(AR_FOR_TARGET)"; export AR_FOR_TARGET; \
AS_FOR_TARGET="$(AS_FOR_TARGET)"; export AS_FOR_TARGET; \
@@ -447,6 +448,8 @@ LIBCXXFLAGS = $(CXXFLAGS) -fno-implicit-templates
GOCFLAGS = $(CFLAGS)
GDCFLAGS = $(CFLAGS)
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+
# Pass additional PGO and LTO compiler options to the PGO build.
BUILD_CFLAGS = $(PGO_BUILD_CFLAGS) $(PGO_BUILD_LTO_CFLAGS)
override CFLAGS += $(BUILD_CFLAGS)
diff --git a/bfd/.gitignore b/bfd/.gitignore
index d4f7423111e..065ed99f3a8 100644
--- a/bfd/.gitignore
+++ b/bfd/.gitignore
@@ -24,7 +24,7 @@
/doc/cache.texi
/doc/chew
/doc/coffcode.texi
-/doc/core.texi
+/doc/corefile.texi
/doc/elf.texi
/doc/elfcode.texi
/doc/format.texi
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 55630dda7cf..0dc8f011d25 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,261 @@
+2022-04-27 John Baldwin <jhb@FreeBSD.org>
+
+ * elf.c (elfcore_grok_freebsd_note): Handle NT_ARM_TLS notes.
+
+2022-04-25 Nick Clifton <nickc@redhat.com>
+
+ PR 29072
+ * elflink.c (bfd_elf_size_dynamic_sections): Display a note to the
+ user that the current ehaviour of creating an executable stack
+ because of a missing .note.GNU-stack section is deprecated and
+ will be changed in a future release.
+
+2022-04-20 Clément Chigot <clement.chigot@atos.net>
+
+ * coff-rs6000.c (xcoff_reloc_type_noop): Add info argument.
+ (xcoff_reloc_type_fail): Likewise.
+ (xcoff_reloc_type_pos): Likewise.
+ (xcoff_reloc_type_neg): Likewise.
+ (xcoff_reloc_type_rel): Likewise.
+ (xcoff_reloc_type_toc): Likewise.
+ (xcoff_reloc_type_ba): Likewise.
+ (xcoff_reloc_type_crel): Likewise.
+ (xcoff_reloc_type_tls): Likewise.
+ (xcoff_reloc_type_br): Add stub handler.
+ (xcoff_ppc_relocate_section): Add info to
+ xcoff_calculate_relocation.
+ (xcoff_stub_indirect_call_code): New constant.
+ (xcoff_stub_shared_call_code): Likewise.
+ (bfd_xcoff_backend_data): Add stub code fields.
+ (bfd_pmac_xcoff_backend_data): Likewise.
+ * coff64-rs6000.c (xcoff64_reloc_type_br): Add stub handler.
+ (xcoff64_ppc_relocate_section): Add info to
+ xcoff64_calculate_relocation.
+ (xcoff64_stub_indirect_call_code): New constant.
+ (xcoff64_stub_shared_call_code): Likewise.
+ (bfd_xcoff_backend_data): Add stub code fields.
+ (bfd_xcoff_aix5_backend_data): Likewise.
+ * libxcoff.h (struct xcoff_backend_data_rec): Add stub fields.
+ (bfd_xcoff_stub_indirect_call_code): New define.
+ (bfd_xcoff_stub_indirect_call_size): New define.
+ (bfd_xcoff_stub_shared_call_code): New define.
+ (bfd_xcoff_stub_shared_call_size): New define.
+ (xcoff_reloc_function): Add info argument.
+ (enum xcoff_stub_type): New enum.
+ (struct xcoff_stub_hash_entry): New structure.
+ * xcofflink.c (struct xcoff_link_hash_table): Add stub hash
+ table and params fields.
+ (xcoff_stub_hash_entry): New define.
+ (xcoff_stub_hash_lookup): New define.
+ (stub_hash_newfunc): New function.
+ (_bfd_xcoff_bfd_link_hash_table_free): Free the new stub hash
+ table.
+ (_bfd_xcoff_bfd_link_hash_table_create): Create the new stub
+ hash table.
+ (xcoff_link_add_symbols): Save rawsize for XTY_SD.
+ (bfd_xcoff_link_init): New function.
+ (xcoff_stub_csect_name): New function.
+ (xcoff_stub_get_csect_in_range): New function.
+ (xcoff_stub_name): New function.
+ (bfd_xcoff_get_stub_entry): New function.
+ (bfd_xcoff_type_of_stub): New function.
+ (xcoff_add_stub): New function.
+ (xcoff_build_one_stub): New function.
+ (bfd_xcoff_size_stubs): New function.
+ (bfd_xcoff_build_stubs): New function.
+ (xcoff_stub_create_relocations): New function.
+ (xcoff_link_input_bfd): Adapt relocations to stub.
+ (xcoff_write_global_symbol): Adapt to new TOC entries generated
+ for stubs.
+ (_bfd_xcoff_bfd_final_link): Handle stub file.
+ * xcofflink.h (struct bfd_xcoff_link_params): New structure.
+
+2022-04-20 Clément Chigot <clement.chigot@atos.net>
+
+ * coff-rs6000.c (_bfd_xcoff_put_ldsymbol_name): Write len in
+ ldinfo->strings instead of directly in the output_bfd.
+ * coff64-rs6000.c (_bfd_xcoff64_put_ldsymbol_name): Likewise.
+ * xcofflink.c (struct xcoff_link_hash_table): Remove ldrel_count
+ field. Add ldinfo field.
+ (xcoff_mark_symbol): Adjust to new ldinfo field.
+ (xcoff_mark): Likewise.
+ (bfd_xcoff_link_count_reloc): Likewise.
+ (xcoff_build_loader_section): Split into two functions: one that
+ build the loader section (this function) and one that only size
+ it...
+ (xcoff_size_loader_section): ... (this function).
+ (bfd_xcoff_size_dynamic_sections): Adapt to new ldinfo field.
+ Move the part where the dynamic sections are build to ...
+ (bfd_xcoff_build_dynamic_sections): ... this function.
+ * xcofflink.h: Add bfd_xcoff_build_dynamic_sections prototype.
+
+2022-04-13 Alexander von Gluck IV <kallisti5@unixzen.com>
+
+ * config.bfd (x86-haiku): Add i386_pei_vec as a selectable format.
+
+2022-04-08 Nick Clifton <nickc@redhat.com>
+
+ PR 29038
+ * coffgen.c (coff_find_nearest_line_with_names): Fix typo
+ retrieving saved bias.
+
+2022-04-07 Mark Harmstone <mark@harmstone.com>
+
+ * coff-i386.c (in_reloc_p): Add R_SECTION.
+ (howto_table): Add R_SECTION.
+ (coff_pe_i386_relocation_section): Add support for R_SECTION.
+ (coff_i386_reloc_type_lookup): Add support for
+ BFD_RELOC_16_SECCIDX.
+ * coff-x86_64.c (in_reloc_p): Add R_SECTION.
+ (howto_table): Add R_SECTION.
+ (coff_pe_amd64_relocation_section): Add support for R_SECTION.
+ (coff_amd64_reloc_type_lookup): Add support for
+ BFD_RELOC_16_SECCIDX.
+ * reloc.c: Add BFD_RELOC_16_SECIDX.
+ * bfd-in2.h: Regenerate.
+ * libbfd.h: Regenerate.
+
+2022-04-01 John Baldwin <jhb@FreeBSD.org>
+
+ * elf-bfd.h (elfcore_write_x86_segbases): New.
+ * elf.c (elfcore_grok_freebsd_note): Add pseudosections for
+ NT_FREEBSD_X86_SEGBASES register notes.
+ (elfcore_write_x86_segbases): New.
+ (elfcore_write_register_note): Write NT_FREEBSD_X86_SEGBASES
+ register notes.
+
+2022-04-01 John Baldwin <jhb@FreeBSD.org>
+
+ * elf.c (elfcore_grok_freebsd_note): Remove checks for namesz.
+
+2022-03-22 Steiner H Gunderson <steinar+sourceware@gunderson.no>
+
+ * dwarf2.c (_bfd_dwarf2_find_nearest_line): if a function name is
+ found, but no line number info, then return a result of 2.
+
+2022-03-21 Steiner H Gunderson <steinar+sourceware@gunderson.no>
+
+ PR 28978
+ * dwarf2.c (scan_unit_for_symbols): When performing second pass,
+ check to see if the function or variable being processed is the
+ same as the previous one.
+
+2022-03-18 Viorel Preoteasa <viorel.preoteasa@gmail.com>
+
+ PR 28924
+ * elf32-arm.c (THM_MAX_FWD_BRANCH_OFFSET): Fix definition.
+ (THM2_MAX_FWD_BRANCH_OFFSET): Likewise.
+
+2022-03-16 Simon Marchi <simon.marchi@efficios.com>
+
+ * Makefile.am (ALL_MACHINES, ALL_MACHINES_CFILES):
+ Add cpu-amdgcn.c.
+ (BFD64_BACKENDS): Add elf64-amdgcn.lo.
+ (BFD64_BACKENDS_CFILES): Add elf64-amdgcn.c.
+ * Makefile.in: Re-generate.
+ * cpu-amdgcn.c: New.
+ * elf64-amdgcn.c: New.
+ * archures.c (bfd_architecture): Add bfd_arch_amdgcn and related
+ mach defines.
+ (bfd_amdgcn_arch): New.
+ (bfd_archures_list): Add bfd_amdgcn_arch.
+ * bfd-in2.h: Re-generate.
+ * config.bfd: Handle amdgcn* target.
+ * configure.ac: Handle amdgcn_elf64_le_vec.
+ * configure: Re-generate.
+ * elf-bfd.h (elf_target_id): Add AMDGCN_ELF_DATA.
+ * targets.c (amdgcn_elf64_le_vec): New.
+ (_bfd_target_vector): Add amdgcn_elf64_le_vec.
+
+2022-03-01 Torbjörn Svensson <torbjorn.svensson@st.com>
+ Fred Eisele <fredrick.eisele@gmail.com>
+
+ PR 25713
+ * bfdio.c (_bfd_real_fopen): Fix typo.
+
+2022-03-01 Nick Clifton <nickc@redhat.com>
+
+ PR 28848
+ * elf32-arm.c (elf32_arm_merge_eabi_attributes): If the first
+ input bfd has a Tag_ABI_HardFP_use set to 3 but does not also have
+ TAG_FP_arch set then reset the TAG_ABI_HardFP_use.
+
+2022-02-28 Torbjörn Svensson <torbjorn.svensson@st.com>
+ Fred Eisele <fredrick.eisele@gmail.com>
+
+ PR 25713
+ * bfdio.c (_bfd_real_fopen): Fix handling of paths longer than 260
+ characters on Windows hosts.
+
+2022-02-28 Nick Clifton <nickc@redhat.com>
+
+ PR 28886
+ * config.bfd: Update error message for obsolete configurations.
+
+2022-02-17 Nick Clifton <nickc@redhat.com>
+
+ * po/sr.po: Updated Serbian translation.
+
+2022-02-16 Fangrui Song <maskray@google.com>
+ Nick Clifton <nickc@redhat.com>
+
+ PR ld/28841
+ * bfd-in2.h (struct bfd_section): Add type.
+ (discarded_section): Add field.
+ * elf.c (elf_fake_sections): Handle bfd_section::type.
+ * section.c (BFD_FAKE_SECTION): Add field.
+ * mri.c (mri_draw_tree): Update function call.
+
+2022-02-11 Michael Forney <mforney@mforney.org>
+
+ * bfd.c (bfd_set_gp_value): Remove return with expression
+ in void function.
+
+2022-02-09 Nick Clifton <nickc@redhat.com>
+
+ * config.bfd: Move pending obsolesence targets into the definitely
+ obsolete list.
+
+2022-02-02 Nick Clifton <nickc@redhat.com>
+
+ PR 28834
+ * dwarf2.c (read_section): Change the heuristic that checks for
+ overlarge dwarf debug info sections.
+
+2022-02-02 Stafford Horne <shorne@gmail.com>
+
+ PR 28735
+ * elf32-or1k.c (or1k_elf_got16_no_overflow_howto): Define.
+ (or1k_elf_relocate_section): Use new howto instead of trying to
+ mask out relocation bits.
+
+2022-01-24 Roland McGrath <mcgrathr@google.com>
+
+ * doc/local.mk (%D%/bfdver.texi): Add mkdir command.
+
+2022-01-24 Nick Clifton <nickc@redhat.com>
+
+ * po/fr.po: Updated French translation.
+ * po/ro.po: Updated Romanian translation.
+ * po/uk.po: Updated Ukranian translation.
+
+2022-01-22 Nick Clifton <nickc@redhat.com>
+
+ * version.m4: Change to 2.38.50.
+ * configure: Regenerate.
+ * po/bfd.pot: Regenerate.
+
+2022-01-22 Nick Clifton <nickc@redhat.com>
+
+ * 2.38 release branch created.
+
+2022-01-17 Nick Clifton <nickc@redhat.com>
+
+ * Makefile.in: Regenerate.
+ * configure: Regenerate.
+ * doc/Makefile.in: Regenerate.
+ * po/bfd.pot: Regenerate.
+
2021-12-15 Nikita Popov <npv1310@gmail.com>
PR 28687
diff --git a/bfd/Makefile.am b/bfd/Makefile.am
index 10dd765bec8..f2f70590e88 100644
--- a/bfd/Makefile.am
+++ b/bfd/Makefile.am
@@ -17,13 +17,18 @@
# <http://www.gnu.org/licenses/>.
#
-AUTOMAKE_OPTIONS = no-dist foreign
+AUTOMAKE_OPTIONS = no-dist foreign info-in-builddir no-texinfo.tex
ACLOCAL_AMFLAGS = -I . -I .. -I ../config
+MOSTLYCLEANFILES =
+CLEANFILES =
+DISTCLEANFILES =
+MAINTAINERCLEANFILES =
+
INCDIR = $(srcdir)/../include
CSEARCH = -I. -I$(srcdir) -I$(INCDIR)
-SUBDIRS = doc po
+SUBDIRS = po
bfddocdir = doc
@@ -92,6 +97,7 @@ BFD64_LIBS_CFILES = archive64.c
ALL_MACHINES = \
cpu-aarch64.lo \
cpu-alpha.lo \
+ cpu-amdgcn.lo \
cpu-arc.lo \
cpu-arm.lo \
cpu-avr.lo \
@@ -112,8 +118,6 @@ ALL_MACHINES = \
cpu-hppa.lo \
cpu-i386.lo \
cpu-iamcu.lo \
- cpu-l1om.lo \
- cpu-k1om.lo \
cpu-ia64.lo \
cpu-ip2k.lo \
cpu-iq2000.lo \
@@ -177,6 +181,7 @@ ALL_MACHINES = \
ALL_MACHINES_CFILES = \
cpu-aarch64.c \
cpu-alpha.c \
+ cpu-amdgcn.c \
cpu-arc.c \
cpu-arm.c \
cpu-avr.c \
@@ -197,8 +202,6 @@ ALL_MACHINES_CFILES = \
cpu-hppa.c \
cpu-i386.c \
cpu-iamcu.c \
- cpu-l1om.c \
- cpu-k1om.c \
cpu-ia64.c \
cpu-ip2k.c \
cpu-iq2000.c \
@@ -545,6 +548,7 @@ BFD64_BACKENDS = \
elf32-score.lo \
elf32-score7.lo \
elf64-alpha.lo \
+ elf64-amdgcn.lo \
elf64-gen.lo \
elf64-hppa.lo \
elf64-ia64.lo \
@@ -591,6 +595,7 @@ BFD64_BACKENDS_CFILES = \
elf32-score.c \
elf32-score7.c \
elf64-alpha.c \
+ elf64-amdgcn.c \
elf64-gen.c \
elf64-hppa.c \
elf64-ia64-vms.c \
@@ -920,11 +925,6 @@ LIBBFD_H_FILES = libbfd-in.h libbfd.c bfdio.c bfdwin.c \
cache.c reloc.c archures.c linker.c
LIBCOFF_H_FILES = libcoff-in.h coffcode.h
-MKDOC = doc/chew$(EXEEXT_FOR_BUILD)
-
-$(MKDOC):
- cd $(bfddocdir) && $(MAKE) chew$(EXEEXT_FOR_BUILD)
-
headers: stmp-bin2-h stmp-lbfd-h stmp-lcoff-h
# We only rebuild the header files automatically if we have been
@@ -967,12 +967,12 @@ stmp-lcoff-h: $(LIBCOFF_H_FILES) $(MKDOC)
$(AM_V_at)$(SHELL) $(srcdir)/../move-if-change libcoff.h-new $(srcdir)/libcoff.h
$(AM_V_at)touch stmp-lcoff-h
-MOSTLYCLEANFILES = ofiles stamp-ofiles
+MOSTLYCLEANFILES += ofiles stamp-ofiles
-CLEANFILES = bfd.h dep.sed stmp-bfd-h DEP DEPA DEP1 DEP2 libbfd.a stamp-lib \
+CLEANFILES += bfd.h dep.sed stmp-bfd-h DEP DEPA DEP1 DEP2 libbfd.a stamp-lib \
stmp-bin2-h stmp-lbfd-h stmp-lcoff-h
-DISTCLEANFILES = $(BUILD_CFILES) $(BUILD_HFILES) libtool-soversion
+DISTCLEANFILES += $(BUILD_CFILES) $(BUILD_HFILES) libtool-soversion
bfdver.h: $(srcdir)/version.h $(srcdir)/development.sh $(srcdir)/Makefile.in
$(AM_V_GEN)\
@@ -1009,3 +1009,5 @@ coff-tic54x.lo: coff-tic54x.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC)$(LTCOMPILE) -c -o $@ $< $(NO_WERROR)
+
+include doc/local.mk
diff --git a/bfd/Makefile.in b/bfd/Makefile.in
index f5313a2ad6f..3068560c48b 100644
--- a/bfd/Makefile.in
+++ b/bfd/Makefile.in
@@ -178,7 +178,7 @@ am__uninstall_files_from_dir = { \
|| { echo " ( cd '$$dir' && rm -f" $$files ")"; \
$(am__cd) "$$dir" && rm -f $$files; }; \
}
-am__installdirs = "$(DESTDIR)$(bfdlibdir)" \
+am__installdirs = "$(DESTDIR)$(bfdlibdir)" "$(DESTDIR)$(infodir)" \
"$(DESTDIR)$(bfdincludedir)"
LTLIBRARIES = $(bfdlib_LTLIBRARIES) $(noinst_LTLIBRARIES)
am__DEPENDENCIES_1 =
@@ -235,6 +235,46 @@ am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
SOURCES = $(libbfd_a_SOURCES) $(libbfd_la_SOURCES) \
$(EXTRA_libbfd_la_SOURCES)
+AM_V_DVIPS = $(am__v_DVIPS_@AM_V@)
+am__v_DVIPS_ = $(am__v_DVIPS_@AM_DEFAULT_V@)
+am__v_DVIPS_0 = @echo " DVIPS " $@;
+am__v_DVIPS_1 =
+AM_V_MAKEINFO = $(am__v_MAKEINFO_@AM_V@)
+am__v_MAKEINFO_ = $(am__v_MAKEINFO_@AM_DEFAULT_V@)
+am__v_MAKEINFO_0 = @echo " MAKEINFO" $@;
+am__v_MAKEINFO_1 =
+AM_V_INFOHTML = $(am__v_INFOHTML_@AM_V@)
+am__v_INFOHTML_ = $(am__v_INFOHTML_@AM_DEFAULT_V@)
+am__v_INFOHTML_0 = @echo " INFOHTML" $@;
+am__v_INFOHTML_1 =
+AM_V_TEXI2DVI = $(am__v_TEXI2DVI_@AM_V@)
+am__v_TEXI2DVI_ = $(am__v_TEXI2DVI_@AM_DEFAULT_V@)
+am__v_TEXI2DVI_0 = @echo " TEXI2DVI" $@;
+am__v_TEXI2DVI_1 =
+AM_V_TEXI2PDF = $(am__v_TEXI2PDF_@AM_V@)
+am__v_TEXI2PDF_ = $(am__v_TEXI2PDF_@AM_DEFAULT_V@)
+am__v_TEXI2PDF_0 = @echo " TEXI2PDF" $@;
+am__v_TEXI2PDF_1 =
+AM_V_texinfo = $(am__v_texinfo_@AM_V@)
+am__v_texinfo_ = $(am__v_texinfo_@AM_DEFAULT_V@)
+am__v_texinfo_0 = -q
+am__v_texinfo_1 =
+AM_V_texidevnull = $(am__v_texidevnull_@AM_V@)
+am__v_texidevnull_ = $(am__v_texidevnull_@AM_DEFAULT_V@)
+am__v_texidevnull_0 = > /dev/null
+am__v_texidevnull_1 =
+am__dirstamp = $(am__leading_dot)dirstamp
+INFO_DEPS = doc/bfd.info
+am__TEXINFO_TEX_DIR = $(srcdir)
+DVIS = doc/bfd.dvi
+PDFS = doc/bfd.pdf
+PSS = doc/bfd.ps
+HTMLS = doc/bfd.html
+TEXINFOS = doc/bfd.texi
+TEXI2PDF = $(TEXI2DVI) --pdf --batch
+MAKEINFOHTML = $(MAKEINFO) --html
+AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS)
+DVIPS = dvips
RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
ctags-recursive dvi-recursive html-recursive info-recursive \
install-data-recursive install-dvi-recursive \
@@ -458,11 +498,17 @@ top_srcdir = @top_srcdir@
wordsize = @wordsize@
zlibdir = @zlibdir@
zlibinc = @zlibinc@
-AUTOMAKE_OPTIONS = no-dist foreign
+AUTOMAKE_OPTIONS = no-dist foreign info-in-builddir no-texinfo.tex
ACLOCAL_AMFLAGS = -I . -I .. -I ../config
+MOSTLYCLEANFILES = ofiles stamp-ofiles $(MKDOC) doc/*.o doc/*.stamp
+CLEANFILES = bfd.h dep.sed stmp-bfd-h DEP DEPA DEP1 DEP2 libbfd.a \
+ stamp-lib stmp-bin2-h stmp-lbfd-h stmp-lcoff-h
+DISTCLEANFILES = $(BUILD_CFILES) $(BUILD_HFILES) libtool-soversion \
+ doc/bfd.?? doc/bfd.??? texput.log
+MAINTAINERCLEANFILES = $(DOCFILES) doc/bfd.info
INCDIR = $(srcdir)/../include
CSEARCH = -I. -I$(srcdir) -I$(INCDIR)
-SUBDIRS = doc po
+SUBDIRS = po
bfddocdir = doc
libbfd_la_LDFLAGS = $(am__append_1) -release `cat libtool-soversion` \
@SHARED_LDFLAGS@ $(am__empty)
@@ -518,6 +564,7 @@ BFD64_LIBS_CFILES = archive64.c
ALL_MACHINES = \
cpu-aarch64.lo \
cpu-alpha.lo \
+ cpu-amdgcn.lo \
cpu-arc.lo \
cpu-arm.lo \
cpu-avr.lo \
@@ -538,8 +585,6 @@ ALL_MACHINES = \
cpu-hppa.lo \
cpu-i386.lo \
cpu-iamcu.lo \
- cpu-l1om.lo \
- cpu-k1om.lo \
cpu-ia64.lo \
cpu-ip2k.lo \
cpu-iq2000.lo \
@@ -603,6 +648,7 @@ ALL_MACHINES = \
ALL_MACHINES_CFILES = \
cpu-aarch64.c \
cpu-alpha.c \
+ cpu-amdgcn.c \
cpu-arc.c \
cpu-arm.c \
cpu-avr.c \
@@ -623,8 +669,6 @@ ALL_MACHINES_CFILES = \
cpu-hppa.c \
cpu-i386.c \
cpu-iamcu.c \
- cpu-l1om.c \
- cpu-k1om.c \
cpu-ia64.c \
cpu-ip2k.c \
cpu-iq2000.c \
@@ -973,6 +1017,7 @@ BFD64_BACKENDS = \
elf32-score.lo \
elf32-score7.lo \
elf64-alpha.lo \
+ elf64-amdgcn.lo \
elf64-gen.lo \
elf64-hppa.lo \
elf64-ia64.lo \
@@ -1019,6 +1064,7 @@ BFD64_BACKENDS_CFILES = \
elf32-score.c \
elf32-score7.c \
elf64-alpha.c \
+ elf64-amdgcn.c \
elf64-gen.c \
elf64-hppa.c \
elf64-ia64-vms.c \
@@ -1176,7 +1222,6 @@ LIBBFD_H_FILES = libbfd-in.h libbfd.c bfdio.c bfdwin.c \
cache.c reloc.c archures.c linker.c
LIBCOFF_H_FILES = libcoff-in.h coffcode.h
-MKDOC = doc/chew$(EXEEXT_FOR_BUILD)
# We only rebuild the header files automatically if we have been
# configured with --enable-maintainer-mode.
@@ -1199,19 +1244,96 @@ REGEN_HEADER = \
echo "\#endif"; \
)
-MOSTLYCLEANFILES = ofiles stamp-ofiles
-CLEANFILES = bfd.h dep.sed stmp-bfd-h DEP DEPA DEP1 DEP2 libbfd.a stamp-lib \
- stmp-bin2-h stmp-lbfd-h stmp-lcoff-h
+DOCFILES = \
+ doc/aoutx.texi \
+ doc/archive.texi \
+ doc/archures.texi \
+ doc/bfdio.texi \
+ doc/bfdt.texi \
+ doc/bfdver.texi \
+ doc/bfdwin.texi \
+ doc/cache.texi \
+ doc/coffcode.texi \
+ doc/corefile.texi \
+ doc/elfcode.texi \
+ doc/elf.texi \
+ doc/format.texi \
+ doc/hash.texi \
+ doc/init.texi \
+ doc/libbfd.texi \
+ doc/linker.texi \
+ doc/mmo.texi \
+ doc/opncls.texi \
+ doc/reloc.texi \
+ doc/section.texi \
+ doc/syms.texi \
+ doc/targets.texi
+
+
+# SRCDOC, SRCPROT, SRCIPROT only used to sidestep Sun Make bug in interaction
+# between VPATH and suffix rules. If you use GNU Make, perhaps other Makes,
+# you don't need these three:
+SRCDOC = \
+ $(srcdir)/aoutx.h $(srcdir)/archive.c \
+ $(srcdir)/archures.c $(srcdir)/bfd.c \
+ $(srcdir)/bfdio.c $(srcdir)/bfdwin.c \
+ $(srcdir)/cache.c $(srcdir)/coffcode.h \
+ $(srcdir)/corefile.c $(srcdir)/elf.c \
+ $(srcdir)/elfcode.h $(srcdir)/format.c \
+ $(srcdir)/libbfd.c $(srcdir)/opncls.c \
+ $(srcdir)/reloc.c $(srcdir)/section.c \
+ $(srcdir)/syms.c $(srcdir)/targets.c \
+ $(srcdir)/hash.c $(srcdir)/linker.c \
+ $(srcdir)/mmo.c
+
+SRCPROT = $(srcdir)/archive.c $(srcdir)/archures.c \
+ $(srcdir)/bfd.c $(srcdir)/coffcode.h $(srcdir)/corefile.c \
+ $(srcdir)/format.c $(srcdir)/libbfd.c \
+ $(srcdir)/bfdio.c $(srcdir)/bfdwin.c \
+ $(srcdir)/opncls.c $(srcdir)/reloc.c \
+ $(srcdir)/section.c $(srcdir)/syms.c \
+ $(srcdir)/targets.c $(srcdir)/init.c
+
+SRCIPROT = $(srcdir)/cache.c $(srcdir)/libbfd.c \
+ $(srcdir)/bfdio.c $(srcdir)/bfdwin.c \
+ $(srcdir)/reloc.c $(srcdir)/cpu-h8300.c \
+ $(srcdir)/cpu-i960.c $(srcdir)/archures.c \
+ $(srcdir)/init.c
+
+TEXIDIR = $(srcdir)/../texinfo/fsf
+info_TEXINFOS = doc/bfd.texi
+doc_bfd_TEXINFOS = $(DOCFILES) doc/bfdsumm.texi
+AM_MAKEINFOFLAGS = --no-split -I "$(srcdir)/doc" -I doc
+TEXI2DVI = texi2dvi -I "$(srcdir)/doc" -I doc
+MKDOC = doc/chew$(EXEEXT_FOR_BUILD)
+
+# We can't replace these rules with an implicit rule, because
+# makes without VPATH support couldn't find the .h files in `..'.
+
+# We do not depend on chew directly so that we can distribute the info
+# files, and permit people to rebuild them, without requiring the makeinfo
+# program. If somebody tries to rebuild info, but none of the .texi files
+# have changed, then nothing will be rebuilt.
+REGEN_TEXI = \
+ ( \
+ set -e; \
+ $(MKDOC) -f $(srcdir)/doc/doc.str < $< > $@.tmp; \
+ texi=$@; \
+ texi=$${texi%.stamp}.texi; \
+ test -e $$texi || test ! -f $(srcdir)/$$texi || $(LN_S) $(srcdir)/$$texi .; \
+ $(SHELL) $(srcdir)/../move-if-change $@.tmp $$texi; \
+ touch $@; \
+ )
-DISTCLEANFILES = $(BUILD_CFILES) $(BUILD_HFILES) libtool-soversion
+noinst_TEXINFOS = doc/bfdint.texi
all: $(BUILT_SOURCES) config.h
$(MAKE) $(AM_MAKEFLAGS) all-recursive
.SUFFIXES:
-.SUFFIXES: .c .lo .o .obj
+.SUFFIXES: .c .dvi .lo .o .obj .ps
am--refresh: Makefile
@:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/doc/local.mk $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
@@ -1233,6 +1355,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
esac;
+$(srcdir)/doc/local.mk $(am__empty):
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
$(SHELL) ./config.status --recheck
@@ -1357,6 +1480,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/corefile.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-aarch64.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-alpha.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-amdgcn.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-arc.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-arm.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-avr.Plo@am__quote@
@@ -1380,8 +1504,6 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-iamcu.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-ip2k.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-iq2000.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-k1om.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-l1om.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-lm32.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-loongarch.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-m10200.Plo@am__quote@
@@ -1523,6 +1645,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-aarch64.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-alpha.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-amdgcn.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-bpf.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-gen.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-hppa.Plo@am__quote@
@@ -1651,6 +1774,143 @@ clean-libtool:
distclean-libtool:
-rm -f libtool config.lt
+doc/$(am__dirstamp):
+ @$(MKDIR_P) doc
+ @: > doc/$(am__dirstamp)
+
+doc/bfd.info: doc/bfd.texi $(doc_bfd_TEXINFOS)
+ @test -f doc/$(am__dirstamp) || $(MAKE) $(AM_MAKEFLAGS) doc/$(am__dirstamp)
+ $(AM_V_MAKEINFO)restore=: && backupdir="$(am__leading_dot)am$$$$" && \
+ rm -rf $$backupdir && mkdir $$backupdir && \
+ if ($(MAKEINFO) --version) >/dev/null 2>&1; then \
+ for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \
+ if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \
+ done; \
+ else :; fi && \
+ if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I doc -I $(srcdir)/doc \
+ -o $@ `test -f 'doc/bfd.texi' || echo '$(srcdir)/'`doc/bfd.texi; \
+ then \
+ rc=0; \
+ else \
+ rc=$$?; \
+ $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \
+ fi; \
+ rm -rf $$backupdir; exit $$rc
+
+doc/bfd.dvi: doc/bfd.texi $(doc_bfd_TEXINFOS) doc/$(am__dirstamp)
+ $(AM_V_TEXI2DVI)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I doc -I $(srcdir)/doc' \
+ $(TEXI2DVI) $(AM_V_texinfo) --build-dir=$(@:.dvi=.t2d) -o $@ $(AM_V_texidevnull) \
+ `test -f 'doc/bfd.texi' || echo '$(srcdir)/'`doc/bfd.texi
+
+doc/bfd.pdf: doc/bfd.texi $(doc_bfd_TEXINFOS) doc/$(am__dirstamp)
+ $(AM_V_TEXI2PDF)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I doc -I $(srcdir)/doc' \
+ $(TEXI2PDF) $(AM_V_texinfo) --build-dir=$(@:.pdf=.t2p) -o $@ $(AM_V_texidevnull) \
+ `test -f 'doc/bfd.texi' || echo '$(srcdir)/'`doc/bfd.texi
+
+doc/bfd.html: doc/bfd.texi $(doc_bfd_TEXINFOS) doc/$(am__dirstamp)
+ $(AM_V_MAKEINFO)rm -rf $(@:.html=.htp)
+ $(AM_V_at)if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I doc -I $(srcdir)/doc \
+ -o $(@:.html=.htp) `test -f 'doc/bfd.texi' || echo '$(srcdir)/'`doc/bfd.texi; \
+ then \
+ rm -rf $@ && mv $(@:.html=.htp) $@; \
+ else \
+ rm -rf $(@:.html=.htp); exit 1; \
+ fi
+.dvi.ps:
+ $(AM_V_DVIPS)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+ $(DVIPS) $(AM_V_texinfo) -o $@ $<
+
+uninstall-dvi-am:
+ @$(NORMAL_UNINSTALL)
+ @list='$(DVIS)'; test -n "$(dvidir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " rm -f '$(DESTDIR)$(dvidir)/$$f'"; \
+ rm -f "$(DESTDIR)$(dvidir)/$$f"; \
+ done
+
+uninstall-html-am:
+ @$(NORMAL_UNINSTALL)
+ @list='$(HTMLS)'; test -n "$(htmldir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " rm -rf '$(DESTDIR)$(htmldir)/$$f'"; \
+ rm -rf "$(DESTDIR)$(htmldir)/$$f"; \
+ done
+
+uninstall-info-am:
+ @$(PRE_UNINSTALL)
+ @if test -d '$(DESTDIR)$(infodir)' && $(am__can_run_installinfo); then \
+ list='$(INFO_DEPS)'; \
+ for file in $$list; do \
+ relfile=`echo "$$file" | sed 's|^.*/||'`; \
+ echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \
+ if install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \
+ then :; else test ! -f "$(DESTDIR)$(infodir)/$$relfile" || exit 1; fi; \
+ done; \
+ else :; fi
+ @$(NORMAL_UNINSTALL)
+ @list='$(INFO_DEPS)'; \
+ for file in $$list; do \
+ relfile=`echo "$$file" | sed 's|^.*/||'`; \
+ relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \
+ (if test -d "$(DESTDIR)$(infodir)" && cd "$(DESTDIR)$(infodir)"; then \
+ echo " cd '$(DESTDIR)$(infodir)' && rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]"; \
+ rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \
+ else :; fi); \
+ done
+
+uninstall-pdf-am:
+ @$(NORMAL_UNINSTALL)
+ @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " rm -f '$(DESTDIR)$(pdfdir)/$$f'"; \
+ rm -f "$(DESTDIR)$(pdfdir)/$$f"; \
+ done
+
+uninstall-ps-am:
+ @$(NORMAL_UNINSTALL)
+ @list='$(PSS)'; test -n "$(psdir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " rm -f '$(DESTDIR)$(psdir)/$$f'"; \
+ rm -f "$(DESTDIR)$(psdir)/$$f"; \
+ done
+
+dist-info: $(INFO_DEPS)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ list='$(INFO_DEPS)'; \
+ for base in $$list; do \
+ case $$base in \
+ $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \
+ esac; \
+ if test -f $$base; then d=.; else d=$(srcdir); fi; \
+ base_i=`echo "$$base" | sed 's|\.info$$||;s|$$|.i|'`; \
+ for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9] $$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \
+ if test -f $$file; then \
+ relfile=`expr "$$file" : "$$d/\(.*\)"`; \
+ test -f "$(distdir)/$$relfile" || \
+ cp -p $$file "$(distdir)/$$relfile"; \
+ else :; fi; \
+ done; \
+ done
+
+mostlyclean-aminfo:
+ -rm -rf doc/bfd.t2d doc/bfd.t2p
+
+clean-aminfo:
+ -test -z "doc/bfd.dvi doc/bfd.pdf doc/bfd.ps doc/bfd.html" \
+ || rm -rf doc/bfd.dvi doc/bfd.pdf doc/bfd.ps doc/bfd.html
+
+maintainer-clean-aminfo:
+ @list='$(INFO_DEPS)'; for i in $$list; do \
+ i_i=`echo "$$i" | sed 's|\.info$$||;s|$$|.i|'`; \
+ echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \
+ rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \
+ done
install-bfdincludeHEADERS: $(bfdinclude_HEADERS)
@$(NORMAL_INSTALL)
@list='$(bfdinclude_HEADERS)'; test -n "$(bfdincludedir)" || list=; \
@@ -1781,10 +2041,11 @@ distclean-tags:
check-am: all-am
check: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) check-recursive
-all-am: Makefile $(LIBRARIES) $(LTLIBRARIES) $(HEADERS) config.h
+all-am: Makefile $(INFO_DEPS) $(LIBRARIES) $(LTLIBRARIES) $(HEADERS) \
+ config.h
installdirs: installdirs-recursive
installdirs-am:
- for dir in "$(DESTDIR)$(bfdlibdir)" "$(DESTDIR)$(bfdincludedir)"; do \
+ for dir in "$(DESTDIR)$(bfdlibdir)" "$(DESTDIR)$(infodir)" "$(DESTDIR)$(bfdincludedir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: $(BUILT_SOURCES)
@@ -1816,16 +2077,19 @@ clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -rm -f doc/$(am__dirstamp)
-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
clean: clean-recursive
-clean-am: clean-bfdlibLTLIBRARIES clean-generic clean-libtool \
- clean-noinstLIBRARIES clean-noinstLTLIBRARIES mostlyclean-am
+clean-am: clean-aminfo clean-bfdlibLTLIBRARIES clean-generic \
+ clean-libtool clean-noinstLIBRARIES clean-noinstLTLIBRARIES \
+ mostlyclean-am
distclean: distclean-recursive
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
@@ -1836,42 +2100,134 @@ distclean-am: clean-am distclean-compile distclean-generic \
dvi: dvi-recursive
-dvi-am:
+dvi-am: $(DVIS)
html: html-recursive
-html-am:
+html-am: $(HTMLS) html-local
info: info-recursive
-info-am:
+info-am: $(INFO_DEPS)
-install-data-am: install-bfdincludeHEADERS install-bfdlibLTLIBRARIES
+install-data-am: install-bfdincludeHEADERS install-bfdlibLTLIBRARIES \
+ install-info-am
install-dvi: install-dvi-recursive
-install-dvi-am:
-
+install-dvi-am: $(DVIS)
+ @$(NORMAL_INSTALL)
+ @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"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dvidir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(dvidir)" || exit $$?; \
+ done
install-exec-am:
install-html: install-html-recursive
-install-html-am:
-
+install-html-am: $(HTMLS)
+ @$(NORMAL_INSTALL)
+ @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) \
+ d2=$$d$$p; \
+ if test -d "$$d2"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)/$$f'"; \
+ $(MKDIR_P) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \
+ echo " $(INSTALL_DATA) '$$d2'/* '$(DESTDIR)$(htmldir)/$$f'"; \
+ $(INSTALL_DATA) "$$d2"/* "$(DESTDIR)$(htmldir)/$$f" || exit $$?; \
+ else \
+ list2="$$list2 $$d2"; \
+ fi; \
+ done; \
+ test -z "$$list2" || { echo "$$list2" | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htmldir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(htmldir)" || exit $$?; \
+ done; }
install-info: install-info-recursive
-install-info-am:
-
+install-info-am: $(INFO_DEPS)
+ @$(NORMAL_INSTALL)
+ @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/||"`;; \
+ esac; \
+ if test -f $$file; then d=.; else d=$(srcdir); fi; \
+ file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \
+ for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \
+ $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \
+ if test -f $$ifile; then \
+ echo "$$ifile"; \
+ else : ; fi; \
+ done; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(infodir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(infodir)" || exit $$?; done
+ @$(POST_INSTALL)
+ @if $(am__can_run_installinfo); then \
+ list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \
+ for file in $$list; do \
+ relfile=`echo "$$file" | sed 's|^.*/||'`; \
+ echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\
+ install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\
+ done; \
+ else : ; fi
install-man:
install-pdf: install-pdf-recursive
-install-pdf-am:
-
+install-pdf-am: $(PDFS)
+ @$(NORMAL_INSTALL)
+ @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"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pdfdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(pdfdir)" || exit $$?; done
install-ps: install-ps-recursive
-install-ps-am:
-
+install-ps-am: $(PSS)
+ @$(NORMAL_INSTALL)
+ @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"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(psdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(psdir)" || exit $$?; done
installcheck-am:
maintainer-clean: maintainer-clean-recursive
@@ -1879,43 +2235,50 @@ maintainer-clean: maintainer-clean-recursive
-rm -rf $(top_srcdir)/autom4te.cache
-rm -rf ./$(DEPDIR)
-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
+maintainer-clean-am: distclean-am maintainer-clean-aminfo \
+ maintainer-clean-generic
mostlyclean: mostlyclean-recursive
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
- mostlyclean-libtool
+mostlyclean-am: mostlyclean-aminfo mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool
pdf: pdf-recursive
-pdf-am:
+pdf-am: $(PDFS)
ps: ps-recursive
-ps-am:
+ps-am: $(PSS)
-uninstall-am: uninstall-bfdincludeHEADERS uninstall-bfdlibLTLIBRARIES
+uninstall-am: uninstall-bfdincludeHEADERS uninstall-bfdlibLTLIBRARIES \
+ uninstall-dvi-am uninstall-html-am uninstall-info-am \
+ uninstall-pdf-am uninstall-ps-am
.MAKE: $(am__recursive_targets) all check install install-am \
install-strip
.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \
- am--refresh check check-am clean clean-bfdlibLTLIBRARIES \
- clean-cscope clean-generic clean-libtool clean-noinstLIBRARIES \
- clean-noinstLTLIBRARIES cscope cscopelist-am ctags ctags-am \
- distclean distclean-compile distclean-generic distclean-hdr \
- distclean-libtool distclean-tags dvi dvi-am html html-am info \
- info-am install install-am install-bfdincludeHEADERS \
- install-bfdlibLTLIBRARIES install-data install-data-am \
- install-dvi install-dvi-am install-exec install-exec-am \
- install-html install-html-am install-info install-info-am \
- install-man install-pdf install-pdf-am install-ps \
- install-ps-am install-strip installcheck installcheck-am \
- installdirs installdirs-am maintainer-clean \
- maintainer-clean-generic mostlyclean mostlyclean-compile \
- mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
- tags tags-am uninstall uninstall-am \
- uninstall-bfdincludeHEADERS uninstall-bfdlibLTLIBRARIES
+ am--refresh check check-am clean clean-aminfo \
+ clean-bfdlibLTLIBRARIES clean-cscope clean-generic \
+ clean-libtool clean-noinstLIBRARIES clean-noinstLTLIBRARIES \
+ cscope cscopelist-am ctags ctags-am dist-info distclean \
+ distclean-compile distclean-generic distclean-hdr \
+ distclean-libtool distclean-tags dvi dvi-am html html-am \
+ html-local info info-am install install-am \
+ install-bfdincludeHEADERS install-bfdlibLTLIBRARIES \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs installdirs-am \
+ maintainer-clean maintainer-clean-aminfo \
+ maintainer-clean-generic mostlyclean mostlyclean-aminfo \
+ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \
+ uninstall-bfdincludeHEADERS uninstall-bfdlibLTLIBRARIES \
+ uninstall-dvi-am uninstall-html-am uninstall-info-am \
+ uninstall-pdf-am uninstall-ps-am
.PRECIOUS: Makefile
@@ -2068,9 +2431,6 @@ stmp-bfd-h: bfd-in3.h
rm -f bfd-tmp.h
touch stmp-bfd-h
-$(MKDOC):
- cd $(bfddocdir) && $(MAKE) chew$(EXEEXT_FOR_BUILD)
-
headers: stmp-bin2-h stmp-lbfd-h stmp-lcoff-h
$(srcdir)/bfd-in2.h: @MAINT@ stmp-bin2-h ; @true
@@ -2127,6 +2487,49 @@ coff-tic54x.lo: coff-tic54x.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC)$(LTCOMPILE) -c -o $@ $< $(NO_WERROR)
+$(MKDOC): doc/chew.stamp ; @true
+doc/chew.stamp: $(srcdir)/doc/chew.c doc/$(am__dirstamp)
+ $(AM_V_CCLD)$(CC_FOR_BUILD) -o doc/chw$$$$$(EXEEXT_FOR_BUILD) $(CFLAGS_FOR_BUILD) \
+ $(LDFLAGS_FOR_BUILD) $(H_CFLAGS) \
+ -I. -I$(srcdir) -Idoc -I$(srcdir)/../include -I$(srcdir)/../intl -I../intl \
+ $(srcdir)/doc/chew.c && \
+ $(SHELL) $(srcdir)/../move-if-change \
+ doc/chw$$$$$(EXEEXT_FOR_BUILD) $(MKDOC) && \
+ touch $@
+
+.PRECIOUS: doc/%.stamp
+doc/%.texi: doc/%.stamp ; @true
+doc/%.stamp: $(srcdir)/%.h $(srcdir)/doc/doc.str $(MKDOC) doc/$(am__dirstamp)
+ $(AM_V_GEN)$(REGEN_TEXI)
+doc/%.stamp: $(srcdir)/%.c $(srcdir)/doc/doc.str $(MKDOC) doc/$(am__dirstamp)
+ $(AM_V_GEN)$(REGEN_TEXI)
+
+# Avoid the %.stamp generating a builddir/bfd.texi that overrides the
+# srcdir/ as well as regenerating doc/bfd.info for each make run.
+doc/bfd.stamp: $(srcdir)/doc/bfd.texi ; $(AM_V_at)touch $@
+
+# We use bfdt.texi, rather than bfd.texi, to avoid conflicting with
+# bfd.texi on an 8.3 filesystem.
+doc/bfdt.stamp: $(srcdir)/bfd.c $(srcdir)/doc/doc.str $(MKDOC) doc/$(am__dirstamp)
+ $(AM_V_GEN)$(REGEN_TEXI)
+
+doc/bfdver.texi: $(srcdir)/Makefile.in
+ $(AM_V_GEN)\
+ $(MKDIR_P) $(@D); \
+ echo "@set VERSION $(VERSION)" > $@; \
+ if test -n "$(PKGVERSION)"; then \
+ echo "@set VERSION_PACKAGE $(PKGVERSION)" >> $@; \
+ fi; \
+ echo "@set UPDATED `date '+%B %Y'`" >> $@; \
+ if test -n "$(REPORT_BUGS_TEXI)"; then \
+ echo "@set BUGURL $(REPORT_BUGS_TEXI)" >> $@; \
+ fi
+
+html-local: doc/bfd/index.html
+doc/bfd/index.html: doc/bfd.texi $(bfd_TEXINFOS) doc/$(am__dirstamp)
+ $(AM_V_at)$(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) \
+ --split=node -o doc/bfd $(srcdir)/doc/bfd.texi
+
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
diff --git a/bfd/archures.c b/bfd/archures.c
index d19b5d7ee6b..bcd2b1cf48b 100644
--- a/bfd/archures.c
+++ b/bfd/archures.c
@@ -205,12 +205,6 @@ DESCRIPTION
.#define bfd_mach_i386_i386_intel_syntax (bfd_mach_i386_i386 | bfd_mach_i386_intel_syntax)
.#define bfd_mach_x86_64_intel_syntax (bfd_mach_x86_64 | bfd_mach_i386_intel_syntax)
.#define bfd_mach_x64_32_intel_syntax (bfd_mach_x64_32 | bfd_mach_i386_intel_syntax)
-. bfd_arch_l1om, {* Intel L1OM. *}
-.#define bfd_mach_l1om (1 << 5)
-.#define bfd_mach_l1om_intel_syntax (bfd_mach_l1om | bfd_mach_i386_intel_syntax)
-. bfd_arch_k1om, {* Intel K1OM. *}
-.#define bfd_mach_k1om (1 << 6)
-.#define bfd_mach_k1om_intel_syntax (bfd_mach_k1om | bfd_mach_i386_intel_syntax)
. bfd_arch_iamcu, {* Intel MCU. *}
.#define bfd_mach_iamcu (1 << 8)
.#define bfd_mach_i386_iamcu (bfd_mach_i386_i386 | bfd_mach_iamcu)
@@ -559,6 +553,19 @@ DESCRIPTION
. bfd_arch_loongarch, {* LoongArch *}
.#define bfd_mach_loongarch32 1
.#define bfd_mach_loongarch64 2
+. bfd_arch_amdgcn, {* AMDGCN *}
+.#define bfd_mach_amdgcn_unknown 0x000
+.#define bfd_mach_amdgcn_gfx900 0x02c
+.#define bfd_mach_amdgcn_gfx904 0x02e
+.#define bfd_mach_amdgcn_gfx906 0x02f
+.#define bfd_mach_amdgcn_gfx908 0x030
+.#define bfd_mach_amdgcn_gfx90a 0x03f
+.#define bfd_mach_amdgcn_gfx1010 0x033
+.#define bfd_mach_amdgcn_gfx1011 0x034
+.#define bfd_mach_amdgcn_gfx1012 0x035
+.#define bfd_mach_amdgcn_gfx1030 0x036
+.#define bfd_mach_amdgcn_gfx1031 0x037
+.#define bfd_mach_amdgcn_gfx1032 0x038
. bfd_arch_last
. };
*/
@@ -614,6 +621,7 @@ DESCRIPTION
extern const bfd_arch_info_type bfd_aarch64_arch;
extern const bfd_arch_info_type bfd_alpha_arch;
+extern const bfd_arch_info_type bfd_amdgcn_arch;
extern const bfd_arch_info_type bfd_arc_arch;
extern const bfd_arch_info_type bfd_arm_arch;
extern const bfd_arch_info_type bfd_avr_arch;
@@ -636,8 +644,6 @@ extern const bfd_arch_info_type bfd_iamcu_arch;
extern const bfd_arch_info_type bfd_ia64_arch;
extern const bfd_arch_info_type bfd_ip2k_arch;
extern const bfd_arch_info_type bfd_iq2000_arch;
-extern const bfd_arch_info_type bfd_k1om_arch;
-extern const bfd_arch_info_type bfd_l1om_arch;
extern const bfd_arch_info_type bfd_lm32_arch;
extern const bfd_arch_info_type bfd_loongarch_arch;
extern const bfd_arch_info_type bfd_m32c_arch;
@@ -704,6 +710,7 @@ static const bfd_arch_info_type * const bfd_archures_list[] =
#else
&bfd_aarch64_arch,
&bfd_alpha_arch,
+ &bfd_amdgcn_arch,
&bfd_arc_arch,
&bfd_arm_arch,
&bfd_avr_arch,
@@ -726,8 +733,6 @@ static const bfd_arch_info_type * const bfd_archures_list[] =
&bfd_ia64_arch,
&bfd_ip2k_arch,
&bfd_iq2000_arch,
- &bfd_k1om_arch,
- &bfd_l1om_arch,
&bfd_lm32_arch,
&bfd_loongarch_arch,
&bfd_m32c_arch,
diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h
index 8e815bab624..50e26fc691d 100644
--- a/bfd/bfd-in2.h
+++ b/bfd/bfd-in2.h
@@ -766,6 +766,12 @@ typedef struct bfd_section
the same as that passed to bfd_make_section. */
const char *name;
+ /* The next section in the list belonging to the BFD, or NULL. */
+ struct bfd_section *next;
+
+ /* The previous section in the list belonging to the BFD, or NULL. */
+ struct bfd_section *prev;
+
/* A unique sequence number. */
unsigned int id;
@@ -776,12 +782,6 @@ typedef struct bfd_section
/* Which section in the bfd; 0..n-1 as sections are created in a bfd. */
unsigned int index;
- /* The next section in the list belonging to the BFD, or NULL. */
- struct bfd_section *next;
-
- /* The previous section in the list belonging to the BFD, or NULL. */
- struct bfd_section *prev;
-
/* The field flags contains attributes of the section. Some
flags are read in from the object file, and some are
synthesized from other information. */
@@ -1070,13 +1070,6 @@ typedef struct bfd_section
/* The compressed size of the section in octets. */
bfd_size_type compressed_size;
- /* Relaxation table. */
- struct relax_table *relax;
-
- /* Count of used relaxation table entries. */
- int relax_count;
-
-
/* If this section is going to be output, then this value is the
offset in *bytes* into the output section of the first byte in the
input section (byte ==> smallest addressable unit on the
@@ -1089,10 +1082,6 @@ typedef struct bfd_section
/* The output section through which to map on output. */
struct bfd_section *output_section;
- /* The alignment requirement of the section, as an exponent of 2 -
- e.g., 3 aligns to 2^3 (or 8). */
- unsigned int alignment_power;
-
/* If an input section, a pointer to a vector of relocation
records for the data in this section. */
struct reloc_cache_entry *relocation;
@@ -1104,6 +1093,10 @@ typedef struct bfd_section
/* The number of relocation records in one of the above. */
unsigned reloc_count;
+ /* The alignment requirement of the section, as an exponent of 2 -
+ e.g., 3 aligns to 2^3 (or 8). */
+ unsigned int alignment_power;
+
/* Information below is back end specific - and not always used
or updated. */
@@ -1166,22 +1159,16 @@ typedef struct bfd_section
struct bfd_section *s;
const char *linked_to_symbol_name;
} map_head, map_tail;
- /* Points to the output section this section is already assigned to, if any.
- This is used when support for non-contiguous memory regions is enabled. */
- struct bfd_section *already_assigned;
-} asection;
+ /* Points to the output section this section is already assigned to,
+ if any. This is used when support for non-contiguous memory
+ regions is enabled. */
+ struct bfd_section *already_assigned;
-/* Relax table contains information about instructions which can
- be removed by relaxation -- replacing a long address with a
- short address. */
-struct relax_table {
- /* Address where bytes may be deleted. */
- bfd_vma addr;
+ /* Explicitly specified section type, if non-zero. */
+ unsigned int type;
- /* Number of bytes to be deleted. */
- int size;
-};
+} asection;
static inline const char *
bfd_section_name (const asection *sec)
@@ -1319,8 +1306,8 @@ discarded_section (const asection *sec)
}
#define BFD_FAKE_SECTION(SEC, SYM, NAME, IDX, FLAGS) \
- /* name, id, section_id, index, next, prev, flags, user_set_vma, */ \
- { NAME, IDX, 0, 0, NULL, NULL, FLAGS, 0, \
+ /* name, next, prev, id, section_id, index, flags, user_set_vma, */ \
+ { NAME, NULL, NULL, IDX, 0, 0, FLAGS, 0, \
\
/* linker_mark, linker_has_input, gc_mark, decompress_status, */ \
0, 0, 1, 0, \
@@ -1331,14 +1318,14 @@ discarded_section (const asection *sec)
/* sec_flg0, sec_flg1, sec_flg2, sec_flg3, sec_flg4, sec_flg5, */ \
0, 0, 0, 0, 0, 0, \
\
- /* vma, lma, size, rawsize, compressed_size, relax, relax_count, */ \
- 0, 0, 0, 0, 0, 0, 0, \
+ /* vma, lma, size, rawsize, compressed_size, */ \
+ 0, 0, 0, 0, 0, \
\
- /* output_offset, output_section, alignment_power, */ \
- 0, &SEC, 0, \
+ /* output_offset, output_section, relocation, orelocation, */ \
+ 0, &SEC, NULL, NULL, \
\
- /* relocation, orelocation, reloc_count, filepos, rel_filepos, */ \
- NULL, NULL, 0, 0, 0, \
+ /* reloc_count, alignment_power, filepos, rel_filepos, */ \
+ 0, 0, 0, 0, \
\
/* line_filepos, userdata, contents, lineno, lineno_count, */ \
0, NULL, NULL, NULL, 0, \
@@ -1352,8 +1339,8 @@ discarded_section (const asection *sec)
/* symbol, symbol_ptr_ptr, */ \
(struct bfd_symbol *) SYM, &SEC.symbol, \
\
- /* map_head, map_tail, already_assigned */ \
- { NULL }, { NULL }, NULL \
+ /* map_head, map_tail, already_assigned, type */ \
+ { NULL }, { NULL }, NULL, 0 \
\
}
@@ -1579,12 +1566,6 @@ enum bfd_architecture
#define bfd_mach_i386_i386_intel_syntax (bfd_mach_i386_i386 | bfd_mach_i386_intel_syntax)
#define bfd_mach_x86_64_intel_syntax (bfd_mach_x86_64 | bfd_mach_i386_intel_syntax)
#define bfd_mach_x64_32_intel_syntax (bfd_mach_x64_32 | bfd_mach_i386_intel_syntax)
- bfd_arch_l1om, /* Intel L1OM. */
-#define bfd_mach_l1om (1 << 5)
-#define bfd_mach_l1om_intel_syntax (bfd_mach_l1om | bfd_mach_i386_intel_syntax)
- bfd_arch_k1om, /* Intel K1OM. */
-#define bfd_mach_k1om (1 << 6)
-#define bfd_mach_k1om_intel_syntax (bfd_mach_k1om | bfd_mach_i386_intel_syntax)
bfd_arch_iamcu, /* Intel MCU. */
#define bfd_mach_iamcu (1 << 8)
#define bfd_mach_i386_iamcu (bfd_mach_i386_i386 | bfd_mach_iamcu)
@@ -1933,6 +1914,19 @@ enum bfd_architecture
bfd_arch_loongarch, /* LoongArch */
#define bfd_mach_loongarch32 1
#define bfd_mach_loongarch64 2
+ bfd_arch_amdgcn, /* AMDGCN */
+#define bfd_mach_amdgcn_unknown 0x000
+#define bfd_mach_amdgcn_gfx900 0x02c
+#define bfd_mach_amdgcn_gfx904 0x02e
+#define bfd_mach_amdgcn_gfx906 0x02f
+#define bfd_mach_amdgcn_gfx908 0x030
+#define bfd_mach_amdgcn_gfx90a 0x03f
+#define bfd_mach_amdgcn_gfx1010 0x033
+#define bfd_mach_amdgcn_gfx1011 0x034
+#define bfd_mach_amdgcn_gfx1012 0x035
+#define bfd_mach_amdgcn_gfx1030 0x036
+#define bfd_mach_amdgcn_gfx1031 0x037
+#define bfd_mach_amdgcn_gfx1032 0x038
bfd_arch_last
};
@@ -2235,6 +2229,7 @@ the section containing the relocation. It depends on the specific target. */
/* Section relative relocations. Some targets need this for DWARF2. */
BFD_RELOC_32_SECREL,
+ BFD_RELOC_16_SECIDX,
/* For ELF. */
BFD_RELOC_32_GOT_PCREL,
@@ -7273,7 +7268,7 @@ bool bfd_alt_mach_code (bfd *abfd, int alternative);
bfd_vma bfd_emul_get_maxpagesize (const char *);
-bfd_vma bfd_emul_get_commonpagesize (const char *, bool);
+bfd_vma bfd_emul_get_commonpagesize (const char *);
char *bfd_demangle (bfd *, const char *, int);
diff --git a/bfd/bfd.c b/bfd/bfd.c
index a2f294da983..913ce2d6abe 100644
--- a/bfd/bfd.c
+++ b/bfd/bfd.c
@@ -1876,7 +1876,7 @@ DESCRIPTION
void
bfd_set_gp_value (bfd *abfd, bfd_vma v)
{
- return _bfd_set_gp_value (abfd, v);
+ _bfd_set_gp_value (abfd, v);
}
/*
@@ -2344,7 +2344,7 @@ FUNCTION
bfd_emul_get_commonpagesize
SYNOPSIS
- bfd_vma bfd_emul_get_commonpagesize (const char *, bool);
+ bfd_vma bfd_emul_get_commonpagesize (const char *);
DESCRIPTION
Returns the common page size, in bytes, as determined by
@@ -2355,7 +2355,7 @@ RETURNS
*/
bfd_vma
-bfd_emul_get_commonpagesize (const char *emul, bool relro)
+bfd_emul_get_commonpagesize (const char *emul)
{
const bfd_target *target;
@@ -2366,10 +2366,7 @@ bfd_emul_get_commonpagesize (const char *emul, bool relro)
const struct elf_backend_data *bed;
bed = xvec_get_elf_backend_data (target);
- if (relro)
- return bed->relropagesize;
- else
- return bed->commonpagesize;
+ return bed->commonpagesize;
}
return 0;
}
diff --git a/bfd/bfdio.c b/bfd/bfdio.c
index 41b18b682ad..5c9a6555894 100644
--- a/bfd/bfdio.c
+++ b/bfd/bfdio.c
@@ -116,55 +116,57 @@ _bfd_real_fopen (const char *filename, const char *modes)
}
#elif defined (_WIN32)
- size_t filelen;
+ /* PR 25713: Handle extra long path names possibly containing '..' and '.'. */
+ wchar_t ** lpFilePart = {NULL};
+ const wchar_t prefix[] = L"\\\\?\\";
+ const wchar_t ccs[] = L", ccs=UNICODE";
+ const size_t partPathLen = strlen (filename) + 1;
- /* PR 25713: Handle extra long path names.
- For relative paths, convert them to absolute, in case that version is too long. */
- if (! IS_ABSOLUTE_PATH (filename) && (strstr (filename, ".o") != NULL))
- {
- char cwd[1024];
+ /* Converting the partial path from ascii to unicode.
+ 1) Get the length: Calling with lpWideCharStr set to null returns the length.
+ 2) Convert the string: Calling with cbMultiByte set to -1 includes the terminating null. */
+ size_t partPathWSize = MultiByteToWideChar (CP_UTF8, 0, filename, -1, NULL, 0);
+ wchar_t * partPath = calloc (partPathWSize, sizeof(wchar_t));
+ size_t ix;
- getcwd (cwd, sizeof (cwd));
- filelen = strlen (cwd) + 1;
- strncat (cwd, "\\", sizeof (cwd) - filelen);
- ++ filelen;
- strncat (cwd, filename, sizeof (cwd) - filelen);
+ MultiByteToWideChar (CP_UTF8, 0, filename, -1, partPath, partPathWSize);
- filename = cwd;
- }
+ /* Convert any UNIX style path separators into the DOS i.e. backslash separator. */
+ for (ix = 0; ix < partPathLen; ix++)
+ if (IS_UNIX_DIR_SEPARATOR(filename[ix]))
+ partPath[ix] = '\\';
- filelen = strlen (filename) + 1;
+ /* Getting the full path from the provided partial path.
+ 1) Get the length.
+ 2) Resolve the path. */
+ long fullPathWSize = GetFullPathNameW (partPath, 0, NULL, lpFilePart);
+ wchar_t * fullPath = calloc (fullPathWSize + sizeof(prefix) + 1, sizeof(wchar_t));
- if (filelen > MAX_PATH - 1)
- {
- FILE * file;
- char * fullpath;
- int i;
-
- fullpath = (char *) malloc (filelen + 8);
-
- /* Add a Microsoft recommended prefix that
- will allow the extra-long path to work. */
- strcpy (fullpath, "\\\\?\\");
- strcat (fullpath, filename);
-
- /* Convert any UNIX style path separators into the DOS form. */
- for (i = 0; fullpath[i]; i++)
- {
- if (IS_UNIX_DIR_SEPARATOR (fullpath[i]))
- fullpath[i] = '\\';
- }
-
- file = close_on_exec (fopen (fullpath, modes));
- free (fullpath);
- return file;
- }
+ wcscpy (fullPath, prefix);
+
+ int prefixLen = sizeof(prefix) / sizeof(wchar_t);
+ wchar_t * fullPathOffset = fullPath + prefixLen - 1;
+
+ GetFullPathNameW (partPath, fullPathWSize, fullPathOffset, lpFilePart);
+ free (partPath);
+
+ /* It is non-standard for modes to exceed 16 characters. */
+ wchar_t modesW[16 + sizeof(ccs)];
+
+ MultiByteToWideChar (CP_UTF8, 0, modes, -1, modesW, sizeof(modesW));
+ wcscat (modesW, ccs);
+
+ FILE * file = _wfopen (fullPath, modesW);
+ free (fullPath);
+
+ return close_on_exec (file);
#elif defined (HAVE_FOPEN64)
return close_on_exec (fopen64 (filename, modes));
-#endif
+#else
return close_on_exec (fopen (filename, modes));
+#endif
}
/*
diff --git a/bfd/coff-i386.c b/bfd/coff-i386.c
index 0670c5906c2..32a499384b7 100644
--- a/bfd/coff-i386.c
+++ b/bfd/coff-i386.c
@@ -190,8 +190,10 @@ coff_i386_reloc (bfd *abfd,
static bool
in_reloc_p (bfd *abfd ATTRIBUTE_UNUSED, reloc_howto_type *howto)
{
- return ! howto->pc_relative && howto->type != R_IMAGEBASE
- && howto->type != R_SECREL32;
+ return ! howto->pc_relative
+ && howto->type != R_IMAGEBASE
+ && howto->type != R_SECREL32
+ && howto->type != R_SECTION;
}
#endif /* COFF_WITH_PE */
@@ -236,8 +238,21 @@ static reloc_howto_type howto_table[] =
false), /* pcrel_offset */
EMPTY_HOWTO (010),
EMPTY_HOWTO (011),
- EMPTY_HOWTO (012),
#ifdef COFF_WITH_PE
+ /* 16-bit word section relocation (012). */
+ HOWTO (R_SECTION, /* type */
+ 0, /* rightshift */
+ 1, /* size (0 = byte, 1 = short, 2 = long) */
+ 16, /* bitsize */
+ false, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield, /* complain_on_overflow */
+ coff_i386_reloc, /* special_function */
+ "secidx", /* name */
+ true, /* partial_inplace */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ true), /* pcrel_offset */
/* 32-bit longword section relative relocation (013). */
HOWTO (R_SECREL32, /* type */
0, /* rightshift */
@@ -253,6 +268,7 @@ static reloc_howto_type howto_table[] =
0xffffffff, /* dst_mask */
true), /* pcrel_offset */
#else
+ EMPTY_HOWTO (012),
EMPTY_HOWTO (013),
#endif
EMPTY_HOWTO (014),
@@ -407,9 +423,9 @@ static reloc_howto_type howto_table[] =
#else /* COFF_WITH_PE */
-/* The PE relocate section routine. The only difference between this
- and the regular routine is that we don't want to do anything for a
- relocatable link. */
+/* The PE relocate section routine. We handle secidx relocations here,
+ as well as making sure that we don't do anything for a relocatable
+ link. */
static bool
coff_pe_i386_relocate_section (bfd *output_bfd,
@@ -421,9 +437,78 @@ coff_pe_i386_relocate_section (bfd *output_bfd,
struct internal_syment *syms,
asection **sections)
{
+ struct internal_reloc *rel;
+ struct internal_reloc *relend;
+
if (bfd_link_relocatable (info))
return true;
+ rel = relocs;
+ relend = rel + input_section->reloc_count;
+
+ for (; rel < relend; rel++)
+ {
+ long symndx;
+ struct coff_link_hash_entry *h;
+ asection *sec, *s;
+ uint16_t idx = 0, i = 1;
+
+ if (rel->r_type != R_SECTION)
+ continue;
+
+ /* Make sure that _bfd_coff_generic_relocate_section won't parse
+ this reloc after us. */
+ rel->r_type = 0;
+
+ symndx = rel->r_symndx;
+
+ if (symndx < 0
+ || (unsigned long) symndx >= obj_raw_syment_count (input_bfd))
+ continue;
+
+ h = obj_coff_sym_hashes (input_bfd)[symndx];
+
+ if (h == NULL)
+ sec = sections[symndx];
+ else
+ {
+ if (h->root.type == bfd_link_hash_defined
+ || h->root.type == bfd_link_hash_defweak)
+ {
+ /* Defined weak symbols are a GNU extension. */
+ sec = h->root.u.def.section;
+ }
+ else
+ {
+ sec = NULL;
+ }
+ }
+
+ if (!sec)
+ continue;
+
+ if (bfd_is_abs_section (sec))
+ continue;
+
+ if (discarded_section (sec))
+ continue;
+
+ s = output_bfd->sections;
+ while (s)
+ {
+ if (s == sec->output_section)
+ {
+ idx = i;
+ break;
+ }
+
+ i++;
+ s = s->next;
+ }
+
+ bfd_putl16 (idx, contents + rel->r_vaddr - input_section->vma);
+ }
+
return _bfd_coff_generic_relocate_section (output_bfd, info, input_bfd,
input_section, contents,
relocs, syms, sections);
@@ -573,6 +658,8 @@ coff_i386_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
#ifdef COFF_WITH_PE
case BFD_RELOC_32_SECREL:
return howto_table + R_SECREL32;
+ case BFD_RELOC_16_SECIDX:
+ return howto_table + R_SECTION;
#endif
default:
BFD_FAIL ();
diff --git a/bfd/coff-rs6000.c b/bfd/coff-rs6000.c
index 97e84a443b0..8819187ab42 100644
--- a/bfd/coff-rs6000.c
+++ b/bfd/coff-rs6000.c
@@ -2937,7 +2937,8 @@ xcoff_reloc_type_noop (bfd *input_bfd ATTRIBUTE_UNUSED,
bfd_vma val ATTRIBUTE_UNUSED,
bfd_vma addend ATTRIBUTE_UNUSED,
bfd_vma *relocation ATTRIBUTE_UNUSED,
- bfd_byte *contents ATTRIBUTE_UNUSED)
+ bfd_byte *contents ATTRIBUTE_UNUSED,
+ struct bfd_link_info *info ATTRIBUTE_UNUSED)
{
return true;
}
@@ -2952,7 +2953,8 @@ xcoff_reloc_type_fail (bfd *input_bfd,
bfd_vma val ATTRIBUTE_UNUSED,
bfd_vma addend ATTRIBUTE_UNUSED,
bfd_vma *relocation ATTRIBUTE_UNUSED,
- bfd_byte *contents ATTRIBUTE_UNUSED)
+ bfd_byte *contents ATTRIBUTE_UNUSED,
+ struct bfd_link_info *info ATTRIBUTE_UNUSED)
{
_bfd_error_handler
/* xgettext: c-format */
@@ -2972,7 +2974,8 @@ xcoff_reloc_type_pos (bfd *input_bfd ATTRIBUTE_UNUSED,
bfd_vma val,
bfd_vma addend,
bfd_vma *relocation,
- bfd_byte *contents ATTRIBUTE_UNUSED)
+ bfd_byte *contents ATTRIBUTE_UNUSED,
+ struct bfd_link_info *info ATTRIBUTE_UNUSED)
{
*relocation = val + addend;
return true;
@@ -2988,7 +2991,8 @@ xcoff_reloc_type_neg (bfd *input_bfd ATTRIBUTE_UNUSED,
bfd_vma val,
bfd_vma addend,
bfd_vma *relocation,
- bfd_byte *contents ATTRIBUTE_UNUSED)
+ bfd_byte *contents ATTRIBUTE_UNUSED,
+ struct bfd_link_info *info ATTRIBUTE_UNUSED)
{
*relocation = - val - addend;
return true;
@@ -3004,7 +3008,8 @@ xcoff_reloc_type_rel (bfd *input_bfd ATTRIBUTE_UNUSED,
bfd_vma val,
bfd_vma addend,
bfd_vma *relocation,
- bfd_byte *contents ATTRIBUTE_UNUSED)
+ bfd_byte *contents ATTRIBUTE_UNUSED,
+ struct bfd_link_info *info ATTRIBUTE_UNUSED)
{
howto->pc_relative = true;
@@ -3027,7 +3032,8 @@ xcoff_reloc_type_toc (bfd *input_bfd,
bfd_vma val,
bfd_vma addend ATTRIBUTE_UNUSED,
bfd_vma *relocation,
- bfd_byte *contents ATTRIBUTE_UNUSED)
+ bfd_byte *contents ATTRIBUTE_UNUSED,
+ struct bfd_link_info *info ATTRIBUTE_UNUSED)
{
struct xcoff_link_hash_entry *h;
@@ -3076,7 +3082,8 @@ xcoff_reloc_type_ba (bfd *input_bfd ATTRIBUTE_UNUSED,
bfd_vma val,
bfd_vma addend,
bfd_vma *relocation,
- bfd_byte *contents ATTRIBUTE_UNUSED)
+ bfd_byte *contents ATTRIBUTE_UNUSED,
+ struct bfd_link_info *info ATTRIBUTE_UNUSED)
{
howto->src_mask &= ~3;
howto->dst_mask = howto->src_mask;
@@ -3096,10 +3103,13 @@ xcoff_reloc_type_br (bfd *input_bfd,
bfd_vma val,
bfd_vma addend,
bfd_vma *relocation,
- bfd_byte *contents)
+ bfd_byte *contents,
+ struct bfd_link_info *info)
{
struct xcoff_link_hash_entry *h;
bfd_vma section_offset;
+ struct xcoff_stub_hash_entry *stub_entry = NULL;
+ enum xcoff_stub_type stub_type;
if (0 > rel->r_symndx)
return false;
@@ -3153,6 +3163,27 @@ xcoff_reloc_type_br (bfd *input_bfd,
howto->complain_on_overflow = complain_overflow_dont;
}
+ /* Check if a stub is needed. */
+ stub_type = bfd_xcoff_type_of_stub (input_section, rel, val, h);
+ if (stub_type != xcoff_stub_none)
+ {
+ asection *stub_csect;
+
+ stub_entry = bfd_xcoff_get_stub_entry (input_section, h, info);
+ if (stub_entry == NULL)
+ {
+ _bfd_error_handler (_("Unable to find the stub entry targeting %s"),
+ h->root.root.string);
+ bfd_set_error (bfd_error_bad_value);
+ return false;
+ }
+
+ stub_csect = stub_entry->hcsect->root.u.def.section;
+ val = (stub_entry->stub_offset
+ + stub_csect->output_section->vma
+ + stub_csect->output_offset);
+ }
+
/* The original PC-relative relocation is biased by -r_vaddr, so adding
the value below will give the absolute target address. */
*relocation = val + addend + rel->r_vaddr;
@@ -3202,7 +3233,8 @@ xcoff_reloc_type_crel (bfd *input_bfd ATTRIBUTE_UNUSED,
bfd_vma val ATTRIBUTE_UNUSED,
bfd_vma addend,
bfd_vma *relocation,
- bfd_byte *contents ATTRIBUTE_UNUSED)
+ bfd_byte *contents ATTRIBUTE_UNUSED,
+ struct bfd_link_info *info ATTRIBUTE_UNUSED)
{
howto->pc_relative = true;
howto->src_mask &= ~3;
@@ -3227,7 +3259,8 @@ xcoff_reloc_type_tls (bfd *input_bfd ATTRIBUTE_UNUSED,
bfd_vma val,
bfd_vma addend,
bfd_vma *relocation,
- bfd_byte *contents ATTRIBUTE_UNUSED)
+ bfd_byte *contents ATTRIBUTE_UNUSED,
+ struct bfd_link_info *info ATTRIBUTE_UNUSED)
{
struct xcoff_link_hash_entry *h;
@@ -3763,7 +3796,7 @@ xcoff_ppc_relocate_section (bfd *output_bfd,
if (rel->r_type >= XCOFF_MAX_CALCULATE_RELOCATION
|| !((*xcoff_calculate_relocation[rel->r_type])
(input_bfd, input_section, output_bfd, rel, sym, &howto, val,
- addend, &relocation, contents)))
+ addend, &relocation, contents, info)))
return false;
/* address */
@@ -3881,8 +3914,8 @@ _bfd_xcoff_put_ldsymbol_name (bfd *abfd ATTRIBUTE_UNUSED,
ldinfo->strings = newstrings;
}
- bfd_put_16 (ldinfo->output_bfd, (bfd_vma) (len + 1),
- ldinfo->strings + ldinfo->string_size);
+ ldinfo->strings[ldinfo->string_size] = ((len + 1) >> 8) & 0xff;
+ ldinfo->strings[ldinfo->string_size + 1] = ((len + 1)) & 0xff;
strcpy (ldinfo->strings + ldinfo->string_size + 2, name);
ldsym->_l._l_l._l_zeroes = 0;
ldsym->_l._l_l._l_offset = ldinfo->string_size + 2;
@@ -4281,6 +4314,34 @@ HOWTO (0, /* type */
0xffffffff, /* dst_mask */
false); /* pcrel_offset */
+/* Indirect call stub
+ The first word of the code must be modified by filling in
+ the correct TOC offset. */
+
+static const unsigned long xcoff_stub_indirect_call_code[4] =
+ {
+ 0x81820000, /* lwz r12,0(r2) */
+ 0x800c0000, /* lwz r0,0(r12) */
+ 0x7c0903a6, /* mtctr r0 */
+ 0x4e800420, /* bctr */
+ };
+
+/* Shared call stub
+ The first word of the code must be modified by filling in
+ the correct TOC offset.
+ This is exactly as the glink code but without the traceback,
+ as it won't be an independent function. */
+
+static const unsigned long xcoff_stub_shared_call_code[6] =
+ {
+ 0x81820000, /* lwz r12,0(r2) */
+ 0x90410014, /* stw r2,20(r1) */
+ 0x800c0000, /* lwz r0,0(r12) */
+ 0x804c0004, /* lwz r2,4(r12) */
+ 0x7c0903a6, /* mtctr r0 */
+ 0x4e800420, /* bctr */
+ };
+
/* glink
The first word of global linkage code must be modified by filling in
@@ -4497,6 +4558,14 @@ static const struct xcoff_backend_data_rec bfd_xcoff_backend_data =
/* rtinit */
64, /* _xcoff_rtinit_size */
xcoff_generate_rtinit,
+
+ /* Stub indirect call. */
+ &xcoff_stub_indirect_call_code[0],
+ 16, /* _xcoff_stub_indirect_call_size */
+
+ /* Stub shared call. */
+ &xcoff_stub_shared_call_code[0],
+ 24, /* _xcoff_stub_shared_call_size */
};
/* The transfer vector that leads the outside world to all of the above. */
@@ -4679,6 +4748,14 @@ static const struct xcoff_backend_data_rec bfd_pmac_xcoff_backend_data =
/* rtinit */
0, /* _xcoff_rtinit_size */
xcoff_generate_rtinit,
+
+ /* Stub indirect call. */
+ &xcoff_stub_indirect_call_code[0],
+ 16, /* _xcoff_stub_indirect_call_size */
+
+ /* Stub shared call. */
+ &xcoff_stub_shared_call_code[0],
+ 24, /* _xcoff_stub_shared_call_size */
};
/* The transfer vector that leads the outside world to all of the above. */
diff --git a/bfd/coff-x86_64.c b/bfd/coff-x86_64.c
index c2da0f4d1ae..e8e16d3ce4b 100644
--- a/bfd/coff-x86_64.c
+++ b/bfd/coff-x86_64.c
@@ -224,8 +224,10 @@ coff_amd64_reloc (bfd *abfd,
static bool
in_reloc_p (bfd *abfd ATTRIBUTE_UNUSED, reloc_howto_type *howto)
{
- return ! howto->pc_relative && howto->type != R_AMD64_IMAGEBASE
- && howto->type != R_AMD64_SECREL;
+ return ! howto->pc_relative
+ && howto->type != R_AMD64_IMAGEBASE
+ && howto->type != R_AMD64_SECREL
+ && howto->type != R_AMD64_SECTION;
}
#endif /* COFF_WITH_PE */
@@ -356,8 +358,21 @@ static reloc_howto_type howto_table[] =
0xffffffff, /* src_mask */
0xffffffff, /* dst_mask */
PCRELOFFSET), /* pcrel_offset */
- EMPTY_HOWTO (10), /* R_AMD64_SECTION 10 */
#if defined(COFF_WITH_PE)
+ /* 16-bit word section relocation (10). */
+ HOWTO (R_AMD64_SECTION, /* type */
+ 0, /* rightshift */
+ 1, /* size (0 = byte, 1 = short, 2 = long) */
+ 16, /* bitsize */
+ false, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield, /* complain_on_overflow */
+ coff_amd64_reloc, /* special_function */
+ "IMAGE_REL_AMD64_SECTION", /* name */
+ true, /* partial_inplace */
+ 0x0000ffff, /* src_mask */
+ 0x0000ffff, /* dst_mask */
+ true),
/* 32-bit longword section relative relocation (11). */
HOWTO (R_AMD64_SECREL, /* type */
0, /* rightshift */
@@ -373,6 +388,7 @@ static reloc_howto_type howto_table[] =
0xffffffff, /* dst_mask */
true), /* pcrel_offset */
#else
+ EMPTY_HOWTO (10),
EMPTY_HOWTO (11),
#endif
EMPTY_HOWTO (12),
@@ -545,9 +561,9 @@ static reloc_howto_type howto_table[] =
#else /* COFF_WITH_PE */
-/* The PE relocate section routine. The only difference between this
- and the regular routine is that we don't want to do anything for a
- relocatable link. */
+/* The PE relocate section routine. We handle secidx relocations here,
+ as well as making sure that we don't do anything for a relocatable
+ link. */
static bool
coff_pe_amd64_relocate_section (bfd *output_bfd,
@@ -559,9 +575,78 @@ coff_pe_amd64_relocate_section (bfd *output_bfd,
struct internal_syment *syms,
asection **sections)
{
+ struct internal_reloc *rel;
+ struct internal_reloc *relend;
+
if (bfd_link_relocatable (info))
return true;
+ rel = relocs;
+ relend = rel + input_section->reloc_count;
+
+ for (; rel < relend; rel++)
+ {
+ long symndx;
+ struct coff_link_hash_entry *h;
+ asection *sec, *s;
+ uint16_t idx = 0, i = 1;
+
+ if (rel->r_type != R_SECTION)
+ continue;
+
+ /* Make sure that _bfd_coff_generic_relocate_section won't parse
+ this reloc after us. */
+ rel->r_type = 0;
+
+ symndx = rel->r_symndx;
+
+ if (symndx < 0
+ || (unsigned long) symndx >= obj_raw_syment_count (input_bfd))
+ continue;
+
+ h = obj_coff_sym_hashes (input_bfd)[symndx];
+
+ if (h == NULL)
+ sec = sections[symndx];
+ else
+ {
+ if (h->root.type == bfd_link_hash_defined
+ || h->root.type == bfd_link_hash_defweak)
+ {
+ /* Defined weak symbols are a GNU extension. */
+ sec = h->root.u.def.section;
+ }
+ else
+ {
+ sec = NULL;
+ }
+ }
+
+ if (!sec)
+ continue;
+
+ if (bfd_is_abs_section (sec))
+ continue;
+
+ if (discarded_section (sec))
+ continue;
+
+ s = output_bfd->sections;
+ while (s)
+ {
+ if (s == sec->output_section)
+ {
+ idx = i;
+ break;
+ }
+
+ i++;
+ s = s->next;
+ }
+
+ bfd_putl16 (idx, contents + rel->r_vaddr - input_section->vma);
+ }
+
return _bfd_coff_generic_relocate_section (output_bfd, info, input_bfd,input_section, contents,relocs, syms, sections);
}
@@ -716,6 +801,8 @@ coff_amd64_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED, bfd_reloc_code_real_ty
#if defined(COFF_WITH_PE)
case BFD_RELOC_32_SECREL:
return howto_table + R_AMD64_SECREL;
+ case BFD_RELOC_16_SECIDX:
+ return howto_table + R_AMD64_SECTION;
#endif
default:
BFD_FAIL ();
diff --git a/bfd/coff64-rs6000.c b/bfd/coff64-rs6000.c
index 01326d4503d..2f8077ae6a2 100644
--- a/bfd/coff64-rs6000.c
+++ b/bfd/coff64-rs6000.c
@@ -623,8 +623,8 @@ _bfd_xcoff64_put_ldsymbol_name (bfd *abfd ATTRIBUTE_UNUSED,
ldinfo->strings = newstrings;
}
- bfd_put_16 (ldinfo->output_bfd, (bfd_vma) (len + 1),
- ldinfo->strings + ldinfo->string_size);
+ ldinfo->strings[ldinfo->string_size] = ((len + 1) >> 8) & 0xff;
+ ldinfo->strings[ldinfo->string_size + 1] = ((len + 1)) & 0xff;
strcpy (ldinfo->strings + ldinfo->string_size + 2, name);
ldsym->_l._l_l._l_zeroes = 0;
ldsym->_l._l_l._l_offset = ldinfo->string_size + 2;
@@ -778,10 +778,13 @@ xcoff64_reloc_type_br (bfd *input_bfd,
bfd_vma val,
bfd_vma addend,
bfd_vma *relocation,
- bfd_byte *contents)
+ bfd_byte *contents,
+ struct bfd_link_info *info)
{
struct xcoff_link_hash_entry *h;
bfd_vma section_offset;
+ struct xcoff_stub_hash_entry *stub_entry = NULL;
+ enum xcoff_stub_type stub_type;
if (0 > rel->r_symndx)
return false;
@@ -833,6 +836,27 @@ xcoff64_reloc_type_br (bfd *input_bfd,
howto->complain_on_overflow = complain_overflow_dont;
}
+ /* Check if a stub is needed. */
+ stub_type = bfd_xcoff_type_of_stub (input_section, rel, val, h);
+ if (stub_type != xcoff_stub_none)
+ {
+ asection *stub_csect;
+
+ stub_entry = bfd_xcoff_get_stub_entry (input_section, h, info);
+ if (stub_entry == NULL)
+ {
+ _bfd_error_handler (_("Unable to find the stub entry targeting %s"),
+ h->root.root.string);
+ bfd_set_error (bfd_error_bad_value);
+ return false;
+ }
+
+ stub_csect = stub_entry->hcsect->root.u.def.section;
+ val = (stub_entry->stub_offset
+ + stub_csect->output_section->vma
+ + stub_csect->output_offset);
+ }
+
/* The original PC-relative relocation is biased by -r_vaddr, so adding
the value below will give the absolute target address. */
*relocation = val + addend + rel->r_vaddr;
@@ -1645,7 +1669,7 @@ xcoff64_ppc_relocate_section (bfd *output_bfd,
if (rel->r_type >= XCOFF_MAX_CALCULATE_RELOCATION
|| !((*xcoff64_calculate_relocation[rel->r_type])
(input_bfd, input_section, output_bfd, rel, sym, &howto, val,
- addend, &relocation, contents)))
+ addend, &relocation, contents, info)))
return false;
/* address */
@@ -2386,12 +2410,32 @@ HOWTO (0, /* type */
MINUS_ONE, /* dst_mask */
false); /* pcrel_offset */
+/* Indirect call stub */
+static const unsigned long xcoff64_stub_indirect_call_code[4] =
+ {
+ 0xe9820000, /* ld r12,0(r2) */
+ 0xe80c0000, /* ld r0,0(r12) */
+ 0x7c0903a6, /* mtctr r0 */
+ 0x4e800420, /* bctr */
+ };
+
+/* Shared call stub */
+static const unsigned long xcoff64_stub_shared_call_code[6] =
+ {
+ 0xe9820000, /* ld r12,0(r2) */
+ 0xf8410028, /* std r2,40(r1) */
+ 0xe80c0000, /* ld r0,0(r12) */
+ 0xe84c0008, /* ld r2,8(r12) */
+ 0x7c0903a6, /* mtctr r0 */
+ 0x4e800420, /* bctr */
+ };
+
static const unsigned long xcoff64_glink_code[10] =
{
0xe9820000, /* ld r12,0(r2) */
0xf8410028, /* std r2,40(r1) */
0xe80c0000, /* ld r0,0(r12) */
- 0xe84c0008, /* ld r0,8(r12) */
+ 0xe84c0008, /* ld r2,8(r12) */
0x7c0903a6, /* mtctr r0 */
0x4e800420, /* bctr */
0x00000000, /* start of traceback table */
@@ -2495,6 +2539,14 @@ static const struct xcoff_backend_data_rec bfd_xcoff_backend_data =
/* rtinit. */
88, /* _xcoff_rtinit_size */
xcoff64_generate_rtinit,
+
+ /* Stub indirect call. */
+ &xcoff64_stub_indirect_call_code[0],
+ 16, /* _xcoff_stub_indirect_call_size */
+
+ /* Stub shared call. */
+ &xcoff64_stub_shared_call_code[0],
+ 24, /* _xcoff_stub_shared_call_size */
};
/* The transfer vector that leads the outside world to all of the above. */
@@ -2759,6 +2811,14 @@ static const struct xcoff_backend_data_rec bfd_xcoff_aix5_backend_data =
/* rtinit. */
88, /* _xcoff_rtinit_size */
xcoff64_generate_rtinit,
+
+ /* Stub indirect call. */
+ &xcoff64_stub_indirect_call_code[0],
+ 16, /* _xcoff_stub_indirect_call_size */
+
+ /* Stub shared call. */
+ &xcoff64_stub_shared_call_code[0],
+ 24, /* _xcoff_stub_shared_call_size */
};
/* The transfer vector that leads the outside world to all of the above. */
diff --git a/bfd/coffcode.h b/bfd/coffcode.h
index d45b37d305c..31bd97542d0 100644
--- a/bfd/coffcode.h
+++ b/bfd/coffcode.h
@@ -3994,8 +3994,13 @@ coff_write_object_contents (bfd * abfd)
#endif
}
+#ifdef RS6000COFF_C
+ /* XCOFF 32bit needs this to have new behaviour for n_type field. */
+ internal_a.vstamp = 2;
+#else
/* FIXME: Does anybody ever set this to another value? */
internal_a.vstamp = 0;
+#endif
/* Now should write relocs, strings, syms. */
obj_sym_filepos (abfd) = sym_base;
@@ -4070,7 +4075,7 @@ coff_write_object_contents (bfd * abfd)
bfd_vma toc;
asection *loader_sec;
- internal_a.vstamp = 1;
+ internal_a.vstamp = 2;
internal_a.o_snentry = xcoff_data (abfd)->snentry;
if (internal_a.o_snentry == 0)
diff --git a/bfd/coffgen.c b/bfd/coffgen.c
index 6087a958734..57f380a6425 100644
--- a/bfd/coffgen.c
+++ b/bfd/coffgen.c
@@ -1092,6 +1092,7 @@ coff_write_alien_symbol (bfd *abfd,
memset (isym, 0, sizeof (*isym));
return true;
}
+ memset (dummy, 0, sizeof dummy);
native = dummy;
native->is_sym = true;
native[1].is_sym = false;
@@ -2185,7 +2186,7 @@ coff_print_symbol (bfd *abfd,
- (bfd_hostptr_t) root)
/ sizeof (combined_entry_type));
- fprintf (file, "(sec %2d)(fl 0x%02x)(ty %3x)(scl %3d) (nx %d) 0x",
+ fprintf (file, "(sec %2d)(fl 0x%02x)(ty %4x)(scl %3d) (nx %d) 0x",
combined->u.syment.n_scnum,
combined->u.syment.n_flags,
combined->u.syment.n_type,
@@ -2381,7 +2382,7 @@ coff_find_nearest_line_with_names (bfd *abfd,
}
if (sec_data != NULL && sec_data->saved_bias)
- bias = sec_data->saved_bias;
+ bias = sec_data->bias;
else if (symbols)
{
bias = _bfd_dwarf2_find_symbol_bias (symbols,
diff --git a/bfd/config.bfd b/bfd/config.bfd
index cfe58247882..2a6aec28036 100644
--- a/bfd/config.bfd
+++ b/bfd/config.bfd
@@ -48,8 +48,6 @@ targ_underscore=no
# Catch obsolete configurations.
case $targ in
- m32c-*-rtems* | \
- ns32k-*-netbsd* | \
null)
if test "x$enable_obsolete" != xyes; then
echo "*** Configuration $targ is obsolete." >&2
@@ -66,7 +64,7 @@ case $targ in
# Explicit, no defaulting
;;
ns32k-*-netbsd*)
- # The obsolete warning is enough, and ns32k does not have ELF support
+ # The obsolete warning below is enough, and ns32k does not have ELF support
;;
*-*-netbsd* )
targ_migrated=`echo "$targ" | sed 's/netbsd/netbsdaout/'`
@@ -154,6 +152,8 @@ case $targ in
mips*-dec-* | \
mips*-sgi-* | \
mips*el-*-rtems* | \
+ m32c-*-rtems* | \
+ ns32k-*-netbsd* | \
openrisc-*-* | \
or32-*-* | \
powerpc-*-lynxos* | powerpc-*-windiss* | \
@@ -171,8 +171,8 @@ case $targ in
we32k-*-* | \
xc16x-*-* | \
null)
- echo "*** Configuration $targ is obsolete." >&2
- echo "*** Support has been REMOVED." >&2
+ echo "*** Configuration $targ is now obsolete" >&2
+ echo "*** and so support for it has been REMOVED." >&2
exit 1
;;
esac
@@ -184,6 +184,7 @@ alpha*) targ_archs=bfd_alpha_arch ;;
am33_2.0*) targ_archs=bfd_mn10300_arch ;;
arc*) targ_archs=bfd_arc_arch ;;
arm*) targ_archs=bfd_arm_arch ;;
+amdgcn*) targ_archs=bfd_amdgcn_arch ;;
bfin*) targ_archs=bfd_bfin_arch ;;
c30*) targ_archs=bfd_tic30_arch ;;
c4x*) targ_archs=bfd_tic4x_arch ;;
@@ -321,6 +322,10 @@ case "${targ}" in
targ_defvec=alpha_ecoff_le_vec
want64=true
;;
+ amdgcn-*-*)
+ targ_defvec=amdgcn_elf64_le_vec
+ want64=true
+ ;;
ia64*-*-freebsd* | ia64*-*-netbsd* | ia64*-*-linux-* | ia64*-*-elf* | ia64*-*-kfreebsd*-gnu)
targ_defvec=ia64_elf64_le_vec
targ_selvecs="ia64_elf64_be_vec ia64_pei_vec"
@@ -455,7 +460,6 @@ case "${targ}" in
targ_underscore=yes
;;
-#ifdef BFD64
cris-*-* | crisv32-*-*)
targ_defvec=cris_aout_vec
targ_selvecs="cris_elf32_us_vec cris_elf32_vec"
@@ -465,7 +469,6 @@ case "${targ}" in
esac
want64=true
;;
-#endif
crx-*-elf*)
targ_defvec=crx_elf32_vec
@@ -585,13 +588,13 @@ case "${targ}" in
i[3-7]86-*-solaris2*)
targ_defvec=i386_elf32_sol2_vec
targ_selvecs="iamcu_elf32_vec i386_coff_vec i386_pei_vec"
- targ64_selvecs="x86_64_elf64_sol2_vec l1om_elf64_vec k1om_elf64_vec x86_64_pe_vec x86_64_pei_vec"
+ targ64_selvecs="x86_64_elf64_sol2_vec x86_64_pe_vec x86_64_pei_vec"
want64=true
;;
#ifdef BFD64
x86_64-*-solaris2*)
targ_defvec=i386_elf32_sol2_vec
- targ_selvecs="x86_64_elf64_sol2_vec l1om_elf64_vec k1om_elf64_vec iamcu_elf32_vec i386_coff_vec i386_pei_vec x86_64_pe_vec x86_64_pei_vec"
+ targ_selvecs="x86_64_elf64_sol2_vec iamcu_elf32_vec i386_coff_vec i386_pei_vec x86_64_pe_vec x86_64_pei_vec"
want64=true
;;
#endif
@@ -606,7 +609,7 @@ case "${targ}" in
i[3-7]86-*-dicos*)
targ_defvec=i386_elf32_vec
targ_selvecs=iamcu_elf32_vec
- targ64_selvecs="x86_64_elf64_vec l1om_elf64_vec k1om_elf64_vec"
+ targ64_selvecs="x86_64_elf64_vec"
;;
*-*-msdosdjgpp* | *-*-go32* )
targ_defvec=i386_coff_go32_vec
@@ -625,12 +628,12 @@ case "${targ}" in
i[3-7]86-*-dragonfly*)
targ_defvec=i386_elf32_vec
targ_selvecs=iamcu_elf32_vec
- targ64_selvecs="x86_64_elf64_vec l1om_elf64_vec k1om_elf64_vec"
+ targ64_selvecs="x86_64_elf64_vec"
;;
i[3-7]86-*-freebsd* | i[3-7]86-*-kfreebsd*-gnu)
targ_defvec=i386_elf32_fbsd_vec
targ_selvecs="i386_elf32_vec iamcu_elf32_vec i386_pei_vec i386_coff_vec"
- targ64_selvecs="x86_64_elf64_fbsd_vec x86_64_elf64_vec x86_64_pe_vec x86_64_pei_vec l1om_elf64_vec l1om_elf64_fbsd_vec k1om_elf64_vec k1om_elf64_fbsd_vec"
+ targ64_selvecs="x86_64_elf64_fbsd_vec x86_64_elf64_vec x86_64_pe_vec x86_64_pei_vec"
# FreeBSD <= 4.0 supports only the old nonstandard way of ABI labelling.
case "${targ}" in
i[3-7]86-*-freebsd3* | i[3-7]86-*-freebsd4 | i[3-7]86-*-freebsd4.0*)
@@ -640,7 +643,7 @@ case "${targ}" in
i[3-7]86-*-netbsd* | i[3-7]86-*-knetbsd*-gnu)
targ_defvec=i386_elf32_vec
targ_selvecs="iamcu_elf32_vec"
- targ64_selvecs="x86_64_elf64_vec l1om_elf64_vec k1om_elf64_vec"
+ targ64_selvecs="x86_64_elf64_vec"
;;
i[3-7]86-*-openbsd*)
targ_defvec=i386_elf32_vec
@@ -649,7 +652,7 @@ case "${targ}" in
i[3-7]86-*-linux-*)
targ_defvec=i386_elf32_vec
targ_selvecs="iamcu_elf32_vec i386_pei_vec"
- targ64_selvecs="x86_64_elf64_vec x86_64_elf32_vec x86_64_pe_vec x86_64_pei_vec l1om_elf64_vec k1om_elf64_vec"
+ targ64_selvecs="x86_64_elf64_vec x86_64_elf32_vec x86_64_pe_vec x86_64_pei_vec"
;;
i[3-7]86-*-redox*)
targ_defvec=i386_elf32_vec
@@ -669,12 +672,12 @@ case "${targ}" in
;;
x86_64-*-dicos*)
targ_defvec=x86_64_elf64_vec
- targ_selvecs="i386_elf32_vec iamcu_elf32_vec l1om_elf64_vec k1om_elf64_vec"
+ targ_selvecs="i386_elf32_vec iamcu_elf32_vec"
want64=true
;;
x86_64-*-elf* | x86_64-*-rtems* | x86_64-*-fuchsia | x86_64-*-genode*)
targ_defvec=x86_64_elf64_vec
- targ_selvecs="i386_elf32_vec iamcu_elf32_vec x86_64_elf32_vec l1om_elf64_vec k1om_elf64_vec"
+ targ_selvecs="i386_elf32_vec iamcu_elf32_vec x86_64_elf32_vec"
case "${targ}" in
x86_64-*-rtems*)
targ_selvecs="${targ_selvecs} x86_64_pe_vec x86_64_pei_vec"
@@ -683,12 +686,12 @@ case "${targ}" in
;;
x86_64-*-dragonfly*)
targ_defvec=x86_64_elf64_vec
- targ_selvecs="i386_elf32_vec iamcu_elf32_vec l1om_elf64_vec k1om_elf64_vec"
+ targ_selvecs="i386_elf32_vec iamcu_elf32_vec"
want64=true
;;
x86_64-*-freebsd* | x86_64-*-kfreebsd*-gnu)
targ_defvec=x86_64_elf64_fbsd_vec
- targ_selvecs="i386_elf32_fbsd_vec iamcu_elf32_vec i386_coff_vec i386_pei_vec x86_64_pe_vec x86_64_pei_vec i386_elf32_vec x86_64_elf64_vec l1om_elf64_vec l1om_elf64_fbsd_vec k1om_elf64_vec k1om_elf64_fbsd_vec"
+ targ_selvecs="i386_elf32_fbsd_vec iamcu_elf32_vec i386_coff_vec i386_pei_vec x86_64_pe_vec x86_64_pei_vec i386_elf32_vec x86_64_elf64_vec"
want64=true
;;
x86_64-*-haiku*)
@@ -698,17 +701,17 @@ case "${targ}" in
;;
x86_64-*-netbsd* | x86_64-*-openbsd*)
targ_defvec=x86_64_elf64_vec
- targ_selvecs="i386_elf32_vec iamcu_elf32_vec i386_coff_vec i386_pei_vec x86_64_pe_vec x86_64_pei_vec l1om_elf64_vec k1om_elf64_vec"
+ targ_selvecs="i386_elf32_vec iamcu_elf32_vec i386_coff_vec i386_pei_vec x86_64_pe_vec x86_64_pei_vec"
want64=true
;;
x86_64-*-linux-*)
targ_defvec=x86_64_elf64_vec
- targ_selvecs="i386_elf32_vec iamcu_elf32_vec x86_64_elf32_vec i386_pei_vec x86_64_pe_vec x86_64_pei_vec l1om_elf64_vec k1om_elf64_vec"
+ targ_selvecs="i386_elf32_vec iamcu_elf32_vec x86_64_elf32_vec i386_pei_vec x86_64_pe_vec x86_64_pei_vec"
want64=true
;;
x86_64-*-mingw* | x86_64-*-pe | x86_64-*-pep | x86_64-*-cygwin)
targ_defvec=x86_64_pe_vec
- targ_selvecs="x86_64_pe_vec x86_64_pei_vec x86_64_pe_big_vec x86_64_elf64_vec l1om_elf64_vec k1om_elf64_vec i386_pe_vec i386_pei_vec i386_elf32_vec iamcu_elf32_vec"
+ targ_selvecs="x86_64_pe_vec x86_64_pei_vec x86_64_pe_big_vec x86_64_elf64_vec i386_pe_vec i386_pei_vec i386_elf32_vec iamcu_elf32_vec"
want64=true
targ_underscore=no
;;
@@ -748,6 +751,7 @@ case "${targ}" in
;;
i[3-7]86-*-haiku*)
targ_defvec=i386_elf32_vec
+ targ_selvecs="i386_pei_vec"
;;
i[3-7]86-*-interix*)
targ_defvec=i386_pei_vec
@@ -1520,17 +1524,3 @@ case "${targ_defvec} ${targ_selvecs}" in
targ_archs="$targ_archs bfd_iamcu_arch"
;;
esac
-
-# If we support Intel L1OM target, then add support for bfd_l1om_arch.
-case "${targ_defvec} ${targ_selvecs}" in
- *l1om_elf64*)
- targ_archs="$targ_archs bfd_l1om_arch"
- ;;
-esac
-
-# If we support Intel K1OM target, then add support for bfd_k1om_arch.
-case "${targ_defvec} ${targ_selvecs}" in
- *k1om_elf64*)
- targ_archs="$targ_archs bfd_k1om_arch"
- ;;
-esac
diff --git a/bfd/configure b/bfd/configure
index b09702f26e1..ee2bbe69c87 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.69 for bfd 2.37.50.
+# Generated by GNU Autoconf 2.69 for bfd 2.38.50.
#
#
# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
@@ -587,8 +587,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='bfd'
PACKAGE_TARNAME='bfd'
-PACKAGE_VERSION='2.37.50'
-PACKAGE_STRING='bfd 2.37.50'
+PACKAGE_VERSION='2.38.50'
+PACKAGE_STRING='bfd 2.38.50'
PACKAGE_BUGREPORT=''
PACKAGE_URL=''
@@ -1395,7 +1395,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.37.50 to adapt to many kinds of systems.
+\`configure' configures bfd 2.38.50 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1466,7 +1466,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of bfd 2.37.50:";;
+ short | recursive ) echo "Configuration of bfd 2.38.50:";;
esac
cat <<\_ACEOF
@@ -1594,7 +1594,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-bfd configure 2.37.50
+bfd configure 2.38.50
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2188,7 +2188,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.37.50, which was
+It was created by bfd $as_me 2.38.50, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -3170,7 +3170,7 @@ fi
# Define the identity of the package.
PACKAGE='bfd'
- VERSION='2.37.50'
+ VERSION='2.38.50'
cat >>confdefs.h <<_ACEOF
@@ -5409,25 +5409,31 @@ else
lt_nm_to_check="$lt_nm_to_check nm"
fi
fi
- for lt_tmp_nm in $lt_nm_to_check; do
+ for lt_tmp_nm in "$lt_nm_to_check"; do
lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
IFS="$lt_save_ifs"
test -z "$ac_dir" && ac_dir=.
- case "$lt_tmp_nm" in
+ # Strip out any user-provided options from the nm to test twice,
+ # the first time to test to see if nm (rather than its options) has
+ # an explicit path, the second time to yield a file which can be
+ # nm'ed itself.
+ tmp_nm_path="`$ECHO "$lt_tmp_nm" | sed 's, -.*$,,'`"
+ case "$tmp_nm_path" in
*/*|*\\*) tmp_nm="$lt_tmp_nm";;
*) tmp_nm="$ac_dir/$lt_tmp_nm";;
esac
- if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+ tmp_nm_to_nm="`$ECHO "$tmp_nm" | sed 's, -.*$,,'`"
+ if test -f "$tmp_nm_to_nm" || test -f "$tmp_nm_to_nm$ac_exeext" ; then
# Check to see if the nm accepts a BSD-compat flag.
# Adding the `sed 1q' prevents false positives on HP-UX, which says:
# nm: unknown option "B" ignored
- case `"$tmp_nm" -B "$tmp_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
+ case `"$tmp_nm" -B "$tmp_nm_to_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
*$tmp_nm*) lt_cv_path_NM="$tmp_nm -B"
break
;;
*)
- case `"$tmp_nm" -p "$tmp_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
+ case `"$tmp_nm" -p "$tmp_nm_to_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
*$tmp_nm*)
lt_cv_path_NM="$tmp_nm -p"
break
@@ -11086,7 +11092,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11089 "configure"
+#line 11095 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -11192,7 +11198,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11195 "configure"
+#line 11201 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -13364,6 +13370,7 @@ do
alpha_vms_vec) tb="$tb vms-alpha.lo vms-misc.lo vms-lib.lo"; target_size=64 ;;
alpha_vms_lib_txt_vec) tb="$tb vms-lib.lo vms-misc.lo" ;;
am33_elf32_linux_vec) tb="$tb elf32-am33lin.lo elf32.lo $elf" ;;
+ amdgcn_elf64_le_vec) tb="$tb elf64-amdgcn.lo elf64.lo $elf"; target_size=64 ;;
aout0_be_vec) tb="$tb aout0.lo aout32.lo" ;;
aout64_vec) tb="$tb demo64.lo aout64.lo"; target_size=64 ;;
aout_vec) tb="$tb host-aout.lo aout32.lo" ;;
@@ -13443,10 +13450,6 @@ do
ia64_pei_vec) tb="$tb pei-ia64.lo pepigen.lo $coff"; target_size=64 ;;
ip2k_elf32_vec) tb="$tb elf32-ip2k.lo elf32.lo $elf" ;;
iq2000_elf32_vec) tb="$tb elf32-iq2000.lo elf32.lo $elf" ;;
- k1om_elf64_vec) tb="$tb elf64-x86-64.lo elfxx-x86.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;;
- k1om_elf64_fbsd_vec) tb="$tb elf64-x86-64.lo elfxx-x86.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;;
- l1om_elf64_vec) tb="$tb elf64-x86-64.lo elfxx-x86.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;;
- l1om_elf64_fbsd_vec) tb="$tb elf64-x86-64.lo elfxx-x86.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;;
lm32_elf32_vec) tb="$tb elf32-lm32.lo elf32.lo $elf" ;;
lm32_elf32_fdpic_vec) tb="$tb elf32-lm32.lo elf32.lo $elf" ;;
loongarch_elf32_vec) tb="$tb elf32-loongarch.lo elfxx-loongarch.lo elf32.lo elf-ifunc.lo $elf" ;;
@@ -15094,8 +15097,7 @@ $as_echo "#define USE_MMAP 1" >>confdefs.h
;;
esac
-rm -f doc/config.status
-ac_config_files="$ac_config_files Makefile doc/Makefile bfd-in3.h:bfd-in2.h po/Makefile.in:po/Make-in"
+ac_config_files="$ac_config_files Makefile bfd-in3.h:bfd-in2.h po/Makefile.in:po/Make-in"
ac_config_commands="$ac_config_commands default"
@@ -15656,7 +15658,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.37.50, which was
+This file was extended by bfd $as_me 2.38.50, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -15722,7 +15724,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-bfd config.status 2.37.50
+bfd config.status 2.38.50
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
@@ -16124,7 +16126,6 @@ do
"config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h:config.in" ;;
"default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;;
"Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
- "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
"bfd-in3.h") CONFIG_FILES="$CONFIG_FILES bfd-in3.h:bfd-in2.h" ;;
"po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in:po/Make-in" ;;
"default") CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;;
diff --git a/bfd/configure.ac b/bfd/configure.ac
index a9078965c40..8004c3ef4bf 100644
--- a/bfd/configure.ac
+++ b/bfd/configure.ac
@@ -443,6 +443,7 @@ do
alpha_vms_vec) tb="$tb vms-alpha.lo vms-misc.lo vms-lib.lo"; target_size=64 ;;
alpha_vms_lib_txt_vec) tb="$tb vms-lib.lo vms-misc.lo" ;;
am33_elf32_linux_vec) tb="$tb elf32-am33lin.lo elf32.lo $elf" ;;
+ amdgcn_elf64_le_vec) tb="$tb elf64-amdgcn.lo elf64.lo $elf"; target_size=64 ;;
aout0_be_vec) tb="$tb aout0.lo aout32.lo" ;;
aout64_vec) tb="$tb demo64.lo aout64.lo"; target_size=64 ;;
aout_vec) tb="$tb host-aout.lo aout32.lo" ;;
@@ -522,10 +523,6 @@ do
ia64_pei_vec) tb="$tb pei-ia64.lo pepigen.lo $coff"; target_size=64 ;;
ip2k_elf32_vec) tb="$tb elf32-ip2k.lo elf32.lo $elf" ;;
iq2000_elf32_vec) tb="$tb elf32-iq2000.lo elf32.lo $elf" ;;
- k1om_elf64_vec) tb="$tb elf64-x86-64.lo elfxx-x86.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;;
- k1om_elf64_fbsd_vec) tb="$tb elf64-x86-64.lo elfxx-x86.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;;
- l1om_elf64_vec) tb="$tb elf64-x86-64.lo elfxx-x86.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;;
- l1om_elf64_fbsd_vec) tb="$tb elf64-x86-64.lo elfxx-x86.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;;
lm32_elf32_vec) tb="$tb elf32-lm32.lo elf32.lo $elf" ;;
lm32_elf32_fdpic_vec) tb="$tb elf32-lm32.lo elf32.lo $elf" ;;
loongarch_elf32_vec) tb="$tb elf32-loongarch.lo elfxx-loongarch.lo elf32.lo elf-ifunc.lo $elf" ;;
@@ -1103,8 +1100,7 @@ case ${want_mmap}+${ac_cv_func_mmap_fixed_mapped} in
true+yes ) AC_DEFINE(USE_MMAP, 1, [Use mmap if it's available?]) ;;
esac
-rm -f doc/config.status
-AC_CONFIG_FILES([Makefile doc/Makefile bfd-in3.h:bfd-in2.h po/Makefile.in:po/Make-in])
+AC_CONFIG_FILES([Makefile bfd-in3.h:bfd-in2.h po/Makefile.in:po/Make-in])
dnl We need this duplication, even though we use AM_PO_SUBDIRS, because of
dnl our two separate POTFILES. Yuck.
diff --git a/bfd/cpu-amdgcn.c b/bfd/cpu-amdgcn.c
new file mode 100644
index 00000000000..ef51e660ed8
--- /dev/null
+++ b/bfd/cpu-amdgcn.c
@@ -0,0 +1,59 @@
+/* BFD support for the AMDGCN GPU architecture.
+
+ Copyright (C) 2019-2022 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, see <http://www.gnu.org/licenses/>. */
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "libbfd.h"
+
+#define N(MACHINE, PRINTABLE_NAME, DEFAULT, NEXT) \
+ { \
+ 32, /* 32 bits in a word */ \
+ 64, /* 64 bits in an address */ \
+ 8, /* 8 bits in a byte */ \
+ bfd_arch_amdgcn, \
+ MACHINE, \
+ "amdgcn", \
+ PRINTABLE_NAME, \
+ 3, /* section align power */ \
+ DEFAULT, \
+ bfd_default_compatible, \
+ bfd_default_scan, \
+ bfd_arch_default_fill, \
+ NEXT, \
+ 0 \
+ }
+
+#define NN(index) (&arch_info_struct[index])
+
+static const bfd_arch_info_type arch_info_struct[] =
+{
+ N (bfd_mach_amdgcn_gfx904, "amdgcn:gfx904", false, NN (1)),
+ N (bfd_mach_amdgcn_gfx906, "amdgcn:gfx906", false, NN (2)),
+ N (bfd_mach_amdgcn_gfx908, "amdgcn:gfx908", false, NN (3)),
+ N (bfd_mach_amdgcn_gfx90a, "amdgcn:gfx90a", false, NN (4)),
+ N (bfd_mach_amdgcn_gfx1010, "amdgcn:gfx1010", false, NN (5)),
+ N (bfd_mach_amdgcn_gfx1011, "amdgcn:gfx1011", false, NN (6)),
+ N (bfd_mach_amdgcn_gfx1012, "amdgcn:gfx1012", false, NN (7)),
+ N (bfd_mach_amdgcn_gfx1030, "amdgcn:gfx1030", false, NN (8)),
+ N (bfd_mach_amdgcn_gfx1031, "amdgcn:gfx1031", false, NN (9)),
+ N (bfd_mach_amdgcn_gfx1032, "amdgcn:gfx1032", false, NULL)
+};
+
+const bfd_arch_info_type bfd_amdgcn_arch =
+ N (bfd_mach_amdgcn_gfx900, "amdgcn:gfx900", true, NN (0));
diff --git a/bfd/cpu-k1om.c b/bfd/cpu-k1om.c
deleted file mode 100644
index 3f8aed03e97..00000000000
--- a/bfd/cpu-k1om.c
+++ /dev/null
@@ -1,37 +0,0 @@
-/* BFD support for the Intel K1OM architecture.
- Copyright (C) 2011-2022 Free Software Foundation, Inc.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#include "sysdep.h"
-#include "bfd.h"
-#include "libbfd.h"
-
-extern void *bfd_arch_i386_short_nop_fill (bfd_size_type, bool, bool);
-
-#define N(number, name, print, next) \
- { 64, 64, 8, bfd_arch_k1om, number, name, print, 3, true, \
- bfd_default_compatible, bfd_default_scan, \
- bfd_arch_i386_short_nop_fill, next, 9 }
-
-static const bfd_arch_info_type bfd_k1om_arch_intel_syntax =
- N (bfd_mach_k1om_intel_syntax, "k1om:intel", "k1om:intel", NULL);
-
-const bfd_arch_info_type bfd_k1om_arch =
- N (bfd_mach_k1om, "k1om", "k1om", &bfd_k1om_arch_intel_syntax);
-
diff --git a/bfd/cpu-l1om.c b/bfd/cpu-l1om.c
deleted file mode 100644
index 639980c67c6..00000000000
--- a/bfd/cpu-l1om.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/* BFD support for the Intel L1OM architecture.
- Copyright (C) 2009-2022 Free Software Foundation, Inc.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#include "sysdep.h"
-#include "bfd.h"
-#include "libbfd.h"
-
-extern void *bfd_arch_i386_short_nop_fill (bfd_size_type, bool, bool);
-
-#define N(number, name, print, next) \
- { 64, 64, 8, bfd_arch_l1om, number, name, print, 3, true, \
- bfd_default_compatible, bfd_default_scan, \
- bfd_arch_i386_short_nop_fill, next, 0 }
-
-static const bfd_arch_info_type bfd_l1om_arch_intel_syntax =
- N (bfd_mach_l1om_intel_syntax, "l1om:intel", "l1om:intel", NULL);
-
-const bfd_arch_info_type bfd_l1om_arch =
- N (bfd_mach_l1om, "l1om", "l1om", &bfd_l1om_arch_intel_syntax);
diff --git a/bfd/doc/Makefile.am b/bfd/doc/Makefile.am
deleted file mode 100644
index 57ea1f62018..00000000000
--- a/bfd/doc/Makefile.am
+++ /dev/null
@@ -1,217 +0,0 @@
-## Process this file with automake to generate Makefile.in
-#
-# Copyright (C) 2012-2022 Free Software Foundation, Inc.
-#
-# This file is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 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; see the file COPYING3. If not see
-# <http://www.gnu.org/licenses/>.
-#
-
-AUTOMAKE_OPTIONS = info-in-builddir no-texinfo.tex foreign
-
-DOCFILES = aoutx.texi archive.texi archures.texi \
- bfdt.texi cache.texi coffcode.texi \
- core.texi elf.texi elfcode.texi format.texi \
- libbfd.texi bfdwin.texi bfdio.texi \
- opncls.texi reloc.texi section.texi \
- syms.texi targets.texi init.texi hash.texi linker.texi \
- mmo.texi \
- bfdver.texi
-
-# SRCDOC, SRCPROT, SRCIPROT only used to sidestep Sun Make bug in interaction
-# between VPATH and suffix rules. If you use GNU Make, perhaps other Makes,
-# you don't need these three:
-SRCDOC = $(srcdir)/../aoutx.h $(srcdir)/../archive.c \
- $(srcdir)/../archures.c $(srcdir)/../bfd.c \
- $(srcdir)/../bfdio.c $(srcdir)/../bfdwin.c \
- $(srcdir)/../cache.c $(srcdir)/../coffcode.h \
- $(srcdir)/../corefile.c $(srcdir)/../elf.c \
- $(srcdir)/../elfcode.h $(srcdir)/../format.c \
- $(srcdir)/../libbfd.c $(srcdir)/../opncls.c \
- $(srcdir)/../reloc.c $(srcdir)/../section.c \
- $(srcdir)/../syms.c $(srcdir)/../targets.c \
- $(srcdir)/../hash.c $(srcdir)/../linker.c \
- $(srcdir)/../mmo.c
-
-SRCPROT = $(srcdir)/../archive.c $(srcdir)/../archures.c \
- $(srcdir)/../bfd.c $(srcdir)/../coffcode.h $(srcdir)/../corefile.c \
- $(srcdir)/../format.c $(srcdir)/../libbfd.c \
- $(srcdir)/../bfdio.c $(srcdir)/../bfdwin.c \
- $(srcdir)/../opncls.c $(srcdir)/../reloc.c \
- $(srcdir)/../section.c $(srcdir)/../syms.c \
- $(srcdir)/../targets.c $(srcdir)/../init.c
-
-SRCIPROT = $(srcdir)/../cache.c $(srcdir)/../libbfd.c \
- $(srcdir)/../bfdio.c $(srcdir)/../bfdwin.c \
- $(srcdir)/../reloc.c $(srcdir)/../cpu-h8300.c \
- $(srcdir)/../cpu-i960.c $(srcdir)/../archures.c \
- $(srcdir)/../init.c
-
-TEXIDIR = $(srcdir)/../../texinfo/fsf
-
-info_TEXINFOS = bfd.texi
-bfd_TEXINFOS = $(DOCFILES) bfdsumm.texi
-
-AM_MAKEINFOFLAGS = --no-split
-
-MKDOC = chew$(EXEEXT_FOR_BUILD)
-
-AM_CPPFLAGS = -I.. -I$(srcdir)/.. -I$(srcdir)/../../include \
- -I$(srcdir)/../../intl -I../../intl
-
-$(MKDOC): chew.stamp ; @true
-chew.stamp: $(srcdir)/chew.c
- $(CC_FOR_BUILD) -o chw$$$$$(EXEEXT_FOR_BUILD) $(CFLAGS_FOR_BUILD) \
- $(LDFLAGS_FOR_BUILD) $(H_CFLAGS) $(AM_CPPFLAGS) $(srcdir)/chew.c; \
- $(SHELL) $(srcdir)/../../move-if-change \
- chw$$$$$(EXEEXT_FOR_BUILD) $(MKDOC); \
- touch $@
-
-# We can't replace these rules with an implicit rule, because
-# makes without VPATH support couldn't find the .h files in `..'.
-
-# We do not depend on chew directly so that we can distribute the info
-# files, and permit people to rebuild them, without requiring the makeinfo
-# program. If somebody tries to rebuild info, but none of the .texi files
-# have changed, then nothing will be rebuilt.
-
-REGEN_TEXI = \
- ( \
- set -e; \
- ./$(MKDOC) -f $(srcdir)/doc.str < $< > $@.tmp; \
- texi=$@; \
- texi=$${texi%.stamp}.texi; \
- test -e $$texi || test ! -f $(srcdir)/$$texi || $(LN_S) $(srcdir)/$$texi .; \
- $(SHELL) $(srcdir)/../../move-if-change $@.tmp $$texi; \
- touch $@; \
- )
-
-aoutx.texi: aoutx.stamp ; @true
-aoutx.stamp: $(srcdir)/../aoutx.h $(srcdir)/doc.str $(MKDOC)
- $(AM_V_GEN)$(REGEN_TEXI)
-
-archive.texi: archive.stamp ; @true
-archive.stamp: $(srcdir)/../archive.c $(srcdir)/doc.str $(MKDOC)
- $(AM_V_GEN)$(REGEN_TEXI)
-
-archures.texi: archures.stamp ; @true
-archures.stamp: $(srcdir)/../archures.c $(srcdir)/doc.str $(MKDOC)
- $(AM_V_GEN)$(REGEN_TEXI)
-
-# We use bfdt.texi, rather than bfd.texi, to avoid conflicting with
-# bfd.texi on an 8.3 filesystem.
-bfdt.texi: bfdt.stamp ; @true
-bfdt.stamp: $(srcdir)/../bfd.c $(srcdir)/doc.str $(MKDOC)
- $(AM_V_GEN)$(REGEN_TEXI)
-
-cache.texi: cache.stamp ; @true
-cache.stamp: $(srcdir)/../cache.c $(srcdir)/doc.str $(MKDOC)
- $(AM_V_GEN)$(REGEN_TEXI)
-
-coffcode.texi: coffcode.stamp ; @true
-coffcode.stamp: $(srcdir)/../coffcode.h $(srcdir)/doc.str $(MKDOC)
- $(AM_V_GEN)$(REGEN_TEXI)
-
-core.texi: core.stamp ; @true
-core.stamp: $(srcdir)/../corefile.c $(srcdir)/doc.str $(MKDOC)
- $(AM_V_GEN)$(REGEN_TEXI)
-
-elf.texi: elf.stamp ; @true
-elf.stamp: $(srcdir)/../elf.c $(srcdir)/doc.str $(MKDOC)
- $(AM_V_GEN)$(REGEN_TEXI)
-
-elfcode.texi: elfcode.stamp ; @true
-elfcode.stamp: $(srcdir)/../elfcode.h $(srcdir)/doc.str $(MKDOC)
- $(AM_V_GEN)$(REGEN_TEXI)
-
-mmo.texi: mmo.stamp ; @true
-mmo.stamp: $(srcdir)/../mmo.c $(srcdir)/doc.str $(MKDOC)
- $(AM_V_GEN)$(REGEN_TEXI)
-
-format.texi: format.stamp ; @true
-format.stamp: $(srcdir)/../format.c $(srcdir)/doc.str $(MKDOC)
- $(AM_V_GEN)$(REGEN_TEXI)
-
-libbfd.texi: libbfd.stamp ; @true
-libbfd.stamp: $(srcdir)/../libbfd.c $(srcdir)/doc.str $(MKDOC)
- $(AM_V_GEN)$(REGEN_TEXI)
-
-bfdio.texi: bfdio.stamp ; @true
-bfdio.stamp: $(srcdir)/../bfdio.c $(srcdir)/doc.str $(MKDOC)
- $(AM_V_GEN)$(REGEN_TEXI)
-
-bfdwin.texi: bfdwin.stamp ; @true
-bfdwin.stamp: $(srcdir)/../bfdwin.c $(srcdir)/doc.str $(MKDOC)
- $(AM_V_GEN)$(REGEN_TEXI)
-
-opncls.texi: opncls.stamp ; @true
-opncls.stamp: $(srcdir)/../opncls.c $(srcdir)/doc.str $(MKDOC)
- $(AM_V_GEN)$(REGEN_TEXI)
-
-reloc.texi: reloc.stamp ; @true
-reloc.stamp: $(srcdir)/../reloc.c $(srcdir)/doc.str $(MKDOC)
- $(AM_V_GEN)$(REGEN_TEXI)
-
-section.texi: section.stamp ; @true
-section.stamp: $(srcdir)/../section.c $(srcdir)/doc.str $(MKDOC)
- $(AM_V_GEN)$(REGEN_TEXI)
-
-syms.texi: syms.stamp ; @true
-syms.stamp: $(srcdir)/../syms.c $(srcdir)/doc.str $(MKDOC)
- $(AM_V_GEN)$(REGEN_TEXI)
-
-targets.texi: targets.stamp ; @true
-targets.stamp: $(srcdir)/../targets.c $(srcdir)/doc.str $(MKDOC)
- $(AM_V_GEN)$(REGEN_TEXI)
-
-init.texi: init.stamp ; @true
-init.stamp: $(srcdir)/../init.c $(srcdir)/doc.str $(MKDOC)
- $(AM_V_GEN)$(REGEN_TEXI)
-
-hash.texi: hash.stamp ; @true
-hash.stamp: $(srcdir)/../hash.c $(srcdir)/doc.str $(MKDOC)
- $(AM_V_GEN)$(REGEN_TEXI)
-
-linker.texi: linker.stamp ; @true
-linker.stamp: $(srcdir)/../linker.c $(srcdir)/doc.str $(MKDOC)
- $(AM_V_GEN)$(REGEN_TEXI)
-
-bfdver.texi: $(srcdir)/Makefile.in
- @echo "creating $@"; \
- echo "@set VERSION $(VERSION)" > bfdver.texi; \
- if test -n "$(PKGVERSION)"; then \
- echo "@set VERSION_PACKAGE $(PKGVERSION)" >> bfdver.texi; \
- fi; \
- echo "@set UPDATED `date '+%B %Y'`" >> bfdver.texi; \
- if test -n "$(REPORT_BUGS_TEXI)"; then \
- echo "@set BUGURL $(REPORT_BUGS_TEXI)" >> bfdver.texi; \
- fi
-
-noinst_TEXINFOS = bfdint.texi
-
-MOSTLYCLEANFILES = $(MKDOC) *.o *.stamp
-
-DISTCLEANFILES = bfd.?? bfd.??? bfd.h libbfd.h libcoff.h texput.log
-
-MAINTAINERCLEANFILES = $(DOCFILES)
-
-# We want install to imply install-info as per GNU standards, despite the
-# cygnus option.
-install: install-info
-
-html-local: bfd/index.html
-bfd/index.html: bfd.texi $(bfd_TEXINFOS)
- $(AM_V_at)$(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) \
- --split=node -I$(srcdir) $(srcdir)/bfd.texi
-
-MAINTAINERCLEANFILES += bfd.info
diff --git a/bfd/doc/bfd.texi b/bfd/doc/bfd.texi
index 6a7ffd1b7cb..d3cd6b13609 100644
--- a/bfd/doc/bfd.texi
+++ b/bfd/doc/bfd.texi
@@ -261,7 +261,7 @@ structures.
@include reloc.texi
@node Core Files, Targets, Relocations, BFD front end
-@include core.texi
+@include corefile.texi
@node Targets, Architectures, Core Files, BFD front end
@include targets.texi
diff --git a/bfd/doc/local.mk b/bfd/doc/local.mk
new file mode 100644
index 00000000000..931942f874c
--- /dev/null
+++ b/bfd/doc/local.mk
@@ -0,0 +1,155 @@
+## Process this file with automake to generate Makefile.in
+##
+## Copyright (C) 2012-2022 Free Software Foundation, Inc.
+##
+## This file is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 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; see the file COPYING3. If not see
+## <http://www.gnu.org/licenses/>.
+##
+
+DOCFILES = \
+ %D%/aoutx.texi \
+ %D%/archive.texi \
+ %D%/archures.texi \
+ %D%/bfdio.texi \
+ %D%/bfdt.texi \
+ %D%/bfdver.texi \
+ %D%/bfdwin.texi \
+ %D%/cache.texi \
+ %D%/coffcode.texi \
+ %D%/corefile.texi \
+ %D%/elfcode.texi \
+ %D%/elf.texi \
+ %D%/format.texi \
+ %D%/hash.texi \
+ %D%/init.texi \
+ %D%/libbfd.texi \
+ %D%/linker.texi \
+ %D%/mmo.texi \
+ %D%/opncls.texi \
+ %D%/reloc.texi \
+ %D%/section.texi \
+ %D%/syms.texi \
+ %D%/targets.texi
+
+# SRCDOC, SRCPROT, SRCIPROT only used to sidestep Sun Make bug in interaction
+# between VPATH and suffix rules. If you use GNU Make, perhaps other Makes,
+# you don't need these three:
+SRCDOC = \
+ $(srcdir)/aoutx.h $(srcdir)/archive.c \
+ $(srcdir)/archures.c $(srcdir)/bfd.c \
+ $(srcdir)/bfdio.c $(srcdir)/bfdwin.c \
+ $(srcdir)/cache.c $(srcdir)/coffcode.h \
+ $(srcdir)/corefile.c $(srcdir)/elf.c \
+ $(srcdir)/elfcode.h $(srcdir)/format.c \
+ $(srcdir)/libbfd.c $(srcdir)/opncls.c \
+ $(srcdir)/reloc.c $(srcdir)/section.c \
+ $(srcdir)/syms.c $(srcdir)/targets.c \
+ $(srcdir)/hash.c $(srcdir)/linker.c \
+ $(srcdir)/mmo.c
+
+SRCPROT = $(srcdir)/archive.c $(srcdir)/archures.c \
+ $(srcdir)/bfd.c $(srcdir)/coffcode.h $(srcdir)/corefile.c \
+ $(srcdir)/format.c $(srcdir)/libbfd.c \
+ $(srcdir)/bfdio.c $(srcdir)/bfdwin.c \
+ $(srcdir)/opncls.c $(srcdir)/reloc.c \
+ $(srcdir)/section.c $(srcdir)/syms.c \
+ $(srcdir)/targets.c $(srcdir)/init.c
+
+SRCIPROT = $(srcdir)/cache.c $(srcdir)/libbfd.c \
+ $(srcdir)/bfdio.c $(srcdir)/bfdwin.c \
+ $(srcdir)/reloc.c $(srcdir)/cpu-h8300.c \
+ $(srcdir)/cpu-i960.c $(srcdir)/archures.c \
+ $(srcdir)/init.c
+
+TEXIDIR = $(srcdir)/../texinfo/fsf
+
+info_TEXINFOS = %D%/bfd.texi
+%C%_bfd_TEXINFOS = $(DOCFILES) %D%/bfdsumm.texi
+
+AM_MAKEINFOFLAGS = --no-split -I "$(srcdir)/%D%" -I %D%
+TEXI2DVI = texi2dvi -I "$(srcdir)/%D%" -I %D%
+
+MKDOC = %D%/chew$(EXEEXT_FOR_BUILD)
+
+$(MKDOC): %D%/chew.stamp ; @true
+%D%/chew.stamp: $(srcdir)/%D%/chew.c %D%/$(am__dirstamp)
+ $(AM_V_CCLD)$(CC_FOR_BUILD) -o %D%/chw$$$$$(EXEEXT_FOR_BUILD) $(CFLAGS_FOR_BUILD) \
+ $(LDFLAGS_FOR_BUILD) $(H_CFLAGS) \
+ -I. -I$(srcdir) -I%D% -I$(srcdir)/../include -I$(srcdir)/../intl -I../intl \
+ $(srcdir)/%D%/chew.c && \
+ $(SHELL) $(srcdir)/../move-if-change \
+ %D%/chw$$$$$(EXEEXT_FOR_BUILD) $(MKDOC) && \
+ touch $@
+
+# We can't replace these rules with an implicit rule, because
+# makes without VPATH support couldn't find the .h files in `..'.
+
+# We do not depend on chew directly so that we can distribute the info
+# files, and permit people to rebuild them, without requiring the makeinfo
+# program. If somebody tries to rebuild info, but none of the .texi files
+# have changed, then nothing will be rebuilt.
+
+REGEN_TEXI = \
+ ( \
+ set -e; \
+ $(MKDOC) -f $(srcdir)/%D%/doc.str < $< > $@.tmp; \
+ texi=$@; \
+ texi=$${texi%.stamp}.texi; \
+ test -e $$texi || test ! -f $(srcdir)/$$texi || $(LN_S) $(srcdir)/$$texi .; \
+ $(SHELL) $(srcdir)/../move-if-change $@.tmp $$texi; \
+ touch $@; \
+ )
+
+.PRECIOUS: %D%/%.stamp
+%D%/%.texi: %D%/%.stamp ; @true
+%D%/%.stamp: $(srcdir)/%.h $(srcdir)/%D%/doc.str $(MKDOC) %D%/$(am__dirstamp)
+ $(AM_V_GEN)$(REGEN_TEXI)
+%D%/%.stamp: $(srcdir)/%.c $(srcdir)/%D%/doc.str $(MKDOC) %D%/$(am__dirstamp)
+ $(AM_V_GEN)$(REGEN_TEXI)
+
+# Avoid the %.stamp generating a builddir/bfd.texi that overrides the
+# srcdir/ as well as regenerating doc/bfd.info for each make run.
+%D%/bfd.stamp: $(srcdir)/%D%/bfd.texi ; $(AM_V_at)touch $@
+
+# We use bfdt.texi, rather than bfd.texi, to avoid conflicting with
+# bfd.texi on an 8.3 filesystem.
+%D%/bfdt.stamp: $(srcdir)/bfd.c $(srcdir)/%D%/doc.str $(MKDOC) %D%/$(am__dirstamp)
+ $(AM_V_GEN)$(REGEN_TEXI)
+
+%D%/bfdver.texi: $(srcdir)/Makefile.in
+ $(AM_V_GEN)\
+ $(MKDIR_P) $(@D); \
+ echo "@set VERSION $(VERSION)" > $@; \
+ if test -n "$(PKGVERSION)"; then \
+ echo "@set VERSION_PACKAGE $(PKGVERSION)" >> $@; \
+ fi; \
+ echo "@set UPDATED `date '+%B %Y'`" >> $@; \
+ if test -n "$(REPORT_BUGS_TEXI)"; then \
+ echo "@set BUGURL $(REPORT_BUGS_TEXI)" >> $@; \
+ fi
+
+noinst_TEXINFOS = %D%/bfdint.texi
+
+MOSTLYCLEANFILES += $(MKDOC) %D%/*.o %D%/*.stamp
+
+DISTCLEANFILES += %D%/bfd.?? %D%/bfd.??? texput.log
+
+MAINTAINERCLEANFILES += $(DOCFILES)
+
+html-local: %D%/bfd/index.html
+%D%/bfd/index.html: %D%/bfd.texi $(bfd_TEXINFOS) %D%/$(am__dirstamp)
+ $(AM_V_at)$(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) \
+ --split=node -o %D%/bfd $(srcdir)/%D%/bfd.texi
+
+MAINTAINERCLEANFILES += %D%/bfd.info
diff --git a/bfd/dwarf2.c b/bfd/dwarf2.c
index be9983edbf0..404f35df62b 100644
--- a/bfd/dwarf2.c
+++ b/bfd/dwarf2.c
@@ -557,10 +557,14 @@ read_section (bfd * abfd,
amt = bfd_get_section_limit_octets (abfd, msec);
filesize = bfd_get_file_size (abfd);
- if (amt >= filesize)
+ /* PR 28834: A compressed debug section could well decompress to a size
+ larger than the file, so we choose an arbitrary modifier of 10x in
+ the test below. If this ever turns out to be insufficient, it can
+ be changed by a future update. */
+ if (amt >= filesize * 10)
{
/* PR 26946 */
- _bfd_error_handler (_("DWARF error: section %s is larger than its filesize! (0x%lx vs 0x%lx)"),
+ _bfd_error_handler (_("DWARF error: section %s is larger than 10x its filesize! (0x%lx vs 0x%lx)"),
section_name, (long) amt, (long) filesize);
bfd_set_error (bfd_error_bad_value);
return false;
@@ -1437,6 +1441,7 @@ non_mangled (int lang)
case DW_LANG_PLI:
case DW_LANG_UPC:
case DW_LANG_C11:
+ case DW_LANG_Mips_Assembler:
return true;
}
}
@@ -2539,13 +2544,12 @@ decode_line_info (struct comp_unit *unit)
return NULL;
}
-/* If ADDR is within TABLE set the output parameters and return the
- range of addresses covered by the entry used to fill them out.
- Otherwise set * FILENAME_PTR to NULL and return 0.
+/* If ADDR is within TABLE set the output parameters and return TRUE,
+ otherwise set *FILENAME_PTR to NULL and return FALSE.
The parameters FILENAME_PTR, LINENUMBER_PTR and DISCRIMINATOR_PTR
are pointers to the objects to be filled in. */
-static bfd_vma
+static bool
lookup_address_in_line_info_table (struct line_info_table *table,
bfd_vma addr,
const char **filename_ptr,
@@ -2604,12 +2608,12 @@ lookup_address_in_line_info_table (struct line_info_table *table,
*linenumber_ptr = info->line;
if (discriminator_ptr)
*discriminator_ptr = info->discriminator;
- return seq->last_line->address - seq->low_pc;
+ return true;
}
fail:
*filename_ptr = NULL;
- return 0;
+ return false;
}
/* Read in the .debug_ranges section for future reference. */
@@ -3289,6 +3293,36 @@ lookup_var_by_offset (bfd_uint64_t offset, struct varinfo * table)
/* DWARF2 Compilation unit functions. */
+static struct funcinfo *
+reverse_funcinfo_list (struct funcinfo *head)
+{
+ struct funcinfo *rhead;
+ struct funcinfo *temp;
+
+ for (rhead = NULL; head; head = temp)
+ {
+ temp = head->prev_func;
+ head->prev_func = rhead;
+ rhead = head;
+ }
+ return rhead;
+}
+
+static struct varinfo *
+reverse_varinfo_list (struct varinfo *head)
+{
+ struct varinfo *rhead;
+ struct varinfo *temp;
+
+ for (rhead = NULL; head; head = temp)
+ {
+ temp = head->prev_var;
+ head->prev_var = rhead;
+ rhead = head;
+ }
+ return rhead;
+}
+
/* Scan over each die in a comp. unit looking for functions to add
to the function table and variables to the variable table. */
@@ -3304,7 +3338,9 @@ scan_unit_for_symbols (struct comp_unit *unit)
struct funcinfo *func;
} *nested_funcs;
int nested_funcs_size;
-
+ struct funcinfo *last_func;
+ struct varinfo *last_var;
+
/* Maintain a stack of in-scope functions and inlined functions, which we
can use to set the caller_func field. */
nested_funcs_size = 32;
@@ -3438,10 +3474,16 @@ scan_unit_for_symbols (struct comp_unit *unit)
}
}
+ unit->function_table = reverse_funcinfo_list (unit->function_table);
+ unit->variable_table = reverse_varinfo_list (unit->variable_table);
+
/* This is the second pass over the abbrevs. */
info_ptr = unit->first_child_die_ptr;
nesting_level = 0;
+ last_func = NULL;
+ last_var = NULL;
+
while (nesting_level >= 0)
{
unsigned int abbrev_number, i;
@@ -3477,16 +3519,32 @@ scan_unit_for_symbols (struct comp_unit *unit)
|| abbrev->tag == DW_TAG_entry_point
|| abbrev->tag == DW_TAG_inlined_subroutine)
{
- func = lookup_func_by_offset (current_offset, unit->function_table);
+ if (last_func
+ && last_func->prev_func
+ && last_func->prev_func->unit_offset == current_offset)
+ func = last_func->prev_func;
+ else
+ func = lookup_func_by_offset (current_offset, unit->function_table);
+
if (func == NULL)
goto fail;
+
+ last_func = func;
}
else if (abbrev->tag == DW_TAG_variable
|| abbrev->tag == DW_TAG_member)
{
- var = lookup_var_by_offset (current_offset, unit->variable_table);
+ if (last_var
+ && last_var->prev_var
+ && last_var->prev_var->unit_offset == current_offset)
+ var = last_var->prev_var;
+ else
+ var = lookup_var_by_offset (current_offset, unit->variable_table);
+
if (var == NULL)
goto fail;
+
+ last_var = var;
}
for (i = 0; i < abbrev->num_attrs; ++i)
@@ -3680,6 +3738,9 @@ scan_unit_for_symbols (struct comp_unit *unit)
}
}
+ unit->function_table = reverse_funcinfo_list (unit->function_table);
+ unit->variable_table = reverse_varinfo_list (unit->variable_table);
+
free (nested_funcs);
return true;
@@ -3947,14 +4008,11 @@ comp_unit_contains_address (struct comp_unit *unit, bfd_vma addr)
}
/* If UNIT contains ADDR, set the output parameters to the values for
- the line containing ADDR. The output parameters, FILENAME_PTR,
- FUNCTION_PTR, and LINENUMBER_PTR, are pointers to the objects
- to be filled in.
-
- Returns the range of addresses covered by the entry that was used
- to fill in *LINENUMBER_PTR or 0 if it was not filled in. */
+ the line containing ADDR and return TRUE. Otherwise return FALSE.
+ The output parameters, FILENAME_PTR, FUNCTION_PTR, and
+ LINENUMBER_PTR, are pointers to the objects to be filled in. */
-static bfd_vma
+static bool
comp_unit_find_nearest_line (struct comp_unit *unit,
bfd_vma addr,
const char **filename_ptr,
@@ -3962,7 +4020,7 @@ comp_unit_find_nearest_line (struct comp_unit *unit,
unsigned int *linenumber_ptr,
unsigned int *discriminator_ptr)
{
- bool func_p;
+ bool line_p, func_p;
if (!comp_unit_maybe_decode_line_info (unit))
return false;
@@ -3972,10 +4030,11 @@ comp_unit_find_nearest_line (struct comp_unit *unit,
if (func_p && (*function_ptr)->tag == DW_TAG_inlined_subroutine)
unit->stash->inliner_chain = *function_ptr;
- return lookup_address_in_line_info_table (unit->line_table, addr,
- filename_ptr,
- linenumber_ptr,
- discriminator_ptr);
+ line_p = lookup_address_in_line_info_table (unit->line_table, addr,
+ filename_ptr,
+ linenumber_ptr,
+ discriminator_ptr);
+ return line_p || func_p;
}
/* Check to see if line info is already decoded in a comp_unit.
@@ -4043,36 +4102,6 @@ comp_unit_find_line (struct comp_unit *unit,
linenumber_ptr);
}
-static struct funcinfo *
-reverse_funcinfo_list (struct funcinfo *head)
-{
- struct funcinfo *rhead;
- struct funcinfo *temp;
-
- for (rhead = NULL; head; head = temp)
- {
- temp = head->prev_func;
- head->prev_func = rhead;
- rhead = head;
- }
- return rhead;
-}
-
-static struct varinfo *
-reverse_varinfo_list (struct varinfo *head)
-{
- struct varinfo *rhead;
- struct varinfo *temp;
-
- for (rhead = NULL; head; head = temp)
- {
- temp = head->prev_var;
- head->prev_var = rhead;
- rhead = head;
- }
- return rhead;
-}
-
/* Extract all interesting funcinfos and varinfos of a compilation
unit into hash tables for faster lookup. Returns TRUE if no
errors were enountered; FALSE otherwise. */
@@ -5156,54 +5185,17 @@ _bfd_dwarf2_find_nearest_line (bfd *abfd,
}
else
{
- bfd_vma min_range = (bfd_vma) -1;
- const char * local_filename = NULL;
- struct funcinfo *local_function = NULL;
- unsigned int local_linenumber = 0;
- unsigned int local_discriminator = 0;
-
for (each = stash->f.all_comp_units; each; each = each->next_unit)
{
- bfd_vma range = (bfd_vma) -1;
-
found = ((each->arange.high == 0
|| comp_unit_contains_address (each, addr))
- && (range = (comp_unit_find_nearest_line
- (each, addr, &local_filename,
- &local_function, &local_linenumber,
- &local_discriminator))) != 0);
+ && comp_unit_find_nearest_line (each, addr,
+ filename_ptr,
+ &function,
+ linenumber_ptr,
+ discriminator_ptr));
if (found)
- {
- /* PRs 15935 15994: Bogus debug information may have provided us
- with an erroneous match. We attempt to counter this by
- selecting the match that has the smallest address range
- associated with it. (We are assuming that corrupt debug info
- will tend to result in extra large address ranges rather than
- extra small ranges).
-
- This does mean that we scan through all of the CUs associated
- with the bfd each time this function is called. But this does
- have the benefit of producing consistent results every time the
- function is called. */
- if (range <= min_range)
- {
- if (filename_ptr && local_filename)
- * filename_ptr = local_filename;
- if (local_function)
- function = local_function;
- if (discriminator_ptr && local_discriminator)
- * discriminator_ptr = local_discriminator;
- if (local_linenumber)
- * linenumber_ptr = local_linenumber;
- min_range = range;
- }
- }
- }
-
- if (* linenumber_ptr)
- {
- found = true;
- goto done;
+ goto done;
}
}
@@ -5228,7 +5220,7 @@ _bfd_dwarf2_find_nearest_line (bfd *abfd,
filename_ptr,
&function,
linenumber_ptr,
- discriminator_ptr) != 0);
+ discriminator_ptr));
if (found)
break;
@@ -5236,7 +5228,11 @@ _bfd_dwarf2_find_nearest_line (bfd *abfd,
done:
if (functionname_ptr && function && function->is_linkage)
- *functionname_ptr = function->name;
+ {
+ *functionname_ptr = function->name;
+ if (!found)
+ found = 2;
+ }
else if (functionname_ptr
&& (!*functionname_ptr
|| (function && !function->is_linkage)))
@@ -5260,8 +5256,9 @@ _bfd_dwarf2_find_nearest_line (bfd *abfd,
sec_vma = section->vma;
if (section->output_section != NULL)
sec_vma = section->output_section->vma + section->output_offset;
- if (fun != NULL
- && fun->value + sec_vma == function->arange.low)
+ if (fun == NULL)
+ *functionname_ptr = function->name;
+ else if (fun->value + sec_vma == function->arange.low)
function->name = *functionname_ptr;
/* Even if we didn't find a linkage name, say that we have
to stop a repeated search of symbols. */
diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h
index 81f8fd47db7..c7c0a793b15 100644
--- a/bfd/elf-bfd.h
+++ b/bfd/elf-bfd.h
@@ -291,9 +291,12 @@ weakdef (struct elf_link_hash_entry *h)
_bfd_elf_symbol_refs_local_p (H, INFO, 1)
/* Whether an undefined weak symbol should resolve to its link-time
- value, even in PIC or PIE objects. */
+ value, even in PIC or PIE objects. The linker_def test is to
+ handle symbols like __ehdr_start that may be undefweak in early
+ stages of linking but are guaranteed to be defined later. */
#define UNDEFWEAK_NO_DYNAMIC_RELOC(INFO, H) \
((H)->root.type == bfd_link_hash_undefweak \
+ && !(H)->root.linker_def \
&& (ELF_ST_VISIBILITY ((H)->other) != STV_DEFAULT \
|| (INFO)->dynamic_undefined_weak == 0))
@@ -496,6 +499,7 @@ enum elf_target_id
{
AARCH64_ELF_DATA = 1,
ALPHA_ELF_DATA,
+ AMDGCN_ELF_DATA,
ARC_ELF_DATA,
ARM_ELF_DATA,
AVR_ELF_DATA,
@@ -596,6 +600,9 @@ struct elf_link_hash_table
/* TRUE if DT_JMPREL is a required dynamic tag. */
bool dt_jmprel_required;
+ /* TRUE when we are handling DT_NEEDED entries. */
+ bool handling_dt_needed;
+
/* The BFD used to hold special sections created by the linker.
This will be the first BFD found which requires these sections to
be created. */
@@ -707,6 +714,7 @@ struct elf_link_hash_table
asection *irelplt;
asection *irelifunc;
asection *dynsym;
+ asection *srelrdyn;
};
/* Returns TRUE if the hash table is a struct elf_link_hash_table. */
@@ -942,9 +950,6 @@ struct elf_backend_data
/* The common page size for this backend. */
bfd_vma commonpagesize;
- /* The value of commonpagesize to use when -z relro for this backend. */
- bfd_vma relropagesize;
-
/* The p_align value for this backend. If it is set, p_align of
PT_LOAD alignment will be to p_align by default. */
bfd_vma p_align;
@@ -1104,6 +1109,16 @@ struct elf_backend_data
(bfd *abfd, struct bfd_link_info *info, asection *o,
const Elf_Internal_Rela *relocs);
+ /* The SIZE_RELATIVE_RELOCS function is called to size relative
+ relocations when mappig sections to segments. */
+ bool (*size_relative_relocs)
+ (struct bfd_link_info *info, bool *need_layout);
+
+ /* The FINISH_RELATIVE_RELOCS function is called to finish relative
+ relocations in bfd_elf_final_link. */
+ bool (*finish_relative_relocs)
+ (struct bfd_link_info *info);
+
/* The CHECK_DIRECTIVES function is called once per input file by
the add_symbols phase of the ELF backend linker. The function
must inspect the bfd and create any additional symbols according
@@ -1895,10 +1910,6 @@ struct output_elf_obj_tdata
/* STT_SECTION symbols for each section */
asymbol **section_syms;
- /* Used to determine if PT_GNU_EH_FRAME segment header should be
- created. */
- asection *eh_frame_hdr;
-
/* NT_GNU_BUILD_ID note type info. */
struct
{
@@ -2102,7 +2113,6 @@ struct elf_obj_tdata
#define elf_seg_map(bfd) (elf_tdata(bfd) -> o->seg_map)
#define elf_link_info(bfd) (elf_tdata(bfd) -> o->link_info)
#define elf_next_file_pos(bfd) (elf_tdata(bfd) -> o->next_file_pos)
-#define elf_eh_frame_hdr(bfd) (elf_tdata(bfd) -> o->eh_frame_hdr)
#define elf_stack_flags(bfd) (elf_tdata(bfd) -> o->stack_flags)
#define elf_shstrtab(bfd) (elf_tdata(bfd) -> o->strtab_ptr)
#define elf_onesymtab(bfd) (elf_tdata(bfd) -> symtab_section)
@@ -2398,7 +2408,7 @@ extern bool _bfd_elf_discard_section_eh_frame
extern bool _bfd_elf_adjust_eh_frame_global_symbol
(struct elf_link_hash_entry *, void *);
extern bool _bfd_elf_discard_section_eh_frame_hdr
- (bfd *, struct bfd_link_info *);
+ (struct bfd_link_info *);
extern bfd_vma _bfd_elf_eh_frame_section_offset
(bfd *, struct bfd_link_info *, asection *, bfd_vma);
extern bool _bfd_elf_write_section_eh_frame
@@ -2716,7 +2726,7 @@ extern struct elf_segment_map * _bfd_elf_make_dynamic_segment
(bfd *, asection *);
extern bool _bfd_elf_map_sections_to_segments
- (bfd *, struct bfd_link_info *);
+ (bfd *, struct bfd_link_info *, bool *);
extern bool _bfd_elf_is_function_type (unsigned int);
@@ -2776,6 +2786,8 @@ extern char *elfcore_write_prxfpreg
(bfd *, char *, int *, const void *, int);
extern char *elfcore_write_xstatereg
(bfd *, char *, int *, const void *, int);
+extern char *elfcore_write_x86_segbases
+ (bfd *, char *, int *, const void *, int);
extern char *elfcore_write_ppc_vmx
(bfd *, char *, int *, const void *, int);
extern char *elfcore_write_ppc_vsx
diff --git a/bfd/elf-eh-frame.c b/bfd/elf-eh-frame.c
index a621fedbee8..2e22d0c9215 100644
--- a/bfd/elf-eh-frame.c
+++ b/bfd/elf-eh-frame.c
@@ -1612,7 +1612,7 @@ _bfd_elf_discard_section_eh_frame
input sections. It finalizes the size of .eh_frame_hdr section. */
bool
-_bfd_elf_discard_section_eh_frame_hdr (bfd *abfd, struct bfd_link_info *info)
+_bfd_elf_discard_section_eh_frame_hdr (struct bfd_link_info *info)
{
struct elf_link_hash_table *htab;
struct eh_frame_hdr_info *hdr_info;
@@ -1644,7 +1644,6 @@ _bfd_elf_discard_section_eh_frame_hdr (bfd *abfd, struct bfd_link_info *info)
sec->size += 4 + hdr_info->u.dwarf.fde_count * 8;
}
- elf_eh_frame_hdr (abfd) = sec;
return true;
}
diff --git a/bfd/elf-properties.c b/bfd/elf-properties.c
index bf4f70d6256..d67aadde16b 100644
--- a/bfd/elf-properties.c
+++ b/bfd/elf-properties.c
@@ -195,14 +195,11 @@ _bfd_elf_parse_gnu_properties (bfd *abfd, Elf_Internal_Note *note)
prop = _bfd_elf_get_property (abfd, type, datasz);
prop->u.number |= bfd_h_get_32 (abfd, ptr);
prop->pr_kind = property_number;
- if ((abfd->flags & DYNAMIC) == 0
- && type == GNU_PROPERTY_1_NEEDED
+ if (type == GNU_PROPERTY_1_NEEDED
&& ((prop->u.number
& GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS)
!= 0))
{
- /* NB: Skip the shared library since it may not be
- the same at run-time. */
elf_has_indirect_extern_access (abfd) = true;
/* GNU_PROPERTY_NO_COPY_ON_PROTECTED is implied. */
elf_has_no_copy_on_protected (abfd) = true;
diff --git a/bfd/elf.c b/bfd/elf.c
index 1003bd2cdbe..f046994e3a8 100644
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -1104,7 +1104,8 @@ _bfd_elf_make_section_from_shdr (bfd *abfd,
if (!bfd_set_section_vma (newsect, hdr->sh_addr / opb)
|| !bfd_set_section_size (newsect, hdr->sh_size)
- || !bfd_set_section_alignment (newsect, bfd_log2 (hdr->sh_addralign)))
+ || !bfd_set_section_alignment (newsect, bfd_log2 (hdr->sh_addralign
+ & -hdr->sh_addralign)))
return false;
/* As a GNU extension, if the name begins with .gnu.linkonce, we
@@ -2714,6 +2715,7 @@ static const struct bfd_elf_special_section special_sections_r[] =
{
{ STRING_COMMA_LEN (".rodata"), -2, SHT_PROGBITS, SHF_ALLOC },
{ STRING_COMMA_LEN (".rodata1"), 0, SHT_PROGBITS, SHF_ALLOC },
+ { STRING_COMMA_LEN (".relr.dyn"), 0, SHT_RELR, SHF_ALLOC },
{ STRING_COMMA_LEN (".rela"), -1, SHT_RELA, 0 },
{ STRING_COMMA_LEN (".rel"), -1, SHT_REL, 0 },
{ NULL, 0, 0, 0, 0 }
@@ -3278,7 +3280,9 @@ elf_fake_sections (bfd *abfd, asection *asect, void *fsarg)
/* If the section type is unspecified, we set it based on
asect->flags. */
- if ((asect->flags & SEC_GROUP) != 0)
+ if (asect->type != 0)
+ sh_type = asect->type;
+ else if ((asect->flags & SEC_GROUP) != 0)
sh_type = SHT_GROUP;
else
sh_type = bfd_elf_get_default_section_type (asect->flags);
@@ -4226,7 +4230,7 @@ _bfd_elf_assign_file_position_for_section (Elf_Internal_Shdr *i_shdrp,
bool align)
{
if (align && i_shdrp->sh_addralign > 1)
- offset = BFD_ALIGN (offset, i_shdrp->sh_addralign);
+ offset = BFD_ALIGN (offset, i_shdrp->sh_addralign & -i_shdrp->sh_addralign);
i_shdrp->sh_offset = offset;
if (i_shdrp->bfd_section != NULL)
i_shdrp->bfd_section->filepos = offset;
@@ -4342,6 +4346,20 @@ _bfd_elf_compute_section_file_positions (bfd *abfd,
return true;
}
+/* Retrieve .eh_frame_hdr. Prior to size_dynamic_sections the
+ function effectively returns whether --eh-frame-hdr is given on the
+ command line. After size_dynamic_sections the result reflects
+ whether .eh_frame_hdr will actually be output (sizing isn't done
+ until ldemul_after_allocation). */
+
+static asection *
+elf_eh_frame_hdr (const struct bfd_link_info *info)
+{
+ if (info != NULL && is_elf_hash_table (info->hash))
+ return elf_hash_table (info)->eh_info.hdr_sec;
+ return NULL;
+}
+
/* Make an initial estimate of the size of the program header. If we
get the number wrong here, we'll redo section placement. */
@@ -4378,7 +4396,7 @@ get_program_header_size (bfd *abfd, struct bfd_link_info *info)
++segs;
}
- if (elf_eh_frame_hdr (abfd))
+ if (elf_eh_frame_hdr (info))
{
/* We need a PT_GNU_EH_FRAME segment. */
++segs;
@@ -4608,10 +4626,13 @@ elf_modify_segment_map (bfd *abfd,
#define IS_TBSS(s) \
((s->flags & (SEC_THREAD_LOCAL | SEC_LOAD)) == SEC_THREAD_LOCAL)
-/* Set up a mapping from BFD sections to program segments. */
+/* Set up a mapping from BFD sections to program segments. Update
+ NEED_LAYOUT if the section layout is changed. */
bool
-_bfd_elf_map_sections_to_segments (bfd *abfd, struct bfd_link_info *info)
+_bfd_elf_map_sections_to_segments (bfd *abfd,
+ struct bfd_link_info *info,
+ bool *need_layout)
{
unsigned int count;
struct elf_segment_map *m;
@@ -4622,7 +4643,17 @@ _bfd_elf_map_sections_to_segments (bfd *abfd, struct bfd_link_info *info)
no_user_phdrs = elf_seg_map (abfd) == NULL;
if (info != NULL)
- info->user_phdrs = !no_user_phdrs;
+ {
+ info->user_phdrs = !no_user_phdrs;
+
+ /* Size the relative relocations if DT_RELR is enabled. */
+ if (info->enable_dt_relr
+ && need_layout != NULL
+ && bed->size_relative_relocs
+ && !bed->size_relative_relocs (info, need_layout))
+ info->callbacks->einfo
+ (_("%F%P: failed to size relative relocations\n"));
+ }
if (no_user_phdrs && bfd_count_sections (abfd) != 0)
{
@@ -5120,7 +5151,7 @@ _bfd_elf_map_sections_to_segments (bfd *abfd, struct bfd_link_info *info)
/* If there is a .eh_frame_hdr section, throw in a PT_GNU_EH_FRAME
segment. */
- eh_frame_hdr = elf_eh_frame_hdr (abfd);
+ eh_frame_hdr = elf_eh_frame_hdr (info);
if (eh_frame_hdr != NULL
&& (eh_frame_hdr->output_section->flags & SEC_LOAD) != 0)
{
@@ -5415,7 +5446,7 @@ assign_file_positions_for_load_sections (bfd *abfd,
unsigned int opb = bfd_octets_per_byte (abfd, NULL);
if (link_info == NULL
- && !_bfd_elf_map_sections_to_segments (abfd, link_info))
+ && !_bfd_elf_map_sections_to_segments (abfd, link_info, NULL))
return false;
alloc = 0;
@@ -6121,6 +6152,7 @@ assign_file_positions_for_non_load_sections (bfd *abfd,
for (hdrpp = i_shdrpp + 1; hdrpp < end_hdrpp; hdrpp++)
{
Elf_Internal_Shdr *hdr;
+ bfd_vma align;
hdr = *hdrpp;
if (hdr->bfd_section != NULL
@@ -6146,11 +6178,10 @@ assign_file_positions_for_non_load_sections (bfd *abfd,
: hdr->bfd_section->name));
/* We don't need to page align empty sections. */
if ((abfd->flags & D_PAGED) != 0 && hdr->sh_size != 0)
- off += vma_page_aligned_bias (hdr->sh_addr, off,
- maxpagesize);
+ align = maxpagesize;
else
- off += vma_page_aligned_bias (hdr->sh_addr, off,
- hdr->sh_addralign);
+ align = hdr->sh_addralign & -hdr->sh_addralign;
+ off += vma_page_aligned_bias (hdr->sh_addr, off, align);
off = _bfd_elf_assign_file_position_for_section (hdr, off,
false);
}
@@ -6430,6 +6461,29 @@ assign_file_positions_except_relocs (bfd *abfd,
alloc = i_ehdrp->e_phnum;
if (alloc != 0)
{
+ if (link_info != NULL && ! link_info->no_warn_rwx_segments)
+ {
+ /* Memory resident segments with non-zero size and RWX permissions are a
+ security risk, so we generate a warning here if we are creating any. */
+ unsigned int i;
+
+ for (i = 0; i < alloc; i++)
+ {
+ const Elf_Internal_Phdr * phdr = tdata->phdr + i;
+
+ if (phdr->p_memsz == 0)
+ continue;
+
+ if (phdr->p_type == PT_TLS && (phdr->p_flags & PF_X))
+ _bfd_error_handler (_("warning: %pB has a TLS segment with execute permission"),
+ abfd);
+ else if (phdr->p_type == PT_LOAD
+ && (phdr->p_flags & (PF_R | PF_W | PF_X)) == (PF_R | PF_W | PF_X))
+ _bfd_error_handler (_("warning: %pB has a LOAD segment with RWX permissions"),
+ abfd);
+ }
+ }
+
if (bfd_seek (abfd, i_ehdrp->e_phoff, SEEK_SET) != 0
|| bed->s->write_out_phdrs (abfd, tdata->phdr, alloc) != 0)
return false;
@@ -10979,10 +11033,7 @@ elfcore_grok_freebsd_note (bfd *abfd, Elf_Internal_Note *note)
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;
+ return elfcore_make_note_pseudosection (abfd, ".thrmisc", note);
case NT_FREEBSD_PROCSTAT_PROC:
return elfcore_make_note_pseudosection (abfd, ".note.freebsdcore.proc",
@@ -10999,16 +11050,19 @@ elfcore_grok_freebsd_note (bfd *abfd, Elf_Internal_Note *note)
case NT_FREEBSD_PROCSTAT_AUXV:
return elfcore_make_auxv_note_section (abfd, note, 4);
+ case NT_FREEBSD_X86_SEGBASES:
+ return elfcore_make_note_pseudosection (abfd, ".reg-x86-segbases", note);
+
case NT_X86_XSTATE:
- if (note->namesz == 8)
- return elfcore_grok_xstatereg (abfd, note);
- else
- return true;
+ return elfcore_grok_xstatereg (abfd, note);
case NT_FREEBSD_PTLWPINFO:
return elfcore_make_note_pseudosection (abfd, ".note.freebsdcore.lwpinfo",
note);
+ case NT_ARM_TLS:
+ return elfcore_grok_aarch_tls (abfd, note);
+
case NT_ARM_VFP:
return elfcore_grok_arm_vfp (abfd, note);
@@ -11880,6 +11934,15 @@ elfcore_write_xstatereg (bfd *abfd, char *buf, int *bufsiz,
}
char *
+elfcore_write_x86_segbases (bfd *abfd, char *buf, int *bufsiz,
+ const void *regs, int size)
+{
+ char *note_name = "FreeBSD";
+ return elfcore_write_note (abfd, buf, bufsiz,
+ note_name, NT_FREEBSD_X86_SEGBASES, regs, size);
+}
+
+char *
elfcore_write_ppc_vmx (bfd *abfd,
char *buf,
int *bufsiz,
@@ -12416,6 +12479,8 @@ elfcore_write_register_note (bfd *abfd,
return elfcore_write_prxfpreg (abfd, buf, bufsiz, data, size);
if (strcmp (section, ".reg-xstate") == 0)
return elfcore_write_xstatereg (abfd, buf, bufsiz, data, size);
+ if (strcmp (section, ".reg-x86-segbases") == 0)
+ return elfcore_write_x86_segbases (abfd, buf, bufsiz, data, size);
if (strcmp (section, ".reg-ppc-vmx") == 0)
return elfcore_write_ppc_vmx (abfd, buf, bufsiz, data, size);
if (strcmp (section, ".reg-ppc-vsx") == 0)
diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c
index 86da60e768c..5b8f5e5a0e6 100644
--- a/bfd/elf32-arm.c
+++ b/bfd/elf32-arm.c
@@ -2536,11 +2536,23 @@ static const bfd_vma elf32_arm_nacl_plt_entry [] =
0xea000000, /* b .Lplt_tail */
};
+/* PR 28924:
+ There was a bug due to too high values of THM_MAX_FWD_BRANCH_OFFSET and
+ THM2_MAX_FWD_BRANCH_OFFSET. The first macro concerns the case when Thumb-2
+ is not available, and second macro when Thumb-2 is available. Among other
+ things, they affect the range of branches represented as BLX instructions
+ in Encoding T2 defined in Section A8.8.25 of the ARM Architecture
+ Reference Manual ARMv7-A and ARMv7-R edition issue C.d. Such branches are
+ specified there to have a maximum forward offset that is a multiple of 4.
+ Previously, the respective values defined here were multiples of 2 but not
+ 4 and they are included in comments for reference. */
#define ARM_MAX_FWD_BRANCH_OFFSET ((((1 << 23) - 1) << 2) + 8)
-#define ARM_MAX_BWD_BRANCH_OFFSET ((-((1 << 23) << 2)) + 8)
-#define THM_MAX_FWD_BRANCH_OFFSET ((1 << 22) -2 + 4)
+#define ARM_MAX_BWD_BRANCH_OFFSET ((-((1 << 23) << 2)) + 8)
+#define THM_MAX_FWD_BRANCH_OFFSET ((1 << 22) - 4 + 4)
+/* #def THM_MAX_FWD_BRANCH_OFFSET ((1 << 22) - 2 + 4) */
#define THM_MAX_BWD_BRANCH_OFFSET (-(1 << 22) + 4)
-#define THM2_MAX_FWD_BRANCH_OFFSET (((1 << 24) - 2) + 4)
+#define THM2_MAX_FWD_BRANCH_OFFSET (((1 << 24) - 4) + 4)
+/* #def THM2_MAX_FWD_BRANCH_OFFSET (((1 << 24) - 2) + 4) */
#define THM2_MAX_BWD_BRANCH_OFFSET (-(1 << 24) + 4)
#define THM2_MAX_FWD_COND_BRANCH_OFFSET (((1 << 20) -2) + 4)
#define THM2_MAX_BWD_COND_BRANCH_OFFSET (-(1 << 20) + 4)
@@ -14523,6 +14535,14 @@ elf32_arm_merge_eabi_attributes (bfd *ibfd, struct bfd_link_info *info)
out_attr[Tag_MPextension_use_legacy].i = 0;
}
+ /* PR 28859 and 28848: Handle the case where the first input file,
+ eg crti.o, has a Tag_ABI_HardFP_use of 3 but no Tag_FP_arch set.
+ Using Tag_ABI_HardFP_use in this way is deprecated, so reset the
+ attribute to zero.
+ FIXME: Should we handle other non-zero values of Tag_ABI_HardFO_use ? */
+ if (out_attr[Tag_ABI_HardFP_use].i == 3 && out_attr[Tag_FP_arch].i == 0)
+ out_attr[Tag_ABI_HardFP_use].i = 0;
+
return result;
}
diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c
index d1f61be5044..b034154fb97 100644
--- a/bfd/elf32-i386.c
+++ b/bfd/elf32-i386.c
@@ -1772,11 +1772,14 @@ elf_i386_scan_relocs (bfd *abfd,
}
else
{
- h->pointer_equality_needed = 1;
- /* R_386_32 can be resolved at run-time. */
+ /* R_386_32 can be resolved at run-time. Function
+ pointer reference doesn't need PLT for pointer
+ equality. */
if (r_type == R_386_32
&& (sec->flags & SEC_READONLY) == 0)
func_pointer_ref = true;
+ else
+ h->pointer_equality_needed = 1;
}
if (!func_pointer_ref)
@@ -1798,6 +1801,23 @@ elf_i386_scan_relocs (bfd *abfd,
if (!h->def_regular
|| (sec->flags & (SEC_CODE | SEC_READONLY)) != 0)
h->plt.refcount = 1;
+
+ if (h->pointer_equality_needed
+ && h->type == STT_FUNC
+ && eh->def_protected
+ && elf_has_indirect_extern_access (h->root.u.def.section->owner))
+ {
+ /* Disallow non-canonical reference to canonical
+ protected function. */
+ _bfd_error_handler
+ /* xgettext:c-format */
+ (_("%pB: non-canonical reference to canonical "
+ "protected function `%s' in %pB"),
+ abfd, h->root.root.string,
+ h->root.u.def.section->owner);
+ bfd_set_error (bfd_error_bad_value);
+ goto error_return;
+ }
}
}
@@ -2473,8 +2493,10 @@ elf_i386_relocate_section (bfd *output_bfd,
bfd_put_32 (output_bfd, relocation,
htab->elf.sgot->contents + off);
h->got.offset |= 1;
-
- if (GENERATE_RELATIVE_RELOC_P (info, h))
+ /* NB: Don't generate relative relocation here if
+ it has been generated by DT_RELR. */
+ if (!info->enable_dt_relr
+ && GENERATE_RELATIVE_RELOC_P (info, h))
{
/* PR ld/21402: If this symbol isn't dynamic
in PIC, generate R_386_RELATIVE here. */
@@ -2504,7 +2526,9 @@ elf_i386_relocate_section (bfd *output_bfd,
htab->elf.sgot->contents + off);
local_got_offsets[r_symndx] |= 1;
- if (bfd_link_pic (info))
+ /* NB: Don't generate relative relocation here if it
+ has been generated by DT_RELR. */
+ if (!info->enable_dt_relr && bfd_link_pic (info))
relative_reloc = true;
}
}
@@ -2707,6 +2731,7 @@ elf_i386_relocate_section (bfd *output_bfd,
{
Elf_Internal_Rela outrel;
bool skip, relocate;
+ bool generate_dynamic_reloc = true;
asection *sreloc;
/* When generating a shared object, these relocations
@@ -2734,23 +2759,33 @@ elf_i386_relocate_section (bfd *output_bfd,
{
/* This symbol is local, or marked to become local. */
relocate = true;
- outrel.r_info = ELF32_R_INFO (0, R_386_RELATIVE);
+ /* NB: Don't generate relative relocation here if it
+ has been generated by DT_RELR. */
+ if (info->enable_dt_relr)
+ generate_dynamic_reloc = false;
+ else
+ {
+ outrel.r_info = ELF32_R_INFO (0, R_386_RELATIVE);
- if (htab->params->report_relative_reloc)
- _bfd_x86_elf_link_report_relative_reloc
- (info, input_section, h, sym, "R_386_RELATIVE",
- &outrel);
+ if (htab->params->report_relative_reloc)
+ _bfd_x86_elf_link_report_relative_reloc
+ (info, input_section, h, sym, "R_386_RELATIVE",
+ &outrel);
+ }
}
- sreloc = elf_section_data (input_section)->sreloc;
-
- if (sreloc == NULL || sreloc->contents == NULL)
+ if (generate_dynamic_reloc)
{
- r = bfd_reloc_notsupported;
- goto check_relocation_error;
- }
+ sreloc = elf_section_data (input_section)->sreloc;
- elf_append_rel (output_bfd, sreloc, &outrel);
+ if (sreloc == NULL || sreloc->contents == NULL)
+ {
+ r = bfd_reloc_notsupported;
+ goto check_relocation_error;
+ }
+
+ elf_append_rel (output_bfd, sreloc, &outrel);
+ }
/* If this reloc is against an external symbol, we do
not want to fiddle with the addend. Otherwise, we
@@ -3776,6 +3811,7 @@ elf_i386_finish_dynamic_symbol (bfd *output_bfd,
Elf_Internal_Rela rel;
asection *relgot = htab->elf.srelgot;
const char *relative_reloc_name = NULL;
+ bool generate_dynamic_reloc = true;
/* This symbol has an entry in the global offset table. Set it
up. */
@@ -3858,8 +3894,13 @@ elf_i386_finish_dynamic_symbol (bfd *output_bfd,
&& SYMBOL_REFERENCES_LOCAL_P (info, h))
{
BFD_ASSERT((h->got.offset & 1) != 0);
- rel.r_info = ELF32_R_INFO (0, R_386_RELATIVE);
- relative_reloc_name = "R_386_RELATIVE";
+ if (info->enable_dt_relr)
+ generate_dynamic_reloc = false;
+ else
+ {
+ rel.r_info = ELF32_R_INFO (0, R_386_RELATIVE);
+ relative_reloc_name = "R_386_RELATIVE";
+ }
}
else
{
@@ -3870,12 +3911,15 @@ elf_i386_finish_dynamic_symbol (bfd *output_bfd,
rel.r_info = ELF32_R_INFO (h->dynindx, R_386_GLOB_DAT);
}
- if (relative_reloc_name != NULL
- && htab->params->report_relative_reloc)
- _bfd_x86_elf_link_report_relative_reloc
- (info, relgot, h, sym, relative_reloc_name, &rel);
+ if (generate_dynamic_reloc)
+ {
+ if (relative_reloc_name != NULL
+ && htab->params->report_relative_reloc)
+ _bfd_x86_elf_link_report_relative_reloc
+ (info, relgot, h, sym, relative_reloc_name, &rel);
- elf_append_rel (output_bfd, relgot, &rel);
+ elf_append_rel (output_bfd, relgot, &rel);
+ }
}
if (h->needs_copy)
diff --git a/bfd/elf32-microblaze.c b/bfd/elf32-microblaze.c
index d09b3f7095d..ebdba93d0e9 100644
--- a/bfd/elf32-microblaze.c
+++ b/bfd/elf32-microblaze.c
@@ -697,6 +697,47 @@ microblaze_elf_info_to_howto (bfd * abfd,
return true;
}
+/* Relax table contains information about instructions which can
+ be removed by relaxation -- replacing a long address with a
+ short address. */
+struct relax_table
+{
+ /* Address where bytes may be deleted. */
+ bfd_vma addr;
+
+ /* Number of bytes to be deleted. */
+ size_t size;
+};
+
+struct _microblaze_elf_section_data
+{
+ struct bfd_elf_section_data elf;
+ /* Count of used relaxation table entries. */
+ size_t relax_count;
+ /* Relaxation table. */
+ struct relax_table *relax;
+};
+
+#define microblaze_elf_section_data(sec) \
+ ((struct _microblaze_elf_section_data *) elf_section_data (sec))
+
+static bool
+microblaze_elf_new_section_hook (bfd *abfd, asection *sec)
+{
+ if (!sec->used_by_bfd)
+ {
+ struct _microblaze_elf_section_data *sdata;
+ size_t amt = sizeof (*sdata);
+
+ sdata = bfd_zalloc (abfd, amt);
+ if (sdata == NULL)
+ return false;
+ sec->used_by_bfd = sdata;
+ }
+
+ return _bfd_elf_new_section_hook (abfd, sec);
+}
+
/* Microblaze ELF local labels start with 'L.' or '$L', not '.L'. */
static bool
@@ -1647,23 +1688,24 @@ microblaze_elf_relocate_section (bfd *output_bfd,
/* Calculate fixup value for reference. */
-static int
+static size_t
calc_fixup (bfd_vma start, bfd_vma size, asection *sec)
{
bfd_vma end = start + size;
- int i, fixup = 0;
+ size_t i, fixup = 0;
+ struct _microblaze_elf_section_data *sdata;
- if (sec == NULL || sec->relax == NULL)
+ if (sec == NULL || (sdata = microblaze_elf_section_data (sec)) == NULL)
return 0;
/* Look for addr in relax table, total fixup value. */
- for (i = 0; i < sec->relax_count; i++)
+ for (i = 0; i < sdata->relax_count; i++)
{
- if (end <= sec->relax[i].addr)
+ if (end <= sdata->relax[i].addr)
break;
- if ((end != start) && (start > sec->relax[i].addr))
+ if (end != start && start > sdata->relax[i].addr)
continue;
- fixup += sec->relax[i].size;
+ fixup += sdata->relax[i].size;
}
return fixup;
}
@@ -1712,14 +1754,15 @@ microblaze_elf_relax_section (bfd *abfd,
bfd_byte *free_contents = NULL;
int rel_count;
unsigned int shndx;
- int i, sym_index;
+ size_t i, sym_index;
asection *o;
struct elf_link_hash_entry *sym_hash;
Elf_Internal_Sym *isymbuf, *isymend;
Elf_Internal_Sym *isym;
- int symcount;
- int offset;
+ size_t symcount;
+ size_t offset;
bfd_vma src, dest;
+ struct _microblaze_elf_section_data *sdata;
/* We only do this once per section. We may be able to delete some code
by running multiple passes, but it is not worth it. */
@@ -1728,8 +1771,9 @@ microblaze_elf_relax_section (bfd *abfd,
/* Only do this for a text section. */
if (bfd_link_relocatable (link_info)
|| (sec->flags & SEC_RELOC) == 0
- || (sec->reloc_count == 0)
- || (sec->flags & SEC_CODE) == 0)
+ || (sec->flags & SEC_CODE) == 0
+ || sec->reloc_count == 0
+ || (sdata = microblaze_elf_section_data (sec)) == NULL)
return true;
BFD_ASSERT ((sec->size > 0) || (sec->rawsize > 0));
@@ -1754,11 +1798,11 @@ microblaze_elf_relax_section (bfd *abfd,
if (! link_info->keep_memory)
free_relocs = internal_relocs;
- sec->relax = (struct relax_table *) bfd_malloc ((sec->reloc_count + 1)
- * sizeof (struct relax_table));
- if (sec->relax == NULL)
+ sdata->relax_count = 0;
+ sdata->relax = (struct relax_table *) bfd_malloc ((sec->reloc_count + 1)
+ * sizeof (*sdata->relax));
+ if (sdata->relax == NULL)
goto error_return;
- sec->relax_count = 0;
irelend = internal_relocs + sec->reloc_count;
rel_count = 0;
@@ -1848,9 +1892,9 @@ microblaze_elf_relax_section (bfd *abfd,
|| (symval & 0xffff8000) == 0xffff8000)
{
/* We can delete this instruction. */
- sec->relax[sec->relax_count].addr = irel->r_offset;
- sec->relax[sec->relax_count].size = INST_WORD_SIZE;
- sec->relax_count++;
+ sdata->relax[sdata->relax_count].addr = irel->r_offset;
+ sdata->relax[sdata->relax_count].size = INST_WORD_SIZE;
+ sdata->relax_count++;
/* Rewrite relocation type. */
switch ((enum elf_microblaze_reloc_type) ELF32_R_TYPE (irel->r_info))
@@ -1875,11 +1919,11 @@ microblaze_elf_relax_section (bfd *abfd,
} /* Loop through all relocations. */
/* Loop through the relocs again, and see if anything needs to change. */
- if (sec->relax_count > 0)
+ if (sdata->relax_count > 0)
{
shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
rel_count = 0;
- sec->relax[sec->relax_count].addr = sec->size;
+ sdata->relax[sdata->relax_count].addr = sec->size;
for (irel = internal_relocs; irel < irelend; irel++, rel_count++)
{
@@ -1913,7 +1957,7 @@ microblaze_elf_relax_section (bfd *abfd,
{
/* This was a PC-relative instruction that was
completely resolved. */
- int sfix, efix;
+ size_t sfix, efix;
bfd_vma target_address;
target_address = irel->r_addend + irel->r_offset;
sfix = calc_fixup (irel->r_offset, 0, sec);
@@ -1928,7 +1972,7 @@ microblaze_elf_relax_section (bfd *abfd,
{
/* This was a PC-relative 64-bit instruction that was
completely resolved. */
- int sfix, efix;
+ size_t sfix, efix;
bfd_vma target_address;
target_address = irel->r_addend + irel->r_offset + INST_WORD_SIZE;
sfix = calc_fixup (irel->r_offset + INST_WORD_SIZE, 0, sec);
@@ -2195,15 +2239,16 @@ microblaze_elf_relax_section (bfd *abfd,
}
/* Physically move the code and change the cooked size. */
- dest = sec->relax[0].addr;
- for (i = 0; i < sec->relax_count; i++)
+ dest = sdata->relax[0].addr;
+ for (i = 0; i < sdata->relax_count; i++)
{
- int len;
- src = sec->relax[i].addr + sec->relax[i].size;
- len = sec->relax[i+1].addr - sec->relax[i].addr - sec->relax[i].size;
+ size_t len;
+ src = sdata->relax[i].addr + sdata->relax[i].size;
+ len = (sdata->relax[i+1].addr - sdata->relax[i].addr
+ - sdata->relax[i].size);
memmove (contents + dest, contents + src, len);
- sec->size -= sec->relax[i].size;
+ sec->size -= sdata->relax[i].size;
dest += len;
}
@@ -2229,11 +2274,11 @@ microblaze_elf_relax_section (bfd *abfd,
free_contents = NULL;
}
- if (sec->relax_count == 0)
+ if (sdata->relax_count == 0)
{
*again = false;
- free (sec->relax);
- sec->relax = NULL;
+ free (sdata->relax);
+ sdata->relax = NULL;
}
else
*again = true;
@@ -2242,9 +2287,9 @@ microblaze_elf_relax_section (bfd *abfd,
error_return:
free (free_relocs);
free (free_contents);
- free (sec->relax);
- sec->relax = NULL;
- sec->relax_count = 0;
+ free (sdata->relax);
+ sdata->relax = NULL;
+ sdata->relax_count = 0;
return false;
}
@@ -3409,6 +3454,7 @@ microblaze_elf_add_symbol_hook (bfd *abfd,
#define bfd_elf32_bfd_reloc_type_lookup microblaze_elf_reloc_type_lookup
#define bfd_elf32_bfd_is_local_label_name microblaze_elf_is_local_label_name
+#define bfd_elf32_new_section_hook microblaze_elf_new_section_hook
#define elf_backend_relocate_section microblaze_elf_relocate_section
#define bfd_elf32_bfd_relax_section microblaze_elf_relax_section
#define bfd_elf32_bfd_merge_private_bfd_data _bfd_generic_verify_endian_match
diff --git a/bfd/elf32-or1k.c b/bfd/elf32-or1k.c
index 192e83aa7bc..2a06b3e19e6 100644
--- a/bfd/elf32-or1k.c
+++ b/bfd/elf32-or1k.c
@@ -828,6 +828,23 @@ static reloc_howto_type or1k_elf_howto_table[] =
false), /* pcrel_offset */
};
+/* A copy of the R_OR1K_GOT16 used in the presense of R_OR1K_GOT_AHI16
+ relocations when we know we can ignore overflows. */
+static reloc_howto_type or1k_elf_got16_no_overflow_howto =
+ HOWTO (R_OR1K_GOT16, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 16, /* bitsize */
+ false, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_OR1K_GOT16", /* name */
+ false, /* partial_inplace */
+ 0, /* src_mask */
+ 0xffff, /* dst_mask */
+ false); /* pcrel_offset */
+
/* Map BFD reloc types to Or1k ELF reloc types. */
struct or1k_reloc_map
@@ -1506,12 +1523,11 @@ or1k_elf_relocate_section (bfd *output_bfd,
if (r_type == R_OR1K_GOT_AHI16)
saw_gotha = true;
- /* If we have a R_OR1K_GOT16 followed by a R_OR1K_GOT_AHI16
+ /* If we have a R_OR1K_GOT16 following a R_OR1K_GOT_AHI16
relocation we assume the code is doing the right thing to avoid
- overflows. Here we mask the lower 16-bit of the relocation to
- avoid overflow validation failures. */
+ overflows. */
if (r_type == R_OR1K_GOT16 && saw_gotha)
- relocation &= 0xffff;
+ howto = &or1k_elf_got16_no_overflow_howto;
/* Addend should be zero. */
if (rel->r_addend != 0)
diff --git a/bfd/elf32-ppc.c b/bfd/elf32-ppc.c
index 53051308eb1..6dbb69013aa 100644
--- a/bfd/elf32-ppc.c
+++ b/bfd/elf32-ppc.c
@@ -2929,6 +2929,7 @@ ppc_elf_check_relocs (bfd *abfd,
unsigned long r_symndx;
enum elf_ppc_reloc_type r_type;
struct elf_link_hash_entry *h;
+ Elf_Internal_Sym *isym;
int tls_type;
struct plt_entry **ifunc;
struct plt_entry **pltent;
@@ -2936,13 +2937,19 @@ ppc_elf_check_relocs (bfd *abfd,
r_symndx = ELF32_R_SYM (rel->r_info);
if (r_symndx < symtab_hdr->sh_info)
- h = NULL;
+ {
+ h = NULL;
+ isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache, abfd, r_symndx);
+ if (isym == NULL)
+ return false;
+ }
else
{
h = sym_hashes[r_symndx - symtab_hdr->sh_info];
while (h->root.type == bfd_link_hash_indirect
|| h->root.type == bfd_link_hash_warning)
h = (struct elf_link_hash_entry *) h->root.u.i.link;
+ isym = NULL;
}
/* If a relocation refers to _GLOBAL_OFFSET_TABLE_, create the .got.
@@ -2962,13 +2969,16 @@ ppc_elf_check_relocs (bfd *abfd,
tls_type = 0;
r_type = ELF32_R_TYPE (rel->r_info);
ifunc = NULL;
- if (h == NULL && htab->elf.target_os != is_vxworks)
+ if (h != NULL)
+ {
+ if (h->type == STT_GNU_IFUNC)
+ {
+ h->needs_plt = 1;
+ ifunc = &h->plt.plist;
+ }
+ }
+ else if (htab->elf.target_os != is_vxworks)
{
- Elf_Internal_Sym *isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache,
- abfd, r_symndx);
- if (isym == NULL)
- return false;
-
if (ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC)
{
/* Set PLT_IFUNC flag for this sym, no GOT entry yet. */
@@ -3294,12 +3304,10 @@ ppc_elf_check_relocs (bfd *abfd,
htab->plt_type = PLT_OLD;
htab->old_bfd = abfd;
}
- if (h != NULL && h->type == STT_GNU_IFUNC)
- {
- h->needs_plt = 1;
- if (!update_plt_info (abfd, &h->plt.plist, NULL, 0))
- return false;
- }
+ if (h != NULL
+ && ifunc != NULL
+ && !update_plt_info (abfd, ifunc, NULL, 0))
+ return false;
break;
/* This relocation describes the C++ object vtable hierarchy.
@@ -3347,12 +3355,6 @@ ppc_elf_check_relocs (bfd *abfd,
reliably deduce the GOT pointer value needed for
PLT call stubs. */
asection *s;
- Elf_Internal_Sym *isym;
-
- isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache,
- abfd, r_symndx);
- if (isym == NULL)
- return false;
s = bfd_section_from_elf_index (abfd, isym->st_shndx);
if (s == got2)
@@ -3421,38 +3423,21 @@ ppc_elf_check_relocs (bfd *abfd,
}
dodyn:
- /* If we are creating a shared library, and this is a reloc
- against a global symbol, or a non PC relative reloc
- against a local symbol, then we need to copy the reloc
- into the shared library. However, if we are linking with
- -Bsymbolic, we do not need to copy a reloc against a
- global symbol which is defined in an object we are
- including in the link (i.e., DEF_REGULAR is set). At
- this point we have not seen all the input files, so it is
- possible that DEF_REGULAR is not set now but will be set
- later (it is never cleared). In case of a weak definition,
- DEF_REGULAR may be cleared later by a strong definition in
- a shared library. We account for that possibility below by
- storing information in the dyn_relocs field of the hash
- table entry. A similar situation occurs when creating
- shared libraries and symbol visibility changes render the
- symbol local.
-
- If on the other hand, we are creating an executable, we
- may need to keep relocations for symbols satisfied by a
- dynamic library if we manage to avoid copy relocs for the
- symbol. */
- if ((bfd_link_pic (info)
- && (must_be_dyn_reloc (info, r_type)
- || (h != NULL
- && (!SYMBOLIC_BIND (info, h)
- || h->root.type == bfd_link_hash_defweak
- || !h->def_regular))))
- || (ELIMINATE_COPY_RELOCS
- && !bfd_link_pic (info)
- && h != NULL
- && (h->root.type == bfd_link_hash_defweak
- || !h->def_regular)))
+ /* Set up information for symbols that might need dynamic
+ relocations. At this point in linking we have read all
+ the input files and resolved most symbols, but have not
+ yet decided whether symbols are dynamic or finalized
+ symbol flags. In some cases we might be setting dynamic
+ reloc info for symbols that do not end up needing such.
+ That's OK, adjust_dynamic_symbol and allocate_dynrelocs
+ work together with this code. */
+ if ((h != NULL
+ && !SYMBOL_REFERENCES_LOCAL (info, h))
+ || (bfd_link_pic (info)
+ && (h != NULL
+ ? !bfd_is_abs_symbol (&h->root)
+ : isym->st_shndx != SHN_ABS)
+ && must_be_dyn_reloc (info, r_type)))
{
#ifdef DEBUG
fprintf (stderr,
@@ -3507,12 +3492,6 @@ ppc_elf_check_relocs (bfd *abfd,
bool is_ifunc;
asection *s;
void *vpp;
- Elf_Internal_Sym *isym;
-
- isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache,
- abfd, r_symndx);
- if (isym == NULL)
- return false;
s = bfd_section_from_elf_index (abfd, isym->st_shndx);
if (s == NULL)
@@ -3520,7 +3499,7 @@ ppc_elf_check_relocs (bfd *abfd,
vpp = &elf_section_data (s)->local_dynrel;
rel_head = (struct ppc_dyn_relocs **) vpp;
- is_ifunc = ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC;
+ is_ifunc = ifunc != NULL;
p = *rel_head;
if (p != NULL && p->sec == sec && p->ifunc != is_ifunc)
p = p->next;
@@ -5170,7 +5149,8 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
if (((bfd_link_pic (info)
&& !((eh->tls_mask & TLS_TLS) != 0
&& bfd_link_executable (info)
- && SYMBOL_REFERENCES_LOCAL (info, &eh->elf)))
+ && SYMBOL_REFERENCES_LOCAL (info, &eh->elf))
+ && !bfd_is_abs_symbol (&h->root))
|| (htab->elf.dynamic_sections_created
&& eh->elf.dynindx != -1
&& !SYMBOL_REFERENCES_LOCAL (info, &eh->elf)))
@@ -5540,6 +5520,8 @@ ppc_elf_size_dynamic_sections (bfd *output_bfd,
char *lgot_masks;
bfd_size_type locsymcount;
Elf_Internal_Shdr *symtab_hdr;
+ Elf_Internal_Sym *local_syms;
+ Elf_Internal_Sym *isym;
if (!is_ppc_elf (ibfd))
continue;
@@ -5596,8 +5578,18 @@ ppc_elf_size_dynamic_sections (bfd *output_bfd,
local_plt = (struct plt_entry **) end_local_got;
end_local_plt = local_plt + locsymcount;
lgot_masks = (char *) end_local_plt;
+ local_syms = (Elf_Internal_Sym *) symtab_hdr->contents;
+ if (local_syms == NULL && locsymcount != 0)
+ {
+ local_syms = bfd_elf_get_elf_syms (ibfd, symtab_hdr, locsymcount,
+ 0, NULL, NULL, NULL);
+ if (local_syms == NULL)
+ return false;
+ }
- for (; local_got < end_local_got; ++local_got, ++lgot_masks)
+ for (isym = local_syms;
+ local_got < end_local_got;
+ ++local_got, ++lgot_masks, ++isym)
if (*local_got > 0)
{
unsigned int need;
@@ -5611,7 +5603,8 @@ ppc_elf_size_dynamic_sections (bfd *output_bfd,
*local_got = allocate_got (htab, need);
if (bfd_link_pic (info)
&& !((*lgot_masks & TLS_TLS) != 0
- && bfd_link_executable (info)))
+ && bfd_link_executable (info))
+ && isym->st_shndx != SHN_ABS)
{
asection *srel;
@@ -5684,6 +5677,15 @@ ppc_elf_size_dynamic_sections (bfd *output_bfd,
else
ent->plt.offset = (bfd_vma) -1;
}
+
+ 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;
+ }
}
/* Allocate space for global sym dynamic relocs. */
@@ -7796,7 +7798,10 @@ ppc_elf_relocate_section (bfd *output_bfd,
|| !UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
&& !(tls_ty != 0
&& bfd_link_executable (info)
- && SYMBOL_REFERENCES_LOCAL (info, h))))
+ && SYMBOL_REFERENCES_LOCAL (info, h))
+ && (h != NULL
+ ? !bfd_is_abs_symbol (&h->root)
+ : sym->st_shndx != SHN_ABS)))
{
asection *rsec = htab->elf.srelgot;
bfd_byte * loc;
@@ -10373,7 +10378,6 @@ ppc_elf_finish_dynamic_sections (bfd *output_bfd,
#define ELF_MACHINE_CODE EM_PPC
#define ELF_MAXPAGESIZE 0x10000
#define ELF_COMMONPAGESIZE 0x1000
-#define ELF_RELROPAGESIZE ELF_MAXPAGESIZE
#define elf_info_to_howto ppc_elf_info_to_howto
#ifdef EM_CYGNUS_POWERPC
diff --git a/bfd/elf64-amdgcn.c b/bfd/elf64-amdgcn.c
new file mode 100644
index 00000000000..691fa0a34c1
--- /dev/null
+++ b/bfd/elf64-amdgcn.c
@@ -0,0 +1,80 @@
+/* AMDGCN ELF support for BFD.
+
+ Copyright (C) 2019-2022 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, see <http://www.gnu.org/licenses/>. */
+
+/* This file handles ELF files that are of the AMDGCN architecture. The
+ format is documented here:
+
+ https://llvm.org/docs/AMDGPUUsage.html#elf-code-object */
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "libbfd.h"
+#include "elf-bfd.h"
+#include "elf/amdgpu.h"
+
+#include <string.h>
+
+static bool
+elf64_amdgcn_object_p (bfd *abfd)
+{
+ Elf_Internal_Ehdr *hdr = elf_elfheader (abfd);
+ unsigned int mach;
+ unsigned char osabi;
+ unsigned char osabi_version;
+
+ BFD_ASSERT (hdr->e_machine == EM_AMDGPU);
+
+ osabi = hdr->e_ident[EI_OSABI];
+ osabi_version = hdr->e_ident[EI_ABIVERSION];
+
+ /* Objects with OS ABI HSA version 2 encoded the GPU model differently (in a
+ note), but they are deprecated, so we don't need to support them. Reject
+ them specifically.
+
+ At the time of writing, all AMDGCN objects encode the specific GPU
+ model in the EF_AMDGPU_MACH field of e_flags. */
+ if (osabi == ELFOSABI_AMDGPU_HSA
+ && osabi_version < ELFABIVERSION_AMDGPU_HSA_V3)
+ return false;
+
+ mach = elf_elfheader (abfd)->e_flags & EF_AMDGPU_MACH;
+
+ /* Avoid matching non-AMDGCN AMDGPU objects (e.g. r600). */
+ if (mach < EF_AMDGPU_MACH_AMDGCN_MIN)
+ return false;
+
+ bfd_default_set_arch_mach (abfd, bfd_arch_amdgcn, mach);
+ return true;
+}
+
+
+#define TARGET_LITTLE_SYM amdgcn_elf64_le_vec
+#define TARGET_LITTLE_NAME "elf64-amdgcn"
+#define ELF_ARCH bfd_arch_amdgcn
+#define ELF_TARGET_ID AMDGCN_ELF_DATA
+#define ELF_MACHINE_CODE EM_AMDGPU
+#define ELF_MAXPAGESIZE 0x10000 /* 64KB */
+#define ELF_COMMONPAGESIZE 0x1000 /* 4KB */
+
+#define bfd_elf64_bfd_reloc_type_lookup bfd_default_reloc_type_lookup
+#define bfd_elf64_bfd_reloc_name_lookup _bfd_norelocs_bfd_reloc_name_lookup
+
+#define elf_backend_object_p elf64_amdgcn_object_p
+
+#include "elf64-target.h"
diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c
index ea9e60217bc..29607bdb9fb 100644
--- a/bfd/elf64-ppc.c
+++ b/bfd/elf64-ppc.c
@@ -75,7 +75,6 @@ static bfd_vma opd_entry_value
#define ELF_MACHINE_CODE EM_PPC64
#define ELF_MAXPAGESIZE 0x10000
#define ELF_COMMONPAGESIZE 0x1000
-#define ELF_RELROPAGESIZE ELF_MAXPAGESIZE
#define elf_info_to_howto ppc64_elf_info_to_howto
#define elf_backend_want_got_sym 0
@@ -3094,7 +3093,7 @@ struct ppc_branch_hash_entry
unsigned int iter;
};
-/* Used to track dynamic relocations for local symbols. */
+/* Used to track dynamic relocations. */
struct ppc_dyn_relocs
{
struct ppc_dyn_relocs *next;
@@ -3103,7 +3102,27 @@ struct ppc_dyn_relocs
asection *sec;
/* Total number of relocs copied for the input section. */
- unsigned int count : 31;
+ unsigned int count;
+
+ /* Number of pc-relative relocs copied for the input section. */
+ unsigned int pc_count;
+
+ /* Number of relocs that might become R_PPC64_RELATIVE. */
+ unsigned int rel_count;
+};
+
+struct ppc_local_dyn_relocs
+{
+ struct ppc_local_dyn_relocs *next;
+
+ /* The input section of the reloc. */
+ asection *sec;
+
+ /* Total number of relocs copied for the input section. */
+ unsigned int count;
+
+ /* Number of relocs that might become R_PPC64_RELATIVE. */
+ unsigned int rel_count : 31;
/* Whether this entry is for STT_GNU_IFUNC symbols. */
unsigned int ifunc : 1;
@@ -3250,6 +3269,15 @@ struct ppc_link_hash_table
/* The size of reliplt used by got entry relocs. */
bfd_size_type got_reli_size;
+ /* DT_RELR array of section/r_offset. */
+ size_t relr_alloc;
+ size_t relr_count;
+ struct
+ {
+ asection *sec;
+ bfd_vma off;
+ } *relr;
+
/* Statistics. */
unsigned long stub_count[ppc_stub_save_res];
@@ -3271,6 +3299,9 @@ struct ppc_link_hash_table
/* Set if inline plt calls should be converted to direct calls. */
unsigned int can_convert_all_inline_plt:1;
+ /* Set if a stub_offset changed. */
+ unsigned int stub_changed:1;
+
/* Set on error. */
unsigned int stub_error:1;
@@ -3288,6 +3319,13 @@ struct ppc_link_hash_table
/* Incremented every time we size stubs. */
unsigned int stub_iteration;
+
+/* After 20 iterations of stub sizing we no longer allow stubs to
+ shrink. This is to break out of a pathological case where adding
+ stubs or increasing their size on one iteration decreases section
+ gaps (perhaps due to alignment), which then results in smaller
+ stubs on the next iteration. */
+#define STUB_SHRINK_ITER 20
};
/* Rename some of the generic section flags to better document how they
@@ -4068,27 +4106,32 @@ ppc64_elf_copy_indirect_symbol (struct bfd_link_info *info,
{
if (dir->dyn_relocs != NULL)
{
- struct elf_dyn_relocs **pp;
- struct elf_dyn_relocs *p;
+ struct ppc_dyn_relocs **pp;
+ struct ppc_dyn_relocs *p;
/* Add reloc counts against the indirect sym to the direct sym
list. Merge any entries against the same section. */
- for (pp = &ind->dyn_relocs; (p = *pp) != NULL; )
+ for (pp = (struct ppc_dyn_relocs **) &ind->dyn_relocs;
+ (p = *pp) != NULL;
+ )
{
- struct elf_dyn_relocs *q;
+ struct ppc_dyn_relocs *q;
- for (q = dir->dyn_relocs; q != NULL; q = q->next)
+ for (q = (struct ppc_dyn_relocs *) dir->dyn_relocs;
+ q != NULL;
+ q = q->next)
if (q->sec == p->sec)
{
- q->pc_count += p->pc_count;
q->count += p->count;
+ q->pc_count += p->pc_count;
+ q->rel_count += p->rel_count;
*pp = p->next;
break;
}
if (q == NULL)
pp = &p->next;
}
- *pp = dir->dyn_relocs;
+ *pp = (struct ppc_dyn_relocs *) dir->dyn_relocs;
}
dir->dyn_relocs = ind->dyn_relocs;
@@ -4739,6 +4782,7 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
{
unsigned long r_symndx;
struct elf_link_hash_entry *h;
+ Elf_Internal_Sym *isym;
enum elf_ppc64_reloc_type r_type;
int tls_type;
struct _ppc64_elf_section_data *ppc64_sec;
@@ -4746,9 +4790,15 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
r_symndx = ELF64_R_SYM (rel->r_info);
if (r_symndx < symtab_hdr->sh_info)
- h = NULL;
+ {
+ h = NULL;
+ isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache, abfd, r_symndx);
+ if (isym == NULL)
+ return false;
+ }
else
{
+ isym = NULL;
h = sym_hashes[r_symndx - symtab_hdr->sh_info];
h = elf_follow_link (h);
@@ -4819,11 +4869,6 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
}
else
{
- Elf_Internal_Sym *isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache,
- abfd, r_symndx);
- if (isym == NULL)
- return false;
-
if (ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC)
{
ifunc = update_local_sym_info (abfd, symtab_hdr, r_symndx,
@@ -5087,16 +5132,7 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
dest = h->root.u.def.section;
}
else
- {
- Elf_Internal_Sym *isym;
-
- isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache,
- abfd, r_symndx);
- if (isym == NULL)
- return false;
-
- dest = bfd_section_from_elf_index (abfd, isym->st_shndx);
- }
+ dest = bfd_section_from_elf_index (abfd, isym->st_shndx);
if (dest != sec)
ppc64_elf_section_data (sec)->has_14bit_branch = 1;
@@ -5288,35 +5324,21 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
if (NO_OPD_RELOCS && is_opd)
break;
- /* If we are creating a shared library, and this is a reloc
- against a global symbol, or a non PC relative reloc
- against a local symbol, then we need to copy the reloc
- into the shared library. However, if we are linking with
- -Bsymbolic, we do not need to copy a reloc against a
- global symbol which is defined in an object we are
- including in the link (i.e., DEF_REGULAR is set). At
- this point we have not seen all the input files, so it is
- possible that DEF_REGULAR is not set now but will be set
- later (it is never cleared). In case of a weak definition,
- DEF_REGULAR may be cleared later by a strong definition in
- a shared library. We account for that possibility below by
- storing information in the dyn_relocs field of the hash
- table entry. A similar situation occurs when creating
- shared libraries and symbol visibility changes render the
- symbol local.
-
- If on the other hand, we are creating an executable, we
- may need to keep relocations for symbols satisfied by a
- dynamic library if we manage to avoid copy relocs for the
- symbol. */
+ /* Set up information for symbols that might need dynamic
+ relocations. At this point in linking we have read all
+ the input files and resolved most symbols, but have not
+ yet decided whether symbols are dynamic or finalized
+ symbol flags. In some cases we might be setting dynamic
+ reloc info for symbols that do not end up needing such.
+ That's OK, adjust_dynamic_symbol and allocate_dynrelocs
+ work together with this code. */
dodyn:
if ((h != NULL
- && (h->root.type == bfd_link_hash_defweak
- || !h->def_regular))
- || (h != NULL
- && !bfd_link_executable (info)
- && !SYMBOLIC_BIND (info, h))
+ && !SYMBOL_REFERENCES_LOCAL (info, h))
|| (bfd_link_pic (info)
+ && (h != NULL
+ ? !bfd_is_abs_symbol (&h->root)
+ : isym->st_shndx != SHN_ABS)
&& must_be_dyn_reloc (info, r_type))
|| (!bfd_link_pic (info)
&& ifunc != NULL))
@@ -5337,10 +5359,10 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
relocations we need for this symbol. */
if (h != NULL)
{
- struct elf_dyn_relocs *p;
- struct elf_dyn_relocs **head;
+ struct ppc_dyn_relocs *p;
+ struct ppc_dyn_relocs **head;
- head = &h->dyn_relocs;
+ head = (struct ppc_dyn_relocs **) &h->dyn_relocs;
p = *head;
if (p == NULL || p->sec != sec)
{
@@ -5352,34 +5374,31 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
p->sec = sec;
p->count = 0;
p->pc_count = 0;
+ p->rel_count = 0;
}
p->count += 1;
if (!must_be_dyn_reloc (info, r_type))
p->pc_count += 1;
+ if ((r_type == R_PPC64_ADDR64 || r_type == R_PPC64_TOC)
+ && rel->r_offset % 2 == 0
+ && sec->alignment_power != 0)
+ p->rel_count += 1;
}
else
{
- /* Track dynamic relocs needed for local syms too.
- We really need local syms available to do this
- easily. Oh well. */
- struct ppc_dyn_relocs *p;
- struct ppc_dyn_relocs **head;
+ /* Track dynamic relocs needed for local syms too. */
+ struct ppc_local_dyn_relocs *p;
+ struct ppc_local_dyn_relocs **head;
bool is_ifunc;
asection *s;
void *vpp;
- Elf_Internal_Sym *isym;
-
- isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache,
- abfd, r_symndx);
- if (isym == NULL)
- return false;
s = bfd_section_from_elf_index (abfd, isym->st_shndx);
if (s == NULL)
s = sec;
vpp = &elf_section_data (s)->local_dynrel;
- head = (struct ppc_dyn_relocs **) vpp;
+ head = (struct ppc_local_dyn_relocs **) vpp;
is_ifunc = ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC;
p = *head;
if (p != NULL && p->sec == sec && p->ifunc != is_ifunc)
@@ -5392,10 +5411,15 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
p->next = *head;
*head = p;
p->sec = sec;
- p->ifunc = is_ifunc;
p->count = 0;
+ p->rel_count = 0;
+ p->ifunc = is_ifunc;
}
p->count += 1;
+ if ((r_type == R_PPC64_ADDR64 || r_type == R_PPC64_TOC)
+ && rel->r_offset % 2 == 0
+ && sec->alignment_power != 0)
+ p->rel_count += 1;
}
}
break;
@@ -6576,9 +6600,9 @@ alias_readonly_dynrelocs (struct elf_link_hash_entry *h)
static bool
pc_dynrelocs (struct ppc_link_hash_entry *eh)
{
- struct elf_dyn_relocs *p;
+ struct ppc_dyn_relocs *p;
- for (p = eh->elf.dyn_relocs; p != NULL; p = p->next)
+ for (p = (struct ppc_dyn_relocs *) eh->elf.dyn_relocs; p != NULL; p = p->next)
if (p->pc_count != 0)
return true;
return false;
@@ -7113,7 +7137,7 @@ adjust_opd_syms (struct elf_link_hash_entry *h, void *inf ATTRIBUTE_UNUSED)
have already been determined. */
static bool
-dec_dynrel_count (bfd_vma r_info,
+dec_dynrel_count (const Elf_Internal_Rela *rel,
asection *sec,
struct bfd_link_info *info,
Elf_Internal_Sym **local_syms,
@@ -7125,7 +7149,7 @@ dec_dynrel_count (bfd_vma r_info,
/* Can this reloc be dynamic? This switch, and later tests here
should be kept in sync with the code in check_relocs. */
- r_type = ELF64_R_TYPE (r_info);
+ r_type = ELF64_R_TYPE (rel->r_info);
switch (r_type)
{
default:
@@ -7199,18 +7223,17 @@ dec_dynrel_count (bfd_vma r_info,
unsigned long r_symndx;
bfd *ibfd = sec->owner;
- r_symndx = ELF64_R_SYM (r_info);
+ r_symndx = ELF64_R_SYM (rel->r_info);
if (!get_sym_h (&h, &sym, &sym_sec, NULL, local_syms, r_symndx, ibfd))
return false;
}
if ((h != NULL
- && (h->root.type == bfd_link_hash_defweak
- || !h->def_regular))
- || (h != NULL
- && !bfd_link_executable (info)
- && !SYMBOLIC_BIND (info, h))
+ && !SYMBOL_REFERENCES_LOCAL (info, h))
|| (bfd_link_pic (info)
+ && (h != NULL
+ ? !bfd_is_abs_symbol (&h->root)
+ : sym_sec != bfd_abs_section_ptr)
&& must_be_dyn_reloc (info, r_type))
|| (!bfd_link_pic (info)
&& (h != NULL
@@ -7222,9 +7245,9 @@ dec_dynrel_count (bfd_vma r_info,
if (h != NULL)
{
- struct elf_dyn_relocs *p;
- struct elf_dyn_relocs **pp;
- pp = &h->dyn_relocs;
+ struct ppc_dyn_relocs *p;
+ struct ppc_dyn_relocs **pp;
+ pp = (struct ppc_dyn_relocs **) &h->dyn_relocs;
/* elf_gc_sweep may have already removed all dyn relocs associated
with local syms for a given section. Also, symbol flags are
@@ -7239,6 +7262,10 @@ dec_dynrel_count (bfd_vma r_info,
{
if (!must_be_dyn_reloc (info, r_type))
p->pc_count -= 1;
+ if ((r_type == R_PPC64_ADDR64 || r_type == R_PPC64_TOC)
+ && rel->r_offset % 2 == 0
+ && sec->alignment_power != 0)
+ p->rel_count -= 1;
p->count -= 1;
if (p->count == 0)
*pp = p->next;
@@ -7249,8 +7276,8 @@ dec_dynrel_count (bfd_vma r_info,
}
else
{
- struct ppc_dyn_relocs *p;
- struct ppc_dyn_relocs **pp;
+ struct ppc_local_dyn_relocs *p;
+ struct ppc_local_dyn_relocs **pp;
void *vpp;
bool is_ifunc;
@@ -7260,7 +7287,7 @@ dec_dynrel_count (bfd_vma r_info,
sym_sec = sec;
vpp = &elf_section_data (sym_sec)->local_dynrel;
- pp = (struct ppc_dyn_relocs **) vpp;
+ pp = (struct ppc_local_dyn_relocs **) vpp;
if (*pp == NULL && info->gc_sections)
return true;
@@ -7270,6 +7297,10 @@ dec_dynrel_count (bfd_vma r_info,
{
if (p->sec == sec && p->ifunc == is_ifunc)
{
+ if ((r_type == R_PPC64_ADDR64 || r_type == R_PPC64_TOC)
+ && rel->r_offset % 2 == 0
+ && sec->alignment_power != 0)
+ p->rel_count -= 1;
p->count -= 1;
if (p->count == 0)
*pp = p->next;
@@ -7567,7 +7598,7 @@ ppc64_elf_edit_opd (struct bfd_link_info *info)
else
while (1)
{
- if (!dec_dynrel_count (rel->r_info, sec, info,
+ if (!dec_dynrel_count (rel, sec, info,
NULL, h, sym))
goto error_ret;
@@ -8587,13 +8618,13 @@ ppc64_elf_tls_optimize (struct bfd_link_info *info)
{
/* If we got rid of a DTPMOD/DTPREL reloc pair then
we'll lose one or two dyn relocs. */
- if (!dec_dynrel_count (rel->r_info, sec, info,
+ if (!dec_dynrel_count (rel, sec, info,
NULL, h, sym))
return false;
if (tls_set == (TLS_EXPLICIT | TLS_GD))
{
- if (!dec_dynrel_count ((rel + 1)->r_info, sec, info,
+ if (!dec_dynrel_count (rel + 1, sec, info,
NULL, h, sym))
return false;
}
@@ -9007,7 +9038,9 @@ ppc64_elf_edit_toc (struct bfd_link_info *info)
|| discarded_section (sym_sec))
continue;
- if (!SYMBOL_REFERENCES_LOCAL (info, h))
+ if (!SYMBOL_REFERENCES_LOCAL (info, h)
+ || (bfd_link_pic (info)
+ && sym_sec == bfd_abs_section_ptr))
continue;
if (h != NULL)
@@ -9419,7 +9452,7 @@ ppc64_elf_edit_toc (struct bfd_link_info *info)
wrel->r_addend = rel->r_addend;
++wrel;
}
- else if (!dec_dynrel_count (rel->r_info, toc, info,
+ else if (!dec_dynrel_count (rel, toc, info,
&local_syms, NULL, NULL))
goto error_ret;
@@ -9589,7 +9622,9 @@ ppc64_elf_edit_toc (struct bfd_link_info *info)
if ((h ? h->type : ELF_ST_TYPE (sym->st_info)) == STT_GNU_IFUNC)
continue;
- if (!SYMBOL_REFERENCES_LOCAL (info, h))
+ if (!SYMBOL_REFERENCES_LOCAL (info, h)
+ || (bfd_link_pic (info)
+ && sym_sec == bfd_abs_section_ptr))
continue;
if (h != NULL)
@@ -9720,9 +9755,11 @@ allocate_got (struct elf_link_hash_entry *h,
htab->got_reli_size += rentsize;
}
else if (((bfd_link_pic (info)
- && !(gent->tls_type != 0
- && bfd_link_executable (info)
- && SYMBOL_REFERENCES_LOCAL (info, h)))
+ && (gent->tls_type == 0
+ ? !info->enable_dt_relr
+ : !(bfd_link_executable (info)
+ && SYMBOL_REFERENCES_LOCAL (info, h)))
+ && !bfd_is_abs_symbol (&h->root))
|| (htab->elf.dynamic_sections_created
&& h->dynindx != -1
&& !SYMBOL_REFERENCES_LOCAL (info, h)))
@@ -9884,7 +9921,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
if (h->dyn_relocs != NULL)
{
- struct elf_dyn_relocs *p, **pp;
+ struct ppc_dyn_relocs *p, **pp;
/* In the shared -Bsymbolic case, discard space allocated for
dynamic pc-relative relocs against symbols which turn out to
@@ -9902,7 +9939,9 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
avoid writing weird assembly. */
if (SYMBOL_CALLS_LOCAL (info, h))
{
- for (pp = &h->dyn_relocs; (p = *pp) != NULL; )
+ for (pp = (struct ppc_dyn_relocs **) &h->dyn_relocs;
+ (p = *pp) != NULL;
+ )
{
p->count -= p->pc_count;
p->pc_count = 0;
@@ -9948,12 +9987,20 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
}
/* Finally, allocate space. */
- for (p = h->dyn_relocs; p != NULL; p = p->next)
+ for (p = (struct ppc_dyn_relocs *) h->dyn_relocs; p != NULL; p = p->next)
{
+ unsigned int count;
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);
+ count = p->count;
+ if (info->enable_dt_relr
+ && ((!NO_OPD_RELOCS
+ && ppc64_elf_section_data (p->sec)->sec_type == sec_opd)
+ || (eh->elf.type != STT_GNU_IFUNC
+ && SYMBOL_REFERENCES_LOCAL (info, h))))
+ count -= p->rel_count;
+ sreloc->size += count * sizeof (Elf64_External_Rela);
}
}
@@ -9994,7 +10041,10 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
s = htab->pltlocal;
pent->plt.offset = s->size;
s->size += LOCAL_PLT_ENTRY_SIZE (htab);
- s = bfd_link_pic (info) ? htab->relpltlocal : NULL;
+ s = NULL;
+ if (bfd_link_pic (info)
+ && !(info->enable_dt_relr && !htab->opd_abi))
+ s = htab->relpltlocal;
}
}
else
@@ -10174,13 +10224,15 @@ ppc64_elf_size_dynamic_sections (bfd *output_bfd,
unsigned char *lgot_masks;
bfd_size_type locsymcount;
Elf_Internal_Shdr *symtab_hdr;
+ Elf_Internal_Sym *local_syms;
+ Elf_Internal_Sym *isym;
if (!is_ppc64_elf (ibfd))
continue;
for (s = ibfd->sections; s != NULL; s = s->next)
{
- struct ppc_dyn_relocs *p;
+ struct ppc_local_dyn_relocs *p;
for (p = elf_section_data (s)->local_dynrel; p != NULL; p = p->next)
{
@@ -10194,10 +10246,20 @@ ppc64_elf_size_dynamic_sections (bfd *output_bfd,
}
else if (p->count != 0)
{
- asection *srel = elf_section_data (p->sec)->sreloc;
+ unsigned int count;
+ asection *srel;
+
+ count = p->count;
+ if (info->enable_dt_relr
+ && ((!NO_OPD_RELOCS
+ && (ppc64_elf_section_data (p->sec)->sec_type
+ == sec_opd))
+ || !p->ifunc))
+ count -= p->rel_count;
+ srel = elf_section_data (p->sec)->sreloc;
if (p->ifunc)
srel = htab->elf.irelplt;
- srel->size += p->count * sizeof (Elf64_External_Rela);
+ srel->size += count * sizeof (Elf64_External_Rela);
if ((p->sec->output_section->flags & SEC_READONLY) != 0)
info->flags |= DF_TEXTREL;
}
@@ -10214,8 +10276,18 @@ ppc64_elf_size_dynamic_sections (bfd *output_bfd,
local_plt = (struct plt_entry **) end_lgot_ents;
end_local_plt = local_plt + locsymcount;
lgot_masks = (unsigned char *) end_local_plt;
+ local_syms = (Elf_Internal_Sym *) symtab_hdr->contents;
+ if (local_syms == NULL && locsymcount != 0)
+ {
+ local_syms = bfd_elf_get_elf_syms (ibfd, symtab_hdr, locsymcount,
+ 0, NULL, NULL, NULL);
+ if (local_syms == NULL)
+ return false;
+ }
s = ppc64_elf_tdata (ibfd)->got;
- for (; lgot_ents < end_lgot_ents; ++lgot_ents, ++lgot_masks)
+ for (isym = local_syms;
+ lgot_ents < end_lgot_ents;
+ ++lgot_ents, ++lgot_masks, isym++)
{
struct got_entry **pent, *ent;
@@ -10246,8 +10318,10 @@ ppc64_elf_size_dynamic_sections (bfd *output_bfd,
htab->got_reli_size += rel_size;
}
else if (bfd_link_pic (info)
- && !(ent->tls_type != 0
- && bfd_link_executable (info)))
+ && (ent->tls_type == 0
+ ? !info->enable_dt_relr
+ : !bfd_link_executable (info))
+ && isym->st_shndx != SHN_ABS)
{
asection *srel = ppc64_elf_tdata (ibfd)->relgot;
srel->size += rel_size;
@@ -10258,6 +10332,14 @@ ppc64_elf_size_dynamic_sections (bfd *output_bfd,
else
*pent = ent->next;
}
+ 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;
+ }
/* Allocate space for plt calls to local syms. */
lgot_masks = (unsigned char *) end_local_plt;
@@ -10283,7 +10365,8 @@ ppc64_elf_size_dynamic_sections (bfd *output_bfd,
s = htab->pltlocal;
ent->plt.offset = s->size;
s->size += LOCAL_PLT_ENTRY_SIZE (htab);
- if (bfd_link_pic (info))
+ if (bfd_link_pic (info)
+ && !(info->enable_dt_relr && !htab->opd_abi))
htab->relpltlocal->size += sizeof (Elf64_External_Rela);
}
}
@@ -10342,7 +10425,7 @@ ppc64_elf_size_dynamic_sections (bfd *output_bfd,
if ((s->flags & SEC_LINKER_CREATED) == 0)
continue;
- if (s == htab->brlt || s == htab->relbrlt)
+ if (s == htab->brlt || s == htab->relbrlt || s == htab->elf.srelrdyn)
/* These haven't been allocated yet; don't strip. */
continue;
else if (s == htab->elf.sgot
@@ -11090,12 +11173,12 @@ plt_stub_size (struct ppc_link_hash_table *htab,
static inline unsigned int
plt_stub_pad (struct ppc_link_hash_table *htab,
struct ppc_stub_hash_entry *stub_entry,
+ bfd_vma stub_off,
bfd_vma plt_off,
unsigned int odd)
{
int stub_align;
unsigned stub_size;
- bfd_vma stub_off = stub_entry->group->stub_sec->size;
if (htab->params->plt_stub_align >= 0)
{
@@ -11693,7 +11776,7 @@ ppc_build_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
{
br_entry->iter = 0;
- if (htab->relbrlt != NULL)
+ if (htab->relbrlt != NULL && !info->enable_dt_relr)
{
/* Create a reloc for the branch lookup table entry. */
Elf_Internal_Rela rela;
@@ -12090,6 +12173,7 @@ ppc_size_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
asection *plt;
bfd_vma targ, off, r2off;
unsigned int size, extra, lr_used, delta, odd;
+ bfd_vma stub_offset;
/* Massage our args to the form they really have. */
stub_entry = (struct ppc_stub_hash_entry *) gen_entry;
@@ -12119,7 +12203,10 @@ ppc_size_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
stub_entry->target_section);
/* Make a note of the offset within the stubs for this entry. */
- stub_entry->stub_offset = stub_entry->group->stub_sec->size;
+ stub_offset = stub_entry->group->stub_sec->size;
+ if (htab->stub_iteration > STUB_SHRINK_ITER
+ && stub_entry->stub_offset > stub_offset)
+ stub_offset = stub_entry->stub_offset;
if (stub_entry->h != NULL
&& stub_entry->h->save_res
@@ -12149,7 +12236,7 @@ ppc_size_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
+ stub_entry->target_section->output_offset
+ stub_entry->target_section->output_section->vma);
targ += PPC64_LOCAL_ENTRY_OFFSET (stub_entry->other);
- off = (stub_entry->stub_offset
+ off = (stub_offset
+ stub_entry->group->stub_sec->output_offset
+ stub_entry->group->stub_sec->output_section->vma);
@@ -12198,7 +12285,7 @@ ppc_size_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
br_entry->offset = htab->brlt->size;
htab->brlt->size += 8;
- if (htab->relbrlt != NULL)
+ if (htab->relbrlt != NULL && !info->enable_dt_relr)
htab->relbrlt->size += sizeof (Elf64_External_Rela);
else if (info->emitrelocations)
{
@@ -12248,7 +12335,7 @@ ppc_size_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
}
else if (stub_entry->type.main == ppc_stub_long_branch)
{
- off = (stub_entry->stub_offset
+ off = (stub_offset
+ stub_entry->group->stub_sec->output_offset
+ stub_entry->group->stub_sec->output_section->vma);
size = 0;
@@ -12287,7 +12374,7 @@ ppc_size_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
{
/* After the bcl, lr has been modified so we need to emit
.eh_frame info saying the return address is in r12. */
- lr_used = stub_entry->stub_offset + 8;
+ lr_used = stub_offset + 8;
if (stub_entry->type.r2save)
lr_used += 4;
/* The eh_frame info will consist of a DW_CFA_advance_loc or
@@ -12336,7 +12423,7 @@ ppc_size_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
plt = htab->pltlocal;
}
targ += plt->output_offset + plt->output_section->vma;
- off = (stub_entry->stub_offset
+ off = (stub_offset
+ stub_entry->group->stub_sec->output_offset
+ stub_entry->group->stub_sec->output_section->vma
+ lr_used);
@@ -12345,10 +12432,9 @@ ppc_size_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
if (htab->params->plt_stub_align != 0)
{
- unsigned pad = plt_stub_pad (htab, stub_entry, off, odd);
+ unsigned pad = plt_stub_pad (htab, stub_entry, stub_offset, off, odd);
- stub_entry->group->stub_sec->size += pad;
- stub_entry->stub_offset = stub_entry->group->stub_sec->size;
+ stub_offset += pad;
off -= pad;
odd ^= pad & 4;
}
@@ -12370,7 +12456,7 @@ ppc_size_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
{
/* After the bcl, lr has been modified so we need to emit
.eh_frame info saying the return address is in r12. */
- lr_used += stub_entry->stub_offset + 8;
+ lr_used += stub_offset + 8;
/* The eh_frame info will consist of a DW_CFA_advance_loc or
variant, DW_CFA_register, 65, 12, DW_CFA_advance_loc+2,
DW_CFA_restore_extended 65. */
@@ -12384,20 +12470,18 @@ ppc_size_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
{
if (!htab->params->no_tls_get_addr_regsave)
{
- unsigned int cfa_updt = stub_entry->stub_offset + 18 * 4;
+ unsigned int cfa_updt = stub_offset + 18 * 4;
delta = cfa_updt - stub_entry->group->lr_restore;
stub_entry->group->eh_size += eh_advance_size (delta);
stub_entry->group->eh_size += htab->opd_abi ? 36 : 35;
- stub_entry->group->lr_restore
- = stub_entry->stub_offset + size - 4;
+ stub_entry->group->lr_restore = stub_offset + size - 4;
}
else if (stub_entry->type.r2save)
{
- lr_used = stub_entry->stub_offset + size - 20;
+ lr_used = stub_offset + size - 20;
delta = lr_used - stub_entry->group->lr_restore;
stub_entry->group->eh_size += eh_advance_size (delta) + 6;
- stub_entry->group->lr_restore
- = stub_entry->stub_offset + size - 4;
+ stub_entry->group->lr_restore = stub_offset + size - 4;
}
}
}
@@ -12422,10 +12506,9 @@ ppc_size_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
if (htab->params->plt_stub_align != 0)
{
- unsigned pad = plt_stub_pad (htab, stub_entry, off, 0);
+ unsigned pad = plt_stub_pad (htab, stub_entry, stub_offset, off, 0);
- stub_entry->group->stub_sec->size += pad;
- stub_entry->stub_offset = stub_entry->group->stub_sec->size;
+ stub_offset += pad;
}
if (info->emitrelocations)
@@ -12449,21 +12532,21 @@ ppc_size_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
if (!htab->params->no_tls_get_addr_regsave)
{
/* Adjustments to r1 need to be described. */
- unsigned int cfa_updt = stub_entry->stub_offset + 18 * 4;
+ unsigned int cfa_updt = stub_offset + 18 * 4;
delta = cfa_updt - stub_entry->group->lr_restore;
stub_entry->group->eh_size += eh_advance_size (delta);
stub_entry->group->eh_size += htab->opd_abi ? 36 : 35;
}
else
{
- lr_used = stub_entry->stub_offset + size - 20;
+ lr_used = stub_offset + size - 20;
/* The eh_frame info will consist of a DW_CFA_advance_loc
or variant, DW_CFA_offset_externed_sf, 65, -stackoff,
DW_CFA_advance_loc+4, DW_CFA_restore_extended, 65. */
delta = lr_used - stub_entry->group->lr_restore;
stub_entry->group->eh_size += eh_advance_size (delta) + 6;
}
- stub_entry->group->lr_restore = stub_entry->stub_offset + size - 4;
+ stub_entry->group->lr_restore = stub_offset + size - 4;
}
}
else
@@ -12472,7 +12555,10 @@ ppc_size_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
return false;
}
- stub_entry->group->stub_sec->size += size;
+ if (stub_entry->stub_offset != stub_offset)
+ htab->stub_changed = true;
+ stub_entry->stub_offset = stub_offset;
+ stub_entry->group->stub_sec->size = stub_offset + size;
return true;
}
@@ -12706,6 +12792,8 @@ ppc64_elf_layout_multitoc (struct bfd_link_info *info)
bfd_size_type locsymcount;
Elf_Internal_Shdr *symtab_hdr;
asection *s;
+ Elf_Internal_Sym *local_syms;
+ Elf_Internal_Sym *isym;
if (!is_ppc64_elf (ibfd))
continue;
@@ -12720,8 +12808,18 @@ ppc64_elf_layout_multitoc (struct bfd_link_info *info)
local_plt = (struct plt_entry **) end_lgot_ents;
end_local_plt = local_plt + locsymcount;
lgot_masks = (unsigned char *) end_local_plt;
+ local_syms = (Elf_Internal_Sym *) symtab_hdr->contents;
+ if (local_syms == NULL && locsymcount != 0)
+ {
+ local_syms = bfd_elf_get_elf_syms (ibfd, symtab_hdr, locsymcount,
+ 0, NULL, NULL, NULL);
+ if (local_syms == NULL)
+ return false;
+ }
s = ppc64_elf_tdata (ibfd)->got;
- for (; lgot_ents < end_lgot_ents; ++lgot_ents, ++lgot_masks)
+ for (isym = local_syms;
+ lgot_ents < end_lgot_ents;
+ ++lgot_ents, ++lgot_masks, isym++)
{
struct got_entry *ent;
@@ -12743,8 +12841,10 @@ ppc64_elf_layout_multitoc (struct bfd_link_info *info)
htab->got_reli_size += rel_size;
}
else if (bfd_link_pic (info)
- && !(ent->tls_type != 0
- && bfd_link_executable (info)))
+ && (ent->tls_type == 0
+ ? !info->enable_dt_relr
+ : !bfd_link_executable (info))
+ && isym->st_shndx != SHN_ABS)
{
asection *srel = ppc64_elf_tdata (ibfd)->relgot;
srel->size += rel_size;
@@ -13128,8 +13228,10 @@ check_pasted_section (struct bfd_link_info *info, const char *name)
bool
ppc64_elf_check_init_fini (struct bfd_link_info *info)
{
- return (check_pasted_section (info, ".init")
- & check_pasted_section (info, ".fini"));
+ bool ret1 = check_pasted_section (info, ".init");
+ bool ret2 = check_pasted_section (info, ".fini");
+
+ return ret1 && ret2;
}
/* See whether we can group stub sections together. Grouping stub
@@ -13293,6 +13395,201 @@ maybe_strip_output (struct bfd_link_info *info, asection *isec)
}
}
+/* Stash R_PPC64_RELATIVE reloc at input section SEC, r_offset OFF to
+ the array of such relocs. */
+
+static bool
+append_relr_off (struct ppc_link_hash_table *htab, asection *sec, bfd_vma off)
+{
+ if (htab->relr_count >= htab->relr_alloc)
+ {
+ if (htab->relr_alloc == 0)
+ htab->relr_alloc = 4096;
+ else
+ htab->relr_alloc *= 2;
+ htab->relr = bfd_realloc (htab->relr,
+ htab->relr_alloc * sizeof (*htab->relr));
+ if (htab->relr == NULL)
+ return false;
+ }
+ htab->relr[htab->relr_count].sec = sec;
+ htab->relr[htab->relr_count].off = off;
+ htab->relr_count++;
+ return true;
+}
+
+/* qsort comparator for bfd_vma args. */
+
+static int
+compare_relr_address (const void *arg1, const void *arg2)
+{
+ bfd_vma a = *(bfd_vma *) arg1;
+ bfd_vma b = *(bfd_vma *) arg2;
+ return a < b ? -1 : a > b ? 1 : 0;
+}
+
+/* Produce a malloc'd sorted array of reloc addresses from the info
+ stored by append_relr_off. */
+
+static bfd_vma *
+sort_relr (struct ppc_link_hash_table *htab)
+{
+ bfd_vma *addr = bfd_malloc (htab->relr_count * sizeof (*addr));
+ if (addr == NULL)
+ return NULL;
+
+ for (size_t i = 0; i < htab->relr_count; i++)
+ addr[i] = (htab->relr[i].sec->output_section->vma
+ + htab->relr[i].sec->output_offset
+ + htab->relr[i].off);
+
+ if (htab->relr_count > 1)
+ qsort (addr, htab->relr_count, sizeof (*addr), compare_relr_address);
+
+ return addr;
+}
+
+/* Look over GOT and PLT entries saved on elf_local_got_ents for all
+ input files, stashing info about needed relative relocs. */
+
+static bool
+got_and_plt_relr_for_local_syms (struct bfd_link_info *info)
+{
+ struct ppc_link_hash_table *htab = ppc_hash_table (info);
+ bfd *ibfd;
+
+ for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
+ {
+ struct got_entry **lgot_ents, **lgot, **end_lgot_ents;
+ struct plt_entry **local_plt, **lplt, **end_local_plt;
+ Elf_Internal_Shdr *symtab_hdr;
+ bfd_size_type locsymcount;
+ Elf_Internal_Sym *local_syms;
+ Elf_Internal_Sym *isym;
+ struct plt_entry *pent;
+ struct got_entry *gent;
+
+ if (!is_ppc64_elf (ibfd))
+ continue;
+
+ lgot_ents = elf_local_got_ents (ibfd);
+ if (!lgot_ents)
+ continue;
+
+ symtab_hdr = &elf_symtab_hdr (ibfd);
+ locsymcount = symtab_hdr->sh_info;
+ local_syms = (Elf_Internal_Sym *) symtab_hdr->contents;
+ if (local_syms == NULL && locsymcount != 0)
+ {
+ local_syms = bfd_elf_get_elf_syms (ibfd, symtab_hdr, locsymcount,
+ 0, NULL, NULL, NULL);
+ if (local_syms == NULL)
+ return false;
+ }
+ end_lgot_ents = lgot_ents + locsymcount;
+ local_plt = (struct plt_entry **) end_lgot_ents;
+ end_local_plt = local_plt + locsymcount;
+ for (lgot = lgot_ents, isym = local_syms;
+ lgot < end_lgot_ents;
+ ++lgot, ++isym)
+ for (gent = *lgot; gent != NULL; gent = gent->next)
+ if (!gent->is_indirect
+ && gent->tls_type == 0
+ && gent->got.offset != (bfd_vma) -1
+ && isym->st_shndx != SHN_ABS)
+ {
+ asection *got = ppc64_elf_tdata (gent->owner)->got;
+ if (!append_relr_off (htab, got, gent->got.offset))
+ {
+ htab->stub_error = true;
+ return false;
+ }
+ }
+
+ if (!htab->opd_abi)
+ for (lplt = local_plt, isym = local_syms;
+ lplt < end_local_plt;
+ ++lplt, ++isym)
+ for (pent = *lplt; pent != NULL; pent = pent->next)
+ if (pent->plt.offset != (bfd_vma) -1
+ && ELF_ST_TYPE (isym->st_info) != STT_GNU_IFUNC)
+ {
+ if (!append_relr_off (htab, htab->pltlocal, pent->plt.offset))
+ {
+ if (symtab_hdr->contents != (unsigned char *) local_syms)
+ free (local_syms);
+ return false;
+ }
+ }
+
+ 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;
+ }
+ }
+ return true;
+}
+
+/* Stash info about needed GOT and PLT entry relative relocs for
+ global symbol H. */
+
+static bool
+got_and_plt_relr (struct elf_link_hash_entry *h, void *inf)
+{
+ struct bfd_link_info *info;
+ struct ppc_link_hash_table *htab;
+ struct plt_entry *pent;
+ struct got_entry *gent;
+
+ if (h->root.type == bfd_link_hash_indirect)
+ return true;
+
+ info = (struct bfd_link_info *) inf;
+ htab = ppc_hash_table (info);
+ if (htab == NULL)
+ return false;
+
+ if (h->type != STT_GNU_IFUNC
+ && h->def_regular
+ && (h->root.type == bfd_link_hash_defined
+ || h->root.type == bfd_link_hash_defweak))
+ {
+ if ((!htab->elf.dynamic_sections_created
+ || h->dynindx == -1
+ || SYMBOL_REFERENCES_LOCAL (info, h))
+ && !bfd_is_abs_symbol (&h->root))
+ for (gent = h->got.glist; gent != NULL; gent = gent->next)
+ if (!gent->is_indirect
+ && gent->tls_type == 0
+ && gent->got.offset != (bfd_vma) -1)
+ {
+ asection *got = ppc64_elf_tdata (gent->owner)->got;
+ if (!append_relr_off (htab, got, gent->got.offset))
+ {
+ htab->stub_error = true;
+ return false;
+ }
+ }
+
+ if (!htab->opd_abi
+ && use_local_plt (info, h))
+ for (pent = h->plt.plist; pent != NULL; pent = pent->next)
+ if (pent->plt.offset != (bfd_vma) -1)
+ {
+ if (!append_relr_off (htab, htab->pltlocal, pent->plt.offset))
+ {
+ htab->stub_error = true;
+ return false;
+ }
+ }
+ }
+ 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
@@ -13399,12 +13696,8 @@ ppc64_elf_size_stubs (struct bfd_link_info *info)
_bfd_elf_link_hash_hide_symbol (info, &htab->tga_desc_fd->elf, true);
}
-#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. */
+ exit on a stub section shrinking. */
while (1)
{
@@ -13413,6 +13706,7 @@ ppc64_elf_size_stubs (struct bfd_link_info *info)
struct map_stub *group;
htab->stub_iteration += 1;
+ htab->relr_count = 0;
for (input_bfd = info->input_bfds, bfd_indx = 0;
input_bfd != NULL;
@@ -13436,16 +13730,20 @@ ppc64_elf_size_stubs (struct bfd_link_info *info)
section = section->next)
{
Elf_Internal_Rela *internal_relocs, *irelaend, *irela;
+ bool is_opd;
/* If there aren't any relocs, then there's nothing more
to do. */
if ((section->flags & SEC_RELOC) == 0
|| (section->flags & SEC_ALLOC) == 0
|| (section->flags & SEC_LOAD) == 0
- || (section->flags & SEC_CODE) == 0
|| section->reloc_count == 0)
continue;
+ if (!info->enable_dt_relr
+ && (section->flags & SEC_CODE) == 0)
+ continue;
+
/* If this section is a link-once section that will be
discarded, then don't create any stubs. */
if (section->output_section == NULL
@@ -13459,6 +13757,8 @@ ppc64_elf_size_stubs (struct bfd_link_info *info)
if (internal_relocs == NULL)
goto error_ret_free_local;
+ is_opd = ppc64_elf_section_data (section)->sec_type == sec_opd;
+
/* Now examine each relocation. */
irela = internal_relocs;
irelaend = irela + section->reloc_count;
@@ -13492,21 +13792,78 @@ ppc64_elf_size_stubs (struct bfd_link_info *info)
}
/* Only look for stubs on branch instructions. */
- if (r_type != R_PPC64_REL24
- && r_type != R_PPC64_REL24_NOTOC
- && r_type != R_PPC64_REL24_P9NOTOC
- && r_type != R_PPC64_REL14
- && r_type != R_PPC64_REL14_BRTAKEN
- && r_type != R_PPC64_REL14_BRNTAKEN)
- continue;
+ switch (r_type)
+ {
+ default:
+ continue;
+
+ case R_PPC64_REL24:
+ case R_PPC64_REL24_NOTOC:
+ case R_PPC64_REL24_P9NOTOC:
+ case R_PPC64_REL14:
+ case R_PPC64_REL14_BRTAKEN:
+ case R_PPC64_REL14_BRNTAKEN:
+ if ((section->flags & SEC_CODE) != 0)
+ break;
+ continue;
+
+ case R_PPC64_ADDR64:
+ case R_PPC64_TOC:
+ if (info->enable_dt_relr
+ && irela->r_offset % 2 == 0
+ && section->alignment_power != 0)
+ break;
+ continue;
+ }
/* Now determine the call target, its name, value,
section. */
if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
r_indx, input_bfd))
goto error_ret_free_internal;
- hash = ppc_elf_hash_entry (h);
+ if (r_type == R_PPC64_ADDR64 || r_type == R_PPC64_TOC)
+ {
+ /* Only locally defined symbols can possibly use
+ relative relocations. */
+ bfd_vma r_offset;
+ if ((sym_sec == NULL
+ || sym_sec->output_section == NULL)
+ /* No symbol is OK too. */
+ && !(sym != NULL && sym->st_shndx == 0)
+ /* Hack for __ehdr_start, which is undefined
+ at this point. */
+ && !(h != NULL && h->root.linker_def))
+ continue;
+ if (NO_OPD_RELOCS && is_opd)
+ continue;
+ if (!is_opd
+ && r_type == R_PPC64_ADDR64)
+ {
+ if (h != NULL
+ ? h->type == STT_GNU_IFUNC
+ : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)
+ continue;
+ if (h != NULL
+ ? bfd_is_abs_symbol (&h->root)
+ : sym->st_shndx == SHN_ABS)
+ continue;
+ if (h != NULL
+ && !SYMBOL_REFERENCES_LOCAL (info, h))
+ continue;
+ }
+ r_offset = _bfd_elf_section_offset (info->output_bfd,
+ info,
+ section,
+ irela->r_offset);
+ if (r_offset >= (bfd_vma) -2)
+ continue;
+ if (!append_relr_off (htab, section, r_offset))
+ goto error_ret_free_internal;
+ continue;
+ }
+
+ hash = ppc_elf_hash_entry (h);
ok_dest = false;
fdh = NULL;
sym_value = 0;
@@ -13777,10 +14134,7 @@ ppc64_elf_size_stubs (struct bfd_link_info *info)
{
asection *stub_sec = group->stub_sec;
- if (htab->stub_iteration <= STUB_SHRINK_ITER
- || stub_sec->rawsize < stub_sec->size)
- /* Past STUB_SHRINK_ITER, rawsize is the max size seen. */
- stub_sec->rawsize = stub_sec->size;
+ stub_sec->rawsize = stub_sec->size;
stub_sec->size = 0;
stub_sec->reloc_count = 0;
stub_sec->flags &= ~SEC_RELOC;
@@ -13795,15 +14149,20 @@ ppc64_elf_size_stubs (struct bfd_link_info *info)
htab->tga_group->stub_sec->size = 24 * 4;
}
- if (htab->stub_iteration <= STUB_SHRINK_ITER
- || htab->brlt->rawsize < htab->brlt->size)
- htab->brlt->rawsize = htab->brlt->size;
+ htab->brlt->rawsize = htab->brlt->size;
htab->brlt->size = 0;
htab->brlt->reloc_count = 0;
htab->brlt->flags &= ~SEC_RELOC;
if (htab->relbrlt != NULL)
htab->relbrlt->size = 0;
+ if (htab->elf.srelrdyn != NULL)
+ {
+ htab->elf.srelrdyn->rawsize = htab->elf.srelrdyn->size;
+ htab->elf.srelrdyn->size = 0;
+ }
+
+ htab->stub_changed = false;
bfd_hash_traverse (&htab->stub_hash_table, ppc_size_one_stub, info);
for (group = htab->group; group != NULL; group = group->next)
@@ -13845,6 +14204,52 @@ ppc64_elf_size_stubs (struct bfd_link_info *info)
= (group->stub_sec->size + (1 << align) - 1) & -(1 << align);
}
+ if (htab->elf.srelrdyn != NULL)
+ {
+ bfd_vma r_offset;
+
+ for (r_offset = 0; r_offset < htab->brlt->size; r_offset += 8)
+ if (!append_relr_off (htab, htab->brlt, r_offset))
+ return false;
+
+ if (!got_and_plt_relr_for_local_syms (info))
+ return false;
+ elf_link_hash_traverse (&htab->elf, got_and_plt_relr, info);
+ if (htab->stub_error)
+ return false;
+
+ bfd_vma *relr_addr = sort_relr (htab);
+ if (htab->relr_count != 0 && relr_addr == NULL)
+ return false;
+
+ size_t i = 0;
+ while (i < htab->relr_count)
+ {
+ bfd_vma base = relr_addr[i];
+ htab->elf.srelrdyn->size += 8;
+ i++;
+ /* Handle possible duplicate address. This can happen
+ as sections increase in size when adding stubs. */
+ while (i < htab->relr_count
+ && relr_addr[i] == base)
+ i++;
+ base += 8;
+ while (1)
+ {
+ size_t start_i = i;
+ while (i < htab->relr_count
+ && relr_addr[i] - base < 63 * 8
+ && (relr_addr[i] - base) % 8 == 0)
+ i++;
+ if (i == start_i)
+ break;
+ htab->elf.srelrdyn->size += 8;
+ base += 63 * 8;
+ }
+ }
+ free (relr_addr);
+ }
+
for (group = htab->group; group != NULL; group = group->next)
if (group->stub_sec != NULL
&& group->stub_sec->rawsize != group->stub_sec->size
@@ -13853,15 +14258,36 @@ ppc64_elf_size_stubs (struct bfd_link_info *info)
break;
if (group == NULL
+ && (!htab->stub_changed
+ || htab->stub_iteration > STUB_SHRINK_ITER)
&& (htab->brlt->rawsize == htab->brlt->size
|| (htab->stub_iteration > STUB_SHRINK_ITER
&& htab->brlt->rawsize > htab->brlt->size))
+ && (htab->elf.srelrdyn == NULL
+ || htab->elf.srelrdyn->rawsize == htab->elf.srelrdyn->size
+ || (htab->stub_iteration > STUB_SHRINK_ITER
+ && htab->elf.srelrdyn->rawsize > htab->elf.srelrdyn->size))
&& (htab->glink_eh_frame == NULL
|| htab->glink_eh_frame->rawsize == htab->glink_eh_frame->size)
&& (htab->tga_group == NULL
|| htab->stub_iteration > 1))
break;
+ if (htab->stub_iteration > STUB_SHRINK_ITER)
+ {
+ for (group = htab->group; group != NULL; group = group->next)
+ if (group->stub_sec != NULL
+ && group->stub_sec->size < group->stub_sec->rawsize)
+ group->stub_sec->size = group->stub_sec->rawsize;
+
+ if (htab->brlt->size < htab->brlt->rawsize)
+ htab->brlt->size = htab->brlt->rawsize;
+
+ if (htab->elf.srelrdyn != NULL
+ && htab->elf.srelrdyn->size < htab->elf.srelrdyn->rawsize)
+ htab->elf.srelrdyn->size = htab->elf.srelrdyn->rawsize;
+ }
+
/* Ask the linker to do its stuff. */
(*htab->params->layout_sections_again) ();
}
@@ -13959,6 +14385,8 @@ ppc64_elf_size_stubs (struct bfd_link_info *info)
maybe_strip_output (info, htab->relbrlt);
if (htab->glink_eh_frame != NULL)
maybe_strip_output (info, htab->glink_eh_frame);
+ if (htab->elf.srelrdyn != NULL)
+ maybe_strip_output (info, htab->elf.srelrdyn);
return true;
}
@@ -14120,7 +14548,9 @@ build_global_entry_stubs_and_plt (struct elf_link_hash_entry *h, void *inf)
else
{
plt = htab->pltlocal;
- if (bfd_link_pic (info))
+ relplt = NULL;
+ if (bfd_link_pic (info)
+ && !(info->enable_dt_relr && !htab->opd_abi))
{
relplt = htab->relpltlocal;
if (htab->opd_abi)
@@ -14128,8 +14558,6 @@ build_global_entry_stubs_and_plt (struct elf_link_hash_entry *h, void *inf)
else
rela.r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE);
}
- else
- relplt = NULL;
}
rela.r_addend = defined_sym_val (h) + ent->addend;
@@ -14311,7 +14739,10 @@ write_plt_relocs_for_local_syms (struct bfd_link_info *info)
else
{
plt = htab->pltlocal;
- relplt = bfd_link_pic (info) ? htab->relpltlocal : NULL;
+ relplt = NULL;
+ if (bfd_link_pic (info)
+ && !(info->enable_dt_relr && !htab->opd_abi))
+ relplt = htab->relpltlocal;
}
if (relplt == NULL)
@@ -14749,6 +15180,60 @@ ppc64_elf_build_stubs (struct bfd_link_info *info,
}
}
+ if (htab->elf.srelrdyn != NULL && htab->elf.srelrdyn->size != 0)
+ {
+ htab->elf.srelrdyn->contents
+ = bfd_alloc (htab->elf.dynobj, htab->elf.srelrdyn->size);
+ if (htab->elf.srelrdyn->contents == NULL)
+ return false;
+
+ bfd_vma *relr_addr = sort_relr (htab);
+ if (htab->relr_count != 0 && relr_addr == NULL)
+ return false;
+
+ size_t i = 0;
+ bfd_byte *loc = htab->elf.srelrdyn->contents;
+ while (i < htab->relr_count)
+ {
+ bfd_vma base = relr_addr[i];
+ BFD_ASSERT (base % 2 == 0);
+ bfd_put_64 (htab->elf.dynobj, base, loc);
+ loc += 8;
+ i++;
+ while (i < htab->relr_count
+ && relr_addr[i] == base)
+ {
+ htab->stub_error = true;
+ i++;
+ }
+ base += 8;
+ while (1)
+ {
+ bfd_vma bits = 0;
+ while (i < htab->relr_count
+ && relr_addr[i] - base < 63 * 8
+ && (relr_addr[i] - base) % 8 == 0)
+ {
+ bits |= (bfd_vma) 1 << ((relr_addr[i] - base) / 8);
+ i++;
+ }
+ if (bits == 0)
+ break;
+ bfd_put_64 (htab->elf.dynobj, (bits << 1) | 1, loc);
+ loc += 8;
+ base += 63 * 8;
+ }
+ }
+ free (relr_addr);
+ /* Pad any excess with 1's, a do-nothing encoding. */
+ while ((size_t) (loc - htab->elf.srelrdyn->contents)
+ < htab->elf.srelrdyn->size)
+ {
+ bfd_put_64 (htab->elf.dynobj, 1, loc);
+ loc += 8;
+ }
+ }
+
for (group = htab->group; group != NULL; group = group->next)
if ((stub_sec = group->stub_sec) != NULL)
{
@@ -14760,14 +15245,14 @@ ppc64_elf_build_stubs (struct bfd_link_info *info,
}
if (group != NULL)
+ htab->stub_error = true;
+
+ if (htab->stub_error)
{
- htab->stub_error = true;
_bfd_error_handler (_("stubs don't match calculated size"));
+ return false;
}
- if (htab->stub_error)
- return false;
-
if (stats != NULL)
{
char *groupmsg;
@@ -16113,6 +16598,8 @@ ppc64_elf_relocate_section (bfd *output_bfd,
case R_PPC64_GOT16_DS:
if ((h ? h->elf.type : ELF_ST_TYPE (sym->st_info)) == STT_GNU_IFUNC
+ || (bfd_link_pic (info)
+ && sec == bfd_abs_section_ptr)
|| !htab->do_toc_opt)
break;
from = TOCstart + htab->sec_info[input_section->id].toc_off;
@@ -16137,6 +16624,8 @@ ppc64_elf_relocate_section (bfd *output_bfd,
case R_PPC64_GOT16_LO_DS:
case R_PPC64_GOT16_HA:
if ((h ? h->elf.type : ELF_ST_TYPE (sym->st_info)) == STT_GNU_IFUNC
+ || (bfd_link_pic (info)
+ && sec == bfd_abs_section_ptr)
|| !htab->do_toc_opt)
break;
from = TOCstart + htab->sec_info[input_section->id].toc_off;
@@ -16167,6 +16656,8 @@ ppc64_elf_relocate_section (bfd *output_bfd,
case R_PPC64_GOT_PCREL34:
if ((h ? h->elf.type : ELF_ST_TYPE (sym->st_info)) == STT_GNU_IFUNC
+ || (bfd_link_pic (info)
+ && sec == bfd_abs_section_ptr)
|| !htab->do_toc_opt)
break;
from = (rel->r_offset
@@ -16406,7 +16897,11 @@ ppc64_elf_relocate_section (bfd *output_bfd,
&& bfd_link_executable (info)
&& (h == NULL
|| SYMBOL_REFERENCES_LOCAL (info,
- &h->elf)))))
+ &h->elf)))
+ && (h != NULL
+ ? !bfd_is_abs_symbol (&h->elf.root)
+ : sym->st_shndx != SHN_ABS)))
+
relgot = ppc64_elf_tdata (ent->owner)->relgot;
if (relgot != NULL)
{
@@ -16462,10 +16957,14 @@ ppc64_elf_relocate_section (bfd *output_bfd,
outrel.r_addend -= htab->elf.tls_sec->vma;
}
}
- loc = relgot->contents;
- loc += (relgot->reloc_count++
- * sizeof (Elf64_External_Rela));
- bfd_elf64_swap_reloca_out (output_bfd, &outrel, loc);
+ if (!(info->enable_dt_relr
+ && ELF64_R_TYPE (outrel.r_info) == R_PPC64_RELATIVE))
+ {
+ loc = relgot->contents;
+ loc += (relgot->reloc_count++
+ * sizeof (Elf64_External_Rela));
+ bfd_elf64_swap_reloca_out (output_bfd, &outrel, loc);
+ }
}
/* Init the .got section contents here if we're not
@@ -16590,6 +17089,15 @@ ppc64_elf_relocate_section (bfd *output_bfd,
relocation += htab->sec_info[sec->id].toc_off;
else
unresolved_reloc = true;
+ if (unresolved_reloc
+ || (!is_opd
+ && h != NULL
+ && !SYMBOL_REFERENCES_LOCAL (info, &h->elf)))
+ info->callbacks->einfo
+ /* xgettext:c-format */
+ (_("%H: %s against %pT is not supported\n"),
+ input_bfd, input_section, rel->r_offset,
+ ppc64_elf_howto_table[r_type]->name, sym_name);
goto dodyn;
/* TOC16 relocs. We want the offset relative to the TOC base,
@@ -16924,24 +17432,31 @@ ppc64_elf_relocate_section (bfd *output_bfd,
}
}
- sreloc = elf_section_data (input_section)->sreloc;
- if (h != NULL
- ? h->elf.type == STT_GNU_IFUNC
- : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)
+ if (!(info->enable_dt_relr
+ && ELF64_R_TYPE (outrel.r_info) == R_PPC64_RELATIVE
+ && rel->r_offset % 2 == 0
+ && input_section->alignment_power != 0
+ && ELF64_R_TYPE (orig_rel.r_info) != R_PPC64_UADDR64))
{
- sreloc = htab->elf.irelplt;
- if (indx == 0 || is_static_defined (&h->elf))
- htab->elf.ifunc_resolvers = true;
+ sreloc = elf_section_data (input_section)->sreloc;
+ if (h != NULL
+ ? h->elf.type == STT_GNU_IFUNC
+ : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)
+ {
+ sreloc = htab->elf.irelplt;
+ if (indx == 0 || is_static_defined (&h->elf))
+ htab->elf.ifunc_resolvers = true;
+ }
+ if (sreloc == NULL)
+ abort ();
+
+ if (sreloc->reloc_count * sizeof (Elf64_External_Rela)
+ >= sreloc->size)
+ abort ();
+ loc = sreloc->contents;
+ loc += sreloc->reloc_count++ * sizeof (Elf64_External_Rela);
+ bfd_elf64_swap_reloca_out (output_bfd, &outrel, loc);
}
- if (sreloc == NULL)
- abort ();
-
- if (sreloc->reloc_count * sizeof (Elf64_External_Rela)
- >= sreloc->size)
- abort ();
- loc = sreloc->contents;
- loc += sreloc->reloc_count++ * sizeof (Elf64_External_Rela);
- bfd_elf64_swap_reloca_out (output_bfd, &outrel, loc);
if (!warned_dynamic
&& !ppc64_glibc_dynamic_reloc (ELF64_R_TYPE (outrel.r_info)))
@@ -17095,7 +17610,11 @@ ppc64_elf_relocate_section (bfd *output_bfd,
case R_PPC64_GOT16_HA:
case R_PPC64_TOC16_HA:
if (htab->do_toc_opt && relocation + addend + 0x8000 < 0x10000
- && !ppc64_elf_tdata (input_bfd)->unexpected_toc_insn)
+ && !ppc64_elf_tdata (input_bfd)->unexpected_toc_insn
+ && !(bfd_link_pic (info)
+ && (h != NULL
+ ? bfd_is_abs_symbol (&h->elf.root)
+ : sec == bfd_abs_section_ptr)))
{
bfd_byte *p;
nop_it:
@@ -17126,6 +17645,10 @@ ppc64_elf_relocate_section (bfd *output_bfd,
case R_PPC64_TOC16_LO_DS:
if (htab->do_toc_opt && relocation + addend + 0x8000 < 0x10000
&& !ppc64_elf_tdata (input_bfd)->unexpected_toc_insn
+ && !(bfd_link_pic (info)
+ && (h != NULL
+ ? bfd_is_abs_symbol (&h->elf.root)
+ : sec == bfd_abs_section_ptr))
&& offset_in_range (input_section, rel->r_offset & ~3, 4))
{
bfd_byte *p = contents + (rel->r_offset & ~3);
diff --git a/bfd/elf64-s390.c b/bfd/elf64-s390.c
index e780efa7181..0b851f7ac0e 100644
--- a/bfd/elf64-s390.c
+++ b/bfd/elf64-s390.c
@@ -774,7 +774,7 @@ elf_s390_tls_transition (struct bfd_link_info *info,
int r_type,
int is_local)
{
- if (bfd_link_pic (info))
+ if (bfd_link_dll (info))
return r_type;
switch (r_type)
@@ -1026,7 +1026,7 @@ elf_s390_check_relocs (bfd *abfd,
case R_390_TLS_GOTIE20:
case R_390_TLS_GOTIE64:
case R_390_TLS_IEENT:
- if (bfd_link_pic (info))
+ if (bfd_link_dll (info))
info->flags |= DF_STATIC_TLS;
/* Fall through */
@@ -1107,7 +1107,7 @@ elf_s390_check_relocs (bfd *abfd,
if (r_type == R_390_TLS_LE64 && bfd_link_pie (info))
break;
- if (!bfd_link_pic (info))
+ if (!bfd_link_dll (info))
break;
info->flags |= DF_STATIC_TLS;
/* Fall through */
@@ -1571,7 +1571,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h,
to R_390_TLS_LE64 requiring no TLS entry. For GOTIE12 and IEENT
we can save the dynamic TLS relocation. */
if (h->got.refcount > 0
- && !bfd_link_pic (info)
+ && !bfd_link_dll (info)
&& h->dynindx == -1
&& elf_s390_hash_entry(h)->tls_type >= GOT_TLS_IE)
{
@@ -1876,7 +1876,20 @@ elf_s390_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
else if (startswith (bfd_section_name (s), ".rela"))
{
if (s->size != 0 && s != htab->elf.srelplt)
- relocs = true;
+ {
+ relocs = true;
+ if (s == htab->elf.irelplt)
+ {
+ /* In static-pie case, there are IRELATIVE-relocs in
+ .rela.iplt (htab->irelplt), which will later be grouped
+ to .rela.plt. On s390, the IRELATIVE relocations are
+ always located in .rela.iplt - even for non-static case.
+ Ensure that DT_JMPREL, DT_PLTRELA, DT_PLTRELASZ is added
+ to the dynamic section even if htab->srelplt->size == 0.
+ See _bfd_elf_add_dynamic_tags in bfd/elflink.c. */
+ htab->elf.dt_jmprel_required = true;
+ }
+ }
/* We use the reloc_count field as a counter if we need
to copy relocs into the output file. */
@@ -2662,7 +2675,7 @@ elf_s390_relocate_section (bfd *output_bfd,
/* Relocations for tls literal pool entries. */
case R_390_TLS_IE64:
- if (bfd_link_pic (info))
+ if (bfd_link_dll (info))
{
Elf_Internal_Rela outrel;
asection *sreloc;
@@ -2690,7 +2703,7 @@ elf_s390_relocate_section (bfd *output_bfd,
else if (h != NULL)
{
tls_type = elf_s390_hash_entry(h)->tls_type;
- if (!bfd_link_pic (info) && h->dynindx == -1 && tls_type >= GOT_TLS_IE)
+ if (!bfd_link_dll (info) && h->dynindx == -1 && tls_type >= GOT_TLS_IE)
r_type = R_390_TLS_LE64;
}
if (r_type == R_390_TLS_GD64 && tls_type >= GOT_TLS_IE)
@@ -2801,14 +2814,14 @@ elf_s390_relocate_section (bfd *output_bfd,
if (local_got_offsets == NULL)
abort();
off = local_got_offsets[r_symndx];
- if (bfd_link_pic (info))
+ if (bfd_link_dll (info))
goto emit_tls_relocs;
}
else
{
off = h->got.offset;
tls_type = elf_s390_hash_entry(h)->tls_type;
- if (bfd_link_pic (info) || h->dynindx != -1 || tls_type < GOT_TLS_IE)
+ if (bfd_link_dll (info) || h->dynindx != -1 || tls_type < GOT_TLS_IE)
goto emit_tls_relocs;
}
@@ -2825,7 +2838,7 @@ elf_s390_relocate_section (bfd *output_bfd,
break;
case R_390_TLS_LDM64:
- if (! bfd_link_pic (info))
+ if (! bfd_link_dll (info))
/* The literal pool entry this relocation refers to gets ignored
by the optimized code of the local exec model. Do nothing
and the value will turn out zero. */
@@ -2900,7 +2913,7 @@ elf_s390_relocate_section (bfd *output_bfd,
continue;
case R_390_TLS_LDO64:
- if (bfd_link_pic (info) || (input_section->flags & SEC_DEBUGGING))
+ if (bfd_link_dll (info) || (input_section->flags & SEC_DEBUGGING))
relocation -= dtpoff_base (info);
else
/* When converting LDO to LE, we must negate. */
@@ -2922,7 +2935,7 @@ elf_s390_relocate_section (bfd *output_bfd,
if (r_type == R_390_TLS_LOAD)
{
- if (!bfd_link_pic (info) && (h == NULL || h->dynindx == -1))
+ if (!bfd_link_dll (info) && (h == NULL || h->dynindx == -1))
{
/* IE->LE transition. Four valid cases:
lg %rx,(0,%ry) -> sllg %rx,%ry,0
@@ -2972,7 +2985,7 @@ elf_s390_relocate_section (bfd *output_bfd,
invalid_tls_insn (input_bfd, input_section, rel);
return false;
}
- if (!bfd_link_pic (info) && (h == NULL || h->dynindx == -1))
+ if (!bfd_link_dll (info) && (h == NULL || h->dynindx == -1))
{
/* GD->LE transition.
brasl %r14,__tls_get_addr@plt -> brcl 0,. */
@@ -2991,7 +3004,7 @@ elf_s390_relocate_section (bfd *output_bfd,
}
else if (r_type == R_390_TLS_LDCALL)
{
- if (!bfd_link_pic (info))
+ if (!bfd_link_dll (info))
{
unsigned int insn0, insn1;
diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c
index ad885f89e11..6d69d6141ee 100644
--- a/bfd/elf64-x86-64.c
+++ b/bfd/elf64-x86-64.c
@@ -2211,16 +2211,18 @@ elf_x86_64_scan_relocs (bfd *abfd, struct bfd_link_info *info,
else if (r_type != R_X86_64_PC32_BND
&& r_type != R_X86_64_PC64)
{
- h->pointer_equality_needed = 1;
/* At run-time, R_X86_64_64 can be resolved for both
x86-64 and x32. But R_X86_64_32 and R_X86_64_32S
- can only be resolved for x32. */
+ can only be resolved for x32. Function pointer
+ reference doesn't need PLT for pointer equality. */
if ((sec->flags & SEC_READONLY) == 0
&& (r_type == R_X86_64_64
|| (!ABI_64_P (abfd)
&& (r_type == R_X86_64_32
|| r_type == R_X86_64_32S))))
func_pointer_ref = true;
+ else
+ h->pointer_equality_needed = 1;
}
if (!func_pointer_ref)
@@ -2242,6 +2244,23 @@ elf_x86_64_scan_relocs (bfd *abfd, struct bfd_link_info *info,
if (!h->def_regular
|| (sec->flags & (SEC_CODE | SEC_READONLY)) != 0)
h->plt.refcount = 1;
+
+ if (h->pointer_equality_needed
+ && h->type == STT_FUNC
+ && eh->def_protected
+ && elf_has_indirect_extern_access (h->root.u.def.section->owner))
+ {
+ /* Disallow non-canonical reference to canonical
+ protected function. */
+ _bfd_error_handler
+ /* xgettext:c-format */
+ (_("%pB: non-canonical reference to canonical "
+ "protected function `%s' in %pB"),
+ abfd, h->root.root.string,
+ h->root.u.def.section->owner);
+ bfd_set_error (bfd_error_bad_value);
+ goto error_return;
+ }
}
}
@@ -2867,7 +2886,10 @@ elf_x86_64_relocate_section (bfd *output_bfd,
as -1 | 1 still is -1. */
h->got.offset |= 1;
- if (GENERATE_RELATIVE_RELOC_P (info, h))
+ /* NB: Don't generate relative relocation here if
+ it has been generated by DT_RELR. */
+ if (!info->enable_dt_relr
+ && GENERATE_RELATIVE_RELOC_P (info, h))
{
/* If this symbol isn't dynamic in PIC,
generate R_X86_64_RELATIVE here. */
@@ -2899,8 +2921,11 @@ elf_x86_64_relocate_section (bfd *output_bfd,
/* NB: GOTPCREL relocations against local absolute
symbol store relocation value in the GOT slot
- without relative relocation. */
- if (bfd_link_pic (info)
+ without relative relocation. Don't generate
+ relative relocation here if it has been generated
+ by DT_RELR. */
+ if (!info->enable_dt_relr
+ && bfd_link_pic (info)
&& !(sym->st_shndx == SHN_ABS
&& (r_type == R_X86_64_GOTPCREL
|| r_type == R_X86_64_GOTPCRELX
@@ -3215,6 +3240,7 @@ elf_x86_64_relocate_section (bfd *output_bfd,
{
Elf_Internal_Rela outrel;
bool skip, relocate;
+ bool generate_dynamic_reloc = true;
asection *sreloc;
const char *relative_reloc_name = NULL;
@@ -3253,9 +3279,17 @@ elf_x86_64_relocate_section (bfd *output_bfd,
&& htab->params->no_reloc_overflow_check))
{
relocate = true;
- outrel.r_info = htab->r_info (0, R_X86_64_RELATIVE);
- outrel.r_addend = relocation + rel->r_addend;
- relative_reloc_name = "R_X86_64_RELATIVE";
+ /* NB: Don't generate relative relocation here if
+ it has been generated by DT_RELR. */
+ if (info->enable_dt_relr)
+ generate_dynamic_reloc = false;
+ else
+ {
+ outrel.r_info =
+ htab->r_info (0, R_X86_64_RELATIVE);
+ outrel.r_addend = relocation + rel->r_addend;
+ relative_reloc_name = "R_X86_64_RELATIVE";
+ }
}
else if (r_type == R_X86_64_64
&& !ABI_64_P (output_bfd))
@@ -3323,21 +3357,24 @@ elf_x86_64_relocate_section (bfd *output_bfd,
}
}
- sreloc = elf_section_data (input_section)->sreloc;
-
- if (sreloc == NULL || sreloc->contents == NULL)
+ if (generate_dynamic_reloc)
{
- r = bfd_reloc_notsupported;
- goto check_relocation_error;
- }
+ sreloc = elf_section_data (input_section)->sreloc;
- if (relative_reloc_name
- && htab->params->report_relative_reloc)
- _bfd_x86_elf_link_report_relative_reloc
- (info, input_section, h, sym, relative_reloc_name,
- &outrel);
+ if (sreloc == NULL || sreloc->contents == NULL)
+ {
+ r = bfd_reloc_notsupported;
+ goto check_relocation_error;
+ }
- elf_append_rela (output_bfd, sreloc, &outrel);
+ if (relative_reloc_name
+ && htab->params->report_relative_reloc)
+ _bfd_x86_elf_link_report_relative_reloc
+ (info, input_section, h, sym,
+ relative_reloc_name, &outrel);
+
+ elf_append_rela (output_bfd, sreloc, &outrel);
+ }
/* If this reloc is against an external symbol, we do
not want to fiddle with the addend. Otherwise, we
@@ -4424,6 +4461,7 @@ elf_x86_64_finish_dynamic_symbol (bfd *output_bfd,
Elf_Internal_Rela rela;
asection *relgot = htab->elf.srelgot;
const char *relative_reloc_name = NULL;
+ bool generate_dynamic_reloc = true;
/* This symbol has an entry in the global offset table. Set it
up. */
@@ -4506,11 +4544,16 @@ elf_x86_64_finish_dynamic_symbol (bfd *output_bfd,
if (!SYMBOL_DEFINED_NON_SHARED_P (h))
return false;
BFD_ASSERT((h->got.offset & 1) != 0);
- rela.r_info = htab->r_info (0, R_X86_64_RELATIVE);
- rela.r_addend = (h->root.u.def.value
- + h->root.u.def.section->output_section->vma
- + h->root.u.def.section->output_offset);
- relative_reloc_name = "R_X86_64_RELATIVE";
+ if (info->enable_dt_relr)
+ generate_dynamic_reloc = false;
+ else
+ {
+ rela.r_info = htab->r_info (0, R_X86_64_RELATIVE);
+ rela.r_addend = (h->root.u.def.value
+ + h->root.u.def.section->output_section->vma
+ + h->root.u.def.section->output_offset);
+ relative_reloc_name = "R_X86_64_RELATIVE";
+ }
}
else
{
@@ -4522,12 +4565,15 @@ elf_x86_64_finish_dynamic_symbol (bfd *output_bfd,
rela.r_addend = 0;
}
- if (relative_reloc_name != NULL
- && htab->params->report_relative_reloc)
- _bfd_x86_elf_link_report_relative_reloc
- (info, relgot, h, sym, relative_reloc_name, &rela);
+ if (generate_dynamic_reloc)
+ {
+ if (relative_reloc_name != NULL
+ && htab->params->report_relative_reloc)
+ _bfd_x86_elf_link_report_relative_reloc
+ (info, relgot, h, sym, relative_reloc_name, &rela);
- elf_append_rela (output_bfd, relgot, &rela);
+ elf_append_rela (output_bfd, relgot, &rela);
+ }
}
if (h->needs_copy)
@@ -5368,99 +5414,6 @@ elf64_x86_64_copy_solaris_special_section_fields (const bfd *ibfd ATTRIBUTE_UNUS
#undef elf_backend_strtab_flags
#undef elf_backend_copy_special_section_fields
-/* Intel L1OM support. */
-
-static bool
-elf64_l1om_elf_object_p (bfd *abfd)
-{
- /* Set the right machine number for an L1OM elf64 file. */
- bfd_default_set_arch_mach (abfd, bfd_arch_l1om, bfd_mach_l1om);
- return true;
-}
-
-#undef TARGET_LITTLE_SYM
-#define TARGET_LITTLE_SYM l1om_elf64_vec
-#undef TARGET_LITTLE_NAME
-#define TARGET_LITTLE_NAME "elf64-l1om"
-#undef ELF_ARCH
-#define ELF_ARCH bfd_arch_l1om
-
-#undef ELF_MACHINE_CODE
-#define ELF_MACHINE_CODE EM_L1OM
-
-#undef ELF_OSABI
-
-#undef elf64_bed
-#define elf64_bed elf64_l1om_bed
-
-#undef elf_backend_object_p
-#define elf_backend_object_p elf64_l1om_elf_object_p
-
-/* Restore defaults. */
-#undef ELF_TARGET_OS
-
-#include "elf64-target.h"
-
-/* FreeBSD L1OM support. */
-
-#undef TARGET_LITTLE_SYM
-#define TARGET_LITTLE_SYM l1om_elf64_fbsd_vec
-#undef TARGET_LITTLE_NAME
-#define TARGET_LITTLE_NAME "elf64-l1om-freebsd"
-
-#undef ELF_OSABI
-#define ELF_OSABI ELFOSABI_FREEBSD
-
-#undef elf64_bed
-#define elf64_bed elf64_l1om_fbsd_bed
-
-#include "elf64-target.h"
-
-/* Intel K1OM support. */
-
-static bool
-elf64_k1om_elf_object_p (bfd *abfd)
-{
- /* Set the right machine number for an K1OM elf64 file. */
- bfd_default_set_arch_mach (abfd, bfd_arch_k1om, bfd_mach_k1om);
- return true;
-}
-
-#undef TARGET_LITTLE_SYM
-#define TARGET_LITTLE_SYM k1om_elf64_vec
-#undef TARGET_LITTLE_NAME
-#define TARGET_LITTLE_NAME "elf64-k1om"
-#undef ELF_ARCH
-#define ELF_ARCH bfd_arch_k1om
-
-#undef ELF_MACHINE_CODE
-#define ELF_MACHINE_CODE EM_K1OM
-
-#undef ELF_OSABI
-
-#undef elf64_bed
-#define elf64_bed elf64_k1om_bed
-
-#undef elf_backend_object_p
-#define elf_backend_object_p elf64_k1om_elf_object_p
-
-#include "elf64-target.h"
-
-/* FreeBSD K1OM support. */
-
-#undef TARGET_LITTLE_SYM
-#define TARGET_LITTLE_SYM k1om_elf64_fbsd_vec
-#undef TARGET_LITTLE_NAME
-#define TARGET_LITTLE_NAME "elf64-k1om-freebsd"
-
-#undef ELF_OSABI
-#define ELF_OSABI ELFOSABI_FREEBSD
-
-#undef elf64_bed
-#define elf64_bed elf64_k1om_fbsd_bed
-
-#include "elf64-target.h"
-
/* 32bit x86-64 support. */
#undef TARGET_LITTLE_SYM
@@ -5476,6 +5429,7 @@ elf64_k1om_elf_object_p (bfd *abfd)
#undef ELF_MACHINE_CODE
#define ELF_MACHINE_CODE EM_X86_64
+#undef ELF_TARGET_OS
#undef ELF_OSABI
#define bfd_elf32_bfd_reloc_type_lookup \
diff --git a/bfd/elfcode.h b/bfd/elfcode.h
index c3ab0536321..4d4cb68164a 100644
--- a/bfd/elfcode.h
+++ b/bfd/elfcode.h
@@ -997,6 +997,19 @@ elf_write_relocs (bfd *abfd, asection *sec, void *data)
return;
}
+#if defined(BFD64) && ARCH_SIZE == 32
+ if (rela_hdr->sh_type == SHT_RELA
+ && ptr->howto->bitsize > 32
+ && ptr->addend - INT32_MIN > UINT32_MAX)
+ {
+ _bfd_error_handler (_("%pB: %pA+%"BFD_VMA_FMT"x: "
+ "relocation addend %"BFD_VMA_FMT"x too large"),
+ abfd, sec, ptr->address, ptr->addend);
+ *failedp = true;
+ bfd_set_error (bfd_error_bad_value);
+ }
+#endif
+
src_rela.r_offset = ptr->address + addr_offset;
src_rela.r_info = ELF_R_INFO (n, ptr->howto->type);
src_rela.r_addend = ptr->addend;
diff --git a/bfd/elflink.c b/bfd/elflink.c
index 059461b5725..4d6fe663f68 100644
--- a/bfd/elflink.c
+++ b/bfd/elflink.c
@@ -359,6 +359,17 @@ _bfd_elf_link_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
elf_section_data (s)->this_hdr.sh_entsize = 4;
}
+ if (info->enable_dt_relr)
+ {
+ s = bfd_make_section_anyway_with_flags (abfd, ".relr.dyn",
+ (bed->dynamic_sec_flags
+ | SEC_READONLY));
+ if (s == NULL
+ || !bfd_set_section_alignment (s, bed->s->log_file_align))
+ return false;
+ elf_hash_table (info)->srelrdyn = s;
+ }
+
/* Let the backend create the rest of the sections. This lets the
backend set the right flags. The backend will normally create
the .got and .plt sections. */
@@ -1079,6 +1090,7 @@ _bfd_elf_merge_symbol (bfd *abfd,
const struct elf_backend_data *bed;
char *new_version;
bool default_sym = *matched;
+ struct elf_link_hash_table *htab;
*skip = false;
*override = NULL;
@@ -1209,6 +1221,8 @@ _bfd_elf_merge_symbol (bfd *abfd,
symbols. */
bfd_elf_link_mark_dynamic_symbol (info, h, sym);
+ htab = elf_hash_table (info);
+
/* NEWDYN and OLDDYN indicate whether the new or old symbol,
respectively, is from a dynamic object. */
@@ -1272,7 +1286,9 @@ _bfd_elf_merge_symbol (bfd *abfd,
olddyn = (oldsec->symbol->flags & BSF_DYNAMIC) != 0;
}
- if (oldbfd != NULL
+ /* Set non_ir_ref_dynamic only when not handling DT_NEEDED entries. */
+ if (!htab->handling_dt_needed
+ && oldbfd != NULL
&& (oldbfd->flags & BFD_PLUGIN) != (abfd->flags & BFD_PLUGIN))
{
if (newdyn != olddyn)
@@ -1283,9 +1299,8 @@ _bfd_elf_merge_symbol (bfd *abfd,
h->root.non_ir_ref_dynamic = true;
hi->root.non_ir_ref_dynamic = true;
}
-
- if ((oldbfd->flags & BFD_PLUGIN) != 0
- && hi->root.type == bfd_link_hash_indirect)
+ else if ((oldbfd->flags & BFD_PLUGIN) != 0
+ && hi->root.type == bfd_link_hash_indirect)
{
/* Change indirect symbol from IR to undefined. */
hi->root.type = bfd_link_hash_undefined;
@@ -2202,6 +2217,85 @@ _bfd_elf_export_symbol (struct elf_link_hash_entry *h, void *data)
return true;
}
+/* Return true if GLIBC_ABI_DT_RELR is added to the list of version
+ dependencies successfully. GLIBC_ABI_DT_RELR will be put into the
+ .gnu.version_r section. */
+
+static bool
+elf_link_add_dt_relr_dependency (struct elf_find_verdep_info *rinfo)
+{
+ bfd *glibc_bfd = NULL;
+ Elf_Internal_Verneed *t;
+ Elf_Internal_Vernaux *a;
+ size_t amt;
+ const char *relr = "GLIBC_ABI_DT_RELR";
+
+ /* See if we already know about GLIBC_PRIVATE_DT_RELR. */
+ for (t = elf_tdata (rinfo->info->output_bfd)->verref;
+ t != NULL;
+ t = t->vn_nextref)
+ {
+ const char *soname = bfd_elf_get_dt_soname (t->vn_bfd);
+ /* Skip the shared library if it isn't libc.so. */
+ if (!soname || !startswith (soname, "libc.so."))
+ continue;
+
+ for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
+ {
+ /* Return if GLIBC_PRIVATE_DT_RELR dependency has been
+ added. */
+ if (a->vna_nodename == relr
+ || strcmp (a->vna_nodename, relr) == 0)
+ return true;
+
+ /* Check if libc.so provides GLIBC_2.XX version. */
+ if (!glibc_bfd && startswith (a->vna_nodename, "GLIBC_2."))
+ glibc_bfd = t->vn_bfd;
+ }
+
+ break;
+ }
+
+ /* Skip if it isn't linked against glibc. */
+ if (glibc_bfd == NULL)
+ return true;
+
+ /* This is a new version. Add it to tree we are building. */
+ if (t == NULL)
+ {
+ amt = sizeof *t;
+ t = (Elf_Internal_Verneed *) bfd_zalloc (rinfo->info->output_bfd,
+ amt);
+ if (t == NULL)
+ {
+ rinfo->failed = true;
+ return false;
+ }
+
+ t->vn_bfd = glibc_bfd;
+ t->vn_nextref = elf_tdata (rinfo->info->output_bfd)->verref;
+ elf_tdata (rinfo->info->output_bfd)->verref = t;
+ }
+
+ amt = sizeof *a;
+ a = (Elf_Internal_Vernaux *) bfd_zalloc (rinfo->info->output_bfd, amt);
+ if (a == NULL)
+ {
+ rinfo->failed = true;
+ return false;
+ }
+
+ a->vna_nodename = relr;
+ a->vna_flags = 0;
+ a->vna_nextptr = t->vn_auxptr;
+ a->vna_other = rinfo->vers + 1;
+ ++rinfo->vers;
+
+ t->vn_auxptr = a;
+
+ return true;
+}
+
/* Look through the symbols which are defined in other shared
libraries and referenced here. Update the list of version
dependencies. This will be put into the .gnu.version_r section.
@@ -3676,7 +3770,8 @@ _bfd_elf_strip_zero_sized_dynamic_sections (struct bfd_link_info *info)
{
/* Regenerate program headers. */
elf_seg_map (info->output_bfd) = NULL;
- return _bfd_elf_map_sections_to_segments (info->output_bfd, info);
+ return _bfd_elf_map_sections_to_segments (info->output_bfd, info,
+ NULL);
}
return true;
@@ -6928,6 +7023,13 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd,
if (sinfo.failed)
return false;
+ if (info->enable_dt_relr)
+ {
+ elf_link_add_dt_relr_dependency (&sinfo);
+ if (sinfo.failed)
+ return false;
+ }
+
if (elf_tdata (output_bfd)->verref == NULL)
s->flags |= SEC_EXCLUDE;
else
@@ -7022,13 +7124,23 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd,
/* Determine any GNU_STACK segment requirements, after the backend
has had a chance to set a default segment size. */
if (info->execstack)
- elf_stack_flags (output_bfd) = PF_R | PF_W | PF_X;
+ {
+ /* If the user has explicitly requested warnings, then generate one even
+ though the choice is the result of another command line option. */
+ if (info->warn_execstack == 1)
+ _bfd_error_handler
+ (_("\
+warning: enabling an executable stack because of -z execstack command line option"));
+ elf_stack_flags (output_bfd) = PF_R | PF_W | PF_X;
+ }
else if (info->noexecstack)
elf_stack_flags (output_bfd) = PF_R | PF_W;
else
{
bfd *inputobj;
asection *notesec = NULL;
+ bfd *noteobj = NULL;
+ bfd *emptyobj = NULL;
int exec = 0;
for (inputobj = info->input_bfds;
@@ -7047,15 +7159,49 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd,
s = bfd_get_section_by_name (inputobj, ".note.GNU-stack");
if (s)
{
- if (s->flags & SEC_CODE)
- exec = PF_X;
notesec = s;
+ if (s->flags & SEC_CODE)
+ {
+ noteobj = inputobj;
+ exec = PF_X;
+ /* There is no point in scanning the remaining bfds. */
+ break;
+ }
+ }
+ else if (bed->default_execstack && info->default_execstack)
+ {
+ exec = PF_X;
+ emptyobj = inputobj;
}
- else if (bed->default_execstack)
- exec = PF_X;
}
+
if (notesec || info->stacksize > 0)
- elf_stack_flags (output_bfd) = PF_R | PF_W | exec;
+ {
+ if (exec)
+ {
+ if (info->warn_execstack != 2)
+ {
+ /* PR 29072: Because an executable stack is a serious
+ security risk, make sure that the user knows that it is
+ being enabled despite the fact that it was not requested
+ on the command line. */
+ if (noteobj)
+ _bfd_error_handler (_("\
+warning: %s: requires executable stack (because the .note.GNU-stack section is executable)"),
+ bfd_get_filename (noteobj));
+ else if (emptyobj)
+ {
+ _bfd_error_handler (_("\
+warning: %s: missing .note.GNU-stack section implies executable stack"),
+ bfd_get_filename (emptyobj));
+ _bfd_error_handler (_("\
+NOTE: This behaviour is deprecated and will be removed in a future version of the linker"));
+ }
+ }
+ }
+ elf_stack_flags (output_bfd) = PF_R | PF_W | exec;
+ }
+
if (notesec && exec && bfd_link_relocatable (info)
&& notesec->output_section != bfd_abs_section_ptr)
notesec->output_section->flags |= SEC_CODE;
@@ -11247,31 +11393,6 @@ elf_link_input_bfd (struct elf_final_link_info *flinfo, bfd *input_bfd)
&& o->reloc_count > 0)
return false;
- /* We need to reverse-copy input .ctors/.dtors sections if
- they are placed in .init_array/.finit_array for output. */
- if (o->size > address_size
- && ((startswith (o->name, ".ctors")
- && strcmp (o->output_section->name,
- ".init_array") == 0)
- || (startswith (o->name, ".dtors")
- && strcmp (o->output_section->name,
- ".fini_array") == 0))
- && (o->name[6] == 0 || o->name[6] == '.'))
- {
- if (o->size * bed->s->int_rels_per_ext_rel
- != o->reloc_count * address_size)
- {
- _bfd_error_handler
- /* xgettext:c-format */
- (_("error: %pB: size of section %pA is not "
- "multiple of address size"),
- input_bfd, o);
- bfd_set_error (bfd_error_bad_value);
- return false;
- }
- o->flags |= SEC_ELF_REVERSE_COPY;
- }
-
action_discarded = -1;
if (!elf_section_ignore_discarded_relocs (o))
action_discarded = (*bed->action_discarded) (o);
@@ -11756,9 +11877,25 @@ elf_link_input_bfd (struct elf_final_link_info *flinfo, bfd *input_bfd)
offset *= bfd_octets_per_byte (output_bfd, o);
- if ((o->flags & SEC_ELF_REVERSE_COPY))
+ if ((o->flags & SEC_ELF_REVERSE_COPY)
+ && o->size > address_size)
{
/* Reverse-copy input section to output. */
+
+ if ((o->size & (address_size - 1)) != 0
+ || (o->reloc_count != 0
+ && (o->size * bed->s->int_rels_per_ext_rel
+ != o->reloc_count * address_size)))
+ {
+ _bfd_error_handler
+ /* xgettext:c-format */
+ (_("error: %pB: size of section %pA is not "
+ "multiple of address size"),
+ input_bfd, o);
+ bfd_set_error (bfd_error_bad_value);
+ return false;
+ }
+
do
{
todo -= address_size;
@@ -12120,7 +12257,8 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
const struct elf_backend_data *bed = get_elf_backend_data (abfd);
struct elf_outext_info eoinfo;
bool merged;
- size_t relativecount = 0;
+ size_t relativecount;
+ size_t relr_entsize;
asection *reldyn = 0;
bfd_size_type amt;
asection *attr_section = NULL;
@@ -12597,6 +12735,14 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
if (!_bfd_elf_fixup_eh_frame_hdr (info))
return false;
+ /* Finish relative relocations here after regular symbol processing
+ is finished if DT_RELR is enabled. */
+ if (info->enable_dt_relr
+ && bed->finish_relative_relocs
+ && !bed->finish_relative_relocs (info))
+ info->callbacks->einfo
+ (_("%F%P: %pB: failed to finish relative relocations\n"), abfd);
+
/* Since ELF permits relocations to be against local symbols, we
must have the local symbols available when we do the relocations.
Since we would rather only read the local symbols once, and we
@@ -12956,9 +13102,24 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
o->reloc_count = 0;
}
+ relativecount = 0;
if (dynamic && info->combreloc && dynobj != NULL)
relativecount = elf_link_sort_relocs (abfd, info, &reldyn);
+ relr_entsize = 0;
+ if (htab->srelrdyn != NULL
+ && htab->srelrdyn->output_section != NULL
+ && htab->srelrdyn->size != 0)
+ {
+ asection *s = htab->srelrdyn->output_section;
+ relr_entsize = elf_section_data (s)->this_hdr.sh_entsize;
+ if (relr_entsize == 0)
+ {
+ relr_entsize = bed->s->arch_size / 8;
+ elf_section_data (s)->this_hdr.sh_entsize = relr_entsize;
+ }
+ }
+
/* If we are linking against a dynamic object, or generating a
shared library, finish up the dynamic linking information. */
if (dynamic)
@@ -12986,17 +13147,44 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
default:
continue;
case DT_NULL:
- if (relativecount > 0 && dyncon + bed->s->sizeof_dyn < dynconend)
+ if (relativecount != 0)
{
switch (elf_section_data (reldyn)->this_hdr.sh_type)
{
case SHT_REL: dyn.d_tag = DT_RELCOUNT; break;
case SHT_RELA: dyn.d_tag = DT_RELACOUNT; break;
- default: continue;
}
- dyn.d_un.d_val = relativecount;
+ if (dyn.d_tag != DT_NULL
+ && dynconend - dyncon >= bed->s->sizeof_dyn)
+ {
+ dyn.d_un.d_val = relativecount;
+ relativecount = 0;
+ break;
+ }
relativecount = 0;
- break;
+ }
+ if (relr_entsize != 0)
+ {
+ if (dynconend - dyncon >= 3 * bed->s->sizeof_dyn)
+ {
+ asection *s = htab->srelrdyn;
+ dyn.d_tag = DT_RELR;
+ dyn.d_un.d_ptr
+ = s->output_section->vma + s->output_offset;
+ bed->s->swap_dyn_out (dynobj, &dyn, dyncon);
+ dyncon += bed->s->sizeof_dyn;
+
+ dyn.d_tag = DT_RELRSZ;
+ dyn.d_un.d_val = s->size;
+ bed->s->swap_dyn_out (dynobj, &dyn, dyncon);
+ dyncon += bed->s->sizeof_dyn;
+
+ dyn.d_tag = DT_RELRENT;
+ dyn.d_un.d_val = relr_entsize;
+ relr_entsize = 0;
+ break;
+ }
+ relr_entsize = 0;
}
continue;
@@ -14748,7 +14936,7 @@ bfd_elf_discard_info (bfd *output_bfd, struct bfd_link_info *info)
if (info->eh_frame_hdr_type
&& !bfd_link_relocatable (info)
- && _bfd_elf_discard_section_eh_frame_hdr (output_bfd, info))
+ && _bfd_elf_discard_section_eh_frame_hdr (info))
changed = 1;
return changed;
diff --git a/bfd/elfnn-loongarch.c b/bfd/elfnn-loongarch.c
index 00ebe5daeb2..307757f5dd5 100644
--- a/bfd/elfnn-loongarch.c
+++ b/bfd/elfnn-loongarch.c
@@ -42,9 +42,6 @@ struct loongarch_elf_link_hash_entry
{
struct elf_link_hash_entry elf;
- /* Track dynamic relocs copied for this symbol. */
- struct elf_dyn_relocs *dyn_relocs;
-
#define GOT_UNKNOWN 0
#define GOT_NORMAL 1
#define GOT_TLS_GD 2
@@ -238,7 +235,6 @@ link_hash_newfunc (struct bfd_hash_entry *entry, struct bfd_hash_table *table,
if (entry != NULL)
{
eh = (struct loongarch_elf_link_hash_entry *) entry;
- eh->dyn_relocs = NULL;
eh->tls_type = GOT_UNKNOWN;
}
@@ -393,6 +389,27 @@ elfNN_loongarch_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
if (!_bfd_elf_merge_object_attributes (ibfd, info))
return false;
+ /* If the input BFD is not a dynamic object and it does not contain any
+ non-data sections, do not account its ABI. For example, various
+ packages produces such data-only relocatable objects with
+ `ld -r -b binary` or `objcopy`, and these objects have zero e_flags.
+ But they are compatible with all ABIs. */
+ if (!(ibfd->flags & DYNAMIC))
+ {
+ asection *sec;
+ bool have_code_sections = false;
+ for (sec = ibfd->sections; sec != NULL; sec = sec->next)
+ if ((bfd_section_flags (sec)
+ & (SEC_LOAD | SEC_CODE | SEC_HAS_CONTENTS))
+ == (SEC_LOAD | SEC_CODE | SEC_HAS_CONTENTS))
+ {
+ have_code_sections = true;
+ break;
+ }
+ if (!have_code_sections)
+ return true;
+ }
+
if (!elf_flags_init (obfd))
{
elf_flags_init (obfd) = true;
@@ -401,7 +418,7 @@ elfNN_loongarch_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
}
/* Disallow linking different ABIs. */
- if ((out_flags ^ in_flags) & EF_LOONGARCH_ABI)
+ if (EF_LOONGARCH_ABI(out_flags ^ in_flags) & EF_LOONGARCH_ABI_MASK)
{
_bfd_error_handler (_("%pB: can't link different ABI object."), ibfd);
goto fail;
@@ -632,11 +649,21 @@ loongarch_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
h = (struct elf_link_hash_entry *) h->root.u.i.link;
}
+ /* It is referenced by a non-shared object. */
+ if (h != NULL)
+ h->ref_regular = 1;
+
if (h && h->type == STT_GNU_IFUNC)
{
if (htab->elf.dynobj == NULL)
htab->elf.dynobj = abfd;
+ /* Create the ifunc sections, iplt and ipltgot, for static
+ executables. */
+ if ((r_type == R_LARCH_64 || r_type == R_LARCH_32)
+ && !_bfd_elf_create_ifunc_sections (htab->elf.dynobj, info))
+ return false;
+
if (!htab->elf.splt
&& !_bfd_elf_create_ifunc_sections (htab->elf.dynobj, info))
/* If '.plt' not represent, create '.iplt' to deal with ifunc. */
@@ -752,6 +779,24 @@ loongarch_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
if (h != NULL)
h->non_got_ref = 1;
+
+ if (h != NULL
+ && (!bfd_link_pic (info)
+ || h->type == STT_GNU_IFUNC))
+ {
+ /* This reloc might not bind locally. */
+ h->non_got_ref = 1;
+ h->pointer_equality_needed = 1;
+
+ if (!h->def_regular
+ || (sec->flags & (SEC_CODE | SEC_READONLY)) != 0)
+ {
+ /* We may need a .plt entry if the symbol is a function
+ defined in a shared lib or is a function referenced
+ from the code or read-only section. */
+ h->plt.refcount += 1;
+ }
+ }
break;
case R_LARCH_GNU_VTINHERIT:
@@ -790,7 +835,7 @@ loongarch_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
/* If this is a global symbol, we count the number of
relocations we need for this symbol. */
if (h != NULL)
- head = &((struct loongarch_elf_link_hash_entry *) h)->dyn_relocs;
+ head = &h->dyn_relocs;
else
{
/* Track dynamic relocs needed for local syms too.
@@ -837,7 +882,7 @@ readonly_dynrelocs (struct elf_link_hash_entry *h)
{
struct elf_dyn_relocs *p;
- for (p = loongarch_elf_hash_entry (h)->dyn_relocs; p != NULL; p = p->next)
+ for (p = h->dyn_relocs; p != NULL; p = p->next)
{
asection *s = p->sec->output_section;
@@ -986,13 +1031,15 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
{
struct bfd_link_info *info;
struct loongarch_elf_link_hash_table *htab;
- struct loongarch_elf_link_hash_entry *eh;
struct elf_dyn_relocs *p;
if (h->root.type == bfd_link_hash_indirect)
return true;
- eh = (struct loongarch_elf_link_hash_entry *) h;
+ if (h->type == STT_GNU_IFUNC
+ && h->def_regular)
+ return true;
+
info = (struct bfd_link_info *) inf;
htab = loongarch_elf_hash_table (info);
BFD_ASSERT (htab != NULL);
@@ -1041,6 +1088,18 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
gotplt->size += GOT_ENTRY_SIZE;
relplt->size += sizeof (ElfNN_External_Rela);
+ /* If this symbol is not defined in a regular file, and we are
+ not generating a shared library, then set the symbol to this
+ location in the .plt. This is required to make function
+ pointers compare as equal between the normal executable and
+ the shared library. */
+ if (!bfd_link_pic(info)
+ && !h->def_regular)
+ {
+ h->root.u.def.section = plt;
+ h->root.u.def.value = h->plt.offset;
+ }
+
h->needs_plt = 1;
}
while (0);
@@ -1056,9 +1115,20 @@ 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
- && !bfd_elf_link_record_dynamic_symbol (info, h))
- return false;
+ if (h->dynindx == -1 && !h->forced_local)
+ {
+ if (SYMBOL_REFERENCES_LOCAL (info, h)
+ && (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
+ && h->start_stop)
+ {
+ /* The pr21964-4. do nothing. */
+ }
+ else
+ {
+ if( !bfd_elf_link_record_dynamic_symbol (info, h))
+ return false;
+ }
+ }
s = htab->elf.sgot;
h->got.offset = s->size;
@@ -1091,14 +1161,14 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
else
h->got.offset = MINUS_ONE;
- if (eh->dyn_relocs == NULL)
+ if (h->dyn_relocs == NULL)
return true;
if (SYMBOL_REFERENCES_LOCAL (info, h))
{
struct elf_dyn_relocs **pp;
- for (pp = &eh->dyn_relocs; (p = *pp) != NULL;)
+ for (pp = &h->dyn_relocs; (p = *pp) != NULL;)
{
p->count -= p->pc_count;
p->pc_count = 0;
@@ -1112,7 +1182,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
if (h->root.type == bfd_link_hash_undefweak)
{
if (UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
- eh->dyn_relocs = NULL;
+ h->dyn_relocs = NULL;
else if (h->dynindx == -1 && !h->forced_local
/* Make sure this symbol is output as a dynamic symbol.
Undefined weak syms won't yet be marked as dynamic. */
@@ -1120,7 +1190,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
return false;
}
- for (p = eh->dyn_relocs; p != NULL; p = p->next)
+ for (p = h->dyn_relocs; p != NULL; p = p->next)
{
asection *sreloc = elf_section_data (p->sec)->sreloc;
sreloc->size += p->count * sizeof (ElfNN_External_Rela);
@@ -1129,16 +1199,60 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
return true;
}
+/* Allocate space in .plt, .got and associated reloc sections for
+ ifunc dynamic relocs. */
+
+static bool
+elfNN_loongarch_allocate_ifunc_dynrelocs (struct elf_link_hash_entry *h,
+ void *inf)
+{
+ struct bfd_link_info *info;
+ /* An example of a bfd_link_hash_indirect symbol is versioned
+ symbol. For example: __gxx_personality_v0(bfd_link_hash_indirect)
+ -> __gxx_personality_v0(bfd_link_hash_defined)
+
+ There is no need to process bfd_link_hash_indirect symbols here
+ because we will also be presented with the concrete instance of
+ the symbol and loongarch_elf_copy_indirect_symbol () will have been
+ called to copy all relevant data from the generic to the concrete
+ symbol instance. */
+ if (h->root.type == bfd_link_hash_indirect)
+ return true;
+
+ if (h->root.type == bfd_link_hash_warning)
+ h = (struct elf_link_hash_entry *) h->root.u.i.link;
+
+ info = (struct bfd_link_info *) inf;
+
+ /* Since STT_GNU_IFUNC symbol must go through PLT, we handle it
+ here if it is defined and referenced in a non-shared object. */
+ if (h->type == STT_GNU_IFUNC
+ && h->def_regular)
+ return _bfd_elf_allocate_ifunc_dyn_relocs (info, h,
+ &h->dyn_relocs,
+ PLT_ENTRY_SIZE,
+ PLT_HEADER_SIZE,
+ GOT_ENTRY_SIZE,
+ false);
+ return true;
+}
+
+/* Allocate space in .plt, .got and associated reloc sections for
+ ifunc dynamic relocs. */
+
static bool
elfNN_loongarch_allocate_local_dynrelocs (void **slot, void *inf)
{
struct elf_link_hash_entry *h = (struct elf_link_hash_entry *) *slot;
- if (!h->def_regular || !h->ref_regular || !h->forced_local
+ if (h->type != STT_GNU_IFUNC
+ || !h->def_regular
+ || !h->ref_regular
+ || !h->forced_local
|| h->root.type != bfd_link_hash_defined)
abort ();
- return allocate_dynrelocs (h, inf);
+ return elfNN_loongarch_allocate_ifunc_dynrelocs (h, inf);
}
/* Set DF_TEXTREL if we find any dynamic relocs that apply to
@@ -1275,6 +1389,11 @@ loongarch_elf_size_dynamic_sections (bfd *output_bfd,
/* Allocate global sym .plt and .got entries, and space for global
sym dynamic relocs. */
elf_link_hash_traverse (&htab->elf, allocate_dynrelocs, info);
+
+ /* Allocate global ifunc sym .plt and .got entries, and space for global
+ ifunc sym dynamic relocs. */
+ elf_link_hash_traverse (&htab->elf, elfNN_loongarch_allocate_ifunc_dynrelocs, info);
+
/* Allocate .plt and .got entries, and space for local ifunc symbols. */
htab_traverse (htab->loc_hash_table,
(void *) elfNN_loongarch_allocate_local_dynrelocs, info);
@@ -1446,7 +1565,6 @@ loongarch_check_offset (const Elf_Internal_Rela *rel,
return bfd_reloc_ok;
}
-
#define LARCH_RELOC_PERFORM_3OP(op1, op2, op3) \
({ \
bfd_reloc_status_type ret = loongarch_pop (&op2); \
@@ -1459,50 +1577,21 @@ loongarch_check_offset (const Elf_Internal_Rela *rel,
ret; \
})
-#define LARCH_RELOC_UINT32_BIT_MASK(bitsize) \
- (~((0x1U << (bitsize)) - 1))
-
static bfd_reloc_status_type
loongarch_reloc_rewrite_imm_insn (const Elf_Internal_Rela *rel,
const asection *input_section ATTRIBUTE_UNUSED,
reloc_howto_type *howto, bfd *input_bfd,
- bfd_byte *contents, int64_t op,
- bool is_signed)
+ bfd_byte *contents, bfd_vma reloc_val)
{
- /* Check op low bits if rightshift != 0, before rightshift */
- if (howto->rightshift
- && (((0x1U << howto->rightshift) - 1) & op))
- return bfd_reloc_overflow;
-
- uint32_t imm = (uint32_t)(int32_t)(op >> howto->rightshift);
-
- if (is_signed)
- {
- if (op >= 0)
- {
- if (LARCH_RELOC_UINT32_BIT_MASK (howto->bitsize - 1) & imm)
- return bfd_reloc_overflow;
- }
- else
- {
- if ((LARCH_RELOC_UINT32_BIT_MASK (howto->bitsize - 1) & imm)
- != LARCH_RELOC_UINT32_BIT_MASK (howto->bitsize - 1))
- return bfd_reloc_overflow;
- }
- }
- else
- {
- if (LARCH_RELOC_UINT32_BIT_MASK (howto->bitsize) & imm)
- return bfd_reloc_overflow;
- }
-
int bits = bfd_get_reloc_size (howto) * 8;
uint32_t insn = bfd_get (bits, input_bfd, contents + rel->r_offset);
- imm = imm & ((0x1U << howto->bitsize) - 1);
- imm <<= howto->bitpos;
- insn = ((insn & howto->src_mask)
- | ((insn & (~(uint32_t) howto->dst_mask)) | imm));
+ if (!loongarch_adjust_reloc_bitsfield(howto, &reloc_val))
+ return bfd_reloc_overflow;
+
+ insn = (insn & (uint32_t)howto->src_mask)
+ | ((insn & (~(uint32_t)howto->dst_mask)) | reloc_val);
+
bfd_put (bits, input_bfd, insn, contents + rel->r_offset);
return bfd_reloc_ok;
@@ -1594,19 +1683,8 @@ perform_relocation (const Elf_Internal_Rela *rel, asection *input_section,
case R_LARCH_SOP_POP_32_S_10_16:
case R_LARCH_SOP_POP_32_S_10_16_S2:
case R_LARCH_SOP_POP_32_S_5_20:
- r = loongarch_pop (&opr1);
- if (r != bfd_reloc_ok)
- break;
- r = loongarch_check_offset (rel, input_section);
- if (r != bfd_reloc_ok)
- break;
-
- r = loongarch_reloc_rewrite_imm_insn (rel, input_section,
- howto, input_bfd,
- contents, opr1, true);
- break;
-
case R_LARCH_SOP_POP_32_U_10_12:
+ case R_LARCH_SOP_POP_32_U:
r = loongarch_pop (&opr1);
if (r != bfd_reloc_ok)
break;
@@ -1616,39 +1694,38 @@ perform_relocation (const Elf_Internal_Rela *rel, asection *input_section,
r = loongarch_reloc_rewrite_imm_insn (rel, input_section,
howto, input_bfd,
- contents, opr1, false);
+ contents, (bfd_vma)opr1);
break;
case R_LARCH_SOP_POP_32_S_0_5_10_16_S2:
- {
- r = loongarch_pop (&opr1);
- if (r != bfd_reloc_ok)
- break;
-
- if ((opr1 & 0x3) != 0)
- {
- r = bfd_reloc_overflow;
+ {
+ r = loongarch_pop (&opr1);
+ if (r != bfd_reloc_ok)
break;
- }
- uint32_t imm = opr1 >> howto->rightshift;
- if ((imm & (~0xfffffU)) && ((imm & (~0xfffffU)) != (~0xfffffU)))
- {
- r = bfd_reloc_overflow;
+ if ((opr1 & 0x3) != 0)
+ {
+ r = bfd_reloc_overflow;
+ break;
+ }
+
+ uint32_t imm = opr1 >> howto->rightshift;
+ if ((imm & (~0xfffffU)) && ((imm & (~0xfffffU)) != (~0xfffffU)))
+ {
+ r = bfd_reloc_overflow;
+ break;
+ }
+ r = loongarch_check_offset (rel, input_section);
+ if (r != bfd_reloc_ok)
break;
- }
- r = loongarch_check_offset (rel, input_section);
- if (r != bfd_reloc_ok)
+ insn1 = bfd_get (bits, input_bfd, contents + rel->r_offset);
+ insn1 = (insn1 & howto->src_mask)
+ | ((imm & 0xffffU) << 10)
+ | ((imm & 0x1f0000U) >> 16);
+ bfd_put (bits, input_bfd, insn1, contents + rel->r_offset);
break;
-
- insn1 = bfd_get (bits, input_bfd, contents + rel->r_offset);
- insn1 = ((insn1 & howto->src_mask)
- | ((imm & 0xffffU) << 10)
- | ((imm & 0x1f0000U) >> 16));
- bfd_put (bits, input_bfd, insn1, contents + rel->r_offset);
- break;
- }
+ }
case R_LARCH_SOP_POP_32_S_0_10_10_16_S2:
{
@@ -1681,21 +1758,6 @@ perform_relocation (const Elf_Internal_Rela *rel, asection *input_section,
break;
}
- case R_LARCH_SOP_POP_32_U:
- r = loongarch_pop (&opr1);
- if (r != bfd_reloc_ok)
- break;
- if ((uint64_t)opr1 & ~(uint64_t) 0xffffffff)
- r = bfd_reloc_overflow;
- if (r != bfd_reloc_ok)
- break;
- r = loongarch_check_offset (rel, input_section);
- if (r != bfd_reloc_ok)
- break;
-
- bfd_put (bits, input_bfd, opr1, contents + rel->r_offset);
- break;
-
case R_LARCH_TLS_DTPREL32:
case R_LARCH_32:
case R_LARCH_TLS_DTPREL64:
@@ -2033,14 +2095,9 @@ loongarch_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
resolved_to_const = true;
}
- if (h && h->type == STT_GNU_IFUNC)
+ /* The ifunc without reference does not generate plt. */
+ if (h && h->type == STT_GNU_IFUNC && h->plt.offset != MINUS_ONE)
{
- if (h->plt.offset == MINUS_ONE)
- info->callbacks->info ("%X%pB(%pA+0x%v): error: %s against `%s':\n"
- "STT_GNU_IFUNC must have PLT stub"
- "\n",
- input_bfd, input_section,
- (bfd_vma) rel->r_offset, howto->name, name);
defined_local = true;
resolved_local = true;
resolved_dynly = false;
@@ -2052,7 +2109,7 @@ loongarch_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
BFD_ASSERT (resolved_local + resolved_dynly + resolved_to_const == 1);
- BFD_ASSERT (!resolved_dynly || (h && h->dynindx != -1));
+ /* BFD_ASSERT (!resolved_dynly || (h && h->dynindx != -1));. */
BFD_ASSERT (!resolved_local || defined_local);
@@ -2083,7 +2140,31 @@ loongarch_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
&& (input_section->flags & SEC_ALLOC));
outrel.r_offset += sec_addr (input_section);
- if (resolved_dynly)
+
+ /* A pointer point to a local ifunc symbol. */
+ if(h
+ && h->type == STT_GNU_IFUNC
+ && (h->dynindx == -1
+ || h->forced_local
+ || bfd_link_executable(info)))
+ {
+ outrel.r_info = ELFNN_R_INFO (0, R_LARCH_IRELATIVE);
+ outrel.r_addend = (h->root.u.def.value
+ + h->root.u.def.section->output_section->vma
+ + h->root.u.def.section->output_offset);
+
+ /* 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;
+ }
+ else if (resolved_dynly)
{
outrel.r_info = ELFNN_R_INFO (h->dynindx, r_type);
outrel.r_addend = rel->r_addend;
@@ -2150,6 +2231,25 @@ loongarch_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
bfd_reloc_notsupported,
is_undefweak, name,
"Internal:");
+ if (resolved_local)
+ {
+ if (!elf_hash_table (info)->tls_sec)
+ {
+ fatal = loongarch_reloc_is_fatal (info, input_bfd,
+ input_section, rel, howto, bfd_reloc_notsupported,
+ is_undefweak, name, "TLS section not be created");
+ }
+ else
+ relocation -= elf_hash_table (info)->tls_sec->vma;
+ }
+ else
+ {
+ fatal = loongarch_reloc_is_fatal (info, input_bfd,
+ input_section, rel, howto, bfd_reloc_undefined,
+ is_undefweak, name,
+ "TLS LE just can be resolved local only.");
+ }
+
break;
case R_LARCH_SOP_PUSH_TLS_TPREL:
@@ -2332,7 +2432,8 @@ loongarch_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
{
off = h->got.offset;
- if (off == MINUS_ONE)
+ if (off == MINUS_ONE
+ && h->type != STT_GNU_IFUNC)
{
fatal = (loongarch_reloc_is_fatal
(info, input_bfd, input_section, rel, howto,
@@ -2341,6 +2442,33 @@ loongarch_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
break;
}
+ /* Hidden symbol not has .got entry, only .got.plt entry
+ so gprel is (plt - got). */
+ if (off == MINUS_ONE
+ && h->type == STT_GNU_IFUNC)
+ {
+ if (h->plt.offset == (bfd_vma) -1)
+ {
+ abort();
+ }
+
+ bfd_vma plt_index = h->plt.offset / PLT_ENTRY_SIZE;
+ off = plt_index * GOT_ENTRY_SIZE;
+
+ if (htab->elf.splt != NULL)
+ {
+ /* Section .plt header is 2 times of plt entry. */
+ off = sec_addr(htab->elf.sgotplt) + off
+ - sec_addr(htab->elf.sgot);
+ }
+ else
+ {
+ /* Section iplt not has plt header. */
+ off = sec_addr(htab->elf.igotplt) + off
+ - sec_addr(htab->elf.sgot);
+ }
+ }
+
if (!WILL_CALL_FINISH_DYNAMIC_SYMBOL (is_dyn, is_pic, h)
|| (is_pic && SYMBOL_REFERENCES_LOCAL (info, h)))
{
@@ -2378,6 +2506,28 @@ loongarch_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
off &= ~1;
else
{
+ /* The pr21964-4. Create relocate entry. */
+ if (is_pic && h->start_stop)
+ {
+ asection *s;
+ Elf_Internal_Rela outrel;
+ /* We need to generate a R_LARCH_RELATIVE reloc
+ for the dynamic linker. */
+ s = htab->elf.srelgot;
+ if (!s)
+ {
+ fatal = loongarch_reloc_is_fatal (info, input_bfd,
+ input_section, rel, howto,
+ bfd_reloc_notsupported, is_undefweak, name,
+ "Internal: '.rel.got' not represent");
+ break;
+ }
+
+ outrel.r_offset = sec_addr (got) + off;
+ outrel.r_info = ELFNN_R_INFO (0, R_LARCH_RELATIVE);
+ outrel.r_addend = relocation; /* Link-time addr. */
+ loongarch_elf_append_rela (output_bfd, s, &outrel);
+ }
bfd_put_NN (output_bfd, relocation, got->contents + off);
h->got.offset |= 1;
}
@@ -2573,9 +2723,19 @@ loongarch_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
}
else /* if (resolved_dynly) */
{
- outrel.r_info =
- ELFNN_R_INFO (h->dynindx, R_LARCH_TLS_TPRELNN);
- outrel.r_addend = 0;
+ /* Static linking has no .dynsym table. */
+ if (!htab->elf.dynamic_sections_created)
+ {
+ outrel.r_info =
+ ELFNN_R_INFO (0, R_LARCH_TLS_TPRELNN);
+ outrel.r_addend = 0;
+ }
+ else
+ {
+ outrel.r_info =
+ ELFNN_R_INFO (h->dynindx, R_LARCH_TLS_TPRELNN);
+ outrel.r_addend = 0;
+ }
loongarch_elf_append_rela (output_bfd, htab->elf.srelgot,
&outrel);
}
@@ -2685,22 +2845,16 @@ loongarch_elf_finish_dynamic_symbol (bfd *output_bfd,
{
struct loongarch_elf_link_hash_table *htab = loongarch_elf_hash_table (info);
const struct elf_backend_data *bed = get_elf_backend_data (output_bfd);
- asection *plt = NULL;
if (h->plt.offset != MINUS_ONE)
{
size_t i, plt_idx;
- asection *gotplt, *relplt;
+ asection *plt, *gotplt, *relplt;
bfd_vma got_address;
uint32_t plt_entry[PLT_ENTRY_INSNS];
bfd_byte *loc;
Elf_Internal_Rela rela;
- plt_idx = (h->plt.offset - PLT_HEADER_SIZE) / PLT_ENTRY_SIZE;
-
- /* One of '.plt' and '.iplt' represents. */
- BFD_ASSERT (!!htab->elf.splt ^ !!htab->elf.iplt);
-
if (htab->elf.splt)
{
BFD_ASSERT ((h->type == STT_GNU_IFUNC
@@ -2710,6 +2864,7 @@ loongarch_elf_finish_dynamic_symbol (bfd *output_bfd,
plt = htab->elf.splt;
gotplt = htab->elf.sgotplt;
relplt = htab->elf.srelplt;
+ plt_idx = (h->plt.offset - PLT_HEADER_SIZE) / PLT_ENTRY_SIZE;
got_address =
sec_addr (gotplt) + GOTPLT_HEADER_SIZE + plt_idx * GOT_ENTRY_SIZE;
}
@@ -2721,6 +2876,7 @@ loongarch_elf_finish_dynamic_symbol (bfd *output_bfd,
plt = htab->elf.iplt;
gotplt = htab->elf.igotplt;
relplt = htab->elf.irelplt;
+ plt_idx = h->plt.offset / PLT_ENTRY_SIZE;
got_address = sec_addr (gotplt) + plt_idx * GOT_ENTRY_SIZE;
}
@@ -2741,7 +2897,9 @@ loongarch_elf_finish_dynamic_symbol (bfd *output_bfd,
bfd_put_NN (output_bfd, sec_addr (plt), loc);
rela.r_offset = got_address;
- if (h->type == STT_GNU_IFUNC && SYMBOL_REFERENCES_LOCAL (info, h))
+
+ /* TRUE if this is a PLT reference to a local IFUNC. */
+ if (PLT_LOCAL_IFUNC_P(info, h))
{
rela.r_info = ELFNN_R_INFO (0, R_LARCH_IRELATIVE);
rela.r_addend = (h->root.u.def.value
@@ -2790,27 +2948,51 @@ loongarch_elf_finish_dynamic_symbol (bfd *output_bfd,
rela.r_offset = sec_addr (sgot) + off;
- if (h->type == STT_GNU_IFUNC)
+ if (h->def_regular
+ && h->type == STT_GNU_IFUNC)
{
- if (elf_hash_table (info)->dynamic_sections_created
- && SYMBOL_REFERENCES_LOCAL (info, h))
+ if(h->plt.offset == MINUS_ONE)
{
- asection *sec = h->root.u.def.section;
- rela.r_info = ELFNN_R_INFO (0, R_LARCH_IRELATIVE);
- rela.r_addend = (h->root.u.def.value + sec->output_section->vma
- + sec->output_offset);
- bfd_put_NN (output_bfd, 0, sgot->contents + off);
+ if (htab->elf.splt == NULL)
+ srela = htab->elf.irelplt;
+
+ if (SYMBOL_REFERENCES_LOCAL (info, h))
+ {
+ asection *sec = h->root.u.def.section;
+ rela.r_info = ELFNN_R_INFO (0, R_LARCH_IRELATIVE);
+ rela.r_addend = h->root.u.def.value + sec->output_section->vma
+ + sec->output_offset;
+ bfd_put_NN (output_bfd, 0, sgot->contents + off);
+ }
+ else
+ {
+ BFD_ASSERT ((h->got.offset & 1) == 0);
+ BFD_ASSERT (h->dynindx != -1);
+ rela.r_info = ELFNN_R_INFO (h->dynindx, R_LARCH_NN);
+ rela.r_addend = 0;
+ bfd_put_NN (output_bfd, (bfd_vma) 0, sgot->contents + off);
+ }
}
- else
+ else if(bfd_link_pic (info))
{
- BFD_ASSERT (plt);
- rela.r_info
- = ELFNN_R_INFO (0, (bfd_link_pic (info)
- ? R_LARCH_RELATIVE : R_LARCH_NONE));
- rela.r_addend =
- plt->output_section->vma + plt->output_offset + h->plt.offset;
+ rela.r_info = ELFNN_R_INFO (h->dynindx, R_LARCH_NN);
+ rela.r_addend = 0;
bfd_put_NN (output_bfd, rela.r_addend, sgot->contents + off);
}
+ else
+ {
+ asection *plt;
+ /* For non-shared object, we can't use .got.plt, which
+ contains the real function address if we need pointer
+ equality. We load the GOT entry with the PLT entry. */
+ plt = htab->elf.splt ? htab->elf.splt : htab->elf.iplt;
+ bfd_put_NN (output_bfd,
+ (plt->output_section->vma
+ + plt->output_offset
+ + h->plt.offset),
+ sgot->contents + off);
+ return true;
+ }
}
else if (bfd_link_pic (info) && SYMBOL_REFERENCES_LOCAL (info, h))
{
@@ -2942,10 +3124,8 @@ loongarch_elf_finish_dynamic_sections (bfd *output_bfd,
return false;
}
- if ((plt = htab->elf.splt))
- gotplt = htab->elf.sgotplt;
- else if ((plt = htab->elf.iplt))
- gotplt = htab->elf.igotplt;
+ plt = htab->elf.splt;
+ gotplt = htab->elf.sgotplt;
if (plt && 0 < plt->size)
{
@@ -3074,10 +3254,10 @@ loongarch_elf_copy_indirect_symbol (struct bfd_link_info *info,
struct elf_link_hash_entry *dir,
struct elf_link_hash_entry *ind)
{
- struct loongarch_elf_link_hash_entry *edir, *eind;
+ struct elf_link_hash_entry *edir, *eind;
- edir = (struct loongarch_elf_link_hash_entry *) dir;
- eind = (struct loongarch_elf_link_hash_entry *) ind;
+ edir = dir;
+ eind = ind;
if (eind->dyn_relocs != NULL)
{
@@ -3112,8 +3292,9 @@ loongarch_elf_copy_indirect_symbol (struct bfd_link_info *info,
if (ind->root.type == bfd_link_hash_indirect && dir->got.refcount < 0)
{
- edir->tls_type = eind->tls_type;
- eind->tls_type = GOT_UNKNOWN;
+ loongarch_elf_hash_entry(edir)->tls_type
+ = loongarch_elf_hash_entry(eind)->tls_type;
+ loongarch_elf_hash_entry(eind)->tls_type = GOT_UNKNOWN;
}
_bfd_elf_link_hash_copy_indirect (info, dir, ind);
}
@@ -3230,6 +3411,21 @@ loongarch_elf_gc_mark_hook (asection *sec, struct bfd_link_info *info,
return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
}
+/* Return TRUE if symbol H should be hashed in the `.gnu.hash' section. For
+ executable PLT slots where the executable never takes the address of those
+ functions, the function symbols are not added to the hash table. */
+
+static bool
+elf_loongarch64_hash_symbol (struct elf_link_hash_entry *h)
+{
+ if (h->plt.offset != (bfd_vma) -1
+ && !h->def_regular
+ && !h->pointer_equality_needed)
+ return false;
+
+ return _bfd_elf_hash_symbol (h);
+}
+
#define TARGET_LITTLE_SYM loongarch_elfNN_vec
#define TARGET_LITTLE_NAME "elfNN-loongarch"
#define ELF_ARCH bfd_arch_loongarch
@@ -3261,5 +3457,6 @@ loongarch_elf_gc_mark_hook (asection *sec, struct bfd_link_info *info,
#define elf_backend_plt_sym_val loongarch_elf_plt_sym_val
#define elf_backend_grok_prstatus loongarch_elf_grok_prstatus
#define elf_backend_grok_psinfo loongarch_elf_grok_psinfo
+#define elf_backend_hash_symbol elf_loongarch64_hash_symbol
#include "elfNN-target.h"
diff --git a/bfd/elfnn-riscv.c b/bfd/elfnn-riscv.c
index 95fcc77bea1..8f9f0d8a86a 100644
--- a/bfd/elfnn-riscv.c
+++ b/bfd/elfnn-riscv.c
@@ -3371,52 +3371,27 @@ riscv_std_ext_p (const char *name)
return (strlen (name) == 1) && (name[0] != 'x') && (name[0] != 's');
}
-/* Check if the versions are compatible. */
+/* Update the output subset's version to match the input when the input
+ subset's version is newer. */
-static bool
-riscv_version_mismatch (bfd *ibfd,
- struct riscv_subset_t *in,
- struct riscv_subset_t *out)
+static void
+riscv_update_subset_version (struct riscv_subset_t *in,
+ struct riscv_subset_t *out)
{
if (in == NULL || out == NULL)
- return true;
+ return;
- /* Since there are no version conflicts for now, we just report
- warning when the versions are mis-matched. */
- if (in->major_version != out->major_version
- || in->minor_version != out->minor_version)
+ /* Update the output ISA versions to the newest ones, but otherwise don't
+ provide any errors or warnings about mis-matched ISA versions as it's
+ generally too tricky to check for these at link time. */
+ if ((in->major_version > out->major_version)
+ || (in->major_version == out->major_version
+ && in->minor_version > out->minor_version)
+ || (out->major_version == RISCV_UNKNOWN_VERSION))
{
- if ((in->major_version == RISCV_UNKNOWN_VERSION
- && in->minor_version == RISCV_UNKNOWN_VERSION)
- || (out->major_version == RISCV_UNKNOWN_VERSION
- && out->minor_version == RISCV_UNKNOWN_VERSION))
- {
- /* Do not report the warning when the version of input
- or output is RISCV_UNKNOWN_VERSION, since the extension
- is added implicitly. */
- }
- else
- _bfd_error_handler
- (_("warning: %pB: mis-matched ISA version %d.%d for '%s' "
- "extension, the output version is %d.%d"),
- ibfd,
- in->major_version,
- in->minor_version,
- in->name,
- out->major_version,
- out->minor_version);
-
- /* Update the output ISA versions to the newest ones. */
- if ((in->major_version > out->major_version)
- || (in->major_version == out->major_version
- && in->minor_version > out->minor_version))
- {
- out->major_version = in->major_version;
- out->minor_version = in->minor_version;
- }
+ out->major_version = in->major_version;
+ out->minor_version = in->minor_version;
}
-
- return true;
}
/* Return true if subset is 'i' or 'e'. */
@@ -3477,11 +3452,10 @@ riscv_merge_std_ext (bfd *ibfd,
ibfd, in->name, out->name);
return false;
}
- else if (!riscv_version_mismatch (ibfd, in, out))
- return false;
- else
- riscv_add_subset (&merged_subsets,
- out->name, out->major_version, out->minor_version);
+
+ riscv_update_subset_version(in, out);
+ riscv_add_subset (&merged_subsets,
+ out->name, out->major_version, out->minor_version);
in = in->next;
out = out->next;
@@ -3499,10 +3473,8 @@ riscv_merge_std_ext (bfd *ibfd,
if (!find_in && !find_out)
continue;
- if (find_in
- && find_out
- && !riscv_version_mismatch (ibfd, ext_in, ext_out))
- return false;
+ if (find_in && find_out)
+ riscv_update_subset_version(ext_in, ext_out);
ext_merged = find_out ? ext_out : ext_in;
riscv_add_subset (&merged_subsets, ext_merged->name,
@@ -3524,8 +3496,7 @@ riscv_merge_std_ext (bfd *ibfd,
on success and FALSE when a conflict is found. */
static bool
-riscv_merge_multi_letter_ext (bfd *ibfd,
- riscv_subset_t **pin,
+riscv_merge_multi_letter_ext (riscv_subset_t **pin,
riscv_subset_t **pout)
{
riscv_subset_t *in = *pin;
@@ -3555,8 +3526,7 @@ riscv_merge_multi_letter_ext (bfd *ibfd,
else
{
/* Both present, check version and increment both. */
- if (!riscv_version_mismatch (ibfd, in, out))
- return false;
+ riscv_update_subset_version (in, out);
riscv_add_subset (&merged_subsets, out->name, out->major_version,
out->minor_version);
@@ -3629,7 +3599,7 @@ riscv_merge_arch_attr_info (bfd *ibfd, char *in_arch, char *out_arch)
return NULL;
/* Merge all non-single letter extensions with single call. */
- if (!riscv_merge_multi_letter_ext (ibfd, &in, &out))
+ if (!riscv_merge_multi_letter_ext (&in, &out))
return NULL;
if (xlen_in != xlen_out)
diff --git a/bfd/elfxx-loongarch.c b/bfd/elfxx-loongarch.c
index ab78792b630..6f7c82297c5 100644
--- a/bfd/elfxx-loongarch.c
+++ b/bfd/elfxx-loongarch.c
@@ -29,210 +29,259 @@
#define ALL_ONES (~ (bfd_vma) 0)
+typedef struct loongarch_reloc_howto_type_struct
+{
+ /* The first must be reloc_howto_type! */
+ reloc_howto_type howto;
+ bfd_reloc_code_real_type bfd_type;
+ bool (*adjust_reloc_bits)(reloc_howto_type *, bfd_vma *);
+}loongarch_reloc_howto_type;
+
+#define LOONGARCH_DEFAULT_HOWTO(r_name) \
+ { HOWTO (R_LARCH_##r_name, 0, 2, 32, false, 0, complain_overflow_signed, \
+ bfd_elf_generic_reloc, "R_LARCH_" #r_name, false, 0, ALL_ONES, \
+ false), BFD_RELOC_LARCH_##r_name, NULL }
+
+#define LOONGARCH_HOWTO(type, right, size, bits, pcrel, left, ovf, func, \
+ name, inplace, src_mask, dst_mask, pcrel_off, btype, afunc) \
+ { HOWTO(type, right, size, bits, pcrel, left, ovf, func, name, \
+ inplace, src_mask, dst_mask, pcrel_off), btype, afunc }
+
+#define LOONGARCH_EMPTY_HOWTO(C) \
+ { EMPTY_HOWTO(C), BFD_RELOC_NONE, NULL }
+
+bool loongarch_gen_adjust_reloc_bits (reloc_howto_type *howto, bfd_vma *val);
+bool loongarch_adjust_reloc_bits_l16_xx5_h5 (reloc_howto_type *howto,
+ bfd_vma *fix_val);
+bool loongarch_adjust_reloc_bits_l16_h10 (reloc_howto_type *howto,
+ bfd_vma *val);
+
+
/* This does not include any relocation information, but should be
good enough for GDB or objdump to read the file. */
-
-static reloc_howto_type howto_table[] =
+static loongarch_reloc_howto_type loongarch_howto_table[] =
{
-#define LOONGARCH_HOWTO(r_name) \
- HOWTO (R_LARCH_##r_name, 0, 2, 32, false, 0, complain_overflow_signed, \
- bfd_elf_generic_reloc, "R_LARCH_" #r_name, false, 0, 0xffffffff, false)
-
/* No relocation. */
- HOWTO (R_LARCH_NONE, /* type (0). */
- 0, /* rightshift */
- 3, /* size */
- 0, /* bitsize */
- false, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_LARCH_NONE", /* name */
- false, /* partial_inplace */
- 0, /* src_mask */
- 0, /* dst_mask */
- false), /* pcrel_offset */
+ LOONGARCH_HOWTO (R_LARCH_NONE, /* type (0). */
+ 0, /* rightshift */
+ 3, /* size */
+ 0, /* bitsize */
+ false, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_LARCH_NONE", /* name */
+ false, /* partial_inplace */
+ 0, /* src_mask */
+ 0, /* dst_mask */
+ false, /* pcrel_offset */
+ BFD_RELOC_NONE, /* bfd_reloc_code_real_type */
+ NULL), /* adjust_reloc_bits */
/* 32 bit relocation. */
- HOWTO (R_LARCH_32, /* type (1). */
- 0, /* rightshift */
- 2, /* size */
- 32, /* bitsize */
- false, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_LARCH_32", /* name */
- false, /* partial_inplace */
- 0, /* src_mask */
- 0xffffffff, /* dst_mask */
- false), /* pcrel_offset */
+ LOONGARCH_HOWTO (R_LARCH_32, /* type (1). */
+ 0, /* rightshift */
+ 2, /* size */
+ 32, /* bitsize */
+ false, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_LARCH_32", /* name */
+ false, /* partial_inplace */
+ 0, /* src_mask */
+ ALL_ONES, /* dst_mask */
+ false, /* pcrel_offset */
+ BFD_RELOC_32, /* bfd_reloc_code_real_type */
+ NULL), /* adjust_reloc_bits */
/* 64 bit relocation. */
- HOWTO (R_LARCH_64, /* type (2). */
- 0, /* rightshift */
- 4, /* size */
- 64, /* bitsize */
- false, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_LARCH_64", /* name */
- false, /* partial_inplace */
- 0, /* src_mask */
- ALL_ONES, /* dst_mask */
- false), /* pcrel_offset */
-
- HOWTO (R_LARCH_RELATIVE, /* type (3). */
- 0, /* rightshift */
- 2, /* size */
- 32, /* bitsize */
- false, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_LARCH_RELATIVE", /* name */
- false, /* partial_inplace */
- 0, /* src_mask */
- 0xffffffff, /* dst_mask */
- false), /* pcrel_offset */
-
- HOWTO (R_LARCH_COPY, /* type (4). */
- 0, /* rightshift */
- 0, /* this one is variable size */
- 0, /* bitsize */
- false, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_bitfield, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_LARCH_COPY", /* name */
- false, /* partial_inplace */
- 0, /* src_mask */
- 0, /* dst_mask */
- false), /* pcrel_offset */
-
- HOWTO (R_LARCH_JUMP_SLOT, /* type (5). */
- 0, /* rightshift */
- 4, /* size */
- 64, /* bitsize */
- false, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_bitfield, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_LARCH_JUMP_SLOT", /* name */
- false, /* partial_inplace */
- 0, /* src_mask */
- 0, /* dst_mask */
- false), /* pcrel_offset */
+ LOONGARCH_HOWTO (R_LARCH_64, /* type (2). */
+ 0, /* rightshift */
+ 4, /* size */
+ 64, /* bitsize */
+ false, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_LARCH_64", /* name */
+ false, /* partial_inplace */
+ 0, /* src_mask */
+ ALL_ONES, /* dst_mask */
+ false, /* pcrel_offset */
+ BFD_RELOC_64, /* bfd_reloc_code_real_type */
+ NULL), /* adjust_reloc_bits */
+
+ LOONGARCH_HOWTO (R_LARCH_RELATIVE, /* type (3). */
+ 0, /* rightshift */
+ 2, /* size */
+ 32, /* bitsize */
+ false, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_LARCH_RELATIVE", /* name */
+ false, /* partial_inplace */
+ 0, /* src_mask */
+ ALL_ONES, /* dst_mask */
+ false, /* pcrel_offset */
+ BFD_RELOC_NONE, /* undefined? */
+ NULL), /* adjust_reloc_bits */
+
+ LOONGARCH_HOWTO (R_LARCH_COPY, /* type (4). */
+ 0, /* rightshift */
+ 0, /* this one is variable size */
+ 0, /* bitsize */
+ false, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_LARCH_COPY", /* name */
+ false, /* partial_inplace */
+ 0, /* src_mask */
+ 0, /* dst_mask */
+ false, /* pcrel_offset */
+ BFD_RELOC_NONE, /* undefined? */
+ NULL), /* adjust_reloc_bits */
+
+ LOONGARCH_HOWTO (R_LARCH_JUMP_SLOT, /* type (5). */
+ 0, /* rightshift */
+ 4, /* size */
+ 64, /* bitsize */
+ false, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_LARCH_JUMP_SLOT", /* name */
+ false, /* partial_inplace */
+ 0, /* src_mask */
+ 0, /* dst_mask */
+ false, /* pcrel_offset */
+ BFD_RELOC_NONE, /* undefined? */
+ NULL), /* adjust_reloc_bits */
/* Dynamic TLS relocations. */
- HOWTO (R_LARCH_TLS_DTPMOD32, /* type (6). */
- 0, /* rightshift */
- 2, /* size */
- 32, /* bitsize */
- false, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_LARCH_TLS_DTPMOD32", /* name */
- false, /* partial_inplace */
- 0, /* src_mask */
- 0xffffffff, /* dst_mask */
- false), /* pcrel_offset */
-
- HOWTO (R_LARCH_TLS_DTPMOD64, /* type (7). */
- 0, /* rightshift */
- 4, /* size */
- 64, /* bitsize */
- false, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_LARCH_TLS_DTPMOD64", /* name */
- false, /* partial_inplace */
- 0, /* src_mask */
- ALL_ONES, /* dst_mask */
- false), /* pcrel_offset */
-
- HOWTO (R_LARCH_TLS_DTPREL32, /* type (8). */
- 0, /* rightshift */
- 2, /* size */
- 32, /* bitsize */
- false, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_LARCH_TLS_DTPREL32", /* name */
- true, /* partial_inplace */
- 0, /* src_mask */
- 0xffffffff, /* dst_mask */
- false), /* pcrel_offset */
-
- HOWTO (R_LARCH_TLS_DTPREL64, /* type (9). */
- 0, /* rightshift */
- 4, /* size */
- 64, /* bitsize */
- false, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_LARCH_TLS_DTPREL64", /* name */
- true, /* partial_inplace */
- 0, /* src_mask */
- ALL_ONES, /* dst_mask */
- false), /* pcrel_offset */
-
- HOWTO (R_LARCH_TLS_TPREL32, /* type (10). */
- 0, /* rightshift */
- 2, /* size */
- 32, /* bitsize */
- false, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_LARCH_TLS_TPREL32", /* name */
- false, /* partial_inplace */
- 0, /* src_mask */
- 0xffffffff, /* dst_mask */
- false), /* pcrel_offset */
-
- HOWTO (R_LARCH_TLS_TPREL64, /* type (11). */
- 0, /* rightshift */
- 4, /* size */
- 64, /* bitsize */
- false, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_LARCH_TLS_TPREL64", /* name */
- false, /* partial_inplace */
- 0, /* src_mask */
- ALL_ONES, /* dst_mask */
- false), /* pcrel_offset */
-
- HOWTO (R_LARCH_IRELATIVE, /* type (12). */
- 0, /* rightshift */
- 2, /* size */
- 32, /* bitsize */
- false, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_LARCH_IRELATIVE", /* name */
- false, /* partial_inplace */
- 0, /* src_mask */
- 0xffffffff, /* dst_mask */
- false), /* pcrel_offset */
-
- EMPTY_HOWTO(13),
- EMPTY_HOWTO(14),
- EMPTY_HOWTO(15),
- EMPTY_HOWTO(16),
- EMPTY_HOWTO(17),
- EMPTY_HOWTO(18),
- EMPTY_HOWTO(19),
-
- HOWTO (R_LARCH_MARK_LA, /* type (20). */
+ LOONGARCH_HOWTO (R_LARCH_TLS_DTPMOD32, /* type (6). */
+ 0, /* rightshift */
+ 2, /* size */
+ 32, /* bitsize */
+ false, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_LARCH_TLS_DTPMOD32", /* name */
+ false, /* partial_inplace */
+ 0, /* src_mask */
+ ALL_ONES, /* dst_mask */
+ false, /* pcrel_offset */
+ BFD_RELOC_LARCH_TLS_DTPMOD32, /* bfd_reloc_code_real_type */
+ NULL), /* adjust_reloc_bits */
+
+ LOONGARCH_HOWTO (R_LARCH_TLS_DTPMOD64, /* type (7). */
+ 0, /* rightshift */
+ 4, /* size */
+ 64, /* bitsize */
+ false, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_LARCH_TLS_DTPMOD64", /* name */
+ false, /* partial_inplace */
+ 0, /* src_mask */
+ ALL_ONES, /* dst_mask */
+ false, /* pcrel_offset */
+ BFD_RELOC_LARCH_TLS_DTPMOD64, /* bfd_reloc_code_real_type */
+ NULL), /* adjust_reloc_bits */
+
+ LOONGARCH_HOWTO (R_LARCH_TLS_DTPREL32, /* type (8). */
+ 0, /* rightshift */
+ 2, /* size */
+ 32, /* bitsize */
+ false, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_LARCH_TLS_DTPREL32", /* name */
+ true, /* partial_inplace */
+ 0, /* src_mask */
+ ALL_ONES, /* dst_mask */
+ false, /* pcrel_offset */
+ BFD_RELOC_LARCH_TLS_DTPREL32, /* bfd_reloc_code_real_type */
+ NULL), /* adjust_reloc_bits */
+
+ LOONGARCH_HOWTO (R_LARCH_TLS_DTPREL64, /* type (9). */
+ 0, /* rightshift */
+ 4, /* size */
+ 64, /* bitsize */
+ false, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_LARCH_TLS_DTPREL64", /* name */
+ true, /* partial_inplace */
+ 0, /* src_mask */
+ ALL_ONES, /* dst_mask */
+ false, /* pcrel_offset */
+ BFD_RELOC_LARCH_TLS_DTPREL64, /* bfd_reloc_code_real_type */
+ NULL), /* adjust_reloc_bits */
+
+ LOONGARCH_HOWTO (R_LARCH_TLS_TPREL32, /* type (10). */
+ 0, /* rightshift */
+ 2, /* size */
+ 32, /* bitsize */
+ false, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_LARCH_TLS_TPREL32", /* name */
+ false, /* partial_inplace */
+ 0, /* src_mask */
+ ALL_ONES, /* dst_mask */
+ false, /* pcrel_offset */
+ BFD_RELOC_LARCH_TLS_TPREL32, /* bfd_reloc_code_real_type */
+ NULL), /* adjust_reloc_bits */
+
+ LOONGARCH_HOWTO (R_LARCH_TLS_TPREL64, /* type (11). */
+ 0, /* rightshift */
+ 4, /* size */
+ 64, /* bitsize */
+ false, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_LARCH_TLS_TPREL64", /* name */
+ false, /* partial_inplace */
+ 0, /* src_mask */
+ ALL_ONES, /* dst_mask */
+ false, /* pcrel_offset */
+ BFD_RELOC_LARCH_TLS_TPREL64, /* bfd_reloc_code_real_type */
+ NULL), /* adjust_reloc_bits */
+
+ LOONGARCH_HOWTO (R_LARCH_IRELATIVE, /* type (12). */
+ 0, /* rightshift */
+ 2, /* size */
+ 32, /* bitsize */
+ false, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_LARCH_IRELATIVE", /* name */
+ false, /* partial_inplace */
+ 0, /* src_mask */
+ ALL_ONES, /* dst_mask */
+ false, /* pcrel_offset */
+ BFD_RELOC_NONE, /* undefined? */
+ NULL), /* adjust_reloc_bits */
+
+ LOONGARCH_EMPTY_HOWTO(13),
+ LOONGARCH_EMPTY_HOWTO(14),
+ LOONGARCH_EMPTY_HOWTO(15),
+ LOONGARCH_EMPTY_HOWTO(16),
+ LOONGARCH_EMPTY_HOWTO(17),
+ LOONGARCH_EMPTY_HOWTO(18),
+ LOONGARCH_EMPTY_HOWTO(19),
+
+ LOONGARCH_HOWTO (R_LARCH_MARK_LA, /* type (20). */
0, /* rightshift. */
3, /* size. */
0, /* bitsize. */
@@ -244,9 +293,11 @@ static reloc_howto_type howto_table[] =
false, /* partial_inplace. */
0, /* src_mask. */
0, /* dst_mask. */
- false), /* pcrel_offset. */
+ false, /* pcrel_offset */
+ BFD_RELOC_LARCH_MARK_LA, /* bfd_reloc_code_real_type */
+ NULL), /* adjust_reloc_bits */
- HOWTO (R_LARCH_MARK_PCREL, /* type (21). */
+ LOONGARCH_HOWTO (R_LARCH_MARK_PCREL, /* type (21). */
0, /* rightshift. */
3, /* size. */
0, /* bitsize. */
@@ -258,9 +309,11 @@ static reloc_howto_type howto_table[] =
false, /* partial_inplace. */
0, /* src_mask. */
0, /* dst_mask. */
- false), /* pcrel_offset. */
+ false, /* pcrel_offset */
+ BFD_RELOC_LARCH_MARK_PCREL, /* bfd_reloc_code_real_type */
+ NULL), /* adjust_reloc_bits */
- HOWTO (R_LARCH_SOP_PUSH_PCREL, /* type (22). */
+ LOONGARCH_HOWTO (R_LARCH_SOP_PUSH_PCREL, /* type (22). */
2, /* rightshift. */
2, /* size. */
32, /* bitsize. */
@@ -270,126 +323,144 @@ static reloc_howto_type howto_table[] =
bfd_elf_generic_reloc, /* special_function. */
"R_LARCH_SOP_PUSH_PCREL", /* name. */
false, /* partial_inplace. */
- 0x03ffffff, /* src_mask. */
- 0x03ffffff, /* dst_mask. */
- false), /* pcrel_offset. */
+ 0x03ffffff, /* src_mask. */
+ 0x03ffffff, /* dst_mask. */
+ false, /* pcrel_offset */
+ BFD_RELOC_LARCH_SOP_PUSH_PCREL, /* bfd_reloc_code_real_type */
+ NULL), /* adjust_reloc_bits */
/* type 23-37. */
- LOONGARCH_HOWTO (SOP_PUSH_ABSOLUTE),
- LOONGARCH_HOWTO (SOP_PUSH_DUP),
- LOONGARCH_HOWTO (SOP_PUSH_GPREL),
- LOONGARCH_HOWTO (SOP_PUSH_TLS_TPREL),
- LOONGARCH_HOWTO (SOP_PUSH_TLS_GOT),
- LOONGARCH_HOWTO (SOP_PUSH_TLS_GD),
- LOONGARCH_HOWTO (SOP_PUSH_PLT_PCREL),
- LOONGARCH_HOWTO (SOP_ASSERT),
- LOONGARCH_HOWTO (SOP_NOT),
- LOONGARCH_HOWTO (SOP_SUB),
- LOONGARCH_HOWTO (SOP_SL),
- LOONGARCH_HOWTO (SOP_SR),
- LOONGARCH_HOWTO (SOP_ADD),
- LOONGARCH_HOWTO (SOP_AND),
- LOONGARCH_HOWTO (SOP_IF_ELSE),
-
- HOWTO (R_LARCH_SOP_POP_32_S_10_5, /* type (38). */
- 0, /* rightshift. */
- 2, /* size. */
- 5, /* bitsize. */
- false, /* pc_relative. */
- 10, /* bitpos. */
- complain_overflow_signed, /* complain_on_overflow. */
- bfd_elf_generic_reloc, /* special_function. */
- "R_LARCH_SOP_POP_32_S_10_5", /* name. */
- false, /* partial_inplace. */
- 0, /* src_mask */
- 0x7c00, /* dst_mask */
- false), /* pcrel_offset. */
-
- HOWTO (R_LARCH_SOP_POP_32_U_10_12, /* type (39). */
- 0, /* rightshift. */
- 2, /* size. */
- 12, /* bitsize. */
- false, /* pc_relative. */
- 10, /* bitpos. */
- complain_overflow_signed, /* complain_on_overflow. */
- bfd_elf_generic_reloc, /* special_function. */
- "R_LARCH_SOP_POP_32_U_10_12", /* name. */
- false, /* partial_inplace. */
- 0, /* src_mask */
- 0x3ffc00, /* dst_mask */
- false), /* pcrel_offset. */
-
- HOWTO (R_LARCH_SOP_POP_32_S_10_12, /* type (40). */
- 0, /* rightshift. */
- 2, /* size. */
- 12, /* bitsize. */
- false, /* pc_relative. */
- 10, /* bitpos. */
- complain_overflow_signed, /* complain_on_overflow. */
- bfd_elf_generic_reloc, /* special_function. */
- "R_LARCH_SOP_POP_32_S_10_12", /* name. */
- false, /* partial_inplace. */
- 0, /* src_mask */
- 0x3ffc00, /* dst_mask */
- false), /* pcrel_offset. */
-
- HOWTO (R_LARCH_SOP_POP_32_S_10_16, /* type (41). */
- 0, /* rightshift. */
- 2, /* size. */
- 16, /* bitsize. */
- false, /* pc_relative. */
- 10, /* bitpos. */
- complain_overflow_signed, /* complain_on_overflow. */
- bfd_elf_generic_reloc, /* special_function. */
- "R_LARCH_SOP_POP_32_S_10_16", /* name. */
- false, /* partial_inplace. */
- 0, /* src_mask */
- 0x3fffc00, /* dst_mask */
- false), /* pcrel_offset. */
-
- HOWTO (R_LARCH_SOP_POP_32_S_10_16_S2, /* type (42). */
- 2, /* rightshift. */
- 2, /* size. */
- 16, /* bitsize. */
- false, /* pc_relative. */
- 10, /* bitpos. */
- complain_overflow_signed, /* complain_on_overflow. */
- bfd_elf_generic_reloc, /* special_function. */
- "R_LARCH_SOP_POP_32_S_10_16_S2", /* name. */
- false, /* partial_inplace. */
- 0, /* src_mask */
- 0x3fffc00, /* dst_mask */
- false), /* pcrel_offset. */
-
- HOWTO (R_LARCH_SOP_POP_32_S_5_20, /* type (43). */
- 0, /* rightshift. */
- 2, /* size. */
- 20, /* bitsize. */
- false, /* pc_relative. */
- 5, /* bitpos. */
- complain_overflow_signed, /* complain_on_overflow. */
- bfd_elf_generic_reloc, /* special_function. */
- "R_LARCH_SOP_POP_32_S_5_20", /* name. */
- false, /* partial_inplace. */
- 0, /* src_mask */
- 0x1fffe0, /* dst_mask */
- false), /* pcrel_offset. */
-
- HOWTO (R_LARCH_SOP_POP_32_S_0_5_10_16_S2, /* type (44). */
- 2, /* rightshift. */
- 2, /* size. */
- 21, /* bitsize. */
- false, /* pc_relative. */
- 0, /* bitpos. */
- complain_overflow_signed, /* complain_on_overflow. */
- bfd_elf_generic_reloc, /* special_function. */
- "R_LARCH_SOP_POP_32_S_0_5_10_16_S2", /* name. */
- false, /* partial_inplace. */
- 0xfc0003e0, /* src_mask */
- 0xfc0003e0, /* dst_mask */
- false), /* pcrel_offset. */
-
- HOWTO (R_LARCH_SOP_POP_32_S_0_10_10_16_S2, /* type (45). */
+ LOONGARCH_DEFAULT_HOWTO (SOP_PUSH_ABSOLUTE),
+ LOONGARCH_DEFAULT_HOWTO (SOP_PUSH_DUP),
+ LOONGARCH_DEFAULT_HOWTO (SOP_PUSH_GPREL),
+ LOONGARCH_DEFAULT_HOWTO (SOP_PUSH_TLS_TPREL),
+ LOONGARCH_DEFAULT_HOWTO (SOP_PUSH_TLS_GOT),
+ LOONGARCH_DEFAULT_HOWTO (SOP_PUSH_TLS_GD),
+ LOONGARCH_DEFAULT_HOWTO (SOP_PUSH_PLT_PCREL),
+ LOONGARCH_DEFAULT_HOWTO (SOP_ASSERT),
+ LOONGARCH_DEFAULT_HOWTO (SOP_NOT),
+ LOONGARCH_DEFAULT_HOWTO (SOP_SUB),
+ LOONGARCH_DEFAULT_HOWTO (SOP_SL),
+ LOONGARCH_DEFAULT_HOWTO (SOP_SR),
+ LOONGARCH_DEFAULT_HOWTO (SOP_ADD),
+ LOONGARCH_DEFAULT_HOWTO (SOP_AND),
+ LOONGARCH_DEFAULT_HOWTO (SOP_IF_ELSE),
+
+ LOONGARCH_HOWTO (R_LARCH_SOP_POP_32_S_10_5, /* type (38). */
+ 0, /* rightshift. */
+ 2, /* size. */
+ 5, /* bitsize. */
+ false, /* pc_relative. */
+ 10, /* bitpos. */
+ complain_overflow_signed, /* complain_on_overflow. */
+ bfd_elf_generic_reloc, /* special_function. */
+ "R_LARCH_SOP_POP_32_S_10_5", /* name. */
+ false, /* partial_inplace. */
+ 0, /* src_mask */
+ 0x7c00, /* dst_mask */
+ false, /* pcrel_offset */
+ BFD_RELOC_LARCH_SOP_POP_32_S_10_5, /* bfd_reloc_code_real_type */
+ loongarch_gen_adjust_reloc_bits), /* adjust_reloc_bits */
+
+ LOONGARCH_HOWTO (R_LARCH_SOP_POP_32_U_10_12, /* type (39). */
+ 0, /* rightshift. */
+ 2, /* size. */
+ 12, /* bitsize. */
+ false, /* pc_relative. */
+ 10, /* bitpos. */
+ complain_overflow_unsigned, /* complain_on_overflow. */
+ bfd_elf_generic_reloc, /* special_function. */
+ "R_LARCH_SOP_POP_32_U_10_12", /* name. */
+ false, /* partial_inplace. */
+ 0, /* src_mask */
+ 0x3ffc00, /* dst_mask */
+ false, /* pcrel_offset */
+ BFD_RELOC_LARCH_SOP_POP_32_U_10_12, /* bfd_reloc_code_real_type */
+ loongarch_gen_adjust_reloc_bits), /* adjust_reloc_bits */
+
+ LOONGARCH_HOWTO (R_LARCH_SOP_POP_32_S_10_12, /* type (40). */
+ 0, /* rightshift. */
+ 2, /* size. */
+ 12, /* bitsize. */
+ false, /* pc_relative. */
+ 10, /* bitpos. */
+ complain_overflow_signed, /* complain_on_overflow. */
+ bfd_elf_generic_reloc, /* special_function. */
+ "R_LARCH_SOP_POP_32_S_10_12", /* name. */
+ false, /* partial_inplace. */
+ 0, /* src_mask */
+ 0x3ffc00, /* dst_mask */
+ false, /* pcrel_offset */
+ BFD_RELOC_LARCH_SOP_POP_32_S_10_12, /* bfd_reloc_code_real_type */
+ loongarch_gen_adjust_reloc_bits), /* adjust_reloc_bits */
+
+ LOONGARCH_HOWTO (R_LARCH_SOP_POP_32_S_10_16, /* type (41). */
+ 0, /* rightshift. */
+ 2, /* size. */
+ 16, /* bitsize. */
+ false, /* pc_relative. */
+ 10, /* bitpos. */
+ complain_overflow_signed, /* complain_on_overflow. */
+ bfd_elf_generic_reloc, /* special_function. */
+ "R_LARCH_SOP_POP_32_S_10_16", /* name. */
+ false, /* partial_inplace. */
+ 0, /* src_mask */
+ 0x3fffc00, /* dst_mask */
+ false, /* pcrel_offset */
+ BFD_RELOC_LARCH_SOP_POP_32_S_10_16, /* bfd_reloc_code_real_type */
+ loongarch_gen_adjust_reloc_bits), /* adjust_reloc_bits */
+
+ LOONGARCH_HOWTO (R_LARCH_SOP_POP_32_S_10_16_S2, /* type (42). */
+ 2, /* rightshift. */
+ 2, /* size. */
+ 16, /* bitsize. */
+ false, /* pc_relative. */
+ 10, /* bitpos. */
+ complain_overflow_signed, /* complain_on_overflow. */
+ bfd_elf_generic_reloc, /* special_function. */
+ "R_LARCH_SOP_POP_32_S_10_16_S2", /* name. */
+ false, /* partial_inplace. */
+ 0, /* src_mask */
+ 0x3fffc00, /* dst_mask */
+ false, /* pcrel_offset */
+ BFD_RELOC_LARCH_SOP_POP_32_S_10_16_S2, /* bfd_reloc_code_real_type */
+ loongarch_gen_adjust_reloc_bits), /* adjust_reloc_bits */
+
+ LOONGARCH_HOWTO (R_LARCH_SOP_POP_32_S_5_20, /* type (43). */
+ 0, /* rightshift. */
+ 2, /* size. */
+ 20, /* bitsize. */
+ false, /* pc_relative. */
+ 5, /* bitpos. */
+ complain_overflow_signed, /* complain_on_overflow. */
+ bfd_elf_generic_reloc, /* special_function. */
+ "R_LARCH_SOP_POP_32_S_5_20", /* name. */
+ false, /* partial_inplace. */
+ 0, /* src_mask */
+ 0x1ffffe0, /* dst_mask */
+ false, /* pcrel_offset */
+ BFD_RELOC_LARCH_SOP_POP_32_S_5_20, /* bfd_reloc_code_real_type */
+ loongarch_gen_adjust_reloc_bits), /* adjust_reloc_bits */
+
+ LOONGARCH_HOWTO (R_LARCH_SOP_POP_32_S_0_5_10_16_S2,
+ /* type (44). */
+ 2, /* rightshift. */
+ 2, /* size. */
+ 21, /* bitsize. */
+ false, /* pc_relative. */
+ 0, /* bitpos. */
+ complain_overflow_signed, /* complain_on_overflow. */
+ bfd_elf_generic_reloc, /* special_function. */
+ "R_LARCH_SOP_POP_32_S_0_5_10_16_S2", /* name. */
+ false, /* partial_inplace. */
+ 0xfc0003e0, /* src_mask */
+ 0xfc0003e0, /* dst_mask */
+ false, /* pcrel_offset */
+ BFD_RELOC_LARCH_SOP_POP_32_S_0_5_10_16_S2,
+ /* bfd_reloc_code_real_type */
+ loongarch_adjust_reloc_bits_l16_xx5_h5), /* adjust_reloc_bits */
+
+ LOONGARCH_HOWTO (R_LARCH_SOP_POP_32_S_0_10_10_16_S2, /* type (45). */
2, /* rightshift. */
2, /* size. */
26, /* bitsize. */
@@ -401,23 +472,28 @@ static reloc_howto_type howto_table[] =
false, /* partial_inplace. */
0xfc000000, /* src_mask */
0xfc000000, /* dst_mask */
- false), /* pcrel_offset. */
+ false, /* pcrel_offset */
+ BFD_RELOC_LARCH_SOP_POP_32_S_0_10_10_16_S2,
+ /* bfd_reloc_code_real_type */
+ loongarch_adjust_reloc_bits_l16_h10), /* adjust_reloc_bits */
- HOWTO (R_LARCH_SOP_POP_32_U, /* type (46). */
+ LOONGARCH_HOWTO (R_LARCH_SOP_POP_32_U, /* type (46). */
0, /* rightshift. */
2, /* size. */
32, /* bitsize. */
false, /* pc_relative. */
0, /* bitpos. */
- complain_overflow_signed, /* complain_on_overflow. */
+ complain_overflow_unsigned, /* complain_on_overflow. */
bfd_elf_generic_reloc, /* special_function. */
"R_LARCH_SOP_POP_32_S_U", /* name. */
false, /* partial_inplace. */
- 0, /* src_mask */
- 0, /* dst_mask */
- false), /* pcrel_offset. */
+ 0xffffffff00000000, /* src_mask */
+ 0x00000000ffffffff, /* dst_mask */
+ false, /* pcrel_offset */
+ BFD_RELOC_LARCH_SOP_POP_32_U, /* bfd_reloc_code_real_type */
+ loongarch_gen_adjust_reloc_bits), /* adjust_reloc_bits */
- HOWTO (R_LARCH_ADD8, /* type (47). */
+ LOONGARCH_HOWTO (R_LARCH_ADD8, /* type (47). */
0, /* rightshift. */
2, /* size. */
8, /* bitsize. */
@@ -428,10 +504,12 @@ static reloc_howto_type howto_table[] =
"R_LARCH_ADD8", /* name. */
false, /* partial_inplace. */
0, /* src_mask */
- 0xffffffff, /* dst_mask */
- false), /* pcrel_offset. */
+ ALL_ONES, /* dst_mask */
+ false, /* pcrel_offset */
+ BFD_RELOC_LARCH_ADD8, /* bfd_reloc_code_real_type */
+ NULL), /* adjust_reloc_bits */
- HOWTO (R_LARCH_ADD16, /* type (48). */
+ LOONGARCH_HOWTO (R_LARCH_ADD16, /* type (48). */
0, /* rightshift. */
2, /* size. */
16, /* bitsize. */
@@ -442,10 +520,12 @@ static reloc_howto_type howto_table[] =
"R_LARCH_ADD16", /* name. */
false, /* partial_inplace. */
0, /* src_mask */
- 0xffffffff, /* dst_mask */
- false), /* pcrel_offset. */
+ ALL_ONES, /* dst_mask */
+ false, /* pcrel_offset */
+ BFD_RELOC_LARCH_ADD16, /* bfd_reloc_code_real_type */
+ NULL), /* adjust_reloc_bits */
- HOWTO (R_LARCH_ADD24, /* type (49). */
+ LOONGARCH_HOWTO (R_LARCH_ADD24, /* type (49). */
0, /* rightshift. */
2, /* size. */
24, /* bitsize. */
@@ -456,10 +536,12 @@ static reloc_howto_type howto_table[] =
"R_LARCH_ADD24", /* name. */
false, /* partial_inplace. */
0, /* src_mask */
- 0xffffffff, /* dst_mask */
- false), /* pcrel_offset. */
+ ALL_ONES, /* dst_mask */
+ false, /* pcrel_offset */
+ BFD_RELOC_LARCH_ADD24, /* bfd_reloc_code_real_type */
+ NULL), /* adjust_reloc_bits */
- HOWTO (R_LARCH_ADD32, /* type (50). */
+ LOONGARCH_HOWTO (R_LARCH_ADD32, /* type (50). */
0, /* rightshift. */
2, /* size. */
32, /* bitsize. */
@@ -470,10 +552,12 @@ static reloc_howto_type howto_table[] =
"R_LARCH_ADD32", /* name. */
false, /* partial_inplace. */
0, /* src_mask */
- 0xffffffff, /* dst_mask */
- false), /* pcrel_offset. */
+ ALL_ONES, /* dst_mask */
+ false, /* pcrel_offset */
+ BFD_RELOC_LARCH_ADD32, /* bfd_reloc_code_real_type */
+ NULL), /* adjust_reloc_bits */
- HOWTO (R_LARCH_ADD64, /* type (51). */
+ LOONGARCH_HOWTO (R_LARCH_ADD64, /* type (51). */
0, /* rightshift. */
4, /* size. */
64, /* bitsize. */
@@ -485,9 +569,11 @@ static reloc_howto_type howto_table[] =
false, /* partial_inplace. */
0, /* src_mask */
ALL_ONES, /* dst_mask */
- false), /* pcrel_offset. */
+ false, /* pcrel_offset */
+ BFD_RELOC_LARCH_ADD64, /* bfd_reloc_code_real_type */
+ NULL), /* adjust_reloc_bits */
- HOWTO (R_LARCH_SUB8, /* type (52). */
+ LOONGARCH_HOWTO (R_LARCH_SUB8, /* type (52). */
0, /* rightshift. */
2, /* size. */
8, /* bitsize. */
@@ -498,10 +584,12 @@ static reloc_howto_type howto_table[] =
"R_LARCH_SUB8", /* name. */
false, /* partial_inplace. */
0, /* src_mask */
- 0xffffffff, /* dst_mask */
- false), /* pcrel_offset. */
+ ALL_ONES, /* dst_mask */
+ false, /* pcrel_offset */
+ BFD_RELOC_LARCH_SUB8, /* bfd_reloc_code_real_type */
+ NULL), /* adjust_reloc_bits */
- HOWTO (R_LARCH_SUB16, /* type (53). */
+ LOONGARCH_HOWTO (R_LARCH_SUB16, /* type (53). */
0, /* rightshift. */
2, /* size. */
16, /* bitsize. */
@@ -512,10 +600,12 @@ static reloc_howto_type howto_table[] =
"R_LARCH_SUB16", /* name. */
false, /* partial_inplace. */
0, /* src_mask */
- 0xffffffff, /* dst_mask */
- false), /* pcrel_offset. */
+ ALL_ONES, /* dst_mask */
+ false, /* pcrel_offset */
+ BFD_RELOC_LARCH_SUB16, /* bfd_reloc_code_real_type */
+ NULL), /* adjust_reloc_bits */
- HOWTO (R_LARCH_SUB24, /* type (54). */
+ LOONGARCH_HOWTO (R_LARCH_SUB24, /* type (54). */
0, /* rightshift. */
2, /* size. */
24, /* bitsize. */
@@ -526,10 +616,12 @@ static reloc_howto_type howto_table[] =
"R_LARCH_SUB24", /* name. */
false, /* partial_inplace. */
0, /* src_mask */
- 0xffffffff, /* dst_mask */
- false), /* pcrel_offset. */
+ ALL_ONES, /* dst_mask */
+ false, /* pcrel_offset */
+ BFD_RELOC_LARCH_SUB24, /* bfd_reloc_code_real_type */
+ NULL), /* adjust_reloc_bits */
- HOWTO (R_LARCH_SUB32, /* type (55). */
+ LOONGARCH_HOWTO (R_LARCH_SUB32, /* type (55). */
0, /* rightshift. */
2, /* size. */
32, /* bitsize. */
@@ -540,10 +632,12 @@ static reloc_howto_type howto_table[] =
"R_LARCH_SUB32", /* name. */
false, /* partial_inplace. */
0, /* src_mask */
- 0xffffffff, /* dst_mask */
- false), /* pcrel_offset. */
+ ALL_ONES, /* dst_mask */
+ false, /* pcrel_offset */
+ BFD_RELOC_LARCH_SUB32, /* bfd_reloc_code_real_type */
+ NULL), /* adjust_reloc_bits */
- HOWTO (R_LARCH_SUB64, /* type (56). */
+ LOONGARCH_HOWTO (R_LARCH_SUB64, /* type (56). */
0, /* rightshift. */
4, /* size. */
64, /* bitsize. */
@@ -555,79 +649,60 @@ static reloc_howto_type howto_table[] =
false, /* partial_inplace. */
0, /* src_mask */
ALL_ONES, /* dst_mask */
- false), /* pcrel_offset. */
-
-};
+ false, /* pcrel_offset */
+ BFD_RELOC_LARCH_SUB64, /* bfd_reloc_code_real_type */
+ NULL), /* adjust_reloc_bits */
-struct elf_reloc_map
-{
- bfd_reloc_code_real_type bfd_val;
- enum elf_loongarch_reloc_type elf_val;
-};
+ LOONGARCH_HOWTO (R_LARCH_GNU_VTINHERIT, /* type (57). */
+ 0, /* rightshift. */
+ 0, /* size. */
+ 0, /* bitsize. */
+ false, /* pc_relative. */
+ 0, /* bitpos. */
+ complain_overflow_signed, /* complain_on_overflow. */
+ bfd_elf_generic_reloc, /* special_function. */
+ "R_LARCH_GNU_VTINHERIT", /* name. */
+ false, /* partial_inplace. */
+ 0, /* src_mask */
+ 0, /* dst_mask */
+ false, /* pcrel_offset */
+ BFD_RELOC_NONE, /* bfd_reloc_code_real_type */
+ NULL), /* adjust_reloc_bits */
-static const struct elf_reloc_map larch_reloc_map[] =
-{
- { BFD_RELOC_NONE, R_LARCH_NONE },
- { BFD_RELOC_32, R_LARCH_32 },
- { BFD_RELOC_64, R_LARCH_64 },
-
-#define LOONGARCH_reloc_map(r_name) \
- { \
- BFD_RELOC_LARCH_##r_name, R_LARCH_##r_name \
- }
- LOONGARCH_reloc_map (TLS_DTPMOD32),
- LOONGARCH_reloc_map (TLS_DTPMOD64),
- LOONGARCH_reloc_map (TLS_DTPREL32),
- LOONGARCH_reloc_map (TLS_DTPREL64),
- LOONGARCH_reloc_map (TLS_TPREL32),
- LOONGARCH_reloc_map (TLS_TPREL64),
-
- LOONGARCH_reloc_map (MARK_LA),
- LOONGARCH_reloc_map (MARK_PCREL),
- LOONGARCH_reloc_map (SOP_PUSH_PCREL),
- LOONGARCH_reloc_map (SOP_PUSH_ABSOLUTE),
- LOONGARCH_reloc_map (SOP_PUSH_DUP),
- LOONGARCH_reloc_map (SOP_PUSH_GPREL),
- LOONGARCH_reloc_map (SOP_PUSH_TLS_TPREL),
- LOONGARCH_reloc_map (SOP_PUSH_TLS_GOT),
- LOONGARCH_reloc_map (SOP_PUSH_TLS_GD),
- LOONGARCH_reloc_map (SOP_PUSH_PLT_PCREL),
- LOONGARCH_reloc_map (SOP_ASSERT),
- LOONGARCH_reloc_map (SOP_NOT),
- LOONGARCH_reloc_map (SOP_SUB),
- LOONGARCH_reloc_map (SOP_SL),
- LOONGARCH_reloc_map (SOP_SR),
- LOONGARCH_reloc_map (SOP_ADD),
- LOONGARCH_reloc_map (SOP_AND),
- LOONGARCH_reloc_map (SOP_IF_ELSE),
- LOONGARCH_reloc_map (SOP_POP_32_S_10_5),
- LOONGARCH_reloc_map (SOP_POP_32_U_10_12),
- LOONGARCH_reloc_map (SOP_POP_32_S_10_12),
- LOONGARCH_reloc_map (SOP_POP_32_S_10_16),
- LOONGARCH_reloc_map (SOP_POP_32_S_10_16_S2),
- LOONGARCH_reloc_map (SOP_POP_32_S_5_20),
- LOONGARCH_reloc_map (SOP_POP_32_S_0_5_10_16_S2),
- LOONGARCH_reloc_map (SOP_POP_32_S_0_10_10_16_S2),
- LOONGARCH_reloc_map (SOP_POP_32_U),
- LOONGARCH_reloc_map (ADD8),
- LOONGARCH_reloc_map (ADD16),
- LOONGARCH_reloc_map (ADD24),
- LOONGARCH_reloc_map (ADD32),
- LOONGARCH_reloc_map (ADD64),
- LOONGARCH_reloc_map (SUB8),
- LOONGARCH_reloc_map (SUB16),
- LOONGARCH_reloc_map (SUB24),
- LOONGARCH_reloc_map (SUB32),
- LOONGARCH_reloc_map (SUB64),
+ LOONGARCH_HOWTO (R_LARCH_GNU_VTENTRY, /* type (58). */
+ 0, /* rightshift. */
+ 0, /* size. */
+ 0, /* bitsize. */
+ false, /* pc_relative. */
+ 0, /* bitpos. */
+ complain_overflow_signed, /* complain_on_overflow. */
+ NULL, /* special_function. */
+ "R_LARCH_GNU_VTENTRY", /* name. */
+ false, /* partial_inplace. */
+ 0, /* src_mask */
+ 0, /* dst_mask */
+ false, /* pcrel_offset */
+ BFD_RELOC_NONE, /* bfd_reloc_code_real_type */
+ NULL), /* adjust_reloc_bits */
};
reloc_howto_type *
loongarch_elf_rtype_to_howto (bfd *abfd, unsigned int r_type)
{
- size_t i;
- for (i = 0; i < ARRAY_SIZE (howto_table); i++)
- if (howto_table[i].type == r_type)
- return &howto_table[i];
+ if(r_type < R_LARCH_count)
+ {
+ /* For search table fast. */
+ BFD_ASSERT (ARRAY_SIZE (loongarch_howto_table) == R_LARCH_count);
+
+ if (loongarch_howto_table[r_type].howto.type == r_type)
+ return (reloc_howto_type *)&loongarch_howto_table[r_type];
+
+ BFD_ASSERT (loongarch_howto_table[r_type].howto.type == r_type);
+
+ for (size_t i = 0; i < ARRAY_SIZE (loongarch_howto_table); i++)
+ if (loongarch_howto_table[i].howto.type == r_type)
+ return (reloc_howto_type *)&loongarch_howto_table[i];
+ }
(*_bfd_error_handler) (_("%pB: unsupported relocation type %#x"),
abfd, r_type);
@@ -636,26 +711,181 @@ loongarch_elf_rtype_to_howto (bfd *abfd, unsigned int r_type)
}
reloc_howto_type *
-loongarch_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
- bfd_reloc_code_real_type code)
+loongarch_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED, const char *r_name)
{
- unsigned int i;
- for (i = 0; i < ARRAY_SIZE (larch_reloc_map); i++)
- if (larch_reloc_map[i].bfd_val == code)
- return loongarch_elf_rtype_to_howto (abfd,
- (int) larch_reloc_map[i].elf_val);
+ BFD_ASSERT (ARRAY_SIZE (loongarch_howto_table) == R_LARCH_count);
+
+ for (size_t i = 0; i < ARRAY_SIZE (loongarch_howto_table); i++)
+ if (loongarch_howto_table[i].howto.name
+ && strcasecmp (loongarch_howto_table[i].howto.name, r_name) == 0)
+ return (reloc_howto_type *)&loongarch_howto_table[i];
+
+ (*_bfd_error_handler) (_("%pB: unsupported relocation type %s"),
+ abfd, r_name);
+ bfd_set_error (bfd_error_bad_value);
return NULL;
}
+/* Cost so much. */
reloc_howto_type *
-loongarch_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED, const char *r_name)
+loongarch_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ bfd_reloc_code_real_type code)
{
- unsigned int i;
+ BFD_ASSERT (ARRAY_SIZE (loongarch_howto_table) == R_LARCH_count);
- for (i = 0; i < ARRAY_SIZE (howto_table); i++)
- if (howto_table[i].name && strcasecmp (howto_table[i].name, r_name) == 0)
- return &howto_table[i];
+ for (size_t i = 0; i < ARRAY_SIZE (loongarch_howto_table); i++)
+ if (loongarch_howto_table[i].bfd_type == code)
+ return (reloc_howto_type *)&loongarch_howto_table[i];
+
+ (*_bfd_error_handler) (_("%pB: unsupported bfd relocation type %#x"),
+ abfd, code);
+ bfd_set_error (bfd_error_bad_value);
return NULL;
}
+
+#define LARCH_RELOC_BFD_VMA_BIT_MASK(bitsize) \
+ (~((((bfd_vma)0x1) << (bitsize)) - 1))
+
+/* Adjust val to perform insn
+ * BFD_RELOC_LARCH_SOP_POP_32_S_10_5
+ * BFD_RELOC_LARCH_SOP_POP_32_S_10_12
+ * BFD_RELOC_LARCH_SOP_POP_32_U_10_12
+ * BFD_RELOC_LARCH_SOP_POP_32_S_10_16
+ * BFD_RELOC_LARCH_SOP_POP_32_S_10_16_S2
+ * BFD_RELOC_LARCH_SOP_POP_32_S_5_20
+ * BFD_RELOC_LARCH_SOP_POP_32_U.
+*/
+
+bool loongarch_gen_adjust_reloc_bits (reloc_howto_type *howto, bfd_vma *fix_val)
+{
+ bfd_vma val = *fix_val;
+ /* Check val low bits if rightshift != 0, before rightshift */
+ if (howto->rightshift
+ && (((0x1UL << howto->rightshift) - 1) & val))
+ return false;
+
+ int bitsize = howto->bitsize + howto->rightshift;
+
+ /* Return false if overflow. */
+ if (howto->complain_on_overflow == complain_overflow_signed)
+ {
+ bfd_vma sig_bit = (val >> (bitsize - 1)) & 0x1;
+ /* If val < 0. */
+ if (sig_bit)
+ {
+ if ((LARCH_RELOC_BFD_VMA_BIT_MASK (bitsize - 1) & val)
+ != LARCH_RELOC_BFD_VMA_BIT_MASK (bitsize - 1))
+ return false;
+ }
+ else
+ {
+ if (LARCH_RELOC_BFD_VMA_BIT_MASK (bitsize - 1) & val)
+ return false;
+ }
+ }
+ else if (howto->complain_on_overflow == complain_overflow_unsigned)
+ {
+ if (LARCH_RELOC_BFD_VMA_BIT_MASK (bitsize) & val)
+ return false;
+ }
+ else
+ return false;
+
+ /* Perform insn bits field. */
+ val = (val & ((0x1U << bitsize) - 1)) >> howto->rightshift;
+ val <<= howto->bitpos;
+
+ *fix_val = val;
+
+ return true;
+}
+
+/* Reloc type R_LARCH_SOP_POP_32_S_0_5_10_16_S2. */
+bool loongarch_adjust_reloc_bits_l16_xx5_h5 (reloc_howto_type *howto,
+ bfd_vma *fix_val)
+{
+ bfd_vma val = *fix_val;
+ /* Check val low bits if rightshift != 0, before rightshift */
+ if (howto->rightshift
+ && (((0x1UL << howto->rightshift) - 1) & val))
+ return false;
+
+ /* Return false if overflow. */
+ if (howto->complain_on_overflow != complain_overflow_signed)
+ return false;
+
+ int bitsize = howto->bitsize + howto->rightshift;
+ bfd_vma sig_bit = (val >> (bitsize - 1)) & 0x1;
+ /* If val < 0. */
+ if (sig_bit)
+ {
+ if ((LARCH_RELOC_BFD_VMA_BIT_MASK (bitsize - 1) & val)
+ != LARCH_RELOC_BFD_VMA_BIT_MASK (bitsize - 1))
+ return false;
+ }
+ else
+ {
+ if (LARCH_RELOC_BFD_VMA_BIT_MASK (bitsize - 1) & val)
+ return false;
+ }
+
+ /* Perform insn bits field. */
+ val = (val & ((0x1U << bitsize) - 1)) >> howto->rightshift;
+
+ /* Perform insn bits field. 20:16>>16, 15:0<<10 */
+ val = ((val & 0xffff) << 10) | ((val >> 16) & 0x1f);
+
+ *fix_val = val;
+
+ return true;
+}
+
+/* Reloc type R_LARCH_SOP_POP_32_S_0_10_10_16_S2. */
+bool loongarch_adjust_reloc_bits_l16_h10 (reloc_howto_type *howto,
+ bfd_vma *fix_val)
+{
+ bfd_vma val = *fix_val;
+ /* Check val low bits if rightshift != 0, before rightshift */
+ if (howto->rightshift
+ && (((0x1UL << howto->rightshift) - 1) & val))
+ return false;
+
+ /* Return false if overflow. */
+ if (howto->complain_on_overflow != complain_overflow_signed)
+ return false;
+
+ int bitsize = howto->bitsize + howto->rightshift;
+ bfd_vma sig_bit = (val >> (bitsize - 1)) & 0x1;
+ /* If val < 0. */
+ if (sig_bit)
+ {
+ if ((LARCH_RELOC_BFD_VMA_BIT_MASK (bitsize - 1) & val)
+ != LARCH_RELOC_BFD_VMA_BIT_MASK (bitsize - 1))
+ return false;
+ }
+ else
+ {
+ if (LARCH_RELOC_BFD_VMA_BIT_MASK (bitsize - 1) & val)
+ return false;
+ }
+
+ /* Perform insn bits field. */
+ val = (val & ((0x1U << bitsize) - 1)) >> howto->rightshift;
+
+ /* Perform insn bits field. 25:16>>16, 15:0<<10 */
+ val = ((val & 0xffff) << 10) | ((val >> 16) & 0x3ff);
+
+ *fix_val = val;
+
+ return true;
+}
+
+bool loongarch_adjust_reloc_bitsfield (reloc_howto_type *howto,
+ bfd_vma *fix_val)
+{
+ BFD_ASSERT (((loongarch_reloc_howto_type *)howto)->adjust_reloc_bits);
+ return ((loongarch_reloc_howto_type *)
+ howto)->adjust_reloc_bits(howto, fix_val);
+}
diff --git a/bfd/elfxx-loongarch.h b/bfd/elfxx-loongarch.h
index 13699beed01..8ea63d03fa5 100644
--- a/bfd/elfxx-loongarch.h
+++ b/bfd/elfxx-loongarch.h
@@ -29,3 +29,13 @@ loongarch_reloc_type_lookup (bfd *abfd, bfd_reloc_code_real_type code);
extern reloc_howto_type *
loongarch_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED, const char *r_name);
+
+bool loongarch_adjust_reloc_bitsfield (reloc_howto_type *howto, bfd_vma *fix_val);
+
+/* TRUE if this is a PLT reference to a local IFUNC. */
+#define PLT_LOCAL_IFUNC_P(INFO, H) \
+ ((H)->dynindx == -1 \
+ || ((bfd_link_executable (INFO) \
+ || ELF_ST_VISIBILITY ((H)->other) != STV_DEFAULT) \
+ && (H)->def_regular \
+ && (H)->type == STT_GNU_IFUNC))
diff --git a/bfd/elfxx-riscv.c b/bfd/elfxx-riscv.c
index 9f52bb545ac..cb2cc146c04 100644
--- a/bfd/elfxx-riscv.c
+++ b/bfd/elfxx-riscv.c
@@ -1163,22 +1163,18 @@ static struct riscv_supported_ext riscv_supported_std_ext[] =
{"q", ISA_SPEC_CLASS_20191213, 2, 2, 0 },
{"q", ISA_SPEC_CLASS_20190608, 2, 2, 0 },
{"q", ISA_SPEC_CLASS_2P2, 2, 0, 0 },
- {"l", ISA_SPEC_CLASS_NONE, RISCV_UNKNOWN_VERSION, RISCV_UNKNOWN_VERSION, 0 },
{"c", ISA_SPEC_CLASS_20191213, 2, 0, 0 },
{"c", ISA_SPEC_CLASS_20190608, 2, 0, 0 },
{"c", ISA_SPEC_CLASS_2P2, 2, 0, 0 },
- {"b", ISA_SPEC_CLASS_NONE, RISCV_UNKNOWN_VERSION, RISCV_UNKNOWN_VERSION, 0 },
- {"k", ISA_SPEC_CLASS_NONE, RISCV_UNKNOWN_VERSION, RISCV_UNKNOWN_VERSION, 0 },
- {"j", ISA_SPEC_CLASS_NONE, RISCV_UNKNOWN_VERSION, RISCV_UNKNOWN_VERSION, 0 },
- {"t", ISA_SPEC_CLASS_NONE, RISCV_UNKNOWN_VERSION, RISCV_UNKNOWN_VERSION, 0 },
- {"p", ISA_SPEC_CLASS_NONE, RISCV_UNKNOWN_VERSION, RISCV_UNKNOWN_VERSION, 0 },
{"v", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
- {"n", ISA_SPEC_CLASS_NONE, RISCV_UNKNOWN_VERSION, RISCV_UNKNOWN_VERSION, 0 },
{NULL, 0, 0, 0, 0}
};
static struct riscv_supported_ext riscv_supported_std_z_ext[] =
{
+ {"zicbom", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
+ {"zicbop", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
+ {"zicboz", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
{"zicsr", ISA_SPEC_CLASS_20191213, 2, 0, 0 },
{"zicsr", ISA_SPEC_CLASS_20190608, 2, 0, 0 },
{"zifencei", ISA_SPEC_CLASS_20191213, 2, 0, 0 },
@@ -1341,6 +1337,9 @@ riscv_recognized_prefixed_ext (const char *ext)
return false;
}
+/* Canonical order for single letter extensions. */
+static const char riscv_ext_canonical_order[] = "eigmafdqlcbjktpvn";
+
/* Array is used to compare the orders of standard extensions quickly. */
static int riscv_ext_order[26] = {0};
@@ -1356,16 +1355,8 @@ riscv_init_ext_order (void)
/* The orders of all standard extensions are positive. */
int order = 1;
- int i = 0;
- while (riscv_supported_std_ext[i].name != NULL)
- {
- const char *ext = riscv_supported_std_ext[i].name;
- riscv_ext_order[(*ext - 'a')] = order++;
- i++;
- while (riscv_supported_std_ext[i].name
- && strcmp (ext, riscv_supported_std_ext[i].name) == 0)
- i++;
- }
+ for (const char *ext = &riscv_ext_canonical_order[0]; *ext; ++ext)
+ riscv_ext_order[(*ext - 'a')] = order++;
/* Some of the prefixed keyword are not single letter, so we set
their prefixed orders in the riscv_compare_subsets directly,
@@ -2031,14 +2022,11 @@ riscv_parse_subset (riscv_parse_subset_t *rps,
if (p == NULL)
return false;
- /* Parse the different classes of extensions in the specified order. */
- while (*p != '\0')
- {
- p = riscv_parse_prefixed_ext (rps, arch, p);
+ /* Parse prefixed extensions. */
+ p = riscv_parse_prefixed_ext (rps, arch, p);
- if (p == NULL)
- return false;
- }
+ if (p == NULL)
+ return false;
/* Finally add implicit extensions according to the current
extensions. */
@@ -2331,6 +2319,12 @@ riscv_multi_subset_supports (riscv_parse_subset_t *rps,
{
case INSN_CLASS_I:
return riscv_subset_supports (rps, "i");
+ case INSN_CLASS_ZICBOM:
+ return riscv_subset_supports (rps, "zicbom");
+ case INSN_CLASS_ZICBOP:
+ return riscv_subset_supports (rps, "zicbop");
+ case INSN_CLASS_ZICBOZ:
+ return riscv_subset_supports (rps, "zicboz");
case INSN_CLASS_ZICSR:
return riscv_subset_supports (rps, "zicsr");
case INSN_CLASS_ZIFENCEI:
@@ -2414,3 +2408,97 @@ riscv_multi_subset_supports (riscv_parse_subset_t *rps,
return false;
}
}
+
+/* Each instuction is belonged to an instruction class INSN_CLASS_*.
+ Call riscv_subset_supports_ext to determine the missing extension. */
+
+const char *
+riscv_multi_subset_supports_ext (riscv_parse_subset_t *rps,
+ enum riscv_insn_class insn_class)
+{
+ switch (insn_class)
+ {
+ case INSN_CLASS_I:
+ return "i";
+ case INSN_CLASS_ZICSR:
+ return "zicsr";
+ case INSN_CLASS_ZIFENCEI:
+ return "zifencei";
+ case INSN_CLASS_ZIHINTPAUSE:
+ return "zihintpause";
+ case INSN_CLASS_M:
+ return "m";
+ case INSN_CLASS_A:
+ return "a";
+ case INSN_CLASS_F:
+ return "f";
+ case INSN_CLASS_D:
+ return "d";
+ case INSN_CLASS_Q:
+ return "q";
+ case INSN_CLASS_C:
+ return "c";
+ case INSN_CLASS_F_AND_C:
+ if (!riscv_subset_supports (rps, "f")
+ && !riscv_subset_supports (rps, "c"))
+ return "f' and `c";
+ else if (!riscv_subset_supports (rps, "f"))
+ return "f";
+ else
+ return "c";
+ case INSN_CLASS_D_AND_C:
+ if (!riscv_subset_supports (rps, "d")
+ && !riscv_subset_supports (rps, "c"))
+ return "d' and `c";
+ else if (!riscv_subset_supports (rps, "d"))
+ return "d";
+ else
+ return "c";
+ case INSN_CLASS_F_OR_ZFINX:
+ return "f' or `zfinx";
+ case INSN_CLASS_D_OR_ZDINX:
+ return "d' or `zdinx";
+ case INSN_CLASS_Q_OR_ZQINX:
+ return "q' or `zqinx";
+ case INSN_CLASS_ZBA:
+ return "zba";
+ case INSN_CLASS_ZBB:
+ return "zbb";
+ case INSN_CLASS_ZBC:
+ return "zbc";
+ case INSN_CLASS_ZBS:
+ return "zbs";
+ case INSN_CLASS_ZBKB:
+ return "zbkb";
+ case INSN_CLASS_ZBKC:
+ return "zbkc";
+ case INSN_CLASS_ZBKX:
+ return "zbkx";
+ case INSN_CLASS_ZBB_OR_ZBKB:
+ return "zbb' or `zbkb";
+ case INSN_CLASS_ZBC_OR_ZBKC:
+ return "zbc' or `zbkc";
+ case INSN_CLASS_ZKND:
+ return "zknd";
+ case INSN_CLASS_ZKNE:
+ return "zkne";
+ case INSN_CLASS_ZKNH:
+ return "zknh";
+ case INSN_CLASS_ZKND_OR_ZKNE:
+ return "zknd' or `zkne";
+ case INSN_CLASS_ZKSED:
+ return "zksed";
+ case INSN_CLASS_ZKSH:
+ return "zksh";
+ case INSN_CLASS_V:
+ return "v' or `zve64x' or `zve32x";
+ case INSN_CLASS_ZVEF:
+ return "v' or `zve64d' or `zve64f' or `zve32f";
+ case INSN_CLASS_SVINVAL:
+ return "svinval";
+ default:
+ rps->error_handler
+ (_("internal: unreachable INSN_CLASS_*"));
+ return NULL;
+ }
+}
diff --git a/bfd/elfxx-riscv.h b/bfd/elfxx-riscv.h
index 67b7d078232..ea7126bdb4d 100644
--- a/bfd/elfxx-riscv.h
+++ b/bfd/elfxx-riscv.h
@@ -104,6 +104,9 @@ riscv_subset_supports (riscv_parse_subset_t *, const char *);
extern bool
riscv_multi_subset_supports (riscv_parse_subset_t *, enum riscv_insn_class);
+extern const char *
+riscv_multi_subset_supports_ext (riscv_parse_subset_t *, enum riscv_insn_class);
+
extern void
bfd_elf32_riscv_set_data_segment_info (struct bfd_link_info *, int *);
extern void
diff --git a/bfd/elfxx-target.h b/bfd/elfxx-target.h
index 360b056ff58..0579f64d1a0 100644
--- a/bfd/elfxx-target.h
+++ b/bfd/elfxx-target.h
@@ -379,10 +379,6 @@
#define ELF_COMMONPAGESIZE ELF_MAXPAGESIZE
#endif
-#ifndef ELF_RELROPAGESIZE
-#define ELF_RELROPAGESIZE ELF_COMMONPAGESIZE
-#endif
-
#ifndef ELF_MINPAGESIZE
#define ELF_MINPAGESIZE ELF_COMMONPAGESIZE
#endif
@@ -390,15 +386,9 @@
#if ELF_COMMONPAGESIZE > ELF_MAXPAGESIZE
# error ELF_COMMONPAGESIZE > ELF_MAXPAGESIZE
#endif
-#if ELF_RELROPAGESIZE > ELF_MAXPAGESIZE
-# error ELF_RELROPAGESIZE > ELF_MAXPAGESIZE
-#endif
#if ELF_MINPAGESIZE > ELF_COMMONPAGESIZE
# error ELF_MINPAGESIZE > ELF_COMMONPAGESIZE
#endif
-#if ELF_MINPAGESIZE > ELF_RELROPAGESIZE
-# error ELF_MINPAGESIZE > ELF_RELROPAGESIZE
-#endif
#ifndef ELF_P_ALIGN
#define ELF_P_ALIGN 0
@@ -478,6 +468,12 @@
#ifndef elf_backend_check_relocs
#define elf_backend_check_relocs 0
#endif
+#ifndef elf_backend_size_relative_relocs
+#define elf_backend_size_relative_relocs 0
+#endif
+#ifndef elf_backend_finish_relative_relocs
+#define elf_backend_finish_relative_relocs 0
+#endif
#ifndef elf_backend_check_directives
#define elf_backend_check_directives 0
#endif
@@ -816,7 +812,6 @@ static const struct elf_backend_data elfNN_bed =
ELF_MAXPAGESIZE, /* maxpagesize */
ELF_MINPAGESIZE, /* minpagesize */
ELF_COMMONPAGESIZE, /* commonpagesize */
- ELF_RELROPAGESIZE, /* commonpagesize to use with -z relro */
ELF_P_ALIGN, /* p_align */
ELF_DYNAMIC_SEC_FLAGS, /* dynamic_sec_flags */
elf_backend_arch_data,
@@ -842,6 +837,8 @@ static const struct elf_backend_data elfNN_bed =
elf_backend_omit_section_dynsym,
elf_backend_relocs_compatible,
elf_backend_check_relocs,
+ elf_backend_size_relative_relocs,
+ elf_backend_finish_relative_relocs,
elf_backend_check_directives,
elf_backend_notice_as_needed,
elf_backend_adjust_dynamic_symbol,
diff --git a/bfd/elfxx-x86.c b/bfd/elfxx-x86.c
index 25f7717ea88..acb2cc8528d 100644
--- a/bfd/elfxx-x86.c
+++ b/bfd/elfxx-x86.c
@@ -524,6 +524,24 @@ elf_x86_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
{
asection *sreloc;
+ if (eh->def_protected
+ && elf_has_no_copy_on_protected (h->root.u.def.section->owner))
+ {
+ /* Disallow copy relocation against non-copyable protected
+ symbol. */
+ asection *s = p->sec->output_section;
+ if (s != NULL && (s->flags & SEC_READONLY) != 0)
+ {
+ info->callbacks->einfo
+ /* xgettext:c-format */
+ (_("%F%P: %pB: copy relocation against non-copyable "
+ "protected symbol `%s' in %pB\n"),
+ p->sec->owner, h->root.root.string,
+ h->root.u.def.section->owner);
+ return false;
+ }
+ }
+
sreloc = elf_section_data (p->sec)->sreloc;
BFD_ASSERT (sreloc != NULL);
@@ -726,6 +744,10 @@ _bfd_x86_elf_link_hash_table_create (bfd *abfd)
ret->got_entry_size = 8;
ret->pcrel_plt = true;
ret->tls_get_addr = "__tls_get_addr";
+ ret->relative_r_type = R_X86_64_RELATIVE;
+ ret->relative_r_name = "R_X86_64_RELATIVE";
+ ret->elf_append_reloc = elf_append_rela;
+ ret->elf_write_addend_in_got = _bfd_elf64_write_addend;
}
if (ABI_64_P (abfd))
{
@@ -733,6 +755,7 @@ _bfd_x86_elf_link_hash_table_create (bfd *abfd)
ret->pointer_r_type = R_X86_64_64;
ret->dynamic_interpreter = ELF64_DYNAMIC_INTERPRETER;
ret->dynamic_interpreter_size = sizeof ELF64_DYNAMIC_INTERPRETER;
+ ret->elf_write_addend = _bfd_elf64_write_addend;
}
else
{
@@ -743,6 +766,7 @@ _bfd_x86_elf_link_hash_table_create (bfd *abfd)
ret->dynamic_interpreter = ELFX32_DYNAMIC_INTERPRETER;
ret->dynamic_interpreter_size
= sizeof ELFX32_DYNAMIC_INTERPRETER;
+ ret->elf_write_addend = _bfd_elf32_write_addend;
}
else
{
@@ -751,6 +775,11 @@ _bfd_x86_elf_link_hash_table_create (bfd *abfd)
ret->got_entry_size = 4;
ret->pcrel_plt = false;
ret->pointer_r_type = R_386_32;
+ ret->relative_r_type = R_386_RELATIVE;
+ ret->relative_r_name = "R_386_RELATIVE";
+ ret->elf_append_reloc = elf_append_rel;
+ ret->elf_write_addend = _bfd_elf32_write_addend;
+ ret->elf_write_addend_in_got = _bfd_elf32_write_addend;
ret->dynamic_interpreter = ELF32_DYNAMIC_INTERPRETER;
ret->dynamic_interpreter_size
= sizeof ELF32_DYNAMIC_INTERPRETER;
@@ -977,6 +1006,921 @@ _bfd_x86_elf_check_relocs (bfd *abfd,
return true;
}
+/* Add an entry to the relative reloc record. */
+
+static bool
+elf_x86_relative_reloc_record_add
+ (struct bfd_link_info *info,
+ struct elf_x86_relative_reloc_data *relative_reloc,
+ Elf_Internal_Rela *rel, asection *sec,
+ asection *sym_sec, struct elf_link_hash_entry *h,
+ Elf_Internal_Sym *sym, bfd_vma offset)
+{
+ bfd_size_type newidx;
+
+ if (relative_reloc->data == NULL)
+ {
+ relative_reloc->data = bfd_malloc
+ (sizeof (struct elf_x86_relative_reloc_record));
+ relative_reloc->count = 0;
+ relative_reloc->size = 1;
+ }
+
+ newidx = relative_reloc->count++;
+
+ if (relative_reloc->count > relative_reloc->size)
+ {
+ relative_reloc->size <<= 1;
+ relative_reloc->data = bfd_realloc
+ (relative_reloc->data,
+ (relative_reloc->size
+ * sizeof (struct elf_x86_relative_reloc_record)));
+ }
+
+ if (relative_reloc->data == NULL)
+ {
+ info->callbacks->einfo
+ /* xgettext:c-format */
+ (_("%F%P: %pB: failed to allocate relative reloc record\n"),
+ info->output_bfd);
+ return false;
+ }
+
+ relative_reloc->data[newidx].rel = *rel;
+ relative_reloc->data[newidx].sec = sec;
+ if (h != NULL)
+ {
+ /* Set SYM to NULL to indicate a global symbol. */
+ relative_reloc->data[newidx].sym = NULL;
+ relative_reloc->data[newidx].u.h = h;
+ }
+ else
+ {
+ relative_reloc->data[newidx].sym = sym;
+ relative_reloc->data[newidx].u.sym_sec = sym_sec;
+ }
+ relative_reloc->data[newidx].offset = offset;
+ relative_reloc->data[newidx].address = 0;
+ return true;
+}
+
+/* After input sections have been mapped to output sections and
+ addresses of output sections are set initiallly, scan input
+ relocations with the same logic in relocate_section to determine
+ if a relative relocation should be generated. Save the relative
+ relocation candidate information for sizing the DT_RELR section
+ later after all symbols addresses can be determined. */
+
+bool
+_bfd_x86_elf_link_relax_section (bfd *abfd ATTRIBUTE_UNUSED,
+ asection *input_section,
+ struct bfd_link_info *info,
+ bool *again)
+{
+ Elf_Internal_Shdr *symtab_hdr;
+ Elf_Internal_Rela *internal_relocs;
+ Elf_Internal_Rela *irel, *irelend;
+ Elf_Internal_Sym *isymbuf = NULL;
+ struct elf_link_hash_entry **sym_hashes;
+ const struct elf_backend_data *bed;
+ struct elf_x86_link_hash_table *htab;
+ bfd_vma *local_got_offsets;
+ bool is_x86_64;
+ bool unaligned_section;
+
+ if (bfd_link_relocatable (info))
+ return true;
+
+ /* Assume we're not going to change any sizes, and we'll only need
+ one pass. */
+ *again = false;
+
+ bed = get_elf_backend_data (abfd);
+ htab = elf_x86_hash_table (info, bed->target_id);
+ if (htab == NULL)
+ return true;
+
+ /* Nothing to do if there are no relocations or relative relocations
+ have been packed. */
+ if (input_section == htab->elf.srelrdyn
+ || input_section->relative_reloc_packed
+ || ((input_section->flags & (SEC_RELOC | SEC_ALLOC))
+ != (SEC_RELOC | SEC_ALLOC))
+ || (input_section->flags & SEC_DEBUGGING) != 0
+ || input_section->reloc_count == 0)
+ return true;
+
+ /* Skip if the section isn't aligned. */
+ unaligned_section = input_section->alignment_power == 0;
+
+ is_x86_64 = bed->target_id == X86_64_ELF_DATA;
+
+ symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
+ sym_hashes = elf_sym_hashes (abfd);
+ local_got_offsets = elf_local_got_offsets (abfd);
+
+ /* Load the relocations for this section. */
+ internal_relocs =
+ _bfd_elf_link_read_relocs (abfd, input_section, NULL,
+ (Elf_Internal_Rela *) NULL,
+ info->keep_memory);
+ if (internal_relocs == NULL)
+ return false;
+
+ irelend = internal_relocs + input_section->reloc_count;
+ for (irel = internal_relocs; irel < irelend; irel++)
+ {
+ unsigned int r_type;
+ unsigned int r_symndx;
+ Elf_Internal_Sym *isym;
+ struct elf_link_hash_entry *h;
+ struct elf_x86_link_hash_entry *eh;
+ bfd_vma offset;
+ bool resolved_to_zero;
+ bool need_copy_reloc_in_pie;
+ bool pc32_reloc;
+ asection *sec;
+ /* Offset must be a multiple of 2. */
+ bool unaligned_offset = (irel->r_offset & 1) != 0;
+ /* True if there is a relative relocation against a dynamic
+ symbol. */
+ bool dynamic_relative_reloc_p;
+
+ /* Get the value of the symbol referred to by the reloc. */
+ r_symndx = htab->r_sym (irel->r_info);
+
+ r_type = ELF32_R_TYPE (irel->r_info);
+ /* Clear the R_X86_64_converted_reloc_bit bit. */
+ r_type &= ~R_X86_64_converted_reloc_bit;
+
+ sec = NULL;
+ h = NULL;
+ dynamic_relative_reloc_p = false;
+
+ if (r_symndx < symtab_hdr->sh_info)
+ {
+ /* Read this BFD's local symbols. */
+ if (isymbuf == NULL)
+ {
+ isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
+ if (isymbuf == NULL)
+ isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
+ symtab_hdr->sh_info, 0,
+ NULL, NULL, NULL);
+ if (isymbuf == NULL)
+ goto error_return;
+ }
+
+ isym = isymbuf + r_symndx;
+ switch (isym->st_shndx)
+ {
+ case SHN_ABS:
+ sec = bfd_abs_section_ptr;
+ break;
+ case SHN_COMMON:
+ sec = bfd_com_section_ptr;
+ break;
+ case SHN_X86_64_LCOMMON:
+ if (!is_x86_64)
+ abort ();
+ sec = &_bfd_elf_large_com_section;
+ break;
+ default:
+ sec = bfd_section_from_elf_index (abfd, isym->st_shndx);
+ break;
+ }
+
+ /* Skip relocation against local STT_GNU_IFUNC symbol. */
+ if (ELF32_ST_TYPE (isym->st_info) == STT_GNU_IFUNC)
+ continue;
+
+ eh = (struct elf_x86_link_hash_entry *) h;
+ resolved_to_zero = false;
+ }
+ else
+ {
+ /* Get H and SEC for GENERATE_DYNAMIC_RELOCATION_P below. */
+ h = sym_hashes[r_symndx - symtab_hdr->sh_info];
+ while (h->root.type == bfd_link_hash_indirect
+ || h->root.type == bfd_link_hash_warning)
+ h = (struct elf_link_hash_entry *) h->root.u.i.link;
+
+ if (h->root.type == bfd_link_hash_defined
+ || h->root.type == bfd_link_hash_defweak)
+ sec = h->root.u.def.section;
+
+ /* Skip relocation against STT_GNU_IFUNC symbol. */
+ if (h->type == STT_GNU_IFUNC)
+ continue;
+
+ eh = (struct elf_x86_link_hash_entry *) h;
+ resolved_to_zero = UNDEFINED_WEAK_RESOLVED_TO_ZERO (info, eh);
+
+ /* NB: See how elf_backend_finish_dynamic_symbol is called
+ from elf_link_output_extsym. */
+ if ((h->dynindx != -1 || h->forced_local)
+ && ((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
+ || h->root.type != bfd_link_hash_undefweak)
+ || !h->forced_local)
+ && h->got.offset != (bfd_vma) -1
+ && ! GOT_TLS_GD_ANY_P (elf_x86_hash_entry (h)->tls_type)
+ && elf_x86_hash_entry (h)->tls_type != GOT_TLS_IE
+ && !resolved_to_zero
+ && SYMBOL_REFERENCES_LOCAL_P (info, h)
+ && SYMBOL_DEFINED_NON_SHARED_P (h))
+ dynamic_relative_reloc_p = true;
+
+ isym = NULL;
+ }
+
+ if (X86_GOT_TYPE_P (is_x86_64, r_type))
+ {
+ /* Pack GOT relative relocations. There should be only a
+ single R_*_RELATIVE relocation in GOT. */
+ if (eh != NULL)
+ {
+ if (eh->got_relative_reloc_done)
+ continue;
+
+ if (!(dynamic_relative_reloc_p
+ || (RESOLVED_LOCALLY_P (info, h, htab)
+ && GENERATE_RELATIVE_RELOC_P (info, h))))
+ continue;
+
+ if (!dynamic_relative_reloc_p)
+ eh->no_finish_dynamic_symbol = 1;
+ eh->got_relative_reloc_done = 1;
+ offset = h->got.offset;
+ }
+ else
+ {
+ if (elf_x86_relative_reloc_done (abfd)[r_symndx])
+ continue;
+
+ if (!X86_LOCAL_GOT_RELATIVE_RELOC_P (is_x86_64, info,
+ isym))
+ continue;
+
+ elf_x86_relative_reloc_done (abfd)[r_symndx] = 1;
+ offset = local_got_offsets[r_symndx];
+ }
+
+ if (!elf_x86_relative_reloc_record_add (info,
+ &htab->relative_reloc,
+ irel, htab->elf.sgot,
+ sec, h, isym, offset))
+ goto error_return;
+
+ continue;
+ }
+
+ if (is_x86_64
+ && irel->r_addend == 0
+ && !ABI_64_P (info->output_bfd))
+ {
+ /* For x32, if addend is zero, treat R_X86_64_64 like
+ R_X86_64_32 and R_X86_64_SIZE64 like R_X86_64_SIZE32. */
+ if (r_type == R_X86_64_64)
+ r_type = R_X86_64_32;
+ else if (r_type == R_X86_64_SIZE64)
+ r_type = R_X86_64_SIZE32;
+ }
+
+ if (!X86_RELATIVE_RELOC_TYPE_P (is_x86_64, r_type))
+ continue;
+
+ /* Pack non-GOT relative relocations. */
+ if (is_x86_64)
+ {
+ need_copy_reloc_in_pie =
+ (bfd_link_pie (info)
+ && h != NULL
+ && (h->needs_copy
+ || eh->needs_copy
+ || (h->root.type == bfd_link_hash_undefined))
+ && (X86_PCREL_TYPE_P (true, r_type)
+ || X86_SIZE_TYPE_P (true, r_type)));
+ pc32_reloc = false;
+ }
+ else
+ {
+ need_copy_reloc_in_pie = false;
+ pc32_reloc = r_type == R_386_PC32;
+ }
+
+ if (GENERATE_DYNAMIC_RELOCATION_P (is_x86_64, info, eh, r_type,
+ sec, need_copy_reloc_in_pie,
+ resolved_to_zero, pc32_reloc))
+ {
+ /* When generating a shared object, these relocations
+ are copied into the output file to be resolved at run
+ time. */
+ offset = _bfd_elf_section_offset (info->output_bfd, info,
+ input_section,
+ irel->r_offset);
+ if (offset == (bfd_vma) -1
+ || offset == (bfd_vma) -2
+ || COPY_INPUT_RELOC_P (is_x86_64, info, h, r_type))
+ continue;
+
+ /* 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 (is_x86_64
+ && !(r_type == htab->pointer_r_type
+ || (r_type == R_X86_64_32
+ && htab->params->no_reloc_overflow_check)))
+ continue;
+
+ if (!elf_x86_relative_reloc_record_add
+ (info,
+ ((unaligned_section || unaligned_offset)
+ ? &htab->unaligned_relative_reloc
+ : &htab->relative_reloc),
+ irel, input_section, sec, h, isym, offset))
+ goto error_return;
+ }
+ }
+
+ input_section->relative_reloc_packed = 1;
+
+ return true;
+
+error_return:
+ if ((unsigned char *) isymbuf != symtab_hdr->contents)
+ free (isymbuf);
+ if (elf_section_data (input_section)->relocs != internal_relocs)
+ free (internal_relocs);
+ return false;
+}
+
+/* Add an entry to the 64-bit DT_RELR bitmap. */
+
+static void
+elf64_dt_relr_bitmap_add
+ (struct bfd_link_info *info, struct elf_dt_relr_bitmap *bitmap,
+ uint64_t entry)
+{
+ bfd_size_type newidx;
+
+ if (bitmap->u.elf64 == NULL)
+ {
+ bitmap->u.elf64 = bfd_malloc (sizeof (uint64_t));
+ bitmap->count = 0;
+ bitmap->size = 1;
+ }
+
+ newidx = bitmap->count++;
+
+ if (bitmap->count > bitmap->size)
+ {
+ bitmap->size <<= 1;
+ bitmap->u.elf64 = bfd_realloc (bitmap->u.elf64,
+ (bitmap->size * sizeof (uint64_t)));
+ }
+
+ if (bitmap->u.elf64 == NULL)
+ {
+ info->callbacks->einfo
+ /* xgettext:c-format */
+ (_("%F%P: %pB: failed to allocate 64-bit DT_RELR bitmap\n"),
+ info->output_bfd);
+ }
+
+ bitmap->u.elf64[newidx] = entry;
+}
+
+/* Add an entry to the 32-bit DT_RELR bitmap. */
+
+static void
+elf32_dt_relr_bitmap_add
+ (struct bfd_link_info *info, struct elf_dt_relr_bitmap *bitmap,
+ uint32_t entry)
+{
+ bfd_size_type newidx;
+
+ if (bitmap->u.elf32 == NULL)
+ {
+ bitmap->u.elf32 = bfd_malloc (sizeof (uint32_t));
+ bitmap->count = 0;
+ bitmap->size = 1;
+ }
+
+ newidx = bitmap->count++;
+
+ if (bitmap->count > bitmap->size)
+ {
+ bitmap->size <<= 1;
+ bitmap->u.elf32 = bfd_realloc (bitmap->u.elf32,
+ (bitmap->size * sizeof (uint32_t)));
+ }
+
+ if (bitmap->u.elf32 == NULL)
+ {
+ info->callbacks->einfo
+ /* xgettext:c-format */
+ (_("%F%P: %pB: failed to allocate 32-bit DT_RELR bitmap\n"),
+ info->output_bfd);
+ }
+
+ bitmap->u.elf32[newidx] = entry;
+}
+
+void
+_bfd_elf32_write_addend (bfd *abfd, uint64_t value, void *addr)
+{
+ bfd_put_32 (abfd, value, addr);
+}
+
+void
+_bfd_elf64_write_addend (bfd *abfd, uint64_t value, void *addr)
+{
+ bfd_put_64 (abfd, value, addr);
+}
+
+/* Size or finish relative relocations to determine the run-time
+ addresses for DT_RELR bitmap computation later. OUTREL is set
+ to NULL in the sizing phase and non-NULL in the finising phase
+ where the regular relative relocations will be written out. */
+
+static void
+elf_x86_size_or_finish_relative_reloc
+ (bool is_x86_64, struct bfd_link_info *info,
+ struct elf_x86_link_hash_table *htab, bool unaligned,
+ Elf_Internal_Rela *outrel)
+{
+ unsigned int align_mask;
+ bfd_size_type i, count;
+ asection *sec, *srel;
+ struct elf_link_hash_entry *h;
+ bfd_vma offset;
+ Elf_Internal_Sym *sym;
+ asection *sym_sec;
+ asection *sgot = htab->elf.sgot;
+ asection *srelgot = htab->elf.srelgot;
+ struct elf_x86_relative_reloc_data *relative_reloc;
+
+ if (unaligned)
+ {
+ align_mask = 0;
+ relative_reloc = &htab->unaligned_relative_reloc;
+ }
+ else
+ {
+ align_mask = 1;
+ relative_reloc = &htab->relative_reloc;
+ }
+
+ count = relative_reloc->count;
+ for (i = 0; i < count; i++)
+ {
+ sec = relative_reloc->data[i].sec;
+ sym = relative_reloc->data[i].sym;
+
+ /* If SYM is NULL, it must be a global symbol. */
+ if (sym == NULL)
+ h = relative_reloc->data[i].u.h;
+ else
+ h = NULL;
+
+ if (is_x86_64)
+ {
+ bfd_vma relocation;
+ /* This function may be called more than once and REL may be
+ updated by _bfd_elf_rela_local_sym below. */
+ Elf_Internal_Rela rel = relative_reloc->data[i].rel;
+
+ if (h != NULL)
+ {
+ if (h->root.type == bfd_link_hash_defined
+ || h->root.type == bfd_link_hash_defweak)
+ {
+ sym_sec = h->root.u.def.section;
+ relocation = (h->root.u.def.value
+ + sym_sec->output_section->vma
+ + sym_sec->output_offset);
+ }
+ else
+ {
+ /* Allow undefined symbol only at the sizing phase.
+ Otherwise skip undefined symbol here. Undefined
+ symbol will be reported by relocate_section. */
+ if (outrel == NULL)
+ relocation = 0;
+ else
+ continue;
+ }
+ }
+ else
+ {
+ sym_sec = relative_reloc->data[i].u.sym_sec;
+ relocation = _bfd_elf_rela_local_sym
+ (info->output_bfd, sym, &sym_sec, &rel);
+ }
+
+ if (outrel != NULL)
+ {
+ outrel->r_addend = relocation;
+ if (sec == sgot)
+ {
+ if (h != NULL && h->needs_plt)
+ abort ();
+ }
+ else
+ outrel->r_addend += rel.r_addend;
+
+ /* Write the implicit addend if ALIGN_MASK isn't 0. */
+ if (align_mask)
+ {
+ if (sec == sgot)
+ {
+ if (relative_reloc->data[i].offset >= sec->size)
+ abort ();
+ htab->elf_write_addend_in_got
+ (info->output_bfd, outrel->r_addend,
+ sec->contents + relative_reloc->data[i].offset);
+ }
+ else
+ {
+ if (rel.r_offset >= sec->size)
+ abort ();
+ htab->elf_write_addend
+ (info->output_bfd, outrel->r_addend,
+ (elf_section_data (sec)->this_hdr.contents
+ + rel.r_offset));
+ }
+ }
+ }
+ }
+
+ if (sec == sgot)
+ srel = srelgot;
+ else
+ srel = elf_section_data (sec)->sreloc;
+ offset = (sec->output_section->vma + sec->output_offset
+ + relative_reloc->data[i].offset);
+ relative_reloc->data[i].address = offset;
+ if (outrel != NULL)
+ {
+ outrel->r_offset = offset;
+
+ if ((outrel->r_offset & align_mask) != 0)
+ abort ();
+
+ if (htab->params->report_relative_reloc)
+ _bfd_x86_elf_link_report_relative_reloc
+ (info, sec, h, sym, htab->relative_r_name, outrel);
+
+ /* Generate regular relative relocation if ALIGN_MASK is 0. */
+ if (align_mask == 0)
+ htab->elf_append_reloc (info->output_bfd, srel, outrel);
+ }
+ }
+}
+
+/* Compute the DT_RELR section size. Set NEED_PLAYOUT to true if
+ the DT_RELR section size has been increased. */
+
+static void
+elf_x86_compute_dl_relr_bitmap
+ (struct bfd_link_info *info, struct elf_x86_link_hash_table *htab,
+ bool *need_layout)
+{
+ bfd_vma base;
+ bfd_size_type i, count, new_count;
+ struct elf_x86_relative_reloc_data *relative_reloc =
+ &htab->relative_reloc;
+ /* Save the old DT_RELR bitmap count. Don't shrink the DT_RELR bitmap
+ if the new DT_RELR bitmap count is smaller than the old one. Pad
+ with trailing 1s which won't be decoded to more relocations. */
+ bfd_size_type dt_relr_bitmap_count = htab->dt_relr_bitmap.count;
+
+ /* Clear the DT_RELR bitmap count. */
+ htab->dt_relr_bitmap.count = 0;
+
+ count = relative_reloc->count;
+
+ if (ABI_64_P (info->output_bfd))
+ {
+ /* Compute the 64-bit DT_RELR bitmap. */
+ i = 0;
+ while (i < count)
+ {
+ if ((relative_reloc->data[i].address % 1) != 0)
+ abort ();
+
+ elf64_dt_relr_bitmap_add (info, &htab->dt_relr_bitmap,
+ relative_reloc->data[i].address);
+
+ base = relative_reloc->data[i].address + 8;
+ i++;
+
+ while (i < count)
+ {
+ uint64_t bitmap = 0;
+ for (; i < count; i++)
+ {
+ bfd_vma delta = (relative_reloc->data[i].address
+ - base);
+ /* Stop if it is too far from base. */
+ if (delta >= 63 * 8)
+ break;
+ /* Stop if it isn't a multiple of 8. */
+ if ((delta % 8) != 0)
+ break;
+ bitmap |= 1ULL << (delta / 8);
+ }
+
+ if (bitmap == 0)
+ break;
+
+ elf64_dt_relr_bitmap_add (info, &htab->dt_relr_bitmap,
+ (bitmap << 1) | 1);
+
+ base += 63 * 8;
+ }
+ }
+
+ new_count = htab->dt_relr_bitmap.count;
+ if (dt_relr_bitmap_count > new_count)
+ {
+ /* Don't shrink the DT_RELR section size to avoid section
+ layout oscillation. Instead, pad the DT_RELR bitmap with
+ 1s which do not decode to more relocations. */
+
+ htab->dt_relr_bitmap.count = dt_relr_bitmap_count;
+ count = dt_relr_bitmap_count - new_count;
+ for (i = 0; i < count; i++)
+ htab->dt_relr_bitmap.u.elf64[new_count + i] = 1;
+ }
+ }
+ else
+ {
+ /* Compute the 32-bit DT_RELR bitmap. */
+ i = 0;
+ while (i < count)
+ {
+ if ((relative_reloc->data[i].address % 1) != 0)
+ abort ();
+
+ elf32_dt_relr_bitmap_add (info, &htab->dt_relr_bitmap,
+ relative_reloc->data[i].address);
+
+ base = relative_reloc->data[i].address + 4;
+ i++;
+
+ while (i < count)
+ {
+ uint32_t bitmap = 0;
+ for (; i < count; i++)
+ {
+ bfd_vma delta = (relative_reloc->data[i].address
+ - base);
+ /* Stop if it is too far from base. */
+ if (delta >= 31 * 4)
+ break;
+ /* Stop if it isn't a multiple of 4. */
+ if ((delta % 4) != 0)
+ break;
+ bitmap |= 1ULL << (delta / 4);
+ }
+
+ if (bitmap == 0)
+ break;
+
+ elf32_dt_relr_bitmap_add (info, &htab->dt_relr_bitmap,
+ (bitmap << 1) | 1);
+
+ base += 31 * 4;
+ }
+ }
+
+ new_count = htab->dt_relr_bitmap.count;
+ if (dt_relr_bitmap_count > new_count)
+ {
+ /* Don't shrink the DT_RELR section size to avoid section
+ layout oscillation. Instead, pad the DT_RELR bitmap with
+ 1s which do not decode to more relocations. */
+
+ htab->dt_relr_bitmap.count = dt_relr_bitmap_count;
+ count = dt_relr_bitmap_count - new_count;
+ for (i = 0; i < count; i++)
+ htab->dt_relr_bitmap.u.elf32[new_count + i] = 1;
+ }
+ }
+
+ if (htab->dt_relr_bitmap.count != dt_relr_bitmap_count)
+ {
+ if (need_layout)
+ {
+ /* The .relr.dyn section size is changed. Update the section
+ size and tell linker to layout sections again. */
+ htab->elf.srelrdyn->size =
+ (htab->dt_relr_bitmap.count
+ * (ABI_64_P (info->output_bfd) ? 8 : 4));
+
+ *need_layout = true;
+ }
+ else
+ info->callbacks->einfo
+ /* xgettext:c-format */
+ (_("%F%P: %pB: size of compact relative reloc section is "
+ "changed: new (%lu) != old (%lu)\n"),
+ info->output_bfd, htab->dt_relr_bitmap.count,
+ dt_relr_bitmap_count);
+ }
+}
+
+/* Write out the DT_RELR section. */
+
+static void
+elf_x86_write_dl_relr_bitmap (struct bfd_link_info *info,
+ struct elf_x86_link_hash_table *htab)
+{
+ asection *sec = htab->elf.srelrdyn;
+ bfd_size_type size = sec->size;
+ bfd_size_type i;
+ unsigned char *contents;
+
+ contents = (unsigned char *) bfd_alloc (sec->owner, size);
+ if (contents == NULL)
+ info->callbacks->einfo
+ /* xgettext:c-format */
+ (_("%F%P: %pB: failed to allocate compact relative reloc section\n"),
+ info->output_bfd);
+
+ /* Cache the section contents for elf_link_input_bfd. */
+ sec->contents = contents;
+
+ if (ABI_64_P (info->output_bfd))
+ for (i = 0; i < htab->dt_relr_bitmap.count; i++, contents += 8)
+ bfd_put_64 (info->output_bfd, htab->dt_relr_bitmap.u.elf64[i],
+ contents);
+ else
+ for (i = 0; i < htab->dt_relr_bitmap.count; i++, contents += 4)
+ bfd_put_32 (info->output_bfd, htab->dt_relr_bitmap.u.elf32[i],
+ contents);
+}
+
+/* Sort relative relocations by address. */
+
+static int
+elf_x86_relative_reloc_compare (const void *pa, const void *pb)
+{
+ struct elf_x86_relative_reloc_record *a =
+ (struct elf_x86_relative_reloc_record *) pa;
+ struct elf_x86_relative_reloc_record *b =
+ (struct elf_x86_relative_reloc_record *) pb;
+ if (a->address < b->address)
+ return -1;
+ if (a->address > b->address)
+ return 1;
+ return 0;
+}
+
+bool
+_bfd_elf_x86_size_relative_relocs (struct bfd_link_info *info,
+ bool *need_layout)
+{
+ struct elf_x86_link_hash_table *htab;
+ const struct elf_backend_data *bed;
+ bool is_x86_64;
+ bfd_size_type i, count, unaligned_count;
+ asection *sec, *srel;
+
+ /* Do nothing for ld -r. */
+ if (bfd_link_relocatable (info))
+ return true;
+
+ bed = get_elf_backend_data (info->output_bfd);
+ htab = elf_x86_hash_table (info, bed->target_id);
+ if (htab == NULL)
+ return false;
+
+ count = htab->relative_reloc.count;
+ unaligned_count = htab->unaligned_relative_reloc.count;
+ if (count == 0)
+ {
+ if (htab->generate_relative_reloc_pass == 0
+ && htab->elf.srelrdyn != NULL)
+ {
+ /* Remove the empty .relr.dyn sections now. */
+ if (!bfd_is_abs_section (htab->elf.srelrdyn->output_section))
+ {
+ bfd_section_list_remove
+ (info->output_bfd, htab->elf.srelrdyn->output_section);
+ info->output_bfd->section_count--;
+ }
+ bfd_section_list_remove (htab->elf.srelrdyn->owner,
+ htab->elf.srelrdyn);
+ htab->elf.srelrdyn->owner->section_count--;
+ }
+ if (unaligned_count == 0)
+ {
+ htab->generate_relative_reloc_pass++;
+ return true;
+ }
+ }
+
+ is_x86_64 = bed->target_id == X86_64_ELF_DATA;
+
+ /* Size relative relocations. */
+ if (htab->generate_relative_reloc_pass)
+ {
+ /* Reset the regular relative relocation count. */
+ for (i = 0; i < unaligned_count; i++)
+ {
+ sec = htab->unaligned_relative_reloc.data[i].sec;
+ srel = elf_section_data (sec)->sreloc;
+ srel->reloc_count = 0;
+ }
+ }
+ else
+ {
+ /* Remove the reserved space for compact relative relocations. */
+ if (count)
+ {
+ asection *sgot = htab->elf.sgot;
+ asection *srelgot = htab->elf.srelgot;
+
+ for (i = 0; i < count; i++)
+ {
+ sec = htab->relative_reloc.data[i].sec;
+ if (sec == sgot)
+ srel = srelgot;
+ else
+ srel = elf_section_data (sec)->sreloc;
+ srel->size -= htab->sizeof_reloc;
+ }
+ }
+ }
+
+ /* Size unaligned relative relocations. */
+ if (unaligned_count)
+ elf_x86_size_or_finish_relative_reloc (is_x86_64, info, htab,
+ true, NULL);
+
+ if (count)
+ {
+ elf_x86_size_or_finish_relative_reloc (is_x86_64, info, htab,
+ false, NULL);
+
+ /* Sort relative relocations by addresses. We only need to
+ sort them in the first pass since the relative positions
+ won't change. */
+ if (htab->generate_relative_reloc_pass == 0)
+ qsort (htab->relative_reloc.data, count,
+ sizeof (struct elf_x86_relative_reloc_record),
+ elf_x86_relative_reloc_compare);
+
+ elf_x86_compute_dl_relr_bitmap (info, htab, need_layout);
+ }
+
+ htab->generate_relative_reloc_pass++;
+
+ return true;
+}
+
+bool
+_bfd_elf_x86_finish_relative_relocs (struct bfd_link_info *info)
+{
+ struct elf_x86_link_hash_table *htab;
+ const struct elf_backend_data *bed;
+ Elf_Internal_Rela outrel;
+ bool is_x86_64;
+ bfd_size_type count;
+
+ /* Do nothing for ld -r. */
+ if (bfd_link_relocatable (info))
+ return true;
+
+ bed = get_elf_backend_data (info->output_bfd);
+ htab = elf_x86_hash_table (info, bed->target_id);
+ if (htab == NULL)
+ return false;
+
+ is_x86_64 = bed->target_id == X86_64_ELF_DATA;
+
+ outrel.r_info = htab->r_info (0, htab->relative_r_type);
+
+ if (htab->unaligned_relative_reloc.count)
+ elf_x86_size_or_finish_relative_reloc (is_x86_64, info, htab,
+ true, &outrel);
+
+ count = htab->relative_reloc.count;
+ if (count)
+ {
+ elf_x86_size_or_finish_relative_reloc (is_x86_64, info, htab,
+ false, &outrel);
+
+ elf_x86_compute_dl_relr_bitmap (info, htab, NULL);
+
+ elf_x86_write_dl_relr_bitmap (info, htab);
+ }
+
+ return true;
+}
+
bool
_bfd_elf_x86_valid_reloc_p (asection *input_section,
struct bfd_link_info *info,
@@ -1016,9 +1960,9 @@ _bfd_elf_x86_valid_reloc_p (asection *input_section,
irel = *rel;
/* Only allow relocations against absolute symbol, which can be
- resolved as absolute value + addend. GOTPCREL relocations
- are allowed since absolute value + addend is stored in the
- GOT slot. */
+ resolved as absolute value + addend. GOTPCREL and GOT32
+ relocations are allowed since absolute value + addend is
+ stored in the GOT slot. */
if (bed->target_id == X86_64_ELF_DATA)
{
r_type &= ~R_X86_64_converted_reloc_bit;
@@ -1039,7 +1983,9 @@ _bfd_elf_x86_valid_reloc_p (asection *input_section,
else
valid_p = (r_type == R_386_32
|| r_type == R_386_16
- || r_type == R_386_8);
+ || r_type == R_386_8
+ || r_type == R_386_GOT32
+ || r_type == R_386_GOT32X);
if (valid_p)
*no_dynreloc_p = true;
@@ -1332,6 +2278,11 @@ _bfd_x86_elf_size_dynamic_sections (bfd *output_bfd,
if ((s->flags & SEC_LINKER_CREATED) == 0)
continue;
+ /* The .relr.dyn section for compact relative relocation will
+ be filled later. */
+ if (s == htab->elf.srelrdyn)
+ continue;
+
if (s == htab->elf.splt
|| s == htab->elf.sgot)
{
diff --git a/bfd/elfxx-x86.h b/bfd/elfxx-x86.h
index 1bb80280918..77fb1ad72bc 100644
--- a/bfd/elfxx-x86.h
+++ b/bfd/elfxx-x86.h
@@ -47,18 +47,40 @@
#define X86_SIZE_TYPE_P(IS_X86_64, TYPE) \
((IS_X86_64) ? X86_64_SIZE_TYPE_P(TYPE) : I386_SIZE_TYPE_P (TYPE))
-#define X86_64_NEED_DYNAMIC_RELOC_TYPE_P(TYPE) \
- (X86_64_SIZE_TYPE_P (TYPE) \
- || X86_64_PCREL_TYPE_P (TYPE) \
+#define X86_64_GOT_TYPE_P(TYPE) \
+ ((TYPE) == R_X86_64_GOTPCREL \
+ || (TYPE) == R_X86_64_GOTPCRELX \
+ || (TYPE) == R_X86_64_REX_GOTPCRELX \
+ || (TYPE) == R_X86_64_GOT32 \
+ || (TYPE) == R_X86_64_GOT64 \
+ || (TYPE) == R_X86_64_GOTPCREL64 \
+ || (TYPE) == R_X86_64_GOTPLT64)
+#define I386_GOT_TYPE_P(TYPE) \
+ ((TYPE) == R_386_GOT32 || (TYPE) == R_386_GOT32X)
+#define X86_GOT_TYPE_P(IS_X86_64, TYPE) \
+ ((IS_X86_64) ? X86_64_GOT_TYPE_P (TYPE) : I386_GOT_TYPE_P (TYPE))
+
+#define X86_64_RELATIVE_RELOC_TYPE_P(TYPE) \
+ (X86_64_PCREL_TYPE_P (TYPE) \
|| (TYPE) == R_X86_64_8 \
|| (TYPE) == R_X86_64_16 \
|| (TYPE) == R_X86_64_32 \
|| (TYPE) == R_X86_64_32S \
|| (TYPE) == R_X86_64_64)
+#define I386_RELATIVE_RELOC_TYPE_P(TYPE) \
+ ((TYPE) == R_386_32 || (TYPE) == R_386_PC32)
+#define X86_RELATIVE_RELOC_TYPE_P(IS_X86_64, TYPE) \
+ ((IS_X86_64) \
+ ? X86_64_RELATIVE_RELOC_TYPE_P (TYPE) \
+ : I386_RELATIVE_RELOC_TYPE_P(TYPE))
+
+#define X86_64_NEED_DYNAMIC_RELOC_TYPE_P(TYPE) \
+ (X86_64_SIZE_TYPE_P (TYPE) \
+ || X86_64_RELATIVE_RELOC_TYPE_P (TYPE))
#define I386_NEED_DYNAMIC_RELOC_TYPE_P(TYPE) \
(I386_SIZE_TYPE_P (TYPE) \
- || I386_PCREL_TYPE_P (TYPE) \
- || (TYPE) == R_386_32 \
+ || I386_RELATIVE_RELOC_TYPE_P (TYPE) \
+ || (TYPE) == R_386_TLS_IE \
|| (TYPE) == R_386_TLS_LE \
|| (TYPE) == R_386_TLS_LE_32)
#define X86_NEED_DYNAMIC_RELOC_TYPE_P(IS_X86_64, TYPE) \
@@ -66,11 +88,23 @@
? X86_64_NEED_DYNAMIC_RELOC_TYPE_P (TYPE) \
: I386_NEED_DYNAMIC_RELOC_TYPE_P (TYPE))
+#define X86_LOCAL_GOT_RELATIVE_RELOC_P(IS_X86_64, INFO, SYM) \
+ (bfd_link_pic (INFO) \
+ && (!(IS_X86_64) || ((SYM) != NULL && (SYM)->st_shndx != SHN_ABS)))
+
#define PLT_CIE_LENGTH 20
#define PLT_FDE_LENGTH 36
#define PLT_FDE_START_OFFSET 4 + PLT_CIE_LENGTH + 8
#define PLT_FDE_LEN_OFFSET 4 + PLT_CIE_LENGTH + 12
+#define I386_PCREL_TYPE_P(TYPE) ((TYPE) == R_386_PC32)
+#define X86_64_PCREL_TYPE_P(TYPE) \
+ ((TYPE) == R_X86_64_PC8 \
+ || (TYPE) == R_X86_64_PC16 \
+ || (TYPE) == R_X86_64_PC32 \
+ || (TYPE) == R_X86_64_PC32_BND \
+ || (TYPE) == R_X86_64_PC64)
+
#define ABI_64_P(abfd) \
(get_elf_backend_data (abfd)->s->elfclass == ELFCLASS64)
@@ -160,13 +194,19 @@
relocations against resolved undefined weak symbols in PIE, except
when PC32_RELOC is TRUE. Undefined weak symbol is bound locally
when PIC is false. Don't generate dynamic relocations against
- non-preemptible absolute symbol. */
+ non-preemptible absolute symbol. NB: rel_from_abs is set on symbols
+ defined by linker scripts from "dot" (also SEGMENT_START or ORIGIN)
+ outside of an output section statement, which will be converted from
+ absolute to section-relative in set_sym_sections called from
+ ldexp_finalize_syms after ldemul_finish. */
#define GENERATE_DYNAMIC_RELOCATION_P(IS_X86_64, INFO, EH, R_TYPE, \
SEC, NEED_COPY_RELOC_IN_PIE, \
RESOLVED_TO_ZERO, PC32_RELOC) \
((bfd_link_pic (INFO) \
&& !(bfd_is_abs_section (SEC) \
&& ((EH) == NULL \
+ || (EH)->elf.root.rel_from_abs == 0) \
+ && ((EH) == NULL \
|| SYMBOL_REFERENCES_LOCAL (INFO, &(EH)->elf))) \
&& !(NEED_COPY_RELOC_IN_PIE) \
&& ((EH) == NULL \
@@ -302,6 +342,10 @@ struct elf_x86_link_hash_entry
/* Don't call finish_dynamic_symbol on this symbol. */
unsigned int no_finish_dynamic_symbol : 1;
+ /* R_*_RELATIVE relocation in GOT for this symbol has been
+ processed. */
+ unsigned int got_relative_reloc_done : 1;
+
/* TRUE if symbol is __tls_get_addr. */
unsigned int tls_get_addr : 1;
@@ -481,6 +525,52 @@ struct elf_x86_plt_layout
#define elf_x86_hash_entry(ent) \
((struct elf_x86_link_hash_entry *)(ent))
+/* Information of an input relocation used to compute its contribution
+ to the DT_RELR section size. */
+
+struct elf_x86_relative_reloc_record
+{
+ /* The original relocation info. */
+ Elf_Internal_Rela rel;
+ /* The input or the GOT section where the relocation is applied. */
+ asection *sec;
+ /* Local symbol info. NULL for global symbol. */
+ Elf_Internal_Sym *sym;
+ union
+ {
+ /* Section where the local symbol is defined. */
+ asection *sym_sec;
+ /* Global symbol hash. */
+ struct elf_link_hash_entry *h;
+ } u;
+ /* The offset into the output section where the relative relocation
+ will be applied at run-time. */
+ bfd_vma offset;
+ /* The run-time address. */
+ bfd_vma address;
+};
+
+struct elf_x86_relative_reloc_data
+{
+ bfd_size_type count;
+ bfd_size_type size;
+ struct elf_x86_relative_reloc_record *data;
+};
+
+/* DT_RELR bitmap. */
+struct elf_dt_relr_bitmap
+{
+ bfd_size_type count;
+ bfd_size_type size;
+ union
+ {
+ /* 32-bit bitmap. */
+ uint32_t *elf32;
+ /* 64-bit bitmap. */
+ uint64_t *elf64;
+ } u;
+};
+
/* x86 ELF linker hash table. */
struct elf_x86_link_hash_table
@@ -533,6 +623,18 @@ struct elf_x86_link_hash_table
is only used for i386. */
bfd_vma next_tls_desc_index;
+ /* DT_RELR bitmap. */
+ struct elf_dt_relr_bitmap dt_relr_bitmap;
+
+ /* Relative relocation data. */
+ struct elf_x86_relative_reloc_data relative_reloc;
+
+ /* Unaligned relative relocation data. */
+ struct elf_x86_relative_reloc_data unaligned_relative_reloc;
+
+ /* Number of relative reloc generation pass. */
+ unsigned int generate_relative_reloc_pass;
+
/* Value used to fill the unused bytes of the first PLT entry. This
is only used for i386. */
bfd_byte plt0_pad_byte;
@@ -554,9 +656,14 @@ struct elf_x86_link_hash_table
unsigned int sizeof_reloc;
unsigned int got_entry_size;
unsigned int pointer_r_type;
+ unsigned int relative_r_type;
int dynamic_interpreter_size;
const char *dynamic_interpreter;
const char *tls_get_addr;
+ const char *relative_r_name;
+ void (*elf_append_reloc) (bfd *, asection *, Elf_Internal_Rela *);
+ void (*elf_write_addend) (bfd *, uint64_t, void *);
+ void (*elf_write_addend_in_got) (bfd *, uint64_t, void *);
/* Options passed from the linker. */
struct elf_linker_x86_params *params;
@@ -591,6 +698,10 @@ struct elf_x86_obj_tdata
/* GOTPLT entries for TLS descriptors. */
bfd_vma *local_tlsdesc_gotent;
+
+ /* R_*_RELATIVE relocation in GOT for this local symbol has been
+ processed. */
+ char *relative_reloc_done;
};
enum elf_x86_plt_type
@@ -626,6 +737,9 @@ struct elf_x86_plt
#define elf_x86_local_tlsdesc_gotent(abfd) \
(elf_x86_tdata (abfd)->local_tlsdesc_gotent)
+#define elf_x86_relative_reloc_done(abfd) \
+ (elf_x86_tdata (abfd)->relative_reloc_done)
+
#define elf_x86_compute_jump_table_size(htab) \
((htab)->elf.srelplt->reloc_count * (htab)->got_entry_size)
@@ -637,6 +751,7 @@ struct elf_x86_plt
/* Rename some of the generic section flags to better document how they
are used here. */
#define check_relocs_failed sec_flg0
+#define relative_reloc_packed sec_flg1
extern bool _bfd_x86_elf_mkobject
(bfd *);
@@ -676,6 +791,18 @@ extern bool _bfd_x86_elf_check_relocs
(bfd *, struct bfd_link_info *, asection *,
const Elf_Internal_Rela *);
+extern bool _bfd_x86_elf_link_relax_section
+ (bfd *, asection *, struct bfd_link_info *, bool *);
+
+extern bool _bfd_elf_x86_size_relative_relocs
+ (struct bfd_link_info *, bool *);
+
+extern bool _bfd_elf_x86_finish_relative_relocs
+ (struct bfd_link_info *);
+
+extern void _bfd_elf32_write_addend (bfd *, uint64_t, void *);
+extern void _bfd_elf64_write_addend (bfd *, uint64_t, void *);
+
extern bool _bfd_elf_x86_valid_reloc_p
(asection *, struct bfd_link_info *, struct elf_x86_link_hash_table *,
const Elf_Internal_Rela *, struct elf_link_hash_entry *,
@@ -752,6 +879,10 @@ extern void _bfd_x86_elf_link_report_relative_reloc
_bfd_x86_elf_link_check_relocs
#define bfd_elf32_bfd_link_check_relocs \
_bfd_x86_elf_link_check_relocs
+#define bfd_elf32_bfd_relax_section \
+ _bfd_x86_elf_link_relax_section
+#define bfd_elf64_bfd_relax_section \
+ _bfd_x86_elf_link_relax_section
#define elf_backend_check_relocs \
_bfd_x86_elf_check_relocs
@@ -777,6 +908,10 @@ extern void _bfd_x86_elf_link_report_relative_reloc
_bfd_x86_elf_merge_gnu_properties
#define elf_backend_fixup_gnu_properties \
_bfd_x86_elf_link_fixup_gnu_properties
+#define elf_backend_size_relative_relocs \
+ _bfd_elf_x86_size_relative_relocs
+#define elf_backend_finish_relative_relocs \
+ _bfd_elf_x86_finish_relative_relocs
#define ELF_P_ALIGN ELF_MINPAGESIZE
@@ -789,7 +924,8 @@ elf_x86_allocate_local_got_info (bfd *abfd, bfd_size_type count)
if (local_got_refcounts == NULL)
{
bfd_size_type size = count * (sizeof (bfd_signed_vma)
- + sizeof (bfd_vma) + sizeof(char));
+ + sizeof (bfd_vma)
+ + 2 * sizeof(char));
local_got_refcounts = (bfd_signed_vma *) bfd_zalloc (abfd, size);
if (local_got_refcounts == NULL)
return false;
@@ -798,6 +934,8 @@ elf_x86_allocate_local_got_info (bfd *abfd, bfd_size_type count)
(bfd_vma *) (local_got_refcounts + count);
elf_x86_local_got_tls_type (abfd) =
(char *) (local_got_refcounts + 2 * count);
+ elf_x86_relative_reloc_done (abfd) =
+ ((char *) (local_got_refcounts + 2 * count)) + count;
}
return true;
}
diff --git a/bfd/libbfd.h b/bfd/libbfd.h
index 6e62e556962..8c02e29eebd 100644
--- a/bfd/libbfd.h
+++ b/bfd/libbfd.h
@@ -1040,6 +1040,7 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
"BFD_RELOC_12_PCREL",
"BFD_RELOC_8_PCREL",
"BFD_RELOC_32_SECREL",
+ "BFD_RELOC_16_SECIDX",
"BFD_RELOC_32_GOT_PCREL",
"BFD_RELOC_16_GOT_PCREL",
"BFD_RELOC_8_GOT_PCREL",
diff --git a/bfd/libxcoff.h b/bfd/libxcoff.h
index 2a71ee5851a..c6ad6dc2c4a 100644
--- a/bfd/libxcoff.h
+++ b/bfd/libxcoff.h
@@ -99,6 +99,15 @@ struct xcoff_backend_data_rec
unsigned int _xcoff_rtinit_size;
bool (*_xcoff_generate_rtinit)
(bfd *, const char *, const char *, bool);
+
+ /* Stubs code generation.
+ The code part is an array which might need to be modified by
+ some relocations.
+ The size is in bytes. */
+ const unsigned long *_xcoff_stub_indirect_call_code;
+ unsigned long _xcoff_stub_indirect_call_size;
+ const unsigned long *_xcoff_stub_shared_call_code;
+ unsigned long _xcoff_stub_shared_call_size;
};
/* Look up an entry in an XCOFF link hash table. */
@@ -185,6 +194,11 @@ struct xcoff_backend_data_rec
#define bfd_xcoff_glink_code(a, b) ((xcoff_backend (a)->_xcoff_glink_code[(b)]))
#define bfd_xcoff_glink_code_size(a) ((xcoff_backend (a)->_xcoff_glink_size))
+#define bfd_xcoff_stub_indirect_call_code(a, b) ((xcoff_backend (a)->_xcoff_stub_indirect_call_code[(b)]))
+#define bfd_xcoff_stub_indirect_call_size(a) ((xcoff_backend (a)->_xcoff_stub_indirect_call_size))
+#define bfd_xcoff_stub_shared_call_code(a, b) ((xcoff_backend (a)->_xcoff_stub_shared_call_code[(b)]))
+#define bfd_xcoff_stub_shared_call_size(a) ((xcoff_backend (a)->_xcoff_stub_shared_call_size))
+
/* Check for the magic number U803XTOCMAGIC or U64_TOCMAGIC for 64 bit
targets. */
#define bfd_xcoff_is_xcoff64(a) \
@@ -211,11 +225,12 @@ struct xcoff_backend_data_rec
#define N_ONES(n) (((((bfd_vma) 1 << ((n) - 1)) - 1) << 1) | 1)
typedef bool xcoff_reloc_function (bfd *, asection *, bfd *,
- struct internal_reloc *,
- struct internal_syment *,
- struct reloc_howto_struct *,
- bfd_vma, bfd_vma,
- bfd_vma *, bfd_byte *);
+ struct internal_reloc *,
+ struct internal_syment *,
+ struct reloc_howto_struct *,
+ bfd_vma, bfd_vma,
+ bfd_vma *, bfd_byte *,
+ struct bfd_link_info *);
typedef bool xcoff_complain_function (bfd *, bfd_vma, bfd_vma,
struct reloc_howto_struct *);
@@ -261,4 +276,42 @@ struct xcoff_dwsect_name {
extern const struct xcoff_dwsect_name
xcoff_dwsect_names[XCOFF_DWSECT_NBR_NAMES];
+/* Structure and functions needed by backend in order to handle
+ stubs created in xcofflink.c. */
+
+enum xcoff_stub_type
+ {
+ xcoff_stub_none,
+ xcoff_stub_indirect_call,
+ xcoff_stub_shared_call
+ };
+
+struct xcoff_stub_hash_entry
+{
+ /* Base hash table entry structure. */
+ struct bfd_hash_entry root;
+
+ enum xcoff_stub_type stub_type;
+
+ /* The hash table entry of the stub's csect. */
+ struct xcoff_link_hash_entry *hcsect;
+
+ /* Offset in the stub's csect. */
+ bfd_vma stub_offset;
+
+ /* The target's section. */
+ asection *target_section;
+
+ /* The target's hash table entry. */
+ struct xcoff_link_hash_entry *htarget;
+};
+
+
+extern enum xcoff_stub_type bfd_xcoff_type_of_stub
+ (asection *, const struct internal_reloc *, bfd_vma,
+ struct xcoff_link_hash_entry *);
+
+extern struct xcoff_stub_hash_entry *bfd_xcoff_get_stub_entry
+ (asection *, struct xcoff_link_hash_entry *, struct bfd_link_info *);
+
#endif /* LIBXCOFF_H */
diff --git a/bfd/linker.c b/bfd/linker.c
index 088c1d06f3d..0c2e3c10a67 100644
--- a/bfd/linker.c
+++ b/bfd/linker.c
@@ -599,6 +599,8 @@ bfd_wrapped_link_hash_lookup (bfd *abfd,
n[1] = '\0';
strcat (n, l + sizeof REAL - 1);
h = bfd_link_hash_lookup (info->hash, n, create, true, follow);
+ if (h != NULL)
+ h->ref_real = 1;
free (n);
return h;
}
diff --git a/bfd/peXXigen.c b/bfd/peXXigen.c
index c71dacd4bf0..50e4face50c 100644
--- a/bfd/peXXigen.c
+++ b/bfd/peXXigen.c
@@ -2937,6 +2937,7 @@ bool
_bfd_XX_bfd_copy_private_bfd_data_common (bfd * ibfd, bfd * obfd)
{
pe_data_type *ipe, *ope;
+ bfd_size_type size;
/* One day we may try to grok other private data. */
if (ibfd->xvec->flavour != bfd_target_coff_flavour
@@ -2971,7 +2972,8 @@ _bfd_XX_bfd_copy_private_bfd_data_common (bfd * ibfd, bfd * obfd)
memcpy (ope->dos_message, ipe->dos_message, sizeof (ope->dos_message));
/* The file offsets contained in the debug directory need rewriting. */
- if (ope->pe_opthdr.DataDirectory[PE_DEBUG_DATA].Size != 0)
+ size = ope->pe_opthdr.DataDirectory[PE_DEBUG_DATA].Size;
+ if (size != 0)
{
bfd_vma addr = ope->pe_opthdr.DataDirectory[PE_DEBUG_DATA].VirtualAddress
+ ope->pe_opthdr.ImageBase;
@@ -2980,62 +2982,74 @@ _bfd_XX_bfd_copy_private_bfd_data_common (bfd * ibfd, bfd * obfd)
representing s_size, not virt_size). Therefore don't look for the
section containing the first byte, but for that covering the last
one. */
- bfd_vma last = addr + ope->pe_opthdr.DataDirectory[PE_DEBUG_DATA].Size - 1;
+ bfd_vma last = addr + size - 1;
asection *section = find_section_by_vma (obfd, last);
- bfd_byte *data;
- /* PR 17512: file: 0f15796a. */
- if (section && addr < section->vma)
+ if (section != NULL)
{
- /* xgettext:c-format */
- _bfd_error_handler
- (_("%pB: Data Directory (%lx bytes at %" PRIx64 ") "
- "extends across section boundary at %" PRIx64),
- obfd, ope->pe_opthdr.DataDirectory[PE_DEBUG_DATA].Size,
- (uint64_t) addr, (uint64_t) section->vma);
- return false;
- }
+ bfd_byte *data;
+ bfd_vma dataoff = addr - section->vma;
- if (section && bfd_malloc_and_get_section (obfd, section, &data))
- {
- unsigned int i;
- struct external_IMAGE_DEBUG_DIRECTORY *dd =
- (struct external_IMAGE_DEBUG_DIRECTORY *)(data + (addr - section->vma));
+ /* PR 17512: file: 0f15796a. */
+ if (addr < section->vma
+ || section->size < dataoff
+ || section->size - dataoff < size)
+ {
+ /* xgettext:c-format */
+ _bfd_error_handler
+ (_("%pB: Data Directory (%lx bytes at %" PRIx64 ") "
+ "extends across section boundary at %" PRIx64),
+ obfd, ope->pe_opthdr.DataDirectory[PE_DEBUG_DATA].Size,
+ (uint64_t) addr, (uint64_t) section->vma);
+ return false;
+ }
- for (i = 0; i < ope->pe_opthdr.DataDirectory[PE_DEBUG_DATA].Size
- / sizeof (struct external_IMAGE_DEBUG_DIRECTORY); i++)
+ if (bfd_malloc_and_get_section (obfd, section, &data))
{
- asection *ddsection;
- struct external_IMAGE_DEBUG_DIRECTORY *edd = &(dd[i]);
- struct internal_IMAGE_DEBUG_DIRECTORY idd;
+ unsigned int i;
+ struct external_IMAGE_DEBUG_DIRECTORY *dd =
+ (struct external_IMAGE_DEBUG_DIRECTORY *)(data + dataoff);
+
+ for (i = 0; i < ope->pe_opthdr.DataDirectory[PE_DEBUG_DATA].Size
+ / sizeof (struct external_IMAGE_DEBUG_DIRECTORY); i++)
+ {
+ asection *ddsection;
+ struct external_IMAGE_DEBUG_DIRECTORY *edd = &(dd[i]);
+ struct internal_IMAGE_DEBUG_DIRECTORY idd;
+ bfd_vma idd_vma;
- _bfd_XXi_swap_debugdir_in (obfd, edd, &idd);
+ _bfd_XXi_swap_debugdir_in (obfd, edd, &idd);
- if (idd.AddressOfRawData == 0)
- continue; /* RVA 0 means only offset is valid, not handled yet. */
+ /* RVA 0 means only offset is valid, not handled yet. */
+ if (idd.AddressOfRawData == 0)
+ continue;
- ddsection = find_section_by_vma (obfd, idd.AddressOfRawData + ope->pe_opthdr.ImageBase);
- if (!ddsection)
- continue; /* Not in a section! */
+ idd_vma = idd.AddressOfRawData + ope->pe_opthdr.ImageBase;
+ ddsection = find_section_by_vma (obfd, idd_vma);
+ if (!ddsection)
+ continue; /* Not in a section! */
- idd.PointerToRawData = ddsection->filepos + (idd.AddressOfRawData
- + ope->pe_opthdr.ImageBase) - ddsection->vma;
+ idd.PointerToRawData
+ = ddsection->filepos + idd_vma - ddsection->vma;
+ _bfd_XXi_swap_debugdir_out (obfd, &idd, edd);
+ }
- _bfd_XXi_swap_debugdir_out (obfd, &idd, edd);
+ if (!bfd_set_section_contents (obfd, section, data, 0,
+ section->size))
+ {
+ _bfd_error_handler (_("failed to update file offsets"
+ " in debug directory"));
+ free (data);
+ return false;
+ }
+ free (data);
}
-
- if (!bfd_set_section_contents (obfd, section, data, 0, section->size))
+ else
{
- _bfd_error_handler (_("failed to update file offsets in debug directory"));
- free (data);
+ _bfd_error_handler (_("%pB: failed to read "
+ "debug data section"), obfd);
return false;
}
- free (data);
- }
- else if (section)
- {
- _bfd_error_handler (_("%pB: failed to read debug data section"), obfd);
- return false;
}
}
diff --git a/bfd/peicode.h b/bfd/peicode.h
index bbf44813a75..0346bc2174e 100644
--- a/bfd/peicode.h
+++ b/bfd/peicode.h
@@ -489,7 +489,7 @@ pe_ILF_make_a_symbol_reloc (pe_ILF_vars * vars,
internal->r_vaddr = address;
internal->r_symndx = sym_index;
- internal->r_type = entry->howto->type;
+ internal->r_type = entry->howto ? entry->howto->type : 0;
vars->relcount ++;
diff --git a/bfd/po/SRC-POTFILES.in b/bfd/po/SRC-POTFILES.in
index 98bd9db97ad..59251e39858 100644
--- a/bfd/po/SRC-POTFILES.in
+++ b/bfd/po/SRC-POTFILES.in
@@ -44,6 +44,7 @@ corefile.c
cpu-aarch64.c
cpu-aarch64.h
cpu-alpha.c
+cpu-amdgcn.c
cpu-arc.c
cpu-arm.c
cpu-arm.h
@@ -69,8 +70,6 @@ cpu-ia64.c
cpu-iamcu.c
cpu-ip2k.c
cpu-iq2000.c
-cpu-k1om.c
-cpu-l1om.c
cpu-lm32.c
cpu-loongarch.c
cpu-m10200.c
@@ -239,6 +238,7 @@ elf32-xtensa.c
elf32-z80.c
elf32.c
elf64-alpha.c
+elf64-amdgcn.c
elf64-bpf.c
elf64-gen.c
elf64-hppa.c
diff --git a/bfd/po/bfd.pot b/bfd/po/bfd.pot
index 8bb3773857a..50e6b1b2348 100644
--- a/bfd/po/bfd.pot
+++ b/bfd/po/bfd.pot
@@ -7,8 +7,8 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: bug-binutils@gnu.org\n"
-"POT-Creation-Date: 2021-08-11 10:43+0100\n"
+"Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n"
+"POT-Creation-Date: 2022-01-22 12:18+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -33,27 +33,27 @@ msgstr ""
msgid "%pB: bad relocation record imported: %d"
msgstr ""
-#: aoutx.h:1265 aoutx.h:1613 pdp11.c:1238 pdp11.c:1512
+#: aoutx.h:1265 aoutx.h:1612 pdp11.c:1238 pdp11.c:1511
#, c-format
msgid "%pB: can not represent section `%pA' in a.out object file format"
msgstr ""
-#: aoutx.h:1577 pdp11.c:1484
+#: aoutx.h:1576 pdp11.c:1483
#, c-format
msgid ""
"%pB: can not represent section for symbol `%s' in a.out object file format"
msgstr ""
-#: aoutx.h:1580 vms-alpha.c:8035
+#: aoutx.h:1579 vms-alpha.c:8282
msgid "*unknown*"
msgstr ""
-#: aoutx.h:1716 pdp11.c:1580
+#: aoutx.h:1715 pdp11.c:1579
#, c-format
msgid "%pB: invalid string offset %<PRIu64> >= %<PRIu64>"
msgstr ""
-#: aoutx.h:1963
+#: aoutx.h:1962
#, c-format
msgid "%pB: unsupported AOUT relocation size: %d"
msgstr ""
@@ -69,35 +69,35 @@ msgid "%pB: unsupported relocation type"
msgstr ""
#. Unknown relocation.
-#: aoutx.h:4405 coff-alpha.c:601 coff-alpha.c:1518 coff-rs6000.c:2916
-#: coff-sh.c:504 coff-tic4x.c:184 coff-tic54x.c:279 elf-hppa.h:798
-#: elf-hppa.h:826 elf-m10200.c:226 elf-m10300.c:813 elf32-arc.c:532
-#: elf32-arm.c:1985 elf32-avr.c:962 elf32-bfin.c:1066 elf32-bfin.c:4693
-#: elf32-cr16.c:654 elf32-cr16.c:684 elf32-cris.c:467 elf32-crx.c:429
-#: elf32-csky.c:991 elf32-d10v.c:234 elf32-d30v.c:522 elf32-d30v.c:544
-#: elf32-dlx.c:546 elf32-epiphany.c:372 elf32-fr30.c:381 elf32-frv.c:2559
-#: elf32-frv.c:6240 elf32-ft32.c:305 elf32-h8300.c:302 elf32-i386.c:400
-#: elf32-ip2k.c:1240 elf32-iq2000.c:442 elf32-lm32.c:496 elf32-m32c.c:305
-#: elf32-m32r.c:1286 elf32-m32r.c:1311 elf32-m32r.c:2209 elf32-m68hc11.c:390
-#: elf32-m68hc12.c:510 elf32-m68k.c:354 elf32-mcore.c:354 elf32-mcore.c:440
-#: elf32-mep.c:385 elf32-metag.c:871 elf32-microblaze.c:690
+#: aoutx.h:4405 coff-alpha.c:601 coff-alpha.c:1518 coff-mips.c:356
+#: coff-rs6000.c:2959 coff-sh.c:504 coff-tic4x.c:184 coff-tic54x.c:279
+#: elf-hppa.h:798 elf-hppa.h:826 elf-m10200.c:226 elf-m10300.c:813
+#: elf32-arc.c:532 elf32-arm.c:1985 elf32-avr.c:962 elf32-bfin.c:1066
+#: elf32-bfin.c:4690 elf32-cr16.c:654 elf32-cr16.c:684 elf32-cris.c:467
+#: elf32-crx.c:429 elf32-csky.c:991 elf32-d10v.c:234 elf32-d30v.c:522
+#: elf32-d30v.c:544 elf32-dlx.c:546 elf32-epiphany.c:372 elf32-fr30.c:381
+#: elf32-frv.c:2559 elf32-frv.c:6240 elf32-ft32.c:305 elf32-h8300.c:302
+#: elf32-i386.c:394 elf32-ip2k.c:1240 elf32-iq2000.c:442 elf32-lm32.c:496
+#: elf32-m32c.c:305 elf32-m32r.c:1286 elf32-m32r.c:1311 elf32-m32r.c:2209
+#: elf32-m68hc11.c:390 elf32-m68hc12.c:510 elf32-m68k.c:354 elf32-mcore.c:354
+#: elf32-mcore.c:440 elf32-mep.c:385 elf32-metag.c:871 elf32-microblaze.c:690
#: elf32-microblaze.c:961 elf32-mips.c:2231 elf32-moxie.c:137
#: elf32-msp430.c:737 elf32-msp430.c:747 elf32-mt.c:241 elf32-nds32.c:3234
#: elf32-nds32.c:3255 elf32-nds32.c:5024 elf32-nios2.c:3019 elf32-or1k.c:1070
#: elf32-pj.c:326 elf32-ppc.c:900 elf32-ppc.c:913 elf32-pru.c:423
#: elf32-rl78.c:291 elf32-rx.c:324 elf32-rx.c:333 elf32-s12z.c:296
-#: elf32-s390.c:347 elf32-score.c:2392 elf32-score7.c:2231 elf32-sh.c:437
+#: elf32-s390.c:347 elf32-score.c:2383 elf32-score7.c:2224 elf32-sh.c:437
#: elf32-spu.c:163 elf32-tic6x.c:1498 elf32-tic6x.c:1508 elf32-tic6x.c:1527
#: elf32-tic6x.c:1537 elf32-tic6x.c:2583 elf32-tilepro.c:792 elf32-v850.c:1902
#: elf32-v850.c:1924 elf32-v850.c:4249 elf32-vax.c:289 elf32-visium.c:481
#: elf32-wasm32.c:105 elf32-xc16x.c:250 elf32-xgate.c:418 elf32-xstormy16.c:395
#: elf32-xtensa.c:522 elf32-xtensa.c:556 elf32-z80.c:331 elf64-alpha.c:1114
-#: elf64-alpha.c:4072 elf64-alpha.c:4220 elf64-bpf.c:325 elf64-ia64-vms.c:255
-#: elf64-ia64-vms.c:3431 elf64-mips.c:3958 elf64-mips.c:3974 elf64-mmix.c:1264
-#: elf64-nfp.c:238 elf64-ppc.c:1023 elf64-ppc.c:1375 elf64-ppc.c:1384
-#: elf64-s390.c:328 elf64-s390.c:378 elf64-x86-64.c:279 elfn32-mips.c:3788
-#: elfxx-ia64.c:324 elfxx-riscv.c:970 elfxx-sparc.c:589 elfxx-sparc.c:639
-#: elfxx-tilegx.c:907 elfxx-tilegx.c:947 elfnn-aarch64.c:2215
+#: elf64-alpha.c:4073 elf64-alpha.c:4221 elf64-bpf.c:325 elf64-ia64-vms.c:255
+#: elf64-ia64-vms.c:3425 elf64-mips.c:3958 elf64-mips.c:3974 elf64-mmix.c:1264
+#: elf64-nfp.c:238 elf64-ppc.c:1027 elf64-ppc.c:1381 elf64-ppc.c:1390
+#: elf64-s390.c:328 elf64-s390.c:378 elf64-x86-64.c:268 elfn32-mips.c:3788
+#: elfxx-ia64.c:324 elfxx-loongarch.c:632 elfxx-riscv.c:969 elfxx-sparc.c:589
+#: elfxx-sparc.c:639 elfxx-tilegx.c:907 elfxx-tilegx.c:947 elfnn-aarch64.c:2215
#: elfnn-aarch64.c:2313 elfnn-ia64.c:214 elfnn-ia64.c:3820
#, c-format
msgid "%pB: unsupported relocation type %#x"
@@ -113,20 +113,24 @@ msgstr ""
msgid "%pB: cannot allocate memory for local GOT entries"
msgstr ""
-#: archive.c:2242
+#: archive.c:743
+msgid "%F%P: %pB(%s): error opening thin archive member: %E\n"
+msgstr ""
+
+#: archive.c:2272
msgid "warning: writing archive was slow: rewriting timestamp"
msgstr ""
-#: archive.c:2309 archive.c:2369 elflink.c:4639 linker.c:1427
+#: archive.c:2339 archive.c:2400 elflink.c:4756 linker.c:1429
#, c-format
msgid "%pB: plugin needed to handle lto object"
msgstr ""
-#: archive.c:2595
+#: archive.c:2626
msgid "Reading archive file mod timestamp"
msgstr ""
-#: archive.c:2619
+#: archive.c:2650
msgid "Writing updated armap timestamp"
msgstr ""
@@ -269,7 +273,7 @@ msgid ""
"to generate uncompressed binaries"
msgstr ""
-#: coff-alpha.c:856 coff-alpha.c:893 coff-alpha.c:1960 coff-mips.c:953
+#: coff-alpha.c:856 coff-alpha.c:893 coff-alpha.c:1960 coff-mips.c:960
msgid "GP relative relocation used when GP not defined"
msgstr ""
@@ -277,18 +281,18 @@ msgstr ""
msgid "using multiple gp values"
msgstr ""
-#: coff-alpha.c:1505 coff-alpha.c:1511 elf.c:9464 elf32-mcore.c:100
-#: elf32-mcore.c:455 elf32-ppc.c:7616 elf32-ppc.c:8765 elf64-ppc.c:16244
+#: coff-alpha.c:1505 coff-alpha.c:1511 elf.c:9527 elf32-mcore.c:100
+#: elf32-mcore.c:455 elf32-ppc.c:7649 elf32-ppc.c:8841 elf64-ppc.c:16679
#, c-format
msgid "%pB: %s unsupported"
msgstr ""
-#: coff-go32.c:156 coffswap.h:792
+#: coff-go32.c:164 coffswap.h:819
#, c-format
msgid "%pB: warning: %s: line number overflow: 0x%lx > 0xffff"
msgstr ""
-#: coff-mips.c:643 elf32-mips.c:1744 elf32-score.c:433 elf32-score7.c:333
+#: coff-mips.c:650 elf32-mips.c:1744 elf32-score.c:433 elf32-score7.c:333
#: elf64-mips.c:3451 elfn32-mips.c:3278
msgid "GP relative relocation when _gp not defined"
msgstr ""
@@ -298,39 +302,32 @@ msgstr ""
msgid "%pB: unsupported swap_aux_in for storage class %#x"
msgstr ""
-#: coff-rs6000.c:570 coff64-rs6000.c:499
+#: coff-rs6000.c:571 coff64-rs6000.c:497
#, c-format
msgid "%pB: unsupported swap_aux_out for storage class %#x"
msgstr ""
-#: coff-rs6000.c:3002
+#: coff-rs6000.c:3045
#, c-format
msgid "%pB: TOC reloc at %#<PRIx64> to symbol `%s' with no TOC entry"
msgstr ""
-#: coff-rs6000.c:3212
-#, c-format
-msgid ""
-"%pB: TLS relocation at 0x%s over internal symbols (C_HIDEXT) not yet "
-"possible\n"
-msgstr ""
-
-#: coff-rs6000.c:3225
+#: coff-rs6000.c:3260
#, c-format
msgid "%pB: TLS relocation at 0x%s over non-TLS symbol %s (0x%x)\n"
msgstr ""
-#: coff-rs6000.c:3241
+#: coff-rs6000.c:3276
#, c-format
msgid "%pB: TLS local relocation at 0x%s over imported symbol %s\n"
msgstr ""
-#: coff-rs6000.c:3652
+#: coff-rs6000.c:3686
#, c-format
msgid "%pB: relocation (%d) at 0x%s has wrong r_rsize (0x%x)\n"
msgstr ""
-#: coff-rs6000.c:3915 coff64-rs6000.c:2023
+#: coff-rs6000.c:3949 coff64-rs6000.c:2000
#, c-format
msgid "%pB: symbol `%s' has unrecognized smclas %d"
msgstr ""
@@ -386,43 +383,43 @@ msgid "%pB: illegal symbol index %ld in relocs"
msgstr ""
#: coff-tic30.c:172 coff-tic4x.c:228 coff-tic54x.c:366 coff-z80.c:325
-#: coff-z8k.c:188 coffcode.h:5130
+#: coff-z8k.c:188 coffcode.h:5157
#, c-format
msgid "%pB: warning: illegal symbol index %ld in relocs"
msgstr ""
-#: coff64-rs6000.c:449 coff64-rs6000.c:555
+#: coff64-rs6000.c:447 coff64-rs6000.c:554
#, c-format
msgid "%pB: C_STAT isn't supported by XCOFF64"
msgstr ""
-#: coff64-rs6000.c:479
+#: coff64-rs6000.c:477
#, c-format
msgid "%pB: wrong auxtype %#x for storage class %#x"
msgstr ""
-#: coff64-rs6000.c:1573
+#: coff64-rs6000.c:1572
msgid "%pB: relocation (%d) at (0x%"
msgstr ""
-#: coffcode.h:986
+#: coffcode.h:990
#, c-format
msgid "%pB: unable to load COMDAT section name"
msgstr ""
#. Malformed input files can trigger this test.
#. cf PR 21781.
-#: coffcode.h:1021
+#: coffcode.h:1025
#, c-format
msgid "%pB: error: unexpected symbol '%s' in COMDAT section"
msgstr ""
-#: coffcode.h:1033
+#: coffcode.h:1037
#, c-format
msgid "%pB: warning: COMDAT symbol '%s' does not match section name '%s'"
msgstr ""
-#: coffcode.h:1043
+#: coffcode.h:1047
#, c-format
msgid "%pB: warning: no symbol for section '%s' found"
msgstr ""
@@ -430,92 +427,87 @@ msgstr ""
#. Generate a warning message rather using the 'unhandled'
#. variable as this will allow some .sys files generate by
#. other toolchains to be processed. See bugzilla issue 196.
-#: coffcode.h:1274
+#: coffcode.h:1278
#, c-format
msgid "%pB: warning: ignoring section flag %s in section %s"
msgstr ""
-#: coffcode.h:1343
+#: coffcode.h:1347
#, c-format
msgid "%pB (%s): section flag %s (%#lx) ignored"
msgstr ""
-#: coffcode.h:1956
+#: coffcode.h:1960
#, c-format
msgid "%pB: overflow reloc count too small"
msgstr ""
-#: coffcode.h:1965 coffcode.h:2030
+#: coffcode.h:1969 coffcode.h:2034
#, c-format
msgid "%pB: warning: claims to have 0xffff relocs, without overflow"
msgstr ""
-#: coffcode.h:2391
+#: coffcode.h:2401
#, c-format
msgid "unrecognized TI COFF target id '0x%x'"
msgstr ""
-#: coffcode.h:2669
+#: coffcode.h:2679
#, c-format
msgid "%pB: reloc against a non-existent symbol index: %ld"
msgstr ""
-#: coffcode.h:2967
+#: coffcode.h:2983
#, c-format
msgid "%pB: page size is too large (0x%x)"
msgstr ""
-#: coffcode.h:3127
+#: coffcode.h:3143
#, c-format
msgid "%pB: too many sections (%d)"
msgstr ""
-#: coffcode.h:3554
+#: coffcode.h:3570
#, c-format
msgid "%pB: section %pA: string table overflow at offset %ld"
msgstr ""
-#: coffcode.h:3661
+#: coffcode.h:3677
#, c-format
msgid "%pB:%s section %s: alignment 2**%u not representable"
msgstr ""
-#: coffcode.h:4364
-#, c-format
-msgid "%pB: warning: line number count (%#lx) exceeds section size (%#lx)"
-msgstr ""
-
-#: coffcode.h:4384
+#: coffcode.h:4393
#, c-format
msgid "%pB: warning: line number table read failed"
msgstr ""
-#: coffcode.h:4418 coffcode.h:4432
+#: coffcode.h:4439 coffcode.h:4453
#, c-format
msgid "%pB: warning: illegal symbol index 0x%lx in line number entry %d"
msgstr ""
-#: coffcode.h:4446
+#: coffcode.h:4467
#, c-format
msgid "%pB: warning: illegal symbol in line number entry %d"
msgstr ""
-#: coffcode.h:4459
+#: coffcode.h:4480
#, c-format
msgid "%pB: warning: duplicate line number information for `%s'"
msgstr ""
-#: coffcode.h:4880
+#: coffcode.h:4901
#, c-format
msgid "%pB: unrecognized storage class %d for %s symbol `%s'"
msgstr ""
-#: coffcode.h:5020
+#: coffcode.h:5041
#, c-format
msgid "warning: %pB: local symbol `%s' has no section"
msgstr ""
-#: coffcode.h:5170
+#: coffcode.h:5197
#, c-format
msgid "%pB: illegal relocation type %d at address %#<PRIx64>"
msgstr ""
@@ -530,31 +522,31 @@ msgstr ""
msgid "%pB: unable to initialize decompress status for section %s"
msgstr ""
-#: coffgen.c:1715
+#: coffgen.c:1760
#, c-format
msgid "%pB: bad string table size %<PRIu64>"
msgstr ""
-#: coffgen.c:1887 coffgen.c:1947 coffgen.c:1965 cofflink.c:2024 elf.c:1936
-#: xcofflink.c:4568
+#: coffgen.c:1932 coffgen.c:1976 coffgen.c:2025 coffgen.c:2043 cofflink.c:2024
+#: elf.c:1939 xcofflink.c:4658
msgid "<corrupt>"
msgstr ""
-#: coffgen.c:2098
+#: coffgen.c:2176
#, c-format
msgid "<corrupt info> %s"
msgstr ""
-#: coffgen.c:2696 elflink.c:14877 linker.c:2965
+#: coffgen.c:2781 elflink.c:15042 linker.c:2967
msgid "%F%P: already_linked_table: %E\n"
msgstr ""
-#: coffgen.c:3038 elflink.c:13852
+#: coffgen.c:3123 elflink.c:14017
#, c-format
msgid "removing unused section '%pA' in file '%pB'"
msgstr ""
-#: coffgen.c:3115 elflink.c:14082
+#: coffgen.c:3200 elflink.c:14247
msgid "warning: gc-sections option ignored"
msgstr ""
@@ -563,7 +555,7 @@ msgstr ""
msgid "warning: symbol `%s' is both section and non-section"
msgstr ""
-#: cofflink.c:471 elf64-ia64-vms.c:5202 elflink.c:5235
+#: cofflink.c:471 elf64-ia64-vms.c:5196 elflink.c:5353
#, c-format
msgid "warning: type of symbol `%s' changed from %d to %d in %pB"
msgstr ""
@@ -573,7 +565,7 @@ msgstr ""
msgid "%pB: relocs in section `%pA', but it has no contents"
msgstr ""
-#: cofflink.c:2415 elflink.c:11373
+#: cofflink.c:2415 elflink.c:11470
#, c-format
msgid ""
"%X`%s' referenced in section `%pA' of %pB: defined in discarded section `"
@@ -600,30 +592,30 @@ msgstr ""
msgid "%pB: bad reloc address %#<PRIx64> in section `%pA'"
msgstr ""
-#: coffswap.h:806
+#: coffswap.h:833
#, c-format
msgid "%pB: %s: reloc overflow: 0x%lx > 0xffff"
msgstr ""
-#: compress.c:270
+#: compress.c:275
#, c-format
msgid ""
"error: %pB(%pA) section size (%#<PRIx64> bytes) is larger than file size "
"(%#<PRIx64> bytes)"
msgstr ""
-#: compress.c:281
+#: compress.c:286
#, c-format
msgid "error: %pB(%pA) is too large (%#<PRIx64> bytes)"
msgstr ""
-#: cpu-arm.c:307 cpu-arm.c:319
+#: cpu-arm.c:310 cpu-arm.c:322
#, c-format
msgid ""
"error: %pB is compiled for the EP9312, whereas %pB is compiled for XScale"
msgstr ""
-#: cpu-arm.c:455
+#: cpu-arm.c:458
#, c-format
msgid "warning: unable to update contents of %s section in %pB"
msgstr ""
@@ -645,114 +637,114 @@ msgid ""
"DWARF error: offset (%<PRIu64>) greater than or equal to %s size (%<PRIu64>)"
msgstr ""
-#: dwarf2.c:1200
+#: dwarf2.c:1245
msgid "DWARF error: info pointer extends beyond end of attributes"
msgstr ""
-#: dwarf2.c:1348
+#: dwarf2.c:1394
#, c-format
msgid "DWARF error: invalid or unhandled FORM value: %#x"
msgstr ""
-#: dwarf2.c:1663
+#: dwarf2.c:1709
msgid "DWARF error: mangled line number section (bad file number)"
msgstr ""
-#: dwarf2.c:2006
+#: dwarf2.c:2052
msgid "DWARF error: zero format count"
msgstr ""
-#: dwarf2.c:2016
+#: dwarf2.c:2062
#, c-format
msgid "DWARF error: data count (%<PRIx64>) larger than buffer size"
msgstr ""
-#: dwarf2.c:2055
+#: dwarf2.c:2101
#, c-format
msgid "DWARF error: unknown format content type %<PRIu64>"
msgstr ""
-#: dwarf2.c:2125
+#: dwarf2.c:2171
#, c-format
msgid "DWARF error: line info section is too small (%<PRId64>)"
msgstr ""
-#: dwarf2.c:2152
+#: dwarf2.c:2198
#, c-format
msgid ""
"DWARF error: line info data is bigger (%#<PRIx64>) than the space remaining "
"in the section (%#lx)"
msgstr ""
-#: dwarf2.c:2165
+#: dwarf2.c:2211
#, c-format
msgid "DWARF error: unhandled .debug_line version %d"
msgstr ""
-#: dwarf2.c:2174
+#: dwarf2.c:2220
msgid "DWARF error: ran out of room reading prologue"
msgstr ""
-#: dwarf2.c:2190
+#: dwarf2.c:2236
#, c-format
msgid "DWARF error: line info unsupported segment selector size %u"
msgstr ""
-#: dwarf2.c:2212
+#: dwarf2.c:2258
msgid "DWARF error: invalid maximum operations per instruction"
msgstr ""
-#: dwarf2.c:2224
+#: dwarf2.c:2270
msgid "DWARF error: ran out of room reading opcodes"
msgstr ""
-#: dwarf2.c:2392
+#: dwarf2.c:2438
msgid "DWARF error: mangled line number section"
msgstr ""
-#: dwarf2.c:2880
+#: dwarf2.c:2926
msgid "DWARF error: abstract instance recursion detected"
msgstr ""
-#: dwarf2.c:2914 dwarf2.c:3008
+#: dwarf2.c:2960 dwarf2.c:3054
msgid "DWARF error: invalid abstract instance DIE ref"
msgstr ""
-#: dwarf2.c:2930
+#: dwarf2.c:2976
#, c-format
msgid "DWARF error: unable to read alt ref %<PRIu64>"
msgstr ""
-#: dwarf2.c:2986
+#: dwarf2.c:3032
#, c-format
msgid "DWARF error: unable to locate abstract instance DIE ref %<PRIu64>"
msgstr ""
-#: dwarf2.c:3023 dwarf2.c:3302 dwarf2.c:3747
+#: dwarf2.c:3069 dwarf2.c:3351 dwarf2.c:3808
#, c-format
msgid "DWARF error: could not find abbrev number %u"
msgstr ""
-#: dwarf2.c:3535
+#: dwarf2.c:3594
#, c-format
msgid "DWARF error: could not find variable specification at offset 0x%lx"
msgstr ""
-#: dwarf2.c:3674
+#: dwarf2.c:3735
#, c-format
msgid ""
"DWARF error: found dwarf version '%u', this reader only handles version 2, "
"3, 4 and 5 information"
msgstr ""
-#: dwarf2.c:3711
+#: dwarf2.c:3772
#, c-format
msgid ""
"DWARF error: found address size '%u', this reader can not handle sizes "
"greater than '%u'"
msgstr ""
-#: dwarf2.c:3814
+#: dwarf2.c:3885
msgid ""
"DWARF error: DW_AT_comp_dir attribute encountered with a non-string form"
msgstr ""
@@ -855,51 +847,51 @@ msgstr ""
msgid "error in %pB(%pA); no .eh_frame_hdr table will be created"
msgstr ""
-#: elf-eh-frame.c:1539
+#: elf-eh-frame.c:1541
#, c-format
msgid "FDE encoding in %pB(%pA) prevents .eh_frame_hdr table being created"
msgstr ""
-#: elf-eh-frame.c:1546
+#: elf-eh-frame.c:1548
msgid ""
"further warnings about FDE encoding preventing .eh_frame_hdr generation "
"dropped"
msgstr ""
-#: elf-eh-frame.c:1866
+#: elf-eh-frame.c:1868
#, c-format
msgid "%pB: %pA not in order"
msgstr ""
-#: elf-eh-frame.c:1880
+#: elf-eh-frame.c:1882
#, c-format
msgid "%pB: %pA invalid input section size"
msgstr ""
-#: elf-eh-frame.c:1888
+#: elf-eh-frame.c:1890
#, c-format
msgid "%pB: %pA points past end of text section"
msgstr ""
-#: elf-eh-frame.c:2141
+#: elf-eh-frame.c:2143
msgid "DW_EH_PE_datarel unspecified for this architecture"
msgstr ""
-#: elf-eh-frame.c:2312
+#: elf-eh-frame.c:2314
#, c-format
msgid "invalid output section for .eh_frame_entry: %pA"
msgstr ""
-#: elf-eh-frame.c:2335
+#: elf-eh-frame.c:2337
#, c-format
msgid "invalid contents in %pA section"
msgstr ""
-#: elf-eh-frame.c:2491
+#: elf-eh-frame.c:2493
msgid ".eh_frame_hdr entry overflow"
msgstr ""
-#: elf-eh-frame.c:2493
+#: elf-eh-frame.c:2495
msgid ".eh_frame_hdr refers to overlapping FDEs"
msgstr ""
@@ -912,45 +904,45 @@ msgid ""
msgstr ""
#: elf-m10200.c:434 elf-m10300.c:2146 elf32-avr.c:1508 elf32-bfin.c:3137
-#: elf32-cr16.c:1432 elf32-cris.c:2034 elf32-crx.c:913 elf32-d10v.c:510
+#: elf32-cr16.c:1429 elf32-cris.c:2034 elf32-crx.c:913 elf32-d10v.c:510
#: elf32-epiphany.c:562 elf32-fr30.c:594 elf32-frv.c:4049 elf32-ft32.c:493
#: elf32-h8300.c:523 elf32-ip2k.c:1477 elf32-iq2000.c:691 elf32-lm32.c:1070
#: elf32-m32c.c:624 elf32-m32r.c:2837 elf32-m68hc1x.c:1271 elf32-mep.c:522
#: elf32-metag.c:1984 elf32-microblaze.c:1623 elf32-moxie.c:288 elf32-mt.c:402
-#: elf32-nds32.c:6039 elf32-or1k.c:1873 elf32-score.c:2743 elf32-score7.c:2552
+#: elf32-nds32.c:6039 elf32-or1k.c:1873 elf32-score.c:2734 elf32-score7.c:2545
#: elf32-spu.c:5084 elf32-tilepro.c:3372 elf32-v850.c:2294 elf32-visium.c:680
#: elf32-xstormy16.c:930 elf64-bpf.c:552 elf64-mmix.c:1541 elfxx-tilegx.c:3742
msgid "internal error: out of range error"
msgstr ""
#: elf-m10200.c:438 elf-m10300.c:2150 elf32-avr.c:1512 elf32-bfin.c:3141
-#: elf32-cr16.c:1436 elf32-cris.c:2038 elf32-crx.c:917 elf32-d10v.c:514
+#: elf32-cr16.c:1433 elf32-cris.c:2038 elf32-crx.c:917 elf32-d10v.c:514
#: elf32-fr30.c:598 elf32-frv.c:4053 elf32-ft32.c:497 elf32-h8300.c:527
#: elf32-iq2000.c:695 elf32-lm32.c:1074 elf32-m32c.c:628 elf32-m32r.c:2841
#: elf32-m68hc1x.c:1275 elf32-mep.c:526 elf32-metag.c:1988
#: elf32-microblaze.c:1627 elf32-moxie.c:292 elf32-msp430.c:1510
-#: elf32-nds32.c:6043 elf32-or1k.c:1877 elf32-score.c:2747 elf32-score7.c:2556
+#: elf32-nds32.c:6043 elf32-or1k.c:1877 elf32-score.c:2738 elf32-score7.c:2549
#: elf32-spu.c:5088 elf32-tilepro.c:3376 elf32-v850.c:2298 elf32-visium.c:684
#: elf32-xstormy16.c:934 elf64-mmix.c:1545 elfxx-mips.c:10558
#: elfxx-tilegx.c:3746
msgid "internal error: unsupported relocation error"
msgstr ""
-#: elf-m10200.c:442 elf32-cr16.c:1440 elf32-crx.c:921 elf32-d10v.c:518
+#: elf-m10200.c:442 elf32-cr16.c:1437 elf32-crx.c:921 elf32-d10v.c:518
#: elf32-h8300.c:531 elf32-lm32.c:1078 elf32-m32r.c:2845 elf32-m68hc1x.c:1279
-#: elf32-microblaze.c:1631 elf32-nds32.c:6047 elf32-score.c:2751
-#: elf32-score7.c:2560 elf32-spu.c:5092
+#: elf32-microblaze.c:1631 elf32-nds32.c:6047 elf32-score.c:2742
+#: elf32-score7.c:2553 elf32-spu.c:5092
msgid "internal error: dangerous error"
msgstr ""
#: elf-m10200.c:446 elf-m10300.c:2167 elf32-avr.c:1520 elf32-bfin.c:3149
-#: elf32-cr16.c:1444 elf32-cris.c:2046 elf32-crx.c:925 elf32-d10v.c:522
+#: elf32-cr16.c:1441 elf32-cris.c:2046 elf32-crx.c:925 elf32-d10v.c:522
#: elf32-epiphany.c:577 elf32-fr30.c:606 elf32-frv.c:4061 elf32-ft32.c:505
#: elf32-h8300.c:535 elf32-ip2k.c:1492 elf32-iq2000.c:703 elf32-lm32.c:1082
#: elf32-m32c.c:636 elf32-m32r.c:2849 elf32-m68hc1x.c:1283 elf32-mep.c:534
#: elf32-metag.c:1996 elf32-microblaze.c:1635 elf32-moxie.c:300
#: elf32-msp430.c:1518 elf32-mt.c:410 elf32-nds32.c:6051 elf32-or1k.c:1885
-#: elf32-score.c:2760 elf32-score7.c:2564 elf32-spu.c:5096 elf32-tilepro.c:3384
+#: elf32-score.c:2751 elf32-score7.c:2557 elf32-spu.c:5096 elf32-tilepro.c:3384
#: elf32-v850.c:2318 elf32-visium.c:692 elf32-xstormy16.c:942 elf64-bpf.c:565
#: elf64-mmix.c:1553 elfxx-tilegx.c:3754
msgid "internal error: unknown error"
@@ -966,9 +958,9 @@ msgstr ""
msgid "%pB: %s' accessed both as normal and thread local symbol"
msgstr ""
-#: elf-m10300.c:2093 elf32-arm.c:13376 elf32-i386.c:3430 elf32-m32r.c:2331
+#: elf-m10300.c:2093 elf32-arm.c:13377 elf32-i386.c:3426 elf32-m32r.c:2331
#: elf32-m68k.c:3929 elf32-s390.c:3080 elf32-sh.c:3671 elf32-tilepro.c:3275
-#: elf32-xtensa.c:3024 elf64-s390.c:3029 elf64-x86-64.c:4090 elfxx-sparc.c:2917
+#: elf32-xtensa.c:3034 elf64-s390.c:3029 elf64-x86-64.c:4084 elfxx-sparc.c:2917
#: elfxx-sparc.c:3814 elfxx-tilegx.c:3665 elfnn-aarch64.c:5504
#: elfnn-aarch64.c:7107
#, c-format
@@ -993,7 +985,7 @@ msgid "internal error: suspicious relocation type used in shared library"
msgstr ""
#: elf-m10300.c:2650 elf32-avr.c:2486 elf32-frv.c:5621 elf64-ia64-vms.c:365
-#: elfxx-sparc.c:2684 reloc.c:8282 reloc16.c:155 elfnn-ia64.c:365
+#: elfxx-sparc.c:2684 reloc.c:8373 reloc16.c:155 elfnn-ia64.c:365
msgid "%P%F: --relax and -r may not be used together\n"
msgstr ""
@@ -1060,11 +1052,11 @@ msgstr ""
msgid "Removed property %W to merge %pB (not found) and %pB (0x%v)\n"
msgstr ""
-#: elf-properties.c:671 elfxx-aarch64.c:758 elfxx-x86.c:2714
+#: elf-properties.c:671 elfxx-aarch64.c:758 elfxx-x86.c:3716
msgid "%F%P: failed to create GNU property section\n"
msgstr ""
-#: elf-properties.c:675 elfxx-aarch64.c:762 elfxx-x86.c:2719
+#: elf-properties.c:675 elfxx-aarch64.c:762 elfxx-x86.c:3721
#, c-format
msgid "%F%pA: failed to align section\n"
msgstr ""
@@ -1089,7 +1081,7 @@ msgstr ""
msgid "%pB: invalid string offset %u >= %<PRIu64> for section `%s'"
msgstr ""
-#: elf.c:514 elfnn-aarch64.c:8107
+#: elf.c:514 elfnn-aarch64.c:8107 elfnn-loongarch.c:3045
#, c-format
msgid "%pB symbol number %lu references nonexistent SHT_SYMTAB_SHNDX section"
msgstr ""
@@ -1169,119 +1161,123 @@ msgid ""
"Dynamic Section:\n"
msgstr ""
-#: elf.c:1851
+#: elf.c:1854
#, c-format
msgid ""
"\n"
"Version definitions:\n"
msgstr ""
-#: elf.c:1876
+#: elf.c:1879
#, c-format
msgid ""
"\n"
"Version References:\n"
msgstr ""
-#: elf.c:1881
+#: elf.c:1884
#, c-format
msgid " required from %s:\n"
msgstr ""
-#: elf.c:2072
+#: elf.c:2075
#, c-format
msgid "%pB: warning: loop in section dependencies detected"
msgstr ""
-#: elf.c:2179
+#: elf.c:2182
#, c-format
msgid ""
"%pB: warning: multiple symbol tables detected - ignoring the table in "
"section %u"
msgstr ""
-#: elf.c:2263
+#: elf.c:2266
#, c-format
msgid ""
"%pB: warning: multiple dynamic symbol tables detected - ignoring the table "
"in section %u"
msgstr ""
-#: elf.c:2376
+#: elf.c:2385
#, c-format
msgid "%pB: invalid link %u for reloc section %s (index %u)"
msgstr ""
-#: elf.c:2467
+#: elf.c:2442
#, c-format
msgid ""
"%pB: warning: secondary relocation section '%s' for section %pA found - "
"ignoring"
msgstr ""
-#: elf.c:2553 elf.c:2568 elf.c:2579 elf.c:2592
+#: elf.c:2528 elf.c:2543 elf.c:2554 elf.c:2567
#, c-format
msgid "%pB: unknown type [%#x] section `%s'"
msgstr ""
-#: elf.c:3289
+#: elf.c:3265
#, c-format
msgid "%pB: error: alignment power %d of section `%pA' is too big"
msgstr ""
-#: elf.c:3322
+#: elf.c:3298
#, c-format
msgid "warning: section `%pA' type changed to PROGBITS"
msgstr ""
-#: elf.c:3806
+#: elf.c:3783
#, c-format
msgid "%pB: too many sections: %u"
msgstr ""
-#: elf.c:3892
+#: elf.c:3869
#, c-format
msgid ""
"%pB: sh_link of section `%pA' points to discarded section `%pA' of `%pB'"
msgstr ""
-#: elf.c:3910
+#: elf.c:3887
#, c-format
msgid "%pB: sh_link of section `%pA' points to removed section `%pA' of `%pB'"
msgstr ""
-#: elf.c:4472
+#: elf.c:4455
#, c-format
msgid "%pB: GNU_MBIND section `%pA' has invalid sh_info field: %d"
msgstr ""
-#: elf.c:5066
+#: elf.c:4638
+msgid "%F%P: failed to size relative relocations\n"
+msgstr ""
+
+#: elf.c:5062
#, c-format
msgid "%pB: TLS sections are not adjacent:"
msgstr ""
-#: elf.c:5073
+#: elf.c:5069
#, c-format
msgid "\t TLS: %pA"
msgstr ""
-#: elf.c:5077
+#: elf.c:5073
#, c-format
msgid "\tnon-TLS: %pA"
msgstr ""
-#: elf.c:5673
+#: elf.c:5696
#, c-format
msgid ""
"%pB: The first section in the PT_DYNAMIC segment is not the .dynamic section"
msgstr ""
-#: elf.c:5699
+#: elf.c:5722
#, c-format
msgid "%pB: not enough room for program headers, try linking with -N"
msgstr ""
-#: elf.c:5816
+#: elf.c:5839
#, c-format
msgid "%pB: section %pA lma %#<PRIx64> adjusted to %#<PRIx64>"
msgstr ""
@@ -1289,185 +1285,190 @@ msgstr ""
#. The fix for this error is usually to edit the linker script being
#. used and set up the program headers manually. Either that or
#. leave room for the headers at the start of the SECTIONS.
-#: elf.c:5953
+#: elf.c:5976
#, c-format
msgid "%pB: error: PHDR segment not covered by LOAD segment"
msgstr ""
-#: elf.c:5993
+#: elf.c:6016
#, c-format
msgid "%pB: section `%pA' can't be allocated in segment %d"
msgstr ""
-#: elf.c:6130
+#: elf.c:6156
#, c-format
msgid "%pB: warning: allocated section `%s' not in segment"
msgstr ""
-#: elf.c:6291
+#: elf.c:6292
+#, c-format
+msgid "%pB: warning: unable to allocate any sections to PT_GNU_RELRO segment"
+msgstr ""
+
+#: elf.c:6322
#, c-format
msgid ""
"%pB: error: non-load segment %d includes file header and/or program header"
msgstr ""
-#: elf.c:6800
+#: elf.c:6829
#, c-format
msgid "%pB: symbol `%s' required but not present"
msgstr ""
-#: elf.c:7152
+#: elf.c:7186
#, c-format
msgid ""
"%pB: warning: empty loadable segment detected at vaddr=%#<PRIx64>, is this "
"intentional?"
msgstr ""
-#: elf.c:7780
+#: elf.c:7851
#, c-format
msgid "%pB: warning: segment alignment of %#<PRIx64> is too large"
msgstr ""
-#: elf.c:8293
+#: elf.c:8359
#, c-format
msgid ""
"%pB: Unable to handle section index %x in ELF symbol. Using ABS instead."
msgstr ""
-#: elf.c:8323
+#: elf.c:8389
#, c-format
msgid ""
"unable to find equivalent output section for symbol '%s' from section '%s'"
msgstr ""
-#: elf.c:8736
+#: elf.c:8799
#, c-format
msgid "%pB: .gnu.version_r invalid entry"
msgstr ""
-#: elf.c:8869
+#: elf.c:8932
#, c-format
msgid "%pB: .gnu.version_d invalid entry"
msgstr ""
-#: elf.c:9326
+#: elf.c:9389
#, c-format
msgid ""
"%pB:%pA: error: attempting to write into an unallocated compressed section"
msgstr ""
-#: elf.c:9335
+#: elf.c:9398
#, c-format
msgid "%pB:%pA: error: attempting to write over the end of the section"
msgstr ""
-#: elf.c:9346
+#: elf.c:9409
#, c-format
msgid "%pB:%pA: error: attempting to write section into an empty buffer"
msgstr ""
-#: elf.c:10247
+#: elf.c:10317
#, c-format
msgid "%pB: warning: win32pstatus %s of size %lu bytes is too small"
msgstr ""
-#: elf.c:10325
+#: elf.c:10395
#, c-format
msgid ""
"%pB: win32pstatus NOTE_INFO_MODULE of size %lu is too small to contain a "
"name of size %u"
msgstr ""
-#: elf.c:12634
+#: elf.c:12977
msgid "GNU_MBIND section is supported only by GNU and FreeBSD targets"
msgstr ""
-#: elf.c:12637
+#: elf.c:12980
msgid "symbol type STT_GNU_IFUNC is supported only by GNU and FreeBSD targets"
msgstr ""
-#: elf.c:12640
+#: elf.c:12983
msgid ""
"symbol binding STB_GNU_UNIQUE is supported only by GNU and FreeBSD targets"
msgstr ""
-#: elf.c:12643
+#: elf.c:12986
msgid "GNU_RETAIN section is supported only by GNU and FreeBSD targets"
msgstr ""
-#: elf.c:12851 elf64-sparc.c:123 elfcode.h:1504
+#: elf.c:13194 elf64-sparc.c:123 elfcode.h:1505
#, c-format
msgid "%pB(%pA): relocation %d has invalid symbol index %ld"
msgstr ""
-#: elf.c:12926
+#: elf.c:13269
#, c-format
msgid ""
"%pB(%pA): link section cannot be set because the output file does not have a "
"symbol table"
msgstr ""
-#: elf.c:12938
+#: elf.c:13281
#, c-format
msgid "%pB(%pA): info section index is invalid"
msgstr ""
-#: elf.c:12952
+#: elf.c:13295
#, c-format
msgid ""
"%pB(%pA): info section index cannot be set because the section is not in the "
"output"
msgstr ""
-#: elf.c:13027
+#: elf.c:13370
#, c-format
msgid "%pB(%pA): error: secondary reloc section processed twice"
msgstr ""
-#: elf.c:13039
+#: elf.c:13382
#, c-format
msgid "%pB(%pA): error: secondary reloc section has zero sized entries"
msgstr ""
-#: elf.c:13050
+#: elf.c:13393
#, c-format
msgid "%pB(%pA): error: secondary reloc section has non-standard sized entries"
msgstr ""
-#: elf.c:13062
+#: elf.c:13405
#, c-format
msgid "%pB(%pA): error: secondary reloc section is empty!"
msgstr ""
-#: elf.c:13085
+#: elf.c:13428
#, c-format
msgid "%pB(%pA): error: internal relocs missing for secondary reloc section"
msgstr ""
-#: elf.c:13104
+#: elf.c:13447
#, c-format
msgid "%pB(%pA): error: reloc table entry %u is empty"
msgstr ""
-#: elf.c:13129
+#: elf.c:13472
#, c-format
msgid "%pB(%pA): error: secondary reloc %u references a missing symbol"
msgstr ""
-#: elf.c:13146
+#: elf.c:13489
#, c-format
msgid "%pB(%pA): error: secondary reloc %u references a deleted symbol"
msgstr ""
-#: elf.c:13159
+#: elf.c:13502
#, c-format
msgid "%pB(%pA): error: secondary reloc %u is of an unknown type"
msgstr ""
#. Ignore init flag - it may not be set, despite the flags field
#. containing valid data.
-#: elf32-arc.c:455 elf32-arm.c:15047 elf32-frv.c:6612 elf32-iq2000.c:868
+#: elf32-arc.c:455 elf32-arm.c:15095 elf32-frv.c:6612 elf32-iq2000.c:868
#: elf32-m32c.c:914 elf32-mt.c:560 elf32-rl78.c:1275 elf32-rx.c:3217
-#: elf32-visium.c:844 elf64-ppc.c:5349 elfnn-aarch64.c:7337
+#: elf32-visium.c:844 elf64-ppc.c:5507 elfnn-aarch64.c:7337
#, c-format
msgid "private flags = 0x%lx:"
msgstr ""
@@ -1514,7 +1515,7 @@ msgid ""
msgstr ""
#: elf32-arc.c:938 elf32-iq2000.c:844 elf32-m32c.c:889 elf32-m68hc1x.c:1390
-#: elf32-ppc.c:3868 elf64-sparc.c:722 elfxx-mips.c:15568
+#: elf32-ppc.c:3881 elf64-sparc.c:722 elfxx-mips.c:15584
#, c-format
msgid "%pB: uses different e_flags (%#x) fields than previous modules (%#x)"
msgstr ""
@@ -1571,8 +1572,8 @@ msgstr ""
msgid "%pB(%pA): internal error: unknown error"
msgstr ""
-#: elf32-arc.c:2023 elf32-arc.c:2091 elf32-arm.c:15502 elf32-metag.c:2251
-#: elf32-nds32.c:5489 elfnn-aarch64.c:7744 elfnn-riscv.c:619
+#: elf32-arc.c:2023 elf32-arc.c:2091 elf32-arm.c:15550 elf32-metag.c:2251
+#: elf32-nds32.c:5489 elfnn-aarch64.c:7744 elfnn-riscv.c:617
#, c-format
msgid ""
"%pB: relocation %s against `%s' can not be used when making a shared object; "
@@ -1589,7 +1590,7 @@ msgstr ""
msgid "warning: %pB: unknown ARC object attribute %d"
msgstr ""
-#: elf32-arm.c:4333 elf32-arm.c:4367 elf32-arm.c:4386 elf32-arm.c:4438
+#: elf32-arm.c:4334 elf32-arm.c:4368 elf32-arm.c:4387 elf32-arm.c:4439
#, c-format
msgid ""
"%pB(%pA): warning: long branch veneers used in section with SHF_ARM_PURECODE "
@@ -1597,156 +1598,156 @@ msgid ""
"movw instruction"
msgstr ""
-#: elf32-arm.c:4398 elf32-arm.c:4452 elf32-arm.c:9141 elf32-arm.c:9231
+#: elf32-arm.c:4399 elf32-arm.c:4453 elf32-arm.c:9142 elf32-arm.c:9232
#, c-format
msgid ""
"%pB(%s): warning: interworking not enabled; first occurrence: %pB: %s call "
"to %s"
msgstr ""
-#: elf32-arm.c:4578
+#: elf32-arm.c:4579
#, c-format
msgid ""
"ERROR: CMSE stub (%s section) too far (%#<PRIx64>) from destination "
"(%#<PRIx64>)"
msgstr ""
-#: elf32-arm.c:4747
+#: elf32-arm.c:4748
#, c-format
msgid "no address assigned to the veneers output section %s"
msgstr ""
-#: elf32-arm.c:4822 elf32-arm.c:6968 elf32-csky.c:3400 elf32-hppa.c:582
-#: elf32-m68hc1x.c:164 elf32-metag.c:1180 elf32-nios2.c:2201 elf64-ppc.c:3829
-#: elf64-ppc.c:13640 elfnn-aarch64.c:3187
+#: elf32-arm.c:4823 elf32-arm.c:6969 elf32-csky.c:3400 elf32-hppa.c:582
+#: elf32-m68hc1x.c:164 elf32-metag.c:1180 elf32-nios2.c:2201 elf64-ppc.c:3881
+#: elf64-ppc.c:14018 elfnn-aarch64.c:3187
#, c-format
msgid "%pB: cannot create stub entry %s"
msgstr ""
-#: elf32-arm.c:5043 elf32-csky.c:3742 elf32-hppa.c:732 elf32-m68hc11.c:422
-#: elf32-m68hc12.c:542 elf32-metag.c:3345 elf32-nios2.c:2494 elf64-ppc.c:11475
+#: elf32-arm.c:5044 elf32-csky.c:3742 elf32-hppa.c:732 elf32-m68hc11.c:422
+#: elf32-m68hc12.c:542 elf32-metag.c:3345 elf32-nios2.c:2494 elf64-ppc.c:11656
#: elfnn-aarch64.c:3256
msgid ""
"%F%P: Could not assign '%pA' to an output section. Retry without --enable-"
"non-contiguous-regions.\n"
msgstr ""
-#: elf32-arm.c:6011
+#: elf32-arm.c:6012
#, c-format
msgid "%pB: special symbol `%s' only allowed for ARMv8-M architecture or later"
msgstr ""
-#: elf32-arm.c:6020
+#: elf32-arm.c:6021
#, c-format
msgid ""
"%pB: invalid special symbol `%s'; it must be a global or weak function symbol"
msgstr ""
-#: elf32-arm.c:6059
+#: elf32-arm.c:6060
#, c-format
msgid ""
"%pB: invalid standard symbol `%s'; it must be a global or weak function "
"symbol"
msgstr ""
-#: elf32-arm.c:6065
+#: elf32-arm.c:6066
#, c-format
msgid "%pB: absent standard symbol `%s'"
msgstr ""
-#: elf32-arm.c:6077
+#: elf32-arm.c:6078
#, c-format
msgid "%pB: `%s' and its special symbol are in different sections"
msgstr ""
-#: elf32-arm.c:6089
+#: elf32-arm.c:6090
#, c-format
msgid "%pB: entry function `%s' not output"
msgstr ""
-#: elf32-arm.c:6096
+#: elf32-arm.c:6097
#, c-format
msgid "%pB: entry function `%s' is empty"
msgstr ""
-#: elf32-arm.c:6225
+#: elf32-arm.c:6226
#, c-format
msgid "%pB: --in-implib only supported for Secure Gateway import libraries"
msgstr ""
-#: elf32-arm.c:6274
+#: elf32-arm.c:6275
#, c-format
msgid ""
"%pB: invalid import library entry: `%s'; symbol should be absolute, global "
"and refer to Thumb functions"
msgstr ""
-#: elf32-arm.c:6296
+#: elf32-arm.c:6297
#, c-format
msgid "entry function `%s' disappeared from secure code"
msgstr ""
-#: elf32-arm.c:6320
+#: elf32-arm.c:6321
#, c-format
msgid "`%s' refers to a non entry function"
msgstr ""
-#: elf32-arm.c:6335
+#: elf32-arm.c:6336
#, c-format
msgid "%pB: visibility of symbol `%s' has changed"
msgstr ""
-#: elf32-arm.c:6344
+#: elf32-arm.c:6345
#, c-format
msgid "%pB: incorrect size for symbol `%s'"
msgstr ""
-#: elf32-arm.c:6363
+#: elf32-arm.c:6364
#, c-format
msgid "offset of veneer for entry function `%s' not a multiple of its size"
msgstr ""
-#: elf32-arm.c:6383
+#: elf32-arm.c:6384
msgid ""
"new entry function(s) introduced but no output import library specified:"
msgstr ""
-#: elf32-arm.c:6391
+#: elf32-arm.c:6392
#, c-format
msgid "start address of `%s' is different from previous link"
msgstr ""
-#: elf32-arm.c:7101 elf32-arm.c:7136
+#: elf32-arm.c:7102 elf32-arm.c:7137
#, c-format
msgid "unable to find %s glue '%s' for '%s'"
msgstr ""
-#: elf32-arm.c:7847
+#: elf32-arm.c:7848
#, c-format
msgid "%pB: BE8 images only valid in big-endian mode"
msgstr ""
#. Give a warning, but do as the user requests anyway.
-#: elf32-arm.c:8074
+#: elf32-arm.c:8075
#, c-format
msgid ""
"%pB: warning: selected VFP11 erratum workaround is not necessary for target "
"architecture"
msgstr ""
-#: elf32-arm.c:8101
+#: elf32-arm.c:8102
#, c-format
msgid ""
"%pB: warning: selected STM32L4XX erratum workaround is not necessary for "
"target architecture"
msgstr ""
-#: elf32-arm.c:8637 elf32-arm.c:8657 elf32-arm.c:8724 elf32-arm.c:8743
+#: elf32-arm.c:8638 elf32-arm.c:8658 elf32-arm.c:8725 elf32-arm.c:8744
#, c-format
msgid "%pB: unable to find %s veneer `%s'"
msgstr ""
-#: elf32-arm.c:8950
+#: elf32-arm.c:8951
#, c-format
msgid ""
"%pB(%pA+%#x): error: multiple load detected in non-last IT block "
@@ -1754,471 +1755,471 @@ msgid ""
"it to generate only one instruction per IT block"
msgstr ""
-#: elf32-arm.c:9048
+#: elf32-arm.c:9049
#, c-format
msgid "invalid TARGET2 relocation type '%s'"
msgstr ""
#. FIXME: We ought to be able to generate thumb-1 PLT
#. instructions...
-#: elf32-arm.c:9818
+#: elf32-arm.c:9819
#, c-format
msgid "%pB: warning: thumb-1 mode PLT generation not currently supported"
msgstr ""
-#: elf32-arm.c:10127 elf32-arm.c:10169
+#: elf32-arm.c:10128 elf32-arm.c:10170
#, c-format
msgid "%pB(%pA+%#<PRIx64>): unexpected %s instruction '%#lx' in TLS trampoline"
msgstr ""
-#: elf32-arm.c:10519
+#: elf32-arm.c:10520
msgid "shared object"
msgstr ""
-#: elf32-arm.c:10522
+#: elf32-arm.c:10523
msgid "PIE executable"
msgstr ""
-#: elf32-arm.c:10525
+#: elf32-arm.c:10526
#, c-format
msgid ""
"%pB: relocation %s against external or undefined symbol `%s' can not be used "
"when making a %s; recompile with -fPIC"
msgstr ""
-#: elf32-arm.c:10627 elf32-arm.c:11044
+#: elf32-arm.c:10628 elf32-arm.c:11045
#, c-format
msgid "%pB: warning: %s BLX instruction targets %s function '%s'"
msgstr ""
-#: elf32-arm.c:11678
+#: elf32-arm.c:11679
#, c-format
msgid ""
"%pB: expected symbol index in range 0..%lu but found local symbol with index "
"%lu"
msgstr ""
-#: elf32-arm.c:11953 elf32-arm.c:11979
+#: elf32-arm.c:11954 elf32-arm.c:11980
#, c-format
msgid ""
"%pB(%pA+%#<PRIx64>): unexpected %s instruction '%#lx' referenced by "
"TLS_GOTDESC"
msgstr ""
-#: elf32-arm.c:12025 elf32-csky.c:4970 elf32-m68k.c:3733 elf32-metag.c:1913
+#: elf32-arm.c:12026 elf32-csky.c:4970 elf32-m68k.c:3733 elf32-metag.c:1913
#: elf32-nios2.c:4382
#, c-format
msgid "%pB(%pA+%#<PRIx64>): %s relocation not permitted in shared object"
msgstr ""
-#: elf32-arm.c:12239
+#: elf32-arm.c:12240
#, c-format
msgid ""
"%pB(%pA+%#<PRIx64>): only ADD or SUB instructions are allowed for ALU group "
"relocations"
msgstr ""
-#: elf32-arm.c:12280 elf32-arm.c:12372 elf32-arm.c:12460 elf32-arm.c:12550
+#: elf32-arm.c:12281 elf32-arm.c:12373 elf32-arm.c:12461 elf32-arm.c:12551
#, c-format
msgid ""
"%pB(%pA+%#<PRIx64>): overflow whilst splitting %#<PRIx64> for group "
"relocation %s"
msgstr ""
-#: elf32-arm.c:12608 elf32-arm.c:12767
+#: elf32-arm.c:12609 elf32-arm.c:12768
msgid "local symbol index too big"
msgstr ""
-#: elf32-arm.c:12618 elf32-arm.c:12652
+#: elf32-arm.c:12619 elf32-arm.c:12653
msgid "no dynamic index information available"
msgstr ""
-#: elf32-arm.c:12660
+#: elf32-arm.c:12661
msgid "invalid dynamic index"
msgstr ""
-#: elf32-arm.c:12777
+#: elf32-arm.c:12778
msgid "dynamic index information not available"
msgstr ""
-#: elf32-arm.c:13208 elf32-sh.c:3565
+#: elf32-arm.c:13209 elf32-sh.c:3565
#, c-format
msgid "%pB(%pA+%#<PRIx64>): %s relocation against SEC_MERGE section"
msgstr ""
-#: elf32-arm.c:13321 elf32-m68k.c:3966 elf32-xtensa.c:2762 elfnn-aarch64.c:6834
+#: elf32-arm.c:13322 elf32-m68k.c:3966 elf32-xtensa.c:2772 elfnn-aarch64.c:6834
#, c-format
msgid "%pB(%pA+%#<PRIx64>): %s used with TLS symbol %s"
msgstr ""
-#: elf32-arm.c:13323 elf32-m68k.c:3968 elf32-xtensa.c:2764 elfnn-aarch64.c:6836
+#: elf32-arm.c:13324 elf32-m68k.c:3968 elf32-xtensa.c:2774 elfnn-aarch64.c:6836
#, c-format
msgid "%pB(%pA+%#<PRIx64>): %s used with non-TLS symbol %s"
msgstr ""
-#: elf32-arm.c:13406 elf32-tic6x.c:2649 elfnn-aarch64.c:7171
+#: elf32-arm.c:13407 elf32-tic6x.c:2649 elfnn-aarch64.c:7171
msgid "out of range"
msgstr ""
-#: elf32-arm.c:13410 elf32-nios2.c:4516 elf32-pru.c:936 elf32-tic6x.c:2653
+#: elf32-arm.c:13411 elf32-nios2.c:4516 elf32-pru.c:936 elf32-tic6x.c:2653
#: elfnn-aarch64.c:7175
msgid "unsupported relocation"
msgstr ""
-#: elf32-arm.c:13418 elf32-nios2.c:4526 elf32-pru.c:946 elf32-tic6x.c:2661
+#: elf32-arm.c:13419 elf32-nios2.c:4526 elf32-pru.c:946 elf32-tic6x.c:2661
#: elfnn-aarch64.c:7183
msgid "unknown error"
msgstr ""
-#: elf32-arm.c:13898
+#: elf32-arm.c:13901
#, c-format
msgid ""
"warning: not setting interworking flag of %pB since it has already been "
"specified as non-interworking"
msgstr ""
-#: elf32-arm.c:13902
+#: elf32-arm.c:13905
#, c-format
msgid "warning: clearing the interworking flag of %pB due to outside request"
msgstr ""
-#: elf32-arm.c:13947
+#: elf32-arm.c:13950
#, c-format
msgid ""
"warning: clearing the interworking flag of %pB because non-interworking code "
"in %pB has been linked with it"
msgstr ""
-#: elf32-arm.c:14034
+#: elf32-arm.c:14037
#, c-format
msgid "%pB: unknown mandatory EABI object attribute %d"
msgstr ""
-#: elf32-arm.c:14042
+#: elf32-arm.c:14045
#, c-format
msgid "warning: %pB: unknown EABI object attribute %d"
msgstr ""
-#: elf32-arm.c:14342
+#: elf32-arm.c:14380
#, c-format
msgid "error: %pB: unknown CPU architecture"
msgstr ""
-#: elf32-arm.c:14380 elf32-nios2.c:2950
+#: elf32-arm.c:14418 elf32-nios2.c:2950
#, c-format
msgid "error: %pB: conflicting CPU architectures %d/%d"
msgstr ""
-#: elf32-arm.c:14477
+#: elf32-arm.c:14515
#, c-format
msgid ""
"Error: %pB has both the current and legacy Tag_MPextension_use attributes"
msgstr ""
-#: elf32-arm.c:14506
+#: elf32-arm.c:14544
#, c-format
msgid "error: %pB uses VFP register arguments, %pB does not"
msgstr ""
-#: elf32-arm.c:14665
+#: elf32-arm.c:14713
#, c-format
msgid "error: %pB: unable to merge virtualization attributes with %pB"
msgstr ""
-#: elf32-arm.c:14691
+#: elf32-arm.c:14739
#, c-format
msgid "error: %pB: conflicting architecture profiles %c/%c"
msgstr ""
-#: elf32-arm.c:14830
+#: elf32-arm.c:14878
#, c-format
msgid "warning: %pB: conflicting platform configuration"
msgstr ""
-#: elf32-arm.c:14839
+#: elf32-arm.c:14887
#, c-format
msgid "error: %pB: conflicting use of R9"
msgstr ""
-#: elf32-arm.c:14851
+#: elf32-arm.c:14899
#, c-format
msgid "error: %pB: SB relative addressing conflicts with use of R9"
msgstr ""
-#: elf32-arm.c:14864
+#: elf32-arm.c:14912
#, c-format
msgid ""
"warning: %pB uses %u-byte wchar_t yet the output is to use %u-byte wchar_t; "
"use of wchar_t values across objects may fail"
msgstr ""
-#: elf32-arm.c:14895
+#: elf32-arm.c:14943
#, c-format
msgid ""
"warning: %pB uses %s enums yet the output is to use %s enums; use of enum "
"values across objects may fail"
msgstr ""
-#: elf32-arm.c:14907
+#: elf32-arm.c:14955
#, c-format
msgid "error: %pB uses iWMMXt register arguments, %pB does not"
msgstr ""
-#: elf32-arm.c:14924
+#: elf32-arm.c:14972
#, c-format
msgid "error: fp16 format mismatch between %pB and %pB"
msgstr ""
-#: elf32-arm.c:14960
+#: elf32-arm.c:15008
#, c-format
msgid "%pB has both the current and legacy Tag_MPextension_use attributes"
msgstr ""
-#: elf32-arm.c:15056
+#: elf32-arm.c:15104
#, c-format
msgid " [interworking enabled]"
msgstr ""
-#: elf32-arm.c:15064
+#: elf32-arm.c:15112
#, c-format
msgid " [VFP float format]"
msgstr ""
-#: elf32-arm.c:15066
+#: elf32-arm.c:15114
#, c-format
msgid " [Maverick float format]"
msgstr ""
-#: elf32-arm.c:15068
+#: elf32-arm.c:15116
#, c-format
msgid " [FPA float format]"
msgstr ""
-#: elf32-arm.c:15071
+#: elf32-arm.c:15119
#, c-format
msgid " [floats passed in float registers]"
msgstr ""
-#: elf32-arm.c:15074 elf32-arm.c:15160
+#: elf32-arm.c:15122 elf32-arm.c:15208
#, c-format
msgid " [position independent]"
msgstr ""
-#: elf32-arm.c:15077
+#: elf32-arm.c:15125
#, c-format
msgid " [new ABI]"
msgstr ""
-#: elf32-arm.c:15080
+#: elf32-arm.c:15128
#, c-format
msgid " [old ABI]"
msgstr ""
-#: elf32-arm.c:15083
+#: elf32-arm.c:15131
#, c-format
msgid " [software FP]"
msgstr ""
-#: elf32-arm.c:15092
+#: elf32-arm.c:15140
#, c-format
msgid " [Version1 EABI]"
msgstr ""
-#: elf32-arm.c:15095 elf32-arm.c:15106
+#: elf32-arm.c:15143 elf32-arm.c:15154
#, c-format
msgid " [sorted symbol table]"
msgstr ""
-#: elf32-arm.c:15097 elf32-arm.c:15108
+#: elf32-arm.c:15145 elf32-arm.c:15156
#, c-format
msgid " [unsorted symbol table]"
msgstr ""
-#: elf32-arm.c:15103
+#: elf32-arm.c:15151
#, c-format
msgid " [Version2 EABI]"
msgstr ""
-#: elf32-arm.c:15111
+#: elf32-arm.c:15159
#, c-format
msgid " [dynamic symbols use segment index]"
msgstr ""
-#: elf32-arm.c:15114
+#: elf32-arm.c:15162
#, c-format
msgid " [mapping symbols precede others]"
msgstr ""
-#: elf32-arm.c:15121
+#: elf32-arm.c:15169
#, c-format
msgid " [Version3 EABI]"
msgstr ""
-#: elf32-arm.c:15125
+#: elf32-arm.c:15173
#, c-format
msgid " [Version4 EABI]"
msgstr ""
-#: elf32-arm.c:15129
+#: elf32-arm.c:15177
#, c-format
msgid " [Version5 EABI]"
msgstr ""
-#: elf32-arm.c:15132
+#: elf32-arm.c:15180
#, c-format
msgid " [soft-float ABI]"
msgstr ""
-#: elf32-arm.c:15135
+#: elf32-arm.c:15183
#, c-format
msgid " [hard-float ABI]"
msgstr ""
-#: elf32-arm.c:15141
+#: elf32-arm.c:15189
#, c-format
msgid " [BE8]"
msgstr ""
-#: elf32-arm.c:15144
+#: elf32-arm.c:15192
#, c-format
msgid " [LE8]"
msgstr ""
-#: elf32-arm.c:15150
+#: elf32-arm.c:15198
#, c-format
msgid " <EABI version unrecognised>"
msgstr ""
-#: elf32-arm.c:15157
+#: elf32-arm.c:15205
#, c-format
msgid " [relocatable executable]"
msgstr ""
-#: elf32-arm.c:15163
+#: elf32-arm.c:15211
#, c-format
msgid " [FDPIC ABI supplement]"
msgstr ""
-#: elf32-arm.c:15168 elfnn-aarch64.c:7340
+#: elf32-arm.c:15216 elfnn-aarch64.c:7340
#, c-format
msgid " <Unrecognised flag bits set>"
msgstr ""
-#: elf32-arm.c:15285 elf32-arm.c:15419 elf32-i386.c:1524 elf32-s390.c:923
-#: elf32-tic6x.c:2724 elf32-tilepro.c:1435 elf32-xtensa.c:1094 elf64-s390.c:845
-#: elf64-x86-64.c:1900 elfxx-sparc.c:1386 elfxx-tilegx.c:1662
-#: elfnn-aarch64.c:7611 elfnn-riscv.c:662
+#: elf32-arm.c:15333 elf32-arm.c:15467 elf32-i386.c:1511 elf32-s390.c:923
+#: elf32-tic6x.c:2724 elf32-tilepro.c:1435 elf32-xtensa.c:1102 elf64-s390.c:845
+#: elf64-x86-64.c:1882 elfxx-sparc.c:1386 elfxx-tilegx.c:1662 elfxx-x86.c:953
+#: elfnn-aarch64.c:7611 elfnn-loongarch.c:604 elfnn-riscv.c:660
#, c-format
msgid "%pB: bad symbol index: %d"
msgstr ""
-#: elf32-arm.c:15675
+#: elf32-arm.c:15723
#, c-format
msgid ""
"FDPIC does not yet support %s relocation to become dynamic for executable"
msgstr ""
-#: elf32-arm.c:16936
+#: elf32-arm.c:16984
#, c-format
msgid "errors encountered processing file %pB"
msgstr ""
-#: elf32-arm.c:17309 elflink.c:13022 elflink.c:13069
+#: elf32-arm.c:17357 elflink.c:13186 elflink.c:13233
#, c-format
msgid "could not find section %s"
msgstr ""
-#: elf32-arm.c:18230
+#: elf32-arm.c:18278
#, c-format
msgid "%pB: Number of symbols in input file has increased from %lu to %u\n"
msgstr ""
-#: elf32-arm.c:18494
+#: elf32-arm.c:18542
#, c-format
msgid "%pB: error: Cortex-A8 erratum stub is allocated in unsafe location"
msgstr ""
#. There's not much we can do apart from complain if this
#. happens.
-#: elf32-arm.c:18521
+#: elf32-arm.c:18569
#, c-format
msgid "%pB: error: Cortex-A8 erratum stub out of range (input file too large)"
msgstr ""
-#: elf32-arm.c:19348 elf32-arm.c:19370
+#: elf32-arm.c:19396 elf32-arm.c:19418
#, c-format
msgid "%pB: error: VFP11 veneer out of range"
msgstr ""
-#: elf32-arm.c:19421
+#: elf32-arm.c:19469
#, c-format
msgid ""
"%pB(%#<PRIx64>): error: cannot create STM32L4XX veneer; jump out of range by "
"%<PRId64> bytes; cannot encode branch instruction"
msgstr ""
-#: elf32-arm.c:19460
+#: elf32-arm.c:19508
#, c-format
msgid "%pB: error: cannot create STM32L4XX veneer"
msgstr ""
-#: elf32-arm.c:20544
+#: elf32-arm.c:20590
#, c-format
msgid "error: %pB is already in final BE8 format"
msgstr ""
-#: elf32-arm.c:20620
+#: elf32-arm.c:20666
#, c-format
msgid ""
"error: source object %pB has EABI version %d, but target %pB has EABI "
"version %d"
msgstr ""
-#: elf32-arm.c:20635
+#: elf32-arm.c:20681
#, c-format
msgid "error: %pB is compiled for APCS-%d, whereas target %pB uses APCS-%d"
msgstr ""
-#: elf32-arm.c:20645
+#: elf32-arm.c:20691
#, c-format
msgid ""
"error: %pB passes floats in float registers, whereas %pB passes them in "
"integer registers"
msgstr ""
-#: elf32-arm.c:20649
+#: elf32-arm.c:20695
#, c-format
msgid ""
"error: %pB passes floats in integer registers, whereas %pB passes them in "
"float registers"
msgstr ""
-#: elf32-arm.c:20659 elf32-arm.c:20663 elf32-arm.c:20673
+#: elf32-arm.c:20705 elf32-arm.c:20709 elf32-arm.c:20719
#, c-format
msgid "error: %pB uses %s instructions, whereas %pB does not"
msgstr ""
-#: elf32-arm.c:20677
+#: elf32-arm.c:20723
#, c-format
msgid "error: %pB does not use %s instructions, whereas %pB does"
msgstr ""
-#: elf32-arm.c:20696
+#: elf32-arm.c:20742
#, c-format
msgid "error: %pB uses software FP, whereas %pB uses hardware FP"
msgstr ""
-#: elf32-arm.c:20700
+#: elf32-arm.c:20746
#, c-format
msgid "error: %pB uses hardware FP, whereas %pB uses software FP"
msgstr ""
-#: elf32-arm.c:20714
+#: elf32-arm.c:20760
#, c-format
msgid "warning: %pB supports interworking, whereas %pB does not"
msgstr ""
-#: elf32-arm.c:20720
+#: elf32-arm.c:20766
#, c-format
msgid "warning: %pB does not support interworking, whereas %pB does"
msgstr ""
@@ -2246,8 +2247,8 @@ msgstr ""
msgid "%pB(%pA+%#<PRIx64>): unresolvable relocation against symbol `%s'"
msgstr ""
-#: elf32-bfin.c:1625 elf32-i386.c:3470 elf32-m68k.c:4006 elf32-s390.c:3138
-#: elf64-s390.c:3087 elf64-x86-64.c:4145
+#: elf32-bfin.c:1625 elf32-i386.c:3466 elf32-m68k.c:4006 elf32-s390.c:3138
+#: elf64-s390.c:3087 elf64-x86-64.c:4139
#, c-format
msgid "%pB(%pA+%#<PRIx64>): reloc against `%s': error %d"
msgstr ""
@@ -2288,34 +2289,34 @@ msgid "warning: relocation references a different segment"
msgstr ""
#. Ignore init flag - it may not be set, despite the flags field containing valid data.
-#: elf32-bfin.c:4735 elf32-cris.c:3862 elf32-m68hc1x.c:1415 elf32-m68k.c:1265
-#: elf32-score.c:3996 elf32-score7.c:3801 elf32-vax.c:536 elf32-xgate.c:494
-#: elfxx-mips.c:16254
+#: elf32-bfin.c:4732 elf32-cris.c:3862 elf32-m68hc1x.c:1415 elf32-m68k.c:1265
+#: elf32-score.c:3987 elf32-score7.c:3794 elf32-vax.c:536 elf32-xgate.c:494
+#: elfxx-mips.c:16270
#, c-format
msgid "private flags = %lx:"
msgstr ""
-#: elf32-bfin.c:4786 elf32-frv.c:6585
+#: elf32-bfin.c:4783 elf32-frv.c:6585
#, c-format
msgid "%pB: cannot link non-fdpic object file into fdpic executable"
msgstr ""
-#: elf32-bfin.c:4790 elf32-frv.c:6589
+#: elf32-bfin.c:4787 elf32-frv.c:6589
#, c-format
msgid "%pB: cannot link fdpic object file into non-fdpic executable"
msgstr ""
-#: elf32-bfin.c:4927
+#: elf32-bfin.c:4924
#, c-format
msgid "*** check this relocation %s"
msgstr ""
-#: elf32-bfin.c:5043
+#: elf32-bfin.c:5040
msgid ""
"the bfin target does not currently support the generation of copy relocations"
msgstr ""
-#: elf32-bfin.c:5337 elf32-cr16.c:2713 elf32-m68k.c:4420
+#: elf32-bfin.c:5334 elf32-cr16.c:2710 elf32-m68k.c:4420
msgid "unsupported relocation type"
msgstr ""
@@ -2511,7 +2512,7 @@ msgid "warning: file %pB's arch flag %s conflicts with target ck%s, using %s"
msgstr ""
#. The r_type is error, not support it.
-#: elf32-csky.c:4342 elf32-i386.c:350
+#: elf32-csky.c:4342 elf32-i386.c:344
#, c-format
msgid "%pB: unsupported relocation type: %#x"
msgstr ""
@@ -2636,7 +2637,7 @@ msgstr ""
msgid "%pB: relocations in generic ELF (EM: %d)"
msgstr ""
-#: elf32-hppa.c:761 elf32-hppa.c:842 elf64-ppc.c:12024
+#: elf32-hppa.c:761 elf32-hppa.c:842 elf64-ppc.c:12181
msgid ""
"%F%P: Could not assign %pA to an output section. Retry without --enable-non-"
"contiguous-regions.\n"
@@ -2686,81 +2687,85 @@ msgstr ""
msgid ".got section not immediately after .plt section"
msgstr ""
-#: elf32-i386.c:1169 elf64-x86-64.c:1380
+#: elf32-i386.c:1163 elf64-x86-64.c:1369
#, c-format
msgid ""
"%pB: TLS transition from %s to %s against `%s' at %#<PRIx64> in section `"
"%pA' failed"
msgstr ""
-#: elf32-i386.c:1272
+#: elf32-i386.c:1266
#, c-format
msgid ""
"%pB: direct GOT relocation R_386_GOT32X against `%s' without base register "
"can not be used when making a shared object"
msgstr ""
-#: elf32-i386.c:1721 elf32-s390.c:1151 elf32-sh.c:5488 elf32-tilepro.c:1548
-#: elf32-xtensa.c:1266 elf64-s390.c:1083 elfxx-sparc.c:1556 elfxx-tilegx.c:1767
-#: elfnn-riscv.c:570
+#: elf32-i386.c:1695 elf32-s390.c:1151 elf32-sh.c:5488 elf32-tilepro.c:1548
+#: elf32-xtensa.c:1274 elf64-s390.c:1083 elfxx-sparc.c:1556 elfxx-tilegx.c:1767
+#: elfnn-loongarch.c:555 elfnn-riscv.c:568
#, c-format
msgid "%pB: `%s' accessed both as normal and thread local symbol"
msgstr ""
-#: elf32-i386.c:1793
+#: elf32-i386.c:1767
#, c-format
msgid "%pB: unsupported non-PIC call to IFUNC `%s'"
msgstr ""
-#: elf32-i386.c:2377 elf64-x86-64.c:2726 elfnn-riscv.c:2286
+#: elf32-i386.c:2357 elf64-x86-64.c:2701 elfnn-riscv.c:2300
#, c-format
msgid "%pB: relocation %s against STT_GNU_IFUNC symbol `%s' isn't supported"
msgstr ""
-#: elf32-i386.c:2410 elf32-i386.c:3681 elf32-i386.c:3828 elf64-x86-64.c:2783
-#: elf64-x86-64.c:4318 elf64-x86-64.c:4480 elfnn-riscv.c:2159
-#: elfnn-riscv.c:2958 elfnn-riscv.c:3032
+#: elf32-i386.c:2390 elf32-i386.c:3677 elf32-i386.c:3825 elf64-x86-64.c:2758
+#: elf64-x86-64.c:4312 elf64-x86-64.c:4475 elfnn-riscv.c:2173
+#: elfnn-riscv.c:2972 elfnn-riscv.c:3046
#, c-format
msgid "Local IFUNC function `%s' in %pB\n"
msgstr ""
-#: elf32-i386.c:2579
+#: elf32-i386.c:2563
#, c-format
msgid ""
"%pB: direct GOT relocation %s against `%s' without base register can not be "
"used when making a shared object"
msgstr ""
-#: elf32-i386.c:2614 elf64-x86-64.c:2993
+#: elf32-i386.c:2598 elf64-x86-64.c:2974
msgid "hidden symbol"
msgstr ""
-#: elf32-i386.c:2617 elf64-x86-64.c:2996
+#: elf32-i386.c:2601 elf64-x86-64.c:2977
msgid "internal symbol"
msgstr ""
-#: elf32-i386.c:2620 elf64-x86-64.c:2999
+#: elf32-i386.c:2604 elf64-x86-64.c:2980
msgid "protected symbol"
msgstr ""
-#: elf32-i386.c:2623 elf64-x86-64.c:3002
+#: elf32-i386.c:2607 elf64-x86-64.c:2983
msgid "symbol"
msgstr ""
-#: elf32-i386.c:2629
+#: elf32-i386.c:2613
#, c-format
msgid ""
"%pB: relocation R_386_GOTOFF against undefined %s `%s' can not be used when "
"making a shared object"
msgstr ""
-#: elf32-i386.c:2642
+#: elf32-i386.c:2626
#, c-format
msgid ""
"%pB: relocation R_386_GOTOFF against protected %s `%s' can not be used when "
"making a shared object"
msgstr ""
+#: elf32-i386.c:4028 elf64-x86-64.c:4686
+msgid "%F%P: discarded output section: `%pA'\n"
+msgstr ""
+
#: elf32-ip2k.c:855 elf32-ip2k.c:861 elf32-ip2k.c:928 elf32-ip2k.c:934
msgid ""
"ip2k relaxer: switch table without complete matching relocation information."
@@ -2932,12 +2937,12 @@ msgstr ""
msgid " [XGATE RAM offsetting]"
msgstr ""
-#: elf32-m68k.c:1157 elf32-m68k.c:1165 elf32-ppc.c:3584 elf32-ppc.c:3592
+#: elf32-m68k.c:1157 elf32-m68k.c:1165 elf32-ppc.c:3597 elf32-ppc.c:3605
#, c-format
msgid "%pB uses hard float, %pB uses soft float"
msgstr ""
-#: elf32-m68k.c:1280 elf32-m68k.c:1281 vms-alpha.c:7659 vms-alpha.c:7675
+#: elf32-m68k.c:1280 elf32-m68k.c:1281 vms-alpha.c:7906 vms-alpha.c:7922
msgid "unknown"
msgstr ""
@@ -2999,7 +3004,7 @@ msgstr ""
msgid "literal relocation occurs for an external symbol"
msgstr ""
-#: elf32-mips.c:1824 elf32-score.c:572 elf32-score7.c:472 elf64-mips.c:3559
+#: elf32-mips.c:1824 elf32-score.c:563 elf32-score7.c:465 elf64-mips.c:3559
#: elfn32-mips.c:3375
msgid "32bits gp relative relocation occurs for an external symbol"
msgstr ""
@@ -3130,27 +3135,27 @@ msgstr ""
msgid ": n1h instructions"
msgstr ""
-#: elf32-nds32.c:9308
+#: elf32-nds32.c:9304
#, c-format
msgid "%pB: error: search_nds32_elf_blank reports wrong node"
msgstr ""
-#: elf32-nds32.c:9572
+#: elf32-nds32.c:9568
#, c-format
msgid "%pB: warning: %s points to unrecognized reloc at %#<PRIx64>"
msgstr ""
-#: elf32-nds32.c:12837
+#: elf32-nds32.c:12833
#, c-format
msgid "%pB: nested OMIT_FP in %pA"
msgstr ""
-#: elf32-nds32.c:12856
+#: elf32-nds32.c:12852
#, c-format
msgid "%pB: unmatched OMIT_FP in %pA"
msgstr ""
-#: elf32-nds32.c:13138 elfxx-mips.c:13407 reloc.c:8508
+#: elf32-nds32.c:13134 elfxx-mips.c:13426 reloc.c:8599
#, c-format
msgid "%X%P: %pB(%pA): relocation \"%pR\" goes out of range\n"
msgstr ""
@@ -3182,7 +3187,7 @@ msgstr ""
msgid "dangerous relocation"
msgstr ""
-#: elf32-nios2.c:5364
+#: elf32-nios2.c:5360
#, c-format
msgid "dynamic variable `%s' is zero size"
msgstr ""
@@ -3212,7 +3217,7 @@ msgstr ""
msgid "%pB: gotoff relocation against dynamic symbol %s"
msgstr ""
-#: elf32-or1k.c:1551 elf32-or1k.c:1566 elf64-alpha.c:4426 elf64-alpha.c:4570
+#: elf32-or1k.c:1551 elf32-or1k.c:1566 elf64-alpha.c:4427 elf64-alpha.c:4571
#, c-format
msgid "%pB: pc-relative relocation against dynamic symbol %s"
msgstr ""
@@ -3242,101 +3247,101 @@ msgstr ""
msgid "%pB: %s flag mismatch with previous modules"
msgstr ""
-#: elf32-ppc.c:989 elf64-ppc.c:1725
+#: elf32-ppc.c:993 elf64-ppc.c:1749
#, c-format
msgid "generic linker can't handle %s"
msgstr ""
-#: elf32-ppc.c:1629
+#: elf32-ppc.c:1633
#, c-format
msgid "corrupt %s section in %pB"
msgstr ""
-#: elf32-ppc.c:1648
+#: elf32-ppc.c:1652
#, c-format
msgid "unable to read in %s section from %pB"
msgstr ""
-#: elf32-ppc.c:1690
+#: elf32-ppc.c:1694
#, c-format
msgid "warning: unable to set size of %s section in %pB"
msgstr ""
-#: elf32-ppc.c:1739
+#: elf32-ppc.c:1743
msgid "failed to allocate space for new APUinfo section"
msgstr ""
-#: elf32-ppc.c:1758
+#: elf32-ppc.c:1762
msgid "failed to compute new APUinfo section"
msgstr ""
-#: elf32-ppc.c:1761
+#: elf32-ppc.c:1765
msgid "failed to install new APUinfo section"
msgstr ""
-#: elf32-ppc.c:2860
+#: elf32-ppc.c:2873
#, c-format
msgid "%pB: relocation %s cannot be used when making a shared object"
msgstr ""
-#: elf32-ppc.c:3600 elf32-ppc.c:3608
+#: elf32-ppc.c:3613 elf32-ppc.c:3621
#, c-format
msgid ""
"%pB uses double-precision hard float, %pB uses single-precision hard float"
msgstr ""
-#: elf32-ppc.c:3630 elf32-ppc.c:3638
+#: elf32-ppc.c:3643 elf32-ppc.c:3651
#, c-format
msgid "%pB uses 64-bit long double, %pB uses 128-bit long double"
msgstr ""
-#: elf32-ppc.c:3646 elf32-ppc.c:3654
+#: elf32-ppc.c:3659 elf32-ppc.c:3667
#, c-format
msgid "%pB uses IBM long double, %pB uses IEEE long double"
msgstr ""
-#: elf32-ppc.c:3721 elf32-ppc.c:3730
+#: elf32-ppc.c:3734 elf32-ppc.c:3743
#, c-format
msgid "%pB uses AltiVec vector ABI, %pB uses SPE vector ABI"
msgstr ""
-#: elf32-ppc.c:3759 elf32-ppc.c:3768
+#: elf32-ppc.c:3772 elf32-ppc.c:3781
#, c-format
msgid "%pB uses r3/r4 for small structure returns, %pB uses memory"
msgstr ""
-#: elf32-ppc.c:3832
+#: elf32-ppc.c:3845
#, c-format
msgid ""
"%pB: compiled with -mrelocatable and linked with modules compiled normally"
msgstr ""
-#: elf32-ppc.c:3840
+#: elf32-ppc.c:3853
#, c-format
msgid ""
"%pB: compiled normally and linked with modules compiled with -mrelocatable"
msgstr ""
-#: elf32-ppc.c:3909
+#: elf32-ppc.c:3924
#, c-format
msgid "%pB(%pA+0x%lx): expected 16A style relocation on 0x%08x insn"
msgstr ""
-#: elf32-ppc.c:3928
+#: elf32-ppc.c:3943
#, c-format
msgid "%pB(%pA+0x%lx): expected 16D style relocation on 0x%08x insn"
msgstr ""
-#: elf32-ppc.c:4031
+#: elf32-ppc.c:4047
#, c-format
msgid "bss-plt forced due to %pB"
msgstr ""
-#: elf32-ppc.c:4033
+#: elf32-ppc.c:4049
msgid "bss-plt forced by profiling"
msgstr ""
-#: elf32-ppc.c:4610 elf64-ppc.c:8319
+#: elf32-ppc.c:4626 elf64-ppc.c:8483
msgid "%H: warning: %s unexpected insn %#x.\n"
msgstr ""
@@ -3344,36 +3349,41 @@ msgstr ""
#. could just mark this symbol to exclude it
#. from tls optimization but it's safer to skip
#. the entire optimization.
-#: elf32-ppc.c:4640 elf64-ppc.c:8384
+#: elf32-ppc.c:4656 elf64-ppc.c:8548
#, c-format
msgid "%H arg lost __tls_get_addr, TLS optimization disabled\n"
msgstr ""
-#: elf32-ppc.c:5566 elf32-sh.c:3017 elf32-tilepro.c:2248 elfxx-sparc.c:2454
+#: elf32-ppc.c:5582 elf32-sh.c:3017 elf32-tilepro.c:2248 elfxx-sparc.c:2454
#: elfxx-tilegx.c:2494
#, c-format
msgid "%pB: dynamic relocation in read-only section `%pA'\n"
msgstr ""
-#: elf32-ppc.c:7409
+#: elf32-ppc.c:7437
msgid "%P: %H: error: %s with unexpected instruction %x\n"
msgstr ""
-#: elf32-ppc.c:7446
+#: elf32-ppc.c:7475
msgid "%H: fixup branch overflow\n"
msgstr ""
-#: elf32-ppc.c:7486 elf32-ppc.c:7522
+#: elf32-ppc.c:7515 elf32-ppc.c:7553
#, c-format
msgid "%pB(%pA+%#<PRIx64>): error: %s with unexpected instruction %#x"
msgstr ""
-#: elf32-ppc.c:7586
+#: elf32-ppc.c:7617
#, c-format
msgid "%X%H: unsupported bss-plt -fPIC ifunc %s\n"
msgstr ""
-#: elf32-ppc.c:7901
+#: elf32-ppc.c:7653
+#, c-format
+msgid "%pB: reloc %#x unsupported"
+msgstr ""
+
+#: elf32-ppc.c:7938
#, c-format
msgid "%H: non-zero addend on %s reloc against `%s'\n"
msgstr ""
@@ -3386,54 +3396,54 @@ msgstr ""
#. local won't have the +32k reloc addend trick marking
#. -fPIC code, so the linker won't know whether r30 is
#. _GLOBAL_OFFSET_TABLE_ or pointing into a .got2 section.
-#: elf32-ppc.c:7933
+#: elf32-ppc.c:7970
#, c-format
msgid "%X%H: @local call to ifunc %s\n"
msgstr ""
-#: elf32-ppc.c:8111
+#: elf32-ppc.c:8149
#, c-format
msgid "%H: relocation %s for indirect function %s unsupported\n"
msgstr ""
-#: elf32-ppc.c:8443 elf32-ppc.c:8474 elf32-ppc.c:8565 elf32-ppc.c:8661
+#: elf32-ppc.c:8488 elf32-ppc.c:8519 elf32-ppc.c:8622 elf32-ppc.c:8722
#, c-format
msgid ""
"%pB: the target (%s) of a %s relocation is in the wrong output section (%s)"
msgstr ""
-#: elf32-ppc.c:8816 elf32-ppc.c:8834
+#: elf32-ppc.c:8900 elf32-ppc.c:8921
msgid "%X%P: %H: %s relocation unsupported for bss-plt\n"
msgstr ""
-#: elf32-ppc.c:8915
+#: elf32-ppc.c:9003
#, c-format
msgid "%H: error: %s against `%s' not a multiple of %u\n"
msgstr ""
-#: elf32-ppc.c:8944
+#: elf32-ppc.c:9032
#, c-format
msgid "%H: unresolvable %s relocation against symbol `%s'\n"
msgstr ""
-#: elf32-ppc.c:9025
+#: elf32-ppc.c:9114
#, c-format
msgid "%H: %s reloc against `%s': error %d\n"
msgstr ""
-#: elf32-ppc.c:9906
+#: elf32-ppc.c:9995
msgid ""
"%X%P: text relocations and GNU indirect functions will result in a segfault "
"at runtime\n"
msgstr ""
-#: elf32-ppc.c:9910 elf64-ppc.c:17669
+#: elf32-ppc.c:9999 elf64-ppc.c:18133
msgid ""
"%P: warning: text relocations and GNU indirect functions may result in a "
"segfault at runtime\n"
msgstr ""
-#: elf32-ppc.c:9955
+#: elf32-ppc.c:10044
#, c-format
msgid "%s not defined in linker created %pA"
msgstr ""
@@ -3554,35 +3564,35 @@ msgstr ""
msgid "%pB(%pA+%#<PRIx64>): invalid instruction for TLS relocation %s"
msgstr ""
-#: elf32-score.c:1524 elf32-score7.c:1385 elfxx-mips.c:3798
+#: elf32-score.c:1515 elf32-score7.c:1378 elfxx-mips.c:3798
msgid "not enough GOT space for local GOT entries"
msgstr ""
-#: elf32-score.c:2756
+#: elf32-score.c:2747
msgid "address not word aligned"
msgstr ""
-#: elf32-score.c:2837 elf32-score7.c:2642
+#: elf32-score.c:2828 elf32-score7.c:2635
#, c-format
msgid "%pB: malformed reloc detected for section %pA"
msgstr ""
-#: elf32-score.c:2891 elf32-score7.c:2696
+#: elf32-score.c:2882 elf32-score7.c:2689
#, c-format
msgid "%pB: CALL15 reloc at %#<PRIx64> not against global symbol"
msgstr ""
-#: elf32-score.c:3999 elf32-score7.c:3804
+#: elf32-score.c:3990 elf32-score7.c:3797
#, c-format
msgid " [pic]"
msgstr ""
-#: elf32-score.c:4003 elf32-score7.c:3808
+#: elf32-score.c:3994 elf32-score7.c:3801
#, c-format
msgid " [fix dep]"
msgstr ""
-#: elf32-score.c:4050 elf32-score7.c:3855
+#: elf32-score.c:4041 elf32-score7.c:3848
#, c-format
msgid "%pB: warning: linking PIC files with non-PIC files"
msgstr ""
@@ -3727,7 +3737,7 @@ msgstr ""
msgid "%pB: Function descriptor relocation with non-zero addend"
msgstr ""
-#: elf32-sh.c:5721 elf64-alpha.c:4662
+#: elf32-sh.c:5721 elf64-alpha.c:4663
#, c-format
msgid "%pB: TLS local exec code cannot be linked into shared objects"
msgstr ""
@@ -3818,7 +3828,7 @@ msgstr ""
msgid "overlay stub relocation overflow"
msgstr ""
-#: elf32-spu.c:1991 elf64-ppc.c:14763
+#: elf32-spu.c:1991 elf64-ppc.c:15187
msgid "stubs don't match calculated size"
msgstr ""
@@ -3965,8 +3975,8 @@ msgstr ""
msgid "warning: %pB and %pB differ in whether code is compiled for DSBT"
msgstr ""
-#: elf32-tilepro.c:3627 elfxx-tilegx.c:4017 elfxx-x86.c:1397
-#: elfnn-aarch64.c:9714 elfnn-riscv.c:3255
+#: elf32-tilepro.c:3627 elfxx-tilegx.c:4017 elfxx-x86.c:2409
+#: elfnn-aarch64.c:9714 elfnn-loongarch.c:2971 elfnn-riscv.c:3269
#, c-format
msgid "discarded output section: `%pA'"
msgstr ""
@@ -4245,60 +4255,60 @@ msgstr ""
msgid "non-zero addend in @fptr reloc"
msgstr ""
-#: elf32-xtensa.c:1002
+#: elf32-xtensa.c:1010
#, c-format
msgid "%pB(%pA): invalid property table"
msgstr ""
-#: elf32-xtensa.c:2734
+#: elf32-xtensa.c:2744
#, c-format
msgid "%pB(%pA+%#<PRIx64>): relocation offset out of range (size=%#<PRIx64>)"
msgstr ""
-#: elf32-xtensa.c:2817 elf32-xtensa.c:2940
+#: elf32-xtensa.c:2827 elf32-xtensa.c:2950
msgid "dynamic relocation in read-only section"
msgstr ""
-#: elf32-xtensa.c:2917
+#: elf32-xtensa.c:2927
msgid "TLS relocation invalid without dynamic sections"
msgstr ""
-#: elf32-xtensa.c:3130
+#: elf32-xtensa.c:3140
msgid "internal inconsistency in size of .got.loc section"
msgstr ""
-#: elf32-xtensa.c:3436
+#: elf32-xtensa.c:3446
#, c-format
msgid "%pB: incompatible machine type; output is 0x%x; input is 0x%x"
msgstr ""
-#: elf32-xtensa.c:4735 elf32-xtensa.c:4743
+#: elf32-xtensa.c:4745 elf32-xtensa.c:4753
msgid "attempt to convert L32R/CALLX to CALL failed"
msgstr ""
-#: elf32-xtensa.c:6571 elf32-xtensa.c:6650 elf32-xtensa.c:8076
+#: elf32-xtensa.c:6581 elf32-xtensa.c:6660 elf32-xtensa.c:8086
#, c-format
msgid ""
"%pB(%pA+%#<PRIx64>): could not decode instruction; possible configuration "
"mismatch"
msgstr ""
-#: elf32-xtensa.c:7817
+#: elf32-xtensa.c:7827
#, c-format
msgid ""
"%pB(%pA+%#<PRIx64>): could not decode instruction for XTENSA_ASM_SIMPLIFY "
"relocation; possible configuration mismatch"
msgstr ""
-#: elf32-xtensa.c:9675
+#: elf32-xtensa.c:9685
msgid "invalid relocation address"
msgstr ""
-#: elf32-xtensa.c:9766
+#: elf32-xtensa.c:9776
msgid "overflow after relaxation"
msgstr ""
-#: elf32-xtensa.c:10912
+#: elf32-xtensa.c:10922
#, c-format
msgid "%pB(%pA+%#<PRIx64>): unexpected fix for %s relocation"
msgstr ""
@@ -4322,7 +4332,7 @@ msgstr ""
msgid "GPDISP relocation did not find ldah and lda instructions"
msgstr ""
-#: elf64-alpha.c:2002 elf64-alpha.c:2697 elflink.c:15139
+#: elf64-alpha.c:2002 elf64-alpha.c:2697 elflink.c:15304 elfnn-loongarch.c:1161
#, c-format
msgid "%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"
msgstr ""
@@ -4337,41 +4347,41 @@ msgstr ""
msgid "%pB: %pA+%#<PRIx64>: warning: %s relocation against unexpected insn"
msgstr ""
-#: elf64-alpha.c:4386 elf64-alpha.c:4399
+#: elf64-alpha.c:4387 elf64-alpha.c:4400
#, c-format
msgid "%pB: gp-relative relocation against dynamic symbol %s"
msgstr ""
-#: elf64-alpha.c:4455
+#: elf64-alpha.c:4456
#, c-format
msgid "%pB: change in gp: BRSGP %s"
msgstr ""
-#: elf64-alpha.c:4480 mach-o.c:616 elfnn-riscv.c:621
+#: elf64-alpha.c:4481 mach-o.c:616 elfnn-riscv.c:619
msgid "<unknown>"
msgstr ""
-#: elf64-alpha.c:4486
+#: elf64-alpha.c:4487
#, c-format
msgid "%pB: !samegp reloc against symbol without .prologue: %s"
msgstr ""
-#: elf64-alpha.c:4544
+#: elf64-alpha.c:4545
#, c-format
msgid "%pB: unhandled dynamic relocation against %s"
msgstr ""
-#: elf64-alpha.c:4579
+#: elf64-alpha.c:4580
#, c-format
msgid "%pB: pc-relative relocation against undefined weak symbol %s"
msgstr ""
-#: elf64-alpha.c:4645
+#: elf64-alpha.c:4646
#, c-format
msgid "%pB: dtp-relative relocation against dynamic symbol %s"
msgstr ""
-#: elf64-alpha.c:4670
+#: elf64-alpha.c:4671
#, c-format
msgid "%pB: tp-relative relocation against dynamic symbol %s"
msgstr ""
@@ -4407,102 +4417,102 @@ msgstr ""
msgid "@pltoff reloc against local symbol"
msgstr ""
-#: elf64-ia64-vms.c:3283 elfnn-ia64.c:3670
+#: elf64-ia64-vms.c:3277 elfnn-ia64.c:3670
#, c-format
msgid "%pB: short data segment overflowed (%#<PRIx64> >= 0x400000)"
msgstr ""
-#: elf64-ia64-vms.c:3293 elfnn-ia64.c:3680
+#: elf64-ia64-vms.c:3287 elfnn-ia64.c:3680
#, c-format
msgid "%pB: __gp does not cover short data segment"
msgstr ""
-#: elf64-ia64-vms.c:3563 elfnn-ia64.c:3953
+#: elf64-ia64-vms.c:3557 elfnn-ia64.c:3953
#, c-format
msgid "%pB: non-pic code with imm relocation against dynamic symbol `%s'"
msgstr ""
-#: elf64-ia64-vms.c:3627 elfnn-ia64.c:4021
+#: elf64-ia64-vms.c:3621 elfnn-ia64.c:4021
#, c-format
msgid "%pB: @gprel relocation against dynamic symbol %s"
msgstr ""
-#: elf64-ia64-vms.c:3686 elfnn-ia64.c:4084
+#: elf64-ia64-vms.c:3680 elfnn-ia64.c:4084
#, c-format
msgid "%pB: linking non-pic code in a position independent executable"
msgstr ""
-#: elf64-ia64-vms.c:3788 elfnn-ia64.c:4222
+#: elf64-ia64-vms.c:3782 elfnn-ia64.c:4222
#, c-format
msgid "%pB: @internal branch to dynamic symbol %s"
msgstr ""
-#: elf64-ia64-vms.c:3791 elfnn-ia64.c:4225
+#: elf64-ia64-vms.c:3785 elfnn-ia64.c:4225
#, c-format
msgid "%pB: speculation fixup to dynamic symbol %s"
msgstr ""
-#: elf64-ia64-vms.c:3794 elfnn-ia64.c:4228
+#: elf64-ia64-vms.c:3788 elfnn-ia64.c:4228
#, c-format
msgid "%pB: @pcrel relocation against dynamic symbol %s"
msgstr ""
-#: elf64-ia64-vms.c:3918 elfnn-ia64.c:4425
+#: elf64-ia64-vms.c:3912 elfnn-ia64.c:4425
msgid "unsupported reloc"
msgstr ""
-#: elf64-ia64-vms.c:3955 elfnn-ia64.c:4463
+#: elf64-ia64-vms.c:3949 elfnn-ia64.c:4463
#, c-format
msgid ""
"%pB: missing TLS section for relocation %s against `%s' at %#<PRIx64> in "
"section `%pA'."
msgstr ""
-#: elf64-ia64-vms.c:3972 elfnn-ia64.c:4480
+#: elf64-ia64-vms.c:3966 elfnn-ia64.c:4480
#, c-format
msgid ""
"%pB: Can't relax br (%s) to `%s' at %#<PRIx64> in section `%pA' with size "
"%#<PRIx64> (> 0x1000000)."
msgstr ""
-#: elf64-ia64-vms.c:4268 elfnn-ia64.c:4741
+#: elf64-ia64-vms.c:4262 elfnn-ia64.c:4741
#, c-format
msgid "%pB: linking trap-on-NULL-dereference with non-trapping files"
msgstr ""
-#: elf64-ia64-vms.c:4277 elfnn-ia64.c:4750
+#: elf64-ia64-vms.c:4271 elfnn-ia64.c:4750
#, c-format
msgid "%pB: linking big-endian files with little-endian files"
msgstr ""
-#: elf64-ia64-vms.c:4286 elfnn-ia64.c:4759
+#: elf64-ia64-vms.c:4280 elfnn-ia64.c:4759
#, c-format
msgid "%pB: linking 64-bit files with 32-bit files"
msgstr ""
-#: elf64-ia64-vms.c:4295 elfnn-ia64.c:4768
+#: elf64-ia64-vms.c:4289 elfnn-ia64.c:4768
#, c-format
msgid "%pB: linking constant-gp files with non-constant-gp files"
msgstr ""
-#: elf64-ia64-vms.c:4305 elfnn-ia64.c:4778
+#: elf64-ia64-vms.c:4299 elfnn-ia64.c:4778
#, c-format
msgid "%pB: linking auto-pic files with non-auto-pic files"
msgstr ""
-#: elf64-ia64-vms.c:5152 elflink.c:5176
+#: elf64-ia64-vms.c:5146 elflink.c:5294
#, c-format
msgid ""
"warning: alignment %u of common symbol `%s' in %pB is greater than the "
"alignment (%u) of its section %pA"
msgstr ""
-#: elf64-ia64-vms.c:5159 elflink.c:5183
+#: elf64-ia64-vms.c:5153 elflink.c:5301
#, c-format
msgid "warning: alignment %u of symbol `%s' in %pB is smaller than %u in %pB"
msgstr ""
-#: elf64-ia64-vms.c:5175 elflink.c:5200
+#: elf64-ia64-vms.c:5169 elflink.c:5318
#, c-format
msgid ""
"warning: size of symbol `%s' changed from %<PRIu64> in %pB to %<PRIu64> in "
@@ -4585,68 +4595,68 @@ msgid ""
"internal inconsistency: remaining %lu != max %lu; please report this bug"
msgstr ""
-#: elf64-ppc.c:1351
+#: elf64-ppc.c:1357
#, c-format
msgid "warning: %s should be used rather than %s"
msgstr ""
-#: elf64-ppc.c:4155
+#: elf64-ppc.c:4281
#, c-format
msgid "symbol '%s' has invalid st_other for ABI version 1"
msgstr ""
-#: elf64-ppc.c:4336
+#: elf64-ppc.c:4462
#, c-format
msgid "%pB .opd not allowed in ABI version %d"
msgstr ""
-#: elf64-ppc.c:4908
+#: elf64-ppc.c:5055
#, c-format
msgid "%H: %s reloc unsupported in shared libraries and PIEs\n"
msgstr ""
-#: elf64-ppc.c:5318
+#: elf64-ppc.c:5476
#, c-format
msgid "%pB uses unknown e_flags 0x%lx"
msgstr ""
-#: elf64-ppc.c:5326
+#: elf64-ppc.c:5484
#, c-format
msgid "%pB: ABI version %ld is not compatible with ABI version %ld output"
msgstr ""
-#: elf64-ppc.c:5353
+#: elf64-ppc.c:5511
#, c-format
msgid " [abiv%ld]"
msgstr ""
-#: elf64-ppc.c:6651
+#: elf64-ppc.c:6808
msgid ""
"%P: copy reloc against `%pT' requires lazy plt linking; avoid setting "
"LD_BIND_NOW=1 or upgrade gcc\n"
msgstr ""
-#: elf64-ppc.c:6918
+#: elf64-ppc.c:7075
#, c-format
msgid "%pB: undefined symbol on R_PPC64_TOCSAVE relocation"
msgstr ""
-#: elf64-ppc.c:7166
+#: elf64-ppc.c:7331
#, c-format
msgid "dynreloc miscount for %pB, section %pA"
msgstr ""
-#: elf64-ppc.c:7255
+#: elf64-ppc.c:7420
#, c-format
msgid "%pB: .opd is not a regular array of opd entries"
msgstr ""
-#: elf64-ppc.c:7265
+#: elf64-ppc.c:7430
#, c-format
msgid "%pB: unexpected reloc type %u in .opd section"
msgstr ""
-#: elf64-ppc.c:7287
+#: elf64-ppc.c:7452
#, c-format
msgid "%pB: undefined sym `%s' in .opd section"
msgstr ""
@@ -4658,157 +4668,148 @@ msgstr ""
#. __glink_PLTresolve save of r2 is incompatible with code
#. making tail calls, because the tail call might go via the
#. resolver and thus overwrite the proper saved r2.
-#: elf64-ppc.c:7781
+#: elf64-ppc.c:7953
msgid "warning: --plt-localentry is incompatible with power10 pc-relative code"
msgstr ""
-#: elf64-ppc.c:7789
+#: elf64-ppc.c:7961
msgid ""
"warning: --plt-localentry is especially dangerous without ld.so support to "
"detect ABI violations"
msgstr ""
-#: elf64-ppc.c:8113
+#: elf64-ppc.c:8277
msgid "%H __tls_get_addr lost arg, TLS optimization disabled\n"
msgstr ""
-#: elf64-ppc.c:8548 elf64-ppc.c:9261
+#: elf64-ppc.c:8712 elf64-ppc.c:9425
#, c-format
msgid "%s defined on removed toc entry"
msgstr ""
-#: elf64-ppc.c:9218
+#: elf64-ppc.c:9382
#, c-format
msgid "%H: %s references optimized away TOC entry\n"
msgstr ""
-#: elf64-ppc.c:9439
+#: elf64-ppc.c:9603
#, c-format
msgid "%H: got/toc optimization is not supported for %s instruction\n"
msgstr ""
-#: elf64-ppc.c:10284
+#: elf64-ppc.c:10474
#, c-format
msgid "warning: discarding dynamic section %s"
msgstr ""
-#: elf64-ppc.c:11435
+#: elf64-ppc.c:11616
msgid "%P: cannot find opd entry toc for `%pT'\n"
msgstr ""
-#: elf64-ppc.c:11483 elf64-ppc.c:12032
+#: elf64-ppc.c:11664 elf64-ppc.c:12189
msgid ""
"%F%P: Could not assign group %pA target %pA to an output section. Retry "
"without --enable-non-contiguous-regions.\n"
msgstr ""
-#: elf64-ppc.c:11544
+#: elf64-ppc.c:11724
#, c-format
msgid "long branch stub `%s' offset overflow"
msgstr ""
-#: elf64-ppc.c:11571
+#: elf64-ppc.c:11751
#, c-format
msgid "can't find branch stub `%s'"
msgstr ""
-#: elf64-ppc.c:11635 elf64-ppc.c:11900 elf64-ppc.c:14204
+#: elf64-ppc.c:11815 elf64-ppc.c:12067 elf64-ppc.c:14574
#, c-format
msgid "%P: linkage table error against `%pT'\n"
msgstr ""
-#: elf64-ppc.c:12104
+#: elf64-ppc.c:12263
#, c-format
msgid "can't build branch stub `%s'"
msgstr ""
-#: elf64-ppc.c:13116
+#: elf64-ppc.c:13270
#, c-format
msgid "%pB section %pA exceeds stub group size"
msgstr ""
-#: elf64-ppc.c:14383
+#: elf64-ppc.c:14756
msgid "__tls_get_addr call offset overflow"
msgstr ""
-#: elf64-ppc.c:14722 elf64-ppc.c:14741
+#: elf64-ppc.c:15095 elf64-ppc.c:15114
#, c-format
msgid "%s offset too large for .eh_frame sdata4 encoding"
msgstr ""
-#: elf64-ppc.c:14773
+#: elf64-ppc.c:15195
#, c-format
msgid "linker stubs in %u group\n"
msgid_plural "linker stubs in %u groups\n"
msgstr[0] ""
msgstr[1] ""
-#: elf64-ppc.c:14780
+#: elf64-ppc.c:15202
#, c-format
msgid ""
"%s branch %lu\n"
-" branch toc adj %lu\n"
-" branch notoc %lu\n"
-" branch both %lu\n"
" long branch %lu\n"
-" long toc adj %lu\n"
-" long notoc %lu\n"
-" long both %lu\n"
" plt call %lu\n"
-" plt call save %lu\n"
-" plt call notoc %lu\n"
-" plt call both %lu\n"
" global entry %lu"
msgstr ""
-#: elf64-ppc.c:15180
+#: elf64-ppc.c:15584
#, c-format
msgid "%H: %s used with TLS symbol `%pT'\n"
msgstr ""
-#: elf64-ppc.c:15182
+#: elf64-ppc.c:15586
#, c-format
msgid "%H: %s used with non-TLS symbol `%pT'\n"
msgstr ""
-#: elf64-ppc.c:15938
+#: elf64-ppc.c:16370
#, c-format
msgid "%H: call to `%pT' lacks nop, can't restore toc; (plt call stub)\n"
msgstr ""
-#: elf64-ppc.c:15944
+#: elf64-ppc.c:16376
#, c-format
msgid ""
"%H: call to `%pT' lacks nop, can't restore toc; (toc save/adjust stub)\n"
msgstr ""
-#: elf64-ppc.c:16847
+#: elf64-ppc.c:17290
#, c-format
msgid "%H: %s for indirect function `%pT' unsupported\n"
msgstr ""
-#: elf64-ppc.c:16932
+#: elf64-ppc.c:17382
#, c-format
msgid ""
"%X%P: %pB: %s against %pT is not supported by glibc as a dynamic relocation\n"
msgstr ""
-#: elf64-ppc.c:16987
+#: elf64-ppc.c:17437
#, c-format
msgid "%P: %pB: %s is not supported for `%pT'\n"
msgstr ""
-#: elf64-ppc.c:17235
+#: elf64-ppc.c:17698
#, c-format
msgid "%H: error: %s not a multiple of %u\n"
msgstr ""
-#: elf64-ppc.c:17258
+#: elf64-ppc.c:17721
#, c-format
msgid "%H: unresolvable %s against `%pT'\n"
msgstr ""
-#: elf64-ppc.c:17402
+#: elf64-ppc.c:17866
#, c-format
msgid "%H: %s against `%pT': error %d\n"
msgstr ""
@@ -4845,110 +4846,110 @@ msgstr ""
msgid "%pB: linking UltraSPARC specific with HAL specific code"
msgstr ""
-#: elf64-x86-64.c:1415
+#: elf64-x86-64.c:1400
msgid "hidden symbol "
msgstr ""
-#: elf64-x86-64.c:1418
+#: elf64-x86-64.c:1403
msgid "internal symbol "
msgstr ""
-#: elf64-x86-64.c:1421 elf64-x86-64.c:1425
+#: elf64-x86-64.c:1406 elf64-x86-64.c:1410
msgid "protected symbol "
msgstr ""
-#: elf64-x86-64.c:1427
+#: elf64-x86-64.c:1412
msgid "symbol "
msgstr ""
-#: elf64-x86-64.c:1433
+#: elf64-x86-64.c:1418
msgid "undefined "
msgstr ""
-#: elf64-x86-64.c:1443
+#: elf64-x86-64.c:1428
msgid "a shared object"
msgstr ""
-#: elf64-x86-64.c:1445
+#: elf64-x86-64.c:1430
msgid "; recompile with -fPIC"
msgstr ""
-#: elf64-x86-64.c:1450
+#: elf64-x86-64.c:1435
msgid "a PIE object"
msgstr ""
-#: elf64-x86-64.c:1452
+#: elf64-x86-64.c:1437
msgid "a PDE object"
msgstr ""
-#: elf64-x86-64.c:1454
+#: elf64-x86-64.c:1439
msgid "; recompile with -fPIE"
msgstr ""
-#: elf64-x86-64.c:1458
+#: elf64-x86-64.c:1443
#, c-format
msgid "%pB: relocation %s against %s%s`%s' can not be used when making %s%s"
msgstr ""
-#: elf64-x86-64.c:1966
+#: elf64-x86-64.c:1948
#, c-format
msgid "%pB: relocation %s against symbol `%s' isn't supported in x32 mode"
msgstr ""
-#: elf64-x86-64.c:2123
+#: elf64-x86-64.c:2092
#, c-format
msgid "%pB: '%s' accessed both as normal and thread local symbol"
msgstr ""
-#: elf64-x86-64.c:2752 elfnn-aarch64.c:5545 elfnn-riscv.c:2126
+#: elf64-x86-64.c:2727 elfnn-aarch64.c:5545 elfnn-riscv.c:2140
#, c-format
msgid ""
"%pB: relocation %s against STT_GNU_IFUNC symbol `%s' has non-zero addend: "
"%<PRId64>"
msgstr ""
-#: elf64-x86-64.c:3008
+#: elf64-x86-64.c:2989
#, c-format
msgid ""
"%pB: relocation R_X86_64_GOTOFF64 against undefined %s `%s' can not be used "
"when making a shared object"
msgstr ""
-#: elf64-x86-64.c:3022
+#: elf64-x86-64.c:3003
#, c-format
msgid ""
"%pB: relocation R_X86_64_GOTOFF64 against protected %s `%s' can not be used "
"when making a shared object"
msgstr ""
-#: elf64-x86-64.c:3305
+#: elf64-x86-64.c:3296
#, c-format
msgid ""
"%pB: addend %s%#x in relocation %s against symbol `%s' at %#<PRIx64> in "
"section `%pA' is out of range"
msgstr ""
-#: elf64-x86-64.c:3445 elflink.c:13489
+#: elf64-x86-64.c:3439 elflink.c:13654
msgid "%F%P: corrupt input: %pB\n"
msgstr ""
-#: elf64-x86-64.c:4131
+#: elf64-x86-64.c:4125
#, c-format
msgid ""
" failed to convert GOTPCREL relocation against '%s'; relink with --no-relax\n"
msgstr ""
-#: elf64-x86-64.c:4292
+#: elf64-x86-64.c:4286
#, c-format
msgid "%F%pB: PC-relative offset overflow in PLT entry for `%s'\n"
msgstr ""
-#: elf64-x86-64.c:4360
+#: elf64-x86-64.c:4354
#, c-format
msgid "%F%pB: branch displacement overflow in PLT entry for `%s'\n"
msgstr ""
-#: elf64-x86-64.c:4413
+#: elf64-x86-64.c:4407
#, c-format
msgid "%F%pB: PC-relative offset overflow in GOT PLT entry for `%s'\n"
msgstr ""
@@ -4958,321 +4959,323 @@ msgstr ""
msgid "warning: %pB has a section extending past end of file"
msgstr ""
-#: elfcode.h:775
+#: elfcode.h:776
#, c-format
msgid "warning: %pB has a corrupt string table index - ignoring"
msgstr ""
-#: elfcode.h:819
+#: elfcode.h:820
#, c-format
msgid "warning: %pB has a program header with invalid alignment"
msgstr ""
-#: elfcode.h:1244
+#: elfcode.h:1245
#, c-format
msgid "%pB: version count (%<PRId64>) does not match symbol count (%ld)"
msgstr ""
-#: elfcore.h:308
+#: elfcore.h:300
#, c-format
-msgid ""
-"warning: %pB is truncated: expected core file size >= %<PRIu64>, found: "
-"%<PRIu64>"
+msgid "warning: %pB has a segment extending past end of file"
msgstr ""
-#: elflink.c:1384
+#: elflink.c:1406
#, c-format
msgid ""
"%s: TLS definition in %pB section %pA mismatches non-TLS definition in %pB "
"section %pA"
msgstr ""
-#: elflink.c:1390
+#: elflink.c:1412
#, c-format
msgid "%s: TLS reference in %pB mismatches non-TLS reference in %pB"
msgstr ""
-#: elflink.c:1396
+#: elflink.c:1418
#, c-format
msgid ""
"%s: TLS definition in %pB section %pA mismatches non-TLS reference in %pB"
msgstr ""
-#: elflink.c:1402
+#: elflink.c:1424
#, c-format
msgid ""
"%s: TLS reference in %pB mismatches non-TLS definition in %pB section %pA"
msgstr ""
-#: elflink.c:2114
+#: elflink.c:2136
#, c-format
msgid "%pB: unexpected redefinition of indirect versioned symbol `%s'"
msgstr ""
-#: elflink.c:2496
+#: elflink.c:2597
#, c-format
msgid "%pB: version node not found for symbol %s"
msgstr ""
-#: elflink.c:2587
+#: elflink.c:2688
#, c-format
msgid ""
"%pB: bad reloc symbol index (%#<PRIx64> >= %#lx) for offset %#<PRIx64> in "
"section `%pA'"
msgstr ""
-#: elflink.c:2599
+#: elflink.c:2700
#, c-format
msgid ""
"%pB: non-zero symbol index (%#<PRIx64>) for offset %#<PRIx64> in section `"
"%pA' when the object file has no symbol table"
msgstr ""
-#: elflink.c:2810
+#: elflink.c:2911
#, c-format
msgid "%pB: relocation size mismatch in %pB section %pA"
msgstr ""
-#: elflink.c:3139
+#: elflink.c:3240
#, c-format
msgid "warning: type and size of dynamic symbol `%s' are not defined"
msgstr ""
-#: elflink.c:3199
+#: elflink.c:3300
msgid "%P: copy reloc against protected `%pT' is dangerous\n"
msgstr ""
-#: elflink.c:4145
+#: elflink.c:4262
#, c-format
msgid "alternate ELF machine code found (%d) in %pB, expecting %d"
msgstr ""
-#: elflink.c:4628
+#: elflink.c:4745
#, c-format
msgid "%pB: invalid version offset %lx (max %lx)"
msgstr ""
-#: elflink.c:4696
+#: elflink.c:4813
#, c-format
msgid "%pB: %s local symbol at index %lu (>= sh_info of %lu)"
msgstr ""
-#: elflink.c:4844
+#: elflink.c:4961
#, c-format
msgid "%pB: not enough version information"
msgstr ""
-#: elflink.c:4882
+#: elflink.c:4999
#, c-format
msgid "%pB: %s: invalid version %u (max %d)"
msgstr ""
-#: elflink.c:4919
+#: elflink.c:5036
#, c-format
msgid "%pB: %s: invalid needed version %d"
msgstr ""
-#: elflink.c:5337
+#: elflink.c:5455
#, c-format
msgid "%pB: undefined reference to symbol '%s'"
msgstr ""
-#: elflink.c:6404
+#: elflink.c:6523
#, c-format
msgid "%pB: stack size specified and %s set"
msgstr ""
-#: elflink.c:6408
+#: elflink.c:6527
#, c-format
msgid "%pB: %s not absolute"
msgstr ""
-#: elflink.c:6605
+#: elflink.c:6739
#, c-format
msgid "%s: undefined version: %s"
msgstr ""
-#: elflink.c:7177
+#: elflink.c:7303
#, c-format
msgid "%pB: .preinit_array section is not allowed in DSO"
msgstr ""
-#: elflink.c:8769
+#: elflink.c:8895
#, c-format
msgid "undefined %s reference in complex symbol: %s"
msgstr ""
-#: elflink.c:8932 elflink.c:8940
+#: elflink.c:9058 elflink.c:9066
msgid "division by zero"
msgstr ""
-#: elflink.c:8954
+#: elflink.c:9080
#, c-format
msgid "unknown operator '%c' in complex symbol"
msgstr ""
#. PR 21524: Let the user know if a symbol was removed by garbage collection.
-#: elflink.c:9292
+#: elflink.c:9418
#, c-format
msgid ""
"%pB:%pA: error: relocation references symbol %s which was removed by garbage "
"collection"
msgstr ""
-#: elflink.c:9295
+#: elflink.c:9421
#, c-format
msgid "%pB:%pA: error: try relinking with --gc-keep-exported enabled"
msgstr ""
-#: elflink.c:9540 elflink.c:9558 elflink.c:9597 elflink.c:9615
+#: elflink.c:9666 elflink.c:9684 elflink.c:9723 elflink.c:9741
#, c-format
msgid "%pB: unable to sort relocs - they are in more than one size"
msgstr ""
#. The section size is not divisible by either -
#. something is wrong.
-#: elflink.c:9574 elflink.c:9631
+#: elflink.c:9700 elflink.c:9757
#, c-format
msgid "%pB: unable to sort relocs - they are of an unknown size"
msgstr ""
-#: elflink.c:9683
+#: elflink.c:9809
msgid "not enough memory to sort relocations"
msgstr ""
-#: elflink.c:10027
+#: elflink.c:10149
#, c-format
msgid "%pB: too many sections: %d (>= %d)"
msgstr ""
-#: elflink.c:10303
+#: elflink.c:10425
#, c-format
msgid "%pB: internal symbol `%s' in %pB is referenced by DSO"
msgstr ""
-#: elflink.c:10306
+#: elflink.c:10428
#, c-format
msgid "%pB: hidden symbol `%s' in %pB is referenced by DSO"
msgstr ""
-#: elflink.c:10309
+#: elflink.c:10431
#, c-format
msgid "%pB: local symbol `%s' in %pB is referenced by DSO"
msgstr ""
-#: elflink.c:10395
+#: elflink.c:10517
#, c-format
msgid "%pB: could not find output section %pA for input section %pA"
msgstr ""
-#: elflink.c:10549
+#: elflink.c:10671
#, c-format
msgid "%pB: protected symbol `%s' isn't defined"
msgstr ""
-#: elflink.c:10552
+#: elflink.c:10674
#, c-format
msgid "%pB: internal symbol `%s' isn't defined"
msgstr ""
-#: elflink.c:10555
+#: elflink.c:10677
#, c-format
msgid "%pB: hidden symbol `%s' isn't defined"
msgstr ""
-#: elflink.c:10587
+#: elflink.c:10709
#, c-format
msgid "%pB: no symbol version section for versioned symbol `%s'"
msgstr ""
-#: elflink.c:10986
+#: elflink.c:11108
#, c-format
msgid ""
"warning: --enable-non-contiguous-regions discards section `%s' from '%s'\n"
msgstr ""
-#: elflink.c:11242
-#, c-format
-msgid "error: %pB: size of section %pA is not multiple of address size"
-msgstr ""
-
-#: elflink.c:11287
+#: elflink.c:11384
#, c-format
msgid ""
"error: %pB contains a reloc (%#<PRIx64>) for section %pA that references a "
"non-existent global symbol"
msgstr ""
-#: elflink.c:12008
+#: elflink.c:11844
+#, c-format
+msgid "error: %pB: size of section %pA is not multiple of address size"
+msgstr ""
+
+#: elflink.c:12121
#, c-format
msgid "%pB: no symbol found for import library"
msgstr ""
-#: elflink.c:12651
+#: elflink.c:12696
+msgid "%F%P: %pB: failed to finish relative relocations\n"
+msgstr ""
+
+#: elflink.c:12773
#, c-format
msgid "%pB: file class %s incompatible with %s"
msgstr ""
-#: elflink.c:12901
+#: elflink.c:13023
#, c-format
msgid "%pB: failed to generate import library"
msgstr ""
-#: elflink.c:13027
+#: elflink.c:13191
#, c-format
msgid "warning: %s section has zero size"
msgstr ""
-#: elflink.c:13075
+#: elflink.c:13239
#, c-format
msgid "warning: section '%s' is being made into a note"
msgstr ""
-#: elflink.c:13168
+#: elflink.c:13333
msgid "%P%X: read-only segment has dynamic relocations\n"
msgstr ""
-#: elflink.c:13171
+#: elflink.c:13336
msgid "%P: warning: creating DT_TEXTREL in a shared object\n"
msgstr ""
-#: elflink.c:13174
+#: elflink.c:13339
msgid "%P: warning: creating DT_TEXTREL in a PDE\n"
msgstr ""
-#: elflink.c:13177
+#: elflink.c:13342
msgid "%P: warning: creating DT_TEXTREL in a PIE\n"
msgstr ""
-#: elflink.c:13310
+#: elflink.c:13475
msgid "%P%X: can not read symbols: %E\n"
msgstr ""
-#: elflink.c:13735
+#: elflink.c:13900
msgid "%F%P: %pB(%pA): error: need linked-to section for --gc-sections\n"
msgstr ""
-#: elflink.c:14213
+#: elflink.c:14378
#, c-format
msgid "%pB: %pA+%#<PRIx64>: no symbol found for INHERIT"
msgstr ""
-#: elflink.c:14254
+#: elflink.c:14419
#, c-format
msgid "%pB: section '%pA': corrupt VTENTRY entry"
msgstr ""
-#: elflink.c:14397
+#: elflink.c:14562
#, c-format
msgid "unrecognized INPUT_SECTION_FLAG %s\n"
msgstr ""
-#: elflink.c:15145
+#: elflink.c:15310
#, c-format
msgid "%P: %pB: warning: relocation against `%s' in read-only section `%pA'\n"
msgstr ""
-#: elflink.c:15234
+#: elflink.c:15399
msgid ""
"%P: warning: GNU indirect functions with DT_TEXTREL may result in a segfault "
"at runtime; recompile with %s\n"
@@ -5284,7 +5287,7 @@ msgid ""
"%pB: warning: Weak TLS is implementation defined and may not work as expected"
msgstr ""
-#: elfxx-aarch64.c:738 elfnn-aarch64.c:9912 elfnn-aarch64.c:9919
+#: elfxx-aarch64.c:738 elfnn-aarch64.c:9914 elfnn-aarch64.c:9921
#, c-format
msgid ""
"%pB: warning: BTI turned on by -z force-bti when all inputs do not have BTI "
@@ -5433,318 +5436,345 @@ msgid ""
"consider using `-Ttext-segment=...'"
msgstr ""
-#: elfxx-mips.c:13316 reloc.c:8430
+#: elfxx-mips.c:13335 reloc.c:8521
#, c-format
msgid "%X%P: %pB(%pA): error: relocation for offset %V has no value\n"
msgstr ""
-#: elfxx-mips.c:13417 reloc.c:8518
+#: elfxx-mips.c:13436 reloc.c:8609
#, c-format
msgid "%X%P: %pB(%pA): relocation \"%pR\" is not supported\n"
msgstr ""
-#: elfxx-mips.c:13426 reloc.c:8527
+#: elfxx-mips.c:13445 reloc.c:8618
#, c-format
msgid "%X%P: %pB(%pA): relocation \"%pR\" returns an unrecognized value %x\n"
msgstr ""
-#: elfxx-mips.c:14611
+#: elfxx-mips.c:14627
#, c-format
msgid "%pB: unknown architecture %s"
msgstr ""
-#: elfxx-mips.c:15145
+#: elfxx-mips.c:15161
#, c-format
msgid "%pB: illegal section name `%pA'"
msgstr ""
-#: elfxx-mips.c:15422
+#: elfxx-mips.c:15438
#, c-format
msgid "%pB: warning: linking abicalls files with non-abicalls files"
msgstr ""
-#: elfxx-mips.c:15439
+#: elfxx-mips.c:15455
#, c-format
msgid "%pB: linking 32-bit code with 64-bit code"
msgstr ""
-#: elfxx-mips.c:15471 elfxx-mips.c:15537 elfxx-mips.c:15552
+#: elfxx-mips.c:15487 elfxx-mips.c:15553 elfxx-mips.c:15568
#, c-format
msgid "%pB: linking %s module with previous %s modules"
msgstr ""
-#: elfxx-mips.c:15495
+#: elfxx-mips.c:15511
#, c-format
msgid "%pB: ABI mismatch: linking %s module with previous %s modules"
msgstr ""
-#: elfxx-mips.c:15520
+#: elfxx-mips.c:15536
#, c-format
msgid "%pB: ASE mismatch: linking %s module with previous %s modules"
msgstr ""
-#: elfxx-mips.c:15654
+#: elfxx-mips.c:15670
#, c-format
msgid ""
"warning: %pB uses unknown floating point ABI %d (set by %pB), %pB uses "
"unknown floating point ABI %d"
msgstr ""
-#: elfxx-mips.c:15660
+#: elfxx-mips.c:15676
#, c-format
msgid ""
"warning: %pB uses unknown floating point ABI %d (set by %pB), %pB uses %s"
msgstr ""
-#: elfxx-mips.c:15666
+#: elfxx-mips.c:15682
#, c-format
msgid ""
"warning: %pB uses %s (set by %pB), %pB uses unknown floating point ABI %d"
msgstr ""
-#: elfxx-mips.c:15680
+#: elfxx-mips.c:15696
#, c-format
msgid "warning: %pB uses %s (set by %pB), %pB uses %s"
msgstr ""
-#: elfxx-mips.c:15699
+#: elfxx-mips.c:15715
#, c-format
msgid "warning: %pB uses %s (set by %pB), %pB uses unknown MSA ABI %d"
msgstr ""
-#: elfxx-mips.c:15711
+#: elfxx-mips.c:15727
#, c-format
msgid "warning: %pB uses unknown MSA ABI %d (set by %pB), %pB uses %s"
msgstr ""
-#: elfxx-mips.c:15720
+#: elfxx-mips.c:15736
#, c-format
msgid ""
"warning: %pB uses unknown MSA ABI %d (set by %pB), %pB uses unknown MSA ABI "
"%d"
msgstr ""
-#: elfxx-mips.c:15782
+#: elfxx-mips.c:15798
#, c-format
msgid "%pB: endianness incompatible with that of the selected emulation"
msgstr ""
-#: elfxx-mips.c:15796
+#: elfxx-mips.c:15812
#, c-format
msgid "%pB: ABI is incompatible with that of the selected emulation"
msgstr ""
-#: elfxx-mips.c:15849
+#: elfxx-mips.c:15865
#, c-format
msgid "%pB: warning: inconsistent ISA between e_flags and .MIPS.abiflags"
msgstr ""
-#: elfxx-mips.c:15854
+#: elfxx-mips.c:15870
#, c-format
msgid ""
"%pB: warning: inconsistent FP ABI between .gnu.attributes and .MIPS.abiflags"
msgstr ""
-#: elfxx-mips.c:15858
+#: elfxx-mips.c:15874
#, c-format
msgid "%pB: warning: inconsistent ASEs between e_flags and .MIPS.abiflags"
msgstr ""
-#: elfxx-mips.c:15865
+#: elfxx-mips.c:15881
#, c-format
msgid ""
"%pB: warning: inconsistent ISA extensions between e_flags and .MIPS.abiflags"
msgstr ""
-#: elfxx-mips.c:15869
+#: elfxx-mips.c:15885
#, c-format
msgid ""
"%pB: warning: unexpected flag in the flags2 field of .MIPS.abiflags (0x%lx)"
msgstr ""
-#: elfxx-mips.c:16060
+#: elfxx-mips.c:16076
msgid "-mips32r2 -mfp64 (12 callee-saved)"
msgstr ""
-#: elfxx-mips.c:16122 elfxx-mips.c:16133
+#: elfxx-mips.c:16138 elfxx-mips.c:16149
msgid "None"
msgstr ""
-#: elfxx-mips.c:16124 elfxx-mips.c:16193
+#: elfxx-mips.c:16140 elfxx-mips.c:16209
msgid "Unknown"
msgstr ""
-#: elfxx-mips.c:16204
+#: elfxx-mips.c:16220
#, c-format
msgid "Hard or soft float\n"
msgstr ""
-#: elfxx-mips.c:16207
+#: elfxx-mips.c:16223
#, c-format
msgid "Hard float (double precision)\n"
msgstr ""
-#: elfxx-mips.c:16210
+#: elfxx-mips.c:16226
#, c-format
msgid "Hard float (single precision)\n"
msgstr ""
-#: elfxx-mips.c:16213
+#: elfxx-mips.c:16229
#, c-format
msgid "Soft float\n"
msgstr ""
-#: elfxx-mips.c:16216
+#: elfxx-mips.c:16232
#, c-format
msgid "Hard float (MIPS32r2 64-bit FPU 12 callee-saved)\n"
msgstr ""
-#: elfxx-mips.c:16219
+#: elfxx-mips.c:16235
#, c-format
msgid "Hard float (32-bit CPU, Any FPU)\n"
msgstr ""
-#: elfxx-mips.c:16222
+#: elfxx-mips.c:16238
#, c-format
msgid "Hard float (32-bit CPU, 64-bit FPU)\n"
msgstr ""
-#: elfxx-mips.c:16225
+#: elfxx-mips.c:16241
#, c-format
msgid "Hard float compat (32-bit CPU, 64-bit FPU)\n"
msgstr ""
-#: elfxx-mips.c:16257
+#: elfxx-mips.c:16273
#, c-format
msgid " [abi=O32]"
msgstr ""
-#: elfxx-mips.c:16259
+#: elfxx-mips.c:16275
#, c-format
msgid " [abi=O64]"
msgstr ""
-#: elfxx-mips.c:16261
+#: elfxx-mips.c:16277
#, c-format
msgid " [abi=EABI32]"
msgstr ""
-#: elfxx-mips.c:16263
+#: elfxx-mips.c:16279
#, c-format
msgid " [abi=EABI64]"
msgstr ""
-#: elfxx-mips.c:16265
+#: elfxx-mips.c:16281
#, c-format
msgid " [abi unknown]"
msgstr ""
-#: elfxx-mips.c:16267
+#: elfxx-mips.c:16283
#, c-format
msgid " [abi=N32]"
msgstr ""
-#: elfxx-mips.c:16269
+#: elfxx-mips.c:16285
#, c-format
msgid " [abi=64]"
msgstr ""
-#: elfxx-mips.c:16271
+#: elfxx-mips.c:16287
#, c-format
msgid " [no abi set]"
msgstr ""
-#: elfxx-mips.c:16296
+#: elfxx-mips.c:16312
#, c-format
msgid " [unknown ISA]"
msgstr ""
-#: elfxx-mips.c:16316
+#: elfxx-mips.c:16332
#, c-format
msgid " [not 32bitmode]"
msgstr ""
-#: elfxx-riscv.c:1367
+#: elfxx-riscv.c:1563
#, c-format
msgid "x ISA extension `%s' must be set with the versions"
msgstr ""
-#: elfxx-riscv.c:1371
+#: elfxx-riscv.c:1569
#, c-format
msgid "cannot find default versions of the ISA extension `%s'"
msgstr ""
-#: elfxx-riscv.c:1441
-#, c-format
-msgid "%s: expect number after `%dp'"
-msgstr ""
-
-#: elfxx-riscv.c:1546
+#: elfxx-riscv.c:1669
#, c-format
msgid "%s: first ISA extension must be `e', `i' or `g'"
msgstr ""
-#: elfxx-riscv.c:1573
+#: elfxx-riscv.c:1698
#, c-format
msgid "%s: unknown standard ISA extension `%c'"
msgstr ""
-#: elfxx-riscv.c:1577
+#: elfxx-riscv.c:1708
#, c-format
msgid "%s: standard ISA extension `%c' is not in canonical order"
msgstr ""
-#: elfxx-riscv.c:1627
+#: elfxx-riscv.c:1759
#, c-format
msgid "%s: unknown prefix class for the ISA extension `%s'"
msgstr ""
-#: elfxx-riscv.c:1661
+#: elfxx-riscv.c:1795
+#, c-format
+msgid "%s: invalid prefixed ISA extension `%s' ends with <number>p"
+msgstr ""
+
+#: elfxx-riscv.c:1815
#, c-format
msgid "%s: unknown prefixed ISA extension `%s'"
msgstr ""
-#: elfxx-riscv.c:1672
+#: elfxx-riscv.c:1826
#, c-format
msgid "%s: duplicate prefixed ISA extension `%s'"
msgstr ""
-#: elfxx-riscv.c:1682
+#: elfxx-riscv.c:1836
#, c-format
msgid ""
"%s: prefixed ISA extension `%s' is not in expected order. It must come "
"before `%s'"
msgstr ""
-#: elfxx-riscv.c:1698
+#: elfxx-riscv.c:1852
#, c-format
msgid "%s: prefixed ISA extension must separate with _"
msgstr ""
-#: elfxx-riscv.c:1737
+#: elfxx-riscv.c:1891
#, c-format
msgid "rv%d does not support the `e' extension"
msgstr ""
-#: elfxx-riscv.c:1744
+#: elfxx-riscv.c:1898
#, c-format
msgid "rv%d does not support the `q' extension"
msgstr ""
-#: elfxx-riscv.c:1751
+#: elfxx-riscv.c:1905
msgid "rv32e does not support the `f' extension"
msgstr ""
-#: elfxx-riscv.c:1777
+#: elfxx-riscv.c:1912
+msgid "`zfinx' is conflict with the `f/d/q' extension"
+msgstr ""
+
+#: elfxx-riscv.c:1933
+msgid "zvl*b extensions need to enable either `v' or `zve' extension"
+msgstr ""
+
+#: elfxx-riscv.c:1995
#, c-format
msgid "%s: ISA string cannot contain uppercase letters"
msgstr ""
-#: elfxx-riscv.c:1803
+#: elfxx-riscv.c:2023
#, c-format
msgid "%s: ISA string must begin with rv32 or rv64"
msgstr ""
+#: elfxx-riscv.c:2259
+#, c-format
+msgid "invalid ISA extension ends with <number>p in .option arch `%s'"
+msgstr ""
+
+#: elfxx-riscv.c:2282
+#, c-format
+msgid "unknown ISA extension `%s' in .option arch `%s'"
+msgstr ""
+
+#: elfxx-riscv.c:2293
+#, c-format
+msgid "cannot + or - base extension `%s' in .option arch `%s'"
+msgstr ""
+
+#: elfxx-riscv.c:2413
+msgid "internal: unreachable INSN_CLASS_*"
+msgstr ""
+
#: elfxx-sparc.c:3021 elfnn-aarch64.c:5529
#, c-format
msgid ""
@@ -5756,100 +5786,125 @@ msgstr ""
msgid "%pB: cannot link together %s and %s objects"
msgstr ""
-#: elfxx-x86.c:980
+#: elfxx-x86.c:1026
+#, c-format
+msgid "%F%P: %pB: failed to allocate relative reloc record\n"
+msgstr ""
+
+#: elfxx-x86.c:1368
+#, c-format
+msgid "%F%P: %pB: failed to allocate 64-bit DT_RELR bitmap\n"
+msgstr ""
+
+#: elfxx-x86.c:1404
+#, c-format
+msgid "%F%P: %pB: failed to allocate 32-bit DT_RELR bitmap\n"
+msgstr ""
+
+#: elfxx-x86.c:1707
+#, c-format
+msgid ""
+"%F%P: %pB: size of compact relative reloc section is changed: new (%lu) != "
+"old (%lu)\n"
+msgstr ""
+
+#: elfxx-x86.c:1729
+#, c-format
+msgid "%F%P: %pB: failed to allocate compact relative reloc section\n"
+msgstr ""
+
+#: elfxx-x86.c:1987
#, c-format
msgid ""
"%F%P: %pB: relocation %s against absolute symbol `%s' in section `%pA' is "
"disallowed\n"
msgstr ""
-#: elfxx-x86.c:1062
+#: elfxx-x86.c:2069
msgid "%P: %pB: warning: relocation in read-only section `%pA'\n"
msgstr ""
-#: elfxx-x86.c:1782
-#, c-format
+#: elfxx-x86.c:2785
msgid ""
-"%pB: %s (offset: 0x%s, info: 0x%s, addend: 0x%s) against '%s' for section "
+"%pB: %s (offset: 0x%v, info: 0x%v, addend: 0x%v) against '%s' for section "
"'%pA' in %pB\n"
msgstr ""
-#: elfxx-x86.c:1789
-#, c-format
+#: elfxx-x86.c:2791
msgid ""
-"%pB: %s (offset: 0x%s, info: 0x%s) against '%s' for section '%pA' in %pB\n"
+"%pB: %s (offset: 0x%v, info: 0x%v) against '%s' for section '%pA' in %pB\n"
msgstr ""
-#: elfxx-x86.c:2386
+#: elfxx-x86.c:3388
#, c-format
msgid "error: %pB: <corrupt x86 property (0x%x) size: 0x%x>"
msgstr ""
-#: elfxx-x86.c:2733
+#: elfxx-x86.c:3735
msgid "%P: %pB: warning: missing %s\n"
msgstr ""
-#: elfxx-x86.c:2734
+#: elfxx-x86.c:3736
msgid "%X%P: %pB: error: missing %s\n"
msgstr ""
-#: elfxx-x86.c:2797
+#: elfxx-x86.c:3799
msgid "IBT and SHSTK properties"
msgstr ""
-#: elfxx-x86.c:2799
+#: elfxx-x86.c:3801
msgid "IBT property"
msgstr ""
-#: elfxx-x86.c:2801
+#: elfxx-x86.c:3803
msgid "SHSTK property"
msgstr ""
-#: elfxx-x86.c:2806
+#: elfxx-x86.c:3808
msgid "LAM_U48 property"
msgstr ""
-#: elfxx-x86.c:2811
+#: elfxx-x86.c:3813
msgid "LAM_U57 property"
msgstr ""
-#: elfxx-x86.c:2955
+#: elfxx-x86.c:3957
msgid "%F%P: failed to create VxWorks dynamic sections\n"
msgstr ""
-#: elfxx-x86.c:2964
+#: elfxx-x86.c:3966
msgid "%F%P: failed to create GOT sections\n"
msgstr ""
-#: elfxx-x86.c:2982
+#: elfxx-x86.c:3984
msgid "%F%P: failed to create ifunc sections\n"
msgstr ""
-#: elfxx-x86.c:3019
+#: elfxx-x86.c:4021
msgid "%F%P: failed to create GOT PLT section\n"
msgstr ""
-#: elfxx-x86.c:3038
+#: elfxx-x86.c:4040
msgid "%F%P: failed to create IBT-enabled PLT section\n"
msgstr ""
-#: elfxx-x86.c:3052
+#: elfxx-x86.c:4054
msgid "%F%P: failed to create BND PLT section\n"
msgstr ""
-#: elfxx-x86.c:3072
+#: elfxx-x86.c:4074
msgid "%F%P: failed to create PLT .eh_frame section\n"
msgstr ""
-#: elfxx-x86.c:3085
+#: elfxx-x86.c:4087
msgid "%F%P: failed to create GOT PLT .eh_frame section\n"
msgstr ""
-#: elfxx-x86.c:3099
+#: elfxx-x86.c:4101
msgid "%F%P: failed to create the second PLT .eh_frame section\n"
msgstr ""
-#: elfxx-x86.c:3141
+#: elfxx-x86.c:4143
msgid "%X%P: attempted static link of dynamic object `%pB'\n"
msgstr ""
@@ -5923,76 +5978,76 @@ msgstr ""
msgid "Deprecated %s called\n"
msgstr ""
-#: linker.c:1706
+#: linker.c:1708
#, c-format
msgid "%pB: indirect symbol `%s' to `%s' is a loop"
msgstr ""
-#: linker.c:2577
+#: linker.c:2579
#, c-format
msgid "attempt to do relocatable link with %s input and %s output"
msgstr ""
-#: linker.c:2861
+#: linker.c:2863
#, c-format
msgid "%pB: ignoring duplicate section `%pA'\n"
msgstr ""
-#: linker.c:2871 linker.c:2881
+#: linker.c:2873 linker.c:2883
#, c-format
msgid "%pB: duplicate section `%pA' has different size\n"
msgstr ""
-#: linker.c:2890 linker.c:2896
+#: linker.c:2892 linker.c:2898
#, c-format
msgid "%pB: could not read contents of section `%pA'\n"
msgstr ""
-#: linker.c:2901
+#: linker.c:2903
#, c-format
msgid "%pB: duplicate section `%pA' has different contents\n"
msgstr ""
-#: linker.c:3419
+#: linker.c:3421
#, c-format
msgid "%pB: compiled for a big endian system and target is little endian"
msgstr ""
-#: linker.c:3422
+#: linker.c:3424
#, c-format
msgid "%pB: compiled for a little endian system and target is big endian"
msgstr ""
-#: mach-o-arm.c:172
+#: mach-o-arm.c:169 mach-o-arm.c:301
msgid "malformed mach-o ARM reloc pair: reloc is first reloc"
msgstr ""
-#: mach-o-arm.c:188
+#: mach-o-arm.c:185
#, c-format
msgid "malformed mach-o ARM reloc pair: invalid length: %d"
msgstr ""
-#: mach-o-arm.c:203
+#: mach-o-arm.c:200
#, c-format
msgid "malformed mach-o ARM sectdiff reloc: invalid length: %d"
msgstr ""
-#: mach-o-arm.c:218
+#: mach-o-arm.c:215
#, c-format
msgid "malformed mach-o ARM local sectdiff reloc: invalid length: %d"
msgstr ""
-#: mach-o-arm.c:233
+#: mach-o-arm.c:230
#, c-format
msgid "malformed mach-o ARM half sectdiff reloc: invalid length: %d"
msgstr ""
-#: mach-o-arm.c:265
+#: mach-o-arm.c:262
#, c-format
msgid "malformed mach-o ARM vanilla reloc: invalid length: %d (pcrel: %d)"
msgstr ""
-#: mach-o-arm.c:329
+#: mach-o-arm.c:332
#, c-format
msgid "malformed mach-o ARM reloc: unknown reloc type: %d"
msgstr ""
@@ -6099,14 +6154,12 @@ msgstr ""
#: mach-o.c:3659
#, c-format
-msgid ""
-"bfd_mach_o_read_section_32: overlarge alignment value: %#lx, using 32 instead"
+msgid "bfd_mach_o_read_section_32: overlarge alignment value: %#lx"
msgstr ""
#: mach-o.c:3702
#, c-format
-msgid ""
-"bfd_mach_o_read_section_64: overlarge alignment value: %#lx, using 32 instead"
+msgid "bfd_mach_o_read_section_64: overlarge alignment value: %#lx"
msgstr ""
#: mach-o.c:3753
@@ -6153,148 +6206,153 @@ msgstr ""
msgid "%pB: access beyond end of merged section (%<PRId64>)"
msgstr ""
-#: mmo.c:475
+#: mmo.c:472
#, c-format
msgid "%pB: no core to allocate section name %s"
msgstr ""
-#: mmo.c:540
+#: mmo.c:537
#, c-format
msgid "%pB: no core to allocate a symbol %d bytes long"
msgstr ""
-#: mmo.c:951
+#: mmo.c:960
#, c-format
msgid "%pB: attempt to emit contents at non-multiple-of-4 address %#<PRIx64>"
msgstr ""
-#: mmo.c:1247
+#: mmo.c:1256
#, c-format
msgid "%pB: invalid mmo file: initialization value for $255 is not `Main'\n"
msgstr ""
-#: mmo.c:1394
+#: mmo.c:1403
#, c-format
msgid ""
"%pB: unsupported wide character sequence 0x%02X 0x%02X after symbol name "
"starting with `%s'\n"
msgstr ""
-#: mmo.c:1627
+#: mmo.c:1419
+#, c-format
+msgid "%pB: symbol name exceeds given max length of %d"
+msgstr ""
+
+#: mmo.c:1646
#, c-format
msgid "%pB: invalid mmo file: unsupported lopcode `%d'\n"
msgstr ""
-#: mmo.c:1638
+#: mmo.c:1657
#, c-format
msgid "%pB: invalid mmo file: expected YZ = 1 got YZ = %d for lop_quote\n"
msgstr ""
-#: mmo.c:1678
+#: mmo.c:1701
#, c-format
msgid ""
"%pB: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_loc\n"
msgstr ""
-#: mmo.c:1729
+#: mmo.c:1752
#, c-format
msgid ""
"%pB: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_fixo\n"
msgstr ""
-#: mmo.c:1770
+#: mmo.c:1801
#, c-format
msgid "%pB: invalid mmo file: expected y = 0, got y = %d for lop_fixrx\n"
msgstr ""
-#: mmo.c:1781
+#: mmo.c:1812
#, c-format
msgid ""
"%pB: invalid mmo file: expected z = 16 or z = 24, got z = %d for lop_fixrx\n"
msgstr ""
-#: mmo.c:1806
+#: mmo.c:1837
#, c-format
msgid ""
"%pB: invalid mmo file: leading byte of operand word must be 0 or 1, got %d "
"for lop_fixrx\n"
msgstr ""
-#: mmo.c:1831
+#: mmo.c:1866
#, c-format
msgid "%pB: cannot allocate file name for file number %d, %d bytes\n"
msgstr ""
-#: mmo.c:1853
+#: mmo.c:1888
#, c-format
msgid ""
"%pB: invalid mmo file: file number %d `%s', was already entered as `%s'\n"
msgstr ""
-#: mmo.c:1867
+#: mmo.c:1902
#, c-format
msgid ""
"%pB: invalid mmo file: file name for number %d was not specified before use\n"
msgstr ""
-#: mmo.c:1974
+#: mmo.c:2014
#, c-format
msgid ""
"%pB: invalid mmo file: fields y and z of lop_stab non-zero, y: %d, z: %d\n"
msgstr ""
-#: mmo.c:2011
+#: mmo.c:2051
#, c-format
msgid "%pB: invalid mmo file: lop_end not last item in file\n"
msgstr ""
-#: mmo.c:2025
+#: mmo.c:2065
#, c-format
msgid ""
"%pB: invalid mmo file: YZ of lop_end (%ld) not equal to the number of tetras "
"to the preceding lop_stab (%ld)\n"
msgstr ""
-#: mmo.c:2734
+#: mmo.c:2778
#, c-format
msgid "%pB: invalid symbol table: duplicate symbol `%s'\n"
msgstr ""
-#: mmo.c:2978
+#: mmo.c:3022
#, c-format
msgid ""
"%pB: bad symbol definition: `Main' set to %s rather than the start address "
"%s\n"
msgstr ""
-#: mmo.c:3077
+#: mmo.c:3121
#, c-format
msgid ""
"%pB: warning: symbol table too large for mmo, larger than 65535 32-bit "
"words: %d. Only `Main' will be emitted.\n"
msgstr ""
-#: mmo.c:3123
+#: mmo.c:3167
#, c-format
msgid "%pB: internal error, symbol table changed size from %d to %d words\n"
msgstr ""
-#: mmo.c:3176
+#: mmo.c:3220
#, c-format
msgid "%pB: internal error, internal register section %pA had contents\n"
msgstr ""
-#: mmo.c:3227
+#: mmo.c:3271
#, c-format
msgid "%pB: no initialized registers; section length 0\n"
msgstr ""
-#: mmo.c:3234
+#: mmo.c:3278
#, c-format
msgid "%pB: too many initialized registers; section length %<PRId64>"
msgstr ""
-#: mmo.c:3239
+#: mmo.c:3283
#, c-format
msgid ""
"%pB: invalid start address for initialized registers of length %<PRId64>: "
@@ -6306,7 +6364,7 @@ msgstr ""
msgid "unhandled OSF/1 core file section type %d"
msgstr ""
-#: pdp11.c:1590
+#: pdp11.c:1589
#, c-format
msgid "%pB: symbol indicates overlay (not supported)"
msgstr ""
@@ -6374,44 +6432,44 @@ msgid ""
msgstr ""
#. XXX code yet to be written.
-#: peicode.h:796
+#: peicode.h:806
#, c-format
msgid "%pB: unhandled import type; %x"
msgstr ""
-#: peicode.h:802
+#: peicode.h:812
#, c-format
msgid "%pB: unrecognized import type; %x"
msgstr ""
-#: peicode.h:817
+#: peicode.h:827
#, c-format
msgid "%pB: unrecognized import name type; %x"
msgstr ""
-#: peicode.h:1225
+#: peicode.h:1241
#, c-format
msgid "%pB: unrecognised machine type (0x%x) in Import Library Format archive"
msgstr ""
-#: peicode.h:1238
+#: peicode.h:1254
#, c-format
msgid ""
"%pB: recognised but unhandled machine type (0x%x) in Import Library Format "
"archive"
msgstr ""
-#: peicode.h:1256
+#: peicode.h:1272
#, c-format
msgid "%pB: size field is zero in Import Library Format header"
msgstr ""
-#: peicode.h:1282
+#: peicode.h:1298
#, c-format
msgid "%pB: string not null terminated in ILF object file"
msgstr ""
-#: peicode.h:1338
+#: peicode.h:1354
#, c-format
msgid "%pB: error: debug data ends beyond end of debug directory"
msgstr ""
@@ -6470,17 +6528,17 @@ msgstr ""
msgid "Partition[%d] length = 0x%.8lx (%ld)\n"
msgstr ""
-#: reloc.c:8329
+#: reloc.c:8420
msgid "INPUT_SECTION_FLAGS are not supported"
msgstr ""
-#: reloc.c:8589
+#: reloc.c:8680
#, c-format
msgid "%pB: unrecognized relocation type %#x in section `%pA'"
msgstr ""
#. PR 21803: Suggest the most likely cause of this error.
-#: reloc.c:8593
+#: reloc.c:8684
#, c-format
msgid "is this version of the linker - %s - out of date ?"
msgstr ""
@@ -6954,1601 +7012,1601 @@ msgstr ""
msgid " EGSD (len=%u):\n"
msgstr ""
-#: vms-alpha.c:6116
+#: vms-alpha.c:6118
#, c-format
msgid " EGSD entry %2u (type: %u, len: %u): "
msgstr ""
-#: vms-alpha.c:6122 vms-alpha.c:6373
+#: vms-alpha.c:6124 vms-alpha.c:6419
#, c-format
-msgid " Error: length larger than remaining space in record\n"
+msgid " Erroneous length\n"
msgstr ""
-#: vms-alpha.c:6134
+#: vms-alpha.c:6137
#, c-format
msgid "PSC - Program section definition\n"
msgstr ""
-#: vms-alpha.c:6135 vms-alpha.c:6152
+#: vms-alpha.c:6138 vms-alpha.c:6158
#, c-format
msgid " alignment : 2**%u\n"
msgstr ""
-#: vms-alpha.c:6136 vms-alpha.c:6153
+#: vms-alpha.c:6139 vms-alpha.c:6159
#, c-format
msgid " flags : 0x%04x"
msgstr ""
-#: vms-alpha.c:6140
+#: vms-alpha.c:6143
#, c-format
msgid " alloc (len): %u (0x%08x)\n"
msgstr ""
-#: vms-alpha.c:6141 vms-alpha.c:6198 vms-alpha.c:6247
+#: vms-alpha.c:6145 vms-alpha.c:6211 vms-alpha.c:6279
#, c-format
msgid " name : %.*s\n"
msgstr ""
-#: vms-alpha.c:6151
+#: vms-alpha.c:6157
#, c-format
msgid "SPSC - Shared Image Program section def\n"
msgstr ""
-#: vms-alpha.c:6157
+#: vms-alpha.c:6163
#, c-format
msgid " alloc (len) : %u (0x%08x)\n"
msgstr ""
-#: vms-alpha.c:6158
+#: vms-alpha.c:6164
#, c-format
msgid " image offset : 0x%08x\n"
msgstr ""
-#: vms-alpha.c:6160
+#: vms-alpha.c:6166
#, c-format
msgid " symvec offset : 0x%08x\n"
msgstr ""
-#: vms-alpha.c:6162
+#: vms-alpha.c:6169
#, c-format
msgid " name : %.*s\n"
msgstr ""
-#: vms-alpha.c:6175
+#: vms-alpha.c:6185
#, c-format
msgid "SYM - Global symbol definition\n"
msgstr ""
-#: vms-alpha.c:6176 vms-alpha.c:6236 vms-alpha.c:6257 vms-alpha.c:6276
+#: vms-alpha.c:6186 vms-alpha.c:6267 vms-alpha.c:6291 vms-alpha.c:6314
#, c-format
msgid " flags: 0x%04x"
msgstr ""
-#: vms-alpha.c:6179
+#: vms-alpha.c:6189
#, c-format
msgid " psect offset: 0x%08x\n"
msgstr ""
-#: vms-alpha.c:6183
+#: vms-alpha.c:6193
#, c-format
msgid " code address: 0x%08x\n"
msgstr ""
-#: vms-alpha.c:6185
+#: vms-alpha.c:6195
#, c-format
msgid " psect index for entry point : %u\n"
msgstr ""
-#: vms-alpha.c:6188 vms-alpha.c:6264 vms-alpha.c:6283
+#: vms-alpha.c:6198 vms-alpha.c:6298 vms-alpha.c:6321
#, c-format
msgid " psect index : %u\n"
msgstr ""
-#: vms-alpha.c:6190 vms-alpha.c:6266 vms-alpha.c:6285
+#: vms-alpha.c:6201 vms-alpha.c:6301 vms-alpha.c:6324
#, c-format
msgid " name : %.*s\n"
msgstr ""
-#: vms-alpha.c:6197
+#: vms-alpha.c:6209
#, c-format
msgid "SYM - Global symbol reference\n"
msgstr ""
-#: vms-alpha.c:6209
+#: vms-alpha.c:6224
#, c-format
msgid "IDC - Ident Consistency check\n"
msgstr ""
-#: vms-alpha.c:6210
+#: vms-alpha.c:6225
#, c-format
msgid " flags : 0x%08x"
msgstr ""
-#: vms-alpha.c:6214
+#: vms-alpha.c:6229
#, c-format
msgid " id match : %x\n"
msgstr ""
-#: vms-alpha.c:6216
+#: vms-alpha.c:6231
#, c-format
msgid " error severity: %x\n"
msgstr ""
-#: vms-alpha.c:6219
+#: vms-alpha.c:6235
#, c-format
msgid " entity name : %.*s\n"
msgstr ""
-#: vms-alpha.c:6221
+#: vms-alpha.c:6241
#, c-format
msgid " object name : %.*s\n"
msgstr ""
-#: vms-alpha.c:6224
+#: vms-alpha.c:6250
#, c-format
msgid " binary ident : 0x%08x\n"
msgstr ""
-#: vms-alpha.c:6227
+#: vms-alpha.c:6254
#, c-format
msgid " ascii ident : %.*s\n"
msgstr ""
-#: vms-alpha.c:6235
+#: vms-alpha.c:6266
#, c-format
msgid "SYMG - Universal symbol definition\n"
msgstr ""
-#: vms-alpha.c:6239
+#: vms-alpha.c:6270
#, c-format
msgid " symbol vector offset: 0x%08x\n"
msgstr ""
-#: vms-alpha.c:6241
+#: vms-alpha.c:6272
#, c-format
msgid " entry point: 0x%08x\n"
msgstr ""
-#: vms-alpha.c:6243
+#: vms-alpha.c:6274
#, c-format
msgid " proc descr : 0x%08x\n"
msgstr ""
-#: vms-alpha.c:6245
+#: vms-alpha.c:6276
#, c-format
msgid " psect index: %u\n"
msgstr ""
-#: vms-alpha.c:6256
+#: vms-alpha.c:6290
#, c-format
msgid "SYMV - Vectored symbol definition\n"
msgstr ""
-#: vms-alpha.c:6260
+#: vms-alpha.c:6294
#, c-format
msgid " vector : 0x%08x\n"
msgstr ""
-#: vms-alpha.c:6262 vms-alpha.c:6281
+#: vms-alpha.c:6296 vms-alpha.c:6319
#, c-format
msgid " psect offset: %u\n"
msgstr ""
-#: vms-alpha.c:6275
+#: vms-alpha.c:6313
#, c-format
msgid "SYMM - Global symbol definition with version\n"
msgstr ""
-#: vms-alpha.c:6279
+#: vms-alpha.c:6317
#, c-format
msgid " version mask: 0x%08x\n"
msgstr ""
-#: vms-alpha.c:6290
+#: vms-alpha.c:6330
#, c-format
msgid "unhandled egsd entry type %u\n"
msgstr ""
-#: vms-alpha.c:6325
+#: vms-alpha.c:6369
#, c-format
msgid " linkage index: %u, replacement insn: 0x%08x\n"
msgstr ""
-#: vms-alpha.c:6329
+#: vms-alpha.c:6373
#, c-format
msgid " psect idx 1: %u, offset 1: 0x%08x %08x\n"
msgstr ""
-#: vms-alpha.c:6334
+#: vms-alpha.c:6378
#, c-format
msgid " psect idx 2: %u, offset 2: 0x%08x %08x\n"
msgstr ""
-#: vms-alpha.c:6340
+#: vms-alpha.c:6384
#, c-format
msgid " psect idx 3: %u, offset 3: 0x%08x %08x\n"
msgstr ""
-#: vms-alpha.c:6345
+#: vms-alpha.c:6389
#, c-format
msgid " global name: %.*s\n"
msgstr ""
-#: vms-alpha.c:6356
+#: vms-alpha.c:6401
#, c-format
-msgid " %s (len=%u+%u):\n"
+msgid " %s (len=%u):\n"
msgstr ""
-#: vms-alpha.c:6378
+#: vms-alpha.c:6424
#, c-format
-msgid " (type: %3u, size: 4+%3u): "
+msgid " (type: %3u, size: %3u): "
msgstr ""
-#: vms-alpha.c:6382
+#: vms-alpha.c:6430
#, c-format
msgid "STA_GBL (stack global) %.*s\n"
msgstr ""
-#: vms-alpha.c:6386
+#: vms-alpha.c:6434
#, c-format
-msgid "STA_LW (stack longword) 0x%08x\n"
+msgid "STA_LW (stack longword)"
msgstr ""
-#: vms-alpha.c:6390
+#: vms-alpha.c:6440
#, c-format
-msgid "STA_QW (stack quadword) 0x%08x %08x\n"
+msgid "STA_QW (stack quadword)"
msgstr ""
-#: vms-alpha.c:6395
+#: vms-alpha.c:6447
#, c-format
msgid "STA_PQ (stack psect base + offset)\n"
msgstr ""
-#: vms-alpha.c:6397
+#: vms-alpha.c:6450
#, c-format
msgid " psect: %u, offset: 0x%08x %08x\n"
msgstr ""
-#: vms-alpha.c:6403
+#: vms-alpha.c:6456
#, c-format
msgid "STA_LI (stack literal)\n"
msgstr ""
-#: vms-alpha.c:6406
+#: vms-alpha.c:6459
#, c-format
msgid "STA_MOD (stack module)\n"
msgstr ""
-#: vms-alpha.c:6409
+#: vms-alpha.c:6462
#, c-format
msgid "STA_CKARG (compare procedure argument)\n"
msgstr ""
-#: vms-alpha.c:6413
+#: vms-alpha.c:6466
#, c-format
msgid "STO_B (store byte)\n"
msgstr ""
-#: vms-alpha.c:6416
+#: vms-alpha.c:6469
#, c-format
msgid "STO_W (store word)\n"
msgstr ""
-#: vms-alpha.c:6419
+#: vms-alpha.c:6472
#, c-format
msgid "STO_LW (store longword)\n"
msgstr ""
-#: vms-alpha.c:6422
+#: vms-alpha.c:6475
#, c-format
msgid "STO_QW (store quadword)\n"
msgstr ""
-#: vms-alpha.c:6428
+#: vms-alpha.c:6482
#, c-format
msgid "STO_IMMR (store immediate repeat) %u bytes\n"
msgstr ""
-#: vms-alpha.c:6435
+#: vms-alpha.c:6491
#, c-format
msgid "STO_GBL (store global) %.*s\n"
msgstr ""
-#: vms-alpha.c:6439
+#: vms-alpha.c:6496
#, c-format
msgid "STO_CA (store code address) %.*s\n"
msgstr ""
-#: vms-alpha.c:6443
+#: vms-alpha.c:6500
#, c-format
msgid "STO_RB (store relative branch)\n"
msgstr ""
-#: vms-alpha.c:6446
+#: vms-alpha.c:6503
#, c-format
msgid "STO_AB (store absolute branch)\n"
msgstr ""
-#: vms-alpha.c:6449
+#: vms-alpha.c:6506
#, c-format
msgid "STO_OFF (store offset to psect)\n"
msgstr ""
-#: vms-alpha.c:6455
+#: vms-alpha.c:6513
#, c-format
msgid "STO_IMM (store immediate) %u bytes\n"
msgstr ""
-#: vms-alpha.c:6462
+#: vms-alpha.c:6522
#, c-format
msgid "STO_GBL_LW (store global longword) %.*s\n"
msgstr ""
-#: vms-alpha.c:6466
+#: vms-alpha.c:6526
#, c-format
msgid "STO_OFF (store LP with procedure signature)\n"
msgstr ""
-#: vms-alpha.c:6469
+#: vms-alpha.c:6529
#, c-format
msgid "STO_BR_GBL (store branch global) *todo*\n"
msgstr ""
-#: vms-alpha.c:6472
+#: vms-alpha.c:6532
#, c-format
msgid "STO_BR_PS (store branch psect + offset) *todo*\n"
msgstr ""
-#: vms-alpha.c:6476
+#: vms-alpha.c:6536
#, c-format
msgid "OPR_NOP (no-operation)\n"
msgstr ""
-#: vms-alpha.c:6479
+#: vms-alpha.c:6539
#, c-format
msgid "OPR_ADD (add)\n"
msgstr ""
-#: vms-alpha.c:6482
+#: vms-alpha.c:6542
#, c-format
msgid "OPR_SUB (subtract)\n"
msgstr ""
-#: vms-alpha.c:6485
+#: vms-alpha.c:6545
#, c-format
msgid "OPR_MUL (multiply)\n"
msgstr ""
-#: vms-alpha.c:6488
+#: vms-alpha.c:6548
#, c-format
msgid "OPR_DIV (divide)\n"
msgstr ""
-#: vms-alpha.c:6491
+#: vms-alpha.c:6551
#, c-format
msgid "OPR_AND (logical and)\n"
msgstr ""
-#: vms-alpha.c:6494
+#: vms-alpha.c:6554
#, c-format
msgid "OPR_IOR (logical inclusive or)\n"
msgstr ""
-#: vms-alpha.c:6497
+#: vms-alpha.c:6557
#, c-format
msgid "OPR_EOR (logical exclusive or)\n"
msgstr ""
-#: vms-alpha.c:6500
+#: vms-alpha.c:6560
#, c-format
msgid "OPR_NEG (negate)\n"
msgstr ""
-#: vms-alpha.c:6503
+#: vms-alpha.c:6563
#, c-format
msgid "OPR_COM (complement)\n"
msgstr ""
-#: vms-alpha.c:6506
+#: vms-alpha.c:6566
#, c-format
msgid "OPR_INSV (insert field)\n"
msgstr ""
-#: vms-alpha.c:6509
+#: vms-alpha.c:6569
#, c-format
msgid "OPR_ASH (arithmetic shift)\n"
msgstr ""
-#: vms-alpha.c:6512
+#: vms-alpha.c:6572
#, c-format
msgid "OPR_USH (unsigned shift)\n"
msgstr ""
-#: vms-alpha.c:6515
+#: vms-alpha.c:6575
#, c-format
msgid "OPR_ROT (rotate)\n"
msgstr ""
-#: vms-alpha.c:6518
+#: vms-alpha.c:6578
#, c-format
msgid "OPR_SEL (select)\n"
msgstr ""
-#: vms-alpha.c:6521
+#: vms-alpha.c:6581
#, c-format
msgid "OPR_REDEF (redefine symbol to curr location)\n"
msgstr ""
-#: vms-alpha.c:6524
+#: vms-alpha.c:6584
#, c-format
msgid "OPR_REDEF (define a literal)\n"
msgstr ""
-#: vms-alpha.c:6528
+#: vms-alpha.c:6588
#, c-format
msgid "STC_LP (store cond linkage pair)\n"
msgstr ""
-#: vms-alpha.c:6532
+#: vms-alpha.c:6592
#, c-format
msgid "STC_LP_PSB (store cond linkage pair + signature)\n"
msgstr ""
-#: vms-alpha.c:6534
+#: vms-alpha.c:6596
#, c-format
msgid " linkage index: %u, procedure: %.*s\n"
msgstr ""
-#: vms-alpha.c:6537
+#: vms-alpha.c:6603
#, c-format
msgid " signature: %.*s\n"
msgstr ""
-#: vms-alpha.c:6540
+#: vms-alpha.c:6609
#, c-format
msgid "STC_GBL (store cond global)\n"
msgstr ""
-#: vms-alpha.c:6542
+#: vms-alpha.c:6612
#, c-format
msgid " linkage index: %u, global: %.*s\n"
msgstr ""
-#: vms-alpha.c:6546
+#: vms-alpha.c:6617
#, c-format
msgid "STC_GCA (store cond code address)\n"
msgstr ""
-#: vms-alpha.c:6548
+#: vms-alpha.c:6620
#, c-format
msgid " linkage index: %u, procedure name: %.*s\n"
msgstr ""
-#: vms-alpha.c:6552
+#: vms-alpha.c:6625
#, c-format
msgid "STC_PS (store cond psect + offset)\n"
msgstr ""
-#: vms-alpha.c:6555
+#: vms-alpha.c:6629
#, c-format
msgid " linkage index: %u, psect: %u, offset: 0x%08x %08x\n"
msgstr ""
-#: vms-alpha.c:6562
+#: vms-alpha.c:6636
#, c-format
msgid "STC_NOP_GBL (store cond NOP at global addr)\n"
msgstr ""
-#: vms-alpha.c:6566
+#: vms-alpha.c:6640
#, c-format
msgid "STC_NOP_PS (store cond NOP at psect + offset)\n"
msgstr ""
-#: vms-alpha.c:6570
+#: vms-alpha.c:6644
#, c-format
msgid "STC_BSR_GBL (store cond BSR at global addr)\n"
msgstr ""
-#: vms-alpha.c:6574
+#: vms-alpha.c:6648
#, c-format
msgid "STC_BSR_PS (store cond BSR at psect + offset)\n"
msgstr ""
-#: vms-alpha.c:6578
+#: vms-alpha.c:6652
#, c-format
msgid "STC_LDA_GBL (store cond LDA at global addr)\n"
msgstr ""
-#: vms-alpha.c:6582
+#: vms-alpha.c:6656
#, c-format
msgid "STC_LDA_PS (store cond LDA at psect + offset)\n"
msgstr ""
-#: vms-alpha.c:6586
+#: vms-alpha.c:6660
#, c-format
msgid "STC_BOH_GBL (store cond BOH at global addr)\n"
msgstr ""
-#: vms-alpha.c:6590
+#: vms-alpha.c:6664
#, c-format
msgid "STC_BOH_PS (store cond BOH at psect + offset)\n"
msgstr ""
-#: vms-alpha.c:6595
+#: vms-alpha.c:6669
#, c-format
msgid "STC_NBH_GBL (store cond or hint at global addr)\n"
msgstr ""
-#: vms-alpha.c:6599
+#: vms-alpha.c:6673
#, c-format
msgid "STC_NBH_PS (store cond or hint at psect + offset)\n"
msgstr ""
-#: vms-alpha.c:6603
+#: vms-alpha.c:6677
#, c-format
msgid "CTL_SETRB (set relocation base)\n"
msgstr ""
-#: vms-alpha.c:6609
+#: vms-alpha.c:6683
#, c-format
msgid "CTL_AUGRB (augment relocation base) %u\n"
msgstr ""
-#: vms-alpha.c:6613
+#: vms-alpha.c:6688
#, c-format
msgid "CTL_DFLOC (define location)\n"
msgstr ""
-#: vms-alpha.c:6616
+#: vms-alpha.c:6691
#, c-format
msgid "CTL_STLOC (set location)\n"
msgstr ""
-#: vms-alpha.c:6619
+#: vms-alpha.c:6694
#, c-format
msgid "CTL_STKDL (stack defined location)\n"
msgstr ""
-#: vms-alpha.c:6622 vms-alpha.c:7046 vms-alpha.c:7172
+#: vms-alpha.c:6697 vms-alpha.c:7140 vms-alpha.c:7301
#, c-format
msgid "*unhandled*\n"
msgstr ""
-#: vms-alpha.c:6652 vms-alpha.c:6691
+#: vms-alpha.c:6727 vms-alpha.c:6766
#, c-format
msgid "cannot read GST record length\n"
msgstr ""
#. Ill-formed.
-#: vms-alpha.c:6673
+#: vms-alpha.c:6748
#, c-format
msgid "cannot find EMH in first GST record\n"
msgstr ""
-#: vms-alpha.c:6699
+#: vms-alpha.c:6774
#, c-format
msgid "cannot read GST record header\n"
msgstr ""
-#: vms-alpha.c:6712
+#: vms-alpha.c:6787
#, c-format
msgid " corrupted GST\n"
msgstr ""
-#: vms-alpha.c:6720
+#: vms-alpha.c:6795
#, c-format
msgid "cannot read GST record\n"
msgstr ""
-#: vms-alpha.c:6749
+#: vms-alpha.c:6824
#, c-format
msgid " unhandled EOBJ record type %u\n"
msgstr ""
-#: vms-alpha.c:6773
+#: vms-alpha.c:6849
#, c-format
msgid " bitcount: %u, base addr: 0x%08x\n"
msgstr ""
-#: vms-alpha.c:6787
+#: vms-alpha.c:6863
#, c-format
msgid " bitmap: 0x%08x (count: %u):\n"
msgstr ""
-#: vms-alpha.c:6794
+#: vms-alpha.c:6870
#, c-format
msgid " %08x"
msgstr ""
-#: vms-alpha.c:6820
+#: vms-alpha.c:6897
#, c-format
msgid " image %u (%u entries)\n"
msgstr ""
-#: vms-alpha.c:6826
+#: vms-alpha.c:6903
#, c-format
msgid " offset: 0x%08x, val: 0x%08x\n"
msgstr ""
-#: vms-alpha.c:6848
+#: vms-alpha.c:6926
#, c-format
msgid " image %u (%u entries), offsets:\n"
msgstr ""
-#: vms-alpha.c:6855
+#: vms-alpha.c:6933
#, c-format
msgid " 0x%08x"
msgstr ""
#. 64 bits.
-#: vms-alpha.c:6977
+#: vms-alpha.c:7059
#, c-format
msgid "64 bits *unhandled*\n"
msgstr ""
-#: vms-alpha.c:6982
+#: vms-alpha.c:7064
#, c-format
msgid "class: %u, dtype: %u, length: %u, pointer: 0x%08x\n"
msgstr ""
-#: vms-alpha.c:6993
+#: vms-alpha.c:7075
#, c-format
msgid "non-contiguous array of %s\n"
msgstr ""
-#: vms-alpha.c:6998
+#: vms-alpha.c:7082
#, c-format
msgid "dimct: %u, aflags: 0x%02x, digits: %u, scale: %u\n"
msgstr ""
-#: vms-alpha.c:7003
+#: vms-alpha.c:7087
#, c-format
msgid "arsize: %u, a0: 0x%08x\n"
msgstr ""
-#: vms-alpha.c:7007
+#: vms-alpha.c:7091
#, c-format
msgid "Strides:\n"
msgstr ""
-#: vms-alpha.c:7017
+#: vms-alpha.c:7105
#, c-format
msgid "Bounds:\n"
msgstr ""
-#: vms-alpha.c:7023
+#: vms-alpha.c:7112
#, c-format
msgid "[%u]: Lower: %u, upper: %u\n"
msgstr ""
-#: vms-alpha.c:7035
+#: vms-alpha.c:7126
#, c-format
msgid "unaligned bit-string of %s\n"
msgstr ""
-#: vms-alpha.c:7040
+#: vms-alpha.c:7133
#, c-format
msgid "base: %u, pos: %u\n"
msgstr ""
-#: vms-alpha.c:7061
+#: vms-alpha.c:7159
#, c-format
msgid "vflags: 0x%02x, value: 0x%08x "
msgstr ""
-#: vms-alpha.c:7067
+#: vms-alpha.c:7166
#, c-format
msgid "(no value)\n"
msgstr ""
-#: vms-alpha.c:7070
+#: vms-alpha.c:7169
#, c-format
msgid "(not active)\n"
msgstr ""
-#: vms-alpha.c:7073
+#: vms-alpha.c:7172
#, c-format
msgid "(not allocated)\n"
msgstr ""
-#: vms-alpha.c:7076
+#: vms-alpha.c:7175
#, c-format
msgid "(descriptor)\n"
msgstr ""
-#: vms-alpha.c:7080
+#: vms-alpha.c:7180
#, c-format
msgid "(trailing value)\n"
msgstr ""
-#: vms-alpha.c:7083
+#: vms-alpha.c:7183
#, c-format
msgid "(value spec follows)\n"
msgstr ""
-#: vms-alpha.c:7086
+#: vms-alpha.c:7186
#, c-format
msgid "(at bit offset %u)\n"
msgstr ""
-#: vms-alpha.c:7090
+#: vms-alpha.c:7190
#, c-format
msgid "(reg: %u, disp: %u, indir: %u, kind: "
msgstr ""
-#: vms-alpha.c:7097
+#: vms-alpha.c:7197
msgid "literal"
msgstr ""
-#: vms-alpha.c:7100
+#: vms-alpha.c:7200
msgid "address"
msgstr ""
-#: vms-alpha.c:7103
+#: vms-alpha.c:7203
msgid "desc"
msgstr ""
-#: vms-alpha.c:7106
+#: vms-alpha.c:7206
msgid "reg"
msgstr ""
-#: vms-alpha.c:7123
+#: vms-alpha.c:7227
#, c-format
msgid "len: %2u, kind: %2u "
msgstr ""
-#: vms-alpha.c:7129
+#: vms-alpha.c:7235
#, c-format
msgid "atomic, type=0x%02x %s\n"
msgstr ""
-#: vms-alpha.c:7133
+#: vms-alpha.c:7240
#, c-format
msgid "indirect, defined at 0x%08x\n"
msgstr ""
-#: vms-alpha.c:7137
+#: vms-alpha.c:7244
#, c-format
msgid "typed pointer\n"
msgstr ""
-#: vms-alpha.c:7141
+#: vms-alpha.c:7248
#, c-format
msgid "pointer\n"
msgstr ""
-#: vms-alpha.c:7149
+#: vms-alpha.c:7259
#, c-format
msgid "array, dim: %u, bitmap: "
msgstr ""
-#: vms-alpha.c:7156
+#: vms-alpha.c:7274
#, c-format
msgid "array descriptor:\n"
msgstr ""
-#: vms-alpha.c:7163
+#: vms-alpha.c:7285
#, c-format
msgid "type spec for element:\n"
msgstr ""
-#: vms-alpha.c:7165
+#: vms-alpha.c:7287
#, c-format
msgid "type spec for subscript %u:\n"
msgstr ""
-#: vms-alpha.c:7183
+#: vms-alpha.c:7312
#, c-format
msgid "Debug symbol table:\n"
msgstr ""
-#: vms-alpha.c:7194
+#: vms-alpha.c:7323
#, c-format
msgid "cannot read DST header\n"
msgstr ""
-#: vms-alpha.c:7200
+#: vms-alpha.c:7329
#, c-format
msgid " type: %3u, len: %3u (at 0x%08x): "
msgstr ""
-#: vms-alpha.c:7214
+#: vms-alpha.c:7346
#, c-format
msgid "cannot read DST symbol\n"
msgstr ""
-#: vms-alpha.c:7257
+#: vms-alpha.c:7390
#, c-format
msgid "standard data: %s\n"
msgstr ""
-#: vms-alpha.c:7260 vms-alpha.c:7348
+#: vms-alpha.c:7393 vms-alpha.c:7516
#, c-format
msgid " name: %.*s\n"
msgstr ""
-#: vms-alpha.c:7267
+#: vms-alpha.c:7400
#, c-format
msgid "modbeg\n"
msgstr ""
-#: vms-alpha.c:7269
+#: vms-alpha.c:7404
#, c-format
msgid " flags: %d, language: %u, major: %u, minor: %u\n"
msgstr ""
-#: vms-alpha.c:7275 vms-alpha.c:7549
+#: vms-alpha.c:7414 vms-alpha.c:7780
#, c-format
msgid " module name: %.*s\n"
msgstr ""
-#: vms-alpha.c:7278
+#: vms-alpha.c:7421
#, c-format
msgid " compiler : %.*s\n"
msgstr ""
-#: vms-alpha.c:7283
+#: vms-alpha.c:7428
#, c-format
msgid "modend\n"
msgstr ""
-#: vms-alpha.c:7290
+#: vms-alpha.c:7435
msgid "rtnbeg\n"
msgstr ""
-#: vms-alpha.c:7292
+#: vms-alpha.c:7439
#, c-format
msgid " flags: %u, address: 0x%08x, pd-address: 0x%08x\n"
msgstr ""
-#: vms-alpha.c:7297
+#: vms-alpha.c:7448
#, c-format
msgid " routine name: %.*s\n"
msgstr ""
-#: vms-alpha.c:7305
+#: vms-alpha.c:7459
#, c-format
msgid "rtnend: size 0x%08x\n"
msgstr ""
-#: vms-alpha.c:7313
+#: vms-alpha.c:7469
#, c-format
msgid "prolog: bkpt address 0x%08x\n"
msgstr ""
-#: vms-alpha.c:7322
+#: vms-alpha.c:7479
#, c-format
msgid "epilog: flags: %u, count: %u\n"
msgstr ""
-#: vms-alpha.c:7332
+#: vms-alpha.c:7494
#, c-format
msgid "blkbeg: address: 0x%08x, name: %.*s\n"
msgstr ""
-#: vms-alpha.c:7341
+#: vms-alpha.c:7506
#, c-format
msgid "blkend: size: 0x%08x\n"
msgstr ""
-#: vms-alpha.c:7347
+#: vms-alpha.c:7512
#, c-format
msgid "typspec (len: %u)\n"
msgstr ""
-#: vms-alpha.c:7354
+#: vms-alpha.c:7528
#, c-format
msgid "septyp, name: %.*s\n"
msgstr ""
-#: vms-alpha.c:7363
+#: vms-alpha.c:7544
#, c-format
msgid "recbeg: name: %.*s\n"
msgstr ""
-#: vms-alpha.c:7365
+#: vms-alpha.c:7548
#, c-format
msgid " len: %u bits\n"
msgstr ""
-#: vms-alpha.c:7370
+#: vms-alpha.c:7554
#, c-format
msgid "recend\n"
msgstr ""
-#: vms-alpha.c:7374
+#: vms-alpha.c:7559
#, c-format
msgid "enumbeg, len: %u, name: %.*s\n"
msgstr ""
-#: vms-alpha.c:7378
+#: vms-alpha.c:7565
#, c-format
msgid "enumelt, name: %.*s\n"
msgstr ""
-#: vms-alpha.c:7382
+#: vms-alpha.c:7571
#, c-format
msgid "enumend\n"
msgstr ""
-#: vms-alpha.c:7387
+#: vms-alpha.c:7578
#, c-format
msgid "label, name: %.*s\n"
msgstr ""
-#: vms-alpha.c:7389
+#: vms-alpha.c:7581
#, c-format
msgid " address: 0x%08x\n"
msgstr ""
-#: vms-alpha.c:7399
+#: vms-alpha.c:7593
#, c-format
msgid "discontiguous range (nbr: %u)\n"
msgstr ""
-#: vms-alpha.c:7402
+#: vms-alpha.c:7600
#, c-format
msgid " address: 0x%08x, size: %u\n"
msgstr ""
-#: vms-alpha.c:7412
+#: vms-alpha.c:7611
#, c-format
msgid "line num (len: %u)\n"
msgstr ""
-#: vms-alpha.c:7429
+#: vms-alpha.c:7630
#, c-format
msgid "delta_pc_w %u\n"
msgstr ""
-#: vms-alpha.c:7436
+#: vms-alpha.c:7639
#, c-format
msgid "incr_linum(b): +%u\n"
msgstr ""
-#: vms-alpha.c:7442
+#: vms-alpha.c:7647
#, c-format
msgid "incr_linum_w: +%u\n"
msgstr ""
-#: vms-alpha.c:7448
+#: vms-alpha.c:7655
#, c-format
msgid "incr_linum_l: +%u\n"
msgstr ""
-#: vms-alpha.c:7454
+#: vms-alpha.c:7663
#, c-format
msgid "set_line_num(w) %u\n"
msgstr ""
-#: vms-alpha.c:7459
+#: vms-alpha.c:7670
#, c-format
msgid "set_line_num_b %u\n"
msgstr ""
-#: vms-alpha.c:7464
+#: vms-alpha.c:7677
#, c-format
msgid "set_line_num_l %u\n"
msgstr ""
-#: vms-alpha.c:7469
+#: vms-alpha.c:7684
#, c-format
msgid "set_abs_pc: 0x%08x\n"
msgstr ""
-#: vms-alpha.c:7473
+#: vms-alpha.c:7690
#, c-format
msgid "delta_pc_l: +0x%08x\n"
msgstr ""
-#: vms-alpha.c:7478
+#: vms-alpha.c:7697
#, c-format
msgid "term(b): 0x%02x"
msgstr ""
-#: vms-alpha.c:7480
+#: vms-alpha.c:7699
#, c-format
msgid " pc: 0x%08x\n"
msgstr ""
-#: vms-alpha.c:7485
+#: vms-alpha.c:7706
#, c-format
msgid "term_w: 0x%04x"
msgstr ""
-#: vms-alpha.c:7487
+#: vms-alpha.c:7708
#, c-format
msgid " pc: 0x%08x\n"
msgstr ""
-#: vms-alpha.c:7493
+#: vms-alpha.c:7714
#, c-format
msgid "delta pc +%-4d"
msgstr ""
-#: vms-alpha.c:7497
+#: vms-alpha.c:7718
#, c-format
msgid " pc: 0x%08x line: %5u\n"
msgstr ""
-#: vms-alpha.c:7502
+#: vms-alpha.c:7723
#, c-format
msgid " *unhandled* cmd %u\n"
msgstr ""
-#: vms-alpha.c:7517
+#: vms-alpha.c:7738
#, c-format
msgid "source (len: %u)\n"
msgstr ""
-#: vms-alpha.c:7532
+#: vms-alpha.c:7757
#, c-format
msgid " declfile: len: %u, flags: %u, fileid: %u\n"
msgstr ""
-#: vms-alpha.c:7537
+#: vms-alpha.c:7762
#, c-format
msgid " rms: cdt: 0x%08x %08x, ebk: 0x%08x, ffb: 0x%04x, rfo: %u\n"
msgstr ""
-#: vms-alpha.c:7546
+#: vms-alpha.c:7774
#, c-format
msgid " filename : %.*s\n"
msgstr ""
-#: vms-alpha.c:7555
+#: vms-alpha.c:7790
#, c-format
msgid " setfile %u\n"
msgstr ""
-#: vms-alpha.c:7560 vms-alpha.c:7565
+#: vms-alpha.c:7797 vms-alpha.c:7804
#, c-format
msgid " setrec %u\n"
msgstr ""
-#: vms-alpha.c:7570 vms-alpha.c:7575
+#: vms-alpha.c:7811 vms-alpha.c:7818
#, c-format
msgid " setlnum %u\n"
msgstr ""
-#: vms-alpha.c:7580 vms-alpha.c:7585
+#: vms-alpha.c:7825 vms-alpha.c:7832
#, c-format
msgid " deflines %u\n"
msgstr ""
-#: vms-alpha.c:7589
+#: vms-alpha.c:7836
#, c-format
msgid " formfeed\n"
msgstr ""
-#: vms-alpha.c:7593
+#: vms-alpha.c:7840
#, c-format
msgid " *unhandled* cmd %u\n"
msgstr ""
-#: vms-alpha.c:7605
+#: vms-alpha.c:7852
#, c-format
msgid "*unhandled* dst type %u\n"
msgstr ""
-#: vms-alpha.c:7637
+#: vms-alpha.c:7884
#, c-format
msgid "cannot read EIHD\n"
msgstr ""
-#: vms-alpha.c:7641
+#: vms-alpha.c:7888
#, c-format
msgid "EIHD: (size: %u, nbr blocks: %u)\n"
msgstr ""
-#: vms-alpha.c:7645
+#: vms-alpha.c:7892
#, c-format
msgid " majorid: %u, minorid: %u\n"
msgstr ""
-#: vms-alpha.c:7653
+#: vms-alpha.c:7900
msgid "executable"
msgstr ""
-#: vms-alpha.c:7656
+#: vms-alpha.c:7903
msgid "linkable image"
msgstr ""
-#: vms-alpha.c:7663
+#: vms-alpha.c:7910
#, c-format
msgid " image type: %u (%s)"
msgstr ""
-#: vms-alpha.c:7669
+#: vms-alpha.c:7916
msgid "native"
msgstr ""
-#: vms-alpha.c:7672
+#: vms-alpha.c:7919
msgid "CLI"
msgstr ""
-#: vms-alpha.c:7679
+#: vms-alpha.c:7926
#, c-format
msgid ", subtype: %u (%s)\n"
msgstr ""
-#: vms-alpha.c:7686
+#: vms-alpha.c:7933
#, c-format
msgid " offsets: isd: %u, activ: %u, symdbg: %u, imgid: %u, patch: %u\n"
msgstr ""
-#: vms-alpha.c:7690
+#: vms-alpha.c:7937
#, c-format
msgid " fixup info rva: "
msgstr ""
-#: vms-alpha.c:7692
+#: vms-alpha.c:7939
#, c-format
msgid ", symbol vector rva: "
msgstr ""
-#: vms-alpha.c:7695
+#: vms-alpha.c:7942
#, c-format
msgid ""
"\n"
" version array off: %u\n"
msgstr ""
-#: vms-alpha.c:7700
+#: vms-alpha.c:7947
#, c-format
msgid " img I/O count: %u, nbr channels: %u, req pri: %08x%08x\n"
msgstr ""
-#: vms-alpha.c:7706
+#: vms-alpha.c:7953
#, c-format
msgid " linker flags: %08x:"
msgstr ""
-#: vms-alpha.c:7737
+#: vms-alpha.c:7984
#, c-format
msgid " ident: 0x%08x, sysver: 0x%08x, match ctrl: %u, symvect_size: %u\n"
msgstr ""
-#: vms-alpha.c:7743
+#: vms-alpha.c:7990
#, c-format
msgid " BPAGE: %u"
msgstr ""
-#: vms-alpha.c:7750
+#: vms-alpha.c:7997
#, c-format
msgid ", ext fixup offset: %u, no_opt psect off: %u"
msgstr ""
-#: vms-alpha.c:7753
+#: vms-alpha.c:8000
#, c-format
msgid ", alias: %u\n"
msgstr ""
-#: vms-alpha.c:7761
+#: vms-alpha.c:8008
#, c-format
msgid "system version array information:\n"
msgstr ""
-#: vms-alpha.c:7765
+#: vms-alpha.c:8012
#, c-format
msgid "cannot read EIHVN header\n"
msgstr ""
-#: vms-alpha.c:7775
+#: vms-alpha.c:8022
#, c-format
msgid "cannot read EIHVN version\n"
msgstr ""
-#: vms-alpha.c:7778
+#: vms-alpha.c:8025
#, c-format
msgid " %02u "
msgstr ""
-#: vms-alpha.c:7782
+#: vms-alpha.c:8029
msgid "BASE_IMAGE "
msgstr ""
-#: vms-alpha.c:7785
+#: vms-alpha.c:8032
msgid "MEMORY_MANAGEMENT"
msgstr ""
-#: vms-alpha.c:7788
+#: vms-alpha.c:8035
msgid "IO "
msgstr ""
-#: vms-alpha.c:7791
+#: vms-alpha.c:8038
msgid "FILES_VOLUMES "
msgstr ""
-#: vms-alpha.c:7794
+#: vms-alpha.c:8041
msgid "PROCESS_SCHED "
msgstr ""
-#: vms-alpha.c:7797
+#: vms-alpha.c:8044
msgid "SYSGEN "
msgstr ""
-#: vms-alpha.c:7800
+#: vms-alpha.c:8047
msgid "CLUSTERS_LOCKMGR "
msgstr ""
-#: vms-alpha.c:7803
+#: vms-alpha.c:8050
msgid "LOGICAL_NAMES "
msgstr ""
-#: vms-alpha.c:7806
+#: vms-alpha.c:8053
msgid "SECURITY "
msgstr ""
-#: vms-alpha.c:7809
+#: vms-alpha.c:8056
msgid "IMAGE_ACTIVATOR "
msgstr ""
-#: vms-alpha.c:7812
+#: vms-alpha.c:8059
msgid "NETWORKS "
msgstr ""
-#: vms-alpha.c:7815
+#: vms-alpha.c:8062
msgid "COUNTERS "
msgstr ""
-#: vms-alpha.c:7818
+#: vms-alpha.c:8065
msgid "STABLE "
msgstr ""
-#: vms-alpha.c:7821
+#: vms-alpha.c:8068
msgid "MISC "
msgstr ""
-#: vms-alpha.c:7824
+#: vms-alpha.c:8071
msgid "CPU "
msgstr ""
-#: vms-alpha.c:7827
+#: vms-alpha.c:8074
msgid "VOLATILE "
msgstr ""
-#: vms-alpha.c:7830
+#: vms-alpha.c:8077
msgid "SHELL "
msgstr ""
-#: vms-alpha.c:7833
+#: vms-alpha.c:8080
msgid "POSIX "
msgstr ""
-#: vms-alpha.c:7836
+#: vms-alpha.c:8083
msgid "MULTI_PROCESSING "
msgstr ""
-#: vms-alpha.c:7839
+#: vms-alpha.c:8086
msgid "GALAXY "
msgstr ""
-#: vms-alpha.c:7842
+#: vms-alpha.c:8089
msgid "*unknown* "
msgstr ""
-#: vms-alpha.c:7858 vms-alpha.c:8132
+#: vms-alpha.c:8105 vms-alpha.c:8379
#, c-format
msgid "cannot read EIHA\n"
msgstr ""
-#: vms-alpha.c:7861
+#: vms-alpha.c:8108
#, c-format
msgid "Image activation: (size=%u)\n"
msgstr ""
-#: vms-alpha.c:7864
+#: vms-alpha.c:8111
#, c-format
msgid " First address : 0x%08x 0x%08x\n"
msgstr ""
-#: vms-alpha.c:7868
+#: vms-alpha.c:8115
#, c-format
msgid " Second address: 0x%08x 0x%08x\n"
msgstr ""
-#: vms-alpha.c:7872
+#: vms-alpha.c:8119
#, c-format
msgid " Third address : 0x%08x 0x%08x\n"
msgstr ""
-#: vms-alpha.c:7876
+#: vms-alpha.c:8123
#, c-format
msgid " Fourth address: 0x%08x 0x%08x\n"
msgstr ""
-#: vms-alpha.c:7880
+#: vms-alpha.c:8127
#, c-format
msgid " Shared image : 0x%08x 0x%08x\n"
msgstr ""
-#: vms-alpha.c:7891
+#: vms-alpha.c:8138
#, c-format
msgid "cannot read EIHI\n"
msgstr ""
-#: vms-alpha.c:7895
+#: vms-alpha.c:8142
#, c-format
msgid "Image identification: (major: %u, minor: %u)\n"
msgstr ""
-#: vms-alpha.c:7898
+#: vms-alpha.c:8145
#, c-format
msgid " image name : %.*s\n"
msgstr ""
-#: vms-alpha.c:7900
+#: vms-alpha.c:8147
#, c-format
msgid " link time : %s\n"
msgstr ""
-#: vms-alpha.c:7902
+#: vms-alpha.c:8149
#, c-format
msgid " image ident : %.*s\n"
msgstr ""
-#: vms-alpha.c:7904
+#: vms-alpha.c:8151
#, c-format
msgid " linker ident : %.*s\n"
msgstr ""
-#: vms-alpha.c:7906
+#: vms-alpha.c:8153
#, c-format
msgid " image build ident: %.*s\n"
msgstr ""
-#: vms-alpha.c:7916
+#: vms-alpha.c:8163
#, c-format
msgid "cannot read EIHS\n"
msgstr ""
-#: vms-alpha.c:7920
+#: vms-alpha.c:8167
#, c-format
msgid "Image symbol & debug table: (major: %u, minor: %u)\n"
msgstr ""
-#: vms-alpha.c:7926
+#: vms-alpha.c:8173
#, c-format
msgid " debug symbol table : vbn: %u, size: %u (0x%x)\n"
msgstr ""
-#: vms-alpha.c:7931
+#: vms-alpha.c:8178
#, c-format
msgid " global symbol table: vbn: %u, records: %u\n"
msgstr ""
-#: vms-alpha.c:7936
+#: vms-alpha.c:8183
#, c-format
msgid " debug module table : vbn: %u, size: %u\n"
msgstr ""
-#: vms-alpha.c:7949
+#: vms-alpha.c:8196
#, c-format
msgid "cannot read EISD\n"
msgstr ""
-#: vms-alpha.c:7960
+#: vms-alpha.c:8207
#, c-format
msgid ""
"Image section descriptor: (major: %u, minor: %u, size: %u, offset: %u)\n"
msgstr ""
-#: vms-alpha.c:7968
+#: vms-alpha.c:8215
#, c-format
msgid " section: base: 0x%08x%08x size: 0x%08x\n"
msgstr ""
-#: vms-alpha.c:7973
+#: vms-alpha.c:8220
#, c-format
msgid " flags: 0x%04x"
msgstr ""
-#: vms-alpha.c:8011
+#: vms-alpha.c:8258
#, c-format
msgid " vbn: %u, pfc: %u, matchctl: %u type: %u ("
msgstr ""
-#: vms-alpha.c:8017
+#: vms-alpha.c:8264
msgid "NORMAL"
msgstr ""
-#: vms-alpha.c:8020
+#: vms-alpha.c:8267
msgid "SHRFXD"
msgstr ""
-#: vms-alpha.c:8023
+#: vms-alpha.c:8270
msgid "PRVFXD"
msgstr ""
-#: vms-alpha.c:8026
+#: vms-alpha.c:8273
msgid "SHRPIC"
msgstr ""
-#: vms-alpha.c:8029
+#: vms-alpha.c:8276
msgid "PRVPIC"
msgstr ""
-#: vms-alpha.c:8032
+#: vms-alpha.c:8279
msgid "USRSTACK"
msgstr ""
-#: vms-alpha.c:8038
+#: vms-alpha.c:8285
msgid ")\n"
msgstr ""
-#: vms-alpha.c:8041
+#: vms-alpha.c:8288
#, c-format
msgid " ident: 0x%08x, name: %.*s\n"
msgstr ""
-#: vms-alpha.c:8051
+#: vms-alpha.c:8298
#, c-format
msgid "cannot read DMT\n"
msgstr ""
-#: vms-alpha.c:8055
+#: vms-alpha.c:8302
#, c-format
msgid "Debug module table:\n"
msgstr ""
-#: vms-alpha.c:8064
+#: vms-alpha.c:8311
#, c-format
msgid "cannot read DMT header\n"
msgstr ""
-#: vms-alpha.c:8070
+#: vms-alpha.c:8317
#, c-format
msgid " module offset: 0x%08x, size: 0x%08x, (%u psects)\n"
msgstr ""
-#: vms-alpha.c:8080
+#: vms-alpha.c:8327
#, c-format
msgid "cannot read DMT psect\n"
msgstr ""
-#: vms-alpha.c:8084
+#: vms-alpha.c:8331
#, c-format
msgid " psect start: 0x%08x, length: %u\n"
msgstr ""
-#: vms-alpha.c:8097
+#: vms-alpha.c:8344
#, c-format
msgid "cannot read DST\n"
msgstr ""
-#: vms-alpha.c:8107
+#: vms-alpha.c:8354
#, c-format
msgid "cannot read GST\n"
msgstr ""
-#: vms-alpha.c:8111
+#: vms-alpha.c:8358
#, c-format
msgid "Global symbol table:\n"
msgstr ""
-#: vms-alpha.c:8138
+#: vms-alpha.c:8385
#, c-format
msgid "Image activator fixup: (major: %u, minor: %u)\n"
msgstr ""
-#: vms-alpha.c:8142
+#: vms-alpha.c:8389
#, c-format
msgid " iaflink : 0x%08x %08x\n"
msgstr ""
-#: vms-alpha.c:8146
+#: vms-alpha.c:8393
#, c-format
msgid " fixuplnk: 0x%08x %08x\n"
msgstr ""
-#: vms-alpha.c:8149
+#: vms-alpha.c:8396
#, c-format
msgid " size : %u\n"
msgstr ""
-#: vms-alpha.c:8151
+#: vms-alpha.c:8398
#, c-format
msgid " flags: 0x%08x\n"
msgstr ""
-#: vms-alpha.c:8156
+#: vms-alpha.c:8403
#, c-format
msgid " qrelfixoff: %5u, lrelfixoff: %5u\n"
msgstr ""
-#: vms-alpha.c:8161
+#: vms-alpha.c:8408
#, c-format
msgid " qdotadroff: %5u, ldotadroff: %5u\n"
msgstr ""
-#: vms-alpha.c:8166
+#: vms-alpha.c:8413
#, c-format
msgid " codeadroff: %5u, lpfixoff : %5u\n"
msgstr ""
-#: vms-alpha.c:8169
+#: vms-alpha.c:8416
#, c-format
msgid " chgprtoff : %5u\n"
msgstr ""
-#: vms-alpha.c:8173
+#: vms-alpha.c:8420
#, c-format
msgid " shlstoff : %5u, shrimgcnt : %5u\n"
msgstr ""
-#: vms-alpha.c:8176
+#: vms-alpha.c:8423
#, c-format
msgid " shlextra : %5u, permctx : %5u\n"
msgstr ""
-#: vms-alpha.c:8179
+#: vms-alpha.c:8426
#, c-format
msgid " base_va : 0x%08x\n"
msgstr ""
-#: vms-alpha.c:8181
+#: vms-alpha.c:8428
#, c-format
msgid " lppsbfixoff: %5u\n"
msgstr ""
-#: vms-alpha.c:8189
+#: vms-alpha.c:8435
#, c-format
msgid " Shareable images:\n"
msgstr ""
-#: vms-alpha.c:8194
+#: vms-alpha.c:8443
#, c-format
msgid " %u: size: %u, flags: 0x%02x, name: %.*s\n"
msgstr ""
-#: vms-alpha.c:8201
+#: vms-alpha.c:8450
#, c-format
msgid " quad-word relocation fixups:\n"
msgstr ""
-#: vms-alpha.c:8206
+#: vms-alpha.c:8456
#, c-format
msgid " long-word relocation fixups:\n"
msgstr ""
-#: vms-alpha.c:8211
+#: vms-alpha.c:8462
#, c-format
msgid " quad-word .address reference fixups:\n"
msgstr ""
-#: vms-alpha.c:8216
+#: vms-alpha.c:8467
#, c-format
msgid " long-word .address reference fixups:\n"
msgstr ""
-#: vms-alpha.c:8221
+#: vms-alpha.c:8472
#, c-format
msgid " Code Address Reference Fixups:\n"
msgstr ""
-#: vms-alpha.c:8226
+#: vms-alpha.c:8477
#, c-format
msgid " Linkage Pairs Reference Fixups:\n"
msgstr ""
-#: vms-alpha.c:8235
+#: vms-alpha.c:8485
#, c-format
msgid " Change Protection (%u entries):\n"
msgstr ""
-#: vms-alpha.c:8241
+#: vms-alpha.c:8494
#, c-format
msgid " base: 0x%08x %08x, size: 0x%08x, prot: 0x%08x "
msgstr ""
#. FIXME: we do not yet support relocatable link. It is not obvious
#. how to do it for debug infos.
-#: vms-alpha.c:9118
+#: vms-alpha.c:9371
msgid "%P: relocatable link is not supported\n"
msgstr ""
-#: vms-alpha.c:9189
+#: vms-alpha.c:9442
#, c-format
msgid "%P: multiple entry points: in modules %pB and %pB\n"
msgstr ""
@@ -8566,92 +8624,102 @@ msgstr ""
msgid "_bfd_vms_output_counted called with too many bytes"
msgstr ""
-#: xcofflink.c:830
+#: xcofflink.c:834
#, c-format
msgid "%pB: XCOFF shared object when not producing XCOFF output"
msgstr ""
-#: xcofflink.c:851
+#: xcofflink.c:855
#, c-format
msgid "%pB: dynamic object with no .loader section"
msgstr ""
-#: xcofflink.c:1415
+#: xcofflink.c:1440
#, c-format
msgid "%pB: `%s' has line numbers but no enclosing section"
msgstr ""
-#: xcofflink.c:1468
+#: xcofflink.c:1496
#, c-format
msgid "%pB: class %d symbol `%s' has no aux entries"
msgstr ""
-#: xcofflink.c:1491
+#: xcofflink.c:1519
#, c-format
msgid "%pB: symbol `%s' has unrecognized csect type %d"
msgstr ""
-#: xcofflink.c:1504
+#: xcofflink.c:1532
#, c-format
msgid "%pB: bad XTY_ER symbol `%s': class %d scnum %d scnlen %<PRId64>"
msgstr ""
-#: xcofflink.c:1535
+#: xcofflink.c:1563
#, c-format
msgid "%pB: XMC_TC0 symbol `%s' is class %d scnlen %<PRId64>"
msgstr ""
-#: xcofflink.c:1682
+#: xcofflink.c:1698
+#, c-format
+msgid "%pB: TOC entry `%s' has a R_TLSMLrelocation not targeting itself"
+msgstr ""
+
+#: xcofflink.c:1732
#, c-format
msgid "%pB: csect `%s' not in enclosing section"
msgstr ""
-#: xcofflink.c:1790
+#: xcofflink.c:1841
#, c-format
msgid "%pB: misplaced XTY_LD `%s'"
msgstr ""
-#: xcofflink.c:2117
+#: xcofflink.c:2184
#, c-format
msgid "%pB: reloc %s:%<PRId64> not in csect"
msgstr ""
-#: xcofflink.c:3250
+#: xcofflink.c:3287
+#, c-format
+msgid "%pB: cannot export internal symbol `%s`."
+msgstr ""
+
+#: xcofflink.c:3335
#, c-format
msgid "%s: no such symbol"
msgstr ""
-#: xcofflink.c:3361
+#: xcofflink.c:3444
#, c-format
msgid "warning: attempt to export undefined symbol `%s'"
msgstr ""
-#: xcofflink.c:3740
+#: xcofflink.c:3823
msgid "error: undefined symbol __rtinit"
msgstr ""
-#: xcofflink.c:4123
+#: xcofflink.c:4206
#, c-format
msgid "%pB: loader reloc in unrecognized section `%s'"
msgstr ""
-#: xcofflink.c:4135
+#: xcofflink.c:4218
#, c-format
msgid "%pB: `%s' in loader reloc but not loader sym"
msgstr ""
-#: xcofflink.c:4152
+#: xcofflink.c:4235
#, c-format
msgid "%pB: loader reloc in read-only section %pA"
msgstr ""
-#: xcofflink.c:5180
+#: xcofflink.c:5270
#, c-format
msgid "TOC overflow: %#<PRIx64> > 0x10000; try -mminimal-toc when compiling"
msgstr ""
#. Not fatal, this callback cannot fail.
-#: elfnn-aarch64.c:2869
+#: elfnn-aarch64.c:2869 elfnn-riscv.c:5264
#, c-format
msgid "unknown attribute for symbol `%s': 0x%02x"
msgstr ""
@@ -8715,342 +8783,356 @@ msgid ""
"%pB: relocation %s against `%s' can not be used when making a shared object"
msgstr ""
-#: elfnn-riscv.c:225 elfnn-riscv.c:260
+#: elfnn-loongarch.c:151 elfnn-loongarch.c:203
+#, c-format
+msgid "%#<PRIx64> invaild imm"
+msgstr ""
+
+#: elfnn-loongarch.c:386 elfnn-riscv.c:3846
+#, c-format
+msgid ""
+"%pB: ABI is incompatible with that of the selected emulation:\n"
+" target emulation `%s' does not match `%s'"
+msgstr ""
+
+#: elfnn-loongarch.c:406
+#, c-format
+msgid "%pB: can't link different ABI object."
+msgstr ""
+
+#: elfnn-loongarch.c:547
+msgid "Internal error: unreachable."
+msgstr ""
+
+#: elfnn-riscv.c:224 elfnn-riscv.c:259
#, c-format
msgid "%pB: warning: RVE PLT generation not supported"
msgstr ""
-#: elfnn-riscv.c:1913
+#: elfnn-riscv.c:1927
#, c-format
msgid "%pcrel_lo missing matching %pcrel_hi"
msgstr ""
-#: elfnn-riscv.c:1916
+#: elfnn-riscv.c:1930
#, c-format
msgid "%pcrel_lo with addend isn't allowed for R_RISCV_GOT_HI20"
msgstr ""
-#: elfnn-riscv.c:1922
+#: elfnn-riscv.c:1936
#, c-format
msgid ""
"%%pcrel_lo overflow with an addend, the value of %%pcrel_hi is 0x%<PRIx64> "
"without any addend, but may be 0x%<PRIx64> after adding the %%pcrel_lo addend"
msgstr ""
-#: elfnn-riscv.c:1929
+#: elfnn-riscv.c:1943
#, c-format
msgid "%pcrel_lo overflow with an addend"
msgstr ""
-#: elfnn-riscv.c:2411
+#: elfnn-riscv.c:2425
msgid "The addend isn't allowed for R_RISCV_GOT_HI20"
msgstr ""
-#: elfnn-riscv.c:2555
+#: elfnn-riscv.c:2569
#, c-format
msgid "%pcrel_lo section symbol with an addend"
msgstr ""
-#: elfnn-riscv.c:2778
+#: elfnn-riscv.c:2792
#, c-format
msgid ""
"%%X%%P: relocation %s against `%s' can not be used when making a shared "
"object; recompile with -fPIC\n"
msgstr ""
-#: elfnn-riscv.c:2788
+#: elfnn-riscv.c:2802
#, c-format
msgid "%%X%%P: unresolvable %s relocation against symbol `%s'\n"
msgstr ""
-#: elfnn-riscv.c:2828
+#: elfnn-riscv.c:2842
msgid "%X%P: internal error: out of range error\n"
msgstr ""
-#: elfnn-riscv.c:2833
+#: elfnn-riscv.c:2847
msgid "%X%P: internal error: unsupported relocation error\n"
msgstr ""
-#: elfnn-riscv.c:2839
+#: elfnn-riscv.c:2853
msgid "dangerous relocation error"
msgstr ""
-#: elfnn-riscv.c:2845
+#: elfnn-riscv.c:2859
msgid "%X%P: internal error: unknown error\n"
msgstr ""
-#: elfnn-riscv.c:3386
+#: elfnn-riscv.c:3400
#, c-format
msgid ""
"warning: %pB: mis-matched ISA version %d.%d for '%s' extension, the output "
"version is %d.%d"
msgstr ""
-#: elfnn-riscv.c:3419
+#: elfnn-riscv.c:3433
#, c-format
msgid ""
"error: %pB: corrupted ISA string '%s'. First letter should be 'i' or 'e' "
"but got '%s'"
msgstr ""
-#: elfnn-riscv.c:3462
+#: elfnn-riscv.c:3476
#, c-format
msgid "error: %pB: mis-matched ISA string to merge '%s' and '%s'"
msgstr ""
-#: elfnn-riscv.c:3619
+#: elfnn-riscv.c:3618
#, c-format
msgid "error: %pB: ISA string of input (%s) doesn't match output (%s)"
msgstr ""
-#: elfnn-riscv.c:3639
+#: elfnn-riscv.c:3638
#, c-format
msgid "error: %pB: XLEN of input (%u) doesn't match output (%u)"
msgstr ""
-#: elfnn-riscv.c:3647
+#: elfnn-riscv.c:3646
#, c-format
msgid "error: %pB: unsupported XLEN (%u), you might be using wrong emulation"
msgstr ""
-#: elfnn-riscv.c:3761
+#: elfnn-riscv.c:3760
#, c-format
msgid ""
"warning: %pB use privileged spec version %u.%u.%u but the output use version "
"%u.%u.%u"
msgstr ""
-#: elfnn-riscv.c:3778
+#: elfnn-riscv.c:3777
msgid ""
"warning: privileged spec version 1.9.1 can not be linked with other spec "
"versions"
msgstr ""
-#: elfnn-riscv.c:3806
+#: elfnn-riscv.c:3805
#, c-format
msgid ""
"error: %pB use %u-byte stack aligned but the output use %u-byte stack aligned"
msgstr ""
-#: elfnn-riscv.c:3847
-#, c-format
-msgid ""
-"%pB: ABI is incompatible with that of the selected emulation:\n"
-" target emulation `%s' does not match `%s'"
-msgstr ""
-
-#: elfnn-riscv.c:3903
+#: elfnn-riscv.c:3902
#, c-format
msgid "%pB: can't link %s modules with %s modules"
msgstr ""
-#: elfnn-riscv.c:3913
+#: elfnn-riscv.c:3912
#, c-format
msgid "%pB: can't link RVE with other target"
msgstr ""
-#: elfnn-riscv.c:4450
+#: elfnn-riscv.c:4493
#, c-format
msgid ""
"%pB(%pA+%#<PRIx64>): %<PRId64> bytes required for alignment to %<PRId64>-"
"byte boundary, but only %<PRId64> present"
msgstr ""
-#: peXXigen.c:154
+#: peXXigen.c:157
#, c-format
msgid "%pB: unable to find name for empty section"
msgstr ""
-#: peXXigen.c:181
+#: peXXigen.c:184
#, c-format
msgid "%pB: out of memory creating name for empty section"
msgstr ""
-#: peXXigen.c:191
+#: peXXigen.c:194
#, c-format
msgid "%pB: unable to create fake empty section"
msgstr ""
-#: peXXigen.c:523
+#: peXXigen.c:526
#, c-format
msgid ""
"%pB: aout header specifies an invalid number of data-directory entries: %u"
msgstr ""
-#: peXXigen.c:934
+#: peXXigen.c:937
#, c-format
msgid "%pB:%.8s: section below image base"
msgstr ""
-#: peXXigen.c:937
+#: peXXigen.c:940
#, c-format
msgid "%pB:%.8s: RVA truncated"
msgstr ""
-#: peXXigen.c:1065
+#: peXXigen.c:1068
#, c-format
msgid "%pB: line number overflow: 0x%lx > 0xffff"
msgstr ""
-#: peXXigen.c:1218
+#: peXXigen.c:1221
msgid "Export Directory [.edata (or where ever we found it)]"
msgstr ""
-#: peXXigen.c:1219
+#: peXXigen.c:1222
msgid "Import Directory [parts of .idata]"
msgstr ""
-#: peXXigen.c:1220
+#: peXXigen.c:1223
msgid "Resource Directory [.rsrc]"
msgstr ""
-#: peXXigen.c:1221
+#: peXXigen.c:1224
msgid "Exception Directory [.pdata]"
msgstr ""
-#: peXXigen.c:1222
+#: peXXigen.c:1225
msgid "Security Directory"
msgstr ""
-#: peXXigen.c:1223
+#: peXXigen.c:1226
msgid "Base Relocation Directory [.reloc]"
msgstr ""
-#: peXXigen.c:1224
+#: peXXigen.c:1227
msgid "Debug Directory"
msgstr ""
-#: peXXigen.c:1225
+#: peXXigen.c:1228
msgid "Description Directory"
msgstr ""
-#: peXXigen.c:1226
+#: peXXigen.c:1229
msgid "Special Directory"
msgstr ""
-#: peXXigen.c:1227
+#: peXXigen.c:1230
msgid "Thread Storage Directory [.tls]"
msgstr ""
-#: peXXigen.c:1228
+#: peXXigen.c:1231
msgid "Load Configuration Directory"
msgstr ""
-#: peXXigen.c:1229
+#: peXXigen.c:1232
msgid "Bound Import Directory"
msgstr ""
-#: peXXigen.c:1230
+#: peXXigen.c:1233
msgid "Import Address Table Directory"
msgstr ""
-#: peXXigen.c:1231
+#: peXXigen.c:1234
msgid "Delay Import Directory"
msgstr ""
-#: peXXigen.c:1232
+#: peXXigen.c:1235
msgid "CLR Runtime Header"
msgstr ""
-#: peXXigen.c:1233
+#: peXXigen.c:1236
msgid "Reserved"
msgstr ""
-#: peXXigen.c:1280
+#: peXXigen.c:1283
#, c-format
msgid ""
"\n"
"There is an import table, but the section containing it could not be found\n"
msgstr ""
-#: peXXigen.c:1286
+#: peXXigen.c:1289
#, c-format
msgid ""
"\n"
"There is an import table in %s, but that section has no contents\n"
msgstr ""
-#: peXXigen.c:1293
+#: peXXigen.c:1296
#, c-format
msgid ""
"\n"
"There is an import table in %s at 0x%lx\n"
msgstr ""
-#: peXXigen.c:1299
+#: peXXigen.c:1302
#, c-format
msgid ""
"\n"
"The Import Tables (interpreted %s section contents)\n"
msgstr ""
-#: peXXigen.c:1302
+#: peXXigen.c:1305
#, c-format
msgid ""
" vma: Hint Time Forward DLL First\n"
" Table Stamp Chain Name Thunk\n"
msgstr ""
-#: peXXigen.c:1351
+#: peXXigen.c:1354
#, c-format
msgid ""
"\n"
"\tDLL Name: %.*s\n"
msgstr ""
-#: peXXigen.c:1367
+#: peXXigen.c:1370
#, c-format
msgid "\tvma: Hint/Ord Member-Name Bound-To\n"
msgstr ""
-#: peXXigen.c:1392
+#: peXXigen.c:1395
#, c-format
msgid ""
"\n"
"There is a first thunk, but the section containing it could not be found\n"
msgstr ""
-#: peXXigen.c:1436 peXXigen.c:1475
+#: peXXigen.c:1439 peXXigen.c:1478
#, c-format
msgid "\t<corrupt: 0x%04lx>"
msgstr ""
-#: peXXigen.c:1568
+#: peXXigen.c:1571
#, c-format
msgid ""
"\n"
"There is an export table, but the section containing it could not be found\n"
msgstr ""
-#: peXXigen.c:1574
+#: peXXigen.c:1577
#, c-format
msgid ""
"\n"
"There is an export table in %s, but that section has no contents\n"
msgstr ""
-#: peXXigen.c:1585
+#: peXXigen.c:1588
#, c-format
msgid ""
"\n"
"There is an export table in %s, but it does not fit into that section\n"
msgstr ""
-#: peXXigen.c:1596
+#: peXXigen.c:1599
#, c-format
msgid ""
"\n"
"There is an export table in %s, but it is too small (%d)\n"
msgstr ""
-#: peXXigen.c:1602
+#: peXXigen.c:1605
#, c-format
msgid ""
"\n"
"There is an export table in %s at 0x%lx\n"
msgstr ""
-#: peXXigen.c:1630
+#: peXXigen.c:1633
#, c-format
msgid ""
"\n"
@@ -9058,145 +9140,145 @@ msgid ""
"\n"
msgstr ""
-#: peXXigen.c:1634
+#: peXXigen.c:1637
#, c-format
msgid "Export Flags \t\t\t%lx\n"
msgstr ""
-#: peXXigen.c:1637
+#: peXXigen.c:1640
#, c-format
msgid "Time/Date stamp \t\t%lx\n"
msgstr ""
-#: peXXigen.c:1641
+#: peXXigen.c:1644
#, c-format
msgid "Major/Minor \t\t\t%d/%d\n"
msgstr ""
-#: peXXigen.c:1644
+#: peXXigen.c:1647
#, c-format
msgid "Name \t\t\t\t"
msgstr ""
-#: peXXigen.c:1655
+#: peXXigen.c:1658
#, c-format
msgid "Ordinal Base \t\t\t%ld\n"
msgstr ""
-#: peXXigen.c:1658
+#: peXXigen.c:1661
#, c-format
msgid "Number in:\n"
msgstr ""
-#: peXXigen.c:1661
+#: peXXigen.c:1664
#, c-format
msgid "\tExport Address Table \t\t%08lx\n"
msgstr ""
-#: peXXigen.c:1665
+#: peXXigen.c:1668
#, c-format
msgid "\t[Name Pointer/Ordinal] Table\t%08lx\n"
msgstr ""
-#: peXXigen.c:1668
+#: peXXigen.c:1671
#, c-format
msgid "Table Addresses\n"
msgstr ""
-#: peXXigen.c:1671
+#: peXXigen.c:1674
#, c-format
msgid "\tExport Address Table \t\t"
msgstr ""
-#: peXXigen.c:1676
+#: peXXigen.c:1679
#, c-format
msgid "\tName Pointer Table \t\t"
msgstr ""
-#: peXXigen.c:1681
+#: peXXigen.c:1684
#, c-format
msgid "\tOrdinal Table \t\t\t"
msgstr ""
-#: peXXigen.c:1695
+#: peXXigen.c:1698
#, c-format
msgid ""
"\n"
"Export Address Table -- Ordinal Base %ld\n"
msgstr ""
-#: peXXigen.c:1704
+#: peXXigen.c:1707
#, c-format
msgid "\tInvalid Export Address Table rva (0x%lx) or entry count (0x%lx)\n"
msgstr ""
-#: peXXigen.c:1723
+#: peXXigen.c:1726
msgid "Forwarder RVA"
msgstr ""
-#: peXXigen.c:1735
+#: peXXigen.c:1738
msgid "Export RVA"
msgstr ""
-#: peXXigen.c:1742
+#: peXXigen.c:1745
#, c-format
msgid ""
"\n"
"[Ordinal/Name Pointer] Table\n"
msgstr ""
-#: peXXigen.c:1750
+#: peXXigen.c:1753
#, c-format
msgid "\tInvalid Name Pointer Table rva (0x%lx) or entry count (0x%lx)\n"
msgstr ""
-#: peXXigen.c:1757
+#: peXXigen.c:1760
#, c-format
msgid "\tInvalid Ordinal Table rva (0x%lx) or entry count (0x%lx)\n"
msgstr ""
-#: peXXigen.c:1771
+#: peXXigen.c:1774
#, c-format
msgid "\t[%4ld] <corrupt offset: %lx>\n"
msgstr ""
-#: peXXigen.c:1825 peXXigen.c:1994
+#: peXXigen.c:1828 peXXigen.c:1997
#, c-format
msgid "warning, .pdata section size (%ld) is not a multiple of %d\n"
msgstr ""
-#: peXXigen.c:1829 peXXigen.c:1998
+#: peXXigen.c:1832 peXXigen.c:2001
#, c-format
msgid ""
"\n"
"The Function Table (interpreted .pdata section contents)\n"
msgstr ""
-#: peXXigen.c:1832
+#: peXXigen.c:1835
#, c-format
msgid " vma:\t\t\tBegin Address End Address Unwind Info\n"
msgstr ""
-#: peXXigen.c:1834
+#: peXXigen.c:1837
#, c-format
msgid ""
" vma:\t\tBegin End EH EH PrologEnd Exception\n"
" \t\tAddress Address Handler Data Address Mask\n"
msgstr ""
-#: peXXigen.c:1847
+#: peXXigen.c:1850
#, c-format
msgid "Virtual size of .pdata section (%ld) larger than real size (%ld)\n"
msgstr ""
-#: peXXigen.c:2000
+#: peXXigen.c:2003
#, c-format
msgid ""
" vma:\t\tBegin Prolog Function Flags Exception EH\n"
" \t\tAddress Length Length 32b exc Handler Data\n"
msgstr ""
-#: peXXigen.c:2121
+#: peXXigen.c:2124
#, c-format
msgid ""
"\n"
@@ -9204,86 +9286,86 @@ msgid ""
"PE File Base Relocations (interpreted .reloc section contents)\n"
msgstr ""
-#: peXXigen.c:2150
+#: peXXigen.c:2153
#, c-format
msgid ""
"\n"
"Virtual Address: %08lx Chunk size %ld (0x%lx) Number of fixups %ld\n"
msgstr ""
-#: peXXigen.c:2168
+#: peXXigen.c:2171
#, c-format
msgid "\treloc %4d offset %4x [%4lx] %s"
msgstr ""
-#: peXXigen.c:2229
+#: peXXigen.c:2232
#, c-format
msgid "%03x %*.s Entry: "
msgstr ""
-#: peXXigen.c:2253
+#: peXXigen.c:2256
#, c-format
msgid "name: [val: %08lx len %d]: "
msgstr ""
-#: peXXigen.c:2273
+#: peXXigen.c:2276
#, c-format
msgid "<corrupt string length: %#x>\n"
msgstr ""
-#: peXXigen.c:2283
+#: peXXigen.c:2286
#, c-format
msgid "<corrupt string offset: %#lx>\n"
msgstr ""
-#: peXXigen.c:2288
+#: peXXigen.c:2291
#, c-format
msgid "ID: %#08lx"
msgstr ""
-#: peXXigen.c:2291
+#: peXXigen.c:2294
#, c-format
msgid ", Value: %#08lx\n"
msgstr ""
-#: peXXigen.c:2313
+#: peXXigen.c:2316
#, c-format
msgid "%03x %*.s Leaf: Addr: %#08lx, Size: %#08lx, Codepage: %d\n"
msgstr ""
-#: peXXigen.c:2355
+#: peXXigen.c:2358
#, c-format
msgid "<unknown directory type: %d>\n"
msgstr ""
-#: peXXigen.c:2363
+#: peXXigen.c:2366
#, c-format
msgid " Table: Char: %d, Time: %08lx, Ver: %d/%d, Num Names: %d, IDs: %d\n"
msgstr ""
-#: peXXigen.c:2451
+#: peXXigen.c:2454
#, c-format
msgid "Corrupt .rsrc section detected!\n"
msgstr ""
-#: peXXigen.c:2475
+#: peXXigen.c:2478
#, c-format
msgid ""
"\n"
"WARNING: Extra data in .rsrc section - it will be ignored by Windows:\n"
msgstr ""
-#: peXXigen.c:2481
+#: peXXigen.c:2484
#, c-format
msgid " String table starts at offset: %#03x\n"
msgstr ""
-#: peXXigen.c:2484
+#: peXXigen.c:2487
#, c-format
msgid " Resources start at offset: %#03x\n"
msgstr ""
-#: peXXigen.c:2541
+#: peXXigen.c:2544
#, c-format
msgid ""
"\n"
@@ -9291,14 +9373,14 @@ msgid ""
"found\n"
msgstr ""
-#: peXXigen.c:2547
+#: peXXigen.c:2550
#, c-format
msgid ""
"\n"
"There is a debug directory in %s, but that section has no contents\n"
msgstr ""
-#: peXXigen.c:2554
+#: peXXigen.c:2557
#, c-format
msgid ""
"\n"
@@ -9306,7 +9388,7 @@ msgid ""
"small\n"
msgstr ""
-#: peXXigen.c:2559
+#: peXXigen.c:2562
#, c-format
msgid ""
"\n"
@@ -9314,23 +9396,23 @@ msgid ""
"\n"
msgstr ""
-#: peXXigen.c:2566
+#: peXXigen.c:2569
#, c-format
msgid ""
"The debug data size field in the data directory is too big for the section"
msgstr ""
-#: peXXigen.c:2571
+#: peXXigen.c:2574
#, c-format
msgid "Type Size Rva Offset\n"
msgstr ""
-#: peXXigen.c:2618
+#: peXXigen.c:2621
#, c-format
msgid "(format %c%c%c%c signature %s age %ld)\n"
msgstr ""
-#: peXXigen.c:2628
+#: peXXigen.c:2631
#, c-format
msgid ""
"The debug directory size is not a multiple of the debug directory entry "
@@ -9340,100 +9422,100 @@ msgstr ""
#. The MS dumpbin program reportedly ands with 0xff0f before
#. printing the characteristics field. Not sure why. No reason to
#. emulate it here.
-#: peXXigen.c:2712
+#: peXXigen.c:2715
#, c-format
msgid ""
"\n"
"Characteristics 0x%x\n"
msgstr ""
-#: peXXigen.c:2989
+#: peXXigen.c:2992
#, c-format
msgid ""
"%pB: Data Directory (%lx bytes at %<PRIx64>) extends across section boundary "
"at %<PRIx64>"
msgstr ""
-#: peXXigen.c:3026
+#: peXXigen.c:3029
msgid "failed to update file offsets in debug directory"
msgstr ""
-#: peXXigen.c:3034
+#: peXXigen.c:3037
#, c-format
msgid "%pB: failed to read debug data section"
msgstr ""
-#: peXXigen.c:3833
+#: peXXigen.c:3836
#, c-format
msgid ".rsrc merge failure: duplicate string resource: %d"
msgstr ""
-#: peXXigen.c:3968
+#: peXXigen.c:3971
msgid ".rsrc merge failure: multiple non-default manifests"
msgstr ""
-#: peXXigen.c:3986
+#: peXXigen.c:3989
msgid ".rsrc merge failure: a directory matches a leaf"
msgstr ""
-#: peXXigen.c:4028
+#: peXXigen.c:4031
msgid ".rsrc merge failure: duplicate leaf"
msgstr ""
-#: peXXigen.c:4033
+#: peXXigen.c:4036
#, c-format
msgid ".rsrc merge failure: duplicate leaf: %s"
msgstr ""
-#: peXXigen.c:4100
+#: peXXigen.c:4103
msgid ".rsrc merge failure: dirs with differing characteristics"
msgstr ""
-#: peXXigen.c:4107
+#: peXXigen.c:4110
msgid ".rsrc merge failure: differing directory versions"
msgstr ""
#. Corrupted .rsrc section - cannot merge.
-#: peXXigen.c:4224
+#: peXXigen.c:4227
#, c-format
msgid "%pB: .rsrc merge failure: corrupt .rsrc section"
msgstr ""
-#: peXXigen.c:4232
+#: peXXigen.c:4235
#, c-format
msgid "%pB: .rsrc merge failure: unexpected .rsrc size"
msgstr ""
-#: peXXigen.c:4371
+#: peXXigen.c:4374
#, c-format
msgid "%pB: unable to fill in DataDictionary[1] because .idata$2 is missing"
msgstr ""
-#: peXXigen.c:4391
+#: peXXigen.c:4394
#, c-format
msgid "%pB: unable to fill in DataDictionary[1] because .idata$4 is missing"
msgstr ""
-#: peXXigen.c:4412
+#: peXXigen.c:4415
#, c-format
msgid "%pB: unable to fill in DataDictionary[12] because .idata$5 is missing"
msgstr ""
-#: peXXigen.c:4432
+#: peXXigen.c:4435
#, c-format
msgid ""
"%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)] because ."
"idata$6 is missing"
msgstr ""
-#: peXXigen.c:4474
+#: peXXigen.c:4477
#, c-format
msgid ""
"%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE(12)] because ."
"idata$6 is missing"
msgstr ""
-#: peXXigen.c:4499
+#: peXXigen.c:4502
#, c-format
msgid "%pB: unable to fill in DataDictionary[9] because __tls_used is missing"
msgstr ""
diff --git a/bfd/po/fr.po b/bfd/po/fr.po
index 56c86d00e56..76a0635c4ff 100644
--- a/bfd/po/fr.po
+++ b/bfd/po/fr.po
@@ -1,14 +1,14 @@
# Messages français pour GNU concernant bfd.
-# Copyright (C) 2021 Free Software Foundation, Inc.
+# Copyright (C) 2022 Free Software Foundation, Inc.
# This file is distributed under the same license as the binutils package.
# Michel Robitaille <robitail@IRO.UMontreal.CA>, traducteur depuis/since 1996.
-# Frédéric Marchal <fmarchal@perso.be>, 2021.
+# Frédéric Marchal <fmarchal@perso.be>, 2022.
msgid ""
msgstr ""
-"Project-Id-Version: bfd-2.36.90\n"
-"Report-Msgid-Bugs-To: bug-binutils@gnu.org\n"
-"POT-Creation-Date: 2021-07-03 15:02+0100\n"
-"PO-Revision-Date: 2021-07-04 19:46+0200\n"
+"Project-Id-Version: bfd-2.37.90\n"
+"Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n"
+"POT-Creation-Date: 2022-01-22 12:19+0000\n"
+"PO-Revision-Date: 2022-01-24 11:11+0100\n"
"Last-Translator: Frédéric Marchal <fmarchal@perso.be>\n"
"Language-Team: French <traduc@traduc.org>\n"
"Language: fr\n"
@@ -33,26 +33,26 @@ msgstr "%pB: type de réadressage importé non supporté: %#x"
msgid "%pB: bad relocation record imported: %d"
msgstr "%pB: mauvais enregistrement de réadressage importé: %d"
-#: aoutx.h:1265 aoutx.h:1613 pdp11.c:1238 pdp11.c:1512
+#: aoutx.h:1265 aoutx.h:1612 pdp11.c:1238 pdp11.c:1511
#, c-format
msgid "%pB: can not represent section `%pA' in a.out object file format"
msgstr "%pB: ne peut représenter la section « %pA » dans le fichier format objet a.out"
-#: aoutx.h:1577 pdp11.c:1484
+#: aoutx.h:1576 pdp11.c:1483
#, c-format
msgid "%pB: can not represent section for symbol `%s' in a.out object file format"
msgstr "%pB: ne peut représenter la section pour le symbole « %s » dans le fichier format objet a.out"
-#: aoutx.h:1580 vms-alpha.c:8038
+#: aoutx.h:1579 vms-alpha.c:8282
msgid "*unknown*"
msgstr "*inconnu*"
-#: aoutx.h:1716 pdp11.c:1580
+#: aoutx.h:1715 pdp11.c:1579
#, c-format
msgid "%pB: invalid string offset %<PRIu64> >= %<PRIu64>"
msgstr "%pB: chaîne de décalage invalide %<PRIu64> >= %<PRIu64>"
-#: aoutx.h:1963
+#: aoutx.h:1962
#, c-format
msgid "%pB: unsupported AOUT relocation size: %d"
msgstr "%pB: taille de réadressage AOUT non supportée : %d"
@@ -68,37 +68,37 @@ msgid "%pB: unsupported relocation type"
msgstr "%pB: type de réadressage non supporté"
#. Unknown relocation.
-#: aoutx.h:4405 coff-alpha.c:601 coff-alpha.c:1518 coff-rs6000.c:2916
-#: coff-sh.c:504 coff-tic4x.c:184 coff-tic54x.c:279 elf-hppa.h:798
-#: elf-hppa.h:826 elf-m10200.c:226 elf-m10300.c:813 elf32-arc.c:532
-#: elf32-arm.c:1985 elf32-avr.c:962 elf32-bfin.c:1062 elf32-bfin.c:4687
-#: elf32-cr16.c:654 elf32-cr16.c:684 elf32-cris.c:467 elf32-crx.c:429
-#: elf32-csky.c:991 elf32-d10v.c:234 elf32-d30v.c:522 elf32-d30v.c:544
-#: elf32-dlx.c:546 elf32-epiphany.c:372 elf32-fr30.c:381 elf32-frv.c:2559
-#: elf32-frv.c:6240 elf32-ft32.c:305 elf32-h8300.c:302 elf32-i386.c:400
-#: elf32-ip2k.c:1240 elf32-iq2000.c:442 elf32-lm32.c:496 elf32-m32c.c:305
-#: elf32-m32r.c:1286 elf32-m32r.c:1311 elf32-m32r.c:2209 elf32-m68hc11.c:390
-#: elf32-m68hc12.c:510 elf32-m68k.c:354 elf32-mcore.c:354 elf32-mcore.c:440
-#: elf32-mep.c:385 elf32-metag.c:871 elf32-microblaze.c:690
+#: aoutx.h:4405 coff-alpha.c:601 coff-alpha.c:1518 coff-mips.c:356
+#: coff-rs6000.c:2959 coff-sh.c:504 coff-tic4x.c:184 coff-tic54x.c:279
+#: elf-hppa.h:798 elf-hppa.h:826 elf-m10200.c:226 elf-m10300.c:813
+#: elf32-arc.c:532 elf32-arm.c:1985 elf32-avr.c:962 elf32-bfin.c:1066
+#: elf32-bfin.c:4690 elf32-cr16.c:654 elf32-cr16.c:684 elf32-cris.c:467
+#: elf32-crx.c:429 elf32-csky.c:991 elf32-d10v.c:234 elf32-d30v.c:522
+#: elf32-d30v.c:544 elf32-dlx.c:546 elf32-epiphany.c:372 elf32-fr30.c:381
+#: elf32-frv.c:2559 elf32-frv.c:6240 elf32-ft32.c:305 elf32-h8300.c:302
+#: elf32-i386.c:394 elf32-ip2k.c:1240 elf32-iq2000.c:442 elf32-lm32.c:496
+#: elf32-m32c.c:305 elf32-m32r.c:1286 elf32-m32r.c:1311 elf32-m32r.c:2209
+#: elf32-m68hc11.c:390 elf32-m68hc12.c:510 elf32-m68k.c:354 elf32-mcore.c:354
+#: elf32-mcore.c:440 elf32-mep.c:385 elf32-metag.c:871 elf32-microblaze.c:690
#: elf32-microblaze.c:961 elf32-mips.c:2231 elf32-moxie.c:137
-#: elf32-msp430.c:737 elf32-msp430.c:747 elf32-mt.c:241 elf32-nds32.c:3237
-#: elf32-nds32.c:3263 elf32-nds32.c:5029 elf32-nios2.c:3019 elf32-or1k.c:1070
-#: elf32-pj.c:326 elf32-ppc.c:898 elf32-ppc.c:911 elf32-pru.c:423
-#: elf32-rl78.c:291 elf32-rx.c:313 elf32-rx.c:322 elf32-s12z.c:296
-#: elf32-s390.c:347 elf32-score.c:2392 elf32-score7.c:2231 elf32-sh.c:437
+#: elf32-msp430.c:737 elf32-msp430.c:747 elf32-mt.c:241 elf32-nds32.c:3234
+#: elf32-nds32.c:3255 elf32-nds32.c:5024 elf32-nios2.c:3019 elf32-or1k.c:1070
+#: elf32-pj.c:326 elf32-ppc.c:900 elf32-ppc.c:913 elf32-pru.c:423
+#: elf32-rl78.c:291 elf32-rx.c:324 elf32-rx.c:333 elf32-s12z.c:296
+#: elf32-s390.c:347 elf32-score.c:2383 elf32-score7.c:2224 elf32-sh.c:437
#: elf32-spu.c:163 elf32-tic6x.c:1498 elf32-tic6x.c:1508 elf32-tic6x.c:1527
#: elf32-tic6x.c:1537 elf32-tic6x.c:2583 elf32-tilepro.c:792 elf32-v850.c:1902
#: elf32-v850.c:1924 elf32-v850.c:4249 elf32-vax.c:289 elf32-visium.c:481
#: elf32-wasm32.c:105 elf32-xc16x.c:250 elf32-xgate.c:418
#: elf32-xstormy16.c:395 elf32-xtensa.c:522 elf32-xtensa.c:556 elf32-z80.c:331
-#: elf64-alpha.c:1114 elf64-alpha.c:4072 elf64-alpha.c:4220 elf64-bpf.c:325
-#: elf64-ia64-vms.c:255 elf64-ia64-vms.c:3431 elf64-mips.c:3958
-#: elf64-mips.c:3974 elf64-mmix.c:1264 elf64-nfp.c:238 elf64-ppc.c:1021
-#: elf64-ppc.c:1373 elf64-ppc.c:1382 elf64-s390.c:328 elf64-s390.c:378
-#: elf64-x86-64.c:279 elfn32-mips.c:3788 elfxx-ia64.c:324 elfxx-riscv.c:970
-#: elfxx-sparc.c:589 elfxx-sparc.c:639 elfxx-tilegx.c:907 elfxx-tilegx.c:947
-#: elfnn-aarch64.c:2215 elfnn-aarch64.c:2313 elfnn-ia64.c:214
-#: elfnn-ia64.c:3820
+#: elf64-alpha.c:1114 elf64-alpha.c:4073 elf64-alpha.c:4221 elf64-bpf.c:325
+#: elf64-ia64-vms.c:255 elf64-ia64-vms.c:3425 elf64-mips.c:3958
+#: elf64-mips.c:3974 elf64-mmix.c:1264 elf64-nfp.c:238 elf64-ppc.c:1027
+#: elf64-ppc.c:1381 elf64-ppc.c:1390 elf64-s390.c:328 elf64-s390.c:378
+#: elf64-x86-64.c:268 elfn32-mips.c:3788 elfxx-ia64.c:324
+#: elfxx-loongarch.c:632 elfxx-riscv.c:969 elfxx-sparc.c:589 elfxx-sparc.c:639
+#: elfxx-tilegx.c:907 elfxx-tilegx.c:947 elfnn-aarch64.c:2215
+#: elfnn-aarch64.c:2313 elfnn-ia64.c:214 elfnn-ia64.c:3820
#, c-format
msgid "%pB: unsupported relocation type %#x"
msgstr "%pB: type de réadressage %#x non supporté"
@@ -113,132 +113,136 @@ msgstr "%pB: lien relocalisable de %s vers %s n'est pas supporté"
msgid "%pB: cannot allocate memory for local GOT entries"
msgstr "%pB: impossible d'allouer la mémoire pour les entrées locales GOT"
-#: archive.c:2241
+#: archive.c:743
+msgid "%F%P: %pB(%s): error opening thin archive member: %E\n"
+msgstr "%F%P: %pB(%s): erreur lors de l'ouverture de membre d'archive léger : %E\n"
+
+#: archive.c:2272
msgid "warning: writing archive was slow: rewriting timestamp"
msgstr "attention: l'écriture de l'archive était lente: réécriture du cachet de date-heure"
-#: archive.c:2308 archive.c:2368 elflink.c:4611 linker.c:1427
+#: archive.c:2339 archive.c:2400 elflink.c:4756 linker.c:1429
#, c-format
msgid "%pB: plugin needed to handle lto object"
msgstr "%pB: le greffon doit gérer l'objet lto"
-#: archive.c:2594
+#: archive.c:2626
msgid "Reading archive file mod timestamp"
msgstr "Lecture du cachet date-heure modifié du fichier d'archive"
-#: archive.c:2618
+#: archive.c:2650
msgid "Writing updated armap timestamp"
msgstr "Écriture du cachet date-heure armap mise à jour"
-#: bfd.c:681
+#: bfd.c:690
msgid "no error"
msgstr "pas d'erreur"
-#: bfd.c:682
+#: bfd.c:691
msgid "system call error"
msgstr "erreur d'appel système"
-#: bfd.c:683
+#: bfd.c:692
msgid "invalid bfd target"
msgstr "cible bfd invalide"
-#: bfd.c:684
+#: bfd.c:693
msgid "file in wrong format"
msgstr "fichier dans un mauvais format"
-#: bfd.c:685
+#: bfd.c:694
msgid "archive object file in wrong format"
msgstr "fichier objet d'archive dans un mauvais format"
-#: bfd.c:686
+#: bfd.c:695
msgid "invalid operation"
msgstr "opération invalide"
-#: bfd.c:687
+#: bfd.c:696
msgid "memory exhausted"
msgstr "mémoire épuisée"
-#: bfd.c:688
+#: bfd.c:697
msgid "no symbols"
msgstr "aucun symbole"
-#: bfd.c:689
+#: bfd.c:698
msgid "archive has no index; run ranlib to add one"
msgstr "l'archive n'a pas d'index; exécuter ranlib pour en ajouter un"
-#: bfd.c:690
+#: bfd.c:699
msgid "no more archived files"
msgstr "aucun autre fichier d'archive"
-#: bfd.c:691
+#: bfd.c:700
msgid "malformed archive"
msgstr "archive mal formée"
-#: bfd.c:692
+#: bfd.c:701
msgid "DSO missing from command line"
msgstr "DSO manquant dans la ligne de commande"
-#: bfd.c:693
+#: bfd.c:702
msgid "file format not recognized"
msgstr "format de fichier non reconnu"
-#: bfd.c:694
+#: bfd.c:703
msgid "file format is ambiguous"
msgstr "format de fichier ambigu"
-#: bfd.c:695
+#: bfd.c:704
msgid "section has no contents"
msgstr "section sans contenu"
-#: bfd.c:696
+#: bfd.c:705
msgid "nonrepresentable section on output"
msgstr "section non-représentable sur la sortie"
-#: bfd.c:697
+#: bfd.c:706
msgid "symbol needs debug section which does not exist"
msgstr "symboles ont besoin de la section de débug qui est inexistante"
-#: bfd.c:698
+#: bfd.c:707
msgid "bad value"
msgstr "mauvaise valeur"
-#: bfd.c:699
+#: bfd.c:708
msgid "file truncated"
msgstr "fichier tronqué"
-#: bfd.c:700
+#: bfd.c:709
msgid "file too big"
msgstr "fichier trop gros"
-#: bfd.c:701
+#: bfd.c:710
msgid "sorry, cannot handle this file"
msgstr "désolé, ce fichier ne peut être traité"
-#: bfd.c:702
+#: bfd.c:711
#, c-format
msgid "error reading %s: %s"
msgstr "erreur lors de la lecture de %s: %s"
-#: bfd.c:703
+#: bfd.c:712
msgid "#<invalid error code>"
msgstr "#<code d'erreur invalide>"
-#: bfd.c:1640
+#: bfd.c:1649
#, c-format
msgid "BFD %s assertion fail %s:%d"
msgstr "BFD assertion %s a échoué %s:%d"
-#: bfd.c:1653
+#: bfd.c:1662
#, c-format
msgid "BFD %s internal error, aborting at %s:%d in %s\n"
msgstr "BFD erreur interne %s, abandon à %s:%d dans %s\n"
-#: bfd.c:1658
+#: bfd.c:1667
#, c-format
msgid "BFD %s internal error, aborting at %s:%d\n"
msgstr "BFD erreur interne %s, abandon à %s:%d\n"
-#: bfd.c:1660
+#: bfd.c:1669
msgid "Please report this bug.\n"
msgstr "Merci de rapporter cette anomalie.\n"
@@ -267,7 +271,7 @@ msgstr "réouverture de %pB: %s\n"
msgid "%pB: cannot handle compressed Alpha binaries; use compiler flags, or objZ, to generate uncompressed binaries"
msgstr "%pB: les binaires compressés pour Alpha ne sont pas supportés; utilisez les options du compilateur ou objZ pour produire des binaires non compressés"
-#: coff-alpha.c:856 coff-alpha.c:893 coff-alpha.c:1960 coff-mips.c:953
+#: coff-alpha.c:856 coff-alpha.c:893 coff-alpha.c:1960 coff-mips.c:960
msgid "GP relative relocation used when GP not defined"
msgstr "Réadressage relatif GP utilisé alors que GP n'est pas défini"
@@ -275,18 +279,18 @@ msgstr "Réadressage relatif GP utilisé alors que GP n'est pas défini"
msgid "using multiple gp values"
msgstr "utilisation de valeurs gp multiples"
-#: coff-alpha.c:1505 coff-alpha.c:1511 elf.c:9463 elf32-mcore.c:100
-#: elf32-mcore.c:455 elf32-ppc.c:7614 elf32-ppc.c:8763 elf64-ppc.c:16242
+#: coff-alpha.c:1505 coff-alpha.c:1511 elf.c:9527 elf32-mcore.c:100
+#: elf32-mcore.c:455 elf32-ppc.c:7649 elf32-ppc.c:8841 elf64-ppc.c:16679
#, c-format
msgid "%pB: %s unsupported"
msgstr "%pB: %s pas supporté"
-#: coff-go32.c:156 coffswap.h:792
+#: coff-go32.c:164 coffswap.h:819
#, c-format
msgid "%pB: warning: %s: line number overflow: 0x%lx > 0xffff"
msgstr "%pB: attention: %s: débordement du compteur de numéro de ligne: 0x%lx > 0xffff"
-#: coff-mips.c:643 elf32-mips.c:1744 elf32-score.c:433 elf32-score7.c:333
+#: coff-mips.c:650 elf32-mips.c:1744 elf32-score.c:433 elf32-score7.c:333
#: elf64-mips.c:3451 elfn32-mips.c:3278
msgid "GP relative relocation when _gp not defined"
msgstr "réadressage relatif GP sans que _gp ne soit défini"
@@ -296,29 +300,32 @@ msgstr "réadressage relatif GP sans que _gp ne soit défini"
msgid "%pB: unsupported swap_aux_in for storage class %#x"
msgstr "%pB: swap_aux_in non supporté pour la classe de stockage %#x"
-#: coff-rs6000.c:570 coff64-rs6000.c:499
+#: coff-rs6000.c:571 coff64-rs6000.c:497
#, c-format
msgid "%pB: unsupported swap_aux_out for storage class %#x"
msgstr "%pB: swap_aux_out non supporté pour la classe de stockage %#x"
-#: coff-rs6000.c:3002
+#: coff-rs6000.c:3045
#, c-format
msgid "%pB: TOC reloc at %#<PRIx64> to symbol `%s' with no TOC entry"
msgstr "%pB: la table des matières des réadressages à %#<PRIx64> pour le symbole « %s » sans aucune entrée"
-#: coff-rs6000.c:3209 coff-rs6000.c:3220
-msgid "%pB: TLS relocation at (0x%"
-msgstr "%pB: réadressage TLS à (0x%"
+#: coff-rs6000.c:3260
+#, c-format
+msgid "%pB: TLS relocation at 0x%s over non-TLS symbol %s (0x%x)\n"
+msgstr "%pB: réadressage TLS à 0x%s sur le symbole non-TLS %s (0x%x)\n"
-#: coff-rs6000.c:3234
-msgid "%pB: TLS local relocation at (0x%"
-msgstr "%pB: réadressage TLS local à (0x%"
+#: coff-rs6000.c:3276
+#, c-format
+msgid "%pB: TLS local relocation at 0x%s over imported symbol %s\n"
+msgstr "%pB: réadressage TLS local à 0x%s sur le symbole importé %s\n"
-#: coff-rs6000.c:3642 coff64-rs6000.c:1573
-msgid "%pB: relocatation (%d) at (0x%"
-msgstr "%pB: réadressage (%d) à (0x%"
+#: coff-rs6000.c:3686
+#, c-format
+msgid "%pB: relocation (%d) at 0x%s has wrong r_rsize (0x%x)\n"
+msgstr "%pB: réadressage (%d) à 0x%s a un mauvais r_rsize (0x%x)\n"
-#: coff-rs6000.c:3905 coff64-rs6000.c:2023
+#: coff-rs6000.c:3949 coff64-rs6000.c:2000
#, c-format
msgid "%pB: symbol `%s' has unrecognized smclas %d"
msgstr "%pB: symbole « %s » a une classe smclas %d non reconnue"
@@ -368,44 +375,49 @@ msgstr "%pB: %#<PRIx64>: erreur fatale: débordement de réadressage lors des re
msgid "%pB: fatal: generic symbols retrieved before relaxing"
msgstr "%pB: fatal: symboles génériques récupérés avant la relâche"
-#: coff-sh.c:2781 cofflink.c:2959
+#: coff-sh.c:2781 cofflink.c:2963
#, c-format
msgid "%pB: illegal symbol index %ld in relocs"
msgstr "%pB: symbole index %ld illégal dans les réadressages"
-#: coff-tic4x.c:228 coff-tic54x.c:366 coffcode.h:5124
+#: coff-tic30.c:172 coff-tic4x.c:228 coff-tic54x.c:366 coff-z80.c:325
+#: coff-z8k.c:188 coffcode.h:5157
#, c-format
msgid "%pB: warning: illegal symbol index %ld in relocs"
msgstr "%pB: attention: symbole index illégal %ld dans les réadressages"
-#: coff64-rs6000.c:449 coff64-rs6000.c:555
+#: coff64-rs6000.c:447 coff64-rs6000.c:554
#, c-format
msgid "%pB: C_STAT isn't supported by XCOFF64"
msgstr "%pB: C_STAT n'est pas supporté par XCOFF64"
-#: coff64-rs6000.c:479
+#: coff64-rs6000.c:477
#, c-format
msgid "%pB: wrong auxtype %#x for storage class %#x"
msgstr "%pB: mauvais auxtype %#x pour la classe de stockage %#x"
-#: coffcode.h:986
+#: coff64-rs6000.c:1572
+msgid "%pB: relocation (%d) at (0x%"
+msgstr "%pB: réadressage (%d) à (0x%"
+
+#: coffcode.h:990
#, c-format
msgid "%pB: unable to load COMDAT section name"
msgstr "%pB: impossible de charger le nom de section COMDAT"
#. Malformed input files can trigger this test.
#. cf PR 21781.
-#: coffcode.h:1021
+#: coffcode.h:1025
#, c-format
msgid "%pB: error: unexpected symbol '%s' in COMDAT section"
msgstr "%pB: erreur: symbole « %s » inattendu dans la section COMDAT"
-#: coffcode.h:1033
+#: coffcode.h:1037
#, c-format
msgid "%pB: warning: COMDAT symbol '%s' does not match section name '%s'"
msgstr "%pB: attention: symbole COMDAT « %s » ne concorde par avec le nom de section « %s »"
-#: coffcode.h:1043
+#: coffcode.h:1047
#, c-format
msgid "%pB: warning: no symbol for section '%s' found"
msgstr "%pB: attention: pas de symbole trouvé pour la section « %s »"
@@ -413,87 +425,87 @@ msgstr "%pB: attention: pas de symbole trouvé pour la section « %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:1274
+#: coffcode.h:1278
#, c-format
msgid "%pB: warning: ignoring section flag %s in section %s"
msgstr "%pB: attention: ignore le fanion de section %s dans la section %s"
-#: coffcode.h:1343
+#: coffcode.h:1347
#, c-format
msgid "%pB (%s): section flag %s (%#lx) ignored"
msgstr "%pB (%s): fanion de section %s (%#lx) ignoré"
-#: coffcode.h:1959 coffcode.h:2024
+#: coffcode.h:1960
+#, c-format
+msgid "%pB: overflow reloc count too small"
+msgstr "%pB: débordement dû au compteur de réadressage trop petit"
+
+#: coffcode.h:1969 coffcode.h:2034
#, c-format
msgid "%pB: warning: claims to have 0xffff relocs, without overflow"
msgstr "%pB: attention: prétend avoir 0xffff réadressages, sans débordement"
-#: coffcode.h:2385
+#: coffcode.h:2401
#, c-format
msgid "unrecognized TI COFF target id '0x%x'"
msgstr "identificateur de cible TI COFF non reconnu « 0x%x »"
-#: coffcode.h:2663
+#: coffcode.h:2679
#, c-format
msgid "%pB: reloc against a non-existent symbol index: %ld"
msgstr "%pB: réadressage par rapport à un index de symbole inexistant: %ld"
-#: coffcode.h:2961
+#: coffcode.h:2983
#, c-format
msgid "%pB: page size is too large (0x%x)"
msgstr "%pB: la taille de page est trop grande (0x%x)"
-#: coffcode.h:3121
+#: coffcode.h:3143
#, c-format
msgid "%pB: too many sections (%d)"
msgstr "%pB: trop de sections (%d)"
-#: coffcode.h:3548
+#: coffcode.h:3570
#, c-format
msgid "%pB: section %pA: string table overflow at offset %ld"
msgstr "%pB: section %pA: débordement de la table de chaînes à l'offset %ld"
-#: coffcode.h:3655
+#: coffcode.h:3677
#, c-format
msgid "%pB:%s section %s: alignment 2**%u not representable"
msgstr "%pB:%s section %s: l'alignement 2**%u n'est pas représentable"
-#: coffcode.h:4358
-#, c-format
-msgid "%pB: warning: line number count (%#lx) exceeds section size (%#lx)"
-msgstr "%pB: attention: le décompte du nombre de lignes (%#lx) dépasse la taille de la section (%#lx)"
-
-#: coffcode.h:4378
+#: coffcode.h:4393
#, c-format
msgid "%pB: warning: line number table read failed"
msgstr "%pB: attention: erreur lors de la lecture de la table des numéros de ligne"
-#: coffcode.h:4412 coffcode.h:4426
+#: coffcode.h:4439 coffcode.h:4453
#, c-format
msgid "%pB: warning: illegal symbol index 0x%lx in line number entry %d"
msgstr "%pB: attention: symbole d'index 0x%lx illégal dans l'entrée %d des numéros de lignes"
-#: coffcode.h:4440
+#: coffcode.h:4467
#, c-format
msgid "%pB: warning: illegal symbol in line number entry %d"
msgstr "%pB: attention: symbole illégal dans l'entrée %d des numéros de lignes"
-#: coffcode.h:4453
+#: coffcode.h:4480
#, c-format
msgid "%pB: warning: duplicate line number information for `%s'"
msgstr "%pB: attention: information de numéro de ligne dédoublée pour « %s »"
-#: coffcode.h:4874
+#: coffcode.h:4901
#, c-format
msgid "%pB: unrecognized storage class %d for %s symbol `%s'"
msgstr "%pB: classe de stockage %d non reconnue pour %s symbole « %s »"
-#: coffcode.h:5014
+#: coffcode.h:5041
#, c-format
msgid "warning: %pB: local symbol `%s' has no section"
msgstr "attention: %pB: symbole local « %s » n'a pas de section"
-#: coffcode.h:5164
+#: coffcode.h:5197
#, c-format
msgid "%pB: illegal relocation type %d at address %#<PRIx64>"
msgstr "%pB: type de réadressage %d illégal à l'adresse %#<PRIx64>"
@@ -508,31 +520,31 @@ msgstr "%pB: impossible d'initialiser le statut de compression de la section %s"
msgid "%pB: unable to initialize decompress status for section %s"
msgstr "%pB: impossible d'initialiser le statut de décompression de la section %s"
-#: coffgen.c:1706
+#: coffgen.c:1760
#, c-format
msgid "%pB: bad string table size %<PRIu64>"
msgstr "%pB: mauvaise taille de la table des chaînes %<PRIu64>"
-#: coffgen.c:1878 coffgen.c:1938 coffgen.c:1956 cofflink.c:2024 elf.c:1936
-#: xcofflink.c:4540
+#: coffgen.c:1932 coffgen.c:1976 coffgen.c:2025 coffgen.c:2043 cofflink.c:2024
+#: elf.c:1939 xcofflink.c:4658
msgid "<corrupt>"
msgstr "<corrompu>"
-#: coffgen.c:2087
+#: coffgen.c:2176
#, c-format
msgid "<corrupt info> %s"
msgstr "<info corrompue> %s"
-#: coffgen.c:2684 elflink.c:14829 linker.c:2965
+#: coffgen.c:2781 elflink.c:15042 linker.c:2967
msgid "%F%P: already_linked_table: %E\n"
msgstr "%F%P: already_linked_table: %E\n"
-#: coffgen.c:3026 elflink.c:13816
+#: coffgen.c:3123 elflink.c:14017
#, c-format
msgid "removing unused section '%pA' in file '%pB'"
msgstr "suppression de la section inutilisée « %pA » dans le fichier « %pB »"
-#: coffgen.c:3103 elflink.c:14036
+#: coffgen.c:3200 elflink.c:14247
msgid "warning: gc-sections option ignored"
msgstr "attention: l'option des sections gc est ignorée"
@@ -541,7 +553,7 @@ msgstr "attention: l'option des sections gc est ignorée"
msgid "warning: symbol `%s' is both section and non-section"
msgstr "attention: le symbole « %s » est à la fois une section et une non-section"
-#: cofflink.c:471 elf64-ia64-vms.c:5202 elflink.c:5207
+#: cofflink.c:471 elf64-ia64-vms.c:5196 elflink.c:5353
#, c-format
msgid "warning: type of symbol `%s' changed from %d to %d in %pB"
msgstr "attention: le type du symbole « %s » a changé de %d à %d dans %pB"
@@ -551,51 +563,52 @@ msgstr "attention: le type du symbole « %s » a changé de %d à %d dans %pB"
msgid "%pB: relocs in section `%pA', but it has no contents"
msgstr "%pB: réadressages dans la section « %pA » qui est vide"
-#: cofflink.c:2415 elflink.c:11342
+#: cofflink.c:2415 elflink.c:11470
#, c-format
msgid "%X`%s' referenced in section `%pA' of %pB: defined in discarded section `%pA' of %pB\n"
msgstr "%X« %s » référencé dans la section « %pA » de %pB: défini dans la section abandonnée « %pA » de %pB\n"
-#: cofflink.c:2610
-msgid "%pB: stripping non-representable symbol '%s' (value %"
-msgstr "%pB: élimination du symbole non représentable « %s » (valeur %"
+#: cofflink.c:2614
+#, c-format
+msgid "%pB: stripping non-representable symbol '%s' (value 0x%s)"
+msgstr "%pB: élimination du symbole non représentable « %s » (valeur 0x%s)"
-#: cofflink.c:2728
+#: cofflink.c:2732
#, c-format
msgid "%pB: %pA: reloc overflow: %#x > 0xffff"
msgstr "%pB: %pA: débordement de réadressage: %#x > 0xffff"
-#: cofflink.c:2736
+#: cofflink.c:2740
#, c-format
msgid "%pB: warning: %pA: line number overflow: %#x > 0xffff"
msgstr "%pB: attention: %pA: débordement du compteur de numéro de ligne: %#x > 0xffff"
-#: cofflink.c:3127
+#: cofflink.c:3131
#, c-format
msgid "%pB: bad reloc address %#<PRIx64> in section `%pA'"
msgstr "%pB: mauvaise adresse de réadressage %#<PRIx64> dans la section « %pA »"
-#: coffswap.h:806
+#: coffswap.h:833
#, c-format
msgid "%pB: %s: reloc overflow: 0x%lx > 0xffff"
msgstr "%pB: %s: débordement de réadressage: 0x%lx > 0xffff"
-#: compress.c:270
+#: compress.c:275
#, c-format
msgid "error: %pB(%pA) section size (%#<PRIx64> bytes) is larger than file size (%#<PRIx64> bytes)"
msgstr "erreur: %pB(%pA) la taille de la section (%#<PRIx64> octets) est plus grande que la taille du fichier (%#<PRIx64> octets)"
-#: compress.c:281
+#: compress.c:286
#, c-format
msgid "error: %pB(%pA) is too large (%#<PRIx64> bytes)"
msgstr "erreur: %pB(%pA) est trop grand (%#<PRIx64> octets)"
-#: cpu-arm.c:307 cpu-arm.c:319
+#: cpu-arm.c:310 cpu-arm.c:322
#, c-format
msgid "error: %pB is compiled for the EP9312, whereas %pB is compiled for XScale"
msgstr "erreur: %pB compilé pour EP9312 alors que %pB a été compilé pour XScale"
-#: cpu-arm.c:455
+#: cpu-arm.c:458
#, c-format
msgid "warning: unable to update contents of %s section in %pB"
msgstr "attention: incapable de mettre à jour le contenu de la section %s dans %pB"
@@ -616,108 +629,108 @@ msgstr "erreur DWARF: la section %s est plus grande que sa taille du fichier !
msgid "DWARF error: offset (%<PRIu64>) greater than or equal to %s size (%<PRIu64>)"
msgstr "Erreur DWARF: décalage (%<PRIu64>) plus grand ou égal à la taille de %s (%<PRIu64>)"
-#: dwarf2.c:1201
+#: dwarf2.c:1245
msgid "DWARF error: info pointer extends beyond end of attributes"
msgstr "Erreur DWARF: le pointeur d'info va au delà de la fin des attributs"
-#: dwarf2.c:1349
+#: dwarf2.c:1394
#, c-format
msgid "DWARF error: invalid or unhandled FORM value: %#x"
msgstr "Erreur DWARF: valeur de FORM invalide ou non supportée: %#x"
-#: dwarf2.c:1664
+#: dwarf2.c:1709
msgid "DWARF error: mangled line number section (bad file number)"
msgstr "Erreur DWARF: numéro de ligne de section mutilé (mauvais no. de fichier)"
-#: dwarf2.c:2007
+#: dwarf2.c:2052
msgid "DWARF error: zero format count"
msgstr "Erreur DWARF: décompte de format nul"
-#: dwarf2.c:2017
+#: dwarf2.c:2062
#, c-format
msgid "DWARF error: data count (%<PRIx64>) larger than buffer size"
msgstr "Erreur DWARF: décompte de données (%<PRIx64>) plus grand que la taille du tampon"
-#: dwarf2.c:2056
+#: dwarf2.c:2101
#, c-format
msgid "DWARF error: unknown format content type %<PRIu64>"
msgstr "Erreur DWARF: type de contenu de format %<PRIu64> inconnu"
-#: dwarf2.c:2126
+#: dwarf2.c:2171
#, c-format
msgid "DWARF error: line info section is too small (%<PRId64>)"
msgstr "Erreur DWARF: la section des informations de lignes est trop petite (%<PRId64>)"
-#: dwarf2.c:2153
+#: dwarf2.c:2198
#, c-format
msgid "DWARF error: line info data is bigger (%#<PRIx64>) than the space remaining in the section (%#lx)"
msgstr "Erreur DWARF: les données des informations de lignes sont plus grandes (%#<PRIx64>) que l'espace restant dans la section (%#lx)"
-#: dwarf2.c:2166
+#: dwarf2.c:2211
#, c-format
msgid "DWARF error: unhandled .debug_line version %d"
msgstr "Erreur DWARF: version .debug_line %d non prise en charge"
-#: dwarf2.c:2175
+#: dwarf2.c:2220
msgid "DWARF error: ran out of room reading prologue"
msgstr "Erreur DWARF: on est tombé à cours de place lors de la lecture du prologue"
-#: dwarf2.c:2191
+#: dwarf2.c:2236
#, c-format
msgid "DWARF error: line info unsupported segment selector size %u"
msgstr "Erreur DWARF: taille de sélecteur de segment %u non supportée pour les informations de lignes"
-#: dwarf2.c:2213
+#: dwarf2.c:2258
msgid "DWARF error: invalid maximum operations per instruction"
msgstr "Erreur DWARF: opérations maximum par instruction invalide"
-#: dwarf2.c:2225
+#: dwarf2.c:2270
msgid "DWARF error: ran out of room reading opcodes"
msgstr "Erreur DWARF: on est tombé à cours de place en lisant les opcodes"
-#: dwarf2.c:2393
+#: dwarf2.c:2438
msgid "DWARF error: mangled line number section"
msgstr "Erreur DWARF: numéro de ligne de section mutilé"
-#: dwarf2.c:2881
+#: dwarf2.c:2926
msgid "DWARF error: abstract instance recursion detected"
msgstr "Erreur DWARF: récursion d'une instance abstraite détectée"
-#: dwarf2.c:2915 dwarf2.c:3009
+#: dwarf2.c:2960 dwarf2.c:3054
msgid "DWARF error: invalid abstract instance DIE ref"
msgstr "Erreur DWARF: réf DIE d'instance abstraite invalide"
-#: dwarf2.c:2931
+#: dwarf2.c:2976
#, c-format
msgid "DWARF error: unable to read alt ref %<PRIu64>"
msgstr "Erreur DWARF: impossible de lire la ref alt %<PRIu64>"
-#: dwarf2.c:2987
+#: dwarf2.c:3032
#, c-format
msgid "DWARF error: unable to locate abstract instance DIE ref %<PRIu64>"
msgstr "Erreur DWARF: impossible de localiser l'instance abstraite de la réf DIE %<PRIu64>"
-#: dwarf2.c:3024 dwarf2.c:3305 dwarf2.c:3750
+#: dwarf2.c:3069 dwarf2.c:3351 dwarf2.c:3808
#, c-format
msgid "DWARF error: could not find abbrev number %u"
msgstr "Erreur DWARF: ne peut repérer le numéro abrégé %u"
-#: dwarf2.c:3538
+#: dwarf2.c:3594
#, c-format
msgid "DWARF error: could not find variable specification at offset 0x%lx"
msgstr "Erreur DWARF: ne peut repérer la spécification de variable au décalage 0x%lx"
-#: dwarf2.c:3677
+#: dwarf2.c:3735
#, c-format
msgid "DWARF error: found dwarf version '%u', this reader only handles version 2, 3, 4 and 5 information"
msgstr "Erreur DWARF: version DWARF trouvée « %u », ce lecteur ne supporte que les informations des versions 2, 3, 4 et 5"
-#: dwarf2.c:3714
+#: dwarf2.c:3772
#, c-format
msgid "DWARF error: found address size '%u', this reader can not handle sizes greater than '%u'"
msgstr "Erreur DWARF: taille d'adresse obtenue « %u », ce lecteur ne peut traiter des tailles plus grandes que « %u »"
-#: dwarf2.c:3817
+#: dwarf2.c:3885
msgid "DWARF error: DW_AT_comp_dir attribute encountered with a non-string form"
msgstr "Erreur DWARF: attribut DW_AT_comp_dir rencontré sous une forme non-chaîne"
@@ -833,49 +846,49 @@ msgstr "abandon du FDE avec une plage d'adresses nulle dans %pB(%pA).\n"
msgid "error in %pB(%pA); no .eh_frame_hdr table will be created"
msgstr "erreur dans %pB(%pA); aucune table .eh_frame_hdr ne sera créée"
-#: elf-eh-frame.c:1539
+#: elf-eh-frame.c:1541
#, c-format
msgid "FDE encoding in %pB(%pA) prevents .eh_frame_hdr table being created"
msgstr "encodage FDE dans %pB(%pA) empêche la création de la table .eh_frame_hdr"
-#: elf-eh-frame.c:1546
+#: elf-eh-frame.c:1548
msgid "further warnings about FDE encoding preventing .eh_frame_hdr generation dropped"
msgstr "les avertissements suivants à propos de l'encodage FDE empêchant la génération de .eh_frame_hdr sont abandonnés"
-#: elf-eh-frame.c:1866
+#: elf-eh-frame.c:1868
#, c-format
msgid "%pB: %pA not in order"
msgstr "%pB: %pA pas dans l'ordre"
-#: elf-eh-frame.c:1880
+#: elf-eh-frame.c:1882
#, c-format
msgid "%pB: %pA invalid input section size"
msgstr "%pB: %pA taille de section d'entrée invalide"
-#: elf-eh-frame.c:1888
+#: elf-eh-frame.c:1890
#, c-format
msgid "%pB: %pA points past end of text section"
msgstr "%pB: %pA pointe au delà de la fin de la section texte"
-#: elf-eh-frame.c:2141
+#: elf-eh-frame.c:2143
msgid "DW_EH_PE_datarel unspecified for this architecture"
msgstr "DW_EH_PE_datarel non spécifié pour cette architecture"
-#: elf-eh-frame.c:2312
+#: elf-eh-frame.c:2314
#, c-format
msgid "invalid output section for .eh_frame_entry: %pA"
msgstr "section de sortie invalide pour .eh_frame_entry: %pA"
-#: elf-eh-frame.c:2335
+#: elf-eh-frame.c:2337
#, c-format
msgid "invalid contents in %pA section"
msgstr "contenu invalide dans la section %pA"
-#: elf-eh-frame.c:2491
+#: elf-eh-frame.c:2493
msgid ".eh_frame_hdr entry overflow"
msgstr "débordement de l'entrée .eh_frame_hdr"
-#: elf-eh-frame.c:2493
+#: elf-eh-frame.c:2495
msgid ".eh_frame_hdr refers to overlapping FDEs"
msgstr ".eh_frame_hdr fait référence à des FDE qui se chevauchent"
@@ -884,46 +897,46 @@ msgstr ".eh_frame_hdr fait référence à des FDE qui se chevauchent"
msgid "%F%P: dynamic STT_GNU_IFUNC symbol `%s' with pointer equality in `%pB' can not be used when making an executable; recompile with -fPIE and relink with -pie\n"
msgstr "%P%P: le symbole dynamique STT_GNU_IFUNC « %s » avec une égalité de pointeur dans « %pB » ne peut pas être utilisé lors de la création d'un exécutable. Recompilez avec -fPIE et reliez avec -pie\n"
-#: elf-m10200.c:434 elf-m10300.c:2146 elf32-avr.c:1508 elf32-bfin.c:3131
-#: elf32-cr16.c:1432 elf32-cris.c:2034 elf32-crx.c:913 elf32-d10v.c:510
+#: elf-m10200.c:434 elf-m10300.c:2146 elf32-avr.c:1508 elf32-bfin.c:3137
+#: elf32-cr16.c:1429 elf32-cris.c:2034 elf32-crx.c:913 elf32-d10v.c:510
#: elf32-epiphany.c:562 elf32-fr30.c:594 elf32-frv.c:4049 elf32-ft32.c:493
#: elf32-h8300.c:523 elf32-ip2k.c:1477 elf32-iq2000.c:691 elf32-lm32.c:1070
#: elf32-m32c.c:624 elf32-m32r.c:2837 elf32-m68hc1x.c:1271 elf32-mep.c:522
#: elf32-metag.c:1984 elf32-microblaze.c:1623 elf32-moxie.c:288 elf32-mt.c:402
-#: elf32-nds32.c:6044 elf32-or1k.c:1861 elf32-score.c:2743 elf32-score7.c:2552
+#: elf32-nds32.c:6039 elf32-or1k.c:1873 elf32-score.c:2734 elf32-score7.c:2545
#: elf32-spu.c:5084 elf32-tilepro.c:3372 elf32-v850.c:2294 elf32-visium.c:680
#: elf32-xstormy16.c:930 elf64-bpf.c:552 elf64-mmix.c:1541 elfxx-tilegx.c:3742
msgid "internal error: out of range error"
msgstr "erreur interne: hors limite"
-#: elf-m10200.c:438 elf-m10300.c:2150 elf32-avr.c:1512 elf32-bfin.c:3135
-#: elf32-cr16.c:1436 elf32-cris.c:2038 elf32-crx.c:917 elf32-d10v.c:514
+#: elf-m10200.c:438 elf-m10300.c:2150 elf32-avr.c:1512 elf32-bfin.c:3141
+#: elf32-cr16.c:1433 elf32-cris.c:2038 elf32-crx.c:917 elf32-d10v.c:514
#: elf32-fr30.c:598 elf32-frv.c:4053 elf32-ft32.c:497 elf32-h8300.c:527
#: elf32-iq2000.c:695 elf32-lm32.c:1074 elf32-m32c.c:628 elf32-m32r.c:2841
#: elf32-m68hc1x.c:1275 elf32-mep.c:526 elf32-metag.c:1988
#: elf32-microblaze.c:1627 elf32-moxie.c:292 elf32-msp430.c:1510
-#: elf32-nds32.c:6048 elf32-or1k.c:1865 elf32-score.c:2747 elf32-score7.c:2556
+#: elf32-nds32.c:6043 elf32-or1k.c:1877 elf32-score.c:2738 elf32-score7.c:2549
#: elf32-spu.c:5088 elf32-tilepro.c:3376 elf32-v850.c:2298 elf32-visium.c:684
#: elf32-xstormy16.c:934 elf64-mmix.c:1545 elfxx-mips.c:10558
#: elfxx-tilegx.c:3746
msgid "internal error: unsupported relocation error"
msgstr "erreur interne: erreur de réadressage non supportée"
-#: elf-m10200.c:442 elf32-cr16.c:1440 elf32-crx.c:921 elf32-d10v.c:518
+#: elf-m10200.c:442 elf32-cr16.c:1437 elf32-crx.c:921 elf32-d10v.c:518
#: elf32-h8300.c:531 elf32-lm32.c:1078 elf32-m32r.c:2845 elf32-m68hc1x.c:1279
-#: elf32-microblaze.c:1631 elf32-nds32.c:6052 elf32-score.c:2751
-#: elf32-score7.c:2560 elf32-spu.c:5092
+#: elf32-microblaze.c:1631 elf32-nds32.c:6047 elf32-score.c:2742
+#: elf32-score7.c:2553 elf32-spu.c:5092
msgid "internal error: dangerous error"
msgstr "erreur interne: erreur dangereuse"
-#: elf-m10200.c:446 elf-m10300.c:2167 elf32-avr.c:1520 elf32-bfin.c:3143
-#: elf32-cr16.c:1444 elf32-cris.c:2046 elf32-crx.c:925 elf32-d10v.c:522
+#: elf-m10200.c:446 elf-m10300.c:2167 elf32-avr.c:1520 elf32-bfin.c:3149
+#: elf32-cr16.c:1441 elf32-cris.c:2046 elf32-crx.c:925 elf32-d10v.c:522
#: elf32-epiphany.c:577 elf32-fr30.c:606 elf32-frv.c:4061 elf32-ft32.c:505
#: elf32-h8300.c:535 elf32-ip2k.c:1492 elf32-iq2000.c:703 elf32-lm32.c:1082
#: elf32-m32c.c:636 elf32-m32r.c:2849 elf32-m68hc1x.c:1283 elf32-mep.c:534
#: elf32-metag.c:1996 elf32-microblaze.c:1635 elf32-moxie.c:300
-#: elf32-msp430.c:1518 elf32-mt.c:410 elf32-nds32.c:6056 elf32-or1k.c:1873
-#: elf32-score.c:2760 elf32-score7.c:2564 elf32-spu.c:5096
+#: elf32-msp430.c:1518 elf32-mt.c:410 elf32-nds32.c:6051 elf32-or1k.c:1885
+#: elf32-score.c:2751 elf32-score7.c:2557 elf32-spu.c:5096
#: elf32-tilepro.c:3384 elf32-v850.c:2318 elf32-visium.c:692
#: elf32-xstormy16.c:942 elf64-bpf.c:565 elf64-mmix.c:1553 elfxx-tilegx.c:3754
msgid "internal error: unknown error"
@@ -939,11 +952,11 @@ msgstr "%pB: transition de %s à %s non supportée"
msgid "%pB: %s' accessed both as normal and thread local symbol"
msgstr "%pB: « %s » accédé à la fois comme symbole normal et comme symbole locale au thread"
-#: elf-m10300.c:2093 elf32-arm.c:13376 elf32-i386.c:3426 elf32-m32r.c:2331
+#: elf-m10300.c:2093 elf32-arm.c:13377 elf32-i386.c:3426 elf32-m32r.c:2331
#: elf32-m68k.c:3929 elf32-s390.c:3080 elf32-sh.c:3671 elf32-tilepro.c:3275
-#: elf32-xtensa.c:3024 elf64-s390.c:3029 elf64-x86-64.c:4082
+#: elf32-xtensa.c:3034 elf64-s390.c:3029 elf64-x86-64.c:4084
#: elfxx-sparc.c:2917 elfxx-sparc.c:3814 elfxx-tilegx.c:3665
-#: elfnn-aarch64.c:5501 elfnn-aarch64.c:7104
+#: elfnn-aarch64.c:5504 elfnn-aarch64.c:7107
#, c-format
msgid "%pB(%pA+%#<PRIx64>): unresolvable %s relocation against symbol `%s'"
msgstr "%pB(%pA+%#<PRIx64>): réadressage %s sans solution vers le symbole « %s »"
@@ -962,7 +975,7 @@ msgid "internal error: suspicious relocation type used in shared library"
msgstr "erreur interne: type de réadressage douteux utilisé dans une librairie partagée"
#: elf-m10300.c:2650 elf32-avr.c:2486 elf32-frv.c:5621 elf64-ia64-vms.c:365
-#: elfxx-sparc.c:2684 reloc.c:8282 reloc16.c:155 elfnn-ia64.c:365
+#: elfxx-sparc.c:2684 reloc.c:8373 reloc16.c:155 elfnn-ia64.c:365
msgid "%P%F: --relax and -r may not be used together\n"
msgstr "%P%F: --relax et -r ne peuvent pas être utilisés en même temps\n"
@@ -996,45 +1009,54 @@ msgstr "attention: %pB: taille de « no copy on protected » corrompue: 0x%x"
msgid "error: %pB: <corrupt property (0x%x) size: 0x%x>"
msgstr "erreur: %pB: <la taille de la propriété (0x%x) est corrompue: 0x%x>"
-#: elf-properties.c:205
+#: elf-properties.c:217
#, c-format
msgid "warning: %pB: unsupported GNU_PROPERTY_TYPE (%ld) type: 0x%x"
msgstr "attention: %pB: type GNU_PROPERTY_TYPE (%ld) non supporté: 0x%x"
-#: elf-properties.c:391
+#: elf-properties.c:403
msgid "Removed property %W to merge %pB (0x%v) and %pB (0x%v)\n"
msgstr "Propriété supprimée %W à fusionner %pB (0x%v) et %pB (0x%v)\n"
-#: elf-properties.c:397
+#: elf-properties.c:409
msgid "Removed property %W to merge %pB (0x%v) and %pB (not found)\n"
msgstr "Propriété supprimée %W à fusionner %pB (0x%v) et %pB (pas trouvée)\n"
-#: elf-properties.c:406 elf-properties.c:484
+#: elf-properties.c:418 elf-properties.c:496
msgid "Removed property %W to merge %pB and %pB\n"
msgstr "Propriété supprimée %W à fusionner %pB et %pB\n"
-#: elf-properties.c:410
+#: elf-properties.c:422
msgid "Removed property %W to merge %pB and %pB (not found)\n"
msgstr "Propriété supprimée %W à fusionner %pB et %pB (pas trouvée)\n"
-#: elf-properties.c:427
+#: elf-properties.c:439
msgid "Updated property %W (0x%v) to merge %pB (0x%v) and %pB (0x%v)\n"
msgstr "Propriété mise à jour %W (0x%v) à fusionner %pB (0x%v) et %pB (0x%v)\n"
-#: elf-properties.c:436
+#: elf-properties.c:448
msgid "Updated property %W (%v) to merge %pB (0x%v) and %pB (not found)\n"
msgstr "Propriété mise à jour %W (%v) à fusionner %pB (0x%v) et %pB (pas trouvée)\n"
-#: elf-properties.c:478
+#: elf-properties.c:490
msgid "Removed property %W to merge %pB (not found) and %pB (0x%v)\n"
msgstr "Propriété supprimée %W à fusionner %pB (pas trouvée) et %pB (0x%v)\n"
+#: elf-properties.c:671 elfxx-aarch64.c:758 elfxx-x86.c:3716
+msgid "%F%P: failed to create GNU property section\n"
+msgstr "%F%P: échec lors de la création de la section des propriétés GNU\n"
+
+#: elf-properties.c:675 elfxx-aarch64.c:762 elfxx-x86.c:3721
+#, c-format
+msgid "%F%pA: failed to align section\n"
+msgstr "%F%pA: échec lors de l'alignement de la section\n"
+
#. Merge .note.gnu.property sections.
-#: elf-properties.c:640 elf-properties.c:642
+#: elf-properties.c:701 elf-properties.c:703
msgid "\n"
msgstr "\n"
-#: elf-properties.c:641
+#: elf-properties.c:702
msgid "Merging program properties\n"
msgstr "Fusion des propriétés du programme\n"
@@ -1049,7 +1071,7 @@ msgstr "%pB: tentative de charger des chaînes depuis une section non-chaînes (
msgid "%pB: invalid string offset %u >= %<PRIu64> for section `%s'"
msgstr "%pB: chaîne de décalage invalide %u >= %<PRIu64> pour la section « %s »"
-#: elf.c:514 elfnn-aarch64.c:8104
+#: elf.c:514 elfnn-aarch64.c:8107 elfnn-loongarch.c:3045
#, c-format
msgid "%pB symbol number %lu references nonexistent SHT_SYMTAB_SHNDX section"
msgstr "%pB le symbole numéro %lu fait référence à une section SHT_SYMTAB_SHNDX inexistante"
@@ -1133,7 +1155,7 @@ msgstr ""
"\n"
"Section dynamique:\n"
-#: elf.c:1851
+#: elf.c:1854
#, c-format
msgid ""
"\n"
@@ -1142,7 +1164,7 @@ msgstr ""
"\n"
"Définitions des versions:\n"
-#: elf.c:1876
+#: elf.c:1879
#, c-format
msgid ""
"\n"
@@ -1151,97 +1173,101 @@ msgstr ""
"\n"
"Références de version:\n"
-#: elf.c:1881
+#: elf.c:1884
#, c-format
msgid " required from %s:\n"
msgstr " requis par %s:\n"
-#: elf.c:2071
+#: elf.c:2075
#, c-format
msgid "%pB: warning: loop in section dependencies detected"
msgstr "%pB: attention: boucle détectée dans les dépendances de sections"
-#: elf.c:2178
+#: elf.c:2182
#, c-format
msgid "%pB: warning: multiple symbol tables detected - ignoring the table in section %u"
msgstr "%pB: attention: plusieurs tables de symboles détectées — la table dans la section %u est ignorée"
-#: elf.c:2262
+#: elf.c:2266
#, c-format
msgid "%pB: warning: multiple dynamic symbol tables detected - ignoring the table in section %u"
msgstr "%pB: attention: plusieurs tables de symboles dynamiques ont été détectées — la table dans la section %u est ignorée"
-#: elf.c:2375
+#: elf.c:2385
#, c-format
msgid "%pB: invalid link %u for reloc section %s (index %u)"
msgstr "%pB: lien %u invalide pour la section de réadressages %s (index %u)"
-#: elf.c:2466
+#: elf.c:2442
#, c-format
msgid "%pB: warning: secondary relocation section '%s' for section %pA found - ignoring"
msgstr "%pB: attention: la section de réadressage secondaire « %s » pour la section %pA a été trouvée — elle est ignorée"
-#: elf.c:2552 elf.c:2567 elf.c:2578 elf.c:2591
+#: elf.c:2528 elf.c:2543 elf.c:2554 elf.c:2567
#, c-format
msgid "%pB: unknown type [%#x] section `%s'"
msgstr "%pB: type [%#x] inconnu dans la section « %s »"
-#: elf.c:3288
+#: elf.c:3265
#, c-format
msgid "%pB: error: alignment power %d of section `%pA' is too big"
msgstr "%pB: erreur: l'alignement à la puissance %d de la section « %pA » est trop grand"
-#: elf.c:3321
+#: elf.c:3298
#, c-format
msgid "warning: section `%pA' type changed to PROGBITS"
msgstr "attention: type de la section « %pA » changé en PROGBITS"
-#: elf.c:3805
+#: elf.c:3783
#, c-format
msgid "%pB: too many sections: %u"
msgstr "%pB: trop de sections: %u"
-#: elf.c:3891
+#: elf.c:3869
#, c-format
msgid "%pB: sh_link of section `%pA' points to discarded section `%pA' of `%pB'"
msgstr "%pB: le sh_link de la section « %pA » pointe vers la section abandonnée « %pA » de « %pB »"
-#: elf.c:3909
+#: elf.c:3887
#, c-format
msgid "%pB: sh_link of section `%pA' points to removed section `%pA' of `%pB'"
msgstr "%pB: le sh_link de la section « %pA » pointe vers la section supprimée « %pA » de « %pB »"
-#: elf.c:4471
+#: elf.c:4455
#, c-format
msgid "%pB: GNU_MBIND section `%pA' has invalid sh_info field: %d"
msgstr "%pB: la section GNU_MBIND « %pA » a un champ sh_info invalide: %d"
-#: elf.c:5065
+#: elf.c:4638
+msgid "%F%P: failed to size relative relocations\n"
+msgstr "%F%P: échec lors du dimensionnement des réadressages relatifs\n"
+
+#: elf.c:5062
#, c-format
msgid "%pB: TLS sections are not adjacent:"
msgstr "%pB: Les sections TLS ne sont pas adjacentes:"
-#: elf.c:5072
+#: elf.c:5069
#, c-format
msgid "\t TLS: %pA"
msgstr "\t TLS: %pA"
-#: elf.c:5076
+#: elf.c:5073
#, c-format
msgid "\tnon-TLS: %pA"
msgstr "\tnon-TLS: %pA"
-#: elf.c:5672
+#: elf.c:5696
#, c-format
msgid "%pB: The first section in the PT_DYNAMIC segment is not the .dynamic section"
msgstr "%pB: La première section dans le segment PT_DYNAMIC n'est pas la section .dynamic"
-#: elf.c:5698
+#: elf.c:5722
#, c-format
msgid "%pB: not enough room for program headers, try linking with -N"
msgstr "%pB: pas suffisamment d'espace pour les en-têtes du programme, essayer l'option -N"
-#: elf.c:5815
+#: elf.c:5839
#, c-format
msgid "%pB: section %pA lma %#<PRIx64> adjusted to %#<PRIx64>"
msgstr "%pB: section %pA avec lma %#<PRIx64> ajustée à %#<PRIx64>"
@@ -1249,172 +1275,177 @@ msgstr "%pB: section %pA avec lma %#<PRIx64> ajustée à %#<PRIx64>"
#. The fix for this error is usually to edit the linker script being
#. used and set up the program headers manually. Either that or
#. leave room for the headers at the start of the SECTIONS.
-#: elf.c:5952
+#: elf.c:5976
#, c-format
msgid "%pB: error: PHDR segment not covered by LOAD segment"
msgstr "%pB: erreur: segment PHDR non couvert par le segment LOAD"
-#: elf.c:5992
+#: elf.c:6016
#, c-format
msgid "%pB: section `%pA' can't be allocated in segment %d"
msgstr "%pB: la section « %pA » ne peut pas être allouée dans le segment %d"
-#: elf.c:6129
+#: elf.c:6156
#, c-format
msgid "%pB: warning: allocated section `%s' not in segment"
msgstr "%pB: attention: section allouée « %s » n'est pas dans le segment"
-#: elf.c:6290
+#: elf.c:6292
+#, c-format
+msgid "%pB: warning: unable to allocate any sections to PT_GNU_RELRO segment"
+msgstr "%pB: attention: impossible d'allouer une quelconque section dans le segment PT_GNU_RELRO"
+
+#: elf.c:6322
#, c-format
msgid "%pB: error: non-load segment %d includes file header and/or program header"
msgstr "%pB: erreur: le segment de non-chargement %d inclus un en-tête de fichier ou de programme"
-#: elf.c:6799
+#: elf.c:6829
#, c-format
msgid "%pB: symbol `%s' required but not present"
msgstr "%pB: symbole « %s » requis mais absent"
-#: elf.c:7151
+#: elf.c:7186
#, c-format
msgid "%pB: warning: empty loadable segment detected at vaddr=%#<PRIx64>, is this intentional?"
msgstr "%pB: attention: segment chargeable vide détecté à vaddr=%#<PRIx64>, est-ce intentionnel ?"
-#: elf.c:7779
+#: elf.c:7851
#, c-format
msgid "%pB: warning: segment alignment of %#<PRIx64> is too large"
msgstr "%pB: attention: un alignement de segment de %#<PRIx64> est trop grand"
-#: elf.c:8292
+#: elf.c:8359
#, c-format
msgid "%pB: Unable to handle section index %x in ELF symbol. Using ABS instead."
msgstr "%pB: Impossible de gérer l'indice de section %x dans le symbole ELF. Utilisation de ABS à la place."
-#: elf.c:8322
+#: elf.c:8389
#, c-format
msgid "unable to find equivalent output section for symbol '%s' from section '%s'"
msgstr "incapable de trouver un équivalent pour le symbole « %s » de la section « %s »"
-#: elf.c:8735
+#: elf.c:8799
#, c-format
msgid "%pB: .gnu.version_r invalid entry"
msgstr "%pB: entrée .gnu.version_r invalide"
-#: elf.c:8868
+#: elf.c:8932
#, c-format
msgid "%pB: .gnu.version_d invalid entry"
msgstr "%pB: entrée .gnu.version_d invalide"
-#: elf.c:9325
+#: elf.c:9389
#, c-format
msgid "%pB:%pA: error: attempting to write into an unallocated compressed section"
msgstr "%pB:%pA: erreur: tentative d'écrire dans une session compressée non allouée"
-#: elf.c:9334
+#: elf.c:9398
#, c-format
msgid "%pB:%pA: error: attempting to write over the end of the section"
msgstr "%pB:%pA: erreur: tentative d'écrire au delà de la fin de la section"
-#: elf.c:9345
+#: elf.c:9409
#, c-format
msgid "%pB:%pA: error: attempting to write section into an empty buffer"
msgstr "%pB:%pA: erreur: tentative d'écrire la section dans un tampon vide"
-#: elf.c:10246
+#: elf.c:10317
#, c-format
msgid "%pB: warning: win32pstatus %s of size %lu bytes is too small"
msgstr "%pB: attention: le win32pstatus %s, d'une taille de %lu octets, est trop petit"
-#: elf.c:10324
+#: elf.c:10395
#, c-format
msgid "%pB: win32pstatus NOTE_INFO_MODULE of size %lu is too small to contain a name of size %u"
msgstr "%pB: le win32pstatus NOTE_INFO_MODULE, d'une taille de %lu, est trop petit pour contenir un nom d'une taille de %u"
-#: elf.c:12633
+#: elf.c:12977
msgid "GNU_MBIND section is supported only by GNU and FreeBSD targets"
msgstr "la section GNU_MBIND est uniquement supportée pour les cibles GNU et FreeBSD"
-#: elf.c:12636
+#: elf.c:12980
msgid "symbol type STT_GNU_IFUNC is supported only by GNU and FreeBSD targets"
msgstr "le type symbolique STT_GNU_IFUNC est uniquement supporté pour les cibles GNU et FreeBSD"
-#: elf.c:12639
+#: elf.c:12983
msgid "symbol binding STB_GNU_UNIQUE is supported only by GNU and FreeBSD targets"
msgstr "la liaison symbolique STB_GNU_UNIQUE est uniquement supportée pour les cibles GNU et FreeBSD"
-#: elf.c:12642
+#: elf.c:12986
msgid "GNU_RETAIN section is supported only by GNU and FreeBSD targets"
msgstr "la section GNU_RETAIN est uniquement supportée pour les cibles GNU et FreeBSD"
-#: elf.c:12850 elf64-sparc.c:123 elfcode.h:1504
+#: elf.c:13194 elf64-sparc.c:123 elfcode.h:1505
#, c-format
msgid "%pB(%pA): relocation %d has invalid symbol index %ld"
msgstr "%pB(%pA): réadressage %d a un index de symbole %ld invalide"
-#: elf.c:12925
+#: elf.c:13269
#, c-format
msgid "%pB(%pA): link section cannot be set because the output file does not have a symbol table"
msgstr "%pB(%pA): la section de liaison ne peut pas être définie car le fichier de sortie n'a pas de table de symboles"
-#: elf.c:12937
+#: elf.c:13281
#, c-format
msgid "%pB(%pA): info section index is invalid"
msgstr "%pB(%pA): l'index de la section d'information est invalide"
-#: elf.c:12951
+#: elf.c:13295
#, c-format
msgid "%pB(%pA): info section index cannot be set because the section is not in the output"
msgstr "%pB(%pA): l'index de la section d'information ne peut pas être défini car la section n'est pas dans la sortie"
-#: elf.c:13026
+#: elf.c:13370
#, c-format
msgid "%pB(%pA): error: secondary reloc section processed twice"
msgstr "%pB(%pA): erreur: la section de réadressage secondaire est compressée deux fois"
-#: elf.c:13038
+#: elf.c:13382
#, c-format
msgid "%pB(%pA): error: secondary reloc section has zero sized entries"
msgstr "%pB(%pA): erreur: la section de réadressage secondaire a des entrées de taille nulle"
-#: elf.c:13049
+#: elf.c:13393
#, c-format
msgid "%pB(%pA): error: secondary reloc section has non-standard sized entries"
msgstr "%pB(%pA): erreur: la section de réadressage secondaire a des entrées d'une taille non standard"
-#: elf.c:13061
+#: elf.c:13405
#, c-format
msgid "%pB(%pA): error: secondary reloc section is empty!"
msgstr "%pB(%pA): erreur: la section de réadressage secondaire est vide !"
-#: elf.c:13084
+#: elf.c:13428
#, c-format
msgid "%pB(%pA): error: internal relocs missing for secondary reloc section"
msgstr "%pB(%pA): erreur: réadressages internes manquants pour la section de réadressage secondaire"
-#: elf.c:13103
+#: elf.c:13447
#, c-format
msgid "%pB(%pA): error: reloc table entry %u is empty"
msgstr "%pB:%pA: erreur: l'entrée %u de la table de réadressage est vide"
-#: elf.c:13128
+#: elf.c:13472
#, c-format
msgid "%pB(%pA): error: secondary reloc %u references a missing symbol"
msgstr "%pB(%pA): erreur: le réadressage secondaire %u fait référence à un symbole manquant"
-#: elf.c:13145
+#: elf.c:13489
#, c-format
msgid "%pB(%pA): error: secondary reloc %u references a deleted symbol"
msgstr "%pB(%pA): erreur: le réadressage secondaire %u fait référence à un symbole supprimé"
-#: elf.c:13158
+#: elf.c:13502
#, c-format
msgid "%pB(%pA): error: secondary reloc %u is of an unknown type"
msgstr "%pB(%pA): erreur: le réadressage secondaire %u est d'un type inconnu"
#. Ignore init flag - it may not be set, despite the flags field
#. containing valid data.
-#: elf32-arc.c:455 elf32-arm.c:15047 elf32-frv.c:6612 elf32-iq2000.c:868
-#: elf32-m32c.c:914 elf32-mt.c:560 elf32-rl78.c:1260 elf32-rx.c:3206
-#: elf32-visium.c:844 elf64-ppc.c:5347 elfnn-aarch64.c:7334
+#: elf32-arc.c:455 elf32-arm.c:15095 elf32-frv.c:6612 elf32-iq2000.c:868
+#: elf32-m32c.c:914 elf32-mt.c:560 elf32-rl78.c:1275 elf32-rx.c:3217
+#: elf32-visium.c:844 elf64-ppc.c:5507 elfnn-aarch64.c:7337
#, c-format
msgid "private flags = 0x%lx:"
msgstr "fanions privés = 0x%lx:"
@@ -1460,7 +1491,7 @@ msgid "error: attempting to link %pB with a binary %pB of different architecture
msgstr "erreur: tentative de lier %pB avec un binaire %pB d'une architecture différente"
#: elf32-arc.c:938 elf32-iq2000.c:844 elf32-m32c.c:889 elf32-m68hc1x.c:1390
-#: elf32-ppc.c:3866 elf64-sparc.c:722 elfxx-mips.c:15568
+#: elf32-ppc.c:3881 elf64-sparc.c:722 elfxx-mips.c:15584
#, c-format
msgid "%pB: uses different e_flags (%#x) fields than previous modules (%#x)"
msgstr "%pB: utilise des champs e_flags (%#x) différents des modules précédents (%#x)"
@@ -1487,33 +1518,33 @@ msgstr "%pB(%pA+%#<PRIx64>): le réadressage CMEM vers « %s+%#<PRIx64> » est
msgid "GOT and PLT relocations cannot be fixed with a non dynamic linker"
msgstr "les réadressages GOT et PLT ne peuvent pas être corrigés avec un éditeur de liens non dynamique"
-#: elf32-arc.c:1909 elf32-rl78.c:1098 elf32-rx.c:1475
+#: elf32-arc.c:1909 elf32-rx.c:1486
#, c-format
msgid "%pB(%pA): warning: unaligned access to symbol '%s' in the small data area"
msgstr "%pB(%pA): attention: accès non aligné au symbole « %s » dans la zone des petites données"
-#: elf32-arc.c:1914 elf32-rl78.c:1103 elf32-rx.c:1480
+#: elf32-arc.c:1914 elf32-rx.c:1491
#, c-format
msgid "%pB(%pA): internal error: out of range error"
msgstr "%pB(%pA): erreur interne: hors limite"
-#: elf32-arc.c:1919 elf32-rl78.c:1108 elf32-rx.c:1485
+#: elf32-arc.c:1919 elf32-rx.c:1496
#, c-format
msgid "%pB(%pA): internal error: unsupported relocation error"
msgstr "%pB(%pA): erreur interne: réadressage non supporté"
-#: elf32-arc.c:1924 elf32-rl78.c:1113 elf32-rx.c:1490
+#: elf32-arc.c:1924 elf32-rx.c:1501
#, c-format
msgid "%pB(%pA): internal error: dangerous relocation"
msgstr "%pB(%pA): erreur interne: réadressage dangereux"
-#: elf32-arc.c:1929 elf32-rl78.c:1118 elf32-rx.c:1495
+#: elf32-arc.c:1929 elf32-rx.c:1506
#, c-format
msgid "%pB(%pA): internal error: unknown error"
msgstr "%pB(%pA): erreur interne: erreur inconnue"
-#: elf32-arc.c:2023 elf32-arc.c:2091 elf32-arm.c:15502 elf32-metag.c:2251
-#: elf32-nds32.c:5494 elfnn-aarch64.c:7741 elfnn-riscv.c:617
+#: elf32-arc.c:2023 elf32-arc.c:2091 elf32-arm.c:15550 elf32-metag.c:2251
+#: elf32-nds32.c:5489 elfnn-aarch64.c:7744 elfnn-riscv.c:617
#, c-format
msgid "%pB: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC"
msgstr "%pB: réadressage de %s en vertu de « %s » ne peut être utilisé lors de la création d'un objet partagé; recompilez avec -fPIC"
@@ -1531,596 +1562,597 @@ msgstr "attention: %pB: attribut d'objet ARC %d inconnu"
# Les auteurs francophones que j'ai trouvés utilisent le mot « veneer ». Le mot « trampoline » est nettement plus approprié
# pour désigner une instruction intermédiaire dont le seul but est de faire rebondir un branchement court vers une destination plus
# éloignée.
-#: elf32-arm.c:4333 elf32-arm.c:4367 elf32-arm.c:4386 elf32-arm.c:4438
+#: elf32-arm.c:4334 elf32-arm.c:4368 elf32-arm.c:4387 elf32-arm.c:4439
#, c-format
msgid "%pB(%pA): 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"
msgstr "%pB(%pA): attention: les trampolines (aka veneers) de branchements longs utilisés dans la section avec l'attribut de section SHF_ARM_PURECODE n'est supporté que sur les cibles M-profile implémentant l'instruction movw."
-#: elf32-arm.c:4398 elf32-arm.c:4452 elf32-arm.c:9141 elf32-arm.c:9231
+#: elf32-arm.c:4399 elf32-arm.c:4453 elf32-arm.c:9142 elf32-arm.c:9232
#, c-format
msgid "%pB(%s): warning: interworking not enabled; first occurrence: %pB: %s call to %s"
msgstr "%pB(%s): attention: l'inter-réseautage n'est pas activé; première occurrence: %pB: appel %s à %s"
-#: elf32-arm.c:4578
+#: elf32-arm.c:4579
#, c-format
msgid "ERROR: CMSE stub (%s section) too far (%#<PRIx64>) from destination (%#<PRIx64>)"
msgstr "ERREUR: l'ébauche CMSE (section %s) est trop loin (%#<PRIx64>) de la destination (%#<PRIx64>)"
-#: elf32-arm.c:4747
+#: elf32-arm.c:4748
#, c-format
msgid "no address assigned to the veneers output section %s"
msgstr "aucune adresse assignée à la section de sortie %s des trampolines (veneers)"
-#: elf32-arm.c:4822 elf32-arm.c:6968 elf32-csky.c:3400 elf32-hppa.c:582
-#: elf32-m68hc1x.c:164 elf32-metag.c:1180 elf32-nios2.c:2201 elf64-ppc.c:3827
-#: elf64-ppc.c:13638 elfnn-aarch64.c:3187
+#: elf32-arm.c:4823 elf32-arm.c:6969 elf32-csky.c:3400 elf32-hppa.c:582
+#: elf32-m68hc1x.c:164 elf32-metag.c:1180 elf32-nios2.c:2201 elf64-ppc.c:3881
+#: elf64-ppc.c:14018 elfnn-aarch64.c:3187
#, c-format
msgid "%pB: cannot create stub entry %s"
msgstr "%pB: ne peut créer l'entrée de l'ébauche %s"
-#: elf32-arm.c:5043 elf32-csky.c:3742 elf32-hppa.c:732 elf32-m68hc11.c:422
-#: elf32-m68hc12.c:542 elf32-metag.c:3345 elf32-nios2.c:2494 elf64-ppc.c:11473
+#: elf32-arm.c:5044 elf32-csky.c:3742 elf32-hppa.c:732 elf32-m68hc11.c:422
+#: elf32-m68hc12.c:542 elf32-metag.c:3345 elf32-nios2.c:2494 elf64-ppc.c:11656
#: elfnn-aarch64.c:3256
msgid "%F%P: Could not assign '%pA' to an output section. Retry without --enable-non-contiguous-regions.\n"
msgstr "%F%P: Impossible d'assigner « %pA » à une section de sortie. Réessayez sans --enable-non-contiguous-regions.\n"
-#: elf32-arm.c:6011
+#: elf32-arm.c:6012
#, c-format
msgid "%pB: special symbol `%s' only allowed for ARMv8-M architecture or later"
msgstr "%pB: le symbole spécial « %s » est uniquement autorisé pour les architectures ARMv8-M ou ultérieures"
-#: elf32-arm.c:6020
+#: elf32-arm.c:6021
#, c-format
msgid "%pB: invalid special symbol `%s'; it must be a global or weak function symbol"
msgstr "%pB: symbole spécial « %s » invalide; il doit être un symbole de fonction global ou faible"
-#: elf32-arm.c:6059
+#: elf32-arm.c:6060
#, c-format
msgid "%pB: invalid standard symbol `%s'; it must be a global or weak function symbol"
msgstr "%pB: symbole standard « %s » invalide; il doit être un symbole de fonction global ou faible"
-#: elf32-arm.c:6065
+#: elf32-arm.c:6066
#, c-format
msgid "%pB: absent standard symbol `%s'"
msgstr "%pB: symbole standard « %s » absent"
-#: elf32-arm.c:6077
+#: elf32-arm.c:6078
#, c-format
msgid "%pB: `%s' and its special symbol are in different sections"
msgstr "%pB: « %s » est ses symboles spéciaux sont dans des sections différentes"
-#: elf32-arm.c:6089
+#: elf32-arm.c:6090
#, c-format
msgid "%pB: entry function `%s' not output"
msgstr "%pB: fonction « %s » d'entrée par écrite"
-#: elf32-arm.c:6096
+#: elf32-arm.c:6097
#, c-format
msgid "%pB: entry function `%s' is empty"
msgstr "%pB: la fonction « %s » d'entrée est vide"
-#: elf32-arm.c:6225
+#: elf32-arm.c:6226
#, c-format
msgid "%pB: --in-implib only supported for Secure Gateway import libraries"
msgstr "%pB: --in-implib uniquement supporté pour les bibliothèques d'import Secure Gateway"
-#: elf32-arm.c:6274
+#: elf32-arm.c:6275
#, c-format
msgid "%pB: invalid import library entry: `%s'; symbol should be absolute, global and refer to Thumb functions"
msgstr "%pB: entrée de bibliothèque d'importation invalide: « %s »; le symbole devrait être absolu, global et faire référence à des fonctions Thumb"
-#: elf32-arm.c:6296
+#: elf32-arm.c:6297
#, c-format
msgid "entry function `%s' disappeared from secure code"
msgstr "la fonction d'entrée « %s » a disparu du code sûr"
-#: elf32-arm.c:6320
+#: elf32-arm.c:6321
#, c-format
msgid "`%s' refers to a non entry function"
msgstr "« %s » fait référence à quelque chose qui n'est pas une fonction d'entrée"
-#: elf32-arm.c:6335
+#: elf32-arm.c:6336
#, c-format
msgid "%pB: visibility of symbol `%s' has changed"
msgstr "%pB: la visibilité du symbole « %s » a changé"
-#: elf32-arm.c:6344
+#: elf32-arm.c:6345
#, c-format
msgid "%pB: incorrect size for symbol `%s'"
msgstr "%pB: taille incorrecte pour le symbole « %s »"
-#: elf32-arm.c:6363
+#: elf32-arm.c:6364
#, c-format
msgid "offset of veneer for entry function `%s' not a multiple of its size"
msgstr "le décalage du trampoline (aka veneer) pour la fonction d'entrée « %s » n'est pas un multiple de sa taille"
-#: elf32-arm.c:6383
+#: elf32-arm.c:6384
msgid "new entry function(s) introduced but no output import library specified:"
msgstr "une ou plusieurs nouvelles fonctions d'entrée spécifiées mais aucune bibliothèque d'import est spécifiée:"
-#: elf32-arm.c:6391
+#: elf32-arm.c:6392
#, c-format
msgid "start address of `%s' is different from previous link"
msgstr "l'adresse de départ de « %s » est différente de celle de l'édition de liens précédente"
-#: elf32-arm.c:7101 elf32-arm.c:7136
+#: elf32-arm.c:7102 elf32-arm.c:7137
#, c-format
msgid "unable to find %s glue '%s' for '%s'"
msgstr "incapable de repérer le liant %s « %s » pour « %s »"
-#: elf32-arm.c:7847
+#: elf32-arm.c:7848
#, c-format
msgid "%pB: BE8 images only valid in big-endian mode"
msgstr "%pB: les images BE8 ne sont valables qu'en mode gros boutiste"
#. Give a warning, but do as the user requests anyway.
-#: elf32-arm.c:8074
+#: elf32-arm.c:8075
#, c-format
msgid "%pB: warning: selected VFP11 erratum workaround is not necessary for target architecture"
msgstr "%pB: attention: le palliatif VFP11 sélectionné n'est pas nécessaire avec l'architecture cible"
-#: elf32-arm.c:8101
+#: elf32-arm.c:8102
#, c-format
msgid "%pB: warning: selected STM32L4XX erratum workaround is not necessary for target architecture"
msgstr "%pB: attention: le palliatif STM32L4XX sélectionné n'est pas nécessaire avec l'architecture cible"
-#: elf32-arm.c:8637 elf32-arm.c:8657 elf32-arm.c:8724 elf32-arm.c:8743
+#: elf32-arm.c:8638 elf32-arm.c:8658 elf32-arm.c:8725 elf32-arm.c:8744
#, c-format
msgid "%pB: unable to find %s veneer `%s'"
msgstr "%pB: incapable de trouver le trampoline (veneer) « %s » pour %s"
-#: elf32-arm.c:8950
+#: elf32-arm.c:8951
#, c-format
msgid "%pB(%pA+%#x): error: multiple load detected in non-last IT block instruction: STM32L4XX veneer cannot be generated; use gcc option -mrestrict-it to generate only one instruction per IT block"
msgstr "%pB(%pA+%#x): erreur: chargements multiples détectés dans un bloc d'instruction IT qui n'est pas le dernier: le trampoline (veneer) du STM32L4XX ne peut pas être généré; utilisez l'option -mrestrict-it de gcc pour générer seulement une instruction par bloc IT"
-#: elf32-arm.c:9048
+#: elf32-arm.c:9049
#, c-format
msgid "invalid TARGET2 relocation type '%s'"
msgstr "type de réadressage TARGET2 « %s » invalide"
#. FIXME: We ought to be able to generate thumb-1 PLT
#. instructions...
-#: elf32-arm.c:9818
+#: elf32-arm.c:9819
#, c-format
msgid "%pB: warning: thumb-1 mode PLT generation not currently supported"
msgstr "%pB: attention: génération de PLT dans le mode thumb-1 pas encore supportée"
-#: elf32-arm.c:10127 elf32-arm.c:10169
+#: elf32-arm.c:10128 elf32-arm.c:10170
#, c-format
msgid "%pB(%pA+%#<PRIx64>): unexpected %s instruction '%#lx' in TLS trampoline"
msgstr "%pB(%pA+%#<PRIx64>): instruction %s « %lx » inattendue dans le trampoline TLS"
-#: elf32-arm.c:10519
+#: elf32-arm.c:10520
msgid "shared object"
msgstr "objet partagé"
-#: elf32-arm.c:10522
+#: elf32-arm.c:10523
msgid "PIE executable"
msgstr "exécutable PIE"
-#: elf32-arm.c:10525
+#: elf32-arm.c:10526
#, c-format
msgid "%pB: relocation %s against external or undefined symbol `%s' can not be used when making a %s; recompile with -fPIC"
msgstr "%pB: le réadressage de %s vers le symbole externe ou non défini « %s » ne peut pas être utilisé en construisant un %s; recompilez avec -fPIC"
-#: elf32-arm.c:10627 elf32-arm.c:11044
+#: elf32-arm.c:10628 elf32-arm.c:11045
#, c-format
msgid "%pB: warning: %s BLX instruction targets %s function '%s'"
msgstr "%pB: attention: instruction %s BLX vise la fonction %s « %s »."
-#: elf32-arm.c:11678
+#: elf32-arm.c:11679
#, c-format
msgid "%pB: expected symbol index in range 0..%lu but found local symbol with index %lu"
msgstr "%pB: index de symbole attendu dans la plage 0..%lu mais un symbole local avec l'index %lu a été rencontré"
-#: elf32-arm.c:11953 elf32-arm.c:11979
+#: elf32-arm.c:11954 elf32-arm.c:11980
#, c-format
msgid "%pB(%pA+%#<PRIx64>): unexpected %s instruction '%#lx' referenced by TLS_GOTDESC"
msgstr "%pB(%pA+%#<PRIx64>): instruction %s '%#lx' inattendue référencée par TLS_GOTDESC"
-#: elf32-arm.c:12025 elf32-csky.c:4970 elf32-m68k.c:3733 elf32-metag.c:1913
+#: elf32-arm.c:12026 elf32-csky.c:4970 elf32-m68k.c:3733 elf32-metag.c:1913
#: elf32-nios2.c:4382
#, c-format
msgid "%pB(%pA+%#<PRIx64>): %s relocation not permitted in shared object"
msgstr "%pB(%pA+%#<PRIx64>): réadressage %s pas permis dans un objet partagé"
-#: elf32-arm.c:12239
+#: elf32-arm.c:12240
#, c-format
msgid "%pB(%pA+%#<PRIx64>): only ADD or SUB instructions are allowed for ALU group relocations"
msgstr "%pB(%pA+%#<PRIx64>): seuls ADD ou SUB sont permis dans les réadressages du groupe ALU"
-#: elf32-arm.c:12280 elf32-arm.c:12372 elf32-arm.c:12460 elf32-arm.c:12550
+#: elf32-arm.c:12281 elf32-arm.c:12373 elf32-arm.c:12461 elf32-arm.c:12551
#, c-format
msgid "%pB(%pA+%#<PRIx64>): overflow whilst splitting %#<PRIx64> for group relocation %s"
msgstr "%pB(%pA+%#<PRIx64>): débordement en scindant %#<PRIx64> pour le réadressage du groupe %s"
-#: elf32-arm.c:12608 elf32-arm.c:12767
+#: elf32-arm.c:12609 elf32-arm.c:12768
msgid "local symbol index too big"
msgstr "index de symbole local trop long"
-#: elf32-arm.c:12618 elf32-arm.c:12652
+#: elf32-arm.c:12619 elf32-arm.c:12653
msgid "no dynamic index information available"
msgstr "pas d'information d'index dynamique disponible"
-#: elf32-arm.c:12660
+#: elf32-arm.c:12661
msgid "invalid dynamic index"
msgstr "index dynamique invalide"
-#: elf32-arm.c:12777
+#: elf32-arm.c:12778
msgid "dynamic index information not available"
msgstr "information d'index dynamique pas disponible"
-#: elf32-arm.c:13208 elf32-sh.c:3565
+#: elf32-arm.c:13209 elf32-sh.c:3565
#, c-format
msgid "%pB(%pA+%#<PRIx64>): %s relocation against SEC_MERGE section"
msgstr "%pB(%pA+%#<PRIx64>): %s réadressage vers une section SEC_MERGE"
-#: elf32-arm.c:13321 elf32-m68k.c:3966 elf32-xtensa.c:2762
-#: elfnn-aarch64.c:6831
+#: elf32-arm.c:13322 elf32-m68k.c:3966 elf32-xtensa.c:2772
+#: elfnn-aarch64.c:6834
#, c-format
msgid "%pB(%pA+%#<PRIx64>): %s used with TLS symbol %s"
msgstr "%pB(%pA+%#<PRIx64>): %s utilisé avec le symbole TLS %s"
-#: elf32-arm.c:13323 elf32-m68k.c:3968 elf32-xtensa.c:2764
-#: elfnn-aarch64.c:6833
+#: elf32-arm.c:13324 elf32-m68k.c:3968 elf32-xtensa.c:2774
+#: elfnn-aarch64.c:6836
#, c-format
msgid "%pB(%pA+%#<PRIx64>): %s used with non-TLS symbol %s"
msgstr "%pB(%pA+%#<PRIx64>): %s utilisé avec le symbole non-TLS %s"
-#: elf32-arm.c:13406 elf32-tic6x.c:2649 elfnn-aarch64.c:7168
+#: elf32-arm.c:13407 elf32-tic6x.c:2649 elfnn-aarch64.c:7171
msgid "out of range"
msgstr "hors limite"
-#: elf32-arm.c:13410 elf32-nios2.c:4516 elf32-pru.c:936 elf32-tic6x.c:2653
-#: elfnn-aarch64.c:7172
+#: elf32-arm.c:13411 elf32-nios2.c:4516 elf32-pru.c:936 elf32-tic6x.c:2653
+#: elfnn-aarch64.c:7175
msgid "unsupported relocation"
msgstr "réadressage non supporté"
-#: elf32-arm.c:13418 elf32-nios2.c:4526 elf32-pru.c:946 elf32-tic6x.c:2661
-#: elfnn-aarch64.c:7180
+#: elf32-arm.c:13419 elf32-nios2.c:4526 elf32-pru.c:946 elf32-tic6x.c:2661
+#: elfnn-aarch64.c:7183
msgid "unknown error"
msgstr "erreur inconnue"
-#: elf32-arm.c:13898
+#: elf32-arm.c:13901
#, c-format
msgid "warning: not setting interworking flag of %pB since it has already been specified as non-interworking"
msgstr "attention: pas d'initialisation du fanion d'inter-réseautage de %pB puisqu'il a déjà été spécifié sans inter-réseautage"
-#: elf32-arm.c:13902
+#: elf32-arm.c:13905
#, c-format
msgid "warning: clearing the interworking flag of %pB due to outside request"
msgstr "attention: mise à zéro du fanion d'inter-réseautage de %pB en raison d'une requête externe"
-#: elf32-arm.c:13947
+#: elf32-arm.c:13950
#, c-format
msgid "warning: clearing the interworking flag of %pB because non-interworking code in %pB has been linked with it"
msgstr "attention: mise à zéro du fanion d'inter-réseautage %pB en raison du code sans inter-réseautage dans %pB lié avec lui"
-#: elf32-arm.c:14034
+#: elf32-arm.c:14037
#, c-format
msgid "%pB: unknown mandatory EABI object attribute %d"
msgstr "%pB: l'attribut d'objet EABI obligatoire %d est inconnu"
-#: elf32-arm.c:14042
+#: elf32-arm.c:14045
#, c-format
msgid "warning: %pB: unknown EABI object attribute %d"
msgstr "attention: %pB: l'attribut d'objet EABI %d est inconnu"
-#: elf32-arm.c:14342
+#: elf32-arm.c:14380
#, c-format
msgid "error: %pB: unknown CPU architecture"
msgstr "erreur: %pB: architecture CPU inconnue"
-#: elf32-arm.c:14380 elf32-nios2.c:2950
+#: elf32-arm.c:14418 elf32-nios2.c:2950
#, c-format
msgid "error: %pB: conflicting CPU architectures %d/%d"
msgstr "erreur: %pB: architectures CPU conflictuelles %d/%d"
-#: elf32-arm.c:14477
+#: elf32-arm.c:14515
#, c-format
msgid "Error: %pB has both the current and legacy Tag_MPextension_use attributes"
msgstr "Erreur: %pB utilise les deux attributs Tag_MPextension_use actuel et hérité"
-#: elf32-arm.c:14506
+#: elf32-arm.c:14544
#, c-format
msgid "error: %pB uses VFP register arguments, %pB does not"
msgstr "erreur: %pB passe les paramètres dans un registre VFP alors que %pB ne le fait pas"
-#: elf32-arm.c:14665
+#: elf32-arm.c:14713
#, c-format
msgid "error: %pB: unable to merge virtualization attributes with %pB"
msgstr "erreur: %pB: impossible de fusionner les attributs de visualisation avec %pB"
-#: elf32-arm.c:14691
+#: elf32-arm.c:14739
#, c-format
msgid "error: %pB: conflicting architecture profiles %c/%c"
msgstr "erreur: %pB: profils d'architecture conflictuels %c/%c"
-#: elf32-arm.c:14830
+#: elf32-arm.c:14878
#, c-format
msgid "warning: %pB: conflicting platform configuration"
msgstr "attention: %pB: configuration de plateforme conflictuelle"
-#: elf32-arm.c:14839
+#: elf32-arm.c:14887
#, c-format
msgid "error: %pB: conflicting use of R9"
msgstr "erreur: %pB: utilisation conflictuelle de R9"
-#: elf32-arm.c:14851
+#: elf32-arm.c:14899
#, c-format
msgid "error: %pB: SB relative addressing conflicts with use of R9"
msgstr "erreur: %pB: adressage relatif SB entre en conflit avec l'utilisation de R9"
-#: elf32-arm.c:14864
+#: elf32-arm.c:14912
#, c-format
msgid "warning: %pB 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 "attention: %pB utilise des wchar_t de %u octets alors que la sortie doit utiliser des wchar_t de %u octets. L'utilisation de wchar_t entre objets peu échouer"
-#: elf32-arm.c:14895
+#: elf32-arm.c:14943
#, c-format
msgid "warning: %pB uses %s enums yet the output is to use %s enums; use of enum values across objects may fail"
msgstr "attention: %pB utilise des enums %s alors que la sortie doit utiliser des enums %s. L'utilisation des valeurs enum entre objets peu échouer"
-#: elf32-arm.c:14907
+#: elf32-arm.c:14955
#, c-format
msgid "error: %pB uses iWMMXt register arguments, %pB does not"
msgstr "erreur: %pB passe les paramètres dans le registre iWMMXt contrairement à %pB"
-#: elf32-arm.c:14924
+#: elf32-arm.c:14972
#, c-format
msgid "error: fp16 format mismatch between %pB and %pB"
msgstr "erreur: désaccord de format fp16 entre %pB et %pB"
-#: elf32-arm.c:14960
+#: elf32-arm.c:15008
#, c-format
msgid "%pB has both the current and legacy Tag_MPextension_use attributes"
msgstr "%pB utilise les deux attributs Tag_MPextension_use actuel et hérité"
-#: elf32-arm.c:15056
+#: elf32-arm.c:15104
#, c-format
msgid " [interworking enabled]"
msgstr " [inter-réseautage autorisé]"
-#: elf32-arm.c:15064
+#: elf32-arm.c:15112
#, c-format
msgid " [VFP float format]"
msgstr " [format flottant VFP]"
-#: elf32-arm.c:15066
+#: elf32-arm.c:15114
#, c-format
msgid " [Maverick float format]"
msgstr " [format flottant Maverick]"
-#: elf32-arm.c:15068
+#: elf32-arm.c:15116
#, c-format
msgid " [FPA float format]"
msgstr " [format flottant FPA]"
-#: elf32-arm.c:15071
+#: elf32-arm.c:15119
#, c-format
msgid " [floats passed in float registers]"
msgstr " [valeurs en virgule flottante passées dans des registres de valeurs en virgule flottante]"
-#: elf32-arm.c:15074 elf32-arm.c:15160
+#: elf32-arm.c:15122 elf32-arm.c:15208
#, c-format
msgid " [position independent]"
msgstr " [position indépendante]"
-#: elf32-arm.c:15077
+#: elf32-arm.c:15125
#, c-format
msgid " [new ABI]"
msgstr " [nouvel ABI]"
-#: elf32-arm.c:15080
+#: elf32-arm.c:15128
#, c-format
msgid " [old ABI]"
msgstr " [ancien ABI]"
-#: elf32-arm.c:15083
+#: elf32-arm.c:15131
#, c-format
msgid " [software FP]"
msgstr " [virgule flottante logiciel]"
-#: elf32-arm.c:15092
+#: elf32-arm.c:15140
#, c-format
msgid " [Version1 EABI]"
msgstr " [Version1 EABI]"
-#: elf32-arm.c:15095 elf32-arm.c:15106
+#: elf32-arm.c:15143 elf32-arm.c:15154
#, c-format
msgid " [sorted symbol table]"
msgstr " [table des symboles triés]"
-#: elf32-arm.c:15097 elf32-arm.c:15108
+#: elf32-arm.c:15145 elf32-arm.c:15156
#, c-format
msgid " [unsorted symbol table]"
msgstr " [table des symboles non triés]"
-#: elf32-arm.c:15103
+#: elf32-arm.c:15151
#, c-format
msgid " [Version2 EABI]"
msgstr " [Version2 EABI]"
-#: elf32-arm.c:15111
+#: elf32-arm.c:15159
#, c-format
msgid " [dynamic symbols use segment index]"
msgstr " [symboles dynamiques utilisent un index de segment]"
-#: elf32-arm.c:15114
+#: elf32-arm.c:15162
#, c-format
msgid " [mapping symbols precede others]"
msgstr " [mapping de symboles précèdes les autres]"
-#: elf32-arm.c:15121
+#: elf32-arm.c:15169
#, c-format
msgid " [Version3 EABI]"
msgstr " [Version3 EABI]"
-#: elf32-arm.c:15125
+#: elf32-arm.c:15173
#, c-format
msgid " [Version4 EABI]"
msgstr " [Version4 EABI]"
-#: elf32-arm.c:15129
+#: elf32-arm.c:15177
#, c-format
msgid " [Version5 EABI]"
msgstr " [Version5 EABI]"
-#: elf32-arm.c:15132
+#: elf32-arm.c:15180
#, c-format
msgid " [soft-float ABI]"
msgstr " [soft-float ABI]"
-#: elf32-arm.c:15135
+#: elf32-arm.c:15183
#, c-format
msgid " [hard-float ABI]"
msgstr " [hard-float ABI]"
-#: elf32-arm.c:15141
+#: elf32-arm.c:15189
#, c-format
msgid " [BE8]"
msgstr " [BE8]"
-#: elf32-arm.c:15144
+#: elf32-arm.c:15192
#, c-format
msgid " [LE8]"
msgstr " [LE8]"
-#: elf32-arm.c:15150
+#: elf32-arm.c:15198
#, c-format
msgid " <EABI version unrecognised>"
msgstr " <Version EABI non reconnue>"
-#: elf32-arm.c:15157
+#: elf32-arm.c:15205
#, c-format
msgid " [relocatable executable]"
msgstr " [exécutables relocalisés]"
-#: elf32-arm.c:15163
+#: elf32-arm.c:15211
#, c-format
msgid " [FDPIC ABI supplement]"
msgstr " [supplément ABI FDPIC]"
-#: elf32-arm.c:15168 elfnn-aarch64.c:7337
+#: elf32-arm.c:15216 elfnn-aarch64.c:7340
#, c-format
msgid " <Unrecognised flag bits set>"
msgstr " <Bits de fanions non reconnus>"
-#: elf32-arm.c:15285 elf32-arm.c:15419 elf32-i386.c:1524 elf32-s390.c:923
-#: elf32-tic6x.c:2724 elf32-tilepro.c:1435 elf32-xtensa.c:1094
-#: elf64-s390.c:845 elf64-x86-64.c:1900 elfxx-sparc.c:1386 elfxx-tilegx.c:1662
-#: elfnn-aarch64.c:7608 elfnn-riscv.c:660
+#: elf32-arm.c:15333 elf32-arm.c:15467 elf32-i386.c:1511 elf32-s390.c:923
+#: elf32-tic6x.c:2724 elf32-tilepro.c:1435 elf32-xtensa.c:1102
+#: elf64-s390.c:845 elf64-x86-64.c:1882 elfxx-sparc.c:1386 elfxx-tilegx.c:1662
+#: elfxx-x86.c:953 elfnn-aarch64.c:7611 elfnn-loongarch.c:604
+#: elfnn-riscv.c:660
#, c-format
msgid "%pB: bad symbol index: %d"
msgstr "%pB: symbole index erroné: %d"
-#: elf32-arm.c:15675
+#: elf32-arm.c:15723
#, c-format
msgid "FDPIC does not yet support %s relocation to become dynamic for executable"
msgstr "FDPIC ne supporte pas encore le réadressage %s pour devenir dynamique à l'exécution"
-#: elf32-arm.c:16936
+#: elf32-arm.c:16984
#, c-format
msgid "errors encountered processing file %pB"
msgstr "erreurs rencontrées pendant le traitement du fichier %pB"
-#: elf32-arm.c:17309 elflink.c:12991 elflink.c:13038
+#: elf32-arm.c:17357 elflink.c:13186 elflink.c:13233
#, c-format
msgid "could not find section %s"
msgstr "ne peut repérer la section %s"
-#: elf32-arm.c:18230
+#: elf32-arm.c:18278
#, c-format
msgid "%pB: Number of symbols in input file has increased from %lu to %u\n"
msgstr "%pB: Le nombre de symboles dans le fichier d'entrée a augmenté de %lu à %u\n"
-#: elf32-arm.c:18494
+#: elf32-arm.c:18542
#, c-format
msgid "%pB: error: Cortex-A8 erratum stub is allocated in unsafe location"
msgstr "%pB: erreur: l'ébauche d'erratum du Cortex A8 est allouée à un emplacement peu sûr"
#. There's not much we can do apart from complain if this
#. happens.
-#: elf32-arm.c:18521
+#: elf32-arm.c:18569
#, c-format
msgid "%pB: error: Cortex-A8 erratum stub out of range (input file too large)"
msgstr "%pB: erreur: l'ébauche d'erratum du Cortex A8 est hors limite (fichier d'entrée trop grand)"
-#: elf32-arm.c:19348 elf32-arm.c:19370
+#: elf32-arm.c:19396 elf32-arm.c:19418
#, c-format
msgid "%pB: error: VFP11 veneer out of range"
msgstr "%pB: erreur: vernis VFP11 hors limite"
-#: elf32-arm.c:19421
+#: elf32-arm.c:19469
#, c-format
msgid "%pB(%#<PRIx64>): error: cannot create STM32L4XX veneer; jump out of range by %<PRId64> bytes; cannot encode branch instruction"
msgstr "%pB(%#<PRIx64>): erreur: impossible de créer le trampoline (veneer) du STM32L4XX; saut hors de portée pour %<PRId64> octets; impossible d'encoder l'instruction de branchement"
-#: elf32-arm.c:19460
+#: elf32-arm.c:19508
#, c-format
msgid "%pB: error: cannot create STM32L4XX veneer"
msgstr "%pB: erreur: impossible de créer le trampoline (veneer) du STM32L4XX."
-#: elf32-arm.c:20544
+#: elf32-arm.c:20590
#, c-format
msgid "error: %pB is already in final BE8 format"
msgstr "erreur: %pB est déjà au format final BE8"
-#: elf32-arm.c:20620
+#: elf32-arm.c:20666
#, c-format
msgid "error: source object %pB has EABI version %d, but target %pB has EABI version %d"
msgstr "erreur: l'objet source %pB a l'EABI version %d alors que la cible %pB a l'EABI version %d"
-#: elf32-arm.c:20635
+#: elf32-arm.c:20681
#, c-format
msgid "error: %pB is compiled for APCS-%d, whereas target %pB uses APCS-%d"
msgstr "erreur: %pB compilé pour APCS-%d alors que la cible %pB utilise APCS-%d"
-#: elf32-arm.c:20645
+#: elf32-arm.c:20691
#, c-format
msgid "error: %pB passes floats in float registers, whereas %pB passes them in integer registers"
msgstr "erreur: %pB passage de valeurs en virgule flottante dans les registres FP alors que %pB les passe dans les registres entiers"
-#: elf32-arm.c:20649
+#: elf32-arm.c:20695
#, c-format
msgid "error: %pB passes floats in integer registers, whereas %pB passes them in float registers"
msgstr "erreur: %pB passage de valeurs en virgule flottante dans les registres entiers alors que %pB les passe dans les registres FP"
-#: elf32-arm.c:20659 elf32-arm.c:20663 elf32-arm.c:20673
+#: elf32-arm.c:20705 elf32-arm.c:20709 elf32-arm.c:20719
#, c-format
msgid "error: %pB uses %s instructions, whereas %pB does not"
msgstr "erreur: %pB utilise les instructions %s alors que %pB ne les utilise pas"
-#: elf32-arm.c:20677
+#: elf32-arm.c:20723
#, c-format
msgid "error: %pB does not use %s instructions, whereas %pB does"
msgstr "erreur: %pB n'utilise pas les instructions %s alors que %pB les utilise"
-#: elf32-arm.c:20696
+#: elf32-arm.c:20742
#, c-format
msgid "error: %pB uses software FP, whereas %pB uses hardware FP"
msgstr "erreur: %pB utilise le logiciel pour virgule flottante alors que %pB utilise le matériel pour virgule flottante"
-#: elf32-arm.c:20700
+#: elf32-arm.c:20746
#, c-format
msgid "error: %pB uses hardware FP, whereas %pB uses software FP"
msgstr "erreur: %pB utilise le matériel pour virgule flottante alors que %pB utilise le logiciel pour virgule flottante"
-#: elf32-arm.c:20714
+#: elf32-arm.c:20760
#, c-format
msgid "warning: %pB supports interworking, whereas %pB does not"
msgstr "attention: %pB supporte l'inter-réseautage, contrairement à %pB"
-#: elf32-arm.c:20720
+#: elf32-arm.c:20766
#, c-format
msgid "warning: %pB does not support interworking, whereas %pB does"
msgstr "attention: %pB ne supporte pas l'inter-réseautage, contrairement à %pB"
-#: elf32-avr.c:1516 elf32-bfin.c:3139 elf32-cris.c:2042 elf32-epiphany.c:573
+#: elf32-avr.c:1516 elf32-bfin.c:3145 elf32-cris.c:2042 elf32-epiphany.c:573
#: elf32-fr30.c:602 elf32-frv.c:4057 elf32-ft32.c:501 elf32-ip2k.c:1488
#: elf32-iq2000.c:699 elf32-m32c.c:632 elf32-mep.c:530 elf32-metag.c:1992
-#: elf32-moxie.c:296 elf32-msp430.c:1514 elf32-mt.c:406 elf32-or1k.c:1869
+#: elf32-moxie.c:296 elf32-msp430.c:1514 elf32-mt.c:406 elf32-or1k.c:1881
#: elf32-tilepro.c:3380 elf32-v850.c:2302 elf32-visium.c:688
#: elf32-xstormy16.c:938 elf64-bpf.c:561 elf64-mmix.c:1549 elfxx-tilegx.c:3750
msgid "internal error: dangerous relocation"
@@ -2131,82 +2163,82 @@ msgstr "erreur interne: réadressage dangereux"
msgid "cannot create stub entry %s"
msgstr "ne peut créer l'entrée d'ébauche %s"
-#: elf32-bfin.c:107 elf32-bfin.c:363
+#: elf32-bfin.c:108 elf32-bfin.c:367
msgid "relocation should be even number"
msgstr "le réadressage devrait être un nombre paire"
-#: elf32-bfin.c:1587
+#: elf32-bfin.c:1593
#, c-format
msgid "%pB(%pA+%#<PRIx64>): unresolvable relocation against symbol `%s'"
msgstr "%pB(%pA+%#<PRIx64>): réadressage sans solution vers le symbole « %s »"
-#: elf32-bfin.c:1619 elf32-i386.c:3466 elf32-m68k.c:4006 elf32-s390.c:3138
-#: elf64-s390.c:3087 elf64-x86-64.c:4137
+#: elf32-bfin.c:1625 elf32-i386.c:3466 elf32-m68k.c:4006 elf32-s390.c:3138
+#: elf64-s390.c:3087 elf64-x86-64.c:4139
#, c-format
msgid "%pB(%pA+%#<PRIx64>): reloc against `%s': error %d"
msgstr "%pB(%pA+%#<PRIx64>): réadressage sur « %s »: erreur %d"
-#: elf32-bfin.c:2645
+#: elf32-bfin.c:2651
#, c-format
msgid "%pB: relocation at `%pA+%#<PRIx64>' references symbol `%s' with nonzero addend"
msgstr "%pB: réadressage à « %pA+%#<PRIx64> » fait référence au symbole « %s » avec un opérande non nul"
-#: elf32-bfin.c:2662
+#: elf32-bfin.c:2668
msgid "relocation references symbol not defined in the module"
msgstr "le réadressage fait référence à un symbole non défini dans le module"
-#: elf32-bfin.c:2760
+#: elf32-bfin.c:2766
msgid "R_BFIN_FUNCDESC references dynamic symbol with nonzero addend"
msgstr "R_BFIN_FUNCDESC fait référence à un symbole dynamique avec un opérande non nul"
-#: elf32-bfin.c:2800 elf32-bfin.c:2921
+#: elf32-bfin.c:2806 elf32-bfin.c:2927
msgid "cannot emit fixups in read-only section"
msgstr "impossible d'apporter des corrections dans une section en lecture seule"
-#: elf32-bfin.c:2830 elf32-bfin.c:2958 elf32-lm32.c:1007 elf32-sh.c:4383
+#: elf32-bfin.c:2836 elf32-bfin.c:2964 elf32-lm32.c:1007 elf32-sh.c:4383
msgid "cannot emit dynamic relocations in read-only section"
msgstr "impossible d'éditer les réadressages dynamiques dans une section en lecture seule"
-#: elf32-bfin.c:2880
+#: elf32-bfin.c:2886
msgid "R_BFIN_FUNCDESC_VALUE references dynamic symbol with nonzero addend"
msgstr "R_BFIN_FUNCDESC_VALUE fait référence à un symbole dynamique avec un opérande non nul"
-#: elf32-bfin.c:3043
+#: elf32-bfin.c:3049
msgid "relocations between different segments are not supported"
msgstr "les réadressages entre segments différents ne sont pas supportés"
-#: elf32-bfin.c:3044
+#: elf32-bfin.c:3050
msgid "warning: relocation references a different segment"
msgstr "attention: réadressage fait référence à un segment différent"
#. Ignore init flag - it may not be set, despite the flags field containing valid data.
-#: elf32-bfin.c:4729 elf32-cris.c:3862 elf32-m68hc1x.c:1415 elf32-m68k.c:1265
-#: elf32-score.c:3996 elf32-score7.c:3801 elf32-vax.c:536 elf32-xgate.c:494
-#: elfxx-mips.c:16254
+#: elf32-bfin.c:4732 elf32-cris.c:3862 elf32-m68hc1x.c:1415 elf32-m68k.c:1265
+#: elf32-score.c:3987 elf32-score7.c:3794 elf32-vax.c:536 elf32-xgate.c:494
+#: elfxx-mips.c:16270
#, c-format
msgid "private flags = %lx:"
msgstr "fanions privés = %lx"
-#: elf32-bfin.c:4780 elf32-frv.c:6585
+#: elf32-bfin.c:4783 elf32-frv.c:6585
#, c-format
msgid "%pB: cannot link non-fdpic object file into fdpic executable"
msgstr "%pB: ne peut lier un fichier objet non fdpic dans un exécutable fdpic"
-#: elf32-bfin.c:4784 elf32-frv.c:6589
+#: elf32-bfin.c:4787 elf32-frv.c:6589
#, c-format
msgid "%pB: cannot link fdpic object file into non-fdpic executable"
msgstr "%pB: ne peut lier un fichier objet fdpic dans un exécutable non fdpic"
-#: elf32-bfin.c:4921
+#: elf32-bfin.c:4924
#, c-format
msgid "*** check this relocation %s"
msgstr "*** vérifiez ce réadressage %s"
-#: elf32-bfin.c:5037
+#: elf32-bfin.c:5040
msgid "the bfin target does not currently support the generation of copy relocations"
msgstr "la cible bfin ne supporte actuellement pas la génération de réadressages copiés"
-#: elf32-bfin.c:5331 elf32-cr16.c:2713 elf32-m68k.c:4420
+#: elf32-bfin.c:5334 elf32-cr16.c:2710 elf32-m68k.c:4420
msgid "unsupported relocation type"
msgstr "type de réadressage non supporté"
@@ -2382,7 +2414,7 @@ msgid "warning: file %pB's arch flag %s conflicts with target ck%s, using %s"
msgstr "avertissement: le fanion d'archive %2$s du fichier %1$pB est en conflit avec la cible ck%3$s, utilise %4$s"
#. The r_type is error, not support it.
-#: elf32-csky.c:4342 elf32-i386.c:350
+#: elf32-csky.c:4342 elf32-i386.c:344
#, c-format
msgid "%pB: unsupported relocation type: %#x"
msgstr "%pB: type de réadressage non supporté: %#x"
@@ -2505,7 +2537,7 @@ msgstr "%pB: utilise différents champs e_flags (%#x) de ceux des modules précÃ
msgid "%pB: relocations in generic ELF (EM: %d)"
msgstr "%pB: réadressages en format ELF générique (EM: %d)"
-#: elf32-hppa.c:761 elf32-hppa.c:842 elf64-ppc.c:12022
+#: elf32-hppa.c:761 elf32-hppa.c:842 elf64-ppc.c:12181
msgid "%F%P: Could not assign %pA to an output section. Retry without --enable-non-contiguous-regions.\n"
msgstr "%F%P: Impossible d'assigner %pA à une section de sortie. Réessayez sans --enable-non-contiguous-regions.\n"
@@ -2548,73 +2580,77 @@ msgstr "%pB(%pA+%#<PRIx64>): ne sait pas traiter %s pour %s"
msgid ".got section not immediately after .plt section"
msgstr "section .got pas immédiatement après la section .plt"
-#: elf32-i386.c:1169 elf64-x86-64.c:1380
+#: elf32-i386.c:1163 elf64-x86-64.c:1369
#, c-format
msgid "%pB: TLS transition from %s to %s against `%s' at %#<PRIx64> in section `%pA' failed"
msgstr "%pB: Échec de la transition TLS de %s vers %s sur « %s » à %#<PRIx64> dans la section « %pA »"
-#: elf32-i386.c:1272
+#: elf32-i386.c:1266
#, c-format
msgid "%pB: direct GOT relocation R_386_GOT32X against `%s' without base register can not be used when making a shared object"
msgstr "%pB: le réadressage GOT direct R_386_GOT32X sur le symbole « %s » sans registre de base ne peut pas être utilisé lors de la création d'un objet partagé"
-#: elf32-i386.c:1721 elf32-s390.c:1151 elf32-sh.c:5488 elf32-tilepro.c:1548
-#: elf32-xtensa.c:1266 elf64-s390.c:1083 elfxx-sparc.c:1556
-#: elfxx-tilegx.c:1767 elfnn-riscv.c:568
+#: elf32-i386.c:1695 elf32-s390.c:1151 elf32-sh.c:5488 elf32-tilepro.c:1548
+#: elf32-xtensa.c:1274 elf64-s390.c:1083 elfxx-sparc.c:1556
+#: elfxx-tilegx.c:1767 elfnn-loongarch.c:555 elfnn-riscv.c:568
#, c-format
msgid "%pB: `%s' accessed both as normal and thread local symbol"
msgstr "%pB: « %s » accédé à la fois comme symbole normal et comme symbole locale au thread"
-#: elf32-i386.c:1793
+#: elf32-i386.c:1767
#, c-format
msgid "%pB: unsupported non-PIC call to IFUNC `%s'"
msgstr "%pB: appel non-PIC non supporté vers IFUNC « %s »"
-#: elf32-i386.c:2373 elf64-x86-64.c:2721 elfnn-riscv.c:2284
+#: elf32-i386.c:2357 elf64-x86-64.c:2701 elfnn-riscv.c:2300
#, c-format
msgid "%pB: relocation %s against STT_GNU_IFUNC symbol `%s' isn't supported"
msgstr "%pB: le réadressage %s sur le symbole STT_GNU_IFUNC « %s » n'est pas supporté"
-#: elf32-i386.c:2406 elf32-i386.c:3677 elf32-i386.c:3824 elf64-x86-64.c:2778
-#: elf64-x86-64.c:4310 elf64-x86-64.c:4472 elfnn-riscv.c:2157
-#: elfnn-riscv.c:2956 elfnn-riscv.c:3030
+#: elf32-i386.c:2390 elf32-i386.c:3677 elf32-i386.c:3825 elf64-x86-64.c:2758
+#: elf64-x86-64.c:4312 elf64-x86-64.c:4475 elfnn-riscv.c:2173
+#: elfnn-riscv.c:2972 elfnn-riscv.c:3046
#, c-format
msgid "Local IFUNC function `%s' in %pB\n"
msgstr "Fonction IFUNC locale « %s » dans %pB\n"
-#: elf32-i386.c:2575
+#: elf32-i386.c:2563
#, c-format
msgid "%pB: direct GOT relocation %s against `%s' without base register can not be used when making a shared object"
msgstr "%pB: le réadressage GOT direct %s vers « %s » sans registre de base ne peut pas être utilisé lors de la création d'un objet partagé"
-#: elf32-i386.c:2610 elf64-x86-64.c:2988
+#: elf32-i386.c:2598 elf64-x86-64.c:2974
msgid "hidden symbol"
msgstr "symbole caché"
-#: elf32-i386.c:2613 elf64-x86-64.c:2991
+#: elf32-i386.c:2601 elf64-x86-64.c:2977
msgid "internal symbol"
msgstr "symbole interne"
-#: elf32-i386.c:2616 elf64-x86-64.c:2994
+#: elf32-i386.c:2604 elf64-x86-64.c:2980
msgid "protected symbol"
msgstr "symbole protégé"
-#: elf32-i386.c:2619 elf64-x86-64.c:2997
+#: elf32-i386.c:2607 elf64-x86-64.c:2983
msgid "symbol"
msgstr "symbole"
-#: elf32-i386.c:2625
+#: elf32-i386.c:2613
#, c-format
msgid "%pB: relocation R_386_GOTOFF against undefined %s `%s' can not be used when making a shared object"
msgstr "%pB: réadressage R_386_GOTOFF sur le symbole %s « %s » non défini ne peut pas être utilisé lors de la création d'un objet partagé"
# « la %s progétée » a un %s qui est remplacé par le texte non traduit « function » ou « data ».
# Heureusement, cette ligne n'existe plus dans le code source actuel, pas besoin de signaler un bug.
-#: elf32-i386.c:2638
+#: elf32-i386.c:2626
#, c-format
msgid "%pB: relocation R_386_GOTOFF against protected %s `%s' can not be used when making a shared object"
msgstr "%pB: réadressage R_386_GOTOFF vers la %s protégée « %s » ne peut pas être utilisé lors de la création d'un objet partagé"
+#: elf32-i386.c:4028 elf64-x86-64.c:4686
+msgid "%F%P: discarded output section: `%pA'\n"
+msgstr "%F%P: section de sortie rejetée: « %pA »\n"
+
#: elf32-ip2k.c:855 elf32-ip2k.c:861 elf32-ip2k.c:928 elf32-ip2k.c:934
msgid "ip2k relaxer: switch table without complete matching relocation information."
msgstr "relâche ip2k: table de commutation sans concordance complète des informations de réadressage"
@@ -2660,7 +2696,7 @@ msgstr "%pB: la cible (%s) du réadressage %s est dans la mauvaise section (%pA)
msgid "%pB: instruction set mismatch with previous modules"
msgstr "%pB: jeu d'instructions ne concorde par avec les modules précédents"
-#: elf32-m32r.c:3300 elf32-nds32.c:6851
+#: elf32-m32r.c:3300 elf32-nds32.c:6846
#, c-format
msgid "private flags = %lx"
msgstr "fanions privés = %lx"
@@ -2770,12 +2806,12 @@ msgstr " [memory=flat]"
msgid " [XGATE RAM offsetting]"
msgstr " [décalage RAM XGATE]"
-#: elf32-m68k.c:1157 elf32-m68k.c:1165 elf32-ppc.c:3582 elf32-ppc.c:3590
+#: elf32-m68k.c:1157 elf32-m68k.c:1165 elf32-ppc.c:3597 elf32-ppc.c:3605
#, c-format
msgid "%pB uses hard float, %pB uses soft float"
msgstr "%pB utilise la virgule flottante matérielle, %pB utilise la virgule flottante logicielle"
-#: elf32-m68k.c:1280 elf32-m68k.c:1281 vms-alpha.c:7662 vms-alpha.c:7678
+#: elf32-m68k.c:1280 elf32-m68k.c:1281 vms-alpha.c:7906 vms-alpha.c:7922
msgid "unknown"
msgstr "inconnu"
@@ -2835,7 +2871,7 @@ msgstr "%pB: probablement compilé sans -fPIC ?"
msgid "literal relocation occurs for an external symbol"
msgstr "réadressage littéral rencontré pour un symbole externe"
-#: elf32-mips.c:1824 elf32-score.c:572 elf32-score7.c:472 elf64-mips.c:3559
+#: elf32-mips.c:1824 elf32-score.c:563 elf32-score7.c:465 elf64-mips.c:3559
#: elfn32-mips.c:3375
msgid "32bits gp relative relocation occurs for an external symbol"
msgstr "réadressage relatif gp 32bits rencontré pour un symbole externe"
@@ -2893,92 +2929,92 @@ msgstr "erreur: %pB utilise le modèle de données %s alors que %pB utilise uniq
msgid "error: %pB can use the upper region for data, but %pB assumes data is exclusively in lower memory"
msgstr "erreur: %pB peut utiliser la région haute pour les données mais %pB suppose que les données sont exclusivement en mémoire basse"
-#: elf32-nds32.c:3625
+#: elf32-nds32.c:3620
#, c-format
msgid "error: can't find symbol: %s"
msgstr "erreur: le symbole ne peut être trouvé: %s"
-#: elf32-nds32.c:5524
+#: elf32-nds32.c:5519
#, c-format
msgid "%pB: warning: %s unsupported in shared mode"
msgstr "%pB: attention: %s non supporté en mode partagé"
-#: elf32-nds32.c:5650
+#: elf32-nds32.c:5645
#, c-format
msgid "%pB: warning: unaligned access to GOT entry"
msgstr "%pB: attention: accès non aligné à une entrée GOT"
-#: elf32-nds32.c:5691
+#: elf32-nds32.c:5686
#, c-format
msgid "%pB: warning: relocate SDA_BASE failed"
msgstr "%pB: attention: réadressage SDA_BASE a échoué"
-#: elf32-nds32.c:5713
+#: elf32-nds32.c:5708
#, c-format
msgid "%pB(%pA): warning: unaligned small data access of type %d"
msgstr "%pB(%pA): attention: accès non aligné à une petite donnée de type %d"
-#: elf32-nds32.c:6639
+#: elf32-nds32.c:6634
#, c-format
msgid "%pB: ISR vector size mismatch with previous modules, previous %u-byte, current %u-byte"
msgstr "%pB: Taille de vecteur ISR en désaccord avec les modules précédents: précédent a %u octets; actuel a %u octets"
-#: elf32-nds32.c:6687
+#: elf32-nds32.c:6682
#, c-format
msgid "%pB: warning: endian mismatch with previous modules"
msgstr "%pB: attention: l'ordre des octets n'est pas le même que dans les modules précédents"
-#: elf32-nds32.c:6701
+#: elf32-nds32.c:6696
#, c-format
msgid "%pB: warning: older version of object file encountered, please recompile with current tool chain"
msgstr "%pB: attention: version plus ancienne du fichier objet rencontrée. Veuillez recompiler avec la chaîne d'outils actuelle"
-#: elf32-nds32.c:6789
+#: elf32-nds32.c:6784
#, c-format
msgid "%pB: error: ABI mismatch with previous modules"
msgstr "%pB: erreur: non concordance de l'ABI avec les modules précédents"
-#: elf32-nds32.c:6799
+#: elf32-nds32.c:6794
#, c-format
msgid "%pB: error: instruction set mismatch with previous modules"
msgstr "%pB: erreur: le jeu d'instructions ne concorde par avec les modules précédents"
-#: elf32-nds32.c:6826
+#: elf32-nds32.c:6821
#, c-format
msgid "%pB: warning: incompatible elf-versions %s and %s"
msgstr "%pB: attention: versions elf %s et %s non compatibles"
-#: elf32-nds32.c:6857
+#: elf32-nds32.c:6852
#, c-format
msgid ": n1 instructions"
msgstr ": instructions n1"
-#: elf32-nds32.c:6860
+#: elf32-nds32.c:6855
#, c-format
msgid ": n1h instructions"
msgstr ": instructions n1h"
-#: elf32-nds32.c:9313
+#: elf32-nds32.c:9304
#, c-format
msgid "%pB: error: search_nds32_elf_blank reports wrong node"
msgstr "%pB: erreur: search_nds32_elf_blank rapporte le mauvais nœud"
-#: elf32-nds32.c:9577
+#: elf32-nds32.c:9568
#, c-format
msgid "%pB: warning: %s points to unrecognized reloc at %#<PRIx64>"
msgstr "%pB: attention: %s pointe vers le réadressage non reconnu à %#<PRIx64>"
-#: elf32-nds32.c:12842
+#: elf32-nds32.c:12833
#, c-format
msgid "%pB: nested OMIT_FP in %pA"
msgstr "%pB: OMIT_FP imbriqués dans %pA"
-#: elf32-nds32.c:12861
+#: elf32-nds32.c:12852
#, c-format
msgid "%pB: unmatched OMIT_FP in %pA"
msgstr "%pB: OMIT_FP non apparié dans %pA"
-#: elf32-nds32.c:13143 elfxx-mips.c:13407 reloc.c:8508
+#: elf32-nds32.c:13134 elfxx-mips.c:13426 reloc.c:8599
#, c-format
msgid "%X%P: %pB(%pA): relocation \"%pR\" goes out of range\n"
msgstr "%X%P: %pB(%pA): réadressage « %pR » va en dehors des limites\n"
@@ -3006,7 +3042,7 @@ msgstr "réadressage hors limite"
msgid "dangerous relocation"
msgstr "réadressage dangereux"
-#: elf32-nios2.c:5364
+#: elf32-nios2.c:5360
#, c-format
msgid "dynamic variable `%s' is zero size"
msgstr "la variable dynamique « %s » a une taille nulle"
@@ -3036,128 +3072,128 @@ msgstr "%pB: l'opérande devrait être zéro pour des réadressages got"
msgid "%pB: gotoff relocation against dynamic symbol %s"
msgstr "%pB: réadressage gotoff vers le symbole dynamique %s"
-#: elf32-or1k.c:1554 elf64-alpha.c:4426 elf64-alpha.c:4570
+#: elf32-or1k.c:1551 elf32-or1k.c:1566 elf64-alpha.c:4427 elf64-alpha.c:4571
#, c-format
msgid "%pB: pc-relative relocation against dynamic symbol %s"
msgstr "%pB: réadressage relatif au PC vers le symbole dynamique %s"
-#: elf32-or1k.c:1568
+#: elf32-or1k.c:1580
#, c-format
msgid "%pB: non-pic relocation against symbol %s"
msgstr "%pB: réadressage non-pic vers le symbole dynamique %s"
-#: elf32-or1k.c:1652
+#: elf32-or1k.c:1664
#, c-format
msgid "%pB: support for local dynamic not implemented"
msgstr "%pB: support pour les dynamiques locaux pas implémentée"
-#: elf32-or1k.c:1831
+#: elf32-or1k.c:1843
#, c-format
msgid "%pB: will not resolve runtime TLS relocation"
msgstr "%pB: le réadressage TLS ne sera pas résolu à l'exécution"
-#: elf32-or1k.c:2165
+#: elf32-or1k.c:2177
#, c-format
msgid "%pB: bad relocation section name `%s'"
msgstr "%pB: nom de section de réadressage erroné « %s »"
-#: elf32-or1k.c:3279
+#: elf32-or1k.c:3291
#, c-format
msgid "%pB: %s flag mismatch with previous modules"
msgstr "%pB: désaccord du fanion %s avec les modules précédents"
-#: elf32-ppc.c:987 elf64-ppc.c:1723
+#: elf32-ppc.c:993 elf64-ppc.c:1749
#, c-format
msgid "generic linker can't handle %s"
msgstr "liaison générique ne peut traiter %s"
-#: elf32-ppc.c:1627
+#: elf32-ppc.c:1633
#, c-format
msgid "corrupt %s section in %pB"
msgstr "section %s corrompue dans %pB"
-#: elf32-ppc.c:1646
+#: elf32-ppc.c:1652
#, c-format
msgid "unable to read in %s section from %pB"
msgstr "incapable de lire dans la section %s à partir de %pB"
-#: elf32-ppc.c:1688
+#: elf32-ppc.c:1694
#, c-format
msgid "warning: unable to set size of %s section in %pB"
msgstr "attention: incapable d'initialiser la taille de la section %s dans %pB"
-#: elf32-ppc.c:1737
+#: elf32-ppc.c:1743
msgid "failed to allocate space for new APUinfo section"
msgstr "échec d'allocation d'espace pour une nouvelle section APUinfo"
-#: elf32-ppc.c:1756
+#: elf32-ppc.c:1762
msgid "failed to compute new APUinfo section"
msgstr "échec d'évaluation de la nouvelle section APUinfo"
-#: elf32-ppc.c:1759
+#: elf32-ppc.c:1765
msgid "failed to install new APUinfo section"
msgstr "échec d'installation de la nouvelle section APUinfo"
-#: elf32-ppc.c:2858
+#: elf32-ppc.c:2873
#, c-format
msgid "%pB: relocation %s cannot be used when making a shared object"
msgstr "%pB: réadressage %s ne peut être utilisé lors de la création d'un objet partagé"
-#: elf32-ppc.c:3598 elf32-ppc.c:3606
+#: elf32-ppc.c:3613 elf32-ppc.c:3621
#, c-format
msgid "%pB uses double-precision hard float, %pB uses single-precision hard float"
msgstr "%pB utilise la virgule flottante double précision matérielle, %pB utilise la virgule flottante simple précision matérielle"
-#: elf32-ppc.c:3628 elf32-ppc.c:3636
+#: elf32-ppc.c:3643 elf32-ppc.c:3651
#, c-format
msgid "%pB uses 64-bit long double, %pB uses 128-bit long double"
msgstr "%pB utilise un double long 64 bits, %pB utilise un double long de 128 bits"
-#: elf32-ppc.c:3644 elf32-ppc.c:3652
+#: elf32-ppc.c:3659 elf32-ppc.c:3667
#, c-format
msgid "%pB uses IBM long double, %pB uses IEEE long double"
msgstr "%pB utilise un double long IBM, %pB utilise un double long IEEE"
-#: elf32-ppc.c:3719 elf32-ppc.c:3728
+#: elf32-ppc.c:3734 elf32-ppc.c:3743
#, c-format
msgid "%pB uses AltiVec vector ABI, %pB uses SPE vector ABI"
msgstr "%pB utilise l'ABI de vecteurs AltiVec, %pB utilise l'ABI de vecteurs SPE"
-#: elf32-ppc.c:3757 elf32-ppc.c:3766
+#: elf32-ppc.c:3772 elf32-ppc.c:3781
#, c-format
msgid "%pB uses r3/r4 for small structure returns, %pB uses memory"
msgstr "%pB utilise r3/r4 pour les retours de petites structures, %pB utilise la mémoire"
-#: elf32-ppc.c:3830
+#: elf32-ppc.c:3845
#, c-format
msgid "%pB: compiled with -mrelocatable and linked with modules compiled normally"
msgstr "%pB: compilé avec -mrelocatable et fait l'édition de lien avec les modules compilés normalement"
-#: elf32-ppc.c:3838
+#: elf32-ppc.c:3853
#, c-format
msgid "%pB: compiled normally and linked with modules compiled with -mrelocatable"
msgstr "%pB: compilé normalement et fait l'édition de lien avec les modules compilés avec -mrelocatable"
-#: elf32-ppc.c:3907
+#: elf32-ppc.c:3924
#, c-format
msgid "%pB(%pA+0x%lx): expected 16A style relocation on 0x%08x insn"
msgstr "%pB(%pA+0x%lx): réadressage du style 16A attendu sur l'insn 0x%08x"
-#: elf32-ppc.c:3926
+#: elf32-ppc.c:3943
#, c-format
msgid "%pB(%pA+0x%lx): expected 16D style relocation on 0x%08x insn"
msgstr "%pB(%pA+0x%lx): réadressage du style 16D attendu sur l'insn 0x%08x"
-#: elf32-ppc.c:4029
+#: elf32-ppc.c:4047
#, c-format
msgid "bss-plt forced due to %pB"
msgstr "bss-plt forcé à cause de %pB"
-#: elf32-ppc.c:4031
+#: elf32-ppc.c:4049
msgid "bss-plt forced by profiling"
msgstr "bss-plt forcé par le profilage"
-#: elf32-ppc.c:4608 elf64-ppc.c:8317
+#: elf32-ppc.c:4626 elf64-ppc.c:8483
msgid "%H: warning: %s unexpected insn %#x.\n"
msgstr "%H: attention: %s insn %#x inattendue.\n"
@@ -3165,36 +3201,41 @@ msgstr "%H: attention: %s insn %#x inattendue.\n"
#. could just mark this symbol to exclude it
#. from tls optimization but it's safer to skip
#. the entire optimization.
-#: elf32-ppc.c:4638 elf64-ppc.c:8382
+#: elf32-ppc.c:4656 elf64-ppc.c:8548
#, c-format
msgid "%H arg lost __tls_get_addr, TLS optimization disabled\n"
msgstr "%H l'argument a perdu __tls_get_addr, optimisation TLS désactivée\n"
-#: elf32-ppc.c:5564 elf32-sh.c:3017 elf32-tilepro.c:2248 elfxx-sparc.c:2454
+#: elf32-ppc.c:5582 elf32-sh.c:3017 elf32-tilepro.c:2248 elfxx-sparc.c:2454
#: elfxx-tilegx.c:2494
#, c-format
msgid "%pB: dynamic relocation in read-only section `%pA'\n"
msgstr "%pB: réadressage dynamique dans une section en lecture seule « %pA »\n"
-#: elf32-ppc.c:7407
+#: elf32-ppc.c:7437
msgid "%P: %H: error: %s with unexpected instruction %x\n"
msgstr "%P: %H: erreur: %s avec l'instruction inattendue %x\n"
-#: elf32-ppc.c:7444
+#: elf32-ppc.c:7475
msgid "%H: fixup branch overflow\n"
msgstr "%H: débordement du branchement de correction\n"
-#: elf32-ppc.c:7484 elf32-ppc.c:7520
+#: elf32-ppc.c:7515 elf32-ppc.c:7553
#, c-format
msgid "%pB(%pA+%#<PRIx64>): error: %s with unexpected instruction %#x"
msgstr "%pB(%pA+%#<PRIx64>): erreur: %s avec l'instruction inattendue %#x"
-#: elf32-ppc.c:7584
+#: elf32-ppc.c:7617
#, c-format
msgid "%X%H: unsupported bss-plt -fPIC ifunc %s\n"
msgstr "%X%H: bss-plt -fPIC ifunc %s non supporté\n"
-#: elf32-ppc.c:7899
+#: elf32-ppc.c:7653
+#, c-format
+msgid "%pB: reloc %#x unsupported"
+msgstr "%pB: réadressage %#x pas supporté"
+
+#: elf32-ppc.c:7938
#, c-format
msgid "%H: non-zero addend on %s reloc against `%s'\n"
msgstr "%H: opérande non nul sur le réadressage %s par rapport à « %s »\n"
@@ -3207,49 +3248,49 @@ msgstr "%H: opérande non nul sur le réadressage %s par rapport à « %s »\n
#. local won't have the +32k reloc addend trick marking
#. -fPIC code, so the linker won't know whether r30 is
#. _GLOBAL_OFFSET_TABLE_ or pointing into a .got2 section.
-#: elf32-ppc.c:7931
+#: elf32-ppc.c:7970
#, c-format
msgid "%X%H: @local call to ifunc %s\n"
msgstr "%X%H: appel @local à ifunc %s\n"
-#: elf32-ppc.c:8109
+#: elf32-ppc.c:8149
#, c-format
msgid "%H: relocation %s for indirect function %s unsupported\n"
msgstr "%H: réadressage %s non supporté pour la fonction indirecte %s\n"
-#: elf32-ppc.c:8441 elf32-ppc.c:8472 elf32-ppc.c:8563 elf32-ppc.c:8659
+#: elf32-ppc.c:8488 elf32-ppc.c:8519 elf32-ppc.c:8622 elf32-ppc.c:8722
#, c-format
msgid "%pB: the target (%s) of a %s relocation is in the wrong output section (%s)"
msgstr "%pB: la cible (%s) d'un réadressage %s est dans la mauvaise section de sortie (%s)"
-#: elf32-ppc.c:8814 elf32-ppc.c:8832
+#: elf32-ppc.c:8900 elf32-ppc.c:8921
msgid "%X%P: %H: %s relocation unsupported for bss-plt\n"
msgstr "%X%P: %H: le réadressage %s n'est pas supporté pour bss-plt\n"
-#: elf32-ppc.c:8913
+#: elf32-ppc.c:9003
#, c-format
msgid "%H: error: %s against `%s' not a multiple of %u\n"
msgstr "%H: erreur: %s par rapport à « %s » n'est pas un multiple de %u\n"
-#: elf32-ppc.c:8942
+#: elf32-ppc.c:9032
#, c-format
msgid "%H: unresolvable %s relocation against symbol `%s'\n"
msgstr "%H: réadressage %s sans solution par rapport au symbole « %s »\n"
-#: elf32-ppc.c:9023
+#: elf32-ppc.c:9114
#, c-format
msgid "%H: %s reloc against `%s': error %d\n"
msgstr "%H: réadressage %s vers « %s »: erreur %d\n"
-#: elf32-ppc.c:9904
+#: elf32-ppc.c:9995
msgid "%X%P: text relocations and GNU indirect functions will result in a segfault at runtime\n"
msgstr "%X%P: les réadressages de textes et les fonctions indirectes GNU résulteront en un crash à l'exécution\n"
-#: elf32-ppc.c:9908 elf64-ppc.c:17667
+#: elf32-ppc.c:9999 elf64-ppc.c:18133
msgid "%P: warning: text relocations and GNU indirect functions may result in a segfault at runtime\n"
msgstr "%P: attention: les réadressages de textes et les fonctions indirectes GNU pourraient résulter en un crash à l'exécution\n"
-#: elf32-ppc.c:9953
+#: elf32-ppc.c:10044
#, c-format
msgid "%s not defined in linker created %pA"
msgstr "%s pas défini dans %pA créé par l'éditeur de liens"
@@ -3259,59 +3300,66 @@ msgstr "%s pas défini dans %pA créé par l'éditeur de liens"
msgid "error: %pB: old incompatible object file detected"
msgstr "erreur: %pB: ancien fichier objet incompatible détecté"
-#: elf32-rl78.c:372
-msgid "internal error: RL78 reloc stack overflow"
-msgstr "erreur interne: débordement de la pile de réadressages RL78"
+#: elf32-rl78.c:551
+msgid "RL78 reloc stack overflow/underflow"
+msgstr "débordement (par le bas ou le haut) de la pile de réadressages RL78"
-#: elf32-rl78.c:383
-msgid "internal error: RL78 reloc stack underflow"
-msgstr "erreur interne: débordement par le bas de la pile de réadressages RL78"
+#: elf32-rl78.c:555
+msgid "RL78 reloc divide by zero"
+msgstr "division par zéro dans le réadressage RL78"
-#: elf32-rl78.c:1053
+#: elf32-rl78.c:1069
msgid "warning: RL78_SYM reloc with an unknown symbol"
msgstr "attention: réadressage RL78_SYM avec un symbole inconnu"
-#: elf32-rl78.c:1084 elf32-rx.c:1461
-#, c-format
-msgid "%pB(%pA): error: call to undefined function '%s'"
-msgstr "%pB(%pA): erreur: appel à la fonction non définie « %s »"
+#: elf32-rl78.c:1115
+msgid "%H: %s out of range\n"
+msgstr "%H: %s hors limite\n"
+
+#: elf32-rl78.c:1122
+msgid "%H: relocation type %u is not supported\n"
+msgstr "%H: le type de réadressage %u n'est pas supporté\n"
-#: elf32-rl78.c:1205
+#: elf32-rl78.c:1134
+msgid "%H: relocation %s returns an unrecognized value %x\n"
+msgstr "%H: le réadressage %s retourne une valeur %x non reconnue\n"
+
+#: elf32-rl78.c:1220
#, c-format
msgid "RL78 ABI conflict: G10 file %pB cannot be linked with %s file %pB"
msgstr "conflit ABI RL78: le fichier G10 %pB ne peut pas être lié avec %s fichier %pB"
# les deux %s sont des noms de processeurs
-#: elf32-rl78.c:1222
+#: elf32-rl78.c:1237
#, c-format
msgid "RL78 ABI conflict: cannot link %s file %pB with %s file %pB"
msgstr "conflit d'ABI RL78: ne peut lier le fichier %2$pB pour %1$s avec le fichier %4$pB pour %3$s"
-#: elf32-rl78.c:1231
+#: elf32-rl78.c:1246
msgid "RL78 merge conflict: cannot link 32-bit and 64-bit objects together"
msgstr "conflit de fusion RL78: ne peut lier ensemble un objet 32 bits et un objet 64 bits"
-#: elf32-rl78.c:1235 elf32-rl78.c:1239
+#: elf32-rl78.c:1250 elf32-rl78.c:1254
#, c-format
msgid "- %pB is 64-bit, %pB is not"
msgstr "- %pB est 64 bits, %pB ne l'est pas"
-#: elf32-rl78.c:1266
+#: elf32-rl78.c:1281
#, c-format
msgid " [64-bit doubles]"
msgstr " [doubles de 64 bits]"
-#: elf32-rx.c:607
+#: elf32-rx.c:618
#, c-format
msgid "%pB:%pA: table entry %s outside table"
msgstr "%pB:%pA: l'entrée %s de la table est en dehors de la table"
-#: elf32-rx.c:614
+#: elf32-rx.c:625
#, c-format
msgid "%pB:%pA: table entry %s not word-aligned within table"
msgstr "%pB:%pA: l'entrée %s de la table n'est pas alignée sur un mot dans la table"
-#: elf32-rx.c:689
+#: elf32-rx.c:700
#, c-format
msgid "%pB:%pA: warning: deprecated Red Hat reloc %s detected against: %s"
msgstr "%pB:%pA: attention: réadressage %s Red Hat réprouvée détecté sur: %s"
@@ -3320,36 +3368,41 @@ msgstr "%pB:%pA: attention: réadressage %s Red Hat réprouvée détecté sur: %
#. 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:709
+#: elf32-rx.c:720
#, c-format
msgid "%pB(%pA): unsafe PID relocation %s at %#<PRIx64> (against %s in %s)"
msgstr "%pB(%pA): réadressage PID %s non sûr à %<PRIx64> (sur %s dans %s)"
-#: elf32-rx.c:1293
+#: elf32-rx.c:1304
msgid "warning: RX_SYM reloc with an unknown symbol"
msgstr "attention: réadressage RX_SYM avec un symbole inconnu"
-#: elf32-rx.c:3173
+#: elf32-rx.c:1472
+#, c-format
+msgid "%pB(%pA): error: call to undefined function '%s'"
+msgstr "%pB(%pA): erreur: appel à la fonction non définie « %s »"
+
+#: elf32-rx.c:3184
#, c-format
msgid "there is a conflict merging the ELF header flags from %pB"
msgstr "il y a un conflit en fusionnant les fanions d'en-têtes ELF de %pB"
-#: elf32-rx.c:3176
+#: elf32-rx.c:3187
#, c-format
msgid " the input file's flags: %s"
msgstr " les fanions du fichier d'entrée: %s"
-#: elf32-rx.c:3178
+#: elf32-rx.c:3189
#, c-format
msgid " the output file's flags: %s"
msgstr " les fanions du fichier de sortie: %s"
-#: elf32-rx.c:3785
+#: elf32-rx.c:3796
#, c-format
msgid "%pB:%pA: table %s missing corresponding %s"
msgstr "%pB:%pA: la table %s n'a pas de %s correspondant"
-#: elf32-rx.c:3793
+#: elf32-rx.c:3804
#, c-format
msgid "%pB:%pA: %s and %s must be in the same input section"
msgstr "%pB:%pA: %s et %s doivent être dans la même section d'entrée"
@@ -3359,35 +3412,35 @@ msgstr "%pB:%pA: %s et %s doivent être dans la même section d'entrée"
msgid "%pB(%pA+%#<PRIx64>): invalid instruction for TLS relocation %s"
msgstr "%pB(%pA+%#<PRIx64>): instruction invalide pour le réadressage TLS %s"
-#: elf32-score.c:1524 elf32-score7.c:1385 elfxx-mips.c:3798
+#: elf32-score.c:1515 elf32-score7.c:1378 elfxx-mips.c:3798
msgid "not enough GOT space for local GOT entries"
msgstr "pas suffisamment d'espace GOT pour les entrées locales GOT"
-#: elf32-score.c:2756
+#: elf32-score.c:2747
msgid "address not word aligned"
msgstr "adresse pas alignée sur un mot"
-#: elf32-score.c:2837 elf32-score7.c:2642
+#: elf32-score.c:2828 elf32-score7.c:2635
#, c-format
msgid "%pB: malformed reloc detected for section %pA"
msgstr "%pB: réadressage mal composé détecté dans la section %pA"
-#: elf32-score.c:2891 elf32-score7.c:2696
+#: elf32-score.c:2882 elf32-score7.c:2689
#, c-format
msgid "%pB: CALL15 reloc at %#<PRIx64> not against global symbol"
msgstr "%pB: appel CALL15 de réadressage à %#<PRIx64> n'est pas appliqué sur un symbole global"
-#: elf32-score.c:3999 elf32-score7.c:3804
+#: elf32-score.c:3990 elf32-score7.c:3797
#, c-format
msgid " [pic]"
msgstr " [pic]"
-#: elf32-score.c:4003 elf32-score7.c:3808
+#: elf32-score.c:3994 elf32-score7.c:3801
#, c-format
msgid " [fix dep]"
msgstr " [fix dep]"
-#: elf32-score.c:4050 elf32-score7.c:3855
+#: elf32-score.c:4041 elf32-score7.c:3848
#, c-format
msgid "%pB: warning: linking PIC files with non-PIC files"
msgstr "%pB: attention: édition de liens des fichiers PIC avec des fichiers non PIC"
@@ -3518,7 +3571,7 @@ msgstr "%pB: « %s » accédé à la fois comme symbole FDPIC et comme symbole
msgid "%pB: Function descriptor relocation with non-zero addend"
msgstr "%pB: Descripteur de fonction réadressé avec un opérande non nul"
-#: elf32-sh.c:5721 elf64-alpha.c:4662
+#: elf32-sh.c:5721 elf64-alpha.c:4663
#, c-format
msgid "%pB: TLS local exec code cannot be linked into shared objects"
msgstr "%pB: code exécutable local TLS ne peut être lié en objets partagés"
@@ -3605,7 +3658,7 @@ msgstr "%s dans une section de recouvrement"
msgid "overlay stub relocation overflow"
msgstr "débordement du réadressage de l'ébauche de recouvrement"
-#: elf32-spu.c:1991 elf64-ppc.c:14761
+#: elf32-spu.c:1991 elf64-ppc.c:15187
msgid "stubs don't match calculated size"
msgstr "taille des ébauches ne concorde pas avec la taille calculée"
@@ -3752,8 +3805,8 @@ msgstr "attention: %pB et %pB on des tailles de wchar_t différentes"
msgid "warning: %pB and %pB differ in whether code is compiled for DSBT"
msgstr "attention: %pB et %pB ne sont pas d'accord sur la compilation du code pour DSBT"
-#: elf32-tilepro.c:3627 elfxx-tilegx.c:4017 elfxx-x86.c:1397
-#: elfnn-aarch64.c:9711 elfnn-riscv.c:3253
+#: elf32-tilepro.c:3627 elfxx-tilegx.c:4017 elfxx-x86.c:2409
+#: elfnn-aarch64.c:9714 elfnn-loongarch.c:2971 elfnn-riscv.c:3269
#, c-format
msgid "discarded output section: `%pA'"
msgstr "section de sortie rejetée: « %pA »"
@@ -4027,56 +4080,56 @@ msgstr "erreur lors de la lecture du type de CPU dans les données elf privées"
msgid "non-zero addend in @fptr reloc"
msgstr "ajout non nul dans le réadressage @fptr"
-#: elf32-xtensa.c:1002
+#: elf32-xtensa.c:1010
#, c-format
msgid "%pB(%pA): invalid property table"
msgstr "%pB(%pA): table de propriété invalide"
-#: elf32-xtensa.c:2734
+#: elf32-xtensa.c:2744
#, c-format
msgid "%pB(%pA+%#<PRIx64>): relocation offset out of range (size=%#<PRIx64>)"
msgstr "%pB(%pA+%#<PRIx64>): décalage de réadressage hors limite (taille=%#<PRIx64>)"
-#: elf32-xtensa.c:2817 elf32-xtensa.c:2940
+#: elf32-xtensa.c:2827 elf32-xtensa.c:2950
msgid "dynamic relocation in read-only section"
msgstr "réadressage dynamique dans une section en lecture seule"
-#: elf32-xtensa.c:2917
+#: elf32-xtensa.c:2927
msgid "TLS relocation invalid without dynamic sections"
msgstr "réadressage TLS incorrecte sans section dynamique"
-#: elf32-xtensa.c:3130
+#: elf32-xtensa.c:3140
msgid "internal inconsistency in size of .got.loc section"
msgstr "incohérence interne dans la taille de la section .got.loc"
-#: elf32-xtensa.c:3436
+#: elf32-xtensa.c:3446
#, c-format
msgid "%pB: incompatible machine type; output is 0x%x; input is 0x%x"
msgstr "%pB: type de machine incompatible; sortie est 0x%x; entrée est 0x%x"
-#: elf32-xtensa.c:4735 elf32-xtensa.c:4743
+#: elf32-xtensa.c:4745 elf32-xtensa.c:4753
msgid "attempt to convert L32R/CALLX to CALL failed"
msgstr "échec de la tentative de convertir L32R/CALLX en CALL"
-#: elf32-xtensa.c:6571 elf32-xtensa.c:6650 elf32-xtensa.c:8076
+#: elf32-xtensa.c:6581 elf32-xtensa.c:6660 elf32-xtensa.c:8086
#, c-format
msgid "%pB(%pA+%#<PRIx64>): could not decode instruction; possible configuration mismatch"
msgstr "%pB(%pA+%#<PRIx64>): l'instruction ne peut pas être décodée; la configuration est peut-être erronée"
-#: elf32-xtensa.c:7817
+#: elf32-xtensa.c:7827
#, c-format
msgid "%pB(%pA+%#<PRIx64>): could not decode instruction for XTENSA_ASM_SIMPLIFY relocation; possible configuration mismatch"
msgstr "%pB(%pA+%#<PRIx64>): l'instruction ne peut pas être décodée pour un réadressage XTENSA_ASM_SIMPLIFY; la configuration est peut-être erronée"
-#: elf32-xtensa.c:9675
+#: elf32-xtensa.c:9685
msgid "invalid relocation address"
msgstr "adresse de réadressage incorrecte"
-#: elf32-xtensa.c:9766
+#: elf32-xtensa.c:9776
msgid "overflow after relaxation"
msgstr "débordement après la relâche"
-#: elf32-xtensa.c:10912
+#: elf32-xtensa.c:10922
#, c-format
msgid "%pB(%pA+%#<PRIx64>): unexpected fix for %s relocation"
msgstr "%pB(%pA+%#<PRIx64>): correction inattendue pour le réadressage %s"
@@ -4100,7 +4153,8 @@ msgstr "%pB: architecture %#x non supportée"
msgid "GPDISP relocation did not find ldah and lda instructions"
msgstr "le réadressage GPDISP n'a pas repéré les instructions ldah et lda"
-#: elf64-alpha.c:2002 elf64-alpha.c:2697 elflink.c:15091
+#: elf64-alpha.c:2002 elf64-alpha.c:2697 elflink.c:15304
+#: elfnn-loongarch.c:1161
#, c-format
msgid "%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"
msgstr "%pB: réadressage dynamique sur « %pT » dans la section en lecture seule « %pA »\n"
@@ -4115,41 +4169,41 @@ msgstr "%pB: le sous-segment .got excède 64K (taille %d)"
msgid "%pB: %pA+%#<PRIx64>: warning: %s relocation against unexpected insn"
msgstr "%pB: %pA+%#<PRIx64>: attention: réadressage de %s sur une insn inattendue"
-#: elf64-alpha.c:4386 elf64-alpha.c:4399
+#: elf64-alpha.c:4387 elf64-alpha.c:4400
#, c-format
msgid "%pB: gp-relative relocation against dynamic symbol %s"
msgstr "%pB: réadressage relatif au gp vers le symbole dynamique %s"
-#: elf64-alpha.c:4455
+#: elf64-alpha.c:4456
#, c-format
msgid "%pB: change in gp: BRSGP %s"
msgstr "%pB: changé dans le GP: BRSGP %s"
-#: elf64-alpha.c:4480 mach-o.c:616 elfnn-riscv.c:619
+#: elf64-alpha.c:4481 mach-o.c:616 elfnn-riscv.c:619
msgid "<unknown>"
msgstr "<inconnu>"
-#: elf64-alpha.c:4486
+#: elf64-alpha.c:4487
#, c-format
msgid "%pB: !samegp reloc against symbol without .prologue: %s"
msgstr "%pB: réadressage !samegp vers le symbole sans .prologue: %s"
-#: elf64-alpha.c:4544
+#: elf64-alpha.c:4545
#, c-format
msgid "%pB: unhandled dynamic relocation against %s"
msgstr "%pB: réadressage dynamique non traité vers %s"
-#: elf64-alpha.c:4579
+#: elf64-alpha.c:4580
#, c-format
msgid "%pB: pc-relative relocation against undefined weak symbol %s"
msgstr "%pB: réadressage relatif au PC vers le symbole faible non défini %s"
-#: elf64-alpha.c:4645
+#: elf64-alpha.c:4646
#, c-format
msgid "%pB: dtp-relative relocation against dynamic symbol %s"
msgstr "%pB: réadressage relatif au dtp vers le symbole dynamique %s"
-#: elf64-alpha.c:4670
+#: elf64-alpha.c:4671
#, c-format
msgid "%pB: tp-relative relocation against dynamic symbol %s"
msgstr "%pB: réadressage relatif au tp vers le symbole dynamique %s"
@@ -4183,96 +4237,96 @@ msgstr "%pB: Ne peut relâcher br à %#<PRIx64> dans la section « %pA ». Veu
msgid "@pltoff reloc against local symbol"
msgstr "réadressage @pltoff vers un symbole local"
-#: elf64-ia64-vms.c:3283 elfnn-ia64.c:3670
+#: elf64-ia64-vms.c:3277 elfnn-ia64.c:3670
#, c-format
msgid "%pB: short data segment overflowed (%#<PRIx64> >= 0x400000)"
msgstr "%pB: débordement du segment de données court (%#<PRIx64> >= 0x400000)"
-#: elf64-ia64-vms.c:3293 elfnn-ia64.c:3680
+#: elf64-ia64-vms.c:3287 elfnn-ia64.c:3680
#, c-format
msgid "%pB: __gp does not cover short data segment"
msgstr "%pB: __gp ne couvre pas le segment de données court"
-#: elf64-ia64-vms.c:3563 elfnn-ia64.c:3953
+#: elf64-ia64-vms.c:3557 elfnn-ia64.c:3953
#, c-format
msgid "%pB: non-pic code with imm relocation against dynamic symbol `%s'"
msgstr "%pB: code non pic avec des réadressages imm vers le symbole dynamique « %s »"
-#: elf64-ia64-vms.c:3627 elfnn-ia64.c:4021
+#: elf64-ia64-vms.c:3621 elfnn-ia64.c:4021
#, c-format
msgid "%pB: @gprel relocation against dynamic symbol %s"
msgstr "%pB: réadressage @gprel vers le symbole dynamique %s"
-#: elf64-ia64-vms.c:3686 elfnn-ia64.c:4084
+#: elf64-ia64-vms.c:3680 elfnn-ia64.c:4084
#, c-format
msgid "%pB: linking non-pic code in a position independent executable"
msgstr "%pB: liaison de code non-pic dans un exécutable à position indépendante"
-#: elf64-ia64-vms.c:3788 elfnn-ia64.c:4222
+#: elf64-ia64-vms.c:3782 elfnn-ia64.c:4222
#, c-format
msgid "%pB: @internal branch to dynamic symbol %s"
msgstr "%pB: branchement @internal vers le symbole dynamique %s"
-#: elf64-ia64-vms.c:3791 elfnn-ia64.c:4225
+#: elf64-ia64-vms.c:3785 elfnn-ia64.c:4225
#, c-format
msgid "%pB: speculation fixup to dynamic symbol %s"
msgstr "%pB: spéculation d'ajustements vers le symbole dynamique %s"
-#: elf64-ia64-vms.c:3794 elfnn-ia64.c:4228
+#: elf64-ia64-vms.c:3788 elfnn-ia64.c:4228
#, c-format
msgid "%pB: @pcrel relocation against dynamic symbol %s"
msgstr "%pB: réadressage @pcrel vers le symbole dynamique %s"
-#: elf64-ia64-vms.c:3918 elfnn-ia64.c:4425
+#: elf64-ia64-vms.c:3912 elfnn-ia64.c:4425
msgid "unsupported reloc"
msgstr "réadressage non supportée"
-#: elf64-ia64-vms.c:3955 elfnn-ia64.c:4463
+#: elf64-ia64-vms.c:3949 elfnn-ia64.c:4463
#, c-format
msgid "%pB: missing TLS section for relocation %s against `%s' at %#<PRIx64> in section `%pA'."
msgstr "%pB: section TLS manquante pour le réadressage %s vers « %s » à %#<PRIx64> dans la section « %pA »."
-#: elf64-ia64-vms.c:3972 elfnn-ia64.c:4480
+#: elf64-ia64-vms.c:3966 elfnn-ia64.c:4480
#, c-format
msgid "%pB: Can't relax br (%s) to `%s' at %#<PRIx64> in section `%pA' with size %#<PRIx64> (> 0x1000000)."
msgstr "%pB: Ne peut pas relâcher br (%s) sur « %s » à %#<PRIx64> dans la section « %pA » avec la taille %#<PRIx64> (> 0x1000000)."
-#: elf64-ia64-vms.c:4268 elfnn-ia64.c:4741
+#: elf64-ia64-vms.c:4262 elfnn-ia64.c:4741
#, c-format
msgid "%pB: linking trap-on-NULL-dereference with non-trapping files"
msgstr "%pB: édition de liens trap-on-NULL-dereference avec des fichiers non-trapping"
-#: elf64-ia64-vms.c:4277 elfnn-ia64.c:4750
+#: elf64-ia64-vms.c:4271 elfnn-ia64.c:4750
#, c-format
msgid "%pB: linking big-endian files with little-endian files"
msgstr "%pB: édition de liens entre des fichiers à octets de poids fort et des fichiers à octets de poids faible"
-#: elf64-ia64-vms.c:4286 elfnn-ia64.c:4759
+#: elf64-ia64-vms.c:4280 elfnn-ia64.c:4759
#, c-format
msgid "%pB: linking 64-bit files with 32-bit files"
msgstr "%pB: édition de liens entre fichiers 64 bits et fichiers 32 bits"
-#: elf64-ia64-vms.c:4295 elfnn-ia64.c:4768
+#: elf64-ia64-vms.c:4289 elfnn-ia64.c:4768
#, c-format
msgid "%pB: linking constant-gp files with non-constant-gp files"
msgstr "%pB: édition de liens entre fichiers constant-gp et fichiers non-constant-gp"
-#: elf64-ia64-vms.c:4305 elfnn-ia64.c:4778
+#: elf64-ia64-vms.c:4299 elfnn-ia64.c:4778
#, c-format
msgid "%pB: linking auto-pic files with non-auto-pic files"
msgstr "%pB: édition de liens entre fichiers auto-pic et fichiers non-auto-pic"
-#: elf64-ia64-vms.c:5152 elflink.c:5148
+#: elf64-ia64-vms.c:5146 elflink.c:5294
#, c-format
msgid "warning: alignment %u of common symbol `%s' in %pB is greater than the alignment (%u) of its section %pA"
msgstr "attention: alignement %u du symbole commun « %s » dans %pB est plus grand que l'alignement (%u) de sa section %pA"
-#: elf64-ia64-vms.c:5159 elflink.c:5155
+#: elf64-ia64-vms.c:5153 elflink.c:5301
#, c-format
msgid "warning: alignment %u of symbol `%s' in %pB is smaller than %u in %pB"
msgstr "attention: alignement %u du symbole « %s » dans %pB est plus petit que %u dans %pB"
-#: elf64-ia64-vms.c:5175 elflink.c:5172
+#: elf64-ia64-vms.c:5169 elflink.c:5318
#, c-format
msgid "warning: size of symbol `%s' changed from %<PRIu64> in %pB to %<PRIu64> in %pB"
msgstr "attention: taille du symbole « %s » a changé de %<PRIu64> dans %pB à %<PRIu64> dans %pB"
@@ -4343,66 +4397,66 @@ msgstr "registre de section contient\n"
msgid "internal inconsistency: remaining %lu != max %lu; please report this bug"
msgstr "inconsistance interne: reste %lu != max %lu; merci de rapporter cette anomalie"
-#: elf64-ppc.c:1349
+#: elf64-ppc.c:1357
#, c-format
msgid "warning: %s should be used rather than %s"
msgstr "attention: %s devrait être utilisé au lieu de %s"
-#: elf64-ppc.c:4153
+#: elf64-ppc.c:4281
#, c-format
msgid "symbol '%s' has invalid st_other for ABI version 1"
msgstr "le symbole « %s » a un st_other invalide pour l'ABI à la version 1"
-#: elf64-ppc.c:4334
+#: elf64-ppc.c:4462
#, c-format
msgid "%pB .opd not allowed in ABI version %d"
msgstr "%pB .opd pas permis dans l'ABI à la version %d"
-#: elf64-ppc.c:4906
+#: elf64-ppc.c:5055
#, c-format
msgid "%H: %s reloc unsupported in shared libraries and PIEs\n"
msgstr "%H: le réadressage %s n'est pas supporté dans les bibliothèques partagées et les PIE\n"
-#: elf64-ppc.c:5316
+#: elf64-ppc.c:5476
#, c-format
msgid "%pB uses unknown e_flags 0x%lx"
msgstr "%pB utilise le e_flags 0x%lx inconnu"
-#: elf64-ppc.c:5324
+#: elf64-ppc.c:5484
#, c-format
msgid "%pB: ABI version %ld is not compatible with ABI version %ld output"
msgstr "%pB: la version ABI %ld n'est pas compatible avec la sortie de l'ABI version %ld"
-#: elf64-ppc.c:5351
+#: elf64-ppc.c:5511
#, c-format
msgid " [abiv%ld]"
msgstr " [abiv%ld]"
-#: elf64-ppc.c:6649
+#: elf64-ppc.c:6808
msgid "%P: copy reloc against `%pT' requires lazy plt linking; avoid setting LD_BIND_NOW=1 or upgrade gcc\n"
msgstr "%P: le réadressage par copie sur « %pT » nécessite un lien plt paresseux; évitez de mettre LD_BIND_NOW=1 ou mettez à jour gcc\n"
-#: elf64-ppc.c:6916
+#: elf64-ppc.c:7075
#, c-format
msgid "%pB: undefined symbol on R_PPC64_TOCSAVE relocation"
msgstr "%pB: symbole indéfini sur le réadressage R_PPC64_TOCSAVE"
-#: elf64-ppc.c:7164
+#: elf64-ppc.c:7331
#, c-format
msgid "dynreloc miscount for %pB, section %pA"
msgstr "erreur de décompte de réadressage dynamique pour %pB, section %pA"
-#: elf64-ppc.c:7253
+#: elf64-ppc.c:7420
#, c-format
msgid "%pB: .opd is not a regular array of opd entries"
msgstr "%pB: .opd n'est pas un tableau régulier d'entrées opd"
-#: elf64-ppc.c:7263
+#: elf64-ppc.c:7430
#, c-format
msgid "%pB: unexpected reloc type %u in .opd section"
msgstr "%pB: type de réadressage %u inattendu dans la section .opd"
-#: elf64-ppc.c:7285
+#: elf64-ppc.c:7452
#, c-format
msgid "%pB: undefined sym `%s' in .opd section"
msgstr "%pB: symbole « %s » indéfini dans la section .opd"
@@ -4414,164 +4468,146 @@ msgstr "%pB: symbole « %s » indéfini dans la section .opd"
#. __glink_PLTresolve save of r2 is incompatible with code
#. making tail calls, because the tail call might go via the
#. resolver and thus overwrite the proper saved r2.
-#: elf64-ppc.c:7779
+#: elf64-ppc.c:7953
msgid "warning: --plt-localentry is incompatible with power10 pc-relative code"
msgstr "attention: --plt-localentry est incompatible avec le code relatif au pc du power10"
-#: elf64-ppc.c:7787
+#: elf64-ppc.c:7961
msgid "warning: --plt-localentry is especially dangerous without ld.so support to detect ABI violations"
msgstr "attention: --plt-localentry est particulièrement dangereux sans le support de ld.so pour détecter des violations de l'ABI"
-#: elf64-ppc.c:8111
+#: elf64-ppc.c:8277
msgid "%H __tls_get_addr lost arg, TLS optimization disabled\n"
msgstr "%H __tls_get_addr a perdu l'argument, optimisation TLS désactivée\n"
-#: elf64-ppc.c:8546 elf64-ppc.c:9259
+#: elf64-ppc.c:8712 elf64-ppc.c:9425
#, c-format
msgid "%s defined on removed toc entry"
msgstr "%s défini dans une entrée toc supprimée"
-#: elf64-ppc.c:9216
+#: elf64-ppc.c:9382
#, c-format
msgid "%H: %s references optimized away TOC entry\n"
msgstr "%H: %s fait référence à une entrée TOC supprimée par l'optimisation\n"
-#: elf64-ppc.c:9437
+#: elf64-ppc.c:9603
#, c-format
msgid "%H: got/toc optimization is not supported for %s instruction\n"
msgstr "%H: l'optimisation got/toc n'est pas supportée pour l'instruction %s\n"
-#: elf64-ppc.c:10282
+#: elf64-ppc.c:10474
#, c-format
msgid "warning: discarding dynamic section %s"
msgstr "attention: abandon de la section dynamique %s"
-#: elf64-ppc.c:11433
+#: elf64-ppc.c:11616
msgid "%P: cannot find opd entry toc for `%pT'\n"
msgstr "%P: l'entrée toc de opd non trouvée pour « %pT »\n"
-#: elf64-ppc.c:11481 elf64-ppc.c:12030
+#: elf64-ppc.c:11664 elf64-ppc.c:12189
msgid "%F%P: Could not assign group %pA target %pA to an output section. Retry without --enable-non-contiguous-regions.\n"
msgstr "%F%P: Impossible d'assigner le groupe %pA de la cible %pA à une section de sortie. Réessayez sans --enable-non-contiguous-regions.\n"
-#: elf64-ppc.c:11542
+#: elf64-ppc.c:11724
#, c-format
msgid "long branch stub `%s' offset overflow"
msgstr "débordement de l'offset du branchement long de l'ébauche « %s »"
-#: elf64-ppc.c:11569
+#: elf64-ppc.c:11751
#, c-format
msgid "can't find branch stub `%s'"
msgstr "ne peut repérer l'ébauche de branchement « %s »"
-#: elf64-ppc.c:11633 elf64-ppc.c:11898 elf64-ppc.c:14202
+#: elf64-ppc.c:11815 elf64-ppc.c:12067 elf64-ppc.c:14574
#, c-format
msgid "%P: linkage table error against `%pT'\n"
msgstr "%P: erreur de la table de liaison vers « %pT »\n"
-#: elf64-ppc.c:12102
+#: elf64-ppc.c:12263
#, c-format
msgid "can't build branch stub `%s'"
msgstr "ne peut construire l'ébauche de branchement « %s »"
-#: elf64-ppc.c:13114
+#: elf64-ppc.c:13270
#, c-format
msgid "%pB section %pA exceeds stub group size"
msgstr "%pB section %pA dépasse la taille du groupe d'ébauche"
-#: elf64-ppc.c:14381
+#: elf64-ppc.c:14756
msgid "__tls_get_addr call offset overflow"
msgstr "débordement du décalage dans l'appel __tls_get_addr"
-#: elf64-ppc.c:14720 elf64-ppc.c:14739
+#: elf64-ppc.c:15095 elf64-ppc.c:15114
#, c-format
msgid "%s offset too large for .eh_frame sdata4 encoding"
msgstr "décalage %s trop grand pour l'encodage .eh_frame sdata4"
-#: elf64-ppc.c:14771
+#: elf64-ppc.c:15195
#, c-format
msgid "linker stubs in %u group\n"
msgid_plural "linker stubs in %u groups\n"
msgstr[0] "ébauches de l'éditeur de liens dans %u groupe\n"
msgstr[1] "ébauches de l'éditeur de liens dans %u groupes\n"
-#: elf64-ppc.c:14778
+#: elf64-ppc.c:15202
#, c-format
msgid ""
"%s branch %lu\n"
-" branch toc adj %lu\n"
-" branch notoc %lu\n"
-" branch both %lu\n"
" long branch %lu\n"
-" long toc adj %lu\n"
-" long notoc %lu\n"
-" long both %lu\n"
" plt call %lu\n"
-" plt call save %lu\n"
-" plt call notoc %lu\n"
-" plt call both %lu\n"
" global entry %lu"
msgstr ""
-"%s branchements %lu\n"
-" aj. branchements toc %lu\n"
-" branchements notoc %lu\n"
-" branchements les deux %lu\n"
-" long branchements %lu\n"
-" aj. long toc %lu\n"
-" long notoc %lu\n"
-" long les deux %lu\n"
-" appels plt %lu\n"
-" appels plt save %lu\n"
-" appels plt notoc %lu\n"
-" appels plt les deux %lu\n"
-" entrées globales %lu"
-
-#: elf64-ppc.c:15178
+"%s branchement %lu\n"
+" branch. long %lu\n"
+" appel plt %lu\n"
+" entrée globale %lu"
+
+#: elf64-ppc.c:15584
#, c-format
msgid "%H: %s used with TLS symbol `%pT'\n"
msgstr "%H: %s utilisé avec le symbole TLS « %pT »\n"
-#: elf64-ppc.c:15180
+#: elf64-ppc.c:15586
#, c-format
msgid "%H: %s used with non-TLS symbol `%pT'\n"
msgstr "%H: %s utilisé avec le symbole non-TLS « %pT »\n"
-#: elf64-ppc.c:15936
+#: elf64-ppc.c:16370
#, c-format
msgid "%H: call to `%pT' lacks nop, can't restore toc; (plt call stub)\n"
msgstr "%H: il manque un nop à l'appel à « %pT », toc ne peut être rétablie, (ébauche de l'appel plt)\n"
-#: elf64-ppc.c:15942
+#: elf64-ppc.c:16376
#, c-format
msgid "%H: call to `%pT' lacks nop, can't restore toc; (toc save/adjust stub)\n"
msgstr "%H: il manque un nop à l'appel à « %pT », toc ne peut être rétablie, (ébauche de la sauvegarde/ajustement de la toc)\n"
-#: elf64-ppc.c:16845
+#: elf64-ppc.c:17290
#, c-format
msgid "%H: %s for indirect function `%pT' unsupported\n"
msgstr "%H: %s non supporté pour la fonction indirecte « %pT »\n"
-#: elf64-ppc.c:16930
+#: elf64-ppc.c:17382
#, c-format
msgid "%X%P: %pB: %s against %pT is not supported by glibc as a dynamic relocation\n"
msgstr "%X%P: %pB: %s vis-à-vis de %pT n'est pas supporté par glibc comme réadressage dynamique\n"
-#: elf64-ppc.c:16985
+#: elf64-ppc.c:17437
#, c-format
msgid "%P: %pB: %s is not supported for `%pT'\n"
msgstr "%P: %pB: %s n'est pas supporté pour le symbole « %pT »\n"
-#: elf64-ppc.c:17233
+#: elf64-ppc.c:17698
#, c-format
msgid "%H: error: %s not a multiple of %u\n"
msgstr "%H: erreur: %s n'est pas un multiple de %u\n"
-#: elf64-ppc.c:17256
+#: elf64-ppc.c:17721
#, c-format
msgid "%H: unresolvable %s against `%pT'\n"
msgstr "%H: %s ne peut être résolu par rapport à « %pT »\n"
-#: elf64-ppc.c:17400
+#: elf64-ppc.c:17866
#, c-format
msgid "%H: %s against `%pT': error %d\n"
msgstr "%H: %s vers « %pT »: erreur %d\n"
@@ -4606,43 +4642,43 @@ msgstr "Symbole « %s » a des types qui diffèrent: %s dans %pB, précédemme
msgid "%pB: linking UltraSPARC specific with HAL specific code"
msgstr "%pB: édition de liens spécifiques pour UltraSPARC avec du code spécifique HAL"
-#: elf64-x86-64.c:1415
+#: elf64-x86-64.c:1400
msgid "hidden symbol "
msgstr "symbole caché "
-#: elf64-x86-64.c:1418
+#: elf64-x86-64.c:1403
msgid "internal symbol "
msgstr "symbole interne "
-#: elf64-x86-64.c:1421 elf64-x86-64.c:1425
+#: elf64-x86-64.c:1406 elf64-x86-64.c:1410
msgid "protected symbol "
msgstr "symbole protégé "
-#: elf64-x86-64.c:1427
+#: elf64-x86-64.c:1412
msgid "symbol "
msgstr "symbole "
-#: elf64-x86-64.c:1433
+#: elf64-x86-64.c:1418
msgid "undefined "
msgstr "non défini "
-#: elf64-x86-64.c:1443
+#: elf64-x86-64.c:1428
msgid "a shared object"
msgstr "un objet partagé"
-#: elf64-x86-64.c:1445
+#: elf64-x86-64.c:1430
msgid "; recompile with -fPIC"
msgstr "; recompilez avec -fPIC"
-#: elf64-x86-64.c:1450
+#: elf64-x86-64.c:1435
msgid "a PIE object"
msgstr "un objet PIE"
-#: elf64-x86-64.c:1452
+#: elf64-x86-64.c:1437
msgid "a PDE object"
msgstr "un objet PDE"
-#: elf64-x86-64.c:1454
+#: elf64-x86-64.c:1439
msgid "; recompile with -fPIE"
msgstr "; recompilez avec -fPIE"
@@ -4652,63 +4688,63 @@ msgstr "; recompilez avec -fPIE"
# dans le bug https://sourceware.org/bugzilla/show_bug.cgi?id=22717.
# L'avant dernier %s est l'un des trois messages ci-dessus telle que "un objet partagé".
# Le dernier %s collé au dernier %s peut être rien ou un des fragments traduits ci-dessus et commençant par un point-virgule.
-#: elf64-x86-64.c:1458
+#: elf64-x86-64.c:1443
#, c-format
msgid "%pB: relocation %s against %s%s`%s' can not be used when making %s%s"
msgstr "%pB: réadressage %s vers %s%s« %s » ne peut pas être utilisé en créant %s%s"
-#: elf64-x86-64.c:1966
+#: elf64-x86-64.c:1948
#, c-format
msgid "%pB: relocation %s against symbol `%s' isn't supported in x32 mode"
msgstr "%pB: le réadressage %s sur le symbole « %s » n'est pas supporté en mode x32"
-#: elf64-x86-64.c:2122
+#: elf64-x86-64.c:2092
#, c-format
msgid "%pB: '%s' accessed both as normal and thread local symbol"
msgstr "%pB: symbole « %s » accédé à la fois comme normal et comme local au thread"
-#: elf64-x86-64.c:2747 elfnn-aarch64.c:5542 elfnn-riscv.c:2124
+#: elf64-x86-64.c:2727 elfnn-aarch64.c:5545 elfnn-riscv.c:2140
#, c-format
msgid "%pB: relocation %s against STT_GNU_IFUNC symbol `%s' has non-zero addend: %<PRId64>"
msgstr "%pB: le réadressage %s vers le symbole STT_GNU_IFUNC « %s » a l'opérande non nul: %<PRId64>"
-#: elf64-x86-64.c:3003
+#: elf64-x86-64.c:2989
#, c-format
msgid "%pB: relocation R_X86_64_GOTOFF64 against undefined %s `%s' can not be used when making a shared object"
msgstr "%pB: réadressage R_X86_64_GOTOFF64 sur le symbole %s « %s » non défini ne peut pas être utilisé lors de la création d'un objet partagé"
# Le %s protégée est soit « function » ou « data » sans traduction.
# Cette construction scabreuse a déjà été enlevée dans les sources.
-#: elf64-x86-64.c:3017
+#: elf64-x86-64.c:3003
#, c-format
msgid "%pB: relocation R_X86_64_GOTOFF64 against protected %s `%s' can not be used when making a shared object"
msgstr "%pB: réadressage R_X86_64_GOTOFF64 vers la %s protégée « %s » ne peut pas être utilisé lors de la création d'un objet partagé"
-#: elf64-x86-64.c:3297
+#: elf64-x86-64.c:3296
#, c-format
msgid "%pB: addend %s%#x in relocation %s against symbol `%s' at %#<PRIx64> in section `%pA' is out of range"
msgstr "%pB: l'opérande %s%#x dans le réadressage %s vers le symbole « %s » à %#<PRIx64> dans la section « %pA » est hors limite"
-#: elf64-x86-64.c:3437 elflink.c:13453
+#: elf64-x86-64.c:3439 elflink.c:13654
msgid "%F%P: corrupt input: %pB\n"
msgstr "%F%P: entrée corrompue: %pB\n"
-#: elf64-x86-64.c:4123
+#: elf64-x86-64.c:4125
#, c-format
msgid " failed to convert GOTPCREL relocation against '%s'; relink with --no-relax\n"
msgstr " impossible de convertir le réadressage GOTPCREL par rapport à « %s »: éditez les liens à nouveau avec --no-relax\n"
-#: elf64-x86-64.c:4284
+#: elf64-x86-64.c:4286
#, c-format
msgid "%F%pB: PC-relative offset overflow in PLT entry for `%s'\n"
msgstr "%F%pB: débordement du décalage relatif au PC dans l'entrée PLT pour « %s »\n"
-#: elf64-x86-64.c:4352
+#: elf64-x86-64.c:4354
#, c-format
msgid "%F%pB: branch displacement overflow in PLT entry for `%s'\n"
msgstr "%F%pB: débordement du déplacement de branchement dans l'entrée PLT pour « %s »\n"
-#: elf64-x86-64.c:4405
+#: elf64-x86-64.c:4407
#, c-format
msgid "%F%pB: PC-relative offset overflow in GOT PLT entry for `%s'\n"
msgstr "%F%pB: débordement du décalage relatif au PC dans l'entrée PLT GOT pour « %s »\n"
@@ -4718,306 +4754,310 @@ msgstr "%F%pB: débordement du décalage relatif au PC dans l'entrée PLT GOT po
msgid "warning: %pB has a section extending past end of file"
msgstr "attention: %pB a une section qui s'étend au delà de la fin du fichier"
-#: elfcode.h:775
+#: elfcode.h:776
#, c-format
msgid "warning: %pB has a corrupt string table index - ignoring"
msgstr "attention: %pB a un index de table de chaînes corrompu - ignoré"
-#: elfcode.h:819
+#: elfcode.h:820
#, c-format
msgid "warning: %pB has a program header with invalid alignment"
msgstr "attention: %pB a un en-tête de programme avec un alignement invalide"
-#: elfcode.h:1244
+#: elfcode.h:1245
#, c-format
msgid "%pB: version count (%<PRId64>) does not match symbol count (%ld)"
msgstr "%pB: compteur de version (%<PRId64>) ne concorde pas avec le symbole du compteur (%ld)"
-#: elfcore.h:308
+#: elfcore.h:300
#, c-format
-msgid "warning: %pB is truncated: expected core file size >= %<PRIu64>, found: %<PRIu64>"
-msgstr "attention: %pB est tronqué: taille attendue du cœur du fichier >= %<PRIu64>, obtenu: %<PRIu64>"
+msgid "warning: %pB has a segment extending past end of file"
+msgstr "attention: %pB a un segment qui s'étend au delà de la fin du fichier"
-#: elflink.c:1384
+#: elflink.c:1406
#, c-format
msgid "%s: TLS definition in %pB section %pA mismatches non-TLS definition in %pB section %pA"
msgstr "%s: définition TLS dans %pB section %pA ne correspond pas à la définition non TLS dans %pB section %pA"
-#: elflink.c:1390
+#: elflink.c:1412
#, c-format
msgid "%s: TLS reference in %pB mismatches non-TLS reference in %pB"
msgstr "%s: référence TLS dans %pB ne correspond pas à la référence non TLS dans %pB"
-#: elflink.c:1396
+#: elflink.c:1418
#, c-format
msgid "%s: TLS definition in %pB section %pA mismatches non-TLS reference in %pB"
msgstr "%s: définition TLS dans %pB section %pA ne correspond pas à la référence TLS dans %pB"
-#: elflink.c:1402
+#: elflink.c:1424
#, c-format
msgid "%s: TLS reference in %pB mismatches non-TLS definition in %pB section %pA"
msgstr "%s: référence TLS dans %pB ne correspond pas à la définition non TLS dans %pB section %pA"
-#: elflink.c:2114
+#: elflink.c:2136
#, c-format
msgid "%pB: unexpected redefinition of indirect versioned symbol `%s'"
msgstr "%pB: attention: redéfinition inattendue du symbole indirect avec version « %s »"
-#: elflink.c:2496
+#: elflink.c:2597
#, c-format
msgid "%pB: version node not found for symbol %s"
msgstr "%pB: version du nœud pas trouvée pour le symbole %s"
-#: elflink.c:2587
+#: elflink.c:2688
#, c-format
msgid "%pB: bad reloc symbol index (%#<PRIx64> >= %#lx) for offset %#<PRIx64> in section `%pA'"
msgstr "%pB: mauvais index du symbole de réadressage (%#<PRIx64> >= %#lx) pour l'offset %#<PRIx64> de la section « %pA »"
-#: elflink.c:2599
+#: elflink.c:2700
#, c-format
msgid "%pB: non-zero symbol index (%#<PRIx64>) for offset %#<PRIx64> in section `%pA' when the object file has no symbol table"
msgstr "%pB: index de symbole non nul (%#<PRIx64>) pour l'offset %#<PRIx64> de la section « %pA » quand le fichier objet n'a pas de table de symboles"
-#: elflink.c:2788
+#: elflink.c:2911
#, c-format
msgid "%pB: relocation size mismatch in %pB section %pA"
msgstr "%pB: taille du réadressage ne concorde pas dans %pB section %pA"
-#: elflink.c:3117
+#: elflink.c:3240
#, c-format
msgid "warning: type and size of dynamic symbol `%s' are not defined"
msgstr "attention: type et taille du symbole dynamique « %s » ne sont pas définis"
-#: elflink.c:3177
+#: elflink.c:3300
msgid "%P: copy reloc against protected `%pT' is dangerous\n"
msgstr "%P: un réadressage copié envers un « %pT » protégé est dangereux\n"
-#: elflink.c:4117
+#: elflink.c:4262
#, c-format
msgid "alternate ELF machine code found (%d) in %pB, expecting %d"
msgstr "code machine ELF alternatif trouvé (%d) dans %pB, %d est attendu"
-#: elflink.c:4600
+#: elflink.c:4745
#, c-format
msgid "%pB: invalid version offset %lx (max %lx)"
msgstr "%pB: décalage de version %lx invalide (max %lx)"
-#: elflink.c:4668
+#: elflink.c:4813
#, c-format
msgid "%pB: %s local symbol at index %lu (>= sh_info of %lu)"
msgstr "%pB: symbole locale %s à l'index %lu (>= sh_info de %lu)"
-#: elflink.c:4816
+#: elflink.c:4961
#, c-format
msgid "%pB: not enough version information"
msgstr "%pB: pas assez d'informations de version"
-#: elflink.c:4854
+#: elflink.c:4999
#, c-format
msgid "%pB: %s: invalid version %u (max %d)"
msgstr "%pB: %s: version invalide %u (max %d)"
-#: elflink.c:4891
+#: elflink.c:5036
#, c-format
msgid "%pB: %s: invalid needed version %d"
msgstr "%pB: %s: version requise invalide %d"
-#: elflink.c:5309
+#: elflink.c:5455
#, c-format
msgid "%pB: undefined reference to symbol '%s'"
msgstr "%pB: référence au symbole non défini « %s »"
-#: elflink.c:6375
+#: elflink.c:6523
#, c-format
msgid "%pB: stack size specified and %s set"
msgstr "%pB: taille de pile spécifiée et %s défini"
-#: elflink.c:6379
+#: elflink.c:6527
#, c-format
msgid "%pB: %s not absolute"
msgstr "%pB: %s pas supporté"
-#: elflink.c:6576
+#: elflink.c:6739
#, c-format
msgid "%s: undefined version: %s"
msgstr "%s: version non définie: %s"
-#: elflink.c:7148
+#: elflink.c:7303
#, c-format
msgid "%pB: .preinit_array section is not allowed in DSO"
msgstr "%pB: section .preinit_array n'est pas permise dans DSO"
-#: elflink.c:8740
+#: elflink.c:8895
#, c-format
msgid "undefined %s reference in complex symbol: %s"
msgstr "référence %s non définie dans le symbole complexe: %s"
-#: elflink.c:8903 elflink.c:8911
+#: elflink.c:9058 elflink.c:9066
msgid "division by zero"
msgstr "division par zéro"
-#: elflink.c:8925
+#: elflink.c:9080
#, c-format
msgid "unknown operator '%c' in complex symbol"
msgstr "opérateur « %c » inconnu dans le symbole complexe"
#. PR 21524: Let the user know if a symbol was removed by garbage collection.
-#: elflink.c:9263
+#: elflink.c:9418
#, c-format
msgid "%pB:%pA: error: relocation references symbol %s which was removed by garbage collection"
msgstr "%pB:%pA: erreur: symbole de référence des réadressages %s qui a été supprimé par le ramasse miettes"
-#: elflink.c:9266
+#: elflink.c:9421
#, c-format
msgid "%pB:%pA: error: try relinking with --gc-keep-exported enabled"
msgstr "%pB:%pA: erreur: essayez de rééditer les liens avec --gc-keep-exported enabled."
-#: elflink.c:9511 elflink.c:9529 elflink.c:9568 elflink.c:9586
+#: elflink.c:9666 elflink.c:9684 elflink.c:9723 elflink.c:9741
#, c-format
msgid "%pB: unable to sort relocs - they are in more than one size"
msgstr "%pB: impossible de trier les réadressages - plusieurs tailles rencontrées"
#. The section size is not divisible by either -
#. something is wrong.
-#: elflink.c:9545 elflink.c:9602
+#: elflink.c:9700 elflink.c:9757
#, c-format
msgid "%pB: unable to sort relocs - they are of an unknown size"
msgstr "%pB: impossible de trier les réadressages - leur taille est inconnue"
-#: elflink.c:9654
+#: elflink.c:9809
msgid "not enough memory to sort relocations"
msgstr "pas assez de mémoire pour trier les réadressages"
-#: elflink.c:9998
+#: elflink.c:10149
#, c-format
msgid "%pB: too many sections: %d (>= %d)"
msgstr "%pB: trop de sections: %d (>= %d)"
-#: elflink.c:10274
+#: elflink.c:10425
#, c-format
msgid "%pB: internal symbol `%s' in %pB is referenced by DSO"
msgstr "%pB: symbole interne « %s » dans %pB est référencé par DSO"
-#: elflink.c:10277
+#: elflink.c:10428
#, c-format
msgid "%pB: hidden symbol `%s' in %pB is referenced by DSO"
msgstr "%pB: symbole caché « %s » dans %pB est référencé par DSO"
-#: elflink.c:10280
+#: elflink.c:10431
#, c-format
msgid "%pB: local symbol `%s' in %pB is referenced by DSO"
msgstr "%pB: symbole local « %s » dans %pB est référencé par DSO"
-#: elflink.c:10366
+#: elflink.c:10517
#, c-format
msgid "%pB: could not find output section %pA for input section %pA"
msgstr "%pB: ne peut repérer la section de sortie %pA pour la section d'entrée %pA"
-#: elflink.c:10520
+#: elflink.c:10671
#, c-format
msgid "%pB: protected symbol `%s' isn't defined"
msgstr "%pB: symbole protégé « %s » n'est pas défini"
-#: elflink.c:10523
+#: elflink.c:10674
#, c-format
msgid "%pB: internal symbol `%s' isn't defined"
msgstr "%pB: symbole interne « %s » n'est pas défini"
-#: elflink.c:10526
+#: elflink.c:10677
#, c-format
msgid "%pB: hidden symbol `%s' isn't defined"
msgstr "%pB: symbole caché « %s » n'est pas défini"
-#: elflink.c:10558
+#: elflink.c:10709
#, c-format
msgid "%pB: no symbol version section for versioned symbol `%s'"
msgstr "%pB: pas de section de version de symbole pour le symbole avec version « %s »"
-#: elflink.c:10957
+#: elflink.c:11108
#, c-format
msgid "warning: --enable-non-contiguous-regions discards section `%s' from '%s'\n"
msgstr "attention: --enable-non-contiguous-regions abandonne la section « %s » de « %s »\n"
-#: elflink.c:11211
-#, c-format
-msgid "error: %pB: size of section %pA is not multiple of address size"
-msgstr "erreur: %pB: le réadressage de la section %pA n'est pas un multiple de la taille des adresses"
-
-#: elflink.c:11256
+#: elflink.c:11384
#, c-format
msgid "error: %pB contains a reloc (%#<PRIx64>) for section %pA that references a non-existent global symbol"
msgstr "erreur: %pB contient un réadressage (%#<PRIx64>) pour la section %pA qui fait référence à un symbole global inexistant"
-#: elflink.c:11977
+#: elflink.c:11844
+#, c-format
+msgid "error: %pB: size of section %pA is not multiple of address size"
+msgstr "erreur: %pB: le réadressage de la section %pA n'est pas un multiple de la taille des adresses"
+
+#: elflink.c:12121
#, c-format
msgid "%pB: no symbol found for import library"
msgstr "%pB: aucun symbole trouvé dans la bibliothèque d'importation"
-#: elflink.c:12620
+#: elflink.c:12696
+msgid "%F%P: %pB: failed to finish relative relocations\n"
+msgstr "%F%P: %pB: échec lors finalisation des réadressages relatifs\n"
+
+#: elflink.c:12773
#, c-format
msgid "%pB: file class %s incompatible with %s"
msgstr "%pB: classe de fichier %s incompatible avec %s"
-#: elflink.c:12870
+#: elflink.c:13023
#, c-format
msgid "%pB: failed to generate import library"
msgstr "%pB: échec de la génération de la bibliothèque d'importation"
-#: elflink.c:12996
+#: elflink.c:13191
#, c-format
msgid "warning: %s section has zero size"
msgstr "attention: section %s a une taille nulle"
-#: elflink.c:13044
+#: elflink.c:13239
#, c-format
msgid "warning: section '%s' is being made into a note"
msgstr "attention: section « %s » changé en une note"
-#: elflink.c:13137
+#: elflink.c:13333
msgid "%P%X: read-only segment has dynamic relocations\n"
msgstr "%P%X: segment en lecture seule a des réadressages dynamiques\n"
-#: elflink.c:13140
+#: elflink.c:13336
msgid "%P: warning: creating DT_TEXTREL in a shared object\n"
msgstr "%P: attention: création de DT_TEXTREL dans un objet partagé\n"
-#: elflink.c:13143
+#: elflink.c:13339
msgid "%P: warning: creating DT_TEXTREL in a PDE\n"
msgstr "%P: attention: création de DT_TEXTREL dans un PDE\n"
-#: elflink.c:13146
+#: elflink.c:13342
msgid "%P: warning: creating DT_TEXTREL in a PIE\n"
msgstr "%P: attention: création de DT_TEXTREL dans un PIE\n"
-#: elflink.c:13279
+#: elflink.c:13475
msgid "%P%X: can not read symbols: %E\n"
msgstr "%P%X: ne peut pas lire les symboles: %E\n"
-#: elflink.c:13699
+#: elflink.c:13900
msgid "%F%P: %pB(%pA): error: need linked-to section for --gc-sections\n"
msgstr "%F%P: %pB(%pA): erreur: une section linked-to est requise pour --gc-sections\n"
-#: elflink.c:14165
+#: elflink.c:14378
#, c-format
msgid "%pB: %pA+%#<PRIx64>: no symbol found for INHERIT"
msgstr "%pB: %pA+%#<PRIx64>: Pas de symbole trouvé pour INHERIT"
-#: elflink.c:14206
+#: elflink.c:14419
#, c-format
msgid "%pB: section '%pA': corrupt VTENTRY entry"
msgstr "%pB: section « %pA »: entrée VTENTRY corrompue"
-#: elflink.c:14349
+#: elflink.c:14562
#, c-format
msgid "unrecognized INPUT_SECTION_FLAG %s\n"
msgstr "INPUT_SECTION_FLAG %s non reconnu\n"
-#: elflink.c:15097
+#: elflink.c:15310
#, c-format
msgid "%P: %pB: warning: relocation against `%s' in read-only section `%pA'\n"
msgstr "%P: %pB: attention: réadressage sur « %s » dans la section en lecture seule « %pA »\n"
-#: elflink.c:15186
+#: elflink.c:15399
msgid "%P: warning: GNU indirect functions with DT_TEXTREL may result in a segfault at runtime; recompile with %s\n"
msgstr "%P: attention: les fonctions indirectes GNU avec DT_TEXTREL pourraient résulter en un plantage à l'exécution; recompilez avec %s\n"
@@ -5026,20 +5066,11 @@ msgstr "%P: attention: les fonctions indirectes GNU avec DT_TEXTREL pourraient r
msgid "%pB: warning: Weak TLS is implementation defined and may not work as expected"
msgstr "%pB: avertissement: Le TLS faible est défini par l'implémentation et pourrait ne pas fonctionner comme attendu"
-#: elfxx-aarch64.c:738 elfnn-aarch64.c:9909 elfnn-aarch64.c:9916
+#: elfxx-aarch64.c:738 elfnn-aarch64.c:9914 elfnn-aarch64.c:9921
#, c-format
msgid "%pB: warning: BTI turned on by -z force-bti when all inputs do not have BTI in NOTE section."
msgstr "%pB: avertissement: BTI activé par -z force-bti alors que toutes les entrées n'ont pas BTI dans la section NOTE."
-#: elfxx-aarch64.c:758 elfxx-x86.c:2695
-msgid "%F%P: failed to create GNU property section\n"
-msgstr "%F%P: échec lors de la création de la section des propriétés GNU\n"
-
-#: elfxx-aarch64.c:762 elfxx-x86.c:2700
-#, c-format
-msgid "%F%pA: failed to align section\n"
-msgstr "%F%pA: échec lors de l'alignement de la section\n"
-
#: elfxx-aarch64.c:812
#, c-format
msgid "error: %pB: <corrupt AArch64 used size: 0x%x>"
@@ -5167,309 +5198,335 @@ msgstr "%pB: « %pA » offset de %<PRId64> depuis « %pA » au delà de la l
msgid "%pB: `%pA' start VMA of %#<PRIx64> outside the 32-bit range supported; consider using `-Ttext-segment=...'"
msgstr "%pB: le début VMA « %pA » de %#<PRIx64> est en dehors de la plage 32 bits supportée; envisagez d'utiliser « -Ttext-segment=… »"
-#: elfxx-mips.c:13316 reloc.c:8430
+#: elfxx-mips.c:13335 reloc.c:8521
#, c-format
msgid "%X%P: %pB(%pA): error: relocation for offset %V has no value\n"
msgstr "%X%P: %pB(%pA): erreur: le réadressage pour le décalage %V n'a pas de valeur\n"
-#: elfxx-mips.c:13417 reloc.c:8518
+#: elfxx-mips.c:13436 reloc.c:8609
#, c-format
msgid "%X%P: %pB(%pA): relocation \"%pR\" is not supported\n"
msgstr "%X%P: %pB(%pA): le réadressage « %pR » n'est pas supporté\n"
-#: elfxx-mips.c:13426 reloc.c:8527
+#: elfxx-mips.c:13445 reloc.c:8618
#, c-format
msgid "%X%P: %pB(%pA): relocation \"%pR\" returns an unrecognized value %x\n"
msgstr "%X%P: %pB(%pA): le réadressage « %pR » retourne une valeur %x non reconnue\n"
-#: elfxx-mips.c:14611
+#: elfxx-mips.c:14627
#, c-format
msgid "%pB: unknown architecture %s"
msgstr "%pB: Architecture %s inconnue"
-#: elfxx-mips.c:15145
+#: elfxx-mips.c:15161
#, c-format
msgid "%pB: illegal section name `%pA'"
msgstr "%pB: nom illégal de section « %pA »"
-#: elfxx-mips.c:15422
+#: elfxx-mips.c:15438
#, c-format
msgid "%pB: warning: linking abicalls files with non-abicalls files"
msgstr "%pB: attention: édition de liens des fichiers abicalls avec des fichiers non abicalls"
-#: elfxx-mips.c:15439
+#: elfxx-mips.c:15455
#, c-format
msgid "%pB: linking 32-bit code with 64-bit code"
msgstr "%pB: édition de liens de code 32 bits avec du code 64 bits"
-#: elfxx-mips.c:15471 elfxx-mips.c:15537 elfxx-mips.c:15552
+#: elfxx-mips.c:15487 elfxx-mips.c:15553 elfxx-mips.c:15568
#, c-format
msgid "%pB: linking %s module with previous %s modules"
msgstr "%pB: édition de liens du module %s avec les modules précédents %s"
-#: elfxx-mips.c:15495
+#: elfxx-mips.c:15511
#, c-format
msgid "%pB: ABI mismatch: linking %s module with previous %s modules"
msgstr "%pB: ABI ne concorde pas: édition de lien du module %s avec les modules précédents %s"
-#: elfxx-mips.c:15520
+#: elfxx-mips.c:15536
#, c-format
msgid "%pB: ASE mismatch: linking %s module with previous %s modules"
msgstr "%pB: ASE ne concorde pas: édition de lien du module %s avec les modules précédents %s"
-#: elfxx-mips.c:15654
+#: elfxx-mips.c:15670
#, c-format
msgid "warning: %pB uses unknown floating point ABI %d (set by %pB), %pB uses unknown floating point ABI %d"
msgstr "Attention: %pB utilise l'ABI virgule flottante inconnue %d (définie par %pB), %pB utilise l'ABI virgule flottante inconnue %d"
-#: elfxx-mips.c:15660
+#: elfxx-mips.c:15676
#, c-format
msgid "warning: %pB uses unknown floating point ABI %d (set by %pB), %pB uses %s"
msgstr "Attention: %pB utilise l'ABI virgule flottante inconnue %d (définie par %pB), %pB utilise %s"
-#: elfxx-mips.c:15666
+#: elfxx-mips.c:15682
#, c-format
msgid "warning: %pB uses %s (set by %pB), %pB uses unknown floating point ABI %d"
msgstr "Attention: %pB utilise %s (défini par %pB), %pB utilise l'ABI virgule flottante inconnue %d"
-#: elfxx-mips.c:15680
+#: elfxx-mips.c:15696
#, c-format
msgid "warning: %pB uses %s (set by %pB), %pB uses %s"
msgstr "Attention: %pB utilise %s (défini par %pB), %pB utilise « %s »"
-#: elfxx-mips.c:15699
+#: elfxx-mips.c:15715
#, c-format
msgid "warning: %pB uses %s (set by %pB), %pB uses unknown MSA ABI %d"
msgstr "Attention: %pB utilise %s (défini par %pB), %pB utilise l'ABI MSA inconnue %d"
-#: elfxx-mips.c:15711
+#: elfxx-mips.c:15727
#, c-format
msgid "warning: %pB uses unknown MSA ABI %d (set by %pB), %pB uses %s"
msgstr "Attention: %pB utilise l'ABI MSA inconnue %d (définie par %pB), %pB utilise %s"
-#: elfxx-mips.c:15720
+#: elfxx-mips.c:15736
#, c-format
msgid "warning: %pB uses unknown MSA ABI %d (set by %pB), %pB uses unknown MSA ABI %d"
msgstr "Attention: %pB utilise l'ABI MSA inconnue %d (définie par %pB), %pB utilise l'ABI MSA inconnue %d"
-#: elfxx-mips.c:15782
+#: elfxx-mips.c:15798
#, c-format
msgid "%pB: endianness incompatible with that of the selected emulation"
msgstr "%pB: système de poids fort ou faible incompatible avec celui sélectionné pour l'émulation"
-#: elfxx-mips.c:15796
+#: elfxx-mips.c:15812
#, c-format
msgid "%pB: ABI is incompatible with that of the selected emulation"
msgstr "%pB: ABI est incompatible avec celui sélectionné pour l'émulation"
-#: elfxx-mips.c:15849
+#: elfxx-mips.c:15865
#, c-format
msgid "%pB: warning: inconsistent ISA between e_flags and .MIPS.abiflags"
msgstr "%pB: attention: ISA incohérentes entre e_flags et .MIPS.abiflags"
-#: elfxx-mips.c:15854
+#: elfxx-mips.c:15870
#, c-format
msgid "%pB: warning: inconsistent FP ABI between .gnu.attributes and .MIPS.abiflags"
msgstr "%pB: attention: ABI FP incohérentes entre .gnu.attributes and .MIPS.abiflags"
-#: elfxx-mips.c:15858
+#: elfxx-mips.c:15874
#, c-format
msgid "%pB: warning: inconsistent ASEs between e_flags and .MIPS.abiflags"
msgstr "%pB: attention: ASE incohérents entre e_flags et .MIPS.abiflags"
-#: elfxx-mips.c:15865
+#: elfxx-mips.c:15881
#, c-format
msgid "%pB: warning: inconsistent ISA extensions between e_flags and .MIPS.abiflags"
msgstr "%pB: attention: extensions ISA incohérentes entre e_flags et .MIPS.abiflags"
-#: elfxx-mips.c:15869
+#: elfxx-mips.c:15885
#, c-format
msgid "%pB: warning: unexpected flag in the flags2 field of .MIPS.abiflags (0x%lx)"
msgstr "%pB: attention: fanion inattendu dans le champ flags2 de .MIPS.abiflags (0x%lx)"
-#: elfxx-mips.c:16060
+#: elfxx-mips.c:16076
msgid "-mips32r2 -mfp64 (12 callee-saved)"
msgstr "-mips32r2 -mfp64 (12 callee-saved)"
-#: elfxx-mips.c:16122 elfxx-mips.c:16133
+#: elfxx-mips.c:16138 elfxx-mips.c:16149
msgid "None"
msgstr "aucun"
-#: elfxx-mips.c:16124 elfxx-mips.c:16193
+#: elfxx-mips.c:16140 elfxx-mips.c:16209
msgid "Unknown"
msgstr "Inconnu"
-#: elfxx-mips.c:16204
+#: elfxx-mips.c:16220
#, c-format
msgid "Hard or soft float\n"
msgstr "Flottant matériel ou logiciel\n"
-#: elfxx-mips.c:16207
+#: elfxx-mips.c:16223
#, c-format
msgid "Hard float (double precision)\n"
msgstr "Flottant matériel (double précision)\n"
-#: elfxx-mips.c:16210
+#: elfxx-mips.c:16226
#, c-format
msgid "Hard float (single precision)\n"
msgstr "Flottant matériel (simple précision)\n"
-#: elfxx-mips.c:16213
+#: elfxx-mips.c:16229
#, c-format
msgid "Soft float\n"
msgstr "Flottant logiciel\n"
-#: elfxx-mips.c:16216
+#: elfxx-mips.c:16232
#, c-format
msgid "Hard float (MIPS32r2 64-bit FPU 12 callee-saved)\n"
msgstr "Flottant matériel (MIPS32r2 64 bits FPU 12 callee-saved)\n"
-#: elfxx-mips.c:16219
+#: elfxx-mips.c:16235
#, c-format
msgid "Hard float (32-bit CPU, Any FPU)\n"
msgstr "Flottant matériel (processeur 32 bits, tout coprocesseur)\n"
-#: elfxx-mips.c:16222
+#: elfxx-mips.c:16238
#, c-format
msgid "Hard float (32-bit CPU, 64-bit FPU)\n"
msgstr "Flottant matériel (processeur 32 bits, coprocesseur 64 bits)\n"
-#: elfxx-mips.c:16225
+#: elfxx-mips.c:16241
#, c-format
msgid "Hard float compat (32-bit CPU, 64-bit FPU)\n"
msgstr "Compatibilité flottant matériel (processeur 32 bits, coprocesseur 64 bits)\n"
-#: elfxx-mips.c:16257
+#: elfxx-mips.c:16273
#, c-format
msgid " [abi=O32]"
msgstr " [abi=O32]"
-#: elfxx-mips.c:16259
+#: elfxx-mips.c:16275
#, c-format
msgid " [abi=O64]"
msgstr " [abi=O64]"
-#: elfxx-mips.c:16261
+#: elfxx-mips.c:16277
#, c-format
msgid " [abi=EABI32]"
msgstr " [abi=EABI32]"
-#: elfxx-mips.c:16263
+#: elfxx-mips.c:16279
#, c-format
msgid " [abi=EABI64]"
msgstr " [abi=EABI64]"
-#: elfxx-mips.c:16265
+#: elfxx-mips.c:16281
#, c-format
msgid " [abi unknown]"
msgstr " [abi inconnu]"
-#: elfxx-mips.c:16267
+#: elfxx-mips.c:16283
#, c-format
msgid " [abi=N32]"
msgstr " [abi=N32]"
-#: elfxx-mips.c:16269
+#: elfxx-mips.c:16285
#, c-format
msgid " [abi=64]"
msgstr " [abi=64]"
-#: elfxx-mips.c:16271
+#: elfxx-mips.c:16287
#, c-format
msgid " [no abi set]"
msgstr " [aucun jeu abi]"
-#: elfxx-mips.c:16296
+#: elfxx-mips.c:16312
#, c-format
msgid " [unknown ISA]"
msgstr " [ISA inconnu]"
-#: elfxx-mips.c:16316
+#: elfxx-mips.c:16332
#, c-format
msgid " [not 32bitmode]"
msgstr " [aucun mode 32 bits]"
-#: elfxx-riscv.c:1383
+#: elfxx-riscv.c:1563
#, c-format
msgid "x ISA extension `%s' must be set with the versions"
msgstr "l'extension x ISA « %s » doit être définie avec les versions"
-#: elfxx-riscv.c:1387
+#: elfxx-riscv.c:1569
#, c-format
msgid "cannot find default versions of the ISA extension `%s'"
msgstr "impossible de trouver les versions par défaut de l'extension ISA « %s »"
-#: elfxx-riscv.c:1461
+#: elfxx-riscv.c:1669
#, c-format
-msgid "-march=%s: expect number after `%dp'"
-msgstr "-march=%s: nombre attendu après « %dp »"
+msgid "%s: first ISA extension must be `e', `i' or `g'"
+msgstr "%s: la première extension ISA doit être « e », « i » ou « g »"
-#: elfxx-riscv.c:1544
+#: elfxx-riscv.c:1698
#, c-format
-msgid "-march=%s: rv%de is not a valid base ISA"
-msgstr "-march=%s: rv%de n'est pas une base ISA valable"
+msgid "%s: unknown standard ISA extension `%c'"
+msgstr "%s: extension ISA standard et préfixée « %c » inconnue"
-#: elfxx-riscv.c:1573
+#: elfxx-riscv.c:1708
#, c-format
-msgid "-march=%s: first ISA extension must be `e', `i' or `g'"
-msgstr "-march=%s: la première extension ISA doit être « e », « i » ou « g »"
+msgid "%s: standard ISA extension `%c' is not in canonical order"
+msgstr "%s: l'extension standard ISA « %c » n'est pas dans l'ordre canonique"
-#: elfxx-riscv.c:1600
+#: elfxx-riscv.c:1759
#, c-format
-msgid "-march=%s: unknown standard and prefixed ISA extension `%s'"
-msgstr "-march=%s: extension ISA standard et préfixée « %s » inconnue"
+msgid "%s: unknown prefix class for the ISA extension `%s'"
+msgstr "%s: classe de préfixe inconnue pour l'extension ISA « %s »"
-#: elfxx-riscv.c:1604
+#: elfxx-riscv.c:1795
#, c-format
-msgid "-march=%s: standard ISA extension `%c' is not in canonical order"
-msgstr "-march=%s: l'extension standard ISA « %c » n'est pas dans l'ordre canonique"
+msgid "%s: invalid prefixed ISA extension `%s' ends with <number>p"
+msgstr "%s: l'extension ISA préfixée « %s » invalide est terminée par <nombre>p"
-#: elfxx-riscv.c:1654
+#: elfxx-riscv.c:1815
#, c-format
-msgid "-march=%s: unknown prefix class for the ISA extension `%s'"
-msgstr "-march=%s: classe de préfixe inconnue pour l'extension ISA « %s »"
+msgid "%s: unknown prefixed ISA extension `%s'"
+msgstr "%s: extension préfixée ISA « %s » inconnue"
-#: elfxx-riscv.c:1688
+#: elfxx-riscv.c:1826
#, c-format
-msgid "-march=%s: unknown prefixed ISA extension `%s'"
-msgstr "-march=%s: extension préfixée ISA « %s » inconnue"
+msgid "%s: duplicate prefixed ISA extension `%s'"
+msgstr "%s: extension ISA préfixée « %s » dupliquée"
-#: elfxx-riscv.c:1699
+#: elfxx-riscv.c:1836
#, c-format
-msgid "-march=%s: duplicate prefixed ISA extension `%s'"
-msgstr "-march=%s: extension ISA préfixée « %s » dupliquée"
+msgid "%s: prefixed ISA extension `%s' is not in expected order. It must come before `%s'"
+msgstr "%s: l'extension ISA préfixée « %s » n'est pas dans l'ordre attendu. Elle doit apparaître avant « %s »"
-#: elfxx-riscv.c:1709
+#: elfxx-riscv.c:1852
#, c-format
-msgid "-march=%s: prefixed ISA extension `%s' is not in expected order. It must come before `%s'"
-msgstr "-march=%s: l'extension ISA préfixée « %s » n'est pas dans l'ordre attendu. Elle doit apparaître avant « %s »"
+msgid "%s: prefixed ISA extension must separate with _"
+msgstr "%s: l'extension ISA préfixée doit séparer avec _"
-#: elfxx-riscv.c:1725
+#: elfxx-riscv.c:1891
#, c-format
-msgid "-march=%s: prefixed ISA extension must separate with _"
-msgstr "-march=%s: l'extension ISA préfixée doit séparer avec _"
+msgid "rv%d does not support the `e' extension"
+msgstr "rv%d ne supporte pas l'extension « q »"
+
+#: elfxx-riscv.c:1898
+#, c-format
+msgid "rv%d does not support the `q' extension"
+msgstr "rv%d ne supporte pas l'extension « q »"
+
+#: elfxx-riscv.c:1905
+msgid "rv32e does not support the `f' extension"
+msgstr "rv32e ne supporte pas l'extension « f »"
+
+#: elfxx-riscv.c:1912
+msgid "`zfinx' is conflict with the `f/d/q' extension"
+msgstr "« zfinx » est en conflit avec l'extension « f/d/q »"
+
+#: elfxx-riscv.c:1933
+msgid "zvl*b extensions need to enable either `v' or `zve' extension"
+msgstr "les extensions zvl*b ont besoin d'activer l'extension « v » ou bien « zve »"
-#: elfxx-riscv.c:1773
+#: elfxx-riscv.c:1995
#, c-format
-msgid "-march=%s: ISA string cannot contain uppercase letters"
-msgstr "-march=%s: la chaîne ISA ne peut pas contenir de lettre majuscule"
+msgid "%s: ISA string cannot contain uppercase letters"
+msgstr "%s: la chaîne ISA ne peut pas contenir de lettre majuscule"
-#: elfxx-riscv.c:1799
+#: elfxx-riscv.c:2023
#, c-format
-msgid "-march=%s: ISA string must begin with rv32 or rv64"
-msgstr "-march=%s: la chaîne ISA doit commencer par rv32 ou rv64"
+msgid "%s: ISA string must begin with rv32 or rv64"
+msgstr "%s: la chaîne ISA doit commencer par rv32 ou rv64"
-#: elfxx-riscv.c:1832
+#: elfxx-riscv.c:2259
#, c-format
-msgid "-march=%s: rv32e does not support the `f' extension"
-msgstr "-march=%s: rv32e ne supporte pas l'extension « f »"
+msgid "invalid ISA extension ends with <number>p in .option arch `%s'"
+msgstr "une extension ISA invalide est terminée par <nombre>p dans l'architecture .option « %s »"
-#: elfxx-riscv.c:1840
+#: elfxx-riscv.c:2282
#, c-format
-msgid "-march=%s: rv32 does not support the `q' extension"
-msgstr "-march=%s: rv32 ne supporte pas l'extension « q »"
+msgid "unknown ISA extension `%s' in .option arch `%s'"
+msgstr "extension ISA « %s » inconnue dans l'architecture .option « %s »"
-#: elfxx-sparc.c:3021 elfnn-aarch64.c:5526
+#: elfxx-riscv.c:2293
+#, c-format
+msgid "cannot + or - base extension `%s' in .option arch `%s'"
+msgstr "impossible de + ou - l'extension de base « %s » dans l'architecture .option « %s »"
+
+#: elfxx-riscv.c:2413
+msgid "internal: unreachable INSN_CLASS_*"
+msgstr "interne: INSN_CLASS_* inatteignable"
+
+#: elfxx-sparc.c:3021 elfnn-aarch64.c:5529
#, c-format
msgid "%pB: relocation %s against STT_GNU_IFUNC symbol `%s' isn't handled by %s"
msgstr "%pB: le réadressage %s sur le symbole STT_GNU_IFUNC « %s » n'est pas géré par %s"
@@ -5479,95 +5536,118 @@ msgstr "%pB: le réadressage %s sur le symbole STT_GNU_IFUNC « %s » n'est pa
msgid "%pB: cannot link together %s and %s objects"
msgstr "%pB: ne peut lier ensemble les objets %s et %s"
-#: elfxx-x86.c:980
+#: elfxx-x86.c:1026
+#, c-format
+msgid "%F%P: %pB: failed to allocate relative reloc record\n"
+msgstr "%F%P: %pB: échec lors de l'allocation d'un enregistrement de réadressage relatif\n"
+
+#: elfxx-x86.c:1368
+#, c-format
+msgid "%F%P: %pB: failed to allocate 64-bit DT_RELR bitmap\n"
+msgstr "%F%P: %pB: échec lors de l'allocation d'un champ de bits DT_RELR 64 bits\n"
+
+#: elfxx-x86.c:1404
+#, c-format
+msgid "%F%P: %pB: failed to allocate 32-bit DT_RELR bitmap\n"
+msgstr "%F%P: %pB: échec lors de l'allocation d'un champ de bits DT_RELR 32 bits\n"
+
+#: elfxx-x86.c:1707
+#, c-format
+msgid "%F%P: %pB: size of compact relative reloc section is changed: new (%lu) != old (%lu)\n"
+msgstr "%F%P: %pB: la taille de la section de réadressage relatif compacte est changée : nouvelle (%lu) != ancienne (%lu)\n"
+
+#: elfxx-x86.c:1729
+#, c-format
+msgid "%F%P: %pB: failed to allocate compact relative reloc section\n"
+msgstr "%F%P: %pB: échec lors de l'allocation d'une section de réadressage relatif compacte\n"
+
+#: elfxx-x86.c:1987
#, c-format
msgid "%F%P: %pB: relocation %s against absolute symbol `%s' in section `%pA' is disallowed\n"
msgstr "%F%P: %pB: le réadressage de %s par rapport au symbole absolu « %s » dans la section « %pA » est interdit\n"
-#: elfxx-x86.c:1062
+#: elfxx-x86.c:2069
msgid "%P: %pB: warning: relocation in read-only section `%pA'\n"
msgstr "%P: %pB: attention: réadressage dans la section « %pA » en lecture seule\n"
-#: elfxx-x86.c:1782
-#, c-format
-msgid "%pB: %s (offset: 0x%s, info: 0x%s, addend: 0x%s) against '%s' for section '%pA' in %pB\n"
-msgstr "%pB: %s (offset: 0x%s, info: 0x%s, terme: 0x%s) sur « %s » pour la section « %pA » dans %pB\n"
+#: elfxx-x86.c:2785
+msgid "%pB: %s (offset: 0x%v, info: 0x%v, addend: 0x%v) against '%s' for section '%pA' in %pB\n"
+msgstr "%pB: %s (offset: 0x%v, info: 0x%v, terme: 0x%v) sur « %s » pour la section « %pA » dans %pB\n"
-#: elfxx-x86.c:1789
-#, c-format
-msgid "%pB: %s (offset: 0x%s, info: 0x%s) against '%s' for section '%pA' in %pB\n"
-msgstr "%pB: %s (offset: 0x%s, info: 0x%s) sur « %s » pour la section « %pA » dans %pB\n"
+#: elfxx-x86.c:2791
+msgid "%pB: %s (offset: 0x%v, info: 0x%v) against '%s' for section '%pA' in %pB\n"
+msgstr "%pB: %s (offset: 0x%v, info: 0x%v) sur « %s » pour la section « %pA » dans %pB\n"
-#: elfxx-x86.c:2367
+#: elfxx-x86.c:3388
#, c-format
msgid "error: %pB: <corrupt x86 property (0x%x) size: 0x%x>"
msgstr "erreur: %pB: <la taille de la propriété x86 (0x%x) est corrompue: 0x%x>"
-#: elfxx-x86.c:2714
+#: elfxx-x86.c:3735
msgid "%P: %pB: warning: missing %s\n"
msgstr "%P: %pB: avertissement: %s manquant\n"
-#: elfxx-x86.c:2715
+#: elfxx-x86.c:3736
msgid "%X%P: %pB: error: missing %s\n"
msgstr "%X%P: %pB: erreur: %s manquant\n"
-#: elfxx-x86.c:2778
+#: elfxx-x86.c:3799
msgid "IBT and SHSTK properties"
msgstr "propriétés IBT et SHSTK"
-#: elfxx-x86.c:2780
+#: elfxx-x86.c:3801
msgid "IBT property"
msgstr "propriété IBT"
-#: elfxx-x86.c:2782
+#: elfxx-x86.c:3803
msgid "SHSTK property"
msgstr "propriété SHSTK"
-#: elfxx-x86.c:2787
+#: elfxx-x86.c:3808
msgid "LAM_U48 property"
msgstr "propriété LAM_U48"
-#: elfxx-x86.c:2792
+#: elfxx-x86.c:3813
msgid "LAM_U57 property"
msgstr "propriété LAM_U57"
-#: elfxx-x86.c:2936
+#: elfxx-x86.c:3957
msgid "%F%P: failed to create VxWorks dynamic sections\n"
msgstr "%F%P: échec lors de la création des sections dynamiques VxWorks\n"
-#: elfxx-x86.c:2945
+#: elfxx-x86.c:3966
msgid "%F%P: failed to create GOT sections\n"
msgstr "%F%P: échec lors de la création des sections GOT\n"
-#: elfxx-x86.c:2963
+#: elfxx-x86.c:3984
msgid "%F%P: failed to create ifunc sections\n"
msgstr "%F%P: échec lors de la création des sections ifunc\n"
-#: elfxx-x86.c:3000
+#: elfxx-x86.c:4021
msgid "%F%P: failed to create GOT PLT section\n"
msgstr "%F%P: échec lors de la création de la section PLT GOT\n"
-#: elfxx-x86.c:3019
+#: elfxx-x86.c:4040
msgid "%F%P: failed to create IBT-enabled PLT section\n"
msgstr "%F%P: échec lors de la création de la section PLT activée pour IBT\n"
-#: elfxx-x86.c:3033
+#: elfxx-x86.c:4054
msgid "%F%P: failed to create BND PLT section\n"
msgstr "%F%P: échec lors de la création de la section PLT BND\n"
-#: elfxx-x86.c:3053
+#: elfxx-x86.c:4074
msgid "%F%P: failed to create PLT .eh_frame section\n"
msgstr "%F%P: échec lors de la création de la section .eh_frame PLT\n"
-#: elfxx-x86.c:3066
+#: elfxx-x86.c:4087
msgid "%F%P: failed to create GOT PLT .eh_frame section\n"
msgstr "%F%P: échec lors de la création de la section .eh_frame PLT GOT\n"
-#: elfxx-x86.c:3080
+#: elfxx-x86.c:4101
msgid "%F%P: failed to create the second PLT .eh_frame section\n"
msgstr "%F%P: échec lors de la création de la section .eh_frame PLT\n"
-#: elfxx-x86.c:3122
+#: elfxx-x86.c:4143
msgid "%X%P: attempted static link of dynamic object `%pB'\n"
msgstr "%X%P: édition de lien statique tentée sur l'objet dynamique « %pB »\n"
@@ -5641,76 +5721,76 @@ msgstr "%s déprécié appelé à %s dans la ligne %d dans %s\n"
msgid "Deprecated %s called\n"
msgstr "%s appel déprécié\n"
-#: linker.c:1706
+#: linker.c:1708
#, c-format
msgid "%pB: indirect symbol `%s' to `%s' is a loop"
msgstr "%pB: symbole indirect « %s » vers « %s » est une boucle"
-#: linker.c:2577
+#: linker.c:2579
#, c-format
msgid "attempt to do relocatable link with %s input and %s output"
msgstr "tentative de réadressage d'un lien avec %s à l'entrée et %s à la sortie"
-#: linker.c:2861
+#: linker.c:2863
#, c-format
msgid "%pB: ignoring duplicate section `%pA'\n"
msgstr "%pB: ignore les sections dupliquées « %pA »\n"
-#: linker.c:2871 linker.c:2881
+#: linker.c:2873 linker.c:2883
#, c-format
msgid "%pB: duplicate section `%pA' has different size\n"
msgstr "%pB: section dupliquée « %pA » avec des tailles différentes\n"
-#: linker.c:2890 linker.c:2896
+#: linker.c:2892 linker.c:2898
#, c-format
msgid "%pB: could not read contents of section `%pA'\n"
msgstr "%pB: ne peut pas lire le contenu de la section « %pA »\n"
-#: linker.c:2901
+#: linker.c:2903
#, c-format
msgid "%pB: duplicate section `%pA' has different contents\n"
msgstr "%pB: section dupliquée « %pA » a des contenus différents\n"
-#: linker.c:3419
+#: linker.c:3421
#, c-format
msgid "%pB: compiled for a big endian system and target is little endian"
msgstr "%pB: compilé pour un système à octets de poids fort alors que la cible est un système à octets de poids faible"
-#: linker.c:3422
+#: linker.c:3424
#, c-format
msgid "%pB: compiled for a little endian system and target is big endian"
msgstr "%pB: compilé pour un système à octets de poids faible alors que la cible est un système à octets de poids fort"
-#: mach-o-arm.c:172
+#: mach-o-arm.c:169 mach-o-arm.c:301
msgid "malformed mach-o ARM reloc pair: reloc is first reloc"
msgstr "paire de réadressage mach-o ARM mal formée : le réadressage est le premier réadressage"
-#: mach-o-arm.c:188
+#: mach-o-arm.c:185
#, c-format
msgid "malformed mach-o ARM reloc pair: invalid length: %d"
msgstr "paire de réadressage mach-o ARM mal formée : longueur invalide : %d"
-#: mach-o-arm.c:203
+#: mach-o-arm.c:200
#, c-format
msgid "malformed mach-o ARM sectdiff reloc: invalid length: %d"
msgstr "réadressage mach-o ARM sectdiff mal formé : longueur invalide : %d"
-#: mach-o-arm.c:218
+#: mach-o-arm.c:215
#, c-format
msgid "malformed mach-o ARM local sectdiff reloc: invalid length: %d"
msgstr "réadressage mach-o ARM local sectdiff mal formé : longueur invalide : %d"
-#: mach-o-arm.c:233
+#: mach-o-arm.c:230
#, c-format
msgid "malformed mach-o ARM half sectdiff reloc: invalid length: %d"
msgstr "réadressage mach-o ARM half sectdiff : longueur invalide : %d"
-#: mach-o-arm.c:265
+#: mach-o-arm.c:262
#, c-format
msgid "malformed mach-o ARM vanilla reloc: invalid length: %d (pcrel: %d)"
msgstr "réadressage mach-o ARM vanilla mal formé : longueur invalide : %d (pcrel : %d)"
-#: mach-o-arm.c:329
+#: mach-o-arm.c:332
#, c-format
msgid "malformed mach-o ARM reloc: unknown reloc type: %d"
msgstr "réadressage mach-o ARM mal formé : type de réadressage inconnu : %d"
@@ -5814,13 +5894,13 @@ msgstr "impossible de disposer la commande de chargement inconnue %#x"
#: mach-o.c:3659
#, c-format
-msgid "bfd_mach_o_read_section_32: overlarge alignment value: %#lx, using 32 instead"
-msgstr "bfd_mach_o_read_section_32: valeur d'alignement démesurée: %#lx, utilise 32 à la place"
+msgid "bfd_mach_o_read_section_32: overlarge alignment value: %#lx"
+msgstr "bfd_mach_o_read_section_32: valeur d'alignement démesurée: %#lx"
#: mach-o.c:3702
#, c-format
-msgid "bfd_mach_o_read_section_64: overlarge alignment value: %#lx, using 32 instead"
-msgstr "bfd_mach_o_read_section_64: valeur d'alignement démesurée: %#lx, utilise 32 à la place"
+msgid "bfd_mach_o_read_section_64: overlarge alignment value: %#lx"
+msgstr "bfd_mach_o_read_section_64: valeur d'alignement démesurée: %#lx"
#: mach-o.c:3753
#, c-format
@@ -5862,132 +5942,137 @@ msgstr "la valeur d'ordre des octets de l'en-tête %#x est inconnue"
msgid "%pB: access beyond end of merged section (%<PRId64>)"
msgstr "%pB: accès au-delà de la fin de la section fusionnée (%<PRId64>)"
-#: mmo.c:475
+#: mmo.c:472
#, c-format
msgid "%pB: no core to allocate section name %s"
msgstr "%pB: pas de noyau pour allouer un nom de section %s"
-#: mmo.c:540
+#: mmo.c:537
#, c-format
msgid "%pB: no core to allocate a symbol %d bytes long"
msgstr "%pB: pas de noyau pour allouer un symbole de %d octets de longueur"
-#: mmo.c:951
+#: mmo.c:960
#, c-format
msgid "%pB: attempt to emit contents at non-multiple-of-4 address %#<PRIx64>"
msgstr "%pB: tentative d'émettre du contenu à une adresse %#<PRIx64> qui n'est pas un multiple de 4"
-#: mmo.c:1247
+#: mmo.c:1256
#, c-format
msgid "%pB: invalid mmo file: initialization value for $255 is not `Main'\n"
msgstr "%pB: fichier mmo invalide: valeur d'initialisation pour $255 n'est pas « Main »\n"
-#: mmo.c:1394
+#: mmo.c:1403
#, c-format
msgid "%pB: unsupported wide character sequence 0x%02X 0x%02X after symbol name starting with `%s'\n"
msgstr "%pB: séquence de caractères large 0x%02X 0x%02X non supportée après le nom de symbole débutant par « %s »\n"
-#: mmo.c:1627
+#: mmo.c:1419
+#, c-format
+msgid "%pB: symbol name exceeds given max length of %d"
+msgstr "%pB: le nom de symbole dépasse la longueur maximale donnée %d"
+
+#: mmo.c:1646
#, c-format
msgid "%pB: invalid mmo file: unsupported lopcode `%d'\n"
msgstr "%pB: fichier mmo invalide: lopcode « %d » non supporté\n"
-#: mmo.c:1638
+#: mmo.c:1657
#, c-format
msgid "%pB: invalid mmo file: expected YZ = 1 got YZ = %d for lop_quote\n"
msgstr "%pB: fichier mmo invalide: attendu YZ = 1 obtenu YZ = %d pour lop_quote\n"
-#: mmo.c:1678
+#: mmo.c:1701
#, c-format
msgid "%pB: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_loc\n"
msgstr "%pB: fichier mmo invalide: attendu z = 1 ou z = 2, obtenu z = %d pour lop_loc\n"
-#: mmo.c:1729
+#: mmo.c:1752
#, c-format
msgid "%pB: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_fixo\n"
msgstr "%pB: fichier mmo invalide: attendu z = 1 ou z = 2, obtenu z = %d pour lop_fixo\n"
-#: mmo.c:1770
+#: mmo.c:1801
#, c-format
msgid "%pB: invalid mmo file: expected y = 0, got y = %d for lop_fixrx\n"
msgstr "%pB: fichier mmo invalide: attendu y = 0, obtenu y = %d pour lop_fixrx\n"
-#: mmo.c:1781
+#: mmo.c:1812
#, c-format
msgid "%pB: invalid mmo file: expected z = 16 or z = 24, got z = %d for lop_fixrx\n"
msgstr "%pB: fichier mmo invalide: attendu z = 16 ou z = 24, obtenu z = %d pour lop_fixrx\n"
-#: mmo.c:1806
+#: mmo.c:1837
#, c-format
msgid "%pB: invalid mmo file: leading byte of operand word must be 0 or 1, got %d for lop_fixrx\n"
msgstr "%pB: fichier mmo invalide: octet de tête du mot de l'opérande doit être 0 ou 1, obtenu %d pour lop_fixrx\n"
-#: mmo.c:1831
+#: mmo.c:1866
#, c-format
msgid "%pB: cannot allocate file name for file number %d, %d bytes\n"
msgstr "%pB: ne peut pas allouer un nom de fichier pour le no. de fichier %d, %d octets\n"
-#: mmo.c:1853
+#: mmo.c:1888
#, c-format
msgid "%pB: invalid mmo file: file number %d `%s', was already entered as `%s'\n"
msgstr "%pB: fichier mmo invalide: no. de fichier %d « %s », a déjà été entré en tant que « %s »\n"
-#: mmo.c:1867
+#: mmo.c:1902
#, c-format
msgid "%pB: invalid mmo file: file name for number %d was not specified before use\n"
msgstr "%pB: fichier mmo invalide: nom de fichier %d n'a pas été spécifié avant son utilisation\n"
-#: mmo.c:1974
+#: mmo.c:2014
#, c-format
msgid "%pB: invalid mmo file: fields y and z of lop_stab non-zero, y: %d, z: %d\n"
msgstr "%pB: fichier mmo invalide: champs y et z de lop_stab non nul, y: %d, z: %d\n"
-#: mmo.c:2011
+#: mmo.c:2051
#, c-format
msgid "%pB: invalid mmo file: lop_end not last item in file\n"
msgstr "%pB: fichier mmo invalide: lop_end n'est pas le dernier élement dans le fichier\n"
-#: mmo.c:2025
+#: mmo.c:2065
#, c-format
msgid "%pB: invalid mmo file: YZ of lop_end (%ld) not equal to the number of tetras to the preceding lop_stab (%ld)\n"
msgstr "%pB: fichier mmo invalide: YZ de lop_end (%ld) n'est pas égal au nombre de tetras du lop_stab précédent (%ld)\n"
-#: mmo.c:2734
+#: mmo.c:2778
#, c-format
msgid "%pB: invalid symbol table: duplicate symbol `%s'\n"
msgstr "%pB: table de symboles invalide: symbole « %s » dupliqué\n"
-#: mmo.c:2978
+#: mmo.c:3022
#, c-format
msgid "%pB: bad symbol definition: `Main' set to %s rather than the start address %s\n"
msgstr "%pB: Définition de symbole erronée: « Main » initialisé à %s au lieu de l'adresse de départ %s\n"
-#: mmo.c:3077
+#: mmo.c:3121
#, c-format
msgid "%pB: warning: symbol table too large for mmo, larger than 65535 32-bit words: %d. Only `Main' will be emitted.\n"
msgstr "%pB: attention: table de symboles trop grande pour mmo, plus grande que 65535 mots de 32 bits: %d. Seul « Main » sera produit.\n"
-#: mmo.c:3123
+#: mmo.c:3167
#, c-format
msgid "%pB: internal error, symbol table changed size from %d to %d words\n"
msgstr "%pB: erreur interne, table de symbole a changé de taille de %d à %d mots\n"
-#: mmo.c:3176
+#: mmo.c:3220
#, c-format
msgid "%pB: internal error, internal register section %pA had contents\n"
msgstr "%pB: erreur interne, registre interne de section %pA contient quelque chose\n"
-#: mmo.c:3227
+#: mmo.c:3271
#, c-format
msgid "%pB: no initialized registers; section length 0\n"
msgstr "%pB: pas de registre initialisé; section de longueur 0\n"
-#: mmo.c:3234
+#: mmo.c:3278
#, c-format
msgid "%pB: too many initialized registers; section length %<PRId64>"
msgstr "%pB: trop de registres initialisés; longueur de section %<PRId64>"
-#: mmo.c:3239
+#: mmo.c:3283
#, c-format
msgid "%pB: invalid start address for initialized registers of length %<PRId64>: %#<PRIx64>"
msgstr "%pB: adresse de départ invalide pour des registres initialisés de longueur %<PRId64>: %#<PRIx64>"
@@ -5997,7 +6082,7 @@ msgstr "%pB: adresse de départ invalide pour des registres initialisés de long
msgid "unhandled OSF/1 core file section type %d"
msgstr "type de section de fichier core OSF/1 %d non traité"
-#: pdp11.c:1590
+#: pdp11.c:1589
#, c-format
msgid "%pB: symbol indicates overlay (not supported)"
msgstr "%pB: le symbole indique un recouvrement (pas supporté)"
@@ -6069,47 +6154,47 @@ msgstr ""
"Vidange de %s\n"
#. XXX code yet to be written.
-#: peicode.h:796
+#: peicode.h:806
#, c-format
msgid "%pB: unhandled import type; %x"
msgstr "%pB: type d'importation non traitée; %x"
-#: peicode.h:802
+#: peicode.h:812
#, c-format
msgid "%pB: unrecognized import type; %x"
msgstr "%pB: type d'importation non reconnu; %x"
-#: peicode.h:817
+#: peicode.h:827
#, c-format
msgid "%pB: unrecognized import name type; %x"
msgstr "%pB: type de nom d'importation non reconnu: %x"
-#: peicode.h:1225
+#: peicode.h:1241
#, c-format
msgid "%pB: unrecognised machine type (0x%x) in Import Library Format archive"
msgstr "%pB: type de machine non reconnu (0x%x) dans l'archive de librairie de formats d'importation"
-#: peicode.h:1238
+#: peicode.h:1254
#, c-format
msgid "%pB: recognised but unhandled machine type (0x%x) in Import Library Format archive"
msgstr "%pB: type de machine reconnue mais non traitée (0x%x) dans l'archive da la librairie de formats d'importation"
-#: peicode.h:1256
+#: peicode.h:1272
#, c-format
msgid "%pB: size field is zero in Import Library Format header"
msgstr "%pB: taille du champ est zéro dans l'en-tête de la librairie de formats d'importation"
-#: peicode.h:1282
+#: peicode.h:1298
#, c-format
msgid "%pB: string not null terminated in ILF object file"
msgstr "%pB: chaîne n'est pas terminée par un zéro dans le fichier objet ILF"
-#: peicode.h:1338
+#: peicode.h:1354
#, c-format
msgid "%pB: error: debug data ends beyond end of debug directory"
msgstr "%pB: erreur: les données de débogage s'arrêtent après la fin du répertoire de débogage"
-#: plugin.c:236
+#: plugin.c:246
msgid "plugin framework: out of file descriptors. Try using fewer objects/archives\n"
msgstr "framework de greffon: à cours de descripteurs de fichiers. Essayez d'utiliser moins d'objets/archives\n"
@@ -6166,17 +6251,17 @@ msgstr "Secteur de la partition[%d] = 0x%.8lx (%ld)\n"
msgid "Partition[%d] length = 0x%.8lx (%ld)\n"
msgstr "Longueur de la partition[%d] = 0x%.8lx (%ld)\n"
-#: reloc.c:8329
+#: reloc.c:8420
msgid "INPUT_SECTION_FLAGS are not supported"
msgstr "INPUT_SECTION_FLAGS pas supportés"
-#: reloc.c:8589
+#: reloc.c:8680
#, c-format
msgid "%pB: unrecognized relocation type %#x in section `%pA'"
msgstr "%pB: réadressage inconnu (%#x) dans la section « %pA »"
#. PR 21803: Suggest the most likely cause of this error.
-#: reloc.c:8593
+#: reloc.c:8684
#, c-format
msgid "is this version of the linker - %s - out of date ?"
msgstr "la version de l'éditeur de liens – %s – est-elle dépassée ?"
@@ -6386,291 +6471,291 @@ msgstr "%s non implémenté"
msgid "unknown line command %d"
msgstr "commande de ligne %d inconnue"
-#: vms-alpha.c:5186 vms-alpha.c:5204 vms-alpha.c:5219 vms-alpha.c:5235
-#: vms-alpha.c:5248 vms-alpha.c:5260 vms-alpha.c:5273
+#: vms-alpha.c:5183 vms-alpha.c:5201 vms-alpha.c:5216 vms-alpha.c:5232
+#: vms-alpha.c:5245 vms-alpha.c:5257 vms-alpha.c:5270
#, c-format
msgid "unknown reloc %s + %s"
msgstr "réadressage %s + %s inconnu"
-#: vms-alpha.c:5328
+#: vms-alpha.c:5325
#, c-format
msgid "unknown reloc %s"
msgstr "réadressage %s inconnu"
-#: vms-alpha.c:5342
+#: vms-alpha.c:5339
msgid "invalid section index in ETIR"
msgstr "index de section incorrect dans ETIR"
-#: vms-alpha.c:5351
+#: vms-alpha.c:5348
msgid "relocation for non-REL psect"
msgstr "réadressage pour psect non-REL"
-#: vms-alpha.c:5400
+#: vms-alpha.c:5397
#, c-format
msgid "unknown symbol in command %s"
msgstr "symbole inconnu dans la commande %s"
-#: vms-alpha.c:5814
+#: vms-alpha.c:5811
#, c-format
msgid "reloc (%d) is *UNKNOWN*"
msgstr "le réadressage (%d) est *INCONNU*"
-#: vms-alpha.c:5930
+#: vms-alpha.c:5927
#, c-format
msgid " EMH %u (len=%u): "
msgstr " EMH %u (long=%u): "
-#: vms-alpha.c:5935
+#: vms-alpha.c:5932
#, c-format
msgid " Error: The length is less than the length of an EMH record\n"
msgstr " Erreur: La longueur est plus petite que la longueur d'un enregistrement EMH\n"
-#: vms-alpha.c:5952
+#: vms-alpha.c:5949
#, c-format
msgid " Error: The record length is less than the size of an EMH_MHD record\n"
msgstr " Erreur: La longueur de l'enregistrement est inférieure à la taille de l'enregistrement EMH_MHD\n"
-#: vms-alpha.c:5955
+#: vms-alpha.c:5952
#, c-format
msgid "Module header\n"
msgstr "En-tête module\n"
-#: vms-alpha.c:5956
+#: vms-alpha.c:5953
#, c-format
msgid " structure level: %u\n"
msgstr " niveau de structure: %u\n"
-#: vms-alpha.c:5957
+#: vms-alpha.c:5954
#, c-format
msgid " max record size: %u\n"
msgstr " taille max d'enregistrement: %u\n"
-#: vms-alpha.c:5963
+#: vms-alpha.c:5960
#, c-format
msgid " Error: The module name is missing\n"
msgstr " Erreur: Le nom du module est manquant\n"
-#: vms-alpha.c:5969
+#: vms-alpha.c:5966
#, c-format
msgid " Error: The module name is too long\n"
msgstr " Erreur: Le nom du module est trop long\n"
-#: vms-alpha.c:5972
+#: vms-alpha.c:5969
#, c-format
msgid " module name : %.*s\n"
msgstr " nom du module : %.*s\n"
-#: vms-alpha.c:5976
+#: vms-alpha.c:5973
#, c-format
msgid " Error: The module version is missing\n"
msgstr " Erreur: La version du module est manquante\n"
-#: vms-alpha.c:5982
+#: vms-alpha.c:5979
#, c-format
msgid " Error: The module version is too long\n"
msgstr " Erreur: La version du module est trop longue\n"
-#: vms-alpha.c:5985
+#: vms-alpha.c:5982
#, c-format
msgid " module version : %.*s\n"
msgstr " version du module : %.*s\n"
-#: vms-alpha.c:5988
+#: vms-alpha.c:5985
#, c-format
msgid " Error: The compile date is truncated\n"
msgstr " Erreur: La date de compilation est tronquée\n"
-#: vms-alpha.c:5990
+#: vms-alpha.c:5987
#, c-format
msgid " compile date : %.17s\n"
msgstr " date de compilation : %.17s\n"
-#: vms-alpha.c:5995
+#: vms-alpha.c:5992
#, c-format
msgid "Language Processor Name\n"
msgstr "Nom du Processeur de Langage\n"
-#: vms-alpha.c:5996
+#: vms-alpha.c:5993
#, c-format
msgid " language name: %.*s\n"
msgstr " nom du language: %.*s\n"
-#: vms-alpha.c:6000
+#: vms-alpha.c:5997
#, c-format
msgid "Source Files Header\n"
msgstr "En-tête des fichiers sources\n"
-#: vms-alpha.c:6001
+#: vms-alpha.c:5998
#, c-format
msgid " file: %.*s\n"
msgstr " fichier: %.*s\n"
-#: vms-alpha.c:6005
+#: vms-alpha.c:6002
#, c-format
msgid "Title Text Header\n"
msgstr "En-tête du texte du titre\n"
-#: vms-alpha.c:6006
+#: vms-alpha.c:6003
#, c-format
msgid " title: %.*s\n"
msgstr " titre: %.*s\n"
-#: vms-alpha.c:6010
+#: vms-alpha.c:6007
#, c-format
msgid "Copyright Header\n"
msgstr "En-tête du copyright\n"
-#: vms-alpha.c:6011
+#: vms-alpha.c:6008
#, c-format
msgid " copyright: %.*s\n"
msgstr " copyright: %.*s\n"
-#: vms-alpha.c:6015
+#: vms-alpha.c:6012
#, c-format
msgid "unhandled emh subtype %u\n"
msgstr "sous-type emh %u non pris en charge\n"
-#: vms-alpha.c:6025
+#: vms-alpha.c:6022
#, c-format
msgid " EEOM (len=%u):\n"
msgstr " EEOM (long=%u):\n"
-#: vms-alpha.c:6030
+#: vms-alpha.c:6027
#, c-format
msgid " Error: The length is less than the length of an EEOM record\n"
msgstr " Erreur: La longueur est plus petite que la longueur d'un enregistrement EEOM\n"
-#: vms-alpha.c:6034
+#: vms-alpha.c:6031
#, c-format
msgid " number of cond linkage pairs: %u\n"
msgstr " nombre de paires de liaisons cond: %u\n"
-#: vms-alpha.c:6036
+#: vms-alpha.c:6033
#, c-format
msgid " completion code: %u\n"
msgstr " code de complétion: %u\n"
-#: vms-alpha.c:6040
+#: vms-alpha.c:6037
#, c-format
msgid " transfer addr flags: 0x%02x\n"
msgstr " fanions de transfert d'adr: 0x%02x\n"
-#: vms-alpha.c:6041
+#: vms-alpha.c:6038
#, c-format
msgid " transfer addr psect: %u\n"
msgstr " psect transert adr: %u\n"
-#: vms-alpha.c:6043
+#: vms-alpha.c:6040
#, c-format
msgid " transfer address : 0x%08x\n"
msgstr " adresse de transert: 0x%08x\n"
-#: vms-alpha.c:6052
+#: vms-alpha.c:6049
msgid " WEAK"
msgstr " FAIBLE"
-#: vms-alpha.c:6054
+#: vms-alpha.c:6051
msgid " DEF"
msgstr " DEF"
-#: vms-alpha.c:6056
+#: vms-alpha.c:6053
msgid " UNI"
msgstr " UNI"
-#: vms-alpha.c:6058 vms-alpha.c:6079
+#: vms-alpha.c:6055 vms-alpha.c:6076
msgid " REL"
msgstr " REL"
-#: vms-alpha.c:6060
+#: vms-alpha.c:6057
msgid " COMM"
msgstr " COMM"
-#: vms-alpha.c:6062
+#: vms-alpha.c:6059
msgid " VECEP"
msgstr " VECEP"
-#: vms-alpha.c:6064
+#: vms-alpha.c:6061
msgid " NORM"
msgstr " NORM"
-#: vms-alpha.c:6066
+#: vms-alpha.c:6063
msgid " QVAL"
msgstr " QVAL"
-#: vms-alpha.c:6073
+#: vms-alpha.c:6070
msgid " PIC"
msgstr " PIC"
-#: vms-alpha.c:6075
+#: vms-alpha.c:6072
msgid " LIB"
msgstr " LIB"
-#: vms-alpha.c:6077
+#: vms-alpha.c:6074
msgid " OVR"
msgstr " OVR"
-#: vms-alpha.c:6081
+#: vms-alpha.c:6078
msgid " GBL"
msgstr " GBL"
-#: vms-alpha.c:6083
+#: vms-alpha.c:6080
msgid " SHR"
msgstr " SHR"
-#: vms-alpha.c:6085
+#: vms-alpha.c:6082
msgid " EXE"
msgstr " EXE"
-#: vms-alpha.c:6087
+#: vms-alpha.c:6084
msgid " RD"
msgstr " RD"
-#: vms-alpha.c:6089
+#: vms-alpha.c:6086
msgid " WRT"
msgstr " WRT"
-#: vms-alpha.c:6091
+#: vms-alpha.c:6088
msgid " VEC"
msgstr " VEC"
-#: vms-alpha.c:6093
+#: vms-alpha.c:6090
msgid " NOMOD"
msgstr " NOMOD"
-#: vms-alpha.c:6095
+#: vms-alpha.c:6092
msgid " COM"
msgstr " COM"
-#: vms-alpha.c:6097
+#: vms-alpha.c:6094
msgid " 64B"
msgstr " 64B"
-#: vms-alpha.c:6106
+#: vms-alpha.c:6103
#, c-format
msgid " EGSD (len=%u):\n"
msgstr " EGSD (long=%u):\n"
-#: vms-alpha.c:6119
+#: vms-alpha.c:6118
#, c-format
msgid " EGSD entry %2u (type: %u, len: %u): "
msgstr " entrée EGSD %2u (type: %u, long: %u): "
-#: vms-alpha.c:6125 vms-alpha.c:6376
+#: vms-alpha.c:6124 vms-alpha.c:6419
#, c-format
-msgid " Error: length larger than remaining space in record\n"
-msgstr " Erreur: longueur plus grande que l'espace restant dans l'enregistrement\n"
+msgid " Erroneous length\n"
+msgstr " Longueur erronée\n"
#: vms-alpha.c:6137
#, c-format
msgid "PSC - Program section definition\n"
msgstr "PSC - Définition de section du programme\n"
-#: vms-alpha.c:6138 vms-alpha.c:6155
+#: vms-alpha.c:6138 vms-alpha.c:6158
#, c-format
msgid " alignment : 2**%u\n"
msgstr " alignement : 2**%u\n"
-#: vms-alpha.c:6139 vms-alpha.c:6156
+#: vms-alpha.c:6139 vms-alpha.c:6159
#, c-format
msgid " flags : 0x%04x"
msgstr " fanions : 0x%04x"
@@ -6680,1110 +6765,1110 @@ msgstr " fanions : 0x%04x"
msgid " alloc (len): %u (0x%08x)\n"
msgstr " alloc (long): %u (0x%08x)\n"
-#: vms-alpha.c:6144 vms-alpha.c:6201 vms-alpha.c:6250
+#: vms-alpha.c:6145 vms-alpha.c:6211 vms-alpha.c:6279
#, c-format
msgid " name : %.*s\n"
msgstr " nom : %.*s\n"
-#: vms-alpha.c:6154
+#: vms-alpha.c:6157
#, c-format
msgid "SPSC - Shared Image Program section def\n"
msgstr "SPSC - Def de section de l'image partagée du programme\n"
-#: vms-alpha.c:6160
+#: vms-alpha.c:6163
#, c-format
msgid " alloc (len) : %u (0x%08x)\n"
msgstr " alloc (long) : %u (0x%08x)\n"
-#: vms-alpha.c:6161
+#: vms-alpha.c:6164
#, c-format
msgid " image offset : 0x%08x\n"
msgstr " offset d'image: 0x%08x\n"
-#: vms-alpha.c:6163
+#: vms-alpha.c:6166
#, c-format
msgid " symvec offset : 0x%08x\n"
msgstr " offset symvec : 0x%08x\n"
-#: vms-alpha.c:6165
+#: vms-alpha.c:6169
#, c-format
msgid " name : %.*s\n"
msgstr " nom : %.*s\n"
-#: vms-alpha.c:6178
+#: vms-alpha.c:6185
#, c-format
msgid "SYM - Global symbol definition\n"
msgstr "SYM - Définition du symbol global\n"
-#: vms-alpha.c:6179 vms-alpha.c:6239 vms-alpha.c:6260 vms-alpha.c:6279
+#: vms-alpha.c:6186 vms-alpha.c:6267 vms-alpha.c:6291 vms-alpha.c:6314
#, c-format
msgid " flags: 0x%04x"
msgstr " fanions: 0x%04x"
-#: vms-alpha.c:6182
+#: vms-alpha.c:6189
#, c-format
msgid " psect offset: 0x%08x\n"
msgstr " offset psect: 0x%08x\n"
-#: vms-alpha.c:6186
+#: vms-alpha.c:6193
#, c-format
msgid " code address: 0x%08x\n"
msgstr " adresse code: 0x%08x\n"
-#: vms-alpha.c:6188
+#: vms-alpha.c:6195
#, c-format
msgid " psect index for entry point : %u\n"
msgstr " index psect pour point d'entrée: %u\n"
-#: vms-alpha.c:6191 vms-alpha.c:6267 vms-alpha.c:6286
+#: vms-alpha.c:6198 vms-alpha.c:6298 vms-alpha.c:6321
#, c-format
msgid " psect index : %u\n"
msgstr " index psect : %u\n"
-#: vms-alpha.c:6193 vms-alpha.c:6269 vms-alpha.c:6288
+#: vms-alpha.c:6201 vms-alpha.c:6301 vms-alpha.c:6324
#, c-format
msgid " name : %.*s\n"
msgstr " nom : %.*s\n"
-#: vms-alpha.c:6200
+#: vms-alpha.c:6209
#, c-format
msgid "SYM - Global symbol reference\n"
msgstr "SYM - Référence du symbol globaux\n"
-#: vms-alpha.c:6212
+#: vms-alpha.c:6224
#, c-format
msgid "IDC - Ident Consistency check\n"
msgstr "IDC - Vérification de la consistance d'identité\n"
-#: vms-alpha.c:6213
+#: vms-alpha.c:6225
#, c-format
msgid " flags : 0x%08x"
msgstr " fanions : 0x%08x"
-#: vms-alpha.c:6217
+#: vms-alpha.c:6229
#, c-format
msgid " id match : %x\n"
msgstr " correspondance id : %x\n"
-#: vms-alpha.c:6219
+#: vms-alpha.c:6231
#, c-format
msgid " error severity: %x\n"
msgstr " sévérité d'erreur: %x\n"
-#: vms-alpha.c:6222
+#: vms-alpha.c:6235
#, c-format
msgid " entity name : %.*s\n"
msgstr " nom d'entité : %.*s\n"
-#: vms-alpha.c:6224
+#: vms-alpha.c:6241
#, c-format
msgid " object name : %.*s\n"
msgstr " nom d'objet : %.*s\n"
-#: vms-alpha.c:6227
+#: vms-alpha.c:6250
#, c-format
msgid " binary ident : 0x%08x\n"
msgstr " ident binaire : 0x%08x\n"
-#: vms-alpha.c:6230
+#: vms-alpha.c:6254
#, c-format
msgid " ascii ident : %.*s\n"
msgstr " ident ascii : %.*s\n"
-#: vms-alpha.c:6238
+#: vms-alpha.c:6266
#, c-format
msgid "SYMG - Universal symbol definition\n"
msgstr "SYMG - Définition de symbole universel\n"
-#: vms-alpha.c:6242
+#: vms-alpha.c:6270
#, c-format
msgid " symbol vector offset: 0x%08x\n"
msgstr " offset vecteur symbole: 0x%08x\n"
-#: vms-alpha.c:6244
+#: vms-alpha.c:6272
#, c-format
msgid " entry point: 0x%08x\n"
msgstr " point d'entrée: 0x%08x\n"
-#: vms-alpha.c:6246
+#: vms-alpha.c:6274
#, c-format
msgid " proc descr : 0x%08x\n"
msgstr " descr proc : 0x%08x\n"
-#: vms-alpha.c:6248
+#: vms-alpha.c:6276
#, c-format
msgid " psect index: %u\n"
msgstr " index psect: %u\n"
-#: vms-alpha.c:6259
+#: vms-alpha.c:6290
#, c-format
msgid "SYMV - Vectored symbol definition\n"
msgstr "SYMV - Définition symbole vectorisé\n"
-#: vms-alpha.c:6263
+#: vms-alpha.c:6294
#, c-format
msgid " vector : 0x%08x\n"
msgstr " vecteur : 0x%08x\n"
-#: vms-alpha.c:6265 vms-alpha.c:6284
+#: vms-alpha.c:6296 vms-alpha.c:6319
#, c-format
msgid " psect offset: %u\n"
msgstr " offset psect: %u\n"
-#: vms-alpha.c:6278
+#: vms-alpha.c:6313
#, c-format
msgid "SYMM - Global symbol definition with version\n"
msgstr "SYMM - Définition de symbole globale avec version\n"
-#: vms-alpha.c:6282
+#: vms-alpha.c:6317
#, c-format
msgid " version mask: 0x%08x\n"
msgstr " masque de version: 0x%08x\n"
-#: vms-alpha.c:6293
+#: vms-alpha.c:6330
#, c-format
msgid "unhandled egsd entry type %u\n"
msgstr "type d'entrée egsd %u non supporté\n"
-#: vms-alpha.c:6328
+#: vms-alpha.c:6369
#, c-format
msgid " linkage index: %u, replacement insn: 0x%08x\n"
msgstr " index de liaison: %u, instruction de remplacement: 0x%08x\n"
-#: vms-alpha.c:6332
+#: vms-alpha.c:6373
#, c-format
msgid " psect idx 1: %u, offset 1: 0x%08x %08x\n"
msgstr " index psect 1: %u, offset 1: 0x%08x %08x\n"
-#: vms-alpha.c:6337
+#: vms-alpha.c:6378
#, c-format
msgid " psect idx 2: %u, offset 2: 0x%08x %08x\n"
msgstr " index psect 2: %u, offset 2: 0x%08x %08x\n"
-#: vms-alpha.c:6343
+#: vms-alpha.c:6384
#, c-format
msgid " psect idx 3: %u, offset 3: 0x%08x %08x\n"
msgstr " index psect 3: %u, offset 3: 0x%08x %08x\n"
-#: vms-alpha.c:6348
+#: vms-alpha.c:6389
#, c-format
msgid " global name: %.*s\n"
msgstr " nom global: %.*s\n"
-#: vms-alpha.c:6359
+#: vms-alpha.c:6401
#, c-format
-msgid " %s (len=%u+%u):\n"
-msgstr " %s (long=%u+%u):\n"
+msgid " %s (len=%u):\n"
+msgstr " %s (long=%u):\n"
-#: vms-alpha.c:6381
+#: vms-alpha.c:6424
#, c-format
-msgid " (type: %3u, size: 4+%3u): "
-msgstr " (type: %3u, taille: 4+%3u): "
+msgid " (type: %3u, size: %3u): "
+msgstr " (type: %3u, taille: %3u): "
-#: vms-alpha.c:6385
+#: vms-alpha.c:6430
#, c-format
msgid "STA_GBL (stack global) %.*s\n"
-msgstr "STA_GBL (pile globals) %.*s\n"
+msgstr "STA_GBL (empile globals) %.*s\n"
-#: vms-alpha.c:6389
+#: vms-alpha.c:6434
#, c-format
-msgid "STA_LW (stack longword) 0x%08x\n"
-msgstr "STA_LW (pile mot long) 0x%08x\n"
+msgid "STA_LW (stack longword)"
+msgstr "STA_LW (empile mot long)"
-#: vms-alpha.c:6393
+#: vms-alpha.c:6440
#, c-format
-msgid "STA_QW (stack quadword) 0x%08x %08x\n"
-msgstr "STA_QW (pile quad mot) 0x%08x %08x\n"
+msgid "STA_QW (stack quadword)"
+msgstr "STO_QW (empile quad mot)"
-#: vms-alpha.c:6398
+#: vms-alpha.c:6447
#, c-format
msgid "STA_PQ (stack psect base + offset)\n"
-msgstr "STA_PQ (base pile psect + offset)\n"
+msgstr "STA_PQ (empile base psect + offset)\n"
-#: vms-alpha.c:6400
+#: vms-alpha.c:6450
#, c-format
msgid " psect: %u, offset: 0x%08x %08x\n"
msgstr " psect: %u, offset: 0x%08x %08x\n"
-#: vms-alpha.c:6406
+#: vms-alpha.c:6456
#, c-format
msgid "STA_LI (stack literal)\n"
-msgstr "STA_LI (pile literale)\n"
+msgstr "STA_LI (empile littéral)\n"
-#: vms-alpha.c:6409
+#: vms-alpha.c:6459
#, c-format
msgid "STA_MOD (stack module)\n"
-msgstr "STA_MOD (pile module)\n"
+msgstr "STA_MOD (empile module)\n"
-#: vms-alpha.c:6412
+#: vms-alpha.c:6462
#, c-format
msgid "STA_CKARG (compare procedure argument)\n"
msgstr "STA_CKARG (compare les arguments de la procédure)\n"
-#: vms-alpha.c:6416
+#: vms-alpha.c:6466
#, c-format
msgid "STO_B (store byte)\n"
msgstr "STO_B (stocke octet)\n"
-#: vms-alpha.c:6419
+#: vms-alpha.c:6469
#, c-format
msgid "STO_W (store word)\n"
msgstr "STO_W (stocke mot)\n"
-#: vms-alpha.c:6422
+#: vms-alpha.c:6472
#, c-format
msgid "STO_LW (store longword)\n"
msgstr "STO_LW (stocke mot long)\n"
-#: vms-alpha.c:6425
+#: vms-alpha.c:6475
#, c-format
msgid "STO_QW (store quadword)\n"
msgstr "STO_QW (stocke quad mot)\n"
-#: vms-alpha.c:6431
+#: vms-alpha.c:6482
#, c-format
msgid "STO_IMMR (store immediate repeat) %u bytes\n"
msgstr "STO_IMMR (stock répétition immédiate) %u octets\n"
-#: vms-alpha.c:6438
+#: vms-alpha.c:6491
#, c-format
msgid "STO_GBL (store global) %.*s\n"
msgstr "STO_GBL (stocke globale) %.*s\n"
-#: vms-alpha.c:6442
+#: vms-alpha.c:6496
#, c-format
msgid "STO_CA (store code address) %.*s\n"
msgstr "STO_CA (stock adresse code) %.*s\n"
-#: vms-alpha.c:6446
+#: vms-alpha.c:6500
#, c-format
msgid "STO_RB (store relative branch)\n"
msgstr "STO_RB (stocke branche relative)\n"
-#: vms-alpha.c:6449
+#: vms-alpha.c:6503
#, c-format
msgid "STO_AB (store absolute branch)\n"
msgstr "STO_AB (stocke branche absolue)\n"
-#: vms-alpha.c:6452
+#: vms-alpha.c:6506
#, c-format
msgid "STO_OFF (store offset to psect)\n"
msgstr "STO_OFF (stocke offset de psect)\n"
-#: vms-alpha.c:6458
+#: vms-alpha.c:6513
#, c-format
msgid "STO_IMM (store immediate) %u bytes\n"
msgstr "STO_IMM (stocke immediat) %u octets\n"
-#: vms-alpha.c:6465
+#: vms-alpha.c:6522
#, c-format
msgid "STO_GBL_LW (store global longword) %.*s\n"
msgstr "STO_GBL_LW (stocke mot long global) %.*s\n"
-#: vms-alpha.c:6469
+#: vms-alpha.c:6526
#, c-format
msgid "STO_OFF (store LP with procedure signature)\n"
msgstr "STO_OFF (stocke LP avec la signature de la procédure)\n"
-#: vms-alpha.c:6472
+#: vms-alpha.c:6529
#, c-format
msgid "STO_BR_GBL (store branch global) *todo*\n"
msgstr "STO_BR_GBL (stocke branche globale) *todo*\n"
-#: vms-alpha.c:6475
+#: vms-alpha.c:6532
#, c-format
msgid "STO_BR_PS (store branch psect + offset) *todo*\n"
msgstr "STO_BR_PS (stocke branche psect + offset) *todo*\n"
-#: vms-alpha.c:6479
+#: vms-alpha.c:6536
#, c-format
msgid "OPR_NOP (no-operation)\n"
-msgstr "OPR_NOP (pas d'operation)\n"
+msgstr "OPR_NOP (pas d'opération)\n"
-#: vms-alpha.c:6482
+#: vms-alpha.c:6539
#, c-format
msgid "OPR_ADD (add)\n"
msgstr "OPR_ADD (ajout)\n"
-#: vms-alpha.c:6485
+#: vms-alpha.c:6542
#, c-format
msgid "OPR_SUB (subtract)\n"
msgstr "OPR_SUB (soustraction)\n"
-#: vms-alpha.c:6488
+#: vms-alpha.c:6545
#, c-format
msgid "OPR_MUL (multiply)\n"
msgstr "OPR_MUL (multiplication)\n"
-#: vms-alpha.c:6491
+#: vms-alpha.c:6548
#, c-format
msgid "OPR_DIV (divide)\n"
msgstr "OPR_DIV (division)\n"
-#: vms-alpha.c:6494
+#: vms-alpha.c:6551
#, c-format
msgid "OPR_AND (logical and)\n"
msgstr "OPR_AND (et logique)\n"
-#: vms-alpha.c:6497
+#: vms-alpha.c:6554
#, c-format
msgid "OPR_IOR (logical inclusive or)\n"
msgstr "OPR_IOR (ou inclusif logique)\n"
-#: vms-alpha.c:6500
+#: vms-alpha.c:6557
#, c-format
msgid "OPR_EOR (logical exclusive or)\n"
msgstr "OPR_EOR (ou exclusif logique)\n"
-#: vms-alpha.c:6503
+#: vms-alpha.c:6560
#, c-format
msgid "OPR_NEG (negate)\n"
msgstr "OPR_NEG (négation)\n"
-#: vms-alpha.c:6506
+#: vms-alpha.c:6563
#, c-format
msgid "OPR_COM (complement)\n"
msgstr "OPR_COM (complément)\n"
-#: vms-alpha.c:6509
+#: vms-alpha.c:6566
#, c-format
msgid "OPR_INSV (insert field)\n"
msgstr "OPR_INSV (insertion champ)\n"
-#: vms-alpha.c:6512
+#: vms-alpha.c:6569
#, c-format
msgid "OPR_ASH (arithmetic shift)\n"
msgstr "OPR_ASH (décalage arithmetique)\n"
-#: vms-alpha.c:6515
+#: vms-alpha.c:6572
#, c-format
msgid "OPR_USH (unsigned shift)\n"
msgstr "OPR_USH (décalage non signé)\n"
-#: vms-alpha.c:6518
+#: vms-alpha.c:6575
#, c-format
msgid "OPR_ROT (rotate)\n"
msgstr "OPR_ROT (rotation)\n"
-#: vms-alpha.c:6521
+#: vms-alpha.c:6578
#, c-format
msgid "OPR_SEL (select)\n"
msgstr "OPR_SEL (selection)\n"
-#: vms-alpha.c:6524
+#: vms-alpha.c:6581
#, c-format
msgid "OPR_REDEF (redefine symbol to curr location)\n"
msgstr "OPR_REDEF (redéfini le symbole à la position actuelle)\n"
-#: vms-alpha.c:6527
+#: vms-alpha.c:6584
#, c-format
msgid "OPR_REDEF (define a literal)\n"
msgstr "OPR_REDEF (définir un litéral)\n"
-#: vms-alpha.c:6531
+#: vms-alpha.c:6588
#, c-format
msgid "STC_LP (store cond linkage pair)\n"
msgstr "STC_LP (stocke pair de liaison cond)\n"
-#: vms-alpha.c:6535
+#: vms-alpha.c:6592
#, c-format
msgid "STC_LP_PSB (store cond linkage pair + signature)\n"
msgstr "STC_LP_PSB (stocke pair de liaison cond + signature)\n"
-#: vms-alpha.c:6537
+#: vms-alpha.c:6596
#, c-format
msgid " linkage index: %u, procedure: %.*s\n"
msgstr " index liaison: %u, procédure: %.*s\n"
-#: vms-alpha.c:6540
+#: vms-alpha.c:6603
#, c-format
msgid " signature: %.*s\n"
msgstr " signature: %.*s\n"
-#: vms-alpha.c:6543
+#: vms-alpha.c:6609
#, c-format
msgid "STC_GBL (store cond global)\n"
msgstr "STC_GBL (stocke cond globale)\n"
-#: vms-alpha.c:6545
+#: vms-alpha.c:6612
#, c-format
msgid " linkage index: %u, global: %.*s\n"
msgstr " index liaison: %u, globale: %.*s\n"
-#: vms-alpha.c:6549
+#: vms-alpha.c:6617
#, c-format
msgid "STC_GCA (store cond code address)\n"
msgstr "STC_GCA (stocke adresse code cond)\n"
-#: vms-alpha.c:6551
+#: vms-alpha.c:6620
#, c-format
msgid " linkage index: %u, procedure name: %.*s\n"
msgstr " index liaison: %u, nom procédure: %.*s\n"
-#: vms-alpha.c:6555
+#: vms-alpha.c:6625
#, c-format
msgid "STC_PS (store cond psect + offset)\n"
msgstr "STC_PS (stocke psect cond + offset)\n"
-#: vms-alpha.c:6558
+#: vms-alpha.c:6629
#, c-format
msgid " linkage index: %u, psect: %u, offset: 0x%08x %08x\n"
msgstr " index liaison: %u, psect: %u, offset: 0x%08x %08x\n"
-#: vms-alpha.c:6565
+#: vms-alpha.c:6636
#, c-format
msgid "STC_NOP_GBL (store cond NOP at global addr)\n"
msgstr "STC_NOP_GBL (stocke NOP cond à l'adresse globale)\n"
-#: vms-alpha.c:6569
+#: vms-alpha.c:6640
#, c-format
msgid "STC_NOP_PS (store cond NOP at psect + offset)\n"
msgstr "STC_NOP_PS (stocke NOP cond à psect + offset)\n"
-#: vms-alpha.c:6573
+#: vms-alpha.c:6644
#, c-format
msgid "STC_BSR_GBL (store cond BSR at global addr)\n"
msgstr "STC_BSR_GBL (stocke BSR cond à l'adresse globale)\n"
-#: vms-alpha.c:6577
+#: vms-alpha.c:6648
#, c-format
msgid "STC_BSR_PS (store cond BSR at psect + offset)\n"
msgstr "STC_BSR_PS (stocke BSR cond à psect + offset)\n"
-#: vms-alpha.c:6581
+#: vms-alpha.c:6652
#, c-format
msgid "STC_LDA_GBL (store cond LDA at global addr)\n"
msgstr "STC_LDA_GBL (stocke LDA cond à l'adresse globale)\n"
-#: vms-alpha.c:6585
+#: vms-alpha.c:6656
#, c-format
msgid "STC_LDA_PS (store cond LDA at psect + offset)\n"
msgstr "STC_LDA_PS (stocke LDA cond à psect + offset)\n"
-#: vms-alpha.c:6589
+#: vms-alpha.c:6660
#, c-format
msgid "STC_BOH_GBL (store cond BOH at global addr)\n"
msgstr "STC_BOH_GBL (stocke BOH cond à l'adresse globale)\n"
-#: vms-alpha.c:6593
+#: vms-alpha.c:6664
#, c-format
msgid "STC_BOH_PS (store cond BOH at psect + offset)\n"
msgstr "STC_BOH_PS (stocke BOH cond à psect + offset)\n"
-#: vms-alpha.c:6598
+#: vms-alpha.c:6669
#, c-format
msgid "STC_NBH_GBL (store cond or hint at global addr)\n"
msgstr "STC_NBH_GBL (stocke cond ou suggestion à l'adresse globale)\n"
-#: vms-alpha.c:6602
+#: vms-alpha.c:6673
#, c-format
msgid "STC_NBH_PS (store cond or hint at psect + offset)\n"
msgstr "STC_NBH_PS (stocke cond or suggestion à psect + offset)\n"
-#: vms-alpha.c:6606
+#: vms-alpha.c:6677
#, c-format
msgid "CTL_SETRB (set relocation base)\n"
msgstr "CTL_SETRB (fixe la base du réadressage)\n"
-#: vms-alpha.c:6612
+#: vms-alpha.c:6683
#, c-format
msgid "CTL_AUGRB (augment relocation base) %u\n"
msgstr "CTL_AUGRB (augmente la base du réadressage) %u\n"
-#: vms-alpha.c:6616
+#: vms-alpha.c:6688
#, c-format
msgid "CTL_DFLOC (define location)\n"
msgstr "CTL_DFLOC (définir position)\n"
-#: vms-alpha.c:6619
+#: vms-alpha.c:6691
#, c-format
msgid "CTL_STLOC (set location)\n"
msgstr "CTL_STLOC (fixer position)\n"
-#: vms-alpha.c:6622
+#: vms-alpha.c:6694
#, c-format
msgid "CTL_STKDL (stack defined location)\n"
msgstr "CTL_STKDL (position définie dans la pile)\n"
-#: vms-alpha.c:6625 vms-alpha.c:7049 vms-alpha.c:7175
+#: vms-alpha.c:6697 vms-alpha.c:7140 vms-alpha.c:7301
#, c-format
msgid "*unhandled*\n"
msgstr "*non pris en charge*\n"
-#: vms-alpha.c:6655 vms-alpha.c:6694
+#: vms-alpha.c:6727 vms-alpha.c:6766
#, c-format
msgid "cannot read GST record length\n"
msgstr "impossible de lire la longueur de l'enregistrement GST\n"
#. Ill-formed.
-#: vms-alpha.c:6676
+#: vms-alpha.c:6748
#, c-format
msgid "cannot find EMH in first GST record\n"
msgstr "impossible de trouver le EMH dans le premier enregistrement GST\n"
-#: vms-alpha.c:6702
+#: vms-alpha.c:6774
#, c-format
msgid "cannot read GST record header\n"
msgstr "impossible de lire l'en-tête de l'enregistrement GST\n"
-#: vms-alpha.c:6715
+#: vms-alpha.c:6787
#, c-format
msgid " corrupted GST\n"
msgstr " GST corrompu\n"
-#: vms-alpha.c:6723
+#: vms-alpha.c:6795
#, c-format
msgid "cannot read GST record\n"
msgstr "ne peut lire l'enregistrement GST\n"
-#: vms-alpha.c:6752
+#: vms-alpha.c:6824
#, c-format
msgid " unhandled EOBJ record type %u\n"
msgstr " type d'enregistrement EOBJ %u non supporté\n"
-#: vms-alpha.c:6776
+#: vms-alpha.c:6849
#, c-format
msgid " bitcount: %u, base addr: 0x%08x\n"
msgstr " décompte des bits: %u, adr base: 0x%08x\n"
-#: vms-alpha.c:6790
+#: vms-alpha.c:6863
#, c-format
msgid " bitmap: 0x%08x (count: %u):\n"
msgstr " carte des bits: 0x%08x (occurrence: %u):\n"
-#: vms-alpha.c:6797
+#: vms-alpha.c:6870
#, c-format
msgid " %08x"
msgstr " %08x"
-#: vms-alpha.c:6823
+#: vms-alpha.c:6897
#, c-format
msgid " image %u (%u entries)\n"
msgstr " image %u (%u entrées)\n"
-#: vms-alpha.c:6829
+#: vms-alpha.c:6903
#, c-format
msgid " offset: 0x%08x, val: 0x%08x\n"
msgstr " offset: 0x%08x, val: 0x%08x\n"
-#: vms-alpha.c:6851
+#: vms-alpha.c:6926
#, c-format
msgid " image %u (%u entries), offsets:\n"
msgstr " image %u (%u entrées), offsets:\n"
-#: vms-alpha.c:6858
+#: vms-alpha.c:6933
#, c-format
msgid " 0x%08x"
msgstr " 0x%08x"
#. 64 bits.
-#: vms-alpha.c:6980
+#: vms-alpha.c:7059
#, c-format
msgid "64 bits *unhandled*\n"
msgstr "64 bits *non supporté*\n"
-#: vms-alpha.c:6985
+#: vms-alpha.c:7064
#, c-format
msgid "class: %u, dtype: %u, length: %u, pointer: 0x%08x\n"
msgstr "classe: %u, dtype: %u, longueur: %u, pointeur: 0x%08x\n"
-#: vms-alpha.c:6996
+#: vms-alpha.c:7075
#, c-format
msgid "non-contiguous array of %s\n"
msgstr "table de %s non contiguë\n"
-#: vms-alpha.c:7001
+#: vms-alpha.c:7082
#, c-format
msgid "dimct: %u, aflags: 0x%02x, digits: %u, scale: %u\n"
msgstr "dimct: %u, aflags: 0x%02x, digits: %u, échelle: %u\n"
-#: vms-alpha.c:7006
+#: vms-alpha.c:7087
#, c-format
msgid "arsize: %u, a0: 0x%08x\n"
msgstr "arsize: %u, a0: 0x%08x\n"
-#: vms-alpha.c:7010
+#: vms-alpha.c:7091
#, c-format
msgid "Strides:\n"
msgstr "Pas:\n"
-#: vms-alpha.c:7020
+#: vms-alpha.c:7105
#, c-format
msgid "Bounds:\n"
msgstr "Limites:\n"
-#: vms-alpha.c:7026
+#: vms-alpha.c:7112
#, c-format
msgid "[%u]: Lower: %u, upper: %u\n"
msgstr "[%u]: Inférieure: %u, supérieure: %u\n"
-#: vms-alpha.c:7038
+#: vms-alpha.c:7126
#, c-format
msgid "unaligned bit-string of %s\n"
msgstr "chaine de bits de %s désalignée\n"
-#: vms-alpha.c:7043
+#: vms-alpha.c:7133
#, c-format
msgid "base: %u, pos: %u\n"
msgstr "base: %u, pos: %u\n"
-#: vms-alpha.c:7064
+#: vms-alpha.c:7159
#, c-format
msgid "vflags: 0x%02x, value: 0x%08x "
msgstr "vflags: 0x%02x, valeur: 0x%08x "
-#: vms-alpha.c:7070
+#: vms-alpha.c:7166
#, c-format
msgid "(no value)\n"
msgstr "(pas de valeur)\n"
-#: vms-alpha.c:7073
+#: vms-alpha.c:7169
#, c-format
msgid "(not active)\n"
msgstr "(pas active)\n"
-#: vms-alpha.c:7076
+#: vms-alpha.c:7172
#, c-format
msgid "(not allocated)\n"
msgstr "(pas allouée)\n"
-#: vms-alpha.c:7079
+#: vms-alpha.c:7175
#, c-format
msgid "(descriptor)\n"
msgstr "(descripteur)\n"
-#: vms-alpha.c:7083
+#: vms-alpha.c:7180
#, c-format
msgid "(trailing value)\n"
msgstr "(valeur postérieure)\n"
-#: vms-alpha.c:7086
+#: vms-alpha.c:7183
#, c-format
msgid "(value spec follows)\n"
msgstr "(spécificités de la valeur suivent)\n"
-#: vms-alpha.c:7089
+#: vms-alpha.c:7186
#, c-format
msgid "(at bit offset %u)\n"
msgstr "(à l'offset de bit %u)\n"
-#: vms-alpha.c:7093
+#: vms-alpha.c:7190
#, c-format
msgid "(reg: %u, disp: %u, indir: %u, kind: "
msgstr "(reg: %u, aff: %u, indir: %u, type: "
-#: vms-alpha.c:7100
+#: vms-alpha.c:7197
msgid "literal"
msgstr "litérale"
-#: vms-alpha.c:7103
+#: vms-alpha.c:7200
msgid "address"
msgstr "adresse"
-#: vms-alpha.c:7106
+#: vms-alpha.c:7203
msgid "desc"
msgstr "desc"
-#: vms-alpha.c:7109
+#: vms-alpha.c:7206
msgid "reg"
msgstr "reg"
-#: vms-alpha.c:7126
+#: vms-alpha.c:7227
#, c-format
msgid "len: %2u, kind: %2u "
msgstr "long: %2u, type: %2u "
-#: vms-alpha.c:7132
+#: vms-alpha.c:7235
#, c-format
msgid "atomic, type=0x%02x %s\n"
msgstr "atomique, type=0x%02x %s\n"
-#: vms-alpha.c:7136
+#: vms-alpha.c:7240
#, c-format
msgid "indirect, defined at 0x%08x\n"
msgstr "indirect, défini à 0x%08x\n"
-#: vms-alpha.c:7140
+#: vms-alpha.c:7244
#, c-format
msgid "typed pointer\n"
msgstr "pointeur typé\n"
-#: vms-alpha.c:7144
+#: vms-alpha.c:7248
#, c-format
msgid "pointer\n"
msgstr "pointeur\n"
-#: vms-alpha.c:7152
+#: vms-alpha.c:7259
#, c-format
msgid "array, dim: %u, bitmap: "
msgstr "tableau, dim: %u, bitmpa: "
-#: vms-alpha.c:7159
+#: vms-alpha.c:7274
#, c-format
msgid "array descriptor:\n"
msgstr "descripteur de tableau:\n"
-#: vms-alpha.c:7166
+#: vms-alpha.c:7285
#, c-format
msgid "type spec for element:\n"
msgstr "spec de type pour élément:\n"
-#: vms-alpha.c:7168
+#: vms-alpha.c:7287
#, c-format
msgid "type spec for subscript %u:\n"
msgstr "spec de type pour l'indice %u:\n"
-#: vms-alpha.c:7186
+#: vms-alpha.c:7312
#, c-format
msgid "Debug symbol table:\n"
msgstr "Table des symboles de debug:\n"
-#: vms-alpha.c:7197
+#: vms-alpha.c:7323
#, c-format
msgid "cannot read DST header\n"
msgstr "impossible de lire l'en-tête DST\n"
-#: vms-alpha.c:7203
+#: vms-alpha.c:7329
#, c-format
msgid " type: %3u, len: %3u (at 0x%08x): "
msgstr " type: %3u, long: %3u (à 0x%08x): "
-#: vms-alpha.c:7217
+#: vms-alpha.c:7346
#, c-format
msgid "cannot read DST symbol\n"
msgstr "ne peut lire le symbole DST\n"
-#: vms-alpha.c:7260
+#: vms-alpha.c:7390
#, c-format
msgid "standard data: %s\n"
msgstr "données standards: %s\n"
-#: vms-alpha.c:7263 vms-alpha.c:7351
+#: vms-alpha.c:7393 vms-alpha.c:7516
#, c-format
msgid " name: %.*s\n"
msgstr " nom: %.*s\n"
-#: vms-alpha.c:7270
+#: vms-alpha.c:7400
#, c-format
msgid "modbeg\n"
msgstr "début module\n"
-#: vms-alpha.c:7272
+#: vms-alpha.c:7404
#, c-format
msgid " flags: %d, language: %u, major: %u, minor: %u\n"
msgstr " fanions: %d, language: %u, majeur: %u, mineur: %u\n"
-#: vms-alpha.c:7278 vms-alpha.c:7552
+#: vms-alpha.c:7414 vms-alpha.c:7780
#, c-format
msgid " module name: %.*s\n"
msgstr " nom du module: %.*s\n"
-#: vms-alpha.c:7281
+#: vms-alpha.c:7421
#, c-format
msgid " compiler : %.*s\n"
msgstr " compilateur : %.*s\n"
-#: vms-alpha.c:7286
+#: vms-alpha.c:7428
#, c-format
msgid "modend\n"
msgstr "fin module\n"
-#: vms-alpha.c:7293
+#: vms-alpha.c:7435
msgid "rtnbeg\n"
msgstr "début rtn\n"
-#: vms-alpha.c:7295
+#: vms-alpha.c:7439
#, c-format
msgid " flags: %u, address: 0x%08x, pd-address: 0x%08x\n"
msgstr " fanions: %u, adresse: 0x%08x, pd-adresse: 0x%08x\n"
-#: vms-alpha.c:7300
+#: vms-alpha.c:7448
#, c-format
msgid " routine name: %.*s\n"
msgstr " nom routine : %.*s\n"
-#: vms-alpha.c:7308
+#: vms-alpha.c:7459
#, c-format
msgid "rtnend: size 0x%08x\n"
msgstr "fin rtn: taille 0x%08x\n"
-#: vms-alpha.c:7316
+#: vms-alpha.c:7469
#, c-format
msgid "prolog: bkpt address 0x%08x\n"
msgstr "prologue: adresse bkpt 0x%08x\n"
-#: vms-alpha.c:7325
+#: vms-alpha.c:7479
#, c-format
msgid "epilog: flags: %u, count: %u\n"
msgstr "épilogue: fanions: %u, nombre: %u\n"
-#: vms-alpha.c:7335
+#: vms-alpha.c:7494
#, c-format
msgid "blkbeg: address: 0x%08x, name: %.*s\n"
msgstr "début blk: adresse: 0x%08x, nom: %.*s\n"
-#: vms-alpha.c:7344
+#: vms-alpha.c:7506
#, c-format
msgid "blkend: size: 0x%08x\n"
msgstr "fin blk: taille: 0x%08x\n"
-#: vms-alpha.c:7350
+#: vms-alpha.c:7512
#, c-format
msgid "typspec (len: %u)\n"
msgstr "typspec (long: %u)\n"
-#: vms-alpha.c:7357
+#: vms-alpha.c:7528
#, c-format
msgid "septyp, name: %.*s\n"
msgstr "septyp, nom: %.*s\n"
-#: vms-alpha.c:7366
+#: vms-alpha.c:7544
#, c-format
msgid "recbeg: name: %.*s\n"
msgstr "début rec: nom: %.*s\n"
-#: vms-alpha.c:7368
+#: vms-alpha.c:7548
#, c-format
msgid " len: %u bits\n"
msgstr " long: %u bits\n"
-#: vms-alpha.c:7373
+#: vms-alpha.c:7554
#, c-format
msgid "recend\n"
msgstr "fin rec\n"
-#: vms-alpha.c:7377
+#: vms-alpha.c:7559
#, c-format
msgid "enumbeg, len: %u, name: %.*s\n"
msgstr "début énumération, long: %u, nom: %.*s\n"
-#: vms-alpha.c:7381
+#: vms-alpha.c:7565
#, c-format
msgid "enumelt, name: %.*s\n"
msgstr "énumération éléments, nom: %.*s\n"
-#: vms-alpha.c:7385
+#: vms-alpha.c:7571
#, c-format
msgid "enumend\n"
msgstr "fin énumération\n"
-#: vms-alpha.c:7390
+#: vms-alpha.c:7578
#, c-format
msgid "label, name: %.*s\n"
msgstr "étiquette, nom: %.*s\n"
-#: vms-alpha.c:7392
+#: vms-alpha.c:7581
#, c-format
msgid " address: 0x%08x\n"
msgstr " adresse: 0x%08x\n"
-#: vms-alpha.c:7402
+#: vms-alpha.c:7593
#, c-format
msgid "discontiguous range (nbr: %u)\n"
msgstr "plage discontinue (nbr: %u)\n"
-#: vms-alpha.c:7405
+#: vms-alpha.c:7600
#, c-format
msgid " address: 0x%08x, size: %u\n"
msgstr " adresse: 0x%08x, taille: %u\n"
-#: vms-alpha.c:7415
+#: vms-alpha.c:7611
#, c-format
msgid "line num (len: %u)\n"
msgstr "num ligne (long: %u)\n"
-#: vms-alpha.c:7432
+#: vms-alpha.c:7630
#, c-format
msgid "delta_pc_w %u\n"
msgstr "delta_pc_w %u\n"
-#: vms-alpha.c:7439
+#: vms-alpha.c:7639
#, c-format
msgid "incr_linum(b): +%u\n"
msgstr "incr_linum(b): +%u\n"
-#: vms-alpha.c:7445
+#: vms-alpha.c:7647
#, c-format
msgid "incr_linum_w: +%u\n"
msgstr "incr_linum_w: +%u\n"
-#: vms-alpha.c:7451
+#: vms-alpha.c:7655
#, c-format
msgid "incr_linum_l: +%u\n"
msgstr "incr_linum_l: +%u\n"
-#: vms-alpha.c:7457
+#: vms-alpha.c:7663
#, c-format
msgid "set_line_num(w) %u\n"
msgstr "set_line_num(w) %u\n"
-#: vms-alpha.c:7462
+#: vms-alpha.c:7670
#, c-format
msgid "set_line_num_b %u\n"
msgstr "set_line_num_b %u\n"
-#: vms-alpha.c:7467
+#: vms-alpha.c:7677
#, c-format
msgid "set_line_num_l %u\n"
msgstr "set_line_num_l %u\n"
-#: vms-alpha.c:7472
+#: vms-alpha.c:7684
#, c-format
msgid "set_abs_pc: 0x%08x\n"
msgstr "set_abs_pc: 0x%08x\n"
-#: vms-alpha.c:7476
+#: vms-alpha.c:7690
#, c-format
msgid "delta_pc_l: +0x%08x\n"
msgstr "delta_pc_l: +0x%08x\n"
-#: vms-alpha.c:7481
+#: vms-alpha.c:7697
#, c-format
msgid "term(b): 0x%02x"
msgstr "term(b): 0x%02x"
-#: vms-alpha.c:7483
+#: vms-alpha.c:7699
#, c-format
msgid " pc: 0x%08x\n"
msgstr " pc: 0x%08x\n"
-#: vms-alpha.c:7488
+#: vms-alpha.c:7706
#, c-format
msgid "term_w: 0x%04x"
msgstr "term_w: 0x%04x"
-#: vms-alpha.c:7490
+#: vms-alpha.c:7708
#, c-format
msgid " pc: 0x%08x\n"
msgstr " pc: 0x%08x\n"
-#: vms-alpha.c:7496
+#: vms-alpha.c:7714
#, c-format
msgid "delta pc +%-4d"
msgstr "delta pc +%-4d"
-#: vms-alpha.c:7500
+#: vms-alpha.c:7718
#, c-format
msgid " pc: 0x%08x line: %5u\n"
msgstr " pc: 0x%08x ligne: %5u\n"
-#: vms-alpha.c:7505
+#: vms-alpha.c:7723
#, c-format
msgid " *unhandled* cmd %u\n"
msgstr " cmd %u *non gérée*\n"
-#: vms-alpha.c:7520
+#: vms-alpha.c:7738
#, c-format
msgid "source (len: %u)\n"
msgstr "source (long: %u)\n"
-#: vms-alpha.c:7535
+#: vms-alpha.c:7757
#, c-format
msgid " declfile: len: %u, flags: %u, fileid: %u\n"
msgstr " declfile: long: %u, fanions: %u, id fichier: %u\n"
-#: vms-alpha.c:7540
+#: vms-alpha.c:7762
#, 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:7549
+#: vms-alpha.c:7774
#, c-format
msgid " filename : %.*s\n"
msgstr " nom fichier: %.*s\n"
-#: vms-alpha.c:7558
+#: vms-alpha.c:7790
#, c-format
msgid " setfile %u\n"
msgstr " setfile %u\n"
-#: vms-alpha.c:7563 vms-alpha.c:7568
+#: vms-alpha.c:7797 vms-alpha.c:7804
#, c-format
msgid " setrec %u\n"
msgstr " setrec %u\n"
-#: vms-alpha.c:7573 vms-alpha.c:7578
+#: vms-alpha.c:7811 vms-alpha.c:7818
#, c-format
msgid " setlnum %u\n"
msgstr " setlnum %u\n"
-#: vms-alpha.c:7583 vms-alpha.c:7588
+#: vms-alpha.c:7825 vms-alpha.c:7832
#, c-format
msgid " deflines %u\n"
msgstr " deflines %u\n"
-#: vms-alpha.c:7592
+#: vms-alpha.c:7836
#, c-format
msgid " formfeed\n"
msgstr " formfeed\n"
-#: vms-alpha.c:7596
+#: vms-alpha.c:7840
#, c-format
msgid " *unhandled* cmd %u\n"
msgstr " cmd %u *non gérée*\n"
-#: vms-alpha.c:7608
+#: vms-alpha.c:7852
#, c-format
msgid "*unhandled* dst type %u\n"
msgstr "type dst %u *non géré*\n"
-#: vms-alpha.c:7640
+#: vms-alpha.c:7884
#, c-format
msgid "cannot read EIHD\n"
msgstr "ne peut lire EIHD\n"
-#: vms-alpha.c:7644
+#: vms-alpha.c:7888
#, c-format
msgid "EIHD: (size: %u, nbr blocks: %u)\n"
msgstr "EIHD: (taille: %u, nbr blocs: %u)\n"
-#: vms-alpha.c:7648
+#: vms-alpha.c:7892
#, c-format
msgid " majorid: %u, minorid: %u\n"
msgstr " id majeur: %u, id mineur: %u\n"
-#: vms-alpha.c:7656
+#: vms-alpha.c:7900
msgid "executable"
msgstr "exécutable"
-#: vms-alpha.c:7659
+#: vms-alpha.c:7903
msgid "linkable image"
msgstr "image liable"
-#: vms-alpha.c:7666
+#: vms-alpha.c:7910
#, c-format
msgid " image type: %u (%s)"
msgstr " type image: %u (%s)"
-#: vms-alpha.c:7672
+#: vms-alpha.c:7916
msgid "native"
msgstr "natif"
-#: vms-alpha.c:7675
+#: vms-alpha.c:7919
msgid "CLI"
msgstr "CLI"
-#: vms-alpha.c:7682
+#: vms-alpha.c:7926
#, c-format
msgid ", subtype: %u (%s)\n"
msgstr ", sous-type: %u (%s)\n"
-#: vms-alpha.c:7689
+#: vms-alpha.c:7933
#, c-format
msgid " offsets: isd: %u, activ: %u, symdbg: %u, imgid: %u, patch: %u\n"
msgstr " offsets: isd: %u, actif: %u, debug symbol: %u, id image: %u, patch: %u\n"
-#: vms-alpha.c:7693
+#: vms-alpha.c:7937
#, c-format
msgid " fixup info rva: "
msgstr " correctif info rva: "
-#: vms-alpha.c:7695
+#: vms-alpha.c:7939
#, c-format
msgid ", symbol vector rva: "
msgstr ", vecteur de symbol rva: "
-#: vms-alpha.c:7698
+#: vms-alpha.c:7942
#, c-format
msgid ""
"\n"
@@ -7792,460 +7877,460 @@ msgstr ""
"\n"
" offset tableau version: %u\n"
-#: vms-alpha.c:7703
+#: vms-alpha.c:7947
#, c-format
msgid " img I/O count: %u, nbr channels: %u, req pri: %08x%08x\n"
msgstr " décompte E/S img: %u, nbr canaux: %u, priv req: %08x%08x\n"
-#: vms-alpha.c:7709
+#: vms-alpha.c:7953
#, c-format
msgid " linker flags: %08x:"
msgstr " fanions lieur: %08x:"
-#: vms-alpha.c:7740
+#: vms-alpha.c:7984
#, c-format
msgid " ident: 0x%08x, sysver: 0x%08x, match ctrl: %u, symvect_size: %u\n"
msgstr " ident: 0x%08x, ver sys: 0x%08x, apparier ctrl: %u, taille vectsym: %u\n"
-#: vms-alpha.c:7746
+#: vms-alpha.c:7990
#, c-format
msgid " BPAGE: %u"
msgstr " BPAGE: %u"
-#: vms-alpha.c:7753
+#: vms-alpha.c:7997
#, c-format
msgid ", ext fixup offset: %u, no_opt psect off: %u"
msgstr ", offset correctif étendu: %u, offset no_opt psect: %u"
-#: vms-alpha.c:7756
+#: vms-alpha.c:8000
#, c-format
msgid ", alias: %u\n"
msgstr ", alias: %u\n"
-#: vms-alpha.c:7764
+#: vms-alpha.c:8008
#, c-format
msgid "system version array information:\n"
msgstr "information sur table de version système:\n"
-#: vms-alpha.c:7768
+#: vms-alpha.c:8012
#, c-format
msgid "cannot read EIHVN header\n"
msgstr "ne peut lire l'en-tête EIHVN\n"
-#: vms-alpha.c:7778
+#: vms-alpha.c:8022
#, c-format
msgid "cannot read EIHVN version\n"
msgstr "ne peut lire la version EIHVN\n"
-#: vms-alpha.c:7781
+#: vms-alpha.c:8025
#, c-format
msgid " %02u "
msgstr " %02u "
-#: vms-alpha.c:7785
+#: vms-alpha.c:8029
msgid "BASE_IMAGE "
msgstr "BASE_IMAGE "
-#: vms-alpha.c:7788
+#: vms-alpha.c:8032
msgid "MEMORY_MANAGEMENT"
msgstr "MEMORY_MANAGEMENT"
-#: vms-alpha.c:7791
+#: vms-alpha.c:8035
msgid "IO "
msgstr "IO "
-#: vms-alpha.c:7794
+#: vms-alpha.c:8038
msgid "FILES_VOLUMES "
msgstr "FILES_VOLUMES "
-#: vms-alpha.c:7797
+#: vms-alpha.c:8041
msgid "PROCESS_SCHED "
msgstr "PROCESS_SCHED "
-#: vms-alpha.c:7800
+#: vms-alpha.c:8044
msgid "SYSGEN "
msgstr "SYSGEN "
-#: vms-alpha.c:7803
+#: vms-alpha.c:8047
msgid "CLUSTERS_LOCKMGR "
msgstr "CLUSTERS_LOCKMGR "
-#: vms-alpha.c:7806
+#: vms-alpha.c:8050
msgid "LOGICAL_NAMES "
msgstr "LOGICAL_NAMES "
-#: vms-alpha.c:7809
+#: vms-alpha.c:8053
msgid "SECURITY "
msgstr "SECURITY "
-#: vms-alpha.c:7812
+#: vms-alpha.c:8056
msgid "IMAGE_ACTIVATOR "
msgstr "IMAGE_ACTIVATOR "
-#: vms-alpha.c:7815
+#: vms-alpha.c:8059
msgid "NETWORKS "
msgstr "NETWORKS "
-#: vms-alpha.c:7818
+#: vms-alpha.c:8062
msgid "COUNTERS "
msgstr "COUNTERS "
-#: vms-alpha.c:7821
+#: vms-alpha.c:8065
msgid "STABLE "
msgstr "STABLE "
-#: vms-alpha.c:7824
+#: vms-alpha.c:8068
msgid "MISC "
msgstr "MISC "
-#: vms-alpha.c:7827
+#: vms-alpha.c:8071
msgid "CPU "
msgstr "CPU "
-#: vms-alpha.c:7830
+#: vms-alpha.c:8074
msgid "VOLATILE "
msgstr "VOLATILE "
-#: vms-alpha.c:7833
+#: vms-alpha.c:8077
msgid "SHELL "
msgstr "SHELL "
-#: vms-alpha.c:7836
+#: vms-alpha.c:8080
msgid "POSIX "
msgstr "POSIX "
-#: vms-alpha.c:7839
+#: vms-alpha.c:8083
msgid "MULTI_PROCESSING "
msgstr "MULTI_PROCESSING "
-#: vms-alpha.c:7842
+#: vms-alpha.c:8086
msgid "GALAXY "
msgstr "GALAXY "
-#: vms-alpha.c:7845
+#: vms-alpha.c:8089
msgid "*unknown* "
msgstr "*inconnu* "
-#: vms-alpha.c:7861 vms-alpha.c:8135
+#: vms-alpha.c:8105 vms-alpha.c:8379
#, c-format
msgid "cannot read EIHA\n"
msgstr "ne peut lire EIHA\n"
-#: vms-alpha.c:7864
+#: vms-alpha.c:8108
#, c-format
msgid "Image activation: (size=%u)\n"
msgstr "Activation de l'image: (taille=%u)\n"
-#: vms-alpha.c:7867
+#: vms-alpha.c:8111
#, c-format
msgid " First address : 0x%08x 0x%08x\n"
msgstr " Première adresse : 0x%08x 0x%08x\n"
-#: vms-alpha.c:7871
+#: vms-alpha.c:8115
#, c-format
msgid " Second address: 0x%08x 0x%08x\n"
msgstr " Deuxième adresse : 0x%08x 0x%08x\n"
-#: vms-alpha.c:7875
+#: vms-alpha.c:8119
#, c-format
msgid " Third address : 0x%08x 0x%08x\n"
msgstr " Troisième adresse: 0x%08x 0x%08x\n"
-#: vms-alpha.c:7879
+#: vms-alpha.c:8123
#, c-format
msgid " Fourth address: 0x%08x 0x%08x\n"
msgstr " Quatrième adresse: 0x%08x 0x%08x\n"
-#: vms-alpha.c:7883
+#: vms-alpha.c:8127
#, c-format
msgid " Shared image : 0x%08x 0x%08x\n"
msgstr " Image partagée : 0x%08x 0x%08x\n"
-#: vms-alpha.c:7894
+#: vms-alpha.c:8138
#, c-format
msgid "cannot read EIHI\n"
msgstr "ne peut lire EIHI\n"
-#: vms-alpha.c:7898
+#: vms-alpha.c:8142
#, c-format
msgid "Image identification: (major: %u, minor: %u)\n"
msgstr "Identification d'image: (majeur: %u, mineur: %u)\n"
-#: vms-alpha.c:7901
+#: vms-alpha.c:8145
#, c-format
msgid " image name : %.*s\n"
msgstr " nom de l'image : %.*s\n"
-#: vms-alpha.c:7903
+#: vms-alpha.c:8147
#, c-format
msgid " link time : %s\n"
msgstr " heure de liaison : %s\n"
-#: vms-alpha.c:7905
+#: vms-alpha.c:8149
#, c-format
msgid " image ident : %.*s\n"
msgstr " ident image : %.*s\n"
-#: vms-alpha.c:7907
+#: vms-alpha.c:8151
#, c-format
msgid " linker ident : %.*s\n"
msgstr " ident lieur : %.*s\n"
-#: vms-alpha.c:7909
+#: vms-alpha.c:8153
#, c-format
msgid " image build ident: %.*s\n"
msgstr " ident construction image: %.*s\n"
-#: vms-alpha.c:7919
+#: vms-alpha.c:8163
#, c-format
msgid "cannot read EIHS\n"
msgstr "ne peut lire EIHS\n"
-#: vms-alpha.c:7923
+#: vms-alpha.c:8167
#, c-format
msgid "Image symbol & debug table: (major: %u, minor: %u)\n"
msgstr "Image des symboles et table debug: (majeur: %u, mineur: %u)\n"
-#: vms-alpha.c:7929
+#: vms-alpha.c:8173
#, c-format
msgid " debug symbol table : vbn: %u, size: %u (0x%x)\n"
msgstr " table des symboles de debug : vbn: %u, taille: %u (0x%x)\n"
-#: vms-alpha.c:7934
+#: vms-alpha.c:8178
#, c-format
msgid " global symbol table: vbn: %u, records: %u\n"
msgstr " table des symboles globale: vbn: %u, enregistrements: %u\n"
-#: vms-alpha.c:7939
+#: vms-alpha.c:8183
#, c-format
msgid " debug module table : vbn: %u, size: %u\n"
msgstr " table des modules de debug: vbn: %u, taille: %u\n"
-#: vms-alpha.c:7952
+#: vms-alpha.c:8196
#, c-format
msgid "cannot read EISD\n"
msgstr "ne peut lire EISD\n"
-#: vms-alpha.c:7963
+#: vms-alpha.c:8207
#, c-format
msgid "Image section descriptor: (major: %u, minor: %u, size: %u, offset: %u)\n"
msgstr "Descripteur de section d'image: (majeur: %u, mineur: %u, taille: %u, offset: %u)\n"
-#: vms-alpha.c:7971
+#: vms-alpha.c:8215
#, c-format
msgid " section: base: 0x%08x%08x size: 0x%08x\n"
msgstr " section: base: 0x%08x%08x taille: 0x%08x\n"
-#: vms-alpha.c:7976
+#: vms-alpha.c:8220
#, c-format
msgid " flags: 0x%04x"
msgstr " fanions: 0x%04x"
-#: vms-alpha.c:8014
+#: vms-alpha.c:8258
#, c-format
msgid " vbn: %u, pfc: %u, matchctl: %u type: %u ("
msgstr " vbn: %u, pfc: %u, matchctl: %u type: %u ("
-#: vms-alpha.c:8020
+#: vms-alpha.c:8264
msgid "NORMAL"
msgstr "NORMAL"
-#: vms-alpha.c:8023
+#: vms-alpha.c:8267
msgid "SHRFXD"
msgstr "SHRFXD"
-#: vms-alpha.c:8026
+#: vms-alpha.c:8270
msgid "PRVFXD"
msgstr "PRVFXD"
-#: vms-alpha.c:8029
+#: vms-alpha.c:8273
msgid "SHRPIC"
msgstr "SHRPIC"
-#: vms-alpha.c:8032
+#: vms-alpha.c:8276
msgid "PRVPIC"
msgstr "PRVPIC"
-#: vms-alpha.c:8035
+#: vms-alpha.c:8279
msgid "USRSTACK"
msgstr "USRSTACK"
-#: vms-alpha.c:8041
+#: vms-alpha.c:8285
msgid ")\n"
msgstr ")\n"
-#: vms-alpha.c:8044
+#: vms-alpha.c:8288
#, c-format
msgid " ident: 0x%08x, name: %.*s\n"
msgstr " ident: 0x%08x, nom: %.*s\n"
-#: vms-alpha.c:8054
+#: vms-alpha.c:8298
#, c-format
msgid "cannot read DMT\n"
msgstr "ne peut lire DMT\n"
-#: vms-alpha.c:8058
+#: vms-alpha.c:8302
#, c-format
msgid "Debug module table:\n"
msgstr "Table de debug du module:\n"
-#: vms-alpha.c:8067
+#: vms-alpha.c:8311
#, c-format
msgid "cannot read DMT header\n"
msgstr "ne peut lire l'en-tête DMT\n"
-#: vms-alpha.c:8073
+#: vms-alpha.c:8317
#, c-format
msgid " module offset: 0x%08x, size: 0x%08x, (%u psects)\n"
msgstr " offset du module: 0x%08x, taille: 0x%08x, (%u psects)\n"
-#: vms-alpha.c:8083
+#: vms-alpha.c:8327
#, c-format
msgid "cannot read DMT psect\n"
msgstr "ne peut lire le psect DMT\n"
-#: vms-alpha.c:8087
+#: vms-alpha.c:8331
#, c-format
msgid " psect start: 0x%08x, length: %u\n"
msgstr " début psect: 0x%08x, longueur: %u\n"
-#: vms-alpha.c:8100
+#: vms-alpha.c:8344
#, c-format
msgid "cannot read DST\n"
msgstr "ne peut lire DST\n"
-#: vms-alpha.c:8110
+#: vms-alpha.c:8354
#, c-format
msgid "cannot read GST\n"
msgstr "ne peut lire GST\n"
-#: vms-alpha.c:8114
+#: vms-alpha.c:8358
#, c-format
msgid "Global symbol table:\n"
msgstr "Table des symboles globaux:\n"
-#: vms-alpha.c:8141
+#: vms-alpha.c:8385
#, c-format
msgid "Image activator fixup: (major: %u, minor: %u)\n"
msgstr "Correction de l'activateur de l'image: (majeur: %u, mineur: %u)\n"
-#: vms-alpha.c:8145
+#: vms-alpha.c:8389
#, c-format
msgid " iaflink : 0x%08x %08x\n"
msgstr " lien iaf : 0x%08x %08x\n"
-#: vms-alpha.c:8149
+#: vms-alpha.c:8393
#, c-format
msgid " fixuplnk: 0x%08x %08x\n"
msgstr " lien correctif: 0x%08x %08x\n"
-#: vms-alpha.c:8152
+#: vms-alpha.c:8396
#, c-format
msgid " size : %u\n"
msgstr " taille : %u\n"
-#: vms-alpha.c:8154
+#: vms-alpha.c:8398
#, c-format
msgid " flags: 0x%08x\n"
msgstr " fanions: 0x%08x\n"
-#: vms-alpha.c:8159
+#: vms-alpha.c:8403
#, c-format
msgid " qrelfixoff: %5u, lrelfixoff: %5u\n"
msgstr " qrelfixoff: %5u, lrelfixoff: %5u\n"
-#: vms-alpha.c:8164
+#: vms-alpha.c:8408
#, c-format
msgid " qdotadroff: %5u, ldotadroff: %5u\n"
msgstr " qdotadroff: %5u, ldotadroff: %5u\n"
-#: vms-alpha.c:8169
+#: vms-alpha.c:8413
#, c-format
msgid " codeadroff: %5u, lpfixoff : %5u\n"
msgstr " codeadroff: %5u, lpfixoff : %5u\n"
-#: vms-alpha.c:8172
+#: vms-alpha.c:8416
#, c-format
msgid " chgprtoff : %5u\n"
msgstr " chgprtoff : %5u\n"
-#: vms-alpha.c:8176
+#: vms-alpha.c:8420
#, c-format
msgid " shlstoff : %5u, shrimgcnt : %5u\n"
msgstr " shlstoff : %5u, shrimgcnt : %5u\n"
-#: vms-alpha.c:8179
+#: vms-alpha.c:8423
#, c-format
msgid " shlextra : %5u, permctx : %5u\n"
msgstr " shlextra : %5u, permctx : %5u\n"
-#: vms-alpha.c:8182
+#: vms-alpha.c:8426
#, c-format
msgid " base_va : 0x%08x\n"
msgstr " base_va : 0x%08x\n"
-#: vms-alpha.c:8184
+#: vms-alpha.c:8428
#, c-format
msgid " lppsbfixoff: %5u\n"
msgstr " lppsbfixoff: %5u\n"
-#: vms-alpha.c:8192
+#: vms-alpha.c:8435
#, c-format
msgid " Shareable images:\n"
msgstr " Images partageables:\n"
-#: vms-alpha.c:8197
+#: vms-alpha.c:8443
#, c-format
msgid " %u: size: %u, flags: 0x%02x, name: %.*s\n"
msgstr " %u: taille: %u, fanions: 0x%02x, nom: %.*s\n"
-#: vms-alpha.c:8204
+#: vms-alpha.c:8450
#, c-format
msgid " quad-word relocation fixups:\n"
msgstr " correctifs du réadressage des quad-mots:\n"
-#: vms-alpha.c:8209
+#: vms-alpha.c:8456
#, c-format
msgid " long-word relocation fixups:\n"
msgstr " correctifs du réadressage des mots longs:\n"
-#: vms-alpha.c:8214
+#: vms-alpha.c:8462
#, c-format
msgid " quad-word .address reference fixups:\n"
msgstr " correctifs des références quad-mots « .address »:\n"
-#: vms-alpha.c:8219
+#: vms-alpha.c:8467
#, c-format
msgid " long-word .address reference fixups:\n"
msgstr " correctifs des références mots longs « .address »:\n"
-#: vms-alpha.c:8224
+#: vms-alpha.c:8472
#, c-format
msgid " Code Address Reference Fixups:\n"
msgstr " Correctifs des références des adresses de code:\n"
-#: vms-alpha.c:8229
+#: vms-alpha.c:8477
#, c-format
msgid " Linkage Pairs Reference Fixups:\n"
msgstr " Correctifs des références des paires de liaison:\n"
-#: vms-alpha.c:8238
+#: vms-alpha.c:8485
#, c-format
msgid " Change Protection (%u entries):\n"
msgstr " Changement de protection (%u entrées):\n"
-#: vms-alpha.c:8244
+#: vms-alpha.c:8494
#, c-format
msgid " base: 0x%08x %08x, size: 0x%08x, prot: 0x%08x "
msgstr " base: 0x%08x %08x, taille: 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:9121
+#: vms-alpha.c:9371
msgid "%P: relocatable link is not supported\n"
msgstr "%P: lien relocalisable pas supporté\n"
-#: vms-alpha.c:9192
+#: vms-alpha.c:9442
#, c-format
msgid "%P: multiple entry points: in modules %pB and %pB\n"
msgstr "%P: points d'entrée multiples: dans les modules %pB et %pB\n"
@@ -8263,92 +8348,102 @@ msgstr "_bfd_vms_output_counted appelé avec un compte de zéro octet"
msgid "_bfd_vms_output_counted called with too many bytes"
msgstr "_bfd_vms_output_counted appelé avec trop d'octets"
-#: xcofflink.c:835
+#: xcofflink.c:834
#, c-format
msgid "%pB: XCOFF shared object when not producing XCOFF output"
msgstr "%pB: objet XCOFF partagé alors qu'on ne produit pas de sortie XCOFF"
-#: xcofflink.c:856
+#: xcofflink.c:855
#, c-format
msgid "%pB: dynamic object with no .loader section"
msgstr "%pB: objet dynamique sans section .loader"
-#: xcofflink.c:1420
+#: xcofflink.c:1440
#, c-format
msgid "%pB: `%s' has line numbers but no enclosing section"
msgstr "%pB: « %s » contient des numéros de lignes mais de section d'encadrement"
-#: xcofflink.c:1473
+#: xcofflink.c:1496
#, c-format
msgid "%pB: class %d symbol `%s' has no aux entries"
msgstr "%pB: classe %d symbole « %s » n'a pas d'entrée auxiliaire"
-#: xcofflink.c:1496
+#: xcofflink.c:1519
#, c-format
msgid "%pB: symbol `%s' has unrecognized csect type %d"
msgstr "%pB: symbole « %s » a un type csect %d non reconnu"
-#: xcofflink.c:1509
+#: xcofflink.c:1532
#, c-format
msgid "%pB: bad XTY_ER symbol `%s': class %d scnum %d scnlen %<PRId64>"
msgstr "%pB: symbole XTY_ER « %s » erroné: classe %d scnum %d scnlen %<PRId64>"
-#: xcofflink.c:1540
+#: xcofflink.c:1563
#, c-format
msgid "%pB: XMC_TC0 symbol `%s' is class %d scnlen %<PRId64>"
msgstr "%pB: XMC_TC0 symbol « %s » est la classe %d scnlen %<PRId64>"
-#: xcofflink.c:1687
+#: xcofflink.c:1698
+#, c-format
+msgid "%pB: TOC entry `%s' has a R_TLSMLrelocation not targeting itself"
+msgstr "%pB: l'entrée TOC « %s » a un réadressage R_TLSML qui ne se cible pas lui-même"
+
+#: xcofflink.c:1732
#, c-format
msgid "%pB: csect `%s' not in enclosing section"
msgstr "%pB: csect « %s » n'est pas dans un section d'encadrement"
-#: xcofflink.c:1795
+#: xcofflink.c:1841
#, c-format
msgid "%pB: misplaced XTY_LD `%s'"
msgstr "%pB: XTY_LD « %s » mal placé"
-#: xcofflink.c:2122
+#: xcofflink.c:2184
#, c-format
msgid "%pB: reloc %s:%<PRId64> not in csect"
msgstr "%pB: le réadressage %s:%<PRId64> n'est pas dans csect"
-#: xcofflink.c:3223
+#: xcofflink.c:3287
+#, c-format
+msgid "%pB: cannot export internal symbol `%s`."
+msgstr "%pB: impossible d'exporter le symbole interne « %s »."
+
+#: xcofflink.c:3335
#, c-format
msgid "%s: no such symbol"
msgstr "%s: pas de tel symbole"
-#: xcofflink.c:3334
+#: xcofflink.c:3444
#, c-format
msgid "warning: attempt to export undefined symbol `%s'"
msgstr "attention: tentative d'exportation d'un symbole non défini « %s »"
-#: xcofflink.c:3713
+#: xcofflink.c:3823
msgid "error: undefined symbol __rtinit"
msgstr "erreur: symbole __rtinit non défini"
-#: xcofflink.c:4095
+#: xcofflink.c:4206
#, c-format
msgid "%pB: loader reloc in unrecognized section `%s'"
msgstr "%pB: chargeur de réadressage dans une section non reconnue « %s »"
-#: xcofflink.c:4107
+#: xcofflink.c:4218
#, c-format
msgid "%pB: `%s' in loader reloc but not loader sym"
msgstr "%pB: « %s » est dans le chargeur de réadressage mais pas dans celui des symboles"
-#: xcofflink.c:4124
+#: xcofflink.c:4235
#, c-format
msgid "%pB: loader reloc in read-only section %pA"
msgstr "%pB: chargeur de réadressages dans la section %pA en lecture seule"
-#: xcofflink.c:5152
+#: xcofflink.c:5270
#, c-format
msgid "TOC overflow: %#<PRIx64> > 0x10000; try -mminimal-toc when compiling"
msgstr "Débordement de la table des entrées: %#<PRIx64> > 0x10000; essayez l'option -mminimal-toc à la compilation"
#. Not fatal, this callback cannot fail.
-#: elfnn-aarch64.c:2869
+#: elfnn-aarch64.c:2869 elfnn-riscv.c:5264
#, c-format
msgid "unknown attribute for symbol `%s': 0x%02x"
msgstr "attribut inconnu pour le symbole « %s » : 0x%02x"
@@ -8363,271 +8458,286 @@ msgstr "%pB: erreur: l'ébauche d'erratum du 835769 est hors limite (fichier d'e
msgid "%pB: error: erratum 843419 stub out of range (input file too large)"
msgstr "%pB: erreur: l'ébauche d'erratum du 843419 est hors limite (fichier d'entrée trop grand)"
-#: elfnn-aarch64.c:5350
-msgid "%pB: error: erratum 843419 immediate 0x%"
-msgstr "%pB: erreur: erratum 843419 immédiat 0x%"
+#: elfnn-aarch64.c:5353
+#, c-format
+msgid "%pB: error: erratum 843419 immediate 0x%s out of range for ADR (input file too large) and --fix-cortex-a53-843419=adr used. Run the linker with --fix-cortex-a53-843419=full instead"
+msgstr "%pB: erreur: l'immédiat 0x%s de l'erratum 843419 est hors limites pour ADR (fichier d'entrée trop grand) et --fix-cortex-a53-843419=adr est utilisé. Exécutez l'éditeur de liens avec --fix-cortex-a53-843419=full à la place"
-#: elfnn-aarch64.c:5884
+#: elfnn-aarch64.c:5887
#, c-format
msgid "%pB: relocation %s against symbol `%s' which may bind externally can not be used when making a shared object; recompile with -fPIC"
msgstr "%pB: réadressage de %s en vertu du symbol « %s » qui peut être lié avec l'extérieur ne peut être utilisé lors de la création d'un objet partagé; recompilez avec -fPIC"
-#: elfnn-aarch64.c:5904
+#: elfnn-aarch64.c:5907
#, c-format
msgid "%pB: conditional branch to undefined symbol `%s' not allowed"
msgstr "%pB: le branchement conditionnel vers le symbole non défini « %s » n'est pas permis"
-#: elfnn-aarch64.c:5992
+#: elfnn-aarch64.c:5995
#, c-format
msgid "%pB: local symbol descriptor table be NULL when applying relocation %s against local symbol"
msgstr "%pB: la table des descripteurs de symboles locaux peut être NULL en application le réadressage %s sur un symbole local"
-#: elfnn-aarch64.c:6105 elfnn-aarch64.c:6142
+#: elfnn-aarch64.c:6108 elfnn-aarch64.c:6145
#, c-format
msgid "%pB: TLS relocation %s against undefined symbol `%s'"
msgstr "%pB: réadressage TLS %s sur le symbole indéfini « %s »"
-#: elfnn-aarch64.c:7127
+#: elfnn-aarch64.c:7130
msgid "too many GOT entries for -fpic, please recompile with -fPIC"
msgstr "trop d'entrées GOT pour -fpic, recompilez avec -fPIC"
-#: elfnn-aarch64.c:7155
+#: elfnn-aarch64.c:7158
msgid "one possible cause of this error is that the symbol is being referenced in the indicated code as if it had a larger alignment than was declared where it was defined"
msgstr "une cause possible pour cette erreur est que le symbole est référencé dans le code indiqué comme si il avait un alignement plus grand que celui qui a été déclaré lors de sa définition."
-#: elfnn-aarch64.c:7722
+#: elfnn-aarch64.c:7725
#, c-format
msgid "%pB: relocation %s against `%s' can not be used when making a shared object"
msgstr "%pB: le réadressage %s vers « %s » ne peut pas être utilisé en créant un objet partagé"
-#: elfnn-riscv.c:223 elfnn-riscv.c:258
+#: elfnn-loongarch.c:151 elfnn-loongarch.c:203
+#, c-format
+msgid "%#<PRIx64> invaild imm"
+msgstr "%#<PRIx64> imm invalide"
+
+#: elfnn-loongarch.c:386 elfnn-riscv.c:3846
+#, c-format
+msgid ""
+"%pB: ABI is incompatible with that of the selected emulation:\n"
+" target emulation `%s' does not match `%s'"
+msgstr ""
+"%pB: l'ABI est incompatible avec celle de l'émulation sélectionnée:\n"
+" l'émulation de la cible « %s » ne correspond pas à « %s »"
+
+#: elfnn-loongarch.c:406
+#, c-format
+msgid "%pB: can't link different ABI object."
+msgstr "%pB: ne peut lier ensemble des objets d'ABI différentes."
+
+#: elfnn-loongarch.c:547
+msgid "Internal error: unreachable."
+msgstr "Erreur interne: inatteignable."
+
+#: elfnn-riscv.c:224 elfnn-riscv.c:259
#, c-format
msgid "%pB: warning: RVE PLT generation not supported"
msgstr "%pB: attention: la génération de PLT RVE n'est pas supportée"
-#: elfnn-riscv.c:1911
+#: elfnn-riscv.c:1927
#, c-format
msgid "%pcrel_lo missing matching %pcrel_hi"
msgstr "%pcrel_lo n'a pas de %pcrel_hi correspondant"
-#: elfnn-riscv.c:1914
+#: elfnn-riscv.c:1930
#, c-format
msgid "%pcrel_lo with addend isn't allowed for R_RISCV_GOT_HI20"
msgstr "%pcrel_lo avec un terme n'est pas permis avec R_RISCV_GOT_HI20"
-#: elfnn-riscv.c:1920
+#: elfnn-riscv.c:1936
#, c-format
msgid "%%pcrel_lo overflow with an addend, the value of %%pcrel_hi is 0x%<PRIx64> without any addend, but may be 0x%<PRIx64> after adding the %%pcrel_lo addend"
msgstr "%%pcrel_lo déborde avec un terme, la valeur de %%pcrel_hi est 0x%<PRIx64> sans terme, mais peut être 0x%<PRIx64> après ajout du terme de %%pcrel_lo"
-#: elfnn-riscv.c:1927
+#: elfnn-riscv.c:1943
#, c-format
msgid "%pcrel_lo overflow with an addend"
msgstr "%pcrel_lo déborde avec un terme"
-#: elfnn-riscv.c:2409
+#: elfnn-riscv.c:2425
msgid "The addend isn't allowed for R_RISCV_GOT_HI20"
msgstr "Le terme n'est pas permis avec R_RISCV_GOT_HI20"
-#: elfnn-riscv.c:2553
+#: elfnn-riscv.c:2569
#, c-format
msgid "%pcrel_lo section symbol with an addend"
msgstr "symbole de section %pcrel_lo avec un opérande"
-#: elfnn-riscv.c:2776
+#: elfnn-riscv.c:2792
#, c-format
msgid "%%X%%P: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC\n"
msgstr "%%X%%p: réadressage de %s en vertu de « %s » ne peut être utilisé lors de la création d'un objet partagé; recompilez avec -fPIC\n"
-#: elfnn-riscv.c:2786
+#: elfnn-riscv.c:2802
#, c-format
msgid "%%X%%P: unresolvable %s relocation against symbol `%s'\n"
msgstr "%%X%%P: réadressage %s sans solution par rapport au symbole « %s »\n"
-#: elfnn-riscv.c:2826
+#: elfnn-riscv.c:2842
msgid "%X%P: internal error: out of range error\n"
msgstr "%X%P: erreur interne: erreur car hors limite\n"
-#: elfnn-riscv.c:2831
+#: elfnn-riscv.c:2847
msgid "%X%P: internal error: unsupported relocation error\n"
msgstr "%X%P: erreur interne: erreur car réadressage non supporté\n"
-#: elfnn-riscv.c:2837
+#: elfnn-riscv.c:2853
msgid "dangerous relocation error"
msgstr "erreur de réadressage dangereux"
-#: elfnn-riscv.c:2843
+#: elfnn-riscv.c:2859
msgid "%X%P: internal error: unknown error\n"
msgstr "%X%P: erreur interne: erreur inconnue\n"
-#: elfnn-riscv.c:3384
+#: elfnn-riscv.c:3400
#, c-format
msgid "warning: %pB: mis-matched ISA version %d.%d for '%s' extension, the output version is %d.%d"
msgstr "avertissement: %pB: version ISA %d.%d non concordante pour l'extension « %s », la version de sortie est %d.%d"
-#: elfnn-riscv.c:3417
+#: elfnn-riscv.c:3433
#, c-format
msgid "error: %pB: corrupted ISA string '%s'. First letter should be 'i' or 'e' but got '%s'"
msgstr "erreur: %pB: chaîne ISA « %s » corrompue. La première lettre devrait être « i » ou « e » mais on a trouvé « %s »."
-#: elfnn-riscv.c:3460
+#: elfnn-riscv.c:3476
#, c-format
msgid "error: %pB: mis-matched ISA string to merge '%s' and '%s'"
msgstr "erreur: %pB: chaînes ISA à fusionner « %s » et « %s » non concordantes"
-#: elfnn-riscv.c:3617
+#: elfnn-riscv.c:3618
#, c-format
msgid "error: %pB: ISA string of input (%s) doesn't match output (%s)"
msgstr "erreur: %pB: la chaîne ISA en entrée (%s) ne correspond pas à la sortie (%s)"
-#: elfnn-riscv.c:3637
+#: elfnn-riscv.c:3638
#, c-format
msgid "error: %pB: XLEN of input (%u) doesn't match output (%u)"
msgstr "erreur: %pB: XLEN de l'entrée (%u) ne correspond pas à la sortie (%u)"
-#: elfnn-riscv.c:3645
+#: elfnn-riscv.c:3646
#, c-format
msgid "error: %pB: unsupported XLEN (%u), you might be using wrong emulation"
msgstr "erreur: %pB: XLEN (%u) non supportée, vous pourriez être en train d'utiliser la mauvaise émulation"
-#: elfnn-riscv.c:3759
+#: elfnn-riscv.c:3760
#, c-format
msgid "warning: %pB use privileged spec version %u.%u.%u but the output use version %u.%u.%u"
msgstr "avertissement: %pB utilise la version de spec privilégie %u.%u.%u mais la sortie utilise la version %u.%u.%u"
-#: elfnn-riscv.c:3776
+#: elfnn-riscv.c:3777
msgid "warning: privileged spec version 1.9.1 can not be linked with other spec versions"
msgstr "avertissement: la version de spec privilégie 1.9.1 ne peut pas être liée avec d'autres versions de spec"
-#: elfnn-riscv.c:3804
+#: elfnn-riscv.c:3805
#, c-format
msgid "error: %pB use %u-byte stack aligned but the output use %u-byte stack aligned"
msgstr "erreur: %pB utilise un alignement de pile de %u octets mais la sortie utilise un alignement de pile de %u octets"
-#: elfnn-riscv.c:3845
-#, c-format
-msgid ""
-"%pB: ABI is incompatible with that of the selected emulation:\n"
-" target emulation `%s' does not match `%s'"
-msgstr ""
-"%pB: l'ABI est incompatible avec celle de l'émulation sélectionnée:\n"
-" l'émulation de la cible « %s » ne correspond pas à « %s »"
-
-#: elfnn-riscv.c:3901
+#: elfnn-riscv.c:3902
#, c-format
msgid "%pB: can't link %s modules with %s modules"
msgstr "%pB: impossible de réaliser l'édition de liens des modules %s avec les modules %s"
-#: elfnn-riscv.c:3911
+#: elfnn-riscv.c:3912
#, c-format
msgid "%pB: can't link RVE with other target"
msgstr "%pB: impossible de faire l'édition de lien avec une autre cible"
-#: elfnn-riscv.c:4448
+#: elfnn-riscv.c:4493
#, c-format
msgid "%pB(%pA+%#<PRIx64>): %<PRId64> bytes required for alignment to %<PRId64>-byte boundary, but only %<PRId64> present"
msgstr "%pB(%pA+0x%<PRIx64>: %<PRId64> octets requis pour aligner sur une frontière de %<PRId64> octets mais seulement %<PRId64> sont présents"
-#: peXXigen.c:154
+#: peXXigen.c:157
#, c-format
msgid "%pB: unable to find name for empty section"
msgstr "%pB: impossible de trouver le nom pour une section vide"
-#: peXXigen.c:181
+#: peXXigen.c:184
#, c-format
msgid "%pB: out of memory creating name for empty section"
msgstr "%pB: pas assez de mémoire en créant le nom pour une section vide"
-#: peXXigen.c:191
+#: peXXigen.c:194
#, c-format
msgid "%pB: unable to create fake empty section"
msgstr "%pB: impossible de créer une section vide factice"
-#: peXXigen.c:523
+#: peXXigen.c:526
#, c-format
msgid "%pB: aout header specifies an invalid number of data-directory entries: %u"
msgstr "%pB: l'en-tête aout spécifie un nombre invalide d'entrées de répertoire de données: %u"
-#: peXXigen.c:934
+#: peXXigen.c:937
#, c-format
msgid "%pB:%.8s: section below image base"
msgstr "%pB:%.8s: section en dessous de la base de l'image"
-#: peXXigen.c:937
+#: peXXigen.c:940
#, c-format
msgid "%pB:%.8s: RVA truncated"
msgstr "%pB:%.8s: RVA tronqué"
-#: peXXigen.c:1065
+#: peXXigen.c:1068
#, c-format
msgid "%pB: line number overflow: 0x%lx > 0xffff"
msgstr "%pB: débordement du nombre de lignes: 0x%lx > 0xffff"
-#: peXXigen.c:1218
+#: peXXigen.c:1221
msgid "Export Directory [.edata (or where ever we found it)]"
msgstr "Répertoire d'exportation [.edata (ou là où il a été trouvé)]"
-#: peXXigen.c:1219
+#: peXXigen.c:1222
msgid "Import Directory [parts of .idata]"
msgstr "Répertoire d'importation [faisant partie de .idata]"
-#: peXXigen.c:1220
+#: peXXigen.c:1223
msgid "Resource Directory [.rsrc]"
msgstr "Répertoire des resources [.rsrc]"
-#: peXXigen.c:1221
+#: peXXigen.c:1224
msgid "Exception Directory [.pdata]"
msgstr "Répertoire des exceptions [.pdata]"
-#: peXXigen.c:1222
+#: peXXigen.c:1225
msgid "Security Directory"
msgstr "Répertoire de la sécurité"
-#: peXXigen.c:1223
+#: peXXigen.c:1226
msgid "Base Relocation Directory [.reloc]"
msgstr "Répertoire de base du réadressage [.reloc]"
-#: peXXigen.c:1224
+#: peXXigen.c:1227
msgid "Debug Directory"
msgstr "Répertoire de débug"
-#: peXXigen.c:1225
+#: peXXigen.c:1228
msgid "Description Directory"
msgstr "Répertoire de description"
-#: peXXigen.c:1226
+#: peXXigen.c:1229
msgid "Special Directory"
msgstr "Répertoire spécial"
-#: peXXigen.c:1227
+#: peXXigen.c:1230
msgid "Thread Storage Directory [.tls]"
msgstr "Répertoire des files de stockage [.tls]"
-#: peXXigen.c:1228
+#: peXXigen.c:1231
msgid "Load Configuration Directory"
msgstr "Répertoire de chargement de configuration"
-#: peXXigen.c:1229
+#: peXXigen.c:1232
msgid "Bound Import Directory"
msgstr "Répertoire des importations limitées"
-#: peXXigen.c:1230
+#: peXXigen.c:1233
msgid "Import Address Table Directory"
msgstr "Répertoire de la table d'adresse d'importation"
-#: peXXigen.c:1231
+#: peXXigen.c:1234
msgid "Delay Import Directory"
msgstr "Répertoire des délais d'importation"
-#: peXXigen.c:1232
+#: peXXigen.c:1235
msgid "CLR Runtime Header"
msgstr "En-tête exécutable CLR"
-#: peXXigen.c:1233
+#: peXXigen.c:1236
msgid "Reserved"
msgstr "Réservé"
-#: peXXigen.c:1280
+#: peXXigen.c:1283
#, c-format
msgid ""
"\n"
@@ -8636,7 +8746,7 @@ msgstr ""
"\n"
"Il y a une table d'importation, mais la section la contenant ne peut être repérée\n"
-#: peXXigen.c:1286
+#: peXXigen.c:1289
#, c-format
msgid ""
"\n"
@@ -8645,7 +8755,7 @@ msgstr ""
"\n"
"Il y a une table d'importation dans %s, mais cette section n'a pas de contenu\n"
-#: peXXigen.c:1293
+#: peXXigen.c:1296
#, c-format
msgid ""
"\n"
@@ -8654,7 +8764,7 @@ msgstr ""
"\n"
"Il y a une table d'importation dans %s à 0x%lx\n"
-#: peXXigen.c:1299
+#: peXXigen.c:1302
#, c-format
msgid ""
"\n"
@@ -8663,7 +8773,7 @@ msgstr ""
"\n"
"Les tables d'importation (contenus interprété de la section %s)\n"
-#: peXXigen.c:1302
+#: peXXigen.c:1305
#, c-format
msgid ""
" vma: Hint Time Forward DLL First\n"
@@ -8672,7 +8782,7 @@ msgstr ""
" vma: Hint Temps Avant DLL Premier\n"
" Table Estampil. Chaîne Nom Thunk\n"
-#: peXXigen.c:1351
+#: peXXigen.c:1354
#, c-format
msgid ""
"\n"
@@ -8681,12 +8791,12 @@ msgstr ""
"\n"
"\tNom DLL: %.*s\n"
-#: peXXigen.c:1367
+#: peXXigen.c:1370
#, c-format
msgid "\tvma: Hint/Ord Member-Name Bound-To\n"
msgstr "\tvma: Hint/Ord Membre Lien\n"
-#: peXXigen.c:1392
+#: peXXigen.c:1395
#, c-format
msgid ""
"\n"
@@ -8695,12 +8805,12 @@ msgstr ""
"\n"
"Il y a un premier « thunk », mais la section le contenant ne peut être repérée\n"
-#: peXXigen.c:1436 peXXigen.c:1475
+#: peXXigen.c:1439 peXXigen.c:1478
#, c-format
msgid "\t<corrupt: 0x%04lx>"
msgstr "\t<corrompu: 0x%04lx>"
-#: peXXigen.c:1568
+#: peXXigen.c:1571
#, c-format
msgid ""
"\n"
@@ -8709,7 +8819,7 @@ msgstr ""
"\n"
"Il y a une table d'exportation, mais la section la contenant n'a pu être repérée\n"
-#: peXXigen.c:1574
+#: peXXigen.c:1577
#, c-format
msgid ""
"\n"
@@ -8718,7 +8828,7 @@ msgstr ""
"\n"
"Il y a une table d'exportation dans %s, mais cette section n'a pas de contenu\n"
-#: peXXigen.c:1585
+#: peXXigen.c:1588
#, c-format
msgid ""
"\n"
@@ -8727,7 +8837,7 @@ msgstr ""
"\n"
"Il y a une table d'exportation dans %s, mais elle ne rentre pas dans la section\n"
-#: peXXigen.c:1596
+#: peXXigen.c:1599
#, c-format
msgid ""
"\n"
@@ -8736,7 +8846,7 @@ msgstr ""
"\n"
"Il y a une table d'exportation dans %s, mais elle est trop petite (%d)\n"
-#: peXXigen.c:1602
+#: peXXigen.c:1605
#, c-format
msgid ""
"\n"
@@ -8745,7 +8855,7 @@ msgstr ""
"\n"
"Il y a une table d'exportation dans %s à 0x%lx\n"
-#: peXXigen.c:1630
+#: peXXigen.c:1633
#, c-format
msgid ""
"\n"
@@ -8756,67 +8866,67 @@ msgstr ""
"Les tables d'exportation (contenus interprété de la section %s)\n"
"\n"
-#: peXXigen.c:1634
+#: peXXigen.c:1637
#, c-format
msgid "Export Flags \t\t\t%lx\n"
msgstr "Fanion d'exportation \t\t\t%lx\n"
-#: peXXigen.c:1637
+#: peXXigen.c:1640
#, c-format
msgid "Time/Date stamp \t\t%lx\n"
msgstr "Tampon Heure/Date \t\t%lx\n"
-#: peXXigen.c:1641
+#: peXXigen.c:1644
#, c-format
msgid "Major/Minor \t\t\t%d/%d\n"
msgstr "Majeur/Mineur \t\t\t%d/%d\n"
-#: peXXigen.c:1644
+#: peXXigen.c:1647
#, c-format
msgid "Name \t\t\t\t"
msgstr "Nom \t\t\t\t"
-#: peXXigen.c:1655
+#: peXXigen.c:1658
#, c-format
msgid "Ordinal Base \t\t\t%ld\n"
msgstr "base de nombre ordinal \t\t\t%ld\n"
-#: peXXigen.c:1658
+#: peXXigen.c:1661
#, c-format
msgid "Number in:\n"
msgstr "Numéro dans:\n"
-#: peXXigen.c:1661
+#: peXXigen.c:1664
#, c-format
msgid "\tExport Address Table \t\t%08lx\n"
msgstr "\tTable d'adresses d'exportation \t\t%08lx\n"
-#: peXXigen.c:1665
+#: peXXigen.c:1668
#, c-format
msgid "\t[Name Pointer/Ordinal] Table\t%08lx\n"
msgstr "\tTable [Nom pointeur/Nombre ordinal]\t%08lx\n"
-#: peXXigen.c:1668
+#: peXXigen.c:1671
#, c-format
msgid "Table Addresses\n"
msgstr "Table d'adresses\n"
-#: peXXigen.c:1671
+#: peXXigen.c:1674
#, c-format
msgid "\tExport Address Table \t\t"
msgstr "\tTable d'adresse d'exportation \t\t"
-#: peXXigen.c:1676
+#: peXXigen.c:1679
#, c-format
msgid "\tName Pointer Table \t\t"
msgstr "\tTable des noms de pointeurs \t\t"
-#: peXXigen.c:1681
+#: peXXigen.c:1684
#, c-format
msgid "\tOrdinal Table \t\t\t"
msgstr "\tTable des ordinals \t\t\t"
-#: peXXigen.c:1695
+#: peXXigen.c:1698
#, c-format
msgid ""
"\n"
@@ -8825,20 +8935,20 @@ msgstr ""
"\n"
"Table d'adresses d'exportation -- base de nombre ordinal %ld\n"
-#: peXXigen.c:1704
+#: peXXigen.c:1707
#, c-format
msgid "\tInvalid Export Address Table rva (0x%lx) or entry count (0x%lx)\n"
msgstr "\tL'adresse virtuelle relative de la table des adresses exportées (0x%lx) ou le nombre d'entrées (0x%lx) est invalide\n"
-#: peXXigen.c:1723
+#: peXXigen.c:1726
msgid "Forwarder RVA"
msgstr "Adresseur RVA"
-#: peXXigen.c:1735
+#: peXXigen.c:1738
msgid "Export RVA"
msgstr "Exportation RVA"
-#: peXXigen.c:1742
+#: peXXigen.c:1745
#, c-format
msgid ""
"\n"
@@ -8847,27 +8957,27 @@ msgstr ""
"\n"
"Table [Ordinal/Nom de pointeur]\n"
-#: peXXigen.c:1750
+#: peXXigen.c:1753
#, c-format
msgid "\tInvalid Name Pointer Table rva (0x%lx) or entry count (0x%lx)\n"
msgstr "\tAdresse virtuelle relative de la table des pointeurs de noms (0x%lx) ou nombre d'entrées (0x%lx) invalide\n"
-#: peXXigen.c:1757
+#: peXXigen.c:1760
#, c-format
msgid "\tInvalid Ordinal Table rva (0x%lx) or entry count (0x%lx)\n"
msgstr "\tAdresse virtuelle relative de la table ordinale (0x%lx) ou nombre d'entrées (0x%lx) invalide\n"
-#: peXXigen.c:1771
+#: peXXigen.c:1774
#, c-format
msgid "\t[%4ld] <corrupt offset: %lx>\n"
msgstr "\t[%4ld] <offset corrompu: %lx>\n"
-#: peXXigen.c:1825 peXXigen.c:1994
+#: peXXigen.c:1828 peXXigen.c:1997
#, c-format
msgid "warning, .pdata section size (%ld) is not a multiple of %d\n"
msgstr "attention, taille de la section .pdata (%ld) n'est pas un multiple de %d\n"
-#: peXXigen.c:1829 peXXigen.c:1998
+#: peXXigen.c:1832 peXXigen.c:2001
#, c-format
msgid ""
"\n"
@@ -8876,12 +8986,12 @@ msgstr ""
"\n"
"La table de fonctions (interprétation du contenu de la section .pdata)\n"
-#: peXXigen.c:1832
+#: peXXigen.c:1835
#, c-format
msgid " vma:\t\t\tBegin Address End Address Unwind Info\n"
msgstr " vma:\t\t\tDébut Adresse Fin Adresse Unwind Info\n"
-#: peXXigen.c:1834
+#: peXXigen.c:1837
#, c-format
msgid ""
" vma:\t\tBegin End EH EH PrologEnd Exception\n"
@@ -8890,12 +9000,12 @@ msgstr ""
" vma:\t\tDébut Fin EH EH FinProlog Exception\n"
" \t\tAdresse Adresse Handler Données Adresse Masque\n"
-#: peXXigen.c:1847
+#: peXXigen.c:1850
#, c-format
msgid "Virtual size of .pdata section (%ld) larger than real size (%ld)\n"
msgstr "La taille virtuelle de la section .pdata (%ld) est plus grande que la taille réelle (%ld)\n"
-#: peXXigen.c:2000
+#: peXXigen.c:2003
#, c-format
msgid ""
" vma:\t\tBegin Prolog Function Flags Exception EH\n"
@@ -8904,7 +9014,7 @@ msgstr ""
" vma:\t\tDébut Long. Long. Fanions Gestion. EH\n"
" \t\tAdresse Prolog. Fonction 32b exc Exception Données\n"
-#: peXXigen.c:2121
+#: peXXigen.c:2124
#, c-format
msgid ""
"\n"
@@ -8915,7 +9025,7 @@ msgstr ""
"\n"
"Fichier de base des réadressages PE (contenus interprétés de la section .reloc)\n"
-#: peXXigen.c:2150
+#: peXXigen.c:2153
#, c-format
msgid ""
"\n"
@@ -8924,62 +9034,62 @@ msgstr ""
"\n"
"Adresse virtuelle: %08lx taille des morceaux %ld (0x%lx) nombre de correctifs %ld\n"
-#: peXXigen.c:2168
+#: peXXigen.c:2171
#, c-format
msgid "\treloc %4d offset %4x [%4lx] %s"
msgstr "\tréadressage %4d décalage %4x [%4lx] %s"
-#: peXXigen.c:2229
+#: peXXigen.c:2232
#, c-format
msgid "%03x %*.s Entry: "
msgstr "%03x %*.s Entrée: "
-#: peXXigen.c:2253
+#: peXXigen.c:2256
#, c-format
msgid "name: [val: %08lx len %d]: "
msgstr "nom: [val: %08lx long %d]: "
-#: peXXigen.c:2273
+#: peXXigen.c:2276
#, c-format
msgid "<corrupt string length: %#x>\n"
msgstr "<longueur de la chaîne corrompue: %#x>\n"
-#: peXXigen.c:2283
+#: peXXigen.c:2286
#, c-format
msgid "<corrupt string offset: %#lx>\n"
msgstr "<offset de la chaîne corrompue: %#lx>\n"
-#: peXXigen.c:2288
+#: peXXigen.c:2291
#, c-format
msgid "ID: %#08lx"
msgstr "ID: %#08lx"
-#: peXXigen.c:2291
+#: peXXigen.c:2294
#, c-format
msgid ", Value: %#08lx\n"
msgstr ", Valeur: %#08lx\n"
-#: peXXigen.c:2313
+#: peXXigen.c:2316
#, c-format
msgid "%03x %*.s Leaf: Addr: %#08lx, Size: %#08lx, Codepage: %d\n"
msgstr "%03x %*.s Feuilles: Adr: %#08lx, Taille: %#08lx, Codepage: %d\n"
-#: peXXigen.c:2355
+#: peXXigen.c:2358
#, c-format
msgid "<unknown directory type: %d>\n"
msgstr "<type de répertoire inconnu: %d>\n"
-#: peXXigen.c:2363
+#: peXXigen.c:2366
#, c-format
msgid " Table: Char: %d, Time: %08lx, Ver: %d/%d, Num Names: %d, IDs: %d\n"
msgstr "Table: Car: %d, Temps: %08lx, Ver: %d/%d, Nbr Noms: %d, IDs: %d\n"
-#: peXXigen.c:2451
+#: peXXigen.c:2454
#, c-format
msgid "Corrupt .rsrc section detected!\n"
msgstr "Détection d'une section .rsrc corrompue !\n"
-#: peXXigen.c:2475
+#: peXXigen.c:2478
#, c-format
msgid ""
"\n"
@@ -8988,17 +9098,17 @@ msgstr ""
"\n"
"ATTENTION: Données en trop dans la section .rsrc – elles seront ignorées par Windows:\n"
-#: peXXigen.c:2481
+#: peXXigen.c:2484
#, c-format
msgid " String table starts at offset: %#03x\n"
msgstr " La table des chaînes démarre au décalage: %#03x\n"
-#: peXXigen.c:2484
+#: peXXigen.c:2487
#, c-format
msgid " Resources start at offset: %#03x\n"
msgstr " Les ressources démarrent au décalage: %#03x\n"
-#: peXXigen.c:2541
+#: peXXigen.c:2544
#, c-format
msgid ""
"\n"
@@ -9007,7 +9117,7 @@ msgstr ""
"\n"
"Ceci est un répertoire de débogage, mais la section le contenant ne peut être repérée\n"
-#: peXXigen.c:2547
+#: peXXigen.c:2550
#, c-format
msgid ""
"\n"
@@ -9016,7 +9126,7 @@ msgstr ""
"\n"
"Il y a un répertoire de débogage dans %s, mais cette section n'a pas de contenu\n"
-#: peXXigen.c:2554
+#: peXXigen.c:2557
#, c-format
msgid ""
"\n"
@@ -9025,7 +9135,7 @@ msgstr ""
"\n"
"Erreur: la section %s contient l'adresse de départ des données de débogage mais elle est trop petite\n"
-#: peXXigen.c:2559
+#: peXXigen.c:2562
#, c-format
msgid ""
"\n"
@@ -9035,24 +9145,24 @@ msgstr ""
"\n"
"Il y a un répertoire de débogage dans %s à 0x%lx\n"
-#: peXXigen.c:2566
+#: peXXigen.c:2569
#, c-format
msgid "The debug data size field in the data directory is too big for the section"
msgstr "Le champ de taille des données de débogage dans le répertoire de données est trop grand pour la section"
# RVA = Adresse Virtuelle Relative mais AVR semble inconnu sur internet. Gageons que les utilisateurs trouverons plus
# facilement la signification de RVA dans ce contexte.
-#: peXXigen.c:2571
+#: peXXigen.c:2574
#, c-format
msgid "Type Size Rva Offset\n"
msgstr "Type Taille Rva Décalage\n"
-#: peXXigen.c:2618
+#: peXXigen.c:2621
#, c-format
msgid "(format %c%c%c%c signature %s age %ld)\n"
msgstr "(format %c%c%c%c signature %s age %ld)\n"
-#: peXXigen.c:2628
+#: peXXigen.c:2631
#, c-format
msgid "The debug directory size is not a multiple of the debug directory entry size\n"
msgstr "La taille du répertoire de débogage n'est pas un multiple de la taille d'une entrée du répertoire de débogage\n"
@@ -9060,7 +9170,7 @@ msgstr "La taille du répertoire de débogage n'est pas un multiple de la taille
#. The MS dumpbin program reportedly ands with 0xff0f before
#. printing the characteristics field. Not sure why. No reason to
#. emulate it here.
-#: peXXigen.c:2712
+#: peXXigen.c:2715
#, c-format
msgid ""
"\n"
@@ -9069,91 +9179,147 @@ msgstr ""
"\n"
"Caractéristiques 0x%x\n"
-#: peXXigen.c:2989
+#: peXXigen.c:2992
#, c-format
msgid "%pB: Data Directory (%lx bytes at %<PRIx64>) extends across section boundary at %<PRIx64>"
msgstr "%pB: Le répertoire de données (%lx octets à %<PRIx64>) s'étend au delà de la frontière de section à %<PRIx64>"
-#: peXXigen.c:3026
+#: peXXigen.c:3029
msgid "failed to update file offsets in debug directory"
msgstr "échec lors de la mise à jour des décalages du fichier dans le répertoire de débogage"
-#: peXXigen.c:3034
+#: peXXigen.c:3037
#, c-format
msgid "%pB: failed to read debug data section"
msgstr "%pB: échec lors de la lecture de la section des données de débogage"
-#: peXXigen.c:3833
+#: peXXigen.c:3836
#, c-format
msgid ".rsrc merge failure: duplicate string resource: %d"
msgstr "échec de la fusion de .rsrc: ressource chaîne dupliquée: %d"
-#: peXXigen.c:3968
+#: peXXigen.c:3971
msgid ".rsrc merge failure: multiple non-default manifests"
msgstr "échec de la fusion de .rsrc: plusieurs manifestes pas par défaut"
-#: peXXigen.c:3986
+#: peXXigen.c:3989
msgid ".rsrc merge failure: a directory matches a leaf"
msgstr "échec de la fusion de .rsrc: un répertoire correspond à une feuille"
-#: peXXigen.c:4028
+#: peXXigen.c:4031
msgid ".rsrc merge failure: duplicate leaf"
msgstr "échec de la fusion de .rsrc: feuille dupliquée"
-#: peXXigen.c:4033
+#: peXXigen.c:4036
#, c-format
msgid ".rsrc merge failure: duplicate leaf: %s"
msgstr "échec de la fusion .rsrc: feuille dupliquée: %s"
-#: peXXigen.c:4100
+#: peXXigen.c:4103
msgid ".rsrc merge failure: dirs with differing characteristics"
msgstr "échec de la fusion .rsrc: répertoires avec des caractéristiques différentes"
-#: peXXigen.c:4107
+#: peXXigen.c:4110
msgid ".rsrc merge failure: differing directory versions"
msgstr "échec de la fusion de .rsrc: versions de répertoires différentes"
#. Corrupted .rsrc section - cannot merge.
-#: peXXigen.c:4224
+#: peXXigen.c:4227
#, c-format
msgid "%pB: .rsrc merge failure: corrupt .rsrc section"
msgstr "%pB: échec de la fusion de .rsrc: section .rsrc corrompue"
-#: peXXigen.c:4232
+#: peXXigen.c:4235
#, c-format
msgid "%pB: .rsrc merge failure: unexpected .rsrc size"
msgstr "%pB: échec de la fusion de .rsrc: taille de .rsrc inattendue"
-#: peXXigen.c:4371
+#: peXXigen.c:4374
#, c-format
msgid "%pB: unable to fill in DataDictionary[1] because .idata$2 is missing"
msgstr "%pB: impossible de remplir DataDictionary[1] car .idata$2 est manquant"
-#: peXXigen.c:4391
+#: peXXigen.c:4394
#, c-format
msgid "%pB: unable to fill in DataDictionary[1] because .idata$4 is missing"
msgstr "%pB: impossible de remplir DataDictionary[1] car .idata$4 est manquant"
-#: peXXigen.c:4412
+#: peXXigen.c:4415
#, c-format
msgid "%pB: unable to fill in DataDictionary[12] because .idata$5 is missing"
msgstr "%pB: impossible de remplir DataDictionary[12] car .idata$5 est manquant"
-#: peXXigen.c:4432
+#: peXXigen.c:4435
#, c-format
msgid "%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)] because .idata$6 is missing"
msgstr "%pB: impossible de remplir DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)] car .idata$6 est manquant"
-#: peXXigen.c:4474
+#: peXXigen.c:4477
#, c-format
msgid "%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE(12)] because .idata$6 is missing"
msgstr "%pB: impossible de remplir DataDictionary[PE_IMPORT_ADDRESS_TABLE(12)] car .idata$6 est manquant"
-#: peXXigen.c:4499
+#: peXXigen.c:4502
#, c-format
msgid "%pB: unable to fill in DataDictionary[9] because __tls_used is missing"
msgstr "%pB: impossible de remplir DataDictionary[9] car __tls_used est manquant"
+#~ msgid "%pB: TLS relocation at (0x%"
+#~ msgstr "%pB: réadressage TLS à (0x%"
+
+#~ msgid "%pB: warning: line number count (%#lx) exceeds section size (%#lx)"
+#~ msgstr "%pB: attention: le décompte du nombre de lignes (%#lx) dépasse la taille de la section (%#lx)"
+
+#~ msgid "internal error: RL78 reloc stack overflow"
+#~ msgstr "erreur interne: débordement de la pile de réadressages RL78"
+
+#~ msgid ""
+#~ "%s branch %lu\n"
+#~ " branch toc adj %lu\n"
+#~ " branch notoc %lu\n"
+#~ " branch both %lu\n"
+#~ " long branch %lu\n"
+#~ " long toc adj %lu\n"
+#~ " long notoc %lu\n"
+#~ " long both %lu\n"
+#~ " plt call %lu\n"
+#~ " plt call save %lu\n"
+#~ " plt call notoc %lu\n"
+#~ " plt call both %lu\n"
+#~ " global entry %lu"
+#~ msgstr ""
+#~ "%s branchements %lu\n"
+#~ " aj. branchements toc %lu\n"
+#~ " branchements notoc %lu\n"
+#~ " branchements les deux %lu\n"
+#~ " long branchements %lu\n"
+#~ " aj. long toc %lu\n"
+#~ " long notoc %lu\n"
+#~ " long les deux %lu\n"
+#~ " appels plt %lu\n"
+#~ " appels plt save %lu\n"
+#~ " appels plt notoc %lu\n"
+#~ " appels plt les deux %lu\n"
+#~ " entrées globales %lu"
+
+#~ msgid "warning: %pB is truncated: expected core file size >= %<PRIu64>, found: %<PRIu64>"
+#~ msgstr "attention: %pB est tronqué: taille attendue du cœur du fichier >= %<PRIu64>, obtenu: %<PRIu64>"
+
+#~ msgid "-march=%s: expect number after `%dp'"
+#~ msgstr "-march=%s: nombre attendu après « %dp »"
+
+#~ msgid "-march=%s: rv%de is not a valid base ISA"
+#~ msgstr "-march=%s: rv%de n'est pas une base ISA valable"
+
+#~ msgid " Error: length larger than remaining space in record\n"
+#~ msgstr " Erreur: longueur plus grande que l'espace restant dans l'enregistrement\n"
+
+#~ msgid "STA_QW (stack quadword) 0x%08x %08x\n"
+#~ msgstr "STA_QW (pile quad mot) 0x%08x %08x\n"
+
+#~ msgid "%pB: error: erratum 843419 immediate 0x%"
+#~ msgstr "%pB: erreur: erratum 843419 immédiat 0x%"
+
#~ msgid "%pA has both ordered [`%pA' in %pB] and unordered [`%pA' in %pB] sections"
#~ msgstr "%pA a, à la fois, des sections ordonnées [« %pA » dans %pB] et désordonnées [« %pA » dans %pB]"
diff --git a/bfd/po/ro.po b/bfd/po/ro.po
index 372c84320f2..1e863d4b7a9 100644
--- a/bfd/po/ro.po
+++ b/bfd/po/ro.po
@@ -1,530 +1,794 @@
-# Mesajele în limba românã pentru pachetul bfd.
+# Mesajele în limba română pentru pachetul bfd.
# Copyright (C) 2003 Free Software Foundation, Inc.
+# This file is distributed under the same license as the binutils package.
+#
# Eugen Hoanca <eugenh@urban-grafx.ro>, 2003.
+# Traducere făcută de EH, pentru versiunea bfd 2.14rel030712
+# Actualizare a mesajelor, de la fiÈ™ierul „bfd-2.36.90.potâ€.
+# Actualizare a codării caracteror, la codarea de caractere UTF-8.
+# Actualizare a diacriticelor de la „cu sedilă†la „cu virgulăâ€.
+# Actualizare a algoritmului formelor de plural (de la „două†la „treiâ€).
+# NU și a mesajelor traduse (acestea au rămas neschimbate).
+# Eliminare a mesajelor ce-au dispărut în ultima versiune.
+# Actualizări realizate de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>, 15.01.2022.
#
msgid ""
msgstr ""
-"Project-Id-Version: bfd 2.14rel030712\n"
-"POT-Creation-Date: 2003-07-11 13:53+0930\n"
-"PO-Revision-Date: 2003-11-25 08:39+0200\n"
-"Last-Translator: Eugen Hoanca <eugenh@urban-grafx.ro>\n"
+"Project-Id-Version: bfd 2.37.90\n"
+"Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n"
+"POT-Creation-Date: 2022-01-22 12:19+0000\n"
+"PO-Revision-Date: 2022-01-23 16:50+0100\n"
+"Last-Translator: Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>\n"
"Language-Team: Romanian <translation-team-ro@lists.sourceforge.net>\n"
-"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Language: ro\n"
"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=ISO-8859-2\n"
+"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2);\n"
+"X-Generator: Poedit 2.3.1\n"
-#: aout-adobe.c:204
-#, c-format
-msgid "%s: Unknown section type in a.out.adobe file: %x\n"
-msgstr "%s: Tip secþiune necunoscut în fiºier adobe a.out: %x\n"
-
-#: aout-cris.c:207
-#, c-format
-msgid "%s: Invalid relocation type exported: %d"
-msgstr "%s: Tip de relocare exportat invalid: %d"
+#: aout-cris.c:196
+#, fuzzy, c-format
+msgid "%pB: unsupported relocation type exported: %#x"
+msgstr "%s: tip de relocare nesuportat 0x%02x"
-#: aout-cris.c:251
-#, c-format
-msgid "%s: Invalid relocation type imported: %d"
-msgstr "%s: Tip de relocare importat invalid: %d"
+#: aout-cris.c:242
+#, fuzzy, c-format
+msgid "%pB: unsupported relocation type imported: %#x"
+msgstr "%s: tip de relocare nesuportat: %s"
-#: aout-cris.c:262
-#, c-format
-msgid "%s: Bad relocation record imported: %d"
-msgstr "%s: Înregistrare de relocare greºitã importatã: %d"
+#: aout-cris.c:254
+#, fuzzy, c-format
+msgid "%pB: bad relocation record imported: %d"
+msgstr "%s: Înregistrare de relocare greșită importată: %d"
-#: aoutx.h:1295 aoutx.h:1716
-#, c-format
-msgid "%s: can not represent section `%s' in a.out object file format"
-msgstr "%s: nu se poate reprezenta secþiunea `%s' în format de fiºier obiect a.out"
+#: aoutx.h:1265 aoutx.h:1612 pdp11.c:1238 pdp11.c:1511
+#, fuzzy, c-format
+msgid "%pB: can not represent section `%pA' in a.out object file format"
+msgstr "%s: nu se poate reprezenta secțiunea `%s' în format de fișier obiect a.out"
-#: aoutx.h:1682
-#, c-format
-msgid "%s: can not represent section for symbol `%s' in a.out object file format"
-msgstr "%s: nu se poate reprezenta secþiunea pentru simbolul `%s' în formatul de fiºier obiect a.out"
+#: aoutx.h:1576 pdp11.c:1483
+#, fuzzy, c-format
+msgid "%pB: can not represent section for symbol `%s' in a.out object file format"
+msgstr "%s: nu se poate reprezenta secțiunea pentru simbolul `%s' în formatul de fișier obiect a.out"
-#: aoutx.h:1684
+#: aoutx.h:1579 vms-alpha.c:8282
msgid "*unknown*"
msgstr "*necunoscut*"
-#: aoutx.h:3776
+#: aoutx.h:1715 pdp11.c:1579
+#, fuzzy, c-format
+msgid "%pB: invalid string offset %<PRIu64> >= %<PRIu64>"
+msgstr "%s: offset de șir invalid %u >= %lu pentru secțiunea `%s'"
+
+#: aoutx.h:1962
+#, fuzzy, c-format
+msgid "%pB: unsupported AOUT relocation size: %d"
+msgstr "%s: tip de relocare nesuportat: %s"
+
+#: aoutx.h:2412 aoutx.h:2430 pdp11.c:2060
#, c-format
-msgid "%s: relocatable link from %s to %s not supported"
-msgstr "%s: legãtura relocalizabilã din %s cãtre %s nesuportatã"
+msgid "%pB: attempt to write out unknown reloc type"
+msgstr ""
+
+#: aoutx.h:4085 pdp11.c:3441
+#, fuzzy, c-format
+msgid "%pB: unsupported relocation type"
+msgstr "%s: tip de relocare nesuportat: %s"
+
+#. Unknown relocation.
+#: aoutx.h:4405 coff-alpha.c:601 coff-alpha.c:1518 coff-mips.c:356
+#: coff-rs6000.c:2959 coff-sh.c:504 coff-tic4x.c:184 coff-tic54x.c:279
+#: elf-hppa.h:798 elf-hppa.h:826 elf-m10200.c:226 elf-m10300.c:813
+#: elf32-arc.c:532 elf32-arm.c:1985 elf32-avr.c:962 elf32-bfin.c:1066
+#: elf32-bfin.c:4690 elf32-cr16.c:654 elf32-cr16.c:684 elf32-cris.c:467
+#: elf32-crx.c:429 elf32-csky.c:991 elf32-d10v.c:234 elf32-d30v.c:522
+#: elf32-d30v.c:544 elf32-dlx.c:546 elf32-epiphany.c:372 elf32-fr30.c:381
+#: elf32-frv.c:2559 elf32-frv.c:6240 elf32-ft32.c:305 elf32-h8300.c:302
+#: elf32-i386.c:394 elf32-ip2k.c:1240 elf32-iq2000.c:442 elf32-lm32.c:496
+#: elf32-m32c.c:305 elf32-m32r.c:1286 elf32-m32r.c:1311 elf32-m32r.c:2209
+#: elf32-m68hc11.c:390 elf32-m68hc12.c:510 elf32-m68k.c:354 elf32-mcore.c:354
+#: elf32-mcore.c:440 elf32-mep.c:385 elf32-metag.c:871 elf32-microblaze.c:690
+#: elf32-microblaze.c:961 elf32-mips.c:2231 elf32-moxie.c:137
+#: elf32-msp430.c:737 elf32-msp430.c:747 elf32-mt.c:241 elf32-nds32.c:3234
+#: elf32-nds32.c:3255 elf32-nds32.c:5024 elf32-nios2.c:3019 elf32-or1k.c:1070
+#: elf32-pj.c:326 elf32-ppc.c:900 elf32-ppc.c:913 elf32-pru.c:423
+#: elf32-rl78.c:291 elf32-rx.c:324 elf32-rx.c:333 elf32-s12z.c:296
+#: elf32-s390.c:347 elf32-score.c:2383 elf32-score7.c:2224 elf32-sh.c:437
+#: elf32-spu.c:163 elf32-tic6x.c:1498 elf32-tic6x.c:1508 elf32-tic6x.c:1527
+#: elf32-tic6x.c:1537 elf32-tic6x.c:2583 elf32-tilepro.c:792 elf32-v850.c:1902
+#: elf32-v850.c:1924 elf32-v850.c:4249 elf32-vax.c:289 elf32-visium.c:481
+#: elf32-wasm32.c:105 elf32-xc16x.c:250 elf32-xgate.c:418
+#: elf32-xstormy16.c:395 elf32-xtensa.c:522 elf32-xtensa.c:556 elf32-z80.c:331
+#: elf64-alpha.c:1114 elf64-alpha.c:4073 elf64-alpha.c:4221 elf64-bpf.c:325
+#: elf64-ia64-vms.c:255 elf64-ia64-vms.c:3425 elf64-mips.c:3958
+#: elf64-mips.c:3974 elf64-mmix.c:1264 elf64-nfp.c:238 elf64-ppc.c:1027
+#: elf64-ppc.c:1381 elf64-ppc.c:1390 elf64-s390.c:328 elf64-s390.c:378
+#: elf64-x86-64.c:268 elfn32-mips.c:3788 elfxx-ia64.c:324
+#: elfxx-loongarch.c:632 elfxx-riscv.c:969 elfxx-sparc.c:589 elfxx-sparc.c:639
+#: elfxx-tilegx.c:907 elfxx-tilegx.c:947 elfnn-aarch64.c:2215
+#: elfnn-aarch64.c:2313 elfnn-ia64.c:214 elfnn-ia64.c:3820
+#, fuzzy, c-format
+msgid "%pB: unsupported relocation type %#x"
+msgstr "%s: tip de relocare nesuportat: %s"
+
+#: aoutx.h:5432 pdp11.c:3864
+#, fuzzy, c-format
+msgid "%pB: relocatable link from %s to %s not supported"
+msgstr "%s: legătura relocalizabilă din %s către %s nesuportată"
+
+#: arc-got.h:69
+#, fuzzy, c-format
+msgid "%pB: cannot allocate memory for local GOT entries"
+msgstr "nu există destul spațiu GOT pentru intrările GOT locale"
+
+#: archive.c:743
+msgid "%F%P: %pB(%s): error opening thin archive member: %E\n"
+msgstr ""
+
+#: archive.c:2272
+#, fuzzy
+msgid "warning: writing archive was slow: rewriting timestamp"
+msgstr "Avertisment: scrierea arhivei a fost lentă: se rescrie marcajul de timp(timestamp)\n"
-#: archive.c:1751
-msgid "Warning: writing archive was slow: rewriting timestamp\n"
-msgstr "Avertisment: scrierea arhivei a fost lentã: se rescrie marcajul de timp(timestamp)\n"
+#: archive.c:2339 archive.c:2400 elflink.c:4756 linker.c:1429
+#, c-format
+msgid "%pB: plugin needed to handle lto object"
+msgstr ""
-#: archive.c:2014
+#: archive.c:2626
msgid "Reading archive file mod timestamp"
-msgstr "Citirea fiºierului arhivã mod marcaj de timp"
+msgstr "Citirea fișierului arhivă mod marcaj de timp"
-#: archive.c:2040
+#: archive.c:2650
msgid "Writing updated armap timestamp"
-msgstr "Scriere marcaj de timp armap înnoit"
+msgstr "Scriere marcaj de timp armap înnoit"
-#: bfd.c:280
-msgid "No error"
+#: bfd.c:690
+#, fuzzy
+msgid "no error"
msgstr "Nici o eroare"
-#: bfd.c:281
-msgid "System call error"
+#: bfd.c:691
+#, fuzzy
+msgid "system call error"
msgstr "Eroare apel sistem"
-#: bfd.c:282
-msgid "Invalid bfd target"
-msgstr "Þintã bfd invalidã"
-
-#: bfd.c:283
-msgid "File in wrong format"
-msgstr "Fiºier în format eronat"
-
-#: bfd.c:284
-msgid "Archive object file in wrong format"
-msgstr "Fiºier obiect arhivã în format eronat"
+#: bfd.c:692
+#, fuzzy
+msgid "invalid bfd target"
+msgstr "Țintă bfd invalidă"
+
+#: bfd.c:693
+#, fuzzy
+msgid "file in wrong format"
+msgstr "Fișier în format eronat"
+
+#: bfd.c:694
+#, fuzzy
+msgid "archive object file in wrong format"
+msgstr "Fișier obiect arhivă în format eronat"
+
+#: bfd.c:695
+#, fuzzy
+msgid "invalid operation"
+msgstr "Operație invalidă"
+
+#: bfd.c:696
+#, fuzzy
+msgid "memory exhausted"
+msgstr "Memorie plină"
+
+#: bfd.c:697
+#, fuzzy
+msgid "no symbols"
+msgstr "Nici un simbol"
-#: bfd.c:285
-msgid "Invalid operation"
-msgstr "Operaþie invalidã"
+#: bfd.c:698
+#, fuzzy
+msgid "archive has no index; run ranlib to add one"
+msgstr "Arhiva nu are nici un index.; rulați ranlib pentru a adăuga unul"
-#: bfd.c:286
-msgid "Memory exhausted"
-msgstr "Memorie plinã"
+#: bfd.c:699
+#, fuzzy
+msgid "no more archived files"
+msgstr "Nu mai există fișiere arhivate"
-#: bfd.c:287
-msgid "No symbols"
-msgstr "Nici un simbol"
+#: bfd.c:700
+#, fuzzy
+msgid "malformed archive"
+msgstr "Arhivă malformată"
-#: bfd.c:288
-msgid "Archive has no index; run ranlib to add one"
-msgstr "Arhiva nu are nici un index.; rulaþi ranlib pentru a adãuga unul"
+#: bfd.c:701
+msgid "DSO missing from command line"
+msgstr ""
-#: bfd.c:289
-msgid "No more archived files"
-msgstr "Nu mai existã fiºiere arhivate"
+#: bfd.c:702
+#, fuzzy
+msgid "file format not recognized"
+msgstr "Formatul de fișier nu a fost recunoscut"
-#: bfd.c:290
-msgid "Malformed archive"
-msgstr "Arhivã malformatã"
+#: bfd.c:703
+#, fuzzy
+msgid "file format is ambiguous"
+msgstr "Formatul de fișier este ambiguu"
-#: bfd.c:291
-msgid "File format not recognized"
-msgstr "Formatul de fiºier nu a fost recunoscut"
+#: bfd.c:704
+#, fuzzy
+msgid "section has no contents"
+msgstr "Secțiunea nu are conținut"
-#: bfd.c:292
-msgid "File format is ambiguous"
-msgstr "Formatul de fiºier este ambiguu"
+#: bfd.c:705
+#, fuzzy
+msgid "nonrepresentable section on output"
+msgstr "Secțiune de output nereprezentabilă"
-#: bfd.c:293
-msgid "Section has no contents"
-msgstr "Secþiunea nu are conþinut"
+#: bfd.c:706
+#, fuzzy
+msgid "symbol needs debug section which does not exist"
+msgstr "Simbolul necesită secțiune de debug care nu există"
-#: bfd.c:294
-msgid "Nonrepresentable section on output"
-msgstr "Secþiune de output nereprezentabilã"
+#: bfd.c:707
+#, fuzzy
+msgid "bad value"
+msgstr "Valoare eronată"
-#: bfd.c:295
-msgid "Symbol needs debug section which does not exist"
-msgstr "Simbolul necesitã secþiune de debug care nu existã"
+#: bfd.c:708
+#, fuzzy
+msgid "file truncated"
+msgstr "Fișier trunchiat"
-#: bfd.c:296
-msgid "Bad value"
-msgstr "Valoare eronatã"
+#: bfd.c:709
+#, fuzzy
+msgid "file too big"
+msgstr "Fișier prea mare"
-#: bfd.c:297
-msgid "File truncated"
-msgstr "Fiºier trunchiat"
+#: bfd.c:710
+msgid "sorry, cannot handle this file"
+msgstr ""
-#: bfd.c:298
-msgid "File too big"
-msgstr "Fiºier prea mare"
+#: bfd.c:711
+#, c-format
+msgid "error reading %s: %s"
+msgstr ""
-#: bfd.c:299
-msgid "#<Invalid error code>"
+#: bfd.c:712
+#, fuzzy
+msgid "#<invalid error code>"
msgstr "#<Cod invalid de eroare>"
-#: bfd.c:687
+#: bfd.c:1649
#, c-format
msgid "BFD %s assertion fail %s:%d"
-msgstr "Aserþiunea BFD %s a eºuat %s:%d"
+msgstr "Aserțiunea BFD %s a eșuat %s:%d"
-#: bfd.c:703
-#, c-format
-msgid "BFD %s internal error, aborting at %s line %d in %s\n"
-msgstr "Eroare interna BFD %s, se renunþã la %s linia %d în %s\n"
+#: bfd.c:1662
+#, fuzzy, c-format
+msgid "BFD %s internal error, aborting at %s:%d in %s\n"
+msgstr "Eroare interna BFD %s, se renunță la %s linia %d în %s\n"
-#: bfd.c:707
-#, c-format
-msgid "BFD %s internal error, aborting at %s line %d\n"
-msgstr "Eroare internã BFD %s, se renunþã la %s linia %d\n"
+#: bfd.c:1667
+#, fuzzy, c-format
+msgid "BFD %s internal error, aborting at %s:%d\n"
+msgstr "Eroare internă BFD %s, se renunță la %s linia %d\n"
-#: bfd.c:709
+#: bfd.c:1669
msgid "Please report this bug.\n"
-msgstr "Vã rugãm raportaþi acest bug.\n"
+msgstr "Vă rugăm raportați acest bug.\n"
-#: bfdwin.c:202
+#: bfdwin.c:207
#, c-format
msgid "not mapping: data=%lx mapped=%d\n"
-msgstr "nu se mapeazã: data=%lx mapat =%d\n"
-
-#: bfdwin.c:205
-msgid "not mapping: env var not set\n"
-msgstr "nu se mapeazã: variabila env nu este setatã\n"
+msgstr "nu se mapează: data=%lx mapat =%d\n"
-#: binary.c:306
+#: bfdwin.c:210
#, c-format
-msgid "Warning: Writing section `%s' to huge (ie negative) file offset 0x%lx."
-msgstr "Avertisment: Scrierea secþiunii `%s' spre offset de fiºier imens (sau negativ) 0x%lx"
-
-#: coff-a29k.c:120
-msgid "Missing IHCONST"
-msgstr "IHCONST lipsã"
-
-#: coff-a29k.c:181
-msgid "Missing IHIHALF"
-msgstr "IHHALF lipsã"
+msgid "not mapping: env var not set\n"
+msgstr "nu se mapează: variabila env nu este setată\n"
-#: coff-a29k.c:213 coff-or32.c:236
-msgid "Unrecognized reloc"
-msgstr "Reloc necunoscut"
+#: binary.c:276
+#, fuzzy, c-format
+msgid "warning: writing section `%pA' at huge (ie negative) file offset"
+msgstr "Avertisment: Scrierea secțiunii `%s' spre offset de fișier imens (sau negativ) 0x%lx"
-#: coff-a29k.c:409
-msgid "missing IHCONST reloc"
-msgstr "IHCONST reloc lipsã"
+#: cache.c:271
+#, c-format
+msgid "reopening %pB: %s\n"
+msgstr ""
-#: coff-a29k.c:499
-msgid "missing IHIHALF reloc"
-msgstr "IHIHALF reloc lipsã"
+#: coff-alpha.c:450
+#, c-format
+msgid "%pB: cannot handle compressed Alpha binaries; use compiler flags, or objZ, to generate uncompressed binaries"
+msgstr ""
-#: coff-alpha.c:884 coff-alpha.c:921 coff-alpha.c:1992 coff-mips.c:1397
+#: coff-alpha.c:856 coff-alpha.c:893 coff-alpha.c:1960 coff-mips.c:960
msgid "GP relative relocation used when GP not defined"
-msgstr "Relocare relativã GP folositã când GP nu este definit"
+msgstr "Relocare relativă GP folosită când GP nu este definit"
-#: coff-alpha.c:1488
+#: coff-alpha.c:1447
msgid "using multiple gp values"
msgstr "folosire de valori multiple gp"
-#: coff-arm.c:1066 elf32-arm.h:294
-#, c-format
-msgid "%s: unable to find THUMB glue '%s' for `%s'"
-msgstr "%s: nu s-a putut gãsi legãtura(glue) THUMB `%s' pentru `%s'"
+#: coff-alpha.c:1505 coff-alpha.c:1511 elf.c:9527 elf32-mcore.c:100
+#: elf32-mcore.c:455 elf32-ppc.c:7649 elf32-ppc.c:8841 elf64-ppc.c:16679
+#, fuzzy, c-format
+msgid "%pB: %s unsupported"
+msgstr "%s: nesuportat"
-#: coff-arm.c:1096 elf32-arm.h:329
-#, c-format
-msgid "%s: unable to find ARM glue '%s' for `%s'"
-msgstr "%s: nu s-a putut gãsi legãtura(glue) ARM `%s' pentru `%s'"
+#: coff-go32.c:164 coffswap.h:819
+#, fuzzy, c-format
+msgid "%pB: warning: %s: line number overflow: 0x%lx > 0xffff"
+msgstr "%s: avertisment: %s: depășire(overflow) număr de linii: 0x%lx > 0xffff"
-#: 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): avertisment: interlucrul(interworking) nu este activat"
+#: coff-mips.c:650 elf32-mips.c:1744 elf32-score.c:433 elf32-score7.c:333
+#: elf64-mips.c:3451 elfn32-mips.c:3278
+msgid "GP relative relocation when _gp not defined"
+msgstr "Relocare relativă GP atâta timp cât _gp nu este definit"
-#: coff-arm.c:1398 elf32-arm.h:1002
+#: coff-rs6000.c:484 coff64-rs6000.c:377
#, c-format
-msgid " first occurrence: %s: arm call to thumb"
-msgstr " prima gãsire: %s: apelare braþ(arm) cãtre deget(thumb)"
+msgid "%pB: unsupported swap_aux_in for storage class %#x"
+msgstr ""
-#: coff-arm.c:1493 elf32-arm.h:895
+#: coff-rs6000.c:571 coff64-rs6000.c:497
#, c-format
-msgid " first occurrence: %s: thumb call to arm"
-msgstr " prima gãsire: %s: apelare deget(thumb) cãtre braþ(arm)"
+msgid "%pB: unsupported swap_aux_out for storage class %#x"
+msgstr ""
-#: coff-arm.c:1496
-msgid " consider relinking with --support-old-code enabled"
-msgstr " luaþi în considerare relinkuirea cu --support-old-code activat"
+#: coff-rs6000.c:3045
+#, fuzzy, c-format
+msgid "%pB: TOC reloc at %#<PRIx64> to symbol `%s' with no TOC entry"
+msgstr "%s: relocare TOC la 0x%x către simbolul `%s' fără nici o intrare TOC"
-#: coff-arm.c:1788 coff-tic80.c:687 cofflink.c:3038
+#: coff-rs6000.c:3260
+#, fuzzy, c-format
+msgid "%pB: TLS relocation at 0x%s over non-TLS symbol %s (0x%x)\n"
+msgstr "%s: relocare @gprel pe simbolul dinamic %s"
+
+#: coff-rs6000.c:3276
+#, fuzzy, c-format
+msgid "%pB: TLS local relocation at 0x%s over imported symbol %s\n"
+msgstr "%s: tip de relocare invalid %d"
+
+#: coff-rs6000.c:3686
#, c-format
-msgid "%s: bad reloc address 0x%lx in section `%s'"
-msgstr "%s: adresã eronatã de relocare 0x%lx în secþiunea `%s'"
+msgid "%pB: relocation (%d) at 0x%s has wrong r_rsize (0x%x)\n"
+msgstr ""
+
+#: coff-rs6000.c:3949 coff64-rs6000.c:2000
+#, fuzzy, c-format
+msgid "%pB: symbol `%s' has unrecognized smclas %d"
+msgstr "%s: simbolul `%s' are un smclas necunoscut %d"
+
+#: coff-sh.c:778 elf32-sh.c:520
+#, fuzzy, c-format
+msgid "%pB: %#<PRIx64>: warning: bad R_SH_USES offset"
+msgstr "%s: 0x%lx: avertisment: offset R_SH_USES invalid"
+
+#: coff-sh.c:789
+#, fuzzy, c-format
+msgid "%pB: %#<PRIx64>: warning: R_SH_USES points to unrecognized insn %#x"
+msgstr "%s: 0x%lx: avertisment: R_SH_USES trimite către insn necunoscut 0x%x"
+
+#: coff-sh.c:807 elf32-sh.c:551
+#, fuzzy, c-format
+msgid "%pB: %#<PRIx64>: warning: bad R_SH_USES load offset"
+msgstr "%s: 0x%lx: avertisment:offset de încărcare R_SH_USES invalid"
+
+#: coff-sh.c:832 elf32-sh.c:567
+#, fuzzy, c-format
+msgid "%pB: %#<PRIx64>: warning: could not find expected reloc"
+msgstr "%s: 0x%lx: avertismetn: nu s-a putut găsi relocarea așteptată"
+
+#: coff-sh.c:849 elf32-sh.c:596
+#, fuzzy, c-format
+msgid "%pB: %#<PRIx64>: warning: symbol in unexpected section"
+msgstr "%s: 0x%lx: avertisment: simbol în secțiune neașteptată"
+
+#: coff-sh.c:975 elf32-sh.c:726
+#, fuzzy, c-format
+msgid "%pB: %#<PRIx64>: warning: could not find expected COUNT reloc"
+msgstr "%s: 0x%lx: avertisment: nu s-a putut găsi relocarea COUNT așteptată"
+
+#: coff-sh.c:985 elf32-sh.c:737
+#, fuzzy, c-format
+msgid "%pB: %#<PRIx64>: warning: bad count"
+msgstr "%s: 0x%lx: avertisment: numărătoare(count) invalidă"
-#: coff-arm.c:2132
+#: coff-sh.c:1356 coff-sh.c:2644 elf32-sh.c:1137 elf32-sh.c:1504
+#, fuzzy, c-format
+msgid "%pB: %#<PRIx64>: fatal: reloc overflow while relaxing"
+msgstr "%s: 0x%lx: fatal: relocare depășită(overflow) în timpul relaxării"
+
+#: coff-sh.c:1451
#, c-format
-msgid "%s: illegal symbol index in reloc: %d"
-msgstr "%s: index ilegal de simbol în reloc: %d"
+msgid "%pB: fatal: generic symbols retrieved before relaxing"
+msgstr ""
+
+#: coff-sh.c:2781 cofflink.c:2963
+#, fuzzy, c-format
+msgid "%pB: illegal symbol index %ld in relocs"
+msgstr "%s: avertisment: index ilegal de simbol %ld în relocări"
+
+#: coff-tic30.c:172 coff-tic4x.c:228 coff-tic54x.c:366 coff-z80.c:325
+#: coff-z8k.c:188 coffcode.h:5157
+#, fuzzy, c-format
+msgid "%pB: warning: illegal symbol index %ld in relocs"
+msgstr "%s: avertisment: index ilegal de simbol %ld în relocări"
-#: coff-arm.c:2265
+#: coff64-rs6000.c:447 coff64-rs6000.c:554
#, c-format
-msgid "ERROR: %s is compiled for APCS-%d, whereas %s is compiled for APCS-%d"
-msgstr "EROARE: %s este compilat pentru APCS-%d, pe când %s e compilat pentru APCS-%d"
+msgid "%pB: C_STAT isn't supported by XCOFF64"
+msgstr ""
-#: coff-arm.c:2280 elf32-arm.h:2328
+#: coff64-rs6000.c:477
#, c-format
-msgid "ERROR: %s passes floats in float registers, whereas %s passes them in integer registers"
-msgstr "EROARE: %s trimite float în regiºtrii de float, pe când %s îi trimite în regiºtrii de integer"
+msgid "%pB: wrong auxtype %#x for storage class %#x"
+msgstr ""
-#: coff-arm.c:2283 elf32-arm.h:2333
+#: coff64-rs6000.c:1572
+#, fuzzy
+msgid "%pB: relocation (%d) at (0x%"
+msgstr "%s: tip de relocare invalid %d"
+
+#: coffcode.h:990
+#, fuzzy, c-format
+msgid "%pB: unable to load COMDAT section name"
+msgstr "nu se poate citi în secțiunea %s din %s"
+
+#. Malformed input files can trigger this test.
+#. cf PR 21781.
+#: coffcode.h:1025
+#, fuzzy, c-format
+msgid "%pB: error: unexpected symbol '%s' in COMDAT section"
+msgstr "%s: sym nedefinit `%s' în secțiune .opd"
+
+#: coffcode.h:1037
+#, fuzzy, c-format
+msgid "%pB: warning: COMDAT symbol '%s' does not match section name '%s'"
+msgstr "%s: avertisment: adăugarea GOT a %ld în `%s' nu se potrivește adăugării GOT anterioare a %ld"
+
+#: coffcode.h:1047
+#, fuzzy, c-format
+msgid "%pB: warning: no symbol for section '%s' found"
+msgstr "%s: avertisment: secțiunea alocată `%s' nu este în segment"
+
+#. 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:1278
+#, fuzzy, c-format
+msgid "%pB: warning: ignoring section flag %s in section %s"
+msgstr "avertisment: nu se poate seta mărimea secțiunii %s în %s"
+
+#: coffcode.h:1347
+#, fuzzy, c-format
+msgid "%pB (%s): section flag %s (%#lx) ignored"
+msgstr "%s (%s): Marcajul(flag) de secțiune %s (0x%x) ignorat"
+
+#: coffcode.h:1960
+#, c-format
+msgid "%pB: overflow reloc count too small"
+msgstr ""
+
+#: coffcode.h:1969 coffcode.h:2034
#, c-format
-msgid "ERROR: %s passes floats in integer registers, whereas %s passes them in float registers"
-msgstr "EROARE: %s trimite integer în regiºtrii de integer, pe când %s îi trimite în regiºtrii de float"
+msgid "%pB: warning: claims to have 0xffff relocs, without overflow"
+msgstr ""
+
+#: coffcode.h:2401
+#, fuzzy, c-format
+msgid "unrecognized TI COFF target id '0x%x'"
+msgstr "Id țintă TI COFF necunoscut `0x%x'"
+
+#: coffcode.h:2679
+#, fuzzy, c-format
+msgid "%pB: reloc against a non-existent symbol index: %ld"
+msgstr "%s:relocare registru pentru simbolul non-registru: %s în %s"
-#: coff-arm.c:2298
+#: coffcode.h:2983
#, c-format
-msgid "ERROR: %s is compiled as position independent code, whereas target %s is absolute position"
-msgstr "EROARE: %s este compilat ca ºi cod independent de poziþie,pe când þinta %seste poziþie absolutã"
+msgid "%pB: page size is too large (0x%x)"
+msgstr ""
-#: coff-arm.c:2301
+#: coffcode.h:3143
#, c-format
-msgid "ERROR: %s is compiled as absolute position code, whereas target %s is position independent"
-msgstr "EROARE: %s este compilat ca ºi cod poziþie absolutã,pe când þinta %seste independentã de poziþie"
+msgid "%pB: too many sections (%d)"
+msgstr ""
-#: coff-arm.c:2330 elf32-arm.h:2405
+#: coffcode.h:3570
#, c-format
-msgid "Warning: %s supports interworking, whereas %s does not"
-msgstr "Avertisment: %s suportã interlucru(interworking), pe când %s nu suportã"
+msgid "%pB: section %pA: string table overflow at offset %ld"
+msgstr ""
-#: coff-arm.c:2333 elf32-arm.h:2412
+#: coffcode.h:3677
#, c-format
-msgid "Warning: %s does not support interworking, whereas %s does"
-msgstr "Avertisment: %s nu suportã interlucru(interworking), pe când %s suportã"
+msgid "%pB:%s section %s: alignment 2**%u not representable"
+msgstr ""
-#: coff-arm.c:2360
+#: coffcode.h:4393
#, c-format
-msgid "private flags = %x:"
-msgstr "marcaje(flags) private = %x:"
+msgid "%pB: warning: line number table read failed"
+msgstr ""
-#: coff-arm.c:2368 elf32-arm.h:2467
-msgid " [floats passed in float registers]"
-msgstr " [floats trecuþi în regiºtri de float]"
+#: coffcode.h:4439 coffcode.h:4453
+#, fuzzy, c-format
+msgid "%pB: warning: illegal symbol index 0x%lx in line number entry %d"
+msgstr "%s: avertisment: index ilegal de simbol %ld în numărul de linii"
+
+#: coffcode.h:4467
+#, fuzzy, c-format
+msgid "%pB: warning: illegal symbol in line number entry %d"
+msgstr "%s: avertisment: index ilegal de simbol %ld în numărul de linii"
+
+#: coffcode.h:4480
+#, fuzzy, c-format
+msgid "%pB: warning: duplicate line number information for `%s'"
+msgstr "%s: avertisment: informație duplicat a numărului de linii pentru `%s'"
+
+#: coffcode.h:4901
+#, fuzzy, c-format
+msgid "%pB: unrecognized storage class %d for %s symbol `%s'"
+msgstr "%s: Clasă de depozitare(storage) %d necunoscută pentru %s simbolul `%s'"
+
+#: coffcode.h:5041
+#, fuzzy, c-format
+msgid "warning: %pB: local symbol `%s' has no section"
+msgstr "avertisment: %s: simbolul local `%s' nu are secțiune"
+
+#: coffcode.h:5197
+#, fuzzy, c-format
+msgid "%pB: illegal relocation type %d at address %#<PRIx64>"
+msgstr "%s: tip ilegal de relocare %d la adresa 0x%lx"
-#: coff-arm.c:2370
-msgid " [floats passed in integer registers]"
-msgstr " [floats trecuþi în regiºtrii de integer]"
+#: coffgen.c:179 elf.c:1239
+#, fuzzy, c-format
+msgid "%pB: unable to initialize compress status for section %s"
+msgstr "avertisment: nu se poate seta mărimea secțiunii %s în %s"
-#: coff-arm.c:2373 elf32-arm.h:2470
-msgid " [position independent]"
-msgstr "[ independent de poziþie]"
+#: coffgen.c:203 elf.c:1250
+#, c-format
+msgid "%pB: unable to initialize decompress status for section %s"
+msgstr ""
-#: coff-arm.c:2375
-msgid " [absolute position]"
-msgstr " [poziþie absolutã]"
+#: coffgen.c:1760
+#, fuzzy, c-format
+msgid "%pB: bad string table size %<PRIu64>"
+msgstr "%s: mărime tabel șiruri invalidă %lu"
-#: coff-arm.c:2379
-msgid " [interworking flag not initialised]"
-msgstr " [marcajul(flag) de interlucru(interworking) nu este iniþializat]"
+#: coffgen.c:1932 coffgen.c:1976 coffgen.c:2025 coffgen.c:2043 cofflink.c:2024
+#: elf.c:1939 xcofflink.c:4658
+msgid "<corrupt>"
+msgstr ""
-#: coff-arm.c:2381
-msgid " [interworking supported]"
-msgstr " [interlucru(interworking) suportat]"
+#: coffgen.c:2176
+#, fuzzy, c-format
+msgid "<corrupt info> %s"
+msgstr "secțiune coruptă %s în %s"
-#: coff-arm.c:2383
-msgid " [interworking not supported]"
-msgstr " [interlucru(interworking) nesuportat]"
+#: coffgen.c:2781 elflink.c:15042 linker.c:2967
+msgid "%F%P: already_linked_table: %E\n"
+msgstr ""
-#: coff-arm.c:2431 elf32-arm.h:2150
+#: coffgen.c:3123 elflink.c:14017
#, c-format
-msgid "Warning: Not setting interworking flag of %s since it has already been specified as non-interworking"
-msgstr "Avertisment: Nu se seteazã marcajul(flagu) de interlucru(interworking) al %s atâta timp cât a fost specificat ca non-interlucru(interworking)"
+msgid "removing unused section '%pA' in file '%pB'"
+msgstr ""
-#: coff-arm.c:2435 elf32-arm.h:2154
-#, c-format
-msgid "Warning: Clearing the interworking flag of %s due to outside request"
-msgstr "Avertisment: Se ºterge marcajul(flag) de interlucru(interworking) al %s datoritã unei cereri din afarã"
+#: coffgen.c:3200 elflink.c:14247
+#, fuzzy
+msgid "warning: gc-sections option ignored"
+msgstr "avertisment: secțiunea %s are mărime zero"
+
+#: cofflink.c:366
+#, fuzzy, c-format
+msgid "warning: symbol `%s' is both section and non-section"
+msgstr "avertisment: %s: simbolul local `%s' nu are secțiune"
-#: coff-h8300.c:1096
+#: cofflink.c:471 elf64-ia64-vms.c:5196 elflink.c:5353
+#, fuzzy, c-format
+msgid "warning: type of symbol `%s' changed from %d to %d in %pB"
+msgstr "Avertisment: tipul de simbol `%s' schimbat de la %d la %d în %s"
+
+#: cofflink.c:2352
+#, fuzzy, c-format
+msgid "%pB: relocs in section `%pA', but it has no contents"
+msgstr "%s: relocări în secțiunea `%s', dar fără conținut"
+
+#: cofflink.c:2415 elflink.c:11470
#, c-format
-msgid "cannot handle R_MEM_INDIRECT reloc when using %s output"
-msgstr "nu am putut mainpula(handle) relocarea R_MEM_INDIRECT în folosirea ieºirii(output) %s"
+msgid "%X`%s' referenced in section `%pA' of %pB: defined in discarded section `%pA' of %pB\n"
+msgstr ""
-#: coff-i960.c:137 coff-i960.c:486
-msgid "uncertain calling convention for non-COFF symbol"
-msgstr "convenþie de apelare nesigurã pentru simbol non-COFF"
+#: cofflink.c:2614
+#, c-format
+msgid "%pB: stripping non-representable symbol '%s' (value 0x%s)"
+msgstr ""
-#: coff-m68k.c:482 coff-mips.c:2394 elf32-m68k.c:2193 elf32-mips.c:1783
-msgid "unsupported reloc type"
-msgstr "tip de relocare nesuportat"
+#: cofflink.c:2732
+#, fuzzy, c-format
+msgid "%pB: %pA: reloc overflow: %#x > 0xffff"
+msgstr "%s: %s: depășire(overflow) de relocări: 0x%lx > 0xffff"
-#: coff-mips.c:839 elf32-mips.c:1088 elf64-mips.c:1590 elfn32-mips.c:1554
-msgid "GP relative relocation when _gp not defined"
-msgstr "Relocare relativã GP atâta timp cât _gp nu este definit"
+#: cofflink.c:2740
+#, fuzzy, c-format
+msgid "%pB: warning: %pA: line number overflow: %#x > 0xffff"
+msgstr "%s: avertisment: %s: depășire(overflow) număr de linii: 0x%lx > 0xffff"
-#. No other sections should appear in -membedded-pic
-#. code.
-#: coff-mips.c:2431
-msgid "reloc against unsupported section"
-msgstr "relocare pe o secþiune nesuportatã"
+#: cofflink.c:3131
+#, fuzzy, c-format
+msgid "%pB: bad reloc address %#<PRIx64> in section `%pA'"
+msgstr "%s: adresă eronată de relocare 0x%lx în secțiunea `%s'"
-#: coff-mips.c:2439
-msgid "reloc not properly aligned"
-msgstr "relocare incorect aliniatã"
+#: coffswap.h:833
+#, fuzzy, c-format
+msgid "%pB: %s: reloc overflow: 0x%lx > 0xffff"
+msgstr "%s: %s: depășire(overflow) de relocări: 0x%lx > 0xffff"
-#: coff-rs6000.c:2790
+#: compress.c:275
#, c-format
-msgid "%s: unsupported relocation type 0x%02x"
-msgstr "%s: tip de relocare nesuportat 0x%02x"
+msgid "error: %pB(%pA) section size (%#<PRIx64> bytes) is larger than file size (%#<PRIx64> bytes)"
+msgstr ""
-#: coff-rs6000.c:2883
+#: compress.c:286
#, c-format
-msgid "%s: TOC reloc at 0x%x to symbol `%s' with no TOC entry"
-msgstr "%s: relocare TOC la 0x%x cãtre simbolul `%s' fãrã nici o intrare TOC"
+msgid "error: %pB(%pA) is too large (%#<PRIx64> bytes)"
+msgstr ""
-#: coff-rs6000.c:3616 coff64-rs6000.c:2109
-#, c-format
-msgid "%s: symbol `%s' has unrecognized smclas %d"
-msgstr "%s: simbolul `%s' are un smclas necunoscut %d"
+#: cpu-arm.c:310 cpu-arm.c:322
+#, fuzzy, c-format
+msgid "error: %pB is compiled for the EP9312, whereas %pB is compiled for XScale"
+msgstr "EROARE: %s este compilat pentru EP9312, pe când %s e compilat pentru XScale"
-#: coff-tic4x.c:170 coff-tic54x.c:288 coff-tic80.c:450
-#, c-format
-msgid "Unrecognized reloc type 0x%x"
-msgstr "Tip de relocare necunoscut 0x%x"
+#: cpu-arm.c:458
+#, fuzzy, c-format
+msgid "warning: unable to update contents of %s section in %pB"
+msgstr "avertisment: imposibil de adus la zi(update) conținutul secțiunii %s în %s"
-#: coff-tic4x.c:218 coff-tic54x.c:373 coffcode.h:5045
-#, c-format
-msgid "%s: warning: illegal symbol index %ld in relocs"
-msgstr "%s: avertisment: index ilegal de simbol %ld în relocãri"
+#: dwarf2.c:552
+#, fuzzy, c-format
+msgid "DWARF error: can't find %s section."
+msgstr "Eroare Pitic(Dwarf): Nu pot găsi secțiunea debug_str"
-#: coff-w65.c:364
+#. PR 26946
+#: dwarf2.c:563
#, c-format
-msgid "ignoring reloc %s\n"
-msgstr "se ignorã reloc %s\n"
+msgid "DWARF error: section %s is larger than its filesize! (0x%lx vs 0x%lx)"
+msgstr ""
-#: coffcode.h:1108
-#, c-format
-msgid "%s (%s): Section flag %s (0x%x) ignored"
-msgstr "%s (%s): Marcajul(flag) de secþiune %s (0x%x) ignorat"
+#: dwarf2.c:598
+#, fuzzy, c-format
+msgid "DWARF error: offset (%<PRIu64>) greater than or equal to %s size (%<PRIu64>)"
+msgstr "Eroare Pitic(Dwarf): Offsetul de linie (%lu) mai mare sau egal cu mărimea .debug_line (%lu)"
-#: coffcode.h:2214
-#, c-format
-msgid "Unrecognized TI COFF target id '0x%x'"
-msgstr "Id þintã TI COFF necunoscut `0x%x'"
+#: dwarf2.c:1245
+msgid "DWARF error: info pointer extends beyond end of attributes"
+msgstr ""
-#: coffcode.h:4437
-#, c-format
-msgid "%s: warning: illegal symbol index %ld in line numbers"
-msgstr "%s: avertisment: index ilegal de simbol %ld în numãrul de linii"
+#: dwarf2.c:1394
+#, fuzzy, c-format
+msgid "DWARF error: invalid or unhandled FORM value: %#x"
+msgstr "Eroare Pitic(Dwarf): Valoare FORM invalidă sau nemanipulabilă: %u."
-#: coffcode.h:4451
-#, c-format
-msgid "%s: warning: duplicate line number information for `%s'"
-msgstr "%s: avertisment: informaþie duplicat a numãrului de linii pentru `%s'"
+#: dwarf2.c:1709
+#, fuzzy
+msgid "DWARF error: mangled line number section (bad file number)"
+msgstr "Eroare Pitic(Dwarf): secțiune număr de linii trunchiată (număr fișier eronat)"
-#: coffcode.h:4805
-#, c-format
-msgid "%s: Unrecognized storage class %d for %s symbol `%s'"
-msgstr "%s: Clasã de depozitare(storage) %d necunoscutã pentru %s simbolul `%s'"
+#: dwarf2.c:2052
+msgid "DWARF error: zero format count"
+msgstr ""
-#: coffcode.h:4938
+#: dwarf2.c:2062
#, c-format
-msgid "warning: %s: local symbol `%s' has no section"
-msgstr "avertisment: %s: simbolul local `%s' nu are secþiune"
+msgid "DWARF error: data count (%<PRIx64>) larger than buffer size"
+msgstr ""
-#: coffcode.h:5083
+#: dwarf2.c:2101
#, c-format
-msgid "%s: illegal relocation type %d at address 0x%lx"
-msgstr "%s: tip ilegal de relocare %d la adresa 0x%lx"
+msgid "DWARF error: unknown format content type %<PRIu64>"
+msgstr ""
-#: coffgen.c:1666
+#: dwarf2.c:2171
#, c-format
-msgid "%s: bad string table size %lu"
-msgstr "%s: mãrime tabel ºiruri invalidã %lu"
+msgid "DWARF error: line info section is too small (%<PRId64>)"
+msgstr ""
-#: cofflink.c:538 elflink.h:1276
+#: dwarf2.c:2198
#, c-format
-msgid "Warning: type of symbol `%s' changed from %d to %d in %s"
-msgstr "Avertisment: tipul de simbol `%s' schimbat de la %d la %d în %s"
+msgid "DWARF error: line info data is bigger (%#<PRIx64>) than the space remaining in the section (%#lx)"
+msgstr ""
-#: cofflink.c:2328
-#, c-format
-msgid "%s: relocs in section `%s', but it has no contents"
-msgstr "%s: relocãri în secþiunea `%s', dar fãrã conþinut"
+#: dwarf2.c:2211
+#, fuzzy, c-format
+msgid "DWARF error: unhandled .debug_line version %d"
+msgstr "Eroare Pitic(Dwarf): Nu pot găsi secțiunea debug_line."
-#: cofflink.c:2671 coffswap.h:890
-#, c-format
-msgid "%s: %s: reloc overflow: 0x%lx > 0xffff"
-msgstr "%s: %s: depãºire(overflow) de relocãri: 0x%lx > 0xffff"
+#: dwarf2.c:2220
+msgid "DWARF error: ran out of room reading prologue"
+msgstr ""
-#: cofflink.c:2680 coffswap.h:876
+#: dwarf2.c:2236
#, c-format
-msgid "%s: warning: %s: line number overflow: 0x%lx > 0xffff"
-msgstr "%s: avertisment: %s: depãºire(overflow) numãr de linii: 0x%lx > 0xffff"
+msgid "DWARF error: line info unsupported segment selector size %u"
+msgstr ""
-#: 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 "EROARE: %s este compilat pentru EP9312, pe când %s e compilat pentru XScale"
+#: dwarf2.c:2258
+msgid "DWARF error: invalid maximum operations per instruction"
+msgstr ""
-#: cpu-arm.c:344
-#, c-format
-msgid "warning: unable to update contents of %s section in %s"
-msgstr "avertisment: imposibil de adus la zi(update) conþinutul secþiunii %s în %s"
+#: dwarf2.c:2270
+msgid "DWARF error: ran out of room reading opcodes"
+msgstr ""
-#: dwarf2.c:380
-msgid "Dwarf Error: Can't find .debug_str section."
-msgstr "Eroare Pitic(Dwarf): Nu pot gãsi secþiunea debug_str"
+#: dwarf2.c:2438
+#, fuzzy
+msgid "DWARF error: mangled line number section"
+msgstr "Eroare Pitic(Dwarf): secțiune trunchiată număr de linii"
-#: dwarf2.c:397
-#, c-format
-msgid "Dwarf Error: DW_FORM_strp offset (%lu) greater than or equal to .debug_str size (%lu)."
-msgstr "Eroare Pitic(Dwarf): DW_FORM_strp offset (%lu) mai mare sau egalã cu mãrimea .debug_str (%lu)."
+#: dwarf2.c:2926
+msgid "DWARF error: abstract instance recursion detected"
+msgstr ""
-#: dwarf2.c:541
-msgid "Dwarf Error: Can't find .debug_abbrev section."
-msgstr "Eroare Pitic(Dwarf): Nu pot gãsi secþiunea debug_abbrev."
+#: dwarf2.c:2960 dwarf2.c:3054
+msgid "DWARF error: invalid abstract instance DIE ref"
+msgstr ""
-#: dwarf2.c:556
+#: dwarf2.c:2976
#, c-format
-msgid "Dwarf Error: Abbrev offset (%lu) greater than or equal to .debug_abbrev size (%lu)."
-msgstr "Eroare Pitic(Dwarf): Offset abbrev(%lu) mai mare sau egal cu mãrimea .debug_abbrev (%lu)."
+msgid "DWARF error: unable to read alt ref %<PRIu64>"
+msgstr ""
-#: dwarf2.c:756
+#: dwarf2.c:3032
#, c-format
-msgid "Dwarf Error: Invalid or unhandled FORM value: %u."
-msgstr "Eroare Pitic(Dwarf): Valoare FORM invalidã sau nemanipulabilã: %u."
-
-#: dwarf2.c:933
-msgid "Dwarf Error: mangled line number section (bad file number)."
-msgstr "Eroare Pitic(Dwarf): secþiune numãr de linii trunchiatã (numãr fiºier eronat)"
+msgid "DWARF error: unable to locate abstract instance DIE ref %<PRIu64>"
+msgstr ""
-#: dwarf2.c:1032
-msgid "Dwarf Error: Can't find .debug_line section."
-msgstr "Eroare Pitic(Dwarf): Nu pot gãsi secþiunea debug_line."
+#: dwarf2.c:3069 dwarf2.c:3351 dwarf2.c:3808
+#, fuzzy, c-format
+msgid "DWARF error: could not find abbrev number %u"
+msgstr "Eroare Pitic(Dwarf): Nu am putut găsi numărul abbrev: %u."
-#: dwarf2.c:1049
+#: dwarf2.c:3594
#, c-format
-msgid "Dwarf Error: Line offset (%lu) greater than or equal to .debug_line size (%lu)."
-msgstr "Eroare Pitic(Dwarf): Offsetul de linie (%lu) mai mare sau egal cu mãrimea .debug_line (%lu)"
-
-#: dwarf2.c:1255
-msgid "Dwarf Error: mangled line number section."
-msgstr "Eroare Pitic(Dwarf): secþiune trunchiatã numãr de linii"
+msgid "DWARF error: could not find variable specification at offset 0x%lx"
+msgstr ""
-#: dwarf2.c:1470 dwarf2.c:1620
-#, c-format
-msgid "Dwarf Error: Could not find abbrev number %u."
-msgstr "Eroare Pitic(Dwarf): Nu am putut gãsi numãrul abbrev: %u."
+#: dwarf2.c:3735
+#, fuzzy, c-format
+msgid "DWARF error: found dwarf version '%u', this reader only handles version 2, 3, 4 and 5 information"
+msgstr "Eroare Pitic(Dwarf): S-a găsit dwarf versiunea `%u', acest cititor manipulează doar informații ale versiunii 2."
-#: dwarf2.c:1581
-#, c-format
-msgid "Dwarf Error: found dwarf version '%u', this reader only handles version 2 information."
-msgstr "Eroare Pitic(Dwarf): S-a gãsit dwarf versiunea `%u', acest cititor manipuleazã doar informaþii ale versiunii 2."
+#: dwarf2.c:3772
+#, fuzzy, c-format
+msgid "DWARF error: found address size '%u', this reader can not handle sizes greater than '%u'"
+msgstr "Eroare Pitic(Dwarf): s-a găsit adresa mărimea `%u', acest cititor nu poate manipula mărimi mai mari decât `%u'"
-#: dwarf2.c:1588
-#, c-format
-msgid "Dwarf Error: found address size '%u', this reader can not handle sizes greater than '%u'."
-msgstr "Eroare Pitic(Dwarf): s-a gãsit adresa mãrimea `%u', acest cititor nu poate manipula mãrimi mai mari decât `%u'"
+#: dwarf2.c:3885
+msgid "DWARF error: DW_AT_comp_dir attribute encountered with a non-string form"
+msgstr ""
-#: dwarf2.c:1611
+#: ecoff.c:940
#, c-format
-msgid "Dwarf Error: Bad abbrev number: %u."
-msgstr "Eroare Pitic(Dwarf): Numãr invalid de abbrev: %u"
+msgid "%pB: warning: isymMax (%ld) is greater than ifdMax (%ld)"
+msgstr ""
-#: ecoff.c:1339
-#, c-format
-msgid "Unknown basic type %d"
-msgstr "Tip de bazã necunoscut %d"
+#: ecoff.c:1236
+#, fuzzy, c-format
+msgid "unknown basic type %d"
+msgstr "Tip de bază necunoscut %d"
-#: ecoff.c:1599
+#: ecoff.c:1492
#, c-format
msgid ""
"\n"
" End+1 symbol: %ld"
msgstr ""
"\n"
-" Simbol Sfârºit+1: %ld"
+" Simbol Sfârșit+1: %ld"
-#: ecoff.c:1606 ecoff.c:1609
+#: ecoff.c:1499 ecoff.c:1502
#, c-format
msgid ""
"\n"
@@ -533,16 +797,16 @@ msgstr ""
"\n"
" Primul simbol: %ld"
-#: ecoff.c:1621
+#: ecoff.c:1517
#, c-format
msgid ""
"\n"
" End+1 symbol: %-7ld Type: %s"
msgstr ""
"\n"
-" Simbol Sfârºit+1: %-7ld Tip: %s"
+" Simbol Sfârșit+1: %-7ld Tip: %s"
-#: ecoff.c:1628
+#: ecoff.c:1525
#, c-format
msgid ""
"\n"
@@ -551,34 +815,34 @@ msgstr ""
"\n"
" Simbol local: %ld"
-#: ecoff.c:1636
+#: ecoff.c:1533
#, c-format
msgid ""
"\n"
" struct; End+1 symbol: %ld"
msgstr ""
"\n"
-" struct; Simbol Sfârºit+1: %ld"
+" struct; Simbol Sfârșit+1: %ld"
-#: ecoff.c:1641
+#: ecoff.c:1538
#, c-format
msgid ""
"\n"
" union; End+1 symbol: %ld"
msgstr ""
"\n"
-" uniune; Simbol Sfârºit+1: %ld"
+" uniune; Simbol Sfârșit+1: %ld"
-#: ecoff.c:1646
+#: ecoff.c:1543
#, c-format
msgid ""
"\n"
" enum; End+1 symbol: %ld"
msgstr ""
"\n"
-" enum; Simbol Sfârºit+1: %ld"
+" enum; Simbol Sfârșit+1: %ld"
-#: ecoff.c:1652
+#: ecoff.c:1551
#, c-format
msgid ""
"\n"
@@ -587,58 +851,330 @@ msgstr ""
"\n"
" Tip: %s"
-#: elf-hppa.h:1458 elf-hppa.h:1491 elf-m10300.c:1628 elf64-sh64.c:1704
+#: elf-attrs.c:477
#, c-format
-msgid "%s: warning: unresolvable relocation against symbol `%s' from %s section"
-msgstr "%s: avertisment: relocare nerezolvabilã pe simbolul `%s; din secþiunea `%s'"
+msgid "%pB: error: attribute section '%pA' too big: %#llx"
+msgstr ""
-#: 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
-msgid "internal error: out of range error"
-msgstr "eroare internã: eroare depãºire de domeniu(out of range)"
+#: elf-attrs.c:514
+#, c-format
+msgid "%pB: error: attribute section length too small: %ld"
+msgstr ""
+
+#: elf-attrs.c:644
+#, c-format
+msgid "error: %pB: object has vendor-specific contents that must be processed by the '%s' toolchain"
+msgstr ""
+
+#: elf-attrs.c:654
+#, c-format
+msgid "error: %pB: object tag '%d, %s' is incompatible with tag '%d, %s'"
+msgstr ""
-#: 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
+#: elf-eh-frame.c:944
+#, c-format
+msgid "discarding zero address range FDE in %pB(%pA).\n"
+msgstr ""
+
+#: elf-eh-frame.c:1049
+#, c-format
+msgid "error in %pB(%pA); no .eh_frame_hdr table will be created"
+msgstr ""
+
+#: elf-eh-frame.c:1541
+#, c-format
+msgid "FDE encoding in %pB(%pA) prevents .eh_frame_hdr table being created"
+msgstr ""
+
+#: elf-eh-frame.c:1548
+msgid "further warnings about FDE encoding preventing .eh_frame_hdr generation dropped"
+msgstr ""
+
+#: elf-eh-frame.c:1868
+#, c-format
+msgid "%pB: %pA not in order"
+msgstr ""
+
+#: elf-eh-frame.c:1882
+#, c-format
+msgid "%pB: %pA invalid input section size"
+msgstr ""
+
+#: elf-eh-frame.c:1890
+#, c-format
+msgid "%pB: %pA points past end of text section"
+msgstr ""
+
+#: elf-eh-frame.c:2143
+msgid "DW_EH_PE_datarel unspecified for this architecture"
+msgstr ""
+
+#: elf-eh-frame.c:2314
+#, c-format
+msgid "invalid output section for .eh_frame_entry: %pA"
+msgstr ""
+
+#: elf-eh-frame.c:2337
+#, c-format
+msgid "invalid contents in %pA section"
+msgstr ""
+
+#: elf-eh-frame.c:2493
+msgid ".eh_frame_hdr entry overflow"
+msgstr ""
+
+#: elf-eh-frame.c:2495
+msgid ".eh_frame_hdr refers to overlapping FDEs"
+msgstr ""
+
+#: elf-ifunc.c:144
+#, c-format
+msgid "%F%P: dynamic STT_GNU_IFUNC symbol `%s' with pointer equality in `%pB' can not be used when making an executable; recompile with -fPIE and relink with -pie\n"
+msgstr ""
+
+#: elf-m10200.c:434 elf-m10300.c:2146 elf32-avr.c:1508 elf32-bfin.c:3137
+#: elf32-cr16.c:1429 elf32-cris.c:2034 elf32-crx.c:913 elf32-d10v.c:510
+#: elf32-epiphany.c:562 elf32-fr30.c:594 elf32-frv.c:4049 elf32-ft32.c:493
+#: elf32-h8300.c:523 elf32-ip2k.c:1477 elf32-iq2000.c:691 elf32-lm32.c:1070
+#: elf32-m32c.c:624 elf32-m32r.c:2837 elf32-m68hc1x.c:1271 elf32-mep.c:522
+#: elf32-metag.c:1984 elf32-microblaze.c:1623 elf32-moxie.c:288 elf32-mt.c:402
+#: elf32-nds32.c:6039 elf32-or1k.c:1873 elf32-score.c:2734 elf32-score7.c:2545
+#: elf32-spu.c:5084 elf32-tilepro.c:3372 elf32-v850.c:2294 elf32-visium.c:680
+#: elf32-xstormy16.c:930 elf64-bpf.c:552 elf64-mmix.c:1541 elfxx-tilegx.c:3742
+msgid "internal error: out of range error"
+msgstr "eroare internă: eroare depășire de domeniu(out of range)"
+
+#: elf-m10200.c:438 elf-m10300.c:2150 elf32-avr.c:1512 elf32-bfin.c:3141
+#: elf32-cr16.c:1433 elf32-cris.c:2038 elf32-crx.c:917 elf32-d10v.c:514
+#: elf32-fr30.c:598 elf32-frv.c:4053 elf32-ft32.c:497 elf32-h8300.c:527
+#: elf32-iq2000.c:695 elf32-lm32.c:1074 elf32-m32c.c:628 elf32-m32r.c:2841
+#: elf32-m68hc1x.c:1275 elf32-mep.c:526 elf32-metag.c:1988
+#: elf32-microblaze.c:1627 elf32-moxie.c:292 elf32-msp430.c:1510
+#: elf32-nds32.c:6043 elf32-or1k.c:1877 elf32-score.c:2738 elf32-score7.c:2549
+#: elf32-spu.c:5088 elf32-tilepro.c:3376 elf32-v850.c:2298 elf32-visium.c:684
+#: elf32-xstormy16.c:934 elf64-mmix.c:1545 elfxx-mips.c:10558
+#: elfxx-tilegx.c:3746
msgid "internal error: unsupported relocation error"
-msgstr "eroare internã: eroare de relocare nesuportatã"
+msgstr "eroare internă: eroare de relocare nesuportată"
-#: 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:442 elf32-cr16.c:1437 elf32-crx.c:921 elf32-d10v.c:518
+#: elf32-h8300.c:531 elf32-lm32.c:1078 elf32-m32r.c:2845 elf32-m68hc1x.c:1279
+#: elf32-microblaze.c:1631 elf32-nds32.c:6047 elf32-score.c:2742
+#: elf32-score7.c:2553 elf32-spu.c:5092
msgid "internal error: dangerous error"
-msgstr "eroare internã: eroare periculoasã"
-
-#: 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
+msgstr "eroare internă: eroare periculoasă"
+
+#: elf-m10200.c:446 elf-m10300.c:2167 elf32-avr.c:1520 elf32-bfin.c:3149
+#: elf32-cr16.c:1441 elf32-cris.c:2046 elf32-crx.c:925 elf32-d10v.c:522
+#: elf32-epiphany.c:577 elf32-fr30.c:606 elf32-frv.c:4061 elf32-ft32.c:505
+#: elf32-h8300.c:535 elf32-ip2k.c:1492 elf32-iq2000.c:703 elf32-lm32.c:1082
+#: elf32-m32c.c:636 elf32-m32r.c:2849 elf32-m68hc1x.c:1283 elf32-mep.c:534
+#: elf32-metag.c:1996 elf32-microblaze.c:1635 elf32-moxie.c:300
+#: elf32-msp430.c:1518 elf32-mt.c:410 elf32-nds32.c:6051 elf32-or1k.c:1885
+#: elf32-score.c:2751 elf32-score7.c:2557 elf32-spu.c:5096
+#: elf32-tilepro.c:3384 elf32-v850.c:2318 elf32-visium.c:692
+#: elf32-xstormy16.c:942 elf64-bpf.c:565 elf64-mmix.c:1553 elfxx-tilegx.c:3754
msgid "internal error: unknown error"
-msgstr "eroare internã: eroare necunoscutã"
+msgstr "eroare internă: eroare necunoscută"
-#: elf.c:372
+#: elf-m10300.c:1030
+#, fuzzy, c-format
+msgid "%pB: unsupported transition from %s to %s"
+msgstr "%s: tip de relocare nesuportat: %s"
+
+#: elf-m10300.c:1197
+#, fuzzy, c-format
+msgid "%pB: %s' accessed both as normal and thread local symbol"
+msgstr "%s: `%s' accesate și ca simboluri locale normale și ca simboluri locale pe fire (thread)"
+
+#: elf-m10300.c:2093 elf32-arm.c:13377 elf32-i386.c:3426 elf32-m32r.c:2331
+#: elf32-m68k.c:3929 elf32-s390.c:3080 elf32-sh.c:3671 elf32-tilepro.c:3275
+#: elf32-xtensa.c:3034 elf64-s390.c:3029 elf64-x86-64.c:4084
+#: elfxx-sparc.c:2917 elfxx-sparc.c:3814 elfxx-tilegx.c:3665
+#: elfnn-aarch64.c:5504 elfnn-aarch64.c:7107
+#, fuzzy, c-format
+msgid "%pB(%pA+%#<PRIx64>): unresolvable %s relocation against symbol `%s'"
+msgstr "%s(%s+0x%lx): relocare nerezolvabilă %s pe simbolul `%s'"
+
+#: elf-m10300.c:2155
+msgid "error: inappropriate relocation type for shared library (did you forget -fpic?)"
+msgstr ""
+
+#: elf-m10300.c:2159
+#, fuzzy, c-format
+msgid "%pB: taking the address of protected function '%s' cannot be done when making a shared library"
+msgstr "%s: relocarea %s nu poate fi folosită când se crează un shared object"
+
+#: elf-m10300.c:2162
+#, fuzzy
+msgid "internal error: suspicious relocation type used in shared library"
+msgstr "eroare internă: eroare de relocare nesuportată"
+
+#: elf-m10300.c:2650 elf32-avr.c:2486 elf32-frv.c:5621 elf64-ia64-vms.c:365
+#: elfxx-sparc.c:2684 reloc.c:8373 reloc16.c:155 elfnn-ia64.c:365
+msgid "%P%F: --relax and -r may not be used together\n"
+msgstr ""
+
+#: elf-properties.c:65
+#, c-format
+msgid "%pB: out of memory in _bfd_elf_get_property"
+msgstr ""
+
+#: elf-properties.c:91
+#, c-format
+msgid "warning: %pB: corrupt GNU_PROPERTY_TYPE (%ld) size: %#lx"
+msgstr ""
+
+#: elf-properties.c:112
+#, c-format
+msgid "warning: %pB: corrupt GNU_PROPERTY_TYPE (%ld) type (0x%x) datasz: 0x%x"
+msgstr ""
+
+#: elf-properties.c:151
+#, c-format
+msgid "warning: %pB: corrupt stack size: 0x%x"
+msgstr ""
+
+#: elf-properties.c:169
+#, c-format
+msgid "warning: %pB: corrupt no copy on protected size: 0x%x"
+msgstr ""
+
+#: elf-properties.c:189
+#, c-format
+msgid "error: %pB: <corrupt property (0x%x) size: 0x%x>"
+msgstr ""
+
+#: elf-properties.c:217
+#, c-format
+msgid "warning: %pB: unsupported GNU_PROPERTY_TYPE (%ld) type: 0x%x"
+msgstr ""
+
+#: elf-properties.c:403
+msgid "Removed property %W to merge %pB (0x%v) and %pB (0x%v)\n"
+msgstr ""
+
+#: elf-properties.c:409
+msgid "Removed property %W to merge %pB (0x%v) and %pB (not found)\n"
+msgstr ""
+
+#: elf-properties.c:418 elf-properties.c:496
+msgid "Removed property %W to merge %pB and %pB\n"
+msgstr ""
+
+#: elf-properties.c:422
+msgid "Removed property %W to merge %pB and %pB (not found)\n"
+msgstr ""
+
+#: elf-properties.c:439
+msgid "Updated property %W (0x%v) to merge %pB (0x%v) and %pB (0x%v)\n"
+msgstr ""
+
+#: elf-properties.c:448
+msgid "Updated property %W (%v) to merge %pB (0x%v) and %pB (not found)\n"
+msgstr ""
+
+#: elf-properties.c:490
+msgid "Removed property %W to merge %pB (not found) and %pB (0x%v)\n"
+msgstr ""
+
+#: elf-properties.c:671 elfxx-aarch64.c:758 elfxx-x86.c:3716
+msgid "%F%P: failed to create GNU property section\n"
+msgstr ""
+
+#: elf-properties.c:675 elfxx-aarch64.c:762 elfxx-x86.c:3721
+#, fuzzy, c-format
+msgid "%F%pA: failed to align section\n"
+msgstr "nu s-a putut instala secțiunea APUinfo nouă."
+
+#. Merge .note.gnu.property sections.
+#: elf-properties.c:701 elf-properties.c:703
+msgid "\n"
+msgstr ""
+
+#: elf-properties.c:702
+msgid "Merging program properties\n"
+msgstr ""
+
+#. PR 17512: file: f057ec89.
+#: elf.c:337
#, c-format
-msgid "%s: invalid string offset %u >= %lu for section `%s'"
-msgstr "%s: offset de ºir invalid %u >= %lu pentru secþiunea `%s'"
+msgid "%pB: attempt to load strings from a non-string section (number %d)"
+msgstr ""
+
+#: elf.c:362
+#, fuzzy, c-format
+msgid "%pB: invalid string offset %u >= %<PRIu64> for section `%s'"
+msgstr "%s: offset de șir invalid %u >= %lu pentru secțiunea `%s'"
-#: elf.c:624
+#: elf.c:514 elfnn-aarch64.c:8107 elfnn-loongarch.c:3045
#, c-format
-msgid "%s: invalid SHT_GROUP entry"
-msgstr "%s: intrare SHT_GROUP invalidã"
+msgid "%pB symbol number %lu references nonexistent SHT_SYMTAB_SHNDX section"
+msgstr ""
-#: elf.c:695
+#: elf.c:676
#, c-format
-msgid "%s: no group info for section %s"
-msgstr "%s nu existã informaþii de grup pentru secþiunea %s"
+msgid "%pB: invalid size field in group section header: %#<PRIx64>"
+msgstr ""
+
+#: elf.c:721
+#, fuzzy, c-format
+msgid "%pB: invalid entry in SHT_GROUP section [%u]"
+msgstr "%s: intrare SHT_GROUP invalidă"
+
+#: elf.c:740
+#, fuzzy, c-format
+msgid "%pB: no valid group sections found"
+msgstr "%s nu există informații de grup pentru secțiunea %s"
+
+#. See PR 21957 for a reproducer.
+#: elf.c:769
+#, fuzzy, c-format
+msgid "%pB: group section '%pA' has no contents"
+msgstr "%s: relocări în secțiunea `%s', dar fără conținut"
-#: elf.c:1055
+#: elf.c:830
+#, fuzzy, c-format
+msgid "%pB: no group info for section '%pA'"
+msgstr "%s nu există informații de grup pentru secțiunea %s"
+
+#: elf.c:878
+#, c-format
+msgid "%pB: sh_link [%d] in section `%pA' is incorrect"
+msgstr ""
+
+#: elf.c:891
+#, c-format
+msgid "%pB: SHT_GROUP section [index %d] has no SHF_GROUP sections"
+msgstr ""
+
+#: elf.c:912
+#, c-format
+msgid "%pB: section group entry number %u is corrupt"
+msgstr ""
+
+#: elf.c:935
+#, c-format
+msgid "%pB: unknown type [%#x] section `%s' in group [%pA]"
+msgstr ""
+
+#: elf.c:1453
+#, fuzzy, c-format
+msgid "%pB: invalid sh_link field (%d) in section number %d"
+msgstr "%s: link invalid %lu pentru secțiunea de relocare %s (index %u)"
+
+#: elf.c:1469
+#, fuzzy, c-format
+msgid "%pB: failed to find link section for section %d"
+msgstr "%s: nu am putut găsi secțiunea de output %s pentru secțiunea de input %s"
+
+#: elf.c:1496
+#, fuzzy, c-format
+msgid "%pB: failed to find info section for section %d"
+msgstr "%s: nu am putut găsi secțiunea de output %s pentru secțiunea de input %s"
+
+#: elf.c:1668
+#, c-format
msgid ""
"\n"
"Program Header:\n"
@@ -646,1638 +1182,5092 @@ msgstr ""
"\n"
"Header Program:\n"
-#: elf.c:1106
+#: elf.c:1710
+#, c-format
msgid ""
"\n"
"Dynamic Section:\n"
msgstr ""
"\n"
-"Secþiune Dinamicã:\n"
+"Secțiune Dinamică:\n"
-#: elf.c:1235
+#: elf.c:1854
+#, c-format
msgid ""
"\n"
"Version definitions:\n"
msgstr ""
"\n"
-"Definiþii de versiune:\n"
+"Definiții de versiune:\n"
-#: elf.c:1258
+#: elf.c:1879
+#, c-format
msgid ""
"\n"
"Version References:\n"
msgstr ""
"\n"
-"Referinþe Versiune:\n"
+"Referințe Versiune:\n"
-#: elf.c:1263
+#: elf.c:1884
#, c-format
msgid " required from %s:\n"
msgstr " cerute de %s:\n"
-#: elf.c:1944
+#: elf.c:2075
+#, fuzzy, c-format
+msgid "%pB: warning: loop in section dependencies detected"
+msgstr "%s: linkuire cod non-pic într-un executabil independent de poziție"
+
+#: elf.c:2182
#, c-format
-msgid "%s: invalid link %lu for reloc section %s (index %u)"
-msgstr "%s: link invalid %lu pentru secþiunea de relocare %s (index %u)"
+msgid "%pB: warning: multiple symbol tables detected - ignoring the table in section %u"
+msgstr ""
-#: elf.c:3686
+#: elf.c:2266
#, c-format
-msgid "%s: Not enough room for program headers (allocated %u, need %u)"
-msgstr "%s: Memorie insuficientã pentru headerele programului (alocatã %u, necesarã %u)"
+msgid "%pB: warning: multiple dynamic symbol tables detected - ignoring the table in section %u"
+msgstr ""
+
+#: elf.c:2385
+#, fuzzy, c-format
+msgid "%pB: invalid link %u for reloc section %s (index %u)"
+msgstr "%s: link invalid %lu pentru secțiunea de relocare %s (index %u)"
+
+#: elf.c:2442
+#, fuzzy, c-format
+msgid "%pB: warning: secondary relocation section '%s' for section %pA found - ignoring"
+msgstr "%s: avertisment: relocare %s spre 0x%x din secțiunea %s"
-#: elf.c:3791
+#: elf.c:2528 elf.c:2543 elf.c:2554 elf.c:2567
#, c-format
-msgid "%s: Not enough room for program headers, try linking with -N"
-msgstr "%s: Memorie insuficientã pentru headerele programului, încercaþi linkuirea cu -N"
+msgid "%pB: unknown type [%#x] section `%s'"
+msgstr ""
+
+#: elf.c:3265
+#, c-format
+msgid "%pB: error: alignment power %d of section `%pA' is too big"
+msgstr ""
-#: elf.c:3922
+#: elf.c:3298
#, c-format
-msgid "Error: First section in segment (%s) starts at 0x%x whereas the segment starts at 0x%x"
-msgstr "Eroare: prima secþiune în segment (%s) începe la 0x%x pe când segmentul începe la 0x%x"
+msgid "warning: section `%pA' type changed to PROGBITS"
+msgstr ""
-#: elf.c:4242
+#: elf.c:3783
#, c-format
-msgid "%s: warning: allocated section `%s' not in segment"
-msgstr "%s: avertisment: secþiunea alocatã `%s' nu este în segment"
+msgid "%pB: too many sections: %u"
+msgstr ""
-#: elf.c:4566
+#: elf.c:3869
#, c-format
-msgid "%s: symbol `%s' required but not present"
+msgid "%pB: sh_link of section `%pA' points to discarded section `%pA' of `%pB'"
+msgstr ""
+
+#: elf.c:3887
+#, c-format
+msgid "%pB: sh_link of section `%pA' points to removed section `%pA' of `%pB'"
+msgstr ""
+
+#: elf.c:4455
+#, c-format
+msgid "%pB: GNU_MBIND section `%pA' has invalid sh_info field: %d"
+msgstr ""
+
+#: elf.c:4638
+#, fuzzy
+msgid "%F%P: failed to size relative relocations\n"
+msgstr "nu s-a putut calcula(compute) secțiunea nouă APUinfo."
+
+#: elf.c:5062
+#, c-format
+msgid "%pB: TLS sections are not adjacent:"
+msgstr ""
+
+#: elf.c:5069
+#, c-format
+msgid "\t TLS: %pA"
+msgstr ""
+
+#: elf.c:5073
+#, c-format
+msgid "\tnon-TLS: %pA"
+msgstr ""
+
+#: elf.c:5696
+#, c-format
+msgid "%pB: The first section in the PT_DYNAMIC segment is not the .dynamic section"
+msgstr ""
+
+#: elf.c:5722
+#, fuzzy, c-format
+msgid "%pB: not enough room for program headers, try linking with -N"
+msgstr "%s: Memorie insuficientă pentru headerele programului, încercați linkuirea cu -N"
+
+#: elf.c:5839
+#, c-format
+msgid "%pB: section %pA lma %#<PRIx64> adjusted to %#<PRIx64>"
+msgstr ""
+
+#. The fix for this error is usually to edit the linker script being
+#. used and set up the program headers manually. Either that or
+#. leave room for the headers at the start of the SECTIONS.
+#: elf.c:5976
+#, c-format
+msgid "%pB: error: PHDR segment not covered by LOAD segment"
+msgstr ""
+
+#: elf.c:6016
+#, c-format
+msgid "%pB: section `%pA' can't be allocated in segment %d"
+msgstr ""
+
+#: elf.c:6156
+#, fuzzy, c-format
+msgid "%pB: warning: allocated section `%s' not in segment"
+msgstr "%s: avertisment: secțiunea alocată `%s' nu este în segment"
+
+#: elf.c:6292
+#, fuzzy, c-format
+msgid "%pB: warning: unable to allocate any sections to PT_GNU_RELRO segment"
+msgstr "%s: avertisment: secțiunea alocată `%s' nu este în segment"
+
+#: elf.c:6322
+#, c-format
+msgid "%pB: error: non-load segment %d includes file header and/or program header"
+msgstr ""
+
+#: elf.c:6829
+#, fuzzy, c-format
+msgid "%pB: symbol `%s' required but not present"
msgstr "%s: simbolul `%s' necesar, dar nu este prezent"
-#: elf.c:4854
+#: elf.c:7186
+#, fuzzy, c-format
+msgid "%pB: warning: empty loadable segment detected at vaddr=%#<PRIx64>, is this intentional?"
+msgstr "%s: avertisment: S-a detectat segment încărcabil vid, este intenționat ?\n"
+
+#: elf.c:7851
#, c-format
-msgid "%s: warning: Empty loadable segment detected, is this intentional ?\n"
-msgstr "%s: avertisment: S-a detectat segment încãrcabil vid, este intenþionat ?\n"
+msgid "%pB: warning: segment alignment of %#<PRIx64> is too large"
+msgstr ""
-#: elf.c:5485
+#: elf.c:8359
#, c-format
-msgid "Unable to find equivalent output section for symbol '%s' from section '%s'"
-msgstr "Nnu am putut gãsi secþiunea de output echivalentã pentru simbolul '%s' din secþiunea '%s'"
+msgid "%pB: Unable to handle section index %x in ELF symbol. Using ABS instead."
+msgstr ""
-#: elf.c:6298
+#: elf.c:8389
+#, fuzzy, c-format
+msgid "unable to find equivalent output section for symbol '%s' from section '%s'"
+msgstr "Nnu am putut găsi secțiunea de output echivalentă pentru simbolul '%s' din secțiunea '%s'"
+
+#: elf.c:8799
#, c-format
-msgid "%s: unsupported relocation type %s"
-msgstr "%s: tip de relocare nesuportat: %s"
+msgid "%pB: .gnu.version_r invalid entry"
+msgstr ""
-#: elf32-arm.h:1228
+#: elf.c:8932
#, c-format
-msgid "%s: Warning: Arm BLX instruction targets Arm function '%s'."
-msgstr "%s: Avertisment: BLX Arm are ca þintã funcþia Arm `%s'."
+msgid "%pB: .gnu.version_d invalid entry"
+msgstr ""
-#: elf32-arm.h:1424
+#: elf.c:9389
#, c-format
-msgid "%s: Warning: Thumb BLX instruction targets thumb function '%s'."
-msgstr "%s: Avertisment: BLX Thumb are ca þintã funcþia thumb `%s'."
+msgid "%pB:%pA: error: attempting to write into an unallocated compressed section"
+msgstr ""
-#: elf32-arm.h:1918 elf32-sh.c:4706 elf64-sh64.c:1613
+#: elf.c:9398
#, c-format
-msgid "%s(%s+0x%lx): %s relocation against SEC_MERGE section"
-msgstr "%s(%s+0x%lx): %s relocare pe secþiunea SEC_MERGE"
+msgid "%pB:%pA: error: attempting to write over the end of the section"
+msgstr ""
-#: elf32-arm.h:2012
+#: elf.c:9409
#, c-format
-msgid "%s: warning: unresolvable relocation %d against symbol `%s' from %s section"
-msgstr "%s: avertisment: relocare nerezolvabilã %d pe simbolul `%s' din secþiunea %s"
+msgid "%pB:%pA: error: attempting to write section into an empty buffer"
+msgstr ""
-#: elf32-arm.h:2202
+#: elf.c:10317
#, c-format
-msgid "Warning: Clearing the interworking flag of %s because non-interworking code in %s has been linked with it"
-msgstr "Avertisment: Se ºterge marcajul(flag) de interlucru(interworking) al %s deoarece împreunã cu el a fost linkuit cod non-interlucru în %s"
+msgid "%pB: warning: win32pstatus %s of size %lu bytes is too small"
+msgstr ""
-#: elf32-arm.h:2302
+#: elf.c:10395
#, c-format
-msgid "ERROR: %s is compiled for EABI version %d, whereas %s is compiled for version %d"
-msgstr "EROARE: %s este compilat pentru EABI versiunea %d, pe când %s este compilat pentru versiunea %d"
+msgid "%pB: win32pstatus NOTE_INFO_MODULE of size %lu is too small to contain a name of size %u"
+msgstr ""
+
+#: elf.c:12977
+msgid "GNU_MBIND section is supported only by GNU and FreeBSD targets"
+msgstr ""
-#: elf32-arm.h:2316
+#: elf.c:12980
+msgid "symbol type STT_GNU_IFUNC is supported only by GNU and FreeBSD targets"
+msgstr ""
+
+#: elf.c:12983
+msgid "symbol binding STB_GNU_UNIQUE is supported only by GNU and FreeBSD targets"
+msgstr ""
+
+#: elf.c:12986
+msgid "GNU_RETAIN section is supported only by GNU and FreeBSD targets"
+msgstr ""
+
+#: elf.c:13194 elf64-sparc.c:123 elfcode.h:1505
+#, fuzzy, c-format
+msgid "%pB(%pA): relocation %d has invalid symbol index %ld"
+msgstr "%s(%s): relocarea %d are indexul de simbol invalid %ld"
+
+#: elf.c:13269
#, c-format
-msgid "ERROR: %s is compiled for APCS-%d, whereas target %s uses APCS-%d"
-msgstr "EROARE: %s este compilat pentru APCS-%d, pe când þinta %s foloseºte APCS-%d"
+msgid "%pB(%pA): link section cannot be set because the output file does not have a symbol table"
+msgstr ""
-#: elf32-arm.h:2344
+#: elf.c:13281
#, c-format
-msgid "ERROR: %s uses VFP instructions, whereas %s does not"
-msgstr "EROARE: %s foloseºte instrucþiuni VFP, pe când %s nu le foloseºte"
+msgid "%pB(%pA): info section index is invalid"
+msgstr ""
-#: elf32-arm.h:2349
+#: elf.c:13295
#, c-format
-msgid "ERROR: %s uses FPA instructions, whereas %s does not"
-msgstr "EROARE: %s foloseºte instrucþiuni FPA, pe când %s nu le foloseºte"
+msgid "%pB(%pA): info section index cannot be set because the section is not in the output"
+msgstr ""
-#: elf32-arm.h:2360 elf32-arm.h:2365
+#: elf.c:13370
#, c-format
-msgid "ERROR: %s uses Maverick instructions, whereas %s does not"
-msgstr "EROARE: %s foloseºte instrucþiuni Maverick, pe când %s nu le foloseºte"
+msgid "%pB(%pA): error: secondary reloc section processed twice"
+msgstr ""
-#: elf32-arm.h:2385
+#: elf.c:13382
#, c-format
-msgid "ERROR: %s uses software FP, whereas %s uses hardware FP"
-msgstr "EROARE: %s foloseºte FP software, pe când %s foloseºte FP hardware"
+msgid "%pB(%pA): error: secondary reloc section has zero sized entries"
+msgstr ""
-#: elf32-arm.h:2390
+#: elf.c:13393
#, c-format
-msgid "ERROR: %s uses hardware FP, whereas %s uses software FP"
-msgstr "EROARE: %s foloseºte FP hardware, pe când %s foloseºte FP software"
+msgid "%pB(%pA): error: secondary reloc section has non-standard sized entries"
+msgstr ""
+
+#: elf.c:13405
+#, c-format
+msgid "%pB(%pA): error: secondary reloc section is empty!"
+msgstr ""
+
+#: elf.c:13428
+#, c-format
+msgid "%pB(%pA): error: internal relocs missing for secondary reloc section"
+msgstr ""
+
+#: elf.c:13447
+#, c-format
+msgid "%pB(%pA): error: reloc table entry %u is empty"
+msgstr ""
+
+#: elf.c:13472
+#, c-format
+msgid "%pB(%pA): error: secondary reloc %u references a missing symbol"
+msgstr ""
+
+#: elf.c:13489
+#, c-format
+msgid "%pB(%pA): error: secondary reloc %u references a deleted symbol"
+msgstr ""
+
+#: elf.c:13502
+#, c-format
+msgid "%pB(%pA): error: secondary reloc %u is of an unknown type"
+msgstr ""
#. 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
+#: elf32-arc.c:455 elf32-arm.c:15095 elf32-frv.c:6612 elf32-iq2000.c:868
+#: elf32-m32c.c:914 elf32-mt.c:560 elf32-rl78.c:1275 elf32-rx.c:3217
+#: elf32-visium.c:844 elf64-ppc.c:5507 elfnn-aarch64.c:7337
#, c-format
-msgid "private flags = %lx:"
-msgstr "marcaje(flags) private = %lx:"
+msgid "private flags = 0x%lx:"
+msgstr "marcaje(flags) private = 0x%lx"
+
+#: elf32-arc.c:642
+#, c-format
+msgid "warning: %pB: conflicting platform configuration %s with %s"
+msgstr ""
+
+#: elf32-arc.c:661
+#, c-format
+msgid "error: %pB: unable to merge CPU base attributes %s with %s"
+msgstr ""
+
+#: elf32-arc.c:698
+#, c-format
+msgid "error: %pB: unable to merge ISA extension attributes %s"
+msgstr ""
+
+#: elf32-arc.c:722
+#, c-format
+msgid "error: %pB: conflicting ISA extension attributes %s with %s"
+msgstr ""
+
+#: elf32-arc.c:762
+#, c-format
+msgid "error: %pB: cannot mix rf16 with full register set %pB"
+msgstr ""
+
+#: elf32-arc.c:790
+#, c-format
+msgid "error: %pB: conflicting attributes %s: %s with %s"
+msgstr ""
+
+#: elf32-arc.c:817
+#, c-format
+msgid "error: %pB: conflicting attributes %s"
+msgstr ""
+
+#: elf32-arc.c:922
+#, c-format
+msgid "error: attempting to link %pB with a binary %pB of different architecture"
+msgstr ""
+
+#: elf32-arc.c:938 elf32-iq2000.c:844 elf32-m32c.c:889 elf32-m68hc1x.c:1390
+#: elf32-ppc.c:3881 elf64-sparc.c:722 elfxx-mips.c:15584
+#, fuzzy, c-format
+msgid "%pB: uses different e_flags (%#x) fields than previous modules (%#x)"
+msgstr "%s: folosește câmpuri de marcaje e_flags (0x%lx) diferite de modulele anterioare (0x%lx)"
-#: elf32-arm.h:2452
+#: elf32-arc.c:1027
+msgid "error: the ARC4 architecture is no longer supported"
+msgstr ""
+
+#: elf32-arc.c:1033
+msgid "warning: unset or old architecture flags; use default machine"
+msgstr ""
+
+#: elf32-arc.c:1159
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): CMEM relocation to `%s' is invalid, 16 MSB should be %#x (value is %#<PRIx64>)"
+msgstr ""
+
+#: elf32-arc.c:1170
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): CMEM relocation to `%s+%#<PRIx64>' is invalid, 16 MSB should be %#x (value is %#<PRIx64>)"
+msgstr ""
+
+#: elf32-arc.c:1885
+msgid "GOT and PLT relocations cannot be fixed with a non dynamic linker"
+msgstr ""
+
+#: elf32-arc.c:1909 elf32-rx.c:1486
+#, fuzzy, c-format
+msgid "%pB(%pA): warning: unaligned access to symbol '%s' in the small data area"
+msgstr "Avertisment: alinierea %u al simbolului `%s' din %s este mai mică decât %u în %s"
+
+#: elf32-arc.c:1914 elf32-rx.c:1491
+#, fuzzy, c-format
+msgid "%pB(%pA): internal error: out of range error"
+msgstr "eroare internă: eroare depășire de domeniu(out of range)"
+
+#: elf32-arc.c:1919 elf32-rx.c:1496
+#, fuzzy, c-format
+msgid "%pB(%pA): internal error: unsupported relocation error"
+msgstr "eroare internă: eroare de relocare nesuportată"
+
+#: elf32-arc.c:1924 elf32-rx.c:1501
+#, fuzzy, c-format
+msgid "%pB(%pA): internal error: dangerous relocation"
+msgstr "eroare internă: relocare periculoasă"
+
+#: elf32-arc.c:1929 elf32-rx.c:1506
+#, fuzzy, c-format
+msgid "%pB(%pA): internal error: unknown error"
+msgstr "eroare internă: eroare necunoscută"
+
+#: elf32-arc.c:2023 elf32-arc.c:2091 elf32-arm.c:15550 elf32-metag.c:2251
+#: elf32-nds32.c:5489 elfnn-aarch64.c:7744 elfnn-riscv.c:617
+#, fuzzy, c-format
+msgid "%pB: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC"
+msgstr "%s: relocarea %s nu poate fi utilizată când se face un shared object, recompilațicu -fPIC"
+
+#: elf32-arc.c:2910
+#, c-format
+msgid "%pB: unknown mandatory ARC object attribute %d"
+msgstr ""
+
+#: elf32-arc.c:2918
+#, c-format
+msgid "warning: %pB: unknown ARC object attribute %d"
+msgstr ""
+
+#: elf32-arm.c:4334 elf32-arm.c:4368 elf32-arm.c:4387 elf32-arm.c:4439
+#, c-format
+msgid "%pB(%pA): 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"
+msgstr ""
+
+#: elf32-arm.c:4399 elf32-arm.c:4453 elf32-arm.c:9142 elf32-arm.c:9232
+#, fuzzy, c-format
+msgid "%pB(%s): warning: interworking not enabled; first occurrence: %pB: %s call to %s"
+msgstr "%s(%s): avertisment: interlucrul(interworking) nu este activat"
+
+#: elf32-arm.c:4579
+#, c-format
+msgid "ERROR: CMSE stub (%s section) too far (%#<PRIx64>) from destination (%#<PRIx64>)"
+msgstr ""
+
+#: elf32-arm.c:4748
+#, c-format
+msgid "no address assigned to the veneers output section %s"
+msgstr ""
+
+#: elf32-arm.c:4823 elf32-arm.c:6969 elf32-csky.c:3400 elf32-hppa.c:582
+#: elf32-m68hc1x.c:164 elf32-metag.c:1180 elf32-nios2.c:2201 elf64-ppc.c:3881
+#: elf64-ppc.c:14018 elfnn-aarch64.c:3187
+#, fuzzy, c-format
+msgid "%pB: cannot create stub entry %s"
+msgstr "%s: nu se poate crea intrarea trunchiată %s"
+
+#: elf32-arm.c:5044 elf32-csky.c:3742 elf32-hppa.c:732 elf32-m68hc11.c:422
+#: elf32-m68hc12.c:542 elf32-metag.c:3345 elf32-nios2.c:2494 elf64-ppc.c:11656
+#: elfnn-aarch64.c:3256
+msgid "%F%P: Could not assign '%pA' to an output section. Retry without --enable-non-contiguous-regions.\n"
+msgstr ""
+
+#: elf32-arm.c:6012
+#, c-format
+msgid "%pB: special symbol `%s' only allowed for ARMv8-M architecture or later"
+msgstr ""
+
+#: elf32-arm.c:6021
+#, c-format
+msgid "%pB: invalid special symbol `%s'; it must be a global or weak function symbol"
+msgstr ""
+
+#: elf32-arm.c:6060
+#, c-format
+msgid "%pB: invalid standard symbol `%s'; it must be a global or weak function symbol"
+msgstr ""
+
+#: elf32-arm.c:6066
+#, c-format
+msgid "%pB: absent standard symbol `%s'"
+msgstr ""
+
+#: elf32-arm.c:6078
+#, c-format
+msgid "%pB: `%s' and its special symbol are in different sections"
+msgstr ""
+
+#: elf32-arm.c:6090
+#, c-format
+msgid "%pB: entry function `%s' not output"
+msgstr ""
+
+#: elf32-arm.c:6097
+#, c-format
+msgid "%pB: entry function `%s' is empty"
+msgstr ""
+
+#: elf32-arm.c:6226
+#, c-format
+msgid "%pB: --in-implib only supported for Secure Gateway import libraries"
+msgstr ""
+
+#: elf32-arm.c:6275
+#, c-format
+msgid "%pB: invalid import library entry: `%s'; symbol should be absolute, global and refer to Thumb functions"
+msgstr ""
+
+#: elf32-arm.c:6297
+#, c-format
+msgid "entry function `%s' disappeared from secure code"
+msgstr ""
+
+#: elf32-arm.c:6321
+#, c-format
+msgid "`%s' refers to a non entry function"
+msgstr ""
+
+#: elf32-arm.c:6336
+#, c-format
+msgid "%pB: visibility of symbol `%s' has changed"
+msgstr ""
+
+#: elf32-arm.c:6345
+#, fuzzy, c-format
+msgid "%pB: incorrect size for symbol `%s'"
+msgstr "%s: tip de relocare %d necunoscut pentru simbolul %s"
+
+#: elf32-arm.c:6364
+#, fuzzy, c-format
+msgid "offset of veneer for entry function `%s' not a multiple of its size"
+msgstr "%s: eroare: relocarea %s nu este multiplu de %d"
+
+#: elf32-arm.c:6384
+msgid "new entry function(s) introduced but no output import library specified:"
+msgstr ""
+
+#: elf32-arm.c:6392
+#, c-format
+msgid "start address of `%s' is different from previous link"
+msgstr ""
+
+#: elf32-arm.c:7102 elf32-arm.c:7137
+#, fuzzy, c-format
+msgid "unable to find %s glue '%s' for '%s'"
+msgstr "%s: nu s-a putut găsi legătura(glue) ARM `%s' pentru `%s'"
+
+#: elf32-arm.c:7848
+#, c-format
+msgid "%pB: BE8 images only valid in big-endian mode"
+msgstr ""
+
+#. Give a warning, but do as the user requests anyway.
+#: elf32-arm.c:8075
+#, c-format
+msgid "%pB: warning: selected VFP11 erratum workaround is not necessary for target architecture"
+msgstr ""
+
+#: elf32-arm.c:8102
+#, c-format
+msgid "%pB: warning: selected STM32L4XX erratum workaround is not necessary for target architecture"
+msgstr ""
+
+#: elf32-arm.c:8638 elf32-arm.c:8658 elf32-arm.c:8725 elf32-arm.c:8744
+#, fuzzy, c-format
+msgid "%pB: unable to find %s veneer `%s'"
+msgstr "%s: nu s-a putut găsi legătura(glue) ARM `%s' pentru `%s'"
+
+#: elf32-arm.c:8951
+#, c-format
+msgid "%pB(%pA+%#x): error: multiple load detected in non-last IT block instruction: STM32L4XX veneer cannot be generated; use gcc option -mrestrict-it to generate only one instruction per IT block"
+msgstr ""
+
+#: elf32-arm.c:9049
+#, fuzzy, c-format
+msgid "invalid TARGET2 relocation type '%s'"
+msgstr "%s: tip de relocare invalid %d"
+
+#. FIXME: We ought to be able to generate thumb-1 PLT
+#. instructions...
+#: elf32-arm.c:9819
+#, fuzzy, c-format
+msgid "%pB: warning: thumb-1 mode PLT generation not currently supported"
+msgstr "%s: Relocarea %s (%d) nu este încă suportată.\n"
+
+#: elf32-arm.c:10128 elf32-arm.c:10170
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): unexpected %s instruction '%#lx' in TLS trampoline"
+msgstr ""
+
+#: elf32-arm.c:10520
+msgid "shared object"
+msgstr ""
+
+#: elf32-arm.c:10523
+msgid "PIE executable"
+msgstr ""
+
+#: elf32-arm.c:10526
+#, fuzzy, c-format
+msgid "%pB: relocation %s against external or undefined symbol `%s' can not be used when making a %s; recompile with -fPIC"
+msgstr "%s: relocarea %s nu poate fi utilizată când se face un shared object, recompilațicu -fPIC"
+
+#: elf32-arm.c:10628 elf32-arm.c:11045
+#, fuzzy, c-format
+msgid "%pB: warning: %s BLX instruction targets %s function '%s'"
+msgstr "%s: Avertisment: BLX Arm are ca țintă funcția Arm `%s'."
+
+#: elf32-arm.c:11679
+#, c-format
+msgid "%pB: expected symbol index in range 0..%lu but found local symbol with index %lu"
+msgstr ""
+
+#: elf32-arm.c:11954 elf32-arm.c:11980
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): unexpected %s instruction '%#lx' referenced by TLS_GOTDESC"
+msgstr ""
+
+#: elf32-arm.c:12026 elf32-csky.c:4970 elf32-m68k.c:3733 elf32-metag.c:1913
+#: elf32-nios2.c:4382
+#, fuzzy, c-format
+msgid "%pB(%pA+%#<PRIx64>): %s relocation not permitted in shared object"
+msgstr "%s: relocarea %s nu poate fi folosită când se crează un shared object"
+
+#: elf32-arm.c:12240
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): only ADD or SUB instructions are allowed for ALU group relocations"
+msgstr ""
+
+#: elf32-arm.c:12281 elf32-arm.c:12373 elf32-arm.c:12461 elf32-arm.c:12551
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): overflow whilst splitting %#<PRIx64> for group relocation %s"
+msgstr ""
+
+#: elf32-arm.c:12609 elf32-arm.c:12768
+#, fuzzy
+msgid "local symbol index too big"
+msgstr "simboluri locale în secțiunea îndepărtată(discarded) %s"
+
+#: elf32-arm.c:12619 elf32-arm.c:12653
+msgid "no dynamic index information available"
+msgstr ""
+
+#: elf32-arm.c:12661
+msgid "invalid dynamic index"
+msgstr ""
+
+#: elf32-arm.c:12778
+msgid "dynamic index information not available"
+msgstr ""
+
+#: elf32-arm.c:13209 elf32-sh.c:3565
+#, fuzzy, c-format
+msgid "%pB(%pA+%#<PRIx64>): %s relocation against SEC_MERGE section"
+msgstr "%s(%s+0x%lx): %s relocare pe secțiunea SEC_MERGE"
+
+#: elf32-arm.c:13322 elf32-m68k.c:3966 elf32-xtensa.c:2772
+#: elfnn-aarch64.c:6834
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): %s used with TLS symbol %s"
+msgstr ""
+
+#: elf32-arm.c:13324 elf32-m68k.c:3968 elf32-xtensa.c:2774
+#: elfnn-aarch64.c:6836
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): %s used with non-TLS symbol %s"
+msgstr ""
+
+#: elf32-arm.c:13407 elf32-tic6x.c:2649 elfnn-aarch64.c:7171
+msgid "out of range"
+msgstr ""
+
+#: elf32-arm.c:13411 elf32-nios2.c:4516 elf32-pru.c:936 elf32-tic6x.c:2653
+#: elfnn-aarch64.c:7175
+#, fuzzy
+msgid "unsupported relocation"
+msgstr "relocare nesuportată"
+
+#: elf32-arm.c:13419 elf32-nios2.c:4526 elf32-pru.c:946 elf32-tic6x.c:2661
+#: elfnn-aarch64.c:7183
+#, fuzzy
+msgid "unknown error"
+msgstr "Nici o eroare"
+
+#: elf32-arm.c:13901
+#, fuzzy, c-format
+msgid "warning: not setting interworking flag of %pB since it has already been specified as non-interworking"
+msgstr "Avertisment: Nu se setează marcajul(flagu) de interlucru(interworking) al %s atâta timp cât a fost specificat ca non-interlucru(interworking)"
+
+#: elf32-arm.c:13905
+#, fuzzy, c-format
+msgid "warning: clearing the interworking flag of %pB due to outside request"
+msgstr "Avertisment: Se șterge marcajul(flag) de interlucru(interworking) al %s datorită unei cereri din afară"
+
+#: elf32-arm.c:13950
+#, fuzzy, c-format
+msgid "warning: clearing the interworking flag of %pB because non-interworking code in %pB has been linked with it"
+msgstr "Avertisment: Se șterge marcajul(flag) de interlucru(interworking) al %s deoarece împreună cu el a fost linkuit cod non-interlucru în %s"
+
+#: elf32-arm.c:14037
+#, c-format
+msgid "%pB: unknown mandatory EABI object attribute %d"
+msgstr ""
+
+#: elf32-arm.c:14045
+#, c-format
+msgid "warning: %pB: unknown EABI object attribute %d"
+msgstr ""
+
+#: elf32-arm.c:14380
+#, c-format
+msgid "error: %pB: unknown CPU architecture"
+msgstr ""
+
+#: elf32-arm.c:14418 elf32-nios2.c:2950
+#, c-format
+msgid "error: %pB: conflicting CPU architectures %d/%d"
+msgstr ""
+
+#: elf32-arm.c:14515
+#, c-format
+msgid "Error: %pB has both the current and legacy Tag_MPextension_use attributes"
+msgstr ""
+
+#: elf32-arm.c:14544
+#, fuzzy, c-format
+msgid "error: %pB uses VFP register arguments, %pB does not"
+msgstr "EROARE: %s folosește instrucțiuni VFP, pe când %s nu le folosește"
+
+#: elf32-arm.c:14713
+#, c-format
+msgid "error: %pB: unable to merge virtualization attributes with %pB"
+msgstr ""
+
+#: elf32-arm.c:14739
+#, c-format
+msgid "error: %pB: conflicting architecture profiles %c/%c"
+msgstr ""
+
+#: elf32-arm.c:14878
+#, c-format
+msgid "warning: %pB: conflicting platform configuration"
+msgstr ""
+
+#: elf32-arm.c:14887
+#, c-format
+msgid "error: %pB: conflicting use of R9"
+msgstr ""
+
+#: elf32-arm.c:14899
+#, c-format
+msgid "error: %pB: SB relative addressing conflicts with use of R9"
+msgstr ""
+
+#: elf32-arm.c:14912
+#, c-format
+msgid "warning: %pB uses %u-byte wchar_t yet the output is to use %u-byte wchar_t; use of wchar_t values across objects may fail"
+msgstr ""
+
+#: elf32-arm.c:14943
+#, c-format
+msgid "warning: %pB uses %s enums yet the output is to use %s enums; use of enum values across objects may fail"
+msgstr ""
+
+#: elf32-arm.c:14955
+#, c-format
+msgid "error: %pB uses iWMMXt register arguments, %pB does not"
+msgstr ""
+
+#: elf32-arm.c:14972
+#, c-format
+msgid "error: fp16 format mismatch between %pB and %pB"
+msgstr ""
+
+#: elf32-arm.c:15008
+#, c-format
+msgid "%pB has both the current and legacy Tag_MPextension_use attributes"
+msgstr ""
+
+#: elf32-arm.c:15104
+#, c-format
msgid " [interworking enabled]"
msgstr " [interlucru(interworking) activat]"
-#: elf32-arm.h:2460
+#: elf32-arm.c:15112
+#, c-format
msgid " [VFP float format]"
msgstr " [format float VFP]"
-#: elf32-arm.h:2462
+#: elf32-arm.c:15114
+#, c-format
msgid " [Maverick float format]"
msgstr " [format float Maverick]"
-#: elf32-arm.h:2464
+#: elf32-arm.c:15116
+#, c-format
msgid " [FPA float format]"
msgstr " [format float FPA]"
-#: elf32-arm.h:2473
+#: elf32-arm.c:15119
+#, c-format
+msgid " [floats passed in float registers]"
+msgstr " [floats trecuți în regiștri de float]"
+
+#: elf32-arm.c:15122 elf32-arm.c:15208
+#, c-format
+msgid " [position independent]"
+msgstr "[ independent de poziție]"
+
+#: elf32-arm.c:15125
+#, c-format
msgid " [new ABI]"
msgstr " [ABI nou]"
-#: elf32-arm.h:2476
+#: elf32-arm.c:15128
+#, c-format
msgid " [old ABI]"
msgstr " [ABI vechi]"
-#: elf32-arm.h:2479
+#: elf32-arm.c:15131
+#, c-format
msgid " [software FP]"
msgstr " [FP software]"
-#: elf32-arm.h:2488
+#: elf32-arm.c:15140
+#, c-format
msgid " [Version1 EABI]"
msgstr " [EABI Versiunea1]"
-#: elf32-arm.h:2491 elf32-arm.h:2502
+#: elf32-arm.c:15143 elf32-arm.c:15154
+#, c-format
msgid " [sorted symbol table]"
-msgstr " [tabelã sortatã de simboluri]"
+msgstr " [tabelă sortată de simboluri]"
-#: elf32-arm.h:2493 elf32-arm.h:2504
+#: elf32-arm.c:15145 elf32-arm.c:15156
+#, c-format
msgid " [unsorted symbol table]"
-msgstr " [tabelã de simboluri nesortatã]"
+msgstr " [tabelă de simboluri nesortată]"
-#: elf32-arm.h:2499
+#: elf32-arm.c:15151
+#, c-format
msgid " [Version2 EABI]"
msgstr " [EABI Versiunea2]"
-#: elf32-arm.h:2507
+#: elf32-arm.c:15159
+#, c-format
msgid " [dynamic symbols use segment index]"
msgstr " [simbolurile dinamice folosesc index de segment]"
-#: elf32-arm.h:2510
+#: elf32-arm.c:15162
+#, c-format
msgid " [mapping symbols precede others]"
-msgstr " [simbolurile de mapare le precedeazã pe celelalte]"
+msgstr " [simbolurile de mapare le precedează pe celelalte]"
-#: elf32-arm.h:2517
-msgid " <EABI version unrecognised>"
-msgstr " <versiune necunoscutã EABI>"
+#: elf32-arm.c:15169
+#, fuzzy, c-format
+msgid " [Version3 EABI]"
+msgstr " [EABI Versiunea1]"
-#: elf32-arm.h:2524
-msgid " [relocatable executable]"
-msgstr " [executabil relocabil]"
+#: elf32-arm.c:15173
+#, fuzzy, c-format
+msgid " [Version4 EABI]"
+msgstr " [EABI Versiunea1]"
-#: elf32-arm.h:2527
-msgid " [has entry point]"
-msgstr " [are punct de intrare]"
+#: elf32-arm.c:15177
+#, fuzzy, c-format
+msgid " [Version5 EABI]"
+msgstr " [EABI Versiunea1]"
-#: elf32-arm.h:2532
-msgid "<Unrecognised flag bits set>"
-msgstr "<setare biþi de marcaj(flag) necunoscutã>"
+#: elf32-arm.c:15180
+#, fuzzy, c-format
+msgid " [soft-float ABI]"
+msgstr " [d-float]"
-#: 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 "eroare internã: relocare periculoasã"
+#: elf32-arm.c:15183
+#, fuzzy, c-format
+msgid " [hard-float ABI]"
+msgstr " [d-float]"
-#: elf32-cris.c:931
+#: elf32-arm.c:15189
#, c-format
-msgid "%s: unresolvable relocation %s against symbol `%s' from %s section"
-msgstr "%s: relocare nerezolvabilã %s pe simbolul `%s' din secþiunea `%s'"
+msgid " [BE8]"
+msgstr ""
-#: elf32-cris.c:993
+#: elf32-arm.c:15192
#, c-format
-msgid "%s: No PLT nor GOT for relocation %s against symbol `%s' from %s section"
-msgstr "%s:Nu existã nici PLT nici GOR pentru relocarea %s pe simbolul `%s' din secþiunea %s"
+msgid " [LE8]"
+msgstr ""
-#: elf32-cris.c:996 elf32-cris.c:1122
-msgid "[whose name is lost]"
-msgstr "[al cãrui nume s-a pierdut]"
+#: elf32-arm.c:15198
+#, c-format
+msgid " <EABI version unrecognised>"
+msgstr " <versiune necunoscută EABI>"
-#: elf32-cris.c:1111
+#: elf32-arm.c:15205
#, c-format
-msgid "%s: relocation %s with non-zero addend %d against local symbol from %s section"
-msgstr "%s: relocarea %s cu adãugarea diferitã de zero %d pe simbolul local din secþiunea %s"
+msgid " [relocatable executable]"
+msgstr " [executabil relocabil]"
-#: elf32-cris.c:1118
+#: elf32-arm.c:15211
#, c-format
-msgid "%s: relocation %s with non-zero addend %d against symbol `%s' from %s section"
-msgstr "%s: relocarea %s cu adãugare non-zero %d pe simbolul `%s' din secþiunea %s"
+msgid " [FDPIC ABI supplement]"
+msgstr ""
+
+#: elf32-arm.c:15216 elfnn-aarch64.c:7340
+#, fuzzy, c-format
+msgid " <Unrecognised flag bits set>"
+msgstr "<setare biți de marcaj(flag) necunoscută>"
+
+#: elf32-arm.c:15333 elf32-arm.c:15467 elf32-i386.c:1511 elf32-s390.c:923
+#: elf32-tic6x.c:2724 elf32-tilepro.c:1435 elf32-xtensa.c:1102
+#: elf64-s390.c:845 elf64-x86-64.c:1882 elfxx-sparc.c:1386 elfxx-tilegx.c:1662
+#: elfxx-x86.c:953 elfnn-aarch64.c:7611 elfnn-loongarch.c:604
+#: elfnn-riscv.c:660
+#, fuzzy, c-format
+msgid "%pB: bad symbol index: %d"
+msgstr "%s:index de simboluri invalid: %d"
-#: elf32-cris.c:1143
+#: elf32-arm.c:15723
#, c-format
-msgid "%s: relocation %s is not allowed for global symbol: `%s' from %s section"
-msgstr "%s: relocarea %s nu este permisã pentru simbolul global `%s' din secþiunea %s"
+msgid "FDPIC does not yet support %s relocation to become dynamic for executable"
+msgstr ""
-#: elf32-cris.c:1158
+#: elf32-arm.c:16984
#, c-format
-msgid "%s: relocation %s in section %s with no GOT created"
-msgstr "%s: relocarea %s din secþiunea %s fãrã GOT creat"
+msgid "errors encountered processing file %pB"
+msgstr ""
+
+#: elf32-arm.c:17357 elflink.c:13186 elflink.c:13233
+#, fuzzy, c-format
+msgid "could not find section %s"
+msgstr "%s: nu s-a putut găsi secțiunea de output %s"
-#: elf32-cris.c:1277
+#: elf32-arm.c:18278
#, c-format
-msgid "%s: Internal inconsistency; no relocation section %s"
-msgstr "%s: Inconsistenþã internã, nu existã secþiunea de relocare %s"
+msgid "%pB: Number of symbols in input file has increased from %lu to %u\n"
+msgstr ""
-#: elf32-cris.c:2500
+#: elf32-arm.c:18542
#, c-format
-msgid ""
-"%s, section %s:\n"
-" relocation %s should not be used in a shared object; recompile with -fPIC"
+msgid "%pB: error: Cortex-A8 erratum stub is allocated in unsafe location"
msgstr ""
-"%s, secþiunea %s:\n"
-" relocarea %s n-ar trebui folositã într-un shared object; recompilaþi cu -fPIC"
-#: elf32-cris.c:2978
-msgid " [symbols have a _ prefix]"
-msgstr " [simbolurile au un _prefix]"
+#. There's not much we can do apart from complain if this
+#. happens.
+#: elf32-arm.c:18569
+#, c-format
+msgid "%pB: error: Cortex-A8 erratum stub out of range (input file too large)"
+msgstr ""
-#: elf32-cris.c:3017
+#: elf32-arm.c:19396 elf32-arm.c:19418
#, c-format
-msgid "%s: uses _-prefixed symbols, but writing file with non-prefixed symbols"
-msgstr "%s: se folosesc simbolurile _-prefixate, dar se scrie fiºierul cu simboluri neprefixate"
+msgid "%pB: error: VFP11 veneer out of range"
+msgstr ""
-#: elf32-cris.c:3018
+#: elf32-arm.c:19469
#, c-format
-msgid "%s: uses non-prefixed symbols, but writing file with _-prefixed symbols"
-msgstr "%s: se folosesc simboluri neprefixate, dar se scrie fiºierul cu simboluri _-prefixate"
+msgid "%pB(%#<PRIx64>): error: cannot create STM32L4XX veneer; jump out of range by %<PRId64> bytes; cannot encode branch instruction"
+msgstr ""
-#: elf32-frv.c:1223
+#: elf32-arm.c:19508
#, c-format
-msgid "%s: compiled with %s and linked with modules that use non-pic relocations"
-msgstr "%s: compilat cu %s ºi linkuit cu module care folosesc relocaþii non-pic"
+msgid "%pB: error: cannot create STM32L4XX veneer"
+msgstr ""
-#: elf32-frv.c:1273 elf32-iq2000.c:895
+#: elf32-arm.c:20590
#, c-format
-msgid "%s: compiled with %s and linked with modules compiled with %s"
-msgstr "%s: compilat cu %s ºi linkuit cu module compilate cu %s"
+msgid "error: %pB is already in final BE8 format"
+msgstr ""
-#: elf32-frv.c:1285
+#: elf32-arm.c:20666
#, c-format
-msgid "%s: uses different unknown e_flags (0x%lx) fields than previous modules (0x%lx)"
-msgstr "%s: foloseºte câmpuri marcaje e_flags (0x%lx) diferite de modulele anterioare (0x%lx)"
+msgid "error: source object %pB has EABI version %d, but target %pB has EABI version %d"
+msgstr ""
+
+#: elf32-arm.c:20681
+#, fuzzy, c-format
+msgid "error: %pB is compiled for APCS-%d, whereas target %pB uses APCS-%d"
+msgstr "EROARE: %s este compilat pentru APCS-%d, pe când ținta %s folosește APCS-%d"
+
+#: elf32-arm.c:20691
+#, fuzzy, c-format
+msgid "error: %pB passes floats in float registers, whereas %pB passes them in integer registers"
+msgstr "EROARE: %s trimite float în regiștrii de float, pe când %s îi trimite în regiștrii de integer"
+
+#: elf32-arm.c:20695
+#, fuzzy, c-format
+msgid "error: %pB passes floats in integer registers, whereas %pB passes them in float registers"
+msgstr "EROARE: %s trimite integer în regiștrii de integer, pe când %s îi trimite în regiștrii de float"
+
+#: elf32-arm.c:20705 elf32-arm.c:20709 elf32-arm.c:20719
+#, fuzzy, c-format
+msgid "error: %pB uses %s instructions, whereas %pB does not"
+msgstr "EROARE: %s folosește instrucțiuni VFP, pe când %s nu le folosește"
+
+#: elf32-arm.c:20723
+#, fuzzy, c-format
+msgid "error: %pB does not use %s instructions, whereas %pB does"
+msgstr "EROARE: %s folosește instrucțiuni VFP, pe când %s nu le folosește"
+
+#: elf32-arm.c:20742
+#, fuzzy, c-format
+msgid "error: %pB uses software FP, whereas %pB uses hardware FP"
+msgstr "EROARE: %s folosește FP software, pe când %s folosește FP hardware"
+
+#: elf32-arm.c:20746
+#, fuzzy, c-format
+msgid "error: %pB uses hardware FP, whereas %pB uses software FP"
+msgstr "EROARE: %s folosește FP hardware, pe când %s folosește FP software"
+
+#: elf32-arm.c:20760
+#, fuzzy, c-format
+msgid "warning: %pB supports interworking, whereas %pB does not"
+msgstr "Avertisment: %s suportă interlucru(interworking), pe când %s nu suportă"
+
+#: elf32-arm.c:20766
+#, fuzzy, c-format
+msgid "warning: %pB does not support interworking, whereas %pB does"
+msgstr "Avertisment: %s nu suportă interlucru(interworking), pe când %s suportă"
+
+#: elf32-avr.c:1516 elf32-bfin.c:3145 elf32-cris.c:2042 elf32-epiphany.c:573
+#: elf32-fr30.c:602 elf32-frv.c:4057 elf32-ft32.c:501 elf32-ip2k.c:1488
+#: elf32-iq2000.c:699 elf32-m32c.c:632 elf32-mep.c:530 elf32-metag.c:1992
+#: elf32-moxie.c:296 elf32-msp430.c:1514 elf32-mt.c:406 elf32-or1k.c:1881
+#: elf32-tilepro.c:3380 elf32-v850.c:2302 elf32-visium.c:688
+#: elf32-xstormy16.c:938 elf64-bpf.c:561 elf64-mmix.c:1549 elfxx-tilegx.c:3750
+msgid "internal error: dangerous relocation"
+msgstr "eroare internă: relocare periculoasă"
+
+#: elf32-avr.c:3324 elfnn-aarch64.c:3218
+#, fuzzy, c-format
+msgid "cannot create stub entry %s"
+msgstr "%s: nu se poate crea intrarea trunchiată %s"
+
+#: elf32-bfin.c:108 elf32-bfin.c:367
+msgid "relocation should be even number"
+msgstr ""
+
+#: elf32-bfin.c:1593
+#, fuzzy, c-format
+msgid "%pB(%pA+%#<PRIx64>): unresolvable relocation against symbol `%s'"
+msgstr "%s(%s+0x%lx): relocare nerezolvabilă pe simbolul `%s'"
-#: elf32-frv.c:1321 elf32-iq2000.c:933
+#: elf32-bfin.c:1625 elf32-i386.c:3466 elf32-m68k.c:4006 elf32-s390.c:3138
+#: elf64-s390.c:3087 elf64-x86-64.c:4139
+#, fuzzy, c-format
+msgid "%pB(%pA+%#<PRIx64>): reloc against `%s': error %d"
+msgstr "%s(%s+0x%lx): relocare pe `%s': eroare %d"
+
+#: elf32-bfin.c:2651
#, c-format
-msgid "private flags = 0x%lx:"
-msgstr "marcaje(flags) private = 0x%lx"
+msgid "%pB: relocation at `%pA+%#<PRIx64>' references symbol `%s' with nonzero addend"
+msgstr ""
-#: elf32-gen.c:83 elf64-gen.c:82
+#: elf32-bfin.c:2668
+msgid "relocation references symbol not defined in the module"
+msgstr ""
+
+#: elf32-bfin.c:2766
+msgid "R_BFIN_FUNCDESC references dynamic symbol with nonzero addend"
+msgstr ""
+
+#: elf32-bfin.c:2806 elf32-bfin.c:2927
+#, fuzzy
+msgid "cannot emit fixups in read-only section"
+msgstr "%s: relocare loader în secțiunea doar-în-citire %s"
+
+#: elf32-bfin.c:2836 elf32-bfin.c:2964 elf32-lm32.c:1007 elf32-sh.c:4383
+#, fuzzy
+msgid "cannot emit dynamic relocations in read-only section"
+msgstr "avertisment: relocare pe secțiune eliminată"
+
+#: elf32-bfin.c:2886
+msgid "R_BFIN_FUNCDESC_VALUE references dynamic symbol with nonzero addend"
+msgstr ""
+
+#: elf32-bfin.c:3049
+msgid "relocations between different segments are not supported"
+msgstr ""
+
+#: elf32-bfin.c:3050
+#, fuzzy
+msgid "warning: relocation references a different segment"
+msgstr "avertisment: relocare pe secțiune eliminată"
+
+#. Ignore init flag - it may not be set, despite the flags field containing valid data.
+#: elf32-bfin.c:4732 elf32-cris.c:3862 elf32-m68hc1x.c:1415 elf32-m68k.c:1265
+#: elf32-score.c:3987 elf32-score7.c:3794 elf32-vax.c:536 elf32-xgate.c:494
+#: elfxx-mips.c:16270
#, c-format
-msgid "%s: Relocations in generic ELF (EM: %d)"
-msgstr "%s: Relocãri în ELF generic (EM: %d)"
+msgid "private flags = %lx:"
+msgstr "marcaje(flags) private = %lx:"
+
+#: elf32-bfin.c:4783 elf32-frv.c:6585
+#, fuzzy, c-format
+msgid "%pB: cannot link non-fdpic object file into fdpic executable"
+msgstr "%s: linkuire cod non-pic într-un executabil independent de poziție"
-#: elf32-hppa.c:672 elf32-m68hc1x.c:176 elf64-ppc.c:3118
+#: elf32-bfin.c:4787 elf32-frv.c:6589
#, c-format
-msgid "%s: cannot create stub entry %s"
-msgstr "%s: nu se poate crea intrarea trunchiatã %s"
+msgid "%pB: cannot link fdpic object file into non-fdpic executable"
+msgstr ""
+
+#: elf32-bfin.c:4924
+#, fuzzy, c-format
+msgid "*** check this relocation %s"
+msgstr "Relocare nemanipulabilă %s"
+
+#: elf32-bfin.c:5040
+msgid "the bfin target does not currently support the generation of copy relocations"
+msgstr ""
+
+#: elf32-bfin.c:5334 elf32-cr16.c:2710 elf32-m68k.c:4420
+#, fuzzy
+msgid "unsupported relocation type"
+msgstr "tip de relocare nesuportat"
+
+#: elf32-cris.c:1120
+#, fuzzy, c-format
+msgid "%pB, section %pA: unresolvable relocation %s against symbol `%s'"
+msgstr "%s(%s+0x%lx): relocare nerezolvabilă pe simbolul `%s'"
-#: elf32-hppa.c:957 elf32-hppa.c:3538
+#: elf32-cris.c:1185
+#, fuzzy, c-format
+msgid "%pB, section %pA: no PLT nor GOT for relocation %s against symbol `%s'"
+msgstr "%s:Nu există nici PLT nici GOR pentru relocarea %s pe simbolul `%s' din secțiunea %s"
+
+#: elf32-cris.c:1188
+#, fuzzy, c-format
+msgid "%pB, section %pA: no PLT for relocation %s against symbol `%s'"
+msgstr "%s:Nu există nici PLT nici GOR pentru relocarea %s pe simbolul `%s' din secțiunea %s"
+
+#: elf32-cris.c:1194 elf32-cris.c:1327 elf32-cris.c:1592 elf32-cris.c:1675
+#: elf32-cris.c:1828 elf32-tic6x.c:2560
+msgid "[whose name is lost]"
+msgstr "[al cărui nume s-a pierdut]"
+
+#: elf32-cris.c:1312 elf32-tic6x.c:2544
+#, fuzzy, c-format
+msgid "%pB, section %pA: relocation %s with non-zero addend %<PRId64> against local symbol"
+msgstr "%s: relocarea %s cu adăugarea diferită de zero %d pe simbolul local din secțiunea %s"
+
+#: elf32-cris.c:1321 elf32-cris.c:1669 elf32-cris.c:1822 elf32-tic6x.c:2553
+#, fuzzy, c-format
+msgid "%pB, section %pA: relocation %s with non-zero addend %<PRId64> against symbol `%s'"
+msgstr "%s: relocarea %s cu adăugare non-zero %d pe simbolul `%s' din secțiunea %s"
+
+#: elf32-cris.c:1348
+#, fuzzy, c-format
+msgid "%pB, section %pA: relocation %s is not allowed for global symbol: `%s'"
+msgstr "%s: relocarea %s nu este permisă pentru simbolul global `%s' din secțiunea %s"
+
+#: elf32-cris.c:1365
+#, fuzzy, c-format
+msgid "%pB, section %pA: relocation %s with no GOT created"
+msgstr "%s: relocarea %s din secțiunea %s fără GOT creat"
+
+#. We shouldn't get here for GCC-emitted code.
+#: elf32-cris.c:1582
#, c-format
-msgid "%s(%s+0x%lx): cannot reach %s, recompile with -ffunction-sections"
-msgstr "%s(%s+0x%lx): nu se poate gãsi %s, recompilaþi cu -ffunction-sections"
+msgid "%pB, section %pA: relocation %s has an undefined reference to `%s', perhaps a declaration mixup?"
+msgstr ""
+
+#: elf32-cris.c:1585
+#, fuzzy, c-format
+msgid "%pB, section %pA: relocation %s is not allowed for `%s', a global symbol with default visibility, perhaps a declaration mixup?"
+msgstr "%s: relocarea %s nu este permisă pentru simbolul global `%s' din secțiunea %s"
+
+#: elf32-cris.c:1956
+#, fuzzy, c-format
+msgid "%pB, section %pA: relocation %s is not allowed for symbol: `%s' which is defined outside the program, perhaps a declaration mixup?"
+msgstr "%s: relocarea %s nu este permisă pentru simbolul global `%s' din secțiunea %s"
+
+#: elf32-cris.c:2009
+msgid "(too many global variables for -fpic: recompile with -fPIC)"
+msgstr ""
+
+#: elf32-cris.c:2016
+msgid "(thread-local data too big for -fpic or -msmall-tls: recompile with -fPIC or -mno-small-tls)"
+msgstr ""
-#: elf32-hppa.c:1340 elf64-x86-64.c:672 elf64-x86-64.c:797
+#: elf32-cris.c:3051
#, c-format
-msgid "%s: relocation %s can not be used when making a shared object; recompile with -fPIC"
-msgstr "%s: relocarea %s nu poate fi utilizatã când se face un shared object, recompilaþicu -fPIC"
+msgid "%pB, section %pA: v10/v32 compatible object must not contain a PIC relocation"
+msgstr ""
+
+#: elf32-cris.c:3105
+#, fuzzy, c-format
+msgid ""
+"%pB, section %pA:\n"
+" relocation %s not valid in a shared object; typically an option mixup, recompile with -fPIC"
+msgstr ""
+"%s, secțiunea %s:\n"
+" relocarea %s n-ar trebui folosită într-un shared object; recompilați cu -fPIC"
+
+#: elf32-cris.c:3323
+#, fuzzy, c-format
+msgid "%pB, section %pA: relocation %s should not be used in a shared object; recompile with -fPIC"
+msgstr ""
+"%s, secțiunea %s:\n"
+" relocarea %s n-ar trebui folosită într-un shared object; recompilați cu -fPIC"
+
+#: elf32-cris.c:3701
+#, fuzzy, c-format
+msgid "%pB, section `%pA', to symbol `%s': relocation %s should not be used in a shared object; recompile with -fPIC"
+msgstr ""
+"%s, secțiunea %s:\n"
+" relocarea %s n-ar trebui folosită într-un shared object; recompilați cu -fPIC"
+
+#: elf32-cris.c:3813
+msgid "unexpected machine number"
+msgstr ""
-#: elf32-hppa.c:1360
+#: elf32-cris.c:3865
#, c-format
-msgid "%s: relocation %s should not be used when making a shared object; recompile with -fPIC"
-msgstr "%s: relocarea %s nu ar trebui utilizatã când se face un shared object, recompilaþicu -fPIC"
+msgid " [symbols have a _ prefix]"
+msgstr " [simbolurile au un _prefix]"
-#: elf32-hppa.c:1553
+#: elf32-cris.c:3868
#, c-format
-msgid "Could not find relocation section for %s"
-msgstr "Nu se poate gãsi secþiunea de relocare pentru %s"
+msgid " [v10 and v32]"
+msgstr ""
-#: elf32-hppa.c:2828
+#: elf32-cris.c:3871
#, c-format
-msgid "%s: duplicate export stub %s"
-msgstr "%s: exportare de ciot(stub) duplicatã %s"
+msgid " [v32]"
+msgstr ""
+
+#: elf32-cris.c:3915
+#, fuzzy, c-format
+msgid "%pB: uses _-prefixed symbols, but writing file with non-prefixed symbols"
+msgstr "%s: se folosesc simbolurile _-prefixate, dar se scrie fișierul cu simboluri neprefixate"
+
+#: elf32-cris.c:3916
+#, fuzzy, c-format
+msgid "%pB: uses non-prefixed symbols, but writing file with _-prefixed symbols"
+msgstr "%s: se folosesc simboluri neprefixate, dar se scrie fișierul cu simboluri _-prefixate"
-#: elf32-hppa.c:3416
+#: elf32-cris.c:3935
#, c-format
-msgid "%s(%s+0x%lx): fixing %s"
-msgstr "%s(%s+0x%lx): se fixeazã %s"
+msgid "%pB contains CRIS v32 code, incompatible with previous objects"
+msgstr ""
-#: elf32-hppa.c:4039
+#: elf32-cris.c:3937
#, c-format
-msgid "%s(%s+0x%lx): cannot handle %s for %s"
-msgstr "%s(%s+0x%lx): nu pot manipula %s pentru %s"
+msgid "%pB contains non-CRIS-v32 code, incompatible with previous objects"
+msgstr ""
-#: elf32-hppa.c:4357
-msgid ".got section not immediately after .plt section"
-msgstr "secþiunea .got nu urmeazã imediat dupã secþiunea .plt"
+#: elf32-csky.c:2019
+msgid "GOT table size out of range"
+msgstr ""
-#: elf32-i386.c:326
+#: elf32-csky.c:2831
#, c-format
-msgid "%s: invalid relocation type %d"
-msgstr "%s: tip de relocare invalid %d"
+msgid "warning: unrecognized arch eflag '%#lx'"
+msgstr ""
+
+#: elf32-csky.c:2854
+#, fuzzy, c-format
+msgid "warning: unrecognised arch name '%#x'"
+msgstr "%s: Tip nume import necunoscut; %x"
-#: 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
+#: elf32-csky.c:2928 elf32-csky.c:3086
#, c-format
-msgid "%s: bad symbol index: %d"
-msgstr "%s:index de simboluri invalid: %d"
+msgid "%pB: machine flag conflict with target"
+msgstr ""
-#: elf32-i386.c:949 elf32-s390.c:1168 elf32-sh.c:6426 elf32-sparc.c:1011
-#: elf64-s390.c:1129
+#: elf32-csky.c:2941
#, c-format
-msgid "%s: `%s' accessed both as normal and thread local symbol"
-msgstr "%s: `%s' accesate ºi ca simboluri locale normale ºi ca simboluri locale pe fire (thread)"
+msgid "warning: file %pB's arch flag %s conflict with target %s,set target arch flag to %s"
+msgstr ""
-#: elf32-i386.c:1064 elf32-s390.c:1279 elf64-ppc.c:3929 elf64-s390.c:1243
-#: elf64-x86-64.c:886
+#: elf32-csky.c:2970
#, c-format
-msgid "%s: bad relocation section name `%s'"
-msgstr "%s: nume secþiune relocare invalid `%s'"
+msgid "Error: %pB and %pB has different VDSP version"
+msgstr ""
-#: 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
+#: elf32-csky.c:2987
#, c-format
-msgid "%s(%s+0x%lx): unresolvable relocation against symbol `%s'"
-msgstr "%s(%s+0x%lx): relocare nerezolvabilã pe simbolul `%s'"
+msgid "Error: %pB and %pB has different DSP version"
+msgstr ""
-#: elf32-i386.c:2947 elf32-m68k.c:1796 elf32-s390.c:3072 elf64-s390.c:3068
-#: elf64-x86-64.c:2490
+#: elf32-csky.c:3005
#, c-format
-msgid "%s(%s+0x%lx): reloc against `%s': error %d"
-msgstr "%s(%s+0x%lx): relocare pe `%s': eroare %d"
+msgid "Error: %pB and %pB has different FPU ABI"
+msgstr ""
-#: 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 relaxer: schimbare de tabel fãrã potrivirea completã a informaþiei de relocare."
+#: elf32-csky.c:3100
+#, c-format
+msgid "warning: file %pB's arch flag %s conflicts with target ck%s, using %s"
+msgstr ""
-#: elf32-ip2k.c:588 elf32-ip2k.c:767
-msgid "ip2k relaxer: switch table header corrupt."
-msgstr "ip2k relaxer: headerul tablelului de schimbare este corupt."
+#. The r_type is error, not support it.
+#: elf32-csky.c:4342 elf32-i386.c:344
+#, fuzzy, c-format
+msgid "%pB: unsupported relocation type: %#x"
+msgstr "%s: tip de relocare nesuportat: %s"
-#: elf32-ip2k.c:1395
+#: elf32-dlx.c:141
#, c-format
-msgid "ip2k linker: missing page instruction at 0x%08lx (dest = 0x%08lx)."
-msgstr "ip2k linker: lipseºte instrucþiunea de paginã la 0x%08lx (dest = 0x%08lx)."
+msgid "branch (PC rel16) to section (%s) not supported"
+msgstr ""
-#: elf32-ip2k.c:1409
+#: elf32-dlx.c:204
#, c-format
-msgid "ip2k linker: redundant page instruction at 0x%08lx (dest = 0x%08lx)."
-msgstr "ip2k linker: instrucþiune redundantã de paginã la 0x%08lx (dest = 0x%08lx)."
+msgid "jump (PC rel26) to section (%s) not supported"
+msgstr ""
#. Only if it's not an unresolved symbol.
-#: elf32-ip2k.c:1593
+#: elf32-epiphany.c:569 elf32-ip2k.c:1484
msgid "unsupported relocation between data/insn address spaces"
-msgstr "relocare nesuportatã între datã/spaþiu adresã insn"
+msgstr "relocare nesuportată între dată/spațiu adresă insn"
-#: elf32-iq2000.c:907 elf32-m68hc1x.c:1431 elf32-ppc.c:2175 elf64-sparc.c:3072
-#: elfxx-mips.c:9195
+#: elf32-frv.c:1453 elf32-frv.c:1604
+msgid "relocation requires zero addend"
+msgstr ""
+
+#: elf32-frv.c:2833
#, c-format
-msgid "%s: uses different e_flags (0x%lx) fields than previous modules (0x%lx)"
-msgstr "%s: foloseºte câmpuri de marcaje e_flags (0x%lx) diferite de modulele anterioare (0x%lx)"
+msgid "%H: relocation to `%s+%v' may have caused the error above\n"
+msgstr ""
-#: elf32-m32r.c:930
-msgid "SDA relocation when _SDA_BASE_ not defined"
-msgstr "Relocare SDA când _SDA_BASE_ nu este definit"
+#: elf32-frv.c:2850
+msgid "%H: relocation references symbol not defined in the module\n"
+msgstr ""
+
+#: elf32-frv.c:2926
+msgid "%H: R_FRV_GETTLSOFF not applied to a call instruction\n"
+msgstr ""
+
+#: elf32-frv.c:2967
+msgid "%H: R_FRV_GOTTLSDESC12 not applied to an lddi instruction\n"
+msgstr ""
+
+#: elf32-frv.c:3038
+msgid "%H: R_FRV_GOTTLSDESCHI not applied to a sethi instruction\n"
+msgstr ""
+
+#: elf32-frv.c:3075
+msgid "%H: R_FRV_GOTTLSDESCLO not applied to a setlo or setlos instruction\n"
+msgstr ""
+
+#: elf32-frv.c:3122
+msgid "%H: R_FRV_TLSDESC_RELAX not applied to an ldd instruction\n"
+msgstr ""
+
+#: elf32-frv.c:3206
+msgid "%H: R_FRV_GETTLSOFF_RELAX not applied to a calll instruction\n"
+msgstr ""
+
+#: elf32-frv.c:3260
+msgid "%H: R_FRV_GOTTLSOFF12 not applied to an ldi instruction\n"
+msgstr ""
-#: elf32-m32r.c:1018 elf64-alpha.c:4279 elf64-alpha.c:4407 elf32-ia64.c:3958
-#: elf64-ia64.c:3958
+#: elf32-frv.c:3290
+msgid "%H: R_FRV_GOTTLSOFFHI not applied to a sethi instruction\n"
+msgstr ""
+
+#: elf32-frv.c:3319
+msgid "%H: R_FRV_GOTTLSOFFLO not applied to a setlo or setlos instruction\n"
+msgstr ""
+
+#: elf32-frv.c:3349
+msgid "%H: R_FRV_TLSOFF_RELAX not applied to an ld instruction\n"
+msgstr ""
+
+#: elf32-frv.c:3394
+msgid "%H: R_FRV_TLSMOFFHI not applied to a sethi instruction\n"
+msgstr ""
+
+#: elf32-frv.c:3421
+msgid "R_FRV_TLSMOFFLO not applied to a setlo or setlos instruction\n"
+msgstr ""
+
+#: elf32-frv.c:3542 elf32-frv.c:3662
+msgid "%H: %s references dynamic symbol with nonzero addend\n"
+msgstr ""
+
+#: elf32-frv.c:3583 elf32-frv.c:3704
+#, fuzzy
+msgid "%H: cannot emit fixups in read-only section\n"
+msgstr "%s: relocare loader în secțiunea doar-în-citire %s"
+
+#: elf32-frv.c:3613 elf32-frv.c:3746
+#, fuzzy
+msgid "%H: cannot emit dynamic relocations in read-only section\n"
+msgstr "%s: relocare loader în secțiunea doar-în-citire %s"
+
+#: elf32-frv.c:3918
#, c-format
-msgid "%s: unknown relocation type %d"
-msgstr "%s: tip necunoscut de relocare %d"
+msgid "%H: reloc against `%s' references a different segment\n"
+msgstr ""
+
+#: elf32-frv.c:4069
+#, fuzzy, c-format
+msgid "%H: reloc against `%s': %s\n"
+msgstr "%s(%s+0x%lx): relocare pe `%s': eroare %d"
+
+#: elf32-frv.c:6496
+#, fuzzy, c-format
+msgid "%pB: compiled with %s and linked with modules that use non-pic relocations"
+msgstr "%s: compilat cu %s și linkuit cu module care folosesc relocații non-pic"
+
+#: elf32-frv.c:6550 elf32-iq2000.c:830 elf32-m32c.c:876
+#, fuzzy, c-format
+msgid "%pB: compiled with %s and linked with modules compiled with %s"
+msgstr "%s: compilat cu %s și linkuit cu module compilate cu %s"
+
+#: elf32-frv.c:6563
+#, fuzzy, c-format
+msgid "%pB: uses different unknown e_flags (%#x) fields than previous modules (%#x)"
+msgstr "%s: folosește câmpuri marcaje e_flags (0x%lx) diferite de modulele anterioare (0x%lx)"
+
+#: elf32-gen.c:71
+#, fuzzy, c-format
+msgid "%pB: relocations in generic ELF (EM: %d)"
+msgstr "%s: Relocări în ELF generic (EM: %d)"
+
+#: elf32-hppa.c:761 elf32-hppa.c:842 elf64-ppc.c:12181
+msgid "%F%P: Could not assign %pA to an output section. Retry without --enable-non-contiguous-regions.\n"
+msgstr ""
+
+#: elf32-hppa.c:863 elf32-hppa.c:3403
+#, fuzzy, c-format
+msgid "%pB(%pA+%#<PRIx64>): cannot reach %s, recompile with -ffunction-sections"
+msgstr "%s(%s+0x%lx): nu se poate găsi %s, recompilați cu -ffunction-sections"
-#: elf32-m32r.c:1226
+#: elf32-hppa.c:1241
+#, fuzzy, c-format
+msgid "%pB: relocation %s can not be used when making a shared object; recompile with -fPIC"
+msgstr "%s: relocarea %s nu poate fi utilizată când se face un shared object, recompilațicu -fPIC"
+
+#: elf32-hppa.c:2580
+#, fuzzy, c-format
+msgid "%pB: duplicate export stub %s"
+msgstr "%s: exportare de ciot(stub) duplicată %s"
+
+#: elf32-hppa.c:3236
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): %s fixup for insn %#x is not supported in a non-shared link"
+msgstr ""
+
+#: elf32-hppa.c:4032
+#, fuzzy, c-format
+msgid "%s has both normal and TLS relocs"
+msgstr "%s: `%s' accesate și ca simboluri locale normale și ca simboluri locale pe fire (thread)"
+
+#: elf32-hppa.c:4050
+#, fuzzy, c-format
+msgid "%pB:%s has both normal and TLS relocs"
+msgstr "%s: `%s' accesate și ca simboluri locale normale și ca simboluri locale pe fire (thread)"
+
+#: elf32-hppa.c:4109
+#, fuzzy, c-format
+msgid "%pB(%pA+%#<PRIx64>): cannot handle %s for %s"
+msgstr "%s(%s+0x%lx): nu pot manipula %s pentru %s"
+
+#: elf32-hppa.c:4413
+msgid ".got section not immediately after .plt section"
+msgstr "secțiunea .got nu urmează imediat după secțiunea .plt"
+
+#: elf32-i386.c:1163 elf64-x86-64.c:1369
#, c-format
-msgid "%s: The target (%s) of an %s relocation is in the wrong section (%s)"
-msgstr "%s: Þinta (%s) unei relocãri %s este în secþiunea nepotrivitã (%s)"
+msgid "%pB: TLS transition from %s to %s against `%s' at %#<PRIx64> in section `%pA' failed"
+msgstr ""
-#: elf32-m32r.c:1952
+#: elf32-i386.c:1266
+#, fuzzy, c-format
+msgid "%pB: direct GOT relocation R_386_GOT32X against `%s' without base register can not be used when making a shared object"
+msgstr "%s: relocarea %s nu poate fi folosită când se crează un shared object"
+
+#: elf32-i386.c:1695 elf32-s390.c:1151 elf32-sh.c:5488 elf32-tilepro.c:1548
+#: elf32-xtensa.c:1274 elf64-s390.c:1083 elfxx-sparc.c:1556
+#: elfxx-tilegx.c:1767 elfnn-loongarch.c:555 elfnn-riscv.c:568
+#, fuzzy, c-format
+msgid "%pB: `%s' accessed both as normal and thread local symbol"
+msgstr "%s: `%s' accesate și ca simboluri locale normale și ca simboluri locale pe fire (thread)"
+
+#: elf32-i386.c:1767
+#, fuzzy, c-format
+msgid "%pB: unsupported non-PIC call to IFUNC `%s'"
+msgstr "%s: tip de relocare nesuportat: %s"
+
+#: elf32-i386.c:2357 elf64-x86-64.c:2701 elfnn-riscv.c:2300
+#, fuzzy, c-format
+msgid "%pB: relocation %s against STT_GNU_IFUNC symbol `%s' isn't supported"
+msgstr "%s: relocare nerezolvabilă %s pe simbolul `%s' din secțiunea `%s'"
+
+#: elf32-i386.c:2390 elf32-i386.c:3677 elf32-i386.c:3825 elf64-x86-64.c:2758
+#: elf64-x86-64.c:4312 elf64-x86-64.c:4475 elfnn-riscv.c:2173
+#: elfnn-riscv.c:2972 elfnn-riscv.c:3046
#, c-format
-msgid "%s: Instruction set mismatch with previous modules"
-msgstr "%s: Setul de instrucþiuni nu se potriveºte cu modulele anterioare"
+msgid "Local IFUNC function `%s' in %pB\n"
+msgstr ""
+
+#: elf32-i386.c:2563
+#, fuzzy, c-format
+msgid "%pB: direct GOT relocation %s against `%s' without base register can not be used when making a shared object"
+msgstr "%s: relocarea %s nu poate fi folosită când se crează un shared object"
+
+#: elf32-i386.c:2598 elf64-x86-64.c:2974
+#, fuzzy
+msgid "hidden symbol"
+msgstr "Nici un simbol"
+
+#: elf32-i386.c:2601 elf64-x86-64.c:2977
+msgid "internal symbol"
+msgstr ""
+
+#: elf32-i386.c:2604 elf64-x86-64.c:2980
+#, fuzzy
+msgid "protected symbol"
+msgstr "Nici un simbol"
+
+#: elf32-i386.c:2607 elf64-x86-64.c:2983
+#, fuzzy
+msgid "symbol"
+msgstr "Nici un simbol"
+
+#: elf32-i386.c:2613
+#, fuzzy, c-format
+msgid "%pB: relocation R_386_GOTOFF against undefined %s `%s' can not be used when making a shared object"
+msgstr "%s: relocarea %s nu poate fi folosită când se crează un shared object"
+
+#: elf32-i386.c:2626
+#, fuzzy, c-format
+msgid "%pB: relocation R_386_GOTOFF against protected %s `%s' can not be used when making a shared object"
+msgstr "%s: relocarea %s nu poate fi folosită când se crează un shared object"
+
+#: elf32-i386.c:4028 elf64-x86-64.c:4686
+#, fuzzy
+msgid "%F%P: discarded output section: `%pA'\n"
+msgstr "%T: abandonat(discarded) în secțiunea `%s' din %s\n"
-#: elf32-m32r.c:1975
+#: elf32-ip2k.c:855 elf32-ip2k.c:861 elf32-ip2k.c:928 elf32-ip2k.c:934
+msgid "ip2k relaxer: switch table without complete matching relocation information."
+msgstr "ip2k relaxer: schimbare de tabel fără potrivirea completă a informației de relocare."
+
+#: elf32-ip2k.c:878 elf32-ip2k.c:961
+msgid "ip2k relaxer: switch table header corrupt."
+msgstr "ip2k relaxer: headerul tablelului de schimbare este corupt."
+
+#: elf32-ip2k.c:1297
+#, fuzzy, c-format
+msgid "ip2k linker: missing page instruction at %#<PRIx64> (dest = %#<PRIx64>)"
+msgstr "ip2k linker: lipsește instrucțiunea de pagină la 0x%08lx (dest = 0x%08lx)."
+
+#: elf32-ip2k.c:1316
+#, fuzzy, c-format
+msgid "ip2k linker: redundant page instruction at %#<PRIx64> (dest = %#<PRIx64>)"
+msgstr "ip2k linker: instrucțiune redundantă de pagină la 0x%08lx (dest = 0x%08lx)."
+
+#: elf32-lm32.c:609 elf32-nios2.c:3145
+#, fuzzy
+msgid "global pointer relative relocation when _gp not defined"
+msgstr "Relocare relativă GP atâta timp cât _gp nu este definit"
+
+#: elf32-lm32.c:664 elf32-nios2.c:3582
+msgid "global pointer relative address out of range"
+msgstr ""
+
+#: elf32-lm32.c:960
+#, fuzzy, c-format
+msgid "internal error: addend should be zero for %s"
+msgstr "eroare internă: eroare periculoasă"
+
+#: elf32-m32r.c:1461
+msgid "SDA relocation when _SDA_BASE_ not defined"
+msgstr "Relocare SDA când _SDA_BASE_ nu este definit"
+
+#: elf32-m32r.c:2776 elf32-microblaze.c:1093 elf32-microblaze.c:1141
+#, fuzzy, c-format
+msgid "%pB: the target (%s) of an %s relocation is in the wrong section (%pA)"
+msgstr "%s: Ținta (%s) unei relocări %s este în secțiunea nepotrivită (%s)"
+
+#: elf32-m32r.c:3279
+#, fuzzy, c-format
+msgid "%pB: instruction set mismatch with previous modules"
+msgstr "%s: Setul de instrucțiuni nu se potrivește cu modulele anterioare"
+
+#: elf32-m32r.c:3300 elf32-nds32.c:6846
#, c-format
msgid "private flags = %lx"
msgstr "marcaje (flags) private = %lx"
-#: elf32-m32r.c:1980
+#: elf32-m32r.c:3305
+#, c-format
msgid ": m32r instructions"
-msgstr ": instrucþiuni m32r"
+msgstr ": instrucțiuni m32r"
-#: elf32-m32r.c:1981
+#: elf32-m32r.c:3306
+#, c-format
msgid ": m32rx instructions"
-msgstr ": instrucþiuni m32rx"
+msgstr ": instrucțiuni m32rx"
+
+#: elf32-m32r.c:3307
+#, fuzzy, c-format
+msgid ": m32r2 instructions"
+msgstr ": instrucțiuni m32r"
-#: elf32-m68hc1x.c:1217
+#: elf32-m68hc1x.c:1135
+#, fuzzy, c-format
+msgid "reference to the far symbol `%s' using a wrong relocation may result in incorrect execution"
+msgstr "Referința la simbolul depărtat `%s' folosind o relocare invalidă poate duce la execuție incorectă"
+
+#: elf32-m68hc1x.c:1166
#, c-format
-msgid "Reference to the far symbol `%s' using a wrong relocation may result in incorrect execution"
-msgstr "Referinþa la simbolul depãrtat `%s' folosind o relocare invalidã poate duce la execuþie incorectã"
+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 ""
-#: elf32-m68hc1x.c:1240
+#: elf32-m68hc1x.c:1182
#, c-format
msgid "banked address [%lx:%04lx] (%lx) is not in the same bank as current banked address [%lx:%04lx] (%lx)"
-msgstr "adresa banked [%lx:%04lx] (%lx) nu este în acelaºi bank precum adresa banked curentã [%lx:%04lx] (%lx)"
+msgstr "adresa banked [%lx:%04lx] (%lx) nu este în același bank precum adresa banked curentă [%lx:%04lx] (%lx)"
-#: elf32-m68hc1x.c:1259
+#: elf32-m68hc1x.c:1197
#, c-format
msgid "reference to a banked address [%lx:%04lx] in the normal address space at %04lx"
-msgstr "referinþã la adresa banked [%lx:%04lx] în spaþiul normal de adresã la %04lx"
+msgstr "referință la adresa banked [%lx:%04lx] în spațiul normal de adresă la %04lx"
-#: elf32-m68hc1x.c:1396
+#: elf32-m68hc1x.c:1233
#, c-format
-msgid "%s: linking files compiled for 16-bit integers (-mshort) and others for 32-bit integers"
-msgstr "%s: linkuire a fiºierelor compilate pentru întregi(integers) pe 16-biþi (-mshort) ºi a celorlalte pentru întregi(integers) pe 32-biþi"
+msgid "S12 address (%lx) is not within shared RAM(0x2000-0x4000), therefore you must manually offset the address in your code"
+msgstr ""
-#: 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: linkuire a fiºierelor compilate pentru double pe 32-biþi (-fshort-double) ºi a celorlalte pentru double pe 64-biþi"
+#: elf32-m68hc1x.c:1357
+#, fuzzy, c-format
+msgid "%pB: linking files compiled for 16-bit integers (-mshort) and others for 32-bit integers"
+msgstr "%s: linkuire a fișierelor compilate pentru întregi(integers) pe 16-biți (-mshort) și a celorlalte pentru întregi(integers) pe 32-biți"
-#: elf32-m68hc1x.c:1414
-#, c-format
-msgid "%s: linking files compiled for HCS12 with others compiled for HC12"
-msgstr "%s:linkuire a fiºierelor compilate pentru HCS12 cu celelalte compilate pentru HC12"
+#: elf32-m68hc1x.c:1364
+#, fuzzy, c-format
+msgid "%pB: linking files compiled for 32-bit double (-fshort-double) and others for 64-bit double"
+msgstr "%s: linkuire a fișierelor compilate pentru double pe 32-biți (-fshort-double) și a celorlalte pentru double pe 64-biți"
-#: elf32-m68hc1x.c:1462
+#: elf32-m68hc1x.c:1373
+#, fuzzy, c-format
+msgid "%pB: linking files compiled for HCS12 with others compiled for HC12"
+msgstr "%s:linkuire a fișierelor compilate pentru HCS12 cu celelalte compilate pentru HC12"
+
+#: elf32-m68hc1x.c:1418 elf32-xgate.c:497
+#, c-format
msgid "[abi=32-bit int, "
msgstr "[abi=32-bit int, "
-#: elf32-m68hc1x.c:1464
+#: elf32-m68hc1x.c:1420 elf32-xgate.c:499
+#, c-format
msgid "[abi=16-bit int, "
msgstr "[abi=16-bit int, "
-#: elf32-m68hc1x.c:1467
+#: elf32-m68hc1x.c:1423 elf32-xgate.c:502
+#, c-format
msgid "64-bit double, "
-msgstr "double pe 64-biþi, "
+msgstr "double pe 64-biți, "
-#: elf32-m68hc1x.c:1469
+#: elf32-m68hc1x.c:1425 elf32-xgate.c:504
+#, c-format
msgid "32-bit double, "
-msgstr "double pe 32-biþi, "
+msgstr "double pe 32-biți, "
-#: elf32-m68hc1x.c:1472
+#: elf32-m68hc1x.c:1428
+#, c-format
msgid "cpu=HC11]"
msgstr "cpu=HC11]"
-#: elf32-m68hc1x.c:1474
+#: elf32-m68hc1x.c:1430
+#, c-format
msgid "cpu=HCS12]"
msgstr "cpu=HCS12]"
-#: elf32-m68hc1x.c:1476
+#: elf32-m68hc1x.c:1432
+#, c-format
msgid "cpu=HC12]"
msgstr "cpu=HC12]"
-#: elf32-m68hc1x.c:1479
+#: elf32-m68hc1x.c:1435
+#, c-format
msgid " [memory=bank-model]"
msgstr " [memorie=mod-bank]"
-#: elf32-m68hc1x.c:1481
+#: elf32-m68hc1x.c:1437
+#, c-format
msgid " [memory=flat]"
-msgstr " [memorie=întinsã(flat)]"
+msgstr " [memorie=întinsă(flat)]"
+
+#: elf32-m68hc1x.c:1440
+#, c-format
+msgid " [XGATE RAM offsetting]"
+msgstr ""
+
+#: elf32-m68k.c:1157 elf32-m68k.c:1165 elf32-ppc.c:3597 elf32-ppc.c:3605
+#, c-format
+msgid "%pB uses hard float, %pB uses soft float"
+msgstr ""
+
+#: elf32-m68k.c:1280 elf32-m68k.c:1281 vms-alpha.c:7906 vms-alpha.c:7922
+#, fuzzy
+msgid "unknown"
+msgstr "*necunoscut*"
+
+#: elf32-m68k.c:1731
+#, c-format
+msgid "%pB: GOT overflow: number of relocations with 8-bit offset > %d"
+msgstr ""
+
+#: elf32-m68k.c:1738
+#, c-format
+msgid "%pB: GOT overflow: number of relocations with 8- or 16-bit offset > %d"
+msgstr ""
-#: elf32-m68k.c:400
-msgid " [cpu32]"
-msgstr " [cpu32]"
+#. Pacify gcc -Wall.
+#: elf32-mep.c:139
+#, c-format
+msgid "mep: no reloc for code %d"
+msgstr ""
-#: elf32-m68k.c:403
-msgid " [m68000]"
-msgstr " [m68000]"
+#: elf32-mep.c:146
+#, c-format
+msgid "MeP: howto %d has type %d"
+msgstr ""
-#: elf32-mcore.c:353 elf32-mcore.c:456
+#: elf32-mep.c:618
#, c-format
-msgid "%s: Relocation %s (%d) is not currently supported.\n"
-msgstr "%s: Relocarea %s (%d) nu este încã suportatã.\n"
+msgid "%pB and %pB are for different cores"
+msgstr ""
-#: elf32-mcore.c:441
+#: elf32-mep.c:637
#, c-format
-msgid "%s: Unknown relocation type %d\n"
-msgstr "%s: Tip necunoscut de relocare %d\n"
+msgid "%pB and %pB are for different configurations"
+msgstr ""
-#: elf32-mips.c:1170 elf64-mips.c:1717 elfn32-mips.c:1664
+#: elf32-mep.c:675
+#, fuzzy, c-format
+msgid "private flags = 0x%lx"
+msgstr "marcaje(flags) private = 0x%lx"
+
+#: elf32-metag.c:1857
+#, c-format
+msgid "%pB(%pA): multiple TLS models are not supported"
+msgstr ""
+
+#: elf32-metag.c:1860
+#, c-format
+msgid "%pB(%pA): shared library symbol %s encountered whilst performing a static link"
+msgstr ""
+
+#: elf32-microblaze.c:1536 elf32-tilepro.c:3021 elfxx-sparc.c:3446
+#: elfxx-tilegx.c:3415
+#, fuzzy, c-format
+msgid "%pB: probably compiled without -fPIC?"
+msgstr "%s: probabil compilat fără -fPIC?"
+
+#: elf32-mips.c:1777 elf64-mips.c:3516 elfn32-mips.c:3334
+#, fuzzy
+msgid "literal relocation occurs for an external symbol"
+msgstr "relocarea relativă gp 32bits are loc pe un simbol extern"
+
+#: elf32-mips.c:1824 elf32-score.c:563 elf32-score7.c:465 elf64-mips.c:3559
+#: elfn32-mips.c:3375
msgid "32bits gp relative relocation occurs for an external symbol"
-msgstr "relocarea relativã gp 32bits are loc pe un simbol extern"
+msgstr "relocarea relativă gp 32bits are loc pe un simbol extern"
+
+#: elf32-msp430.c:914
+#, c-format
+msgid "error: final size of uleb128 value at offset 0x%lx in %pA from %pB exceeds available space"
+msgstr ""
+
+#: elf32-msp430.c:983 elf32-msp430.c:1297
+msgid "try enabling relaxation to avoid relocation truncations"
+msgstr ""
+
+#: elf32-msp430.c:1506
+msgid "internal error: branch/jump to an odd address detected"
+msgstr ""
+
+#: elf32-msp430.c:2671
+#, c-format
+msgid "warning: %pB: unknown MSPABI object attribute %d"
+msgstr ""
-#: elf32-mips.c:1314 elf64-mips.c:1830 elfn32-mips.c:1783
+#: elf32-msp430.c:2772
#, c-format
-msgid "Linking mips16 objects into %s format is not supported"
-msgstr "Linkuirea obiectelor mips16 în formatul %s nu este suportatã"
+msgid "error: %pB uses %s instructions but %pB uses %s"
+msgstr ""
-#: elf32-ppc.c:2056
+#: elf32-msp430.c:2784
+#, c-format
+msgid "error: %pB uses the %s code model whereas %pB uses the %s code model"
+msgstr ""
+
+#: elf32-msp430.c:2797
+#, c-format
+msgid "error: %pB uses the large code model but %pB uses MSP430 instructions"
+msgstr ""
+
+#: elf32-msp430.c:2808
+#, c-format
+msgid "error: %pB uses the %s data model whereas %pB uses the %s data model"
+msgstr ""
+
+#: elf32-msp430.c:2821
+#, c-format
+msgid "error: %pB uses the small code model but %pB uses the %s data model"
+msgstr ""
+
+#: elf32-msp430.c:2833
+#, c-format
+msgid "error: %pB uses the %s data model but %pB only uses MSP430 instructions"
+msgstr ""
+
+#: elf32-msp430.c:2858
+#, c-format
+msgid "error: %pB can use the upper region for data, but %pB assumes data is exclusively in lower memory"
+msgstr ""
+
+#: elf32-nds32.c:3620
+#, fuzzy, c-format
+msgid "error: can't find symbol: %s"
+msgstr "eroare: simbol __rtinit nedefinit"
+
+#: elf32-nds32.c:5519
+#, c-format
+msgid "%pB: warning: %s unsupported in shared mode"
+msgstr ""
+
+#: elf32-nds32.c:5645
+#, c-format
+msgid "%pB: warning: unaligned access to GOT entry"
+msgstr ""
+
+#: elf32-nds32.c:5686
+#, c-format
+msgid "%pB: warning: relocate SDA_BASE failed"
+msgstr ""
+
+#: elf32-nds32.c:5708
+#, c-format
+msgid "%pB(%pA): warning: unaligned small data access of type %d"
+msgstr ""
+
+#: elf32-nds32.c:6634
+#, fuzzy, c-format
+msgid "%pB: ISR vector size mismatch with previous modules, previous %u-byte, current %u-byte"
+msgstr "%s: Setul de instrucțiuni nu se potrivește cu modulele anterioare"
+
+#: elf32-nds32.c:6682
+#, fuzzy, c-format
+msgid "%pB: warning: endian mismatch with previous modules"
+msgstr "%s: Setul de instrucțiuni nu se potrivește cu modulele anterioare"
+
+#: elf32-nds32.c:6696
+#, c-format
+msgid "%pB: warning: older version of object file encountered, please recompile with current tool chain"
+msgstr ""
+
+#: elf32-nds32.c:6784
+#, fuzzy, c-format
+msgid "%pB: error: ABI mismatch with previous modules"
+msgstr "%s: Arhitectura nu se potrivește cu modulele anterioare"
+
+#: elf32-nds32.c:6794
+#, fuzzy, c-format
+msgid "%pB: error: instruction set mismatch with previous modules"
+msgstr "%s: Setul de instrucțiuni nu se potrivește cu modulele anterioare"
+
+#: elf32-nds32.c:6821
+#, c-format
+msgid "%pB: warning: incompatible elf-versions %s and %s"
+msgstr ""
+
+#: elf32-nds32.c:6852
+#, fuzzy, c-format
+msgid ": n1 instructions"
+msgstr ": instrucțiuni m32r"
+
+#: elf32-nds32.c:6855
+#, fuzzy, c-format
+msgid ": n1h instructions"
+msgstr ": instrucțiuni m32r"
+
+#: elf32-nds32.c:9304
+#, c-format
+msgid "%pB: error: search_nds32_elf_blank reports wrong node"
+msgstr ""
+
+#: elf32-nds32.c:9568
+#, fuzzy, c-format
+msgid "%pB: warning: %s points to unrecognized reloc at %#<PRIx64>"
+msgstr "%s: 0x%lx: avertisment: R_SH_USES trimite către insn necunoscut 0x%x"
+
+#: elf32-nds32.c:12833
+#, c-format
+msgid "%pB: nested OMIT_FP in %pA"
+msgstr ""
+
+#: elf32-nds32.c:12852
+#, c-format
+msgid "%pB: unmatched OMIT_FP in %pA"
+msgstr ""
+
+#: elf32-nds32.c:13134 elfxx-mips.c:13426 reloc.c:8599
+#, c-format
+msgid "%X%P: %pB(%pA): relocation \"%pR\" goes out of range\n"
+msgstr ""
+
+#: elf32-nios2.c:2934
+#, c-format
+msgid "error: %pB: big-endian R2 is not supported"
+msgstr ""
+
+#: elf32-nios2.c:3826
+#, fuzzy, c-format
+msgid "global pointer relative relocation at address %#<PRIx64> when _gp not defined\n"
+msgstr "Relocare relativă GP atâta timp cât _gp nu este definit"
+
+#: elf32-nios2.c:3856
+#, c-format
+msgid "unable to reach %s (at %#<PRIx64>) from the global pointer (at %#<PRIx64>) because the offset (%<PRId64>) is out of the allowed range, -32678 to 32767\n"
+msgstr ""
+
+#: elf32-nios2.c:4511 elf32-pru.c:931
+msgid "relocation out of range"
+msgstr ""
+
+#: elf32-nios2.c:4521 elf32-pru.c:941 elf32-tic6x.c:2657
+#, fuzzy
+msgid "dangerous relocation"
+msgstr "eroare internă: relocare periculoasă"
+
+#: elf32-nios2.c:5360
+#, c-format
+msgid "dynamic variable `%s' is zero size"
+msgstr ""
+
+#: elf32-or1k.c:1241
+#, fuzzy, c-format
+msgid "%pB: Cannot handle relocation value size of %d"
+msgstr "%s: tip necunoscut de relocare %d"
+
+#: elf32-or1k.c:1349
+#, fuzzy, c-format
+msgid "%pB: unknown relocation type %d"
+msgstr "%s: tip necunoscut de relocare %d"
+
+#: elf32-or1k.c:1403
+#, fuzzy, c-format
+msgid "%pB: addend should be zero for plt relocations"
+msgstr "Nu există memorie suficientă pentru a sorta relocările"
+
+#: elf32-or1k.c:1520
+#, fuzzy, c-format
+msgid "%pB: addend should be zero for got relocations"
+msgstr "Nu există memorie suficientă pentru a sorta relocările"
+
+#: elf32-or1k.c:1537
+#, fuzzy, c-format
+msgid "%pB: gotoff relocation against dynamic symbol %s"
+msgstr "%s: relocare @gprel pe simbolul dinamic %s"
+
+#: elf32-or1k.c:1551 elf32-or1k.c:1566 elf64-alpha.c:4427 elf64-alpha.c:4571
+#, fuzzy, c-format
+msgid "%pB: pc-relative relocation against dynamic symbol %s"
+msgstr "%s: relocare relativă pc pentru simbolul dinamic %s"
+
+#: elf32-or1k.c:1580
+#, fuzzy, c-format
+msgid "%pB: non-pic relocation against symbol %s"
+msgstr "%s: relocare @pcrell pe simbolul dinamic %s"
+
+#: elf32-or1k.c:1664
+#, fuzzy, c-format
+msgid "%pB: support for local dynamic not implemented"
+msgstr "%s: neimplementată complet"
+
+#: elf32-or1k.c:1843
+#, c-format
+msgid "%pB: will not resolve runtime TLS relocation"
+msgstr ""
+
+#: elf32-or1k.c:2177
+#, fuzzy, c-format
+msgid "%pB: bad relocation section name `%s'"
+msgstr "%s: nume secțiune relocare invalid `%s'"
+
+#: elf32-or1k.c:3291
+#, fuzzy, c-format
+msgid "%pB: %s flag mismatch with previous modules"
+msgstr "%s: Setul de instrucțiuni nu se potrivește cu modulele anterioare"
+
+#: elf32-ppc.c:993 elf64-ppc.c:1749
#, c-format
msgid "generic linker can't handle %s"
msgstr "linkerul generic nu poate manipula(handle) %s"
-#: elf32-ppc.c:2138
+#: elf32-ppc.c:1633
+#, fuzzy, c-format
+msgid "corrupt %s section in %pB"
+msgstr "secțiune coruptă %s în %s"
+
+#: elf32-ppc.c:1652
+#, fuzzy, c-format
+msgid "unable to read in %s section from %pB"
+msgstr "nu se poate citi în secțiunea %s din %s"
+
+#: elf32-ppc.c:1694
+#, fuzzy, c-format
+msgid "warning: unable to set size of %s section in %pB"
+msgstr "avertisment: nu se poate seta mărimea secțiunii %s în %s"
+
+#: elf32-ppc.c:1743
+#, fuzzy
+msgid "failed to allocate space for new APUinfo section"
+msgstr "nu s-a putut aloca spațiu pentru secțiunea nouă APUinfo."
+
+#: elf32-ppc.c:1762
+#, fuzzy
+msgid "failed to compute new APUinfo section"
+msgstr "nu s-a putut calcula(compute) secțiunea nouă APUinfo."
+
+#: elf32-ppc.c:1765
+#, fuzzy
+msgid "failed to install new APUinfo section"
+msgstr "nu s-a putut instala secțiunea APUinfo nouă."
+
+#: elf32-ppc.c:2873
+#, fuzzy, c-format
+msgid "%pB: relocation %s cannot be used when making a shared object"
+msgstr "%s: relocarea %s nu poate fi folosită când se crează un shared object"
+
+#: elf32-ppc.c:3613 elf32-ppc.c:3621
#, c-format
-msgid "%s: compiled with -mrelocatable and linked with modules compiled normally"
-msgstr "%s: compilat cu -mrelocatable ºi linkuit cu module compilate normal"
+msgid "%pB uses double-precision hard float, %pB uses single-precision hard float"
+msgstr ""
-#: elf32-ppc.c:2147
+#: elf32-ppc.c:3643 elf32-ppc.c:3651
#, c-format
-msgid "%s: compiled normally and linked with modules compiled with -mrelocatable"
-msgstr "%s: compilat normal ºi linkuite cu module compilate cu -mrelocatable"
+msgid "%pB uses 64-bit long double, %pB uses 128-bit long double"
+msgstr ""
-#: elf32-ppc.c:3413
+#: elf32-ppc.c:3659 elf32-ppc.c:3667
#, c-format
-msgid "%s: relocation %s cannot be used when making a shared object"
-msgstr "%s: relocarea %s nu poate fi folositã când se creazã un shared object"
+msgid "%pB uses IBM long double, %pB uses IEEE long double"
+msgstr ""
-#. It does not make sense to have a procedure linkage
-#. table entry for a local symbol.
-#: elf32-ppc.c:3619
+#: elf32-ppc.c:3734 elf32-ppc.c:3743
#, c-format
-msgid "%s(%s+0x%lx): %s reloc against local symbol"
-msgstr "relocare %s(%s+0x%lx): %s pe simbol local"
+msgid "%pB uses AltiVec vector ABI, %pB uses SPE vector ABI"
+msgstr ""
-#: elf32-ppc.c:4862 elf64-ppc.c:7789
+#: elf32-ppc.c:3772 elf32-ppc.c:3781
#, c-format
-msgid "%s: unknown relocation type %d for symbol %s"
-msgstr "%s: tip de relocare %d necunoscut pentru simbolul %s"
+msgid "%pB uses r3/r4 for small structure returns, %pB uses memory"
+msgstr ""
+
+#: elf32-ppc.c:3845
+#, fuzzy, c-format
+msgid "%pB: compiled with -mrelocatable and linked with modules compiled normally"
+msgstr "%s: compilat cu -mrelocatable și linkuit cu module compilate normal"
+
+#: elf32-ppc.c:3853
+#, fuzzy, c-format
+msgid "%pB: compiled normally and linked with modules compiled with -mrelocatable"
+msgstr "%s: compilat normal și linkuite cu module compilate cu -mrelocatable"
-#: elf32-ppc.c:5113
+#: elf32-ppc.c:3924
#, c-format
-msgid "%s(%s+0x%lx): non-zero addend on %s reloc against `%s'"
-msgstr "%s(%s+0x%lx): adãugare non-zero în relocarea %s pentru `%s'"
+msgid "%pB(%pA+0x%lx): expected 16A style relocation on 0x%08x insn"
+msgstr ""
+
+#: elf32-ppc.c:3943
+#, c-format
+msgid "%pB(%pA+0x%lx): expected 16D style relocation on 0x%08x insn"
+msgstr ""
-#: elf32-ppc.c:5399 elf32-ppc.c:5425 elf32-ppc.c:5484
+#: elf32-ppc.c:4047
#, c-format
-msgid "%s: the target (%s) of a %s relocation is in the wrong output section (%s)"
-msgstr "%s: þinta (%s) unei relocãri %s este într-o secþiune invalidã de output (%s)"
+msgid "bss-plt forced due to %pB"
+msgstr ""
+
+#: elf32-ppc.c:4049
+msgid "bss-plt forced by profiling"
+msgstr ""
+
+#: elf32-ppc.c:4626 elf64-ppc.c:8483
+#, fuzzy
+msgid "%H: warning: %s unexpected insn %#x.\n"
+msgstr "%s: 0x%lx: avertisment: simbol în secțiune neașteptată"
-#: elf32-ppc.c:5539
+#. 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:4656 elf64-ppc.c:8548
#, c-format
-msgid "%s: relocation %s is not yet supported for symbol %s."
-msgstr "%s: relocarea %s nu este încã suportatã pentru simbolul %s."
+msgid "%H arg lost __tls_get_addr, TLS optimization disabled\n"
+msgstr ""
+
+#: elf32-ppc.c:5582 elf32-sh.c:3017 elf32-tilepro.c:2248 elfxx-sparc.c:2454
+#: elfxx-tilegx.c:2494
+#, fuzzy, c-format
+msgid "%pB: dynamic relocation in read-only section `%pA'\n"
+msgstr "%s: relocare loader în secțiunea doar-în-citire %s"
+
+#: elf32-ppc.c:7437
+#, fuzzy
+msgid "%P: %H: error: %s with unexpected instruction %x\n"
+msgstr "%s: 0x%lx: avertisment: simbol în secțiune neașteptată"
+
+#: elf32-ppc.c:7475
+msgid "%H: fixup branch overflow\n"
+msgstr ""
-#: elf32-ppc.c:5594 elf64-ppc.c:8461
+#: elf32-ppc.c:7515 elf32-ppc.c:7553
#, c-format
-msgid "%s(%s+0x%lx): unresolvable %s relocation against symbol `%s'"
-msgstr "%s(%s+0x%lx): relocare nerezolvabilã %s pe simbolul `%s'"
+msgid "%pB(%pA+%#<PRIx64>): error: %s with unexpected instruction %#x"
+msgstr ""
-#: elf32-ppc.c:5644 elf64-ppc.c:8507
+#: elf32-ppc.c:7617
#, c-format
-msgid "%s(%s+0x%lx): %s reloc against `%s': error %d"
+msgid "%X%H: unsupported bss-plt -fPIC ifunc %s\n"
+msgstr ""
+
+#: elf32-ppc.c:7653
+#, fuzzy, c-format
+msgid "%pB: reloc %#x unsupported"
+msgstr "%s: nesuportat"
+
+#: elf32-ppc.c:7938
+#, fuzzy, c-format
+msgid "%H: non-zero addend on %s reloc against `%s'\n"
+msgstr "%s(%s+0x%lx): adăugare non-zero în relocarea %s pentru `%s'"
+
+#. @local on an ifunc does not really make sense since
+#. the ifunc resolver can take you anywhere. More
+#. seriously, calls to ifuncs must go through a plt call
+#. stub, and for pic the plt call stubs uses r30 to
+#. access the PLT. The problem is that a call that is
+#. local won't have the +32k reloc addend trick marking
+#. -fPIC code, so the linker won't know whether r30 is
+#. _GLOBAL_OFFSET_TABLE_ or pointing into a .got2 section.
+#: elf32-ppc.c:7970
+#, c-format
+msgid "%X%H: @local call to ifunc %s\n"
+msgstr ""
+
+#: elf32-ppc.c:8149
+#, fuzzy, c-format
+msgid "%H: relocation %s for indirect function %s unsupported\n"
+msgstr "%s: Relocarea %s (%d) nu este încă suportată.\n"
+
+#: elf32-ppc.c:8488 elf32-ppc.c:8519 elf32-ppc.c:8622 elf32-ppc.c:8722
+#, fuzzy, c-format
+msgid "%pB: the target (%s) of a %s relocation is in the wrong output section (%s)"
+msgstr "%s: ținta (%s) unei relocări %s este într-o secțiune invalidă de output (%s)"
+
+#: elf32-ppc.c:8900 elf32-ppc.c:8921
+#, fuzzy
+msgid "%X%P: %H: %s relocation unsupported for bss-plt\n"
+msgstr "%s: relocarea %s nu este suportată pentru simbolul %s."
+
+#: elf32-ppc.c:9003
+#, fuzzy, c-format
+msgid "%H: error: %s against `%s' not a multiple of %u\n"
+msgstr "%s: eroare: relocarea %s nu este multiplu de %d"
+
+#: elf32-ppc.c:9032
+#, fuzzy, c-format
+msgid "%H: unresolvable %s relocation against symbol `%s'\n"
+msgstr "%s(%s+0x%lx): relocare nerezolvabilă %s pe simbolul `%s'"
+
+#: elf32-ppc.c:9114
+#, fuzzy, c-format
+msgid "%H: %s reloc against `%s': error %d\n"
msgstr "%s(%s+0x%lx):relocarea %s pe `%s': eroare %d"
-#: elf32-ppc.c:5888
+#: elf32-ppc.c:9995
+msgid "%X%P: text relocations and GNU indirect functions will result in a segfault at runtime\n"
+msgstr ""
+
+#: elf32-ppc.c:9999 elf64-ppc.c:18133
+msgid "%P: warning: text relocations and GNU indirect functions may result in a segfault at runtime\n"
+msgstr ""
+
+#: elf32-ppc.c:10044
#, c-format
-msgid "corrupt or empty %s section in %s"
-msgstr "secþiune %s coruptã sau vidã în %s"
+msgid "%s not defined in linker created %pA"
+msgstr ""
+
+#: elf32-pru.c:582 elf32-pru.c:1475
+#, c-format
+msgid "error: %pB: old incompatible object file detected"
+msgstr ""
+
+#: elf32-rl78.c:551
+#, fuzzy
+msgid "RL78 reloc stack overflow/underflow"
+msgstr "eroare internă: eroare depășire de domeniu(out of range)"
+
+#: elf32-rl78.c:555
+msgid "RL78 reloc divide by zero"
+msgstr ""
+
+#: elf32-rl78.c:1069
+msgid "warning: RL78_SYM reloc with an unknown symbol"
+msgstr ""
+
+#: elf32-rl78.c:1115
+msgid "%H: %s out of range\n"
+msgstr ""
+
+#: elf32-rl78.c:1122
+#, fuzzy
+msgid "%H: relocation type %u is not supported\n"
+msgstr "%s: legătura relocalizabilă din %s către %s nesuportată"
+
+#: elf32-rl78.c:1134
+msgid "%H: relocation %s returns an unrecognized value %x\n"
+msgstr ""
-#: elf32-ppc.c:5895
+#: elf32-rl78.c:1220
#, c-format
-msgid "unable to read in %s section from %s"
-msgstr "nu se poate citi în secþiunea %s din %s"
+msgid "RL78 ABI conflict: G10 file %pB cannot be linked with %s file %pB"
+msgstr ""
-#: elf32-ppc.c:5901
+#: elf32-rl78.c:1237
#, c-format
-msgid "corrupt %s section in %s"
-msgstr "secþiune coruptã %s în %s"
+msgid "RL78 ABI conflict: cannot link %s file %pB with %s file %pB"
+msgstr ""
-#: elf32-ppc.c:5944
+#: elf32-rl78.c:1246
+msgid "RL78 merge conflict: cannot link 32-bit and 64-bit objects together"
+msgstr ""
+
+#: elf32-rl78.c:1250 elf32-rl78.c:1254
#, c-format
-msgid "warning: unable to set size of %s section in %s"
-msgstr "avertisment: nu se poate seta mãrimea secþiunii %s în %s"
+msgid "- %pB is 64-bit, %pB is not"
+msgstr ""
-#: elf32-ppc.c:5994
-msgid "failed to allocate space for new APUinfo section."
-msgstr "nu s-a putut aloca spaþiu pentru secþiunea nouã APUinfo."
+#: elf32-rl78.c:1281
+#, fuzzy, c-format
+msgid " [64-bit doubles]"
+msgstr "double pe 64-biți, "
-#: elf32-ppc.c:6013
-msgid "failed to compute new APUinfo section."
-msgstr "nu s-a putut calcula(compute) secþiunea nouã APUinfo."
+#: elf32-rx.c:618
+#, c-format
+msgid "%pB:%pA: table entry %s outside table"
+msgstr ""
-#: elf32-ppc.c:6016
-msgid "failed to install new APUinfo section."
-msgstr "nu s-a putut instala secþiunea APUinfo nouã."
+#: elf32-rx.c:625
+#, c-format
+msgid "%pB:%pA: table entry %s not word-aligned within table"
+msgstr ""
-#: elf32-s390.c:2256 elf64-s390.c:2226
+#: elf32-rx.c:700
#, c-format
-msgid "%s(%s+0x%lx): invalid instruction for TLS relocation %s"
-msgstr "%s(%s+0x%lx): instrucþiune invalidã pentur relocarea TLS %s"
+msgid "%pB:%pA: warning: deprecated Red Hat reloc %s detected against: %s"
+msgstr ""
-#: elf32-sh.c:2103
+#. 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:720
#, c-format
-msgid "%s: 0x%lx: warning: bad R_SH_USES offset"
-msgstr "%s: 0x%lx: avertisment: offset R_SH_USES invalid"
+msgid "%pB(%pA): unsafe PID relocation %s at %#<PRIx64> (against %s in %s)"
+msgstr ""
-#: elf32-sh.c:2115
+#: elf32-rx.c:1304
+msgid "warning: RX_SYM reloc with an unknown symbol"
+msgstr ""
+
+#: elf32-rx.c:1472
#, c-format
-msgid "%s: 0x%lx: warning: R_SH_USES points to unrecognized insn 0x%x"
-msgstr "%s: 0x%lx: avertisment: R_SH_USES trimite cãtre insn necunoscut 0x%x"
+msgid "%pB(%pA): error: call to undefined function '%s'"
+msgstr ""
-#: elf32-sh.c:2132
+#: elf32-rx.c:3184
#, c-format
-msgid "%s: 0x%lx: warning: bad R_SH_USES load offset"
-msgstr "%s: 0x%lx: avertisment:offset de încãrcare R_SH_USES invalid"
+msgid "there is a conflict merging the ELF header flags from %pB"
+msgstr ""
-#: elf32-sh.c:2147
+#: elf32-rx.c:3187
#, c-format
-msgid "%s: 0x%lx: warning: could not find expected reloc"
-msgstr "%s: 0x%lx: avertismetn: nu s-a putut gãsi relocarea aºteptatã"
+msgid " the input file's flags: %s"
+msgstr ""
-#: elf32-sh.c:2175
+#: elf32-rx.c:3189
#, c-format
-msgid "%s: 0x%lx: warning: symbol in unexpected section"
-msgstr "%s: 0x%lx: avertisment: simbol în secþiune neaºteptatã"
+msgid " the output file's flags: %s"
+msgstr ""
-#: elf32-sh.c:2300
+#: elf32-rx.c:3796
#, c-format
-msgid "%s: 0x%lx: warning: could not find expected COUNT reloc"
-msgstr "%s: 0x%lx: avertisment: nu s-a putut gãsi relocarea COUNT aºteptatã"
+msgid "%pB:%pA: table %s missing corresponding %s"
+msgstr ""
-#: elf32-sh.c:2309
+#: elf32-rx.c:3804
#, c-format
-msgid "%s: 0x%lx: warning: bad count"
-msgstr "%s: 0x%lx: avertisment: numãrãtoare(count) invalidã"
+msgid "%pB:%pA: %s and %s must be in the same input section"
+msgstr ""
+
+#: elf32-s390.c:2009 elf64-s390.c:1963
+#, fuzzy, c-format
+msgid "%pB(%pA+%#<PRIx64>): invalid instruction for TLS relocation %s"
+msgstr "%s(%s+0x%lx): instrucțiune invalidă pentur relocarea TLS %s"
+
+#: elf32-score.c:1515 elf32-score7.c:1378 elfxx-mips.c:3798
+msgid "not enough GOT space for local GOT entries"
+msgstr "nu există destul spațiu GOT pentru intrările GOT locale"
+
+#: elf32-score.c:2747
+#, fuzzy
+msgid "address not word aligned"
+msgstr "relocare incorect aliniată"
-#: elf32-sh.c:2712 elf32-sh.c:3088
+#: elf32-score.c:2828 elf32-score7.c:2635
+#, fuzzy, c-format
+msgid "%pB: malformed reloc detected for section %pA"
+msgstr "%s: Relocare malformată detectată pentru secțiunea %s"
+
+#: elf32-score.c:2882 elf32-score7.c:2689
+#, fuzzy, c-format
+msgid "%pB: CALL15 reloc at %#<PRIx64> not against global symbol"
+msgstr "%s: relocarea CALL16 la 0x%lx nu este pe simbolul global"
+
+#: elf32-score.c:3990 elf32-score7.c:3797
+#, fuzzy, c-format
+msgid " [pic]"
+msgstr " [nonpic]"
+
+#: elf32-score.c:3994 elf32-score7.c:3801
#, c-format
-msgid "%s: 0x%lx: fatal: reloc overflow while relaxing"
-msgstr "%s: 0x%lx: fatal: relocare depãºitã(overflow) în timpul relaxãrii"
+msgid " [fix dep]"
+msgstr ""
+
+#: elf32-score.c:4041 elf32-score7.c:3848
+#, fuzzy, c-format
+msgid "%pB: warning: linking PIC files with non-PIC files"
+msgstr "%s: avertisment: linkuire de fișiere PIC cu fișiere non-PIC"
-#: elf32-sh.c:4654 elf64-sh64.c:1585
-msgid "Unexpected STO_SH5_ISA32 on local symbol is not handled"
-msgstr "STO_SH5_ISA32 neaºteptat pe simbol local ce nu poate fi manipulat"
+#: elf32-sh.c:532
+#, fuzzy, c-format
+msgid "%pB: %#<PRIx64>: warning: R_SH_USES points to unrecognized insn 0x%x"
+msgstr "%s: 0x%lx: avertisment: R_SH_USES trimite către insn necunoscut 0x%x"
-#: elf32-sh.c:4809
+#: elf32-sh.c:3752
+#, fuzzy, c-format
+msgid "%pB: %#<PRIx64>: fatal: unaligned branch target for relax-support relocation"
+msgstr "%s: 0x%lx: fatal: ramură țintă nealiniată pentru relocare cu suport de relaxare"
+
+#: elf32-sh.c:3782 elf32-sh.c:3798
#, c-format
-msgid "%s: unresolvable relocation against symbol `%s' from %s section"
-msgstr "%s: relocare nerezolvabilã pe simbolul '%s' din secþiunea `%s'"
+msgid "%pB: %#<PRIx64>: fatal: unaligned %s relocation %#<PRIx64>"
+msgstr ""
-#: elf32-sh.c:4881
+#: elf32-sh.c:3814
#, c-format
-msgid "%s: 0x%lx: fatal: unaligned branch target for relax-support relocation"
-msgstr "%s: 0x%lx: fatal: ramurã þintã nealiniatã pentru relocare cu suport de relaxare"
+msgid "%pB: %#<PRIx64>: fatal: R_SH_PSHA relocation %<PRId64> not in range -32..32"
+msgstr ""
-#: elf32-sh.c:6627 elf64-alpha.c:4848
+#: elf32-sh.c:3830
#, c-format
-msgid "%s: TLS local exec code cannot be linked into shared objects"
-msgstr "%s: codul local executabil TLS nu poate fi linkuit în shared objects"
+msgid "%pB: %#<PRIx64>: fatal: R_SH_PSHL relocation %<PRId64> not in range -32..32"
+msgstr ""
-#: elf32-sh64.c:221 elf64-sh64.c:2407
+#: elf32-sh.c:3960 elf32-sh.c:4355
#, c-format
-msgid "%s: compiled as 32-bit object and %s is 64-bit"
-msgstr "%s: compilat ca obiect pe 32-biþi ºi %s este pe 64-biþi"
+msgid "%pB(%pA+%#<PRIx64>): cannot emit fixup to `%s' in read-only section"
+msgstr ""
-#: elf32-sh64.c:224 elf64-sh64.c:2410
+#: elf32-sh.c:4458
+#, fuzzy, c-format
+msgid "%pB(%pA+%#<PRIx64>): %s relocation against external symbol \"%s\""
+msgstr "relocare %s(%s+0x%lx): %s pe simbol local"
+
+#: elf32-sh.c:4577
+#, c-format
+msgid "%pB(%pA): offset in relocation for GD->LE translation is too small: %#<PRIx64>"
+msgstr ""
+
+#. The backslash is to prevent bogus trigraph detection.
+#: elf32-sh.c:4595
#, c-format
-msgid "%s: compiled as 64-bit object and %s is 32-bit"
-msgstr "%s: compilat ca obiect pe 64-biþi ºi %s este pe 32-biþi"
+msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0xd4??)"
+msgstr ""
-#: elf32-sh64.c:226 elf64-sh64.c:2412
+#: elf32-sh.c:4603
#, c-format
-msgid "%s: object size does not match that of target %s"
-msgstr "%s: mãrimea obiectului nu se potriveºte cu cea a þintei %s"
+msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0xc7??)"
+msgstr ""
-#: elf32-sh64.c:461 elf64-sh64.c:2990
+#: elf32-sh.c:4610
#, c-format
-msgid "%s: encountered datalabel symbol in input"
-msgstr "%s: s-a întâlnit un simbol etichetãdate(datalabel) în intrare(input)"
+msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0xd1??)"
+msgstr ""
-#: elf32-sh64.c:544
-msgid "PTB mismatch: a SHmedia address (bit 0 == 1)"
-msgstr "nepotrivire PTB: o adresã SHmedia (bit 0 == 1)"
+#: elf32-sh.c:4617
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0x310c)"
+msgstr ""
-#: elf32-sh64.c:547
-msgid "PTA mismatch: a SHcompact address (bit 0 == 0)"
-msgstr "nepotrivire PTA: o adresã SHcompact (bit 0 == 0)"
+#: elf32-sh.c:4624
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0x410b)"
+msgstr ""
-#: elf32-sh64.c:565
+#: elf32-sh.c:4631
#, c-format
-msgid "%s: GAS error: unexpected PTB insn with R_SH_PT_16"
-msgstr "%s: eroare GASr: PTB insn neaºteptat cu R_SH_PT_16"
+msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0x34cc)"
+msgstr ""
-#: elf32-sh64.c:614 elf64-sh64.c:1748
+#: elf32-sh.c:4666
#, c-format
-msgid "%s: error: unaligned relocation type %d at %08x reloc %08x\n"
-msgstr "%s: eroare: tip de reloare nealiniat %d la %08x relocarea %08x\n"
+msgid "%pB(%pA): offset in relocation for IE->LE translation is too small: %#<PRIx64>"
+msgstr ""
-#: elf32-sh64.c:698
+#: elf32-sh.c:4684
#, c-format
-msgid "%s: could not write out added .cranges entries"
-msgstr "%s: nu am putut scrie intrãrile .cranges adãugate"
+msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0xd0??: mov.l)"
+msgstr ""
-#: elf32-sh64.c:760
+#: elf32-sh.c:4693
#, c-format
-msgid "%s: could not write out sorted .cranges entries"
-msgstr "%s: nu am putut scrie intrãrile .cranges sortate"
+msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0x0?12: stc)"
+msgstr ""
-#: elf32-sparc.c:2521 elf64-sparc.c:2314
+#: elf32-sh.c:4700
#, c-format
-msgid "%s: probably compiled without -fPIC?"
-msgstr "%s: probabil compilat fãrã -fPIC?"
+msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0x0?ce: mov.l)"
+msgstr ""
-#: elf32-sparc.c:3348
+#: elf32-sh.c:4815
#, c-format
-msgid "%s: compiled for a 64 bit system and target is 32 bit"
-msgstr "%s: compilat pentru un sistem 64 biþi ºi þinta fiind pe 32 biþi"
+msgid "%pB(%pA): offset in relocation for GD->IE translation is too small: %#<PRIx64>"
+msgstr ""
-#: elf32-sparc.c:3362
+#: elf32-sh.c:4883
#, c-format
-msgid "%s: linking little endian files with big endian files"
-msgstr "%s: linkuire fiºiere little endian files cu fiºiere big endian"
+msgid "%pB(%pA): offset in relocation for LD->LE translation is too small: %#<PRIx64>"
+msgstr ""
-#: elf32-v850.c:753
+#: elf32-sh.c:5011
#, c-format
-msgid "Variable `%s' cannot occupy in multiple small data regions"
-msgstr "Variabila `%s' nu poate ocupa regiuni multiple de date mici"
+msgid "%X%C: relocation to \"%s\" references a different segment\n"
+msgstr ""
+
+#: elf32-sh.c:5018
+#, fuzzy, c-format
+msgid "%C: warning: relocation to \"%s\" references a different segment\n"
+msgstr "%s: avertisment: secțiunea alocată `%s' nu este în segment"
+
+#: elf32-sh.c:5477 elf32-sh.c:5559
+#, fuzzy, c-format
+msgid "%pB: `%s' accessed both as normal and FDPIC symbol"
+msgstr "%s: `%s' accesate și ca simboluri locale normale și ca simboluri locale pe fire (thread)"
-#: elf32-v850.c:756
+#: elf32-sh.c:5483 elf32-sh.c:5564
+#, fuzzy, c-format
+msgid "%pB: `%s' accessed both as FDPIC and thread local symbol"
+msgstr "%s: `%s' accesate și ca simboluri locale normale și ca simboluri locale pe fire (thread)"
+
+#: elf32-sh.c:5514
+#, fuzzy, c-format
+msgid "%pB: Function descriptor relocation with non-zero addend"
+msgstr ""
+"\n"
+"Descriptorul de funcție localizat la adresa de start: %04lx\n"
+
+#: elf32-sh.c:5721 elf64-alpha.c:4663
+#, fuzzy, c-format
+msgid "%pB: TLS local exec code cannot be linked into shared objects"
+msgstr "%s: codul local executabil TLS nu poate fi linkuit în shared objects"
+
+#: elf32-sh.c:5836
#, c-format
-msgid "Variable `%s' can only be in one of the small, zero, and tiny data regions"
-msgstr "Variabila `%s' nu poate sã fie în una din regiunile mici, zero sau micuþe"
+msgid "%pB: uses %s instructions while previous modules use %s instructions"
+msgstr ""
-#: elf32-v850.c:759
+#: elf32-sh.c:5848
#, c-format
-msgid "Variable `%s' cannot be in both small and zero data regions simultaneously"
-msgstr "Variabila `%s' nu poate fi simultan ºi în regiuni de date mici ºi de date zero"
+msgid "internal error: merge of architecture '%s' with architecture '%s' produced unknown architecture"
+msgstr ""
+
+#: elf32-sh.c:5889
+#, fuzzy, c-format
+msgid "%pB: uses instructions which are incompatible with instructions used in previous modules"
+msgstr "%s: Setul de instrucțiuni nu se potrivește cu modulele anterioare"
-#: elf32-v850.c:762
+#: elf32-sh.c:5902
#, c-format
-msgid "Variable `%s' cannot be in both small and tiny data regions simultaneously"
-msgstr "Variabila `%s' nu poate fi simultan ºi în regiuni de date mici ºi de date micuþe"
+msgid "%pB: attempt to mix FDPIC and non-FDPIC objects"
+msgstr ""
-#: elf32-v850.c:765
+#: elf32-sparc.c:89
+#, fuzzy, c-format
+msgid "%pB: compiled for a 64 bit system and target is 32 bit"
+msgstr "%s: compilat pentru un sistem 64 biți și ținta fiind pe 32 biți"
+
+#: elf32-sparc.c:102
+#, fuzzy, c-format
+msgid "%pB: linking little endian files with big endian files"
+msgstr "%s: linkuire fișiere little endian files cu fișiere big endian"
+
+#: elf32-sparc.c:157
#, c-format
-msgid "Variable `%s' cannot be in both zero and tiny data regions simultaneously"
-msgstr "Variabila `%s' nu poate fi simultan ºi în regiuni de date zero ºi de date micuþe"
+msgid "%pB: unhandled sparc machine value '%lu' detected during write processing"
+msgstr ""
-#: elf32-v850.c:1144
-msgid "FAILED to find previous HI16 reloc\n"
-msgstr "EªUARE în gãsirea relocãrii anterioare HI16\n"
+#: elf32-spu.c:736
+msgid "%X%P: overlay section %pA does not start on a cache line\n"
+msgstr ""
+
+#: elf32-spu.c:744
+msgid "%X%P: overlay section %pA is larger than a cache line\n"
+msgstr ""
-#: elf32-v850.c:1789
+#: elf32-spu.c:764
+msgid "%X%P: overlay section %pA is not in cache area\n"
+msgstr ""
+
+#: elf32-spu.c:805
+#, c-format
+msgid "%X%P: overlay sections %pA and %pA do not start at the same address\n"
+msgstr ""
+
+#: elf32-spu.c:1031
+#, fuzzy, c-format
+msgid "warning: call to non-function symbol %s defined in %pB"
+msgstr "avertisment: nu se poate seta mărimea secțiunii %s în %s"
+
+#: elf32-spu.c:1381
+#, c-format
+msgid "%pA:0x%v lrlive .brinfo (%u) differs from analysis (%u)\n"
+msgstr ""
+
+#: elf32-spu.c:1911
+#, c-format
+msgid "%pB is not allowed to define %s"
+msgstr ""
+
+#: elf32-spu.c:1919
+#, c-format
+msgid "you are not allowed to define %s in a script"
+msgstr ""
+
+#: elf32-spu.c:1953
+#, fuzzy, c-format
+msgid "%s in overlay section"
+msgstr "%s nu există informații de grup pentru secțiunea %s"
+
+#: elf32-spu.c:1982
+msgid "overlay stub relocation overflow"
+msgstr ""
+
+#: elf32-spu.c:1991 elf64-ppc.c:15187
+msgid "stubs don't match calculated size"
+msgstr "trunchierile(stubs) sunt în neconcordanță cu mărimea calculată"
+
+#: elf32-spu.c:2574
+#, c-format
+msgid "warning: %s overlaps %s\n"
+msgstr ""
+
+#: elf32-spu.c:2590
+#, fuzzy, c-format
+msgid "warning: %s exceeds section size\n"
+msgstr "avertisment: secțiunea %s are mărime zero"
+
+#: elf32-spu.c:2622
+#, c-format
+msgid "%pA:0x%v not found in function table\n"
+msgstr ""
+
+#: elf32-spu.c:2763
+#, c-format
+msgid "%pB(%pA+0x%v): call to non-code section %pB(%pA), analysis incomplete\n"
+msgstr ""
+
+#: elf32-spu.c:3329
+#, c-format
+msgid "stack analysis will ignore the call from %s to %s\n"
+msgstr ""
+
+#: elf32-spu.c:4026
+msgid " calls:\n"
+msgstr ""
+
+#: elf32-spu.c:4341
+#, fuzzy, c-format
+msgid "%s duplicated in %s\n"
+msgstr "%s: exportare de ciot(stub) duplicată %s"
+
+#: elf32-spu.c:4345
+#, c-format
+msgid "%s duplicated\n"
+msgstr ""
+
+#: elf32-spu.c:4352
+msgid "sorry, no support for duplicate object files in auto-overlay script\n"
+msgstr ""
+
+#: elf32-spu.c:4394
+#, c-format
+msgid "non-overlay size of 0x%v plus maximum overlay size of 0x%v exceeds local store\n"
+msgstr ""
+
+#: elf32-spu.c:4550
+#, c-format
+msgid "%pB:%pA%s exceeds overlay size\n"
+msgstr ""
+
+#: elf32-spu.c:4691
+msgid "%F%P: auto overlay error: %E\n"
+msgstr ""
+
+#: elf32-spu.c:4712
+msgid "Stack size for call graph root nodes.\n"
+msgstr ""
+
+#: elf32-spu.c:4713
+msgid ""
+"\n"
+"Stack size for functions. Annotations: '*' max stack, 't' tail call\n"
+msgstr ""
+
+#: elf32-spu.c:4723
+msgid "Maximum stack required is 0x%v\n"
+msgstr ""
+
+#: elf32-spu.c:4742
+msgid "%X%P: stack/lrlive analysis error: %E\n"
+msgstr ""
+
+#: elf32-spu.c:4745
+#, fuzzy
+msgid "%F%P: can not build overlay stubs: %E\n"
+msgstr "nu se poate construi ramura trunchiată `%s'"
+
+#: elf32-spu.c:4814
+msgid "fatal error while creating .fixup"
+msgstr ""
+
+#: elf32-spu.c:5050
+#, fuzzy, c-format
+msgid "%pB(%s+%#<PRIx64>): unresolvable %s relocation against symbol `%s'"
+msgstr "%s(%s+0x%lx): relocare nerezolvabilă %s pe simbolul `%s'"
+
+#: elf32-tic6x.c:1588
+msgid "warning: generating a shared library containing non-PIC code"
+msgstr ""
+
+#: elf32-tic6x.c:1593
+msgid "warning: generating a shared library containing non-PID code"
+msgstr ""
+
+#: elf32-tic6x.c:2434
+#, fuzzy, c-format
+msgid "%pB: SB-relative relocation but __c6xabi_DSBT_BASE not defined"
+msgstr "Relocare relativă GP atâta timp cât _gp nu este definit"
+
+#: elf32-tic6x.c:3498
+#, c-format
+msgid "%pB: error: unknown mandatory EABI object attribute %d"
+msgstr ""
+
+#: elf32-tic6x.c:3507
+#, c-format
+msgid "%pB: warning: unknown EABI object attribute %d"
+msgstr ""
+
+#: elf32-tic6x.c:3625 elf32-tic6x.c:3634
+#, c-format
+msgid "error: %pB requires more stack alignment than %pB preserves"
+msgstr ""
+
+#: elf32-tic6x.c:3644 elf32-tic6x.c:3653
+#, c-format
+msgid "error: unknown Tag_ABI_array_object_alignment value in %pB"
+msgstr ""
+
+#: elf32-tic6x.c:3662 elf32-tic6x.c:3671
+#, c-format
+msgid "error: unknown Tag_ABI_array_object_align_expected value in %pB"
+msgstr ""
+
+#: elf32-tic6x.c:3680 elf32-tic6x.c:3688
+#, c-format
+msgid "error: %pB requires more array alignment than %pB preserves"
+msgstr ""
+
+#: elf32-tic6x.c:3711
+#, fuzzy, c-format
+msgid "warning: %pB and %pB differ in wchar_t size"
+msgstr "avertisment: secțiunea %s are mărime zero"
+
+#: elf32-tic6x.c:3730
+#, c-format
+msgid "warning: %pB and %pB differ in whether code is compiled for DSBT"
+msgstr ""
+
+#: elf32-tilepro.c:3627 elfxx-tilegx.c:4017 elfxx-x86.c:2409
+#: elfnn-aarch64.c:9714 elfnn-loongarch.c:2971 elfnn-riscv.c:3269
+#, fuzzy, c-format
+msgid "discarded output section: `%pA'"
+msgstr "%T: abandonat(discarded) în secțiunea `%s' din %s\n"
+
+#: elf32-v850.c:152
+#, fuzzy, c-format
+msgid "variable `%s' cannot occupy in multiple small data regions"
+msgstr "Variabila `%s' nu poate ocupa regiuni multiple de date mici"
+
+#: elf32-v850.c:155
+#, fuzzy, c-format
+msgid "variable `%s' can only be in one of the small, zero, and tiny data regions"
+msgstr "Variabila `%s' nu poate să fie în una din regiunile mici, zero sau micuțe"
+
+#: elf32-v850.c:158
+#, fuzzy, c-format
+msgid "variable `%s' cannot be in both small and zero data regions simultaneously"
+msgstr "Variabila `%s' nu poate fi simultan și în regiuni de date mici și de date zero"
+
+#: elf32-v850.c:161
+#, fuzzy, c-format
+msgid "variable `%s' cannot be in both small and tiny data regions simultaneously"
+msgstr "Variabila `%s' nu poate fi simultan și în regiuni de date mici și de date micuțe"
+
+#: elf32-v850.c:164
+#, fuzzy, c-format
+msgid "variable `%s' cannot be in both zero and tiny data regions simultaneously"
+msgstr "Variabila `%s' nu poate fi simultan și în regiuni de date zero și de date micuțe"
+
+#: elf32-v850.c:466
+#, fuzzy
+msgid "failed to find previous HI16 reloc"
+msgstr "EȘUARE în găsirea relocării anterioare HI16\n"
+
+#: elf32-v850.c:2306
msgid "could not locate special linker symbol __gp"
msgstr "nu am putut localiza simbolul special de linker __gp"
-#: elf32-v850.c:1793
+#: elf32-v850.c:2310
msgid "could not locate special linker symbol __ep"
msgstr "nu am putut localiza simbolul special de linker __ep"
-#: elf32-v850.c:1797
+#: elf32-v850.c:2314
msgid "could not locate special linker symbol __ctbp"
msgstr "nu am putut localiza simbolul special de linker __ctbp"
-#: elf32-v850.c:1963
+#: elf32-v850.c:2535
#, c-format
-msgid "%s: Architecture mismatch with previous modules"
-msgstr "%s: Arhitectura nu se potriveºte cu modulele anterioare"
+msgid "error: %pB needs 8-byte alignment but %pB is set for 4-byte alignment"
+msgstr ""
-#: elf32-v850.c:1983
+#: elf32-v850.c:2551
+#, c-format
+msgid "error: %pB uses 64-bit doubles but %pB uses 32-bit doubles"
+msgstr ""
+
+#: elf32-v850.c:2566
+#, c-format
+msgid "error: %pB uses FPU-3.0 but %pB only supports FPU-2.0"
+msgstr ""
+
+#: elf32-v850.c:2598
+#, c-format
+msgid " alignment of 8-byte entities: "
+msgstr ""
+
+#: elf32-v850.c:2601
+#, c-format
+msgid "4-byte"
+msgstr ""
+
+#: elf32-v850.c:2602
+#, c-format
+msgid "8-byte"
+msgstr ""
+
+#: elf32-v850.c:2603 elf32-v850.c:2615
+#, fuzzy, c-format
+msgid "not set"
+msgstr " [abi nesetat]"
+
+#: elf32-v850.c:2604 elf32-v850.c:2616 elf32-v850.c:2628 elf32-v850.c:2639
+#: elf32-v850.c:2650 elf32-v850.c:2661
+#, fuzzy, c-format
+msgid "unknown: %x"
+msgstr "*necunoscut*"
+
+#: elf32-v850.c:2610
+#, c-format
+msgid " size of doubles: "
+msgstr ""
+
+#: elf32-v850.c:2613
+#, c-format
+msgid "4-bytes"
+msgstr ""
+
+#: elf32-v850.c:2614
+#, c-format
+msgid "8-bytes"
+msgstr ""
+
+#: elf32-v850.c:2622
+#, c-format
+msgid " FPU support required: "
+msgstr ""
+
+#: elf32-v850.c:2625
+#, c-format
+msgid "FPU-2.0"
+msgstr ""
+
+#: elf32-v850.c:2626
+#, c-format
+msgid "FPU-3.0"
+msgstr ""
+
+#: elf32-v850.c:2627
+#, c-format
+msgid "none"
+msgstr ""
+
+#: elf32-v850.c:2634
+#, c-format
+msgid "SIMD use: "
+msgstr ""
+
+#: elf32-v850.c:2637 elf32-v850.c:2648 elf32-v850.c:2659
+#, c-format
+msgid "yes"
+msgstr ""
+
+#: elf32-v850.c:2638 elf32-v850.c:2649 elf32-v850.c:2660
+#, c-format
+msgid "no"
+msgstr ""
+
+#: elf32-v850.c:2645
+#, c-format
+msgid "CACHE use: "
+msgstr ""
+
+#: elf32-v850.c:2656
+#, c-format
+msgid "MMU use: "
+msgstr ""
+
+#: elf32-v850.c:2823 elf32-v850.c:2879
+#, fuzzy, c-format
+msgid "%pB: architecture mismatch with previous modules"
+msgstr "%s: Arhitectura nu se potrivește cu modulele anterioare"
+
+#. xgettext:c-format.
+#: elf32-v850.c:2897
#, c-format
msgid "private flags = %lx: "
msgstr "marcaje(flags) private=- %lx: "
-#: elf32-v850.c:1988
+#: elf32-v850.c:2902
+#, fuzzy, c-format
+msgid "unknown v850 architecture"
+msgstr "arhitectură v850"
+
+#: elf32-v850.c:2904
+#, fuzzy, c-format
+msgid "v850 E3 architecture"
+msgstr "arhitectură v850"
+
+#: elf32-v850.c:2906 elf32-v850.c:2913
+#, c-format
msgid "v850 architecture"
-msgstr "arhitecturã v850"
+msgstr "arhitectură v850"
-#: elf32-v850.c:1989
+#: elf32-v850.c:2914
+#, c-format
msgid "v850e architecture"
-msgstr "arhitecturã v850e"
-
-#: elf32-vax.c:549
+msgstr "arhitectură v850e"
+
+#: elf32-v850.c:2915
+#, fuzzy, c-format
+msgid "v850e1 architecture"
+msgstr "arhitectură v850e"
+
+#: elf32-v850.c:2916
+#, fuzzy, c-format
+msgid "v850e2 architecture"
+msgstr "arhitectură v850e"
+
+#: elf32-v850.c:2917
+#, fuzzy, c-format
+msgid "v850e2v3 architecture"
+msgstr "arhitectură v850e"
+
+#: elf32-v850.c:2918
+#, fuzzy, c-format
+msgid "v850e3v5 architecture"
+msgstr "arhitectură v850e"
+
+#: elf32-v850.c:3591 elf32-v850.c:3830
+#, fuzzy, c-format
+msgid "%pB: %#<PRIx64>: warning: %s points to unrecognized insns"
+msgstr "%s: 0x%lx: avertisment: R_SH_USES trimite către insn necunoscut 0x%x"
+
+#: elf32-v850.c:3601 elf32-v850.c:3840
+#, fuzzy, c-format
+msgid "%pB: %#<PRIx64>: warning: %s points to unrecognized insn %#x"
+msgstr "%s: 0x%lx: avertisment: R_SH_USES trimite către insn necunoscut 0x%x"
+
+#: elf32-v850.c:3647 elf32-v850.c:3875
+#, fuzzy, c-format
+msgid "%pB: %#<PRIx64>: warning: %s points to unrecognized reloc"
+msgstr "%s: 0x%lx: avertisment: R_SH_USES trimite către insn necunoscut 0x%x"
+
+#: elf32-v850.c:3687
+#, fuzzy, c-format
+msgid "%pB: %#<PRIx64>: warning: %s points to unrecognized reloc %#<PRIx64>"
+msgstr "%s: 0x%lx: avertisment: R_SH_USES trimite către insn necunoscut 0x%x"
+
+#: elf32-vax.c:539
+#, c-format
msgid " [nonpic]"
msgstr " [nonpic]"
-#: elf32-vax.c:552
+#: elf32-vax.c:542
+#, c-format
msgid " [d-float]"
msgstr " [d-float]"
-#: elf32-vax.c:555
+#: elf32-vax.c:545
+#, c-format
msgid " [g-float]"
msgstr " [g-float]"
-#: elf32-vax.c:663
+#: elf32-vax.c:631
+#, fuzzy, c-format
+msgid "%pB: warning: GOT addend of %<PRId64> to `%s' does not match previous GOT addend of %<PRId64>"
+msgstr "%s: avertisment: adăugarea GOT a %ld în `%s' nu se potrivește adăugării GOT anterioare a %ld"
+
+#: elf32-vax.c:1388
+#, fuzzy, c-format
+msgid "%pB: warning: PLT addend of %<PRId64> to `%s' from %pA section ignored"
+msgstr "%s: avertisment: adăugarea PLT a %d în `%s' din secțiunea %s ignorată"
+
+#: elf32-vax.c:1514
+#, fuzzy, c-format
+msgid "%pB: warning: %s relocation against symbol `%s' from %pA section"
+msgstr "%s: avertisment: relocare %s pentru simbolul `%s' din secțiunea %s"
+
+#: elf32-vax.c:1521
+#, fuzzy, c-format
+msgid "%pB: warning: %s relocation to %#<PRIx64> from %pA section"
+msgstr "%s: avertisment: relocare %s spre 0x%x din secțiunea %s"
+
+#: elf32-visium.c:824
+#, fuzzy, c-format
+msgid "%pB: compiled %s -mtune=%s and linked with modules compiled %s -mtune=%s"
+msgstr "%s: compilat cu %s și linkuit cu module compilate cu %s"
+
+#: elf32-xgate.c:506
#, c-format
-msgid "%s: warning: GOT addend of %ld to `%s' does not match previous GOT addend of %ld"
-msgstr "%s: avertisment: adãugarea GOT a %ld în `%s' nu se potriveºte adãugãrii GOT anterioare a %ld"
+msgid "cpu=XGATE]"
+msgstr ""
-#: elf32-vax.c:1667
+#: elf32-xgate.c:508
#, c-format
-msgid "%s: warning: PLT addend of %d to `%s' from %s section ignored"
-msgstr "%s: avertisment: adãugarea PLT a %d în `%s' din secþiunea %s ignoratã"
+msgid "error reading cpu type from elf private data"
+msgstr ""
+
+#: elf32-xstormy16.c:457 elf64-ia64-vms.c:2076 elfnn-ia64.c:2345
+msgid "non-zero addend in @fptr reloc"
+msgstr "adăugare non-zero în relocare @fptr"
-#: elf32-vax.c:1802
+#: elf32-xtensa.c:1010
#, c-format
-msgid "%s: warning: %s relocation against symbol `%s' from %s section"
-msgstr "%s: avertisment: relocare %s pentru simbolul `%s' din secþiunea %s"
+msgid "%pB(%pA): invalid property table"
+msgstr ""
-#: elf32-vax.c:1808
+#: elf32-xtensa.c:2744
#, c-format
-msgid "%s: warning: %s relocation to 0x%x from %s section"
-msgstr "%s: avertisment: relocare %s spre 0x%x din secþiunea %s"
+msgid "%pB(%pA+%#<PRIx64>): relocation offset out of range (size=%#<PRIx64>)"
+msgstr ""
-#: elf32-xstormy16.c:462 elf32-ia64.c:2450 elf64-ia64.c:2450
-msgid "non-zero addend in @fptr reloc"
-msgstr "adãugare non-zero în relocare @fptr"
+#: elf32-xtensa.c:2827 elf32-xtensa.c:2950
+#, fuzzy
+msgid "dynamic relocation in read-only section"
+msgstr "%s: relocare loader în secțiunea doar-în-citire %s"
-#: elf64-alpha.c:1108
-msgid "GPDISP relocation did not find ldah and lda instructions"
-msgstr "relocarea GPDISP nu a gãsit instrucþiuni ldah ºi lda"
+#: elf32-xtensa.c:2927
+#, fuzzy
+msgid "TLS relocation invalid without dynamic sections"
+msgstr "%s: nepotrivire a mărimii de relocare în %s secțiunea %s"
-#: elf64-alpha.c:3731
+#: elf32-xtensa.c:3140
+#, fuzzy
+msgid "internal inconsistency in size of .got.loc section"
+msgstr "%s: Inconsistență internă, nu există secțiunea de relocare %s"
+
+#: elf32-xtensa.c:3446
#, c-format
-msgid "%s: .got subsegment exceeds 64K (size %d)"
-msgstr "%s: .subsegmentul got depãseºte 64K (size %d)"
+msgid "%pB: incompatible machine type; output is 0x%x; input is 0x%x"
+msgstr ""
-#: elf64-alpha.c:4602 elf64-alpha.c:4614
+#: elf32-xtensa.c:4745 elf32-xtensa.c:4753
+msgid "attempt to convert L32R/CALLX to CALL failed"
+msgstr ""
+
+#: elf32-xtensa.c:6581 elf32-xtensa.c:6660 elf32-xtensa.c:8086
#, c-format
-msgid "%s: gp-relative relocation against dynamic symbol %s"
-msgstr "%s: relocare relativã-gp pentru simbolul %s"
+msgid "%pB(%pA+%#<PRIx64>): could not decode instruction; possible configuration mismatch"
+msgstr ""
-#: elf64-alpha.c:4640 elf64-alpha.c:4773
+#: elf32-xtensa.c:7827
#, c-format
-msgid "%s: pc-relative relocation against dynamic symbol %s"
-msgstr "%s: relocare relativã pc pentru simbolul dinamic %s"
+msgid "%pB(%pA+%#<PRIx64>): could not decode instruction for XTENSA_ASM_SIMPLIFY relocation; possible configuration mismatch"
+msgstr ""
+
+#: elf32-xtensa.c:9685
+#, fuzzy
+msgid "invalid relocation address"
+msgstr "%s: tip de relocare invalid %d"
-#: elf64-alpha.c:4668
+#: elf32-xtensa.c:9776
+msgid "overflow after relaxation"
+msgstr ""
+
+#: elf32-xtensa.c:10922
#, c-format
-msgid "%s: change in gp: BRSGP %s"
-msgstr "%s: schimbare în gp: BRSGP %s"
+msgid "%pB(%pA+%#<PRIx64>): unexpected fix for %s relocation"
+msgstr ""
-#: elf64-alpha.c:4693
+#: elf32-z80.c:473
+#, fuzzy, c-format
+msgid "%pB: unsupported bfd mach %#lx"
+msgstr "cmd STA %s nesuportată"
+
+#: elf32-z80.c:518
+#, fuzzy, c-format
+msgid "%pB: unsupported mach %#x"
+msgstr "cmd STA %s nesuportată"
+
+#: elf32-z80.c:546
+#, fuzzy, c-format
+msgid "%pB: unsupported arch %#x"
+msgstr "relocare nesuportată"
+
+#: elf64-alpha.c:474
+msgid "GPDISP relocation did not find ldah and lda instructions"
+msgstr "relocarea GPDISP nu a găsit instrucțiuni ldah și lda"
+
+#: elf64-alpha.c:2002 elf64-alpha.c:2697 elflink.c:15304
+#: elfnn-loongarch.c:1161
+#, fuzzy, c-format
+msgid "%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"
+msgstr "%s: relocare dinamică pe acceptare(fixup) speculativă"
+
+#: elf64-alpha.c:2454
+#, fuzzy, c-format
+msgid "%pB: .got subsegment exceeds 64K (size %d)"
+msgstr "%s: .subsegmentul got depăsește 64K (size %d)"
+
+#: elf64-alpha.c:2992 elf64-alpha.c:3187
+#, fuzzy, c-format
+msgid "%pB: %pA+%#<PRIx64>: warning: %s relocation against unexpected insn"
+msgstr "avertisment: relocare pe secțiune eliminată"
+
+#: elf64-alpha.c:4387 elf64-alpha.c:4400
+#, fuzzy, c-format
+msgid "%pB: gp-relative relocation against dynamic symbol %s"
+msgstr "%s: relocare relativă-gp pentru simbolul %s"
+
+#: elf64-alpha.c:4456
+#, fuzzy, c-format
+msgid "%pB: change in gp: BRSGP %s"
+msgstr "%s: schimbare în gp: BRSGP %s"
+
+#: elf64-alpha.c:4481 mach-o.c:616 elfnn-riscv.c:619
msgid "<unknown>"
msgstr "<necunoscut>"
-#: elf64-alpha.c:4698
-#, c-format
-msgid "%s: !samegp reloc against symbol without .prologue: %s"
-msgstr "%s: !samegp reloc apentru simbol fãrã .prologue: %s"
+#: elf64-alpha.c:4487
+#, fuzzy, c-format
+msgid "%pB: !samegp reloc against symbol without .prologue: %s"
+msgstr "%s: !samegp reloc apentru simbol fără .prologue: %s"
-#: elf64-alpha.c:4749
-#, c-format
-msgid "%s: unhandled dynamic relocation against %s"
-msgstr "%s: relocare dinamicã nemanipulabilã pentru %s"
+#: elf64-alpha.c:4545
+#, fuzzy, c-format
+msgid "%pB: unhandled dynamic relocation against %s"
+msgstr "%s: relocare dinamică nemanipulabilă pentru %s"
-#: elf64-alpha.c:4832
-#, c-format
-msgid "%s: dtp-relative relocation against dynamic symbol %s"
-msgstr "%s: relocare relativã-dtp pentru simbolul dinamic %s"
+#: elf64-alpha.c:4580
+#, fuzzy, c-format
+msgid "%pB: pc-relative relocation against undefined weak symbol %s"
+msgstr "%s: relocare relativă pc pentru simbolul dinamic %s"
+
+#: elf64-alpha.c:4646
+#, fuzzy, c-format
+msgid "%pB: dtp-relative relocation against dynamic symbol %s"
+msgstr "%s: relocare relativă-dtp pentru simbolul dinamic %s"
+
+#: elf64-alpha.c:4671
+#, fuzzy, c-format
+msgid "%pB: tp-relative relocation against dynamic symbol %s"
+msgstr "%s: relocare relativă-tp pentru simbolul dinamic %s"
+
+#. Only if it's not an unresolved symbol.
+#: elf64-bpf.c:557
+#, fuzzy
+msgid "internal error: relocation not supported"
+msgstr "eroare internă: eroare de relocare nesuportată"
+
+#: elf64-gen.c:71
+#, fuzzy, c-format
+msgid "%pB: Relocations in generic ELF (EM: %d)"
+msgstr "%s: Relocări în ELF generic (EM: %d)"
-#: elf64-alpha.c:4855
+#: elf64-hppa.c:2032
+#, fuzzy, c-format
+msgid "stub entry for %s cannot load .plt, dp offset = %<PRId64>"
+msgstr "intrarea trunchiată pentru %s nu poate încărca .plt, offset dp = %ld"
+
+#: elf64-hppa.c:3236
#, c-format
-msgid "%s: tp-relative relocation against dynamic symbol %s"
-msgstr "%s: relocare relativã-tp pentru simbolul dinamic %s"
+msgid "%pB(%pA+%#<PRIx64>): cannot reach %s"
+msgstr ""
-#: elf64-hppa.c:2086
+#: elf64-ia64-vms.c:599 elfnn-ia64.c:640
#, c-format
-msgid "stub entry for %s cannot load .plt, dp offset = %ld"
-msgstr "intrarea trunchiatã pentru %s nu poate încãrca .plt, offset dp = %ld"
+msgid "%pB: can't relax br at %#<PRIx64> in section `%pA'; please use brl or indirect branch"
+msgstr ""
+
+#: elf64-ia64-vms.c:2031 elfnn-ia64.c:2293
+msgid "@pltoff reloc against local symbol"
+msgstr "relocare @pltoff pe simbol local"
+
+#: elf64-ia64-vms.c:3277 elfnn-ia64.c:3670
+#, fuzzy, c-format
+msgid "%pB: short data segment overflowed (%#<PRIx64> >= 0x400000)"
+msgstr "%s: segment de date scurt depășit(overflowed) (0x%lx >= 0x400000)"
+
+#: elf64-ia64-vms.c:3287 elfnn-ia64.c:3680
+#, fuzzy, c-format
+msgid "%pB: __gp does not cover short data segment"
+msgstr "%s: __gp nu acoperă segmentul de date scurte"
+
+#: elf64-ia64-vms.c:3557 elfnn-ia64.c:3953
+#, fuzzy, c-format
+msgid "%pB: non-pic code with imm relocation against dynamic symbol `%s'"
+msgstr "%s: relocare relativă pc pentru simbolul dinamic %s"
+
+#: elf64-ia64-vms.c:3621 elfnn-ia64.c:4021
+#, fuzzy, c-format
+msgid "%pB: @gprel relocation against dynamic symbol %s"
+msgstr "%s: relocare @gprel pe simbolul dinamic %s"
+
+#: elf64-ia64-vms.c:3680 elfnn-ia64.c:4084
+#, fuzzy, c-format
+msgid "%pB: linking non-pic code in a position independent executable"
+msgstr "%s: linkuire cod non-pic într-un executabil independent de poziție"
+
+#: elf64-ia64-vms.c:3782 elfnn-ia64.c:4222
+#, fuzzy, c-format
+msgid "%pB: @internal branch to dynamic symbol %s"
+msgstr "%s: ramură @internal către simbolul dinamic %s"
-#: elf64-mmix.c:1032
+#: elf64-ia64-vms.c:3785 elfnn-ia64.c:4225
+#, fuzzy, c-format
+msgid "%pB: speculation fixup to dynamic symbol %s"
+msgstr "%s: rezolvare de speculație către simbolul dinamic %s"
+
+#: elf64-ia64-vms.c:3788 elfnn-ia64.c:4228
+#, fuzzy, c-format
+msgid "%pB: @pcrel relocation against dynamic symbol %s"
+msgstr "%s: relocare @pcrell pe simbolul dinamic %s"
+
+#: elf64-ia64-vms.c:3912 elfnn-ia64.c:4425
+msgid "unsupported reloc"
+msgstr "relocare nesuportată"
+
+#: elf64-ia64-vms.c:3949 elfnn-ia64.c:4463
+#, fuzzy, c-format
+msgid "%pB: missing TLS section for relocation %s against `%s' at %#<PRIx64> in section `%pA'."
+msgstr "%s:Nu există nici PLT nici GOR pentru relocarea %s pe simbolul `%s' din secțiunea %s"
+
+#: elf64-ia64-vms.c:3966 elfnn-ia64.c:4480
#, c-format
+msgid "%pB: Can't relax br (%s) to `%s' at %#<PRIx64> in section `%pA' with size %#<PRIx64> (> 0x1000000)."
+msgstr ""
+
+#: elf64-ia64-vms.c:4262 elfnn-ia64.c:4741
+#, fuzzy, c-format
+msgid "%pB: linking trap-on-NULL-dereference with non-trapping files"
+msgstr "%s: linkuire trap-on-NULL-dereference cu fișiere non-trapping"
+
+#: elf64-ia64-vms.c:4271 elfnn-ia64.c:4750
+#, fuzzy, c-format
+msgid "%pB: linking big-endian files with little-endian files"
+msgstr "%s: linkuire fișiere big-endiancu fișiere little-endian"
+
+#: elf64-ia64-vms.c:4280 elfnn-ia64.c:4759
+#, fuzzy, c-format
+msgid "%pB: linking 64-bit files with 32-bit files"
+msgstr "%s: linkuire fișiere pe 64-biți cu fișiere pe 32-biți"
+
+#: elf64-ia64-vms.c:4289 elfnn-ia64.c:4768
+#, fuzzy, c-format
+msgid "%pB: linking constant-gp files with non-constant-gp files"
+msgstr "%s: linkuire fișiere constant-gp cu fișiere non-constant-gp"
+
+#: elf64-ia64-vms.c:4299 elfnn-ia64.c:4778
+#, fuzzy, c-format
+msgid "%pB: linking auto-pic files with non-auto-pic files"
+msgstr "%s: linkuire fișiere auto-pic cu fișiere non-auto-pic"
+
+#: elf64-ia64-vms.c:5146 elflink.c:5294
+#, fuzzy, c-format
+msgid "warning: alignment %u of common symbol `%s' in %pB is greater than the alignment (%u) of its section %pA"
+msgstr "Avertisment: alinierea %u al simbolului `%s' din %s este mai mică decât %u în %s"
+
+#: elf64-ia64-vms.c:5153 elflink.c:5301
+#, fuzzy, c-format
+msgid "warning: alignment %u of symbol `%s' in %pB is smaller than %u in %pB"
+msgstr "Avertisment: alinierea %u al simbolului `%s' din %s este mai mică decât %u în %s"
+
+#: elf64-ia64-vms.c:5169 elflink.c:5318
+#, fuzzy, c-format
+msgid "warning: size of symbol `%s' changed from %<PRIu64> in %pB to %<PRIu64> in %pB"
+msgstr "Avertisment: mărimea simbolului `%s' a fost schimbată din %lu din %s în %lu din %s"
+
+#: elf64-mips.c:4095
+#, fuzzy, c-format
+msgid "%pB(%pA): relocation %<PRIu64> has invalid symbol index %ld"
+msgstr "%s(%s): relocarea %d are indexul de simbol invalid %ld"
+
+#: elf64-mmix.c:984
+msgid "invalid input relocation when producing non-ELF, non-mmo format output; please use the objcopy program to convert from ELF or mmo, or assemble using \"-no-expand\" (for gcc, \"-Wa,-no-expand\""
+msgstr ""
+
+#: elf64-mmix.c:1168
+msgid "invalid input relocation when producing non-ELF, non-mmo format output; please use the objcopy program to convert from ELF or mmo, or compile using the gcc-option \"-mno-base-addresses\"."
+msgstr ""
+
+#: elf64-mmix.c:1195
+#, fuzzy, c-format
msgid ""
-"%s: Internal inconsistency error for value for\n"
-" linker-allocated global register: linked: 0x%lx%08lx != relaxed: 0x%lx%08lx\n"
+"%pB: Internal inconsistency error for value for\n"
+" linker-allocated global register: linked: %#<PRIx64> != relaxed: %#<PRIx64>"
msgstr ""
-"%s: eroare internã de inconsistenþã pentru valoarea\n"
+"%s: eroare internă de inconsistență pentru valoarea\n"
"registrului global alocat de linker: linkuit: 0x%lx%08lx != relaxat: 0x%lx%08lx\n"
-#: elf64-mmix.c:1416
-#, c-format
-msgid "%s: base-plus-offset relocation against register symbol: (unknown) in %s"
-msgstr "%s:relocare-offset-bazã-plus pentru simbolul registru: (necunoscut) în %s"
+#: elf64-mmix.c:1619
+#, fuzzy, c-format
+msgid "%pB: base-plus-offset relocation against register symbol: (unknown) in %pA"
+msgstr "%s:relocare-offset-bază-plus pentru simbolul registru: (necunoscut) în %s"
+
+#: elf64-mmix.c:1625
+#, fuzzy, c-format
+msgid "%pB: base-plus-offset relocation against register symbol: %s in %pA"
+msgstr "%s:relocare-offset-bază-plus pentru simbolul registru: %s în %s"
+
+#: elf64-mmix.c:1670
+#, fuzzy, c-format
+msgid "%pB: register relocation against non-register symbol: (unknown) in %pA"
+msgstr "%s:relocare registru pentru simbolul non-registru: (necunoscut) în %s"
+
+#: elf64-mmix.c:1676
+#, fuzzy, c-format
+msgid "%pB: register relocation against non-register symbol: %s in %pA"
+msgstr "%s:relocare registru pentru simbolul non-registru: %s în %s"
+
+#: elf64-mmix.c:1713
+#, fuzzy, c-format
+msgid "%pB: directive LOCAL valid only with a register or absolute value"
+msgstr "%s: directiva LOCAL este validă doar cu un registru sau o valoare absolută"
+
+#: elf64-mmix.c:1742
+#, fuzzy, c-format
+msgid "%pB: LOCAL directive: register $%<PRId64> is not a local register; first global register is $%<PRId64>"
+msgstr "%s: directivă LOCAL: Registrulr $%ld nu este un registru local. Primul registru global $%ld."
+
+#: elf64-mmix.c:2157
+#, fuzzy, c-format
+msgid "%pB: error: multiple definition of `%s'; start of %s is set in a earlier linked file"
+msgstr "%s: Eroare: definiții multiple ale `%s'; începutul lui %s este setat într-un fișierlinkuit anterior\n"
+
+#: elf64-mmix.c:2212
+#, fuzzy
+msgid "register section has contents\n"
+msgstr "Secțiunea registru nu are conținut\n"
+
+#: elf64-mmix.c:2402
+#, fuzzy, c-format
+msgid "internal inconsistency: remaining %lu != max %lu; please report this bug"
+msgstr ""
+"Inconsistență internă: rămâne %u ! = max %u\n"
+" Vă rugăm raportați acest bug."
-#: elf64-mmix.c:1421
+#: elf64-ppc.c:1357
#, c-format
-msgid "%s: base-plus-offset relocation against register symbol: %s in %s"
-msgstr "%s:relocare-offset-bazã-plus pentru simbolul registru: %s în %s"
+msgid "warning: %s should be used rather than %s"
+msgstr ""
-#: elf64-mmix.c:1465
+#: elf64-ppc.c:4281
#, c-format
-msgid "%s: register relocation against non-register symbol: (unknown) in %s"
-msgstr "%s:relocare registru pentru simbolul non-registru: (necunoscut) în %s"
+msgid "symbol '%s' has invalid st_other for ABI version 1"
+msgstr ""
-#: elf64-mmix.c:1470
+#: elf64-ppc.c:4462
#, c-format
-msgid "%s: register relocation against non-register symbol: %s in %s"
-msgstr "%s:relocare registru pentru simbolul non-registru: %s în %s"
+msgid "%pB .opd not allowed in ABI version %d"
+msgstr ""
-#: elf64-mmix.c:1507
+#: elf64-ppc.c:5055
#, c-format
-msgid "%s: directive LOCAL valid only with a register or absolute value"
-msgstr "%s: directiva LOCAL este validã doar cu un registru sau o valoare absolutã"
+msgid "%H: %s reloc unsupported in shared libraries and PIEs\n"
+msgstr ""
-#: elf64-mmix.c:1535
+#: elf64-ppc.c:5476
#, c-format
-msgid "%s: LOCAL directive: Register $%ld is not a local register. First global register is $%ld."
-msgstr "%s: directivã LOCAL: Registrulr $%ld nu este un registru local. Primul registru global $%ld."
+msgid "%pB uses unknown e_flags 0x%lx"
+msgstr ""
-#: elf64-mmix.c:1994
+#: elf64-ppc.c:5484
#, c-format
-msgid "%s: Error: multiple definition of `%s'; start of %s is set in a earlier linked file\n"
-msgstr "%s: Eroare: definiþii multiple ale `%s'; începutul lui %s este setat într-un fiºierlinkuit anterior\n"
+msgid "%pB: ABI version %ld is not compatible with ABI version %ld output"
+msgstr ""
-#: elf64-mmix.c:2053
-msgid "Register section has contents\n"
-msgstr "Secþiunea registru nu are conþinut\n"
+#: elf64-ppc.c:5511
+#, fuzzy, c-format
+msgid " [abiv%ld]"
+msgstr " [abi=64]"
-#: elf64-mmix.c:2216
-#, c-format
-msgid ""
-"Internal inconsistency: remaining %u != max %u.\n"
-" Please report this bug."
+#: elf64-ppc.c:6808
+msgid "%P: copy reloc against `%pT' requires lazy plt linking; avoid setting LD_BIND_NOW=1 or upgrade gcc\n"
msgstr ""
-"Inconsistenþã internã: rãmâne %u ! = max %u\n"
-" Vã rugãm raportaþi acest bug."
-#: elf64-ppc.c:2388 libbfd.c:831
-#, c-format
-msgid "%s: compiled for a big endian system and target is little endian"
-msgstr "%s: compilat pentru un sistem big endiat iar þinta este little endian"
+#: elf64-ppc.c:7075
+#, fuzzy, c-format
+msgid "%pB: undefined symbol on R_PPC64_TOCSAVE relocation"
+msgstr "eroare: simbol __rtinit nedefinit"
-#: elf64-ppc.c:2391 libbfd.c:833
+#: elf64-ppc.c:7331
#, c-format
-msgid "%s: compiled for a little endian system and target is big endian"
-msgstr "%s: compilat pentru un sistem little endiat iar þinta este big endian"
+msgid "dynreloc miscount for %pB, section %pA"
+msgstr ""
+
+#: elf64-ppc.c:7420
+#, fuzzy, c-format
+msgid "%pB: .opd is not a regular array of opd entries"
+msgstr "%s: .opd nu este un domeniu(array) de intrări opd"
+
+#: elf64-ppc.c:7430
+#, fuzzy, c-format
+msgid "%pB: unexpected reloc type %u in .opd section"
+msgstr "%s: tip de relocare neașteptat %u în secțiune .opd"
+
+#: elf64-ppc.c:7452
+#, fuzzy, c-format
+msgid "%pB: undefined sym `%s' in .opd section"
+msgstr "%s: sym nedefinit `%s' în secțiune .opd"
+
+#. The issue is that __glink_PLTresolve saves r2, which is done
+#. because glibc ld.so _dl_runtime_resolve restores r2 to support
+#. a glibc plt call optimisation where global entry code is
+#. skipped on calls that resolve to the same binary. The
+#. __glink_PLTresolve save of r2 is incompatible with code
+#. making tail calls, because the tail call might go via the
+#. resolver and thus overwrite the proper saved r2.
+#: elf64-ppc.c:7953
+msgid "warning: --plt-localentry is incompatible with power10 pc-relative code"
+msgstr ""
+
+#: elf64-ppc.c:7961
+msgid "warning: --plt-localentry is especially dangerous without ld.so support to detect ABI violations"
+msgstr ""
+
+#: elf64-ppc.c:8277
+msgid "%H __tls_get_addr lost arg, TLS optimization disabled\n"
+msgstr ""
-#: elf64-ppc.c:4857
+#: elf64-ppc.c:8712 elf64-ppc.c:9425
#, c-format
-msgid "%s: unexpected reloc type %u in .opd section"
-msgstr "%s: tip de relocare neaºteptat %u în secþiune .opd"
+msgid "%s defined on removed toc entry"
+msgstr ""
-#: elf64-ppc.c:4877
+#: elf64-ppc.c:9382
#, c-format
-msgid "%s: .opd is not a regular array of opd entries"
-msgstr "%s: .opd nu este un domeniu(array) de intrãri opd"
+msgid "%H: %s references optimized away TOC entry\n"
+msgstr ""
+
+#: elf64-ppc.c:9603
+#, fuzzy, c-format
+msgid "%H: got/toc optimization is not supported for %s instruction\n"
+msgstr "%s: relocarea %s nu este suportată pentru simbolul %s."
-#: elf64-ppc.c:4897
+#: elf64-ppc.c:10474
+#, fuzzy, c-format
+msgid "warning: discarding dynamic section %s"
+msgstr "simboluri locale în secțiunea îndepărtată(discarded) %s"
+
+#: elf64-ppc.c:11616
+msgid "%P: cannot find opd entry toc for `%pT'\n"
+msgstr ""
+
+#: elf64-ppc.c:11664 elf64-ppc.c:12189
+msgid "%F%P: Could not assign group %pA target %pA to an output section. Retry without --enable-non-contiguous-regions.\n"
+msgstr ""
+
+#: elf64-ppc.c:11724
#, c-format
-msgid "%s: undefined sym `%s' in .opd section"
-msgstr "%s: sym nedefinit `%s' în secþiune .opd"
+msgid "long branch stub `%s' offset overflow"
+msgstr ""
-#: elf64-ppc.c:6136
+#: elf64-ppc.c:11751
#, c-format
msgid "can't find branch stub `%s'"
-msgstr "nu pot gãsi ramura trunchiatã `%s'"
+msgstr "nu pot găsi ramura trunchiată `%s'"
-#: elf64-ppc.c:6175 elf64-ppc.c:6250
-#, c-format
-msgid "linkage table error against `%s'"
+#: elf64-ppc.c:11815 elf64-ppc.c:12067 elf64-ppc.c:14574
+#, fuzzy, c-format
+msgid "%P: linkage table error against `%pT'\n"
msgstr "eroare tabel de linkuire pentru `%s'"
-#: elf64-ppc.c:6340
+#: elf64-ppc.c:12263
#, c-format
msgid "can't build branch stub `%s'"
-msgstr "nu se poate construi ramura trunchiatã `%s'"
+msgstr "nu se poate construi ramura trunchiată `%s'"
-#: elf64-ppc.c:7047
-msgid ".glink and .plt too far apart"
-msgstr ".glink ºi .plt prea departe unul de altul"
+#: elf64-ppc.c:13270
+#, c-format
+msgid "%pB section %pA exceeds stub group size"
+msgstr ""
-#: elf64-ppc.c:7135
-msgid "stubs don't match calculated size"
-msgstr "trunchierile(stubs) sunt în neconcordanþã cu mãrimea calculatã"
+#: elf64-ppc.c:14756
+msgid "__tls_get_addr call offset overflow"
+msgstr ""
-#: elf64-ppc.c:7147
+#: elf64-ppc.c:15095 elf64-ppc.c:15114
+#, c-format
+msgid "%s offset too large for .eh_frame sdata4 encoding"
+msgstr ""
+
+#: elf64-ppc.c:15195
+#, c-format
+msgid "linker stubs in %u group\n"
+msgid_plural "linker stubs in %u groups\n"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: elf64-ppc.c:15202
#, 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"
+"%s branch %lu\n"
+" long branch %lu\n"
+" plt call %lu\n"
+" global entry %lu"
+msgstr ""
+
+#: elf64-ppc.c:15584
+#, c-format
+msgid "%H: %s used with TLS symbol `%pT'\n"
msgstr ""
-"trunchieri(stubs) de linker în grupurile %u\n"
-" ramurã %lu\n"
-" ajustare toc %lu\n"
-" ramurã lungã %lu\n"
-" ajust. lungã toc %lu\n"
-" apelare plt %lu"
-#: elf64-ppc.c:7723
+#: elf64-ppc.c:15586
#, 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): TOCuri multiple nu sunt suportateîn folosirea fiºierelor voastre crt; recompilaþi cu -mminimal-toc sau upgradaþi gcc"
+msgid "%H: %s used with non-TLS symbol `%pT'\n"
+msgstr ""
+
+#: elf64-ppc.c:16370
+#, c-format
+msgid "%H: call to `%pT' lacks nop, can't restore toc; (plt call stub)\n"
+msgstr ""
-#: elf64-ppc.c:7731
+#: elf64-ppc.c:16376
#, 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+0 x%lx): optimizare apelare sibling pentru `%s' nu permite automatTOCuri multiple; recompilaþi cu -mminimal-toc sau -fno-optimize-sibling-calls, sau faceþi(make) `%s' extern"
+msgid "%H: call to `%pT' lacks nop, can't restore toc; (toc save/adjust stub)\n"
+msgstr ""
-#: elf64-ppc.c:8329
+#: elf64-ppc.c:17290
#, c-format
-msgid "%s: relocation %s is not supported for symbol %s."
-msgstr "%s: relocarea %s nu este suportatã pentru simbolul %s."
+msgid "%H: %s for indirect function `%pT' unsupported\n"
+msgstr ""
-#: elf64-ppc.c:8408
+#: elf64-ppc.c:17382
#, c-format
-msgid "%s: error: relocation %s not a multiple of %d"
+msgid "%X%P: %pB: %s against %pT is not supported by glibc as a dynamic relocation\n"
+msgstr ""
+
+#: elf64-ppc.c:17437
+#, fuzzy, c-format
+msgid "%P: %pB: %s is not supported for `%pT'\n"
+msgstr "%s: relocarea %s nu este suportată pentru simbolul %s."
+
+#: elf64-ppc.c:17698
+#, fuzzy, c-format
+msgid "%H: error: %s not a multiple of %u\n"
msgstr "%s: eroare: relocarea %s nu este multiplu de %d"
-#: elf64-sparc.c:1370
+#: elf64-ppc.c:17721
+#, fuzzy, c-format
+msgid "%H: unresolvable %s against `%pT'\n"
+msgstr "%s(%s+0x%lx): relocare nerezolvabilă %s pe simbolul `%s'"
+
+#: elf64-ppc.c:17866
+#, fuzzy, c-format
+msgid "%H: %s against `%pT': error %d\n"
+msgstr "%s(%s+0x%lx):relocarea %s pe `%s': eroare %d"
+
+#: elf64-s390.c:2444
#, c-format
-msgid "%s: check_relocs: unhandled reloc type %d"
-msgstr "%s: check_relocs: tip de relocare nemanipulabil %d"
+msgid "%pB: `%s' non-PLT reloc for symbol defined in shared library and accessed from executable (rebuild file with -fPIC ?)"
+msgstr ""
+
+#: elf64-sparc.c:478
+#, fuzzy, c-format
+msgid "%pB: only registers %%g[2367] can be declared using STT_REGISTER"
+msgstr "%s: Doar regiștrii %%g[2367] pot fi declarați folosind STT_REGISTER"
+
+#: elf64-sparc.c:499
+#, fuzzy, c-format
+msgid "register %%g%d used incompatibly: %s in %pB, previously %s in %pB"
+msgstr "Registrul %%g%d a folosit incompatibilități: %s în %s, anterior %s în %s"
+
+#: elf64-sparc.c:523
+#, fuzzy, c-format
+msgid "symbol `%s' has differing types: REGISTER in %pB, previously %s in %pB"
+msgstr "Simbolul `%s' are tipuri diferențiate: REGISTER în %s, anterior %s în %s"
+
+#: elf64-sparc.c:570
+#, fuzzy, c-format
+msgid "Symbol `%s' has differing types: %s in %pB, previously REGISTER in %pB"
+msgstr "Simbolul `%s' are tipuri diferențiate: %s în %s, anterior REGISTER în %s"
+
+#: elf64-sparc.c:702
+#, fuzzy, c-format
+msgid "%pB: linking UltraSPARC specific with HAL specific code"
+msgstr "%s: linkuire cod specific UltraSPARC cu cod specific HAL"
+
+#: elf64-x86-64.c:1400
+msgid "hidden symbol "
+msgstr ""
+
+#: elf64-x86-64.c:1403
+msgid "internal symbol "
+msgstr ""
+
+#: elf64-x86-64.c:1406 elf64-x86-64.c:1410
+#, fuzzy
+msgid "protected symbol "
+msgstr " [tabelă sortată de simboluri]"
+
+#: elf64-x86-64.c:1412
+#, fuzzy
+msgid "symbol "
+msgstr "Nici un simbol"
+
+#: elf64-x86-64.c:1418
+msgid "undefined "
+msgstr ""
-#: elf64-sparc.c:1407
+#: elf64-x86-64.c:1428
+msgid "a shared object"
+msgstr ""
+
+#: elf64-x86-64.c:1430
+#, fuzzy
+msgid "; recompile with -fPIC"
+msgstr "%s: probabil compilat fără -fPIC?"
+
+#: elf64-x86-64.c:1435
+msgid "a PIE object"
+msgstr ""
+
+#: elf64-x86-64.c:1437
+msgid "a PDE object"
+msgstr ""
+
+#: elf64-x86-64.c:1439
+#, fuzzy
+msgid "; recompile with -fPIE"
+msgstr "%s: probabil compilat fără -fPIC?"
+
+#: elf64-x86-64.c:1443
+#, fuzzy, c-format
+msgid "%pB: relocation %s against %s%s`%s' can not be used when making %s%s"
+msgstr "%s: relocarea %s nu poate fi folosită când se crează un shared object"
+
+#: elf64-x86-64.c:1948
+#, fuzzy, c-format
+msgid "%pB: relocation %s against symbol `%s' isn't supported in x32 mode"
+msgstr "%s: relocare nerezolvabilă %s pe simbolul `%s' din secțiunea `%s'"
+
+#: elf64-x86-64.c:2092
+#, fuzzy, c-format
+msgid "%pB: '%s' accessed both as normal and thread local symbol"
+msgstr "%s: `%s' accesate și ca simboluri locale normale și ca simboluri locale pe fire (thread)"
+
+#: elf64-x86-64.c:2727 elfnn-aarch64.c:5545 elfnn-riscv.c:2140
#, c-format
-msgid "%s: Only registers %%g[2367] can be declared using STT_REGISTER"
-msgstr "%s: Doar regiºtrii %%g[2367] pot fi declaraþi folosind STT_REGISTER"
+msgid "%pB: relocation %s against STT_GNU_IFUNC symbol `%s' has non-zero addend: %<PRId64>"
+msgstr ""
+
+#: elf64-x86-64.c:2989
+#, fuzzy, c-format
+msgid "%pB: relocation R_X86_64_GOTOFF64 against undefined %s `%s' can not be used when making a shared object"
+msgstr "%s: relocarea %s nu poate fi folosită când se crează un shared object"
-#: elf64-sparc.c:1427
+#: elf64-x86-64.c:3003
+#, fuzzy, c-format
+msgid "%pB: relocation R_X86_64_GOTOFF64 against protected %s `%s' can not be used when making a shared object"
+msgstr "%s: relocarea %s nu poate fi folosită când se crează un shared object"
+
+#: elf64-x86-64.c:3296
+#, fuzzy, c-format
+msgid "%pB: addend %s%#x in relocation %s against symbol `%s' at %#<PRIx64> in section `%pA' is out of range"
+msgstr "%s: avertisment: relocare %s pentru simbolul `%s' din secțiunea %s"
+
+#: elf64-x86-64.c:3439 elflink.c:13654
+msgid "%F%P: corrupt input: %pB\n"
+msgstr ""
+
+#: elf64-x86-64.c:4125
#, c-format
-msgid "Register %%g%d used incompatibly: %s in %s, previously %s in %s"
-msgstr "Registrul %%g%d a folosit incompatibilitãþi: %s în %s, anterior %s în %s"
+msgid " failed to convert GOTPCREL relocation against '%s'; relink with --no-relax\n"
+msgstr ""
-#: elf64-sparc.c:1450
+#: elf64-x86-64.c:4286
#, c-format
-msgid "Symbol `%s' has differing types: REGISTER in %s, previously %s in %s"
-msgstr "Simbolul `%s' are tipuri diferenþiate: REGISTER în %s, anterior %s în %s"
+msgid "%F%pB: PC-relative offset overflow in PLT entry for `%s'\n"
+msgstr ""
-#: elf64-sparc.c:1496
+#: elf64-x86-64.c:4354
#, c-format
-msgid "Symbol `%s' has differing types: %s in %s, previously REGISTER in %s"
-msgstr "Simbolul `%s' are tipuri diferenþiate: %s în %s, anterior REGISTER în %s"
+msgid "%F%pB: branch displacement overflow in PLT entry for `%s'\n"
+msgstr ""
-#: elf64-sparc.c:3053
+#: elf64-x86-64.c:4407
#, c-format
-msgid "%s: linking UltraSPARC specific with HAL specific code"
-msgstr "%s: linkuire cod specific UltraSPARC cu cod specific HAL"
+msgid "%F%pB: PC-relative offset overflow in GOT PLT entry for `%s'\n"
+msgstr ""
-#: elf64-x86-64.c:739
+#: elfcode.h:329
+#, fuzzy, c-format
+msgid "warning: %pB has a section extending past end of file"
+msgstr "avertisment: secțiunea %s are mărime zero"
+
+#: elfcode.h:776
#, c-format
-msgid "%s: %s' accessed both as normal and thread local symbol"
-msgstr "%s: `%s' accesate ºi ca simboluri locale normale ºi ca simboluri locale pe fire (thread)"
+msgid "warning: %pB has a corrupt string table index - ignoring"
+msgstr ""
-#: elfcode.h:1113
+#: elfcode.h:820
#, c-format
-msgid "%s: version count (%ld) does not match symbol count (%ld)"
-msgstr "%s: numãrul versiunii(%ld) nu se potriveºte cu numãrul simbolului (%ld)"
+msgid "warning: %pB has a program header with invalid alignment"
+msgstr ""
-#: elfcode.h:1342
+#: elfcode.h:1245
+#, fuzzy, c-format
+msgid "%pB: version count (%<PRId64>) does not match symbol count (%ld)"
+msgstr "%s: numărul versiunii(%ld) nu se potrivește cu numărul simbolului (%ld)"
+
+#: elfcore.h:300
+#, fuzzy, c-format
+msgid "warning: %pB has a segment extending past end of file"
+msgstr "avertisment: secțiunea %s are mărime zero"
+
+#: elflink.c:1406
#, c-format
-msgid "%s(%s): relocation %d has invalid symbol index %ld"
-msgstr "%s(%s): relocarea %d are indexul de simbol invalid %ld"
+msgid "%s: TLS definition in %pB section %pA mismatches non-TLS definition in %pB section %pA"
+msgstr ""
-#: elflink.c:1456
+#: elflink.c:1412
#, c-format
-msgid "%s: warning: unexpected redefinition of indirect versioned symbol `%s'"
-msgstr "%s: avertisment: redefinire neaºteptatã a simbolului indirect cu versiune(versioned) `%s'"
+msgid "%s: TLS reference in %pB mismatches non-TLS reference in %pB"
+msgstr ""
-#: elflink.c:1807
+#: elflink.c:1418
#, c-format
-msgid "%s: undefined versioned symbol name %s"
-msgstr "%s: nume de simbol versiune %s nedefinit"
+msgid "%s: TLS definition in %pB section %pA mismatches non-TLS reference in %pB"
+msgstr ""
-#: elflink.c:2142
+#: elflink.c:1424
#, c-format
-msgid "%s: relocation size mismatch in %s section %s"
-msgstr "%s: nepotrivire a mãrimii de relocare în %s secþiunea %s"
+msgid "%s: TLS reference in %pB mismatches non-TLS definition in %pB section %pA"
+msgstr ""
+
+#: elflink.c:2136
+#, fuzzy, c-format
+msgid "%pB: unexpected redefinition of indirect versioned symbol `%s'"
+msgstr "%s: avertisment: redefinire neașteptată a simbolului indirect cu versiune(versioned) `%s'"
+
+#: elflink.c:2597
+#, fuzzy, c-format
+msgid "%pB: version node not found for symbol %s"
+msgstr "%s: relocarea %s nu este suportată pentru simbolul %s."
+
+#: elflink.c:2688
+#, c-format
+msgid "%pB: bad reloc symbol index (%#<PRIx64> >= %#lx) for offset %#<PRIx64> in section `%pA'"
+msgstr ""
-#: elflink.c:2434
+#: elflink.c:2700
+#, c-format
+msgid "%pB: non-zero symbol index (%#<PRIx64>) for offset %#<PRIx64> in section `%pA' when the object file has no symbol table"
+msgstr ""
+
+#: elflink.c:2911
+#, fuzzy, c-format
+msgid "%pB: relocation size mismatch in %pB section %pA"
+msgstr "%s: nepotrivire a mărimii de relocare în %s secțiunea %s"
+
+#: elflink.c:3240
#, c-format
msgid "warning: type and size of dynamic symbol `%s' are not defined"
-msgstr "avertisment: tipul ºi mãrimea simbolului dinamic `%s' nu sunt definite"
+msgstr "avertisment: tipul și mărimea simbolului dinamic `%s' nu sunt definite"
+
+#: elflink.c:3300
+msgid "%P: copy reloc against protected `%pT' is dangerous\n"
+msgstr ""
-#: elflink.h:1022
+#: elflink.c:4262
#, c-format
-msgid "%s: %s: invalid version %u (max %d)"
-msgstr "%s: %s: versiune invalidã %u (max %d)"
+msgid "alternate ELF machine code found (%d) in %pB, expecting %d"
+msgstr ""
+
+#: elflink.c:4745
+#, fuzzy, c-format
+msgid "%pB: invalid version offset %lx (max %lx)"
+msgstr "%s: %s: versiune invalidă %u (max %d)"
+
+#: elflink.c:4813
+#, c-format
+msgid "%pB: %s local symbol at index %lu (>= sh_info of %lu)"
+msgstr ""
-#: elflink.h:1063
+#: elflink.c:4961
#, c-format
-msgid "%s: %s: invalid needed version %d"
-msgstr "%s: %s: versiune necesarã %d invalidã"
+msgid "%pB: not enough version information"
+msgstr ""
-#: elflink.h:1238
+#: elflink.c:4999
+#, fuzzy, c-format
+msgid "%pB: %s: invalid version %u (max %d)"
+msgstr "%s: %s: versiune invalidă %u (max %d)"
+
+#: elflink.c:5036
+#, fuzzy, c-format
+msgid "%pB: %s: invalid needed version %d"
+msgstr "%s: %s: versiune necesară %d invalidă"
+
+#: elflink.c:5455
+#, fuzzy, c-format
+msgid "%pB: undefined reference to symbol '%s'"
+msgstr "%s: nume de simbol versiune %s nedefinit"
+
+#: elflink.c:6523
#, c-format
-msgid "Warning: alignment %u of symbol `%s' in %s is smaller than %u in %s"
-msgstr "Avertisment: alinierea %u al simbolului `%s' din %s este mai micã decât %u în %s"
+msgid "%pB: stack size specified and %s set"
+msgstr ""
-#: elflink.h:1252
+#: elflink.c:6527
#, c-format
-msgid "Warning: size of symbol `%s' changed from %lu in %s to %lu in %s"
-msgstr "Avertisment: mãrimea simbolului `%s' a fost schimbatã din %lu din %s în %lu din %s"
+msgid "%pB: %s not absolute"
+msgstr ""
-#: elflink.h:2160
+#: elflink.c:6739
#, c-format
msgid "%s: undefined version: %s"
-msgstr "%s:versiune %s nedefinitã"
+msgstr "%s:versiune %s nedefinită"
-#: elflink.h:2226
+#: elflink.c:7303
+#, fuzzy, c-format
+msgid "%pB: .preinit_array section is not allowed in DSO"
+msgstr "%s: secțiunea .preinit_array section nu este permisă în DSO"
+
+#: elflink.c:8895
+#, fuzzy, c-format
+msgid "undefined %s reference in complex symbol: %s"
+msgstr "%s: nume de simbol versiune %s nedefinit"
+
+#: elflink.c:9058 elflink.c:9066
+msgid "division by zero"
+msgstr ""
+
+#: elflink.c:9080
#, c-format
-msgid "%s: .preinit_array section is not allowed in DSO"
-msgstr "%s: secþiunea .preinit_array section nu este permisã în DSO"
+msgid "unknown operator '%c' in complex symbol"
+msgstr ""
-#: elflink.h:3078
-msgid "Not enough memory to sort relocations"
-msgstr "Nu existã memorie suficientã pentru a sorta relocãrile"
+#. PR 21524: Let the user know if a symbol was removed by garbage collection.
+#: elflink.c:9418
+#, c-format
+msgid "%pB:%pA: error: relocation references symbol %s which was removed by garbage collection"
+msgstr ""
+
+#: elflink.c:9421
+#, fuzzy, c-format
+msgid "%pB:%pA: error: try relinking with --gc-keep-exported enabled"
+msgstr " luați în considerare relinkuirea cu --support-old-code activat"
-#: elflink.h:3958 elflink.h:4001
+#: elflink.c:9666 elflink.c:9684 elflink.c:9723 elflink.c:9741
#, c-format
-msgid "%s: could not find output section %s"
-msgstr "%s: nu s-a putut gãsi secþiunea de output %s"
+msgid "%pB: unable to sort relocs - they are in more than one size"
+msgstr ""
-#: elflink.h:3964
+#. The section size is not divisible by either -
+#. something is wrong.
+#: elflink.c:9700 elflink.c:9757
+#, c-format
+msgid "%pB: unable to sort relocs - they are of an unknown size"
+msgstr ""
+
+#: elflink.c:9809
+#, fuzzy
+msgid "not enough memory to sort relocations"
+msgstr "Nu există memorie suficientă pentru a sorta relocările"
+
+#: elflink.c:10149
+#, c-format
+msgid "%pB: too many sections: %d (>= %d)"
+msgstr ""
+
+#: elflink.c:10425
+#, fuzzy, c-format
+msgid "%pB: internal symbol `%s' in %pB is referenced by DSO"
+msgstr "%s: %s simbolul `%s' în %s este referit de DSO"
+
+#: elflink.c:10428
+#, fuzzy, c-format
+msgid "%pB: hidden symbol `%s' in %pB is referenced by DSO"
+msgstr "%s: %s simbolul `%s' în %s este referit de DSO"
+
+#: elflink.c:10431
+#, fuzzy, c-format
+msgid "%pB: local symbol `%s' in %pB is referenced by DSO"
+msgstr "%s: %s simbolul `%s' în %s este referit de DSO"
+
+#: elflink.c:10517
+#, fuzzy, c-format
+msgid "%pB: could not find output section %pA for input section %pA"
+msgstr "%s: nu am putut găsi secțiunea de output %s pentru secțiunea de input %s"
+
+#: elflink.c:10671
+#, fuzzy, c-format
+msgid "%pB: protected symbol `%s' isn't defined"
+msgstr "%s: %s simbolul `%s' nu este definit"
+
+#: elflink.c:10674
+#, fuzzy, c-format
+msgid "%pB: internal symbol `%s' isn't defined"
+msgstr "%s: %s simbolul `%s' nu este definit"
+
+#: elflink.c:10677
+#, fuzzy, c-format
+msgid "%pB: hidden symbol `%s' isn't defined"
+msgstr "%s: %s simbolul `%s' nu este definit"
+
+#: elflink.c:10709
+#, fuzzy, c-format
+msgid "%pB: no symbol version section for versioned symbol `%s'"
+msgstr "%s: avertisment: redefinire neașteptată a simbolului indirect cu versiune(versioned) `%s'"
+
+#: elflink.c:11108
+#, c-format
+msgid "warning: --enable-non-contiguous-regions discards section `%s' from '%s'\n"
+msgstr ""
+
+#: elflink.c:11384
+#, c-format
+msgid "error: %pB contains a reloc (%#<PRIx64>) for section %pA that references a non-existent global symbol"
+msgstr ""
+
+#: elflink.c:11844
+#, fuzzy, c-format
+msgid "error: %pB: size of section %pA is not multiple of address size"
+msgstr "%s: eroare: relocarea %s nu este multiplu de %d"
+
+#: elflink.c:12121
+#, c-format
+msgid "%pB: no symbol found for import library"
+msgstr ""
+
+#: elflink.c:12696
+#, fuzzy
+msgid "%F%P: %pB: failed to finish relative relocations\n"
+msgstr "nu s-a putut calcula(compute) secțiunea nouă APUinfo."
+
+#: elflink.c:12773
+#, c-format
+msgid "%pB: file class %s incompatible with %s"
+msgstr ""
+
+#: elflink.c:13023
+#, c-format
+msgid "%pB: failed to generate import library"
+msgstr ""
+
+#: elflink.c:13191
#, c-format
msgid "warning: %s section has zero size"
-msgstr "avertisment: secþiunea %s are mãrime zero"
+msgstr "avertisment: secțiunea %s are mărime zero"
+
+#: elflink.c:13239
+#, c-format
+msgid "warning: section '%s' is being made into a note"
+msgstr ""
+
+#: elflink.c:13333
+msgid "%P%X: read-only segment has dynamic relocations\n"
+msgstr ""
+
+#: elflink.c:13336
+msgid "%P: warning: creating DT_TEXTREL in a shared object\n"
+msgstr ""
-#: elflink.h:4483
+#: elflink.c:13339
+msgid "%P: warning: creating DT_TEXTREL in a PDE\n"
+msgstr ""
+
+#: elflink.c:13342
+msgid "%P: warning: creating DT_TEXTREL in a PIE\n"
+msgstr ""
+
+#: elflink.c:13475
+msgid "%P%X: can not read symbols: %E\n"
+msgstr ""
+
+#: elflink.c:13900
+msgid "%F%P: %pB(%pA): error: need linked-to section for --gc-sections\n"
+msgstr ""
+
+#: elflink.c:14378
#, c-format
-msgid "%s: %s symbol `%s' in %s is referenced by DSO"
-msgstr "%s: %s simbolul `%s' în %s este referit de DSO"
+msgid "%pB: %pA+%#<PRIx64>: no symbol found for INHERIT"
+msgstr ""
-#: elflink.h:4564
+#: elflink.c:14419
#, c-format
-msgid "%s: could not find output section %s for input section %s"
-msgstr "%s: nu am putut gãsi secþiunea de output %s pentru secþiunea de input %s"
+msgid "%pB: section '%pA': corrupt VTENTRY entry"
+msgstr ""
-#: elflink.h:4666
+#: elflink.c:14562
#, c-format
-msgid "%s: %s symbol `%s' isn't defined"
-msgstr "%s: %s simbolul `%s' nu este definit"
+msgid "unrecognized INPUT_SECTION_FLAG %s\n"
+msgstr ""
-#: elflink.h:5053 elflink.h:5095
-msgid "%T: discarded in section `%s' from %s\n"
-msgstr "%T: abandonat(discarded) în secþiunea `%s' din %s\n"
+#: elflink.c:15310
+#, fuzzy, c-format
+msgid "%P: %pB: warning: relocation against `%s' in read-only section `%pA'\n"
+msgstr "%s: avertisment: relocare %s pentru simbolul `%s' din secțiunea %s"
-#: elfxx-mips.c:887
+#: elflink.c:15399
+msgid "%P: warning: GNU indirect functions with DT_TEXTREL may result in a segfault at runtime; recompile with %s\n"
+msgstr ""
+
+#: elfxx-aarch64.c:477
+#, c-format
+msgid "%pB: warning: Weak TLS is implementation defined and may not work as expected"
+msgstr ""
+
+#: elfxx-aarch64.c:738 elfnn-aarch64.c:9914 elfnn-aarch64.c:9921
+#, c-format
+msgid "%pB: warning: BTI turned on by -z force-bti when all inputs do not have BTI in NOTE section."
+msgstr ""
+
+#: elfxx-aarch64.c:812
+#, c-format
+msgid "error: %pB: <corrupt AArch64 used size: 0x%x>"
+msgstr ""
+
+#: elfxx-mips.c:1505
msgid "static procedure (no name)"
-msgstr "procedurã staticã (fãrã nume)"
+msgstr "procedură statică (fără nume)"
-#: elfxx-mips.c:1897
-msgid "not enough GOT space for local GOT entries"
-msgstr "nu existã destul spaþiu GOT pentru intrãrile GOT locale"
+#: elfxx-mips.c:5780
+msgid "MIPS16 and microMIPS functions cannot call each other"
+msgstr ""
-#: elfxx-mips.c:3691
+#: elfxx-mips.c:6545
+msgid "%X%H: unsupported JALX to the same ISA mode\n"
+msgstr ""
+
+#: elfxx-mips.c:6578
+msgid "%X%H: unsupported jump between ISA modes; consider recompiling with interlinking enabled\n"
+msgstr ""
+
+#: elfxx-mips.c:6623
+msgid "%X%H: cannot convert branch between ISA modes to JALX: relocation out of range\n"
+msgstr ""
+
+#: elfxx-mips.c:6635
+msgid "%X%H: unsupported branch between ISA modes\n"
+msgstr ""
+
+#: elfxx-mips.c:7264
#, c-format
-msgid "%s: %s+0x%lx: jump to stub routine which is not jal"
-msgstr "%s: %s+0x%lx: salt la rutinã ciot(stub) ce nu este jal"
+msgid "%pB: incorrect `.reginfo' section size; expected %<PRIu64>, got %<PRIu64>"
+msgstr ""
-#: elfxx-mips.c:5192
+#: elfxx-mips.c:7308 elfxx-mips.c:7547
#, c-format
-msgid "%s: Malformed reloc detected for section %s"
-msgstr "%s: Relocare malformatã detectatã pentru secþiunea %s"
+msgid "%pB: warning: bad `%s' option size %u smaller than its header"
+msgstr ""
-#: elfxx-mips.c:5266
+#: elfxx-mips.c:8356 elfxx-mips.c:8482
#, c-format
-msgid "%s: CALL16 reloc at 0x%lx not against global symbol"
+msgid "%pB: warning: cannot determine the target function for stub section `%s'"
+msgstr ""
+
+#: elfxx-mips.c:8614
+#, fuzzy, c-format
+msgid "%pB: malformed reloc detected for section %s"
+msgstr "%s: Relocare malformată detectată pentru secțiunea %s"
+
+#: elfxx-mips.c:8713
+#, c-format
+msgid "%pB: GOT reloc at %#<PRIx64> not expected in executables"
+msgstr ""
+
+#: elfxx-mips.c:8853
+#, fuzzy, c-format
+msgid "%pB: CALL16 reloc at %#<PRIx64> not against global symbol"
msgstr "%s: relocarea CALL16 la 0x%lx nu este pe simbolul global"
-#: elfxx-mips.c:8692
+#: elfxx-mips.c:9156
+#, fuzzy, c-format
+msgid "%X%H: relocation %s against `%s' cannot be used when making a shared object; recompile with -fPIC\n"
+msgstr "%s: relocarea %s nu poate fi utilizată când se face un shared object, recompilațicu -fPIC"
+
+#: elfxx-mips.c:9282
#, c-format
-msgid "%s: illegal section name `%s'"
-msgstr "%s: nume ilegal de secþiune `%s'"
+msgid "IFUNC symbol %s in dynamic symbol table - IFUNCS are not supported"
+msgstr ""
-#: elfxx-mips.c:9025
+#: elfxx-mips.c:9285
#, c-format
-msgid "%s: endianness incompatible with that of the selected emulation"
-msgstr "%s: endianness incompatibilã cu aceea a emulaþiei selectate"
+msgid "non-dynamic symbol %s in dynamic symbol table"
+msgstr ""
+
+#: elfxx-mips.c:9505
+#, fuzzy, c-format
+msgid "non-dynamic relocations refer to dynamic symbol %s"
+msgstr "%s: rezolvare de speculație către simbolul dinamic %s"
-#: elfxx-mips.c:9037
+#: elfxx-mips.c:10439
#, c-format
-msgid "%s: ABI is incompatible with that of the selected emulation"
-msgstr "%s: ABI este incompatibil cu cel al emulaþiei selectate"
+msgid "%pB: can't find matching LO16 reloc against `%s' for %s at %#<PRIx64> in section `%pA'"
+msgstr ""
-#: elfxx-mips.c:9104
+#: elfxx-mips.c:10579
+msgid "small-data section exceeds 64KB; lower small-data size limit (see option -G)"
+msgstr ""
+
+#: elfxx-mips.c:10598
+msgid "cannot convert a jump to JALX for a non-word-aligned address"
+msgstr ""
+
+#: elfxx-mips.c:10601
+msgid "jump to a non-word-aligned address"
+msgstr ""
+
+#: elfxx-mips.c:10602
+msgid "jump to a non-instruction-aligned address"
+msgstr ""
+
+#: elfxx-mips.c:10605
+msgid "cannot convert a branch to JALX for a non-word-aligned address"
+msgstr ""
+
+#: elfxx-mips.c:10607
+msgid "branch to a non-instruction-aligned address"
+msgstr ""
+
+#: elfxx-mips.c:10609
+msgid "PC-relative load from unaligned address"
+msgstr ""
+
+#: elfxx-mips.c:10909
#, c-format
-msgid "%s: warning: linking PIC files with non-PIC files"
-msgstr "%s: avertisment: linkuire de fiºiere PIC cu fiºiere non-PIC"
+msgid "%pB: `%pA' entry VMA of %#<PRIx64> outside the 32-bit range supported; consider using `-Ttext-segment=...'"
+msgstr ""
-#: elfxx-mips.c:9121
+#: elfxx-mips.c:11024 elfxx-mips.c:11611
#, c-format
-msgid "%s: linking 32-bit code with 64-bit code"
-msgstr "%s: linkuire cod 32-biþi cu cod 64-biþi"
+msgid "%pB: `%pA' offset of %<PRId64> from `%pA' beyond the range of ADDIUPC"
+msgstr ""
-#: elfxx-mips.c:9149
+#: elfxx-mips.c:11583
#, c-format
-msgid "%s: linking %s module with previous %s modules"
-msgstr "%s: linkuire a modulului %s cu modulele%s anterioare"
+msgid "%pB: `%pA' start VMA of %#<PRIx64> outside the 32-bit range supported; consider using `-Ttext-segment=...'"
+msgstr ""
+
+#: elfxx-mips.c:13335 reloc.c:8521
+#, c-format
+msgid "%X%P: %pB(%pA): error: relocation for offset %V has no value\n"
+msgstr ""
+
+#: elfxx-mips.c:13436 reloc.c:8609
+#, fuzzy, c-format
+msgid "%X%P: %pB(%pA): relocation \"%pR\" is not supported\n"
+msgstr "%s: relocarea %s nu este suportată pentru simbolul %s."
-#: elfxx-mips.c:9172
+#: elfxx-mips.c:13445 reloc.c:8618
#, c-format
-msgid "%s: ABI mismatch: linking %s module with previous %s modules"
+msgid "%X%P: %pB(%pA): relocation \"%pR\" returns an unrecognized value %x\n"
+msgstr ""
+
+#: elfxx-mips.c:14627
+#, fuzzy, c-format
+msgid "%pB: unknown architecture %s"
+msgstr "%s: tip necunoscut de relocare %d"
+
+#: elfxx-mips.c:15161
+#, fuzzy, c-format
+msgid "%pB: illegal section name `%pA'"
+msgstr "%s: nume ilegal de secțiune `%s'"
+
+#: elfxx-mips.c:15438
+#, fuzzy, c-format
+msgid "%pB: warning: linking abicalls files with non-abicalls files"
+msgstr "%s: linkuire fișiere abicalls cu fișiere non-abicalls"
+
+#: elfxx-mips.c:15455
+#, fuzzy, c-format
+msgid "%pB: linking 32-bit code with 64-bit code"
+msgstr "%s: linkuire cod 32-biți cu cod 64-biți"
+
+#: elfxx-mips.c:15487 elfxx-mips.c:15553 elfxx-mips.c:15568
+#, fuzzy, c-format
+msgid "%pB: linking %s module with previous %s modules"
+msgstr "%s: linkuire a modulului %s cu modulele%s anterioare"
+
+#: elfxx-mips.c:15511
+#, fuzzy, c-format
+msgid "%pB: ABI mismatch: linking %s module with previous %s modules"
msgstr "%s: nepotrivire ABI: linkuire modul %s cu module %s anterioare"
-#: elfxx-mips.c:9241
+#: elfxx-mips.c:15536
+#, fuzzy, c-format
+msgid "%pB: ASE mismatch: linking %s module with previous %s modules"
+msgstr "%s: nepotrivire ABI: linkuire modul %s cu module %s anterioare"
+
+#: elfxx-mips.c:15670
+#, c-format
+msgid "warning: %pB uses unknown floating point ABI %d (set by %pB), %pB uses unknown floating point ABI %d"
+msgstr ""
+
+#: elfxx-mips.c:15676
+#, c-format
+msgid "warning: %pB uses unknown floating point ABI %d (set by %pB), %pB uses %s"
+msgstr ""
+
+#: elfxx-mips.c:15682
+#, c-format
+msgid "warning: %pB uses %s (set by %pB), %pB uses unknown floating point ABI %d"
+msgstr ""
+
+#: elfxx-mips.c:15696
+#, c-format
+msgid "warning: %pB uses %s (set by %pB), %pB uses %s"
+msgstr ""
+
+#: elfxx-mips.c:15715
+#, c-format
+msgid "warning: %pB uses %s (set by %pB), %pB uses unknown MSA ABI %d"
+msgstr ""
+
+#: elfxx-mips.c:15727
+#, c-format
+msgid "warning: %pB uses unknown MSA ABI %d (set by %pB), %pB uses %s"
+msgstr ""
+
+#: elfxx-mips.c:15736
+#, c-format
+msgid "warning: %pB uses unknown MSA ABI %d (set by %pB), %pB uses unknown MSA ABI %d"
+msgstr ""
+
+#: elfxx-mips.c:15798
+#, fuzzy, c-format
+msgid "%pB: endianness incompatible with that of the selected emulation"
+msgstr "%s: endianness incompatibilă cu aceea a emulației selectate"
+
+#: elfxx-mips.c:15812
+#, fuzzy, c-format
+msgid "%pB: ABI is incompatible with that of the selected emulation"
+msgstr "%s: ABI este incompatibil cu cel al emulației selectate"
+
+#: elfxx-mips.c:15865
+#, c-format
+msgid "%pB: warning: inconsistent ISA between e_flags and .MIPS.abiflags"
+msgstr ""
+
+#: elfxx-mips.c:15870
+#, c-format
+msgid "%pB: warning: inconsistent FP ABI between .gnu.attributes and .MIPS.abiflags"
+msgstr ""
+
+#: elfxx-mips.c:15874
+#, c-format
+msgid "%pB: warning: inconsistent ASEs between e_flags and .MIPS.abiflags"
+msgstr ""
+
+#: elfxx-mips.c:15881
+#, c-format
+msgid "%pB: warning: inconsistent ISA extensions between e_flags and .MIPS.abiflags"
+msgstr ""
+
+#: elfxx-mips.c:15885
+#, c-format
+msgid "%pB: warning: unexpected flag in the flags2 field of .MIPS.abiflags (0x%lx)"
+msgstr ""
+
+#: elfxx-mips.c:16076
+msgid "-mips32r2 -mfp64 (12 callee-saved)"
+msgstr ""
+
+#: elfxx-mips.c:16138 elfxx-mips.c:16149
+msgid "None"
+msgstr ""
+
+#: elfxx-mips.c:16140 elfxx-mips.c:16209
+#, fuzzy
+msgid "Unknown"
+msgstr "*necunoscut*"
+
+#: elfxx-mips.c:16220
+#, c-format
+msgid "Hard or soft float\n"
+msgstr ""
+
+#: elfxx-mips.c:16223
+#, c-format
+msgid "Hard float (double precision)\n"
+msgstr ""
+
+#: elfxx-mips.c:16226
+#, c-format
+msgid "Hard float (single precision)\n"
+msgstr ""
+
+#: elfxx-mips.c:16229
+#, c-format
+msgid "Soft float\n"
+msgstr ""
+
+#: elfxx-mips.c:16232
+#, c-format
+msgid "Hard float (MIPS32r2 64-bit FPU 12 callee-saved)\n"
+msgstr ""
+
+#: elfxx-mips.c:16235
+#, c-format
+msgid "Hard float (32-bit CPU, Any FPU)\n"
+msgstr ""
+
+#: elfxx-mips.c:16238
+#, c-format
+msgid "Hard float (32-bit CPU, 64-bit FPU)\n"
+msgstr ""
+
+#: elfxx-mips.c:16241
+#, c-format
+msgid "Hard float compat (32-bit CPU, 64-bit FPU)\n"
+msgstr ""
+
+#: elfxx-mips.c:16273
+#, c-format
msgid " [abi=O32]"
msgstr " [abi=O32]"
-#: elfxx-mips.c:9243
+#: elfxx-mips.c:16275
+#, c-format
msgid " [abi=O64]"
msgstr " [abi=O64]"
-#: elfxx-mips.c:9245
+#: elfxx-mips.c:16277
+#, c-format
msgid " [abi=EABI32]"
msgstr " [abi=EABI32]"
-#: elfxx-mips.c:9247
+#: elfxx-mips.c:16279
+#, c-format
msgid " [abi=EABI64]"
msgstr " [abi=EABI64]"
-#: elfxx-mips.c:9249
+#: elfxx-mips.c:16281
+#, c-format
msgid " [abi unknown]"
msgstr " [abi necunoscut]"
-#: elfxx-mips.c:9251
+#: elfxx-mips.c:16283
+#, c-format
msgid " [abi=N32]"
msgstr " [abi=N32]"
-#: elfxx-mips.c:9253
+#: elfxx-mips.c:16285
+#, c-format
msgid " [abi=64]"
msgstr " [abi=64]"
-#: elfxx-mips.c:9255
+#: elfxx-mips.c:16287
+#, c-format
msgid " [no abi set]"
msgstr " [abi nesetat]"
-#: elfxx-mips.c:9258
-msgid " [mips1]"
-msgstr " [mips1]"
-
-#: elfxx-mips.c:9260
-msgid " [mips2]"
-msgstr " [mips2]"
+#: elfxx-mips.c:16312
+#, c-format
+msgid " [unknown ISA]"
+msgstr " [ISA necunoscut]"
-#: elfxx-mips.c:9262
-msgid " [mips3]"
-msgstr " [mips3]"
+#: elfxx-mips.c:16332
+#, c-format
+msgid " [not 32bitmode]"
+msgstr " [non-mod32biți]"
-#: elfxx-mips.c:9264
-msgid " [mips4]"
-msgstr " [mips4]"
+#: elfxx-riscv.c:1563
+#, c-format
+msgid "x ISA extension `%s' must be set with the versions"
+msgstr ""
-#: elfxx-mips.c:9266
-msgid " [mips5]"
-msgstr " [mips5]"
+#: elfxx-riscv.c:1569
+#, c-format
+msgid "cannot find default versions of the ISA extension `%s'"
+msgstr ""
-#: elfxx-mips.c:9268
-msgid " [mips32]"
-msgstr " [mips32]"
+#: elfxx-riscv.c:1669
+#, c-format
+msgid "%s: first ISA extension must be `e', `i' or `g'"
+msgstr ""
-#: elfxx-mips.c:9270
-msgid " [mips64]"
-msgstr " [mips64]"
+#: elfxx-riscv.c:1698
+#, c-format
+msgid "%s: unknown standard ISA extension `%c'"
+msgstr ""
-#: elfxx-mips.c:9272
-msgid " [mips32r2]"
-msgstr " [mips32r2]"
+#: elfxx-riscv.c:1708
+#, c-format
+msgid "%s: standard ISA extension `%c' is not in canonical order"
+msgstr ""
-#: elfxx-mips.c:9274
-msgid " [unknown ISA]"
-msgstr " [ISA necunoscut]"
+#: elfxx-riscv.c:1759
+#, c-format
+msgid "%s: unknown prefix class for the ISA extension `%s'"
+msgstr ""
-#: elfxx-mips.c:9277
-msgid " [mdmx]"
-msgstr " [mdmx]"
+#: elfxx-riscv.c:1795
+#, c-format
+msgid "%s: invalid prefixed ISA extension `%s' ends with <number>p"
+msgstr ""
-#: elfxx-mips.c:9280
-msgid " [mips16]"
-msgstr " [mips16]"
+#: elfxx-riscv.c:1815
+#, fuzzy, c-format
+msgid "%s: unknown prefixed ISA extension `%s'"
+msgstr "%s:versiune %s nedefinită"
-#: elfxx-mips.c:9283
-msgid " [32bitmode]"
-msgstr " [mod32biþi]"
+#: elfxx-riscv.c:1826
+#, fuzzy, c-format
+msgid "%s: duplicate prefixed ISA extension `%s'"
+msgstr "%s: exportare de ciot(stub) duplicată %s"
-#: elfxx-mips.c:9285
-msgid " [not 32bitmode]"
-msgstr " [non-mod32biþi]"
+#: elfxx-riscv.c:1836
+#, c-format
+msgid "%s: prefixed ISA extension `%s' is not in expected order. It must come before `%s'"
+msgstr ""
-#: i386linux.c:457 m68klinux.c:461 sparclinux.c:458
+#: elfxx-riscv.c:1852
#, c-format
-msgid "Output file requires shared library `%s'\n"
-msgstr "Fiºierul de output necesitã biblioteca globalã(shared) `%s'\n"
+msgid "%s: prefixed ISA extension must separate with _"
+msgstr ""
-#: i386linux.c:465 m68klinux.c:469 sparclinux.c:466
+#: elfxx-riscv.c:1891
#, c-format
-msgid "Output file requires shared library `%s.so.%s'\n"
-msgstr "Fiºierul de output necesitã biblioteca globalã(shared) `%s'.so.`%s'\n"
+msgid "rv%d does not support the `e' extension"
+msgstr ""
-#: i386linux.c:654 i386linux.c:704 m68klinux.c:661 m68klinux.c:709
-#: sparclinux.c:656 sparclinux.c:706
+#: elfxx-riscv.c:1898
#, c-format
-msgid "Symbol %s not defined for fixups\n"
-msgstr "Simbolul %s nu este definit pentru acceptare(fixups)\n"
+msgid "rv%d does not support the `q' extension"
+msgstr ""
-#: i386linux.c:728 m68klinux.c:733 sparclinux.c:730
-msgid "Warning: fixup count mismatch\n"
-msgstr "Avertisment: nepotrivire numãrãtori acceptare(fixup)\n"
+#: elfxx-riscv.c:1905
+msgid "rv32e does not support the `f' extension"
+msgstr ""
-#: ieee.c:293
-#, c-format
-msgid "%s: string too long (%d chars, max 65535)"
-msgstr "%s: ºir prea lung (%d caractere, max 65535)"
+#: elfxx-riscv.c:1912
+msgid "`zfinx' is conflict with the `f/d/q' extension"
+msgstr ""
+
+#: elfxx-riscv.c:1933
+msgid "zvl*b extensions need to enable either `v' or `zve' extension"
+msgstr ""
-#: ieee.c:428
+#: elfxx-riscv.c:1995
#, c-format
-msgid "%s: unrecognized symbol `%s' flags 0x%x"
-msgstr "%s: simbol necunoscut `%s' marcaje(flags) 0x%x"
+msgid "%s: ISA string cannot contain uppercase letters"
+msgstr ""
-#: ieee.c:938
+#: elfxx-riscv.c:2023
#, c-format
-msgid "%s: unimplemented ATI record %u for symbol %u"
-msgstr "%s: înregistrare ATI neimplementatã %u pe simbolul %u"
+msgid "%s: ISA string must begin with rv32 or rv64"
+msgstr ""
-#: ieee.c:963
+#: elfxx-riscv.c:2259
#, c-format
-msgid "%s: unexpected ATN type %d in external part"
-msgstr "%s: tip ATN neaºteptat %d în parte externã"
+msgid "invalid ISA extension ends with <number>p in .option arch `%s'"
+msgstr ""
-#: ieee.c:985
+#: elfxx-riscv.c:2282
#, c-format
-msgid "%s: unexpected type after ATN"
-msgstr "%s: tip neaºteptat dupã ATN"
+msgid "unknown ISA extension `%s' in .option arch `%s'"
+msgstr ""
-#: ihex.c:264
+#: elfxx-riscv.c:2293
#, c-format
-msgid "%s:%d: unexpected character `%s' in Intel Hex file\n"
-msgstr "%s:%d: caracter neaºteptat `%s' în fiºier Intel Hex\n"
+msgid "cannot + or - base extension `%s' in .option arch `%s'"
+msgstr ""
+
+#: elfxx-riscv.c:2413
+msgid "internal: unreachable INSN_CLASS_*"
+msgstr ""
-#: ihex.c:372
+#: elfxx-sparc.c:3021 elfnn-aarch64.c:5529
#, c-format
-msgid "%s:%u: bad checksum in Intel Hex file (expected %u, found %u)"
-msgstr "%s:%u: checksum invalid în fiºier Intel Hex (se aºtepta %u, s-a gãsit %u)"
+msgid "%pB: relocation %s against STT_GNU_IFUNC symbol `%s' isn't handled by %s"
+msgstr ""
-#: ihex.c:426
+#: elfxx-tilegx.c:4126
#, c-format
-msgid "%s:%u: bad extended address record length in Intel Hex file"
-msgstr "%s: %u: mãrime înregistrare a adresei extinse invalidã în fiºier Intel Hex"
+msgid "%pB: cannot link together %s and %s objects"
+msgstr ""
-#: ihex.c:443
+#: elfxx-x86.c:1026
+#, fuzzy, c-format
+msgid "%F%P: %pB: failed to allocate relative reloc record\n"
+msgstr "nu s-a putut calcula(compute) secțiunea nouă APUinfo."
+
+#: elfxx-x86.c:1368
#, c-format
-msgid "%s:%u: bad extended start address length in Intel Hex file"
-msgstr "%s: %u: mãrime adresã de start extinsã invalidã în fiºier Intel Hex"
+msgid "%F%P: %pB: failed to allocate 64-bit DT_RELR bitmap\n"
+msgstr ""
-#: ihex.c:460
+#: elfxx-x86.c:1404
#, c-format
-msgid "%s:%u: bad extended linear address record length in Intel Hex file"
-msgstr "%s: %u: mãrime înregistrare a adresei lineare extinse invalidã în fiºier Intel Hex"
+msgid "%F%P: %pB: failed to allocate 32-bit DT_RELR bitmap\n"
+msgstr ""
-#: ihex.c:477
+#: elfxx-x86.c:1707
#, c-format
-msgid "%s:%u: bad extended linear start address length in Intel Hex file"
-msgstr "%s: %u: mãrime adresã linearã de start extinsã invalidã în fiºier Intel Hex"
+msgid "%F%P: %pB: size of compact relative reloc section is changed: new (%lu) != old (%lu)\n"
+msgstr ""
+
+#: elfxx-x86.c:1729
+#, fuzzy, c-format
+msgid "%F%P: %pB: failed to allocate compact relative reloc section\n"
+msgstr "nu s-a putut calcula(compute) secțiunea nouă APUinfo."
+
+#: elfxx-x86.c:1987
+#, fuzzy, c-format
+msgid "%F%P: %pB: relocation %s against absolute symbol `%s' in section `%pA' is disallowed\n"
+msgstr "%s: relocare nerezolvabilă %s pe simbolul `%s' din secțiunea `%s'"
+
+#: elfxx-x86.c:2069
+#, fuzzy
+msgid "%P: %pB: warning: relocation in read-only section `%pA'\n"
+msgstr "%s: relocare loader în secțiunea doar-în-citire %s"
-#: ihex.c:494
+#: elfxx-x86.c:2785
+msgid "%pB: %s (offset: 0x%v, info: 0x%v, addend: 0x%v) against '%s' for section '%pA' in %pB\n"
+msgstr ""
+
+#: elfxx-x86.c:2791
+msgid "%pB: %s (offset: 0x%v, info: 0x%v) against '%s' for section '%pA' in %pB\n"
+msgstr ""
+
+#: elfxx-x86.c:3388
#, c-format
-msgid "%s:%u: unrecognized ihex type %u in Intel Hex file\n"
-msgstr "%s: %u: tip ihex necunoscut %u în fiºier Intel Hex\n"
+msgid "error: %pB: <corrupt x86 property (0x%x) size: 0x%x>"
+msgstr ""
+
+#: elfxx-x86.c:3735
+msgid "%P: %pB: warning: missing %s\n"
+msgstr ""
+
+#: elfxx-x86.c:3736
+msgid "%X%P: %pB: error: missing %s\n"
+msgstr ""
+
+#: elfxx-x86.c:3799
+msgid "IBT and SHSTK properties"
+msgstr ""
+
+#: elfxx-x86.c:3801
+msgid "IBT property"
+msgstr ""
+
+#: elfxx-x86.c:3803
+msgid "SHSTK property"
+msgstr ""
+
+#: elfxx-x86.c:3808
+msgid "LAM_U48 property"
+msgstr ""
+
+#: elfxx-x86.c:3813
+msgid "LAM_U57 property"
+msgstr ""
+
+#: elfxx-x86.c:3957
+msgid "%F%P: failed to create VxWorks dynamic sections\n"
+msgstr ""
+
+#: elfxx-x86.c:3966
+msgid "%F%P: failed to create GOT sections\n"
+msgstr ""
+
+#: elfxx-x86.c:3984
+#, fuzzy
+msgid "%F%P: failed to create ifunc sections\n"
+msgstr "nu s-a putut calcula(compute) secțiunea nouă APUinfo."
+
+#: elfxx-x86.c:4021
+#, fuzzy
+msgid "%F%P: failed to create GOT PLT section\n"
+msgstr "nu s-a putut calcula(compute) secțiunea nouă APUinfo."
+
+#: elfxx-x86.c:4040
+#, fuzzy
+msgid "%F%P: failed to create IBT-enabled PLT section\n"
+msgstr "nu s-a putut calcula(compute) secțiunea nouă APUinfo."
+
+#: elfxx-x86.c:4054
+#, fuzzy
+msgid "%F%P: failed to create BND PLT section\n"
+msgstr "nu s-a putut calcula(compute) secțiunea nouă APUinfo."
+
+#: elfxx-x86.c:4074
+msgid "%F%P: failed to create PLT .eh_frame section\n"
+msgstr ""
+
+#: elfxx-x86.c:4087
+msgid "%F%P: failed to create GOT PLT .eh_frame section\n"
+msgstr ""
-#: ihex.c:619
+#: elfxx-x86.c:4101
+msgid "%F%P: failed to create the second PLT .eh_frame section\n"
+msgstr ""
+
+#: elfxx-x86.c:4143
+msgid "%X%P: attempted static link of dynamic object `%pB'\n"
+msgstr ""
+
+#: ihex.c:230
+#, fuzzy, c-format
+msgid "%pB:%d: unexpected character `%s' in Intel Hex file"
+msgstr "%s:%d: caracter neașteptat `%s' în fișier Intel Hex\n"
+
+#: ihex.c:338
+#, fuzzy, c-format
+msgid "%pB:%u: bad checksum in Intel Hex file (expected %u, found %u)"
+msgstr "%s:%u: checksum invalid în fișier Intel Hex (se aștepta %u, s-a găsit %u)"
+
+#: ihex.c:393
+#, fuzzy, c-format
+msgid "%pB:%u: bad extended address record length in Intel Hex file"
+msgstr "%s: %u: mărime înregistrare a adresei extinse invalidă în fișier Intel Hex"
+
+#: ihex.c:411
+#, fuzzy, c-format
+msgid "%pB:%u: bad extended start address length in Intel Hex file"
+msgstr "%s: %u: mărime adresă de start extinsă invalidă în fișier Intel Hex"
+
+#: ihex.c:429
+#, fuzzy, c-format
+msgid "%pB:%u: bad extended linear address record length in Intel Hex file"
+msgstr "%s: %u: mărime înregistrare a adresei lineare extinse invalidă în fișier Intel Hex"
+
+#: ihex.c:447
+#, fuzzy, c-format
+msgid "%pB:%u: bad extended linear start address length in Intel Hex file"
+msgstr "%s: %u: mărime adresă lineară de start extinsă invalidă în fișier Intel Hex"
+
+#: ihex.c:465
+#, fuzzy, c-format
+msgid "%pB:%u: unrecognized ihex type %u in Intel Hex file"
+msgstr "%s: %u: tip ihex necunoscut %u în fișier Intel Hex\n"
+
+#: ihex.c:581
+#, fuzzy, c-format
+msgid "%pB: internal error in ihex_read_section"
+msgstr "%s: eroare internă în ihex_read_section"
+
+#: ihex.c:614
+#, fuzzy, c-format
+msgid "%pB: bad section length in ihex_read_section"
+msgstr "%s: mărime secțiune invalidă în ihex_read_section"
+
+#: ihex.c:785
+#, fuzzy, c-format
+msgid "%pB 64-bit address %#<PRIx64> out of range for Intel Hex file"
+msgstr "%s: adresa 0x%s este în afara domeniului(range) pentru fișierul Intel Hex"
+
+#: ihex.c:843
+#, fuzzy, c-format
+msgid "%pB: address %#<PRIx64> out of range for Intel Hex file"
+msgstr "%s: adresa 0x%s este în afara domeniului(range) pentru fișierul Intel Hex"
+
+#: libbfd.c:969
+#, fuzzy, c-format
+msgid "%pB: unable to get decompressed section %pA"
+msgstr "avertisment: nu se poate seta mărimea secțiunii %s în %s"
+
+#: libbfd.c:1133
#, c-format
-msgid "%s: internal error in ihex_read_section"
-msgstr "%s: eroare internã în ihex_read_section"
+msgid "Deprecated %s called at %s line %d in %s\n"
+msgstr "%s învechită apelată la %s linia %d în %s\n"
-#: ihex.c:654
+#: libbfd.c:1136
#, c-format
-msgid "%s: bad section length in ihex_read_section"
-msgstr "%s: mãrime secþiune invalidã în ihex_read_section"
+msgid "Deprecated %s called\n"
+msgstr "%s învechită apelată\n"
-#: ihex.c:872
+#: linker.c:1708
+#, fuzzy, c-format
+msgid "%pB: indirect symbol `%s' to `%s' is a loop"
+msgstr "%s: simbolul indirect `%s' pentru `%s' este o buclă"
+
+#: linker.c:2579
+#, fuzzy, c-format
+msgid "attempt to do relocatable link with %s input and %s output"
+msgstr "Încercare de a crea un link relocabil cu input %s și output %s"
+
+#: linker.c:2863
#, c-format
-msgid "%s: address 0x%s out of range for Intel Hex file"
-msgstr "%s: adresa 0x%s este în afara domeniului(range) pentru fiºierul Intel Hex"
+msgid "%pB: ignoring duplicate section `%pA'\n"
+msgstr ""
-#: libbfd.c:861
+#: linker.c:2873 linker.c:2883
+#, fuzzy, c-format
+msgid "%pB: duplicate section `%pA' has different size\n"
+msgstr "%T: abandonat(discarded) în secțiunea `%s' din %s\n"
+
+#: linker.c:2892 linker.c:2898
+#, fuzzy, c-format
+msgid "%pB: could not read contents of section `%pA'\n"
+msgstr "%s: nu s-a putut găsi secțiunea de output %s"
+
+#: linker.c:2903
+#, fuzzy, c-format
+msgid "%pB: duplicate section `%pA' has different contents\n"
+msgstr "%s: relocări în secțiunea `%s', dar fără conținut"
+
+#: linker.c:3421
+#, fuzzy, c-format
+msgid "%pB: compiled for a big endian system and target is little endian"
+msgstr "%s: compilat pentru un sistem big endiat iar ținta este little endian"
+
+#: linker.c:3424
+#, fuzzy, c-format
+msgid "%pB: compiled for a little endian system and target is big endian"
+msgstr "%s: compilat pentru un sistem little endiat iar ținta este big endian"
+
+#: mach-o-arm.c:169 mach-o-arm.c:301
+msgid "malformed mach-o ARM reloc pair: reloc is first reloc"
+msgstr ""
+
+#: mach-o-arm.c:185
#, c-format
-msgid "Deprecated %s called at %s line %d in %s\n"
-msgstr "%s învechitã apelatã la %s linia %d în %s\n"
+msgid "malformed mach-o ARM reloc pair: invalid length: %d"
+msgstr ""
-#: libbfd.c:864
+#: mach-o-arm.c:200
#, c-format
-msgid "Deprecated %s called\n"
-msgstr "%s învechitã apelatã\n"
+msgid "malformed mach-o ARM sectdiff reloc: invalid length: %d"
+msgstr ""
-#: linker.c:1829
+#: mach-o-arm.c:215
#, c-format
-msgid "%s: indirect symbol `%s' to `%s' is a loop"
-msgstr "%s: simbolul indirect `%s' pentru `%s' este o buclã"
+msgid "malformed mach-o ARM local sectdiff reloc: invalid length: %d"
+msgstr ""
-#: linker.c:2697
+#: mach-o-arm.c:230
#, c-format
-msgid "Attempt to do relocatable link with %s input and %s output"
-msgstr "Încercare de a crea un link relocabil cu input %s ºi output %s"
+msgid "malformed mach-o ARM half sectdiff reloc: invalid length: %d"
+msgstr ""
-#: merge.c:896
+#: mach-o-arm.c:262
#, c-format
-msgid "%s: access beyond end of merged section (%ld + %ld)"
-msgstr "%s: acces dincolo de sfârºitul secþiunii concatenate(merged) (%ld + %ld)"
+msgid "malformed mach-o ARM vanilla reloc: invalid length: %d (pcrel: %d)"
+msgstr ""
-#: mmo.c:503
+#: mach-o-arm.c:332
#, c-format
-msgid "%s: No core to allocate section name %s\n"
-msgstr "%s:Nu existã nucleu(core) pentru a aloca numele de secþiune %s\n"
+msgid "malformed mach-o ARM reloc: unknown reloc type: %d"
+msgstr ""
-#: mmo.c:579
+#: mach-o.c:631
+#, fuzzy, c-format
+msgid "<unknown mask flags>"
+msgstr "<necunoscut>"
+
+#: mach-o.c:686
+#, fuzzy
+msgid " (<unknown>)"
+msgstr "<necunoscut>"
+
+#: mach-o.c:698
#, c-format
-msgid "%s: No core to allocate a symbol %d bytes long\n"
-msgstr "%s: Nu existã nucleu(core) pentru a aloca un simbol lung de %d octeþi\n"
+msgid " MACH-O header:\n"
+msgstr ""
-#: mmo.c:1287
+#: mach-o.c:699
#, c-format
-msgid "%s: invalid mmo file: initialization value for $255 is not `Main'\n"
-msgstr "%s: fiºier mmo invalid: valoare de iniþializare pentru $255 nu este 'Main'\n"
+msgid " magic: %#lx\n"
+msgstr ""
-#: mmo.c:1433
+#: mach-o.c:700
#, c-format
-msgid "%s: unsupported wide character sequence 0x%02X 0x%02X after symbol name starting with `%s'\n"
-msgstr "%s: secvenþã mare(wide) de caractere 0x%02X 0x%02X nesuportatã dupã numele de simbol care începe cu `%s'\n"
+msgid " cputype: %#lx (%s)\n"
+msgstr ""
-#: mmo.c:1674
+#: mach-o.c:702
#, c-format
-msgid "%s: invalid mmo file: unsupported lopcode `%d'\n"
-msgstr "%s: fiºier mmo invalid: lopcode `%d' nesuportat\n"
+msgid " cpusubtype: %#lx%s\n"
+msgstr ""
-#: mmo.c:1684
+#: mach-o.c:704
#, c-format
-msgid "%s: invalid mmo file: expected YZ = 1 got YZ = %d for lop_quote\n"
-msgstr "%s: fiºier mmo invalid: pentru lop_quote se aºtepta YZ = 1 s-a primit YZ= %d\n"
+msgid " filetype: %#lx\n"
+msgstr ""
-#: mmo.c:1720
+#: mach-o.c:705
#, c-format
-msgid "%s: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_loc\n"
-msgstr "%s: fiºier mmo invalid: pentru lop_loc se aºtepta z =1 sau z = 2 s-a primit z = %d\n"
+msgid " ncmds: %#lx\n"
+msgstr ""
-#: mmo.c:1766
+#: mach-o.c:706
#, c-format
-msgid "%s: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_fixo\n"
-msgstr "%s: fiºier mmo invalid: pentru lop_fixo se aºtepta z =1 sau z = 2 s-a primit z = %d\n"
+msgid " sizeocmds: %#lx\n"
+msgstr ""
-#: mmo.c:1805
+#: mach-o.c:707
#, c-format
-msgid "%s: invalid mmo file: expected y = 0, got y = %d for lop_fixrx\n"
-msgstr "%s: fiºier mmo invalid: pentru lop_fixrx se aºtepta y =0 s-a primit y = %d\n"
+msgid " flags: %#lx\n"
+msgstr ""
-#: mmo.c:1814
+#: mach-o.c:708
#, c-format
-msgid "%s: invalid mmo file: expected z = 16 or z = 24, got z = %d for lop_fixrx\n"
-msgstr "%s: fiºier mmo invalid: pentru lop_fixrx se aºtepta z =16 sau z = 24 s-a primit z = %d\n"
+msgid " version: %x\n"
+msgstr ""
-#: mmo.c:1837
+#. Urg - what has happened ?
+#: mach-o.c:743
#, 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: fiºier mmo invalid: pentru lop_fixrx octetul de înceout al operandului word trebuie sã fie 0 sau 1, s-a primit %d\n"
+msgid "incompatible cputypes in mach-o files: %ld vs %ld"
+msgstr ""
-#: mmo.c:1860
+#: mach-o.c:912
+msgid "bfd_mach_o_canonicalize_symtab: unable to load symbols"
+msgstr ""
+
+#: mach-o.c:1504
+msgid "malformed mach-o reloc: section index is greater than the number of sections"
+msgstr ""
+
+#: mach-o.c:2138
+msgid "sorry: modtab, toc and extrefsyms are not yet implemented for dysymtab commands."
+msgstr ""
+
+#: mach-o.c:2586
#, c-format
-msgid "%s: cannot allocate file name for file number %d, %d bytes\n"
-msgstr "%s: nu se poate aloca nume fiºier pentru fiºierul numãrul %d, %d octeþi\n"
+msgid "mach-o: there are too many sections (%u) maximum is 255,\n"
+msgstr ""
-#: mmo.c:1880
+#: mach-o.c:2693
#, c-format
-msgid "%s: invalid mmo file: file number %d `%s', was already entered as `%s'\n"
-msgstr "%s: fiºier mmo invalid: fiºierul numãrul %d `%s' a fost deja introdus ca `%s'\n"
+msgid "unable to allocate data for load command %#x"
+msgstr ""
-#: mmo.c:1893
+#: mach-o.c:2798
#, c-format
-msgid "%s: invalid mmo file: file name for number %d was not specified before use\n"
-msgstr "%s: fiºier mmo invalid: numele de fiºier pentru numãrul %d nu a fost specificat înainte de folosire\n"
+msgid "unable to write unknown load command %#x"
+msgstr ""
-#: mmo.c:1999
+#: mach-o.c:2982
#, c-format
-msgid "%s: invalid mmo file: fields y and z of lop_stab non-zero, y: %d, z: %d\n"
-msgstr "%s: fiºier mmo invalid: câmpurile y ºi z ale lop_stab sunt non-zero: y: %d, z: %d\n"
+msgid "section address (%#<PRIx64>) below start of segment (%#<PRIx64>)"
+msgstr ""
-#: mmo.c:2035
+#: mach-o.c:3124
#, c-format
-msgid "%s: invalid mmo file: lop_end not last item in file\n"
-msgstr "%s: fiºier mmo invalid: lop_end nu este ultimul element în fiºier\n"
+msgid "unable to layout unknown load command %#x"
+msgstr ""
-#: mmo.c:2048
+#: mach-o.c:3659
#, 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: fiºier mmo invalid: YZ al lop_end (%ld) nu este egal cu numerele tetras ale lop_stab precedent (%ld)\n"
+msgid "bfd_mach_o_read_section_32: overlarge alignment value: %#lx"
+msgstr ""
-#: mmo.c:2698
+#: mach-o.c:3702
#, c-format
-msgid "%s: invalid symbol table: duplicate symbol `%s'\n"
-msgstr "%s: tabelã de simboluri invalidã: simbol `%s' duplicat\n"
+msgid "bfd_mach_o_read_section_64: overlarge alignment value: %#lx"
+msgstr ""
-#: mmo.c:2949
+#: mach-o.c:3753
#, c-format
-msgid "%s: Bad symbol definition: `Main' set to %s rather than the start address %s\n"
-msgstr "%s: Definire invalidã de simbol: `Main' setat la %s în loc de adresa de start %s\n"
+msgid "bfd_mach_o_read_symtab_symbol: unable to read %d bytes at %u"
+msgstr ""
-#: mmo.c:3039
+#: mach-o.c:3772
#, 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: avertisment: tabela de simboluri prea mare pentru mmo, mai mare decâd 65535 cuvinte pe 32 de biþi: %d. Doar 'Main' va fi emis.\n"
+msgid "bfd_mach_o_read_symtab_symbol: name out of range (%lu >= %u)"
+msgstr ""
-#: mmo.c:3084
+#: mach-o.c:3855
#, c-format
-msgid "%s: internal error, symbol table changed size from %d to %d words\n"
-msgstr "%s: eroare internã, tabela de simboluri ºi-a schimbat mãrimea din %d în %d cuvinte\n"
+msgid "bfd_mach_o_read_symtab_symbol: symbol \"%s\" specified invalid section %d (max %lu): setting to undefined"
+msgstr ""
-#: mmo.c:3139
+#: mach-o.c:3874
#, c-format
-msgid "%s: internal error, internal register section %s had contents\n"
-msgstr "%s: eroare internã, secþiunea de regiºtri internã %s nu are conþinut\n"
+msgid "bfd_mach_o_read_symtab_symbol: symbol \"%s\" specified invalid type field 0x%x: setting to undefined"
+msgstr ""
+
+#: mach-o.c:5063
+#, fuzzy, c-format
+msgid "%pB: unknown load command %#x"
+msgstr "%s: tip necunoscut de relocare %d"
-#: mmo.c:3191
+#: mach-o.c:5262
#, c-format
-msgid "%s: no initialized registers; section length 0\n"
-msgstr "%s: nu existã regiºtri iniþializaþi; lungime secþiune 0\n"
+msgid "bfd_mach_o_scan: unknown architecture 0x%lx/0x%lx"
+msgstr ""
-#: mmo.c:3197
+#: mach-o.c:5384
#, c-format
-msgid "%s: too many initialized registers; section length %ld\n"
-msgstr "%s: prea mulþi regiºtri iniþializaþi; lungime secþiune %ld\n"
+msgid "unknown header byte-order value %#x"
+msgstr ""
-#: mmo.c:3202
+#: merge.c:895
+#, fuzzy, c-format
+msgid "%pB: access beyond end of merged section (%<PRId64>)"
+msgstr "%s: acces dincolo de sfârșitul secțiunii concatenate(merged) (%ld + %ld)"
+
+#: mmo.c:472
+#, fuzzy, c-format
+msgid "%pB: no core to allocate section name %s"
+msgstr "%s:Nu există nucleu(core) pentru a aloca numele de secțiune %s\n"
+
+#: mmo.c:537
+#, fuzzy, c-format
+msgid "%pB: no core to allocate a symbol %d bytes long"
+msgstr "%s: Nu există nucleu(core) pentru a aloca un simbol lung de %d octeți\n"
+
+#: mmo.c:960
#, c-format
-msgid "%s: invalid start address for initialized registers of length %ld: 0x%lx%08lx\n"
-msgstr "%s: adresã de start invalidã pentru regiºtrii iniþializaþi de lungime %ld: 0x%lx%08lx\n"
+msgid "%pB: attempt to emit contents at non-multiple-of-4 address %#<PRIx64>"
+msgstr ""
+
+#: mmo.c:1256
+#, fuzzy, c-format
+msgid "%pB: invalid mmo file: initialization value for $255 is not `Main'\n"
+msgstr "%s: fișier mmo invalid: valoare de inițializare pentru $255 nu este 'Main'\n"
+
+#: mmo.c:1403
+#, fuzzy, c-format
+msgid "%pB: unsupported wide character sequence 0x%02X 0x%02X after symbol name starting with `%s'\n"
+msgstr "%s: secvență mare(wide) de caractere 0x%02X 0x%02X nesuportată după numele de simbol care începe cu `%s'\n"
-#: oasys.c:1052
+#: mmo.c:1419
#, c-format
-msgid "%s: can not represent section `%s' in oasys"
-msgstr "%s: nu se poate reprezenta secþiune `%s' în oasys"
+msgid "%pB: symbol name exceeds given max length of %d"
+msgstr ""
+
+#: mmo.c:1646
+#, fuzzy, c-format
+msgid "%pB: invalid mmo file: unsupported lopcode `%d'\n"
+msgstr "%s: fișier mmo invalid: lopcode `%d' nesuportat\n"
+
+#: mmo.c:1657
+#, fuzzy, c-format
+msgid "%pB: invalid mmo file: expected YZ = 1 got YZ = %d for lop_quote\n"
+msgstr "%s: fișier mmo invalid: pentru lop_quote se aștepta YZ = 1 s-a primit YZ= %d\n"
+
+#: mmo.c:1701
+#, fuzzy, c-format
+msgid "%pB: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_loc\n"
+msgstr "%s: fișier mmo invalid: pentru lop_loc se aștepta z =1 sau z = 2 s-a primit z = %d\n"
+
+#: mmo.c:1752
+#, fuzzy, c-format
+msgid "%pB: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_fixo\n"
+msgstr "%s: fișier mmo invalid: pentru lop_fixo se aștepta z =1 sau z = 2 s-a primit z = %d\n"
+
+#: mmo.c:1801
+#, fuzzy, c-format
+msgid "%pB: invalid mmo file: expected y = 0, got y = %d for lop_fixrx\n"
+msgstr "%s: fișier mmo invalid: pentru lop_fixrx se aștepta y =0 s-a primit y = %d\n"
+
+#: mmo.c:1812
+#, fuzzy, c-format
+msgid "%pB: invalid mmo file: expected z = 16 or z = 24, got z = %d for lop_fixrx\n"
+msgstr "%s: fișier mmo invalid: pentru lop_fixrx se aștepta z =16 sau z = 24 s-a primit z = %d\n"
-#: osf-core.c:137
+#: mmo.c:1837
+#, fuzzy, c-format
+msgid "%pB: invalid mmo file: leading byte of operand word must be 0 or 1, got %d for lop_fixrx\n"
+msgstr "%s: fișier mmo invalid: pentru lop_fixrx octetul de înceout al operandului word trebuie să fie 0 sau 1, s-a primit %d\n"
+
+#: mmo.c:1866
+#, fuzzy, c-format
+msgid "%pB: cannot allocate file name for file number %d, %d bytes\n"
+msgstr "%s: nu se poate aloca nume fișier pentru fișierul numărul %d, %d octeți\n"
+
+#: mmo.c:1888
+#, fuzzy, c-format
+msgid "%pB: invalid mmo file: file number %d `%s', was already entered as `%s'\n"
+msgstr "%s: fișier mmo invalid: fișierul numărul %d `%s' a fost deja introdus ca `%s'\n"
+
+#: mmo.c:1902
+#, fuzzy, c-format
+msgid "%pB: invalid mmo file: file name for number %d was not specified before use\n"
+msgstr "%s: fișier mmo invalid: numele de fișier pentru numărul %d nu a fost specificat înainte de folosire\n"
+
+#: mmo.c:2014
+#, fuzzy, c-format
+msgid "%pB: invalid mmo file: fields y and z of lop_stab non-zero, y: %d, z: %d\n"
+msgstr "%s: fișier mmo invalid: câmpurile y și z ale lop_stab sunt non-zero: y: %d, z: %d\n"
+
+#: mmo.c:2051
+#, fuzzy, c-format
+msgid "%pB: invalid mmo file: lop_end not last item in file\n"
+msgstr "%s: fișier mmo invalid: lop_end nu este ultimul element în fișier\n"
+
+#: mmo.c:2065
+#, fuzzy, c-format
+msgid "%pB: invalid mmo file: YZ of lop_end (%ld) not equal to the number of tetras to the preceding lop_stab (%ld)\n"
+msgstr "%s: fișier mmo invalid: YZ al lop_end (%ld) nu este egal cu numerele tetras ale lop_stab precedent (%ld)\n"
+
+#: mmo.c:2778
+#, fuzzy, c-format
+msgid "%pB: invalid symbol table: duplicate symbol `%s'\n"
+msgstr "%s: tabelă de simboluri invalidă: simbol `%s' duplicat\n"
+
+#: mmo.c:3022
+#, fuzzy, c-format
+msgid "%pB: bad symbol definition: `Main' set to %s rather than the start address %s\n"
+msgstr "%s: Definire invalidă de simbol: `Main' setat la %s în loc de adresa de start %s\n"
+
+#: mmo.c:3121
+#, fuzzy, c-format
+msgid "%pB: warning: symbol table too large for mmo, larger than 65535 32-bit words: %d. Only `Main' will be emitted.\n"
+msgstr "%s: avertisment: tabela de simboluri prea mare pentru mmo, mai mare decâd 65535 cuvinte pe 32 de biți: %d. Doar 'Main' va fi emis.\n"
+
+#: mmo.c:3167
+#, fuzzy, c-format
+msgid "%pB: internal error, symbol table changed size from %d to %d words\n"
+msgstr "%s: eroare internă, tabela de simboluri și-a schimbat mărimea din %d în %d cuvinte\n"
+
+#: mmo.c:3220
+#, fuzzy, c-format
+msgid "%pB: internal error, internal register section %pA had contents\n"
+msgstr "%s: eroare internă, secțiunea de regiștri internă %s nu are conținut\n"
+
+#: mmo.c:3271
+#, fuzzy, c-format
+msgid "%pB: no initialized registers; section length 0\n"
+msgstr "%s: nu există regiștri inițializați; lungime secțiune 0\n"
+
+#: mmo.c:3278
+#, fuzzy, c-format
+msgid "%pB: too many initialized registers; section length %<PRId64>"
+msgstr "%s: prea mulți regiștri inițializați; lungime secțiune %ld\n"
+
+#: mmo.c:3283
+#, fuzzy, c-format
+msgid "%pB: invalid start address for initialized registers of length %<PRId64>: %#<PRIx64>"
+msgstr "%s: adresă de start invalidă pentru regiștrii inițializați de lungime %ld: 0x%lx%08lx\n"
+
+#: osf-core.c:127
+#, fuzzy, c-format
+msgid "unhandled OSF/1 core file section type %d"
+msgstr "Tip nemanipulabil %d de fișier nucleu(core) OSF/1\n"
+
+#: pdp11.c:1589
+#, c-format
+msgid "%pB: symbol indicates overlay (not supported)"
+msgstr ""
+
+#: pef.c:530
#, c-format
-msgid "Unhandled OSF/1 core file section type %d\n"
-msgstr "Tip nemanipulabil %d de fiºier nucleu(core) OSF/1\n"
+msgid "bfd_pef_scan: unknown architecture 0x%lx"
+msgstr ""
-#: pe-mips.c:659
+#: pei-x86_64.c:177 pei-x86_64.c:191 pei-x86_64.c:220 pei-x86_64.c:243
+#: pei-x86_64.c:253 pei-x86_64.c:278 pei-x86_64.c:290 pei-x86_64.c:304
+#: pei-x86_64.c:322 pei-x86_64.c:334 pei-x86_64.c:346
#, c-format
-msgid "%s: `ld -r' not supported with PE MIPS objects\n"
-msgstr "%s: `ld -r' nu este suportat cu obiecte PE MIPS\n"
+msgid "warning: corrupt unwind data\n"
+msgstr ""
-#. OK, at this point the following variables are set up:
-#. src = VMA of the memory we're fixing up
-#. mem = pointer to memory we're fixing up
-#. val = VMA of what we need to refer to
-#.
-#: pe-mips.c:795
+#. PR 17512: file: 2245-7442-0.004.
+#: pei-x86_64.c:367
+#, fuzzy, c-format
+msgid "Unknown: %x"
+msgstr "*necunoscut*"
+
+#: pei-x86_64.c:418 pei-x86_64.c:428 pei-x86_64.c:437
#, c-format
-msgid "%s: unimplemented %s\n"
-msgstr "%s: %s neimplementat\n"
+msgid "warning: xdata section corrupt\n"
+msgstr ""
-#: pe-mips.c:821
+#: pei-x86_64.c:492
#, c-format
-msgid "%s: jump too far away\n"
-msgstr "%s: salt prea departe(far away)\n"
+msgid "Too many unwind codes (%ld)\n"
+msgstr ""
+
+#: pei-x86_64.c:582
+#, fuzzy, c-format
+msgid "Warning: %s section size (%ld) is not a multiple of %d\n"
+msgstr "Avertisment, mărimea secțiunii .pdata (%ld) nu este multiplu de %d\n"
+
+#: pei-x86_64.c:589
+#, fuzzy, c-format
+msgid "Warning: %s section size is zero\n"
+msgstr "avertisment: secțiunea %s are mărime zero"
+
+#: pei-x86_64.c:604
+#, fuzzy, c-format
+msgid "Warning: %s section size (%ld) is smaller than virtual size (%ld)\n"
+msgstr "Avertisment, mărimea secțiunii .pdata (%ld) nu este multiplu de %d\n"
+
+#: pei-x86_64.c:613
+#, fuzzy, c-format
+msgid ""
+"\n"
+"The Function Table (interpreted %s section contents)\n"
+msgstr ""
+"\n"
+"Tabela de Funcții (interpretare conținut secțiune .pdata)\n"
+
+#: pei-x86_64.c:616
+#, fuzzy, c-format
+msgid "vma:\t\t\tBeginAddress\t EndAddress\t UnwindData\n"
+msgstr " vma:\t\t\tAdresă Început Adresă Sfârșit Info Unwind\n"
-#: pe-mips.c:848
+#: pei-x86_64.c:745
#, c-format
-msgid "%s: bad pair/reflo after refhi\n"
-msgstr "%s: pair/reflo invalid dupã refhi\n"
+msgid ""
+"\n"
+"Dump of %s\n"
+msgstr ""
#. XXX code yet to be written.
-#: peicode.h:787
-#, c-format
-msgid "%s: Unhandled import type; %x"
+#: peicode.h:806
+#, fuzzy, c-format
+msgid "%pB: unhandled import type; %x"
msgstr "%s: Tip import nemanipulabil; %x"
-#: peicode.h:792
-#, c-format
-msgid "%s: Unrecognised import type; %x"
+#: peicode.h:812
+#, fuzzy, c-format
+msgid "%pB: unrecognized import type; %x"
msgstr "%s: Tip import necunoscut; %x"
-#: peicode.h:806
-#, c-format
-msgid "%s: Unrecognised import name type; %x"
+#: peicode.h:827
+#, fuzzy, c-format
+msgid "%pB: unrecognized import name type; %x"
msgstr "%s: Tip nume import necunoscut; %x"
-#: peicode.h:1164
-#, c-format
-msgid "%s: Unrecognised machine type (0x%x) in Import Library Format archive"
-msgstr "%s: Tip maºinã necunoscut (0x%x) în arhiva Import Library Format"
+#: peicode.h:1241
+#, fuzzy, c-format
+msgid "%pB: unrecognised machine type (0x%x) in Import Library Format archive"
+msgstr "%s: Tip mașină necunoscut (0x%x) în arhiva Import Library Format"
-#: peicode.h:1176
-#, c-format
-msgid "%s: Recognised but unhandled machine type (0x%x) in Import Library Format archive"
-msgstr "%s: Tip de maºinã recunoscut dar nemanipulabil (0x%x) în arhiva Import Library Format"
+#: peicode.h:1254
+#, fuzzy, c-format
+msgid "%pB: recognised but unhandled machine type (0x%x) in Import Library Format archive"
+msgstr "%s: Tip de mașină recunoscut dar nemanipulabil (0x%x) în arhiva Import Library Format"
-#: peicode.h:1193
-#, c-format
-msgid "%s: size field is zero in Import Library Format header"
-msgstr "%s: mãrimea câmpului din headerul Import Library Format este zero"
+#: peicode.h:1272
+#, fuzzy, c-format
+msgid "%pB: size field is zero in Import Library Format header"
+msgstr "%s: mărimea câmpului din headerul Import Library Format este zero"
+
+#: peicode.h:1298
+#, fuzzy, c-format
+msgid "%pB: string not null terminated in ILF object file"
+msgstr "%s: șirul nenul terminat în fișier obiect ILF."
-#: peicode.h:1224
+#: peicode.h:1354
#, c-format
-msgid "%s: string not null terminated in ILF object file."
-msgstr "%s: ºirul nenul terminat în fiºier obiect ILF."
+msgid "%pB: error: debug data ends beyond end of debug directory"
+msgstr ""
-#: ppcboot.c:416
+#: plugin.c:246
+msgid "plugin framework: out of file descriptors. Try using fewer objects/archives\n"
+msgstr ""
+
+#: ppcboot.c:392
+#, c-format
msgid ""
"\n"
"ppcboot header:\n"
@@ -2285,549 +6275,2669 @@ msgstr ""
"\n"
"header ppcboot:\n"
-#: ppcboot.c:417
+#: ppcboot.c:393
#, c-format
msgid "Entry offset = 0x%.8lx (%ld)\n"
msgstr "Offset intrare = 0x%.8lx (%ld)\n"
-#: ppcboot.c:418
+#: ppcboot.c:395
#, c-format
msgid "Length = 0x%.8lx (%ld)\n"
msgstr "Lungime = 0x%.8lx (%ld)\n"
-#: ppcboot.c:421
+#: ppcboot.c:399
#, c-format
msgid "Flag field = 0x%.2x\n"
-msgstr "Câmp Marcaj(Flag) = 0x%.2x\n"
+msgstr "Câmp Marcaj(Flag) = 0x%.2x\n"
-#: ppcboot.c:427
+#: ppcboot.c:405
#, c-format
msgid "Partition name = \"%s\"\n"
-msgstr "Nume Partiþie = \"%s\"\n"
+msgstr "Nume Partiție = \"%s\"\n"
-#: ppcboot.c:446
+#: ppcboot.c:425
#, c-format
msgid ""
"\n"
"Partition[%d] start = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n"
msgstr ""
"\n"
-"Start Partiþie[%d] = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n"
+"Start Partiție[%d] = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n"
-#: ppcboot.c:452
+#: ppcboot.c:432
#, c-format
msgid "Partition[%d] end = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n"
-msgstr "Sfârºit Partiþie[%d] = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n"
+msgstr "Sfârșit Partiție[%d] = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n"
-#: ppcboot.c:458
+#: ppcboot.c:439
#, c-format
msgid "Partition[%d] sector = 0x%.8lx (%ld)\n"
-msgstr "Sector Partiþie[%d] sector = 0x%.8lx (%ld)\n"
+msgstr "Sector Partiție[%d] sector = 0x%.8lx (%ld)\n"
-#: ppcboot.c:459
+#: ppcboot.c:443
#, c-format
msgid "Partition[%d] length = 0x%.8lx (%ld)\n"
-msgstr "Mãrime Partiþie[%d] = 0x%.8lx (%ld)\n"
+msgstr "Mărime Partiție[%d] = 0x%.8lx (%ld)\n"
-#: som.c:5422
-msgid "som_sizeof_headers unimplemented"
-msgstr "som_sizeof_headers neimplementatã"
+#: reloc.c:8420
+msgid "INPUT_SECTION_FLAGS are not supported"
+msgstr ""
+
+#: reloc.c:8680
+#, fuzzy, c-format
+msgid "%pB: unrecognized relocation type %#x in section `%pA'"
+msgstr "%s: tip de relocare neașteptat %u în secțiune .opd"
-#: srec.c:302
+#. PR 21803: Suggest the most likely cause of this error.
+#: reloc.c:8684
#, c-format
-msgid "%s:%d: Unexpected character `%s' in S-record file\n"
-msgstr "%s:%d: Caracter neaºteptat `%s'în fiºier S-record\n"
+msgid "is this version of the linker - %s - out of date ?"
+msgstr ""
-#: stabs.c:319
+#: rs6000-core.c:470
#, c-format
-msgid "%s(%s+0x%lx): Stabs entry has invalid string index."
-msgstr "%s(%s+0x%lx): Intrarea bruscã(stab) are index ºir invalid."
+msgid "%pB: warning core file truncated"
+msgstr ""
-#: syms.c:1019
-msgid "Unsupported .stab relocation"
-msgstr "Relocare .stab nesuportatã"
+#. User has specified a subspace without its containing space.
+#: som.c:5476
+#, c-format
+msgid "%pB[%pA]: no output section for space %pA"
+msgstr ""
-#: vms-gsd.c:356
+#: som.c:5522
#, c-format
-msgid "bfd_make_section (%s) failed"
-msgstr "bfd_make_section (%s) eºuatã"
+msgid ""
+"\n"
+"Exec Auxiliary Header\n"
+msgstr ""
+
+#: som.c:5831
+msgid "som_sizeof_headers unimplemented"
+msgstr "som_sizeof_headers neimplementată"
+
+#: srec.c:260
+#, fuzzy, c-format
+msgid "%pB:%d: unexpected character `%s' in S-record file"
+msgstr "%s:%d: Caracter neașteptat `%s'în fișier S-record\n"
-#: vms-gsd.c:371
+#: srec.c:488
#, c-format
-msgid "bfd_set_section_flags (%s, %x) failed"
-msgstr "bfd_set_section_flags (%s, %x) eºuatã"
+msgid "%pB:%d: byte count %d too small"
+msgstr ""
+
+#: srec.c:580 srec.c:614
+#, fuzzy, c-format
+msgid "%pB:%d: bad checksum in S-record file"
+msgstr "%s:%d: Caracter neașteptat `%s'în fișier S-record\n"
+
+#: stabs.c:279
+#, fuzzy, c-format
+msgid "%pB(%pA+%#lx): stabs entry has invalid string index"
+msgstr "%s(%s+0x%lx): Intrarea bruscă(stab) are index șir invalid."
+
+#: syms.c:1092
+#, fuzzy
+msgid "unsupported .stab relocation"
+msgstr "Relocare .stab nesuportată"
+
+#: vms-alpha.c:478
+msgid "corrupt EIHD record - size is too small"
+msgstr ""
+
+#: vms-alpha.c:664
+#, fuzzy, c-format
+msgid "unable to read EIHS record at offset %#x"
+msgstr "nu se poate citi în secțiunea %s din %s"
+
+#: vms-alpha.c:1156
+msgid "record is too small for symbol name length"
+msgstr ""
-#: vms-gsd.c:407
+#: vms-alpha.c:1189
#, c-format
-msgid "Size mismatch section %s=%lx, %s=%lx"
-msgstr "Mãrime nepotrivitã secþiune %s=%lx, %s=%lx"
+msgid "corrupt EGSD record: its size (%#x) is too small"
+msgstr ""
-#: vms-gsd.c:704
+#: vms-alpha.c:1213
#, c-format
-msgid "unknown gsd/egsd subtype %d"
-msgstr "subtip %d gsd/egsd necunoscut"
+msgid "corrupt EGSD record type %d: size (%#x) is larger than remaining space (%#x)"
+msgstr ""
-#: vms-hdr.c:408
-msgid "Object module NOT error-free !\n"
-msgstr "Modul obiect CU erori !\n"
+#: vms-alpha.c:1223
+#, c-format
+msgid "corrupt EGSD record type %d: size (%#x) is too small"
+msgstr ""
-#: vms-misc.c:541
+#: vms-alpha.c:1365
#, c-format
-msgid "Stack overflow (%d) in _bfd_vms_push"
-msgstr "Depãºire(overflow) de stivã(%d) în bfd_vms_push"
+msgid "corrupt EGSD record: its psindx field is too big (%#lx)"
+msgstr ""
-#: vms-misc.c:559
-msgid "Stack underflow in _bfd_vms_pop"
-msgstr "Subfolosire(underflow) a stivei _bfd_vms_pop"
+#: vms-alpha.c:1440
+#, fuzzy, c-format
+msgid "unknown EGSD subtype %d"
+msgstr "subtip %d gsd/egsd necunoscut"
-#: vms-misc.c:918
-msgid "_bfd_vms_output_counted called with zero bytes"
-msgstr "_bfd_vms_output_counted apelat cu zero octeþi"
+#: vms-alpha.c:1473
+#, fuzzy, c-format
+msgid "stack overflow (%d) in _bfd_vms_push"
+msgstr "Depășire(overflow) de stivă(%d) în bfd_vms_push"
-#: vms-misc.c:923
-msgid "_bfd_vms_output_counted called with too many bytes"
-msgstr "_bfd_vms_output_counted apelat cu prea mulþi octeþi"
+#: vms-alpha.c:1487
+#, fuzzy
+msgid "stack underflow in _bfd_vms_pop"
+msgstr "Subfolosire(underflow) a stivei _bfd_vms_pop"
-#: vms-misc.c:1054
+#: vms-alpha.c:1561
#, c-format
-msgid "Symbol %s replaced by %s\n"
-msgstr "Simbolul %s înlocuit de %s\n"
+msgid "dst_define_location %u too large"
+msgstr ""
-#: vms-misc.c:1117
+#. These names have not yet been added to this switch statement.
+#: vms-alpha.c:1762
#, c-format
-msgid "failed to enter %s"
-msgstr "Eºec în introducerea %s"
+msgid "unknown ETIR command %d"
+msgstr ""
-#: vms-tir.c:102
-msgid "No Mem !"
-msgstr "Nu mai existã Mem !"
+#: vms-alpha.c:1793
+msgid "corrupt vms value"
+msgstr ""
-#: vms-tir.c:383
+#: vms-alpha.c:1924
+msgid "corrupt ETIR record encountered"
+msgstr ""
+
+#: vms-alpha.c:1986
#, c-format
msgid "bad section index in %s"
-msgstr "index de secþiune invalid în %s"
+msgstr "index de secțiune invalid în %s"
-#: vms-tir.c:396
+#: vms-alpha.c:2000
#, c-format
msgid "unsupported STA cmd %s"
-msgstr "cmd STA %s nesuportatã"
-
-#: vms-tir.c:401 vms-tir.c:1261
-#, c-format
-msgid "reserved STA cmd %d"
-msgstr "cmd STA %d rezervatã"
+msgstr "cmd STA %s nesuportată"
-#: vms-tir.c:512 vms-tir.c:535
-#, c-format
-msgid "%s: no symbol \"%s\""
-msgstr "%s: nu existã simbolul \"%s\""
-
-#. unsigned shift
-#. rotate
+#. Insert field.
+#. 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:2208 vms-alpha.c:2239 vms-alpha.c:2334 vms-alpha.c:2554
#, c-format
msgid "%s: not supported"
msgstr "%s: nesuportat"
-#: vms-tir.c:607 vms-tir.c:1439
+#: vms-alpha.c:2214
#, c-format
msgid "%s: not implemented"
msgstr "%s: neimplementat"
-#: vms-tir.c:611 vms-tir.c:1443
+#: vms-alpha.c:2379 vms-alpha.c:2394
#, c-format
-msgid "reserved STO cmd %d"
-msgstr "cmd STO %d rezervatã"
+msgid "invalid %s"
+msgstr ""
-#: vms-tir.c:729 vms-tir.c:1589
+#. Divide by zero is supposed to give a result of zero,
+#. and a non-fatal warning message.
+#: vms-alpha.c:2454
#, c-format
-msgid "reserved OPR cmd %d"
-msgstr "cmd OPR %d rezervatã"
+msgid "%s divide by zero"
+msgstr ""
-#: vms-tir.c:797 vms-tir.c:1653
+#: vms-alpha.c:2520
#, c-format
-msgid "reserved CTL cmd %d"
-msgstr "cmd CTL %d rezervatã"
+msgid "invalid use of %s with contexts"
+msgstr ""
-#. stack byte from image
-#. arg: none.
-#: vms-tir.c:1169
-msgid "stack-from-image not implemented"
-msgstr "stack-from-image neimplementatã"
+#: vms-alpha.c:2578
+#, fuzzy, c-format
+msgid "reserved cmd %d"
+msgstr "cmd STA %d rezervată"
-#: vms-tir.c:1187
-msgid "stack-entry-mask not fully implemented"
-msgstr "stack-entry-mask neimplementatã complet"
+#: vms-alpha.c:2662
+msgid "corrupt EEOM record - size is too small"
+msgstr ""
-#. 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 neimplementatã complet"
+#: vms-alpha.c:2671
+#, fuzzy
+msgid "object module not error-free !"
+msgstr "Modul obiect CU erori !\n"
+
+#: vms-alpha.c:3999
+#, fuzzy, c-format
+msgid "SEC_RELOC with no relocs in section %pA"
+msgstr "SEC_RELOC fără relocări în secțiunea %s"
-#: vms-tir.c:1220
-msgid "stack-local-symbol not fully implemented"
-msgstr "stack-local-symbol neimplementatã complet"
+#: vms-alpha.c:4051 vms-alpha.c:4266
+#, fuzzy, c-format
+msgid "size error in section %pA"
+msgstr "%s: eroare internă în ihex_read_section"
-#: vms-tir.c:1233
-msgid "stack-literal not fully implemented"
-msgstr "stack-literal neimplementatã complet"
+#: vms-alpha.c:4211
+msgid "spurious ALPHA_R_BSR reloc"
+msgstr ""
-#: vms-tir.c:1254
-msgid "stack-local-symbol-entry-point-mask not fully implemented"
-msgstr "stack-local-symbol-entry-point-mask neimplementatã complet"
+#: vms-alpha.c:4252
+#, fuzzy, c-format
+msgid "unhandled relocation %s"
+msgstr "Relocare nemanipulabilă %s"
-#: 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:4549
#, c-format
-msgid "%s: not fully implemented"
-msgstr "%s: neimplementatã complet"
+msgid "unknown source command %d"
+msgstr ""
+
+#: vms-alpha.c:4610 vms-alpha.c:4616 vms-alpha.c:4622 vms-alpha.c:4628
+#: vms-alpha.c:4634 vms-alpha.c:4661 vms-alpha.c:4667 vms-alpha.c:4673
+#: vms-alpha.c:4679
+#, fuzzy, c-format
+msgid "%s not implemented"
+msgstr "%s: neimplementat"
-#: vms-tir.c:1705
+#: vms-alpha.c:4722
#, c-format
-msgid "obj code %d not found"
-msgstr "codul abj %d nu a fost gãsit"
+msgid "unknown line command %d"
+msgstr ""
+
+#: vms-alpha.c:5183 vms-alpha.c:5201 vms-alpha.c:5216 vms-alpha.c:5232
+#: vms-alpha.c:5245 vms-alpha.c:5257 vms-alpha.c:5270
+#, fuzzy, c-format
+msgid "unknown reloc %s + %s"
+msgstr "%s: tip necunoscut de relocare %d"
-#: vms-tir.c:2043
+#: vms-alpha.c:5325
+#, fuzzy, c-format
+msgid "unknown reloc %s"
+msgstr "se ignoră reloc %s\n"
+
+#: vms-alpha.c:5339
+#, fuzzy
+msgid "invalid section index in ETIR"
+msgstr "index de secțiune invalid în %s"
+
+#: vms-alpha.c:5348
+msgid "relocation for non-REL psect"
+msgstr ""
+
+#: vms-alpha.c:5397
#, c-format
-msgid "SEC_RELOC with no relocs in section %s"
-msgstr "SEC_RELOC fãrã relocãri în secþiunea %s"
+msgid "unknown symbol in command %s"
+msgstr ""
-#: vms-tir.c:2331
+#: vms-alpha.c:5811
#, c-format
-msgid "Unhandled relocation %s"
-msgstr "Relocare nemanipulabilã %s"
+msgid "reloc (%d) is *UNKNOWN*"
+msgstr ""
-#: xcofflink.c:1244
+#: vms-alpha.c:5927
#, c-format
-msgid "%s: `%s' has line numbers but no enclosing section"
-msgstr "%s: `%s' are numere de linii dar nici o secþiune de închidere"
+msgid " EMH %u (len=%u): "
+msgstr ""
-#: xcofflink.c:1297
+#: vms-alpha.c:5932
#, c-format
-msgid "%s: class %d symbol `%s' has no aux entries"
-msgstr "%s: clasa %d simbolul `%s' nu are intrãri aux"
+msgid " Error: The length is less than the length of an EMH record\n"
+msgstr ""
-#: xcofflink.c:1320
+#: vms-alpha.c:5949
#, c-format
-msgid "%s: symbol `%s' has unrecognized csect type %d"
-msgstr "%s: simbolul `%s' are tip necunoscut csect %d"
+msgid " Error: The record length is less than the size of an EMH_MHD record\n"
+msgstr ""
-#: xcofflink.c:1332
+#: vms-alpha.c:5952
#, c-format
-msgid "%s: bad XTY_ER symbol `%s': class %d scnum %d scnlen %d"
-msgstr "%s: simbol XTY_ER invalid `%s': clasa %d scnum %d scnlen %d"
+msgid "Module header\n"
+msgstr ""
-#: xcofflink.c:1368
+#: vms-alpha.c:5953
#, c-format
-msgid "%s: XMC_TC0 symbol `%s' is class %d scnlen %d"
-msgstr "%s: simblul XMC_TC0 `%s' este clasa %d scnlen %d"
+msgid " structure level: %u\n"
+msgstr ""
+
+#: vms-alpha.c:5954
+#, c-format
+msgid " max record size: %u\n"
+msgstr ""
+
+#: vms-alpha.c:5960
+#, c-format
+msgid " Error: The module name is missing\n"
+msgstr ""
+
+#: vms-alpha.c:5966
+#, c-format
+msgid " Error: The module name is too long\n"
+msgstr ""
+
+#: vms-alpha.c:5969
+#, c-format
+msgid " module name : %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:5973
+#, c-format
+msgid " Error: The module version is missing\n"
+msgstr ""
-#: xcofflink.c:1520
+#: vms-alpha.c:5979
#, c-format
-msgid "%s: csect `%s' not in enclosing section"
-msgstr "%s: csect `%s' nu este în secþiunea de închidere"
+msgid " Error: The module version is too long\n"
+msgstr ""
-#: xcofflink.c:1627
+#: vms-alpha.c:5982
+#, fuzzy, c-format
+msgid " module version : %.*s\n"
+msgstr "%s:versiune %s nedefinită"
+
+#: vms-alpha.c:5985
#, c-format
-msgid "%s: misplaced XTY_LD `%s'"
-msgstr "%s:XTY_LD `%s' rãtãcit"
+msgid " Error: The compile date is truncated\n"
+msgstr ""
-#: xcofflink.c:1958
+#: vms-alpha.c:5987
#, c-format
-msgid "%s: reloc %s:%d not in csect"
-msgstr "%s: relocarea %s:%d nu este în csect"
+msgid " compile date : %.17s\n"
+msgstr ""
-#: xcofflink.c:2095
+#: vms-alpha.c:5992
#, c-format
-msgid "%s: XCOFF shared object when not producing XCOFF output"
-msgstr "%s: XCOFF shared object neproducând output XCOFF"
+msgid "Language Processor Name\n"
+msgstr ""
-#: xcofflink.c:2116
+#: vms-alpha.c:5993
#, c-format
-msgid "%s: dynamic object with no .loader section"
-msgstr "%s: obiect dinamic fãrã secþiune .loader"
+msgid " language name: %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:5997
+#, c-format
+msgid "Source Files Header\n"
+msgstr ""
+
+#: vms-alpha.c:5998
+#, c-format
+msgid " file: %.*s\n"
+msgstr ""
-#: xcofflink.c:2761
+#: vms-alpha.c:6002
+#, c-format
+msgid "Title Text Header\n"
+msgstr ""
+
+#: vms-alpha.c:6003
+#, c-format
+msgid " title: %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:6007
+#, c-format
+msgid "Copyright Header\n"
+msgstr ""
+
+#: vms-alpha.c:6008
+#, c-format
+msgid " copyright: %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:6012
+#, fuzzy, c-format
+msgid "unhandled emh subtype %u\n"
+msgstr "%s: Tip import nemanipulabil; %x"
+
+#: vms-alpha.c:6022
+#, c-format
+msgid " EEOM (len=%u):\n"
+msgstr ""
+
+#: vms-alpha.c:6027
+#, c-format
+msgid " Error: The length is less than the length of an EEOM record\n"
+msgstr ""
+
+#: vms-alpha.c:6031
+#, c-format
+msgid " number of cond linkage pairs: %u\n"
+msgstr ""
+
+#: vms-alpha.c:6033
+#, c-format
+msgid " completion code: %u\n"
+msgstr ""
+
+#: vms-alpha.c:6037
+#, c-format
+msgid " transfer addr flags: 0x%02x\n"
+msgstr ""
+
+#: vms-alpha.c:6038
+#, c-format
+msgid " transfer addr psect: %u\n"
+msgstr ""
+
+#: vms-alpha.c:6040
+#, c-format
+msgid " transfer address : 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:6049
+msgid " WEAK"
+msgstr ""
+
+#: vms-alpha.c:6051
+msgid " DEF"
+msgstr ""
+
+#: vms-alpha.c:6053
+msgid " UNI"
+msgstr ""
+
+#: vms-alpha.c:6055 vms-alpha.c:6076
+msgid " REL"
+msgstr ""
+
+#: vms-alpha.c:6057
+msgid " COMM"
+msgstr ""
+
+#: vms-alpha.c:6059
+msgid " VECEP"
+msgstr ""
+
+#: vms-alpha.c:6061
+msgid " NORM"
+msgstr ""
+
+#: vms-alpha.c:6063
+msgid " QVAL"
+msgstr ""
+
+#: vms-alpha.c:6070
+msgid " PIC"
+msgstr ""
+
+#: vms-alpha.c:6072
+msgid " LIB"
+msgstr ""
+
+#: vms-alpha.c:6074
+msgid " OVR"
+msgstr ""
+
+#: vms-alpha.c:6078
+msgid " GBL"
+msgstr ""
+
+#: vms-alpha.c:6080
+msgid " SHR"
+msgstr ""
+
+#: vms-alpha.c:6082
+msgid " EXE"
+msgstr ""
+
+#: vms-alpha.c:6084
+msgid " RD"
+msgstr ""
+
+#: vms-alpha.c:6086
+msgid " WRT"
+msgstr ""
+
+#: vms-alpha.c:6088
+msgid " VEC"
+msgstr ""
+
+#: vms-alpha.c:6090
+msgid " NOMOD"
+msgstr ""
+
+#: vms-alpha.c:6092
+msgid " COM"
+msgstr ""
+
+#: vms-alpha.c:6094
+msgid " 64B"
+msgstr ""
+
+#: vms-alpha.c:6103
+#, c-format
+msgid " EGSD (len=%u):\n"
+msgstr ""
+
+#: vms-alpha.c:6118
+#, c-format
+msgid " EGSD entry %2u (type: %u, len: %u): "
+msgstr ""
+
+#: vms-alpha.c:6124 vms-alpha.c:6419
+#, c-format
+msgid " Erroneous length\n"
+msgstr ""
+
+#: vms-alpha.c:6137
+#, fuzzy, c-format
+msgid "PSC - Program section definition\n"
+msgstr ""
+"\n"
+"Definiții de versiune:\n"
+
+#: vms-alpha.c:6138 vms-alpha.c:6158
+#, c-format
+msgid " alignment : 2**%u\n"
+msgstr ""
+
+#: vms-alpha.c:6139 vms-alpha.c:6159
+#, c-format
+msgid " flags : 0x%04x"
+msgstr ""
+
+#: vms-alpha.c:6143
+#, c-format
+msgid " alloc (len): %u (0x%08x)\n"
+msgstr ""
+
+#: vms-alpha.c:6145 vms-alpha.c:6211 vms-alpha.c:6279
+#, fuzzy, c-format
+msgid " name : %.*s\n"
+msgstr "Nume Partiție = \"%s\"\n"
+
+#: vms-alpha.c:6157
+#, c-format
+msgid "SPSC - Shared Image Program section def\n"
+msgstr ""
+
+#: vms-alpha.c:6163
+#, c-format
+msgid " alloc (len) : %u (0x%08x)\n"
+msgstr ""
+
+#: vms-alpha.c:6164
+#, c-format
+msgid " image offset : 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:6166
+#, c-format
+msgid " symvec offset : 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:6169
+#, fuzzy, c-format
+msgid " name : %.*s\n"
+msgstr "Câmp Marcaj(Flag) = 0x%.2x\n"
+
+#: vms-alpha.c:6185
+#, c-format
+msgid "SYM - Global symbol definition\n"
+msgstr ""
+
+#: vms-alpha.c:6186 vms-alpha.c:6267 vms-alpha.c:6291 vms-alpha.c:6314
+#, c-format
+msgid " flags: 0x%04x"
+msgstr ""
+
+#: vms-alpha.c:6189
+#, c-format
+msgid " psect offset: 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:6193
+#, c-format
+msgid " code address: 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:6195
+#, c-format
+msgid " psect index for entry point : %u\n"
+msgstr ""
+
+#: vms-alpha.c:6198 vms-alpha.c:6298 vms-alpha.c:6321
+#, fuzzy, c-format
+msgid " psect index : %u\n"
+msgstr "index de secțiune invalid în %s"
+
+#: vms-alpha.c:6201 vms-alpha.c:6301 vms-alpha.c:6324
+#, fuzzy, c-format
+msgid " name : %.*s\n"
+msgstr "Nume Partiție = \"%s\"\n"
+
+#: vms-alpha.c:6209
+#, c-format
+msgid "SYM - Global symbol reference\n"
+msgstr ""
+
+#: vms-alpha.c:6224
+#, c-format
+msgid "IDC - Ident Consistency check\n"
+msgstr ""
+
+#: vms-alpha.c:6225
+#, fuzzy, c-format
+msgid " flags : 0x%08x"
+msgstr "Câmp Marcaj(Flag) = 0x%.2x\n"
+
+#: vms-alpha.c:6229
+#, c-format
+msgid " id match : %x\n"
+msgstr ""
+
+#: vms-alpha.c:6231
+#, c-format
+msgid " error severity: %x\n"
+msgstr ""
+
+#: vms-alpha.c:6235
+#, c-format
+msgid " entity name : %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:6241
+#, c-format
+msgid " object name : %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:6250
+#, c-format
+msgid " binary ident : 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:6254
+#, c-format
+msgid " ascii ident : %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:6266
+#, c-format
+msgid "SYMG - Universal symbol definition\n"
+msgstr ""
+
+#: vms-alpha.c:6270
+#, c-format
+msgid " symbol vector offset: 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:6272
+#, fuzzy, c-format
+msgid " entry point: 0x%08x\n"
+msgstr " [are punct de intrare]"
+
+#: vms-alpha.c:6274
+#, c-format
+msgid " proc descr : 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:6276
+#, fuzzy, c-format
+msgid " psect index: %u\n"
+msgstr "index de secțiune invalid în %s"
+
+#: vms-alpha.c:6290
+#, fuzzy, c-format
+msgid "SYMV - Vectored symbol definition\n"
+msgstr ""
+"\n"
+"Definiții de versiune:\n"
+
+#: vms-alpha.c:6294
+#, c-format
+msgid " vector : 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:6296 vms-alpha.c:6319
+#, c-format
+msgid " psect offset: %u\n"
+msgstr ""
+
+#: vms-alpha.c:6313
+#, c-format
+msgid "SYMM - Global symbol definition with version\n"
+msgstr ""
+
+#: vms-alpha.c:6317
+#, c-format
+msgid " version mask: 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:6330
+#, c-format
+msgid "unhandled egsd entry type %u\n"
+msgstr ""
+
+#: vms-alpha.c:6369
+#, c-format
+msgid " linkage index: %u, replacement insn: 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:6373
+#, c-format
+msgid " psect idx 1: %u, offset 1: 0x%08x %08x\n"
+msgstr ""
+
+#: vms-alpha.c:6378
+#, c-format
+msgid " psect idx 2: %u, offset 2: 0x%08x %08x\n"
+msgstr ""
+
+#: vms-alpha.c:6384
+#, c-format
+msgid " psect idx 3: %u, offset 3: 0x%08x %08x\n"
+msgstr ""
+
+#: vms-alpha.c:6389
+#, c-format
+msgid " global name: %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:6401
+#, c-format
+msgid " %s (len=%u):\n"
+msgstr ""
+
+#: vms-alpha.c:6424
+#, c-format
+msgid " (type: %3u, size: %3u): "
+msgstr ""
+
+#: vms-alpha.c:6430
+#, c-format
+msgid "STA_GBL (stack global) %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:6434
+#, c-format
+msgid "STA_LW (stack longword)"
+msgstr ""
+
+#: vms-alpha.c:6440
+#, c-format
+msgid "STA_QW (stack quadword)"
+msgstr ""
+
+#: vms-alpha.c:6447
+#, c-format
+msgid "STA_PQ (stack psect base + offset)\n"
+msgstr ""
+
+#: vms-alpha.c:6450
+#, c-format
+msgid " psect: %u, offset: 0x%08x %08x\n"
+msgstr ""
+
+#: vms-alpha.c:6456
+#, c-format
+msgid "STA_LI (stack literal)\n"
+msgstr ""
+
+#: vms-alpha.c:6459
+#, c-format
+msgid "STA_MOD (stack module)\n"
+msgstr ""
+
+#: vms-alpha.c:6462
+#, c-format
+msgid "STA_CKARG (compare procedure argument)\n"
+msgstr ""
+
+#: vms-alpha.c:6466
+#, c-format
+msgid "STO_B (store byte)\n"
+msgstr ""
+
+#: vms-alpha.c:6469
+#, c-format
+msgid "STO_W (store word)\n"
+msgstr ""
+
+#: vms-alpha.c:6472
+#, c-format
+msgid "STO_LW (store longword)\n"
+msgstr ""
+
+#: vms-alpha.c:6475
+#, c-format
+msgid "STO_QW (store quadword)\n"
+msgstr ""
+
+#: vms-alpha.c:6482
+#, c-format
+msgid "STO_IMMR (store immediate repeat) %u bytes\n"
+msgstr ""
+
+#: vms-alpha.c:6491
+#, c-format
+msgid "STO_GBL (store global) %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:6496
+#, c-format
+msgid "STO_CA (store code address) %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:6500
+#, c-format
+msgid "STO_RB (store relative branch)\n"
+msgstr ""
+
+#: vms-alpha.c:6503
+#, c-format
+msgid "STO_AB (store absolute branch)\n"
+msgstr ""
+
+#: vms-alpha.c:6506
+#, c-format
+msgid "STO_OFF (store offset to psect)\n"
+msgstr ""
+
+#: vms-alpha.c:6513
+#, c-format
+msgid "STO_IMM (store immediate) %u bytes\n"
+msgstr ""
+
+#: vms-alpha.c:6522
+#, c-format
+msgid "STO_GBL_LW (store global longword) %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:6526
+#, c-format
+msgid "STO_OFF (store LP with procedure signature)\n"
+msgstr ""
+
+#: vms-alpha.c:6529
+#, c-format
+msgid "STO_BR_GBL (store branch global) *todo*\n"
+msgstr ""
+
+#: vms-alpha.c:6532
+#, c-format
+msgid "STO_BR_PS (store branch psect + offset) *todo*\n"
+msgstr ""
+
+#: vms-alpha.c:6536
+#, c-format
+msgid "OPR_NOP (no-operation)\n"
+msgstr ""
+
+#: vms-alpha.c:6539
+#, c-format
+msgid "OPR_ADD (add)\n"
+msgstr ""
+
+#: vms-alpha.c:6542
+#, c-format
+msgid "OPR_SUB (subtract)\n"
+msgstr ""
+
+#: vms-alpha.c:6545
+#, c-format
+msgid "OPR_MUL (multiply)\n"
+msgstr ""
+
+#: vms-alpha.c:6548
+#, c-format
+msgid "OPR_DIV (divide)\n"
+msgstr ""
+
+#: vms-alpha.c:6551
+#, c-format
+msgid "OPR_AND (logical and)\n"
+msgstr ""
+
+#: vms-alpha.c:6554
+#, c-format
+msgid "OPR_IOR (logical inclusive or)\n"
+msgstr ""
+
+#: vms-alpha.c:6557
+#, c-format
+msgid "OPR_EOR (logical exclusive or)\n"
+msgstr ""
+
+#: vms-alpha.c:6560
+#, c-format
+msgid "OPR_NEG (negate)\n"
+msgstr ""
+
+#: vms-alpha.c:6563
+#, c-format
+msgid "OPR_COM (complement)\n"
+msgstr ""
+
+#: vms-alpha.c:6566
+#, c-format
+msgid "OPR_INSV (insert field)\n"
+msgstr ""
+
+#: vms-alpha.c:6569
+#, c-format
+msgid "OPR_ASH (arithmetic shift)\n"
+msgstr ""
+
+#: vms-alpha.c:6572
+#, c-format
+msgid "OPR_USH (unsigned shift)\n"
+msgstr ""
+
+#: vms-alpha.c:6575
+#, c-format
+msgid "OPR_ROT (rotate)\n"
+msgstr ""
+
+#: vms-alpha.c:6578
+#, c-format
+msgid "OPR_SEL (select)\n"
+msgstr ""
+
+#: vms-alpha.c:6581
+#, c-format
+msgid "OPR_REDEF (redefine symbol to curr location)\n"
+msgstr ""
+
+#: vms-alpha.c:6584
+#, c-format
+msgid "OPR_REDEF (define a literal)\n"
+msgstr ""
+
+#: vms-alpha.c:6588
+#, c-format
+msgid "STC_LP (store cond linkage pair)\n"
+msgstr ""
+
+#: vms-alpha.c:6592
+#, c-format
+msgid "STC_LP_PSB (store cond linkage pair + signature)\n"
+msgstr ""
+
+#: vms-alpha.c:6596
+#, c-format
+msgid " linkage index: %u, procedure: %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:6603
+#, c-format
+msgid " signature: %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:6609
+#, c-format
+msgid "STC_GBL (store cond global)\n"
+msgstr ""
+
+#: vms-alpha.c:6612
+#, c-format
+msgid " linkage index: %u, global: %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:6617
+#, c-format
+msgid "STC_GCA (store cond code address)\n"
+msgstr ""
+
+#: vms-alpha.c:6620
+#, c-format
+msgid " linkage index: %u, procedure name: %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:6625
+#, c-format
+msgid "STC_PS (store cond psect + offset)\n"
+msgstr ""
+
+#: vms-alpha.c:6629
+#, c-format
+msgid " linkage index: %u, psect: %u, offset: 0x%08x %08x\n"
+msgstr ""
+
+#: vms-alpha.c:6636
+#, c-format
+msgid "STC_NOP_GBL (store cond NOP at global addr)\n"
+msgstr ""
+
+#: vms-alpha.c:6640
+#, c-format
+msgid "STC_NOP_PS (store cond NOP at psect + offset)\n"
+msgstr ""
+
+#: vms-alpha.c:6644
+#, c-format
+msgid "STC_BSR_GBL (store cond BSR at global addr)\n"
+msgstr ""
+
+#: vms-alpha.c:6648
+#, c-format
+msgid "STC_BSR_PS (store cond BSR at psect + offset)\n"
+msgstr ""
+
+#: vms-alpha.c:6652
+#, c-format
+msgid "STC_LDA_GBL (store cond LDA at global addr)\n"
+msgstr ""
+
+#: vms-alpha.c:6656
+#, c-format
+msgid "STC_LDA_PS (store cond LDA at psect + offset)\n"
+msgstr ""
+
+#: vms-alpha.c:6660
+#, c-format
+msgid "STC_BOH_GBL (store cond BOH at global addr)\n"
+msgstr ""
+
+#: vms-alpha.c:6664
+#, c-format
+msgid "STC_BOH_PS (store cond BOH at psect + offset)\n"
+msgstr ""
+
+#: vms-alpha.c:6669
+#, c-format
+msgid "STC_NBH_GBL (store cond or hint at global addr)\n"
+msgstr ""
+
+#: vms-alpha.c:6673
+#, c-format
+msgid "STC_NBH_PS (store cond or hint at psect + offset)\n"
+msgstr ""
+
+#: vms-alpha.c:6677
+#, c-format
+msgid "CTL_SETRB (set relocation base)\n"
+msgstr ""
+
+#: vms-alpha.c:6683
+#, c-format
+msgid "CTL_AUGRB (augment relocation base) %u\n"
+msgstr ""
+
+#: vms-alpha.c:6688
+#, c-format
+msgid "CTL_DFLOC (define location)\n"
+msgstr ""
+
+#: vms-alpha.c:6691
+#, c-format
+msgid "CTL_STLOC (set location)\n"
+msgstr ""
+
+#: vms-alpha.c:6694
+#, c-format
+msgid "CTL_STKDL (stack defined location)\n"
+msgstr ""
+
+#: vms-alpha.c:6697 vms-alpha.c:7140 vms-alpha.c:7301
+#, c-format
+msgid "*unhandled*\n"
+msgstr ""
+
+#: vms-alpha.c:6727 vms-alpha.c:6766
+#, c-format
+msgid "cannot read GST record length\n"
+msgstr ""
+
+#. Ill-formed.
+#: vms-alpha.c:6748
+#, c-format
+msgid "cannot find EMH in first GST record\n"
+msgstr ""
+
+#: vms-alpha.c:6774
+#, c-format
+msgid "cannot read GST record header\n"
+msgstr ""
+
+#: vms-alpha.c:6787
+#, c-format
+msgid " corrupted GST\n"
+msgstr ""
+
+#: vms-alpha.c:6795
+#, c-format
+msgid "cannot read GST record\n"
+msgstr ""
+
+#: vms-alpha.c:6824
+#, fuzzy, c-format
+msgid " unhandled EOBJ record type %u\n"
+msgstr "%s: Tip import nemanipulabil; %x"
+
+#: vms-alpha.c:6849
+#, c-format
+msgid " bitcount: %u, base addr: 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:6863
+#, c-format
+msgid " bitmap: 0x%08x (count: %u):\n"
+msgstr ""
+
+#: vms-alpha.c:6870
+#, c-format
+msgid " %08x"
+msgstr ""
+
+#: vms-alpha.c:6897
+#, c-format
+msgid " image %u (%u entries)\n"
+msgstr ""
+
+#: vms-alpha.c:6903
+#, c-format
+msgid " offset: 0x%08x, val: 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:6926
+#, c-format
+msgid " image %u (%u entries), offsets:\n"
+msgstr ""
+
+#: vms-alpha.c:6933
+#, c-format
+msgid " 0x%08x"
+msgstr ""
+
+#. 64 bits.
+#: vms-alpha.c:7059
+#, c-format
+msgid "64 bits *unhandled*\n"
+msgstr ""
+
+#: vms-alpha.c:7064
+#, c-format
+msgid "class: %u, dtype: %u, length: %u, pointer: 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:7075
+#, c-format
+msgid "non-contiguous array of %s\n"
+msgstr ""
+
+#: vms-alpha.c:7082
+#, c-format
+msgid "dimct: %u, aflags: 0x%02x, digits: %u, scale: %u\n"
+msgstr ""
+
+#: vms-alpha.c:7087
+#, c-format
+msgid "arsize: %u, a0: 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:7091
+#, c-format
+msgid "Strides:\n"
+msgstr ""
+
+#: vms-alpha.c:7105
+#, c-format
+msgid "Bounds:\n"
+msgstr ""
+
+#: vms-alpha.c:7112
+#, c-format
+msgid "[%u]: Lower: %u, upper: %u\n"
+msgstr ""
+
+#: vms-alpha.c:7126
+#, c-format
+msgid "unaligned bit-string of %s\n"
+msgstr ""
+
+#: vms-alpha.c:7133
+#, c-format
+msgid "base: %u, pos: %u\n"
+msgstr ""
+
+#: vms-alpha.c:7159
+#, c-format
+msgid "vflags: 0x%02x, value: 0x%08x "
+msgstr ""
+
+#: vms-alpha.c:7166
+#, fuzzy, c-format
+msgid "(no value)\n"
+msgstr "Valoare eronată"
+
+#: vms-alpha.c:7169
+#, c-format
+msgid "(not active)\n"
+msgstr ""
+
+#: vms-alpha.c:7172
+#, c-format
+msgid "(not allocated)\n"
+msgstr ""
+
+#: vms-alpha.c:7175
+#, c-format
+msgid "(descriptor)\n"
+msgstr ""
+
+#: vms-alpha.c:7180
+#, c-format
+msgid "(trailing value)\n"
+msgstr ""
+
+#: vms-alpha.c:7183
+#, c-format
+msgid "(value spec follows)\n"
+msgstr ""
+
+#: vms-alpha.c:7186
+#, c-format
+msgid "(at bit offset %u)\n"
+msgstr ""
+
+#: vms-alpha.c:7190
+#, c-format
+msgid "(reg: %u, disp: %u, indir: %u, kind: "
+msgstr ""
+
+#: vms-alpha.c:7197
+msgid "literal"
+msgstr ""
+
+#: vms-alpha.c:7200
+#, fuzzy
+msgid "address"
+msgstr "Adrese Tabelă\n"
+
+#: vms-alpha.c:7203
+msgid "desc"
+msgstr ""
+
+#: vms-alpha.c:7206
+msgid "reg"
+msgstr ""
+
+#: vms-alpha.c:7227
+#, c-format
+msgid "len: %2u, kind: %2u "
+msgstr ""
+
+#: vms-alpha.c:7235
+#, c-format
+msgid "atomic, type=0x%02x %s\n"
+msgstr ""
+
+#: vms-alpha.c:7240
+#, c-format
+msgid "indirect, defined at 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:7244
+#, c-format
+msgid "typed pointer\n"
+msgstr ""
+
+#: vms-alpha.c:7248
+#, c-format
+msgid "pointer\n"
+msgstr ""
+
+#: vms-alpha.c:7259
+#, c-format
+msgid "array, dim: %u, bitmap: "
+msgstr ""
+
+#: vms-alpha.c:7274
+#, c-format
+msgid "array descriptor:\n"
+msgstr ""
+
+#: vms-alpha.c:7285
+#, c-format
+msgid "type spec for element:\n"
+msgstr ""
+
+#: vms-alpha.c:7287
+#, c-format
+msgid "type spec for subscript %u:\n"
+msgstr ""
+
+#: vms-alpha.c:7312
+#, fuzzy, c-format
+msgid "Debug symbol table:\n"
+msgstr " [tabelă sortată de simboluri]"
+
+#: vms-alpha.c:7323
+#, c-format
+msgid "cannot read DST header\n"
+msgstr ""
+
+#: vms-alpha.c:7329
+#, c-format
+msgid " type: %3u, len: %3u (at 0x%08x): "
+msgstr ""
+
+#: vms-alpha.c:7346
+#, c-format
+msgid "cannot read DST symbol\n"
+msgstr ""
+
+#: vms-alpha.c:7390
+#, c-format
+msgid "standard data: %s\n"
+msgstr ""
+
+#: vms-alpha.c:7393 vms-alpha.c:7516
+#, fuzzy, c-format
+msgid " name: %.*s\n"
+msgstr ""
+"\n"
+"\tNume DLL: %s\n"
+
+#: vms-alpha.c:7400
+#, c-format
+msgid "modbeg\n"
+msgstr ""
+
+#: vms-alpha.c:7404
+#, c-format
+msgid " flags: %d, language: %u, major: %u, minor: %u\n"
+msgstr ""
+
+#: vms-alpha.c:7414 vms-alpha.c:7780
+#, c-format
+msgid " module name: %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:7421
+#, c-format
+msgid " compiler : %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:7428
+#, c-format
+msgid "modend\n"
+msgstr ""
+
+#: vms-alpha.c:7435
+msgid "rtnbeg\n"
+msgstr ""
+
+#: vms-alpha.c:7439
+#, c-format
+msgid " flags: %u, address: 0x%08x, pd-address: 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:7448
+#, c-format
+msgid " routine name: %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:7459
+#, c-format
+msgid "rtnend: size 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:7469
+#, c-format
+msgid "prolog: bkpt address 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:7479
+#, c-format
+msgid "epilog: flags: %u, count: %u\n"
+msgstr ""
+
+#: vms-alpha.c:7494
+#, c-format
+msgid "blkbeg: address: 0x%08x, name: %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:7506
+#, c-format
+msgid "blkend: size: 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:7512
+#, c-format
+msgid "typspec (len: %u)\n"
+msgstr ""
+
+#: vms-alpha.c:7528
+#, c-format
+msgid "septyp, name: %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:7544
+#, c-format
+msgid "recbeg: name: %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:7548
+#, c-format
+msgid " len: %u bits\n"
+msgstr ""
+
+#: vms-alpha.c:7554
+#, c-format
+msgid "recend\n"
+msgstr ""
+
+#: vms-alpha.c:7559
+#, c-format
+msgid "enumbeg, len: %u, name: %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:7565
+#, c-format
+msgid "enumelt, name: %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:7571
+#, c-format
+msgid "enumend\n"
+msgstr ""
+
+#: vms-alpha.c:7578
+#, c-format
+msgid "label, name: %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:7581
+#, c-format
+msgid " address: 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:7593
+#, c-format
+msgid "discontiguous range (nbr: %u)\n"
+msgstr ""
+
+#: vms-alpha.c:7600
+#, c-format
+msgid " address: 0x%08x, size: %u\n"
+msgstr ""
+
+#: vms-alpha.c:7611
+#, c-format
+msgid "line num (len: %u)\n"
+msgstr ""
+
+#: vms-alpha.c:7630
+#, c-format
+msgid "delta_pc_w %u\n"
+msgstr ""
+
+#: vms-alpha.c:7639
+#, c-format
+msgid "incr_linum(b): +%u\n"
+msgstr ""
+
+#: vms-alpha.c:7647
+#, c-format
+msgid "incr_linum_w: +%u\n"
+msgstr ""
+
+#: vms-alpha.c:7655
+#, c-format
+msgid "incr_linum_l: +%u\n"
+msgstr ""
+
+#: vms-alpha.c:7663
+#, c-format
+msgid "set_line_num(w) %u\n"
+msgstr ""
+
+#: vms-alpha.c:7670
+#, c-format
+msgid "set_line_num_b %u\n"
+msgstr ""
+
+#: vms-alpha.c:7677
+#, c-format
+msgid "set_line_num_l %u\n"
+msgstr ""
+
+#: vms-alpha.c:7684
+#, c-format
+msgid "set_abs_pc: 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:7690
+#, c-format
+msgid "delta_pc_l: +0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:7697
+#, c-format
+msgid "term(b): 0x%02x"
+msgstr ""
+
+#: vms-alpha.c:7699
+#, c-format
+msgid " pc: 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:7706
+#, c-format
+msgid "term_w: 0x%04x"
+msgstr ""
+
+#: vms-alpha.c:7708
+#, c-format
+msgid " pc: 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:7714
+#, c-format
+msgid "delta pc +%-4d"
+msgstr ""
+
+#: vms-alpha.c:7718
+#, c-format
+msgid " pc: 0x%08x line: %5u\n"
+msgstr ""
+
+#: vms-alpha.c:7723
+#, c-format
+msgid " *unhandled* cmd %u\n"
+msgstr ""
+
+#: vms-alpha.c:7738
+#, c-format
+msgid "source (len: %u)\n"
+msgstr ""
+
+#: vms-alpha.c:7757
+#, c-format
+msgid " declfile: len: %u, flags: %u, fileid: %u\n"
+msgstr ""
+
+#: vms-alpha.c:7762
+#, c-format
+msgid " rms: cdt: 0x%08x %08x, ebk: 0x%08x, ffb: 0x%04x, rfo: %u\n"
+msgstr ""
+
+#: vms-alpha.c:7774
+#, c-format
+msgid " filename : %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:7790
+#, c-format
+msgid " setfile %u\n"
+msgstr ""
+
+#: vms-alpha.c:7797 vms-alpha.c:7804
+#, c-format
+msgid " setrec %u\n"
+msgstr ""
+
+#: vms-alpha.c:7811 vms-alpha.c:7818
+#, c-format
+msgid " setlnum %u\n"
+msgstr ""
+
+#: vms-alpha.c:7825 vms-alpha.c:7832
+#, c-format
+msgid " deflines %u\n"
+msgstr ""
+
+#: vms-alpha.c:7836
+#, c-format
+msgid " formfeed\n"
+msgstr ""
+
+#: vms-alpha.c:7840
+#, c-format
+msgid " *unhandled* cmd %u\n"
+msgstr ""
+
+#: vms-alpha.c:7852
+#, fuzzy, c-format
+msgid "*unhandled* dst type %u\n"
+msgstr "%s: Tip import nemanipulabil; %x"
+
+#: vms-alpha.c:7884
+#, c-format
+msgid "cannot read EIHD\n"
+msgstr ""
+
+#: vms-alpha.c:7888
+#, c-format
+msgid "EIHD: (size: %u, nbr blocks: %u)\n"
+msgstr ""
+
+#: vms-alpha.c:7892
+#, c-format
+msgid " majorid: %u, minorid: %u\n"
+msgstr ""
+
+#: vms-alpha.c:7900
+msgid "executable"
+msgstr ""
+
+#: vms-alpha.c:7903
+msgid "linkable image"
+msgstr ""
+
+#: vms-alpha.c:7910
+#, c-format
+msgid " image type: %u (%s)"
+msgstr ""
+
+#: vms-alpha.c:7916
+msgid "native"
+msgstr ""
+
+#: vms-alpha.c:7919
+msgid "CLI"
+msgstr ""
+
+#: vms-alpha.c:7926
+#, c-format
+msgid ", subtype: %u (%s)\n"
+msgstr ""
+
+#: vms-alpha.c:7933
+#, c-format
+msgid " offsets: isd: %u, activ: %u, symdbg: %u, imgid: %u, patch: %u\n"
+msgstr ""
+
+#: vms-alpha.c:7937
+#, c-format
+msgid " fixup info rva: "
+msgstr ""
+
+#: vms-alpha.c:7939
+#, c-format
+msgid ", symbol vector rva: "
+msgstr ""
+
+#: vms-alpha.c:7942
+#, c-format
+msgid ""
+"\n"
+" version array off: %u\n"
+msgstr ""
+
+#: vms-alpha.c:7947
+#, c-format
+msgid " img I/O count: %u, nbr channels: %u, req pri: %08x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:7953
+#, fuzzy, c-format
+msgid " linker flags: %08x:"
+msgstr "marcaje(flags) private = %x:"
+
+#: vms-alpha.c:7984
+#, c-format
+msgid " ident: 0x%08x, sysver: 0x%08x, match ctrl: %u, symvect_size: %u\n"
+msgstr ""
+
+#: vms-alpha.c:7990
+#, c-format
+msgid " BPAGE: %u"
+msgstr ""
+
+#: vms-alpha.c:7997
+#, c-format
+msgid ", ext fixup offset: %u, no_opt psect off: %u"
+msgstr ""
+
+#: vms-alpha.c:8000
+#, c-format
+msgid ", alias: %u\n"
+msgstr ""
+
+#: vms-alpha.c:8008
+#, c-format
+msgid "system version array information:\n"
+msgstr ""
+
+#: vms-alpha.c:8012
+#, c-format
+msgid "cannot read EIHVN header\n"
+msgstr ""
+
+#: vms-alpha.c:8022
+#, c-format
+msgid "cannot read EIHVN version\n"
+msgstr ""
+
+#: vms-alpha.c:8025
+#, c-format
+msgid " %02u "
+msgstr ""
+
+#: vms-alpha.c:8029
+msgid "BASE_IMAGE "
+msgstr ""
+
+#: vms-alpha.c:8032
+msgid "MEMORY_MANAGEMENT"
+msgstr ""
+
+#: vms-alpha.c:8035
+msgid "IO "
+msgstr ""
+
+#: vms-alpha.c:8038
+msgid "FILES_VOLUMES "
+msgstr ""
+
+#: vms-alpha.c:8041
+msgid "PROCESS_SCHED "
+msgstr ""
+
+#: vms-alpha.c:8044
+msgid "SYSGEN "
+msgstr ""
+
+#: vms-alpha.c:8047
+msgid "CLUSTERS_LOCKMGR "
+msgstr ""
+
+#: vms-alpha.c:8050
+msgid "LOGICAL_NAMES "
+msgstr ""
+
+#: vms-alpha.c:8053
+msgid "SECURITY "
+msgstr ""
+
+#: vms-alpha.c:8056
+msgid "IMAGE_ACTIVATOR "
+msgstr ""
+
+#: vms-alpha.c:8059
+msgid "NETWORKS "
+msgstr ""
+
+#: vms-alpha.c:8062
+msgid "COUNTERS "
+msgstr ""
+
+#: vms-alpha.c:8065
+msgid "STABLE "
+msgstr ""
+
+#: vms-alpha.c:8068
+msgid "MISC "
+msgstr ""
+
+#: vms-alpha.c:8071
+msgid "CPU "
+msgstr ""
+
+#: vms-alpha.c:8074
+msgid "VOLATILE "
+msgstr ""
+
+#: vms-alpha.c:8077
+msgid "SHELL "
+msgstr ""
+
+#: vms-alpha.c:8080
+msgid "POSIX "
+msgstr ""
+
+#: vms-alpha.c:8083
+msgid "MULTI_PROCESSING "
+msgstr ""
+
+#: vms-alpha.c:8086
+msgid "GALAXY "
+msgstr ""
+
+#: vms-alpha.c:8089
+#, fuzzy
+msgid "*unknown* "
+msgstr "*necunoscut*"
+
+#: vms-alpha.c:8105 vms-alpha.c:8379
+#, c-format
+msgid "cannot read EIHA\n"
+msgstr ""
+
+#: vms-alpha.c:8108
+#, c-format
+msgid "Image activation: (size=%u)\n"
+msgstr ""
+
+#: vms-alpha.c:8111
+#, c-format
+msgid " First address : 0x%08x 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:8115
+#, c-format
+msgid " Second address: 0x%08x 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:8119
+#, c-format
+msgid " Third address : 0x%08x 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:8123
+#, c-format
+msgid " Fourth address: 0x%08x 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:8127
+#, c-format
+msgid " Shared image : 0x%08x 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:8138
+#, c-format
+msgid "cannot read EIHI\n"
+msgstr ""
+
+#: vms-alpha.c:8142
+#, c-format
+msgid "Image identification: (major: %u, minor: %u)\n"
+msgstr ""
+
+#: vms-alpha.c:8145
+#, fuzzy, c-format
+msgid " image name : %.*s\n"
+msgstr "Nume Partiție = \"%s\"\n"
+
+#: vms-alpha.c:8147
+#, fuzzy, c-format
+msgid " link time : %s\n"
+msgstr "Nume Partiție = \"%s\"\n"
+
+#: vms-alpha.c:8149
+#, c-format
+msgid " image ident : %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:8151
+#, c-format
+msgid " linker ident : %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:8153
+#, c-format
+msgid " image build ident: %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:8163
+#, c-format
+msgid "cannot read EIHS\n"
+msgstr ""
+
+#: vms-alpha.c:8167
+#, c-format
+msgid "Image symbol & debug table: (major: %u, minor: %u)\n"
+msgstr ""
+
+#: vms-alpha.c:8173
+#, c-format
+msgid " debug symbol table : vbn: %u, size: %u (0x%x)\n"
+msgstr ""
+
+#: vms-alpha.c:8178
+#, c-format
+msgid " global symbol table: vbn: %u, records: %u\n"
+msgstr ""
+
+#: vms-alpha.c:8183
+#, c-format
+msgid " debug module table : vbn: %u, size: %u\n"
+msgstr ""
+
+#: vms-alpha.c:8196
+#, c-format
+msgid "cannot read EISD\n"
+msgstr ""
+
+#: vms-alpha.c:8207
+#, c-format
+msgid "Image section descriptor: (major: %u, minor: %u, size: %u, offset: %u)\n"
+msgstr ""
+
+#: vms-alpha.c:8215
+#, c-format
+msgid " section: base: 0x%08x%08x size: 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:8220
+#, fuzzy, c-format
+msgid " flags: 0x%04x"
+msgstr "marcaje(flags) private = 0x%lx"
+
+#: vms-alpha.c:8258
+#, c-format
+msgid " vbn: %u, pfc: %u, matchctl: %u type: %u ("
+msgstr ""
+
+#: vms-alpha.c:8264
+msgid "NORMAL"
+msgstr ""
+
+#: vms-alpha.c:8267
+msgid "SHRFXD"
+msgstr ""
+
+#: vms-alpha.c:8270
+msgid "PRVFXD"
+msgstr ""
+
+#: vms-alpha.c:8273
+msgid "SHRPIC"
+msgstr ""
+
+#: vms-alpha.c:8276
+msgid "PRVPIC"
+msgstr ""
+
+#: vms-alpha.c:8279
+msgid "USRSTACK"
+msgstr ""
+
+#: vms-alpha.c:8285
+msgid ")\n"
+msgstr ""
+
+#: vms-alpha.c:8288
+#, c-format
+msgid " ident: 0x%08x, name: %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:8298
+#, c-format
+msgid "cannot read DMT\n"
+msgstr ""
+
+#: vms-alpha.c:8302
+#, c-format
+msgid "Debug module table:\n"
+msgstr ""
+
+#: vms-alpha.c:8311
+#, c-format
+msgid "cannot read DMT header\n"
+msgstr ""
+
+#: vms-alpha.c:8317
+#, c-format
+msgid " module offset: 0x%08x, size: 0x%08x, (%u psects)\n"
+msgstr ""
+
+#: vms-alpha.c:8327
+#, c-format
+msgid "cannot read DMT psect\n"
+msgstr ""
+
+#: vms-alpha.c:8331
+#, c-format
+msgid " psect start: 0x%08x, length: %u\n"
+msgstr ""
+
+#: vms-alpha.c:8344
+#, c-format
+msgid "cannot read DST\n"
+msgstr ""
+
+#: vms-alpha.c:8354
+#, c-format
+msgid "cannot read GST\n"
+msgstr ""
+
+#: vms-alpha.c:8358
+#, fuzzy, c-format
+msgid "Global symbol table:\n"
+msgstr " [tabelă sortată de simboluri]"
+
+#: vms-alpha.c:8385
+#, c-format
+msgid "Image activator fixup: (major: %u, minor: %u)\n"
+msgstr ""
+
+#: vms-alpha.c:8389
+#, c-format
+msgid " iaflink : 0x%08x %08x\n"
+msgstr ""
+
+#: vms-alpha.c:8393
+#, c-format
+msgid " fixuplnk: 0x%08x %08x\n"
+msgstr ""
+
+#: vms-alpha.c:8396
+#, c-format
+msgid " size : %u\n"
+msgstr ""
+
+#: vms-alpha.c:8398
+#, c-format
+msgid " flags: 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:8403
+#, c-format
+msgid " qrelfixoff: %5u, lrelfixoff: %5u\n"
+msgstr ""
+
+#: vms-alpha.c:8408
+#, c-format
+msgid " qdotadroff: %5u, ldotadroff: %5u\n"
+msgstr ""
+
+#: vms-alpha.c:8413
+#, c-format
+msgid " codeadroff: %5u, lpfixoff : %5u\n"
+msgstr ""
+
+#: vms-alpha.c:8416
+#, c-format
+msgid " chgprtoff : %5u\n"
+msgstr ""
+
+#: vms-alpha.c:8420
+#, c-format
+msgid " shlstoff : %5u, shrimgcnt : %5u\n"
+msgstr ""
+
+#: vms-alpha.c:8423
+#, c-format
+msgid " shlextra : %5u, permctx : %5u\n"
+msgstr ""
+
+#: vms-alpha.c:8426
+#, c-format
+msgid " base_va : 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:8428
+#, c-format
+msgid " lppsbfixoff: %5u\n"
+msgstr ""
+
+#: vms-alpha.c:8435
+#, c-format
+msgid " Shareable images:\n"
+msgstr ""
+
+#: vms-alpha.c:8443
+#, c-format
+msgid " %u: size: %u, flags: 0x%02x, name: %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:8450
+#, fuzzy, c-format
+msgid " quad-word relocation fixups:\n"
+msgstr "Relocare nemanipulabilă %s"
+
+#: vms-alpha.c:8456
+#, c-format
+msgid " long-word relocation fixups:\n"
+msgstr ""
+
+#: vms-alpha.c:8462
+#, c-format
+msgid " quad-word .address reference fixups:\n"
+msgstr ""
+
+#: vms-alpha.c:8467
+#, c-format
+msgid " long-word .address reference fixups:\n"
+msgstr ""
+
+#: vms-alpha.c:8472
+#, fuzzy, c-format
+msgid " Code Address Reference Fixups:\n"
+msgstr ""
+"\n"
+"Referințe Versiune:\n"
+
+#: vms-alpha.c:8477
+#, c-format
+msgid " Linkage Pairs Reference Fixups:\n"
+msgstr ""
+
+#: vms-alpha.c:8485
+#, c-format
+msgid " Change Protection (%u entries):\n"
+msgstr ""
+
+#: vms-alpha.c:8494
+#, c-format
+msgid " base: 0x%08x %08x, size: 0x%08x, prot: 0x%08x "
+msgstr ""
+
+#. FIXME: we do not yet support relocatable link. It is not obvious
+#. how to do it for debug infos.
+#: vms-alpha.c:9371
+#, fuzzy
+msgid "%P: relocatable link is not supported\n"
+msgstr "%s: legătura relocalizabilă din %s către %s nesuportată"
+
+#: vms-alpha.c:9442
+#, c-format
+msgid "%P: multiple entry points: in modules %pB and %pB\n"
+msgstr ""
+
+#: vms-lib.c:1527
+#, c-format
+msgid "could not open shared image '%s' from '%s'"
+msgstr ""
+
+#: vms-misc.c:370
+msgid "_bfd_vms_output_counted called with zero bytes"
+msgstr "_bfd_vms_output_counted apelat cu zero octeți"
+
+#: vms-misc.c:375
+msgid "_bfd_vms_output_counted called with too many bytes"
+msgstr "_bfd_vms_output_counted apelat cu prea mulți octeți"
+
+#: xcofflink.c:834
+#, fuzzy, c-format
+msgid "%pB: XCOFF shared object when not producing XCOFF output"
+msgstr "%s: XCOFF shared object neproducând output XCOFF"
+
+#: xcofflink.c:855
+#, fuzzy, c-format
+msgid "%pB: dynamic object with no .loader section"
+msgstr "%s: obiect dinamic fără secțiune .loader"
+
+#: xcofflink.c:1440
+#, fuzzy, c-format
+msgid "%pB: `%s' has line numbers but no enclosing section"
+msgstr "%s: `%s' are numere de linii dar nici o secțiune de închidere"
+
+#: xcofflink.c:1496
+#, fuzzy, c-format
+msgid "%pB: class %d symbol `%s' has no aux entries"
+msgstr "%s: clasa %d simbolul `%s' nu are intrări aux"
+
+#: xcofflink.c:1519
+#, fuzzy, c-format
+msgid "%pB: symbol `%s' has unrecognized csect type %d"
+msgstr "%s: simbolul `%s' are tip necunoscut csect %d"
+
+#: xcofflink.c:1532
+#, fuzzy, c-format
+msgid "%pB: bad XTY_ER symbol `%s': class %d scnum %d scnlen %<PRId64>"
+msgstr "%s: simbol XTY_ER invalid `%s': clasa %d scnum %d scnlen %d"
+
+#: xcofflink.c:1563
+#, fuzzy, c-format
+msgid "%pB: XMC_TC0 symbol `%s' is class %d scnlen %<PRId64>"
+msgstr "%s: simblul XMC_TC0 `%s' este clasa %d scnlen %d"
+
+#: xcofflink.c:1698
+#, c-format
+msgid "%pB: TOC entry `%s' has a R_TLSMLrelocation not targeting itself"
+msgstr ""
+
+#: xcofflink.c:1732
+#, fuzzy, c-format
+msgid "%pB: csect `%s' not in enclosing section"
+msgstr "%s: csect `%s' nu este în secțiunea de închidere"
+
+#: xcofflink.c:1841
+#, fuzzy, c-format
+msgid "%pB: misplaced XTY_LD `%s'"
+msgstr "%s:XTY_LD `%s' rătăcit"
+
+#: xcofflink.c:2184
+#, fuzzy, c-format
+msgid "%pB: reloc %s:%<PRId64> not in csect"
+msgstr "%s: relocarea %s:%d nu este în csect"
+
+#: xcofflink.c:3287
+#, fuzzy, c-format
+msgid "%pB: cannot export internal symbol `%s`."
+msgstr "%s: tip de relocare %d necunoscut pentru simbolul %s"
+
+#: xcofflink.c:3335
#, c-format
msgid "%s: no such symbol"
-msgstr "%s: nu existã acest simbol"
+msgstr "%s: nu există acest simbol"
-#: xcofflink.c:2894
+#: xcofflink.c:3444
+#, c-format
+msgid "warning: attempt to export undefined symbol `%s'"
+msgstr "avertisment: încercare de exportare a simbolului nedefinit `%s'"
+
+#: xcofflink.c:3823
msgid "error: undefined symbol __rtinit"
msgstr "eroare: simbol __rtinit nedefinit"
-#: xcofflink.c:3455
+#: xcofflink.c:4206
+#, fuzzy, c-format
+msgid "%pB: loader reloc in unrecognized section `%s'"
+msgstr "%s: relocare loader în secțiune necunoscută `%s'"
+
+#: xcofflink.c:4218
+#, fuzzy, c-format
+msgid "%pB: `%s' in loader reloc but not loader sym"
+msgstr "%s: `%s' în relocare loader dar nu în loader sym"
+
+#: xcofflink.c:4235
+#, fuzzy, c-format
+msgid "%pB: loader reloc in read-only section %pA"
+msgstr "%s: relocare loader în secțiunea doar-în-citire %s"
+
+#: xcofflink.c:5270
+#, fuzzy, c-format
+msgid "TOC overflow: %#<PRIx64> > 0x10000; try -mminimal-toc when compiling"
+msgstr "suprasolicitare(overflow) TOC: 0x%lx > 0x10000; încercați -mminimal-toc la compilare"
+
+#. Not fatal, this callback cannot fail.
+#: elfnn-aarch64.c:2869 elfnn-riscv.c:5264
+#, fuzzy, c-format
+msgid "unknown attribute for symbol `%s': 0x%02x"
+msgstr "%s: tip de relocare %d necunoscut pentru simbolul %s"
+
+#: elfnn-aarch64.c:5245
#, c-format
-msgid "warning: attempt to export undefined symbol `%s'"
-msgstr "avertisment: încercare de exportare a simbolului nedefinit `%s'"
+msgid "%pB: error: erratum 835769 stub out of range (input file too large)"
+msgstr ""
-#: xcofflink.c:4448
+#: elfnn-aarch64.c:5337
#, c-format
-msgid "TOC overflow: 0x%lx > 0x10000; try -mminimal-toc when compiling"
-msgstr "suprasolicitare(overflow) TOC: 0x%lx > 0x10000; încercaþi -mminimal-toc la compilare"
+msgid "%pB: error: erratum 843419 stub out of range (input file too large)"
+msgstr ""
-#: xcofflink.c:5288 xcofflink.c:5755 xcofflink.c:5817 xcofflink.c:6119
+#: elfnn-aarch64.c:5353
#, c-format
-msgid "%s: loader reloc in unrecognized section `%s'"
-msgstr "%s: relocare loader în secþiune necunoscutã `%s'"
+msgid "%pB: error: erratum 843419 immediate 0x%s out of range for ADR (input file too large) and --fix-cortex-a53-843419=adr used. Run the linker with --fix-cortex-a53-843419=full instead"
+msgstr ""
+
+#: elfnn-aarch64.c:5887
+#, fuzzy, c-format
+msgid "%pB: relocation %s against symbol `%s' which may bind externally can not be used when making a shared object; recompile with -fPIC"
+msgstr "%s: relocarea %s nu poate fi utilizată când se face un shared object, recompilațicu -fPIC"
+
+#: elfnn-aarch64.c:5907
+#, fuzzy, c-format
+msgid "%pB: conditional branch to undefined symbol `%s' not allowed"
+msgstr "%s: ramură @internal către simbolul dinamic %s"
-#: xcofflink.c:5310 xcofflink.c:6130
+#: elfnn-aarch64.c:5995
#, c-format
-msgid "%s: `%s' in loader reloc but not loader sym"
-msgstr "%s: `%s' în relocare loader dar nu în loader sym"
+msgid "%pB: local symbol descriptor table be NULL when applying relocation %s against local symbol"
+msgstr ""
+
+#: elfnn-aarch64.c:6108 elfnn-aarch64.c:6145
+#, fuzzy, c-format
+msgid "%pB: TLS relocation %s against undefined symbol `%s'"
+msgstr "%s: relocare @gprel pe simbolul dinamic %s"
-#: xcofflink.c:5325
+#: elfnn-aarch64.c:7130
+msgid "too many GOT entries for -fpic, please recompile with -fPIC"
+msgstr ""
+
+#: elfnn-aarch64.c:7158
+msgid "one possible cause of this error is that the symbol is being referenced in the indicated code as if it had a larger alignment than was declared where it was defined"
+msgstr ""
+
+#: elfnn-aarch64.c:7725
+#, fuzzy, c-format
+msgid "%pB: relocation %s against `%s' can not be used when making a shared object"
+msgstr "%s: relocarea %s nu poate fi folosită când se crează un shared object"
+
+#: elfnn-loongarch.c:151 elfnn-loongarch.c:203
#, c-format
-msgid "%s: loader reloc in read-only section %s"
-msgstr "%s: relocare loader în secþiunea doar-în-citire %s"
+msgid "%#<PRIx64> invaild imm"
+msgstr ""
-#: elf32-ia64.c:2392 elf64-ia64.c:2392
-msgid "@pltoff reloc against local symbol"
-msgstr "relocare @pltoff pe simbol local"
+#: elfnn-loongarch.c:386 elfnn-riscv.c:3846
+#, fuzzy, c-format
+msgid ""
+"%pB: ABI is incompatible with that of the selected emulation:\n"
+" target emulation `%s' does not match `%s'"
+msgstr "%s: ABI este incompatibil cu cel al emulației selectate"
-#: elf32-ia64.c:3804 elf64-ia64.c:3804
+#: elfnn-loongarch.c:406
#, c-format
-msgid "%s: short data segment overflowed (0x%lx >= 0x400000)"
-msgstr "%s: segment de date scurt depãºit(overflowed) (0x%lx >= 0x400000)"
+msgid "%pB: can't link different ABI object."
+msgstr ""
+
+#: elfnn-loongarch.c:547
+#, fuzzy
+msgid "Internal error: unreachable."
+msgstr "eroare internă: eroare necunoscută"
-#: elf32-ia64.c:3815 elf64-ia64.c:3815
+#: elfnn-riscv.c:224 elfnn-riscv.c:259
#, c-format
-msgid "%s: __gp does not cover short data segment"
-msgstr "%s: __gp nu acoperã segmentul de date scurte"
+msgid "%pB: warning: RVE PLT generation not supported"
+msgstr ""
-#: elf32-ia64.c:4131 elf64-ia64.c:4131
+#: elfnn-riscv.c:1927
#, c-format
-msgid "%s: linking non-pic code in a shared library"
-msgstr "%s: linkuire cod non-pic într-o bibliotecã globalã(shared)"
+msgid "%pcrel_lo missing matching %pcrel_hi"
+msgstr ""
-#: elf32-ia64.c:4164 elf64-ia64.c:4164
+#: elfnn-riscv.c:1930
#, c-format
-msgid "%s: @gprel relocation against dynamic symbol %s"
-msgstr "%s: relocare @gprel pe simbolul dinamic %s"
+msgid "%pcrel_lo with addend isn't allowed for R_RISCV_GOT_HI20"
+msgstr ""
-#: elf32-ia64.c:4224 elf64-ia64.c:4224
+#: elfnn-riscv.c:1936
#, c-format
-msgid "%s: linking non-pic code in a position independent executable"
-msgstr "%s: linkuire cod non-pic într-un executabil independent de poziþie"
+msgid "%%pcrel_lo overflow with an addend, the value of %%pcrel_hi is 0x%<PRIx64> without any addend, but may be 0x%<PRIx64> after adding the %%pcrel_lo addend"
+msgstr ""
-#: elf32-ia64.c:4363 elf64-ia64.c:4363
+#: elfnn-riscv.c:1943
#, c-format
-msgid "%s: @internal branch to dynamic symbol %s"
-msgstr "%s: ramurã @internal cãtre simbolul dinamic %s"
+msgid "%pcrel_lo overflow with an addend"
+msgstr ""
+
+#: elfnn-riscv.c:2425
+msgid "The addend isn't allowed for R_RISCV_GOT_HI20"
+msgstr ""
-#: elf32-ia64.c:4365 elf64-ia64.c:4365
+#: elfnn-riscv.c:2569
#, c-format
-msgid "%s: speculation fixup to dynamic symbol %s"
-msgstr "%s: rezolvare de speculaþie cãtre simbolul dinamic %s"
+msgid "%pcrel_lo section symbol with an addend"
+msgstr ""
+
+#: elfnn-riscv.c:2792
+#, fuzzy, c-format
+msgid "%%X%%P: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC\n"
+msgstr "%s: relocarea %s nu poate fi utilizată când se face un shared object, recompilațicu -fPIC"
+
+#: elfnn-riscv.c:2802
+#, fuzzy, c-format
+msgid "%%X%%P: unresolvable %s relocation against symbol `%s'\n"
+msgstr "%s(%s+0x%lx): relocare nerezolvabilă %s pe simbolul `%s'"
+
+#: elfnn-riscv.c:2842
+#, fuzzy
+msgid "%X%P: internal error: out of range error\n"
+msgstr "eroare internă: eroare depășire de domeniu(out of range)"
+
+#: elfnn-riscv.c:2847
+#, fuzzy
+msgid "%X%P: internal error: unsupported relocation error\n"
+msgstr "eroare internă: eroare de relocare nesuportată"
-#: elf32-ia64.c:4367 elf64-ia64.c:4367
+#: elfnn-riscv.c:2853
+#, fuzzy
+msgid "dangerous relocation error"
+msgstr "eroare internă: eroare de relocare nesuportată"
+
+#: elfnn-riscv.c:2859
+#, fuzzy
+msgid "%X%P: internal error: unknown error\n"
+msgstr "eroare internă: eroare necunoscută"
+
+#: elfnn-riscv.c:3400
#, c-format
-msgid "%s: @pcrel relocation against dynamic symbol %s"
-msgstr "%s: relocare @pcrell pe simbolul dinamic %s"
+msgid "warning: %pB: mis-matched ISA version %d.%d for '%s' extension, the output version is %d.%d"
+msgstr ""
-#: elf32-ia64.c:4579 elf64-ia64.c:4579
-msgid "unsupported reloc"
-msgstr "relocare nesuportatã"
+#: elfnn-riscv.c:3433
+#, c-format
+msgid "error: %pB: corrupted ISA string '%s'. First letter should be 'i' or 'e' but got '%s'"
+msgstr ""
-#: elf32-ia64.c:4858 elf64-ia64.c:4858
+#: elfnn-riscv.c:3476
#, c-format
-msgid "%s: linking trap-on-NULL-dereference with non-trapping files"
-msgstr "%s: linkuire trap-on-NULL-dereference cu fiºiere non-trapping"
+msgid "error: %pB: mis-matched ISA string to merge '%s' and '%s'"
+msgstr ""
-#: elf32-ia64.c:4867 elf64-ia64.c:4867
+#: elfnn-riscv.c:3618
#, c-format
-msgid "%s: linking big-endian files with little-endian files"
-msgstr "%s: linkuire fiºiere big-endiancu fiºiere little-endian"
+msgid "error: %pB: ISA string of input (%s) doesn't match output (%s)"
+msgstr ""
-#: elf32-ia64.c:4876 elf64-ia64.c:4876
+#: elfnn-riscv.c:3638
#, c-format
-msgid "%s: linking 64-bit files with 32-bit files"
-msgstr "%s: linkuire fiºiere pe 64-biþi cu fiºiere pe 32-biþi"
+msgid "error: %pB: XLEN of input (%u) doesn't match output (%u)"
+msgstr ""
+
+#: elfnn-riscv.c:3646
+#, c-format
+msgid "error: %pB: unsupported XLEN (%u), you might be using wrong emulation"
+msgstr ""
-#: elf32-ia64.c:4885 elf64-ia64.c:4885
+#: elfnn-riscv.c:3760
#, c-format
-msgid "%s: linking constant-gp files with non-constant-gp files"
-msgstr "%s: linkuire fiºiere constant-gp cu fiºiere non-constant-gp"
+msgid "warning: %pB use privileged spec version %u.%u.%u but the output use version %u.%u.%u"
+msgstr ""
+
+#: elfnn-riscv.c:3777
+msgid "warning: privileged spec version 1.9.1 can not be linked with other spec versions"
+msgstr ""
+
+#: elfnn-riscv.c:3805
+#, c-format
+msgid "error: %pB use %u-byte stack aligned but the output use %u-byte stack aligned"
+msgstr ""
+
+#: elfnn-riscv.c:3902
+#, fuzzy, c-format
+msgid "%pB: can't link %s modules with %s modules"
+msgstr "%s: linkuire a modulului %s cu modulele%s anterioare"
+
+#: elfnn-riscv.c:3912
+#, c-format
+msgid "%pB: can't link RVE with other target"
+msgstr ""
+
+#: elfnn-riscv.c:4493
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): %<PRId64> bytes required for alignment to %<PRId64>-byte boundary, but only %<PRId64> present"
+msgstr ""
+
+#: peXXigen.c:157
+#, fuzzy, c-format
+msgid "%pB: unable to find name for empty section"
+msgstr "%s: nu s-a putut găsi secțiunea de output %s"
+
+#: peXXigen.c:184
+#, c-format
+msgid "%pB: out of memory creating name for empty section"
+msgstr ""
-#: elf32-ia64.c:4895 elf64-ia64.c:4895
+#: peXXigen.c:194
+#, fuzzy, c-format
+msgid "%pB: unable to create fake empty section"
+msgstr "nu se poate citi în secțiunea %s din %s"
+
+#: peXXigen.c:526
#, c-format
-msgid "%s: linking auto-pic files with non-auto-pic files"
-msgstr "%s: linkuire fiºiere auto-pic cu fiºiere non-auto-pic"
+msgid "%pB: aout header specifies an invalid number of data-directory entries: %u"
+msgstr ""
-#: peigen.c:985 pepigen.c:985
+#: peXXigen.c:937
#, c-format
-msgid "%s: line number overflow: 0x%lx > 0xffff"
-msgstr "%s: depãºire(overflow) numãr linii: 0x%lx > 0xffff"
+msgid "%pB:%.8s: section below image base"
+msgstr ""
-#: peigen.c:1002 pepigen.c:1002
+#: peXXigen.c:940
#, c-format
-msgid "%s: reloc overflow 1: 0x%lx > 0xffff"
-msgstr "%s: depãºire(overflow) relocare 1: 0x%lx > 0xffff"
+msgid "%pB:%.8s: RVA truncated"
+msgstr ""
-#: peigen.c:1016 pepigen.c:1016
+#: peXXigen.c:1068
+#, fuzzy, c-format
+msgid "%pB: line number overflow: 0x%lx > 0xffff"
+msgstr "%s: depășire(overflow) număr linii: 0x%lx > 0xffff"
+
+#: peXXigen.c:1221
msgid "Export Directory [.edata (or where ever we found it)]"
-msgstr "Director Exportare [.edata (sau oriunde se gãseºte)]"
+msgstr "Director Exportare [.edata (sau oriunde se găsește)]"
-#: peigen.c:1017 pepigen.c:1017
+#: peXXigen.c:1222
msgid "Import Directory [parts of .idata]"
-msgstr "Director Importare [ pãrþi ale .idata]"
+msgstr "Director Importare [ părți ale .idata]"
-#: peigen.c:1018 pepigen.c:1018
+#: peXXigen.c:1223
msgid "Resource Directory [.rsrc]"
-msgstr "Director Resursã [.rsrc]"
+msgstr "Director Resursă [.rsrc]"
-#: peigen.c:1019 pepigen.c:1019
+#: peXXigen.c:1224
msgid "Exception Directory [.pdata]"
-msgstr "Director Excepþie [.pdata]"
+msgstr "Director Excepție [.pdata]"
-#: peigen.c:1020 pepigen.c:1020
+#: peXXigen.c:1225
msgid "Security Directory"
msgstr "Director Securitate"
-#: peigen.c:1021 pepigen.c:1021
+#: peXXigen.c:1226
msgid "Base Relocation Directory [.reloc]"
-msgstr "Director Relocare de Bazã [.reloc]"
+msgstr "Director Relocare de Bază [.reloc]"
-#: peigen.c:1022 pepigen.c:1022
+#: peXXigen.c:1227
msgid "Debug Directory"
msgstr "Director Debug"
-#: peigen.c:1023 pepigen.c:1023
+#: peXXigen.c:1228
msgid "Description Directory"
msgstr "Director Descriere"
-#: peigen.c:1024 pepigen.c:1024
+#: peXXigen.c:1229
msgid "Special Directory"
msgstr "Director Special"
-#: peigen.c:1025 pepigen.c:1025
+#: peXXigen.c:1230
msgid "Thread Storage Directory [.tls]"
msgstr "Director Depozitare Fire(Thread) [.tls]"
-#: peigen.c:1026 pepigen.c:1026
+#: peXXigen.c:1231
msgid "Load Configuration Directory"
-msgstr "Director Încãrcare Configuraþie"
+msgstr "Director Încărcare Configurație"
-#: peigen.c:1027 pepigen.c:1027
+#: peXXigen.c:1232
msgid "Bound Import Directory"
-msgstr "Director Importare de Graniþã(Bound)"
+msgstr "Director Importare de Graniță(Bound)"
-#: peigen.c:1028 pepigen.c:1028
+#: peXXigen.c:1233
msgid "Import Address Table Directory"
-msgstr "Director Importare Tabelã de Adrese"
+msgstr "Director Importare Tabelă de Adrese"
-#: peigen.c:1029 pepigen.c:1029
+#: peXXigen.c:1234
msgid "Delay Import Directory"
-msgstr "Director Importare Întârziere"
+msgstr "Director Importare Întârziere"
+
+#: peXXigen.c:1235
+msgid "CLR Runtime Header"
+msgstr ""
-#: peigen.c:1030 peigen.c:1031 pepigen.c:1030 pepigen.c:1031
+#: peXXigen.c:1236
msgid "Reserved"
msgstr "Rezervat"
-#: peigen.c:1094 pepigen.c:1094
+#: peXXigen.c:1283
+#, c-format
msgid ""
"\n"
"There is an import table, but the section containing it could not be found\n"
msgstr ""
"\n"
-"Existã o tabelã de importare, dar secþiunea care o conþine n-a putut fi gãsitã\n"
+"Există o tabelă de importare, dar secțiunea care o conține n-a putut fi găsită\n"
+
+#: peXXigen.c:1289
+#, fuzzy, c-format
+msgid ""
+"\n"
+"There is an import table in %s, but that section has no contents\n"
+msgstr ""
+"\n"
+"Există o tabelă de importare, dar secțiunea care o conține n-a putut fi găsită\n"
-#: peigen.c:1099 pepigen.c:1099
+#: peXXigen.c:1296
#, c-format
msgid ""
"\n"
"There is an import table in %s at 0x%lx\n"
msgstr ""
"\n"
-"Existã o tabelã de importare în %s la 0x%lx\n"
+"Există o tabelă de importare în %s la 0x%lx\n"
-#: peigen.c:1136 pepigen.c:1136
+#: peXXigen.c:1302
#, c-format
msgid ""
"\n"
-"Function descriptor located at the start address: %04lx\n"
+"The Import Tables (interpreted %s section contents)\n"
msgstr ""
"\n"
-"Descriptorul de funcþie localizat la adresa de start: %04lx\n"
+"Tabelele de Importare (interpretat conținutul secțiunii %s)\n"
-#: peigen.c:1139 pepigen.c:1139
+#: peXXigen.c:1305
#, c-format
-msgid "\tcode-base %08lx toc (loadable/actual) %08lx/%08lx\n"
-msgstr "\tcode-base %08lx toc (încãrcabil/actual) %08lx/%08lx\n"
+msgid ""
+" vma: Hint Time Forward DLL First\n"
+" Table Stamp Chain Name Thunk\n"
+msgstr ""
+" vma: Sugestie Timp ÃŽnaintare DLL Primul\n"
+" Tabel Marcaj LanÈ› Nume Thunk\n"
-#: peigen.c:1145 pepigen.c:1145
+#: peXXigen.c:1354
+#, fuzzy, c-format
msgid ""
"\n"
-"No reldata section! Function descriptor not decoded.\n"
+"\tDLL Name: %.*s\n"
msgstr ""
"\n"
-"Nu existã secþiune reldata! Descriptorul de funcþie nu este decodat.\n"
+"\tNume DLL: %s\n"
-#: peigen.c:1150 pepigen.c:1150
+#: peXXigen.c:1370
+#, c-format
+msgid "\tvma: Hint/Ord Member-Name Bound-To\n"
+msgstr "\tvma: Sugestie/Ord Membru-Nume Salt-La\n"
+
+#: peXXigen.c:1395
#, c-format
msgid ""
"\n"
-"The Import Tables (interpreted %s section contents)\n"
+"There is a first thunk, but the section containing it could not be found\n"
msgstr ""
"\n"
-"Tabelele de Importare (interpretat conþinutul secþiunii %s)\n"
+"Există un prim thunk, dar secțiunea care îl conține nu poate fi găsită\n"
-#: peigen.c:1153 pepigen.c:1153
-msgid ""
-" vma: Hint Time Forward DLL First\n"
-" Table Stamp Chain Name Thunk\n"
+#: peXXigen.c:1439 peXXigen.c:1478
+#, c-format
+msgid "\t<corrupt: 0x%04lx>"
msgstr ""
-" vma: Sugestie Timp Înaintare DLL Primul\n"
-" Tabel Marcaj Lanþ Nume Thunk\n"
-#: peigen.c:1204 pepigen.c:1204
+#: peXXigen.c:1571
#, c-format
msgid ""
"\n"
-"\tDLL Name: %s\n"
+"There is an export table, but the section containing it could not be found\n"
msgstr ""
"\n"
-"\tNume DLL: %s\n"
+"Există o tabelă de export, dar secțiunea ce o conține nu poate fi găsită\n"
-#: peigen.c:1215 pepigen.c:1215
-msgid "\tvma: Hint/Ord Member-Name Bound-To\n"
-msgstr "\tvma: Sugestie/Ord Membru-Nume Salt-La\n"
+#: peXXigen.c:1577
+#, fuzzy, c-format
+msgid ""
+"\n"
+"There is an export table in %s, but that section has no contents\n"
+msgstr ""
+"\n"
+"Există o tabelă de export, dar secțiunea ce o conține nu poate fi găsită\n"
-#: peigen.c:1240 pepigen.c:1240
+#: peXXigen.c:1588
+#, fuzzy, c-format
msgid ""
"\n"
-"There is a first thunk, but the section containing it could not be found\n"
+"There is an export table in %s, but it does not fit into that section\n"
msgstr ""
"\n"
-"Existã un prim thunk, dar secþiunea care îl conþine nu poate fi gãsitã\n"
+"Există o tabelă de export, dar secțiunea ce o conține nu poate fi găsită\n"
-#: peigen.c:1380 pepigen.c:1380
+#: peXXigen.c:1599
+#, fuzzy, c-format
msgid ""
"\n"
-"There is an export table, but the section containing it could not be found\n"
+"There is an export table in %s, but it is too small (%d)\n"
msgstr ""
"\n"
-"Existã o tabelã de export, dar secþiunea ce o conþine nu poate fi gãsitã\n"
+"Există o tabelă de exportare în %s la 0x%lx\n"
-#: peigen.c:1385 pepigen.c:1385
+#: peXXigen.c:1605
#, c-format
msgid ""
"\n"
"There is an export table in %s at 0x%lx\n"
msgstr ""
"\n"
-"Existã o tabelã de exportare în %s la 0x%lx\n"
+"Există o tabelă de exportare în %s la 0x%lx\n"
-#: peigen.c:1416 pepigen.c:1416
+#: peXXigen.c:1633
#, c-format
msgid ""
"\n"
@@ -2835,126 +8945,157 @@ msgid ""
"\n"
msgstr ""
"\n"
-"Tabelele de Exportare (interpretare conþinut secþiune %s)\n"
+"Tabelele de Exportare (interpretare conținut secțiune %s)\n"
"\n"
-#: peigen.c:1420 pepigen.c:1420
+#: peXXigen.c:1637
#, c-format
msgid "Export Flags \t\t\t%lx\n"
msgstr "Marcaje(Flags) Exportare \t\t\t%lx\n"
-#: peigen.c:1423 pepigen.c:1423
+#: peXXigen.c:1640
#, c-format
msgid "Time/Date stamp \t\t%lx\n"
-msgstr "Marcaj(stamp) Orã/Datã \t\t%lx\n"
+msgstr "Marcaj(stamp) Oră/Dată \t\t%lx\n"
-#: peigen.c:1426 pepigen.c:1426
+#: peXXigen.c:1644
#, c-format
msgid "Major/Minor \t\t\t%d/%d\n"
msgstr "Major/Minor \t\t\t%d/%d\n"
-#: peigen.c:1429 pepigen.c:1429
+#: peXXigen.c:1647
+#, c-format
msgid "Name \t\t\t\t"
msgstr "Nume \t\t\t\t"
-#: peigen.c:1435 pepigen.c:1435
+#: peXXigen.c:1658
#, c-format
msgid "Ordinal Base \t\t\t%ld\n"
-msgstr "Bazã Ordinalã \t\t\t%ld\n"
+msgstr "Bază Ordinală \t\t\t%ld\n"
-#: peigen.c:1438 pepigen.c:1438
+#: peXXigen.c:1661
+#, c-format
msgid "Number in:\n"
-msgstr "Numãr în:\n"
+msgstr "Număr în:\n"
-#: peigen.c:1441 pepigen.c:1441
+#: peXXigen.c:1664
#, c-format
msgid "\tExport Address Table \t\t%08lx\n"
-msgstr "\t Tabelã Exportare Adrese \t\t%08lx\n"
+msgstr "\t Tabelă Exportare Adrese \t\t%08lx\n"
-#: peigen.c:1445 pepigen.c:1445
+#: peXXigen.c:1668
#, c-format
msgid "\t[Name Pointer/Ordinal] Table\t%08lx\n"
-msgstr "\tTabelã [Nume Pointer/Ordinal]\t%08lx\n"
+msgstr "\tTabelă [Nume Pointer/Ordinal]\t%08lx\n"
-#: peigen.c:1448 pepigen.c:1448
+#: peXXigen.c:1671
+#, c-format
msgid "Table Addresses\n"
-msgstr "Adrese Tabelã\n"
+msgstr "Adrese Tabelă\n"
-#: peigen.c:1451 pepigen.c:1451
+#: peXXigen.c:1674
+#, c-format
msgid "\tExport Address Table \t\t"
-msgstr "\tTabelã Exportare de Adrese \t\t"
+msgstr "\tTabelă Exportare de Adrese \t\t"
-#: peigen.c:1456 pepigen.c:1456
+#: peXXigen.c:1679
+#, c-format
msgid "\tName Pointer Table \t\t"
-msgstr "\tNume Pointer Tabelã \t\t"
+msgstr "\tNume Pointer Tabelă \t\t"
-#: peigen.c:1461 pepigen.c:1461
+#: peXXigen.c:1684
+#, c-format
msgid "\tOrdinal Table \t\t\t"
-msgstr "\tOrdinal Tabelã \t\t\t"
+msgstr "\tOrdinal Tabelă \t\t\t"
-#: peigen.c:1476 pepigen.c:1476
+#: peXXigen.c:1698
#, c-format
msgid ""
"\n"
"Export Address Table -- Ordinal Base %ld\n"
msgstr ""
"\n"
-"Tabelã Exportare de Adrese -- Bazã Ordinalã %ld\n"
+"Tabelă Exportare de Adrese -- Bază Ordinală %ld\n"
+
+#: peXXigen.c:1707
+#, c-format
+msgid "\tInvalid Export Address Table rva (0x%lx) or entry count (0x%lx)\n"
+msgstr ""
-#: peigen.c:1495 pepigen.c:1495
+#: peXXigen.c:1726
msgid "Forwarder RVA"
-msgstr "Trimiþãtor(Forwarder) RVA"
+msgstr "Trimițător(Forwarder) RVA"
-#: peigen.c:1506 pepigen.c:1506
+#: peXXigen.c:1738
msgid "Export RVA"
msgstr "Exportare RVA"
-#: peigen.c:1513 pepigen.c:1513
+#: peXXigen.c:1745
+#, c-format
msgid ""
"\n"
"[Ordinal/Name Pointer] Table\n"
msgstr ""
"\n"
-"[Ordinal/Nume Pointer] Tabelã\n"
+"[Ordinal/Nume Pointer] Tabelă\n"
-#: peigen.c:1568 pepigen.c:1568
+#: peXXigen.c:1753
#, c-format
-msgid "Warning, .pdata section size (%ld) is not a multiple of %d\n"
-msgstr "Avertisment, mãrimea secþiunii .pdata (%ld) nu este multiplu de %d\n"
+msgid "\tInvalid Name Pointer Table rva (0x%lx) or entry count (0x%lx)\n"
+msgstr ""
-#: peigen.c:1572 pepigen.c:1572
+#: peXXigen.c:1760
+#, c-format
+msgid "\tInvalid Ordinal Table rva (0x%lx) or entry count (0x%lx)\n"
+msgstr ""
+
+#: peXXigen.c:1774
+#, c-format
+msgid "\t[%4ld] <corrupt offset: %lx>\n"
+msgstr ""
+
+#: peXXigen.c:1828 peXXigen.c:1997
+#, fuzzy, c-format
+msgid "warning, .pdata section size (%ld) is not a multiple of %d\n"
+msgstr "Avertisment, mărimea secțiunii .pdata (%ld) nu este multiplu de %d\n"
+
+#: peXXigen.c:1832 peXXigen.c:2001
+#, c-format
msgid ""
"\n"
"The Function Table (interpreted .pdata section contents)\n"
msgstr ""
"\n"
-"Tabela de Funcþii (interpretare conþinut secþiune .pdata)\n"
+"Tabela de Funcții (interpretare conținut secțiune .pdata)\n"
-#: peigen.c:1575 pepigen.c:1575
+#: peXXigen.c:1835
+#, c-format
msgid " vma:\t\t\tBegin Address End Address Unwind Info\n"
-msgstr " vma:\t\t\tAdresã Început Adresã Sfârºit Info Unwind\n"
+msgstr " vma:\t\t\tAdresă Început Adresă Sfârșit Info Unwind\n"
-#: peigen.c:1577 pepigen.c:1577
+#: peXXigen.c:1837
+#, c-format
msgid ""
" vma:\t\tBegin End EH EH PrologEnd Exception\n"
" \t\tAddress Address Handler Data Address Mask\n"
msgstr ""
-" vma:\t\tÎnceput Sfârºit EH EH PrologSfârºit Excepþii\n"
-" \t\tAdresã Adresã Manipulant Date Adresã Mascã\n"
-
-#: peigen.c:1647 pepigen.c:1647
-msgid " Register save millicode"
-msgstr " Registrul salveazã millicode "
+" vma:\t\tÎnceput Sfârșit EH EH PrologSfârșit Excepții\n"
+" \t\tAdresă Adresă Manipulant Date Adresă Mască\n"
-#: peigen.c:1650 pepigen.c:1650
-msgid " Register restore millicode"
-msgstr "Registrul reface millicode"
+#: peXXigen.c:1850
+#, c-format
+msgid "Virtual size of .pdata section (%ld) larger than real size (%ld)\n"
+msgstr ""
-#: peigen.c:1653 pepigen.c:1653
-msgid " Glue code sequence"
-msgstr "Secvenþã de cod lipitã(glue)"
+#: peXXigen.c:2003
+#, c-format
+msgid ""
+" vma:\t\tBegin Prolog Function Flags Exception EH\n"
+" \t\tAddress Length Length 32b exc Handler Data\n"
+msgstr ""
-#: peigen.c:1705 pepigen.c:1705
+#: peXXigen.c:2124
+#, c-format
msgid ""
"\n"
"\n"
@@ -2962,26 +9103,148 @@ msgid ""
msgstr ""
"\n"
"\n"
-"Relocãri Bazã Fiºier PE (interpretare conþinut secþiune .reloc)\n"
+"Relocări Bază Fișier PE (interpretare conținut secțiune .reloc)\n"
-#: peigen.c:1735 pepigen.c:1735
+#: peXXigen.c:2153
#, c-format
msgid ""
"\n"
"Virtual Address: %08lx Chunk size %ld (0x%lx) Number of fixups %ld\n"
msgstr ""
"\n"
-"Adresã Virtualã: %08lx Mãrime Trunchiere %ld (0x%lx) Numãr acceptãri %ld\n"
+"Adresă Virtuală: %08lx Mărime Trunchiere %ld (0x%lx) Număr acceptări %ld\n"
-#: peigen.c:1748 pepigen.c:1748
+#: peXXigen.c:2171
#, c-format
msgid "\treloc %4d offset %4x [%4lx] %s"
msgstr "\trelocarea %4d offset %4x [%4lx] %s"
+#: peXXigen.c:2232
+#, c-format
+msgid "%03x %*.s Entry: "
+msgstr ""
+
+#: peXXigen.c:2256
+#, c-format
+msgid "name: [val: %08lx len %d]: "
+msgstr ""
+
+#: peXXigen.c:2276
+#, fuzzy, c-format
+msgid "<corrupt string length: %#x>\n"
+msgstr "secțiune coruptă %s în %s"
+
+#: peXXigen.c:2286
+#, c-format
+msgid "<corrupt string offset: %#lx>\n"
+msgstr ""
+
+#: peXXigen.c:2291
+#, c-format
+msgid "ID: %#08lx"
+msgstr ""
+
+#: peXXigen.c:2294
+#, c-format
+msgid ", Value: %#08lx\n"
+msgstr ""
+
+#: peXXigen.c:2316
+#, c-format
+msgid "%03x %*.s Leaf: Addr: %#08lx, Size: %#08lx, Codepage: %d\n"
+msgstr ""
+
+#: peXXigen.c:2358
+#, fuzzy, c-format
+msgid "<unknown directory type: %d>\n"
+msgstr "%s: tip necunoscut de relocare %d"
+
+#: peXXigen.c:2366
+#, c-format
+msgid " Table: Char: %d, Time: %08lx, Ver: %d/%d, Num Names: %d, IDs: %d\n"
+msgstr ""
+
+#: peXXigen.c:2454
+#, fuzzy, c-format
+msgid "Corrupt .rsrc section detected!\n"
+msgstr "secțiune coruptă %s în %s"
+
+#: peXXigen.c:2478
+#, c-format
+msgid ""
+"\n"
+"WARNING: Extra data in .rsrc section - it will be ignored by Windows:\n"
+msgstr ""
+
+#: peXXigen.c:2484
+#, c-format
+msgid " String table starts at offset: %#03x\n"
+msgstr ""
+
+#: peXXigen.c:2487
+#, c-format
+msgid " Resources start at offset: %#03x\n"
+msgstr ""
+
+#: peXXigen.c:2544
+#, fuzzy, c-format
+msgid ""
+"\n"
+"There is a debug directory, but the section containing it could not be found\n"
+msgstr ""
+"\n"
+"Există un prim thunk, dar secțiunea care îl conține nu poate fi găsită\n"
+
+#: peXXigen.c:2550
+#, fuzzy, c-format
+msgid ""
+"\n"
+"There is a debug directory in %s, but that section has no contents\n"
+msgstr ""
+"\n"
+"Există un prim thunk, dar secțiunea care îl conține nu poate fi găsită\n"
+
+#: peXXigen.c:2557
+#, c-format
+msgid ""
+"\n"
+"Error: section %s contains the debug data starting address but it is too small\n"
+msgstr ""
+
+#: peXXigen.c:2562
+#, fuzzy, c-format
+msgid ""
+"\n"
+"There is a debug directory in %s at 0x%lx\n"
+"\n"
+msgstr ""
+"\n"
+"Există o tabelă de importare în %s la 0x%lx\n"
+
+#: peXXigen.c:2569
+#, c-format
+msgid "The debug data size field in the data directory is too big for the section"
+msgstr ""
+
+#: peXXigen.c:2574
+#, c-format
+msgid "Type Size Rva Offset\n"
+msgstr ""
+
+#: peXXigen.c:2621
+#, c-format
+msgid "(format %c%c%c%c signature %s age %ld)\n"
+msgstr ""
+
+#: peXXigen.c:2631
+#, c-format
+msgid "The debug directory size is not a multiple of the debug directory entry size\n"
+msgstr ""
+
#. The MS dumpbin program reportedly ands with 0xff0f before
#. printing the characteristics field. Not sure why. No reason to
#. emulate it here.
-#: peigen.c:1788 pepigen.c:1788
+#: peXXigen.c:2715
#, c-format
msgid ""
"\n"
@@ -2990,38 +9253,91 @@ msgstr ""
"\n"
"Caracteristici 0x%x\n"
-#~ msgid "%s: Unknown special linker type %d"
-#~ msgstr "%s: Tip special necunoscut de linker %d"
+#: peXXigen.c:2992
+#, c-format
+msgid "%pB: Data Directory (%lx bytes at %<PRIx64>) extends across section boundary at %<PRIx64>"
+msgstr ""
-#~ msgid "v850ea architecture"
-#~ msgstr "arhitecturã v850ea"
+#: peXXigen.c:3029
+msgid "failed to update file offsets in debug directory"
+msgstr ""
-#~ msgid "%s: Section %s is too large to add hole of %ld bytes"
-#~ msgstr "%s: Secþiunea %s este prea mare pentru a adãuga o gaurã de %ld octeþi"
+#: peXXigen.c:3037
+#, c-format
+msgid "%pB: failed to read debug data section"
+msgstr ""
-#~ msgid "Error: out of memory"
-#~ msgstr "Eroare: memorie plinã"
+#: peXXigen.c:3836
+#, c-format
+msgid ".rsrc merge failure: duplicate string resource: %d"
+msgstr ""
-#~ msgid "warning: relocation against removed section; zeroing"
-#~ msgstr "avertisment: relocare pe secþiune eliminatã; se umple cu zero(zeroing)"
+#: peXXigen.c:3971
+msgid ".rsrc merge failure: multiple non-default manifests"
+msgstr ""
-#~ msgid "warning: relocation against removed section"
-#~ msgstr "avertisment: relocare pe secþiune eliminatã"
+#: peXXigen.c:3989
+msgid ".rsrc merge failure: a directory matches a leaf"
+msgstr ""
-#~ msgid "local symbols in discarded section %s"
-#~ msgstr "simboluri locale în secþiunea îndepãrtatã(discarded) %s"
+#: peXXigen.c:4031
+msgid ".rsrc merge failure: duplicate leaf"
+msgstr ""
-#~ msgid "%s: linking abicalls files with non-abicalls files"
-#~ msgstr "%s: linkuire fiºiere abicalls cu fiºiere non-abicalls"
+#: peXXigen.c:4036
+#, c-format
+msgid ".rsrc merge failure: duplicate leaf: %s"
+msgstr ""
-#~ msgid "%s: ISA mismatch (-mips%d) with previous modules (-mips%d)"
-#~ msgstr "%s: nepotrivire ISA (-mips%d) cu modulele anterioare (-mips%d)"
+#: peXXigen.c:4103
+msgid ".rsrc merge failure: dirs with differing characteristics"
+msgstr ""
-#~ msgid "%s: ISA mismatch (%d) with previous modules (%d)"
-#~ msgstr "%s: nepotrivire ISA (%d) cu modulele anterioare (%d)"
+#: peXXigen.c:4110
+msgid ".rsrc merge failure: differing directory versions"
+msgstr ""
+
+#. Corrupted .rsrc section - cannot merge.
+#: peXXigen.c:4227
+#, c-format
+msgid "%pB: .rsrc merge failure: corrupt .rsrc section"
+msgstr ""
+
+#: peXXigen.c:4235
+#, c-format
+msgid "%pB: .rsrc merge failure: unexpected .rsrc size"
+msgstr ""
+
+#: peXXigen.c:4374
+#, c-format
+msgid "%pB: unable to fill in DataDictionary[1] because .idata$2 is missing"
+msgstr ""
+
+#: peXXigen.c:4394
+#, c-format
+msgid "%pB: unable to fill in DataDictionary[1] because .idata$4 is missing"
+msgstr ""
+
+#: peXXigen.c:4415
+#, c-format
+msgid "%pB: unable to fill in DataDictionary[12] because .idata$5 is missing"
+msgstr ""
+
+#: peXXigen.c:4435
+#, c-format
+msgid "%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)] because .idata$6 is missing"
+msgstr ""
+
+#: peXXigen.c:4477
+#, c-format
+msgid "%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE(12)] because .idata$6 is missing"
+msgstr ""
-#~ msgid "%s: dynamic relocation against speculation fixup"
-#~ msgstr "%s: relocare dinamicã pe acceptare(fixup) speculativã"
+#: peXXigen.c:4502
+#, c-format
+msgid "%pB: unable to fill in DataDictionary[9] because __tls_used is missing"
+msgstr ""
-#~ msgid "%s: speculation fixup against undefined weak symbol"
-#~ msgstr "%s: speculaþie acceptare(fixup) pe simbol ambiguu(weak) nedefinit"
+#, fuzzy
+#~ msgid "internal error: RL78 reloc stack overflow"
+#~ msgstr "eroare internă: eroare depășire de domeniu(out of range)"
diff --git a/bfd/po/sr.po b/bfd/po/sr.po
index eb80c2c5430..3468a819220 100644
--- a/bfd/po/sr.po
+++ b/bfd/po/sr.po
@@ -1,13 +1,13 @@
# Serbian translation of bfd.
# Copyright © 2014 Free Software Foundation, Inc.
# This file is distributed under the same license as the binutils package.
-# МироÑлав Ðиколић <miroslavnikolic@rocketmail.com>, 2016–2021.
+# МироÑлав Ðиколић <miroslavnikolic@rocketmail.com>, 2016–2022.
msgid ""
msgstr ""
-"Project-Id-Version: bfd-2.36.90\n"
-"Report-Msgid-Bugs-To: bug-binutils@gnu.org\n"
-"POT-Creation-Date: 2021-07-03 15:02+0100\n"
-"PO-Revision-Date: 2021-07-24 06:30+0200\n"
+"Project-Id-Version: bfd-2.37.90\n"
+"Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n"
+"POT-Creation-Date: 2022-01-22 12:19+0000\n"
+"PO-Revision-Date: 2022-02-16 06:03+0200\n"
"Last-Translator: МироÑлав Ðиколић <miroslavnikolic@rocketmail.com>\n"
"Language-Team: Serbian <(nothing)>\n"
"Language: sr\n"
@@ -32,26 +32,26 @@ msgstr "%pB: неподржана врÑта премештања је увезÐ
msgid "%pB: bad relocation record imported: %d"
msgstr "%pB: увезен је лош Ñнимак премештања: %d"
-#: aoutx.h:1265 aoutx.h:1613 pdp11.c:1238 pdp11.c:1512
+#: aoutx.h:1265 aoutx.h:1612 pdp11.c:1238 pdp11.c:1511
#, c-format
msgid "%pB: can not represent section `%pA' in a.out object file format"
msgstr "%pB: не могу да предÑтавим одељак „%pA“ у „a.out“ запиÑу датотеке објекта"
-#: aoutx.h:1577 pdp11.c:1484
+#: aoutx.h:1576 pdp11.c:1483
#, c-format
msgid "%pB: can not represent section for symbol `%s' in a.out object file format"
msgstr "%pB: не могу да предÑтавим одељак за Ñимбол „%s“ у „a.out“ запиÑу датотеке објекта"
-#: aoutx.h:1580 vms-alpha.c:8038
+#: aoutx.h:1579 vms-alpha.c:8282
msgid "*unknown*"
msgstr "*непознато*"
-#: aoutx.h:1716 pdp11.c:1580
+#: aoutx.h:1715 pdp11.c:1579
#, c-format
msgid "%pB: invalid string offset %<PRIu64> >= %<PRIu64>"
msgstr "%pB: неиÑправан померај ниÑке „%<PRIu64> >= %<PRIu64>“"
-#: aoutx.h:1963
+#: aoutx.h:1962
#, c-format
msgid "%pB: unsupported AOUT relocation size: %d"
msgstr "%pB: неподржана величина „AOUT“ премештања: %d"
@@ -67,37 +67,37 @@ msgid "%pB: unsupported relocation type"
msgstr "%pB: врÑта премештања није подржана"
#. Unknown relocation.
-#: aoutx.h:4405 coff-alpha.c:601 coff-alpha.c:1518 coff-rs6000.c:2916
-#: coff-sh.c:504 coff-tic4x.c:184 coff-tic54x.c:279 elf-hppa.h:798
-#: elf-hppa.h:826 elf-m10200.c:226 elf-m10300.c:813 elf32-arc.c:532
-#: elf32-arm.c:1985 elf32-avr.c:962 elf32-bfin.c:1062 elf32-bfin.c:4687
-#: elf32-cr16.c:654 elf32-cr16.c:684 elf32-cris.c:467 elf32-crx.c:429
-#: elf32-csky.c:991 elf32-d10v.c:234 elf32-d30v.c:522 elf32-d30v.c:544
-#: elf32-dlx.c:546 elf32-epiphany.c:372 elf32-fr30.c:381 elf32-frv.c:2559
-#: elf32-frv.c:6240 elf32-ft32.c:305 elf32-h8300.c:302 elf32-i386.c:400
-#: elf32-ip2k.c:1240 elf32-iq2000.c:442 elf32-lm32.c:496 elf32-m32c.c:305
-#: elf32-m32r.c:1286 elf32-m32r.c:1311 elf32-m32r.c:2209 elf32-m68hc11.c:390
-#: elf32-m68hc12.c:510 elf32-m68k.c:354 elf32-mcore.c:354 elf32-mcore.c:440
-#: elf32-mep.c:385 elf32-metag.c:871 elf32-microblaze.c:690
+#: aoutx.h:4405 coff-alpha.c:601 coff-alpha.c:1518 coff-mips.c:356
+#: coff-rs6000.c:2959 coff-sh.c:504 coff-tic4x.c:184 coff-tic54x.c:279
+#: elf-hppa.h:798 elf-hppa.h:826 elf-m10200.c:226 elf-m10300.c:813
+#: elf32-arc.c:532 elf32-arm.c:1985 elf32-avr.c:962 elf32-bfin.c:1066
+#: elf32-bfin.c:4690 elf32-cr16.c:654 elf32-cr16.c:684 elf32-cris.c:467
+#: elf32-crx.c:429 elf32-csky.c:991 elf32-d10v.c:234 elf32-d30v.c:522
+#: elf32-d30v.c:544 elf32-dlx.c:546 elf32-epiphany.c:372 elf32-fr30.c:381
+#: elf32-frv.c:2559 elf32-frv.c:6240 elf32-ft32.c:305 elf32-h8300.c:302
+#: elf32-i386.c:394 elf32-ip2k.c:1240 elf32-iq2000.c:442 elf32-lm32.c:496
+#: elf32-m32c.c:305 elf32-m32r.c:1286 elf32-m32r.c:1311 elf32-m32r.c:2209
+#: elf32-m68hc11.c:390 elf32-m68hc12.c:510 elf32-m68k.c:354 elf32-mcore.c:354
+#: elf32-mcore.c:440 elf32-mep.c:385 elf32-metag.c:871 elf32-microblaze.c:690
#: elf32-microblaze.c:961 elf32-mips.c:2231 elf32-moxie.c:137
-#: elf32-msp430.c:737 elf32-msp430.c:747 elf32-mt.c:241 elf32-nds32.c:3237
-#: elf32-nds32.c:3263 elf32-nds32.c:5029 elf32-nios2.c:3019 elf32-or1k.c:1070
-#: elf32-pj.c:326 elf32-ppc.c:898 elf32-ppc.c:911 elf32-pru.c:423
-#: elf32-rl78.c:291 elf32-rx.c:313 elf32-rx.c:322 elf32-s12z.c:296
-#: elf32-s390.c:347 elf32-score.c:2392 elf32-score7.c:2231 elf32-sh.c:437
+#: elf32-msp430.c:737 elf32-msp430.c:747 elf32-mt.c:241 elf32-nds32.c:3234
+#: elf32-nds32.c:3255 elf32-nds32.c:5024 elf32-nios2.c:3019 elf32-or1k.c:1070
+#: elf32-pj.c:326 elf32-ppc.c:900 elf32-ppc.c:913 elf32-pru.c:423
+#: elf32-rl78.c:291 elf32-rx.c:324 elf32-rx.c:333 elf32-s12z.c:296
+#: elf32-s390.c:347 elf32-score.c:2383 elf32-score7.c:2224 elf32-sh.c:437
#: elf32-spu.c:163 elf32-tic6x.c:1498 elf32-tic6x.c:1508 elf32-tic6x.c:1527
#: elf32-tic6x.c:1537 elf32-tic6x.c:2583 elf32-tilepro.c:792 elf32-v850.c:1902
#: elf32-v850.c:1924 elf32-v850.c:4249 elf32-vax.c:289 elf32-visium.c:481
#: elf32-wasm32.c:105 elf32-xc16x.c:250 elf32-xgate.c:418
#: elf32-xstormy16.c:395 elf32-xtensa.c:522 elf32-xtensa.c:556 elf32-z80.c:331
-#: elf64-alpha.c:1114 elf64-alpha.c:4072 elf64-alpha.c:4220 elf64-bpf.c:325
-#: elf64-ia64-vms.c:255 elf64-ia64-vms.c:3431 elf64-mips.c:3958
-#: elf64-mips.c:3974 elf64-mmix.c:1264 elf64-nfp.c:238 elf64-ppc.c:1021
-#: elf64-ppc.c:1373 elf64-ppc.c:1382 elf64-s390.c:328 elf64-s390.c:378
-#: elf64-x86-64.c:279 elfn32-mips.c:3788 elfxx-ia64.c:324 elfxx-riscv.c:970
-#: elfxx-sparc.c:589 elfxx-sparc.c:639 elfxx-tilegx.c:907 elfxx-tilegx.c:947
-#: elfnn-aarch64.c:2215 elfnn-aarch64.c:2313 elfnn-ia64.c:214
-#: elfnn-ia64.c:3820
+#: elf64-alpha.c:1114 elf64-alpha.c:4073 elf64-alpha.c:4221 elf64-bpf.c:325
+#: elf64-ia64-vms.c:255 elf64-ia64-vms.c:3425 elf64-mips.c:3958
+#: elf64-mips.c:3974 elf64-mmix.c:1264 elf64-nfp.c:238 elf64-ppc.c:1027
+#: elf64-ppc.c:1381 elf64-ppc.c:1390 elf64-s390.c:328 elf64-s390.c:378
+#: elf64-x86-64.c:268 elfn32-mips.c:3788 elfxx-ia64.c:324
+#: elfxx-loongarch.c:632 elfxx-riscv.c:969 elfxx-sparc.c:589 elfxx-sparc.c:639
+#: elfxx-tilegx.c:907 elfxx-tilegx.c:947 elfnn-aarch64.c:2215
+#: elfnn-aarch64.c:2313 elfnn-ia64.c:214 elfnn-ia64.c:3820
#, c-format
msgid "%pB: unsupported relocation type %#x"
msgstr "%pB: врÑта премештања није подржана „%#x“"
@@ -112,132 +112,136 @@ msgstr "%pB: премеÑтива веза Ñа „%s“ на „%s“ није
msgid "%pB: cannot allocate memory for local GOT entries"
msgstr "%pB: не могу да доделим меморију за локалне „GOT“ уноÑе"
-#: archive.c:2241
+#: archive.c:743
+msgid "%F%P: %pB(%s): error opening thin archive member: %E\n"
+msgstr "%F%P: %pB(%s): грешка отварања мајушног члана архиве: %E\n"
+
+#: archive.c:2272
msgid "warning: writing archive was slow: rewriting timestamp"
msgstr "упозорење: ÑƒÐ¿Ð¸Ñ Ñƒ архиву је Ñпор: поново упиÑујем време"
-#: archive.c:2308 archive.c:2368 elflink.c:4611 linker.c:1427
+#: archive.c:2339 archive.c:2400 elflink.c:4756 linker.c:1429
#, c-format
msgid "%pB: plugin needed to handle lto object"
msgstr "%pB: потребан је прикључак за руковање „lto“ објектом"
-#: archive.c:2594
+#: archive.c:2626
msgid "Reading archive file mod timestamp"
msgstr "Читам време режима датотеке архиве"
-#: archive.c:2618
+#: archive.c:2650
msgid "Writing updated armap timestamp"
msgstr "УпиÑујем оÑвежено време армапа"
-#: bfd.c:681
+#: bfd.c:690
msgid "no error"
msgstr "нема грешке"
-#: bfd.c:682
+#: bfd.c:691
msgid "system call error"
msgstr "грешка ÑиÑтемÑког позива"
-#: bfd.c:683
+#: bfd.c:692
msgid "invalid bfd target"
msgstr "неиÑправан циљ бфд-а"
-#: bfd.c:684
+#: bfd.c:693
msgid "file in wrong format"
msgstr "датотека је у погрешном запиÑу"
-#: bfd.c:685
+#: bfd.c:694
msgid "archive object file in wrong format"
msgstr "датотека објекта архиве је у погрешном запиÑу"
-#: bfd.c:686
+#: bfd.c:695
msgid "invalid operation"
msgstr "неиÑправна операција"
-#: bfd.c:687
+#: bfd.c:696
msgid "memory exhausted"
msgstr "меморија је иÑцрпљена"
-#: bfd.c:688
+#: bfd.c:697
msgid "no symbols"
msgstr "нема Ñимбола"
-#: bfd.c:689
+#: bfd.c:698
msgid "archive has no index; run ranlib to add one"
msgstr "архива нема индекÑ; покрените „ranlib“ да га додате"
-#: bfd.c:690
+#: bfd.c:699
msgid "no more archived files"
msgstr "нема више архивираних датотека"
-#: bfd.c:691
+#: bfd.c:700
msgid "malformed archive"
msgstr "лоша архива"
-#: bfd.c:692
+#: bfd.c:701
msgid "DSO missing from command line"
msgstr "„DSO“ недоÑтаје на линији наредби"
-#: bfd.c:693
+#: bfd.c:702
msgid "file format not recognized"
msgstr "Ð·Ð°Ð¿Ð¸Ñ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ није препознат"
-#: bfd.c:694
+#: bfd.c:703
msgid "file format is ambiguous"
msgstr "Ð·Ð°Ð¿Ð¸Ñ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ је нејаÑан"
-#: bfd.c:695
+#: bfd.c:704
msgid "section has no contents"
msgstr "одељак нема Ñадржаје"
-#: bfd.c:696
+#: bfd.c:705
msgid "nonrepresentable section on output"
msgstr "на излазу је одељак који Ñе не може приказати"
-#: bfd.c:697
+#: bfd.c:706
msgid "symbol needs debug section which does not exist"
msgstr "Ñимболу је потребан одељак за уклањање грешака који не поÑтоји"
-#: bfd.c:698
+#: bfd.c:707
msgid "bad value"
msgstr "погрешна вредноÑÑ‚"
-#: bfd.c:699
+#: bfd.c:708
msgid "file truncated"
msgstr "датотека је окрњена"
-#: bfd.c:700
+#: bfd.c:709
msgid "file too big"
msgstr "датотека је превелика"
-#: bfd.c:701
+#: bfd.c:710
msgid "sorry, cannot handle this file"
msgstr "извините, не могу да радим Ñа овом датотеком"
-#: bfd.c:702
+#: bfd.c:711
#, c-format
msgid "error reading %s: %s"
msgstr "грешка читања „%s“: %s"
-#: bfd.c:703
+#: bfd.c:712
msgid "#<invalid error code>"
msgstr "#<неиÑправан код грешке>"
-#: bfd.c:1640
+#: bfd.c:1649
#, c-format
msgid "BFD %s assertion fail %s:%d"
msgstr "„BFD“ „%s“ тврдња није уÑпела „%s“:%d"
-#: bfd.c:1653
+#: bfd.c:1662
#, c-format
msgid "BFD %s internal error, aborting at %s:%d in %s\n"
msgstr "Унутрашња грешка „BFD“ %s, прекидам на „%s“ %d. реду у „%s“\n"
-#: bfd.c:1658
+#: bfd.c:1667
#, c-format
msgid "BFD %s internal error, aborting at %s:%d\n"
msgstr "Унутрашња грешка „BFD“ %s, прекидам при „%s“ %d. реду\n"
-#: bfd.c:1660
+#: bfd.c:1669
msgid "Please report this bug.\n"
msgstr "Пријавите ову грешку.\n"
@@ -266,7 +270,7 @@ msgstr "поново отварам „%pB“: %s\n"
msgid "%pB: cannot handle compressed Alpha binaries; use compiler flags, or objZ, to generate uncompressed binaries"
msgstr "%pB: не могу да радим Ñа Ñажетим бинарним Ðлфа датотекама; кориÑтите заÑтавице преводиоца, или „objZ“, да Ñтворите неÑажете бинарне датотеке"
-#: coff-alpha.c:856 coff-alpha.c:893 coff-alpha.c:1960 coff-mips.c:953
+#: coff-alpha.c:856 coff-alpha.c:893 coff-alpha.c:1960 coff-mips.c:960
msgid "GP relative relocation used when GP not defined"
msgstr "употребљено је релативно премештање општег показивача када није дефиниÑан"
@@ -274,18 +278,18 @@ msgstr "употребљено је релативно премештање оп
msgid "using multiple gp values"
msgstr "кориÑтим неколико вредноÑти општег показивача"
-#: coff-alpha.c:1505 coff-alpha.c:1511 elf.c:9463 elf32-mcore.c:100
-#: elf32-mcore.c:455 elf32-ppc.c:7614 elf32-ppc.c:8763 elf64-ppc.c:16242
+#: coff-alpha.c:1505 coff-alpha.c:1511 elf.c:9527 elf32-mcore.c:100
+#: elf32-mcore.c:455 elf32-ppc.c:7649 elf32-ppc.c:8841 elf64-ppc.c:16679
#, c-format
msgid "%pB: %s unsupported"
msgstr "%pB: „%s“ није подржано"
-#: coff-go32.c:156 coffswap.h:792
+#: coff-go32.c:164 coffswap.h:819
#, c-format
msgid "%pB: warning: %s: line number overflow: 0x%lx > 0xffff"
msgstr "%pB: упозорење: %s: прекорачење броја редова: 0x%lx > 0xffff"
-#: coff-mips.c:643 elf32-mips.c:1744 elf32-score.c:433 elf32-score7.c:333
+#: coff-mips.c:650 elf32-mips.c:1744 elf32-score.c:433 elf32-score7.c:333
#: elf64-mips.c:3451 elfn32-mips.c:3278
msgid "GP relative relocation when _gp not defined"
msgstr "Релативно премештање општег показивача када „_gp“ није дефиниÑано"
@@ -295,29 +299,32 @@ msgstr "Релативно премештање општег показивачÐ
msgid "%pB: unsupported swap_aux_in for storage class %#x"
msgstr "%pB: неподржано „swap_aux_in“ за Ñмештајну клаÑу „%#x“"
-#: coff-rs6000.c:570 coff64-rs6000.c:499
+#: coff-rs6000.c:571 coff64-rs6000.c:497
#, c-format
msgid "%pB: unsupported swap_aux_out for storage class %#x"
msgstr "%pB: неподржано „swap_aux_out“ за Ñмештајну клаÑу „%#x“"
-#: coff-rs6000.c:3002
+#: coff-rs6000.c:3045
#, c-format
msgid "%pB: TOC reloc at %#<PRIx64> to symbol `%s' with no TOC entry"
msgstr "%pB: премештање табеле Ñадржаја Ñа „%#<PRIx64>“ на Ñимбол „%s“ без уноÑа табеле Ñадржаја"
-#: coff-rs6000.c:3209 coff-rs6000.c:3220
-msgid "%pB: TLS relocation at (0x%"
-msgstr "%pB: ТЛС премештање на (0x%"
+#: coff-rs6000.c:3260
+#, c-format
+msgid "%pB: TLS relocation at 0x%s over non-TLS symbol %s (0x%x)\n"
+msgstr "%pB: ТЛС премештање на 0x%s преко не-ТЛС Ñимбола „%s“ (0x%x)\n"
-#: coff-rs6000.c:3234
-msgid "%pB: TLS local relocation at (0x%"
-msgstr "%pB: ТЛС локално премештање на (0x%"
+#: coff-rs6000.c:3276
+#, c-format
+msgid "%pB: TLS local relocation at 0x%s over imported symbol %s\n"
+msgstr "%pB: ТЛС локално премештање на 0x%s преко увезеног Ñимбола „%s“\n"
-#: coff-rs6000.c:3642 coff64-rs6000.c:1573
-msgid "%pB: relocatation (%d) at (0x%"
-msgstr "%pB: премештање (%d) на (0x%"
+#: coff-rs6000.c:3686
+#, c-format
+msgid "%pB: relocation (%d) at 0x%s has wrong r_rsize (0x%x)\n"
+msgstr "%pB: премештање (%d) на 0x%s има погрешн r_r-величину (0x%x)\n"
-#: coff-rs6000.c:3905 coff64-rs6000.c:2023
+#: coff-rs6000.c:3949 coff64-rs6000.c:2000
#, c-format
msgid "%pB: symbol `%s' has unrecognized smclas %d"
msgstr "%pB: Ñимбол „%s“ има непознату клаÑу Ñимбола „%d“"
@@ -367,44 +374,49 @@ msgstr "%pB: %#<PRIx64>: кобна грешка: прекорачење преÐ
msgid "%pB: fatal: generic symbols retrieved before relaxing"
msgstr "%pB: кобно: општи Ñимболи Ñу пронађени пре опуштања"
-#: coff-sh.c:2781 cofflink.c:2959
+#: coff-sh.c:2781 cofflink.c:2963
#, c-format
msgid "%pB: illegal symbol index %ld in relocs"
msgstr "%pB: неиÑправан Ð¸Ð½Ð´ÐµÐºÑ Ñимбола %ld у премештањима"
-#: coff-tic4x.c:228 coff-tic54x.c:366 coffcode.h:5124
+#: coff-tic30.c:172 coff-tic4x.c:228 coff-tic54x.c:366 coff-z80.c:325
+#: coff-z8k.c:188 coffcode.h:5157
#, c-format
msgid "%pB: warning: illegal symbol index %ld in relocs"
msgstr "%pB: упозорење: неиÑправан Ð¸Ð½Ð´ÐµÐºÑ Ñимбола %ld у премештањима"
-#: coff64-rs6000.c:449 coff64-rs6000.c:555
+#: coff64-rs6000.c:447 coff64-rs6000.c:554
#, c-format
msgid "%pB: C_STAT isn't supported by XCOFF64"
msgstr "%pB: „C_STAT“ није подржано „XCOFF64“-ом"
-#: coff64-rs6000.c:479
+#: coff64-rs6000.c:477
#, c-format
msgid "%pB: wrong auxtype %#x for storage class %#x"
msgstr "%pB: погрешна „aux“ врÑта %#x за Ñмештајну клаÑу %#x"
-#: coffcode.h:986
+#: coff64-rs6000.c:1572
+msgid "%pB: relocation (%d) at (0x%"
+msgstr "%pB: премештање (%d) на (0x%"
+
+#: coffcode.h:990
#, c-format
msgid "%pB: unable to load COMDAT section name"
msgstr "%pB: не могу да учитам „COMDAT“ назив одељка"
#. Malformed input files can trigger this test.
#. cf PR 21781.
-#: coffcode.h:1021
+#: coffcode.h:1025
#, c-format
msgid "%pB: error: unexpected symbol '%s' in COMDAT section"
msgstr "%pB: грешка: неочекивани Ñимбол „%s“ у „COMDAT“ одељку"
-#: coffcode.h:1033
+#: coffcode.h:1037
#, c-format
msgid "%pB: warning: COMDAT symbol '%s' does not match section name '%s'"
msgstr "%pB: упозорење: „COMDAT“ Ñимбол „%s“ Ñе не подудара Ñа називом одељка „%s“"
-#: coffcode.h:1043
+#: coffcode.h:1047
#, c-format
msgid "%pB: warning: no symbol for section '%s' found"
msgstr "%pB: упозорење: ниÑам нашао никакав Ñимбол за одељак „%s“"
@@ -412,87 +424,87 @@ msgstr "%pB: упозорење: ниÑам нашао никакав Ñимбо
#. 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:1274
+#: coffcode.h:1278
#, c-format
msgid "%pB: warning: ignoring section flag %s in section %s"
msgstr "%pB: упозорење: занемарујем заÑтавицу одељка „%s“ у одељку „%s“"
-#: coffcode.h:1343
+#: coffcode.h:1347
#, c-format
msgid "%pB (%s): section flag %s (%#lx) ignored"
msgstr "%pB (%s): заÑтавица одељка „%s“ (%#lx) је занемарена"
-#: coffcode.h:1959 coffcode.h:2024
+#: coffcode.h:1960
+#, c-format
+msgid "%pB: overflow reloc count too small"
+msgstr "%pB: број премештања прекорачења је превише мали"
+
+#: coffcode.h:1969 coffcode.h:2034
#, c-format
msgid "%pB: warning: claims to have 0xffff relocs, without overflow"
msgstr "%pB: упозорење: потврђујем 0xffff премештања, без прекорачења"
-#: coffcode.h:2385
+#: coffcode.h:2401
#, c-format
msgid "unrecognized TI COFF target id '0x%x'"
msgstr "непознат ид „TI COFF“ циља „0x%x“"
-#: coffcode.h:2663
+#: coffcode.h:2679
#, c-format
msgid "%pB: reloc against a non-existent symbol index: %ld"
msgstr "%pB: премештање наÑпрам непоÑтојећег индекÑа Ñимбола: %ld"
-#: coffcode.h:2961
+#: coffcode.h:2983
#, c-format
msgid "%pB: page size is too large (0x%x)"
msgstr "%pB: величина Ñтранице је превелика (0x%x)"
-#: coffcode.h:3121
+#: coffcode.h:3143
#, c-format
msgid "%pB: too many sections (%d)"
msgstr "%pB: превише одељака (%d)"
-#: coffcode.h:3548
+#: coffcode.h:3570
#, c-format
msgid "%pB: section %pA: string table overflow at offset %ld"
msgstr "%pB: одељак „%pA“: прекорачење табеле ниÑки на померају %ld"
-#: coffcode.h:3655
+#: coffcode.h:3677
#, c-format
msgid "%pB:%s section %s: alignment 2**%u not representable"
msgstr "%pB:%s одељак %s: поравнање 2**%u Ñе не може предÑтавити"
-#: coffcode.h:4358
-#, c-format
-msgid "%pB: warning: line number count (%#lx) exceeds section size (%#lx)"
-msgstr "%pB: упозорење: број редова (%#lx) превазилази величину одељка (%#lx)"
-
-#: coffcode.h:4378
+#: coffcode.h:4393
#, c-format
msgid "%pB: warning: line number table read failed"
msgstr "%pB: упозорење: није уÑпело читање броја реда табеле"
-#: coffcode.h:4412 coffcode.h:4426
+#: coffcode.h:4439 coffcode.h:4453
#, c-format
msgid "%pB: warning: illegal symbol index 0x%lx in line number entry %d"
msgstr "%pB: упозорење: неиÑправан Ð¸Ð½Ð´ÐµÐºÑ Ñимбола 0x%lx у уноÑу броја реда %d"
-#: coffcode.h:4440
+#: coffcode.h:4467
#, c-format
msgid "%pB: warning: illegal symbol in line number entry %d"
msgstr "%pB: упозорење: неиÑправан Ð¸Ð½Ð´ÐµÐºÑ Ñимбола у уноÑу броја реда %d"
-#: coffcode.h:4453
+#: coffcode.h:4480
#, c-format
msgid "%pB: warning: duplicate line number information for `%s'"
msgstr "%pB: упозорење: удвоÑтручени податак о броју реда за „%s“"
-#: coffcode.h:4874
+#: coffcode.h:4901
#, c-format
msgid "%pB: unrecognized storage class %d for %s symbol `%s'"
msgstr "%pB: непозната клаÑа Ñмештаја „%d“ за „%s“ Ñимбол „%s“"
-#: coffcode.h:5014
+#: coffcode.h:5041
#, c-format
msgid "warning: %pB: local symbol `%s' has no section"
msgstr "упозорење: %pB: локални Ñимбол „%s“ нема одељак"
-#: coffcode.h:5164
+#: coffcode.h:5197
#, c-format
msgid "%pB: illegal relocation type %d at address %#<PRIx64>"
msgstr "%pB: неиÑправна врÑта премештања %d на адреÑи %#<PRIx64>"
@@ -507,31 +519,31 @@ msgstr "%pB: не могу да започнем Ñтање Ñажимања зÐ
msgid "%pB: unable to initialize decompress status for section %s"
msgstr "%pB: не могу да започнем Ñтање раÑпакивања за одељак „%s“"
-#: coffgen.c:1706
+#: coffgen.c:1760
#, c-format
msgid "%pB: bad string table size %<PRIu64>"
msgstr "%pB: лоша величина табеле низа %<PRIu64>"
-#: coffgen.c:1878 coffgen.c:1938 coffgen.c:1956 cofflink.c:2024 elf.c:1936
-#: xcofflink.c:4540
+#: coffgen.c:1932 coffgen.c:1976 coffgen.c:2025 coffgen.c:2043 cofflink.c:2024
+#: elf.c:1939 xcofflink.c:4658
msgid "<corrupt>"
msgstr "<оштећење>"
-#: coffgen.c:2087
+#: coffgen.c:2176
#, c-format
msgid "<corrupt info> %s"
msgstr "<оштећени подаци> %s"
-#: coffgen.c:2684 elflink.c:14829 linker.c:2965
+#: coffgen.c:2781 elflink.c:15042 linker.c:2967
msgid "%F%P: already_linked_table: %E\n"
msgstr "%F%P: већ_повезана_табела: %E\n"
-#: coffgen.c:3026 elflink.c:13816
+#: coffgen.c:3123 elflink.c:14017
#, c-format
msgid "removing unused section '%pA' in file '%pB'"
msgstr "уклањам некоришћени одељак „%pA“ у датотеци „%pB“"
-#: coffgen.c:3103 elflink.c:14036
+#: coffgen.c:3200 elflink.c:14247
msgid "warning: gc-sections option ignored"
msgstr "упозорење: опција „gc“ одељака је занемарена"
@@ -540,7 +552,7 @@ msgstr "упозорење: опција „gc“ одељака је занем
msgid "warning: symbol `%s' is both section and non-section"
msgstr "упозорење: Ñимбол „%s“ је и одељак и није одељак"
-#: cofflink.c:471 elf64-ia64-vms.c:5202 elflink.c:5207
+#: cofflink.c:471 elf64-ia64-vms.c:5196 elflink.c:5353
#, c-format
msgid "warning: type of symbol `%s' changed from %d to %d in %pB"
msgstr "упозорење: врÑта Ñимбола „%s“ је измењена из „%d“ у „%d“ за „%pB“"
@@ -550,51 +562,52 @@ msgstr "упозорење: врÑта Ñимбола „%s“ је измење
msgid "%pB: relocs in section `%pA', but it has no contents"
msgstr "%pB: премештања у одељку „%pA“, али нема никаквог Ñадржаја"
-#: cofflink.c:2415 elflink.c:11342
+#: cofflink.c:2415 elflink.c:11470
#, c-format
msgid "%X`%s' referenced in section `%pA' of %pB: defined in discarded section `%pA' of %pB\n"
msgstr "%X„%s“ је упутно у одељку „%pA“ од „%pB“: дефиниÑано је у одбаченом одељку „%pA“ од „%pB“\n"
-#: cofflink.c:2610
-msgid "%pB: stripping non-representable symbol '%s' (value %"
-msgstr "%pB: уклањам непредÑтављајући Ñимбол „%s“ (вредноÑÑ‚ %"
+#: cofflink.c:2614
+#, c-format
+msgid "%pB: stripping non-representable symbol '%s' (value 0x%s)"
+msgstr "%pB: уклањам непредÑтављајући Ñимбол „%s“ (вредноÑÑ‚ 0x%s)"
-#: cofflink.c:2728
+#: cofflink.c:2732
#, c-format
msgid "%pB: %pA: reloc overflow: %#x > 0xffff"
msgstr "%pB: %pA: прекорачење премештања: %#x > 0xffff"
-#: cofflink.c:2736
+#: cofflink.c:2740
#, c-format
msgid "%pB: warning: %pA: line number overflow: %#x > 0xffff"
msgstr "%pB: упозорење: %pA: прекорачење броја редова: %#x > 0xffff"
-#: cofflink.c:3127
+#: cofflink.c:3131
#, c-format
msgid "%pB: bad reloc address %#<PRIx64> in section `%pA'"
msgstr "%pB: погрешна адреÑа премештања %#<PRIx64> у одељку „%pA“"
-#: coffswap.h:806
+#: coffswap.h:833
#, c-format
msgid "%pB: %s: reloc overflow: 0x%lx > 0xffff"
msgstr "%pB: %s: прекорачење премештања: 0x%lx > 0xffff"
-#: compress.c:270
+#: compress.c:275
#, c-format
msgid "error: %pB(%pA) section size (%#<PRIx64> bytes) is larger than file size (%#<PRIx64> bytes)"
msgstr "грешка: %pB(%pA) величина одељка (%#<PRIx64> бајтова) је већа од величине датотеке (%#<PRIx64> бајта)"
-#: compress.c:281
+#: compress.c:286
#, c-format
msgid "error: %pB(%pA) is too large (%#<PRIx64> bytes)"
msgstr "грешка: %pB(%pA) је превелико (%#<PRIx64> бајта)"
-#: cpu-arm.c:307 cpu-arm.c:319
+#: cpu-arm.c:310 cpu-arm.c:322
#, c-format
msgid "error: %pB is compiled for the EP9312, whereas %pB is compiled for XScale"
msgstr "грешка: %pB је преведен за EP9312, док је %pB преведен за „XScale“"
-#: cpu-arm.c:455
+#: cpu-arm.c:458
#, c-format
msgid "warning: unable to update contents of %s section in %pB"
msgstr "упозорење: не могу да оÑвежим Ñадржај „%s“ одељка у %pB"
@@ -615,108 +628,108 @@ msgstr "„DWARF“ грешка: одељак „%s“ је већи од ÑвÐ
msgid "DWARF error: offset (%<PRIu64>) greater than or equal to %s size (%<PRIu64>)"
msgstr "„DWARF“ грешка: померај (%<PRIu64>) је већи или једнак величини %s (%<PRIu64>)"
-#: dwarf2.c:1201
+#: dwarf2.c:1245
msgid "DWARF error: info pointer extends beyond end of attributes"
msgstr "„DWARF“ грешка: инфо указивач превазилази крај атрибута"
-#: dwarf2.c:1349
+#: dwarf2.c:1394
#, c-format
msgid "DWARF error: invalid or unhandled FORM value: %#x"
msgstr "„DWARF“ грешка: неиÑправна или непозната вредноÑÑ‚ „FORM“: %#x"
-#: dwarf2.c:1664
+#: dwarf2.c:1709
msgid "DWARF error: mangled line number section (bad file number)"
msgstr "„DWARF“ грешка: број реда одељка је одÑечен (лош број датотеке)"
-#: dwarf2.c:2007
+#: dwarf2.c:2052
msgid "DWARF error: zero format count"
msgstr "„DWARF“ грешка: нулти број запиÑа"
-#: dwarf2.c:2017
+#: dwarf2.c:2062
#, c-format
msgid "DWARF error: data count (%<PRIx64>) larger than buffer size"
msgstr "„DWARF“ грешка: број података (%<PRIx64>) је већи од величине међумеморије"
-#: dwarf2.c:2056
+#: dwarf2.c:2101
#, c-format
msgid "DWARF error: unknown format content type %<PRIu64>"
msgstr "„DWARF“ грешка: непозната врÑта Ñадржаја запиÑа „%<PRIu64>“"
-#: dwarf2.c:2126
+#: dwarf2.c:2171
#, c-format
msgid "DWARF error: line info section is too small (%<PRId64>)"
msgstr "„DWARF“ грешка: одељак података реда је премали (%<PRId64>)"
-#: dwarf2.c:2153
+#: dwarf2.c:2198
#, c-format
msgid "DWARF error: line info data is bigger (%#<PRIx64>) than the space remaining in the section (%#lx)"
msgstr "„DWARF“ грешка: одељак података реда је већи (%#<PRIx64>) од проÑтора преоÑталог у одељку (%#lx)"
-#: dwarf2.c:2166
+#: dwarf2.c:2211
#, c-format
msgid "DWARF error: unhandled .debug_line version %d"
msgstr "„DWARF“ грешка: необрађено „.debug_line“ издање %d"
-#: dwarf2.c:2175
+#: dwarf2.c:2220
msgid "DWARF error: ran out of room reading prologue"
msgstr "„DWARFд грешка: пнеÑтало је проÑтора читајући пролог"
-#: dwarf2.c:2191
+#: dwarf2.c:2236
#, c-format
msgid "DWARF error: line info unsupported segment selector size %u"
msgstr "„DWARF“ грешка: неподржана величина избирача подеока података реда %u"
-#: dwarf2.c:2213
+#: dwarf2.c:2258
msgid "DWARF error: invalid maximum operations per instruction"
msgstr "„DWARF“ грешка: ÐеиÑправан највећи број операција по инÑтрукцији"
-#: dwarf2.c:2225
+#: dwarf2.c:2270
msgid "DWARF error: ran out of room reading opcodes"
msgstr "„DWARFд грешка: пнеÑтало је проÑтора читајући опкодове"
-#: dwarf2.c:2393
+#: dwarf2.c:2438
msgid "DWARF error: mangled line number section"
msgstr "„DWARF“ грешка: број реда одељка је одÑечен"
-#: dwarf2.c:2881
+#: dwarf2.c:2926
msgid "DWARF error: abstract instance recursion detected"
msgstr "„DWARF“ грешка: дубачење апÑтрактног примерка је откривено"
-#: dwarf2.c:2915 dwarf2.c:3009
+#: dwarf2.c:2960 dwarf2.c:3054
msgid "DWARF error: invalid abstract instance DIE ref"
msgstr "„DWARF“ грешка: неиÑправан апÑтрактан примерак „DIE“ упуте"
-#: dwarf2.c:2931
+#: dwarf2.c:2976
#, c-format
msgid "DWARF error: unable to read alt ref %<PRIu64>"
msgstr "„DWARF“ грешка: не могу да прочитам „alt“ упуту %<PRIu64>"
-#: dwarf2.c:2987
+#: dwarf2.c:3032
#, c-format
msgid "DWARF error: unable to locate abstract instance DIE ref %<PRIu64>"
msgstr "„DWARF“ грешка: не могу да пронађем апÑтрактни примерак „DIE“ упуте %<PRIu64>"
-#: dwarf2.c:3024 dwarf2.c:3305 dwarf2.c:3750
+#: dwarf2.c:3069 dwarf2.c:3351 dwarf2.c:3808
#, c-format
msgid "DWARF error: could not find abbrev number %u"
msgstr "„DWARF“ грешка: не могу да нађем Ñкраћени број %u"
-#: dwarf2.c:3538
+#: dwarf2.c:3594
#, c-format
msgid "DWARF error: could not find variable specification at offset 0x%lx"
msgstr "„DWARF“ грешка: не могу да нађем одредбу променљиве на померају 0×%lx"
-#: dwarf2.c:3677
+#: dwarf2.c:3735
#, c-format
msgid "DWARF error: found dwarf version '%u', this reader only handles version 2, 3, 4 and 5 information"
msgstr "„DWARF“ грешка: нађох „DWARF“ издање „%u“, овај читач ради Ñамо Ñа подацима издања 2, 3, 4 и 5"
-#: dwarf2.c:3714
+#: dwarf2.c:3772
#, c-format
msgid "DWARF error: found address size '%u', this reader can not handle sizes greater than '%u'"
msgstr "„DWARF“ грешка: нађох величину адреÑе „%u“, овај читач не може да ради Ñа величинама већим од „%u“"
-#: dwarf2.c:3817
+#: dwarf2.c:3885
msgid "DWARF error: DW_AT_comp_dir attribute encountered with a non-string form"
msgstr "„DWARF“ грешка: оÑобина „DW_AT_comp_dir“ је нађена Ñа запиÑом не-ниÑке"
@@ -832,49 +845,49 @@ msgstr "одбацујем нулти опÑег адреÑе „FDE“ у „%p
msgid "error in %pB(%pA); no .eh_frame_hdr table will be created"
msgstr "грешка у „%pB(%pA)“; неће бити направљена ниједна „.eh_frame_hdr“ табела"
-#: elf-eh-frame.c:1539
+#: elf-eh-frame.c:1541
#, c-format
msgid "FDE encoding in %pB(%pA) prevents .eh_frame_hdr table being created"
msgstr "„FDE“ кодирање у „%pB(%pA)“ Ñпречава Ñтварање „.eh_frame_hdr“ табеле"
-#: elf-eh-frame.c:1546
+#: elf-eh-frame.c:1548
msgid "further warnings about FDE encoding preventing .eh_frame_hdr generation dropped"
msgstr "будућа упозорења о „FDE“ кодирању Ñпречава одбацивање „.eh_frame_hdr“ генерације"
-#: elf-eh-frame.c:1866
+#: elf-eh-frame.c:1868
#, c-format
msgid "%pB: %pA not in order"
msgstr "%pB: „%pA“ није у поретку"
-#: elf-eh-frame.c:1880
+#: elf-eh-frame.c:1882
#, c-format
msgid "%pB: %pA invalid input section size"
msgstr "%pB: „%pA“ неиÑправна величина одељак улаза"
-#: elf-eh-frame.c:1888
+#: elf-eh-frame.c:1890
#, c-format
msgid "%pB: %pA points past end of text section"
msgstr "%pB: „%pA“ тачака прелази крај одељка текÑта"
-#: elf-eh-frame.c:2141
+#: elf-eh-frame.c:2143
msgid "DW_EH_PE_datarel unspecified for this architecture"
msgstr "„DW_EH_PE_datarel“ није одређено за ову архитектуру"
-#: elf-eh-frame.c:2312
+#: elf-eh-frame.c:2314
#, c-format
msgid "invalid output section for .eh_frame_entry: %pA"
msgstr "неиÑправан одељак излаза за „.eh_frame_entry“: %pA"
-#: elf-eh-frame.c:2335
+#: elf-eh-frame.c:2337
#, c-format
msgid "invalid contents in %pA section"
msgstr "неиÑправан Ñадржај у одељку „%pA“"
-#: elf-eh-frame.c:2491
+#: elf-eh-frame.c:2493
msgid ".eh_frame_hdr entry overflow"
msgstr "прекорачење „.eh_frame_hdr“ уноÑа"
-#: elf-eh-frame.c:2493
+#: elf-eh-frame.c:2495
msgid ".eh_frame_hdr refers to overlapping FDEs"
msgstr "„.eh_frame_hdr“ упућује на преклапајуће „FDE“-ове"
@@ -883,46 +896,46 @@ msgstr "„.eh_frame_hdr“ упућује на преклапајуће „FDEâ
msgid "%F%P: dynamic STT_GNU_IFUNC symbol `%s' with pointer equality in `%pB' can not be used when making an executable; recompile with -fPIE and relink with -pie\n"
msgstr "%F%P: динамички „STT_GNU_IFUNC“ Ñимбол „%s“ Ñа једнакошћу показивача у „%pB“ Ñе не може кориÑтити приликом Ñтварања извршне; преведите поново Ñа „-fPIE“ и повежите поново Ñа „-pie“\n"
-#: elf-m10200.c:434 elf-m10300.c:2146 elf32-avr.c:1508 elf32-bfin.c:3131
-#: elf32-cr16.c:1432 elf32-cris.c:2034 elf32-crx.c:913 elf32-d10v.c:510
+#: elf-m10200.c:434 elf-m10300.c:2146 elf32-avr.c:1508 elf32-bfin.c:3137
+#: elf32-cr16.c:1429 elf32-cris.c:2034 elf32-crx.c:913 elf32-d10v.c:510
#: elf32-epiphany.c:562 elf32-fr30.c:594 elf32-frv.c:4049 elf32-ft32.c:493
#: elf32-h8300.c:523 elf32-ip2k.c:1477 elf32-iq2000.c:691 elf32-lm32.c:1070
#: elf32-m32c.c:624 elf32-m32r.c:2837 elf32-m68hc1x.c:1271 elf32-mep.c:522
#: elf32-metag.c:1984 elf32-microblaze.c:1623 elf32-moxie.c:288 elf32-mt.c:402
-#: elf32-nds32.c:6044 elf32-or1k.c:1861 elf32-score.c:2743 elf32-score7.c:2552
+#: elf32-nds32.c:6039 elf32-or1k.c:1873 elf32-score.c:2734 elf32-score7.c:2545
#: elf32-spu.c:5084 elf32-tilepro.c:3372 elf32-v850.c:2294 elf32-visium.c:680
#: elf32-xstormy16.c:930 elf64-bpf.c:552 elf64-mmix.c:1541 elfxx-tilegx.c:3742
msgid "internal error: out of range error"
msgstr "унутрашња грешка: изван опÑега"
-#: elf-m10200.c:438 elf-m10300.c:2150 elf32-avr.c:1512 elf32-bfin.c:3135
-#: elf32-cr16.c:1436 elf32-cris.c:2038 elf32-crx.c:917 elf32-d10v.c:514
+#: elf-m10200.c:438 elf-m10300.c:2150 elf32-avr.c:1512 elf32-bfin.c:3141
+#: elf32-cr16.c:1433 elf32-cris.c:2038 elf32-crx.c:917 elf32-d10v.c:514
#: elf32-fr30.c:598 elf32-frv.c:4053 elf32-ft32.c:497 elf32-h8300.c:527
#: elf32-iq2000.c:695 elf32-lm32.c:1074 elf32-m32c.c:628 elf32-m32r.c:2841
#: elf32-m68hc1x.c:1275 elf32-mep.c:526 elf32-metag.c:1988
#: elf32-microblaze.c:1627 elf32-moxie.c:292 elf32-msp430.c:1510
-#: elf32-nds32.c:6048 elf32-or1k.c:1865 elf32-score.c:2747 elf32-score7.c:2556
+#: elf32-nds32.c:6043 elf32-or1k.c:1877 elf32-score.c:2738 elf32-score7.c:2549
#: elf32-spu.c:5088 elf32-tilepro.c:3376 elf32-v850.c:2298 elf32-visium.c:684
#: elf32-xstormy16.c:934 elf64-mmix.c:1545 elfxx-mips.c:10558
#: elfxx-tilegx.c:3746
msgid "internal error: unsupported relocation error"
msgstr "унутрашња грешка: премештање није подржано"
-#: elf-m10200.c:442 elf32-cr16.c:1440 elf32-crx.c:921 elf32-d10v.c:518
+#: elf-m10200.c:442 elf32-cr16.c:1437 elf32-crx.c:921 elf32-d10v.c:518
#: elf32-h8300.c:531 elf32-lm32.c:1078 elf32-m32r.c:2845 elf32-m68hc1x.c:1279
-#: elf32-microblaze.c:1631 elf32-nds32.c:6052 elf32-score.c:2751
-#: elf32-score7.c:2560 elf32-spu.c:5092
+#: elf32-microblaze.c:1631 elf32-nds32.c:6047 elf32-score.c:2742
+#: elf32-score7.c:2553 elf32-spu.c:5092
msgid "internal error: dangerous error"
msgstr "унутрашња грешка: грешка опаÑноÑти"
-#: elf-m10200.c:446 elf-m10300.c:2167 elf32-avr.c:1520 elf32-bfin.c:3143
-#: elf32-cr16.c:1444 elf32-cris.c:2046 elf32-crx.c:925 elf32-d10v.c:522
+#: elf-m10200.c:446 elf-m10300.c:2167 elf32-avr.c:1520 elf32-bfin.c:3149
+#: elf32-cr16.c:1441 elf32-cris.c:2046 elf32-crx.c:925 elf32-d10v.c:522
#: elf32-epiphany.c:577 elf32-fr30.c:606 elf32-frv.c:4061 elf32-ft32.c:505
#: elf32-h8300.c:535 elf32-ip2k.c:1492 elf32-iq2000.c:703 elf32-lm32.c:1082
#: elf32-m32c.c:636 elf32-m32r.c:2849 elf32-m68hc1x.c:1283 elf32-mep.c:534
#: elf32-metag.c:1996 elf32-microblaze.c:1635 elf32-moxie.c:300
-#: elf32-msp430.c:1518 elf32-mt.c:410 elf32-nds32.c:6056 elf32-or1k.c:1873
-#: elf32-score.c:2760 elf32-score7.c:2564 elf32-spu.c:5096
+#: elf32-msp430.c:1518 elf32-mt.c:410 elf32-nds32.c:6051 elf32-or1k.c:1885
+#: elf32-score.c:2751 elf32-score7.c:2557 elf32-spu.c:5096
#: elf32-tilepro.c:3384 elf32-v850.c:2318 elf32-visium.c:692
#: elf32-xstormy16.c:942 elf64-bpf.c:565 elf64-mmix.c:1553 elfxx-tilegx.c:3754
msgid "internal error: unknown error"
@@ -938,11 +951,11 @@ msgstr "%pB: неподржан прелазак Ñа „%s“ на „%s“"
msgid "%pB: %s' accessed both as normal and thread local symbol"
msgstr "%pB: „%s“ Ñе приÑтупило и као нормалном и као Ñимболу локалне нити"
-#: elf-m10300.c:2093 elf32-arm.c:13376 elf32-i386.c:3426 elf32-m32r.c:2331
+#: elf-m10300.c:2093 elf32-arm.c:13377 elf32-i386.c:3426 elf32-m32r.c:2331
#: elf32-m68k.c:3929 elf32-s390.c:3080 elf32-sh.c:3671 elf32-tilepro.c:3275
-#: elf32-xtensa.c:3024 elf64-s390.c:3029 elf64-x86-64.c:4082
+#: elf32-xtensa.c:3034 elf64-s390.c:3029 elf64-x86-64.c:4084
#: elfxx-sparc.c:2917 elfxx-sparc.c:3814 elfxx-tilegx.c:3665
-#: elfnn-aarch64.c:5501 elfnn-aarch64.c:7104
+#: elfnn-aarch64.c:5504 elfnn-aarch64.c:7107
#, c-format
msgid "%pB(%pA+%#<PRIx64>): unresolvable %s relocation against symbol `%s'"
msgstr "%pB(%pA+%#<PRIx64>): нерешиво „%s“ премештање наÑпрам Ñимбола „%s“"
@@ -961,7 +974,7 @@ msgid "internal error: suspicious relocation type used in shared library"
msgstr "унутрашња грешка: Ñумњива врÑта премештања је коришћена у дељеној библиотеци"
#: elf-m10300.c:2650 elf32-avr.c:2486 elf32-frv.c:5621 elf64-ia64-vms.c:365
-#: elfxx-sparc.c:2684 reloc.c:8282 reloc16.c:155 elfnn-ia64.c:365
+#: elfxx-sparc.c:2684 reloc.c:8373 reloc16.c:155 elfnn-ia64.c:365
msgid "%P%F: --relax and -r may not be used together\n"
msgstr "%P%F: „--relax“ и „-r“ Ñе не могу кориÑтити заједно\n"
@@ -995,45 +1008,54 @@ msgstr "упозорење: %pB: оштећење не умножава на зÐ
msgid "error: %pB: <corrupt property (0x%x) size: 0x%x>"
msgstr "грешка: %pB: <оштећено ÑвојÑтво (0x%x) величине: 0x%x>"
-#: elf-properties.c:205
+#: elf-properties.c:217
#, c-format
msgid "warning: %pB: unsupported GNU_PROPERTY_TYPE (%ld) type: 0x%x"
msgstr "упозорење: %pB: неподржано „GNU_PROPERTY_TYPE“ (%ld) врÑта: 0x%x"
-#: elf-properties.c:391
+#: elf-properties.c:403
msgid "Removed property %W to merge %pB (0x%v) and %pB (0x%v)\n"
msgstr "Уклоњено ÑвојÑтво „%W“ за Ñтапање „%pB“ (0x%v) и „%pB“ (0x%v)\n"
-#: elf-properties.c:397
+#: elf-properties.c:409
msgid "Removed property %W to merge %pB (0x%v) and %pB (not found)\n"
msgstr "Уклоњено ÑвојÑтво „%W“ за Ñтапање „%pB“ (0x%v) и „%pB“ (ниÑам нашао)\n"
-#: elf-properties.c:406 elf-properties.c:484
+#: elf-properties.c:418 elf-properties.c:496
msgid "Removed property %W to merge %pB and %pB\n"
msgstr "Уклоњено ÑвојÑтво „%W“ за Ñтапање „%pB“ и „%pB“\n"
-#: elf-properties.c:410
+#: elf-properties.c:422
msgid "Removed property %W to merge %pB and %pB (not found)\n"
msgstr "Уклоњено ÑвојÑтво „%W“ за Ñтапање „%pB“ и „%pB“ (ниÑам нашао)\n"
-#: elf-properties.c:427
+#: elf-properties.c:439
msgid "Updated property %W (0x%v) to merge %pB (0x%v) and %pB (0x%v)\n"
msgstr "ОÑвежено ÑвојÑтво „%W“ (0x%v) за Ñтапање „%pB“ (0x%v) и „%pB“ (0x%v)\n"
-#: elf-properties.c:436
+#: elf-properties.c:448
msgid "Updated property %W (%v) to merge %pB (0x%v) and %pB (not found)\n"
msgstr "ОÑвежено ÑвојÑтво „%W“ (%v) за Ñтапање „%pB“ (0x%v) и „%pB“ (ниÑам нашао)\n"
-#: elf-properties.c:478
+#: elf-properties.c:490
msgid "Removed property %W to merge %pB (not found) and %pB (0x%v)\n"
msgstr "Уклоњено ÑвојÑтво „%W“ за Ñтапање „%pB“ (ниÑам нашао) и „%pB“ (0x%v)\n"
+#: elf-properties.c:671 elfxx-aarch64.c:758 elfxx-x86.c:3716
+msgid "%F%P: failed to create GNU property section\n"
+msgstr "%F%P: ниÑам уÑпео да направим одељак ГÐУ ÑвојÑтва\n"
+
+#: elf-properties.c:675 elfxx-aarch64.c:762 elfxx-x86.c:3721
+#, c-format
+msgid "%F%pA: failed to align section\n"
+msgstr "%F%pA: ниÑам уÑпео да поравнам одељак\n"
+
#. Merge .note.gnu.property sections.
-#: elf-properties.c:640 elf-properties.c:642
+#: elf-properties.c:701 elf-properties.c:703
msgid "\n"
msgstr "\n"
-#: elf-properties.c:641
+#: elf-properties.c:702
msgid "Merging program properties\n"
msgstr "Стапам ÑвојÑтва програма\n"
@@ -1048,7 +1070,7 @@ msgstr "%pB: покушавам да учитам ниÑке из одељка Ð
msgid "%pB: invalid string offset %u >= %<PRIu64> for section `%s'"
msgstr "%pB: неиÑправан померај ниÑке „%u >= %<PRIu64>“ за одељак „%s“"
-#: elf.c:514 elfnn-aarch64.c:8104
+#: elf.c:514 elfnn-aarch64.c:8107 elfnn-loongarch.c:3045
#, c-format
msgid "%pB symbol number %lu references nonexistent SHT_SYMTAB_SHNDX section"
msgstr "„%pB“ Ñимбол број %lu упућује на непоÑтојећи одељак „SHT_SYMTAB_SHNDX“"
@@ -1132,7 +1154,7 @@ msgstr ""
"\n"
"Динамички одељак:\n"
-#: elf.c:1851
+#: elf.c:1854
#, c-format
msgid ""
"\n"
@@ -1141,7 +1163,7 @@ msgstr ""
"\n"
"Дефиниција издања:\n"
-#: elf.c:1876
+#: elf.c:1879
#, c-format
msgid ""
"\n"
@@ -1150,97 +1172,101 @@ msgstr ""
"\n"
"Упута издања:\n"
-#: elf.c:1881
+#: elf.c:1884
#, c-format
msgid " required from %s:\n"
msgstr " захтевано из „%s“:\n"
-#: elf.c:2071
+#: elf.c:2075
#, c-format
msgid "%pB: warning: loop in section dependencies detected"
msgstr "%pB: упозорење: петља у завиÑноÑтима одељка је откривена"
-#: elf.c:2178
+#: elf.c:2182
#, c-format
msgid "%pB: warning: multiple symbol tables detected - ignoring the table in section %u"
msgstr "%pB: упозорење: откривено је више табела Ñимбола – занемарујем табелу у одељку %u"
-#: elf.c:2262
+#: elf.c:2266
#, c-format
msgid "%pB: warning: multiple dynamic symbol tables detected - ignoring the table in section %u"
msgstr "%pB: упозорење: откривено је више динамичких табела Ñимбола – занемарујем табелу у одељку %u"
-#: elf.c:2375
+#: elf.c:2385
#, c-format
msgid "%pB: invalid link %u for reloc section %s (index %u)"
msgstr "%pB: неиÑправна веза „%u“ за одељак премештања „%s“ (Ð¸Ð½Ð´ÐµÐºÑ â€ž%u“)"
-#: elf.c:2466
+#: elf.c:2442
#, c-format
msgid "%pB: warning: secondary relocation section '%s' for section %pA found - ignoring"
msgstr "%pB: упозорење: нађох Ñекундарни одељак премештања „%s“ за одељак „%pA“ – занемарујем"
-#: elf.c:2552 elf.c:2567 elf.c:2578 elf.c:2591
+#: elf.c:2528 elf.c:2543 elf.c:2554 elf.c:2567
#, c-format
msgid "%pB: unknown type [%#x] section `%s'"
msgstr "%pB: непозната врÑта [%#x] одељак „%s“"
-#: elf.c:3288
+#: elf.c:3265
#, c-format
msgid "%pB: error: alignment power %d of section `%pA' is too big"
msgstr "%pB: грешка: Ñнага поравнања %d одељка „%pA“ је превелика"
-#: elf.c:3321
+#: elf.c:3298
#, c-format
msgid "warning: section `%pA' type changed to PROGBITS"
msgstr "упозорење: врÑта „%pA“ одељка је измењена у „PROGBITS“"
-#: elf.c:3805
+#: elf.c:3783
#, c-format
msgid "%pB: too many sections: %u"
msgstr "%pB: превише одељака: %u"
-#: elf.c:3891
+#: elf.c:3869
#, c-format
msgid "%pB: sh_link of section `%pA' points to discarded section `%pA' of `%pB'"
msgstr "%pB: „sh_link“ одељка „%pA“ указује на одбачени одељак „%pA“ од „%pB“"
-#: elf.c:3909
+#: elf.c:3887
#, c-format
msgid "%pB: sh_link of section `%pA' points to removed section `%pA' of `%pB'"
msgstr "%pB: „sh_link“ одељка „%pA“ указује на уклоњени одељак „%pA“ од „%pB“"
-#: elf.c:4471
+#: elf.c:4455
#, c-format
msgid "%pB: GNU_MBIND section `%pA' has invalid sh_info field: %d"
msgstr "%pB: „GNU_MBIND“ одељак „%pA“ има неиÑправно „sh_info“ поље: %d"
-#: elf.c:5065
+#: elf.c:4638
+msgid "%F%P: failed to size relative relocations\n"
+msgstr "%F%P: ниÑам уÑпео на величину релативна премештања\n"
+
+#: elf.c:5062
#, c-format
msgid "%pB: TLS sections are not adjacent:"
msgstr "%pB: ТЛС одељци ниÑу ÑуÑедни:"
-#: elf.c:5072
+#: elf.c:5069
#, c-format
msgid "\t TLS: %pA"
msgstr "\t ТЛС: %pA"
-#: elf.c:5076
+#: elf.c:5073
#, c-format
msgid "\tnon-TLS: %pA"
msgstr "\tне-ТЛС: %pA"
-#: elf.c:5672
+#: elf.c:5696
#, c-format
msgid "%pB: The first section in the PT_DYNAMIC segment is not the .dynamic section"
msgstr "%pB: Први одељак у подеоку „PT_DYNAMIC“ није „.dynamic“ одељак"
-#: elf.c:5698
+#: elf.c:5722
#, c-format
msgid "%pB: not enough room for program headers, try linking with -N"
msgstr "%pB: нема довољно меÑта за заглавље програм, пробајте да повежете Ñа „-N“"
-#: elf.c:5815
+#: elf.c:5839
#, c-format
msgid "%pB: section %pA lma %#<PRIx64> adjusted to %#<PRIx64>"
msgstr "%pB: одељак „%pA lma %#<PRIx64>“ је дотеран на %#<PRIx64>"
@@ -1248,172 +1274,177 @@ msgstr "%pB: одељак „%pA lma %#<PRIx64>“ је дотеран на %#<P
#. The fix for this error is usually to edit the linker script being
#. used and set up the program headers manually. Either that or
#. leave room for the headers at the start of the SECTIONS.
-#: elf.c:5952
+#: elf.c:5976
#, c-format
msgid "%pB: error: PHDR segment not covered by LOAD segment"
msgstr "%pB: грешка: „PHDR“ подеок није покривен „LOAD“ подеоком"
-#: elf.c:5992
+#: elf.c:6016
#, c-format
msgid "%pB: section `%pA' can't be allocated in segment %d"
msgstr "%pB: одељак „%pA“ Ñе не може доделити у подеоку %d"
-#: elf.c:6129
+#: elf.c:6156
#, c-format
msgid "%pB: warning: allocated section `%s' not in segment"
msgstr "%pB: упозорење: додељени одељак „%s“ није у подеоку"
-#: elf.c:6290
+#: elf.c:6292
+#, c-format
+msgid "%pB: warning: unable to allocate any sections to PT_GNU_RELRO segment"
+msgstr "%pB: упозорење: не могу да доделим ниједан одељак на „PT_GNU_RELRO“ подеок"
+
+#: elf.c:6322
#, c-format
msgid "%pB: error: non-load segment %d includes file header and/or program header"
msgstr "%pB: грешка: подеок не-учитавања %d укључује заглавље датотеке и/или заглавље програма"
-#: elf.c:6799
+#: elf.c:6829
#, c-format
msgid "%pB: symbol `%s' required but not present"
msgstr "%pB: Ñимбол „%s“ је потребан али није приÑутан"
-#: elf.c:7151
+#: elf.c:7186
#, c-format
msgid "%pB: warning: empty loadable segment detected at vaddr=%#<PRIx64>, is this intentional?"
msgstr "%pB: упозорење: празан подеок који Ñе може учитати откривен је на „vaddr=%#<PRIx64>“, да ли је то намеравано?"
-#: elf.c:7779
+#: elf.c:7851
#, c-format
msgid "%pB: warning: segment alignment of %#<PRIx64> is too large"
msgstr "%pB: упозорење: поравнање подеока за „%#<PRIx64>“ је превелико"
-#: elf.c:8292
+#: elf.c:8359
#, c-format
msgid "%pB: Unable to handle section index %x in ELF symbol. Using ABS instead."
msgstr "%pB: Ðе могу да рукујем Ñа индекÑом одељка %x у ЕЛФ Ñимболу. КориÑтићу „ABS“."
-#: elf.c:8322
+#: elf.c:8389
#, c-format
msgid "unable to find equivalent output section for symbol '%s' from section '%s'"
msgstr "не могу да нађем еквивалентан одељак излаза за Ñимбол „%s“ из одељка „%s“"
-#: elf.c:8735
+#: elf.c:8799
#, c-format
msgid "%pB: .gnu.version_r invalid entry"
msgstr "%pB: „.gnu.version_r“ неиÑправан уноÑ"
-#: elf.c:8868
+#: elf.c:8932
#, c-format
msgid "%pB: .gnu.version_d invalid entry"
msgstr "%pB: „.gnu.version_d“ неиÑправан уноÑ"
-#: elf.c:9325
+#: elf.c:9389
#, c-format
msgid "%pB:%pA: error: attempting to write into an unallocated compressed section"
msgstr "%pB:%pA: грешка: покушавам да пишем у недодељеном Ñажетом одељку"
-#: elf.c:9334
+#: elf.c:9398
#, c-format
msgid "%pB:%pA: error: attempting to write over the end of the section"
msgstr "%pB:%pA: грешка: покушавам да пишем преко краја одељка"
-#: elf.c:9345
+#: elf.c:9409
#, c-format
msgid "%pB:%pA: error: attempting to write section into an empty buffer"
msgstr "%pB:%pA: грешка: покушавам да упишем одељак у празну међумеморију"
-#: elf.c:10246
+#: elf.c:10317
#, c-format
msgid "%pB: warning: win32pstatus %s of size %lu bytes is too small"
msgstr "%pB: упозорење: „win32pstatus %s“ величине %lu бајта је превише мало"
-#: elf.c:10324
+#: elf.c:10395
#, c-format
msgid "%pB: win32pstatus NOTE_INFO_MODULE of size %lu is too small to contain a name of size %u"
msgstr "%pB: „win32pstatus NOTE_INFO_MODULE“ величине %lu је превише мало да би Ñадржало назив величине %u"
-#: elf.c:12633
+#: elf.c:12977
msgid "GNU_MBIND section is supported only by GNU and FreeBSD targets"
msgstr "„GNU_MBIND“ одељак је подржан Ñамо Гну и ФриБСД метама"
-#: elf.c:12636
+#: elf.c:12980
msgid "symbol type STT_GNU_IFUNC is supported only by GNU and FreeBSD targets"
msgstr "врÑта Ñимбола „STT_GNU_IFUNC“ је подржана Ñамо Гну и ФриБСД метама"
-#: elf.c:12639
+#: elf.c:12983
msgid "symbol binding STB_GNU_UNIQUE is supported only by GNU and FreeBSD targets"
msgstr "Ñвеза Ñимбола „STB_GNU_UNIQUE“ је подржана Ñамо Гну и ФриБСД метама"
-#: elf.c:12642
+#: elf.c:12986
msgid "GNU_RETAIN section is supported only by GNU and FreeBSD targets"
msgstr "„GNU_RETAIN“ одељак је подржан Ñамо Гну и ФриБСД метама"
-#: elf.c:12850 elf64-sparc.c:123 elfcode.h:1504
+#: elf.c:13194 elf64-sparc.c:123 elfcode.h:1505
#, c-format
msgid "%pB(%pA): relocation %d has invalid symbol index %ld"
msgstr "%pB(%pA): премештање „%d“ има неиÑправан Ð¸Ð½Ð´ÐµÐºÑ Ñимбола %ld"
-#: elf.c:12925
+#: elf.c:13269
#, c-format
msgid "%pB(%pA): link section cannot be set because the output file does not have a symbol table"
msgstr "%pB(%pA): одељак везе Ñе не може подеÑити зато што излазна датотека нема табелу Ñимбола"
-#: elf.c:12937
+#: elf.c:13281
#, c-format
msgid "%pB(%pA): info section index is invalid"
msgstr "%pB(%pA): Ð¸Ð½Ð´ÐµÐºÑ Ð¾Ð´ÐµÑ™ÐºÐ° података није иÑправан"
-#: elf.c:12951
+#: elf.c:13295
#, c-format
msgid "%pB(%pA): info section index cannot be set because the section is not in the output"
msgstr "%pB(%pA): Ð¸Ð½Ð´ÐµÐºÑ Ð¾Ð´ÐµÑ™ÐºÐ° података Ñе не може подеÑити зато што одељак није у излазу"
-#: elf.c:13026
+#: elf.c:13370
#, c-format
msgid "%pB(%pA): error: secondary reloc section processed twice"
msgstr "%pB(%pA): грешка: Ñекундарни одељак премештаја је обрађен два пута"
-#: elf.c:13038
+#: elf.c:13382
#, c-format
msgid "%pB(%pA): error: secondary reloc section has zero sized entries"
msgstr "%pB(%pA): грешка: Ñекундарни одељак премештаја има уноÑе нулте величине"
-#: elf.c:13049
+#: elf.c:13393
#, c-format
msgid "%pB(%pA): error: secondary reloc section has non-standard sized entries"
msgstr "%pB(%pA): грешка: Ñекундарни одељак премештаја има уноÑе неуобичајене величине"
-#: elf.c:13061
+#: elf.c:13405
#, c-format
msgid "%pB(%pA): error: secondary reloc section is empty!"
msgstr "%pB(%pA): грешка: Ñекундарни одељак премештаја је празан!"
-#: elf.c:13084
+#: elf.c:13428
#, c-format
msgid "%pB(%pA): error: internal relocs missing for secondary reloc section"
msgstr "%pB(%pA): грешка: унутрашњи премештаји недоÑтају за Ñекундарни одељак премештаја"
-#: elf.c:13103
+#: elf.c:13447
#, c-format
msgid "%pB(%pA): error: reloc table entry %u is empty"
msgstr "%pB(%pA): грешка: ÑƒÐ½Ð¾Ñ Ñ‚Ð°Ð±ÐµÐ»Ðµ премештаја %u је празан"
-#: elf.c:13128
+#: elf.c:13472
#, c-format
msgid "%pB(%pA): error: secondary reloc %u references a missing symbol"
msgstr "%pB(%pA): грешка: Ñекундарни премштај %u упућује на недоÑтајући Ñимбол"
-#: elf.c:13145
+#: elf.c:13489
#, c-format
msgid "%pB(%pA): error: secondary reloc %u references a deleted symbol"
msgstr "%pB(%pA): грешка: Ñекундарни премштај %u упућује на обриÑан Ñимбол"
-#: elf.c:13158
+#: elf.c:13502
#, c-format
msgid "%pB(%pA): error: secondary reloc %u is of an unknown type"
msgstr "%pB(%pA): грешка: Ñекундарни премештај %u је непознате врÑте"
#. Ignore init flag - it may not be set, despite the flags field
#. containing valid data.
-#: elf32-arc.c:455 elf32-arm.c:15047 elf32-frv.c:6612 elf32-iq2000.c:868
-#: elf32-m32c.c:914 elf32-mt.c:560 elf32-rl78.c:1260 elf32-rx.c:3206
-#: elf32-visium.c:844 elf64-ppc.c:5347 elfnn-aarch64.c:7334
+#: elf32-arc.c:455 elf32-arm.c:15095 elf32-frv.c:6612 elf32-iq2000.c:868
+#: elf32-m32c.c:914 elf32-mt.c:560 elf32-rl78.c:1275 elf32-rx.c:3217
+#: elf32-visium.c:844 elf64-ppc.c:5507 elfnn-aarch64.c:7337
#, c-format
msgid "private flags = 0x%lx:"
msgstr "приватне заÑтавице = 0x%lx:"
@@ -1459,7 +1490,7 @@ msgid "error: attempting to link %pB with a binary %pB of different architecture
msgstr "грешка: покушавам да увежем „%pB“ Ñа извршном „%pB“ другачије архитектуре"
#: elf32-arc.c:938 elf32-iq2000.c:844 elf32-m32c.c:889 elf32-m68hc1x.c:1390
-#: elf32-ppc.c:3866 elf64-sparc.c:722 elfxx-mips.c:15568
+#: elf32-ppc.c:3881 elf64-sparc.c:722 elfxx-mips.c:15584
#, c-format
msgid "%pB: uses different e_flags (%#x) fields than previous modules (%#x)"
msgstr "%pB: кориÑти другачија поља „e_flags“ (%#x) него претходни модули (%#x)"
@@ -1486,33 +1517,33 @@ msgstr "%pB(%pA+%#<PRIx64>): „CMEM“ премештање на „%s+%#<PRIx6
msgid "GOT and PLT relocations cannot be fixed with a non dynamic linker"
msgstr "„GOT“ и „PLT“ премештања Ñе не могу поправити Ñа не динамичким увезивачем"
-#: elf32-arc.c:1909 elf32-rl78.c:1098 elf32-rx.c:1475
+#: elf32-arc.c:1909 elf32-rx.c:1486
#, c-format
msgid "%pB(%pA): warning: unaligned access to symbol '%s' in the small data area"
msgstr "%pB(%pA): упозорење: непоравнати приÑтуп ка Ñимболу „%s“ облаÑти малих података"
-#: elf32-arc.c:1914 elf32-rl78.c:1103 elf32-rx.c:1480
+#: elf32-arc.c:1914 elf32-rx.c:1491
#, c-format
msgid "%pB(%pA): internal error: out of range error"
msgstr "%pB(%pA): унутрашња грешка: изван опÑега"
-#: elf32-arc.c:1919 elf32-rl78.c:1108 elf32-rx.c:1485
+#: elf32-arc.c:1919 elf32-rx.c:1496
#, c-format
msgid "%pB(%pA): internal error: unsupported relocation error"
msgstr "%pB(%pA): унутрашња грешка: премештање није подржано"
-#: elf32-arc.c:1924 elf32-rl78.c:1113 elf32-rx.c:1490
+#: elf32-arc.c:1924 elf32-rx.c:1501
#, c-format
msgid "%pB(%pA): internal error: dangerous relocation"
msgstr "%pB(%pA): унутрашња грешка: опаÑно премештање"
-#: elf32-arc.c:1929 elf32-rl78.c:1118 elf32-rx.c:1495
+#: elf32-arc.c:1929 elf32-rx.c:1506
#, c-format
msgid "%pB(%pA): internal error: unknown error"
msgstr "%pB(%pA): унутрашња грешка: непозната грешка"
-#: elf32-arc.c:2023 elf32-arc.c:2091 elf32-arm.c:15502 elf32-metag.c:2251
-#: elf32-nds32.c:5494 elfnn-aarch64.c:7741 elfnn-riscv.c:617
+#: elf32-arc.c:2023 elf32-arc.c:2091 elf32-arm.c:15550 elf32-metag.c:2251
+#: elf32-nds32.c:5489 elfnn-aarch64.c:7744 elfnn-riscv.c:617
#, c-format
msgid "%pB: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC"
msgstr "%pB: премештање „%s“ наÑпрам „%s“ Ñе не може кориÑтити приликом Ñтварања дељеног објекта; поново преведите Ñа „-fPIC“"
@@ -1527,596 +1558,597 @@ msgstr "%pB: непознат атрибут „%d“ обавезног „ARCâ
msgid "warning: %pB: unknown ARC object attribute %d"
msgstr "упозорење: %pB: непознат атрибут „%d“ објекта „ARC“"
-#: elf32-arm.c:4333 elf32-arm.c:4367 elf32-arm.c:4386 elf32-arm.c:4438
+#: elf32-arm.c:4334 elf32-arm.c:4368 elf32-arm.c:4387 elf32-arm.c:4439
#, c-format
msgid "%pB(%pA): 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"
msgstr "%pB(%pA): упозорење: дуге превлаке гране коришћене Ñу у одељку Ñа атрибутом „SHF_ARM_PURECODE“ одељком је подржана Ñамо за циљеве M-профила које примењују „movw“ инÑтрукцију"
-#: elf32-arm.c:4398 elf32-arm.c:4452 elf32-arm.c:9141 elf32-arm.c:9231
+#: elf32-arm.c:4399 elf32-arm.c:4453 elf32-arm.c:9142 elf32-arm.c:9232
#, c-format
msgid "%pB(%s): warning: interworking not enabled; first occurrence: %pB: %s call to %s"
msgstr "%pB(%s): упозорење: међудејÑтво није укључено; прво појављивање: %pB: „%s“ позива „%s“"
-#: elf32-arm.c:4578
+#: elf32-arm.c:4579
#, c-format
msgid "ERROR: CMSE stub (%s section) too far (%#<PRIx64>) from destination (%#<PRIx64>)"
msgstr "ГРЕШКÐ: „CMSE“ окрајак (одељак „%s“) је превише далеко (%#<PRIx64>) од пдредишта (%#<PRIx64>)"
-#: elf32-arm.c:4747
+#: elf32-arm.c:4748
#, c-format
msgid "no address assigned to the veneers output section %s"
msgstr "ниједна адреÑа није додељена излазу превлаке одељка „%s“"
-#: elf32-arm.c:4822 elf32-arm.c:6968 elf32-csky.c:3400 elf32-hppa.c:582
-#: elf32-m68hc1x.c:164 elf32-metag.c:1180 elf32-nios2.c:2201 elf64-ppc.c:3827
-#: elf64-ppc.c:13638 elfnn-aarch64.c:3187
+#: elf32-arm.c:4823 elf32-arm.c:6969 elf32-csky.c:3400 elf32-hppa.c:582
+#: elf32-m68hc1x.c:164 elf32-metag.c:1180 elf32-nios2.c:2201 elf64-ppc.c:3881
+#: elf64-ppc.c:14018 elfnn-aarch64.c:3187
#, c-format
msgid "%pB: cannot create stub entry %s"
msgstr "%pB: не могу да Ñтворим ÑƒÐ½Ð¾Ñ Ð¾ÐºÑ€Ð°Ñ˜ÐºÐ° „%s“"
-#: elf32-arm.c:5043 elf32-csky.c:3742 elf32-hppa.c:732 elf32-m68hc11.c:422
-#: elf32-m68hc12.c:542 elf32-metag.c:3345 elf32-nios2.c:2494 elf64-ppc.c:11473
+#: elf32-arm.c:5044 elf32-csky.c:3742 elf32-hppa.c:732 elf32-m68hc11.c:422
+#: elf32-m68hc12.c:542 elf32-metag.c:3345 elf32-nios2.c:2494 elf64-ppc.c:11656
#: elfnn-aarch64.c:3256
msgid "%F%P: Could not assign '%pA' to an output section. Retry without --enable-non-contiguous-regions.\n"
msgstr "%F%P: Ðе могу да доделим „%pA“ излазном одељку. Покушајте без „--enable-non-contiguous-regions“.\n"
-#: elf32-arm.c:6011
+#: elf32-arm.c:6012
#, c-format
msgid "%pB: special symbol `%s' only allowed for ARMv8-M architecture or later"
msgstr "%pB: Ñпецијални Ñимбол „%s“ је дозвољен Ñамо за „ARMv8-M“ архитектуру или новију"
-#: elf32-arm.c:6020
+#: elf32-arm.c:6021
#, c-format
msgid "%pB: invalid special symbol `%s'; it must be a global or weak function symbol"
msgstr "%pB: неиÑправан Ñпецијални Ñимбол „%s“; мора бити општи или Ñимбол Ñлабе функције"
-#: elf32-arm.c:6059
+#: elf32-arm.c:6060
#, c-format
msgid "%pB: invalid standard symbol `%s'; it must be a global or weak function symbol"
msgstr "%pB: неиÑправан Ñтандардни Ñимбол „%s“; мора бити општи или Ñимбол Ñлабе функције"
-#: elf32-arm.c:6065
+#: elf32-arm.c:6066
#, c-format
msgid "%pB: absent standard symbol `%s'"
msgstr "%pB: недоÑтаје Ñтандардни Ñимбол „%s“"
-#: elf32-arm.c:6077
+#: elf32-arm.c:6078
#, c-format
msgid "%pB: `%s' and its special symbol are in different sections"
msgstr "%pB: „%s“ и њен Ñпецијални Ñимбол Ñу у различитим одељцима"
-#: elf32-arm.c:6089
+#: elf32-arm.c:6090
#, c-format
msgid "%pB: entry function `%s' not output"
msgstr "%pB: функцја уноÑа „%s“ није излаз"
-#: elf32-arm.c:6096
+#: elf32-arm.c:6097
#, c-format
msgid "%pB: entry function `%s' is empty"
msgstr "%pB: функцја уноÑа „%s“ је празна"
-#: elf32-arm.c:6225
+#: elf32-arm.c:6226
#, c-format
msgid "%pB: --in-implib only supported for Secure Gateway import libraries"
msgstr "%pB: „--in-implib“ је подржана Ñамо за „Secure Gateway“ библиотеке уноÑа"
-#: elf32-arm.c:6274
+#: elf32-arm.c:6275
#, c-format
msgid "%pB: invalid import library entry: `%s'; symbol should be absolute, global and refer to Thumb functions"
msgstr "%pB: неиÑправан ÑƒÐ½Ð¾Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐµ уноÑа: „%s“; Ñимбол треба да буде апÑолутни, општи и да Ñе одноÑи на „Thumb“ функције"
-#: elf32-arm.c:6296
+#: elf32-arm.c:6297
#, c-format
msgid "entry function `%s' disappeared from secure code"
msgstr "функција уноÑа „%s“ је неÑтала из безбедног кода"
-#: elf32-arm.c:6320
+#: elf32-arm.c:6321
#, c-format
msgid "`%s' refers to a non entry function"
msgstr "„%s“ упућује на не улазну функцију"
-#: elf32-arm.c:6335
+#: elf32-arm.c:6336
#, c-format
msgid "%pB: visibility of symbol `%s' has changed"
msgstr "%pB: видљивоÑÑ‚ Ñимбола „%s“ је измењена"
-#: elf32-arm.c:6344
+#: elf32-arm.c:6345
#, c-format
msgid "%pB: incorrect size for symbol `%s'"
msgstr "%pB: неиÑправна величина за Ñимбол „%s“"
-#: elf32-arm.c:6363
+#: elf32-arm.c:6364
#, c-format
msgid "offset of veneer for entry function `%s' not a multiple of its size"
msgstr "померај превлаке за функцију уноÑа „%s“ није умножак величине"
-#: elf32-arm.c:6383
+#: elf32-arm.c:6384
msgid "new entry function(s) introduced but no output import library specified:"
msgstr "нова функција уноÑа је приÑтигла али није наведена излазно улазна библиотека:"
-#: elf32-arm.c:6391
+#: elf32-arm.c:6392
#, c-format
msgid "start address of `%s' is different from previous link"
msgstr "почетна адреÑа за „%s“ Ñе разликује од претходне везе"
-#: elf32-arm.c:7101 elf32-arm.c:7136
+#: elf32-arm.c:7102 elf32-arm.c:7137
#, c-format
msgid "unable to find %s glue '%s' for '%s'"
msgstr "не могу да нађем „%s“ лепак „%s“ за „%s“"
-#: elf32-arm.c:7847
+#: elf32-arm.c:7848
#, c-format
msgid "%pB: BE8 images only valid in big-endian mode"
msgstr "%pB: „BE8“ Ñлике Ñу иÑправне Ñамо у режиму велике крајњоÑти"
#. Give a warning, but do as the user requests anyway.
-#: elf32-arm.c:8074
+#: elf32-arm.c:8075
#, c-format
msgid "%pB: warning: selected VFP11 erratum workaround is not necessary for target architecture"
msgstr "%pB: упозорење: изабрано решење „VFP11“ грешака није потребно за циљну архитектуру"
-#: elf32-arm.c:8101
+#: elf32-arm.c:8102
#, c-format
msgid "%pB: warning: selected STM32L4XX erratum workaround is not necessary for target architecture"
msgstr "%pB: упозорење: изабрано решење „STM32L4XX“ грешака није потребно за циљну архитектуру"
-#: elf32-arm.c:8637 elf32-arm.c:8657 elf32-arm.c:8724 elf32-arm.c:8743
+#: elf32-arm.c:8638 elf32-arm.c:8658 elf32-arm.c:8725 elf32-arm.c:8744
#, c-format
msgid "%pB: unable to find %s veneer `%s'"
msgstr "%pB: не могу да нађем „%s“ превлаку „%s“"
-#: elf32-arm.c:8950
+#: elf32-arm.c:8951
#, c-format
msgid "%pB(%pA+%#x): error: multiple load detected in non-last IT block instruction: STM32L4XX veneer cannot be generated; use gcc option -mrestrict-it to generate only one instruction per IT block"
msgstr "%pB(%pA+%#x): грешка: вишеÑтруко учитавање је откривено у не-поÑледњој инÑтрукцији „IT“ блока: „STM32L4XX“ превлака Ñе не може Ñтворити; кориÑтите „gcc“ опцију „-mrestrict-it“ за Ñтварање Ñамо једне инÑтрукције по „IT“ блоку"
-#: elf32-arm.c:9048
+#: elf32-arm.c:9049
#, c-format
msgid "invalid TARGET2 relocation type '%s'"
msgstr "неиÑправна врÑта „TARGET2“ премештања „%s“"
#. FIXME: We ought to be able to generate thumb-1 PLT
#. instructions...
-#: elf32-arm.c:9818
+#: elf32-arm.c:9819
#, c-format
msgid "%pB: warning: thumb-1 mode PLT generation not currently supported"
msgstr "%pB: упозорење: „PLT“ Ñтварање у „thumb-1“ режиму тренутно није подржано"
-#: elf32-arm.c:10127 elf32-arm.c:10169
+#: elf32-arm.c:10128 elf32-arm.c:10170
#, c-format
msgid "%pB(%pA+%#<PRIx64>): unexpected %s instruction '%#lx' in TLS trampoline"
msgstr "%pB(%pA+%#<PRIx64>): неочекивана „%s“ инÑтрукција „%#lx“ у „TLS“ трамбулини"
-#: elf32-arm.c:10519
+#: elf32-arm.c:10520
msgid "shared object"
msgstr "дељени објекат"
-#: elf32-arm.c:10522
+#: elf32-arm.c:10523
msgid "PIE executable"
msgstr "„PIE“ извршна"
-#: elf32-arm.c:10525
+#: elf32-arm.c:10526
#, c-format
msgid "%pB: relocation %s against external or undefined symbol `%s' can not be used when making a %s; recompile with -fPIC"
msgstr "%pB: премештање „%s“ наÑпрам Ñпољног или неодређеног Ñимбола „%s“ Ñе не може кориÑтити приликом Ñтварања „%s“; поново преведите Ñа „-fPIC“"
-#: elf32-arm.c:10627 elf32-arm.c:11044
+#: elf32-arm.c:10628 elf32-arm.c:11045
#, c-format
msgid "%pB: warning: %s BLX instruction targets %s function '%s'"
msgstr "%pB: упозорење: инÑтрукција „%s BLX“ циља на „%s“ функцију „%s“"
-#: elf32-arm.c:11678
+#: elf32-arm.c:11679
#, c-format
msgid "%pB: expected symbol index in range 0..%lu but found local symbol with index %lu"
msgstr "%pB: очекивах Ð¸Ð½Ð´ÐµÐºÑ Ñимбола у опÑегу 0..%lu али нађох локални Ñимбол Ñа индекÑом %lu"
-#: elf32-arm.c:11953 elf32-arm.c:11979
+#: elf32-arm.c:11954 elf32-arm.c:11980
#, c-format
msgid "%pB(%pA+%#<PRIx64>): unexpected %s instruction '%#lx' referenced by TLS_GOTDESC"
msgstr "%pB(%pA+%#<PRIx64>): неочекивана „%s“ инÑтрукција „%#lx“ на коју упућује „TLS_GOTDESC“"
-#: elf32-arm.c:12025 elf32-csky.c:4970 elf32-m68k.c:3733 elf32-metag.c:1913
+#: elf32-arm.c:12026 elf32-csky.c:4970 elf32-m68k.c:3733 elf32-metag.c:1913
#: elf32-nios2.c:4382
#, c-format
msgid "%pB(%pA+%#<PRIx64>): %s relocation not permitted in shared object"
msgstr "%pB(%pA+%#<PRIx64>): „%s“ премештање није допуштено у дељеним објектима"
-#: elf32-arm.c:12239
+#: elf32-arm.c:12240
#, c-format
msgid "%pB(%pA+%#<PRIx64>): only ADD or SUB instructions are allowed for ALU group relocations"
msgstr "%pB(%pA+%#<PRIx64>): дозвољене Ñу Ñамо „ADD“ или „SUB“ инÑтрукције за премештања „ALU“ групе"
-#: elf32-arm.c:12280 elf32-arm.c:12372 elf32-arm.c:12460 elf32-arm.c:12550
+#: elf32-arm.c:12281 elf32-arm.c:12373 elf32-arm.c:12461 elf32-arm.c:12551
#, c-format
msgid "%pB(%pA+%#<PRIx64>): overflow whilst splitting %#<PRIx64> for group relocation %s"
msgstr "%pB(%pA+%#<PRIx64>): прекорачење за време дељења %#<PRIx64> за премештање групе „%s“"
-#: elf32-arm.c:12608 elf32-arm.c:12767
+#: elf32-arm.c:12609 elf32-arm.c:12768
msgid "local symbol index too big"
msgstr "Ð¸Ð½Ð´ÐµÐºÑ Ð»Ð¾ÐºÐ°Ð»Ð½Ð¾Ð³ Ñимбола је превелик"
-#: elf32-arm.c:12618 elf32-arm.c:12652
+#: elf32-arm.c:12619 elf32-arm.c:12653
msgid "no dynamic index information available"
msgstr "нема доÑтупних података динамичког индекÑа"
-#: elf32-arm.c:12660
+#: elf32-arm.c:12661
msgid "invalid dynamic index"
msgstr "неиÑправан динамички индекÑ"
-#: elf32-arm.c:12777
+#: elf32-arm.c:12778
msgid "dynamic index information not available"
msgstr "подаци динамичког индекÑа ниÑу доÑтупни"
-#: elf32-arm.c:13208 elf32-sh.c:3565
+#: elf32-arm.c:13209 elf32-sh.c:3565
#, c-format
msgid "%pB(%pA+%#<PRIx64>): %s relocation against SEC_MERGE section"
msgstr "%pB(%pA+%#<PRIx64>): „%s“ премештање наÑпрам „SEC_MERGE“ одељка"
-#: elf32-arm.c:13321 elf32-m68k.c:3966 elf32-xtensa.c:2762
-#: elfnn-aarch64.c:6831
+#: elf32-arm.c:13322 elf32-m68k.c:3966 elf32-xtensa.c:2772
+#: elfnn-aarch64.c:6834
#, c-format
msgid "%pB(%pA+%#<PRIx64>): %s used with TLS symbol %s"
msgstr "%pB(%pA+%#<PRIx64>): „%s“ је употребљено Ñа „TLS“ Ñимболом „%s“"
-#: elf32-arm.c:13323 elf32-m68k.c:3968 elf32-xtensa.c:2764
-#: elfnn-aarch64.c:6833
+#: elf32-arm.c:13324 elf32-m68k.c:3968 elf32-xtensa.c:2774
+#: elfnn-aarch64.c:6836
#, c-format
msgid "%pB(%pA+%#<PRIx64>): %s used with non-TLS symbol %s"
msgstr "%pB(%pA+%#<PRIx64>): „%s“ је употребљено Ñа „не-TLS“ Ñимболом „%s“"
-#: elf32-arm.c:13406 elf32-tic6x.c:2649 elfnn-aarch64.c:7168
+#: elf32-arm.c:13407 elf32-tic6x.c:2649 elfnn-aarch64.c:7171
msgid "out of range"
msgstr "изван опÑега"
-#: elf32-arm.c:13410 elf32-nios2.c:4516 elf32-pru.c:936 elf32-tic6x.c:2653
-#: elfnn-aarch64.c:7172
+#: elf32-arm.c:13411 elf32-nios2.c:4516 elf32-pru.c:936 elf32-tic6x.c:2653
+#: elfnn-aarch64.c:7175
msgid "unsupported relocation"
msgstr "неподржано премештање"
-#: elf32-arm.c:13418 elf32-nios2.c:4526 elf32-pru.c:946 elf32-tic6x.c:2661
-#: elfnn-aarch64.c:7180
+#: elf32-arm.c:13419 elf32-nios2.c:4526 elf32-pru.c:946 elf32-tic6x.c:2661
+#: elfnn-aarch64.c:7183
msgid "unknown error"
msgstr "непозната грешка"
-#: elf32-arm.c:13898
+#: elf32-arm.c:13901
#, c-format
msgid "warning: not setting interworking flag of %pB since it has already been specified as non-interworking"
msgstr "упозорење: ниÑам подеÑио заÑтавицу међудејÑтва за „%pB“ пошто је већ наведен као не-међудејÑтвено"
-#: elf32-arm.c:13902
+#: elf32-arm.c:13905
#, c-format
msgid "warning: clearing the interworking flag of %pB due to outside request"
msgstr "упозорење: уклањам заÑтавицу међудејÑтва за „%pB“ уÑлед захтева Ñпоља"
-#: elf32-arm.c:13947
+#: elf32-arm.c:13950
#, c-format
msgid "warning: clearing the interworking flag of %pB because non-interworking code in %pB has been linked with it"
msgstr "упозорење: чиÑтим заÑтавицу међудејÑтва за „%pB“ зато што је немеђудејÑтвени код у „%pB“ повезан Ñа њим"
-#: elf32-arm.c:14034
+#: elf32-arm.c:14037
#, c-format
msgid "%pB: unknown mandatory EABI object attribute %d"
msgstr "%pB: обавезан „%d“ атрибут „EABI“ објекта није познат"
-#: elf32-arm.c:14042
+#: elf32-arm.c:14045
#, c-format
msgid "warning: %pB: unknown EABI object attribute %d"
msgstr "упозорење: %pB: „%d“ атрибут „EABI“ објекта није познат"
-#: elf32-arm.c:14342
+#: elf32-arm.c:14380
#, c-format
msgid "error: %pB: unknown CPU architecture"
msgstr "грешка: %pB: непозната архитектура процеÑора"
-#: elf32-arm.c:14380 elf32-nios2.c:2950
+#: elf32-arm.c:14418 elf32-nios2.c:2950
#, c-format
msgid "error: %pB: conflicting CPU architectures %d/%d"
msgstr "грешка: %pB: архитектуре процеÑора %d/%d Ñу у Ñукобу"
-#: elf32-arm.c:14477
+#: elf32-arm.c:14515
#, c-format
msgid "Error: %pB has both the current and legacy Tag_MPextension_use attributes"
msgstr "Грешка: „%pB“ поÑедује и тренутни и Ñтари „Tag_MPextension_use“ атрибут"
-#: elf32-arm.c:14506
+#: elf32-arm.c:14544
#, c-format
msgid "error: %pB uses VFP register arguments, %pB does not"
msgstr "грешка: „%pB“ кориÑти аргументе „VFP“ региÑтра, а „%pB“ не"
-#: elf32-arm.c:14665
+#: elf32-arm.c:14713
#, c-format
msgid "error: %pB: unable to merge virtualization attributes with %pB"
msgstr "грешка: %pB: не могу да Ñпојим атрибуте виртуелизације Ñа „%pB“"
-#: elf32-arm.c:14691
+#: elf32-arm.c:14739
#, c-format
msgid "error: %pB: conflicting architecture profiles %c/%c"
msgstr "грешка: %pB: У Ñукобу Ñу профили архитектуре „%c/%c“"
-#: elf32-arm.c:14830
+#: elf32-arm.c:14878
#, c-format
msgid "warning: %pB: conflicting platform configuration"
msgstr "упозорење: %pB: подешавање платформе је у Ñукобу"
-#: elf32-arm.c:14839
+#: elf32-arm.c:14887
#, c-format
msgid "error: %pB: conflicting use of R9"
msgstr "грешка: %pB: у Ñукобу је коришћење „R9“"
-#: elf32-arm.c:14851
+#: elf32-arm.c:14899
#, c-format
msgid "error: %pB: SB relative addressing conflicts with use of R9"
msgstr "грешка: %pB: релативно „SB“ адреÑирање је у Ñукобу Ñа коришћењем „R9“"
-#: elf32-arm.c:14864
+#: elf32-arm.c:14912
#, c-format
msgid "warning: %pB 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 "упозорење: „%pB“ кориÑти %u-бајтни „wchar_t“ онда ће излаз да кориÑти %u-бајтни „wchar_t“; коришћење „wchar_t“ вредноÑти кроз објекте можда неће уÑпети"
-#: elf32-arm.c:14895
+#: elf32-arm.c:14943
#, c-format
msgid "warning: %pB uses %s enums yet the output is to use %s enums; use of enum values across objects may fail"
msgstr "упозорење: „%pB“ кориÑти %s набрајања онда ће излаз да кориÑти %s набрајања; коришћење вредноÑти набрајања кроз објекте можда неће уÑпети"
-#: elf32-arm.c:14907
+#: elf32-arm.c:14955
#, c-format
msgid "error: %pB uses iWMMXt register arguments, %pB does not"
msgstr "грешка: „%pB“ кориÑти аргументе „iWMMXt“ региÑтра, а „%pB“ не"
-#: elf32-arm.c:14924
+#: elf32-arm.c:14972
#, c-format
msgid "error: fp16 format mismatch between %pB and %pB"
msgstr "грешка: „fp16“ Ð·Ð°Ð¿Ð¸Ñ Ð½Ð¸Ñ˜Ðµ иÑти за „%pB“ и „%pB“"
-#: elf32-arm.c:14960
+#: elf32-arm.c:15008
#, c-format
msgid "%pB has both the current and legacy Tag_MPextension_use attributes"
msgstr "„%pB“ поÑедује и тренутни и Ñтари „Tag_MPextension_use“ атрибут"
-#: elf32-arm.c:15056
+#: elf32-arm.c:15104
#, c-format
msgid " [interworking enabled]"
msgstr " [међудејÑтво је укључено]"
-#: elf32-arm.c:15064
+#: elf32-arm.c:15112
#, c-format
msgid " [VFP float format]"
msgstr " [„VFP“ Ð·Ð°Ð¿Ð¸Ñ Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¾Ð³ броја]"
-#: elf32-arm.c:15066
+#: elf32-arm.c:15114
#, c-format
msgid " [Maverick float format]"
msgstr " [„Maverick“ Ð·Ð°Ð¿Ð¸Ñ Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¾Ð³ броја]"
-#: elf32-arm.c:15068
+#: elf32-arm.c:15116
#, c-format
msgid " [FPA float format]"
msgstr " [„FPA“ Ð·Ð°Ð¿Ð¸Ñ Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¾Ð³ броја]"
-#: elf32-arm.c:15071
+#: elf32-arm.c:15119
#, c-format
msgid " [floats passed in float registers]"
msgstr " [децималне вредноÑти Ñу проÑлеђене у региÑтре децималних вредноÑти]"
-#: elf32-arm.c:15074 elf32-arm.c:15160
+#: elf32-arm.c:15122 elf32-arm.c:15208
#, c-format
msgid " [position independent]"
msgstr " [незавиÑтан од положаја]"
-#: elf32-arm.c:15077
+#: elf32-arm.c:15125
#, c-format
msgid " [new ABI]"
msgstr " [нови „ABI“]"
-#: elf32-arm.c:15080
+#: elf32-arm.c:15128
#, c-format
msgid " [old ABI]"
msgstr " [Ñтари „ABI“]"
-#: elf32-arm.c:15083
+#: elf32-arm.c:15131
#, c-format
msgid " [software FP]"
msgstr " [логички покретни зарез]"
-#: elf32-arm.c:15092
+#: elf32-arm.c:15140
#, c-format
msgid " [Version1 EABI]"
msgstr " [Издање1 „EABI“]"
-#: elf32-arm.c:15095 elf32-arm.c:15106
+#: elf32-arm.c:15143 elf32-arm.c:15154
#, c-format
msgid " [sorted symbol table]"
msgstr " [табела Ñређених Ñимбола]"
-#: elf32-arm.c:15097 elf32-arm.c:15108
+#: elf32-arm.c:15145 elf32-arm.c:15156
#, c-format
msgid " [unsorted symbol table]"
msgstr " [табела неÑређених Ñимбола]"
-#: elf32-arm.c:15103
+#: elf32-arm.c:15151
#, c-format
msgid " [Version2 EABI]"
msgstr " [Издање2 „EABI“]"
-#: elf32-arm.c:15111
+#: elf32-arm.c:15159
#, c-format
msgid " [dynamic symbols use segment index]"
msgstr " [динамички Ñимболи кориÑте Ð¸Ð½Ð´ÐµÐºÑ Ñегмента]"
-#: elf32-arm.c:15114
+#: elf32-arm.c:15162
#, c-format
msgid " [mapping symbols precede others]"
msgstr " [мапирање Ñимбола претходи другима]"
-#: elf32-arm.c:15121
+#: elf32-arm.c:15169
#, c-format
msgid " [Version3 EABI]"
msgstr " [Издање3 „EABI“]"
-#: elf32-arm.c:15125
+#: elf32-arm.c:15173
#, c-format
msgid " [Version4 EABI]"
msgstr " [Издање4 „EABI“]"
-#: elf32-arm.c:15129
+#: elf32-arm.c:15177
#, c-format
msgid " [Version5 EABI]"
msgstr " [Издање5 „EABI“]"
-#: elf32-arm.c:15132
+#: elf32-arm.c:15180
#, c-format
msgid " [soft-float ABI]"
msgstr " [„ABI“ ÑофтверÑког покретног зареза]"
-#: elf32-arm.c:15135
+#: elf32-arm.c:15183
#, c-format
msgid " [hard-float ABI]"
msgstr " [„ABI“ хардверÑког покретног зареза]"
-#: elf32-arm.c:15141
+#: elf32-arm.c:15189
#, c-format
msgid " [BE8]"
msgstr " [BE8]"
-#: elf32-arm.c:15144
+#: elf32-arm.c:15192
#, c-format
msgid " [LE8]"
msgstr " [LE8]"
-#: elf32-arm.c:15150
+#: elf32-arm.c:15198
#, c-format
msgid " <EABI version unrecognised>"
msgstr " <Ðепознато „EABI“ издање>"
-#: elf32-arm.c:15157
+#: elf32-arm.c:15205
#, c-format
msgid " [relocatable executable]"
msgstr " [премеÑтива извршна]"
-#: elf32-arm.c:15163
+#: elf32-arm.c:15211
#, c-format
msgid " [FDPIC ABI supplement]"
msgstr " [„FDPIC ABI“ додатак]"
-#: elf32-arm.c:15168 elfnn-aarch64.c:7337
+#: elf32-arm.c:15216 elfnn-aarch64.c:7340
#, c-format
msgid " <Unrecognised flag bits set>"
msgstr " <Ðепознат Ñкуп битова заÑтавице>"
-#: elf32-arm.c:15285 elf32-arm.c:15419 elf32-i386.c:1524 elf32-s390.c:923
-#: elf32-tic6x.c:2724 elf32-tilepro.c:1435 elf32-xtensa.c:1094
-#: elf64-s390.c:845 elf64-x86-64.c:1900 elfxx-sparc.c:1386 elfxx-tilegx.c:1662
-#: elfnn-aarch64.c:7608 elfnn-riscv.c:660
+#: elf32-arm.c:15333 elf32-arm.c:15467 elf32-i386.c:1511 elf32-s390.c:923
+#: elf32-tic6x.c:2724 elf32-tilepro.c:1435 elf32-xtensa.c:1102
+#: elf64-s390.c:845 elf64-x86-64.c:1882 elfxx-sparc.c:1386 elfxx-tilegx.c:1662
+#: elfxx-x86.c:953 elfnn-aarch64.c:7611 elfnn-loongarch.c:604
+#: elfnn-riscv.c:660
#, c-format
msgid "%pB: bad symbol index: %d"
msgstr "%pB: лош Ð¸Ð½Ð´ÐµÐºÑ Ñимбола: %d"
-#: elf32-arm.c:15675
+#: elf32-arm.c:15723
#, c-format
msgid "FDPIC does not yet support %s relocation to become dynamic for executable"
msgstr "„FDPIC“ још увек не подржава „%s“ премештање да би поÑтао динамички за извршне"
-#: elf32-arm.c:16936
+#: elf32-arm.c:16984
#, c-format
msgid "errors encountered processing file %pB"
msgstr "наиђох на грешке током обраде датотеке „%pB“"
-#: elf32-arm.c:17309 elflink.c:12991 elflink.c:13038
+#: elf32-arm.c:17357 elflink.c:13186 elflink.c:13233
#, c-format
msgid "could not find section %s"
msgstr "не могу да нађем одељак „%s“"
-#: elf32-arm.c:18230
+#: elf32-arm.c:18278
#, c-format
msgid "%pB: Number of symbols in input file has increased from %lu to %u\n"
msgstr "%pB: Број Ñимбола у улазној датотеци Ñе повећао Ñа %lu на %u\n"
-#: elf32-arm.c:18494
+#: elf32-arm.c:18542
#, c-format
msgid "%pB: error: Cortex-A8 erratum stub is allocated in unsafe location"
msgstr "%pB: грешка: окрајак грешке КортекÑа Ð8 је додељен небезбедној локацији"
#. There's not much we can do apart from complain if this
#. happens.
-#: elf32-arm.c:18521
+#: elf32-arm.c:18569
#, c-format
msgid "%pB: error: Cortex-A8 erratum stub out of range (input file too large)"
msgstr "%pB: грешка: окрајак грешке КортекÑа Ð8 је ван опÑега (улазна датотека је превелика)"
-#: elf32-arm.c:19348 elf32-arm.c:19370
+#: elf32-arm.c:19396 elf32-arm.c:19418
#, c-format
msgid "%pB: error: VFP11 veneer out of range"
msgstr "%pB: грешка: „VFP11“ превлака је ван опÑега"
-#: elf32-arm.c:19421
+#: elf32-arm.c:19469
#, c-format
msgid "%pB(%#<PRIx64>): error: cannot create STM32L4XX veneer; jump out of range by %<PRId64> bytes; cannot encode branch instruction"
msgstr "%pB(%#<PRIx64>): грешка: не могу да Ñтворим „STM32L4XX“ превлаку; иÑкочих из опÑега за %<PRId64> бајта; не могу да декодирам инÑтрукцију гране"
-#: elf32-arm.c:19460
+#: elf32-arm.c:19508
#, c-format
msgid "%pB: error: cannot create STM32L4XX veneer"
msgstr "%pB: грешка: не могу да Ñтворим „STM32L4XX“ превлаку"
-#: elf32-arm.c:20544
+#: elf32-arm.c:20590
#, c-format
msgid "error: %pB is already in final BE8 format"
msgstr "грешка: „%pB“ је већ у завршном запиÑу „BE8“"
-#: elf32-arm.c:20620
+#: elf32-arm.c:20666
#, c-format
msgid "error: source object %pB has EABI version %d, but target %pB has EABI version %d"
msgstr "грешка: изворни објекат „%pB“ Ñадржи „EABI“ издање %d, али циљни „%pB“ има „EABI“ издање %d"
-#: elf32-arm.c:20635
+#: elf32-arm.c:20681
#, c-format
msgid "error: %pB is compiled for APCS-%d, whereas target %pB uses APCS-%d"
msgstr "грешка: „%pB“ је преведен за „APCS-%d“, док циљни „%pB“ кориÑти „APCS-%d“"
-#: elf32-arm.c:20645
+#: elf32-arm.c:20691
#, c-format
msgid "error: %pB passes floats in float registers, whereas %pB passes them in integer registers"
msgstr "грешка: „%pB“ проÑлеђује децималне вредноÑти у региÑтре децималних, док их „%pB“ проÑлеђује у региÑтре целих вредноÑти"
-#: elf32-arm.c:20649
+#: elf32-arm.c:20695
#, c-format
msgid "error: %pB passes floats in integer registers, whereas %pB passes them in float registers"
msgstr "грешка: „%pB“ проÑлеђује децималне вредноÑти у региÑтре целих, док их „%pB“ проÑлеђује у региÑтре децималних вредноÑти"
-#: elf32-arm.c:20659 elf32-arm.c:20663 elf32-arm.c:20673
+#: elf32-arm.c:20705 elf32-arm.c:20709 elf32-arm.c:20719
#, c-format
msgid "error: %pB uses %s instructions, whereas %pB does not"
msgstr "грешка: „%pB“ кориÑти „%s“ инÑтрукције, али „%pB“ не"
-#: elf32-arm.c:20677
+#: elf32-arm.c:20723
#, c-format
msgid "error: %pB does not use %s instructions, whereas %pB does"
msgstr "грешка: „%pB“ не кориÑти „%s“ инÑтрукције, али „%pB“ да"
-#: elf32-arm.c:20696
+#: elf32-arm.c:20742
#, c-format
msgid "error: %pB uses software FP, whereas %pB uses hardware FP"
msgstr "грешка: „%pB“ кориÑти ÑофтверÑки покретни зарез, док „%pB“ кориÑти хардверÑки"
-#: elf32-arm.c:20700
+#: elf32-arm.c:20746
#, c-format
msgid "error: %pB uses hardware FP, whereas %pB uses software FP"
msgstr "грешка: „%pB“ кориÑти хардверÑки покретни зарез, док „%pB“ кориÑти ÑофтверÑки"
-#: elf32-arm.c:20714
+#: elf32-arm.c:20760
#, c-format
msgid "warning: %pB supports interworking, whereas %pB does not"
msgstr "упозорење: „%pB“ подржава међудејÑтво, док га „%pB“ не подржава"
-#: elf32-arm.c:20720
+#: elf32-arm.c:20766
#, c-format
msgid "warning: %pB does not support interworking, whereas %pB does"
msgstr "упозорење: „%pB“ не подржава међудејÑтво, док га „%pB“ подржава"
-#: elf32-avr.c:1516 elf32-bfin.c:3139 elf32-cris.c:2042 elf32-epiphany.c:573
+#: elf32-avr.c:1516 elf32-bfin.c:3145 elf32-cris.c:2042 elf32-epiphany.c:573
#: elf32-fr30.c:602 elf32-frv.c:4057 elf32-ft32.c:501 elf32-ip2k.c:1488
#: elf32-iq2000.c:699 elf32-m32c.c:632 elf32-mep.c:530 elf32-metag.c:1992
-#: elf32-moxie.c:296 elf32-msp430.c:1514 elf32-mt.c:406 elf32-or1k.c:1869
+#: elf32-moxie.c:296 elf32-msp430.c:1514 elf32-mt.c:406 elf32-or1k.c:1881
#: elf32-tilepro.c:3380 elf32-v850.c:2302 elf32-visium.c:688
#: elf32-xstormy16.c:938 elf64-bpf.c:561 elf64-mmix.c:1549 elfxx-tilegx.c:3750
msgid "internal error: dangerous relocation"
@@ -2127,82 +2159,82 @@ msgstr "унутрашња грешка: опаÑно премештање"
msgid "cannot create stub entry %s"
msgstr "не могу да Ñтворим ÑƒÐ½Ð¾Ñ Ð¾ÐºÑ€Ð°Ñ˜ÐºÐ° „%s“"
-#: elf32-bfin.c:107 elf32-bfin.c:363
+#: elf32-bfin.c:108 elf32-bfin.c:367
msgid "relocation should be even number"
msgstr "премештање треба бити паран број"
-#: elf32-bfin.c:1587
+#: elf32-bfin.c:1593
#, c-format
msgid "%pB(%pA+%#<PRIx64>): unresolvable relocation against symbol `%s'"
msgstr "%pB(%pA+%#<PRIx64>): нерешиво премештање наÑпрам Ñимбола „%s“"
-#: elf32-bfin.c:1619 elf32-i386.c:3466 elf32-m68k.c:4006 elf32-s390.c:3138
-#: elf64-s390.c:3087 elf64-x86-64.c:4137
+#: elf32-bfin.c:1625 elf32-i386.c:3466 elf32-m68k.c:4006 elf32-s390.c:3138
+#: elf64-s390.c:3087 elf64-x86-64.c:4139
#, c-format
msgid "%pB(%pA+%#<PRIx64>): reloc against `%s': error %d"
msgstr "%pB(%pA+%#<PRIx64>): премештање наÑпрам „%s“: грешка %d"
-#: elf32-bfin.c:2645
+#: elf32-bfin.c:2651
#, c-format
msgid "%pB: relocation at `%pA+%#<PRIx64>' references symbol `%s' with nonzero addend"
msgstr "%pB: премештање на „%pA+%#<PRIx64>“ Ñтвара упуту Ñимбола „%s“ Ñа не-нултим Ñабирком"
-#: elf32-bfin.c:2662
+#: elf32-bfin.c:2668
msgid "relocation references symbol not defined in the module"
msgstr "премештање упућује на Ñимбол који није дефиниÑан у модулу"
-#: elf32-bfin.c:2760
+#: elf32-bfin.c:2766
msgid "R_BFIN_FUNCDESC references dynamic symbol with nonzero addend"
msgstr "„R_BFIN_FUNCDESC“ Ñтвара упуту динамичког Ñимбола Ñа не-нултим Ñабирком"
-#: elf32-bfin.c:2800 elf32-bfin.c:2921
+#: elf32-bfin.c:2806 elf32-bfin.c:2927
msgid "cannot emit fixups in read-only section"
msgstr "не могу да пошаљем иÑправке у одељку Ñамо за читање"
-#: elf32-bfin.c:2830 elf32-bfin.c:2958 elf32-lm32.c:1007 elf32-sh.c:4383
+#: elf32-bfin.c:2836 elf32-bfin.c:2964 elf32-lm32.c:1007 elf32-sh.c:4383
msgid "cannot emit dynamic relocations in read-only section"
msgstr "не могу да пошаљем динамичка премештања у одељку Ñамо за читање"
-#: elf32-bfin.c:2880
+#: elf32-bfin.c:2886
msgid "R_BFIN_FUNCDESC_VALUE references dynamic symbol with nonzero addend"
msgstr "„R_BFIN_FUNCDESC_VALUE“ Ñтвара упуту динамичког Ñимбола Ñа не-нултим Ñабирком"
-#: elf32-bfin.c:3043
+#: elf32-bfin.c:3049
msgid "relocations between different segments are not supported"
msgstr "премештања између различитих Ñегмената ниÑу подржана"
-#: elf32-bfin.c:3044
+#: elf32-bfin.c:3050
msgid "warning: relocation references a different segment"
msgstr "упозорење: премештање упућује на другачији Ñегмент"
#. Ignore init flag - it may not be set, despite the flags field containing valid data.
-#: elf32-bfin.c:4729 elf32-cris.c:3862 elf32-m68hc1x.c:1415 elf32-m68k.c:1265
-#: elf32-score.c:3996 elf32-score7.c:3801 elf32-vax.c:536 elf32-xgate.c:494
-#: elfxx-mips.c:16254
+#: elf32-bfin.c:4732 elf32-cris.c:3862 elf32-m68hc1x.c:1415 elf32-m68k.c:1265
+#: elf32-score.c:3987 elf32-score7.c:3794 elf32-vax.c:536 elf32-xgate.c:494
+#: elfxx-mips.c:16270
#, c-format
msgid "private flags = %lx:"
msgstr "приватне заÑтавице = %lx:"
-#: elf32-bfin.c:4780 elf32-frv.c:6585
+#: elf32-bfin.c:4783 elf32-frv.c:6585
#, c-format
msgid "%pB: cannot link non-fdpic object file into fdpic executable"
msgstr "%pB: не могу да повежем датотеку не-„fdpic“ објекта у „fdpic“ извршну"
-#: elf32-bfin.c:4784 elf32-frv.c:6589
+#: elf32-bfin.c:4787 elf32-frv.c:6589
#, c-format
msgid "%pB: cannot link fdpic object file into non-fdpic executable"
msgstr "%pB: не могу да повежем датотеку „fdpic“ објекта у не-„fdpic“ извршну"
-#: elf32-bfin.c:4921
+#: elf32-bfin.c:4924
#, c-format
msgid "*** check this relocation %s"
msgstr "*** проверава ово премештање „%s“"
-#: elf32-bfin.c:5037
+#: elf32-bfin.c:5040
msgid "the bfin target does not currently support the generation of copy relocations"
msgstr "„bfin“ циљ тренутно не подржава Ñтварање премештања умножавања"
-#: elf32-bfin.c:5331 elf32-cr16.c:2713 elf32-m68k.c:4420
+#: elf32-bfin.c:5334 elf32-cr16.c:2710 elf32-m68k.c:4420
msgid "unsupported relocation type"
msgstr "неподржана врÑта премештања"
@@ -2378,7 +2410,7 @@ msgid "warning: file %pB's arch flag %s conflicts with target ck%s, using %s"
msgstr "упозорење: заÑтавица архитектуре “%pB“-а датотеке „%s“ је у Ñукобу Ñа циљним „ck%s“, кориÑтим „%s“"
#. The r_type is error, not support it.
-#: elf32-csky.c:4342 elf32-i386.c:350
+#: elf32-csky.c:4342 elf32-i386.c:344
#, c-format
msgid "%pB: unsupported relocation type: %#x"
msgstr "%pB: неподржана врÑта премештања: %#x"
@@ -2501,7 +2533,7 @@ msgstr "%pB: кориÑти другачија непозната поља „e_
msgid "%pB: relocations in generic ELF (EM: %d)"
msgstr "%pB: премештања у општем „ELF“-у (EM: %d)"
-#: elf32-hppa.c:761 elf32-hppa.c:842 elf64-ppc.c:12022
+#: elf32-hppa.c:761 elf32-hppa.c:842 elf64-ppc.c:12181
msgid "%F%P: Could not assign %pA to an output section. Retry without --enable-non-contiguous-regions.\n"
msgstr "%F%P: Ðе могу да доделим „%pA“ излазном одељку. Покушајте без „--enable-non-contiguous-regions“.\n"
@@ -2544,71 +2576,75 @@ msgstr "%pB(%pA+%#<PRIx64>): не могу да радим Ñа „%s“ за â€
msgid ".got section not immediately after .plt section"
msgstr "одељак „.got“ није одмах након одељка „.plt“"
-#: elf32-i386.c:1169 elf64-x86-64.c:1380
+#: elf32-i386.c:1163 elf64-x86-64.c:1369
#, c-format
msgid "%pB: TLS transition from %s to %s against `%s' at %#<PRIx64> in section `%pA' failed"
msgstr "%pB: није уÑпео „TLS“ прелаз Ñа „%s“ на „%s“ наÑпрам „%s“ при %#<PRIx64> у одељку „%pA“"
-#: elf32-i386.c:1272
+#: elf32-i386.c:1266
#, c-format
msgid "%pB: direct GOT relocation R_386_GOT32X against `%s' without base register can not be used when making a shared object"
msgstr "%pB: директно „GOT“ премештање „R_386_GOT32X“ наÑпрам „%s“ без региÑтра оÑнове Ñе не може кориÑтити када Ñе Ñтвара дељени објекат"
-#: elf32-i386.c:1721 elf32-s390.c:1151 elf32-sh.c:5488 elf32-tilepro.c:1548
-#: elf32-xtensa.c:1266 elf64-s390.c:1083 elfxx-sparc.c:1556
-#: elfxx-tilegx.c:1767 elfnn-riscv.c:568
+#: elf32-i386.c:1695 elf32-s390.c:1151 elf32-sh.c:5488 elf32-tilepro.c:1548
+#: elf32-xtensa.c:1274 elf64-s390.c:1083 elfxx-sparc.c:1556
+#: elfxx-tilegx.c:1767 elfnn-loongarch.c:555 elfnn-riscv.c:568
#, c-format
msgid "%pB: `%s' accessed both as normal and thread local symbol"
msgstr "%pB: „%s“ Ñе приÑтупило и као нормалном и као Ñимболу локалне нити"
-#: elf32-i386.c:1793
+#: elf32-i386.c:1767
#, c-format
msgid "%pB: unsupported non-PIC call to IFUNC `%s'"
msgstr "%pB: неподржани не-„PIC“ позив за „IFUNC“ „%s“"
-#: elf32-i386.c:2373 elf64-x86-64.c:2721 elfnn-riscv.c:2284
+#: elf32-i386.c:2357 elf64-x86-64.c:2701 elfnn-riscv.c:2300
#, c-format
msgid "%pB: relocation %s against STT_GNU_IFUNC symbol `%s' isn't supported"
msgstr "%pB: премештање „%s“ наÑпрам „STT_GNU_IFUNC“ Ñимбола „%s“ није подржано"
-#: elf32-i386.c:2406 elf32-i386.c:3677 elf32-i386.c:3824 elf64-x86-64.c:2778
-#: elf64-x86-64.c:4310 elf64-x86-64.c:4472 elfnn-riscv.c:2157
-#: elfnn-riscv.c:2956 elfnn-riscv.c:3030
+#: elf32-i386.c:2390 elf32-i386.c:3677 elf32-i386.c:3825 elf64-x86-64.c:2758
+#: elf64-x86-64.c:4312 elf64-x86-64.c:4475 elfnn-riscv.c:2173
+#: elfnn-riscv.c:2972 elfnn-riscv.c:3046
#, c-format
msgid "Local IFUNC function `%s' in %pB\n"
msgstr "Локална „IFUNC“ функција „%s“ у „%pB“\n"
-#: elf32-i386.c:2575
+#: elf32-i386.c:2563
#, c-format
msgid "%pB: direct GOT relocation %s against `%s' without base register can not be used when making a shared object"
msgstr "%pB: директно „GOT“ премештање „%s“ наÑпрам „%s“ без региÑтра оÑнове Ñе не може кориÑтити када Ñе Ñтвара дељени објекат"
-#: elf32-i386.c:2610 elf64-x86-64.c:2988
+#: elf32-i386.c:2598 elf64-x86-64.c:2974
msgid "hidden symbol"
msgstr "Ñкривени Ñимбол"
-#: elf32-i386.c:2613 elf64-x86-64.c:2991
+#: elf32-i386.c:2601 elf64-x86-64.c:2977
msgid "internal symbol"
msgstr "унутрашњи Ñимбол"
-#: elf32-i386.c:2616 elf64-x86-64.c:2994
+#: elf32-i386.c:2604 elf64-x86-64.c:2980
msgid "protected symbol"
msgstr "заштићени Ñимбол"
-#: elf32-i386.c:2619 elf64-x86-64.c:2997
+#: elf32-i386.c:2607 elf64-x86-64.c:2983
msgid "symbol"
msgstr "Ñимбол"
-#: elf32-i386.c:2625
+#: elf32-i386.c:2613
#, c-format
msgid "%pB: relocation R_386_GOTOFF against undefined %s `%s' can not be used when making a shared object"
msgstr "%pB: премештање „R_386_GOTOFF“ наÑпрам недефиниÑаног %s „%s“ Ñе не може кориÑтити када Ñе Ñтвара дељени објекат"
-#: elf32-i386.c:2638
+#: elf32-i386.c:2626
#, c-format
msgid "%pB: relocation R_386_GOTOFF against protected %s `%s' can not be used when making a shared object"
msgstr "%pB: премештање „R_386_GOTOFF“ наÑпрам заштићеног %s „%s“ Ñе не може кориÑтити када Ñе Ñтвара дељени објекат"
+#: elf32-i386.c:4028 elf64-x86-64.c:4686
+msgid "%F%P: discarded output section: `%pA'\n"
+msgstr "%F%P: одбачени одељак излаза: „%pA“\n"
+
#: elf32-ip2k.c:855 elf32-ip2k.c:861 elf32-ip2k.c:928 elf32-ip2k.c:934
msgid "ip2k relaxer: switch table without complete matching relocation information."
msgstr "релакÑер „ip2k“: пребацивање табеле без потпуног подударања података о премештању."
@@ -2654,7 +2690,7 @@ msgstr "%pB: мета (%s) премештања „%s“ је у погрешнÐ
msgid "%pB: instruction set mismatch with previous modules"
msgstr "%pB: Ñкуп инÑтрукција Ñе разликује од претходних модула"
-#: elf32-m32r.c:3300 elf32-nds32.c:6851
+#: elf32-m32r.c:3300 elf32-nds32.c:6846
#, c-format
msgid "private flags = %lx"
msgstr "приватне заÑтавице = %lx"
@@ -2764,12 +2800,12 @@ msgstr " [меморија=обично]"
msgid " [XGATE RAM offsetting]"
msgstr " [XGATE RAM померај]"
-#: elf32-m68k.c:1157 elf32-m68k.c:1165 elf32-ppc.c:3582 elf32-ppc.c:3590
+#: elf32-m68k.c:1157 elf32-m68k.c:1165 elf32-ppc.c:3597 elf32-ppc.c:3605
#, c-format
msgid "%pB uses hard float, %pB uses soft float"
msgstr "„%pB“ кориÑти хардверÑки покретни зарез, „%pB“ кориÑти ÑофтверÑки покретни зарез"
-#: elf32-m68k.c:1280 elf32-m68k.c:1281 vms-alpha.c:7662 vms-alpha.c:7678
+#: elf32-m68k.c:1280 elf32-m68k.c:1281 vms-alpha.c:7906 vms-alpha.c:7922
msgid "unknown"
msgstr "непознато"
@@ -2829,7 +2865,7 @@ msgstr "%pB: вероватно је преведено без „-fPIC“?"
msgid "literal relocation occurs for an external symbol"
msgstr "дошло је до доÑловног премештања Ñпољног Ñимбола"
-#: elf32-mips.c:1824 elf32-score.c:572 elf32-score7.c:472 elf64-mips.c:3559
+#: elf32-mips.c:1824 elf32-score.c:563 elf32-score7.c:465 elf64-mips.c:3559
#: elfn32-mips.c:3375
msgid "32bits gp relative relocation occurs for an external symbol"
msgstr "дошло је до 32-битног гп релативног премештања Ñпољног Ñимбола"
@@ -2887,92 +2923,92 @@ msgstr "грешка: „%pB“ кориÑти модел „%s“ податаÐ
msgid "error: %pB can use the upper region for data, but %pB assumes data is exclusively in lower memory"
msgstr "грешка: „%pB“ може да кориÑти горњу облаÑÑ‚ за податке, али „%pB“ подразумева да Ñу подаци иÑкључиво у доњој меморији"
-#: elf32-nds32.c:3625
+#: elf32-nds32.c:3620
#, c-format
msgid "error: can't find symbol: %s"
msgstr "грешка: не могу да нађем Ñимбол: %s"
-#: elf32-nds32.c:5524
+#: elf32-nds32.c:5519
#, c-format
msgid "%pB: warning: %s unsupported in shared mode"
msgstr "%pB: упозорење: „%s“ није подржано у дељеном режиму"
-#: elf32-nds32.c:5650
+#: elf32-nds32.c:5645
#, c-format
msgid "%pB: warning: unaligned access to GOT entry"
msgstr "%pB: упозорење: непоравнат приÑтуп уноÑу „GOT“"
-#: elf32-nds32.c:5691
+#: elf32-nds32.c:5686
#, c-format
msgid "%pB: warning: relocate SDA_BASE failed"
msgstr "%pB: упозорење: није уÑпело премештање „SDA_BASE“"
-#: elf32-nds32.c:5713
+#: elf32-nds32.c:5708
#, c-format
msgid "%pB(%pA): warning: unaligned small data access of type %d"
msgstr "%pB(%pA): упозорење: приÑтуп непоравнатим малим подацима врÑте „%d“"
-#: elf32-nds32.c:6639
+#: elf32-nds32.c:6634
#, c-format
msgid "%pB: ISR vector size mismatch with previous modules, previous %u-byte, current %u-byte"
msgstr "%pB: величина вектора „ISR“ Ñе разликује од претходних модула: претходна %u бајта; текућа %u бајта"
-#: elf32-nds32.c:6687
+#: elf32-nds32.c:6682
#, c-format
msgid "%pB: warning: endian mismatch with previous modules"
msgstr "%pB: упозорење: крајњоÑÑ‚ Ñе разликује од претходних модула"
-#: elf32-nds32.c:6701
+#: elf32-nds32.c:6696
#, c-format
msgid "%pB: warning: older version of object file encountered, please recompile with current tool chain"
msgstr "%pB: упозорење: наишао Ñам на Ñтарије издање датотеке објекта, преведите поново Ñа текућим ланцем алата"
-#: elf32-nds32.c:6789
+#: elf32-nds32.c:6784
#, c-format
msgid "%pB: error: ABI mismatch with previous modules"
msgstr "%pB: грешка: „ABI“ Ñе разликује од претходних модула"
-#: elf32-nds32.c:6799
+#: elf32-nds32.c:6794
#, c-format
msgid "%pB: error: instruction set mismatch with previous modules"
msgstr "%pB: грешка: Ñкуп инÑтрукција Ñе разликује од претходних модула"
-#: elf32-nds32.c:6826
+#: elf32-nds32.c:6821
#, c-format
msgid "%pB: warning: incompatible elf-versions %s and %s"
msgstr "%pB: упозорење: елф издања %s и %s ниÑу ÑаглаÑна"
-#: elf32-nds32.c:6857
+#: elf32-nds32.c:6852
#, c-format
msgid ": n1 instructions"
msgstr ": инÑтрукције „n1“"
-#: elf32-nds32.c:6860
+#: elf32-nds32.c:6855
#, c-format
msgid ": n1h instructions"
msgstr ": инÑтрукције „n1h“"
-#: elf32-nds32.c:9313
+#: elf32-nds32.c:9304
#, c-format
msgid "%pB: error: search_nds32_elf_blank reports wrong node"
msgstr "%pB: грешка: „search_nds32_elf_blank“ извештава о погрешном чвору"
-#: elf32-nds32.c:9577
+#: elf32-nds32.c:9568
#, c-format
msgid "%pB: warning: %s points to unrecognized reloc at %#<PRIx64>"
msgstr "%pB: упозорење: „%s“ показује на непознато премештање на %#<PRIx64>"
-#: elf32-nds32.c:12842
+#: elf32-nds32.c:12833
#, c-format
msgid "%pB: nested OMIT_FP in %pA"
msgstr "%pB: угнежђено „OMIT_FP“ у „%pA“"
-#: elf32-nds32.c:12861
+#: elf32-nds32.c:12852
#, c-format
msgid "%pB: unmatched OMIT_FP in %pA"
msgstr "%pB: неодговарајуће „OMIT_FP“ у „%pA“"
-#: elf32-nds32.c:13143 elfxx-mips.c:13407 reloc.c:8508
+#: elf32-nds32.c:13134 elfxx-mips.c:13426 reloc.c:8599
#, c-format
msgid "%X%P: %pB(%pA): relocation \"%pR\" goes out of range\n"
msgstr "%X%P: %pB(%pA): премештање „%pR“ иде ван опÑега\n"
@@ -3000,7 +3036,7 @@ msgstr "премештање је ван опÑега"
msgid "dangerous relocation"
msgstr "опаÑно премештање"
-#: elf32-nios2.c:5364
+#: elf32-nios2.c:5360
#, c-format
msgid "dynamic variable `%s' is zero size"
msgstr "динамичка променљива „%s“ је нулте величине"
@@ -3030,128 +3066,128 @@ msgstr "%pB: Ñабирак треба да буде нула за „got“ пÑ
msgid "%pB: gotoff relocation against dynamic symbol %s"
msgstr "%pB: „gotoff“ премештање наÑпрам динамичког Ñимбола „%s“"
-#: elf32-or1k.c:1554 elf64-alpha.c:4426 elf64-alpha.c:4570
+#: elf32-or1k.c:1551 elf32-or1k.c:1566 elf64-alpha.c:4427 elf64-alpha.c:4571
#, c-format
msgid "%pB: pc-relative relocation against dynamic symbol %s"
msgstr "%pB: „pc“-одноÑно премештање наÑпрам динамичког Ñимбола „%s“"
-#: elf32-or1k.c:1568
+#: elf32-or1k.c:1580
#, c-format
msgid "%pB: non-pic relocation against symbol %s"
msgstr "%pB: „non-pic“ премештање наÑпрам Ñимбола „%s“"
-#: elf32-or1k.c:1652
+#: elf32-or1k.c:1664
#, c-format
msgid "%pB: support for local dynamic not implemented"
msgstr "%pB: подршка за локално динамичко није примењена"
-#: elf32-or1k.c:1831
+#: elf32-or1k.c:1843
#, c-format
msgid "%pB: will not resolve runtime TLS relocation"
msgstr "%pB: нећу решити време покретања „TLS“ премештања"
-#: elf32-or1k.c:2165
+#: elf32-or1k.c:2177
#, c-format
msgid "%pB: bad relocation section name `%s'"
msgstr "%pB: лош назив одељка премештања „%s“"
-#: elf32-or1k.c:3279
+#: elf32-or1k.c:3291
#, c-format
msgid "%pB: %s flag mismatch with previous modules"
msgstr "%pB: „%s“ заÑтавица Ñе разликује од претходних модула"
-#: elf32-ppc.c:987 elf64-ppc.c:1723
+#: elf32-ppc.c:993 elf64-ppc.c:1749
#, c-format
msgid "generic linker can't handle %s"
msgstr "општи повезивач не може да ради Ñа „%s“"
-#: elf32-ppc.c:1627
+#: elf32-ppc.c:1633
#, c-format
msgid "corrupt %s section in %pB"
msgstr "оштећен „%s“ одељак у „%pB“"
-#: elf32-ppc.c:1646
+#: elf32-ppc.c:1652
#, c-format
msgid "unable to read in %s section from %pB"
msgstr "не могу да читам у одељку „%s“ из „%pB“"
-#: elf32-ppc.c:1688
+#: elf32-ppc.c:1694
#, c-format
msgid "warning: unable to set size of %s section in %pB"
msgstr "упозорење: не могу да поÑтавим величину одељка „%s“ у „%pB“"
-#: elf32-ppc.c:1737
+#: elf32-ppc.c:1743
msgid "failed to allocate space for new APUinfo section"
msgstr "ниÑам уÑпео да доделим проÑтор за нови одељак „APUinfo“"
-#: elf32-ppc.c:1756
+#: elf32-ppc.c:1762
msgid "failed to compute new APUinfo section"
msgstr "ниÑам уÑпео да израчунам нови одељак „APUinfo“"
-#: elf32-ppc.c:1759
+#: elf32-ppc.c:1765
msgid "failed to install new APUinfo section"
msgstr "ниÑам уÑпео да инÑталирам нови одељак „APUinfo“"
-#: elf32-ppc.c:2858
+#: elf32-ppc.c:2873
#, c-format
msgid "%pB: relocation %s cannot be used when making a shared object"
msgstr "%pB: премештање „%s“ Ñе не може кориÑтити приликом Ñтварања дељеног објекта"
-#: elf32-ppc.c:3598 elf32-ppc.c:3606
+#: elf32-ppc.c:3613 elf32-ppc.c:3621
#, c-format
msgid "%pB uses double-precision hard float, %pB uses single-precision hard float"
msgstr "„%pB“ кориÑти хардверÑки покретни зарез двоÑтруке тачноÑти, „%pB“ кориÑти хардверÑки покретни зарез једне тачноÑти"
-#: elf32-ppc.c:3628 elf32-ppc.c:3636
+#: elf32-ppc.c:3643 elf32-ppc.c:3651
#, c-format
msgid "%pB uses 64-bit long double, %pB uses 128-bit long double"
msgstr "„%pB“ кориÑти 64-битни дуги дубл, „%pB“ кориÑти 128-битни дуги дубл"
-#: elf32-ppc.c:3644 elf32-ppc.c:3652
+#: elf32-ppc.c:3659 elf32-ppc.c:3667
#, c-format
msgid "%pB uses IBM long double, %pB uses IEEE long double"
msgstr "„%pB“ кориÑти „IBM“ дуги дубл, „%pB“ кориÑти „IEEE“ дуги дубл"
-#: elf32-ppc.c:3719 elf32-ppc.c:3728
+#: elf32-ppc.c:3734 elf32-ppc.c:3743
#, c-format
msgid "%pB uses AltiVec vector ABI, %pB uses SPE vector ABI"
msgstr "„%pB“ кориÑти „AltiVec“ вектор „ABI“, „%pB“ кориÑти „SPE“ вектор „ABI“"
-#: elf32-ppc.c:3757 elf32-ppc.c:3766
+#: elf32-ppc.c:3772 elf32-ppc.c:3781
#, c-format
msgid "%pB uses r3/r4 for small structure returns, %pB uses memory"
msgstr "„%pB“ кориÑти „r3/r4“ за мале резултате Ñтруктуре, „%pB“ кориÑти меморију"
-#: elf32-ppc.c:3830
+#: elf32-ppc.c:3845
#, c-format
msgid "%pB: compiled with -mrelocatable and linked with modules compiled normally"
msgstr "%pB: преведено Ñа „-mrelocatable“ и повезано Ñа модулима који Ñу преведени уобичајеним путем"
-#: elf32-ppc.c:3838
+#: elf32-ppc.c:3853
#, c-format
msgid "%pB: compiled normally and linked with modules compiled with -mrelocatable"
msgstr "%pB: преведено уобичајеним путем и повезано Ñа модулима који Ñу преведени Ñа „-mrelocatable“"
-#: elf32-ppc.c:3907
+#: elf32-ppc.c:3924
#, c-format
msgid "%pB(%pA+0x%lx): expected 16A style relocation on 0x%08x insn"
msgstr "%pB(%pA+0x%lx): очекивах премештање „16A“ Ñтила на „0x%08x insn“"
-#: elf32-ppc.c:3926
+#: elf32-ppc.c:3943
#, c-format
msgid "%pB(%pA+0x%lx): expected 16D style relocation on 0x%08x insn"
msgstr "%pB(%pA+0x%lx): очекивах премештање „16D“ Ñтила на „0x%08x insn“"
-#: elf32-ppc.c:4029
+#: elf32-ppc.c:4047
#, c-format
msgid "bss-plt forced due to %pB"
msgstr "„bss-plt“ је приÑиљено због „%pB“"
-#: elf32-ppc.c:4031
+#: elf32-ppc.c:4049
msgid "bss-plt forced by profiling"
msgstr "„bss-plt“ је приÑиљено профилиÑањем"
-#: elf32-ppc.c:4608 elf64-ppc.c:8317
+#: elf32-ppc.c:4626 elf64-ppc.c:8483
msgid "%H: warning: %s unexpected insn %#x.\n"
msgstr "%H: упозорење: „%s“ неочекивани улазни знак „%#x“.\n"
@@ -3159,36 +3195,41 @@ msgstr "%H: упозорење: „%s“ неочекивани улазни зÐ
#. could just mark this symbol to exclude it
#. from tls optimization but it's safer to skip
#. the entire optimization.
-#: elf32-ppc.c:4638 elf64-ppc.c:8382
+#: elf32-ppc.c:4656 elf64-ppc.c:8548
#, c-format
msgid "%H arg lost __tls_get_addr, TLS optimization disabled\n"
msgstr "Ðргумент „%H“ је изгубио „__tls_get_addr“, „TLS“ оптимизација је иÑкључена\n"
-#: elf32-ppc.c:5564 elf32-sh.c:3017 elf32-tilepro.c:2248 elfxx-sparc.c:2454
+#: elf32-ppc.c:5582 elf32-sh.c:3017 elf32-tilepro.c:2248 elfxx-sparc.c:2454
#: elfxx-tilegx.c:2494
#, c-format
msgid "%pB: dynamic relocation in read-only section `%pA'\n"
msgstr "%pB: динамичко премештање у одељку Ñамо за читање %pA\n"
-#: elf32-ppc.c:7407
+#: elf32-ppc.c:7437
msgid "%P: %H: error: %s with unexpected instruction %x\n"
msgstr "%P: %H: грешка: „%s“ Ñа неочекиваном инÑтрукцијом „%x“\n"
-#: elf32-ppc.c:7444
+#: elf32-ppc.c:7475
msgid "%H: fixup branch overflow\n"
msgstr "%H: прекорачење „fixup“ гране\n"
-#: elf32-ppc.c:7484 elf32-ppc.c:7520
+#: elf32-ppc.c:7515 elf32-ppc.c:7553
#, c-format
msgid "%pB(%pA+%#<PRIx64>): error: %s with unexpected instruction %#x"
msgstr "%pB(%pA+%#<PRIx64>): грешка: „%s“ Ñа неочекиваном инÑтрукцијом „%#x“"
-#: elf32-ppc.c:7584
+#: elf32-ppc.c:7617
#, c-format
msgid "%X%H: unsupported bss-plt -fPIC ifunc %s\n"
msgstr "%X%H: неподржано „bss-plt“ „-fPIC“ „ifunc“ „%s“\n"
-#: elf32-ppc.c:7899
+#: elf32-ppc.c:7653
+#, c-format
+msgid "%pB: reloc %#x unsupported"
+msgstr "%pB: премештање „%#x“ није подржано"
+
+#: elf32-ppc.c:7938
#, c-format
msgid "%H: non-zero addend on %s reloc against `%s'\n"
msgstr "%H: не нулти Ñабирак на „%s“ премештању наÑпрам „%s“\n"
@@ -3201,49 +3242,49 @@ msgstr "%H: не нулти Ñабирак на „%s“ премештању н
#. local won't have the +32k reloc addend trick marking
#. -fPIC code, so the linker won't know whether r30 is
#. _GLOBAL_OFFSET_TABLE_ or pointing into a .got2 section.
-#: elf32-ppc.c:7931
+#: elf32-ppc.c:7970
#, c-format
msgid "%X%H: @local call to ifunc %s\n"
msgstr "%X%H: позив „@local“ за i-функцију „%s“\n"
-#: elf32-ppc.c:8109
+#: elf32-ppc.c:8149
#, c-format
msgid "%H: relocation %s for indirect function %s unsupported\n"
msgstr "%H: „%s“ премештање за индиректну функцију „%s“ није подржано\n"
-#: elf32-ppc.c:8441 elf32-ppc.c:8472 elf32-ppc.c:8563 elf32-ppc.c:8659
+#: elf32-ppc.c:8488 elf32-ppc.c:8519 elf32-ppc.c:8622 elf32-ppc.c:8722
#, c-format
msgid "%pB: the target (%s) of a %s relocation is in the wrong output section (%s)"
msgstr "%pB: мета (%s) премештања „%s“ је у погрешном излазном одељку (%s)"
-#: elf32-ppc.c:8814 elf32-ppc.c:8832
+#: elf32-ppc.c:8900 elf32-ppc.c:8921
msgid "%X%P: %H: %s relocation unsupported for bss-plt\n"
msgstr "%X%P: %H: „%s“ премештање није подржано за „bss-plt“\n"
-#: elf32-ppc.c:8913
+#: elf32-ppc.c:9003
#, c-format
msgid "%H: error: %s against `%s' not a multiple of %u\n"
msgstr "%H: грешка: „%s“ наÑпрам „%s“ није производ „%u“\n"
-#: elf32-ppc.c:8942
+#: elf32-ppc.c:9032
#, c-format
msgid "%H: unresolvable %s relocation against symbol `%s'\n"
msgstr "%H: нерешиво „%s“ премештање наÑпрам Ñимбола „%s“\n"
-#: elf32-ppc.c:9023
+#: elf32-ppc.c:9114
#, c-format
msgid "%H: %s reloc against `%s': error %d\n"
msgstr "%H: „%s“ премештање наÑпрам „%s“: грешка %d\n"
-#: elf32-ppc.c:9904
+#: elf32-ppc.c:9995
msgid "%X%P: text relocations and GNU indirect functions will result in a segfault at runtime\n"
msgstr "%X%P: премештање текÑта и ГÐУ-ове индиректне функције ће резултирати неуÑпехом Ñегментације у време извршавања\n"
-#: elf32-ppc.c:9908 elf64-ppc.c:17667
+#: elf32-ppc.c:9999 elf64-ppc.c:18133
msgid "%P: warning: text relocations and GNU indirect functions may result in a segfault at runtime\n"
msgstr "%P: упозорење: премештање текÑта и ГÐУ-ове индиректне функције могу резултирати неуÑпехом Ñегментације у време извршавања\n"
-#: elf32-ppc.c:9953
+#: elf32-ppc.c:10044
#, c-format
msgid "%s not defined in linker created %pA"
msgstr "„%s“ није дефиниÑано у повезивачу Ñтвореном „%pA“"
@@ -3253,58 +3294,65 @@ msgstr "„%s“ није дефиниÑано у повезивачу ÑтвоÑ
msgid "error: %pB: old incompatible object file detected"
msgstr "грешка: %pB: Ñтара неÑаглаÑна датотека објекта је откривена"
-#: elf32-rl78.c:372
-msgid "internal error: RL78 reloc stack overflow"
-msgstr "унутрашња грешка: прекорачење „RL78“ премештања Ñпремника"
+#: elf32-rl78.c:551
+msgid "RL78 reloc stack overflow/underflow"
+msgstr "прекорачење/поткорачење Ñремника „RL78“ премештања"
-#: elf32-rl78.c:383
-msgid "internal error: RL78 reloc stack underflow"
-msgstr "унутрашња грешка: подкорачење „RL78“ премештања Ñпремника"
+#: elf32-rl78.c:555
+msgid "RL78 reloc divide by zero"
+msgstr "„RL78“ премештање дели нулом"
-#: elf32-rl78.c:1053
+#: elf32-rl78.c:1069
msgid "warning: RL78_SYM reloc with an unknown symbol"
msgstr "упозорење: „RL78_SYM“ премештање Ñа непознатим Ñимболом"
-#: elf32-rl78.c:1084 elf32-rx.c:1461
-#, c-format
-msgid "%pB(%pA): error: call to undefined function '%s'"
-msgstr "%pB(%pA): грешка: позив за недефиниÑану функцију „%s“"
+#: elf32-rl78.c:1115
+msgid "%H: %s out of range\n"
+msgstr "%H: „%s“ је ван опÑега\n"
+
+#: elf32-rl78.c:1122
+msgid "%H: relocation type %u is not supported\n"
+msgstr "%H: врÑта премештања „%u“ није одржана\n"
-#: elf32-rl78.c:1205
+#: elf32-rl78.c:1134
+msgid "%H: relocation %s returns an unrecognized value %x\n"
+msgstr "%H: премештање „%s“ даје непознату вредноÑÑ‚ „%x“\n"
+
+#: elf32-rl78.c:1220
#, c-format
msgid "RL78 ABI conflict: G10 file %pB cannot be linked with %s file %pB"
msgstr "„RL78 ABI“ Ñукоб: „G10“ датотека „%pB“ Ñе не може увезати Ñа „%s“ датотеком „%pB“"
-#: elf32-rl78.c:1222
+#: elf32-rl78.c:1237
#, c-format
msgid "RL78 ABI conflict: cannot link %s file %pB with %s file %pB"
msgstr "„ABI RL78“ Ñукоб: не могу да повежем „%s“ датотеку „%pB“ Ñа „%s“ датотеком „%pB“"
-#: elf32-rl78.c:1231
+#: elf32-rl78.c:1246
msgid "RL78 merge conflict: cannot link 32-bit and 64-bit objects together"
msgstr "„RL78“ Ñукоб Ñтапања: не могу да повежем заједно 32-битне и 64-битне објекте"
-#: elf32-rl78.c:1235 elf32-rl78.c:1239
+#: elf32-rl78.c:1250 elf32-rl78.c:1254
#, c-format
msgid "- %pB is 64-bit, %pB is not"
msgstr "— „%pB“ је 64-битно, „%pB“ није"
-#: elf32-rl78.c:1266
+#: elf32-rl78.c:1281
#, c-format
msgid " [64-bit doubles]"
msgstr " [doubles de 64 bits]"
-#: elf32-rx.c:607
+#: elf32-rx.c:618
#, c-format
msgid "%pB:%pA: table entry %s outside table"
msgstr "%pB:%pA: ÑƒÐ½Ð¾Ñ Ñ‚Ð°Ð±ÐµÐ»Ðµ „%s“ је ван табеле"
-#: elf32-rx.c:614
+#: elf32-rx.c:625
#, c-format
msgid "%pB:%pA: table entry %s not word-aligned within table"
msgstr "%pB:%pA: ÑƒÐ½Ð¾Ñ Ñ‚Ð°Ð±ÐµÐ»Ðµ „%s“ није Ñа поравнањм речи унутар табеле"
-#: elf32-rx.c:689
+#: elf32-rx.c:700
#, c-format
msgid "%pB:%pA: warning: deprecated Red Hat reloc %s detected against: %s"
msgstr "%pB:%pA: упозорење: заÑтарело премештање Ред Хета „%s“ је откривено у: %s"
@@ -3313,36 +3361,41 @@ msgstr "%pB:%pA: упозорење: заÑтарело премештање РÐ
#. 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:709
+#: elf32-rx.c:720
#, c-format
msgid "%pB(%pA): unsafe PID relocation %s at %#<PRIx64> (against %s in %s)"
msgstr "%pB(%pA): неÑигурно „PID“ премештање „%s“ на %#<PRIx64> (наÑпрам „%s“ у „%s“)"
-#: elf32-rx.c:1293
+#: elf32-rx.c:1304
msgid "warning: RX_SYM reloc with an unknown symbol"
msgstr "упозорење: „RX_SYM“ премештање Ñа непознатим Ñимболом"
-#: elf32-rx.c:3173
+#: elf32-rx.c:1472
+#, c-format
+msgid "%pB(%pA): error: call to undefined function '%s'"
+msgstr "%pB(%pA): грешка: позив за недефиниÑану функцију „%s“"
+
+#: elf32-rx.c:3184
#, c-format
msgid "there is a conflict merging the ELF header flags from %pB"
msgstr "Ñукоб Ñтапања заÑтавица „ELF“ заглавља из „%pB“"
-#: elf32-rx.c:3176
+#: elf32-rx.c:3187
#, c-format
msgid " the input file's flags: %s"
msgstr " заÑтавице улазне датотеке: %s"
-#: elf32-rx.c:3178
+#: elf32-rx.c:3189
#, c-format
msgid " the output file's flags: %s"
msgstr " заÑтавице излазне датотеке: %s"
-#: elf32-rx.c:3785
+#: elf32-rx.c:3796
#, c-format
msgid "%pB:%pA: table %s missing corresponding %s"
msgstr "%pB:%pA: табели „%s“ недоÑтаје одговарајуће „%s“"
-#: elf32-rx.c:3793
+#: elf32-rx.c:3804
#, c-format
msgid "%pB:%pA: %s and %s must be in the same input section"
msgstr "%pB:%pA: „%s“ и „%s“ морају бити у иÑтом улазном одељку"
@@ -3352,35 +3405,35 @@ msgstr "%pB:%pA: „%s“ и „%s“ морају бити у иÑтом ула
msgid "%pB(%pA+%#<PRIx64>): invalid instruction for TLS relocation %s"
msgstr "%pB(%pA+%#<PRIx64>): неиÑправна инÑтрукција за „TLS“ премештање „%s“"
-#: elf32-score.c:1524 elf32-score7.c:1385 elfxx-mips.c:3798
+#: elf32-score.c:1515 elf32-score7.c:1378 elfxx-mips.c:3798
msgid "not enough GOT space for local GOT entries"
msgstr "нема довољно „GOT“ проÑтора за меÑне уноÑе „GOT“"
-#: elf32-score.c:2756
+#: elf32-score.c:2747
msgid "address not word aligned"
msgstr "адреÑа није поравната по речи"
-#: elf32-score.c:2837 elf32-score7.c:2642
+#: elf32-score.c:2828 elf32-score7.c:2635
#, c-format
msgid "%pB: malformed reloc detected for section %pA"
msgstr "%pB: откривено је лоше премештање за одељак „%pA“"
-#: elf32-score.c:2891 elf32-score7.c:2696
+#: elf32-score.c:2882 elf32-score7.c:2689
#, c-format
msgid "%pB: CALL15 reloc at %#<PRIx64> not against global symbol"
msgstr "%pB: „CALL15“ премештање на %#<PRIx64> није наÑпрам општег Ñимбола"
-#: elf32-score.c:3999 elf32-score7.c:3804
+#: elf32-score.c:3990 elf32-score7.c:3797
#, c-format
msgid " [pic]"
msgstr " [пик]"
-#: elf32-score.c:4003 elf32-score7.c:3808
+#: elf32-score.c:3994 elf32-score7.c:3801
#, c-format
msgid " [fix dep]"
msgstr " [Ñ„Ð¸ÐºÑ Ð´ÑƒÐ±]"
-#: elf32-score.c:4050 elf32-score7.c:3855
+#: elf32-score.c:4041 elf32-score7.c:3848
#, c-format
msgid "%pB: warning: linking PIC files with non-PIC files"
msgstr "%pB: упозорење: повезујем „PIC“ датотеке Ñа не-„PIC“ датотекама"
@@ -3511,7 +3564,7 @@ msgstr "%pB: „%s“ Ñе приÑтупило и као „FDPIC“-у и ка
msgid "%pB: Function descriptor relocation with non-zero addend"
msgstr "%pB: Премештање опиÑника функције Ñа не-нултим Ñабирком"
-#: elf32-sh.c:5721 elf64-alpha.c:4662
+#: elf32-sh.c:5721 elf64-alpha.c:4663
#, c-format
msgid "%pB: TLS local exec code cannot be linked into shared objects"
msgstr "%pB: „TLS“ меÑни извршни код не може бити повезан у дељеним објектима"
@@ -3597,7 +3650,7 @@ msgstr "„%s“ у одељку преклапања"
msgid "overlay stub relocation overflow"
msgstr "прекорачење премештања окрајка прекривања"
-#: elf32-spu.c:1991 elf64-ppc.c:14761
+#: elf32-spu.c:1991 elf64-ppc.c:15187
msgid "stubs don't match calculated size"
msgstr "окрајци не одговарају израчунатој величини"
@@ -3744,8 +3797,8 @@ msgstr "упозорење: „%pB“ и „%pB“ имају различите
msgid "warning: %pB and %pB differ in whether code is compiled for DSBT"
msgstr "упозорење: „%pB“ и „%pB“ Ñе разликују по томе да ли је код преведен за „DSBT“"
-#: elf32-tilepro.c:3627 elfxx-tilegx.c:4017 elfxx-x86.c:1397
-#: elfnn-aarch64.c:9711 elfnn-riscv.c:3253
+#: elf32-tilepro.c:3627 elfxx-tilegx.c:4017 elfxx-x86.c:2409
+#: elfnn-aarch64.c:9714 elfnn-loongarch.c:2971 elfnn-riscv.c:3269
#, c-format
msgid "discarded output section: `%pA'"
msgstr "одбачени одељак излаза: „%pA“"
@@ -4017,56 +4070,56 @@ msgstr "грешка читања врÑте процеÑора из личниÑ
msgid "non-zero addend in @fptr reloc"
msgstr "не-нулти Ñабирак у „@fptr“ премештању"
-#: elf32-xtensa.c:1002
+#: elf32-xtensa.c:1010
#, c-format
msgid "%pB(%pA): invalid property table"
msgstr "%pB(%pA): неиÑправна табела влаÑништва"
-#: elf32-xtensa.c:2734
+#: elf32-xtensa.c:2744
#, c-format
msgid "%pB(%pA+%#<PRIx64>): relocation offset out of range (size=%#<PRIx64>)"
msgstr "%pB(%pA+%#<PRIx64>): померај премештања је ван опÑега (величина=%#<PRIx64>)"
-#: elf32-xtensa.c:2817 elf32-xtensa.c:2940
+#: elf32-xtensa.c:2827 elf32-xtensa.c:2950
msgid "dynamic relocation in read-only section"
msgstr "динамичко премештање у одељку Ñамо за читање"
-#: elf32-xtensa.c:2917
+#: elf32-xtensa.c:2927
msgid "TLS relocation invalid without dynamic sections"
msgstr "ТЛС премештање је неиÑправно без динамичких одељака"
-#: elf32-xtensa.c:3130
+#: elf32-xtensa.c:3140
msgid "internal inconsistency in size of .got.loc section"
msgstr "унутрашња недоÑледноÑÑ‚ у величини одељка „.got.loc“"
-#: elf32-xtensa.c:3436
+#: elf32-xtensa.c:3446
#, c-format
msgid "%pB: incompatible machine type; output is 0x%x; input is 0x%x"
msgstr "%pB: неÑаглаÑна врÑта машине; излаз је 0x%x, а улаз 0x%x"
-#: elf32-xtensa.c:4735 elf32-xtensa.c:4743
+#: elf32-xtensa.c:4745 elf32-xtensa.c:4753
msgid "attempt to convert L32R/CALLX to CALL failed"
msgstr "покушај претварања „L32R/CALLX“ у „CALL“ није уÑпео"
-#: elf32-xtensa.c:6571 elf32-xtensa.c:6650 elf32-xtensa.c:8076
+#: elf32-xtensa.c:6581 elf32-xtensa.c:6660 elf32-xtensa.c:8086
#, c-format
msgid "%pB(%pA+%#<PRIx64>): could not decode instruction; possible configuration mismatch"
msgstr "%pB(%pA+%#<PRIx64>): не могу да декодирам инÑтрукцију; вероватно је подешавање погрешно"
-#: elf32-xtensa.c:7817
+#: elf32-xtensa.c:7827
#, c-format
msgid "%pB(%pA+%#<PRIx64>): could not decode instruction for XTENSA_ASM_SIMPLIFY relocation; possible configuration mismatch"
msgstr "%pB(%pA+%#<PRIx64>): не могу да декодирам инÑтрукцију за „XTENSA_ASM_SIMPLIFY“ премештање; вероватно је подешавање погрешно"
-#: elf32-xtensa.c:9675
+#: elf32-xtensa.c:9685
msgid "invalid relocation address"
msgstr "неиÑправна адреÑа премештања"
-#: elf32-xtensa.c:9766
+#: elf32-xtensa.c:9776
msgid "overflow after relaxation"
msgstr "прекорачење након опуштања"
-#: elf32-xtensa.c:10912
+#: elf32-xtensa.c:10922
#, c-format
msgid "%pB(%pA+%#<PRIx64>): unexpected fix for %s relocation"
msgstr "%pB(%pA+%#<PRIx64>): неочекивана иÑправка за „%s“ премештање"
@@ -4090,7 +4143,8 @@ msgstr "%pB: неподржана архитектура „%#x“"
msgid "GPDISP relocation did not find ldah and lda instructions"
msgstr "„GPDISP“ премештање није нашло инÑтрукције „ldah“ и „lda“"
-#: elf64-alpha.c:2002 elf64-alpha.c:2697 elflink.c:15091
+#: elf64-alpha.c:2002 elf64-alpha.c:2697 elflink.c:15304
+#: elfnn-loongarch.c:1161
#, c-format
msgid "%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"
msgstr "%pB: премештање наÑпрам „%pT“ у одељку „%pA“ који је Ñамо за читање\n"
@@ -4105,41 +4159,41 @@ msgstr "%pB: под-подеок „.got“ превазилази 64K (вели
msgid "%pB: %pA+%#<PRIx64>: warning: %s relocation against unexpected insn"
msgstr "%pB: %pA+%#<PRIx64>: упозорење: „%s“ премештање неочекиваног улазног знака"
-#: elf64-alpha.c:4386 elf64-alpha.c:4399
+#: elf64-alpha.c:4387 elf64-alpha.c:4400
#, c-format
msgid "%pB: gp-relative relocation against dynamic symbol %s"
msgstr "%pB: „gp“-одноÑно премештање наÑпрам динамичког Ñимбола „%s“"
-#: elf64-alpha.c:4455
+#: elf64-alpha.c:4456
#, c-format
msgid "%pB: change in gp: BRSGP %s"
msgstr "%pB: измена у „gp“-у: BRSGP %s"
-#: elf64-alpha.c:4480 mach-o.c:616 elfnn-riscv.c:619
+#: elf64-alpha.c:4481 mach-o.c:616 elfnn-riscv.c:619
msgid "<unknown>"
msgstr "<непознато>"
-#: elf64-alpha.c:4486
+#: elf64-alpha.c:4487
#, c-format
msgid "%pB: !samegp reloc against symbol without .prologue: %s"
msgstr "%pB: „!samegp“ премештање наÑпрам Ñимбола без „.prologue“-а: %s"
-#: elf64-alpha.c:4544
+#: elf64-alpha.c:4545
#, c-format
msgid "%pB: unhandled dynamic relocation against %s"
msgstr "%pB: необрађено динамичко премештање наÑпрам „%s“"
-#: elf64-alpha.c:4579
+#: elf64-alpha.c:4580
#, c-format
msgid "%pB: pc-relative relocation against undefined weak symbol %s"
msgstr "%pB: „pc“-одноÑно премештање наÑпрам недефиниÑаног Ñлабог Ñимбола „%s“"
-#: elf64-alpha.c:4645
+#: elf64-alpha.c:4646
#, c-format
msgid "%pB: dtp-relative relocation against dynamic symbol %s"
msgstr "%pB: „dtp“-одноÑно премештање наÑпрам динамичког Ñимбола „%s“"
-#: elf64-alpha.c:4670
+#: elf64-alpha.c:4671
#, c-format
msgid "%pB: tp-relative relocation against dynamic symbol %s"
msgstr "%pB: „tp“-одноÑно премештање наÑпрам динамичког Ñимбола „%s“"
@@ -4173,96 +4227,96 @@ msgstr "%pB: не могу да опуÑтим „br“ на %#<PRIx64> у одÐ
msgid "@pltoff reloc against local symbol"
msgstr "„@pltoff“ премештање наÑпрам локалног Ñимбола"
-#: elf64-ia64-vms.c:3283 elfnn-ia64.c:3670
+#: elf64-ia64-vms.c:3277 elfnn-ia64.c:3670
#, c-format
msgid "%pB: short data segment overflowed (%#<PRIx64> >= 0x400000)"
msgstr "%pB: прекорачење Ñегмента кратких података (%#<PRIx64> >= 0x400000)"
-#: elf64-ia64-vms.c:3293 elfnn-ia64.c:3680
+#: elf64-ia64-vms.c:3287 elfnn-ia64.c:3680
#, c-format
msgid "%pB: __gp does not cover short data segment"
msgstr "%pB: „__gp“ не покрива Ñегмент кратких података"
-#: elf64-ia64-vms.c:3563 elfnn-ia64.c:3953
+#: elf64-ia64-vms.c:3557 elfnn-ia64.c:3953
#, c-format
msgid "%pB: non-pic code with imm relocation against dynamic symbol `%s'"
msgstr "%pB: не-„pic“ код Ñа „imm“ премештањем наÑпрам динамичког Ñимбола „%s“"
-#: elf64-ia64-vms.c:3627 elfnn-ia64.c:4021
+#: elf64-ia64-vms.c:3621 elfnn-ia64.c:4021
#, c-format
msgid "%pB: @gprel relocation against dynamic symbol %s"
msgstr "%pB: „@gprel“ премештање наÑпрам динамичког Ñимбола „%s“"
-#: elf64-ia64-vms.c:3686 elfnn-ia64.c:4084
+#: elf64-ia64-vms.c:3680 elfnn-ia64.c:4084
#, c-format
msgid "%pB: linking non-pic code in a position independent executable"
msgstr "%pB: повезујем не-„pic“ код у извршном незавиÑном од положаја"
-#: elf64-ia64-vms.c:3788 elfnn-ia64.c:4222
+#: elf64-ia64-vms.c:3782 elfnn-ia64.c:4222
#, c-format
msgid "%pB: @internal branch to dynamic symbol %s"
msgstr "%pB: „@internal“ грана ка динамичком Ñимболу „%s“"
-#: elf64-ia64-vms.c:3791 elfnn-ia64.c:4225
+#: elf64-ia64-vms.c:3785 elfnn-ia64.c:4225
#, c-format
msgid "%pB: speculation fixup to dynamic symbol %s"
msgstr "%pB: разматрам иÑправку динамичког Ñимбола „%s“"
-#: elf64-ia64-vms.c:3794 elfnn-ia64.c:4228
+#: elf64-ia64-vms.c:3788 elfnn-ia64.c:4228
#, c-format
msgid "%pB: @pcrel relocation against dynamic symbol %s"
msgstr "%pB: „@pcrel“ премештање наÑпрам динамичког Ñимбола „%s“"
-#: elf64-ia64-vms.c:3918 elfnn-ia64.c:4425
+#: elf64-ia64-vms.c:3912 elfnn-ia64.c:4425
msgid "unsupported reloc"
msgstr "неподржано премештање"
-#: elf64-ia64-vms.c:3955 elfnn-ia64.c:4463
+#: elf64-ia64-vms.c:3949 elfnn-ia64.c:4463
#, c-format
msgid "%pB: missing TLS section for relocation %s against `%s' at %#<PRIx64> in section `%pA'."
msgstr "%pB: недоÑтаје „TLS“ одељак за „%s“ премештање наÑпрам „%s“ на %#<PRIx64> у одељку „%pA“."
-#: elf64-ia64-vms.c:3972 elfnn-ia64.c:4480
+#: elf64-ia64-vms.c:3966 elfnn-ia64.c:4480
#, c-format
msgid "%pB: Can't relax br (%s) to `%s' at %#<PRIx64> in section `%pA' with size %#<PRIx64> (> 0x1000000)."
msgstr "%pB: Ðе могу да опуÑтим „br“ (%s) у „%s“ на %#<PRIx64> у одељку „%pA“ Ñа величином %#<PRIx64> (> 0x1000000)."
-#: elf64-ia64-vms.c:4268 elfnn-ia64.c:4741
+#: elf64-ia64-vms.c:4262 elfnn-ia64.c:4741
#, c-format
msgid "%pB: linking trap-on-NULL-dereference with non-trapping files"
msgstr "%pB: повезујем захват-на-ÐИШТÐÐ’ÐОЈ-дереференци Ñа не-захватним датотекама"
-#: elf64-ia64-vms.c:4277 elfnn-ia64.c:4750
+#: elf64-ia64-vms.c:4271 elfnn-ia64.c:4750
#, c-format
msgid "%pB: linking big-endian files with little-endian files"
msgstr "%pB: повезујем датотеке велике крајњоÑти Ñа датотекама мале крајњоÑти"
-#: elf64-ia64-vms.c:4286 elfnn-ia64.c:4759
+#: elf64-ia64-vms.c:4280 elfnn-ia64.c:4759
#, c-format
msgid "%pB: linking 64-bit files with 32-bit files"
msgstr "%pB: повезујем 64-битне датотеке Ñа 32-битним датотекама"
-#: elf64-ia64-vms.c:4295 elfnn-ia64.c:4768
+#: elf64-ia64-vms.c:4289 elfnn-ia64.c:4768
#, c-format
msgid "%pB: linking constant-gp files with non-constant-gp files"
msgstr "%pB: повезујем датотеке „конÑтантног-гп“-а Ñа датотекама „не-конÑтантног-гп“-а"
-#: elf64-ia64-vms.c:4305 elfnn-ia64.c:4778
+#: elf64-ia64-vms.c:4299 elfnn-ia64.c:4778
#, c-format
msgid "%pB: linking auto-pic files with non-auto-pic files"
msgstr "%pB: повезујем датотеке ауто-„pic“-а Ñа датотекама не-ауто-„pic“"
-#: elf64-ia64-vms.c:5152 elflink.c:5148
+#: elf64-ia64-vms.c:5146 elflink.c:5294
#, c-format
msgid "warning: alignment %u of common symbol `%s' in %pB is greater than the alignment (%u) of its section %pA"
msgstr "упозорење: „%u“ поравнање општег Ñимбола „%s“ у „%pB“ је веће од поравнања (%u) његовог одељка „%pA“"
-#: elf64-ia64-vms.c:5159 elflink.c:5155
+#: elf64-ia64-vms.c:5153 elflink.c:5301
#, c-format
msgid "warning: alignment %u of symbol `%s' in %pB is smaller than %u in %pB"
msgstr "упозорење: „%u“ поравнање Ñимбола „%s“ у „%pB“ је мање од „%u“ у „%pB“"
-#: elf64-ia64-vms.c:5175 elflink.c:5172
+#: elf64-ia64-vms.c:5169 elflink.c:5318
#, c-format
msgid "warning: size of symbol `%s' changed from %<PRIu64> in %pB to %<PRIu64> in %pB"
msgstr "упозорење: величина Ñимбола „%s“ је измењена из „%<PRIx64>“ у „%pB“ у „%<PRIx64>“ у „%pB“"
@@ -4333,66 +4387,66 @@ msgstr "одељак региÑтра има Ñадржај\n"
msgid "internal inconsistency: remaining %lu != max %lu; please report this bug"
msgstr "унутрашња недоÑледноÑÑ‚: преоÑтаје %lu != max %lu; пријавите ову грешку"
-#: elf64-ppc.c:1349
+#: elf64-ppc.c:1357
#, c-format
msgid "warning: %s should be used rather than %s"
msgstr "упозорење: „%s“ Ñе треба кориÑтити умеÑто „%s“"
-#: elf64-ppc.c:4153
+#: elf64-ppc.c:4281
#, c-format
msgid "symbol '%s' has invalid st_other for ABI version 1"
msgstr "Ñимбол „%s“ има неиÑправан „st_other“ за ÐБИ издање 1"
-#: elf64-ppc.c:4334
+#: elf64-ppc.c:4462
#, c-format
msgid "%pB .opd not allowed in ABI version %d"
msgstr "%pB: „.opd“ није допуштен у „ABI“ издање %d"
-#: elf64-ppc.c:4906
+#: elf64-ppc.c:5055
#, c-format
msgid "%H: %s reloc unsupported in shared libraries and PIEs\n"
msgstr "%H: „%s“ премештање није подржано у дељеним библиотекама и „PIE“-има\n"
-#: elf64-ppc.c:5316
+#: elf64-ppc.c:5476
#, c-format
msgid "%pB uses unknown e_flags 0x%lx"
msgstr "„%pB“ кориÑти непознато „e_flags“ 0x%lx"
-#: elf64-ppc.c:5324
+#: elf64-ppc.c:5484
#, c-format
msgid "%pB: ABI version %ld is not compatible with ABI version %ld output"
msgstr "%pB: „ABI“ издање %ld није ÑаглаÑно Ñа „ABI“ издања %ld"
-#: elf64-ppc.c:5351
+#: elf64-ppc.c:5511
#, c-format
msgid " [abiv%ld]"
msgstr " [abiv%ld]"
-#: elf64-ppc.c:6649
+#: elf64-ppc.c:6808
msgid "%P: copy reloc against `%pT' requires lazy plt linking; avoid setting LD_BIND_NOW=1 or upgrade gcc\n"
msgstr "%P: премештање умножавања наÑпрам „%pT“ захтева лењо „plt“ повезивање; избегавајте подешавање „LD_BIND_NOW=1“ или надоградите гцц\n"
-#: elf64-ppc.c:6916
+#: elf64-ppc.c:7075
#, c-format
msgid "%pB: undefined symbol on R_PPC64_TOCSAVE relocation"
msgstr "%pB: неодређени Ñимбол на „R_PPC64_TOCSAVE“ премештању"
-#: elf64-ppc.c:7164
+#: elf64-ppc.c:7331
#, c-format
msgid "dynreloc miscount for %pB, section %pA"
msgstr "грешка бројања динамичког премештања за „%pB“, одељак „%pA“"
-#: elf64-ppc.c:7253
+#: elf64-ppc.c:7420
#, c-format
msgid "%pB: .opd is not a regular array of opd entries"
msgstr "%pB: „.opd“ није регуларан низ уноÑа операнда"
-#: elf64-ppc.c:7263
+#: elf64-ppc.c:7430
#, c-format
msgid "%pB: unexpected reloc type %u in .opd section"
msgstr "%pB: неочекивана врÑта премештања „%u“ у „.opd“ одељку"
-#: elf64-ppc.c:7285
+#: elf64-ppc.c:7452
#, c-format
msgid "%pB: undefined sym `%s' in .opd section"
msgstr "%pB: неодређени Ñимбол „%s“ у „.opd“ одељку"
@@ -4404,81 +4458,81 @@ msgstr "%pB: неодређени Ñимбол „%s“ у „.opd“ одељк
#. __glink_PLTresolve save of r2 is incompatible with code
#. making tail calls, because the tail call might go via the
#. resolver and thus overwrite the proper saved r2.
-#: elf64-ppc.c:7779
+#: elf64-ppc.c:7953
msgid "warning: --plt-localentry is incompatible with power10 pc-relative code"
msgstr "упозорење: „--plt-localentry“ је неÑаглаÑно Ñа „power10 pc-relative“ кодом"
-#: elf64-ppc.c:7787
+#: elf64-ppc.c:7961
msgid "warning: --plt-localentry is especially dangerous without ld.so support to detect ABI violations"
msgstr "упозорење: „--plt-localentry“ је нарочито опаÑно без „ld.so“ подршке за откривање „ABI“ преÑтупа"
-#: elf64-ppc.c:8111
+#: elf64-ppc.c:8277
msgid "%H __tls_get_addr lost arg, TLS optimization disabled\n"
msgstr "„%H“ „__tls_get_addr“ је изгубио аргумент, ТЛС оптимизација је иÑкључена\n"
-#: elf64-ppc.c:8546 elf64-ppc.c:9259
+#: elf64-ppc.c:8712 elf64-ppc.c:9425
#, c-format
msgid "%s defined on removed toc entry"
msgstr "„%s“ је дефиниÑано на уклоњеном уноÑу табеле Ñадржаја"
-#: elf64-ppc.c:9216
+#: elf64-ppc.c:9382
#, c-format
msgid "%H: %s references optimized away TOC entry\n"
msgstr "%H: „%s“ упућује на оптимизацијом одÑтрањени ÑƒÐ½Ð¾Ñ Ñ‚Ð°Ð±ÐµÐ»Ðµ Ñадржаја\n"
-#: elf64-ppc.c:9437
+#: elf64-ppc.c:9603
#, c-format
msgid "%H: got/toc optimization is not supported for %s instruction\n"
msgstr "%H: оптимизација табеле Ñадржаја није подржана за инÑтрукцију „%s“\n"
-#: elf64-ppc.c:10282
+#: elf64-ppc.c:10474
#, c-format
msgid "warning: discarding dynamic section %s"
msgstr "упозорење: одбацујем динамички одељак „%s“"
-#: elf64-ppc.c:11433
+#: elf64-ppc.c:11616
msgid "%P: cannot find opd entry toc for `%pT'\n"
msgstr "%P: не могу да нађем табелу Ñадржаја уноÑа операнда за „%pT“\n"
-#: elf64-ppc.c:11481 elf64-ppc.c:12030
+#: elf64-ppc.c:11664 elf64-ppc.c:12189
msgid "%F%P: Could not assign group %pA target %pA to an output section. Retry without --enable-non-contiguous-regions.\n"
msgstr "%F%P: Ðе могу да доделим групе „%pA“ мету „%pA“ излазном одељку. Покушајте без „--enable-non-contiguous-regions“.\n"
-#: elf64-ppc.c:11542
+#: elf64-ppc.c:11724
#, c-format
msgid "long branch stub `%s' offset overflow"
msgstr "прекорачење помераја дугог окрајка гране „%s“"
-#: elf64-ppc.c:11569
+#: elf64-ppc.c:11751
#, c-format
msgid "can't find branch stub `%s'"
msgstr "не могу да нађем окрајак гране „%s“"
-#: elf64-ppc.c:11633 elf64-ppc.c:11898 elf64-ppc.c:14202
+#: elf64-ppc.c:11815 elf64-ppc.c:12067 elf64-ppc.c:14574
#, c-format
msgid "%P: linkage table error against `%pT'\n"
msgstr "%P: грешка табеле повезивања наÑпрам „%pT“\n"
-#: elf64-ppc.c:12102
+#: elf64-ppc.c:12263
#, c-format
msgid "can't build branch stub `%s'"
msgstr "не могу да изградим окрајак гране „%s“"
-#: elf64-ppc.c:13114
+#: elf64-ppc.c:13270
#, c-format
msgid "%pB section %pA exceeds stub group size"
msgstr "„%pB“ одељак „%pA“ превазилази величину групе окрајка"
-#: elf64-ppc.c:14381
+#: elf64-ppc.c:14756
msgid "__tls_get_addr call offset overflow"
msgstr "прекорачење помераја „__tls_get_addr“ позива"
-#: elf64-ppc.c:14720 elf64-ppc.c:14739
+#: elf64-ppc.c:15095 elf64-ppc.c:15114
#, c-format
msgid "%s offset too large for .eh_frame sdata4 encoding"
msgstr "„%s“ померај је превелик за „.eh_frame sdata4“ кодирање"
-#: elf64-ppc.c:14771
+#: elf64-ppc.c:15195
#, c-format
msgid "linker stubs in %u group\n"
msgid_plural "linker stubs in %u groups\n"
@@ -4486,83 +4540,65 @@ msgstr[0] "окрајци повезивача у %u групи\n"
msgstr[1] "окрајци повезивача у %u групе\n"
msgstr[2] "окрајци повезивача у %u група\n"
-#: elf64-ppc.c:14778
+#: elf64-ppc.c:15202
#, c-format
msgid ""
"%s branch %lu\n"
-" branch toc adj %lu\n"
-" branch notoc %lu\n"
-" branch both %lu\n"
" long branch %lu\n"
-" long toc adj %lu\n"
-" long notoc %lu\n"
-" long both %lu\n"
" plt call %lu\n"
-" plt call save %lu\n"
-" plt call notoc %lu\n"
-" plt call both %lu\n"
" global entry %lu"
msgstr ""
-"%s грана %lu\n"
-" грана Ñадр. порав. %lu\n"
-" грана не-Ñадр. %lu\n"
-" грана оба %lu\n"
-" дуго грана %lu\n"
-" дуго Ñадр. порав. %lu\n"
-" дуго не-Ñадр. %lu\n"
-" дуго оба %lu\n"
-" плт позив %lu\n"
-" плт позив Ñачувај %lu\n"
-" плт позив не-Ñадр. %lu\n"
-" плт позив оба %lu\n"
-" општи ÑƒÐ½Ð¾Ñ %lu"
-
-#: elf64-ppc.c:15178
+"%s грана %lu\n"
+" дуга грана %lu\n"
+" „plt“ озив %lu\n"
+" општи ÑƒÐ½Ð¾Ñ %lu"
+
+#: elf64-ppc.c:15584
#, c-format
msgid "%H: %s used with TLS symbol `%pT'\n"
msgstr "%H: „%s“ је коришћено Ñа „TLS“ Ñимболом „%pT“\n"
-#: elf64-ppc.c:15180
+#: elf64-ppc.c:15586
#, c-format
msgid "%H: %s used with non-TLS symbol `%pT'\n"
msgstr "%H: „%s“ је коришћено Ñа не-„TLS“ Ñимболом „%pT“\n"
-#: elf64-ppc.c:15936
+#: elf64-ppc.c:16370
#, c-format
msgid "%H: call to `%pT' lacks nop, can't restore toc; (plt call stub)\n"
msgstr "%H: позиву за „%pT“ недоÑтаје „nop“, не могу да вратим табелу Ñадржаја; (plt call stub)\n"
-#: elf64-ppc.c:15942
+#: elf64-ppc.c:16376
#, c-format
msgid "%H: call to `%pT' lacks nop, can't restore toc; (toc save/adjust stub)\n"
msgstr "%H: позиву за „%pT“ недоÑтаје „nop“, не могу да вратим табелу Ñадржаја; (toc save/adjust stub)\n"
-#: elf64-ppc.c:16845
+#: elf64-ppc.c:17290
#, c-format
msgid "%H: %s for indirect function `%pT' unsupported\n"
msgstr "%H: „%s“ за индиректну функцију „%pT“ није подржано\n"
-#: elf64-ppc.c:16930
+#: elf64-ppc.c:17382
#, c-format
msgid "%X%P: %pB: %s against %pT is not supported by glibc as a dynamic relocation\n"
msgstr "%X%P: %pB: „%s“ наÑпрам „%pT“ није подржано „glibc“-ом као динамичко премештање\n"
-#: elf64-ppc.c:16985
+#: elf64-ppc.c:17437
#, c-format
msgid "%P: %pB: %s is not supported for `%pT'\n"
msgstr "%P: %pB: „%s“ није подржано за „%pT“\n"
-#: elf64-ppc.c:17233
+#: elf64-ppc.c:17698
#, c-format
msgid "%H: error: %s not a multiple of %u\n"
msgstr "%H: грешка: „%s“ није производ „%u“\n"
-#: elf64-ppc.c:17256
+#: elf64-ppc.c:17721
#, c-format
msgid "%H: unresolvable %s against `%pT'\n"
msgstr "%H: „%s“ је нерешиво наÑпрам „%pT“\n"
-#: elf64-ppc.c:17400
+#: elf64-ppc.c:17866
#, c-format
msgid "%H: %s against `%pT': error %d\n"
msgstr "%H: „%s“ наÑпрам „%pT“: грешка %d\n"
@@ -4597,101 +4633,101 @@ msgstr "Ñимбол „%s“ има другачије врÑте: „%s“ у
msgid "%pB: linking UltraSPARC specific with HAL specific code"
msgstr "%pB: повезујем код Ñпецифичан „UltraSPARC“-у Ñа кодом Ñпецифичним „HAL“-у"
-#: elf64-x86-64.c:1415
+#: elf64-x86-64.c:1400
msgid "hidden symbol "
msgstr "Ñкривени Ñимбол "
-#: elf64-x86-64.c:1418
+#: elf64-x86-64.c:1403
msgid "internal symbol "
msgstr "унутрашњи Ñимбол "
-#: elf64-x86-64.c:1421 elf64-x86-64.c:1425
+#: elf64-x86-64.c:1406 elf64-x86-64.c:1410
msgid "protected symbol "
msgstr "заштићени Ñимбол "
-#: elf64-x86-64.c:1427
+#: elf64-x86-64.c:1412
msgid "symbol "
msgstr "Ñимбол "
-#: elf64-x86-64.c:1433
+#: elf64-x86-64.c:1418
msgid "undefined "
msgstr "неодређено "
-#: elf64-x86-64.c:1443
+#: elf64-x86-64.c:1428
msgid "a shared object"
msgstr "дељени објекат"
-#: elf64-x86-64.c:1445
+#: elf64-x86-64.c:1430
msgid "; recompile with -fPIC"
msgstr "; поново преведите Ñа „-fPIC“"
-#: elf64-x86-64.c:1450
+#: elf64-x86-64.c:1435
msgid "a PIE object"
msgstr "„PIE“ објекат"
-#: elf64-x86-64.c:1452
+#: elf64-x86-64.c:1437
msgid "a PDE object"
msgstr "„PDE“ објекат"
-#: elf64-x86-64.c:1454
+#: elf64-x86-64.c:1439
msgid "; recompile with -fPIE"
msgstr "; поново преведите Ñа „-fPIE“"
-#: elf64-x86-64.c:1458
+#: elf64-x86-64.c:1443
#, c-format
msgid "%pB: relocation %s against %s%s`%s' can not be used when making %s%s"
msgstr "%pB: премештање „%s“ наÑпрам „%s%s“ „%s“ Ñе не може кориÑтити приликом Ñтварања „%s%s“"
-#: elf64-x86-64.c:1966
+#: elf64-x86-64.c:1948
#, c-format
msgid "%pB: relocation %s against symbol `%s' isn't supported in x32 mode"
msgstr "%pB: „%s“ премештање наÑпрам Ñимбола „%s“ није подржано у режиму x32"
-#: elf64-x86-64.c:2122
+#: elf64-x86-64.c:2092
#, c-format
msgid "%pB: '%s' accessed both as normal and thread local symbol"
msgstr "%pB: „%s“ Ñе приÑтупило и као нормалном и као Ñимболу локалне нити"
-#: elf64-x86-64.c:2747 elfnn-aarch64.c:5542 elfnn-riscv.c:2124
+#: elf64-x86-64.c:2727 elfnn-aarch64.c:5545 elfnn-riscv.c:2140
#, c-format
msgid "%pB: relocation %s against STT_GNU_IFUNC symbol `%s' has non-zero addend: %<PRId64>"
msgstr "%pB: премештање „%s“ наÑпрам „STT_GNU_IFUNC“ Ñимбола „%s“ има не-нулти Ñабирак: %<PRId64>"
-#: elf64-x86-64.c:3003
+#: elf64-x86-64.c:2989
#, c-format
msgid "%pB: relocation R_X86_64_GOTOFF64 against undefined %s `%s' can not be used when making a shared object"
msgstr "%pB: премештање „R_X86_64_GOTOFF64“ наÑпрам недефиниÑаног %s „%s“ Ñе не може кориÑтити када Ñе Ñтвара дељени објекат"
-#: elf64-x86-64.c:3017
+#: elf64-x86-64.c:3003
#, c-format
msgid "%pB: relocation R_X86_64_GOTOFF64 against protected %s `%s' can not be used when making a shared object"
msgstr "%pB: премештање „R_X86_64_GOTOFF64“ наÑпрам заштићеног %s „%s“ Ñе не може кориÑтити када Ñе Ñтвара дељени објекат"
-#: elf64-x86-64.c:3297
+#: elf64-x86-64.c:3296
#, c-format
msgid "%pB: addend %s%#x in relocation %s against symbol `%s' at %#<PRIx64> in section `%pA' is out of range"
msgstr "%pB: Ñабирак %s%#x у премештању „%s“ наÑпрам Ñимбола „%s“ на %#<PRIx64> у одељку „%pA“ је ван опÑега"
-#: elf64-x86-64.c:3437 elflink.c:13453
+#: elf64-x86-64.c:3439 elflink.c:13654
msgid "%F%P: corrupt input: %pB\n"
msgstr "%F%P: оштећени уноÑ: %pB\n"
-#: elf64-x86-64.c:4123
+#: elf64-x86-64.c:4125
#, c-format
msgid " failed to convert GOTPCREL relocation against '%s'; relink with --no-relax\n"
msgstr " ниÑам уÑпео да претворим „GOTPCREL“ премештање за „%s“; поново повежите Ñа „--no-relax“\n"
-#: elf64-x86-64.c:4284
+#: elf64-x86-64.c:4286
#, c-format
msgid "%F%pB: PC-relative offset overflow in PLT entry for `%s'\n"
msgstr "%F%pB: прекорачење „PC“-одноÑног помераја у „PLT“ уноÑу за „%s“\n"
-#: elf64-x86-64.c:4352
+#: elf64-x86-64.c:4354
#, c-format
msgid "%F%pB: branch displacement overflow in PLT entry for `%s'\n"
msgstr "%F%pB: прекорачење размештаја гране у „PLT“ уноÑу за „%s“\n"
-#: elf64-x86-64.c:4405
+#: elf64-x86-64.c:4407
#, c-format
msgid "%F%pB: PC-relative offset overflow in GOT PLT entry for `%s'\n"
msgstr "%F%pB: прекорачење „PC“-одноÑног помераја у „GOT PLT“ уноÑу за „%s“\n"
@@ -4701,306 +4737,310 @@ msgstr "%F%pB: прекорачење „PC“-одноÑног помераја
msgid "warning: %pB has a section extending past end of file"
msgstr "упозорење: „%pB“ има одељак који Ñе шири преко краја датотеке"
-#: elfcode.h:775
+#: elfcode.h:776
#, c-format
msgid "warning: %pB has a corrupt string table index - ignoring"
msgstr "упозорење: „%pB“ има оштећен Ð¸Ð½Ð´ÐµÐºÑ Ñ‚Ð°Ð±ÐµÐ»Ðµ ниÑке — занемарујем"
-#: elfcode.h:819
+#: elfcode.h:820
#, c-format
msgid "warning: %pB has a program header with invalid alignment"
msgstr "упозорење: „%pB“ има заглавље програма Ñа неиÑправним поравнањем"
-#: elfcode.h:1244
+#: elfcode.h:1245
#, c-format
msgid "%pB: version count (%<PRId64>) does not match symbol count (%ld)"
msgstr "%pB: број издања (%<PRId64>) не одговара броју Ñимбола (%ld)"
-#: elfcore.h:308
+#: elfcore.h:300
#, c-format
-msgid "warning: %pB is truncated: expected core file size >= %<PRIu64>, found: %<PRIu64>"
-msgstr "упозорење: „%pB“ је Ñкраћено: очекивах величину датотеке језгра >= %<PRIx64>, нађох: %<PRIx64>"
+msgid "warning: %pB has a segment extending past end of file"
+msgstr "упозорење: „%pB“ има подеок који Ñе шири преко краја датотеке"
-#: elflink.c:1384
+#: elflink.c:1406
#, c-format
msgid "%s: TLS definition in %pB section %pA mismatches non-TLS definition in %pB section %pA"
msgstr "%s: „TLS“ дефиниција у „%pB“ одељак „%pA“ не одговара не-„TLS“ дефиницији у „%pB“ одељак „%pA“"
-#: elflink.c:1390
+#: elflink.c:1412
#, c-format
msgid "%s: TLS reference in %pB mismatches non-TLS reference in %pB"
msgstr "%s: „TLS“ упута у „%pB“ не одговара не-„TLS“ упути у „%pB“"
-#: elflink.c:1396
+#: elflink.c:1418
#, c-format
msgid "%s: TLS definition in %pB section %pA mismatches non-TLS reference in %pB"
msgstr "%s: „TLS“ дефиниција у „%pB“ одељак „%pA“ не одговара не-„TLS“ упути у „%pB“"
-#: elflink.c:1402
+#: elflink.c:1424
#, c-format
msgid "%s: TLS reference in %pB mismatches non-TLS definition in %pB section %pA"
msgstr "%s: „TLS“ упута у „%pB“ не одговара не-„TLS“ дефиницији у „%pB“ одељак „%pA“"
-#: elflink.c:2114
+#: elflink.c:2136
#, c-format
msgid "%pB: unexpected redefinition of indirect versioned symbol `%s'"
msgstr "%pB: неочекивано поновно дефиниÑање индиректно верзиониÑаног Ñимбола „%s“"
-#: elflink.c:2496
+#: elflink.c:2597
#, c-format
msgid "%pB: version node not found for symbol %s"
msgstr "%pB: ниÑам нашао чвор издања за Ñимбол „%s“"
-#: elflink.c:2587
+#: elflink.c:2688
#, c-format
msgid "%pB: bad reloc symbol index (%#<PRIx64> >= %#lx) for offset %#<PRIx64> in section `%pA'"
msgstr "%pB: лош Ð¸Ð½Ð´ÐµÐºÑ Ñимбола премештања (%#<PRIx64> >= %#lx) за померај %#<PRIx64> у одељку „%pA“"
-#: elflink.c:2599
+#: elflink.c:2700
#, c-format
msgid "%pB: non-zero symbol index (%#<PRIx64>) for offset %#<PRIx64> in section `%pA' when the object file has no symbol table"
msgstr "%pB: не-нулти Ð¸Ð½Ð´ÐµÐºÑ Ñимбола (%#<PRIx64>) за померај %#<PRIx64> у одељку „%pA“ када датотека објекта нема табелу Ñимбола"
-#: elflink.c:2788
+#: elflink.c:2911
#, c-format
msgid "%pB: relocation size mismatch in %pB section %pA"
msgstr "%pB: величина премештања не одговара у „%pB“ одељак „%pA“"
-#: elflink.c:3117
+#: elflink.c:3240
#, c-format
msgid "warning: type and size of dynamic symbol `%s' are not defined"
msgstr "упозорење: врÑта и величина динамичког Ñимбола „%s“ ниÑу дефиниÑане"
-#: elflink.c:3177
+#: elflink.c:3300
msgid "%P: copy reloc against protected `%pT' is dangerous\n"
msgstr "%P: умножи премештање наÑпрам заштићеног „%pT“ је опаÑно\n"
-#: elflink.c:4117
+#: elflink.c:4262
#, c-format
msgid "alternate ELF machine code found (%d) in %pB, expecting %d"
msgstr "нађох измењени „ELF“ машинÑки код (%d) у „%pB“, очекивах „%d“"
-#: elflink.c:4600
+#: elflink.c:4745
#, c-format
msgid "%pB: invalid version offset %lx (max %lx)"
msgstr "%pB: неиÑправан померај издања %lx (најв. %lx)"
-#: elflink.c:4668
+#: elflink.c:4813
#, c-format
msgid "%pB: %s local symbol at index %lu (>= sh_info of %lu)"
msgstr "%pB: „%s“ локални Ñимбол у индекÑу %lu (>= sh_info %lu)"
-#: elflink.c:4816
+#: elflink.c:4961
#, c-format
msgid "%pB: not enough version information"
msgstr "%pB: нема довољно података о издању"
-#: elflink.c:4854
+#: elflink.c:4999
#, c-format
msgid "%pB: %s: invalid version %u (max %d)"
msgstr "%pB: %s: неиÑправно издање %u (најв. %d)"
-#: elflink.c:4891
+#: elflink.c:5036
#, c-format
msgid "%pB: %s: invalid needed version %d"
msgstr "%pB: %s: неиÑправно потребно издање %d"
-#: elflink.c:5309
+#: elflink.c:5455
#, c-format
msgid "%pB: undefined reference to symbol '%s'"
msgstr "%pB: недефиниÑана упута ка Ñимболу „%s“"
-#: elflink.c:6375
+#: elflink.c:6523
#, c-format
msgid "%pB: stack size specified and %s set"
msgstr "%pB: величина Ñпремника је наведена и „%s“ подешена"
-#: elflink.c:6379
+#: elflink.c:6527
#, c-format
msgid "%pB: %s not absolute"
msgstr "%pB: „%s“ није апÑолутно"
-#: elflink.c:6576
+#: elflink.c:6739
#, c-format
msgid "%s: undefined version: %s"
msgstr "%s: недефиниÑано издање: %s"
-#: elflink.c:7148
+#: elflink.c:7303
#, c-format
msgid "%pB: .preinit_array section is not allowed in DSO"
msgstr "%pB: одељак „.preinit_array“ није дозвољен у „DSO“-у"
-#: elflink.c:8740
+#: elflink.c:8895
#, c-format
msgid "undefined %s reference in complex symbol: %s"
msgstr "недефиниÑана „%s“ упута у Ñложеном Ñимболу: %s"
-#: elflink.c:8903 elflink.c:8911
+#: elflink.c:9058 elflink.c:9066
msgid "division by zero"
msgstr "дељење нулом"
-#: elflink.c:8925
+#: elflink.c:9080
#, c-format
msgid "unknown operator '%c' in complex symbol"
msgstr "непознат оператор „%c“ у Ñложеном Ñимболу"
#. PR 21524: Let the user know if a symbol was removed by garbage collection.
-#: elflink.c:9263
+#: elflink.c:9418
#, c-format
msgid "%pB:%pA: error: relocation references symbol %s which was removed by garbage collection"
msgstr "%pB:%pA: грешка: Ñимбол упута премештања „%s“ који је уклоњен Ñкупљањем отпада"
-#: elflink.c:9266
+#: elflink.c:9421
#, c-format
msgid "%pB:%pA: error: try relinking with --gc-keep-exported enabled"
msgstr "%pB:%pA: грешка: покушајте поновно повезивање Ñа укљученим „--gc-keep-exported“"
-#: elflink.c:9511 elflink.c:9529 elflink.c:9568 elflink.c:9586
+#: elflink.c:9666 elflink.c:9684 elflink.c:9723 elflink.c:9741
#, c-format
msgid "%pB: unable to sort relocs - they are in more than one size"
msgstr "%pB: не могу да поређам премештања — имају више од једне величине"
#. The section size is not divisible by either -
#. something is wrong.
-#: elflink.c:9545 elflink.c:9602
+#: elflink.c:9700 elflink.c:9757
#, c-format
msgid "%pB: unable to sort relocs - they are of an unknown size"
msgstr "%pB: не могу да поређам премештања — непознате Ñу величине"
-#: elflink.c:9654
+#: elflink.c:9809
msgid "not enough memory to sort relocations"
msgstr "нема довољно меморије за ређање премештања"
-#: elflink.c:9998
+#: elflink.c:10149
#, c-format
msgid "%pB: too many sections: %d (>= %d)"
msgstr "%pB: превише одељака: %d (>= %d)"
-#: elflink.c:10274
+#: elflink.c:10425
#, c-format
msgid "%pB: internal symbol `%s' in %pB is referenced by DSO"
msgstr "%pB: на унутрашњи Ñимбол „%s“ у „%pB“ упућује „DSO“"
-#: elflink.c:10277
+#: elflink.c:10428
#, c-format
msgid "%pB: hidden symbol `%s' in %pB is referenced by DSO"
msgstr "%pB: на Ñкривени Ñимбол „%s“ у „%pB“ упућује „DSO“"
-#: elflink.c:10280
+#: elflink.c:10431
#, c-format
msgid "%pB: local symbol `%s' in %pB is referenced by DSO"
msgstr "%pB: на локални Ñимбол „%s“ у „%pB“ упућује „DSO“"
-#: elflink.c:10366
+#: elflink.c:10517
#, c-format
msgid "%pB: could not find output section %pA for input section %pA"
msgstr "%pB: не могу да нађем излазни одељак „%pA“ за улазни одељак „%pA“"
-#: elflink.c:10520
+#: elflink.c:10671
#, c-format
msgid "%pB: protected symbol `%s' isn't defined"
msgstr "%pB: заштићени Ñимбол „%s“ није дефиниÑан"
-#: elflink.c:10523
+#: elflink.c:10674
#, c-format
msgid "%pB: internal symbol `%s' isn't defined"
msgstr "%pB: унутрашњи Ñимбол „%s“ није дефиниÑан"
-#: elflink.c:10526
+#: elflink.c:10677
#, c-format
msgid "%pB: hidden symbol `%s' isn't defined"
msgstr "%pB: Ñкривени Ñимбол „%s“ није дефиниÑан"
-#: elflink.c:10558
+#: elflink.c:10709
#, c-format
msgid "%pB: no symbol version section for versioned symbol `%s'"
msgstr "%pB: нема одељка издања Ñимбола за верзиониÑани Ñимбол „%s“"
-#: elflink.c:10957
+#: elflink.c:11108
#, c-format
msgid "warning: --enable-non-contiguous-regions discards section `%s' from '%s'\n"
msgstr "упозорење: „--enable-non-contiguous-regions“ одбацује одељак „%s“ из „%s“\n"
-#: elflink.c:11211
-#, c-format
-msgid "error: %pB: size of section %pA is not multiple of address size"
-msgstr "грешка: %pB: величина одељка „%pA“ није производ величине адреÑе"
-
-#: elflink.c:11256
+#: elflink.c:11384
#, c-format
msgid "error: %pB contains a reloc (%#<PRIx64>) for section %pA that references a non-existent global symbol"
msgstr "грешка: „%pB“ Ñадржи премештање (%#<PRIx64>) за одељак „%pA“ који упућује на не-поÑтојећи општи Ñимбол"
-#: elflink.c:11977
+#: elflink.c:11844
+#, c-format
+msgid "error: %pB: size of section %pA is not multiple of address size"
+msgstr "грешка: %pB: величина одељка „%pA“ није производ величине адреÑе"
+
+#: elflink.c:12121
#, c-format
msgid "%pB: no symbol found for import library"
msgstr "%pB: ниÑам нашао никакав Ñимбол за увозну библиотеку"
-#: elflink.c:12620
+#: elflink.c:12696
+msgid "%F%P: %pB: failed to finish relative relocations\n"
+msgstr "%F%P: %pB: ниÑам уÑпео да довршим релативна премештања\n"
+
+#: elflink.c:12773
#, c-format
msgid "%pB: file class %s incompatible with %s"
msgstr "%pB: клаÑа датотеке „%s“ није ÑаглаÑна Ñа „%s“"
-#: elflink.c:12870
+#: elflink.c:13023
#, c-format
msgid "%pB: failed to generate import library"
msgstr "%pB: ниÑам уÑпео да направим увозну библиотеку"
-#: elflink.c:12996
+#: elflink.c:13191
#, c-format
msgid "warning: %s section has zero size"
msgstr "упозорење: одељак „%s“ је нулте величине"
-#: elflink.c:13044
+#: elflink.c:13239
#, c-format
msgid "warning: section '%s' is being made into a note"
msgstr "упозорење: одељак „%s“ је претворен у белешку"
-#: elflink.c:13137
+#: elflink.c:13333
msgid "%P%X: read-only segment has dynamic relocations\n"
msgstr "%P%X: одељак Ñамо за читање има динамичка премештања\n"
-#: elflink.c:13140
+#: elflink.c:13336
msgid "%P: warning: creating DT_TEXTREL in a shared object\n"
msgstr "%P: упозорење: Ñтварам „DT_TEXTREL“ у дељеном објекту\n"
-#: elflink.c:13143
+#: elflink.c:13339
msgid "%P: warning: creating DT_TEXTREL in a PDE\n"
msgstr "%P: упозорење: Ñтварам „DT_TEXTREL“ у „PDE“\n"
-#: elflink.c:13146
+#: elflink.c:13342
msgid "%P: warning: creating DT_TEXTREL in a PIE\n"
msgstr "%P: упозорење: Ñтварам „DT_TEXTREL“ у „PIE“\n"
-#: elflink.c:13279
+#: elflink.c:13475
msgid "%P%X: can not read symbols: %E\n"
msgstr "%P%X: не може да чита Ñимболе: %E\n"
-#: elflink.c:13699
+#: elflink.c:13900
msgid "%F%P: %pB(%pA): error: need linked-to section for --gc-sections\n"
msgstr "%F%P: %pB(%pA): грешка: потребан је повезан-на одељак за „--gc-sections“\n"
-#: elflink.c:14165
+#: elflink.c:14378
#, c-format
msgid "%pB: %pA+%#<PRIx64>: no symbol found for INHERIT"
msgstr "%pB: %pA+%#<PRIx64>: ниÑам нашао никакав Ñимбол за „INHERIT“"
-#: elflink.c:14206
+#: elflink.c:14419
#, c-format
msgid "%pB: section '%pA': corrupt VTENTRY entry"
msgstr "%pB: одељак „%pA“: оштећен „VTENTRY“ уноÑ"
-#: elflink.c:14349
+#: elflink.c:14562
#, c-format
msgid "unrecognized INPUT_SECTION_FLAG %s\n"
msgstr "непознато „INPUT_SECTION_FLAG %s“\n"
-#: elflink.c:15097
+#: elflink.c:15310
#, c-format
msgid "%P: %pB: warning: relocation against `%s' in read-only section `%pA'\n"
msgstr "%P: %pB: упозорење: премештање наÑпрам „%s“ у одељку „%pA“ који је Ñамо за читање\n"
-#: elflink.c:15186
+#: elflink.c:15399
msgid "%P: warning: GNU indirect functions with DT_TEXTREL may result in a segfault at runtime; recompile with %s\n"
msgstr "%P: упозорење: ГÐУ-ове индиректне функције Ñа „DT_TEXTREL“ могу резултирати неуÑпехом Ñегментације у време извршавања; поново преведите Ñа „%s“\n"
@@ -5009,20 +5049,11 @@ msgstr "%P: упозорење: ГÐУ-ове индиректне функциÑ
msgid "%pB: warning: Weak TLS is implementation defined and may not work as expected"
msgstr "%pB: упозорење: Ñлабо „TLS“ је дефиниÑана примена и можда неће радити као што Ñе очекује"
-#: elfxx-aarch64.c:738 elfnn-aarch64.c:9909 elfnn-aarch64.c:9916
+#: elfxx-aarch64.c:738 elfnn-aarch64.c:9914 elfnn-aarch64.c:9921
#, c-format
msgid "%pB: warning: BTI turned on by -z force-bti when all inputs do not have BTI in NOTE section."
msgstr "%pB: упозорење: „BTI“ је укључено „-z force-bti“-јем када Ñви уноÑи немају „BTI“ у „NOTE“ одељку."
-#: elfxx-aarch64.c:758 elfxx-x86.c:2695
-msgid "%F%P: failed to create GNU property section\n"
-msgstr "%F%P: ниÑам уÑпео да направим одељак ГÐУ ÑвојÑтва\n"
-
-#: elfxx-aarch64.c:762 elfxx-x86.c:2700
-#, c-format
-msgid "%F%pA: failed to align section\n"
-msgstr "%F%pA: ниÑам уÑпео да поравнам одељак\n"
-
#: elfxx-aarch64.c:812
#, c-format
msgid "error: %pB: <corrupt AArch64 used size: 0x%x>"
@@ -5150,309 +5181,335 @@ msgstr "%pB: „%pA“ померај %<PRId64> из „%pA“ иза опÑег
msgid "%pB: `%pA' start VMA of %#<PRIx64> outside the 32-bit range supported; consider using `-Ttext-segment=...'"
msgstr "%pB: „%pA“ почетак „VMA“ од %#<PRIx64> ван 32-битног опÑега је подржано; кориÑтите „-Ttext-segment=...“"
-#: elfxx-mips.c:13316 reloc.c:8430
+#: elfxx-mips.c:13335 reloc.c:8521
#, c-format
msgid "%X%P: %pB(%pA): error: relocation for offset %V has no value\n"
msgstr "%X%P: %pB(%pA): грешка: премештање за померај „%V“ нема вредноÑÑ‚\n"
-#: elfxx-mips.c:13417 reloc.c:8518
+#: elfxx-mips.c:13436 reloc.c:8609
#, c-format
msgid "%X%P: %pB(%pA): relocation \"%pR\" is not supported\n"
msgstr "%X%P: %pB(%pA): премештање „%pR“ није подржано\n"
-#: elfxx-mips.c:13426 reloc.c:8527
+#: elfxx-mips.c:13445 reloc.c:8618
#, c-format
msgid "%X%P: %pB(%pA): relocation \"%pR\" returns an unrecognized value %x\n"
msgstr "%X%P: %pB(%pA): премештање „%pR“ је вратило непознату вредноÑÑ‚ „%x“\n"
-#: elfxx-mips.c:14611
+#: elfxx-mips.c:14627
#, c-format
msgid "%pB: unknown architecture %s"
msgstr "%pB: непозната архитектура „%s“"
-#: elfxx-mips.c:15145
+#: elfxx-mips.c:15161
#, c-format
msgid "%pB: illegal section name `%pA'"
msgstr "%pB: неиÑправан назив одељка „%pA“"
-#: elfxx-mips.c:15422
+#: elfxx-mips.c:15438
#, c-format
msgid "%pB: warning: linking abicalls files with non-abicalls files"
msgstr "%pB: упозорење: повезујем датотеке абипозива Ñа датотекама не-абипозива"
-#: elfxx-mips.c:15439
+#: elfxx-mips.c:15455
#, c-format
msgid "%pB: linking 32-bit code with 64-bit code"
msgstr "%pB: повезујем 32-битни код Ñа 64-битним кодом"
-#: elfxx-mips.c:15471 elfxx-mips.c:15537 elfxx-mips.c:15552
+#: elfxx-mips.c:15487 elfxx-mips.c:15553 elfxx-mips.c:15568
#, c-format
msgid "%pB: linking %s module with previous %s modules"
msgstr "%pB: повезујем „%s“ модул Ñа претходним „%s“ модулима"
-#: elfxx-mips.c:15495
+#: elfxx-mips.c:15511
#, c-format
msgid "%pB: ABI mismatch: linking %s module with previous %s modules"
msgstr "%pB: „ABI“ не одговара: повезујем „%s“ модул Ñа претходним „%s“ модулима"
-#: elfxx-mips.c:15520
+#: elfxx-mips.c:15536
#, c-format
msgid "%pB: ASE mismatch: linking %s module with previous %s modules"
msgstr "%pB: „ASE“ не одговара: повезујем „%s“ модул Ñа претходним „%s“ модулима"
-#: elfxx-mips.c:15654
+#: elfxx-mips.c:15670
#, c-format
msgid "warning: %pB uses unknown floating point ABI %d (set by %pB), %pB uses unknown floating point ABI %d"
msgstr "упозорење: „%pB“ кориÑти непознату „ABI“ тачку покретног зареза „%d“ (подешено Ñа „%pB“), „%pB“ кориÑти непознату „ABI“ тачку покретног зареза „%d“"
-#: elfxx-mips.c:15660
+#: elfxx-mips.c:15676
#, c-format
msgid "warning: %pB uses unknown floating point ABI %d (set by %pB), %pB uses %s"
msgstr "упозорење: „%pB“ кориÑти непознату „ABI“ тачку покретног зареза „%d“ (подешено Ñа „%pB“), „%pB“ кориÑти „%s“"
-#: elfxx-mips.c:15666
+#: elfxx-mips.c:15682
#, c-format
msgid "warning: %pB uses %s (set by %pB), %pB uses unknown floating point ABI %d"
msgstr "упозорење: „%pB“ кориÑти „%s“ (подешено Ñа „%pB“), „%pB“ кориÑти непознату „ABI“ тачку покретног зареза „%d“"
-#: elfxx-mips.c:15680
+#: elfxx-mips.c:15696
#, c-format
msgid "warning: %pB uses %s (set by %pB), %pB uses %s"
msgstr "упозорење: „%pB“ кориÑти „%s“ (подешено Ñа „%pB“), „%pB“ кориÑти „%s“"
-#: elfxx-mips.c:15699
+#: elfxx-mips.c:15715
#, c-format
msgid "warning: %pB uses %s (set by %pB), %pB uses unknown MSA ABI %d"
msgstr "упозорење: „%pB“ кориÑти „%s“ (подешено Ñа „%pB“), „%pB“ кориÑти непознато „MSA ABI“ „%d“"
-#: elfxx-mips.c:15711
+#: elfxx-mips.c:15727
#, c-format
msgid "warning: %pB uses unknown MSA ABI %d (set by %pB), %pB uses %s"
msgstr "упозорење: „%pB“ кориÑти непознато „MSA ABI“ „%d“ (подешено Ñа „%pB“), „%pB“ кориÑти „%s“"
-#: elfxx-mips.c:15720
+#: elfxx-mips.c:15736
#, c-format
msgid "warning: %pB uses unknown MSA ABI %d (set by %pB), %pB uses unknown MSA ABI %d"
msgstr "упозорење: „%pB“ кориÑти непознато „MSA ABI“ „%d“ (подешено Ñа „%pB“), „%pB“ кориÑти непознато „MSA ABI %d“"
-#: elfxx-mips.c:15782
+#: elfxx-mips.c:15798
#, c-format
msgid "%pB: endianness incompatible with that of the selected emulation"
msgstr "%pB: крајњоÑÑ‚ није ÑаглаÑна Ñа оном изабране емулације"
-#: elfxx-mips.c:15796
+#: elfxx-mips.c:15812
#, c-format
msgid "%pB: ABI is incompatible with that of the selected emulation"
msgstr "%pB: „ABI“ није ÑаглаÑна Ñа оном изабране емулације"
-#: elfxx-mips.c:15849
+#: elfxx-mips.c:15865
#, c-format
msgid "%pB: warning: inconsistent ISA between e_flags and .MIPS.abiflags"
msgstr "%pB: упозорење: недоÑледно ISA између „e_flags“ и „.MIPS.abiflags“"
-#: elfxx-mips.c:15854
+#: elfxx-mips.c:15870
#, c-format
msgid "%pB: warning: inconsistent FP ABI between .gnu.attributes and .MIPS.abiflags"
msgstr "%pB: упозорење: недоÑледно „FP ABI“ између „.gnu.attributes“ и „.MIPS.abiflags“"
-#: elfxx-mips.c:15858
+#: elfxx-mips.c:15874
#, c-format
msgid "%pB: warning: inconsistent ASEs between e_flags and .MIPS.abiflags"
msgstr "%pB: упозорење: недоÑледно „ASE“ између „e_flags“ и „.MIPS.abiflags“"
-#: elfxx-mips.c:15865
+#: elfxx-mips.c:15881
#, c-format
msgid "%pB: warning: inconsistent ISA extensions between e_flags and .MIPS.abiflags"
msgstr "%pB: упозорење: недоÑледна ISA проширења између „e_flags“ и „.MIPS.abiflags“"
-#: elfxx-mips.c:15869
+#: elfxx-mips.c:15885
#, c-format
msgid "%pB: warning: unexpected flag in the flags2 field of .MIPS.abiflags (0x%lx)"
msgstr "%pB: упозорење: неочекивана заÑтавица у „flags2“ пољу „.MIPS.abiflags“-а (0x%lx)"
-#: elfxx-mips.c:16060
+#: elfxx-mips.c:16076
msgid "-mips32r2 -mfp64 (12 callee-saved)"
msgstr "-mips32r2 -mfp64 (12 позиваоца-Ñачувано)"
-#: elfxx-mips.c:16122 elfxx-mips.c:16133
+#: elfxx-mips.c:16138 elfxx-mips.c:16149
msgid "None"
msgstr "Ðишта"
-#: elfxx-mips.c:16124 elfxx-mips.c:16193
+#: elfxx-mips.c:16140 elfxx-mips.c:16209
msgid "Unknown"
msgstr "Ðепознато"
-#: elfxx-mips.c:16204
+#: elfxx-mips.c:16220
#, c-format
msgid "Hard or soft float\n"
msgstr "ХардверÑки или ÑофтверÑки покретни зарез\n"
-#: elfxx-mips.c:16207
+#: elfxx-mips.c:16223
#, c-format
msgid "Hard float (double precision)\n"
msgstr "ХардверÑки покретни зарез (двоÑтрука тачноÑÑ‚)\n"
-#: elfxx-mips.c:16210
+#: elfxx-mips.c:16226
#, c-format
msgid "Hard float (single precision)\n"
msgstr "ХардверÑки покретни зарез (једноÑтрука тачноÑÑ‚)\n"
-#: elfxx-mips.c:16213
+#: elfxx-mips.c:16229
#, c-format
msgid "Soft float\n"
msgstr "СофтверÑки покретни зарез\n"
-#: elfxx-mips.c:16216
+#: elfxx-mips.c:16232
#, c-format
msgid "Hard float (MIPS32r2 64-bit FPU 12 callee-saved)\n"
msgstr "ХардверÑки покретни зарез („MIPS32r2“ 64-бита „FPU 12 callee-saved“)\n"
-#: elfxx-mips.c:16219
+#: elfxx-mips.c:16235
#, c-format
msgid "Hard float (32-bit CPU, Any FPU)\n"
msgstr "ХардверÑки покретни зарез (32-битни процеÑор, било који „FPU“)\n"
-#: elfxx-mips.c:16222
+#: elfxx-mips.c:16238
#, c-format
msgid "Hard float (32-bit CPU, 64-bit FPU)\n"
msgstr "ХардверÑки покретни зарез (32-битни процеÑор, 64-битни „FPU“)\n"
-#: elfxx-mips.c:16225
+#: elfxx-mips.c:16241
#, c-format
msgid "Hard float compat (32-bit CPU, 64-bit FPU)\n"
msgstr "ХардверÑко покретном зарезу ÑаглаÑно (32-битни процеÑор, 64-битни „FPU“)\n"
-#: elfxx-mips.c:16257
+#: elfxx-mips.c:16273
#, c-format
msgid " [abi=O32]"
msgstr " [аби=O32]"
-#: elfxx-mips.c:16259
+#: elfxx-mips.c:16275
#, c-format
msgid " [abi=O64]"
msgstr " [аби=O64]"
-#: elfxx-mips.c:16261
+#: elfxx-mips.c:16277
#, c-format
msgid " [abi=EABI32]"
msgstr " [аби=EABI32]"
-#: elfxx-mips.c:16263
+#: elfxx-mips.c:16279
#, c-format
msgid " [abi=EABI64]"
msgstr " [аби=EABI64]"
-#: elfxx-mips.c:16265
+#: elfxx-mips.c:16281
#, c-format
msgid " [abi unknown]"
msgstr " [аби није познато]"
-#: elfxx-mips.c:16267
+#: elfxx-mips.c:16283
#, c-format
msgid " [abi=N32]"
msgstr " [аби=N32]"
-#: elfxx-mips.c:16269
+#: elfxx-mips.c:16285
#, c-format
msgid " [abi=64]"
msgstr " [аби=64]"
-#: elfxx-mips.c:16271
+#: elfxx-mips.c:16287
#, c-format
msgid " [no abi set]"
msgstr " [аби није подешено]"
-#: elfxx-mips.c:16296
+#: elfxx-mips.c:16312
#, c-format
msgid " [unknown ISA]"
msgstr " [непознато ИСÐ]"
-#: elfxx-mips.c:16316
+#: elfxx-mips.c:16332
#, c-format
msgid " [not 32bitmode]"
msgstr " [није 32-битни режим]"
-#: elfxx-riscv.c:1383
+#: elfxx-riscv.c:1563
#, c-format
msgid "x ISA extension `%s' must be set with the versions"
msgstr "x ISA проширење „%s“ мора бити поÑтављено Ñа издањима"
-#: elfxx-riscv.c:1387
+#: elfxx-riscv.c:1569
#, c-format
msgid "cannot find default versions of the ISA extension `%s'"
msgstr "не могу да нађем оÑновна издања за ISA проширење „%s“"
-#: elfxx-riscv.c:1461
+#: elfxx-riscv.c:1669
#, c-format
-msgid "-march=%s: expect number after `%dp'"
-msgstr "-march=%s: очекујем број након „%dp“"
+msgid "%s: first ISA extension must be `e', `i' or `g'"
+msgstr "%s: прво ISA проширење мора бити „e“, „i“ или „g“"
-#: elfxx-riscv.c:1544
+#: elfxx-riscv.c:1698
#, c-format
-msgid "-march=%s: rv%de is not a valid base ISA"
-msgstr "-march=%s: „rv%de“ није иÑправна база ISA"
+msgid "%s: unknown standard ISA extension `%c'"
+msgstr "%s: непознато Ñтандардно ISA проширење „%c“"
-#: elfxx-riscv.c:1573
+#: elfxx-riscv.c:1708
#, c-format
-msgid "-march=%s: first ISA extension must be `e', `i' or `g'"
-msgstr "-march=%s: прво ISA проширење мора бити „e“, „i“ или „g“"
+msgid "%s: standard ISA extension `%c' is not in canonical order"
+msgstr "%s: Ñтандардно ISA проширење „%c“ није у канонÑком поретку"
-#: elfxx-riscv.c:1600
+#: elfxx-riscv.c:1759
#, c-format
-msgid "-march=%s: unknown standard and prefixed ISA extension `%s'"
-msgstr "-march=%s: непознато Ñтандардно и Ñа префикÑом ISA проширење „%s“"
+msgid "%s: unknown prefix class for the ISA extension `%s'"
+msgstr "%s: непозната клаÑа префикÑа за ISA проширење „%s“"
-#: elfxx-riscv.c:1604
+#: elfxx-riscv.c:1795
#, c-format
-msgid "-march=%s: standard ISA extension `%c' is not in canonical order"
-msgstr "-march=%s: Ñтандардно ISA проширење „%c“ није у канонÑком поретку"
+msgid "%s: invalid prefixed ISA extension `%s' ends with <number>p"
+msgstr "%s: неиÑправно Ñа префикÑом ISA проширење „%s“ Ñе завршава Ñа <број>p"
-#: elfxx-riscv.c:1654
+#: elfxx-riscv.c:1815
#, c-format
-msgid "-march=%s: unknown prefix class for the ISA extension `%s'"
-msgstr "-march=%s: непозната клаÑа префикÑа за ISA проширење „%s“"
+msgid "%s: unknown prefixed ISA extension `%s'"
+msgstr "%s: непознато Ñа префикÑом ISA проширење „%s“"
-#: elfxx-riscv.c:1688
+#: elfxx-riscv.c:1826
#, c-format
-msgid "-march=%s: unknown prefixed ISA extension `%s'"
-msgstr "-march=%s: непознато Ñа префикÑом ISA проширење „%s“"
+msgid "%s: duplicate prefixed ISA extension `%s'"
+msgstr "%s: двоÑтруко Ñа префикÑом ISA проширење „%s“"
-#: elfxx-riscv.c:1699
+#: elfxx-riscv.c:1836
#, c-format
-msgid "-march=%s: duplicate prefixed ISA extension `%s'"
-msgstr "-march=%s: двоÑтруко Ñа префикÑом ISA проширење „%s“"
+msgid "%s: prefixed ISA extension `%s' is not in expected order. It must come before `%s'"
+msgstr "%s: Ñа префикÑом ISA проширење „%s“ није у очекиваном поретку. Мора бити пре „%s“"
-#: elfxx-riscv.c:1709
+#: elfxx-riscv.c:1852
#, c-format
-msgid "-march=%s: prefixed ISA extension `%s' is not in expected order. It must come before `%s'"
-msgstr "-march=%s: Ñа префикÑом ISA проширење „%s“ није у очекиваном поретку. Мора бити пре „%s“"
+msgid "%s: prefixed ISA extension must separate with _"
+msgstr "%s: Ñа префикÑом ISA проширење Ñе мора раздвојити Ñа „_“"
+
+#: elfxx-riscv.c:1891
+#, c-format
+msgid "rv%d does not support the `e' extension"
+msgstr "„rv%d“ не подржава проширење „e“"
+
+#: elfxx-riscv.c:1898
+#, c-format
+msgid "rv%d does not support the `q' extension"
+msgstr "„rv%d“ не подржава проширење „q“"
+
+#: elfxx-riscv.c:1905
+msgid "rv32e does not support the `f' extension"
+msgstr "„rv32e“ не подржава проширење „f“"
-#: elfxx-riscv.c:1725
+#: elfxx-riscv.c:1912
+msgid "`zfinx' is conflict with the `f/d/q' extension"
+msgstr "„zfinx“ је у Ñукобу Ñа проширењем „f/d/q“"
+
+#: elfxx-riscv.c:1933
+msgid "zvl*b extensions need to enable either `v' or `zve' extension"
+msgstr "„zvl*b“ проширења треба да укључе или „v“ или „zve“ проширење"
+
+#: elfxx-riscv.c:1995
#, c-format
-msgid "-march=%s: prefixed ISA extension must separate with _"
-msgstr "-march=%s: Ñа префикÑом ISA проширење Ñе мора раздвојити Ñа „_“"
+msgid "%s: ISA string cannot contain uppercase letters"
+msgstr "%s: ISA ниÑка не може Ñадржати велика Ñлова"
-#: elfxx-riscv.c:1773
+#: elfxx-riscv.c:2023
#, c-format
-msgid "-march=%s: ISA string cannot contain uppercase letters"
-msgstr "-march=%s: ISA ниÑка не може Ñадржати велика Ñлова"
+msgid "%s: ISA string must begin with rv32 or rv64"
+msgstr "%s: ISA ниÑка мора почети Ñа „rv32“ или „rv64“"
-#: elfxx-riscv.c:1799
+#: elfxx-riscv.c:2259
#, c-format
-msgid "-march=%s: ISA string must begin with rv32 or rv64"
-msgstr "-march=%s: ISA ниÑка мора почети Ñа „rv32“ или „rv64“"
+msgid "invalid ISA extension ends with <number>p in .option arch `%s'"
+msgstr "неиÑправно ISA проширење Ñе завршава Ñа <број>p у „.option“ архитектури „%s“"
-#: elfxx-riscv.c:1832
+#: elfxx-riscv.c:2282
#, c-format
-msgid "-march=%s: rv32e does not support the `f' extension"
-msgstr "-march=%s: „rv32e“ не подржава проширење „f“"
+msgid "unknown ISA extension `%s' in .option arch `%s'"
+msgstr "непознато ISA проширење „%s“ у „.option“ архитектури „%s“"
-#: elfxx-riscv.c:1840
+#: elfxx-riscv.c:2293
#, c-format
-msgid "-march=%s: rv32 does not support the `q' extension"
-msgstr "-march=%s: „rv32“ не подржава проширење „q“"
+msgid "cannot + or - base extension `%s' in .option arch `%s'"
+msgstr "не могу да + или - оÑновно проширење „%s“ у „.option“ архитектури „%s“"
+
+#: elfxx-riscv.c:2413
+msgid "internal: unreachable INSN_CLASS_*"
+msgstr "унутрашње: недоÑтижна „INSN_CLASS_*“"
-#: elfxx-sparc.c:3021 elfnn-aarch64.c:5526
+#: elfxx-sparc.c:3021 elfnn-aarch64.c:5529
#, c-format
msgid "%pB: relocation %s against STT_GNU_IFUNC symbol `%s' isn't handled by %s"
msgstr "%pB: премештање „%s“ наÑпрам „STT_GNU_IFUNC“ Ñимбола „%s“ „%s“ не може да одради"
@@ -5462,95 +5519,118 @@ msgstr "%pB: премештање „%s“ наÑпрам „STT_GNU_IFUNC“ Ñ
msgid "%pB: cannot link together %s and %s objects"
msgstr "%pB: не могу да повежем заједно објекте „%s“ и „%s“"
-#: elfxx-x86.c:980
+#: elfxx-x86.c:1026
+#, c-format
+msgid "%F%P: %pB: failed to allocate relative reloc record\n"
+msgstr "%F%P: %pB: ниÑам уÑпео да доделим Ð·Ð°Ð¿Ð¸Ñ Ñ€ÐµÐ»Ð°Ñ‚Ð¸Ð²Ð½Ð¾Ð³ премештања\n"
+
+#: elfxx-x86.c:1368
+#, c-format
+msgid "%F%P: %pB: failed to allocate 64-bit DT_RELR bitmap\n"
+msgstr "%F%P: %pB: ниÑам уÑпео да доделим 64-битну „DT_RELR“ битмапу\n"
+
+#: elfxx-x86.c:1404
+#, c-format
+msgid "%F%P: %pB: failed to allocate 32-bit DT_RELR bitmap\n"
+msgstr "%F%P: %pB: ниÑам уÑпео да доделим 32-битну „DT_RELR“ битмапу\n"
+
+#: elfxx-x86.c:1707
+#, c-format
+msgid "%F%P: %pB: size of compact relative reloc section is changed: new (%lu) != old (%lu)\n"
+msgstr "%F%P: %pB: величина Ñажетог одељка релативног премештања је измењено: нова (%lu) != Ñтара (%lu)\n"
+
+#: elfxx-x86.c:1729
+#, c-format
+msgid "%F%P: %pB: failed to allocate compact relative reloc section\n"
+msgstr "%F%P: %pB: ниÑам уÑпео да доделим Ñажети одељак релативног премештања\n"
+
+#: elfxx-x86.c:1987
#, c-format
msgid "%F%P: %pB: relocation %s against absolute symbol `%s' in section `%pA' is disallowed\n"
msgstr "%F%P: %pB: премештај „%s“ наÑпрам апÑолутног Ñимбола „%s“ у одељку „%pA“ је иÑкључен\n"
-#: elfxx-x86.c:1062
+#: elfxx-x86.c:2069
msgid "%P: %pB: warning: relocation in read-only section `%pA'\n"
msgstr "%P: %pB: упозорење: премештање у одељку „%pA“ који је Ñамо за читање\n"
-#: elfxx-x86.c:1782
-#, c-format
-msgid "%pB: %s (offset: 0x%s, info: 0x%s, addend: 0x%s) against '%s' for section '%pA' in %pB\n"
-msgstr "%pB: %s (померај: 0x%s, инфо: 0x%s, Ñабирак: 0x%s) за „%s“ за одељак „%pA“ у „%pB“\n"
+#: elfxx-x86.c:2785
+msgid "%pB: %s (offset: 0x%v, info: 0x%v, addend: 0x%v) against '%s' for section '%pA' in %pB\n"
+msgstr "%pB: %s (померај: 0x%v, инфо: 0x%v, Ñабирак: 0x%v) за „%s“ за одељак „%pA“ у „%pB“\n"
-#: elfxx-x86.c:1789
-#, c-format
-msgid "%pB: %s (offset: 0x%s, info: 0x%s) against '%s' for section '%pA' in %pB\n"
-msgstr "%pB: %s (померај: 0x%s, инфо: 0x%s) за „%s“ за одељак „%pA“ у „%pB“\n"
+#: elfxx-x86.c:2791
+msgid "%pB: %s (offset: 0x%v, info: 0x%v) against '%s' for section '%pA' in %pB\n"
+msgstr "%pB: %s (померај: 0x%v, инфо: 0x%v) за „%s“ за одељак „%pA“ у „%pB“\n"
-#: elfxx-x86.c:2367
+#: elfxx-x86.c:3388
#, c-format
msgid "error: %pB: <corrupt x86 property (0x%x) size: 0x%x>"
msgstr "грешка: %pB: <оштећено x86 ÑвојÑтво (0x%x) величине: 0x%x>"
-#: elfxx-x86.c:2714
+#: elfxx-x86.c:3735
msgid "%P: %pB: warning: missing %s\n"
msgstr "%P: %pB: упозорење: недоÑтаје „%s“\n"
-#: elfxx-x86.c:2715
+#: elfxx-x86.c:3736
msgid "%X%P: %pB: error: missing %s\n"
msgstr "%X%P: %pB: грешка: недоÑтаје „%s“\n"
-#: elfxx-x86.c:2778
+#: elfxx-x86.c:3799
msgid "IBT and SHSTK properties"
msgstr "„IBT“ и „SHSTK“ ÑвојÑтва"
-#: elfxx-x86.c:2780
+#: elfxx-x86.c:3801
msgid "IBT property"
msgstr "„IBT“ ÑвојÑтво"
-#: elfxx-x86.c:2782
+#: elfxx-x86.c:3803
msgid "SHSTK property"
msgstr "„SHSTK“ ÑвојÑтво"
-#: elfxx-x86.c:2787
+#: elfxx-x86.c:3808
msgid "LAM_U48 property"
msgstr "„LAM_U48“ property"
-#: elfxx-x86.c:2792
+#: elfxx-x86.c:3813
msgid "LAM_U57 property"
msgstr "„LAM_U57“ ÑвојÑтво"
-#: elfxx-x86.c:2936
+#: elfxx-x86.c:3957
msgid "%F%P: failed to create VxWorks dynamic sections\n"
msgstr "%F%P: ниÑам уÑпео да Ñтворим „VxWorks“ динамичке одељке\n"
-#: elfxx-x86.c:2945
+#: elfxx-x86.c:3966
msgid "%F%P: failed to create GOT sections\n"
msgstr "%F%P: ниÑам уÑпео да направим „GOT“ одељке\n"
-#: elfxx-x86.c:2963
+#: elfxx-x86.c:3984
msgid "%F%P: failed to create ifunc sections\n"
msgstr "%F%P: ниÑам уÑпео да направим „ifunc“ одељке\n"
-#: elfxx-x86.c:3000
+#: elfxx-x86.c:4021
msgid "%F%P: failed to create GOT PLT section\n"
msgstr "%F%P: ниÑам уÑпео да направим „GOT PLT“ одељак\n"
-#: elfxx-x86.c:3019
+#: elfxx-x86.c:4040
msgid "%F%P: failed to create IBT-enabled PLT section\n"
msgstr "%F%P: ниÑам уÑпео да направим „IBT“-ом укључен „PLT“ одељак\n"
-#: elfxx-x86.c:3033
+#: elfxx-x86.c:4054
msgid "%F%P: failed to create BND PLT section\n"
msgstr "%F%P: ниÑам уÑпео да направим „BND PLT“ одељак\n"
-#: elfxx-x86.c:3053
+#: elfxx-x86.c:4074
msgid "%F%P: failed to create PLT .eh_frame section\n"
msgstr "%F%P: ниÑам уÑпео да направим „PLT .eh_frame“ одељак\n"
-#: elfxx-x86.c:3066
+#: elfxx-x86.c:4087
msgid "%F%P: failed to create GOT PLT .eh_frame section\n"
msgstr "%F%P: ниÑам уÑпео да направим „GOT .eh_frame“ одељак\n"
-#: elfxx-x86.c:3080
+#: elfxx-x86.c:4101
msgid "%F%P: failed to create the second PLT .eh_frame section\n"
msgstr "%F%P: ниÑам уÑпео да направим други „PLT .eh_frame“ одељак\n"
-#: elfxx-x86.c:3122
+#: elfxx-x86.c:4143
msgid "%X%P: attempted static link of dynamic object `%pB'\n"
msgstr "%X%P: покушах Ñтатичку везу динамичког објекта „%pB“\n"
@@ -5624,76 +5704,76 @@ msgstr "ЗаÑтарело „%s“ је позвано у „%s“ %d. ред Ñ
msgid "Deprecated %s called\n"
msgstr "ЗаÑтарело „%s“ је позвано\n"
-#: linker.c:1706
+#: linker.c:1708
#, c-format
msgid "%pB: indirect symbol `%s' to `%s' is a loop"
msgstr "%pB: индиректни Ñимбол „%s“ ка „%s“ је петља"
-#: linker.c:2577
+#: linker.c:2579
#, c-format
msgid "attempt to do relocatable link with %s input and %s output"
msgstr "покушавам да одрадим премеÑтиву везу Ñа „%s“ улазом и „%s“ излазом"
-#: linker.c:2861
+#: linker.c:2863
#, c-format
msgid "%pB: ignoring duplicate section `%pA'\n"
msgstr "%pB: занемарујем удвоÑтручени одељак „%pA“\n"
-#: linker.c:2871 linker.c:2881
+#: linker.c:2873 linker.c:2883
#, c-format
msgid "%pB: duplicate section `%pA' has different size\n"
msgstr "%pB: удвоÑтручени одељак „%pA“ има другачију величину\n"
-#: linker.c:2890 linker.c:2896
+#: linker.c:2892 linker.c:2898
#, c-format
msgid "%pB: could not read contents of section `%pA'\n"
msgstr "%pB: не могу да прочитам Ñадржај одељка „%pA“\n"
-#: linker.c:2901
+#: linker.c:2903
#, c-format
msgid "%pB: duplicate section `%pA' has different contents\n"
msgstr "%pB: удвоÑтручени одељак „%pA“ има другачији Ñадржај\n"
-#: linker.c:3419
+#: linker.c:3421
#, c-format
msgid "%pB: compiled for a big endian system and target is little endian"
msgstr "%pB: преведено за ÑиÑтем велике крајноÑти а циљ је мала крајноÑÑ‚"
-#: linker.c:3422
+#: linker.c:3424
#, c-format
msgid "%pB: compiled for a little endian system and target is big endian"
msgstr "%pB: преведено за ÑиÑтем мале крајноÑти а циљ је велика крајноÑÑ‚"
-#: mach-o-arm.c:172
+#: mach-o-arm.c:169 mach-o-arm.c:301
msgid "malformed mach-o ARM reloc pair: reloc is first reloc"
msgstr "лош „mach-o ARM“ пар премештања: премештање је прво премештање"
-#: mach-o-arm.c:188
+#: mach-o-arm.c:185
#, c-format
msgid "malformed mach-o ARM reloc pair: invalid length: %d"
msgstr "лош „mach-o ARM“ пар премештања: неиÑправна дужина: %d"
-#: mach-o-arm.c:203
+#: mach-o-arm.c:200
#, c-format
msgid "malformed mach-o ARM sectdiff reloc: invalid length: %d"
msgstr "лош „mach-o ARM“ Ñектор разлика премештања: неиÑправна дужина: %d"
-#: mach-o-arm.c:218
+#: mach-o-arm.c:215
#, c-format
msgid "malformed mach-o ARM local sectdiff reloc: invalid length: %d"
msgstr "лош „mach-o ARM“ локални Ñектор разлика премештања: неиÑправна дужина: %d"
-#: mach-o-arm.c:233
+#: mach-o-arm.c:230
#, c-format
msgid "malformed mach-o ARM half sectdiff reloc: invalid length: %d"
msgstr "лош „mach-o ARM“ полуÑектор разлика премештања: неиÑправна дужина: %d"
-#: mach-o-arm.c:265
+#: mach-o-arm.c:262
#, c-format
msgid "malformed mach-o ARM vanilla reloc: invalid length: %d (pcrel: %d)"
msgstr "лоше „mach-o ARM“ ванила премештање: неиÑправна дужина: %d (pcrel: %d)"
-#: mach-o-arm.c:329
+#: mach-o-arm.c:332
#, c-format
msgid "malformed mach-o ARM reloc: unknown reloc type: %d"
msgstr "лоше „mach-o ARM“ премештање: непозната врÑта премештања: %d"
@@ -5797,13 +5877,13 @@ msgstr "не могу да прикажем непознату наредбу у
#: mach-o.c:3659
#, c-format
-msgid "bfd_mach_o_read_section_32: overlarge alignment value: %#lx, using 32 instead"
-msgstr "bfd_mach_o_read_section_32: превелика вредноÑÑ‚ поравања: %#lx, кориÑтим 32 умеÑто тога"
+msgid "bfd_mach_o_read_section_32: overlarge alignment value: %#lx"
+msgstr "bfd_mach_o_read_section_32: превелика вредноÑÑ‚ поравања: %#lx"
#: mach-o.c:3702
#, c-format
-msgid "bfd_mach_o_read_section_64: overlarge alignment value: %#lx, using 32 instead"
-msgstr "bfd_mach_o_read_section_64: превелика вредноÑÑ‚ поравања: %#lx, кориÑтим 32 умеÑто тога"
+msgid "bfd_mach_o_read_section_64: overlarge alignment value: %#lx"
+msgstr "bfd_mach_o_read_section_64: превелика вредноÑÑ‚ поравања: %#lx"
#: mach-o.c:3753
#, c-format
@@ -5845,132 +5925,137 @@ msgstr "непозната вредноÑÑ‚ поретка бајта загла
msgid "%pB: access beyond end of merged section (%<PRId64>)"
msgstr "%pB: приÑтуп иза краја Ñтопљеног одељка (%<PRId64>)"
-#: mmo.c:475
+#: mmo.c:472
#, c-format
msgid "%pB: no core to allocate section name %s"
msgstr "%pB: нема језгра за додељивање назива одељка „%s“"
-#: mmo.c:540
+#: mmo.c:537
#, c-format
msgid "%pB: no core to allocate a symbol %d bytes long"
msgstr "%pB: нема језгра за додељивање Ñимбола дугог %d бајта"
-#: mmo.c:951
+#: mmo.c:960
#, c-format
msgid "%pB: attempt to emit contents at non-multiple-of-4 address %#<PRIx64>"
msgstr "%pB: покушах да емитујем Ñадржај на адреÑи која није производ 4 „%#<PRIx64>“"
-#: mmo.c:1247
+#: mmo.c:1256
#, c-format
msgid "%pB: invalid mmo file: initialization value for $255 is not `Main'\n"
msgstr "%pB: неиÑправна „mmo“ датотека: вредноÑÑ‚ покретања за $255 није „Main“\n"
-#: mmo.c:1394
+#: mmo.c:1403
#, c-format
msgid "%pB: unsupported wide character sequence 0x%02X 0x%02X after symbol name starting with `%s'\n"
msgstr "%pB: неподржан широки низ знака 0x%02X 0x%02X након назива Ñимбола који почиње Ñа „%s“\n"
-#: mmo.c:1627
+#: mmo.c:1419
+#, c-format
+msgid "%pB: symbol name exceeds given max length of %d"
+msgstr "%pB: назив Ñимбола премашује дату највећу дужину од %d"
+
+#: mmo.c:1646
#, c-format
msgid "%pB: invalid mmo file: unsupported lopcode `%d'\n"
msgstr "%pB: неиÑправна „mmo“ датотека: лопкод „%d“ није подржан\n"
-#: mmo.c:1638
+#: mmo.c:1657
#, c-format
msgid "%pB: invalid mmo file: expected YZ = 1 got YZ = %d for lop_quote\n"
msgstr "%pB: неиÑправна „mmo“ датотека: очекивах YZ = 1 добих YZ = %d за „lop_quote“\n"
-#: mmo.c:1678
+#: mmo.c:1701
#, c-format
msgid "%pB: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_loc\n"
msgstr "%pB: неиÑправна „mmo“ датотека: очекивах z = 1 или z = 2, добих z = %d за „lop_loc“\n"
-#: mmo.c:1729
+#: mmo.c:1752
#, c-format
msgid "%pB: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_fixo\n"
msgstr "%pB: неиÑправна „mmo“ датотека: очекивах z = 1 или z = 2, добих z = %d за „lop_fixo“\n"
-#: mmo.c:1770
+#: mmo.c:1801
#, c-format
msgid "%pB: invalid mmo file: expected y = 0, got y = %d for lop_fixrx\n"
msgstr "%pB: неиÑправна „mmo“ датотека: очекивах y = 0 добих y = %d за „lop_fixrx“\n"
-#: mmo.c:1781
+#: mmo.c:1812
#, c-format
msgid "%pB: invalid mmo file: expected z = 16 or z = 24, got z = %d for lop_fixrx\n"
msgstr "%pB: неиÑправна „mmo“ датотека: очекивах z = 16 или z = 24, добих z = %d за „lop_fixrx“\n"
-#: mmo.c:1806
+#: mmo.c:1837
#, c-format
msgid "%pB: invalid mmo file: leading byte of operand word must be 0 or 1, got %d for lop_fixrx\n"
msgstr "%pB: неиÑправна „mmo“ датотека: водећи бајт речи операнда мора бити 0 или 1, добих %d за „lop_fixrx“\n"
-#: mmo.c:1831
+#: mmo.c:1866
#, c-format
msgid "%pB: cannot allocate file name for file number %d, %d bytes\n"
msgstr "%pB: не могу да доделим назив датотеке за број датотеке %d, %d бајта\n"
-#: mmo.c:1853
+#: mmo.c:1888
#, c-format
msgid "%pB: invalid mmo file: file number %d `%s', was already entered as `%s'\n"
msgstr "%pB: неиÑправна „mmo“ датотека: број датотеке %d „%s“, је већ унешен као „%s“\n"
-#: mmo.c:1867
+#: mmo.c:1902
#, c-format
msgid "%pB: invalid mmo file: file name for number %d was not specified before use\n"
msgstr "%pB: неиÑправна „mmo“ датотека: назив датотеке за број %d није наведен пре употребе\n"
-#: mmo.c:1974
+#: mmo.c:2014
#, c-format
msgid "%pB: invalid mmo file: fields y and z of lop_stab non-zero, y: %d, z: %d\n"
msgstr "%pB: неиÑправна „mmo“ датотека: поље y и z „lop_stab“-а није нула, y: %d, z: %d\n"
-#: mmo.c:2011
+#: mmo.c:2051
#, c-format
msgid "%pB: invalid mmo file: lop_end not last item in file\n"
msgstr "%pB: неиÑправна „mmo“ датотека: „lop_end“ није поÑледња Ñтавка у датотеци\n"
-#: mmo.c:2025
+#: mmo.c:2065
#, c-format
msgid "%pB: invalid mmo file: YZ of lop_end (%ld) not equal to the number of tetras to the preceding lop_stab (%ld)\n"
msgstr "%pB: неиÑправна „mmo“ датотека: YZ „lop_end“-а (%ld) није једнако Ñа бројем тетраÑа до претходног „lop_stab“-а (%ld)\n"
-#: mmo.c:2734
+#: mmo.c:2778
#, c-format
msgid "%pB: invalid symbol table: duplicate symbol `%s'\n"
msgstr "%pB: неиÑправна табела Ñимбола: удвоÑтручени Ñимбол „%s“\n"
-#: mmo.c:2978
+#: mmo.c:3022
#, c-format
msgid "%pB: bad symbol definition: `Main' set to %s rather than the start address %s\n"
msgstr "%pB: лоша дефиниција Ñимбола: „Main“ је поÑтављено на „%s“ умеÑто почетне адреÑе „%s“\n"
-#: mmo.c:3077
+#: mmo.c:3121
#, c-format
msgid "%pB: warning: symbol table too large for mmo, larger than 65535 32-bit words: %d. Only `Main' will be emitted.\n"
msgstr "%pB: упозорење: табела Ñимбола је превише велика за „mmo“, већа од 65535 32-битних речи: %d. Само „Main“ биће дато.\n"
-#: mmo.c:3123
+#: mmo.c:3167
#, c-format
msgid "%pB: internal error, symbol table changed size from %d to %d words\n"
msgstr "%pB: унутрашња грешка, табела Ñимбола је изменила величину из %d у %d речи\n"
-#: mmo.c:3176
+#: mmo.c:3220
#, c-format
msgid "%pB: internal error, internal register section %pA had contents\n"
msgstr "%pB: унутрашња грешка, унутрашњи одељак региÑтра „%pA“ има Ñадржај\n"
-#: mmo.c:3227
+#: mmo.c:3271
#, c-format
msgid "%pB: no initialized registers; section length 0\n"
msgstr "%pB: нема покренутих региÑтара; дужина одељка 0\n"
-#: mmo.c:3234
+#: mmo.c:3278
#, c-format
msgid "%pB: too many initialized registers; section length %<PRId64>"
msgstr "%pB: превише покренутих региÑтара; дужина одељка %<PRId64>"
-#: mmo.c:3239
+#: mmo.c:3283
#, c-format
msgid "%pB: invalid start address for initialized registers of length %<PRId64>: %#<PRIx64>"
msgstr "%pB: неиÑправна почетна адреÑа за покренуте региÑтре дужине %<PRId64>: %#<PRIx64>"
@@ -5980,7 +6065,7 @@ msgstr "%pB: неиÑправна почетна адреÑа за покренÑ
msgid "unhandled OSF/1 core file section type %d"
msgstr "не могу да радим Ñа врÑтом одељка %d датотеке OSF/1 језгра"
-#: pdp11.c:1590
+#: pdp11.c:1589
#, c-format
msgid "%pB: symbol indicates overlay (not supported)"
msgstr "%pB: Ñимбол означава прекорачење (није подржано)"
@@ -6052,47 +6137,47 @@ msgstr ""
"Излаз за „%s“\n"
#. XXX code yet to be written.
-#: peicode.h:796
+#: peicode.h:806
#, c-format
msgid "%pB: unhandled import type; %x"
msgstr "%pB: необрадива врÑта увоза; %x"
-#: peicode.h:802
+#: peicode.h:812
#, c-format
msgid "%pB: unrecognized import type; %x"
msgstr "%pB: непозната врÑта увоза; %x"
-#: peicode.h:817
+#: peicode.h:827
#, c-format
msgid "%pB: unrecognized import name type; %x"
msgstr "%pB: непознат назив врÑте увоза; %x"
-#: peicode.h:1225
+#: peicode.h:1241
#, c-format
msgid "%pB: unrecognised machine type (0x%x) in Import Library Format archive"
msgstr "%pB: непозната врÑта машине (0x%x) у архиви запиÑа библиотеке увоза"
-#: peicode.h:1238
+#: peicode.h:1254
#, c-format
msgid "%pB: recognised but unhandled machine type (0x%x) in Import Library Format archive"
msgstr "%pB: позната али необрадива врÑта машине (0x%x) у архиви запиÑа библиотеке увоза"
-#: peicode.h:1256
+#: peicode.h:1272
#, c-format
msgid "%pB: size field is zero in Import Library Format header"
msgstr "%pB: поље величине је нула у заглављу запиÑа библиотеке увоза"
-#: peicode.h:1282
+#: peicode.h:1298
#, c-format
msgid "%pB: string not null terminated in ILF object file"
msgstr "%pB: ниÑка Ñе не завршава нулом у датотеци „ILF“ објекта"
-#: peicode.h:1338
+#: peicode.h:1354
#, c-format
msgid "%pB: error: debug data ends beyond end of debug directory"
msgstr "%pB: грешка: подаци прочишћавања Ñе завршавају изван краја директоријума прочишћавања"
-#: plugin.c:236
+#: plugin.c:246
msgid "plugin framework: out of file descriptors. Try using fewer objects/archives\n"
msgstr "радни оквир прикључка: нема више опиÑника датотека. Покушајте да кориÑтите мање објеката/архива\n"
@@ -6149,17 +6234,17 @@ msgstr "Одељак партиције[%d] = 0x%.8lx (%ld)\n"
msgid "Partition[%d] length = 0x%.8lx (%ld)\n"
msgstr "Дужина партиције[%d] = 0x%.8lx (%ld)\n"
-#: reloc.c:8329
+#: reloc.c:8420
msgid "INPUT_SECTION_FLAGS are not supported"
msgstr "„INPUT_SECTION_FLAGS“ није подржано"
-#: reloc.c:8589
+#: reloc.c:8680
#, c-format
msgid "%pB: unrecognized relocation type %#x in section `%pA'"
msgstr "%pB: непозната врÑта премештања %#x у одељку „%pA“"
#. PR 21803: Suggest the most likely cause of this error.
-#: reloc.c:8593
+#: reloc.c:8684
#, c-format
msgid "is this version of the linker - %s - out of date ?"
msgstr "да није ово издање повезивача – %s – мало заÑтарело ?"
@@ -6369,291 +6454,291 @@ msgstr "„%s“ није примењено"
msgid "unknown line command %d"
msgstr "непозната редна наредба „%d“"
-#: vms-alpha.c:5186 vms-alpha.c:5204 vms-alpha.c:5219 vms-alpha.c:5235
-#: vms-alpha.c:5248 vms-alpha.c:5260 vms-alpha.c:5273
+#: vms-alpha.c:5183 vms-alpha.c:5201 vms-alpha.c:5216 vms-alpha.c:5232
+#: vms-alpha.c:5245 vms-alpha.c:5257 vms-alpha.c:5270
#, c-format
msgid "unknown reloc %s + %s"
msgstr "непознато премештање „%s + %s“"
-#: vms-alpha.c:5328
+#: vms-alpha.c:5325
#, c-format
msgid "unknown reloc %s"
msgstr "непознато премештање „%s“"
-#: vms-alpha.c:5342
+#: vms-alpha.c:5339
msgid "invalid section index in ETIR"
msgstr "неиÑправан Ð¸Ð½Ð´ÐµÐºÑ Ð¾Ð´ÐµÑ™ÐºÐ° у „ETIR“-у"
-#: vms-alpha.c:5351
+#: vms-alpha.c:5348
msgid "relocation for non-REL psect"
msgstr "премештање за не-„REL“ п-одељак"
-#: vms-alpha.c:5400
+#: vms-alpha.c:5397
#, c-format
msgid "unknown symbol in command %s"
msgstr "непознати Ñимбол у наредби „%s“"
-#: vms-alpha.c:5814
+#: vms-alpha.c:5811
#, c-format
msgid "reloc (%d) is *UNKNOWN*"
msgstr "премештање (%d) је *ÐЕПОЗÐÐТО*"
-#: vms-alpha.c:5930
+#: vms-alpha.c:5927
#, c-format
msgid " EMH %u (len=%u): "
msgstr " EMH %u (дужина=%u): "
-#: vms-alpha.c:5935
+#: vms-alpha.c:5932
#, c-format
msgid " Error: The length is less than the length of an EMH record\n"
msgstr " Грешка: дужина је мања од дужине „EMH“ Ñнимка\n"
-#: vms-alpha.c:5952
+#: vms-alpha.c:5949
#, c-format
msgid " Error: The record length is less than the size of an EMH_MHD record\n"
msgstr " Грешка: дужина Ñнимка је мања од величине „EMH_MHD“ Ñнимка\n"
-#: vms-alpha.c:5955
+#: vms-alpha.c:5952
#, c-format
msgid "Module header\n"
msgstr "Заглавље модула\n"
-#: vms-alpha.c:5956
+#: vms-alpha.c:5953
#, c-format
msgid " structure level: %u\n"
msgstr " ниво Ñтруктуре : %u\n"
-#: vms-alpha.c:5957
+#: vms-alpha.c:5954
#, c-format
msgid " max record size: %u\n"
msgstr " најв. величина бележења: %u\n"
-#: vms-alpha.c:5963
+#: vms-alpha.c:5960
#, c-format
msgid " Error: The module name is missing\n"
msgstr " Грешка: Ðазив модула недоÑтаје\n"
-#: vms-alpha.c:5969
+#: vms-alpha.c:5966
#, c-format
msgid " Error: The module name is too long\n"
msgstr " Грешка: Ðазив модула је предуг\n"
-#: vms-alpha.c:5972
+#: vms-alpha.c:5969
#, c-format
msgid " module name : %.*s\n"
msgstr " назив модула : %.*s\n"
-#: vms-alpha.c:5976
+#: vms-alpha.c:5973
#, c-format
msgid " Error: The module version is missing\n"
msgstr " Грешка: Издање модула недоÑтаје\n"
-#: vms-alpha.c:5982
+#: vms-alpha.c:5979
#, c-format
msgid " Error: The module version is too long\n"
msgstr " Грешка: Издање модула је предуго\n"
-#: vms-alpha.c:5985
+#: vms-alpha.c:5982
#, c-format
msgid " module version : %.*s\n"
msgstr " издање модула : %.*s\n"
-#: vms-alpha.c:5988
+#: vms-alpha.c:5985
#, c-format
msgid " Error: The compile date is truncated\n"
msgstr " Грешка: Датум превођења је Ñкраћен\n"
-#: vms-alpha.c:5990
+#: vms-alpha.c:5987
#, c-format
msgid " compile date : %.17s\n"
msgstr " датум превођења : %.17s\n"
-#: vms-alpha.c:5995
+#: vms-alpha.c:5992
#, c-format
msgid "Language Processor Name\n"
msgstr "Ðазив језика процеÑора\n"
-#: vms-alpha.c:5996
+#: vms-alpha.c:5993
#, c-format
msgid " language name: %.*s\n"
msgstr " назив језика: %.*s\n"
-#: vms-alpha.c:6000
+#: vms-alpha.c:5997
#, c-format
msgid "Source Files Header\n"
msgstr "Заглавље датотека извора\n"
-#: vms-alpha.c:6001
+#: vms-alpha.c:5998
#, c-format
msgid " file: %.*s\n"
msgstr " датотека: %.*s\n"
-#: vms-alpha.c:6005
+#: vms-alpha.c:6002
#, c-format
msgid "Title Text Header\n"
msgstr "Заглавље текÑта наÑлова\n"
-#: vms-alpha.c:6006
+#: vms-alpha.c:6003
#, c-format
msgid " title: %.*s\n"
msgstr " наÑлов: %.*s\n"
-#: vms-alpha.c:6010
+#: vms-alpha.c:6007
#, c-format
msgid "Copyright Header\n"
msgstr "Заглавље ауторÑких права\n"
-#: vms-alpha.c:6011
+#: vms-alpha.c:6008
#, c-format
msgid " copyright: %.*s\n"
msgstr " ауторÑка права: %.*s\n"
-#: vms-alpha.c:6015
+#: vms-alpha.c:6012
#, c-format
msgid "unhandled emh subtype %u\n"
msgstr "необрадива emh подврÑта „%u“\n"
-#: vms-alpha.c:6025
+#: vms-alpha.c:6022
#, c-format
msgid " EEOM (len=%u):\n"
msgstr " EEOM (дужина=%u):\n"
-#: vms-alpha.c:6030
+#: vms-alpha.c:6027
#, c-format
msgid " Error: The length is less than the length of an EEOM record\n"
msgstr " Грешка: дужина је мања од дужине „EEOM“ Ñнимка\n"
-#: vms-alpha.c:6034
+#: vms-alpha.c:6031
#, c-format
msgid " number of cond linkage pairs: %u\n"
msgstr " број „cond“ парова повезивања: %u\n"
-#: vms-alpha.c:6036
+#: vms-alpha.c:6033
#, c-format
msgid " completion code: %u\n"
msgstr " довршавање кода: %u\n"
-#: vms-alpha.c:6040
+#: vms-alpha.c:6037
#, c-format
msgid " transfer addr flags: 0x%02x\n"
msgstr " заÑтавице адреÑе преноÑа: 0x%02x\n"
-#: vms-alpha.c:6041
+#: vms-alpha.c:6038
#, c-format
msgid " transfer addr psect: %u\n"
msgstr " п-одељак адреÑе преноÑа : %u\n"
-#: vms-alpha.c:6043
+#: vms-alpha.c:6040
#, c-format
msgid " transfer address : 0x%08x\n"
msgstr " адреÑа преноÑа : 0x%08x\n"
-#: vms-alpha.c:6052
+#: vms-alpha.c:6049
msgid " WEAK"
msgstr " WEAK"
-#: vms-alpha.c:6054
+#: vms-alpha.c:6051
msgid " DEF"
msgstr " DEF"
-#: vms-alpha.c:6056
+#: vms-alpha.c:6053
msgid " UNI"
msgstr " UNI"
-#: vms-alpha.c:6058 vms-alpha.c:6079
+#: vms-alpha.c:6055 vms-alpha.c:6076
msgid " REL"
msgstr " REL"
-#: vms-alpha.c:6060
+#: vms-alpha.c:6057
msgid " COMM"
msgstr " COMM"
-#: vms-alpha.c:6062
+#: vms-alpha.c:6059
msgid " VECEP"
msgstr " VECEP"
-#: vms-alpha.c:6064
+#: vms-alpha.c:6061
msgid " NORM"
msgstr " NORM"
-#: vms-alpha.c:6066
+#: vms-alpha.c:6063
msgid " QVAL"
msgstr " QVAL"
-#: vms-alpha.c:6073
+#: vms-alpha.c:6070
msgid " PIC"
msgstr " PIC"
-#: vms-alpha.c:6075
+#: vms-alpha.c:6072
msgid " LIB"
msgstr " LIB"
-#: vms-alpha.c:6077
+#: vms-alpha.c:6074
msgid " OVR"
msgstr " OVR"
-#: vms-alpha.c:6081
+#: vms-alpha.c:6078
msgid " GBL"
msgstr " GBL"
-#: vms-alpha.c:6083
+#: vms-alpha.c:6080
msgid " SHR"
msgstr " SHR"
-#: vms-alpha.c:6085
+#: vms-alpha.c:6082
msgid " EXE"
msgstr " EXE"
-#: vms-alpha.c:6087
+#: vms-alpha.c:6084
msgid " RD"
msgstr " RD"
-#: vms-alpha.c:6089
+#: vms-alpha.c:6086
msgid " WRT"
msgstr " WRT"
-#: vms-alpha.c:6091
+#: vms-alpha.c:6088
msgid " VEC"
msgstr " VEC"
-#: vms-alpha.c:6093
+#: vms-alpha.c:6090
msgid " NOMOD"
msgstr " NOMOD"
-#: vms-alpha.c:6095
+#: vms-alpha.c:6092
msgid " COM"
msgstr " COM"
-#: vms-alpha.c:6097
+#: vms-alpha.c:6094
msgid " 64B"
msgstr " 64B"
-#: vms-alpha.c:6106
+#: vms-alpha.c:6103
#, c-format
msgid " EGSD (len=%u):\n"
msgstr " EGSD (дужина=%u):\n"
-#: vms-alpha.c:6119
+#: vms-alpha.c:6118
#, c-format
msgid " EGSD entry %2u (type: %u, len: %u): "
-msgstr " „EGSD“ ÑƒÐ½Ð¾Ñ â€ž%2u“ (врÑтаype: %u, дужина: %u): "
+msgstr " „EGSD“ ÑƒÐ½Ð¾Ñ â€ž%2u“ (врÑта: %u, дужина: %u): "
-#: vms-alpha.c:6125 vms-alpha.c:6376
+#: vms-alpha.c:6124 vms-alpha.c:6419
#, c-format
-msgid " Error: length larger than remaining space in record\n"
-msgstr " Грешка: дужина је већа од преоÑталог проÑтора у Ñнимку\n"
+msgid " Erroneous length\n"
+msgstr " Погрешна дужина\n"
#: vms-alpha.c:6137
#, c-format
msgid "PSC - Program section definition\n"
msgstr "PSC — Дефиниција одељка програма\n"
-#: vms-alpha.c:6138 vms-alpha.c:6155
+#: vms-alpha.c:6138 vms-alpha.c:6158
#, c-format
msgid " alignment : 2**%u\n"
msgstr " поравнање : 2**%u\n"
-#: vms-alpha.c:6139 vms-alpha.c:6156
+#: vms-alpha.c:6139 vms-alpha.c:6159
#, c-format
msgid " flags : 0x%04x"
msgstr " заÑтавице : 0x%04x"
@@ -6663,1110 +6748,1110 @@ msgstr " заÑтавице : 0x%04x"
msgid " alloc (len): %u (0x%08x)\n"
msgstr " додела (дужина): %u (0x%08x)\n"
-#: vms-alpha.c:6144 vms-alpha.c:6201 vms-alpha.c:6250
+#: vms-alpha.c:6145 vms-alpha.c:6211 vms-alpha.c:6279
#, c-format
msgid " name : %.*s\n"
msgstr " назив : %.*s\n"
-#: vms-alpha.c:6154
+#: vms-alpha.c:6157
#, c-format
msgid "SPSC - Shared Image Program section def\n"
msgstr "SPSC — Дефиниција одељка програма дељене Ñлике\n"
-#: vms-alpha.c:6160
+#: vms-alpha.c:6163
#, c-format
msgid " alloc (len) : %u (0x%08x)\n"
msgstr " додела (дужина) : %u (0x%08x)\n"
-#: vms-alpha.c:6161
+#: vms-alpha.c:6164
#, c-format
msgid " image offset : 0x%08x\n"
msgstr " померај Ñлике: 0x%08x\n"
-#: vms-alpha.c:6163
+#: vms-alpha.c:6166
#, c-format
msgid " symvec offset : 0x%08x\n"
msgstr " померај Ñимвек-а : 0x%08x\n"
-#: vms-alpha.c:6165
+#: vms-alpha.c:6169
#, c-format
msgid " name : %.*s\n"
msgstr " назив : %.*s\n"
-#: vms-alpha.c:6178
+#: vms-alpha.c:6185
#, c-format
msgid "SYM - Global symbol definition\n"
msgstr "SYM — Дефиниција општег Ñимбола\n"
-#: vms-alpha.c:6179 vms-alpha.c:6239 vms-alpha.c:6260 vms-alpha.c:6279
+#: vms-alpha.c:6186 vms-alpha.c:6267 vms-alpha.c:6291 vms-alpha.c:6314
#, c-format
msgid " flags: 0x%04x"
msgstr " заÑтавице : 0x%04x"
-#: vms-alpha.c:6182
+#: vms-alpha.c:6189
#, c-format
msgid " psect offset: 0x%08x\n"
msgstr " померај п-одељка: 0x%08x\n"
-#: vms-alpha.c:6186
+#: vms-alpha.c:6193
#, c-format
msgid " code address: 0x%08x\n"
msgstr " адреÑа кода: 0x%08x\n"
-#: vms-alpha.c:6188
+#: vms-alpha.c:6195
#, c-format
msgid " psect index for entry point : %u\n"
msgstr " Ð¸Ð½Ð´ÐµÐºÑ Ð¿-одељка за тачку уноÑа: %u\n"
-#: vms-alpha.c:6191 vms-alpha.c:6267 vms-alpha.c:6286
+#: vms-alpha.c:6198 vms-alpha.c:6298 vms-alpha.c:6321
#, c-format
msgid " psect index : %u\n"
msgstr " Ð¸Ð½Ð´ÐµÐºÑ Ð¿-одељка : %u\n"
-#: vms-alpha.c:6193 vms-alpha.c:6269 vms-alpha.c:6288
+#: vms-alpha.c:6201 vms-alpha.c:6301 vms-alpha.c:6324
#, c-format
msgid " name : %.*s\n"
msgstr " назив : %.*s\n"
-#: vms-alpha.c:6200
+#: vms-alpha.c:6209
#, c-format
msgid "SYM - Global symbol reference\n"
msgstr "SYM — Упута општег Ñимбола\n"
-#: vms-alpha.c:6212
+#: vms-alpha.c:6224
#, c-format
msgid "IDC - Ident Consistency check\n"
msgstr "IDC — Провера доÑледноÑти увлачења\n"
-#: vms-alpha.c:6213
+#: vms-alpha.c:6225
#, c-format
msgid " flags : 0x%08x"
msgstr " заÑтавице : 0x%08x"
-#: vms-alpha.c:6217
+#: vms-alpha.c:6229
#, c-format
msgid " id match : %x\n"
msgstr " подударање ид-а : %x\n"
-#: vms-alpha.c:6219
+#: vms-alpha.c:6231
#, c-format
msgid " error severity: %x\n"
msgstr " озбиљноÑÑ‚ грешке: %x\n"
-#: vms-alpha.c:6222
+#: vms-alpha.c:6235
#, c-format
msgid " entity name : %.*s\n"
msgstr " назив ентитета : %.*s\n"
-#: vms-alpha.c:6224
+#: vms-alpha.c:6241
#, c-format
msgid " object name : %.*s\n"
msgstr " назив објекта : %.*s\n"
-#: vms-alpha.c:6227
+#: vms-alpha.c:6250
#, c-format
msgid " binary ident : 0x%08x\n"
msgstr " увлачење бинарног : 0x%08x\n"
-#: vms-alpha.c:6230
+#: vms-alpha.c:6254
#, c-format
msgid " ascii ident : %.*s\n"
msgstr " аÑкри увлачење : %.*s\n"
-#: vms-alpha.c:6238
+#: vms-alpha.c:6266
#, c-format
msgid "SYMG - Universal symbol definition\n"
msgstr "SYMG — Дефиниција универзалног Ñимбола\n"
-#: vms-alpha.c:6242
+#: vms-alpha.c:6270
#, c-format
msgid " symbol vector offset: 0x%08x\n"
msgstr " померај вектора Ñимбола: 0x%08x\n"
-#: vms-alpha.c:6244
+#: vms-alpha.c:6272
#, c-format
msgid " entry point: 0x%08x\n"
msgstr " тачка уноÑа: 0x%08x\n"
-#: vms-alpha.c:6246
+#: vms-alpha.c:6274
#, c-format
msgid " proc descr : 0x%08x\n"
msgstr " опиÑник процеÑа : 0x%08x\n"
-#: vms-alpha.c:6248
+#: vms-alpha.c:6276
#, c-format
msgid " psect index: %u\n"
msgstr " Ð¸Ð½Ð´ÐµÐºÑ Ð¿-одељка: %u\n"
-#: vms-alpha.c:6259
+#: vms-alpha.c:6290
#, c-format
msgid "SYMV - Vectored symbol definition\n"
msgstr "SYMV — Дефиниција векториÑаног Ñимбола\n"
-#: vms-alpha.c:6263
+#: vms-alpha.c:6294
#, c-format
msgid " vector : 0x%08x\n"
msgstr " вектор : 0x%08x\n"
-#: vms-alpha.c:6265 vms-alpha.c:6284
+#: vms-alpha.c:6296 vms-alpha.c:6319
#, c-format
msgid " psect offset: %u\n"
msgstr " померај п-одељка: %u\n"
-#: vms-alpha.c:6278
+#: vms-alpha.c:6313
#, c-format
msgid "SYMM - Global symbol definition with version\n"
msgstr "SYMM — Општа дефиниција Ñимбола Ñа верзијом\n"
-#: vms-alpha.c:6282
+#: vms-alpha.c:6317
#, c-format
msgid " version mask: 0x%08x\n"
msgstr " маÑка верзије: 0x%08x\n"
-#: vms-alpha.c:6293
+#: vms-alpha.c:6330
#, c-format
msgid "unhandled egsd entry type %u\n"
msgstr "необрадив „egsd“ ÑƒÐ½Ð¾Ñ Ð²Ñ€Ñте %u\n"
-#: vms-alpha.c:6328
+#: vms-alpha.c:6369
#, c-format
msgid " linkage index: %u, replacement insn: 0x%08x\n"
msgstr " Ð¸Ð½Ð´ÐµÐºÑ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°ÑšÐ°: %u, инÑтрукција премештања: 0x%08x\n"
-#: vms-alpha.c:6332
+#: vms-alpha.c:6373
#, c-format
msgid " psect idx 1: %u, offset 1: 0x%08x %08x\n"
msgstr " Ð¸Ð½Ð´ÐµÐºÑ Ð¿-одељка 1: %u, померај 1: 0x%08x %08x\n"
-#: vms-alpha.c:6337
+#: vms-alpha.c:6378
#, c-format
msgid " psect idx 2: %u, offset 2: 0x%08x %08x\n"
msgstr " Ð¸Ð½Ð´ÐµÐºÑ Ð¿-одељка 2: %u, померај 2: 0x%08x %08x\n"
-#: vms-alpha.c:6343
+#: vms-alpha.c:6384
#, c-format
msgid " psect idx 3: %u, offset 3: 0x%08x %08x\n"
msgstr " Ð¸Ð½Ð´ÐµÐºÑ Ð¿-одељка 3: %u, померај 3: 0x%08x %08x\n"
-#: vms-alpha.c:6348
+#: vms-alpha.c:6389
#, c-format
msgid " global name: %.*s\n"
msgstr " општи назив: %.*s\n"
-#: vms-alpha.c:6359
+#: vms-alpha.c:6401
#, c-format
-msgid " %s (len=%u+%u):\n"
-msgstr " %s (дужина=%u+%u):\n"
+msgid " %s (len=%u):\n"
+msgstr " %s (дужина=%u):\n"
-#: vms-alpha.c:6381
+#: vms-alpha.c:6424
#, c-format
-msgid " (type: %3u, size: 4+%3u): "
-msgstr " (врÑта: %3u, величина: 4+%3u): "
+msgid " (type: %3u, size: %3u): "
+msgstr " (врÑта: %3u, величина: %3u): "
-#: vms-alpha.c:6385
+#: vms-alpha.c:6430
#, c-format
msgid "STA_GBL (stack global) %.*s\n"
msgstr "STA_GBL (општоÑÑ‚ Ñпремника) %.*s\n"
-#: vms-alpha.c:6389
+#: vms-alpha.c:6434
#, c-format
-msgid "STA_LW (stack longword) 0x%08x\n"
-msgstr "STA_LW (дуга реч Ñпремника) 0x%08x\n"
+msgid "STA_LW (stack longword)"
+msgstr "STA_LW (дуга реч Ñпремника)"
-#: vms-alpha.c:6393
+#: vms-alpha.c:6440
#, c-format
-msgid "STA_QW (stack quadword) 0x%08x %08x\n"
-msgstr "STA_QW (четворореч Ñпремника) 0x%08x %08x\n"
+msgid "STA_QW (stack quadword)"
+msgstr "STA_QW (четвороÑтрука реч Ñпремника)"
-#: vms-alpha.c:6398
+#: vms-alpha.c:6447
#, c-format
msgid "STA_PQ (stack psect base + offset)\n"
msgstr "STA_PQ (оÑнова п-одељка Ñпремника + померај)\n"
-#: vms-alpha.c:6400
+#: vms-alpha.c:6450
#, c-format
msgid " psect: %u, offset: 0x%08x %08x\n"
msgstr " п-одељак: %u, померај: 0x%08x %08x\n"
-#: vms-alpha.c:6406
+#: vms-alpha.c:6456
#, c-format
msgid "STA_LI (stack literal)\n"
msgstr "STA_LI (доÑловноÑÑ‚ Ñпремника)\n"
-#: vms-alpha.c:6409
+#: vms-alpha.c:6459
#, c-format
msgid "STA_MOD (stack module)\n"
msgstr "STA_MOD (модул Ñпремника)\n"
-#: vms-alpha.c:6412
+#: vms-alpha.c:6462
#, c-format
msgid "STA_CKARG (compare procedure argument)\n"
msgstr "STA_CKARG (аргумент поÑтупка поређења)\n"
-#: vms-alpha.c:6416
+#: vms-alpha.c:6466
#, c-format
msgid "STO_B (store byte)\n"
msgstr "STO_B (Ñмешта бајт)\n"
-#: vms-alpha.c:6419
+#: vms-alpha.c:6469
#, c-format
msgid "STO_W (store word)\n"
msgstr "STO_W (Ñмешта реч)\n"
-#: vms-alpha.c:6422
+#: vms-alpha.c:6472
#, c-format
msgid "STO_LW (store longword)\n"
msgstr "STO_LW (Ñмешта дугу реч)\n"
-#: vms-alpha.c:6425
+#: vms-alpha.c:6475
#, c-format
msgid "STO_QW (store quadword)\n"
msgstr "STO_QW (Ñмешта четворореч)\n"
-#: vms-alpha.c:6431
+#: vms-alpha.c:6482
#, c-format
msgid "STO_IMMR (store immediate repeat) %u bytes\n"
msgstr "STO_IMMR (Ñмешта моментално понављање) %u бајта\n"
-#: vms-alpha.c:6438
+#: vms-alpha.c:6491
#, c-format
msgid "STO_GBL (store global) %.*s\n"
msgstr "STO_GBL (Ñмешта опште) %.*s\n"
-#: vms-alpha.c:6442
+#: vms-alpha.c:6496
#, c-format
msgid "STO_CA (store code address) %.*s\n"
msgstr "STO_CA (Ñмешта адреÑу кода) %.*s\n"
-#: vms-alpha.c:6446
+#: vms-alpha.c:6500
#, c-format
msgid "STO_RB (store relative branch)\n"
msgstr "STO_RB (Ñмешта релативну грану)\n"
-#: vms-alpha.c:6449
+#: vms-alpha.c:6503
#, c-format
msgid "STO_AB (store absolute branch)\n"
msgstr "STO_AB (Ñмешта апÑолутну грану)\n"
-#: vms-alpha.c:6452
+#: vms-alpha.c:6506
#, c-format
msgid "STO_OFF (store offset to psect)\n"
msgstr "STO_OFF (Ñмешта померај у п-одељак)\n"
-#: vms-alpha.c:6458
+#: vms-alpha.c:6513
#, c-format
msgid "STO_IMM (store immediate) %u bytes\n"
msgstr "STO_IMM (Ñмешта моментално) %u бајта\n"
-#: vms-alpha.c:6465
+#: vms-alpha.c:6522
#, c-format
msgid "STO_GBL_LW (store global longword) %.*s\n"
msgstr "STO_GBL_LW (Ñмешта општу дугу реч) %.*s\n"
-#: vms-alpha.c:6469
+#: vms-alpha.c:6526
#, c-format
msgid "STO_OFF (store LP with procedure signature)\n"
msgstr "STO_OFF (Ñмешта ЛП Ñа потпиÑом поÑтупка)\n"
-#: vms-alpha.c:6472
+#: vms-alpha.c:6529
#, c-format
msgid "STO_BR_GBL (store branch global) *todo*\n"
msgstr "STO_BR_GBL (Ñмешта општоÑÑ‚ гране) *урадити*\n"
-#: vms-alpha.c:6475
+#: vms-alpha.c:6532
#, c-format
msgid "STO_BR_PS (store branch psect + offset) *todo*\n"
msgstr "STO_BR_PS (Ñмешта п-одељак + померај гране) *урадити*\n"
-#: vms-alpha.c:6479
+#: vms-alpha.c:6536
#, c-format
msgid "OPR_NOP (no-operation)\n"
msgstr "OPR_NOP (без радње)\n"
-#: vms-alpha.c:6482
+#: vms-alpha.c:6539
#, c-format
msgid "OPR_ADD (add)\n"
msgstr "OPR_ADD (збраја)\n"
-#: vms-alpha.c:6485
+#: vms-alpha.c:6542
#, c-format
msgid "OPR_SUB (subtract)\n"
msgstr "OPR_SUB (одузима)\n"
-#: vms-alpha.c:6488
+#: vms-alpha.c:6545
#, c-format
msgid "OPR_MUL (multiply)\n"
msgstr "OPR_MUL (множи)\n"
-#: vms-alpha.c:6491
+#: vms-alpha.c:6548
#, c-format
msgid "OPR_DIV (divide)\n"
msgstr "OPR_DIV (дели)\n"
-#: vms-alpha.c:6494
+#: vms-alpha.c:6551
#, c-format
msgid "OPR_AND (logical and)\n"
msgstr "OPR_AND (логичко И)\n"
-#: vms-alpha.c:6497
+#: vms-alpha.c:6554
#, c-format
msgid "OPR_IOR (logical inclusive or)\n"
msgstr "OPR_IOR (логичко укључиво ИЛИ)\n"
-#: vms-alpha.c:6500
+#: vms-alpha.c:6557
#, c-format
msgid "OPR_EOR (logical exclusive or)\n"
msgstr "OPR_EOR (логичко иÑкључиво ИЛИ)\n"
-#: vms-alpha.c:6503
+#: vms-alpha.c:6560
#, c-format
msgid "OPR_NEG (negate)\n"
msgstr "OPR_NEG (негација)\n"
-#: vms-alpha.c:6506
+#: vms-alpha.c:6563
#, c-format
msgid "OPR_COM (complement)\n"
msgstr "OPR_COM (комплемент)\n"
-#: vms-alpha.c:6509
+#: vms-alpha.c:6566
#, c-format
msgid "OPR_INSV (insert field)\n"
msgstr "OPR_INSV (умеће поље)\n"
-#: vms-alpha.c:6512
+#: vms-alpha.c:6569
#, c-format
msgid "OPR_ASH (arithmetic shift)\n"
msgstr "OPR_ASH (аритметички помак)\n"
-#: vms-alpha.c:6515
+#: vms-alpha.c:6572
#, c-format
msgid "OPR_USH (unsigned shift)\n"
msgstr "OPR_USH (помак без знака)\n"
-#: vms-alpha.c:6518
+#: vms-alpha.c:6575
#, c-format
msgid "OPR_ROT (rotate)\n"
msgstr "OPR_ROT (окреће)\n"
-#: vms-alpha.c:6521
+#: vms-alpha.c:6578
#, c-format
msgid "OPR_SEL (select)\n"
msgstr "OPR_SEL (бира)\n"
-#: vms-alpha.c:6524
+#: vms-alpha.c:6581
#, c-format
msgid "OPR_REDEF (redefine symbol to curr location)\n"
msgstr "OPR_REDEF (поново дефинише Ñимбол текуће локације)\n"
-#: vms-alpha.c:6527
+#: vms-alpha.c:6584
#, c-format
msgid "OPR_REDEF (define a literal)\n"
msgstr "OPR_REDEF (дефинише доÑловноÑÑ‚)\n"
-#: vms-alpha.c:6531
+#: vms-alpha.c:6588
#, c-format
msgid "STC_LP (store cond linkage pair)\n"
msgstr "STC_LP (Ñмешта пар повезивања уÑлова)\n"
-#: vms-alpha.c:6535
+#: vms-alpha.c:6592
#, c-format
msgid "STC_LP_PSB (store cond linkage pair + signature)\n"
msgstr "STC_LP_PSB (Ñмешта пар повезивања уÑлова + потпиÑ)\n"
-#: vms-alpha.c:6537
+#: vms-alpha.c:6596
#, c-format
msgid " linkage index: %u, procedure: %.*s\n"
msgstr " Ð¸Ð½Ð´ÐµÐºÑ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°ÑšÐ°: %u, поÑтупак: %.*s\n"
-#: vms-alpha.c:6540
+#: vms-alpha.c:6603
#, c-format
msgid " signature: %.*s\n"
msgstr " потпиÑ: %.*s\n"
-#: vms-alpha.c:6543
+#: vms-alpha.c:6609
#, c-format
msgid "STC_GBL (store cond global)\n"
msgstr "STC_GBL (Ñмешта општоÑÑ‚ уÑлова)\n"
-#: vms-alpha.c:6545
+#: vms-alpha.c:6612
#, c-format
msgid " linkage index: %u, global: %.*s\n"
msgstr " Ð¸Ð½Ð´ÐµÐºÑ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°ÑšÐ°: %u, опште: %.*s\n"
-#: vms-alpha.c:6549
+#: vms-alpha.c:6617
#, c-format
msgid "STC_GCA (store cond code address)\n"
msgstr "STC_GCA (Ñмешта адреÑу кода уÑлова)\n"
-#: vms-alpha.c:6551
+#: vms-alpha.c:6620
#, c-format
msgid " linkage index: %u, procedure name: %.*s\n"
msgstr " Ð¸Ð½Ð´ÐµÐºÑ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°ÑšÐ°: %u, назив поÑтупка: %.*s\n"
-#: vms-alpha.c:6555
+#: vms-alpha.c:6625
#, c-format
msgid "STC_PS (store cond psect + offset)\n"
msgstr "STC_PS (Ñмешта п-одељак + померај уÑлова)\n"
-#: vms-alpha.c:6558
+#: vms-alpha.c:6629
#, c-format
msgid " linkage index: %u, psect: %u, offset: 0x%08x %08x\n"
msgstr " Ð¸Ð½Ð´ÐµÐºÑ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°ÑšÐ°: %u, п-одељак: %u, померај: 0x%08x %08x\n"
-#: vms-alpha.c:6565
+#: vms-alpha.c:6636
#, c-format
msgid "STC_NOP_GBL (store cond NOP at global addr)\n"
msgstr "STC_NOP_GBL (Ñмешта „NOP“ уÑлова на општој адреÑи)\n"
-#: vms-alpha.c:6569
+#: vms-alpha.c:6640
#, c-format
msgid "STC_NOP_PS (store cond NOP at psect + offset)\n"
msgstr "STC_NOP_PS (Ñмешта „NOP“ уÑлова на п-одељку + померај)\n"
-#: vms-alpha.c:6573
+#: vms-alpha.c:6644
#, c-format
msgid "STC_BSR_GBL (store cond BSR at global addr)\n"
msgstr "STC_BSR_GBL (Ñмешта „BSR“ уÑлова на општој адреÑи)\n"
-#: vms-alpha.c:6577
+#: vms-alpha.c:6648
#, c-format
msgid "STC_BSR_PS (store cond BSR at psect + offset)\n"
msgstr "STC_BSR_PS (Ñмешта „BSR“ уÑлова на п-одељку + померај)\n"
-#: vms-alpha.c:6581
+#: vms-alpha.c:6652
#, c-format
msgid "STC_LDA_GBL (store cond LDA at global addr)\n"
msgstr "STC_LDA_GBL (Ñмешта „LDA“ уÑлова на општој адреÑи)\n"
-#: vms-alpha.c:6585
+#: vms-alpha.c:6656
#, c-format
msgid "STC_LDA_PS (store cond LDA at psect + offset)\n"
msgstr "STC_LDA_PS (Ñмешта „LDA“ уÑлова на п-одељку + померај)\n"
-#: vms-alpha.c:6589
+#: vms-alpha.c:6660
#, c-format
msgid "STC_BOH_GBL (store cond BOH at global addr)\n"
msgstr "STC_BOH_GBL (Ñмешта „BOH“ уÑлова на општој адреÑи)\n"
-#: vms-alpha.c:6593
+#: vms-alpha.c:6664
#, c-format
msgid "STC_BOH_PS (store cond BOH at psect + offset)\n"
msgstr "STC_BOH_PS (Ñмешта „BOH“ уÑлова на п-одељку + померај)\n"
-#: vms-alpha.c:6598
+#: vms-alpha.c:6669
#, c-format
msgid "STC_NBH_GBL (store cond or hint at global addr)\n"
msgstr "STC_NBH_GBL (Ñмешта уÑлов или најаву на општој адреÑи)\n"
-#: vms-alpha.c:6602
+#: vms-alpha.c:6673
#, c-format
msgid "STC_NBH_PS (store cond or hint at psect + offset)\n"
msgstr "STC_NBH_PS (Ñмешта уÑлов или најаву на п-одељку + померај)\n"
-#: vms-alpha.c:6606
+#: vms-alpha.c:6677
#, c-format
msgid "CTL_SETRB (set relocation base)\n"
msgstr "CTL_SETRB (поÑтавља оÑнову премештања)\n"
-#: vms-alpha.c:6612
+#: vms-alpha.c:6683
#, c-format
msgid "CTL_AUGRB (augment relocation base) %u\n"
msgstr "CTL_AUGRB (повећава оÑнову премештања) %u\n"
-#: vms-alpha.c:6616
+#: vms-alpha.c:6688
#, c-format
msgid "CTL_DFLOC (define location)\n"
msgstr "CTL_DFLOC (дефинише меÑто)\n"
-#: vms-alpha.c:6619
+#: vms-alpha.c:6691
#, c-format
msgid "CTL_STLOC (set location)\n"
msgstr "CTL_STLOC (поÑтавља меÑто)\n"
-#: vms-alpha.c:6622
+#: vms-alpha.c:6694
#, c-format
msgid "CTL_STKDL (stack defined location)\n"
msgstr "CTL_STKDL (Ñпремником дефиниÑано меÑто)\n"
-#: vms-alpha.c:6625 vms-alpha.c:7049 vms-alpha.c:7175
+#: vms-alpha.c:6697 vms-alpha.c:7140 vms-alpha.c:7301
#, c-format
msgid "*unhandled*\n"
msgstr "*необрадиво*\n"
-#: vms-alpha.c:6655 vms-alpha.c:6694
+#: vms-alpha.c:6727 vms-alpha.c:6766
#, c-format
msgid "cannot read GST record length\n"
msgstr "не могу да читам дужину „GST“ запиÑа\n"
#. Ill-formed.
-#: vms-alpha.c:6676
+#: vms-alpha.c:6748
#, c-format
msgid "cannot find EMH in first GST record\n"
msgstr "не могу да нађем „EMH“ у првом „GST“ запиÑу\n"
-#: vms-alpha.c:6702
+#: vms-alpha.c:6774
#, c-format
msgid "cannot read GST record header\n"
msgstr "не могу да прочитам заглавље „GST“ запиÑа\n"
-#: vms-alpha.c:6715
+#: vms-alpha.c:6787
#, c-format
msgid " corrupted GST\n"
msgstr " оштећено „GST“\n"
-#: vms-alpha.c:6723
+#: vms-alpha.c:6795
#, c-format
msgid "cannot read GST record\n"
msgstr "не могу да читам „GST“ запиÑ\n"
-#: vms-alpha.c:6752
+#: vms-alpha.c:6824
#, c-format
msgid " unhandled EOBJ record type %u\n"
msgstr " необрадив „EOBJ“ ÑƒÐ½Ð¾Ñ Ð²Ñ€Ñте %u\n"
-#: vms-alpha.c:6776
+#: vms-alpha.c:6849
#, c-format
msgid " bitcount: %u, base addr: 0x%08x\n"
msgstr " број бита: %u, оÑновна адреÑа: 0x%08x\n"
-#: vms-alpha.c:6790
+#: vms-alpha.c:6863
#, c-format
msgid " bitmap: 0x%08x (count: %u):\n"
msgstr " мапа бита: 0x%08x (укупно: %u):\n"
-#: vms-alpha.c:6797
+#: vms-alpha.c:6870
#, c-format
msgid " %08x"
msgstr " %08x"
-#: vms-alpha.c:6823
+#: vms-alpha.c:6897
#, c-format
msgid " image %u (%u entries)\n"
msgstr " Ñлика %u (%u уноÑа)\n"
-#: vms-alpha.c:6829
+#: vms-alpha.c:6903
#, c-format
msgid " offset: 0x%08x, val: 0x%08x\n"
msgstr " померај: 0x%08x, вредноÑÑ‚: 0x%08x\n"
-#: vms-alpha.c:6851
+#: vms-alpha.c:6926
#, c-format
msgid " image %u (%u entries), offsets:\n"
msgstr " Ñлика %u (%u уноÑа), померај:\n"
-#: vms-alpha.c:6858
+#: vms-alpha.c:6933
#, c-format
msgid " 0x%08x"
msgstr " 0x%08x"
#. 64 bits.
-#: vms-alpha.c:6980
+#: vms-alpha.c:7059
#, c-format
msgid "64 bits *unhandled*\n"
msgstr "64 бита *није подржано*\n"
-#: vms-alpha.c:6985
+#: vms-alpha.c:7064
#, c-format
msgid "class: %u, dtype: %u, length: %u, pointer: 0x%08x\n"
msgstr "клаÑа: %u, д-врÑта: %u, дужина: %u, показивач: 0x%08x\n"
-#: vms-alpha.c:6996
+#: vms-alpha.c:7075
#, c-format
msgid "non-contiguous array of %s\n"
msgstr "низ „%s“ није непрекидан\n"
-#: vms-alpha.c:7001
+#: vms-alpha.c:7082
#, c-format
msgid "dimct: %u, aflags: 0x%02x, digits: %u, scale: %u\n"
msgstr "димцт: %u, а-заÑтавице: 0x%02x, цифре: %u, размера: %u\n"
-#: vms-alpha.c:7006
+#: vms-alpha.c:7087
#, c-format
msgid "arsize: %u, a0: 0x%08x\n"
msgstr "ар-величина: %u, a0: 0x%08x\n"
-#: vms-alpha.c:7010
+#: vms-alpha.c:7091
#, c-format
msgid "Strides:\n"
msgstr "Кораци:\n"
-#: vms-alpha.c:7020
+#: vms-alpha.c:7105
#, c-format
msgid "Bounds:\n"
msgstr "Границе:\n"
-#: vms-alpha.c:7026
+#: vms-alpha.c:7112
#, c-format
msgid "[%u]: Lower: %u, upper: %u\n"
msgstr "[%u]: Доња: %u, горња: %u\n"
-#: vms-alpha.c:7038
+#: vms-alpha.c:7126
#, c-format
msgid "unaligned bit-string of %s\n"
msgstr "ниÑка бита „%s“ није поравната\n"
-#: vms-alpha.c:7043
+#: vms-alpha.c:7133
#, c-format
msgid "base: %u, pos: %u\n"
msgstr "оÑнова: %u, положај: %u\n"
-#: vms-alpha.c:7064
+#: vms-alpha.c:7159
#, c-format
msgid "vflags: 0x%02x, value: 0x%08x "
msgstr "в-заÑтавице: 0x%02x, вредноÑÑ‚: 0x%08x "
-#: vms-alpha.c:7070
+#: vms-alpha.c:7166
#, c-format
msgid "(no value)\n"
msgstr "(без вредноÑти)\n"
-#: vms-alpha.c:7073
+#: vms-alpha.c:7169
#, c-format
msgid "(not active)\n"
msgstr "(није активно)\n"
-#: vms-alpha.c:7076
+#: vms-alpha.c:7172
#, c-format
msgid "(not allocated)\n"
msgstr "(није додељено)\n"
-#: vms-alpha.c:7079
+#: vms-alpha.c:7175
#, c-format
msgid "(descriptor)\n"
msgstr "(опиÑник)\n"
-#: vms-alpha.c:7083
+#: vms-alpha.c:7180
#, c-format
msgid "(trailing value)\n"
msgstr "(пратећа вредноÑÑ‚)\n"
-#: vms-alpha.c:7086
+#: vms-alpha.c:7183
#, c-format
msgid "(value spec follows)\n"
msgstr "(Ñпецификација Ñледеће вредноÑти)\n"
-#: vms-alpha.c:7089
+#: vms-alpha.c:7186
#, c-format
msgid "(at bit offset %u)\n"
msgstr "(померај бита %u)\n"
-#: vms-alpha.c:7093
+#: vms-alpha.c:7190
#, c-format
msgid "(reg: %u, disp: %u, indir: %u, kind: "
msgstr "(региÑтар: %u, размештај: %u, индиректно: %u, врÑта: "
-#: vms-alpha.c:7100
+#: vms-alpha.c:7197
msgid "literal"
msgstr "доÑловноÑÑ‚"
-#: vms-alpha.c:7103
+#: vms-alpha.c:7200
msgid "address"
msgstr "адреÑа"
-#: vms-alpha.c:7106
+#: vms-alpha.c:7203
msgid "desc"
msgstr "опиÑ"
-#: vms-alpha.c:7109
+#: vms-alpha.c:7206
msgid "reg"
msgstr "рег"
-#: vms-alpha.c:7126
+#: vms-alpha.c:7227
#, c-format
msgid "len: %2u, kind: %2u "
msgstr "дужина: %2u, врÑта: %2u "
-#: vms-alpha.c:7132
+#: vms-alpha.c:7235
#, c-format
msgid "atomic, type=0x%02x %s\n"
msgstr "атомÑки, врÑта=0x%02x %s\n"
-#: vms-alpha.c:7136
+#: vms-alpha.c:7240
#, c-format
msgid "indirect, defined at 0x%08x\n"
msgstr "непоÑредно, одређено на 0x%08x\n"
-#: vms-alpha.c:7140
+#: vms-alpha.c:7244
#, c-format
msgid "typed pointer\n"
msgstr "укуцани показивач\n"
-#: vms-alpha.c:7144
+#: vms-alpha.c:7248
#, c-format
msgid "pointer\n"
msgstr "показивач\n"
-#: vms-alpha.c:7152
+#: vms-alpha.c:7259
#, c-format
msgid "array, dim: %u, bitmap: "
msgstr "низ, величина: %u, битмапа: "
-#: vms-alpha.c:7159
+#: vms-alpha.c:7274
#, c-format
msgid "array descriptor:\n"
msgstr "опиÑник низа:\n"
-#: vms-alpha.c:7166
+#: vms-alpha.c:7285
#, c-format
msgid "type spec for element:\n"
msgstr "одредба врÑте за елемент:\n"
-#: vms-alpha.c:7168
+#: vms-alpha.c:7287
#, c-format
msgid "type spec for subscript %u:\n"
msgstr "одредба врÑте за подÑкрипту „%u“:\n"
-#: vms-alpha.c:7186
+#: vms-alpha.c:7312
#, c-format
msgid "Debug symbol table:\n"
msgstr "Табела Ñимбола прочишћавања:\n"
-#: vms-alpha.c:7197
+#: vms-alpha.c:7323
#, c-format
msgid "cannot read DST header\n"
msgstr "не могу да читам „GST“ заглавље\n"
-#: vms-alpha.c:7203
+#: vms-alpha.c:7329
#, c-format
msgid " type: %3u, len: %3u (at 0x%08x): "
msgstr " врÑта: %3u, дужина: %3u (при 0x%08x): "
-#: vms-alpha.c:7217
+#: vms-alpha.c:7346
#, c-format
msgid "cannot read DST symbol\n"
msgstr "не могу да читам „DST“ Ñимбол\n"
-#: vms-alpha.c:7260
+#: vms-alpha.c:7390
#, c-format
msgid "standard data: %s\n"
msgstr "Ñтандардни подаци: %s\n"
-#: vms-alpha.c:7263 vms-alpha.c:7351
+#: vms-alpha.c:7393 vms-alpha.c:7516
#, c-format
msgid " name: %.*s\n"
msgstr " назив: %.*s\n"
-#: vms-alpha.c:7270
+#: vms-alpha.c:7400
#, c-format
msgid "modbeg\n"
msgstr "почетак модула\n"
-#: vms-alpha.c:7272
+#: vms-alpha.c:7404
#, c-format
msgid " flags: %d, language: %u, major: %u, minor: %u\n"
msgstr " заÑтавице: %d, језик: %u, већи: %u, мањи: %u\n"
-#: vms-alpha.c:7278 vms-alpha.c:7552
+#: vms-alpha.c:7414 vms-alpha.c:7780
#, c-format
msgid " module name: %.*s\n"
msgstr " назив модула : %.*s\n"
-#: vms-alpha.c:7281
+#: vms-alpha.c:7421
#, c-format
msgid " compiler : %.*s\n"
msgstr " преводилац : %.*s\n"
-#: vms-alpha.c:7286
+#: vms-alpha.c:7428
#, c-format
msgid "modend\n"
msgstr "крај модула\n"
-#: vms-alpha.c:7293
+#: vms-alpha.c:7435
msgid "rtnbeg\n"
msgstr "почетак рутине\n"
-#: vms-alpha.c:7295
+#: vms-alpha.c:7439
#, c-format
msgid " flags: %u, address: 0x%08x, pd-address: 0x%08x\n"
msgstr " заÑтавице: %u, адреÑа: 0x%08x, пд-адреÑа: 0x%08x\n"
-#: vms-alpha.c:7300
+#: vms-alpha.c:7448
#, c-format
msgid " routine name: %.*s\n"
msgstr " назив рутине : %.*s\n"
-#: vms-alpha.c:7308
+#: vms-alpha.c:7459
#, c-format
msgid "rtnend: size 0x%08x\n"
msgstr "крај рутине: величина 0x%08x\n"
-#: vms-alpha.c:7316
+#: vms-alpha.c:7469
#, c-format
msgid "prolog: bkpt address 0x%08x\n"
msgstr "пролог: бкпт адреÑа 0x%08x\n"
-#: vms-alpha.c:7325
+#: vms-alpha.c:7479
#, c-format
msgid "epilog: flags: %u, count: %u\n"
msgstr "епилог: заÑтавице: %u, број: %u\n"
-#: vms-alpha.c:7335
+#: vms-alpha.c:7494
#, c-format
msgid "blkbeg: address: 0x%08x, name: %.*s\n"
msgstr "блк почетак: адреÑа: 0x%08x, назив: %.*s\n"
-#: vms-alpha.c:7344
+#: vms-alpha.c:7506
#, c-format
msgid "blkend: size: 0x%08x\n"
msgstr "блк крај: величина: 0x%08x\n"
-#: vms-alpha.c:7350
+#: vms-alpha.c:7512
#, c-format
msgid "typspec (len: %u)\n"
msgstr "одредба врÑте (дужина: %u)\n"
-#: vms-alpha.c:7357
+#: vms-alpha.c:7528
#, c-format
msgid "septyp, name: %.*s\n"
msgstr "врÑта поÑтавке, назив: %.*s\n"
-#: vms-alpha.c:7366
+#: vms-alpha.c:7544
#, c-format
msgid "recbeg: name: %.*s\n"
msgstr "почетак запиÑа: назив: %.*s\n"
-#: vms-alpha.c:7368
+#: vms-alpha.c:7548
#, c-format
msgid " len: %u bits\n"
msgstr " дужина: %u бита\n"
-#: vms-alpha.c:7373
+#: vms-alpha.c:7554
#, c-format
msgid "recend\n"
msgstr "крај запиÑа\n"
-#: vms-alpha.c:7377
+#: vms-alpha.c:7559
#, c-format
msgid "enumbeg, len: %u, name: %.*s\n"
msgstr "почетак бројања, дужина: %u, назив: %.*s\n"
-#: vms-alpha.c:7381
+#: vms-alpha.c:7565
#, c-format
msgid "enumelt, name: %.*s\n"
msgstr "елементи бројања, назив: %.*s\n"
-#: vms-alpha.c:7385
+#: vms-alpha.c:7571
#, c-format
msgid "enumend\n"
msgstr "крај бројања\n"
-#: vms-alpha.c:7390
+#: vms-alpha.c:7578
#, c-format
msgid "label, name: %.*s\n"
msgstr "натпиÑ, назив: %.*s\n"
-#: vms-alpha.c:7392
+#: vms-alpha.c:7581
#, c-format
msgid " address: 0x%08x\n"
msgstr " адреÑа: 0x%08x\n"
-#: vms-alpha.c:7402
+#: vms-alpha.c:7593
#, c-format
msgid "discontiguous range (nbr: %u)\n"
msgstr "непрекидни опÑег (бр.: %u)\n"
-#: vms-alpha.c:7405
+#: vms-alpha.c:7600
#, c-format
msgid " address: 0x%08x, size: %u\n"
msgstr " адреÑа: 0x%08x, величина: %u\n"
-#: vms-alpha.c:7415
+#: vms-alpha.c:7611
#, c-format
msgid "line num (len: %u)\n"
msgstr "број реда (дужина: %u)\n"
-#: vms-alpha.c:7432
+#: vms-alpha.c:7630
#, c-format
msgid "delta_pc_w %u\n"
msgstr "delta_pc_w %u\n"
-#: vms-alpha.c:7439
+#: vms-alpha.c:7639
#, c-format
msgid "incr_linum(b): +%u\n"
msgstr "incr_linum(b): +%u\n"
-#: vms-alpha.c:7445
+#: vms-alpha.c:7647
#, c-format
msgid "incr_linum_w: +%u\n"
msgstr "incr_linum_w: +%u\n"
-#: vms-alpha.c:7451
+#: vms-alpha.c:7655
#, c-format
msgid "incr_linum_l: +%u\n"
msgstr "incr_linum_l: +%u\n"
-#: vms-alpha.c:7457
+#: vms-alpha.c:7663
#, c-format
msgid "set_line_num(w) %u\n"
msgstr "set_line_num(w) %u\n"
-#: vms-alpha.c:7462
+#: vms-alpha.c:7670
#, c-format
msgid "set_line_num_b %u\n"
msgstr "set_line_num_b %u\n"
-#: vms-alpha.c:7467
+#: vms-alpha.c:7677
#, c-format
msgid "set_line_num_l %u\n"
msgstr "set_line_num_l %u\n"
-#: vms-alpha.c:7472
+#: vms-alpha.c:7684
#, c-format
msgid "set_abs_pc: 0x%08x\n"
msgstr "set_abs_pc: 0x%08x\n"
-#: vms-alpha.c:7476
+#: vms-alpha.c:7690
#, c-format
msgid "delta_pc_l: +0x%08x\n"
msgstr "delta_pc_l: +0x%08x\n"
-#: vms-alpha.c:7481
+#: vms-alpha.c:7697
#, c-format
msgid "term(b): 0x%02x"
msgstr "term(b): 0x%02x"
-#: vms-alpha.c:7483
+#: vms-alpha.c:7699
#, c-format
msgid " pc: 0x%08x\n"
msgstr " pc: 0x%08x\n"
-#: vms-alpha.c:7488
+#: vms-alpha.c:7706
#, c-format
msgid "term_w: 0x%04x"
msgstr "term_w: 0x%04x"
-#: vms-alpha.c:7490
+#: vms-alpha.c:7708
#, c-format
msgid " pc: 0x%08x\n"
msgstr " pc: 0x%08x\n"
-#: vms-alpha.c:7496
+#: vms-alpha.c:7714
#, c-format
msgid "delta pc +%-4d"
msgstr "delta pc +%-4d"
-#: vms-alpha.c:7500
+#: vms-alpha.c:7718
#, c-format
msgid " pc: 0x%08x line: %5u\n"
msgstr " pc: 0x%08x ред: %5u\n"
-#: vms-alpha.c:7505
+#: vms-alpha.c:7723
#, c-format
msgid " *unhandled* cmd %u\n"
msgstr " *необрадива* наредба „%u“\n"
-#: vms-alpha.c:7520
+#: vms-alpha.c:7738
#, c-format
msgid "source (len: %u)\n"
msgstr "извор (дужина: %u)\n"
-#: vms-alpha.c:7535
+#: vms-alpha.c:7757
#, c-format
msgid " declfile: len: %u, flags: %u, fileid: %u\n"
msgstr " declfile: дужина: %u, заÑтавице: %u, ид поља: %u\n"
-#: vms-alpha.c:7540
+#: vms-alpha.c:7762
#, 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:7549
+#: vms-alpha.c:7774
#, c-format
msgid " filename : %.*s\n"
msgstr " назив датотеке: %.*s\n"
-#: vms-alpha.c:7558
+#: vms-alpha.c:7790
#, c-format
msgid " setfile %u\n"
msgstr " setfile %u\n"
-#: vms-alpha.c:7563 vms-alpha.c:7568
+#: vms-alpha.c:7797 vms-alpha.c:7804
#, c-format
msgid " setrec %u\n"
msgstr " setrec %u\n"
-#: vms-alpha.c:7573 vms-alpha.c:7578
+#: vms-alpha.c:7811 vms-alpha.c:7818
#, c-format
msgid " setlnum %u\n"
msgstr " setlnum %u\n"
-#: vms-alpha.c:7583 vms-alpha.c:7588
+#: vms-alpha.c:7825 vms-alpha.c:7832
#, c-format
msgid " deflines %u\n"
msgstr " deflines %u\n"
-#: vms-alpha.c:7592
+#: vms-alpha.c:7836
#, c-format
msgid " formfeed\n"
msgstr " formfeed\n"
-#: vms-alpha.c:7596
+#: vms-alpha.c:7840
#, c-format
msgid " *unhandled* cmd %u\n"
msgstr " *необрадива* наредба „%u“\n"
-#: vms-alpha.c:7608
+#: vms-alpha.c:7852
#, c-format
msgid "*unhandled* dst type %u\n"
msgstr "*необрадива* дÑÑ‚ врÑта „%u“\n"
-#: vms-alpha.c:7640
+#: vms-alpha.c:7884
#, c-format
msgid "cannot read EIHD\n"
msgstr "не могу да читам „EIHD“\n"
-#: vms-alpha.c:7644
+#: vms-alpha.c:7888
#, c-format
msgid "EIHD: (size: %u, nbr blocks: %u)\n"
msgstr "EIHD: (величина: %u, број блокова: %u)\n"
-#: vms-alpha.c:7648
+#: vms-alpha.c:7892
#, c-format
msgid " majorid: %u, minorid: %u\n"
msgstr " већи ид: %u, мањи ид: %u\n"
-#: vms-alpha.c:7656
+#: vms-alpha.c:7900
msgid "executable"
msgstr "извршна"
-#: vms-alpha.c:7659
+#: vms-alpha.c:7903
msgid "linkable image"
msgstr "повезива Ñлика"
-#: vms-alpha.c:7666
+#: vms-alpha.c:7910
#, c-format
msgid " image type: %u (%s)"
msgstr " врÑта Ñлике: %u (%s)"
-#: vms-alpha.c:7672
+#: vms-alpha.c:7916
msgid "native"
msgstr "изворна"
-#: vms-alpha.c:7675
+#: vms-alpha.c:7919
msgid "CLI"
msgstr "CLI"
-#: vms-alpha.c:7682
+#: vms-alpha.c:7926
#, c-format
msgid ", subtype: %u (%s)\n"
msgstr ", подврÑта: %u (%s)\n"
-#: vms-alpha.c:7689
+#: vms-alpha.c:7933
#, 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:7693
+#: vms-alpha.c:7937
#, c-format
msgid " fixup info rva: "
msgstr " поправка инфо рва: "
-#: vms-alpha.c:7695
+#: vms-alpha.c:7939
#, c-format
msgid ", symbol vector rva: "
msgstr ", вектор Ñимбола рва: "
-#: vms-alpha.c:7698
+#: vms-alpha.c:7942
#, c-format
msgid ""
"\n"
@@ -7775,460 +7860,460 @@ msgstr ""
"\n"
" померај низа верзије: %u\n"
-#: vms-alpha.c:7703
+#: vms-alpha.c:7947
#, 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:7709
+#: vms-alpha.c:7953
#, c-format
msgid " linker flags: %08x:"
msgstr " заÑтавице повезивача: %08x:"
-#: vms-alpha.c:7740
+#: vms-alpha.c:7984
#, 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:7746
+#: vms-alpha.c:7990
#, c-format
msgid " BPAGE: %u"
msgstr " БСТРÐÐИЦÐ: %u"
-#: vms-alpha.c:7753
+#: vms-alpha.c:7997
#, c-format
msgid ", ext fixup offset: %u, no_opt psect off: %u"
msgstr ", померај Ñпољне иÑправке: %u, померај п-одељка „no_opt“-а: %u"
-#: vms-alpha.c:7756
+#: vms-alpha.c:8000
#, c-format
msgid ", alias: %u\n"
msgstr ", алијаÑ: %u\n"
-#: vms-alpha.c:7764
+#: vms-alpha.c:8008
#, c-format
msgid "system version array information:\n"
msgstr "низ података верзије ÑиÑтема:\n"
-#: vms-alpha.c:7768
+#: vms-alpha.c:8012
#, c-format
msgid "cannot read EIHVN header\n"
msgstr "не могу да читам „EIHVN“ заглавље\n"
-#: vms-alpha.c:7778
+#: vms-alpha.c:8022
#, c-format
msgid "cannot read EIHVN version\n"
msgstr "не могу да читам „EIHVN“ издање\n"
-#: vms-alpha.c:7781
+#: vms-alpha.c:8025
#, c-format
msgid " %02u "
msgstr " %02u "
-#: vms-alpha.c:7785
+#: vms-alpha.c:8029
msgid "BASE_IMAGE "
msgstr "СЛИКÐ_ОСÐОВЕ "
-#: vms-alpha.c:7788
+#: vms-alpha.c:8032
msgid "MEMORY_MANAGEMENT"
msgstr "УПРÐВЉÐЊЕ_МЕМОРИЈОМ "
-#: vms-alpha.c:7791
+#: vms-alpha.c:8035
msgid "IO "
msgstr "УИ "
-#: vms-alpha.c:7794
+#: vms-alpha.c:8038
msgid "FILES_VOLUMES "
msgstr "ВОЛУМЕÐИ_ДÐТОТЕКР"
-#: vms-alpha.c:7797
+#: vms-alpha.c:8041
msgid "PROCESS_SCHED "
msgstr "ЗÐКÐЗÐÐИ_ПРОЦЕСИ "
-#: vms-alpha.c:7800
+#: vms-alpha.c:8044
msgid "SYSGEN "
msgstr "СТВÐРÐЊЕ_СИСТЕМР"
-#: vms-alpha.c:7803
+#: vms-alpha.c:8047
msgid "CLUSTERS_LOCKMGR "
msgstr "МГРЗÐКЉУЧÐÐ’ÐЊЕ_КЛÐСТЕРР"
-#: vms-alpha.c:7806
+#: vms-alpha.c:8050
msgid "LOGICAL_NAMES "
msgstr "ЛОГИЧКИ_ÐÐЗИВИ "
-#: vms-alpha.c:7809
+#: vms-alpha.c:8053
msgid "SECURITY "
msgstr "БЕЗБЕДÐОСТ "
-#: vms-alpha.c:7812
+#: vms-alpha.c:8056
msgid "IMAGE_ACTIVATOR "
msgstr "ПОКРЕТÐЧ_СЛИКЕ "
-#: vms-alpha.c:7815
+#: vms-alpha.c:8059
msgid "NETWORKS "
msgstr "МРЕЖЕ "
-#: vms-alpha.c:7818
+#: vms-alpha.c:8062
msgid "COUNTERS "
msgstr "БРОЈÐЧИ "
-#: vms-alpha.c:7821
+#: vms-alpha.c:8065
msgid "STABLE "
msgstr "СТÐБИЛÐО "
-#: vms-alpha.c:7824
+#: vms-alpha.c:8068
msgid "MISC "
msgstr "РÐЗÐО "
-#: vms-alpha.c:7827
+#: vms-alpha.c:8071
msgid "CPU "
msgstr "ЦПЈ "
-#: vms-alpha.c:7830
+#: vms-alpha.c:8074
msgid "VOLATILE "
msgstr "ПРОМЕÐЉИВО "
-#: vms-alpha.c:7833
+#: vms-alpha.c:8077
msgid "SHELL "
msgstr "ШКОЉКР"
-#: vms-alpha.c:7836
+#: vms-alpha.c:8080
msgid "POSIX "
msgstr "ПОСИКС "
-#: vms-alpha.c:7839
+#: vms-alpha.c:8083
msgid "MULTI_PROCESSING "
msgstr "ВИШЕ_ОБРÐДÐО "
-#: vms-alpha.c:7842
+#: vms-alpha.c:8086
msgid "GALAXY "
msgstr "ГÐЛÐКСИЈР"
-#: vms-alpha.c:7845
+#: vms-alpha.c:8089
msgid "*unknown* "
msgstr "*непознато* "
-#: vms-alpha.c:7861 vms-alpha.c:8135
+#: vms-alpha.c:8105 vms-alpha.c:8379
#, c-format
msgid "cannot read EIHA\n"
msgstr "не могу да читам „EIHA“\n"
-#: vms-alpha.c:7864
+#: vms-alpha.c:8108
#, c-format
msgid "Image activation: (size=%u)\n"
msgstr "Ðктивирање Ñлике: (величина=%u)\n"
-#: vms-alpha.c:7867
+#: vms-alpha.c:8111
#, c-format
msgid " First address : 0x%08x 0x%08x\n"
msgstr " Прва адреÑа : 0x%08x 0x%08x\n"
-#: vms-alpha.c:7871
+#: vms-alpha.c:8115
#, c-format
msgid " Second address: 0x%08x 0x%08x\n"
msgstr " Друга адреÑа : 0x%08x 0x%08x\n"
-#: vms-alpha.c:7875
+#: vms-alpha.c:8119
#, c-format
msgid " Third address : 0x%08x 0x%08x\n"
msgstr " Трећа адреÑа : 0x%08x 0x%08x\n"
-#: vms-alpha.c:7879
+#: vms-alpha.c:8123
#, c-format
msgid " Fourth address: 0x%08x 0x%08x\n"
msgstr " Четврта адреÑа : 0x%08x 0x%08x\n"
-#: vms-alpha.c:7883
+#: vms-alpha.c:8127
#, c-format
msgid " Shared image : 0x%08x 0x%08x\n"
msgstr " Дељена Ñлика : 0x%08x 0x%08x\n"
-#: vms-alpha.c:7894
+#: vms-alpha.c:8138
#, c-format
msgid "cannot read EIHI\n"
msgstr "не могу да читам „EIHI“\n"
-#: vms-alpha.c:7898
+#: vms-alpha.c:8142
#, c-format
msgid "Image identification: (major: %u, minor: %u)\n"
msgstr "Препознавање Ñлике: (веће: %u, мање: %u)\n"
-#: vms-alpha.c:7901
+#: vms-alpha.c:8145
#, c-format
msgid " image name : %.*s\n"
msgstr " назив Ñлике : %.*s\n"
-#: vms-alpha.c:7903
+#: vms-alpha.c:8147
#, c-format
msgid " link time : %s\n"
msgstr " време везивања : %s\n"
-#: vms-alpha.c:7905
+#: vms-alpha.c:8149
#, c-format
msgid " image ident : %.*s\n"
msgstr " увлачење Ñлике : %.*s\n"
-#: vms-alpha.c:7907
+#: vms-alpha.c:8151
#, c-format
msgid " linker ident : %.*s\n"
msgstr " увлачење повезивача : %.*s\n"
-#: vms-alpha.c:7909
+#: vms-alpha.c:8153
#, c-format
msgid " image build ident: %.*s\n"
msgstr " увлачење изградње Ñлике: %.*s\n"
-#: vms-alpha.c:7919
+#: vms-alpha.c:8163
#, c-format
msgid "cannot read EIHS\n"
msgstr "не могу да читам „EIHS“\n"
-#: vms-alpha.c:7923
+#: vms-alpha.c:8167
#, c-format
msgid "Image symbol & debug table: (major: %u, minor: %u)\n"
msgstr "Симбол Ñлике и табела прочишћавања: (веће: %u, мање: %u)\n"
-#: vms-alpha.c:7929
+#: vms-alpha.c:8173
#, c-format
msgid " debug symbol table : vbn: %u, size: %u (0x%x)\n"
msgstr " табела Ñимбола прочишћавања : вбн: %u, величина: %u (0x%x)\n"
-#: vms-alpha.c:7934
+#: vms-alpha.c:8178
#, c-format
msgid " global symbol table: vbn: %u, records: %u\n"
msgstr " табела општег Ñимбола: вбн: %u, запиÑи: %u\n"
-#: vms-alpha.c:7939
+#: vms-alpha.c:8183
#, c-format
msgid " debug module table : vbn: %u, size: %u\n"
msgstr " табела модула прочишћавања: вбн: %u, величина: %u\n"
-#: vms-alpha.c:7952
+#: vms-alpha.c:8196
#, c-format
msgid "cannot read EISD\n"
msgstr "не могу да читам „EISD“\n"
-#: vms-alpha.c:7963
+#: vms-alpha.c:8207
#, c-format
msgid "Image section descriptor: (major: %u, minor: %u, size: %u, offset: %u)\n"
msgstr "ОпиÑник одељка Ñлике: (већи: %u, мањи: %u, величина: %u, померај: %u)\n"
-#: vms-alpha.c:7971
+#: vms-alpha.c:8215
#, c-format
msgid " section: base: 0x%08x%08x size: 0x%08x\n"
msgstr " одељак: оÑнова: 0x%08x%08x величина: 0x%08x\n"
-#: vms-alpha.c:7976
+#: vms-alpha.c:8220
#, c-format
msgid " flags: 0x%04x"
msgstr " заÑтавице : 0x%04x"
-#: vms-alpha.c:8014
+#: vms-alpha.c:8258
#, c-format
msgid " vbn: %u, pfc: %u, matchctl: %u type: %u ("
msgstr " вбн: %u, пфц: %u, пореди_цтл: %u врÑта: %u ("
-#: vms-alpha.c:8020
+#: vms-alpha.c:8264
msgid "NORMAL"
msgstr "NORMAL"
-#: vms-alpha.c:8023
+#: vms-alpha.c:8267
msgid "SHRFXD"
msgstr "SHRFXD"
-#: vms-alpha.c:8026
+#: vms-alpha.c:8270
msgid "PRVFXD"
msgstr "PRVFXD"
-#: vms-alpha.c:8029
+#: vms-alpha.c:8273
msgid "SHRPIC"
msgstr "SHRPIC"
-#: vms-alpha.c:8032
+#: vms-alpha.c:8276
msgid "PRVPIC"
msgstr "PRVPIC"
-#: vms-alpha.c:8035
+#: vms-alpha.c:8279
msgid "USRSTACK"
msgstr "USRSTACK"
-#: vms-alpha.c:8041
+#: vms-alpha.c:8285
msgid ")\n"
msgstr ")\n"
-#: vms-alpha.c:8044
+#: vms-alpha.c:8288
#, c-format
msgid " ident: 0x%08x, name: %.*s\n"
msgstr " увлачење: 0x%08x, назив: %.*s\n"
-#: vms-alpha.c:8054
+#: vms-alpha.c:8298
#, c-format
msgid "cannot read DMT\n"
msgstr "не могу да читам „DMT“\n"
-#: vms-alpha.c:8058
+#: vms-alpha.c:8302
#, c-format
msgid "Debug module table:\n"
msgstr "Табела модула прочишћавања:\n"
-#: vms-alpha.c:8067
+#: vms-alpha.c:8311
#, c-format
msgid "cannot read DMT header\n"
msgstr "не могу да читам „DMT“ заглавље\n"
-#: vms-alpha.c:8073
+#: vms-alpha.c:8317
#, c-format
msgid " module offset: 0x%08x, size: 0x%08x, (%u psects)\n"
msgstr " померај модула: 0x%08x, величина: 0x%08x, (%u п-одељака)\n"
-#: vms-alpha.c:8083
+#: vms-alpha.c:8327
#, c-format
msgid "cannot read DMT psect\n"
msgstr "не могу да читам „DMT“ п-одељак\n"
-#: vms-alpha.c:8087
+#: vms-alpha.c:8331
#, c-format
msgid " psect start: 0x%08x, length: %u\n"
msgstr " почетак п-одељка: 0x%08x, дужина: %u\n"
-#: vms-alpha.c:8100
+#: vms-alpha.c:8344
#, c-format
msgid "cannot read DST\n"
msgstr "не могу да читам „DST“\n"
-#: vms-alpha.c:8110
+#: vms-alpha.c:8354
#, c-format
msgid "cannot read GST\n"
msgstr "не могу да читам „GST“\n"
-#: vms-alpha.c:8114
+#: vms-alpha.c:8358
#, c-format
msgid "Global symbol table:\n"
msgstr "Табела општих Ñимбола:\n"
-#: vms-alpha.c:8141
+#: vms-alpha.c:8385
#, c-format
msgid "Image activator fixup: (major: %u, minor: %u)\n"
msgstr "ИÑправка покретача Ñлике: (већи: %u, мањи: %u)\n"
-#: vms-alpha.c:8145
+#: vms-alpha.c:8389
#, c-format
msgid " iaflink : 0x%08x %08x\n"
msgstr " иаф веза : 0x%08x %08x\n"
-#: vms-alpha.c:8149
+#: vms-alpha.c:8393
#, c-format
msgid " fixuplnk: 0x%08x %08x\n"
msgstr " веза иÑправке: 0x%08x %08x\n"
-#: vms-alpha.c:8152
+#: vms-alpha.c:8396
#, c-format
msgid " size : %u\n"
msgstr " величина : %u\n"
-#: vms-alpha.c:8154
+#: vms-alpha.c:8398
#, c-format
msgid " flags: 0x%08x\n"
msgstr " заÑтавице : 0x%08x\n"
-#: vms-alpha.c:8159
+#: vms-alpha.c:8403
#, c-format
msgid " qrelfixoff: %5u, lrelfixoff: %5u\n"
msgstr " qrelfixoff: %5u, lrelfixoff: %5u\n"
-#: vms-alpha.c:8164
+#: vms-alpha.c:8408
#, c-format
msgid " qdotadroff: %5u, ldotadroff: %5u\n"
msgstr " qdotadroff: %5u, ldotadroff: %5u\n"
-#: vms-alpha.c:8169
+#: vms-alpha.c:8413
#, c-format
msgid " codeadroff: %5u, lpfixoff : %5u\n"
msgstr " codeadroff: %5u, lpfixoff : %5u\n"
-#: vms-alpha.c:8172
+#: vms-alpha.c:8416
#, c-format
msgid " chgprtoff : %5u\n"
msgstr " chgprtoff : %5u\n"
-#: vms-alpha.c:8176
+#: vms-alpha.c:8420
#, c-format
msgid " shlstoff : %5u, shrimgcnt : %5u\n"
msgstr " shlstoff : %5u, shrimgcnt : %5u\n"
-#: vms-alpha.c:8179
+#: vms-alpha.c:8423
#, c-format
msgid " shlextra : %5u, permctx : %5u\n"
msgstr " shlextra : %5u, permctx : %5u\n"
-#: vms-alpha.c:8182
+#: vms-alpha.c:8426
#, c-format
msgid " base_va : 0x%08x\n"
msgstr " base_va : 0x%08x\n"
-#: vms-alpha.c:8184
+#: vms-alpha.c:8428
#, c-format
msgid " lppsbfixoff: %5u\n"
msgstr " lppsbfixoff: %5u\n"
-#: vms-alpha.c:8192
+#: vms-alpha.c:8435
#, c-format
msgid " Shareable images:\n"
msgstr " Дељиве Ñлике:\n"
-#: vms-alpha.c:8197
+#: vms-alpha.c:8443
#, c-format
msgid " %u: size: %u, flags: 0x%02x, name: %.*s\n"
msgstr " %u: величина: %u, заÑтавице: 0x%02x, назив: %.*s\n"
-#: vms-alpha.c:8204
+#: vms-alpha.c:8450
#, c-format
msgid " quad-word relocation fixups:\n"
msgstr " иÑправке премештања четворо-речи:\n"
-#: vms-alpha.c:8209
+#: vms-alpha.c:8456
#, c-format
msgid " long-word relocation fixups:\n"
msgstr " иÑправке премештања дуге-речи:\n"
-#: vms-alpha.c:8214
+#: vms-alpha.c:8462
#, c-format
msgid " quad-word .address reference fixups:\n"
msgstr " иÑправке „.address“ упуте четворо-речи:\n"
-#: vms-alpha.c:8219
+#: vms-alpha.c:8467
#, c-format
msgid " long-word .address reference fixups:\n"
msgstr " иÑправке „.address“ упуте дуге-речи:\n"
-#: vms-alpha.c:8224
+#: vms-alpha.c:8472
#, c-format
msgid " Code Address Reference Fixups:\n"
msgstr " ИÑправке упуте адреÑе кода:\n"
-#: vms-alpha.c:8229
+#: vms-alpha.c:8477
#, c-format
msgid " Linkage Pairs Reference Fixups:\n"
msgstr " ИÑправке упуте парова повезивања:\n"
-#: vms-alpha.c:8238
+#: vms-alpha.c:8485
#, c-format
msgid " Change Protection (%u entries):\n"
msgstr " Промена заштите (%u уноÑа):\n"
-#: vms-alpha.c:8244
+#: vms-alpha.c:8494
#, 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:9121
+#: vms-alpha.c:9371
msgid "%P: relocatable link is not supported\n"
msgstr "%P: премеÑтива веза није подржана\n"
-#: vms-alpha.c:9192
+#: vms-alpha.c:9442
#, c-format
msgid "%P: multiple entry points: in modules %pB and %pB\n"
msgstr "%P: тачке више уноÑа: у модулима „%pB“ и „%pB“\n"
@@ -8246,92 +8331,102 @@ msgstr "„_bfd_vms_output_counted“ је позвано Ñа нула бајт
msgid "_bfd_vms_output_counted called with too many bytes"
msgstr "„_bfd_vms_output_counted“ је позвано Ñа превише бајтова"
-#: xcofflink.c:835
+#: xcofflink.c:834
#, c-format
msgid "%pB: XCOFF shared object when not producing XCOFF output"
msgstr "%pB: „XCOFF“ дељени објекат када Ñе не производи „XCOFF“ излаз"
-#: xcofflink.c:856
+#: xcofflink.c:855
#, c-format
msgid "%pB: dynamic object with no .loader section"
msgstr "%pB: динамички објекат без „.loader“ одељка"
-#: xcofflink.c:1420
+#: xcofflink.c:1440
#, c-format
msgid "%pB: `%s' has line numbers but no enclosing section"
msgstr "%pB: „%s“ има бројеве редова али не и затварајући одељак"
-#: xcofflink.c:1473
+#: xcofflink.c:1496
#, c-format
msgid "%pB: class %d symbol `%s' has no aux entries"
msgstr "%pB: клаÑа %d Ñимбола „%s“ нема помоћних уноÑа"
-#: xcofflink.c:1496
+#: xcofflink.c:1519
#, c-format
msgid "%pB: symbol `%s' has unrecognized csect type %d"
msgstr "%pB: Ñимбол „%s“ има непознату врÑту цÑектора „%d“"
-#: xcofflink.c:1509
+#: xcofflink.c:1532
#, c-format
msgid "%pB: bad XTY_ER symbol `%s': class %d scnum %d scnlen %<PRId64>"
msgstr "%pB: лош „XTY_ER“ Ñимбол „%s“: клаÑа %d Ñцброј %d Ñцндужине %<PRId64>"
-#: xcofflink.c:1540
+#: xcofflink.c:1563
#, c-format
msgid "%pB: XMC_TC0 symbol `%s' is class %d scnlen %<PRId64>"
msgstr "%pB: „XMC_TC0“ Ñимбол „%s“ је клаÑа %d Ñцндужине %<PRId64>"
-#: xcofflink.c:1687
+#: xcofflink.c:1698
+#, c-format
+msgid "%pB: TOC entry `%s' has a R_TLSMLrelocation not targeting itself"
+msgstr "%pB: ÑƒÐ½Ð¾Ñ Ñ‚Ð°Ð±ÐµÐ»Ðµ Ñадржаја „%s“ има „R_TLSML“-премештање које не циља на Ñебе Ñамог"
+
+#: xcofflink.c:1732
#, c-format
msgid "%pB: csect `%s' not in enclosing section"
msgstr "%pB: ц-одељак „%s“ није у затварајућем одељку"
-#: xcofflink.c:1795
+#: xcofflink.c:1841
#, c-format
msgid "%pB: misplaced XTY_LD `%s'"
msgstr "%pB: лоше поÑтављено „XTY_LD“ „%s“"
-#: xcofflink.c:2122
+#: xcofflink.c:2184
#, c-format
msgid "%pB: reloc %s:%<PRId64> not in csect"
msgstr "%pB: премештање „%s:%<PRId64>“ није у ц-одељку"
-#: xcofflink.c:3223
+#: xcofflink.c:3287
+#, c-format
+msgid "%pB: cannot export internal symbol `%s`."
+msgstr "%pB: не могу да извезем унутрашњи Ñимбол „%s“."
+
+#: xcofflink.c:3335
#, c-format
msgid "%s: no such symbol"
msgstr "%s: нема таквог Ñимбола"
-#: xcofflink.c:3334
+#: xcofflink.c:3444
#, c-format
msgid "warning: attempt to export undefined symbol `%s'"
msgstr "упозорење: покушај извоза недефиниÑаног Ñимбола „%s“"
-#: xcofflink.c:3713
+#: xcofflink.c:3823
msgid "error: undefined symbol __rtinit"
msgstr "грешка: Ñимбол „__rtinit“ није дефиниÑан"
-#: xcofflink.c:4095
+#: xcofflink.c:4206
#, c-format
msgid "%pB: loader reloc in unrecognized section `%s'"
msgstr "%pB: премештање утоваривача у непознатом одељку „%s“"
-#: xcofflink.c:4107
+#: xcofflink.c:4218
#, c-format
msgid "%pB: `%s' in loader reloc but not loader sym"
msgstr "%pB: „%s“ је у премештању утоваривача али није Ñимбол утоваривача"
-#: xcofflink.c:4124
+#: xcofflink.c:4235
#, c-format
msgid "%pB: loader reloc in read-only section %pA"
msgstr "%pB: премештање утоваривача у одељку Ñамо за читање „%pA“"
-#: xcofflink.c:5152
+#: xcofflink.c:5270
#, c-format
msgid "TOC overflow: %#<PRIx64> > 0x10000; try -mminimal-toc when compiling"
msgstr "Прекорачење табеле Ñадржаја: %#<PRIx64> > 0x10000; пробајте Ñа „-mminimal-toc“ приликом превођења"
#. Not fatal, this callback cannot fail.
-#: elfnn-aarch64.c:2869
+#: elfnn-aarch64.c:2869 elfnn-riscv.c:5264
#, c-format
msgid "unknown attribute for symbol `%s': 0x%02x"
msgstr "непознат атрибут за Ñимбол „%s“: 0x%02x"
@@ -8346,271 +8441,286 @@ msgstr "%pB: грешка: окрајак грешке 835769 је ван опÑ
msgid "%pB: error: erratum 843419 stub out of range (input file too large)"
msgstr "%pB: грешка: окрајак грешке 843419 је ван опÑега (улазна датотека је превелика)"
-#: elfnn-aarch64.c:5350
-msgid "%pB: error: erratum 843419 immediate 0x%"
-msgstr "%pB: грешка: грешка 843419 изравно 0x%"
+#: elfnn-aarch64.c:5353
+#, c-format
+msgid "%pB: error: erratum 843419 immediate 0x%s out of range for ADR (input file too large) and --fix-cortex-a53-843419=adr used. Run the linker with --fix-cortex-a53-843419=full instead"
+msgstr "%pB: грешка: погрешка 843419 непоÑредно 0x%s је ван опÑега за ÐДР (улазна датотека је превелика) и коришћено је „--fix-cortex-a53-843419=адр“. Тако да покрећем повезивача Ñа „--fix-cortex-a53-843419=full“"
-#: elfnn-aarch64.c:5884
+#: elfnn-aarch64.c:5887
#, c-format
msgid "%pB: relocation %s against symbol `%s' which may bind externally can not be used when making a shared object; recompile with -fPIC"
msgstr "%pB: премештање „%s“ наÑпрам Ñимбола „%s“ која Ñе може Ñвезати Ñпоља не може Ñе кориÑтити приликом Ñтварања дељеног објекта; поново преведите Ñа „-fPIC“"
-#: elfnn-aarch64.c:5904
+#: elfnn-aarch64.c:5907
#, c-format
msgid "%pB: conditional branch to undefined symbol `%s' not allowed"
msgstr "%pB: уÑловна грана за недефиниÑани Ñимбол „%s“ није дозвољена"
-#: elfnn-aarch64.c:5992
+#: elfnn-aarch64.c:5995
#, c-format
msgid "%pB: local symbol descriptor table be NULL when applying relocation %s against local symbol"
msgstr "%pB: табела опиÑника локалног Ñимбола биће „NULL“ приликом примене премештања „%s“ наÑпрам локалног Ñимбола"
-#: elfnn-aarch64.c:6105 elfnn-aarch64.c:6142
+#: elfnn-aarch64.c:6108 elfnn-aarch64.c:6145
#, c-format
msgid "%pB: TLS relocation %s against undefined symbol `%s'"
msgstr "%pB: „TLS“ премештање „%s“ наÑпрам недефиниÑаног Ñимбола „%s“"
-#: elfnn-aarch64.c:7127
+#: elfnn-aarch64.c:7130
msgid "too many GOT entries for -fpic, please recompile with -fPIC"
msgstr "превише „GOT“ уноÑа за „-fpic“, поново преведите Ñа „-fPIC“"
-#: elfnn-aarch64.c:7155
+#: elfnn-aarch64.c:7158
msgid "one possible cause of this error is that the symbol is being referenced in the indicated code as if it had a larger alignment than was declared where it was defined"
msgstr "један од могућих разлога ове грешке може бити да Ñимбол упутан у назначеном коду има веће поравнање него што је објављено тамо где је дефиниÑан"
-#: elfnn-aarch64.c:7722
+#: elfnn-aarch64.c:7725
#, c-format
msgid "%pB: relocation %s against `%s' can not be used when making a shared object"
msgstr "%pB: премештање „%s“ наÑпрам „%s“ Ñе не може кориÑтити приликом Ñтварања дељеног објекта"
-#: elfnn-riscv.c:223 elfnn-riscv.c:258
+#: elfnn-loongarch.c:151 elfnn-loongarch.c:203
+#, c-format
+msgid "%#<PRIx64> invaild imm"
+msgstr "%#<PRIx64> неиÑправно „imm“"
+
+#: elfnn-loongarch.c:386 elfnn-riscv.c:3846
+#, c-format
+msgid ""
+"%pB: ABI is incompatible with that of the selected emulation:\n"
+" target emulation `%s' does not match `%s'"
+msgstr ""
+"%pB: „ABI“ није ÑаглаÑно Ñа оним из изабране емулације:\n"
+" циљна емулација „%s“ Ñе не подудара Ñа „%s“"
+
+#: elfnn-loongarch.c:406
+#, c-format
+msgid "%pB: can't link different ABI object."
+msgstr "%pB: не могу да повежем другачији „ABI“ објекат."
+
+#: elfnn-loongarch.c:547
+msgid "Internal error: unreachable."
+msgstr "Унутрашња грешка: недоÑтижно."
+
+#: elfnn-riscv.c:224 elfnn-riscv.c:259
#, c-format
msgid "%pB: warning: RVE PLT generation not supported"
msgstr "%pB: упозорење: „RVE PLT“ Ñтварање није подржано"
-#: elfnn-riscv.c:1911
+#: elfnn-riscv.c:1927
#, c-format
msgid "%pcrel_lo missing matching %pcrel_hi"
msgstr "„%pcrel_lo“-у недоÑтаје подударајуће „%pcrel_hi“"
-#: elfnn-riscv.c:1914
+#: elfnn-riscv.c:1930
#, c-format
msgid "%pcrel_lo with addend isn't allowed for R_RISCV_GOT_HI20"
msgstr "„%pcrel_lo“ Ñа Ñабирком није дозвољено за „R_RISCV_GOT_HI20“"
-#: elfnn-riscv.c:1920
+#: elfnn-riscv.c:1936
#, c-format
msgid "%%pcrel_lo overflow with an addend, the value of %%pcrel_hi is 0x%<PRIx64> without any addend, but may be 0x%<PRIx64> after adding the %%pcrel_lo addend"
msgstr "„%%pcrel_lo“ прекорачење Ñа Ñабирком, вредноÑÑ‚ за „%%pcrel_hi“ је 0x%<PRIx64> без икаквог Ñабирка, али може бити 0x%<PRIx64> након додавања „%%pcrel_lo“ Ñабирка"
-#: elfnn-riscv.c:1927
+#: elfnn-riscv.c:1943
#, c-format
msgid "%pcrel_lo overflow with an addend"
msgstr "„%pcrel_lo“ прекорачење Ñа Ñабирком"
-#: elfnn-riscv.c:2409
+#: elfnn-riscv.c:2425
msgid "The addend isn't allowed for R_RISCV_GOT_HI20"
msgstr "Сабирак није дозвољен за „R_RISCV_GOT_HI20“"
-#: elfnn-riscv.c:2553
+#: elfnn-riscv.c:2569
#, c-format
msgid "%pcrel_lo section symbol with an addend"
msgstr "Ñимбол „%pcrel_lo“ одељка Ñа Ñабирком"
-#: elfnn-riscv.c:2776
+#: elfnn-riscv.c:2792
#, c-format
msgid "%%X%%P: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC\n"
msgstr "%%X%%P: премештање „%s“ наÑпрам „%s“ Ñе не може кориÑтити приликом Ñтварања дељеног објекта; поново преведите Ñа „-fPIC“\n"
-#: elfnn-riscv.c:2786
+#: elfnn-riscv.c:2802
#, c-format
msgid "%%X%%P: unresolvable %s relocation against symbol `%s'\n"
msgstr "%%X%%P: нерешиво „%s“ премештање наÑпрам Ñимбола „%s“\n"
-#: elfnn-riscv.c:2826
+#: elfnn-riscv.c:2842
msgid "%X%P: internal error: out of range error\n"
msgstr "%X%P: унутрашња грешка: изван опÑега\n"
-#: elfnn-riscv.c:2831
+#: elfnn-riscv.c:2847
msgid "%X%P: internal error: unsupported relocation error\n"
msgstr "%X%P: унутрашња грешка: премештање није подржано\n"
-#: elfnn-riscv.c:2837
+#: elfnn-riscv.c:2853
msgid "dangerous relocation error"
msgstr "опаÑно премештање"
-#: elfnn-riscv.c:2843
+#: elfnn-riscv.c:2859
msgid "%X%P: internal error: unknown error\n"
msgstr "%X%P: унутрашња грешка: непозната грешка\n"
-#: elfnn-riscv.c:3384
+#: elfnn-riscv.c:3400
#, c-format
msgid "warning: %pB: mis-matched ISA version %d.%d for '%s' extension, the output version is %d.%d"
msgstr "упозорење: %pB: неодговарајуће ISA издање %d.%d за „%s“ проширење, излазно издање је %d.%d"
-#: elfnn-riscv.c:3417
+#: elfnn-riscv.c:3433
#, c-format
msgid "error: %pB: corrupted ISA string '%s'. First letter should be 'i' or 'e' but got '%s'"
msgstr "грешка: %pB: оштећена ISA ниÑка „%s“. Прво Ñлово треба да буде „i“ или „e“ али добих „%s“"
-#: elfnn-riscv.c:3460
+#: elfnn-riscv.c:3476
#, c-format
msgid "error: %pB: mis-matched ISA string to merge '%s' and '%s'"
msgstr "грешка: %pB: неодговарајућа ISA ниÑка за Ñтапање „%s“ и „%s“"
-#: elfnn-riscv.c:3617
+#: elfnn-riscv.c:3618
#, c-format
msgid "error: %pB: ISA string of input (%s) doesn't match output (%s)"
msgstr "грешка: %pB: ISA ниÑка улаза (%s) не одговара излазу (%s)"
-#: elfnn-riscv.c:3637
+#: elfnn-riscv.c:3638
#, c-format
msgid "error: %pB: XLEN of input (%u) doesn't match output (%u)"
msgstr "грешка: %pB: „XLEN“ ниÑка улаза (%u) не одговара излазу (%u)"
-#: elfnn-riscv.c:3645
+#: elfnn-riscv.c:3646
#, c-format
msgid "error: %pB: unsupported XLEN (%u), you might be using wrong emulation"
msgstr "грешка: %pB: неподржано „XLEN“ (%u), можда кориÑтите погрешну емулацију"
-#: elfnn-riscv.c:3759
+#: elfnn-riscv.c:3760
#, c-format
msgid "warning: %pB use privileged spec version %u.%u.%u but the output use version %u.%u.%u"
msgstr "упозорење: „%pB“ кориÑти привилеговано Ñпец издање „%u.%u.%u“ али излаз кориÑти издање „%u.%u.%u“"
-#: elfnn-riscv.c:3776
+#: elfnn-riscv.c:3777
msgid "warning: privileged spec version 1.9.1 can not be linked with other spec versions"
msgstr "упозорење: привилеговано Ñпец издање 1.9.1 Ñе не може повезати Ñа другим Ñпец издањима"
-#: elfnn-riscv.c:3804
+#: elfnn-riscv.c:3805
#, c-format
msgid "error: %pB use %u-byte stack aligned but the output use %u-byte stack aligned"
msgstr "грешка: „%pB“ кориÑти %u-бајтно поравнан Ñпремник али излаз кориÑти %u-бајтно поравнан Ñпремник"
-#: elfnn-riscv.c:3845
-#, c-format
-msgid ""
-"%pB: ABI is incompatible with that of the selected emulation:\n"
-" target emulation `%s' does not match `%s'"
-msgstr ""
-"%pB: „ABI“ није ÑаглаÑно Ñа оним из изабране емулације:\n"
-" циљна емулација „%s“ Ñе не подудара Ñа „%s“"
-
-#: elfnn-riscv.c:3901
+#: elfnn-riscv.c:3902
#, c-format
msgid "%pB: can't link %s modules with %s modules"
msgstr "%pB: не могу да повежем „%s“ модуле Ñа „%s“ модулима"
-#: elfnn-riscv.c:3911
+#: elfnn-riscv.c:3912
#, c-format
msgid "%pB: can't link RVE with other target"
msgstr "%pB: не могу да повежем „RVE“ Ñа другом метом"
-#: elfnn-riscv.c:4448
+#: elfnn-riscv.c:4493
#, c-format
msgid "%pB(%pA+%#<PRIx64>): %<PRId64> bytes required for alignment to %<PRId64>-byte boundary, but only %<PRId64> present"
msgstr "%pB(%pA+%#<PRIx64>): %<PRId64> бајта је потребно за поравнање на %<PRId64>-бајтну границу, али Ñамо %<PRId64> је приÑутно"
-#: peXXigen.c:154
+#: peXXigen.c:157
#, c-format
msgid "%pB: unable to find name for empty section"
msgstr "%pB: не могу да нађем назив за празан одељак"
-#: peXXigen.c:181
+#: peXXigen.c:184
#, c-format
msgid "%pB: out of memory creating name for empty section"
msgstr "%pB: понеÑтало је меморије при Ñтварању назива за празан одељак"
-#: peXXigen.c:191
+#: peXXigen.c:194
#, c-format
msgid "%pB: unable to create fake empty section"
msgstr "%pB: не могу да направим лажни празан одељак"
-#: peXXigen.c:523
+#: peXXigen.c:526
#, c-format
msgid "%pB: aout header specifies an invalid number of data-directory entries: %u"
msgstr "%pB: „aout“ заглавље наводи погрешан број уноÑа директоријума података: %u"
-#: peXXigen.c:934
+#: peXXigen.c:937
#, c-format
msgid "%pB:%.8s: section below image base"
msgstr "%pB:%.8s: одељак иÑпод оÑнове Ñлике"
-#: peXXigen.c:937
+#: peXXigen.c:940
#, c-format
msgid "%pB:%.8s: RVA truncated"
msgstr "%pB:%.8s: „RVA“ је Ñкраћено"
-#: peXXigen.c:1065
+#: peXXigen.c:1068
#, c-format
msgid "%pB: line number overflow: 0x%lx > 0xffff"
msgstr "%pB: прекорачење броја редова: 0x%lx > 0xffff"
-#: peXXigen.c:1218
+#: peXXigen.c:1221
msgid "Export Directory [.edata (or where ever we found it)]"
msgstr "Директоријум извоза [„.edata“ (или тамо где Ñмо га нашли)]"
-#: peXXigen.c:1219
+#: peXXigen.c:1222
msgid "Import Directory [parts of .idata]"
msgstr "Директоријум увоза [део „.idata“]"
-#: peXXigen.c:1220
+#: peXXigen.c:1223
msgid "Resource Directory [.rsrc]"
msgstr "Директоријум изворишта [.rsrc]"
-#: peXXigen.c:1221
+#: peXXigen.c:1224
msgid "Exception Directory [.pdata]"
msgstr "Директоријум изузетака [.pdata]"
-#: peXXigen.c:1222
+#: peXXigen.c:1225
msgid "Security Directory"
msgstr "Директоријум безбедноÑти"
-#: peXXigen.c:1223
+#: peXXigen.c:1226
msgid "Base Relocation Directory [.reloc]"
msgstr "Директоријум премештања оÑнове [.reloc]"
-#: peXXigen.c:1224
+#: peXXigen.c:1227
msgid "Debug Directory"
msgstr "Директоријум прочишћавања"
-#: peXXigen.c:1225
+#: peXXigen.c:1228
msgid "Description Directory"
msgstr "Директоријум опиÑа"
-#: peXXigen.c:1226
+#: peXXigen.c:1229
msgid "Special Directory"
msgstr "Директоријум поÑебноÑти"
-#: peXXigen.c:1227
+#: peXXigen.c:1230
msgid "Thread Storage Directory [.tls]"
msgstr "Директоријум Ñмештаја нити [.tls]"
-#: peXXigen.c:1228
+#: peXXigen.c:1231
msgid "Load Configuration Directory"
msgstr "Директоријум подешавања учитавања"
-#: peXXigen.c:1229
+#: peXXigen.c:1232
msgid "Bound Import Directory"
msgstr "Директоријум увоза Ñвеза"
-#: peXXigen.c:1230
+#: peXXigen.c:1233
msgid "Import Address Table Directory"
msgstr "Директоријум табеле увоза адреÑе"
-#: peXXigen.c:1231
+#: peXXigen.c:1234
msgid "Delay Import Directory"
msgstr "Директоријум заÑтоја увоза"
-#: peXXigen.c:1232
+#: peXXigen.c:1235
msgid "CLR Runtime Header"
msgstr "Заглавље ЦЛР извршавања"
-#: peXXigen.c:1233
+#: peXXigen.c:1236
msgid "Reserved"
msgstr "РезервиÑано"
-#: peXXigen.c:1280
+#: peXXigen.c:1283
#, c-format
msgid ""
"\n"
@@ -8619,7 +8729,7 @@ msgstr ""
"\n"
"ПоÑтоји табела увоза, али не могу да нађем одељак који је Ñадржи\n"
-#: peXXigen.c:1286
+#: peXXigen.c:1289
#, c-format
msgid ""
"\n"
@@ -8628,7 +8738,7 @@ msgstr ""
"\n"
"ПоÑтоји табела увоза у „%s“, али одељак нема Ñадржај\n"
-#: peXXigen.c:1293
+#: peXXigen.c:1296
#, c-format
msgid ""
"\n"
@@ -8637,7 +8747,7 @@ msgstr ""
"\n"
"ПоÑтоји табела увоза у „%s“ на 0x%lx\n"
-#: peXXigen.c:1299
+#: peXXigen.c:1302
#, c-format
msgid ""
"\n"
@@ -8646,7 +8756,7 @@ msgstr ""
"\n"
"Табеле увоза (протумачени Ñадржај одељка „%s“)\n"
-#: peXXigen.c:1302
+#: peXXigen.c:1305
#, c-format
msgid ""
" vma: Hint Time Forward DLL First\n"
@@ -8655,7 +8765,7 @@ msgstr ""
" vma: Ðајава Време Ðапред ДЛЛ Први\n"
" Табела ОтиÑак Ланац Ðазив Потпрограм\n"
-#: peXXigen.c:1351
+#: peXXigen.c:1354
#, c-format
msgid ""
"\n"
@@ -8664,12 +8774,12 @@ msgstr ""
"\n"
"\t„DLL“ назив: %.*s\n"
-#: peXXigen.c:1367
+#: peXXigen.c:1370
#, c-format
msgid "\tvma: Hint/Ord Member-Name Bound-To\n"
msgstr "\tvma: Ðајава/Редни Ðазив члана Свезан-за\n"
-#: peXXigen.c:1392
+#: peXXigen.c:1395
#, c-format
msgid ""
"\n"
@@ -8678,12 +8788,12 @@ msgstr ""
"\n"
"ПоÑтоји први потпрограм, али не могу да нађем одељак који га Ñадржи\n"
-#: peXXigen.c:1436 peXXigen.c:1475
+#: peXXigen.c:1439 peXXigen.c:1478
#, c-format
msgid "\t<corrupt: 0x%04lx>"
msgstr "\t<оштећење: 0x%04lx>"
-#: peXXigen.c:1568
+#: peXXigen.c:1571
#, c-format
msgid ""
"\n"
@@ -8692,7 +8802,7 @@ msgstr ""
"\n"
"ПоÑтоји табела извоза, али не могу да нађем одељак који је Ñадржи\n"
-#: peXXigen.c:1574
+#: peXXigen.c:1577
#, c-format
msgid ""
"\n"
@@ -8701,7 +8811,7 @@ msgstr ""
"\n"
"ПоÑтоји табела извоза у „%s“, али одељак нема Ñадржај\n"
-#: peXXigen.c:1585
+#: peXXigen.c:1588
#, c-format
msgid ""
"\n"
@@ -8710,7 +8820,7 @@ msgstr ""
"\n"
"ПоÑтоји табела извоза у „%s“, али не може да Ñтане у тај одељак\n"
-#: peXXigen.c:1596
+#: peXXigen.c:1599
#, c-format
msgid ""
"\n"
@@ -8719,7 +8829,7 @@ msgstr ""
"\n"
"ПоÑтоји табела извоза у „%s“, али је премала (%d)\n"
-#: peXXigen.c:1602
+#: peXXigen.c:1605
#, c-format
msgid ""
"\n"
@@ -8728,7 +8838,7 @@ msgstr ""
"\n"
"ПоÑтоји табела извоза у „%s“ на 0x%lx\n"
-#: peXXigen.c:1630
+#: peXXigen.c:1633
#, c-format
msgid ""
"\n"
@@ -8739,67 +8849,67 @@ msgstr ""
"Табеле извоза (протумачени Ñадржај одељка „%s“)\n"
"\n"
-#: peXXigen.c:1634
+#: peXXigen.c:1637
#, c-format
msgid "Export Flags \t\t\t%lx\n"
msgstr "ЗаÑтавице извоза \t\t%lx\n"
-#: peXXigen.c:1637
+#: peXXigen.c:1640
#, c-format
msgid "Time/Date stamp \t\t%lx\n"
msgstr "ОтиÑак времена/датума \t\t%lx\n"
-#: peXXigen.c:1641
+#: peXXigen.c:1644
#, c-format
msgid "Major/Minor \t\t\t%d/%d\n"
msgstr "Већи/Мањи \t\t\t%d/%d\n"
-#: peXXigen.c:1644
+#: peXXigen.c:1647
#, c-format
msgid "Name \t\t\t\t"
msgstr "Ðазив \t\t\t\t"
-#: peXXigen.c:1655
+#: peXXigen.c:1658
#, c-format
msgid "Ordinal Base \t\t\t%ld\n"
msgstr "ÑОÑнова редног броја\t\t%ld\n"
-#: peXXigen.c:1658
+#: peXXigen.c:1661
#, c-format
msgid "Number in:\n"
msgstr "Број улаза:\n"
-#: peXXigen.c:1661
+#: peXXigen.c:1664
#, c-format
msgid "\tExport Address Table \t\t%08lx\n"
msgstr "\tТабела адреÑа извоза \t %08lx\n"
-#: peXXigen.c:1665
+#: peXXigen.c:1668
#, c-format
msgid "\t[Name Pointer/Ordinal] Table\t%08lx\n"
msgstr "\tТабела [Ðазив показивача/редног броја]\t%08lx\n"
-#: peXXigen.c:1668
+#: peXXigen.c:1671
#, c-format
msgid "Table Addresses\n"
msgstr "Табела адреÑа\n"
-#: peXXigen.c:1671
+#: peXXigen.c:1674
#, c-format
msgid "\tExport Address Table \t\t"
msgstr "\tТабела адреÑа извоза \t\t"
-#: peXXigen.c:1676
+#: peXXigen.c:1679
#, c-format
msgid "\tName Pointer Table \t\t"
msgstr "\tТабела назива показивача \t\t"
-#: peXXigen.c:1681
+#: peXXigen.c:1684
#, c-format
msgid "\tOrdinal Table \t\t\t"
msgstr "\tТабела редних бројева \t\t\t"
-#: peXXigen.c:1695
+#: peXXigen.c:1698
#, c-format
msgid ""
"\n"
@@ -8808,20 +8918,20 @@ msgstr ""
"\n"
"Табела адреÑе извоза —— ОÑнова редних бројева %ld\n"
-#: peXXigen.c:1704
+#: peXXigen.c:1707
#, c-format
msgid "\tInvalid Export Address Table rva (0x%lx) or entry count (0x%lx)\n"
msgstr "\tÐеиÑправна табела адреÑе извоза „rva“ (0x%lx) или број уноÑа (0x%lx)\n"
-#: peXXigen.c:1723
+#: peXXigen.c:1726
msgid "Forwarder RVA"
msgstr "„RVA“ проÑлеђивача"
-#: peXXigen.c:1735
+#: peXXigen.c:1738
msgid "Export RVA"
msgstr "„RVA“ извоза"
-#: peXXigen.c:1742
+#: peXXigen.c:1745
#, c-format
msgid ""
"\n"
@@ -8830,27 +8940,27 @@ msgstr ""
"\n"
"Табела [Редни/Ðазив показивача]\n"
-#: peXXigen.c:1750
+#: peXXigen.c:1753
#, c-format
msgid "\tInvalid Name Pointer Table rva (0x%lx) or entry count (0x%lx)\n"
msgstr "\tÐеиÑправна табела назива показивача „rva“ (0x%lx) или број уноÑа (0x%lx)\n"
-#: peXXigen.c:1757
+#: peXXigen.c:1760
#, c-format
msgid "\tInvalid Ordinal Table rva (0x%lx) or entry count (0x%lx)\n"
msgstr "\tÐеиÑправна табела редног „rva“ (0x%lx) или број уноÑа (0x%lx)\n"
-#: peXXigen.c:1771
+#: peXXigen.c:1774
#, c-format
msgid "\t[%4ld] <corrupt offset: %lx>\n"
msgstr "\t[%4ld] <оштећен померај: %lx>\n"
-#: peXXigen.c:1825 peXXigen.c:1994
+#: peXXigen.c:1828 peXXigen.c:1997
#, c-format
msgid "warning, .pdata section size (%ld) is not a multiple of %d\n"
msgstr "упозорење, величина одељка „.pdata“ (%ld) није производ од %d\n"
-#: peXXigen.c:1829 peXXigen.c:1998
+#: peXXigen.c:1832 peXXigen.c:2001
#, c-format
msgid ""
"\n"
@@ -8859,12 +8969,12 @@ msgstr ""
"\n"
"Табела функција (протумачени Ñадржај одељка „.pdata“)\n"
-#: peXXigen.c:1832
+#: peXXigen.c:1835
#, c-format
msgid " vma:\t\t\tBegin Address End Address Unwind Info\n"
msgstr " vma:\t\t\tÐдреÑа почетка\t ÐдреÑа краја\t\tИзложени подаци\n"
-#: peXXigen.c:1834
+#: peXXigen.c:1837
#, c-format
msgid ""
" vma:\t\tBegin End EH EH PrologEnd Exception\n"
@@ -8873,12 +8983,12 @@ msgstr ""
" vma:\t\tПочетак Крај EH EH Крај пролога Изузетак\n"
" \t\tÐдреÑа ÐдреÑа Руковалац Подаци ÐдреÑа МаÑка\n"
-#: peXXigen.c:1847
+#: peXXigen.c:1850
#, c-format
msgid "Virtual size of .pdata section (%ld) larger than real size (%ld)\n"
msgstr "Виртуелна величина „.pdata“ одељка (%ld) је већа од Ñтварне величине (%ld)\n"
-#: peXXigen.c:2000
+#: peXXigen.c:2003
#, c-format
msgid ""
" vma:\t\tBegin Prolog Function Flags Exception EH\n"
@@ -8887,7 +8997,7 @@ msgstr ""
" vma:\t\tПочетак Пролог Функција ЗаÑтавице Изузетак ЕХ\n"
" \t\tÐдреÑа Дужина Дужина 32b извр Руковлац Подаци\n"
-#: peXXigen.c:2121
+#: peXXigen.c:2124
#, c-format
msgid ""
"\n"
@@ -8898,7 +9008,7 @@ msgstr ""
"\n"
"Премештање оÑнове ПЕ датотеке (протумачени Ñадржај „.reloc“ одељка)\n"
-#: peXXigen.c:2150
+#: peXXigen.c:2153
#, c-format
msgid ""
"\n"
@@ -8907,62 +9017,62 @@ msgstr ""
"\n"
"Виртуелна адреÑа: %08lx величина одломка %ld (0x%lx) Број иÑправки %ld\n"
-#: peXXigen.c:2168
+#: peXXigen.c:2171
#, c-format
msgid "\treloc %4d offset %4x [%4lx] %s"
msgstr "\tпремештање %4d померај %4x [%4lx] %s"
-#: peXXigen.c:2229
+#: peXXigen.c:2232
#, c-format
msgid "%03x %*.s Entry: "
msgstr "„%03x %*.s“ уноÑ: "
-#: peXXigen.c:2253
+#: peXXigen.c:2256
#, c-format
msgid "name: [val: %08lx len %d]: "
msgstr "назив: [вредноÑÑ‚: %08lx дужина %d]: "
-#: peXXigen.c:2273
+#: peXXigen.c:2276
#, c-format
msgid "<corrupt string length: %#x>\n"
msgstr "<оштећена дужина ниÑке: %#x>\n"
-#: peXXigen.c:2283
+#: peXXigen.c:2286
#, c-format
msgid "<corrupt string offset: %#lx>\n"
msgstr "<оштећен померај ниÑке: %#lx>\n"
-#: peXXigen.c:2288
+#: peXXigen.c:2291
#, c-format
msgid "ID: %#08lx"
msgstr "ИД: %#08lx"
-#: peXXigen.c:2291
+#: peXXigen.c:2294
#, c-format
msgid ", Value: %#08lx\n"
msgstr ", ВредноÑÑ‚: %#08lx\n"
-#: peXXigen.c:2313
+#: peXXigen.c:2316
#, c-format
msgid "%03x %*.s Leaf: Addr: %#08lx, Size: %#08lx, Codepage: %d\n"
msgstr "%03x%*.s ЛиÑÑ‚: ÐдреÑа: %#08lx, Величина: %#08lx, Кодна Ñтраница: %d\n"
-#: peXXigen.c:2355
+#: peXXigen.c:2358
#, c-format
msgid "<unknown directory type: %d>\n"
msgstr "<непозната врÑта директоријума: %d>\n"
-#: peXXigen.c:2363
+#: peXXigen.c:2366
#, 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"
-#: peXXigen.c:2451
+#: peXXigen.c:2454
#, c-format
msgid "Corrupt .rsrc section detected!\n"
msgstr "Откривен је оштећени „.rsrc“ одељак!\n"
-#: peXXigen.c:2475
+#: peXXigen.c:2478
#, c-format
msgid ""
"\n"
@@ -8971,17 +9081,17 @@ msgstr ""
"\n"
"УПОЗОРЕЊЕ: Вишак података у „.rsrc“ одељку – Виндоуз ће их занемарити:\n"
-#: peXXigen.c:2481
+#: peXXigen.c:2484
#, c-format
msgid " String table starts at offset: %#03x\n"
msgstr " Табела ниÑке почиње на померају: %#03x\n"
-#: peXXigen.c:2484
+#: peXXigen.c:2487
#, c-format
msgid " Resources start at offset: %#03x\n"
msgstr " Изворишта почињу на померају: %#03x\n"
-#: peXXigen.c:2541
+#: peXXigen.c:2544
#, c-format
msgid ""
"\n"
@@ -8990,7 +9100,7 @@ msgstr ""
"\n"
"ПоÑтоји директоријум прочишћавања, али не могу да нађем одељак који га Ñадржи\n"
-#: peXXigen.c:2547
+#: peXXigen.c:2550
#, c-format
msgid ""
"\n"
@@ -8999,7 +9109,7 @@ msgstr ""
"\n"
"ПоÑтоји директоријум прочишћавања у „%s“, али тај одељак нема Ñадржаја\n"
-#: peXXigen.c:2554
+#: peXXigen.c:2557
#, c-format
msgid ""
"\n"
@@ -9008,7 +9118,7 @@ msgstr ""
"\n"
"Грешка: одељак „%s“ Ñадржи почетну адреÑу података прочишћавања али је премали\n"
-#: peXXigen.c:2559
+#: peXXigen.c:2562
#, c-format
msgid ""
"\n"
@@ -9019,22 +9129,22 @@ msgstr ""
"ПоÑтоји директоријум прочишћавања у „%s“ на 0x%lx\n"
"\n"
-#: peXXigen.c:2566
+#: peXXigen.c:2569
#, c-format
msgid "The debug data size field in the data directory is too big for the section"
msgstr "Поље величине података прочишћавања у директоријуму података је превелико за одељак"
-#: peXXigen.c:2571
+#: peXXigen.c:2574
#, c-format
msgid "Type Size Rva Offset\n"
msgstr "Ð’Ñ€Ñта Величина Rva Померај\n"
-#: peXXigen.c:2618
+#: peXXigen.c:2621
#, c-format
msgid "(format %c%c%c%c signature %s age %ld)\n"
msgstr "(Ð·Ð°Ð¿Ð¸Ñ %c%c%c%c Ð¿Ð¾Ñ‚Ð¿Ð¸Ñ %s ÑтароÑÑ‚ %ld)\n"
-#: peXXigen.c:2628
+#: peXXigen.c:2631
#, c-format
msgid "The debug directory size is not a multiple of the debug directory entry size\n"
msgstr "Величина директоријума прочишћавања није производ величине уноÑа директоријума прочишћавања\n"
@@ -9042,7 +9152,7 @@ msgstr "Величина директоријума прочишћавања нÐ
#. The MS dumpbin program reportedly ands with 0xff0f before
#. printing the characteristics field. Not sure why. No reason to
#. emulate it here.
-#: peXXigen.c:2712
+#: peXXigen.c:2715
#, c-format
msgid ""
"\n"
@@ -9051,91 +9161,147 @@ msgstr ""
"\n"
"ОÑобеноÑти 0x%x\n"
-#: peXXigen.c:2989
+#: peXXigen.c:2992
#, c-format
msgid "%pB: Data Directory (%lx bytes at %<PRIx64>) extends across section boundary at %<PRIx64>"
msgstr "%pB: Директоријум података (%lx бајта на %<PRIx64>) Ñе преноÑи преко границе одељка на %<PRIx64>"
-#: peXXigen.c:3026
+#: peXXigen.c:3029
msgid "failed to update file offsets in debug directory"
msgstr "ниÑам уÑпео да оÑвежим помераје датотеке у директоријуму прочишћавања"
-#: peXXigen.c:3034
+#: peXXigen.c:3037
#, c-format
msgid "%pB: failed to read debug data section"
msgstr "%pB: ниÑам уÑпео да читам одељак података прочишћавања"
-#: peXXigen.c:3833
+#: peXXigen.c:3836
#, c-format
msgid ".rsrc merge failure: duplicate string resource: %d"
msgstr "неуÑпело „.rsrc“ Ñтапање: извориште удвоÑтручене ниÑке: %d"
-#: peXXigen.c:3968
+#: peXXigen.c:3971
msgid ".rsrc merge failure: multiple non-default manifests"
msgstr "неуÑпело „.rsrc“ Ñтапање: неколико не-подразумеваних иÑпољавања"
-#: peXXigen.c:3986
+#: peXXigen.c:3989
msgid ".rsrc merge failure: a directory matches a leaf"
msgstr "неуÑпело „.rsrc“ Ñтапање: директоријум одговара лиÑту"
-#: peXXigen.c:4028
+#: peXXigen.c:4031
msgid ".rsrc merge failure: duplicate leaf"
msgstr "неуÑпело „.rsrc“ Ñтапање: удвоÑтручени лиÑÑ‚"
-#: peXXigen.c:4033
+#: peXXigen.c:4036
#, c-format
msgid ".rsrc merge failure: duplicate leaf: %s"
msgstr "неуÑпело „.rsrc“ Ñтапање: удвоÑтручени лиÑÑ‚: %s"
-#: peXXigen.c:4100
+#: peXXigen.c:4103
msgid ".rsrc merge failure: dirs with differing characteristics"
msgstr "неуÑпело „.rsrc“ Ñтапање: директоријуми Ñа различитим оÑобеноÑтима"
-#: peXXigen.c:4107
+#: peXXigen.c:4110
msgid ".rsrc merge failure: differing directory versions"
msgstr "неуÑпело „.rsrc“ Ñтапање: издања директоријума Ñе разликују"
#. Corrupted .rsrc section - cannot merge.
-#: peXXigen.c:4224
+#: peXXigen.c:4227
#, c-format
msgid "%pB: .rsrc merge failure: corrupt .rsrc section"
msgstr "%pB: неуÑпело „.rsrc“ Ñтапање: оштећени „.rsrc“ одељак"
-#: peXXigen.c:4232
+#: peXXigen.c:4235
#, c-format
msgid "%pB: .rsrc merge failure: unexpected .rsrc size"
msgstr "%pB: неуÑпело „.rsrc“ Ñтапање: оштећени „.rsrc“ одељак"
-#: peXXigen.c:4371
+#: peXXigen.c:4374
#, c-format
msgid "%pB: unable to fill in DataDictionary[1] because .idata$2 is missing"
msgstr "%pB: не могу да попуним речник података[1] зато што недоÑтаје „.idata$2“"
-#: peXXigen.c:4391
+#: peXXigen.c:4394
#, c-format
msgid "%pB: unable to fill in DataDictionary[1] because .idata$4 is missing"
msgstr "%pB: не могу да попуним речник података[1] зато што недоÑтаје „.idata$4“"
-#: peXXigen.c:4412
+#: peXXigen.c:4415
#, c-format
msgid "%pB: unable to fill in DataDictionary[12] because .idata$5 is missing"
msgstr "%pB: не могу да попуним речник података[12] зато што недоÑтаје „.idata$5“"
-#: peXXigen.c:4432
+#: peXXigen.c:4435
#, c-format
msgid "%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)] because .idata$6 is missing"
msgstr "%pB: не могу да попуним речник података[PE_IMPORT_ADDRESS_TABLE (12)] зато што недоÑтаје „.idata$6“"
-#: peXXigen.c:4474
+#: peXXigen.c:4477
#, c-format
msgid "%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE(12)] because .idata$6 is missing"
msgstr "%pB: не могу да попуним речник података[PE_IMPORT_ADDRESS_TABLE(12)] зато што недоÑтаје „.idata$6“"
-#: peXXigen.c:4499
+#: peXXigen.c:4502
#, c-format
msgid "%pB: unable to fill in DataDictionary[9] because __tls_used is missing"
msgstr "%pB: не могу да попуним речник података[9] зато што недоÑтаје „__tls_used“"
+#~ msgid "%pB: TLS relocation at (0x%"
+#~ msgstr "%pB: ТЛС премештање на (0x%"
+
+#~ msgid "%pB: warning: line number count (%#lx) exceeds section size (%#lx)"
+#~ msgstr "%pB: упозорење: број редова (%#lx) превазилази величину одељка (%#lx)"
+
+#~ msgid "internal error: RL78 reloc stack overflow"
+#~ msgstr "унутрашња грешка: прекорачење „RL78“ премештања Ñпремника"
+
+#~ msgid ""
+#~ "%s branch %lu\n"
+#~ " branch toc adj %lu\n"
+#~ " branch notoc %lu\n"
+#~ " branch both %lu\n"
+#~ " long branch %lu\n"
+#~ " long toc adj %lu\n"
+#~ " long notoc %lu\n"
+#~ " long both %lu\n"
+#~ " plt call %lu\n"
+#~ " plt call save %lu\n"
+#~ " plt call notoc %lu\n"
+#~ " plt call both %lu\n"
+#~ " global entry %lu"
+#~ msgstr ""
+#~ "%s грана %lu\n"
+#~ " грана Ñадр. порав. %lu\n"
+#~ " грана не-Ñадр. %lu\n"
+#~ " грана оба %lu\n"
+#~ " дуго грана %lu\n"
+#~ " дуго Ñадр. порав. %lu\n"
+#~ " дуго не-Ñадр. %lu\n"
+#~ " дуго оба %lu\n"
+#~ " плт позив %lu\n"
+#~ " плт позив Ñачувај %lu\n"
+#~ " плт позив не-Ñадр. %lu\n"
+#~ " плт позив оба %lu\n"
+#~ " општи ÑƒÐ½Ð¾Ñ %lu"
+
+#~ msgid "warning: %pB is truncated: expected core file size >= %<PRIu64>, found: %<PRIu64>"
+#~ msgstr "упозорење: „%pB“ је Ñкраћено: очекивах величину датотеке језгра >= %<PRIx64>, нађох: %<PRIx64>"
+
+#~ msgid "-march=%s: expect number after `%dp'"
+#~ msgstr "-march=%s: очекујем број након „%dp“"
+
+#~ msgid "-march=%s: rv%de is not a valid base ISA"
+#~ msgstr "-march=%s: „rv%de“ није иÑправна база ISA"
+
+#~ msgid " Error: length larger than remaining space in record\n"
+#~ msgstr " Грешка: дужина је већа од преоÑталог проÑтора у Ñнимку\n"
+
+#~ msgid "STA_QW (stack quadword) 0x%08x %08x\n"
+#~ msgstr "STA_QW (четворореч Ñпремника) 0x%08x %08x\n"
+
+#~ msgid "%pB: error: erratum 843419 immediate 0x%"
+#~ msgstr "%pB: грешка: грешка 843419 изравно 0x%"
+
#~ msgid "%pA has both ordered [`%pA' in %pB] and unordered [`%pA' in %pB] sections"
#~ msgstr "„%pA“ има и уређени [„%pA“ у „%pB“] и неуређени [„%pA“ у „%pB“] одељак"
@@ -9491,23 +9657,6 @@ msgstr "%pB: не могу да попуним речник података[9]
#~ msgid "%P: stubs don't match calculated size\n"
#~ msgstr "%P: окрајци не одговарају израчунатој величини\n"
-#~ 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"
-
#~ msgid "%P: %B: unknown relocation type %d for `%T'\n"
#~ msgstr "%P: %B: непозната врÑта премештања „%d“ за „%T“\n"
diff --git a/bfd/po/uk.po b/bfd/po/uk.po
index 34c454b8d5f..a371fedd545 100644
--- a/bfd/po/uk.po
+++ b/bfd/po/uk.po
@@ -2,13 +2,13 @@
# Copyright (C) 2012 Free Software Foundation, Inc.
# This file is distributed under the same license as the binutils package.
#
-# Yuri Chornoivan <yurchor@ukr.net>, 2012, 2014, 2017, 2018, 2019, 2020, 2021.
+# Yuri Chornoivan <yurchor@ukr.net>, 2012, 2014, 2017, 2018, 2019, 2020, 2021, 2022.
msgid ""
msgstr ""
-"Project-Id-Version: bfd 2.36.90\n"
-"Report-Msgid-Bugs-To: bug-binutils@gnu.org\n"
-"POT-Creation-Date: 2021-07-03 15:02+0100\n"
-"PO-Revision-Date: 2021-07-04 10:44+0300\n"
+"Project-Id-Version: bfd 2.37.90\n"
+"Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n"
+"POT-Creation-Date: 2022-01-22 12:19+0000\n"
+"PO-Revision-Date: 2022-01-23 17:02+0200\n"
"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
"Language-Team: Ukrainian <trans-uk@lists.fedoraproject.org>\n"
"Language: uk\n"
@@ -34,26 +34,26 @@ msgstr "%pB: імпортовано непідтримуваний тип пер
msgid "%pB: bad relocation record imported: %d"
msgstr "%pB: імпортовано помилковий Ð·Ð°Ð¿Ð¸Ñ Ð¿ÐµÑ€ÐµÑуваннÑ: %d"
-#: aoutx.h:1265 aoutx.h:1613 pdp11.c:1238 pdp11.c:1512
+#: aoutx.h:1265 aoutx.h:1612 pdp11.c:1238 pdp11.c:1511
#, c-format
msgid "%pB: can not represent section `%pA' in a.out object file format"
msgstr "%pB: Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ «%pA» у форматі об’єктних файлів a.out неможливе"
-#: aoutx.h:1577 pdp11.c:1484
+#: aoutx.h:1576 pdp11.c:1483
#, c-format
msgid "%pB: can not represent section for symbol `%s' in a.out object file format"
msgstr "%pB: Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð´Ð»Ñ Ñимволу «%s» у форматі об’єктних файлів a.out неможливе"
-#: aoutx.h:1580 vms-alpha.c:8038
+#: aoutx.h:1579 vms-alpha.c:8282
msgid "*unknown*"
msgstr "*невідомо*"
-#: aoutx.h:1716 pdp11.c:1580
+#: aoutx.h:1715 pdp11.c:1579
#, c-format
msgid "%pB: invalid string offset %<PRIu64> >= %<PRIu64>"
msgstr "%pB: некоректний зÑув Ñ€Ñдка, %<PRIu64> >= %<PRIu64>"
-#: aoutx.h:1963
+#: aoutx.h:1962
#, c-format
msgid "%pB: unsupported AOUT relocation size: %d"
msgstr "%pB: непідтримуваний розмір переÑÑƒÐ²Ð°Ð½Ð½Ñ AOUT: %d"
@@ -69,37 +69,37 @@ msgid "%pB: unsupported relocation type"
msgstr "%pB: непідтримуваний тип переÑуваннÑ"
#. Unknown relocation.
-#: aoutx.h:4405 coff-alpha.c:601 coff-alpha.c:1518 coff-rs6000.c:2916
-#: coff-sh.c:504 coff-tic4x.c:184 coff-tic54x.c:279 elf-hppa.h:798
-#: elf-hppa.h:826 elf-m10200.c:226 elf-m10300.c:813 elf32-arc.c:532
-#: elf32-arm.c:1985 elf32-avr.c:962 elf32-bfin.c:1062 elf32-bfin.c:4687
-#: elf32-cr16.c:654 elf32-cr16.c:684 elf32-cris.c:467 elf32-crx.c:429
-#: elf32-csky.c:991 elf32-d10v.c:234 elf32-d30v.c:522 elf32-d30v.c:544
-#: elf32-dlx.c:546 elf32-epiphany.c:372 elf32-fr30.c:381 elf32-frv.c:2559
-#: elf32-frv.c:6240 elf32-ft32.c:305 elf32-h8300.c:302 elf32-i386.c:400
-#: elf32-ip2k.c:1240 elf32-iq2000.c:442 elf32-lm32.c:496 elf32-m32c.c:305
-#: elf32-m32r.c:1286 elf32-m32r.c:1311 elf32-m32r.c:2209 elf32-m68hc11.c:390
-#: elf32-m68hc12.c:510 elf32-m68k.c:354 elf32-mcore.c:354 elf32-mcore.c:440
-#: elf32-mep.c:385 elf32-metag.c:871 elf32-microblaze.c:690
+#: aoutx.h:4405 coff-alpha.c:601 coff-alpha.c:1518 coff-mips.c:356
+#: coff-rs6000.c:2959 coff-sh.c:504 coff-tic4x.c:184 coff-tic54x.c:279
+#: elf-hppa.h:798 elf-hppa.h:826 elf-m10200.c:226 elf-m10300.c:813
+#: elf32-arc.c:532 elf32-arm.c:1985 elf32-avr.c:962 elf32-bfin.c:1066
+#: elf32-bfin.c:4690 elf32-cr16.c:654 elf32-cr16.c:684 elf32-cris.c:467
+#: elf32-crx.c:429 elf32-csky.c:991 elf32-d10v.c:234 elf32-d30v.c:522
+#: elf32-d30v.c:544 elf32-dlx.c:546 elf32-epiphany.c:372 elf32-fr30.c:381
+#: elf32-frv.c:2559 elf32-frv.c:6240 elf32-ft32.c:305 elf32-h8300.c:302
+#: elf32-i386.c:394 elf32-ip2k.c:1240 elf32-iq2000.c:442 elf32-lm32.c:496
+#: elf32-m32c.c:305 elf32-m32r.c:1286 elf32-m32r.c:1311 elf32-m32r.c:2209
+#: elf32-m68hc11.c:390 elf32-m68hc12.c:510 elf32-m68k.c:354 elf32-mcore.c:354
+#: elf32-mcore.c:440 elf32-mep.c:385 elf32-metag.c:871 elf32-microblaze.c:690
#: elf32-microblaze.c:961 elf32-mips.c:2231 elf32-moxie.c:137
-#: elf32-msp430.c:737 elf32-msp430.c:747 elf32-mt.c:241 elf32-nds32.c:3237
-#: elf32-nds32.c:3263 elf32-nds32.c:5029 elf32-nios2.c:3019 elf32-or1k.c:1070
-#: elf32-pj.c:326 elf32-ppc.c:898 elf32-ppc.c:911 elf32-pru.c:423
-#: elf32-rl78.c:291 elf32-rx.c:313 elf32-rx.c:322 elf32-s12z.c:296
-#: elf32-s390.c:347 elf32-score.c:2392 elf32-score7.c:2231 elf32-sh.c:437
+#: elf32-msp430.c:737 elf32-msp430.c:747 elf32-mt.c:241 elf32-nds32.c:3234
+#: elf32-nds32.c:3255 elf32-nds32.c:5024 elf32-nios2.c:3019 elf32-or1k.c:1070
+#: elf32-pj.c:326 elf32-ppc.c:900 elf32-ppc.c:913 elf32-pru.c:423
+#: elf32-rl78.c:291 elf32-rx.c:324 elf32-rx.c:333 elf32-s12z.c:296
+#: elf32-s390.c:347 elf32-score.c:2383 elf32-score7.c:2224 elf32-sh.c:437
#: elf32-spu.c:163 elf32-tic6x.c:1498 elf32-tic6x.c:1508 elf32-tic6x.c:1527
#: elf32-tic6x.c:1537 elf32-tic6x.c:2583 elf32-tilepro.c:792 elf32-v850.c:1902
#: elf32-v850.c:1924 elf32-v850.c:4249 elf32-vax.c:289 elf32-visium.c:481
#: elf32-wasm32.c:105 elf32-xc16x.c:250 elf32-xgate.c:418
#: elf32-xstormy16.c:395 elf32-xtensa.c:522 elf32-xtensa.c:556 elf32-z80.c:331
-#: elf64-alpha.c:1114 elf64-alpha.c:4072 elf64-alpha.c:4220 elf64-bpf.c:325
-#: elf64-ia64-vms.c:255 elf64-ia64-vms.c:3431 elf64-mips.c:3958
-#: elf64-mips.c:3974 elf64-mmix.c:1264 elf64-nfp.c:238 elf64-ppc.c:1021
-#: elf64-ppc.c:1373 elf64-ppc.c:1382 elf64-s390.c:328 elf64-s390.c:378
-#: elf64-x86-64.c:279 elfn32-mips.c:3788 elfxx-ia64.c:324 elfxx-riscv.c:970
-#: elfxx-sparc.c:589 elfxx-sparc.c:639 elfxx-tilegx.c:907 elfxx-tilegx.c:947
-#: elfnn-aarch64.c:2215 elfnn-aarch64.c:2313 elfnn-ia64.c:214
-#: elfnn-ia64.c:3820
+#: elf64-alpha.c:1114 elf64-alpha.c:4073 elf64-alpha.c:4221 elf64-bpf.c:325
+#: elf64-ia64-vms.c:255 elf64-ia64-vms.c:3425 elf64-mips.c:3958
+#: elf64-mips.c:3974 elf64-mmix.c:1264 elf64-nfp.c:238 elf64-ppc.c:1027
+#: elf64-ppc.c:1381 elf64-ppc.c:1390 elf64-s390.c:328 elf64-s390.c:378
+#: elf64-x86-64.c:268 elfn32-mips.c:3788 elfxx-ia64.c:324
+#: elfxx-loongarch.c:632 elfxx-riscv.c:969 elfxx-sparc.c:589 elfxx-sparc.c:639
+#: elfxx-tilegx.c:907 elfxx-tilegx.c:947 elfnn-aarch64.c:2215
+#: elfnn-aarch64.c:2313 elfnn-ia64.c:214 elfnn-ia64.c:3820
#, c-format
msgid "%pB: unsupported relocation type %#x"
msgstr "%pB: непідтримуваний тип переÑÑƒÐ²Ð°Ð½Ð½Ñ %#x"
@@ -114,132 +114,136 @@ msgstr "%pB: підтримки придатних до переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð
msgid "%pB: cannot allocate memory for local GOT entries"
msgstr "%pB: не вдалоÑÑ Ñ€Ð¾Ð·Ð¼Ñ–Ñтити у пам'ÑÑ‚Ñ– локальні запиÑи GOT"
-#: archive.c:2241
+#: archive.c:743
+msgid "%F%P: %pB(%s): error opening thin archive member: %E\n"
+msgstr "%F%P: %pB(%s): помилка під Ñ‡Ð°Ñ Ñпроби відкрити елемент тонкого архіву: %E\n"
+
+#: archive.c:2272
msgid "warning: writing archive was slow: rewriting timestamp"
msgstr "попередженнÑ: запиÑÑƒÐ²Ð°Ð½Ð½Ñ Ð°Ñ€Ñ…Ñ–Ð²Ñƒ було повільним: перезапиÑуємо чаÑову позначку"
-#: archive.c:2308 archive.c:2368 elflink.c:4611 linker.c:1427
+#: archive.c:2339 archive.c:2400 elflink.c:4756 linker.c:1429
#, c-format
msgid "%pB: plugin needed to handle lto object"
msgstr "%pB: Ð´Ð»Ñ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ об'єкта lto потрібен додаток"
-#: archive.c:2594
+#: archive.c:2626
msgid "Reading archive file mod timestamp"
msgstr "Ð§Ð¸Ñ‚Ð°Ð½Ð½Ñ Ñ‡Ð°Ñової позначки mod архівного файла"
-#: archive.c:2618
+#: archive.c:2650
msgid "Writing updated armap timestamp"
msgstr "ЗапиÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾Ñ— чаÑової позначки armap"
-#: bfd.c:681
+#: bfd.c:690
msgid "no error"
msgstr "без помилок"
-#: bfd.c:682
+#: bfd.c:691
msgid "system call error"
msgstr "помилка ÑиÑтемного виклику"
-#: bfd.c:683
+#: bfd.c:692
msgid "invalid bfd target"
msgstr "некоректне Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ bfd"
-#: bfd.c:684
+#: bfd.c:693
msgid "file in wrong format"
msgstr "файл у помилковому форматі"
-#: bfd.c:685
+#: bfd.c:694
msgid "archive object file in wrong format"
msgstr "архівний об’єктний файл у помилковому форматі"
-#: bfd.c:686
+#: bfd.c:695
msgid "invalid operation"
msgstr "некоректна діÑ"
-#: bfd.c:687
+#: bfd.c:696
msgid "memory exhausted"
msgstr "пам'ÑÑ‚ÑŒ вичерпано"
-#: bfd.c:688
+#: bfd.c:697
msgid "no symbols"
msgstr "немає Ñимволів"
-#: bfd.c:689
+#: bfd.c:698
msgid "archive has no index; run ranlib to add one"
msgstr "у архіві немає покажчика; запуÑÑ‚Ñ–Ñ‚ÑŒ ranlib, щоб його додати"
-#: bfd.c:690
+#: bfd.c:699
msgid "no more archived files"
msgstr "більше архівованих файлів немає"
-#: bfd.c:691
+#: bfd.c:700
msgid "malformed archive"
msgstr "архів з пошкодженим форматуваннÑм"
-#: bfd.c:692
+#: bfd.c:701
msgid "DSO missing from command line"
msgstr "у командному Ñ€Ñдку пропущено DSO"
-#: bfd.c:693
+#: bfd.c:702
msgid "file format not recognized"
msgstr "формат файла не розпізнано"
-#: bfd.c:694
+#: bfd.c:703
msgid "file format is ambiguous"
msgstr "формат файла є неоднозначним"
-#: bfd.c:695
+#: bfd.c:704
msgid "section has no contents"
msgstr "розділ не має вміÑту"
-#: bfd.c:696
+#: bfd.c:705
msgid "nonrepresentable section on output"
msgstr "розділ, непридатний Ð´Ð»Ñ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ…"
-#: bfd.c:697
+#: bfd.c:706
msgid "symbol needs debug section which does not exist"
msgstr "Ñимвол потребує розділу діагноÑтики, Ñкого не Ñ–Ñнує"
-#: bfd.c:698
+#: bfd.c:707
msgid "bad value"
msgstr "помилкове значеннÑ"
-#: bfd.c:699
+#: bfd.c:708
msgid "file truncated"
msgstr "файл обрізано"
-#: bfd.c:700
+#: bfd.c:709
msgid "file too big"
msgstr "файл є надто великим"
-#: bfd.c:701
+#: bfd.c:710
msgid "sorry, cannot handle this file"
msgstr "вибачте, не вдалоÑÑ Ð¾Ð±Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸ цей файл"
-#: bfd.c:702
+#: bfd.c:711
#, c-format
msgid "error reading %s: %s"
msgstr "помилка під Ñ‡Ð°Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ %s: %s"
-#: bfd.c:703
+#: bfd.c:712
msgid "#<invalid error code>"
msgstr "#<некоректний код помилки>"
-#: bfd.c:1640
+#: bfd.c:1649
#, c-format
msgid "BFD %s assertion fail %s:%d"
msgstr "Оператором контролю BFD %s виÑвлено помилку %s:%d"
-#: bfd.c:1653
+#: bfd.c:1662
#, c-format
msgid "BFD %s internal error, aborting at %s:%d in %s\n"
msgstr "Ð’Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° BFD %s, перериваємо роботу у %s:%d у %s\n"
-#: bfd.c:1658
+#: bfd.c:1667
#, c-format
msgid "BFD %s internal error, aborting at %s:%d\n"
msgstr "Ð’Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° BFD %s, перериваємо роботу у %s:%d\n"
-#: bfd.c:1660
+#: bfd.c:1669
msgid "Please report this bug.\n"
msgstr "Будь лаÑка, повідомте про цю ваду.\n"
@@ -268,7 +272,7 @@ msgstr "повторне Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ñ‚Ñ %pB: %s\n"
msgid "%pB: cannot handle compressed Alpha binaries; use compiler flags, or objZ, to generate uncompressed binaries"
msgstr "%pB: обробка ÑтиÑнутих двійкових файлів Alpha неможлива. СкориÑтайтеÑÑ Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñми компілÑтора або objZ Ð´Ð»Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð½ÐµÑтиÑнених двійкових файлів."
-#: coff-alpha.c:856 coff-alpha.c:893 coff-alpha.c:1960 coff-mips.c:953
+#: coff-alpha.c:856 coff-alpha.c:893 coff-alpha.c:1960 coff-mips.c:960
msgid "GP relative relocation used when GP not defined"
msgstr "ВикориÑтано відноÑне переÑÑƒÐ²Ð°Ð½Ð½Ñ GP, втім, GP не визначено"
@@ -276,18 +280,18 @@ msgstr "ВикориÑтано відноÑне переÑÑƒÐ²Ð°Ð½Ð½Ñ GP, втÑ
msgid "using multiple gp values"
msgstr "викориÑтовуєтьÑÑ Ð´ÐµÐºÑ–Ð»ÑŒÐºÐ° значень gp"
-#: coff-alpha.c:1505 coff-alpha.c:1511 elf.c:9463 elf32-mcore.c:100
-#: elf32-mcore.c:455 elf32-ppc.c:7614 elf32-ppc.c:8763 elf64-ppc.c:16242
+#: coff-alpha.c:1505 coff-alpha.c:1511 elf.c:9527 elf32-mcore.c:100
+#: elf32-mcore.c:455 elf32-ppc.c:7649 elf32-ppc.c:8841 elf64-ppc.c:16679
#, c-format
msgid "%pB: %s unsupported"
msgstr "%pB: підтримки %s не передбачено"
-#: coff-go32.c:156 coffswap.h:792
+#: coff-go32.c:164 coffswap.h:819
#, c-format
msgid "%pB: warning: %s: line number overflow: 0x%lx > 0xffff"
msgstr "%pB: попередженнÑ: %s: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð½Ð¾Ð¼ÐµÑ€Ð° Ñ€Ñдка: 0x%lx > 0xffff"
-#: coff-mips.c:643 elf32-mips.c:1744 elf32-score.c:433 elf32-score7.c:333
+#: coff-mips.c:650 elf32-mips.c:1744 elf32-score.c:433 elf32-score7.c:333
#: elf64-mips.c:3451 elfn32-mips.c:3278
msgid "GP relative relocation when _gp not defined"
msgstr "відноÑне переÑÑƒÐ²Ð°Ð½Ð½Ñ GP, але _gp не визначено"
@@ -297,29 +301,32 @@ msgstr "відноÑне переÑÑƒÐ²Ð°Ð½Ð½Ñ GP, але _gp не визнач
msgid "%pB: unsupported swap_aux_in for storage class %#x"
msgstr "%pB: непідтримуване Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ swap_aux_in Ð´Ð»Ñ ÐºÐ»Ð°Ñу Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ %#x"
-#: coff-rs6000.c:570 coff64-rs6000.c:499
+#: coff-rs6000.c:571 coff64-rs6000.c:497
#, c-format
msgid "%pB: unsupported swap_aux_out for storage class %#x"
msgstr "%pB: непідтримуване Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ swap_aux_out Ð´Ð»Ñ ÐºÐ»Ð°Ñу Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ %#x"
-#: coff-rs6000.c:3002
+#: coff-rs6000.c:3045
#, c-format
msgid "%pB: TOC reloc at %#<PRIx64> to symbol `%s' with no TOC entry"
msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ TOC за адреÑою %#<PRIx64> до Ñимволу «%s», Ñкий немає запиÑу у TOC"
-#: coff-rs6000.c:3209 coff-rs6000.c:3220
-msgid "%pB: TLS relocation at (0x%"
-msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ TLS у (0x%"
+#: coff-rs6000.c:3260
+#, c-format
+msgid "%pB: TLS relocation at 0x%s over non-TLS symbol %s (0x%x)\n"
+msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ TLS у 0x%s на Ñимвол поза TLS %s (0x%x)\n"
-#: coff-rs6000.c:3234
-msgid "%pB: TLS local relocation at (0x%"
-msgstr "%pB: локальне переÑÑƒÐ²Ð°Ð½Ð½Ñ TLS у (0x%"
+#: coff-rs6000.c:3276
+#, c-format
+msgid "%pB: TLS local relocation at 0x%s over imported symbol %s\n"
+msgstr "%pB: локальне переÑÑƒÐ²Ð°Ð½Ð½Ñ TLS у 0x%s на імпортований Ñимвол %s\n"
-#: coff-rs6000.c:3642 coff64-rs6000.c:1573
-msgid "%pB: relocatation (%d) at (0x%"
-msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ (%d) у (0x%"
+#: coff-rs6000.c:3686
+#, c-format
+msgid "%pB: relocation (%d) at 0x%s has wrong r_rsize (0x%x)\n"
+msgstr "%pB: у переÑÑƒÐ²Ð°Ð½Ð½Ñ (%d) у 0x%s помилковий r_rsize (0x%x)\n"
-#: coff-rs6000.c:3905 coff64-rs6000.c:2023
+#: coff-rs6000.c:3949 coff64-rs6000.c:2000
#, c-format
msgid "%pB: symbol `%s' has unrecognized smclas %d"
msgstr "%pB: Ñимвол «%s» належить до нерозпізнаного smclas %d"
@@ -369,44 +376,49 @@ msgstr "%pB: %#<PRIx64>: критична помилка: переповненн
msgid "%pB: fatal: generic symbols retrieved before relaxing"
msgstr "%pB: критична помилка: отримано загальні Ñимволи до оптимізації розміру"
-#: coff-sh.c:2781 cofflink.c:2959
+#: coff-sh.c:2781 cofflink.c:2963
#, c-format
msgid "%pB: illegal symbol index %ld in relocs"
msgstr "%pB: некоректний Ñ–Ð½Ð´ÐµÐºÑ Ñимволу %ld у переÑуваннÑÑ…"
-#: coff-tic4x.c:228 coff-tic54x.c:366 coffcode.h:5124
+#: coff-tic30.c:172 coff-tic4x.c:228 coff-tic54x.c:366 coff-z80.c:325
+#: coff-z8k.c:188 coffcode.h:5157
#, c-format
msgid "%pB: warning: illegal symbol index %ld in relocs"
msgstr "%pB: попередженнÑ: некоректний Ñ–Ð½Ð´ÐµÐºÑ Ñимволу %ld у переÑуваннÑÑ…"
-#: coff64-rs6000.c:449 coff64-rs6000.c:555
+#: coff64-rs6000.c:447 coff64-rs6000.c:554
#, c-format
msgid "%pB: C_STAT isn't supported by XCOFF64"
msgstr "%pB: у XCOFF64 не передбачено підтримки C_STAT"
-#: coff64-rs6000.c:479
+#: coff64-rs6000.c:477
#, c-format
msgid "%pB: wrong auxtype %#x for storage class %#x"
msgstr "%pB: помилковий допоміжний тип %#x Ð´Ð»Ñ ÐºÐ»Ð°Ñу Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ %#x"
-#: coffcode.h:986
+#: coff64-rs6000.c:1572
+msgid "%pB: relocation (%d) at (0x%"
+msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ (%d) у (0x%"
+
+#: coffcode.h:990
#, c-format
msgid "%pB: unable to load COMDAT section name"
msgstr "%pB: не вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ назву розділу COMDAT"
#. Malformed input files can trigger this test.
#. cf PR 21781.
-#: coffcode.h:1021
+#: coffcode.h:1025
#, c-format
msgid "%pB: error: unexpected symbol '%s' in COMDAT section"
msgstr "%pB: помилка: неочікуваний Ñимвол «%s» у розділі COMDAT"
-#: coffcode.h:1033
+#: coffcode.h:1037
#, c-format
msgid "%pB: warning: COMDAT symbol '%s' does not match section name '%s'"
msgstr "%pB: попередженнÑ: Ñимвол COMDAT «%s» не відповідає назві розділу «%s»"
-#: coffcode.h:1043
+#: coffcode.h:1047
#, c-format
msgid "%pB: warning: no symbol for section '%s' found"
msgstr "%pB: попередженнÑ: не знайдено Ñимволу Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ «%s»"
@@ -414,87 +426,87 @@ msgstr "%pB: попередженнÑ: не знайдено Ñимволу дл
#. 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:1274
+#: coffcode.h:1278
#, c-format
msgid "%pB: warning: ignoring section flag %s in section %s"
msgstr "%pB: попередженнÑ: ігноруємо прапорець розділу %s у розділі %s"
-#: coffcode.h:1343
+#: coffcode.h:1347
#, c-format
msgid "%pB (%s): section flag %s (%#lx) ignored"
msgstr "%pB (%s): прапорець розділу %s (%#lx) проігноровано"
-#: coffcode.h:1959 coffcode.h:2024
+#: coffcode.h:1960
+#, c-format
+msgid "%pB: overflow reloc count too small"
+msgstr "%pB: лічильник Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÐµÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¼Ð°Ñ” надто мале значеннÑ"
+
+#: coffcode.h:1969 coffcode.h:2034
#, c-format
msgid "%pB: warning: claims to have 0xffff relocs, without overflow"
msgstr "%pB: попередженнÑ: вимога щодо 0xffff переÑувань без переповненнÑ"
-#: coffcode.h:2385
+#: coffcode.h:2401
#, c-format
msgid "unrecognized TI COFF target id '0x%x'"
msgstr "нерозпізнаний ідентифікатор Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ TI COFF, «0x%x»"
-#: coffcode.h:2663
+#: coffcode.h:2679
#, c-format
msgid "%pB: reloc against a non-existent symbol index: %ld"
msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð° неÑтвореним індекÑом Ñимволу: %ld"
-#: coffcode.h:2961
+#: coffcode.h:2983
#, c-format
msgid "%pB: page size is too large (0x%x)"
msgstr "%pB: надто великий розмір Ñторінки (0x%x)"
-#: coffcode.h:3121
+#: coffcode.h:3143
#, c-format
msgid "%pB: too many sections (%d)"
msgstr "%pB: занадто багато розділів (%d)"
-#: coffcode.h:3548
+#: coffcode.h:3570
#, c-format
msgid "%pB: section %pA: string table overflow at offset %ld"
msgstr "%pB: розділ %pA: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ñ€Ñдків за відÑтупом %ld"
-#: coffcode.h:3655
+#: coffcode.h:3677
#, c-format
msgid "%pB:%s section %s: alignment 2**%u not representable"
msgstr "%pB:%s розділ %s: Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ 2**%u не придатне Ð´Ð»Ñ Ð¿Ñ€ÐµÐ´ÑтавленнÑ"
-#: coffcode.h:4358
-#, c-format
-msgid "%pB: warning: line number count (%#lx) exceeds section size (%#lx)"
-msgstr "%pB: попередженнÑ: лічильник кількоÑÑ‚Ñ– Ñ€Ñдків (%#lx) вказує на міÑце за межами розмірів розділу (%#lx)"
-
-#: coffcode.h:4378
+#: coffcode.h:4393
#, c-format
msgid "%pB: warning: line number table read failed"
msgstr "%pB: попередженнÑ: помилка Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð· таблиці номерів Ñ€Ñдків"
-#: coffcode.h:4412 coffcode.h:4426
+#: coffcode.h:4439 coffcode.h:4453
#, c-format
msgid "%pB: warning: illegal symbol index 0x%lx in line number entry %d"
msgstr "%pB: попередженнÑ: некоректний Ñ–Ð½Ð´ÐµÐºÑ Ñимволу 0x%lx у запиÑÑ– номера Ñ€Ñдка %d"
-#: coffcode.h:4440
+#: coffcode.h:4467
#, c-format
msgid "%pB: warning: illegal symbol in line number entry %d"
msgstr "%pB: попередженнÑ: некоректний Ñимвол у запиÑÑ– номера Ñ€Ñдка %d"
-#: coffcode.h:4453
+#: coffcode.h:4480
#, c-format
msgid "%pB: warning: duplicate line number information for `%s'"
msgstr "%pB: попередженнÑ: Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… щодо номерів Ñ€Ñдків Ð´Ð»Ñ Â«%s»"
-#: coffcode.h:4874
+#: coffcode.h:4901
#, c-format
msgid "%pB: unrecognized storage class %d for %s symbol `%s'"
msgstr "%pB: невідомий ÐºÐ»Ð°Ñ Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… %d Ð´Ð»Ñ Ñимволу %s «%s»"
-#: coffcode.h:5014
+#: coffcode.h:5041
#, c-format
msgid "warning: %pB: local symbol `%s' has no section"
msgstr "попередженнÑ: %pB: локальний Ñимвол «%s» не має розділу"
-#: coffcode.h:5164
+#: coffcode.h:5197
#, c-format
msgid "%pB: illegal relocation type %d at address %#<PRIx64>"
msgstr "%pB: некоректний тип переÑÑƒÐ²Ð°Ð½Ð½Ñ %d за адреÑою %#<PRIx64>"
@@ -509,31 +521,31 @@ msgstr "%pB: не вдалоÑÑ Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ Ñтан ÑтиÑÐ
msgid "%pB: unable to initialize decompress status for section %s"
msgstr "%pB: не вдалоÑÑ Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ Ñтан Ñ€Ð¾Ð·Ð¿Ð°ÐºÐ¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %s"
-#: coffgen.c:1706
+#: coffgen.c:1760
#, c-format
msgid "%pB: bad string table size %<PRIu64>"
msgstr "%pB: помилковий розмір таблиці Ñ€Ñдків %<PRIu64>"
-#: coffgen.c:1878 coffgen.c:1938 coffgen.c:1956 cofflink.c:2024 elf.c:1936
-#: xcofflink.c:4540
+#: coffgen.c:1932 coffgen.c:1976 coffgen.c:2025 coffgen.c:2043 cofflink.c:2024
+#: elf.c:1939 xcofflink.c:4658
msgid "<corrupt>"
msgstr "<пошкоджено>"
-#: coffgen.c:2087
+#: coffgen.c:2176
#, c-format
msgid "<corrupt info> %s"
msgstr "<пошкоджені дані> %s"
-#: coffgen.c:2684 elflink.c:14829 linker.c:2965
+#: coffgen.c:2781 elflink.c:15042 linker.c:2967
msgid "%F%P: already_linked_table: %E\n"
msgstr "%F%P: already_linked_table: %E\n"
-#: coffgen.c:3026 elflink.c:13816
+#: coffgen.c:3123 elflink.c:14017
#, c-format
msgid "removing unused section '%pA' in file '%pB'"
msgstr "вилучаємо невикориÑтовуваний розділ «%pA» у файлі «%pB»"
-#: coffgen.c:3103 elflink.c:14036
+#: coffgen.c:3200 elflink.c:14247
msgid "warning: gc-sections option ignored"
msgstr "попередженнÑ: параметр gc-sections проігноровано"
@@ -542,7 +554,7 @@ msgstr "попередженнÑ: параметр gc-sections проігнорÐ
msgid "warning: symbol `%s' is both section and non-section"
msgstr "попередженнÑ: Ñимвол «%s» Ñ” у розділі Ñ– поза розділом"
-#: cofflink.c:471 elf64-ia64-vms.c:5202 elflink.c:5207
+#: cofflink.c:471 elf64-ia64-vms.c:5196 elflink.c:5353
#, c-format
msgid "warning: type of symbol `%s' changed from %d to %d in %pB"
msgstr "попередженнÑ: тип Ñимволу «%s» змінено з %d на %d у %pB"
@@ -552,51 +564,52 @@ msgstr "попередженнÑ: тип Ñимволу «%s» змінено з
msgid "%pB: relocs in section `%pA', but it has no contents"
msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ розділі «%pA», але у цьому розділі немає зміÑту"
-#: cofflink.c:2415 elflink.c:11342
+#: cofflink.c:2415 elflink.c:11470
#, c-format
msgid "%X`%s' referenced in section `%pA' of %pB: defined in discarded section `%pA' of %pB\n"
msgstr "Ðа %X«%s» поÑилаєтьÑÑ Ñ€Ð¾Ð·Ð´Ñ–Ð» «%pA» %pB: визначено у відкинутому розділі «%pA» %pB\n"
-#: cofflink.c:2610
-msgid "%pB: stripping non-representable symbol '%s' (value %"
-msgstr "%pB: прибираємо непридатний до Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñимвол «%s» (Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ %"
+#: cofflink.c:2614
+#, c-format
+msgid "%pB: stripping non-representable symbol '%s' (value 0x%s)"
+msgstr "%pB: прибираємо непридатний до Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñимвол «%s» (Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ 0x%s)"
-#: cofflink.c:2728
+#: cofflink.c:2732
#, c-format
msgid "%pB: %pA: reloc overflow: %#x > 0xffff"
msgstr "%pB: %pA: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ Ð¿ÐµÑ€ÐµÑуваннÑ: %#x > 0xffff"
-#: cofflink.c:2736
+#: cofflink.c:2740
#, c-format
msgid "%pB: warning: %pA: line number overflow: %#x > 0xffff"
msgstr "%pB: попередженнÑ: %pA: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð½Ð¾Ð¼ÐµÑ€Ð° Ñ€Ñдка: %#x > 0xffff"
-#: cofflink.c:3127
+#: cofflink.c:3131
#, c-format
msgid "%pB: bad reloc address %#<PRIx64> in section `%pA'"
msgstr "%pB: помилкова адреÑа переÑÑƒÐ²Ð°Ð½Ð½Ñ %#<PRIx64> у розділі «%pA»"
-#: coffswap.h:806
+#: coffswap.h:833
#, c-format
msgid "%pB: %s: reloc overflow: 0x%lx > 0xffff"
msgstr "%pB: %s: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ Ð¿ÐµÑ€ÐµÑуваннÑ: 0x%lx > 0xffff"
-#: compress.c:270
+#: compress.c:275
#, c-format
msgid "error: %pB(%pA) section size (%#<PRIx64> bytes) is larger than file size (%#<PRIx64> bytes)"
msgstr "помилка: розмір розділу %pB(%pA) (%#<PRIx64> байтів) перевищує розмір файла (%#<PRIx64> байтів)"
-#: compress.c:281
+#: compress.c:286
#, c-format
msgid "error: %pB(%pA) is too large (%#<PRIx64> bytes)"
msgstr "помилка: %pB(%pA) є надто великим (%#<PRIx64> байтів)"
-#: cpu-arm.c:307 cpu-arm.c:319
+#: cpu-arm.c:310 cpu-arm.c:322
#, c-format
msgid "error: %pB is compiled for the EP9312, whereas %pB is compiled for XScale"
msgstr "помилка: %pB зібрано Ð´Ð»Ñ EP9312, а %pB зібрано Ð´Ð»Ñ XScale"
-#: cpu-arm.c:455
+#: cpu-arm.c:458
#, c-format
msgid "warning: unable to update contents of %s section in %pB"
msgstr "попередженнÑ: не вдалоÑÑ Ð¾Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ зміÑÑ‚ розділу %s у %pB"
@@ -617,108 +630,108 @@ msgstr "Помилка DWARF: розділ %s Ñ” більшим за розміÑ
msgid "DWARF error: offset (%<PRIu64>) greater than or equal to %s size (%<PRIu64>)"
msgstr "Помилка DWARF: відÑтуп (%<PRIu64>) Ñ” більшим або рівним за розмір %s (%<PRIu64>)."
-#: dwarf2.c:1201
+#: dwarf2.c:1245
msgid "DWARF error: info pointer extends beyond end of attributes"
msgstr "Помилка DWARF: вказівник на дані виходить за кінець атрибутів"
-#: dwarf2.c:1349
+#: dwarf2.c:1394
#, c-format
msgid "DWARF error: invalid or unhandled FORM value: %#x"
msgstr "Помилка DWARF: некоректне або непридатне до обробки Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ FORM: %#x"
-#: dwarf2.c:1664
+#: dwarf2.c:1709
msgid "DWARF error: mangled line number section (bad file number)"
msgstr "Помилка DWARF: пошкоджений розділ номерів Ñ€Ñдків (помилковий номер файла)"
-#: dwarf2.c:2007
+#: dwarf2.c:2052
msgid "DWARF error: zero format count"
msgstr "Помилка DWARF: нульовий лічильник формату"
-#: dwarf2.c:2017
+#: dwarf2.c:2062
#, c-format
msgid "DWARF error: data count (%<PRIx64>) larger than buffer size"
msgstr "Помилка DWARF: Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð»Ñ–Ñ‡Ð¸Ð»ÑŒÐ½Ð¸ÐºÐ° даних (%<PRIx64>) перевищує розмір буфера"
-#: dwarf2.c:2056
+#: dwarf2.c:2101
#, c-format
msgid "DWARF error: unknown format content type %<PRIu64>"
msgstr "Помилка DWARF: невідомий тип вміÑту формату %<PRIu64>"
-#: dwarf2.c:2126
+#: dwarf2.c:2171
#, c-format
msgid "DWARF error: line info section is too small (%<PRId64>)"
msgstr "Помилка DWARF: розділ даних щодо Ñ€Ñдків Ñ” надто малим (%<PRId64>)"
-#: dwarf2.c:2153
+#: dwarf2.c:2198
#, c-format
msgid "DWARF error: line info data is bigger (%#<PRIx64>) than the space remaining in the section (%#lx)"
msgstr "Помилка DWARF: дані щодо Ñ€Ñдків Ñ” більшими (%#<PRIx64>) за міÑце, Ñке лишилоÑÑ Ñƒ розділі (%#lx)"
-#: dwarf2.c:2166
+#: dwarf2.c:2211
#, c-format
msgid "DWARF error: unhandled .debug_line version %d"
msgstr "Помилка DWARF: непридатна до обробки верÑÑ–Ñ .debug_line, %d"
-#: dwarf2.c:2175
+#: dwarf2.c:2220
msgid "DWARF error: ran out of room reading prologue"
msgstr "Помилка DWARF: вихід за межі облаÑÑ‚Ñ– під Ñ‡Ð°Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð²Ñтупу"
-#: dwarf2.c:2191
+#: dwarf2.c:2236
#, c-format
msgid "DWARF error: line info unsupported segment selector size %u"
msgstr "Помилка DWARF: непідтримуваний розмір варіанта Ñегментів %u у даних щодо Ñ€Ñдка"
-#: dwarf2.c:2213
+#: dwarf2.c:2258
msgid "DWARF error: invalid maximum operations per instruction"
msgstr "Помилка DWARF: некоректна макÑимальна кількіÑÑ‚ÑŒ дій на команду"
-#: dwarf2.c:2225
+#: dwarf2.c:2270
msgid "DWARF error: ran out of room reading opcodes"
msgstr "Помилка DWARF: вихід за межі облаÑÑ‚Ñ– під Ñ‡Ð°Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ ÐºÐ¾Ð´Ñ–Ð² операцій"
-#: dwarf2.c:2393
+#: dwarf2.c:2438
msgid "DWARF error: mangled line number section"
msgstr "Помилка DWARF: пошкоджений розділ номерів Ñ€Ñдків"
-#: dwarf2.c:2881
+#: dwarf2.c:2926
msgid "DWARF error: abstract instance recursion detected"
msgstr "Помилка DWARF: виÑвлено рекурÑÑ–ÑŽ абÑтрактним екземплÑром"
-#: dwarf2.c:2915 dwarf2.c:3009
+#: dwarf2.c:2960 dwarf2.c:3054
msgid "DWARF error: invalid abstract instance DIE ref"
msgstr "Помилка DWARF: некоректне поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° абÑтрактний екземплÑÑ€ DIE"
-#: dwarf2.c:2931
+#: dwarf2.c:2976
#, c-format
msgid "DWARF error: unable to read alt ref %<PRIu64>"
msgstr "Помилка DWARF: не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ альтернативне поÑÐ¸Ð»Ð°Ð½Ð½Ñ %<PRIu64>"
-#: dwarf2.c:2987
+#: dwarf2.c:3032
#, c-format
msgid "DWARF error: unable to locate abstract instance DIE ref %<PRIu64>"
msgstr "Помилка DWARF: не вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾ÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° абÑтрактний екземплÑÑ€ DIE %<PRIu64>"
-#: dwarf2.c:3024 dwarf2.c:3305 dwarf2.c:3750
+#: dwarf2.c:3069 dwarf2.c:3351 dwarf2.c:3808
#, c-format
msgid "DWARF error: could not find abbrev number %u"
msgstr "Помилка DWARF: не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñкорочений номер %u"
-#: dwarf2.c:3538
+#: dwarf2.c:3594
#, c-format
msgid "DWARF error: could not find variable specification at offset 0x%lx"
msgstr "Помилка DWARF: не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñпецифікацію змінних зі зÑувом 0x%lx"
-#: dwarf2.c:3677
+#: dwarf2.c:3735
#, c-format
msgid "DWARF error: found dwarf version '%u', this reader only handles version 2, 3, 4 and 5 information"
msgstr "Помилка DWARF: виÑвлено верÑÑ–ÑŽ DWARF «%u», але у цій функції Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ обробку лише верÑій даних 2, 3 Ñ– 4"
-#: dwarf2.c:3714
+#: dwarf2.c:3772
#, c-format
msgid "DWARF error: found address size '%u', this reader can not handle sizes greater than '%u'"
msgstr "Помилка у DWARF: виÑвлено розмір адреÑи «%u», втім у функції Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð½Ðµ передбачено розмірів, що перевищують «%u»"
-#: dwarf2.c:3817
+#: dwarf2.c:3885
msgid "DWARF error: DW_AT_comp_dir attribute encountered with a non-string form"
msgstr "Помилка DWARF: виÑвлено атрибут DW_AT_comp_dir із нерÑдковою формою"
@@ -834,49 +847,49 @@ msgstr "відкидаємо FDE нульового діапазону адреÑ
msgid "error in %pB(%pA); no .eh_frame_hdr table will be created"
msgstr " помилка у %pB(%pA); таблицю .eh_frame_hdr не буде Ñтворено"
-#: elf-eh-frame.c:1539
+#: elf-eh-frame.c:1541
#, c-format
msgid "FDE encoding in %pB(%pA) prevents .eh_frame_hdr table being created"
msgstr "ÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ FDE у %pB(%pA) перешкоджає Ñтворенню таблиці .eh_frame_hdr"
-#: elf-eh-frame.c:1546
+#: elf-eh-frame.c:1548
msgid "further warnings about FDE encoding preventing .eh_frame_hdr generation dropped"
msgstr "подальші Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ ÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ FDE, Ñке заважає Ñтворенню .eh_frame_hdr, пропущено"
-#: elf-eh-frame.c:1866
+#: elf-eh-frame.c:1868
#, c-format
msgid "%pB: %pA not in order"
msgstr "%pB: %pA Ñ” невпорÑдкованим"
-#: elf-eh-frame.c:1880
+#: elf-eh-frame.c:1882
#, c-format
msgid "%pB: %pA invalid input section size"
msgstr "%pB: %pA некоректних розмір розділу вхідних даних"
-#: elf-eh-frame.c:1888
+#: elf-eh-frame.c:1890
#, c-format
msgid "%pB: %pA points past end of text section"
msgstr "%pB: %pA вказує на адреÑу за кінцем текÑтового розділу"
-#: elf-eh-frame.c:2141
+#: elf-eh-frame.c:2143
msgid "DW_EH_PE_datarel unspecified for this architecture"
msgstr "DW_EH_PE_datarel не визначено Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— архітектури"
-#: elf-eh-frame.c:2312
+#: elf-eh-frame.c:2314
#, c-format
msgid "invalid output section for .eh_frame_entry: %pA"
msgstr "некоректний розділ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу .eh_frame_entry: %pA"
-#: elf-eh-frame.c:2335
+#: elf-eh-frame.c:2337
#, c-format
msgid "invalid contents in %pA section"
msgstr "некоректний вміÑÑ‚ у розділі %pA"
-#: elf-eh-frame.c:2491
+#: elf-eh-frame.c:2493
msgid ".eh_frame_hdr entry overflow"
msgstr "Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñу .eh_frame_hdr"
-#: elf-eh-frame.c:2493
+#: elf-eh-frame.c:2495
msgid ".eh_frame_hdr refers to overlapping FDEs"
msgstr ".eh_frame_hdr поÑилаєтьÑÑ Ð½Ð° FDE, Ñкі перекриваютьÑÑ"
@@ -885,46 +898,46 @@ msgstr ".eh_frame_hdr поÑилаєтьÑÑ Ð½Ð° FDE, Ñкі перекрива
msgid "%F%P: dynamic STT_GNU_IFUNC symbol `%s' with pointer equality in `%pB' can not be used when making an executable; recompile with -fPIE and relink with -pie\n"
msgstr "%F%P: динамічний Ñимвол STT_GNU_IFUNC «%s» з рівніÑÑ‚ÑŽ вказівників у «%pB» не можна викориÑтовувати під Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¾Ð³Ð¾ файла; виконайте повторну компілÑцію з -fPIE Ñ– повторне ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ -pie\n"
-#: elf-m10200.c:434 elf-m10300.c:2146 elf32-avr.c:1508 elf32-bfin.c:3131
-#: elf32-cr16.c:1432 elf32-cris.c:2034 elf32-crx.c:913 elf32-d10v.c:510
+#: elf-m10200.c:434 elf-m10300.c:2146 elf32-avr.c:1508 elf32-bfin.c:3137
+#: elf32-cr16.c:1429 elf32-cris.c:2034 elf32-crx.c:913 elf32-d10v.c:510
#: elf32-epiphany.c:562 elf32-fr30.c:594 elf32-frv.c:4049 elf32-ft32.c:493
#: elf32-h8300.c:523 elf32-ip2k.c:1477 elf32-iq2000.c:691 elf32-lm32.c:1070
#: elf32-m32c.c:624 elf32-m32r.c:2837 elf32-m68hc1x.c:1271 elf32-mep.c:522
#: elf32-metag.c:1984 elf32-microblaze.c:1623 elf32-moxie.c:288 elf32-mt.c:402
-#: elf32-nds32.c:6044 elf32-or1k.c:1861 elf32-score.c:2743 elf32-score7.c:2552
+#: elf32-nds32.c:6039 elf32-or1k.c:1873 elf32-score.c:2734 elf32-score7.c:2545
#: elf32-spu.c:5084 elf32-tilepro.c:3372 elf32-v850.c:2294 elf32-visium.c:680
#: elf32-xstormy16.c:930 elf64-bpf.c:552 elf64-mmix.c:1541 elfxx-tilegx.c:3742
msgid "internal error: out of range error"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: вихід за межі діапазону"
-#: elf-m10200.c:438 elf-m10300.c:2150 elf32-avr.c:1512 elf32-bfin.c:3135
-#: elf32-cr16.c:1436 elf32-cris.c:2038 elf32-crx.c:917 elf32-d10v.c:514
+#: elf-m10200.c:438 elf-m10300.c:2150 elf32-avr.c:1512 elf32-bfin.c:3141
+#: elf32-cr16.c:1433 elf32-cris.c:2038 elf32-crx.c:917 elf32-d10v.c:514
#: elf32-fr30.c:598 elf32-frv.c:4053 elf32-ft32.c:497 elf32-h8300.c:527
#: elf32-iq2000.c:695 elf32-lm32.c:1074 elf32-m32c.c:628 elf32-m32r.c:2841
#: elf32-m68hc1x.c:1275 elf32-mep.c:526 elf32-metag.c:1988
#: elf32-microblaze.c:1627 elf32-moxie.c:292 elf32-msp430.c:1510
-#: elf32-nds32.c:6048 elf32-or1k.c:1865 elf32-score.c:2747 elf32-score7.c:2556
+#: elf32-nds32.c:6043 elf32-or1k.c:1877 elf32-score.c:2738 elf32-score7.c:2549
#: elf32-spu.c:5088 elf32-tilepro.c:3376 elf32-v850.c:2298 elf32-visium.c:684
#: elf32-xstormy16.c:934 elf64-mmix.c:1545 elfxx-mips.c:10558
#: elfxx-tilegx.c:3746
msgid "internal error: unsupported relocation error"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: непідтримувана помилка переÑуваннÑ"
-#: elf-m10200.c:442 elf32-cr16.c:1440 elf32-crx.c:921 elf32-d10v.c:518
+#: elf-m10200.c:442 elf32-cr16.c:1437 elf32-crx.c:921 elf32-d10v.c:518
#: elf32-h8300.c:531 elf32-lm32.c:1078 elf32-m32r.c:2845 elf32-m68hc1x.c:1279
-#: elf32-microblaze.c:1631 elf32-nds32.c:6052 elf32-score.c:2751
-#: elf32-score7.c:2560 elf32-spu.c:5092
+#: elf32-microblaze.c:1631 elf32-nds32.c:6047 elf32-score.c:2742
+#: elf32-score7.c:2553 elf32-spu.c:5092
msgid "internal error: dangerous error"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: небезпечна помилка"
-#: elf-m10200.c:446 elf-m10300.c:2167 elf32-avr.c:1520 elf32-bfin.c:3143
-#: elf32-cr16.c:1444 elf32-cris.c:2046 elf32-crx.c:925 elf32-d10v.c:522
+#: elf-m10200.c:446 elf-m10300.c:2167 elf32-avr.c:1520 elf32-bfin.c:3149
+#: elf32-cr16.c:1441 elf32-cris.c:2046 elf32-crx.c:925 elf32-d10v.c:522
#: elf32-epiphany.c:577 elf32-fr30.c:606 elf32-frv.c:4061 elf32-ft32.c:505
#: elf32-h8300.c:535 elf32-ip2k.c:1492 elf32-iq2000.c:703 elf32-lm32.c:1082
#: elf32-m32c.c:636 elf32-m32r.c:2849 elf32-m68hc1x.c:1283 elf32-mep.c:534
#: elf32-metag.c:1996 elf32-microblaze.c:1635 elf32-moxie.c:300
-#: elf32-msp430.c:1518 elf32-mt.c:410 elf32-nds32.c:6056 elf32-or1k.c:1873
-#: elf32-score.c:2760 elf32-score7.c:2564 elf32-spu.c:5096
+#: elf32-msp430.c:1518 elf32-mt.c:410 elf32-nds32.c:6051 elf32-or1k.c:1885
+#: elf32-score.c:2751 elf32-score7.c:2557 elf32-spu.c:5096
#: elf32-tilepro.c:3384 elf32-v850.c:2318 elf32-visium.c:692
#: elf32-xstormy16.c:942 elf64-bpf.c:565 elf64-mmix.c:1553 elfxx-tilegx.c:3754
msgid "internal error: unknown error"
@@ -940,11 +953,11 @@ msgstr "%pB: непідтримуваний перехід з %s до %s"
msgid "%pB: %s' accessed both as normal and thread local symbol"
msgstr "%pB: доÑтуп до «%s» виконуєтьÑÑ Ñк до звичайного Ñимволу та локального Ð´Ð»Ñ Ð¿Ð¾Ñ‚Ð¾ÐºÑƒ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ñимволу"
-#: elf-m10300.c:2093 elf32-arm.c:13376 elf32-i386.c:3426 elf32-m32r.c:2331
+#: elf-m10300.c:2093 elf32-arm.c:13377 elf32-i386.c:3426 elf32-m32r.c:2331
#: elf32-m68k.c:3929 elf32-s390.c:3080 elf32-sh.c:3671 elf32-tilepro.c:3275
-#: elf32-xtensa.c:3024 elf64-s390.c:3029 elf64-x86-64.c:4082
+#: elf32-xtensa.c:3034 elf64-s390.c:3029 elf64-x86-64.c:4084
#: elfxx-sparc.c:2917 elfxx-sparc.c:3814 elfxx-tilegx.c:3665
-#: elfnn-aarch64.c:5501 elfnn-aarch64.c:7104
+#: elfnn-aarch64.c:5504 elfnn-aarch64.c:7107
#, c-format
msgid "%pB(%pA+%#<PRIx64>): unresolvable %s relocation against symbol `%s'"
msgstr "%pB(%pA+%#<PRIx64>): нерозв’Ñзне переÑÑƒÐ²Ð°Ð½Ð½Ñ %s щодо Ñимволу «%s»"
@@ -963,7 +976,7 @@ msgid "internal error: suspicious relocation type used in shared library"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: підозріливий тип переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ бібліотеці Ñпільного викориÑтаннÑ"
#: elf-m10300.c:2650 elf32-avr.c:2486 elf32-frv.c:5621 elf64-ia64-vms.c:365
-#: elfxx-sparc.c:2684 reloc.c:8282 reloc16.c:155 elfnn-ia64.c:365
+#: elfxx-sparc.c:2684 reloc.c:8373 reloc16.c:155 elfnn-ia64.c:365
msgid "%P%F: --relax and -r may not be used together\n"
msgstr "%P%F: --relax Ñ– -r не можна викориÑтовувати одночаÑно\n"
@@ -997,45 +1010,54 @@ msgstr "попередженнÑ: %pB: пошкоджено «не копіювÐ
msgid "error: %pB: <corrupt property (0x%x) size: 0x%x>"
msgstr "помилка: %pB: <пошкоджений розмір можливоÑÑ‚Ñ– (0x%x): 0x%x>"
-#: elf-properties.c:205
+#: elf-properties.c:217
#, c-format
msgid "warning: %pB: unsupported GNU_PROPERTY_TYPE (%ld) type: 0x%x"
msgstr "попередженнÑ: %pB: непідтримуваний тип GNU_PROPERTY_TYPE (%ld): 0x%x"
-#: elf-properties.c:391
+#: elf-properties.c:403
msgid "Removed property %W to merge %pB (0x%v) and %pB (0x%v)\n"
msgstr "Вилучено влаÑтивіÑÑ‚ÑŒ %W Ð´Ð»Ñ Ð¾Ð±'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ %pB (0x%v) з %pB (0x%v)\n"
-#: elf-properties.c:397
+#: elf-properties.c:409
msgid "Removed property %W to merge %pB (0x%v) and %pB (not found)\n"
msgstr "Вилучено влаÑтивіÑÑ‚ÑŒ %W Ð´Ð»Ñ Ð¾Ð±'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ %pB (0x%v) з %pB (не знайдено)\n"
-#: elf-properties.c:406 elf-properties.c:484
+#: elf-properties.c:418 elf-properties.c:496
msgid "Removed property %W to merge %pB and %pB\n"
msgstr "Вилучено влаÑтивіÑÑ‚ÑŒ %W Ð´Ð»Ñ Ð¾Ð±'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ %pB з %pB\n"
-#: elf-properties.c:410
+#: elf-properties.c:422
msgid "Removed property %W to merge %pB and %pB (not found)\n"
msgstr "Вилучено влаÑтивіÑÑ‚ÑŒ %W Ð´Ð»Ñ Ð¾Ð±'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ %pB з %pB (не знайдено)\n"
-#: elf-properties.c:427
+#: elf-properties.c:439
msgid "Updated property %W (0x%v) to merge %pB (0x%v) and %pB (0x%v)\n"
msgstr "Оновлено влаÑтивіÑÑ‚ÑŒ %W (0x%v) Ð´Ð»Ñ Ð¾Ð±'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ %pB (0x%v) з %pB (0x%v)\n"
-#: elf-properties.c:436
+#: elf-properties.c:448
msgid "Updated property %W (%v) to merge %pB (0x%v) and %pB (not found)\n"
msgstr "Оновлено влаÑтивіÑÑ‚ÑŒ %W (%v) Ð´Ð»Ñ Ð¾Ð±'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ %pB (0x%v) з %pB (не знайдено)\n"
-#: elf-properties.c:478
+#: elf-properties.c:490
msgid "Removed property %W to merge %pB (not found) and %pB (0x%v)\n"
msgstr "Вилучено влаÑтивіÑÑ‚ÑŒ %W Ð´Ð»Ñ Ð¾Ð±'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ %pB (не знайдено) з %pB (0x%v)\n"
+#: elf-properties.c:671 elfxx-aarch64.c:758 elfxx-x86.c:3716
+msgid "%F%P: failed to create GNU property section\n"
+msgstr "%F%P: не вдалоÑÑ Ñтворити розділ влаÑтивоÑтей GNU\n"
+
+#: elf-properties.c:675 elfxx-aarch64.c:762 elfxx-x86.c:3721
+#, c-format
+msgid "%F%pA: failed to align section\n"
+msgstr "%F%pA: не вдалоÑÑ Ð²Ð¸Ñ€Ñ–Ð²Ð½Ñти розмір\n"
+
#. Merge .note.gnu.property sections.
-#: elf-properties.c:640 elf-properties.c:642
+#: elf-properties.c:701 elf-properties.c:703
msgid "\n"
msgstr "\n"
-#: elf-properties.c:641
+#: elf-properties.c:702
msgid "Merging program properties\n"
msgstr "ВлаÑтивоÑÑ‚Ñ– програми об'єднаннÑ\n"
@@ -1050,7 +1072,7 @@ msgstr "%pB: Ñпроба Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñ€Ñдків із нерÑдÐ
msgid "%pB: invalid string offset %u >= %<PRIu64> for section `%s'"
msgstr "%pB: некоректний відÑтуп Ñ€Ñдка, %u >= %<PRIu64>, Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ «%s»"
-#: elf.c:514 elfnn-aarch64.c:8104
+#: elf.c:514 elfnn-aarch64.c:8107 elfnn-loongarch.c:3045
#, c-format
msgid "%pB symbol number %lu references nonexistent SHT_SYMTAB_SHNDX section"
msgstr "%pB номер Ñимволу %lu поÑилаєтьÑÑ Ð½Ð° розділ SHT_SYMTAB_SHNDX, Ñкого не Ñ–Ñнує"
@@ -1134,7 +1156,7 @@ msgstr ""
"\n"
"Динамічний розділ:\n"
-#: elf.c:1851
+#: elf.c:1854
#, c-format
msgid ""
"\n"
@@ -1143,7 +1165,7 @@ msgstr ""
"\n"
"Ð’Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²ÐµÑ€Ñій:\n"
-#: elf.c:1876
+#: elf.c:1879
#, c-format
msgid ""
"\n"
@@ -1152,97 +1174,101 @@ msgstr ""
"\n"
"ПоÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° верÑÑ–Ñ—:\n"
-#: elf.c:1881
+#: elf.c:1884
#, c-format
msgid " required from %s:\n"
msgstr " потрібні %s:\n"
-#: elf.c:2071
+#: elf.c:2075
#, c-format
msgid "%pB: warning: loop in section dependencies detected"
msgstr "%pB: попередженнÑ: виÑвлено зацикленіÑÑ‚ÑŒ залежноÑтей розділу"
-#: elf.c:2178
+#: elf.c:2182
#, c-format
msgid "%pB: warning: multiple symbol tables detected - ignoring the table in section %u"
msgstr "%pB: попередженнÑ: виÑвлено декілька таблиць Ñимволів — ігноруємо таблицю у розділі %u"
-#: elf.c:2262
+#: elf.c:2266
#, c-format
msgid "%pB: warning: multiple dynamic symbol tables detected - ignoring the table in section %u"
msgstr "%pB: попередженнÑ: виÑвлено декілька таблиць динамічних Ñимволів — ігноруємо таблицю у розділі %u"
-#: elf.c:2375
+#: elf.c:2385
#, c-format
msgid "%pB: invalid link %u for reloc section %s (index %u)"
msgstr "%pB: некоректне поÑÐ¸Ð»Ð°Ð½Ð½Ñ %u Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ переÑÑƒÐ²Ð°Ð½Ð½Ñ %s (Ñ–Ð½Ð´ÐµÐºÑ %u)"
-#: elf.c:2466
+#: elf.c:2442
#, c-format
msgid "%pB: warning: secondary relocation section '%s' for section %pA found - ignoring"
msgstr "%pB: попередженнÑ: знайдено розділ вторинних переÑувань «%s» Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %pA — ігноруємо"
-#: elf.c:2552 elf.c:2567 elf.c:2578 elf.c:2591
+#: elf.c:2528 elf.c:2543 elf.c:2554 elf.c:2567
#, c-format
msgid "%pB: unknown type [%#x] section `%s'"
msgstr "%pB: розділ невідомого типу [%#x], «%s»"
-#: elf.c:3288
+#: elf.c:3265
#, c-format
msgid "%pB: error: alignment power %d of section `%pA' is too big"
msgstr "%pB: помилка: Ñтепінь Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ %d розділу «%pA» Ñ” надто великою"
-#: elf.c:3321
+#: elf.c:3298
#, c-format
msgid "warning: section `%pA' type changed to PROGBITS"
msgstr "попередженнÑ: тип розділу «%pA» змінено на PROGBITS"
-#: elf.c:3805
+#: elf.c:3783
#, c-format
msgid "%pB: too many sections: %u"
msgstr "%pB: занадто багато розділів %u"
-#: elf.c:3891
+#: elf.c:3869
#, c-format
msgid "%pB: sh_link of section `%pA' points to discarded section `%pA' of `%pB'"
msgstr "%pB: sh_link розділу «%pA» вказує на відкинутий розділ «%pA» «%pB»"
-#: elf.c:3909
+#: elf.c:3887
#, c-format
msgid "%pB: sh_link of section `%pA' points to removed section `%pA' of `%pB'"
msgstr "%pB: sh_link розділу «%pA» вказує на вилучений розділ «%pA» «%pB»"
-#: elf.c:4471
+#: elf.c:4455
#, c-format
msgid "%pB: GNU_MBIND section `%pA' has invalid sh_info field: %d"
msgstr "%pB: у розділі GNU_MBIND «%pA» міÑтитьÑÑ Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ðµ поле sh_info: %d"
-#: elf.c:5065
+#: elf.c:4638
+msgid "%F%P: failed to size relative relocations\n"
+msgstr "%F%P: не вдалоÑÑ Ð²Ð¸Ð¼Ñ–Ñ€Ñти відноÑні переÑуваннÑ\n"
+
+#: elf.c:5062
#, c-format
msgid "%pB: TLS sections are not adjacent:"
msgstr "%pB: розділи TLS не Ñ” ÑуÑідніми:"
-#: elf.c:5072
+#: elf.c:5069
#, c-format
msgid "\t TLS: %pA"
msgstr "\t TLS: %pA"
-#: elf.c:5076
+#: elf.c:5073
#, c-format
msgid "\tnon-TLS: %pA"
msgstr "\tне-TLS: %pA"
-#: elf.c:5672
+#: elf.c:5696
#, c-format
msgid "%pB: The first section in the PT_DYNAMIC segment is not the .dynamic section"
msgstr "%pB: перший розділ у Ñегменті PT_DYNAMIC не Ñ” розділом .dynamic"
-#: elf.c:5698
+#: elf.c:5722
#, c-format
msgid "%pB: not enough room for program headers, try linking with -N"
msgstr "%pB: недоÑтатньо міÑÑ†Ñ Ð´Ð»Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÑ–Ð² програми, Ñпробуйте виконати ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ð· -N"
-#: elf.c:5815
+#: elf.c:5839
#, c-format
msgid "%pB: section %pA lma %#<PRIx64> adjusted to %#<PRIx64>"
msgstr "%pB: (розділ %pA) lma %#<PRIx64> Ñкориговано до %#<PRIx64>"
@@ -1250,172 +1276,177 @@ msgstr "%pB: (розділ %pA) lma %#<PRIx64> Ñкориговано до %#<PR
#. The fix for this error is usually to edit the linker script being
#. used and set up the program headers manually. Either that or
#. leave room for the headers at the start of the SECTIONS.
-#: elf.c:5952
+#: elf.c:5976
#, c-format
msgid "%pB: error: PHDR segment not covered by LOAD segment"
msgstr "%pB: помилка: Ñегмент PHDR не покриваєтьÑÑ Ñегментом LOAD"
-#: elf.c:5992
+#: elf.c:6016
#, c-format
msgid "%pB: section `%pA' can't be allocated in segment %d"
msgstr "%pB: розділ «%pA» не може бути розподілено у Ñегменті %d"
-#: elf.c:6129
+#: elf.c:6156
#, c-format
msgid "%pB: warning: allocated section `%s' not in segment"
msgstr "%pB: попередженнÑ: розподілений розділ «%s» перебуває за межами Ñегмента"
-#: elf.c:6290
+#: elf.c:6292
+#, c-format
+msgid "%pB: warning: unable to allocate any sections to PT_GNU_RELRO segment"
+msgstr "%pB: попередженнÑ: не вдалоÑÑ Ñ€Ð¾Ð·Ð¼Ñ–Ñтити жодних розділів у Ñегменті PT_GNU_RELRO"
+
+#: elf.c:6322
#, c-format
msgid "%pB: error: non-load segment %d includes file header and/or program header"
msgstr "%pB: помилка: незавантажуваний Ñегмент %d включає заголовок файла Ñ–/або заголовок програми"
-#: elf.c:6799
+#: elf.c:6829
#, c-format
msgid "%pB: symbol `%s' required but not present"
msgstr "%pB: потрібен Ñимвол «%s», але його немає"
-#: elf.c:7151
+#: elf.c:7186
#, c-format
msgid "%pB: warning: empty loadable segment detected at vaddr=%#<PRIx64>, is this intentional?"
msgstr "%pB: попередженнÑ: виÑвлено порожній завантажувальний Ñегмент за vaddr=%#<PRIx64>, так Ñ– треба?"
-#: elf.c:7779
+#: elf.c:7851
#, c-format
msgid "%pB: warning: segment alignment of %#<PRIx64> is too large"
msgstr "%pB: попередженнÑ: Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ Ñегмента %#<PRIx64> Ñ” надто великим"
-#: elf.c:8292
+#: elf.c:8359
#, c-format
msgid "%pB: Unable to handle section index %x in ELF symbol. Using ABS instead."
msgstr "%pB: не вдалоÑÑ Ð¾Ð±Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸ Ñ–Ð½Ð´ÐµÐºÑ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %x у Ñимволі ELF. ВикориÑтовуємо заміÑÑ‚ÑŒ нього ABS."
-#: elf.c:8322
+#: elf.c:8389
#, c-format
msgid "unable to find equivalent output section for symbol '%s' from section '%s'"
msgstr "не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ рівноцінний розділ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… Ð´Ð»Ñ Ñимволу «%s» з розділу «%s»"
-#: elf.c:8735
+#: elf.c:8799
#, c-format
msgid "%pB: .gnu.version_r invalid entry"
msgstr "%pB: некоректний Ð·Ð°Ð¿Ð¸Ñ .gnu.version_r"
-#: elf.c:8868
+#: elf.c:8932
#, c-format
msgid "%pB: .gnu.version_d invalid entry"
msgstr "%pB: некоректний Ð·Ð°Ð¿Ð¸Ñ .gnu.version_d"
-#: elf.c:9325
+#: elf.c:9389
#, c-format
msgid "%pB:%pA: error: attempting to write into an unallocated compressed section"
msgstr "%pB:%pA: помилка: Ñпроба запиÑу до нерозподіленого ÑтиÑненого розділу"
-#: elf.c:9334
+#: elf.c:9398
#, c-format
msgid "%pB:%pA: error: attempting to write over the end of the section"
msgstr "%pB:%pA: помилка: Ñпроба запиÑу за кінцем розділу"
-#: elf.c:9345
+#: elf.c:9409
#, c-format
msgid "%pB:%pA: error: attempting to write section into an empty buffer"
msgstr "%pB:%pA: помилка: Ñпроба запиÑу розділу до порожнього буфера"
-#: elf.c:10246
+#: elf.c:10317
#, c-format
msgid "%pB: warning: win32pstatus %s of size %lu bytes is too small"
msgstr "%pB: попередженнÑ: win32pstatus %s розміру у %lu байтів Ñ” надто малим"
-#: elf.c:10324
+#: elf.c:10395
#, c-format
msgid "%pB: win32pstatus NOTE_INFO_MODULE of size %lu is too small to contain a name of size %u"
msgstr "%pB: win32pstatus NOTE_INFO_MODULE розміру %lu Ñ” надто малим, щоб міÑтити назву розміру %u"
-#: elf.c:12633
+#: elf.c:12977
msgid "GNU_MBIND section is supported only by GNU and FreeBSD targets"
msgstr "підтримку розділу GNU_MBIND передбачено лише Ð´Ð»Ñ Ñ†Ñ–Ð»ÐµÐ¹ GNU Ñ– FreeBSD"
-#: elf.c:12636
+#: elf.c:12980
msgid "symbol type STT_GNU_IFUNC is supported only by GNU and FreeBSD targets"
msgstr "підтримку типу Ñимволів STT_GNU_IFUNC передбачено лише Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½ÑŒ GNU та FreeBSD"
-#: elf.c:12639
+#: elf.c:12983
msgid "symbol binding STB_GNU_UNIQUE is supported only by GNU and FreeBSD targets"
msgstr "підтримку прив'Ñзки STB_GNU_UNIQUE передбачено лише Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½ÑŒ GNU та FreeBSD"
-#: elf.c:12642
+#: elf.c:12986
msgid "GNU_RETAIN section is supported only by GNU and FreeBSD targets"
msgstr "підтримку розділу GNU_RETAIN передбачено лише Ð´Ð»Ñ Ñ†Ñ–Ð»ÐµÐ¹ GNU Ñ– FreeBSD"
-#: elf.c:12850 elf64-sparc.c:123 elfcode.h:1504
+#: elf.c:13194 elf64-sparc.c:123 elfcode.h:1505
#, c-format
msgid "%pB(%pA): relocation %d has invalid symbol index %ld"
msgstr "%pB(%pA): переÑÑƒÐ²Ð°Ð½Ð½Ñ %d міÑтить некоректний Ñ–Ð½Ð´ÐµÐºÑ Ñимволу, %ld"
-#: elf.c:12925
+#: elf.c:13269
#, c-format
msgid "%pB(%pA): link section cannot be set because the output file does not have a symbol table"
msgstr "%pB(%pA): не можна вÑтановлювати розділ компонуваннÑ, оÑкільки у файлі результатів немає таблиці Ñимволів"
-#: elf.c:12937
+#: elf.c:13281
#, c-format
msgid "%pB(%pA): info section index is invalid"
msgstr "%pB(%pA): покажчик розділу info є некоректним"
-#: elf.c:12951
+#: elf.c:13295
#, c-format
msgid "%pB(%pA): info section index cannot be set because the section is not in the output"
msgstr "%pB(%pA): не можна вÑтановлювати Ñ–Ð½Ð´ÐµÐºÑ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ info, оÑкільки цього розділу немає у виведенні"
-#: elf.c:13026
+#: elf.c:13370
#, c-format
msgid "%pB(%pA): error: secondary reloc section processed twice"
msgstr "%pB(%pA): помилка: розділ вторинних переÑувань оброблено двічі"
-#: elf.c:13038
+#: elf.c:13382
#, c-format
msgid "%pB(%pA): error: secondary reloc section has zero sized entries"
msgstr "%pB(%pA): помилка: розділ вторинних переÑувань міÑтить запиÑи нульового розміру"
-#: elf.c:13049
+#: elf.c:13393
#, c-format
msgid "%pB(%pA): error: secondary reloc section has non-standard sized entries"
msgstr "%pB(%pA): помилка: розділ вторинних переÑувань міÑтить запиÑи неÑтандартного розміру"
-#: elf.c:13061
+#: elf.c:13405
#, c-format
msgid "%pB(%pA): error: secondary reloc section is empty!"
msgstr "%pB(%pA): помилка: розділ вторинних переÑувань Ñ” порожнім!"
-#: elf.c:13084
+#: elf.c:13428
#, c-format
msgid "%pB(%pA): error: internal relocs missing for secondary reloc section"
msgstr "%pB(%pA): помилка: пропущено внутрішні переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ вторинних переÑувань"
-#: elf.c:13103
+#: elf.c:13447
#, c-format
msgid "%pB(%pA): error: reloc table entry %u is empty"
msgstr "%pB(%pA): помилка: Ð·Ð°Ð¿Ð¸Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– переÑувань %u Ñ” порожнім"
-#: elf.c:13128
+#: elf.c:13472
#, c-format
msgid "%pB(%pA): error: secondary reloc %u references a missing symbol"
msgstr "%pB(%pA): помилка: вторинне переÑÑƒÐ²Ð°Ð½Ð½Ñ %u поÑилаєтьÑÑ Ð½Ð° Ñимвол, Ñкого немає"
-#: elf.c:13145
+#: elf.c:13489
#, c-format
msgid "%pB(%pA): error: secondary reloc %u references a deleted symbol"
msgstr "%pB(%pA): помилка: вторинне переÑÑƒÐ²Ð°Ð½Ð½Ñ %u поÑилаєтьÑÑ Ð½Ð° Ñимвол, Ñкий вилучено"
-#: elf.c:13158
+#: elf.c:13502
#, c-format
msgid "%pB(%pA): error: secondary reloc %u is of an unknown type"
msgstr "%pB(%pA): помилка: вторинне переÑÑƒÐ²Ð°Ð½Ð½Ñ %u належить до невідомого типу"
#. Ignore init flag - it may not be set, despite the flags field
#. containing valid data.
-#: elf32-arc.c:455 elf32-arm.c:15047 elf32-frv.c:6612 elf32-iq2000.c:868
-#: elf32-m32c.c:914 elf32-mt.c:560 elf32-rl78.c:1260 elf32-rx.c:3206
-#: elf32-visium.c:844 elf64-ppc.c:5347 elfnn-aarch64.c:7334
+#: elf32-arc.c:455 elf32-arm.c:15095 elf32-frv.c:6612 elf32-iq2000.c:868
+#: elf32-m32c.c:914 elf32-mt.c:560 elf32-rl78.c:1275 elf32-rx.c:3217
+#: elf32-visium.c:844 elf64-ppc.c:5507 elfnn-aarch64.c:7337
#, c-format
msgid "private flags = 0x%lx:"
msgstr "закриті прапорці = 0x%lx:"
@@ -1461,7 +1492,7 @@ msgid "error: attempting to link %pB with a binary %pB of different architecture
msgstr "помилка: Ñпроба ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ %pB зі виконуваним файлом %pB іншої архітектури"
#: elf32-arc.c:938 elf32-iq2000.c:844 elf32-m32c.c:889 elf32-m68hc1x.c:1390
-#: elf32-ppc.c:3866 elf64-sparc.c:722 elfxx-mips.c:15568
+#: elf32-ppc.c:3881 elf64-sparc.c:722 elfxx-mips.c:15584
#, c-format
msgid "%pB: uses different e_flags (%#x) fields than previous modules (%#x)"
msgstr "%pB: викориÑтовуютьÑÑ Ñ–Ð½ÑˆÑ– Ð¿Ð¾Ð»Ñ e_flags (%#x) ніж у попередніх модулÑÑ… (%#x)"
@@ -1488,33 +1519,33 @@ msgstr "%pB(%pA+%#<PRIx64>): переÑÑƒÐ²Ð°Ð½Ð½Ñ CMEM до «%s+%#<PRIx64>»
msgid "GOT and PLT relocations cannot be fixed with a non dynamic linker"
msgstr "ПереÑÑƒÐ²Ð°Ð½Ð½Ñ GOT Ñ– PLT не може бути виправлено, Ñкщо компонувальник Ñ” нединамічним"
-#: elf32-arc.c:1909 elf32-rl78.c:1098 elf32-rx.c:1475
+#: elf32-arc.c:1909 elf32-rx.c:1486
#, c-format
msgid "%pB(%pA): warning: unaligned access to symbol '%s' in the small data area"
msgstr "%pB(%pA): попередженнÑ: невирівнÑний доÑтуп до Ñимволу «%s» у малій облаÑÑ‚Ñ– даних"
-#: elf32-arc.c:1914 elf32-rl78.c:1103 elf32-rx.c:1480
+#: elf32-arc.c:1914 elf32-rx.c:1491
#, c-format
msgid "%pB(%pA): internal error: out of range error"
msgstr "%pB(%pA): Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: вихід за межі діапазону"
-#: elf32-arc.c:1919 elf32-rl78.c:1108 elf32-rx.c:1485
+#: elf32-arc.c:1919 elf32-rx.c:1496
#, c-format
msgid "%pB(%pA): internal error: unsupported relocation error"
msgstr "%pB(%pA): Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: непідтримувана помилка переÑуваннÑ"
-#: elf32-arc.c:1924 elf32-rl78.c:1113 elf32-rx.c:1490
+#: elf32-arc.c:1924 elf32-rx.c:1501
#, c-format
msgid "%pB(%pA): internal error: dangerous relocation"
msgstr "%pB(%pA): Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: небезпечне переÑуваннÑ"
-#: elf32-arc.c:1929 elf32-rl78.c:1118 elf32-rx.c:1495
+#: elf32-arc.c:1929 elf32-rx.c:1506
#, c-format
msgid "%pB(%pA): internal error: unknown error"
msgstr "%pB(%pA): Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: невідома помилка"
-#: elf32-arc.c:2023 elf32-arc.c:2091 elf32-arm.c:15502 elf32-metag.c:2251
-#: elf32-nds32.c:5494 elfnn-aarch64.c:7741 elfnn-riscv.c:617
+#: elf32-arc.c:2023 elf32-arc.c:2091 elf32-arm.c:15550 elf32-metag.c:2251
+#: elf32-nds32.c:5489 elfnn-aarch64.c:7744 elfnn-riscv.c:617
#, c-format
msgid "%pB: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC"
msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ %s щодо «%s» не можна викориÑтовувати під Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñпільного викориÑтаннÑ; повторно зберіть з -fPIC"
@@ -1529,596 +1560,597 @@ msgstr "%pB: невідомий обов’Ñзковий атрибути обâ
msgid "warning: %pB: unknown ARC object attribute %d"
msgstr "попередженнÑ: %pB: невідомий атрибут об’єкта ARC %d"
-#: elf32-arm.c:4333 elf32-arm.c:4367 elf32-arm.c:4386 elf32-arm.c:4438
+#: elf32-arm.c:4334 elf32-arm.c:4368 elf32-arm.c:4387 elf32-arm.c:4439
#, c-format
msgid "%pB(%pA): 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"
msgstr "%pB(%pA): попередженнÑ: викориÑÑ‚Ð°Ð½Ð½Ñ Ð´Ð¾Ð²Ð³Ð¸Ñ… зовнішніх гілок у розділах із атрибутом розділу SHF_ARM_PURECODE передбачено лише Ð´Ð»Ñ Ñ†Ñ–Ð»ÐµÐ¹ з профілем M, у Ñких реалізовано інÑтрукцію movw."
-#: elf32-arm.c:4398 elf32-arm.c:4452 elf32-arm.c:9141 elf32-arm.c:9231
+#: elf32-arm.c:4399 elf32-arm.c:4453 elf32-arm.c:9142 elf32-arm.c:9232
#, c-format
msgid "%pB(%s): warning: interworking not enabled; first occurrence: %pB: %s call to %s"
msgstr "%pB(%s): попередженнÑ: ÑуміÑну роботу не увімкнено; перша згадка: %pB: виклик %s до %s"
-#: elf32-arm.c:4578
+#: elf32-arm.c:4579
#, c-format
msgid "ERROR: CMSE stub (%s section) too far (%#<PRIx64>) from destination (%#<PRIx64>)"
msgstr "Помилка: замінник CMSE (розділ %s) Ñ” надто далеким (%#<PRIx64>) від Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ (%#<PRIx64>)"
-#: elf32-arm.c:4747
+#: elf32-arm.c:4748
#, c-format
msgid "no address assigned to the veneers output section %s"
msgstr "із розділом Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð½Ð°Ð·Ð¾Ð²Ð½Ñ– %s не пов’Ñзано адреÑи"
-#: elf32-arm.c:4822 elf32-arm.c:6968 elf32-csky.c:3400 elf32-hppa.c:582
-#: elf32-m68hc1x.c:164 elf32-metag.c:1180 elf32-nios2.c:2201 elf64-ppc.c:3827
-#: elf64-ppc.c:13638 elfnn-aarch64.c:3187
+#: elf32-arm.c:4823 elf32-arm.c:6969 elf32-csky.c:3400 elf32-hppa.c:582
+#: elf32-m68hc1x.c:164 elf32-metag.c:1180 elf32-nios2.c:2201 elf64-ppc.c:3881
+#: elf64-ppc.c:14018 elfnn-aarch64.c:3187
#, c-format
msgid "%pB: cannot create stub entry %s"
msgstr "%pB: не вдалоÑÑ Ñтворити шаблонний Ð·Ð°Ð¿Ð¸Ñ %s"
-#: elf32-arm.c:5043 elf32-csky.c:3742 elf32-hppa.c:732 elf32-m68hc11.c:422
-#: elf32-m68hc12.c:542 elf32-metag.c:3345 elf32-nios2.c:2494 elf64-ppc.c:11473
+#: elf32-arm.c:5044 elf32-csky.c:3742 elf32-hppa.c:732 elf32-m68hc11.c:422
+#: elf32-m68hc12.c:542 elf32-metag.c:3345 elf32-nios2.c:2494 elf64-ppc.c:11656
#: elfnn-aarch64.c:3256
msgid "%F%P: Could not assign '%pA' to an output section. Retry without --enable-non-contiguous-regions.\n"
msgstr "%F%P: не вдалоÑÑ Ð¿Ð¾Ð²'Ñзати «%pA» із розділом виведеннÑ. Повторіть без --enable-non-contiguous-regions.\n"
-#: elf32-arm.c:6011
+#: elf32-arm.c:6012
#, c-format
msgid "%pB: special symbol `%s' only allowed for ARMv8-M architecture or later"
msgstr "%pB: Ñпеціальний Ñимвол «%s» можна викориÑтовувати лише Ð´Ð»Ñ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ ARMv8-M Ñ– новіших архітектур"
-#: elf32-arm.c:6020
+#: elf32-arm.c:6021
#, c-format
msgid "%pB: invalid special symbol `%s'; it must be a global or weak function symbol"
msgstr "%pB: некоректний Ñпеціальний Ñимвол «%s»; це має бути Ñимвол загальної або Ñлабкої функції"
-#: elf32-arm.c:6059
+#: elf32-arm.c:6060
#, c-format
msgid "%pB: invalid standard symbol `%s'; it must be a global or weak function symbol"
msgstr "%pB: некоректний Ñтандартний Ñимвол «%s»; це має бути загальний (global) або Ñлабкий (weak) Ñимвол функції."
-#: elf32-arm.c:6065
+#: elf32-arm.c:6066
#, c-format
msgid "%pB: absent standard symbol `%s'"
msgstr "%pB: немає Ñтандартного Ñимволу «%s»."
-#: elf32-arm.c:6077
+#: elf32-arm.c:6078
#, c-format
msgid "%pB: `%s' and its special symbol are in different sections"
msgstr "%pB: «%s» Ñ– Ñ—Ñ— Ñпеціальний Ñимвол перебувають у різних розділах."
-#: elf32-arm.c:6089
+#: elf32-arm.c:6090
#, c-format
msgid "%pB: entry function `%s' not output"
msgstr "%pB: вхідна Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ Â«%s» не виводить даних"
-#: elf32-arm.c:6096
+#: elf32-arm.c:6097
#, c-format
msgid "%pB: entry function `%s' is empty"
msgstr "%pB: вхідна Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ Â«%s» Ñ” порожньою"
-#: elf32-arm.c:6225
+#: elf32-arm.c:6226
#, c-format
msgid "%pB: --in-implib only supported for Secure Gateway import libraries"
msgstr "%pB: підтримку --in-implib передбачено лише Ð´Ð»Ñ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÐº Secure Gateway"
-#: elf32-arm.c:6274
+#: elf32-arm.c:6275
#, c-format
msgid "%pB: invalid import library entry: `%s'; symbol should be absolute, global and refer to Thumb functions"
msgstr "%pB: некоректний Ð·Ð°Ð¿Ð¸Ñ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÐºÐ¸: «%s»; Ñимвол має бути абÑолютним, загальним Ñ– поÑилатиÑÑ Ð½Ð° функції Thumb."
-#: elf32-arm.c:6296
+#: elf32-arm.c:6297
#, c-format
msgid "entry function `%s' disappeared from secure code"
msgstr "вхідна Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ Â«%s» зникла з безпечного коду"
-#: elf32-arm.c:6320
+#: elf32-arm.c:6321
#, c-format
msgid "`%s' refers to a non entry function"
msgstr "«%s» поÑилаєтьÑÑ Ð½Ð° функцію без входу"
-#: elf32-arm.c:6335
+#: elf32-arm.c:6336
#, c-format
msgid "%pB: visibility of symbol `%s' has changed"
msgstr "%pB: змінено видиміÑÑ‚ÑŒ Ñимволу «%s»"
-#: elf32-arm.c:6344
+#: elf32-arm.c:6345
#, c-format
msgid "%pB: incorrect size for symbol `%s'"
msgstr "%pB: некоректний розмір Ñимволу «%s»"
-#: elf32-arm.c:6363
+#: elf32-arm.c:6364
#, c-format
msgid "offset of veneer for entry function `%s' not a multiple of its size"
msgstr "зÑув обгортки Ð´Ð»Ñ Ð²Ñ…Ñ–Ð´Ð½Ð¾Ñ— функції «%s» не Ñ” кратним до Ñ—Ñ— розміру"
-#: elf32-arm.c:6383
+#: elf32-arm.c:6384
msgid "new entry function(s) introduced but no output import library specified:"
msgstr "впроваджено нові вхідні функції, але не вказано бібліотеки Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ…:"
-#: elf32-arm.c:6391
+#: elf32-arm.c:6392
#, c-format
msgid "start address of `%s' is different from previous link"
msgstr "початкова адреÑа «%s» Ñ” іншою з попереднього поÑиланнÑ"
-#: elf32-arm.c:7101 elf32-arm.c:7136
+#: elf32-arm.c:7102 elf32-arm.c:7137
#, c-format
msgid "unable to find %s glue '%s' for '%s'"
msgstr "не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñклейку %s «%s» Ð´Ð»Ñ Â«%s»"
-#: elf32-arm.c:7847
+#: elf32-arm.c:7848
#, c-format
msgid "%pB: BE8 images only valid in big-endian mode"
msgstr "%pB: образи BE8 є чинними лише у режимі big-endian"
#. Give a warning, but do as the user requests anyway.
-#: elf32-arm.c:8074
+#: elf32-arm.c:8075
#, c-format
msgid "%pB: warning: selected VFP11 erratum workaround is not necessary for target architecture"
msgstr "%pB: попередженнÑ: вибраний ÑпоÑіб ÑƒÐ½Ð¸ÐºÐ½ÐµÐ½Ð½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸ VFP11 не Ñ” необхідним Ð´Ð»Ñ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ призначеннÑ"
-#: elf32-arm.c:8101
+#: elf32-arm.c:8102
#, c-format
msgid "%pB: warning: selected STM32L4XX erratum workaround is not necessary for target architecture"
msgstr "%pB: попередженнÑ: вибраний ÑпоÑіб ÑƒÐ½Ð¸ÐºÐ½ÐµÐ½Ð½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸ STM32L4XX не Ñ” необхідним Ð´Ð»Ñ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ призначеннÑ"
-#: elf32-arm.c:8637 elf32-arm.c:8657 elf32-arm.c:8724 elf32-arm.c:8743
+#: elf32-arm.c:8638 elf32-arm.c:8658 elf32-arm.c:8725 elf32-arm.c:8744
#, c-format
msgid "%pB: unable to find %s veneer `%s'"
msgstr "%pB: не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ обгортку %s «%s»"
-#: elf32-arm.c:8950
+#: elf32-arm.c:8951
#, c-format
msgid "%pB(%pA+%#x): error: multiple load detected in non-last IT block instruction: STM32L4XX veneer cannot be generated; use gcc option -mrestrict-it to generate only one instruction per IT block"
msgstr "%pB(%pA+%#x): помилка: виÑвлено декілька завантажень у неоÑтанній інÑтрукції блоку IT: обгортку STM32L4XX не може бути Ñтворено. СкориÑтайтеÑÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ gcc -mrestrict-it, щоб Ñтворювати лише одну інÑтрукцію на блок IT."
-#: elf32-arm.c:9048
+#: elf32-arm.c:9049
#, c-format
msgid "invalid TARGET2 relocation type '%s'"
msgstr "некоректний тип переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ TARGET2, «%s»"
#. FIXME: We ought to be able to generate thumb-1 PLT
#. instructions...
-#: elf32-arm.c:9818
+#: elf32-arm.c:9819
#, c-format
msgid "%pB: warning: thumb-1 mode PLT generation not currently supported"
msgstr "%pB: попередженнÑ: у поточній верÑÑ–Ñ— не передбачено підтримки ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ PLT у режимі thumb-1"
-#: elf32-arm.c:10127 elf32-arm.c:10169
+#: elf32-arm.c:10128 elf32-arm.c:10170
#, c-format
msgid "%pB(%pA+%#<PRIx64>): unexpected %s instruction '%#lx' in TLS trampoline"
msgstr "%pB(%pA+%#<PRIx64>): неочікувана команда %s, «%#lx», у трампліні TLS"
-#: elf32-arm.c:10519
+#: elf32-arm.c:10520
msgid "shared object"
msgstr "Ñпільний об'єкт"
-#: elf32-arm.c:10522
+#: elf32-arm.c:10523
msgid "PIE executable"
msgstr "Виконуваний файл PIE"
-#: elf32-arm.c:10525
+#: elf32-arm.c:10526
#, c-format
msgid "%pB: relocation %s against external or undefined symbol `%s' can not be used when making a %s; recompile with -fPIC"
msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ %s щодо зовнішнього або невизначено Ñимволу «%s» не можна викориÑтовувати під Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ %s; повторно зберіть з -fPIC"
-#: elf32-arm.c:10627 elf32-arm.c:11044
+#: elf32-arm.c:10628 elf32-arm.c:11045
#, c-format
msgid "%pB: warning: %s BLX instruction targets %s function '%s'"
msgstr "%pB: попередженнÑ: команда %s BLX вказує на функцію %s «%s»."
-#: elf32-arm.c:11678
+#: elf32-arm.c:11679
#, c-format
msgid "%pB: expected symbol index in range 0..%lu but found local symbol with index %lu"
msgstr "%pB: мало бути викориÑтано Ñ–Ð½Ð´ÐµÐºÑ Ñимволу у діапазоні від 0 до %lu, втім, виÑвлено локальний Ñимвол із індекÑом %lu"
-#: elf32-arm.c:11953 elf32-arm.c:11979
+#: elf32-arm.c:11954 elf32-arm.c:11980
#, c-format
msgid "%pB(%pA+%#<PRIx64>): unexpected %s instruction '%#lx' referenced by TLS_GOTDESC"
msgstr "%pB(%pA+%#<PRIx64>): неочікувана команда %s, «%#lx», на Ñку поÑилаєтьÑÑ TLS_GOTDESC"
-#: elf32-arm.c:12025 elf32-csky.c:4970 elf32-m68k.c:3733 elf32-metag.c:1913
+#: elf32-arm.c:12026 elf32-csky.c:4970 elf32-m68k.c:3733 elf32-metag.c:1913
#: elf32-nios2.c:4382
#, c-format
msgid "%pB(%pA+%#<PRIx64>): %s relocation not permitted in shared object"
msgstr "%pB(%pA+%#<PRIx64>): переÑÑƒÐ²Ð°Ð½Ð½Ñ %s у об’єкті Ñпільного викориÑÑ‚Ð°Ð½Ð½Ñ Ð·Ð°Ð±Ð¾Ñ€Ð¾Ð½ÐµÐ½Ð¾"
-#: elf32-arm.c:12239
+#: elf32-arm.c:12240
#, c-format
msgid "%pB(%pA+%#<PRIx64>): only ADD or SUB instructions are allowed for ALU group relocations"
msgstr "%pB(%pA+%#<PRIx64>): Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÑувань груп ALU можна викориÑтовувати лише команди ADD або SUB"
-#: elf32-arm.c:12280 elf32-arm.c:12372 elf32-arm.c:12460 elf32-arm.c:12550
+#: elf32-arm.c:12281 elf32-arm.c:12373 elf32-arm.c:12461 elf32-arm.c:12551
#, c-format
msgid "%pB(%pA+%#<PRIx64>): overflow whilst splitting %#<PRIx64> for group relocation %s"
msgstr "%pB(%pA+%#<PRIx64>): Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ Ñпроби поділу %#<PRIx64> з метою групового переÑÑƒÐ²Ð°Ð½Ð½Ñ %s"
-#: elf32-arm.c:12608 elf32-arm.c:12767
+#: elf32-arm.c:12609 elf32-arm.c:12768
msgid "local symbol index too big"
msgstr "Ñ–Ð½Ð´ÐµÐºÑ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñимволу Ñ” надто великим"
-#: elf32-arm.c:12618 elf32-arm.c:12652
+#: elf32-arm.c:12619 elf32-arm.c:12653
msgid "no dynamic index information available"
msgstr "немає доÑтупних даних динамічного покажчика"
-#: elf32-arm.c:12660
+#: elf32-arm.c:12661
msgid "invalid dynamic index"
msgstr "некоректний динамічний індекÑ"
-#: elf32-arm.c:12777
+#: elf32-arm.c:12778
msgid "dynamic index information not available"
msgstr "дані динамічного покажчика недоÑтупні"
-#: elf32-arm.c:13208 elf32-sh.c:3565
+#: elf32-arm.c:13209 elf32-sh.c:3565
#, c-format
msgid "%pB(%pA+%#<PRIx64>): %s relocation against SEC_MERGE section"
msgstr "%pB(%pA+%#<PRIx64>): переÑÑƒÐ²Ð°Ð½Ð½Ñ %s щодо розділу SEC_MERGE"
-#: elf32-arm.c:13321 elf32-m68k.c:3966 elf32-xtensa.c:2762
-#: elfnn-aarch64.c:6831
+#: elf32-arm.c:13322 elf32-m68k.c:3966 elf32-xtensa.c:2772
+#: elfnn-aarch64.c:6834
#, c-format
msgid "%pB(%pA+%#<PRIx64>): %s used with TLS symbol %s"
msgstr "%pB(%pA+%#<PRIx64>): %s викориÑтовуєтьÑÑ Ð· Ñимволом TLS %s"
-#: elf32-arm.c:13323 elf32-m68k.c:3968 elf32-xtensa.c:2764
-#: elfnn-aarch64.c:6833
+#: elf32-arm.c:13324 elf32-m68k.c:3968 elf32-xtensa.c:2774
+#: elfnn-aarch64.c:6836
#, c-format
msgid "%pB(%pA+%#<PRIx64>): %s used with non-TLS symbol %s"
msgstr "%pB(%pA+%#<PRIx64>): %s викориÑтовуєтьÑÑ Ð· Ñимволом поза TLS %s"
-#: elf32-arm.c:13406 elf32-tic6x.c:2649 elfnn-aarch64.c:7168
+#: elf32-arm.c:13407 elf32-tic6x.c:2649 elfnn-aarch64.c:7171
msgid "out of range"
msgstr "поза діапазоном"
-#: elf32-arm.c:13410 elf32-nios2.c:4516 elf32-pru.c:936 elf32-tic6x.c:2653
-#: elfnn-aarch64.c:7172
+#: elf32-arm.c:13411 elf32-nios2.c:4516 elf32-pru.c:936 elf32-tic6x.c:2653
+#: elfnn-aarch64.c:7175
msgid "unsupported relocation"
msgstr "непідтримуване переÑуваннÑ"
-#: elf32-arm.c:13418 elf32-nios2.c:4526 elf32-pru.c:946 elf32-tic6x.c:2661
-#: elfnn-aarch64.c:7180
+#: elf32-arm.c:13419 elf32-nios2.c:4526 elf32-pru.c:946 elf32-tic6x.c:2661
+#: elfnn-aarch64.c:7183
msgid "unknown error"
msgstr "невідома помилка"
-#: elf32-arm.c:13898
+#: elf32-arm.c:13901
#, c-format
msgid "warning: not setting interworking flag of %pB since it has already been specified as non-interworking"
msgstr "попередженнÑ: прапорець ÑуміÑної роботи у %pB не вÑтановлено, оÑкільки його вже було визначено так, щоб він заборонÑв ÑуміÑну роботу"
-#: elf32-arm.c:13902
+#: elf32-arm.c:13905
#, c-format
msgid "warning: clearing the interworking flag of %pB due to outside request"
msgstr "попередженнÑ: знÑто прапорець ÑуміÑної роботи у %pB у відповідь на запит ззовні"
-#: elf32-arm.c:13947
+#: elf32-arm.c:13950
#, c-format
msgid "warning: clearing the interworking flag of %pB because non-interworking code in %pB has been linked with it"
msgstr "попередженнÑ: знÑто прапорець ÑуміÑної роботи у %pB, оÑкільки з ним компонуєтьÑÑ ÐºÐ¾Ð´, Ñкий непридатний до Ñпільної роботи, у %pB"
-#: elf32-arm.c:14034
+#: elf32-arm.c:14037
#, c-format
msgid "%pB: unknown mandatory EABI object attribute %d"
msgstr "%pB: невідомий обов’Ñзковий атрибути об’єкта EABI %d"
-#: elf32-arm.c:14042
+#: elf32-arm.c:14045
#, c-format
msgid "warning: %pB: unknown EABI object attribute %d"
msgstr "попередженнÑ: %pB: невідомий атрибут об’єкта EABI %d"
-#: elf32-arm.c:14342
+#: elf32-arm.c:14380
#, c-format
msgid "error: %pB: unknown CPU architecture"
msgstr "помилка: %pB: невідома архітектура процеÑора"
-#: elf32-arm.c:14380 elf32-nios2.c:2950
+#: elf32-arm.c:14418 elf32-nios2.c:2950
#, c-format
msgid "error: %pB: conflicting CPU architectures %d/%d"
msgstr "помилка: %pB: конфлікт архітектур процеÑорів %d/%d"
-#: elf32-arm.c:14477
+#: elf32-arm.c:14515
#, c-format
msgid "Error: %pB has both the current and legacy Tag_MPextension_use attributes"
msgstr "Помилка: Ð´Ð»Ñ %pB визначено одразу обидва атрибути Tag_MPextension_use, current Ñ– legacy"
-#: elf32-arm.c:14506
+#: elf32-arm.c:14544
#, c-format
msgid "error: %pB uses VFP register arguments, %pB does not"
msgstr "помилка: у %pB викориÑтовуютьÑÑ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ð¸ регіÑтри VFP, а у %pB — ні"
-#: elf32-arm.c:14665
+#: elf32-arm.c:14713
#, c-format
msgid "error: %pB: unable to merge virtualization attributes with %pB"
msgstr "помилка: %pB: Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñ–Ð² віртуалізації з %pB неможливе"
-#: elf32-arm.c:14691
+#: elf32-arm.c:14739
#, c-format
msgid "error: %pB: conflicting architecture profiles %c/%c"
msgstr "помилка: %pB: конфлікт профілів архітектур, %c/%c"
-#: elf32-arm.c:14830
+#: elf32-arm.c:14878
#, c-format
msgid "warning: %pB: conflicting platform configuration"
msgstr "попередженнÑ: %pB: конфлікт налаштувань платформ"
-#: elf32-arm.c:14839
+#: elf32-arm.c:14887
#, c-format
msgid "error: %pB: conflicting use of R9"
msgstr "помилка: %pB: конфлікт у викориÑтанні R9"
-#: elf32-arm.c:14851
+#: elf32-arm.c:14899
#, c-format
msgid "error: %pB: SB relative addressing conflicts with use of R9"
msgstr "помилка: %pB: викориÑÑ‚Ð°Ð½Ð½Ñ Ð²Ñ–Ð´Ð½Ð¾Ñної адреÑації SB конфліктує з викориÑтаннÑм R9"
-#: elf32-arm.c:14864
+#: elf32-arm.c:14912
#, c-format
msgid "warning: %pB 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 "попередженнÑ: у %pB викориÑтовуєтьÑÑ %u-байтовий wchar_t, хоча у виведенні викориÑтовуєтьÑÑ %u-байтовий wchar_t; викориÑÑ‚Ð°Ð½Ð½Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½ÑŒ wchar_t між об’єктами може зазнати невдачі"
-#: elf32-arm.c:14895
+#: elf32-arm.c:14943
#, c-format
msgid "warning: %pB uses %s enums yet the output is to use %s enums; use of enum values across objects may fail"
msgstr "попередженнÑ: у %pB викориÑтовуютьÑÑ Ð¿ÐµÑ€ÐµÐ»Ñ–ÐºÐ¸ %s, хоча у виведенні викориÑтовуютьÑÑ Ð¿ÐµÑ€ÐµÐ»Ñ–ÐºÐ¸ %s; викориÑÑ‚Ð°Ð½Ð½Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½ÑŒ переліків між об’єктами може зазнати невдачі"
-#: elf32-arm.c:14907
+#: elf32-arm.c:14955
#, c-format
msgid "error: %pB uses iWMMXt register arguments, %pB does not"
msgstr "помилка: у %pB викориÑтовуютьÑÑ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ð¸-регіÑтри iWMMXt, а у %pB — ні"
-#: elf32-arm.c:14924
+#: elf32-arm.c:14972
#, c-format
msgid "error: fp16 format mismatch between %pB and %pB"
msgstr "помилка: розбіжноÑÑ‚Ñ– у визначенні Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ fp16 між %pB та %pB"
-#: elf32-arm.c:14960
+#: elf32-arm.c:15008
#, c-format
msgid "%pB has both the current and legacy Tag_MPextension_use attributes"
msgstr "Ð´Ð»Ñ %pB визначено одразу обидва атрибути Tag_MPextension_use, current Ñ– legacy"
-#: elf32-arm.c:15056
+#: elf32-arm.c:15104
#, c-format
msgid " [interworking enabled]"
msgstr " [увімкнено ÑуміÑну роботу]"
-#: elf32-arm.c:15064
+#: elf32-arm.c:15112
#, c-format
msgid " [VFP float format]"
msgstr " [формат float VFP]"
-#: elf32-arm.c:15066
+#: elf32-arm.c:15114
#, c-format
msgid " [Maverick float format]"
msgstr " [формат float Maverick]"
-#: elf32-arm.c:15068
+#: elf32-arm.c:15116
#, c-format
msgid " [FPA float format]"
msgstr " [формат float FPA]"
-#: elf32-arm.c:15071
+#: elf32-arm.c:15119
#, c-format
msgid " [floats passed in float registers]"
msgstr " [чиÑла з рухомою комою передано до регіÑтрів чиÑел з рухомою комою]"
-#: elf32-arm.c:15074 elf32-arm.c:15160
+#: elf32-arm.c:15122 elf32-arm.c:15208
#, c-format
msgid " [position independent]"
msgstr " [незалежний від позиції]"
-#: elf32-arm.c:15077
+#: elf32-arm.c:15125
#, c-format
msgid " [new ABI]"
msgstr " [новий ABI]"
-#: elf32-arm.c:15080
+#: elf32-arm.c:15128
#, c-format
msgid " [old ABI]"
msgstr " [Ñтарий ABI]"
-#: elf32-arm.c:15083
+#: elf32-arm.c:15131
#, c-format
msgid " [software FP]"
msgstr " [програмна FP]"
-#: elf32-arm.c:15092
+#: elf32-arm.c:15140
#, c-format
msgid " [Version1 EABI]"
msgstr " [ВерÑÑ–Ñ1 EABI]"
-#: elf32-arm.c:15095 elf32-arm.c:15106
+#: elf32-arm.c:15143 elf32-arm.c:15154
#, c-format
msgid " [sorted symbol table]"
msgstr " [впорÑдкована Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ñимволів]"
-#: elf32-arm.c:15097 elf32-arm.c:15108
+#: elf32-arm.c:15145 elf32-arm.c:15156
#, c-format
msgid " [unsorted symbol table]"
msgstr " [невпорÑдкована Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ñимволів]"
-#: elf32-arm.c:15103
+#: elf32-arm.c:15151
#, c-format
msgid " [Version2 EABI]"
msgstr " [ВерÑÑ–Ñ2 EABI]"
-#: elf32-arm.c:15111
+#: elf32-arm.c:15159
#, c-format
msgid " [dynamic symbols use segment index]"
msgstr " [динамічні Ñимволи викориÑтовують Ñ–Ð½Ð´ÐµÐºÑ Ñегмента]"
-#: elf32-arm.c:15114
+#: elf32-arm.c:15162
#, c-format
msgid " [mapping symbols precede others]"
msgstr " [Ñимволи Ð²Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÐµÐ´ÑƒÑŽÑ‚ÑŒ іншим]"
-#: elf32-arm.c:15121
+#: elf32-arm.c:15169
#, c-format
msgid " [Version3 EABI]"
msgstr " [ВерÑÑ–Ñ3 EABI]"
-#: elf32-arm.c:15125
+#: elf32-arm.c:15173
#, c-format
msgid " [Version4 EABI]"
msgstr " [ВерÑÑ–Ñ4 EABI]"
-#: elf32-arm.c:15129
+#: elf32-arm.c:15177
#, c-format
msgid " [Version5 EABI]"
msgstr " [ВерÑÑ–Ñ5 EABI]"
-#: elf32-arm.c:15132
+#: elf32-arm.c:15180
#, c-format
msgid " [soft-float ABI]"
msgstr " [ABI програмної рухомої крапки]"
-#: elf32-arm.c:15135
+#: elf32-arm.c:15183
#, c-format
msgid " [hard-float ABI]"
msgstr " [ABI апаратної рухомої крапки]"
-#: elf32-arm.c:15141
+#: elf32-arm.c:15189
#, c-format
msgid " [BE8]"
msgstr " [BE8]"
-#: elf32-arm.c:15144
+#: elf32-arm.c:15192
#, c-format
msgid " [LE8]"
msgstr " [LE8]"
-#: elf32-arm.c:15150
+#: elf32-arm.c:15198
#, c-format
msgid " <EABI version unrecognised>"
msgstr " <нерозпізнана верÑÑ–Ñ EABI>"
-#: elf32-arm.c:15157
+#: elf32-arm.c:15205
#, c-format
msgid " [relocatable executable]"
msgstr " [придатний до переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¸Ð¹ файл]"
-#: elf32-arm.c:15163
+#: elf32-arm.c:15211
#, c-format
msgid " [FDPIC ABI supplement]"
msgstr " [Ð´Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ ABI FDPIC]"
-#: elf32-arm.c:15168 elfnn-aarch64.c:7337
+#: elf32-arm.c:15216 elfnn-aarch64.c:7340
#, c-format
msgid " <Unrecognised flag bits set>"
msgstr " <Ðерозпізнаний набір бітів прапорців>"
-#: elf32-arm.c:15285 elf32-arm.c:15419 elf32-i386.c:1524 elf32-s390.c:923
-#: elf32-tic6x.c:2724 elf32-tilepro.c:1435 elf32-xtensa.c:1094
-#: elf64-s390.c:845 elf64-x86-64.c:1900 elfxx-sparc.c:1386 elfxx-tilegx.c:1662
-#: elfnn-aarch64.c:7608 elfnn-riscv.c:660
+#: elf32-arm.c:15333 elf32-arm.c:15467 elf32-i386.c:1511 elf32-s390.c:923
+#: elf32-tic6x.c:2724 elf32-tilepro.c:1435 elf32-xtensa.c:1102
+#: elf64-s390.c:845 elf64-x86-64.c:1882 elfxx-sparc.c:1386 elfxx-tilegx.c:1662
+#: elfxx-x86.c:953 elfnn-aarch64.c:7611 elfnn-loongarch.c:604
+#: elfnn-riscv.c:660
#, c-format
msgid "%pB: bad symbol index: %d"
msgstr "%pB: помилковий Ñ–Ð½Ð´ÐµÐºÑ Ñимволу: %d"
-#: elf32-arm.c:15675
+#: elf32-arm.c:15723
#, c-format
msgid "FDPIC does not yet support %s relocation to become dynamic for executable"
msgstr "У FDPIC ще не передбачено підтримки Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÐµÑÑƒÐ²Ð°Ð½Ð½Ñ %s на динамічне Ð´Ð»Ñ Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¸Ñ… файлів"
-#: elf32-arm.c:16936
+#: elf32-arm.c:16984
#, c-format
msgid "errors encountered processing file %pB"
msgstr "під Ñ‡Ð°Ñ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ файла ÑталиÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸, %pB"
-#: elf32-arm.c:17309 elflink.c:12991 elflink.c:13038
+#: elf32-arm.c:17357 elflink.c:13186 elflink.c:13233
#, c-format
msgid "could not find section %s"
msgstr "не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ розділ %s"
-#: elf32-arm.c:18230
+#: elf32-arm.c:18278
#, c-format
msgid "%pB: Number of symbols in input file has increased from %lu to %u\n"
msgstr "%pB: кількіÑÑ‚ÑŒ Ñимволів у файлі вхідних даних збільшено з %lu до %u\n"
-#: elf32-arm.c:18494
+#: elf32-arm.c:18542
#, c-format
msgid "%pB: error: Cortex-A8 erratum stub is allocated in unsafe location"
msgstr "%pB: помилка: замінник Ð´Ð»Ñ Ð¾Ð±Ñ€Ð¾Ð±Ð½Ð¸ÐºÐ° помилки Cortex-A8 розташовано за небезпечною адреÑою"
#. There's not much we can do apart from complain if this
#. happens.
-#: elf32-arm.c:18521
+#: elf32-arm.c:18569
#, c-format
msgid "%pB: error: Cortex-A8 erratum stub out of range (input file too large)"
msgstr "%pB: помилка: замінник Ð´Ð»Ñ Ð¾Ð±Ñ€Ð¾Ð±Ð½Ð¸ÐºÐ° помилки Cortex-A8 перебуває поза доÑтупним діапазоном (файл вхідних даних Ñ” надто великим)"
-#: elf32-arm.c:19348 elf32-arm.c:19370
+#: elf32-arm.c:19396 elf32-arm.c:19418
#, c-format
msgid "%pB: error: VFP11 veneer out of range"
msgstr "%pB: помилка: обгортка VFP11 поза діапазоном"
-#: elf32-arm.c:19421
+#: elf32-arm.c:19469
#, c-format
msgid "%pB(%#<PRIx64>): error: cannot create STM32L4XX veneer; jump out of range by %<PRId64> bytes; cannot encode branch instruction"
msgstr "%pB(%#<PRIx64>): помилка: не вдалоÑÑ Ñтворити обгортку STM32L4XX. Перехід за межі припуÑтимого діапазону на %<PRId64> байтів. ÐšÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ Ñ–Ð½Ñтрукції Ñ€Ð¾Ð·Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ðµ."
-#: elf32-arm.c:19460
+#: elf32-arm.c:19508
#, c-format
msgid "%pB: error: cannot create STM32L4XX veneer"
msgstr "%pB: помилка: не вдалоÑÑ Ñтворити обгортку STM32L4XX"
-#: elf32-arm.c:20544
+#: elf32-arm.c:20590
#, c-format
msgid "error: %pB is already in final BE8 format"
msgstr "помилка: %pB вже зберігаєтьÑÑ Ñƒ оÑтаточному форматі BE8"
-#: elf32-arm.c:20620
+#: elf32-arm.c:20666
#, c-format
msgid "error: source object %pB has EABI version %d, but target %pB has EABI version %d"
msgstr "помилка: об’єкт-джерело, %pB, викориÑтовує верÑÑ–ÑŽ EABI %d, а призначеннÑ, %pB, викориÑтовує верÑÑ–ÑŽ EABI %d"
-#: elf32-arm.c:20635
+#: elf32-arm.c:20681
#, c-format
msgid "error: %pB is compiled for APCS-%d, whereas target %pB uses APCS-%d"
msgstr "помилка: %pB зібрано Ð´Ð»Ñ APCS-%d, тоді Ñк %pB викориÑтовує APCS-%d"
-#: elf32-arm.c:20645
+#: elf32-arm.c:20691
#, c-format
msgid "error: %pB passes floats in float registers, whereas %pB passes them in integer registers"
msgstr "помилка: %pB передає чиÑла з рухомою комою до регіÑтрів, а %pB передає Ñ—Ñ… у цілочиÑельні регіÑтри"
-#: elf32-arm.c:20649
+#: elf32-arm.c:20695
#, c-format
msgid "error: %pB passes floats in integer registers, whereas %pB passes them in float registers"
msgstr "помилка: %pB передає цілі чиÑла до регіÑтрів, а %pB передає Ñ—Ñ… у регіÑтри чиÑел з рухомою комою"
-#: elf32-arm.c:20659 elf32-arm.c:20663 elf32-arm.c:20673
+#: elf32-arm.c:20705 elf32-arm.c:20709 elf32-arm.c:20719
#, c-format
msgid "error: %pB uses %s instructions, whereas %pB does not"
msgstr "помилка: у %pB викориÑтовуютьÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ %s, а у %pB — ні"
-#: elf32-arm.c:20677
+#: elf32-arm.c:20723
#, c-format
msgid "error: %pB does not use %s instructions, whereas %pB does"
msgstr "помилка: у %pB не викориÑтовуютьÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ %s, а у %pB — так"
-#: elf32-arm.c:20696
+#: elf32-arm.c:20742
#, c-format
msgid "error: %pB uses software FP, whereas %pB uses hardware FP"
msgstr "помилка: у %pB викориÑтовуютьÑÑ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð½Ñ– FP, а у %pB — апаратні FP"
-#: elf32-arm.c:20700
+#: elf32-arm.c:20746
#, c-format
msgid "error: %pB uses hardware FP, whereas %pB uses software FP"
msgstr "помилка: у %pB викориÑтовуютьÑÑ Ð°Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ñ– FP, а у %pB — програмні FP"
-#: elf32-arm.c:20714
+#: elf32-arm.c:20760
#, c-format
msgid "warning: %pB supports interworking, whereas %pB does not"
msgstr "попередженнÑ: у %pB передбачено ÑуміÑну роботу, а у %pB не передбачено"
-#: elf32-arm.c:20720
+#: elf32-arm.c:20766
#, c-format
msgid "warning: %pB does not support interworking, whereas %pB does"
msgstr "попередженнÑ: у %pB не передбачено ÑуміÑної роботи, а у %pB передбачено"
-#: elf32-avr.c:1516 elf32-bfin.c:3139 elf32-cris.c:2042 elf32-epiphany.c:573
+#: elf32-avr.c:1516 elf32-bfin.c:3145 elf32-cris.c:2042 elf32-epiphany.c:573
#: elf32-fr30.c:602 elf32-frv.c:4057 elf32-ft32.c:501 elf32-ip2k.c:1488
#: elf32-iq2000.c:699 elf32-m32c.c:632 elf32-mep.c:530 elf32-metag.c:1992
-#: elf32-moxie.c:296 elf32-msp430.c:1514 elf32-mt.c:406 elf32-or1k.c:1869
+#: elf32-moxie.c:296 elf32-msp430.c:1514 elf32-mt.c:406 elf32-or1k.c:1881
#: elf32-tilepro.c:3380 elf32-v850.c:2302 elf32-visium.c:688
#: elf32-xstormy16.c:938 elf64-bpf.c:561 elf64-mmix.c:1549 elfxx-tilegx.c:3750
msgid "internal error: dangerous relocation"
@@ -2129,82 +2161,82 @@ msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: небезпечне переÑува
msgid "cannot create stub entry %s"
msgstr "не вдалоÑÑ Ñтворити шаблонний Ð·Ð°Ð¿Ð¸Ñ %s"
-#: elf32-bfin.c:107 elf32-bfin.c:363
+#: elf32-bfin.c:108 elf32-bfin.c:367
msgid "relocation should be even number"
msgstr "переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¼Ð°Ñ” бути вказано парним чиÑлом"
-#: elf32-bfin.c:1587
+#: elf32-bfin.c:1593
#, c-format
msgid "%pB(%pA+%#<PRIx64>): unresolvable relocation against symbol `%s'"
msgstr "%pB(%pA+%#<PRIx64>): нерозв’Ñзне переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ Ñимволу «%s»"
-#: elf32-bfin.c:1619 elf32-i386.c:3466 elf32-m68k.c:4006 elf32-s390.c:3138
-#: elf64-s390.c:3087 elf64-x86-64.c:4137
+#: elf32-bfin.c:1625 elf32-i386.c:3466 elf32-m68k.c:4006 elf32-s390.c:3138
+#: elf64-s390.c:3087 elf64-x86-64.c:4139
#, c-format
msgid "%pB(%pA+%#<PRIx64>): reloc against `%s': error %d"
msgstr "%pB(%pA+%#<PRIx64>): переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ «%s»: помилка %d"
-#: elf32-bfin.c:2645
+#: elf32-bfin.c:2651
#, c-format
msgid "%pB: relocation at `%pA+%#<PRIx64>' references symbol `%s' with nonzero addend"
msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ «%pA+%#<PRIx64>» поÑилаєтьÑÑ Ð½Ð° Ñимвол «%s» з ненульовим доданком"
-#: elf32-bfin.c:2662
+#: elf32-bfin.c:2668
msgid "relocation references symbol not defined in the module"
msgstr "переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾ÑилаєтьÑÑ Ð½Ð° Ñимвол, Ñкий не визначено у модулі"
-#: elf32-bfin.c:2760
+#: elf32-bfin.c:2766
msgid "R_BFIN_FUNCDESC references dynamic symbol with nonzero addend"
msgstr "R_BFIN_FUNCDESC поÑилаєтьÑÑ Ð½Ð° динамічний Ñимвол з ненульовим доданком"
-#: elf32-bfin.c:2800 elf32-bfin.c:2921
+#: elf32-bfin.c:2806 elf32-bfin.c:2927
msgid "cannot emit fixups in read-only section"
msgstr "не можна викориÑтовувати адреÑну прив’Ñзку у розділі, придатному лише Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ"
-#: elf32-bfin.c:2830 elf32-bfin.c:2958 elf32-lm32.c:1007 elf32-sh.c:4383
+#: elf32-bfin.c:2836 elf32-bfin.c:2964 elf32-lm32.c:1007 elf32-sh.c:4383
msgid "cannot emit dynamic relocations in read-only section"
msgstr "не можна викориÑтовувати динамічні переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ розділі, призначеному лише Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ"
-#: elf32-bfin.c:2880
+#: elf32-bfin.c:2886
msgid "R_BFIN_FUNCDESC_VALUE references dynamic symbol with nonzero addend"
msgstr "R_BFIN_FUNCDESC_VALUE поÑилаєтьÑÑ Ð½Ð° динамічний Ñимвол з ненульовим доданком"
-#: elf32-bfin.c:3043
+#: elf32-bfin.c:3049
msgid "relocations between different segments are not supported"
msgstr "підтримки переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¼Ñ–Ð¶ різними Ñегментами не передбачено"
-#: elf32-bfin.c:3044
+#: elf32-bfin.c:3050
msgid "warning: relocation references a different segment"
msgstr "попередженнÑ: у переÑуванні виÑвлено поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° інший Ñегмент"
#. Ignore init flag - it may not be set, despite the flags field containing valid data.
-#: elf32-bfin.c:4729 elf32-cris.c:3862 elf32-m68hc1x.c:1415 elf32-m68k.c:1265
-#: elf32-score.c:3996 elf32-score7.c:3801 elf32-vax.c:536 elf32-xgate.c:494
-#: elfxx-mips.c:16254
+#: elf32-bfin.c:4732 elf32-cris.c:3862 elf32-m68hc1x.c:1415 elf32-m68k.c:1265
+#: elf32-score.c:3987 elf32-score7.c:3794 elf32-vax.c:536 elf32-xgate.c:494
+#: elfxx-mips.c:16270
#, c-format
msgid "private flags = %lx:"
msgstr "закриті прапорці = %lx:"
-#: elf32-bfin.c:4780 elf32-frv.c:6585
+#: elf32-bfin.c:4783 elf32-frv.c:6585
#, c-format
msgid "%pB: cannot link non-fdpic object file into fdpic executable"
msgstr "%pB: не можна компонувати об’єктний файл не-fdpic до виконуваного файла fdpic"
-#: elf32-bfin.c:4784 elf32-frv.c:6589
+#: elf32-bfin.c:4787 elf32-frv.c:6589
#, c-format
msgid "%pB: cannot link fdpic object file into non-fdpic executable"
msgstr "%pB: не можна компонувати об’єктний файл fdpic до виконуваного файла не-fdpic"
-#: elf32-bfin.c:4921
+#: elf32-bfin.c:4924
#, c-format
msgid "*** check this relocation %s"
msgstr "*** перевірте це переÑуваннÑ: %s"
-#: elf32-bfin.c:5037
+#: elf32-bfin.c:5040
msgid "the bfin target does not currently support the generation of copy relocations"
msgstr "у поточній верÑÑ–Ñ— не передбачено Ð´Ð»Ñ Ñ†Ñ–Ð»Ñ– bfin ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÐµÑувань копіюваннÑ"
-#: elf32-bfin.c:5331 elf32-cr16.c:2713 elf32-m68k.c:4420
+#: elf32-bfin.c:5334 elf32-cr16.c:2710 elf32-m68k.c:4420
msgid "unsupported relocation type"
msgstr "непідтримуваний тип переÑуваннÑ"
@@ -2382,7 +2414,7 @@ msgid "warning: file %pB's arch flag %s conflicts with target ck%s, using %s"
msgstr "попередженнÑ: прапорець архітектури файла %pB %s конфліктує із прапорцем Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ck%s, викориÑтовуємо %s"
#. The r_type is error, not support it.
-#: elf32-csky.c:4342 elf32-i386.c:350
+#: elf32-csky.c:4342 elf32-i386.c:344
#, c-format
msgid "%pB: unsupported relocation type: %#x"
msgstr "%pB: непідтримуваний тип переÑÑƒÐ²Ð°Ð½Ð½Ñ %#x"
@@ -2505,7 +2537,7 @@ msgstr "%pB: викориÑтовуютьÑÑ Ñ–Ð½ÑˆÑ– невідомі полÑ
msgid "%pB: relocations in generic ELF (EM: %d)"
msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ типовому ELF (EM: %d)"
-#: elf32-hppa.c:761 elf32-hppa.c:842 elf64-ppc.c:12022
+#: elf32-hppa.c:761 elf32-hppa.c:842 elf64-ppc.c:12181
msgid "%F%P: Could not assign %pA to an output section. Retry without --enable-non-contiguous-regions.\n"
msgstr "%F%P: не вдалоÑÑ Ð¿Ð¾Ð²'Ñзати %pA із розділом виведеннÑ. Повторіть без --enable-non-contiguous-regions.\n"
@@ -2548,71 +2580,75 @@ msgstr "%pB(%pA+%#<PRIx64>): не вдалоÑÑ Ð¾Ð±Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸ %s Ð´Ð»Ñ %s"
msgid ".got section not immediately after .plt section"
msgstr "Розділ .got не перебуває одразу за розділом .plt"
-#: elf32-i386.c:1169 elf64-x86-64.c:1380
+#: elf32-i386.c:1163 elf64-x86-64.c:1369
#, c-format
msgid "%pB: TLS transition from %s to %s against `%s' at %#<PRIx64> in section `%pA' failed"
msgstr "%pB: перенеÑÐµÐ½Ð½Ñ TLS з %s до %s щодо «%s» у %#<PRIx64> у розділі «%pA» зазнало невдачі"
-#: elf32-i386.c:1272
+#: elf32-i386.c:1266
#, c-format
msgid "%pB: direct GOT relocation R_386_GOT32X against `%s' without base register can not be used when making a shared object"
msgstr "%pB: безпоÑереднє переÑÑƒÐ²Ð°Ð½Ð½Ñ GOT R_386_GOT32X щодо «%s» без базового регіÑтра не можна викориÑтовувати під Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñпільного викориÑтаннÑ"
-#: elf32-i386.c:1721 elf32-s390.c:1151 elf32-sh.c:5488 elf32-tilepro.c:1548
-#: elf32-xtensa.c:1266 elf64-s390.c:1083 elfxx-sparc.c:1556
-#: elfxx-tilegx.c:1767 elfnn-riscv.c:568
+#: elf32-i386.c:1695 elf32-s390.c:1151 elf32-sh.c:5488 elf32-tilepro.c:1548
+#: elf32-xtensa.c:1274 elf64-s390.c:1083 elfxx-sparc.c:1556
+#: elfxx-tilegx.c:1767 elfnn-loongarch.c:555 elfnn-riscv.c:568
#, c-format
msgid "%pB: `%s' accessed both as normal and thread local symbol"
msgstr "%pB: доÑтуп до «%s» виконуєтьÑÑ Ñк до звичайного Ñимволу, так Ñ– до локального Ð´Ð»Ñ Ð¿Ð¾Ñ‚Ð¾ÐºÑƒ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ñимволу"
-#: elf32-i386.c:1793
+#: elf32-i386.c:1767
#, c-format
msgid "%pB: unsupported non-PIC call to IFUNC `%s'"
msgstr "%pB: непідтримуваний виклик без PIC IFUNC «%s»"
-#: elf32-i386.c:2373 elf64-x86-64.c:2721 elfnn-riscv.c:2284
+#: elf32-i386.c:2357 elf64-x86-64.c:2701 elfnn-riscv.c:2300
#, c-format
msgid "%pB: relocation %s against STT_GNU_IFUNC symbol `%s' isn't supported"
msgstr "%pB: підтримки переÑÑƒÐ²Ð°Ð½Ð½Ñ %s щодо Ñимволу STT_GNU_IFUNC «%s» не передбачено"
-#: elf32-i386.c:2406 elf32-i386.c:3677 elf32-i386.c:3824 elf64-x86-64.c:2778
-#: elf64-x86-64.c:4310 elf64-x86-64.c:4472 elfnn-riscv.c:2157
-#: elfnn-riscv.c:2956 elfnn-riscv.c:3030
+#: elf32-i386.c:2390 elf32-i386.c:3677 elf32-i386.c:3825 elf64-x86-64.c:2758
+#: elf64-x86-64.c:4312 elf64-x86-64.c:4475 elfnn-riscv.c:2173
+#: elfnn-riscv.c:2972 elfnn-riscv.c:3046
#, c-format
msgid "Local IFUNC function `%s' in %pB\n"
msgstr "Локальна Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ IFUNC «%s» у %pB\n"
-#: elf32-i386.c:2575
+#: elf32-i386.c:2563
#, c-format
msgid "%pB: direct GOT relocation %s against `%s' without base register can not be used when making a shared object"
msgstr "%pB: безпоÑереднє переÑÑƒÐ²Ð°Ð½Ð½Ñ %s щодо «%s» без базового регіÑтра не можна викориÑтовувати під Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñпільного викориÑтаннÑ"
-#: elf32-i386.c:2610 elf64-x86-64.c:2988
+#: elf32-i386.c:2598 elf64-x86-64.c:2974
msgid "hidden symbol"
msgstr "прихованого Ñимволу"
-#: elf32-i386.c:2613 elf64-x86-64.c:2991
+#: elf32-i386.c:2601 elf64-x86-64.c:2977
msgid "internal symbol"
msgstr "внутрішнього Ñимволу"
-#: elf32-i386.c:2616 elf64-x86-64.c:2994
+#: elf32-i386.c:2604 elf64-x86-64.c:2980
msgid "protected symbol"
msgstr "захищеного Ñимволу"
-#: elf32-i386.c:2619 elf64-x86-64.c:2997
+#: elf32-i386.c:2607 elf64-x86-64.c:2983
msgid "symbol"
msgstr "Ñимволу"
-#: elf32-i386.c:2625
+#: elf32-i386.c:2613
#, c-format
msgid "%pB: relocation R_386_GOTOFF against undefined %s `%s' can not be used when making a shared object"
msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ R_386_GOTOFF щодо невизначеного %s, «%s», не можна викориÑтовувати під Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñпільного викориÑтаннÑ"
-#: elf32-i386.c:2638
+#: elf32-i386.c:2626
#, c-format
msgid "%pB: relocation R_386_GOTOFF against protected %s `%s' can not be used when making a shared object"
msgstr "%pB: не можна викориÑтовувати R_386_GOTOFF переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ захищеної %s «%s» під Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñпільного викориÑтаннÑ"
+#: elf32-i386.c:4028 elf64-x86-64.c:4686
+msgid "%F%P: discarded output section: `%pA'\n"
+msgstr "%F%P: відкинуто розділ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ…: «%pA»\n"
+
#: elf32-ip2k.c:855 elf32-ip2k.c:861 elf32-ip2k.c:928 elf32-ip2k.c:934
msgid "ip2k relaxer: switch table without complete matching relocation information."
msgstr "Оптимізатор розміру ip2k: Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ð¿ÐµÑ€ÐµÐ¼Ð¸ÐºÐ°Ð½ÑŒ без повних даних щодо відповідноÑÑ‚Ñ– переÑувань."
@@ -2658,7 +2694,7 @@ msgstr "%pB: Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ (%s) переÑÑƒÐ²Ð°Ð½Ð½Ñ %s перебуÐ
msgid "%pB: instruction set mismatch with previous modules"
msgstr "%pB: невідповідніÑÑ‚ÑŒ набору команду цього Ð¼Ð¾Ð´ÑƒÐ»Ñ Ð½Ð°Ð±Ð¾Ñ€Ð°Ð¼ команд попередніх модулів"
-#: elf32-m32r.c:3300 elf32-nds32.c:6851
+#: elf32-m32r.c:3300 elf32-nds32.c:6846
#, c-format
msgid "private flags = %lx"
msgstr "закриті прапорці = %lx"
@@ -2768,12 +2804,12 @@ msgstr " [пам’ÑÑ‚ÑŒ=плоÑка модель]"
msgid " [XGATE RAM offsetting]"
msgstr " [вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð²Ñ–Ð´Ñтупу RAM XGATE]"
-#: elf32-m68k.c:1157 elf32-m68k.c:1165 elf32-ppc.c:3582 elf32-ppc.c:3590
+#: elf32-m68k.c:1157 elf32-m68k.c:1165 elf32-ppc.c:3597 elf32-ppc.c:3605
#, c-format
msgid "%pB uses hard float, %pB uses soft float"
msgstr "у %pB викориÑтовуєтьÑÑ Ð°Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð° підтримка дійÑних чиÑел, а у %pB — програмна"
-#: elf32-m68k.c:1280 elf32-m68k.c:1281 vms-alpha.c:7662 vms-alpha.c:7678
+#: elf32-m68k.c:1280 elf32-m68k.c:1281 vms-alpha.c:7906 vms-alpha.c:7922
msgid "unknown"
msgstr "невідомо"
@@ -2833,7 +2869,7 @@ msgstr "%pB: ймовірно зібрано без -fPIC?"
msgid "literal relocation occurs for an external symbol"
msgstr "відбуваєтьÑÑ Ð±ÑƒÐºÐ²Ð°Ð»ÑŒÐ½Ðµ переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ð·Ð¾Ð²Ð½Ñ–ÑˆÐ½ÑŒÐ¾Ð³Ð¾ Ñимволу"
-#: elf32-mips.c:1824 elf32-score.c:572 elf32-score7.c:472 elf64-mips.c:3559
+#: elf32-mips.c:1824 elf32-score.c:563 elf32-score7.c:465 elf64-mips.c:3559
#: elfn32-mips.c:3375
msgid "32bits gp relative relocation occurs for an external symbol"
msgstr "відбуваєтьÑÑ 32-бітове відноÑне gp-переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ð·Ð¾Ð²Ð½Ñ–ÑˆÐ½ÑŒÐ¾Ð³Ð¾ Ñимволу"
@@ -2891,92 +2927,92 @@ msgstr "помилка: %pB викориÑтовує модель даних %s,
msgid "error: %pB can use the upper region for data, but %pB assumes data is exclusively in lower memory"
msgstr "помилка: %pB може викориÑтовувати верхню ділÑнку даних, але %pB вказує на те, що дані розташовано лише у нижній ділÑнці пам'ÑÑ‚Ñ–"
-#: elf32-nds32.c:3625
+#: elf32-nds32.c:3620
#, c-format
msgid "error: can't find symbol: %s"
msgstr "помилка: не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñимвол: %s"
-#: elf32-nds32.c:5524
+#: elf32-nds32.c:5519
#, c-format
msgid "%pB: warning: %s unsupported in shared mode"
msgstr "%pB: попередженнÑ: підтримки %s у Ñпільному режимі не передбачено"
-#: elf32-nds32.c:5650
+#: elf32-nds32.c:5645
#, c-format
msgid "%pB: warning: unaligned access to GOT entry"
msgstr "%pB: попередженнÑ: невирівнÑний доÑтуп до запиÑу GOT"
-#: elf32-nds32.c:5691
+#: elf32-nds32.c:5686
#, c-format
msgid "%pB: warning: relocate SDA_BASE failed"
msgstr "%pB: попередженнÑ: помилка переÑÑƒÐ²Ð°Ð½Ð½Ñ SDA_BASE"
-#: elf32-nds32.c:5713
+#: elf32-nds32.c:5708
#, c-format
msgid "%pB(%pA): warning: unaligned small data access of type %d"
msgstr "%pB(%pA): попередженнÑ: невирівнÑний доÑтуп до малих даних типу %d"
-#: elf32-nds32.c:6639
+#: elf32-nds32.c:6634
#, c-format
msgid "%pB: ISR vector size mismatch with previous modules, previous %u-byte, current %u-byte"
msgstr "%pB: невідповідніÑÑ‚ÑŒ розмірів векторів ISR із попередніми модулÑми, попередні Ñ” %u-байтовими, поточні Ñ” %u-байтовими"
-#: elf32-nds32.c:6687
+#: elf32-nds32.c:6682
#, c-format
msgid "%pB: warning: endian mismatch with previous modules"
msgstr "%pB: попередженнÑ: невідповідніÑÑ‚ÑŒ порÑдку байтів із попередніми модулÑми"
-#: elf32-nds32.c:6701
+#: elf32-nds32.c:6696
#, c-format
msgid "%pB: warning: older version of object file encountered, please recompile with current tool chain"
msgstr "%pB: попередженнÑ: виÑвлено Ñтарішу верÑÑ–ÑŽ об’єктного файла. Будь лаÑка, виконайте повторне Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ Ð· поточним набором інÑтрументів."
-#: elf32-nds32.c:6789
+#: elf32-nds32.c:6784
#, c-format
msgid "%pB: error: ABI mismatch with previous modules"
msgstr "%pB: помилка: невідповідніÑÑ‚ÑŒ ABI з попередніми модулÑми"
-#: elf32-nds32.c:6799
+#: elf32-nds32.c:6794
#, c-format
msgid "%pB: error: instruction set mismatch with previous modules"
msgstr "%pB: помилка: невідповідніÑÑ‚ÑŒ набору команду цього Ð¼Ð¾Ð´ÑƒÐ»Ñ Ð½Ð°Ð±Ð¾Ñ€Ð°Ð¼ команд попередніх модулів"
-#: elf32-nds32.c:6826
+#: elf32-nds32.c:6821
#, c-format
msgid "%pB: warning: incompatible elf-versions %s and %s"
msgstr "%pB: попередженнÑ: неÑуміÑні верÑÑ–Ñ— elf, %s та %s"
-#: elf32-nds32.c:6857
+#: elf32-nds32.c:6852
#, c-format
msgid ": n1 instructions"
msgstr ": інÑтрукції n1"
-#: elf32-nds32.c:6860
+#: elf32-nds32.c:6855
#, c-format
msgid ": n1h instructions"
msgstr ": інÑтрукції n1h"
-#: elf32-nds32.c:9313
+#: elf32-nds32.c:9304
#, c-format
msgid "%pB: error: search_nds32_elf_blank reports wrong node"
msgstr "%pB: помилка: search_nds32_elf_blank повідомлÑÑ” про помилковий вузол"
-#: elf32-nds32.c:9577
+#: elf32-nds32.c:9568
#, c-format
msgid "%pB: warning: %s points to unrecognized reloc at %#<PRIx64>"
msgstr "%pB: попередженнÑ: %s вказує на невідоме переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð¾ %#<PRIx64>."
-#: elf32-nds32.c:12842
+#: elf32-nds32.c:12833
#, c-format
msgid "%pB: nested OMIT_FP in %pA"
msgstr "%pB: вкладене OMIT_FP у %pA."
-#: elf32-nds32.c:12861
+#: elf32-nds32.c:12852
#, c-format
msgid "%pB: unmatched OMIT_FP in %pA"
msgstr "%pB: OMIT_FP без відповідника у %pA."
-#: elf32-nds32.c:13143 elfxx-mips.c:13407 reloc.c:8508
+#: elf32-nds32.c:13134 elfxx-mips.c:13426 reloc.c:8599
#, c-format
msgid "%X%P: %pB(%pA): relocation \"%pR\" goes out of range\n"
msgstr "%X%P: %pB(%pA): переÑÑƒÐ²Ð°Ð½Ð½Ñ Â«%pR» виводить за межі припуÑтимого діапазону\n"
@@ -3004,7 +3040,7 @@ msgstr "переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð° межі діапазону"
msgid "dangerous relocation"
msgstr "небезпечне переÑуваннÑ"
-#: elf32-nios2.c:5364
+#: elf32-nios2.c:5360
#, c-format
msgid "dynamic variable `%s' is zero size"
msgstr "динамічна змінна «%s» має нульовий розмір"
@@ -3034,128 +3070,128 @@ msgstr "%pB: Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÑувань got доданок має бути ну
msgid "%pB: gotoff relocation against dynamic symbol %s"
msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ gotoff щодо динамічного Ñимволу %s"
-#: elf32-or1k.c:1554 elf64-alpha.c:4426 elf64-alpha.c:4570
+#: elf32-or1k.c:1551 elf32-or1k.c:1566 elf64-alpha.c:4427 elf64-alpha.c:4571
#, c-format
msgid "%pB: pc-relative relocation against dynamic symbol %s"
msgstr "%pB: pc-відноÑне переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ динамічного Ñимволу %s"
-#: elf32-or1k.c:1568
+#: elf32-or1k.c:1580
#, c-format
msgid "%pB: non-pic relocation against symbol %s"
msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ðµ-pic щодо динамічного Ñимволу %s"
-#: elf32-or1k.c:1652
+#: elf32-or1k.c:1664
#, c-format
msgid "%pB: support for local dynamic not implemented"
msgstr "%pB: підтримку Ð´Ð»Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ñ— динаміки не реалізовано"
-#: elf32-or1k.c:1831
+#: elf32-or1k.c:1843
#, c-format
msgid "%pB: will not resolve runtime TLS relocation"
msgstr "%pB: не буде визначено переÑÑƒÐ²Ð°Ð½Ð½Ñ TLS у динамічному режимі"
-#: elf32-or1k.c:2165
+#: elf32-or1k.c:2177
#, c-format
msgid "%pB: bad relocation section name `%s'"
msgstr "%pB: помилкова назва розділу Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÑÑƒÐ²Ð°Ð½Ð½Ñ Â«%s»"
-#: elf32-or1k.c:3279
+#: elf32-or1k.c:3291
#, c-format
msgid "%pB: %s flag mismatch with previous modules"
msgstr "%pB: невідповідніÑÑ‚ÑŒ Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ %s попереднім модулÑм"
-#: elf32-ppc.c:987 elf64-ppc.c:1723
+#: elf32-ppc.c:993 elf64-ppc.c:1749
#, c-format
msgid "generic linker can't handle %s"
msgstr "типовий компонувальник не може оброблÑти %s"
-#: elf32-ppc.c:1627
+#: elf32-ppc.c:1633
#, c-format
msgid "corrupt %s section in %pB"
msgstr "пошкоджений розділ %s у %pB"
-#: elf32-ppc.c:1646
+#: elf32-ppc.c:1652
#, c-format
msgid "unable to read in %s section from %pB"
msgstr "Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ñƒ розділі %s неможливе з %pB"
-#: elf32-ppc.c:1688
+#: elf32-ppc.c:1694
#, c-format
msgid "warning: unable to set size of %s section in %pB"
msgstr "попередженнÑ: не вдалоÑÑ Ð²Ñтановити Ð´Ð»Ñ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ розділу %s Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ %pB"
-#: elf32-ppc.c:1737
+#: elf32-ppc.c:1743
msgid "failed to allocate space for new APUinfo section"
msgstr "не вдалоÑÑ Ñ€Ð¾Ð·Ð¼Ñ–Ñтити новий розділ APUinfo"
-#: elf32-ppc.c:1756
+#: elf32-ppc.c:1762
msgid "failed to compute new APUinfo section"
msgstr "не вдалоÑÑ Ð¾Ð±Ñ‡Ð¸Ñлити новий розділ APUinfo"
-#: elf32-ppc.c:1759
+#: elf32-ppc.c:1765
msgid "failed to install new APUinfo section"
msgstr "не вдалоÑÑ Ð²Ñтановити новий розділ APUinfo"
-#: elf32-ppc.c:2858
+#: elf32-ppc.c:2873
#, c-format
msgid "%pB: relocation %s cannot be used when making a shared object"
msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ %s не можна викориÑтовувати під Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñпільного викориÑтаннÑ"
-#: elf32-ppc.c:3598 elf32-ppc.c:3606
+#: elf32-ppc.c:3613 elf32-ppc.c:3621
#, c-format
msgid "%pB uses double-precision hard float, %pB uses single-precision hard float"
msgstr "у %pB викориÑтовуєтьÑÑ Ð°Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð° підтримка дійÑних чиÑел з подвійною точніÑÑ‚ÑŽ, а у %pB — апаратна підтримка Ð´Ð»Ñ Ð´Ñ–Ð¹Ñних чиÑел з одинарною точніÑÑ‚ÑŽ"
-#: elf32-ppc.c:3628 elf32-ppc.c:3636
+#: elf32-ppc.c:3643 elf32-ppc.c:3651
#, c-format
msgid "%pB uses 64-bit long double, %pB uses 128-bit long double"
msgstr "у %pB викориÑтано 64-бітові довгі цілі Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ–Ð· подвійною точніÑÑ‚ÑŽ, а у %pB — 128-бітові"
-#: elf32-ppc.c:3644 elf32-ppc.c:3652
+#: elf32-ppc.c:3659 elf32-ppc.c:3667
#, c-format
msgid "%pB uses IBM long double, %pB uses IEEE long double"
msgstr "у %pB викориÑтано довгі цілі Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ–Ð· подвійною точніÑÑ‚ÑŽ IBM, а у %pB — IEEE"
-#: elf32-ppc.c:3719 elf32-ppc.c:3728
+#: elf32-ppc.c:3734 elf32-ppc.c:3743
#, c-format
msgid "%pB uses AltiVec vector ABI, %pB uses SPE vector ABI"
msgstr "%pB викориÑтовує векторний ABI AltiVec, %pB викориÑтовує векторний ABI SPE"
-#: elf32-ppc.c:3757 elf32-ppc.c:3766
+#: elf32-ppc.c:3772 elf32-ppc.c:3781
#, c-format
msgid "%pB uses r3/r4 for small structure returns, %pB uses memory"
msgstr "у %pB r3/r4 викориÑтовуєтьÑÑ Ð´Ð»Ñ Ð¿Ð¾Ð²ÐµÑ€Ð½ÐµÐ½Ð½Ñ Ð¼Ð°Ð»Ð¸Ñ… Ñтруктур, а у %pB Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ викориÑтовуєтьÑÑ Ð¿Ð°Ð¼â€™ÑÑ‚ÑŒ"
-#: elf32-ppc.c:3830
+#: elf32-ppc.c:3845
#, c-format
msgid "%pB: compiled with -mrelocatable and linked with modules compiled normally"
msgstr "%pB: зібрано з -mrelocatable Ñ– Ñкомпоновано з модулÑми, зібраними у звичайному режимі"
-#: elf32-ppc.c:3838
+#: elf32-ppc.c:3853
#, c-format
msgid "%pB: compiled normally and linked with modules compiled with -mrelocatable"
msgstr "%pB: зібрано у звичайному режимі Ñ– Ñкомпоновано з модулÑми, зібраними з -mrelocatable"
-#: elf32-ppc.c:3907
+#: elf32-ppc.c:3924
#, c-format
msgid "%pB(%pA+0x%lx): expected 16A style relocation on 0x%08x insn"
msgstr "%pB(%pA+0x%lx): очікувалоÑÑ Ð¿ÐµÑ€ÐµÑÑƒÐ²Ð°Ð½Ð½Ñ Ñтилю 16A на інÑтрукції 0x%08x"
-#: elf32-ppc.c:3926
+#: elf32-ppc.c:3943
#, c-format
msgid "%pB(%pA+0x%lx): expected 16D style relocation on 0x%08x insn"
msgstr "%pB(%pA+0x%lx): очікувалоÑÑ Ð¿ÐµÑ€ÐµÑÑƒÐ²Ð°Ð½Ð½Ñ Ñтилю 16D на інÑтрукції 0x%08x"
-#: elf32-ppc.c:4029
+#: elf32-ppc.c:4047
#, c-format
msgid "bss-plt forced due to %pB"
msgstr "примуÑово викориÑтано bss-plt через %pB"
-#: elf32-ppc.c:4031
+#: elf32-ppc.c:4049
msgid "bss-plt forced by profiling"
msgstr "профілюваннÑм примуÑово визначено bss-plt"
-#: elf32-ppc.c:4608 elf64-ppc.c:8317
+#: elf32-ppc.c:4626 elf64-ppc.c:8483
msgid "%H: warning: %s unexpected insn %#x.\n"
msgstr "%H: попередженнÑ: %s, неочікувана інÑÑ‚Ñ€ÑƒÐºÑ†Ñ–Ñ %#x.\n"
@@ -3163,36 +3199,41 @@ msgstr "%H: попередженнÑ: %s, неочікувана інÑтрукÑ
#. could just mark this symbol to exclude it
#. from tls optimization but it's safer to skip
#. the entire optimization.
-#: elf32-ppc.c:4638 elf64-ppc.c:8382
+#: elf32-ppc.c:4656 elf64-ppc.c:8548
#, c-format
msgid "%H arg lost __tls_get_addr, TLS optimization disabled\n"
msgstr "%H: у аргументів не виÑтачає __tls_get_addr, оптимізацію TLS вимкнено.\n"
-#: elf32-ppc.c:5564 elf32-sh.c:3017 elf32-tilepro.c:2248 elfxx-sparc.c:2454
+#: elf32-ppc.c:5582 elf32-sh.c:3017 elf32-tilepro.c:2248 elfxx-sparc.c:2454
#: elfxx-tilegx.c:2494
#, c-format
msgid "%pB: dynamic relocation in read-only section `%pA'\n"
msgstr "%pB: динамічне переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ розділі «%pA», призначеному лише Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ\n"
-#: elf32-ppc.c:7407
+#: elf32-ppc.c:7437
msgid "%P: %H: error: %s with unexpected instruction %x\n"
msgstr "%P: %H: помилка: %s із неочікуваною інÑтрукцією %x\n"
-#: elf32-ppc.c:7444
+#: elf32-ppc.c:7475
msgid "%H: fixup branch overflow\n"
msgstr "%H: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ Ñ–Ð· адреÑною прив’Ñзкою\n"
-#: elf32-ppc.c:7484 elf32-ppc.c:7520
+#: elf32-ppc.c:7515 elf32-ppc.c:7553
#, c-format
msgid "%pB(%pA+%#<PRIx64>): error: %s with unexpected instruction %#x"
msgstr "%pB(%pA+%#<PRIx64>): помилка: %s із неочікуваною інÑтрукцією %#x"
-#: elf32-ppc.c:7584
+#: elf32-ppc.c:7617
#, c-format
msgid "%X%H: unsupported bss-plt -fPIC ifunc %s\n"
msgstr "%X%H: непідтримувана bss-plt -fPIC ifunc %s\n"
-#: elf32-ppc.c:7899
+#: elf32-ppc.c:7653
+#, c-format
+msgid "%pB: reloc %#x unsupported"
+msgstr "%pB: непідтримуване переÑÑƒÐ²Ð°Ð½Ð½Ñ %#x"
+
+#: elf32-ppc.c:7938
#, c-format
msgid "%H: non-zero addend on %s reloc against `%s'\n"
msgstr "%H: ненульовий додаток до переÑÑƒÐ²Ð°Ð½Ð½Ñ %s щодо «%s»\n"
@@ -3205,49 +3246,49 @@ msgstr "%H: ненульовий додаток до переÑÑƒÐ²Ð°Ð½Ð½Ñ %s Ñ
#. local won't have the +32k reloc addend trick marking
#. -fPIC code, so the linker won't know whether r30 is
#. _GLOBAL_OFFSET_TABLE_ or pointing into a .got2 section.
-#: elf32-ppc.c:7931
+#: elf32-ppc.c:7970
#, c-format
msgid "%X%H: @local call to ifunc %s\n"
msgstr "%X%H: виклик @local ifunc %s\n"
-#: elf32-ppc.c:8109
+#: elf32-ppc.c:8149
#, c-format
msgid "%H: relocation %s for indirect function %s unsupported\n"
msgstr "%H: підтримки переÑÑƒÐ²Ð°Ð½Ð½Ñ %s опоÑередкованої функції %s не передбачено\n"
-#: elf32-ppc.c:8441 elf32-ppc.c:8472 elf32-ppc.c:8563 elf32-ppc.c:8659
+#: elf32-ppc.c:8488 elf32-ppc.c:8519 elf32-ppc.c:8622 elf32-ppc.c:8722
#, c-format
msgid "%pB: the target (%s) of a %s relocation is in the wrong output section (%s)"
msgstr "%pB: Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ (%s) переÑÑƒÐ²Ð°Ð½Ð½Ñ %s перебуває у помилковому розділі Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ (%s)"
-#: elf32-ppc.c:8814 elf32-ppc.c:8832
+#: elf32-ppc.c:8900 elf32-ppc.c:8921
msgid "%X%P: %H: %s relocation unsupported for bss-plt\n"
msgstr "%X%P: %H: підтримки переÑÑƒÐ²Ð°Ð½Ð½Ñ %s Ð´Ð»Ñ bss-plt не передбачено\n"
-#: elf32-ppc.c:8913
+#: elf32-ppc.c:9003
#, c-format
msgid "%H: error: %s against `%s' not a multiple of %u\n"
msgstr "%H: помилка: %s Ð´Ð»Ñ Â«%s» не Ñ” кратним до %u\n"
-#: elf32-ppc.c:8942
+#: elf32-ppc.c:9032
#, c-format
msgid "%H: unresolvable %s relocation against symbol `%s'\n"
msgstr "%H: нерозв’Ñзне переÑÑƒÐ²Ð°Ð½Ð½Ñ %s щодо Ñимволу «%s»\n"
-#: elf32-ppc.c:9023
+#: elf32-ppc.c:9114
#, c-format
msgid "%H: %s reloc against `%s': error %d\n"
msgstr "%H: переÑÑƒÐ²Ð°Ð½Ð½Ñ %s щодо «%s»: помилка %d\n"
-#: elf32-ppc.c:9904
+#: elf32-ppc.c:9995
msgid "%X%P: text relocations and GNU indirect functions will result in a segfault at runtime\n"
msgstr "%X%P: Ð¿Ð¾Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð¿ÐµÑ€ÐµÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ‚ÐµÐºÑту Ñ– опоÑередкованих функцій GNU призведе до помилки Ñегментації під Ñ‡Ð°Ñ Ð·Ð°Ð¿ÑƒÑку\n"
-#: elf32-ppc.c:9908 elf64-ppc.c:17667
+#: elf32-ppc.c:9999 elf64-ppc.c:18133
msgid "%P: warning: text relocations and GNU indirect functions may result in a segfault at runtime\n"
msgstr "%P: попередженнÑ: Ð¿Ð¾Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð¿ÐµÑ€ÐµÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ‚ÐµÐºÑту Ñ– опоÑередкованих функцій GNU може призвеÑти до помилки Ñегментації під Ñ‡Ð°Ñ Ð·Ð°Ð¿ÑƒÑку\n"
-#: elf32-ppc.c:9953
+#: elf32-ppc.c:10044
#, c-format
msgid "%s not defined in linker created %pA"
msgstr "%s не визначено у компонувальнику, Ñтвореному %pA"
@@ -3257,58 +3298,65 @@ msgstr "%s не визначено у компонувальнику, Ñтвор
msgid "error: %pB: old incompatible object file detected"
msgstr "помилка: %pB: виÑвлено заÑтарілий неÑуміÑний об'єктний файл"
-#: elf32-rl78.c:372
-msgid "internal error: RL78 reloc stack overflow"
-msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ñтека переÑувань RL78"
+#: elf32-rl78.c:551
+msgid "RL78 reloc stack overflow/underflow"
+msgstr "Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð°Ð±Ð¾ Ð²Ð¸Ñ‡ÐµÑ€Ð¿Ð°Ð½Ð½Ñ Ñтека переÑувань RL78"
-#: elf32-rl78.c:383
-msgid "internal error: RL78 reloc stack underflow"
-msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð²Ð¸Ñ‡ÐµÑ€Ð¿Ð°Ð½Ð½Ñ Ñтека переÑувань RL78"
+#: elf32-rl78.c:555
+msgid "RL78 reloc divide by zero"
+msgstr "Ð”Ñ–Ð»ÐµÐ½Ð½Ñ Ð½Ð° нуль у переÑуванні RL78"
-#: elf32-rl78.c:1053
+#: elf32-rl78.c:1069
msgid "warning: RL78_SYM reloc with an unknown symbol"
msgstr "попередженнÑ: переÑÑƒÐ²Ð°Ð½Ð½Ñ RL78_SYM з невідомим Ñимволом"
-#: elf32-rl78.c:1084 elf32-rx.c:1461
-#, c-format
-msgid "%pB(%pA): error: call to undefined function '%s'"
-msgstr "%pB(%pA): помилка: виклик невизначеної функції «%s»"
+#: elf32-rl78.c:1115
+msgid "%H: %s out of range\n"
+msgstr "%H: %s поза припуÑтимим діапазоном\n"
+
+#: elf32-rl78.c:1122
+msgid "%H: relocation type %u is not supported\n"
+msgstr "%H: підтримки типу переÑÑƒÐ²Ð°Ð½Ð½Ñ %u не передбачено\n"
-#: elf32-rl78.c:1205
+#: elf32-rl78.c:1134
+msgid "%H: relocation %s returns an unrecognized value %x\n"
+msgstr "%H: переÑÑƒÐ²Ð°Ð½Ð½Ñ %s повертає нерозпізнане Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ %x\n"
+
+#: elf32-rl78.c:1220
#, c-format
msgid "RL78 ABI conflict: G10 file %pB cannot be linked with %s file %pB"
msgstr "Конфлікт ABI RL78: файл G10 %pB не можна компонувати з %s, файл %pB"
-#: elf32-rl78.c:1222
+#: elf32-rl78.c:1237
#, c-format
msgid "RL78 ABI conflict: cannot link %s file %pB with %s file %pB"
msgstr "Конфлікт ABI RL78: не можна компонувати %s, файл %pB з %s, файл %pB"
-#: elf32-rl78.c:1231
+#: elf32-rl78.c:1246
msgid "RL78 merge conflict: cannot link 32-bit and 64-bit objects together"
msgstr "Конфлікт Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ RL78: не можна компонувати 32-бітові Ñ– 64-бітові об’єкти"
-#: elf32-rl78.c:1235 elf32-rl78.c:1239
+#: elf32-rl78.c:1250 elf32-rl78.c:1254
#, c-format
msgid "- %pB is 64-bit, %pB is not"
msgstr "- %pB є 64-бітовим, а %pB — ні"
-#: elf32-rl78.c:1266
+#: elf32-rl78.c:1281
#, c-format
msgid " [64-bit doubles]"
msgstr " [64-бітові double]"
-#: elf32-rx.c:607
+#: elf32-rx.c:618
#, c-format
msgid "%pB:%pA: table entry %s outside table"
msgstr "%pB:%pA: Ð·Ð°Ð¿Ð¸Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– %s поза таблицею"
-#: elf32-rx.c:614
+#: elf32-rx.c:625
#, c-format
msgid "%pB:%pA: table entry %s not word-aligned within table"
msgstr "%pB:%pA: Ð·Ð°Ð¿Ð¸Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– %s не вирівнÑно на межу Ñлова вÑередині таблиці"
-#: elf32-rx.c:689
+#: elf32-rx.c:700
#, c-format
msgid "%pB:%pA: warning: deprecated Red Hat reloc %s detected against: %s"
msgstr "%pB:%pA: попередженнÑ: заÑтарілий формат переÑÑƒÐ²Ð°Ð½Ð½Ñ Red Hat %s, виÑвлено Ð´Ð»Ñ %s"
@@ -3317,36 +3365,41 @@ msgstr "%pB:%pA: попередженнÑ: заÑтарілий формат пÐ
#. 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:709
+#: elf32-rx.c:720
#, c-format
msgid "%pB(%pA): unsafe PID relocation %s at %#<PRIx64> (against %s in %s)"
msgstr "%pB(%pA): небезпечне переÑÑƒÐ²Ð°Ð½Ð½Ñ PID %s до %#<PRIx64> (щодо %s у %s)"
-#: elf32-rx.c:1293
+#: elf32-rx.c:1304
msgid "warning: RX_SYM reloc with an unknown symbol"
msgstr "попередженнÑ: переÑÑƒÐ²Ð°Ð½Ð½Ñ RX_SYM з невідомим Ñимволом"
-#: elf32-rx.c:3173
+#: elf32-rx.c:1472
+#, c-format
+msgid "%pB(%pA): error: call to undefined function '%s'"
+msgstr "%pB(%pA): помилка: виклик невизначеної функції «%s»"
+
+#: elf32-rx.c:3184
#, c-format
msgid "there is a conflict merging the ELF header flags from %pB"
msgstr "під Ñ‡Ð°Ñ Ñпроби Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ–Ð² заголовка ELF з %pB виник конфлікт"
-#: elf32-rx.c:3176
+#: elf32-rx.c:3187
#, c-format
msgid " the input file's flags: %s"
msgstr " прапорці файла вхідних даних: %s"
-#: elf32-rx.c:3178
+#: elf32-rx.c:3189
#, c-format
msgid " the output file's flags: %s"
msgstr " прапорці файла результатів: %s"
-#: elf32-rx.c:3785
+#: elf32-rx.c:3796
#, c-format
msgid "%pB:%pA: table %s missing corresponding %s"
msgstr "%pB:%pA: у таблиці %s немає відповідного %s"
-#: elf32-rx.c:3793
+#: elf32-rx.c:3804
#, c-format
msgid "%pB:%pA: %s and %s must be in the same input section"
msgstr "%pB:%pA: %s і %s мають перебувати у одному розділі вхідних даних"
@@ -3356,35 +3409,35 @@ msgstr "%pB:%pA: %s і %s мають перебувати у одному роз
msgid "%pB(%pA+%#<PRIx64>): invalid instruction for TLS relocation %s"
msgstr "%pB(%pA+%#<PRIx64>): некоректна інÑÑ‚Ñ€ÑƒÐºÑ†Ñ–Ñ Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÑÑƒÐ²Ð°Ð½Ð½Ñ TLS %s"
-#: elf32-score.c:1524 elf32-score7.c:1385 elfxx-mips.c:3798
+#: elf32-score.c:1515 elf32-score7.c:1378 elfxx-mips.c:3798
msgid "not enough GOT space for local GOT entries"
msgstr "недоÑтатньо проÑтору GOT Ð´Ð»Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¸Ñ… запиÑів GOT"
-#: elf32-score.c:2756
+#: elf32-score.c:2747
msgid "address not word aligned"
msgstr "адреÑу не вирівнÑно за межею Ñлова"
-#: elf32-score.c:2837 elf32-score7.c:2642
+#: elf32-score.c:2828 elf32-score7.c:2635
#, c-format
msgid "%pB: malformed reloc detected for section %pA"
msgstr "%pB: Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %pA виÑвлено помилку у форматуванні перенеÑеннÑ"
-#: elf32-score.c:2891 elf32-score7.c:2696
+#: elf32-score.c:2882 elf32-score7.c:2689
#, c-format
msgid "%pB: CALL15 reloc at %#<PRIx64> not against global symbol"
msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ CALL15 у %#<PRIx64> не відноÑно загального Ñимволу"
-#: elf32-score.c:3999 elf32-score7.c:3804
+#: elf32-score.c:3990 elf32-score7.c:3797
#, c-format
msgid " [pic]"
msgstr " [pic]"
-#: elf32-score.c:4003 elf32-score7.c:3808
+#: elf32-score.c:3994 elf32-score7.c:3801
#, c-format
msgid " [fix dep]"
msgstr " [фікÑ. розт.]"
-#: elf32-score.c:4050 elf32-score7.c:3855
+#: elf32-score.c:4041 elf32-score7.c:3848
#, c-format
msgid "%pB: warning: linking PIC files with non-PIC files"
msgstr "%pB: попередженнÑ: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð² PIC з файлами, Ñкі не Ñ” файлами PIC"
@@ -3515,7 +3568,7 @@ msgstr "%pB: доÑтуп до «%s» виконуєтьÑÑ Ñк до ÑимвÐ
msgid "%pB: Function descriptor relocation with non-zero addend"
msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð´ÐµÑкриптора функції з ненульовим доданком"
-#: elf32-sh.c:5721 elf64-alpha.c:4662
+#: elf32-sh.c:5721 elf64-alpha.c:4663
#, c-format
msgid "%pB: TLS local exec code cannot be linked into shared objects"
msgstr "%pB: виконуваний код локального TLS не можна компонувати у об’єкти Ñпільного викориÑтаннÑ"
@@ -3601,7 +3654,7 @@ msgstr "%s у розділі накладки"
msgid "overlay stub relocation overflow"
msgstr "Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ Ð¿ÐµÑ€ÐµÑÑƒÐ²Ð°Ð½Ð½Ñ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð° накладки"
-#: elf32-spu.c:1991 elf64-ppc.c:14761
+#: elf32-spu.c:1991 elf64-ppc.c:15187
msgid "stubs don't match calculated size"
msgstr "шаблони не відповідають обчиÑленому розміру"
@@ -3748,8 +3801,8 @@ msgstr "попередженнÑ: %pB Ñ– %pB відрізнÑÑŽÑ‚ÑŒÑÑ Ð·Ð° Ñ€Ð
msgid "warning: %pB and %pB differ in whether code is compiled for DSBT"
msgstr "попередженнÑ: %pB Ñ– %pB відрізнÑÑŽÑ‚ÑŒÑÑ Ð·Ð° тим, чи було Ñ—Ñ… зібрано Ð´Ð»Ñ DSBT"
-#: elf32-tilepro.c:3627 elfxx-tilegx.c:4017 elfxx-x86.c:1397
-#: elfnn-aarch64.c:9711 elfnn-riscv.c:3253
+#: elf32-tilepro.c:3627 elfxx-tilegx.c:4017 elfxx-x86.c:2409
+#: elfnn-aarch64.c:9714 elfnn-loongarch.c:2971 elfnn-riscv.c:3269
#, c-format
msgid "discarded output section: `%pA'"
msgstr "відкинуто розділ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ…: «%pA»"
@@ -4021,56 +4074,56 @@ msgstr "помилка під Ñ‡Ð°Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… щодо типу
msgid "non-zero addend in @fptr reloc"
msgstr "ненульовий доданок у переÑуванні @fptr"
-#: elf32-xtensa.c:1002
+#: elf32-xtensa.c:1010
#, c-format
msgid "%pB(%pA): invalid property table"
msgstr "%pB(%pA): некоректна Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ð²Ð»Ð°ÑтивоÑтей"
-#: elf32-xtensa.c:2734
+#: elf32-xtensa.c:2744
#, c-format
msgid "%pB(%pA+%#<PRIx64>): relocation offset out of range (size=%#<PRIx64>)"
msgstr "%pB(%pA+%#<PRIx64>): відÑтуп переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ð·Ð° діапазоном (розмір=%#<PRIx64>)"
-#: elf32-xtensa.c:2817 elf32-xtensa.c:2940
+#: elf32-xtensa.c:2827 elf32-xtensa.c:2950
msgid "dynamic relocation in read-only section"
msgstr "динамічне переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ розділі, призначеному лише Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ"
-#: elf32-xtensa.c:2917
+#: elf32-xtensa.c:2927
msgid "TLS relocation invalid without dynamic sections"
msgstr "ПереÑÑƒÐ²Ð°Ð½Ð½Ñ TLS Ñ” некоректним без динамічних розділів"
-#: elf32-xtensa.c:3130
+#: elf32-xtensa.c:3140
msgid "internal inconsistency in size of .got.loc section"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð½ÐµÐ¿Ð¾ÑлідовніÑÑ‚ÑŒ у розмірах розділу .got.loc"
-#: elf32-xtensa.c:3436
+#: elf32-xtensa.c:3446
#, c-format
msgid "%pB: incompatible machine type; output is 0x%x; input is 0x%x"
msgstr "%pB: неÑуміÑні типи архітектур. Ð’Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ â€” 0x%x. Вхідні дані — 0x%x"
-#: elf32-xtensa.c:4735 elf32-xtensa.c:4743
+#: elf32-xtensa.c:4745 elf32-xtensa.c:4753
msgid "attempt to convert L32R/CALLX to CALL failed"
msgstr "Ñпроба Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ L32R/CALLX на CALL зазнала невдачі"
-#: elf32-xtensa.c:6571 elf32-xtensa.c:6650 elf32-xtensa.c:8076
+#: elf32-xtensa.c:6581 elf32-xtensa.c:6660 elf32-xtensa.c:8086
#, c-format
msgid "%pB(%pA+%#<PRIx64>): could not decode instruction; possible configuration mismatch"
msgstr "%pB(%pA+%#<PRIx64>): не вдалоÑÑ Ð´ÐµÐºÐ¾Ð´ÑƒÐ²Ð°Ñ‚Ð¸ інÑтрукцію, можлива невідповідніÑÑ‚ÑŒ конфігурацій"
-#: elf32-xtensa.c:7817
+#: elf32-xtensa.c:7827
#, c-format
msgid "%pB(%pA+%#<PRIx64>): could not decode instruction for XTENSA_ASM_SIMPLIFY relocation; possible configuration mismatch"
msgstr "%pB(%pA+%#<PRIx64>): не вдалоÑÑ Ð´ÐµÐºÐ¾Ð´ÑƒÐ²Ð°Ñ‚Ð¸ інÑтрукцію Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÑÑƒÐ²Ð°Ð½Ð½Ñ XTENSA_ASM_SIMPLIFY, можлива невідповідніÑÑ‚ÑŒ конфігурацій"
-#: elf32-xtensa.c:9675
+#: elf32-xtensa.c:9685
msgid "invalid relocation address"
msgstr "некоректна адреÑа переÑуваннÑ"
-#: elf32-xtensa.c:9766
+#: elf32-xtensa.c:9776
msgid "overflow after relaxation"
msgstr "Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð¿Ñ–ÑÐ»Ñ Ð¾Ð¿Ñ‚Ð¸Ð¼Ñ–Ð·Ð°Ñ†Ñ–Ñ— розміру"
-#: elf32-xtensa.c:10912
+#: elf32-xtensa.c:10922
#, c-format
msgid "%pB(%pA+%#<PRIx64>): unexpected fix for %s relocation"
msgstr "%pB(%pA+%#<PRIx64>): неочікуване Ð²Ð¸Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÑÑƒÐ²Ð°Ð½Ð½Ñ %s"
@@ -4094,7 +4147,8 @@ msgstr "%pB: непідтримувана архітектура %#x"
msgid "GPDISP relocation did not find ldah and lda instructions"
msgstr "ПереÑуваннÑм GPDISP не знайдено інÑтрукції ldah Ñ– lda"
-#: elf64-alpha.c:2002 elf64-alpha.c:2697 elflink.c:15091
+#: elf64-alpha.c:2002 elf64-alpha.c:2697 elflink.c:15304
+#: elfnn-loongarch.c:1161
#, c-format
msgid "%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"
msgstr "%pB: динамічне переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ «%pT» у розділі «%pA», призначеному лише Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ\n"
@@ -4109,41 +4163,41 @@ msgstr "%pB: розмір підÑегмента .got перевищує 64кБ
msgid "%pB: %pA+%#<PRIx64>: warning: %s relocation against unexpected insn"
msgstr "%pB: %pA+%#<PRIx64>: попередженнÑ: переÑÑƒÐ²Ð°Ð½Ð½Ñ %s щодо неочікуваної інÑтрукції"
-#: elf64-alpha.c:4386 elf64-alpha.c:4399
+#: elf64-alpha.c:4387 elf64-alpha.c:4400
#, c-format
msgid "%pB: gp-relative relocation against dynamic symbol %s"
msgstr "%pB: gp-відноÑне переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ динамічного Ñимволу %s"
-#: elf64-alpha.c:4455
+#: elf64-alpha.c:4456
#, c-format
msgid "%pB: change in gp: BRSGP %s"
msgstr "%pB: зміна у gp: BRSGP %s"
-#: elf64-alpha.c:4480 mach-o.c:616 elfnn-riscv.c:619
+#: elf64-alpha.c:4481 mach-o.c:616 elfnn-riscv.c:619
msgid "<unknown>"
msgstr "<невідома>"
-#: elf64-alpha.c:4486
+#: elf64-alpha.c:4487
#, c-format
msgid "%pB: !samegp reloc against symbol without .prologue: %s"
msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ !samegp щодо Ñимволу без .prologue: %s"
-#: elf64-alpha.c:4544
+#: elf64-alpha.c:4545
#, c-format
msgid "%pB: unhandled dynamic relocation against %s"
msgstr "%pB: непридатне до обробки динамічне переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ %s"
-#: elf64-alpha.c:4579
+#: elf64-alpha.c:4580
#, c-format
msgid "%pB: pc-relative relocation against undefined weak symbol %s"
msgstr "%pB: pc-відноÑне переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ невизначеного Ñлабкого Ñимволу %s"
-#: elf64-alpha.c:4645
+#: elf64-alpha.c:4646
#, c-format
msgid "%pB: dtp-relative relocation against dynamic symbol %s"
msgstr "%pB: dtp-відноÑне переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ динамічного Ñимволу %s"
-#: elf64-alpha.c:4670
+#: elf64-alpha.c:4671
#, c-format
msgid "%pB: tp-relative relocation against dynamic symbol %s"
msgstr "%pB: tp-відноÑне переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ динамічного Ñимволу %s"
@@ -4177,96 +4231,96 @@ msgstr "%pB: не вдалоÑÑ Ð¾Ð¿Ñ‚Ð¸Ð¼Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ br за адреÑою
msgid "@pltoff reloc against local symbol"
msgstr "переÑÑƒÐ²Ð°Ð½Ð½Ñ @pltoff щодо локального Ñимволу"
-#: elf64-ia64-vms.c:3283 elfnn-ia64.c:3670
+#: elf64-ia64-vms.c:3277 elfnn-ia64.c:3670
#, c-format
msgid "%pB: short data segment overflowed (%#<PRIx64> >= 0x400000)"
msgstr "%pB: переповнено короткий Ñегмент даних (%#<PRIx64> >= 0x400000)"
-#: elf64-ia64-vms.c:3293 elfnn-ia64.c:3680
+#: elf64-ia64-vms.c:3287 elfnn-ia64.c:3680
#, c-format
msgid "%pB: __gp does not cover short data segment"
msgstr "%pB: __gp не вкриває короткого Ñегмента даних"
-#: elf64-ia64-vms.c:3563 elfnn-ia64.c:3953
+#: elf64-ia64-vms.c:3557 elfnn-ia64.c:3953
#, c-format
msgid "%pB: non-pic code with imm relocation against dynamic symbol `%s'"
msgstr "%pB: не-pic код з переÑуваннÑм imm щодо динамічного Ñимволу «%s»"
-#: elf64-ia64-vms.c:3627 elfnn-ia64.c:4021
+#: elf64-ia64-vms.c:3621 elfnn-ia64.c:4021
#, c-format
msgid "%pB: @gprel relocation against dynamic symbol %s"
msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ @gprel щодо динамічного Ñимволу %s"
-#: elf64-ia64-vms.c:3686 elfnn-ia64.c:4084
+#: elf64-ia64-vms.c:3680 elfnn-ia64.c:4084
#, c-format
msgid "%pB: linking non-pic code in a position independent executable"
msgstr "%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ðµ-pic коду у виконуваному файлі з незалежним позиціюваннÑм"
-#: elf64-ia64-vms.c:3788 elfnn-ia64.c:4222
+#: elf64-ia64-vms.c:3782 elfnn-ia64.c:4222
#, c-format
msgid "%pB: @internal branch to dynamic symbol %s"
msgstr "%pB: Ð²Ñ–Ð´Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ @internal до динамічного Ñимволу %s"
-#: elf64-ia64-vms.c:3791 elfnn-ia64.c:4225
+#: elf64-ia64-vms.c:3785 elfnn-ia64.c:4225
#, c-format
msgid "%pB: speculation fixup to dynamic symbol %s"
msgstr "%pB: здогадка щодо адреÑної прив’Ñзки до динамічного Ñимволу %s"
-#: elf64-ia64-vms.c:3794 elfnn-ia64.c:4228
+#: elf64-ia64-vms.c:3788 elfnn-ia64.c:4228
#, c-format
msgid "%pB: @pcrel relocation against dynamic symbol %s"
msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ @pcrel щодо динамічного Ñимволу %s"
-#: elf64-ia64-vms.c:3918 elfnn-ia64.c:4425
+#: elf64-ia64-vms.c:3912 elfnn-ia64.c:4425
msgid "unsupported reloc"
msgstr "непідтримуване переÑуваннÑ"
-#: elf64-ia64-vms.c:3955 elfnn-ia64.c:4463
+#: elf64-ia64-vms.c:3949 elfnn-ia64.c:4463
#, c-format
msgid "%pB: missing TLS section for relocation %s against `%s' at %#<PRIx64> in section `%pA'."
msgstr "%pB: не виÑтачає розділу TLS Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÑÑƒÐ²Ð°Ð½Ð½Ñ %s щодо «%s» за адреÑою %#<PRIx64> у розділі «%pA»."
-#: elf64-ia64-vms.c:3972 elfnn-ia64.c:4480
+#: elf64-ia64-vms.c:3966 elfnn-ia64.c:4480
#, c-format
msgid "%pB: Can't relax br (%s) to `%s' at %#<PRIx64> in section `%pA' with size %#<PRIx64> (> 0x1000000)."
msgstr "%pB: не вдалоÑÑ Ð¾Ð¿Ñ‚Ð¸Ð¼Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ br (%s) до «%s» за адреÑою %#<PRIx64> у розділі «%pA» з розміром %#<PRIx64> (> 0x1000000)."
-#: elf64-ia64-vms.c:4268 elfnn-ia64.c:4741
+#: elf64-ia64-vms.c:4262 elfnn-ia64.c:4741
#, c-format
msgid "%pB: linking trap-on-NULL-dereference with non-trapping files"
msgstr "%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ trap-on-NULL-dereference з файлами без Ð·Ð°Ñ…Ð¾Ð¿Ð»ÐµÐ½Ð½Ñ (trapping)"
-#: elf64-ia64-vms.c:4277 elfnn-ia64.c:4750
+#: elf64-ia64-vms.c:4271 elfnn-ia64.c:4750
#, c-format
msgid "%pB: linking big-endian files with little-endian files"
msgstr "%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð² зі прÑмим порÑдком байтів з файлами зі зворотним порÑдком байтів"
-#: elf64-ia64-vms.c:4286 elfnn-ia64.c:4759
+#: elf64-ia64-vms.c:4280 elfnn-ia64.c:4759
#, c-format
msgid "%pB: linking 64-bit files with 32-bit files"
msgstr "%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ 64-бітових файлів з 32-бітовими файлами"
-#: elf64-ia64-vms.c:4295 elfnn-ia64.c:4768
+#: elf64-ia64-vms.c:4289 elfnn-ia64.c:4768
#, c-format
msgid "%pB: linking constant-gp files with non-constant-gp files"
msgstr "%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð² зі Ñталим gp з файлами зі змінним gp"
-#: elf64-ia64-vms.c:4305 elfnn-ia64.c:4778
+#: elf64-ia64-vms.c:4299 elfnn-ia64.c:4778
#, c-format
msgid "%pB: linking auto-pic files with non-auto-pic files"
msgstr "%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð² з автоматичним pic з файлами без автоматичного pic"
-#: elf64-ia64-vms.c:5152 elflink.c:5148
+#: elf64-ia64-vms.c:5146 elflink.c:5294
#, c-format
msgid "warning: alignment %u of common symbol `%s' in %pB is greater than the alignment (%u) of its section %pA"
msgstr "попередженнÑ: Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ %u загального Ñимволу «%s» у %pB перевищує Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ (%u) його розділу %pA"
-#: elf64-ia64-vms.c:5159 elflink.c:5155
+#: elf64-ia64-vms.c:5153 elflink.c:5301
#, c-format
msgid "warning: alignment %u of symbol `%s' in %pB is smaller than %u in %pB"
msgstr "попередженнÑ: Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ %u Ñимволу «%s» у %pB Ñ” меншим за %u у %pB"
-#: elf64-ia64-vms.c:5175 elflink.c:5172
+#: elf64-ia64-vms.c:5169 elflink.c:5318
#, c-format
msgid "warning: size of symbol `%s' changed from %<PRIu64> in %pB to %<PRIu64> in %pB"
msgstr "попередженнÑ: розмір Ñимволу «%s» змінено з %<PRIu64> у %pB на %<PRIu64> у %pB"
@@ -4337,66 +4391,66 @@ msgstr "у розділі регіÑтрів міÑÑ‚ÑÑ‚ÑŒÑÑ Ð´Ð°Ð½Ñ–\n"
msgid "internal inconsistency: remaining %lu != max %lu; please report this bug"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð½ÐµÑƒÐ·Ð³Ð¾Ð´Ð¶ÐµÐ½Ñ–ÑÑ‚ÑŒ: залишилоÑÑ %lu != макÑ. %lu; будь лаÑка, повідомте про цю ваду"
-#: elf64-ppc.c:1349
+#: elf64-ppc.c:1357
#, c-format
msgid "warning: %s should be used rather than %s"
msgstr "попередженнÑ: Ñлід викориÑтовувати %s, а не %s"
-#: elf64-ppc.c:4153
+#: elf64-ppc.c:4281
#, c-format
msgid "symbol '%s' has invalid st_other for ABI version 1"
msgstr "Ñимвол «%s» має некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ st_other Ð´Ð»Ñ Ð²ÐµÑ€ÑÑ–Ñ— ABI 1"
-#: elf64-ppc.c:4334
+#: elf64-ppc.c:4462
#, c-format
msgid "%pB .opd not allowed in ABI version %d"
msgstr ".opd %pB не можна викориÑтовувати у верÑÑ–Ñ— ABI %d"
-#: elf64-ppc.c:4906
+#: elf64-ppc.c:5055
#, c-format
msgid "%H: %s reloc unsupported in shared libraries and PIEs\n"
msgstr "%H: підтримки переÑÑƒÐ²Ð°Ð½Ð½Ñ %s не передбачено у бібліотеках Ñпільного кориÑÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ– PIE\n"
-#: elf64-ppc.c:5316
+#: elf64-ppc.c:5476
#, c-format
msgid "%pB uses unknown e_flags 0x%lx"
msgstr "%pB викориÑтовує невідоме Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ e_flags 0x%lx"
-#: elf64-ppc.c:5324
+#: elf64-ppc.c:5484
#, c-format
msgid "%pB: ABI version %ld is not compatible with ABI version %ld output"
msgstr "%pB: верÑÑ–Ñ ABI %ld Ñ” неÑуміÑною з верÑією ABI %ld результату"
-#: elf64-ppc.c:5351
+#: elf64-ppc.c:5511
#, c-format
msgid " [abiv%ld]"
msgstr " [abiv%ld]"
-#: elf64-ppc.c:6649
+#: elf64-ppc.c:6808
msgid "%P: copy reloc against `%pT' requires lazy plt linking; avoid setting LD_BIND_NOW=1 or upgrade gcc\n"
msgstr "%P: ÐºÐ¾Ð¿Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ Ð¿ÐµÑ€ÐµÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ «%pT» потребує відкладеного ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ plt; не вÑтановлюйте LD_BIND_NOW=1 або оновіть gcc\n"
-#: elf64-ppc.c:6916
+#: elf64-ppc.c:7075
#, c-format
msgid "%pB: undefined symbol on R_PPC64_TOCSAVE relocation"
msgstr "%pB: невизначений Ñимвол у переÑуванні R_PPC64_TOCSAVE"
-#: elf64-ppc.c:7164
+#: elf64-ppc.c:7331
#, c-format
msgid "dynreloc miscount for %pB, section %pA"
msgstr "помилки у обчиÑленні динамічного переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ %pB, розділ %pA"
-#: elf64-ppc.c:7253
+#: elf64-ppc.c:7420
#, c-format
msgid "%pB: .opd is not a regular array of opd entries"
msgstr "%pB: .opd не Ñ” звичайним маÑивом запиÑів opd"
-#: elf64-ppc.c:7263
+#: elf64-ppc.c:7430
#, c-format
msgid "%pB: unexpected reloc type %u in .opd section"
msgstr "%pB: неочікуваний тип переÑуваннÑ, %u, у розділі .opd"
-#: elf64-ppc.c:7285
+#: elf64-ppc.c:7452
#, c-format
msgid "%pB: undefined sym `%s' in .opd section"
msgstr "%pB: невизначений Ñимвол, «%s» у розділі .opd"
@@ -4408,81 +4462,81 @@ msgstr "%pB: невизначений Ñимвол, «%s» у розділі .op
#. __glink_PLTresolve save of r2 is incompatible with code
#. making tail calls, because the tail call might go via the
#. resolver and thus overwrite the proper saved r2.
-#: elf64-ppc.c:7779
+#: elf64-ppc.c:7953
msgid "warning: --plt-localentry is incompatible with power10 pc-relative code"
msgstr "попередженнÑ: --plt-localentry Ñ” неÑуміÑним із відноÑним щодо лічильника програми кодом power10"
-#: elf64-ppc.c:7787
+#: elf64-ppc.c:7961
msgid "warning: --plt-localentry is especially dangerous without ld.so support to detect ABI violations"
msgstr "попередженнÑ: --plt-localentry оÑобливо небезпечний, Ñкщо у ld.so не передбачено підтримки виÑÐ²Ð»ÐµÐ½Ð½Ñ Ð¿Ð¾Ñ€ÑƒÑˆÐµÐ½ÑŒ ABI"
-#: elf64-ppc.c:8111
+#: elf64-ppc.c:8277
msgid "%H __tls_get_addr lost arg, TLS optimization disabled\n"
msgstr "%H __tls_get_addr втрачено аргумент, оптимізацію TLS вимкнено\n"
-#: elf64-ppc.c:8546 elf64-ppc.c:9259
+#: elf64-ppc.c:8712 elf64-ppc.c:9425
#, c-format
msgid "%s defined on removed toc entry"
msgstr "%s визначено у вилученому запиÑÑ– toc"
-#: elf64-ppc.c:9216
+#: elf64-ppc.c:9382
#, c-format
msgid "%H: %s references optimized away TOC entry\n"
msgstr "%H: %s поÑилаєтьÑÑ Ð½Ð° уÑунутий у результаті оптимізації Ð·Ð°Ð¿Ð¸Ñ TOC\n"
-#: elf64-ppc.c:9437
+#: elf64-ppc.c:9603
#, c-format
msgid "%H: got/toc optimization is not supported for %s instruction\n"
msgstr "%H: Ð´Ð»Ñ Ñ–Ð½Ñтрукції %s не передбачено підтримки оптимізації got/toc\n"
-#: elf64-ppc.c:10282
+#: elf64-ppc.c:10474
#, c-format
msgid "warning: discarding dynamic section %s"
msgstr "попередженнÑ: відкидаємо динамічний розділ %s"
-#: elf64-ppc.c:11433
+#: elf64-ppc.c:11616
msgid "%P: cannot find opd entry toc for `%pT'\n"
msgstr "`%P: не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ð·Ð°Ð¿Ð¸Ñ opd у toc Ð´Ð»Ñ Â«%pT»\n"
-#: elf64-ppc.c:11481 elf64-ppc.c:12030
+#: elf64-ppc.c:11664 elf64-ppc.c:12189
msgid "%F%P: Could not assign group %pA target %pA to an output section. Retry without --enable-non-contiguous-regions.\n"
msgstr "F%P: не вдалоÑÑ Ð¿Ð¾Ð²'Ñзати групу %pA Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ %pA із розділом виведеннÑ. Повторіть без --enable-non-contiguous-regions.\n"
-#: elf64-ppc.c:11542
+#: elf64-ppc.c:11724
#, c-format
msgid "long branch stub `%s' offset overflow"
msgstr "Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð²Ñ–Ð´Ñтупу шаблона довгої гілки, «%s»"
-#: elf64-ppc.c:11569
+#: elf64-ppc.c:11751
#, c-format
msgid "can't find branch stub `%s'"
msgstr "не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ шаблон Ñ€Ð¾Ð·Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ Â«%s»"
-#: elf64-ppc.c:11633 elf64-ppc.c:11898 elf64-ppc.c:14202
+#: elf64-ppc.c:11815 elf64-ppc.c:12067 elf64-ppc.c:14574
#, c-format
msgid "%P: linkage table error against `%pT'\n"
msgstr "%P: помилка у таблиці ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ «%pT»\n"
-#: elf64-ppc.c:12102
+#: elf64-ppc.c:12263
#, c-format
msgid "can't build branch stub `%s'"
msgstr "не вдалоÑÑ Ð¿Ð¾Ð±ÑƒÐ´ÑƒÐ²Ð°Ñ‚Ð¸ шаблон Ñ€Ð¾Ð·Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ Â«%s»"
-#: elf64-ppc.c:13114
+#: elf64-ppc.c:13270
#, c-format
msgid "%pB section %pA exceeds stub group size"
msgstr "Розділ %pB, %pA, перевищує розміри групи шаблонів"
-#: elf64-ppc.c:14381
+#: elf64-ppc.c:14756
msgid "__tls_get_addr call offset overflow"
msgstr "виклик __tls_get_addr призводить до Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð·Ñуву"
-#: elf64-ppc.c:14720 elf64-ppc.c:14739
+#: elf64-ppc.c:15095 elf64-ppc.c:15114
#, c-format
msgid "%s offset too large for .eh_frame sdata4 encoding"
msgstr "відÑтуп %s Ñ” надто великим Ð´Ð»Ñ ÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ sdata4 .eh_frame"
-#: elf64-ppc.c:14771
+#: elf64-ppc.c:15195
#, c-format
msgid "linker stubs in %u group\n"
msgid_plural "linker stubs in %u groups\n"
@@ -4491,83 +4545,65 @@ msgstr[1] "компонувальник не зміг виконати робоÑ
msgstr[2] "компонувальник не зміг виконати роботу у %u групах\n"
msgstr[3] "компонувальник не зміг виконати роботу у %u групі\n"
-#: elf64-ppc.c:14778
+#: elf64-ppc.c:15202
#, c-format
msgid ""
"%s branch %lu\n"
-" branch toc adj %lu\n"
-" branch notoc %lu\n"
-" branch both %lu\n"
" long branch %lu\n"
-" long toc adj %lu\n"
-" long notoc %lu\n"
-" long both %lu\n"
" plt call %lu\n"
-" plt call save %lu\n"
-" plt call notoc %lu\n"
-" plt call both %lu\n"
" global entry %lu"
msgstr ""
-"%s гілка %lu\n"
-" toc adj гілки %lu\n"
-" notoc гілки %lu\n"
-" both гілки %lu\n"
-" long branch %lu\n"
-" long toc adj %lu\n"
-" long notoc %lu\n"
-" long both %lu\n"
-" plt call %lu\n"
-" plt call save %lu\n"
-" plt call notoc %lu\n"
-" plt call both %lu\n"
-" заг. Ð·Ð°Ð¿Ð¸Ñ %lu"
+"%s гілка %lu\n"
+" довга гілка %lu\n"
+" виклик plt %lu\n"
+" загальний Ð·Ð°Ð¿Ð¸Ñ %lu"
-#: elf64-ppc.c:15178
+#: elf64-ppc.c:15584
#, c-format
msgid "%H: %s used with TLS symbol `%pT'\n"
msgstr "%H: %s викориÑтовуєтьÑÑ Ð· Ñимволом TLS «%pT»\n"
-#: elf64-ppc.c:15180
+#: elf64-ppc.c:15586
#, c-format
msgid "%H: %s used with non-TLS symbol `%pT'\n"
msgstr "%H: %s викориÑтовуєтьÑÑ Ð· Ñимволом поза TLS «%pT»\n"
-#: elf64-ppc.c:15936
+#: elf64-ppc.c:16370
#, c-format
msgid "%H: call to `%pT' lacks nop, can't restore toc; (plt call stub)\n"
msgstr "%P: %H: у виклику «%pT» не виÑтачає nop, Ð²Ñ–Ð´Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ toc неможливе (фіктивний виклик plt)\n"
-#: elf64-ppc.c:15942
+#: elf64-ppc.c:16376
#, c-format
msgid "%H: call to `%pT' lacks nop, can't restore toc; (toc save/adjust stub)\n"
msgstr "%P: %H: у виклику «%pT» не виÑтачає nop, Ð²Ñ–Ð´Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ toc неможливе (фіктивне save/adjust toc)\n"
-#: elf64-ppc.c:16845
+#: elf64-ppc.c:17290
#, c-format
msgid "%H: %s for indirect function `%pT' unsupported\n"
msgstr "%H: підтримки %s Ð´Ð»Ñ Ð¾Ð¿Ð¾Ñередкованої функції «%pT» не передбачено\n"
-#: elf64-ppc.c:16930
+#: elf64-ppc.c:17382
#, c-format
msgid "%X%P: %pB: %s against %pT is not supported by glibc as a dynamic relocation\n"
msgstr "%X%P: %pB: підтримки %s щодо %pT Ñк динамічного переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ðµ передбачено у glibc\n"
-#: elf64-ppc.c:16985
+#: elf64-ppc.c:17437
#, c-format
msgid "%P: %pB: %s is not supported for `%pT'\n"
msgstr "%P: %pB: підтримки %s Ð´Ð»Ñ Â«%pT» не передбачено\n"
-#: elf64-ppc.c:17233
+#: elf64-ppc.c:17698
#, c-format
msgid "%H: error: %s not a multiple of %u\n"
msgstr "%H: помилка: %s не є кратним до %u\n"
-#: elf64-ppc.c:17256
+#: elf64-ppc.c:17721
#, c-format
msgid "%H: unresolvable %s against `%pT'\n"
msgstr "%H: нерозв’Ñзне %s щодо «%pT»\n"
-#: elf64-ppc.c:17400
+#: elf64-ppc.c:17866
#, c-format
msgid "%H: %s against `%pT': error %d\n"
msgstr "%H: %s щодо «%pT»: помилка %d\n"
@@ -4602,101 +4638,101 @@ msgstr "Символ «%s» належить до різних типів: %s у
msgid "%pB: linking UltraSPARC specific with HAL specific code"
msgstr "%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ UltraSPARC-Ñпецифічного та HAL-Ñпецифічного коду"
-#: elf64-x86-64.c:1415
+#: elf64-x86-64.c:1400
msgid "hidden symbol "
msgstr "прихований Ñимвол "
-#: elf64-x86-64.c:1418
+#: elf64-x86-64.c:1403
msgid "internal symbol "
msgstr "внутрішній Ñимвол "
-#: elf64-x86-64.c:1421 elf64-x86-64.c:1425
+#: elf64-x86-64.c:1406 elf64-x86-64.c:1410
msgid "protected symbol "
msgstr "захищений Ñимвол "
-#: elf64-x86-64.c:1427
+#: elf64-x86-64.c:1412
msgid "symbol "
msgstr "Ñимвол "
-#: elf64-x86-64.c:1433
+#: elf64-x86-64.c:1418
msgid "undefined "
msgstr "невизначений "
-#: elf64-x86-64.c:1443
+#: elf64-x86-64.c:1428
msgid "a shared object"
msgstr "Ñпільний об'єкт"
-#: elf64-x86-64.c:1445
+#: elf64-x86-64.c:1430
msgid "; recompile with -fPIC"
msgstr "; виконайте повторне Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ Ð· -fPIC"
-#: elf64-x86-64.c:1450
+#: elf64-x86-64.c:1435
msgid "a PIE object"
msgstr "об'єкт PIE"
-#: elf64-x86-64.c:1452
+#: elf64-x86-64.c:1437
msgid "a PDE object"
msgstr "об'єкт PDE"
-#: elf64-x86-64.c:1454
+#: elf64-x86-64.c:1439
msgid "; recompile with -fPIE"
msgstr "; виконайте повторне Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ Ð· -fPIE"
-#: elf64-x86-64.c:1458
+#: elf64-x86-64.c:1443
#, c-format
msgid "%pB: relocation %s against %s%s`%s' can not be used when making %s%s"
msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ %s щодо %s%s«%s», не можна викориÑтовувати під Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ %s%s"
-#: elf64-x86-64.c:1966
+#: elf64-x86-64.c:1948
#, c-format
msgid "%pB: relocation %s against symbol `%s' isn't supported in x32 mode"
msgstr "%pB: підтримки переÑÑƒÐ²Ð°Ð½Ð½Ñ %s щодо Ñимволу «%s» у режимі x32 не передбачено"
-#: elf64-x86-64.c:2122
+#: elf64-x86-64.c:2092
#, c-format
msgid "%pB: '%s' accessed both as normal and thread local symbol"
msgstr "'%pB: доÑтуп до «%s» виконуєтьÑÑ Ñк до звичайного Ñимволу та локального Ð´Ð»Ñ Ð¿Ð¾Ñ‚Ð¾ÐºÑƒ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ñимволу"
-#: elf64-x86-64.c:2747 elfnn-aarch64.c:5542 elfnn-riscv.c:2124
+#: elf64-x86-64.c:2727 elfnn-aarch64.c:5545 elfnn-riscv.c:2140
#, c-format
msgid "%pB: relocation %s against STT_GNU_IFUNC symbol `%s' has non-zero addend: %<PRId64>"
msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ %s щодо Ñимволу STT_GNU_IFUNC, «%s», міÑтить ненульовий доданок: %<PRId64>"
-#: elf64-x86-64.c:3003
+#: elf64-x86-64.c:2989
#, c-format
msgid "%pB: relocation R_X86_64_GOTOFF64 against undefined %s `%s' can not be used when making a shared object"
msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ R_X86_64_GOTOFF64 щодо невизначеного %s, «%s», не можна викориÑтовувати під Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñпільного викориÑтаннÑ"
-#: elf64-x86-64.c:3017
+#: elf64-x86-64.c:3003
#, c-format
msgid "%pB: relocation R_X86_64_GOTOFF64 against protected %s `%s' can not be used when making a shared object"
msgstr "%pB: не можна викориÑтовувати R_X86_64_GOTOFF64 переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ захищеної %s «%s» під Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñпільного викориÑтаннÑ"
-#: elf64-x86-64.c:3297
+#: elf64-x86-64.c:3296
#, c-format
msgid "%pB: addend %s%#x in relocation %s against symbol `%s' at %#<PRIx64> in section `%pA' is out of range"
msgstr "%pB: доданок %s%#x у переÑуванні %s щодо Ñимволу «%s» за адреÑою %#<PRIx64> у розділі «%pA» перебуває поза межами припуÑтимого діапазону"
-#: elf64-x86-64.c:3437 elflink.c:13453
+#: elf64-x86-64.c:3439 elflink.c:13654
msgid "%F%P: corrupt input: %pB\n"
msgstr "%F%P: пошкоджені вхідні дані: %pB\n"
-#: elf64-x86-64.c:4123
+#: elf64-x86-64.c:4125
#, c-format
msgid " failed to convert GOTPCREL relocation against '%s'; relink with --no-relax\n"
msgstr " не вдалоÑÑ Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ переÑÑƒÐ²Ð°Ð½Ð½Ñ GOTPCREL щодо «%s»; повторно Ñкомпонуйте з --no-relax\n"
-#: elf64-x86-64.c:4284
+#: elf64-x86-64.c:4286
#, c-format
msgid "%F%pB: PC-relative offset overflow in PLT entry for `%s'\n"
msgstr "%F%pB: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð·Ñуву відноÑно PC у запиÑÑ– PLT Ð´Ð»Ñ Â«%s»\n"
-#: elf64-x86-64.c:4352
+#: elf64-x86-64.c:4354
#, c-format
msgid "%F%pB: branch displacement overflow in PLT entry for `%s'\n"
msgstr "%F%pB: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÐµÐ¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð³Ñ–Ð»Ð¾Ðº у запиÑÑ– PLT Ð´Ð»Ñ Â«%s»\n"
-#: elf64-x86-64.c:4405
+#: elf64-x86-64.c:4407
#, c-format
msgid "%F%pB: PC-relative offset overflow in GOT PLT entry for `%s'\n"
msgstr "%F%pB: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð·Ñуву відноÑно PC у запиÑÑ– PLT GOT Ð´Ð»Ñ Â«%s»\n"
@@ -4706,306 +4742,310 @@ msgstr "%F%pB: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð·Ñуву відноÑно PC у зап
msgid "warning: %pB has a section extending past end of file"
msgstr "попередженнÑ: %pB міÑтить розділ, Ñкий виходить за межі ÐºÑ–Ð½Ñ†Ñ Ñ„Ð°Ð¹Ð»Ð°"
-#: elfcode.h:775
+#: elfcode.h:776
#, c-format
msgid "warning: %pB has a corrupt string table index - ignoring"
msgstr "попередженнÑ: покажчик таблиці Ñ€Ñдків %pB пошкоджено — ігноруєтьÑÑ"
-#: elfcode.h:819
+#: elfcode.h:820
#, c-format
msgid "warning: %pB has a program header with invalid alignment"
msgstr "попередженнÑ: %pB міÑтить заголовок програми із некоректним вирівнюваннÑм"
-#: elfcode.h:1244
+#: elfcode.h:1245
#, c-format
msgid "%pB: version count (%<PRId64>) does not match symbol count (%ld)"
msgstr "%pB: лічильник верÑÑ–Ñ— (%<PRId64>) не збігаєтьÑÑ Ð· лічильником Ñимволу (%ld)"
-#: elfcore.h:308
+#: elfcore.h:300
#, c-format
-msgid "warning: %pB is truncated: expected core file size >= %<PRIu64>, found: %<PRIu64>"
-msgstr "попередженнÑ: %pB обрізано: очікуваний розмір оÑновного файла >= %<PRIu64>, виÑвлено: %<PRIu64>."
+msgid "warning: %pB has a segment extending past end of file"
+msgstr "попередженнÑ: %pB міÑтить Ñегмент, Ñкий виходить за межі ÐºÑ–Ð½Ñ†Ñ Ñ„Ð°Ð¹Ð»Ð°"
-#: elflink.c:1384
+#: elflink.c:1406
#, c-format
msgid "%s: TLS definition in %pB section %pA mismatches non-TLS definition in %pB section %pA"
msgstr "%s: Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ TLS у %pB, розділ %pA, не збігаєтьÑÑ Ð· визначеннÑм не-TLS у розділі %pB %pA"
-#: elflink.c:1390
+#: elflink.c:1412
#, c-format
msgid "%s: TLS reference in %pB mismatches non-TLS reference in %pB"
msgstr "%s: поÑÐ¸Ð»Ð°Ð½Ð½Ñ TLS у %pB не збігаєтьÑÑ Ð· поÑиланнÑм не-TLS у %pB"
-#: elflink.c:1396
+#: elflink.c:1418
#, c-format
msgid "%s: TLS definition in %pB section %pA mismatches non-TLS reference in %pB"
msgstr "%s: Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ TLS у %pB, розділ %pA, не збігаєтьÑÑ Ð· поÑиланнÑм не-TLS у %pB"
-#: elflink.c:1402
+#: elflink.c:1424
#, c-format
msgid "%s: TLS reference in %pB mismatches non-TLS definition in %pB section %pA"
msgstr "%s: поÑÐ¸Ð»Ð°Ð½Ð½Ñ TLS у %pB не збігаєтьÑÑ Ð· визначеннÑм не-TLS у розділі %pB %pA"
-#: elflink.c:2114
+#: elflink.c:2136
#, c-format
msgid "%pB: unexpected redefinition of indirect versioned symbol `%s'"
msgstr "%pB: неочікуване Ð¿ÐµÑ€ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñимволу з непрÑмим визначеннÑм верÑÑ–Ñ—, «%s»"
-#: elflink.c:2496
+#: elflink.c:2597
#, c-format
msgid "%pB: version node not found for symbol %s"
msgstr "%pB: не знайдено вузла верÑÑ–Ñ— Ð´Ð»Ñ Ñимволу %s"
-#: elflink.c:2587
+#: elflink.c:2688
#, c-format
msgid "%pB: bad reloc symbol index (%#<PRIx64> >= %#lx) for offset %#<PRIx64> in section `%pA'"
msgstr "%pB: помилковий Ñ–Ð½Ð´ÐµÐºÑ Ñимволу переÑÑƒÐ²Ð°Ð½Ð½Ñ (%#<PRIx64> >= %#lx) Ð´Ð»Ñ Ð²Ñ–Ð´Ñтупу %#<PRIx64> у розділі «%pA»"
-#: elflink.c:2599
+#: elflink.c:2700
#, c-format
msgid "%pB: non-zero symbol index (%#<PRIx64>) for offset %#<PRIx64> in section `%pA' when the object file has no symbol table"
msgstr "%pB: ненульовий Ñ–Ð½Ð´ÐµÐºÑ Ñимволу (%#<PRIx64>) Ð´Ð»Ñ Ð²Ñ–Ð´Ñтупу %#<PRIx64> у розділі «%pA», але у об’єктному файлі немає таблиці Ñимволів"
-#: elflink.c:2788
+#: elflink.c:2911
#, c-format
msgid "%pB: relocation size mismatch in %pB section %pA"
msgstr "%pB: невідповідніÑÑ‚ÑŒ розміру переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ розділі %pB %pA"
-#: elflink.c:3117
+#: elflink.c:3240
#, c-format
msgid "warning: type and size of dynamic symbol `%s' are not defined"
msgstr "попередженнÑ: тип Ñ– розмір динамічного Ñимволу «%s» не визначено"
-#: elflink.c:3177
+#: elflink.c:3300
msgid "%P: copy reloc against protected `%pT' is dangerous\n"
msgstr "%P: переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð· копіюваннÑм щодо захищеного «%pT» Ñ” небезпечним\n"
-#: elflink.c:4117
+#: elflink.c:4262
#, c-format
msgid "alternate ELF machine code found (%d) in %pB, expecting %d"
msgstr "виÑвлено альтернативний машинний код ELF (%d) у %pB, очікувалоÑÑ %d"
-#: elflink.c:4600
+#: elflink.c:4745
#, c-format
msgid "%pB: invalid version offset %lx (max %lx)"
msgstr "%pB: некоректний зÑув верÑÑ–Ñ— %lx (макÑимально можливий — %lx)"
-#: elflink.c:4668
+#: elflink.c:4813
#, c-format
msgid "%pB: %s local symbol at index %lu (>= sh_info of %lu)"
msgstr "%pB: локальний Ñимвол %s із індекÑом %lu (>= sh_info %lu)"
-#: elflink.c:4816
+#: elflink.c:4961
#, c-format
msgid "%pB: not enough version information"
msgstr "%pB: недоÑтатні відомоÑÑ‚Ñ– щодо верÑÑ–Ñ—"
-#: elflink.c:4854
+#: elflink.c:4999
#, c-format
msgid "%pB: %s: invalid version %u (max %d)"
msgstr "%pB: %s: некоректна верÑÑ–Ñ, %u (макÑимум — %d)"
-#: elflink.c:4891
+#: elflink.c:5036
#, c-format
msgid "%pB: %s: invalid needed version %d"
msgstr "%pB: %s: некоректний Ð·Ð°Ð¿Ð¸Ñ Ð¿Ð¾Ñ‚Ñ€Ñ–Ð±Ð½Ð¾Ñ— верÑÑ–Ñ— %d"
-#: elflink.c:5309
+#: elflink.c:5455
#, c-format
msgid "%pB: undefined reference to symbol '%s'"
msgstr "%pB: невизначене поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° Ñимвол «%s»"
-#: elflink.c:6375
+#: elflink.c:6523
#, c-format
msgid "%pB: stack size specified and %s set"
msgstr "%pB: вказано розміри Ñтека Ñ– вÑтановлено %s"
-#: elflink.c:6379
+#: elflink.c:6527
#, c-format
msgid "%pB: %s not absolute"
msgstr "%pB: %s не Ñ” абÑолютним"
-#: elflink.c:6576
+#: elflink.c:6739
#, c-format
msgid "%s: undefined version: %s"
msgstr "%s: невизначена верÑÑ–Ñ: %s"
-#: elflink.c:7148
+#: elflink.c:7303
#, c-format
msgid "%pB: .preinit_array section is not allowed in DSO"
msgstr "%pB: не можна викориÑтовувати розділ .preinit_array у DSO"
-#: elflink.c:8740
+#: elflink.c:8895
#, c-format
msgid "undefined %s reference in complex symbol: %s"
msgstr "невизначене поÑиланнÑ, %s, у Ñкладеному Ñимволі: %s"
-#: elflink.c:8903 elflink.c:8911
+#: elflink.c:9058 elflink.c:9066
msgid "division by zero"
msgstr "Ð´Ñ–Ð»ÐµÐ½Ð½Ñ Ð½Ð° нуль"
-#: elflink.c:8925
+#: elflink.c:9080
#, c-format
msgid "unknown operator '%c' in complex symbol"
msgstr "невідомий оператор, «%c», у Ñкладеному Ñимволі"
#. PR 21524: Let the user know if a symbol was removed by garbage collection.
-#: elflink.c:9263
+#: elflink.c:9418
#, c-format
msgid "%pB:%pA: error: relocation references symbol %s which was removed by garbage collection"
msgstr "%pB:%pA: помилка: переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾ÑилаєтьÑÑ Ð½Ð° Ñимвол %s, Ñкий було вилучено заÑобом Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ ÑміттÑ"
-#: elflink.c:9266
+#: elflink.c:9421
#, c-format
msgid "%pB:%pA: error: try relinking with --gc-keep-exported enabled"
msgstr "%pB:%pA: помилка: Ñпробуйте виконати повторне ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ð· увімкненим --gc-keep-exported"
-#: elflink.c:9511 elflink.c:9529 elflink.c:9568 elflink.c:9586
+#: elflink.c:9666 elflink.c:9684 elflink.c:9723 elflink.c:9741
#, c-format
msgid "%pB: unable to sort relocs - they are in more than one size"
msgstr "%pB: не вдалоÑÑ Ð²Ð¿Ð¾Ñ€Ñдкувати переÑуваннÑ: їхні розміри не Ñ” однаковими"
#. The section size is not divisible by either -
#. something is wrong.
-#: elflink.c:9545 elflink.c:9602
+#: elflink.c:9700 elflink.c:9757
#, c-format
msgid "%pB: unable to sort relocs - they are of an unknown size"
msgstr "%pB: не вдалоÑÑ Ð²Ð¿Ð¾Ñ€Ñдкувати переÑуваннÑ: їхні розміри невідомі"
-#: elflink.c:9654
+#: elflink.c:9809
msgid "not enough memory to sort relocations"
msgstr "недоÑтатньо пам’ÑÑ‚Ñ– Ð´Ð»Ñ Ð²Ð¿Ð¾Ñ€ÑÐ´ÐºÐ¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿ÐµÑ€ÐµÑувань"
-#: elflink.c:9998
+#: elflink.c:10149
#, c-format
msgid "%pB: too many sections: %d (>= %d)"
msgstr "%pB: забагато розділів: %d (>= %d)"
-#: elflink.c:10274
+#: elflink.c:10425
#, c-format
msgid "%pB: internal symbol `%s' in %pB is referenced by DSO"
msgstr "%pB: на внутрішній Ñимвол «%s» у %pB Ñ–Ñнує поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð· DSO"
-#: elflink.c:10277
+#: elflink.c:10428
#, c-format
msgid "%pB: hidden symbol `%s' in %pB is referenced by DSO"
msgstr "%pB: на прихований Ñимвол «%s» у %pB Ñ–Ñнує поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð· DSO"
-#: elflink.c:10280
+#: elflink.c:10431
#, c-format
msgid "%pB: local symbol `%s' in %pB is referenced by DSO"
msgstr "%pB: на локальний Ñимвол «%s» у %pB Ñ–Ñнує поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð· DSO"
-#: elflink.c:10366
+#: elflink.c:10517
#, c-format
msgid "%pB: could not find output section %pA for input section %pA"
msgstr "%pB: не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ розділ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… %pA Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð²Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… %pA"
-#: elflink.c:10520
+#: elflink.c:10671
#, c-format
msgid "%pB: protected symbol `%s' isn't defined"
msgstr "%pB: захищений Ñимвол «%s» не визначено"
-#: elflink.c:10523
+#: elflink.c:10674
#, c-format
msgid "%pB: internal symbol `%s' isn't defined"
msgstr "%pB: внутрішній Ñимвол «%s» не визначено"
-#: elflink.c:10526
+#: elflink.c:10677
#, c-format
msgid "%pB: hidden symbol `%s' isn't defined"
msgstr "%pB: прихований Ñимвол «%s» не визначено"
-#: elflink.c:10558
+#: elflink.c:10709
#, c-format
msgid "%pB: no symbol version section for versioned symbol `%s'"
msgstr "%pB: немає розділу верÑÑ–Ñ— Ñимволів Ð´Ð»Ñ Ñимволу з верÑією «%s»"
-#: elflink.c:10957
+#: elflink.c:11108
#, c-format
msgid "warning: --enable-non-contiguous-regions discards section `%s' from '%s'\n"
msgstr "попередженнÑ: --enable-non-contiguous-regions відкидає розділ «%s» з «%s»\n"
-#: elflink.c:11211
-#, c-format
-msgid "error: %pB: size of section %pA is not multiple of address size"
-msgstr "помилка: %pB: розмір розділу %pA не Ñ” кратним до розміру адреÑи"
-
-#: elflink.c:11256
+#: elflink.c:11384
#, c-format
msgid "error: %pB contains a reloc (%#<PRIx64>) for section %pA that references a non-existent global symbol"
msgstr "помилка: %pB міÑтить переÑÑƒÐ²Ð°Ð½Ð½Ñ (%#<PRIx64>) Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %pA, Ñке поÑилаєтьÑÑ Ð½Ð° загальний Ñимвол, Ñкого не Ñ–Ñнує"
-#: elflink.c:11977
+#: elflink.c:11844
+#, c-format
+msgid "error: %pB: size of section %pA is not multiple of address size"
+msgstr "помилка: %pB: розмір розділу %pA не Ñ” кратним до розміру адреÑи"
+
+#: elflink.c:12121
#, c-format
msgid "%pB: no symbol found for import library"
msgstr "%pB: не знайдено Ñимволів Ð´Ð»Ñ Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÐºÐ¸ імпортуваннÑ"
-#: elflink.c:12620
+#: elflink.c:12696
+msgid "%F%P: %pB: failed to finish relative relocations\n"
+msgstr "%F%P: %pB: не вдалоÑÑ Ð·Ð°Ð²ÐµÑ€ÑˆÐ¸Ñ‚Ð¸ відноÑні переÑуваннÑ\n"
+
+#: elflink.c:12773
#, c-format
msgid "%pB: file class %s incompatible with %s"
msgstr "%pB: ÐºÐ»Ð°Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð² %s Ñ” неÑуміÑним з %s"
-#: elflink.c:12870
+#: elflink.c:13023
#, c-format
msgid "%pB: failed to generate import library"
msgstr "%pB: не вдалоÑÑ Ñтворити бібліотеку імпортуваннÑ"
-#: elflink.c:12996
+#: elflink.c:13191
#, c-format
msgid "warning: %s section has zero size"
msgstr "попередженнÑ: розмір розділу %s Ñ” нульовим"
-#: elflink.c:13044
+#: elflink.c:13239
#, c-format
msgid "warning: section '%s' is being made into a note"
msgstr "попередженнÑ: розділ «%s» перетворено на нотатку"
-#: elflink.c:13137
+#: elflink.c:13333
msgid "%P%X: read-only segment has dynamic relocations\n"
msgstr "%P%X: Ñегмент, призначений лише Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ, міÑтить динамічні переÑуваннÑ\n"
-#: elflink.c:13140
+#: elflink.c:13336
msgid "%P: warning: creating DT_TEXTREL in a shared object\n"
msgstr "%P: попередженнÑ: Ñтворюємо DT_TEXTREL у об’єкті Ñпільного викориÑтаннÑ\n"
-#: elflink.c:13143
+#: elflink.c:13339
msgid "%P: warning: creating DT_TEXTREL in a PDE\n"
msgstr "%P: попередженнÑ: Ñтворюємо DT_TEXTREL у PDE\n"
-#: elflink.c:13146
+#: elflink.c:13342
msgid "%P: warning: creating DT_TEXTREL in a PIE\n"
msgstr "%P: попередженнÑ: Ñтворюємо DT_TEXTREL у PIE\n"
-#: elflink.c:13279
+#: elflink.c:13475
msgid "%P%X: can not read symbols: %E\n"
msgstr "%P%X: не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ Ñимволи: %E\n"
-#: elflink.c:13699
+#: elflink.c:13900
msgid "%F%P: %pB(%pA): error: need linked-to section for --gc-sections\n"
msgstr "%F%P: %pB(%pA): помилка: Ð´Ð»Ñ --gc-sections потрібен приєднаний (linked-to) розділ\n"
-#: elflink.c:14165
+#: elflink.c:14378
#, c-format
msgid "%pB: %pA+%#<PRIx64>: no symbol found for INHERIT"
msgstr "%pB: %pA+%#<PRIx64>: не знайдено Ñимволу Ð´Ð»Ñ INHERIT"
-#: elflink.c:14206
+#: elflink.c:14419
#, c-format
msgid "%pB: section '%pA': corrupt VTENTRY entry"
msgstr "%pB: розділ «%pA»: пошкоджений Ð·Ð°Ð¿Ð¸Ñ VTENTRY"
-#: elflink.c:14349
+#: elflink.c:14562
#, c-format
msgid "unrecognized INPUT_SECTION_FLAG %s\n"
msgstr "нерозпізнаний INPUT_SECTION_FLAG, %s\n"
-#: elflink.c:15097
+#: elflink.c:15310
#, c-format
msgid "%P: %pB: warning: relocation against `%s' in read-only section `%pA'\n"
msgstr "%P: %pB: попередженнÑ: переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ «%s» у придатному лише Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– «%pA»\n"
-#: elflink.c:15186
+#: elflink.c:15399
msgid "%P: warning: GNU indirect functions with DT_TEXTREL may result in a segfault at runtime; recompile with %s\n"
msgstr "%P: попередженнÑ: Ð¿Ð¾Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð¾Ð¿Ð¾Ñередкованих функцій GNU із DT_TEXTREL може призвеÑти до помилки Ñегментації під Ñ‡Ð°Ñ Ð·Ð°Ð¿ÑƒÑку; повторно зберіть з %s\n"
@@ -5014,20 +5054,11 @@ msgstr "%P: попередженнÑ: Ð¿Ð¾Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð¾Ð¿Ð¾ÑередковÐ
msgid "%pB: warning: Weak TLS is implementation defined and may not work as expected"
msgstr "%pB: попередженнÑ: Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñлабких TLS залежить від реалізації Ñ– може не працювати так, Ñк ви на те ÑподіваєтеÑÑ"
-#: elfxx-aarch64.c:738 elfnn-aarch64.c:9909 elfnn-aarch64.c:9916
+#: elfxx-aarch64.c:738 elfnn-aarch64.c:9914 elfnn-aarch64.c:9921
#, c-format
msgid "%pB: warning: BTI turned on by -z force-bti when all inputs do not have BTI in NOTE section."
msgstr "%pB: попередженнÑ: BTI вмикаєтьÑÑ -z force-bti, Ñкщо уÑÑ– вхідні дані не мають BTI у розділі NOTE."
-#: elfxx-aarch64.c:758 elfxx-x86.c:2695
-msgid "%F%P: failed to create GNU property section\n"
-msgstr "%F%P: не вдалоÑÑ Ñтворити розділ влаÑтивоÑтей GNU\n"
-
-#: elfxx-aarch64.c:762 elfxx-x86.c:2700
-#, c-format
-msgid "%F%pA: failed to align section\n"
-msgstr "%F%pA: не вдалоÑÑ Ð²Ð¸Ñ€Ñ–Ð²Ð½Ñти розмір\n"
-
#: elfxx-aarch64.c:812
#, c-format
msgid "error: %pB: <corrupt AArch64 used size: 0x%x>"
@@ -5155,309 +5186,335 @@ msgstr "%pB: Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Â«%pA» %<PRId64> з «%pA» перебуває п
msgid "%pB: `%pA' start VMA of %#<PRIx64> outside the 32-bit range supported; consider using `-Ttext-segment=...'"
msgstr "%pB: початок «%pA» VMA %#<PRIx64> лежить поза підтримуваним 32-бітовим діапазоном; Ñпробуйте ÑкориÑтатиÑÑ Â«-Ttext-segment=...»"
-#: elfxx-mips.c:13316 reloc.c:8430
+#: elfxx-mips.c:13335 reloc.c:8521
#, c-format
msgid "%X%P: %pB(%pA): error: relocation for offset %V has no value\n"
msgstr "%X%P: %pB(%pA): помилка: переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ð·Ñуву %V не має значеннÑ\n"
-#: elfxx-mips.c:13417 reloc.c:8518
+#: elfxx-mips.c:13436 reloc.c:8609
#, c-format
msgid "%X%P: %pB(%pA): relocation \"%pR\" is not supported\n"
msgstr "%X%P: %pB(%pA): підтримки переÑÑƒÐ²Ð°Ð½Ð½Ñ Â«%pR» не передбачено\n"
-#: elfxx-mips.c:13426 reloc.c:8527
+#: elfxx-mips.c:13445 reloc.c:8618
#, c-format
msgid "%X%P: %pB(%pA): relocation \"%pR\" returns an unrecognized value %x\n"
msgstr "%X%P: %pB(%pA): переÑÑƒÐ²Ð°Ð½Ð½Ñ Â«%pR» повертає нерозпізнане Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ %x\n"
-#: elfxx-mips.c:14611
+#: elfxx-mips.c:14627
#, c-format
msgid "%pB: unknown architecture %s"
msgstr "%pB: невідома архітектура %s"
-#: elfxx-mips.c:15145
+#: elfxx-mips.c:15161
#, c-format
msgid "%pB: illegal section name `%pA'"
msgstr "%pB: некоректна назва розділу, «%pA»"
-#: elfxx-mips.c:15422
+#: elfxx-mips.c:15438
#, c-format
msgid "%pB: warning: linking abicalls files with non-abicalls files"
msgstr "%pB: попередженнÑ: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð² abicalls з файлами без abicalls"
-#: elfxx-mips.c:15439
+#: elfxx-mips.c:15455
#, c-format
msgid "%pB: linking 32-bit code with 64-bit code"
msgstr "%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ 32-бітового коду з 64-бітовим кодом"
-#: elfxx-mips.c:15471 elfxx-mips.c:15537 elfxx-mips.c:15552
+#: elfxx-mips.c:15487 elfxx-mips.c:15553 elfxx-mips.c:15568
#, c-format
msgid "%pB: linking %s module with previous %s modules"
msgstr "%pB: компонуємо модуль %s з попередніми модулÑми %s"
-#: elfxx-mips.c:15495
+#: elfxx-mips.c:15511
#, c-format
msgid "%pB: ABI mismatch: linking %s module with previous %s modules"
msgstr "%pB: невідповідніÑÑ‚ÑŒ ABI: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñ %s з попередніми модулÑми %s"
-#: elfxx-mips.c:15520
+#: elfxx-mips.c:15536
#, c-format
msgid "%pB: ASE mismatch: linking %s module with previous %s modules"
msgstr "%pB: невідповідніÑÑ‚ÑŒ ASE: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñ %s з попередніми модулÑми %s"
-#: elfxx-mips.c:15654
+#: elfxx-mips.c:15670
#, c-format
msgid "warning: %pB uses unknown floating point ABI %d (set by %pB), %pB uses unknown floating point ABI %d"
msgstr "попередженнÑ: %pB викориÑтовує невідомий ABI роботи з чиÑлами з рухомою крапкою, %d, (вÑтановлено %pB), а %pB викориÑтовує невідомий ABI Ð´Ð»Ñ Ñ‡Ð¸Ñел з рухомою крапкою, %d"
-#: elfxx-mips.c:15660
+#: elfxx-mips.c:15676
#, c-format
msgid "warning: %pB uses unknown floating point ABI %d (set by %pB), %pB uses %s"
msgstr "попередженнÑ: %pB викориÑтовує невідомий ABI роботи з чиÑлами з рухомою крапкою, %d, (вÑтановлено %pB), а %pB викориÑтовує %s"
-#: elfxx-mips.c:15666
+#: elfxx-mips.c:15682
#, c-format
msgid "warning: %pB uses %s (set by %pB), %pB uses unknown floating point ABI %d"
msgstr "попередженнÑ: %pB викориÑтовує %s (вÑтановлено %pB), а %pB викориÑтовує невідомий ABI Ð´Ð»Ñ Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸ з чиÑлами з рухомою крапкою, %d"
-#: elfxx-mips.c:15680
+#: elfxx-mips.c:15696
#, c-format
msgid "warning: %pB uses %s (set by %pB), %pB uses %s"
msgstr "попередженнÑ: %pB викориÑтовує %s (вÑтановлено %pB), а %pB викориÑтовує %s"
-#: elfxx-mips.c:15699
+#: elfxx-mips.c:15715
#, c-format
msgid "warning: %pB uses %s (set by %pB), %pB uses unknown MSA ABI %d"
msgstr "попередженнÑ: %pB викориÑтовує %s (вÑтановлено %pB), а %pB викориÑтовує невідомий ABI MSA, %d"
-#: elfxx-mips.c:15711
+#: elfxx-mips.c:15727
#, c-format
msgid "warning: %pB uses unknown MSA ABI %d (set by %pB), %pB uses %s"
msgstr "попередженнÑ: %pB викориÑтовує невідомий ABI MSA, %d, (вÑтановлено %pB), а %pB викориÑтовує %s"
-#: elfxx-mips.c:15720
+#: elfxx-mips.c:15736
#, c-format
msgid "warning: %pB uses unknown MSA ABI %d (set by %pB), %pB uses unknown MSA ABI %d"
msgstr "попередженнÑ: %pB викориÑтовує невідомий ABI MSA %d (вÑтановлено %pB), а %pB викориÑтовує невідомий ABI MSA, %d"
-#: elfxx-mips.c:15782
+#: elfxx-mips.c:15798
#, c-format
msgid "%pB: endianness incompatible with that of the selected emulation"
msgstr "%pB: порÑдок байтів Ñ” неÑуміÑним з порÑдком байтів вибраної емулÑції"
-#: elfxx-mips.c:15796
+#: elfxx-mips.c:15812
#, c-format
msgid "%pB: ABI is incompatible with that of the selected emulation"
msgstr "%pB: ABI Ñ” неÑуміÑним з ABI вибраної емулÑції"
-#: elfxx-mips.c:15849
+#: elfxx-mips.c:15865
#, c-format
msgid "%pB: warning: inconsistent ISA between e_flags and .MIPS.abiflags"
msgstr "%pB: попередженнÑ: неÑуміÑніÑÑ‚ÑŒ ISA між e_flags Ñ– .MIPS.abiflags"
-#: elfxx-mips.c:15854
+#: elfxx-mips.c:15870
#, c-format
msgid "%pB: warning: inconsistent FP ABI between .gnu.attributes and .MIPS.abiflags"
msgstr "%pB: попередженнÑ: неÑуміÑніÑÑ‚ÑŒ ABI FP між .gnu.attributes Ñ– .MIPS.abiflags"
-#: elfxx-mips.c:15858
+#: elfxx-mips.c:15874
#, c-format
msgid "%pB: warning: inconsistent ASEs between e_flags and .MIPS.abiflags"
msgstr "%pB: попередженнÑ: неÑуміÑніÑÑ‚ÑŒ ASE між e_flags Ñ– .MIPS.abiflags"
-#: elfxx-mips.c:15865
+#: elfxx-mips.c:15881
#, c-format
msgid "%pB: warning: inconsistent ISA extensions between e_flags and .MIPS.abiflags"
msgstr "%pB: попередженнÑ: неÑуміÑніÑÑ‚ÑŒ розширень ISA між e_flags Ñ– .MIPS.abiflags"
-#: elfxx-mips.c:15869
+#: elfxx-mips.c:15885
#, c-format
msgid "%pB: warning: unexpected flag in the flags2 field of .MIPS.abiflags (0x%lx)"
msgstr "%pB: попередженнÑ: неочікуваний прапорець у полі flags2 .MIPS.abiflags (0x%lx)"
-#: elfxx-mips.c:16060
+#: elfxx-mips.c:16076
msgid "-mips32r2 -mfp64 (12 callee-saved)"
msgstr "-mips32r2 -mfp64 (12 безпечних Ð´Ð»Ñ Ð²Ð¸ÐºÐ»Ð¸ÐºÑ–Ð² регіÑтрів)"
-#: elfxx-mips.c:16122 elfxx-mips.c:16133
+#: elfxx-mips.c:16138 elfxx-mips.c:16149
msgid "None"
msgstr "Ðемає"
-#: elfxx-mips.c:16124 elfxx-mips.c:16193
+#: elfxx-mips.c:16140 elfxx-mips.c:16209
msgid "Unknown"
msgstr "Ðевідомий"
-#: elfxx-mips.c:16204
+#: elfxx-mips.c:16220
#, c-format
msgid "Hard or soft float\n"
msgstr "Ðпаратна або програмна рухома крапка\n"
-#: elfxx-mips.c:16207
+#: elfxx-mips.c:16223
#, c-format
msgid "Hard float (double precision)\n"
msgstr "Ðпаратна рухома крапка (подвійна точніÑÑ‚ÑŒ)\n"
-#: elfxx-mips.c:16210
+#: elfxx-mips.c:16226
#, c-format
msgid "Hard float (single precision)\n"
msgstr "Ðпаратна рухома крапка (одинарна точніÑÑ‚ÑŒ)\n"
-#: elfxx-mips.c:16213
+#: elfxx-mips.c:16229
#, c-format
msgid "Soft float\n"
msgstr "Програма рухома крапка\n"
-#: elfxx-mips.c:16216
+#: elfxx-mips.c:16232
#, c-format
msgid "Hard float (MIPS32r2 64-bit FPU 12 callee-saved)\n"
msgstr "Ðпаратна рухома крапка (64-бітовий ÑпівпроцеÑор MIPS32r2, 12 безпечних Ð´Ð»Ñ Ð²Ð¸ÐºÐ»Ð¸ÐºÑ–Ð² регіÑтрів)\n"
-#: elfxx-mips.c:16219
+#: elfxx-mips.c:16235
#, c-format
msgid "Hard float (32-bit CPU, Any FPU)\n"
msgstr "Ðпаратна рухома крапка (32-бітовий процеÑор, будь-Ñкий FPU)\n"
-#: elfxx-mips.c:16222
+#: elfxx-mips.c:16238
#, c-format
msgid "Hard float (32-bit CPU, 64-bit FPU)\n"
msgstr "Ðпаратна рухома крапка (32-бітовий процеÑор, 64-бітовий FPU)\n"
-#: elfxx-mips.c:16225
+#: elfxx-mips.c:16241
#, c-format
msgid "Hard float compat (32-bit CPU, 64-bit FPU)\n"
msgstr "СуміÑніÑÑ‚ÑŒ апаратної рухомої крапки (32-бітовий процеÑор, 64-бітовий FPU)\n"
-#: elfxx-mips.c:16257
+#: elfxx-mips.c:16273
#, c-format
msgid " [abi=O32]"
msgstr " [abi=O32]"
-#: elfxx-mips.c:16259
+#: elfxx-mips.c:16275
#, c-format
msgid " [abi=O64]"
msgstr " [abi=O64]"
-#: elfxx-mips.c:16261
+#: elfxx-mips.c:16277
#, c-format
msgid " [abi=EABI32]"
msgstr " [abi=EABI32]"
-#: elfxx-mips.c:16263
+#: elfxx-mips.c:16279
#, c-format
msgid " [abi=EABI64]"
msgstr " [abi=EABI64]"
-#: elfxx-mips.c:16265
+#: elfxx-mips.c:16281
#, c-format
msgid " [abi unknown]"
msgstr " [невідомий abi]"
-#: elfxx-mips.c:16267
+#: elfxx-mips.c:16283
#, c-format
msgid " [abi=N32]"
msgstr " [abi=N32]"
-#: elfxx-mips.c:16269
+#: elfxx-mips.c:16285
#, c-format
msgid " [abi=64]"
msgstr " [abi=64]"
-#: elfxx-mips.c:16271
+#: elfxx-mips.c:16287
#, c-format
msgid " [no abi set]"
msgstr " [не вÑтановлено abi]"
-#: elfxx-mips.c:16296
+#: elfxx-mips.c:16312
#, c-format
msgid " [unknown ISA]"
msgstr " [невідомий ISA]"
-#: elfxx-mips.c:16316
+#: elfxx-mips.c:16332
#, c-format
msgid " [not 32bitmode]"
msgstr " [не 32-біт.режим]"
-#: elfxx-riscv.c:1383
+#: elfxx-riscv.c:1563
#, c-format
msgid "x ISA extension `%s' must be set with the versions"
msgstr "Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ x ISA «%s» має бути вÑтановлено із верÑÑ–Ñми"
-#: elfxx-riscv.c:1387
+#: elfxx-riscv.c:1569
#, c-format
msgid "cannot find default versions of the ISA extension `%s'"
msgstr "не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ типові верÑÑ–Ñ— Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ ISA «%s»"
-#: elfxx-riscv.c:1461
+#: elfxx-riscv.c:1669
#, c-format
-msgid "-march=%s: expect number after `%dp'"
-msgstr "-march=%s: мало бути чиÑло піÑÐ»Ñ Â«%dp»"
+msgid "%s: first ISA extension must be `e', `i' or `g'"
+msgstr "%s: першим розширеннÑм ISA має бути «e», «i» або «g»"
-#: elfxx-riscv.c:1544
+#: elfxx-riscv.c:1698
#, c-format
-msgid "-march=%s: rv%de is not a valid base ISA"
-msgstr "-march=%s: rv%de не Ñ” коректним ISA оÑнови"
+msgid "%s: unknown standard ISA extension `%c'"
+msgstr "%s: невідоме Ñтандартне Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ ISA «%c»"
-#: elfxx-riscv.c:1573
+#: elfxx-riscv.c:1708
#, c-format
-msgid "-march=%s: first ISA extension must be `e', `i' or `g'"
-msgstr "-march=%s: першим розширеннÑм ISA має бути «e», «i» або «g»"
+msgid "%s: standard ISA extension `%c' is not in canonical order"
+msgstr "%s: Ñтандартне Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ ISA «%c» не у канонічному порÑдку"
-#: elfxx-riscv.c:1600
+#: elfxx-riscv.c:1759
#, c-format
-msgid "-march=%s: unknown standard and prefixed ISA extension `%s'"
-msgstr "-march=%s: невідоме Ñтандартне Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ ISA із префікÑом «%s»"
+msgid "%s: unknown prefix class for the ISA extension `%s'"
+msgstr "%s: невідомий префікÑний ÐºÐ»Ð°Ñ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ ISA: «%s»"
-#: elfxx-riscv.c:1604
+#: elfxx-riscv.c:1795
#, c-format
-msgid "-march=%s: standard ISA extension `%c' is not in canonical order"
-msgstr "-march=%s: Ñтандартен Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ ISA «%c» не у канонічному порÑдку"
+msgid "%s: invalid prefixed ISA extension `%s' ends with <number>p"
+msgstr "%s: некоректне Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Ð· префікÑом ISA «%s» завершуєтьÑÑ Ð½Ð° <чиÑло>p"
-#: elfxx-riscv.c:1654
+#: elfxx-riscv.c:1815
#, c-format
-msgid "-march=%s: unknown prefix class for the ISA extension `%s'"
-msgstr "-march=%s: невідомий префікÑний ÐºÐ»Ð°Ñ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ ISA: «%s»"
+msgid "%s: unknown prefixed ISA extension `%s'"
+msgstr "%s: невідоме префікÑне Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ ISA «%s»"
-#: elfxx-riscv.c:1688
+#: elfxx-riscv.c:1826
#, c-format
-msgid "-march=%s: unknown prefixed ISA extension `%s'"
-msgstr "-march=%s: невідоме префікÑне Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ ISA «%s»"
+msgid "%s: duplicate prefixed ISA extension `%s'"
+msgstr "%s: Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð¿Ñ€ÐµÑ„Ñ–ÐºÑного Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ ISA «%s»"
-#: elfxx-riscv.c:1699
+#: elfxx-riscv.c:1836
#, c-format
-msgid "-march=%s: duplicate prefixed ISA extension `%s'"
-msgstr "-march=%s: Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð¿Ñ€ÐµÑ„Ñ–ÐºÑного Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ ISA «%s»"
+msgid "%s: prefixed ISA extension `%s' is not in expected order. It must come before `%s'"
+msgstr "%s: префікÑне Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ ISA «%s» не у очікуваному порÑдку. Воно має передувати «%s»"
-#: elfxx-riscv.c:1709
+#: elfxx-riscv.c:1852
#, c-format
-msgid "-march=%s: prefixed ISA extension `%s' is not in expected order. It must come before `%s'"
-msgstr "-march=%s: префікÑне Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ ISA «%s» не у очікуваному порÑдку. Воно має передувати «%s»"
+msgid "%s: prefixed ISA extension must separate with _"
+msgstr "%s: префікÑне Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ ISA Ñлід відокремлювати за допомогою _"
-#: elfxx-riscv.c:1725
+#: elfxx-riscv.c:1891
#, c-format
-msgid "-march=%s: prefixed ISA extension must separate with _"
-msgstr "-march=%s: префікÑне Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ ISA Ñлід відокремлювати за допомогою _"
+msgid "rv%d does not support the `e' extension"
+msgstr "у rv%d не передбачено підтримки Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Â«e»"
-#: elfxx-riscv.c:1773
+#: elfxx-riscv.c:1898
#, c-format
-msgid "-march=%s: ISA string cannot contain uppercase letters"
-msgstr "-march=%s: Ñ€Ñдок ISA не може міÑтити літер у верхньому регіÑтрі"
+msgid "rv%d does not support the `q' extension"
+msgstr "у rv%d не передбачено підтримки Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Â«q»"
-#: elfxx-riscv.c:1799
+#: elfxx-riscv.c:1905
+msgid "rv32e does not support the `f' extension"
+msgstr "у rv32e не передбачено підтримки Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Â«f»"
+
+#: elfxx-riscv.c:1912
+msgid "`zfinx' is conflict with the `f/d/q' extension"
+msgstr "«zfinx» конфліктує із розширеннÑм «f/d/q»"
+
+#: elfxx-riscv.c:1933
+msgid "zvl*b extensions need to enable either `v' or `zve' extension"
+msgstr "Ð Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ zvl*b мають вмикати Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Â«v» або «zve»"
+
+#: elfxx-riscv.c:1995
#, c-format
-msgid "-march=%s: ISA string must begin with rv32 or rv64"
-msgstr "-march=%s: Ñ€Ñдок ISA має починатиÑÑ Ð· rv32 або rv64"
+msgid "%s: ISA string cannot contain uppercase letters"
+msgstr "%s: Ñ€Ñдок ISA не може міÑтити літер у верхньому регіÑтрі"
-#: elfxx-riscv.c:1832
+#: elfxx-riscv.c:2023
#, c-format
-msgid "-march=%s: rv32e does not support the `f' extension"
-msgstr "-march=%s: у rv32e не передбачено підтримки Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Â«f»"
+msgid "%s: ISA string must begin with rv32 or rv64"
+msgstr "%s: Ñ€Ñдок ISA має починатиÑÑ Ð· rv32 або rv64"
-#: elfxx-riscv.c:1840
+#: elfxx-riscv.c:2259
#, c-format
-msgid "-march=%s: rv32 does not support the `q' extension"
-msgstr "-march=%s: у rv32 не передбачено підтримки Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Â«q»"
+msgid "invalid ISA extension ends with <number>p in .option arch `%s'"
+msgstr "некоректне Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ ISA завершуєтьÑÑ Ð½Ð° <номер>p в архітектурі .option «%s»"
-#: elfxx-sparc.c:3021 elfnn-aarch64.c:5526
+#: elfxx-riscv.c:2282
+#, c-format
+msgid "unknown ISA extension `%s' in .option arch `%s'"
+msgstr "невідоме Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ ISA «%s» в архітектурі .option «%s»"
+
+#: elfxx-riscv.c:2293
+#, c-format
+msgid "cannot + or - base extension `%s' in .option arch `%s'"
+msgstr "не можна викориÑтовувати + або - базове Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ ISA «%s» в архітектурі .option «%s»"
+
+#: elfxx-riscv.c:2413
+msgid "internal: unreachable INSN_CLASS_*"
+msgstr "внутрішнÑ: недоÑтупний INSN_CLASS_*"
+
+#: elfxx-sparc.c:3021 elfnn-aarch64.c:5529
#, c-format
msgid "%pB: relocation %s against STT_GNU_IFUNC symbol `%s' isn't handled by %s"
msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ %s щодо Ñимволу STT_GNU_IFUNC «%s» не оброблÑєтьÑÑ %s"
@@ -5467,95 +5524,118 @@ msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ %s щодо Ñимволу STT_GNU_IFUNC «%
msgid "%pB: cannot link together %s and %s objects"
msgstr "%pB: не вдалоÑÑ Ñкомпонувати об’єкти %s та %s"
-#: elfxx-x86.c:980
+#: elfxx-x86.c:1026
+#, c-format
+msgid "%F%P: %pB: failed to allocate relative reloc record\n"
+msgstr "%F%P: %pB: не вдалоÑÑ Ñ€Ð¾Ð·Ð¼Ñ–Ñтити Ð·Ð°Ð¿Ð¸Ñ Ð²Ñ–Ð´Ð½Ð¾Ñного переÑуваннÑ\n"
+
+#: elfxx-x86.c:1368
+#, c-format
+msgid "%F%P: %pB: failed to allocate 64-bit DT_RELR bitmap\n"
+msgstr "%F%P: %pB: не вдалоÑÑ Ñ€Ð¾Ð·Ð¼Ñ–Ñтити 64-бітову карту DT_RELR\n"
+
+#: elfxx-x86.c:1404
+#, c-format
+msgid "%F%P: %pB: failed to allocate 32-bit DT_RELR bitmap\n"
+msgstr "%F%P: %pB: не вдалоÑÑ Ñ€Ð¾Ð·Ð¼Ñ–Ñтити 32-бітову карту DT_RELR\n"
+
+#: elfxx-x86.c:1707
+#, c-format
+msgid "%F%P: %pB: size of compact relative reloc section is changed: new (%lu) != old (%lu)\n"
+msgstr "%F%P: %pB: розмір розділу компактного відноÑного переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð¼Ñ–Ð½ÐµÐ½Ð¾: новий (%lu) != Ñтарий (%lu)\n"
+
+#: elfxx-x86.c:1729
+#, c-format
+msgid "%F%P: %pB: failed to allocate compact relative reloc section\n"
+msgstr "%F%P: %pB: не вдалоÑÑ Ñ€Ð¾Ð·Ð¼Ñ–Ñтити розділ компактного відноÑного переÑуваннÑ\n"
+
+#: elfxx-x86.c:1987
#, c-format
msgid "%F%P: %pB: relocation %s against absolute symbol `%s' in section `%pA' is disallowed\n"
msgstr "%F%P: %pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ %s щодо абÑолютного Ñимволу «%s» у розділі «%pA» заборонено\n"
-#: elfxx-x86.c:1062
+#: elfxx-x86.c:2069
msgid "%P: %pB: warning: relocation in read-only section `%pA'\n"
msgstr "%P: %pB: попередженнÑ: переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ розділі, придатному лише Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Â«%pA»\n"
-#: elfxx-x86.c:1782
-#, c-format
-msgid "%pB: %s (offset: 0x%s, info: 0x%s, addend: 0x%s) against '%s' for section '%pA' in %pB\n"
-msgstr "%pB: %s (зÑув: 0x%s, відомоÑÑ‚Ñ–: 0x%s, доданок: 0x%s) щодо «%s» Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ «%pA» у %pB\n"
+#: elfxx-x86.c:2785
+msgid "%pB: %s (offset: 0x%v, info: 0x%v, addend: 0x%v) against '%s' for section '%pA' in %pB\n"
+msgstr "%pB: %s (зÑув: 0x%v, відомоÑÑ‚Ñ–: 0x%v, доданок: 0x%v) щодо «%s» Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ «%pA» у %pB\n"
-#: elfxx-x86.c:1789
-#, c-format
-msgid "%pB: %s (offset: 0x%s, info: 0x%s) against '%s' for section '%pA' in %pB\n"
-msgstr "%pB: %s (зÑув: x%s, відомоÑÑ‚Ñ–: 0x%s) щодо «%s» Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ «%pA» у %pB\n"
+#: elfxx-x86.c:2791
+msgid "%pB: %s (offset: 0x%v, info: 0x%v) against '%s' for section '%pA' in %pB\n"
+msgstr "%pB: %s (зÑув: 0x%v, відомоÑÑ‚Ñ–: 0x%v) щодо «%s» Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ «%pA» у %pB\n"
-#: elfxx-x86.c:2367
+#: elfxx-x86.c:3388
#, c-format
msgid "error: %pB: <corrupt x86 property (0x%x) size: 0x%x>"
msgstr "помилка: %pB: <пошкоджений розмір можливоÑÑ‚Ñ– (0x%x) x86: 0x%x>"
-#: elfxx-x86.c:2714
+#: elfxx-x86.c:3735
msgid "%P: %pB: warning: missing %s\n"
msgstr "%P: %pB: попередженнÑ: пропущено %s\n"
-#: elfxx-x86.c:2715
+#: elfxx-x86.c:3736
msgid "%X%P: %pB: error: missing %s\n"
msgstr "%X%P: %pB: помилка: пропущено %s\n"
-#: elfxx-x86.c:2778
+#: elfxx-x86.c:3799
msgid "IBT and SHSTK properties"
msgstr "влаÑтивоÑÑ‚Ñ– IBT Ñ– SHSTK"
-#: elfxx-x86.c:2780
+#: elfxx-x86.c:3801
msgid "IBT property"
msgstr "влаÑтивіÑÑ‚ÑŒ IBT"
-#: elfxx-x86.c:2782
+#: elfxx-x86.c:3803
msgid "SHSTK property"
msgstr "влаÑтивіÑÑ‚ÑŒ SHSTK"
-#: elfxx-x86.c:2787
+#: elfxx-x86.c:3808
msgid "LAM_U48 property"
msgstr "влаÑтивіÑÑ‚ÑŒ LAM_U48"
-#: elfxx-x86.c:2792
+#: elfxx-x86.c:3813
msgid "LAM_U57 property"
msgstr "влаÑтивіÑÑ‚ÑŒ LAM_U57"
-#: elfxx-x86.c:2936
+#: elfxx-x86.c:3957
msgid "%F%P: failed to create VxWorks dynamic sections\n"
msgstr "%F%P: не вдалоÑÑ Ñтворити динамічні розділи VxWorks\n"
-#: elfxx-x86.c:2945
+#: elfxx-x86.c:3966
msgid "%F%P: failed to create GOT sections\n"
msgstr "%F%P: не вдалоÑÑ Ñтворити розділи GOT\n"
-#: elfxx-x86.c:2963
+#: elfxx-x86.c:3984
msgid "%F%P: failed to create ifunc sections\n"
msgstr "%F%P: не вдалоÑÑ Ñтворити розділи ifunc\n"
-#: elfxx-x86.c:3000
+#: elfxx-x86.c:4021
msgid "%F%P: failed to create GOT PLT section\n"
msgstr "%F%P: не вдалоÑÑ Ñтворити розділ PLT GOT\n"
-#: elfxx-x86.c:3019
+#: elfxx-x86.c:4040
msgid "%F%P: failed to create IBT-enabled PLT section\n"
msgstr "%F%P: не вдалоÑÑ Ñтворити розділ PLT із увімкненим IBT\n"
-#: elfxx-x86.c:3033
+#: elfxx-x86.c:4054
msgid "%F%P: failed to create BND PLT section\n"
msgstr "%F%P: не вдалоÑÑ Ñтворити розділ PLT BND\n"
-#: elfxx-x86.c:3053
+#: elfxx-x86.c:4074
msgid "%F%P: failed to create PLT .eh_frame section\n"
msgstr "%F%P: не вдалоÑÑ Ñтворити розділ .eh_frame PLT\n"
-#: elfxx-x86.c:3066
+#: elfxx-x86.c:4087
msgid "%F%P: failed to create GOT PLT .eh_frame section\n"
msgstr "%F%P: не вдалоÑÑ Ñтворити розділ .eh_frame PLT GOT\n"
-#: elfxx-x86.c:3080
+#: elfxx-x86.c:4101
msgid "%F%P: failed to create the second PLT .eh_frame section\n"
msgstr "%F%P: не вдалоÑÑ Ñтворити другий розділ .eh_frame PLT\n"
-#: elfxx-x86.c:3122
+#: elfxx-x86.c:4143
msgid "%X%P: attempted static link of dynamic object `%pB'\n"
msgstr "%X%P: Ñпроба Ñтатичного ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ об'єкта «%pB»\n"
@@ -5629,76 +5709,76 @@ msgstr "Викликано заÑтарілу %s у %s, Ñ€Ñдок %d у %s\n"
msgid "Deprecated %s called\n"
msgstr "Викликано заÑтарілу %s\n"
-#: linker.c:1706
+#: linker.c:1708
#, c-format
msgid "%pB: indirect symbol `%s' to `%s' is a loop"
msgstr "%pB: опоÑередкований Ñимвол «%s» Ð´Ð»Ñ Â«%s» Ñ” циклом"
-#: linker.c:2577
+#: linker.c:2579
#, c-format
msgid "attempt to do relocatable link with %s input and %s output"
msgstr "Ñпроба ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð·Ð²â€™Ñзку переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð· вхідним %s Ñ– вихідним %s"
-#: linker.c:2861
+#: linker.c:2863
#, c-format
msgid "%pB: ignoring duplicate section `%pA'\n"
msgstr "%pB: ігноруємо дублікат розділу «%pA»\n"
-#: linker.c:2871 linker.c:2881
+#: linker.c:2873 linker.c:2883
#, c-format
msgid "%pB: duplicate section `%pA' has different size\n"
msgstr "%pB: дублікат розділу «%pA» має інший розмір\n"
-#: linker.c:2890 linker.c:2896
+#: linker.c:2892 linker.c:2898
#, c-format
msgid "%pB: could not read contents of section `%pA'\n"
msgstr "%pB: не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ вміÑÑ‚ розділу «%pA»\n"
-#: linker.c:2901
+#: linker.c:2903
#, c-format
msgid "%pB: duplicate section `%pA' has different contents\n"
msgstr "%pB: дублікат розділу «%pA» має інший вміÑÑ‚\n"
-#: linker.c:3419
+#: linker.c:3421
#, c-format
msgid "%pB: compiled for a big endian system and target is little endian"
msgstr "%pB: зібрано Ð´Ð»Ñ ÑиÑтеми з прÑмим порÑдком байтів, а призначеннÑм Ñ” ÑиÑтема зі зворотним порÑдком байтів"
-#: linker.c:3422
+#: linker.c:3424
#, c-format
msgid "%pB: compiled for a little endian system and target is big endian"
msgstr "%pB: зібрано Ð´Ð»Ñ ÑиÑтеми зі зворотним порÑдком байтів, а призначеннÑм Ñ” ÑиÑтема зі прÑмим порÑдком байтів"
-#: mach-o-arm.c:172
+#: mach-o-arm.c:169 mach-o-arm.c:301
msgid "malformed mach-o ARM reloc pair: reloc is first reloc"
msgstr "помилкове Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð°Ñ€Ð¸ переÑувань mach-o ARM: reloc Ñ” першим reloc"
-#: mach-o-arm.c:188
+#: mach-o-arm.c:185
#, c-format
msgid "malformed mach-o ARM reloc pair: invalid length: %d"
msgstr "помилкове Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð°Ñ€Ð¸ переÑувань mach-o ARM: некоректна довжина: %d"
-#: mach-o-arm.c:203
+#: mach-o-arm.c:200
#, c-format
msgid "malformed mach-o ARM sectdiff reloc: invalid length: %d"
msgstr "помилкове Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿ÐµÑ€ÐµÑÑƒÐ²Ð°Ð½Ð½Ñ sectdiff mach-o ARM: некоректна довжина: %d"
-#: mach-o-arm.c:218
+#: mach-o-arm.c:215
#, c-format
msgid "malformed mach-o ARM local sectdiff reloc: invalid length: %d"
msgstr "помилкове Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ переÑÑƒÐ²Ð°Ð½Ð½Ñ sectdiff mach-o ARM: некоректна довжина: %d"
-#: mach-o-arm.c:233
+#: mach-o-arm.c:230
#, c-format
msgid "malformed mach-o ARM half sectdiff reloc: invalid length: %d"
msgstr "помилкове Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ð»Ð¾Ð²Ð¸Ð½Ð½Ð¾Ð³Ð¾ переÑÑƒÐ²Ð°Ð½Ð½Ñ sectdiff mach-o ARM: некоректна довжина: %d"
-#: mach-o-arm.c:265
+#: mach-o-arm.c:262
#, c-format
msgid "malformed mach-o ARM vanilla reloc: invalid length: %d (pcrel: %d)"
msgstr "помилкове Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¾Ñтого переÑÑƒÐ²Ð°Ð½Ð½Ñ mach-o ARM: некоректна довжина: %d (pcrel: %d)"
-#: mach-o-arm.c:329
+#: mach-o-arm.c:332
#, c-format
msgid "malformed mach-o ARM reloc: unknown reloc type: %d"
msgstr "помилкове Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿ÐµÑ€ÐµÑÑƒÐ²Ð°Ð½Ð½Ñ mach-o ARM: невідомий тип переÑуваннÑ: %d"
@@ -5802,13 +5882,13 @@ msgstr "не вдалоÑÑ Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ñ‚Ð¸ невідому команд
#: mach-o.c:3659
#, c-format
-msgid "bfd_mach_o_read_section_32: overlarge alignment value: %#lx, using 32 instead"
-msgstr "bfd_mach_o_read_section_32: надто велике Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ: %#lx, викориÑтовуємо заміÑÑ‚ÑŒ нього 32"
+msgid "bfd_mach_o_read_section_32: overlarge alignment value: %#lx"
+msgstr "bfd_mach_o_read_section_32: надто велике Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ: %#lx"
#: mach-o.c:3702
#, c-format
-msgid "bfd_mach_o_read_section_64: overlarge alignment value: %#lx, using 32 instead"
-msgstr "bfd_mach_o_read_section_32: надто велике Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ: %#lx, викориÑтовуємо заміÑÑ‚ÑŒ нього 32"
+msgid "bfd_mach_o_read_section_64: overlarge alignment value: %#lx"
+msgstr "bfd_mach_o_read_section_32: надто велике Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ: %#lx"
#: mach-o.c:3753
#, c-format
@@ -5850,132 +5930,137 @@ msgstr "невідоме Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð¾Ñ€Ñдку байтів у загÐ
msgid "%pB: access beyond end of merged section (%<PRId64>)"
msgstr "%pB: доÑтуп за кінцем об’єднаного розділу (%<PRId64>)"
-#: mmo.c:475
+#: mmo.c:472
#, c-format
msgid "%pB: no core to allocate section name %s"
msgstr "%pB: немає оÑнови Ð´Ð»Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð½Ð°Ð·Ð²Ð¸ розділу %s"
-#: mmo.c:540
+#: mmo.c:537
#, c-format
msgid "%pB: no core to allocate a symbol %d bytes long"
msgstr "%pB: немає оÑнови Ð´Ð»Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ñимволу довжиною %d байтів"
-#: mmo.c:951
+#: mmo.c:960
#, c-format
msgid "%pB: attempt to emit contents at non-multiple-of-4 address %#<PRIx64>"
msgstr "%pB: Ñпроба надіÑлати дані на некратну до 4 адреÑу %#<PRIx64>"
-#: mmo.c:1247
+#: mmo.c:1256
#, c-format
msgid "%pB: invalid mmo file: initialization value for $255 is not `Main'\n"
msgstr "%pB: некоректний файл mmo: Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·Ð°Ñ†Ñ–Ñ— Ð´Ð»Ñ $255 не дорівнює «Main»\n"
-#: mmo.c:1394
+#: mmo.c:1403
#, c-format
msgid "%pB: unsupported wide character sequence 0x%02X 0x%02X after symbol name starting with `%s'\n"
msgstr "%pB: непідтримувана широка поÑлідовніÑÑ‚ÑŒ Ñимволів 0x%02X 0x%02X піÑÐ»Ñ Ð½Ð°Ð·Ð²Ð¸ Ñимволу, починаючи з «%s»\n"
-#: mmo.c:1627
+#: mmo.c:1419
+#, c-format
+msgid "%pB: symbol name exceeds given max length of %d"
+msgstr "%pB: назва Ñимволу перевищує задану макÑимальну довжину у %d"
+
+#: mmo.c:1646
#, c-format
msgid "%pB: invalid mmo file: unsupported lopcode `%d'\n"
msgstr "%pB: некоректний файл mmo: непідтримуване Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ lopcode, «%d»\n"
-#: mmo.c:1638
+#: mmo.c:1657
#, c-format
msgid "%pB: invalid mmo file: expected YZ = 1 got YZ = %d for lop_quote\n"
msgstr "%pB: некоректний файл mmo: очікувалоÑÑ YZ = 1, отримано YZ = %d Ð´Ð»Ñ lop_quote\n"
-#: mmo.c:1678
+#: mmo.c:1701
#, c-format
msgid "%pB: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_loc\n"
msgstr "%pB: некоректний файл mmo: очікувалоÑÑ z = 1 або z = 2, отримано z = %d Ð´Ð»Ñ lop_loc\n"
-#: mmo.c:1729
+#: mmo.c:1752
#, c-format
msgid "%pB: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_fixo\n"
msgstr "%pB: некоректний файл mmo: очікувалоÑÑ z = 1 або z = 2, отримано z = %d Ð´Ð»Ñ lop_fixo\n"
-#: mmo.c:1770
+#: mmo.c:1801
#, c-format
msgid "%pB: invalid mmo file: expected y = 0, got y = %d for lop_fixrx\n"
msgstr "%pB: некоректний файл mmo: очікувалоÑÑ y=0, отримано y = %d Ð´Ð»Ñ lop_fixrx\n"
-#: mmo.c:1781
+#: mmo.c:1812
#, c-format
msgid "%pB: invalid mmo file: expected z = 16 or z = 24, got z = %d for lop_fixrx\n"
msgstr "%pB: некоректний файл mmo: очікувалоÑÑ z = 16 або z = 24, отримано z = %d Ð´Ð»Ñ lop_fixrx\n"
-#: mmo.c:1806
+#: mmo.c:1837
#, c-format
msgid "%pB: invalid mmo file: leading byte of operand word must be 0 or 1, got %d for lop_fixrx\n"
msgstr "%pB: некоректний файл mmo: початковим байтом Ñлова оператора має бути 0 або 1, отримано ж %d Ð´Ð»Ñ lop_fixrx\n"
-#: mmo.c:1831
+#: mmo.c:1866
#, c-format
msgid "%pB: cannot allocate file name for file number %d, %d bytes\n"
msgstr "%pB: не вдалоÑÑ Ñ€Ð¾Ð·Ð¼Ñ–Ñтити назву файла Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ð° з номером %d, %d байтів\n"
-#: mmo.c:1853
+#: mmo.c:1888
#, c-format
msgid "%pB: invalid mmo file: file number %d `%s', was already entered as `%s'\n"
msgstr "%pB: некоректний файл mmo: номер файла %d, «%s», уже здійÑнено вхід Ñк у «%s»\n"
-#: mmo.c:1867
+#: mmo.c:1902
#, c-format
msgid "%pB: invalid mmo file: file name for number %d was not specified before use\n"
msgstr "%pB: некоректний файл mmo: назву файла Ð´Ð»Ñ Ð½Ð¾Ð¼ÐµÑ€Ð° %d не було вказано до викориÑтаннÑ\n"
-#: mmo.c:1974
+#: mmo.c:2014
#, c-format
msgid "%pB: invalid mmo file: fields y and z of lop_stab non-zero, y: %d, z: %d\n"
msgstr "%pB: некоректний файл mmo: Ð¿Ð¾Ð»Ñ y Ñ– z lop_stab Ñ” ненульовими, y: %d, z: %d\n"
-#: mmo.c:2011
+#: mmo.c:2051
#, c-format
msgid "%pB: invalid mmo file: lop_end not last item in file\n"
msgstr "%pB: некоректний файл mmo: lop_end не Ñ” оÑтаннім запиÑом у файлі\n"
-#: mmo.c:2025
+#: mmo.c:2065
#, c-format
msgid "%pB: invalid mmo file: YZ of lop_end (%ld) not equal to the number of tetras to the preceding lop_stab (%ld)\n"
msgstr "%pB: некоректний файл mmo: YZ lop_end (%ld) не дорівнює кількоÑÑ‚Ñ– тетрад до попереднього lop_stab (%ld)\n"
-#: mmo.c:2734
+#: mmo.c:2778
#, c-format
msgid "%pB: invalid symbol table: duplicate symbol `%s'\n"
msgstr "%pB: некоректна Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ñимволів: Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ñимволу «%s»\n"
-#: mmo.c:2978
+#: mmo.c:3022
#, c-format
msgid "%pB: bad symbol definition: `Main' set to %s rather than the start address %s\n"
msgstr "%pB: помилкове Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñимволу: «Main» вÑтановлено у %s, а не у початкову адреÑу %s\n"
-#: mmo.c:3077
+#: mmo.c:3121
#, c-format
msgid "%pB: warning: symbol table too large for mmo, larger than 65535 32-bit words: %d. Only `Main' will be emitted.\n"
msgstr "%pB: попередженнÑ: Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ñимволів Ñ” надто великою Ð´Ð»Ñ mmo, Ñ—Ñ— розмір перевищує 65535 32-бітових Ñлова: %d. Буде випущено лише «Main».\n"
-#: mmo.c:3123
+#: mmo.c:3167
#, c-format
msgid "%pB: internal error, symbol table changed size from %d to %d words\n"
msgstr "%pB: Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°, змінено розмір таблиці Ñимволів з %d до %d Ñлів\n"
-#: mmo.c:3176
+#: mmo.c:3220
#, c-format
msgid "%pB: internal error, internal register section %pA had contents\n"
msgstr "%pB: Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°, внутрішній розділ регіÑтрів, %pA, міÑтив дані\n"
-#: mmo.c:3227
+#: mmo.c:3271
#, c-format
msgid "%pB: no initialized registers; section length 0\n"
msgstr "%pB: немає ініціалізованих регіÑтрів, довжина розділу дорівнює 0\n"
-#: mmo.c:3234
+#: mmo.c:3278
#, c-format
msgid "%pB: too many initialized registers; section length %<PRId64>"
msgstr "%pB: занадто багато ініціалізованих регіÑтрів; довжина розділу — %<PRId64>"
-#: mmo.c:3239
+#: mmo.c:3283
#, c-format
msgid "%pB: invalid start address for initialized registers of length %<PRId64>: %#<PRIx64>"
msgstr "%pB: некоректна початкова адреÑа Ð´Ð»Ñ Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ… регіÑтрів довжини %<PRId64>: %#<PRIx64>"
@@ -5985,7 +6070,7 @@ msgstr "%pB: некоректна початкова адреÑа Ð´Ð»Ñ Ñ–Ð½Ñ–Ñ
msgid "unhandled OSF/1 core file section type %d"
msgstr "непридатний до обробки тип розділу файла core OSF/1, %d"
-#: pdp11.c:1590
+#: pdp11.c:1589
#, c-format
msgid "%pB: symbol indicates overlay (not supported)"
msgstr "%pB: Ñимвол вказує на накладку (немає підтримки накладок)"
@@ -6057,47 +6142,47 @@ msgstr ""
"Дамп %s\n"
#. XXX code yet to be written.
-#: peicode.h:796
+#: peicode.h:806
#, c-format
msgid "%pB: unhandled import type; %x"
msgstr "%pB: непридатний до обробки тип імпортуваннÑ; %x"
-#: peicode.h:802
+#: peicode.h:812
#, c-format
msgid "%pB: unrecognized import type; %x"
msgstr "%pB: нерозпізнаний тип імпортуваннÑ; %x"
-#: peicode.h:817
+#: peicode.h:827
#, c-format
msgid "%pB: unrecognized import name type; %x"
msgstr "%pB: нерозпізнана назва імпортуваннÑ; %x"
-#: peicode.h:1225
+#: peicode.h:1241
#, c-format
msgid "%pB: unrecognised machine type (0x%x) in Import Library Format archive"
msgstr "%pB: нерозпізнаний тип архітектури (0x%x) у архіві Import Library Format"
-#: peicode.h:1238
+#: peicode.h:1254
#, c-format
msgid "%pB: recognised but unhandled machine type (0x%x) in Import Library Format archive"
msgstr "%pB: розпізнаний, але непридатний до обробки тип архітектури (0x%x) у архіві Import Library Format"
-#: peicode.h:1256
+#: peicode.h:1272
#, c-format
msgid "%pB: size field is zero in Import Library Format header"
msgstr "%pB: у заголовку Import Library Format поле розміру є нульовим"
-#: peicode.h:1282
+#: peicode.h:1298
#, c-format
msgid "%pB: string not null terminated in ILF object file"
msgstr "%pB: у об’єктному файлі ILF Ñ€Ñдок не завершуєтьÑÑ Ð½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¼ Ñимволом"
-#: peicode.h:1338
+#: peicode.h:1354
#, c-format
msgid "%pB: error: debug data ends beyond end of debug directory"
msgstr "%pB: помилка: діагноÑтичні дані завершуютьÑÑ Ð·Ð° кінцем діагноÑтичного каталогу"
-#: plugin.c:236
+#: plugin.c:246
msgid "plugin framework: out of file descriptors. Try using fewer objects/archives\n"
msgstr "бібліотека додатків: вихід за межі деÑкрипторів файлів. Спробуйте зменшити кількіÑÑ‚ÑŒ об'єктів/архівів\n"
@@ -6154,17 +6239,17 @@ msgstr "Сектор розділу[%d] = 0x%.8lx (%ld)\n"
msgid "Partition[%d] length = 0x%.8lx (%ld)\n"
msgstr "Довжина розділу[%d] = 0x%.8lx (%ld)\n"
-#: reloc.c:8329
+#: reloc.c:8420
msgid "INPUT_SECTION_FLAGS are not supported"
msgstr "Підтримки INPUT_SECTION_FLAGS не передбачено"
-#: reloc.c:8589
+#: reloc.c:8680
#, c-format
msgid "%pB: unrecognized relocation type %#x in section `%pA'"
msgstr "%pB: нерозпізнане переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ‚Ð¸Ð¿Ñƒ %#x у розділі «%pA»"
#. PR 21803: Suggest the most likely cause of this error.
-#: reloc.c:8593
+#: reloc.c:8684
#, c-format
msgid "is this version of the linker - %s - out of date ?"
msgstr "можливо, Ñ†Ñ Ð²ÐµÑ€ÑÑ–Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸ÐºÐ° - %s - Ñ” заÑтарілою?"
@@ -6374,291 +6459,291 @@ msgstr "%s не реалізовано"
msgid "unknown line command %d"
msgstr "невідома Ñ€Ñдкова команда %d"
-#: vms-alpha.c:5186 vms-alpha.c:5204 vms-alpha.c:5219 vms-alpha.c:5235
-#: vms-alpha.c:5248 vms-alpha.c:5260 vms-alpha.c:5273
+#: vms-alpha.c:5183 vms-alpha.c:5201 vms-alpha.c:5216 vms-alpha.c:5232
+#: vms-alpha.c:5245 vms-alpha.c:5257 vms-alpha.c:5270
#, c-format
msgid "unknown reloc %s + %s"
msgstr "невідоме переÑÑƒÐ²Ð°Ð½Ð½Ñ %s + %s"
-#: vms-alpha.c:5328
+#: vms-alpha.c:5325
#, c-format
msgid "unknown reloc %s"
msgstr "невідоме переÑÑƒÐ²Ð°Ð½Ð½Ñ %s"
-#: vms-alpha.c:5342
+#: vms-alpha.c:5339
msgid "invalid section index in ETIR"
msgstr "некоректний номер розділу у ETIR"
-#: vms-alpha.c:5351
+#: vms-alpha.c:5348
msgid "relocation for non-REL psect"
msgstr "переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ psect, Ñкий не Ñ” REL"
-#: vms-alpha.c:5400
+#: vms-alpha.c:5397
#, c-format
msgid "unknown symbol in command %s"
msgstr "невідомий Ñимвол у команді %s"
-#: vms-alpha.c:5814
+#: vms-alpha.c:5811
#, c-format
msgid "reloc (%d) is *UNKNOWN*"
msgstr "переÑÑƒÐ²Ð°Ð½Ð½Ñ (%d) Ñ” *ÐЕВІДОМИМ*"
-#: vms-alpha.c:5930
+#: vms-alpha.c:5927
#, c-format
msgid " EMH %u (len=%u): "
msgstr " EMH %u (довж=%u): "
-#: vms-alpha.c:5935
+#: vms-alpha.c:5932
#, c-format
msgid " Error: The length is less than the length of an EMH record\n"
msgstr " Помилка: довжина Ñ” меншою за довжину запиÑу EMH\n"
-#: vms-alpha.c:5952
+#: vms-alpha.c:5949
#, c-format
msgid " Error: The record length is less than the size of an EMH_MHD record\n"
msgstr " Помилка: довжина запиÑу Ñ” меншою за розмір запиÑу EMH_MHD\n"
-#: vms-alpha.c:5955
+#: vms-alpha.c:5952
#, c-format
msgid "Module header\n"
msgstr "Заголовок модулÑ\n"
-#: vms-alpha.c:5956
+#: vms-alpha.c:5953
#, c-format
msgid " structure level: %u\n"
msgstr " рівень Ñтрукт. : %u\n"
-#: vms-alpha.c:5957
+#: vms-alpha.c:5954
#, c-format
msgid " max record size: %u\n"
msgstr " макÑ. розм. запиÑу: %u\n"
-#: vms-alpha.c:5963
+#: vms-alpha.c:5960
#, c-format
msgid " Error: The module name is missing\n"
msgstr " Помилка: не вказано назви модулÑ\n"
-#: vms-alpha.c:5969
+#: vms-alpha.c:5966
#, c-format
msgid " Error: The module name is too long\n"
msgstr " Помилка: назва Ð¼Ð¾Ð´ÑƒÐ»Ñ Ñ” надто довгою\n"
-#: vms-alpha.c:5972
+#: vms-alpha.c:5969
#, c-format
msgid " module name : %.*s\n"
msgstr " назва Ð¼Ð¾Ð´ÑƒÐ»Ñ : %.*s\n"
-#: vms-alpha.c:5976
+#: vms-alpha.c:5973
#, c-format
msgid " Error: The module version is missing\n"
msgstr " Помилка: не вказано верÑÑ–ÑŽ модулÑ\n"
-#: vms-alpha.c:5982
+#: vms-alpha.c:5979
#, c-format
msgid " Error: The module version is too long\n"
msgstr " Помилка: верÑÑ–Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñ Ñ” надто довгою\n"
-#: vms-alpha.c:5985
+#: vms-alpha.c:5982
#, c-format
msgid " module version : %.*s\n"
msgstr " верÑÑ–Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñ : %.*s\n"
-#: vms-alpha.c:5988
+#: vms-alpha.c:5985
#, c-format
msgid " Error: The compile date is truncated\n"
msgstr " Помилка: дату Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ Ð¾Ð±Ñ€Ñ–Ð·Ð°Ð½Ð¾\n"
-#: vms-alpha.c:5990
+#: vms-alpha.c:5987
#, c-format
msgid " compile date : %.17s\n"
msgstr " дата Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ : %.17s\n"
-#: vms-alpha.c:5995
+#: vms-alpha.c:5992
#, c-format
msgid "Language Processor Name\n"
msgstr "Ðазва обробника мови\n"
-#: vms-alpha.c:5996
+#: vms-alpha.c:5993
#, c-format
msgid " language name: %.*s\n"
msgstr " назва мови : %.*s\n"
-#: vms-alpha.c:6000
+#: vms-alpha.c:5997
#, c-format
msgid "Source Files Header\n"
msgstr "Заголовок файлів коду\n"
-#: vms-alpha.c:6001
+#: vms-alpha.c:5998
#, c-format
msgid " file: %.*s\n"
msgstr " файл: %.*s\n"
-#: vms-alpha.c:6005
+#: vms-alpha.c:6002
#, c-format
msgid "Title Text Header\n"
msgstr "Заголовок титульного текÑту\n"
-#: vms-alpha.c:6006
+#: vms-alpha.c:6003
#, c-format
msgid " title: %.*s\n"
msgstr " заголовок: %.*s\n"
-#: vms-alpha.c:6010
+#: vms-alpha.c:6007
#, c-format
msgid "Copyright Header\n"
msgstr "Заголовок авторÑьких прав\n"
-#: vms-alpha.c:6011
+#: vms-alpha.c:6008
#, c-format
msgid " copyright: %.*s\n"
msgstr " авторÑькі права: %.*s\n"
-#: vms-alpha.c:6015
+#: vms-alpha.c:6012
#, c-format
msgid "unhandled emh subtype %u\n"
msgstr "непридатний до обробки підтип emh, %u\n"
-#: vms-alpha.c:6025
+#: vms-alpha.c:6022
#, c-format
msgid " EEOM (len=%u):\n"
msgstr " EEOM (довж=%u):\n"
-#: vms-alpha.c:6030
+#: vms-alpha.c:6027
#, c-format
msgid " Error: The length is less than the length of an EEOM record\n"
msgstr " Помилка: довжина Ñ” меншою за довжину запиÑу EEOM\n"
-#: vms-alpha.c:6034
+#: vms-alpha.c:6031
#, c-format
msgid " number of cond linkage pairs: %u\n"
msgstr " кількіÑÑ‚ÑŒ пар умовного компонуваннÑ: %u\n"
-#: vms-alpha.c:6036
+#: vms-alpha.c:6033
#, c-format
msgid " completion code: %u\n"
msgstr " код завершеннÑ: %u\n"
-#: vms-alpha.c:6040
+#: vms-alpha.c:6037
#, c-format
msgid " transfer addr flags: 0x%02x\n"
msgstr " прапорці Ð¿ÐµÑ€ÐµÐ´Ð°Ð²Ð°Ð½Ð½Ñ Ð°Ð´Ñ€ÐµÑи: 0x%02x\n"
-#: vms-alpha.c:6041
+#: vms-alpha.c:6038
#, c-format
msgid " transfer addr psect: %u\n"
msgstr " psect Ð¿ÐµÑ€ÐµÐ´Ð°Ð²Ð°Ð½Ð½Ñ Ð°Ð´Ñ€ÐµÑи: %u\n"
-#: vms-alpha.c:6043
+#: vms-alpha.c:6040
#, c-format
msgid " transfer address : 0x%08x\n"
msgstr " адреÑа перенеÑÐµÐ½Ð½Ñ : 0x%08x\n"
-#: vms-alpha.c:6052
+#: vms-alpha.c:6049
msgid " WEAK"
msgstr " WEAK"
-#: vms-alpha.c:6054
+#: vms-alpha.c:6051
msgid " DEF"
msgstr " DEF"
-#: vms-alpha.c:6056
+#: vms-alpha.c:6053
msgid " UNI"
msgstr " UNI"
-#: vms-alpha.c:6058 vms-alpha.c:6079
+#: vms-alpha.c:6055 vms-alpha.c:6076
msgid " REL"
msgstr " REL"
-#: vms-alpha.c:6060
+#: vms-alpha.c:6057
msgid " COMM"
msgstr " COMM"
-#: vms-alpha.c:6062
+#: vms-alpha.c:6059
msgid " VECEP"
msgstr " VECEP"
-#: vms-alpha.c:6064
+#: vms-alpha.c:6061
msgid " NORM"
msgstr " NORM"
-#: vms-alpha.c:6066
+#: vms-alpha.c:6063
msgid " QVAL"
msgstr " QVAL"
-#: vms-alpha.c:6073
+#: vms-alpha.c:6070
msgid " PIC"
msgstr " PIC"
-#: vms-alpha.c:6075
+#: vms-alpha.c:6072
msgid " LIB"
msgstr " LIB"
-#: vms-alpha.c:6077
+#: vms-alpha.c:6074
msgid " OVR"
msgstr " OVR"
-#: vms-alpha.c:6081
+#: vms-alpha.c:6078
msgid " GBL"
msgstr " GBL"
-#: vms-alpha.c:6083
+#: vms-alpha.c:6080
msgid " SHR"
msgstr " SHR"
-#: vms-alpha.c:6085
+#: vms-alpha.c:6082
msgid " EXE"
msgstr " EXE"
-#: vms-alpha.c:6087
+#: vms-alpha.c:6084
msgid " RD"
msgstr " RD"
-#: vms-alpha.c:6089
+#: vms-alpha.c:6086
msgid " WRT"
msgstr " WRT"
-#: vms-alpha.c:6091
+#: vms-alpha.c:6088
msgid " VEC"
msgstr " VEC"
-#: vms-alpha.c:6093
+#: vms-alpha.c:6090
msgid " NOMOD"
msgstr " NOMOD"
-#: vms-alpha.c:6095
+#: vms-alpha.c:6092
msgid " COM"
msgstr " COM"
-#: vms-alpha.c:6097
+#: vms-alpha.c:6094
msgid " 64B"
msgstr " 64B"
-#: vms-alpha.c:6106
+#: vms-alpha.c:6103
#, c-format
msgid " EGSD (len=%u):\n"
msgstr " EGSD (довж=%u):\n"
-#: vms-alpha.c:6119
+#: vms-alpha.c:6118
#, c-format
msgid " EGSD entry %2u (type: %u, len: %u): "
msgstr " Ð·Ð°Ð¿Ð¸Ñ EGSD %2u (тип: %u, довж: %u): "
-#: vms-alpha.c:6125 vms-alpha.c:6376
+#: vms-alpha.c:6124 vms-alpha.c:6419
#, c-format
-msgid " Error: length larger than remaining space in record\n"
-msgstr " Помилка: довжина перевищує міÑце, Ñке лишилоÑÑ Ñƒ запиÑÑ–\n"
+msgid " Erroneous length\n"
+msgstr " Помилкова довжина\n"
#: vms-alpha.c:6137
#, c-format
msgid "PSC - Program section definition\n"
msgstr "PSC — Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ програми\n"
-#: vms-alpha.c:6138 vms-alpha.c:6155
+#: vms-alpha.c:6138 vms-alpha.c:6158
#, c-format
msgid " alignment : 2**%u\n"
msgstr " вирівнюваннÑ: 2**%u\n"
-#: vms-alpha.c:6139 vms-alpha.c:6156
+#: vms-alpha.c:6139 vms-alpha.c:6159
#, c-format
msgid " flags : 0x%04x"
msgstr " прапорці : 0x%04x"
@@ -6668,1110 +6753,1110 @@ msgstr " прапорці : 0x%04x"
msgid " alloc (len): %u (0x%08x)\n"
msgstr " alloc (довжина): %u (0x%08x)\n"
-#: vms-alpha.c:6144 vms-alpha.c:6201 vms-alpha.c:6250
+#: vms-alpha.c:6145 vms-alpha.c:6211 vms-alpha.c:6279
#, c-format
msgid " name : %.*s\n"
msgstr " назва : %.*s\n"
-#: vms-alpha.c:6154
+#: vms-alpha.c:6157
#, c-format
msgid "SPSC - Shared Image Program section def\n"
msgstr "SPSC — Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð½Ð¾Ð³Ð¾ розділу Ñпільного образу\n"
-#: vms-alpha.c:6160
+#: vms-alpha.c:6163
#, c-format
msgid " alloc (len) : %u (0x%08x)\n"
msgstr " alloc (довжина): %u (0x%08x)\n"
-#: vms-alpha.c:6161
+#: vms-alpha.c:6164
#, c-format
msgid " image offset : 0x%08x\n"
msgstr " відÑтуп образу: 0x%08x\n"
-#: vms-alpha.c:6163
+#: vms-alpha.c:6166
#, c-format
msgid " symvec offset : 0x%08x\n"
msgstr " зÑув symvec : 0x%08x\n"
-#: vms-alpha.c:6165
+#: vms-alpha.c:6169
#, c-format
msgid " name : %.*s\n"
msgstr " назва : %.*s\n"
-#: vms-alpha.c:6178
+#: vms-alpha.c:6185
#, c-format
msgid "SYM - Global symbol definition\n"
msgstr "SYM — Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¸Ñ… Ñимволів\n"
-#: vms-alpha.c:6179 vms-alpha.c:6239 vms-alpha.c:6260 vms-alpha.c:6279
+#: vms-alpha.c:6186 vms-alpha.c:6267 vms-alpha.c:6291 vms-alpha.c:6314
#, c-format
msgid " flags: 0x%04x"
msgstr " прапорці: 0x%04x"
-#: vms-alpha.c:6182
+#: vms-alpha.c:6189
#, c-format
msgid " psect offset: 0x%08x\n"
msgstr " відÑтуп psect: 0x%08x\n"
-#: vms-alpha.c:6186
+#: vms-alpha.c:6193
#, c-format
msgid " code address: 0x%08x\n"
msgstr " адреÑа коду: 0x%08x\n"
-#: vms-alpha.c:6188
+#: vms-alpha.c:6195
#, c-format
msgid " psect index for entry point : %u\n"
msgstr " Ñ–Ð½Ð´ÐµÐºÑ psect Ð´Ð»Ñ Ñ‚Ð¾Ñ‡ÐºÐ¸ входженнÑ: %u\n"
-#: vms-alpha.c:6191 vms-alpha.c:6267 vms-alpha.c:6286
+#: vms-alpha.c:6198 vms-alpha.c:6298 vms-alpha.c:6321
#, c-format
msgid " psect index : %u\n"
msgstr " Ñ–Ð½Ð´ÐµÐºÑ psect: %u\n"
-#: vms-alpha.c:6193 vms-alpha.c:6269 vms-alpha.c:6288
+#: vms-alpha.c:6201 vms-alpha.c:6301 vms-alpha.c:6324
#, c-format
msgid " name : %.*s\n"
msgstr " назва : %.*s\n"
-#: vms-alpha.c:6200
+#: vms-alpha.c:6209
#, c-format
msgid "SYM - Global symbol reference\n"
msgstr "SYM — поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° загальні Ñимволи\n"
-#: vms-alpha.c:6212
+#: vms-alpha.c:6224
#, c-format
msgid "IDC - Ident Consistency check\n"
msgstr "IDC — перевірка коректноÑÑ‚Ñ– ідентифікаторів\n"
-#: vms-alpha.c:6213
+#: vms-alpha.c:6225
#, c-format
msgid " flags : 0x%08x"
msgstr " прапорці : 0x%08x"
-#: vms-alpha.c:6217
+#: vms-alpha.c:6229
#, c-format
msgid " id match : %x\n"
msgstr " ід. відповідноÑÑ‚Ñ–: %x\n"
-#: vms-alpha.c:6219
+#: vms-alpha.c:6231
#, c-format
msgid " error severity: %x\n"
msgstr " критичніÑÑ‚ÑŒ помилки: %x\n"
-#: vms-alpha.c:6222
+#: vms-alpha.c:6235
#, c-format
msgid " entity name : %.*s\n"
msgstr " назва елемента: %.*s\n"
-#: vms-alpha.c:6224
+#: vms-alpha.c:6241
#, c-format
msgid " object name : %.*s\n"
msgstr " назва об’єкта : %.*s\n"
-#: vms-alpha.c:6227
+#: vms-alpha.c:6250
#, c-format
msgid " binary ident : 0x%08x\n"
msgstr " двійк. ідент. : 0x%08x\n"
-#: vms-alpha.c:6230
+#: vms-alpha.c:6254
#, c-format
msgid " ascii ident : %.*s\n"
msgstr " ідент. ascii : %.*s\n"
-#: vms-alpha.c:6238
+#: vms-alpha.c:6266
#, c-format
msgid "SYMG - Universal symbol definition\n"
msgstr "SYMG — УніверÑальне Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñимволів\n"
-#: vms-alpha.c:6242
+#: vms-alpha.c:6270
#, c-format
msgid " symbol vector offset: 0x%08x\n"
msgstr " зÑув вектора Ñимволів: 0x%08x\n"
-#: vms-alpha.c:6244
+#: vms-alpha.c:6272
#, c-format
msgid " entry point: 0x%08x\n"
msgstr " точка входу: 0x%08x\n"
-#: vms-alpha.c:6246
+#: vms-alpha.c:6274
#, c-format
msgid " proc descr : 0x%08x\n"
msgstr " деÑкр. процеÑу: 0x%08x\n"
-#: vms-alpha.c:6248
+#: vms-alpha.c:6276
#, c-format
msgid " psect index: %u\n"
msgstr " Ñ–Ð½Ð´ÐµÐºÑ psect: %u\n"
-#: vms-alpha.c:6259
+#: vms-alpha.c:6290
#, c-format
msgid "SYMV - Vectored symbol definition\n"
msgstr "SYMV — Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²ÐµÐºÑ‚Ð¾Ñ€Ð¸Ð·Ð¾Ð²Ð°Ð½Ð¾Ð³Ð¾ Ñимволу\n"
-#: vms-alpha.c:6263
+#: vms-alpha.c:6294
#, c-format
msgid " vector : 0x%08x\n"
msgstr " вектор : 0x%08x\n"
-#: vms-alpha.c:6265 vms-alpha.c:6284
+#: vms-alpha.c:6296 vms-alpha.c:6319
#, c-format
msgid " psect offset: %u\n"
msgstr " відÑтуп psect: %u\n"
-#: vms-alpha.c:6278
+#: vms-alpha.c:6313
#, c-format
msgid "SYMM - Global symbol definition with version\n"
msgstr "SYMM — Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñимволу з верÑією\n"
-#: vms-alpha.c:6282
+#: vms-alpha.c:6317
#, c-format
msgid " version mask: 0x%08x\n"
msgstr " маÑка верÑÑ–Ñ—: 0x%08x\n"
-#: vms-alpha.c:6293
+#: vms-alpha.c:6330
#, c-format
msgid "unhandled egsd entry type %u\n"
msgstr "непридатний до обробки тип запиÑу egsd, %u\n"
-#: vms-alpha.c:6328
+#: vms-alpha.c:6369
#, c-format
msgid " linkage index: %u, replacement insn: 0x%08x\n"
msgstr " Ñ–Ð½Ð´ÐµÐºÑ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ: %u, інÑтрукціÑ-замінник: 0x%08x\n"
-#: vms-alpha.c:6332
+#: vms-alpha.c:6373
#, c-format
msgid " psect idx 1: %u, offset 1: 0x%08x %08x\n"
msgstr " інд. psect 1: %u, відÑтуп 1: 0x%08x %08x\n"
-#: vms-alpha.c:6337
+#: vms-alpha.c:6378
#, c-format
msgid " psect idx 2: %u, offset 2: 0x%08x %08x\n"
msgstr " інд. psect 2: %u, відÑтуп 2: 0x%08x %08x\n"
-#: vms-alpha.c:6343
+#: vms-alpha.c:6384
#, c-format
msgid " psect idx 3: %u, offset 3: 0x%08x %08x\n"
msgstr " інд. psect 3: %u, відÑтуп 3: 0x%08x %08x\n"
-#: vms-alpha.c:6348
+#: vms-alpha.c:6389
#, c-format
msgid " global name: %.*s\n"
msgstr " загальна назва: %.*s\n"
-#: vms-alpha.c:6359
+#: vms-alpha.c:6401
#, c-format
-msgid " %s (len=%u+%u):\n"
-msgstr " %s (довж=%u+%u):\n"
+msgid " %s (len=%u):\n"
+msgstr " %s (довж=%u):\n"
-#: vms-alpha.c:6381
+#: vms-alpha.c:6424
#, c-format
-msgid " (type: %3u, size: 4+%3u): "
-msgstr " (тип: %3u, розмір: 4+%3u): "
+msgid " (type: %3u, size: %3u): "
+msgstr " (тип: %3u, розмір: %3u): "
-#: vms-alpha.c:6385
+#: vms-alpha.c:6430
#, c-format
msgid "STA_GBL (stack global) %.*s\n"
msgstr "STA_GBL (загальний Ñтек) %.*s\n"
-#: vms-alpha.c:6389
+#: vms-alpha.c:6434
#, c-format
-msgid "STA_LW (stack longword) 0x%08x\n"
-msgstr "STA_LW (Ñтек довгих Ñлів) 0x%08x\n"
+msgid "STA_LW (stack longword)"
+msgstr "STA_LW (Ñтек довгих Ñлів)"
-#: vms-alpha.c:6393
+#: vms-alpha.c:6440
#, c-format
-msgid "STA_QW (stack quadword) 0x%08x %08x\n"
-msgstr "STA_QW (Ñтек четверних Ñлів) 0x%08x %08x\n"
+msgid "STA_QW (stack quadword)"
+msgstr "STA_QW (Ñтек квадроÑлів)"
-#: vms-alpha.c:6398
+#: vms-alpha.c:6447
#, c-format
msgid "STA_PQ (stack psect base + offset)\n"
msgstr "STA_PQ (Ñтек оÑнови psect + зÑув)\n"
-#: vms-alpha.c:6400
+#: vms-alpha.c:6450
#, c-format
msgid " psect: %u, offset: 0x%08x %08x\n"
msgstr " psect: %u, зÑув: 0x%08x %08x\n"
-#: vms-alpha.c:6406
+#: vms-alpha.c:6456
#, c-format
msgid "STA_LI (stack literal)\n"
msgstr "STA_LI (Ñтек літералів)\n"
-#: vms-alpha.c:6409
+#: vms-alpha.c:6459
#, c-format
msgid "STA_MOD (stack module)\n"
msgstr "STA_MOD (Ñтек модулів)\n"
-#: vms-alpha.c:6412
+#: vms-alpha.c:6462
#, c-format
msgid "STA_CKARG (compare procedure argument)\n"
msgstr "STA_CKARG (аргумент процедури порівнÑннÑ)\n"
-#: vms-alpha.c:6416
+#: vms-alpha.c:6466
#, c-format
msgid "STO_B (store byte)\n"
msgstr "STO_B (збережений байт)\n"
-#: vms-alpha.c:6419
+#: vms-alpha.c:6469
#, c-format
msgid "STO_W (store word)\n"
msgstr "STO_W (збережене Ñлово)\n"
-#: vms-alpha.c:6422
+#: vms-alpha.c:6472
#, c-format
msgid "STO_LW (store longword)\n"
msgstr "STO_LW (збережене longword)\n"
-#: vms-alpha.c:6425
+#: vms-alpha.c:6475
#, c-format
msgid "STO_QW (store quadword)\n"
msgstr "STO_QW (збережене quadword)\n"
-#: vms-alpha.c:6431
+#: vms-alpha.c:6482
#, c-format
msgid "STO_IMMR (store immediate repeat) %u bytes\n"
msgstr "STO_IMMR (збережене негайне повтореннÑ) %u байтів\n"
-#: vms-alpha.c:6438
+#: vms-alpha.c:6491
#, c-format
msgid "STO_GBL (store global) %.*s\n"
msgstr "STO_GBL (загальне збереженнÑ) %.*s\n"
-#: vms-alpha.c:6442
+#: vms-alpha.c:6496
#, c-format
msgid "STO_CA (store code address) %.*s\n"
msgstr "STO_CA (збережена адреÑа коду) %.*s\n"
-#: vms-alpha.c:6446
+#: vms-alpha.c:6500
#, c-format
msgid "STO_RB (store relative branch)\n"
msgstr "STO_RB (збережене відноÑне відгалуженнÑ)\n"
-#: vms-alpha.c:6449
+#: vms-alpha.c:6503
#, c-format
msgid "STO_AB (store absolute branch)\n"
msgstr "STO_AB (збережене абÑолютне відгалуженнÑ)\n"
-#: vms-alpha.c:6452
+#: vms-alpha.c:6506
#, c-format
msgid "STO_OFF (store offset to psect)\n"
msgstr "STO_OFF (збережений зÑув щодо psect)\n"
-#: vms-alpha.c:6458
+#: vms-alpha.c:6513
#, c-format
msgid "STO_IMM (store immediate) %u bytes\n"
msgstr "STO_IMM (негайне збереженнÑ) %u байт\n"
-#: vms-alpha.c:6465
+#: vms-alpha.c:6522
#, c-format
msgid "STO_GBL_LW (store global longword) %.*s\n"
msgstr "STO_GBL_LW (збережене загальне longword) %.*s\n"
-#: vms-alpha.c:6469
+#: vms-alpha.c:6526
#, c-format
msgid "STO_OFF (store LP with procedure signature)\n"
msgstr "STO_OFF (Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ LP з підпиÑом підпрограми)\n"
-#: vms-alpha.c:6472
+#: vms-alpha.c:6529
#, c-format
msgid "STO_BR_GBL (store branch global) *todo*\n"
msgstr "STO_BR_GBL (збережене загальне відгалуженнÑ) *ще не реалізовано*\n"
-#: vms-alpha.c:6475
+#: vms-alpha.c:6532
#, c-format
msgid "STO_BR_PS (store branch psect + offset) *todo*\n"
msgstr "STO_BR_PS (збережений psect Ð²Ñ–Ð´Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ + зÑув) *ще не реалізовано*\n"
-#: vms-alpha.c:6479
+#: vms-alpha.c:6536
#, c-format
msgid "OPR_NOP (no-operation)\n"
msgstr "OPR_NOP (без операції)\n"
-#: vms-alpha.c:6482
+#: vms-alpha.c:6539
#, c-format
msgid "OPR_ADD (add)\n"
msgstr "OPR_ADD (додаваннÑ)\n"
-#: vms-alpha.c:6485
+#: vms-alpha.c:6542
#, c-format
msgid "OPR_SUB (subtract)\n"
msgstr "OPR_SUB (відніманнÑ)\n"
-#: vms-alpha.c:6488
+#: vms-alpha.c:6545
#, c-format
msgid "OPR_MUL (multiply)\n"
msgstr "OPR_MUL (множеннÑ)\n"
-#: vms-alpha.c:6491
+#: vms-alpha.c:6548
#, c-format
msgid "OPR_DIV (divide)\n"
msgstr "OPR_DIV (діленнÑ)\n"
-#: vms-alpha.c:6494
+#: vms-alpha.c:6551
#, c-format
msgid "OPR_AND (logical and)\n"
msgstr "OPR_AND (логічне «І»)\n"
-#: vms-alpha.c:6497
+#: vms-alpha.c:6554
#, c-format
msgid "OPR_IOR (logical inclusive or)\n"
msgstr "OPR_IOR (логічне включне «ÐБО»)\n"
-#: vms-alpha.c:6500
+#: vms-alpha.c:6557
#, c-format
msgid "OPR_EOR (logical exclusive or)\n"
msgstr "OPR_EOR (логічне виключне «ÐБО»)\n"
-#: vms-alpha.c:6503
+#: vms-alpha.c:6560
#, c-format
msgid "OPR_NEG (negate)\n"
msgstr "OPR_NEG (запереченнÑ)\n"
-#: vms-alpha.c:6506
+#: vms-alpha.c:6563
#, c-format
msgid "OPR_COM (complement)\n"
msgstr "OPR_COM (доповненнÑ)\n"
-#: vms-alpha.c:6509
+#: vms-alpha.c:6566
#, c-format
msgid "OPR_INSV (insert field)\n"
msgstr "OPR_INSV (вÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð¾Ð»Ñ)\n"
-#: vms-alpha.c:6512
+#: vms-alpha.c:6569
#, c-format
msgid "OPR_ASH (arithmetic shift)\n"
msgstr "OPR_ASH (арифметичний зÑув)\n"
-#: vms-alpha.c:6515
+#: vms-alpha.c:6572
#, c-format
msgid "OPR_USH (unsigned shift)\n"
msgstr "OPR_USH (беззнаковий зÑув)\n"
-#: vms-alpha.c:6518
+#: vms-alpha.c:6575
#, c-format
msgid "OPR_ROT (rotate)\n"
msgstr "OPR_ROT (циклічний зÑув)\n"
-#: vms-alpha.c:6521
+#: vms-alpha.c:6578
#, c-format
msgid "OPR_SEL (select)\n"
msgstr "OPR_SEL (вибір)\n"
-#: vms-alpha.c:6524
+#: vms-alpha.c:6581
#, c-format
msgid "OPR_REDEF (redefine symbol to curr location)\n"
msgstr "OPR_REDEF (Ð¿ÐµÑ€ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñимволу до поточної позиції)\n"
-#: vms-alpha.c:6527
+#: vms-alpha.c:6584
#, c-format
msgid "OPR_REDEF (define a literal)\n"
msgstr "OPR_REDEF (Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð»Ñ–Ñ‚ÐµÑ€Ð°Ð»Ð°)\n"
-#: vms-alpha.c:6531
+#: vms-alpha.c:6588
#, c-format
msgid "STC_LP (store cond linkage pair)\n"
msgstr "STC_LP (збережена пара умовного компонуваннÑ)\n"
-#: vms-alpha.c:6535
+#: vms-alpha.c:6592
#, c-format
msgid "STC_LP_PSB (store cond linkage pair + signature)\n"
msgstr "STC_LP_PSB (збережена пара умовного ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ + підпиÑ)\n"
-#: vms-alpha.c:6537
+#: vms-alpha.c:6596
#, c-format
msgid " linkage index: %u, procedure: %.*s\n"
msgstr " Ñ–Ð½Ð´ÐµÐºÑ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ: %u, процедура: %.*s\n"
-#: vms-alpha.c:6540
+#: vms-alpha.c:6603
#, c-format
msgid " signature: %.*s\n"
msgstr " підпиÑ: %.*s\n"
-#: vms-alpha.c:6543
+#: vms-alpha.c:6609
#, c-format
msgid "STC_GBL (store cond global)\n"
msgstr "STC_GBL (збережена загальна умова)\n"
-#: vms-alpha.c:6545
+#: vms-alpha.c:6612
#, c-format
msgid " linkage index: %u, global: %.*s\n"
msgstr " Ñ–Ð½Ð´ÐµÐºÑ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ: %u, загальний: %.*s\n"
-#: vms-alpha.c:6549
+#: vms-alpha.c:6617
#, c-format
msgid "STC_GCA (store cond code address)\n"
msgstr "STC_GCA (збережена адреÑа умовного коду)\n"
-#: vms-alpha.c:6551
+#: vms-alpha.c:6620
#, c-format
msgid " linkage index: %u, procedure name: %.*s\n"
msgstr " Ñ–Ð½Ð´ÐµÐºÑ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ: %u, назва підпрограми: %.*s\n"
-#: vms-alpha.c:6555
+#: vms-alpha.c:6625
#, c-format
msgid "STC_PS (store cond psect + offset)\n"
msgstr "STC_PS (збережений умовний psect + зÑув)\n"
-#: vms-alpha.c:6558
+#: vms-alpha.c:6629
#, c-format
msgid " linkage index: %u, psect: %u, offset: 0x%08x %08x\n"
msgstr " Ñ–Ð½Ð´ÐµÐºÑ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ: %u, psect: %u, зÑув: 0x%08x %08x\n"
-#: vms-alpha.c:6565
+#: vms-alpha.c:6636
#, c-format
msgid "STC_NOP_GBL (store cond NOP at global addr)\n"
msgstr "STC_NOP_GBL (збережений умовний NOP за загальною адреÑою)\n"
-#: vms-alpha.c:6569
+#: vms-alpha.c:6640
#, c-format
msgid "STC_NOP_PS (store cond NOP at psect + offset)\n"
msgstr "STC_NOP_PS (збережений умовний NOP за psect + зÑув)\n"
-#: vms-alpha.c:6573
+#: vms-alpha.c:6644
#, c-format
msgid "STC_BSR_GBL (store cond BSR at global addr)\n"
msgstr "STC_BSR_GBL (збережений умовний BSR за загальною адреÑою)\n"
-#: vms-alpha.c:6577
+#: vms-alpha.c:6648
#, c-format
msgid "STC_BSR_PS (store cond BSR at psect + offset)\n"
msgstr "STC_BSR_PS (збережений умовний BSR за psect + зÑув)\n"
-#: vms-alpha.c:6581
+#: vms-alpha.c:6652
#, c-format
msgid "STC_LDA_GBL (store cond LDA at global addr)\n"
msgstr "STC_LDA_GBL (збережений умовний LDA за загальною адреÑою)\n"
-#: vms-alpha.c:6585
+#: vms-alpha.c:6656
#, c-format
msgid "STC_LDA_PS (store cond LDA at psect + offset)\n"
msgstr "STC_LDA_PS (збережена умовна LDA за psect + зÑув)\n"
-#: vms-alpha.c:6589
+#: vms-alpha.c:6660
#, c-format
msgid "STC_BOH_GBL (store cond BOH at global addr)\n"
msgstr "STC_BOH_GBL (збережений умовний BOH за загальною адреÑою)\n"
-#: vms-alpha.c:6593
+#: vms-alpha.c:6664
#, c-format
msgid "STC_BOH_PS (store cond BOH at psect + offset)\n"
msgstr "STC_BOH_PS (збережений умовний BOH за psect + зÑув)\n"
-#: vms-alpha.c:6598
+#: vms-alpha.c:6669
#, c-format
msgid "STC_NBH_GBL (store cond or hint at global addr)\n"
msgstr "STC_NBH_GBL (збережена умова або вказівка за загальною адреÑою)\n"
-#: vms-alpha.c:6602
+#: vms-alpha.c:6673
#, c-format
msgid "STC_NBH_PS (store cond or hint at psect + offset)\n"
msgstr "STC_NBH_PS (збережена умова або вказівка за psect + зÑув)\n"
-#: vms-alpha.c:6606
+#: vms-alpha.c:6677
#, c-format
msgid "CTL_SETRB (set relocation base)\n"
msgstr "CTL_SETRB (вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¾Ñнови переÑуваннÑ)\n"
-#: vms-alpha.c:6612
+#: vms-alpha.c:6683
#, c-format
msgid "CTL_AUGRB (augment relocation base) %u\n"
msgstr "CTL_AUGRB (Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Ð¾Ñнови переÑуваннÑ) %u\n"
-#: vms-alpha.c:6616
+#: vms-alpha.c:6688
#, c-format
msgid "CTL_DFLOC (define location)\n"
msgstr "CTL_DFLOC (визначити розташуваннÑ)\n"
-#: vms-alpha.c:6619
+#: vms-alpha.c:6691
#, c-format
msgid "CTL_STLOC (set location)\n"
msgstr "CTL_STLOC (вказати розташуваннÑ)\n"
-#: vms-alpha.c:6622
+#: vms-alpha.c:6694
#, c-format
msgid "CTL_STKDL (stack defined location)\n"
msgstr "CTL_STKDL (розташуваннÑ, визначене Ñтеком)\n"
-#: vms-alpha.c:6625 vms-alpha.c:7049 vms-alpha.c:7175
+#: vms-alpha.c:6697 vms-alpha.c:7140 vms-alpha.c:7301
#, c-format
msgid "*unhandled*\n"
msgstr "*не оброблено*\n"
-#: vms-alpha.c:6655 vms-alpha.c:6694
+#: vms-alpha.c:6727 vms-alpha.c:6766
#, c-format
msgid "cannot read GST record length\n"
msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ довжину запиÑу GST\n"
#. Ill-formed.
-#: vms-alpha.c:6676
+#: vms-alpha.c:6748
#, c-format
msgid "cannot find EMH in first GST record\n"
msgstr "не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ EMH у першому запиÑÑ– GST\n"
-#: vms-alpha.c:6702
+#: vms-alpha.c:6774
#, c-format
msgid "cannot read GST record header\n"
msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ заголовок запиÑу GST\n"
-#: vms-alpha.c:6715
+#: vms-alpha.c:6787
#, c-format
msgid " corrupted GST\n"
msgstr " пошкоджений GST\n"
-#: vms-alpha.c:6723
+#: vms-alpha.c:6795
#, c-format
msgid "cannot read GST record\n"
msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ Ð·Ð°Ð¿Ð¸Ñ GST\n"
-#: vms-alpha.c:6752
+#: vms-alpha.c:6824
#, c-format
msgid " unhandled EOBJ record type %u\n"
msgstr " непридатний до обробки тип запиÑу EOBJ, %u\n"
-#: vms-alpha.c:6776
+#: vms-alpha.c:6849
#, c-format
msgid " bitcount: %u, base addr: 0x%08x\n"
msgstr " кількіÑÑ‚ÑŒ бітів: %u, базова адреÑа: 0x%08x\n"
-#: vms-alpha.c:6790
+#: vms-alpha.c:6863
#, c-format
msgid " bitmap: 0x%08x (count: %u):\n"
msgstr " бітовий образ: 0x%08x (лічильник: %u):\n"
-#: vms-alpha.c:6797
+#: vms-alpha.c:6870
#, c-format
msgid " %08x"
msgstr " %08x"
-#: vms-alpha.c:6823
+#: vms-alpha.c:6897
#, c-format
msgid " image %u (%u entries)\n"
msgstr " образ %u (%u запиÑів)\n"
-#: vms-alpha.c:6829
+#: vms-alpha.c:6903
#, c-format
msgid " offset: 0x%08x, val: 0x%08x\n"
msgstr " відÑтуп: 0x%08x, значеннÑ: 0x%08x\n"
-#: vms-alpha.c:6851
+#: vms-alpha.c:6926
#, c-format
msgid " image %u (%u entries), offsets:\n"
msgstr " образ %u (%u запиÑів), відÑтупи:\n"
-#: vms-alpha.c:6858
+#: vms-alpha.c:6933
#, c-format
msgid " 0x%08x"
msgstr " 0x%08x"
#. 64 bits.
-#: vms-alpha.c:6980
+#: vms-alpha.c:7059
#, c-format
msgid "64 bits *unhandled*\n"
msgstr "64 біти *не оброблÑєтьÑÑ*\n"
-#: vms-alpha.c:6985
+#: vms-alpha.c:7064
#, c-format
msgid "class: %u, dtype: %u, length: %u, pointer: 0x%08x\n"
msgstr "клаÑ: %u, dtype: %u, довжина: %u, вказівник: 0x%08x\n"
-#: vms-alpha.c:6996
+#: vms-alpha.c:7075
#, c-format
msgid "non-contiguous array of %s\n"
msgstr "розривний маÑив %s\n"
-#: vms-alpha.c:7001
+#: vms-alpha.c:7082
#, c-format
msgid "dimct: %u, aflags: 0x%02x, digits: %u, scale: %u\n"
msgstr "dimct: %u, aflags: 0x%02x, цифр: %u, шкала: %u\n"
-#: vms-alpha.c:7006
+#: vms-alpha.c:7087
#, c-format
msgid "arsize: %u, a0: 0x%08x\n"
msgstr "arsize: %u, a0: 0x%08x\n"
-#: vms-alpha.c:7010
+#: vms-alpha.c:7091
#, c-format
msgid "Strides:\n"
msgstr "Кроки:\n"
-#: vms-alpha.c:7020
+#: vms-alpha.c:7105
#, c-format
msgid "Bounds:\n"
msgstr "Межі:\n"
-#: vms-alpha.c:7026
+#: vms-alpha.c:7112
#, c-format
msgid "[%u]: Lower: %u, upper: %u\n"
msgstr "[%u]: нижнÑ: %u, верхнÑ: %u\n"
-#: vms-alpha.c:7038
+#: vms-alpha.c:7126
#, c-format
msgid "unaligned bit-string of %s\n"
msgstr "невирівнÑний бітовий Ñ€Ñдок %s\n"
-#: vms-alpha.c:7043
+#: vms-alpha.c:7133
#, c-format
msgid "base: %u, pos: %u\n"
msgstr "оÑнова: %u, позиціÑ: %u\n"
-#: vms-alpha.c:7064
+#: vms-alpha.c:7159
#, c-format
msgid "vflags: 0x%02x, value: 0x%08x "
msgstr "vflags: 0x%02x, значеннÑ: 0x%08x "
-#: vms-alpha.c:7070
+#: vms-alpha.c:7166
#, c-format
msgid "(no value)\n"
msgstr "(нема значеннÑ)\n"
-#: vms-alpha.c:7073
+#: vms-alpha.c:7169
#, c-format
msgid "(not active)\n"
msgstr "(неактивне)\n"
-#: vms-alpha.c:7076
+#: vms-alpha.c:7172
#, c-format
msgid "(not allocated)\n"
msgstr "(не розміщено)\n"
-#: vms-alpha.c:7079
+#: vms-alpha.c:7175
#, c-format
msgid "(descriptor)\n"
msgstr "(деÑкриптор)\n"
-#: vms-alpha.c:7083
+#: vms-alpha.c:7180
#, c-format
msgid "(trailing value)\n"
msgstr "(хвоÑтове значеннÑ)\n"
-#: vms-alpha.c:7086
+#: vms-alpha.c:7183
#, c-format
msgid "(value spec follows)\n"
msgstr "(далі ÑÐ¿ÐµÑ†Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½ÑŒ)\n"
-#: vms-alpha.c:7089
+#: vms-alpha.c:7186
#, c-format
msgid "(at bit offset %u)\n"
msgstr "(за відÑтупом у бітах %u)\n"
-#: vms-alpha.c:7093
+#: vms-alpha.c:7190
#, c-format
msgid "(reg: %u, disp: %u, indir: %u, kind: "
msgstr "(рег: %u, disp: %u, indir: %u, тип: "
-#: vms-alpha.c:7100
+#: vms-alpha.c:7197
msgid "literal"
msgstr "літерал"
-#: vms-alpha.c:7103
+#: vms-alpha.c:7200
msgid "address"
msgstr "адреÑа"
-#: vms-alpha.c:7106
+#: vms-alpha.c:7203
msgid "desc"
msgstr "деÑк"
-#: vms-alpha.c:7109
+#: vms-alpha.c:7206
msgid "reg"
msgstr "рег"
-#: vms-alpha.c:7126
+#: vms-alpha.c:7227
#, c-format
msgid "len: %2u, kind: %2u "
msgstr "довж.: %2u, тип: %2u "
-#: vms-alpha.c:7132
+#: vms-alpha.c:7235
#, c-format
msgid "atomic, type=0x%02x %s\n"
msgstr "атомарний, тип=0x%02x %s\n"
-#: vms-alpha.c:7136
+#: vms-alpha.c:7240
#, c-format
msgid "indirect, defined at 0x%08x\n"
msgstr "опоÑередкований, визначено тут: 0x%08x\n"
-#: vms-alpha.c:7140
+#: vms-alpha.c:7244
#, c-format
msgid "typed pointer\n"
msgstr "типізований вказівник\n"
-#: vms-alpha.c:7144
+#: vms-alpha.c:7248
#, c-format
msgid "pointer\n"
msgstr "вказівник\n"
-#: vms-alpha.c:7152
+#: vms-alpha.c:7259
#, c-format
msgid "array, dim: %u, bitmap: "
msgstr "маÑив, розмірніÑÑ‚ÑŒ: %u, бітова карта: "
-#: vms-alpha.c:7159
+#: vms-alpha.c:7274
#, c-format
msgid "array descriptor:\n"
msgstr "деÑкриптор маÑиву:\n"
-#: vms-alpha.c:7166
+#: vms-alpha.c:7285
#, c-format
msgid "type spec for element:\n"
msgstr "ÑÐ¿ÐµÑ†Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ Ñ‚Ð¸Ð¿Ñƒ елемента:\n"
-#: vms-alpha.c:7168
+#: vms-alpha.c:7287
#, c-format
msgid "type spec for subscript %u:\n"
msgstr "ÑÐ¿ÐµÑ†Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ Ñ‚Ð¸Ð¿Ñƒ Ð´Ð»Ñ ÑпиÑку індекÑів %u:\n"
-#: vms-alpha.c:7186
+#: vms-alpha.c:7312
#, c-format
msgid "Debug symbol table:\n"
msgstr "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ñимволів зневаджуваннÑ:\n"
-#: vms-alpha.c:7197
+#: vms-alpha.c:7323
#, c-format
msgid "cannot read DST header\n"
msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ заголовок DST\n"
-#: vms-alpha.c:7203
+#: vms-alpha.c:7329
#, c-format
msgid " type: %3u, len: %3u (at 0x%08x): "
msgstr " тип: %3u, довжина: %3u (за 0x%08x): "
-#: vms-alpha.c:7217
+#: vms-alpha.c:7346
#, c-format
msgid "cannot read DST symbol\n"
msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ Ñимвол DST\n"
-#: vms-alpha.c:7260
+#: vms-alpha.c:7390
#, c-format
msgid "standard data: %s\n"
msgstr "Ñтандартні дані: %s\n"
-#: vms-alpha.c:7263 vms-alpha.c:7351
+#: vms-alpha.c:7393 vms-alpha.c:7516
#, c-format
msgid " name: %.*s\n"
msgstr " назва: %.*s\n"
-#: vms-alpha.c:7270
+#: vms-alpha.c:7400
#, c-format
msgid "modbeg\n"
msgstr "modbeg\n"
-#: vms-alpha.c:7272
+#: vms-alpha.c:7404
#, c-format
msgid " flags: %d, language: %u, major: %u, minor: %u\n"
msgstr " прапорці: %d, мова: %u, Ñтарший: %u, молодший: %u\n"
-#: vms-alpha.c:7278 vms-alpha.c:7552
+#: vms-alpha.c:7414 vms-alpha.c:7780
#, c-format
msgid " module name: %.*s\n"
msgstr " назва модулÑ: %.*s\n"
-#: vms-alpha.c:7281
+#: vms-alpha.c:7421
#, c-format
msgid " compiler : %.*s\n"
msgstr " компілÑтор : %.*s\n"
-#: vms-alpha.c:7286
+#: vms-alpha.c:7428
#, c-format
msgid "modend\n"
msgstr "modend\n"
-#: vms-alpha.c:7293
+#: vms-alpha.c:7435
msgid "rtnbeg\n"
msgstr "rtnbeg\n"
-#: vms-alpha.c:7295
+#: vms-alpha.c:7439
#, c-format
msgid " flags: %u, address: 0x%08x, pd-address: 0x%08x\n"
msgstr " прапорці: %u, адреÑа: 0x%08x, pd-адреÑа: 0x%08x\n"
-#: vms-alpha.c:7300
+#: vms-alpha.c:7448
#, c-format
msgid " routine name: %.*s\n"
msgstr " назва процедури: %.*s\n"
-#: vms-alpha.c:7308
+#: vms-alpha.c:7459
#, c-format
msgid "rtnend: size 0x%08x\n"
msgstr "rtnend: розмір 0x%08x\n"
-#: vms-alpha.c:7316
+#: vms-alpha.c:7469
#, c-format
msgid "prolog: bkpt address 0x%08x\n"
msgstr "пролог: адреÑа bkpt 0x%08x\n"
-#: vms-alpha.c:7325
+#: vms-alpha.c:7479
#, c-format
msgid "epilog: flags: %u, count: %u\n"
msgstr "епілог: прапорці: %u, лічильник: %u\n"
-#: vms-alpha.c:7335
+#: vms-alpha.c:7494
#, c-format
msgid "blkbeg: address: 0x%08x, name: %.*s\n"
msgstr "blkbeg: адреÑа: 0x%08x, назва: %.*s\n"
-#: vms-alpha.c:7344
+#: vms-alpha.c:7506
#, c-format
msgid "blkend: size: 0x%08x\n"
msgstr "blkend: розмір: 0x%08x\n"
-#: vms-alpha.c:7350
+#: vms-alpha.c:7512
#, c-format
msgid "typspec (len: %u)\n"
msgstr "typspec (довж.: %u)\n"
-#: vms-alpha.c:7357
+#: vms-alpha.c:7528
#, c-format
msgid "septyp, name: %.*s\n"
msgstr "septyp, назва: %.*s\n"
-#: vms-alpha.c:7366
+#: vms-alpha.c:7544
#, c-format
msgid "recbeg: name: %.*s\n"
msgstr "recbeg: назва: %.*s\n"
-#: vms-alpha.c:7368
+#: vms-alpha.c:7548
#, c-format
msgid " len: %u bits\n"
msgstr " довжина: %u бітів\n"
-#: vms-alpha.c:7373
+#: vms-alpha.c:7554
#, c-format
msgid "recend\n"
msgstr "recend\n"
-#: vms-alpha.c:7377
+#: vms-alpha.c:7559
#, c-format
msgid "enumbeg, len: %u, name: %.*s\n"
msgstr "enumbeg, довжина: %u, назва: %.*s\n"
-#: vms-alpha.c:7381
+#: vms-alpha.c:7565
#, c-format
msgid "enumelt, name: %.*s\n"
msgstr "enumelt, назва: %.*s\n"
-#: vms-alpha.c:7385
+#: vms-alpha.c:7571
#, c-format
msgid "enumend\n"
msgstr "enumend\n"
-#: vms-alpha.c:7390
+#: vms-alpha.c:7578
#, c-format
msgid "label, name: %.*s\n"
msgstr "мітка, назва: %.*s\n"
-#: vms-alpha.c:7392
+#: vms-alpha.c:7581
#, c-format
msgid " address: 0x%08x\n"
msgstr " адреÑа: 0x%08x\n"
-#: vms-alpha.c:7402
+#: vms-alpha.c:7593
#, c-format
msgid "discontiguous range (nbr: %u)\n"
msgstr "розривний діапазон (nbr: %u)\n"
-#: vms-alpha.c:7405
+#: vms-alpha.c:7600
#, c-format
msgid " address: 0x%08x, size: %u\n"
msgstr " адреÑа: 0x%08x, розмір: %u\n"
-#: vms-alpha.c:7415
+#: vms-alpha.c:7611
#, c-format
msgid "line num (len: %u)\n"
msgstr "номер Ñ€Ñдка (довжина: %u)\n"
-#: vms-alpha.c:7432
+#: vms-alpha.c:7630
#, c-format
msgid "delta_pc_w %u\n"
msgstr "delta_pc_w %u\n"
-#: vms-alpha.c:7439
+#: vms-alpha.c:7639
#, c-format
msgid "incr_linum(b): +%u\n"
msgstr "incr_linum(b): +%u\n"
-#: vms-alpha.c:7445
+#: vms-alpha.c:7647
#, c-format
msgid "incr_linum_w: +%u\n"
msgstr "incr_linum_w: +%u\n"
-#: vms-alpha.c:7451
+#: vms-alpha.c:7655
#, c-format
msgid "incr_linum_l: +%u\n"
msgstr "incr_linum_l: +%u\n"
-#: vms-alpha.c:7457
+#: vms-alpha.c:7663
#, c-format
msgid "set_line_num(w) %u\n"
msgstr "set_line_num(w) %u\n"
-#: vms-alpha.c:7462
+#: vms-alpha.c:7670
#, c-format
msgid "set_line_num_b %u\n"
msgstr "set_line_num_b %u\n"
-#: vms-alpha.c:7467
+#: vms-alpha.c:7677
#, c-format
msgid "set_line_num_l %u\n"
msgstr "set_line_num_l %u\n"
-#: vms-alpha.c:7472
+#: vms-alpha.c:7684
#, c-format
msgid "set_abs_pc: 0x%08x\n"
msgstr "set_abs_pc: 0x%08x\n"
-#: vms-alpha.c:7476
+#: vms-alpha.c:7690
#, c-format
msgid "delta_pc_l: +0x%08x\n"
msgstr "delta_pc_l: +0x%08x\n"
-#: vms-alpha.c:7481
+#: vms-alpha.c:7697
#, c-format
msgid "term(b): 0x%02x"
msgstr "term(b): 0x%02x"
-#: vms-alpha.c:7483
+#: vms-alpha.c:7699
#, c-format
msgid " pc: 0x%08x\n"
msgstr " pc: 0x%08x\n"
-#: vms-alpha.c:7488
+#: vms-alpha.c:7706
#, c-format
msgid "term_w: 0x%04x"
msgstr "term_w: 0x%04x"
-#: vms-alpha.c:7490
+#: vms-alpha.c:7708
#, c-format
msgid " pc: 0x%08x\n"
msgstr " pc: 0x%08x\n"
-#: vms-alpha.c:7496
+#: vms-alpha.c:7714
#, c-format
msgid "delta pc +%-4d"
msgstr "приріÑÑ‚ pc +%-4d"
-#: vms-alpha.c:7500
+#: vms-alpha.c:7718
#, c-format
msgid " pc: 0x%08x line: %5u\n"
msgstr " pc: 0x%08x Ñ€Ñдок: %5u\n"
-#: vms-alpha.c:7505
+#: vms-alpha.c:7723
#, c-format
msgid " *unhandled* cmd %u\n"
msgstr " *непридатна* команда %u\n"
-#: vms-alpha.c:7520
+#: vms-alpha.c:7738
#, c-format
msgid "source (len: %u)\n"
msgstr "джерело (довжина: %u)\n"
-#: vms-alpha.c:7535
+#: vms-alpha.c:7757
#, c-format
msgid " declfile: len: %u, flags: %u, fileid: %u\n"
msgstr " declfile: довжина: %u, прапорці: %u, ід. файла: %u\n"
-#: vms-alpha.c:7540
+#: vms-alpha.c:7762
#, 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:7549
+#: vms-alpha.c:7774
#, c-format
msgid " filename : %.*s\n"
msgstr " назва файла: %.*s\n"
-#: vms-alpha.c:7558
+#: vms-alpha.c:7790
#, c-format
msgid " setfile %u\n"
msgstr " setfile %u\n"
-#: vms-alpha.c:7563 vms-alpha.c:7568
+#: vms-alpha.c:7797 vms-alpha.c:7804
#, c-format
msgid " setrec %u\n"
msgstr " setrec %u\n"
-#: vms-alpha.c:7573 vms-alpha.c:7578
+#: vms-alpha.c:7811 vms-alpha.c:7818
#, c-format
msgid " setlnum %u\n"
msgstr " setlnum %u\n"
-#: vms-alpha.c:7583 vms-alpha.c:7588
+#: vms-alpha.c:7825 vms-alpha.c:7832
#, c-format
msgid " deflines %u\n"
msgstr " deflines %u\n"
-#: vms-alpha.c:7592
+#: vms-alpha.c:7836
#, c-format
msgid " formfeed\n"
msgstr " formfeed\n"
-#: vms-alpha.c:7596
+#: vms-alpha.c:7840
#, c-format
msgid " *unhandled* cmd %u\n"
msgstr " *непридатна* команда %u\n"
-#: vms-alpha.c:7608
+#: vms-alpha.c:7852
#, c-format
msgid "*unhandled* dst type %u\n"
msgstr "*непридатний* тип призначеннÑ, %u\n"
-#: vms-alpha.c:7640
+#: vms-alpha.c:7884
#, c-format
msgid "cannot read EIHD\n"
msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ EIHD\n"
-#: vms-alpha.c:7644
+#: vms-alpha.c:7888
#, c-format
msgid "EIHD: (size: %u, nbr blocks: %u)\n"
msgstr "EIHD: (розмір: %u, кількіÑÑ‚ÑŒ блоків: %u)\n"
-#: vms-alpha.c:7648
+#: vms-alpha.c:7892
#, c-format
msgid " majorid: %u, minorid: %u\n"
msgstr " majorid: %u, minorid: %u\n"
-#: vms-alpha.c:7656
+#: vms-alpha.c:7900
msgid "executable"
msgstr "виконуваний"
-#: vms-alpha.c:7659
+#: vms-alpha.c:7903
msgid "linkable image"
msgstr "компонований образ"
-#: vms-alpha.c:7666
+#: vms-alpha.c:7910
#, c-format
msgid " image type: %u (%s)"
msgstr " тип образу: %u (%s)"
-#: vms-alpha.c:7672
+#: vms-alpha.c:7916
msgid "native"
msgstr "Ñтандартний"
-#: vms-alpha.c:7675
+#: vms-alpha.c:7919
msgid "CLI"
msgstr "CLI"
-#: vms-alpha.c:7682
+#: vms-alpha.c:7926
#, c-format
msgid ", subtype: %u (%s)\n"
msgstr ", підтип: %u (%s)\n"
-#: vms-alpha.c:7689
+#: vms-alpha.c:7933
#, c-format
msgid " offsets: isd: %u, activ: %u, symdbg: %u, imgid: %u, patch: %u\n"
msgstr " зÑуви: isd: %u, activ: %u, symdbg: %u, imgid: %u, patch: %u\n"
-#: vms-alpha.c:7693
+#: vms-alpha.c:7937
#, c-format
msgid " fixup info rva: "
msgstr " дані щодо прив’Ñзки rva: "
-#: vms-alpha.c:7695
+#: vms-alpha.c:7939
#, c-format
msgid ", symbol vector rva: "
msgstr ", вектор Ñимволів rva: "
-#: vms-alpha.c:7698
+#: vms-alpha.c:7942
#, c-format
msgid ""
"\n"
@@ -7780,460 +7865,460 @@ msgstr ""
"\n"
" відÑтуп маÑиву верÑÑ–Ñ—: %u\n"
-#: vms-alpha.c:7703
+#: vms-alpha.c:7947
#, 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:7709
+#: vms-alpha.c:7953
#, c-format
msgid " linker flags: %08x:"
msgstr " прапорці компонувальника: %08x:"
-#: vms-alpha.c:7740
+#: vms-alpha.c:7984
#, c-format
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"
-#: vms-alpha.c:7746
+#: vms-alpha.c:7990
#, c-format
msgid " BPAGE: %u"
msgstr " BPAGE: %u"
-#: vms-alpha.c:7753
+#: vms-alpha.c:7997
#, c-format
msgid ", ext fixup offset: %u, no_opt psect off: %u"
msgstr ", зÑув розшир. прив’зÑки: %u, зÑув psect no_opt: %u"
-#: vms-alpha.c:7756
+#: vms-alpha.c:8000
#, c-format
msgid ", alias: %u\n"
msgstr ", пÑевдонім: %u\n"
-#: vms-alpha.c:7764
+#: vms-alpha.c:8008
#, c-format
msgid "system version array information:\n"
msgstr "маÑив даних щодо верÑÑ–Ñ— ÑиÑтеми:\n"
-#: vms-alpha.c:7768
+#: vms-alpha.c:8012
#, c-format
msgid "cannot read EIHVN header\n"
msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ заголовок EIHVN\n"
-#: vms-alpha.c:7778
+#: vms-alpha.c:8022
#, c-format
msgid "cannot read EIHVN version\n"
msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ верÑÑ–ÑŽ EIHVN\n"
-#: vms-alpha.c:7781
+#: vms-alpha.c:8025
#, c-format
msgid " %02u "
msgstr " %02u "
-#: vms-alpha.c:7785
+#: vms-alpha.c:8029
msgid "BASE_IMAGE "
msgstr "BASE_IMAGE "
-#: vms-alpha.c:7788
+#: vms-alpha.c:8032
msgid "MEMORY_MANAGEMENT"
msgstr "MEMORY_MANAGEMENT"
-#: vms-alpha.c:7791
+#: vms-alpha.c:8035
msgid "IO "
msgstr "IO "
-#: vms-alpha.c:7794
+#: vms-alpha.c:8038
msgid "FILES_VOLUMES "
msgstr "FILES_VOLUMES "
-#: vms-alpha.c:7797
+#: vms-alpha.c:8041
msgid "PROCESS_SCHED "
msgstr "PROCESS_SCHED "
-#: vms-alpha.c:7800
+#: vms-alpha.c:8044
msgid "SYSGEN "
msgstr "SYSGEN "
-#: vms-alpha.c:7803
+#: vms-alpha.c:8047
msgid "CLUSTERS_LOCKMGR "
msgstr "CLUSTERS_LOCKMGR "
-#: vms-alpha.c:7806
+#: vms-alpha.c:8050
msgid "LOGICAL_NAMES "
msgstr "LOGICAL_NAMES "
-#: vms-alpha.c:7809
+#: vms-alpha.c:8053
msgid "SECURITY "
msgstr "SECURITY "
-#: vms-alpha.c:7812
+#: vms-alpha.c:8056
msgid "IMAGE_ACTIVATOR "
msgstr "IMAGE_ACTIVATOR "
-#: vms-alpha.c:7815
+#: vms-alpha.c:8059
msgid "NETWORKS "
msgstr "NETWORKS "
-#: vms-alpha.c:7818
+#: vms-alpha.c:8062
msgid "COUNTERS "
msgstr "COUNTERS "
-#: vms-alpha.c:7821
+#: vms-alpha.c:8065
msgid "STABLE "
msgstr "STABLE "
-#: vms-alpha.c:7824
+#: vms-alpha.c:8068
msgid "MISC "
msgstr "MISC "
-#: vms-alpha.c:7827
+#: vms-alpha.c:8071
msgid "CPU "
msgstr "CPU "
-#: vms-alpha.c:7830
+#: vms-alpha.c:8074
msgid "VOLATILE "
msgstr "VOLATILE "
-#: vms-alpha.c:7833
+#: vms-alpha.c:8077
msgid "SHELL "
msgstr "SHELL "
-#: vms-alpha.c:7836
+#: vms-alpha.c:8080
msgid "POSIX "
msgstr "POSIX "
-#: vms-alpha.c:7839
+#: vms-alpha.c:8083
msgid "MULTI_PROCESSING "
msgstr "MULTI_PROCESSING "
-#: vms-alpha.c:7842
+#: vms-alpha.c:8086
msgid "GALAXY "
msgstr "GALAXY "
-#: vms-alpha.c:7845
+#: vms-alpha.c:8089
msgid "*unknown* "
msgstr "*невідомо* "
-#: vms-alpha.c:7861 vms-alpha.c:8135
+#: vms-alpha.c:8105 vms-alpha.c:8379
#, c-format
msgid "cannot read EIHA\n"
msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ EIHA\n"
-#: vms-alpha.c:7864
+#: vms-alpha.c:8108
#, c-format
msgid "Image activation: (size=%u)\n"
msgstr "ÐÐºÑ‚Ð¸Ð²Ð°Ñ†Ñ–Ñ Ð¾Ð±Ñ€Ð°Ð·Ñƒ: (розмір=%u)\n"
-#: vms-alpha.c:7867
+#: vms-alpha.c:8111
#, c-format
msgid " First address : 0x%08x 0x%08x\n"
msgstr " Перша адреÑа: 0x%08x 0x%08x\n"
-#: vms-alpha.c:7871
+#: vms-alpha.c:8115
#, c-format
msgid " Second address: 0x%08x 0x%08x\n"
msgstr " Друга адреÑа: 0x%08x 0x%08x\n"
-#: vms-alpha.c:7875
+#: vms-alpha.c:8119
#, c-format
msgid " Third address : 0x%08x 0x%08x\n"
msgstr " Ð¢Ñ€ÐµÑ‚Ñ Ð°Ð´Ñ€ÐµÑа: 0x%08x 0x%08x\n"
-#: vms-alpha.c:7879
+#: vms-alpha.c:8123
#, c-format
msgid " Fourth address: 0x%08x 0x%08x\n"
msgstr " Четверта адреÑа: 0x%08x 0x%08x\n"
-#: vms-alpha.c:7883
+#: vms-alpha.c:8127
#, c-format
msgid " Shared image : 0x%08x 0x%08x\n"
msgstr " Спільний образ: 0x%08x 0x%08x\n"
-#: vms-alpha.c:7894
+#: vms-alpha.c:8138
#, c-format
msgid "cannot read EIHI\n"
msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ EIHI\n"
-#: vms-alpha.c:7898
+#: vms-alpha.c:8142
#, c-format
msgid "Image identification: (major: %u, minor: %u)\n"
msgstr "Ð†Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ Ð¾Ð±Ñ€Ð°Ð·Ñƒ: (Ñтарший: %u, молодший: %u)\n"
-#: vms-alpha.c:7901
+#: vms-alpha.c:8145
#, c-format
msgid " image name : %.*s\n"
msgstr " назва образу : %.*s\n"
-#: vms-alpha.c:7903
+#: vms-alpha.c:8147
#, c-format
msgid " link time : %s\n"
msgstr " Ñ‡Ð°Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ : %s\n"
-#: vms-alpha.c:7905
+#: vms-alpha.c:8149
#, c-format
msgid " image ident : %.*s\n"
msgstr " ід. образу : %.*s\n"
-#: vms-alpha.c:7907
+#: vms-alpha.c:8151
#, c-format
msgid " linker ident : %.*s\n"
msgstr " ід. компонувальника: %.*s\n"
-#: vms-alpha.c:7909
+#: vms-alpha.c:8153
#, c-format
msgid " image build ident: %.*s\n"
msgstr " ідентифікатор Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ Ð¾Ð±Ñ€Ð°Ð·Ñƒ: %.*s\n"
-#: vms-alpha.c:7919
+#: vms-alpha.c:8163
#, c-format
msgid "cannot read EIHS\n"
msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ EIHS\n"
-#: vms-alpha.c:7923
+#: vms-alpha.c:8167
#, c-format
msgid "Image symbol & debug table: (major: %u, minor: %u)\n"
msgstr "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ñимволів Ñ– діагноÑтики образу (оÑновна: %u, модифікаціÑ: %u)\n"
-#: vms-alpha.c:7929
+#: vms-alpha.c:8173
#, c-format
msgid " debug symbol table : vbn: %u, size: %u (0x%x)\n"
msgstr " Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ð´Ñ–Ð°Ð³Ð½Ð¾Ñтичних Ñимволів: vbn: %u, розмір: %u (0x%x)\n"
-#: vms-alpha.c:7934
+#: vms-alpha.c:8178
#, c-format
msgid " global symbol table: vbn: %u, records: %u\n"
msgstr " Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¸Ñ… Ñимволів: vbn: %u, запиÑів: %u\n"
-#: vms-alpha.c:7939
+#: vms-alpha.c:8183
#, c-format
msgid " debug module table : vbn: %u, size: %u\n"
msgstr " Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ð´Ñ–Ð°Ð³Ð½Ð¾Ñтики модулів: vbn: %u, розмір: %u\n"
-#: vms-alpha.c:7952
+#: vms-alpha.c:8196
#, c-format
msgid "cannot read EISD\n"
msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ EISD\n"
-#: vms-alpha.c:7963
+#: vms-alpha.c:8207
#, c-format
msgid "Image section descriptor: (major: %u, minor: %u, size: %u, offset: %u)\n"
msgstr "ДеÑкриптор розділу образу: (оÑновна: %u, модифікаціÑ: %u, розмір: %u, відÑтуп: %u)\n"
-#: vms-alpha.c:7971
+#: vms-alpha.c:8215
#, c-format
msgid " section: base: 0x%08x%08x size: 0x%08x\n"
msgstr " розділ: оÑнова: 0x%08x%08x розмір: 0x%08x\n"
-#: vms-alpha.c:7976
+#: vms-alpha.c:8220
#, c-format
msgid " flags: 0x%04x"
msgstr " прапорці: 0x%04x"
-#: vms-alpha.c:8014
+#: vms-alpha.c:8258
#, c-format
msgid " vbn: %u, pfc: %u, matchctl: %u type: %u ("
msgstr " vbn: %u, pfc: %u, matchctl: %u тип: %u ("
-#: vms-alpha.c:8020
+#: vms-alpha.c:8264
msgid "NORMAL"
msgstr "NORMAL"
-#: vms-alpha.c:8023
+#: vms-alpha.c:8267
msgid "SHRFXD"
msgstr "SHRFXD"
-#: vms-alpha.c:8026
+#: vms-alpha.c:8270
msgid "PRVFXD"
msgstr "PRVFXD"
-#: vms-alpha.c:8029
+#: vms-alpha.c:8273
msgid "SHRPIC"
msgstr "SHRPIC"
-#: vms-alpha.c:8032
+#: vms-alpha.c:8276
msgid "PRVPIC"
msgstr "PRVPIC"
-#: vms-alpha.c:8035
+#: vms-alpha.c:8279
msgid "USRSTACK"
msgstr "USRSTACK"
-#: vms-alpha.c:8041
+#: vms-alpha.c:8285
msgid ")\n"
msgstr ")\n"
-#: vms-alpha.c:8044
+#: vms-alpha.c:8288
#, c-format
msgid " ident: 0x%08x, name: %.*s\n"
msgstr " ідентифікатор: 0x%08x, назва: %.*s\n"
-#: vms-alpha.c:8054
+#: vms-alpha.c:8298
#, c-format
msgid "cannot read DMT\n"
msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ DMT\n"
-#: vms-alpha.c:8058
+#: vms-alpha.c:8302
#, c-format
msgid "Debug module table:\n"
msgstr "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ð´Ñ–Ð°Ð³Ð½Ð¾Ñтичних Ñимволів:\n"
-#: vms-alpha.c:8067
+#: vms-alpha.c:8311
#, c-format
msgid "cannot read DMT header\n"
msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ заголовок DMT\n"
-#: vms-alpha.c:8073
+#: vms-alpha.c:8317
#, c-format
msgid " module offset: 0x%08x, size: 0x%08x, (%u psects)\n"
msgstr " відÑтуп модулÑ: 0x%08x, розмір: 0x%08x, (%u psect)\n"
-#: vms-alpha.c:8083
+#: vms-alpha.c:8327
#, c-format
msgid "cannot read DMT psect\n"
msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ psect DMT\n"
-#: vms-alpha.c:8087
+#: vms-alpha.c:8331
#, c-format
msgid " psect start: 0x%08x, length: %u\n"
msgstr " початок psect: 0x%08x, довжина: %u\n"
-#: vms-alpha.c:8100
+#: vms-alpha.c:8344
#, c-format
msgid "cannot read DST\n"
msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ DST\n"
-#: vms-alpha.c:8110
+#: vms-alpha.c:8354
#, c-format
msgid "cannot read GST\n"
msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ GST\n"
-#: vms-alpha.c:8114
+#: vms-alpha.c:8358
#, c-format
msgid "Global symbol table:\n"
msgstr "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¸Ñ… Ñимволів:\n"
-#: vms-alpha.c:8141
+#: vms-alpha.c:8385
#, c-format
msgid "Image activator fixup: (major: %u, minor: %u)\n"
msgstr "Прив’Ñзка адреÑи активатора образу: (оÑновна: %u, модифікаціÑ: %u)\n"
-#: vms-alpha.c:8145
+#: vms-alpha.c:8389
#, c-format
msgid " iaflink : 0x%08x %08x\n"
msgstr " iaflink : 0x%08x %08x\n"
-#: vms-alpha.c:8149
+#: vms-alpha.c:8393
#, c-format
msgid " fixuplnk: 0x%08x %08x\n"
msgstr " fixuplnk: 0x%08x %08x\n"
-#: vms-alpha.c:8152
+#: vms-alpha.c:8396
#, c-format
msgid " size : %u\n"
msgstr " розмір: %u\n"
-#: vms-alpha.c:8154
+#: vms-alpha.c:8398
#, c-format
msgid " flags: 0x%08x\n"
msgstr " прапорці: 0x%08x\n"
-#: vms-alpha.c:8159
+#: vms-alpha.c:8403
#, c-format
msgid " qrelfixoff: %5u, lrelfixoff: %5u\n"
msgstr " qrelfixoff: %5u, lrelfixoff: %5u\n"
-#: vms-alpha.c:8164
+#: vms-alpha.c:8408
#, c-format
msgid " qdotadroff: %5u, ldotadroff: %5u\n"
msgstr " qdotadroff: %5u, ldotadroff: %5u\n"
-#: vms-alpha.c:8169
+#: vms-alpha.c:8413
#, c-format
msgid " codeadroff: %5u, lpfixoff : %5u\n"
msgstr " codeadroff: %5u, lpfixoff : %5u\n"
-#: vms-alpha.c:8172
+#: vms-alpha.c:8416
#, c-format
msgid " chgprtoff : %5u\n"
msgstr " chgprtoff : %5u\n"
-#: vms-alpha.c:8176
+#: vms-alpha.c:8420
#, c-format
msgid " shlstoff : %5u, shrimgcnt : %5u\n"
msgstr " shlstoff : %5u, shrimgcnt : %5u\n"
-#: vms-alpha.c:8179
+#: vms-alpha.c:8423
#, c-format
msgid " shlextra : %5u, permctx : %5u\n"
msgstr " shlextra : %5u, permctx : %5u\n"
-#: vms-alpha.c:8182
+#: vms-alpha.c:8426
#, c-format
msgid " base_va : 0x%08x\n"
msgstr " base_va : 0x%08x\n"
-#: vms-alpha.c:8184
+#: vms-alpha.c:8428
#, c-format
msgid " lppsbfixoff: %5u\n"
msgstr " lppsbfixoff: %5u\n"
-#: vms-alpha.c:8192
+#: vms-alpha.c:8435
#, c-format
msgid " Shareable images:\n"
msgstr " Образи Ñпільного викориÑтаннÑ:\n"
-#: vms-alpha.c:8197
+#: vms-alpha.c:8443
#, c-format
msgid " %u: size: %u, flags: 0x%02x, name: %.*s\n"
msgstr " %u: розмір: %u, прапорці: 0x%02x, назва: %.*s\n"
-#: vms-alpha.c:8204
+#: vms-alpha.c:8450
#, c-format
msgid " quad-word relocation fixups:\n"
msgstr " прив’Ñзки переÑувань у чотири Ñлова:\n"
-#: vms-alpha.c:8209
+#: vms-alpha.c:8456
#, c-format
msgid " long-word relocation fixups:\n"
msgstr " прив’Ñзки переÑувань у довге Ñлово:\n"
-#: vms-alpha.c:8214
+#: vms-alpha.c:8462
#, c-format
msgid " quad-word .address reference fixups:\n"
msgstr " прив’Ñзки поÑилань .address у чотири Ñлова:\n"
-#: vms-alpha.c:8219
+#: vms-alpha.c:8467
#, c-format
msgid " long-word .address reference fixups:\n"
msgstr " прив’Ñзки поÑилань .address у довге Ñлово:\n"
-#: vms-alpha.c:8224
+#: vms-alpha.c:8472
#, c-format
msgid " Code Address Reference Fixups:\n"
msgstr " Прив’Ñзки Ð°Ð´Ñ€ÐµÑ ÐºÐ¾Ð´Ñƒ:\n"
-#: vms-alpha.c:8229
+#: vms-alpha.c:8477
#, c-format
msgid " Linkage Pairs Reference Fixups:\n"
msgstr " Прив’Ñзки поÑилань на пари компонуваннÑ:\n"
-#: vms-alpha.c:8238
+#: vms-alpha.c:8485
#, c-format
msgid " Change Protection (%u entries):\n"
msgstr " Зміна захиÑту (%u запиÑи):\n"
-#: vms-alpha.c:8244
+#: vms-alpha.c:8494
#, 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:9121
+#: vms-alpha.c:9371
msgid "%P: relocatable link is not supported\n"
msgstr "%P: підтримки ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ð· можливіÑÑ‚ÑŽ переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ðµ передбачено\n"
-#: vms-alpha.c:9192
+#: vms-alpha.c:9442
#, c-format
msgid "%P: multiple entry points: in modules %pB and %pB\n"
msgstr "%P: декілька точок входженнÑ: у модулÑÑ… %pB Ñ– %pB\n"
@@ -8251,92 +8336,102 @@ msgstr "_bfd_vms_output_counted викликано Ð´Ð»Ñ Ð½ÑƒÐ»ÑŒÐ¾Ð²Ð¾Ñ— кіÐ
msgid "_bfd_vms_output_counted called with too many bytes"
msgstr "_bfd_vms_output_counted викликано Ð´Ð»Ñ Ð·Ð°Ð½Ð°Ð´Ñ‚Ð¾ великої кількоÑÑ‚Ñ– байтів"
-#: xcofflink.c:835
+#: xcofflink.c:834
#, c-format
msgid "%pB: XCOFF shared object when not producing XCOFF output"
msgstr "%pB: Ñпільний об’єкт XCOFF, хоча дані XCOFF не ÑтворюютьÑÑ"
-#: xcofflink.c:856
+#: xcofflink.c:855
#, c-format
msgid "%pB: dynamic object with no .loader section"
msgstr "%pB: динамічний об’єкт без розділу .loader"
-#: xcofflink.c:1420
+#: xcofflink.c:1440
#, c-format
msgid "%pB: `%s' has line numbers but no enclosing section"
msgstr "%pB: «%s» міÑтить номери Ñ€Ñдків, але не міÑтить завершального розділу"
-#: xcofflink.c:1473
+#: xcofflink.c:1496
#, c-format
msgid "%pB: class %d symbol `%s' has no aux entries"
msgstr "%pB: ÐºÐ»Ð°Ñ %d, Ñимвол «%s» не має допоміжних запиÑів"
-#: xcofflink.c:1496
+#: xcofflink.c:1519
#, c-format
msgid "%pB: symbol `%s' has unrecognized csect type %d"
msgstr "%pB: Ñимвол «%s» належить до нерозпізнаного типу csect %d"
-#: xcofflink.c:1509
+#: xcofflink.c:1532
#, c-format
msgid "%pB: bad XTY_ER symbol `%s': class %d scnum %d scnlen %<PRId64>"
msgstr "%pB: помилковий Ñимвол XTY_ER «%s»: ÐºÐ»Ð°Ñ %d, номер розділу %d, довжина розділу %<PRId64>"
-#: xcofflink.c:1540
+#: xcofflink.c:1563
#, c-format
msgid "%pB: XMC_TC0 symbol `%s' is class %d scnlen %<PRId64>"
msgstr "%pB: Ñимвол XMC_TC0 «%s» Ñ” клаÑом %d, довжина розділу %<PRId64>"
-#: xcofflink.c:1687
+#: xcofflink.c:1698
+#, c-format
+msgid "%pB: TOC entry `%s' has a R_TLSMLrelocation not targeting itself"
+msgstr "%pB: Ð·Ð°Ð¿Ð¸Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– зміÑту «%s» міÑтить переÑÑƒÐ²Ð°Ð½Ð½Ñ R_TLSML, Ñкий не вказує на Ñебе"
+
+#: xcofflink.c:1732
#, c-format
msgid "%pB: csect `%s' not in enclosing section"
msgstr "%pB: csect «%s» не у завершальному розділі"
-#: xcofflink.c:1795
+#: xcofflink.c:1841
#, c-format
msgid "%pB: misplaced XTY_LD `%s'"
msgstr "%pB: помилкове Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ XTY_LD «%s»"
-#: xcofflink.c:2122
+#: xcofflink.c:2184
#, c-format
msgid "%pB: reloc %s:%<PRId64> not in csect"
msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ %s:%<PRId64> не у csect"
-#: xcofflink.c:3223
+#: xcofflink.c:3287
+#, c-format
+msgid "%pB: cannot export internal symbol `%s`."
+msgstr "%pB: не можна екÑпортувати внутрішній Ñимвол «%s»."
+
+#: xcofflink.c:3335
#, c-format
msgid "%s: no such symbol"
msgstr "%s: немає такого Ñимволу"
-#: xcofflink.c:3334
+#: xcofflink.c:3444
#, c-format
msgid "warning: attempt to export undefined symbol `%s'"
msgstr "попередженнÑ: Ñпроба екÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð³Ð¾ Ñимволу «%s»"
-#: xcofflink.c:3713
+#: xcofflink.c:3823
msgid "error: undefined symbol __rtinit"
msgstr "помилка: невизначений Ñимвол __rtinit"
-#: xcofflink.c:4095
+#: xcofflink.c:4206
#, c-format
msgid "%pB: loader reloc in unrecognized section `%s'"
msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÑƒÐ²Ð°Ñ‡Ð° у нерозпізнаному розділі «%s»"
-#: xcofflink.c:4107
+#: xcofflink.c:4218
#, c-format
msgid "%pB: `%s' in loader reloc but not loader sym"
msgstr "%pB: «%s» у переÑуванні завантажувача, але не у Ñимволах завантаженнÑ"
-#: xcofflink.c:4124
+#: xcofflink.c:4235
#, c-format
msgid "%pB: loader reloc in read-only section %pA"
msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÑƒÐ²Ð°Ñ‡Ð° у розділі, призначеному лише Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ, %pA"
-#: xcofflink.c:5152
+#: xcofflink.c:5270
#, c-format
msgid "TOC overflow: %#<PRIx64> > 0x10000; try -mminimal-toc when compiling"
msgstr "ÐŸÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ TOC: %#<PRIx64> > 0x10000; Ñпробуйте параметр -mminimal-toc під Ñ‡Ð°Ñ Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ"
#. Not fatal, this callback cannot fail.
-#: elfnn-aarch64.c:2869
+#: elfnn-aarch64.c:2869 elfnn-riscv.c:5264
#, c-format
msgid "unknown attribute for symbol `%s': 0x%02x"
msgstr "невідомий атрибути Ñимволу «%s»: 0x%02x"
@@ -8351,271 +8446,286 @@ msgstr "%pB: помилка: замінник Ð´Ð»Ñ Ð¾Ð±Ñ€Ð¾Ð±Ð½Ð¸ÐºÐ° поми
msgid "%pB: error: erratum 843419 stub out of range (input file too large)"
msgstr "%pB: помилка: замінник Ð´Ð»Ñ Ð¾Ð±Ñ€Ð¾Ð±Ð½Ð¸ÐºÐ° помилки 843419 перебуває поза доÑтупним діапазоном (файл вхідних даних Ñ” надто великим)"
-#: elfnn-aarch64.c:5350
-msgid "%pB: error: erratum 843419 immediate 0x%"
-msgstr "%pB: помилка: проміжна адреÑа Ð´Ð»Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸ 843419 0x%"
+#: elfnn-aarch64.c:5353
+#, c-format
+msgid "%pB: error: erratum 843419 immediate 0x%s out of range for ADR (input file too large) and --fix-cortex-a53-843419=adr used. Run the linker with --fix-cortex-a53-843419=full instead"
+msgstr "%pB: помилка: помилковий регіÑÑ‚Ñ€ негайного доÑтупу зі звіту 843419 поза межами 0x%s Ð´Ð»Ñ ADR (вхідний файл Ñ” надто великим) Ñ– викориÑтано --fix-cortex-a53-843419=adr. Варто запуÑтити компонувальник із параметром --fix-cortex-a53-843419=full"
-#: elfnn-aarch64.c:5884
+#: elfnn-aarch64.c:5887
#, c-format
msgid "%pB: relocation %s against symbol `%s' which may bind externally can not be used when making a shared object; recompile with -fPIC"
msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ %s щодо Ñимволу «%s», Ñкий може прив’ÑзуватиÑÑ Ð·Ð·Ð¾Ð²Ð½Ñ–, не можна викориÑтовувати під Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñпільного викориÑтаннÑ; повторно зберіть з -fPIC"
-#: elfnn-aarch64.c:5904
+#: elfnn-aarch64.c:5907
#, c-format
msgid "%pB: conditional branch to undefined symbol `%s' not allowed"
msgstr "%pB: не можна викориÑтовувати умовну гілку до невизначеного Ñимволу «%s»"
-#: elfnn-aarch64.c:5992
+#: elfnn-aarch64.c:5995
#, c-format
msgid "%pB: local symbol descriptor table be NULL when applying relocation %s against local symbol"
msgstr "%pB: локальна Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ð´ÐµÑкрипторів Ñимволів Ñ” NULL під Ñ‡Ð°Ñ Ð·Ð°ÑтоÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¿ÐµÑ€ÐµÑÑƒÐ²Ð°Ð½Ð½Ñ %s щодо локального Ñимволу"
-#: elfnn-aarch64.c:6105 elfnn-aarch64.c:6142
+#: elfnn-aarch64.c:6108 elfnn-aarch64.c:6145
#, c-format
msgid "%pB: TLS relocation %s against undefined symbol `%s'"
msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ TLS %s щодо невизначеного Ñлабкого Ñимволу «%s»"
-#: elfnn-aarch64.c:7127
+#: elfnn-aarch64.c:7130
msgid "too many GOT entries for -fpic, please recompile with -fPIC"
msgstr "забагато запиÑів GOT Ð´Ð»Ñ -fpic. Будь лаÑка, зберіть повторно з -fPIC"
-#: elfnn-aarch64.c:7155
+#: elfnn-aarch64.c:7158
msgid "one possible cause of this error is that the symbol is being referenced in the indicated code as if it had a larger alignment than was declared where it was defined"
msgstr "однією із можливих причин цієї помилки Ñ” те, що поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° Ñимвол у коді виконуєтьÑÑ Ñ‚Ð°Ðº, наче Ñимвол має більше вирівнюваннÑ, ніж було оголошено там, де його було визначено"
-#: elfnn-aarch64.c:7722
+#: elfnn-aarch64.c:7725
#, c-format
msgid "%pB: relocation %s against `%s' can not be used when making a shared object"
msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ %s щодо «%s», не можна викориÑтовувати під Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñпільного викориÑтаннÑ"
-#: elfnn-riscv.c:223 elfnn-riscv.c:258
+#: elfnn-loongarch.c:151 elfnn-loongarch.c:203
+#, c-format
+msgid "%#<PRIx64> invaild imm"
+msgstr "%#<PRIx64> некоректний imm"
+
+#: elfnn-loongarch.c:386 elfnn-riscv.c:3846
+#, c-format
+msgid ""
+"%pB: ABI is incompatible with that of the selected emulation:\n"
+" target emulation `%s' does not match `%s'"
+msgstr ""
+"%pB: ABI Ñ” неÑуміÑним із вибраною емулÑцією:\n"
+" ціль емулÑції, «%s», не відповідає «%s»"
+
+#: elfnn-loongarch.c:406
+#, c-format
+msgid "%pB: can't link different ABI object."
+msgstr "%pB: не можна компонувати об'єкт іншого ABI."
+
+#: elfnn-loongarch.c:547
+msgid "Internal error: unreachable."
+msgstr "Ð’Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: недоÑтупніÑÑ‚ÑŒ."
+
+#: elfnn-riscv.c:224 elfnn-riscv.c:259
#, c-format
msgid "%pB: warning: RVE PLT generation not supported"
msgstr "%pB: попередженнÑ: підтримки ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ PLT RVE не передбачено"
-#: elfnn-riscv.c:1911
+#: elfnn-riscv.c:1927
#, c-format
msgid "%pcrel_lo missing matching %pcrel_hi"
msgstr "У %pcrel_lo немає відповідного %pcrel_hi"
-#: elfnn-riscv.c:1914
+#: elfnn-riscv.c:1930
#, c-format
msgid "%pcrel_lo with addend isn't allowed for R_RISCV_GOT_HI20"
msgstr "%pcrel_lo із доданком не можна викориÑтовувати Ð´Ð»Ñ R_RISCV_GOT_HI20"
-#: elfnn-riscv.c:1920
+#: elfnn-riscv.c:1936
#, c-format
msgid "%%pcrel_lo overflow with an addend, the value of %%pcrel_hi is 0x%<PRIx64> without any addend, but may be 0x%<PRIx64> after adding the %%pcrel_lo addend"
msgstr "Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ %%pcrel_lo разом із доданком, Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ %%pcrel_hi дорівнює 0x%<PRIx64> без доданка, але може бути рівним 0x%<PRIx64> піÑÐ»Ñ Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ %%pcrel_lo"
-#: elfnn-riscv.c:1927
+#: elfnn-riscv.c:1943
#, c-format
msgid "%pcrel_lo overflow with an addend"
msgstr "Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ %pcrel_lo разом із доданком"
-#: elfnn-riscv.c:2409
+#: elfnn-riscv.c:2425
msgid "The addend isn't allowed for R_RISCV_GOT_HI20"
msgstr "Ðе можна викориÑтовувати доданки Ð´Ð»Ñ R_RISCV_GOT_HI20"
-#: elfnn-riscv.c:2553
+#: elfnn-riscv.c:2569
#, c-format
msgid "%pcrel_lo section symbol with an addend"
msgstr "Ñимвол розділу %pcrel_lo із доданком"
-#: elfnn-riscv.c:2776
+#: elfnn-riscv.c:2792
#, c-format
msgid "%%X%%P: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC\n"
msgstr "%%X%%P: переÑÑƒÐ²Ð°Ð½Ð½Ñ %s щодо «%s» не можна викориÑтовувати під Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñпільного викориÑтаннÑ; повторно зберіть з -fPIC\n"
-#: elfnn-riscv.c:2786
+#: elfnn-riscv.c:2802
#, c-format
msgid "%%X%%P: unresolvable %s relocation against symbol `%s'\n"
msgstr "%%X%%P: нерозв’Ñзне переÑÑƒÐ²Ð°Ð½Ð½Ñ %s щодо Ñимволу «%s»\n"
-#: elfnn-riscv.c:2826
+#: elfnn-riscv.c:2842
msgid "%X%P: internal error: out of range error\n"
msgstr "%X%P: Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: вихід за межі діапазону\n"
-#: elfnn-riscv.c:2831
+#: elfnn-riscv.c:2847
msgid "%X%P: internal error: unsupported relocation error\n"
msgstr "%X%P: Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: непідтримувана помилка переÑуваннÑ\n"
-#: elfnn-riscv.c:2837
+#: elfnn-riscv.c:2853
msgid "dangerous relocation error"
msgstr "небезпечна помилка переÑуваннÑ"
-#: elfnn-riscv.c:2843
+#: elfnn-riscv.c:2859
msgid "%X%P: internal error: unknown error\n"
msgstr "%X%P: Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: невідома помилка\n"
-#: elfnn-riscv.c:3384
+#: elfnn-riscv.c:3400
#, c-format
msgid "warning: %pB: mis-matched ISA version %d.%d for '%s' extension, the output version is %d.%d"
msgstr "попередженнÑ: %pB: невідповідна верÑÑ–Ñ ISA %d.%d Ð´Ð»Ñ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Â«%s», верÑÑ–Ñ Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð°Ñ‚Ñƒ — %d.%d"
-#: elfnn-riscv.c:3417
+#: elfnn-riscv.c:3433
#, c-format
msgid "error: %pB: corrupted ISA string '%s'. First letter should be 'i' or 'e' but got '%s'"
msgstr "помилка: %pB: пошкоджений Ñ€Ñдок ISA «%s». Першою літерою має бути «i» або «e», а маємо «%s»"
-#: elfnn-riscv.c:3460
+#: elfnn-riscv.c:3476
#, c-format
msgid "error: %pB: mis-matched ISA string to merge '%s' and '%s'"
msgstr "помилка: %pB: розбіжніÑÑ‚ÑŒ у Ñ€Ñдках ISA заважає об'єднанню «%s» з «%s»"
-#: elfnn-riscv.c:3617
+#: elfnn-riscv.c:3618
#, c-format
msgid "error: %pB: ISA string of input (%s) doesn't match output (%s)"
msgstr "помилка: %pB: Ñ€Ñдок ISA вхідних даних (%s) не збігаєтьÑÑ Ñ–Ð· Ñ€Ñдком вихідних даних (%s)"
-#: elfnn-riscv.c:3637
+#: elfnn-riscv.c:3638
#, c-format
msgid "error: %pB: XLEN of input (%u) doesn't match output (%u)"
msgstr "помилка: %pB: XLEN вхідних даних (%u) не збігаєтьÑÑ Ð·Ñ– значеннÑм Ð´Ð»Ñ Ð²Ð¸Ñ…Ñ–Ð´Ð½Ð¸Ñ… даних (%u)"
-#: elfnn-riscv.c:3645
+#: elfnn-riscv.c:3646
#, c-format
msgid "error: %pB: unsupported XLEN (%u), you might be using wrong emulation"
msgstr "помилка: %pB: непідтримуване Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ XLEN (%u). Ймовірно, ви викориÑтовуєте помилкову емулÑцію"
-#: elfnn-riscv.c:3759
+#: elfnn-riscv.c:3760
#, c-format
msgid "warning: %pB use privileged spec version %u.%u.%u but the output use version %u.%u.%u"
msgstr "попередженнÑ: %pB викориÑтовує привілейовану верÑÑ–ÑŽ Ñпецифікації прав доÑтупу %u.%u.%u, але у виведених даних викориÑтовуєтьÑÑ Ð²ÐµÑ€ÑÑ–Ñ %u.%u.%u"
-#: elfnn-riscv.c:3776
+#: elfnn-riscv.c:3777
msgid "warning: privileged spec version 1.9.1 can not be linked with other spec versions"
msgstr "попередженнÑ: привілейовану верÑÑ–ÑŽ Ñпецифікації прав доÑтупу 1.9.1 не можна компонувати із іншими верÑÑ–Ñми Ñпецифікацій"
-#: elfnn-riscv.c:3804
+#: elfnn-riscv.c:3805
#, c-format
msgid "error: %pB use %u-byte stack aligned but the output use %u-byte stack aligned"
msgstr "помилка: у %pB викориÑтано %u-байтову із вирівнюваннÑм Ñтека, а у виведенні викориÑтано %u-байтову із вирівнюваннÑм Ñтека"
-#: elfnn-riscv.c:3845
-#, c-format
-msgid ""
-"%pB: ABI is incompatible with that of the selected emulation:\n"
-" target emulation `%s' does not match `%s'"
-msgstr ""
-"%pB: ABI Ñ” неÑуміÑним із вибраною емулÑцією:\n"
-" ціль емулÑції, «%s», не відповідає «%s»"
-
-#: elfnn-riscv.c:3901
+#: elfnn-riscv.c:3902
#, c-format
msgid "%pB: can't link %s modules with %s modules"
msgstr "%pB: неможливо компонувати модулі %s з модулÑми %s"
-#: elfnn-riscv.c:3911
+#: elfnn-riscv.c:3912
#, c-format
msgid "%pB: can't link RVE with other target"
msgstr "%pB: не можна компонувати RVE із іншою ціллю"
-#: elfnn-riscv.c:4448
+#: elfnn-riscv.c:4493
#, c-format
msgid "%pB(%pA+%#<PRIx64>): %<PRId64> bytes required for alignment to %<PRId64>-byte boundary, but only %<PRId64> present"
msgstr "%pB(%pA+%#<PRIx64>): потрібні %<PRId64> байтів Ð´Ð»Ñ Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ Ð½Ð° %<PRId64>-байтову межу, втім, маємо лише %<PRId64>"
-#: peXXigen.c:154
+#: peXXigen.c:157
#, c-format
msgid "%pB: unable to find name for empty section"
msgstr "%pB: не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ назву порожнього розділу"
-#: peXXigen.c:181
+#: peXXigen.c:184
#, c-format
msgid "%pB: out of memory creating name for empty section"
msgstr "%pB: вихід за межі облаÑÑ‚Ñ– пам’ÑÑ‚Ñ– під Ñ‡Ð°Ñ Ñпроби Ñтворити назву Ð´Ð»Ñ Ð¿Ð¾Ñ€Ð¾Ð¶Ð½ÑŒÐ¾Ð³Ð¾ розділу"
-#: peXXigen.c:191
+#: peXXigen.c:194
#, c-format
msgid "%pB: unable to create fake empty section"
msgstr "%pB: не вдалоÑÑ Ñтворити фіктивний порожній розділ"
-#: peXXigen.c:523
+#: peXXigen.c:526
#, c-format
msgid "%pB: aout header specifies an invalid number of data-directory entries: %u"
msgstr "%pB: заголовок aout вказує некоректну кількіÑÑ‚ÑŒ запиÑів каталогу даних: %u"
-#: peXXigen.c:934
+#: peXXigen.c:937
#, c-format
msgid "%pB:%.8s: section below image base"
msgstr "%pB:%.8s: розділ під оÑновою образу"
-#: peXXigen.c:937
+#: peXXigen.c:940
#, c-format
msgid "%pB:%.8s: RVA truncated"
msgstr "%pB:%.8s: RVA обрізано"
-#: peXXigen.c:1065
+#: peXXigen.c:1068
#, c-format
msgid "%pB: line number overflow: 0x%lx > 0xffff"
msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð½Ð¾Ð¼ÐµÑ€Ñ–Ð² Ñ€Ñдків; 0x%lx > 0xffff"
-#: peXXigen.c:1218
+#: peXXigen.c:1221
msgid "Export Directory [.edata (or where ever we found it)]"
msgstr "Каталог екÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ [.edata (або інше міÑце, де його знайдено)]"
-#: peXXigen.c:1219
+#: peXXigen.c:1222
msgid "Import Directory [parts of .idata]"
msgstr "Каталог Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ [чаÑтини .idata]"
-#: peXXigen.c:1220
+#: peXXigen.c:1223
msgid "Resource Directory [.rsrc]"
msgstr "Каталог реÑурÑів [.rsrc]"
-#: peXXigen.c:1221
+#: peXXigen.c:1224
msgid "Exception Directory [.pdata]"
msgstr "Каталог виключень [.pdata]"
-#: peXXigen.c:1222
+#: peXXigen.c:1225
msgid "Security Directory"
msgstr "Каталог захиÑту"
-#: peXXigen.c:1223
+#: peXXigen.c:1226
msgid "Base Relocation Directory [.reloc]"
msgstr "Каталог базового переÑÑƒÐ²Ð°Ð½Ð½Ñ [.reloc]"
-#: peXXigen.c:1224
+#: peXXigen.c:1227
msgid "Debug Directory"
msgstr "Каталог діагноÑтики"
-#: peXXigen.c:1225
+#: peXXigen.c:1228
msgid "Description Directory"
msgstr "Каталог опиÑів"
-#: peXXigen.c:1226
+#: peXXigen.c:1229
msgid "Special Directory"
msgstr "ОÑобливий каталог"
-#: peXXigen.c:1227
+#: peXXigen.c:1230
msgid "Thread Storage Directory [.tls]"
msgstr "Каталог Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ Ð¿Ð¾Ñ‚Ð¾ÐºÑ–Ð² [.tls]"
-#: peXXigen.c:1228
+#: peXXigen.c:1231
msgid "Load Configuration Directory"
msgstr "Каталог Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½ÑŒ"
-#: peXXigen.c:1229
+#: peXXigen.c:1232
msgid "Bound Import Directory"
msgstr "Каталог вимушеного імпортуваннÑ"
-#: peXXigen.c:1230
+#: peXXigen.c:1233
msgid "Import Address Table Directory"
msgstr "Каталог Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– адреÑ"
-#: peXXigen.c:1231
+#: peXXigen.c:1234
msgid "Delay Import Directory"
msgstr "Каталог відкладеного імпортуваннÑ"
-#: peXXigen.c:1232
+#: peXXigen.c:1235
msgid "CLR Runtime Header"
msgstr "Динамічний заголовок CLR"
-#: peXXigen.c:1233
+#: peXXigen.c:1236
msgid "Reserved"
msgstr "Зарезервовано"
-#: peXXigen.c:1280
+#: peXXigen.c:1283
#, c-format
msgid ""
"\n"
@@ -8624,7 +8734,7 @@ msgstr ""
"\n"
"ІÑнує Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ, але розділу, що Ñ—Ñ— міÑтить не знайдено\n"
-#: peXXigen.c:1286
+#: peXXigen.c:1289
#, c-format
msgid ""
"\n"
@@ -8633,7 +8743,7 @@ msgstr ""
"\n"
"У %s Ñ” Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ, але у цьому розділі немає даних\n"
-#: peXXigen.c:1293
+#: peXXigen.c:1296
#, c-format
msgid ""
"\n"
@@ -8642,7 +8752,7 @@ msgstr ""
"\n"
"У %s зберігаєтьÑÑ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ 0x%lx\n"
-#: peXXigen.c:1299
+#: peXXigen.c:1302
#, c-format
msgid ""
"\n"
@@ -8651,7 +8761,7 @@ msgstr ""
"\n"
"Таблиці Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ (оброблений вміÑÑ‚ розділу %s)\n"
-#: peXXigen.c:1302
+#: peXXigen.c:1305
#, c-format
msgid ""
" vma: Hint Time Forward DLL First\n"
@@ -8660,7 +8770,7 @@ msgstr ""
" vma: Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ð§Ð°Ñова Ланцюжок Ðазва Перший\n"
" вказ. Позначка ÑпрÑм. DLL шлюз\n"
-#: peXXigen.c:1351
+#: peXXigen.c:1354
#, c-format
msgid ""
"\n"
@@ -8669,12 +8779,12 @@ msgstr ""
"\n"
"\tÐазва DLL: %.*s\n"
-#: peXXigen.c:1367
+#: peXXigen.c:1370
#, c-format
msgid "\tvma: Hint/Ord Member-Name Bound-To\n"
msgstr "\tvma: Вказ/Пор Ðазва-елемента Прив’Ñзано-до\n"
-#: peXXigen.c:1392
+#: peXXigen.c:1395
#, c-format
msgid ""
"\n"
@@ -8683,12 +8793,12 @@ msgstr ""
"\n"
"ІÑнує Ð·Ð°Ð¿Ð¸Ñ Ð¿ÐµÑ€ÑˆÐ¾Ð³Ð¾ переходу, але розділу, що його міÑтить не знайдено\n"
-#: peXXigen.c:1436 peXXigen.c:1475
+#: peXXigen.c:1439 peXXigen.c:1478
#, c-format
msgid "\t<corrupt: 0x%04lx>"
msgstr "\t<пошкоджено: 0x%04lx>"
-#: peXXigen.c:1568
+#: peXXigen.c:1571
#, c-format
msgid ""
"\n"
@@ -8697,7 +8807,7 @@ msgstr ""
"\n"
"ІÑнує Ð·Ð°Ð¿Ð¸Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– екÑпортуваннÑ, але розділу, що Ñ—Ñ— міÑтить не знайдено\n"
-#: peXXigen.c:1574
+#: peXXigen.c:1577
#, c-format
msgid ""
"\n"
@@ -8706,7 +8816,7 @@ msgstr ""
"\n"
"У %s Ñ” Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ ÐµÐºÑпортуваннÑ, але у цьому розділі немає даних\n"
-#: peXXigen.c:1585
+#: peXXigen.c:1588
#, c-format
msgid ""
"\n"
@@ -8715,7 +8825,7 @@ msgstr ""
"\n"
"У %s зберігаєтьÑÑ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ ÐµÐºÑпортуваннÑ, але Ñ—Ñ— не можна вміÑтити у цьому розділі\n"
-#: peXXigen.c:1596
+#: peXXigen.c:1599
#, c-format
msgid ""
"\n"
@@ -8724,7 +8834,7 @@ msgstr ""
"\n"
"У %s зберігаєтьÑÑ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ ÐµÐºÑпортуваннÑ, але вона Ñ” надто малою (%d)\n"
-#: peXXigen.c:1602
+#: peXXigen.c:1605
#, c-format
msgid ""
"\n"
@@ -8733,7 +8843,7 @@ msgstr ""
"\n"
"У %s зберігаєтьÑÑ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ ÐµÐºÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ 0x%lx\n"
-#: peXXigen.c:1630
+#: peXXigen.c:1633
#, c-format
msgid ""
"\n"
@@ -8743,67 +8853,67 @@ msgstr ""
"\n"
"Таблиці екÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ (оброблений вміÑÑ‚ розділу %s)\n"
-#: peXXigen.c:1634
+#: peXXigen.c:1637
#, c-format
msgid "Export Flags \t\t\t%lx\n"
msgstr "Прапорці екÑпортуваннÑ\t\t%lx\n"
-#: peXXigen.c:1637
+#: peXXigen.c:1640
#, c-format
msgid "Time/Date stamp \t\t%lx\n"
msgstr "Позначка чаÑу/дати\t\t%lx\n"
-#: peXXigen.c:1641
+#: peXXigen.c:1644
#, c-format
msgid "Major/Minor \t\t\t%d/%d\n"
msgstr "ОÑновна/ÐœÐ¾Ð´Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ \t\t\t%d/%d\n"
-#: peXXigen.c:1644
+#: peXXigen.c:1647
#, c-format
msgid "Name \t\t\t\t"
msgstr "Ðазва\t\t\t\t"
-#: peXXigen.c:1655
+#: peXXigen.c:1658
#, c-format
msgid "Ordinal Base \t\t\t%ld\n"
msgstr "ОÑнова впорÑдковуваннÑ\t\t%ld\n"
-#: peXXigen.c:1658
+#: peXXigen.c:1661
#, c-format
msgid "Number in:\n"
msgstr "Ðомер у:\n"
-#: peXXigen.c:1661
+#: peXXigen.c:1664
#, c-format
msgid "\tExport Address Table \t\t%08lx\n"
msgstr "\tÐ¢Ð°Ð±Ð»Ð¸Ñ†Ñ ÐµÐºÑпортованих Ð°Ð´Ñ€ÐµÑ \t\t%08lx\n"
-#: peXXigen.c:1665
+#: peXXigen.c:1668
#, c-format
msgid "\t[Name Pointer/Ordinal] Table\t%08lx\n"
msgstr "\tÐ¢Ð°Ð±Ð»Ð¸Ñ†Ñ [вказівників назв/порÑдкових номерів]\t%08lx\n"
-#: peXXigen.c:1668
+#: peXXigen.c:1671
#, c-format
msgid "Table Addresses\n"
msgstr "Табличні адреÑи\n"
-#: peXXigen.c:1671
+#: peXXigen.c:1674
#, c-format
msgid "\tExport Address Table \t\t"
msgstr "\tÐ¢Ð°Ð±Ð»Ð¸Ñ†Ñ ÐµÐºÑпортованих Ð°Ð´Ñ€ÐµÑ \t\t"
-#: peXXigen.c:1676
+#: peXXigen.c:1679
#, c-format
msgid "\tName Pointer Table \t\t"
msgstr "\tÐ¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ð²ÐºÐ°Ð·Ñ–Ð²Ð½Ð¸ÐºÑ–Ð² на назви \t\t"
-#: peXXigen.c:1681
+#: peXXigen.c:1684
#, c-format
msgid "\tOrdinal Table \t\t\t"
msgstr "\tÐ¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ð½Ð¾Ð¼ÐµÑ€Ñ–Ð² \t\t\t"
-#: peXXigen.c:1695
+#: peXXigen.c:1698
#, c-format
msgid ""
"\n"
@@ -8812,20 +8922,20 @@ msgstr ""
"\n"
"Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ ÐµÐºÑпортованих Ð°Ð´Ñ€ÐµÑ â€” оÑнова порÑдкових номерів: %ld\n"
-#: peXXigen.c:1704
+#: peXXigen.c:1707
#, c-format
msgid "\tInvalid Export Address Table rva (0x%lx) or entry count (0x%lx)\n"
msgstr "\tÐекоректне rva (0x%lx) або кількіÑÑ‚ÑŒ запиÑів (0x%lx) таблиці Ð°Ð´Ñ€ÐµÑ ÐµÐºÑпортуваннÑ\n"
-#: peXXigen.c:1723
+#: peXXigen.c:1726
msgid "Forwarder RVA"
msgstr "ПереÑпрÑмовний RVA"
-#: peXXigen.c:1735
+#: peXXigen.c:1738
msgid "Export RVA"
msgstr "ЕкÑпортований RVA"
-#: peXXigen.c:1742
+#: peXXigen.c:1745
#, c-format
msgid ""
"\n"
@@ -8834,27 +8944,27 @@ msgstr ""
"\n"
"Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ [порÑдкових номерів/вказівників на назви]\n"
-#: peXXigen.c:1750
+#: peXXigen.c:1753
#, c-format
msgid "\tInvalid Name Pointer Table rva (0x%lx) or entry count (0x%lx)\n"
msgstr "\tÐекоректне rva (0x%lx) або кількіÑÑ‚ÑŒ запиÑів (0x%lx) таблиці вказівників на назви\n"
-#: peXXigen.c:1757
+#: peXXigen.c:1760
#, c-format
msgid "\tInvalid Ordinal Table rva (0x%lx) or entry count (0x%lx)\n"
msgstr "\tÐекоректне rva (0x%lx) або кількіÑÑ‚ÑŒ запиÑів (0x%lx) таблиці порÑдкових даних\n"
-#: peXXigen.c:1771
+#: peXXigen.c:1774
#, c-format
msgid "\t[%4ld] <corrupt offset: %lx>\n"
msgstr "\t[%4ld] <пошкоджений зÑув: %lx>\n"
-#: peXXigen.c:1825 peXXigen.c:1994
+#: peXXigen.c:1828 peXXigen.c:1997
#, c-format
msgid "warning, .pdata section size (%ld) is not a multiple of %d\n"
msgstr "попередженнÑ: розмір розділу .pdata (%ld) не Ñ” кратним до %d\n"
-#: peXXigen.c:1829 peXXigen.c:1998
+#: peXXigen.c:1832 peXXigen.c:2001
#, c-format
msgid ""
"\n"
@@ -8863,12 +8973,12 @@ msgstr ""
"\n"
"Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ñ„ÑƒÐ½ÐºÑ†Ñ–Ð¹ (оброблений вміÑÑ‚ розділу .pdata)\n"
-#: peXXigen.c:1832
+#: peXXigen.c:1835
#, c-format
msgid " vma:\t\t\tBegin Address End Address Unwind Info\n"
msgstr " vma:\t\t\tПочат. адреÑа Кінц. адреÑа Дані unwind\n"
-#: peXXigen.c:1834
+#: peXXigen.c:1837
#, c-format
msgid ""
" vma:\t\tBegin End EH EH PrologEnd Exception\n"
@@ -8877,12 +8987,12 @@ msgstr ""
" vma:\t\tПоч. Кінц. Обробник Дані ÐдреÑа МаÑка\n"
" \t\tадреÑа адреÑа EH EH кінц. прол.виключеннÑ\n"
-#: peXXigen.c:1847
+#: peXXigen.c:1850
#, c-format
msgid "Virtual size of .pdata section (%ld) larger than real size (%ld)\n"
msgstr "Віртуальний розмір розділу .pdata (%ld) перевищує реальний розмір (%ld)\n"
-#: peXXigen.c:2000
+#: peXXigen.c:2003
#, c-format
msgid ""
" vma:\t\tBegin Prolog Function Flags Exception EH\n"
@@ -8891,7 +9001,7 @@ msgstr ""
" vma:\t\tПоч. Довжина Довжина Прапорці Обробник Дані\n"
" \t\tадреÑа прологу функції 32б вик. виключень EH\n"
-#: peXXigen.c:2121
+#: peXXigen.c:2124
#, c-format
msgid ""
"\n"
@@ -8902,7 +9012,7 @@ msgstr ""
"\n"
"ПереÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ оÑнови файла PE (оброблений вміÑÑ‚ розділу .reloc)\n"
-#: peXXigen.c:2150
+#: peXXigen.c:2153
#, c-format
msgid ""
"\n"
@@ -8911,62 +9021,62 @@ msgstr ""
"\n"
"Віртуальна адреÑа: %08lx, розмір фрагмента: %ld (0x%lx), кількіÑÑ‚ÑŒ прив’Ñзок: %ld\n"
-#: peXXigen.c:2168
+#: peXXigen.c:2171
#, c-format
msgid "\treloc %4d offset %4x [%4lx] %s"
msgstr "\tпереÑÑƒÐ²Ð°Ð½Ð½Ñ %4d відÑтуп %4x [%4lx] %s"
-#: peXXigen.c:2229
+#: peXXigen.c:2232
#, c-format
msgid "%03x %*.s Entry: "
msgstr "Вхід до %03x %*.s: "
-#: peXXigen.c:2253
+#: peXXigen.c:2256
#, c-format
msgid "name: [val: %08lx len %d]: "
msgstr "назва: [значеннÑ: %08lx довжина %d]: "
-#: peXXigen.c:2273
+#: peXXigen.c:2276
#, c-format
msgid "<corrupt string length: %#x>\n"
msgstr "<довжина пошкодженого Ñ€Ñдка: %#x>\n"
-#: peXXigen.c:2283
+#: peXXigen.c:2286
#, c-format
msgid "<corrupt string offset: %#lx>\n"
msgstr "<відÑтуп пошкодженого Ñ€Ñдка: %#lx>\n"
-#: peXXigen.c:2288
+#: peXXigen.c:2291
#, c-format
msgid "ID: %#08lx"
msgstr "Ід.: %#08lx"
-#: peXXigen.c:2291
+#: peXXigen.c:2294
#, c-format
msgid ", Value: %#08lx\n"
msgstr ", ЗначеннÑ: %#08lx\n"
-#: peXXigen.c:2313
+#: peXXigen.c:2316
#, c-format
msgid "%03x %*.s Leaf: Addr: %#08lx, Size: %#08lx, Codepage: %d\n"
msgstr "%03x ЛиÑток %*.s: адреÑа: %#08lx, розмір: %#08lx, кодова Ñторінка: %d\n"
-#: peXXigen.c:2355
+#: peXXigen.c:2358
#, c-format
msgid "<unknown directory type: %d>\n"
msgstr "<невідомий тип каталогу: %d>\n"
-#: peXXigen.c:2363
+#: peXXigen.c:2366
#, 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"
-#: peXXigen.c:2451
+#: peXXigen.c:2454
#, c-format
msgid "Corrupt .rsrc section detected!\n"
msgstr "ВиÑвлено пошкоджений розділ .rsrc!\n"
-#: peXXigen.c:2475
+#: peXXigen.c:2478
#, c-format
msgid ""
"\n"
@@ -8975,17 +9085,17 @@ msgstr ""
"\n"
"ПОПЕРЕДЖЕÐÐЯ: зайві дані у розділі .rsrc — Ñ—Ñ… буде проігноровано Windows:\n"
-#: peXXigen.c:2481
+#: peXXigen.c:2484
#, c-format
msgid " String table starts at offset: %#03x\n"
msgstr " Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ñ€Ñдків починаєтьÑÑ Ð· таким зÑувом: %#03x\n"
-#: peXXigen.c:2484
+#: peXXigen.c:2487
#, c-format
msgid " Resources start at offset: %#03x\n"
msgstr " РеÑурÑи починаютьÑÑ Ð· таким зÑувом: %#03x\n"
-#: peXXigen.c:2541
+#: peXXigen.c:2544
#, c-format
msgid ""
"\n"
@@ -8994,7 +9104,7 @@ msgstr ""
"\n"
"ІÑнує каталог діагноÑтики, але розділу, що його міÑтить не знайдено\n"
-#: peXXigen.c:2547
+#: peXXigen.c:2550
#, c-format
msgid ""
"\n"
@@ -9003,7 +9113,7 @@ msgstr ""
"\n"
"У %s Ñ” каталог діагноÑтики, але у цьому розділі немає даних\n"
-#: peXXigen.c:2554
+#: peXXigen.c:2557
#, c-format
msgid ""
"\n"
@@ -9012,7 +9122,7 @@ msgstr ""
"\n"
"Помилка: у розділі %s міÑтитьÑÑ Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÐ¾Ð²Ð° адреÑа діагноÑтичних даних, але вона Ñ” надто малою\n"
-#: peXXigen.c:2559
+#: peXXigen.c:2562
#, c-format
msgid ""
"\n"
@@ -9023,22 +9133,22 @@ msgstr ""
"ВиÑвлено каталог діагноÑтики у %s за адреÑою 0x%lx\n"
"\n"
-#: peXXigen.c:2566
+#: peXXigen.c:2569
#, c-format
msgid "The debug data size field in the data directory is too big for the section"
msgstr "Поле розміру діагноÑтичних даних у каталозі діагноÑтики Ñ” надто великим Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ розділу"
-#: peXXigen.c:2571
+#: peXXigen.c:2574
#, c-format
msgid "Type Size Rva Offset\n"
msgstr "Тип Розм Rva ЗÑув\n"
-#: peXXigen.c:2618
+#: peXXigen.c:2621
#, c-format
msgid "(format %c%c%c%c signature %s age %ld)\n"
msgstr "(формат %c%c%c%c Ð¿Ñ–Ð´Ð¿Ð¸Ñ %s вік %ld)\n"
-#: peXXigen.c:2628
+#: peXXigen.c:2631
#, c-format
msgid "The debug directory size is not a multiple of the debug directory entry size\n"
msgstr "Розмір каталогу діагноÑтики не Ñ” кратним до розміру запиÑу каталогу діагноÑтики\n"
@@ -9046,7 +9156,7 @@ msgstr "Розмір каталогу діагноÑтики не Ñ” кратнÐ
#. The MS dumpbin program reportedly ands with 0xff0f before
#. printing the characteristics field. Not sure why. No reason to
#. emulate it here.
-#: peXXigen.c:2712
+#: peXXigen.c:2715
#, c-format
msgid ""
"\n"
@@ -9055,91 +9165,147 @@ msgstr ""
"\n"
"ХарактериÑтики 0x%x\n"
-#: peXXigen.c:2989
+#: peXXigen.c:2992
#, c-format
msgid "%pB: Data Directory (%lx bytes at %<PRIx64>) extends across section boundary at %<PRIx64>"
msgstr "%pB: каталог даних (%lx байтів за адреÑою %<PRIx64>) виходить за межі розділу у %<PRIx64>"
-#: peXXigen.c:3026
+#: peXXigen.c:3029
msgid "failed to update file offsets in debug directory"
msgstr "не вдалоÑÑ Ð¾Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ зÑуви файлів у каталозі діагноÑтики"
-#: peXXigen.c:3034
+#: peXXigen.c:3037
#, c-format
msgid "%pB: failed to read debug data section"
msgstr "%pB: не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ розділ діагноÑтичних даних"
-#: peXXigen.c:3833
+#: peXXigen.c:3836
#, c-format
msgid ".rsrc merge failure: duplicate string resource: %d"
msgstr "не вдалоÑÑ Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ñ‚Ð¸ .rsrc: реÑÑƒÑ€Ñ Ð· дублюваннÑм Ñ€Ñдків: %d"
-#: peXXigen.c:3968
+#: peXXigen.c:3971
msgid ".rsrc merge failure: multiple non-default manifests"
msgstr "не вдалоÑÑ Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ñ‚Ð¸ .rsrc: декілька нетипових маніфеÑтів"
-#: peXXigen.c:3986
+#: peXXigen.c:3989
msgid ".rsrc merge failure: a directory matches a leaf"
msgstr "не вдалоÑÑ Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ñ‚Ð¸ .rsrc: каталогу відповідає лиÑток"
-#: peXXigen.c:4028
+#: peXXigen.c:4031
msgid ".rsrc merge failure: duplicate leaf"
msgstr "не вдалоÑÑ Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ñ‚Ð¸ .rsrc: Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð»Ð¸Ñтків"
-#: peXXigen.c:4033
+#: peXXigen.c:4036
#, c-format
msgid ".rsrc merge failure: duplicate leaf: %s"
msgstr "не вдалоÑÑ Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ñ‚Ð¸ .rsrc: Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð»Ð¸Ñтків: %s"
-#: peXXigen.c:4100
+#: peXXigen.c:4103
msgid ".rsrc merge failure: dirs with differing characteristics"
msgstr "не вдалоÑÑ Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ñ‚Ð¸ .rsrc: каталоги з різними характериÑтиками"
-#: peXXigen.c:4107
+#: peXXigen.c:4110
msgid ".rsrc merge failure: differing directory versions"
msgstr "не вдалоÑÑ Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ñ‚Ð¸ .rsrc: відмінноÑÑ‚Ñ– у верÑÑ–ÑÑ… каталогів"
#. Corrupted .rsrc section - cannot merge.
-#: peXXigen.c:4224
+#: peXXigen.c:4227
#, c-format
msgid "%pB: .rsrc merge failure: corrupt .rsrc section"
msgstr "%pB: не вдалоÑÑ Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ñ‚Ð¸ .rsrc: пошкоджений розділ .rsrc"
-#: peXXigen.c:4232
+#: peXXigen.c:4235
#, c-format
msgid "%pB: .rsrc merge failure: unexpected .rsrc size"
msgstr "%pB: не вдалоÑÑ Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ñ‚Ð¸ .rsrc: неочікуваний розмір .rsrc"
-#: peXXigen.c:4371
+#: peXXigen.c:4374
#, c-format
msgid "%pB: unable to fill in DataDictionary[1] because .idata$2 is missing"
msgstr "%pB: не вдалоÑÑ Ð·Ð°Ð¿Ð¾Ð²Ð½Ð¸Ñ‚Ð¸ DataDictionary[1], оÑкільки не виÑтачає .idata$2"
-#: peXXigen.c:4391
+#: peXXigen.c:4394
#, c-format
msgid "%pB: unable to fill in DataDictionary[1] because .idata$4 is missing"
msgstr "%pB: не вдалоÑÑ Ð·Ð°Ð¿Ð¾Ð²Ð½Ð¸Ñ‚Ð¸ DataDictionary[1], оÑкільки не виÑтачає .idata$4"
-#: peXXigen.c:4412
+#: peXXigen.c:4415
#, c-format
msgid "%pB: unable to fill in DataDictionary[12] because .idata$5 is missing"
msgstr "%pB: не вдалоÑÑ Ð·Ð°Ð¿Ð¾Ð²Ð½Ð¸Ñ‚Ð¸ DataDictionary[12], оÑкільки не виÑтачає .idata$5"
-#: peXXigen.c:4432
+#: peXXigen.c:4435
#, c-format
msgid "%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)] because .idata$6 is missing"
msgstr "%pB: не вдалоÑÑ Ð·Ð°Ð¿Ð¾Ð²Ð½Ð¸Ñ‚Ð¸ DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)], оÑкільки не виÑтачає .idata$6"
-#: peXXigen.c:4474
+#: peXXigen.c:4477
#, c-format
msgid "%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE(12)] because .idata$6 is missing"
msgstr "%pB: не вдалоÑÑ Ð·Ð°Ð¿Ð¾Ð²Ð½Ð¸Ñ‚Ð¸ DataDictionary[PE_IMPORT_ADDRESS_TABLE(12)], оÑкільки .idata$6 не виÑтачає"
-#: peXXigen.c:4499
+#: peXXigen.c:4502
#, c-format
msgid "%pB: unable to fill in DataDictionary[9] because __tls_used is missing"
msgstr "%pB: не вдалоÑÑ Ð·Ð°Ð¿Ð¾Ð²Ð½Ð¸Ñ‚Ð¸ DataDictionary[9], оÑкільки не виÑтачає __tls_used"
+#~ msgid "%pB: TLS relocation at (0x%"
+#~ msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ TLS у (0x%"
+
+#~ msgid "%pB: warning: line number count (%#lx) exceeds section size (%#lx)"
+#~ msgstr "%pB: попередженнÑ: лічильник кількоÑÑ‚Ñ– Ñ€Ñдків (%#lx) вказує на міÑце за межами розмірів розділу (%#lx)"
+
+#~ msgid "internal error: RL78 reloc stack overflow"
+#~ msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ñтека переÑувань RL78"
+
+#~ msgid ""
+#~ "%s branch %lu\n"
+#~ " branch toc adj %lu\n"
+#~ " branch notoc %lu\n"
+#~ " branch both %lu\n"
+#~ " long branch %lu\n"
+#~ " long toc adj %lu\n"
+#~ " long notoc %lu\n"
+#~ " long both %lu\n"
+#~ " plt call %lu\n"
+#~ " plt call save %lu\n"
+#~ " plt call notoc %lu\n"
+#~ " plt call both %lu\n"
+#~ " global entry %lu"
+#~ msgstr ""
+#~ "%s гілка %lu\n"
+#~ " toc adj гілки %lu\n"
+#~ " notoc гілки %lu\n"
+#~ " both гілки %lu\n"
+#~ " long branch %lu\n"
+#~ " long toc adj %lu\n"
+#~ " long notoc %lu\n"
+#~ " long both %lu\n"
+#~ " plt call %lu\n"
+#~ " plt call save %lu\n"
+#~ " plt call notoc %lu\n"
+#~ " plt call both %lu\n"
+#~ " заг. Ð·Ð°Ð¿Ð¸Ñ %lu"
+
+#~ msgid "warning: %pB is truncated: expected core file size >= %<PRIu64>, found: %<PRIu64>"
+#~ msgstr "попередженнÑ: %pB обрізано: очікуваний розмір оÑновного файла >= %<PRIu64>, виÑвлено: %<PRIu64>."
+
+#~ msgid "-march=%s: expect number after `%dp'"
+#~ msgstr "-march=%s: мало бути чиÑло піÑÐ»Ñ Â«%dp»"
+
+#~ msgid "-march=%s: rv%de is not a valid base ISA"
+#~ msgstr "-march=%s: rv%de не Ñ” коректним ISA оÑнови"
+
+#~ msgid " Error: length larger than remaining space in record\n"
+#~ msgstr " Помилка: довжина перевищує міÑце, Ñке лишилоÑÑ Ñƒ запиÑÑ–\n"
+
+#~ msgid "STA_QW (stack quadword) 0x%08x %08x\n"
+#~ msgstr "STA_QW (Ñтек четверних Ñлів) 0x%08x %08x\n"
+
+#~ msgid "%pB: error: erratum 843419 immediate 0x%"
+#~ msgstr "%pB: помилка: проміжна адреÑа Ð´Ð»Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸ 843419 0x%"
+
#~ msgid "%pA has both ordered [`%pA' in %pB] and unordered [`%pA' in %pB] sections"
#~ msgstr "%pA міÑтить одразу впорÑдкований [«%pA» у %pB] Ñ– невпорÑдкований [«%pA» у %pB] розділи"
diff --git a/bfd/reloc.c b/bfd/reloc.c
index 164060361a9..5098e0ab09f 100644
--- a/bfd/reloc.c
+++ b/bfd/reloc.c
@@ -1621,6 +1621,8 @@ the section containing the relocation. It depends on the specific target.
ENUM
BFD_RELOC_32_SECREL
+ENUMX
+ BFD_RELOC_16_SECIDX
ENUMDOC
Section relative relocations. Some targets need this for DWARF2.
diff --git a/bfd/section.c b/bfd/section.c
index 899438a1c5e..5a487ce6c6f 100644
--- a/bfd/section.c
+++ b/bfd/section.c
@@ -151,6 +151,12 @@ CODE_FRAGMENT
. the same as that passed to bfd_make_section. *}
. const char *name;
.
+. {* The next section in the list belonging to the BFD, or NULL. *}
+. struct bfd_section *next;
+.
+. {* The previous section in the list belonging to the BFD, or NULL. *}
+. struct bfd_section *prev;
+.
. {* A unique sequence number. *}
. unsigned int id;
.
@@ -161,12 +167,6 @@ CODE_FRAGMENT
. {* Which section in the bfd; 0..n-1 as sections are created in a bfd. *}
. unsigned int index;
.
-. {* The next section in the list belonging to the BFD, or NULL. *}
-. struct bfd_section *next;
-.
-. {* The previous section in the list belonging to the BFD, or NULL. *}
-. struct bfd_section *prev;
-.
. {* The field flags contains attributes of the section. Some
. flags are read in from the object file, and some are
. synthesized from other information. *}
@@ -455,13 +455,6 @@ CODE_FRAGMENT
. {* The compressed size of the section in octets. *}
. bfd_size_type compressed_size;
.
-. {* Relaxation table. *}
-. struct relax_table *relax;
-.
-. {* Count of used relaxation table entries. *}
-. int relax_count;
-.
-.
. {* If this section is going to be output, then this value is the
. offset in *bytes* into the output section of the first byte in the
. input section (byte ==> smallest addressable unit on the
@@ -474,10 +467,6 @@ CODE_FRAGMENT
. {* The output section through which to map on output. *}
. struct bfd_section *output_section;
.
-. {* The alignment requirement of the section, as an exponent of 2 -
-. e.g., 3 aligns to 2^3 (or 8). *}
-. unsigned int alignment_power;
-.
. {* If an input section, a pointer to a vector of relocation
. records for the data in this section. *}
. struct reloc_cache_entry *relocation;
@@ -489,6 +478,10 @@ CODE_FRAGMENT
. {* The number of relocation records in one of the above. *}
. unsigned reloc_count;
.
+. {* The alignment requirement of the section, as an exponent of 2 -
+. e.g., 3 aligns to 2^3 (or 8). *}
+. unsigned int alignment_power;
+.
. {* Information below is back end specific - and not always used
. or updated. *}
.
@@ -551,22 +544,16 @@ CODE_FRAGMENT
. struct bfd_section *s;
. const char *linked_to_symbol_name;
. } map_head, map_tail;
-. {* Points to the output section this section is already assigned to, if any.
-. This is used when support for non-contiguous memory regions is enabled. *}
-. struct bfd_section *already_assigned;
.
-.} asection;
+. {* Points to the output section this section is already assigned to,
+. if any. This is used when support for non-contiguous memory
+. regions is enabled. *}
+. struct bfd_section *already_assigned;
.
-.{* Relax table contains information about instructions which can
-. be removed by relaxation -- replacing a long address with a
-. short address. *}
-.struct relax_table {
-. {* Address where bytes may be deleted. *}
-. bfd_vma addr;
+. {* Explicitly specified section type, if non-zero. *}
+. unsigned int type;
.
-. {* Number of bytes to be deleted. *}
-. int size;
-.};
+.} asection;
.
.static inline const char *
.bfd_section_name (const asection *sec)
@@ -704,8 +691,8 @@ CODE_FRAGMENT
.}
.
.#define BFD_FAKE_SECTION(SEC, SYM, NAME, IDX, FLAGS) \
-. {* name, id, section_id, index, next, prev, flags, user_set_vma, *} \
-. { NAME, IDX, 0, 0, NULL, NULL, FLAGS, 0, \
+. {* name, next, prev, id, section_id, index, flags, user_set_vma, *} \
+. { NAME, NULL, NULL, IDX, 0, 0, FLAGS, 0, \
. \
. {* linker_mark, linker_has_input, gc_mark, decompress_status, *} \
. 0, 0, 1, 0, \
@@ -716,14 +703,14 @@ CODE_FRAGMENT
. {* sec_flg0, sec_flg1, sec_flg2, sec_flg3, sec_flg4, sec_flg5, *} \
. 0, 0, 0, 0, 0, 0, \
. \
-. {* vma, lma, size, rawsize, compressed_size, relax, relax_count, *} \
-. 0, 0, 0, 0, 0, 0, 0, \
+. {* vma, lma, size, rawsize, compressed_size, *} \
+. 0, 0, 0, 0, 0, \
. \
-. {* output_offset, output_section, alignment_power, *} \
-. 0, &SEC, 0, \
+. {* output_offset, output_section, relocation, orelocation, *} \
+. 0, &SEC, NULL, NULL, \
. \
-. {* relocation, orelocation, reloc_count, filepos, rel_filepos, *} \
-. NULL, NULL, 0, 0, 0, \
+. {* reloc_count, alignment_power, filepos, rel_filepos, *} \
+. 0, 0, 0, 0, \
. \
. {* line_filepos, userdata, contents, lineno, lineno_count, *} \
. 0, NULL, NULL, NULL, 0, \
@@ -737,8 +724,8 @@ CODE_FRAGMENT
. {* symbol, symbol_ptr_ptr, *} \
. (struct bfd_symbol *) SYM, &SEC.symbol, \
. \
-. {* map_head, map_tail, already_assigned *} \
-. { NULL }, { NULL }, NULL \
+. {* map_head, map_tail, already_assigned, type *} \
+. { NULL }, { NULL }, NULL, 0 \
. \
. }
.
diff --git a/bfd/som.c b/bfd/som.c
index d53a3b90b02..3c0b68a444e 100644
--- a/bfd/som.c
+++ b/bfd/som.c
@@ -4939,6 +4939,7 @@ som_set_reloc_info (unsigned char *fixup,
arelent *internal_relocs,
asection *section,
asymbol **symbols,
+ unsigned int symcount,
bool just_count)
{
unsigned int op, varname, deallocate_contents = 0;
@@ -5032,7 +5033,7 @@ som_set_reloc_info (unsigned char *fixup,
else if (ISLOWER (c))
{
int bits = (c - 'a') * 8;
- for (v = 0; c > 'a'; --c)
+ for (v = 0; c > 'a' && fixup < end_fixups; --c)
v = (v << 8) | *fixup++;
if (varname == 'V')
v = sign_extend (v, bits);
@@ -5093,7 +5094,7 @@ som_set_reloc_info (unsigned char *fixup,
/* A symbol to use in the relocation. Make a note
of this if we are not just counting. */
case 'S':
- if (! just_count)
+ if (! just_count && (unsigned int) c < symcount)
rptr->sym_ptr_ptr = &symbols[c];
break;
/* Argument relocation bits for a function call. */
@@ -5309,7 +5310,7 @@ som_slurp_reloc_table (bfd *abfd,
need it again. */
section->reloc_count = som_set_reloc_info (external_relocs,
fixup_stream_size,
- NULL, NULL, NULL, true);
+ NULL, NULL, NULL, 0, true);
som_section_data (section)->reloc_stream = external_relocs;
}
@@ -5335,7 +5336,8 @@ som_slurp_reloc_table (bfd *abfd,
/* Process and internalize the relocations. */
som_set_reloc_info (external_relocs, fixup_stream_size,
- internal_relocs, section, symbols, false);
+ internal_relocs, section, symbols,
+ bfd_get_symcount (abfd), false);
/* We're done with the external relocations. Free them. */
free (external_relocs);
diff --git a/bfd/stamp-h.in b/bfd/stamp-h.in
deleted file mode 100644
index 9788f70238c..00000000000
--- a/bfd/stamp-h.in
+++ /dev/null
@@ -1 +0,0 @@
-timestamp
diff --git a/bfd/targets.c b/bfd/targets.c
index 18fec45f02a..05dd8236d91 100644
--- a/bfd/targets.c
+++ b/bfd/targets.c
@@ -686,6 +686,7 @@ extern const bfd_target alpha_elf64_fbsd_vec;
extern const bfd_target alpha_vms_vec;
extern const bfd_target alpha_vms_lib_txt_vec;
extern const bfd_target am33_elf32_linux_vec;
+extern const bfd_target amdgcn_elf64_le_vec;
extern const bfd_target aout_vec;
extern const bfd_target arc_elf32_be_vec;
extern const bfd_target arc_elf32_le_vec;
@@ -763,10 +764,6 @@ extern const bfd_target ia64_elf64_vms_vec;
extern const bfd_target ia64_pei_vec;
extern const bfd_target ip2k_elf32_vec;
extern const bfd_target iq2000_elf32_vec;
-extern const bfd_target k1om_elf64_vec;
-extern const bfd_target k1om_elf64_fbsd_vec;
-extern const bfd_target l1om_elf64_vec;
-extern const bfd_target l1om_elf64_fbsd_vec;
extern const bfd_target lm32_elf32_vec;
extern const bfd_target lm32_elf32_fdpic_vec;
extern const bfd_target loongarch_elf64_vec;
@@ -998,6 +995,10 @@ static const bfd_target * const _bfd_target_vector[] =
#endif
#ifdef BFD64
+ &amdgcn_elf64_le_vec,
+#endif
+
+#ifdef BFD64
&alpha_ecoff_le_vec,
&alpha_elf64_vec,
&alpha_elf64_fbsd_vec,
@@ -1122,13 +1123,6 @@ static const bfd_target * const _bfd_target_vector[] =
&ip2k_elf32_vec,
&iq2000_elf32_vec,
-#ifdef BFD64
- &k1om_elf64_vec,
- &k1om_elf64_fbsd_vec,
- &l1om_elf64_vec,
- &l1om_elf64_fbsd_vec,
-#endif
-
&lm32_elf32_vec,
&m32c_elf32_vec,
diff --git a/bfd/version.h b/bfd/version.h
index 77989d3086c..3038a79c941 100644
--- a/bfd/version.h
+++ b/bfd/version.h
@@ -16,7 +16,7 @@
In releases, the date is not included in either version strings or
sonames. */
-#define BFD_VERSION_DATE 20220111
+#define BFD_VERSION_DATE 20220505
#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 cbd21117151..d53a001facd 100644
--- a/bfd/version.m4
+++ b/bfd/version.m4
@@ -1 +1 @@
-m4_define([BFD_VERSION], [2.37.50])
+m4_define([BFD_VERSION], [2.38.50])
diff --git a/bfd/vms-alpha.c b/bfd/vms-alpha.c
index c8250e2a673..1129c98f0e2 100644
--- a/bfd/vms-alpha.c
+++ b/bfd/vms-alpha.c
@@ -4352,9 +4352,13 @@ parse_module (bfd *abfd, struct module *module, unsigned char *ptr,
/* Initialize tables with zero element. */
curr_srec = (struct srecinfo *) bfd_zalloc (abfd, sizeof (struct srecinfo));
+ if (!curr_srec)
+ return false;
module->srec_table = curr_srec;
curr_line = (struct lineinfo *) bfd_zalloc (abfd, sizeof (struct lineinfo));
+ if (!curr_line)
+ return false;
module->line_table = curr_line;
while (length == -1 || ptr < maxptr)
@@ -4389,6 +4393,8 @@ parse_module (bfd *abfd, struct module *module, unsigned char *ptr,
case DST__K_RTNBEG:
funcinfo = (struct funcinfo *)
bfd_zalloc (abfd, sizeof (struct funcinfo));
+ if (!funcinfo)
+ return false;
funcinfo->name
= _bfd_vms_save_counted_string (abfd, ptr + DST_S_B_RTNBEG_NAME,
maxptr - (ptr + DST_S_B_RTNBEG_NAME));
@@ -4401,6 +4407,8 @@ parse_module (bfd *abfd, struct module *module, unsigned char *ptr,
break;
case DST__K_RTNEND:
+ if (!module->func_table)
+ return false;
module->func_table->high = module->func_table->low
+ bfd_getl32 (ptr + DST_S_L_RTNEND_SIZE) - 1;
@@ -5939,9 +5947,9 @@ evax_bfd_print_emh (FILE *file, unsigned char *rec, unsigned int rec_len)
case EMH__C_MHD:
{
struct vms_emh_mhd *mhd = (struct vms_emh_mhd *) rec;
- const char * name;
- const char * nextname;
- const char * maxname;
+ unsigned char *name;
+ unsigned char *nextname;
+ unsigned char *maxname;
/* PR 21840: Check for invalid lengths. */
if (rec_len < sizeof (* mhd))
@@ -5953,8 +5961,8 @@ evax_bfd_print_emh (FILE *file, unsigned char *rec, unsigned int rec_len)
fprintf (file, _(" structure level: %u\n"), mhd->strlvl);
fprintf (file, _(" max record size: %u\n"),
(unsigned) bfd_getl32 (mhd->recsiz));
- name = (char *)(mhd + 1);
- maxname = (char *) rec + rec_len;
+ name = (unsigned char *) (mhd + 1);
+ maxname = (unsigned char *) rec + rec_len;
if (name > maxname - 2)
{
fprintf (file, _(" Error: The module name is missing\n"));
@@ -7390,12 +7398,14 @@ evax_bfd_print_dst (struct bfd *abfd, unsigned int dst_size, FILE *file)
fprintf (file, _("standard data: %s\n"),
evax_bfd_get_dsc_name (type));
evax_bfd_print_valspec (buf, len, 4, file);
- fprintf (file, _(" name: %.*s\n"), buf[5], buf + 6);
+ if (len > 6)
+ fprintf (file, _(" name: %.*s\n"),
+ buf[5] > len - 6 ? len - 6 : buf[5], buf + 6);
break;
case DST__K_MODBEG:
{
struct vms_dst_modbeg *dst = (void *)buf;
- const char *name = (const char *)buf + sizeof (*dst);
+ unsigned char *name = buf + sizeof (*dst);
fprintf (file, _("modbeg\n"));
if (len < sizeof (*dst))
@@ -7419,7 +7429,7 @@ evax_bfd_print_dst (struct bfd *abfd, unsigned int dst_size, FILE *file)
name += name[0] + 1;
nlen = len - 1;
fprintf (file, _(" compiler : %.*s\n"),
- name[0] > nlen ? nlen: name[0], name + 1);
+ name[0] > nlen ? nlen : name[0], name + 1);
}
}
}
@@ -7430,7 +7440,7 @@ evax_bfd_print_dst (struct bfd *abfd, unsigned int dst_size, FILE *file)
case DST__K_RTNBEG:
{
struct vms_dst_rtnbeg *dst = (void *)buf;
- const char *name = (const char *)buf + sizeof (*dst);
+ unsigned char *name = buf + sizeof (*dst);
fputs (_("rtnbeg\n"), file);
if (len >= sizeof (*dst))
@@ -7483,7 +7493,7 @@ evax_bfd_print_dst (struct bfd *abfd, unsigned int dst_size, FILE *file)
case DST__K_BLKBEG:
{
struct vms_dst_blkbeg *dst = (void *)buf;
- const char *name = (const char *)buf + sizeof (*dst);
+ unsigned char *name = buf + sizeof (*dst);
if (len > sizeof (*dst))
{
@@ -7534,7 +7544,7 @@ evax_bfd_print_dst (struct bfd *abfd, unsigned int dst_size, FILE *file)
case DST__K_RECBEG:
{
struct vms_dst_recbeg *recbeg = (void *)buf;
- const char *name = (const char *)buf + sizeof (*recbeg);
+ unsigned char *name = buf + sizeof (*recbeg);
if (len > sizeof (*recbeg))
{
@@ -7748,7 +7758,7 @@ evax_bfd_print_dst (struct bfd *abfd, unsigned int dst_size, FILE *file)
case DST__K_SRC_DECLFILE:
{
struct vms_dst_src_decl_src *src = (void *) buf;
- const char *name;
+ unsigned char *name;
int nlen;
if (len < sizeof (*src))
@@ -7770,7 +7780,7 @@ evax_bfd_print_dst (struct bfd *abfd, unsigned int dst_size, FILE *file)
if (src->length > len || src->length <= sizeof (*src))
break;
nlen = src->length - sizeof (*src) - 1;
- name = (const char *) buf + sizeof (*src);
+ name = buf + sizeof (*src);
fprintf (file, _(" filename : %.*s\n"),
name[0] > nlen ? nlen : name[0], name + 1);
if (name[0] >= nlen)
diff --git a/bfd/xcofflink.c b/bfd/xcofflink.c
index ba07ba7f045..83469775208 100644
--- a/bfd/xcofflink.c
+++ b/bfd/xcofflink.c
@@ -93,6 +93,12 @@ struct xcoff_link_hash_table
{
struct bfd_link_hash_table root;
+ /* The stub hash table. */
+ struct bfd_hash_table stub_hash_table;
+
+ /* Info passed by the linker. */
+ struct bfd_xcoff_link_params *params;
+
/* The .debug string hash table. We need to compute this while
reading the input files, so that we know how large the .debug
section will be before we assign section positions. */
@@ -104,9 +110,8 @@ struct xcoff_link_hash_table
/* The .loader section we will use for the final output. */
asection *loader_section;
- /* A count of non TOC relative relocs which will need to be
- allocated in the .loader section. */
- size_t ldrel_count;
+ /* The structure holding information about the .loader section. */
+ struct xcoff_loader_info ldinfo;
/* The .loader section header. */
struct internal_ldhdr ldhdr;
@@ -194,6 +199,13 @@ struct xcoff_final_link_info
bfd_byte *external_relocs;
};
+#define xcoff_stub_hash_entry(ent) \
+ ((struct xcoff_stub_hash_entry *)(ent))
+
+#define xcoff_stub_hash_lookup(table, string, create, copy) \
+ ((struct xcoff_stub_hash_entry *) \
+ bfd_hash_lookup ((table), (string), (create), (copy)))
+
static bool xcoff_mark (struct bfd_link_info *, asection *);
@@ -530,6 +542,41 @@ xcoff_get_archive_info (struct bfd_link_info *info, bfd *archive)
return entryp;
}
+
+/* Initialize an entry in the stub hash table. */
+static struct bfd_hash_entry *
+stub_hash_newfunc (struct bfd_hash_entry *entry,
+ struct bfd_hash_table *table,
+ const char *string)
+{
+ /* Allocate the structure if it has not already been allocated by a
+ subclass. */
+ if (entry == NULL)
+ {
+ entry = bfd_hash_allocate (table,
+ sizeof (struct xcoff_stub_hash_entry));
+ if (entry == NULL)
+ return entry;
+ }
+
+ /* Call the allocation method of the superclass. */
+ entry = bfd_hash_newfunc (entry, table, string);
+ if (entry != NULL)
+ {
+ struct xcoff_stub_hash_entry *hsh;
+
+ /* Initialize the local fields. */
+ hsh = (struct xcoff_stub_hash_entry *) entry;
+ hsh->stub_type = xcoff_stub_none;
+ hsh->hcsect = NULL;
+ hsh->stub_offset = 0;
+ hsh->target_section = NULL;
+ hsh->htarget = NULL;
+ }
+
+ return entry;
+}
+
/* Routine to create an entry in an XCOFF link hash table. */
static struct bfd_hash_entry *
@@ -578,6 +625,8 @@ _bfd_xcoff_bfd_link_hash_table_free (bfd *obfd)
htab_delete (ret->archive_info);
if (ret->debug_strtab)
_bfd_stringtab_free (ret->debug_strtab);
+
+ bfd_hash_table_free (&ret->stub_hash_table);
_bfd_generic_link_hash_table_free (obfd);
}
@@ -600,6 +649,14 @@ _bfd_xcoff_bfd_link_hash_table_create (bfd *abfd)
return NULL;
}
+ /* Init the stub hash table too. */
+ if (!bfd_hash_table_init (&ret->stub_hash_table, stub_hash_newfunc,
+ sizeof (struct xcoff_stub_hash_entry)))
+ {
+ _bfd_xcoff_bfd_link_hash_table_free (abfd);
+ return NULL;
+ }
+
isxcoff64 = bfd_coff_debug_string_prefix_length (abfd) == 4;
ret->debug_strtab = _bfd_xcoff_stringtab_init (isxcoff64);
@@ -798,10 +855,14 @@ xcoff_dynamic_definition_p (struct xcoff_link_hash_entry *h,
|| h->root.type == bfd_link_hash_undefweak))
return true;
- /* If H is currently undefined, LDSYM defines it. */
+ /* If H is currently undefined, LDSYM defines it.
+ However, if H has a hidden visibility, LDSYM must not
+ define it. */
if ((h->flags & XCOFF_DEF_DYNAMIC) == 0
&& (h->root.type == bfd_link_hash_undefined
- || h->root.type == bfd_link_hash_undefweak))
+ || h->root.type == bfd_link_hash_undefweak)
+ && (h->visibility != SYM_V_HIDDEN
+ && h->visibility != SYM_V_INTERNAL))
return true;
return false;
@@ -1243,6 +1304,7 @@ xcoff_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
bfd_byte *linenos;
} *reloc_info = NULL;
bfd_size_type amt;
+ unsigned short visibility;
keep_syms = obj_coff_keep_syms (abfd);
@@ -1480,6 +1542,9 @@ xcoff_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
}
}
+ /* Record visibility. */
+ visibility = sym.n_type & SYM_V_MASK;
+
/* Pick up the csect auxiliary information. */
if (sym.n_numaux == 0)
{
@@ -1731,6 +1796,7 @@ xcoff_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
+ sym.n_value
- enclosing->vma);
csect->size = aux.x_csect.x_scnlen.l;
+ csect->rawsize = aux.x_csect.x_scnlen.l;
csect->flags |= SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS;
csect->alignment_power = SMTYP_ALIGN (aux.x_csect.x_smtyp);
@@ -2058,6 +2124,22 @@ xcoff_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
/* Try not to give this error too many times. */
(*sym_hash)->flags &= ~XCOFF_MULTIPLY_DEFINED;
}
+
+
+ /* If the symbol is hidden or internal, completely undo
+ any dynamic link state. */
+ if ((*sym_hash)->flags & XCOFF_DEF_DYNAMIC
+ && (visibility == SYM_V_HIDDEN
+ || visibility == SYM_V_INTERNAL))
+ (*sym_hash)->flags &= ~XCOFF_DEF_DYNAMIC;
+ else
+ {
+ /* Keep the most constraining visibility. */
+ unsigned short hvis = (*sym_hash)->visibility;
+ if (visibility && ( !hvis || visibility < hvis))
+ (*sym_hash)->visibility = visibility;
+ }
+
}
/* _bfd_generic_link_add_one_symbol may call the linker to
@@ -2650,6 +2732,11 @@ xcoff_auto_export_p (struct bfd_link_info *info,
if (h->root.root.string[0] == '.')
return false;
+ /* Don't export hidden or internal symbols. */
+ if (h->visibility == SYM_V_HIDDEN
+ || h->visibility == SYM_V_INTERNAL)
+ return false;
+
/* We don't export a symbol which is being defined by an object
included from an archive which contains a shared object. The
rationale is that if an archive contains both an unshared and
@@ -2812,7 +2899,7 @@ xcoff_mark_symbol (struct bfd_link_info *info, struct xcoff_link_hash_entry *h)
/* A function descriptor uses two relocs: one for the
associated code, and one for the TOC address. */
- xcoff_hash_table (info)->ldrel_count += 2;
+ xcoff_hash_table (info)->ldinfo.ldrel_count += 2;
sec->reloc_count += 2;
/* Mark the function itself. */
@@ -2884,7 +2971,7 @@ xcoff_mark_symbol (struct bfd_link_info *info, struct xcoff_link_hash_entry *h)
/* Allocate room for a static and dynamic R_TOC
relocation. */
- ++xcoff_hash_table (info)->ldrel_count;
+ ++xcoff_hash_table (info)->ldinfo.ldrel_count;
++hds->toc_section->reloc_count;
/* Set the index to -2 to force this symbol to
@@ -3048,7 +3135,7 @@ xcoff_mark (struct bfd_link_info *info, asection *sec)
if ((sec->flags & SEC_DEBUGGING) == 0
&& xcoff_need_ldrel_p (info, rel, h, sec))
{
- ++xcoff_hash_table (info)->ldrel_count;
+ ++xcoff_hash_table (info)->ldinfo.ldrel_count;
if (h != NULL)
h->flags |= XCOFF_LDREL;
}
@@ -3131,6 +3218,17 @@ xcoff_sweep (struct bfd_link_info *info)
}
}
+/* Initialize the back-end with linker infos. */
+
+bool
+bfd_xcoff_link_init (struct bfd_link_info *info,
+ struct bfd_xcoff_link_params *params)
+{
+ xcoff_hash_table (info)->params = params;
+
+ return true;
+}
+
/* Record the number of elements in a set. This is used to output the
correct csect length. */
@@ -3248,6 +3346,19 @@ bfd_xcoff_export_symbol (bfd *output_bfd,
if (bfd_get_flavour (output_bfd) != bfd_target_xcoff_flavour)
return true;
+ /* As AIX linker, symbols exported with hidden visibility are
+ silently ignored. */
+ if (h->visibility == SYM_V_HIDDEN)
+ return true;
+
+ if (h->visibility == SYM_V_INTERNAL)
+ {
+ _bfd_error_handler (_("%pB: cannot export internal symbol `%s`."),
+ output_bfd, h->root.root.string);
+ bfd_set_error (bfd_error_bad_value);
+ return false;
+ }
+
h->flags |= XCOFF_EXPORT;
/* FIXME: I'm not at all sure what syscall is supposed to mean, so
@@ -3299,7 +3410,7 @@ bfd_xcoff_link_count_reloc (bfd *output_bfd,
if (xcoff_hash_table (info)->loader_section)
{
h->flags |= XCOFF_LDREL;
- ++xcoff_hash_table (info)->ldrel_count;
+ ++xcoff_hash_table (info)->ldinfo.ldrel_count;
}
/* Mark the symbol to avoid garbage collection. */
@@ -3590,12 +3701,11 @@ xcoff_keep_symbol_p (struct bfd_link_info *info, bfd *input_bfd,
return 1;
}
-/* Lay out the .loader section, filling in the header and the import paths.
- LIBPATH is as for bfd_xcoff_size_dynamic_sections. */
+/* Compute the current size of the .loader section. Start filling
+ its header but it will be finalized in xcoff_build_loader_section. */
static bool
-xcoff_build_loader_section (struct xcoff_loader_info *ldinfo,
- const char *libpath)
+xcoff_size_loader_section (struct xcoff_loader_info *ldinfo)
{
bfd *output_bfd;
struct xcoff_link_hash_table *htab;
@@ -3604,7 +3714,18 @@ xcoff_build_loader_section (struct xcoff_loader_info *ldinfo,
bfd_size_type stoff;
size_t impsize, impcount;
asection *lsec;
- char *out;
+
+ output_bfd = ldinfo->output_bfd;
+ htab = xcoff_hash_table (ldinfo->info);
+ ldhdr = &htab->ldhdr;
+
+ /* If this function has already been called (ie l_version is set)
+ and the number of symbols or relocations haven't changed since
+ last call, the size is already known. */
+ if (ldhdr->l_version != 0
+ && ldhdr->l_nsyms == ldinfo->ldsym_count
+ && ldhdr->l_nreloc == ldinfo->ldrel_count)
+ return true;
/* Work out the size of the import file names. Each import file ID
consists of three null terminated strings: the path, the file
@@ -3612,31 +3733,31 @@ xcoff_build_loader_section (struct xcoff_loader_info *ldinfo,
of names is the path to use to find objects, which the linker has
passed in as the libpath argument. For some reason, the path
entry in the other import file names appears to always be empty. */
- output_bfd = ldinfo->output_bfd;
- htab = xcoff_hash_table (ldinfo->info);
- impsize = strlen (libpath) + 3;
- impcount = 1;
- for (fl = htab->imports; fl != NULL; fl = fl->next)
+ if (ldhdr->l_nimpid == 0)
{
- ++impcount;
- impsize += (strlen (fl->path)
- + strlen (fl->file)
- + strlen (fl->member)
- + 3);
+ impsize = strlen (ldinfo->libpath) + 3;
+ impcount = 1;
+ for (fl = htab->imports; fl != NULL; fl = fl->next)
+ {
+ ++impcount;
+ impsize += (strlen (fl->path)
+ + strlen (fl->file)
+ + strlen (fl->member)
+ + 3);
+ }
+ ldhdr->l_istlen = impsize;
+ ldhdr->l_nimpid = impcount;
}
/* Set up the .loader section header. */
- ldhdr = &htab->ldhdr;
ldhdr->l_version = bfd_xcoff_ldhdr_version(output_bfd);
ldhdr->l_nsyms = ldinfo->ldsym_count;
- ldhdr->l_nreloc = htab->ldrel_count;
- ldhdr->l_istlen = impsize;
- ldhdr->l_nimpid = impcount;
+ ldhdr->l_nreloc = ldinfo->ldrel_count;
ldhdr->l_impoff = (bfd_xcoff_ldhdrsz (output_bfd)
+ ldhdr->l_nsyms * bfd_xcoff_ldsymsz (output_bfd)
+ ldhdr->l_nreloc * bfd_xcoff_ldrelsz (output_bfd));
ldhdr->l_stlen = ldinfo->string_size;
- stoff = ldhdr->l_impoff + impsize;
+ stoff = ldhdr->l_impoff + ldhdr->l_istlen;
if (ldinfo->string_size == 0)
ldhdr->l_stoff = 0;
else
@@ -3650,62 +3771,19 @@ xcoff_build_loader_section (struct xcoff_loader_info *ldinfo,
ldhdr->l_rldoff = (bfd_xcoff_ldhdrsz (output_bfd)
+ ldhdr->l_nsyms * bfd_xcoff_ldsymsz (output_bfd));
- /* We now know the final size of the .loader section. Allocate
- space for it. */
+ /* Save the size of the .loader section. */
lsec = htab->loader_section;
lsec->size = stoff + ldhdr->l_stlen;
- lsec->contents = bfd_zalloc (output_bfd, lsec->size);
- if (lsec->contents == NULL)
- return false;
-
- /* Set up the header. */
- bfd_xcoff_swap_ldhdr_out (output_bfd, ldhdr, lsec->contents);
-
- /* Set up the import file names. */
- out = (char *) lsec->contents + ldhdr->l_impoff;
- strcpy (out, libpath);
- out += strlen (libpath) + 1;
- *out++ = '\0';
- *out++ = '\0';
- for (fl = htab->imports; fl != NULL; fl = fl->next)
- {
- const char *s;
-
- s = fl->path;
- while ((*out++ = *s++) != '\0')
- ;
- s = fl->file;
- while ((*out++ = *s++) != '\0')
- ;
- s = fl->member;
- while ((*out++ = *s++) != '\0')
- ;
- }
-
- BFD_ASSERT ((bfd_size_type) ((bfd_byte *) out - lsec->contents) == stoff);
-
- /* Set up the symbol string table. */
- if (ldinfo->string_size > 0)
- {
- memcpy (out, ldinfo->strings, ldinfo->string_size);
- free (ldinfo->strings);
- ldinfo->strings = NULL;
- }
-
- /* We can't set up the symbol table or the relocs yet, because we
- don't yet know the final position of the various sections. The
- .loader symbols are written out when the corresponding normal
- symbols are written out in xcoff_link_input_bfd or
- xcoff_write_global_symbol. The .loader relocs are written out
- when the corresponding normal relocs are handled in
- xcoff_link_input_bfd. */
return true;
}
-/* Build the .loader section. This is called by the XCOFF linker
+/* Prepare the .loader section. This is called by the XCOFF linker
emulation before_allocation routine. We must set the size of the
- .loader section before the linker lays out the output file.
+ .loader section before the linker lays out the output file. However,
+ some symbols or relocations might be append to the .loader section
+ when processing the addresses, thus it's not layout right now and
+ its size might change.
LIBPATH is the library path to search for shared objects; this is
normally built from the -L arguments passed to the linker. ENTRY
is the name of the entry point symbol (the -e linker option).
@@ -3734,12 +3812,10 @@ bfd_xcoff_size_dynamic_sections (bfd *output_bfd,
asection **special_sections,
bool rtld)
{
- struct xcoff_loader_info ldinfo;
+ struct xcoff_loader_info *ldinfo;
int i;
asection *sec;
bfd *sub;
- struct bfd_strtab_hash *debug_strtab;
- bfd_byte *debug_contents = NULL;
size_t amt;
if (bfd_get_flavour (output_bfd) != bfd_target_xcoff_flavour)
@@ -3749,14 +3825,18 @@ bfd_xcoff_size_dynamic_sections (bfd *output_bfd,
return true;
}
- ldinfo.failed = false;
- ldinfo.output_bfd = output_bfd;
- ldinfo.info = info;
- ldinfo.auto_export_flags = auto_export_flags;
- ldinfo.ldsym_count = 0;
- ldinfo.string_size = 0;
- ldinfo.strings = NULL;
- ldinfo.string_alc = 0;
+ /* Setup ldinfo. */
+ ldinfo = &(xcoff_hash_table (info)->ldinfo);
+
+ ldinfo->failed = false;
+ ldinfo->output_bfd = output_bfd;
+ ldinfo->info = info;
+ ldinfo->auto_export_flags = auto_export_flags;
+ ldinfo->ldsym_count = 0;
+ ldinfo->string_size = 0;
+ ldinfo->strings = NULL;
+ ldinfo->string_alc = 0;
+ ldinfo->libpath = libpath;
xcoff_data (output_bfd)->maxstack = maxstack;
xcoff_data (output_bfd)->maxdata = maxdata;
@@ -3801,13 +3881,13 @@ bfd_xcoff_size_dynamic_sections (bfd *output_bfd,
The first 3 symbol table indices are reserved to indicate the data,
text and bss sections. */
- BFD_ASSERT (0 == ldinfo.ldsym_count);
+ BFD_ASSERT (0 == ldinfo->ldsym_count);
hsym->ldindx = 3;
- ldinfo.ldsym_count = 1;
+ ldinfo->ldsym_count = 1;
hsym->ldsym = ldsym;
- if (! bfd_xcoff_put_ldsymbol_name (ldinfo.output_bfd, &ldinfo,
+ if (! bfd_xcoff_put_ldsymbol_name (ldinfo->output_bfd, ldinfo,
hsym->ldsym, hsym->root.root.string))
return false;
@@ -3859,8 +3939,8 @@ bfd_xcoff_size_dynamic_sections (bfd *output_bfd,
if (auto_export_flags != 0)
{
xcoff_link_hash_traverse (xcoff_hash_table (info),
- xcoff_mark_auto_exports, &ldinfo);
- if (ldinfo.failed)
+ xcoff_mark_auto_exports, ldinfo);
+ if (ldinfo->failed)
goto error_return;
}
xcoff_sweep (info);
@@ -3885,35 +3965,136 @@ bfd_xcoff_size_dynamic_sections (bfd *output_bfd,
return true;
xcoff_link_hash_traverse (xcoff_hash_table (info), xcoff_post_gc_symbol,
- (void *) &ldinfo);
- if (ldinfo.failed)
+ (void *) ldinfo);
+ if (ldinfo->failed)
goto error_return;
if (xcoff_hash_table (info)->loader_section
- && !xcoff_build_loader_section (&ldinfo, libpath))
+ && !xcoff_size_loader_section (ldinfo))
goto error_return;
+ return true;
+
+ error_return:
+ free (ldinfo->strings);
+ return false;
+}
+
+/* Lay out the .loader section, finalizing its header and
+ filling the import paths */
+static bool
+xcoff_build_loader_section (struct xcoff_loader_info *ldinfo)
+{
+ bfd *output_bfd;
+ asection *lsec;
+ struct xcoff_link_hash_table *htab;
+ struct internal_ldhdr *ldhdr;
+ struct xcoff_import_file *fl;
+ char *out;
+
+ output_bfd = ldinfo->output_bfd;
+ htab = xcoff_hash_table (ldinfo->info);
+ lsec = htab->loader_section;
+ ldhdr = &htab->ldhdr;
+
+ /* We could have called xcoff_size_loader_section one more time.
+ However, this function is called once all the addresses have
+ been layout thus the .loader section shouldn't be changed
+ anymore. */
+ BFD_ASSERT (ldhdr->l_nsyms == ldinfo->ldsym_count);
+ BFD_ASSERT (ldhdr->l_nreloc == ldinfo->ldrel_count);
+
+ /* We now know the final size of the .loader section. Allocate
+ space for it. */
+ lsec->contents = bfd_zalloc (output_bfd, lsec->size);
+ if (lsec->contents == NULL)
+ return false;
+
+ /* Set up the header. */
+ bfd_xcoff_swap_ldhdr_out (output_bfd, ldhdr, lsec->contents);
+
+ /* Set up the import file names. */
+ out = (char *) lsec->contents + ldhdr->l_impoff;
+ strcpy (out, ldinfo->libpath);
+ out += strlen (ldinfo->libpath) + 1;
+ *out++ = '\0';
+ *out++ = '\0';
+ for (fl = htab->imports; fl != NULL; fl = fl->next)
+ {
+ const char *s;
+
+ s = fl->path;
+ while ((*out++ = *s++) != '\0')
+ ;
+ s = fl->file;
+ while ((*out++ = *s++) != '\0')
+ ;
+ s = fl->member;
+ while ((*out++ = *s++) != '\0')
+ ;
+ }
+
+ BFD_ASSERT ((bfd_size_type) ((bfd_byte *) out - lsec->contents) == ldhdr->l_impoff + ldhdr->l_istlen);
+
+ /* Set up the symbol string table. */
+ if (ldinfo->string_size > 0)
+ {
+ memcpy (out, ldinfo->strings, ldinfo->string_size);
+ free (ldinfo->strings);
+ ldinfo->strings = NULL;
+ }
+
+ /* We can't set up the symbol table or the relocs yet, because we
+ don't yet know the final position of the various sections. The
+ .loader symbols are written out when the corresponding normal
+ symbols are written out in xcoff_link_input_bfd or
+ xcoff_write_global_symbol. The .loader relocs are written out
+ when the corresponding normal relocs are handled in
+ xcoff_link_input_bfd. */
+
+ return true;
+}
+
+
+/* Lay out the .loader section and allocate the space for
+ the other dynamic sections of XCOFF. */
+bool
+bfd_xcoff_build_dynamic_sections (bfd *output_bfd,
+ struct bfd_link_info *info)
+{
+ struct xcoff_loader_info *ldinfo;
+ struct bfd_strtab_hash *debug_strtab;
+ bfd_byte *debug_contents = NULL;
+ bfd *sub;
+ asection *sec;
+
+ ldinfo = &(xcoff_hash_table (info)->ldinfo);
+
+ if (xcoff_hash_table (info)->loader_section
+ && !xcoff_build_loader_section (ldinfo))
+ return false;
+
/* Allocate space for the magic sections. */
sec = xcoff_hash_table (info)->linkage_section;
if (sec->size > 0)
{
sec->contents = bfd_zalloc (output_bfd, sec->size);
if (sec->contents == NULL)
- goto error_return;
+ return false;
}
sec = xcoff_hash_table (info)->toc_section;
if (sec->size > 0)
{
sec->contents = bfd_zalloc (output_bfd, sec->size);
if (sec->contents == NULL)
- goto error_return;
+ return false;
}
sec = xcoff_hash_table (info)->descriptor_section;
if (sec->size > 0)
{
sec->contents = bfd_zalloc (output_bfd, sec->size);
if (sec->contents == NULL)
- goto error_return;
+ return false;
}
/* Now that we've done garbage collection, decide which symbols to keep,
@@ -4009,7 +4190,7 @@ bfd_xcoff_size_dynamic_sections (bfd *output_bfd,
keep_p = xcoff_keep_symbol_p (info, sub, &sym, &aux,
*sym_hash, csect, name);
if (keep_p < 0)
- return false;
+ goto error_return;
if (!keep_p)
/* Use a debug_index of -2 to record that a symbol should
@@ -4068,7 +4249,6 @@ bfd_xcoff_size_dynamic_sections (bfd *output_bfd,
return true;
error_return:
- free (ldinfo.strings);
free (debug_contents);
return false;
}
@@ -4108,6 +4288,751 @@ bfd_xcoff_link_generate_rtinit (bfd *abfd,
return true;
}
+
+/* Linker stubs.
+ The stubs will be gathered in stub csects named "@FIX'number'".
+ A new csect will be created by xcoff_stub_get_csect_in_range,
+ everytime a relocation cannot reach its target and its section
+ is too far from the others stub csects.
+ The stubs will simply be code generated inside these stub
+ csects. In order to simplify the symbol table, only the symbols
+ for the stub csects are written.
+
+ As the code is dependent of the architecture, it's defined
+ in the backend.
+
+ xcoff_stub_indirect_call:
+ Used when a 24 bit branch cannot reach its destination and that
+ this destination isn't a global linkage symbol.
+
+ xcoff_stub_shared_call:
+ As above but when it's a global linkage symbol.
+ The main difference being that it doesn't branch to the global
+ linkage symbol which will then call the shared library. It
+ directly call it saving the TOC.
+
+ TODO: -bbigtoc option should be able to be implemented using
+ this stubs. */
+
+/* Get the name of a csect which will contain stubs.
+ It has the same pattern as AIX linker: @FIX"number". */
+static char *
+xcoff_stub_csect_name (unsigned int n)
+{
+ char buf[8];
+ size_t len;
+ char *csect_name;
+
+ /* For now, allow "only" 1000000 stub csects. */
+ if (n >= 1000000)
+ {
+ BFD_FAIL();
+ return NULL;
+ }
+
+ sprintf (buf, "%d", n);
+ len = 4 + strlen (buf) + 1;
+
+ csect_name = bfd_malloc (len);
+ if (csect_name == NULL)
+ return NULL;
+ sprintf (csect_name, "@FIX%d", n);
+
+ return csect_name;
+}
+
+/* Return a stub section which can be reach with a single branch
+ from SECTION. CREATE means that creating a csect is allowed. */
+static struct xcoff_link_hash_entry *
+xcoff_stub_get_csect_in_range (asection *section,
+ struct bfd_link_info *info,
+ bool create)
+{
+ struct xcoff_link_hash_table *htab = xcoff_hash_table (info);
+ struct xcoff_link_hash_entry *csect_entry;
+ struct bfd_link_hash_entry *bh = NULL;
+ asection *csect;
+ unsigned int it;
+ char *csect_name;
+
+ /* Search for a csect in range. */
+ for (csect = htab->params->stub_bfd->sections, it = 0;
+ csect != NULL;
+ csect = csect->next, it++)
+ {
+ /* A csect is in range if everything instructions in SECTION
+ can branch to every stubs in the stub csect. This can
+ be simplify by saying that the first entry of each sections
+ (ie the vma of this section) can reach the last entry of the
+ stub csect (ie the vma of the csect + its size).
+ However, as the stub csect might be growing its size isn't
+ fixed. Thus, the last entry of SECTION might not be able
+ to reach the first entry of the stub csect anymore.
+ If this case happens, the following condition will be
+ false during the next pass of bfd_xcoff_size_stubs and
+ another csect will be used.
+ This means we might create more stubs than needed. */
+ bfd_vma csect_vma, section_vma;
+ bfd_vma csect_last_vma, section_last_vma;
+
+ csect_vma = (csect->output_section->vma
+ + csect->output_offset);
+ csect_last_vma = (csect->output_section->vma
+ + csect->output_offset
+ + csect->size);
+ section_vma = (section->output_section->vma
+ + section->output_offset);
+ section_last_vma = (section->output_section->vma
+ + section->output_offset
+ + section->size);
+
+ if (csect_last_vma - section_vma + (1 << 25) < 2 * (1 << 25)
+ && section_last_vma - csect_vma + (1 << 25) < 2 * (1 << 25))
+ break;
+ }
+
+ if (!create && csect == NULL)
+ return NULL;
+
+ csect_name = xcoff_stub_csect_name (it);
+ if (!csect_name)
+ return NULL;
+
+ /* A stub csect already exists, get its entry. */
+ if (csect != NULL)
+ {
+ csect_entry = xcoff_link_hash_lookup (htab, csect_name, false, false, true);
+ free(csect_name);
+ return csect_entry;
+ }
+
+ /* Create the csect and its symbol. */
+ csect = (*htab->params->add_stub_section) (".pr", section);
+ if (!csect)
+ {
+ free(csect_name);
+ return NULL;
+ }
+
+ csect->alignment_power = 2;
+ csect->gc_mark = 1;
+ csect->reloc_count = 0;
+
+ /* We need to associate a VMA to this new csect. Otherwise,
+ our "in range" algorithm won't find it for the next stub.
+ And as we will be adding this stub section just after the
+ SECTION, we know its address. */
+ csect->output_offset = BFD_ALIGN (section->output_offset + section->size,
+ 4);
+
+ if (!_bfd_generic_link_add_one_symbol (info, htab->params->stub_bfd,
+ csect_name, BSF_GLOBAL, csect, 0,
+ NULL, true, true, &bh))
+ {
+ free(csect_name);
+ return NULL;
+ }
+
+ csect_entry = (struct xcoff_link_hash_entry *)bh;
+ csect_entry->smclas = XMC_PR;
+ csect_entry->flags = XCOFF_MARK | XCOFF_DEF_REGULAR;
+
+ free(csect_name);
+ return csect_entry;
+}
+
+
+/* Build a name for an entry in the stub hash table. */
+static char *
+xcoff_stub_name (const struct xcoff_link_hash_entry *h,
+ const struct xcoff_link_hash_entry *hcsect)
+{
+ char *stub_name;
+ size_t len;
+
+ if (h)
+ {
+ /* The name of a stub is based on its stub csect and the
+ symbol it wants to reach. It looks like: ".@FIX0.tramp.f".
+ When the stub targets a function, the last dot of ".tramp."
+ is removed to avoid having two dot. */
+ len = (1 + 6
+ + strlen (hcsect->root.root.string)
+ + strlen (h->root.root.string)
+ + 1);
+ if (h->root.root.string[0] != '.')
+ len++;
+
+ stub_name = bfd_malloc (len);
+ if (stub_name == NULL)
+ return stub_name;
+
+ if (h->root.root.string[0] == '.')
+ sprintf (stub_name, ".%s.tramp%s",
+ hcsect->root.root.string,
+ h->root.root.string);
+ else
+ sprintf (stub_name, ".%s.tramp.%s",
+ hcsect->root.root.string,
+ h->root.root.string);
+ }
+ else
+ {
+ BFD_FAIL();
+ return NULL;
+ }
+
+ return stub_name;
+}
+
+/* Look up an entry in the stub hash. */
+struct xcoff_stub_hash_entry *
+bfd_xcoff_get_stub_entry (asection *section,
+ struct xcoff_link_hash_entry *h,
+ struct bfd_link_info *info)
+{
+ struct xcoff_link_hash_table *htab = xcoff_hash_table (info);
+ struct xcoff_link_hash_entry *hcsect;
+ struct xcoff_stub_hash_entry *hstub;
+ char *stub_name;
+
+ hcsect = xcoff_stub_get_csect_in_range (section, info, false);
+ if (!hcsect)
+ return NULL;
+
+ stub_name = xcoff_stub_name (h, hcsect);
+ if (stub_name == NULL)
+ return NULL;
+
+ hstub = xcoff_stub_hash_lookup (&htab->stub_hash_table,
+ stub_name, false, false);
+
+ free (stub_name);
+ return hstub;
+}
+
+/* Check if the symbol targeted by IREL is reachable.
+ Return the type of stub needed otherwise. */
+enum xcoff_stub_type
+bfd_xcoff_type_of_stub (asection *sec,
+ const struct internal_reloc *irel,
+ bfd_vma destination,
+ struct xcoff_link_hash_entry *h)
+{
+ bfd_vma location, offset, max_offset;
+
+ switch (irel->r_type)
+ {
+ default:
+ return xcoff_stub_none;
+
+ case R_BR:
+ case R_RBR:
+ location = (sec->output_section->vma
+ + sec->output_offset
+ + irel->r_vaddr
+ - sec->vma);
+
+ max_offset = 1 << 25 ;
+
+ offset = destination - location;
+
+ if (offset + max_offset < 2 * max_offset)
+ return xcoff_stub_none;
+
+ /* A stub is needed. Now, check that we can make one. */
+ if (h != NULL
+ && h->descriptor != NULL)
+ {
+ /* Not sure how to handle this case. For now, skip it. */
+ if (bfd_is_abs_section (h->root.u.def.section))
+ return xcoff_stub_none;
+
+ if (h->smclas == XMC_GL)
+ return xcoff_stub_shared_call;
+ else
+ return xcoff_stub_indirect_call;
+ }
+ break;
+ }
+
+ return xcoff_stub_none;
+}
+
+/* Add a new stub entry to the stub hash. Not all fields of the new
+ stub entry are initialised. */
+static struct xcoff_stub_hash_entry *
+xcoff_add_stub (const char *stub_name,
+ struct xcoff_link_hash_entry *hstub_csect,
+ struct xcoff_link_hash_entry *htarget,
+ struct bfd_link_info *info,
+ enum xcoff_stub_type stub_type)
+{
+ struct xcoff_link_hash_table *htab = xcoff_hash_table (info);
+ struct xcoff_stub_hash_entry *hstub;
+ bfd_vma stub_offset;
+ asection *stub_csect;
+
+ stub_csect = hstub_csect->root.u.def.section;
+ stub_offset = stub_csect->size;
+
+ /* Update the relocation counter and the size of
+ the containing csect. The size is needed for
+ the algorithm in xcoff_stub_get_csect_in_range. */
+ switch (stub_type)
+ {
+ default:
+ BFD_FAIL ();
+ return NULL;
+
+ case xcoff_stub_indirect_call:
+ stub_csect->reloc_count++;
+ stub_csect->size += bfd_xcoff_stub_indirect_call_size (info->output_bfd);
+ break;
+
+ case xcoff_stub_shared_call:
+ stub_csect->reloc_count++;
+ stub_csect->size += bfd_xcoff_stub_shared_call_size (info->output_bfd);
+ break;
+ }
+
+ /* Create the stub entry. */
+ hstub = xcoff_stub_hash_lookup (&htab->stub_hash_table, stub_name,
+ true, true);
+ if (hstub == NULL)
+ return NULL;
+
+ hstub->htarget = htarget;
+ hstub->stub_offset = stub_offset;
+
+ /* For indirect call or shared call, the relocations are against
+ the target descriptor. Its toc entry will be used. */
+ if (stub_type == xcoff_stub_indirect_call
+ || stub_type == xcoff_stub_shared_call)
+ {
+ struct xcoff_link_hash_entry *hds = htarget->descriptor;
+ asection *hds_section = hds->root.u.def.section;
+
+ hstub->htarget = hds;
+
+ /* If the symbol haven't been marked, its section might have
+ its size and its relocation count been deleted by xcoff_sweep.
+ Restore it. */
+ if ((hds->flags & XCOFF_MARK) == 0)
+ {
+ if (hds_section->size == 0
+ && hds_section->reloc_count == 0
+ && hds_section->rawsize != 0)
+ {
+ hds_section->size = hds_section->rawsize;
+ /* Always two relocations for a XMC_DS symbol. */
+ hds_section->reloc_count = 2;
+ }
+
+ /* Mark the section and the symbol. */
+ if (!xcoff_mark (info, hds_section))
+ return NULL;
+ }
+
+ /* Add a TOC entry for the descriptor if non exists. */
+ if (hds->toc_section == NULL)
+ {
+ int byte_size;
+
+ if (bfd_xcoff_is_xcoff64 (info->output_bfd))
+ byte_size = 8;
+ else if (bfd_xcoff_is_xcoff32 (info->output_bfd))
+ byte_size = 4;
+ else
+ return NULL;
+
+ /* Allocate room in the fallback TOC section. */
+ hds->toc_section = xcoff_hash_table (info)->toc_section;
+ hds->u.toc_offset = hds->toc_section->size;
+ hds->toc_section->size += byte_size;
+ if (!xcoff_mark (info, hds->toc_section))
+ return NULL;
+
+ /* Update relocation counters for a static and dynamic
+ R_TOC relocation. */
+ ++hds->toc_section->reloc_count;
+ ++htab->ldinfo.ldrel_count;
+
+ /* Set the index to -2 to force this symbol to
+ get written out. */
+ hds->indx = -2;
+ hds->flags |= XCOFF_SET_TOC;
+ }
+ }
+
+ return hstub;
+}
+
+static bool
+xcoff_build_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
+{
+ struct xcoff_stub_hash_entry *hstub
+ = (struct xcoff_stub_hash_entry *) gen_entry;
+
+ bfd *stub_bfd;
+ bfd *output_bfd;
+ struct bfd_link_info *info;
+ bfd_byte *loc;
+ bfd_byte *p;
+ unsigned int i;
+
+ info = (struct bfd_link_info *) in_arg;
+ stub_bfd = xcoff_hash_table (info)->params->stub_bfd;
+ output_bfd = info->output_bfd;
+
+ /* Fail if the target section could not be assigned to an output
+ section. The user should fix his linker script. */
+ if (hstub->target_section != NULL
+ && hstub->target_section->output_section == NULL
+ && info->non_contiguous_regions)
+ info->callbacks->einfo (_("%F%P: Could not assign '%pA' to an output section. "
+ "Retry without --enable-non-contiguous-regions.\n"),
+ hstub->target_section);
+
+ loc = (hstub->hcsect->root.u.def.section->contents
+ + hstub->stub_offset);
+ p = loc;
+
+ switch (hstub->stub_type)
+ {
+ case xcoff_stub_indirect_call:
+ BFD_ASSERT (hstub->htarget->toc_section != NULL);
+ /* The first instruction in the stub code needs to be
+ cooked to hold the correct offset in the toc. It will
+ be filled by xcoff_stub_create_relocations. */
+ for (i = 0; i < bfd_xcoff_stub_indirect_call_size(output_bfd) / 4; i++)
+ bfd_put_32 (stub_bfd,
+ (bfd_vma) bfd_xcoff_stub_indirect_call_code(output_bfd, i),
+ &p[4 * i]);
+ break;
+
+ case xcoff_stub_shared_call:
+ BFD_ASSERT (hstub->htarget->toc_section != NULL);
+ /* The first instruction in the glink code needs to be
+ cooked to hold the correct offset in the toc. It will
+ be filled by xcoff_stub_create_relocations. */
+ for (i = 0; i < bfd_xcoff_stub_shared_call_size(output_bfd) / 4; i++)
+ bfd_put_32 (stub_bfd,
+ (bfd_vma) bfd_xcoff_stub_shared_call_code(output_bfd, i),
+ &p[4 * i]);
+
+ break;
+
+ default:
+ BFD_FAIL ();
+ return false;
+ }
+ return true;
+}
+
+/* Check relocations and adds stubs if needed. */
+
+bool
+bfd_xcoff_size_stubs (struct bfd_link_info *info)
+{
+ struct xcoff_link_hash_table *htab = xcoff_hash_table (info);
+ struct xcoff_loader_info *ldinfo = &(htab->ldinfo);
+
+ while (1)
+ {
+ bfd *input_bfd;
+ bool stub_changed = false;
+
+ for (input_bfd = info->input_bfds;
+ input_bfd != NULL;
+ input_bfd = input_bfd->link.next)
+ {
+ asection *section;
+ bfd_size_type symcount;
+ bfd_size_type symesz;
+ bfd_byte *esyms;
+
+ if (bfd_get_flavour (input_bfd) != bfd_target_xcoff_flavour)
+ continue;
+
+ symcount = obj_raw_syment_count (input_bfd);
+ if (!symcount)
+ continue;
+ symesz = bfd_coff_symesz (input_bfd);
+ esyms = (bfd_byte *) obj_coff_external_syms (input_bfd);
+
+ /* Walk over each section attached to the input bfd. */
+ for (section = input_bfd->sections;
+ section != NULL;
+ section = section->next)
+ {
+ struct internal_reloc *internal_relocs;
+ struct internal_reloc *irel, *irelend;
+
+ /* If there aren't any relocs, then there's nothing more
+ to do. */
+ if ((section->flags & SEC_RELOC) == 0
+ || section->reloc_count == 0)
+ continue;
+
+ /* If this section is a link-once section that will be
+ discarded, then don't create any stubs. */
+ if (section->output_section == NULL
+ || section->output_section->owner != info->output_bfd)
+ continue;
+
+ /* This section have been garbage-collected. */
+ if (section->gc_mark == 0)
+ continue;
+
+ /* Read in the relocs. */
+ internal_relocs = (xcoff_read_internal_relocs
+ (input_bfd, section, true, NULL,
+ false, NULL));
+ if (internal_relocs == NULL)
+ goto error_ret;
+
+ irel = internal_relocs;
+ irelend = irel + section->reloc_count;
+ for (; irel < irelend; irel++)
+ {
+ enum xcoff_stub_type stub_type;
+ struct xcoff_link_hash_entry *hsym = NULL;
+ struct xcoff_link_hash_entry *hstub_csect = NULL;
+ struct xcoff_stub_hash_entry *hstub = NULL;
+ asection *sym_sec;
+ bfd_vma sym_value;
+ bfd_vma destination;
+ char *stub_name;
+
+ if (irel->r_symndx == -1)
+ continue;
+
+ switch (irel->r_type)
+ {
+ default:
+ continue;
+
+ case R_BR:
+ case R_RBR:
+ break;
+ }
+
+ /* Retrieve targeted symbol address */
+ hsym = obj_xcoff_sym_hashes (input_bfd)[irel->r_symndx];
+ if (hsym == NULL)
+ {
+ struct internal_syment sym;
+ if ((long unsigned int)irel->r_symndx > symcount)
+ {
+ BFD_FAIL();
+ goto error_ret;
+ }
+
+ bfd_coff_swap_sym_in (input_bfd,
+ (void *) esyms + irel->r_symndx * symesz,
+ (void *) &sym);
+
+ sym_sec = xcoff_data (input_bfd)->csects[irel->r_symndx];
+ sym_value = sym.n_value - sym_sec->vma;
+
+ destination = (sym_value
+ + sym_sec->output_section->vma
+ + sym_sec->output_offset);
+ }
+ else if (hsym->root.type == bfd_link_hash_defined
+ || hsym->root.type == bfd_link_hash_defweak)
+ {
+ sym_sec = hsym->root.u.def.section;
+ sym_value = hsym->root.u.def.value;
+ destination = (sym_value
+ + sym_sec->output_section->vma
+ + sym_sec->output_offset);
+ }
+ else
+ {
+ bfd_set_error (bfd_error_bad_value);
+ goto error_ret;
+ }
+
+ /* I'm not sure how to handle this case. Skip it for now. */
+ if (bfd_is_abs_section (sym_sec))
+ continue;
+
+ stub_type = bfd_xcoff_type_of_stub (section, irel, destination, hsym);
+
+ if (stub_type == xcoff_stub_none)
+ continue;
+
+ /* Get a stub csect in ranch. */
+ hstub_csect = xcoff_stub_get_csect_in_range (section, info, true);
+ if (!hstub_csect)
+ {
+ /* xgettext:c-format */
+ _bfd_error_handler (_("%pB: Unable to find a stub csect in range"
+ "of relocation at %#" PRIx64 " targeting"
+ "'%s'"),
+ section->owner, (uint64_t) irel->r_vaddr,
+ hsym->root.root.string);
+ goto error_ret;
+ }
+
+ /* Get the name of this stub. */
+ stub_name = xcoff_stub_name (hsym, hstub_csect);
+ if (!stub_name)
+ goto error_ret;
+
+ hstub = xcoff_stub_hash_lookup (&(xcoff_hash_table (info)->stub_hash_table),
+ stub_name, false, false);
+
+ /* A stub entry inside the in range csect already exists. */
+ if (hstub != NULL)
+ {
+ free (stub_name);
+ continue;
+ }
+
+ stub_changed = true;
+
+ hstub = xcoff_add_stub (stub_name, hstub_csect, hsym, info, stub_type);
+ if (hstub == NULL)
+ {
+ /* xgettext:c-format */
+ _bfd_error_handler (_("%pB: Cannot create stub entry '%s'"),
+ section->owner, stub_name);
+ free (stub_name);
+ goto error_ret;
+ }
+
+ hstub->stub_type = stub_type;
+ hstub->hcsect = hstub_csect;
+ hstub->target_section = sym_sec;
+ free (stub_name);
+ }
+ }
+ }
+
+ if (!stub_changed)
+ break;
+
+ /* Update the size of the loader. */
+ if (xcoff_hash_table (info)->loader_section
+ && !xcoff_size_loader_section (ldinfo))
+ goto error_ret;
+
+ /* Ask the linker to do its stuff. */
+ (*htab->params->layout_sections_again) ();
+
+ }
+ return true;
+
+ error_ret:
+ bfd_set_error (bfd_error_bad_value);
+ return false;
+}
+
+bool
+bfd_xcoff_build_stubs (struct bfd_link_info *info)
+{
+ struct xcoff_link_hash_table *htab = xcoff_hash_table (info);
+ asection *stub_sec;
+
+ for (stub_sec = htab->params->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->params->stub_bfd, size);
+ if (stub_sec->contents == NULL && size != 0)
+ return false;
+
+ }
+
+ /* Build the stubs as directed by the stub hash table. */
+ bfd_hash_traverse (&htab->stub_hash_table, xcoff_build_one_stub, info);
+ return true;
+}
+
+/* Create and apply relocations made by a stub entry. */
+static bool
+xcoff_stub_create_relocations (struct bfd_hash_entry *bh, void * inf)
+{
+ struct xcoff_stub_hash_entry *hstub
+ = (struct xcoff_stub_hash_entry *) bh;
+ struct xcoff_final_link_info *flinfo
+ = (struct xcoff_final_link_info *) inf;
+
+ bfd *output_bfd;
+ struct internal_reloc *irel;
+ struct xcoff_link_hash_entry **rel_hash;
+ struct xcoff_link_hash_entry *htarget;
+ asection *sec, *osec;
+ bfd_vma off;
+ bfd_byte *p;
+
+ htarget = hstub->htarget;
+ sec = hstub->hcsect->root.u.def.section;
+ osec = sec->output_section;
+
+ irel = (flinfo->section_info[osec->target_index].relocs
+ + osec->reloc_count);
+ rel_hash = (flinfo->section_info[osec->target_index].rel_hashes
+ + osec->output_section->reloc_count);
+ *rel_hash = NULL;
+ output_bfd = flinfo->output_bfd;
+
+ irel->r_symndx = htarget->indx;
+ irel->r_vaddr = (osec->vma
+ + sec->output_offset
+ + hstub->hcsect->root.u.def.value
+ + hstub->stub_offset);
+
+ p = (sec->contents
+ + hstub->stub_offset);
+
+ switch (hstub->stub_type)
+ {
+ default:
+ BFD_FAIL ();
+ return false;
+
+ /* The first instruction of this stub code need
+ a R_TOC relocation. */
+ case xcoff_stub_indirect_call:
+ case xcoff_stub_shared_call:
+ irel->r_size = 0xf;
+ irel->r_type = R_TOC;
+
+ /* Retrieve the toc offset of the target which is
+ a function descriptor. */
+ BFD_ASSERT (htarget->toc_section != NULL);
+ if ((htarget->flags & XCOFF_SET_TOC) != 0)
+ off = hstub->htarget->u.toc_offset;
+ else
+ off = (htarget->toc_section->output_section->vma
+ + htarget->toc_section->output_offset
+ - xcoff_data (flinfo->output_bfd)->toc);
+ if ((off & 0xffff) != off)
+ {
+ _bfd_error_handler
+ (_("TOC overflow during stub generation; try -mminimal-toc "
+ "when compiling"));
+ bfd_set_error (bfd_error_file_too_big);
+ return false;
+ }
+
+ bfd_put_16 (output_bfd, off & 0xffff, p+2);
+ break;
+ }
+
+ ++osec->reloc_count;
+ return true;
+}
+
+
/* Return the section that defines H. Return null if no section does. */
static asection *
@@ -4572,6 +5497,13 @@ xcoff_link_input_bfd (struct xcoff_final_link_info *flinfo,
- (*csectpp)->vma);
}
+ /* Update visibility. */
+ if (*sym_hash)
+ {
+ isym.n_type &= ~SYM_V_MASK;
+ isym.n_type |= (*sym_hash)->visibility;
+ }
+
/* Output the symbol. */
bfd_coff_swap_sym_out (output_bfd, (void *) &isym, (void *) outsym);
@@ -4932,8 +5864,6 @@ xcoff_link_input_bfd (struct xcoff_final_link_info *flinfo,
/* Adjust the reloc address and symbol index. */
- irel->r_vaddr += offset;
-
r_symndx = irel->r_symndx;
if (r_symndx == -1)
@@ -4941,8 +5871,48 @@ xcoff_link_input_bfd (struct xcoff_final_link_info *flinfo,
else
h = obj_xcoff_sym_hashes (input_bfd)[r_symndx];
+ /* In case of a R_BR or R_RBR, change the target if
+ a stub is being called. */
+ if (h != NULL
+ && (irel->r_type == R_BR
+ || irel->r_type == R_RBR))
+ {
+ asection *sym_sec;
+ bfd_vma dest;
+ struct xcoff_stub_hash_entry *hstub = NULL;
+ enum xcoff_stub_type stub_type;
+
+ if (h->root.type == bfd_link_hash_defined
+ || h->root.type == bfd_link_hash_defweak)
+ {
+ sym_sec = h->root.u.def.section;
+ dest = (h->root.u.def.value
+ + sym_sec->output_section->vma
+ + sym_sec->output_offset);
+ }
+ else
+ {
+ BFD_FAIL ();
+ goto err_out;
+ }
+
+ stub_type = bfd_xcoff_type_of_stub (o, irel, dest, h);
+ if (stub_type != xcoff_stub_none)
+ {
+ hstub = bfd_xcoff_get_stub_entry (o, h, flinfo->info);
+ if (hstub == NULL)
+ goto err_out;
+
+ h = hstub->hcsect;
+ }
+
+ }
+
+ irel->r_vaddr += offset;
+
if (r_symndx != -1 && flinfo->info->strip != strip_all)
{
+
if (h != NULL
&& h->smclas != XMC_TD
&& (irel->r_type == R_TOC
@@ -5457,8 +6427,6 @@ xcoff_write_global_symbol (struct bfd_hash_entry *bh, void * inf)
irel->r_symndx = obj_raw_syment_count (output_bfd);
}
- BFD_ASSERT (h->ldindx >= 0);
-
/* Initialize the aux union here instead of closer to when it is
written out below because the length of the csect depends on
whether the output is 32 or 64 bit. */
@@ -5490,9 +6458,43 @@ xcoff_write_global_symbol (struct bfd_hash_entry *bh, void * inf)
flinfo->section_info[oindx].rel_hashes[osec->reloc_count] = NULL;
++osec->reloc_count;
- if (!xcoff_create_ldrel (output_bfd, flinfo, osec,
- output_bfd, irel, NULL, h))
- return false;
+ /* There are two kind of linker-created TOC entry.
+ The ones importing their symbols from outside, made for the
+ global linkage. These symbols have XCOFF_LDREL set and only
+ requires a loader relocation on their imported symbol.
+ On the other hand, symbols without XCOFF_LDREL are TOC entries
+ of internal symbols (like function descriptors made for stubs).
+ These symbols needs a loader relocation over .data and this
+ relocation must be applied. */
+
+ if ((h->flags & XCOFF_LDREL) != 0
+ && h->ldindx >= 0)
+ {
+ if (!xcoff_create_ldrel (output_bfd, flinfo, osec,
+ output_bfd, irel, NULL, h))
+ return false;
+ }
+ else
+ {
+ bfd_byte *p;
+ bfd_vma val;
+
+ p = tocsec->contents + h->u.toc_offset;
+ val = (h->root.u.def.value
+ + h->root.u.def.section->output_section->vma
+ + h->root.u.def.section->output_offset);
+
+ if (bfd_xcoff_is_xcoff64 (output_bfd))
+ bfd_put_64 (output_bfd, val, p);
+ else if (bfd_xcoff_is_xcoff32 (output_bfd))
+ bfd_put_32 (output_bfd, val, p);
+ else
+ return false;
+
+ if (!xcoff_create_ldrel (output_bfd, flinfo, osec,
+ output_bfd, irel, h->root.u.def.section, h))
+ return false;
+ }
/* We need to emit a symbol to define a csect which holds
the reloc. */
@@ -5719,7 +6721,12 @@ xcoff_write_global_symbol (struct bfd_hash_entry *bh, void * inf)
isym.n_sclass = C_HIDEXT;
aux.x_csect.x_smtyp = XTY_SD;
- if ((h->flags & XCOFF_HAS_SIZE) != 0)
+ /* For stub symbols, the section already has its correct size. */
+ if (h->root.u.def.section->owner == xcoff_hash_table (flinfo->info)->params->stub_bfd)
+ {
+ aux.x_csect.x_scnlen.l = h->root.u.def.section->size;
+ }
+ else if ((h->flags & XCOFF_HAS_SIZE) != 0)
{
for (l = xcoff_hash_table (flinfo->info)->size_list;
l != NULL;
@@ -6286,8 +7293,20 @@ _bfd_xcoff_bfd_final_link (bfd *abfd, struct bfd_link_info *info)
sub = p->u.indirect.section->owner;
if (! sub->output_has_begun)
{
- if (! xcoff_link_input_bfd (&flinfo, sub))
- goto error_return;
+ if (sub == xcoff_hash_table (info)->params->stub_bfd)
+ {
+ continue;
+ }
+ else
+ {
+ if (! xcoff_link_input_bfd (&flinfo, sub))
+ {
+ _bfd_error_handler
+ (_("Unable to link input file: %s"), sub->filename);
+ bfd_set_error (bfd_error_sorry);
+ goto error_return;
+ }
+ }
sub->output_has_begun = true;
}
}
@@ -6334,6 +7353,12 @@ _bfd_xcoff_bfd_final_link (bfd *abfd, struct bfd_link_info *info)
input files. */
bfd_hash_traverse (&info->hash->table, xcoff_write_global_symbol, &flinfo);
+ /* Write out the relocations created by stub entries. The symbols
+ will have been already written by xcoff_write_global_symbol. */
+ bfd_hash_traverse (&xcoff_hash_table(info)->stub_hash_table,
+ xcoff_stub_create_relocations,
+ &flinfo);
+
free (flinfo.outsyms);
flinfo.outsyms = NULL;
@@ -6434,6 +7459,19 @@ _bfd_xcoff_bfd_final_link (bfd *abfd, struct bfd_link_info *info)
flinfo.section_info = NULL;
}
+ /* Write out the stub sections. */
+ for (o = xcoff_hash_table (info)->params->stub_bfd->sections;
+ o != NULL; o = o->next)
+ {
+ if ((o->flags & SEC_HAS_CONTENTS) == 0
+ || o->size == 0)
+ continue;
+
+ if (!bfd_set_section_contents (abfd, o->output_section, o->contents,
+ (file_ptr) o->output_offset, o->size))
+ goto error_return;
+ }
+
/* Write out the loader section contents. */
o = xcoff_hash_table (info)->loader_section;
if (o != NULL
diff --git a/bfd/xcofflink.h b/bfd/xcofflink.h
index cd35676b08f..d647ba0a5df 100644
--- a/bfd/xcofflink.h
+++ b/bfd/xcofflink.h
@@ -18,6 +18,17 @@
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
MA 02110-1301, USA. */
+/* Used to pass info between ld and bfd. */
+struct bfd_xcoff_link_params
+{
+ /* Linker stub bfd. */
+ bfd *stub_bfd;
+
+ /* Linker call-backs. */
+ asection * (*add_stub_section) (const char *, asection *);
+ void (*layout_sections_again) (void);
+};
+
extern bool bfd_xcoff_split_import_path
(bfd *, const char *, const char **, const char **);
extern bool bfd_xcoff_set_archive_import_path
@@ -37,5 +48,13 @@ extern bool bfd_xcoff_size_dynamic_sections
(bfd *, struct bfd_link_info *, const char *, const char *,
unsigned long, unsigned long, unsigned long, bool,
int, bool, unsigned int, struct bfd_section **, bool);
+extern bool bfd_xcoff_build_dynamic_sections
+ (bfd *, struct bfd_link_info *);
extern bool bfd_xcoff_link_generate_rtinit
(bfd *, const char *, const char *, bool);
+extern bool bfd_xcoff_link_init
+ (struct bfd_link_info *, struct bfd_xcoff_link_params *);
+extern bool bfd_xcoff_size_stubs
+ (struct bfd_link_info *info);
+extern bool bfd_xcoff_build_stubs
+ (struct bfd_link_info *info);
diff --git a/binutils/BRANCHES b/binutils/BRANCHES
index 9ac8326aa43..1a879f36e02 100644
--- a/binutils/BRANCHES
+++ b/binutils/BRANCHES
@@ -53,6 +53,7 @@ binutils-2_34-branch
binutils-2_35-branch
binutils-2_36-branch
binutils-2_37-branch
+binutils-2_38-branch
Copyright (C) 2012-2022 Free Software Foundation, Inc.
diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index 9c2c3e55777..ab65d20aca1 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -1,3 +1,186 @@
+2022-04-25 Nick Clifton <nickc@redhat.com>
+
+ PR 29072
+ * testsuite/lib/binutils-common.exp (prune_warnings_extra): Filter
+ out notes about the executable stacjk behaviour beign deprecated.
+
+2022-04-12 Nick Clifton <nickc@redhat.com>
+
+ PR 28992
+ * objcopy.c (is_strip_section_1): Do not delete debuglink sections
+ when stripping debug information.
+
+2022-04-06 Nick Clifton <nickc@redhat.com>
+
+ PR 28981
+ * dwarf.c (fetch_indexed_value): Rename to fecth_indexed_addr and
+ return the address, rather than a string.
+ (fetch_indexed_value): New function - returns a value indexed by a
+ DW_FORM_loclistx or DW_FORM_rnglistx form.
+ (read_and_display_attr_value): Add support for DW_FORM_loclistx
+ and DW_FORM_rnglistx.
+ (process_debug_info): Load the loclists and rnglists sections.
+ (display_loclists_list): Add support for DW_LLE_base_addressx,
+ DW_LLE_startx_endx, DW_LLE_startx_length and
+ DW_LLE_default_location.
+ (display_offset_entry_loclists): New function. Displays a
+ .debug_loclists section that contains offset entry tables.
+ (display_debug_loc): Call the new function.
+ (display_debug_rnglists_list): Add support for
+ DW_RLE_base_addressx, DW_RLE_startx_endx and DW_RLE_startx_length.
+ (display_debug_ranges): Display the contents of the section's
+ header.
+ * dwarf.h (struct debug_info): Add loclists_base field.
+ * testsuite/binutils-all/dw5.W: Update expected output.
+ * testsuite/binutils-all/x86-64/pr26808.dump: Likewise.
+
+2022-04-01 John Baldwin <jhb@FreeBSD.org>
+
+ * readelf.c (get_freebsd_elfcore_note_type): Handle
+ NT_FREEBSD_X86_SEGBASES.
+
+2022-03-31 Nick Clifton <nickc@redhat.com>
+
+ * arlex.l: Accept the plus character as part of a filename.
+
+2022-03-16 Fangrui Song <maskray@google.com>
+
+ PR binutils/28926
+ * objcopy.c (filter_symbols): Apply weaken to STB_GNU_UNIQUE symbols
+ * NEWS: Mention feature.
+ * testsuite/binutils-all/objcopy.exp (objcopy_test_symbol_manipulation): New test.
+ * testsuite/binutils-all/weaken-gnu-unique.s: New.
+
+2022-03-16 Martin Storsjö <martin@martin.st>
+
+ PR 28885
+ * dlltool.c (main): use imp_name rather than dll_name when
+ generating a temporary file name.
+
+2022-03-16 Simon Marchi <simon.marchi@efficios.com>
+
+ * readelf.c (dump_relocations): Handle EM_AMDGPU.
+
+2022-03-16 Simon Marchi <simon.marchi@efficios.com>
+
+ * Makefile.am (readelf_CFLAGS): New.
+ (readelf_LDADD): Add MSGPACK_LIBS.
+ * Makefile.in: Re-generate.
+ * config.in: Re-generate.
+ * configure: Re-generate.
+ * configure.ac: Add --with-msgpack flag and check for msgpack
+ using pkg-config.
+ * readelf.c: Include msgpack.h if HAVE_MSGPACK.
+ (print_note_contents_hex): New.
+ (print_indents): New.
+ (dump_msgpack_obj): New.
+ (dump_msgpack): New.
+ (print_amdgpu_note): New.
+ (process_note): Handle NT_AMDGPU_METADATA note contents.
+ Use print_note_contents_hex.
+
+2022-03-16 Simon Marchi <simon.marchi@efficios.com>
+
+ * readelf.c (get_amdgpu_elf_note_type): New.
+ (process_note): Handle "AMDGPU" notes.
+
+2022-03-16 Simon Marchi <simon.marchi@efficios.com>
+
+ * readelf.c: Include elf/amdgcn.h.
+ (decode_AMDGPU_machine_flags): New.
+ (get_machine_flags): Handle flags for EM_AMDGPU machine type.
+
+2022-03-16 Simon Marchi <simon.marchi@efficios.com>
+
+ * readelf.c (get_osabi_name): Handle EM_AMDGPU OS ABIs.
+
+2022-03-16 Nick Clifton <nickc@redhat.com>
+
+ * po/sr.po: Updated Serbian translation.
+
+2022-03-15 Tom Tromey <tromey@adacore.com>
+
+ * dwarf-mode.el: Now 1.7.
+ (dwarf--sentinel): Switch to the process buffer.
+
+2022-03-11 Vladimir Mezentsev <vladimir.mezentsev@oracle.com>
+
+ * MAINTAINERS: Add gprofng maintainer.
+ * README-how-to-make-a-release: Add gprofng.
+
+2022-03-10 Nick Clifton <nickc@redhat.com>
+
+ * dwarf.c (use_debuginfod): New variable. Set to 1.
+ (load_separate_debug_info): Only call
+ debuginfod_fetch_separate_debug_info is use_debuginfod is true.
+ (dwarf_select_sections_by_names): Add do-not-use-debuginfod and
+ use-debuginfod options.
+ (dwarf_select_sections_by_letters): Add D and E options.
+ * dwarf.h (use_debuginfod): New extern.
+ * objdump.c (usage): Mention the new options.
+ * readelf.c (usage): Likewise.
+ * doc/binutils.texi: Document the new options.
+ * doc/debug-options.texi: Describe the new options.
+ * NEWS: Mention the new feature.
+ * testsuite/binutils-all/debuginfod.exp: Add tests of the new
+ options.
+
+2021-03-06 Maciej W. Rozycki <macro@orcam.me.uk>
+
+ * testsuite/binutils-all/mips/mips1-branch-alias.d: New test.
+ * testsuite/binutils-all/mips/mips1-branch-noalias.d: New test.
+ * testsuite/binutils-all/mips/mips2-branch-alias.d: New test.
+ * testsuite/binutils-all/mips/mips2-branch-noalias.d: New test.
+ * testsuite/binutils-all/mips/mips32r6-branch-alias.d: New test.
+ * testsuite/binutils-all/mips/mips32r6-branch-noalias.d: New
+ test.
+ * testsuite/binutils-all/mips/micromips-branch-alias.d: New
+ test.
+ * testsuite/binutils-all/mips/micromips-branch-noalias.d: New
+ test.
+ * testsuite/binutils-all/mips/mips-branch-alias.s: New test
+ source.
+ * testsuite/binutils-all/mips/micromips-branch-alias.s: New test
+ source.
+ * testsuite/binutils-all/mips/mips.exp: Run the new tests.
+
+2022-03-04 Simon Marchi <simon.marchi@polymtl.ca>
+
+ * readelf.c (process_dynamic_section): Fix indentation.
+
+2022-02-09 Nick Clifton <nickc@redhat.com>
+
+ * README-how-to-make-a-release: Update after the 2.38 release.
+
+2022-01-27 Nick Clifton <nickc@redhat.com>
+
+ * po/sv.po: Updated Swedish translation.
+
+2022-01-24 Nick Clifton <nickc@redhat.com>
+
+ * po/bg.po: Updated Bulgarian translation.
+ * po/fr.po: Updated French translation.
+ * po/ro.po: Updated Romanian translation.
+ * po/uk.po: Updated Ukranian translation.
+
+2022-01-22 Martin Storsjö <martin@martin.st>
+
+ * dlltool.c (main): Allow inferring tmp_prefix from the dll name
+ from a def file.
+
+2022-01-22 Nick Clifton <nickc@redhat.com>
+
+ * configure: Regenerate.
+ * po/binutils.pot: Regenerate.
+
+2022-01-22 Nick Clifton <nickc@redhat.com>
+
+ * 2.38 release branch created.
+
+2022-01-17 Nick Clifton <nickc@redhat.com>
+
+ * Makefile.in: Regenerate.
+
2022-01-11 Fangrui Song <maskray@google.com>
PR binutils/28759
diff --git a/binutils/MAINTAINERS b/binutils/MAINTAINERS
index ef12371f353..082b85f8e55 100644
--- a/binutils/MAINTAINERS
+++ b/binutils/MAINTAINERS
@@ -6,7 +6,7 @@ the assembler (gas), the profiler (gprof), a whole suite of other
programs (binutils) and the libraries that they use (bfd and
opcodes). This project shares a common set of header files with the
GCC and GDB projects (include), so maintainership of those files is
-shared amoungst the projects.
+shared amongst the projects.
The home page for binutils is:
@@ -43,6 +43,11 @@ repository without obtaining approval first:
Alan Modra <amodra@gmail.com>
Michael Meissner <gnu@the-meissners.org>
Richard Sandiford <rdsandiford@googlemail.com>
+ Jan Beulich <jbeulich@suse.com>
+
+GDB global maintainers also have permission to commit and approve
+patches to the top level files and to those parts of bfd files
+primarily used by GDB.
--------- Maintainers ---------
@@ -84,6 +89,7 @@ responsibility among the other maintainers.
FRV Alexandre Oliva <aoliva@sourceware.org>
GOLD Ian Lance Taylor <iant@google.com>
GOLD Cary Coutant <ccoutant@gmail.com>
+ gprofng Vladimir Mezentsev <vladimir.mezentsev@oracle.com>
H8300 Prafulla Thakare <prafulla.thakare@kpitcummins.com>
HPPA Dave Anglin <dave.anglin@bell.net>
HPPA elf32 Alan Modra <amodra@gmail.com>
@@ -93,7 +99,7 @@ responsibility among the other maintainers.
ix86 H.J. Lu <hjl.tools@gmail.com>
ix86 COFF DJ Delorie <dj@redhat.com>
ix86 PE/COFF Dave Korn <dave.korn.cygwin@gmail.com>
- ix86 INTEL MODE Jan Beulich <jbeulich@novell.com>
+ ix86 INTEL MODE Jan Beulich <jbeulich@suse.com>
LM32 Jon Beniston <jon@beniston.com>
LoongArch Chenghua Xu <xuchenghua@loongson.cn>
LoongArch Zhensong Liu <liuzhensong@loongson.cn>
diff --git a/binutils/Makefile.am b/binutils/Makefile.am
index 5b13af29cc3..751fbacce12 100644
--- a/binutils/Makefile.am
+++ b/binutils/Makefile.am
@@ -256,7 +256,7 @@ objcopy_SOURCES = objcopy.c not-strip.c rename.c $(WRITE_DEBUG_SRCS) $(BULIBS)
strings_SOURCES = strings.c $(BULIBS)
readelf_SOURCES = readelf.c version.c unwind-ia64.c dwarf.c demanguse.c $(ELFLIBS)
-readelf_LDADD = $(LIBCTF_NOBFD) $(LIBINTL) $(LIBIBERTY) $(ZLIB) $(DEBUGINFOD_LIBS)
+readelf_LDADD = $(LIBCTF_NOBFD) $(LIBINTL) $(LIBIBERTY) $(ZLIB) $(DEBUGINFOD_LIBS) $(MSGPACK_LIBS)
elfedit_SOURCES = elfedit.c version.c $(ELFLIBS)
elfedit_LDADD = $(LIBINTL) $(LIBIBERTY)
@@ -381,6 +381,18 @@ endif
$(AM_V_CC)$(COMPILE) $(DEBUGINFOD_CFLAGS) -c -o $@ $(srcdir)/dwarf.c
endif
+readelf.@OBJEXT@: readelf.c
+if am__fastdepCC
+ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo $(MSGPACK_CFLAGS) -c -o $@ $(srcdir)/readelf.c
+ $(AM_V_at)mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+else
+if AMDEP
+ source='readelf.c' object='$@' libtool=no @AMDEPBACKSLASH@
+ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+endif
+ $(AM_V_CC)$(COMPILE) $(MSGPACK_CFLAGS) -c -o $@ $(srcdir)/readelf.c
+endif
+
sysroff.@OBJEXT@: sysroff.c
if am__fastdepCC
$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `test -f sysroff.c || echo $(srcdir)/`sysroff.c $(NO_WERROR)
diff --git a/binutils/Makefile.in b/binutils/Makefile.in
index 87f78628380..78d32b350e3 100644
--- a/binutils/Makefile.in
+++ b/binutils/Makefile.in
@@ -537,6 +537,8 @@ MKDIR_P = @MKDIR_P@
MKINSTALLDIRS = @MKINSTALLDIRS@
MSGFMT = @MSGFMT@
MSGMERGE = @MSGMERGE@
+MSGPACK_CFLAGS = @MSGPACK_CFLAGS@
+MSGPACK_LIBS = @MSGPACK_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NO_WERROR = @NO_WERROR@
@@ -785,7 +787,7 @@ size_SOURCES = size.c $(BULIBS)
objcopy_SOURCES = objcopy.c not-strip.c rename.c $(WRITE_DEBUG_SRCS) $(BULIBS)
strings_SOURCES = strings.c $(BULIBS)
readelf_SOURCES = readelf.c version.c unwind-ia64.c dwarf.c demanguse.c $(ELFLIBS)
-readelf_LDADD = $(LIBCTF_NOBFD) $(LIBINTL) $(LIBIBERTY) $(ZLIB) $(DEBUGINFOD_LIBS)
+readelf_LDADD = $(LIBCTF_NOBFD) $(LIBINTL) $(LIBIBERTY) $(ZLIB) $(DEBUGINFOD_LIBS) $(MSGPACK_LIBS)
elfedit_SOURCES = elfedit.c version.c $(ELFLIBS)
elfedit_LDADD = $(LIBINTL) $(LIBIBERTY)
strip_new_SOURCES = objcopy.c is-strip.c rename.c $(WRITE_DEBUG_SRCS) $(BULIBS)
@@ -1919,6 +1921,13 @@ dwarf.@OBJEXT@: dwarf.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC)$(COMPILE) $(DEBUGINFOD_CFLAGS) -c -o $@ $(srcdir)/dwarf.c
+readelf.@OBJEXT@: readelf.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo $(MSGPACK_CFLAGS) -c -o $@ $(srcdir)/readelf.c
+@am__fastdepCC_TRUE@ $(AM_V_at)mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='readelf.c' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC)$(COMPILE) $(MSGPACK_CFLAGS) -c -o $@ $(srcdir)/readelf.c
+
sysroff.@OBJEXT@: sysroff.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `test -f sysroff.c || echo $(srcdir)/`sysroff.c $(NO_WERROR)
@am__fastdepCC_TRUE@ $(AM_V_at)mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
diff --git a/binutils/NEWS b/binutils/NEWS
index ffba42ccd5e..c266bb9c3de 100644
--- a/binutils/NEWS
+++ b/binutils/NEWS
@@ -1,5 +1,16 @@
-*- text -*-
+* Add an option to objdump and readelf to prevent attempts to access debuginfod
+ servers when following links.
+* objcopy --weaken, --weaken-symbol, and --weaken-symbols now make ELF
+ STB_GNU_UNIQUE symbols weak.
+
+* objdump now supports syntax highlighting of disassembler output for some
+ architectures. Use the --disassembler-color=MODE command line flag, with
+ mode being either off, color, or extended-color.
+
+Changes in 2.38:
+
* elfedit: Add --output-abiversion option to update ABIVERSION.
* Add support for the LoongArch instruction set.
diff --git a/binutils/README-how-to-make-a-release b/binutils/README-how-to-make-a-release
index 2edbf191b37..5afc6f25ccb 100644
--- a/binutils/README-how-to-make-a-release
+++ b/binutils/README-how-to-make-a-release
@@ -35,7 +35,7 @@ Approx time to complete from here: 2 hours ....
in the gold directory - it has its own release numbering.
Likewise for the ChangeLog files in: bfd, binutils, config, cpu,
- elfcpp, gas, gold, gprof, include, ld, libctf, libiberty, opcodes
+ elfcpp, gas, gold, gprof, gprofng, include, ld, libctf, libiberty, opcodes
and toplevel.
Add a note of the name of the new branch to binutils/BRANCHES.
@@ -44,8 +44,8 @@ Approx time to complete from here: 2 hours ....
4. Create the release branch using:
- git branch binutils-2_38-branch
- git push origin binutils-2_38-branch
+ git branch binutils-2_39-branch
+ git push origin binutils-2_39-branch
If you get a message like:
@@ -55,7 +55,7 @@ Approx time to complete from here: 2 hours ....
5. Make sure that the branch is there. IE check out the branch sources:
- git clone ssh://sourceware.org/git/binutils-gdb.git -b binutils-2_38-branch 2.38
+ git clone ssh://sourceware.org/git/binutils-gdb.git -b binutils-2_39-branch 2.39
If you get a message about being in a "detached head" state, something
has gone wrong...
@@ -83,19 +83,22 @@ Approx time to complete from here: 2 hours ....
https://sourceware.org/bugzilla/editversions.cgi?product=binutils
8. Update bfd/version.m4 on HEAD to indicate that is now a snapshot
- of the next release:
+ of the next release. Note if the release is going to be 2.39 then
+ the version number on the branch is set to 2.38.90 - ie almost, but
+ not quite at 2.39, and the version number on the mainline is set to
+ 2.39.50 - ie half way to the next release after 2.39.
+
+ So the branch bfd/version.m4 has:
- m4_define([BFD_VERSION], [2.38.50])
+ m4_define([BFD_VERSION], [2.38.90])
- Update the release number in bfd/version.m4 for the BRANCH.
- The branch only needs the point value set to 90 as the release
- has not actually happened yet.
+ and the mainline has:
- m4_define([BFD_VERSION], [2.37.90])
+ m4_define([BFD_VERSION], [2.39.50])
Regenerate various files on both branch and HEAD by configuring
- with "--enable-maintainer-mode --enable-gold" and then building
- with "make all-binutils all-gas all-gold all-gprof all-ld"
+ with "--enable-maintainer-mode --enable-gold --enable-shared" and then building
+ with "make all-binutils all-gas all-gold all-gprof all-gprofng all-ld"
Add ChangeLog entries for the updated files. Commit the changes.
Make sure that this includes the .pot files as well as the
@@ -111,16 +114,16 @@ Approx time to complete from here: 2 hours ....
b. Create a source tarball of the BRANCH sources:
- ./src-release -x binutils
+ ./src-release.sh -x binutils
c. Build a test target using this tarball.
- cp binutils-2.37.90.tar.xz /dev/shm
+ cp binutils-2.38.90.tar.xz /dev/shm
pushd /dev/shm
- tar xvf binutils-2.36.90.tar.xz
+ tar xvf binutils-2.38.90.tar.xz
mkdir build
cd build
- ../binutils-2.37.90/configure --quiet --enable-gold
+ ../binutils-2.38.90/configure --quiet --enable-gold
make
popd
@@ -128,8 +131,8 @@ Approx time to complete from here: 2 hours ....
d. Upload the pre-release snapshot to the sourceware FTP site:
- scp binutils-2.37.90.tar.xz sourceware.org:~ftp/pub/binutils/snapshots
- ssh sourceware.org sha256sum ~ftp/pub/binutils/snapshots/binutils-2.37.90.tar.xz
+ scp binutils-2.38.90.tar.xz sourceware.org:~ftp/pub/binutils/snapshots
+ ssh sourceware.org sha256sum ~ftp/pub/binutils/snapshots/binutils-2.38.90.tar.xz
e. Clean up the source directory again.
@@ -142,11 +145,11 @@ Approx time to complete from here: 2 hours ....
------------------------------------------------------------------------
Dear Translation Project
- The 2.38 release branch has been created for the GNU Binutils project.
+ The 2.39 release branch has been created for the GNU Binutils project.
A snapshot of the branch sources can be found here:
- https://sourceware.org/pub/binutils/snapshots/binutils-2.37.90.tar.xz
+ https://sourceware.org/pub/binutils/snapshots/binutils-2.38.90.tar.xz
We hope to make the official release of the sources on the <DATE>
although that could change if there are important bugs that need to
@@ -199,13 +202,24 @@ When the time comes to actually make the release....
cd <branch>
git clean -fdx
- 21. Update the release number in bfd/version.m4 on the release
- branch to a whole new minor version number, without a point
- value. Eg "2.37.90" becomes "2.38". Change bfd/development.sh
- to set all values to "false". Regenerate the configure and
- makefiles. And *info* files. Add ChangeLog entries for the
- updates and add a "this-is-the-2.38-release" comment and
- commit.
+ 21. a. Update the release number in bfd/version.m4 on the release
+ branch to a whole new minor version number, without a point
+ value. Eg "2.38.90" becomes "2.39".
+
+ b. Change bfd/development.sh to set all values to "false".
+
+ c. Regenerate the configure and makefiles. And *info* files.
+
+ d. Create a ChangeLog from the git refs for all of the commits
+ from when changelog entries were no longer required:
+
+ gitlog-to-changelog --since=2021-07-03 > ChangeLog.git
+
+ The gitlog-to-changelog script is part of the sources
+ of the "config" project.
+
+ e. Add ChangeLog entries for all of the updates and add a
+ "this-is-the-2.38-release" comment and commit.
22. Check that your file creation mask will create the
correct file permissions. Eg:
@@ -221,49 +235,48 @@ When the time comes to actually make the release....
23. Note - check to see if any new files have been added to the top
level of the source directory, but which are not in the
DEVO_SUPPORT variable in the src-release.sh script. If they are
- needed then add them.
+ needed then add them. NB/ Add the new ChangeLog.git file.
- Create the release tarballs:
+ Create the release tarballs:
./src-release.sh -b -g -l -x binutils
24. Check that the files in the tarballs have the correct
permissions.
- tar tvf binutils-2.37.tar.bz2 | grep -e "---"
+ tar tvf binutils-2.39.tar.bz2 | grep -e "---"
Also check that the man files are not empty. (cf PR 28144).
- tar tvf binutils-2.37.tar.xz | grep -e "\.1"
+ tar tvf binutils-2.39.tar.xz | grep -e "\.1"
25. Sanity check the release on x86_64-pc-linux-gnu by building and
running the testsuites (gas, gold, binutils and ld). Make the
source directory read-only before building. Also test
"make install". If necessary fix any problems.
- cd /dev/shm
+ pushd /dev/shm
mkdir delme
cd delme
tar xvf <path-to-sources>/binutils-2.*.tar.lz
chmod -R -w binutils-2.*
mkdir build
cd build
- ../binutils-2.X/configure --enable-gold --prefix=`pwd`/install --enable-plugins
- make all-gas all-gold all-ld all-binutils all-gprof
+ ../binutils-2.*/configure --quiet --enable-gold --prefix=`pwd`/install --enable-plugins --enable-shared
+ make all-gas all-gold all-ld all-binutils all-gprof all-gprofng
make check-gas check-binutils check-ld check-gold
make install-gas install-gold install-ld install-binutils
# Needed for step 29...
make html pdf
+ popd
+
26. Tag the branch with the new release number:
+ [optional: add "-u XXXXX" to sign with a gpg key]
+ enter a tag message such as: "Official GNU Binutils 2.3x release"
- git tag -a binutils-2_3x <=== Be careful to get the tag right
-
- [optional: add "-u XXXXX" to sign with a gpg key]
- enter a tag message such as: "Official Binutils 2.3x release"
-
- eg: git tag -a binutils-2_37 -u DD9E3C4F
+ git tag -a binutils-2_38 -u DD9E3C4F <=== Be careful to get the tag right
NB/ If you do sign the binaries make sure to use a key
that has been published with the FSF.
@@ -272,18 +285,20 @@ When the time comes to actually make the release....
git push origin binutils-2_3x
- If you get an error message along the lines of "Invalid revision range ..." you can ignore it.
+ If you get an error message along the lines of:
+ "Invalid revision range ..." you can ignore it.
- 27. Upload the tarballs to ftp.gnu.org.
+ 27. Upload the tarballs to ftp.gnu.org.
- gnupload --to ftp.gnu.org:binutils binutils-2.3*.tar.*
+ gnupload --to ftp.gnu.org:binutils binutils-2.3*.tar.*
- Be prepared to provide the password for the key, if you signed the binaries.
+ Be prepared to provide the password for the key, if you
+ signed the binaries.
- The gnupload script is in the gnulib/build-aux directory.
+ The gnupload script is in the gnulib/build-aux directory.
- Check for an email response from the upload. If necessary
- fix any problems.
+ Check for an email response from the upload. If necessary
+ fix any problems.
28. Upload the tarballs (and signatures) to sourceware.org:
@@ -293,9 +308,9 @@ When the time comes to actually make the release....
chmod 644 binutils-2.3x.tar.*
quit
- FIXME: Are the signatures (created by the gnupload script in step 27) needed ?
- [The above commands upload them and nobody has complained, so suggest that they
- are retained].
+ FIXME: Are the signatures (created by the gnupload script in step 27)
+ needed ? [The above commands upload them and nobody has complained,
+ so suggest that they are retained].
29. Update web pages. For sourceware.org:
@@ -332,28 +347,28 @@ When the time comes to actually make the release....
cd ..
put as.html
put as.pdf
- cd ../bfd
+ cd bfd
lcd ../../bfd/doc/bfd
put *
cd ..
lcd ..
put bfd.html
put bfd.pdf
- cd ../binutils
- lcd ../../binutils/doc/binutils
+ cd binutils
+ lcd ../../binutils/binutils <=== NB/ Path not like others
put *
cd ..
- lcd ..
+ lcd ../doc
put binutils.html
put binutils.pdf
- cd ../gprof
+ cd gprof
lcd ../../gprof/doc/gprof
put *
cd ..
lcd ../..
put gprof.html
put gprof.pdf
- cd ../ld
+ cd ld
lcd ../ld/doc/ld
put *
cd ..
diff --git a/binutils/addr2line.c b/binutils/addr2line.c
index 4d0405bbd09..fd2ac80dacd 100644
--- a/binutils/addr2line.c
+++ b/binutils/addr2line.c
@@ -37,6 +37,7 @@
#include "demangle.h"
#include "bucomm.h"
#include "elf-bfd.h"
+#include "safe-ctype.h"
static bool unwind_inlines; /* -i, unwind inlined functions. */
static bool with_addresses; /* -a, show addresses. */
@@ -51,6 +52,7 @@ static int demangle_flags = DMGL_PARAMS | DMGL_ANSI;
static int naddr; /* Number of addresses to process. */
static char **addr; /* Hex addresses to process. */
+static long symcount;
static asymbol **syms; /* Symbol table. */
static struct option long_options[] =
@@ -116,7 +118,6 @@ static void
slurp_symtab (bfd *abfd)
{
long storage;
- long symcount;
bool dynamic = false;
if ((bfd_get_file_flags (abfd) & HAS_SYMS) == 0)
@@ -220,32 +221,94 @@ find_offset_in_section (bfd *abfd, asection *section)
&line, &discriminator);
}
-/* Read hexadecimal addresses from stdin, translate into
+/* Lookup a symbol with offset in symbol table. */
+
+static bfd_vma
+lookup_symbol (bfd *abfd, char *sym, size_t offset)
+{
+ long i;
+
+ for (i = 0; i < symcount; i++)
+ {
+ if (!strcmp (syms[i]->name, sym))
+ return syms[i]->value + offset + bfd_asymbol_section (syms[i])->vma;
+ }
+ /* Try again mangled */
+ for (i = 0; i < symcount; i++)
+ {
+ char *d = bfd_demangle (abfd, syms[i]->name, demangle_flags);
+ bool match = d && !strcmp (d, sym);
+ free (d);
+
+ if (match)
+ return syms[i]->value + offset + bfd_asymbol_section (syms[i])->vma;
+ }
+ return 0;
+}
+
+/* Split an symbol+offset expression. adr is modified. */
+
+static bool
+is_symbol (char *adr, char **symp, size_t *offset)
+{
+ char *end;
+
+ while (ISSPACE (*adr))
+ adr++;
+ if (ISDIGIT (*adr) || *adr == 0)
+ return false;
+ /* Could be either symbol or hex number. Check if it has +. */
+ if (TOUPPER(*adr) >= 'A' && TOUPPER(*adr) <= 'F' && !strchr (adr, '+'))
+ return false;
+
+ *symp = adr;
+ while (*adr && !ISSPACE (*adr) && *adr != '+')
+ adr++;
+ end = adr;
+ while (ISSPACE (*adr))
+ adr++;
+ *offset = 0;
+ if (*adr == '+')
+ {
+ adr++;
+ *offset = strtoul(adr, NULL, 0);
+ }
+ *end = 0;
+ return true;
+}
+
+/* Read hexadecimal or symbolic with offset addresses from stdin, translate into
file_name:line_number and optionally function name. */
static void
translate_addresses (bfd *abfd, asection *section)
{
int read_stdin = (naddr == 0);
+ char *adr;
+ char addr_hex[100];
+ char *symp;
+ size_t offset;
for (;;)
{
if (read_stdin)
{
- char addr_hex[100];
-
if (fgets (addr_hex, sizeof addr_hex, stdin) == NULL)
break;
- pc = bfd_scan_vma (addr_hex, NULL, 16);
+ adr = addr_hex;
}
else
{
if (naddr <= 0)
break;
--naddr;
- pc = bfd_scan_vma (*addr++, NULL, 16);
+ adr = *addr++;
}
+ if (is_symbol (adr, &symp, &offset))
+ pc = lookup_symbol (abfd, symp, offset);
+ else
+ pc = bfd_scan_vma (adr, NULL, 16);
if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
{
const struct elf_backend_data *bed = get_elf_backend_data (abfd);
diff --git a/binutils/arlex.l b/binutils/arlex.l
index a43a6214b3d..145b9e16773 100644
--- a/binutils/arlex.l
+++ b/binutils/arlex.l
@@ -78,7 +78,7 @@ int linenumber;
"(" { return '('; }
")" { return ')'; }
"," { return ','; }
-[A-Za-z0-9/\\$:.\-\_]+ {
+[A-Za-z0-9/\\$:.\-\_\+]+ {
yylval.name = xstrdup (yytext);
return FILENAME;
}
diff --git a/binutils/config.in b/binutils/config.in
index e6fa66fc41b..81bd143140e 100644
--- a/binutils/config.in
+++ b/binutils/config.in
@@ -104,6 +104,9 @@
/* Define to 1 if you have a working `mmap' system call. */
#undef HAVE_MMAP
+/* Define to 1 if msgpack is available. */
+#undef HAVE_MSGPACK
+
/* Define to 1 if you have the `sbrk' function. */
#undef HAVE_SBRK
diff --git a/binutils/configure b/binutils/configure
index 531322ec521..7afa9c471ce 100755
--- a/binutils/configure
+++ b/binutils/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for binutils 2.37.50.
+# Generated by GNU Autoconf 2.69 for binutils 2.38.50.
#
#
# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
@@ -587,8 +587,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='binutils'
PACKAGE_TARNAME='binutils'
-PACKAGE_VERSION='2.37.50'
-PACKAGE_STRING='binutils 2.37.50'
+PACKAGE_VERSION='2.38.50'
+PACKAGE_STRING='binutils 2.38.50'
PACKAGE_BUGREPORT=''
PACKAGE_URL=''
@@ -648,6 +648,8 @@ BUILD_DLLTOOL
BUILD_SRCONV
LTLIBICONV
LIBICONV
+MSGPACK_LIBS
+MSGPACK_CFLAGS
zlibinc
zlibdir
DEMANGLER_NAME
@@ -830,6 +832,7 @@ enable_build_warnings
enable_nls
enable_maintainer_mode
with_system_zlib
+with_msgpack
enable_rpath
with_libiconv_prefix
with_libiconv_type
@@ -849,7 +852,9 @@ PKG_CONFIG_LIBDIR
DEBUGINFOD_CFLAGS
DEBUGINFOD_LIBS
YACC
-YFLAGS'
+YFLAGS
+MSGPACK_CFLAGS
+MSGPACK_LIBS'
# Initialize some variables set by options.
@@ -1390,7 +1395,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 binutils 2.37.50 to adapt to many kinds of systems.
+\`configure' configures binutils 2.38.50 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1461,7 +1466,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of binutils 2.37.50:";;
+ short | recursive ) echo "Configuration of binutils 2.38.50:";;
esac
cat <<\_ACEOF
@@ -1512,6 +1517,7 @@ Optional Packages:
--with-debuginfod Enable debuginfo lookups with debuginfod
(auto/yes/no)
--with-system-zlib use installed libz
+ --with-msgpack Enable msgpack support (auto/yes/no)
--with-gnu-ld assume the C compiler uses GNU ld default=no
--with-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib
--without-libiconv-prefix don't search for libiconv in includedir and libdir
@@ -1541,6 +1547,10 @@ Some influential environment variables:
YFLAGS The list of arguments that will be passed by default to $YACC.
This script will default YFLAGS to the empty string to avoid a
default value of `-d' given by some make applications.
+ MSGPACK_CFLAGS
+ C compiler flags for MSGPACK, overriding pkg-config
+ MSGPACK_LIBS
+ linker flags for MSGPACK, overriding pkg-config
Use these variables to override the choices made by `configure' or to help
it to find libraries and programs with nonstandard names/locations.
@@ -1608,7 +1618,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-binutils configure 2.37.50
+binutils configure 2.38.50
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2259,7 +2269,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 binutils $as_me 2.37.50, which was
+It was created by binutils $as_me 2.38.50, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -3241,7 +3251,7 @@ fi
# Define the identity of the package.
PACKAGE='binutils'
- VERSION='2.37.50'
+ VERSION='2.38.50'
cat >>confdefs.h <<_ACEOF
@@ -5263,25 +5273,31 @@ else
lt_nm_to_check="$lt_nm_to_check nm"
fi
fi
- for lt_tmp_nm in $lt_nm_to_check; do
+ for lt_tmp_nm in "$lt_nm_to_check"; do
lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
IFS="$lt_save_ifs"
test -z "$ac_dir" && ac_dir=.
- case "$lt_tmp_nm" in
+ # Strip out any user-provided options from the nm to test twice,
+ # the first time to test to see if nm (rather than its options) has
+ # an explicit path, the second time to yield a file which can be
+ # nm'ed itself.
+ tmp_nm_path="`$ECHO "$lt_tmp_nm" | sed 's, -.*$,,'`"
+ case "$tmp_nm_path" in
*/*|*\\*) tmp_nm="$lt_tmp_nm";;
*) tmp_nm="$ac_dir/$lt_tmp_nm";;
esac
- if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+ tmp_nm_to_nm="`$ECHO "$tmp_nm" | sed 's, -.*$,,'`"
+ if test -f "$tmp_nm_to_nm" || test -f "$tmp_nm_to_nm$ac_exeext" ; then
# Check to see if the nm accepts a BSD-compat flag.
# Adding the `sed 1q' prevents false positives on HP-UX, which says:
# nm: unknown option "B" ignored
- case `"$tmp_nm" -B "$tmp_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
+ case `"$tmp_nm" -B "$tmp_nm_to_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
*$tmp_nm*) lt_cv_path_NM="$tmp_nm -B"
break
;;
*)
- case `"$tmp_nm" -p "$tmp_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
+ case `"$tmp_nm" -p "$tmp_nm_to_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
*$tmp_nm*)
lt_cv_path_NM="$tmp_nm -p"
break
@@ -10971,7 +10987,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 10974 "configure"
+#line 10990 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -11077,7 +11093,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11080 "configure"
+#line 11096 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -13723,6 +13739,127 @@ $as_echo "#define USE_BINARY_FOPEN 1" >>confdefs.h
;;
esac
+# Support for the msgpack C library.
+
+# Check whether --with-msgpack was given.
+if test "${with_msgpack+set}" = set; then :
+ withval=$with_msgpack;
+else
+ with_msgpack=auto
+fi
+
+
+
+if test "$with_msgpack" != no; then
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for msgpack" >&5
+$as_echo_n "checking for msgpack... " >&6; }
+
+if test -n "$MSGPACK_CFLAGS"; then
+ pkg_cv_MSGPACK_CFLAGS="$MSGPACK_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"msgpack\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "msgpack") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_MSGPACK_CFLAGS=`$PKG_CONFIG --cflags "msgpack" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$MSGPACK_LIBS"; then
+ pkg_cv_MSGPACK_LIBS="$MSGPACK_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"msgpack\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "msgpack") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_MSGPACK_LIBS=`$PKG_CONFIG --libs "msgpack" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+if test $pkg_failed = no; then
+ pkg_save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS $pkg_cv_MSGPACK_LIBS"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+else
+ pkg_failed=yes
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ LDFLAGS=$pkg_save_LDFLAGS
+fi
+
+
+
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ MSGPACK_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "msgpack" 2>&1`
+ else
+ MSGPACK_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "msgpack" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$MSGPACK_PKG_ERRORS" >&5
+
+
+ if test "$with_msgpack" = yes; then
+ as_fn_error $? "--with-msgpack was given, but msgpack is missing or unusable." "$LINENO" 5
+ fi
+
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+ if test "$with_msgpack" = yes; then
+ as_fn_error $? "--with-msgpack was given, but msgpack is missing or unusable." "$LINENO" 5
+ fi
+
+else
+ MSGPACK_CFLAGS=$pkg_cv_MSGPACK_CFLAGS
+ MSGPACK_LIBS=$pkg_cv_MSGPACK_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+
+$as_echo "#define HAVE_MSGPACK 1" >>confdefs.h
+
+
+fi
+fi
+
# target-specific stuff:
# Canonicalize the secondary target names.
@@ -15282,7 +15419,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 binutils $as_me 2.37.50, which was
+This file was extended by binutils $as_me 2.38.50, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -15348,7 +15485,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-binutils config.status 2.37.50
+binutils config.status 2.38.50
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
diff --git a/binutils/configure.ac b/binutils/configure.ac
index 7b70e765243..e204a201a0a 100644
--- a/binutils/configure.ac
+++ b/binutils/configure.ac
@@ -275,6 +275,23 @@ AM_ZLIB
BFD_BINARY_FOPEN
+# Support for the msgpack C library.
+AC_ARG_WITH([msgpack],
+ AC_HELP_STRING([--with-msgpack], [Enable msgpack support (auto/yes/no)]),
+ [],
+ [with_msgpack=auto])
+
+
+if test "$with_msgpack" != no; then
+ PKG_CHECK_MODULES(MSGPACK, msgpack, [
+ AC_DEFINE([HAVE_MSGPACK], [1], [Define to 1 if msgpack is available.])
+ ], [
+ if test "$with_msgpack" = yes; then
+ AC_MSG_ERROR([--with-msgpack was given, but msgpack is missing or unusable.])
+ fi
+ ])
+fi
+
# target-specific stuff:
# Canonicalize the secondary target names.
diff --git a/binutils/dlltool.c b/binutils/dlltool.c
index a1e2b484328..89871510b45 100644
--- a/binutils/dlltool.c
+++ b/binutils/dlltool.c
@@ -3930,23 +3930,6 @@ main (int ac, char **av)
}
}
- if (tmp_prefix == NULL)
- {
- /* If possible use a deterministic prefix. */
- if (dll_name)
- {
- tmp_prefix = xmalloc (strlen (dll_name) + 2);
- sprintf (tmp_prefix, "%s_", dll_name);
- for (i = 0; tmp_prefix[i]; i++)
- if (!ISALNUM (tmp_prefix[i]))
- tmp_prefix[i] = '_';
- }
- else
- {
- tmp_prefix = prefix_encode ("d", getpid ());
- }
- }
-
for (i = 0; mtable[i].type; i++)
if (strcmp (mtable[i].type, mname) == 0)
break;
@@ -4006,6 +3989,24 @@ main (int ac, char **av)
optind++;
}
+ if (tmp_prefix == NULL)
+ {
+ /* If possible use a deterministic prefix. */
+ if (imp_name || delayimp_name)
+ {
+ const char *input = imp_name ? imp_name : delayimp_name;
+ tmp_prefix = xmalloc (strlen (input) + 2);
+ sprintf (tmp_prefix, "%s_", input);
+ for (i = 0; tmp_prefix[i]; i++)
+ if (!ISALNUM (tmp_prefix[i]))
+ tmp_prefix[i] = '_';
+ }
+ else
+ {
+ tmp_prefix = prefix_encode ("d", getpid ());
+ }
+ }
+
mangle_defs ();
if (exp_name)
diff --git a/binutils/doc/binutils.texi b/binutils/doc/binutils.texi
index 54845c5dc08..2c234c682aa 100644
--- a/binutils/doc/binutils.texi
+++ b/binutils/doc/binutils.texi
@@ -118,7 +118,7 @@ Demangle encoded C++ symbols (on MS-DOS, this program is named
@code{cxxfilt})
@item addr2line
-Convert addresses into file names and line numbers
+Convert addresses or symbol+offset into file names and line numbers
@item windres
Manipulate Windows resources
@@ -146,7 +146,7 @@ in the section entitled ``GNU Free Documentation License''.
* strip:: Discard symbols
* c++filt:: Filter to demangle encoded C++ symbols
* cxxfilt: c++filt. MS-DOS name for c++filt
-* addr2line:: Convert addresses to file and line
+* addr2line:: Convert addresses or symbol+offset to file and line
* windmc:: Generator for Windows message resources
* windres:: Manipulate Windows resources
* dlltool:: Create files needed to build and use DLLs
@@ -2246,6 +2246,8 @@ objdump [@option{-a}|@option{--archive-headers}]
@option{--dwarf}[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames-interp,=str,=str-offsets,=loc,=Ranges,=pubtypes,=trace_info,=trace_abbrev,=trace_aranges,=gdb_index,=addr,=cu_index,=links]]
[@option{-WK}|@option{--dwarf=follow-links}]
[@option{-WN}|@option{--dwarf=no-follow-links}]
+ [@option{-wD}|@option{--dwarf=use-debuginfod}]
+ [@option{-wE}|@option{--dwarf=do-not-use-debuginfod}]
[@option{-L}|@option{--process-links}]
[@option{--ctf=}@var{section}]
[@option{-G}|@option{--stabs}]
@@ -2268,6 +2270,7 @@ objdump [@option{-a}|@option{--archive-headers}]
[@option{--prefix-strip=}@var{level}]
[@option{--insn-width=}@var{width}]
[@option{--visualize-jumps[=color|=extended-color|=off]}
+ [@option{--disassembler-color=[color|extended-color|off]}
[@option{-U} @var{method}] [@option{--unicode=}@var{method}]
[@option{-V}|@option{--version}]
[@option{-H}|@option{--help}]
@@ -2805,6 +2808,16 @@ If it is necessary to disable the @option{visualize-jumps} option
after it has previously been enabled then use
@option{visualize-jumps=off}.
+@item --disassembler-color=[color|extended-color|off]
+Apply syntax highlighting to the disassembler output. The
+@option{color} argument adds color using simple terminal colors.
+Alternatively the @option{extended-color} argument will use 8bit
+colors, but these might not work on all terminals.
+
+If it is necessary to disable the @option{--disassembler-color} option
+after it has previously been enabled then use
+@option{--disassembler-color=off}.
+
@item -W[lLiaprmfFsoORtUuTgAckK]
@itemx --dwarf[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames-interp,=str,=str-offsets,=loc,=Ranges,=pubtypes,=trace_info,=trace_abbrev,=trace_aranges,=gdb_index,=addr,=cu_index,=links,=follow-links]
@include debug.options.texi
@@ -3902,7 +3915,7 @@ c++filt @var{option} @var{symbol}
@kindex addr2line
@cindex address to file name and line number
-@c man title addr2line convert addresses into file names and line numbers
+@c man title addr2line convert addresses or symbol+offset into file names and line numbers
@smallexample
@c man begin SYNOPSIS addr2line
@@ -3923,8 +3936,8 @@ addr2line [@option{-a}|@option{--addresses}]
@c man begin DESCRIPTION addr2line
-@command{addr2line} translates addresses into file names and line numbers.
-Given an address in an executable or an offset in a section of a relocatable
+@command{addr2line} translates addresses or symbol+offset into file names and line numbers.
+Given an address or symbol+offset in an executable or an offset in a section of a relocatable
object, it uses the debugging information to figure out which file name and
line number are associated with it.
@@ -3934,11 +3947,11 @@ object to use is specified with the @option{-j} option.
@command{addr2line} has two modes of operation.
-In the first, hexadecimal addresses are specified on the command line,
+In the first, hexadecimal addresses or symbol+offset are specified on the command line,
and @command{addr2line} displays the file name and line number for each
address.
-In the second, @command{addr2line} reads hexadecimal addresses from
+In the second, @command{addr2line} reads hexadecimal addresses or symbol+offset from
standard input, and prints the file name and line number for each
address on standard output. In this mode, @command{addr2line} may be used
in a pipe to convert dynamically chosen addresses.
@@ -3975,6 +3988,10 @@ If the file name or function name can not be determined,
@command{addr2line} will print two question marks in their place. If the
line number can not be determined, @command{addr2line} will print 0.
+When symbol+offset is used, +offset is optional, except when the symbol
+is ambigious with a hex number. The resolved symbols can be mangled
+or unmangled, except unmangled symbols with + are not allowed.
+
@c man end
@c man begin OPTIONS addr2line
@@ -4879,6 +4896,8 @@ readelf [@option{-a}|@option{--all}]
@option{--debug-dump}[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames-interp,=str,=str-offsets,=loc,=Ranges,=pubtypes,=trace_info,=trace_abbrev,=trace_aranges,=gdb_index,=addr,=cu_index,=links]]
[@option{-wK}|@option{--debug-dump=follow-links}]
[@option{-wN}|@option{--debug-dump=no-follow-links}]
+ [@option{-wD}|@option{--debug-dump=use-debuginfod}]
+ [@option{-wE}|@option{--debug-dump=do-not-use-debuginfod}]
[@option{-P}|@option{--process-links}]
[@option{--dwarf-depth=@var{n}}]
[@option{--dwarf-start=@var{n}}]
@@ -5504,7 +5523,8 @@ deduced from the input file
@cindex separate debug files
debuginfod is a web service that indexes ELF/DWARF debugging resources
-by build-id and serves them over HTTP.
+by build-id and serves them over HTTP. For more information see:
+@emph{https://sourceware.org/elfutils/Debuginfod.html}
Binutils can be built with the debuginfod client library
@code{libdebuginfod} using the @option{--with-debuginfod} configure option.
@@ -5516,6 +5536,10 @@ separate debug files when the files are otherwise not found.
debuginfod is packaged with elfutils, starting with version 0.178.
You can get the latest version from `https://sourceware.org/elfutils/'.
+The DWARF info dumping tools (@command{readelf} and @command{objdump})
+have options to control when they should access the debuginfod
+servers. By default this access is enabled.
+
@node Reporting Bugs
@chapter Reporting Bugs
@cindex bugs
diff --git a/binutils/doc/debug.options.texi b/binutils/doc/debug.options.texi
index dbe74ff45f7..26477ec1f95 100644
--- a/binutils/doc/debug.options.texi
+++ b/binutils/doc/debug.options.texi
@@ -68,10 +68,27 @@ chosen when configuring the binutils via the
@option{--enable-follow-debug-links=no} options. If these are not
used then the default is to enable the following of debug links.
+Note - if support for the debuginfod protocol was enabled when the
+binutils were built then this option will also include an attempt to
+contact any debuginfod servers mentioned in the @var{DEBUGINFOD_URLS}
+environment variable. This could take some time to resolve. This
+behaviour can be disabled via the @option{=do-not-use-debuginfod} debug
+option.
+
@item N
@itemx =no-follow-links
Disables the following of links to separate debug info files.
+@item D
+@itemx =use-debuginfod
+Enables contacting debuginfod servers if there is a need to follow
+debug links. This is the default behaviour.
+
+@item E
+@itemx =do-not-use-debuginfod
+Disables contacting debuginfod servers when there is a need to follow
+debug links.
+
@item l
@itemx =rawline
Displays the contents of the @samp{.debug_line} section in a raw
diff --git a/binutils/dwarf-mode.el b/binutils/dwarf-mode.el
index 11aeb1f79fd..9df875ca4fe 100644
--- a/binutils/dwarf-mode.el
+++ b/binutils/dwarf-mode.el
@@ -1,6 +1,6 @@
;;; dwarf-mode.el --- Browser for DWARF information. -*-lexical-binding:t-*-
-;; Version: 1.6
+;; Version: 1.7
;; Copyright (C) 2012-2022 Free Software Foundation, Inc.
@@ -62,9 +62,11 @@
(set-marker (process-mark proc) (point))
(set-buffer-modified-p nil))))))
-(defun dwarf--sentinel (_proc _status)
- (setq mode-line-process nil)
- (setq dwarf--process nil))
+(defun dwarf--sentinel (proc _status)
+ (when (buffer-live-p (process-buffer proc))
+ (with-current-buffer (process-buffer proc)
+ (setq mode-line-process nil)
+ (setq dwarf--process nil))))
(defun dwarf--invoke (start end &rest command)
"Invoke a command and arrange to insert output into the current buffer."
diff --git a/binutils/dwarf.c b/binutils/dwarf.c
index 52d4dd1cad5..e61c63a0601 100644
--- a/binutils/dwarf.c
+++ b/binutils/dwarf.c
@@ -109,6 +109,9 @@ int do_debug_cu_index;
int do_wide;
int do_debug_links;
int do_follow_links = DEFAULT_FOR_FOLLOW_LINKS;
+#ifdef HAVE_LIBDEBUGINFOD
+int use_debuginfod = 1;
+#endif
bool do_checks;
int dwarf_cutoff_level = -1;
@@ -240,7 +243,7 @@ static const char *
dwarf_vmatoa_1 (const char *fmtch, dwarf_vma value, unsigned num_bytes)
{
/* As dwarf_vmatoa is used more then once in a printf call
- for output, we are cycling through an fixed array of pointers
+ for output, we are cycling through a fixed array of pointers
for return address. */
static int buf_pos = 0;
static struct dwarf_vmatoa_buf
@@ -796,24 +799,70 @@ fetch_indexed_string (dwarf_vma idx, struct cu_tu_set *this_set,
return ret;
}
-static const char *
-fetch_indexed_value (dwarf_vma offset, dwarf_vma bytes)
+static dwarf_vma
+fetch_indexed_addr (dwarf_vma offset, uint32_t num_bytes)
{
struct dwarf_section *section = &debug_displays [debug_addr].section;
if (section->start == NULL)
- return (_("<no .debug_addr section>"));
+ {
+ warn (_("<no .debug_addr section>"));
+ return 0;
+ }
- if (offset + bytes > section->size)
+ if (offset + num_bytes > section->size)
{
warn (_("Offset into section %s too big: 0x%s\n"),
section->name, dwarf_vmatoa ("x", offset));
- return "<offset too big>";
+ return 0;
}
- return dwarf_vmatoa ("x", byte_get (section->start + offset, bytes));
+ return byte_get (section->start + offset, num_bytes);
}
+/* Fetch a value from a debug section that has been indexed by
+ something in another section (eg DW_FORM_loclistx).
+ Returns 0 if the value could not be found. */
+
+static dwarf_vma
+fetch_indexed_value (dwarf_vma idx,
+ enum dwarf_section_display_enum sec_enum)
+{
+ struct dwarf_section *section = &debug_displays [sec_enum].section;
+
+ if (section->start == NULL)
+ {
+ warn (_("Unable to locate %s section\n"), section->uncompressed_name);
+ return 0;
+ }
+
+ uint32_t pointer_size, bias;
+
+ if (byte_get (section->start, 4) == 0xffffffff)
+ {
+ pointer_size = 8;
+ bias = 20;
+ }
+ else
+ {
+ pointer_size = 4;
+ bias = 12;
+ }
+
+ dwarf_vma offset = idx * pointer_size;
+
+ /* Offsets are biased by the size of the section header. */
+ offset += bias;
+
+ if (offset + pointer_size > section->size)
+ {
+ warn (_("Offset into section %s too big: 0x%s\n"),
+ section->name, dwarf_vmatoa ("x", offset));
+ return 0;
+ }
+
+ return byte_get (section->start + offset, pointer_size);
+}
/* FIXME: There are better and more efficient ways to handle
these structures. For now though, I just want something that
@@ -1999,6 +2048,8 @@ skip_attr_bytes (unsigned long form,
case DW_FORM_strx:
case DW_FORM_GNU_addr_index:
case DW_FORM_addrx:
+ case DW_FORM_loclistx:
+ case DW_FORM_rnglistx:
READ_ULEB (uvalue, data, end);
break;
@@ -2410,9 +2461,6 @@ read_and_display_attr_value (unsigned long attribute,
switch (form)
{
- default:
- break;
-
case DW_FORM_ref_addr:
if (dwarf_version == 2)
SAFE_BYTE_GET_AND_INC (uvalue, data, pointer_size, end);
@@ -2496,6 +2544,8 @@ read_and_display_attr_value (unsigned long attribute,
case DW_FORM_udata:
case DW_FORM_GNU_addr_index:
case DW_FORM_addrx:
+ case DW_FORM_loclistx:
+ case DW_FORM_rnglistx:
READ_ULEB (uvalue, data, end);
break;
@@ -2515,6 +2565,9 @@ read_and_display_attr_value (unsigned long attribute,
case DW_FORM_implicit_const:
uvalue = implicit_const;
break;
+
+ default:
+ break;
}
switch (form)
@@ -2710,6 +2763,8 @@ read_and_display_attr_value (unsigned long attribute,
case DW_FORM_addrx2:
case DW_FORM_addrx3:
case DW_FORM_addrx4:
+ case DW_FORM_loclistx:
+ case DW_FORM_rnglistx:
if (!do_loc)
{
dwarf_vma base;
@@ -2728,11 +2783,11 @@ read_and_display_attr_value (unsigned long attribute,
/* We have already displayed the form name. */
printf (_("%c(index: 0x%s): %s"), delimiter,
dwarf_vmatoa ("x", uvalue),
- fetch_indexed_value (offset, pointer_size));
+ dwarf_vmatoa ("x", fetch_indexed_addr (offset, pointer_size)));
else
printf (_("%c(addr_index: 0x%s): %s"), delimiter,
dwarf_vmatoa ("x", uvalue),
- fetch_indexed_value (offset, pointer_size));
+ dwarf_vmatoa ("x", fetch_indexed_addr (offset, pointer_size)));
}
break;
@@ -2754,6 +2809,13 @@ read_and_display_attr_value (unsigned long attribute,
{
switch (attribute)
{
+ case DW_AT_loclists_base:
+ if (debug_info_p->loclists_base)
+ warn (_("CU @ 0x%s has multiple loclists_base values"),
+ dwarf_vmatoa ("x", debug_info_p->cu_offset));
+ debug_info_p->loclists_base = uvalue;
+ break;
+
case DW_AT_frame_base:
have_frame_base = 1;
/* Fall through. */
@@ -2776,7 +2838,8 @@ read_and_display_attr_value (unsigned long attribute,
case DW_AT_GNU_call_site_target_clobbered:
if ((dwarf_version < 4
&& (form == DW_FORM_data4 || form == DW_FORM_data8))
- || form == DW_FORM_sec_offset)
+ || form == DW_FORM_sec_offset
+ || form == DW_FORM_loclistx)
{
/* Process location list. */
unsigned int lmax = debug_info_p->max_loc_offsets;
@@ -2796,11 +2859,17 @@ read_and_display_attr_value (unsigned long attribute,
lmax, sizeof (*debug_info_p->have_frame_base));
debug_info_p->max_loc_offsets = lmax;
}
- if (this_set != NULL)
+
+ if (form == DW_FORM_loclistx)
+ uvalue = fetch_indexed_value (uvalue, loclists);
+ else if (this_set != NULL)
uvalue += this_set->section_offsets [DW_SECT_LOC];
+
debug_info_p->have_frame_base [num] = have_frame_base;
if (attribute != DW_AT_GNU_locviews)
{
+ uvalue += debug_info_p->loclists_base;
+
/* Corrupt DWARF info can produce more offsets than views.
See PR 23062 for an example. */
if (debug_info_p->num_loc_offsets
@@ -2844,7 +2913,8 @@ read_and_display_attr_value (unsigned long attribute,
case DW_AT_ranges:
if ((dwarf_version < 4
&& (form == DW_FORM_data4 || form == DW_FORM_data8))
- || form == DW_FORM_sec_offset)
+ || form == DW_FORM_sec_offset
+ || form == DW_FORM_rnglistx)
{
/* Process range list. */
unsigned int lmax = debug_info_p->max_range_lists;
@@ -2858,6 +2928,10 @@ read_and_display_attr_value (unsigned long attribute,
lmax, sizeof (*debug_info_p->range_lists));
debug_info_p->max_range_lists = lmax;
}
+
+ if (form == DW_FORM_rnglistx)
+ uvalue = fetch_indexed_value (uvalue, rnglists);
+
debug_info_p->range_lists [num] = uvalue;
debug_info_p->num_range_lists++;
}
@@ -3231,6 +3305,7 @@ read_and_display_attr_value (unsigned long attribute,
have_frame_base = 1;
/* Fall through. */
case DW_AT_location:
+ case DW_AT_loclists_base:
case DW_AT_string_length:
case DW_AT_return_addr:
case DW_AT_data_member_location:
@@ -3248,7 +3323,8 @@ read_and_display_attr_value (unsigned long attribute,
case DW_AT_GNU_call_site_target_clobbered:
if ((dwarf_version < 4
&& (form == DW_FORM_data4 || form == DW_FORM_data8))
- || form == DW_FORM_sec_offset)
+ || form == DW_FORM_sec_offset
+ || form == DW_FORM_loclistx)
printf (_(" (location list)"));
/* Fall through. */
case DW_AT_allocated:
@@ -3517,6 +3593,9 @@ process_debug_info (struct dwarf_section * section,
}
load_debug_section_with_follow (abbrev_sec, file);
+ load_debug_section_with_follow (loclists, file);
+ load_debug_section_with_follow (rnglists, file);
+
if (debug_displays [abbrev_sec].section.start == NULL)
{
warn (_("Unable to locate %s section!\n"),
@@ -3729,6 +3808,7 @@ process_debug_info (struct dwarf_section * section,
debug_information [unit].have_frame_base = NULL;
debug_information [unit].max_loc_offsets = 0;
debug_information [unit].num_loc_offsets = 0;
+ debug_information [unit].loclists_base = 0;
debug_information [unit].range_lists = NULL;
debug_information [unit].max_range_lists= 0;
debug_information [unit].num_range_lists = 0;
@@ -5137,7 +5217,7 @@ display_debug_lines_decoded (struct dwarf_section * section,
else
directory = (char *) directory_table[ix - 1];
- if (do_wide || strlen (directory) < 76)
+ if (do_wide)
printf (_("CU: %s/%s:\n"), directory, file_table[0].name);
else
printf ("%s:\n", file_table[0].name);
@@ -6465,20 +6545,21 @@ display_loc_list (struct dwarf_section *section,
/* Display a location list from a normal (ie, non-dwo) .debug_loclists section. */
static void
-display_loclists_list (struct dwarf_section *section,
- unsigned char **start_ptr,
- unsigned int debug_info_entry,
- dwarf_vma offset,
- dwarf_vma base_address,
- unsigned char **vstart_ptr,
- int has_frame_base)
-{
- unsigned char *start = *start_ptr, *vstart = *vstart_ptr;
- unsigned char *section_end = section->start + section->size;
- dwarf_vma cu_offset;
- unsigned int pointer_size;
- unsigned int offset_size;
- int dwarf_version;
+display_loclists_list (struct dwarf_section * section,
+ unsigned char ** start_ptr,
+ unsigned int debug_info_entry,
+ dwarf_vma offset,
+ dwarf_vma base_address,
+ unsigned char ** vstart_ptr,
+ int has_frame_base)
+{
+ unsigned char * start = *start_ptr;
+ unsigned char * vstart = *vstart_ptr;
+ unsigned char * section_end = section->start + section->size;
+ dwarf_vma cu_offset;
+ unsigned int pointer_size;
+ unsigned int offset_size;
+ unsigned int dwarf_version;
/* Initialize it due to a false compiler warning. */
dwarf_vma begin = -1, vbegin = -1;
@@ -6544,27 +6625,59 @@ display_loclists_list (struct dwarf_section *section,
case DW_LLE_end_of_list:
printf (_("<End of list>\n"));
break;
+
+ case DW_LLE_base_addressx:
+ READ_ULEB (base_address, start, section_end);
+ print_dwarf_vma (base_address, pointer_size);
+ printf (_("(index into .debug_addr) "));
+ base_address = fetch_indexed_addr (base_address, pointer_size);
+ print_dwarf_vma (base_address, pointer_size);
+ printf (_("(base address)\n"));
+ break;
+
+ case DW_LLE_startx_endx:
+ READ_ULEB (begin, start, section_end);
+ begin = fetch_indexed_addr (begin, pointer_size);
+ READ_ULEB (end, start, section_end);
+ end = fetch_indexed_addr (end, pointer_size);
+ break;
+
+ case DW_LLE_startx_length:
+ READ_ULEB (begin, start, section_end);
+ begin = fetch_indexed_addr (begin, pointer_size);
+ READ_ULEB (end, start, section_end);
+ end += begin;
+ break;
+
+ case DW_LLE_default_location:
+ begin = end = 0;
+ break;
+
case DW_LLE_offset_pair:
READ_ULEB (begin, start, section_end);
begin += base_address;
READ_ULEB (end, start, section_end);
end += base_address;
break;
+
+ case DW_LLE_base_address:
+ SAFE_BYTE_GET_AND_INC (base_address, start, pointer_size,
+ section_end);
+ print_dwarf_vma (base_address, pointer_size);
+ printf (_("(base address)\n"));
+ break;
+
case DW_LLE_start_end:
SAFE_BYTE_GET_AND_INC (begin, start, pointer_size, section_end);
SAFE_BYTE_GET_AND_INC (end, start, pointer_size, section_end);
break;
+
case DW_LLE_start_length:
SAFE_BYTE_GET_AND_INC (begin, start, pointer_size, section_end);
READ_ULEB (end, start, section_end);
end += begin;
break;
- case DW_LLE_base_address:
- SAFE_BYTE_GET_AND_INC (base_address, start, pointer_size,
- section_end);
- print_dwarf_vma (base_address, pointer_size);
- printf (_("(base address)\n"));
- break;
+
#ifdef DW_LLE_view_pair
case DW_LLE_view_pair:
if (vstart)
@@ -6578,15 +6691,17 @@ display_loclists_list (struct dwarf_section *section,
printf (_("views for:\n"));
continue;
#endif
+
default:
error (_("Invalid location list entry type %d\n"), llet);
return;
}
+
if (llet == DW_LLE_end_of_list)
break;
- if (llet != DW_LLE_offset_pair
- && llet != DW_LLE_start_end
- && llet != DW_LLE_start_length)
+
+ if (llet == DW_LLE_base_address
+ || llet == DW_LLE_base_addressx)
continue;
if (start == section_end)
@@ -6828,6 +6943,218 @@ loc_offsets_compar (const void *ap, const void *bp)
}
static int
+display_offset_entry_loclists (struct dwarf_section *section)
+{
+ unsigned char * start = section->start;
+ unsigned char * const end = start + section->size;
+
+ introduce (section, false);
+
+ do
+ {
+ dwarf_vma length;
+ unsigned short version;
+ unsigned char address_size;
+ unsigned char segment_selector_size;
+ uint32_t offset_entry_count;
+ uint32_t i;
+ bool is_64bit;
+
+ printf (_("Table at Offset 0x%lx\n"), (long)(start - section->start));
+
+ SAFE_BYTE_GET_AND_INC (length, start, 4, end);
+ if (length == 0xffffffff)
+ {
+ is_64bit = true;
+ SAFE_BYTE_GET_AND_INC (length, start, 8, end);
+ }
+ else
+ is_64bit = false;
+
+ SAFE_BYTE_GET_AND_INC (version, start, 2, end);
+ SAFE_BYTE_GET_AND_INC (address_size, start, 1, end);
+ SAFE_BYTE_GET_AND_INC (segment_selector_size, start, 1, end);
+ SAFE_BYTE_GET_AND_INC (offset_entry_count, start, 4, end);
+
+ printf (_(" Length: 0x%s\n"), dwarf_vmatoa ("x", length));
+ printf (_(" DWARF version: %u\n"), version);
+ printf (_(" Address size: %u\n"), address_size);
+ printf (_(" Segment size: %u\n"), segment_selector_size);
+ printf (_(" Offset entries: %u\n"), offset_entry_count);
+
+ if (version < 5)
+ {
+ warn (_("The %s section contains a corrupt or "
+ "unsupported version number: %d.\n"),
+ section->name, version);
+ return 0;
+ }
+
+ if (segment_selector_size != 0)
+ {
+ warn (_("The %s section contains an "
+ "unsupported segment selector size: %d.\n"),
+ section->name, segment_selector_size);
+ return 0;
+ }
+
+ if (offset_entry_count == 0)
+ {
+ warn (_("The %s section contains a table without offset\n"),
+ section->name);
+ return 0;
+ }
+
+ printf (_("\n Offset Entries starting at 0x%lx:\n"),
+ (long)(start - section->start));
+
+ if (is_64bit)
+ {
+ for (i = 0; i < offset_entry_count; i++)
+ {
+ dwarf_vma entry;
+
+ SAFE_BYTE_GET_AND_INC (entry, start, 8, end);
+ printf (_(" [%6u] 0x%s\n"), i, dwarf_vmatoa ("x", entry));
+ }
+ }
+ else
+ {
+ for (i = 0; i < offset_entry_count; i++)
+ {
+ uint32_t entry;
+
+ SAFE_BYTE_GET_AND_INC (entry, start, 4, end);
+ printf (_(" [%6u] 0x%x\n"), i, entry);
+ }
+ }
+
+ putchar ('\n');
+
+ uint32_t j;
+
+ for (j = 1, i = 0; i < offset_entry_count;)
+ {
+ unsigned char lle;
+ dwarf_vma base_address = 0;
+ dwarf_vma begin;
+ dwarf_vma finish;
+ dwarf_vma off = start - section->start;
+
+ if (j != i)
+ {
+ printf (_(" Offset Entry %u\n"), i);
+ j = i;
+ }
+
+ printf (" ");
+ print_dwarf_vma (off, 4);
+
+ SAFE_BYTE_GET_AND_INC (lle, start, 1, end);
+
+ switch (lle)
+ {
+ case DW_LLE_end_of_list:
+ printf (_("<End of list>\n\n"));
+ i ++;
+ continue;
+
+ case DW_LLE_base_addressx:
+ READ_ULEB (base_address, start, end);
+ print_dwarf_vma (base_address, address_size);
+ printf (_("(index into .debug_addr) "));
+ base_address = fetch_indexed_addr (base_address, address_size);
+ print_dwarf_vma (base_address, address_size);
+ printf (_("(base address)\n"));
+ continue;
+
+ case DW_LLE_startx_endx:
+ READ_ULEB (begin, start, end);
+ begin = fetch_indexed_addr (begin, address_size);
+ READ_ULEB (finish, start, end);
+ finish = fetch_indexed_addr (finish, address_size);
+ break;
+
+ case DW_LLE_startx_length:
+ READ_ULEB (begin, start, end);
+ begin = fetch_indexed_addr (begin, address_size);
+ READ_ULEB (finish, start, end);
+ finish += begin;
+ break;
+
+ case DW_LLE_offset_pair:
+ READ_ULEB (begin, start, end);
+ begin += base_address;
+ READ_ULEB (finish, start, end);
+ finish += base_address;
+ break;
+
+ case DW_LLE_default_location:
+ begin = finish = 0;
+ break;
+
+ case DW_LLE_base_address:
+ SAFE_BYTE_GET_AND_INC (base_address, start, address_size, end);
+ print_dwarf_vma (base_address, address_size);
+ printf (_("(base address)\n"));
+ continue;
+
+ case DW_LLE_start_end:
+ SAFE_BYTE_GET_AND_INC (begin, start, address_size, end);
+ SAFE_BYTE_GET_AND_INC (finish, start, address_size, end);
+ break;
+
+ case DW_LLE_start_length:
+ SAFE_BYTE_GET_AND_INC (begin, start, address_size, end);
+ READ_ULEB (finish, start, end);
+ finish += begin;
+ break;
+
+ default:
+ error (_("Invalid location list entry type %d\n"), lle);
+ return 0;
+ }
+
+ if (start == end)
+ {
+ warn (_("Location list starting at offset 0x%lx is not terminated.\n"),
+ (unsigned long) off);
+ break;
+ }
+
+ print_dwarf_vma (begin, address_size);
+ print_dwarf_vma (finish, address_size);
+
+ if (begin == finish)
+ fputs (_(" (start == end)"), stdout);
+ else if (begin > finish)
+ fputs (_(" (start > end)"), stdout);
+
+ /* Read the counted location descriptions. */
+ READ_ULEB (length, start, end);
+
+ if (length > (size_t) (end - start))
+ {
+ warn (_("Location list starting at offset 0x%lx is not terminated.\n"),
+ (unsigned long) off);
+ break;
+ }
+
+ putchar (' ');
+ (void) decode_location_expression (start, address_size, address_size,
+ version, length, 0, section);
+ start += length;
+ putchar ('\n');
+ }
+
+ putchar ('\n');
+ }
+ while (start < end);
+
+ return 1;
+}
+
+static int
display_debug_loc (struct dwarf_section *section, void *file)
{
unsigned char *start = section->start, *vstart = NULL;
@@ -6893,13 +7220,9 @@ display_debug_loc (struct dwarf_section *section, void *file)
}
SAFE_BYTE_GET_AND_INC (offset_entry_count, hdrptr, 4, end);
+
if (offset_entry_count != 0)
- {
- warn (_("The %s section contains "
- "unsupported offset entry count: %d.\n"),
- section->name, offset_entry_count);
- return 0;
- }
+ return display_offset_entry_loclists (section);
expected_start = hdrptr - section_begin;
}
@@ -6959,9 +7282,10 @@ display_debug_loc (struct dwarf_section *section, void *file)
if (debug_information [first].num_loc_offsets > 0
&& debug_information [first].loc_offsets [0] != expected_start
&& debug_information [first].loc_views [0] != expected_start)
- warn (_("Location lists in %s section start at 0x%s\n"),
+ warn (_("Location lists in %s section start at 0x%s rather than 0x%s\n"),
section->name,
- dwarf_vmatoa ("x", debug_information [first].loc_offsets [0]));
+ dwarf_vmatoa ("x", debug_information [first].loc_offsets [0]),
+ dwarf_vmatoa ("x", expected_start));
if (!locs_sorted)
array = (unsigned int *) xcmalloc (num_loc_list, sizeof (unsigned int));
@@ -7639,24 +7963,44 @@ display_debug_rnglists_list (unsigned char * start,
case DW_RLE_end_of_list:
printf (_("<End of list>\n"));
break;
- case DW_RLE_base_address:
- SAFE_BYTE_GET_AND_INC (base_address, start, pointer_size, finish);
+ case DW_RLE_base_addressx:
+ READ_ULEB (base_address, start, finish);
+ print_dwarf_vma (base_address, pointer_size);
+ printf (_("(base address index) "));
+ base_address = fetch_indexed_addr (base_address, pointer_size);
print_dwarf_vma (base_address, pointer_size);
printf (_("(base address)\n"));
break;
- case DW_RLE_start_length:
- SAFE_BYTE_GET_AND_INC (begin, start, pointer_size, finish);
+ case DW_RLE_startx_endx:
+ READ_ULEB (begin, start, finish);
+ READ_ULEB (end, start, finish);
+ begin = fetch_indexed_addr (begin, pointer_size);
+ end = fetch_indexed_addr (begin, pointer_size);
+ break;
+ case DW_RLE_startx_length:
+ READ_ULEB (begin, start, finish);
READ_ULEB (length, start, finish);
+ begin = fetch_indexed_addr (begin, pointer_size);
end = begin + length;
break;
case DW_RLE_offset_pair:
READ_ULEB (begin, start, finish);
READ_ULEB (end, start, finish);
break;
+ case DW_RLE_base_address:
+ SAFE_BYTE_GET_AND_INC (base_address, start, pointer_size, finish);
+ print_dwarf_vma (base_address, pointer_size);
+ printf (_("(base address)\n"));
+ break;
case DW_RLE_start_end:
SAFE_BYTE_GET_AND_INC (begin, start, pointer_size, finish);
SAFE_BYTE_GET_AND_INC (end, start, pointer_size, finish);
break;
+ case DW_RLE_start_length:
+ SAFE_BYTE_GET_AND_INC (begin, start, pointer_size, finish);
+ READ_ULEB (length, start, finish);
+ end = begin + length;
+ break;
default:
error (_("Invalid range list entry type %d\n"), rlet);
rlet = DW_RLE_end_of_list;
@@ -7664,7 +8008,7 @@ display_debug_rnglists_list (unsigned char * start,
}
if (rlet == DW_RLE_end_of_list)
break;
- if (rlet == DW_RLE_base_address)
+ if (rlet == DW_RLE_base_address || rlet == DW_RLE_base_addressx)
continue;
/* Only a DW_RLE_offset_pair needs the base address added. */
@@ -7709,6 +8053,8 @@ display_debug_ranges (struct dwarf_section *section,
return 0;
}
+ introduce (section, false);
+
if (is_rnglists)
{
dwarf_vma initial_length;
@@ -7745,19 +8091,19 @@ display_debug_ranges (struct dwarf_section *section,
}
}
- /* Get and check the version number. */
+ /* Get the other fields in the header. */
SAFE_BYTE_GET_AND_INC (version, start, 2, finish);
-
- if (version != 5)
- {
- warn (_("Only DWARF version 5 debug_rnglists info "
- "is currently supported.\n"));
- return 0;
- }
-
SAFE_BYTE_GET_AND_INC (address_size, start, 1, finish);
-
SAFE_BYTE_GET_AND_INC (segment_selector_size, start, 1, finish);
+ SAFE_BYTE_GET_AND_INC (offset_entry_count, start, 4, finish);
+
+ printf (_(" Length: 0x%s\n"), dwarf_vmatoa ("x", initial_length));
+ printf (_(" DWARF version: %u\n"), version);
+ printf (_(" Address size: %u\n"), address_size);
+ printf (_(" Segment size: %u\n"), segment_selector_size);
+ printf (_(" Offset entries: %u\n"), offset_entry_count);
+
+ /* Check the fields. */
if (segment_selector_size != 0)
{
warn (_("The %s section contains "
@@ -7766,16 +8112,39 @@ display_debug_ranges (struct dwarf_section *section,
return 0;
}
- SAFE_BYTE_GET_AND_INC (offset_entry_count, start, 4, finish);
- if (offset_entry_count != 0)
+ if (version < 5)
{
- warn (_("The %s section contains "
- "unsupported offset entry count: %u.\n"),
- section->name, offset_entry_count);
+ warn (_("Only DWARF version 5+ debug_rnglists info "
+ "is currently supported.\n"));
return 0;
}
- }
+ if (offset_entry_count != 0)
+ {
+ printf (_("\n Offsets starting at 0x%lx:\n"), (long)(start - section->start));
+ if (offset_size == 8)
+ {
+ for (i = 0; i < offset_entry_count; i++)
+ {
+ dwarf_vma entry;
+
+ SAFE_BYTE_GET_AND_INC (entry, start, 8, finish);
+ printf (_(" [%6u] 0x%s\n"), i, dwarf_vmatoa ("x", entry));
+ }
+ }
+ else
+ {
+ for (i = 0; i < offset_entry_count; i++)
+ {
+ uint32_t entry;
+
+ SAFE_BYTE_GET_AND_INC (entry, start, 4, finish);
+ printf (_(" [%6u] 0x%x\n"), i, entry);
+ }
+ }
+ }
+ }
+
if (load_debug_info (file) == 0)
{
warn (_("Unable to load/parse the .debug_info section, so cannot interpret the %s section.\n"),
@@ -7834,8 +8203,7 @@ display_debug_ranges (struct dwarf_section *section,
warn (_("Range lists in %s section start at 0x%lx\n"),
section->name, (unsigned long) range_entries[0].ranges_offset);
- introduce (section, false);
-
+ putchar ('\n');
printf (_(" Offset Begin End\n"));
for (i = 0; i < num_range_list; i++)
@@ -7895,8 +8263,12 @@ display_debug_ranges (struct dwarf_section *section,
start = next;
last_start = next;
- (is_rnglists ? display_debug_rnglists_list : display_debug_ranges_list)
- (start, finish, pointer_size, offset, base_address);
+ if (is_rnglists)
+ display_debug_rnglists_list
+ (start, finish, pointer_size, offset, base_address);
+ else
+ display_debug_ranges_list
+ (start, finish, pointer_size, offset, base_address);
}
putchar ('\n');
@@ -11038,7 +11410,7 @@ debuginfod_fetch_separate_debug_info (struct dwarf_section * section,
return false;
}
-#endif
+#endif /* HAVE_LIBDEBUGINFOD */
static void *
load_separate_debug_info (const char * main_filename,
@@ -11157,9 +11529,10 @@ load_separate_debug_info (const char * main_filename,
{
char * tmp_filename;
- if (debuginfod_fetch_separate_debug_info (xlink,
- & tmp_filename,
- file))
+ if (use_debuginfod
+ && debuginfod_fetch_separate_debug_info (xlink,
+ & tmp_filename,
+ file))
{
/* File successfully downloaded from server, replace
debug_filename with the file's path. */
@@ -11207,13 +11580,15 @@ load_separate_debug_info (const char * main_filename,
warn (_("tried: %s\n"), debug_filename);
#if HAVE_LIBDEBUGINFOD
- {
- char *urls = getenv (DEBUGINFOD_URLS_ENV_VAR);
- if (urls == NULL)
- urls = "";
+ if (use_debuginfod)
+ {
+ char *urls = getenv (DEBUGINFOD_URLS_ENV_VAR);
- warn (_("tried: DEBUGINFOD_URLS=%s\n"), urls);
- }
+ if (urls == NULL)
+ urls = "";
+
+ warn (_("tried: DEBUGINFOD_URLS=%s\n"), urls);
+ }
#endif
}
@@ -11707,6 +12082,9 @@ dwarf_select_sections_by_names (const char *names)
{ "aranges", & do_debug_aranges, 1 },
{ "cu_index", & do_debug_cu_index, 1 },
{ "decodedline", & do_debug_lines, FLAG_DEBUG_LINES_DECODED },
+#ifdef HAVE_LIBDEBUGINFOD
+ { "do-not-use-debuginfod", & use_debuginfod, 0 },
+#endif
{ "follow-links", & do_follow_links, 1 },
{ "frames", & do_debug_frames, 1 },
{ "frames-interp", & do_debug_frames_interp, 1 },
@@ -11730,6 +12108,9 @@ dwarf_select_sections_by_names (const char *names)
{ "trace_abbrev", & do_trace_abbrevs, 1 },
{ "trace_aranges", & do_trace_aranges, 1 },
{ "trace_info", & do_trace_info, 1 },
+#ifdef HAVE_LIBDEBUGINFOD
+ { "use-debuginfod", & use_debuginfod, 1 },
+#endif
{ NULL, NULL, 0 }
};
@@ -11783,6 +12164,10 @@ dwarf_select_sections_by_letters (const char *letters)
case 'A': do_debug_addr = 1; break;
case 'a': do_debug_abbrevs = 1; break;
case 'c': do_debug_cu_index = 1; break;
+#ifdef HAVE_LIBDEBUGINFOD
+ case 'D': use_debuginfod = 1; break;
+ case 'E': use_debuginfod = 0; break;
+#endif
case 'F': do_debug_frames_interp = 1; /* Fall through. */
case 'f': do_debug_frames = 1; break;
case 'g': do_gdb_index = 1; break;
diff --git a/binutils/dwarf.h b/binutils/dwarf.h
index 18430719d48..ccce2461c81 100644
--- a/binutils/dwarf.h
+++ b/binutils/dwarf.h
@@ -181,9 +181,13 @@ typedef struct
/* This is an array of offsets to the location view table. */
dwarf_vma * loc_views;
int * have_frame_base;
+
+ /* Information for associating location lists with CUs. */
unsigned int num_loc_offsets;
unsigned int max_loc_offsets;
unsigned int num_loc_views;
+ dwarf_vma loclists_base;
+
/* List of .debug_ranges offsets seen in this .debug_info. */
dwarf_vma * range_lists;
unsigned int num_range_lists;
@@ -224,6 +228,9 @@ extern int do_debug_cu_index;
extern int do_wide;
extern int do_debug_links;
extern int do_follow_links;
+#ifdef HAVE_LIBDEBUGINFOD
+extern int use_debuginfod;
+#endif
extern bool do_checks;
extern int dwarf_cutoff_level;
diff --git a/binutils/objcopy.c b/binutils/objcopy.c
index d16d8ee67e4..6fb31c8cac7 100644
--- a/binutils/objcopy.c
+++ b/binutils/objcopy.c
@@ -1358,8 +1358,20 @@ is_strip_section_1 (bfd *abfd ATTRIBUTE_UNUSED, asection *sec)
{
/* By default we don't want to strip .reloc section.
This section has for pe-coff special meaning. See
- pe-dll.c file in ld, and peXXigen.c in bfd for details. */
- if (strcmp (bfd_section_name (sec), ".reloc") != 0)
+ pe-dll.c file in ld, and peXXigen.c in bfd for details.
+ Similarly we do not want to strip debuglink sections. */
+ const char * kept_sections[] =
+ {
+ ".reloc",
+ ".gnu_debuglink",
+ ".gnu_debugaltlink"
+ };
+ int i;
+
+ for (i = ARRAY_SIZE (kept_sections);i--;)
+ if (strcmp (bfd_section_name (sec), kept_sections[i]) == 0)
+ break;
+ if (i == -1)
return true;
}
@@ -1681,11 +1693,11 @@ filter_symbols (bfd *abfd, bfd *obfd, asymbol **osyms,
if (keep)
{
- if (((flags & BSF_GLOBAL) != 0
+ if (((flags & (BSF_GLOBAL | BSF_GNU_UNIQUE))
|| undefined)
&& (weaken || is_specified_symbol (name, weaken_specific_htab)))
{
- sym->flags &= ~ BSF_GLOBAL;
+ sym->flags &= ~ (BSF_GLOBAL | BSF_GNU_UNIQUE);
sym->flags |= BSF_WEAK;
}
@@ -4085,9 +4097,6 @@ setup_section (bfd *ibfd, sec_ptr isection, void *obfdarg)
goto loser;
}
- if (make_nobits)
- elf_section_type (osection) = SHT_NOBITS;
-
size = bfd_section_size (isection);
size = bfd_convert_section_size (ibfd, isection, obfd, size);
if (copy_byte >= 0)
@@ -4181,6 +4190,9 @@ setup_section (bfd *ibfd, sec_ptr isection, void *obfdarg)
goto loser;
}
+ if (make_nobits)
+ elf_section_type (osection) = SHT_NOBITS;
+
/* All went well. */
return;
diff --git a/binutils/objdump.c b/binutils/objdump.c
index 372b88d2f4c..060a136efa4 100644
--- a/binutils/objdump.c
+++ b/binutils/objdump.c
@@ -130,9 +130,19 @@ static bool visualize_jumps = false; /* --visualize-jumps. */
static bool color_output = false; /* --visualize-jumps=color. */
static bool extended_color_output = false; /* --visualize-jumps=extended-color. */
static int process_links = false; /* --process-links. */
+static bool disassembler_color = false; /* --disassembler-color=color. */
+static bool disassembler_extended_color = false; /* --disassembler-color=extended-color. */
+static int dump_any_debugging;
static int demangle_flags = DMGL_ANSI | DMGL_PARAMS;
+/* This is reset to false each time we enter the disassembler, and set true
+ when the disassembler emits something in the dis_style_comment_start
+ style. Once this is true, all further output on that line is done in
+ the comment style. This only has an effect when disassembler coloring
+ is turned on. */
+static bool disassembler_in_comment = false;
+
/* A structure to record the sections mentioned in -j switches. */
struct only
{
@@ -281,6 +291,14 @@ usage (FILE *stream, int status)
Do not follow links to separate debug info files\n\
(default)\n"));
#endif
+#if HAVE_LIBDEBUGINFOD
+ fprintf (stream, _("\
+ -WD --dwarf=use-debuginfod\n\
+ When following links, also query debuginfod servers (default)\n"));
+ fprintf (stream, _("\
+ -WE --dwarf=do-not-use-debuginfod\n\
+ When following links, do not query debuginfod servers\n"));
+#endif
fprintf (stream, _("\
-L, --process-links Display the contents of non-debug sections in\n\
separate debuginfo files. (Implies -WK)\n"));
@@ -387,6 +405,10 @@ usage (FILE *stream, int status)
Use extended 8-bit color codes\n"));
fprintf (stream, _("\
--visualize-jumps=off Disable jump visualization\n\n"));
+ fprintf (stream, _("\
+ --disassembler-color=off Disable disassembler color output.\n\n"));
+ fprintf (stream, _("\
+ --disassembler-color=color Use basic colors in disassembler output.\n\n"));
list_supported_targets (program_name, stream);
list_supported_architectures (program_name, stream);
@@ -428,7 +450,8 @@ enum option_values
OPTION_CTF,
OPTION_CTF_PARENT,
#endif
- OPTION_VISUALIZE_JUMPS
+ OPTION_VISUALIZE_JUMPS,
+ OPTION_DISASSEMBLER_COLOR
};
static struct option long_options[]=
@@ -494,6 +517,7 @@ static struct option long_options[]=
{"version", no_argument, NULL, 'V'},
{"visualize-jumps", optional_argument, 0, OPTION_VISUALIZE_JUMPS},
{"wide", no_argument, NULL, 'w'},
+ {"disassembler-color", required_argument, NULL, OPTION_DISASSEMBLER_COLOR},
{NULL, no_argument, NULL, 0}
};
@@ -1237,7 +1261,7 @@ objdump_print_value (bfd_vma vma, struct disassemble_info *inf,
if (*p == '\0')
--p;
}
- (*inf->fprintf_func) (inf->stream, "%s", p);
+ (*inf->fprintf_styled_func) (inf->stream, dis_style_address, "%s", p);
}
/* Print the name of a symbol. */
@@ -1271,10 +1295,11 @@ objdump_print_symname (bfd *abfd, struct disassemble_info *inf,
if (inf != NULL)
{
- (*inf->fprintf_func) (inf->stream, "%s", name);
+ (*inf->fprintf_styled_func) (inf->stream, dis_style_symbol, "%s", name);
if (version_string && *version_string != '\0')
- (*inf->fprintf_func) (inf->stream, hidden ? "@%s" : "@@%s",
- version_string);
+ (*inf->fprintf_styled_func) (inf->stream, dis_style_symbol,
+ hidden ? "@%s" : "@@%s",
+ version_string);
}
else
{
@@ -1536,31 +1561,33 @@ objdump_print_addr_with_sym (bfd *abfd, asection *sec, asymbol *sym,
if (!no_addresses)
{
objdump_print_value (vma, inf, skip_zeroes);
- (*inf->fprintf_func) (inf->stream, " ");
+ (*inf->fprintf_styled_func) (inf->stream, dis_style_text, " ");
}
if (sym == NULL)
{
bfd_vma secaddr;
- (*inf->fprintf_func) (inf->stream, "<%s",
- sanitize_string (bfd_section_name (sec)));
+ (*inf->fprintf_styled_func) (inf->stream, dis_style_text,"<");
+ (*inf->fprintf_styled_func) (inf->stream, dis_style_symbol, "%s",
+ sanitize_string (bfd_section_name (sec)));
secaddr = bfd_section_vma (sec);
if (vma < secaddr)
{
- (*inf->fprintf_func) (inf->stream, "-0x");
+ (*inf->fprintf_styled_func) (inf->stream, dis_style_immediate,
+ "-0x");
objdump_print_value (secaddr - vma, inf, true);
}
else if (vma > secaddr)
{
- (*inf->fprintf_func) (inf->stream, "+0x");
+ (*inf->fprintf_styled_func) (inf->stream, dis_style_immediate, "+0x");
objdump_print_value (vma - secaddr, inf, true);
}
- (*inf->fprintf_func) (inf->stream, ">");
+ (*inf->fprintf_styled_func) (inf->stream, dis_style_text, ">");
}
else
{
- (*inf->fprintf_func) (inf->stream, "<");
+ (*inf->fprintf_styled_func) (inf->stream, dis_style_text, "<");
objdump_print_symname (abfd, inf, sym);
@@ -1577,21 +1604,22 @@ objdump_print_addr_with_sym (bfd *abfd, asection *sec, asymbol *sym,
;
else if (bfd_asymbol_value (sym) > vma)
{
- (*inf->fprintf_func) (inf->stream, "-0x");
+ (*inf->fprintf_styled_func) (inf->stream, dis_style_immediate,"-0x");
objdump_print_value (bfd_asymbol_value (sym) - vma, inf, true);
}
else if (vma > bfd_asymbol_value (sym))
{
- (*inf->fprintf_func) (inf->stream, "+0x");
+ (*inf->fprintf_styled_func) (inf->stream, dis_style_immediate, "+0x");
objdump_print_value (vma - bfd_asymbol_value (sym), inf, true);
}
- (*inf->fprintf_func) (inf->stream, ">");
+ (*inf->fprintf_styled_func) (inf->stream, dis_style_text, ">");
}
if (display_file_offsets)
- inf->fprintf_func (inf->stream, _(" (File Offset: 0x%lx)"),
- (long int)(sec->filepos + (vma - sec->vma)));
+ inf->fprintf_styled_func (inf->stream, dis_style_text,
+ _(" (File Offset: 0x%lx)"),
+ (long int)(sec->filepos + (vma - sec->vma)));
}
/* Print an address (VMA), symbolically if possible.
@@ -1612,14 +1640,15 @@ objdump_print_addr (bfd_vma vma,
{
if (!no_addresses)
{
- (*inf->fprintf_func) (inf->stream, "0x");
+ (*inf->fprintf_styled_func) (inf->stream, dis_style_address, "0x");
objdump_print_value (vma, inf, skip_zeroes);
}
if (display_file_offsets)
- inf->fprintf_func (inf->stream, _(" (File Offset: 0x%lx)"),
- (long int) (inf->section->filepos
- + (vma - inf->section->vma)));
+ inf->fprintf_styled_func (inf->stream, dis_style_text,
+ _(" (File Offset: 0x%lx)"),
+ (long int) (inf->section->filepos
+ + (vma - inf->section->vma)));
return;
}
@@ -2118,6 +2147,143 @@ objdump_sprintf (SFILE *f, const char *format, ...)
return n;
}
+/* Return an integer greater than, or equal to zero, representing the color
+ for STYLE, or -1 if no color should be used. */
+
+static int
+objdump_color_for_disassembler_style (enum disassembler_style style)
+{
+ int color = -1;
+
+ if (style == dis_style_comment_start)
+ disassembler_in_comment = true;
+
+ if (disassembler_color)
+ {
+ if (disassembler_in_comment)
+ return color;
+
+ switch (style)
+ {
+ case dis_style_symbol: color = 32; break;
+ case dis_style_assembler_directive:
+ case dis_style_mnemonic: color = 33; break;
+ case dis_style_register: color = 34; break;
+ case dis_style_address:
+ case dis_style_address_offset:
+ case dis_style_immediate: color = 35; break;
+ default:
+ case dis_style_text: color = -1; break;
+ }
+ }
+ else if (disassembler_extended_color)
+ {
+ if (disassembler_in_comment)
+ return 250;
+
+ switch (style)
+ {
+ case dis_style_symbol: color = 40; break;
+ case dis_style_assembler_directive:
+ case dis_style_mnemonic: color = 142; break;
+ case dis_style_register: color = 27; break;
+ case dis_style_address:
+ case dis_style_address_offset:
+ case dis_style_immediate: color = 134; break;
+ default:
+ case dis_style_text: color = -1; break;
+ }
+ }
+
+ return color;
+}
+
+/* Like objdump_sprintf, but add in escape sequences to highlight the
+ content according to STYLE. */
+
+static int ATTRIBUTE_PRINTF_3
+objdump_styled_sprintf (SFILE *f, enum disassembler_style style,
+ const char *format, ...)
+{
+ size_t n;
+ va_list args;
+ int color = objdump_color_for_disassembler_style (style);
+
+ if (color >= 0)
+ {
+ while (1)
+ {
+ size_t space = f->alloc - f->pos;
+
+ if (disassembler_color)
+ n = snprintf (f->buffer + f->pos, space, "\033[%dm", color);
+ else
+ n = snprintf (f->buffer + f->pos, space, "\033[38;5;%dm", color);
+ if (space > n)
+ break;
+
+ f->alloc = (f->alloc + n) * 2;
+ f->buffer = (char *) xrealloc (f->buffer, f->alloc);
+ }
+ f->pos += n;
+ }
+
+ while (1)
+ {
+ size_t space = f->alloc - f->pos;
+
+ va_start (args, format);
+ n = vsnprintf (f->buffer + f->pos, space, format, args);
+ va_end (args);
+
+ if (space > n)
+ break;
+
+ f->alloc = (f->alloc + n) * 2;
+ f->buffer = (char *) xrealloc (f->buffer, f->alloc);
+ }
+ f->pos += n;
+
+ if (color >= 0)
+ {
+ while (1)
+ {
+ size_t space = f->alloc - f->pos;
+
+ n = snprintf (f->buffer + f->pos, space, "\033[0m");
+
+ if (space > n)
+ break;
+
+ f->alloc = (f->alloc + n) * 2;
+ f->buffer = (char *) xrealloc (f->buffer, f->alloc);
+ }
+ f->pos += n;
+ }
+
+ return n;
+}
+
+/* We discard the styling information here. This function is only used
+ when objdump is printing auxiliary information, the symbol headers, and
+ disassembly address, or the bytes of the disassembled instruction. We
+ don't (currently) apply styling to any of this stuff, so, for now, just
+ print the content with no additional style added. */
+
+static int ATTRIBUTE_PRINTF_3
+fprintf_styled (FILE *f, enum disassembler_style style ATTRIBUTE_UNUSED,
+ const char *fmt, ...)
+{
+ int res;
+ va_list ap;
+
+ va_start (ap, fmt);
+ res = vfprintf (f, fmt, ap);
+ va_end (ap);
+
+ return res;
+}
+
/* Code for generating (colored) diagrams of control flow start and end
points. */
@@ -2549,8 +2715,8 @@ disassemble_jumps (struct disassemble_info * inf,
sfile.pos = 0;
inf->insn_info_valid = 0;
- inf->fprintf_func = (fprintf_ftype) objdump_sprintf;
- inf->stream = &sfile;
+ disassemble_set_printf (inf, &sfile, (fprintf_ftype) objdump_sprintf,
+ (fprintf_styled_ftype) objdump_styled_sprintf);
addr_offset = start_offset;
while (addr_offset < stop_offset)
@@ -2612,6 +2778,7 @@ disassemble_jumps (struct disassemble_info * inf,
/* Extract jump information. */
inf->insn_info_valid = 0;
+ disassembler_in_comment = false;
octets = (*disassemble_fn) (section->vma + addr_offset, inf);
/* Test if a jump was detected. */
if (inf->insn_info_valid
@@ -2632,9 +2799,8 @@ disassemble_jumps (struct disassemble_info * inf,
addr_offset += octets / opb;
}
- inf->fprintf_func = (fprintf_ftype) fprintf;
- inf->stream = stdout;
-
+ disassemble_set_printf (inf, (void *) stdout, (fprintf_ftype) fprintf,
+ (fprintf_styled_ftype) fprintf_styled);
free (sfile.buffer);
/* Merge jumps. */
@@ -2727,6 +2893,17 @@ null_print (const void * stream ATTRIBUTE_UNUSED, const char * format ATTRIBUTE_
return 1;
}
+/* Like null_print, but takes the extra STYLE argument. As this is not
+ going to print anything, the extra argument is just ignored. */
+
+static int
+null_styled_print (const void * stream ATTRIBUTE_UNUSED,
+ enum disassembler_style style ATTRIBUTE_UNUSED,
+ const char * format ATTRIBUTE_UNUSED, ...)
+{
+ return 1;
+}
+
/* Print out jump visualization. */
static void
@@ -2937,8 +3114,9 @@ disassemble_bytes (struct disassemble_info *inf,
int insn_size;
sfile.pos = 0;
- inf->fprintf_func = (fprintf_ftype) objdump_sprintf;
- inf->stream = &sfile;
+ disassemble_set_printf
+ (inf, &sfile, (fprintf_ftype) objdump_sprintf,
+ (fprintf_styled_ftype) objdump_styled_sprintf);
inf->bytes_per_line = 0;
inf->bytes_per_chunk = 0;
inf->flags = ((disassemble_all ? DISASSEMBLE_DATA : 0)
@@ -2980,10 +3158,15 @@ disassemble_bytes (struct disassemble_info *inf,
twice, but we only do this when there is a high
probability that there is a reloc that will
affect the instruction. */
- inf->fprintf_func = (fprintf_ftype) null_print;
+ disassemble_set_printf
+ (inf, inf->stream, (fprintf_ftype) null_print,
+ (fprintf_styled_ftype) null_styled_print);
insn_size = disassemble_fn (section->vma
+ addr_offset, inf);
- inf->fprintf_func = (fprintf_ftype) objdump_sprintf;
+ disassemble_set_printf
+ (inf, inf->stream,
+ (fprintf_ftype) objdump_sprintf,
+ (fprintf_styled_ftype) objdump_styled_sprintf);
}
}
@@ -3008,12 +3191,13 @@ disassemble_bytes (struct disassemble_info *inf,
inf->stop_vma = section->vma + stop_offset;
inf->stop_offset = stop_offset;
+ disassembler_in_comment = false;
insn_size = (*disassemble_fn) (section->vma + addr_offset, inf);
octets = insn_size;
inf->stop_vma = 0;
- inf->fprintf_func = (fprintf_ftype) fprintf;
- inf->stream = stdout;
+ disassemble_set_printf (inf, stdout, (fprintf_ftype) fprintf,
+ (fprintf_styled_ftype) fprintf_styled);
if (insn_width == 0 && inf->bytes_per_line != 0)
octets_per_line = inf->bytes_per_line;
if (insn_size < (int) opb)
@@ -3574,8 +3758,9 @@ disassemble_section (bfd *abfd, asection *section, void *inf)
sf.alloc = strlen (sym->name) + 40;
sf.buffer = (char*) xmalloc (sf.alloc);
sf.pos = 0;
- di.fprintf_func = (fprintf_ftype) objdump_sprintf;
- di.stream = &sf;
+ disassemble_set_printf
+ (&di, &sf, (fprintf_ftype) objdump_sprintf,
+ (fprintf_styled_ftype) objdump_styled_sprintf);
objdump_print_symname (abfd, &di, sym);
@@ -3644,8 +3829,8 @@ disassemble_data (bfd *abfd)
++sorted_symcount;
}
- init_disassemble_info (&disasm_info, stdout, (fprintf_ftype) fprintf);
-
+ init_disassemble_info (&disasm_info, stdout, (fprintf_ftype) fprintf,
+ (fprintf_styled_ftype) fprintf_styled);
disasm_info.application_data = (void *) &aux;
aux.abfd = abfd;
aux.require_sec = false;
@@ -3851,6 +4036,9 @@ load_debug_section (enum dwarf_section_display_enum debug, void *file)
asection *sec;
const char *name;
+ if (!dump_any_debugging)
+ return false;
+
/* If it is already loaded, do nothing. */
if (section->start != NULL)
{
@@ -3942,15 +4130,20 @@ get_build_id (void * data)
static void
dump_dwarf_section (bfd *abfd, asection *section,
- void *arg ATTRIBUTE_UNUSED)
+ void *arg)
{
const char *name = bfd_section_name (section);
const char *match;
int i;
+ bool is_mainfile = *(bool *) arg;
if (*name == 0)
return;
+ if (!is_mainfile && !process_links
+ && (section->flags & SEC_DEBUGGING) == 0)
+ return;
+
if (startswith (name, ".gnu.linkonce.wi."))
match = ".debug_info";
else
@@ -3986,7 +4179,7 @@ dump_dwarf_section (bfd *abfd, asection *section,
/* Dump the dwarf debugging information. */
static void
-dump_dwarf (bfd *abfd)
+dump_dwarf (bfd *abfd, bool is_mainfile)
{
/* The byte_get pointer should have been set at the start of dump_bfd(). */
if (byte_get == NULL)
@@ -4012,7 +4205,7 @@ dump_dwarf (bfd *abfd)
init_dwarf_regnames_by_bfd_arch_and_mach (bfd_get_arch (abfd),
bfd_get_mach (abfd));
- bfd_map_over_sections (abfd, dump_dwarf_section, NULL);
+ bfd_map_over_sections (abfd, dump_dwarf_section, (void *) &is_mainfile);
}
/* Read ABFD's stabs section STABSECT_NAME, and return a pointer to
@@ -5053,23 +5246,23 @@ dump_bfd (bfd *abfd, bool is_mainfile)
bfd_map_over_sections (abfd, adjust_addresses, &has_reloc);
}
- if (! is_mainfile && ! process_links)
- return;
-
- if (! dump_debugging_tags && ! suppress_bfd_header)
- printf (_("\n%s: file format %s\n"),
- sanitize_string (bfd_get_filename (abfd)),
- abfd->xvec->name);
- if (dump_ar_hdrs)
- print_arelt_descr (stdout, abfd, true, false);
- if (dump_file_header)
- dump_bfd_header (abfd);
- if (dump_private_headers)
- dump_bfd_private_header (abfd);
- if (dump_private_options != NULL)
- dump_target_specific (abfd);
- if (! dump_debugging_tags && ! suppress_bfd_header)
- putchar ('\n');
+ if (is_mainfile || process_links)
+ {
+ if (! dump_debugging_tags && ! suppress_bfd_header)
+ printf (_("\n%s: file format %s\n"),
+ sanitize_string (bfd_get_filename (abfd)),
+ abfd->xvec->name);
+ if (dump_ar_hdrs)
+ print_arelt_descr (stdout, abfd, true, false);
+ if (dump_file_header)
+ dump_bfd_header (abfd);
+ if (dump_private_headers)
+ dump_bfd_private_header (abfd);
+ if (dump_private_options != NULL)
+ dump_target_specific (abfd);
+ if (! dump_debugging_tags && ! suppress_bfd_header)
+ putchar ('\n');
+ }
if (dump_symtab
|| dump_reloc_info
@@ -5112,39 +5305,46 @@ dump_bfd (bfd *abfd, bool is_mainfile)
}
}
- if (dump_section_headers)
- dump_headers (abfd);
+ if (is_mainfile || process_links)
+ {
+ if (dump_section_headers)
+ dump_headers (abfd);
- if (dump_dynamic_symtab || dump_dynamic_reloc_info
- || (disassemble && bfd_get_dynamic_symtab_upper_bound (abfd) > 0))
- dynsyms = slurp_dynamic_symtab (abfd);
+ if (dump_dynamic_symtab || dump_dynamic_reloc_info
+ || (disassemble && bfd_get_dynamic_symtab_upper_bound (abfd) > 0))
+ dynsyms = slurp_dynamic_symtab (abfd);
- if (disassemble)
- {
- synthcount = bfd_get_synthetic_symtab (abfd, symcount, syms,
- dynsymcount, dynsyms, &synthsyms);
- if (synthcount < 0)
- synthcount = 0;
- }
+ if (disassemble)
+ {
+ synthcount = bfd_get_synthetic_symtab (abfd, symcount, syms,
+ dynsymcount, dynsyms,
+ &synthsyms);
+ if (synthcount < 0)
+ synthcount = 0;
+ }
- if (dump_symtab)
- dump_symbols (abfd, false);
- if (dump_dynamic_symtab)
- dump_symbols (abfd, true);
+ if (dump_symtab)
+ dump_symbols (abfd, false);
+ if (dump_dynamic_symtab)
+ dump_symbols (abfd, true);
+ }
if (dump_dwarf_section_info)
- dump_dwarf (abfd);
- if (dump_ctf_section_info)
- dump_ctf (abfd, dump_ctf_section_name, dump_ctf_parent_name);
- if (dump_stab_section_info)
- dump_stabs (abfd);
- if (dump_reloc_info && ! disassemble)
- dump_relocs (abfd);
- if (dump_dynamic_reloc_info && ! disassemble)
- dump_dynamic_relocs (abfd);
- if (dump_section_contents)
- dump_data (abfd);
- if (disassemble)
- disassemble_data (abfd);
+ dump_dwarf (abfd, is_mainfile);
+ if (is_mainfile || process_links)
+ {
+ if (dump_ctf_section_info)
+ dump_ctf (abfd, dump_ctf_section_name, dump_ctf_parent_name);
+ if (dump_stab_section_info)
+ dump_stabs (abfd);
+ if (dump_reloc_info && ! disassemble)
+ dump_relocs (abfd);
+ if (dump_dynamic_reloc_info && ! disassemble)
+ dump_dynamic_relocs (abfd);
+ if (dump_section_contents)
+ dump_data (abfd);
+ if (disassemble)
+ disassemble_data (abfd);
+ }
if (dump_debugging)
{
@@ -5169,7 +5369,7 @@ dump_bfd (bfd *abfd, bool is_mainfile)
else if (! dump_dwarf_section_info)
{
dwarf_select_sections_all ();
- dump_dwarf (abfd);
+ dump_dwarf (abfd, is_mainfile);
}
}
@@ -5471,6 +5671,16 @@ main (int argc, char **argv)
nonfatal (_("unrecognized argument to --visualize-option"));
}
break;
+ case OPTION_DISASSEMBLER_COLOR:
+ if (streq (optarg, "off"))
+ disassembler_color = false;
+ else if (streq (optarg, "color"))
+ disassembler_color = true;
+ else if (streq (optarg, "extended-color"))
+ disassembler_extended_color = true;
+ else
+ nonfatal (_("unrecognized argument to --disassembler-color"));
+ break;
case 'E':
if (strcmp (optarg, "B") == 0)
endian = BFD_ENDIAN_BIG;
@@ -5676,6 +5886,10 @@ main (int argc, char **argv)
if (!seenflag)
usage (stderr, 2);
+ dump_any_debugging = (dump_debugging
+ || dump_dwarf_section_info
+ || process_links);
+
if (formats_info)
exit_status = display_info ();
else
diff --git a/binutils/po/bg.po b/binutils/po/bg.po
index 2ca20160cef..9bddfea1a35 100644
--- a/binutils/po/bg.po
+++ b/binutils/po/bg.po
@@ -1,14 +1,16 @@
# Translation of binutils to Bulgarian
# Copyright (C) 2010, 2011, 2012, 2014 Free Software Foundation, Inc.
# This file is distributed under the same license as the binutils package.
-# Roumen Petrov <transl@roumenpetrov.info>, 2010-2020.
+# Roumen Petrov <transl@roumenpetrov.info>, 2010-2022.
#
+# Abbreviations:
+# LTO - link time optimization
msgid ""
msgstr ""
-"Project-Id-Version: binutils 2.34.90\n"
-"Report-Msgid-Bugs-To: bug-binutils@gnu.org\n"
-"POT-Creation-Date: 2020-07-04 10:32+0100\n"
-"PO-Revision-Date: 2020-07-05 17:57+0200\n"
+"Project-Id-Version: binutils 2.37.90\n"
+"Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n"
+"POT-Creation-Date: 2022-01-22 12:22+0000\n"
+"PO-Revision-Date: 2022-01-23 22:23+0200\n"
"Last-Translator: Румен Петров <transl@roumenpetrov.info>\n"
"Language-Team: Bulgarian <dict@ludost.net>\n"
"Language: bg\n"
@@ -70,10 +72,10 @@ msgstr ""
" -v --version Показва верÑÐ¸Ñ Ð½Ð° програмата\n"
"\n"
-#: addr2line.c:109 ar.c:349 ar.c:386 coffdump.c:471 dlltool.c:3981
-#: dllwrap.c:518 elfedit.c:921 objcopy.c:691 objcopy.c:745 readelf.c:4607
-#: size.c:109 srconv.c:1704 strings.c:727 sysdump.c:646 windmc.c:227
-#: windres.c:688
+#: addr2line.c:109 ar.c:359 ar.c:396 coffdump.c:471 dlltool.c:3713
+#: dllwrap.c:518 elfedit.c:976 objcopy.c:697 objcopy.c:752 readelf.c:5165
+#: size.c:109 srconv.c:1704 strings.c:1343 sysdump.c:655 windmc.c:227
+#: windres.c:690
#, c-format
msgid "Report bugs to %s\n"
msgstr "Подавайте доклади за грешки на %s\n"
@@ -109,217 +111,232 @@ msgstr "%s: не може да Ñе получат адреÑи от архивÐ
msgid "%s: cannot find section %s"
msgstr "%s: не може да Ñе намери раздел %s"
-#: addr2line.c:444 ar.c:747 dlltool.c:3499 nm.c:1726 objcopy.c:5993
-#: objdump.c:5127 size.c:153 strings.c:291 windmc.c:960 windres.c:815
+#: addr2line.c:442 ar.c:758 dlltool.c:3237 nm.c:2051 objcopy.c:6036
+#: objdump.c:5372 size.c:151 strings.c:340 windmc.c:958 windres.c:816
msgid "fatal error: libbfd ABI mismatch"
msgstr ""
-#: addr2line.c:471 nm.c:1752 objdump.c:5174
+#: addr2line.c:469 nm.c:2077 objdump.c:5419 readelf.c:5438
#, c-format
msgid "unknown demangling style `%s'"
msgstr "непознат начин за разкодиране '%s'"
-#: ar.c:268
+#: ar.c:275
#, c-format
msgid "no entry %s in archive\n"
msgstr "в архива липÑва входна точка %s\n"
-#: ar.c:282
+#: ar.c:289
#, c-format
msgid "Usage: %s [emulation options] [-]{dmpqrstx}[abcDfilMNoOPsSTuvV] [--plugin <name>] [member-name] [count] archive-file file...\n"
msgstr "Употреба: %s [опции за подражаване] [-]{dmpqrstx}[abcDfilMNoOPsSTuvV] [--plugin <име>] [член-име] [брой] архивен-файл файл...\n"
-#: ar.c:288
+#: ar.c:295
#, c-format
msgid "Usage: %s [emulation options] [-]{dmpqrstx}[abcDfilMNoOPsSTuvV] [member-name] [count] archive-file file...\n"
msgstr "Употреба: %s [опции за подражаване] [-]{dmpqrstx}[abcDfilMNoOPsSTuvV] [член-име] [брой] архивен-файл файл...\n"
-#: ar.c:296
+#: ar.c:303
#, c-format
msgid " %s -M [<mri-script]\n"
msgstr " %s -M [<mri-Ñкрипт]\n"
-#: ar.c:297
+#: ar.c:304
#, c-format
msgid " commands:\n"
msgstr " команди:\n"
-#: ar.c:298
+#: ar.c:305
#, c-format
msgid " d - delete file(s) from the archive\n"
msgstr " d - изтриване на файлове от архива\n"
-#: ar.c:299
+#: ar.c:306
#, c-format
msgid " m[ab] - move file(s) in the archive\n"
msgstr " m[ab] - премеÑтване на файлове в архива\n"
-#: ar.c:300
+#: ar.c:307
#, c-format
msgid " p - print file(s) found in the archive\n"
msgstr " p - извеждане на файлове намерени в архива\n"
-#: ar.c:301
+#: ar.c:308
#, c-format
msgid " q[f] - quick append file(s) to the archive\n"
msgstr " q[f] - бързо добавÑне на файлове към архива\n"
-#: ar.c:302
+#: ar.c:309
#, c-format
msgid " r[ab][f][u] - replace existing or insert new file(s) into the archive\n"
msgstr " r[ab][f][u] - замеÑтва ÑъщеÑтвуващ или вмъква нови файлове в архива\n"
-#: ar.c:303
+#: ar.c:310
#, c-format
msgid " s - act as ranlib\n"
msgstr " s - държи Ñе като ranlib\n"
-#: ar.c:304
+#: ar.c:311
#, c-format
msgid " t[O][v] - display contents of the archive\n"
msgstr " t[O][v] - показване Ñъдържанието на архива\n"
-#: ar.c:305
+#: ar.c:312
#, c-format
msgid " x[o] - extract file(s) from the archive\n"
msgstr " x[o] - изваждане на файлове от архива\n"
-#: ar.c:306
+#: ar.c:313
#, c-format
msgid " command specific modifiers:\n"
msgstr " уточнители към команда:\n"
-#: ar.c:307
+#: ar.c:314
#, c-format
msgid " [a] - put file(s) after [member-name]\n"
msgstr " [a] - поÑтавÑне на файлове Ñлед [член-име]\n"
-#: ar.c:308
+#: ar.c:315
#, c-format
msgid " [b] - put file(s) before [member-name] (same as [i])\n"
msgstr " [b] - поÑтавÑне на файлове преди [член-име] (Ñъщо като [i])\n"
-#: ar.c:311
+#: ar.c:318
#, c-format
msgid " [D] - use zero for timestamps and uids/gids (default)\n"
msgstr " [D] - използване на нула за времева отметка и номер на потребител или група (по подразбиране)\n"
-#: ar.c:313
+#: ar.c:320
#, c-format
msgid " [U] - use actual timestamps and uids/gids\n"
msgstr " [D] - използване на наÑтоÑщата времева отметка и номер на потребител или група\n"
-#: ar.c:318
+#: ar.c:325
#, c-format
msgid " [D] - use zero for timestamps and uids/gids\n"
msgstr " [D] - използване на нула за времева отметка и номер на потребител или група\n"
-#: ar.c:320
+#: ar.c:327
#, c-format
msgid " [U] - use actual timestamps and uids/gids (default)\n"
msgstr " [D] - използване на наÑтоÑщата времева отметка и номер на потребител или група (по подразбиране)\n"
-#: ar.c:323
+#: ar.c:330
#, c-format
msgid " [N] - use instance [count] of name\n"
msgstr " [N] - използване на [брой] от имена\n"
-#: ar.c:324
+#: ar.c:331
#, c-format
msgid " [f] - truncate inserted file names\n"
msgstr " [f] - отрÑзване на вмъкнати имена на файлове\n"
-#: ar.c:325
+#: ar.c:332
#, c-format
msgid " [P] - use full path names when matching\n"
msgstr " [P] - използване на пълни имена за пътища ако Ñъвпадат\n"
-#: ar.c:326
+#: ar.c:333
#, c-format
msgid " [o] - preserve original dates\n"
msgstr " [o] - запазване на първоначалните дати\n"
-#: ar.c:327
+#: ar.c:334
#, c-format
msgid " [O] - display offsets of files in the archive\n"
msgstr " [O] - показва отмеÑтването на файловете в архива\n"
-#: ar.c:328
+#: ar.c:335
#, c-format
msgid " [u] - only replace files that are newer than current archive contents\n"
msgstr " [u] - да Ñе замеÑÑ‚ÑÑ‚ Ñамо файловете, които Ñа по-нови от текущото Ñъдържание на архива\n"
-#: ar.c:329
+#: ar.c:336
#, c-format
msgid " generic modifiers:\n"
msgstr " оÑновни уточнители:\n"
-#: ar.c:330
+#: ar.c:337
#, c-format
msgid " [c] - do not warn if the library had to be created\n"
msgstr " [c] - без предупреждение, ако Ñ‚Ñ€Ñбва да Ñе Ñъздаде библиотека\n"
-#: ar.c:331
+#: ar.c:338
#, c-format
msgid " [s] - create an archive index (cf. ranlib)\n"
msgstr " [s] - Ñъздаване на Ð¸Ð½Ð´ÐµÐºÑ Ð½Ð° архива (виж ranlib)\n"
-#: ar.c:332
+#: ar.c:339
+#, c-format
+msgid " [l <text> ] - specify the dependencies of this library\n"
+msgstr ""
+
+#: ar.c:340
#, c-format
msgid " [S] - do not build a symbol table\n"
msgstr " [S] - без Ñъздаване на таблица за имена\n"
-#: ar.c:333
+#: ar.c:341
#, c-format
-msgid " [T] - make a thin archive\n"
-msgstr " [T] - Ñъздаване на архив \"поÑредник\"\n"
+msgid " [T] - deprecated, use --thin instead\n"
+msgstr " [T] - забранен, да Ñе използва --thin в замÑна\n"
-#: ar.c:334
+#: ar.c:342
#, c-format
msgid " [v] - be verbose\n"
msgstr " [v] - Ñ Ð¿Ð¾Ð´Ñ€Ð¾Ð±Ð½Ð¾Ñти\n"
-#: ar.c:335
+#: ar.c:343
#, c-format
msgid " [V] - display the version number\n"
msgstr " [V] - показване номер на верÑиÑ\n"
-#: ar.c:336
+#: ar.c:344
#, c-format
msgid " @<file> - read options from <file>\n"
msgstr " @<файл> - прочитане на команди от <файл>\n"
-#: ar.c:337
+#: ar.c:345
#, c-format
msgid " --target=BFDNAME - specify the target object format as BFDNAME\n"
msgstr " --target=BFD–ИМЕ - задава BFD–ИМЕ за формата на Ñ†ÐµÐ»ÐµÐ²Ð¸Ñ Ð¾Ð±ÐµÐºÑ‚\n"
-#: ar.c:338
+#: ar.c:346
#, c-format
msgid " --output=DIRNAME - specify the output directory for extraction operations\n"
msgstr ""
-#: ar.c:340
+#: ar.c:347
+#, c-format
+msgid " --record-libdeps=<text> - specify the dependencies of this library\n"
+msgstr ""
+
+#: ar.c:348
+#, c-format
+msgid " --thin - make a thin archive\n"
+msgstr " --thin - Ñъздаване на архив \"поÑредник\"\n"
+
+#: ar.c:350
#, c-format
msgid " optional:\n"
msgstr " възможни:\n"
-#: ar.c:341
+#: ar.c:351
#, c-format
msgid " --plugin <p> - load the specified plugin\n"
msgstr " --plugin <п> - зареждане на указаната приÑтавка\n"
-#: ar.c:362
+#: ar.c:372
#, c-format
msgid "Usage: %s [options] archive\n"
msgstr "Употреба: %s [команди] архив\n"
-#: ar.c:363
+#: ar.c:373
#, c-format
msgid " Generate an index to speed access to archives\n"
msgstr " Създаване на Ð¸Ð½Ð´ÐµÐºÑ Ð·Ð° уÑкорÑване доÑтъпа до архивите\n"
-#: ar.c:364
+#: ar.c:374
#, c-format
msgid ""
" The options are:\n"
@@ -328,12 +345,12 @@ msgstr ""
" Командите Ñа:\n"
" @<файл> Прочитане на команди от <файл>\n"
-#: ar.c:367
+#: ar.c:377
#, c-format
msgid " --plugin <name> Load the specified plugin\n"
msgstr " --plugin <име> Зарежда указаната приÑтавка\n"
-#: ar.c:371
+#: ar.c:381
#, c-format
msgid ""
" -D Use zero for symbol map timestamp (default)\n"
@@ -342,7 +359,7 @@ msgstr ""
" -D Използване на нула като времева отметка за изобразените имена (по подразбиране)\n"
" -U Използване на наÑтоÑщата времева отметка за изобразените имена\n"
-#: ar.c:375
+#: ar.c:385
#, c-format
msgid ""
" -D Use zero for symbol map timestamp\n"
@@ -351,7 +368,7 @@ msgstr ""
" -D Използване на нула като времева отметка за изобразените имена\n"
" -U Използване на наÑтоÑщата времева отметка за изобразените имена (по подразбиране)\n"
-#: ar.c:378
+#: ar.c:388
#, c-format
msgid ""
" -t Update the archive's symbol map timestamp\n"
@@ -362,161 +379,193 @@ msgstr ""
" -h --help Извежда това помощно Ñъобщение\n"
" -v --version Извежда Ñведение за верÑиÑта\n"
-#: ar.c:503
+#: ar.c:513
msgid "two different operation options specified"
msgstr "указани Ñа две различни опции за операциÑ"
-#: ar.c:597 ar.c:672 nm.c:1839
+#: ar.c:549
+msgid "libdeps specified more than once"
+msgstr ""
+
+#: ar.c:610 ar.c:685 nm.c:2188
#, c-format
msgid "sorry - this program has been built without plugin support\n"
msgstr "за Ñъжаление, тази програма е Ñъздадена без поддръжка на приÑтавки\n"
-#: ar.c:803
+#: ar.c:814
msgid "no operation specified"
msgstr "не е зададена операциÑ"
-#: ar.c:806
+#: ar.c:817
msgid "`u' is only meaningful with the `r' option."
msgstr "'u' има ÑмиÑъл Ñамо Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° 'r'."
-#: ar.c:809
+#: ar.c:820
msgid "`u' is not meaningful with the `D' option."
msgstr "'u' нÑма ÑмиÑъл Ñ Ð¾Ð¿Ñ†Ð¸Ñ 'D'."
-#: ar.c:812
+#: ar.c:823
msgid "`u' modifier ignored since `D' is the default (see `U')"
msgstr ""
-#: ar.c:821
+#: ar.c:832
msgid "missing position arg."
msgstr ""
-#: ar.c:827
+#: ar.c:838
msgid "`N' is only meaningful with the `x' and `d' options."
msgstr "'N' има ÑмиÑъл Ñамо Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ 'x' и 'd'."
-#: ar.c:829
+#: ar.c:840
msgid "`N' missing value."
msgstr ""
-#: ar.c:832
+#: ar.c:843
msgid "Value for `N' must be positive."
msgstr "СтойноÑтта на 'N' Ñ‚Ñ€Ñбва да е положителна."
-#: ar.c:848
+#: ar.c:859
msgid "`x' cannot be used on thin archives."
msgstr "'x' не може да Ñе използва в архиви \"поÑредници\" (thin archives)."
-#: ar.c:895
+#: ar.c:873
+msgid "Cannot create libdeps record."
+msgstr "Ðе може да Ñе Ñъздаде Ð·Ð°Ð¿Ð¸Ñ Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÑ‡Ð½Ð¸ завиÑимоÑти."
+
+#: ar.c:876
+msgid "Cannot set libdeps record type to binary."
+msgstr "ЗапиÑа Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÑ‡Ð½Ð¸ завиÑимоÑти не може да Ñе зададе като двоичен."
+
+#: ar.c:879
+msgid "Cannot set libdeps object format."
+msgstr "Ðе може да Ñе зададе Ð¾Ð±ÐµÐºÑ‚Ð½Ð¸Ñ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ на запиÑа Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÑ‡Ð½Ð¸ завиÑимоÑти."
+
+#: ar.c:882
+msgid "Cannot make libdeps object writable."
+msgstr "ЗапиÑа Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÑ‡Ð½Ð¸ завиÑимоÑти не може да Ñе направи запиÑваем."
+
+#: ar.c:885
+msgid "Cannot write libdeps record."
+msgstr "Ðе може да Ñе запише запиÑа Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÑ‡Ð½Ð¸ завиÑимоÑти."
+
+#: ar.c:888
+msgid "Cannot make libdeps object readable."
+msgstr "ЗапиÑа Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÑ‡Ð½Ð¸ завиÑимоÑти не може да Ñе направи четим."
+
+#: ar.c:891
+msgid "Cannot reset libdeps record type."
+msgstr "Ðе може да Ñе премахне типе на запиÑа Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÑ‡Ð½Ð¸ завиÑимоÑти."
+
+#: ar.c:952
#, c-format
msgid "internal error -- this option not implemented"
msgstr "вътрешна грешка -- тази команда не е оÑъщеÑтвена"
-#: ar.c:964
+#: ar.c:1021
#, c-format
msgid "creating %s"
msgstr "Ñъздаване на %s"
-#: ar.c:995
+#: ar.c:1052
#, c-format
msgid "Cannot convert existing library %s to thin format"
msgstr ""
-#: ar.c:1001
+#: ar.c:1058
#, c-format
msgid "Cannot convert existing thin library %s to normal format"
msgstr ""
-#: ar.c:1033 ar.c:1130 ar.c:1447 objcopy.c:3582
+#: ar.c:1090 ar.c:1190 ar.c:1512 objcopy.c:3612
#, c-format
msgid "internal stat error on %s"
msgstr "вътрешна грешка при определÑне признаците на файл %s"
-#: ar.c:1052 ar.c:1156
+#: ar.c:1109 ar.c:1216
#, c-format
msgid "%s is not a valid archive"
msgstr "%s е невалиден архив"
-#: ar.c:1080
+#: ar.c:1137
#, c-format
msgid "illegal output pathname for archive member: %s, using '%s' instead"
msgstr ""
-#: ar.c:1204
+#: ar.c:1264
msgid "could not create temporary file whilst writing archive"
msgstr "не можа да Ñе Ñъздаде временен файл, при запиÑване на архива"
-#: ar.c:1351
+#: ar.c:1415
#, c-format
msgid "No member named `%s'\n"
msgstr "ÐÑма чаÑÑ‚ Ñ Ð¸Ð¼Ðµ '%s'\n"
-#: ar.c:1401
+#: ar.c:1465
#, c-format
msgid "no entry %s in archive %s!"
msgstr "нÑма входна точка %s в архива %s!"
-#: ar.c:1541
+#: ar.c:1625
#, c-format
msgid "%s: no archive map to update"
msgstr "%s: липÑва \"изображение на архива\" за обновÑване"
-#: arsup.c:89
+#: arsup.c:91
#, c-format
msgid "No entry %s in archive.\n"
msgstr "Ð’ архива нÑма входна точка %s.\n"
-#: arsup.c:114
+#: arsup.c:116
#, c-format
msgid "Can't open file %s\n"
msgstr "не може да Ñе отвори файл '%s'\n"
-#: arsup.c:160
+#: arsup.c:159
#, c-format
-msgid "%s: Can't allocate memory for temp name (%s)\n"
-msgstr ""
+msgid "%s: Can't open temporary file (%s)\n"
+msgstr "%s: не може да Ñе отвори временен файл (%s)\n"
-#: arsup.c:171
+#: arsup.c:170
#, c-format
msgid "%s: Can't open output archive %s\n"
msgstr "%s: Ðе може да Ñе отвори \"изходен\" архив %s\n"
-#: arsup.c:188
+#: arsup.c:191
#, c-format
msgid "%s: Can't open input archive %s\n"
msgstr "%s: Ðе може да Ñе отвори \"входен\" архив %s\n"
-#: arsup.c:197
+#: arsup.c:200
#, c-format
msgid "%s: file %s is not an archive\n"
msgstr "%s: файлът %s не е архив\n"
-#: arsup.c:237
+#: arsup.c:240
#, c-format
msgid "%s: no output archive specified yet\n"
msgstr "%s: не е зададен \"изходен\" архив\n"
-#: arsup.c:257 arsup.c:300 arsup.c:342 arsup.c:365 arsup.c:431
+#: arsup.c:260 arsup.c:303 arsup.c:345 arsup.c:383 arsup.c:449
#, c-format
msgid "%s: no open output archive\n"
msgstr "%s: нÑма отворен \"изходен\" архив\n"
-#: arsup.c:273 arsup.c:386 arsup.c:412
+#: arsup.c:276 arsup.c:404 arsup.c:430
#, c-format
msgid "%s: can't open file %s\n"
msgstr "%s: не може да Ñе отвори файл %s\n"
-#: arsup.c:327 arsup.c:408 arsup.c:489
+#: arsup.c:330 arsup.c:426 arsup.c:507
#, c-format
msgid "%s: can't find module file %s\n"
msgstr "%s: не може да Ñе намери файлов модул %s\n"
-#: arsup.c:440
+#: arsup.c:458
#, c-format
msgid "Current open archive is %s\n"
msgstr "ТекущиÑÑ‚ отворен архив е %s\n"
-#: arsup.c:464
+#: arsup.c:482
#, c-format
msgid "%s: no open archive\n"
msgstr "%s: нÑма отворен архив\n"
@@ -527,58 +576,58 @@ msgid " No emulation specific options\n"
msgstr " Без опции характерни за подражаване\n"
#. Macros for common output.
-#: binemul.h:49
+#: binemul.h:45
#, c-format
msgid " emulation options: \n"
msgstr " опции за подражаване: \n"
-#: bucomm.c:50 bucomm.c:84
+#: bucomm.c:43 bucomm.c:76
msgid "cause of error unknown"
msgstr ""
-#: bucomm.c:164
+#: bucomm.c:157
#, c-format
msgid "can't set BFD default target to `%s': %s"
msgstr "подразбираща Ñе BFD цел не може да Ñе уÑтанови на '%s': %s"
-#: bucomm.c:176
+#: bucomm.c:169
#, c-format
msgid "%s: Matching formats:"
msgstr "%s: Съвпадащи формати:"
-#: bucomm.c:191
+#: bucomm.c:184
#, c-format
msgid "Supported targets:"
msgstr "Поддържани цели:"
-#: bucomm.c:193
+#: bucomm.c:186
#, c-format
msgid "%s: supported targets:"
msgstr "%s: поддържани цели:"
-#: bucomm.c:211
+#: bucomm.c:204
#, c-format
msgid "Supported architectures:"
msgstr "Поддържани архитектури:"
-#: bucomm.c:213
+#: bucomm.c:206
#, c-format
msgid "%s: supported architectures:"
msgstr "%s: поддържани архитектури:"
-#: bucomm.c:226
+#: bucomm.c:219
msgid "big endian"
msgstr "водещ Ñтарши байт"
-#: bucomm.c:227
+#: bucomm.c:220
msgid "little endian"
msgstr "водещ младши байт"
-#: bucomm.c:228
+#: bucomm.c:221
msgid "endianness unknown"
msgstr "непозната подредба на байтове"
-#: bucomm.c:275
+#: bucomm.c:268
#, c-format
msgid ""
"%s\n"
@@ -587,42 +636,42 @@ msgstr ""
"%s\n"
" (заглавие %s, данни %s)\n"
-#: bucomm.c:424
+#: bucomm.c:417
#, c-format
msgid "BFD header file version %s\n"
msgstr "BFD заглавен файл верÑÐ¸Ñ %s\n"
-#: bucomm.c:454
+#: bucomm.c:447
#, c-format
msgid "<time data corrupt>"
msgstr "<повредени времеви данни>"
-#: bucomm.c:594
+#: bucomm.c:587
#, c-format
msgid "%s: bad number: %s"
msgstr "%s: погрешно чиÑло: %s"
-#: bucomm.c:614 strings.c:404
+#: bucomm.c:607 strings.c:453
#, c-format
msgid "'%s': No such file"
msgstr "'%s': ÐÑма такъв файл"
-#: bucomm.c:616 strings.c:406
+#: bucomm.c:609 strings.c:455
#, c-format
msgid "Warning: could not locate '%s'. reason: %s"
msgstr "Предупреждение: не може да Ñе намери '%s', причина: %s"
-#: bucomm.c:620 strings.c:412
+#: bucomm.c:613 strings.c:461
#, c-format
msgid "Warning: '%s' is a directory"
msgstr "Предупреждение: '%s' е директориÑ"
-#: bucomm.c:622
+#: bucomm.c:615 bucomm.c:628
#, c-format
msgid "Warning: '%s' is not an ordinary file"
msgstr "Предупреждение: '%s' не е обикновен файл"
-#: bucomm.c:624
+#: bucomm.c:617
#, c-format
msgid "Warning: '%s' has negative size, probably it is too large"
msgstr "Предупреждение: '%s' е Ñ Ð¾Ñ‚Ñ€Ð¸Ñ†Ð°Ñ‚ÐµÐ»ÐµÐ½ размер. Може би е много голÑм"
@@ -732,7 +781,7 @@ msgstr "СпиÑък от имена"
msgid "Symbol %s, tag %d, number %d"
msgstr "Име %s, отметка %d, брой %d"
-#: coffdump.c:345 readelf.c:17436 readelf.c:17524
+#: coffdump.c:345 readelf.c:18836 readelf.c:18927
#, c-format
msgid "Type"
msgstr "Тип"
@@ -786,7 +835,7 @@ msgstr "<нÑма имена>"
msgid "#sources %d"
msgstr "#източници %d"
-#: coffdump.c:462 sysdump.c:639
+#: coffdump.c:462 sysdump.c:648
#, c-format
msgid "Usage: %s [option(s)] in-file\n"
msgstr "Употреба: %s [команда(-и)] вх-файл\n"
@@ -811,7 +860,7 @@ msgstr ""
" -v --version Показване на верÑиÑта на програмата\n"
"\n"
-#: coffdump.c:534 srconv.c:1795 sysdump.c:704
+#: coffdump.c:532 srconv.c:1793 sysdump.c:711
msgid "no input file specified"
msgstr "не е зададен входÑщ файл "
@@ -868,7 +917,7 @@ msgid "Section definition needs a section length"
msgstr "Определението за раздел изиÑква размер на раздела"
#: coffgrok.c:427
-msgid "Aggregate definition needs auxillary information"
+msgid "Aggregate definition needs auxiliary information"
msgstr ""
#: coffgrok.c:436
@@ -877,7 +926,7 @@ msgid "Invalid tag index %#lx encountered"
msgstr ""
#: coffgrok.c:477
-msgid "Enum definition needs auxillary information"
+msgid "Enum definition needs auxiliary information"
msgstr ""
#: coffgrok.c:484
@@ -886,7 +935,7 @@ msgid "Invalid enum symbol index %u encountered"
msgstr ""
#: coffgrok.c:520
-msgid "Array definition needs auxillary information"
+msgid "Array definition needs auxiliary information"
msgstr ""
#: coffgrok.c:536
@@ -959,7 +1008,7 @@ msgstr ""
msgid "%s: is not a COFF format file"
msgstr "%s: не е файл в COFF формат"
-#: cxxfilt.c:124 nm.c:285 objdump.c:318
+#: cxxfilt.c:124 nm.c:379 objdump.c:405
#, c-format
msgid "Report bugs to %s.\n"
msgstr "Подавайте доклади за грешки на %s.\n"
@@ -1053,465 +1102,465 @@ msgstr "debug_find_named_type: нÑма текуща ÑÑŠÑтавна чаÑÑ‚"
msgid "debug_get_real_type: circular debug information for %s\n"
msgstr "debug_get_real_type: циклично Ñведение за проÑледÑване на %s\n"
-#: debug.c:2484
+#: debug.c:2490
msgid "debug_write_type: illegal type encountered"
msgstr "debug_write_type: ÑблъÑкване Ñ Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÐµÐ½ тип"
-#: dlltool.c:902 dlltool.c:927 dlltool.c:957
+#: dlltool.c:869 dlltool.c:893 dlltool.c:922
#, c-format
msgid "Internal error: Unknown machine type: %d"
msgstr "Вътрешна грешка: ÐеизвеÑтен тип машина: %d"
-#: dlltool.c:998
+#: dlltool.c:964
#, c-format
msgid "Can't open def file: %s"
msgstr "Ðе може да Ñе отвори def-файл: %s"
-#: dlltool.c:1003
+#: dlltool.c:969
#, c-format
msgid "Processing def file: %s"
msgstr "Обработка на def-файл: %s"
-#: dlltool.c:1007
+#: dlltool.c:973
msgid "Processed def file"
msgstr "Обработен def-файл"
-#: dlltool.c:1031
+#: dlltool.c:997
#, c-format
msgid "Syntax error in def file %s:%d"
msgstr "Синтактична грешка в def-файл %s:%d"
-#: dlltool.c:1068
+#: dlltool.c:1032
#, c-format
msgid "%s: Path components stripped from image name, '%s'."
msgstr "%s: от името на образа Ñа премахнати ÑÑŠÑтавките за път - '%s'."
-#: dlltool.c:1086
+#: dlltool.c:1050
#, c-format
msgid "NAME: %s base: %x"
msgstr "NAME(програма): %s базов адреÑ: %x"
-#: dlltool.c:1089 dlltool.c:1110
+#: dlltool.c:1053 dlltool.c:1074
msgid "Can't have LIBRARY and NAME"
msgstr "Заедно не може LIBRARY(библиотека) и NAME(програма)"
-#: dlltool.c:1107
+#: dlltool.c:1071
#, c-format
msgid "LIBRARY: %s base: %x"
msgstr "LIBRARY(библиотека): %s базов адреÑ: %x"
-#: dlltool.c:1262
+#: dlltool.c:1226
#, c-format
msgid "VERSION %d.%d\n"
msgstr "ВЕРСИЯ %d.%d\n"
-#: dlltool.c:1310
+#: dlltool.c:1274
#, c-format
msgid "run: %s %s"
msgstr "пуÑка: %s %s"
-#: dlltool.c:1351 resrc.c:288
+#: dlltool.c:1315 resrc.c:288
#, c-format
msgid "wait: %s"
msgstr "чакане: %s"
-#: dlltool.c:1356 dllwrap.c:416 resrc.c:293
+#: dlltool.c:1320 dllwrap.c:416 resrc.c:293
#, c-format
msgid "subprocess got fatal signal %d"
msgstr "подпроцеÑÑŠÑ‚ получи Ñигнал за прекъÑване %d"
-#: dlltool.c:1362 dllwrap.c:423 resrc.c:300
+#: dlltool.c:1326 dllwrap.c:423 resrc.c:300
#, c-format
msgid "%s exited with status %d"
msgstr "%s завърши Ñ ÐºÐ¾Ð´ за изход %d"
-#: dlltool.c:1393
+#: dlltool.c:1357
#, c-format
msgid "Sucking in info from %s section in %s"
msgstr "Ðагазване в ÑведениÑта от раздел %s в %s"
-#: dlltool.c:1533
+#: dlltool.c:1497
#, c-format
msgid "Excluding symbol: %s"
msgstr "Изключване на: %s"
-#: dlltool.c:1622 dlltool.c:1633 nm.c:1121 nm.c:1131 nm.c:1140
+#: dlltool.c:1586 dlltool.c:1597 nm.c:1416 nm.c:1427 nm.c:1437
#, c-format
msgid "%s: no symbols"
msgstr "%s: липÑват имена"
#. FIXME: we ought to read in and block out the base relocations.
-#: dlltool.c:1659
+#: dlltool.c:1623
#, c-format
msgid "Done reading %s"
msgstr "Завърши четенето на %s"
-#: dlltool.c:1669
+#: dlltool.c:1633
#, c-format
msgid "Unable to open object file: %s: %s"
msgstr "Ðе можа да Ñе отвори Ð¾Ð±ÐµÐºÑ‚Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð»: %s: %s"
-#: dlltool.c:1672
+#: dlltool.c:1636
#, c-format
msgid "Scanning object file %s"
msgstr "Сканиране на Ð¾Ð±ÐµÐºÑ‚Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð» %s"
-#: dlltool.c:1692
+#: dlltool.c:1656
#, c-format
msgid "Cannot produce mcore-elf dll from archive file: %s"
msgstr "Ðе може да Ñе Ñъздаде mcore-elf dll от архива: %s"
-#: dlltool.c:1794
+#: dlltool.c:1758
msgid "Adding exports to output file"
msgstr "ДобавÑне на \"изнаÑÑниÑ\" към Ð¸Ð·Ñ…Ð¾Ð´Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð»"
-#: dlltool.c:1846
+#: dlltool.c:1810
msgid "Added exports to output file"
msgstr "Добавени \"изнаÑÑниÑ\" към Ð¸Ð·Ñ…Ð¾Ð´Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð»"
-#: dlltool.c:2014
+#: dlltool.c:1978
#, c-format
msgid "Generating export file: %s"
msgstr "Създаване на файл Ñ \"изнаÑÑниÑ\" : %s"
-#: dlltool.c:2019
+#: dlltool.c:1983
#, c-format
msgid "Unable to open temporary assembler file: %s"
msgstr "Ðе може да Ñе отвори временен файл на аÑемблер: %s"
-#: dlltool.c:2024
+#: dlltool.c:1988
#, c-format
msgid "Opened temporary file: %s"
msgstr "Отворен временен файл: %s"
-#: dlltool.c:2200
+#: dlltool.c:2164
msgid "failed to read the number of entries from base file"
msgstr "пропадна прочитането на Ð±Ñ€Ð¾Ñ Ð·Ð°Ð¿Ð¸Ñи от Ð±Ð°Ð·Ð¾Ð²Ð¸Ñ Ñ„Ð°Ð¹Ð»"
-#: dlltool.c:2251
+#: dlltool.c:2215
msgid "Generated exports file"
msgstr "Създаден на файл Ñ \"изнаÑÑниÑ\""
-#: dlltool.c:2461
+#: dlltool.c:2373
#, c-format
msgid "bfd_open failed open stub file: %s: %s"
msgstr "bfd_open не уÑÐ¿Ñ Ð´Ð° отвори stub файл: %s: %s"
-#: dlltool.c:2465
+#: dlltool.c:2377
#, c-format
msgid "Creating stub file: %s"
msgstr "Създаване на stub файл: %s"
-#: dlltool.c:2934
+#: dlltool.c:2691
#, c-format
msgid "bfd_open failed reopen stub file: %s: %s"
msgstr "bfd_open не уÑÐ¿Ñ Ð´Ð° отвори stub файл: %s: %s"
-#: dlltool.c:2948 dlltool.c:3027
+#: dlltool.c:2705 dlltool.c:2784
#, c-format
msgid "failed to open temporary head file: %s"
msgstr "не уÑÐ¿Ñ Ð´Ð° Ñе отвори водещ временен файл: %s"
-#: dlltool.c:3012 dlltool.c:3098
+#: dlltool.c:2769 dlltool.c:2859
#, c-format
msgid "failed to open temporary head file: %s: %s"
msgstr "не уÑÐ¿Ñ Ð´Ð° Ñе отвори водещ временен файл: %s: %s"
-#: dlltool.c:3113
+#: dlltool.c:2874
#, c-format
msgid "failed to open temporary tail file: %s"
msgstr "не уÑÐ¿Ñ Ð´Ð° Ñе отвори краен временен файл: %s"
-#: dlltool.c:3172
+#: dlltool.c:2910
#, c-format
msgid "failed to open temporary tail file: %s: %s"
msgstr "не уÑÐ¿Ñ Ð´Ð° Ñе отвори краен временен файл: %s: %s"
-#: dlltool.c:3195
+#: dlltool.c:2933
#, c-format
msgid "Can't create .lib file: %s: %s"
msgstr "Ðе може да Ñе Ñъздаде .lib файл: %s: %s"
-#: dlltool.c:3199
+#: dlltool.c:2937
#, c-format
msgid "Creating library file: %s"
msgstr "Създаване на библиотечен файл: %s"
-#: dlltool.c:3286 dlltool.c:3292
+#: dlltool.c:3024 dlltool.c:3030
#, c-format
msgid "cannot delete %s: %s"
msgstr "не може да Ñе изтрие %s: %s"
-#: dlltool.c:3298
+#: dlltool.c:3036
msgid "Created lib file"
msgstr "БиблиотечниÑÑ‚ файл е Ñъздаден"
-#: dlltool.c:3504
+#: dlltool.c:3242
#, c-format
msgid "Can't open .lib file: %s: %s"
msgstr "Ðе може да Ñе отвори .lib файл: %s: %s"
-#: dlltool.c:3512 dlltool.c:3534
+#: dlltool.c:3250 dlltool.c:3272
#, c-format
msgid "%s is not a library"
msgstr "%s не е библиотека"
-#: dlltool.c:3552
+#: dlltool.c:3290
#, c-format
msgid "Import library `%s' specifies two or more dlls"
msgstr "Import библиотека '%s' задава две или повече dlls"
-#: dlltool.c:3563
+#: dlltool.c:3301
#, c-format
msgid "Unable to determine dll name for `%s' (not an import library?)"
msgstr "Ðе може да Ñе определи име на dll за '%s' (не е библиотека за внаÑÑне?)"
-#: dlltool.c:3795
+#: dlltool.c:3527
#, c-format
msgid "Warning, ignoring duplicate EXPORT %s %d,%d"
msgstr "Предупреждение, пренебрегване на повторен EXPORT %s %d,%d"
-#: dlltool.c:3801
+#: dlltool.c:3533
#, c-format
msgid "Error, duplicate EXPORT with ordinals: %s"
msgstr "Грешка, повторен EXPORT Ñ Ð½Ð¾Ð¼ÐµÑ€: %s"
-#: dlltool.c:3904
+#: dlltool.c:3636
msgid "Processing definitions"
msgstr "Обработване на определениÑта"
-#: dlltool.c:3931
+#: dlltool.c:3663
msgid "Processed definitions"
msgstr "ОпределениÑта Ñа обработени"
#. xgetext:c-format
-#: dlltool.c:3938 dllwrap.c:477
+#: dlltool.c:3670 dllwrap.c:477
#, c-format
msgid "Usage %s <option(s)> <object-file(s)>\n"
msgstr "Употреба %s <опции> <обектни файлове>\n"
#. xgetext:c-format
-#: dlltool.c:3940
+#: dlltool.c:3672
#, c-format
msgid " -m --machine <machine> Create as DLL for <machine>. [default: %s]\n"
msgstr " -m --machine <машина> Създаване на DLL за <машина>. [по подразбиране: %s]\n"
-#: dlltool.c:3941
+#: dlltool.c:3673
#, c-format
-msgid " possible <machine>: arm[_interwork], i386, mcore[-elf]{-le|-be}, ppc, thumb\n"
-msgstr " възможна <машина>: arm[_interwork], i386, mcore[-elf]{-le|-be}, ppc, thumb\n"
+msgid " possible <machine>: arm[_interwork], i386, mcore[-elf]{-le|-be}, thumb\n"
+msgstr " възможна <машина>: arm[_interwork], i386, mcore[-elf]{-le|-be}, thumb\n"
-#: dlltool.c:3942
+#: dlltool.c:3674
#, c-format
msgid " -e --output-exp <outname> Generate an export file.\n"
msgstr " -e --output-exp <изх_име> Създаване на файл Ñ \"изнаÑÑниÑ\".\n"
-#: dlltool.c:3943
+#: dlltool.c:3675
#, c-format
msgid " -l --output-lib <outname> Generate an interface library.\n"
msgstr " -l --output-lib <изх_име> Създаване на интерфейÑна библиотека.\n"
-#: dlltool.c:3944
+#: dlltool.c:3676
#, c-format
msgid " -y --output-delaylib <outname> Create a delay-import library.\n"
msgstr " -y --output-delaylib <изх_име> Създаване на delay-import библиотека.\n"
-#: dlltool.c:3945
+#: dlltool.c:3677
#, c-format
msgid " -a --add-indirect Add dll indirects to export file.\n"
msgstr " -a --add-indirect ДобавÑне на dll indirects към файла Ñ \"изнаÑÑниÑ\".\n"
-#: dlltool.c:3946
+#: dlltool.c:3678
#, c-format
msgid " -D --dllname <name> Name of input dll to put into interface lib.\n"
msgstr " -D --dllname <име> Име на входÑщо dll в интерфейÑната библиотека.\n"
-#: dlltool.c:3947
+#: dlltool.c:3679
#, c-format
msgid " -d --input-def <deffile> Name of .def file to be read in.\n"
msgstr " -d --input-def <defфайл> Име на .def файл за прочитане като вход.\n"
-#: dlltool.c:3948
+#: dlltool.c:3680
#, c-format
msgid " -z --output-def <deffile> Name of .def file to be created.\n"
msgstr " -z --output-def <defфайл> Име на .def файл за Ñъздаване.\n"
-#: dlltool.c:3949
+#: dlltool.c:3681
#, c-format
msgid " --export-all-symbols Export all symbols to .def\n"
msgstr " --export-all-symbols ИзнаÑÑне на вÑички имена в .def\n"
-#: dlltool.c:3950
+#: dlltool.c:3682
#, c-format
msgid " --no-export-all-symbols Only export listed symbols\n"
msgstr " --no-export-all-symbols ИзнаÑÑне Ñамо на опиÑаните имена\n"
-#: dlltool.c:3951
+#: dlltool.c:3683
#, c-format
msgid " --exclude-symbols <list> Don't export <list>\n"
msgstr " --exclude-symbols <опиÑ> Без изнаÑÑне на <опиÑ>\n"
-#: dlltool.c:3952
+#: dlltool.c:3684
#, c-format
msgid " --no-default-excludes Clear default exclude symbols\n"
msgstr " --no-default-excludes ИзчиÑтва подразбиращите Ñе имена за изключване\n"
-#: dlltool.c:3953
+#: dlltool.c:3685
#, c-format
msgid " -b --base-file <basefile> Read linker generated base file.\n"
msgstr " -b --base-file <оÑнфайл> Ð”Ð¾Ð±Ð°Ð²Ñ Ð¾Ñновен файл при Ñвързване.\n"
-#: dlltool.c:3954
+#: dlltool.c:3686
#, c-format
msgid " -x --no-idata4 Don't generate idata$4 section.\n"
msgstr " -x --no-idata4 Без Ñъздаване на раздел idata$4.\n"
-#: dlltool.c:3955
+#: dlltool.c:3687
#, c-format
msgid " -c --no-idata5 Don't generate idata$5 section.\n"
msgstr " -c --no-idata5 Без Ñъздаване на раздел idata$5.\n"
-#: dlltool.c:3956
+#: dlltool.c:3688
#, c-format
msgid " --use-nul-prefixed-import-tables Use zero prefixed idata$4 and idata$5.\n"
msgstr " --use-nul-prefixed-import-tables Използване на idata$4 и idata$5 без предÑтавка.\n"
-#: dlltool.c:3957
+#: dlltool.c:3689
#, c-format
msgid " -U --add-underscore Add underscores to all symbols in interface library.\n"
msgstr " -U --add-underscore ДобавÑне на подчертавка към вÑички имена в интерфейÑната библиотека.\n"
-#: dlltool.c:3958
+#: dlltool.c:3690
#, c-format
msgid " --add-stdcall-underscore Add underscores to stdcall symbols in interface library.\n"
msgstr " --add-stdcall-underscore ДобавÑне на подчертавка към stdcall имена в интерфейÑната библиотека.\n"
-#: dlltool.c:3959
+#: dlltool.c:3691
#, c-format
msgid " --no-leading-underscore All symbols shouldn't be prefixed by an underscore.\n"
msgstr " --no-leading-underscore Ð’Ñички имена да Ñа без подчертавка за предÑтавка.\n"
-#: dlltool.c:3960
+#: dlltool.c:3692
#, c-format
msgid " --leading-underscore All symbols should be prefixed by an underscore.\n"
msgstr " --leading-underscore Ð’Ñички имена да Ñа Ñ Ð¿Ð¾Ð´Ñ‡ÐµÑ€Ñ‚Ð°Ð²ÐºÐ° за предÑтавка.\n"
-#: dlltool.c:3961
+#: dlltool.c:3693
#, c-format
msgid " -k --kill-at Kill @<n> from exported names.\n"
msgstr " -k --kill-at Премахване на @<n> от изнеÑените имена.\n"
-#: dlltool.c:3962
+#: dlltool.c:3694
#, c-format
msgid " -A --add-stdcall-alias Add aliases without @<n>.\n"
msgstr " -A --add-stdcall-alias ДобавÑне на пÑевдоними без @<n>.\n"
-#: dlltool.c:3963
+#: dlltool.c:3695
#, c-format
msgid " -p --ext-prefix-alias <prefix> Add aliases with <prefix>.\n"
msgstr " -p --ext-prefix-alias <предÑÑ‚> ДобавÑне на пÑевдоними Ñ <предÑÑ‚>.\n"
-#: dlltool.c:3964
+#: dlltool.c:3696
#, c-format
msgid " -S --as <name> Use <name> for assembler.\n"
msgstr " -S --as <име> Използване на <име> за аÑемблер.\n"
-#: dlltool.c:3965
+#: dlltool.c:3697
#, c-format
msgid " -f --as-flags <flags> Pass <flags> to the assembler.\n"
msgstr " -f --as-flags <флагове> Продаване на <флагове> към аÑемблера.\n"
-#: dlltool.c:3966
+#: dlltool.c:3698
#, c-format
msgid " -C --compat-implib Create backward compatible import library.\n"
msgstr " -C --compat-implib Създаване на обратно ÑъвмеÑтима библиотека за внаÑÑне.\n"
-#: dlltool.c:3967
+#: dlltool.c:3699
#, c-format
msgid " -n --no-delete Keep temp files (repeat for extra preservation).\n"
msgstr " -n --no-delete Запазване на временни файлове (при повтарÑне запазване в повече).\n"
-#: dlltool.c:3968
+#: dlltool.c:3700
#, c-format
msgid " -t --temp-prefix <prefix> Use <prefix> to construct temp file names.\n"
msgstr " -t --temp-prefix <предÑÑ‚> Използване на <предÑÑ‚> при Ñъздаване на име за временен файл.\n"
-#: dlltool.c:3969
+#: dlltool.c:3701
#, c-format
msgid " -I --identify <implib> Report the name of the DLL associated with <implib>.\n"
msgstr " -I --identify <внаÑ_библ> Рапортува името на DLL Ñвързан Ñ <внаÑ_библ>.\n"
-#: dlltool.c:3970
+#: dlltool.c:3702
#, c-format
msgid " --identify-strict Causes --identify to report error when multiple DLLs.\n"
msgstr " --identify-strict ПричинÑва --identify да рапортува грешка при много DLLs.\n"
-#: dlltool.c:3971
+#: dlltool.c:3703
#, c-format
msgid " -v --verbose Be verbose.\n"
msgstr " -v --verbose С подробноÑти.\n"
-#: dlltool.c:3972
+#: dlltool.c:3704
#, c-format
msgid " -V --version Display the program version.\n"
msgstr " -V --version Показване на верÑиÑта на програмата.\n"
-#: dlltool.c:3973
+#: dlltool.c:3705
#, c-format
msgid " -h --help Display this information.\n"
msgstr " -h --help Показване на това Ñведение.\n"
-#: dlltool.c:3974
+#: dlltool.c:3706
#, c-format
msgid " @<file> Read options from <file>.\n"
msgstr " @<файл> Прочитане на команди от <файл>.\n"
-#: dlltool.c:3976
+#: dlltool.c:3708
#, c-format
msgid " -M --mcore-elf <outname> Process mcore-elf object files into <outname>.\n"
msgstr " -M --mcore-elf <из_име> Обработване на mcore-elf обектни файлове в <изх_име>.\n"
-#: dlltool.c:3977
+#: dlltool.c:3709
#, c-format
msgid " -L --linker <name> Use <name> as the linker.\n"
msgstr " -L --linker <име> Използва <име> за Ñвързване.\n"
-#: dlltool.c:3978
+#: dlltool.c:3710
#, c-format
msgid " -F --linker-flags <flags> Pass <flags> to the linker.\n"
msgstr " -F --linker-flags <флагове> Подава <флагове> към Ñвързването.\n"
-#: dlltool.c:4124
+#: dlltool.c:3854
#, c-format
msgid "Unable to open def-file: %s"
msgstr "Ðе можа дa Ñе отвори def-файл: %s"
-#: dlltool.c:4129
+#: dlltool.c:3859
#, c-format
msgid "Path components stripped from dllname, '%s'."
msgstr "От името на dll Ñа премахнати ÑÑŠÑтавките за път - '%s'."
-#: dlltool.c:4177
+#: dlltool.c:3907
#, c-format
msgid "Unable to open base-file: %s"
msgstr "Ðе можа де Ñе отвори оÑновен файл: %s"
-#: dlltool.c:4212
+#: dlltool.c:3956
#, c-format
msgid "Machine '%s' not supported"
msgstr "Ðе Ñе поддържа машина '%s'"
-#: dlltool.c:4292
+#: dlltool.c:4036
#, c-format
msgid "Warning, machine type (%d) not supported for delayimport."
msgstr "Предупреждение: типа (%d) за машина не Ñе поддържа при отложени внаÑÑниÑ."
-#: dlltool.c:4360 dllwrap.c:206
+#: dlltool.c:4104 dllwrap.c:206
#, c-format
msgid "Tried file: %s"
msgstr "Пробва Ñе файл: %s"
-#: dlltool.c:4367 dllwrap.c:213
+#: dlltool.c:4111 dllwrap.c:213
#, c-format
msgid "Using file: %s"
msgstr "Използва Ñе файл: %s"
@@ -1741,11 +1790,16 @@ msgstr " --leading-underscore Входни точки Ñ Ð¿Ð¾Ð´Ñ‡ÐµÑ€Ñ‚Ð°Ð
msgid " Rest are passed unmodified to the language driver\n"
msgstr " ОÑтатъка Ñе подава, непроменен, към езиковата програма\n"
-#: dllwrap.c:799
+#: dllwrap.c:640
+#, c-format
+msgid "WARNING: %s is deprecated, use gcc -shared or ld -shared instead\n"
+msgstr ""
+
+#: dllwrap.c:800
msgid "Must provide at least one of -o or --dllname options"
msgstr "ТрÑбва да Ñе зададе поне една от опциите -o или --dllname"
-#: dllwrap.c:828
+#: dllwrap.c:829
msgid ""
"no export definition file provided.\n"
"Creating one, but that may not be what you want"
@@ -1753,59 +1807,64 @@ msgstr ""
"не е предвиден файл Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð·Ð° изнаÑÑне.\n"
"Ще Ñе Ñъздаде един, но може би не такъв, какъвто Ñе очаква"
-#: dllwrap.c:1017
+#: dllwrap.c:1018
#, c-format
msgid "DLLTOOL name : %s\n"
msgstr "DLLTOOL име : %s\n"
-#: dllwrap.c:1018
+#: dllwrap.c:1019
#, c-format
msgid "DLLTOOL options : %s\n"
msgstr "DLLTOOL опции : %s\n"
-#: dllwrap.c:1019
+#: dllwrap.c:1020
#, c-format
msgid "DRIVER name : %s\n"
msgstr "DRIVER име : %s\n"
-#: dllwrap.c:1020
+#: dllwrap.c:1021
#, c-format
msgid "DRIVER options : %s\n"
msgstr "DRIVER опции : %s\n"
-#: dwarf.c:177
+#: dwarf.c:187
msgid "Encoded value extends past end of section\n"
msgstr ""
-#: dwarf.c:185
+#: dwarf.c:195
#, c-format
msgid "Encoded size of %d is too large to read\n"
msgstr ""
-#: dwarf.c:193
+#: dwarf.c:203
msgid "Encoded size of 0 is too small to read\n"
msgstr ""
-#. Read AMOUNT bytes from PTR and store them in VAL as an unsigned value.
-#. Checks to make sure that the read will not reach or pass END
-#. and that VAL is big enough to hold AMOUNT bytes.
-#: dwarf.c:387
+#. Read AMOUNT bytes from PTR and store them in VAL.
+#. Checks to make sure that the read will not reach or pass END.
+#. FUNC chooses whether the value read is unsigned or signed, and may
+#. be either byte_get or byte_get_signed. If INC is true, PTR is
+#. incremented after reading the value.
+#. This macro cannot protect against PTR values derived from user input.
+#. The C standard sections 6.5.6 and 6.5.8 say attempts to do so using
+#. pointers is undefined behaviour.
+#: dwarf.c:389
#, c-format
msgid "internal error: attempt to read %d byte of data in to %d sized variable"
msgid_plural "internal error: attempt to read %d bytes of data in to %d sized variable"
msgstr[0] ""
msgstr[1] ""
-#: dwarf.c:512 dwarf.c:4748
+#: dwarf.c:477 dwarf.c:5210
msgid "Badly formed extended line op encountered!\n"
msgstr ""
-#: dwarf.c:518
+#: dwarf.c:483
#, c-format
msgid " Extended opcode %d: "
msgstr ""
-#: dwarf.c:523
+#: dwarf.c:488
#, c-format
msgid ""
"End of Sequence\n"
@@ -1814,36 +1873,36 @@ msgstr ""
"Край на поÑледователноÑÑ‚\n"
"\n"
-#: dwarf.c:531
+#: dwarf.c:496
#, c-format
msgid "Length (%lu) of DW_LNE_set_address op is too long\n"
msgstr ""
-#: dwarf.c:537
+#: dwarf.c:502
#, c-format
msgid "set Address to 0x%s\n"
msgstr "задава адреÑа на 0x%s\n"
-#: dwarf.c:544
+#: dwarf.c:509
#, c-format
msgid "define new File Table entry\n"
msgstr ""
-#: dwarf.c:545 dwarf.c:4049
+#: dwarf.c:510 dwarf.c:4504
#, c-format
msgid " Entry\tDir\tTime\tSize\tName\n"
msgstr " Вход\tДир\tЧаÑ\tРазм\tИме\n"
-#: dwarf.c:564
+#: dwarf.c:531
msgid "DW_LNE_define_file: Bad opcode length\n"
msgstr ""
-#: dwarf.c:569
+#: dwarf.c:536
#, c-format
msgid "set Discriminator to %s\n"
msgstr ""
-#: dwarf.c:635
+#: dwarf.c:602
#, c-format
msgid " UNKNOWN DW_LNE_HP_SFC opcode (%u)\n"
msgstr ""
@@ -1852,448 +1911,508 @@ msgstr ""
#. the limited range of the unsigned char data type used
#. for op_code.
#. && op_code <= DW_LNE_hi_user
-#: dwarf.c:652
+#: dwarf.c:619
#, c-format
msgid "user defined: "
msgstr "определен от потребител: "
-#: dwarf.c:654
+#: dwarf.c:621
#, c-format
msgid "UNKNOWN: "
msgstr "ÐЕПОЗÐÐТ: "
-#: dwarf.c:655
+#: dwarf.c:622
#, c-format
msgid "length %d ["
msgstr "дължина %d ["
-#: dwarf.c:673 dwarf.c:743
+#: dwarf.c:640 dwarf.c:710
msgid "<no .debug_str section>"
msgstr "<без раздел .debug_str >"
-#: dwarf.c:677
+#: dwarf.c:644
#, c-format
-msgid "DW_FORM_strp offset too big: %s\n"
-msgstr "DW_FORM_strp твърде голÑмо отмеÑтване: %s\n"
+msgid "DW_FORM_strp offset too big: 0x%s\n"
+msgstr "DW_FORM_strp твърде голÑмо отмеÑтване: 0x%s\n"
-#: dwarf.c:679 dwarf.c:707 dwarf.c:1745
+#: dwarf.c:646 dwarf.c:674 dwarf.c:1828
msgid "<offset is too big>"
msgstr "<твърде голÑмо отмеÑтване>"
-#: dwarf.c:689
+#: dwarf.c:656
msgid "<no NUL byte at end of .debug_str section>"
msgstr "<без нулев байт в ÐºÑ€Ð°Ñ Ð½Ð° раздел .debug_str>"
-#: dwarf.c:701
+#: dwarf.c:668
msgid "<no .debug_line_str section>"
msgstr "<без раздел .debug_line_str >"
-#: dwarf.c:705
+#: dwarf.c:672
#, c-format
-msgid "DW_FORM_line_strp offset too big: %s\n"
-msgstr "DW_FORM_line_strp твърде голÑмо отмеÑтване: %s\n"
+msgid "DW_FORM_line_strp offset too big: 0x%s\n"
+msgstr "DW_FORM_line_strp твърде голÑмо отмеÑтване: 0x%s\n"
-#: dwarf.c:717
+#: dwarf.c:684
msgid "<no NUL byte at end of .debug_line_str section>"
msgstr "<без нулев байт в ÐºÑ€Ð°Ñ Ð½Ð° раздел .debug_line_str>"
-#: dwarf.c:738
+#: dwarf.c:705
msgid "<no .debug_str_offsets.dwo section>"
msgstr "<без раздел .debug_str_offsets.dwo>"
-#: dwarf.c:739
+#: dwarf.c:706
msgid "<no .debug_str_offsets section>"
msgstr "<без раздел .debug_str_offsets>"
-#: dwarf.c:742
+#: dwarf.c:709
msgid "<no .debug_str.dwo section>"
msgstr "<без раздел .debug_str.dwo>"
-#: dwarf.c:750
+#: dwarf.c:717
#, c-format
msgid "Expected offset size of 8 but given %s"
msgstr ""
-#: dwarf.c:755
+#: dwarf.c:722
#, c-format
msgid "Expected offset size of 4 but given %s"
msgstr ""
-#: dwarf.c:776
+#: dwarf.c:751
#, c-format
-msgid "index table size is too small %s vs %s\n"
+msgid "index table size too large for section %s vs %s\n"
msgstr ""
-#: dwarf.c:779
+#: dwarf.c:759
+#, c-format
+msgid "index table size %s is too small\n"
+msgstr ""
+
+#: dwarf.c:761
msgid "<table too small>"
msgstr ""
-#: dwarf.c:790
+#: dwarf.c:773
#, c-format
-msgid "DW_FORM_GNU_str_index offset too big: %s vs %s\n"
-msgstr "DW_FORM_GNU_str_index твърде голÑмо отмеÑтване: %s Ñ/у %s\n"
+msgid "DW_FORM_GNU_str_index offset too big: 0x%s vs 0x%s\n"
+msgstr "DW_FORM_GNU_str_index твърде голÑмо отмеÑтване: 0x%s Ñ/у 0x%s\n"
-#: dwarf.c:793
+#: dwarf.c:776
msgid "<index offset is too big>"
msgstr "<твърде голÑмо отмеÑтване>"
-#: dwarf.c:800
+#: dwarf.c:783
#, c-format
-msgid "DW_FORM_GNU_str_index indirect offset too big: %s\n"
-msgstr "DW_FORM_GNU_str_index твърде голÑмо непрÑко отмеÑтване: %s\n"
+msgid "DW_FORM_GNU_str_index indirect offset too big: 0x%s\n"
+msgstr "DW_FORM_GNU_str_index твърде голÑмо непрÑко отмеÑтване: 0x%s\n"
-#: dwarf.c:802
+#: dwarf.c:785
msgid "<indirect index offset is too big>"
msgstr "<твърде голÑмо непрÑко отмеÑтване>"
-#: dwarf.c:811
+#: dwarf.c:794
msgid "<no NUL byte at end of section>"
msgstr ""
-#: dwarf.c:822
+#: dwarf.c:805
msgid "<no .debug_addr section>"
msgstr "<без раздел .debug_addr>"
-#: dwarf.c:826
+#: dwarf.c:809
#, c-format
-msgid "Offset into section %s too big: %s\n"
-msgstr "ОтмеÑтване в раздел %s е твърде голÑмо: %s\n"
+msgid "Offset into section %s too big: 0x%s\n"
+msgstr "ОтмеÑтване в раздел %s е твърде голÑмо: 0x%s\n"
+
+#. PR 17531: file:4bcd9ce9.
+#: dwarf.c:1041
+#, c-format
+msgid "Debug info is corrupted, abbrev size (%lx) is larger than abbrev section size (%lx)\n"
+msgstr "Повредено Ñведение за проÑледÑване, размерът (%lx) е по-голÑм от размера на раздела (%lx)\n"
+
+#: dwarf.c:1049
+#, c-format
+msgid "Debug info is corrupted, abbrev offset (%lx) is larger than abbrev section size (%lx)\n"
+msgstr "Повредено Ñведение за проÑледÑване, отмеÑтването (%lx) е по-голÑмо от размера на раздел (%lx)\n"
#. Report the missing single zero which ends the section.
-#: dwarf.c:998
+#: dwarf.c:1111
msgid ".debug_abbrev section not zero terminated\n"
msgstr "раздел .debug_abbrev не завършва Ñ Ð½ÑƒÐ»Ð°\n"
-#: dwarf.c:1013
+#: dwarf.c:1126
#, c-format
msgid "User TAG value: %#lx"
msgstr "ПотребителÑка ÑтойноÑÑ‚ за TAG: %#lx"
-#: dwarf.c:1015
+#: dwarf.c:1128
#, c-format
msgid "Unknown TAG value: %#lx"
msgstr "Ðепозната ÑтойноÑÑ‚ за TAG: %#lx"
-#: dwarf.c:1035
+#: dwarf.c:1148
#, c-format
msgid "Unknown FORM value: %lx"
msgstr "Ðепозната ÑтойноÑÑ‚ за FORM: %lx"
-#: dwarf.c:1051
+#: dwarf.c:1164
#, c-format
msgid "Unknown IDX value: %lx"
msgstr "ÐеизвеÑтен IDX ÑтойноÑÑ‚: %lx"
-#: dwarf.c:1065
+#: dwarf.c:1178
#, c-format
msgid "%c%s byte block: "
msgstr "%c%s байта блок: "
-#: dwarf.c:1409
+#: dwarf.c:1522
#, c-format
msgid "(DW_OP_call_ref in frame info)"
msgstr "(DW_OP_call_ref в Ñведение за рамка)"
-#: dwarf.c:1432
+#: dwarf.c:1545
#, c-format
msgid "size: %s "
msgstr "размер: %s"
-#: dwarf.c:1434
+#: dwarf.c:1547
#, c-format
msgid "offset: %s "
msgstr "отмеÑтване: %s"
-#: dwarf.c:1450
+#: dwarf.c:1563
#, c-format
msgid "DW_OP_GNU_push_tls_address or DW_OP_HP_unknown"
msgstr "DW_OP_GNU_push_tls_address или DW_OP_HP_unknown"
-#: dwarf.c:1475
+#: dwarf.c:1588
#, c-format
msgid "(%s in frame info)"
msgstr "(%s в Ñведение за рамка)"
-#: dwarf.c:1577
+#: dwarf.c:1688
#, c-format
msgid "(DW_OP_GNU_variable_value in frame info)"
msgstr "(DW_OP_GNU_variable_value в Ñведение за рамка)"
-#: dwarf.c:1630
+#: dwarf.c:1741
#, c-format
msgid "(User defined location op 0x%x)"
msgstr ""
-#: dwarf.c:1632
+#: dwarf.c:1743
#, c-format
msgid "(Unknown location op 0x%x)"
msgstr ""
-#: dwarf.c:1714
+#: dwarf.c:1797
msgid "<no links available>"
msgstr ""
-#: dwarf.c:1738
+#: dwarf.c:1821
msgid "<no NUL byte at end of alt .debug_str section>"
msgstr "<без нулев байт в ÐºÑ€Ð°Ñ Ð½Ð° раздел .debug_str>"
-#: dwarf.c:1743
+#: dwarf.c:1826
#, c-format
msgid "DW_FORM_GNU_strp_alt offset (%s) too big or no string sections available\n"
msgstr "DW_FORM_GNU_strp_alt отмеÑтването %s е твърде голÑмо или липÑва раÑздел за низове\n"
-#: dwarf.c:1766
+#: dwarf.c:1849
#, c-format
msgid "Unknown AT value: %lx"
msgstr "ÐеизвеÑтна ÐТ ÑтойноÑÑ‚: %lx"
-#: dwarf.c:1831
+#: dwarf.c:1915
#, c-format
msgid "Corrupt attribute block length: %lx\n"
msgstr ""
-#: dwarf.c:2087
+#: dwarf.c:2095
+#, c-format
+msgid "Unable to resolve ref_addr form: uvalue %lx > section size %lx (%s)\n"
+msgstr ""
+
+#: dwarf.c:2112
+#, c-format
+msgid "Unable to resolve ref form: uvalue %lx + cu_offset %lx > CU size %lx\n"
+msgstr ""
+
+#: dwarf.c:2122
+#, c-format
+msgid "Unexpected form %lx encountered whilst finding abbreviation for type\n"
+msgstr ""
+
+#: dwarf.c:2131
+#, c-format
+msgid "Unable to find abbreviations for CU offset %#lx\n"
+msgstr ""
+
+#: dwarf.c:2136
+#, c-format
+msgid "Empty abbreviation list encountered for CU offset %lx\n"
+msgstr ""
+
+#: dwarf.c:2161
+#, c-format
+msgid "Unable to find entry for abbreviation %lu\n"
+msgstr ""
+
+#: dwarf.c:2313
msgid "corrupt discr_list - not using a block form\n"
msgstr ""
-#: dwarf.c:2094
+#: dwarf.c:2320
msgid "corrupt discr_list - block not long enough\n"
msgstr ""
-#: dwarf.c:2139
+#: dwarf.c:2355
#, c-format
-msgid "corrupt discr_list - unrecognised discriminant byte %#x\n"
+msgid "corrupt discr_list - unrecognized discriminant byte %#x\n"
msgstr ""
-#: dwarf.c:2179
+#: dwarf.c:2396
msgid "Corrupt attribute\n"
msgstr "Повреден признак\n"
-#: dwarf.c:2194
-msgid "Internal error: DWARF version is not 2, 3 or 4.\n"
-msgstr ""
-
-#: dwarf.c:2321
-msgid "DW_FORM_data8 is unsupported when sizeof (dwarf_vma) != 8\n"
+#: dwarf.c:2422
+msgid "Internal error: DW_FORM_ref_addr is not supported in DWARF version 1.\n"
msgstr ""
-#: dwarf.c:2366
+#: dwarf.c:2604
msgid "Block ends prematurely\n"
msgstr ""
-#: dwarf.c:2393
+#. We have already displayed the form name.
+#: dwarf.c:2634 dwarf.c:2649 dwarf.c:2672
+#, c-format
+msgid "%c(offset: 0x%s): %s"
+msgstr "%c(отмеÑтване: 0x%s): %s"
+
+#: dwarf.c:2638
#, c-format
msgid "%c(indirect string, offset: 0x%s): %s"
msgstr "%c(непрÑк низ на отмеÑтване: 0x%s): %s"
-#: dwarf.c:2400
+#: dwarf.c:2653
#, c-format
msgid "%c(indirect line string, offset: 0x%s): %s"
msgstr "%c(непрÑк низ за ред на отмеÑтване: 0x%s): %s"
-#: dwarf.c:2411
+#: dwarf.c:2676
#, c-format
msgid "%c(indexed string: 0x%s): %s"
msgstr "%c(низ от ÑпиÑък: 0x%s): %s"
-#: dwarf.c:2420
+#. We have already displayed the form name.
+#: dwarf.c:2687
+#, c-format
+msgid "%c(offset: 0x%s) %s"
+msgstr "%c(отмеÑтване: 0x%s) %s"
+
+#: dwarf.c:2691
#, c-format
msgid "%c(alt indirect string, offset: 0x%s) %s"
msgstr "%c(друг непрÑк низ на отмеÑтване: 0x%s) %s"
-#: dwarf.c:2445
+#. We have already displayed the form name.
+#: dwarf.c:2729
+#, c-format
+msgid "%c(index: 0x%s): %s"
+msgstr "%c(указател: 0x%s): %s"
+
+#: dwarf.c:2733
#, c-format
msgid "%c(addr_index: 0x%s): %s"
msgstr "%c(Ð°Ð´Ñ€ÐµÑ Ð¾Ñ‚ ÑпиÑък: 0x%s): %s"
-#: dwarf.c:2451
+#: dwarf.c:2745
#, c-format
-msgid "Unrecognized form: %lu\n"
-msgstr "Ðеразпозната форма: %lu\n"
+msgid "Unrecognized form: 0x%lx\n"
+msgstr "Ðеразпозната форма: 0x%lx\n"
-#: dwarf.c:2512
+#: dwarf.c:2808
msgid "More location offset attributes than DW_AT_GNU_locview attributes\n"
msgstr ""
-#: dwarf.c:2524
+#: dwarf.c:2820
msgid "More DW_AT_GNU_locview attributes than location offset attributes\n"
msgstr ""
-#: dwarf.c:2587 dwarf.c:2614 dwarf.c:2629
+#: dwarf.c:2889 dwarf.c:2921 dwarf.c:2936
#, c-format
msgid "Unsupported form (%s) for attribute %s\n"
msgstr ""
-#: dwarf.c:2663
+#: dwarf.c:2983
#, c-format
msgid "(not inlined)"
msgstr "(не е вграден)"
-#: dwarf.c:2666
+#: dwarf.c:2986
#, c-format
msgid "(inlined)"
msgstr "(вграден)"
-#: dwarf.c:2669
+#: dwarf.c:2989
#, c-format
msgid "(declared as inline but ignored)"
msgstr "(определен като вграден, но пренебрегнат)"
-#: dwarf.c:2672
+#: dwarf.c:2992
#, c-format
msgid "(declared as inline and inlined)"
msgstr "(определен като вграден и вграден)"
-#: dwarf.c:2675
+#: dwarf.c:2995
#, c-format
msgid " (Unknown inline attribute value: %s)"
msgstr " (Ðепозната ÑтойноÑÑ‚ за вграждане: %s)"
-#: dwarf.c:2732
+#: dwarf.c:3052
#, c-format
msgid "(implementation defined: %s)"
msgstr "(определен от внедрÑването: %s)"
-#: dwarf.c:2735
+#: dwarf.c:3055
#, c-format
msgid "(Unknown: %s)"
msgstr "(Ðепознат: %s)"
-#: dwarf.c:2780
+#: dwarf.c:3100
#, c-format
msgid "(user defined type)"
msgstr "(потребителÑки тип)"
-#: dwarf.c:2782
+#: dwarf.c:3102
#, c-format
msgid "(unknown type)"
msgstr "(непознат тип)"
-#: dwarf.c:2795
+#: dwarf.c:3115
#, c-format
msgid "(unknown accessibility)"
msgstr "(непозната доÑтъпноÑÑ‚)"
-#: dwarf.c:2807
+#: dwarf.c:3127
#, c-format
msgid "(unknown visibility)"
msgstr "(непозната видимоÑÑ‚)"
-#: dwarf.c:2820
+#: dwarf.c:3140
#, c-format
msgid "(user specified)"
msgstr "(потребителÑки)"
-#: dwarf.c:2822
+#: dwarf.c:3142
#, c-format
msgid "(unknown endianity)"
msgstr "(непозната подредба)"
-#: dwarf.c:2834
+#: dwarf.c:3154
#, c-format
msgid "(unknown virtuality)"
msgstr "(непозната дейÑтвителноÑÑ‚)"
-#: dwarf.c:2846
+#: dwarf.c:3166
#, c-format
msgid "(unknown case)"
msgstr "(непознат Ñлучай)"
-#: dwarf.c:2864
+#: dwarf.c:3184
#, c-format
msgid "(user defined)"
msgstr "(потребителÑки)"
-#: dwarf.c:2866
+#: dwarf.c:3186
#, c-format
msgid "(unknown convention)"
msgstr "(непознато Ñпоразумение)"
-#: dwarf.c:2875
+#: dwarf.c:3195
#, c-format
msgid "(undefined)"
msgstr "(неопределен)"
-#: dwarf.c:2885
+#: dwarf.c:3205
#, c-format
msgid "(unsigned)"
msgstr "(без знак)"
-#: dwarf.c:2886
+#: dwarf.c:3206
#, c-format
msgid "(leading overpunch)"
msgstr ""
-#: dwarf.c:2887
+#: dwarf.c:3207
#, c-format
msgid "(trailing overpunch)"
msgstr ""
-#: dwarf.c:2888
+#: dwarf.c:3208
#, c-format
msgid "(leading separate)"
msgstr ""
-#: dwarf.c:2889
+#: dwarf.c:3209
#, c-format
msgid "(trailing separate)"
msgstr ""
-#: dwarf.c:2890 dwarf.c:2901
+#: dwarf.c:3210 dwarf.c:3221
#, c-format
msgid "(unrecognised)"
msgstr "(неразпознат)"
-#: dwarf.c:2898
+#: dwarf.c:3218
#, c-format
msgid "(no)"
msgstr "(не)"
-#: dwarf.c:2899
+#: dwarf.c:3219
#, c-format
msgid "(in class)"
msgstr "(в клаÑ)"
-#: dwarf.c:2900
+#: dwarf.c:3220
#, c-format
msgid "(out of class)"
msgstr "(извън клаÑ)"
-#: dwarf.c:2932
+#: dwarf.c:3252
#, c-format
msgid " (location list)"
msgstr " (ÑпиÑък Ñ Ð¼ÐµÑтоположениÑ)"
-#: dwarf.c:2953 dwarf.c:5926 dwarf.c:6075 dwarf.c:6250
+#: dwarf.c:3273 dwarf.c:6449 dwarf.c:6620 dwarf.c:6796
#, c-format
msgid " [without DW_AT_frame_base]"
msgstr " [без DW_AT_frame_base]"
-#: dwarf.c:2986
+#: dwarf.c:3303
#, c-format
msgid "Offset %s used as value for DW_AT_import attribute of DIE at offset 0x%lx is too big.\n"
msgstr "ОтмеÑтването %s, използвано като ÑтойноÑÑ‚ за признак DW_AT_import на DIE на отмеÑтване 0x%lx е твърде голÑмо.\n"
-#: dwarf.c:2997
+#: dwarf.c:3309
#, c-format
msgid "\t[Abbrev Number: %ld"
msgstr ""
-#: dwarf.c:3102
+#: dwarf.c:3404
#, c-format
msgid ""
"Raw dump of debug contents of section %s (loaded from %s):\n"
"\n"
msgstr ""
-#: dwarf.c:3105
+#: dwarf.c:3407
#, c-format
msgid ""
"Raw dump of debug contents of section %s:\n"
"\n"
msgstr ""
-#: dwarf.c:3110
+#: dwarf.c:3412
#, c-format
msgid ""
"Contents of the %s section (loaded from %s):\n"
@@ -2302,203 +2421,193 @@ msgstr ""
"Съдържание на раздел %s, зареден от %s:\n"
"\n"
-#: dwarf.c:3113
+#: dwarf.c:3415
#, c-format
msgid ""
"Contents of the %s section:\n"
"\n"
msgstr ""
-#: dwarf.c:3162
+#: dwarf.c:3458
#, c-format
msgid "Reserved length value (0x%s) found in section %s\n"
msgstr ""
-#: dwarf.c:3174
+#: dwarf.c:3468
#, c-format
-msgid "Corrupt unit length (0x%s) found in section %s\n"
+msgid "Corrupt unit length (got 0x%s expected at most 0x%s) in section %s\n"
msgstr ""
-#: dwarf.c:3182
+#: dwarf.c:3479
#, c-format
msgid "No comp units in %s section ?\n"
msgstr ""
-#: dwarf.c:3191
+#: dwarf.c:3493
#, c-format
msgid "Not enough memory for a debug info array of %u entries\n"
msgstr ""
-#: dwarf.c:3220
+#: dwarf.c:3522
#, c-format
msgid "Unable to locate %s section!\n"
msgstr "Ðе можа да Ñе намери раздел %s!\n"
-#: dwarf.c:3300
+#: dwarf.c:3698
#, c-format
msgid "Invalid pointer size (%d) in compunit header, using %d instead\n"
msgstr ""
-#: dwarf.c:3344
+#: dwarf.c:3739
#, c-format
msgid " Compilation Unit @ offset 0x%s:\n"
msgstr ""
-#: dwarf.c:3346
+#: dwarf.c:3741
#, c-format
msgid " Length: 0x%s (%s)\n"
msgstr " Дължина: 0x%s (%s)\n"
-#: dwarf.c:3349
+#: dwarf.c:3744
#, c-format
msgid " Version: %d\n"
msgstr " ВерÑиÑ: %d\n"
-#: dwarf.c:3350
+#: dwarf.c:3749
+#, c-format
+msgid " Unit Type: %s (%x)\n"
+msgstr " Вид на чаÑтта: %s (%x)\n"
+
+#: dwarf.c:3753
#, c-format
msgid " Abbrev Offset: 0x%s\n"
msgstr " ОтмеÑтване: 0x%s\n"
-#: dwarf.c:3352
+#: dwarf.c:3755
#, c-format
msgid " Pointer Size: %d\n"
msgstr "Размер на указ.: %d\n"
-#: dwarf.c:3357
+#: dwarf.c:3758
#, c-format
msgid " Signature: 0x%s\n"
msgstr " ПодпиÑ: 0x%s\n"
-#: dwarf.c:3360
+#: dwarf.c:3760
#, c-format
msgid " Type Offset: 0x%s\n"
msgstr " Вид ОтмеÑÑ‚.: 0x%s\n"
-#: dwarf.c:3368
+#: dwarf.c:3764
+#, c-format
+msgid " DWO ID: 0x%s\n"
+msgstr " DWO Ðом: 0x%s\n"
+
+#: dwarf.c:3770
#, c-format
msgid " Section contributions:\n"
msgstr " ДÑл ÑÑŠÑ Ñпомогателни:\n"
-#: dwarf.c:3369
+#: dwarf.c:3771
#, c-format
msgid " .debug_abbrev.dwo: 0x%s 0x%s\n"
msgstr " .debug_abbrev.dwo: 0x%s 0x%s\n"
-#: dwarf.c:3372
+#: dwarf.c:3774
#, c-format
msgid " .debug_line.dwo: 0x%s 0x%s\n"
msgstr " .debug_line.dwo: 0x%s 0x%s\n"
-#: dwarf.c:3375
+#: dwarf.c:3777
#, c-format
msgid " .debug_loc.dwo: 0x%s 0x%s\n"
msgstr " .debug_loc.dwo: 0x%s 0x%s\n"
-#: dwarf.c:3378
+#: dwarf.c:3780
#, c-format
msgid " .debug_str_offsets.dwo: 0x%s 0x%s\n"
msgstr " .debug_str_offsets.dwo: 0x%s 0x%s\n"
-#: dwarf.c:3388 dwarf.c:5152 dwarf.c:6676 dwarf.c:8986
-#, c-format
-msgid "Debug info is corrupted, %s header at %#lx has length %s\n"
-msgstr "Повредено Ñведение за проÑледÑване - заглавието %s, на %#lx, има дължина %s\n"
-
-#: dwarf.c:3401
+#: dwarf.c:3791
#, c-format
msgid "CU at offset %s contains corrupt or unsupported version number: %d.\n"
msgstr "СъÑтавната чаÑÑ‚ при отмеÑтване %s Ñъдържа повреден или неподдържан номер на верÑиÑ: %d.\n"
-#: dwarf.c:3410
+#: dwarf.c:3803
#, c-format
msgid "CU at offset %s contains corrupt or unsupported unit type: %d.\n"
msgstr "СъÑтавната чаÑÑ‚ при отмеÑтване %s Ñъдържа повреден или неподдържан тип за чаÑÑ‚: %d.\n"
-#: dwarf.c:3420
-#, c-format
-msgid "Debug info is corrupted, abbrev offset (%lx) is larger than abbrev section size (%lx)\n"
-msgstr "Повредено Ñведение за проÑледÑване, отмеÑтването (%lx) е по-голÑмо от размера на раздел (%lx)\n"
-
-#: dwarf.c:3426
-#, c-format
-msgid "Debug info is corrupted, abbrev size (%lx) is larger than abbrev section size (%lx)\n"
-msgstr "Повредено Ñведение за проÑледÑване, размерът (%lx) е по-голÑм от размера на раздела (%lx)\n"
-
-#: dwarf.c:3470
+#: dwarf.c:3858
#, c-format
msgid " <%d><%lx>: Abbrev Number: 0\n"
msgstr ""
-#: dwarf.c:3480
+#: dwarf.c:3868
#, c-format
msgid "Bogus end-of-siblings marker detected at offset %lx in %s section\n"
msgstr ""
-#: dwarf.c:3484
+#: dwarf.c:3872
msgid "Further warnings about bogus end-of-sibling markers suppressed\n"
msgstr ""
-#: dwarf.c:3503
+#: dwarf.c:3891
#, c-format
msgid " <%d><%lx>: Abbrev Number: %lu"
msgstr ""
-#: dwarf.c:3507
+#: dwarf.c:3895
#, c-format
msgid " <%d><%lx>: ...\n"
msgstr " <%d><%lx>: ...\n"
-#: dwarf.c:3526
+#: dwarf.c:3916
#, c-format
msgid "DIE at offset 0x%lx refers to abbreviation number %lu which does not exist\n"
msgstr ""
-#: dwarf.c:3600
+#: dwarf.c:3990
msgid "DIE has locviews without loclist\n"
msgstr ""
-#: dwarf.c:3714
+#: dwarf.c:4099
#, c-format
msgid "The length field (0x%lx) in the debug_line header is wrong - the section is too small\n"
msgstr ""
-#: dwarf.c:3728
+#: dwarf.c:4114
msgid "Only DWARF version 2, 3, 4 and 5 line info is currently supported.\n"
msgstr ""
-#: dwarf.c:3740 dwarf.c:6343 dwarf.c:7161
+#: dwarf.c:4126 dwarf.c:6889 dwarf.c:7763
#, c-format
msgid "The %s section contains unsupported segment selector size: %d.\n"
msgstr ""
-#: dwarf.c:3757
+#: dwarf.c:4143
msgid "Invalid maximum operations per insn.\n"
msgstr ""
-#: dwarf.c:3773
-#, c-format
-msgid "Line length %s extends beyond end of section\n"
-msgstr "Дължината на реда %s е Ñлед ÐºÑ€Ð°Ñ Ð½Ð° раздела\n"
-
-#: dwarf.c:3793
+#: dwarf.c:4170
msgid "Directory Table"
msgstr "Таблица Ñ Ð¿Ð°Ð¿ÐºÐ¸"
-#: dwarf.c:3793
+#: dwarf.c:4170
msgid "File Name Table"
msgstr "Таблица Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ðµ"
-#: dwarf.c:3797
+#: dwarf.c:4174
#, c-format
msgid "Unexpectedly large number of columns in the %s (%u)\n"
msgstr ""
-#: dwarf.c:3807
+#: dwarf.c:4184
#, c-format
msgid "%s: Corrupt format description entry\n"
msgstr ""
-#: dwarf.c:3815
+#: dwarf.c:4192
#, c-format
msgid ""
"\n"
@@ -2507,479 +2616,542 @@ msgstr ""
"\n"
" Таблицата %s е празна.\n"
-#: dwarf.c:3820
+#: dwarf.c:4197
#, c-format
msgid "%s: Corrupt entry count - expected %s but none found\n"
msgstr ""
-#: dwarf.c:3827
+#: dwarf.c:4204
#, c-format
msgid "%s: format count is zero, but the table is not empty\n"
msgstr ""
-#: dwarf.c:3832
+#: dwarf.c:4209
#, c-format
msgid ""
"\n"
" The %s (offset 0x%lx, lines %s, columns %u):\n"
msgstr ""
-#: dwarf.c:3836
+#: dwarf.c:4213
#, c-format
msgid " Entry"
msgstr ""
-#: dwarf.c:3850
+#: dwarf.c:4227
#, c-format
msgid "\tName"
msgstr "\tИме"
-#: dwarf.c:3853
+#: dwarf.c:4230
#, c-format
msgid "\tDir"
msgstr ""
-#: dwarf.c:3856
+#: dwarf.c:4233
#, c-format
msgid "\tTime"
msgstr "\tВреме"
-#: dwarf.c:3859
+#: dwarf.c:4236
#, c-format
msgid "\tSize"
msgstr "\tРазмер"
-#: dwarf.c:3862
+#: dwarf.c:4239
#, c-format
msgid "\tMD5\t\t\t"
msgstr ""
-#: dwarf.c:3865
+#: dwarf.c:4242
#, c-format
msgid "\t(Unknown format content type %s)"
msgstr "\t(неизвеÑтен формат за Ñъдържание %s)"
-#: dwarf.c:3899
+#: dwarf.c:4276
#, c-format
msgid ""
"\n"
"%s: Corrupt entries list\n"
msgstr ""
-#: dwarf.c:3947 dwarf.c:4362
+#: dwarf.c:4302
+msgid "corrupt .debug_sup section: size is too small\n"
+msgstr "повреден .debug_sup раздел: твърде малък размер\n"
+
+#: dwarf.c:4309
+msgid "corrupt .debug_sup section: version < 5"
+msgstr "повреден .debug_sup раздел: верÑÐ¸Ñ < 5"
+
+#: dwarf.c:4313
+msgid "corrupt .debug_sup section: is_supplementary not 0 or 1\n"
+msgstr "повреден .debug_sup раздел: is_supplementary не е 0 или 1\n"
+
+#: dwarf.c:4317
+msgid "corrupt .debug_sup section: filename not empty in supplementary section\n"
+msgstr "повреден .debug_sup раздел: име на файл в допълнителнен раздел\n"
+
+#: dwarf.c:4322
+msgid "corrupt .debug_sup section: filename is not NUL terminated\n"
+msgstr "повреден .debug_sup раздел: името не завършва Ñ \"нулев\" знак\n"
+
+#: dwarf.c:4330
+msgid "corrupt .debug_sup section: bad LEB128 field for checksum length\n"
+msgstr "повреден .debug_sup раздел: неправилно поле LEB128 за контролна Ñума\n"
+
+#: dwarf.c:4336
+msgid "corrupt .debug_sup section: checksum length is longer than the remaining section length\n"
+msgstr "повреден .debug_sup раздел: дължината на контролна Ñума е по-голÑма от оÑтъчната дължина на раздела\n"
+
+#: dwarf.c:4341
+#, c-format
+msgid "corrupt .debug_sup section: there are 0x%lx extra, unused bytes at the end of the section\n"
+msgstr "повреден .debug_sup раздел: намерени Ñа 0x%lx излишни и неизползваеми байта в ÐºÑ€Ð°Ñ Ð½Ð° раздел\n"
+
+#: dwarf.c:4345
+#, c-format
+msgid " Version: %u\n"
+msgstr " ВерÑиÑ: %u\n"
+
+#: dwarf.c:4346
+#, c-format
+msgid " Is Supp: %u\n"
+msgstr ""
+
+#: dwarf.c:4347
+#, c-format
+msgid " Filename: %s\n"
+msgstr " Име на файл: %s\n"
+
+#: dwarf.c:4348
+#, c-format
+msgid " Checksum Len: %lu\n"
+msgstr " Дължина контролна Ñума: %lu\n"
+
+#: dwarf.c:4351
+#, c-format
+msgid " Checksum: "
+msgstr " Kонтролна Ñума: "
+
+#: dwarf.c:4399 dwarf.c:4820
msgid "Partial .debug_line. section encountered without a prior full .debug_line section\n"
msgstr ""
-#: dwarf.c:3960 dwarf.c:5460
+#: dwarf.c:4412 dwarf.c:5967
#, c-format
msgid " Offset: 0x%lx\n"
msgstr " ОтмеÑтване: 0x%lx\n"
-#: dwarf.c:3961
+#: dwarf.c:4413
#, c-format
msgid " Length: %ld\n"
msgstr " Дължина: %ld\n"
-#: dwarf.c:3962
+#: dwarf.c:4414
#, c-format
msgid " DWARF Version: %d\n"
msgstr " DWARF верÑиÑ: %d\n"
-#: dwarf.c:3965
+#: dwarf.c:4417
#, c-format
msgid " Address size (bytes): %d\n"
msgstr ""
-#: dwarf.c:3966
+#: dwarf.c:4418
#, c-format
msgid " Segment selector (bytes): %d\n"
msgstr ""
-#: dwarf.c:3968
+#: dwarf.c:4420
#, c-format
msgid " Prologue Length: %d\n"
msgstr ""
-#: dwarf.c:3969
+#: dwarf.c:4421
#, c-format
msgid " Minimum Instruction Length: %d\n"
msgstr ""
-#: dwarf.c:3971
+#: dwarf.c:4423
#, c-format
msgid " Maximum Ops per Instruction: %d\n"
msgstr ""
-#: dwarf.c:3972
+#: dwarf.c:4424
#, c-format
msgid " Initial value of 'is_stmt': %d\n"
msgstr ""
-#: dwarf.c:3973
+#: dwarf.c:4425
#, c-format
msgid " Line Base: %d\n"
msgstr ""
-#: dwarf.c:3974
+#: dwarf.c:4426
#, c-format
msgid " Line Range: %d\n"
msgstr ""
-#: dwarf.c:3975
+#: dwarf.c:4427
#, c-format
msgid " Opcode Base: %d\n"
msgstr ""
-#: dwarf.c:3980 dwarf.c:4378
+#: dwarf.c:4432 dwarf.c:4836
msgid "Line range of 0 is invalid, using 1 instead\n"
msgstr ""
-#: dwarf.c:3992
+#: dwarf.c:4444
msgid "Line Base extends beyond end of section\n"
msgstr ""
-#: dwarf.c:3996
+#: dwarf.c:4448
#, c-format
msgid ""
"\n"
" Opcodes:\n"
msgstr ""
-#: dwarf.c:3999
+#: dwarf.c:4451
#, c-format
msgid " Opcode %d has %d arg\n"
msgid_plural " Opcode %d has %d args\n"
msgstr[0] ""
msgstr[1] ""
-#: dwarf.c:4019
+#: dwarf.c:4471
#, c-format
msgid ""
"\n"
" The Directory Table is empty.\n"
msgstr ""
-#: dwarf.c:4024
+#: dwarf.c:4476
#, c-format
msgid ""
"\n"
" The Directory Table (offset 0x%lx):\n"
msgstr ""
-#: dwarf.c:4044
+#: dwarf.c:4499
#, c-format
msgid ""
"\n"
" The File Name Table is empty.\n"
msgstr ""
-#: dwarf.c:4047
+#: dwarf.c:4502
#, c-format
msgid ""
"\n"
" The File Name Table (offset 0x%lx):\n"
msgstr ""
-#: dwarf.c:4070
+#: dwarf.c:4527
msgid "Corrupt file name table entry\n"
msgstr ""
-#: dwarf.c:4086
+#: dwarf.c:4544
#, c-format
msgid " No Line Number Statements.\n"
msgstr ""
-#: dwarf.c:4089
+#: dwarf.c:4547
#, c-format
msgid " Line Number Statements:\n"
msgstr ""
-#: dwarf.c:4111
+#: dwarf.c:4569
#, c-format
msgid " Special opcode %d: advance Address by %s to 0x%s%s"
msgstr ""
-#: dwarf.c:4116 dwarf.c:4137 dwarf.c:4179 dwarf.c:4199 dwarf.c:4249
-#: dwarf.c:4269
+#: dwarf.c:4574 dwarf.c:4595 dwarf.c:4637 dwarf.c:4657 dwarf.c:4707
+#: dwarf.c:4727
msgid " (reset view)"
msgstr ""
-#: dwarf.c:4131
+#: dwarf.c:4589
#, c-format
msgid " Special opcode %d: advance Address by %s to 0x%s[%d]%s"
msgstr ""
-#: dwarf.c:4141
+#: dwarf.c:4599
#, c-format
msgid " and Line by %s to %d"
msgstr ""
-#: dwarf.c:4144 dwarf.c:4161
+#: dwarf.c:4602 dwarf.c:4619
#, c-format
msgid " (view %u)\n"
msgstr ""
-#: dwarf.c:4159
+#: dwarf.c:4617
#, c-format
msgid " Copy"
msgstr ""
-#: dwarf.c:4175
+#: dwarf.c:4633
#, c-format
msgid " Advance PC by %s to 0x%s%s\n"
msgstr ""
-#: dwarf.c:4194
+#: dwarf.c:4652
#, c-format
msgid " Advance PC by %s to 0x%s[%d]%s\n"
msgstr ""
-#: dwarf.c:4206
+#: dwarf.c:4664
#, c-format
msgid " Advance Line by %s to %d\n"
msgstr ""
-#: dwarf.c:4213
+#: dwarf.c:4671
#, c-format
msgid " Set File Name to entry %s in the File Name Table\n"
msgstr ""
-#: dwarf.c:4220
+#: dwarf.c:4678
#, c-format
msgid " Set column to %s\n"
msgstr ""
-#: dwarf.c:4228
+#: dwarf.c:4686
#, c-format
msgid " Set is_stmt to %s\n"
msgstr ""
-#: dwarf.c:4233
+#: dwarf.c:4691
#, c-format
msgid " Set basic block\n"
msgstr ""
-#: dwarf.c:4245
+#: dwarf.c:4703
#, c-format
msgid " Advance PC by constant %s to 0x%s%s\n"
msgstr ""
-#: dwarf.c:4264
+#: dwarf.c:4722
#, c-format
msgid " Advance PC by constant %s to 0x%s[%d]%s\n"
msgstr ""
-#: dwarf.c:4277
+#: dwarf.c:4735
#, c-format
msgid " Advance PC by fixed size amount %s to 0x%s\n"
msgstr ""
-#: dwarf.c:4284
+#: dwarf.c:4742
#, c-format
msgid " Set prologue_end to true\n"
msgstr ""
-#: dwarf.c:4288
+#: dwarf.c:4746
#, c-format
msgid " Set epilogue_begin to true\n"
msgstr ""
-#: dwarf.c:4293
+#: dwarf.c:4751
#, c-format
msgid " Set ISA to %s\n"
msgstr ""
-#: dwarf.c:4297 dwarf.c:4930
+#: dwarf.c:4755 dwarf.c:5394
#, c-format
msgid " Unknown opcode %d with operands: "
msgstr ""
-#: dwarf.c:4391
+#: dwarf.c:4849
#, c-format
msgid "opcode base of %d extends beyond end of section\n"
msgstr ""
-#: dwarf.c:4406
+#: dwarf.c:4864
#, c-format
msgid "Unexpectedly large number of columns in the directory name table (%u)\n"
msgstr ""
-#: dwarf.c:4418 dwarf.c:4442 dwarf.c:4472
+#: dwarf.c:4876 dwarf.c:4900 dwarf.c:4930
msgid "Corrupt directories list\n"
msgstr ""
-#: dwarf.c:4480
+#: dwarf.c:4938
#, c-format
msgid "Unexpectedly large number of columns in the file name table (%u)\n"
msgstr ""
-#: dwarf.c:4492 dwarf.c:4517 dwarf.c:4564
+#: dwarf.c:4950 dwarf.c:4975 dwarf.c:5022
msgid "Corrupt file name list\n"
msgstr ""
-#: dwarf.c:4584
+#: dwarf.c:5044
msgid "directory table ends unexpectedly\n"
msgstr ""
-#: dwarf.c:4623
+#: dwarf.c:5085
msgid "file table ends unexpectedly\n"
msgstr ""
-#: dwarf.c:4656
+#: dwarf.c:5118
#, c-format
msgid "CU: No directory table\n"
msgstr ""
-#: dwarf.c:4658
+#: dwarf.c:5120
#, c-format
msgid "CU: %s:\n"
msgstr ""
-#: dwarf.c:4668 dwarf.c:4968 readelf.c:6023 readelf.c:6098 readelf.c:6116
-#: readelf.c:6134 readelf.c:6935 readelf.c:11013 readelf.c:11646
-#: readelf.c:11659 readelf.c:16520 readelf.c:16552
+#: dwarf.c:5130 dwarf.c:5435 readelf.c:6715 readelf.c:6812 readelf.c:6830
+#: readelf.c:6848 readelf.c:7652 readelf.c:11854 readelf.c:12519
+#: readelf.c:12532 readelf.c:17921 readelf.c:17953
msgid "<unknown>"
msgstr ""
-#: dwarf.c:4671 dwarf.c:4860
+#: dwarf.c:5133 dwarf.c:5324
#, c-format
msgid "directory index %u > number of directories %s\n"
msgstr ""
-#: dwarf.c:4673 dwarf.c:4962 elfcomm.c:902 readelf.c:337 readelf.c:704
-#: readelf.c:7096 readelf.c:7632 readelf.c:9644 readelf.c:11973
-#: readelf.c:12039 readelf.c:12043 readelf.c:12082 readelf.c:15357
-#: readelf.c:15446 readelf.c:16039 readelf.c:16058 readelf.c:16177
-#: readelf.c:16529 readelf.c:17682 readelf.c:17685
+#: dwarf.c:5135 dwarf.c:5429 elfcomm.c:777 readelf.c:389 readelf.c:923
+#: readelf.c:7830 readelf.c:8393 readelf.c:10429 readelf.c:12871
+#: readelf.c:12937 readelf.c:12941 readelf.c:13013 readelf.c:13018
+#: readelf.c:16651 readelf.c:16740 readelf.c:17333 readelf.c:17352
+#: readelf.c:17471 readelf.c:17930 readelf.c:19085 readelf.c:19088
#, c-format
msgid "<corrupt>"
msgstr "<повреден>"
-#: dwarf.c:4679
+#: dwarf.c:5141
#, c-format
msgid "CU: %s/%s:\n"
msgstr ""
-#: dwarf.c:4685
+#: dwarf.c:5147
#, c-format
msgid "File name Line number Starting address View Stmt\n"
msgstr "Име Ðомер ред Ðачален Ð°Ð´Ñ€ÐµÑ Ð˜Ð·Ð³Ð»ÐµÐ´ Израз\n"
-#: dwarf.c:4687
+#: dwarf.c:5149
#, c-format
msgid "CU: Empty file name table\n"
msgstr ""
-#: dwarf.c:4794
+#: dwarf.c:5256
#, c-format
msgid "UNKNOWN (%u): length %ld\n"
msgstr ""
-#: dwarf.c:4844
+#: dwarf.c:5308
#, c-format
msgid ""
"\n"
" [Use file table entry %d]\n"
msgstr ""
-#: dwarf.c:4848
+#: dwarf.c:5312
#, c-format
msgid "file index %u > number of files %u\n"
msgstr ""
-#: dwarf.c:4849
+#: dwarf.c:5313
#, c-format
msgid ""
"\n"
" <over large file table index %u>"
msgstr ""
-#: dwarf.c:4855
+#: dwarf.c:5319
#, c-format
msgid ""
"\n"
" [Use file %s in directory table entry %d]\n"
msgstr ""
-#: dwarf.c:4862
+#: dwarf.c:5326
#, c-format
msgid ""
"\n"
" <over large directory table entry %u>\n"
msgstr ""
-#: dwarf.c:4926
+#: dwarf.c:5390
#, c-format
msgid " Set ISA to %lu\n"
msgstr ""
-#: dwarf.c:4961
+#: dwarf.c:5428
#, c-format
msgid "corrupt file index %u encountered\n"
msgstr ""
-#: dwarf.c:5101
+#: dwarf.c:5597
msgid "no info"
msgstr "без Ñведение"
-#: dwarf.c:5102
+#: dwarf.c:5598
msgid "type"
msgstr "тип"
-#: dwarf.c:5103
+#: dwarf.c:5599
msgid "variable"
msgstr "променлива"
-#: dwarf.c:5104
+#: dwarf.c:5600
msgid "function"
msgstr "функциÑ"
-#: dwarf.c:5105
+#: dwarf.c:5601
msgid "other"
msgstr "друго"
-#: dwarf.c:5106
+#: dwarf.c:5602
msgid "unused5"
msgstr "неизползвано5"
-#: dwarf.c:5107
+#: dwarf.c:5603
msgid "unused6"
msgstr "неизползвано6"
-#: dwarf.c:5108
+#: dwarf.c:5604
msgid "unused7"
msgstr "неизползвано7"
-#: dwarf.c:5168 dwarf.c:6689
+#: dwarf.c:5642 dwarf.c:7220 dwarf.c:9626
+#, c-format
+msgid "Debug info is corrupted, %s header at %#lx has length %s\n"
+msgstr "Повредено Ñведение за проÑледÑване - заглавието %s, на %#lx, има дължина %s\n"
+
+#: dwarf.c:5658 dwarf.c:7235
#, c-format
msgid ".debug_info offset of 0x%lx in %s section does not point to a CU header.\n"
msgstr ".debug_info отмеÑтването от 0x%lx в раздел %s не Ñочи към заглавие на ÑÑŠÑтавна чаÑÑ‚.\n"
-#: dwarf.c:5173
+#: dwarf.c:5663
#, c-format
msgid " Length: %ld\n"
msgstr " Дължина: %ld\n"
-#: dwarf.c:5175
+#: dwarf.c:5665
#, c-format
msgid " Version: %d\n"
msgstr " ВерÑиÑ: %d\n"
-#: dwarf.c:5177
+#: dwarf.c:5667
#, c-format
msgid " Offset into .debug_info section: 0x%lx\n"
msgstr ""
-#: dwarf.c:5179
+#: dwarf.c:5669
#, c-format
msgid " Size of area in .debug_info section: %ld\n"
msgstr ""
-#: dwarf.c:5188
+#: dwarf.c:5678
msgid "Only DWARF 2 and 3 pubnames are currently supported\n"
msgstr ""
-#: dwarf.c:5196
+#: dwarf.c:5686
#, c-format
msgid ""
"\n"
@@ -2988,7 +3160,7 @@ msgstr ""
"\n"
" ОтмеÑÑ‚ Вид Име\n"
-#: dwarf.c:5198
+#: dwarf.c:5688
#, c-format
msgid ""
"\n"
@@ -2997,272 +3169,272 @@ msgstr ""
"\n"
" ОтмеÑÑ‚\tИме\n"
-#: dwarf.c:5234
+#: dwarf.c:5722
msgid "s"
msgstr ""
-#: dwarf.c:5234
+#: dwarf.c:5722
msgid "g"
msgstr ""
-#: dwarf.c:5290
+#: dwarf.c:5780
#, c-format
msgid " DW_MACINFO_start_file - lineno: %d filenum: %d\n"
msgstr " DW_MACINFO_start_file - ред: %d ном.файл: %d\n"
-#: dwarf.c:5296
+#: dwarf.c:5786
#, c-format
msgid " DW_MACINFO_end_file\n"
msgstr " DW_MACINFO_end_file\n"
-#: dwarf.c:5303
+#: dwarf.c:5793
#, c-format
-msgid " DW_MACINFO_define - lineno : %d macro : %s\n"
-msgstr " DW_MACINFO_define - ред : %d Ð¼Ð°ÐºÑ€Ð¾Ñ : %s\n"
+msgid " DW_MACINFO_define - lineno : %d macro : %*s\n"
+msgstr " DW_MACINFO_define - ред : %d Ð¼Ð°ÐºÑ€Ð¾Ñ : %*s\n"
-#: dwarf.c:5311
+#: dwarf.c:5803
#, c-format
-msgid " DW_MACINFO_undef - lineno : %d macro : %s\n"
-msgstr " DW_MACINFO_undef - ред : %d Ð¼Ð°ÐºÑ€Ð¾Ñ : %s\n"
+msgid " DW_MACINFO_undef - lineno : %d macro : %*s\n"
+msgstr " DW_MACINFO_undef - ред : %d Ð¼Ð°ÐºÑ€Ð¾Ñ : %*s\n"
-#: dwarf.c:5322
+#: dwarf.c:5816
#, c-format
-msgid " DW_MACINFO_vendor_ext - constant : %d string : %s\n"
-msgstr ""
+msgid " DW_MACINFO_vendor_ext - constant : %d string : %*s\n"
+msgstr " DW_MACINFO_vendor_ext - конÑÑ‚. : %d низ : %*s\n"
-#: dwarf.c:5452
+#: dwarf.c:5960
#, c-format
-msgid "Only GNU extension to DWARF 4 or 5 of %s is currently supported.\n"
+msgid "Expected to find a version number of 4 or 5 in section %s but found %d instead\n"
msgstr ""
-#: dwarf.c:5462
+#: dwarf.c:5969
#, c-format
msgid " Version: %d\n"
msgstr " ВерÑиÑ: %d\n"
-#: dwarf.c:5463
+#: dwarf.c:5970
#, c-format
msgid " Offset size: %d\n"
msgstr " Размер на отмеÑтването: %d\n"
-#: dwarf.c:5467
+#: dwarf.c:5974
#, c-format
msgid " Offset into .debug_line: 0x%lx\n"
msgstr " ОтмеÑтване в .debug_line: 0x%lx\n"
-#: dwarf.c:5481
+#: dwarf.c:5988
#, c-format
msgid " Extension opcode arguments:\n"
msgstr ""
-#: dwarf.c:5488
+#: dwarf.c:5995
#, c-format
msgid " DW_MACRO_%02x has no arguments\n"
msgstr ""
-#: dwarf.c:5491
+#: dwarf.c:5998
#, c-format
msgid " DW_MACRO_%02x arguments: "
msgstr " DW_MACRO_%02x аргументи: "
-#: dwarf.c:5517
+#: dwarf.c:6024
#, c-format
msgid "Invalid extension opcode form %s\n"
msgstr ""
-#: dwarf.c:5534
+#: dwarf.c:6041
msgid ".debug_macro section not zero terminated\n"
msgstr ""
-#: dwarf.c:5548
+#: dwarf.c:6055
#, c-format
-msgid " DW_MACRO_define - lineno : %d macro : %s\n"
-msgstr " DW_MACRO_define - ред : %d Ð¼Ð°ÐºÑ€Ð¾Ñ : %s\n"
+msgid " DW_MACRO_define - lineno : %d macro : %*s\n"
+msgstr " DW_MACRO_define - ред : %d Ð¼Ð°ÐºÑ€Ð¾Ñ : %*s\n"
-#: dwarf.c:5556
+#: dwarf.c:6065
#, c-format
-msgid " DW_MACRO_undef - lineno : %d macro : %s\n"
-msgstr " DW_MACRO_undef - ред : %d Ð¼Ð°ÐºÑ€Ð¾Ñ : %s\n"
+msgid " DW_MACRO_undef - lineno : %d macro : %*s\n"
+msgstr " DW_MACRO_undef - ред : %d Ð¼Ð°ÐºÑ€Ð¾Ñ : %*s\n"
-#: dwarf.c:5569
+#: dwarf.c:6080
msgid "DW_MACRO_start_file used, but no .debug_line offset provided.\n"
msgstr ""
-#: dwarf.c:5575
+#: dwarf.c:6086
#, c-format
msgid " DW_MACRO_start_file - lineno: %d filenum: %d\n"
msgstr " DW_MACRO_start_file - ред: %d ном.файл: %d\n"
-#: dwarf.c:5578
+#: dwarf.c:6089
#, c-format
msgid " DW_MACRO_start_file - lineno: %d filenum: %d filename: %s%s%s\n"
msgstr " DW_MACRO_start_file - ред: %d ном.файл: %d файл: %s%s%s\n"
-#: dwarf.c:5586
+#: dwarf.c:6097
#, c-format
msgid " DW_MACRO_end_file\n"
msgstr " DW_MACRO_end_file\n"
-#: dwarf.c:5593
+#: dwarf.c:6107
#, c-format
msgid " DW_MACRO_define_strp - lineno : %d macro : %s\n"
msgstr " DW_MACRO_define_strp - ред : %d Ð¼Ð°ÐºÑ€Ð¾Ñ : %s\n"
-#: dwarf.c:5601
+#: dwarf.c:6118
#, c-format
msgid " DW_MACRO_undef_strp - lineno : %d macro : %s\n"
msgstr " DW_MACRO_undef_strp - ред : %d Ð¼Ð°ÐºÑ€Ð¾Ñ : %s\n"
-#: dwarf.c:5607
+#: dwarf.c:6124
#, c-format
msgid " DW_MACRO_import - offset : 0x%lx\n"
msgstr " DW_MACRO_import - отмеÑтване : 0x%lx\n"
-#: dwarf.c:5614
+#: dwarf.c:6131
#, c-format
msgid " DW_MACRO_define_sup - lineno : %d macro offset : 0x%lx\n"
msgstr " DW_MACRO_define_sup - ред : %d отмеÑтване : 0x%lx\n"
-#: dwarf.c:5621
+#: dwarf.c:6138
#, c-format
msgid " DW_MACRO_undef_sup - lineno : %d macro offset : 0x%lx\n"
msgstr " DW_MACRO_undef_sup - ред : %d отмеÑтване : 0x%lx\n"
-#: dwarf.c:5627
+#: dwarf.c:6144
#, c-format
msgid " DW_MACRO_import_sup - offset : 0x%lx\n"
msgstr " DW_MACRO_import_sup - отмеÑтване : 0x%lx\n"
-#: dwarf.c:5642
+#: dwarf.c:6159
#, c-format
msgid "(with offset %s) "
msgstr "(Ñ Ð¾Ñ‚Ð¼ÐµÑтване %s) "
-#: dwarf.c:5643
+#: dwarf.c:6160
#, c-format
msgid "lineno : %d macro : %s\n"
msgstr "ред : %d Ð¼Ð°ÐºÑ€Ð¾Ñ : %s\n"
-#: dwarf.c:5650
+#: dwarf.c:6167
#, c-format
msgid " <Target Specific macro op: %#x - UNHANDLED"
msgstr ""
-#: dwarf.c:5656
+#: dwarf.c:6173
#, c-format
msgid " Unknown macro opcode %02x seen\n"
msgstr " ÐеизвеÑтен код на макроÑ: %02x\n"
-#: dwarf.c:5667
+#: dwarf.c:6184
#, c-format
msgid " DW_MACRO_%02x\n"
msgstr " DW_MACRO_%02x\n"
-#: dwarf.c:5670
+#: dwarf.c:6187
#, c-format
msgid " DW_MACRO_%02x -"
msgstr " DW_MACRO_%02x -"
-#: dwarf.c:5719
+#: dwarf.c:6242
#, c-format
msgid " Number TAG (0x%lx)\n"
msgstr ""
-#: dwarf.c:5728
+#: dwarf.c:6251
msgid "has children"
msgstr "Ñ Ð´ÐµÑ†Ð°"
-#: dwarf.c:5728
+#: dwarf.c:6251
msgid "no children"
msgstr "без деца"
-#: dwarf.c:5790
+#: dwarf.c:6313
#, c-format
msgid "location view pair\n"
msgstr ""
-#: dwarf.c:5822
+#: dwarf.c:6344
#, c-format
msgid "No debug information available for loc lists of entry: %u\n"
msgstr ""
-#: dwarf.c:5834 dwarf.c:5981 dwarf.c:6143
+#: dwarf.c:6356 dwarf.c:6504 dwarf.c:6688
#, c-format
msgid "Invalid pointer size (%d) in debug info for entry %d\n"
msgstr ""
-#: dwarf.c:5846 dwarf.c:5899 dwarf.c:5908 dwarf.c:5993 dwarf.c:6055
-#: dwarf.c:6154 dwarf.c:6227 dwarf.c:6235
+#: dwarf.c:6368 dwarf.c:6422 dwarf.c:6431 dwarf.c:6516 dwarf.c:6594
+#: dwarf.c:6602 dwarf.c:6700 dwarf.c:6773 dwarf.c:6781
#, c-format
msgid "Location list starting at offset 0x%lx is not terminated.\n"
msgstr "СпиÑъкът Ñ Ð¼ÐµÑтоположениÑ, започнал от отмеÑтване 0x%lx, не е завършен.\n"
-#: dwarf.c:5867 dwarf.c:6019 dwarf.c:6192 dwarf.c:6986 dwarf.c:7041
+#: dwarf.c:6390 dwarf.c:6545 dwarf.c:6738 dwarf.c:7582 dwarf.c:7640
#, c-format
msgid "<End of list>\n"
msgstr "<Край на ÑпиÑък>\n"
-#: dwarf.c:5879 dwarf.c:6029 dwarf.c:7046
+#: dwarf.c:6402 dwarf.c:6566 dwarf.c:7645
#, c-format
msgid "(base address)\n"
msgstr "(оÑновен адреÑ)\n"
-#: dwarf.c:5893 dwarf.c:6012 dwarf.c:6180
+#: dwarf.c:6416 dwarf.c:6538 dwarf.c:6726
#, c-format
msgid ""
"views at %8.8lx for:\n"
" %*s "
msgstr ""
-#: dwarf.c:5929 dwarf.c:6078
+#: dwarf.c:6452 dwarf.c:6623
msgid " (start == end)"
msgstr " (начало == край)"
-#: dwarf.c:5931 dwarf.c:6080
+#: dwarf.c:6454 dwarf.c:6625
msgid " (start > end)"
msgstr " (начало > край)"
-#: dwarf.c:5968
+#: dwarf.c:6491
#, c-format
msgid "No debug information available for loclists lists of entry: %u\n"
msgstr ""
-#: dwarf.c:6034
+#: dwarf.c:6571
#, c-format
msgid "View pair entry in loclist with locviews attribute\n"
msgstr ""
-#: dwarf.c:6041
+#: dwarf.c:6578
#, c-format
msgid "views for:\n"
msgstr ""
-#: dwarf.c:6045
+#: dwarf.c:6582
#, c-format
msgid "Invalid location list entry type %d\n"
msgstr "Ðеправилен тип на Ð·Ð°Ð¿Ð¸Ñ Ð·Ð° меÑтоположение %d\n"
-#: dwarf.c:6089
+#: dwarf.c:6634
#, c-format
msgid "Trailing view pair not used in a range"
msgstr ""
-#: dwarf.c:6131
+#: dwarf.c:6676
#, c-format
msgid "No debug information for loc lists of entry: %u\n"
msgstr ""
-#: dwarf.c:6198
+#: dwarf.c:6744
#, c-format
msgid "(base address selection entry)\n"
msgstr "(оÑновен Ð°Ð´Ñ€ÐµÑ Ð½Ð° Ð·Ð°Ð¿Ð¸Ñ Ð·Ð° избор)\n"
-#: dwarf.c:6219
+#: dwarf.c:6765
#, c-format
msgid "Unknown location list entry type 0x%x.\n"
msgstr "ÐеизвеÑтен тип Ð·Ð°Ð¿Ð¸Ñ Ð·Ð° меÑтоположение 0x%x.\n"
-#: dwarf.c:6312 dwarf.c:6565 dwarf.c:6786 dwarf.c:6861 dwarf.c:7101
+#: dwarf.c:6858 dwarf.c:7115 dwarf.c:7333 dwarf.c:7440 dwarf.c:7708
#, c-format
msgid ""
"\n"
@@ -3271,116 +3443,116 @@ msgstr ""
"\n"
"Празен раздел %s.\n"
-#: dwarf.c:6332
+#: dwarf.c:6878
#, c-format
msgid "The %s section contains corrupt or unsupported version number: %d.\n"
msgstr "Разделът %s Ñъдържа повреден или неподдържан номер на верÑиÑ: %d.\n"
-#: dwarf.c:6352
+#: dwarf.c:6898
#, c-format
msgid "The %s section contains unsupported offset entry count: %d.\n"
msgstr ""
-#: dwarf.c:6363 dwarf.c:6792 dwarf.c:7179
+#: dwarf.c:6909 dwarf.c:7339 dwarf.c:7781
#, c-format
msgid "Unable to load/parse the .debug_info section, so cannot interpret the %s section.\n"
msgstr "Ðе може да Ñе зареди/направи разбор на раздел .debug_info, така че не може да Ñе разтълкува раздела %s.\n"
-#: dwarf.c:6411
+#: dwarf.c:6957
msgid "No location lists in .debug_info section!\n"
msgstr "Ð’ раздел .debug_info липÑва ÑпиÑък Ñ Ð¼ÐµÑтоположениÑ!\n"
-#: dwarf.c:6416
+#: dwarf.c:6962
#, c-format
msgid "Location lists in %s section start at 0x%s\n"
msgstr ""
-#: dwarf.c:6426
+#: dwarf.c:6972
#, c-format
msgid ""
" Warning: This section has relocations - addresses seen here may not be accurate.\n"
"\n"
msgstr ""
-#: dwarf.c:6428
+#: dwarf.c:6974
#, c-format
msgid " Offset Begin End Expression\n"
msgstr " ОтмеÑÑ‚. Ðачало Край Израз\n"
-#: dwarf.c:6483
+#: dwarf.c:7029 dwarf.c:7882
#, c-format
-msgid "There is a hole [0x%lx - 0x%lx] in .debug_loc section.\n"
-msgstr "Открита е дупка [0x%lx - 0x%lx] в раздел .debug_loc.\n"
+msgid "There is a hole [0x%lx - 0x%lx] in %s section.\n"
+msgstr "Открита е дупка [0x%lx - 0x%lx] в раздел %s.\n"
-#: dwarf.c:6487
+#: dwarf.c:7034 dwarf.c:7889
#, c-format
-msgid "There is an overlap [0x%lx - 0x%lx] in .debug_loc section.\n"
-msgstr "Открито е припокриване [0x%lx - 0x%lx] в раздел .debug_loc.\n"
+msgid "There is an overlap [0x%lx - 0x%lx] in %s section.\n"
+msgstr "Открито е припокриване [0x%lx - 0x%lx] в раздел %s.\n"
-#: dwarf.c:6496
+#: dwarf.c:7044
#, c-format
-msgid "Offset 0x%lx is bigger than .debug_loc section size.\n"
-msgstr "ОтмеÑтването 0x%lx е по-голÑмо от размера на раздел .debug_loc.\n"
+msgid "Offset 0x%lx is bigger than %s section size.\n"
+msgstr "ОтмеÑтването 0x%lx е по-голÑмо от размера на раздел %s.\n"
-#: dwarf.c:6503
+#: dwarf.c:7052
#, c-format
-msgid "View Offset 0x%lx is bigger than .debug_loc section size.\n"
-msgstr "ОтмеÑтването, на изгледа, 0x%lx е по-голÑмо от размера на раздел .debug_loc.\n"
+msgid "View Offset 0x%lx is bigger than %s section size.\n"
+msgstr "ОтмеÑтването, на изгледа, 0x%lx е по-голÑмо от размера на раздел %s.\n"
-#: dwarf.c:6520
+#: dwarf.c:7070
msgid "DWO is not yet supported.\n"
msgstr ""
-#: dwarf.c:6537
+#: dwarf.c:7087
msgid "Hole and overlap detection requires adjacent view lists and loclists.\n"
msgstr ""
-#: dwarf.c:6546
+#: dwarf.c:7096
#, c-format
msgid "There is %ld unused byte at the end of section %s\n"
msgid_plural "There are %ld unused bytes at the end of section %s\n"
msgstr[0] "Ðамерен е %ld неизползван байт в ÐºÑ€Ð°Ñ Ð½Ð° раздел %s\n"
msgstr[1] "Ðамерени Ñа %ld неизползвани байта в ÐºÑ€Ð°Ñ Ð½Ð° раздел %s\n"
-#: dwarf.c:6702
+#: dwarf.c:7248
msgid "Only DWARF 2 and 3 aranges are currently supported.\n"
msgstr ""
-#: dwarf.c:6706
+#: dwarf.c:7252
#, c-format
msgid " Length: %ld\n"
msgstr " Дължина: %ld\n"
-#: dwarf.c:6708
+#: dwarf.c:7254
#, c-format
msgid " Version: %d\n"
msgstr " ВерÑиÑ: %d\n"
-#: dwarf.c:6709
+#: dwarf.c:7255
#, c-format
msgid " Offset into .debug_info: 0x%lx\n"
msgstr " ОтмеÑтване в .debug_info: 0x%lx\n"
-#: dwarf.c:6711
+#: dwarf.c:7257
#, c-format
msgid " Pointer Size: %d\n"
msgstr " Размер на указател: %d\n"
-#: dwarf.c:6712
+#: dwarf.c:7258
#, c-format
msgid " Segment Size: %d\n"
msgstr " Размер на чаÑÑ‚: %d\n"
-#: dwarf.c:6719
+#: dwarf.c:7265
#, c-format
msgid "Invalid address size in %s section!\n"
msgstr ""
-#: dwarf.c:6729
+#: dwarf.c:7275
msgid "Pointer size + Segment size is not a power of two.\n"
msgstr "Размер на указател + размер на чаÑÑ‚ не е Ñтепен на две.\n"
-#: dwarf.c:6734
+#: dwarf.c:7280
#, c-format
msgid ""
"\n"
@@ -3389,7 +3561,7 @@ msgstr ""
"\n"
" ÐÐ´Ñ€ÐµÑ Ð”ÑŠÐ»Ð¶Ð¸Ð½Ð°\n"
-#: dwarf.c:6736
+#: dwarf.c:7282
#, c-format
msgid ""
"\n"
@@ -3398,486 +3570,487 @@ msgstr ""
"\n"
" ÐÐ´Ñ€ÐµÑ Ð”ÑŠÐ»Ð¶Ð¸Ð½Ð°\n"
-#: dwarf.c:6812
+#: dwarf.c:7359
#, c-format
msgid "Corrupt address base (%lx) found in debug section %u\n"
msgstr ""
-#: dwarf.c:6828
+#: dwarf.c:7376
#, c-format
msgid " For compilation unit at offset 0x%s:\n"
msgstr ""
-#: dwarf.c:6831
+#: dwarf.c:7379
#, c-format
msgid "\tIndex\tAddress\n"
msgstr ""
-#: dwarf.c:6838
+#: dwarf.c:7391
+#, c-format
+msgid "Corrupt %s section: expecting header size of 8 or 16, but found %ld instead\n"
+msgstr ""
+
+#: dwarf.c:7403
+#, c-format
+msgid "Corrupt %s section: expecting version number 5 in header but found %d instead\n"
+msgstr ""
+
+#: dwarf.c:7417
#, c-format
msgid "\t%d:\t"
msgstr "\t%d:\t"
-#: dwarf.c:6901 dwarf.c:6916
+#: dwarf.c:7482 dwarf.c:7506
#, c-format
msgid " Length: %#lx\n"
msgstr " Дължина: %#lx\n"
-#: dwarf.c:6902 dwarf.c:6918
+#: dwarf.c:7483 dwarf.c:7508
#, c-format
msgid " Index Offset [String]\n"
msgstr ""
-#: dwarf.c:6909
+#: dwarf.c:7491
+#, c-format
+msgid "Section %s is too small %#lx\n"
+msgstr "Разделът %s е твърде малък %#lx\n"
+
+#: dwarf.c:7499
#, c-format
msgid "Unexpected version number in str_offset header: %#x\n"
msgstr ""
-#: dwarf.c:6914
+#: dwarf.c:7504
#, c-format
msgid "Unexpected value in str_offset header's padding field: %#x\n"
msgstr ""
-#: dwarf.c:6917
+#: dwarf.c:7507
#, c-format
msgid " Version: %#lx\n"
msgstr " ВерÑиÑ: %#lx\n"
-#: dwarf.c:7005 dwarf.c:7075
+#: dwarf.c:7601 dwarf.c:7681
msgid "(start == end)"
msgstr "(начало == край)"
-#: dwarf.c:7007 dwarf.c:7077
+#: dwarf.c:7603 dwarf.c:7683
msgid "(start > end)"
msgstr "(начало > край)"
-#: dwarf.c:7029
+#: dwarf.c:7627
#, c-format
-msgid "Range list starting at offset 0x%lx is not terminated.\n"
-msgstr "СпиÑъкът, започнат на отмеÑтване 0x%lx, не е завършен.\n"
+msgid "Range list starting at offset 0x%s is not terminated.\n"
+msgstr "СпиÑъкът, започнат на отмеÑтване 0x%s, не е завършен.\n"
-#: dwarf.c:7062
+#: dwarf.c:7661
#, c-format
msgid "Invalid range list entry type %d\n"
msgstr "ÐеизвеÑтен тип Ð·Ð°Ð¿Ð¸Ñ %d\n"
-#: dwarf.c:7140
+#: dwarf.c:7742
#, c-format
msgid "The length field (0x%lx) in the debug_rnglists header is wrong - the section is too small\n"
msgstr ""
-#: dwarf.c:7151
+#: dwarf.c:7753
msgid "Only DWARF version 5 debug_rnglists info is currently supported.\n"
msgstr ""
-#: dwarf.c:7170
+#: dwarf.c:7772
#, c-format
msgid "The %s section contains unsupported offset entry count: %u.\n"
msgstr ""
#. This can happen when the file was compiled with -gsplit-debug
#. which removes references to range lists from the primary .o file.
-#: dwarf.c:7192
+#: dwarf.c:7802
#, c-format
msgid "No range lists in .debug_info section.\n"
msgstr "Ð’ раздел .debug_info липÑва ÑпиÑък Ñ Ð¾Ð±Ñ…Ð²Ð°Ñ‚\n"
-#: dwarf.c:7217
+#: dwarf.c:7834
#, c-format
msgid "Range lists in %s section start at 0x%lx\n"
msgstr "Ð’ раздел %s ÑпиÑъкът Ñ Ð¾Ð±Ñ…Ð²Ð°Ñ‚ започва от 0x%lx\n"
-#: dwarf.c:7222
+#: dwarf.c:7839
#, c-format
msgid " Offset Begin End\n"
msgstr " ОтмеÑÑ‚ Ðачало Край\n"
-#: dwarf.c:7241
+#: dwarf.c:7857
#, c-format
msgid "Corrupt pointer size (%d) in debug entry at offset %8.8lx\n"
msgstr ""
-#: dwarf.c:7248
+#: dwarf.c:7864
#, c-format
msgid "Corrupt offset (%#8.8lx) in range entry %u\n"
msgstr ""
-#: dwarf.c:7265
-#, c-format
-msgid "There is a hole [0x%lx - 0x%lx] in %s section.\n"
-msgstr "Открита е дупка [0x%lx - 0x%lx] в раздел %s.\n"
-
-#: dwarf.c:7272
-#, c-format
-msgid "There is an overlap [0x%lx - 0x%lx] in %s section.\n"
-msgstr "Открито е припокриване [0x%lx - 0x%lx] в раздел %s.\n"
-
-#: dwarf.c:7348
+#: dwarf.c:7965
#, c-format
msgid "Unfeasibly large register number: %u\n"
msgstr ""
-#: dwarf.c:7361
+#: dwarf.c:7978
#, c-format
msgid "Out of memory allocating %u columns in dwarf frame arrays\n"
msgstr "ÐедоÑтиг на памет при заделÑнето на %u колони за рамка на dwarf маÑиви\n"
-#: dwarf.c:7812
+#: dwarf.c:8427
msgid "No terminator for augmentation name\n"
msgstr ""
-#: dwarf.c:7824
+#: dwarf.c:8445
#, c-format
msgid "Invalid pointer size (%d) in CIE data\n"
msgstr ""
-#: dwarf.c:7832
+#: dwarf.c:8453
#, c-format
msgid "Invalid segment size (%d) in CIE data\n"
msgstr ""
-#: dwarf.c:7863 dwarf.c:8234
+#: dwarf.c:8489 dwarf.c:8862
#, c-format
msgid "Augmentation data too long: 0x%s, expected at most %#lx\n"
msgstr ""
-#: dwarf.c:7950
+#: dwarf.c:8576
#, c-format
msgid " Augmentation data: "
msgstr ""
-#: dwarf.c:7966
+#: dwarf.c:8592
msgid "bad register: "
msgstr ""
-#: dwarf.c:8136
+#: dwarf.c:8764
msgid "Failed to read CIE information\n"
msgstr "%s: Пропадна прочитането на CIE Ñведение\n"
-#: dwarf.c:8147 dwarf.c:8171 dwarf.c:8198
+#: dwarf.c:8775 dwarf.c:8796 dwarf.c:8823
msgid "Invalid max register\n"
msgstr ""
#. PR 17512: file: 9e196b3e.
-#: dwarf.c:8213
+#: dwarf.c:8838
#, c-format
msgid "Probably corrupt segment size: %d - using 4 instead\n"
msgstr ""
-#: dwarf.c:8359
+#. Ideally translate "invalid " to 8 chars, trailing space
+#. is optional.
+#: dwarf.c:8884
#, c-format
-msgid "Corrupt CFA_def expression value: %lu\n"
-msgstr ""
+msgid "cie=invalid "
+msgstr "cie=неправилен"
-#. PR 17512: file:306-192417-0.005.
-#: dwarf.c:8373
-#, c-format
-msgid "Corrupt CFA expression value: %lu\n"
-msgstr ""
-
-#: dwarf.c:8676
+#: dwarf.c:9317
msgid "Invalid column number in saved frame state\n"
msgstr ""
-#: dwarf.c:8723
+#: dwarf.c:9364
#, c-format
msgid " DW_CFA_def_cfa_expression: <corrupt len %lu>\n"
msgstr ""
-#: dwarf.c:8747
+#: dwarf.c:9387
#, c-format
msgid " DW_CFA_expression: <corrupt len %lu>\n"
msgstr ""
-#: dwarf.c:8879
+#: dwarf.c:9520
#, c-format
msgid " DW_CFA_??? (User defined call frame op: %#x)\n"
msgstr ""
-#: dwarf.c:8881
+#: dwarf.c:9522
#, c-format
msgid "Unsupported or unknown Dwarf Call Frame Instruction number: %#x\n"
msgstr ""
-#: dwarf.c:8995 dwarf.c:9399
+#: dwarf.c:9636 dwarf.c:10053
#, c-format
msgid "Version %ld\n"
msgstr "ВерÑÐ¸Ñ %ld\n"
-#: dwarf.c:9001
+#: dwarf.c:9642
msgid "Only DWARF version 5 .debug_names is currently supported.\n"
msgstr ""
-#: dwarf.c:9008
+#: dwarf.c:9649
#, c-format
msgid "Padding field of .debug_names must be 0 (found 0x%x)\n"
msgstr ""
-#: dwarf.c:9013
+#: dwarf.c:9654
msgid "Compilation unit count must be >= 1 in .debug_names\n"
msgstr ""
-#: dwarf.c:9024
+#: dwarf.c:9665
#, c-format
msgid "Augmentation string length %u must be rounded up to a multiple of 4 in .debug_names.\n"
msgstr ""
-#: dwarf.c:9030
+#: dwarf.c:9673
#, c-format
msgid "Augmentation string:"
msgstr ""
-#: dwarf.c:9057
+#: dwarf.c:9700
#, c-format
msgid "CU table:\n"
msgstr ""
-#: dwarf.c:9063 dwarf.c:9073
+#: dwarf.c:9709 dwarf.c:9722
#, c-format
msgid "[%3u] 0x%lx\n"
msgstr "[%3u] 0x%lx\n"
-#: dwarf.c:9067
+#: dwarf.c:9713
#, c-format
msgid "TU table:\n"
msgstr ""
-#: dwarf.c:9077
+#: dwarf.c:9726
#, c-format
msgid "Foreign TU table:\n"
msgstr ""
-#: dwarf.c:9083
+#: dwarf.c:9735
#, c-format
msgid "[%3u] "
msgstr ""
-#: dwarf.c:9103
+#: dwarf.c:9746
#, c-format
msgid "Entry pool offset (0x%lx) exceeds unit size 0x%lx for unit 0x%lx in the debug_names\n"
msgstr ""
-#: dwarf.c:9120
+#: dwarf.c:9775
#, c-format
msgid "Used %zu of %lu bucket.\n"
msgid_plural "Used %zu of %lu buckets.\n"
msgstr[0] ""
msgstr[1] ""
-#: dwarf.c:9147
+#: dwarf.c:9802
#, c-format
msgid "Out of %lu items there are %zu bucket clashes (longest of %zu entries).\n"
msgstr ""
-#: dwarf.c:9184
+#: dwarf.c:9839
#, c-format
msgid "Duplicate abbreviation tag %lu in unit 0x%lx in the debug_names\n"
msgstr ""
-#: dwarf.c:9206 dwarf.c:9525
+#: dwarf.c:9861 dwarf.c:10179
#, c-format
msgid ""
"\n"
"Symbol table:\n"
msgstr ""
-#: dwarf.c:9259
+#: dwarf.c:9913
#, c-format
msgid "Undefined abbreviation tag %lu in unit 0x%lx in the debug_names\n"
msgstr ""
-#: dwarf.c:9290
+#: dwarf.c:9944
#, c-format
msgid " <no entries>"
msgstr ""
-#: dwarf.c:9322
+#: dwarf.c:9976
msgid "The debuglink filename is corrupt/missing\n"
msgstr ""
-#: dwarf.c:9326
+#: dwarf.c:9980
#, c-format
msgid " Separate debug info file: %s\n"
msgstr ""
-#: dwarf.c:9337
+#: dwarf.c:9991
msgid "CRC offset missing/truncated\n"
msgstr ""
-#: dwarf.c:9343
+#: dwarf.c:9997
#, c-format
msgid " CRC value: %#x\n"
msgstr "контролна Ñума: %#x\n"
-#: dwarf.c:9347
+#: dwarf.c:10001
#, c-format
msgid "There are %#lx extraneous bytes at the end of the section\n"
msgstr "Ðамерени Ñа %#lx излишни байта в ÐºÑ€Ð°Ñ Ð½Ð° раздел\n"
-#: dwarf.c:9361
+#: dwarf.c:10015
#, c-format
msgid "Build-ID is too short (%#lx bytes)\n"
msgstr ""
-#: dwarf.c:9365
+#: dwarf.c:10019
#, c-format
msgid " Build-ID (%#lx bytes):"
msgstr ""
-#: dwarf.c:9394
+#: dwarf.c:10048
#, c-format
msgid "Truncated header in the %s section.\n"
msgstr ""
-#: dwarf.c:9405
+#: dwarf.c:10059
#, c-format
msgid "Unsupported version %lu.\n"
msgstr ""
-#: dwarf.c:9409
+#: dwarf.c:10063
msgid "The address table data in version 3 may be wrong.\n"
msgstr ""
-#: dwarf.c:9411
+#: dwarf.c:10065
msgid "Version 4 does not support case insensitive lookups.\n"
msgstr ""
-#: dwarf.c:9413
+#: dwarf.c:10067
msgid "Version 5 does not include inlined functions.\n"
msgstr ""
-#: dwarf.c:9415
+#: dwarf.c:10069
msgid "Version 6 does not include symbol attributes.\n"
msgstr ""
-#: dwarf.c:9433
+#: dwarf.c:10087
#, c-format
msgid "Corrupt header in the %s section.\n"
msgstr ""
-#: dwarf.c:9440
+#: dwarf.c:10094
#, c-format
msgid "TU offset (%x) is less than CU offset (%x)\n"
msgstr ""
-#: dwarf.c:9449
+#: dwarf.c:10103
#, c-format
msgid "Address table offset (%x) is less than TU offset (%x)\n"
msgstr ""
-#: dwarf.c:9459
+#: dwarf.c:10113
#, c-format
msgid "Symbol table offset (%x) is less then Address table offset (%x)\n"
msgstr ""
-#: dwarf.c:9468
+#: dwarf.c:10122
#, c-format
msgid "Constant pool offset (%x) is less than symbol table offset (%x)\n"
msgstr ""
-#: dwarf.c:9483
+#: dwarf.c:10137
msgid "Address table extends beyond end of section.\n"
msgstr ""
-#: dwarf.c:9487
+#: dwarf.c:10141
#, c-format
msgid ""
"\n"
"CU table:\n"
msgstr ""
-#: dwarf.c:9493
+#: dwarf.c:10147
#, c-format
msgid "[%3u] 0x%lx - 0x%lx\n"
msgstr ""
-#: dwarf.c:9498
+#: dwarf.c:10152
#, c-format
msgid ""
"\n"
"TU table:\n"
msgstr ""
-#: dwarf.c:9505
+#: dwarf.c:10159
#, c-format
msgid "[%3u] 0x%lx 0x%lx "
msgstr ""
-#: dwarf.c:9512
+#: dwarf.c:10166
#, c-format
msgid ""
"\n"
"Address table:\n"
msgstr ""
-#: dwarf.c:9522
+#: dwarf.c:10176
#, c-format
msgid "%lu\n"
msgstr ""
-#: dwarf.c:9542
+#: dwarf.c:10194
#, c-format
msgid "[%3u] <corrupt offset: %x>"
msgstr ""
-#: dwarf.c:9543
+#: dwarf.c:10195
#, c-format
msgid "Corrupt name offset of 0x%x found for symbol table slot %d\n"
msgstr ""
-#: dwarf.c:9554
+#: dwarf.c:10206
#, c-format
msgid "<invalid CU vector offset: %x>\n"
msgstr ""
-#: dwarf.c:9555
+#: dwarf.c:10207
#, c-format
msgid "Corrupt CU vector offset of 0x%x found for symbol table slot %d\n"
msgstr ""
-#: dwarf.c:9568
+#: dwarf.c:10218
#, c-format
msgid "Invalid number of CUs (0x%x) for symbol table slot %d\n"
msgstr ""
-#: dwarf.c:9593
+#: dwarf.c:10243
msgid "static"
msgstr ""
-#: dwarf.c:9593
+#: dwarf.c:10243
msgid "global"
msgstr ""
-#: dwarf.c:9631 dwarf.c:9642
+#: dwarf.c:10281 dwarf.c:10292
msgid "Internal error: out of space in the shndx pool.\n"
msgstr "Вътрешна грешка: недоÑтатъчно мÑÑто в ÑÐ±Ð¾Ñ€Ð½Ð¸Ñ shndx\n"
-#: dwarf.c:9706
+#: dwarf.c:10355
#, c-format
msgid "Section %s is empty\n"
msgstr "Празен раздел %s\n"
-#: dwarf.c:9712
+#: dwarf.c:10361
#, c-format
msgid "Section %s is too small to contain a CU/TU header\n"
msgstr "Разделът, %s, е твърде малък за Ñъдържанието на CU/TU заглавие\n"
-#: dwarf.c:9731
+#: dwarf.c:10380
#, c-format
msgid " Version: %u\n"
msgstr " ВерÑиÑ: %u\n"
-#: dwarf.c:9733
+#: dwarf.c:10382
#, c-format
msgid " Number of columns: %u\n"
msgstr " Колони: %u\n"
-#: dwarf.c:9734
+#: dwarf.c:10383
#, c-format
msgid " Number of used entries: %u\n"
msgstr " Използвани запиÑи: %u\n"
-#: dwarf.c:9735
+#: dwarf.c:10384
#, c-format
msgid ""
" Number of slots: %u\n"
@@ -3886,163 +4059,159 @@ msgstr ""
" Запазени запиÑи: %u\n"
"\n"
-#: dwarf.c:9744
+#: dwarf.c:10391
#, c-format
msgid "Section %s is too small for %u slot\n"
msgid_plural "Section %s is too small for %u slots\n"
msgstr[0] "Разделът %s е твърде малък за %u запиÑ\n"
msgstr[1] "Разделът %s е твърде малък за %u запиÑа\n"
-#: dwarf.c:9768
+#: dwarf.c:10415
msgid "Section index pool located before start of section\n"
msgstr ""
-#: dwarf.c:9773
+#: dwarf.c:10420
#, c-format
msgid " [%3d] Signature: 0x%s Sections: "
msgstr " [%3d] ПодпиÑ: 0x%s Раздели: "
-#: dwarf.c:9780
+#: dwarf.c:10426
#, c-format
msgid "Section %s too small for shndx pool\n"
msgstr "Разделът, %s, е твърде малък за ÑÐ±Ð¾Ñ€Ð½Ð¸Ñ shndx\n"
-#: dwarf.c:9828
+#: dwarf.c:10472
#, c-format
msgid "Section %s too small for offset and size tables\n"
msgstr "Разделът, %s, е твърде малък за таблиците Ñ Ð¾Ñ‚Ð¼ÐµÑÑ‚Ð²Ð°Ð½Ð¸Ñ Ð¸ размер\n"
-#: dwarf.c:9835
+#: dwarf.c:10479
#, c-format
msgid " Offset table\n"
msgstr "Таблица Ñ Ð¾Ñ‚Ð¼ÐµÑтваниÑ\n"
-#: dwarf.c:9837 dwarf.c:9938
+#: dwarf.c:10481 dwarf.c:10569
msgid "signature"
msgstr "подпиÑ"
-#: dwarf.c:9837 dwarf.c:9938
+#: dwarf.c:10481 dwarf.c:10569
msgid "dwo_id"
msgstr "dwo_id"
-#: dwarf.c:9875
+#: dwarf.c:10520
#, c-format
msgid "Row index (%u) is larger than number of used entries (%u)\n"
msgstr ""
-#: dwarf.c:9889
-#, c-format
-msgid "Signature (%p) extends beyond end of space in section\n"
-msgstr "ПодпиÑÑŠÑ‚ (%p) Ñе проÑтира Ñлед ÐºÑ€Ð°Ñ Ð½Ð° отделеното за раздела\n"
-
-#: dwarf.c:9898
-#, c-format
-msgid "Row index (%u) * num columns (%u) > space remaining in section\n"
-msgstr ""
-
-#: dwarf.c:9904 dwarf.c:9961
+#: dwarf.c:10534 dwarf.c:10593
#, c-format
msgid " [%3d] 0x%s"
msgstr " [%3d] 0x%s"
-#: dwarf.c:9918 dwarf.c:9974
+#: dwarf.c:10549 dwarf.c:10621
#, c-format
msgid "Overlarge Dwarf section index detected: %u\n"
msgstr ""
-#: dwarf.c:9936
+#: dwarf.c:10567
#, c-format
msgid " Size table\n"
msgstr "Размер табл.\n"
-#: dwarf.c:9989
+#: dwarf.c:10607
+#, c-format
+msgid "Too many rows/columns in DWARF index section %s\n"
+msgstr ""
+
+#: dwarf.c:10636
#, c-format
msgid " Unsupported version (%d)\n"
msgstr " Ðеподдържана верÑÐ¸Ñ (%d)\n"
-#: dwarf.c:10061
+#: dwarf.c:10708
#, c-format
msgid "Displaying the debug contents of section %s is not yet supported.\n"
msgstr ""
-#: dwarf.c:10092
+#: dwarf.c:10739
#, c-format
msgid "Attempt to allocate an array with an excessive number of elements: 0x%lx\n"
msgstr ""
-#: dwarf.c:10110
+#: dwarf.c:10757
#, c-format
msgid "Attempt to re-allocate an array with an excessive number of elements: 0x%lx\n"
msgstr ""
-#: dwarf.c:10126
+#: dwarf.c:10773
#, c-format
msgid "Attempt to allocate a zero'ed array with an excessive number of elements: 0x%lx\n"
msgstr ""
-#: dwarf.c:10224
+#: dwarf.c:10871
#, c-format
msgid "Unable to reopen separate debug info file: %s\n"
msgstr ""
-#: dwarf.c:10236
+#: dwarf.c:10883
#, c-format
msgid "Separate debug info file %s found, but CRC does not match - ignoring\n"
msgstr ""
-#: dwarf.c:10414
+#: dwarf.c:11062
#, c-format
msgid "Corrupt debuglink section: %s\n"
msgstr "Повреден раздел (debuglink): %s\n"
-#: dwarf.c:10452
+#: dwarf.c:11101
msgid "Out of memory"
msgstr "ÐедоÑтиг на памет"
#. Failed to find the file.
-#: dwarf.c:10524
+#: dwarf.c:11176
#, c-format
msgid "could not find separate debug file '%s'\n"
msgstr "не можа да Ñе намери отделен файл за разтоварване '%s'\n"
-#: dwarf.c:10525 dwarf.c:10529 dwarf.c:10534 dwarf.c:10537 dwarf.c:10541
-#: dwarf.c:10544 dwarf.c:10547 dwarf.c:10550
+#: dwarf.c:11178 dwarf.c:11183 dwarf.c:11189 dwarf.c:11193 dwarf.c:11198
+#: dwarf.c:11201 dwarf.c:11204 dwarf.c:11207
#, c-format
msgid "tried: %s\n"
msgstr "изпробван: %s\n"
-#: dwarf.c:10558
+#: dwarf.c:11215
#, c-format
msgid "tried: DEBUGINFOD_URLS=%s\n"
msgstr ""
-#: dwarf.c:10574
+#: dwarf.c:11243
#, c-format
msgid "failed to open separate debug file: %s\n"
msgstr "не уÑÐ¿Ñ Ð´Ð° Ñе отвори отделен файл за проÑледÑване: %s\n"
-#. FIXME: We do not check to see if there are any other separate debug info
-#. files that would also match.
-#: dwarf.c:10582
-#, c-format
+#: dwarf.c:11252
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: Found separate debug info file: %s\n"
+#| "\n"
msgid ""
-"%s: Found separate debug info file: %s\n"
"\n"
+"%s: Found separate debug info file: %s\n"
msgstr ""
"%s: Открит е отделен файл ÑÑŠÑ ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð·Ð° проÑледÑване: %s\n"
"\n"
-#: dwarf.c:10602
+#: dwarf.c:11275
msgid "Out of memory allocating dwo filename\n"
msgstr "ÐедоÑтиг на памет при заделÑне за име на DWO-файл\n"
-#: dwarf.c:10608
+#: dwarf.c:11281
#, c-format
msgid "Unable to load dwo file: %s\n"
msgstr "Ðе можа дa Ñе зареди def-файл: %s\n"
#. FIXME: We should check the dwo_id.
-#: dwarf.c:10615
+#: dwarf.c:11288
#, c-format
msgid ""
"%s: Found separate debug object file: %s\n"
@@ -4051,7 +4220,65 @@ msgstr ""
"%s: Открит е отделен файл Ñ Ð¾Ð±ÐµÐºÑ‚Ð¸ за проÑледÑване: %s\n"
"\n"
-#: dwarf.c:10656
+#: dwarf.c:11320
+msgid "Unable to load the .note.gnu.build-id section\n"
+msgstr "Ðе можа да Ñе зареди раздел .note.gnu.build-id\n"
+
+#: dwarf.c:11326
+msgid ".note.gnu.build-id section is corrupt/empty\n"
+msgstr ".note.gnu.build-id раздел е повреден или празен\n"
+
+#: dwarf.c:11347
+msgid ".note.gnu.build-id data size is too small\n"
+msgstr ".note.gnu.build-id е Ñ Ñ‚Ð²ÑŠÑ€Ð´Ðµ малък размер за данни\n"
+
+#: dwarf.c:11353
+msgid ".note.gnu.build-id data size is too bug\n"
+msgstr ".note.gnu.build-id е Ñ Ñ‚Ð²ÑŠÑ€Ð´Ðµ голÑм размер за данни\n"
+
+#: dwarf.c:11414
+msgid ".debug_sup section is corrupt/empty\n"
+msgstr ".debug_sup раздел е повреден или празен\n"
+
+#: dwarf.c:11424
+msgid "filename in .debug_sup section is corrupt\n"
+msgstr "името на файла в .debug_sup раздел е повредено\n"
+
+#: dwarf.c:11439
+msgid "unable to construct path for supplementary debug file"
+msgstr ""
+
+#: dwarf.c:11453
+msgid "out of memory constructing filename for .debug_sup link\n"
+msgstr "недоÑтиг на памет при заделÑне за име на .debug_sup връзка\n"
+
+#: dwarf.c:11461
+#, c-format
+msgid "unable to open file '%s' referenced from .debug_sup section\n"
+msgstr "не можа да Ñе отвори файл '%s' Ñпоменат от .debug_sup раздел.\n"
+
+#: dwarf.c:11466
+#, c-format
+msgid ""
+"%s: Found supplementary debug file: %s\n"
+"\n"
+msgstr ""
+"%s: Открит е допълнителен файл ÑÑŠÑ ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð·Ð° проÑледÑване: %s\n"
+"\n"
+
+#: dwarf.c:11558
+msgid "Multiple DWO_NAMEs encountered for the same CU\n"
+msgstr ""
+
+#: dwarf.c:11570
+msgid "multiple DWO_IDs encountered for the same CU\n"
+msgstr ""
+
+#: dwarf.c:11575
+msgid "Unexpected DWO INFO type"
+msgstr ""
+
+#: dwarf.c:11590
#, c-format
msgid ""
"The %s section contains link(s) to dwo file(s):\n"
@@ -4060,357 +4287,358 @@ msgstr ""
"Раздел %s Ñъдържа връзки към dwo-файл/-ове:\n"
"\n"
-#: dwarf.c:10661
+#: dwarf.c:11595
#, c-format
msgid " Name: %s\n"
msgstr " Име: %s\n"
-#: dwarf.c:10662
+#: dwarf.c:11596
#, c-format
msgid " Directory: %s\n"
msgstr " Папка: %s\n"
-#: dwarf.c:10662
+#: dwarf.c:11596
msgid "<not-found>"
msgstr "<не е намерен>"
-#: dwarf.c:10664
+#: dwarf.c:11598
#, c-format
msgid " ID: "
msgstr " Ðом: "
-#: dwarf.c:10666
+#: dwarf.c:11600
#, c-format
-msgid " ID: <unknown>\n"
-msgstr " Ðом: <неизвеÑтен>\n"
-
-#: dwarf.c:10683
-msgid "Unexpected DWO INFO type"
+msgid " ID: <not specified>\n"
msgstr ""
-#: dwarf.c:10849 dwarf.c:10892
+#: dwarf.c:11764 dwarf.c:11808
#, c-format
msgid "Unrecognized debug option '%s'\n"
msgstr "Ðеразпозната Ð¾Ð¿Ñ†Ð¸Ñ Ð·Ð° проÑледÑване '%s'\n"
-#: dwarf.h:271
-#, c-format
-msgid "%s:%lu: end of data encountered whilst reading LEB\n"
+#: dwarf.h:273
+msgid "end of data encountered whilst reading LEB\n"
msgstr ""
-#: dwarf.h:273
-#, c-format
-msgid "%s:%lu: read LEB value is too large to store in destination variable\n"
+#: dwarf.h:275
+msgid "read LEB value is too large to store in destination variable\n"
msgstr ""
-#: elfcomm.c:46
+#: elfcomm.c:47
#, c-format
msgid "%s: Error: "
msgstr "%s: Грешка: "
-#: elfcomm.c:60
+#: elfcomm.c:61
#, c-format
msgid "%s: Warning: "
msgstr "%s: Предупр.: "
-#: elfcomm.c:92 elfcomm.c:127 elfcomm.c:232 elfcomm.c:342
+#: elfcomm.c:73 elfcomm.c:88 elfcomm.c:166 elfcomm.c:236
#, c-format
msgid "Unhandled data length: %d\n"
msgstr ""
-#: elfcomm.c:421 elfcomm.c:446 elfcomm.c:920
+#: elfcomm.c:296 elfcomm.c:321 elfcomm.c:795
msgid "Out of memory\n"
msgstr "ÐедоÑтиг на памет\n"
-#: elfcomm.c:438
+#: elfcomm.c:313
#, c-format
msgid "Abnormal length of thin archive member name: %lx\n"
msgstr ""
-#: elfcomm.c:482
+#: elfcomm.c:357
#, c-format
msgid "%s: invalid archive header size: %ld\n"
msgstr "%s: неправилен размер на заглавие на архив: %ld\n"
-#: elfcomm.c:495
+#: elfcomm.c:370
#, c-format
msgid "%s: failed to skip archive symbol table\n"
msgstr "%s: неуÑпех при пропуÑкането на архивната таблица Ñ Ð¸Ð¼ÐµÐ½Ð°\n"
-#: elfcomm.c:514
+#: elfcomm.c:389
#, c-format
msgid "%s: the archive index is empty\n"
msgstr "%s: празен Ð¸Ð½Ð´ÐµÐºÑ Ð½Ð° архив\n"
-#: elfcomm.c:522 elfcomm.c:551
+#: elfcomm.c:397 elfcomm.c:426
#, c-format
msgid "%s: failed to read archive index\n"
msgstr "%s: не можа да Ñе прочете индекÑа на архивът\n"
-#: elfcomm.c:533
+#: elfcomm.c:408
#, c-format
msgid "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"
msgstr "%s: очаква Ñе индекÑÑŠÑ‚ на архива да е Ñ 0x%lx запиÑа от %d байта, но размерът е Ñамо 0x%lx\n"
-#: elfcomm.c:543
+#: elfcomm.c:418
msgid "Out of memory whilst trying to read archive symbol index\n"
msgstr "ÐедоÑтиг на памет при четене на имена от индекÑа на архива\n"
-#: elfcomm.c:563
+#: elfcomm.c:438
msgid "Out of memory whilst trying to convert the archive symbol index\n"
msgstr ""
-#: elfcomm.c:576
+#: elfcomm.c:451
#, c-format
msgid "%s: the archive has an index but no symbols\n"
msgstr "%s: архивът е Ñ Ð¸Ð½Ð´ÐµÐºÑ, но е без имена\n"
-#: elfcomm.c:584
+#: elfcomm.c:459
msgid "Out of memory whilst trying to read archive index symbol table\n"
msgstr ""
-#: elfcomm.c:592
+#: elfcomm.c:467
#, c-format
msgid "%s: failed to read archive index symbol table\n"
msgstr ""
-#: elfcomm.c:602
+#: elfcomm.c:477
#, c-format
msgid "%s: failed to read archive header following archive index\n"
msgstr ""
-#: elfcomm.c:635
+#: elfcomm.c:510
#, c-format
msgid "%s: failed to seek to first archive header\n"
msgstr "%s: не можа да Ñе доÑтигне първото заглавие в архива\n"
#. PR 24049 - we cannot use filedata->file_name as this will
#. have already been freed.
-#: elfcomm.c:644 elfcomm.c:878 elfedit.c:590 readelf.c:20590
+#: elfcomm.c:519 elfcomm.c:753 elfedit.c:613 readelf.c:22187
#, c-format
msgid "%s: failed to read archive header\n"
msgstr "%s: не можа да Ñе прочете заглавието на архива\n"
-#: elfcomm.c:661
+#: elfcomm.c:536
#, c-format
msgid "%s has no archive index\n"
msgstr ""
-#: elfcomm.c:673
+#: elfcomm.c:548
#, c-format
msgid "%s: long name table is too small, (size = %ld)\n"
msgstr ""
-#: elfcomm.c:681
+#: elfcomm.c:556
#, c-format
msgid "%s: long name table is too big, (size = 0x%lx)\n"
msgstr ""
-#: elfcomm.c:692
+#: elfcomm.c:567
msgid "Out of memory reading long symbol names in archive\n"
msgstr ""
-#: elfcomm.c:700
+#: elfcomm.c:575
#, c-format
msgid "%s: failed to read long symbol name string table\n"
msgstr ""
-#: elfcomm.c:783
+#: elfcomm.c:658
msgid "Archive member uses long names, but no longname table found\n"
msgstr ""
-#: elfcomm.c:797
+#: elfcomm.c:672
#, c-format
msgid "Found long name index (%ld) beyond end of long name table\n"
msgstr ""
-#: elfcomm.c:816
+#: elfcomm.c:691
msgid "Invalid Thin archive member name\n"
msgstr ""
-#: elfcomm.c:872
+#: elfcomm.c:747
#, c-format
msgid "%s: failed to seek to next file name\n"
msgstr ""
-#: elfcomm.c:883 elfedit.c:597 readelf.c:20597
+#: elfcomm.c:758 elfedit.c:620 readelf.c:22194
#, c-format
msgid "%s: did not find a valid archive header\n"
msgstr ""
-#: elfedit.c:90
+#: elfedit.c:93
#, c-format
msgid "%s: Not an i386 nor x86-64 ELF file\n"
msgstr ""
-#: elfedit.c:96
+#: elfedit.c:99
#, c-format
msgid "%s: stat () failed\n"
msgstr "%s: stat () пропадна\n"
-#: elfedit.c:104
+#: elfedit.c:107
#, c-format
msgid "%s: mmap () failed\n"
msgstr "%s: mmap () пропадна\n"
-#: elfedit.c:243
+#: elfedit.c:246
#, c-format
msgid "%s: Invalid PT_NOTE segment\n"
msgstr ""
-#: elfedit.c:264
+#: elfedit.c:271
#, c-format
msgid "Unknown x86 feature: %s\n"
msgstr ""
-#: elfedit.c:312
+#: elfedit.c:319
#, c-format
msgid "%s: Unsupported EI_VERSION: %d is not %d\n"
msgstr "%s: Ðеподдържана EI_VERSION: %d не е %d\n"
-#: elfedit.c:333
+#: elfedit.c:340
#, c-format
msgid "%s: Unmatched input EI_CLASS: %d is not %d\n"
msgstr "%s: ÐеÑъответÑтващ входÑщ EI_CLASS: %d не е %d\n"
-#: elfedit.c:342
+#: elfedit.c:349
#, c-format
msgid "%s: Unmatched output EI_CLASS: %d is not %d\n"
msgstr "%s: ÐеÑъответÑтващ изходÑщ EI_CLASS: %d не е %d\n"
-#: elfedit.c:351
+#: elfedit.c:358
#, c-format
msgid "%s: Unmatched e_machine: %d is not %d\n"
msgstr "%s: ÐеÑъответÑтващa e_machine: %d не е %d\n"
-#: elfedit.c:362
+#: elfedit.c:369
#, c-format
msgid "%s: Unmatched e_type: %d is not %d\n"
msgstr "%s: ÐеÑъответÑтващ e_type: %d не е %d\n"
-#: elfedit.c:373
+#: elfedit.c:380
#, c-format
msgid "%s: Unmatched EI_OSABI: %d is not %d\n"
msgstr "%s: ÐеÑъответÑтващ EI_OSABI: %d не е %d\n"
-#: elfedit.c:406
+#: elfedit.c:392
+#, c-format
+msgid "%s: Unmatched EI_ABIVERSION: %d is not %d\n"
+msgstr "%s: ÐеÑъответÑтващ EI_ABIVERSION: %d не е %d\n"
+
+#: elfedit.c:429
#, c-format
msgid "%s: Failed to update ELF header: %s\n"
msgstr "%s: Пропадна обновÑването на ELF заглавие: %s\n"
-#: elfedit.c:476
+#: elfedit.c:499
msgid ""
"This executable has been built without support for a\n"
"64 bit data type and so it cannot process 64 bit ELF files.\n"
msgstr ""
-#: elfedit.c:517
+#: elfedit.c:540
#, c-format
msgid "%s: Failed to read ELF header\n"
msgstr "%s: Пропадна прочитането на ELF заглавие\n"
-#: elfedit.c:524
+#: elfedit.c:547
#, c-format
msgid "%s: Failed to seek to ELF header\n"
msgstr "%s: Пропадна премеÑтването на ELF заглавие\n"
-#: elfedit.c:581 readelf.c:20578
+#: elfedit.c:604 readelf.c:22175
#, c-format
msgid "%s: failed to seek to next archive header\n"
msgstr "%s: не можа да Ñе поÑтигне Ñледващото заглавие на архива\n"
-#: elfedit.c:612 elfedit.c:621 readelf.c:20612 readelf.c:20621
+#: elfedit.c:635 elfedit.c:644 readelf.c:22207 readelf.c:22216
#, c-format
msgid "%s: bad archive file name\n"
msgstr "%s: негодно име на файлов архив\n"
-#: elfedit.c:644 elfedit.c:742
+#: elfedit.c:667 elfedit.c:778
#, c-format
msgid "Input file '%s' is not readable\n"
msgstr "Ðечетим входÑщ файл '%s'\n"
-#: elfedit.c:672
+#: elfedit.c:694
#, c-format
msgid "%s: failed to seek to archive member\n"
msgstr "%s: не уÑÐ¿Ñ Ð¿Ñ€ÐµÐ¼ÐµÑтването към член на архива\n"
-#: elfedit.c:713 readelf.c:20737
+#: elfedit.c:735 readelf.c:22335
#, c-format
msgid "'%s': No such file\n"
msgstr "'%s': ÐÑма такъв файл\n"
-#: elfedit.c:715 readelf.c:20739
+#: elfedit.c:737 readelf.c:22337
#, c-format
msgid "Could not locate '%s'. System error message: %s\n"
msgstr "Ðе можа да Ñе открие '%s'. СиÑтемна грешка: %s\n"
-#: elfedit.c:722 readelf.c:20746
+#: elfedit.c:758 readelf.c:22344
#, c-format
msgid "'%s' is not an ordinary file\n"
msgstr "'%s' не е обикновен файл\n"
-#: elfedit.c:748 readelf.c:20768
+#: elfedit.c:784 readelf.c:22366
#, c-format
msgid "%s: Failed to read file's magic number\n"
msgstr ""
-#: elfedit.c:812
+#: elfedit.c:848
#, c-format
msgid "Unknown OSABI: %s\n"
msgstr "ÐеизвеÑтен OSABI: %s\n"
-#: elfedit.c:837
+#: elfedit.c:873
#, c-format
msgid "Unknown machine type: %s\n"
msgstr "ÐеизвеÑтен тип машина: %s\n"
-#: elfedit.c:856
+#: elfedit.c:892
#, c-format
msgid "Unknown type: %s\n"
msgstr "Ðепознат тип: %s\n"
-#: elfedit.c:897
+#: elfedit.c:943
#, c-format
msgid "Usage: %s <option(s)> elffile(s)\n"
msgstr "Употреба: %s <опции> <обектни файлове>\n"
-#: elfedit.c:899
+#: elfedit.c:945
#, c-format
msgid " Update the ELF header of ELF files\n"
msgstr ""
-#: elfedit.c:900 objcopy.c:560 objcopy.c:700 strings.c:700
+#: elfedit.c:946 nm.c:295 objcopy.c:565 objcopy.c:706 strings.c:1314
#, c-format
msgid " The options are:\n"
msgstr " ВъзможноÑтите Ñа:\n"
-#: elfedit.c:901
+#: elfedit.c:947
#, c-format
msgid ""
-" --input-mach <machine> Set input machine type to <machine>\n"
-" --output-mach <machine> Set output machine type to <machine>\n"
-" --input-type <type> Set input file type to <type>\n"
-" --output-type <type> Set output file type to <type>\n"
-" --input-osabi <osabi> Set input OSABI to <osabi>\n"
-" --output-osabi <osabi> Set output OSABI to <osabi>\n"
+" --input-mach [none|i386|iamcu|l1om|k1om|x86_64]\n"
+" Set input machine type\n"
+" --output-mach [none|i386|iamcu|l1om|k1om|x86_64]\n"
+" Set output machine type\n"
+" --input-type [none|rel|exec|dyn]\n"
+" Set input file type\n"
+" --output-type [none|rel|exec|dyn]\n"
+" Set output file type\n"
+" --input-osabi [%s]\n"
+" Set input OSABI\n"
+" --output-osabi [%s]\n"
+" Set output OSABI\n"
+" --input-abiversion [0-255] Set input ABIVERSION\n"
+" --output-abiversion [0-255] Set output ABIVERSION\n"
msgstr ""
-" --input-mach <машина> Задава входÑщ тип за машина <машина>\n"
-" --output-mach <машина> Задава изходÑщ тип за машината<машина>\n"
-" --input-type <тип> Задава входÑщ тип за файл на <тип>\n"
-" --output-type <тип> Задава изходÑщ тип за файл на <тип>\n"
-" --input-osabi <ОС-Ñъвм> Задава входÑща двоична ÑъвмеÑтимоÑÑ‚ за ОС на <ОС-Ñъвм>\n"
-" --output-osabi <ОС-Ñъвм> Задава изходÑщ двоична ÑъвмеÑтимоÑÑ‚ за ОС на <ОС-Ñъвм>\n"
-#: elfedit.c:909
+#: elfedit.c:964
#, c-format
msgid ""
-" --enable-x86-feature <feature>\n"
-" Enable x86 feature <feature>\n"
-" --disable-x86-feature <feature>\n"
-" Disable x86 feature <feature>\n"
+" --enable-x86-feature [ibt|shstk|lam_u48|lam_u57]\n"
+" Enable x86 feature\n"
+" --disable-x86-feature [ibt|shstk|lam_u48|lam_u57]\n"
+" Disable x86 feature\n"
msgstr ""
-#: elfedit.c:915
+#: elfedit.c:970
#, c-format
msgid ""
" -h --help Display this information\n"
@@ -4419,6 +4647,11 @@ msgstr ""
" -h --help Показва това Ñведение\n"
" -v --version Извежда номер на верÑÐ¸Ñ Ð½Ð° %s\n"
+#: elfedit.c:1049 elfedit.c:1060
+#, c-format
+msgid "Invalid ABIVERSION: %s\n"
+msgstr "Ðеправилна ABIVERSION: %s\n"
+
#: emul_aix.c:44
#, c-format
msgid " [-g] - 32 bit small archive\n"
@@ -4439,141 +4672,242 @@ msgstr " [-X64] - пренебрегва 32-битови обекти\n"
msgid " [-X32_64] - accepts 32 and 64 bit objects\n"
msgstr " [-X32_64] - приема 32- и 64-битови обекти\n"
-#: mclex.c:240
+#: mclex.c:245
msgid "Duplicate symbol entered into keyword list."
msgstr ""
-#: nm.c:238 size.c:88 strings.c:698
+#: nm.c:293 size.c:88 strings.c:1312
#, c-format
msgid "Usage: %s [option(s)] [file(s)]\n"
msgstr "Употреба: %s [опции] [файлове]\n"
-#: nm.c:239
+#: nm.c:294
#, c-format
msgid " List symbols in [file(s)] (a.out by default).\n"
msgstr " ИзброÑване на имената от [файл/-ове] (a.out по подразбиране).\n"
-#: nm.c:240
+#: nm.c:296
+#, c-format
+msgid " -a, --debug-syms Display debugger-only symbols\n"
+msgstr ""
+
+#: nm.c:298
+#, c-format
+msgid " -A, --print-file-name Print name of the input file before every symbol\n"
+msgstr ""
+
+#: nm.c:300
+#, c-format
+msgid " -B Same as --format=bsd\n"
+msgstr " -B Също като --format=bsd\n"
+
+#: nm.c:302
+#, c-format
+msgid " -C, --demangle[=STYLE] Decode mangled/processed symbol names\n"
+msgstr ""
+
+#: nm.c:304 readelf.c:5056
+msgid " STYLE can be "
+msgstr ""
+
+#: nm.c:306
+#, c-format
+msgid " --no-demangle Do not demangle low-level symbol names\n"
+msgstr ""
+
+#: nm.c:308
+#, c-format
+msgid " --recurse-limit Enable a demangling recursion limit. (default)\n"
+msgstr ""
+
+#: nm.c:310
+#, c-format
+msgid " --no-recurse-limit Disable a demangling recursion limit.\n"
+msgstr ""
+
+#: nm.c:312
+#, c-format
+msgid " -D, --dynamic Display dynamic symbols instead of normal symbols\n"
+msgstr ""
+
+#: nm.c:314
+#, c-format
+msgid " --defined-only Display only defined symbols\n"
+msgstr ""
+
+#: nm.c:316
+#, c-format
+msgid " -e (ignored)\n"
+msgstr " -e (пренебрегнат)\n"
+
+#: nm.c:318
#, c-format
msgid ""
-" The options are:\n"
-" -a, --debug-syms Display debugger-only symbols\n"
-" -A, --print-file-name Print name of the input file before every symbol\n"
-" -B Same as --format=bsd\n"
-" -C, --demangle[=STYLE] Decode low-level symbol names into user-level names\n"
-" The STYLE, if specified, can be `auto' (the default),\n"
-" `gnu', `lucid', `arm', `hp', `edg', `gnu-v3', `java'\n"
-" or `gnat'\n"
-" --no-demangle Do not demangle low-level symbol names\n"
-" --recurse-limit Enable a demangling recursion limit. This is the default.\n"
-" --no-recurse-limit Disable a demangling recursion limit.\n"
-" -D, --dynamic Display dynamic symbols instead of normal symbols\n"
-" --defined-only Display only defined symbols\n"
-" -e (ignored)\n"
" -f, --format=FORMAT Use the output format FORMAT. FORMAT can be `bsd',\n"
-" `sysv' or `posix'. The default is `bsd'\n"
-" -g, --extern-only Display only external symbols\n"
+" `sysv', `posix' or 'just-symbols'.\n"
+" The default is `bsd'\n"
+msgstr ""
+
+#: nm.c:322
+#, c-format
+msgid " -g, --extern-only Display only external symbols\n"
+msgstr ""
+
+#: nm.c:324
+#, c-format
+msgid " --ifunc-chars=CHARS Characters to use when displaying ifunc symbols\n"
+msgstr ""
+
+#: nm.c:326
+#, c-format
+msgid " -j, --just-symbols Same as --format=just-symbols\n"
+msgstr ""
+
+#: nm.c:328
+#, c-format
+msgid ""
" -l, --line-numbers Use debugging information to find a filename and\n"
" line number for each symbol\n"
-" -n, --numeric-sort Sort symbols numerically by address\n"
-" -o Same as -A\n"
-" -p, --no-sort Do not sort the symbols\n"
-" -P, --portability Same as --format=posix\n"
-" -r, --reverse-sort Reverse the sense of the sort\n"
-msgstr ""
-" Възможните Ñа :\n"
-" -a, --debug-syms Показване Ñамо на имената за проÑледÑване\n"
-" -A, --print-file-name Преди вÑÑко име изведи името на входÑÑ‰Ð¸Ñ Ñ„Ð°Ð¹Ð»\n"
-" -B Също като --format=bsd\n"
-" -C, --demangle[=ИЗГЛ] Разкодиране на имената в имена за потребителÑко ниво\n"
-" ИЗГЛ, ако е зададен, може да бъде 'auto' (по подразбиране),\n"
-" 'gnu', 'lucid', 'arm', 'hp', 'edg', 'gnu-v3', 'java'\n"
-" или 'gnat'\n"
-" --no-demangle Да не Ñе разкодират имената\n"
-" --recurse-limit Разрешава ограничение в/у рекурÑиите при разкодиране. По подразбиране\n"
-" --no-recurse-limit ЗабранÑва ограничение в/у рекурÑиите при разкодиране\n"
-" -D, --dynamic Показване на динамичните имена вмеÑто нормалните\n"
-" --defined-only Показване Ñамо на определените имена\n"
-" -e (пренебрегнат)\n"
-" -f, --format=ФОРМÐТ Използване на ФОРМÐТ за извеждане. ФОРМÐТ може да бъде\n"
-" 'bsd', 'sysv' или 'posix'. По подразбиране е 'bsd'\n"
-" -g, --extern-only Показване Ñамо на външните имена\n"
-" -l, --line-numbers Използване на ÑведениÑта за проÑледÑване за намиране на\n"
-" файл и номер на ред за вÑÑко име\n"
-" -n, --numeric-sort Подрежда имената по Ð°Ð´Ñ€ÐµÑ Ð² цифров вид\n"
-" -o Също като -A\n"
-" -p, --no-sort Да не Ñе подреждат имената\n"
-" -P, --portability Също като --format=posix\n"
-" -r, --reverse-sort Обръща реда на подреждане\n"
-
-#: nm.c:265
+msgstr ""
+
+#: nm.c:331
+#, c-format
+msgid " -n, --numeric-sort Sort symbols numerically by address\n"
+msgstr ""
+
+#: nm.c:333
+#, c-format
+msgid " -o Same as -A\n"
+msgstr " -o Също като -A\n"
+
+#: nm.c:335
+#, c-format
+msgid " -p, --no-sort Do not sort the symbols\n"
+msgstr " -p, --no-sort Без подреждане на имената\n"
+
+#: nm.c:337
+#, c-format
+msgid " -P, --portability Same as --format=posix\n"
+msgstr ""
+
+#: nm.c:339
+#, c-format
+msgid " -r, --reverse-sort Reverse the sense of the sort\n"
+msgstr ""
+
+#: nm.c:342
#, c-format
msgid " --plugin NAME Load the specified plugin\n"
msgstr " --plugin ИМЕ Зарежда зададената приÑтавка\n"
-#: nm.c:268
-#, c-format
-msgid ""
-" -S, --print-size Print size of defined symbols\n"
-" -s, --print-armap Include index for symbols from archive members\n"
-" --size-sort Sort symbols by size\n"
-" --special-syms Include special symbols in the output\n"
-" --synthetic Display synthetic symbols as well\n"
-" -t, --radix=RADIX Use RADIX for printing symbol values\n"
-" --target=BFDNAME Specify the target object format as BFDNAME\n"
-" -u, --undefined-only Display only undefined symbols\n"
-" --with-symbol-versions Display version strings after symbol names\n"
-" -X 32_64 (ignored)\n"
-" @FILE Read options from FILE\n"
-" -h, --help Display this information\n"
-" -V, --version Display this program's version number\n"
-"\n"
-msgstr ""
-" -S, --print-size Извежда размера на определените имена\n"
-" -s, --print-armap Включва указател за имената от членове на архива\n"
-" --size-sort Подрежда имената по размер\n"
-" --special-syms Включва \"Ñпециални\" имена към изхода\n"
-" --synthetic Показва Ñъщо \"Ñинтетични\" имена\n"
-" -t, --radix=ОСÐОВРИзползва ОСÐОВРпри извеждане на ÑтойноÑти\n"
-" --target=BFDИМЕ Задава Ñ†ÐµÐ»ÐµÐ²Ð¸Ñ Ð¾Ð±ÐµÐºÑ‚ÐµÐ½ формат като BFDИМЕ\n"
-" -u, --undefined-only Показва Ñамо неопределените имена\n"
-" --with-symbol-versions Показва верÑиÑта Ñлед имената\n"
-" -X 32_64 (пренебрегната)\n"
-" @ФÐЙЛ Прочита опциите от ФÐЙЛ\n"
-" -h, --help Показва това Ñведение\n"
-" -V, --version Показва верÑиÑта на програмата\n"
-
-#: nm.c:301
+#: nm.c:345
+#, c-format
+msgid " -S, --print-size Print size of defined symbols\n"
+msgstr ""
+
+#: nm.c:347
+#, c-format
+msgid " -s, --print-armap Include index for symbols from archive members\n"
+msgstr ""
+
+#: nm.c:349
+#, c-format
+msgid " --quiet Suppress \"no symbols\" diagnostic\n"
+msgstr ""
+
+#: nm.c:351
+#, c-format
+msgid " --size-sort Sort symbols by size\n"
+msgstr ""
+
+#: nm.c:353
+#, c-format
+msgid " --special-syms Include special symbols in the output\n"
+msgstr ""
+
+#: nm.c:355
+#, c-format
+msgid " --synthetic Display synthetic symbols as well\n"
+msgstr ""
+
+#: nm.c:357
+#, c-format
+msgid " -t, --radix=RADIX Use RADIX for printing symbol values\n"
+msgstr ""
+
+#: nm.c:359
+#, c-format
+msgid " --target=BFDNAME Specify the target object format as BFDNAME\n"
+msgstr " --target=BFD–ИМЕ Задава BFD–ИМЕ за формата на Ñ†ÐµÐ»ÐµÐ²Ð¸Ñ Ð¾Ð±ÐµÐºÑ‚\n"
+
+#: nm.c:361
+#, c-format
+msgid " -u, --undefined-only Display only undefined symbols\n"
+msgstr ""
+
+#: nm.c:363
+#, c-format
+msgid ""
+" -U {d|s|i|x|e|h} Specify how to treat UTF-8 encoded unicode characters\n"
+" --unicode={default|show|invalid|hex|escape|highlight}\n"
+msgstr ""
+
+#: nm.c:366
+#, c-format
+msgid " --with-symbol-versions Display version strings after symbol names\n"
+msgstr ""
+
+#: nm.c:368
+#, c-format
+msgid " -X 32_64 (ignored)\n"
+msgstr " -X 32_64 (пренебрегнат)\n"
+
+#: nm.c:370
+#, c-format
+msgid " @FILE Read options from FILE\n"
+msgstr " @ФÐЙЛ Прочитане на команди от ФÐЙЛ.\n"
+
+#: nm.c:372
+#, c-format
+msgid " -h, --help Display this information\n"
+msgstr " -h, --help Показване на това Ñведение.\n"
+
+#: nm.c:374
+#, c-format
+msgid " -V, --version Display this program's version number\n"
+msgstr " -V, --version Показване на верÑиÑта на програмата.\n"
+
+#: nm.c:395
#, c-format
msgid "%s: invalid radix"
msgstr "%s: Ñгрешена оÑнова"
-#: nm.c:327
+#: nm.c:425
#, c-format
msgid "%s: invalid output format"
msgstr "%s: Ñгрешен входÑщ формат"
-#: nm.c:352 readelf.c:11567 readelf.c:11610
+#: nm.c:450 readelf.c:12440 readelf.c:12483
#, c-format
msgid "<processor specific>: %d"
msgstr "<оÑобен за процеÑор>: %d"
-#: nm.c:354 readelf.c:11574 readelf.c:11627
+#: nm.c:452 readelf.c:12447 readelf.c:12500
#, c-format
msgid "<OS specific>: %d"
msgstr "<оÑобен за ОС>: %d"
-#: nm.c:356 readelf.c:11577 readelf.c:11630
+#: nm.c:454 readelf.c:12450 readelf.c:12503
#, c-format
msgid "<unknown>: %d"
msgstr "<неизвеÑтен>: %d"
-#: nm.c:386
+#: nm.c:484
#, c-format
msgid "<unknown>: %d/%d"
msgstr "<неизвеÑтен>: %d/%d"
-#: nm.c:441
+#: nm.c:742
#, c-format
msgid ""
"\n"
@@ -4582,12 +4916,12 @@ msgstr ""
"\n"
"Показалец за архив:\n"
-#: nm.c:495 nm.c:1197
+#: nm.c:797 nm.c:1494
#, c-format
msgid "%s: plugin needed to handle lto object"
msgstr ""
-#: nm.c:1434
+#: nm.c:1731
#, c-format
msgid ""
"\n"
@@ -4600,7 +4934,7 @@ msgstr ""
"Ðеопределени имена в %s:\n"
"\n"
-#: nm.c:1436
+#: nm.c:1733
#, c-format
msgid ""
"\n"
@@ -4613,7 +4947,7 @@ msgstr ""
"Имена от %s:\n"
"\n"
-#: nm.c:1438 nm.c:1489
+#: nm.c:1735 nm.c:1796
#, c-format
msgid ""
"Name Value Class Type Size Line Section\n"
@@ -4622,7 +4956,7 @@ msgstr ""
"Име Стойн. ÐšÐ»Ð°Ñ Ð¢Ð¸Ð¿ Размер Ред ДÑл\n"
"\n"
-#: nm.c:1441 nm.c:1492
+#: nm.c:1738 nm.c:1799
#, c-format
msgid ""
"Name Value Class Type Size Line Section\n"
@@ -4631,7 +4965,7 @@ msgstr ""
"Име Стойн. ÐšÐ»Ð°Ñ Ð¢Ð¸Ð¿ Размер Ред ДÑл\n"
"\n"
-#: nm.c:1485
+#: nm.c:1792
#, c-format
msgid ""
"\n"
@@ -4644,7 +4978,7 @@ msgstr ""
"Ðеопределени имена от %s[%s]:\n"
"\n"
-#: nm.c:1487
+#: nm.c:1794
#, c-format
msgid ""
"\n"
@@ -4657,34 +4991,39 @@ msgstr ""
"Имена от %s[%s]:\n"
"\n"
-#: nm.c:1579
+#: nm.c:1900
#, c-format
msgid "Print width has not been initialized (%d)"
msgstr ""
-#: nm.c:1828
+#: nm.c:2162 objdump.c:5674 readelf.c:5472 strings.c:292
+#, c-format
+msgid "invalid argument to -U/--unicode: %s"
+msgstr "Ñгрешен аргумент за -U/--unicode: %s"
+
+#: nm.c:2177
msgid "Only -X 32_64 is supported"
msgstr "Само -X 32_64 Ñе поддържа"
-#: nm.c:1856
+#: nm.c:2209
msgid "Using the --size-sort and --undefined-only options together"
msgstr "При използването на опциите --size-sort и --undefined-only заедно"
-#: nm.c:1857
+#: nm.c:2210
msgid "will produce no output, since undefined symbols have no size."
msgstr "нÑма да има извеждане, защото неопределените имена нÑмат размер."
-#: objcopy.c:558 srconv.c:1693
+#: objcopy.c:563 srconv.c:1693
#, c-format
msgid "Usage: %s [option(s)] in-file [out-file]\n"
msgstr "Употреба: %s [опци-Ñ/-и] вх-файл [изх-файл]\n"
-#: objcopy.c:559
+#: objcopy.c:564
#, c-format
msgid " Copies a binary file, possibly transforming it in the process\n"
msgstr " Копира двоичен файл, възможно е преобразуване при обработката\n"
-#: objcopy.c:561
+#: objcopy.c:566
#, c-format
msgid ""
" -I --input-target <bfdname> Assume input file is in format <bfdname>\n"
@@ -4701,7 +5040,7 @@ msgstr ""
" --debugging Преобразува ÑведениÑта за проÑледÑване, ако е възможно\n"
" -p --preserve-dates Запазва времевите отметки за промÑна и доÑтъп във изхода\n"
-#: objcopy.c:569 objcopy.c:708
+#: objcopy.c:574 objcopy.c:714
#, c-format
msgid ""
" -D --enable-deterministic-archives\n"
@@ -4710,7 +5049,7 @@ msgid ""
" Disable -D behavior\n"
msgstr ""
-#: objcopy.c:575 objcopy.c:714
+#: objcopy.c:580 objcopy.c:720
#, c-format
msgid ""
" -D --enable-deterministic-archives\n"
@@ -4719,7 +5058,7 @@ msgid ""
" Disable -D behavior (default)\n"
msgstr ""
-#: objcopy.c:580
+#: objcopy.c:585
#, c-format
msgid ""
" -j --only-section <name> Only copy section <name> into the output\n"
@@ -4739,6 +5078,7 @@ msgid ""
" --extract-symbol Remove section contents but keep symbols\n"
" --keep-section <name> Do not strip section <name>\n"
" -K --keep-symbol <name> Do not strip symbol <name>\n"
+" --keep-section-symbols Do not strip section symbols\n"
" --keep-file-symbols Do not strip file symbol(s)\n"
" --localize-hidden Turn all ELF hidden symbols into locals\n"
" -L --localize-symbol <name> Force symbol <name> to be marked as a local\n"
@@ -4831,17 +5171,17 @@ msgid ""
" --info List object formats & architectures supported\n"
msgstr ""
-#: objcopy.c:698
+#: objcopy.c:704
#, c-format
msgid "Usage: %s <option(s)> in-file(s)\n"
msgstr "Употреба: %s <опци-Ñ/-и> вх-файлове\n"
-#: objcopy.c:699
+#: objcopy.c:705
#, c-format
msgid " Removes symbols and sections from files\n"
msgstr " премахва имена и раздели от файловете\n"
-#: objcopy.c:701
+#: objcopy.c:707
#, c-format
msgid ""
" -I --input-target=<bfdname> Assume input file is in format <bfdname>\n"
@@ -4850,7 +5190,7 @@ msgid ""
" -p --preserve-dates Copy modified/access timestamps to the output\n"
msgstr ""
-#: objcopy.c:719
+#: objcopy.c:725
#, c-format
msgid ""
" -R --remove-section=<name> Also remove section <name> from the output\n"
@@ -4865,6 +5205,7 @@ msgid ""
" -N --strip-symbol=<name> Do not copy symbol <name>\n"
" --keep-section=<name> Do not strip section <name>\n"
" -K --keep-symbol=<name> Do not strip symbol <name>\n"
+" --keep-section-symbols Do not strip section symbols\n"
" --keep-file-symbols Do not strip file symbol(s)\n"
" -w --wildcard Permit wildcard in symbol comparison\n"
" -x --discard-all Remove all non-global symbols\n"
@@ -4876,32 +5217,32 @@ msgid ""
" -o <file> Place stripped output into <file>\n"
msgstr ""
-#: objcopy.c:796
+#: objcopy.c:803
#, c-format
msgid "unrecognized section flag `%s'"
msgstr ""
-#: objcopy.c:797 objcopy.c:869
+#: objcopy.c:804 objcopy.c:876
#, c-format
msgid "supported flags: %s"
msgstr ""
-#: objcopy.c:868
+#: objcopy.c:875
#, c-format
msgid "unrecognized symbol flag `%s'"
msgstr ""
-#: objcopy.c:927
+#: objcopy.c:934
#, c-format
msgid "error: %s both copied and removed"
msgstr ""
-#: objcopy.c:933
+#: objcopy.c:940
#, c-format
msgid "error: %s both sets and alters VMA"
msgstr ""
-#: objcopy.c:939
+#: objcopy.c:946
#, c-format
msgid "error: %s both sets and alters LMA"
msgstr ""
@@ -4911,7 +5252,7 @@ msgstr ""
msgid "cannot open '%s': %s"
msgstr ""
-#: objcopy.c:1094 objcopy.c:5015
+#: objcopy.c:1094 objcopy.c:5091
#, c-format
msgid "%s: fread failed"
msgstr ""
@@ -4921,664 +5262,903 @@ msgstr ""
msgid "%s:%d: Ignoring rubbish found on this line"
msgstr ""
-#: objcopy.c:1336
+#: objcopy.c:1339
#, c-format
msgid "error: section %s matches both remove and copy options"
msgstr ""
-#: objcopy.c:1339
+#: objcopy.c:1342
#, c-format
msgid "error: section %s matches both update and remove options"
msgstr ""
-#: objcopy.c:1497
+#: objcopy.c:1500
#, c-format
msgid "Section %s not found"
msgstr "Разделът %s не е намерен"
-#: objcopy.c:1651
+#: objcopy.c:1550
+msgid "redefining symbols does not work on LTO-compiled object files"
+msgstr ""
+
+#: objcopy.c:1662
#, c-format
msgid "not stripping symbol `%s' because it is named in a relocation"
msgstr ""
-#: objcopy.c:1711
+#: objcopy.c:1723
#, c-format
msgid "'before=%s' not found"
msgstr ""
-#: objcopy.c:1750
+#: objcopy.c:1762
#, c-format
msgid "%s: Multiple redefinition of symbol \"%s\""
msgstr ""
-#: objcopy.c:1754
+#: objcopy.c:1766
#, c-format
msgid "%s: Symbol \"%s\" is target of more than one redefinition"
msgstr ""
-#: objcopy.c:1781
+#: objcopy.c:1793
#, c-format
msgid "couldn't open symbol redefinition file %s (error: %s)"
msgstr ""
-#: objcopy.c:1859
+#: objcopy.c:1871
#, c-format
msgid "%s:%d: garbage found at end of line"
msgstr ""
-#: objcopy.c:1862
+#: objcopy.c:1874
#, c-format
msgid "%s:%d: missing new symbol name"
msgstr ""
-#: objcopy.c:1872
+#: objcopy.c:1884
#, c-format
msgid "%s:%d: premature end of file"
msgstr ""
-#: objcopy.c:1899
+#: objcopy.c:1910
#, c-format
msgid "stat returns negative size for `%s'"
msgstr ""
-#: objcopy.c:1911
+#: objcopy.c:1922
#, c-format
msgid "copy from `%s' [unknown] to `%s' [unknown]\n"
msgstr ""
-#: objcopy.c:2158
+#: objcopy.c:2167
#, c-format
msgid "%s[%s]: Cannot merge - there are relocations against this section"
msgstr ""
-#: objcopy.c:2180
+#: objcopy.c:2189
msgid "corrupt GNU build attribute note: description size not a factor of 4"
msgstr ""
-#: objcopy.c:2187
+#: objcopy.c:2196
msgid "corrupt GNU build attribute note: wrong note type"
msgstr ""
-#: objcopy.c:2193
+#: objcopy.c:2202
msgid "corrupt GNU build attribute note: note too big"
msgstr ""
-#: objcopy.c:2199
+#: objcopy.c:2208
msgid "corrupt GNU build attribute note: name too small"
msgstr ""
-#: objcopy.c:2222
+#: objcopy.c:2231
msgid "corrupt GNU build attribute note: unsupported version"
msgstr ""
-#: objcopy.c:2271
+#: objcopy.c:2265
msgid "corrupt GNU build attribute note: bad description size"
msgstr ""
-#: objcopy.c:2302
+#: objcopy.c:2301
msgid "corrupt GNU build attribute note: name not NUL terminated"
msgstr ""
-#: objcopy.c:2314
+#: objcopy.c:2313
msgid "corrupt GNU build attribute notes: excess data at end"
msgstr ""
-#: objcopy.c:2321
+#: objcopy.c:2320
msgid "bad GNU build attribute notes: no known versions detected"
msgstr ""
#. This happens with glibc. No idea why.
-#: objcopy.c:2325
+#: objcopy.c:2324
#, c-format
msgid "%s[%s]: Warning: version note missing - assuming version 3"
msgstr ""
-#: objcopy.c:2335
+#: objcopy.c:2334
msgid "bad GNU build attribute notes: multiple different versions"
msgstr ""
-#: objcopy.c:2575
+#: objcopy.c:2574
#, c-format
msgid "%s[%s]: Note - dropping 'share' flag as output format is not COFF"
msgstr ""
#. PR 17636: Call non-fatal so that we return to our parent who
#. may need to tidy temporary files.
-#: objcopy.c:2607
-msgid "Unable to change endianness of input file(s)"
+#: objcopy.c:2606
+#, c-format
+msgid "unable to change endianness of '%s'"
+msgstr "не можа да Ñе помени подредбата на байтовете за '%s'"
+
+#: objcopy.c:2613
+#, c-format
+msgid "unable to modify '%s' due to errors"
msgstr ""
-#: objcopy.c:2619
+#: objcopy.c:2626
#, c-format
msgid "error: the input file '%s' has no sections"
msgstr ""
-#: objcopy.c:2629
+#: objcopy.c:2636
#, c-format
msgid "--compress-debug-sections=[zlib|zlib-gnu|zlib-gabi] is unsupported on `%s'"
msgstr ""
-#: objcopy.c:2636
+#: objcopy.c:2643
#, c-format
msgid "--elf-stt-common=[yes|no] is unsupported on `%s'"
msgstr ""
-#: objcopy.c:2643
+#: objcopy.c:2650
#, c-format
msgid "copy from `%s' [%s] to `%s' [%s]\n"
msgstr ""
-#: objcopy.c:2691
+#: objcopy.c:2698
#, c-format
msgid "Input file `%s' ignores binary architecture parameter."
msgstr ""
-#: objcopy.c:2707
+#: objcopy.c:2714
#, c-format
msgid "Unable to recognise the format of the input file `%s'"
msgstr ""
-#: objcopy.c:2710
+#: objcopy.c:2717
#, c-format
msgid "Output file cannot represent architecture `%s'"
msgstr ""
-#: objcopy.c:2773
+#: objcopy.c:2780
#, c-format
msgid "warning: file alignment (0x%s) > section alignment (0x%s)"
msgstr ""
-#: objcopy.c:2847
+#: objcopy.c:2853
#, c-format
msgid "can't add section '%s'"
msgstr ""
-#: objcopy.c:2861
+#: objcopy.c:2867
#, c-format
msgid "can't create section `%s'"
msgstr ""
-#: objcopy.c:2909
+#: objcopy.c:2915
#, c-format
msgid "error: %s not found, can't be updated"
msgstr ""
-#: objcopy.c:2942
+#: objcopy.c:2948
msgid "warning: note section is empty"
msgstr "Предупреждение: разделът .note е празен"
-#: objcopy.c:2951
+#: objcopy.c:2957
msgid "warning: could not load note section"
msgstr "Предупреждение: не може да Ñе зареди раздел .note"
-#: objcopy.c:2967
+#: objcopy.c:2973
msgid "warning: failed to set merged notes size"
msgstr ""
-#: objcopy.c:2993
+#: objcopy.c:2999
#, c-format
msgid "can't dump section '%s' - it does not exist"
msgstr ""
-#: objcopy.c:3001
+#: objcopy.c:3007
msgid "can't dump section - it has no contents"
msgstr ""
-#: objcopy.c:3012
+#: objcopy.c:3019
msgid "could not open section dump file"
msgstr "не може да Ñе отвори файл за разтоварване на раздел"
-#: objcopy.c:3020
+#: objcopy.c:3027
#, c-format
msgid "error writing section contents to %s (error: %s)"
msgstr ""
-#: objcopy.c:3030
+#: objcopy.c:3037
msgid "could not retrieve section contents"
msgstr ""
-#: objcopy.c:3044
+#: objcopy.c:3051
#, c-format
msgid "%s: debuglink section already exists"
msgstr ""
-#: objcopy.c:3056
+#: objcopy.c:3063
#, c-format
msgid "cannot create debug link section `%s'"
msgstr ""
-#: objcopy.c:3150
+#: objcopy.c:3157
msgid "Can't fill gap after section"
msgstr ""
-#: objcopy.c:3175
+#: objcopy.c:3182
msgid "can't add padding"
msgstr ""
-#: objcopy.c:3330
+#: objcopy.c:3359
msgid "error: failed to locate merged notes"
msgstr ""
-#: objcopy.c:3339
+#: objcopy.c:3368
msgid "error: failed to merge notes"
msgstr ""
-#: objcopy.c:3348
+#: objcopy.c:3377
msgid "error: failed to copy merged notes into output"
msgstr ""
-#: objcopy.c:3365
+#: objcopy.c:3394
#, c-format
msgid "%s: Could not find any mergeable note sections"
msgstr ""
-#: objcopy.c:3374
+#: objcopy.c:3403
#, c-format
msgid "cannot fill debug link section `%s'"
msgstr ""
-#: objcopy.c:3435
+#: objcopy.c:3464
msgid "error copying private BFD data"
msgstr ""
-#: objcopy.c:3446
+#: objcopy.c:3475
#, c-format
msgid "this target does not support %lu alternative machine codes"
msgstr ""
-#: objcopy.c:3450
+#: objcopy.c:3479
msgid "treating that number as an absolute e_machine value instead"
msgstr ""
-#: objcopy.c:3454
+#: objcopy.c:3483
msgid "ignoring the alternative value"
msgstr ""
-#: objcopy.c:3500
+#: objcopy.c:3529
msgid "sorry: copying thin archives is not currently supported"
msgstr ""
-#: objcopy.c:3507 objcopy.c:3562
+#: objcopy.c:3536 objcopy.c:3591
#, c-format
msgid "cannot create tempdir for archive copying (error: %s)"
msgstr ""
-#: objcopy.c:3544
+#: objcopy.c:3573
#, c-format
msgid "illegal pathname found in archive member: %s"
msgstr ""
-#: objcopy.c:3595
+#: objcopy.c:3625
msgid "Unable to recognise the format of file"
msgstr ""
-#: objcopy.c:3728
+#: objcopy.c:3758
#, c-format
msgid "error: the input file '%s' is empty"
msgstr ""
-#: objcopy.c:3801
+#: objcopy.c:3836
#, c-format
msgid "--add-gnu-debuglink ignored for archive %s"
msgstr ""
-#: objcopy.c:3904
+#: objcopy.c:3945
#, c-format
msgid "Multiple renames of section %s"
msgstr ""
-#: objcopy.c:3950
+#: objcopy.c:3991
msgid "error in private header data"
msgstr ""
-#: objcopy.c:4043
+#: objcopy.c:4084
msgid "failed to create output section"
msgstr ""
-#: objcopy.c:4058
+#: objcopy.c:4099
msgid "failed to set size"
msgstr ""
-#: objcopy.c:4077
+#: objcopy.c:4118
msgid "failed to set vma"
msgstr ""
-#: objcopy.c:4107
+#: objcopy.c:4148
msgid "failed to set alignment"
msgstr ""
-#: objcopy.c:4139
+#: objcopy.c:4180
msgid "failed to copy private data"
msgstr ""
-#: objcopy.c:4296
+#: objcopy.c:4337
msgid "relocation count is negative"
msgstr ""
#. User must pad the section up in order to do this.
-#: objcopy.c:4395
+#: objcopy.c:4436
#, c-format
msgid "cannot reverse bytes: length of section %s must be evenly divisible by %d"
msgstr ""
-#: objcopy.c:4604
+#: objcopy.c:4644
msgid "can't create debugging section"
msgstr ""
-#: objcopy.c:4618
+#: objcopy.c:4658
msgid "can't set debugging section contents"
msgstr ""
-#: objcopy.c:4627
+#: objcopy.c:4667
#, c-format
msgid "don't know how to write debugging information for %s"
msgstr ""
-#: objcopy.c:4812
+#: objcopy.c:4856
msgid "could not create temporary file to hold stripped copy"
msgstr ""
-#: objcopy.c:4884
+#: objcopy.c:4930
#, c-format
msgid "%s: bad version in PE subsystem"
msgstr ""
-#: objcopy.c:4914
+#: objcopy.c:4960
#, c-format
msgid "unknown PE subsystem: %s"
msgstr ""
-#: objcopy.c:4968 objcopy.c:5238 objcopy.c:5318 objcopy.c:5459 objcopy.c:5491
-#: objcopy.c:5554 objcopy.c:5558 objcopy.c:5578
+#: objcopy.c:5044 objcopy.c:5316 objcopy.c:5396 objcopy.c:5537 objcopy.c:5569
+#: objcopy.c:5632 objcopy.c:5636 objcopy.c:5656
#, c-format
msgid "bad format for %s"
msgstr ""
-#: objcopy.c:4997
+#: objcopy.c:5073
#, c-format
msgid "cannot open: %s: %s"
msgstr ""
-#: objcopy.c:5050
+#: objcopy.c:5128
msgid "byte number must be non-negative"
msgstr ""
-#: objcopy.c:5056
+#: objcopy.c:5134
#, c-format
msgid "architecture %s unknown"
msgstr ""
-#: objcopy.c:5064
+#: objcopy.c:5142
msgid "interleave must be positive"
msgstr ""
-#: objcopy.c:5073
+#: objcopy.c:5151
msgid "interleave width must be positive"
msgstr "Ширината за преÑкачане Ñ‚Ñ€Ñбва да е положителна"
-#: objcopy.c:5391
+#: objcopy.c:5469
#, c-format
msgid "unrecognized --compress-debug-sections type `%s'"
msgstr ""
-#: objcopy.c:5412
+#: objcopy.c:5490
#, c-format
msgid "unrecognized --elf-stt-common= option `%s'"
msgstr ""
-#: objcopy.c:5428
+#: objcopy.c:5506
#, c-format
msgid "Warning: truncating gap-fill from 0x%s to 0x%x"
msgstr ""
-#: objcopy.c:5514
+#: objcopy.c:5592
msgid "bad format for --set-section-alignment: argument needed"
msgstr ""
-#: objcopy.c:5518
+#: objcopy.c:5596
msgid "bad format for --set-section-alignment: numeric argument needed"
msgstr ""
#. Number has more than on 1, i.e. wasn't a power of 2.
-#: objcopy.c:5530
+#: objcopy.c:5608
msgid "bad format for --set-section-alignment: alignment is not a power of two"
msgstr ""
-#: objcopy.c:5633
+#: objcopy.c:5715
#, c-format
msgid "unknown long section names option '%s'"
msgstr ""
-#: objcopy.c:5656
+#: objcopy.c:5738
msgid "unable to parse alternative machine code"
msgstr ""
-#: objcopy.c:5705
+#: objcopy.c:5787
msgid "number of bytes to reverse must be positive and even"
msgstr ""
-#: objcopy.c:5708
+#: objcopy.c:5790
#, c-format
msgid "Warning: ignoring previous --reverse-bytes value of %d"
msgstr ""
-#: objcopy.c:5723
+#: objcopy.c:5805
#, c-format
msgid "%s: invalid reserve value for --heap"
msgstr ""
-#: objcopy.c:5729
+#: objcopy.c:5811
#, c-format
msgid "%s: invalid commit value for --heap"
msgstr ""
-#: objcopy.c:5754
+#: objcopy.c:5836
#, c-format
msgid "%s: invalid reserve value for --stack"
msgstr ""
-#: objcopy.c:5760
+#: objcopy.c:5842
#, c-format
msgid "%s: invalid commit value for --stack"
msgstr ""
-#: objcopy.c:5769
+#: objcopy.c:5851
msgid "verilog data width must be at least 1 byte"
msgstr ""
-#: objcopy.c:5786
+#: objcopy.c:5868
msgid "--globalize-symbol(s) is incompatible with -G/--keep-global-symbol(s)"
msgstr ""
-#: objcopy.c:5798
+#: objcopy.c:5880
msgid "interleave start byte must be set with --byte"
msgstr ""
-#: objcopy.c:5801
+#: objcopy.c:5883
msgid "byte number must be less than interleave"
msgstr ""
-#: objcopy.c:5804
+#: objcopy.c:5886
msgid "interleave width must be less than or equal to interleave - byte`"
msgstr ""
-#: objcopy.c:5833
+#: objcopy.c:5909
#, c-format
msgid "unknown input EFI target: %s"
msgstr ""
-#: objcopy.c:5864
+#: objcopy.c:5919
#, c-format
msgid "unknown output EFI target: %s"
msgstr ""
-#: objcopy.c:5877
-#, c-format
-msgid "warning: could not locate '%s'. System error message: %s"
-msgstr ""
-
-#: objcopy.c:5889
+#: objcopy.c:5943
#, c-format
msgid "warning: could not create temporary file whilst copying '%s', (error: %s)"
msgstr ""
-#: objcopy.c:5922 objcopy.c:5936
+#: objcopy.c:5980 objcopy.c:5994
#, c-format
msgid "%s %s%c0x%s never used"
msgstr "%s %s%c0x%s не е използван"
-#: objdump.c:213
+#: objdump.c:225
#, c-format
msgid "Usage: %s <option(s)> <file(s)>\n"
msgstr "Употреба: %s <опции> <файлове>\n"
-#: objdump.c:214
+#: objdump.c:226
#, c-format
msgid " Display information from object <file(s)>.\n"
msgstr " Показване на ÑведениÑта от обект <файлове>.\n"
-#: objdump.c:215
+#: objdump.c:227
#, c-format
msgid " At least one of the following switches must be given:\n"
msgstr " ТрÑбва да Ñе зададе поне един от Ñледните ключове:\n"
-#: objdump.c:216
-#, c-format
-msgid ""
-" -a, --archive-headers Display archive header information\n"
-" -f, --file-headers Display the contents of the overall file header\n"
-" -p, --private-headers Display object format specific file header contents\n"
-" -P, --private=OPT,OPT... Display object format specific contents\n"
-" -h, --[section-]headers Display the contents of the section headers\n"
-" -x, --all-headers Display the contents of all headers\n"
-" -d, --disassemble Display assembler contents of executable sections\n"
-" -D, --disassemble-all Display assembler contents of all sections\n"
-" --disassemble=<sym> Display assembler contents from <sym>\n"
-" -S, --source Intermix source code with disassembly\n"
-" --source-comment[=<txt>] Prefix lines of source code with <txt>\n"
-" -s, --full-contents Display the full contents of all sections requested\n"
-" -g, --debugging Display debug information in object file\n"
-" -e, --debugging-tags Display debug information using ctags style\n"
-" -G, --stabs Display (in raw form) any STABS info in the file\n"
-" -W[lLiaprmfFsoORtUuTgAckK] or\n"
-" --dwarf[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,\n"
-" =frames-interp,=str,=str-offsets,=loc,=Ranges,=pubtypes,\n"
-" =gdb_index,=trace_info,=trace_abbrev,=trace_aranges,\n"
-" =addr,=cu_index,=links,=follow-links]\n"
-" Display DWARF info in the file\n"
-msgstr ""
-" -a, --archive-headers Извеждане за Ñведение за заглавието на архива\n"
-" -f, --file-headers Извеждане Ñъдържанието на общото заглавие на файла\n"
-" -p, --private-headers Извеждане на Ñъдържанието на чаÑтните заглавиÑ\n"
-" -P, --private=OPT,OPT... Извеждане на чаÑтните ÑъдържаниÑ\n"
-" -h, --[section-]headers Извеждане Ñъдържанието на заглавиÑта на разделите\n"
-" -x, --all-headers Извеждане Ñъдържанието на вÑички заглавиÑ\n"
-" -d, --disassemble Извеждане Ñъдържание на изпълнимите раздели на 'assembler'\n"
-" -D, --disassemble-all Извеждане Ñъдържание на вÑички раздели на 'assembler'\n"
-" --disassemble=<име> Извеждане Ñъдържание на раздел <име> на 'assembler'\n"
-" -S, --source СмеÑване на програмен код Ñ Ñ€Ð°Ð·Ð°Ñемблиран\n"
-" --source-comment[=<пред>] С предÑтавка <пред> за редовете от Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼ÐµÐ½Ð½Ð¸Ñ ÐºÐ¾Ð´\n"
-" -s, --full-contents Извеждане на пълното ÑÑŠÐ´ÑŠÑ€Ð¶Ð°Ð½Ð¸Ñ Ð·Ð° вÑички поиÑкани раздели\n"
-" -g, --debugging Извеждане на ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð·Ð° проÑледÑване от Ð¾Ð±ÐµÐºÑ‚Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð»\n"
-" -e, --debugging-tags Извеждане на ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð·Ð° проÑледÑване по ctags начин\n"
-" -G, --stabs Display (in raw form) any STABS info in the file\n"
-" -W[lLiaprmfFsoORtUuTgAckK] или\n"
-" --dwarf[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,\n"
-" =frames-interp,=str,=str-offsets,=loc,=Ranges,=pubtypes,\n"
-" =gdb_index,=trace_info,=trace_abbrev,=trace_aranges,\n"
-" =addr,=cu_index,=links,=follow-links]\n"
-" Извеждане на DWARF ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾Ñ‚ файл\n"
+#: objdump.c:228
+#, c-format
+msgid " -a, --archive-headers Display archive header information\n"
+msgstr ""
+
+#: objdump.c:230
+#, c-format
+msgid " -f, --file-headers Display the contents of the overall file header\n"
+msgstr ""
+
+#: objdump.c:232
+#, c-format
+msgid " -p, --private-headers Display object format specific file header contents\n"
+msgstr ""
+
+#: objdump.c:234
+#, c-format
+msgid " -P, --private=OPT,OPT... Display object format specific contents\n"
+msgstr ""
+
+#: objdump.c:236
+#, c-format
+msgid " -h, --[section-]headers Display the contents of the section headers\n"
+msgstr ""
+
+#: objdump.c:238
+#, c-format
+msgid " -x, --all-headers Display the contents of all headers\n"
+msgstr ""
#: objdump.c:240
#, c-format
-msgid " --ctf=SECTION Display CTF info from SECTION\n"
+msgid " -d, --disassemble Display assembler contents of executable sections\n"
+msgstr ""
+
+#: objdump.c:242
+#, c-format
+msgid " -D, --disassemble-all Display assembler contents of all sections\n"
msgstr ""
#: objdump.c:244
#, c-format
-msgid ""
-" -t, --syms Display the contents of the symbol table(s)\n"
-" -T, --dynamic-syms Display the contents of the dynamic symbol table\n"
-" -r, --reloc Display the relocation entries in the file\n"
-" -R, --dynamic-reloc Display the dynamic relocation entries in the file\n"
-" @<file> Read options from <file>\n"
-" -v, --version Display this program's version number\n"
-" -i, --info List object formats and architectures supported\n"
-" -H, --help Display this information\n"
+msgid " --disassemble=<sym> Display assembler contents from <sym>\n"
+msgstr ""
+
+#: objdump.c:246
+#, c-format
+msgid " -S, --source Intermix source code with disassembly\n"
+msgstr " -S, --source СмеÑване на програмен код Ñ Ñ€Ð°Ð·Ð°Ñемблерано.\n"
+
+#: objdump.c:248
+#, c-format
+msgid " --source-comment[=<txt>] Prefix lines of source code with <txt>\n"
+msgstr ""
+
+#: objdump.c:250
+#, c-format
+msgid " -s, --full-contents Display the full contents of all sections requested\n"
+msgstr ""
+
+#: objdump.c:252
+#, c-format
+msgid " -g, --debugging Display debug information in object file\n"
+msgstr " -g, --debugging Показване на Ñведение за проÑледÑване.\n"
+
+#: objdump.c:254
+#, c-format
+msgid " -e, --debugging-tags Display debug information using ctags style\n"
+msgstr ""
+
+#: objdump.c:256
+#, c-format
+msgid " -G, --stabs Display (in raw form) any STABS info in the file\n"
msgstr ""
#: objdump.c:258
#, c-format
msgid ""
+" -W, --dwarf[a/=abbrev, A/=addr, r/=aranges, c/=cu_index, L/=decodedline,\n"
+" f/=frames, F/=frames-interp, g/=gdb_index, i/=info, o/=loc,\n"
+" m/=macro, p/=pubnames, t/=pubtypes, R/=Ranges, l/=rawline,\n"
+" s/=str, O/=str-offsets, u/=trace_abbrev, T/=trace_aranges,\n"
+" U/=trace_info]\n"
+" Display the contents of DWARF debug sections\n"
+msgstr ""
+
+#: objdump.c:265
+#, c-format
+msgid ""
+" -Wk,--dwarf=links Display the contents of sections that link to\n"
+" separate debuginfo files\n"
+msgstr ""
+
+#: objdump.c:269
+#, c-format
+msgid ""
+" -WK,--dwarf=follow-links\n"
+" Follow links to separate debug info files (default)\n"
+msgstr ""
+
+#: objdump.c:272
+#, c-format
+msgid ""
+" -WN,--dwarf=no-follow-links\n"
+" Do not follow links to separate debug info files\n"
+msgstr ""
+
+#: objdump.c:276
+#, c-format
+msgid ""
+" -WK,--dwarf=follow-links\n"
+" Follow links to separate debug info files\n"
+msgstr ""
+
+#: objdump.c:279
+#, c-format
+msgid ""
+" -WN,--dwarf=no-follow-links\n"
+" Do not follow links to separate debug info files\n"
+" (default)\n"
+msgstr ""
+
+#: objdump.c:284
+#, c-format
+msgid ""
+" -L, --process-links Display the contents of non-debug sections in\n"
+" separate debuginfo files. (Implies -WK)\n"
+msgstr ""
+
+#: objdump.c:288
+#, c-format
+msgid " --ctf[=SECTION] Display CTF info from SECTION, (default `.ctf')\n"
+msgstr ""
+
+#: objdump.c:291
+#, c-format
+msgid " -t, --syms Display the contents of the symbol table(s)\n"
+msgstr " -t, --syms Показване на Ñъдържанието на таблиците Ñ Ð¸Ð¼ÐµÐ½Ð°\n"
+
+#: objdump.c:293
+#, c-format
+msgid " -T, --dynamic-syms Display the contents of the dynamic symbol table\n"
+msgstr ""
+
+#: objdump.c:295
+#, c-format
+msgid " -r, --reloc Display the relocation entries in the file\n"
+msgstr ""
+
+#: objdump.c:297
+#, c-format
+msgid " -R, --dynamic-reloc Display the dynamic relocation entries in the file\n"
+msgstr ""
+
+#: objdump.c:299
+#, c-format
+msgid " @<file> Read options from <file>\n"
+msgstr " @<файл> Прочитане на команди от <файл>\n"
+
+#: objdump.c:301
+#, c-format
+msgid " -v, --version Display this program's version number\n"
+msgstr " -v, --version Показване на верÑиÑта на програмата.\n"
+
+#: objdump.c:303
+#, c-format
+msgid " -i, --info List object formats and architectures supported\n"
+msgstr ""
+
+#: objdump.c:305
+#, c-format
+msgid " -H, --help Display this information\n"
+msgstr " -H, --help Показване на това Ñведение\n"
+
+#: objdump.c:312
+#, c-format
+msgid ""
"\n"
" The following switches are optional:\n"
msgstr ""
"\n"
" Следните ключове Ñа по избор:\n"
-#: objdump.c:259
-#, c-format
-msgid ""
-" -b, --target=BFDNAME Specify the target object format as BFDNAME\n"
-" -m, --architecture=MACHINE Specify the target architecture as MACHINE\n"
-" -j, --section=NAME Only display information for section NAME\n"
-" -M, --disassembler-options=OPT Pass text OPT on to the disassembler\n"
-" -EB --endian=big Assume big endian format when disassembling\n"
-" -EL --endian=little Assume little endian format when disassembling\n"
-" --file-start-context Include context from start of file (with -S)\n"
-" -I, --include=DIR Add DIR to search list for source files\n"
-" -l, --line-numbers Include line numbers and filenames in output\n"
-" -F, --file-offsets Include file offsets when displaying information\n"
-" -C, --demangle[=STYLE] Decode mangled/processed symbol names\n"
-" The STYLE, if specified, can be `auto', `gnu',\n"
-" `lucid', `arm', `hp', `edg', `gnu-v3', `java'\n"
-" or `gnat'\n"
-" --recurse-limit Enable a limit on recursion whilst demangling. [Default]\n"
-" --no-recurse-limit Disable a limit on recursion whilst demangling\n"
-" -w, --wide Format output for more than 80 columns\n"
-" -z, --disassemble-zeroes Do not skip blocks of zeroes when disassembling\n"
-" --start-address=ADDR Only process data whose address is >= ADDR\n"
-" --stop-address=ADDR Only process data whose address is < ADDR\n"
-" --no-addresses Do not print address alongside disassembly\n"
-" --prefix-addresses Print complete address alongside disassembly\n"
-" --[no-]show-raw-insn Display hex alongside symbolic disassembly\n"
-" --insn-width=WIDTH Display WIDTH bytes on a single line for -d\n"
-" --adjust-vma=OFFSET Add OFFSET to all displayed section addresses\n"
-" --special-syms Include special symbols in symbol dumps\n"
-" --inlines Print all inlines for source line (with -l)\n"
-" --prefix=PREFIX Add PREFIX to absolute paths for -S\n"
-" --prefix-strip=LEVEL Strip initial directory names for -S\n"
-msgstr ""
-
-#: objdump.c:289
-#, c-format
-msgid ""
-" --dwarf-depth=N Do not display DIEs at depth N or greater\n"
-" --dwarf-start=N Display DIEs starting with N, at the same depth\n"
-" or deeper\n"
-" --dwarf-check Make additional dwarf internal consistency checks.\n"
-msgstr ""
-" --dwarf-depth=Ч Да не Ñе показва DIEs Ñ Ð´ÑŠÐ»Ð±Ð¾Ñ‡Ð¸Ð½Ð° Ч или по-голÑма\n"
-" --dwarf-start=Ч Показва DIEs започвайки от Ч, ÑÑŠÑ Ñъщата дълбочина\n"
-" или по-дълбоки\n"
-" --dwarf-check Допълнителни вътрешни проверки за dwarf ÑъвмеÑтимоÑÑ‚.\n"
+#: objdump.c:313
+#, c-format
+msgid " -b, --target=BFDNAME Specify the target object format as BFDNAME\n"
+msgstr " -b, --target=BFD–ИМЕ Задава BFD–ИМЕ за формата на Ñ†ÐµÐ»ÐµÐ²Ð¸Ñ Ð¾Ð±ÐµÐºÑ‚\n"
-#: objdump.c:295
+#: objdump.c:315
+#, c-format
+msgid " -m, --architecture=MACHINE Specify the target architecture as MACHINE\n"
+msgstr ""
+
+#: objdump.c:317
+#, c-format
+msgid " -j, --section=NAME Only display information for section NAME\n"
+msgstr ""
+
+#: objdump.c:319
+#, c-format
+msgid " -M, --disassembler-options=OPT Pass text OPT on to the disassembler\n"
+msgstr ""
+
+#: objdump.c:321
+#, c-format
+msgid " -EB --endian=big Assume big endian format when disassembling\n"
+msgstr ""
+
+#: objdump.c:323
+#, c-format
+msgid " -EL --endian=little Assume little endian format when disassembling\n"
+msgstr ""
+
+#: objdump.c:325
+#, c-format
+msgid " --file-start-context Include context from start of file (with -S)\n"
+msgstr ""
+
+#: objdump.c:327
+#, c-format
+msgid " -I, --include=DIR Add DIR to search list for source files\n"
+msgstr ""
+
+#: objdump.c:329
+#, c-format
+msgid " -l, --line-numbers Include line numbers and filenames in output\n"
+msgstr ""
+
+#: objdump.c:331
+#, c-format
+msgid " -F, --file-offsets Include file offsets when displaying information\n"
+msgstr " -F, --file-offsets Включване на отмеÑÐ²Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¸ показване на ÑведениÑ.\n"
+
+#: objdump.c:333
+#, c-format
+msgid " -C, --demangle[=STYLE] Decode mangled/processed symbol names\n"
+msgstr ""
+
+#: objdump.c:335
+msgid " STYLE can be "
+msgstr ""
+
+#: objdump.c:337
+#, c-format
+msgid ""
+" --recurse-limit Enable a limit on recursion whilst demangling\n"
+" (default)\n"
+msgstr ""
+
+#: objdump.c:340
+#, c-format
+msgid " --no-recurse-limit Disable a limit on recursion whilst demangling\n"
+msgstr ""
+
+#: objdump.c:342
+#, c-format
+msgid " -w, --wide Format output for more than 80 columns\n"
+msgstr ""
+
+#: objdump.c:344
+#, c-format
+msgid ""
+" -U[d|l|i|x|e|h] Controls the display of UTF-8 unicode characters\n"
+" --unicode=[default|locale|invalid|hex|escape|highlight]\n"
+msgstr ""
+
+#: objdump.c:347
+#, c-format
+msgid " -z, --disassemble-zeroes Do not skip blocks of zeroes when disassembling\n"
+msgstr ""
+
+#: objdump.c:349
+#, c-format
+msgid " --start-address=ADDR Only process data whose address is >= ADDR\n"
+msgstr ""
+
+#: objdump.c:351
+#, c-format
+msgid " --stop-address=ADDR Only process data whose address is < ADDR\n"
+msgstr ""
+
+#: objdump.c:353
+#, c-format
+msgid " --no-addresses Do not print address alongside disassembly\n"
+msgstr ""
+
+#: objdump.c:355
+#, c-format
+msgid " --prefix-addresses Print complete address alongside disassembly\n"
+msgstr ""
+
+#: objdump.c:357
+#, c-format
+msgid " --[no-]show-raw-insn Display hex alongside symbolic disassembly\n"
+msgstr ""
+
+#: objdump.c:359
+#, c-format
+msgid " --insn-width=WIDTH Display WIDTH bytes on a single line for -d\n"
+msgstr ""
+
+#: objdump.c:361
+#, c-format
+msgid " --adjust-vma=OFFSET Add OFFSET to all displayed section addresses\n"
+msgstr ""
+
+#: objdump.c:363
+#, c-format
+msgid " --special-syms Include special symbols in symbol dumps\n"
+msgstr ""
+
+#: objdump.c:365
+#, c-format
+msgid " --inlines Print all inlines for source line (with -l)\n"
+msgstr ""
+
+#: objdump.c:367
+#, c-format
+msgid " --prefix=PREFIX Add PREFIX to absolute paths for -S\n"
+msgstr ""
+
+#: objdump.c:369
+#, c-format
+msgid " --prefix-strip=LEVEL Strip initial directory names for -S\n"
+msgstr ""
+
+#: objdump.c:371
+#, c-format
+msgid " --dwarf-depth=N Do not display DIEs at depth N or greater\n"
+msgstr ""
+
+#: objdump.c:373
+#, c-format
+msgid " --dwarf-start=N Display DIEs starting at offset N\n"
+msgstr ""
+
+#: objdump.c:375
+#, c-format
+msgid " --dwarf-check Make additional dwarf consistency checks.\n"
+msgstr ""
+
+#: objdump.c:378
+#, c-format
+msgid " --ctf-parent=NAME Use CTF archive member NAME as the CTF parent\n"
+msgstr ""
+
+#: objdump.c:381
+#, c-format
+msgid " --visualize-jumps Visualize jumps by drawing ASCII art lines\n"
+msgstr ""
+
+#: objdump.c:383
#, c-format
-msgid " --ctf-parent=SECTION Use SECTION as the CTF parent\n"
+msgid " --visualize-jumps=color Use colors in the ASCII art\n"
+msgstr ""
+
+#: objdump.c:385
+#, c-format
+msgid ""
+" --visualize-jumps=extended-color\n"
+" Use extended 8-bit color codes\n"
msgstr ""
-#: objdump.c:298
+#: objdump.c:388
#, c-format
msgid ""
-" --visualize-jumps Visualize jumps by drawing ASCII art lines\n"
-" --visualize-jumps=color Use colors in the ASCII art\n"
-" --visualize-jumps=extended-color Use extended 8-bit color codes\n"
" --visualize-jumps=off Disable jump visualization\n"
"\n"
msgstr ""
-#: objdump.c:312
+#: objdump.c:399
#, c-format
msgid ""
"\n"
@@ -5587,71 +6167,71 @@ msgstr ""
"\n"
"ВъзможноÑтите за -P/--private ключ Ñа:\n"
-#: objdump.c:548
+#: objdump.c:759
#, c-format
msgid "section '%s' mentioned in a -j option, but not found in any input file"
msgstr "разделът '%s, зададен от -j опциÑ, не е намерен във входÑщите файлове"
-#: objdump.c:703
+#: objdump.c:914
#, c-format
msgid "Sections:\n"
msgstr "Раздели:\n"
-#: objdump.c:709
+#: objdump.c:920
#, c-format
msgid "Idx %-*s Size %-*s%-*sFile off Algn"
msgstr ""
-#: objdump.c:715
+#: objdump.c:926
#, c-format
msgid " Flags"
msgstr "Флагове"
-#: objdump.c:737
+#: objdump.c:948
#, c-format
msgid "failed to read symbol table from: %s"
msgstr ""
-#: objdump.c:738 objdump.c:4671
+#: objdump.c:949 objdump.c:4907
msgid "error message was"
msgstr ""
-#: objdump.c:752
+#: objdump.c:964
#, c-format
msgid "error: symbol table size (%#lx) is larger than filesize (%#lx)"
msgstr ""
-#: objdump.c:781
+#: objdump.c:994
#, c-format
msgid "%s: not a dynamic object"
msgstr "%s: не е динамичен обект"
-#: objdump.c:1379 objdump.c:1406
+#: objdump.c:1593 objdump.c:1620
#, c-format
msgid " (File Offset: 0x%lx)"
msgstr " (ОтмеÑтване в файл: 0x%lx)"
-#: objdump.c:1649
+#: objdump.c:1865
#, c-format
msgid "source file %s is more recent than object file\n"
msgstr ""
-#: objdump.c:2678
+#: objdump.c:2893
#, c-format
msgid "\t... (skipping %lu zeroes, resuming at file offset: 0x%lx)\n"
msgstr ""
-#: objdump.c:2810
+#: objdump.c:3025
#, c-format
msgid "disassemble_fn returned length %d"
msgstr "disassemble_fn върна дължина %d"
-#: objdump.c:3138 objdump.c:4309
+#: objdump.c:3353 objdump.c:4527
#, c-format
msgid "Reading section %s failed because: %s"
msgstr "Прочитането на раздел %s не уÑÐ¿Ñ Ð¿Ð¾Ñ€Ð°Ð´Ð¸: %s"
-#: objdump.c:3159
+#: objdump.c:3374
#, c-format
msgid ""
"\n"
@@ -5660,17 +6240,17 @@ msgstr ""
"\n"
"РазглобÑване на раздел %s:\n"
-#: objdump.c:3450
+#: objdump.c:3665
#, c-format
msgid "can't use supplied machine %s"
msgstr "не можа де Ñе използва зададената машина %s"
-#: objdump.c:3471
+#: objdump.c:3686
#, c-format
msgid "can't disassemble for architecture %s\n"
msgstr "не можа да Ñе разглоби за архитектура %s\n"
-#: objdump.c:3562
+#: objdump.c:3775
#, c-format
msgid ""
"\n"
@@ -5679,7 +6259,7 @@ msgstr ""
"\n"
"Ðеправилен размер при раздел '%s': %#llx.\n"
-#: objdump.c:3572 objdump.c:3595
+#: objdump.c:3820
#, c-format
msgid ""
"\n"
@@ -5688,12 +6268,12 @@ msgstr ""
"\n"
"Ðе можа да Ñе извлече Ñъдържанието на раздел '%s'.\n"
-#: objdump.c:3796
+#: objdump.c:3999
#, c-format
msgid "File %s does not contain any dwarf debug information\n"
msgstr ""
-#: objdump.c:3833
+#: objdump.c:4036
#, c-format
msgid ""
"No %s section present\n"
@@ -5702,12 +6282,12 @@ msgstr ""
"ЛипÑва раздел %s\n"
"\n"
-#: objdump.c:3840
+#: objdump.c:4043
#, c-format
msgid "reading %s section of %s failed: %s"
msgstr "не уÑÐ¿Ñ Ñ‡ÐµÑ‚ÐµÐ½ÐµÑ‚Ð¾ на раздел %s от %s: %s"
-#: objdump.c:3886
+#: objdump.c:4089
#, c-format
msgid ""
"Contents of %s section:\n"
@@ -5716,17 +6296,17 @@ msgstr ""
"Съдържание на раздел %s:\n"
"\n"
-#: objdump.c:4020
+#: objdump.c:4223
#, c-format
msgid "architecture: %s, "
msgstr "архитектура: %s, "
-#: objdump.c:4023
+#: objdump.c:4226
#, c-format
msgid "flags 0x%08x:\n"
msgstr "флагове 0x%08x:\n"
-#: objdump.c:4036
+#: objdump.c:4239
#, c-format
msgid ""
"\n"
@@ -5735,74 +6315,96 @@ msgstr ""
"\n"
"начален Ð°Ð´Ñ€ÐµÑ 0x"
-#: objdump.c:4096 readelf.c:14228
+#: objdump.c:4289 readelf.c:15478
+#, c-format
+msgid "%s: %s"
+msgstr "%s: %s"
+
+#: objdump.c:4289 readelf.c:15478
+msgid "warning"
+msgstr "предупреждение"
+
+#: objdump.c:4289 readelf.c:15478
+msgid "error"
+msgstr "грешка"
+
+#: objdump.c:4295 readelf.c:15483
+#, c-format
+msgid "CTF error: cannot get CTF errors: `%s'"
+msgstr ""
+
+#: objdump.c:4319 readelf.c:15505
#, c-format
msgid ""
"\n"
"CTF archive member: %s:\n"
msgstr ""
-#: objdump.c:4115 readelf.c:14247
+#: objdump.c:4339
#, c-format
-msgid "Iteration failed: %s, %s\n"
+msgid "Iteration failed: %s, %s"
msgstr ""
-#: objdump.c:4148 objdump.c:4157 objdump.c:4171 readelf.c:14338
-#: readelf.c:14347 readelf.c:14360
+#: objdump.c:4377 objdump.c:4384
#, c-format
-msgid "CTF open failure: %s\n"
-msgstr "Пропадна отварÑнето на CTF: %s\n"
+msgid "CTF open failure: %s"
+msgstr "Пропадна отварÑнето на CTF: %s"
-#: objdump.c:4175
+#: objdump.c:4388
#, c-format
msgid "Contents of CTF section %s:\n"
msgstr "Съдържание на CTF раздел %s:\n"
-#: objdump.c:4195
+#: objdump.c:4395
+#, c-format
+msgid "CTF archive member open failure: %s"
+msgstr "Пропадна отварÑнето член на CTF: %s"
+
+#: objdump.c:4413
#, c-format
msgid "warning: private headers incomplete: %s"
msgstr ""
-#: objdump.c:4213
+#: objdump.c:4431
msgid "option -P/--private not supported by this file"
msgstr "опциÑта -P/--private не Ñе поддържа за този файл"
-#: objdump.c:4237
+#: objdump.c:4455
#, c-format
msgid "target specific dump '%s' not supported"
msgstr ""
-#: objdump.c:4301
+#: objdump.c:4519
#, c-format
msgid "Contents of section %s:"
msgstr "Съдържание на раздел %s:"
-#: objdump.c:4303
+#: objdump.c:4521
#, c-format
msgid " (Starting at file offset: 0x%lx)"
msgstr " (Започва Ñе Ñ Ð¾Ñ‚Ð¼ÐµÑтване: 0x%lx)"
-#: objdump.c:4413
+#: objdump.c:4631
#, c-format
msgid "no symbols\n"
msgstr "нÑма имена\n"
-#: objdump.c:4420
+#: objdump.c:4638
#, c-format
msgid "no information for symbol number %ld\n"
msgstr "без Ñведение за име Ñ Ð½Ð¾Ð¼ÐµÑ€ %ld\n"
-#: objdump.c:4423
+#: objdump.c:4641
#, c-format
msgid "could not determine the type of symbol number %ld\n"
msgstr "не може да Ñе определи типа на име Ñ Ð½Ð¾Ð¼ÐµÑ€ %ld\n"
-#: objdump.c:4669
+#: objdump.c:4905
#, c-format
msgid "failed to read relocs in: %s"
msgstr ""
-#: objdump.c:4826
+#: objdump.c:5064
#, c-format
msgid ""
"\n"
@@ -5811,52 +6413,52 @@ msgstr ""
"\n"
"%s: формат на файл %s\n"
-#: objdump.c:4925
+#: objdump.c:5172
#, c-format
msgid "%s: printing debugging information failed"
msgstr "%s: пропадна отпечатването на ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð·Ð° проÑледÑване"
-#: objdump.c:5021
+#: objdump.c:5268
#, c-format
msgid "In archive %s:\n"
msgstr "В архив %s:\n"
#. Prevent corrupted files from spinning us into an
#. infinite loop. 100 is an arbitrary heuristic.
-#: objdump.c:5026
+#: objdump.c:5273
msgid "Archive nesting is too deep"
msgstr ""
-#: objdump.c:5030
+#: objdump.c:5277
#, c-format
msgid "In nested archive %s:\n"
msgstr "Във вграден архив %s:\n"
-#: objdump.c:5195
+#: objdump.c:5440
msgid "error: the start address should be before the end address"
msgstr "грешка: началниÑÑ‚ Ð°Ð´Ñ€ÐµÑ Ð½Ðµ може да е преди крайниÑ"
-#: objdump.c:5200
+#: objdump.c:5445
msgid "error: the stop address should be after the start address"
msgstr "грешка: адреÑÑŠÑ‚ за Ñпиране Ñ‚Ñ€Ñбва да е Ñлед началниÑ"
-#: objdump.c:5212
+#: objdump.c:5457
msgid "error: prefix strip must be non-negative"
msgstr ""
-#: objdump.c:5217
+#: objdump.c:5462
msgid "error: instruction width must be positive"
msgstr ""
-#: objdump.c:5238
+#: objdump.c:5483
msgid "unrecognized argument to --visualize-option"
msgstr "неразпознат аргумент за --visualize-option"
-#: objdump.c:5248
+#: objdump.c:5493
msgid "unrecognized -E option"
msgstr "неразпозната -E опциÑ"
-#: objdump.c:5259
+#: objdump.c:5504
#, c-format
msgid "unrecognized --endian type `%s'"
msgstr "неразпознат тип за подредба (--endian) '%s'"
@@ -5869,6 +6471,26 @@ msgid ""
" avr-prop Display contents of .avr.prop section\n"
msgstr ""
+#: od-elf32_avr.c:200
+#, c-format
+msgid "Warning: textsize (%#lx) + datasize (%#lx) overflows size type\n"
+msgstr ""
+
+#: od-elf32_avr.c:210
+#, c-format
+msgid "Warning: textsize (%#lx) + datasize (%#lx) + bootloadersize (%#lx) overflows size type\n"
+msgstr ""
+
+#: od-elf32_avr.c:221
+#, c-format
+msgid "Warning: datatsize (%#lx) + bssssize (%#lx) overflows size type\n"
+msgstr ""
+
+#: od-elf32_avr.c:232
+#, c-format
+msgid "Warning: datasize (%#lx) + bsssize (%#lx) + noinitsize (%#lx) overflows size type\n"
+msgstr ""
+
#: od-macho.c:74
#, c-format
msgid ""
@@ -6131,114 +6753,114 @@ msgid ""
" ldinfo Display loader info in core files\n"
msgstr ""
-#: od-xcoff.c:419
+#: od-xcoff.c:418
#, c-format
msgid " nbr sections: %d\n"
msgstr ""
-#: od-xcoff.c:420
+#: od-xcoff.c:419
#, c-format
msgid " time and date: 0x%08x - "
msgstr ""
-#: od-xcoff.c:422 readelf.c:18582
+#: od-xcoff.c:421 readelf.c:20126
#, c-format
msgid "not set\n"
msgstr "не е уÑтановен\n"
-#: od-xcoff.c:429
+#: od-xcoff.c:428
#, c-format
msgid " symbols off: 0x%08x\n"
msgstr ""
-#: od-xcoff.c:430
+#: od-xcoff.c:429
#, c-format
msgid " nbr symbols: %d\n"
msgstr " бр. имена : %d\n"
-#: od-xcoff.c:431
+#: od-xcoff.c:430
#, c-format
msgid " opt hdr sz: %d\n"
msgstr ""
-#: od-xcoff.c:432
+#: od-xcoff.c:431
#, c-format
msgid " flags: 0x%04x "
msgstr ""
-#: od-xcoff.c:446
+#: od-xcoff.c:445
#, c-format
msgid "Auxiliary header:\n"
msgstr ""
-#: od-xcoff.c:449
+#: od-xcoff.c:448
#, c-format
msgid " No aux header\n"
msgstr ""
-#: od-xcoff.c:454
+#: od-xcoff.c:453
#, c-format
msgid "warning: optional header size too large (> %d)\n"
msgstr ""
-#: od-xcoff.c:460
+#: od-xcoff.c:459
msgid "cannot read auxhdr"
msgstr ""
-#: od-xcoff.c:525
+#: od-xcoff.c:524
#, c-format
msgid "Section headers (at %u+%u=0x%08x to 0x%08x):\n"
msgstr ""
-#: od-xcoff.c:530
+#: od-xcoff.c:529
#, c-format
msgid " No section header\n"
msgstr ""
-#: od-xcoff.c:535 od-xcoff.c:547 od-xcoff.c:602
+#: od-xcoff.c:534 od-xcoff.c:546 od-xcoff.c:601
msgid "cannot read section header"
msgstr "не можа да Ñе прочете заглавието на раздела"
-#: od-xcoff.c:561
+#: od-xcoff.c:560
#, c-format
msgid " Flags: %08x "
msgstr " Флагове: %08x "
-#: od-xcoff.c:569
+#: od-xcoff.c:568
#, c-format
msgid "overflow - nreloc: %u, nlnno: %u\n"
msgstr ""
-#: od-xcoff.c:590 od-xcoff.c:925 od-xcoff.c:981
+#: od-xcoff.c:589 od-xcoff.c:924 od-xcoff.c:980
msgid "cannot read section headers"
msgstr "не може да Ñе прочетат заглавиÑта на чаÑтта"
-#: od-xcoff.c:649
+#: od-xcoff.c:648
msgid "cannot read strings table length"
msgstr "не можа да Ñе прочете дължината на таблицата Ñ Ð½Ð¸Ð·Ð¾Ð²Ðµ"
-#: od-xcoff.c:665
+#: od-xcoff.c:664
msgid "cannot read strings table"
msgstr ""
-#: od-xcoff.c:673
+#: od-xcoff.c:672
msgid "cannot read symbol table"
msgstr ""
-#: od-xcoff.c:688
+#: od-xcoff.c:687
msgid "cannot read symbol entry"
msgstr ""
-#: od-xcoff.c:723
+#: od-xcoff.c:722
msgid "cannot read symbol aux entry"
msgstr ""
-#: od-xcoff.c:745
+#: od-xcoff.c:744
#, c-format
msgid "Symbols table (strtable at 0x%08x)"
msgstr ""
-#: od-xcoff.c:750
+#: od-xcoff.c:749
#, c-format
msgid ""
":\n"
@@ -6247,307 +6869,307 @@ msgstr ""
":\n"
" нÑма имена\n"
-#: od-xcoff.c:756
+#: od-xcoff.c:755
#, c-format
msgid " (no strings):\n"
msgstr " (нÑма низове):\n"
-#: od-xcoff.c:758
+#: od-xcoff.c:757
#, c-format
msgid " (strings size: %08x):\n"
msgstr ""
#. Translators: 'sc' is for storage class, 'off' for offset.
-#: od-xcoff.c:772
+#: od-xcoff.c:771
#, c-format
msgid " # sc value section type aux name/off\n"
msgstr ""
#. Section length, number of relocs and line number.
-#: od-xcoff.c:824
+#: od-xcoff.c:823
#, c-format
msgid " scnlen: %08x nreloc: %-6u nlinno: %-6u\n"
msgstr ""
#. Section length and number of relocs.
-#: od-xcoff.c:831
+#: od-xcoff.c:830
#, c-format
msgid " scnlen: %08x nreloc: %-6u\n"
msgstr ""
-#: od-xcoff.c:894
+#: od-xcoff.c:893
#, c-format
msgid "offset: %08x"
msgstr ""
-#: od-xcoff.c:937
+#: od-xcoff.c:936
#, c-format
msgid "Relocations for %s (%u)\n"
msgstr "ПремеÑÑ‚Ð²Ð°Ð½Ð¸Ñ Ð·Ð° %s (%u)\n"
-#: od-xcoff.c:940
+#: od-xcoff.c:939
msgid "cannot read relocations"
msgstr "премеÑтваниÑта не Ñе четат"
-#: od-xcoff.c:953
+#: od-xcoff.c:952
msgid "cannot read relocation entry"
msgstr ""
-#: od-xcoff.c:993
+#: od-xcoff.c:992
#, c-format
msgid "Line numbers for %s (%u)\n"
msgstr ""
-#: od-xcoff.c:996
+#: od-xcoff.c:995
msgid "cannot read line numbers"
msgstr ""
#. Line number, symbol index and physical address.
-#: od-xcoff.c:1000
+#: od-xcoff.c:999
#, c-format
msgid "lineno symndx/paddr\n"
msgstr ""
-#: od-xcoff.c:1008
+#: od-xcoff.c:1007
msgid "cannot read line number entry"
msgstr ""
-#: od-xcoff.c:1051
+#: od-xcoff.c:1050
#, c-format
msgid "no .loader section in file\n"
msgstr "във файла липÑва раздел .loader\n"
-#: od-xcoff.c:1057
+#: od-xcoff.c:1056
#, c-format
msgid "section .loader is too short\n"
msgstr "твърде ÐºÑŠÑ Ñ€Ð°Ð·Ð´ÐµÐ» .loader\n"
-#: od-xcoff.c:1064
+#: od-xcoff.c:1063
#, c-format
msgid "Loader header:\n"
msgstr ""
-#: od-xcoff.c:1066
+#: od-xcoff.c:1065
#, c-format
msgid " version: %u\n"
msgstr " верÑиÑ: %u\n"
-#: od-xcoff.c:1069
+#: od-xcoff.c:1068
#, c-format
msgid " Unhandled version\n"
msgstr " Ðеподдържана верÑиÑ\n"
-#: od-xcoff.c:1074
+#: od-xcoff.c:1073
#, c-format
msgid " nbr symbols: %u\n"
msgstr ""
-#: od-xcoff.c:1076
+#: od-xcoff.c:1075
#, c-format
msgid " nbr relocs: %u\n"
msgstr ""
#. Import string table length.
-#: od-xcoff.c:1078
+#: od-xcoff.c:1077
#, c-format
msgid " import strtab len: %u\n"
msgstr ""
-#: od-xcoff.c:1081
+#: od-xcoff.c:1080
#, c-format
msgid " nbr import files: %u\n"
msgstr ""
-#: od-xcoff.c:1083
+#: od-xcoff.c:1082
#, c-format
msgid " import file off: %u\n"
msgstr ""
-#: od-xcoff.c:1085
+#: od-xcoff.c:1084
#, c-format
msgid " string table len: %u\n"
msgstr ""
-#: od-xcoff.c:1087
+#: od-xcoff.c:1086
#, c-format
msgid " string table off: %u\n"
msgstr ""
-#: od-xcoff.c:1090
+#: od-xcoff.c:1089
#, c-format
msgid "Dynamic symbols:\n"
msgstr ""
-#: od-xcoff.c:1097
+#: od-xcoff.c:1096
#, c-format
msgid " %4u %08x %3u "
msgstr ""
-#: od-xcoff.c:1110
+#: od-xcoff.c:1109
#, c-format
msgid " %3u %3u "
msgstr ""
-#: od-xcoff.c:1119
+#: od-xcoff.c:1118
#, c-format
msgid "(bad offset: %u)"
msgstr ""
-#: od-xcoff.c:1126
+#: od-xcoff.c:1125
#, c-format
msgid "Dynamic relocs:\n"
msgstr ""
-#: od-xcoff.c:1166
+#: od-xcoff.c:1165
#, c-format
msgid "Import files:\n"
msgstr ""
-#: od-xcoff.c:1198
+#: od-xcoff.c:1197
#, c-format
msgid "no .except section in file\n"
msgstr ""
-#: od-xcoff.c:1206
+#: od-xcoff.c:1205
#, c-format
msgid "Exception table:\n"
msgstr ""
-#: od-xcoff.c:1241
+#: od-xcoff.c:1240
#, c-format
msgid "no .typchk section in file\n"
msgstr ""
-#: od-xcoff.c:1248
+#: od-xcoff.c:1247
#, c-format
msgid "Type-check section:\n"
msgstr ""
-#: od-xcoff.c:1295
+#: od-xcoff.c:1294
#, c-format
msgid " address beyond section size\n"
msgstr ""
-#: od-xcoff.c:1305
+#: od-xcoff.c:1304
#, c-format
msgid " tags at %08x\n"
msgstr ""
-#: od-xcoff.c:1383
+#: od-xcoff.c:1382
#, c-format
msgid " number of CTL anchors: %u\n"
msgstr ""
-#: od-xcoff.c:1402
+#: od-xcoff.c:1401
#, c-format
msgid " Name (len: %u): "
msgstr ""
-#: od-xcoff.c:1405
+#: od-xcoff.c:1404
#, c-format
msgid "[truncated]\n"
msgstr ""
-#: od-xcoff.c:1424
+#: od-xcoff.c:1423
#, c-format
msgid " (end of tags at %08x)\n"
msgstr ""
-#: od-xcoff.c:1427
+#: od-xcoff.c:1426
#, c-format
msgid " no tags found\n"
msgstr ""
-#: od-xcoff.c:1431
+#: od-xcoff.c:1430
#, c-format
msgid " Truncated .text section\n"
msgstr ""
-#: od-xcoff.c:1516
+#: od-xcoff.c:1515
#, c-format
msgid "TOC:\n"
msgstr ""
-#: od-xcoff.c:1559
+#: od-xcoff.c:1558
#, c-format
msgid "Nbr entries: %-8u Size: %08x (%u)\n"
msgstr ""
-#: od-xcoff.c:1643
+#: od-xcoff.c:1642
msgid "cannot read header"
msgstr ""
-#: od-xcoff.c:1651
+#: od-xcoff.c:1650
#, c-format
msgid "File header:\n"
msgstr ""
-#: od-xcoff.c:1652
+#: od-xcoff.c:1651
#, c-format
msgid " magic: 0x%04x (0%04o) "
msgstr ""
-#: od-xcoff.c:1656
+#: od-xcoff.c:1655
#, c-format
msgid "(WRMAGIC: writable text segments)"
msgstr ""
-#: od-xcoff.c:1659
+#: od-xcoff.c:1658
#, c-format
msgid "(ROMAGIC: readonly sharablee text segments)"
msgstr ""
-#: od-xcoff.c:1662
+#: od-xcoff.c:1661
#, c-format
msgid "(TOCMAGIC: readonly text segments and TOC)"
msgstr ""
-#: od-xcoff.c:1665
+#: od-xcoff.c:1664
#, c-format
msgid "unknown magic"
msgstr ""
-#: od-xcoff.c:1673 od-xcoff.c:1815
+#: od-xcoff.c:1672 od-xcoff.c:1814
#, c-format
msgid " Unhandled magic\n"
msgstr ""
-#: od-xcoff.c:1739
+#: od-xcoff.c:1738
msgid "cannot read loader info table"
msgstr ""
-#: od-xcoff.c:1771
+#: od-xcoff.c:1770
#, c-format
msgid ""
"\n"
"ldinfo dump not supported in 32 bits environments\n"
msgstr ""
-#: od-xcoff.c:1789
+#: od-xcoff.c:1788
msgid "cannot core read header"
msgstr ""
-#: od-xcoff.c:1796
+#: od-xcoff.c:1795
#, c-format
msgid "Core header:\n"
msgstr ""
-#: od-xcoff.c:1797
+#: od-xcoff.c:1796
#, c-format
msgid " version: 0x%08x "
msgstr " верÑиÑ: 0x%08x "
-#: od-xcoff.c:1801
+#: od-xcoff.c:1800
#, c-format
msgid "(dumpx format - aix4.3 / 32 bits)"
msgstr ""
-#: od-xcoff.c:1804
+#: od-xcoff.c:1803
#, c-format
msgid "(dumpxx format - aix5.0 / 64 bits)"
msgstr ""
-#: od-xcoff.c:1807
+#: od-xcoff.c:1806
#, c-format
msgid "unknown format"
msgstr "неизвеÑтен формат"
@@ -6586,409 +7208,593 @@ msgstr ""
msgid "%ld: unexpected .ef\n"
msgstr ""
-#: rddbg.c:80
+#: rddbg.c:81
#, c-format
msgid "%s: no recognized debugging information"
msgstr ""
-#: rddbg.c:196
+#: rddbg.c:199
#, c-format
msgid "%s: %s: stab entry %ld is corrupt, strx = 0x%x, type = %d\n"
msgstr ""
-#: rddbg.c:220
+#: rddbg.c:223
#, c-format
msgid "%s: %s: stab entry %ld is corrupt\n"
msgstr ""
-#: rddbg.c:389
+#: rddbg.c:392
#, c-format
msgid "Last stabs entries before error:\n"
msgstr ""
-#: readelf.c:335
+#: readelf.c:385
msgid "<none>"
msgstr "<нищо>"
-#: readelf.c:336
+#: readelf.c:387
msgid "<no-strings>"
msgstr "<без низове>"
-#: readelf.c:422
+#: readelf.c:482
#, c-format
msgid "Size truncation prevents reading %s elements of size %s for %s\n"
msgstr ""
-#: readelf.c:432
+#: readelf.c:492
#, c-format
msgid "Size overflow prevents reading %s elements of size %s for %s\n"
msgstr ""
-#: readelf.c:445
+#: readelf.c:505
#, c-format
msgid "Reading %s bytes extends past end of file for %s\n"
msgstr ""
-#: readelf.c:454
+#: readelf.c:514
#, c-format
msgid "Unable to seek to 0x%lx for %s\n"
msgstr "Ðе може да Ñе премеÑти до 0x%lx за %s\n"
-#: readelf.c:468
+#: readelf.c:528
#, c-format
msgid "Out of memory allocating %s bytes for %s\n"
msgstr "ÐедоÑтиг на памет при заделÑне на %s байта за %s\n"
-#: readelf.c:479
+#: readelf.c:539
#, c-format
msgid "Unable to read in %s bytes of %s\n"
msgstr "Ðе можа да Ñе прочетат %s байта от %s\n"
-#: readelf.c:928
+#: readelf.c:1151
msgid "Don't know about relocations on this machine architecture\n"
msgstr ""
-#: readelf.c:955 readelf.c:1060
+#: readelf.c:1178 readelf.c:1283
msgid "32-bit relocation data"
msgstr "32-битови премеÑтваеми данни"
-#: readelf.c:967 readelf.c:997 readelf.c:1071 readelf.c:1100
+#: readelf.c:1190 readelf.c:1220 readelf.c:1294 readelf.c:1323 readelf.c:1402
msgid "out of memory parsing relocs\n"
msgstr "недоÑтиг на памет при анализ на премеÑтваниÑта\n"
-#: readelf.c:985 readelf.c:1089
+#: readelf.c:1208 readelf.c:1312
msgid "64-bit relocation data"
msgstr "64-битови премеÑтваеми данни"
-#: readelf.c:1219
+#: readelf.c:1376
+msgid "RELR relocation data"
+msgstr "RELR премеÑтваеми данни"
+
+#: readelf.c:1516
+#, c-format
+msgid " %lu offset\n"
+msgid_plural " %lu offsets\n"
+msgstr[0] " %lu отмеÑтване\n"
+msgstr[1] " %lu отмеÑтваниÑ\n"
+
+#: readelf.c:1528
#, c-format
msgid " Offset Info Type Sym. Value Symbol's Name + Addend\n"
msgstr ""
-#: readelf.c:1221
+#: readelf.c:1530
#, c-format
msgid " Offset Info Type Sym.Value Sym. Name + Addend\n"
msgstr ""
-#: readelf.c:1226
+#: readelf.c:1535
#, c-format
msgid " Offset Info Type Sym. Value Symbol's Name\n"
msgstr ""
-#: readelf.c:1228
+#: readelf.c:1537
#, c-format
msgid " Offset Info Type Sym.Value Sym. Name\n"
msgstr ""
-#: readelf.c:1236
+#: readelf.c:1545
#, c-format
msgid " Offset Info Type Symbol's Value Symbol's Name + Addend\n"
msgstr ""
-#: readelf.c:1238
+#: readelf.c:1547
#, c-format
msgid " Offset Info Type Sym. Value Sym. Name + Addend\n"
msgstr ""
-#: readelf.c:1243
+#: readelf.c:1552
#, c-format
msgid " Offset Info Type Symbol's Value Symbol's Name\n"
msgstr ""
-#: readelf.c:1245
+#: readelf.c:1554
#, c-format
msgid " Offset Info Type Sym. Value Sym. Name\n"
msgstr ""
-#: readelf.c:1638 readelf.c:1830 readelf.c:1838
+#: readelf.c:1930 readelf.c:2125 readelf.c:2133
#, c-format
msgid "unrecognized: %-7lx"
msgstr "неразпознат: %-7lx"
-#: readelf.c:1664
+#: readelf.c:1956
#, c-format
msgid "<unknown addend: %lx>"
msgstr ""
-#: readelf.c:1673
+#: readelf.c:1965
#, c-format
msgid " bad symbol index: %08lx in reloc\n"
msgstr ""
-#: readelf.c:1775
+#: readelf.c:2070
#, c-format
msgid "<string table index: %3ld>"
msgstr ""
-#: readelf.c:1778
+#: readelf.c:2073
#, c-format
msgid "<corrupt string table index: %3ld>\n"
msgstr "<повреден азбучник на таблица Ñ Ð½Ð¸Ð·Ð¾Ð²Ðµ: %3ld>\n"
-#: readelf.c:2282
+#: readelf.c:2595
#, c-format
msgid "Processor Specific: %lx"
msgstr "ОÑобен за процеÑор: %lx"
-#: readelf.c:2309
+#: readelf.c:2622
#, c-format
msgid "Operating System specific: %lx"
msgstr "ОÑобеноÑÑ‚ за операционната ÑиÑтема: %lx"
-#: readelf.c:2313 readelf.c:4112
+#: readelf.c:2626 readelf.c:4563
#, c-format
msgid "<unknown>: %lx"
msgstr "<непознат>: %lx"
-#: readelf.c:2326
+#: readelf.c:2726
msgid "NONE (None)"
msgstr "NONE (Ðищо)"
-#: readelf.c:2327
+#: readelf.c:2727
msgid "REL (Relocatable file)"
msgstr ""
-#: readelf.c:2328
+#: readelf.c:2728
msgid "EXEC (Executable file)"
msgstr ""
-#: readelf.c:2329
+#: readelf.c:2731
+msgid "DYN (Position-Independent Executable file)"
+msgstr ""
+
+#: readelf.c:2733
msgid "DYN (Shared object file)"
msgstr ""
-#: readelf.c:2330
+#: readelf.c:2734
msgid "CORE (Core file)"
msgstr ""
-#: readelf.c:2334
+#: readelf.c:2738
#, c-format
msgid "Processor Specific: (%x)"
msgstr ""
-#: readelf.c:2336
+#: readelf.c:2740
#, c-format
msgid "OS Specific: (%x)"
msgstr ""
-#: readelf.c:2338
+#: readelf.c:2742
#, c-format
msgid "<unknown>: %x"
msgstr "<неизвеÑтен>: %x"
#. Please keep this switch table sorted by increasing EM_ value.
#. 0
-#: readelf.c:2352 readelf.c:16609 readelf.c:16620
+#: readelf.c:2756 readelf.c:18010 readelf.c:18021
msgid "None"
msgstr "Ðищо"
-#: readelf.c:2584
+#: readelf.c:3004
#, c-format
msgid "<unknown>: 0x%x"
msgstr "<неизвеÑтен>: 0x%x"
-#: readelf.c:2870
+#: readelf.c:3290
msgid ", <unknown>"
msgstr ", <неизвеÑтен>"
-#: readelf.c:3239 readelf.c:9949
+#: readelf.c:3659 readelf.c:10755
msgid "unknown"
msgstr "неизвеÑтен"
-#: readelf.c:3240
+#: readelf.c:3660
msgid "unknown mac"
msgstr ""
-#: readelf.c:3308
+#: readelf.c:3728
msgid ", <unknown MeP cpu type>"
msgstr ""
-#: readelf.c:3318
+#: readelf.c:3738
msgid "<unknown MeP copro type>"
msgstr "("
-#: readelf.c:3329
+#: readelf.c:3749
#, c-format
msgid ", unknown flags bits: %#x"
msgstr ""
-#: readelf.c:3338
+#: readelf.c:3758
msgid ", relocatable"
msgstr ", премеÑтваем"
-#: readelf.c:3341
+#: readelf.c:3761
msgid ", relocatable-lib"
msgstr ", премеÑтваема-библ"
-#: readelf.c:3423
+#: readelf.c:3843
msgid ", unknown v850 architecture variant"
msgstr ", неизвеÑтна верÑÐ¸Ñ Ð½Ð° v850 архитектура"
-#: readelf.c:3491
+#: readelf.c:3911
msgid ", unknown CPU"
msgstr ", неизвеÑтен процеÑор"
-#: readelf.c:3506
+#: readelf.c:3926
msgid ", unknown ABI"
msgstr ", неизвеÑтно двоично програмно опиÑание (ABI)"
-#: readelf.c:3531 readelf.c:3602
+#: readelf.c:3951 readelf.c:4022
msgid ", unknown ISA"
msgstr ", неизвеÑтна архитектура за инÑтрукции (ISA)"
-#: readelf.c:3712
+#: readelf.c:4132
#, c-format
msgid "Unrecognised IA64 VMS Command Code: %x\n"
msgstr ""
-#: readelf.c:3778
+#: readelf.c:4198
msgid ": architecture variant: "
msgstr ": разновидноÑÑ‚ на архитектура: "
-#: readelf.c:3797
+#: readelf.c:4217
msgid ": unknown"
msgstr ": неизвеÑтен"
-#: readelf.c:3801
+#: readelf.c:4221
msgid ": unknown extra flag bits also present"
msgstr ": приÑÑŠÑтва неизвеÑтен бит за допълнителен флаг"
-#: readelf.c:3815
+#: readelf.c:4235
msgid ", unknown"
msgstr ", неизвеÑтен"
-#: readelf.c:3867
+#: readelf.c:4301
msgid "Standalone App"
msgstr "СамоÑтоÑтелно приложение"
-#: readelf.c:3876
+#: readelf.c:4310
msgid "Bare-metal C6000"
msgstr ""
-#: readelf.c:3886 readelf.c:4897 readelf.c:4913 readelf.c:18014
-#: readelf.c:18114 readelf.c:18145 readelf.c:18200 readelf.c:18227
+#: readelf.c:4320 readelf.c:5535 readelf.c:5551 readelf.c:19439
+#: readelf.c:19539 readelf.c:19570 readelf.c:19607 readelf.c:19668
+#: readelf.c:19695 readelf.c:19717
#, c-format
msgid "<unknown: %x>"
msgstr "<неизвеÑтен: %x>"
#. This message is probably going to be displayed in a 15
#. character wide field, so put the hex value first.
-#: readelf.c:4468
+#: readelf.c:4933
#, c-format
msgid "%08x: <unknown>"
msgstr "%08x: <неизвеÑтен>"
-#: readelf.c:4541
+#: readelf.c:5021
#, c-format
msgid "Usage: readelf <option(s)> elf-file(s)\n"
msgstr "Употреба: readelf <опции> elf-файлове\n"
-#: readelf.c:4542
+#: readelf.c:5022
#, c-format
msgid " Display information about the contents of ELF format files\n"
msgstr ""
-#: readelf.c:4543
-#, c-format
-msgid ""
-" Options are:\n"
-" -a --all Equivalent to: -h -l -S -s -r -d -V -A -I\n"
-" -h --file-header Display the ELF file header\n"
-" -l --program-headers Display the program headers\n"
-" --segments An alias for --program-headers\n"
-" -S --section-headers Display the sections' header\n"
-" --sections An alias for --section-headers\n"
-" -g --section-groups Display the section groups\n"
-" -t --section-details Display the section details\n"
-" -e --headers Equivalent to: -h -l -S\n"
-" -s --syms Display the symbol table\n"
-" --symbols An alias for --syms\n"
-" --dyn-syms Display the dynamic symbol table\n"
-" -n --notes Display the core notes (if present)\n"
-" -r --relocs Display the relocations (if present)\n"
-" -u --unwind Display the unwind info (if present)\n"
-" -d --dynamic Display the dynamic section (if present)\n"
-" -V --version-info Display the version sections (if present)\n"
-" -A --arch-specific Display architecture specific information (if any)\n"
-" -c --archive-index Display the symbol/file index in an archive\n"
-" -D --use-dynamic Use the dynamic section info when displaying symbols\n"
-" -L --lint|--enable-checks Display warning messages for possible problems\n"
+#: readelf.c:5023
+#, c-format
+msgid " Options are:\n"
+msgstr " ВъзможноÑтите Ñа:\n"
+
+#: readelf.c:5024
+#, c-format
+msgid " -a --all Equivalent to: -h -l -S -s -r -d -V -A -I\n"
+msgstr ""
+
+#: readelf.c:5026
+#, c-format
+msgid " -h --file-header Display the ELF file header\n"
+msgstr ""
+
+#: readelf.c:5028
+#, c-format
+msgid " -l --program-headers Display the program headers\n"
+msgstr " -l --program-headers Показване на заглавиÑта на програмата.\n"
+
+#: readelf.c:5030
+#, c-format
+msgid " --segments An alias for --program-headers\n"
+msgstr ""
+
+#: readelf.c:5032
+#, c-format
+msgid " -S --section-headers Display the sections' header\n"
+msgstr ""
+
+#: readelf.c:5034
+#, c-format
+msgid " --sections An alias for --section-headers\n"
+msgstr ""
+
+#: readelf.c:5036
+#, c-format
+msgid " -g --section-groups Display the section groups\n"
+msgstr ""
+
+#: readelf.c:5038
+#, c-format
+msgid " -t --section-details Display the section details\n"
+msgstr ""
+
+#: readelf.c:5040
+#, c-format
+msgid " -e --headers Equivalent to: -h -l -S\n"
+msgstr ""
+
+#: readelf.c:5042
+#, c-format
+msgid " -s --syms Display the symbol table\n"
+msgstr " -s --syms Показване на таблицата Ñ Ð¸Ð¼ÐµÐ½Ð°\n"
+
+#: readelf.c:5044
+#, c-format
+msgid " --symbols An alias for --syms\n"
+msgstr ""
+
+#: readelf.c:5046
+#, c-format
+msgid " --dyn-syms Display the dynamic symbol table\n"
+msgstr " --dyn-syms Показване на таблица за имена\n"
+
+#: readelf.c:5048
+#, c-format
+msgid " --lto-syms Display LTO symbol tables\n"
+msgstr " --lto-syms Показване на таблиците Ñ LTO-имена\n"
+
+#: readelf.c:5050
+#, c-format
+msgid ""
+" --sym-base=[0|8|10|16] \n"
+" Force base for symbol sizes. The options are \n"
+" mixed (the default), octal, decimal, hexadecimal.\n"
+msgstr ""
+
+#: readelf.c:5054
+#, c-format
+msgid " -C --demangle[=STYLE] Decode mangled/processed symbol names\n"
+msgstr ""
+
+#: readelf.c:5058
+#, c-format
+msgid " --no-demangle Do not demangle low-level symbol names. (default)\n"
+msgstr ""
+
+#: readelf.c:5060
+#, c-format
+msgid " --recurse-limit Enable a demangling recursion limit. (default)\n"
+msgstr ""
+
+#: readelf.c:5062
+#, c-format
+msgid " --no-recurse-limit Disable a demangling recursion limit\n"
+msgstr ""
+
+#: readelf.c:5064
+#, c-format
+msgid ""
+" -U[dlexhi] --unicode=[default|locale|escape|hex|highlight|invalid]\n"
+" Display unicode characters as determined by the current locale\n"
+" (default), escape sequences, \"<hex sequences>\", highlighted\n"
+" escape sequences, or treat them as invalid and display as\n"
+" \"{hex sequences}\"\n"
+msgstr ""
+
+#: readelf.c:5070
+#, c-format
+msgid " -n --notes Display the core notes (if present)\n"
+msgstr ""
+
+#: readelf.c:5072
+#, c-format
+msgid " -r --relocs Display the relocations (if present)\n"
+msgstr ""
+
+#: readelf.c:5074
+#, c-format
+msgid " -u --unwind Display the unwind info (if present)\n"
+msgstr ""
+
+#: readelf.c:5076
+#, c-format
+msgid " -d --dynamic Display the dynamic section (if present)\n"
+msgstr ""
+
+#: readelf.c:5078
+#, c-format
+msgid " -V --version-info Display the version sections (if present)\n"
+msgstr ""
+
+#: readelf.c:5080
+#, c-format
+msgid " -A --arch-specific Display architecture specific information (if any)\n"
+msgstr ""
+
+#: readelf.c:5082
+#, c-format
+msgid " -c --archive-index Display the symbol/file index in an archive\n"
+msgstr ""
+
+#: readelf.c:5084
+#, c-format
+msgid " -D --use-dynamic Use the dynamic section info when displaying symbols\n"
+msgstr ""
+
+#: readelf.c:5086
+#, c-format
+msgid ""
+" -L --lint|--enable-checks\n"
+" Display warning messages for possible problems\n"
+msgstr ""
+
+#: readelf.c:5089
+#, c-format
+msgid ""
" -x --hex-dump=<number|name>\n"
" Dump the contents of section <number|name> as bytes\n"
+msgstr ""
+
+#: readelf.c:5092
+#, c-format
+msgid ""
" -p --string-dump=<number|name>\n"
" Dump the contents of section <number|name> as strings\n"
+msgstr ""
+
+#: readelf.c:5095
+#, c-format
+msgid ""
" -R --relocated-dump=<number|name>\n"
-" Dump the contents of section <number|name> as relocated bytes\n"
-" -z --decompress Decompress section before dumping it\n"
-" -w[lLiaprmfFsoORtUuTgAckK] or\n"
-" --debug-dump[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,\n"
-" =frames-interp,=str,=str-offsets,=loc,=Ranges,=pubtypes,\n"
-" =gdb_index,=trace_info,=trace_abbrev,=trace_aranges,\n"
-" =addr,=cu_index,=links,=follow-links]\n"
+" Dump the relocated contents of section <number|name>\n"
+msgstr ""
+
+#: readelf.c:5098
+#, c-format
+msgid " -z --decompress Decompress section before dumping it\n"
+msgstr ""
+
+#: readelf.c:5100
+#, c-format
+msgid ""
+" -w --debug-dump[a/=abbrev, A/=addr, r/=aranges, c/=cu_index, L/=decodedline,\n"
+" f/=frames, F/=frames-interp, g/=gdb_index, i/=info, o/=loc,\n"
+" m/=macro, p/=pubnames, t/=pubtypes, R/=Ranges, l/=rawline,\n"
+" s/=str, O/=str-offsets, u/=trace_abbrev, T/=trace_aranges,\n"
+" U/=trace_info]\n"
" Display the contents of DWARF debug sections\n"
msgstr ""
-" Опциите Ñа:\n"
-" -a --all СъответÑтва на : -h -l -S -s -r -d -V -A -I\n"
-" -h --file-header Показва заглавието на ELF файл\n"
-" -l --program-headers Показва заглавието на програмата\n"
-" --segments Синоним за --program-headers\n"
-" -S --section-headers Показва заглавиÑта на разделите\n"
-" --sections Синоним за --section-headers\n"
-" -g --section-groups Показва групови раздели\n"
-" -t --section-details Показва подробноÑти за раздела\n"
-" -e --headers СъответÑтва на: -h -l -S\n"
-" -s --syms Показва таблица Ñ Ð¸Ð¼ÐµÐ½Ð°Ñ‚Ð°\n"
-" --symbols Синоним за --syms\n"
-" --dyn-syms Показва таблицата Ñ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡Ð½Ð¸Ñ‚Ðµ имена\n"
-" -n --notes Показва бележки за Ñдро (ако приÑÑŠÑтва)\n"
-" -r --relocs Показва премеÑтваемите (ако приÑÑŠÑтва)\n"
-" -u --unwind Показва Ñведение за възÑтановÑване (ако приÑÑŠÑтва)\n"
-" -d --dynamic Показва динамичен раздел (ако приÑÑŠÑтва)\n"
-" -V --version-info Показва раздел за верÑиÑта (ако приÑÑŠÑтва)\n"
-" -A --arch-specific Показва ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾Ñобени за архитектурата (ако има)\n"
-" -c --archive-index Показва азбучник на архива Ñ Ð¸Ð¼ÐµÐ½Ð° и файлове\n"
-" -D --use-dynamic Използване на Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡Ð½Ð¸Ñ Ñ€Ð°Ð·Ð´ÐµÐ» при показване на имената\n"
-" -L --lint|--enable-checks Показва Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ñ Ð·Ð° възможни проблеми\n"
-" -x --hex-dump=<чиÑло|име>\n"
-" Разтоварва Ñъдържанието на раздел <чиÑло|име> като байтове\n"
-" -p --string-dump=<чиÑло|име>\n"
-" Разтоварва Ñъдържанието на раздел <чиÑло|име> като низова\n"
-" -R --relocated-dump=<чиÑло|име>\n"
-" Разтоварва Ñъдържанието на раздел <чиÑло|име> като премеÑтваеми байтове\n"
-" -z --decompress Разгъва раздела преди разтоварването му\n"
-" -w[lLiaprmfFsoORtUuTgAckK] или\n"
-" --debug-dump[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,\n"
-" =frames-interp,=str,=str-offsets,=loc,=Ranges,=pubtypes,\n"
-" =gdb_index,=trace_info,=trace_abbrev,=trace_aranges,\n"
-" =addr,=cu_index,=links,=follow-links]\n"
-" Показва Ñъдържанието на раздели за проÑледÑване DWARF2\n"
-
-#: readelf.c:4578
-#, c-format
-msgid ""
-" --dwarf-depth=N Do not display DIEs at depth N or greater\n"
-" --dwarf-start=N Display DIEs starting with N, at the same depth\n"
-" or deeper\n"
-msgstr ""
-" --dwarf-depth=Ч Да не Ñе показва DIEs Ñ Ð´ÑŠÐ»Ð±Ð¾Ñ‡Ð¸Ð½Ð° Ч или по-голÑма\n"
-" --dwarf-start=Ч Показва DIEs започвайки от Ч, ÑÑŠÑ Ñъщата дълбочина\n"
-" или по-дълбоки\n"
-
-#: readelf.c:4583
-#, c-format
-msgid ""
-" --ctf=<number|name> Display CTF info from section <number|name>\n"
-" --ctf-parent=<number|name>\n"
-" Use section <number|name> as the CTF parent\n"
-"\n"
+
+#: readelf.c:5107
+#, c-format
+msgid ""
+" -wk --debug-dump=links Display the contents of sections that link to separate\n"
+" debuginfo files\n"
+msgstr ""
+
+#: readelf.c:5110
+#, c-format
+msgid ""
+" -P --process-links Display the contents of non-debug sections in separate\n"
+" debuginfo files. (Implies -wK)\n"
+msgstr ""
+
+#: readelf.c:5114
+#, c-format
+msgid ""
+" -wK --debug-dump=follow-links\n"
+" Follow links to separate debug info files (default)\n"
+msgstr ""
+
+#: readelf.c:5117
+#, c-format
+msgid ""
+" -wN --debug-dump=no-follow-links\n"
+" Do not follow links to separate debug info files\n"
+msgstr ""
+
+#: readelf.c:5121
+#, c-format
+msgid ""
+" -wK --debug-dump=follow-links\n"
+" Follow links to separate debug info files\n"
+msgstr ""
+
+#: readelf.c:5124
+#, c-format
+msgid ""
+" -wN --debug-dump=no-follow-links\n"
+" Do not follow links to separate debug info files\n"
+" (default)\n"
+msgstr ""
+
+#: readelf.c:5129
+#, c-format
+msgid " --dwarf-depth=N Do not display DIEs at depth N or greater\n"
+msgstr ""
+
+#: readelf.c:5131
+#, c-format
+msgid " --dwarf-start=N Display DIEs starting at offset N\n"
+msgstr ""
+
+#: readelf.c:5134
+#, c-format
+msgid " --ctf=<number|name> Display CTF info from section <number|name>\n"
+msgstr ""
+
+#: readelf.c:5136
+#, c-format
+msgid " --ctf-parent=<name> Use CTF archive member <name> as the CTF parent\n"
+msgstr ""
+
+#: readelf.c:5138
+#, c-format
+msgid ""
" --ctf-symbols=<number|name>\n"
" Use section <number|name> as the CTF external symtab\n"
-"\n"
+msgstr ""
+
+#: readelf.c:5141
+#, c-format
+msgid ""
" --ctf-strings=<number|name>\n"
" Use section <number|name> as the CTF external strtab\n"
-"\n"
msgstr ""
-#: readelf.c:4594
+#: readelf.c:5147
#, c-format
msgid ""
" -i --instruction-dump=<number|name>\n"
@@ -6997,112 +7803,134 @@ msgstr ""
" -i --instruction-dump=<чиÑло|име>\n"
" РазглобÑва Ñъдържанието на раздел <чиÑло|име>\n"
-#: readelf.c:4598
+#: readelf.c:5151
#, c-format
-msgid ""
-" -I --histogram Display histogram of bucket list lengths\n"
-" -W --wide Allow output width to exceed 80 characters\n"
-" -T --silent-truncation If a symbol name is truncated, do not add a suffix [...]\n"
-" @<file> Read options from <file>\n"
-" -H --help Display this information\n"
-" -v --version Display the version number of readelf\n"
+msgid " -I --histogram Display histogram of bucket list lengths\n"
+msgstr ""
+
+#: readelf.c:5153
+#, c-format
+msgid " -W --wide Allow output width to exceed 80 characters\n"
+msgstr ""
+
+#: readelf.c:5155
+#, c-format
+msgid " -T --silent-truncation If a symbol name is truncated, do not add [...] suffix\n"
msgstr ""
-" -I --histogram Показва Ñхема на разпределението на дължините на кошниците\n"
-" -W --wide Разрешава ширината на изхода да надвишава 80 знака\n"
-" -T --silent-truncation Ðко името е отрÑзано, да не Ñе добава наÑтавка [...]\n"
-" @<файл> Прочита опциите от <файл>\n"
-" -H --help Показва това Ñведение\n"
-" -v --version Показва верÑиÑта на readelf\n"
-#: readelf.c:4629 readelf.c:4660 readelf.c:4664
+#: readelf.c:5157
+#, c-format
+msgid " @<file> Read options from <file>\n"
+msgstr " @<файл> Прочитане на команди от <файл>\n"
+
+#: readelf.c:5159
+#, c-format
+msgid " -H --help Display this information\n"
+msgstr " -H --help Показване на това Ñведение.\n"
+
+#: readelf.c:5161
+#, c-format
+msgid " -v --version Display the version number of readelf\n"
+msgstr " -v --version Показване номер на верÑÐ¸Ñ Ð½Ð° readelf\n"
+
+#: readelf.c:5187 readelf.c:5218 readelf.c:5222
msgid "Out of memory allocating dump request table.\n"
msgstr ""
-#: readelf.c:4860
+#: readelf.c:5458
+msgid "Missing arg to -U/--unicode"
+msgstr ""
+
+#: readelf.c:5497
#, c-format
msgid "Invalid option '-%c'\n"
msgstr "Ðеправилна Ð¾Ð¿Ñ†Ð¸Ñ '-%c'\n"
-#: readelf.c:4893 readelf.c:4909 readelf.c:10987
+#: readelf.c:5531 readelf.c:5547 readelf.c:11828
msgid "none"
msgstr "нищо"
-#: readelf.c:4910
+#: readelf.c:5548
msgid "2's complement, little endian"
msgstr ""
-#: readelf.c:4911
+#: readelf.c:5549
msgid "2's complement, big endian"
msgstr ""
-#: readelf.c:4931
+#: readelf.c:5569
msgid "Not an ELF file - it has the wrong magic bytes at the start\n"
msgstr ""
-#: readelf.c:4941
+#: readelf.c:5581
+#, c-format
+msgid "ELF Header in linked file '%s':\n"
+msgstr ""
+
+#: readelf.c:5583
#, c-format
msgid "ELF Header:\n"
msgstr ""
-#: readelf.c:4942
+#: readelf.c:5584
#, c-format
msgid " Magic: "
msgstr ""
-#: readelf.c:4946
+#: readelf.c:5588
#, c-format
msgid " Class: %s\n"
msgstr ""
-#: readelf.c:4948
+#: readelf.c:5590
#, c-format
msgid " Data: %s\n"
msgstr ""
-#: readelf.c:4950
+#: readelf.c:5592
#, c-format
msgid " Version: %d%s\n"
msgstr " ВерÑиÑ: %d%s\n"
-#: readelf.c:4953
+#: readelf.c:5595
msgid " (current)"
msgstr ""
-#: readelf.c:4955
+#: readelf.c:5597
msgid " <unknown>"
msgstr " <неизвеÑтен>"
-#: readelf.c:4957
+#: readelf.c:5599
#, c-format
msgid " OS/ABI: %s\n"
msgstr ""
-#: readelf.c:4959
+#: readelf.c:5601
#, c-format
msgid " ABI Version: %d\n"
msgstr ""
-#: readelf.c:4961
+#: readelf.c:5603
#, c-format
msgid " Type: %s\n"
msgstr ""
-#: readelf.c:4963
+#: readelf.c:5605
#, c-format
msgid " Machine: %s\n"
msgstr ""
-#: readelf.c:4965
+#: readelf.c:5607
#, c-format
msgid " Version: 0x%lx\n"
msgstr ""
-#: readelf.c:4968
+#: readelf.c:5610
#, c-format
msgid " Entry point address: "
msgstr ""
-#: readelf.c:4970
+#: readelf.c:5612
#, c-format
msgid ""
"\n"
@@ -7111,7 +7939,7 @@ msgstr ""
"\n"
" Ðачало на заглавието на програмата: "
-#: readelf.c:4972
+#: readelf.c:5614
#, c-format
msgid ""
" (bytes into file)\n"
@@ -7120,104 +7948,111 @@ msgstr ""
" (байта в файла)\n"
" Ðачало на заглавието на раздел: "
-#: readelf.c:4974
+#: readelf.c:5616
#, c-format
msgid " (bytes into file)\n"
msgstr " (байта в файла)\n"
-#: readelf.c:4976
+#: readelf.c:5618
#, c-format
msgid " Flags: 0x%lx%s\n"
msgstr "Флагове: 0x%lx%s\n"
-#: readelf.c:4979
+#: readelf.c:5621
#, c-format
msgid " Size of this header: %u (bytes)\n"
msgstr " Размер на заглавието: %u (байта)\n"
-#: readelf.c:4981
+#: readelf.c:5623
#, c-format
msgid " Size of program headers: %u (bytes)\n"
msgstr "Размер на прогр. заглавие: %u (байта)\n"
-#: readelf.c:4983
+#: readelf.c:5625
#, c-format
msgid " Number of program headers: %u"
msgstr " Брой на прогр.заглавиÑ: %u"
-#: readelf.c:4993
+#: readelf.c:5635
#, c-format
msgid " Size of section headers: %u (bytes)\n"
msgstr "Размер на загл.на раздели: %u (байта)\n"
-#: readelf.c:4995
+#: readelf.c:5637
#, c-format
msgid " Number of section headers: %u"
msgstr " Брой Ð·Ð°Ð³Ð»Ð°Ð²Ð¸Ñ Ð½Ð° раздели: %u"
-#: readelf.c:5003
+#: readelf.c:5645
#, c-format
msgid " Section header string table index: %u"
msgstr ""
-#: readelf.c:5015
+#: readelf.c:5657
#, c-format
msgid " <corrupt: out of range>"
msgstr " <повреден: извън обхват>"
-#: readelf.c:5056 readelf.c:5103
+#: readelf.c:5696 readelf.c:5743
msgid "The e_phentsize field in the ELF header is less than the size of an ELF program header\n"
msgstr ""
-#: readelf.c:5060 readelf.c:5107
+#: readelf.c:5700 readelf.c:5747
msgid "The e_phentsize field in the ELF header is larger than the size of an ELF program header\n"
msgstr ""
-#: readelf.c:5063 readelf.c:5110
+#: readelf.c:5703 readelf.c:5750
msgid "program headers"
msgstr "програмно заглавиÑ"
-#: readelf.c:5149
+#: readelf.c:5789
#, c-format
msgid "Too many program headers - %#x - the file is not that big\n"
msgstr ""
-#: readelf.c:5158
+#: readelf.c:5798
#, c-format
msgid "Out of memory reading %u program headers\n"
msgstr ""
-#: readelf.c:5192
+#: readelf.c:5828
msgid "possibly corrupt ELF header - it has a non-zero program header offset, but no program headers\n"
msgstr ""
-#: readelf.c:5197
+#: readelf.c:5833
+#, c-format
+msgid ""
+"\n"
+"There are no program headers in linked file '%s'.\n"
+msgstr ""
+
+#: readelf.c:5836
#, c-format
msgid ""
"\n"
"There are no program headers in this file.\n"
msgstr ""
-#: readelf.c:5203
+#: readelf.c:5847
#, c-format
msgid ""
"\n"
"Elf file type is %s\n"
msgstr ""
-#: readelf.c:5204
+#: readelf.c:5848
#, c-format
msgid "Entry point 0x%s\n"
msgstr ""
-#: readelf.c:5205
+#: readelf.c:5849
#, c-format
msgid "There is %d program header, starting at offset %s\n"
msgid_plural "There are %d program headers, starting at offset %s\n"
msgstr[0] ""
msgstr[1] ""
-#: readelf.c:5218 readelf.c:5220
+#: readelf.c:5862 readelf.c:5864
#, c-format
msgid ""
"\n"
@@ -7226,230 +8061,236 @@ msgstr ""
"\n"
"Програмни заглавиÑ:\n"
-#: readelf.c:5224
+#: readelf.c:5868
#, c-format
msgid " Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align\n"
msgstr ""
-#: readelf.c:5227
+#: readelf.c:5871
#, c-format
msgid " Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align\n"
msgstr ""
-#: readelf.c:5231
+#: readelf.c:5875
#, c-format
msgid " Type Offset VirtAddr PhysAddr\n"
msgstr ""
-#: readelf.c:5233
+#: readelf.c:5877
#, c-format
msgid " FileSiz MemSiz Flags Align\n"
msgstr ""
-#: readelf.c:5329
+#: readelf.c:5975
msgid "LOAD segments must be sorted in order of increasing VirtAddr\n"
msgstr ""
-#: readelf.c:5332
+#: readelf.c:5978
msgid "the segment's file size is larger than its memory size\n"
msgstr ""
-#: readelf.c:5339
+#: readelf.c:5985
msgid "the PHDR segment must occur before any LOAD segment\n"
msgstr ""
-#: readelf.c:5357
+#: readelf.c:6003
msgid "the PHDR segment is not covered by a LOAD segment\n"
msgstr ""
-#: readelf.c:5363
+#: readelf.c:6009
msgid "more than one dynamic segment\n"
msgstr ""
-#: readelf.c:5382
+#: readelf.c:6028
msgid "no .dynamic section in the dynamic segment\n"
msgstr ""
-#: readelf.c:5400
+#: readelf.c:6047
msgid "the .dynamic section is not the same as the dynamic segment\n"
msgstr ""
-#: readelf.c:5412
+#: readelf.c:6058
msgid "the dynamic segment offset + size exceeds the size of the file\n"
msgstr ""
-#: readelf.c:5421
+#: readelf.c:6071
msgid "Unable to find program interpreter name\n"
msgstr ""
-#: readelf.c:5428
-msgid "Internal error: failed to create format string to display program interpreter\n"
-msgstr ""
-
-#: readelf.c:5433
-msgid "Unable to read program interpreter name\n"
-msgstr ""
-
-#: readelf.c:5436
+#: readelf.c:6082
#, c-format
msgid " [Requesting program interpreter: %s]\n"
msgstr ""
-#: readelf.c:5447
+#: readelf.c:6093
#, c-format
msgid ""
"\n"
" Section to Segment mapping:\n"
msgstr ""
-#: readelf.c:5448
+#: readelf.c:6094
#, c-format
msgid " Segment Sections...\n"
msgstr ""
-#: readelf.c:5484 readelf.c:10309
+#: readelf.c:6136 readelf.c:11113
msgid "Cannot interpret virtual addresses without program headers.\n"
msgstr ""
-#: readelf.c:5500
+#: readelf.c:6152
#, c-format
msgid "Virtual address 0x%lx not located in any PT_LOAD segment.\n"
msgstr ""
-#: readelf.c:5525 readelf.c:5590
+#: readelf.c:6177 readelf.c:6241
msgid "The e_shentsize field in the ELF header is less than the size of an ELF section header\n"
msgstr ""
-#: readelf.c:5529 readelf.c:5595
+#: readelf.c:6181 readelf.c:6246
msgid "The e_shentsize field in the ELF header is larger than the size of an ELF section header\n"
msgstr ""
-#: readelf.c:5533 readelf.c:5600
+#: readelf.c:6185 readelf.c:6251
msgid "section headers"
msgstr ""
-#: readelf.c:5543 readelf.c:5610
+#: readelf.c:6194 readelf.c:6260
#, c-format
msgid "Out of memory reading %u section headers\n"
msgstr ""
-#: readelf.c:5563 readelf.c:5630
+#: readelf.c:6214 readelf.c:6280
#, c-format
msgid "Section %u has an out of range sh_link value of %u\n"
msgstr ""
-#: readelf.c:5565 readelf.c:5632
+#: readelf.c:6216 readelf.c:6282
#, c-format
msgid "Section %u has an out of range sh_info value of %u\n"
msgstr ""
-#: readelf.c:5662 readelf.c:5779
+#: readelf.c:6324 readelf.c:6441
#, c-format
msgid "Section %s has an invalid sh_entsize of 0x%lx\n"
msgstr ""
-#: readelf.c:5670 readelf.c:5787
+#: readelf.c:6332 readelf.c:6449 readelf.c:13146
#, c-format
msgid "Section %s has an invalid sh_size of 0x%lx\n"
msgstr ""
-#: readelf.c:5680 readelf.c:5797
+#: readelf.c:6342 readelf.c:6459
#, c-format
msgid "Size (0x%lx) of section %s is not a multiple of its sh_entsize (0x%lx)\n"
msgstr ""
-#: readelf.c:5688 readelf.c:5805 readelf.c:14295
+#: readelf.c:6350 readelf.c:6467 readelf.c:15575
msgid "symbols"
msgstr ""
-#: readelf.c:5700 readelf.c:5817
+#: readelf.c:6362 readelf.c:6479
msgid "Multiple symbol table index sections associated with the same symbol section\n"
msgstr ""
-#: readelf.c:5707 readelf.c:5824
+#: readelf.c:6369 readelf.c:6486
msgid "symbol table section indices"
msgstr ""
-#: readelf.c:5714 readelf.c:5831
+#: readelf.c:6376 readelf.c:6493
#, c-format
msgid "Index section %s has an sh_size of 0x%lx - expected 0x%lx\n"
msgstr ""
-#: readelf.c:5726 readelf.c:5843
+#: readelf.c:6388 readelf.c:6505
#, c-format
msgid "Out of memory reading %lu symbols\n"
msgstr ""
-#: readelf.c:6022 readelf.c:6097 readelf.c:6115 readelf.c:6133
+#: readelf.c:6714 readelf.c:6811 readelf.c:6829 readelf.c:6847
msgid "Internal error: not enough buffer room for section flag info"
msgstr ""
-#: readelf.c:6140
+#: readelf.c:6854
#, c-format
msgid "UNKNOWN (%*.*lx)"
msgstr ""
-#: readelf.c:6159 readelf.c:6174
+#: readelf.c:6873 readelf.c:6888
msgid "Compressed section is too small even for a compression header\n"
msgstr ""
-#: readelf.c:6213
+#: readelf.c:6910
msgid "possibly corrupt ELF file header - it has a non-zero section header offset, but no section headers\n"
msgstr ""
-#: readelf.c:6218
+#: readelf.c:6915
#, c-format
msgid ""
"\n"
"There are no sections in this file.\n"
msgstr ""
-#: readelf.c:6224
+#: readelf.c:6923 readelf.c:21262
+#, c-format
+msgid "In linked file '%s': "
+msgstr ""
+
+#: readelf.c:6925
#, c-format
msgid "There is %d section header, starting at offset 0x%lx:\n"
msgid_plural "There are %d section headers, starting at offset 0x%lx:\n"
msgstr[0] "Има %d заглавие на раздел започващо от 0x%lx\n"
msgstr[1] "Има %d Ð·Ð°Ð³Ð»Ð°Ð²Ð¸Ñ Ð½Ð° раздели започващи от 0x%lx\n"
-#: readelf.c:6253 readelf.c:6907 readelf.c:7092 readelf.c:12216
-#: readelf.c:14668
+#: readelf.c:6947 readelf.c:7624 readelf.c:7826 readelf.c:13434
+#: readelf.c:15933
msgid "string table"
msgstr ""
#. Note: coded this way so that there is a single string for translation.
-#: readelf.c:6319
+#: readelf.c:7013
#, c-format
msgid "Section %d has invalid sh_entsize of %s\n"
msgstr ""
-#: readelf.c:6320
+#: readelf.c:7014
#, c-format
msgid "(Using the expected size of %u for the rest of this dump)\n"
msgstr ""
-#: readelf.c:6344
+#: readelf.c:7038
msgid "File contains multiple dynamic symbol tables\n"
msgstr ""
-#: readelf.c:6359
+#: readelf.c:7053
msgid "File contains multiple dynamic string tables\n"
msgstr ""
-#: readelf.c:6365
+#: readelf.c:7059
msgid "dynamic strings"
msgstr ""
-#: readelf.c:6393 readelf.c:6399
+#: readelf.c:7087 readelf.c:7093
#, c-format
msgid "Section '%s': zero-sized relocation section\n"
msgstr ""
-#: readelf.c:6408
+#: readelf.c:7106
#, c-format
msgid "Section '%s': has a size of zero - is this intended ?\n"
msgstr ""
-#: readelf.c:6487
+#: readelf.c:7190
+#, c-format
+msgid ""
+"\n"
+"Section Headers in linked file '%s':\n"
+msgstr ""
+"\n"
+"Ð—Ð°Ð³Ð»Ð°Ð²Ð¸Ñ Ð½Ð° раздели от ÑÐ²ÑŠÑ€Ð·Ð°Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð» '%s':\n"
+
+#: readelf.c:7192
#, c-format
msgid ""
"\n"
@@ -7458,7 +8299,7 @@ msgstr ""
"\n"
"Ð—Ð°Ð³Ð»Ð°Ð²Ð¸Ñ Ð½Ð° раздели:\n"
-#: readelf.c:6489
+#: readelf.c:7194
#, c-format
msgid ""
"\n"
@@ -7467,106 +8308,106 @@ msgstr ""
"\n"
"Заглавие на раздел:\n"
-#: readelf.c:6495 readelf.c:6506 readelf.c:6517
+#: readelf.c:7200 readelf.c:7211 readelf.c:7222
#, c-format
msgid " [Nr] Name\n"
msgstr ""
-#: readelf.c:6496
+#: readelf.c:7201
#, c-format
msgid " Type Addr Off Size ES Lk Inf Al\n"
msgstr ""
-#: readelf.c:6500
+#: readelf.c:7205
#, c-format
msgid " [Nr] Name Type Addr Off Size ES Flg Lk Inf Al\n"
msgstr ""
-#: readelf.c:6507
+#: readelf.c:7212
#, c-format
msgid " Type Address Off Size ES Lk Inf Al\n"
msgstr ""
-#: readelf.c:6511
+#: readelf.c:7216
#, c-format
msgid " [Nr] Name Type Address Off Size ES Flg Lk Inf Al\n"
msgstr ""
-#: readelf.c:6518
+#: readelf.c:7223
#, c-format
msgid " Type Address Offset Link\n"
msgstr ""
-#: readelf.c:6519
+#: readelf.c:7224
#, c-format
msgid " Size EntSize Info Align\n"
msgstr ""
-#: readelf.c:6523
+#: readelf.c:7228
#, c-format
msgid " [Nr] Name Type Address Offset\n"
msgstr ""
-#: readelf.c:6524
+#: readelf.c:7229
#, c-format
msgid " Size EntSize Flags Link Info Align\n"
msgstr ""
-#: readelf.c:6529
+#: readelf.c:7234
#, c-format
msgid " Flags\n"
msgstr ""
-#: readelf.c:6558
+#: readelf.c:7263
#, c-format
msgid "[%2u]: Link field (%u) should index a symtab section.\n"
msgstr ""
-#: readelf.c:6571
+#: readelf.c:7276
#, c-format
msgid "[%2u]: Link field (%u) should index a string section.\n"
msgstr ""
-#: readelf.c:6579 readelf.c:6590
+#: readelf.c:7284 readelf.c:7295
#, c-format
msgid "[%2u]: Unexpected value (%u) in link field.\n"
msgstr ""
-#: readelf.c:6617
+#: readelf.c:7322
#, c-format
msgid "[%2u]: Info field (%u) should index a relocatable section.\n"
msgstr ""
-#: readelf.c:6628 readelf.c:6655
+#: readelf.c:7333 readelf.c:7360
#, c-format
msgid "[%2u]: Unexpected value (%u) in info field.\n"
msgstr ""
-#: readelf.c:6650
+#: readelf.c:7355
#, c-format
msgid "[%2u]: Expected link to another section in info field"
msgstr ""
-#: readelf.c:6665
+#: readelf.c:7370
#, c-format
msgid "Size of section %u is larger than the entire file!\n"
msgstr ""
-#: readelf.c:6734
+#: readelf.c:7439
#, c-format
msgid "section %u: sh_link value of %u is larger than the number of sections\n"
msgstr ""
-#: readelf.c:6835
+#: readelf.c:7540
msgid "compression header"
msgstr ""
-#: readelf.c:6840
+#: readelf.c:7545
#, c-format
msgid " [<corrupt>]\n"
msgstr " [<повреден>]\n"
-#: readelf.c:6846
+#: readelf.c:7551
#, c-format
msgid " [<unknown>: 0x%x], "
msgstr " [<неизвеÑÑ‚.>: 0x%x], "
@@ -7574,7 +8415,7 @@ msgstr " [<неизвеÑÑ‚.>: 0x%x], "
#. The ordering of the letters shown here matches the ordering of the
#. corresponding SHF_xxx values, and hence the order in which these
#. letters will be displayed to the user.
-#: readelf.c:6861
+#: readelf.c:7566
#, c-format
msgid ""
"Key to Flags:\n"
@@ -7584,284 +8425,341 @@ msgid ""
" "
msgstr ""
-#: readelf.c:6868
+#: readelf.c:7574
+#, c-format
+msgid "R (retain), "
+msgstr ""
+
+#: readelf.c:7577
+#, c-format
+msgid "D (mbind), "
+msgstr ""
+
+#: readelf.c:7585
#, c-format
msgid "l (large), "
msgstr ""
-#: readelf.c:6870
+#: readelf.c:7587
#, c-format
msgid "y (purecode), "
msgstr ""
-#: readelf.c:6872
+#: readelf.c:7589
#, c-format
msgid "v (VLE), "
msgstr ""
-#: readelf.c:6897
+#: readelf.c:7614
msgid "Bad sh_link in symbol table section\n"
msgstr ""
-#: readelf.c:6932
+#: readelf.c:7649
msgid "<OS specific>"
msgstr "<оÑобен за ОС>"
-#: readelf.c:6933
+#: readelf.c:7650
msgid "<PROC specific>"
msgstr "<оÑобен за ПРОЦЕСОР>"
-#: readelf.c:6960
+#: readelf.c:7679
#, c-format
msgid ""
"\n"
-"There are no sections to group in this file.\n"
+"There are no sections group in linked file '%s'.\n"
+msgstr ""
+
+#: readelf.c:7682 readelf.c:7721
+#, c-format
+msgid ""
+"\n"
+"There are no section groups in this file.\n"
msgstr ""
-#: readelf.c:6967
+#: readelf.c:7689
msgid "Section headers are not available!\n"
msgstr ""
-#: readelf.c:6978
+#: readelf.c:7700
#, c-format
msgid "Out of memory reading %u section group headers\n"
msgstr ""
-#: readelf.c:6994
+#: readelf.c:7718
#, c-format
msgid ""
"\n"
-"There are no section groups in this file.\n"
+"There are no section groups in linked file '%s'.\n"
msgstr ""
-#: readelf.c:7004
+#: readelf.c:7732
#, c-format
msgid "Out of memory reading %lu groups\n"
msgstr ""
-#: readelf.c:7034
+#: readelf.c:7745
+#, c-format
+msgid "Section groups in linked file '%s'\n"
+msgstr ""
+
+#: readelf.c:7766
#, c-format
msgid "Bad sh_link in group section `%s'\n"
msgstr ""
-#: readelf.c:7047
+#: readelf.c:7779
#, c-format
msgid "Corrupt header in group section `%s'\n"
msgstr ""
-#: readelf.c:7053 readelf.c:7064
+#: readelf.c:7785 readelf.c:7796
#, c-format
msgid "Bad sh_info in group section `%s'\n"
msgstr ""
-#: readelf.c:7102
+#: readelf.c:7836
#, c-format
msgid "Section %s has sh_entsize (0x%lx) which is larger than its size (0x%lx)\n"
msgstr ""
-#: readelf.c:7111
+#: readelf.c:7845
msgid "section data"
msgstr ""
-#: readelf.c:7122
+#: readelf.c:7856
#, c-format
msgid ""
"\n"
"%sgroup section [%5u] `%s' [%s] contains %u sections:\n"
msgstr ""
-#: readelf.c:7125
+#: readelf.c:7859
#, c-format
msgid " [Index] Name\n"
msgstr ""
-#: readelf.c:7143
+#: readelf.c:7877
#, c-format
msgid "section [%5u] in group section [%5u] > maximum section [%5u]\n"
msgstr ""
-#: readelf.c:7146
+#: readelf.c:7880
msgid "Further error messages about overlarge group section indices suppressed\n"
msgstr ""
-#: readelf.c:7159
+#: readelf.c:7893
#, c-format
msgid "section [%5u] in group section [%5u] already in group section [%5u]\n"
msgstr ""
-#: readelf.c:7163
+#: readelf.c:7897
msgid "Further error messages about already contained group sections suppressed\n"
msgstr ""
-#: readelf.c:7175
+#: readelf.c:7909
#, c-format
msgid "section 0 in group section [%5u]\n"
msgstr ""
-#: readelf.c:7242
+#: readelf.c:7976
msgid "dynamic section image fixups"
msgstr ""
-#: readelf.c:7250
+#: readelf.c:7984
#, c-format
msgid "corrupt library name index of 0x%lx found in dynamic entry"
msgstr ""
-#: readelf.c:7255
+#: readelf.c:7989
#, c-format
msgid ""
"\n"
"Image fixups for needed library #%d: %s - ident: %lx\n"
msgstr ""
-#: readelf.c:7258
+#: readelf.c:7992
#, c-format
msgid "Seg Offset Type SymVec DataType\n"
msgstr ""
-#: readelf.c:7292
+#: readelf.c:8026
msgid "dynamic section image relocations"
msgstr ""
-#: readelf.c:7296
+#: readelf.c:8030
#, c-format
msgid ""
"\n"
"Image relocs\n"
msgstr ""
-#: readelf.c:7298
+#: readelf.c:8032
#, c-format
msgid "Seg Offset Type Addend Seg Sym Off\n"
msgstr ""
-#: readelf.c:7355
+#: readelf.c:8089
msgid "dynamic string section"
msgstr ""
-#: readelf.c:7457
+#: readelf.c:8193
+#, c-format
+msgid ""
+"\n"
+"In linked file '%s' section '%s' at offset 0x%lx contains %ld bytes:\n"
+msgstr ""
+
+#: readelf.c:8197
#, c-format
msgid ""
"\n"
"'%s' relocation section at offset 0x%lx contains %ld bytes:\n"
msgstr ""
-#: readelf.c:7476
+#: readelf.c:8218
+#, c-format
+msgid ""
+"\n"
+"There are no dynamic relocations in linked file '%s'.\n"
+msgstr ""
+
+#: readelf.c:8221
#, c-format
msgid ""
"\n"
"There are no dynamic relocations in this file.\n"
msgstr ""
-#: readelf.c:7500
+#: readelf.c:8248
+#, c-format
+msgid ""
+"\n"
+"In linked file '%s' relocation section "
+msgstr ""
+
+#: readelf.c:8251
#, c-format
msgid ""
"\n"
"Relocation section "
msgstr ""
-#: readelf.c:7508
+#: readelf.c:8259
#, c-format
msgid " at offset 0x%lx contains %lu entry:\n"
msgid_plural " at offset 0x%lx contains %lu entries:\n"
msgstr[0] " на отмеÑтване 0x%lx Ñе Ñъдържа %lu запиÑ:\n"
msgstr[1] " на отмеÑтване 0x%lx Ñе Ñъдържат %lu запиÑа:\n"
-#: readelf.c:7556
+#: readelf.c:8308
+#, c-format
+msgid ""
+"\n"
+"There are no static relocations in linked file '%s'."
+msgstr ""
+
+#: readelf.c:8311
#, c-format
msgid ""
"\n"
"There are no static relocations in this file."
msgstr ""
-#: readelf.c:7557
+#: readelf.c:8312
#, c-format
msgid ""
"\n"
"To see the dynamic relocations add --use-dynamic to the command line.\n"
msgstr ""
-#: readelf.c:7563
+#: readelf.c:8320
+#, c-format
+msgid ""
+"\n"
+"There are no relocations in linked file '%s'.\n"
+msgstr ""
+
+#: readelf.c:8323
#, c-format
msgid ""
"\n"
"There are no relocations in this file.\n"
msgstr ""
-#: readelf.c:7730
+#: readelf.c:8491
#, c-format
msgid "Invalid section %u in table entry %ld\n"
msgstr "Ðеправилен раздел %u в Ñ‚Ð°Ð±Ð»Ð¸Ñ‡Ð½Ð¸Ñ Ð·Ð°Ð¿Ð¸Ñ %ld\n"
-#: readelf.c:7742
+#: readelf.c:8503
#, c-format
msgid "Invalid offset %lx in table entry %ld\n"
msgstr ""
-#: readelf.c:7760
+#: readelf.c:8521
#, c-format
msgid "\tUnknown version.\n"
msgstr ""
-#: readelf.c:7823 readelf.c:8248
+#: readelf.c:8584 readelf.c:9021
msgid "unwind table"
msgstr ""
-#: readelf.c:7874 readelf.c:8330
+#: readelf.c:8635 readelf.c:9104
#, c-format
msgid "Skipping unknown relocation type: %u\n"
msgstr ""
-#: readelf.c:7880 readelf.c:8337
+#: readelf.c:8641 readelf.c:9111
#, c-format
msgid "Skipping unexpected relocation type: %s\n"
msgstr ""
-#: readelf.c:7889 readelf.c:8344
+#: readelf.c:8650 readelf.c:9118
#, c-format
msgid "Skipping reloc with overlarge offset: %lx\n"
msgstr ""
-#: readelf.c:7896 readelf.c:8351
+#: readelf.c:8657 readelf.c:9125
#, c-format
msgid "Skipping reloc with invalid symbol index: %u\n"
msgstr ""
-#: readelf.c:7944 readelf.c:8400 readelf.c:9506
+#: readelf.c:8705 readelf.c:9172 readelf.c:10282
msgid "Multiple symbol tables encountered\n"
msgstr ""
-#: readelf.c:7959 readelf.c:8415 readelf.c:9521
+#: readelf.c:8720 readelf.c:9188 readelf.c:10297
#, c-format
msgid ""
"\n"
"There are no unwind sections in this file.\n"
msgstr ""
-#: readelf.c:8033
+#: readelf.c:8806
#, c-format
msgid ""
"\n"
"Could not find unwind info section for "
msgstr ""
-#: readelf.c:8045
+#: readelf.c:8818
msgid "unwind info"
msgstr ""
-#: readelf.c:8048
+#: readelf.c:8821
#, c-format
msgid ""
"\n"
"Unwind section "
msgstr ""
-#: readelf.c:8055
+#: readelf.c:8828
#, c-format
msgid " at offset 0x%lx contains %lu entries:\n"
msgstr ""
-#: readelf.c:8423 readelf.c:9528
+#: readelf.c:9197 readelf.c:10304
#, c-format
msgid ""
"\n"
@@ -7872,266 +8770,283 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: readelf.c:8556
+#: readelf.c:9330
msgid "unwind data"
msgstr ""
-#: readelf.c:8629
+#: readelf.c:9403
#, c-format
msgid "Skipping unexpected relocation at offset 0x%lx\n"
msgstr ""
-#: readelf.c:8651
+#: readelf.c:9425
#, c-format
msgid "Unknown section relocation type %d encountered\n"
msgstr ""
-#: readelf.c:8659
+#: readelf.c:9433
#, c-format
msgid "Bad symbol index in unwind relocation (%lu > %lu)\n"
msgstr ""
-#: readelf.c:8674
+#: readelf.c:9448
#, c-format
msgid "Skipping unknown ARM relocation type: %d\n"
msgstr ""
-#: readelf.c:8684
+#: readelf.c:9458
#, c-format
msgid "Skipping unexpected ARM relocation type %s\n"
msgstr ""
-#: readelf.c:8693
+#: readelf.c:9467
#, c-format
msgid "Skipping unknown C6000 relocation type: %d\n"
msgstr ""
-#: readelf.c:8703
+#: readelf.c:9477
#, c-format
msgid "Skipping unexpected C6000 relocation type %s\n"
msgstr ""
#. This function currently only supports ARM and TI unwinders.
-#: readelf.c:8712
+#: readelf.c:9486
msgid "Only TI and ARM unwinders are currently supported\n"
msgstr ""
-#: readelf.c:8775
+#: readelf.c:9549
#, c-format
msgid "[Truncated opcode]\n"
msgstr ""
-#: readelf.c:8823 readelf.c:9039
+#: readelf.c:9597 readelf.c:9815
#, c-format
msgid "Refuse to unwind"
msgstr ""
-#: readelf.c:8846
+#: readelf.c:9620
#, c-format
msgid " [Reserved]"
msgstr ""
-#: readelf.c:8874
+#: readelf.c:9648
#, c-format
msgid " finish"
msgstr ""
-#: readelf.c:8879 readelf.c:8972
+#: readelf.c:9653 readelf.c:9748
#, c-format
msgid "[Spare]"
msgstr ""
-#: readelf.c:8913
+#: readelf.c:9687
msgid "corrupt change to vsp\n"
msgstr ""
-#: readelf.c:8994 readelf.c:9151
+#: readelf.c:9713
+#, c-format
+msgid " pop {ra_auth_code}"
+msgstr ""
+
+#: readelf.c:9770 readelf.c:9927
#, c-format
msgid " [unsupported opcode]"
msgstr ""
-#: readelf.c:9087
+#: readelf.c:9863
#, c-format
msgid "pop frame {"
msgstr ""
-#: readelf.c:9090
+#: readelf.c:9866
#, c-format
msgid "*corrupt* - no registers specified"
msgstr ""
-#: readelf.c:9104
+#: readelf.c:9880
msgid "[pad]"
msgstr ""
-#: readelf.c:9133
+#: readelf.c:9909
msgid "Corrupt stack pointer adjustment detected\n"
msgstr ""
-#: readelf.c:9140
+#: readelf.c:9916
#, c-format
msgid "sp = sp + %ld"
msgstr ""
-#: readelf.c:9215
+#: readelf.c:9991
#, c-format
msgid " Personality routine: "
msgstr ""
-#: readelf.c:9247
+#: readelf.c:10023
#, c-format
msgid " [Truncated data]\n"
msgstr ""
-#: readelf.c:9271
+#: readelf.c:10047
#, c-format
msgid "Corrupt ARM compact model table entry: %x \n"
msgstr ""
-#: readelf.c:9276
+#: readelf.c:10052
#, c-format
msgid " Compact model index: %d\n"
msgstr ""
-#: readelf.c:9302
+#: readelf.c:10078
msgid "Unknown ARM compact model index encountered\n"
msgstr ""
-#: readelf.c:9303
+#: readelf.c:10079
#, c-format
msgid " [reserved]\n"
msgstr ""
-#: readelf.c:9318
+#: readelf.c:10094
#, c-format
msgid " Restore stack from frame pointer\n"
msgstr ""
-#: readelf.c:9320
+#: readelf.c:10096
#, c-format
msgid " Stack increment %d\n"
msgstr ""
-#: readelf.c:9321
+#: readelf.c:10097
#, c-format
msgid " Registers restored: "
msgstr ""
-#: readelf.c:9326
+#: readelf.c:10102
#, c-format
msgid " Return register: %s\n"
msgstr ""
-#: readelf.c:9330
+#: readelf.c:10106
#, c-format
msgid " [reserved (%d)]\n"
msgstr ""
-#: readelf.c:9334
+#: readelf.c:10110
#, c-format
msgid "Unsupported architecture type %d encountered when decoding unwind table\n"
msgstr ""
-#: readelf.c:9389
+#: readelf.c:10165
#, c-format
msgid "corrupt index table entry: %x\n"
msgstr ""
-#: readelf.c:9429
+#: readelf.c:10205
#, c-format
msgid "Unwind entry contains corrupt offset (0x%lx) into section %s\n"
msgstr ""
-#: readelf.c:9445
+#: readelf.c:10221
#, c-format
msgid "Could not locate .ARM.extab section containing 0x%lx.\n"
msgstr ""
-#: readelf.c:9489
+#: readelf.c:10265
#, c-format
msgid "Unsupported architecture type %d encountered when processing unwind table\n"
msgstr ""
-#: readelf.c:9572
+#: readelf.c:10327
+#, c-format
+msgid "No processor specific unwind information to decode\n"
+msgstr ""
+
+#: readelf.c:10357
#, c-format
msgid ""
"\n"
"The decoding of unwind sections for machine type %s is not currently supported.\n"
msgstr ""
-#: readelf.c:9599
+#: readelf.c:10384
#, c-format
msgid "NONE"
msgstr "ÐИЩО"
-#: readelf.c:9624
+#: readelf.c:10409
#, c-format
msgid "Interface Version: %s"
msgstr "ОпиÑание верÑиÑ: %s"
#. Note: coded this way so that there is a single string for translation.
-#: readelf.c:9631
+#: readelf.c:10416
#, c-format
msgid "<corrupt: %s>"
msgstr "<повреден: %s>"
-#: readelf.c:9649
+#: readelf.c:10434
#, c-format
msgid "Time Stamp: %s"
msgstr "Времева отметка: %s"
-#: readelf.c:9834 readelf.c:9884
+#: readelf.c:10628 readelf.c:10678
msgid "dynamic section"
msgstr ""
-#: readelf.c:9854 readelf.c:9905
+#: readelf.c:10648 readelf.c:10699
#, c-format
msgid "Out of memory allocating space for %lu dynamic entries\n"
msgstr ""
-#: readelf.c:9967
+#: readelf.c:10773
#, c-format
msgid "Size truncation prevents reading %s elements of size %u\n"
msgstr ""
-#: readelf.c:9976
+#: readelf.c:10782
#, c-format
msgid "Invalid number of dynamic entries: %s\n"
msgstr "Ðеправилен брой на динамични запиÑи: %s\n"
-#: readelf.c:9984
+#: readelf.c:10790
#, c-format
msgid "Out of memory reading %s dynamic entries\n"
msgstr "ÐедоÑтиг на памет при четене на %s динамични запиÑи\n"
-#: readelf.c:9991
+#: readelf.c:10797
#, c-format
msgid "Unable to read in %s bytes of dynamic data\n"
msgstr "Ðе можаха да Ñе прочетат %s байта от динамичните данни\n"
-#: readelf.c:10000
+#: readelf.c:10806
#, c-format
msgid "Out of memory allocating space for %s dynamic entries\n"
msgstr "ÐедоÑтиг на памет при заделÑне на мÑÑто за %s динамични запиÑи\n"
-#: readelf.c:10040 readelf.c:10094 readelf.c:10118 readelf.c:10151
-#: readelf.c:10177 readelf.c:10196
+#: readelf.c:10846 readelf.c:10900 readelf.c:10924 readelf.c:10957
+#: readelf.c:10983 readelf.c:11002
msgid "Unable to seek to start of dynamic information\n"
msgstr ""
-#: readelf.c:10046 readelf.c:10100
+#: readelf.c:10852 readelf.c:10906
msgid "Failed to read in number of buckets\n"
msgstr ""
-#: readelf.c:10052
+#: readelf.c:10858
msgid "Failed to read in number of chains\n"
msgstr ""
-#: readelf.c:10159
+#: readelf.c:10965
msgid "Failed to determine last chain length\n"
msgstr ""
-#: readelf.c:10257
+#: readelf.c:11065
+#, c-format
+msgid ""
+"\n"
+"There is no dynamic section in linked file '%s'.\n"
+msgstr ""
+
+#: readelf.c:11068
#, c-format
msgid ""
"\n"
@@ -8139,49 +9054,64 @@ msgid ""
msgstr ""
#. See PR 21379 for a reproducer.
-#: readelf.c:10324
+#: readelf.c:11128
msgid "Invalid PT_LOAD entry\n"
msgstr ""
-#: readelf.c:10350
+#: readelf.c:11154
msgid "the .dynsym section doesn't match the DT_SYMTAB and DT_SYMENT tags\n"
msgstr ""
-#: readelf.c:10360
+#: readelf.c:11164
msgid "Corrupt DT_SYMTAB dynamic entry\n"
msgstr ""
-#: readelf.c:10396
+#: readelf.c:11200
msgid "the .dynstr section doesn't match the DT_STRTAB and DT_STRSZ tags\n"
msgstr ""
-#: readelf.c:10401
+#: readelf.c:11205
msgid "dynamic string table"
msgstr ""
-#: readelf.c:10404
+#: readelf.c:11208
msgid "Corrupt DT_STRTAB dynamic entry\n"
msgstr ""
-#: readelf.c:10429
+#: readelf.c:11233
#, c-format
msgid "Bad value (%d) for SYMINENT entry\n"
msgstr ""
-#: readelf.c:10448
+#: readelf.c:11252
msgid "symbol information"
msgstr ""
-#: readelf.c:10454
+#: readelf.c:11258
msgid "Multiple dynamic symbol information sections found\n"
msgstr ""
-#: readelf.c:10460
+#: readelf.c:11264
#, c-format
msgid "Out of memory allocating %lu bytes for dynamic symbol info\n"
msgstr "ÐедоÑтиг на памет при заделÑне на %lu байта за Ñведение на динамично име\n"
-#: readelf.c:10482
+#: readelf.c:11288
+#, c-format
+msgid ""
+"\n"
+"In linked file '%s' the dynamic section at offset 0x%lx contains %lu entry:\n"
+msgid_plural ""
+"\n"
+"In linked file '%s' the dynamic section at offset 0x%lx contains %lu entries:\n"
+msgstr[0] ""
+"\n"
+"Ð’ ÑÐ²ÑŠÑ€Ð·Ð°Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð» '%s', раздел Ñ Ð¾Ñ‚Ð¼ÐµÑтване 0x%lx Ñъдържа %lu запиÑ:\n"
+msgstr[1] ""
+"\n"
+"Ð’ ÑÐ²ÑŠÑ€Ð·Ð°Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð» '%s', раздел Ñ Ð¾Ñ‚Ð¼ÐµÑтване 0x%lx Ñъдържат %lu запиÑа:\n"
+
+#: readelf.c:11295
#, c-format
msgid ""
"\n"
@@ -8192,87 +9122,98 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: readelf.c:10489
+#: readelf.c:11302
#, c-format
msgid " Tag Type Name/Value\n"
msgstr ""
-#: readelf.c:10523
+#: readelf.c:11336
#, c-format
msgid "Auxiliary library"
msgstr ""
-#: readelf.c:10527
+#: readelf.c:11340
#, c-format
msgid "Filter library"
msgstr ""
-#: readelf.c:10531
+#: readelf.c:11344
#, c-format
msgid "Configuration file"
msgstr ""
-#: readelf.c:10535
+#: readelf.c:11348
#, c-format
msgid "Dependency audit library"
msgstr ""
-#: readelf.c:10539
+#: readelf.c:11352
#, c-format
msgid "Audit library"
msgstr ""
-#: readelf.c:10558 readelf.c:10586 readelf.c:10614
+#: readelf.c:11371 readelf.c:11399 readelf.c:11427 readelf.c:11767
#, c-format
msgid "Flags:"
msgstr ""
-#: readelf.c:10561 readelf.c:10589 readelf.c:10616
+#: readelf.c:11374 readelf.c:11402 readelf.c:11429 readelf.c:11769
#, c-format
msgid " None\n"
msgstr ""
-#: readelf.c:10822
+#: readelf.c:11636
#, c-format
msgid "Shared library: [%s]"
msgstr ""
-#: readelf.c:10825
+#: readelf.c:11640
#, c-format
msgid " program interpreter"
msgstr ""
-#: readelf.c:10829
+#: readelf.c:11644
#, c-format
msgid "Library soname: [%s]"
msgstr ""
-#: readelf.c:10833
+#: readelf.c:11648
#, c-format
msgid "Library rpath: [%s]"
msgstr ""
-#: readelf.c:10837
+#: readelf.c:11652
#, c-format
msgid "Library runpath: [%s]"
msgstr ""
-#: readelf.c:10871
+#: readelf.c:11689
#, c-format
msgid " (bytes)\n"
msgstr ""
-#: readelf.c:10901
+#: readelf.c:11720
#, c-format
msgid "Not needed object: [%s]\n"
msgstr ""
-#: readelf.c:10926
+#: readelf.c:11745
#, c-format
msgid "<corrupt time val: %lx"
msgstr ""
-#: readelf.c:11046
+#: readelf.c:11888
+#, c-format
+msgid ""
+"\n"
+"In linked file '%s' the version definition section '%s' contains %u entry:\n"
+msgid_plural ""
+"\n"
+"In linked file '%s' the version definition section '%s' contains %u entries:\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#: readelf.c:11895
#, c-format
msgid ""
"\n"
@@ -8283,71 +9224,82 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: readelf.c:11054 readelf.c:11192 readelf.c:11349
+#: readelf.c:11903 readelf.c:12050 readelf.c:12216
#, c-format
msgid " Addr: 0x"
msgstr ""
-#: readelf.c:11056 readelf.c:11194 readelf.c:11351
+#: readelf.c:11905 readelf.c:12052 readelf.c:12218
#, c-format
msgid " Offset: %#08lx Link: %u (%s)\n"
msgstr ""
-#: readelf.c:11062
+#: readelf.c:11911
msgid "version definition section"
msgstr ""
-#: readelf.c:11091
+#: readelf.c:11940
#, c-format
msgid " %#06lx: Rev: %d Flags: %s"
msgstr ""
-#: readelf.c:11094
+#: readelf.c:11943
#, c-format
msgid " Index: %d Cnt: %d "
msgstr ""
-#: readelf.c:11111
+#: readelf.c:11960
#, c-format
msgid "Name: %s\n"
msgstr ""
-#: readelf.c:11114
+#: readelf.c:11963
#, c-format
msgid "Name index: %ld\n"
msgstr ""
-#: readelf.c:11123
+#: readelf.c:11972
#, c-format
msgid "Invalid vda_next field of %lx\n"
msgstr ""
-#: readelf.c:11143
+#: readelf.c:11992
#, c-format
msgid " %#06lx: Parent %d: %s\n"
msgstr ""
-#: readelf.c:11147
+#: readelf.c:11996
#, c-format
msgid " %#06lx: Parent %d, name index: %ld\n"
msgstr ""
-#: readelf.c:11152
+#: readelf.c:12001
#, c-format
msgid " Version def aux past end of section\n"
msgstr ""
-#: readelf.c:11159
+#: readelf.c:12008
#, c-format
msgid "Invalid vd_next field of %lx\n"
msgstr ""
-#: readelf.c:11170
+#: readelf.c:12019
#, c-format
msgid " Version definition past end of section\n"
msgstr ""
-#: readelf.c:11185
+#: readelf.c:12035
+#, c-format
+msgid ""
+"\n"
+"In linked file '%s' the version needs section '%s' contains %u entry:\n"
+msgid_plural ""
+"\n"
+"In linked file '%s' the version needs section '%s' contains %u entries:\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#: readelf.c:12042
#, c-format
msgid ""
"\n"
@@ -8358,68 +9310,79 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: readelf.c:11201
+#: readelf.c:12059
msgid "Version Needs section"
msgstr ""
-#: readelf.c:11226
+#: readelf.c:12084
#, c-format
msgid " %#06lx: Version: %d"
msgstr " %#06lx: ВерÑиÑ: %d"
-#: readelf.c:11229
+#: readelf.c:12087
#, c-format
msgid " File: %s"
msgstr " Файл: %s"
-#: readelf.c:11232
+#: readelf.c:12090
#, c-format
msgid " File: %lx"
msgstr " Файл: %lx"
-#: readelf.c:11234
+#: readelf.c:12092
#, c-format
msgid " Cnt: %d\n"
msgstr ""
-#: readelf.c:11257
+#: readelf.c:12115
#, c-format
msgid " %#06lx: Name: %s"
msgstr " %#06lx: Име: %s"
-#: readelf.c:11260
+#: readelf.c:12118
#, c-format
msgid " %#06lx: Name index: %lx"
msgstr ""
-#: readelf.c:11263
+#: readelf.c:12121
#, c-format
msgid " Flags: %s Version: %d\n"
msgstr ""
-#: readelf.c:11269
+#: readelf.c:12127
#, c-format
msgid "Invalid vna_next field of %lx\n"
msgstr ""
-#: readelf.c:11282
-msgid "Missing Version Needs auxillary information\n"
+#: readelf.c:12140
+msgid "Missing Version Needs auxiliary information\n"
msgstr ""
-#: readelf.c:11287
+#: readelf.c:12145
#, c-format
msgid "Invalid vn_next field of %lx\n"
msgstr ""
-#: readelf.c:11297
+#: readelf.c:12155
msgid "Missing Version Needs information\n"
msgstr ""
-#: readelf.c:11335
+#: readelf.c:12193
msgid "version string table"
msgstr ""
-#: readelf.c:11342
+#: readelf.c:12201
+#, c-format
+msgid ""
+"\n"
+"In linked file '%s' the version symbols section '%s' contains %lu entry:\n"
+msgid_plural ""
+"\n"
+"In linked file '%s' the version symbols section '%s' contains %lu entries:\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#: readelf.c:12208
#, c-format
msgid ""
"\n"
@@ -8430,102 +9393,227 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: readelf.c:11360
+#: readelf.c:12227
msgid "version symbol data"
msgstr ""
-#: readelf.c:11380
+#: readelf.c:12247
msgid "*invalid*"
msgstr "*неправилен*"
-#: readelf.c:11388
+#: readelf.c:12255
msgid " 0 (*local*) "
msgstr ""
-#: readelf.c:11392
+#: readelf.c:12259
msgid " 1 (*global*) "
msgstr ""
-#: readelf.c:11403
+#: readelf.c:12270
msgid "invalid index into symbol array\n"
msgstr ""
-#: readelf.c:11426 readelf.c:11992
+#: readelf.c:12293 readelf.c:12890
msgid "version need"
msgstr ""
-#: readelf.c:11437
+#: readelf.c:12304
msgid "version need aux (2)"
msgstr ""
-#: readelf.c:11484 readelf.c:11936
+#: readelf.c:12351 readelf.c:12834
msgid "version def"
msgstr ""
-#: readelf.c:11512 readelf.c:11967
+#: readelf.c:12379 readelf.c:12865
msgid "version def aux"
msgstr ""
-#: readelf.c:11520
+#: readelf.c:12387
msgid "*both*"
msgstr ""
-#: readelf.c:11550
+#: readelf.c:12419
+#, c-format
+msgid ""
+"\n"
+"No version information found in linked file '%s'.\n"
+msgstr ""
+
+#: readelf.c:12422
#, c-format
msgid ""
"\n"
"No version information found in this file.\n"
msgstr ""
-#: readelf.c:11645
+#: readelf.c:12518
#, c-format
msgid "Unrecognized visibility value: %u\n"
msgstr "Ðеразпозната ÑтойноÑÑ‚ за видимоÑÑ‚: %u\n"
-#: readelf.c:11658
+#: readelf.c:12531
#, c-format
msgid "Unrecognized alpha specific other value: %u\n"
msgstr ""
-#: readelf.c:11735
+#: readelf.c:12608
#, c-format
msgid "Unrecognized IA64 VMS ST Function type: %d\n"
msgstr ""
-#: readelf.c:11759
+#: readelf.c:12632
#, c-format
msgid "Unrecognized IA64 VMS ST Linkage: %d\n"
msgstr ""
-#: readelf.c:11785
+#: readelf.c:12658
#, c-format
msgid "<localentry>: %d"
msgstr ""
-#: readelf.c:11825
+#: readelf.c:12672
+msgid " VARIANT_CC"
+msgstr ""
+
+#: readelf.c:12723
#, c-format
msgid "<other>: %x"
msgstr ""
-#: readelf.c:11865
+#: readelf.c:12763
#, c-format
msgid "bad section index[%3d]"
msgstr ""
-#: readelf.c:11898
+#: readelf.c:12796
msgid "version data"
msgstr ""
-#: readelf.c:12010
+#: readelf.c:12908
msgid "version need aux (3)"
msgstr ""
-#: readelf.c:12125
+#: readelf.c:13062
#, c-format
msgid "local symbol %lu found at index >= %s's sh_info value of %u\n"
msgstr ""
-#: readelf.c:12146
+#: readelf.c:13081
+#, c-format
+msgid "Unknown LTO symbol definition encountered: %u\n"
+msgstr ""
+
+#: readelf.c:13100
+#, c-format
+msgid "Unknown LTO symbol visibility encountered: %u\n"
+msgstr ""
+
+#: readelf.c:13118
+#, c-format
+msgid "Unknown LTO symbol type encountered: %u\n"
+msgstr ""
+
+#: readelf.c:13134
+#, c-format
+msgid ""
+"\n"
+"The LTO Symbol table section '%s' in linked file '%s' is empty!\n"
+msgstr ""
+
+#: readelf.c:13138
+#, c-format
+msgid ""
+"\n"
+"LTO Symbol table '%s' is empty!\n"
+msgstr ""
+"\n"
+" Таблицата '%s', Ñ LTO-имена, е празна!\n"
+
+#: readelf.c:13153
+msgid "LTO symbols"
+msgstr "LTO-имена"
+
+#: readelf.c:13171
+#, c-format
+msgid "LTO Symbol extension table '%s' is empty!\n"
+msgstr ""
+
+#: readelf.c:13177
+msgid "LTO ext symbol data"
+msgstr ""
+
+#: readelf.c:13182
+msgid "Unexpected version number in symbol extension table\n"
+msgstr ""
+
+#: readelf.c:13191
+#, c-format
+msgid ""
+"\n"
+"In linked file '%s': "
+msgstr ""
+"\n"
+"Ð’ ÑÐ²ÑŠÑ€Ð·Ð°Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð»: %s"
+
+#: readelf.c:13198
+#, c-format
+msgid "LTO Symbol table '%s' and extension table '%s' contain:\n"
+msgstr ""
+
+#: readelf.c:13203
+#, c-format
+msgid "LTO Symbol table '%s'\n"
+msgstr ""
+
+#: readelf.c:13205
+#, c-format
+msgid " and extension table '%s' contain:\n"
+msgstr ""
+
+#: readelf.c:13210
+#, c-format
+msgid "LTO Symbol table '%s' contains:\n"
+msgstr "Таблицата '%s' Ñ LTO-имена Ñъдържа:\n"
+
+#: readelf.c:13215
+#, c-format
+msgid " Comdat_Key Kind Visibility Size Slot Type Section Name\n"
+msgstr ""
+
+#: readelf.c:13217
+#, c-format
+msgid " Comdat_Key Kind Visibility Size Slot Name\n"
+msgstr ""
+
+#: readelf.c:13264
+msgid "Ran out of LTO symbol extension data\n"
+msgstr ""
+
+#: readelf.c:13284
+msgid "Data remains in the LTO symbol extension table\n"
+msgstr ""
+
+#: readelf.c:13294
+msgid "Buffer overrun encountered whilst decoding LTO symbol table\n"
+msgstr ""
+
+#: readelf.c:13346
+#, c-format
+msgid ""
+"\n"
+"In linked file '%s' the dynamic symbol table contains %lu entry:\n"
+msgid_plural ""
+"\n"
+"In linked file '%s' the dynamic symbol table contains %lu entries:\n"
+msgstr[0] ""
+"\n"
+"Ð’ ÑÐ²ÑŠÑ€Ð·Ð°Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð» '%s', таблицата Ñ Ð¸Ð¼ÐµÐ½Ð° Ñъдържа %lu запиÑ:\n"
+msgstr[1] ""
+"\n"
+"Ð’ ÑÐ²ÑŠÑ€Ð·Ð°Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð» '%s', таблицата Ñ Ð¸Ð¼ÐµÐ½Ð° Ñъдържа %lu запиÑа:\n"
+
+#: readelf.c:13354
#, c-format
msgid ""
"\n"
@@ -8540,24 +9628,47 @@ msgstr[1] ""
"\n"
"Таблицата Ñ Ð¸Ð¼ÐµÐ½Ð° Ñъдържа %lu запиÑа:\n"
-#: readelf.c:12151 readelf.c:12195
+#: readelf.c:13360 readelf.c:13413
#, c-format
msgid " Num: Value Size Type Bind Vis Ndx Name\n"
msgstr ""
-#: readelf.c:12153 readelf.c:12197
+#: readelf.c:13362 readelf.c:13415
#, c-format
msgid " Num: Value Size Type Bind Vis Ndx Name\n"
msgstr ""
-#: readelf.c:12182
+#: readelf.c:13391
#, c-format
msgid ""
"\n"
"Symbol table '%s' has a sh_entsize of zero!\n"
msgstr ""
+"\n"
+"Таблицата Ñ ÐµÐ¼ÐµÐ½Ð° '%s' е Ñ Ð½ÑƒÐ»ÐµÐ²Ð° ÑтойноÑÑ‚ за sh_entsize!\n"
-#: readelf.c:12188
+#: readelf.c:13399
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "In linked file '%s' symbol section '%s' contains %lu entry:\n"
+#| msgid_plural ""
+#| "\n"
+#| "In linked file '%s' symbol section '%s' contains %lu entries:\n"
+msgid ""
+"\n"
+"In linked file '%s' symbol section '%s' contains %lu entry:\n"
+msgid_plural ""
+"\n"
+"In linked file '%s' symbol section '%s' contains %lu entries:\n"
+msgstr[0] ""
+"\n"
+"Ð’ ÑÐ²ÑŠÑ€Ð·Ð°Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð» '%s', разделът '%s' Ñъдържа %d запиÑ:\n"
+msgstr[1] ""
+"\n"
+"Ð’ ÑÐ²ÑŠÑ€Ð·Ð°Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð» '%s', разделът '%s' Ñъдържа %d запиÑа:\n"
+
+#: readelf.c:13406
#, c-format
msgid ""
"\n"
@@ -8568,14 +9679,14 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: readelf.c:12231
+#: readelf.c:13449
#, c-format
msgid ""
"\n"
"Dynamic symbol information is not available for displaying symbols.\n"
msgstr ""
-#: readelf.c:12244
+#: readelf.c:13462
#, c-format
msgid ""
"\n"
@@ -8586,24 +9697,24 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: readelf.c:12255
+#: readelf.c:13473
msgid "Out of memory allocating space for histogram buckets\n"
msgstr ""
-#: readelf.c:12261 readelf.c:12339
+#: readelf.c:13479 readelf.c:13557
#, c-format
msgid " Length Number %% of total Coverage\n"
msgstr ""
-#: readelf.c:12271
+#: readelf.c:13489
msgid "histogram chain is corrupt\n"
msgstr ""
-#: readelf.c:12283
+#: readelf.c:13501
msgid "Out of memory allocating space for histogram counts\n"
msgstr ""
-#: readelf.c:12323
+#: readelf.c:13541
#, c-format
msgid ""
"\n"
@@ -8614,15 +9725,26 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: readelf.c:12335
+#: readelf.c:13553
msgid "Out of memory allocating space for gnu histogram buckets\n"
msgstr ""
-#: readelf.c:12362
+#: readelf.c:13580
msgid "Out of memory allocating space for gnu histogram counts\n"
msgstr ""
-#: readelf.c:12428
+#: readelf.c:13646
+#, c-format
+msgid ""
+"\n"
+"In linked file '%s: the dynamic info segment at offset 0x%lx contains %d entry:\n"
+msgid_plural ""
+"\n"
+"In linked file '%s: the dynamic info segment at offset 0x%lx contains %d entries:\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#: readelf.c:13653
#, c-format
msgid ""
"\n"
@@ -8633,180 +9755,213 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: readelf.c:12435
+#: readelf.c:13661
#, c-format
msgid " Num: Name BoundTo Flags\n"
msgstr ""
-#: readelf.c:12442
+#: readelf.c:13668
#, c-format
msgid "<corrupt index>"
msgstr "<повреден азбучник>"
-#: readelf.c:12447
+#: readelf.c:13673
#, c-format
msgid "<corrupt: %19ld>"
msgstr ""
-#: readelf.c:12542
+#: readelf.c:13770
#, c-format
msgid "MSP430 SYM_DIFF reloc contains invalid symbol index %lu\n"
msgstr ""
-#: readelf.c:12571
+#: readelf.c:13817
+#, c-format
+msgid "MSP430 ULEB128 field at 0x%lx contains invalid ULEB128 value\n"
+msgstr ""
+
+#: readelf.c:13821
#, c-format
msgid "MSP430 reloc contains invalid symbol index %lu\n"
msgstr ""
#. PR 21137
-#: readelf.c:12582
+#: readelf.c:13832
#, c-format
msgid "MSP430 sym diff reloc contains invalid offset: 0x%lx\n"
msgstr ""
-#: readelf.c:12593
+#: readelf.c:13843
msgid "Unhandled MSP430 reloc type found after SYM_DIFF reloc\n"
msgstr ""
-#: readelf.c:12616
+#: readelf.c:13866
#, c-format
msgid "MN10300_SYM_DIFF reloc contains invalid symbol index %lu\n"
msgstr ""
-#: readelf.c:12630
+#: readelf.c:13880
#, c-format
msgid "MN10300 reloc contains invalid symbol index %lu\n"
msgstr ""
-#: readelf.c:12640
+#: readelf.c:13890
#, c-format
msgid "MN10300 sym diff reloc contains invalid offset: 0x%lx\n"
msgstr ""
-#: readelf.c:12650
+#: readelf.c:13900
msgid "Unhandled MN10300 reloc type found after SYM_DIFF reloc\n"
msgstr ""
-#: readelf.c:12673
+#: readelf.c:13923
#, c-format
msgid "RL78_SYM reloc contains invalid symbol index %lu\n"
msgstr ""
-#: readelf.c:12692 readelf.c:12701
+#: readelf.c:13942 readelf.c:13951
#, c-format
msgid "RL78 sym diff reloc contains invalid offset: 0x%lx\n"
msgstr ""
-#: readelf.c:12920
+#: readelf.c:14172
#, c-format
msgid "Missing knowledge of 32-bit reloc types used in DWARF sections of machine number %d\n"
msgstr ""
-#: readelf.c:13603
+#: readelf.c:14857
#, c-format
msgid "unable to apply unsupported reloc type %d to section %s\n"
msgstr ""
-#: readelf.c:13612
+#: readelf.c:14866
#, c-format
msgid "skipping invalid relocation offset 0x%lx in section %s\n"
msgstr ""
-#: readelf.c:13621
+#: readelf.c:14875
#, c-format
msgid "skipping invalid relocation symbol index 0x%lx in section %s\n"
msgstr ""
-#: readelf.c:13644
+#: readelf.c:14898
#, c-format
msgid "skipping unexpected symbol type %s in section %s relocation %ld\n"
msgstr ""
-#: readelf.c:13721
+#: readelf.c:14975
#, c-format
msgid ""
"\n"
"Assembly dump of section %s\n"
msgstr ""
-#: readelf.c:13739
+#: readelf.c:14993
#, c-format
msgid "Section '%s' has no data to dump.\n"
msgstr "Ð’ раздел '%s' липÑват данни за разтоварване.\n"
-#: readelf.c:13745
+#: readelf.c:14999
msgid "section contents"
msgstr "Ñъдържание на раздел"
-#: readelf.c:13820
+#: readelf.c:15075
+#, c-format
+msgid ""
+"\n"
+"String dump of section '%s' in linked file %s:\n"
+msgstr ""
+
+#: readelf.c:15079
#, c-format
msgid ""
"\n"
"String dump of section '%s':\n"
msgstr ""
-#: readelf.c:13840 readelf.c:14056 readelf.c:14438
+#: readelf.c:15100 readelf.c:15316 readelf.c:15703
#, c-format
msgid "section '%s' has unsupported compress type: %d\n"
msgstr ""
-#: readelf.c:13872 readelf.c:14090 readelf.c:14475
+#: readelf.c:15132 readelf.c:15350 readelf.c:15740
#, c-format
msgid "Unable to decompress section %s\n"
msgstr ""
-#: readelf.c:13897
+#: readelf.c:15157
#, c-format
msgid " Note: This section has relocations against it, but these have NOT been applied to this dump.\n"
msgstr ""
-#: readelf.c:13996 readelf.c:15432 readelf.c:15472 readelf.c:15510
-#: readelf.c:15557 readelf.c:15588 readelf.c:17088 readelf.c:17120
+#: readelf.c:15250 readelf.c:16726 readelf.c:16766 readelf.c:16804
+#: readelf.c:16851 readelf.c:16882 readelf.c:18488 readelf.c:18520
#, c-format
msgid "<corrupt>\n"
msgstr "<повреден>\n"
-#: readelf.c:14004
+#: readelf.c:15258
#, c-format
msgid " No strings found in this section."
msgstr ""
-#: readelf.c:14036
+#: readelf.c:15291
+#, c-format
+msgid ""
+"\n"
+"Hex dump of section '%s' in linked file %s:\n"
+msgstr ""
+"\n"
+"ШеÑтнайÑетично разтоварване на раздел '%s' от ÑÐ²ÑŠÑ€Ð·Ð°Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð» %s:\n"
+
+#: readelf.c:15295
#, c-format
msgid ""
"\n"
"Hex dump of section '%s':\n"
msgstr ""
+"\n"
+"ШеÑтнайÑетично разтоварване на раздел '%s':\n"
-#: readelf.c:14123
+#: readelf.c:15383
#, c-format
msgid " NOTE: This section has relocations against it, but these have NOT been applied to this dump.\n"
msgstr ""
-#: readelf.c:14289
+#: readelf.c:15525
+#, c-format
+msgid "Iteration failed: %s, %s\n"
+msgstr ""
+
+#: readelf.c:15569
#, c-format
msgid "No symbol section named %s\n"
msgstr "ЛипÑва раздел за имена Ñ Ð¸Ð¼Ðµ '%s'\n"
-#: readelf.c:14304
+#: readelf.c:15585
#, c-format
msgid "No string table section named %s\n"
msgstr "ЛипÑва раздел за таблица Ñ Ð½Ð¸Ð·Ð¾Ð²Ðµ Ñ Ð¸Ð¼Ðµ '%s'\n"
-#: readelf.c:14311
+#: readelf.c:15592
msgid "strings"
msgstr "низове"
-#: readelf.c:14320
+#: readelf.c:15605 readelf.c:15617
#, c-format
-msgid "No CTF parent section named %s\n"
-msgstr ""
+msgid "CTF open failure: %s\n"
+msgstr "Пропадна отварÑнето на CTF: %s\n"
-#: readelf.c:14326
-msgid "CTF parent"
+#: readelf.c:15624
+#, c-format
+msgid ""
+"\n"
+"Dump of CTF section '%s' in linked file %s:\n"
msgstr ""
+"\n"
+"Разтоварване на CTF раздел '%s' от ÑÐ²ÑŠÑ€Ð·Ð°Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð» %s:\n"
-#: readelf.c:14366
+#: readelf.c:15628
#, c-format
msgid ""
"\n"
@@ -8815,22 +9970,27 @@ msgstr ""
"\n"
"Разтоварване на CTF раздел '%s':\n"
-#: readelf.c:14401
+#: readelf.c:15636
+#, c-format
+msgid "CTF member open failure: %s\n"
+msgstr "Пропадна отварÑнето на CTF член: %s\n"
+
+#: readelf.c:15667
#, c-format
msgid "%s section data"
msgstr "данни за раздел '%s'"
-#: readelf.c:14425
+#: readelf.c:15690
#, c-format
msgid "compressed section %s is too small to contain a compression header\n"
msgstr "Ð¡Ð³ÑŠÐ½Ð°Ñ‚Ð¸Ñ Ñ€Ð°Ð·Ð´ÐµÐ», %s, е твърде малък за Ñъдържанието на заглавие\n"
-#: readelf.c:14551 readelf.c:14578 readelf.c:14603
+#: readelf.c:15816 readelf.c:15843 readelf.c:15868
#, c-format
msgid "malformed note encountered in section %s whilst scanning for build-id note\n"
msgstr ""
-#: readelf.c:14727
+#: readelf.c:15993
#, c-format
msgid ""
"\n"
@@ -8841,548 +10001,548 @@ msgstr ""
#. which has the NOBITS type - the bits in the file will be random.
#. This can happen when a file containing a .eh_frame section is
#. stripped with the --only-keep-debug command line option.
-#: readelf.c:14736
+#: readelf.c:16002
#, c-format
msgid "section '%s' has the NOBITS type - its contents are unreliable.\n"
msgstr ""
-#: readelf.c:14786
+#: readelf.c:16052
#, c-format
msgid "Unrecognized debug section: %s\n"
msgstr ""
-#: readelf.c:14814
+#: readelf.c:16082
#, c-format
-msgid "Section '%s' was not dumped because it does not exist!\n"
+msgid "Section '%s' was not dumped because it does not exist\n"
msgstr ""
-#: readelf.c:14883
+#: readelf.c:16155
#, c-format
msgid "Section %d was not dumped because it does not exist!\n"
msgstr ""
-#: readelf.c:14940
+#: readelf.c:16211
msgid "<corrupt tag>\n"
msgstr "<повредена отметка>\n"
-#: readelf.c:14955
+#: readelf.c:16226
#, c-format
msgid "<corrupt string tag>"
msgstr " <повредена низова отметка>"
-#: readelf.c:14989
+#: readelf.c:16260
#, c-format
msgid "Absent/Non standard\n"
msgstr ""
-#: readelf.c:14992
+#: readelf.c:16263
#, c-format
msgid "Bare metal/mwdt\n"
msgstr ""
-#: readelf.c:14995
+#: readelf.c:16266
#, c-format
msgid "Bare metal/newlib\n"
msgstr ""
-#: readelf.c:14998
+#: readelf.c:16269
#, c-format
msgid "Linux/uclibc\n"
msgstr ""
-#: readelf.c:15001
+#: readelf.c:16272
#, c-format
msgid "Linux/glibc\n"
msgstr ""
-#: readelf.c:15004 readelf.c:15083
+#: readelf.c:16275 readelf.c:16354
#, c-format
msgid "Unknown\n"
msgstr "ÐеизвеÑтен\n"
-#: readelf.c:15016 readelf.c:15046 readelf.c:15074
+#: readelf.c:16287 readelf.c:16317 readelf.c:16345
#, c-format
msgid "Absent\n"
msgstr "ЛипÑващ\n"
-#: readelf.c:15058
+#: readelf.c:16329
msgid "yes"
msgstr "да"
-#: readelf.c:15058
+#: readelf.c:16329
msgid "no"
msgstr "не"
-#: readelf.c:15095 readelf.c:15102
+#: readelf.c:16366 readelf.c:16373
msgid "default"
msgstr "подразбиране"
-#: readelf.c:15096
+#: readelf.c:16367
msgid "smallest"
msgstr "най-малък"
-#: readelf.c:15101
+#: readelf.c:16372
msgid "OPTFP"
msgstr ""
-#: readelf.c:15299 readelf.c:15312 readelf.c:15330 readelf.c:15851
-#: readelf.c:16130 readelf.c:16142 readelf.c:16154
+#: readelf.c:16593 readelf.c:16606 readelf.c:16624 readelf.c:17145
+#: readelf.c:17424 readelf.c:17436 readelf.c:17448
#, c-format
msgid "None\n"
msgstr "Ðищо\n"
-#: readelf.c:15300
+#: readelf.c:16594
#, c-format
msgid "Application\n"
msgstr "Приложение\n"
-#: readelf.c:15301
+#: readelf.c:16595
#, c-format
msgid "Realtime\n"
msgstr ""
-#: readelf.c:15302
+#: readelf.c:16596
#, c-format
msgid "Microcontroller\n"
msgstr ""
-#: readelf.c:15303
+#: readelf.c:16597
#, c-format
msgid "Application or Realtime\n"
msgstr ""
-#: readelf.c:15313 readelf.c:15332 readelf.c:15903 readelf.c:15920
-#: readelf.c:15991 readelf.c:16011 readelf.c:18592
+#: readelf.c:16607 readelf.c:16626 readelf.c:17197 readelf.c:17214
+#: readelf.c:17285 readelf.c:17305 readelf.c:20136
#, c-format
msgid "8-byte\n"
msgstr "8-байта\n"
-#: readelf.c:15314 readelf.c:15994 readelf.c:16014 readelf.c:18591
+#: readelf.c:16608 readelf.c:17288 readelf.c:17308 readelf.c:20135
#, c-format
msgid "4-byte\n"
msgstr "4-байта\n"
-#: readelf.c:15318 readelf.c:15336
+#: readelf.c:16612 readelf.c:16630
#, c-format
msgid "8-byte and up to %d-byte extended\n"
msgstr ""
-#: readelf.c:15331
+#: readelf.c:16625
#, c-format
msgid "8-byte, except leaf SP\n"
msgstr ""
-#: readelf.c:15347 readelf.c:15429 readelf.c:16029
+#: readelf.c:16641 readelf.c:16723 readelf.c:17323
#, c-format
msgid "flag = %d, vendor = "
msgstr ""
-#: readelf.c:15368
+#: readelf.c:16662
#, c-format
msgid "True\n"
msgstr "ИÑтина\n"
-#: readelf.c:15388
+#: readelf.c:16682
#, c-format
msgid "<unknown: %d>\n"
msgstr "<неизвеÑтен: %d>\n"
-#: readelf.c:15433
+#: readelf.c:16727
msgid "corrupt vendor attribute\n"
msgstr ""
-#: readelf.c:15483
+#: readelf.c:16777
#, c-format
msgid "unspecified hard/soft float\n"
msgstr ""
-#: readelf.c:15486
+#: readelf.c:16780
#, c-format
msgid "hard float\n"
msgstr ""
-#: readelf.c:15489
+#: readelf.c:16783
#, c-format
msgid "soft float\n"
msgstr ""
-#: readelf.c:15521
+#: readelf.c:16815
#, c-format
msgid "unspecified hard/soft float, "
msgstr ""
-#: readelf.c:15524
+#: readelf.c:16818
#, c-format
msgid "hard float, "
msgstr ""
-#: readelf.c:15527
+#: readelf.c:16821
#, c-format
msgid "soft float, "
msgstr ""
-#: readelf.c:15530
+#: readelf.c:16824
#, c-format
msgid "single-precision hard float, "
msgstr ""
-#: readelf.c:15537
+#: readelf.c:16831
#, c-format
msgid "unspecified long double\n"
msgstr ""
-#: readelf.c:15540
+#: readelf.c:16834
#, c-format
msgid "128-bit IBM long double\n"
msgstr ""
-#: readelf.c:15543
+#: readelf.c:16837
#, c-format
msgid "64-bit long double\n"
msgstr ""
-#: readelf.c:15546
+#: readelf.c:16840
#, c-format
msgid "128-bit IEEE long double\n"
msgstr ""
-#: readelf.c:15568 readelf.c:15599
+#: readelf.c:16862 readelf.c:16893
#, c-format
msgid "unspecified\n"
msgstr ""
-#: readelf.c:15571
+#: readelf.c:16865
#, c-format
msgid "generic\n"
msgstr ""
-#: readelf.c:15605
+#: readelf.c:16899
#, c-format
msgid "memory\n"
msgstr "памет\n"
-#: readelf.c:15632
+#: readelf.c:16926
#, c-format
msgid "any\n"
msgstr ""
-#: readelf.c:15635
+#: readelf.c:16929
#, c-format
msgid "software\n"
msgstr ""
-#: readelf.c:15638
+#: readelf.c:16932
#, c-format
msgid "hardware\n"
msgstr ""
-#: readelf.c:15761
+#: readelf.c:17055
#, c-format
msgid "Hard or soft float\n"
msgstr ""
-#: readelf.c:15764
+#: readelf.c:17058
#, c-format
msgid "Hard float (double precision)\n"
msgstr ""
-#: readelf.c:15767
+#: readelf.c:17061
#, c-format
msgid "Hard float (single precision)\n"
msgstr ""
-#: readelf.c:15770
+#: readelf.c:17064
#, c-format
msgid "Soft float\n"
msgstr ""
-#: readelf.c:15773
+#: readelf.c:17067
#, c-format
msgid "Hard float (MIPS32r2 64-bit FPU 12 callee-saved)\n"
msgstr ""
-#: readelf.c:15776
+#: readelf.c:17070
#, c-format
msgid "Hard float (32-bit CPU, Any FPU)\n"
msgstr ""
-#: readelf.c:15779
+#: readelf.c:17073
#, c-format
msgid "Hard float (32-bit CPU, 64-bit FPU)\n"
msgstr ""
-#: readelf.c:15782
+#: readelf.c:17076
#, c-format
msgid "Hard float compat (32-bit CPU, 64-bit FPU)\n"
msgstr ""
-#: readelf.c:15785
+#: readelf.c:17079
#, c-format
msgid "NaN 2008 compatibility\n"
msgstr ""
-#: readelf.c:15818
+#: readelf.c:17112
#, c-format
msgid "Any MSA or not\n"
msgstr ""
-#: readelf.c:15821
+#: readelf.c:17115
#, c-format
msgid "128-bit MSA\n"
msgstr ""
-#: readelf.c:15883
+#: readelf.c:17177
#, c-format
msgid "Not used\n"
msgstr ""
-#: readelf.c:15886
+#: readelf.c:17180
#, c-format
msgid "2 bytes\n"
msgstr ""
-#: readelf.c:15889
+#: readelf.c:17183
#, c-format
msgid "4 bytes\n"
msgstr ""
-#: readelf.c:15906 readelf.c:15923 readelf.c:15997 readelf.c:16017
+#: readelf.c:17200 readelf.c:17217 readelf.c:17291 readelf.c:17311
#, c-format
msgid "16-byte\n"
msgstr ""
-#: readelf.c:15937
+#: readelf.c:17231
#, c-format
msgid "DSBT addressing not used\n"
msgstr ""
-#: readelf.c:15940
+#: readelf.c:17234
#, c-format
msgid "DSBT addressing used\n"
msgstr ""
-#: readelf.c:15954
+#: readelf.c:17248
#, c-format
msgid "Data addressing position-dependent\n"
msgstr ""
-#: readelf.c:15957
+#: readelf.c:17251
#, c-format
msgid "Data addressing position-independent, GOT near DP\n"
msgstr ""
-#: readelf.c:15960
+#: readelf.c:17254
#, c-format
msgid "Data addressing position-independent, GOT far from DP\n"
msgstr ""
-#: readelf.c:15974
+#: readelf.c:17268
#, c-format
msgid "Code addressing position-dependent\n"
msgstr ""
-#: readelf.c:15977
+#: readelf.c:17271
#, c-format
msgid "Code addressing position-independent\n"
msgstr ""
-#: readelf.c:16131
+#: readelf.c:17425
#, c-format
msgid "MSP430\n"
msgstr ""
-#: readelf.c:16132
+#: readelf.c:17426
#, c-format
msgid "MSP430X\n"
msgstr ""
-#: readelf.c:16143 readelf.c:16155
+#: readelf.c:17437 readelf.c:17449
#, c-format
msgid "Small\n"
msgstr ""
-#: readelf.c:16144 readelf.c:16156
+#: readelf.c:17438 readelf.c:17450
#, c-format
msgid "Large\n"
msgstr ""
-#: readelf.c:16157
+#: readelf.c:17451
#, c-format
msgid "Restricted Large\n"
msgstr ""
-#: readelf.c:16163
+#: readelf.c:17457
#, c-format
msgid " <unknown tag %d>: "
msgstr " <неизвеÑтна отметка %d>: "
-#: readelf.c:16209
+#: readelf.c:17503
#, c-format
msgid "Any Region\n"
msgstr ""
-#: readelf.c:16212
+#: readelf.c:17506
#, c-format
msgid "Lower Region Only\n"
msgstr ""
-#: readelf.c:16271
+#: readelf.c:17565
#, c-format
msgid "%u\n"
msgstr ""
-#: readelf.c:16278
+#: readelf.c:17572
#, c-format
msgid "No unaligned access\n"
msgstr ""
-#: readelf.c:16281
+#: readelf.c:17575
#, c-format
msgid "Unaligned access\n"
msgstr ""
-#: readelf.c:16287
+#: readelf.c:17581
#, c-format
msgid "%u-bytes\n"
msgstr "%u-байта\n"
-#: readelf.c:16322
+#: readelf.c:17723
msgid "attributes"
msgstr ""
-#: readelf.c:16334
+#: readelf.c:17735
#, c-format
msgid "Unknown attributes version '%c'(%d) - expecting 'A'\n"
msgstr ""
-#: readelf.c:16353
+#: readelf.c:17754
msgid "Tag section ends prematurely\n"
msgstr ""
-#: readelf.c:16362
+#: readelf.c:17763
#, c-format
msgid "Bad attribute length (%u > %u)\n"
msgstr ""
-#: readelf.c:16370
+#: readelf.c:17771
#, c-format
msgid "Attribute length of %u is too small\n"
msgstr ""
-#: readelf.c:16381
+#: readelf.c:17782
msgid "Corrupt attribute section name\n"
msgstr ""
-#: readelf.c:16386
+#: readelf.c:17787
#, c-format
msgid "Attribute Section: "
msgstr ""
-#: readelf.c:16413
+#: readelf.c:17814
msgid "Unused bytes at end of section\n"
msgstr "Ðеизползвани байтове в ÐºÑ€Ð°Ñ Ð½Ð° раздел\n"
-#: readelf.c:16423
+#: readelf.c:17824
#, c-format
msgid "Bad subsection length (%u > %u)\n"
msgstr ""
-#: readelf.c:16431
+#: readelf.c:17832
#, c-format
msgid "Bad subsection length (%u < 6)\n"
msgstr ""
-#: readelf.c:16446
+#: readelf.c:17847
#, c-format
msgid "File Attributes\n"
msgstr ""
-#: readelf.c:16449
+#: readelf.c:17850
#, c-format
msgid "Section Attributes:"
msgstr ""
-#: readelf.c:16452
+#: readelf.c:17853
#, c-format
msgid "Symbol Attributes:"
msgstr ""
-#: readelf.c:16465
+#: readelf.c:17866
#, c-format
msgid "Unknown tag: %d\n"
msgstr ""
-#: readelf.c:16486
+#: readelf.c:17887
#, c-format
msgid " Unknown attribute:\n"
msgstr " Ðепознат признак:\n"
-#: readelf.c:16528
+#: readelf.c:17929
msgid "MIPS GOT entry extends beyond the end of available data\n"
msgstr ""
-#: readelf.c:16611 readelf.c:16680
+#: readelf.c:18012 readelf.c:18081
msgid "Unknown"
msgstr "ÐеизвеÑтен"
-#: readelf.c:16727
+#: readelf.c:18128
msgid "Corrupt MIPS ABI Flags section.\n"
msgstr ""
-#: readelf.c:16733
+#: readelf.c:18134
msgid "MIPS ABI Flags section"
msgstr ""
-#: readelf.c:16792 readelf.c:17375
+#: readelf.c:18193 readelf.c:18775
msgid "Global Offset Table data"
msgstr ""
-#: readelf.c:16796
+#: readelf.c:18197
#, c-format
msgid ""
"\n"
"Static GOT:\n"
msgstr ""
-#: readelf.c:16797 readelf.c:17380
+#: readelf.c:18198 readelf.c:18780
#, c-format
msgid " Canonical gp value: "
msgstr ""
-#: readelf.c:16811 readelf.c:17384 readelf.c:17511
+#: readelf.c:18212 readelf.c:18784 readelf.c:18914
#, c-format
msgid " Reserved entries:\n"
msgstr ""
-#: readelf.c:16812
+#: readelf.c:18213
#, c-format
msgid " %*s %10s %*s\n"
msgstr ""
-#: readelf.c:16813 readelf.c:16843 readelf.c:17386 readelf.c:17414
-#: readelf.c:17432 readelf.c:17513 readelf.c:17522
+#: readelf.c:18214 readelf.c:18244 readelf.c:18786 readelf.c:18814
+#: readelf.c:18832 readelf.c:18916 readelf.c:18925
msgid "Address"
msgstr ""
-#: readelf.c:16813 readelf.c:16843 readelf.c:17386 readelf.c:17414
-#: readelf.c:17433
+#: readelf.c:18214 readelf.c:18244 readelf.c:18786 readelf.c:18814
+#: readelf.c:18833
msgid "Access"
msgstr ""
-#: readelf.c:16814 readelf.c:16844
+#: readelf.c:18215 readelf.c:18245
msgid "Value"
msgstr ""
-#: readelf.c:16841 readelf.c:17412
+#: readelf.c:18242 readelf.c:18812
#, c-format
msgid " Local entries:\n"
msgstr ""
-#: readelf.c:16923 readelf.c:17628
+#: readelf.c:18324 readelf.c:19031
msgid "liblist section data"
msgstr ""
-#: readelf.c:16926
+#: readelf.c:18327
#, c-format
msgid ""
"\n"
@@ -9393,37 +10553,37 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: readelf.c:16930
+#: readelf.c:18331
msgid " Library Time Stamp Checksum Version Flags\n"
msgstr ""
-#: readelf.c:16956
+#: readelf.c:18357
#, c-format
msgid "<corrupt: %9ld>"
msgstr ""
-#: readelf.c:16961
+#: readelf.c:18362
msgid " NONE"
msgstr ""
-#: readelf.c:17012
+#: readelf.c:18412
msgid "No MIPS_OPTIONS header found\n"
msgstr ""
-#: readelf.c:17018
+#: readelf.c:18418
msgid "The MIPS options section is too small.\n"
msgstr "Твърде малък раздел Ñ Ð²ÑŠÐ·Ð¼Ð¾Ð¶Ð½Ð¾Ñти за MIPS.\n"
-#: readelf.c:17023
+#: readelf.c:18423
msgid "options"
msgstr "възможноÑти"
-#: readelf.c:17042
+#: readelf.c:18442
#, c-format
msgid "Invalid size (%u) for MIPS option\n"
msgstr "Ðеправилиен размет от %u за възможноÑÑ‚ на MIPS.\n"
-#: readelf.c:17051
+#: readelf.c:18451
#, c-format
msgid ""
"\n"
@@ -9438,28 +10598,28 @@ msgstr[1] ""
"\n"
"Разделът '%s' Ñъдържа %d запиÑа:\n"
-#: readelf.c:17089 readelf.c:17121
+#: readelf.c:18489 readelf.c:18521
msgid "Truncated MIPS REGINFO option\n"
msgstr ""
-#: readelf.c:17257
+#: readelf.c:18657
msgid "conflict list found without a dynamic symbol table\n"
msgstr ""
-#: readelf.c:17265
+#: readelf.c:18665
#, c-format
msgid "Overlarge number of conflicts detected: %lx\n"
msgstr ""
-#: readelf.c:17273
+#: readelf.c:18673
msgid "Out of memory allocating space for dynamic conflicts\n"
msgstr ""
-#: readelf.c:17283 readelf.c:17301
+#: readelf.c:18683 readelf.c:18701
msgid "conflict"
msgstr ""
-#: readelf.c:17314
+#: readelf.c:18714
#, c-format
msgid ""
"\n"
@@ -9470,123 +10630,123 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: readelf.c:17318
+#: readelf.c:18718
msgid " Num: Index Value Name"
msgstr ""
-#: readelf.c:17325
+#: readelf.c:18725
#, c-format
msgid "<corrupt symbol index>"
msgstr "<повреден азбучник Ñ Ð¸Ð¼ÐµÐ½Ð°>"
-#: readelf.c:17336 readelf.c:17462 readelf.c:17547
+#: readelf.c:18736 readelf.c:18862 readelf.c:18950
#, c-format
msgid "<corrupt: %14ld>"
msgstr "<повреден: %14ld>"
-#: readelf.c:17359
+#: readelf.c:18759
#, c-format
msgid "The GOT symbol offset (%lu) is greater than the symbol table size (%lu)\n"
msgstr ""
-#: readelf.c:17368
+#: readelf.c:18768
#, c-format
msgid "Too many GOT symbols: %lu\n"
msgstr ""
-#: readelf.c:17379
+#: readelf.c:18779
#, c-format
msgid ""
"\n"
"Primary GOT:\n"
msgstr ""
-#: readelf.c:17385
+#: readelf.c:18785
#, c-format
msgid " %*s %10s %*s Purpose\n"
msgstr ""
-#: readelf.c:17387 readelf.c:17415 readelf.c:17434 readelf.c:17513
-#: readelf.c:17523
+#: readelf.c:18787 readelf.c:18815 readelf.c:18834 readelf.c:18916
+#: readelf.c:18926
msgid "Initial"
msgstr ""
-#: readelf.c:17389
+#: readelf.c:18789
#, c-format
msgid " Lazy resolver\n"
msgstr ""
-#: readelf.c:17404
+#: readelf.c:18804
#, c-format
msgid " Module pointer (GNU extension)\n"
msgstr ""
-#: readelf.c:17430
+#: readelf.c:18830
#, c-format
msgid " Global entries:\n"
msgstr ""
-#: readelf.c:17435 readelf.c:17524
+#: readelf.c:18835 readelf.c:18927
msgid "Sym.Val."
msgstr ""
#. Note for translators: "Ndx" = abbreviated form of "Index".
-#: readelf.c:17438 readelf.c:17524
+#: readelf.c:18838 readelf.c:18927
msgid "Ndx"
msgstr ""
-#: readelf.c:17438 readelf.c:17524
+#: readelf.c:18838 readelf.c:18927
msgid "Name"
msgstr ""
-#: readelf.c:17448
+#: readelf.c:18848
#, c-format
msgid "<no dynamic symbols>"
msgstr ""
-#: readelf.c:17465
+#: readelf.c:18865
#, c-format
msgid "<symbol index %lu exceeds number of dynamic symbols>"
msgstr ""
-#: readelf.c:17506
+#: readelf.c:18906
msgid "Procedure Linkage Table data"
msgstr ""
-#: readelf.c:17512
+#: readelf.c:18915
#, c-format
msgid " %*s %*s Purpose\n"
msgstr ""
-#: readelf.c:17515
+#: readelf.c:18918
#, c-format
msgid " PLT lazy resolver\n"
msgstr ""
-#: readelf.c:17517
+#: readelf.c:18920
#, c-format
msgid " Module pointer\n"
msgstr ""
-#: readelf.c:17520
+#: readelf.c:18923
#, c-format
msgid " Entries:\n"
msgstr ""
-#: readelf.c:17534
+#: readelf.c:18937
#, c-format
msgid "<corrupt symbol index: %lu>"
msgstr "<повреден азбучник Ñ Ð¸Ð¼ÐµÐ½Ð°: %lu>"
-#: readelf.c:17573
+#: readelf.c:18976
msgid "NDS32 elf flags section"
msgstr ""
-#: readelf.c:17639
+#: readelf.c:19042
msgid "liblist string table"
msgstr ""
-#: readelf.c:17651
+#: readelf.c:19054
#, c-format
msgid ""
"\n"
@@ -9597,394 +10757,453 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: readelf.c:17657
+#: readelf.c:19060
msgid " Library Time Stamp Checksum Version Flags"
msgstr ""
-#: readelf.c:17707
+#: readelf.c:19110
msgid "NT_AUXV (auxiliary vector)"
msgstr ""
-#: readelf.c:17709
+#: readelf.c:19112
msgid "NT_PRSTATUS (prstatus structure)"
msgstr ""
-#: readelf.c:17711
+#: readelf.c:19114
msgid "NT_FPREGSET (floating point registers)"
msgstr ""
-#: readelf.c:17713
+#: readelf.c:19116
msgid "NT_PRPSINFO (prpsinfo structure)"
msgstr ""
-#: readelf.c:17715
+#: readelf.c:19118
msgid "NT_TASKSTRUCT (task structure)"
msgstr ""
-#: readelf.c:17717
+#: readelf.c:19120
+msgid "NT_GDB_TDESC (GDB XML target description)"
+msgstr ""
+
+#: readelf.c:19122
msgid "NT_PRXFPREG (user_xfpregs structure)"
msgstr ""
-#: readelf.c:17719
+#: readelf.c:19124
msgid "NT_PPC_VMX (ppc Altivec registers)"
msgstr ""
-#: readelf.c:17721
+#: readelf.c:19126
msgid "NT_PPC_VSX (ppc VSX registers)"
msgstr ""
-#: readelf.c:17723
+#: readelf.c:19128
msgid "NT_PPC_TAR (ppc TAR register)"
msgstr ""
-#: readelf.c:17725
+#: readelf.c:19130
msgid "NT_PPC_PPR (ppc PPR register)"
msgstr ""
-#: readelf.c:17727
+#: readelf.c:19132
msgid "NT_PPC_DSCR (ppc DSCR register)"
msgstr ""
-#: readelf.c:17729
+#: readelf.c:19134
msgid "NT_PPC_EBB (ppc EBB registers)"
msgstr ""
-#: readelf.c:17731
+#: readelf.c:19136
msgid "NT_PPC_PMU (ppc PMU registers)"
msgstr ""
-#: readelf.c:17733
+#: readelf.c:19138
msgid "NT_PPC_TM_CGPR (ppc checkpointed GPR registers)"
msgstr ""
-#: readelf.c:17735
+#: readelf.c:19140
msgid "NT_PPC_TM_CFPR (ppc checkpointed floating point registers)"
msgstr ""
-#: readelf.c:17737
+#: readelf.c:19142
msgid "NT_PPC_TM_CVMX (ppc checkpointed Altivec registers)"
msgstr ""
-#: readelf.c:17739
+#: readelf.c:19144
msgid "NT_PPC_TM_CVSX (ppc checkpointed VSX registers)"
msgstr ""
-#: readelf.c:17741
+#: readelf.c:19146
msgid "NT_PPC_TM_SPR (ppc TM special purpose registers)"
msgstr ""
-#: readelf.c:17743
+#: readelf.c:19148
msgid "NT_PPC_TM_CTAR (ppc checkpointed TAR register)"
msgstr ""
-#: readelf.c:17745
+#: readelf.c:19150
msgid "NT_PPC_TM_CPPR (ppc checkpointed PPR register)"
msgstr ""
-#: readelf.c:17747
+#: readelf.c:19152
msgid "NT_PPC_TM_CDSCR (ppc checkpointed DSCR register)"
msgstr ""
-#: readelf.c:17749
+#: readelf.c:19154
msgid "NT_386_TLS (x86 TLS information)"
msgstr ""
-#: readelf.c:17751
+#: readelf.c:19156
msgid "NT_386_IOPERM (x86 I/O permissions)"
msgstr ""
-#: readelf.c:17753
+#: readelf.c:19158
msgid "NT_X86_XSTATE (x86 XSAVE extended state)"
msgstr ""
-#: readelf.c:17755
+#: readelf.c:19160
+msgid "NT_X86_CET (x86 CET state)"
+msgstr ""
+
+#: readelf.c:19162
msgid "NT_S390_HIGH_GPRS (s390 upper register halves)"
msgstr ""
-#: readelf.c:17757
+#: readelf.c:19164
msgid "NT_S390_TIMER (s390 timer register)"
msgstr ""
-#: readelf.c:17759
+#: readelf.c:19166
msgid "NT_S390_TODCMP (s390 TOD comparator register)"
msgstr ""
-#: readelf.c:17761
+#: readelf.c:19168
msgid "NT_S390_TODPREG (s390 TOD programmable register)"
msgstr ""
-#: readelf.c:17763
+#: readelf.c:19170
msgid "NT_S390_CTRS (s390 control registers)"
msgstr ""
-#: readelf.c:17765
+#: readelf.c:19172
msgid "NT_S390_PREFIX (s390 prefix register)"
msgstr ""
-#: readelf.c:17767
+#: readelf.c:19174
msgid "NT_S390_LAST_BREAK (s390 last breaking event address)"
msgstr ""
-#: readelf.c:17769
+#: readelf.c:19176
msgid "NT_S390_SYSTEM_CALL (s390 system call restart data)"
msgstr ""
-#: readelf.c:17771
+#: readelf.c:19178
msgid "NT_S390_TDB (s390 transaction diagnostic block)"
msgstr ""
-#: readelf.c:17773
+#: readelf.c:19180
msgid "NT_S390_VXRS_LOW (s390 vector registers 0-15 upper half)"
msgstr ""
-#: readelf.c:17775
+#: readelf.c:19182
msgid "NT_S390_VXRS_HIGH (s390 vector registers 16-31)"
msgstr ""
-#: readelf.c:17777
+#: readelf.c:19184
msgid "NT_S390_GS_CB (s390 guarded-storage registers)"
msgstr ""
-#: readelf.c:17779
+#: readelf.c:19186
msgid "NT_S390_GS_BC (s390 guarded-storage broadcast control)"
msgstr ""
-#: readelf.c:17781
+#: readelf.c:19188
msgid "NT_ARM_VFP (arm VFP registers)"
msgstr ""
-#: readelf.c:17783
+#: readelf.c:19190
msgid "NT_ARM_TLS (AArch TLS registers)"
msgstr ""
-#: readelf.c:17785
+#: readelf.c:19192
msgid "NT_ARM_HW_BREAK (AArch hardware breakpoint registers)"
msgstr ""
-#: readelf.c:17787
+#: readelf.c:19194
msgid "NT_ARM_HW_WATCH (AArch hardware watchpoint registers)"
msgstr ""
-#: readelf.c:17789
+#: readelf.c:19196
+msgid "NT_ARM_SVE (AArch SVE registers)"
+msgstr ""
+
+#: readelf.c:19198
+msgid "NT_ARM_PAC_MASK (AArch pointer authentication code masks)"
+msgstr ""
+
+#: readelf.c:19200
+msgid "NT_ARM_PACA_KEYS (ARM pointer authentication address keys)"
+msgstr ""
+
+#: readelf.c:19202
+msgid "NT_ARM_PACG_KEYS (ARM pointer authentication generic keys)"
+msgstr ""
+
+#: readelf.c:19204
+msgid "NT_ARM_TAGGED_ADDR_CTRL (AArch tagged address control)"
+msgstr ""
+
+#: readelf.c:19206
+msgid "NT_ARM_PAC_ENABLED_KEYS (AArch64 pointer authentication enabled keys)"
+msgstr ""
+
+#: readelf.c:19208
msgid "NT_ARC_V2 (ARC HS accumulator/extra registers)"
msgstr ""
-#: readelf.c:17791
+#: readelf.c:19210
+msgid "NT_RISCV_CSR (RISC-V control and status registers)"
+msgstr ""
+
+#: readelf.c:19212
msgid "NT_PSTATUS (pstatus structure)"
msgstr ""
-#: readelf.c:17793
+#: readelf.c:19214
msgid "NT_FPREGS (floating point registers)"
msgstr ""
-#: readelf.c:17795
+#: readelf.c:19216
msgid "NT_PSINFO (psinfo structure)"
msgstr ""
-#: readelf.c:17797
+#: readelf.c:19218
msgid "NT_LWPSTATUS (lwpstatus_t structure)"
msgstr ""
-#: readelf.c:17799
+#: readelf.c:19220
msgid "NT_LWPSINFO (lwpsinfo_t structure)"
msgstr ""
-#: readelf.c:17801
+#: readelf.c:19222
msgid "NT_WIN32PSTATUS (win32_pstatus structure)"
msgstr ""
-#: readelf.c:17803
+#: readelf.c:19224
msgid "NT_SIGINFO (siginfo_t data)"
msgstr ""
-#: readelf.c:17805
+#: readelf.c:19226
msgid "NT_FILE (mapped files)"
msgstr ""
-#: readelf.c:17813
+#: readelf.c:19234
msgid "NT_VERSION (version)"
msgstr ""
-#: readelf.c:17815
+#: readelf.c:19236
msgid "NT_ARCH (architecture)"
msgstr ""
-#: readelf.c:17817
+#: readelf.c:19238
msgid "OPEN"
msgstr ""
-#: readelf.c:17819
+#: readelf.c:19240
msgid "func"
msgstr "функциÑ"
-#: readelf.c:17824 readelf.c:17943 readelf.c:18565 readelf.c:18739
-#: readelf.c:18816 readelf.c:18933
+#: readelf.c:19242
+msgid "GO BUILDID"
+msgstr ""
+
+#: readelf.c:19244
+msgid "FDO_PACKAGING_METADATA"
+msgstr ""
+
+#: readelf.c:19249 readelf.c:19368 readelf.c:20109 readelf.c:20277
+#: readelf.c:20374 readelf.c:20502
#, c-format
msgid "Unknown note type: (0x%08x)"
msgstr ""
-#: readelf.c:17845
+#: readelf.c:19270
#, c-format
msgid " Cannot decode 64-bit note in 32-bit build\n"
msgstr ""
-#: readelf.c:17853
+#: readelf.c:19278
msgid " Malformed note - too short for header\n"
msgstr ""
-#: readelf.c:17862
+#: readelf.c:19287
msgid " Malformed note - does not end with \\0\n"
msgstr ""
-#: readelf.c:17875
+#: readelf.c:19300
msgid " Malformed note - too short for supplied file count\n"
msgstr ""
-#: readelf.c:17879
+#: readelf.c:19304
#, c-format
msgid " Page size: "
msgstr ""
-#: readelf.c:17883
+#: readelf.c:19308
#, c-format
msgid " %*s%*s%*s\n"
msgstr ""
-#: readelf.c:17884
+#: readelf.c:19309
msgid "Start"
msgstr ""
-#: readelf.c:17885
+#: readelf.c:19310
msgid "End"
msgstr ""
-#: readelf.c:17886
+#: readelf.c:19311
msgid "Page Offset"
msgstr ""
-#: readelf.c:17894
+#: readelf.c:19319
msgid " Malformed note - filenames end too early\n"
msgstr ""
-#: readelf.c:17926
+#: readelf.c:19351
msgid "NT_GNU_ABI_TAG (ABI version tag)"
msgstr ""
-#: readelf.c:17928
+#: readelf.c:19353
msgid "NT_GNU_HWCAP (DSO-supplied software HWCAP info)"
msgstr ""
-#: readelf.c:17930
+#: readelf.c:19355
msgid "NT_GNU_BUILD_ID (unique build ID bitstring)"
msgstr ""
-#: readelf.c:17932
+#: readelf.c:19357
msgid "NT_GNU_GOLD_VERSION (gold version)"
msgstr ""
-#: readelf.c:17934
+#: readelf.c:19359
msgid "NT_GNU_PROPERTY_TYPE_0"
msgstr ""
-#: readelf.c:17936
+#: readelf.c:19361
msgid "NT_GNU_BUILD_ATTRIBUTE_OPEN"
msgstr ""
-#: readelf.c:17938
+#: readelf.c:19363
msgid "NT_GNU_BUILD_ATTRIBUTE_FUNC"
msgstr ""
-#: readelf.c:18027 readelf.c:18127 readelf.c:18158
+#: readelf.c:19452 readelf.c:19583 readelf.c:19620
#, c-format
msgid "<None>"
msgstr "<нищо>"
-#: readelf.c:18242
+#: readelf.c:19732
#, c-format
msgid " Properties: "
msgstr ""
-#: readelf.c:18246
+#: readelf.c:19736
#, c-format
msgid "<corrupt GNU_PROPERTY_TYPE, size = %#lx>\n"
msgstr ""
-#: readelf.c:18258
+#: readelf.c:19748
#, c-format
msgid "<corrupt descsz: %#lx>\n"
msgstr ""
-#: readelf.c:18269
+#: readelf.c:19759
#, c-format
msgid "<corrupt type (%#x) datasz: %#x>\n"
msgstr ""
-#: readelf.c:18291 readelf.c:18345
+#: readelf.c:19781 readelf.c:19835 readelf.c:19857
#, c-format
msgid "x86 ISA used: <corrupt length: %#x> "
msgstr ""
-#: readelf.c:18302 readelf.c:18356
+#: readelf.c:19792 readelf.c:19846 readelf.c:19868
#, c-format
msgid "x86 ISA needed: <corrupt length: %#x> "
msgstr ""
-#: readelf.c:18313
+#: readelf.c:19803
#, c-format
msgid "x86 feature: <corrupt length: %#x> "
msgstr ""
-#: readelf.c:18324
+#: readelf.c:19814
#, c-format
msgid "x86 feature used: <corrupt length: %#x> "
msgstr ""
-#: readelf.c:18335
+#: readelf.c:19825
#, c-format
msgid "x86 feature needed: <corrupt length: %#x> "
msgstr ""
-#: readelf.c:18375 readelf.c:18389 readelf.c:18397
+#: readelf.c:19887 readelf.c:19901 readelf.c:19909 readelf.c:19940
#, c-format
msgid "<corrupt length: %#x> "
msgstr ""
-#: readelf.c:18387
+#: readelf.c:19899
#, c-format
msgid "stack size: "
msgstr ""
-#: readelf.c:18406
+#: readelf.c:19922
#, c-format
-msgid "<unknown type %#x data: "
+msgid "1_needed: <corrupt length: %#x> "
msgstr ""
-#: readelf.c:18408
+#: readelf.c:19936
#, c-format
-msgid "<procesor-specific type %#x data: "
+msgid "UINT32_AND (%#x): "
msgstr ""
-#: readelf.c:18410
+#: readelf.c:19938
#, c-format
-msgid "<application-specific type %#x data: "
+msgid "UINT32_OR (%#x): "
msgstr ""
-#: readelf.c:18439
+#: readelf.c:19950
+#, c-format
+msgid "<unknown type %#x data: "
+msgstr ""
+
+#: readelf.c:19952
+#, c-format
+msgid "<processor-specific type %#x data: "
+msgstr "<оÑобен за процеÑор тип %#x данни: "
+
+#: readelf.c:19954
+#, c-format
+msgid "<application-specific type %#x data: "
+msgstr "<оÑобен за приложение тип %#x данни: "
+
+#: readelf.c:19983
#, c-format
msgid " Build ID: "
msgstr ""
-#: readelf.c:18454
+#: readelf.c:19998
#, c-format
msgid " <corrupt GNU_ABI_TAG>\n"
msgstr ""
-#: readelf.c:18491
+#: readelf.c:20035
#, c-format
msgid " OS: %s, ABI: %ld.%ld.%ld\n"
msgstr ""
-#: readelf.c:18500
+#: readelf.c:20044
#, c-format
msgid " Version: "
msgstr " ВерÑиÑ: "
@@ -9994,645 +11213,665 @@ msgstr " ВерÑиÑ: "
#. is a series of entries, where each entry is a single byte followed
#. by a nul terminated string. The byte gives the bit number to test
#. if enabled in the bitmask.
-#: readelf.c:18516
+#: readelf.c:20060
#, c-format
msgid " Hardware Capabilities: "
msgstr ""
-#: readelf.c:18519
+#: readelf.c:20063
msgid "<corrupt GNU_HWCAP>\n"
msgstr "<повреден GNU_HWCAP>\n"
-#: readelf.c:18524
+#: readelf.c:20068
#, c-format
msgid "num entries: %ld, enabled mask: %lx\n"
msgstr ""
-#: readelf.c:18540
+#: readelf.c:20084
#, c-format
msgid " Description data: "
msgstr " ОпиÑание: "
-#: readelf.c:18558
+#: readelf.c:20102
msgid "Alignment of 8-byte objects"
msgstr ""
-#: readelf.c:18559
+#: readelf.c:20103
msgid "Sizeof double and long double"
msgstr ""
-#: readelf.c:18560
+#: readelf.c:20104
msgid "Type of FPU support needed"
msgstr ""
-#: readelf.c:18561
+#: readelf.c:20105
msgid "Use of SIMD instructions"
msgstr ""
-#: readelf.c:18562
+#: readelf.c:20106
msgid "Use of cache"
msgstr ""
-#: readelf.c:18563
+#: readelf.c:20107
msgid "Use of MMU"
msgstr ""
-#: readelf.c:18599
+#: readelf.c:20143
#, c-format
msgid "4-bytes\n"
msgstr "4-байта\n"
-#: readelf.c:18600
+#: readelf.c:20144
#, c-format
msgid "8-bytes\n"
msgstr "8-байта\n"
-#: readelf.c:18607
+#: readelf.c:20151
#, c-format
msgid "FPU-2.0\n"
msgstr "FPU-2.0\n"
-#: readelf.c:18608
+#: readelf.c:20152
#, c-format
msgid "FPU-3.0\n"
msgstr "FPU-3.0\n"
-#: readelf.c:18617
+#: readelf.c:20161
#, c-format
msgid "yes\n"
msgstr "да\n"
-#: readelf.c:18627
+#: readelf.c:20171
#, c-format
msgid "unknown value: %x\n"
msgstr "неизвеÑтена ÑтойноÑÑ‚: %x\n"
-#: readelf.c:18685
+#: readelf.c:20227
msgid "NT_THRMISC (thrmisc structure)"
msgstr ""
-#: readelf.c:18687
+#: readelf.c:20229
msgid "NT_PROCSTAT_PROC (proc data)"
msgstr ""
-#: readelf.c:18689
+#: readelf.c:20231
msgid "NT_PROCSTAT_FILES (files data)"
msgstr ""
-#: readelf.c:18691
+#: readelf.c:20233
msgid "NT_PROCSTAT_VMMAP (vmmap data)"
msgstr ""
-#: readelf.c:18693
+#: readelf.c:20235
msgid "NT_PROCSTAT_GROUPS (groups data)"
msgstr ""
-#: readelf.c:18695
+#: readelf.c:20237
msgid "NT_PROCSTAT_UMASK (umask data)"
msgstr ""
-#: readelf.c:18697
+#: readelf.c:20239
msgid "NT_PROCSTAT_RLIMIT (rlimit data)"
msgstr ""
-#: readelf.c:18699
+#: readelf.c:20241
msgid "NT_PROCSTAT_OSREL (osreldate data)"
msgstr ""
-#: readelf.c:18701
+#: readelf.c:20243
msgid "NT_PROCSTAT_PSSTRINGS (ps_strings data)"
msgstr ""
-#: readelf.c:18703
+#: readelf.c:20245
msgid "NT_PROCSTAT_AUXV (auxv data)"
msgstr ""
-#: readelf.c:18705
+#: readelf.c:20247
msgid "NT_PTLWPINFO (ptrace_lwpinfo structure)"
msgstr ""
#. NetBSD core "procinfo" structure.
-#: readelf.c:18719
+#: readelf.c:20261
msgid "NetBSD procinfo structure"
msgstr ""
-#: readelf.c:18723
+#: readelf.c:20264
msgid "NetBSD ELF auxiliary vector data"
msgstr ""
-#: readelf.c:18728
+#: readelf.c:20267
msgid "PT_LWPSTATUS (ptrace_lwpstatus structure)"
msgstr ""
-#: readelf.c:18758 readelf.c:18775 readelf.c:18789
+#: readelf.c:20296 readelf.c:20313 readelf.c:20327
msgid "PT_GETREGS (reg structure)"
msgstr ""
-#: readelf.c:18760 readelf.c:18777 readelf.c:18791
+#: readelf.c:20298 readelf.c:20315 readelf.c:20329
msgid "PT_GETFPREGS (fpreg structure)"
msgstr ""
-#: readelf.c:18773
+#: readelf.c:20311
msgid "PT___GETREGS40 (old reg structure)"
msgstr ""
-#: readelf.c:18810
+#: readelf.c:20346
+msgid "OpenBSD procinfo structure"
+msgstr ""
+
+#: readelf.c:20348
+msgid "OpenBSD ELF auxiliary vector data"
+msgstr ""
+
+#: readelf.c:20350
+msgid "OpenBSD regular registers"
+msgstr ""
+
+#: readelf.c:20352
+msgid "OpenBSD floating point registers"
+msgstr ""
+
+#: readelf.c:20354
+msgid "OpenBSD window cookie"
+msgstr ""
+
+#: readelf.c:20368
msgid "NT_STAPSDT (SystemTap probe descriptors)"
msgstr ""
-#: readelf.c:18878
+#: readelf.c:20436
#, c-format
msgid " Provider: %s\n"
msgstr ""
-#: readelf.c:18879
+#: readelf.c:20437
#, c-format
msgid " Name: %s\n"
msgstr " Име: %s\n"
-#: readelf.c:18880
+#: readelf.c:20438
#, c-format
msgid " Location: "
msgstr " ÐœÑÑто: "
-#: readelf.c:18882
+#: readelf.c:20440
#, c-format
msgid ", Base: "
msgstr ", ОÑнова: "
-#: readelf.c:18884
+#: readelf.c:20442
#, c-format
msgid ", Semaphore: "
msgstr ""
-#: readelf.c:18887
+#: readelf.c:20445
#, c-format
msgid " Arguments: %s\n"
msgstr " Ðргументи: %s\n"
-#: readelf.c:18892
+#: readelf.c:20450
#, c-format
msgid " <corrupt - note is too small>\n"
msgstr " <повреден - бележката е твърде малка>\n"
-#: readelf.c:18893
+#: readelf.c:20451
msgid "corrupt stapdt note - the data size is too small\n"
msgstr ""
-#: readelf.c:18905
+#: readelf.c:20460
+#, c-format
+msgid " Packaging Metadata: %.*s\n"
+msgstr ""
+
+#: readelf.c:20474
msgid "NT_VMS_MHD (module header)"
msgstr ""
-#: readelf.c:18907
+#: readelf.c:20476
msgid "NT_VMS_LNM (language name)"
msgstr ""
-#: readelf.c:18909
+#: readelf.c:20478
msgid "NT_VMS_SRC (source files)"
msgstr ""
-#: readelf.c:18913
+#: readelf.c:20482
msgid "NT_VMS_EIDC (consistency check)"
msgstr ""
-#: readelf.c:18915
+#: readelf.c:20484
msgid "NT_VMS_FPMODE (FP mode)"
msgstr ""
-#: readelf.c:18919
+#: readelf.c:20488
msgid "NT_VMS_IMGNAM (image name)"
msgstr ""
-#: readelf.c:18921
+#: readelf.c:20490
msgid "NT_VMS_IMGID (image id)"
msgstr ""
-#: readelf.c:18923
+#: readelf.c:20492
msgid "NT_VMS_LINKID (link id)"
msgstr ""
-#: readelf.c:18925
+#: readelf.c:20494
msgid "NT_VMS_IMGBID (build id)"
msgstr ""
-#: readelf.c:18927
+#: readelf.c:20496
msgid "NT_VMS_GSTNAM (sym table name)"
msgstr ""
-#: readelf.c:18954
+#: readelf.c:20523
#, c-format
msgid " Creation date : %.17s\n"
msgstr ""
-#: readelf.c:18955
+#: readelf.c:20524
#, c-format
msgid " Last patch date: %.17s\n"
msgstr ""
-#: readelf.c:18958
+#: readelf.c:20527
#, c-format
msgid " Module name : %s\n"
msgstr " Име на модул : %s\n"
-#: readelf.c:18960
+#: readelf.c:20529
#, c-format
msgid " Module version : %s\n"
msgstr " ВерÑÐ¸Ñ Ð½Ð° модул : %s\n"
-#: readelf.c:18962 readelf.c:18967
+#: readelf.c:20531 readelf.c:20536
#, c-format
msgid " Module version : <missing>\n"
msgstr " ВерÑÐ¸Ñ Ð½Ð° модул : <липÑва>\n"
-#: readelf.c:18966
+#: readelf.c:20535
#, c-format
msgid " Module name : <missing>\n"
msgstr " Име на модул : <липÑва>\n"
-#: readelf.c:18972
+#: readelf.c:20541
#, c-format
msgid " Language: %.*s\n"
msgstr " Език: %.*s\n"
-#: readelf.c:18977
+#: readelf.c:20546
#, c-format
msgid " Floating Point mode: "
msgstr ""
-#: readelf.c:18987
+#: readelf.c:20556
#, c-format
msgid " Link time: "
msgstr ""
-#: readelf.c:18998
+#: readelf.c:20567
#, c-format
msgid " Patch time: "
msgstr ""
-#: readelf.c:19012
+#: readelf.c:20581
#, c-format
msgid " Major id: %u, minor id: %u\n"
msgstr ""
-#: readelf.c:19015
+#: readelf.c:20584
#, c-format
msgid " Last modified : "
msgstr ""
-#: readelf.c:19018
+#: readelf.c:20587
#, c-format
msgid ""
"\n"
" Link flags : "
msgstr ""
-#: readelf.c:19021
+#: readelf.c:20590
#, c-format
msgid " Header flags: 0x%08x\n"
msgstr ""
-#: readelf.c:19023
+#: readelf.c:20592
#, c-format
msgid " Image id : %.*s\n"
msgstr " Ðомер на образ: %.*s\n"
-#: readelf.c:19028
+#: readelf.c:20597
#, c-format
msgid " Image name: %.*s\n"
msgstr " Име на образ: %.*s\n"
-#: readelf.c:19032
+#: readelf.c:20601
#, c-format
msgid " Global symbol table name: %.*s\n"
msgstr ""
-#: readelf.c:19036
+#: readelf.c:20605
#, c-format
msgid " Image id: %.*s\n"
msgstr "Ðомер на образ: %.*s\n"
-#: readelf.c:19040
+#: readelf.c:20609
#, c-format
msgid " Linker id: %.*s\n"
msgstr "Ðомер на Ñвързване: %.*s\n"
-#: readelf.c:19050
+#: readelf.c:20619
#, c-format
msgid " <corrupt - data size is too small>\n"
msgstr ""
-#: readelf.c:19051
+#: readelf.c:20620
msgid "corrupt IA64 note: data size is too small\n"
msgstr ""
-#: readelf.c:19218 readelf.c:19226
+#: readelf.c:20787 readelf.c:20795
#, c-format
msgid " Applies to region from %#lx to %#lx\n"
msgstr ""
-#: readelf.c:19221 readelf.c:19228
+#: readelf.c:20790 readelf.c:20797
#, c-format
msgid " Applies to region from %#lx\n"
msgstr ""
-#: readelf.c:19257
+#: readelf.c:20817
#, c-format
msgid " <invalid description size: %lx>\n"
msgstr ""
-#: readelf.c:19258
+#: readelf.c:20818
#, c-format
msgid " <invalid descsz>"
msgstr ""
-#: readelf.c:19284
+#: readelf.c:20844
#, c-format
msgid "Gap in build notes detected from %#lx to %#lx\n"
msgstr ""
-#: readelf.c:19287 readelf.c:19298
+#: readelf.c:20847 readelf.c:20858
#, c-format
msgid " Applies to region from %#lx"
msgstr ""
-#: readelf.c:19292 readelf.c:19303
+#: readelf.c:20852 readelf.c:20863
#, c-format
msgid " to %#lx"
msgstr ""
-#: readelf.c:19309
+#: readelf.c:20869
#, c-format
msgid " (%s)"
msgstr ""
-#: readelf.c:19330 readelf.c:19345
+#: readelf.c:20890 readelf.c:20905
#, c-format
msgid "corrupt name field in GNU build attribute note: size = %ld\n"
msgstr ""
-#: readelf.c:19331 readelf.c:19346
+#: readelf.c:20891 readelf.c:20906
msgid " <corrupt name>"
msgstr " <повредено име>"
-#: readelf.c:19365
+#: readelf.c:20925
#, c-format
msgid "unrecognised attribute type in name field: %d\n"
msgstr ""
-#: readelf.c:19366
+#: readelf.c:20926
msgid "<unknown name type>"
msgstr "<непознат тип>"
-#: readelf.c:19376
+#: readelf.c:20936
msgid "<version>"
msgstr ""
-#: readelf.c:19381
+#: readelf.c:20941
msgid "<stack prot>"
msgstr ""
-#: readelf.c:19386
+#: readelf.c:20946
msgid "<relro>"
msgstr ""
-#: readelf.c:19391
+#: readelf.c:20951
msgid "<stack size>"
msgstr ""
-#: readelf.c:19396
+#: readelf.c:20956
msgid "<tool>"
msgstr ""
-#: readelf.c:19401
+#: readelf.c:20961
msgid "<ABI>"
msgstr ""
-#: readelf.c:19406
+#: readelf.c:20966
msgid "<PIC>"
msgstr ""
-#: readelf.c:19411
+#: readelf.c:20971
msgid "<short enum>"
msgstr ""
-#: readelf.c:19430
+#: readelf.c:20990
#, c-format
msgid "unrecognised byte in name field: %d\n"
msgstr ""
-#: readelf.c:19431
+#: readelf.c:20991
#, c-format
msgid "<unknown:_%d>"
msgstr "<неизвеÑтен:_%d>"
-#: readelf.c:19443
+#: readelf.c:21003
#, c-format
msgid "attribute does not have an expected type (%c)\n"
msgstr ""
-#: readelf.c:19447
+#: readelf.c:21007
#, c-format
msgid "corrupt name field: namesz: %lu but parsing gets to %ld\n"
msgstr ""
-#: readelf.c:19474
+#: readelf.c:21034
#, c-format
msgid "corrupt numeric name field: too many bytes in the value: %x\n"
msgstr ""
-#: readelf.c:19646
+#: readelf.c:21212
#, c-format
msgid " description data: "
msgstr ""
-#: readelf.c:19688
+#: readelf.c:21254
msgid "notes"
msgstr ""
-#: readelf.c:19696
+#: readelf.c:21266
#, c-format
-msgid ""
-"\n"
-"Displaying notes found in: %s\n"
+msgid "Displaying notes found in: %s\n"
msgstr ""
-#: readelf.c:19698
+#: readelf.c:21268
#, c-format
-msgid ""
-"\n"
-"Displaying notes found at file offset 0x%08lx with length 0x%08lx:\n"
+msgid "Displaying notes found at file offset 0x%08lx with length 0x%08lx:\n"
msgstr ""
-#: readelf.c:19710
+#: readelf.c:21280
#, c-format
msgid "Corrupt note: alignment %ld, expecting 4 or 8\n"
msgstr ""
-#: readelf.c:19716
+#: readelf.c:21286
#, c-format
msgid " %-20s %-10s\tDescription\n"
msgstr ""
-#: readelf.c:19716
+#: readelf.c:21286
msgid "Owner"
msgstr ""
-#: readelf.c:19716
+#: readelf.c:21286
msgid "Data size"
msgstr ""
-#: readelf.c:19734 readelf.c:19763
+#: readelf.c:21304 readelf.c:21333
#, c-format
msgid "Corrupt note: only %ld byte remains, not enough for a full note\n"
msgid_plural "Corrupt note: only %ld bytes remain, not enough for a full note\n"
msgstr[0] ""
msgstr[1] ""
-#: readelf.c:19791
+#: readelf.c:21361
#, c-format
msgid "note with invalid namesz and/or descsz found at offset 0x%lx\n"
msgstr ""
-#: readelf.c:19793
+#: readelf.c:21363
#, c-format
msgid " type: 0x%lx, namesize: 0x%08lx, descsize: 0x%08lx, alignment: %u\n"
msgstr ""
-#: readelf.c:19811
+#: readelf.c:21381
msgid "Out of memory allocating space for inote name\n"
msgstr "ÐедоÑтиг на памет при заделÑне на мÑÑто за име на inote\n"
-#: readelf.c:19871
+#: readelf.c:21441
msgid "v850 notes"
msgstr ""
-#: readelf.c:19878
+#: readelf.c:21448
#, c-format
msgid ""
"\n"
"Displaying contents of Renesas V850 notes section at offset 0x%lx with length 0x%lx:\n"
msgstr ""
-#: readelf.c:19895
+#: readelf.c:21465
#, c-format
msgid "Corrupt note: name size is too big: %lx\n"
msgstr ""
-#: readelf.c:19905
+#: readelf.c:21475
#, c-format
msgid "corrupt descsz found in note at offset 0x%lx\n"
msgstr ""
-#: readelf.c:19907 readelf.c:19920
+#: readelf.c:21477 readelf.c:21490
#, c-format
msgid " type: 0x%lx, namesize: 0x%lx, descsize: 0x%lx\n"
msgstr ""
-#: readelf.c:19918
+#: readelf.c:21488
#, c-format
msgid "corrupt namesz found in note at offset 0x%lx\n"
msgstr ""
-#: readelf.c:19996
+#: readelf.c:21567
+#, c-format
+msgid "No notes found in linked file '%s'.\n"
+msgstr ""
+
+#: readelf.c:21570
#, c-format
-msgid "No note segments present in the core file.\n"
+msgid "No notes found file.\n"
msgstr ""
-#: readelf.c:20004
+#: readelf.c:21579
#, c-format
msgid " Unknown GNU attribute: %s\n"
msgstr " Ðепознат ГÐУ признак: %s\n"
-#: readelf.c:20148
+#: readelf.c:21727
msgid ""
"This instance of readelf has been built without support for a\n"
"64 bit data type and so it cannot read 64 bit ELF files.\n"
msgstr ""
-#: readelf.c:20271
+#: readelf.c:21897
#, c-format
msgid "%s: Failed to read file header\n"
msgstr ""
-#: readelf.c:20286
+#: readelf.c:21912
#, c-format
msgid ""
"\n"
"File: %s\n"
msgstr ""
-#: readelf.c:20476
+#: readelf.c:22073
#, c-format
msgid "%s: unable to dump the index as none was found\n"
msgstr ""
-#: readelf.c:20483
+#: readelf.c:22080
#, c-format
msgid "Index of archive %s: (%lu entries, 0x%lx bytes in the symbol table)\n"
msgstr ""
-#: readelf.c:20507
+#: readelf.c:22104
#, c-format
msgid "Contents of binary %s at offset "
msgstr ""
-#: readelf.c:20519
+#: readelf.c:22116
#, c-format
msgid "%s: end of the symbol table reached before the end of the index\n"
msgstr ""
-#: readelf.c:20538
+#: readelf.c:22135
#, c-format
msgid "%s: %ld byte remains in the symbol table, but without corresponding entries in the index table\n"
msgid_plural "%s: %ld bytes remain in the symbol table, but without corresponding entries in the index table\n"
msgstr[0] ""
msgstr[1] ""
-#: readelf.c:20551
+#: readelf.c:22148
#, c-format
msgid "%s: failed to seek back to start of object files in the archive\n"
msgstr ""
-#: readelf.c:20645 readelf.c:20761
+#: readelf.c:22240 readelf.c:22359
#, c-format
msgid "Input file '%s' is not readable.\n"
msgstr ""
-#: readelf.c:20670
+#: readelf.c:22268
#, c-format
msgid "%s: contains corrupt thin archive: %s\n"
msgstr ""
-#: readelf.c:20688
+#: readelf.c:22286
#, c-format
msgid "%s: failed to seek to archive member.\n"
msgstr ""
-#: readelf.c:20753
+#: readelf.c:22351
msgid "Out of memory allocating file data structure\n"
msgstr "ÐедоÑтиг на памет при заделÑне на мÑÑто за данни за Ñтроежа на файл\n"
-#: readelf.c:20789
+#: readelf.c:22388
#, c-format
msgid "File %s is not an archive so its index cannot be displayed.\n"
msgstr ""
-#: readelf.c:20862
+#: readelf.c:22459
msgid "Nothing to do.\n"
msgstr ""
-#: rename.c:122
+#: rename.c:200
#, c-format
msgid "%s: cannot set time: %s"
msgstr ""
-#. We have to clean up here.
-#: rename.c:157 rename.c:195
-#, c-format
-msgid "unable to rename '%s'; reason: %s"
-msgstr ""
-
-#: rename.c:203
+#: rename.c:219
#, c-format
msgid "unable to copy file '%s'; reason: %s"
msgstr ""
@@ -10780,76 +12019,76 @@ msgstr ""
msgid "unexpected version type %d"
msgstr ""
-#: resbin.c:980
+#: resbin.c:983
#, c-format
msgid "unexpected fixed version information length %ld"
msgstr ""
-#: resbin.c:983
+#: resbin.c:986
msgid "fixed version info"
msgstr ""
-#: resbin.c:987
+#: resbin.c:990
#, c-format
msgid "unexpected fixed version signature %lu"
msgstr ""
-#: resbin.c:991
+#: resbin.c:994
#, c-format
msgid "unexpected fixed version info version %lu"
msgstr ""
-#: resbin.c:1020
+#: resbin.c:1023
msgid "version var info"
msgstr ""
-#: resbin.c:1037
+#: resbin.c:1040
#, c-format
msgid "unexpected stringfileinfo value length %ld"
msgstr ""
-#: resbin.c:1054
+#: resbin.c:1057
msgid "version stringtable"
msgstr ""
-#: resbin.c:1062
+#: resbin.c:1065
#, c-format
msgid "unexpected version stringtable value length %ld"
msgstr ""
-#: resbin.c:1079
+#: resbin.c:1082
msgid "version string"
msgstr ""
-#: resbin.c:1094
+#: resbin.c:1097
#, c-format
msgid "unexpected version string length %ld != %ld + %ld"
msgstr ""
-#: resbin.c:1101
+#: resbin.c:1104
#, c-format
msgid "unexpected version string length %ld < %ld"
msgstr ""
-#: resbin.c:1127
+#: resbin.c:1130
#, c-format
msgid "unexpected varfileinfo value length %ld"
msgstr ""
-#: resbin.c:1146
+#: resbin.c:1149
msgid "version varfileinfo"
msgstr ""
-#: resbin.c:1161
+#: resbin.c:1164
#, c-format
msgid "unexpected version value length %ld"
msgstr ""
-#: resbin.c:1171
+#: resbin.c:1174
msgid "nul bytes found in version string"
msgstr ""
-#: resbin.c:1174
+#: resbin.c:1177
#, c-format
msgid "unexpected version string character: %x"
msgstr ""
@@ -11069,12 +12308,12 @@ msgstr ""
" -v --version Показва верÑиÑта на програмата\n"
"\n"
-#: size.c:176
+#: size.c:174
#, c-format
msgid "invalid argument to --format: %s"
msgstr "Ñгрешен аргумент за --format: %s"
-#: size.c:203
+#: size.c:201
#, c-format
msgid "Invalid radix: %s\n"
msgstr "Сгрешена оÑнова: %s\n"
@@ -11157,11 +12396,11 @@ msgstr ""
" -h --help Показва това Ñведение\n"
" -v --version Извежда верÑиÑта на програмата\n"
-#: srconv.c:1786
+#: srconv.c:1784
msgid "input and output files must be different"
msgstr "входÑщиÑÑ‚ и изходÑщиÑÑ‚ файл Ñ‚Ñ€Ñбва да Ñа различни"
-#: srconv.c:1842
+#: srconv.c:1840
#, c-format
msgid "unable to open output file %s"
msgstr "не можа де Ñе отвори изходÑщиÑÑ‚ файл %s"
@@ -11244,111 +12483,112 @@ msgstr ""
msgid "Type index number %d out of range\n"
msgstr ""
-#: stabs.c:3506
+#: stabs.c:3507
#, c-format
msgid "Unrecognized XCOFF type %d\n"
msgstr "Ðеразпознат XCOFF тип %d\n"
-#: stabs.c:3799
+#: stabs.c:3798
#, c-format
msgid "bad mangled name `%s'\n"
msgstr "неправилно кодирано име '%s'\n"
-#: stabs.c:3894
+#: stabs.c:3893
#, c-format
msgid "no argument types in mangled string\n"
msgstr "липÑва тип на аргумент в ÐºÐ¾Ð´Ð¸Ñ€Ð°Ð½Ð¸Ñ Ð½Ð¸Ð·\n"
-#: stabs.c:5242
+#: stabs.c:5241
#, c-format
msgid "Demangled name is not a function\n"
msgstr "ВъзÑтановеното име не е функциÑ\n"
-#: stabs.c:5284
+#: stabs.c:5283
#, c-format
msgid "Unexpected type in v3 arglist demangling\n"
msgstr "Ðеочакван тип при 3-та вер. на arglist за разкодиране на имена\n"
-#: stabs.c:5356
+#: stabs.c:5355
#, c-format
msgid "Unrecognized demangle component %d\n"
msgstr "Ðеразпозната чаÑÑ‚ при разкодиране на име %d\n"
-#: stabs.c:5408
+#: stabs.c:5407
#, c-format
msgid "Failed to print demangled template\n"
msgstr "Пропадна извеждането на възÑтановено име на шаблон\n"
-#: stabs.c:5488
+#: stabs.c:5487
#, c-format
msgid "Couldn't get demangled builtin type\n"
msgstr "Ðе можа да Ñе определи Ð²Ð³Ñ€Ð°Ð´ÐµÐ½Ð¸Ñ Ñ‚Ð¸Ð¿ за разкодиране\n"
-#: stabs.c:5537
+#: stabs.c:5536
#, c-format
msgid "Unexpected demangled varargs\n"
msgstr "Ðеочаквано разкодиране за \"varargs\"\n"
-#: stabs.c:5544
+#: stabs.c:5543
#, c-format
msgid "Unrecognized demangled builtin type\n"
msgstr "Ðеразпознат вграден тип за разкодиране\n"
-#: strings.c:200 strings.c:267
+#: strings.c:229 strings.c:316
#, c-format
msgid "invalid integer argument %s"
msgstr "Ñгрешен аргумент за цÑло чиÑло %s"
-#: strings.c:270
+#: strings.c:319
#, c-format
msgid "invalid minimum string length %d"
msgstr "Ñгрешена минимална дължина на низ %d"
-#: strings.c:341
+#: strings.c:390
#, c-format
msgid "%s: Reading section %s failed: %s"
msgstr "%s: Ðе уÑÐ¿Ñ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ð½ÐµÑ‚Ð¾ на раздел %s: %s"
-#: strings.c:699
+#: strings.c:1313
#, c-format
msgid " Display printable strings in [file(s)] (stdin by default)\n"
msgstr " Показва печатаемите низове в [файлове] (Ñтанд. изход по подразбиране)\n"
-#: strings.c:703
+#: strings.c:1317
#, c-format
msgid ""
" -a - --all Scan the entire file, not just the data section [default]\n"
" -d --data Only scan the data sections in the file\n"
msgstr ""
-#: strings.c:707
+#: strings.c:1321
#, c-format
msgid ""
" -a - --all Scan the entire file, not just the data section\n"
" -d --data Only scan the data sections in the file [default]\n"
msgstr ""
-#: strings.c:711
+#: strings.c:1325
#, c-format
msgid ""
" -f --print-file-name Print the name of the file before each string\n"
-" -n --bytes=[number] Locate & print any NUL-terminated sequence of at\n"
-" -<number> least [number] characters (default 4).\n"
+" -n <number> Locate & print any sequence of at least <number>\n"
+" --bytes=<number> displayable characters. (The default is 4).\n"
" -t --radix={o,d,x} Print the location of the string in base 8, 10 or 16\n"
" -w --include-all-whitespace Include all whitespace as valid string characters\n"
" -o An alias for --radix=o\n"
" -T --target=<BFDNAME> Specify the binary file format\n"
" -e --encoding={s,S,b,l,B,L} Select character size and endianness:\n"
" s = 7-bit, S = 8-bit, {b,l} = 16-bit, {B,L} = 32-bit\n"
+" --unicode={default|show|invalid|hex|escape|highlight}\n"
+" -U {d|s|i|x|e|h} Specify how to treat UTF-8 encoded unicode characters\n"
" -s --output-separator=<string> String used to separate strings in output.\n"
" @<file> Read options from <file>\n"
" -h --help Display this information\n"
" -v -V --version Print the program's version number\n"
msgstr ""
-" Командите Ñа:\n"
" -f --print-file-name Преди вÑеки низ извежда името на файла\n"
-" -n --bytes=[чиÑло] Ðамира и извежда вÑÑка завършваща на NUL поÑледователноÑÑ‚ от\n"
-" -<чиÑло> най-малко [чиÑло] знака (по подразбиране 4).\n"
+" -n <чиÑло> Ðамира и извежда вÑÑка поÑледователноÑÑ‚ от\n"
+" --bytes=<чиÑло> най-малко <чиÑло> знака (по подразбиране 4).\n"
" -t --radix={o,d,x} Извежда мÑÑтото на низа при оÑнова 8, 10 или 16\n"
" -w --include-all-whitespace Включване на вÑички знаци за празно като правилни\n"
" -o Синоним за --radix=o\n"
@@ -11364,54 +12604,55 @@ msgstr ""
msgid "*undefined*"
msgstr "*неопределен*"
-#: sysdump.c:57
+#. PR 28564
+#: sysdump.c:57 sysdump.c:66
msgid "*corrupt*"
msgstr "*повреден*"
-#: sysdump.c:125
+#: sysdump.c:131
#, c-format
msgid "SUM IS %x\n"
msgstr ""
#. PR 17512: file: id:000001,src:000002,op:flip1,pos:45.
#. Prevent infinite loops re-reading beyond the end of the buffer.
-#: sysdump.c:161
+#: sysdump.c:169
msgid "ICE: getINT: Out of buffer space"
msgstr ""
-#: sysdump.c:185
+#: sysdump.c:194
#, c-format
msgid "Unsupported read size: %d"
msgstr "Ðеподдържан размер за четене: %d"
-#: sysdump.c:496
+#: sysdump.c:505
#, c-format
msgid "GOT A %x\n"
msgstr ""
-#: sysdump.c:514
+#: sysdump.c:523
#, c-format
msgid "WANTED %x!!\n"
msgstr ""
-#: sysdump.c:532
+#: sysdump.c:541
msgid "SYMBOL INFO"
msgstr ""
-#: sysdump.c:550
+#: sysdump.c:559
msgid "DERIVED TYPE"
msgstr ""
-#: sysdump.c:607
+#: sysdump.c:616
msgid "MODULE***\n"
msgstr ""
-#: sysdump.c:640
+#: sysdump.c:649
#, c-format
msgid "Print a human readable interpretation of a SYSROFF object file\n"
msgstr "Извежда четимо предÑтавÑне на SYSROFF обектен файл\n"
-#: sysdump.c:641
+#: sysdump.c:650
#, c-format
msgid ""
" The options are:\n"
@@ -11422,18 +12663,18 @@ msgstr ""
" -h --help Показва това Ñведение\n"
" -v --version Извежда номер на верÑÐ¸Ñ Ð½Ð° програмата\n"
-#: sysdump.c:709
+#: sysdump.c:716
#, c-format
msgid "cannot open input file %s"
msgstr "не можа да Ñе отвори входÑщ файл %s"
-#: unwind-ia64.c:176
+#: unwind-ia64.c:180
#, c-format
msgid "Unknown code 0x%02x\n"
msgstr " ÐеизвеÑтен код: 0x%02x\n"
#. PR 18420.
-#: unwind-ia64.c:362
+#: unwind-ia64.c:366
#, c-format
msgid ""
"\n"
@@ -11441,75 +12682,75 @@ msgid ""
"\n"
msgstr ""
-#: unwind-ia64.c:574
+#: unwind-ia64.c:578
#, c-format
msgid "Bad uleb128\n"
msgstr ""
-#: unwind-ia64.c:588
+#: unwind-ia64.c:592
#, c-format
msgid "\t<corrupt X1>\n"
msgstr "\t<повреден X1>\n"
-#: unwind-ia64.c:612
+#: unwind-ia64.c:616
#, c-format
msgid "\t<corrupt X2>\n"
msgstr "\t<повреден X2>\n"
-#: unwind-ia64.c:638
+#: unwind-ia64.c:642
#, c-format
msgid "\t<corrupt X3>\n"
msgstr "\t<повреден X3>\n"
-#: unwind-ia64.c:666
+#: unwind-ia64.c:670
#, c-format
msgid "\t<corrupt X4>\n"
msgstr "\t<повреден X4>\n"
-#: unwind-ia64.c:708
+#: unwind-ia64.c:712
#, c-format
msgid "\t<corrupt R2>\n"
msgstr "\t<повреден R2>\n"
-#: unwind-ia64.c:754
+#: unwind-ia64.c:758
#, c-format
msgid "\t<corrupt P2>\n"
msgstr "\t<повреден P2>\n"
-#: unwind-ia64.c:769
+#: unwind-ia64.c:773
#, c-format
msgid "\t<corrupt P3>\n"
msgstr "\t<повреден P3>\n"
-#: unwind-ia64.c:828
+#: unwind-ia64.c:832
#, c-format
msgid "\t<corrupt P5>\n"
msgstr "\t<повреден P5>\n"
-#: unwind-ia64.c:935
+#: unwind-ia64.c:939
#, c-format
msgid "\t<corrupt P8>\n"
msgstr "\t<повреден P8>\n"
-#: unwind-ia64.c:1010
+#: unwind-ia64.c:1014
#, c-format
msgid "\t<corrupt P9>\n"
msgstr "\t<повреден P9>\n"
-#: unwind-ia64.c:1022
+#: unwind-ia64.c:1026
#, c-format
msgid "\t<corrupt P10>\n"
msgstr "\t<повреден P10>\n"
-#: unwind-ia64.c:1153
+#: unwind-ia64.c:1157
#, c-format
msgid "\t<corrupt IA64 descriptor>\n"
msgstr "\t<повреден IA64 опиÑател>\n"
#: version.c:34
#, c-format
-msgid "Copyright (C) 2020 Free Software Foundation, Inc.\n"
-msgstr "ÐвторÑко право: 2020, Ð¤Ð¾Ð½Ð´Ð°Ñ†Ð¸Ñ Ð·Ð° Ñвободен Ñофтуер.\n"
+msgid "Copyright (C) 2022 Free Software Foundation, Inc.\n"
+msgstr "ÐвторÑко право: 2022, Ð¤Ð¾Ð½Ð´Ð°Ñ†Ð¸Ñ Ð·Ð° Ñвободен Ñофтуер.\n"
#: version.c:35
#, c-format
@@ -11586,17 +12827,17 @@ msgstr ""
msgid "try to add a ill language."
msgstr ""
-#: windmc.c:1117
+#: windmc.c:1115
#, c-format
msgid "unable to open file `%s' for input.\n"
msgstr "не можа да Ñе отвори файл '%s' за вход.\n"
-#: windmc.c:1125
+#: windmc.c:1123
#, c-format
msgid "unable to read contents of %s"
msgstr "не можа да Ñе прочете Ñъдържанието на %s"
-#: windmc.c:1137
+#: windmc.c:1135
msgid "input file does not seems to be UFT16.\n"
msgstr "изглежда входÑщиÑÑ‚ файл не е в UFT16.\n"
@@ -11620,28 +12861,28 @@ msgstr ": очаква Ñе лиÑÑ‚\n"
msgid ": duplicate value\n"
msgstr ": повторна ÑтойноÑÑ‚\n"
-#: windres.c:556
+#: windres.c:558
#, c-format
msgid "unknown format type `%s'"
msgstr "неизвеÑтен формат '%s'"
-#: windres.c:557
+#: windres.c:559
#, c-format
msgid "%s: supported formats:"
msgstr "%s: поддържани формати:"
#. Otherwise, we give up.
-#: windres.c:640
+#: windres.c:642
#, c-format
msgid "can not determine type of file `%s'; use the -J option"
msgstr "не може да Ñе определи типът на файла '%s'; да Ñе използва -J флаг"
-#: windres.c:652
+#: windres.c:654
#, c-format
msgid "Usage: %s [option(s)] [input-file] [output-file]\n"
msgstr "Употреба: %s [опци-Ñ/-и] [вх-файл] [изх-файл]\n"
-#: windres.c:654
+#: windres.c:656
#, c-format
msgid ""
" The options are:\n"
@@ -11680,12 +12921,12 @@ msgstr ""
" на резултата от преработката\n"
" --no-use-temp-file Използва Ñе popen (по подразбиране)\n"
-#: windres.c:672
+#: windres.c:674
#, c-format
msgid " --yydebug Turn on parser debugging\n"
msgstr " --yydebug Включва проÑледÑване на разбора\n"
-#: windres.c:675
+#: windres.c:677
#, c-format
msgid ""
" -r Ignored for compatibility with rc\n"
@@ -11698,7 +12939,7 @@ msgstr ""
" -h --help Извежда това помощно Ñъобщение\n"
" -V --version Извежда Ñведение за верÑиÑта\n"
-#: windres.c:680
+#: windres.c:682
#, c-format
msgid ""
"FORMAT is one of rc, res, or coff, and is deduced from the file name\n"
@@ -11706,24 +12947,24 @@ msgid ""
"No input-file is stdin, default rc. No output-file is stdout, default rc.\n"
msgstr ""
-#: windres.c:844
+#: windres.c:845
msgid "invalid codepage specified.\n"
msgstr "указана е неправилна кодова-Ñтраница.\n"
-#: windres.c:859
+#: windres.c:860
msgid "invalid option -f\n"
msgstr "Ñгрешена Ð¾Ð¿Ñ†Ð¸Ñ -f\n"
-#: windres.c:864
+#: windres.c:865
msgid "No filename following the -fo option.\n"
msgstr "ÐÑма име на файл Ñлед -fo флаг.\n"
-#: windres.c:953
+#: windres.c:960
#, c-format
msgid "Option -I is deprecated for setting the input format, please use -J instead.\n"
msgstr "ОпциÑта -I е забранена за задаване на формат за входÑÑ‰Ð¸Ñ Ñ„Ð°Ð¹Ð». ÐœÐ¾Ð»Ñ Ð¸Ð·Ð¿Ð¾Ð»Ð·Ð²Ð°Ð¹Ñ‚Ðµ -J.\n"
-#: windres.c:1066
+#: windres.c:1073
msgid "no resources"
msgstr "липÑват реÑурÑи"
@@ -11741,21 +12982,3 @@ msgstr "stab_int_type: неправилен размер %u"
#, c-format
msgid "%s: warning: unknown size for field `%s' in struct"
msgstr "%s: предупреждение: неизвеÑтен размер за полето '%s' на Ñтруктурата"
-
-#~ msgid "<could not load separate string section>"
-#~ msgstr "<не може да Ñе зареди отделен раздел за низове>"
-
-#~ msgid "(label)"
-#~ msgstr "(надпиÑ)"
-
-#~ msgid "(range)"
-#~ msgstr "(обхват)"
-
-#~ msgid "Section %s too small for %d hash table entries\n"
-#~ msgstr "Разделът, %s, е твърде малък за %d запиÑа на таблицата\n"
-
-#~ msgid "can't dump section - it is empty"
-#~ msgstr "празен раздел не може да Ñе разтовари"
-
-#~ msgid " <corrupt: %14ld>"
-#~ msgstr " <повреден: %14ld>"
diff --git a/binutils/po/binutils.pot b/binutils/po/binutils.pot
index 14f59c3b4f8..ba8bf7b85c2 100644
--- a/binutils/po/binutils.pot
+++ b/binutils/po/binutils.pot
@@ -7,8 +7,8 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: bug-binutils@gnu.org\n"
-"POT-Creation-Date: 2021-08-11 10:46+0100\n"
+"Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n"
+"POT-Creation-Date: 2022-01-22 12:21+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -57,9 +57,9 @@ msgid ""
"\n"
msgstr ""
-#: addr2line.c:109 ar.c:357 ar.c:394 coffdump.c:471 dlltool.c:3715
-#: dllwrap.c:518 elfedit.c:952 objcopy.c:697 objcopy.c:752 readelf.c:4855
-#: size.c:109 srconv.c:1704 strings.c:706 sysdump.c:649 windmc.c:227
+#: addr2line.c:109 ar.c:359 ar.c:396 coffdump.c:471 dlltool.c:3713
+#: dllwrap.c:518 elfedit.c:976 objcopy.c:697 objcopy.c:752 readelf.c:5165
+#: size.c:109 srconv.c:1704 strings.c:1343 sysdump.c:655 windmc.c:227
#: windres.c:690
#, c-format
msgid "Report bugs to %s\n"
@@ -96,261 +96,266 @@ msgstr ""
msgid "%s: cannot find section %s"
msgstr ""
-#: addr2line.c:442 ar.c:756 dlltool.c:3239 nm.c:1807 objcopy.c:6029
-#: objdump.c:5219 size.c:151 strings.c:289 windmc.c:958 windres.c:816
+#: addr2line.c:442 ar.c:758 dlltool.c:3237 nm.c:2051 objcopy.c:6036
+#: objdump.c:5372 size.c:151 strings.c:340 windmc.c:958 windres.c:816
msgid "fatal error: libbfd ABI mismatch"
msgstr ""
-#: addr2line.c:469 nm.c:1833 objdump.c:5266 readelf.c:5128
+#: addr2line.c:469 nm.c:2077 objdump.c:5419 readelf.c:5438
#, c-format
msgid "unknown demangling style `%s'"
msgstr ""
-#: ar.c:274
+#: ar.c:275
#, c-format
msgid "no entry %s in archive\n"
msgstr ""
-#: ar.c:288
+#: ar.c:289
#, c-format
msgid ""
"Usage: %s [emulation options] [-]{dmpqrstx}[abcDfilMNoOPsSTuvV] [--plugin "
"<name>] [member-name] [count] archive-file file...\n"
msgstr ""
-#: ar.c:294
+#: ar.c:295
#, c-format
msgid ""
"Usage: %s [emulation options] [-]{dmpqrstx}[abcDfilMNoOPsSTuvV] [member-"
"name] [count] archive-file file...\n"
msgstr ""
-#: ar.c:302
+#: ar.c:303
#, c-format
msgid " %s -M [<mri-script]\n"
msgstr ""
-#: ar.c:303
+#: ar.c:304
#, c-format
msgid " commands:\n"
msgstr ""
-#: ar.c:304
+#: ar.c:305
#, c-format
msgid " d - delete file(s) from the archive\n"
msgstr ""
-#: ar.c:305
+#: ar.c:306
#, c-format
msgid " m[ab] - move file(s) in the archive\n"
msgstr ""
-#: ar.c:306
+#: ar.c:307
#, c-format
msgid " p - print file(s) found in the archive\n"
msgstr ""
-#: ar.c:307
+#: ar.c:308
#, c-format
msgid " q[f] - quick append file(s) to the archive\n"
msgstr ""
-#: ar.c:308
+#: ar.c:309
#, c-format
msgid ""
" r[ab][f][u] - replace existing or insert new file(s) into the archive\n"
msgstr ""
-#: ar.c:309
+#: ar.c:310
#, c-format
msgid " s - act as ranlib\n"
msgstr ""
-#: ar.c:310
+#: ar.c:311
#, c-format
msgid " t[O][v] - display contents of the archive\n"
msgstr ""
-#: ar.c:311
+#: ar.c:312
#, c-format
msgid " x[o] - extract file(s) from the archive\n"
msgstr ""
-#: ar.c:312
+#: ar.c:313
#, c-format
msgid " command specific modifiers:\n"
msgstr ""
-#: ar.c:313
+#: ar.c:314
#, c-format
msgid " [a] - put file(s) after [member-name]\n"
msgstr ""
-#: ar.c:314
+#: ar.c:315
#, c-format
msgid " [b] - put file(s) before [member-name] (same as [i])\n"
msgstr ""
-#: ar.c:317
+#: ar.c:318
#, c-format
msgid " [D] - use zero for timestamps and uids/gids (default)\n"
msgstr ""
-#: ar.c:319
+#: ar.c:320
#, c-format
msgid " [U] - use actual timestamps and uids/gids\n"
msgstr ""
-#: ar.c:324
+#: ar.c:325
#, c-format
msgid " [D] - use zero for timestamps and uids/gids\n"
msgstr ""
-#: ar.c:326
+#: ar.c:327
#, c-format
msgid " [U] - use actual timestamps and uids/gids (default)\n"
msgstr ""
-#: ar.c:329
+#: ar.c:330
#, c-format
msgid " [N] - use instance [count] of name\n"
msgstr ""
-#: ar.c:330
+#: ar.c:331
#, c-format
msgid " [f] - truncate inserted file names\n"
msgstr ""
-#: ar.c:331
+#: ar.c:332
#, c-format
msgid " [P] - use full path names when matching\n"
msgstr ""
-#: ar.c:332
+#: ar.c:333
#, c-format
msgid " [o] - preserve original dates\n"
msgstr ""
-#: ar.c:333
+#: ar.c:334
#, c-format
msgid " [O] - display offsets of files in the archive\n"
msgstr ""
-#: ar.c:334
+#: ar.c:335
#, c-format
msgid ""
" [u] - only replace files that are newer than current archive "
"contents\n"
msgstr ""
-#: ar.c:335
+#: ar.c:336
#, c-format
msgid " generic modifiers:\n"
msgstr ""
-#: ar.c:336
+#: ar.c:337
#, c-format
msgid " [c] - do not warn if the library had to be created\n"
msgstr ""
-#: ar.c:337
+#: ar.c:338
#, c-format
msgid " [s] - create an archive index (cf. ranlib)\n"
msgstr ""
-#: ar.c:338
+#: ar.c:339
#, c-format
msgid " [l <text> ] - specify the dependencies of this library\n"
msgstr ""
-#: ar.c:339
+#: ar.c:340
#, c-format
msgid " [S] - do not build a symbol table\n"
msgstr ""
-#: ar.c:340
+#: ar.c:341
#, c-format
-msgid " [T] - make a thin archive\n"
+msgid " [T] - deprecated, use --thin instead\n"
msgstr ""
-#: ar.c:341
+#: ar.c:342
#, c-format
msgid " [v] - be verbose\n"
msgstr ""
-#: ar.c:342
+#: ar.c:343
#, c-format
msgid " [V] - display the version number\n"
msgstr ""
-#: ar.c:343
+#: ar.c:344
#, c-format
msgid " @<file> - read options from <file>\n"
msgstr ""
-#: ar.c:344
+#: ar.c:345
#, c-format
msgid " --target=BFDNAME - specify the target object format as BFDNAME\n"
msgstr ""
-#: ar.c:345
+#: ar.c:346
#, c-format
msgid ""
" --output=DIRNAME - specify the output directory for extraction operations\n"
msgstr ""
-#: ar.c:346
+#: ar.c:347
#, c-format
msgid " --record-libdeps=<text> - specify the dependencies of this library\n"
msgstr ""
#: ar.c:348
#, c-format
+msgid " --thin - make a thin archive\n"
+msgstr ""
+
+#: ar.c:350
+#, c-format
msgid " optional:\n"
msgstr ""
-#: ar.c:349
+#: ar.c:351
#, c-format
msgid " --plugin <p> - load the specified plugin\n"
msgstr ""
-#: ar.c:370
+#: ar.c:372
#, c-format
msgid "Usage: %s [options] archive\n"
msgstr ""
-#: ar.c:371
+#: ar.c:373
#, c-format
msgid " Generate an index to speed access to archives\n"
msgstr ""
-#: ar.c:372
+#: ar.c:374
#, c-format
msgid ""
" The options are:\n"
" @<file> Read options from <file>\n"
msgstr ""
-#: ar.c:375
+#: ar.c:377
#, c-format
msgid " --plugin <name> Load the specified plugin\n"
msgstr ""
-#: ar.c:379
+#: ar.c:381
#, c-format
msgid ""
" -D Use zero for symbol map timestamp (default)\n"
" -U Use an actual symbol map timestamp\n"
msgstr ""
-#: ar.c:383
+#: ar.c:385
#, c-format
msgid ""
" -D Use zero for symbol map timestamp\n"
" -U Use actual symbol map timestamp (default)\n"
msgstr ""
-#: ar.c:386
+#: ar.c:388
#, c-format
msgid ""
" -t Update the archive's symbol map timestamp\n"
@@ -358,133 +363,133 @@ msgid ""
" -v --version Print version information\n"
msgstr ""
-#: ar.c:511
+#: ar.c:513
msgid "two different operation options specified"
msgstr ""
-#: ar.c:547
+#: ar.c:549
msgid "libdeps specified more than once"
msgstr ""
-#: ar.c:608 ar.c:683 nm.c:1926
+#: ar.c:610 ar.c:685 nm.c:2188
#, c-format
msgid "sorry - this program has been built without plugin support\n"
msgstr ""
-#: ar.c:812
+#: ar.c:814
msgid "no operation specified"
msgstr ""
-#: ar.c:815
+#: ar.c:817
msgid "`u' is only meaningful with the `r' option."
msgstr ""
-#: ar.c:818
+#: ar.c:820
msgid "`u' is not meaningful with the `D' option."
msgstr ""
-#: ar.c:821
+#: ar.c:823
msgid "`u' modifier ignored since `D' is the default (see `U')"
msgstr ""
-#: ar.c:830
+#: ar.c:832
msgid "missing position arg."
msgstr ""
-#: ar.c:836
+#: ar.c:838
msgid "`N' is only meaningful with the `x' and `d' options."
msgstr ""
-#: ar.c:838
+#: ar.c:840
msgid "`N' missing value."
msgstr ""
-#: ar.c:841
+#: ar.c:843
msgid "Value for `N' must be positive."
msgstr ""
-#: ar.c:857
+#: ar.c:859
msgid "`x' cannot be used on thin archives."
msgstr ""
-#: ar.c:871
+#: ar.c:873
msgid "Cannot create libdeps record."
msgstr ""
-#: ar.c:874
+#: ar.c:876
msgid "Cannot set libdeps record type to binary."
msgstr ""
-#: ar.c:877
+#: ar.c:879
msgid "Cannot set libdeps object format."
msgstr ""
-#: ar.c:880
+#: ar.c:882
msgid "Cannot make libdeps object writable."
msgstr ""
-#: ar.c:883
+#: ar.c:885
msgid "Cannot write libdeps record."
msgstr ""
-#: ar.c:886
+#: ar.c:888
msgid "Cannot make libdeps object readable."
msgstr ""
-#: ar.c:889
+#: ar.c:891
msgid "Cannot reset libdeps record type."
msgstr ""
-#: ar.c:950
+#: ar.c:952
#, c-format
msgid "internal error -- this option not implemented"
msgstr ""
-#: ar.c:1019
+#: ar.c:1021
#, c-format
msgid "creating %s"
msgstr ""
-#: ar.c:1050
+#: ar.c:1052
#, c-format
msgid "Cannot convert existing library %s to thin format"
msgstr ""
-#: ar.c:1056
+#: ar.c:1058
#, c-format
msgid "Cannot convert existing thin library %s to normal format"
msgstr ""
-#: ar.c:1088 ar.c:1185 ar.c:1507 objcopy.c:3606
+#: ar.c:1090 ar.c:1190 ar.c:1512 objcopy.c:3612
#, c-format
msgid "internal stat error on %s"
msgstr ""
-#: ar.c:1107 ar.c:1211
+#: ar.c:1109 ar.c:1216
#, c-format
msgid "%s is not a valid archive"
msgstr ""
-#: ar.c:1135
+#: ar.c:1137
#, c-format
msgid "illegal output pathname for archive member: %s, using '%s' instead"
msgstr ""
-#: ar.c:1259
+#: ar.c:1264
msgid "could not create temporary file whilst writing archive"
msgstr ""
-#: ar.c:1410
+#: ar.c:1415
#, c-format
msgid "No member named `%s'\n"
msgstr ""
-#: ar.c:1460
+#: ar.c:1465
#, c-format
msgid "no entry %s in archive %s!"
msgstr ""
-#: ar.c:1620
+#: ar.c:1625
#, c-format
msgid "%s: no archive map to update"
msgstr ""
@@ -560,7 +565,7 @@ msgstr ""
msgid " emulation options: \n"
msgstr ""
-#: bucomm.c:43 bucomm.c:77
+#: bucomm.c:43 bucomm.c:76
msgid "cause of error unknown"
msgstr ""
@@ -628,17 +633,17 @@ msgstr ""
msgid "%s: bad number: %s"
msgstr ""
-#: bucomm.c:607 strings.c:402
+#: bucomm.c:607 strings.c:453
#, c-format
msgid "'%s': No such file"
msgstr ""
-#: bucomm.c:609 strings.c:404
+#: bucomm.c:609 strings.c:455
#, c-format
msgid "Warning: could not locate '%s'. reason: %s"
msgstr ""
-#: bucomm.c:613 strings.c:410
+#: bucomm.c:613 strings.c:461
#, c-format
msgid "Warning: '%s' is a directory"
msgstr ""
@@ -758,7 +763,7 @@ msgstr ""
msgid "Symbol %s, tag %d, number %d"
msgstr ""
-#: coffdump.c:345 readelf.c:18468 readelf.c:18559
+#: coffdump.c:345 readelf.c:18836 readelf.c:18927
#, c-format
msgid "Type"
msgstr ""
@@ -812,7 +817,7 @@ msgstr ""
msgid "#sources %d"
msgstr ""
-#: coffdump.c:462 sysdump.c:642
+#: coffdump.c:462 sysdump.c:648
#, c-format
msgid "Usage: %s [option(s)] in-file\n"
msgstr ""
@@ -832,7 +837,7 @@ msgid ""
"\n"
msgstr ""
-#: coffdump.c:532 srconv.c:1793 sysdump.c:705
+#: coffdump.c:532 srconv.c:1793 sysdump.c:711
msgid "no input file specified"
msgstr ""
@@ -980,7 +985,7 @@ msgstr ""
msgid "%s: is not a COFF format file"
msgstr ""
-#: cxxfilt.c:124 nm.c:324 objdump.c:390
+#: cxxfilt.c:124 nm.c:379 objdump.c:405
#, c-format
msgid "Report bugs to %s.\n"
msgstr ""
@@ -1074,7 +1079,7 @@ msgstr ""
msgid "debug_get_real_type: circular debug information for %s\n"
msgstr ""
-#: debug.c:2484
+#: debug.c:2490
msgid "debug_write_type: illegal type encountered"
msgstr ""
@@ -1102,460 +1107,460 @@ msgstr ""
msgid "Syntax error in def file %s:%d"
msgstr ""
-#: dlltool.c:1034
+#: dlltool.c:1032
#, c-format
msgid "%s: Path components stripped from image name, '%s'."
msgstr ""
-#: dlltool.c:1052
+#: dlltool.c:1050
#, c-format
msgid "NAME: %s base: %x"
msgstr ""
-#: dlltool.c:1055 dlltool.c:1076
+#: dlltool.c:1053 dlltool.c:1074
msgid "Can't have LIBRARY and NAME"
msgstr ""
-#: dlltool.c:1073
+#: dlltool.c:1071
#, c-format
msgid "LIBRARY: %s base: %x"
msgstr ""
-#: dlltool.c:1228
+#: dlltool.c:1226
#, c-format
msgid "VERSION %d.%d\n"
msgstr ""
-#: dlltool.c:1276
+#: dlltool.c:1274
#, c-format
msgid "run: %s %s"
msgstr ""
-#: dlltool.c:1317 resrc.c:288
+#: dlltool.c:1315 resrc.c:288
#, c-format
msgid "wait: %s"
msgstr ""
-#: dlltool.c:1322 dllwrap.c:416 resrc.c:293
+#: dlltool.c:1320 dllwrap.c:416 resrc.c:293
#, c-format
msgid "subprocess got fatal signal %d"
msgstr ""
-#: dlltool.c:1328 dllwrap.c:423 resrc.c:300
+#: dlltool.c:1326 dllwrap.c:423 resrc.c:300
#, c-format
msgid "%s exited with status %d"
msgstr ""
-#: dlltool.c:1359
+#: dlltool.c:1357
#, c-format
msgid "Sucking in info from %s section in %s"
msgstr ""
-#: dlltool.c:1499
+#: dlltool.c:1497
#, c-format
msgid "Excluding symbol: %s"
msgstr ""
-#: dlltool.c:1588 dlltool.c:1599 nm.c:1172 nm.c:1183 nm.c:1193
+#: dlltool.c:1586 dlltool.c:1597 nm.c:1416 nm.c:1427 nm.c:1437
#, c-format
msgid "%s: no symbols"
msgstr ""
#. FIXME: we ought to read in and block out the base relocations.
-#: dlltool.c:1625
+#: dlltool.c:1623
#, c-format
msgid "Done reading %s"
msgstr ""
-#: dlltool.c:1635
+#: dlltool.c:1633
#, c-format
msgid "Unable to open object file: %s: %s"
msgstr ""
-#: dlltool.c:1638
+#: dlltool.c:1636
#, c-format
msgid "Scanning object file %s"
msgstr ""
-#: dlltool.c:1658
+#: dlltool.c:1656
#, c-format
msgid "Cannot produce mcore-elf dll from archive file: %s"
msgstr ""
-#: dlltool.c:1760
+#: dlltool.c:1758
msgid "Adding exports to output file"
msgstr ""
-#: dlltool.c:1812
+#: dlltool.c:1810
msgid "Added exports to output file"
msgstr ""
-#: dlltool.c:1980
+#: dlltool.c:1978
#, c-format
msgid "Generating export file: %s"
msgstr ""
-#: dlltool.c:1985
+#: dlltool.c:1983
#, c-format
msgid "Unable to open temporary assembler file: %s"
msgstr ""
-#: dlltool.c:1990
+#: dlltool.c:1988
#, c-format
msgid "Opened temporary file: %s"
msgstr ""
-#: dlltool.c:2166
+#: dlltool.c:2164
msgid "failed to read the number of entries from base file"
msgstr ""
-#: dlltool.c:2217
+#: dlltool.c:2215
msgid "Generated exports file"
msgstr ""
-#: dlltool.c:2375
+#: dlltool.c:2373
#, c-format
msgid "bfd_open failed open stub file: %s: %s"
msgstr ""
-#: dlltool.c:2379
+#: dlltool.c:2377
#, c-format
msgid "Creating stub file: %s"
msgstr ""
-#: dlltool.c:2693
+#: dlltool.c:2691
#, c-format
msgid "bfd_open failed reopen stub file: %s: %s"
msgstr ""
-#: dlltool.c:2707 dlltool.c:2786
+#: dlltool.c:2705 dlltool.c:2784
#, c-format
msgid "failed to open temporary head file: %s"
msgstr ""
-#: dlltool.c:2771 dlltool.c:2861
+#: dlltool.c:2769 dlltool.c:2859
#, c-format
msgid "failed to open temporary head file: %s: %s"
msgstr ""
-#: dlltool.c:2876
+#: dlltool.c:2874
#, c-format
msgid "failed to open temporary tail file: %s"
msgstr ""
-#: dlltool.c:2912
+#: dlltool.c:2910
#, c-format
msgid "failed to open temporary tail file: %s: %s"
msgstr ""
-#: dlltool.c:2935
+#: dlltool.c:2933
#, c-format
msgid "Can't create .lib file: %s: %s"
msgstr ""
-#: dlltool.c:2939
+#: dlltool.c:2937
#, c-format
msgid "Creating library file: %s"
msgstr ""
-#: dlltool.c:3026 dlltool.c:3032
+#: dlltool.c:3024 dlltool.c:3030
#, c-format
msgid "cannot delete %s: %s"
msgstr ""
-#: dlltool.c:3038
+#: dlltool.c:3036
msgid "Created lib file"
msgstr ""
-#: dlltool.c:3244
+#: dlltool.c:3242
#, c-format
msgid "Can't open .lib file: %s: %s"
msgstr ""
-#: dlltool.c:3252 dlltool.c:3274
+#: dlltool.c:3250 dlltool.c:3272
#, c-format
msgid "%s is not a library"
msgstr ""
-#: dlltool.c:3292
+#: dlltool.c:3290
#, c-format
msgid "Import library `%s' specifies two or more dlls"
msgstr ""
-#: dlltool.c:3303
+#: dlltool.c:3301
#, c-format
msgid "Unable to determine dll name for `%s' (not an import library?)"
msgstr ""
-#: dlltool.c:3529
+#: dlltool.c:3527
#, c-format
msgid "Warning, ignoring duplicate EXPORT %s %d,%d"
msgstr ""
-#: dlltool.c:3535
+#: dlltool.c:3533
#, c-format
msgid "Error, duplicate EXPORT with ordinals: %s"
msgstr ""
-#: dlltool.c:3638
+#: dlltool.c:3636
msgid "Processing definitions"
msgstr ""
-#: dlltool.c:3665
+#: dlltool.c:3663
msgid "Processed definitions"
msgstr ""
#. xgetext:c-format
-#: dlltool.c:3672 dllwrap.c:477
+#: dlltool.c:3670 dllwrap.c:477
#, c-format
msgid "Usage %s <option(s)> <object-file(s)>\n"
msgstr ""
#. xgetext:c-format
-#: dlltool.c:3674
+#: dlltool.c:3672
#, c-format
msgid ""
" -m --machine <machine> Create as DLL for <machine>. [default: %s]\n"
msgstr ""
-#: dlltool.c:3675
+#: dlltool.c:3673
#, c-format
msgid ""
" possible <machine>: arm[_interwork], i386, mcore[-elf]{-le|-be}, "
"thumb\n"
msgstr ""
-#: dlltool.c:3676
+#: dlltool.c:3674
#, c-format
msgid " -e --output-exp <outname> Generate an export file.\n"
msgstr ""
-#: dlltool.c:3677
+#: dlltool.c:3675
#, c-format
msgid " -l --output-lib <outname> Generate an interface library.\n"
msgstr ""
-#: dlltool.c:3678
+#: dlltool.c:3676
#, c-format
msgid " -y --output-delaylib <outname> Create a delay-import library.\n"
msgstr ""
-#: dlltool.c:3679
+#: dlltool.c:3677
#, c-format
msgid " -a --add-indirect Add dll indirects to export file.\n"
msgstr ""
-#: dlltool.c:3680
+#: dlltool.c:3678
#, c-format
msgid ""
" -D --dllname <name> Name of input dll to put into interface lib.\n"
msgstr ""
-#: dlltool.c:3681
+#: dlltool.c:3679
#, c-format
msgid " -d --input-def <deffile> Name of .def file to be read in.\n"
msgstr ""
-#: dlltool.c:3682
+#: dlltool.c:3680
#, c-format
msgid " -z --output-def <deffile> Name of .def file to be created.\n"
msgstr ""
-#: dlltool.c:3683
+#: dlltool.c:3681
#, c-format
msgid " --export-all-symbols Export all symbols to .def\n"
msgstr ""
-#: dlltool.c:3684
+#: dlltool.c:3682
#, c-format
msgid " --no-export-all-symbols Only export listed symbols\n"
msgstr ""
-#: dlltool.c:3685
+#: dlltool.c:3683
#, c-format
msgid " --exclude-symbols <list> Don't export <list>\n"
msgstr ""
-#: dlltool.c:3686
+#: dlltool.c:3684
#, c-format
msgid " --no-default-excludes Clear default exclude symbols\n"
msgstr ""
-#: dlltool.c:3687
+#: dlltool.c:3685
#, c-format
msgid " -b --base-file <basefile> Read linker generated base file.\n"
msgstr ""
-#: dlltool.c:3688
+#: dlltool.c:3686
#, c-format
msgid " -x --no-idata4 Don't generate idata$4 section.\n"
msgstr ""
-#: dlltool.c:3689
+#: dlltool.c:3687
#, c-format
msgid " -c --no-idata5 Don't generate idata$5 section.\n"
msgstr ""
-#: dlltool.c:3690
+#: dlltool.c:3688
#, c-format
msgid ""
" --use-nul-prefixed-import-tables Use zero prefixed idata$4 and idata"
"$5.\n"
msgstr ""
-#: dlltool.c:3691
+#: dlltool.c:3689
#, c-format
msgid ""
" -U --add-underscore Add underscores to all symbols in interface "
"library.\n"
msgstr ""
-#: dlltool.c:3692
+#: dlltool.c:3690
#, c-format
msgid ""
" --add-stdcall-underscore Add underscores to stdcall symbols in "
"interface library.\n"
msgstr ""
-#: dlltool.c:3693
+#: dlltool.c:3691
#, c-format
msgid ""
" --no-leading-underscore All symbols shouldn't be prefixed by an "
"underscore.\n"
msgstr ""
-#: dlltool.c:3694
+#: dlltool.c:3692
#, c-format
msgid ""
" --leading-underscore All symbols should be prefixed by an "
"underscore.\n"
msgstr ""
-#: dlltool.c:3695
+#: dlltool.c:3693
#, c-format
msgid " -k --kill-at Kill @<n> from exported names.\n"
msgstr ""
-#: dlltool.c:3696
+#: dlltool.c:3694
#, c-format
msgid " -A --add-stdcall-alias Add aliases without @<n>.\n"
msgstr ""
-#: dlltool.c:3697
+#: dlltool.c:3695
#, c-format
msgid " -p --ext-prefix-alias <prefix> Add aliases with <prefix>.\n"
msgstr ""
-#: dlltool.c:3698
+#: dlltool.c:3696
#, c-format
msgid " -S --as <name> Use <name> for assembler.\n"
msgstr ""
-#: dlltool.c:3699
+#: dlltool.c:3697
#, c-format
msgid " -f --as-flags <flags> Pass <flags> to the assembler.\n"
msgstr ""
-#: dlltool.c:3700
+#: dlltool.c:3698
#, c-format
msgid ""
" -C --compat-implib Create backward compatible import library.\n"
msgstr ""
-#: dlltool.c:3701
+#: dlltool.c:3699
#, c-format
msgid ""
" -n --no-delete Keep temp files (repeat for extra "
"preservation).\n"
msgstr ""
-#: dlltool.c:3702
+#: dlltool.c:3700
#, c-format
msgid ""
" -t --temp-prefix <prefix> Use <prefix> to construct temp file names.\n"
msgstr ""
-#: dlltool.c:3703
+#: dlltool.c:3701
#, c-format
msgid ""
" -I --identify <implib> Report the name of the DLL associated with "
"<implib>.\n"
msgstr ""
-#: dlltool.c:3704
+#: dlltool.c:3702
#, c-format
msgid ""
" --identify-strict Causes --identify to report error when multiple "
"DLLs.\n"
msgstr ""
-#: dlltool.c:3705
+#: dlltool.c:3703
#, c-format
msgid " -v --verbose Be verbose.\n"
msgstr ""
-#: dlltool.c:3706
+#: dlltool.c:3704
#, c-format
msgid " -V --version Display the program version.\n"
msgstr ""
-#: dlltool.c:3707
+#: dlltool.c:3705
#, c-format
msgid " -h --help Display this information.\n"
msgstr ""
-#: dlltool.c:3708
+#: dlltool.c:3706
#, c-format
msgid " @<file> Read options from <file>.\n"
msgstr ""
-#: dlltool.c:3710
+#: dlltool.c:3708
#, c-format
msgid ""
" -M --mcore-elf <outname> Process mcore-elf object files into <outname>.\n"
msgstr ""
-#: dlltool.c:3711
+#: dlltool.c:3709
#, c-format
msgid " -L --linker <name> Use <name> as the linker.\n"
msgstr ""
-#: dlltool.c:3712
+#: dlltool.c:3710
#, c-format
msgid " -F --linker-flags <flags> Pass <flags> to the linker.\n"
msgstr ""
-#: dlltool.c:3856
+#: dlltool.c:3854
#, c-format
msgid "Unable to open def-file: %s"
msgstr ""
-#: dlltool.c:3861
+#: dlltool.c:3859
#, c-format
msgid "Path components stripped from dllname, '%s'."
msgstr ""
-#: dlltool.c:3909
+#: dlltool.c:3907
#, c-format
msgid "Unable to open base-file: %s"
msgstr ""
-#: dlltool.c:3944
+#: dlltool.c:3956
#, c-format
msgid "Machine '%s' not supported"
msgstr ""
-#: dlltool.c:4024
+#: dlltool.c:4036
#, c-format
msgid "Warning, machine type (%d) not supported for delayimport."
msgstr ""
-#: dlltool.c:4092 dllwrap.c:206
+#: dlltool.c:4104 dllwrap.c:206
#, c-format
msgid "Tried file: %s"
msgstr ""
-#: dlltool.c:4099 dllwrap.c:213
+#: dlltool.c:4111 dllwrap.c:213
#, c-format
msgid "Using file: %s"
msgstr ""
@@ -1849,7 +1854,7 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: dwarf.c:477 dwarf.c:5208
+#: dwarf.c:477 dwarf.c:5210
msgid "Badly formed extended line op encountered!\n"
msgstr ""
@@ -1880,7 +1885,7 @@ msgstr ""
msgid "define new File Table entry\n"
msgstr ""
-#: dwarf.c:510 dwarf.c:4502
+#: dwarf.c:510 dwarf.c:4504
#, c-format
msgid " Entry\tDir\tTime\tSize\tName\n"
msgstr ""
@@ -2227,1253 +2232,1253 @@ msgstr ""
msgid "Unrecognized form: 0x%lx\n"
msgstr ""
-#: dwarf.c:2806
+#: dwarf.c:2808
msgid "More location offset attributes than DW_AT_GNU_locview attributes\n"
msgstr ""
-#: dwarf.c:2818
+#: dwarf.c:2820
msgid "More DW_AT_GNU_locview attributes than location offset attributes\n"
msgstr ""
-#: dwarf.c:2887 dwarf.c:2919 dwarf.c:2934
+#: dwarf.c:2889 dwarf.c:2921 dwarf.c:2936
#, c-format
msgid "Unsupported form (%s) for attribute %s\n"
msgstr ""
-#: dwarf.c:2981
+#: dwarf.c:2983
#, c-format
msgid "(not inlined)"
msgstr ""
-#: dwarf.c:2984
+#: dwarf.c:2986
#, c-format
msgid "(inlined)"
msgstr ""
-#: dwarf.c:2987
+#: dwarf.c:2989
#, c-format
msgid "(declared as inline but ignored)"
msgstr ""
-#: dwarf.c:2990
+#: dwarf.c:2992
#, c-format
msgid "(declared as inline and inlined)"
msgstr ""
-#: dwarf.c:2993
+#: dwarf.c:2995
#, c-format
msgid " (Unknown inline attribute value: %s)"
msgstr ""
-#: dwarf.c:3050
+#: dwarf.c:3052
#, c-format
msgid "(implementation defined: %s)"
msgstr ""
-#: dwarf.c:3053
+#: dwarf.c:3055
#, c-format
msgid "(Unknown: %s)"
msgstr ""
-#: dwarf.c:3098
+#: dwarf.c:3100
#, c-format
msgid "(user defined type)"
msgstr ""
-#: dwarf.c:3100
+#: dwarf.c:3102
#, c-format
msgid "(unknown type)"
msgstr ""
-#: dwarf.c:3113
+#: dwarf.c:3115
#, c-format
msgid "(unknown accessibility)"
msgstr ""
-#: dwarf.c:3125
+#: dwarf.c:3127
#, c-format
msgid "(unknown visibility)"
msgstr ""
-#: dwarf.c:3138
+#: dwarf.c:3140
#, c-format
msgid "(user specified)"
msgstr ""
-#: dwarf.c:3140
+#: dwarf.c:3142
#, c-format
msgid "(unknown endianity)"
msgstr ""
-#: dwarf.c:3152
+#: dwarf.c:3154
#, c-format
msgid "(unknown virtuality)"
msgstr ""
-#: dwarf.c:3164
+#: dwarf.c:3166
#, c-format
msgid "(unknown case)"
msgstr ""
-#: dwarf.c:3182
+#: dwarf.c:3184
#, c-format
msgid "(user defined)"
msgstr ""
-#: dwarf.c:3184
+#: dwarf.c:3186
#, c-format
msgid "(unknown convention)"
msgstr ""
-#: dwarf.c:3193
+#: dwarf.c:3195
#, c-format
msgid "(undefined)"
msgstr ""
-#: dwarf.c:3203
+#: dwarf.c:3205
#, c-format
msgid "(unsigned)"
msgstr ""
-#: dwarf.c:3204
+#: dwarf.c:3206
#, c-format
msgid "(leading overpunch)"
msgstr ""
-#: dwarf.c:3205
+#: dwarf.c:3207
#, c-format
msgid "(trailing overpunch)"
msgstr ""
-#: dwarf.c:3206
+#: dwarf.c:3208
#, c-format
msgid "(leading separate)"
msgstr ""
-#: dwarf.c:3207
+#: dwarf.c:3209
#, c-format
msgid "(trailing separate)"
msgstr ""
-#: dwarf.c:3208 dwarf.c:3219
+#: dwarf.c:3210 dwarf.c:3221
#, c-format
msgid "(unrecognised)"
msgstr ""
-#: dwarf.c:3216
+#: dwarf.c:3218
#, c-format
msgid "(no)"
msgstr ""
-#: dwarf.c:3217
+#: dwarf.c:3219
#, c-format
msgid "(in class)"
msgstr ""
-#: dwarf.c:3218
+#: dwarf.c:3220
#, c-format
msgid "(out of class)"
msgstr ""
-#: dwarf.c:3250
+#: dwarf.c:3252
#, c-format
msgid " (location list)"
msgstr ""
-#: dwarf.c:3271 dwarf.c:6442 dwarf.c:6612 dwarf.c:6787
+#: dwarf.c:3273 dwarf.c:6449 dwarf.c:6620 dwarf.c:6796
#, c-format
msgid " [without DW_AT_frame_base]"
msgstr ""
-#: dwarf.c:3301
+#: dwarf.c:3303
#, c-format
msgid ""
"Offset %s used as value for DW_AT_import attribute of DIE at offset 0x%lx is "
"too big.\n"
msgstr ""
-#: dwarf.c:3307
+#: dwarf.c:3309
#, c-format
msgid "\t[Abbrev Number: %ld"
msgstr ""
-#: dwarf.c:3402
+#: dwarf.c:3404
#, c-format
msgid ""
"Raw dump of debug contents of section %s (loaded from %s):\n"
"\n"
msgstr ""
-#: dwarf.c:3405
+#: dwarf.c:3407
#, c-format
msgid ""
"Raw dump of debug contents of section %s:\n"
"\n"
msgstr ""
-#: dwarf.c:3410
+#: dwarf.c:3412
#, c-format
msgid ""
"Contents of the %s section (loaded from %s):\n"
"\n"
msgstr ""
-#: dwarf.c:3413
+#: dwarf.c:3415
#, c-format
msgid ""
"Contents of the %s section:\n"
"\n"
msgstr ""
-#: dwarf.c:3456
+#: dwarf.c:3458
#, c-format
msgid "Reserved length value (0x%s) found in section %s\n"
msgstr ""
-#: dwarf.c:3466
+#: dwarf.c:3468
#, c-format
msgid "Corrupt unit length (got 0x%s expected at most 0x%s) in section %s\n"
msgstr ""
-#: dwarf.c:3477
+#: dwarf.c:3479
#, c-format
msgid "No comp units in %s section ?\n"
msgstr ""
-#: dwarf.c:3491
+#: dwarf.c:3493
#, c-format
msgid "Not enough memory for a debug info array of %u entries\n"
msgstr ""
-#: dwarf.c:3520
+#: dwarf.c:3522
#, c-format
msgid "Unable to locate %s section!\n"
msgstr ""
-#: dwarf.c:3696
+#: dwarf.c:3698
#, c-format
msgid "Invalid pointer size (%d) in compunit header, using %d instead\n"
msgstr ""
-#: dwarf.c:3737
+#: dwarf.c:3739
#, c-format
msgid " Compilation Unit @ offset 0x%s:\n"
msgstr ""
-#: dwarf.c:3739
+#: dwarf.c:3741
#, c-format
msgid " Length: 0x%s (%s)\n"
msgstr ""
-#: dwarf.c:3742
+#: dwarf.c:3744
#, c-format
msgid " Version: %d\n"
msgstr ""
-#: dwarf.c:3747
+#: dwarf.c:3749
#, c-format
msgid " Unit Type: %s (%x)\n"
msgstr ""
-#: dwarf.c:3751
+#: dwarf.c:3753
#, c-format
msgid " Abbrev Offset: 0x%s\n"
msgstr ""
-#: dwarf.c:3753
+#: dwarf.c:3755
#, c-format
msgid " Pointer Size: %d\n"
msgstr ""
-#: dwarf.c:3756
+#: dwarf.c:3758
#, c-format
msgid " Signature: 0x%s\n"
msgstr ""
-#: dwarf.c:3758
+#: dwarf.c:3760
#, c-format
msgid " Type Offset: 0x%s\n"
msgstr ""
-#: dwarf.c:3762
+#: dwarf.c:3764
#, c-format
msgid " DWO ID: 0x%s\n"
msgstr ""
-#: dwarf.c:3768
+#: dwarf.c:3770
#, c-format
msgid " Section contributions:\n"
msgstr ""
-#: dwarf.c:3769
+#: dwarf.c:3771
#, c-format
msgid " .debug_abbrev.dwo: 0x%s 0x%s\n"
msgstr ""
-#: dwarf.c:3772
+#: dwarf.c:3774
#, c-format
msgid " .debug_line.dwo: 0x%s 0x%s\n"
msgstr ""
-#: dwarf.c:3775
+#: dwarf.c:3777
#, c-format
msgid " .debug_loc.dwo: 0x%s 0x%s\n"
msgstr ""
-#: dwarf.c:3778
+#: dwarf.c:3780
#, c-format
msgid " .debug_str_offsets.dwo: 0x%s 0x%s\n"
msgstr ""
-#: dwarf.c:3789
+#: dwarf.c:3791
#, c-format
msgid "CU at offset %s contains corrupt or unsupported version number: %d.\n"
msgstr ""
-#: dwarf.c:3801
+#: dwarf.c:3803
#, c-format
msgid "CU at offset %s contains corrupt or unsupported unit type: %d.\n"
msgstr ""
-#: dwarf.c:3856
+#: dwarf.c:3858
#, c-format
msgid " <%d><%lx>: Abbrev Number: 0\n"
msgstr ""
-#: dwarf.c:3866
+#: dwarf.c:3868
#, c-format
msgid "Bogus end-of-siblings marker detected at offset %lx in %s section\n"
msgstr ""
-#: dwarf.c:3870
+#: dwarf.c:3872
msgid "Further warnings about bogus end-of-sibling markers suppressed\n"
msgstr ""
-#: dwarf.c:3889
+#: dwarf.c:3891
#, c-format
msgid " <%d><%lx>: Abbrev Number: %lu"
msgstr ""
-#: dwarf.c:3893
+#: dwarf.c:3895
#, c-format
msgid " <%d><%lx>: ...\n"
msgstr ""
-#: dwarf.c:3914
+#: dwarf.c:3916
#, c-format
msgid ""
"DIE at offset 0x%lx refers to abbreviation number %lu which does not exist\n"
msgstr ""
-#: dwarf.c:3988
+#: dwarf.c:3990
msgid "DIE has locviews without loclist\n"
msgstr ""
-#: dwarf.c:4097
+#: dwarf.c:4099
#, c-format
msgid ""
"The length field (0x%lx) in the debug_line header is wrong - the section is "
"too small\n"
msgstr ""
-#: dwarf.c:4112
+#: dwarf.c:4114
msgid "Only DWARF version 2, 3, 4 and 5 line info is currently supported.\n"
msgstr ""
-#: dwarf.c:4124 dwarf.c:6880 dwarf.c:7745
+#: dwarf.c:4126 dwarf.c:6889 dwarf.c:7763
#, c-format
msgid "The %s section contains unsupported segment selector size: %d.\n"
msgstr ""
-#: dwarf.c:4141
+#: dwarf.c:4143
msgid "Invalid maximum operations per insn.\n"
msgstr ""
-#: dwarf.c:4168
+#: dwarf.c:4170
msgid "Directory Table"
msgstr ""
-#: dwarf.c:4168
+#: dwarf.c:4170
msgid "File Name Table"
msgstr ""
-#: dwarf.c:4172
+#: dwarf.c:4174
#, c-format
msgid "Unexpectedly large number of columns in the %s (%u)\n"
msgstr ""
-#: dwarf.c:4182
+#: dwarf.c:4184
#, c-format
msgid "%s: Corrupt format description entry\n"
msgstr ""
-#: dwarf.c:4190
+#: dwarf.c:4192
#, c-format
msgid ""
"\n"
" The %s is empty.\n"
msgstr ""
-#: dwarf.c:4195
+#: dwarf.c:4197
#, c-format
msgid "%s: Corrupt entry count - expected %s but none found\n"
msgstr ""
-#: dwarf.c:4202
+#: dwarf.c:4204
#, c-format
msgid "%s: format count is zero, but the table is not empty\n"
msgstr ""
-#: dwarf.c:4207
+#: dwarf.c:4209
#, c-format
msgid ""
"\n"
" The %s (offset 0x%lx, lines %s, columns %u):\n"
msgstr ""
-#: dwarf.c:4211
+#: dwarf.c:4213
#, c-format
msgid " Entry"
msgstr ""
-#: dwarf.c:4225
+#: dwarf.c:4227
#, c-format
msgid "\tName"
msgstr ""
-#: dwarf.c:4228
+#: dwarf.c:4230
#, c-format
msgid "\tDir"
msgstr ""
-#: dwarf.c:4231
+#: dwarf.c:4233
#, c-format
msgid "\tTime"
msgstr ""
-#: dwarf.c:4234
+#: dwarf.c:4236
#, c-format
msgid "\tSize"
msgstr ""
-#: dwarf.c:4237
+#: dwarf.c:4239
#, c-format
msgid "\tMD5\t\t\t"
msgstr ""
-#: dwarf.c:4240
+#: dwarf.c:4242
#, c-format
msgid "\t(Unknown format content type %s)"
msgstr ""
-#: dwarf.c:4274
+#: dwarf.c:4276
#, c-format
msgid ""
"\n"
"%s: Corrupt entries list\n"
msgstr ""
-#: dwarf.c:4300
+#: dwarf.c:4302
msgid "corrupt .debug_sup section: size is too small\n"
msgstr ""
-#: dwarf.c:4307
+#: dwarf.c:4309
msgid "corrupt .debug_sup section: version < 5"
msgstr ""
-#: dwarf.c:4311
+#: dwarf.c:4313
msgid "corrupt .debug_sup section: is_supplementary not 0 or 1\n"
msgstr ""
-#: dwarf.c:4315
+#: dwarf.c:4317
msgid ""
"corrupt .debug_sup section: filename not empty in supplementary section\n"
msgstr ""
-#: dwarf.c:4320
+#: dwarf.c:4322
msgid "corrupt .debug_sup section: filename is not NUL terminated\n"
msgstr ""
-#: dwarf.c:4328
+#: dwarf.c:4330
msgid "corrupt .debug_sup section: bad LEB128 field for checksum length\n"
msgstr ""
-#: dwarf.c:4334
+#: dwarf.c:4336
msgid ""
"corrupt .debug_sup section: checksum length is longer than the remaining "
"section length\n"
msgstr ""
-#: dwarf.c:4339
+#: dwarf.c:4341
#, c-format
msgid ""
"corrupt .debug_sup section: there are 0x%lx extra, unused bytes at the end "
"of the section\n"
msgstr ""
-#: dwarf.c:4343
+#: dwarf.c:4345
#, c-format
msgid " Version: %u\n"
msgstr ""
-#: dwarf.c:4344
+#: dwarf.c:4346
#, c-format
msgid " Is Supp: %u\n"
msgstr ""
-#: dwarf.c:4345
+#: dwarf.c:4347
#, c-format
msgid " Filename: %s\n"
msgstr ""
-#: dwarf.c:4346
+#: dwarf.c:4348
#, c-format
msgid " Checksum Len: %lu\n"
msgstr ""
-#: dwarf.c:4349
+#: dwarf.c:4351
#, c-format
msgid " Checksum: "
msgstr ""
-#: dwarf.c:4397 dwarf.c:4818
+#: dwarf.c:4399 dwarf.c:4820
msgid ""
"Partial .debug_line. section encountered without a prior full .debug_line "
"section\n"
msgstr ""
-#: dwarf.c:4410 dwarf.c:5960
+#: dwarf.c:4412 dwarf.c:5967
#, c-format
msgid " Offset: 0x%lx\n"
msgstr ""
-#: dwarf.c:4411
+#: dwarf.c:4413
#, c-format
msgid " Length: %ld\n"
msgstr ""
-#: dwarf.c:4412
+#: dwarf.c:4414
#, c-format
msgid " DWARF Version: %d\n"
msgstr ""
-#: dwarf.c:4415
+#: dwarf.c:4417
#, c-format
msgid " Address size (bytes): %d\n"
msgstr ""
-#: dwarf.c:4416
+#: dwarf.c:4418
#, c-format
msgid " Segment selector (bytes): %d\n"
msgstr ""
-#: dwarf.c:4418
+#: dwarf.c:4420
#, c-format
msgid " Prologue Length: %d\n"
msgstr ""
-#: dwarf.c:4419
+#: dwarf.c:4421
#, c-format
msgid " Minimum Instruction Length: %d\n"
msgstr ""
-#: dwarf.c:4421
+#: dwarf.c:4423
#, c-format
msgid " Maximum Ops per Instruction: %d\n"
msgstr ""
-#: dwarf.c:4422
+#: dwarf.c:4424
#, c-format
msgid " Initial value of 'is_stmt': %d\n"
msgstr ""
-#: dwarf.c:4423
+#: dwarf.c:4425
#, c-format
msgid " Line Base: %d\n"
msgstr ""
-#: dwarf.c:4424
+#: dwarf.c:4426
#, c-format
msgid " Line Range: %d\n"
msgstr ""
-#: dwarf.c:4425
+#: dwarf.c:4427
#, c-format
msgid " Opcode Base: %d\n"
msgstr ""
-#: dwarf.c:4430 dwarf.c:4834
+#: dwarf.c:4432 dwarf.c:4836
msgid "Line range of 0 is invalid, using 1 instead\n"
msgstr ""
-#: dwarf.c:4442
+#: dwarf.c:4444
msgid "Line Base extends beyond end of section\n"
msgstr ""
-#: dwarf.c:4446
+#: dwarf.c:4448
#, c-format
msgid ""
"\n"
" Opcodes:\n"
msgstr ""
-#: dwarf.c:4449
+#: dwarf.c:4451
#, c-format
msgid " Opcode %d has %d arg\n"
msgid_plural " Opcode %d has %d args\n"
msgstr[0] ""
msgstr[1] ""
-#: dwarf.c:4469
+#: dwarf.c:4471
#, c-format
msgid ""
"\n"
" The Directory Table is empty.\n"
msgstr ""
-#: dwarf.c:4474
+#: dwarf.c:4476
#, c-format
msgid ""
"\n"
" The Directory Table (offset 0x%lx):\n"
msgstr ""
-#: dwarf.c:4497
+#: dwarf.c:4499
#, c-format
msgid ""
"\n"
" The File Name Table is empty.\n"
msgstr ""
-#: dwarf.c:4500
+#: dwarf.c:4502
#, c-format
msgid ""
"\n"
" The File Name Table (offset 0x%lx):\n"
msgstr ""
-#: dwarf.c:4525
+#: dwarf.c:4527
msgid "Corrupt file name table entry\n"
msgstr ""
-#: dwarf.c:4542
+#: dwarf.c:4544
#, c-format
msgid " No Line Number Statements.\n"
msgstr ""
-#: dwarf.c:4545
+#: dwarf.c:4547
#, c-format
msgid " Line Number Statements:\n"
msgstr ""
-#: dwarf.c:4567
+#: dwarf.c:4569
#, c-format
msgid " Special opcode %d: advance Address by %s to 0x%s%s"
msgstr ""
-#: dwarf.c:4572 dwarf.c:4593 dwarf.c:4635 dwarf.c:4655 dwarf.c:4705
-#: dwarf.c:4725
+#: dwarf.c:4574 dwarf.c:4595 dwarf.c:4637 dwarf.c:4657 dwarf.c:4707
+#: dwarf.c:4727
msgid " (reset view)"
msgstr ""
-#: dwarf.c:4587
+#: dwarf.c:4589
#, c-format
msgid " Special opcode %d: advance Address by %s to 0x%s[%d]%s"
msgstr ""
-#: dwarf.c:4597
+#: dwarf.c:4599
#, c-format
msgid " and Line by %s to %d"
msgstr ""
-#: dwarf.c:4600 dwarf.c:4617
+#: dwarf.c:4602 dwarf.c:4619
#, c-format
msgid " (view %u)\n"
msgstr ""
-#: dwarf.c:4615
+#: dwarf.c:4617
#, c-format
msgid " Copy"
msgstr ""
-#: dwarf.c:4631
+#: dwarf.c:4633
#, c-format
msgid " Advance PC by %s to 0x%s%s\n"
msgstr ""
-#: dwarf.c:4650
+#: dwarf.c:4652
#, c-format
msgid " Advance PC by %s to 0x%s[%d]%s\n"
msgstr ""
-#: dwarf.c:4662
+#: dwarf.c:4664
#, c-format
msgid " Advance Line by %s to %d\n"
msgstr ""
-#: dwarf.c:4669
+#: dwarf.c:4671
#, c-format
msgid " Set File Name to entry %s in the File Name Table\n"
msgstr ""
-#: dwarf.c:4676
+#: dwarf.c:4678
#, c-format
msgid " Set column to %s\n"
msgstr ""
-#: dwarf.c:4684
+#: dwarf.c:4686
#, c-format
msgid " Set is_stmt to %s\n"
msgstr ""
-#: dwarf.c:4689
+#: dwarf.c:4691
#, c-format
msgid " Set basic block\n"
msgstr ""
-#: dwarf.c:4701
+#: dwarf.c:4703
#, c-format
msgid " Advance PC by constant %s to 0x%s%s\n"
msgstr ""
-#: dwarf.c:4720
+#: dwarf.c:4722
#, c-format
msgid " Advance PC by constant %s to 0x%s[%d]%s\n"
msgstr ""
-#: dwarf.c:4733
+#: dwarf.c:4735
#, c-format
msgid " Advance PC by fixed size amount %s to 0x%s\n"
msgstr ""
-#: dwarf.c:4740
+#: dwarf.c:4742
#, c-format
msgid " Set prologue_end to true\n"
msgstr ""
-#: dwarf.c:4744
+#: dwarf.c:4746
#, c-format
msgid " Set epilogue_begin to true\n"
msgstr ""
-#: dwarf.c:4749
+#: dwarf.c:4751
#, c-format
msgid " Set ISA to %s\n"
msgstr ""
-#: dwarf.c:4753 dwarf.c:5390
+#: dwarf.c:4755 dwarf.c:5394
#, c-format
msgid " Unknown opcode %d with operands: "
msgstr ""
-#: dwarf.c:4847
+#: dwarf.c:4849
#, c-format
msgid "opcode base of %d extends beyond end of section\n"
msgstr ""
-#: dwarf.c:4862
+#: dwarf.c:4864
#, c-format
msgid "Unexpectedly large number of columns in the directory name table (%u)\n"
msgstr ""
-#: dwarf.c:4874 dwarf.c:4898 dwarf.c:4928
+#: dwarf.c:4876 dwarf.c:4900 dwarf.c:4930
msgid "Corrupt directories list\n"
msgstr ""
-#: dwarf.c:4936
+#: dwarf.c:4938
#, c-format
msgid "Unexpectedly large number of columns in the file name table (%u)\n"
msgstr ""
-#: dwarf.c:4948 dwarf.c:4973 dwarf.c:5020
+#: dwarf.c:4950 dwarf.c:4975 dwarf.c:5022
msgid "Corrupt file name list\n"
msgstr ""
-#: dwarf.c:5042
+#: dwarf.c:5044
msgid "directory table ends unexpectedly\n"
msgstr ""
-#: dwarf.c:5083
+#: dwarf.c:5085
msgid "file table ends unexpectedly\n"
msgstr ""
-#: dwarf.c:5116
+#: dwarf.c:5118
#, c-format
msgid "CU: No directory table\n"
msgstr ""
-#: dwarf.c:5118
+#: dwarf.c:5120
#, c-format
msgid "CU: %s:\n"
msgstr ""
-#: dwarf.c:5128 dwarf.c:5428 readelf.c:6386 readelf.c:6483 readelf.c:6501
-#: readelf.c:6519 readelf.c:7319 readelf.c:11508 readelf.c:12173
-#: readelf.c:12186 readelf.c:17552 readelf.c:17584
+#: dwarf.c:5130 dwarf.c:5435 readelf.c:6715 readelf.c:6812 readelf.c:6830
+#: readelf.c:6848 readelf.c:7652 readelf.c:11854 readelf.c:12519
+#: readelf.c:12532 readelf.c:17921 readelf.c:17953
msgid "<unknown>"
msgstr ""
-#: dwarf.c:5131 dwarf.c:5320
+#: dwarf.c:5133 dwarf.c:5324
#, c-format
msgid "directory index %u > number of directories %s\n"
msgstr ""
-#: dwarf.c:5133 dwarf.c:5422 elfcomm.c:777 readelf.c:356 readelf.c:745
-#: readelf.c:7496 readelf.c:8057 readelf.c:10088 readelf.c:12500
-#: readelf.c:12566 readelf.c:12570 readelf.c:12638 readelf.c:12643
-#: readelf.c:16282 readelf.c:16371 readelf.c:16964 readelf.c:16983
-#: readelf.c:17102 readelf.c:17561 readelf.c:18717 readelf.c:18720
+#: dwarf.c:5135 dwarf.c:5429 elfcomm.c:777 readelf.c:389 readelf.c:923
+#: readelf.c:7830 readelf.c:8393 readelf.c:10429 readelf.c:12871
+#: readelf.c:12937 readelf.c:12941 readelf.c:13013 readelf.c:13018
+#: readelf.c:16651 readelf.c:16740 readelf.c:17333 readelf.c:17352
+#: readelf.c:17471 readelf.c:17930 readelf.c:19085 readelf.c:19088
#, c-format
msgid "<corrupt>"
msgstr ""
-#: dwarf.c:5139
+#: dwarf.c:5141
#, c-format
msgid "CU: %s/%s:\n"
msgstr ""
-#: dwarf.c:5145
+#: dwarf.c:5147
#, c-format
msgid ""
"File name Line number Starting address "
"View Stmt\n"
msgstr ""
-#: dwarf.c:5147
+#: dwarf.c:5149
#, c-format
msgid "CU: Empty file name table\n"
msgstr ""
-#: dwarf.c:5254
+#: dwarf.c:5256
#, c-format
msgid "UNKNOWN (%u): length %ld\n"
msgstr ""
-#: dwarf.c:5304
+#: dwarf.c:5308
#, c-format
msgid ""
"\n"
" [Use file table entry %d]\n"
msgstr ""
-#: dwarf.c:5308
+#: dwarf.c:5312
#, c-format
msgid "file index %u > number of files %u\n"
msgstr ""
-#: dwarf.c:5309
+#: dwarf.c:5313
#, c-format
msgid ""
"\n"
" <over large file table index %u>"
msgstr ""
-#: dwarf.c:5315
+#: dwarf.c:5319
#, c-format
msgid ""
"\n"
" [Use file %s in directory table entry %d]\n"
msgstr ""
-#: dwarf.c:5322
+#: dwarf.c:5326
#, c-format
msgid ""
"\n"
" <over large directory table entry %u>\n"
msgstr ""
-#: dwarf.c:5386
+#: dwarf.c:5390
#, c-format
msgid " Set ISA to %lu\n"
msgstr ""
-#: dwarf.c:5421
+#: dwarf.c:5428
#, c-format
msgid "corrupt file index %u encountered\n"
msgstr ""
-#: dwarf.c:5590
+#: dwarf.c:5597
msgid "no info"
msgstr ""
-#: dwarf.c:5591
+#: dwarf.c:5598
msgid "type"
msgstr ""
-#: dwarf.c:5592
+#: dwarf.c:5599
msgid "variable"
msgstr ""
-#: dwarf.c:5593
+#: dwarf.c:5600
msgid "function"
msgstr ""
-#: dwarf.c:5594
+#: dwarf.c:5601
msgid "other"
msgstr ""
-#: dwarf.c:5595
+#: dwarf.c:5602
msgid "unused5"
msgstr ""
-#: dwarf.c:5596
+#: dwarf.c:5603
msgid "unused6"
msgstr ""
-#: dwarf.c:5597
+#: dwarf.c:5604
msgid "unused7"
msgstr ""
-#: dwarf.c:5635 dwarf.c:7208 dwarf.c:9603
+#: dwarf.c:5642 dwarf.c:7220 dwarf.c:9626
#, c-format
msgid "Debug info is corrupted, %s header at %#lx has length %s\n"
msgstr ""
-#: dwarf.c:5651 dwarf.c:7223
+#: dwarf.c:5658 dwarf.c:7235
#, c-format
msgid ""
".debug_info offset of 0x%lx in %s section does not point to a CU header.\n"
msgstr ""
-#: dwarf.c:5656
+#: dwarf.c:5663
#, c-format
msgid " Length: %ld\n"
msgstr ""
-#: dwarf.c:5658
+#: dwarf.c:5665
#, c-format
msgid " Version: %d\n"
msgstr ""
-#: dwarf.c:5660
+#: dwarf.c:5667
#, c-format
msgid " Offset into .debug_info section: 0x%lx\n"
msgstr ""
-#: dwarf.c:5662
+#: dwarf.c:5669
#, c-format
msgid " Size of area in .debug_info section: %ld\n"
msgstr ""
-#: dwarf.c:5671
+#: dwarf.c:5678
msgid "Only DWARF 2 and 3 pubnames are currently supported\n"
msgstr ""
-#: dwarf.c:5679
+#: dwarf.c:5686
#, c-format
msgid ""
"\n"
" Offset Kind Name\n"
msgstr ""
-#: dwarf.c:5681
+#: dwarf.c:5688
#, c-format
msgid ""
"\n"
" Offset\tName\n"
msgstr ""
-#: dwarf.c:5715
+#: dwarf.c:5722
msgid "s"
msgstr ""
-#: dwarf.c:5715
+#: dwarf.c:5722
msgid "g"
msgstr ""
-#: dwarf.c:5773
+#: dwarf.c:5780
#, c-format
msgid " DW_MACINFO_start_file - lineno: %d filenum: %d\n"
msgstr ""
-#: dwarf.c:5779
+#: dwarf.c:5786
#, c-format
msgid " DW_MACINFO_end_file\n"
msgstr ""
-#: dwarf.c:5786
+#: dwarf.c:5793
#, c-format
msgid " DW_MACINFO_define - lineno : %d macro : %*s\n"
msgstr ""
-#: dwarf.c:5796
+#: dwarf.c:5803
#, c-format
msgid " DW_MACINFO_undef - lineno : %d macro : %*s\n"
msgstr ""
-#: dwarf.c:5809
+#: dwarf.c:5816
#, c-format
msgid " DW_MACINFO_vendor_ext - constant : %d string : %*s\n"
msgstr ""
-#: dwarf.c:5953
+#: dwarf.c:5960
#, c-format
msgid ""
"Expected to find a version number of 4 or 5 in section %s but found %d "
"instead\n"
msgstr ""
-#: dwarf.c:5962
+#: dwarf.c:5969
#, c-format
msgid " Version: %d\n"
msgstr ""
-#: dwarf.c:5963
+#: dwarf.c:5970
#, c-format
msgid " Offset size: %d\n"
msgstr ""
-#: dwarf.c:5967
+#: dwarf.c:5974
#, c-format
msgid " Offset into .debug_line: 0x%lx\n"
msgstr ""
-#: dwarf.c:5981
+#: dwarf.c:5988
#, c-format
msgid " Extension opcode arguments:\n"
msgstr ""
-#: dwarf.c:5988
+#: dwarf.c:5995
#, c-format
msgid " DW_MACRO_%02x has no arguments\n"
msgstr ""
-#: dwarf.c:5991
+#: dwarf.c:5998
#, c-format
msgid " DW_MACRO_%02x arguments: "
msgstr ""
-#: dwarf.c:6017
+#: dwarf.c:6024
#, c-format
msgid "Invalid extension opcode form %s\n"
msgstr ""
-#: dwarf.c:6034
+#: dwarf.c:6041
msgid ".debug_macro section not zero terminated\n"
msgstr ""
-#: dwarf.c:6048
+#: dwarf.c:6055
#, c-format
msgid " DW_MACRO_define - lineno : %d macro : %*s\n"
msgstr ""
-#: dwarf.c:6058
+#: dwarf.c:6065
#, c-format
msgid " DW_MACRO_undef - lineno : %d macro : %*s\n"
msgstr ""
-#: dwarf.c:6073
+#: dwarf.c:6080
msgid "DW_MACRO_start_file used, but no .debug_line offset provided.\n"
msgstr ""
-#: dwarf.c:6079
+#: dwarf.c:6086
#, c-format
msgid " DW_MACRO_start_file - lineno: %d filenum: %d\n"
msgstr ""
-#: dwarf.c:6082
+#: dwarf.c:6089
#, c-format
msgid " DW_MACRO_start_file - lineno: %d filenum: %d filename: %s%s%s\n"
msgstr ""
-#: dwarf.c:6090
+#: dwarf.c:6097
#, c-format
msgid " DW_MACRO_end_file\n"
msgstr ""
-#: dwarf.c:6100
+#: dwarf.c:6107
#, c-format
msgid " DW_MACRO_define_strp - lineno : %d macro : %s\n"
msgstr ""
-#: dwarf.c:6111
+#: dwarf.c:6118
#, c-format
msgid " DW_MACRO_undef_strp - lineno : %d macro : %s\n"
msgstr ""
-#: dwarf.c:6117
+#: dwarf.c:6124
#, c-format
msgid " DW_MACRO_import - offset : 0x%lx\n"
msgstr ""
-#: dwarf.c:6124
+#: dwarf.c:6131
#, c-format
msgid " DW_MACRO_define_sup - lineno : %d macro offset : 0x%lx\n"
msgstr ""
-#: dwarf.c:6131
+#: dwarf.c:6138
#, c-format
msgid " DW_MACRO_undef_sup - lineno : %d macro offset : 0x%lx\n"
msgstr ""
-#: dwarf.c:6137
+#: dwarf.c:6144
#, c-format
msgid " DW_MACRO_import_sup - offset : 0x%lx\n"
msgstr ""
-#: dwarf.c:6152
+#: dwarf.c:6159
#, c-format
msgid "(with offset %s) "
msgstr ""
-#: dwarf.c:6153
+#: dwarf.c:6160
#, c-format
msgid "lineno : %d macro : %s\n"
msgstr ""
-#: dwarf.c:6160
+#: dwarf.c:6167
#, c-format
msgid " <Target Specific macro op: %#x - UNHANDLED"
msgstr ""
-#: dwarf.c:6166
+#: dwarf.c:6173
#, c-format
msgid " Unknown macro opcode %02x seen\n"
msgstr ""
-#: dwarf.c:6177
+#: dwarf.c:6184
#, c-format
msgid " DW_MACRO_%02x\n"
msgstr ""
-#: dwarf.c:6180
+#: dwarf.c:6187
#, c-format
msgid " DW_MACRO_%02x -"
msgstr ""
-#: dwarf.c:6235
+#: dwarf.c:6242
#, c-format
msgid " Number TAG (0x%lx)\n"
msgstr ""
-#: dwarf.c:6244
+#: dwarf.c:6251
msgid "has children"
msgstr ""
-#: dwarf.c:6244
+#: dwarf.c:6251
msgid "no children"
msgstr ""
-#: dwarf.c:6306
+#: dwarf.c:6313
#, c-format
msgid "location view pair\n"
msgstr ""
-#: dwarf.c:6338
+#: dwarf.c:6344
#, c-format
msgid "No debug information available for loc lists of entry: %u\n"
msgstr ""
-#: dwarf.c:6350 dwarf.c:6497 dwarf.c:6680
+#: dwarf.c:6356 dwarf.c:6504 dwarf.c:6688
#, c-format
msgid "Invalid pointer size (%d) in debug info for entry %d\n"
msgstr ""
-#: dwarf.c:6362 dwarf.c:6415 dwarf.c:6424 dwarf.c:6509 dwarf.c:6586
-#: dwarf.c:6594 dwarf.c:6691 dwarf.c:6764 dwarf.c:6772
+#: dwarf.c:6368 dwarf.c:6422 dwarf.c:6431 dwarf.c:6516 dwarf.c:6594
+#: dwarf.c:6602 dwarf.c:6700 dwarf.c:6773 dwarf.c:6781
#, c-format
msgid "Location list starting at offset 0x%lx is not terminated.\n"
msgstr ""
-#: dwarf.c:6383 dwarf.c:6537 dwarf.c:6729 dwarf.c:7567 dwarf.c:7622
+#: dwarf.c:6390 dwarf.c:6545 dwarf.c:6738 dwarf.c:7582 dwarf.c:7640
#, c-format
msgid "<End of list>\n"
msgstr ""
-#: dwarf.c:6395 dwarf.c:6558 dwarf.c:7627
+#: dwarf.c:6402 dwarf.c:6566 dwarf.c:7645
#, c-format
msgid "(base address)\n"
msgstr ""
-#: dwarf.c:6409 dwarf.c:6530 dwarf.c:6717
+#: dwarf.c:6416 dwarf.c:6538 dwarf.c:6726
#, c-format
msgid ""
"views at %8.8lx for:\n"
" %*s "
msgstr ""
-#: dwarf.c:6445 dwarf.c:6615
+#: dwarf.c:6452 dwarf.c:6623
msgid " (start == end)"
msgstr ""
-#: dwarf.c:6447 dwarf.c:6617
+#: dwarf.c:6454 dwarf.c:6625
msgid " (start > end)"
msgstr ""
-#: dwarf.c:6484
+#: dwarf.c:6491
#, c-format
msgid "No debug information available for loclists lists of entry: %u\n"
msgstr ""
-#: dwarf.c:6563
+#: dwarf.c:6571
#, c-format
msgid "View pair entry in loclist with locviews attribute\n"
msgstr ""
-#: dwarf.c:6570
+#: dwarf.c:6578
#, c-format
msgid "views for:\n"
msgstr ""
-#: dwarf.c:6574
+#: dwarf.c:6582
#, c-format
msgid "Invalid location list entry type %d\n"
msgstr ""
-#: dwarf.c:6626
+#: dwarf.c:6634
#, c-format
msgid "Trailing view pair not used in a range"
msgstr ""
-#: dwarf.c:6668
+#: dwarf.c:6676
#, c-format
msgid "No debug information for loc lists of entry: %u\n"
msgstr ""
-#: dwarf.c:6735
+#: dwarf.c:6744
#, c-format
msgid "(base address selection entry)\n"
msgstr ""
-#: dwarf.c:6756
+#: dwarf.c:6765
#, c-format
msgid "Unknown location list entry type 0x%x.\n"
msgstr ""
-#: dwarf.c:6849 dwarf.c:7102 dwarf.c:7321 dwarf.c:7428 dwarf.c:7689
+#: dwarf.c:6858 dwarf.c:7115 dwarf.c:7333 dwarf.c:7440 dwarf.c:7708
#, c-format
msgid ""
"\n"
"The %s section is empty.\n"
msgstr ""
-#: dwarf.c:6869
+#: dwarf.c:6878
#, c-format
msgid "The %s section contains corrupt or unsupported version number: %d.\n"
msgstr ""
-#: dwarf.c:6889
+#: dwarf.c:6898
#, c-format
msgid "The %s section contains unsupported offset entry count: %d.\n"
msgstr ""
-#: dwarf.c:6900 dwarf.c:7327 dwarf.c:7763
+#: dwarf.c:6909 dwarf.c:7339 dwarf.c:7781
#, c-format
msgid ""
"Unable to load/parse the .debug_info section, so cannot interpret the %s "
"section.\n"
msgstr ""
-#: dwarf.c:6948
+#: dwarf.c:6957
msgid "No location lists in .debug_info section!\n"
msgstr ""
-#: dwarf.c:6953
+#: dwarf.c:6962
#, c-format
msgid "Location lists in %s section start at 0x%s\n"
msgstr ""
-#: dwarf.c:6963
+#: dwarf.c:6972
#, c-format
msgid ""
" Warning: This section has relocations - addresses seen here may not be "
@@ -3481,832 +3486,850 @@ msgid ""
"\n"
msgstr ""
-#: dwarf.c:6965
+#: dwarf.c:6974
#, c-format
msgid " Offset Begin End Expression\n"
msgstr ""
-#: dwarf.c:7020
+#: dwarf.c:7029 dwarf.c:7882
#, c-format
-msgid "There is a hole [0x%lx - 0x%lx] in .debug_loc section.\n"
+msgid "There is a hole [0x%lx - 0x%lx] in %s section.\n"
msgstr ""
-#: dwarf.c:7024
+#: dwarf.c:7034 dwarf.c:7889
#, c-format
-msgid "There is an overlap [0x%lx - 0x%lx] in .debug_loc section.\n"
+msgid "There is an overlap [0x%lx - 0x%lx] in %s section.\n"
msgstr ""
-#: dwarf.c:7033
+#: dwarf.c:7044
#, c-format
-msgid "Offset 0x%lx is bigger than .debug_loc section size.\n"
+msgid "Offset 0x%lx is bigger than %s section size.\n"
msgstr ""
-#: dwarf.c:7040
+#: dwarf.c:7052
#, c-format
-msgid "View Offset 0x%lx is bigger than .debug_loc section size.\n"
+msgid "View Offset 0x%lx is bigger than %s section size.\n"
msgstr ""
-#: dwarf.c:7057
+#: dwarf.c:7070
msgid "DWO is not yet supported.\n"
msgstr ""
-#: dwarf.c:7074
+#: dwarf.c:7087
msgid "Hole and overlap detection requires adjacent view lists and loclists.\n"
msgstr ""
-#: dwarf.c:7083
+#: dwarf.c:7096
#, c-format
msgid "There is %ld unused byte at the end of section %s\n"
msgid_plural "There are %ld unused bytes at the end of section %s\n"
msgstr[0] ""
msgstr[1] ""
-#: dwarf.c:7236
+#: dwarf.c:7248
msgid "Only DWARF 2 and 3 aranges are currently supported.\n"
msgstr ""
-#: dwarf.c:7240
+#: dwarf.c:7252
#, c-format
msgid " Length: %ld\n"
msgstr ""
-#: dwarf.c:7242
+#: dwarf.c:7254
#, c-format
msgid " Version: %d\n"
msgstr ""
-#: dwarf.c:7243
+#: dwarf.c:7255
#, c-format
msgid " Offset into .debug_info: 0x%lx\n"
msgstr ""
-#: dwarf.c:7245
+#: dwarf.c:7257
#, c-format
msgid " Pointer Size: %d\n"
msgstr ""
-#: dwarf.c:7246
+#: dwarf.c:7258
#, c-format
msgid " Segment Size: %d\n"
msgstr ""
-#: dwarf.c:7253
+#: dwarf.c:7265
#, c-format
msgid "Invalid address size in %s section!\n"
msgstr ""
-#: dwarf.c:7263
+#: dwarf.c:7275
msgid "Pointer size + Segment size is not a power of two.\n"
msgstr ""
-#: dwarf.c:7268
+#: dwarf.c:7280
#, c-format
msgid ""
"\n"
" Address Length\n"
msgstr ""
-#: dwarf.c:7270
+#: dwarf.c:7282
#, c-format
msgid ""
"\n"
" Address Length\n"
msgstr ""
-#: dwarf.c:7347
+#: dwarf.c:7359
#, c-format
msgid "Corrupt address base (%lx) found in debug section %u\n"
msgstr ""
-#: dwarf.c:7364
+#: dwarf.c:7376
#, c-format
msgid " For compilation unit at offset 0x%s:\n"
msgstr ""
-#: dwarf.c:7367
+#: dwarf.c:7379
#, c-format
msgid "\tIndex\tAddress\n"
msgstr ""
-#: dwarf.c:7379
+#: dwarf.c:7391
#, c-format
msgid ""
"Corrupt %s section: expecting header size of 8 or 16, but found %ld instead\n"
msgstr ""
-#: dwarf.c:7391
+#: dwarf.c:7403
#, c-format
msgid ""
"Corrupt %s section: expecting version number 5 in header but found %d "
"instead\n"
msgstr ""
-#: dwarf.c:7405
+#: dwarf.c:7417
#, c-format
msgid "\t%d:\t"
msgstr ""
-#: dwarf.c:7470 dwarf.c:7494
+#: dwarf.c:7482 dwarf.c:7506
#, c-format
msgid " Length: %#lx\n"
msgstr ""
-#: dwarf.c:7471 dwarf.c:7496
+#: dwarf.c:7483 dwarf.c:7508
#, c-format
msgid " Index Offset [String]\n"
msgstr ""
-#: dwarf.c:7479
+#: dwarf.c:7491
#, c-format
msgid "Section %s is too small %#lx\n"
msgstr ""
-#: dwarf.c:7487
+#: dwarf.c:7499
#, c-format
msgid "Unexpected version number in str_offset header: %#x\n"
msgstr ""
-#: dwarf.c:7492
+#: dwarf.c:7504
#, c-format
msgid "Unexpected value in str_offset header's padding field: %#x\n"
msgstr ""
-#: dwarf.c:7495
+#: dwarf.c:7507
#, c-format
msgid " Version: %#lx\n"
msgstr ""
-#: dwarf.c:7586 dwarf.c:7663
+#: dwarf.c:7601 dwarf.c:7681
msgid "(start == end)"
msgstr ""
-#: dwarf.c:7588 dwarf.c:7665
+#: dwarf.c:7603 dwarf.c:7683
msgid "(start > end)"
msgstr ""
-#: dwarf.c:7610
+#: dwarf.c:7627
#, c-format
-msgid "Range list starting at offset 0x%lx is not terminated.\n"
+msgid "Range list starting at offset 0x%s is not terminated.\n"
msgstr ""
-#: dwarf.c:7643
+#: dwarf.c:7661
#, c-format
msgid "Invalid range list entry type %d\n"
msgstr ""
-#: dwarf.c:7723
+#: dwarf.c:7742
#, c-format
msgid ""
"The length field (0x%lx) in the debug_rnglists header is wrong - the section "
"is too small\n"
msgstr ""
-#: dwarf.c:7735
+#: dwarf.c:7753
msgid "Only DWARF version 5 debug_rnglists info is currently supported.\n"
msgstr ""
-#: dwarf.c:7754
+#: dwarf.c:7772
#, c-format
msgid "The %s section contains unsupported offset entry count: %u.\n"
msgstr ""
#. This can happen when the file was compiled with -gsplit-debug
#. which removes references to range lists from the primary .o file.
-#: dwarf.c:7784
+#: dwarf.c:7802
#, c-format
msgid "No range lists in .debug_info section.\n"
msgstr ""
-#: dwarf.c:7816
+#: dwarf.c:7834
#, c-format
msgid "Range lists in %s section start at 0x%lx\n"
msgstr ""
-#: dwarf.c:7821
+#: dwarf.c:7839
#, c-format
msgid " Offset Begin End\n"
msgstr ""
-#: dwarf.c:7839
+#: dwarf.c:7857
#, c-format
msgid "Corrupt pointer size (%d) in debug entry at offset %8.8lx\n"
msgstr ""
-#: dwarf.c:7846
-#, c-format
-msgid "Corrupt offset (%#8.8lx) in range entry %u\n"
-msgstr ""
-
#: dwarf.c:7864
#, c-format
-msgid "There is a hole [0x%lx - 0x%lx] in %s section.\n"
-msgstr ""
-
-#: dwarf.c:7871
-#, c-format
-msgid "There is an overlap [0x%lx - 0x%lx] in %s section.\n"
+msgid "Corrupt offset (%#8.8lx) in range entry %u\n"
msgstr ""
-#: dwarf.c:7947
+#: dwarf.c:7965
#, c-format
msgid "Unfeasibly large register number: %u\n"
msgstr ""
-#: dwarf.c:7960
+#: dwarf.c:7978
#, c-format
msgid "Out of memory allocating %u columns in dwarf frame arrays\n"
msgstr ""
-#: dwarf.c:8409
+#: dwarf.c:8427
msgid "No terminator for augmentation name\n"
msgstr ""
-#: dwarf.c:8427
+#: dwarf.c:8445
#, c-format
msgid "Invalid pointer size (%d) in CIE data\n"
msgstr ""
-#: dwarf.c:8435
+#: dwarf.c:8453
#, c-format
msgid "Invalid segment size (%d) in CIE data\n"
msgstr ""
-#: dwarf.c:8471 dwarf.c:8847
+#: dwarf.c:8489 dwarf.c:8862
#, c-format
msgid "Augmentation data too long: 0x%s, expected at most %#lx\n"
msgstr ""
-#: dwarf.c:8558
+#: dwarf.c:8576
#, c-format
msgid " Augmentation data: "
msgstr ""
-#: dwarf.c:8574
+#: dwarf.c:8592
msgid "bad register: "
msgstr ""
-#: dwarf.c:8746
+#: dwarf.c:8764
msgid "Failed to read CIE information\n"
msgstr ""
-#: dwarf.c:8757 dwarf.c:8781 dwarf.c:8808
+#: dwarf.c:8775 dwarf.c:8796 dwarf.c:8823
msgid "Invalid max register\n"
msgstr ""
#. PR 17512: file: 9e196b3e.
-#: dwarf.c:8823
+#: dwarf.c:8838
#, c-format
msgid "Probably corrupt segment size: %d - using 4 instead\n"
msgstr ""
-#: dwarf.c:9294
+#. Ideally translate "invalid " to 8 chars, trailing space
+#. is optional.
+#: dwarf.c:8884
+#, c-format
+msgid "cie=invalid "
+msgstr ""
+
+#: dwarf.c:9317
msgid "Invalid column number in saved frame state\n"
msgstr ""
-#: dwarf.c:9341
+#: dwarf.c:9364
#, c-format
msgid " DW_CFA_def_cfa_expression: <corrupt len %lu>\n"
msgstr ""
-#: dwarf.c:9364
+#: dwarf.c:9387
#, c-format
msgid " DW_CFA_expression: <corrupt len %lu>\n"
msgstr ""
-#: dwarf.c:9497
+#: dwarf.c:9520
#, c-format
msgid " DW_CFA_??? (User defined call frame op: %#x)\n"
msgstr ""
-#: dwarf.c:9499
+#: dwarf.c:9522
#, c-format
msgid "Unsupported or unknown Dwarf Call Frame Instruction number: %#x\n"
msgstr ""
-#: dwarf.c:9613 dwarf.c:10030
+#: dwarf.c:9636 dwarf.c:10053
#, c-format
msgid "Version %ld\n"
msgstr ""
-#: dwarf.c:9619
+#: dwarf.c:9642
msgid "Only DWARF version 5 .debug_names is currently supported.\n"
msgstr ""
-#: dwarf.c:9626
+#: dwarf.c:9649
#, c-format
msgid "Padding field of .debug_names must be 0 (found 0x%x)\n"
msgstr ""
-#: dwarf.c:9631
+#: dwarf.c:9654
msgid "Compilation unit count must be >= 1 in .debug_names\n"
msgstr ""
-#: dwarf.c:9642
+#: dwarf.c:9665
#, c-format
msgid ""
"Augmentation string length %u must be rounded up to a multiple of 4 in ."
"debug_names.\n"
msgstr ""
-#: dwarf.c:9650
+#: dwarf.c:9673
#, c-format
msgid "Augmentation string:"
msgstr ""
-#: dwarf.c:9677
+#: dwarf.c:9700
#, c-format
msgid "CU table:\n"
msgstr ""
-#: dwarf.c:9686 dwarf.c:9699
+#: dwarf.c:9709 dwarf.c:9722
#, c-format
msgid "[%3u] 0x%lx\n"
msgstr ""
-#: dwarf.c:9690
+#: dwarf.c:9713
#, c-format
msgid "TU table:\n"
msgstr ""
-#: dwarf.c:9703
+#: dwarf.c:9726
#, c-format
msgid "Foreign TU table:\n"
msgstr ""
-#: dwarf.c:9712
+#: dwarf.c:9735
#, c-format
msgid "[%3u] "
msgstr ""
-#: dwarf.c:9723
+#: dwarf.c:9746
#, c-format
msgid ""
"Entry pool offset (0x%lx) exceeds unit size 0x%lx for unit 0x%lx in the "
"debug_names\n"
msgstr ""
-#: dwarf.c:9752
+#: dwarf.c:9775
#, c-format
msgid "Used %zu of %lu bucket.\n"
msgid_plural "Used %zu of %lu buckets.\n"
msgstr[0] ""
msgstr[1] ""
-#: dwarf.c:9779
+#: dwarf.c:9802
#, c-format
msgid ""
"Out of %lu items there are %zu bucket clashes (longest of %zu entries).\n"
msgstr ""
-#: dwarf.c:9816
+#: dwarf.c:9839
#, c-format
msgid "Duplicate abbreviation tag %lu in unit 0x%lx in the debug_names\n"
msgstr ""
-#: dwarf.c:9838 dwarf.c:10156
+#: dwarf.c:9861 dwarf.c:10179
#, c-format
msgid ""
"\n"
"Symbol table:\n"
msgstr ""
-#: dwarf.c:9890
+#: dwarf.c:9913
#, c-format
msgid "Undefined abbreviation tag %lu in unit 0x%lx in the debug_names\n"
msgstr ""
-#: dwarf.c:9921
+#: dwarf.c:9944
#, c-format
msgid " <no entries>"
msgstr ""
-#: dwarf.c:9953
+#: dwarf.c:9976
msgid "The debuglink filename is corrupt/missing\n"
msgstr ""
-#: dwarf.c:9957
+#: dwarf.c:9980
#, c-format
msgid " Separate debug info file: %s\n"
msgstr ""
-#: dwarf.c:9968
+#: dwarf.c:9991
msgid "CRC offset missing/truncated\n"
msgstr ""
-#: dwarf.c:9974
+#: dwarf.c:9997
#, c-format
msgid " CRC value: %#x\n"
msgstr ""
-#: dwarf.c:9978
+#: dwarf.c:10001
#, c-format
msgid "There are %#lx extraneous bytes at the end of the section\n"
msgstr ""
-#: dwarf.c:9992
+#: dwarf.c:10015
#, c-format
msgid "Build-ID is too short (%#lx bytes)\n"
msgstr ""
-#: dwarf.c:9996
+#: dwarf.c:10019
#, c-format
msgid " Build-ID (%#lx bytes):"
msgstr ""
-#: dwarf.c:10025
+#: dwarf.c:10048
#, c-format
msgid "Truncated header in the %s section.\n"
msgstr ""
-#: dwarf.c:10036
+#: dwarf.c:10059
#, c-format
msgid "Unsupported version %lu.\n"
msgstr ""
-#: dwarf.c:10040
+#: dwarf.c:10063
msgid "The address table data in version 3 may be wrong.\n"
msgstr ""
-#: dwarf.c:10042
+#: dwarf.c:10065
msgid "Version 4 does not support case insensitive lookups.\n"
msgstr ""
-#: dwarf.c:10044
+#: dwarf.c:10067
msgid "Version 5 does not include inlined functions.\n"
msgstr ""
-#: dwarf.c:10046
+#: dwarf.c:10069
msgid "Version 6 does not include symbol attributes.\n"
msgstr ""
-#: dwarf.c:10064
+#: dwarf.c:10087
#, c-format
msgid "Corrupt header in the %s section.\n"
msgstr ""
-#: dwarf.c:10071
+#: dwarf.c:10094
#, c-format
msgid "TU offset (%x) is less than CU offset (%x)\n"
msgstr ""
-#: dwarf.c:10080
+#: dwarf.c:10103
#, c-format
msgid "Address table offset (%x) is less than TU offset (%x)\n"
msgstr ""
-#: dwarf.c:10090
+#: dwarf.c:10113
#, c-format
msgid "Symbol table offset (%x) is less then Address table offset (%x)\n"
msgstr ""
-#: dwarf.c:10099
+#: dwarf.c:10122
#, c-format
msgid "Constant pool offset (%x) is less than symbol table offset (%x)\n"
msgstr ""
-#: dwarf.c:10114
+#: dwarf.c:10137
msgid "Address table extends beyond end of section.\n"
msgstr ""
-#: dwarf.c:10118
+#: dwarf.c:10141
#, c-format
msgid ""
"\n"
"CU table:\n"
msgstr ""
-#: dwarf.c:10124
+#: dwarf.c:10147
#, c-format
msgid "[%3u] 0x%lx - 0x%lx\n"
msgstr ""
-#: dwarf.c:10129
+#: dwarf.c:10152
#, c-format
msgid ""
"\n"
"TU table:\n"
msgstr ""
-#: dwarf.c:10136
+#: dwarf.c:10159
#, c-format
msgid "[%3u] 0x%lx 0x%lx "
msgstr ""
-#: dwarf.c:10143
+#: dwarf.c:10166
#, c-format
msgid ""
"\n"
"Address table:\n"
msgstr ""
-#: dwarf.c:10153
+#: dwarf.c:10176
#, c-format
msgid "%lu\n"
msgstr ""
-#: dwarf.c:10171
+#: dwarf.c:10194
#, c-format
msgid "[%3u] <corrupt offset: %x>"
msgstr ""
-#: dwarf.c:10172
+#: dwarf.c:10195
#, c-format
msgid "Corrupt name offset of 0x%x found for symbol table slot %d\n"
msgstr ""
-#: dwarf.c:10183
+#: dwarf.c:10206
#, c-format
msgid "<invalid CU vector offset: %x>\n"
msgstr ""
-#: dwarf.c:10184
+#: dwarf.c:10207
#, c-format
msgid "Corrupt CU vector offset of 0x%x found for symbol table slot %d\n"
msgstr ""
-#: dwarf.c:10195
+#: dwarf.c:10218
#, c-format
msgid "Invalid number of CUs (0x%x) for symbol table slot %d\n"
msgstr ""
-#: dwarf.c:10220
+#: dwarf.c:10243
msgid "static"
msgstr ""
-#: dwarf.c:10220
+#: dwarf.c:10243
msgid "global"
msgstr ""
-#: dwarf.c:10258 dwarf.c:10269
+#: dwarf.c:10281 dwarf.c:10292
msgid "Internal error: out of space in the shndx pool.\n"
msgstr ""
-#: dwarf.c:10332
+#: dwarf.c:10355
#, c-format
msgid "Section %s is empty\n"
msgstr ""
-#: dwarf.c:10338
+#: dwarf.c:10361
#, c-format
msgid "Section %s is too small to contain a CU/TU header\n"
msgstr ""
-#: dwarf.c:10357
+#: dwarf.c:10380
#, c-format
msgid " Version: %u\n"
msgstr ""
-#: dwarf.c:10359
+#: dwarf.c:10382
#, c-format
msgid " Number of columns: %u\n"
msgstr ""
-#: dwarf.c:10360
+#: dwarf.c:10383
#, c-format
msgid " Number of used entries: %u\n"
msgstr ""
-#: dwarf.c:10361
+#: dwarf.c:10384
#, c-format
msgid ""
" Number of slots: %u\n"
"\n"
msgstr ""
-#: dwarf.c:10368
+#: dwarf.c:10391
#, c-format
msgid "Section %s is too small for %u slot\n"
msgid_plural "Section %s is too small for %u slots\n"
msgstr[0] ""
msgstr[1] ""
-#: dwarf.c:10392
+#: dwarf.c:10415
msgid "Section index pool located before start of section\n"
msgstr ""
-#: dwarf.c:10397
+#: dwarf.c:10420
#, c-format
msgid " [%3d] Signature: 0x%s Sections: "
msgstr ""
-#: dwarf.c:10403
+#: dwarf.c:10426
#, c-format
msgid "Section %s too small for shndx pool\n"
msgstr ""
-#: dwarf.c:10449
+#: dwarf.c:10472
#, c-format
msgid "Section %s too small for offset and size tables\n"
msgstr ""
-#: dwarf.c:10456
+#: dwarf.c:10479
#, c-format
msgid " Offset table\n"
msgstr ""
-#: dwarf.c:10458 dwarf.c:10546
+#: dwarf.c:10481 dwarf.c:10569
msgid "signature"
msgstr ""
-#: dwarf.c:10458 dwarf.c:10546
+#: dwarf.c:10481 dwarf.c:10569
msgid "dwo_id"
msgstr ""
-#: dwarf.c:10497
+#: dwarf.c:10520
#, c-format
msgid "Row index (%u) is larger than number of used entries (%u)\n"
msgstr ""
-#: dwarf.c:10511 dwarf.c:10570
+#: dwarf.c:10534 dwarf.c:10593
#, c-format
msgid " [%3d] 0x%s"
msgstr ""
-#: dwarf.c:10526 dwarf.c:10584
+#: dwarf.c:10549 dwarf.c:10621
#, c-format
msgid "Overlarge Dwarf section index detected: %u\n"
msgstr ""
-#: dwarf.c:10544
+#: dwarf.c:10567
#, c-format
msgid " Size table\n"
msgstr ""
-#: dwarf.c:10599
+#: dwarf.c:10607
+#, c-format
+msgid "Too many rows/columns in DWARF index section %s\n"
+msgstr ""
+
+#: dwarf.c:10636
#, c-format
msgid " Unsupported version (%d)\n"
msgstr ""
-#: dwarf.c:10671
+#: dwarf.c:10708
#, c-format
msgid "Displaying the debug contents of section %s is not yet supported.\n"
msgstr ""
-#: dwarf.c:10702
+#: dwarf.c:10739
#, c-format
msgid ""
"Attempt to allocate an array with an excessive number of elements: 0x%lx\n"
msgstr ""
-#: dwarf.c:10720
+#: dwarf.c:10757
#, c-format
msgid ""
"Attempt to re-allocate an array with an excessive number of elements: 0x%lx\n"
msgstr ""
-#: dwarf.c:10736
+#: dwarf.c:10773
#, c-format
msgid ""
"Attempt to allocate a zero'ed array with an excessive number of elements: 0x"
"%lx\n"
msgstr ""
-#: dwarf.c:10834
+#: dwarf.c:10871
#, c-format
msgid "Unable to reopen separate debug info file: %s\n"
msgstr ""
-#: dwarf.c:10846
+#: dwarf.c:10883
#, c-format
msgid "Separate debug info file %s found, but CRC does not match - ignoring\n"
msgstr ""
-#: dwarf.c:11022
+#: dwarf.c:11062
#, c-format
msgid "Corrupt debuglink section: %s\n"
msgstr ""
-#: dwarf.c:11060
+#: dwarf.c:11101
msgid "Out of memory"
msgstr ""
#. Failed to find the file.
-#: dwarf.c:11134
+#: dwarf.c:11176
#, c-format
msgid "could not find separate debug file '%s'\n"
msgstr ""
-#: dwarf.c:11136 dwarf.c:11141 dwarf.c:11147 dwarf.c:11151 dwarf.c:11156
-#: dwarf.c:11159 dwarf.c:11162 dwarf.c:11165
+#: dwarf.c:11178 dwarf.c:11183 dwarf.c:11189 dwarf.c:11193 dwarf.c:11198
+#: dwarf.c:11201 dwarf.c:11204 dwarf.c:11207
#, c-format
msgid "tried: %s\n"
msgstr ""
-#: dwarf.c:11173
+#: dwarf.c:11215
#, c-format
msgid "tried: DEBUGINFOD_URLS=%s\n"
msgstr ""
-#: dwarf.c:11190
+#: dwarf.c:11243
#, c-format
msgid "failed to open separate debug file: %s\n"
msgstr ""
-#: dwarf.c:11199
+#: dwarf.c:11252
#, c-format
msgid ""
"\n"
"%s: Found separate debug info file: %s\n"
msgstr ""
-#: dwarf.c:11222
+#: dwarf.c:11275
msgid "Out of memory allocating dwo filename\n"
msgstr ""
-#: dwarf.c:11228
+#: dwarf.c:11281
#, c-format
msgid "Unable to load dwo file: %s\n"
msgstr ""
#. FIXME: We should check the dwo_id.
-#: dwarf.c:11235
+#: dwarf.c:11288
#, c-format
msgid ""
"%s: Found separate debug object file: %s\n"
"\n"
msgstr ""
-#: dwarf.c:11254
+#: dwarf.c:11320
+msgid "Unable to load the .note.gnu.build-id section\n"
+msgstr ""
+
+#: dwarf.c:11326
+msgid ".note.gnu.build-id section is corrupt/empty\n"
+msgstr ""
+
+#: dwarf.c:11347
+msgid ".note.gnu.build-id data size is too small\n"
+msgstr ""
+
+#: dwarf.c:11353
+msgid ".note.gnu.build-id data size is too bug\n"
+msgstr ""
+
+#: dwarf.c:11414
msgid ".debug_sup section is corrupt/empty\n"
msgstr ""
-#: dwarf.c:11264
+#: dwarf.c:11424
msgid "filename in .debug_sup section is corrupt\n"
msgstr ""
-#: dwarf.c:11279
+#: dwarf.c:11439
msgid "unable to construct path for supplementary debug file"
msgstr ""
-#: dwarf.c:11293
+#: dwarf.c:11453
msgid "out of memory constructing filename for .debug_sup link\n"
msgstr ""
-#: dwarf.c:11301
+#: dwarf.c:11461
#, c-format
msgid "unable to open file '%s' referenced from .debug_sup section\n"
msgstr ""
-#: dwarf.c:11306
+#: dwarf.c:11466
#, c-format
msgid ""
"%s: Found supplementary debug file: %s\n"
"\n"
msgstr ""
-#: dwarf.c:11396
+#: dwarf.c:11558
msgid "Multiple DWO_NAMEs encountered for the same CU\n"
msgstr ""
-#: dwarf.c:11408
+#: dwarf.c:11570
msgid "multiple DWO_IDs encountered for the same CU\n"
msgstr ""
-#: dwarf.c:11413
+#: dwarf.c:11575
msgid "Unexpected DWO INFO type"
msgstr ""
-#: dwarf.c:11428
+#: dwarf.c:11590
#, c-format
msgid ""
"The %s section contains link(s) to dwo file(s):\n"
"\n"
msgstr ""
-#: dwarf.c:11433
+#: dwarf.c:11595
#, c-format
msgid " Name: %s\n"
msgstr ""
-#: dwarf.c:11434
+#: dwarf.c:11596
#, c-format
msgid " Directory: %s\n"
msgstr ""
-#: dwarf.c:11434
+#: dwarf.c:11596
msgid "<not-found>"
msgstr ""
-#: dwarf.c:11436
+#: dwarf.c:11598
#, c-format
msgid " ID: "
msgstr ""
-#: dwarf.c:11438
+#: dwarf.c:11600
#, c-format
msgid " ID: <not specified>\n"
msgstr ""
-#: dwarf.c:11602 dwarf.c:11646
+#: dwarf.c:11764 dwarf.c:11808
#, c-format
msgid "Unrecognized debug option '%s'\n"
msgstr ""
-#: dwarf.h:272
+#: dwarf.h:273
msgid "end of data encountered whilst reading LEB\n"
msgstr ""
-#: dwarf.h:274
+#: dwarf.h:275
msgid "read LEB value is too large to store in destination variable\n"
msgstr ""
@@ -4395,7 +4418,7 @@ msgstr ""
#. PR 24049 - we cannot use filedata->file_name as this will
#. have already been freed.
-#: elfcomm.c:519 elfcomm.c:753 elfedit.c:595 readelf.c:21776
+#: elfcomm.c:519 elfcomm.c:753 elfedit.c:613 readelf.c:22187
#, c-format
msgid "%s: failed to read archive header\n"
msgstr ""
@@ -4442,158 +4465,163 @@ msgstr ""
msgid "%s: failed to seek to next file name\n"
msgstr ""
-#: elfcomm.c:758 elfedit.c:602 readelf.c:21783
+#: elfcomm.c:758 elfedit.c:620 readelf.c:22194
#, c-format
msgid "%s: did not find a valid archive header\n"
msgstr ""
-#: elfedit.c:91
+#: elfedit.c:93
#, c-format
msgid "%s: Not an i386 nor x86-64 ELF file\n"
msgstr ""
-#: elfedit.c:97
+#: elfedit.c:99
#, c-format
msgid "%s: stat () failed\n"
msgstr ""
-#: elfedit.c:105
+#: elfedit.c:107
#, c-format
msgid "%s: mmap () failed\n"
msgstr ""
-#: elfedit.c:244
+#: elfedit.c:246
#, c-format
msgid "%s: Invalid PT_NOTE segment\n"
msgstr ""
-#: elfedit.c:269
+#: elfedit.c:271
#, c-format
msgid "Unknown x86 feature: %s\n"
msgstr ""
-#: elfedit.c:317
+#: elfedit.c:319
#, c-format
msgid "%s: Unsupported EI_VERSION: %d is not %d\n"
msgstr ""
-#: elfedit.c:338
+#: elfedit.c:340
#, c-format
msgid "%s: Unmatched input EI_CLASS: %d is not %d\n"
msgstr ""
-#: elfedit.c:347
+#: elfedit.c:349
#, c-format
msgid "%s: Unmatched output EI_CLASS: %d is not %d\n"
msgstr ""
-#: elfedit.c:356
+#: elfedit.c:358
#, c-format
msgid "%s: Unmatched e_machine: %d is not %d\n"
msgstr ""
-#: elfedit.c:367
+#: elfedit.c:369
#, c-format
msgid "%s: Unmatched e_type: %d is not %d\n"
msgstr ""
-#: elfedit.c:378
+#: elfedit.c:380
#, c-format
msgid "%s: Unmatched EI_OSABI: %d is not %d\n"
msgstr ""
-#: elfedit.c:411
+#: elfedit.c:392
+#, c-format
+msgid "%s: Unmatched EI_ABIVERSION: %d is not %d\n"
+msgstr ""
+
+#: elfedit.c:429
#, c-format
msgid "%s: Failed to update ELF header: %s\n"
msgstr ""
-#: elfedit.c:481
+#: elfedit.c:499
msgid ""
"This executable has been built without support for a\n"
"64 bit data type and so it cannot process 64 bit ELF files.\n"
msgstr ""
-#: elfedit.c:522
+#: elfedit.c:540
#, c-format
msgid "%s: Failed to read ELF header\n"
msgstr ""
-#: elfedit.c:529
+#: elfedit.c:547
#, c-format
msgid "%s: Failed to seek to ELF header\n"
msgstr ""
-#: elfedit.c:586 readelf.c:21764
+#: elfedit.c:604 readelf.c:22175
#, c-format
msgid "%s: failed to seek to next archive header\n"
msgstr ""
-#: elfedit.c:617 elfedit.c:626 readelf.c:21796 readelf.c:21805
+#: elfedit.c:635 elfedit.c:644 readelf.c:22207 readelf.c:22216
#, c-format
msgid "%s: bad archive file name\n"
msgstr ""
-#: elfedit.c:649 elfedit.c:760
+#: elfedit.c:667 elfedit.c:778
#, c-format
msgid "Input file '%s' is not readable\n"
msgstr ""
-#: elfedit.c:676
+#: elfedit.c:694
#, c-format
msgid "%s: failed to seek to archive member\n"
msgstr ""
-#: elfedit.c:717 readelf.c:21924
+#: elfedit.c:735 readelf.c:22335
#, c-format
msgid "'%s': No such file\n"
msgstr ""
-#: elfedit.c:719 readelf.c:21926
+#: elfedit.c:737 readelf.c:22337
#, c-format
msgid "Could not locate '%s'. System error message: %s\n"
msgstr ""
-#: elfedit.c:740 readelf.c:21933
+#: elfedit.c:758 readelf.c:22344
#, c-format
msgid "'%s' is not an ordinary file\n"
msgstr ""
-#: elfedit.c:766 readelf.c:21955
+#: elfedit.c:784 readelf.c:22366
#, c-format
msgid "%s: Failed to read file's magic number\n"
msgstr ""
-#: elfedit.c:830
+#: elfedit.c:848
#, c-format
msgid "Unknown OSABI: %s\n"
msgstr ""
-#: elfedit.c:855
+#: elfedit.c:873
#, c-format
msgid "Unknown machine type: %s\n"
msgstr ""
-#: elfedit.c:874
+#: elfedit.c:892
#, c-format
msgid "Unknown type: %s\n"
msgstr ""
-#: elfedit.c:921
+#: elfedit.c:943
#, c-format
msgid "Usage: %s <option(s)> elffile(s)\n"
msgstr ""
-#: elfedit.c:923
+#: elfedit.c:945
#, c-format
msgid " Update the ELF header of ELF files\n"
msgstr ""
-#: elfedit.c:924 objcopy.c:565 objcopy.c:706 strings.c:679
+#: elfedit.c:946 nm.c:295 objcopy.c:565 objcopy.c:706 strings.c:1314
#, c-format
msgid " The options are:\n"
msgstr ""
-#: elfedit.c:925
+#: elfedit.c:947
#, c-format
msgid ""
" --input-mach [none|i386|iamcu|l1om|k1om|x86_64]\n"
@@ -4608,9 +4636,11 @@ msgid ""
" Set input OSABI\n"
" --output-osabi [%s]\n"
" Set output OSABI\n"
+" --input-abiversion [0-255] Set input ABIVERSION\n"
+" --output-abiversion [0-255] Set output ABIVERSION\n"
msgstr ""
-#: elfedit.c:940
+#: elfedit.c:964
#, c-format
msgid ""
" --enable-x86-feature [ibt|shstk|lam_u48|lam_u57]\n"
@@ -4619,13 +4649,18 @@ msgid ""
" Disable x86 feature\n"
msgstr ""
-#: elfedit.c:946
+#: elfedit.c:970
#, c-format
msgid ""
" -h --help Display this information\n"
" -v --version Display the version number of %s\n"
msgstr ""
+#: elfedit.c:1049 elfedit.c:1060
+#, c-format
+msgid "Invalid ABIVERSION: %s\n"
+msgstr ""
+
#: emul_aix.c:44
#, c-format
msgid " [-g] - 32 bit small archive\n"
@@ -4646,125 +4681,262 @@ msgstr ""
msgid " [-X32_64] - accepts 32 and 64 bit objects\n"
msgstr ""
-#: mclex.c:240
+#: mclex.c:245
msgid "Duplicate symbol entered into keyword list."
msgstr ""
-#: nm.c:274 size.c:88 strings.c:677
+#: nm.c:293 size.c:88 strings.c:1312
#, c-format
msgid "Usage: %s [option(s)] [file(s)]\n"
msgstr ""
-#: nm.c:275
+#: nm.c:294
#, c-format
msgid " List symbols in [file(s)] (a.out by default).\n"
msgstr ""
-#: nm.c:276
+#: nm.c:296
+#, c-format
+msgid " -a, --debug-syms Display debugger-only symbols\n"
+msgstr ""
+
+#: nm.c:298
#, c-format
msgid ""
-" The options are:\n"
-" -a, --debug-syms Display debugger-only symbols\n"
" -A, --print-file-name Print name of the input file before every symbol\n"
-" -B Same as --format=bsd\n"
-" -C, --demangle[=STYLE] Decode low-level symbol names into user-level "
-"names\n"
-" The STYLE, if specified, can be `auto' (the "
-"default),\n"
-" `gnu', `lucid', `arm', `hp', `edg', `gnu-v3', "
-"`java'\n"
-" or `gnat'\n"
-" --no-demangle Do not demangle low-level symbol names\n"
-" --recurse-limit Enable a demangling recursion limit. This is the "
-"default.\n"
-" --no-recurse-limit Disable a demangling recursion limit.\n"
+msgstr ""
+
+#: nm.c:300
+#, c-format
+msgid " -B Same as --format=bsd\n"
+msgstr ""
+
+#: nm.c:302
+#, c-format
+msgid " -C, --demangle[=STYLE] Decode mangled/processed symbol names\n"
+msgstr ""
+
+#: nm.c:304 readelf.c:5056
+msgid " STYLE can be "
+msgstr ""
+
+#: nm.c:306
+#, c-format
+msgid " --no-demangle Do not demangle low-level symbol names\n"
+msgstr ""
+
+#: nm.c:308
+#, c-format
+msgid ""
+" --recurse-limit Enable a demangling recursion limit. (default)\n"
+msgstr ""
+
+#: nm.c:310
+#, c-format
+msgid " --no-recurse-limit Disable a demangling recursion limit.\n"
+msgstr ""
+
+#: nm.c:312
+#, c-format
+msgid ""
" -D, --dynamic Display dynamic symbols instead of normal symbols\n"
-" --defined-only Display only defined symbols\n"
-" -e (ignored)\n"
+msgstr ""
+
+#: nm.c:314
+#, c-format
+msgid " --defined-only Display only defined symbols\n"
+msgstr ""
+
+#: nm.c:316
+#, c-format
+msgid " -e (ignored)\n"
+msgstr ""
+
+#: nm.c:318
+#, c-format
+msgid ""
" -f, --format=FORMAT Use the output format FORMAT. FORMAT can be "
"`bsd',\n"
-" `sysv', `posix' or 'just-symbols'. The default "
-"is `bsd'\n"
-" -g, --extern-only Display only external symbols\n"
+" `sysv', `posix' or 'just-symbols'.\n"
+" The default is `bsd'\n"
+msgstr ""
+
+#: nm.c:322
+#, c-format
+msgid " -g, --extern-only Display only external symbols\n"
+msgstr ""
+
+#: nm.c:324
+#, c-format
+msgid ""
" --ifunc-chars=CHARS Characters to use when displaying ifunc symbols\n"
-" -j, --just-symbols Same as --format=just-symbols\n"
+msgstr ""
+
+#: nm.c:326
+#, c-format
+msgid " -j, --just-symbols Same as --format=just-symbols\n"
+msgstr ""
+
+#: nm.c:328
+#, c-format
+msgid ""
" -l, --line-numbers Use debugging information to find a filename and\n"
" line number for each symbol\n"
-" -n, --numeric-sort Sort symbols numerically by address\n"
-" -o Same as -A\n"
-" -p, --no-sort Do not sort the symbols\n"
-" -P, --portability Same as --format=posix\n"
-" -r, --reverse-sort Reverse the sense of the sort\n"
msgstr ""
-#: nm.c:303
+#: nm.c:331
+#, c-format
+msgid " -n, --numeric-sort Sort symbols numerically by address\n"
+msgstr ""
+
+#: nm.c:333
+#, c-format
+msgid " -o Same as -A\n"
+msgstr ""
+
+#: nm.c:335
+#, c-format
+msgid " -p, --no-sort Do not sort the symbols\n"
+msgstr ""
+
+#: nm.c:337
+#, c-format
+msgid " -P, --portability Same as --format=posix\n"
+msgstr ""
+
+#: nm.c:339
+#, c-format
+msgid " -r, --reverse-sort Reverse the sense of the sort\n"
+msgstr ""
+
+#: nm.c:342
#, c-format
msgid " --plugin NAME Load the specified plugin\n"
msgstr ""
-#: nm.c:306
+#: nm.c:345
+#, c-format
+msgid " -S, --print-size Print size of defined symbols\n"
+msgstr ""
+
+#: nm.c:347
#, c-format
msgid ""
-" -S, --print-size Print size of defined symbols\n"
" -s, --print-armap Include index for symbols from archive members\n"
-" --quiet Suppress \"no symbols\" diagnostic\n"
-" --size-sort Sort symbols by size\n"
-" --special-syms Include special symbols in the output\n"
-" --synthetic Display synthetic symbols as well\n"
-" -t, --radix=RADIX Use RADIX for printing symbol values\n"
-" --target=BFDNAME Specify the target object format as BFDNAME\n"
-" -u, --undefined-only Display only undefined symbols\n"
+msgstr ""
+
+#: nm.c:349
+#, c-format
+msgid " --quiet Suppress \"no symbols\" diagnostic\n"
+msgstr ""
+
+#: nm.c:351
+#, c-format
+msgid " --size-sort Sort symbols by size\n"
+msgstr ""
+
+#: nm.c:353
+#, c-format
+msgid " --special-syms Include special symbols in the output\n"
+msgstr ""
+
+#: nm.c:355
+#, c-format
+msgid " --synthetic Display synthetic symbols as well\n"
+msgstr ""
+
+#: nm.c:357
+#, c-format
+msgid " -t, --radix=RADIX Use RADIX for printing symbol values\n"
+msgstr ""
+
+#: nm.c:359
+#, c-format
+msgid " --target=BFDNAME Specify the target object format as BFDNAME\n"
+msgstr ""
+
+#: nm.c:361
+#, c-format
+msgid " -u, --undefined-only Display only undefined symbols\n"
+msgstr ""
+
+#: nm.c:363
+#, c-format
+msgid ""
+" -U {d|s|i|x|e|h} Specify how to treat UTF-8 encoded unicode "
+"characters\n"
+" --unicode={default|show|invalid|hex|escape|highlight}\n"
+msgstr ""
+
+#: nm.c:366
+#, c-format
+msgid ""
" --with-symbol-versions Display version strings after symbol names\n"
-" -X 32_64 (ignored)\n"
-" @FILE Read options from FILE\n"
-" -h, --help Display this information\n"
-" -V, --version Display this program's version number\n"
-"\n"
msgstr ""
-#: nm.c:340
+#: nm.c:368
#, c-format
-msgid "%s: invalid radix"
+msgid " -X 32_64 (ignored)\n"
msgstr ""
#: nm.c:370
#, c-format
+msgid " @FILE Read options from FILE\n"
+msgstr ""
+
+#: nm.c:372
+#, c-format
+msgid " -h, --help Display this information\n"
+msgstr ""
+
+#: nm.c:374
+#, c-format
+msgid " -V, --version Display this program's version number\n"
+msgstr ""
+
+#: nm.c:395
+#, c-format
+msgid "%s: invalid radix"
+msgstr ""
+
+#: nm.c:425
+#, c-format
msgid "%s: invalid output format"
msgstr ""
-#: nm.c:395 readelf.c:12094 readelf.c:12137
+#: nm.c:450 readelf.c:12440 readelf.c:12483
#, c-format
msgid "<processor specific>: %d"
msgstr ""
-#: nm.c:397 readelf.c:12101 readelf.c:12154
+#: nm.c:452 readelf.c:12447 readelf.c:12500
#, c-format
msgid "<OS specific>: %d"
msgstr ""
-#: nm.c:399 readelf.c:12104 readelf.c:12157
+#: nm.c:454 readelf.c:12450 readelf.c:12503
#, c-format
msgid "<unknown>: %d"
msgstr ""
-#: nm.c:429
+#: nm.c:484
#, c-format
msgid "<unknown>: %d/%d"
msgstr ""
-#: nm.c:499
+#: nm.c:742
#, c-format
msgid ""
"\n"
"Archive index:\n"
msgstr ""
-#: nm.c:553 nm.c:1250
+#: nm.c:797 nm.c:1494
#, c-format
msgid "%s: plugin needed to handle lto object"
msgstr ""
-#: nm.c:1487
+#: nm.c:1731
#, c-format
msgid ""
"\n"
@@ -4773,7 +4945,7 @@ msgid ""
"\n"
msgstr ""
-#: nm.c:1489
+#: nm.c:1733
#, c-format
msgid ""
"\n"
@@ -4782,7 +4954,7 @@ msgid ""
"\n"
msgstr ""
-#: nm.c:1491 nm.c:1552
+#: nm.c:1735 nm.c:1796
#, c-format
msgid ""
"Name Value Class Type Size Line "
@@ -4790,7 +4962,7 @@ msgid ""
"\n"
msgstr ""
-#: nm.c:1494 nm.c:1555
+#: nm.c:1738 nm.c:1799
#, c-format
msgid ""
"Name Value Class Type "
@@ -4798,7 +4970,7 @@ msgid ""
"\n"
msgstr ""
-#: nm.c:1548
+#: nm.c:1792
#, c-format
msgid ""
"\n"
@@ -4807,7 +4979,7 @@ msgid ""
"\n"
msgstr ""
-#: nm.c:1550
+#: nm.c:1794
#, c-format
msgid ""
"\n"
@@ -4816,20 +4988,25 @@ msgid ""
"\n"
msgstr ""
-#: nm.c:1656
+#: nm.c:1900
#, c-format
msgid "Print width has not been initialized (%d)"
msgstr ""
-#: nm.c:1915
+#: nm.c:2162 objdump.c:5674 readelf.c:5472 strings.c:292
+#, c-format
+msgid "invalid argument to -U/--unicode: %s"
+msgstr ""
+
+#: nm.c:2177
msgid "Only -X 32_64 is supported"
msgstr ""
-#: nm.c:1947
+#: nm.c:2209
msgid "Using the --size-sort and --undefined-only options together"
msgstr ""
-#: nm.c:1948
+#: nm.c:2210
msgid "will produce no output, since undefined symbols have no size."
msgstr ""
@@ -5118,7 +5295,7 @@ msgstr ""
msgid "cannot open '%s': %s"
msgstr ""
-#: objcopy.c:1094 objcopy.c:5055
+#: objcopy.c:1094 objcopy.c:5091
#, c-format
msgid "%s: fread failed"
msgstr ""
@@ -5143,602 +5320,606 @@ msgstr ""
msgid "Section %s not found"
msgstr ""
-#: objcopy.c:1654
+#: objcopy.c:1550
+msgid "redefining symbols does not work on LTO-compiled object files"
+msgstr ""
+
+#: objcopy.c:1662
#, c-format
msgid "not stripping symbol `%s' because it is named in a relocation"
msgstr ""
-#: objcopy.c:1715
+#: objcopy.c:1723
#, c-format
msgid "'before=%s' not found"
msgstr ""
-#: objcopy.c:1754
+#: objcopy.c:1762
#, c-format
msgid "%s: Multiple redefinition of symbol \"%s\""
msgstr ""
-#: objcopy.c:1758
+#: objcopy.c:1766
#, c-format
msgid "%s: Symbol \"%s\" is target of more than one redefinition"
msgstr ""
-#: objcopy.c:1785
+#: objcopy.c:1793
#, c-format
msgid "couldn't open symbol redefinition file %s (error: %s)"
msgstr ""
-#: objcopy.c:1863
+#: objcopy.c:1871
#, c-format
msgid "%s:%d: garbage found at end of line"
msgstr ""
-#: objcopy.c:1866
+#: objcopy.c:1874
#, c-format
msgid "%s:%d: missing new symbol name"
msgstr ""
-#: objcopy.c:1876
+#: objcopy.c:1884
#, c-format
msgid "%s:%d: premature end of file"
msgstr ""
-#: objcopy.c:1903
+#: objcopy.c:1910
#, c-format
msgid "stat returns negative size for `%s'"
msgstr ""
-#: objcopy.c:1915
+#: objcopy.c:1922
#, c-format
msgid "copy from `%s' [unknown] to `%s' [unknown]\n"
msgstr ""
-#: objcopy.c:2162
+#: objcopy.c:2167
#, c-format
msgid "%s[%s]: Cannot merge - there are relocations against this section"
msgstr ""
-#: objcopy.c:2184
+#: objcopy.c:2189
msgid "corrupt GNU build attribute note: description size not a factor of 4"
msgstr ""
-#: objcopy.c:2191
+#: objcopy.c:2196
msgid "corrupt GNU build attribute note: wrong note type"
msgstr ""
-#: objcopy.c:2197
+#: objcopy.c:2202
msgid "corrupt GNU build attribute note: note too big"
msgstr ""
-#: objcopy.c:2203
+#: objcopy.c:2208
msgid "corrupt GNU build attribute note: name too small"
msgstr ""
-#: objcopy.c:2226
+#: objcopy.c:2231
msgid "corrupt GNU build attribute note: unsupported version"
msgstr ""
-#: objcopy.c:2260
+#: objcopy.c:2265
msgid "corrupt GNU build attribute note: bad description size"
msgstr ""
-#: objcopy.c:2296
+#: objcopy.c:2301
msgid "corrupt GNU build attribute note: name not NUL terminated"
msgstr ""
-#: objcopy.c:2308
+#: objcopy.c:2313
msgid "corrupt GNU build attribute notes: excess data at end"
msgstr ""
-#: objcopy.c:2315
+#: objcopy.c:2320
msgid "bad GNU build attribute notes: no known versions detected"
msgstr ""
#. This happens with glibc. No idea why.
-#: objcopy.c:2319
+#: objcopy.c:2324
#, c-format
msgid "%s[%s]: Warning: version note missing - assuming version 3"
msgstr ""
-#: objcopy.c:2329
+#: objcopy.c:2334
msgid "bad GNU build attribute notes: multiple different versions"
msgstr ""
-#: objcopy.c:2569
+#: objcopy.c:2574
#, c-format
msgid "%s[%s]: Note - dropping 'share' flag as output format is not COFF"
msgstr ""
#. PR 17636: Call non-fatal so that we return to our parent who
#. may need to tidy temporary files.
-#: objcopy.c:2601
+#: objcopy.c:2606
#, c-format
msgid "unable to change endianness of '%s'"
msgstr ""
-#: objcopy.c:2608
+#: objcopy.c:2613
#, c-format
msgid "unable to modify '%s' due to errors"
msgstr ""
-#: objcopy.c:2621
+#: objcopy.c:2626
#, c-format
msgid "error: the input file '%s' has no sections"
msgstr ""
-#: objcopy.c:2631
+#: objcopy.c:2636
#, c-format
msgid ""
"--compress-debug-sections=[zlib|zlib-gnu|zlib-gabi] is unsupported on `%s'"
msgstr ""
-#: objcopy.c:2638
+#: objcopy.c:2643
#, c-format
msgid "--elf-stt-common=[yes|no] is unsupported on `%s'"
msgstr ""
-#: objcopy.c:2645
+#: objcopy.c:2650
#, c-format
msgid "copy from `%s' [%s] to `%s' [%s]\n"
msgstr ""
-#: objcopy.c:2693
+#: objcopy.c:2698
#, c-format
msgid "Input file `%s' ignores binary architecture parameter."
msgstr ""
-#: objcopy.c:2709
+#: objcopy.c:2714
#, c-format
msgid "Unable to recognise the format of the input file `%s'"
msgstr ""
-#: objcopy.c:2712
+#: objcopy.c:2717
#, c-format
msgid "Output file cannot represent architecture `%s'"
msgstr ""
-#: objcopy.c:2775
+#: objcopy.c:2780
#, c-format
msgid "warning: file alignment (0x%s) > section alignment (0x%s)"
msgstr ""
-#: objcopy.c:2848
+#: objcopy.c:2853
#, c-format
msgid "can't add section '%s'"
msgstr ""
-#: objcopy.c:2862
+#: objcopy.c:2867
#, c-format
msgid "can't create section `%s'"
msgstr ""
-#: objcopy.c:2910
+#: objcopy.c:2915
#, c-format
msgid "error: %s not found, can't be updated"
msgstr ""
-#: objcopy.c:2943
+#: objcopy.c:2948
msgid "warning: note section is empty"
msgstr ""
-#: objcopy.c:2952
+#: objcopy.c:2957
msgid "warning: could not load note section"
msgstr ""
-#: objcopy.c:2968
+#: objcopy.c:2973
msgid "warning: failed to set merged notes size"
msgstr ""
-#: objcopy.c:2994
+#: objcopy.c:2999
#, c-format
msgid "can't dump section '%s' - it does not exist"
msgstr ""
-#: objcopy.c:3002
+#: objcopy.c:3007
msgid "can't dump section - it has no contents"
msgstr ""
-#: objcopy.c:3014
+#: objcopy.c:3019
msgid "could not open section dump file"
msgstr ""
-#: objcopy.c:3022
+#: objcopy.c:3027
#, c-format
msgid "error writing section contents to %s (error: %s)"
msgstr ""
-#: objcopy.c:3032
+#: objcopy.c:3037
msgid "could not retrieve section contents"
msgstr ""
-#: objcopy.c:3046
+#: objcopy.c:3051
#, c-format
msgid "%s: debuglink section already exists"
msgstr ""
-#: objcopy.c:3058
+#: objcopy.c:3063
#, c-format
msgid "cannot create debug link section `%s'"
msgstr ""
-#: objcopy.c:3152
+#: objcopy.c:3157
msgid "Can't fill gap after section"
msgstr ""
-#: objcopy.c:3177
+#: objcopy.c:3182
msgid "can't add padding"
msgstr ""
-#: objcopy.c:3354
+#: objcopy.c:3359
msgid "error: failed to locate merged notes"
msgstr ""
-#: objcopy.c:3363
+#: objcopy.c:3368
msgid "error: failed to merge notes"
msgstr ""
-#: objcopy.c:3372
+#: objcopy.c:3377
msgid "error: failed to copy merged notes into output"
msgstr ""
-#: objcopy.c:3389
+#: objcopy.c:3394
#, c-format
msgid "%s: Could not find any mergeable note sections"
msgstr ""
-#: objcopy.c:3398
+#: objcopy.c:3403
#, c-format
msgid "cannot fill debug link section `%s'"
msgstr ""
-#: objcopy.c:3459
+#: objcopy.c:3464
msgid "error copying private BFD data"
msgstr ""
-#: objcopy.c:3470
+#: objcopy.c:3475
#, c-format
msgid "this target does not support %lu alternative machine codes"
msgstr ""
-#: objcopy.c:3474
+#: objcopy.c:3479
msgid "treating that number as an absolute e_machine value instead"
msgstr ""
-#: objcopy.c:3478
+#: objcopy.c:3483
msgid "ignoring the alternative value"
msgstr ""
-#: objcopy.c:3524
+#: objcopy.c:3529
msgid "sorry: copying thin archives is not currently supported"
msgstr ""
-#: objcopy.c:3531 objcopy.c:3586
+#: objcopy.c:3536 objcopy.c:3591
#, c-format
msgid "cannot create tempdir for archive copying (error: %s)"
msgstr ""
-#: objcopy.c:3568
+#: objcopy.c:3573
#, c-format
msgid "illegal pathname found in archive member: %s"
msgstr ""
-#: objcopy.c:3619
+#: objcopy.c:3625
msgid "Unable to recognise the format of file"
msgstr ""
-#: objcopy.c:3752
+#: objcopy.c:3758
#, c-format
msgid "error: the input file '%s' is empty"
msgstr ""
-#: objcopy.c:3830
+#: objcopy.c:3836
#, c-format
msgid "--add-gnu-debuglink ignored for archive %s"
msgstr ""
-#: objcopy.c:3939
+#: objcopy.c:3945
#, c-format
msgid "Multiple renames of section %s"
msgstr ""
-#: objcopy.c:3985
+#: objcopy.c:3991
msgid "error in private header data"
msgstr ""
-#: objcopy.c:4078
+#: objcopy.c:4084
msgid "failed to create output section"
msgstr ""
-#: objcopy.c:4093
+#: objcopy.c:4099
msgid "failed to set size"
msgstr ""
-#: objcopy.c:4112
+#: objcopy.c:4118
msgid "failed to set vma"
msgstr ""
-#: objcopy.c:4142
+#: objcopy.c:4148
msgid "failed to set alignment"
msgstr ""
-#: objcopy.c:4174
+#: objcopy.c:4180
msgid "failed to copy private data"
msgstr ""
-#: objcopy.c:4331
+#: objcopy.c:4337
msgid "relocation count is negative"
msgstr ""
#. User must pad the section up in order to do this.
-#: objcopy.c:4430
+#: objcopy.c:4436
#, c-format
msgid ""
"cannot reverse bytes: length of section %s must be evenly divisible by %d"
msgstr ""
-#: objcopy.c:4638
+#: objcopy.c:4644
msgid "can't create debugging section"
msgstr ""
-#: objcopy.c:4652
+#: objcopy.c:4658
msgid "can't set debugging section contents"
msgstr ""
-#: objcopy.c:4661
+#: objcopy.c:4667
#, c-format
msgid "don't know how to write debugging information for %s"
msgstr ""
-#: objcopy.c:4850
+#: objcopy.c:4856
msgid "could not create temporary file to hold stripped copy"
msgstr ""
-#: objcopy.c:4924
+#: objcopy.c:4930
#, c-format
msgid "%s: bad version in PE subsystem"
msgstr ""
-#: objcopy.c:4954
+#: objcopy.c:4960
#, c-format
msgid "unknown PE subsystem: %s"
msgstr ""
-#: objcopy.c:5008 objcopy.c:5280 objcopy.c:5360 objcopy.c:5501 objcopy.c:5533
-#: objcopy.c:5596 objcopy.c:5600 objcopy.c:5620
+#: objcopy.c:5044 objcopy.c:5316 objcopy.c:5396 objcopy.c:5537 objcopy.c:5569
+#: objcopy.c:5632 objcopy.c:5636 objcopy.c:5656
#, c-format
msgid "bad format for %s"
msgstr ""
-#: objcopy.c:5037
+#: objcopy.c:5073
#, c-format
msgid "cannot open: %s: %s"
msgstr ""
-#: objcopy.c:5092
+#: objcopy.c:5128
msgid "byte number must be non-negative"
msgstr ""
-#: objcopy.c:5098
+#: objcopy.c:5134
#, c-format
msgid "architecture %s unknown"
msgstr ""
-#: objcopy.c:5106
+#: objcopy.c:5142
msgid "interleave must be positive"
msgstr ""
-#: objcopy.c:5115
+#: objcopy.c:5151
msgid "interleave width must be positive"
msgstr ""
-#: objcopy.c:5433
+#: objcopy.c:5469
#, c-format
msgid "unrecognized --compress-debug-sections type `%s'"
msgstr ""
-#: objcopy.c:5454
+#: objcopy.c:5490
#, c-format
msgid "unrecognized --elf-stt-common= option `%s'"
msgstr ""
-#: objcopy.c:5470
+#: objcopy.c:5506
#, c-format
msgid "Warning: truncating gap-fill from 0x%s to 0x%x"
msgstr ""
-#: objcopy.c:5556
+#: objcopy.c:5592
msgid "bad format for --set-section-alignment: argument needed"
msgstr ""
-#: objcopy.c:5560
+#: objcopy.c:5596
msgid "bad format for --set-section-alignment: numeric argument needed"
msgstr ""
#. Number has more than on 1, i.e. wasn't a power of 2.
-#: objcopy.c:5572
+#: objcopy.c:5608
msgid "bad format for --set-section-alignment: alignment is not a power of two"
msgstr ""
-#: objcopy.c:5679
+#: objcopy.c:5715
#, c-format
msgid "unknown long section names option '%s'"
msgstr ""
-#: objcopy.c:5702
+#: objcopy.c:5738
msgid "unable to parse alternative machine code"
msgstr ""
-#: objcopy.c:5751
+#: objcopy.c:5787
msgid "number of bytes to reverse must be positive and even"
msgstr ""
-#: objcopy.c:5754
+#: objcopy.c:5790
#, c-format
msgid "Warning: ignoring previous --reverse-bytes value of %d"
msgstr ""
-#: objcopy.c:5769
+#: objcopy.c:5805
#, c-format
msgid "%s: invalid reserve value for --heap"
msgstr ""
-#: objcopy.c:5775
+#: objcopy.c:5811
#, c-format
msgid "%s: invalid commit value for --heap"
msgstr ""
-#: objcopy.c:5800
+#: objcopy.c:5836
#, c-format
msgid "%s: invalid reserve value for --stack"
msgstr ""
-#: objcopy.c:5806
+#: objcopy.c:5842
#, c-format
msgid "%s: invalid commit value for --stack"
msgstr ""
-#: objcopy.c:5815
+#: objcopy.c:5851
msgid "verilog data width must be at least 1 byte"
msgstr ""
-#: objcopy.c:5832
+#: objcopy.c:5868
msgid "--globalize-symbol(s) is incompatible with -G/--keep-global-symbol(s)"
msgstr ""
-#: objcopy.c:5844
+#: objcopy.c:5880
msgid "interleave start byte must be set with --byte"
msgstr ""
-#: objcopy.c:5847
+#: objcopy.c:5883
msgid "byte number must be less than interleave"
msgstr ""
-#: objcopy.c:5850
+#: objcopy.c:5886
msgid "interleave width must be less than or equal to interleave - byte`"
msgstr ""
-#: objcopy.c:5879
+#: objcopy.c:5909
#, c-format
msgid "unknown input EFI target: %s"
msgstr ""
-#: objcopy.c:5910
+#: objcopy.c:5919
#, c-format
msgid "unknown output EFI target: %s"
msgstr ""
-#: objcopy.c:5936
+#: objcopy.c:5943
#, c-format
msgid ""
"warning: could not create temporary file whilst copying '%s', (error: %s)"
msgstr ""
-#: objcopy.c:5973 objcopy.c:5987
+#: objcopy.c:5980 objcopy.c:5994
#, c-format
msgid "%s %s%c0x%s never used"
msgstr ""
-#: objdump.c:212
+#: objdump.c:225
#, c-format
msgid "Usage: %s <option(s)> <file(s)>\n"
msgstr ""
-#: objdump.c:213
+#: objdump.c:226
#, c-format
msgid " Display information from object <file(s)>.\n"
msgstr ""
-#: objdump.c:214
+#: objdump.c:227
#, c-format
msgid " At least one of the following switches must be given:\n"
msgstr ""
-#: objdump.c:215
+#: objdump.c:228
#, c-format
msgid " -a, --archive-headers Display archive header information\n"
msgstr ""
-#: objdump.c:217
+#: objdump.c:230
#, c-format
msgid ""
" -f, --file-headers Display the contents of the overall file header\n"
msgstr ""
-#: objdump.c:219
+#: objdump.c:232
#, c-format
msgid ""
" -p, --private-headers Display object format specific file header "
"contents\n"
msgstr ""
-#: objdump.c:221
+#: objdump.c:234
#, c-format
msgid " -P, --private=OPT,OPT... Display object format specific contents\n"
msgstr ""
-#: objdump.c:223
+#: objdump.c:236
#, c-format
msgid ""
" -h, --[section-]headers Display the contents of the section headers\n"
msgstr ""
-#: objdump.c:225
+#: objdump.c:238
#, c-format
msgid " -x, --all-headers Display the contents of all headers\n"
msgstr ""
-#: objdump.c:227
+#: objdump.c:240
#, c-format
msgid ""
" -d, --disassemble Display assembler contents of executable "
"sections\n"
msgstr ""
-#: objdump.c:229
+#: objdump.c:242
#, c-format
msgid " -D, --disassemble-all Display assembler contents of all sections\n"
msgstr ""
-#: objdump.c:231
+#: objdump.c:244
#, c-format
msgid " --disassemble=<sym> Display assembler contents from <sym>\n"
msgstr ""
-#: objdump.c:233
+#: objdump.c:246
#, c-format
msgid " -S, --source Intermix source code with disassembly\n"
msgstr ""
-#: objdump.c:235
+#: objdump.c:248
#, c-format
msgid " --source-comment[=<txt>] Prefix lines of source code with <txt>\n"
msgstr ""
-#: objdump.c:237
+#: objdump.c:250
#, c-format
msgid ""
" -s, --full-contents Display the full contents of all sections "
"requested\n"
msgstr ""
-#: objdump.c:239
+#: objdump.c:252
#, c-format
msgid " -g, --debugging Display debug information in object file\n"
msgstr ""
-#: objdump.c:241
+#: objdump.c:254
#, c-format
msgid ""
" -e, --debugging-tags Display debug information using ctags style\n"
msgstr ""
-#: objdump.c:243
+#: objdump.c:256
#, c-format
msgid ""
" -G, --stabs Display (in raw form) any STABS info in the file\n"
msgstr ""
-#: objdump.c:245
+#: objdump.c:258
#, c-format
msgid ""
" -W, --dwarf[a/=abbrev, A/=addr, r/=aranges, c/=cu_index, L/=decodedline,\n"
@@ -5749,14 +5930,14 @@ msgid ""
" Display the contents of DWARF debug sections\n"
msgstr ""
-#: objdump.c:252
+#: objdump.c:265
#, c-format
msgid ""
" -Wk,--dwarf=links Display the contents of sections that link to\n"
" separate debuginfo files\n"
msgstr ""
-#: objdump.c:256
+#: objdump.c:269
#, c-format
msgid ""
" -WK,--dwarf=follow-links\n"
@@ -5764,21 +5945,21 @@ msgid ""
"(default)\n"
msgstr ""
-#: objdump.c:259
+#: objdump.c:272
#, c-format
msgid ""
" -WN,--dwarf=no-follow-links\n"
" Do not follow links to separate debug info files\n"
msgstr ""
-#: objdump.c:263
+#: objdump.c:276
#, c-format
msgid ""
" -WK,--dwarf=follow-links\n"
" Follow links to separate debug info files\n"
msgstr ""
-#: objdump.c:266
+#: objdump.c:279
#, c-format
msgid ""
" -WN,--dwarf=no-follow-links\n"
@@ -5786,147 +5967,147 @@ msgid ""
" (default)\n"
msgstr ""
-#: objdump.c:271
+#: objdump.c:284
#, c-format
msgid ""
" -L, --process-links Display the contents of non-debug sections in\n"
" separate debuginfo files. (Implies -WK)\n"
msgstr ""
-#: objdump.c:275
+#: objdump.c:288
#, c-format
-msgid " --ctf=SECTION Display CTF info from SECTION\n"
+msgid ""
+" --ctf[=SECTION] Display CTF info from SECTION, (default `.ctf')\n"
msgstr ""
-#: objdump.c:278
+#: objdump.c:291
#, c-format
msgid ""
" -t, --syms Display the contents of the symbol table(s)\n"
msgstr ""
-#: objdump.c:280
+#: objdump.c:293
#, c-format
msgid ""
" -T, --dynamic-syms Display the contents of the dynamic symbol table\n"
msgstr ""
-#: objdump.c:282
+#: objdump.c:295
#, c-format
msgid " -r, --reloc Display the relocation entries in the file\n"
msgstr ""
-#: objdump.c:284
+#: objdump.c:297
#, c-format
msgid ""
" -R, --dynamic-reloc Display the dynamic relocation entries in the "
"file\n"
msgstr ""
-#: objdump.c:286
+#: objdump.c:299
#, c-format
msgid " @<file> Read options from <file>\n"
msgstr ""
-#: objdump.c:288
+#: objdump.c:301
#, c-format
msgid " -v, --version Display this program's version number\n"
msgstr ""
-#: objdump.c:290
+#: objdump.c:303
#, c-format
msgid ""
" -i, --info List object formats and architectures supported\n"
msgstr ""
-#: objdump.c:292
+#: objdump.c:305
#, c-format
msgid " -H, --help Display this information\n"
msgstr ""
-#: objdump.c:299
+#: objdump.c:312
#, c-format
msgid ""
"\n"
" The following switches are optional:\n"
msgstr ""
-#: objdump.c:300
+#: objdump.c:313
#, c-format
msgid ""
" -b, --target=BFDNAME Specify the target object format as "
"BFDNAME\n"
msgstr ""
-#: objdump.c:302
+#: objdump.c:315
#, c-format
msgid ""
" -m, --architecture=MACHINE Specify the target architecture as MACHINE\n"
msgstr ""
-#: objdump.c:304
+#: objdump.c:317
#, c-format
msgid ""
" -j, --section=NAME Only display information for section NAME\n"
msgstr ""
-#: objdump.c:306
+#: objdump.c:319
#, c-format
msgid " -M, --disassembler-options=OPT Pass text OPT on to the disassembler\n"
msgstr ""
-#: objdump.c:308
+#: objdump.c:321
#, c-format
msgid ""
" -EB --endian=big Assume big endian format when "
"disassembling\n"
msgstr ""
-#: objdump.c:310
+#: objdump.c:323
#, c-format
msgid ""
" -EL --endian=little Assume little endian format when "
"disassembling\n"
msgstr ""
-#: objdump.c:312
+#: objdump.c:325
#, c-format
msgid ""
" --file-start-context Include context from start of file (with -"
"S)\n"
msgstr ""
-#: objdump.c:314
+#: objdump.c:327
#, c-format
msgid ""
" -I, --include=DIR Add DIR to search list for source files\n"
msgstr ""
-#: objdump.c:316
+#: objdump.c:329
#, c-format
msgid ""
" -l, --line-numbers Include line numbers and filenames in "
"output\n"
msgstr ""
-#: objdump.c:318
+#: objdump.c:331
#, c-format
msgid ""
" -F, --file-offsets Include file offsets when displaying "
"information\n"
msgstr ""
-#: objdump.c:320
+#: objdump.c:333
#, c-format
msgid ""
" -C, --demangle[=STYLE] Decode mangled/processed symbol names\n"
-" The STYLE, if specified, can be `auto', "
-"`gnu',\n"
-" `lucid', `arm', `hp', `edg', `gnu-v3', "
-"`java'\n"
-" or `gnat'\n"
msgstr ""
-#: objdump.c:325
+#: objdump.c:335
+msgid " STYLE can be "
+msgstr ""
+
+#: objdump.c:337
#, c-format
msgid ""
" --recurse-limit Enable a limit on recursion whilst "
@@ -5934,426 +6115,436 @@ msgid ""
" (default)\n"
msgstr ""
-#: objdump.c:328
+#: objdump.c:340
#, c-format
msgid ""
" --no-recurse-limit Disable a limit on recursion whilst "
"demangling\n"
msgstr ""
-#: objdump.c:330
+#: objdump.c:342
#, c-format
msgid ""
" -w, --wide Format output for more than 80 columns\n"
msgstr ""
-#: objdump.c:332
+#: objdump.c:344
+#, c-format
+msgid ""
+" -U[d|l|i|x|e|h] Controls the display of UTF-8 unicode "
+"characters\n"
+" --unicode=[default|locale|invalid|hex|escape|highlight]\n"
+msgstr ""
+
+#: objdump.c:347
#, c-format
msgid ""
" -z, --disassemble-zeroes Do not skip blocks of zeroes when "
"disassembling\n"
msgstr ""
-#: objdump.c:334
+#: objdump.c:349
#, c-format
msgid ""
" --start-address=ADDR Only process data whose address is >= ADDR\n"
msgstr ""
-#: objdump.c:336
+#: objdump.c:351
#, c-format
msgid ""
" --stop-address=ADDR Only process data whose address is < ADDR\n"
msgstr ""
-#: objdump.c:338
+#: objdump.c:353
#, c-format
msgid ""
" --no-addresses Do not print address alongside disassembly\n"
msgstr ""
-#: objdump.c:340
+#: objdump.c:355
#, c-format
msgid ""
" --prefix-addresses Print complete address alongside "
"disassembly\n"
msgstr ""
-#: objdump.c:342
+#: objdump.c:357
#, c-format
msgid ""
" --[no-]show-raw-insn Display hex alongside symbolic disassembly\n"
msgstr ""
-#: objdump.c:344
+#: objdump.c:359
#, c-format
msgid ""
" --insn-width=WIDTH Display WIDTH bytes on a single line for -"
"d\n"
msgstr ""
-#: objdump.c:346
+#: objdump.c:361
#, c-format
msgid ""
" --adjust-vma=OFFSET Add OFFSET to all displayed section "
"addresses\n"
msgstr ""
-#: objdump.c:348
+#: objdump.c:363
#, c-format
msgid ""
" --special-syms Include special symbols in symbol dumps\n"
msgstr ""
-#: objdump.c:350
+#: objdump.c:365
#, c-format
msgid ""
" --inlines Print all inlines for source line (with -"
"l)\n"
msgstr ""
-#: objdump.c:352
+#: objdump.c:367
#, c-format
msgid " --prefix=PREFIX Add PREFIX to absolute paths for -S\n"
msgstr ""
-#: objdump.c:354
+#: objdump.c:369
#, c-format
msgid " --prefix-strip=LEVEL Strip initial directory names for -S\n"
msgstr ""
-#: objdump.c:356
+#: objdump.c:371
#, c-format
msgid ""
" --dwarf-depth=N Do not display DIEs at depth N or greater\n"
msgstr ""
-#: objdump.c:358
+#: objdump.c:373
#, c-format
msgid " --dwarf-start=N Display DIEs starting at offset N\n"
msgstr ""
-#: objdump.c:360
+#: objdump.c:375
#, c-format
msgid ""
" --dwarf-check Make additional dwarf consistency checks.\n"
msgstr ""
-#: objdump.c:363
+#: objdump.c:378
#, c-format
-msgid " --ctf-parent=SECTION Use SECTION as the CTF parent\n"
+msgid ""
+" --ctf-parent=NAME Use CTF archive member NAME as the CTF "
+"parent\n"
msgstr ""
-#: objdump.c:366
+#: objdump.c:381
#, c-format
msgid ""
" --visualize-jumps Visualize jumps by drawing ASCII art lines\n"
msgstr ""
-#: objdump.c:368
+#: objdump.c:383
#, c-format
msgid " --visualize-jumps=color Use colors in the ASCII art\n"
msgstr ""
-#: objdump.c:370
+#: objdump.c:385
#, c-format
msgid ""
" --visualize-jumps=extended-color\n"
" Use extended 8-bit color codes\n"
msgstr ""
-#: objdump.c:373
+#: objdump.c:388
#, c-format
msgid ""
" --visualize-jumps=off Disable jump visualization\n"
"\n"
msgstr ""
-#: objdump.c:384
+#: objdump.c:399
#, c-format
msgid ""
"\n"
"Options supported for -P/--private switch:\n"
msgstr ""
-#: objdump.c:621
+#: objdump.c:759
#, c-format
msgid "section '%s' mentioned in a -j option, but not found in any input file"
msgstr ""
-#: objdump.c:776
+#: objdump.c:914
#, c-format
msgid "Sections:\n"
msgstr ""
-#: objdump.c:782
+#: objdump.c:920
#, c-format
msgid "Idx %-*s Size %-*s%-*sFile off Algn"
msgstr ""
-#: objdump.c:788
+#: objdump.c:926
#, c-format
msgid " Flags"
msgstr ""
-#: objdump.c:810
+#: objdump.c:948
#, c-format
msgid "failed to read symbol table from: %s"
msgstr ""
-#: objdump.c:811 objdump.c:4761
+#: objdump.c:949 objdump.c:4907
msgid "error message was"
msgstr ""
-#: objdump.c:826
+#: objdump.c:964
#, c-format
msgid "error: symbol table size (%#lx) is larger than filesize (%#lx)"
msgstr ""
-#: objdump.c:856
+#: objdump.c:994
#, c-format
msgid "%s: not a dynamic object"
msgstr ""
-#: objdump.c:1455 objdump.c:1482
+#: objdump.c:1593 objdump.c:1620
#, c-format
msgid " (File Offset: 0x%lx)"
msgstr ""
-#: objdump.c:1727
+#: objdump.c:1865
#, c-format
msgid "source file %s is more recent than object file\n"
msgstr ""
-#: objdump.c:2755
+#: objdump.c:2893
#, c-format
msgid "\t... (skipping %lu zeroes, resuming at file offset: 0x%lx)\n"
msgstr ""
-#: objdump.c:2887
+#: objdump.c:3025
#, c-format
msgid "disassemble_fn returned length %d"
msgstr ""
-#: objdump.c:3215 objdump.c:4399
+#: objdump.c:3353 objdump.c:4527
#, c-format
msgid "Reading section %s failed because: %s"
msgstr ""
-#: objdump.c:3236
+#: objdump.c:3374
#, c-format
msgid ""
"\n"
"Disassembly of section %s:\n"
msgstr ""
-#: objdump.c:3527
+#: objdump.c:3665
#, c-format
msgid "can't use supplied machine %s"
msgstr ""
-#: objdump.c:3548
+#: objdump.c:3686
#, c-format
msgid "can't disassemble for architecture %s\n"
msgstr ""
-#: objdump.c:3637
+#: objdump.c:3775
#, c-format
msgid ""
"\n"
"Section '%s' has an invalid size: %#llx.\n"
msgstr ""
-#: objdump.c:3682
+#: objdump.c:3820
#, c-format
msgid ""
"\n"
"Can't get contents for section '%s'.\n"
msgstr ""
-#: objdump.c:3852
+#: objdump.c:3999
#, c-format
msgid "File %s does not contain any dwarf debug information\n"
msgstr ""
-#: objdump.c:3889
+#: objdump.c:4036
#, c-format
msgid ""
"No %s section present\n"
"\n"
msgstr ""
-#: objdump.c:3896
+#: objdump.c:4043
#, c-format
msgid "reading %s section of %s failed: %s"
msgstr ""
-#: objdump.c:3942
+#: objdump.c:4089
#, c-format
msgid ""
"Contents of %s section:\n"
"\n"
msgstr ""
-#: objdump.c:4076
+#: objdump.c:4223
#, c-format
msgid "architecture: %s, "
msgstr ""
-#: objdump.c:4079
+#: objdump.c:4226
#, c-format
msgid "flags 0x%08x:\n"
msgstr ""
-#: objdump.c:4092
+#: objdump.c:4239
#, c-format
msgid ""
"\n"
"start address 0x"
msgstr ""
-#: objdump.c:4142 readelf.c:15098
+#: objdump.c:4289 readelf.c:15478
#, c-format
msgid "%s: %s"
msgstr ""
-#: objdump.c:4142 readelf.c:15098
+#: objdump.c:4289 readelf.c:15478
msgid "warning"
msgstr ""
-#: objdump.c:4142 readelf.c:15098
+#: objdump.c:4289 readelf.c:15478
msgid "error"
msgstr ""
-#: objdump.c:4148 readelf.c:15103
+#: objdump.c:4295 readelf.c:15483
#, c-format
msgid "CTF error: cannot get CTF errors: `%s'"
msgstr ""
-#: objdump.c:4175 readelf.c:15129
+#: objdump.c:4319 readelf.c:15505
#, c-format
msgid ""
"\n"
"CTF archive member: %s:\n"
msgstr ""
-#: objdump.c:4194
+#: objdump.c:4339
#, c-format
msgid "Iteration failed: %s, %s"
msgstr ""
-#: objdump.c:4231 objdump.c:4241 objdump.c:4256
+#: objdump.c:4377 objdump.c:4384
#, c-format
msgid "CTF open failure: %s"
msgstr ""
-#: objdump.c:4260
+#: objdump.c:4388
#, c-format
msgid "Contents of CTF section %s:\n"
msgstr ""
-#: objdump.c:4265
+#: objdump.c:4395
#, c-format
msgid "CTF archive member open failure: %s"
msgstr ""
-#: objdump.c:4285
+#: objdump.c:4413
#, c-format
msgid "warning: private headers incomplete: %s"
msgstr ""
-#: objdump.c:4303
+#: objdump.c:4431
msgid "option -P/--private not supported by this file"
msgstr ""
-#: objdump.c:4327
+#: objdump.c:4455
#, c-format
msgid "target specific dump '%s' not supported"
msgstr ""
-#: objdump.c:4391
+#: objdump.c:4519
#, c-format
msgid "Contents of section %s:"
msgstr ""
-#: objdump.c:4393
+#: objdump.c:4521
#, c-format
msgid " (Starting at file offset: 0x%lx)"
msgstr ""
-#: objdump.c:4503
+#: objdump.c:4631
#, c-format
msgid "no symbols\n"
msgstr ""
-#: objdump.c:4510
+#: objdump.c:4638
#, c-format
msgid "no information for symbol number %ld\n"
msgstr ""
-#: objdump.c:4513
+#: objdump.c:4641
#, c-format
msgid "could not determine the type of symbol number %ld\n"
msgstr ""
-#: objdump.c:4759
+#: objdump.c:4905
#, c-format
msgid "failed to read relocs in: %s"
msgstr ""
-#: objdump.c:4919
+#: objdump.c:5064
#, c-format
msgid ""
"\n"
"%s: file format %s\n"
msgstr ""
-#: objdump.c:5019
+#: objdump.c:5172
#, c-format
msgid "%s: printing debugging information failed"
msgstr ""
-#: objdump.c:5115
+#: objdump.c:5268
#, c-format
msgid "In archive %s:\n"
msgstr ""
#. Prevent corrupted files from spinning us into an
#. infinite loop. 100 is an arbitrary heuristic.
-#: objdump.c:5120
+#: objdump.c:5273
msgid "Archive nesting is too deep"
msgstr ""
-#: objdump.c:5124
+#: objdump.c:5277
#, c-format
msgid "In nested archive %s:\n"
msgstr ""
-#: objdump.c:5287
+#: objdump.c:5440
msgid "error: the start address should be before the end address"
msgstr ""
-#: objdump.c:5292
+#: objdump.c:5445
msgid "error: the stop address should be after the start address"
msgstr ""
-#: objdump.c:5304
+#: objdump.c:5457
msgid "error: prefix strip must be non-negative"
msgstr ""
-#: objdump.c:5309
+#: objdump.c:5462
msgid "error: instruction width must be positive"
msgstr ""
-#: objdump.c:5330
+#: objdump.c:5483
msgid "unrecognized argument to --visualize-option"
msgstr ""
-#: objdump.c:5340
+#: objdump.c:5493
msgid "unrecognized -E option"
msgstr ""
-#: objdump.c:5351
+#: objdump.c:5504
#, c-format
msgid "unrecognized --endian type `%s'"
msgstr ""
@@ -6662,7 +6853,7 @@ msgstr ""
msgid " time and date: 0x%08x - "
msgstr ""
-#: od-xcoff.c:421 readelf.c:19752
+#: od-xcoff.c:421 readelf.c:20126
#, c-format
msgid "not set\n"
msgstr ""
@@ -7125,371 +7316,382 @@ msgstr ""
msgid "Last stabs entries before error:\n"
msgstr ""
-#: readelf.c:354
+#: readelf.c:385
msgid "<none>"
msgstr ""
-#: readelf.c:355
+#: readelf.c:387
msgid "<no-strings>"
msgstr ""
-#: readelf.c:437
+#: readelf.c:482
#, c-format
msgid "Size truncation prevents reading %s elements of size %s for %s\n"
msgstr ""
-#: readelf.c:447
+#: readelf.c:492
#, c-format
msgid "Size overflow prevents reading %s elements of size %s for %s\n"
msgstr ""
-#: readelf.c:460
+#: readelf.c:505
#, c-format
msgid "Reading %s bytes extends past end of file for %s\n"
msgstr ""
-#: readelf.c:469
+#: readelf.c:514
#, c-format
msgid "Unable to seek to 0x%lx for %s\n"
msgstr ""
-#: readelf.c:483
+#: readelf.c:528
#, c-format
msgid "Out of memory allocating %s bytes for %s\n"
msgstr ""
-#: readelf.c:494
+#: readelf.c:539
#, c-format
msgid "Unable to read in %s bytes of %s\n"
msgstr ""
-#: readelf.c:971
+#: readelf.c:1151
msgid "Don't know about relocations on this machine architecture\n"
msgstr ""
-#: readelf.c:998 readelf.c:1103
+#: readelf.c:1178 readelf.c:1283
msgid "32-bit relocation data"
msgstr ""
-#: readelf.c:1010 readelf.c:1040 readelf.c:1114 readelf.c:1143
+#: readelf.c:1190 readelf.c:1220 readelf.c:1294 readelf.c:1323 readelf.c:1402
msgid "out of memory parsing relocs\n"
msgstr ""
-#: readelf.c:1028 readelf.c:1132
+#: readelf.c:1208 readelf.c:1312
msgid "64-bit relocation data"
msgstr ""
-#: readelf.c:1262
+#: readelf.c:1376
+msgid "RELR relocation data"
+msgstr ""
+
+#: readelf.c:1516
+#, c-format
+msgid " %lu offset\n"
+msgid_plural " %lu offsets\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#: readelf.c:1528
#, c-format
msgid ""
" Offset Info Type Sym. Value Symbol's Name + Addend\n"
msgstr ""
-#: readelf.c:1264
+#: readelf.c:1530
#, c-format
msgid " Offset Info Type Sym.Value Sym. Name + Addend\n"
msgstr ""
-#: readelf.c:1269
+#: readelf.c:1535
#, c-format
msgid " Offset Info Type Sym. Value Symbol's Name\n"
msgstr ""
-#: readelf.c:1271
+#: readelf.c:1537
#, c-format
msgid " Offset Info Type Sym.Value Sym. Name\n"
msgstr ""
-#: readelf.c:1279
+#: readelf.c:1545
#, c-format
msgid ""
" Offset Info Type Symbol's Value "
"Symbol's Name + Addend\n"
msgstr ""
-#: readelf.c:1281
+#: readelf.c:1547
#, c-format
msgid ""
" Offset Info Type Sym. Value Sym. Name + "
"Addend\n"
msgstr ""
-#: readelf.c:1286
+#: readelf.c:1552
#, c-format
msgid ""
" Offset Info Type Symbol's Value "
"Symbol's Name\n"
msgstr ""
-#: readelf.c:1288
+#: readelf.c:1554
#, c-format
msgid ""
" Offset Info Type Sym. Value Sym. Name\n"
msgstr ""
-#: readelf.c:1659 readelf.c:1852 readelf.c:1860
+#: readelf.c:1930 readelf.c:2125 readelf.c:2133
#, c-format
msgid "unrecognized: %-7lx"
msgstr ""
-#: readelf.c:1685
+#: readelf.c:1956
#, c-format
msgid "<unknown addend: %lx>"
msgstr ""
-#: readelf.c:1694
+#: readelf.c:1965
#, c-format
msgid " bad symbol index: %08lx in reloc\n"
msgstr ""
-#: readelf.c:1797
+#: readelf.c:2070
#, c-format
msgid "<string table index: %3ld>"
msgstr ""
-#: readelf.c:1800
+#: readelf.c:2073
#, c-format
msgid "<corrupt string table index: %3ld>\n"
msgstr ""
-#: readelf.c:2305
+#: readelf.c:2595
#, c-format
msgid "Processor Specific: %lx"
msgstr ""
-#: readelf.c:2332
+#: readelf.c:2622
#, c-format
msgid "Operating System specific: %lx"
msgstr ""
-#: readelf.c:2336 readelf.c:4259
+#: readelf.c:2626 readelf.c:4563
#, c-format
msgid "<unknown>: %lx"
msgstr ""
-#: readelf.c:2436
+#: readelf.c:2726
msgid "NONE (None)"
msgstr ""
-#: readelf.c:2437
+#: readelf.c:2727
msgid "REL (Relocatable file)"
msgstr ""
-#: readelf.c:2438
+#: readelf.c:2728
msgid "EXEC (Executable file)"
msgstr ""
-#: readelf.c:2441
+#: readelf.c:2731
msgid "DYN (Position-Independent Executable file)"
msgstr ""
-#: readelf.c:2443
+#: readelf.c:2733
msgid "DYN (Shared object file)"
msgstr ""
-#: readelf.c:2444
+#: readelf.c:2734
msgid "CORE (Core file)"
msgstr ""
-#: readelf.c:2448
+#: readelf.c:2738
#, c-format
msgid "Processor Specific: (%x)"
msgstr ""
-#: readelf.c:2450
+#: readelf.c:2740
#, c-format
msgid "OS Specific: (%x)"
msgstr ""
-#: readelf.c:2452
+#: readelf.c:2742
#, c-format
msgid "<unknown>: %x"
msgstr ""
#. Please keep this switch table sorted by increasing EM_ value.
#. 0
-#: readelf.c:2466 readelf.c:17641 readelf.c:17652
+#: readelf.c:2756 readelf.c:18010 readelf.c:18021
msgid "None"
msgstr ""
-#: readelf.c:2714
+#: readelf.c:3004
#, c-format
msgid "<unknown>: 0x%x"
msgstr ""
-#: readelf.c:3000
+#: readelf.c:3290
msgid ", <unknown>"
msgstr ""
-#: readelf.c:3369 readelf.c:10414
+#: readelf.c:3659 readelf.c:10755
msgid "unknown"
msgstr ""
-#: readelf.c:3370
+#: readelf.c:3660
msgid "unknown mac"
msgstr ""
-#: readelf.c:3438
+#: readelf.c:3728
msgid ", <unknown MeP cpu type>"
msgstr ""
-#: readelf.c:3448
+#: readelf.c:3738
msgid "<unknown MeP copro type>"
msgstr ""
-#: readelf.c:3459
+#: readelf.c:3749
#, c-format
msgid ", unknown flags bits: %#x"
msgstr ""
-#: readelf.c:3468
+#: readelf.c:3758
msgid ", relocatable"
msgstr ""
-#: readelf.c:3471
+#: readelf.c:3761
msgid ", relocatable-lib"
msgstr ""
-#: readelf.c:3553
+#: readelf.c:3843
msgid ", unknown v850 architecture variant"
msgstr ""
-#: readelf.c:3621
+#: readelf.c:3911
msgid ", unknown CPU"
msgstr ""
-#: readelf.c:3636
+#: readelf.c:3926
msgid ", unknown ABI"
msgstr ""
-#: readelf.c:3661 readelf.c:3732
+#: readelf.c:3951 readelf.c:4022
msgid ", unknown ISA"
msgstr ""
-#: readelf.c:3842
+#: readelf.c:4132
#, c-format
msgid "Unrecognised IA64 VMS Command Code: %x\n"
msgstr ""
-#: readelf.c:3908
+#: readelf.c:4198
msgid ": architecture variant: "
msgstr ""
-#: readelf.c:3927
+#: readelf.c:4217
msgid ": unknown"
msgstr ""
-#: readelf.c:3931
+#: readelf.c:4221
msgid ": unknown extra flag bits also present"
msgstr ""
-#: readelf.c:3945
+#: readelf.c:4235
msgid ", unknown"
msgstr ""
-#: readelf.c:3997
+#: readelf.c:4301
msgid "Standalone App"
msgstr ""
-#: readelf.c:4006
+#: readelf.c:4310
msgid "Bare-metal C6000"
msgstr ""
-#: readelf.c:4016 readelf.c:5206 readelf.c:5222 readelf.c:19065 readelf.c:19165
-#: readelf.c:19196 readelf.c:19233 readelf.c:19294 readelf.c:19321
-#: readelf.c:19343
+#: readelf.c:4320 readelf.c:5535 readelf.c:5551 readelf.c:19439 readelf.c:19539
+#: readelf.c:19570 readelf.c:19607 readelf.c:19668 readelf.c:19695
+#: readelf.c:19717
#, c-format
msgid "<unknown: %x>"
msgstr ""
#. This message is probably going to be displayed in a 15
#. character wide field, so put the hex value first.
-#: readelf.c:4628
+#: readelf.c:4933
#, c-format
msgid "%08x: <unknown>"
msgstr ""
-#: readelf.c:4715
+#: readelf.c:5021
#, c-format
msgid "Usage: readelf <option(s)> elf-file(s)\n"
msgstr ""
-#: readelf.c:4716
+#: readelf.c:5022
#, c-format
msgid " Display information about the contents of ELF format files\n"
msgstr ""
-#: readelf.c:4717
+#: readelf.c:5023
#, c-format
msgid " Options are:\n"
msgstr ""
-#: readelf.c:4718
+#: readelf.c:5024
#, c-format
msgid " -a --all Equivalent to: -h -l -S -s -r -d -V -A -I\n"
msgstr ""
-#: readelf.c:4720
+#: readelf.c:5026
#, c-format
msgid " -h --file-header Display the ELF file header\n"
msgstr ""
-#: readelf.c:4722
+#: readelf.c:5028
#, c-format
msgid " -l --program-headers Display the program headers\n"
msgstr ""
-#: readelf.c:4724
+#: readelf.c:5030
#, c-format
msgid " --segments An alias for --program-headers\n"
msgstr ""
-#: readelf.c:4726
+#: readelf.c:5032
#, c-format
msgid " -S --section-headers Display the sections' header\n"
msgstr ""
-#: readelf.c:4728
+#: readelf.c:5034
#, c-format
msgid " --sections An alias for --section-headers\n"
msgstr ""
-#: readelf.c:4730
+#: readelf.c:5036
#, c-format
msgid " -g --section-groups Display the section groups\n"
msgstr ""
-#: readelf.c:4732
+#: readelf.c:5038
#, c-format
msgid " -t --section-details Display the section details\n"
msgstr ""
-#: readelf.c:4734
+#: readelf.c:5040
#, c-format
msgid " -e --headers Equivalent to: -h -l -S\n"
msgstr ""
-#: readelf.c:4736
+#: readelf.c:5042
#, c-format
msgid " -s --syms Display the symbol table\n"
msgstr ""
-#: readelf.c:4738
+#: readelf.c:5044
#, c-format
msgid " --symbols An alias for --syms\n"
msgstr ""
-#: readelf.c:4740
+#: readelf.c:5046
#, c-format
msgid " --dyn-syms Display the dynamic symbol table\n"
msgstr ""
-#: readelf.c:4742
+#: readelf.c:5048
#, c-format
msgid " --lto-syms Display LTO symbol tables\n"
msgstr ""
-#: readelf.c:4744
+#: readelf.c:5050
#, c-format
msgid ""
" --sym-base=[0|8|10|16] \n"
@@ -7497,86 +7699,92 @@ msgid ""
" mixed (the default), octal, decimal, hexadecimal.\n"
msgstr ""
-#: readelf.c:4748
+#: readelf.c:5054
#, c-format
-msgid ""
-" -C --demangle[=STYLE] Decode low-level symbol names into user-level "
-"names\n"
-" The STYLE, if specified, can be `auto' (the "
-"default),\n"
-" `gnu', `lucid', `arm', `hp', `edg', `gnu-v3', "
-"`java'\n"
-" or `gnat'\n"
+msgid " -C --demangle[=STYLE] Decode mangled/processed symbol names\n"
msgstr ""
-#: readelf.c:4753
+#: readelf.c:5058
#, c-format
msgid ""
" --no-demangle Do not demangle low-level symbol names. (default)\n"
msgstr ""
-#: readelf.c:4755
+#: readelf.c:5060
#, c-format
msgid ""
" --recurse-limit Enable a demangling recursion limit. (default)\n"
msgstr ""
-#: readelf.c:4757
+#: readelf.c:5062
#, c-format
msgid " --no-recurse-limit Disable a demangling recursion limit\n"
msgstr ""
-#: readelf.c:4759
+#: readelf.c:5064
+#, c-format
+msgid ""
+" -U[dlexhi] --unicode=[default|locale|escape|hex|highlight|invalid]\n"
+" Display unicode characters as determined by the "
+"current locale\n"
+" (default), escape sequences, \"<hex sequences>\", "
+"highlighted\n"
+" escape sequences, or treat them as invalid and "
+"display as\n"
+" \"{hex sequences}\"\n"
+msgstr ""
+
+#: readelf.c:5070
#, c-format
msgid " -n --notes Display the core notes (if present)\n"
msgstr ""
-#: readelf.c:4761
+#: readelf.c:5072
#, c-format
msgid " -r --relocs Display the relocations (if present)\n"
msgstr ""
-#: readelf.c:4763
+#: readelf.c:5074
#, c-format
msgid " -u --unwind Display the unwind info (if present)\n"
msgstr ""
-#: readelf.c:4765
+#: readelf.c:5076
#, c-format
msgid " -d --dynamic Display the dynamic section (if present)\n"
msgstr ""
-#: readelf.c:4767
+#: readelf.c:5078
#, c-format
msgid " -V --version-info Display the version sections (if present)\n"
msgstr ""
-#: readelf.c:4769
+#: readelf.c:5080
#, c-format
msgid ""
" -A --arch-specific Display architecture specific information (if any)\n"
msgstr ""
-#: readelf.c:4771
+#: readelf.c:5082
#, c-format
msgid " -c --archive-index Display the symbol/file index in an archive\n"
msgstr ""
-#: readelf.c:4773
+#: readelf.c:5084
#, c-format
msgid ""
" -D --use-dynamic Use the dynamic section info when displaying "
"symbols\n"
msgstr ""
-#: readelf.c:4775
+#: readelf.c:5086
#, c-format
msgid ""
" -L --lint|--enable-checks\n"
" Display warning messages for possible problems\n"
msgstr ""
-#: readelf.c:4778
+#: readelf.c:5089
#, c-format
msgid ""
" -x --hex-dump=<number|name>\n"
@@ -7584,7 +7792,7 @@ msgid ""
"bytes\n"
msgstr ""
-#: readelf.c:4781
+#: readelf.c:5092
#, c-format
msgid ""
" -p --string-dump=<number|name>\n"
@@ -7592,7 +7800,7 @@ msgid ""
"strings\n"
msgstr ""
-#: readelf.c:4784
+#: readelf.c:5095
#, c-format
msgid ""
" -R --relocated-dump=<number|name>\n"
@@ -7600,12 +7808,12 @@ msgid ""
"name>\n"
msgstr ""
-#: readelf.c:4787
+#: readelf.c:5098
#, c-format
msgid " -z --decompress Decompress section before dumping it\n"
msgstr ""
-#: readelf.c:4789
+#: readelf.c:5100
#, c-format
msgid ""
" -w --debug-dump[a/=abbrev, A/=addr, r/=aranges, c/=cu_index, L/"
@@ -7620,7 +7828,7 @@ msgid ""
" Display the contents of DWARF debug sections\n"
msgstr ""
-#: readelf.c:4796
+#: readelf.c:5107
#, c-format
msgid ""
" -wk --debug-dump=links Display the contents of sections that link to "
@@ -7628,7 +7836,7 @@ msgid ""
" debuginfo files\n"
msgstr ""
-#: readelf.c:4799
+#: readelf.c:5110
#, c-format
msgid ""
" -P --process-links Display the contents of non-debug sections in "
@@ -7636,7 +7844,7 @@ msgid ""
" debuginfo files. (Implies -wK)\n"
msgstr ""
-#: readelf.c:4803
+#: readelf.c:5114
#, c-format
msgid ""
" -wK --debug-dump=follow-links\n"
@@ -7644,21 +7852,21 @@ msgid ""
"(default)\n"
msgstr ""
-#: readelf.c:4806
+#: readelf.c:5117
#, c-format
msgid ""
" -wN --debug-dump=no-follow-links\n"
" Do not follow links to separate debug info files\n"
msgstr ""
-#: readelf.c:4810
+#: readelf.c:5121
#, c-format
msgid ""
" -wK --debug-dump=follow-links\n"
" Follow links to separate debug info files\n"
msgstr ""
-#: readelf.c:4813
+#: readelf.c:5124
#, c-format
msgid ""
" -wN --debug-dump=no-follow-links\n"
@@ -7666,29 +7874,28 @@ msgid ""
" (default)\n"
msgstr ""
-#: readelf.c:4818
+#: readelf.c:5129
#, c-format
msgid " --dwarf-depth=N Do not display DIEs at depth N or greater\n"
msgstr ""
-#: readelf.c:4820
+#: readelf.c:5131
#, c-format
msgid " --dwarf-start=N Display DIEs starting at offset N\n"
msgstr ""
-#: readelf.c:4823
+#: readelf.c:5134
#, c-format
msgid " --ctf=<number|name> Display CTF info from section <number|name>\n"
msgstr ""
-#: readelf.c:4825
+#: readelf.c:5136
#, c-format
msgid ""
-" --ctf-parent=<number|name>\n"
-" Use section <number|name> as the CTF parent\n"
+" --ctf-parent=<name> Use CTF archive member <name> as the CTF parent\n"
msgstr ""
-#: readelf.c:4828
+#: readelf.c:5138
#, c-format
msgid ""
" --ctf-symbols=<number|name>\n"
@@ -7696,7 +7903,7 @@ msgid ""
"symtab\n"
msgstr ""
-#: readelf.c:4831
+#: readelf.c:5141
#, c-format
msgid ""
" --ctf-strings=<number|name>\n"
@@ -7704,625 +7911,629 @@ msgid ""
"strtab\n"
msgstr ""
-#: readelf.c:4837
+#: readelf.c:5147
#, c-format
msgid ""
" -i --instruction-dump=<number|name>\n"
" Disassemble the contents of section <number|name>\n"
msgstr ""
-#: readelf.c:4841
+#: readelf.c:5151
#, c-format
msgid " -I --histogram Display histogram of bucket list lengths\n"
msgstr ""
-#: readelf.c:4843
+#: readelf.c:5153
#, c-format
msgid " -W --wide Allow output width to exceed 80 characters\n"
msgstr ""
-#: readelf.c:4845
+#: readelf.c:5155
#, c-format
msgid ""
" -T --silent-truncation If a symbol name is truncated, do not add [...] "
"suffix\n"
msgstr ""
-#: readelf.c:4847
+#: readelf.c:5157
#, c-format
msgid " @<file> Read options from <file>\n"
msgstr ""
-#: readelf.c:4849
+#: readelf.c:5159
#, c-format
msgid " -H --help Display this information\n"
msgstr ""
-#: readelf.c:4851
+#: readelf.c:5161
#, c-format
msgid " -v --version Display the version number of readelf\n"
msgstr ""
-#: readelf.c:4877 readelf.c:4908 readelf.c:4912
+#: readelf.c:5187 readelf.c:5218 readelf.c:5222
msgid "Out of memory allocating dump request table.\n"
msgstr ""
-#: readelf.c:5168
+#: readelf.c:5458
+msgid "Missing arg to -U/--unicode"
+msgstr ""
+
+#: readelf.c:5497
#, c-format
msgid "Invalid option '-%c'\n"
msgstr ""
-#: readelf.c:5202 readelf.c:5218 readelf.c:11482
+#: readelf.c:5531 readelf.c:5547 readelf.c:11828
msgid "none"
msgstr ""
-#: readelf.c:5219
+#: readelf.c:5548
msgid "2's complement, little endian"
msgstr ""
-#: readelf.c:5220
+#: readelf.c:5549
msgid "2's complement, big endian"
msgstr ""
-#: readelf.c:5240
+#: readelf.c:5569
msgid "Not an ELF file - it has the wrong magic bytes at the start\n"
msgstr ""
-#: readelf.c:5252
+#: readelf.c:5581
#, c-format
msgid "ELF Header in linked file '%s':\n"
msgstr ""
-#: readelf.c:5254
+#: readelf.c:5583
#, c-format
msgid "ELF Header:\n"
msgstr ""
-#: readelf.c:5255
+#: readelf.c:5584
#, c-format
msgid " Magic: "
msgstr ""
-#: readelf.c:5259
+#: readelf.c:5588
#, c-format
msgid " Class: %s\n"
msgstr ""
-#: readelf.c:5261
+#: readelf.c:5590
#, c-format
msgid " Data: %s\n"
msgstr ""
-#: readelf.c:5263
+#: readelf.c:5592
#, c-format
msgid " Version: %d%s\n"
msgstr ""
-#: readelf.c:5266
+#: readelf.c:5595
msgid " (current)"
msgstr ""
-#: readelf.c:5268
+#: readelf.c:5597
msgid " <unknown>"
msgstr ""
-#: readelf.c:5270
+#: readelf.c:5599
#, c-format
msgid " OS/ABI: %s\n"
msgstr ""
-#: readelf.c:5272
+#: readelf.c:5601
#, c-format
msgid " ABI Version: %d\n"
msgstr ""
-#: readelf.c:5274
+#: readelf.c:5603
#, c-format
msgid " Type: %s\n"
msgstr ""
-#: readelf.c:5276
+#: readelf.c:5605
#, c-format
msgid " Machine: %s\n"
msgstr ""
-#: readelf.c:5278
+#: readelf.c:5607
#, c-format
msgid " Version: 0x%lx\n"
msgstr ""
-#: readelf.c:5281
+#: readelf.c:5610
#, c-format
msgid " Entry point address: "
msgstr ""
-#: readelf.c:5283
+#: readelf.c:5612
#, c-format
msgid ""
"\n"
" Start of program headers: "
msgstr ""
-#: readelf.c:5285
+#: readelf.c:5614
#, c-format
msgid ""
" (bytes into file)\n"
" Start of section headers: "
msgstr ""
-#: readelf.c:5287
+#: readelf.c:5616
#, c-format
msgid " (bytes into file)\n"
msgstr ""
-#: readelf.c:5289
+#: readelf.c:5618
#, c-format
msgid " Flags: 0x%lx%s\n"
msgstr ""
-#: readelf.c:5292
+#: readelf.c:5621
#, c-format
msgid " Size of this header: %u (bytes)\n"
msgstr ""
-#: readelf.c:5294
+#: readelf.c:5623
#, c-format
msgid " Size of program headers: %u (bytes)\n"
msgstr ""
-#: readelf.c:5296
+#: readelf.c:5625
#, c-format
msgid " Number of program headers: %u"
msgstr ""
-#: readelf.c:5306
+#: readelf.c:5635
#, c-format
msgid " Size of section headers: %u (bytes)\n"
msgstr ""
-#: readelf.c:5308
+#: readelf.c:5637
#, c-format
msgid " Number of section headers: %u"
msgstr ""
-#: readelf.c:5316
+#: readelf.c:5645
#, c-format
msgid " Section header string table index: %u"
msgstr ""
-#: readelf.c:5328
+#: readelf.c:5657
#, c-format
msgid " <corrupt: out of range>"
msgstr ""
-#: readelf.c:5367 readelf.c:5414
+#: readelf.c:5696 readelf.c:5743
msgid ""
"The e_phentsize field in the ELF header is less than the size of an ELF "
"program header\n"
msgstr ""
-#: readelf.c:5371 readelf.c:5418
+#: readelf.c:5700 readelf.c:5747
msgid ""
"The e_phentsize field in the ELF header is larger than the size of an ELF "
"program header\n"
msgstr ""
-#: readelf.c:5374 readelf.c:5421
+#: readelf.c:5703 readelf.c:5750
msgid "program headers"
msgstr ""
-#: readelf.c:5460
+#: readelf.c:5789
#, c-format
msgid "Too many program headers - %#x - the file is not that big\n"
msgstr ""
-#: readelf.c:5469
+#: readelf.c:5798
#, c-format
msgid "Out of memory reading %u program headers\n"
msgstr ""
-#: readelf.c:5499
+#: readelf.c:5828
msgid ""
"possibly corrupt ELF header - it has a non-zero program header offset, but "
"no program headers\n"
msgstr ""
-#: readelf.c:5504
+#: readelf.c:5833
#, c-format
msgid ""
"\n"
"There are no program headers in linked file '%s'.\n"
msgstr ""
-#: readelf.c:5507
+#: readelf.c:5836
#, c-format
msgid ""
"\n"
"There are no program headers in this file.\n"
msgstr ""
-#: readelf.c:5518
+#: readelf.c:5847
#, c-format
msgid ""
"\n"
"Elf file type is %s\n"
msgstr ""
-#: readelf.c:5519
+#: readelf.c:5848
#, c-format
msgid "Entry point 0x%s\n"
msgstr ""
-#: readelf.c:5520
+#: readelf.c:5849
#, c-format
msgid "There is %d program header, starting at offset %s\n"
msgid_plural "There are %d program headers, starting at offset %s\n"
msgstr[0] ""
msgstr[1] ""
-#: readelf.c:5533 readelf.c:5535
+#: readelf.c:5862 readelf.c:5864
#, c-format
msgid ""
"\n"
"Program Headers:\n"
msgstr ""
-#: readelf.c:5539
+#: readelf.c:5868
#, c-format
msgid ""
" Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align\n"
msgstr ""
-#: readelf.c:5542
+#: readelf.c:5871
#, c-format
msgid ""
" Type Offset VirtAddr PhysAddr FileSiz "
"MemSiz Flg Align\n"
msgstr ""
-#: readelf.c:5546
+#: readelf.c:5875
#, c-format
msgid " Type Offset VirtAddr PhysAddr\n"
msgstr ""
-#: readelf.c:5548
+#: readelf.c:5877
#, c-format
msgid " FileSiz MemSiz Flags Align\n"
msgstr ""
-#: readelf.c:5646
+#: readelf.c:5975
msgid "LOAD segments must be sorted in order of increasing VirtAddr\n"
msgstr ""
-#: readelf.c:5649
+#: readelf.c:5978
msgid "the segment's file size is larger than its memory size\n"
msgstr ""
-#: readelf.c:5656
+#: readelf.c:5985
msgid "the PHDR segment must occur before any LOAD segment\n"
msgstr ""
-#: readelf.c:5674
+#: readelf.c:6003
msgid "the PHDR segment is not covered by a LOAD segment\n"
msgstr ""
-#: readelf.c:5680
+#: readelf.c:6009
msgid "more than one dynamic segment\n"
msgstr ""
-#: readelf.c:5699
+#: readelf.c:6028
msgid "no .dynamic section in the dynamic segment\n"
msgstr ""
-#: readelf.c:5718
+#: readelf.c:6047
msgid "the .dynamic section is not the same as the dynamic segment\n"
msgstr ""
-#: readelf.c:5729
+#: readelf.c:6058
msgid "the dynamic segment offset + size exceeds the size of the file\n"
msgstr ""
-#: readelf.c:5742
+#: readelf.c:6071
msgid "Unable to find program interpreter name\n"
msgstr ""
-#: readelf.c:5753
+#: readelf.c:6082
#, c-format
msgid " [Requesting program interpreter: %s]\n"
msgstr ""
-#: readelf.c:5764
+#: readelf.c:6093
#, c-format
msgid ""
"\n"
" Section to Segment mapping:\n"
msgstr ""
-#: readelf.c:5765
+#: readelf.c:6094
#, c-format
msgid " Segment Sections...\n"
msgstr ""
-#: readelf.c:5807 readelf.c:10772
+#: readelf.c:6136 readelf.c:11113
msgid "Cannot interpret virtual addresses without program headers.\n"
msgstr ""
-#: readelf.c:5823
+#: readelf.c:6152
#, c-format
msgid "Virtual address 0x%lx not located in any PT_LOAD segment.\n"
msgstr ""
-#: readelf.c:5848 readelf.c:5912
+#: readelf.c:6177 readelf.c:6241
msgid ""
"The e_shentsize field in the ELF header is less than the size of an ELF "
"section header\n"
msgstr ""
-#: readelf.c:5852 readelf.c:5917
+#: readelf.c:6181 readelf.c:6246
msgid ""
"The e_shentsize field in the ELF header is larger than the size of an ELF "
"section header\n"
msgstr ""
-#: readelf.c:5856 readelf.c:5922
+#: readelf.c:6185 readelf.c:6251
msgid "section headers"
msgstr ""
-#: readelf.c:5865 readelf.c:5931
+#: readelf.c:6194 readelf.c:6260
#, c-format
msgid "Out of memory reading %u section headers\n"
msgstr ""
-#: readelf.c:5885 readelf.c:5951
+#: readelf.c:6214 readelf.c:6280
#, c-format
msgid "Section %u has an out of range sh_link value of %u\n"
msgstr ""
-#: readelf.c:5887 readelf.c:5953
+#: readelf.c:6216 readelf.c:6282
#, c-format
msgid "Section %u has an out of range sh_info value of %u\n"
msgstr ""
-#: readelf.c:5995 readelf.c:6112
+#: readelf.c:6324 readelf.c:6441
#, c-format
msgid "Section %s has an invalid sh_entsize of 0x%lx\n"
msgstr ""
-#: readelf.c:6003 readelf.c:6120 readelf.c:12771
+#: readelf.c:6332 readelf.c:6449 readelf.c:13146
#, c-format
msgid "Section %s has an invalid sh_size of 0x%lx\n"
msgstr ""
-#: readelf.c:6013 readelf.c:6130
+#: readelf.c:6342 readelf.c:6459
#, c-format
msgid ""
"Size (0x%lx) of section %s is not a multiple of its sh_entsize (0x%lx)\n"
msgstr ""
-#: readelf.c:6021 readelf.c:6138 readelf.c:15200
+#: readelf.c:6350 readelf.c:6467 readelf.c:15575
msgid "symbols"
msgstr ""
-#: readelf.c:6033 readelf.c:6150
+#: readelf.c:6362 readelf.c:6479
msgid ""
"Multiple symbol table index sections associated with the same symbol "
"section\n"
msgstr ""
-#: readelf.c:6040 readelf.c:6157
+#: readelf.c:6369 readelf.c:6486
msgid "symbol table section indices"
msgstr ""
-#: readelf.c:6047 readelf.c:6164
+#: readelf.c:6376 readelf.c:6493
#, c-format
msgid "Index section %s has an sh_size of 0x%lx - expected 0x%lx\n"
msgstr ""
-#: readelf.c:6059 readelf.c:6176
+#: readelf.c:6388 readelf.c:6505
#, c-format
msgid "Out of memory reading %lu symbols\n"
msgstr ""
-#: readelf.c:6385 readelf.c:6482 readelf.c:6500 readelf.c:6518
+#: readelf.c:6714 readelf.c:6811 readelf.c:6829 readelf.c:6847
msgid "Internal error: not enough buffer room for section flag info"
msgstr ""
-#: readelf.c:6525
+#: readelf.c:6854
#, c-format
msgid "UNKNOWN (%*.*lx)"
msgstr ""
-#: readelf.c:6544 readelf.c:6559
+#: readelf.c:6873 readelf.c:6888
msgid "Compressed section is too small even for a compression header\n"
msgstr ""
-#: readelf.c:6581
+#: readelf.c:6910
msgid ""
"possibly corrupt ELF file header - it has a non-zero section header offset, "
"but no section headers\n"
msgstr ""
-#: readelf.c:6586
+#: readelf.c:6915
#, c-format
msgid ""
"\n"
"There are no sections in this file.\n"
msgstr ""
-#: readelf.c:6594 readelf.c:20851
+#: readelf.c:6923 readelf.c:21262
#, c-format
msgid "In linked file '%s': "
msgstr ""
-#: readelf.c:6596
+#: readelf.c:6925
#, c-format
msgid "There is %d section header, starting at offset 0x%lx:\n"
msgid_plural "There are %d section headers, starting at offset 0x%lx:\n"
msgstr[0] ""
msgstr[1] ""
-#: readelf.c:6618 readelf.c:7291 readelf.c:7492 readelf.c:13058 readelf.c:15589
+#: readelf.c:6947 readelf.c:7624 readelf.c:7826 readelf.c:13434 readelf.c:15933
msgid "string table"
msgstr ""
#. Note: coded this way so that there is a single string for translation.
-#: readelf.c:6684
+#: readelf.c:7013
#, c-format
msgid "Section %d has invalid sh_entsize of %s\n"
msgstr ""
-#: readelf.c:6685
+#: readelf.c:7014
#, c-format
msgid "(Using the expected size of %u for the rest of this dump)\n"
msgstr ""
-#: readelf.c:6709
+#: readelf.c:7038
msgid "File contains multiple dynamic symbol tables\n"
msgstr ""
-#: readelf.c:6724
+#: readelf.c:7053
msgid "File contains multiple dynamic string tables\n"
msgstr ""
-#: readelf.c:6730
+#: readelf.c:7059
msgid "dynamic strings"
msgstr ""
-#: readelf.c:6758 readelf.c:6764
+#: readelf.c:7087 readelf.c:7093
#, c-format
msgid "Section '%s': zero-sized relocation section\n"
msgstr ""
-#: readelf.c:6773
+#: readelf.c:7106
#, c-format
msgid "Section '%s': has a size of zero - is this intended ?\n"
msgstr ""
-#: readelf.c:6857
+#: readelf.c:7190
#, c-format
msgid ""
"\n"
"Section Headers in linked file '%s':\n"
msgstr ""
-#: readelf.c:6859
+#: readelf.c:7192
#, c-format
msgid ""
"\n"
"Section Headers:\n"
msgstr ""
-#: readelf.c:6861
+#: readelf.c:7194
#, c-format
msgid ""
"\n"
"Section Header:\n"
msgstr ""
-#: readelf.c:6867 readelf.c:6878 readelf.c:6889
+#: readelf.c:7200 readelf.c:7211 readelf.c:7222
#, c-format
msgid " [Nr] Name\n"
msgstr ""
-#: readelf.c:6868
+#: readelf.c:7201
#, c-format
msgid " Type Addr Off Size ES Lk Inf Al\n"
msgstr ""
-#: readelf.c:6872
+#: readelf.c:7205
#, c-format
msgid ""
" [Nr] Name Type Addr Off Size ES Flg Lk "
"Inf Al\n"
msgstr ""
-#: readelf.c:6879
+#: readelf.c:7212
#, c-format
msgid " Type Address Off Size ES Lk Inf Al\n"
msgstr ""
-#: readelf.c:6883
+#: readelf.c:7216
#, c-format
msgid ""
" [Nr] Name Type Address Off Size ES "
"Flg Lk Inf Al\n"
msgstr ""
-#: readelf.c:6890
+#: readelf.c:7223
#, c-format
msgid " Type Address Offset Link\n"
msgstr ""
-#: readelf.c:6891
+#: readelf.c:7224
#, c-format
msgid " Size EntSize Info Align\n"
msgstr ""
-#: readelf.c:6895
+#: readelf.c:7228
#, c-format
msgid " [Nr] Name Type Address Offset\n"
msgstr ""
-#: readelf.c:6896
+#: readelf.c:7229
#, c-format
msgid " Size EntSize Flags Link Info Align\n"
msgstr ""
-#: readelf.c:6901
+#: readelf.c:7234
#, c-format
msgid " Flags\n"
msgstr ""
-#: readelf.c:6930
+#: readelf.c:7263
#, c-format
msgid "[%2u]: Link field (%u) should index a symtab section.\n"
msgstr ""
-#: readelf.c:6943
+#: readelf.c:7276
#, c-format
msgid "[%2u]: Link field (%u) should index a string section.\n"
msgstr ""
-#: readelf.c:6951 readelf.c:6962
+#: readelf.c:7284 readelf.c:7295
#, c-format
msgid "[%2u]: Unexpected value (%u) in link field.\n"
msgstr ""
-#: readelf.c:6989
+#: readelf.c:7322
#, c-format
msgid "[%2u]: Info field (%u) should index a relocatable section.\n"
msgstr ""
-#: readelf.c:7000 readelf.c:7027
+#: readelf.c:7333 readelf.c:7360
#, c-format
msgid "[%2u]: Unexpected value (%u) in info field.\n"
msgstr ""
-#: readelf.c:7022
+#: readelf.c:7355
#, c-format
msgid "[%2u]: Expected link to another section in info field"
msgstr ""
-#: readelf.c:7037
+#: readelf.c:7370
#, c-format
msgid "Size of section %u is larger than the entire file!\n"
msgstr ""
-#: readelf.c:7106
+#: readelf.c:7439
#, c-format
msgid "section %u: sh_link value of %u is larger than the number of sections\n"
msgstr ""
-#: readelf.c:7207
+#: readelf.c:7540
msgid "compression header"
msgstr ""
-#: readelf.c:7212
+#: readelf.c:7545
#, c-format
msgid " [<corrupt>]\n"
msgstr ""
-#: readelf.c:7218
+#: readelf.c:7551
#, c-format
msgid " [<unknown>: 0x%x], "
msgstr ""
@@ -8330,7 +8541,7 @@ msgstr ""
#. The ordering of the letters shown here matches the ordering of the
#. corresponding SHF_xxx values, and hence the order in which these
#. letters will be displayed to the user.
-#: readelf.c:7233
+#: readelf.c:7566
#, c-format
msgid ""
"Key to Flags:\n"
@@ -8340,345 +8551,345 @@ msgid ""
" "
msgstr ""
-#: readelf.c:7241
+#: readelf.c:7574
#, c-format
msgid "R (retain), "
msgstr ""
-#: readelf.c:7244
+#: readelf.c:7577
#, c-format
msgid "D (mbind), "
msgstr ""
-#: readelf.c:7252
+#: readelf.c:7585
#, c-format
msgid "l (large), "
msgstr ""
-#: readelf.c:7254
+#: readelf.c:7587
#, c-format
msgid "y (purecode), "
msgstr ""
-#: readelf.c:7256
+#: readelf.c:7589
#, c-format
msgid "v (VLE), "
msgstr ""
-#: readelf.c:7281
+#: readelf.c:7614
msgid "Bad sh_link in symbol table section\n"
msgstr ""
-#: readelf.c:7316
+#: readelf.c:7649
msgid "<OS specific>"
msgstr ""
-#: readelf.c:7317
+#: readelf.c:7650
msgid "<PROC specific>"
msgstr ""
-#: readelf.c:7346
+#: readelf.c:7679
#, c-format
msgid ""
"\n"
"There are no sections group in linked file '%s'.\n"
msgstr ""
-#: readelf.c:7349 readelf.c:7388
+#: readelf.c:7682 readelf.c:7721
#, c-format
msgid ""
"\n"
"There are no section groups in this file.\n"
msgstr ""
-#: readelf.c:7356
+#: readelf.c:7689
msgid "Section headers are not available!\n"
msgstr ""
-#: readelf.c:7367
+#: readelf.c:7700
#, c-format
msgid "Out of memory reading %u section group headers\n"
msgstr ""
-#: readelf.c:7385
+#: readelf.c:7718
#, c-format
msgid ""
"\n"
"There are no section groups in linked file '%s'.\n"
msgstr ""
-#: readelf.c:7399
+#: readelf.c:7732
#, c-format
msgid "Out of memory reading %lu groups\n"
msgstr ""
-#: readelf.c:7412
+#: readelf.c:7745
#, c-format
msgid "Section groups in linked file '%s'\n"
msgstr ""
-#: readelf.c:7433
+#: readelf.c:7766
#, c-format
msgid "Bad sh_link in group section `%s'\n"
msgstr ""
-#: readelf.c:7446
+#: readelf.c:7779
#, c-format
msgid "Corrupt header in group section `%s'\n"
msgstr ""
-#: readelf.c:7452 readelf.c:7463
+#: readelf.c:7785 readelf.c:7796
#, c-format
msgid "Bad sh_info in group section `%s'\n"
msgstr ""
-#: readelf.c:7502
+#: readelf.c:7836
#, c-format
msgid ""
"Section %s has sh_entsize (0x%lx) which is larger than its size (0x%lx)\n"
msgstr ""
-#: readelf.c:7511
+#: readelf.c:7845
msgid "section data"
msgstr ""
-#: readelf.c:7522
+#: readelf.c:7856
#, c-format
msgid ""
"\n"
"%sgroup section [%5u] `%s' [%s] contains %u sections:\n"
msgstr ""
-#: readelf.c:7525
+#: readelf.c:7859
#, c-format
msgid " [Index] Name\n"
msgstr ""
-#: readelf.c:7543
+#: readelf.c:7877
#, c-format
msgid "section [%5u] in group section [%5u] > maximum section [%5u]\n"
msgstr ""
-#: readelf.c:7546
+#: readelf.c:7880
msgid ""
"Further error messages about overlarge group section indices suppressed\n"
msgstr ""
-#: readelf.c:7559
+#: readelf.c:7893
#, c-format
msgid "section [%5u] in group section [%5u] already in group section [%5u]\n"
msgstr ""
-#: readelf.c:7563
+#: readelf.c:7897
msgid ""
"Further error messages about already contained group sections suppressed\n"
msgstr ""
-#: readelf.c:7575
+#: readelf.c:7909
#, c-format
msgid "section 0 in group section [%5u]\n"
msgstr ""
-#: readelf.c:7642
+#: readelf.c:7976
msgid "dynamic section image fixups"
msgstr ""
-#: readelf.c:7650
+#: readelf.c:7984
#, c-format
msgid "corrupt library name index of 0x%lx found in dynamic entry"
msgstr ""
-#: readelf.c:7655
+#: readelf.c:7989
#, c-format
msgid ""
"\n"
"Image fixups for needed library #%d: %s - ident: %lx\n"
msgstr ""
-#: readelf.c:7658
+#: readelf.c:7992
#, c-format
msgid "Seg Offset Type SymVec DataType\n"
msgstr ""
-#: readelf.c:7692
+#: readelf.c:8026
msgid "dynamic section image relocations"
msgstr ""
-#: readelf.c:7696
+#: readelf.c:8030
#, c-format
msgid ""
"\n"
"Image relocs\n"
msgstr ""
-#: readelf.c:7698
+#: readelf.c:8032
#, c-format
msgid ""
"Seg Offset Type Addend Seg Sym Off\n"
msgstr ""
-#: readelf.c:7755
+#: readelf.c:8089
msgid "dynamic string section"
msgstr ""
-#: readelf.c:7858
+#: readelf.c:8193
#, c-format
msgid ""
"\n"
"In linked file '%s' section '%s' at offset 0x%lx contains %ld bytes:\n"
msgstr ""
-#: readelf.c:7862
+#: readelf.c:8197
#, c-format
msgid ""
"\n"
"'%s' relocation section at offset 0x%lx contains %ld bytes:\n"
msgstr ""
-#: readelf.c:7883
+#: readelf.c:8218
#, c-format
msgid ""
"\n"
"There are no dynamic relocations in linked file '%s'.\n"
msgstr ""
-#: readelf.c:7886
+#: readelf.c:8221
#, c-format
msgid ""
"\n"
"There are no dynamic relocations in this file.\n"
msgstr ""
-#: readelf.c:7912
+#: readelf.c:8248
#, c-format
msgid ""
"\n"
"In linked file '%s' relocation section "
msgstr ""
-#: readelf.c:7915
+#: readelf.c:8251
#, c-format
msgid ""
"\n"
"Relocation section "
msgstr ""
-#: readelf.c:7923
+#: readelf.c:8259
#, c-format
msgid " at offset 0x%lx contains %lu entry:\n"
msgid_plural " at offset 0x%lx contains %lu entries:\n"
msgstr[0] ""
msgstr[1] ""
-#: readelf.c:7972
+#: readelf.c:8308
#, c-format
msgid ""
"\n"
"There are no static relocations in linked file '%s'."
msgstr ""
-#: readelf.c:7975
+#: readelf.c:8311
#, c-format
msgid ""
"\n"
"There are no static relocations in this file."
msgstr ""
-#: readelf.c:7976
+#: readelf.c:8312
#, c-format
msgid ""
"\n"
"To see the dynamic relocations add --use-dynamic to the command line.\n"
msgstr ""
-#: readelf.c:7984
+#: readelf.c:8320
#, c-format
msgid ""
"\n"
"There are no relocations in linked file '%s'.\n"
msgstr ""
-#: readelf.c:7987
+#: readelf.c:8323
#, c-format
msgid ""
"\n"
"There are no relocations in this file.\n"
msgstr ""
-#: readelf.c:8155
+#: readelf.c:8491
#, c-format
msgid "Invalid section %u in table entry %ld\n"
msgstr ""
-#: readelf.c:8167
+#: readelf.c:8503
#, c-format
msgid "Invalid offset %lx in table entry %ld\n"
msgstr ""
-#: readelf.c:8185
+#: readelf.c:8521
#, c-format
msgid "\tUnknown version.\n"
msgstr ""
-#: readelf.c:8248 readelf.c:8682
+#: readelf.c:8584 readelf.c:9021
msgid "unwind table"
msgstr ""
-#: readelf.c:8299 readelf.c:8765
+#: readelf.c:8635 readelf.c:9104
#, c-format
msgid "Skipping unknown relocation type: %u\n"
msgstr ""
-#: readelf.c:8305 readelf.c:8772
+#: readelf.c:8641 readelf.c:9111
#, c-format
msgid "Skipping unexpected relocation type: %s\n"
msgstr ""
-#: readelf.c:8314 readelf.c:8779
+#: readelf.c:8650 readelf.c:9118
#, c-format
msgid "Skipping reloc with overlarge offset: %lx\n"
msgstr ""
-#: readelf.c:8321 readelf.c:8786
+#: readelf.c:8657 readelf.c:9125
#, c-format
msgid "Skipping reloc with invalid symbol index: %u\n"
msgstr ""
-#: readelf.c:8369 readelf.c:8833 readelf.c:9941
+#: readelf.c:8705 readelf.c:9172 readelf.c:10282
msgid "Multiple symbol tables encountered\n"
msgstr ""
-#: readelf.c:8384 readelf.c:8849 readelf.c:9956
+#: readelf.c:8720 readelf.c:9188 readelf.c:10297
#, c-format
msgid ""
"\n"
"There are no unwind sections in this file.\n"
msgstr ""
-#: readelf.c:8467
+#: readelf.c:8806
#, c-format
msgid ""
"\n"
"Could not find unwind info section for "
msgstr ""
-#: readelf.c:8479
+#: readelf.c:8818
msgid "unwind info"
msgstr ""
-#: readelf.c:8482
+#: readelf.c:8821
#, c-format
msgid ""
"\n"
"Unwind section "
msgstr ""
-#: readelf.c:8489
+#: readelf.c:8828
#, c-format
msgid " at offset 0x%lx contains %lu entries:\n"
msgstr ""
-#: readelf.c:8858 readelf.c:9963
+#: readelf.c:9197 readelf.c:10304
#, c-format
msgid ""
"\n"
@@ -8689,194 +8900,199 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: readelf.c:8991
+#: readelf.c:9330
msgid "unwind data"
msgstr ""
-#: readelf.c:9064
+#: readelf.c:9403
#, c-format
msgid "Skipping unexpected relocation at offset 0x%lx\n"
msgstr ""
-#: readelf.c:9086
+#: readelf.c:9425
#, c-format
msgid "Unknown section relocation type %d encountered\n"
msgstr ""
-#: readelf.c:9094
+#: readelf.c:9433
#, c-format
msgid "Bad symbol index in unwind relocation (%lu > %lu)\n"
msgstr ""
-#: readelf.c:9109
+#: readelf.c:9448
#, c-format
msgid "Skipping unknown ARM relocation type: %d\n"
msgstr ""
-#: readelf.c:9119
+#: readelf.c:9458
#, c-format
msgid "Skipping unexpected ARM relocation type %s\n"
msgstr ""
-#: readelf.c:9128
+#: readelf.c:9467
#, c-format
msgid "Skipping unknown C6000 relocation type: %d\n"
msgstr ""
-#: readelf.c:9138
+#: readelf.c:9477
#, c-format
msgid "Skipping unexpected C6000 relocation type %s\n"
msgstr ""
#. This function currently only supports ARM and TI unwinders.
-#: readelf.c:9147
+#: readelf.c:9486
msgid "Only TI and ARM unwinders are currently supported\n"
msgstr ""
-#: readelf.c:9210
+#: readelf.c:9549
#, c-format
msgid "[Truncated opcode]\n"
msgstr ""
-#: readelf.c:9258 readelf.c:9474
+#: readelf.c:9597 readelf.c:9815
#, c-format
msgid "Refuse to unwind"
msgstr ""
-#: readelf.c:9281
+#: readelf.c:9620
#, c-format
msgid " [Reserved]"
msgstr ""
-#: readelf.c:9309
+#: readelf.c:9648
#, c-format
msgid " finish"
msgstr ""
-#: readelf.c:9314 readelf.c:9407
+#: readelf.c:9653 readelf.c:9748
#, c-format
msgid "[Spare]"
msgstr ""
-#: readelf.c:9348
+#: readelf.c:9687
msgid "corrupt change to vsp\n"
msgstr ""
-#: readelf.c:9429 readelf.c:9586
+#: readelf.c:9713
+#, c-format
+msgid " pop {ra_auth_code}"
+msgstr ""
+
+#: readelf.c:9770 readelf.c:9927
#, c-format
msgid " [unsupported opcode]"
msgstr ""
-#: readelf.c:9522
+#: readelf.c:9863
#, c-format
msgid "pop frame {"
msgstr ""
-#: readelf.c:9525
+#: readelf.c:9866
#, c-format
msgid "*corrupt* - no registers specified"
msgstr ""
-#: readelf.c:9539
+#: readelf.c:9880
msgid "[pad]"
msgstr ""
-#: readelf.c:9568
+#: readelf.c:9909
msgid "Corrupt stack pointer adjustment detected\n"
msgstr ""
-#: readelf.c:9575
+#: readelf.c:9916
#, c-format
msgid "sp = sp + %ld"
msgstr ""
-#: readelf.c:9650
+#: readelf.c:9991
#, c-format
msgid " Personality routine: "
msgstr ""
-#: readelf.c:9682
+#: readelf.c:10023
#, c-format
msgid " [Truncated data]\n"
msgstr ""
-#: readelf.c:9706
+#: readelf.c:10047
#, c-format
msgid "Corrupt ARM compact model table entry: %x \n"
msgstr ""
-#: readelf.c:9711
+#: readelf.c:10052
#, c-format
msgid " Compact model index: %d\n"
msgstr ""
-#: readelf.c:9737
+#: readelf.c:10078
msgid "Unknown ARM compact model index encountered\n"
msgstr ""
-#: readelf.c:9738
+#: readelf.c:10079
#, c-format
msgid " [reserved]\n"
msgstr ""
-#: readelf.c:9753
+#: readelf.c:10094
#, c-format
msgid " Restore stack from frame pointer\n"
msgstr ""
-#: readelf.c:9755
+#: readelf.c:10096
#, c-format
msgid " Stack increment %d\n"
msgstr ""
-#: readelf.c:9756
+#: readelf.c:10097
#, c-format
msgid " Registers restored: "
msgstr ""
-#: readelf.c:9761
+#: readelf.c:10102
#, c-format
msgid " Return register: %s\n"
msgstr ""
-#: readelf.c:9765
+#: readelf.c:10106
#, c-format
msgid " [reserved (%d)]\n"
msgstr ""
-#: readelf.c:9769
+#: readelf.c:10110
#, c-format
msgid ""
"Unsupported architecture type %d encountered when decoding unwind table\n"
msgstr ""
-#: readelf.c:9824
+#: readelf.c:10165
#, c-format
msgid "corrupt index table entry: %x\n"
msgstr ""
-#: readelf.c:9864
+#: readelf.c:10205
#, c-format
msgid "Unwind entry contains corrupt offset (0x%lx) into section %s\n"
msgstr ""
-#: readelf.c:9880
+#: readelf.c:10221
#, c-format
msgid "Could not locate .ARM.extab section containing 0x%lx.\n"
msgstr ""
-#: readelf.c:9924
+#: readelf.c:10265
#, c-format
msgid ""
"Unsupported architecture type %d encountered when processing unwind table\n"
msgstr ""
-#: readelf.c:9986
+#: readelf.c:10327
#, c-format
msgid "No processor specific unwind information to decode\n"
msgstr ""
-#: readelf.c:10016
+#: readelf.c:10357
#, c-format
msgid ""
"\n"
@@ -8884,86 +9100,86 @@ msgid ""
"supported.\n"
msgstr ""
-#: readelf.c:10043
+#: readelf.c:10384
#, c-format
msgid "NONE"
msgstr ""
-#: readelf.c:10068
+#: readelf.c:10409
#, c-format
msgid "Interface Version: %s"
msgstr ""
#. Note: coded this way so that there is a single string for translation.
-#: readelf.c:10075
+#: readelf.c:10416
#, c-format
msgid "<corrupt: %s>"
msgstr ""
-#: readelf.c:10093
+#: readelf.c:10434
#, c-format
msgid "Time Stamp: %s"
msgstr ""
-#: readelf.c:10287 readelf.c:10337
+#: readelf.c:10628 readelf.c:10678
msgid "dynamic section"
msgstr ""
-#: readelf.c:10307 readelf.c:10358
+#: readelf.c:10648 readelf.c:10699
#, c-format
msgid "Out of memory allocating space for %lu dynamic entries\n"
msgstr ""
-#: readelf.c:10432
+#: readelf.c:10773
#, c-format
msgid "Size truncation prevents reading %s elements of size %u\n"
msgstr ""
-#: readelf.c:10441
+#: readelf.c:10782
#, c-format
msgid "Invalid number of dynamic entries: %s\n"
msgstr ""
-#: readelf.c:10449
+#: readelf.c:10790
#, c-format
msgid "Out of memory reading %s dynamic entries\n"
msgstr ""
-#: readelf.c:10456
+#: readelf.c:10797
#, c-format
msgid "Unable to read in %s bytes of dynamic data\n"
msgstr ""
-#: readelf.c:10465
+#: readelf.c:10806
#, c-format
msgid "Out of memory allocating space for %s dynamic entries\n"
msgstr ""
-#: readelf.c:10505 readelf.c:10559 readelf.c:10583 readelf.c:10616
-#: readelf.c:10642 readelf.c:10661
+#: readelf.c:10846 readelf.c:10900 readelf.c:10924 readelf.c:10957
+#: readelf.c:10983 readelf.c:11002
msgid "Unable to seek to start of dynamic information\n"
msgstr ""
-#: readelf.c:10511 readelf.c:10565
+#: readelf.c:10852 readelf.c:10906
msgid "Failed to read in number of buckets\n"
msgstr ""
-#: readelf.c:10517
+#: readelf.c:10858
msgid "Failed to read in number of chains\n"
msgstr ""
-#: readelf.c:10624
+#: readelf.c:10965
msgid "Failed to determine last chain length\n"
msgstr ""
-#: readelf.c:10724
+#: readelf.c:11065
#, c-format
msgid ""
"\n"
"There is no dynamic section in linked file '%s'.\n"
msgstr ""
-#: readelf.c:10727
+#: readelf.c:11068
#, c-format
msgid ""
"\n"
@@ -8971,49 +9187,49 @@ msgid ""
msgstr ""
#. See PR 21379 for a reproducer.
-#: readelf.c:10787
+#: readelf.c:11128
msgid "Invalid PT_LOAD entry\n"
msgstr ""
-#: readelf.c:10813
+#: readelf.c:11154
msgid "the .dynsym section doesn't match the DT_SYMTAB and DT_SYMENT tags\n"
msgstr ""
-#: readelf.c:10823
+#: readelf.c:11164
msgid "Corrupt DT_SYMTAB dynamic entry\n"
msgstr ""
-#: readelf.c:10859
+#: readelf.c:11200
msgid "the .dynstr section doesn't match the DT_STRTAB and DT_STRSZ tags\n"
msgstr ""
-#: readelf.c:10864
+#: readelf.c:11205
msgid "dynamic string table"
msgstr ""
-#: readelf.c:10867
+#: readelf.c:11208
msgid "Corrupt DT_STRTAB dynamic entry\n"
msgstr ""
-#: readelf.c:10892
+#: readelf.c:11233
#, c-format
msgid "Bad value (%d) for SYMINENT entry\n"
msgstr ""
-#: readelf.c:10911
+#: readelf.c:11252
msgid "symbol information"
msgstr ""
-#: readelf.c:10917
+#: readelf.c:11258
msgid "Multiple dynamic symbol information sections found\n"
msgstr ""
-#: readelf.c:10923
+#: readelf.c:11264
#, c-format
msgid "Out of memory allocating %lu bytes for dynamic symbol info\n"
msgstr ""
-#: readelf.c:10947
+#: readelf.c:11288
#, c-format
msgid ""
"\n"
@@ -9025,7 +9241,7 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: readelf.c:10954
+#: readelf.c:11295
#, c-format
msgid ""
"\n"
@@ -9036,87 +9252,87 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: readelf.c:10961
+#: readelf.c:11302
#, c-format
msgid " Tag Type Name/Value\n"
msgstr ""
-#: readelf.c:10995
+#: readelf.c:11336
#, c-format
msgid "Auxiliary library"
msgstr ""
-#: readelf.c:10999
+#: readelf.c:11340
#, c-format
msgid "Filter library"
msgstr ""
-#: readelf.c:11003
+#: readelf.c:11344
#, c-format
msgid "Configuration file"
msgstr ""
-#: readelf.c:11007
+#: readelf.c:11348
#, c-format
msgid "Dependency audit library"
msgstr ""
-#: readelf.c:11011
+#: readelf.c:11352
#, c-format
msgid "Audit library"
msgstr ""
-#: readelf.c:11030 readelf.c:11058 readelf.c:11086 readelf.c:11421
+#: readelf.c:11371 readelf.c:11399 readelf.c:11427 readelf.c:11767
#, c-format
msgid "Flags:"
msgstr ""
-#: readelf.c:11033 readelf.c:11061 readelf.c:11088 readelf.c:11423
+#: readelf.c:11374 readelf.c:11402 readelf.c:11429 readelf.c:11769
#, c-format
msgid " None\n"
msgstr ""
-#: readelf.c:11294
+#: readelf.c:11636
#, c-format
msgid "Shared library: [%s]"
msgstr ""
-#: readelf.c:11298
+#: readelf.c:11640
#, c-format
msgid " program interpreter"
msgstr ""
-#: readelf.c:11302
+#: readelf.c:11644
#, c-format
msgid "Library soname: [%s]"
msgstr ""
-#: readelf.c:11306
+#: readelf.c:11648
#, c-format
msgid "Library rpath: [%s]"
msgstr ""
-#: readelf.c:11310
+#: readelf.c:11652
#, c-format
msgid "Library runpath: [%s]"
msgstr ""
-#: readelf.c:11344
+#: readelf.c:11689
#, c-format
msgid " (bytes)\n"
msgstr ""
-#: readelf.c:11374
+#: readelf.c:11720
#, c-format
msgid "Not needed object: [%s]\n"
msgstr ""
-#: readelf.c:11399
+#: readelf.c:11745
#, c-format
msgid "<corrupt time val: %lx"
msgstr ""
-#: readelf.c:11542
+#: readelf.c:11888
#, c-format
msgid ""
"\n"
@@ -9128,7 +9344,7 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: readelf.c:11549
+#: readelf.c:11895
#, c-format
msgid ""
"\n"
@@ -9139,71 +9355,71 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: readelf.c:11557 readelf.c:11704 readelf.c:11870
+#: readelf.c:11903 readelf.c:12050 readelf.c:12216
#, c-format
msgid " Addr: 0x"
msgstr ""
-#: readelf.c:11559 readelf.c:11706 readelf.c:11872
+#: readelf.c:11905 readelf.c:12052 readelf.c:12218
#, c-format
msgid " Offset: %#08lx Link: %u (%s)\n"
msgstr ""
-#: readelf.c:11565
+#: readelf.c:11911
msgid "version definition section"
msgstr ""
-#: readelf.c:11594
+#: readelf.c:11940
#, c-format
msgid " %#06lx: Rev: %d Flags: %s"
msgstr ""
-#: readelf.c:11597
+#: readelf.c:11943
#, c-format
msgid " Index: %d Cnt: %d "
msgstr ""
-#: readelf.c:11614
+#: readelf.c:11960
#, c-format
msgid "Name: %s\n"
msgstr ""
-#: readelf.c:11617
+#: readelf.c:11963
#, c-format
msgid "Name index: %ld\n"
msgstr ""
-#: readelf.c:11626
+#: readelf.c:11972
#, c-format
msgid "Invalid vda_next field of %lx\n"
msgstr ""
-#: readelf.c:11646
+#: readelf.c:11992
#, c-format
msgid " %#06lx: Parent %d: %s\n"
msgstr ""
-#: readelf.c:11650
+#: readelf.c:11996
#, c-format
msgid " %#06lx: Parent %d, name index: %ld\n"
msgstr ""
-#: readelf.c:11655
+#: readelf.c:12001
#, c-format
msgid " Version def aux past end of section\n"
msgstr ""
-#: readelf.c:11662
+#: readelf.c:12008
#, c-format
msgid "Invalid vd_next field of %lx\n"
msgstr ""
-#: readelf.c:11673
+#: readelf.c:12019
#, c-format
msgid " Version definition past end of section\n"
msgstr ""
-#: readelf.c:11689
+#: readelf.c:12035
#, c-format
msgid ""
"\n"
@@ -9214,7 +9430,7 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: readelf.c:11696
+#: readelf.c:12042
#, c-format
msgid ""
"\n"
@@ -9225,68 +9441,68 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: readelf.c:11713
+#: readelf.c:12059
msgid "Version Needs section"
msgstr ""
-#: readelf.c:11738
+#: readelf.c:12084
#, c-format
msgid " %#06lx: Version: %d"
msgstr ""
-#: readelf.c:11741
+#: readelf.c:12087
#, c-format
msgid " File: %s"
msgstr ""
-#: readelf.c:11744
+#: readelf.c:12090
#, c-format
msgid " File: %lx"
msgstr ""
-#: readelf.c:11746
+#: readelf.c:12092
#, c-format
msgid " Cnt: %d\n"
msgstr ""
-#: readelf.c:11769
+#: readelf.c:12115
#, c-format
msgid " %#06lx: Name: %s"
msgstr ""
-#: readelf.c:11772
+#: readelf.c:12118
#, c-format
msgid " %#06lx: Name index: %lx"
msgstr ""
-#: readelf.c:11775
+#: readelf.c:12121
#, c-format
msgid " Flags: %s Version: %d\n"
msgstr ""
-#: readelf.c:11781
+#: readelf.c:12127
#, c-format
msgid "Invalid vna_next field of %lx\n"
msgstr ""
-#: readelf.c:11794
+#: readelf.c:12140
msgid "Missing Version Needs auxiliary information\n"
msgstr ""
-#: readelf.c:11799
+#: readelf.c:12145
#, c-format
msgid "Invalid vn_next field of %lx\n"
msgstr ""
-#: readelf.c:11809
+#: readelf.c:12155
msgid "Missing Version Needs information\n"
msgstr ""
-#: readelf.c:11847
+#: readelf.c:12193
msgid "version string table"
msgstr ""
-#: readelf.c:11855
+#: readelf.c:12201
#, c-format
msgid ""
"\n"
@@ -9297,7 +9513,7 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: readelf.c:11862
+#: readelf.c:12208
#, c-format
msgid ""
"\n"
@@ -9308,206 +9524,210 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: readelf.c:11881
+#: readelf.c:12227
msgid "version symbol data"
msgstr ""
-#: readelf.c:11901
+#: readelf.c:12247
msgid "*invalid*"
msgstr ""
-#: readelf.c:11909
+#: readelf.c:12255
msgid " 0 (*local*) "
msgstr ""
-#: readelf.c:11913
+#: readelf.c:12259
msgid " 1 (*global*) "
msgstr ""
-#: readelf.c:11924
+#: readelf.c:12270
msgid "invalid index into symbol array\n"
msgstr ""
-#: readelf.c:11947 readelf.c:12519
+#: readelf.c:12293 readelf.c:12890
msgid "version need"
msgstr ""
-#: readelf.c:11958
+#: readelf.c:12304
msgid "version need aux (2)"
msgstr ""
-#: readelf.c:12005 readelf.c:12463
+#: readelf.c:12351 readelf.c:12834
msgid "version def"
msgstr ""
-#: readelf.c:12033 readelf.c:12494
+#: readelf.c:12379 readelf.c:12865
msgid "version def aux"
msgstr ""
-#: readelf.c:12041
+#: readelf.c:12387
msgid "*both*"
msgstr ""
-#: readelf.c:12073
+#: readelf.c:12419
#, c-format
msgid ""
"\n"
"No version information found in linked file '%s'.\n"
msgstr ""
-#: readelf.c:12076
+#: readelf.c:12422
#, c-format
msgid ""
"\n"
"No version information found in this file.\n"
msgstr ""
-#: readelf.c:12172
+#: readelf.c:12518
#, c-format
msgid "Unrecognized visibility value: %u\n"
msgstr ""
-#: readelf.c:12185
+#: readelf.c:12531
#, c-format
msgid "Unrecognized alpha specific other value: %u\n"
msgstr ""
-#: readelf.c:12262
+#: readelf.c:12608
#, c-format
msgid "Unrecognized IA64 VMS ST Function type: %d\n"
msgstr ""
-#: readelf.c:12286
+#: readelf.c:12632
#, c-format
msgid "Unrecognized IA64 VMS ST Linkage: %d\n"
msgstr ""
-#: readelf.c:12312
+#: readelf.c:12658
#, c-format
msgid "<localentry>: %d"
msgstr ""
-#: readelf.c:12352
+#: readelf.c:12672
+msgid " VARIANT_CC"
+msgstr ""
+
+#: readelf.c:12723
#, c-format
msgid "<other>: %x"
msgstr ""
-#: readelf.c:12392
+#: readelf.c:12763
#, c-format
msgid "bad section index[%3d]"
msgstr ""
-#: readelf.c:12425
+#: readelf.c:12796
msgid "version data"
msgstr ""
-#: readelf.c:12537
+#: readelf.c:12908
msgid "version need aux (3)"
msgstr ""
-#: readelf.c:12687
+#: readelf.c:13062
#, c-format
msgid "local symbol %lu found at index >= %s's sh_info value of %u\n"
msgstr ""
-#: readelf.c:12706
+#: readelf.c:13081
#, c-format
msgid "Unknown LTO symbol definition encountered: %u\n"
msgstr ""
-#: readelf.c:12725
+#: readelf.c:13100
#, c-format
msgid "Unknown LTO symbol visibility encountered: %u\n"
msgstr ""
-#: readelf.c:12743
+#: readelf.c:13118
#, c-format
msgid "Unknown LTO symbol type encountered: %u\n"
msgstr ""
-#: readelf.c:12759
+#: readelf.c:13134
#, c-format
msgid ""
"\n"
"The LTO Symbol table section '%s' in linked file '%s' is empty!\n"
msgstr ""
-#: readelf.c:12763
+#: readelf.c:13138
#, c-format
msgid ""
"\n"
"LTO Symbol table '%s' is empty!\n"
msgstr ""
-#: readelf.c:12778
+#: readelf.c:13153
msgid "LTO symbols"
msgstr ""
-#: readelf.c:12795
+#: readelf.c:13171
#, c-format
msgid "LTO Symbol extension table '%s' is empty!\n"
msgstr ""
-#: readelf.c:12801
+#: readelf.c:13177
msgid "LTO ext symbol data"
msgstr ""
-#: readelf.c:12806
+#: readelf.c:13182
msgid "Unexpected version number in symbol extension table\n"
msgstr ""
-#: readelf.c:12815
+#: readelf.c:13191
#, c-format
msgid ""
"\n"
"In linked file '%s': "
msgstr ""
-#: readelf.c:12822
+#: readelf.c:13198
#, c-format
msgid "LTO Symbol table '%s' and extension table '%s' contain:\n"
msgstr ""
-#: readelf.c:12827
+#: readelf.c:13203
#, c-format
msgid "LTO Symbol table '%s'\n"
msgstr ""
-#: readelf.c:12829
+#: readelf.c:13205
#, c-format
msgid " and extension table '%s' contain:\n"
msgstr ""
-#: readelf.c:12834
+#: readelf.c:13210
#, c-format
msgid "LTO Symbol table '%s' contains:\n"
msgstr ""
-#: readelf.c:12839
+#: readelf.c:13215
#, c-format
msgid ""
" Comdat_Key Kind Visibility Size Slot Type Section "
"Name\n"
msgstr ""
-#: readelf.c:12841
+#: readelf.c:13217
#, c-format
msgid " Comdat_Key Kind Visibility Size Slot Name\n"
msgstr ""
-#: readelf.c:12888
+#: readelf.c:13264
msgid "Ran out of LTO symbol extension data\n"
msgstr ""
-#: readelf.c:12908
+#: readelf.c:13284
msgid "Data remains in the LTO symbol extension table\n"
msgstr ""
-#: readelf.c:12918
+#: readelf.c:13294
msgid "Buffer overrun encountered whilst decoding LTO symbol table\n"
msgstr ""
-#: readelf.c:12970
+#: readelf.c:13346
#, c-format
msgid ""
"\n"
@@ -9518,7 +9738,7 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: readelf.c:12978
+#: readelf.c:13354
#, c-format
msgid ""
"\n"
@@ -9529,24 +9749,24 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: readelf.c:12984 readelf.c:13037
+#: readelf.c:13360 readelf.c:13413
#, c-format
msgid " Num: Value Size Type Bind Vis Ndx Name\n"
msgstr ""
-#: readelf.c:12986 readelf.c:13039
+#: readelf.c:13362 readelf.c:13415
#, c-format
msgid " Num: Value Size Type Bind Vis Ndx Name\n"
msgstr ""
-#: readelf.c:13015
+#: readelf.c:13391
#, c-format
msgid ""
"\n"
"Symbol table '%s' has a sh_entsize of zero!\n"
msgstr ""
-#: readelf.c:13023
+#: readelf.c:13399
#, c-format
msgid ""
"\n"
@@ -9557,7 +9777,7 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: readelf.c:13030
+#: readelf.c:13406
#, c-format
msgid ""
"\n"
@@ -9568,14 +9788,14 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: readelf.c:13073
+#: readelf.c:13449
#, c-format
msgid ""
"\n"
"Dynamic symbol information is not available for displaying symbols.\n"
msgstr ""
-#: readelf.c:13086
+#: readelf.c:13462
#, c-format
msgid ""
"\n"
@@ -9586,24 +9806,24 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: readelf.c:13097
+#: readelf.c:13473
msgid "Out of memory allocating space for histogram buckets\n"
msgstr ""
-#: readelf.c:13103 readelf.c:13181
+#: readelf.c:13479 readelf.c:13557
#, c-format
msgid " Length Number %% of total Coverage\n"
msgstr ""
-#: readelf.c:13113
+#: readelf.c:13489
msgid "histogram chain is corrupt\n"
msgstr ""
-#: readelf.c:13125
+#: readelf.c:13501
msgid "Out of memory allocating space for histogram counts\n"
msgstr ""
-#: readelf.c:13165
+#: readelf.c:13541
#, c-format
msgid ""
"\n"
@@ -9614,15 +9834,15 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: readelf.c:13177
+#: readelf.c:13553
msgid "Out of memory allocating space for gnu histogram buckets\n"
msgstr ""
-#: readelf.c:13204
+#: readelf.c:13580
msgid "Out of memory allocating space for gnu histogram counts\n"
msgstr ""
-#: readelf.c:13270
+#: readelf.c:13646
#, c-format
msgid ""
"\n"
@@ -9635,7 +9855,7 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: readelf.c:13277
+#: readelf.c:13653
#, c-format
msgid ""
"\n"
@@ -9646,250 +9866,241 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: readelf.c:13285
+#: readelf.c:13661
#, c-format
msgid " Num: Name BoundTo Flags\n"
msgstr ""
-#: readelf.c:13292
+#: readelf.c:13668
#, c-format
msgid "<corrupt index>"
msgstr ""
-#: readelf.c:13297
+#: readelf.c:13673
#, c-format
msgid "<corrupt: %19ld>"
msgstr ""
-#: readelf.c:13394
+#: readelf.c:13770
#, c-format
msgid "MSP430 SYM_DIFF reloc contains invalid symbol index %lu\n"
msgstr ""
-#: readelf.c:13441
+#: readelf.c:13817
#, c-format
msgid "MSP430 ULEB128 field at 0x%lx contains invalid ULEB128 value\n"
msgstr ""
-#: readelf.c:13445
+#: readelf.c:13821
#, c-format
msgid "MSP430 reloc contains invalid symbol index %lu\n"
msgstr ""
#. PR 21137
-#: readelf.c:13456
+#: readelf.c:13832
#, c-format
msgid "MSP430 sym diff reloc contains invalid offset: 0x%lx\n"
msgstr ""
-#: readelf.c:13467
+#: readelf.c:13843
msgid "Unhandled MSP430 reloc type found after SYM_DIFF reloc\n"
msgstr ""
-#: readelf.c:13490
+#: readelf.c:13866
#, c-format
msgid "MN10300_SYM_DIFF reloc contains invalid symbol index %lu\n"
msgstr ""
-#: readelf.c:13504
+#: readelf.c:13880
#, c-format
msgid "MN10300 reloc contains invalid symbol index %lu\n"
msgstr ""
-#: readelf.c:13514
+#: readelf.c:13890
#, c-format
msgid "MN10300 sym diff reloc contains invalid offset: 0x%lx\n"
msgstr ""
-#: readelf.c:13524
+#: readelf.c:13900
msgid "Unhandled MN10300 reloc type found after SYM_DIFF reloc\n"
msgstr ""
-#: readelf.c:13547
+#: readelf.c:13923
#, c-format
msgid "RL78_SYM reloc contains invalid symbol index %lu\n"
msgstr ""
-#: readelf.c:13566 readelf.c:13575
+#: readelf.c:13942 readelf.c:13951
#, c-format
msgid "RL78 sym diff reloc contains invalid offset: 0x%lx\n"
msgstr ""
-#: readelf.c:13794
+#: readelf.c:14172
#, c-format
msgid ""
"Missing knowledge of 32-bit reloc types used in DWARF sections of machine "
"number %d\n"
msgstr ""
-#: readelf.c:14477
+#: readelf.c:14857
#, c-format
msgid "unable to apply unsupported reloc type %d to section %s\n"
msgstr ""
-#: readelf.c:14486
+#: readelf.c:14866
#, c-format
msgid "skipping invalid relocation offset 0x%lx in section %s\n"
msgstr ""
-#: readelf.c:14495
+#: readelf.c:14875
#, c-format
msgid "skipping invalid relocation symbol index 0x%lx in section %s\n"
msgstr ""
-#: readelf.c:14518
+#: readelf.c:14898
#, c-format
msgid "skipping unexpected symbol type %s in section %s relocation %ld\n"
msgstr ""
-#: readelf.c:14595
+#: readelf.c:14975
#, c-format
msgid ""
"\n"
"Assembly dump of section %s\n"
msgstr ""
-#: readelf.c:14613
+#: readelf.c:14993
#, c-format
msgid "Section '%s' has no data to dump.\n"
msgstr ""
-#: readelf.c:14619
+#: readelf.c:14999
msgid "section contents"
msgstr ""
-#: readelf.c:14695
+#: readelf.c:15075
#, c-format
msgid ""
"\n"
"String dump of section '%s' in linked file %s:\n"
msgstr ""
-#: readelf.c:14699
+#: readelf.c:15079
#, c-format
msgid ""
"\n"
"String dump of section '%s':\n"
msgstr ""
-#: readelf.c:14720 readelf.c:14936 readelf.c:15359
+#: readelf.c:15100 readelf.c:15316 readelf.c:15703
#, c-format
msgid "section '%s' has unsupported compress type: %d\n"
msgstr ""
-#: readelf.c:14752 readelf.c:14970 readelf.c:15396
+#: readelf.c:15132 readelf.c:15350 readelf.c:15740
#, c-format
msgid "Unable to decompress section %s\n"
msgstr ""
-#: readelf.c:14777
+#: readelf.c:15157
#, c-format
msgid ""
" Note: This section has relocations against it, but these have NOT been "
"applied to this dump.\n"
msgstr ""
-#: readelf.c:14870 readelf.c:16357 readelf.c:16397 readelf.c:16435
-#: readelf.c:16482 readelf.c:16513 readelf.c:18120 readelf.c:18152
+#: readelf.c:15250 readelf.c:16726 readelf.c:16766 readelf.c:16804
+#: readelf.c:16851 readelf.c:16882 readelf.c:18488 readelf.c:18520
#, c-format
msgid "<corrupt>\n"
msgstr ""
-#: readelf.c:14878
+#: readelf.c:15258
#, c-format
msgid " No strings found in this section."
msgstr ""
-#: readelf.c:14911
+#: readelf.c:15291
#, c-format
msgid ""
"\n"
"Hex dump of section '%s' in linked file %s:\n"
msgstr ""
-#: readelf.c:14915
+#: readelf.c:15295
#, c-format
msgid ""
"\n"
"Hex dump of section '%s':\n"
msgstr ""
-#: readelf.c:15003
+#: readelf.c:15383
#, c-format
msgid ""
" NOTE: This section has relocations against it, but these have NOT been "
"applied to this dump.\n"
msgstr ""
-#: readelf.c:15148
+#: readelf.c:15525
#, c-format
msgid "Iteration failed: %s, %s\n"
msgstr ""
-#: readelf.c:15194
+#: readelf.c:15569
#, c-format
msgid "No symbol section named %s\n"
msgstr ""
-#: readelf.c:15210
+#: readelf.c:15585
#, c-format
msgid "No string table section named %s\n"
msgstr ""
-#: readelf.c:15217
+#: readelf.c:15592
msgid "strings"
msgstr ""
-#: readelf.c:15227
-#, c-format
-msgid "No CTF parent section named %s\n"
-msgstr ""
-
-#: readelf.c:15233
-msgid "CTF parent"
-msgstr ""
-
-#: readelf.c:15246 readelf.c:15259 readelf.c:15273
+#: readelf.c:15605 readelf.c:15617
#, c-format
msgid "CTF open failure: %s\n"
msgstr ""
-#: readelf.c:15280
+#: readelf.c:15624
#, c-format
msgid ""
"\n"
"Dump of CTF section '%s' in linked file %s:\n"
msgstr ""
-#: readelf.c:15284
+#: readelf.c:15628
#, c-format
msgid ""
"\n"
"Dump of CTF section '%s':\n"
msgstr ""
-#: readelf.c:15290
+#: readelf.c:15636
#, c-format
msgid "CTF member open failure: %s\n"
msgstr ""
-#: readelf.c:15323
+#: readelf.c:15667
#, c-format
msgid "%s section data"
msgstr ""
-#: readelf.c:15346
+#: readelf.c:15690
#, c-format
msgid "compressed section %s is too small to contain a compression header\n"
msgstr ""
-#: readelf.c:15472 readelf.c:15499 readelf.c:15524
+#: readelf.c:15816 readelf.c:15843 readelf.c:15868
#, c-format
msgid ""
"malformed note encountered in section %s whilst scanning for build-id note\n"
msgstr ""
-#: readelf.c:15648
+#: readelf.c:15993
#, c-format
msgid ""
"\n"
@@ -9900,548 +10111,548 @@ msgstr ""
#. which has the NOBITS type - the bits in the file will be random.
#. This can happen when a file containing a .eh_frame section is
#. stripped with the --only-keep-debug command line option.
-#: readelf.c:15657
+#: readelf.c:16002
#, c-format
msgid "section '%s' has the NOBITS type - its contents are unreliable.\n"
msgstr ""
-#: readelf.c:15707
+#: readelf.c:16052
#, c-format
msgid "Unrecognized debug section: %s\n"
msgstr ""
-#: readelf.c:15736
+#: readelf.c:16082
#, c-format
msgid "Section '%s' was not dumped because it does not exist\n"
msgstr ""
-#: readelf.c:15809
+#: readelf.c:16155
#, c-format
msgid "Section %d was not dumped because it does not exist!\n"
msgstr ""
-#: readelf.c:15865
+#: readelf.c:16211
msgid "<corrupt tag>\n"
msgstr ""
-#: readelf.c:15880
+#: readelf.c:16226
#, c-format
msgid "<corrupt string tag>"
msgstr ""
-#: readelf.c:15914
+#: readelf.c:16260
#, c-format
msgid "Absent/Non standard\n"
msgstr ""
-#: readelf.c:15917
+#: readelf.c:16263
#, c-format
msgid "Bare metal/mwdt\n"
msgstr ""
-#: readelf.c:15920
+#: readelf.c:16266
#, c-format
msgid "Bare metal/newlib\n"
msgstr ""
-#: readelf.c:15923
+#: readelf.c:16269
#, c-format
msgid "Linux/uclibc\n"
msgstr ""
-#: readelf.c:15926
+#: readelf.c:16272
#, c-format
msgid "Linux/glibc\n"
msgstr ""
-#: readelf.c:15929 readelf.c:16008
+#: readelf.c:16275 readelf.c:16354
#, c-format
msgid "Unknown\n"
msgstr ""
-#: readelf.c:15941 readelf.c:15971 readelf.c:15999
+#: readelf.c:16287 readelf.c:16317 readelf.c:16345
#, c-format
msgid "Absent\n"
msgstr ""
-#: readelf.c:15983
+#: readelf.c:16329
msgid "yes"
msgstr ""
-#: readelf.c:15983
+#: readelf.c:16329
msgid "no"
msgstr ""
-#: readelf.c:16020 readelf.c:16027
+#: readelf.c:16366 readelf.c:16373
msgid "default"
msgstr ""
-#: readelf.c:16021
+#: readelf.c:16367
msgid "smallest"
msgstr ""
-#: readelf.c:16026
+#: readelf.c:16372
msgid "OPTFP"
msgstr ""
-#: readelf.c:16224 readelf.c:16237 readelf.c:16255 readelf.c:16776
-#: readelf.c:17055 readelf.c:17067 readelf.c:17079
+#: readelf.c:16593 readelf.c:16606 readelf.c:16624 readelf.c:17145
+#: readelf.c:17424 readelf.c:17436 readelf.c:17448
#, c-format
msgid "None\n"
msgstr ""
-#: readelf.c:16225
+#: readelf.c:16594
#, c-format
msgid "Application\n"
msgstr ""
-#: readelf.c:16226
+#: readelf.c:16595
#, c-format
msgid "Realtime\n"
msgstr ""
-#: readelf.c:16227
+#: readelf.c:16596
#, c-format
msgid "Microcontroller\n"
msgstr ""
-#: readelf.c:16228
+#: readelf.c:16597
#, c-format
msgid "Application or Realtime\n"
msgstr ""
-#: readelf.c:16238 readelf.c:16257 readelf.c:16828 readelf.c:16845
-#: readelf.c:16916 readelf.c:16936 readelf.c:19762
+#: readelf.c:16607 readelf.c:16626 readelf.c:17197 readelf.c:17214
+#: readelf.c:17285 readelf.c:17305 readelf.c:20136
#, c-format
msgid "8-byte\n"
msgstr ""
-#: readelf.c:16239 readelf.c:16919 readelf.c:16939 readelf.c:19761
+#: readelf.c:16608 readelf.c:17288 readelf.c:17308 readelf.c:20135
#, c-format
msgid "4-byte\n"
msgstr ""
-#: readelf.c:16243 readelf.c:16261
+#: readelf.c:16612 readelf.c:16630
#, c-format
msgid "8-byte and up to %d-byte extended\n"
msgstr ""
-#: readelf.c:16256
+#: readelf.c:16625
#, c-format
msgid "8-byte, except leaf SP\n"
msgstr ""
-#: readelf.c:16272 readelf.c:16354 readelf.c:16954
+#: readelf.c:16641 readelf.c:16723 readelf.c:17323
#, c-format
msgid "flag = %d, vendor = "
msgstr ""
-#: readelf.c:16293
+#: readelf.c:16662
#, c-format
msgid "True\n"
msgstr ""
-#: readelf.c:16313
+#: readelf.c:16682
#, c-format
msgid "<unknown: %d>\n"
msgstr ""
-#: readelf.c:16358
+#: readelf.c:16727
msgid "corrupt vendor attribute\n"
msgstr ""
-#: readelf.c:16408
+#: readelf.c:16777
#, c-format
msgid "unspecified hard/soft float\n"
msgstr ""
-#: readelf.c:16411
+#: readelf.c:16780
#, c-format
msgid "hard float\n"
msgstr ""
-#: readelf.c:16414
+#: readelf.c:16783
#, c-format
msgid "soft float\n"
msgstr ""
-#: readelf.c:16446
+#: readelf.c:16815
#, c-format
msgid "unspecified hard/soft float, "
msgstr ""
-#: readelf.c:16449
+#: readelf.c:16818
#, c-format
msgid "hard float, "
msgstr ""
-#: readelf.c:16452
+#: readelf.c:16821
#, c-format
msgid "soft float, "
msgstr ""
-#: readelf.c:16455
+#: readelf.c:16824
#, c-format
msgid "single-precision hard float, "
msgstr ""
-#: readelf.c:16462
+#: readelf.c:16831
#, c-format
msgid "unspecified long double\n"
msgstr ""
-#: readelf.c:16465
+#: readelf.c:16834
#, c-format
msgid "128-bit IBM long double\n"
msgstr ""
-#: readelf.c:16468
+#: readelf.c:16837
#, c-format
msgid "64-bit long double\n"
msgstr ""
-#: readelf.c:16471
+#: readelf.c:16840
#, c-format
msgid "128-bit IEEE long double\n"
msgstr ""
-#: readelf.c:16493 readelf.c:16524
+#: readelf.c:16862 readelf.c:16893
#, c-format
msgid "unspecified\n"
msgstr ""
-#: readelf.c:16496
+#: readelf.c:16865
#, c-format
msgid "generic\n"
msgstr ""
-#: readelf.c:16530
+#: readelf.c:16899
#, c-format
msgid "memory\n"
msgstr ""
-#: readelf.c:16557
+#: readelf.c:16926
#, c-format
msgid "any\n"
msgstr ""
-#: readelf.c:16560
+#: readelf.c:16929
#, c-format
msgid "software\n"
msgstr ""
-#: readelf.c:16563
+#: readelf.c:16932
#, c-format
msgid "hardware\n"
msgstr ""
-#: readelf.c:16686
+#: readelf.c:17055
#, c-format
msgid "Hard or soft float\n"
msgstr ""
-#: readelf.c:16689
+#: readelf.c:17058
#, c-format
msgid "Hard float (double precision)\n"
msgstr ""
-#: readelf.c:16692
+#: readelf.c:17061
#, c-format
msgid "Hard float (single precision)\n"
msgstr ""
-#: readelf.c:16695
+#: readelf.c:17064
#, c-format
msgid "Soft float\n"
msgstr ""
-#: readelf.c:16698
+#: readelf.c:17067
#, c-format
msgid "Hard float (MIPS32r2 64-bit FPU 12 callee-saved)\n"
msgstr ""
-#: readelf.c:16701
+#: readelf.c:17070
#, c-format
msgid "Hard float (32-bit CPU, Any FPU)\n"
msgstr ""
-#: readelf.c:16704
+#: readelf.c:17073
#, c-format
msgid "Hard float (32-bit CPU, 64-bit FPU)\n"
msgstr ""
-#: readelf.c:16707
+#: readelf.c:17076
#, c-format
msgid "Hard float compat (32-bit CPU, 64-bit FPU)\n"
msgstr ""
-#: readelf.c:16710
+#: readelf.c:17079
#, c-format
msgid "NaN 2008 compatibility\n"
msgstr ""
-#: readelf.c:16743
+#: readelf.c:17112
#, c-format
msgid "Any MSA or not\n"
msgstr ""
-#: readelf.c:16746
+#: readelf.c:17115
#, c-format
msgid "128-bit MSA\n"
msgstr ""
-#: readelf.c:16808
+#: readelf.c:17177
#, c-format
msgid "Not used\n"
msgstr ""
-#: readelf.c:16811
+#: readelf.c:17180
#, c-format
msgid "2 bytes\n"
msgstr ""
-#: readelf.c:16814
+#: readelf.c:17183
#, c-format
msgid "4 bytes\n"
msgstr ""
-#: readelf.c:16831 readelf.c:16848 readelf.c:16922 readelf.c:16942
+#: readelf.c:17200 readelf.c:17217 readelf.c:17291 readelf.c:17311
#, c-format
msgid "16-byte\n"
msgstr ""
-#: readelf.c:16862
+#: readelf.c:17231
#, c-format
msgid "DSBT addressing not used\n"
msgstr ""
-#: readelf.c:16865
+#: readelf.c:17234
#, c-format
msgid "DSBT addressing used\n"
msgstr ""
-#: readelf.c:16879
+#: readelf.c:17248
#, c-format
msgid "Data addressing position-dependent\n"
msgstr ""
-#: readelf.c:16882
+#: readelf.c:17251
#, c-format
msgid "Data addressing position-independent, GOT near DP\n"
msgstr ""
-#: readelf.c:16885
+#: readelf.c:17254
#, c-format
msgid "Data addressing position-independent, GOT far from DP\n"
msgstr ""
-#: readelf.c:16899
+#: readelf.c:17268
#, c-format
msgid "Code addressing position-dependent\n"
msgstr ""
-#: readelf.c:16902
+#: readelf.c:17271
#, c-format
msgid "Code addressing position-independent\n"
msgstr ""
-#: readelf.c:17056
+#: readelf.c:17425
#, c-format
msgid "MSP430\n"
msgstr ""
-#: readelf.c:17057
+#: readelf.c:17426
#, c-format
msgid "MSP430X\n"
msgstr ""
-#: readelf.c:17068 readelf.c:17080
+#: readelf.c:17437 readelf.c:17449
#, c-format
msgid "Small\n"
msgstr ""
-#: readelf.c:17069 readelf.c:17081
+#: readelf.c:17438 readelf.c:17450
#, c-format
msgid "Large\n"
msgstr ""
-#: readelf.c:17082
+#: readelf.c:17451
#, c-format
msgid "Restricted Large\n"
msgstr ""
-#: readelf.c:17088
+#: readelf.c:17457
#, c-format
msgid " <unknown tag %d>: "
msgstr ""
-#: readelf.c:17134
+#: readelf.c:17503
#, c-format
msgid "Any Region\n"
msgstr ""
-#: readelf.c:17137
+#: readelf.c:17506
#, c-format
msgid "Lower Region Only\n"
msgstr ""
-#: readelf.c:17196
+#: readelf.c:17565
#, c-format
msgid "%u\n"
msgstr ""
-#: readelf.c:17203
+#: readelf.c:17572
#, c-format
msgid "No unaligned access\n"
msgstr ""
-#: readelf.c:17206
+#: readelf.c:17575
#, c-format
msgid "Unaligned access\n"
msgstr ""
-#: readelf.c:17212
+#: readelf.c:17581
#, c-format
msgid "%u-bytes\n"
msgstr ""
-#: readelf.c:17354
+#: readelf.c:17723
msgid "attributes"
msgstr ""
-#: readelf.c:17366
+#: readelf.c:17735
#, c-format
msgid "Unknown attributes version '%c'(%d) - expecting 'A'\n"
msgstr ""
-#: readelf.c:17385
+#: readelf.c:17754
msgid "Tag section ends prematurely\n"
msgstr ""
-#: readelf.c:17394
+#: readelf.c:17763
#, c-format
msgid "Bad attribute length (%u > %u)\n"
msgstr ""
-#: readelf.c:17402
+#: readelf.c:17771
#, c-format
msgid "Attribute length of %u is too small\n"
msgstr ""
-#: readelf.c:17413
+#: readelf.c:17782
msgid "Corrupt attribute section name\n"
msgstr ""
-#: readelf.c:17418
+#: readelf.c:17787
#, c-format
msgid "Attribute Section: "
msgstr ""
-#: readelf.c:17445
+#: readelf.c:17814
msgid "Unused bytes at end of section\n"
msgstr ""
-#: readelf.c:17455
+#: readelf.c:17824
#, c-format
msgid "Bad subsection length (%u > %u)\n"
msgstr ""
-#: readelf.c:17463
+#: readelf.c:17832
#, c-format
msgid "Bad subsection length (%u < 6)\n"
msgstr ""
-#: readelf.c:17478
+#: readelf.c:17847
#, c-format
msgid "File Attributes\n"
msgstr ""
-#: readelf.c:17481
+#: readelf.c:17850
#, c-format
msgid "Section Attributes:"
msgstr ""
-#: readelf.c:17484
+#: readelf.c:17853
#, c-format
msgid "Symbol Attributes:"
msgstr ""
-#: readelf.c:17497
+#: readelf.c:17866
#, c-format
msgid "Unknown tag: %d\n"
msgstr ""
-#: readelf.c:17518
+#: readelf.c:17887
#, c-format
msgid " Unknown attribute:\n"
msgstr ""
-#: readelf.c:17560
+#: readelf.c:17929
msgid "MIPS GOT entry extends beyond the end of available data\n"
msgstr ""
-#: readelf.c:17643 readelf.c:17712
+#: readelf.c:18012 readelf.c:18081
msgid "Unknown"
msgstr ""
-#: readelf.c:17759
+#: readelf.c:18128
msgid "Corrupt MIPS ABI Flags section.\n"
msgstr ""
-#: readelf.c:17765
+#: readelf.c:18134
msgid "MIPS ABI Flags section"
msgstr ""
-#: readelf.c:17824 readelf.c:18407
+#: readelf.c:18193 readelf.c:18775
msgid "Global Offset Table data"
msgstr ""
-#: readelf.c:17828
+#: readelf.c:18197
#, c-format
msgid ""
"\n"
"Static GOT:\n"
msgstr ""
-#: readelf.c:17829 readelf.c:18412
+#: readelf.c:18198 readelf.c:18780
#, c-format
msgid " Canonical gp value: "
msgstr ""
-#: readelf.c:17843 readelf.c:18416 readelf.c:18546
+#: readelf.c:18212 readelf.c:18784 readelf.c:18914
#, c-format
msgid " Reserved entries:\n"
msgstr ""
-#: readelf.c:17844
+#: readelf.c:18213
#, c-format
msgid " %*s %10s %*s\n"
msgstr ""
-#: readelf.c:17845 readelf.c:17875 readelf.c:18418 readelf.c:18446
-#: readelf.c:18464 readelf.c:18548 readelf.c:18557
+#: readelf.c:18214 readelf.c:18244 readelf.c:18786 readelf.c:18814
+#: readelf.c:18832 readelf.c:18916 readelf.c:18925
msgid "Address"
msgstr ""
-#: readelf.c:17845 readelf.c:17875 readelf.c:18418 readelf.c:18446
-#: readelf.c:18465
+#: readelf.c:18214 readelf.c:18244 readelf.c:18786 readelf.c:18814
+#: readelf.c:18833
msgid "Access"
msgstr ""
-#: readelf.c:17846 readelf.c:17876
+#: readelf.c:18215 readelf.c:18245
msgid "Value"
msgstr ""
-#: readelf.c:17873 readelf.c:18444
+#: readelf.c:18242 readelf.c:18812
#, c-format
msgid " Local entries:\n"
msgstr ""
-#: readelf.c:17955 readelf.c:18663
+#: readelf.c:18324 readelf.c:19031
msgid "liblist section data"
msgstr ""
-#: readelf.c:17958
+#: readelf.c:18327
#, c-format
msgid ""
"\n"
@@ -10452,38 +10663,38 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: readelf.c:17962
+#: readelf.c:18331
msgid ""
" Library Time Stamp Checksum Version Flags\n"
msgstr ""
-#: readelf.c:17988
+#: readelf.c:18357
#, c-format
msgid "<corrupt: %9ld>"
msgstr ""
-#: readelf.c:17993
+#: readelf.c:18362
msgid " NONE"
msgstr ""
-#: readelf.c:18044
+#: readelf.c:18412
msgid "No MIPS_OPTIONS header found\n"
msgstr ""
-#: readelf.c:18050
+#: readelf.c:18418
msgid "The MIPS options section is too small.\n"
msgstr ""
-#: readelf.c:18055
+#: readelf.c:18423
msgid "options"
msgstr ""
-#: readelf.c:18074
+#: readelf.c:18442
#, c-format
msgid "Invalid size (%u) for MIPS option\n"
msgstr ""
-#: readelf.c:18083
+#: readelf.c:18451
#, c-format
msgid ""
"\n"
@@ -10494,28 +10705,28 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: readelf.c:18121 readelf.c:18153
+#: readelf.c:18489 readelf.c:18521
msgid "Truncated MIPS REGINFO option\n"
msgstr ""
-#: readelf.c:18289
+#: readelf.c:18657
msgid "conflict list found without a dynamic symbol table\n"
msgstr ""
-#: readelf.c:18297
+#: readelf.c:18665
#, c-format
msgid "Overlarge number of conflicts detected: %lx\n"
msgstr ""
-#: readelf.c:18305
+#: readelf.c:18673
msgid "Out of memory allocating space for dynamic conflicts\n"
msgstr ""
-#: readelf.c:18315 readelf.c:18333
+#: readelf.c:18683 readelf.c:18701
msgid "conflict"
msgstr ""
-#: readelf.c:18346
+#: readelf.c:18714
#, c-format
msgid ""
"\n"
@@ -10526,124 +10737,124 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: readelf.c:18350
+#: readelf.c:18718
msgid " Num: Index Value Name"
msgstr ""
-#: readelf.c:18357
+#: readelf.c:18725
#, c-format
msgid "<corrupt symbol index>"
msgstr ""
-#: readelf.c:18368 readelf.c:18494 readelf.c:18582
+#: readelf.c:18736 readelf.c:18862 readelf.c:18950
#, c-format
msgid "<corrupt: %14ld>"
msgstr ""
-#: readelf.c:18391
+#: readelf.c:18759
#, c-format
msgid ""
"The GOT symbol offset (%lu) is greater than the symbol table size (%lu)\n"
msgstr ""
-#: readelf.c:18400
+#: readelf.c:18768
#, c-format
msgid "Too many GOT symbols: %lu\n"
msgstr ""
-#: readelf.c:18411
+#: readelf.c:18779
#, c-format
msgid ""
"\n"
"Primary GOT:\n"
msgstr ""
-#: readelf.c:18417
+#: readelf.c:18785
#, c-format
msgid " %*s %10s %*s Purpose\n"
msgstr ""
-#: readelf.c:18419 readelf.c:18447 readelf.c:18466 readelf.c:18548
-#: readelf.c:18558
+#: readelf.c:18787 readelf.c:18815 readelf.c:18834 readelf.c:18916
+#: readelf.c:18926
msgid "Initial"
msgstr ""
-#: readelf.c:18421
+#: readelf.c:18789
#, c-format
msgid " Lazy resolver\n"
msgstr ""
-#: readelf.c:18436
+#: readelf.c:18804
#, c-format
msgid " Module pointer (GNU extension)\n"
msgstr ""
-#: readelf.c:18462
+#: readelf.c:18830
#, c-format
msgid " Global entries:\n"
msgstr ""
-#: readelf.c:18467 readelf.c:18559
+#: readelf.c:18835 readelf.c:18927
msgid "Sym.Val."
msgstr ""
#. Note for translators: "Ndx" = abbreviated form of "Index".
-#: readelf.c:18470 readelf.c:18559
+#: readelf.c:18838 readelf.c:18927
msgid "Ndx"
msgstr ""
-#: readelf.c:18470 readelf.c:18559
+#: readelf.c:18838 readelf.c:18927
msgid "Name"
msgstr ""
-#: readelf.c:18480
+#: readelf.c:18848
#, c-format
msgid "<no dynamic symbols>"
msgstr ""
-#: readelf.c:18497
+#: readelf.c:18865
#, c-format
msgid "<symbol index %lu exceeds number of dynamic symbols>"
msgstr ""
-#: readelf.c:18538
+#: readelf.c:18906
msgid "Procedure Linkage Table data"
msgstr ""
-#: readelf.c:18547
+#: readelf.c:18915
#, c-format
msgid " %*s %*s Purpose\n"
msgstr ""
-#: readelf.c:18550
+#: readelf.c:18918
#, c-format
msgid " PLT lazy resolver\n"
msgstr ""
-#: readelf.c:18552
+#: readelf.c:18920
#, c-format
msgid " Module pointer\n"
msgstr ""
-#: readelf.c:18555
+#: readelf.c:18923
#, c-format
msgid " Entries:\n"
msgstr ""
-#: readelf.c:18569
+#: readelf.c:18937
#, c-format
msgid "<corrupt symbol index: %lu>"
msgstr ""
-#: readelf.c:18608
+#: readelf.c:18976
msgid "NDS32 elf flags section"
msgstr ""
-#: readelf.c:18674
+#: readelf.c:19042
msgid "liblist string table"
msgstr ""
-#: readelf.c:18686
+#: readelf.c:19054
#, c-format
msgid ""
"\n"
@@ -10654,441 +10865,453 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: readelf.c:18692
+#: readelf.c:19060
msgid " Library Time Stamp Checksum Version Flags"
msgstr ""
-#: readelf.c:18742
+#: readelf.c:19110
msgid "NT_AUXV (auxiliary vector)"
msgstr ""
-#: readelf.c:18744
+#: readelf.c:19112
msgid "NT_PRSTATUS (prstatus structure)"
msgstr ""
-#: readelf.c:18746
+#: readelf.c:19114
msgid "NT_FPREGSET (floating point registers)"
msgstr ""
-#: readelf.c:18748
+#: readelf.c:19116
msgid "NT_PRPSINFO (prpsinfo structure)"
msgstr ""
-#: readelf.c:18750
+#: readelf.c:19118
msgid "NT_TASKSTRUCT (task structure)"
msgstr ""
-#: readelf.c:18752
+#: readelf.c:19120
msgid "NT_GDB_TDESC (GDB XML target description)"
msgstr ""
-#: readelf.c:18754
+#: readelf.c:19122
msgid "NT_PRXFPREG (user_xfpregs structure)"
msgstr ""
-#: readelf.c:18756
+#: readelf.c:19124
msgid "NT_PPC_VMX (ppc Altivec registers)"
msgstr ""
-#: readelf.c:18758
+#: readelf.c:19126
msgid "NT_PPC_VSX (ppc VSX registers)"
msgstr ""
-#: readelf.c:18760
+#: readelf.c:19128
msgid "NT_PPC_TAR (ppc TAR register)"
msgstr ""
-#: readelf.c:18762
+#: readelf.c:19130
msgid "NT_PPC_PPR (ppc PPR register)"
msgstr ""
-#: readelf.c:18764
+#: readelf.c:19132
msgid "NT_PPC_DSCR (ppc DSCR register)"
msgstr ""
-#: readelf.c:18766
+#: readelf.c:19134
msgid "NT_PPC_EBB (ppc EBB registers)"
msgstr ""
-#: readelf.c:18768
+#: readelf.c:19136
msgid "NT_PPC_PMU (ppc PMU registers)"
msgstr ""
-#: readelf.c:18770
+#: readelf.c:19138
msgid "NT_PPC_TM_CGPR (ppc checkpointed GPR registers)"
msgstr ""
-#: readelf.c:18772
+#: readelf.c:19140
msgid "NT_PPC_TM_CFPR (ppc checkpointed floating point registers)"
msgstr ""
-#: readelf.c:18774
+#: readelf.c:19142
msgid "NT_PPC_TM_CVMX (ppc checkpointed Altivec registers)"
msgstr ""
-#: readelf.c:18776
+#: readelf.c:19144
msgid "NT_PPC_TM_CVSX (ppc checkpointed VSX registers)"
msgstr ""
-#: readelf.c:18778
+#: readelf.c:19146
msgid "NT_PPC_TM_SPR (ppc TM special purpose registers)"
msgstr ""
-#: readelf.c:18780
+#: readelf.c:19148
msgid "NT_PPC_TM_CTAR (ppc checkpointed TAR register)"
msgstr ""
-#: readelf.c:18782
+#: readelf.c:19150
msgid "NT_PPC_TM_CPPR (ppc checkpointed PPR register)"
msgstr ""
-#: readelf.c:18784
+#: readelf.c:19152
msgid "NT_PPC_TM_CDSCR (ppc checkpointed DSCR register)"
msgstr ""
-#: readelf.c:18786
+#: readelf.c:19154
msgid "NT_386_TLS (x86 TLS information)"
msgstr ""
-#: readelf.c:18788
+#: readelf.c:19156
msgid "NT_386_IOPERM (x86 I/O permissions)"
msgstr ""
-#: readelf.c:18790
+#: readelf.c:19158
msgid "NT_X86_XSTATE (x86 XSAVE extended state)"
msgstr ""
-#: readelf.c:18792
+#: readelf.c:19160
msgid "NT_X86_CET (x86 CET state)"
msgstr ""
-#: readelf.c:18794
+#: readelf.c:19162
msgid "NT_S390_HIGH_GPRS (s390 upper register halves)"
msgstr ""
-#: readelf.c:18796
+#: readelf.c:19164
msgid "NT_S390_TIMER (s390 timer register)"
msgstr ""
-#: readelf.c:18798
+#: readelf.c:19166
msgid "NT_S390_TODCMP (s390 TOD comparator register)"
msgstr ""
-#: readelf.c:18800
+#: readelf.c:19168
msgid "NT_S390_TODPREG (s390 TOD programmable register)"
msgstr ""
-#: readelf.c:18802
+#: readelf.c:19170
msgid "NT_S390_CTRS (s390 control registers)"
msgstr ""
-#: readelf.c:18804
+#: readelf.c:19172
msgid "NT_S390_PREFIX (s390 prefix register)"
msgstr ""
-#: readelf.c:18806
+#: readelf.c:19174
msgid "NT_S390_LAST_BREAK (s390 last breaking event address)"
msgstr ""
-#: readelf.c:18808
+#: readelf.c:19176
msgid "NT_S390_SYSTEM_CALL (s390 system call restart data)"
msgstr ""
-#: readelf.c:18810
+#: readelf.c:19178
msgid "NT_S390_TDB (s390 transaction diagnostic block)"
msgstr ""
-#: readelf.c:18812
+#: readelf.c:19180
msgid "NT_S390_VXRS_LOW (s390 vector registers 0-15 upper half)"
msgstr ""
-#: readelf.c:18814
+#: readelf.c:19182
msgid "NT_S390_VXRS_HIGH (s390 vector registers 16-31)"
msgstr ""
-#: readelf.c:18816
+#: readelf.c:19184
msgid "NT_S390_GS_CB (s390 guarded-storage registers)"
msgstr ""
-#: readelf.c:18818
+#: readelf.c:19186
msgid "NT_S390_GS_BC (s390 guarded-storage broadcast control)"
msgstr ""
-#: readelf.c:18820
+#: readelf.c:19188
msgid "NT_ARM_VFP (arm VFP registers)"
msgstr ""
-#: readelf.c:18822
+#: readelf.c:19190
msgid "NT_ARM_TLS (AArch TLS registers)"
msgstr ""
-#: readelf.c:18824
+#: readelf.c:19192
msgid "NT_ARM_HW_BREAK (AArch hardware breakpoint registers)"
msgstr ""
-#: readelf.c:18826
+#: readelf.c:19194
msgid "NT_ARM_HW_WATCH (AArch hardware watchpoint registers)"
msgstr ""
-#: readelf.c:18828
+#: readelf.c:19196
msgid "NT_ARM_SVE (AArch SVE registers)"
msgstr ""
-#: readelf.c:18830
+#: readelf.c:19198
msgid "NT_ARM_PAC_MASK (AArch pointer authentication code masks)"
msgstr ""
-#: readelf.c:18832
+#: readelf.c:19200
+msgid "NT_ARM_PACA_KEYS (ARM pointer authentication address keys)"
+msgstr ""
+
+#: readelf.c:19202
+msgid "NT_ARM_PACG_KEYS (ARM pointer authentication generic keys)"
+msgstr ""
+
+#: readelf.c:19204
msgid "NT_ARM_TAGGED_ADDR_CTRL (AArch tagged address control)"
msgstr ""
-#: readelf.c:18834
+#: readelf.c:19206
+msgid "NT_ARM_PAC_ENABLED_KEYS (AArch64 pointer authentication enabled keys)"
+msgstr ""
+
+#: readelf.c:19208
msgid "NT_ARC_V2 (ARC HS accumulator/extra registers)"
msgstr ""
-#: readelf.c:18836
+#: readelf.c:19210
msgid "NT_RISCV_CSR (RISC-V control and status registers)"
msgstr ""
-#: readelf.c:18838
+#: readelf.c:19212
msgid "NT_PSTATUS (pstatus structure)"
msgstr ""
-#: readelf.c:18840
+#: readelf.c:19214
msgid "NT_FPREGS (floating point registers)"
msgstr ""
-#: readelf.c:18842
+#: readelf.c:19216
msgid "NT_PSINFO (psinfo structure)"
msgstr ""
-#: readelf.c:18844
+#: readelf.c:19218
msgid "NT_LWPSTATUS (lwpstatus_t structure)"
msgstr ""
-#: readelf.c:18846
+#: readelf.c:19220
msgid "NT_LWPSINFO (lwpsinfo_t structure)"
msgstr ""
-#: readelf.c:18848
+#: readelf.c:19222
msgid "NT_WIN32PSTATUS (win32_pstatus structure)"
msgstr ""
-#: readelf.c:18850
+#: readelf.c:19224
msgid "NT_SIGINFO (siginfo_t data)"
msgstr ""
-#: readelf.c:18852
+#: readelf.c:19226
msgid "NT_FILE (mapped files)"
msgstr ""
-#: readelf.c:18854
-msgid "NT_MEMTAG (memory tags)"
-msgstr ""
-
-#: readelf.c:18862
+#: readelf.c:19234
msgid "NT_VERSION (version)"
msgstr ""
-#: readelf.c:18864
+#: readelf.c:19236
msgid "NT_ARCH (architecture)"
msgstr ""
-#: readelf.c:18866
+#: readelf.c:19238
msgid "OPEN"
msgstr ""
-#: readelf.c:18868
+#: readelf.c:19240
msgid "func"
msgstr ""
-#: readelf.c:18870
+#: readelf.c:19242
msgid "GO BUILDID"
msgstr ""
-#: readelf.c:18875 readelf.c:18994 readelf.c:19735 readelf.c:19903
-#: readelf.c:19980 readelf.c:20097
+#: readelf.c:19244
+msgid "FDO_PACKAGING_METADATA"
+msgstr ""
+
+#: readelf.c:19249 readelf.c:19368 readelf.c:20109 readelf.c:20277
+#: readelf.c:20374 readelf.c:20502
#, c-format
msgid "Unknown note type: (0x%08x)"
msgstr ""
-#: readelf.c:18896
+#: readelf.c:19270
#, c-format
msgid " Cannot decode 64-bit note in 32-bit build\n"
msgstr ""
-#: readelf.c:18904
+#: readelf.c:19278
msgid " Malformed note - too short for header\n"
msgstr ""
-#: readelf.c:18913
+#: readelf.c:19287
msgid " Malformed note - does not end with \\0\n"
msgstr ""
-#: readelf.c:18926
+#: readelf.c:19300
msgid " Malformed note - too short for supplied file count\n"
msgstr ""
-#: readelf.c:18930
+#: readelf.c:19304
#, c-format
msgid " Page size: "
msgstr ""
-#: readelf.c:18934
+#: readelf.c:19308
#, c-format
msgid " %*s%*s%*s\n"
msgstr ""
-#: readelf.c:18935
+#: readelf.c:19309
msgid "Start"
msgstr ""
-#: readelf.c:18936
+#: readelf.c:19310
msgid "End"
msgstr ""
-#: readelf.c:18937
+#: readelf.c:19311
msgid "Page Offset"
msgstr ""
-#: readelf.c:18945
+#: readelf.c:19319
msgid " Malformed note - filenames end too early\n"
msgstr ""
-#: readelf.c:18977
+#: readelf.c:19351
msgid "NT_GNU_ABI_TAG (ABI version tag)"
msgstr ""
-#: readelf.c:18979
+#: readelf.c:19353
msgid "NT_GNU_HWCAP (DSO-supplied software HWCAP info)"
msgstr ""
-#: readelf.c:18981
+#: readelf.c:19355
msgid "NT_GNU_BUILD_ID (unique build ID bitstring)"
msgstr ""
-#: readelf.c:18983
+#: readelf.c:19357
msgid "NT_GNU_GOLD_VERSION (gold version)"
msgstr ""
-#: readelf.c:18985
+#: readelf.c:19359
msgid "NT_GNU_PROPERTY_TYPE_0"
msgstr ""
-#: readelf.c:18987
+#: readelf.c:19361
msgid "NT_GNU_BUILD_ATTRIBUTE_OPEN"
msgstr ""
-#: readelf.c:18989
+#: readelf.c:19363
msgid "NT_GNU_BUILD_ATTRIBUTE_FUNC"
msgstr ""
-#: readelf.c:19078 readelf.c:19209 readelf.c:19246
+#: readelf.c:19452 readelf.c:19583 readelf.c:19620
#, c-format
msgid "<None>"
msgstr ""
-#: readelf.c:19358
+#: readelf.c:19732
#, c-format
msgid " Properties: "
msgstr ""
-#: readelf.c:19362
+#: readelf.c:19736
#, c-format
msgid "<corrupt GNU_PROPERTY_TYPE, size = %#lx>\n"
msgstr ""
-#: readelf.c:19374
+#: readelf.c:19748
#, c-format
msgid "<corrupt descsz: %#lx>\n"
msgstr ""
-#: readelf.c:19385
+#: readelf.c:19759
#, c-format
msgid "<corrupt type (%#x) datasz: %#x>\n"
msgstr ""
-#: readelf.c:19407 readelf.c:19461 readelf.c:19483
+#: readelf.c:19781 readelf.c:19835 readelf.c:19857
#, c-format
msgid "x86 ISA used: <corrupt length: %#x> "
msgstr ""
-#: readelf.c:19418 readelf.c:19472 readelf.c:19494
+#: readelf.c:19792 readelf.c:19846 readelf.c:19868
#, c-format
msgid "x86 ISA needed: <corrupt length: %#x> "
msgstr ""
-#: readelf.c:19429
+#: readelf.c:19803
#, c-format
msgid "x86 feature: <corrupt length: %#x> "
msgstr ""
-#: readelf.c:19440
+#: readelf.c:19814
#, c-format
msgid "x86 feature used: <corrupt length: %#x> "
msgstr ""
-#: readelf.c:19451
+#: readelf.c:19825
#, c-format
msgid "x86 feature needed: <corrupt length: %#x> "
msgstr ""
-#: readelf.c:19513 readelf.c:19527 readelf.c:19535 readelf.c:19566
+#: readelf.c:19887 readelf.c:19901 readelf.c:19909 readelf.c:19940
#, c-format
msgid "<corrupt length: %#x> "
msgstr ""
-#: readelf.c:19525
+#: readelf.c:19899
#, c-format
msgid "stack size: "
msgstr ""
-#: readelf.c:19548
+#: readelf.c:19922
#, c-format
msgid "1_needed: <corrupt length: %#x> "
msgstr ""
-#: readelf.c:19562
+#: readelf.c:19936
#, c-format
msgid "UINT32_AND (%#x): "
msgstr ""
-#: readelf.c:19564
+#: readelf.c:19938
#, c-format
msgid "UINT32_OR (%#x): "
msgstr ""
-#: readelf.c:19576
+#: readelf.c:19950
#, c-format
msgid "<unknown type %#x data: "
msgstr ""
-#: readelf.c:19578
+#: readelf.c:19952
#, c-format
msgid "<processor-specific type %#x data: "
msgstr ""
-#: readelf.c:19580
+#: readelf.c:19954
#, c-format
msgid "<application-specific type %#x data: "
msgstr ""
-#: readelf.c:19609
+#: readelf.c:19983
#, c-format
msgid " Build ID: "
msgstr ""
-#: readelf.c:19624
+#: readelf.c:19998
#, c-format
msgid " <corrupt GNU_ABI_TAG>\n"
msgstr ""
-#: readelf.c:19661
+#: readelf.c:20035
#, c-format
msgid " OS: %s, ABI: %ld.%ld.%ld\n"
msgstr ""
-#: readelf.c:19670
+#: readelf.c:20044
#, c-format
msgid " Version: "
msgstr ""
@@ -11098,490 +11321,515 @@ msgstr ""
#. is a series of entries, where each entry is a single byte followed
#. by a nul terminated string. The byte gives the bit number to test
#. if enabled in the bitmask.
-#: readelf.c:19686
+#: readelf.c:20060
#, c-format
msgid " Hardware Capabilities: "
msgstr ""
-#: readelf.c:19689
+#: readelf.c:20063
msgid "<corrupt GNU_HWCAP>\n"
msgstr ""
-#: readelf.c:19694
+#: readelf.c:20068
#, c-format
msgid "num entries: %ld, enabled mask: %lx\n"
msgstr ""
-#: readelf.c:19710
+#: readelf.c:20084
#, c-format
msgid " Description data: "
msgstr ""
-#: readelf.c:19728
+#: readelf.c:20102
msgid "Alignment of 8-byte objects"
msgstr ""
-#: readelf.c:19729
+#: readelf.c:20103
msgid "Sizeof double and long double"
msgstr ""
-#: readelf.c:19730
+#: readelf.c:20104
msgid "Type of FPU support needed"
msgstr ""
-#: readelf.c:19731
+#: readelf.c:20105
msgid "Use of SIMD instructions"
msgstr ""
-#: readelf.c:19732
+#: readelf.c:20106
msgid "Use of cache"
msgstr ""
-#: readelf.c:19733
+#: readelf.c:20107
msgid "Use of MMU"
msgstr ""
-#: readelf.c:19769
+#: readelf.c:20143
#, c-format
msgid "4-bytes\n"
msgstr ""
-#: readelf.c:19770
+#: readelf.c:20144
#, c-format
msgid "8-bytes\n"
msgstr ""
-#: readelf.c:19777
+#: readelf.c:20151
#, c-format
msgid "FPU-2.0\n"
msgstr ""
-#: readelf.c:19778
+#: readelf.c:20152
#, c-format
msgid "FPU-3.0\n"
msgstr ""
-#: readelf.c:19787
+#: readelf.c:20161
#, c-format
msgid "yes\n"
msgstr ""
-#: readelf.c:19797
+#: readelf.c:20171
#, c-format
msgid "unknown value: %x\n"
msgstr ""
-#: readelf.c:19853
+#: readelf.c:20227
msgid "NT_THRMISC (thrmisc structure)"
msgstr ""
-#: readelf.c:19855
+#: readelf.c:20229
msgid "NT_PROCSTAT_PROC (proc data)"
msgstr ""
-#: readelf.c:19857
+#: readelf.c:20231
msgid "NT_PROCSTAT_FILES (files data)"
msgstr ""
-#: readelf.c:19859
+#: readelf.c:20233
msgid "NT_PROCSTAT_VMMAP (vmmap data)"
msgstr ""
-#: readelf.c:19861
+#: readelf.c:20235
msgid "NT_PROCSTAT_GROUPS (groups data)"
msgstr ""
-#: readelf.c:19863
+#: readelf.c:20237
msgid "NT_PROCSTAT_UMASK (umask data)"
msgstr ""
-#: readelf.c:19865
+#: readelf.c:20239
msgid "NT_PROCSTAT_RLIMIT (rlimit data)"
msgstr ""
-#: readelf.c:19867
+#: readelf.c:20241
msgid "NT_PROCSTAT_OSREL (osreldate data)"
msgstr ""
-#: readelf.c:19869
+#: readelf.c:20243
msgid "NT_PROCSTAT_PSSTRINGS (ps_strings data)"
msgstr ""
-#: readelf.c:19871
+#: readelf.c:20245
msgid "NT_PROCSTAT_AUXV (auxv data)"
msgstr ""
-#: readelf.c:19873
+#: readelf.c:20247
msgid "NT_PTLWPINFO (ptrace_lwpinfo structure)"
msgstr ""
#. NetBSD core "procinfo" structure.
-#: readelf.c:19887
+#: readelf.c:20261
msgid "NetBSD procinfo structure"
msgstr ""
-#: readelf.c:19890
+#: readelf.c:20264
msgid "NetBSD ELF auxiliary vector data"
msgstr ""
-#: readelf.c:19893
+#: readelf.c:20267
msgid "PT_LWPSTATUS (ptrace_lwpstatus structure)"
msgstr ""
-#: readelf.c:19922 readelf.c:19939 readelf.c:19953
+#: readelf.c:20296 readelf.c:20313 readelf.c:20327
msgid "PT_GETREGS (reg structure)"
msgstr ""
-#: readelf.c:19924 readelf.c:19941 readelf.c:19955
+#: readelf.c:20298 readelf.c:20315 readelf.c:20329
msgid "PT_GETFPREGS (fpreg structure)"
msgstr ""
-#: readelf.c:19937
+#: readelf.c:20311
msgid "PT___GETREGS40 (old reg structure)"
msgstr ""
-#: readelf.c:19974
+#: readelf.c:20346
+msgid "OpenBSD procinfo structure"
+msgstr ""
+
+#: readelf.c:20348
+msgid "OpenBSD ELF auxiliary vector data"
+msgstr ""
+
+#: readelf.c:20350
+msgid "OpenBSD regular registers"
+msgstr ""
+
+#: readelf.c:20352
+msgid "OpenBSD floating point registers"
+msgstr ""
+
+#: readelf.c:20354
+msgid "OpenBSD window cookie"
+msgstr ""
+
+#: readelf.c:20368
msgid "NT_STAPSDT (SystemTap probe descriptors)"
msgstr ""
-#: readelf.c:20042
+#: readelf.c:20436
#, c-format
msgid " Provider: %s\n"
msgstr ""
-#: readelf.c:20043
+#: readelf.c:20437
#, c-format
msgid " Name: %s\n"
msgstr ""
-#: readelf.c:20044
+#: readelf.c:20438
#, c-format
msgid " Location: "
msgstr ""
-#: readelf.c:20046
+#: readelf.c:20440
#, c-format
msgid ", Base: "
msgstr ""
-#: readelf.c:20048
+#: readelf.c:20442
#, c-format
msgid ", Semaphore: "
msgstr ""
-#: readelf.c:20051
+#: readelf.c:20445
#, c-format
msgid " Arguments: %s\n"
msgstr ""
-#: readelf.c:20056
+#: readelf.c:20450
#, c-format
msgid " <corrupt - note is too small>\n"
msgstr ""
-#: readelf.c:20057
+#: readelf.c:20451
msgid "corrupt stapdt note - the data size is too small\n"
msgstr ""
-#: readelf.c:20069
+#: readelf.c:20460
+#, c-format
+msgid " Packaging Metadata: %.*s\n"
+msgstr ""
+
+#: readelf.c:20474
msgid "NT_VMS_MHD (module header)"
msgstr ""
-#: readelf.c:20071
+#: readelf.c:20476
msgid "NT_VMS_LNM (language name)"
msgstr ""
-#: readelf.c:20073
+#: readelf.c:20478
msgid "NT_VMS_SRC (source files)"
msgstr ""
-#: readelf.c:20077
+#: readelf.c:20482
msgid "NT_VMS_EIDC (consistency check)"
msgstr ""
-#: readelf.c:20079
+#: readelf.c:20484
msgid "NT_VMS_FPMODE (FP mode)"
msgstr ""
-#: readelf.c:20083
+#: readelf.c:20488
msgid "NT_VMS_IMGNAM (image name)"
msgstr ""
-#: readelf.c:20085
+#: readelf.c:20490
msgid "NT_VMS_IMGID (image id)"
msgstr ""
-#: readelf.c:20087
+#: readelf.c:20492
msgid "NT_VMS_LINKID (link id)"
msgstr ""
-#: readelf.c:20089
+#: readelf.c:20494
msgid "NT_VMS_IMGBID (build id)"
msgstr ""
-#: readelf.c:20091
+#: readelf.c:20496
msgid "NT_VMS_GSTNAM (sym table name)"
msgstr ""
-#: readelf.c:20118
+#: readelf.c:20523
#, c-format
msgid " Creation date : %.17s\n"
msgstr ""
-#: readelf.c:20119
+#: readelf.c:20524
#, c-format
msgid " Last patch date: %.17s\n"
msgstr ""
-#: readelf.c:20122
+#: readelf.c:20527
#, c-format
msgid " Module name : %s\n"
msgstr ""
-#: readelf.c:20124
+#: readelf.c:20529
#, c-format
msgid " Module version : %s\n"
msgstr ""
-#: readelf.c:20126 readelf.c:20131
+#: readelf.c:20531 readelf.c:20536
#, c-format
msgid " Module version : <missing>\n"
msgstr ""
-#: readelf.c:20130
+#: readelf.c:20535
#, c-format
msgid " Module name : <missing>\n"
msgstr ""
-#: readelf.c:20136
+#: readelf.c:20541
#, c-format
msgid " Language: %.*s\n"
msgstr ""
-#: readelf.c:20141
+#: readelf.c:20546
#, c-format
msgid " Floating Point mode: "
msgstr ""
-#: readelf.c:20151
+#: readelf.c:20556
#, c-format
msgid " Link time: "
msgstr ""
-#: readelf.c:20162
+#: readelf.c:20567
#, c-format
msgid " Patch time: "
msgstr ""
-#: readelf.c:20176
+#: readelf.c:20581
#, c-format
msgid " Major id: %u, minor id: %u\n"
msgstr ""
-#: readelf.c:20179
+#: readelf.c:20584
#, c-format
msgid " Last modified : "
msgstr ""
-#: readelf.c:20182
+#: readelf.c:20587
#, c-format
msgid ""
"\n"
" Link flags : "
msgstr ""
-#: readelf.c:20185
+#: readelf.c:20590
#, c-format
msgid " Header flags: 0x%08x\n"
msgstr ""
-#: readelf.c:20187
+#: readelf.c:20592
#, c-format
msgid " Image id : %.*s\n"
msgstr ""
-#: readelf.c:20192
+#: readelf.c:20597
#, c-format
msgid " Image name: %.*s\n"
msgstr ""
-#: readelf.c:20196
+#: readelf.c:20601
#, c-format
msgid " Global symbol table name: %.*s\n"
msgstr ""
-#: readelf.c:20200
+#: readelf.c:20605
#, c-format
msgid " Image id: %.*s\n"
msgstr ""
-#: readelf.c:20204
+#: readelf.c:20609
#, c-format
msgid " Linker id: %.*s\n"
msgstr ""
-#: readelf.c:20214
+#: readelf.c:20619
#, c-format
msgid " <corrupt - data size is too small>\n"
msgstr ""
-#: readelf.c:20215
+#: readelf.c:20620
msgid "corrupt IA64 note: data size is too small\n"
msgstr ""
-#: readelf.c:20382 readelf.c:20390
+#: readelf.c:20787 readelf.c:20795
#, c-format
msgid " Applies to region from %#lx to %#lx\n"
msgstr ""
-#: readelf.c:20385 readelf.c:20392
+#: readelf.c:20790 readelf.c:20797
#, c-format
msgid " Applies to region from %#lx\n"
msgstr ""
-#: readelf.c:20412
+#: readelf.c:20817
#, c-format
msgid " <invalid description size: %lx>\n"
msgstr ""
-#: readelf.c:20413
+#: readelf.c:20818
#, c-format
msgid " <invalid descsz>"
msgstr ""
-#: readelf.c:20439
+#: readelf.c:20844
#, c-format
msgid "Gap in build notes detected from %#lx to %#lx\n"
msgstr ""
-#: readelf.c:20442 readelf.c:20453
+#: readelf.c:20847 readelf.c:20858
#, c-format
msgid " Applies to region from %#lx"
msgstr ""
-#: readelf.c:20447 readelf.c:20458
+#: readelf.c:20852 readelf.c:20863
#, c-format
msgid " to %#lx"
msgstr ""
-#: readelf.c:20464
+#: readelf.c:20869
#, c-format
msgid " (%s)"
msgstr ""
-#: readelf.c:20485 readelf.c:20500
+#: readelf.c:20890 readelf.c:20905
#, c-format
msgid "corrupt name field in GNU build attribute note: size = %ld\n"
msgstr ""
-#: readelf.c:20486 readelf.c:20501
+#: readelf.c:20891 readelf.c:20906
msgid " <corrupt name>"
msgstr ""
-#: readelf.c:20520
+#: readelf.c:20925
#, c-format
msgid "unrecognised attribute type in name field: %d\n"
msgstr ""
-#: readelf.c:20521
+#: readelf.c:20926
msgid "<unknown name type>"
msgstr ""
-#: readelf.c:20531
+#: readelf.c:20936
msgid "<version>"
msgstr ""
-#: readelf.c:20536
+#: readelf.c:20941
msgid "<stack prot>"
msgstr ""
-#: readelf.c:20541
+#: readelf.c:20946
msgid "<relro>"
msgstr ""
-#: readelf.c:20546
+#: readelf.c:20951
msgid "<stack size>"
msgstr ""
-#: readelf.c:20551
+#: readelf.c:20956
msgid "<tool>"
msgstr ""
-#: readelf.c:20556
+#: readelf.c:20961
msgid "<ABI>"
msgstr ""
-#: readelf.c:20561
+#: readelf.c:20966
msgid "<PIC>"
msgstr ""
-#: readelf.c:20566
+#: readelf.c:20971
msgid "<short enum>"
msgstr ""
-#: readelf.c:20585
+#: readelf.c:20990
#, c-format
msgid "unrecognised byte in name field: %d\n"
msgstr ""
-#: readelf.c:20586
+#: readelf.c:20991
#, c-format
msgid "<unknown:_%d>"
msgstr ""
-#: readelf.c:20598
+#: readelf.c:21003
#, c-format
msgid "attribute does not have an expected type (%c)\n"
msgstr ""
-#: readelf.c:20602
+#: readelf.c:21007
#, c-format
msgid "corrupt name field: namesz: %lu but parsing gets to %ld\n"
msgstr ""
-#: readelf.c:20629
+#: readelf.c:21034
#, c-format
msgid "corrupt numeric name field: too many bytes in the value: %x\n"
msgstr ""
-#: readelf.c:20801
+#: readelf.c:21212
#, c-format
msgid " description data: "
msgstr ""
-#: readelf.c:20843
+#: readelf.c:21254
msgid "notes"
msgstr ""
-#: readelf.c:20855
+#: readelf.c:21266
#, c-format
msgid "Displaying notes found in: %s\n"
msgstr ""
-#: readelf.c:20857
+#: readelf.c:21268
#, c-format
msgid "Displaying notes found at file offset 0x%08lx with length 0x%08lx:\n"
msgstr ""
-#: readelf.c:20869
+#: readelf.c:21280
#, c-format
msgid "Corrupt note: alignment %ld, expecting 4 or 8\n"
msgstr ""
-#: readelf.c:20875
+#: readelf.c:21286
#, c-format
msgid " %-20s %-10s\tDescription\n"
msgstr ""
-#: readelf.c:20875
+#: readelf.c:21286
msgid "Owner"
msgstr ""
-#: readelf.c:20875
+#: readelf.c:21286
msgid "Data size"
msgstr ""
-#: readelf.c:20893 readelf.c:20922
+#: readelf.c:21304 readelf.c:21333
#, c-format
msgid "Corrupt note: only %ld byte remains, not enough for a full note\n"
msgid_plural ""
@@ -11589,25 +11837,25 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: readelf.c:20950
+#: readelf.c:21361
#, c-format
msgid "note with invalid namesz and/or descsz found at offset 0x%lx\n"
msgstr ""
-#: readelf.c:20952
+#: readelf.c:21363
#, c-format
msgid " type: 0x%lx, namesize: 0x%08lx, descsize: 0x%08lx, alignment: %u\n"
msgstr ""
-#: readelf.c:20970
+#: readelf.c:21381
msgid "Out of memory allocating space for inote name\n"
msgstr ""
-#: readelf.c:21030
+#: readelf.c:21441
msgid "v850 notes"
msgstr ""
-#: readelf.c:21037
+#: readelf.c:21448
#, c-format
msgid ""
"\n"
@@ -11615,80 +11863,80 @@ msgid ""
"length 0x%lx:\n"
msgstr ""
-#: readelf.c:21054
+#: readelf.c:21465
#, c-format
msgid "Corrupt note: name size is too big: %lx\n"
msgstr ""
-#: readelf.c:21064
+#: readelf.c:21475
#, c-format
msgid "corrupt descsz found in note at offset 0x%lx\n"
msgstr ""
-#: readelf.c:21066 readelf.c:21079
+#: readelf.c:21477 readelf.c:21490
#, c-format
msgid " type: 0x%lx, namesize: 0x%lx, descsize: 0x%lx\n"
msgstr ""
-#: readelf.c:21077
+#: readelf.c:21488
#, c-format
msgid "corrupt namesz found in note at offset 0x%lx\n"
msgstr ""
-#: readelf.c:21156
+#: readelf.c:21567
#, c-format
msgid "No notes found in linked file '%s'.\n"
msgstr ""
-#: readelf.c:21159
+#: readelf.c:21570
#, c-format
msgid "No notes found file.\n"
msgstr ""
-#: readelf.c:21168
+#: readelf.c:21579
#, c-format
msgid " Unknown GNU attribute: %s\n"
msgstr ""
-#: readelf.c:21316
+#: readelf.c:21727
msgid ""
"This instance of readelf has been built without support for a\n"
"64 bit data type and so it cannot read 64 bit ELF files.\n"
msgstr ""
-#: readelf.c:21486
+#: readelf.c:21897
#, c-format
msgid "%s: Failed to read file header\n"
msgstr ""
-#: readelf.c:21501
+#: readelf.c:21912
#, c-format
msgid ""
"\n"
"File: %s\n"
msgstr ""
-#: readelf.c:21662
+#: readelf.c:22073
#, c-format
msgid "%s: unable to dump the index as none was found\n"
msgstr ""
-#: readelf.c:21669
+#: readelf.c:22080
#, c-format
msgid "Index of archive %s: (%lu entries, 0x%lx bytes in the symbol table)\n"
msgstr ""
-#: readelf.c:21693
+#: readelf.c:22104
#, c-format
msgid "Contents of binary %s at offset "
msgstr ""
-#: readelf.c:21705
+#: readelf.c:22116
#, c-format
msgid "%s: end of the symbol table reached before the end of the index\n"
msgstr ""
-#: readelf.c:21724
+#: readelf.c:22135
#, c-format
msgid ""
"%s: %ld byte remains in the symbol table, but without corresponding entries "
@@ -11699,36 +11947,36 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: readelf.c:21737
+#: readelf.c:22148
#, c-format
msgid "%s: failed to seek back to start of object files in the archive\n"
msgstr ""
-#: readelf.c:21829 readelf.c:21948
+#: readelf.c:22240 readelf.c:22359
#, c-format
msgid "Input file '%s' is not readable.\n"
msgstr ""
-#: readelf.c:21857
+#: readelf.c:22268
#, c-format
msgid "%s: contains corrupt thin archive: %s\n"
msgstr ""
-#: readelf.c:21875
+#: readelf.c:22286
#, c-format
msgid "%s: failed to seek to archive member.\n"
msgstr ""
-#: readelf.c:21940
+#: readelf.c:22351
msgid "Out of memory allocating file data structure\n"
msgstr ""
-#: readelf.c:21977
+#: readelf.c:22388
#, c-format
msgid "File %s is not an archive so its index cannot be displayed.\n"
msgstr ""
-#: readelf.c:22048
+#: readelf.c:22459
msgid "Nothing to do.\n"
msgstr ""
@@ -12335,77 +12583,77 @@ msgstr ""
msgid "Type index number %d out of range\n"
msgstr ""
-#: stabs.c:3506
+#: stabs.c:3507
#, c-format
msgid "Unrecognized XCOFF type %d\n"
msgstr ""
-#: stabs.c:3799
+#: stabs.c:3798
#, c-format
msgid "bad mangled name `%s'\n"
msgstr ""
-#: stabs.c:3894
+#: stabs.c:3893
#, c-format
msgid "no argument types in mangled string\n"
msgstr ""
-#: stabs.c:5242
+#: stabs.c:5241
#, c-format
msgid "Demangled name is not a function\n"
msgstr ""
-#: stabs.c:5284
+#: stabs.c:5283
#, c-format
msgid "Unexpected type in v3 arglist demangling\n"
msgstr ""
-#: stabs.c:5356
+#: stabs.c:5355
#, c-format
msgid "Unrecognized demangle component %d\n"
msgstr ""
-#: stabs.c:5408
+#: stabs.c:5407
#, c-format
msgid "Failed to print demangled template\n"
msgstr ""
-#: stabs.c:5488
+#: stabs.c:5487
#, c-format
msgid "Couldn't get demangled builtin type\n"
msgstr ""
-#: stabs.c:5537
+#: stabs.c:5536
#, c-format
msgid "Unexpected demangled varargs\n"
msgstr ""
-#: stabs.c:5544
+#: stabs.c:5543
#, c-format
msgid "Unrecognized demangled builtin type\n"
msgstr ""
-#: strings.c:198 strings.c:265
+#: strings.c:229 strings.c:316
#, c-format
msgid "invalid integer argument %s"
msgstr ""
-#: strings.c:268
+#: strings.c:319
#, c-format
msgid "invalid minimum string length %d"
msgstr ""
-#: strings.c:339
+#: strings.c:390
#, c-format
msgid "%s: Reading section %s failed: %s"
msgstr ""
-#: strings.c:678
+#: strings.c:1313
#, c-format
msgid " Display printable strings in [file(s)] (stdin by default)\n"
msgstr ""
-#: strings.c:682
+#: strings.c:1317
#, c-format
msgid ""
" -a - --all Scan the entire file, not just the data section "
@@ -12413,7 +12661,7 @@ msgid ""
" -d --data Only scan the data sections in the file\n"
msgstr ""
-#: strings.c:686
+#: strings.c:1321
#, c-format
msgid ""
" -a - --all Scan the entire file, not just the data section\n"
@@ -12421,13 +12669,13 @@ msgid ""
"[default]\n"
msgstr ""
-#: strings.c:690
+#: strings.c:1325
#, c-format
msgid ""
" -f --print-file-name Print the name of the file before each string\n"
-" -n --bytes=[number] Locate & print any NUL-terminated sequence of "
-"at\n"
-" -<number> least [number] characters (default 4).\n"
+" -n <number> Locate & print any sequence of at least "
+"<number>\n"
+" --bytes=<number> displayable characters. (The default is 4).\n"
" -t --radix={o,d,x} Print the location of the string in base 8, 10 "
"or 16\n"
" -w --include-all-whitespace Include all whitespace as valid string "
@@ -12437,6 +12685,9 @@ msgid ""
" -e --encoding={s,S,b,l,B,L} Select character size and endianness:\n"
" s = 7-bit, S = 8-bit, {b,l} = 16-bit, {B,L} = 32-"
"bit\n"
+" --unicode={default|show|invalid|hex|escape|highlight}\n"
+" -U {d|s|i|x|e|h} Specify how to treat UTF-8 encoded unicode "
+"characters\n"
" -s --output-separator=<string> String used to separate strings in output.\n"
" @<file> Read options from <file>\n"
" -h --help Display this information\n"
@@ -12447,54 +12698,55 @@ msgstr ""
msgid "*undefined*"
msgstr ""
-#: sysdump.c:57
+#. PR 28564
+#: sysdump.c:57 sysdump.c:66
msgid "*corrupt*"
msgstr ""
-#: sysdump.c:125
+#: sysdump.c:131
#, c-format
msgid "SUM IS %x\n"
msgstr ""
#. PR 17512: file: id:000001,src:000002,op:flip1,pos:45.
#. Prevent infinite loops re-reading beyond the end of the buffer.
-#: sysdump.c:163
+#: sysdump.c:169
msgid "ICE: getINT: Out of buffer space"
msgstr ""
-#: sysdump.c:188
+#: sysdump.c:194
#, c-format
msgid "Unsupported read size: %d"
msgstr ""
-#: sysdump.c:499
+#: sysdump.c:505
#, c-format
msgid "GOT A %x\n"
msgstr ""
-#: sysdump.c:517
+#: sysdump.c:523
#, c-format
msgid "WANTED %x!!\n"
msgstr ""
-#: sysdump.c:535
+#: sysdump.c:541
msgid "SYMBOL INFO"
msgstr ""
-#: sysdump.c:553
+#: sysdump.c:559
msgid "DERIVED TYPE"
msgstr ""
-#: sysdump.c:610
+#: sysdump.c:616
msgid "MODULE***\n"
msgstr ""
-#: sysdump.c:643
+#: sysdump.c:649
#, c-format
msgid "Print a human readable interpretation of a SYSROFF object file\n"
msgstr ""
-#: sysdump.c:644
+#: sysdump.c:650
#, c-format
msgid ""
" The options are:\n"
@@ -12502,7 +12754,7 @@ msgid ""
" -v --version Print the program's version number\n"
msgstr ""
-#: sysdump.c:710
+#: sysdump.c:716
#, c-format
msgid "cannot open input file %s"
msgstr ""
@@ -12588,7 +12840,7 @@ msgstr ""
#: version.c:34
#, c-format
-msgid "Copyright (C) 2021 Free Software Foundation, Inc.\n"
+msgid "Copyright (C) 2022 Free Software Foundation, Inc.\n"
msgstr ""
#: version.c:35
diff --git a/binutils/po/fr.po b/binutils/po/fr.po
index bdd34606ce5..f3660409505 100644
--- a/binutils/po/fr.po
+++ b/binutils/po/fr.po
@@ -1,15 +1,15 @@
# translation of binutils to French
# Messages français pour GNU concernant binutils.
-# Copyright (C) 2021 Free Software Foundation, Inc.
+# Copyright (C) 2022 Free Software Foundation, Inc.
# This file is distributed under the same license as the binutils package.
# Michel Robitaille <robitail@IRO.UMontreal.CA>, traducteur depuis/since 1996.
-# Frédéric Marchal <fmarchal@perso.be>, 2021.
+# Frédéric Marchal <fmarchal@perso.be>, 2022.
msgid ""
msgstr ""
-"Project-Id-Version: binutils-2.36.90\n"
-"Report-Msgid-Bugs-To: bug-binutils@gnu.org\n"
-"POT-Creation-Date: 2021-07-03 15:06+0100\n"
-"PO-Revision-Date: 2021-07-10 18:00+0200\n"
+"Project-Id-Version: binutils-2.37.90\n"
+"Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n"
+"POT-Creation-Date: 2022-01-22 12:22+0000\n"
+"PO-Revision-Date: 2022-01-24 08:17+0100\n"
"Last-Translator: Frédéric Marchal <fmarchal@perso.be>\n"
"Language-Team: French <traduc@traduc.org>\n"
"Language: fr\n"
@@ -71,9 +71,9 @@ msgstr ""
" -v --version Afficher le nom et la version du logiciel\n"
"\n"
-#: addr2line.c:109 ar.c:357 ar.c:394 coffdump.c:471 dlltool.c:3715
-#: dllwrap.c:518 elfedit.c:952 objcopy.c:697 objcopy.c:752 readelf.c:4842
-#: size.c:109 srconv.c:1704 strings.c:706 sysdump.c:649 windmc.c:227
+#: addr2line.c:109 ar.c:359 ar.c:396 coffdump.c:471 dlltool.c:3713
+#: dllwrap.c:518 elfedit.c:976 objcopy.c:697 objcopy.c:752 readelf.c:5165
+#: size.c:109 srconv.c:1704 strings.c:1343 sysdump.c:655 windmc.c:227
#: windres.c:690
#, c-format
msgid "Report bugs to %s\n"
@@ -110,227 +110,232 @@ msgstr "%s: ne peut obtenir les adresses à partir de l'archive"
msgid "%s: cannot find section %s"
msgstr "%s: ne peut initialiser l'heure : %s"
-#: addr2line.c:442 ar.c:756 dlltool.c:3239 nm.c:1807 objcopy.c:6029
-#: objdump.c:5211 size.c:151 strings.c:289 windmc.c:958 windres.c:816
+#: addr2line.c:442 ar.c:758 dlltool.c:3237 nm.c:2051 objcopy.c:6036
+#: objdump.c:5372 size.c:151 strings.c:340 windmc.c:958 windres.c:816
msgid "fatal error: libbfd ABI mismatch"
msgstr "erreur fatale: désaccord de l'ABI libbfd"
-#: addr2line.c:469 nm.c:1833 objdump.c:5258 readelf.c:5115
+#: addr2line.c:469 nm.c:2077 objdump.c:5419 readelf.c:5438
#, c-format
msgid "unknown demangling style `%s'"
msgstr "style d'encodage par mutilation inconnu « %s »"
-#: ar.c:274
+#: ar.c:275
#, c-format
msgid "no entry %s in archive\n"
msgstr "pas d'entrée %s dans l'archive\n"
-#: ar.c:288
+#: ar.c:289
#, c-format
msgid "Usage: %s [emulation options] [-]{dmpqrstx}[abcDfilMNoOPsSTuvV] [--plugin <name>] [member-name] [count] archive-file file...\n"
msgstr "Usage: %s [options d'émulation] [-]{dmpqrstx}[abcDfilMNoOPsSTuvV] [--plugin <nom>] [nom-du-membre] [compteur] fichier-archive fichier...\n"
-#: ar.c:294
+#: ar.c:295
#, c-format
msgid "Usage: %s [emulation options] [-]{dmpqrstx}[abcDfilMNoOPsSTuvV] [member-name] [count] archive-file file...\n"
msgstr "Usage: %s [options d'émulation] [-]{dmpqrstx}[abcDfilMNoOPsSTuvV] [nom-du-membre] [compteur] fichier-archive fichier...\n"
-#: ar.c:302
+#: ar.c:303
#, c-format
msgid " %s -M [<mri-script]\n"
msgstr " %s -M [<script-mri]\n"
-#: ar.c:303
+#: ar.c:304
#, c-format
msgid " commands:\n"
msgstr " commandes:\n"
-#: ar.c:304
+#: ar.c:305
#, c-format
msgid " d - delete file(s) from the archive\n"
msgstr " d - détruire le(s) fichier(s) de l'archive\n"
-#: ar.c:305
+#: ar.c:306
#, c-format
msgid " m[ab] - move file(s) in the archive\n"
msgstr " m[ab] - déplacer le(s) fichier(s) dans l'archive\n"
-#: ar.c:306
+#: ar.c:307
#, c-format
msgid " p - print file(s) found in the archive\n"
msgstr " p - afficher le contenu des fichiers trouvés dans l'archive\n"
-#: ar.c:307
+#: ar.c:308
#, c-format
msgid " q[f] - quick append file(s) to the archive\n"
msgstr " q[f] - ajout rapide du ou des fichier(s) à l'archive\n"
-#: ar.c:308
+#: ar.c:309
#, c-format
msgid " r[ab][f][u] - replace existing or insert new file(s) into the archive\n"
msgstr " r[ab][f][u] - remplacer le(s) fichier(s) existants ou insérer les nouveaux dans l'archive\n"
-#: ar.c:309
+#: ar.c:310
#, c-format
msgid " s - act as ranlib\n"
msgstr " s - se comporte comme ranlib\n"
-#: ar.c:310
+#: ar.c:311
#, c-format
msgid " t[O][v] - display contents of the archive\n"
msgstr " t[O][v] - afficher le contenu de l'archive\n"
-#: ar.c:311
+#: ar.c:312
#, c-format
msgid " x[o] - extract file(s) from the archive\n"
msgstr " x[o] - extraire le(s) fichier(s) de l'archive\n"
-#: ar.c:312
+#: ar.c:313
#, c-format
msgid " command specific modifiers:\n"
msgstr " modificateurs spécifiques de commandes :\n"
-#: ar.c:313
+#: ar.c:314
#, c-format
msgid " [a] - put file(s) after [member-name]\n"
msgstr " [a] - placer le(s) fichier(s) après le [nom-de-membre]\n"
-#: ar.c:314
+#: ar.c:315
#, c-format
msgid " [b] - put file(s) before [member-name] (same as [i])\n"
msgstr " [b] - placer le(s) fichier(s) avant le [nom-de-membre] (identique à [i])\n"
-#: ar.c:317
+#: ar.c:318
#, c-format
msgid " [D] - use zero for timestamps and uids/gids (default)\n"
msgstr " [D] - utilise zéro pour les horodatages et les uid/gid (par défaut)\n"
-#: ar.c:319
+#: ar.c:320
#, c-format
msgid " [U] - use actual timestamps and uids/gids\n"
msgstr " [U] - utilise la date courante pour les horodatages et les uid/gid\n"
-#: ar.c:324
+#: ar.c:325
#, c-format
msgid " [D] - use zero for timestamps and uids/gids\n"
msgstr " [D] - utilise zéro pour les horodatages et les uid/gid\n"
-#: ar.c:326
+#: ar.c:327
#, c-format
msgid " [U] - use actual timestamps and uids/gids (default)\n"
msgstr " [U] - utilise la date courante pour les horodatages et les uid/gid (par défaut)\n"
-#: ar.c:329
+#: ar.c:330
#, c-format
msgid " [N] - use instance [count] of name\n"
msgstr " [N] - utiliser le [compteur] du nom\n"
-#: ar.c:330
+#: ar.c:331
#, c-format
msgid " [f] - truncate inserted file names\n"
msgstr " [f] - tronquer les noms des fichiers insérés\n"
-#: ar.c:331
+#: ar.c:332
#, c-format
msgid " [P] - use full path names when matching\n"
msgstr " [P] - utiliser des chemins complets lors d'un appariement\n"
-#: ar.c:332
+#: ar.c:333
#, c-format
msgid " [o] - preserve original dates\n"
msgstr " [o] - préserver les dates d'origine\n"
-#: ar.c:333
+#: ar.c:334
#, c-format
msgid " [O] - display offsets of files in the archive\n"
msgstr " [O] - afficher les décalages des fichiers dans l'archive\n"
-#: ar.c:334
+#: ar.c:335
#, c-format
msgid " [u] - only replace files that are newer than current archive contents\n"
msgstr " [u] - remplacer seulement les fichiers de l'archive par les plus récents\n"
-#: ar.c:335
+#: ar.c:336
#, c-format
msgid " generic modifiers:\n"
msgstr " modificateurs génériques :\n"
-#: ar.c:336
+#: ar.c:337
#, c-format
msgid " [c] - do not warn if the library had to be created\n"
msgstr " [c] - ne pas avertir si la bibliothèque doit être créée\n"
-#: ar.c:337
+#: ar.c:338
#, c-format
msgid " [s] - create an archive index (cf. ranlib)\n"
msgstr " [s] - créer un index d'archive (voir ranlib)\n"
-#: ar.c:338
+#: ar.c:339
#, c-format
msgid " [l <text> ] - specify the dependencies of this library\n"
msgstr " [l <texte>] - spécifier les dépendances de cette bibliothèque\n"
-#: ar.c:339
+#: ar.c:340
#, c-format
msgid " [S] - do not build a symbol table\n"
msgstr " [S] - ne pas construire une table de symboles\n"
-#: ar.c:340
+#: ar.c:341
#, c-format
-msgid " [T] - make a thin archive\n"
-msgstr " [T] - créer une archive légère\n"
+msgid " [T] - deprecated, use --thin instead\n"
+msgstr " [T] - déprécié, utilisez --thin à la place\n"
-#: ar.c:341
+#: ar.c:342
#, c-format
msgid " [v] - be verbose\n"
msgstr " [v] - utiliser le mode verbeux\n"
-#: ar.c:342
+#: ar.c:343
#, c-format
msgid " [V] - display the version number\n"
msgstr " [V] - afficher le numéro de version\n"
-#: ar.c:343
+#: ar.c:344
#, c-format
msgid " @<file> - read options from <file>\n"
msgstr " @<fichier_def> - lire les options à partir du <fichier>\n"
-#: ar.c:344
+#: ar.c:345
#, c-format
msgid " --target=BFDNAME - specify the target object format as BFDNAME\n"
msgstr " --target=NOMBFD - spécifie le format de l'objet cible comme étant NOMBFD\n"
-#: ar.c:345
+#: ar.c:346
#, c-format
msgid " --output=DIRNAME - specify the output directory for extraction operations\n"
msgstr " --output=NOMRÉP - spécifie le répertoire de sortie pour les opérations d'extractions\n"
-#: ar.c:346
+#: ar.c:347
#, c-format
msgid " --record-libdeps=<text> - specify the dependencies of this library\n"
msgstr " --record-libdeps=<texte> - spécifier les dépendances de cette bibliothèque\n"
#: ar.c:348
#, c-format
+msgid " --thin - make a thin archive\n"
+msgstr " --thin - créer une archive légère\n"
+
+#: ar.c:350
+#, c-format
msgid " optional:\n"
msgstr " les options sont :\n"
-#: ar.c:349
+#: ar.c:351
#, c-format
msgid " --plugin <p> - load the specified plugin\n"
msgstr " -plugin <p> - charge le greffon spécifié\n"
-#: ar.c:370
+#: ar.c:372
#, c-format
msgid "Usage: %s [options] archive\n"
msgstr "Usage: %s [options] archive\n"
-#: ar.c:371
+#: ar.c:373
#, c-format
msgid " Generate an index to speed access to archives\n"
msgstr " Générer un index pour accélérer les accès aux archives\n"
-#: ar.c:372
+#: ar.c:374
#, c-format
msgid ""
" The options are:\n"
@@ -339,12 +344,12 @@ msgstr ""
" Les options sont :\n"
" @<fichier> lire les options à partir du <fichier>\n"
-#: ar.c:375
+#: ar.c:377
#, c-format
msgid " --plugin <name> Load the specified plugin\n"
msgstr " --plugin <nom> Utilise le greffon spécifié\n"
-#: ar.c:379
+#: ar.c:381
#, c-format
msgid ""
" -D Use zero for symbol map timestamp (default)\n"
@@ -353,7 +358,7 @@ msgstr ""
" -D Utiliser zéro comme horodatage pour la table des symboles (défaut)\n"
" -U Utiliser un vrai horodatage pour la table des symboles\n"
-#: ar.c:383
+#: ar.c:385
#, c-format
msgid ""
" -D Use zero for symbol map timestamp\n"
@@ -362,7 +367,7 @@ msgstr ""
" -D Utiliser zéro comme horodatage pour la table des symboles\n"
" -U Utiliser un vrai horodatage pour la table des symboles (défaut)\n"
-#: ar.c:386
+#: ar.c:388
#, c-format
msgid ""
" -t Update the archive's symbol map timestamp\n"
@@ -373,133 +378,133 @@ msgstr ""
" -h --help Afficher l'aide-mémoire\n"
" -V --version Afficher le nom et la version du logiciel\n"
-#: ar.c:511
+#: ar.c:513
msgid "two different operation options specified"
msgstr "deux opérations différentes spécifiées"
-#: ar.c:547
+#: ar.c:549
msgid "libdeps specified more than once"
msgstr "libdeps est spécifié plus d'une fois"
-#: ar.c:608 ar.c:683 nm.c:1926
+#: ar.c:610 ar.c:685 nm.c:2188
#, c-format
msgid "sorry - this program has been built without plugin support\n"
msgstr "désolé – ce programme a été construit sans support pour les greffons\n"
-#: ar.c:812
+#: ar.c:814
msgid "no operation specified"
msgstr "aucune opération spécifiée"
-#: ar.c:815
+#: ar.c:817
msgid "`u' is only meaningful with the `r' option."
msgstr "« u » n'a de sens qu'avec l'option « r »."
-#: ar.c:818
+#: ar.c:820
msgid "`u' is not meaningful with the `D' option."
msgstr "« u » n'a de sens qu'avec l'option « D »."
-#: ar.c:821
+#: ar.c:823
msgid "`u' modifier ignored since `D' is the default (see `U')"
msgstr "le modificateur « u » est ignoré puisque « D » est le défaut (consultez « U »)"
-#: ar.c:830
+#: ar.c:832
msgid "missing position arg."
msgstr "argument de position manquant"
-#: ar.c:836
+#: ar.c:838
msgid "`N' is only meaningful with the `x' and `d' options."
msgstr "« N » n'a de sens qu'avec les options « x » et « d »."
-#: ar.c:838
+#: ar.c:840
msgid "`N' missing value."
msgstr "valeur de « N » manquante."
-#: ar.c:841
+#: ar.c:843
msgid "Value for `N' must be positive."
msgstr "La valeur de « N » doit être positive."
-#: ar.c:857
+#: ar.c:859
msgid "`x' cannot be used on thin archives."
msgstr "« x » ne peut pas être utilisé avec des archives légères."
-#: ar.c:871
+#: ar.c:873
msgid "Cannot create libdeps record."
msgstr "Ne peut créer l'enregistrement libdeps."
-#: ar.c:874
+#: ar.c:876
msgid "Cannot set libdeps record type to binary."
msgstr "Impossible de définir le type de l'enregistrement libdeps à binaire."
-#: ar.c:877
+#: ar.c:879
msgid "Cannot set libdeps object format."
msgstr "Impossible de définir le format de l'objet libdeps."
-#: ar.c:880
+#: ar.c:882
msgid "Cannot make libdeps object writable."
msgstr "Impossible d'autoriser l'écriture dans l'objet libdeps."
-#: ar.c:883
+#: ar.c:885
msgid "Cannot write libdeps record."
msgstr "Impossible d'écrire l'enregistrement libdeps."
-#: ar.c:886
+#: ar.c:888
msgid "Cannot make libdeps object readable."
msgstr "Impossible d'autoriser l'écriture dans l'objet libdeps."
-#: ar.c:889
+#: ar.c:891
msgid "Cannot reset libdeps record type."
msgstr "Impossible de réinitialiser le type de l'enregistrement libdeps."
-#: ar.c:950
+#: ar.c:952
#, c-format
msgid "internal error -- this option not implemented"
msgstr "erreur interne — cette option n'est pas implémentée"
-#: ar.c:1019
+#: ar.c:1021
#, c-format
msgid "creating %s"
msgstr "création de %s"
-#: ar.c:1050
+#: ar.c:1052
#, c-format
msgid "Cannot convert existing library %s to thin format"
msgstr "Impossible de convertir la bibliothèque existante %s au format léger"
-#: ar.c:1056
+#: ar.c:1058
#, c-format
msgid "Cannot convert existing thin library %s to normal format"
msgstr "Impossible de convertir la bibliothèque légère existante %s au format normal"
-#: ar.c:1088 ar.c:1185 ar.c:1507 objcopy.c:3606
+#: ar.c:1090 ar.c:1190 ar.c:1512 objcopy.c:3612
#, c-format
msgid "internal stat error on %s"
msgstr "erreur interne d'évaluation de %s par stat()"
-#: ar.c:1107 ar.c:1211
+#: ar.c:1109 ar.c:1216
#, c-format
msgid "%s is not a valid archive"
msgstr "%s n'est pas une archive valide"
-#: ar.c:1135
+#: ar.c:1137
#, c-format
msgid "illegal output pathname for archive member: %s, using '%s' instead"
msgstr "le nom du chemin de sortie est illégal pour le membre de l'archive : %s, utilisation de « %s » à la place"
-#: ar.c:1259
+#: ar.c:1264
msgid "could not create temporary file whilst writing archive"
msgstr "n'a pu créer le fichier temporaire pendant l'écriture de l'archive"
-#: ar.c:1410
+#: ar.c:1415
#, c-format
msgid "No member named `%s'\n"
msgstr "Aucun membre nommé « %s »\n"
-#: ar.c:1460
+#: ar.c:1465
#, c-format
msgid "no entry %s in archive %s!"
msgstr "aucune entrée %s dans l'archive %s !"
-#: ar.c:1620
+#: ar.c:1625
#, c-format
msgid "%s: no archive map to update"
msgstr "%s: aucune table d'archive à mettre à jour"
@@ -575,7 +580,7 @@ msgstr " Pas d'options d'émulation spécifiques\n"
msgid " emulation options: \n"
msgstr " options d'émulation : \n"
-#: bucomm.c:43 bucomm.c:77
+#: bucomm.c:43 bucomm.c:76
msgid "cause of error unknown"
msgstr "cause de l'erreur inconnue"
@@ -645,17 +650,17 @@ msgstr "<donnée de temps corrompue>"
msgid "%s: bad number: %s"
msgstr "%s: mauvais numéro : %s"
-#: bucomm.c:607 strings.c:402
+#: bucomm.c:607 strings.c:453
#, c-format
msgid "'%s': No such file"
msgstr "« %s »: pas de tel fichier"
-#: bucomm.c:609 strings.c:404
+#: bucomm.c:609 strings.c:455
#, c-format
msgid "Warning: could not locate '%s'. reason: %s"
msgstr "Attention : ne peut localiser « %s ». Raison : %s"
-#: bucomm.c:613 strings.c:410
+#: bucomm.c:613 strings.c:461
#, c-format
msgid "Warning: '%s' is a directory"
msgstr "Attention : « %s » est un répertoire"
@@ -775,7 +780,7 @@ msgstr "Liste des symboles"
msgid "Symbol %s, tag %d, number %d"
msgstr "Symbole %s, étiquette %d, nombre %d"
-#: coffdump.c:345 readelf.c:18461 readelf.c:18552
+#: coffdump.c:345 readelf.c:18836 readelf.c:18927
#, c-format
msgid "Type"
msgstr "Type"
@@ -829,7 +834,7 @@ msgstr "<aucun symbole>"
msgid "#sources %d"
msgstr "#sources %d"
-#: coffdump.c:462 sysdump.c:642
+#: coffdump.c:462 sysdump.c:648
#, c-format
msgid "Usage: %s [option(s)] in-file\n"
msgstr "Usage: %s [options] fichier\n"
@@ -854,7 +859,7 @@ msgstr ""
" -V --version Afficher le nom et la version du logiciel\n"
"\n"
-#: coffdump.c:532 srconv.c:1793 sysdump.c:705
+#: coffdump.c:532 srconv.c:1793 sysdump.c:711
msgid "no input file specified"
msgstr "Aucun fichier spécifié à l'entrée"
@@ -1002,7 +1007,7 @@ msgstr "Définition de variable sans portée"
msgid "%s: is not a COFF format file"
msgstr "%s: n'est pas un fichier ordinaire"
-#: cxxfilt.c:124 nm.c:324 objdump.c:390
+#: cxxfilt.c:124 nm.c:379 objdump.c:405
#, c-format
msgid "Report bugs to %s.\n"
msgstr "Rapporter toutes anomalies à %s\n"
@@ -1096,7 +1101,7 @@ msgstr "debug_find_named_type: aucune unité de compilation courante"
msgid "debug_get_real_type: circular debug information for %s\n"
msgstr "debug_get_real_type: information circulaire de débogage pour %s\n"
-#: debug.c:2484
+#: debug.c:2490
msgid "debug_write_type: illegal type encountered"
msgstr "debug_write_type: type illégal rencontré"
@@ -1124,437 +1129,437 @@ msgstr "Traitement complété du fichier de définition"
msgid "Syntax error in def file %s:%d"
msgstr "Erreur de syntaxe dans le fichier de définition %s:%d"
-#: dlltool.c:1034
+#: dlltool.c:1032
#, c-format
msgid "%s: Path components stripped from image name, '%s'."
msgstr "%s: Composants du chemin éliminés du nom de l'image « %s »."
-#: dlltool.c:1052
+#: dlltool.c:1050
#, c-format
msgid "NAME: %s base: %x"
msgstr "NOM: %s base: %x"
-#: dlltool.c:1055 dlltool.c:1076
+#: dlltool.c:1053 dlltool.c:1074
msgid "Can't have LIBRARY and NAME"
msgstr "Ne peut trouver la BIBLIOTHÈQUE et le NOM"
-#: dlltool.c:1073
+#: dlltool.c:1071
#, c-format
msgid "LIBRARY: %s base: %x"
msgstr "BIBLIOTHÈQUE: %s base %x"
-#: dlltool.c:1228
+#: dlltool.c:1226
#, c-format
msgid "VERSION %d.%d\n"
msgstr "VERSION %d.%d\n"
-#: dlltool.c:1276
+#: dlltool.c:1274
#, c-format
msgid "run: %s %s"
msgstr "run: %s %s"
-#: dlltool.c:1317 resrc.c:288
+#: dlltool.c:1315 resrc.c:288
#, c-format
msgid "wait: %s"
msgstr "en attente: %s"
-#: dlltool.c:1322 dllwrap.c:416 resrc.c:293
+#: dlltool.c:1320 dllwrap.c:416 resrc.c:293
#, c-format
msgid "subprocess got fatal signal %d"
msgstr "sous-processus a reçu le signal fatal %d"
-#: dlltool.c:1328 dllwrap.c:423 resrc.c:300
+#: dlltool.c:1326 dllwrap.c:423 resrc.c:300
#, c-format
msgid "%s exited with status %d"
msgstr "%s a terminé avec le statut %d"
-#: dlltool.c:1359
+#: dlltool.c:1357
#, c-format
msgid "Sucking in info from %s section in %s"
msgstr "Aspirer les informations de la section %s dans %s"
-#: dlltool.c:1499
+#: dlltool.c:1497
#, c-format
msgid "Excluding symbol: %s"
msgstr "Exclusion de symbole : %s"
-#: dlltool.c:1588 dlltool.c:1599 nm.c:1172 nm.c:1183 nm.c:1193
+#: dlltool.c:1586 dlltool.c:1597 nm.c:1416 nm.c:1427 nm.c:1437
#, c-format
msgid "%s: no symbols"
msgstr "%s: aucun symbole"
#. FIXME: we ought to read in and block out the base relocations.
-#: dlltool.c:1625
+#: dlltool.c:1623
#, c-format
msgid "Done reading %s"
msgstr "Lecture complétée %s"
-#: dlltool.c:1635
+#: dlltool.c:1633
#, c-format
msgid "Unable to open object file: %s: %s"
msgstr "Incapable d'ouvrir le fichier objet : %s: %s"
-#: dlltool.c:1638
+#: dlltool.c:1636
#, c-format
msgid "Scanning object file %s"
msgstr "Scrutation du fichier objet %s"
-#: dlltool.c:1658
+#: dlltool.c:1656
#, c-format
msgid "Cannot produce mcore-elf dll from archive file: %s"
msgstr "Ne peut produire une dll mcore-elf à partir du fichier d'archive : %s"
-#: dlltool.c:1760
+#: dlltool.c:1758
msgid "Adding exports to output file"
msgstr "Ajout des exports au fichier de sortie"
-#: dlltool.c:1812
+#: dlltool.c:1810
msgid "Added exports to output file"
msgstr "Exports ajoutés au fichier de sortie"
-#: dlltool.c:1980
+#: dlltool.c:1978
#, c-format
msgid "Generating export file: %s"
msgstr "Génération du fichier d'exports : %s"
-#: dlltool.c:1985
+#: dlltool.c:1983
#, c-format
msgid "Unable to open temporary assembler file: %s"
msgstr "Incapable d'ouvrir le fichier assembleur temporaire : %s"
-#: dlltool.c:1990
+#: dlltool.c:1988
#, c-format
msgid "Opened temporary file: %s"
msgstr "Fichier temporaire ouvert : %s"
-#: dlltool.c:2166
+#: dlltool.c:2164
msgid "failed to read the number of entries from base file"
msgstr "échec de lecture du nombre d'entrées dans le fichier de base"
-#: dlltool.c:2217
+#: dlltool.c:2215
msgid "Generated exports file"
msgstr "Fichier d'exports généré"
-#: dlltool.c:2375
+#: dlltool.c:2373
#, c-format
msgid "bfd_open failed open stub file: %s: %s"
msgstr "échec de bfd_open lors de l'ouverture du fichier stub : %s: %s"
-#: dlltool.c:2379
+#: dlltool.c:2377
#, c-format
msgid "Creating stub file: %s"
msgstr "Création du fichier stub : %s"
-#: dlltool.c:2693
+#: dlltool.c:2691
#, c-format
msgid "bfd_open failed reopen stub file: %s: %s"
msgstr "échec de bfd_open lors de l'ouverture du fichier stub : %s: %s"
-#: dlltool.c:2707 dlltool.c:2786
+#: dlltool.c:2705 dlltool.c:2784
#, c-format
msgid "failed to open temporary head file: %s"
msgstr "échec d'ouverture du fichier de tête temporaire : %s"
-#: dlltool.c:2771 dlltool.c:2861
+#: dlltool.c:2769 dlltool.c:2859
#, c-format
msgid "failed to open temporary head file: %s: %s"
msgstr "échec d'ouverture du fichier temporaire de tête : %s: %s"
-#: dlltool.c:2876
+#: dlltool.c:2874
#, c-format
msgid "failed to open temporary tail file: %s"
msgstr "échec d'ouverture du fichier de queue temporaire : %s"
-#: dlltool.c:2912
+#: dlltool.c:2910
#, c-format
msgid "failed to open temporary tail file: %s: %s"
msgstr "échec d'ouverture du fichier temporaire de queue : %s: %s"
-#: dlltool.c:2935
+#: dlltool.c:2933
#, c-format
msgid "Can't create .lib file: %s: %s"
msgstr "Ne peut créer le fichier .lib : %s: %s"
-#: dlltool.c:2939
+#: dlltool.c:2937
#, c-format
msgid "Creating library file: %s"
msgstr "Création du fichier de bibliothèque : %s"
-#: dlltool.c:3026 dlltool.c:3032
+#: dlltool.c:3024 dlltool.c:3030
#, c-format
msgid "cannot delete %s: %s"
msgstr "ne peut détruire %s : %s"
-#: dlltool.c:3038
+#: dlltool.c:3036
msgid "Created lib file"
msgstr "Fichier de bibliothèque créé"
-#: dlltool.c:3244
+#: dlltool.c:3242
#, c-format
msgid "Can't open .lib file: %s: %s"
msgstr "Ne peut ouvrir le fichier .lib : %s: %s"
-#: dlltool.c:3252 dlltool.c:3274
+#: dlltool.c:3250 dlltool.c:3272
#, c-format
msgid "%s is not a library"
msgstr "%s n'est pas une bibliothèque"
-#: dlltool.c:3292
+#: dlltool.c:3290
#, c-format
msgid "Import library `%s' specifies two or more dlls"
msgstr "La bibliothèque d'importation « %s » spécifie deux DLL ou plus"
-#: dlltool.c:3303
+#: dlltool.c:3301
#, c-format
msgid "Unable to determine dll name for `%s' (not an import library?)"
msgstr "Incapable de déterminer le nom de dll pour « %s » (pas une bibliothèque d'importation ?)"
-#: dlltool.c:3529
+#: dlltool.c:3527
#, c-format
msgid "Warning, ignoring duplicate EXPORT %s %d,%d"
msgstr "AVERTISSEMENT: ignore le EXPORT en double %s %d,%d"
-#: dlltool.c:3535
+#: dlltool.c:3533
#, c-format
msgid "Error, duplicate EXPORT with ordinals: %s"
msgstr "ERREUR, EXPORT dupliqué avec ordinaux : %s"
-#: dlltool.c:3638
+#: dlltool.c:3636
msgid "Processing definitions"
msgstr "Traitement des définitions"
-#: dlltool.c:3665
+#: dlltool.c:3663
msgid "Processed definitions"
msgstr "Définitions traitées"
#. xgetext:c-format
-#: dlltool.c:3672 dllwrap.c:477
+#: dlltool.c:3670 dllwrap.c:477
#, c-format
msgid "Usage %s <option(s)> <object-file(s)>\n"
msgstr "Usage %s <options> <fichiers-objet>\n"
#. xgetext:c-format
-#: dlltool.c:3674
+#: dlltool.c:3672
#, c-format
msgid " -m --machine <machine> Create as DLL for <machine>. [default: %s]\n"
msgstr " -m --machine <machine> Créer comme DLL pour la <machine>. [défaut: %s]\n"
-#: dlltool.c:3675
+#: dlltool.c:3673
#, c-format
msgid " possible <machine>: arm[_interwork], i386, mcore[-elf]{-le|-be}, thumb\n"
msgstr " possibilités pour <machine>: arm[_interwork], i386, mcore[-elf]{-le|-be}, thumb\n"
-#: dlltool.c:3676
+#: dlltool.c:3674
#, c-format
msgid " -e --output-exp <outname> Generate an export file.\n"
msgstr " -e --output-exp <nom_de_sortie> Générer un fichier d'export.\n"
-#: dlltool.c:3677
+#: dlltool.c:3675
#, c-format
msgid " -l --output-lib <outname> Generate an interface library.\n"
msgstr " -l --output-lib <nom_de_sortie> Générer une bibliothèque d'interface.\n"
-#: dlltool.c:3678
+#: dlltool.c:3676
#, c-format
msgid " -y --output-delaylib <outname> Create a delay-import library.\n"
msgstr " -y --output-delaylib <nom-de-sortie> Générer une bibliothèque d'importation différée.\n"
-#: dlltool.c:3679
+#: dlltool.c:3677
#, c-format
msgid " -a --add-indirect Add dll indirects to export file.\n"
msgstr " -a --add-indirect Ajouter les dll indirectes au fichier d'exports.\n"
-#: dlltool.c:3680
+#: dlltool.c:3678
#, c-format
msgid " -D --dllname <name> Name of input dll to put into interface lib.\n"
msgstr " -D --dllname <nom> Nom de la dll à placer dans la bibliothèque d'interface.\n"
-#: dlltool.c:3681
+#: dlltool.c:3679
#, c-format
msgid " -d --input-def <deffile> Name of .def file to be read in.\n"
msgstr " -d --input-def <fichier_def> Nom du fichier .def à lire\n"
-#: dlltool.c:3682
+#: dlltool.c:3680
#, c-format
msgid " -z --output-def <deffile> Name of .def file to be created.\n"
msgstr " -z --output-def <fichier_def> Nom du fichier .def à créer.\n"
-#: dlltool.c:3683
+#: dlltool.c:3681
#, c-format
msgid " --export-all-symbols Export all symbols to .def\n"
msgstr " --export-all-symbols Exporter tous les symboles vers le fichier .def\n"
-#: dlltool.c:3684
+#: dlltool.c:3682
#, c-format
msgid " --no-export-all-symbols Only export listed symbols\n"
msgstr " --no-export-all-symbols Exporter seulement la liste des symboles\n"
-#: dlltool.c:3685
+#: dlltool.c:3683
#, c-format
msgid " --exclude-symbols <list> Don't export <list>\n"
msgstr " --exclude-symbols <liste> Ne pas exporter la <liste>\n"
-#: dlltool.c:3686
+#: dlltool.c:3684
#, c-format
msgid " --no-default-excludes Clear default exclude symbols\n"
msgstr " --no-default-excludes Ne pas tenir compte des symboles d'exclusion par défaut\n"
-#: dlltool.c:3687
+#: dlltool.c:3685
#, c-format
msgid " -b --base-file <basefile> Read linker generated base file.\n"
msgstr " -b --base-file <fichier_base> Lire le fichier de base généré par l'éditeur de liens\n"
-#: dlltool.c:3688
+#: dlltool.c:3686
#, c-format
msgid " -x --no-idata4 Don't generate idata$4 section.\n"
msgstr " -x --no-idata4 Ne pas générer la section idata$4\n"
-#: dlltool.c:3689
+#: dlltool.c:3687
#, c-format
msgid " -c --no-idata5 Don't generate idata$5 section.\n"
msgstr " -c --no-idata5 Ne pas générer la section idata$5\n"
-#: dlltool.c:3690
+#: dlltool.c:3688
#, c-format
msgid " --use-nul-prefixed-import-tables Use zero prefixed idata$4 and idata$5.\n"
msgstr " --use-nul-prefixed-import-tables Utilise idata$4 et idata$5 avec un préfixe nul.\n"
-#: dlltool.c:3691
+#: dlltool.c:3689
#, c-format
msgid " -U --add-underscore Add underscores to all symbols in interface library.\n"
msgstr " -U --add-underscore Ajouter des soulignés aux symboles dans la bibliothèque d'interface\n"
-#: dlltool.c:3692
+#: dlltool.c:3690
#, c-format
msgid " --add-stdcall-underscore Add underscores to stdcall symbols in interface library.\n"
msgstr " --add-stdcall-underscore Ajouter des soulignés aux symboles dans la bibliothèque d'interface\n"
-#: dlltool.c:3693
+#: dlltool.c:3691
#, c-format
msgid " --no-leading-underscore All symbols shouldn't be prefixed by an underscore.\n"
msgstr " --no-leading-underscore Tous les symboles ne devraient pas être préfixés par un souligné.\n"
-#: dlltool.c:3694
+#: dlltool.c:3692
#, c-format
msgid " --leading-underscore All symbols should be prefixed by an underscore.\n"
msgstr " --leading-underscore Tous les symboles devraient être préfixés par un souligné.\n"
-#: dlltool.c:3695
+#: dlltool.c:3693
#, c-format
msgid " -k --kill-at Kill @<n> from exported names.\n"
msgstr " -k --kill-at Stopper @<n> à partir des noms exportés\n"
-#: dlltool.c:3696
+#: dlltool.c:3694
#, c-format
msgid " -A --add-stdcall-alias Add aliases without @<n>.\n"
msgstr " -A --add-stdcall-alias Ajouter des alias sans @<n>\n"
-#: dlltool.c:3697
+#: dlltool.c:3695
#, c-format
msgid " -p --ext-prefix-alias <prefix> Add aliases with <prefix>.\n"
msgstr " -p --axd-prefix-alias <préfixe> Ajouter des alias avec <préfixe>.\n"
-#: dlltool.c:3698
+#: dlltool.c:3696
#, c-format
msgid " -S --as <name> Use <name> for assembler.\n"
msgstr " -S --as <nom> Utiliser le <nom> pour l'assembleur\n"
-#: dlltool.c:3699
+#: dlltool.c:3697
#, c-format
msgid " -f --as-flags <flags> Pass <flags> to the assembler.\n"
msgstr " -f --as-flags <fanions> Relayer les <fanions> à l'assembleur\n"
-#: dlltool.c:3700
+#: dlltool.c:3698
#, c-format
msgid " -C --compat-implib Create backward compatible import library.\n"
msgstr " -C --compat-implib Créer une compatibilité arrière à la bibliothèque d'importation\n"
-#: dlltool.c:3701
+#: dlltool.c:3699
#, c-format
msgid " -n --no-delete Keep temp files (repeat for extra preservation).\n"
msgstr " -n --no-delete Conserver les fichiers temporaires (répétez pour en conserver plus)\n"
-#: dlltool.c:3702
+#: dlltool.c:3700
#, c-format
msgid " -t --temp-prefix <prefix> Use <prefix> to construct temp file names.\n"
msgstr " -t --temp-prefix <préfixe> Utiliser le <préfixe> pour construire les noms de fichiers temporaires.\n"
-#: dlltool.c:3703
+#: dlltool.c:3701
#, c-format
msgid " -I --identify <implib> Report the name of the DLL associated with <implib>.\n"
msgstr " -I --identify <implib> Rapporte le nom de la DLL associée à <implib>.\n"
-#: dlltool.c:3704
+#: dlltool.c:3702
#, c-format
msgid " --identify-strict Causes --identify to report error when multiple DLLs.\n"
msgstr " --identify-strict Rapporte des erreurs quand --identify détecte des DLL multiples.\n"
-#: dlltool.c:3705
+#: dlltool.c:3703
#, c-format
msgid " -v --verbose Be verbose.\n"
msgstr " -v --verbose Mode bavard\n"
-#: dlltool.c:3706
+#: dlltool.c:3704
#, c-format
msgid " -V --version Display the program version.\n"
msgstr " -V --version Afficher le nom et la version du logiciel\n"
-#: dlltool.c:3707
+#: dlltool.c:3705
#, c-format
msgid " -h --help Display this information.\n"
msgstr " -h --help Afficher l'aide-mémoire\n"
-#: dlltool.c:3708
+#: dlltool.c:3706
#, c-format
msgid " @<file> Read options from <file>.\n"
msgstr " @<fichier> Lire les options à partir du <fichier>\n"
-#: dlltool.c:3710
+#: dlltool.c:3708
#, c-format
msgid " -M --mcore-elf <outname> Process mcore-elf object files into <outname>.\n"
msgstr " -M --mcore-elf <nom_sortie> Traiter le fichier objet mcore-elf dans <nom_de_sortie>\n"
-#: dlltool.c:3711
+#: dlltool.c:3709
#, c-format
msgid " -L --linker <name> Use <name> as the linker.\n"
msgstr " -L --linker <nom> Utiliser <nom> comme éditeur de liens\n"
-#: dlltool.c:3712
+#: dlltool.c:3710
#, c-format
msgid " -F --linker-flags <flags> Pass <flags> to the linker.\n"
msgstr " -F --linker-flags <fanions> Relayer les <fanions> à l'éditeur de liens\n"
-#: dlltool.c:3856
+#: dlltool.c:3854
#, c-format
msgid "Unable to open def-file: %s"
msgstr "Incapable d'ouvrir le fichier de def : %s"
-#: dlltool.c:3861
+#: dlltool.c:3859
#, c-format
msgid "Path components stripped from dllname, '%s'."
msgstr "Composants du chemin ont été éliminés du nom de dll « %s »."
-#: dlltool.c:3909
+#: dlltool.c:3907
#, c-format
msgid "Unable to open base-file: %s"
msgstr "Incapable d'ouvrir le fichier de base : %s"
-#: dlltool.c:3944
+#: dlltool.c:3956
#, c-format
msgid "Machine '%s' not supported"
msgstr "Machine « %s » n'est pas supportée"
-#: dlltool.c:4024
+#: dlltool.c:4036
#, c-format
msgid "Warning, machine type (%d) not supported for delayimport."
msgstr "Avertissement, le type de machine (%d) n'est pas supporté pour « delayimport »."
-#: dlltool.c:4092 dllwrap.c:206
+#: dlltool.c:4104 dllwrap.c:206
#, c-format
msgid "Tried file: %s"
msgstr "Essai avec le fichier : %s"
-#: dlltool.c:4099 dllwrap.c:213
+#: dlltool.c:4111 dllwrap.c:213
#, c-format
msgid "Using file: %s"
msgstr "Utilisation du fichier : %s"
@@ -2121,278 +2126,278 @@ msgstr "Valeur AT inconnue : %lx"
msgid "Corrupt attribute block length: %lx\n"
msgstr "Longueur de bloc d'attributs corrompue: %lx\n"
-#: dwarf.c:2094
+#: dwarf.c:2095
#, c-format
msgid "Unable to resolve ref_addr form: uvalue %lx > section size %lx (%s)\n"
msgstr "Impossible de résoudre la forme ref_addr : uvalue %lx > taille de section %lx (%s)\n"
-#: dwarf.c:2111
+#: dwarf.c:2112
#, c-format
-msgid "Unable to resolve ref form: uvalue %lx + cu_offset %lx > section size %lx\n"
-msgstr "Impossible de résoudre la forme de référence : uvalue %lx + cu_offset %lx > taille de section %lx\n"
+msgid "Unable to resolve ref form: uvalue %lx + cu_offset %lx > CU size %lx\n"
+msgstr "Impossible de résoudre la forme de référence : uvalue %lx + cu_offset %lx > taille CU %lx\n"
-#: dwarf.c:2121
+#: dwarf.c:2122
#, c-format
msgid "Unexpected form %lx encountered whilst finding abbreviation for type\n"
msgstr "Forme %lx inattendue rencontrée en recherchant l'abréviation pour le type\n"
-#: dwarf.c:2130
+#: dwarf.c:2131
#, c-format
msgid "Unable to find abbreviations for CU offset %#lx\n"
msgstr "Impossible de trouver les abréviations pour l'offset CU %#lx\n"
-#: dwarf.c:2135
+#: dwarf.c:2136
#, c-format
msgid "Empty abbreviation list encountered for CU offset %lx\n"
msgstr "Liste d'abréviations vide rencontrée pour l'offset CU %lx\n"
-#: dwarf.c:2160
+#: dwarf.c:2161
#, c-format
msgid "Unable to find entry for abbreviation %lu\n"
msgstr "Incapable de trouver l'entrée pour l'abréviation %lu\n"
-#: dwarf.c:2310
+#: dwarf.c:2313
msgid "corrupt discr_list - not using a block form\n"
msgstr "discr_list corrompu - forme bloc pas utilisée\n"
-#: dwarf.c:2317
+#: dwarf.c:2320
msgid "corrupt discr_list - block not long enough\n"
msgstr "discr_list corrompu - bloc pas assez long\n"
-#: dwarf.c:2361
+#: dwarf.c:2355
#, c-format
msgid "corrupt discr_list - unrecognized discriminant byte %#x\n"
msgstr "discr_list corrompu - octet discriminant %#x non reconnu\n"
-#: dwarf.c:2402
+#: dwarf.c:2396
msgid "Corrupt attribute\n"
msgstr "Attribut corrompu\n"
-#: dwarf.c:2428
+#: dwarf.c:2422
msgid "Internal error: DW_FORM_ref_addr is not supported in DWARF version 1.\n"
msgstr "Erreur interne: DW_FORM_ref_addr n'est pas supporté dans la version 1 de DWARF.\n"
-#: dwarf.c:2610
+#: dwarf.c:2604
msgid "Block ends prematurely\n"
msgstr "Le bloc se termine prématurément\n"
#. We have already displayed the form name.
-#: dwarf.c:2640 dwarf.c:2655 dwarf.c:2678
+#: dwarf.c:2634 dwarf.c:2649 dwarf.c:2672
#, c-format
msgid "%c(offset: 0x%s): %s"
msgstr "%c(offset : 0x%s) : %s"
-#: dwarf.c:2644
+#: dwarf.c:2638
#, c-format
msgid "%c(indirect string, offset: 0x%s): %s"
msgstr "%c(chaîne indirecte, décalage: 0x%s): %s"
-#: dwarf.c:2659
+#: dwarf.c:2653
#, c-format
msgid "%c(indirect line string, offset: 0x%s): %s"
msgstr "%c(chaîne de ligne indirecte, décalage: 0x%s): %s"
-#: dwarf.c:2682
+#: dwarf.c:2676
#, c-format
msgid "%c(indexed string: 0x%s): %s"
msgstr "%c(chaîne indexée: 0x%s): %s"
#. We have already displayed the form name.
-#: dwarf.c:2693
+#: dwarf.c:2687
#, c-format
msgid "%c(offset: 0x%s) %s"
msgstr "%c(offset : 0x%s) %s"
-#: dwarf.c:2697
+#: dwarf.c:2691
#, c-format
msgid "%c(alt indirect string, offset: 0x%s) %s"
msgstr "%c(chaîne indirecte alt, décalage: 0x%s) %s"
#. We have already displayed the form name.
-#: dwarf.c:2735
+#: dwarf.c:2729
#, c-format
msgid "%c(index: 0x%s): %s"
msgstr "%c(index: 0x%s): %s"
-#: dwarf.c:2739
+#: dwarf.c:2733
#, c-format
msgid "%c(addr_index: 0x%s): %s"
msgstr "%c(addr_index: 0x%s): %s"
-#: dwarf.c:2751
+#: dwarf.c:2745
#, c-format
msgid "Unrecognized form: 0x%lx\n"
msgstr "Forme non reconnue : 0x%lx\n"
-#: dwarf.c:2812
+#: dwarf.c:2808
msgid "More location offset attributes than DW_AT_GNU_locview attributes\n"
msgstr "Plus d'attributs de décalage d'emplacements que d'attributs DW_AT_GNU_locview\n"
-#: dwarf.c:2824
+#: dwarf.c:2820
msgid "More DW_AT_GNU_locview attributes than location offset attributes\n"
msgstr "Plus d'attributs DW_AT_GNU_locview que d'attributs de décalage d'emplacements\n"
-#: dwarf.c:2893 dwarf.c:2925 dwarf.c:2940
+#: dwarf.c:2889 dwarf.c:2921 dwarf.c:2936
#, c-format
msgid "Unsupported form (%s) for attribute %s\n"
msgstr "Forme (%s) non supportée pour l'attribut %s\n"
-#: dwarf.c:2985
+#: dwarf.c:2983
#, c-format
msgid "(not inlined)"
msgstr "(pas en ligne)"
-#: dwarf.c:2988
+#: dwarf.c:2986
#, c-format
msgid "(inlined)"
msgstr "(en ligne)"
-#: dwarf.c:2991
+#: dwarf.c:2989
#, c-format
msgid "(declared as inline but ignored)"
msgstr "(déclaré comme en ligne mais ignoré)"
-#: dwarf.c:2994
+#: dwarf.c:2992
#, c-format
msgid "(declared as inline and inlined)"
msgstr "(déclaré comme en-ligne et en-ligné)"
-#: dwarf.c:2997
+#: dwarf.c:2995
#, c-format
msgid " (Unknown inline attribute value: %s)"
msgstr " (valeur d'attribut en ligne inconnue : %s)"
-#: dwarf.c:3054
+#: dwarf.c:3052
#, c-format
msgid "(implementation defined: %s)"
msgstr "(défini par l'implémentation : %s)"
-#: dwarf.c:3057
+#: dwarf.c:3055
#, c-format
msgid "(Unknown: %s)"
msgstr "(Inconnu : %s)"
-#: dwarf.c:3102
+#: dwarf.c:3100
#, c-format
msgid "(user defined type)"
msgstr "(défini par l'utilisateur)"
-#: dwarf.c:3104
+#: dwarf.c:3102
#, c-format
msgid "(unknown type)"
msgstr "(type inconnu)"
-#: dwarf.c:3117
+#: dwarf.c:3115
#, c-format
msgid "(unknown accessibility)"
msgstr "(accessibilité inconnue)"
-#: dwarf.c:3129
+#: dwarf.c:3127
#, c-format
msgid "(unknown visibility)"
msgstr "(visibilité inconnue)"
-#: dwarf.c:3142
+#: dwarf.c:3140
#, c-format
msgid "(user specified)"
msgstr "(spécifié par l'utilisateur)"
-#: dwarf.c:3144
+#: dwarf.c:3142
#, c-format
msgid "(unknown endianity)"
msgstr "(type de boutisme inconnu)"
-#: dwarf.c:3156
+#: dwarf.c:3154
#, c-format
msgid "(unknown virtuality)"
msgstr "(virtualité inconnue)"
-#: dwarf.c:3168
+#: dwarf.c:3166
#, c-format
msgid "(unknown case)"
msgstr "(cas inconnu)"
-#: dwarf.c:3186
+#: dwarf.c:3184
#, c-format
msgid "(user defined)"
msgstr "(défini par l'utilisateur)"
-#: dwarf.c:3188
+#: dwarf.c:3186
#, c-format
msgid "(unknown convention)"
msgstr "(convention inconnue)"
-#: dwarf.c:3197
+#: dwarf.c:3195
#, c-format
msgid "(undefined)"
msgstr "(non défini)"
-#: dwarf.c:3207
+#: dwarf.c:3205
#, c-format
msgid "(unsigned)"
msgstr "(non signé)"
-#: dwarf.c:3208
+#: dwarf.c:3206
#, c-format
msgid "(leading overpunch)"
msgstr "(surperforation au début)"
-#: dwarf.c:3209
+#: dwarf.c:3207
#, c-format
msgid "(trailing overpunch)"
msgstr "(surperforation à la fin)"
-#: dwarf.c:3210
+#: dwarf.c:3208
#, c-format
msgid "(leading separate)"
msgstr "(séparateur au début)"
-#: dwarf.c:3211
+#: dwarf.c:3209
#, c-format
msgid "(trailing separate)"
msgstr "(séparateur à la fin)"
-#: dwarf.c:3212 dwarf.c:3223
+#: dwarf.c:3210 dwarf.c:3221
#, c-format
msgid "(unrecognised)"
msgstr "(non reconnu)"
-#: dwarf.c:3220
+#: dwarf.c:3218
#, c-format
msgid "(no)"
msgstr "(non)"
-#: dwarf.c:3221
+#: dwarf.c:3219
#, c-format
msgid "(in class)"
msgstr "(dans la classe)"
-#: dwarf.c:3222
+#: dwarf.c:3220
#, c-format
msgid "(out of class)"
msgstr "(hors de la classe)"
-#: dwarf.c:3254
+#: dwarf.c:3252
#, c-format
msgid " (location list)"
msgstr " (liste de localisations)"
-#: dwarf.c:3275 dwarf.c:6444 dwarf.c:6614 dwarf.c:6789
+#: dwarf.c:3273 dwarf.c:6449 dwarf.c:6620 dwarf.c:6796
#, c-format
msgid " [without DW_AT_frame_base]"
msgstr " [sans DW_AT_frame_base]"
-#: dwarf.c:3305
+#: dwarf.c:3303
#, c-format
msgid "Offset %s used as value for DW_AT_import attribute of DIE at offset 0x%lx is too big.\n"
msgstr "L'offset %s utilisé comme valeur pour l'attribut DW_AT_import de DIE à l'offset 0x%lx est trop grand.\n"
-#: dwarf.c:3311
+#: dwarf.c:3309
#, c-format
msgid "\t[Abbrev Number: %ld"
msgstr "\t[Numéro d'abréviation : %ld"
-#: dwarf.c:3406
+#: dwarf.c:3404
#, c-format
msgid ""
"Raw dump of debug contents of section %s (loaded from %s):\n"
@@ -2401,7 +2406,7 @@ msgstr ""
"Vidange du contenu de débogage de la section %s (chargé depuis %s) :\n"
"\n"
-#: dwarf.c:3409
+#: dwarf.c:3407
#, c-format
msgid ""
"Raw dump of debug contents of section %s:\n"
@@ -2410,7 +2415,7 @@ msgstr ""
"Vidange du contenu de débogage de la section %s :\n"
"\n"
-#: dwarf.c:3414
+#: dwarf.c:3412
#, c-format
msgid ""
"Contents of the %s section (loaded from %s):\n"
@@ -2419,7 +2424,7 @@ msgstr ""
"Contenu de la section %s (chargé depuis %s) :\n"
"\n"
-#: dwarf.c:3417
+#: dwarf.c:3415
#, c-format
msgid ""
"Contents of the %s section:\n"
@@ -2428,15 +2433,15 @@ msgstr ""
"Contenu de la section %s :\n"
"\n"
-#: dwarf.c:3460
+#: dwarf.c:3458
#, c-format
msgid "Reserved length value (0x%s) found in section %s\n"
msgstr "La longueur réservée (0x%s) a été trouvée dans la section %s\n"
-#: dwarf.c:3470
+#: dwarf.c:3468
#, c-format
-msgid "Corrupt unit length (0x%s) found in section %s\n"
-msgstr "Longueur d'unité corrompue (0x%s) dans la section %s\n"
+msgid "Corrupt unit length (got 0x%s expected at most 0x%s) in section %s\n"
+msgstr "Longueur d'unité corrompue (a obtenu 0x%s quand au plus 0x%s était attendu) dans la section %s\n"
#: dwarf.c:3479
#, c-format
@@ -2580,7 +2585,7 @@ msgstr "Le champ de longueur (0x%lX) dans l'en-tête de debug_line est erroné
msgid "Only DWARF version 2, 3, 4 and 5 line info is currently supported.\n"
msgstr "Seule la ligne d'info des versions 2, 3, 4 et 5 de DWARF est actuellement supportée.\n"
-#: dwarf.c:4126 dwarf.c:6882 dwarf.c:7747
+#: dwarf.c:4126 dwarf.c:6889 dwarf.c:7763
#, c-format
msgid "The %s section contains unsupported segment selector size: %d.\n"
msgstr "La section %s contient des tailles de sélecteurs de segments non supportés: %d.\n"
@@ -2741,7 +2746,7 @@ msgstr " Somme de contrôle: "
msgid "Partial .debug_line. section encountered without a prior full .debug_line section\n"
msgstr "Section .debug_line. partielle rencontrée sans section .debug_line complète précédente\n"
-#: dwarf.c:4412 dwarf.c:5962
+#: dwarf.c:4412 dwarf.c:5967
#, c-format
msgid " Offset: 0x%lx\n"
msgstr " Offset: 0x%lx\n"
@@ -2970,7 +2975,7 @@ msgstr " Initialiser epilogue_begin à VRAI\n"
msgid " Set ISA to %s\n"
msgstr " Initialiser ISA à %s\n"
-#: dwarf.c:4755 dwarf.c:5392
+#: dwarf.c:4755 dwarf.c:5394
#, c-format
msgid " Unknown opcode %d with operands: "
msgstr " opcode %d inconnu avec les opérandes :"
@@ -3016,22 +3021,22 @@ msgstr "CU: Pas de table de répertoires\n"
msgid "CU: %s:\n"
msgstr "CU: %s:\n"
-#: dwarf.c:5130 dwarf.c:5430 readelf.c:6373 readelf.c:6470 readelf.c:6488
-#: readelf.c:6506 readelf.c:7306 readelf.c:11504 readelf.c:12169
-#: readelf.c:12182 readelf.c:17545 readelf.c:17577
+#: dwarf.c:5130 dwarf.c:5435 readelf.c:6715 readelf.c:6812 readelf.c:6830
+#: readelf.c:6848 readelf.c:7652 readelf.c:11854 readelf.c:12519
+#: readelf.c:12532 readelf.c:17921 readelf.c:17953
msgid "<unknown>"
msgstr "<inconnu>"
-#: dwarf.c:5133 dwarf.c:5322
+#: dwarf.c:5133 dwarf.c:5324
#, c-format
msgid "directory index %u > number of directories %s\n"
msgstr "l'index de répertoire %u > nombre de répertoires %s\n"
-#: dwarf.c:5135 dwarf.c:5424 elfcomm.c:777 readelf.c:356 readelf.c:745
-#: readelf.c:7483 readelf.c:8044 readelf.c:10075 readelf.c:12496
-#: readelf.c:12562 readelf.c:12566 readelf.c:12634 readelf.c:12639
-#: readelf.c:16278 readelf.c:16367 readelf.c:16960 readelf.c:16979
-#: readelf.c:17098 readelf.c:17554 readelf.c:18710 readelf.c:18713
+#: dwarf.c:5135 dwarf.c:5429 elfcomm.c:777 readelf.c:389 readelf.c:923
+#: readelf.c:7830 readelf.c:8393 readelf.c:10429 readelf.c:12871
+#: readelf.c:12937 readelf.c:12941 readelf.c:13013 readelf.c:13018
+#: readelf.c:16651 readelf.c:16740 readelf.c:17333 readelf.c:17352
+#: readelf.c:17471 readelf.c:17930 readelf.c:19085 readelf.c:19088
#, c-format
msgid "<corrupt>"
msgstr "<corrompu>"
@@ -3056,7 +3061,7 @@ msgstr "CU: Table des noms de fichiers vide\n"
msgid "UNKNOWN (%u): length %ld\n"
msgstr "INCONNU (%u) : longueur %ld\n"
-#: dwarf.c:5306
+#: dwarf.c:5308
#, c-format
msgid ""
"\n"
@@ -3065,12 +3070,12 @@ msgstr ""
"\n"
" [Utiliser l'entrée %d de la table des fichiers]\n"
-#: dwarf.c:5310
+#: dwarf.c:5312
#, c-format
msgid "file index %u > number of files %u\n"
msgstr "index de fichier %u > nombre de fichiers %u\n"
-#: dwarf.c:5311
+#: dwarf.c:5313
#, c-format
msgid ""
"\n"
@@ -3079,7 +3084,7 @@ msgstr ""
"\n"
" <index de table de fichier %u extrêmement grand>"
-#: dwarf.c:5317
+#: dwarf.c:5319
#, c-format
msgid ""
"\n"
@@ -3088,7 +3093,7 @@ msgstr ""
"\n"
" [Utiliser le fichier %s de la table des répertoires %d]\n"
-#: dwarf.c:5324
+#: dwarf.c:5326
#, c-format
msgid ""
"\n"
@@ -3097,83 +3102,83 @@ msgstr ""
"\n"
" <entrée de la table des répertoires %u extrêmement grande>\n"
-#: dwarf.c:5388
+#: dwarf.c:5390
#, c-format
msgid " Set ISA to %lu\n"
msgstr " Initialiser ISA à %lu\n"
-#: dwarf.c:5423
+#: dwarf.c:5428
#, c-format
msgid "corrupt file index %u encountered\n"
msgstr "l'index de fichier %u corrompu a été rencontré\n"
-#: dwarf.c:5592
+#: dwarf.c:5597
msgid "no info"
msgstr "aucune info"
-#: dwarf.c:5593
+#: dwarf.c:5598
msgid "type"
msgstr "type"
-#: dwarf.c:5594
+#: dwarf.c:5599
msgid "variable"
msgstr "variable"
-#: dwarf.c:5595
+#: dwarf.c:5600
msgid "function"
msgstr "fonction"
-#: dwarf.c:5596
+#: dwarf.c:5601
msgid "other"
msgstr "autre"
-#: dwarf.c:5597
+#: dwarf.c:5602
msgid "unused5"
msgstr "inutilisé5"
-#: dwarf.c:5598
+#: dwarf.c:5603
msgid "unused6"
msgstr "inutilisé6"
-#: dwarf.c:5599
+#: dwarf.c:5604
msgid "unused7"
msgstr "inutilisé7"
-#: dwarf.c:5637 dwarf.c:7210 dwarf.c:9605
+#: dwarf.c:5642 dwarf.c:7220 dwarf.c:9626
#, c-format
msgid "Debug info is corrupted, %s header at %#lx has length %s\n"
msgstr "L'information de débogage est corrompue, l'en-tête %s à %#lx à la longueur %s\n"
-#: dwarf.c:5653 dwarf.c:7225
+#: dwarf.c:5658 dwarf.c:7235
#, c-format
msgid ".debug_info offset of 0x%lx in %s section does not point to a CU header.\n"
msgstr "L'offset « .debug_info » de 0x%lx dans la section %s ne pointe pas vers un en-tête CU.\n"
-#: dwarf.c:5658
+#: dwarf.c:5663
#, c-format
msgid " Length: %ld\n"
msgstr " Longueur: %ld\n"
-#: dwarf.c:5660
+#: dwarf.c:5665
#, c-format
msgid " Version: %d\n"
msgstr " Version: %d\n"
-#: dwarf.c:5662
+#: dwarf.c:5667
#, c-format
msgid " Offset into .debug_info section: 0x%lx\n"
msgstr " Décalage dans la section .debug_info:0x%lx\n"
-#: dwarf.c:5664
+#: dwarf.c:5669
#, c-format
msgid " Size of area in .debug_info section: %ld\n"
msgstr " Taille de la zone dans la section .debug_info: %ld\n"
-#: dwarf.c:5673
+#: dwarf.c:5678
msgid "Only DWARF 2 and 3 pubnames are currently supported\n"
msgstr "Seuls les noms publics DWARF 2 et 3 sont actuellement supportés\n"
-#: dwarf.c:5681
+#: dwarf.c:5686
#, c-format
msgid ""
"\n"
@@ -3182,7 +3187,7 @@ msgstr ""
"\n"
" Décalage Genre Nom\n"
-#: dwarf.c:5683
+#: dwarf.c:5688
#, c-format
msgid ""
"\n"
@@ -3191,217 +3196,217 @@ msgstr ""
"\n"
" Décalage\tNom\n"
-#: dwarf.c:5717
+#: dwarf.c:5722
msgid "s"
msgstr "s"
-#: dwarf.c:5717
+#: dwarf.c:5722
msgid "g"
msgstr "g"
-#: dwarf.c:5775
+#: dwarf.c:5780
#, c-format
msgid " DW_MACINFO_start_file - lineno: %d filenum: %d\n"
msgstr " DW_MACINFO_start_file – n° de ligne: %d n° de fichier: %d\n"
-#: dwarf.c:5781
+#: dwarf.c:5786
#, c-format
msgid " DW_MACINFO_end_file\n"
msgstr " DW_MACINFO_end_file\n"
-#: dwarf.c:5788
+#: dwarf.c:5793
#, c-format
msgid " DW_MACINFO_define - lineno : %d macro : %*s\n"
msgstr " DW_MACINFO_define – n° de ligne : %d macro : %*s\n"
-#: dwarf.c:5798
+#: dwarf.c:5803
#, c-format
msgid " DW_MACINFO_undef - lineno : %d macro : %*s\n"
msgstr " DW_MACINFO_undef – n° de ligne : %d macro : %*s\n"
-#: dwarf.c:5811
+#: dwarf.c:5816
#, c-format
msgid " DW_MACINFO_vendor_ext - constant : %d string : %*s\n"
msgstr " DW_MACINFO_vendor_ext – constante : %d chaîne : %*s\n"
-#: dwarf.c:5955
+#: dwarf.c:5960
#, c-format
msgid "Expected to find a version number of 4 or 5 in section %s but found %d instead\n"
msgstr "Le numéro de version 4 ou 5 était attendu dans la section %s mais %d a été trouvé à la place\n"
-#: dwarf.c:5964
+#: dwarf.c:5969
#, c-format
msgid " Version: %d\n"
msgstr " Version: %d\n"
-#: dwarf.c:5965
+#: dwarf.c:5970
#, c-format
msgid " Offset size: %d\n"
msgstr " Taille décalage: %d\n"
-#: dwarf.c:5969
+#: dwarf.c:5974
#, c-format
msgid " Offset into .debug_line: 0x%lx\n"
msgstr " Décalage dans .debug_line: 0x%lx\n"
-#: dwarf.c:5983
+#: dwarf.c:5988
#, c-format
msgid " Extension opcode arguments:\n"
msgstr " Arguments opcode d'extension :\n"
-#: dwarf.c:5990
+#: dwarf.c:5995
#, c-format
msgid " DW_MACRO_%02x has no arguments\n"
msgstr " DW_MACRO_%02x n'a pas argument\n"
-#: dwarf.c:5993
+#: dwarf.c:5998
#, c-format
msgid " DW_MACRO_%02x arguments: "
msgstr " Arguments DW_MACRO_%02x : "
-#: dwarf.c:6019
+#: dwarf.c:6024
#, c-format
msgid "Invalid extension opcode form %s\n"
msgstr "Opcode d'extension invalide de %s\n"
-#: dwarf.c:6036
+#: dwarf.c:6041
msgid ".debug_macro section not zero terminated\n"
msgstr "section .debug_macro pas terminée par un zéro\n"
-#: dwarf.c:6050
+#: dwarf.c:6055
#, c-format
msgid " DW_MACRO_define - lineno : %d macro : %*s\n"
msgstr " DW_MACRO_define – n° ligne : %d macro : %*s\n"
-#: dwarf.c:6060
+#: dwarf.c:6065
#, c-format
msgid " DW_MACRO_undef - lineno : %d macro : %*s\n"
msgstr " DW_MACRO_undef – n° ligne : %d macro : %*s\n"
-#: dwarf.c:6075
+#: dwarf.c:6080
msgid "DW_MACRO_start_file used, but no .debug_line offset provided.\n"
msgstr "DW_MACRO_start_file utilisé, mais aucun décalage .debug_line fourni.\n"
-#: dwarf.c:6081
+#: dwarf.c:6086
#, c-format
msgid " DW_MACRO_start_file - lineno: %d filenum: %d\n"
msgstr " DW_MACRO_start_file – n° ligne : %d n° fichier : %d\n"
-#: dwarf.c:6084
+#: dwarf.c:6089
#, c-format
msgid " DW_MACRO_start_file - lineno: %d filenum: %d filename: %s%s%s\n"
msgstr " DW_MACRO_start_file – n° ligne : %d n° fichier : %d nomfichier : %s%s%s\n"
-#: dwarf.c:6092
+#: dwarf.c:6097
#, c-format
msgid " DW_MACRO_end_file\n"
msgstr " DW_MACRO_end_file\n"
-#: dwarf.c:6102
+#: dwarf.c:6107
#, c-format
msgid " DW_MACRO_define_strp - lineno : %d macro : %s\n"
msgstr " DW_MACRO_define_strp – n° ligne : %d macro : %s\n"
-#: dwarf.c:6113
+#: dwarf.c:6118
#, c-format
msgid " DW_MACRO_undef_strp - lineno : %d macro : %s\n"
msgstr " DW_MACRO_undef_strp – n° ligne : %d macro : %s\n"
-#: dwarf.c:6119
+#: dwarf.c:6124
#, c-format
msgid " DW_MACRO_import - offset : 0x%lx\n"
msgstr " DW_MACRO_import – décalage : 0x%lx\n"
-#: dwarf.c:6126
+#: dwarf.c:6131
#, c-format
msgid " DW_MACRO_define_sup - lineno : %d macro offset : 0x%lx\n"
msgstr " DW_MACRO_define_sup – n° ligne : décalage macro %d : 0x%lx\n"
-#: dwarf.c:6133
+#: dwarf.c:6138
#, c-format
msgid " DW_MACRO_undef_sup - lineno : %d macro offset : 0x%lx\n"
msgstr " DW_MACRO_undef_sup – n° ligne : décalage macro %d : 0x%lx\n"
-#: dwarf.c:6139
+#: dwarf.c:6144
#, c-format
msgid " DW_MACRO_import_sup - offset : 0x%lx\n"
msgstr " DW_MACRO_import_sup – décalage : 0x%lx\n"
-#: dwarf.c:6154
+#: dwarf.c:6159
#, c-format
msgid "(with offset %s) "
msgstr "(avec l'offset %s) "
-#: dwarf.c:6155
+#: dwarf.c:6160
#, c-format
msgid "lineno : %d macro : %s\n"
msgstr "n° ligne : %d macro : %s\n"
-#: dwarf.c:6162
+#: dwarf.c:6167
#, c-format
msgid " <Target Specific macro op: %#x - UNHANDLED"
msgstr " <Op de macro spécifique à la cible: %#x – NON GÉRÉ"
-#: dwarf.c:6168
+#: dwarf.c:6173
#, c-format
msgid " Unknown macro opcode %02x seen\n"
msgstr " Opcode macro %02x inconnu\n"
-#: dwarf.c:6179
+#: dwarf.c:6184
#, c-format
msgid " DW_MACRO_%02x\n"
msgstr " DW_MACRO_%02x\n"
-#: dwarf.c:6182
+#: dwarf.c:6187
#, c-format
msgid " DW_MACRO_%02x -"
msgstr " DW_MACRO_%02x -"
-#: dwarf.c:6237
+#: dwarf.c:6242
#, c-format
msgid " Number TAG (0x%lx)\n"
msgstr " Numéro d'étiquette (0x%lx)\n"
-#: dwarf.c:6246
+#: dwarf.c:6251
msgid "has children"
msgstr "a des rejetons"
-#: dwarf.c:6246
+#: dwarf.c:6251
msgid "no children"
msgstr "aucun rejeton"
-#: dwarf.c:6308
+#: dwarf.c:6313
#, c-format
msgid "location view pair\n"
msgstr "paire de visualisation d'emplacement\n"
-#: dwarf.c:6340
+#: dwarf.c:6344
#, c-format
msgid "No debug information available for loc lists of entry: %u\n"
msgstr "Pas d'informations de débogage disponible pour les listes de localisation de l'entrée: %u\n"
-#: dwarf.c:6352 dwarf.c:6499 dwarf.c:6682
+#: dwarf.c:6356 dwarf.c:6504 dwarf.c:6688
#, c-format
msgid "Invalid pointer size (%d) in debug info for entry %d\n"
msgstr "Taille de pointeur (%d) invalide dans l'information de débogage pour l'entrée %d\n"
-#: dwarf.c:6364 dwarf.c:6417 dwarf.c:6426 dwarf.c:6511 dwarf.c:6588
-#: dwarf.c:6596 dwarf.c:6693 dwarf.c:6766 dwarf.c:6774
+#: dwarf.c:6368 dwarf.c:6422 dwarf.c:6431 dwarf.c:6516 dwarf.c:6594
+#: dwarf.c:6602 dwarf.c:6700 dwarf.c:6773 dwarf.c:6781
#, c-format
msgid "Location list starting at offset 0x%lx is not terminated.\n"
msgstr "La liste de localisation débutant à l'adresse 0x%lx n'est pas terminée.\n"
-#: dwarf.c:6385 dwarf.c:6539 dwarf.c:6731 dwarf.c:7569 dwarf.c:7624
+#: dwarf.c:6390 dwarf.c:6545 dwarf.c:6738 dwarf.c:7582 dwarf.c:7640
#, c-format
msgid "<End of list>\n"
msgstr "<Fin de liste>\n"
-#: dwarf.c:6397 dwarf.c:6560 dwarf.c:7629
+#: dwarf.c:6402 dwarf.c:6566 dwarf.c:7645
#, c-format
msgid "(base address)\n"
msgstr "(adresse de départ)\n"
-#: dwarf.c:6411 dwarf.c:6532 dwarf.c:6719
+#: dwarf.c:6416 dwarf.c:6538 dwarf.c:6726
#, c-format
msgid ""
"views at %8.8lx for:\n"
@@ -3410,55 +3415,55 @@ msgstr ""
"vues à %8.8lx pour:\n"
" %*s "
-#: dwarf.c:6447 dwarf.c:6617
+#: dwarf.c:6452 dwarf.c:6623
msgid " (start == end)"
msgstr " (début == fin)"
-#: dwarf.c:6449 dwarf.c:6619
+#: dwarf.c:6454 dwarf.c:6625
msgid " (start > end)"
msgstr " (début > fin)"
-#: dwarf.c:6486
+#: dwarf.c:6491
#, c-format
msgid "No debug information available for loclists lists of entry: %u\n"
msgstr "Aucune information de débogage disponible pour les listes loclists de l'entrée: %u\n"
-#: dwarf.c:6565
+#: dwarf.c:6571
#, c-format
msgid "View pair entry in loclist with locviews attribute\n"
msgstr "Entrée de paire de visualisation dans loclist avec l'attribut locviews\n"
-#: dwarf.c:6572
+#: dwarf.c:6578
#, c-format
msgid "views for:\n"
msgstr "vues pour:\n"
-#: dwarf.c:6576
+#: dwarf.c:6582
#, c-format
msgid "Invalid location list entry type %d\n"
msgstr "Type d'entrée %d invalide dans la liste des localisations\n"
-#: dwarf.c:6628
+#: dwarf.c:6634
#, c-format
msgid "Trailing view pair not used in a range"
msgstr "Paire de vue à la fin pas utilisée dans une plage"
-#: dwarf.c:6670
+#: dwarf.c:6676
#, c-format
msgid "No debug information for loc lists of entry: %u\n"
msgstr "Pas d'information de débogage pour les listes de localisation de l'entrée: %u\n"
-#: dwarf.c:6737
+#: dwarf.c:6744
#, c-format
msgid "(base address selection entry)\n"
msgstr "(entrée de sélection de l'adresse de départ)\n"
-#: dwarf.c:6758
+#: dwarf.c:6765
#, c-format
msgid "Unknown location list entry type 0x%x.\n"
msgstr "Type 0x%x d'entrée de liste de localiations inconnu.\n"
-#: dwarf.c:6851 dwarf.c:7104 dwarf.c:7323 dwarf.c:7430 dwarf.c:7691
+#: dwarf.c:6858 dwarf.c:7115 dwarf.c:7333 dwarf.c:7440 dwarf.c:7708
#, c-format
msgid ""
"\n"
@@ -3467,31 +3472,31 @@ msgstr ""
"\n"
"La section %s est vide.\n"
-#: dwarf.c:6871
+#: dwarf.c:6878
#, c-format
msgid "The %s section contains corrupt or unsupported version number: %d.\n"
msgstr "La section %s contient un numéro de version corrompu ou non supporté : %d.\n"
-#: dwarf.c:6891
+#: dwarf.c:6898
#, c-format
msgid "The %s section contains unsupported offset entry count: %d.\n"
msgstr "La section %s contient un nombre de décalages d'entrée non supporté: %d.\n"
-#: dwarf.c:6902 dwarf.c:7329 dwarf.c:7765
+#: dwarf.c:6909 dwarf.c:7339 dwarf.c:7781
#, c-format
msgid "Unable to load/parse the .debug_info section, so cannot interpret the %s section.\n"
msgstr "Incapable de charger/décoder la section « .debug_info », donc on ne peut pas interpréter la section %s.\n"
-#: dwarf.c:6950
+#: dwarf.c:6957
msgid "No location lists in .debug_info section!\n"
msgstr "Pas de liste de localisation dans la section .debug_info !\n"
-#: dwarf.c:6955
+#: dwarf.c:6962
#, c-format
msgid "Location lists in %s section start at 0x%s\n"
msgstr "Listes de localisation dans la section %s débutent à 0x%s\n"
-#: dwarf.c:6965
+#: dwarf.c:6972
#, c-format
msgid ""
" Warning: This section has relocations - addresses seen here may not be accurate.\n"
@@ -3500,85 +3505,85 @@ msgstr ""
" Attention: Cette section a des relocalisations – les adresses vues ici pourraient être inexactes.\n"
"\n"
-#: dwarf.c:6967
+#: dwarf.c:6974
#, c-format
msgid " Offset Begin End Expression\n"
msgstr " Décalage Début Fin Expression\n"
-#: dwarf.c:7022
+#: dwarf.c:7029 dwarf.c:7882
#, c-format
-msgid "There is a hole [0x%lx - 0x%lx] in .debug_loc section.\n"
-msgstr "Il y a un trou [0x%lx - 0x%lx] dans la section .debug_loc.\n"
+msgid "There is a hole [0x%lx - 0x%lx] in %s section.\n"
+msgstr "Il y a un trou [0x%lx - 0x%lx] dans la section %s.\n"
-#: dwarf.c:7026
+#: dwarf.c:7034 dwarf.c:7889
#, c-format
-msgid "There is an overlap [0x%lx - 0x%lx] in .debug_loc section.\n"
-msgstr "Il y a un chevauchement [0x%lx - 0x%lx] dans la section .debug_loc.\n"
+msgid "There is an overlap [0x%lx - 0x%lx] in %s section.\n"
+msgstr "Il y a un chevauchement [0x%lx - 0x%lx] dans la section %s.\n"
-#: dwarf.c:7035
+#: dwarf.c:7044
#, c-format
-msgid "Offset 0x%lx is bigger than .debug_loc section size.\n"
-msgstr "Le décalage 0x%lx est plus grand que la taille de la section .debug_loc.\n"
+msgid "Offset 0x%lx is bigger than %s section size.\n"
+msgstr "Le décalage 0x%lx est plus grand que la taille de la section %s.\n"
-#: dwarf.c:7042
+#: dwarf.c:7052
#, c-format
-msgid "View Offset 0x%lx is bigger than .debug_loc section size.\n"
-msgstr "Le décalage de la vue 0x%lx est plus grand que la taille de la section .debug_loc.\n"
+msgid "View Offset 0x%lx is bigger than %s section size.\n"
+msgstr "Le décalage de la vue 0x%lx est plus grand que la taille de la section %s.\n"
-#: dwarf.c:7059
+#: dwarf.c:7070
msgid "DWO is not yet supported.\n"
msgstr "DWO n'est pas encore supporté.\n"
-#: dwarf.c:7076
+#: dwarf.c:7087
msgid "Hole and overlap detection requires adjacent view lists and loclists.\n"
msgstr "La détection des trous et des chevauchements requiert des listes et des loclists de vues adjacentes.\n"
-#: dwarf.c:7085
+#: dwarf.c:7096
#, c-format
msgid "There is %ld unused byte at the end of section %s\n"
msgid_plural "There are %ld unused bytes at the end of section %s\n"
msgstr[0] "Il y a %ld octet inutilisé à la fin de la section %s\n"
msgstr[1] "Il y a %ld octets inutilisés à la fin de la section %s\n"
-#: dwarf.c:7238
+#: dwarf.c:7248
msgid "Only DWARF 2 and 3 aranges are currently supported.\n"
msgstr "Seuls les aranges DWARF des versions 2 et 3 sont actuellement supportés.\n"
-#: dwarf.c:7242
+#: dwarf.c:7252
#, c-format
msgid " Length: %ld\n"
msgstr " Longueur %ld\n"
-#: dwarf.c:7244
+#: dwarf.c:7254
#, c-format
msgid " Version: %d\n"
msgstr " Version: %d\n"
-#: dwarf.c:7245
+#: dwarf.c:7255
#, c-format
msgid " Offset into .debug_info: 0x%lx\n"
msgstr " Décalage dans .debug_info: 0x%lx\n"
-#: dwarf.c:7247
+#: dwarf.c:7257
#, c-format
msgid " Pointer Size: %d\n"
msgstr " Taille des pointeurs: %d\n"
-#: dwarf.c:7248
+#: dwarf.c:7258
#, c-format
msgid " Segment Size: %d\n"
msgstr " Taille des segments: %d\n"
-#: dwarf.c:7255
+#: dwarf.c:7265
#, c-format
msgid "Invalid address size in %s section!\n"
msgstr "Taille d'adresse invalide dans la section %s !\n"
-#: dwarf.c:7265
+#: dwarf.c:7275
msgid "Pointer size + Segment size is not a power of two.\n"
msgstr "Taille du segment + taille du pointer n'est pas une puissance de deux.\n"
-#: dwarf.c:7270
+#: dwarf.c:7280
#, c-format
msgid ""
"\n"
@@ -3587,7 +3592,7 @@ msgstr ""
"\n"
" Adresse Longueur\n"
-#: dwarf.c:7272
+#: dwarf.c:7282
#, c-format
msgid ""
"\n"
@@ -3596,287 +3601,284 @@ msgstr ""
"\n"
" Adresse Longueur\n"
-#: dwarf.c:7349
+#: dwarf.c:7359
#, c-format
msgid "Corrupt address base (%lx) found in debug section %u\n"
msgstr "Adresse de base (%lx) corrompue rencontrée dans la section de débogage %u\n"
-#: dwarf.c:7366
+#: dwarf.c:7376
#, c-format
msgid " For compilation unit at offset 0x%s:\n"
msgstr " Pour l'unité de compilation à l'offset 0x%s :\n"
-#: dwarf.c:7369
+#: dwarf.c:7379
#, c-format
msgid "\tIndex\tAddress\n"
msgstr "\tIndex\tAdresse\n"
-#: dwarf.c:7381
+#: dwarf.c:7391
#, c-format
msgid "Corrupt %s section: expecting header size of 8 or 16, but found %ld instead\n"
msgstr "Section %s corrompue : un en-tête de taille 8 ou 16 est attendu mais %ld est rencontré à la place\n"
-#: dwarf.c:7393
+#: dwarf.c:7403
#, c-format
msgid "Corrupt %s section: expecting version number 5 in header but found %d instead\n"
msgstr "Section %s corrompue : la version 5 est attendue dans l'en-tête mais %d est trouvé à la place\n"
-#: dwarf.c:7407
+#: dwarf.c:7417
#, c-format
msgid "\t%d:\t"
msgstr "\t%d:\t"
-#: dwarf.c:7472 dwarf.c:7496
+#: dwarf.c:7482 dwarf.c:7506
#, c-format
msgid " Length: %#lx\n"
msgstr " longueur: %#lx\n"
-#: dwarf.c:7473 dwarf.c:7498
+#: dwarf.c:7483 dwarf.c:7508
#, c-format
msgid " Index Offset [String]\n"
msgstr " Index Offset [Chaîne]\n"
-#: dwarf.c:7481
+#: dwarf.c:7491
#, c-format
msgid "Section %s is too small %#lx\n"
msgstr "La section %s est trop petite %#lx\n"
-#: dwarf.c:7489
+#: dwarf.c:7499
#, c-format
msgid "Unexpected version number in str_offset header: %#x\n"
msgstr "Numéro de version inattendu dans l'en-tête str_offset : %#x\n"
-#: dwarf.c:7494
+#: dwarf.c:7504
#, c-format
msgid "Unexpected value in str_offset header's padding field: %#x\n"
msgstr "Valeur inattendue dans le champ de remplissage de l'en-tête str_offset : %#x\n"
-#: dwarf.c:7497
+#: dwarf.c:7507
#, c-format
msgid " Version: %#lx\n"
msgstr " Version: %#lx\n"
-#: dwarf.c:7588 dwarf.c:7665
+#: dwarf.c:7601 dwarf.c:7681
msgid "(start == end)"
msgstr "(début == fin)"
-#: dwarf.c:7590 dwarf.c:7667
+#: dwarf.c:7603 dwarf.c:7683
msgid "(start > end)"
msgstr "(début > fin)"
-#: dwarf.c:7612
+#: dwarf.c:7627
#, c-format
-msgid "Range list starting at offset 0x%lx is not terminated.\n"
-msgstr "La liste de plages débutant à l'adresse 0x%lx n'est pas terminée.\n"
+msgid "Range list starting at offset 0x%s is not terminated.\n"
+msgstr "La liste de plages débutant à l'adresse 0x%s n'est pas terminée.\n"
-#: dwarf.c:7645
+#: dwarf.c:7661
#, c-format
msgid "Invalid range list entry type %d\n"
msgstr "Type %d d'entrée de liste de plages invalide.\n"
-#: dwarf.c:7725
+#: dwarf.c:7742
#, c-format
msgid "The length field (0x%lx) in the debug_rnglists header is wrong - the section is too small\n"
msgstr "Le champ de longueur (0x%lx) dans l'en-tête de debug_rnglists est erroné – la section est trop petite\n"
-#: dwarf.c:7737
+#: dwarf.c:7753
msgid "Only DWARF version 5 debug_rnglists info is currently supported.\n"
msgstr "Seules les informations de debug_rnglists de la version 5 de DWARF sont actuellement supportées.\n"
-#: dwarf.c:7756
+#: dwarf.c:7772
#, c-format
msgid "The %s section contains unsupported offset entry count: %u.\n"
msgstr "La section %s contient un nombre d'entrées d'offset non supporté: %u\n"
#. This can happen when the file was compiled with -gsplit-debug
#. which removes references to range lists from the primary .o file.
-#: dwarf.c:7786
+#: dwarf.c:7802
#, c-format
msgid "No range lists in .debug_info section.\n"
msgstr "Aucune liste d'étendues dans la section .debug_info.\n"
-#: dwarf.c:7818
+#: dwarf.c:7834
#, c-format
msgid "Range lists in %s section start at 0x%lx\n"
msgstr "Listes d'étendues dans la section %s débutent à 0x%lx\n"
-#: dwarf.c:7823
+#: dwarf.c:7839
#, c-format
msgid " Offset Begin End\n"
msgstr " Décalage Début Fin\n"
-#: dwarf.c:7841
+#: dwarf.c:7857
#, c-format
msgid "Corrupt pointer size (%d) in debug entry at offset %8.8lx\n"
msgstr "Taille de pointeur (%d) corrompu dans l'entrée de débogage à l'offset %8.8lx\n"
-#: dwarf.c:7848
+#: dwarf.c:7864
#, c-format
msgid "Corrupt offset (%#8.8lx) in range entry %u\n"
msgstr "Décalage (%#8.8lx) corrompu dans l'entrée de la plage %u\n"
-#: dwarf.c:7866
-#, c-format
-msgid "There is a hole [0x%lx - 0x%lx] in %s section.\n"
-msgstr "Il y a un trou [0x%lx - 0x%lx] dans la section %s.\n"
-
-#: dwarf.c:7873
-#, c-format
-msgid "There is an overlap [0x%lx - 0x%lx] in %s section.\n"
-msgstr "Il y a un chevauchement [0x%lx - 0x%lx] dans la section %s.\n"
-
-#: dwarf.c:7949
+#: dwarf.c:7965
#, c-format
msgid "Unfeasibly large register number: %u\n"
msgstr "Numéro de registre impossiblement grand: %u\n"
-#: dwarf.c:7962
+#: dwarf.c:7978
#, c-format
msgid "Out of memory allocating %u columns in dwarf frame arrays\n"
msgstr "Mémoire épuisée lors de l'allocation de %u colonnes dans les tableaux de trames de dwarf\n"
-#: dwarf.c:8411
+#: dwarf.c:8427
msgid "No terminator for augmentation name\n"
msgstr "Pas de terminaison pour le nom d'augmentation\n"
-#: dwarf.c:8429
+#: dwarf.c:8445
#, c-format
msgid "Invalid pointer size (%d) in CIE data\n"
msgstr "Taille de pointeur invalide (%d) dans les données CIE\n"
-#: dwarf.c:8437
+#: dwarf.c:8453
#, c-format
msgid "Invalid segment size (%d) in CIE data\n"
msgstr "Taille de segment invalide (%d) dans les données CIE\n"
-#: dwarf.c:8473 dwarf.c:8849
+#: dwarf.c:8489 dwarf.c:8862
#, c-format
msgid "Augmentation data too long: 0x%s, expected at most %#lx\n"
msgstr "Données d'augmentation trop grandes: 0x%s, au plus %#lx attendu\n"
-#: dwarf.c:8560
+#: dwarf.c:8576
#, c-format
msgid " Augmentation data: "
msgstr " Données d'augmentation: "
-#: dwarf.c:8576
+#: dwarf.c:8592
msgid "bad register: "
msgstr "mauvais registre : "
-#: dwarf.c:8748
+#: dwarf.c:8764
msgid "Failed to read CIE information\n"
msgstr "Échec de lecture des informations CIE\n"
-#: dwarf.c:8759 dwarf.c:8783 dwarf.c:8810
+#: dwarf.c:8775 dwarf.c:8796 dwarf.c:8823
msgid "Invalid max register\n"
msgstr "Registre max invalide\n"
#. PR 17512: file: 9e196b3e.
-#: dwarf.c:8825
+#: dwarf.c:8838
#, c-format
msgid "Probably corrupt segment size: %d - using 4 instead\n"
msgstr "Taille de segment probablement corrompue: %d — utilise 4 à la place\n"
-#: dwarf.c:9296
+#. Ideally translate "invalid " to 8 chars, trailing space
+#. is optional.
+#: dwarf.c:8884
+#, c-format
+msgid "cie=invalid "
+msgstr "cie=invalide"
+
+#: dwarf.c:9317
msgid "Invalid column number in saved frame state\n"
msgstr "Numéro de colonne invalide dans l'état de trame enregistré\n"
-#: dwarf.c:9343
+#: dwarf.c:9364
#, c-format
msgid " DW_CFA_def_cfa_expression: <corrupt len %lu>\n"
msgstr " DW_CFA_def_cfa_expression: <long %lu corrompue>\n"
-#: dwarf.c:9366
+#: dwarf.c:9387
#, c-format
msgid " DW_CFA_expression: <corrupt len %lu>\n"
msgstr " DW_CFA_expression: <long %lu corrompue>\n"
-#: dwarf.c:9499
+#: dwarf.c:9520
#, c-format
msgid " DW_CFA_??? (User defined call frame op: %#x)\n"
msgstr " DW_CFA_??? (Op d'appel de cadre défini par l'utilisateur: %#x)\n"
-#: dwarf.c:9501
+#: dwarf.c:9522
#, c-format
msgid "Unsupported or unknown Dwarf Call Frame Instruction number: %#x\n"
msgstr "Numéro d'instruction « Dwarf Call Frame » non supporté ou inconnu : %#x\n"
-#: dwarf.c:9615 dwarf.c:10032
+#: dwarf.c:9636 dwarf.c:10053
#, c-format
msgid "Version %ld\n"
msgstr "Version %ld\n"
-#: dwarf.c:9621
+#: dwarf.c:9642
msgid "Only DWARF version 5 .debug_names is currently supported.\n"
msgstr "Seul .debug_names de la version 5 de DWARF est actuellement supportée.\n"
-#: dwarf.c:9628
+#: dwarf.c:9649
#, c-format
msgid "Padding field of .debug_names must be 0 (found 0x%x)\n"
msgstr "Le champ de rembourrage de .debug_names doit être 0 (0x%x rencontré)\n"
-#: dwarf.c:9633
+#: dwarf.c:9654
msgid "Compilation unit count must be >= 1 in .debug_names\n"
msgstr "Le nombre d'unités de compilation doit être >= 1 dans .debug_names\n"
-#: dwarf.c:9644
+#: dwarf.c:9665
#, c-format
msgid "Augmentation string length %u must be rounded up to a multiple of 4 in .debug_names.\n"
msgstr "La longueur de la chaîne d'augmentation %u doit être arrondie vers le haut à un multiple de 4 dans .debug_names.\n"
-#: dwarf.c:9652
+#: dwarf.c:9673
#, c-format
msgid "Augmentation string:"
msgstr "Chaîne d'augmentation:"
-#: dwarf.c:9679
+#: dwarf.c:9700
#, c-format
msgid "CU table:\n"
msgstr "Table CU:\n"
-#: dwarf.c:9688 dwarf.c:9701
+#: dwarf.c:9709 dwarf.c:9722
#, c-format
msgid "[%3u] 0x%lx\n"
msgstr "[%3u] 0x%lx\n"
-#: dwarf.c:9692
+#: dwarf.c:9713
#, c-format
msgid "TU table:\n"
msgstr "Table TU:\n"
-#: dwarf.c:9705
+#: dwarf.c:9726
#, c-format
msgid "Foreign TU table:\n"
msgstr "Table TU étrangère:\n"
-#: dwarf.c:9714
+#: dwarf.c:9735
#, c-format
msgid "[%3u] "
msgstr "[%3u] "
-#: dwarf.c:9725
+#: dwarf.c:9746
#, c-format
msgid "Entry pool offset (0x%lx) exceeds unit size 0x%lx for unit 0x%lx in the debug_names\n"
msgstr "Le décalage du pool d'entrées (0x%lx) dépasse la taille 0x%lx de l'unité 0x%lx dans debug_names\n"
-#: dwarf.c:9754
+#: dwarf.c:9775
#, c-format
msgid "Used %zu of %lu bucket.\n"
msgid_plural "Used %zu of %lu buckets.\n"
msgstr[0] "%zu sur %lu baquet utilisé.\n"
msgstr[1] "%zu sur %lu baquets utilisés.\n"
-#: dwarf.c:9781
+#: dwarf.c:9802
#, c-format
msgid "Out of %lu items there are %zu bucket clashes (longest of %zu entries).\n"
msgstr "Parmi %lu éléments, il y a %zu collisions de baquets (la plus longue de %zu entrées).\n"
-#: dwarf.c:9818
+#: dwarf.c:9839
#, c-format
msgid "Duplicate abbreviation tag %lu in unit 0x%lx in the debug_names\n"
msgstr "Étiquette d'abréviation %lu dupliquée dans l'unité 0x%lx dans debug_names\n"
-#: dwarf.c:9840 dwarf.c:10158
+#: dwarf.c:9861 dwarf.c:10179
#, c-format
msgid ""
"\n"
@@ -3885,105 +3887,105 @@ msgstr ""
"\n"
"Table des symboles :\n"
-#: dwarf.c:9892
+#: dwarf.c:9913
#, c-format
msgid "Undefined abbreviation tag %lu in unit 0x%lx in the debug_names\n"
msgstr "Étiquette d'abréviation %lu non définie dans l'unité 0x%lx dans debug_names\n"
-#: dwarf.c:9923
+#: dwarf.c:9944
#, c-format
msgid " <no entries>"
msgstr " <pas d'entrées>"
-#: dwarf.c:9955
+#: dwarf.c:9976
msgid "The debuglink filename is corrupt/missing\n"
msgstr "Le nom de fichier debuglink est corrompu/manquant\n"
-#: dwarf.c:9959
+#: dwarf.c:9980
#, c-format
msgid " Separate debug info file: %s\n"
msgstr " Fichier d'information de débogage séparé: %s\n"
-#: dwarf.c:9970
+#: dwarf.c:9991
msgid "CRC offset missing/truncated\n"
msgstr "Décalage CRC manquant/tronqué\n"
-#: dwarf.c:9976
+#: dwarf.c:9997
#, c-format
msgid " CRC value: %#x\n"
msgstr " valeur CRC: %#x\n"
-#: dwarf.c:9980
+#: dwarf.c:10001
#, c-format
msgid "There are %#lx extraneous bytes at the end of the section\n"
msgstr "Il y a %#lx octets supplémentaires inutilisés à la fin de la section\n"
-#: dwarf.c:9994
+#: dwarf.c:10015
#, c-format
msgid "Build-ID is too short (%#lx bytes)\n"
msgstr "Le ID de compilation est trop petit (%#lx octets)\n"
-#: dwarf.c:9998
+#: dwarf.c:10019
#, c-format
msgid " Build-ID (%#lx bytes):"
msgstr " ID de compilation (%#lx octets):"
-#: dwarf.c:10027
+#: dwarf.c:10048
#, c-format
msgid "Truncated header in the %s section.\n"
msgstr "En-tête tronqué dans la section %s.\n"
-#: dwarf.c:10038
+#: dwarf.c:10059
#, c-format
msgid "Unsupported version %lu.\n"
msgstr "Version %lu non supportée.\n"
-#: dwarf.c:10042
+#: dwarf.c:10063
msgid "The address table data in version 3 may be wrong.\n"
msgstr "Les données de la table d'adresses à la version 3 pourraient être mauvaises.\n"
-#: dwarf.c:10044
+#: dwarf.c:10065
msgid "Version 4 does not support case insensitive lookups.\n"
msgstr "Version 4 ne supporte pas les recherches insensibles à la casse.\n"
-#: dwarf.c:10046
+#: dwarf.c:10067
msgid "Version 5 does not include inlined functions.\n"
msgstr "Version 5 n'inclus pas les fonctions en ligne.\n"
-#: dwarf.c:10048
+#: dwarf.c:10069
msgid "Version 6 does not include symbol attributes.\n"
msgstr "Version 6 n'inclus pas les attributs de symboles.\n"
-#: dwarf.c:10066
+#: dwarf.c:10087
#, c-format
msgid "Corrupt header in the %s section.\n"
msgstr "En-tête corrompu dans la section %s.\n"
-#: dwarf.c:10073
+#: dwarf.c:10094
#, c-format
msgid "TU offset (%x) is less than CU offset (%x)\n"
msgstr "Le décalage TU (%x) est plus petit que le décalage CU (%x)\n"
-#: dwarf.c:10082
+#: dwarf.c:10103
#, c-format
msgid "Address table offset (%x) is less than TU offset (%x)\n"
msgstr "Le décalage de la table d'adresses (%x) est plus petit que le décalage TU (%x)\n"
-#: dwarf.c:10092
+#: dwarf.c:10113
#, c-format
msgid "Symbol table offset (%x) is less then Address table offset (%x)\n"
msgstr "Le décalage de la table des symboles (%x) est plus petit que le décalage de la table d'adresses (%x)\n"
-#: dwarf.c:10101
+#: dwarf.c:10122
#, c-format
msgid "Constant pool offset (%x) is less than symbol table offset (%x)\n"
msgstr "Le décalage du bassin de constantes (%x) est plus petit que le décalage de la table des symboles (%x)\n"
-#: dwarf.c:10116
+#: dwarf.c:10137
msgid "Address table extends beyond end of section.\n"
msgstr "La table des adresses s'étend au delà de la fin de la section.\n"
-#: dwarf.c:10120
+#: dwarf.c:10141
#, c-format
msgid ""
"\n"
@@ -3992,12 +3994,12 @@ msgstr ""
"\n"
"Table CU:\n"
-#: dwarf.c:10126
+#: dwarf.c:10147
#, c-format
msgid "[%3u] 0x%lx - 0x%lx\n"
msgstr "[%3u] 0x%lx - 0x%lx\n"
-#: dwarf.c:10131
+#: dwarf.c:10152
#, c-format
msgid ""
"\n"
@@ -4006,12 +4008,12 @@ msgstr ""
"\n"
"Table TU:\n"
-#: dwarf.c:10138
+#: dwarf.c:10159
#, c-format
msgid "[%3u] 0x%lx 0x%lx "
msgstr "[%3u] 0x%lx 0x%lx "
-#: dwarf.c:10145
+#: dwarf.c:10166
#, c-format
msgid ""
"\n"
@@ -4020,74 +4022,74 @@ msgstr ""
"\n"
"Table d'adresses :\n"
-#: dwarf.c:10155
+#: dwarf.c:10176
#, c-format
msgid "%lu\n"
msgstr "%lu\n"
-#: dwarf.c:10173
+#: dwarf.c:10194
#, c-format
msgid "[%3u] <corrupt offset: %x>"
msgstr "[%3u] <offset corrompu: %x>"
-#: dwarf.c:10174
+#: dwarf.c:10195
#, c-format
msgid "Corrupt name offset of 0x%x found for symbol table slot %d\n"
msgstr "Décalage de nom de 0x%x corrompu rencontré pour l'emplacement %d dans la table de symboles\n"
-#: dwarf.c:10185
+#: dwarf.c:10206
#, c-format
msgid "<invalid CU vector offset: %x>\n"
msgstr "<décalage de vecteur CU invalide: %x>\n"
-#: dwarf.c:10186
+#: dwarf.c:10207
#, c-format
msgid "Corrupt CU vector offset of 0x%x found for symbol table slot %d\n"
msgstr "Décalage de vecteur CU de 0x%x corrompu rencontré pour l'emplacement %d de la table de symboles\n"
-#: dwarf.c:10197
+#: dwarf.c:10218
#, c-format
msgid "Invalid number of CUs (0x%x) for symbol table slot %d\n"
msgstr "Nombre de CU (0x%x) invalide pour l'emplacement %d de la table de symboles\n"
-#: dwarf.c:10222
+#: dwarf.c:10243
msgid "static"
msgstr "static"
-#: dwarf.c:10222
+#: dwarf.c:10243
msgid "global"
msgstr "global"
-#: dwarf.c:10260 dwarf.c:10271
+#: dwarf.c:10281 dwarf.c:10292
msgid "Internal error: out of space in the shndx pool.\n"
msgstr "Erreur interne : à cours d'espace dans le pool shndx.\n"
-#: dwarf.c:10334
+#: dwarf.c:10355
#, c-format
msgid "Section %s is empty\n"
msgstr "La section %s est vide\n"
-#: dwarf.c:10340
+#: dwarf.c:10361
#, c-format
msgid "Section %s is too small to contain a CU/TU header\n"
msgstr "La section %s est trop petite pour contenir un en-tête CU/TU\n"
-#: dwarf.c:10359
+#: dwarf.c:10380
#, c-format
msgid " Version: %u\n"
msgstr " Version: %u\n"
-#: dwarf.c:10361
+#: dwarf.c:10382
#, c-format
msgid " Number of columns: %u\n"
msgstr " Nombre de colonnes: %u\n"
-#: dwarf.c:10362
+#: dwarf.c:10383
#, c-format
msgid " Number of used entries: %u\n"
msgstr " Nombre d'entrées utilisées: %u\n"
-#: dwarf.c:10363
+#: dwarf.c:10384
#, c-format
msgid ""
" Number of slots: %u\n"
@@ -4096,132 +4098,137 @@ msgstr ""
" Nombre d'emplacements: %u\n"
"\n"
-#: dwarf.c:10370
+#: dwarf.c:10391
#, c-format
msgid "Section %s is too small for %u slot\n"
msgid_plural "Section %s is too small for %u slots\n"
msgstr[0] "La section %s est trop petite pour %u emplacement\n"
msgstr[1] "La section %s est trop petite pour %u emplacements\n"
-#: dwarf.c:10394
+#: dwarf.c:10415
msgid "Section index pool located before start of section\n"
msgstr "Basin d'index de sections situé avant le début de la section\n"
-#: dwarf.c:10399
+#: dwarf.c:10420
#, c-format
msgid " [%3d] Signature: 0x%s Sections: "
msgstr " [%3d] Signature: 0x%s Sections: "
-#: dwarf.c:10405
+#: dwarf.c:10426
#, c-format
msgid "Section %s too small for shndx pool\n"
msgstr "La section %s est trop petite pour le pool shndx\n"
-#: dwarf.c:10451
+#: dwarf.c:10472
#, c-format
msgid "Section %s too small for offset and size tables\n"
msgstr "La section %s est trop petite pour les tables de décalages et de tailles\n"
-#: dwarf.c:10458
+#: dwarf.c:10479
#, c-format
msgid " Offset table\n"
msgstr " Table des décalages\n"
-#: dwarf.c:10460 dwarf.c:10548
+#: dwarf.c:10481 dwarf.c:10569
msgid "signature"
msgstr "signature"
-#: dwarf.c:10460 dwarf.c:10548
+#: dwarf.c:10481 dwarf.c:10569
msgid "dwo_id"
msgstr "dwo_id"
-#: dwarf.c:10499
+#: dwarf.c:10520
#, c-format
msgid "Row index (%u) is larger than number of used entries (%u)\n"
msgstr "L'index de ligne (%u) est plus grand que le nombre d'entrées utilisées (%u)\n"
-#: dwarf.c:10513 dwarf.c:10572
+#: dwarf.c:10534 dwarf.c:10593
#, c-format
msgid " [%3d] 0x%s"
msgstr " [%3d] 0x%s"
-#: dwarf.c:10528 dwarf.c:10586
+#: dwarf.c:10549 dwarf.c:10621
#, c-format
msgid "Overlarge Dwarf section index detected: %u\n"
msgstr "Index de section Dwarf démesuré détecté: %u\n"
-#: dwarf.c:10546
+#: dwarf.c:10567
#, c-format
msgid " Size table\n"
msgstr " Table des tailles\n"
-#: dwarf.c:10601
+#: dwarf.c:10607
+#, c-format
+msgid "Too many rows/columns in DWARF index section %s\n"
+msgstr "Trop de lignes/colonnes dans la section d'index DWARF %s\n"
+
+#: dwarf.c:10636
#, c-format
msgid " Unsupported version (%d)\n"
msgstr " Version non supportée (%d)\n"
-#: dwarf.c:10673
+#: dwarf.c:10708
#, c-format
msgid "Displaying the debug contents of section %s is not yet supported.\n"
msgstr "L'affichage du contenu de la section de débogage %s n'est pas encore supporté.\n"
-#: dwarf.c:10704
+#: dwarf.c:10739
#, c-format
msgid "Attempt to allocate an array with an excessive number of elements: 0x%lx\n"
msgstr "Tentative d'allouer un tableau avec un nombre excessif d'éléments: 0x%lx\n"
-#: dwarf.c:10722
+#: dwarf.c:10757
#, c-format
msgid "Attempt to re-allocate an array with an excessive number of elements: 0x%lx\n"
msgstr "Tentative de ré-allouer un tableau avec un nombre excessif d'éléments: 0x%lx\n"
-#: dwarf.c:10738
+#: dwarf.c:10773
#, c-format
msgid "Attempt to allocate a zero'ed array with an excessive number of elements: 0x%lx\n"
msgstr "Tentative d'allouer un tableau mis à zéro avec un nombre excessif d'éléments: 0x%lx\n"
-#: dwarf.c:10836
+#: dwarf.c:10871
#, c-format
msgid "Unable to reopen separate debug info file: %s\n"
msgstr "Incapable de réouvrir le fichier d'information de débogage séparé : %s\n"
-#: dwarf.c:10848
+#: dwarf.c:10883
#, c-format
msgid "Separate debug info file %s found, but CRC does not match - ignoring\n"
msgstr "Fichier d'information de débogage séparé %s trouvé mais la CRC ne correspond pas – ignoré\n"
-#: dwarf.c:11024
+#: dwarf.c:11062
#, c-format
msgid "Corrupt debuglink section: %s\n"
msgstr "Section debuglink corrompue: %s\n"
-#: dwarf.c:11062
+#: dwarf.c:11101
msgid "Out of memory"
msgstr "Mémoire épuisée"
#. Failed to find the file.
-#: dwarf.c:11136
+#: dwarf.c:11176
#, c-format
msgid "could not find separate debug file '%s'\n"
msgstr "ne peut trouver le fichier de débogage séparé « %s »\n"
-#: dwarf.c:11138 dwarf.c:11143 dwarf.c:11149 dwarf.c:11153 dwarf.c:11158
-#: dwarf.c:11161 dwarf.c:11164 dwarf.c:11167
+#: dwarf.c:11178 dwarf.c:11183 dwarf.c:11189 dwarf.c:11193 dwarf.c:11198
+#: dwarf.c:11201 dwarf.c:11204 dwarf.c:11207
#, c-format
msgid "tried: %s\n"
msgstr "essayé: %s\n"
-#: dwarf.c:11175
+#: dwarf.c:11215
#, c-format
msgid "tried: DEBUGINFOD_URLS=%s\n"
msgstr "essayé : DEBUGINFOD_URLS=%s\n"
-#: dwarf.c:11192
+#: dwarf.c:11243
#, c-format
msgid "failed to open separate debug file: %s\n"
msgstr "échec d'ouverture du fichier de débogage séparé : %s\n"
-#: dwarf.c:11201
+#: dwarf.c:11252
#, c-format
msgid ""
"\n"
@@ -4230,17 +4237,17 @@ msgstr ""
"\n"
"%s: Fichier d'information de débogage séparé trouvé : %s\n"
-#: dwarf.c:11224
+#: dwarf.c:11275
msgid "Out of memory allocating dwo filename\n"
msgstr "Mémoire épuisée par l'allocation du nom de fichier dwo\n"
-#: dwarf.c:11230
+#: dwarf.c:11281
#, c-format
msgid "Unable to load dwo file: %s\n"
msgstr "Incapable de charger le fichier dwo : %s\n"
#. FIXME: We should check the dwo_id.
-#: dwarf.c:11237
+#: dwarf.c:11288
#, c-format
msgid ""
"%s: Found separate debug object file: %s\n"
@@ -4249,28 +4256,44 @@ msgstr ""
"%s: Fichier objet de débogage séparé trouvé: %s\n"
"\n"
-#: dwarf.c:11256
+#: dwarf.c:11320
+msgid "Unable to load the .note.gnu.build-id section\n"
+msgstr "Incapable de charger la section .note.gnu.build-id\n"
+
+#: dwarf.c:11326
+msgid ".note.gnu.build-id section is corrupt/empty\n"
+msgstr "la section .note.gnu.build-id est corrompue/vide\n"
+
+#: dwarf.c:11347
+msgid ".note.gnu.build-id data size is too small\n"
+msgstr "la taille des données de .note.gnu.build-id est trop petite\n"
+
+#: dwarf.c:11353
+msgid ".note.gnu.build-id data size is too bug\n"
+msgstr "la taille des données de .note.gnu.build-id est trop grande\n"
+
+#: dwarf.c:11414
msgid ".debug_sup section is corrupt/empty\n"
msgstr "la section .debug_sup est corrompue/vide\n"
-#: dwarf.c:11266
+#: dwarf.c:11424
msgid "filename in .debug_sup section is corrupt\n"
msgstr "le nom de fichier dans la section .debug_sup est corrompu\n"
-#: dwarf.c:11281
+#: dwarf.c:11439
msgid "unable to construct path for supplementary debug file"
msgstr "incapable de construire le chemin pour le fichier de débogage supplémentaire"
-#: dwarf.c:11295
+#: dwarf.c:11453
msgid "out of memory constructing filename for .debug_sup link\n"
msgstr "mémoire épuisée en construisant le nom du fichier pour le lien de .debug_sup\n"
-#: dwarf.c:11303
+#: dwarf.c:11461
#, c-format
msgid "unable to open file '%s' referenced from .debug_sup section\n"
msgstr "impossible d'ouvrir le fichier « %s » référencé dans la section .debug_sup\n"
-#: dwarf.c:11308
+#: dwarf.c:11466
#, c-format
msgid ""
"%s: Found supplementary debug file: %s\n"
@@ -4279,19 +4302,19 @@ msgstr ""
"%s: Fichier de débogage supplémentaire trouvé: %s\n"
"\n"
-#: dwarf.c:11398
+#: dwarf.c:11558
msgid "Multiple DWO_NAMEs encountered for the same CU\n"
msgstr "Plusieurs DWO_NAME rencontrés pour le même CU\n"
-#: dwarf.c:11410
+#: dwarf.c:11570
msgid "multiple DWO_IDs encountered for the same CU\n"
msgstr "plusieurs DWO_ID rencontrés pour le même CU\n"
-#: dwarf.c:11415
+#: dwarf.c:11575
msgid "Unexpected DWO INFO type"
msgstr "Type DVO INFO inattendu"
-#: dwarf.c:11430
+#: dwarf.c:11590
#, c-format
msgid ""
"The %s section contains link(s) to dwo file(s):\n"
@@ -4300,44 +4323,42 @@ msgstr ""
"La section %s contient un ou des lien(s) vers un ou des fichier(s) dwo:\n"
"\n"
-#: dwarf.c:11435
+#: dwarf.c:11595
#, c-format
msgid " Name: %s\n"
msgstr " Nom: %s\n"
-#: dwarf.c:11436
+#: dwarf.c:11596
#, c-format
msgid " Directory: %s\n"
msgstr " Répertoire: %s\n"
-#: dwarf.c:11436
+#: dwarf.c:11596
msgid "<not-found>"
msgstr "<pas-trouvé>)"
-#: dwarf.c:11438
+#: dwarf.c:11598
#, c-format
msgid " ID: "
msgstr " ID: "
-#: dwarf.c:11440
+#: dwarf.c:11600
#, c-format
msgid " ID: <not specified>\n"
msgstr " ID: <non spécifié>\n"
-#: dwarf.c:11604 dwarf.c:11648
+#: dwarf.c:11764 dwarf.c:11808
#, c-format
msgid "Unrecognized debug option '%s'\n"
msgstr "Option de débogage non reconnue « %s »\n"
-#: dwarf.h:270
-#, c-format
-msgid "%s:%lu: end of data encountered whilst reading LEB\n"
-msgstr "%s:%lu: fin de données rencontrée en lisant LEB\n"
+#: dwarf.h:273
+msgid "end of data encountered whilst reading LEB\n"
+msgstr "fin de données rencontrée en lisant LEB\n"
-#: dwarf.h:272
-#, c-format
-msgid "%s:%lu: read LEB value is too large to store in destination variable\n"
-msgstr "%s:%lu: la valeur LEB lue est trop grande pour être stockée dans la variable de destination\n"
+#: dwarf.h:275
+msgid "read LEB value is too large to store in destination variable\n"
+msgstr "la valeur LEB lue est trop grande pour être stockée dans la variable de destination\n"
#: elfcomm.c:47
#, c-format
@@ -4422,7 +4443,7 @@ msgstr "%s: échec de repérage du premier en-tête d'archive\n"
#. PR 24049 - we cannot use filedata->file_name as this will
#. have already been freed.
-#: elfcomm.c:519 elfcomm.c:753 elfedit.c:595 readelf.c:21730
+#: elfcomm.c:519 elfcomm.c:753 elfedit.c:613 readelf.c:22187
#, c-format
msgid "%s: failed to read archive header\n"
msgstr "%s: échec de lecture de l'en-tête de l'archive\n"
@@ -4469,72 +4490,77 @@ msgstr "Nom de membre de l'archive Thin invalide\n"
msgid "%s: failed to seek to next file name\n"
msgstr "%s: échec de repérage du nom de fichier suivant\n"
-#: elfcomm.c:758 elfedit.c:602 readelf.c:21737
+#: elfcomm.c:758 elfedit.c:620 readelf.c:22194
#, c-format
msgid "%s: did not find a valid archive header\n"
msgstr "%s: pas d'en-tête d'archive valable\n"
-#: elfedit.c:91
+#: elfedit.c:93
#, c-format
msgid "%s: Not an i386 nor x86-64 ELF file\n"
msgstr "%s: Pas un fichier ELF i386 ou X86-64\n"
-#: elfedit.c:97
+#: elfedit.c:99
#, c-format
msgid "%s: stat () failed\n"
msgstr "%s: stat () en échec\n"
-#: elfedit.c:105
+#: elfedit.c:107
#, c-format
msgid "%s: mmap () failed\n"
msgstr "%s: mmap () en échec\n"
-#: elfedit.c:244
+#: elfedit.c:246
#, c-format
msgid "%s: Invalid PT_NOTE segment\n"
msgstr "%s: Segment PT_NOTE invalide\n"
-#: elfedit.c:269
+#: elfedit.c:271
#, c-format
msgid "Unknown x86 feature: %s\n"
msgstr "Fonctionnalité x86 inconnue : %s\n"
-#: elfedit.c:317
+#: elfedit.c:319
#, c-format
msgid "%s: Unsupported EI_VERSION: %d is not %d\n"
msgstr "%s: EI_VERSION non supportée : %d n'est pas %d\n"
-#: elfedit.c:338
+#: elfedit.c:340
#, c-format
msgid "%s: Unmatched input EI_CLASS: %d is not %d\n"
msgstr "%s: Entrée EI_CLASS sans correspondance : %d n'est pas %d\n"
-#: elfedit.c:347
+#: elfedit.c:349
#, c-format
msgid "%s: Unmatched output EI_CLASS: %d is not %d\n"
msgstr "%s: Sortie EI_CLASS sans correspondance : %d n'est pas %d\n"
-#: elfedit.c:356
+#: elfedit.c:358
#, c-format
msgid "%s: Unmatched e_machine: %d is not %d\n"
msgstr "%s: e_machine sans correspondance : %d n'est pas %d\n"
-#: elfedit.c:367
+#: elfedit.c:369
#, c-format
msgid "%s: Unmatched e_type: %d is not %d\n"
msgstr "%s: e_type sans correspondance : %d n'est pas %d\n"
-#: elfedit.c:378
+#: elfedit.c:380
#, c-format
msgid "%s: Unmatched EI_OSABI: %d is not %d\n"
msgstr "%s: EI_OSABI sans correspondance : %d n'est pas %d\n"
-#: elfedit.c:411
+#: elfedit.c:392
+#, c-format
+msgid "%s: Unmatched EI_ABIVERSION: %d is not %d\n"
+msgstr "%s: EI_ABIVERSION sans correspondance : %d n'est pas %d\n"
+
+#: elfedit.c:429
#, c-format
msgid "%s: Failed to update ELF header: %s\n"
msgstr "%s: Échec à la mise à jour de l'en-tête ELF : %s\n"
-#: elfedit.c:481
+#: elfedit.c:499
msgid ""
"This executable has been built without support for a\n"
"64 bit data type and so it cannot process 64 bit ELF files.\n"
@@ -4542,87 +4568,87 @@ msgstr ""
"Cet exécutable a été construit sans support pour des\n"
"types de données 64 bits et ne peut donc traiter des fichiers ELF 64 bits.\n"
-#: elfedit.c:522
+#: elfedit.c:540
#, c-format
msgid "%s: Failed to read ELF header\n"
msgstr "%s: Échec de lecture de l'en-tête ELF\n"
-#: elfedit.c:529
+#: elfedit.c:547
#, c-format
msgid "%s: Failed to seek to ELF header\n"
msgstr "%s: Erreur lors de la recherche de l'en-tête ELF\n"
-#: elfedit.c:586 readelf.c:21718
+#: elfedit.c:604 readelf.c:22175
#, c-format
msgid "%s: failed to seek to next archive header\n"
msgstr "%s: échec de repérage de la prochaine en-tête d'archive\n"
-#: elfedit.c:617 elfedit.c:626 readelf.c:21752 readelf.c:21761
+#: elfedit.c:635 elfedit.c:644 readelf.c:22207 readelf.c:22216
#, c-format
msgid "%s: bad archive file name\n"
msgstr "%s: nom erroné du fichier d'archive\n"
-#: elfedit.c:649 elfedit.c:760
+#: elfedit.c:667 elfedit.c:778
#, c-format
msgid "Input file '%s' is not readable\n"
msgstr "Fichier d'entrée « %s » illisible.\n"
-#: elfedit.c:676
+#: elfedit.c:694
#, c-format
msgid "%s: failed to seek to archive member\n"
msgstr "%s: erreur lors de la recherche du membre de l'archive.\n"
-#: elfedit.c:717 readelf.c:21880
+#: elfedit.c:735 readelf.c:22335
#, c-format
msgid "'%s': No such file\n"
msgstr "« %s »: pas de tel fichier\n"
-#: elfedit.c:719 readelf.c:21882
+#: elfedit.c:737 readelf.c:22337
#, c-format
msgid "Could not locate '%s'. System error message: %s\n"
msgstr "Ne peut retrouver « %s ». Message d'erreur système : %s\n"
-#: elfedit.c:740 readelf.c:21889
+#: elfedit.c:758 readelf.c:22344
#, c-format
msgid "'%s' is not an ordinary file\n"
msgstr "« %s » n'est pas un fichier ordinaire\n"
-#: elfedit.c:766 readelf.c:21911
+#: elfedit.c:784 readelf.c:22366
#, c-format
msgid "%s: Failed to read file's magic number\n"
msgstr "%s: Échec de lecture du numéro magique du fichier\n"
-#: elfedit.c:830
+#: elfedit.c:848
#, c-format
msgid "Unknown OSABI: %s\n"
msgstr "OSABI inconnu : %s\n"
-#: elfedit.c:855
+#: elfedit.c:873
#, c-format
msgid "Unknown machine type: %s\n"
msgstr "Type de machine inconnu : %s\n"
-#: elfedit.c:874
+#: elfedit.c:892
#, c-format
msgid "Unknown type: %s\n"
msgstr "Type inconnu : %s\n"
-#: elfedit.c:921
+#: elfedit.c:943
#, c-format
msgid "Usage: %s <option(s)> elffile(s)\n"
msgstr "Usage: %s <option(s)> fichier(s)elf\n"
-#: elfedit.c:923
+#: elfedit.c:945
#, c-format
msgid " Update the ELF header of ELF files\n"
msgstr " Mise à jour de l'en-tête ELF des fichiers ELF\n"
-#: elfedit.c:924 objcopy.c:565 objcopy.c:706 strings.c:679
+#: elfedit.c:946 nm.c:295 objcopy.c:565 objcopy.c:706 strings.c:1314
#, c-format
msgid " The options are:\n"
msgstr " Les options sont :\n"
-#: elfedit.c:925
+#: elfedit.c:947
#, c-format
msgid ""
" --input-mach [none|i386|iamcu|l1om|k1om|x86_64]\n"
@@ -4637,6 +4663,8 @@ msgid ""
" Set input OSABI\n"
" --output-osabi [%s]\n"
" Set output OSABI\n"
+" --input-abiversion [0-255] Set input ABIVERSION\n"
+" --output-abiversion [0-255] Set output ABIVERSION\n"
msgstr ""
" --input-mach [none|i386|iamcu|l1om|k1om|x86_64]\n"
" Définir le type machine en entrée\n"
@@ -4650,8 +4678,10 @@ msgstr ""
" Définir OSABI en entrée\n"
" --output-osabi [%s]\n"
" Définir OSABI en sortie\n"
+" --input-abiversion [0-255] Définir ABIVERSION en entrée\n"
+" --output-abiversion [0-255] Définir ABIVERSION en sortie\n"
-#: elfedit.c:940
+#: elfedit.c:964
#, c-format
msgid ""
" --enable-x86-feature [ibt|shstk|lam_u48|lam_u57]\n"
@@ -4664,7 +4694,7 @@ msgstr ""
" --disable-x86-feature [ibt|shstk|lam_u48|lam_u57]\n"
" Désactiver la fonctionnalité x86\n"
-#: elfedit.c:946
+#: elfedit.c:970
#, c-format
msgid ""
" -h --help Display this information\n"
@@ -4673,6 +4703,11 @@ msgstr ""
" -h --help Afficher ces informations\n"
" -v --version Afficher la version de %s\n"
+#: elfedit.c:1049 elfedit.c:1060
+#, c-format
+msgid "Invalid ABIVERSION: %s\n"
+msgstr "ABIVERSION invalide : %s\n"
+
#: emul_aix.c:44
#, c-format
msgid " [-g] - 32 bit small archive\n"
@@ -4693,148 +4728,249 @@ msgstr " [-X64] - ignore les objets de 32 bits\n"
msgid " [-X32_64] - accepts 32 and 64 bit objects\n"
msgstr " [-X32_64] - accepter les objets de 32 et 64 bits\n"
-#: mclex.c:240
+#: mclex.c:245
msgid "Duplicate symbol entered into keyword list."
msgstr "Symbole dupliqué dans le liste des mots clés."
-#: nm.c:274 size.c:88 strings.c:677
+#: nm.c:293 size.c:88 strings.c:1312
#, c-format
msgid "Usage: %s [option(s)] [file(s)]\n"
msgstr "Usage: %s [option(s)] [fichier(s)]\n"
-#: nm.c:275
+#: nm.c:294
#, c-format
msgid " List symbols in [file(s)] (a.out by default).\n"
msgstr "Afficher les symboles des [fichier(s)] (a.out par défaut).\n"
-#: nm.c:276
+#: nm.c:296
+#, c-format
+msgid " -a, --debug-syms Display debugger-only symbols\n"
+msgstr " -a, --debug-syms Afficher les symboles destinés au débogueur\n"
+
+#: nm.c:298
+#, c-format
+msgid " -A, --print-file-name Print name of the input file before every symbol\n"
+msgstr " -A, --print-file-name Afficher le nom du fichier d'entrée avant chaque symbole\n"
+
+#: nm.c:300
+#, c-format
+msgid " -B Same as --format=bsd\n"
+msgstr " -B Identique à --format=bsd\n"
+
+#: nm.c:302
+#, c-format
+msgid " -C, --demangle[=STYLE] Decode mangled/processed symbol names\n"
+msgstr " -C, --demangle[=STYLE] Décoder les noms des symboles décorés/traités\n"
+
+#: nm.c:304 readelf.c:5056
+msgid " STYLE can be "
+msgstr " STYLE peut être "
+
+#: nm.c:306
+#, c-format
+msgid " --no-demangle Do not demangle low-level symbol names\n"
+msgstr " --no-demangle Ne pas retirer les décorations des noms des symboles bas niveau\n"
+
+#: nm.c:308
+#, c-format
+msgid " --recurse-limit Enable a demangling recursion limit. (default)\n"
+msgstr " --recurse-limit Activer une limite sur la récursivité de la suppression des décorations. (par défaut)\n"
+
+#: nm.c:310
+#, c-format
+msgid " --no-recurse-limit Disable a demangling recursion limit.\n"
+msgstr " --no-recurse-limit Désactiver la limite sur la récursivité de la suppression des décorations.\n"
+
+#: nm.c:312
+#, c-format
+msgid " -D, --dynamic Display dynamic symbols instead of normal symbols\n"
+msgstr " -D, --dynamic Afficher les symboles dynamiques au lieu des symboles normaux\n"
+
+#: nm.c:314
+#, c-format
+msgid " --defined-only Display only defined symbols\n"
+msgstr " --defined-only Afficher uniquement les symboles définis\n"
+
+#: nm.c:316
+#, c-format
+msgid " -e (ignored)\n"
+msgstr " -e (ignoré)\n"
+
+#: nm.c:318
#, c-format
msgid ""
-" The options are:\n"
-" -a, --debug-syms Display debugger-only symbols\n"
-" -A, --print-file-name Print name of the input file before every symbol\n"
-" -B Same as --format=bsd\n"
-" -C, --demangle[=STYLE] Decode low-level symbol names into user-level names\n"
-" The STYLE, if specified, can be `auto' (the default),\n"
-" `gnu', `lucid', `arm', `hp', `edg', `gnu-v3', `java'\n"
-" or `gnat'\n"
-" --no-demangle Do not demangle low-level symbol names\n"
-" --recurse-limit Enable a demangling recursion limit. This is the default.\n"
-" --no-recurse-limit Disable a demangling recursion limit.\n"
-" -D, --dynamic Display dynamic symbols instead of normal symbols\n"
-" --defined-only Display only defined symbols\n"
-" -e (ignored)\n"
" -f, --format=FORMAT Use the output format FORMAT. FORMAT can be `bsd',\n"
-" `sysv', `posix' or 'just-symbols'. The default is `bsd'\n"
-" -g, --extern-only Display only external symbols\n"
-" --ifunc-chars=CHARS Characters to use when displaying ifunc symbols\n"
-" -j, --just-symbols Same as --format=just-symbols\n"
+" `sysv', `posix' or 'just-symbols'.\n"
+" The default is `bsd'\n"
+msgstr ""
+" -f, --format=FORMAT Utiliser le format de sortie FORMAT. FORMAT peut être « bsd »,\n"
+" « sysv », « posix » ou « just-symbols ».\n"
+" Utilise « bsd » par défaut\n"
+
+#: nm.c:322
+#, c-format
+msgid " -g, --extern-only Display only external symbols\n"
+msgstr " -g, --extern-only Afficher uniquement les symboles externes\n"
+
+#: nm.c:324
+#, c-format
+msgid " --ifunc-chars=CHARS Characters to use when displaying ifunc symbols\n"
+msgstr " --ifunc-chars=CAR Caractères à utiliser pour afficher les symboles ifunc\n"
+
+#: nm.c:326
+#, c-format
+msgid " -j, --just-symbols Same as --format=just-symbols\n"
+msgstr " -j, --just-symbols Un synonyme pour --format=just-symbols\n"
+
+#: nm.c:328
+#, c-format
+msgid ""
" -l, --line-numbers Use debugging information to find a filename and\n"
" line number for each symbol\n"
-" -n, --numeric-sort Sort symbols numerically by address\n"
-" -o Same as -A\n"
-" -p, --no-sort Do not sort the symbols\n"
-" -P, --portability Same as --format=posix\n"
-" -r, --reverse-sort Reverse the sense of the sort\n"
msgstr ""
-"Les options sont :\n"
-" -a, --debug-syms Afficher seulement les symboles de débug\n"
-" -A, --print-file-name Afficher le nom du fichier d'entrée avant chaque symbole\n"
-" -B Identique à --format=bsd\n"
-" -C, --demangle[=STYLE] Décoder les noms des symboles de bas niveau en noms de ceux\n"
-" du niveau usager. Le STYLE, si spécifié, peut être « auto »\n"
-" (par défaut), « gnu », « lucid », « arm », « hp », « edg » « gnu-v1 »,\n"
-" «java» ou «gnat»\n"
-" --no-demangle Ne pas encoder par mutilation les noms des symboles de bas niveau\n"
-" --recurse-limit Activer une limite sur la récursion. Par défaut.\n"
-" --no-recurse-limit Désactiver la limite sur la récursion.\n"
-" -D, --dynamic Afficher les symboles dynamiques au lieu des symboles normaux\n"
-" --defined-only Afficher seulement les symboles définis\n"
-" -e (ignoré)\n"
-" -f, --format=FORMAT Utiliser le FORMAT de sortie qui peut être « bsd » (par défaut),\n"
-" « sysv » ou « posix ».\n"
-" -g, --extern-only Afficher seulement les symboles externes\n"
-" --ifunc-chars=CARS Caractères à utiliser lors de l'affichage de symboles ifunc\n"
-" -j, --just-symbols Identique à ---format=just-symbols\n"
-" -l, --line-numbers Utiliser les informations de débug pour repérer le nom de fichier\n"
-" et un numéro de ligne pour chaque symbole\n"
-" -n, --numeric-sort Trier les symboles numériquement par adresse\n"
-" -o Identique à -A\n"
-" -p, --no-sort Ne pas trier les symboles\n"
-" -P, --portability Identique à --format=posix\n"
-" -r, --reverse-sort Trier en ordre inverse\n"
-
-#: nm.c:303
+" -l, --line-numbers Utiliser les informations de débogage pour trouver un nom\n"
+" de fichier et un numéro de ligne pour chaque symboles\n"
+
+#: nm.c:331
+#, c-format
+msgid " -n, --numeric-sort Sort symbols numerically by address\n"
+msgstr " -n, --numeric-sort Trier les symboles numériquement par adresse\n"
+
+#: nm.c:333
+#, c-format
+msgid " -o Same as -A\n"
+msgstr " -o Identique à -A\n"
+
+#: nm.c:335
+#, c-format
+msgid " -p, --no-sort Do not sort the symbols\n"
+msgstr " -p, --no-sort Ne pas trier les symboles\n"
+
+#: nm.c:337
+#, c-format
+msgid " -P, --portability Same as --format=posix\n"
+msgstr " -P, --portability Un synonyme pour --format=posix\n"
+
+#: nm.c:339
+#, c-format
+msgid " -r, --reverse-sort Reverse the sense of the sort\n"
+msgstr " -r, --reverse-sort Inverser l'ordre de tri\n"
+
+#: nm.c:342
#, c-format
msgid " --plugin NAME Load the specified plugin\n"
msgstr " --plugin NOM Charge le greffon spécifié\n"
-#: nm.c:306
+#: nm.c:345
+#, c-format
+msgid " -S, --print-size Print size of defined symbols\n"
+msgstr " -S, --print-size Afficher la taille des symboles définis\n"
+
+#: nm.c:347
+#, c-format
+msgid " -s, --print-armap Include index for symbols from archive members\n"
+msgstr " -s, --print-armap Inclure l'index des symboles des membres de l'archive\n"
+
+#: nm.c:349
+#, c-format
+msgid " --quiet Suppress \"no symbols\" diagnostic\n"
+msgstr " --quiet Supprimer le diagnostique « pas de symboles n\n"
+
+#: nm.c:351
+#, c-format
+msgid " --size-sort Sort symbols by size\n"
+msgstr " --size-sort Trier les symboles par taille\n"
+
+#: nm.c:353
+#, c-format
+msgid " --special-syms Include special symbols in the output\n"
+msgstr " --special-syms Inclure les symboles spéciaux dans la sortie\n"
+
+#: nm.c:355
+#, c-format
+msgid " --synthetic Display synthetic symbols as well\n"
+msgstr " --synthetic Afficher également les symboles synthétiques\n"
+
+#: nm.c:357
+#, c-format
+msgid " -t, --radix=RADIX Use RADIX for printing symbol values\n"
+msgstr " -t, --radix=RADICAL Utiliser le RADICAL pour afficher les valeurs des symboles\n"
+
+#: nm.c:359
+#, c-format
+msgid " --target=BFDNAME Specify the target object format as BFDNAME\n"
+msgstr " --target=NOMBFD Spécifie le format de l'objet cible comme étant NOMBFD\n"
+
+#: nm.c:361
+#, c-format
+msgid " -u, --undefined-only Display only undefined symbols\n"
+msgstr " -u, --undefined-only Afficher uniquement les symboles indéfinis\n"
+
+#: nm.c:363
#, c-format
msgid ""
-" -S, --print-size Print size of defined symbols\n"
-" -s, --print-armap Include index for symbols from archive members\n"
-" --quiet Suppress \"no symbols\" diagnostic\n"
-" --size-sort Sort symbols by size\n"
-" --special-syms Include special symbols in the output\n"
-" --synthetic Display synthetic symbols as well\n"
-" -t, --radix=RADIX Use RADIX for printing symbol values\n"
-" --target=BFDNAME Specify the target object format as BFDNAME\n"
-" -u, --undefined-only Display only undefined symbols\n"
-" --with-symbol-versions Display version strings after symbol names\n"
-" -X 32_64 (ignored)\n"
-" @FILE Read options from FILE\n"
-" -h, --help Display this information\n"
-" -V, --version Display this program's version number\n"
-"\n"
-msgstr ""
-" -S, --print-size Afficher la taille des symboles définis\n"
-" -s, --print-armap Inclure un index pour les symboles à partir des membres de l'archive\n"
-" --quiet Supprimer le diagnostique « no symbols »\n"
-" --size-sort Trier les symboles par leur taille\n"
-" --special-syms Inclure les symboles spéciaux sur la sortie\n"
-" --synthetic Afficher aussi les symboles synthétiques\n"
-" -t, --radix=BASE Utiliser la BASE numérique pour afficher la valeur des symboles\n"
-" --target=NOM_BFD Spécifier la cible du format de l'objet par le NOM_BFD\n"
-" -u, --undefined-only Afficher seulement les symboles indéfinis\n"
-" --with-symbol-versions Afficher les chaînes de version après les noms de symboles\n"
-" -X 32_64 (ignoré)\n"
-" @FICHIER Lire les options à partir du FICHIER\n"
-" -h, --help Afficher l'aide-mémoire\n"
-" -V, --version Afficher le nom et la version du logiciel\n"
-"\n"
-
-#: nm.c:340
+" -U {d|s|i|x|e|h} Specify how to treat UTF-8 encoded unicode characters\n"
+" --unicode={default|show|invalid|hex|escape|highlight}\n"
+msgstr ""
+" -U {d|s|i|x|e|h} Spécifier comment traiter les caractères unicode encodés en UTF-8\n"
+" --unicode={default|show|invalid|hex|escape|highlight}\n"
+
+#: nm.c:366
+#, c-format
+msgid " --with-symbol-versions Display version strings after symbol names\n"
+msgstr " --with-symbol-versions Afficher la chaîne de caractères de la version après les noms des symboles\n"
+
+#: nm.c:368
+#, c-format
+msgid " -X 32_64 (ignored)\n"
+msgstr " -X 32_64 (ignoré)\n"
+
+#: nm.c:370
+#, c-format
+msgid " @FILE Read options from FILE\n"
+msgstr " @FICHIER Lire les options à partir du FICHIER\n"
+
+#: nm.c:372
+#, c-format
+msgid " -h, --help Display this information\n"
+msgstr " -h, --help Afficher cet aide-mémoire\n"
+
+#: nm.c:374
+#, c-format
+msgid " -V, --version Display this program's version number\n"
+msgstr " -V, --version Afficher la version de ce logiciel\n"
+
+#: nm.c:395
#, c-format
msgid "%s: invalid radix"
msgstr "%s: base numérique invalide"
-#: nm.c:370
+#: nm.c:425
#, c-format
msgid "%s: invalid output format"
msgstr "%s: format de sortie invalide"
-#: nm.c:395 readelf.c:12090 readelf.c:12133
+#: nm.c:450 readelf.c:12440 readelf.c:12483
#, c-format
msgid "<processor specific>: %d"
msgstr "<spécificités du processor>: %d"
-#: nm.c:397 readelf.c:12097 readelf.c:12150
+#: nm.c:452 readelf.c:12447 readelf.c:12500
#, c-format
msgid "<OS specific>: %d"
msgstr "<spécificités du système d'exploitation>: %d"
-#: nm.c:399 readelf.c:12100 readelf.c:12153
+#: nm.c:454 readelf.c:12450 readelf.c:12503
#, c-format
msgid "<unknown>: %d"
msgstr "<inconnu>: %d"
-#: nm.c:429
+#: nm.c:484
#, c-format
msgid "<unknown>: %d/%d"
msgstr "<inconnu>: %d/%d"
-#: nm.c:499
+#: nm.c:742
#, c-format
msgid ""
"\n"
@@ -4843,12 +4979,12 @@ msgstr ""
"\n"
"Indexe de l'archive :\n"
-#: nm.c:553 nm.c:1250
+#: nm.c:797 nm.c:1494
#, c-format
msgid "%s: plugin needed to handle lto object"
msgstr "%s: greffon nécessaire pour gérer un objet lto"
-#: nm.c:1487
+#: nm.c:1731
#, c-format
msgid ""
"\n"
@@ -4861,7 +4997,7 @@ msgstr ""
"Symboles indéfinis dans %s :\n"
"\n"
-#: nm.c:1489
+#: nm.c:1733
#, c-format
msgid ""
"\n"
@@ -4874,7 +5010,7 @@ msgstr ""
"Symboles de %s :\n"
"\n"
-#: nm.c:1491 nm.c:1552
+#: nm.c:1735 nm.c:1796
#, c-format
msgid ""
"Name Value Class Type Size Line Section\n"
@@ -4883,7 +5019,7 @@ msgstr ""
"Nom Valeur Classe Type Taille Ligne Section\n"
"\n"
-#: nm.c:1494 nm.c:1555
+#: nm.c:1738 nm.c:1799
#, c-format
msgid ""
"Name Value Class Type Size Line Section\n"
@@ -4892,7 +5028,7 @@ msgstr ""
"Nom Valeur Classe Type Taille Ligne Section\n"
"\n"
-#: nm.c:1548
+#: nm.c:1792
#, c-format
msgid ""
"\n"
@@ -4905,7 +5041,7 @@ msgstr ""
"Symboles indéfinis dans %s[%s]:\n"
"\n"
-#: nm.c:1550
+#: nm.c:1794
#, c-format
msgid ""
"\n"
@@ -4918,20 +5054,25 @@ msgstr ""
"Symboles de %s[%s]:\n"
"\n"
-#: nm.c:1656
+#: nm.c:1900
#, c-format
msgid "Print width has not been initialized (%d)"
msgstr "La largeur d'impression n'a pas été initialisée (%d)"
-#: nm.c:1915
+#: nm.c:2162 objdump.c:5674 readelf.c:5472 strings.c:292
+#, c-format
+msgid "invalid argument to -U/--unicode: %s"
+msgstr "argument invalide pour -U/--unicode : %s"
+
+#: nm.c:2177
msgid "Only -X 32_64 is supported"
msgstr "Seul -X 32_64 est supporté"
-#: nm.c:1947
+#: nm.c:2209
msgid "Using the --size-sort and --undefined-only options together"
msgstr "Utiliser ensemble les options --size-sort et --undefined-only"
-#: nm.c:1948
+#: nm.c:2210
msgid "will produce no output, since undefined symbols have no size."
msgstr "ne produira aucune sortie étant donnée que les symboles n'ont aucune taille."
@@ -5316,7 +5457,7 @@ msgstr "erreur: %s les deux fixent et altèrent LMA"
msgid "cannot open '%s': %s"
msgstr "ne peut ouvrir « %s » : %s"
-#: objcopy.c:1094 objcopy.c:5055
+#: objcopy.c:1094 objcopy.c:5091
#, c-format
msgid "%s: fread failed"
msgstr "%s: fread en échec"
@@ -5341,589 +5482,593 @@ msgstr "erreur: la section %s correspond aux deux options « mettre à jour »
msgid "Section %s not found"
msgstr "Section %s pas trouvée"
-#: objcopy.c:1654
+#: objcopy.c:1550
+msgid "redefining symbols does not work on LTO-compiled object files"
+msgstr "la redéfinition de symboles ne fonctionne pas sur les fichiers objets compilés pour LTO"
+
+#: objcopy.c:1662
#, c-format
msgid "not stripping symbol `%s' because it is named in a relocation"
msgstr "le symbole « %s » n'est pas élagué car il est mentionné dans un réadressage"
-#: objcopy.c:1715
+#: objcopy.c:1723
#, c-format
msgid "'before=%s' not found"
msgstr "« before=%s » pas trouvé"
-#: objcopy.c:1754
+#: objcopy.c:1762
#, c-format
msgid "%s: Multiple redefinition of symbol \"%s\""
msgstr "%s: re-définition multiples du symbole « %s »"
-#: objcopy.c:1758
+#: objcopy.c:1766
#, c-format
msgid "%s: Symbol \"%s\" is target of more than one redefinition"
msgstr "%s: symbole « %s » cible plus d'une re-définition"
-#: objcopy.c:1785
+#: objcopy.c:1793
#, c-format
msgid "couldn't open symbol redefinition file %s (error: %s)"
msgstr "ne peut ouvrir le fichier de redéfinition de symboles %s (erreur: %s)"
-#: objcopy.c:1863
+#: objcopy.c:1871
#, c-format
msgid "%s:%d: garbage found at end of line"
msgstr "%s:%d: rebut à la fin de la ligne"
-#: objcopy.c:1866
+#: objcopy.c:1874
#, c-format
msgid "%s:%d: missing new symbol name"
msgstr "%s:%d: nom du nouveau symbole manquant"
-#: objcopy.c:1876
+#: objcopy.c:1884
#, c-format
msgid "%s:%d: premature end of file"
msgstr "%s:%d: fin de fichier prématuré"
-#: objcopy.c:1903
+#: objcopy.c:1910
#, c-format
msgid "stat returns negative size for `%s'"
msgstr "stat() a retourné une taille négative pour « %s »"
-#: objcopy.c:1915
+#: objcopy.c:1922
#, c-format
msgid "copy from `%s' [unknown] to `%s' [unknown]\n"
msgstr "copier à partir de « %s » [inconnu] vers « %s » [inconnu]\n"
-#: objcopy.c:2162
+#: objcopy.c:2167
#, c-format
msgid "%s[%s]: Cannot merge - there are relocations against this section"
msgstr "%s[%s]: Impossible de fusionner - il y a des réadressages envers cette section"
-#: objcopy.c:2184
+#: objcopy.c:2189
msgid "corrupt GNU build attribute note: description size not a factor of 4"
msgstr "note d'attribut de compilation GNU corrompu: la taille de la description n'est pas un multiple de 4"
-#: objcopy.c:2191
+#: objcopy.c:2196
msgid "corrupt GNU build attribute note: wrong note type"
msgstr "note d'attribut de compilation GNU corrompue: mauvais type de note"
-#: objcopy.c:2197
+#: objcopy.c:2202
msgid "corrupt GNU build attribute note: note too big"
msgstr "note d'attribut de compilation GNU corrompue: note trop grande"
-#: objcopy.c:2203
+#: objcopy.c:2208
msgid "corrupt GNU build attribute note: name too small"
msgstr "note d'attribut de compilation GNU corrompue: nom trop petit"
-#: objcopy.c:2226
+#: objcopy.c:2231
msgid "corrupt GNU build attribute note: unsupported version"
msgstr "note d'attribut de compilation GNU corrompue: version non supportée"
-#: objcopy.c:2260
+#: objcopy.c:2265
msgid "corrupt GNU build attribute note: bad description size"
msgstr "note d'attribut de compilation GNU corrompu: mauvaise taille de description"
-#: objcopy.c:2296
+#: objcopy.c:2301
msgid "corrupt GNU build attribute note: name not NUL terminated"
msgstr "note d'attribut de compilation GNU corrompu: nom pas terminé par NUL"
-#: objcopy.c:2308
+#: objcopy.c:2313
msgid "corrupt GNU build attribute notes: excess data at end"
msgstr "note d'attribut de compilation GNU corrompu: données excédentaires à la fin"
-#: objcopy.c:2315
+#: objcopy.c:2320
msgid "bad GNU build attribute notes: no known versions detected"
msgstr "mauvaises notes d'attribut de compilation GNU: aucune version connue détectée"
#. This happens with glibc. No idea why.
-#: objcopy.c:2319
+#: objcopy.c:2324
#, c-format
msgid "%s[%s]: Warning: version note missing - assuming version 3"
msgstr "%s[%s]: Avertissement : note de version manquante – version 3 supposée"
-#: objcopy.c:2329
+#: objcopy.c:2334
msgid "bad GNU build attribute notes: multiple different versions"
msgstr "mauvaises notes d'attribut de compilation GNU: plusieurs versions différentes"
-#: objcopy.c:2569
+#: objcopy.c:2574
#, c-format
msgid "%s[%s]: Note - dropping 'share' flag as output format is not COFF"
msgstr "%s[%s]: Note – abandon du fanion « share » car le format de sortie n'est pas COFF"
#. PR 17636: Call non-fatal so that we return to our parent who
#. may need to tidy temporary files.
-#: objcopy.c:2601
+#: objcopy.c:2606
#, c-format
msgid "unable to change endianness of '%s'"
msgstr "Incapable de changer de systèmes d'encodage (poids fort/faible) de « %s »"
-#: objcopy.c:2608
+#: objcopy.c:2613
#, c-format
msgid "unable to modify '%s' due to errors"
msgstr "incapable de modifier « %s » à cause d'erreurs"
-#: objcopy.c:2621
+#: objcopy.c:2626
#, c-format
msgid "error: the input file '%s' has no sections"
msgstr "erreur: le fichier d'entrée « %s » n'a pas de section"
-#: objcopy.c:2631
+#: objcopy.c:2636
#, c-format
msgid "--compress-debug-sections=[zlib|zlib-gnu|zlib-gabi] is unsupported on `%s'"
msgstr "--compress-debug-sections=[zlib|zlib-gnu|zlib-gabi] n'est pas supporté sur « %s »"
-#: objcopy.c:2638
+#: objcopy.c:2643
#, c-format
msgid "--elf-stt-common=[yes|no] is unsupported on `%s'"
msgstr "--elf-stt-common=[yes|no] n'est pas supporté sur « %s »"
-#: objcopy.c:2645
+#: objcopy.c:2650
#, c-format
msgid "copy from `%s' [%s] to `%s' [%s]\n"
msgstr "copier de « %s » [%s] vers « %s » [%s]\n"
-#: objcopy.c:2693
+#: objcopy.c:2698
#, c-format
msgid "Input file `%s' ignores binary architecture parameter."
msgstr "Le fichier d'entrée « %s » ignore les paramètres de l'architecture binaire."
-#: objcopy.c:2709
+#: objcopy.c:2714
#, c-format
msgid "Unable to recognise the format of the input file `%s'"
msgstr "Incapable de reconnaître le format du fichier d'entrée « %s »"
-#: objcopy.c:2712
+#: objcopy.c:2717
#, c-format
msgid "Output file cannot represent architecture `%s'"
msgstr "Fichier de sortie ne peut représenter l'architecture « %s »"
-#: objcopy.c:2775
+#: objcopy.c:2780
#, c-format
msgid "warning: file alignment (0x%s) > section alignment (0x%s)"
msgstr "attention: alignement du fichier (0x%s) > alignement de la section (0x%s)"
-#: objcopy.c:2848
+#: objcopy.c:2853
#, c-format
msgid "can't add section '%s'"
msgstr "ne peut créer la section « %s »"
-#: objcopy.c:2862
+#: objcopy.c:2867
#, c-format
msgid "can't create section `%s'"
msgstr "ne peut créer la section « %s »"
-#: objcopy.c:2910
+#: objcopy.c:2915
#, c-format
msgid "error: %s not found, can't be updated"
msgstr "erreur: %s pas trouvé, il ne peut pas être mis à jour"
-#: objcopy.c:2943
+#: objcopy.c:2948
msgid "warning: note section is empty"
msgstr "attention: la section de note est vide"
-#: objcopy.c:2952
+#: objcopy.c:2957
msgid "warning: could not load note section"
msgstr "attention: n'a pu charger la section de notes"
-#: objcopy.c:2968
+#: objcopy.c:2973
msgid "warning: failed to set merged notes size"
msgstr "attention: échec de la définition de la taille des notes fusionnées"
-#: objcopy.c:2994
+#: objcopy.c:2999
#, c-format
msgid "can't dump section '%s' - it does not exist"
msgstr "La section « %s » n'a pas été vidangée – elle n'existe pas"
-#: objcopy.c:3002
+#: objcopy.c:3007
msgid "can't dump section - it has no contents"
msgstr "ne peut vidanger la section – elle n'a pas de contenu"
-#: objcopy.c:3014
+#: objcopy.c:3019
msgid "could not open section dump file"
msgstr "ne peut ouvrir le fichier de vidange de section"
-#: objcopy.c:3022
+#: objcopy.c:3027
#, c-format
msgid "error writing section contents to %s (error: %s)"
msgstr "erreur lors de l'écriture des contenus des sections dans %s (erreur: %s)"
-#: objcopy.c:3032
+#: objcopy.c:3037
msgid "could not retrieve section contents"
msgstr "n'a pu récupérer le contenu de la section"
-#: objcopy.c:3046
+#: objcopy.c:3051
#, c-format
msgid "%s: debuglink section already exists"
msgstr "%s: la section debuglink existe déjà"
-#: objcopy.c:3058
+#: objcopy.c:3063
#, c-format
msgid "cannot create debug link section `%s'"
msgstr "ne peut créer la section de débug « %s »"
-#: objcopy.c:3152
+#: objcopy.c:3157
msgid "Can't fill gap after section"
msgstr "ne peut remplir le vide après la section"
-#: objcopy.c:3177
+#: objcopy.c:3182
msgid "can't add padding"
msgstr "ne peut ajouter du remplissage"
-#: objcopy.c:3354
+#: objcopy.c:3359
msgid "error: failed to locate merged notes"
msgstr "erreur: échec lors de la localisation des notes fusionnées"
-#: objcopy.c:3363
+#: objcopy.c:3368
msgid "error: failed to merge notes"
msgstr "erreur: échec de la fusion des notes"
-#: objcopy.c:3372
+#: objcopy.c:3377
msgid "error: failed to copy merged notes into output"
msgstr "erreur: échec de la copie des notes fusionnées vers la sortie"
-#: objcopy.c:3389
+#: objcopy.c:3394
#, c-format
msgid "%s: Could not find any mergeable note sections"
msgstr "%s: Impossible de trouver des sections de notes fusionnables"
-#: objcopy.c:3398
+#: objcopy.c:3403
#, c-format
msgid "cannot fill debug link section `%s'"
msgstr "ne peut remplir la section de débug « %s »"
-#: objcopy.c:3459
+#: objcopy.c:3464
msgid "error copying private BFD data"
msgstr "erreur de copie des données privées BFD"
-#: objcopy.c:3470
+#: objcopy.c:3475
#, c-format
msgid "this target does not support %lu alternative machine codes"
msgstr "cette cible ne supporte pas %lu codes machine alternatifs"
-#: objcopy.c:3474
+#: objcopy.c:3479
msgid "treating that number as an absolute e_machine value instead"
msgstr "traite ce nombre comme une valeur e_machine absolue"
-#: objcopy.c:3478
+#: objcopy.c:3483
msgid "ignoring the alternative value"
msgstr "ignore la valeur alternative"
-#: objcopy.c:3524
+#: objcopy.c:3529
msgid "sorry: copying thin archives is not currently supported"
msgstr "désolé: la copie d'archives légères n'est actuellement pas supportée"
-#: objcopy.c:3531 objcopy.c:3586
+#: objcopy.c:3536 objcopy.c:3591
#, c-format
msgid "cannot create tempdir for archive copying (error: %s)"
msgstr "ne peut créer le répertoire temporaire pour copier l'archivage (erreur: %s)"
-#: objcopy.c:3568
+#: objcopy.c:3573
#, c-format
msgid "illegal pathname found in archive member: %s"
msgstr "nom de chemin illégal trouvé dans le membre de l'archive: %s"
-#: objcopy.c:3619
+#: objcopy.c:3625
msgid "Unable to recognise the format of file"
msgstr "Incapable de reconnaître le format du fichier"
-#: objcopy.c:3752
+#: objcopy.c:3758
#, c-format
msgid "error: the input file '%s' is empty"
msgstr "ERREUR: le fichier d'entrée « %s » est vide"
-#: objcopy.c:3830
+#: objcopy.c:3836
#, c-format
msgid "--add-gnu-debuglink ignored for archive %s"
msgstr "-add-gnu-debuglink ignoré pour l'archive %s"
-#: objcopy.c:3939
+#: objcopy.c:3945
#, c-format
msgid "Multiple renames of section %s"
msgstr "Changement multiples de noms de la section %s"
-#: objcopy.c:3985
+#: objcopy.c:3991
msgid "error in private header data"
msgstr "erreur dans les données d'en-tête privées"
-#: objcopy.c:4078
+#: objcopy.c:4084
msgid "failed to create output section"
msgstr "incapable de créer la section de sortie"
-#: objcopy.c:4093
+#: objcopy.c:4099
msgid "failed to set size"
msgstr "incapable d'initialiser la taille"
-#: objcopy.c:4112
+#: objcopy.c:4118
msgid "failed to set vma"
msgstr "incapable d'initialiser le vma"
-#: objcopy.c:4142
+#: objcopy.c:4148
msgid "failed to set alignment"
msgstr "incapable d'initialiser l'alignement"
-#: objcopy.c:4174
+#: objcopy.c:4180
msgid "failed to copy private data"
msgstr "erreur de copie des données privées"
-#: objcopy.c:4331
+#: objcopy.c:4337
msgid "relocation count is negative"
msgstr "le compteur de relocation est négatif"
#. User must pad the section up in order to do this.
-#: objcopy.c:4430
+#: objcopy.c:4436
#, c-format
msgid "cannot reverse bytes: length of section %s must be evenly divisible by %d"
msgstr "ne peut pas inverser les octets : la longueur de la section %s doit être équitablement divisible en %d"
-#: objcopy.c:4638
+#: objcopy.c:4644
msgid "can't create debugging section"
msgstr "ne peut créer la section de débug"
-#: objcopy.c:4652
+#: objcopy.c:4658
msgid "can't set debugging section contents"
msgstr "ne peut initialiser le contenu de la section de débug"
-#: objcopy.c:4661
+#: objcopy.c:4667
#, c-format
msgid "don't know how to write debugging information for %s"
msgstr "ne sait comment écrire les informations de débug de %s"
-#: objcopy.c:4850
+#: objcopy.c:4856
msgid "could not create temporary file to hold stripped copy"
msgstr "le fichier temporaire pour contenir la copie élaguée n'a pas pu être créé"
-#: objcopy.c:4924
+#: objcopy.c:4930
#, c-format
msgid "%s: bad version in PE subsystem"
msgstr "%s: mauvaise version dans le sous-système PE"
-#: objcopy.c:4954
+#: objcopy.c:4960
#, c-format
msgid "unknown PE subsystem: %s"
msgstr "sous-système PE inconnu : %s"
-#: objcopy.c:5008 objcopy.c:5280 objcopy.c:5360 objcopy.c:5501 objcopy.c:5533
-#: objcopy.c:5596 objcopy.c:5600 objcopy.c:5620
+#: objcopy.c:5044 objcopy.c:5316 objcopy.c:5396 objcopy.c:5537 objcopy.c:5569
+#: objcopy.c:5632 objcopy.c:5636 objcopy.c:5656
#, c-format
msgid "bad format for %s"
msgstr "mauvais format pour %s"
-#: objcopy.c:5037
+#: objcopy.c:5073
#, c-format
msgid "cannot open: %s: %s"
msgstr "ne peut ouvrir: %s: %s"
-#: objcopy.c:5092
+#: objcopy.c:5128
msgid "byte number must be non-negative"
msgstr "le nombre d'octet ne peut être négatif"
-#: objcopy.c:5098
+#: objcopy.c:5134
#, c-format
msgid "architecture %s unknown"
msgstr "architecture %s inconnue"
-#: objcopy.c:5106
+#: objcopy.c:5142
msgid "interleave must be positive"
msgstr "l'intercalage doit être positif"
-#: objcopy.c:5115
+#: objcopy.c:5151
msgid "interleave width must be positive"
msgstr "la largeur d'intercalage doit être positive"
-#: objcopy.c:5433
+#: objcopy.c:5469
#, c-format
msgid "unrecognized --compress-debug-sections type `%s'"
msgstr "type --compress-debug-sections « %s » non reconnu"
-#: objcopy.c:5454
+#: objcopy.c:5490
#, c-format
msgid "unrecognized --elf-stt-common= option `%s'"
msgstr "option --elf-stt-common= « %s » non reconnue"
-#: objcopy.c:5470
+#: objcopy.c:5506
#, c-format
msgid "Warning: truncating gap-fill from 0x%s to 0x%x"
msgstr "AVERTISSEMENT: réduction du remplissage de 0x%s à 0x%x"
-#: objcopy.c:5556
+#: objcopy.c:5592
msgid "bad format for --set-section-alignment: argument needed"
msgstr "mauvais format pour --set-section-alignement : argument nécessaire"
-#: objcopy.c:5560
+#: objcopy.c:5596
msgid "bad format for --set-section-alignment: numeric argument needed"
msgstr "mauvais format pour --set-section-alignment : argument numérique nécessaire"
#. Number has more than on 1, i.e. wasn't a power of 2.
-#: objcopy.c:5572
+#: objcopy.c:5608
msgid "bad format for --set-section-alignment: alignment is not a power of two"
msgstr "mauvais format pour --set-section-alignment : l'alignement n'est pas une puissance de deux"
-#: objcopy.c:5679
+#: objcopy.c:5715
#, c-format
msgid "unknown long section names option '%s'"
msgstr "option de noms de section longs inconnue « %s »"
-#: objcopy.c:5702
+#: objcopy.c:5738
msgid "unable to parse alternative machine code"
msgstr "incapable de décoder le code de machine alternatif"
-#: objcopy.c:5751
+#: objcopy.c:5787
msgid "number of bytes to reverse must be positive and even"
msgstr "le nombre d'octets à inverser doit être positif et paire"
-#: objcopy.c:5754
+#: objcopy.c:5790
#, c-format
msgid "Warning: ignoring previous --reverse-bytes value of %d"
msgstr "Attention : la valeur précédente de --reverse-bytes (%d) est ignorée"
-#: objcopy.c:5769
+#: objcopy.c:5805
#, c-format
msgid "%s: invalid reserve value for --heap"
msgstr "%s: la valeur de réserve pour --heap n'est pas valable"
-#: objcopy.c:5775
+#: objcopy.c:5811
#, c-format
msgid "%s: invalid commit value for --heap"
msgstr "%s: la valeur confirmée pour --heap n'est pas valable"
-#: objcopy.c:5800
+#: objcopy.c:5836
#, c-format
msgid "%s: invalid reserve value for --stack"
msgstr "%s: la valeur de réserve pour --stack n'est pas valable"
-#: objcopy.c:5806
+#: objcopy.c:5842
#, c-format
msgid "%s: invalid commit value for --stack"
msgstr "%s: la valeur confirmée pour --stack n'est pas valable"
-#: objcopy.c:5815
+#: objcopy.c:5851
msgid "verilog data width must be at least 1 byte"
msgstr "la largeur des données verilog doit être au moins de 1 octet"
-#: objcopy.c:5832
+#: objcopy.c:5868
msgid "--globalize-symbol(s) is incompatible with -G/--keep-global-symbol(s)"
msgstr "--globalize-symbol(s) est incompatible avec -G/--keep-global-symbol(s)"
-#: objcopy.c:5844
+#: objcopy.c:5880
msgid "interleave start byte must be set with --byte"
msgstr "l'octet de départ de l'intercalage doit être fixé avec --byte"
-#: objcopy.c:5847
+#: objcopy.c:5883
msgid "byte number must be less than interleave"
msgstr "le nombre d'octets ne peut être plus petit que celui de l'intercalage"
-#: objcopy.c:5850
+#: objcopy.c:5886
msgid "interleave width must be less than or equal to interleave - byte`"
msgstr "la largeur d'intercalage doit être plus petite ou égale à l'intercalage - byte`"
-#: objcopy.c:5879
+#: objcopy.c:5909
#, c-format
msgid "unknown input EFI target: %s"
msgstr "cible EFI d'entrée inconnue : %s"
-#: objcopy.c:5910
+#: objcopy.c:5919
#, c-format
msgid "unknown output EFI target: %s"
msgstr "cible EFI de sortie inconnue : %s"
-#: objcopy.c:5936
+#: objcopy.c:5943
#, c-format
msgid "warning: could not create temporary file whilst copying '%s', (error: %s)"
msgstr "attention : le fichier temporaire n'a pas pu être créé pendant la copie de « %s » (erreur : %s)"
-#: objcopy.c:5973 objcopy.c:5987
+#: objcopy.c:5980 objcopy.c:5994
#, c-format
msgid "%s %s%c0x%s never used"
msgstr "%s %s%c0x%s jamais utilisé"
-#: objdump.c:212
+#: objdump.c:225
#, c-format
msgid "Usage: %s <option(s)> <file(s)>\n"
msgstr "Usage: %s <option(s)> <fichier(s)>\n"
-#: objdump.c:213
+#: objdump.c:226
#, c-format
msgid " Display information from object <file(s)>.\n"
msgstr "Afficher les informations depuis le(s) <fichier(s)> objet.\n"
-#: objdump.c:214
+#: objdump.c:227
#, c-format
msgid " At least one of the following switches must be given:\n"
msgstr "Au moins un des commutateurs suivants doit être fourni :\n"
-#: objdump.c:215
+#: objdump.c:228
#, c-format
msgid " -a, --archive-headers Display archive header information\n"
msgstr " -a, --archive-headers Afficher les informations de l'en-tête de l'archive\n"
-#: objdump.c:217
+#: objdump.c:230
#, c-format
msgid " -f, --file-headers Display the contents of the overall file header\n"
msgstr " -f, --file-headers Afficher le contenu de l'en-tête du fichier général\n"
-#: objdump.c:219
+#: objdump.c:232
#, c-format
msgid " -p, --private-headers Display object format specific file header contents\n"
msgstr " -p, --private-headers Afficher les contenus des en-têtes des fichiers dans un format spécifique à l'objet\n"
-#: objdump.c:221
+#: objdump.c:234
#, c-format
msgid " -P, --private=OPT,OPT... Display object format specific contents\n"
msgstr " -P, --private=OPT,OPT… Afficher les contenus dans un format spécifique à l'objet\n"
-#: objdump.c:223
+#: objdump.c:236
#, c-format
msgid " -h, --[section-]headers Display the contents of the section headers\n"
msgstr " -h, --[section-]headers Afficher le contenu des en-tête de section\n"
-#: objdump.c:225
+#: objdump.c:238
#, c-format
msgid " -x, --all-headers Display the contents of all headers\n"
msgstr " -x, --all-headers Afficher le contenu de tous les en-têtes\n"
-#: objdump.c:227
+#: objdump.c:240
#, c-format
msgid " -d, --disassemble Display assembler contents of executable sections\n"
msgstr " -d, --disassemble Afficher le contenu assembleur des sections exécutables\n"
-#: objdump.c:229
+#: objdump.c:242
#, c-format
msgid " -D, --disassemble-all Display assembler contents of all sections\n"
msgstr " -D, --disassemble-all Afficher le contenu assembleur de toutes les sections\n"
-#: objdump.c:231
+#: objdump.c:244
#, c-format
msgid " --disassemble=<sym> Display assembler contents from <sym>\n"
msgstr " --disassemble=<sym> Afficher le contenu assembleur de <sym>\n"
-#: objdump.c:233
+#: objdump.c:246
#, c-format
msgid " -S, --source Intermix source code with disassembly\n"
msgstr " -S, --source Compléter le code source avec le désassemblage\n"
-#: objdump.c:235
+#: objdump.c:248
#, c-format
msgid " --source-comment[=<txt>] Prefix lines of source code with <txt>\n"
msgstr " --source-comment[=<txt>] Préfixer les lignes du code source avec <txt>\n"
-#: objdump.c:237
+#: objdump.c:250
#, c-format
msgid " -s, --full-contents Display the full contents of all sections requested\n"
msgstr " -s, --full-contents Afficher les contenus complets de toutes les sections demandées\n"
-#: objdump.c:239
+#: objdump.c:252
#, c-format
msgid " -g, --debugging Display debug information in object file\n"
msgstr " -g, --debugging Afficher les informations de débogage dans le fichier objet\n"
-#: objdump.c:241
+#: objdump.c:254
#, c-format
msgid " -e, --debugging-tags Display debug information using ctags style\n"
msgstr " -e, --debugging-tags Afficher les informations de débogage en utilisant le style ctags\n"
-#: objdump.c:243
+#: objdump.c:256
#, c-format
msgid " -G, --stabs Display (in raw form) any STABS info in the file\n"
msgstr " -G, --stabs Afficher (sous forme brut) toute info STABS dans le fichier\n"
-#: objdump.c:245
+#: objdump.c:258
#, c-format
msgid ""
" -W, --dwarf[a/=abbrev, A/=addr, r/=aranges, c/=cu_index, L/=decodedline,\n"
@@ -5940,7 +6085,7 @@ msgstr ""
" U/=trace_info]\n"
" Afficher le contenu des sections de débogage DWARF\n"
-#: objdump.c:252
+#: objdump.c:265
#, c-format
msgid ""
" -Wk,--dwarf=links Display the contents of sections that link to\n"
@@ -5949,7 +6094,7 @@ msgstr ""
" -Wk,--dwarf=links Afficher le contenu des sections qui sont liées à\n"
" des fichier debuginfo séparés\n"
-#: objdump.c:256
+#: objdump.c:269
#, c-format
msgid ""
" -WK,--dwarf=follow-links\n"
@@ -5958,7 +6103,7 @@ msgstr ""
" -WK,--dwarf=follow-links\n"
" Suivre les liens vers les fichiers d'info de débogage séparés (par défaut)\n"
-#: objdump.c:259
+#: objdump.c:272
#, c-format
msgid ""
" -WN,--dwarf=no-follow-links\n"
@@ -5967,7 +6112,7 @@ msgstr ""
" -WN,--dwarf=no-follow-links\n"
" Ne pas suivre les liens vers les fichiers d'info de débogage séparés\n"
-#: objdump.c:263
+#: objdump.c:276
#, c-format
msgid ""
" -WK,--dwarf=follow-links\n"
@@ -5976,7 +6121,7 @@ msgstr ""
" -WK,--dwarf=follow-links\n"
" Suivre les liens vers des fichiers d'info de débogage séparés\n"
-#: objdump.c:266
+#: objdump.c:279
#, c-format
msgid ""
" -WN,--dwarf=no-follow-links\n"
@@ -5987,7 +6132,7 @@ msgstr ""
" Ne pas suivre les liens vers les fichiers d'info de débogage séparés\n"
" (par défaut)\n"
-#: objdump.c:271
+#: objdump.c:284
#, c-format
msgid ""
" -L, --process-links Display the contents of non-debug sections in\n"
@@ -5996,52 +6141,52 @@ msgstr ""
" -L, --process-links Afficher le contenu des sections de non-debogage dans\n"
" les fichiers debuginfo séparés. (Implique -WK)\n"
-#: objdump.c:275
+#: objdump.c:288
#, c-format
-msgid " --ctf=SECTION Display CTF info from SECTION\n"
-msgstr " --ctf=SECTION Afficher les infos CTF de la SECTION\n"
+msgid " --ctf[=SECTION] Display CTF info from SECTION, (default `.ctf')\n"
+msgstr " --ctf[=SECTION] Afficher les infos CTF de la SECTION, (par défaut : « .ctf »)\n"
-#: objdump.c:278
+#: objdump.c:291
#, c-format
msgid " -t, --syms Display the contents of the symbol table(s)\n"
msgstr " -t, --syms Afficher le contenu de la (des) table(s) de symboles\n"
-#: objdump.c:280
+#: objdump.c:293
#, c-format
msgid " -T, --dynamic-syms Display the contents of the dynamic symbol table\n"
msgstr " -T, --dynamic-syms Afficher le contenu de la table des symboles dynamiques\n"
-#: objdump.c:282
+#: objdump.c:295
#, c-format
msgid " -r, --reloc Display the relocation entries in the file\n"
msgstr " -r, --reloc Afficher les entrées de réadressage dans le fichier\n"
-#: objdump.c:284
+#: objdump.c:297
#, c-format
msgid " -R, --dynamic-reloc Display the dynamic relocation entries in the file\n"
msgstr " -R, --dynamic-reloc Afficher les entrées de réadressage dynamique dans le fichier\n"
-#: objdump.c:286
+#: objdump.c:299
#, c-format
msgid " @<file> Read options from <file>\n"
msgstr " @<fichier> Lire les options à partir du <fichier>\n"
-#: objdump.c:288
+#: objdump.c:301
#, c-format
msgid " -v, --version Display this program's version number\n"
msgstr " -v, --version Afficher la version de ce logiciel\n"
-#: objdump.c:290
+#: objdump.c:303
#, c-format
msgid " -i, --info List object formats and architectures supported\n"
msgstr " -i, --info Lister les formats objets et les architectures supportées\n"
-#: objdump.c:292
+#: objdump.c:305
#, c-format
msgid " -H, --help Display this information\n"
msgstr " -H, --help Afficher cet aide-mémoire\n"
-#: objdump.c:299
+#: objdump.c:312
#, c-format
msgid ""
"\n"
@@ -6050,70 +6195,66 @@ msgstr ""
"\n"
" Les commutateurs suivants sont optionnels :\n"
-#: objdump.c:300
+#: objdump.c:313
#, c-format
msgid " -b, --target=BFDNAME Specify the target object format as BFDNAME\n"
msgstr " -b, --target=NOMBFD Spécifier le format de l'objet cible comme étant NOMBFD\n"
-#: objdump.c:302
+#: objdump.c:315
#, c-format
msgid " -m, --architecture=MACHINE Specify the target architecture as MACHINE\n"
msgstr " -m, --architecture=MACHINE Spécifier l'architecture cible comme étant MACHINE\n"
-#: objdump.c:304
+#: objdump.c:317
#, c-format
msgid " -j, --section=NAME Only display information for section NAME\n"
msgstr " -j, --section=NOM Afficher uniquement les informations de la section NOM\n"
-#: objdump.c:306
+#: objdump.c:319
#, c-format
msgid " -M, --disassembler-options=OPT Pass text OPT on to the disassembler\n"
msgstr " -M, --disassembler-options=OPT Passer le texte OPT au désassembleur\n"
-#: objdump.c:308
+#: objdump.c:321
#, c-format
msgid " -EB --endian=big Assume big endian format when disassembling\n"
msgstr " -EB --endian=big Supposer le format gros boutiste lors du désassemblage\n"
-#: objdump.c:310
+#: objdump.c:323
#, c-format
msgid " -EL --endian=little Assume little endian format when disassembling\n"
msgstr " -EL --endian=little Supposer le format petit boutiste lors du désassemblage\n"
-#: objdump.c:312
+#: objdump.c:325
#, c-format
msgid " --file-start-context Include context from start of file (with -S)\n"
msgstr " --file-start-context Inclure le contexte depuis le début du fichier (avec -S)\n"
-#: objdump.c:314
+#: objdump.c:327
#, c-format
msgid " -I, --include=DIR Add DIR to search list for source files\n"
msgstr " -I, --include=RÉP Ajouter RÉP à la liste de recherche pour les fichiers sources\n"
-#: objdump.c:316
+#: objdump.c:329
#, c-format
msgid " -l, --line-numbers Include line numbers and filenames in output\n"
msgstr " -l, --line-numbers Inclure les numéros de lignes et les noms des fichiers dans la sortie\n"
-#: objdump.c:318
+#: objdump.c:331
#, c-format
msgid " -F, --file-offsets Include file offsets when displaying information\n"
msgstr " -F, --file-offsets Inclure les décalages du fichier en affichant les informations\n"
-#: objdump.c:320
+#: objdump.c:333
#, c-format
-msgid ""
-" -C, --demangle[=STYLE] Decode mangled/processed symbol names\n"
-" The STYLE, if specified, can be `auto', `gnu',\n"
-" `lucid', `arm', `hp', `edg', `gnu-v3', `java'\n"
-" or `gnat'\n"
-msgstr ""
-" -C, --demangle[=STYLE] Décoder les noms de symboles décorés/traités\n"
-" Le STYLE, si précisé, peut être « auto », « gnu »,\n"
-" « lucid », « arm », « hp », « edg », « gnu-v3 »,\n"
-" « java » ou « gnat »\n"
+msgid " -C, --demangle[=STYLE] Decode mangled/processed symbol names\n"
+msgstr " -C, --demangle[=STYLE] Retirer les décorations des noms des symboles décorés/traités\n"
-#: objdump.c:325
+#: objdump.c:335
+msgid " STYLE can be "
+msgstr " STYLE peut être "
+
+#: objdump.c:337
#, c-format
msgid ""
" --recurse-limit Enable a limit on recursion whilst demangling\n"
@@ -6122,107 +6263,116 @@ msgstr ""
" --recurse-limit Activer une limite sur la récursion lors de la suppression des décorations\n"
" (par défaut)\n"
-#: objdump.c:328
+#: objdump.c:340
#, c-format
msgid " --no-recurse-limit Disable a limit on recursion whilst demangling\n"
msgstr " --no-recurse-limit Désactiver la limite sur la récursion de la suppression des décorations\n"
-#: objdump.c:330
+#: objdump.c:342
#, c-format
msgid " -w, --wide Format output for more than 80 columns\n"
msgstr " -w, --wide Formater la sortie pour plus de 80 colonnes\n"
-#: objdump.c:332
+#: objdump.c:344
+#, c-format
+msgid ""
+" -U[d|l|i|x|e|h] Controls the display of UTF-8 unicode characters\n"
+" --unicode=[default|locale|invalid|hex|escape|highlight]\n"
+msgstr ""
+" -U[d|l|i|x|e|h] Contrôler l'affichage des caractères unicode en UTF-8\n"
+" --unicode=[default|locale|invalid|hex|escape|highlight]\n"
+
+#: objdump.c:347
#, c-format
msgid " -z, --disassemble-zeroes Do not skip blocks of zeroes when disassembling\n"
msgstr " -z, --disassemble-zeroes Ne pas passer outre les blocs de zéros lors du désassemblage\n"
-#: objdump.c:334
+#: objdump.c:349
#, c-format
msgid " --start-address=ADDR Only process data whose address is >= ADDR\n"
msgstr " --start-address=ADR Ne traiter que les données dont l'adresse est >= ADR\n"
-#: objdump.c:336
+#: objdump.c:351
#, c-format
msgid " --stop-address=ADDR Only process data whose address is < ADDR\n"
msgstr " --stop-address=ADR Ne traiter que les données dont l'adresse est < ADR\n"
-#: objdump.c:338
+#: objdump.c:353
#, c-format
msgid " --no-addresses Do not print address alongside disassembly\n"
msgstr " --no-addresses Ne pas afficher les adresses en plus du désassemblage\n"
-#: objdump.c:340
+#: objdump.c:355
#, c-format
msgid " --prefix-addresses Print complete address alongside disassembly\n"
msgstr " --prefix-adresses Afficher les adresses en plus du désassemblage\n"
-#: objdump.c:342
+#: objdump.c:357
#, c-format
msgid " --[no-]show-raw-insn Display hex alongside symbolic disassembly\n"
msgstr " --[no-]show-raw-insn Afficher l'hexadécimal en plus du désassemblage symbolique\n"
-#: objdump.c:344
+#: objdump.c:359
#, c-format
msgid " --insn-width=WIDTH Display WIDTH bytes on a single line for -d\n"
msgstr " --insn-width=LARGEUR Afficher LARGEUR octets par ligne avec -d\n"
-#: objdump.c:346
+#: objdump.c:361
#, c-format
msgid " --adjust-vma=OFFSET Add OFFSET to all displayed section addresses\n"
msgstr " --adjust-vma=OFFSET Ajouter OFFSET à toutes les adresses de section affichées\n"
-#: objdump.c:348
+#: objdump.c:363
#, c-format
msgid " --special-syms Include special symbols in symbol dumps\n"
msgstr " --special-syms Inclure les symboles spéciaux dans les vidanges des symboles\n"
-#: objdump.c:350
+#: objdump.c:365
#, c-format
msgid " --inlines Print all inlines for source line (with -l)\n"
msgstr " --inlines Afficher toutes les instructions en lignes pour les lignes source (avec -l)\n"
-#: objdump.c:352
+#: objdump.c:367
#, c-format
msgid " --prefix=PREFIX Add PREFIX to absolute paths for -S\n"
msgstr " --prefix=PRÉFIXE Ajouter le PRÉFIXE aux chemins absolus pour -S\n"
-#: objdump.c:354
+#: objdump.c:369
#, c-format
msgid " --prefix-strip=LEVEL Strip initial directory names for -S\n"
msgstr " --prefix-strip=NIVEAU Éliminer les noms de répertoires initiaux pour -S\n"
-#: objdump.c:356
+#: objdump.c:371
#, c-format
msgid " --dwarf-depth=N Do not display DIEs at depth N or greater\n"
msgstr " --dwarf-depth=N Ne pas afficher DIE à la profondeur N ou inférieure\n"
-#: objdump.c:358
+#: objdump.c:373
#, c-format
msgid " --dwarf-start=N Display DIEs starting at offset N\n"
msgstr " --dwarf-start=N Afficher DIE à partir de l'offset N\n"
-#: objdump.c:360
+#: objdump.c:375
#, c-format
msgid " --dwarf-check Make additional dwarf consistency checks.\n"
msgstr " --dwarf-check Réaliser des vérifications d'intégrité supplémentaires pour dwarf.\n"
-#: objdump.c:363
+#: objdump.c:378
#, c-format
-msgid " --ctf-parent=SECTION Use SECTION as the CTF parent\n"
-msgstr " --ctf-parent=SECTION Utiliser la SECTION comme parent CTF\n"
+msgid " --ctf-parent=NAME Use CTF archive member NAME as the CTF parent\n"
+msgstr " --ctf-parent=NOM Utiliser le membre de l'archive CTF avec le nom NOM comme parent CTF\n"
-#: objdump.c:366
+#: objdump.c:381
#, c-format
msgid " --visualize-jumps Visualize jumps by drawing ASCII art lines\n"
msgstr " --visualize-jumps Visualiser les sauts en dessinant des lignes avec des caractères ASCII\n"
-#: objdump.c:368
+#: objdump.c:383
#, c-format
msgid " --visualize-jumps=color Use colors in the ASCII art\n"
msgstr " --visualize-jumps=color Utiliser des couleurs dans les lignes en caractères ASCII\n"
-#: objdump.c:370
+#: objdump.c:385
#, c-format
msgid ""
" --visualize-jumps=extended-color\n"
@@ -6231,7 +6381,7 @@ msgstr ""
" --visualize-jumps=extended-color\n"
" Utiliser des codes de couleurs étendus sur 8 bits\n"
-#: objdump.c:373
+#: objdump.c:388
#, c-format
msgid ""
" --visualize-jumps=off Disable jump visualization\n"
@@ -6240,7 +6390,7 @@ msgstr ""
" --visualize-jumps=off Désactiver la visualisation des sauts\n"
"\n"
-#: objdump.c:384
+#: objdump.c:399
#, c-format
msgid ""
"\n"
@@ -6249,71 +6399,71 @@ msgstr ""
"\n"
"Options supportées par -P/--private :\n"
-#: objdump.c:621
+#: objdump.c:759
#, c-format
msgid "section '%s' mentioned in a -j option, but not found in any input file"
msgstr "section « %s » mentionnée dans une option -j n'a été trouvée dans aucun fichier d'entrée"
-#: objdump.c:776
+#: objdump.c:914
#, c-format
msgid "Sections:\n"
msgstr "Sections :\n"
-#: objdump.c:782
+#: objdump.c:920
#, c-format
msgid "Idx %-*s Size %-*s%-*sFile off Algn"
msgstr "Idx %-*s Taille %-*s%-*sOff fich Algn"
-#: objdump.c:788
+#: objdump.c:926
#, c-format
msgid " Flags"
msgstr " Fanions"
-#: objdump.c:810
+#: objdump.c:948
#, c-format
msgid "failed to read symbol table from: %s"
msgstr "impossible de lire la table des symboles depuis: %s"
-#: objdump.c:811 objdump.c:4753
+#: objdump.c:949 objdump.c:4907
msgid "error message was"
msgstr "le message d'erreur était"
-#: objdump.c:826
+#: objdump.c:964
#, c-format
msgid "error: symbol table size (%#lx) is larger than filesize (%#lx)"
msgstr "erreur: la taille de la table des symboles (%#lx) est plus grande que la taille du fichier (%#lx)"
-#: objdump.c:856
+#: objdump.c:994
#, c-format
msgid "%s: not a dynamic object"
msgstr "%s: n'est pas un objet dynamique"
-#: objdump.c:1455 objdump.c:1482
+#: objdump.c:1593 objdump.c:1620
#, c-format
msgid " (File Offset: 0x%lx)"
msgstr " (Offset dans le fichier : 0x%lx)"
-#: objdump.c:1727
+#: objdump.c:1865
#, c-format
msgid "source file %s is more recent than object file\n"
msgstr "le fichier source %s est plus récent que le fichier objet\n"
-#: objdump.c:2755
+#: objdump.c:2893
#, c-format
msgid "\t... (skipping %lu zeroes, resuming at file offset: 0x%lx)\n"
msgstr "\t... (passe outre %lu zéros, continue à l'offset du fichier: 0x%lx)\n"
-#: objdump.c:2887
+#: objdump.c:3025
#, c-format
msgid "disassemble_fn returned length %d"
msgstr "disassemble_fn a retourné la longueur %d"
-#: objdump.c:3215 objdump.c:4391
+#: objdump.c:3353 objdump.c:4527
#, c-format
msgid "Reading section %s failed because: %s"
msgstr "La lecture de la section %s a échouée à cause de: %s"
-#: objdump.c:3236
+#: objdump.c:3374
#, c-format
msgid ""
"\n"
@@ -6322,17 +6472,17 @@ msgstr ""
"\n"
"Déassemblage de la section %s :\n"
-#: objdump.c:3527
+#: objdump.c:3665
#, c-format
msgid "can't use supplied machine %s"
msgstr "ne peut utiliser la machine fournie %s"
-#: objdump.c:3548
+#: objdump.c:3686
#, c-format
msgid "can't disassemble for architecture %s\n"
msgstr "ne peut déassembler pour l'architecture %s\n"
-#: objdump.c:3637
+#: objdump.c:3775
#, c-format
msgid ""
"\n"
@@ -6341,7 +6491,7 @@ msgstr ""
"\n"
"La section « %s » a une taille invalide: %#llx.\n"
-#: objdump.c:3682
+#: objdump.c:3820
#, c-format
msgid ""
"\n"
@@ -6350,12 +6500,12 @@ msgstr ""
"\n"
"Ne peut obtenir le contenu de la section « %s ».\n"
-#: objdump.c:3844
+#: objdump.c:3999
#, c-format
msgid "File %s does not contain any dwarf debug information\n"
msgstr "Le fichier %s ne contient aucune information de débogage dwarf\n"
-#: objdump.c:3881
+#: objdump.c:4036
#, c-format
msgid ""
"No %s section present\n"
@@ -6364,12 +6514,12 @@ msgstr ""
"Aucune section %s présente\n"
"\n"
-#: objdump.c:3888
+#: objdump.c:4043
#, c-format
msgid "reading %s section of %s failed: %s"
msgstr "lecture de la section %s de %s a échouée : %s"
-#: objdump.c:3934
+#: objdump.c:4089
#, c-format
msgid ""
"Contents of %s section:\n"
@@ -6378,17 +6528,17 @@ msgstr ""
"Contenu de la section %s :\n"
"\n"
-#: objdump.c:4068
+#: objdump.c:4223
#, c-format
msgid "architecture: %s, "
msgstr "architecture: %s, "
-#: objdump.c:4071
+#: objdump.c:4226
#, c-format
msgid "flags 0x%08x:\n"
msgstr "fanions 0x%08x:\n"
-#: objdump.c:4084
+#: objdump.c:4239
#, c-format
msgid ""
"\n"
@@ -6397,25 +6547,25 @@ msgstr ""
"\n"
"adresse de départ 0x"
-#: objdump.c:4134 readelf.c:15094
+#: objdump.c:4289 readelf.c:15478
#, c-format
msgid "%s: %s"
msgstr "%s: %s"
-#: objdump.c:4134 readelf.c:15094
+#: objdump.c:4289 readelf.c:15478
msgid "warning"
msgstr "avertissement"
-#: objdump.c:4134 readelf.c:15094
+#: objdump.c:4289 readelf.c:15478
msgid "error"
msgstr "erreur"
-#: objdump.c:4140 readelf.c:15099
+#: objdump.c:4295 readelf.c:15483
#, c-format
msgid "CTF error: cannot get CTF errors: `%s'"
msgstr "erreur CTF: impossible d'obtenir les erreurs CTF : « %s »"
-#: objdump.c:4167 readelf.c:15125
+#: objdump.c:4319 readelf.c:15505
#, c-format
msgid ""
"\n"
@@ -6424,71 +6574,71 @@ msgstr ""
"\n"
"membre d'archive CTF : %s:\n"
-#: objdump.c:4186
+#: objdump.c:4339
#, c-format
msgid "Iteration failed: %s, %s"
msgstr "L'itération a échouée : %s, %s"
-#: objdump.c:4223 objdump.c:4233 objdump.c:4248
+#: objdump.c:4377 objdump.c:4384
#, c-format
msgid "CTF open failure: %s"
msgstr "Échec de l'ouverture de CTF : %s"
-#: objdump.c:4252
+#: objdump.c:4388
#, c-format
msgid "Contents of CTF section %s:\n"
msgstr "Contenu de la section CTF %s :\n"
-#: objdump.c:4257
+#: objdump.c:4395
#, c-format
msgid "CTF archive member open failure: %s"
msgstr "erreur à l'ouverture du membre d'archive CTF : %s"
-#: objdump.c:4277
+#: objdump.c:4413
#, c-format
msgid "warning: private headers incomplete: %s"
msgstr "attention: les en-têtes privés sont incomplets : %s"
-#: objdump.c:4295
+#: objdump.c:4431
msgid "option -P/--private not supported by this file"
msgstr "option -P/--private pas supportée par ce fichier"
-#: objdump.c:4319
+#: objdump.c:4455
#, c-format
msgid "target specific dump '%s' not supported"
msgstr "Le dump « %s » spécifique à la cible n'est pas supporté"
-#: objdump.c:4383
+#: objdump.c:4519
#, c-format
msgid "Contents of section %s:"
msgstr "Contenu de la section %s :"
-#: objdump.c:4385
+#: objdump.c:4521
#, c-format
msgid " (Starting at file offset: 0x%lx)"
msgstr " (Démarrage à l'offset du fichier: 0x%lx)"
-#: objdump.c:4495
+#: objdump.c:4631
#, c-format
msgid "no symbols\n"
msgstr "aucun symbole\n"
-#: objdump.c:4502
+#: objdump.c:4638
#, c-format
msgid "no information for symbol number %ld\n"
msgstr "pas d'information pour le symbole numéro %ld\n"
-#: objdump.c:4505
+#: objdump.c:4641
#, c-format
msgid "could not determine the type of symbol number %ld\n"
msgstr "incapable de déterminer le type du symbole numéro %ld\n"
-#: objdump.c:4751
+#: objdump.c:4905
#, c-format
msgid "failed to read relocs in: %s"
msgstr "échec de lecture des réadressages dans: %s"
-#: objdump.c:4911
+#: objdump.c:5064
#, c-format
msgid ""
"\n"
@@ -6497,52 +6647,52 @@ msgstr ""
"\n"
"%s: format de fichier %s\n"
-#: objdump.c:5011
+#: objdump.c:5172
#, c-format
msgid "%s: printing debugging information failed"
msgstr "%s: échec d'affichage des informationis de débug"
-#: objdump.c:5107
+#: objdump.c:5268
#, c-format
msgid "In archive %s:\n"
msgstr "Dans l'archive %s :\n"
#. Prevent corrupted files from spinning us into an
#. infinite loop. 100 is an arbitrary heuristic.
-#: objdump.c:5112
+#: objdump.c:5273
msgid "Archive nesting is too deep"
msgstr "L'archive est imbriquée trop profondément"
-#: objdump.c:5116
+#: objdump.c:5277
#, c-format
msgid "In nested archive %s:\n"
msgstr "Dans l'archive imbriquée %s :\n"
-#: objdump.c:5279
+#: objdump.c:5440
msgid "error: the start address should be before the end address"
msgstr "erreur: l'adresse de début doit être avant l'adresse de fin"
-#: objdump.c:5284
+#: objdump.c:5445
msgid "error: the stop address should be after the start address"
msgstr "erreur: l'adresse de fin doit être après l'adresse de début"
-#: objdump.c:5296
+#: objdump.c:5457
msgid "error: prefix strip must be non-negative"
msgstr "erreur: le préfixe à supprimer ne peut pas être négatif"
-#: objdump.c:5301
+#: objdump.c:5462
msgid "error: instruction width must be positive"
msgstr "erreur: la largeur de l'instruction doit être positive"
-#: objdump.c:5322
+#: objdump.c:5483
msgid "unrecognized argument to --visualize-option"
msgstr "argument non reconnu pour --visualize-option"
-#: objdump.c:5332
+#: objdump.c:5493
msgid "unrecognized -E option"
msgstr "option -E non reconnue"
-#: objdump.c:5343
+#: objdump.c:5504
#, c-format
msgid "unrecognized --endian type `%s'"
msgstr "type --endian « %s » non reconnu"
@@ -6875,7 +7025,7 @@ msgstr " nombre de sections: %d\n"
msgid " time and date: 0x%08x - "
msgstr " heure et date: 0x%08x - "
-#: od-xcoff.c:421 readelf.c:19706
+#: od-xcoff.c:421 readelf.c:20126
#, c-format
msgid "not set\n"
msgstr "non définie\n"
@@ -7342,363 +7492,374 @@ msgstr "%s: %s: l'entrée de l'ébauche %ld est corrompue\n"
msgid "Last stabs entries before error:\n"
msgstr "Dernières entrées à inclure avant erreur :\n"
-#: readelf.c:354
+#: readelf.c:385
msgid "<none>"
msgstr "<aucun>"
-#: readelf.c:355
+#: readelf.c:387
msgid "<no-strings>"
msgstr "<aucune-chaîne>"
-#: readelf.c:437
+#: readelf.c:482
#, c-format
msgid "Size truncation prevents reading %s elements of size %s for %s\n"
msgstr "La troncature de la taille empêche la lecture de %s éléments de taille %s pour %s\n"
-#: readelf.c:447
+#: readelf.c:492
#, c-format
msgid "Size overflow prevents reading %s elements of size %s for %s\n"
msgstr "Le débordement de taille empêche la lecture de %s éléments de taille %s pour %s\n"
-#: readelf.c:460
+#: readelf.c:505
#, c-format
msgid "Reading %s bytes extends past end of file for %s\n"
msgstr "La lecture de %s octets va au delà de la fin du fichier pour %s\n"
-#: readelf.c:469
+#: readelf.c:514
#, c-format
msgid "Unable to seek to 0x%lx for %s\n"
msgstr "Incapable de repérer 0x%lx pour %s\n"
-#: readelf.c:483
+#: readelf.c:528
#, c-format
msgid "Out of memory allocating %s bytes for %s\n"
msgstr "Mémoire épuisée lors de l'allocation de %s octets pour %s\n"
-#: readelf.c:494
+#: readelf.c:539
#, c-format
msgid "Unable to read in %s bytes of %s\n"
msgstr "incapable de lire %s octets de %s\n"
-#: readelf.c:971
+#: readelf.c:1151
msgid "Don't know about relocations on this machine architecture\n"
msgstr "Ne connaît pas de méthode pour le réadressage sur l'architecture de cette machine\n"
-#: readelf.c:998 readelf.c:1103
+#: readelf.c:1178 readelf.c:1283
msgid "32-bit relocation data"
msgstr "données de réadressage 32 bits"
-#: readelf.c:1010 readelf.c:1040 readelf.c:1114 readelf.c:1143
+#: readelf.c:1190 readelf.c:1220 readelf.c:1294 readelf.c:1323 readelf.c:1402
msgid "out of memory parsing relocs\n"
msgstr "Mémoire épuisée lors de l'analyse syntaxique des réadressages\n"
-#: readelf.c:1028 readelf.c:1132
+#: readelf.c:1208 readelf.c:1312
msgid "64-bit relocation data"
msgstr "données de réadressage 64 bits"
-#: readelf.c:1262
+#: readelf.c:1376
+msgid "RELR relocation data"
+msgstr "données de réadressage RELR"
+
+#: readelf.c:1516
+#, c-format
+msgid " %lu offset\n"
+msgid_plural " %lu offsets\n"
+msgstr[0] " %lu décalage\n"
+msgstr[1] " %lu décalages\n"
+
+#: readelf.c:1528
#, c-format
msgid " Offset Info Type Sym. Value Symbol's Name + Addend\n"
msgstr " Décalage Info Type Val.-sym. Noms-symb. + Addenda\n"
-#: readelf.c:1264
+#: readelf.c:1530
#, c-format
msgid " Offset Info Type Sym.Value Sym. Name + Addend\n"
msgstr " Décalage Info Type Val.-sym Noms-symb + Addenda\n"
-#: readelf.c:1269
+#: readelf.c:1535
#, c-format
msgid " Offset Info Type Sym. Value Symbol's Name\n"
msgstr " Décalage Info Type Val.-sym. Noms-symboles\n"
-#: readelf.c:1271
+#: readelf.c:1537
#, c-format
msgid " Offset Info Type Sym.Value Sym. Name\n"
msgstr " Décalage Info Type Val.-sym Noms-symboles\n"
-#: readelf.c:1279
+#: readelf.c:1545
#, c-format
msgid " Offset Info Type Symbol's Value Symbol's Name + Addend\n"
msgstr " Décalage Info Type Valeurs symbols Noms symboles + Addenda\n"
-#: readelf.c:1281
+#: readelf.c:1547
#, c-format
msgid " Offset Info Type Sym. Value Sym. Name + Addend\n"
msgstr " Décalage Info Type Val.-symboles Noms-symb.+ Addenda\n"
-#: readelf.c:1286
+#: readelf.c:1552
#, c-format
msgid " Offset Info Type Symbol's Value Symbol's Name\n"
msgstr " Décalage Info Type Valeurs symbols Noms symbols\n"
-#: readelf.c:1288
+#: readelf.c:1554
#, c-format
msgid " Offset Info Type Sym. Value Sym. Name\n"
msgstr " Décalage Info Type Val.-symboles Noms-symboles\n"
-#: readelf.c:1659 readelf.c:1852 readelf.c:1860
+#: readelf.c:1930 readelf.c:2125 readelf.c:2133
#, c-format
msgid "unrecognized: %-7lx"
msgstr "non reconnue: %-7lx"
-#: readelf.c:1685
+#: readelf.c:1956
#, c-format
msgid "<unknown addend: %lx>"
msgstr "<ajout inconnu: %lx>"
-#: readelf.c:1694
+#: readelf.c:1965
#, c-format
msgid " bad symbol index: %08lx in reloc\n"
msgstr " mauvais index de symbole: %08lx dans le réadressage\n"
-#: readelf.c:1797
+#: readelf.c:2070
#, c-format
msgid "<string table index: %3ld>"
msgstr "<chaîne de la table index: %3ld>"
-#: readelf.c:1800
+#: readelf.c:2073
#, c-format
msgid "<corrupt string table index: %3ld>\n"
msgstr "<chaîne corrompue de la table index: %3ld>\n"
-#: readelf.c:2305
+#: readelf.c:2595
#, c-format
msgid "Processor Specific: %lx"
msgstr "Spécificités du processeur: %lx"
-#: readelf.c:2332
+#: readelf.c:2622
#, c-format
msgid "Operating System specific: %lx"
msgstr "Spécificités du systèmes d'exploitation: %lx"
-#: readelf.c:2336 readelf.c:4246
+#: readelf.c:2626 readelf.c:4563
#, c-format
msgid "<unknown>: %lx"
msgstr "<inconnu>: %lx"
-#: readelf.c:2436
+#: readelf.c:2726
msgid "NONE (None)"
msgstr "NONE (Aucun)"
-#: readelf.c:2437
+#: readelf.c:2727
msgid "REL (Relocatable file)"
msgstr "REL (Fichier de réadressage)"
-#: readelf.c:2438
+#: readelf.c:2728
msgid "EXEC (Executable file)"
msgstr "EXEC (fichier exécutable)"
-#: readelf.c:2441
+#: readelf.c:2731
msgid "DYN (Position-Independent Executable file)"
msgstr "DYN (fichier exécutable indépendant de la position)"
-#: readelf.c:2443
+#: readelf.c:2733
msgid "DYN (Shared object file)"
msgstr "DYN (fichier objet partagé)"
-#: readelf.c:2444
+#: readelf.c:2734
msgid "CORE (Core file)"
msgstr "CORE (fichier core)"
-#: readelf.c:2448
+#: readelf.c:2738
#, c-format
msgid "Processor Specific: (%x)"
msgstr "Spécificités du processeur: (%x)"
-#: readelf.c:2450
+#: readelf.c:2740
#, c-format
msgid "OS Specific: (%x)"
msgstr "Spécificités du système d'exploitation: (%x)"
-#: readelf.c:2452
+#: readelf.c:2742
#, c-format
msgid "<unknown>: %x"
msgstr "<inconnu>: %x"
#. Please keep this switch table sorted by increasing EM_ value.
#. 0
-#: readelf.c:2466 readelf.c:17634 readelf.c:17645
+#: readelf.c:2756 readelf.c:18010 readelf.c:18021
msgid "None"
msgstr "Aucun"
-#: readelf.c:2714
+#: readelf.c:3004
#, c-format
msgid "<unknown>: 0x%x"
msgstr "<inconnu>: 0x%x"
-#: readelf.c:3000
+#: readelf.c:3290
msgid ", <unknown>"
msgstr ", <inconnu>"
-#: readelf.c:3369 readelf.c:10401
+#: readelf.c:3659 readelf.c:10755
msgid "unknown"
msgstr "inconnu"
-#: readelf.c:3370
+#: readelf.c:3660
msgid "unknown mac"
msgstr "mac inconnue"
-#: readelf.c:3438
+#: readelf.c:3728
msgid ", <unknown MeP cpu type>"
msgstr ", <type de cpu MeP inconnu>"
-#: readelf.c:3448
+#: readelf.c:3738
msgid "<unknown MeP copro type>"
msgstr "<type de coprocesseur MeP inconnu>"
-#: readelf.c:3459
+#: readelf.c:3749
#, c-format
msgid ", unknown flags bits: %#x"
msgstr ", bits de fanions inconnus: %#x"
-#: readelf.c:3468
+#: readelf.c:3758
msgid ", relocatable"
msgstr ", relocalisable"
-#: readelf.c:3471
+#: readelf.c:3761
msgid ", relocatable-lib"
msgstr ", relocalisable-lib"
-#: readelf.c:3553
+#: readelf.c:3843
msgid ", unknown v850 architecture variant"
msgstr ", variante d'architecture v850 inconnue"
-#: readelf.c:3621
+#: readelf.c:3911
msgid ", unknown CPU"
msgstr ", CPU inconnu"
-#: readelf.c:3636
+#: readelf.c:3926
msgid ", unknown ABI"
msgstr ", ABI inconnu"
-#: readelf.c:3661 readelf.c:3732
+#: readelf.c:3951 readelf.c:4022
msgid ", unknown ISA"
msgstr ", ISA inconnu"
-#: readelf.c:3842
+#: readelf.c:4132
#, c-format
msgid "Unrecognised IA64 VMS Command Code: %x\n"
msgstr "Code de commande VMS IA64 non reconnu: %x\n"
-#: readelf.c:3908
+#: readelf.c:4198
msgid ": architecture variant: "
msgstr ": variante d'architecture : "
-#: readelf.c:3927
+#: readelf.c:4217
msgid ": unknown"
msgstr ": inconnu"
-#: readelf.c:3931
+#: readelf.c:4221
msgid ": unknown extra flag bits also present"
msgstr ": bits de fanions supplémentaires inconnus aussi présents"
-#: readelf.c:3945
+#: readelf.c:4235
msgid ", unknown"
msgstr ", inconnu"
-#: readelf.c:3997
+#: readelf.c:4301
msgid "Standalone App"
msgstr "Tâche autonome"
-#: readelf.c:4006
+#: readelf.c:4310
msgid "Bare-metal C6000"
msgstr "C6000 brut de fonderie"
-#: readelf.c:4016 readelf.c:5193 readelf.c:5209 readelf.c:19058
-#: readelf.c:19158 readelf.c:19189 readelf.c:19226 readelf.c:19287
-#: readelf.c:19314
+#: readelf.c:4320 readelf.c:5535 readelf.c:5551 readelf.c:19439
+#: readelf.c:19539 readelf.c:19570 readelf.c:19607 readelf.c:19668
+#: readelf.c:19695 readelf.c:19717
#, c-format
msgid "<unknown: %x>"
msgstr "<inconnu: %x>"
#. This message is probably going to be displayed in a 15
#. character wide field, so put the hex value first.
-#: readelf.c:4615
+#: readelf.c:4933
#, c-format
msgid "%08x: <unknown>"
msgstr "%08x: <inconnu>"
-#: readelf.c:4702
+#: readelf.c:5021
#, c-format
msgid "Usage: readelf <option(s)> elf-file(s)\n"
msgstr "Usage: readelf <option(s)> fichier(s)-elf\n"
-#: readelf.c:4703
+#: readelf.c:5022
#, c-format
msgid " Display information about the contents of ELF format files\n"
msgstr "Afficher les informations à propos du contenu du format des fichiers ELF\n"
-#: readelf.c:4704
+#: readelf.c:5023
#, c-format
msgid " Options are:\n"
msgstr " Les options sont :\n"
-#: readelf.c:4705
+#: readelf.c:5024
#, c-format
msgid " -a --all Equivalent to: -h -l -S -s -r -d -V -A -I\n"
msgstr " -a --all Équivalent à : -h -l -S -s -r -d -V -A -I\n"
-#: readelf.c:4707
+#: readelf.c:5026
#, c-format
msgid " -h --file-header Display the ELF file header\n"
msgstr " -h --file-header Afficher l'en-tête du fichier ELF\n"
-#: readelf.c:4709
+#: readelf.c:5028
#, c-format
msgid " -l --program-headers Display the program headers\n"
msgstr " -l --program-headers Afficher les en-têtes du programme\n"
-#: readelf.c:4711
+#: readelf.c:5030
#, c-format
msgid " --segments An alias for --program-headers\n"
msgstr " --segments Un synonyme de --program-headers\n"
-#: readelf.c:4713
+#: readelf.c:5032
#, c-format
msgid " -S --section-headers Display the sections' header\n"
msgstr " -S --section-headers Afficher les en-têtes des sections\n"
-#: readelf.c:4715
+#: readelf.c:5034
#, c-format
msgid " --sections An alias for --section-headers\n"
msgstr " --sections Un synonyme de --section-headers\n"
-#: readelf.c:4717
+#: readelf.c:5036
#, c-format
msgid " -g --section-groups Display the section groups\n"
msgstr " -g --section-groups Afficher les groupes de sections\n"
-#: readelf.c:4719
+#: readelf.c:5038
#, c-format
msgid " -t --section-details Display the section details\n"
msgstr " -t --section-details Afficher les détails des sections\n"
-#: readelf.c:4721
+#: readelf.c:5040
#, c-format
msgid " -e --headers Equivalent to: -h -l -S\n"
msgstr " -e --headers Équivalent à : -h -l -S\n"
-#: readelf.c:4723
+#: readelf.c:5042
#, c-format
msgid " -s --syms Display the symbol table\n"
msgstr " -s --syms Afficher la table des symboles\n"
-#: readelf.c:4725
+#: readelf.c:5044
#, c-format
msgid " --symbols An alias for --syms\n"
msgstr " --symbols Un synonyme pour --syms\n"
-#: readelf.c:4727
+#: readelf.c:5046
#, c-format
msgid " --dyn-syms Display the dynamic symbol table\n"
msgstr " --dyn-syms Afficher la table des symboles dynamiques\n"
-#: readelf.c:4729
+#: readelf.c:5048
#, c-format
msgid " --lto-syms Display LTO symbol tables\n"
msgstr " --lto-syms Afficher les tables des symboles LTO\n"
-#: readelf.c:4731
+#: readelf.c:5050
#, c-format
msgid ""
" --sym-base=[0|8|10|16] \n"
@@ -7709,76 +7870,82 @@ msgstr ""
" Forcer la base pour les tailles des symboles. Les options sont\n"
" mixte (par défaut), octal, décimal, hexadécimal.\n"
-#: readelf.c:4735
+#: readelf.c:5054
#, c-format
-msgid ""
-" -C --demangle[=STYLE] Decode low-level symbol names into user-level names\n"
-" The STYLE, if specified, can be `auto' (the default),\n"
-" `gnu', `lucid', `arm', `hp', `edg', `gnu-v3', `java'\n"
-" or `gnat'\n"
-msgstr ""
-" -C --demangle[=STYLE] Décoder les noms des symboles bas niveau en des noms\n"
-" du niveau utilisateur.\n"
-" Le STYLE, si précisé, peut être « auto » (par défaut),\n"
-" « gnu », « lucid », « arm », « hp », « edg », « gnu-v3 »,\n"
-" « java » ou « gnat »\n"
+msgid " -C --demangle[=STYLE] Decode mangled/processed symbol names\n"
+msgstr " -C --demangle[=STYLE] Décoder les noms des symboles décorés/traités\n"
-#: readelf.c:4740
+#: readelf.c:5058
#, c-format
msgid " --no-demangle Do not demangle low-level symbol names. (default)\n"
msgstr " --no-demangle Ne pas retirer les décorations des noms des symboles bas niveau. (par défaut)\n"
-#: readelf.c:4742
+#: readelf.c:5060
#, c-format
msgid " --recurse-limit Enable a demangling recursion limit. (default)\n"
msgstr " --recurse-limit Activer une limite sur la récursivité de la suppression des décorations. (par défaut)\n"
-#: readelf.c:4744
+#: readelf.c:5062
#, c-format
msgid " --no-recurse-limit Disable a demangling recursion limit\n"
msgstr " --no-recurse-limit Désactiver la limite sur la récursivité de la suppression des décorations\n"
-#: readelf.c:4746
+#: readelf.c:5064
+#, c-format
+msgid ""
+" -U[dlexhi] --unicode=[default|locale|escape|hex|highlight|invalid]\n"
+" Display unicode characters as determined by the current locale\n"
+" (default), escape sequences, \"<hex sequences>\", highlighted\n"
+" escape sequences, or treat them as invalid and display as\n"
+" \"{hex sequences}\"\n"
+msgstr ""
+" -U[dlexhi] --unicode=[default|locale|escape|hex|highlight|invalid]\n"
+" Afficher les caractères unicode selon les paramètres linguistiques actuels\n"
+" (par défaut), des séquences d'échappement, « <séquence hex> », des séquences\n"
+" d'échappement mises en évidence ou les traiter comme étant invalides\n"
+" et les afficher sous la forme « {séquence hex} »\n"
+
+#: readelf.c:5070
#, c-format
msgid " -n --notes Display the core notes (if present)\n"
msgstr " -n --notes Afficher les notes du noyau (si présentes)\n"
-#: readelf.c:4748
+#: readelf.c:5072
#, c-format
msgid " -r --relocs Display the relocations (if present)\n"
msgstr " -r --relocs Afficher les réadressages (si présents)\n"
-#: readelf.c:4750
+#: readelf.c:5074
#, c-format
msgid " -u --unwind Display the unwind info (if present)\n"
msgstr " -u --unwind Afficher les infos de déroulement (si présentes)\n"
-#: readelf.c:4752
+#: readelf.c:5076
#, c-format
msgid " -d --dynamic Display the dynamic section (if present)\n"
msgstr " -d --dynamic Afficher la section dynamique (si présente)\n"
-#: readelf.c:4754
+#: readelf.c:5078
#, c-format
msgid " -V --version-info Display the version sections (if present)\n"
msgstr " -V --version-info Afficher les sections de version (si présentes)\n"
-#: readelf.c:4756
+#: readelf.c:5080
#, c-format
msgid " -A --arch-specific Display architecture specific information (if any)\n"
msgstr " -A --arch-specific Afficher les informations spécifiques à l'architecture (si disponible)\n"
-#: readelf.c:4758
+#: readelf.c:5082
#, c-format
msgid " -c --archive-index Display the symbol/file index in an archive\n"
msgstr " -c --archive-index Afficher l'index des symboles/fichiers dans une archive\n"
-#: readelf.c:4760
+#: readelf.c:5084
#, c-format
msgid " -D --use-dynamic Use the dynamic section info when displaying symbols\n"
msgstr " -D --use-dynamic Utiliser les informations de la section dynamique an affichant les symboles\n"
-#: readelf.c:4762
+#: readelf.c:5086
#, c-format
msgid ""
" -L --lint|--enable-checks\n"
@@ -7787,7 +7954,7 @@ msgstr ""
" -L --lint|--enable-checks\n"
" Afficher des messages d'avertissement pour les problèmes potentiels\n"
-#: readelf.c:4765
+#: readelf.c:5089
#, c-format
msgid ""
" -x --hex-dump=<number|name>\n"
@@ -7796,7 +7963,7 @@ msgstr ""
" -x --hex-dump=<numéro|nom>\n"
" Vidanger le contenu de la section <numéro|nom> sous forme d'octets\n"
-#: readelf.c:4768
+#: readelf.c:5092
#, c-format
msgid ""
" -p --string-dump=<number|name>\n"
@@ -7805,7 +7972,7 @@ msgstr ""
" -p --string-dump=<numéro|nom>\n"
" Vidanger le contenu de la section <numéro|nom> sous forme de chaîne de caractères\n"
-#: readelf.c:4771
+#: readelf.c:5095
#, c-format
msgid ""
" -R --relocated-dump=<number|name>\n"
@@ -7814,12 +7981,12 @@ msgstr ""
" -R --relocated-dump=<numéro|nom>\n"
" Vidanger le contenu réadressé de la section <numéro|nom>\n"
-#: readelf.c:4774
+#: readelf.c:5098
#, c-format
msgid " -z --decompress Decompress section before dumping it\n"
msgstr " -z --decompress Décompresser la section avant de la vidanger\n"
-#: readelf.c:4776
+#: readelf.c:5100
#, c-format
msgid ""
" -w --debug-dump[a/=abbrev, A/=addr, r/=aranges, c/=cu_index, L/=decodedline,\n"
@@ -7836,7 +8003,7 @@ msgstr ""
" U/=trace_info]\n"
" Afficher le contenu des sections de débogage DWARF\n"
-#: readelf.c:4783
+#: readelf.c:5107
#, c-format
msgid ""
" -wk --debug-dump=links Display the contents of sections that link to separate\n"
@@ -7845,7 +8012,7 @@ msgstr ""
" -wk --debug-dump=links Afficher le contenu des sections qui sont liées à des\n"
" fichiers debuginfo séparés\n"
-#: readelf.c:4786
+#: readelf.c:5110
#, c-format
msgid ""
" -P --process-links Display the contents of non-debug sections in separate\n"
@@ -7854,7 +8021,7 @@ msgstr ""
" -P --process-links Afficher le contenu des sections pas pour le débogage dans des\n"
" fichiers debuginfo séparés. (Implique -wK)\n"
-#: readelf.c:4790
+#: readelf.c:5114
#, c-format
msgid ""
" -wK --debug-dump=follow-links\n"
@@ -7863,7 +8030,7 @@ msgstr ""
" -wK --debug-dump=follow-links\n"
" Suivre les liens vers des fichiers d'informations de débogage séparés (par défaut)\n"
-#: readelf.c:4793
+#: readelf.c:5117
#, c-format
msgid ""
" -wN --debug-dump=no-follow-links\n"
@@ -7872,7 +8039,7 @@ msgstr ""
" -wN --debug-dump=no-follow-links\n"
" Ne pas suivre les liens vers les fichiers d'informations de débogage séparés\n"
-#: readelf.c:4797
+#: readelf.c:5121
#, c-format
msgid ""
" -wK --debug-dump=follow-links\n"
@@ -7881,7 +8048,7 @@ msgstr ""
" -wK --debug-dump=follow-links\n"
" Suivre les liens vers les fichiers d'information de débogage séparés\n"
-#: readelf.c:4800
+#: readelf.c:5124
#, c-format
msgid ""
" -wN --debug-dump=no-follow-links\n"
@@ -7892,31 +8059,27 @@ msgstr ""
" Ne pas suivre les liens vers les fichiers d'informations\n"
" de débogage (par défaut)\n"
-#: readelf.c:4805
+#: readelf.c:5129
#, c-format
msgid " --dwarf-depth=N Do not display DIEs at depth N or greater\n"
msgstr " --dwarf-depth=N Ne pas afficher DIE à la profondeur N ou plus grande\n"
-#: readelf.c:4807
+#: readelf.c:5131
#, c-format
msgid " --dwarf-start=N Display DIEs starting at offset N\n"
msgstr " --dwarf-start=N Afficher DIE à partir de l'offset N\n"
-#: readelf.c:4810
+#: readelf.c:5134
#, c-format
msgid " --ctf=<number|name> Display CTF info from section <number|name>\n"
msgstr " --ctf=<numéro|nom> Afficher les informations CTF de la section <numéro|nom>\n"
-#: readelf.c:4812
+#: readelf.c:5136
#, c-format
-msgid ""
-" --ctf-parent=<number|name>\n"
-" Use section <number|name> as the CTF parent\n"
-msgstr ""
-" --ctf-parent=<numéro|nom>\n"
-" Utiliser la section <numéro|nom> comme parent CTF\n"
+msgid " --ctf-parent=<name> Use CTF archive member <name> as the CTF parent\n"
+msgstr " --ctf-parent=<nom> Utiliser le membre de l'archive CTF nommé <nom> comme parent CTF\n"
-#: readelf.c:4815
+#: readelf.c:5138
#, c-format
msgid ""
" --ctf-symbols=<number|name>\n"
@@ -7925,7 +8088,7 @@ msgstr ""
" --ctf-symbols=<numéro|nom>\n"
" Utiliser la section <numéro|nom> comme symtab externe de CTF\n"
-#: readelf.c:4818
+#: readelf.c:5141
#, c-format
msgid ""
" --ctf-strings=<number|name>\n"
@@ -7934,7 +8097,7 @@ msgstr ""
" --ctf-strings=<numéro|nom>\n"
" Utiliser la section <numéro|nom> comme strtab externe de CTF\n"
-#: readelf.c:4824
+#: readelf.c:5147
#, c-format
msgid ""
" -i --instruction-dump=<number|name>\n"
@@ -7943,130 +8106,134 @@ msgstr ""
" -i --instruction-dump=<numéro|nom>\n"
" Désassembler le contenu de la section <numéro|nom>\n"
-#: readelf.c:4828
+#: readelf.c:5151
#, c-format
msgid " -I --histogram Display histogram of bucket list lengths\n"
msgstr " -I --histogram Afficher l'histogramme des longueurs des listes de baquets\n"
-#: readelf.c:4830
+#: readelf.c:5153
#, c-format
msgid " -W --wide Allow output width to exceed 80 characters\n"
msgstr " -W --wide Autoriser la largeur de la sortie au delà de 80 caractères\n"
-#: readelf.c:4832
+#: readelf.c:5155
#, c-format
msgid " -T --silent-truncation If a symbol name is truncated, do not add [...] suffix\n"
msgstr " -T --silent-truncation Si un nom de symbole est tronqué, ne pas ajouter le suffixe [...]\n"
-#: readelf.c:4834
+#: readelf.c:5157
#, c-format
msgid " @<file> Read options from <file>\n"
msgstr " @<fichier> Lire les options à partir du <fichier>\n"
-#: readelf.c:4836
+#: readelf.c:5159
#, c-format
msgid " -H --help Display this information\n"
msgstr " -H --help Afficher l'aide-mémoire\n"
-#: readelf.c:4838
+#: readelf.c:5161
#, c-format
msgid " -v --version Display the version number of readelf\n"
msgstr " -v --version Afficher le numéro de version de readelf\n"
-#: readelf.c:4864 readelf.c:4895 readelf.c:4899
+#: readelf.c:5187 readelf.c:5218 readelf.c:5222
msgid "Out of memory allocating dump request table.\n"
msgstr "Mémoire épuisée par l'allocation d'une table pour requêtes de vidange.\n"
-#: readelf.c:5155
+#: readelf.c:5458
+msgid "Missing arg to -U/--unicode"
+msgstr "Argument manquant à -U/--unicode"
+
+#: readelf.c:5497
#, c-format
msgid "Invalid option '-%c'\n"
msgstr "Option invalide « -%c »\n"
-#: readelf.c:5189 readelf.c:5205 readelf.c:11478
+#: readelf.c:5531 readelf.c:5547 readelf.c:11828
msgid "none"
msgstr "aucun"
-#: readelf.c:5206
+#: readelf.c:5548
msgid "2's complement, little endian"
msgstr "complément à 2, système à octets de poids faible d'abord (little endian)"
-#: readelf.c:5207
+#: readelf.c:5549
msgid "2's complement, big endian"
msgstr "complément à 2, système à octets de poids fort d'abord (big endian)"
-#: readelf.c:5227
+#: readelf.c:5569
msgid "Not an ELF file - it has the wrong magic bytes at the start\n"
msgstr "N'est pas un fichier ELF – a les mauvais octets magiques au départ\n"
-#: readelf.c:5239
+#: readelf.c:5581
#, c-format
msgid "ELF Header in linked file '%s':\n"
msgstr "En-tête ELF dans le fichier lié « %s » :\n"
-#: readelf.c:5241
+#: readelf.c:5583
#, c-format
msgid "ELF Header:\n"
msgstr "En-tête ELF:\n"
-#: readelf.c:5242
+#: readelf.c:5584
#, c-format
msgid " Magic: "
msgstr " Magique: "
-#: readelf.c:5246
+#: readelf.c:5588
#, c-format
msgid " Class: %s\n"
msgstr " Classe: %s\n"
-#: readelf.c:5248
+#: readelf.c:5590
#, c-format
msgid " Data: %s\n"
msgstr " Données: %s\n"
-#: readelf.c:5250
+#: readelf.c:5592
#, c-format
msgid " Version: %d%s\n"
msgstr " Version: %d%s\n"
-#: readelf.c:5253
+#: readelf.c:5595
msgid " (current)"
msgstr " (actuelle)"
-#: readelf.c:5255
+#: readelf.c:5597
msgid " <unknown>"
msgstr " <inconnu>"
-#: readelf.c:5257
+#: readelf.c:5599
#, c-format
msgid " OS/ABI: %s\n"
msgstr " OS/ABI: %s\n"
-#: readelf.c:5259
+#: readelf.c:5601
#, c-format
msgid " ABI Version: %d\n"
msgstr " Version ABI: %d\n"
-#: readelf.c:5261
+#: readelf.c:5603
#, c-format
msgid " Type: %s\n"
msgstr " Type: %s\n"
-#: readelf.c:5263
+#: readelf.c:5605
#, c-format
msgid " Machine: %s\n"
msgstr " Machine: %s\n"
-#: readelf.c:5265
+#: readelf.c:5607
#, c-format
msgid " Version: 0x%lx\n"
msgstr " Version: 0x%lx\n"
-#: readelf.c:5268
+#: readelf.c:5610
#, c-format
msgid " Entry point address: "
msgstr " Adresse du point d'entrée: "
-#: readelf.c:5270
+#: readelf.c:5612
#, c-format
msgid ""
"\n"
@@ -8075,7 +8242,7 @@ msgstr ""
"\n"
" Début des en-têtes de programme : "
-#: readelf.c:5272
+#: readelf.c:5614
#, c-format
msgid ""
" (bytes into file)\n"
@@ -8084,78 +8251,78 @@ msgstr ""
" (octets dans le fichier)\n"
" Début des en-têtes de section : "
-#: readelf.c:5274
+#: readelf.c:5616
#, c-format
msgid " (bytes into file)\n"
msgstr " (octets dans le fichier)\n"
-#: readelf.c:5276
+#: readelf.c:5618
#, c-format
msgid " Flags: 0x%lx%s\n"
msgstr " Fanions: 0x%lx%s\n"
-#: readelf.c:5279
+#: readelf.c:5621
#, c-format
msgid " Size of this header: %u (bytes)\n"
msgstr " Taille de cet en-tête: %u (octets)\n"
-#: readelf.c:5281
+#: readelf.c:5623
#, c-format
msgid " Size of program headers: %u (bytes)\n"
msgstr " Taille de l'en-tête du programme: %u (octets)\n"
-#: readelf.c:5283
+#: readelf.c:5625
#, c-format
msgid " Number of program headers: %u"
msgstr " Nombre d'en-tête du programme: %u"
-#: readelf.c:5293
+#: readelf.c:5635
#, c-format
msgid " Size of section headers: %u (bytes)\n"
msgstr " Taille des en-têtes de section: %u (octets)\n"
-#: readelf.c:5295
+#: readelf.c:5637
#, c-format
msgid " Number of section headers: %u"
msgstr " Nombre d'en-têtes de section: %u"
-#: readelf.c:5303
+#: readelf.c:5645
#, c-format
msgid " Section header string table index: %u"
msgstr " Table d'index des chaînes d'en-tête de section: %u"
-#: readelf.c:5315
+#: readelf.c:5657
#, c-format
msgid " <corrupt: out of range>"
msgstr " <corrompu: hors limites>"
-#: readelf.c:5354 readelf.c:5401
+#: readelf.c:5696 readelf.c:5743
msgid "The e_phentsize field in the ELF header is less than the size of an ELF program header\n"
msgstr "Le champ e_phentsize dans l'en-tête ELF est plus petit que la taille d'un en-tête de programme ELF\n"
-#: readelf.c:5358 readelf.c:5405
+#: readelf.c:5700 readelf.c:5747
msgid "The e_phentsize field in the ELF header is larger than the size of an ELF program header\n"
msgstr "Le champ e_phentsize dans l'en-tête ELF est plus grand que la taille d'un en-tête de programme ELF\n"
-#: readelf.c:5361 readelf.c:5408
+#: readelf.c:5703 readelf.c:5750
msgid "program headers"
msgstr "En-têtes de programme"
-#: readelf.c:5447
+#: readelf.c:5789
#, c-format
msgid "Too many program headers - %#x - the file is not that big\n"
msgstr "Trop d'en-têtes de programme — %#x — le fichier n'est pas si grand\n"
-#: readelf.c:5456
+#: readelf.c:5798
#, c-format
msgid "Out of memory reading %u program headers\n"
msgstr "Mémoire épuisée lors de la lecture de %u en-têtes de programme\n"
-#: readelf.c:5486
+#: readelf.c:5828
msgid "possibly corrupt ELF header - it has a non-zero program header offset, but no program headers\n"
msgstr "en-tête ELF peut-être endommagé – il a un offset non nul pour l'en-tête du programme mais pas d'en-tête de programme\n"
-#: readelf.c:5491
+#: readelf.c:5833
#, c-format
msgid ""
"\n"
@@ -8164,7 +8331,7 @@ msgstr ""
"\n"
"Il n'y a pas d'en-têtes de programme dans le fichier lié « %s ».\n"
-#: readelf.c:5494
+#: readelf.c:5836
#, c-format
msgid ""
"\n"
@@ -8173,7 +8340,7 @@ msgstr ""
"\n"
"Il n'y a pas d'en-têtes de programme dans ce fichier.\n"
-#: readelf.c:5505
+#: readelf.c:5847
#, c-format
msgid ""
"\n"
@@ -8182,19 +8349,19 @@ msgstr ""
"\n"
"Type de fichier ELF est %s\n"
-#: readelf.c:5506
+#: readelf.c:5848
#, c-format
msgid "Entry point 0x%s\n"
msgstr "Point d'entrée 0x%s\n"
-#: readelf.c:5507
+#: readelf.c:5849
#, c-format
msgid "There is %d program header, starting at offset %s\n"
msgid_plural "There are %d program headers, starting at offset %s\n"
msgstr[0] "Il y a %d en-tête de programme, débutant à l'adresse de décalage %s\n"
msgstr[1] "Il y a %d en-têtes de programme, débutant à l'adresse de décalage %s\n"
-#: readelf.c:5520 readelf.c:5522
+#: readelf.c:5862 readelf.c:5864
#, c-format
msgid ""
"\n"
@@ -8203,68 +8370,68 @@ msgstr ""
"\n"
"En-têtes de programme :\n"
-#: readelf.c:5526
+#: readelf.c:5868
#, c-format
msgid " Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align\n"
msgstr " Type Décalage Adr. vir. Adr.phys. T.Fich. T.Mém. Fan Alignement\n"
-#: readelf.c:5529
+#: readelf.c:5871
#, c-format
msgid " Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align\n"
msgstr " Type Décalage Adr. vir. Adr.phys. T.Fich. T.Mém. Fan Alignement\n"
-#: readelf.c:5533
+#: readelf.c:5875
#, c-format
msgid " Type Offset VirtAddr PhysAddr\n"
msgstr " Type Décalage Adr.virt Adr.phys.\n"
-#: readelf.c:5535
+#: readelf.c:5877
#, c-format
msgid " FileSiz MemSiz Flags Align\n"
msgstr " Taille fichier Taille mémoire Fanion Alignement\n"
-#: readelf.c:5633
+#: readelf.c:5975
msgid "LOAD segments must be sorted in order of increasing VirtAddr\n"
msgstr "les segments LOAD doivent être triés dans l'ordre croissant de VirtAddr\n"
-#: readelf.c:5636
+#: readelf.c:5978
msgid "the segment's file size is larger than its memory size\n"
msgstr "la taille du segment du fichier est plus grande que sa taille mémoire\n"
-#: readelf.c:5643
+#: readelf.c:5985
msgid "the PHDR segment must occur before any LOAD segment\n"
msgstr "Le segment PHDR doit apparaître avant tout segment LOAD\n"
-#: readelf.c:5661
+#: readelf.c:6003
msgid "the PHDR segment is not covered by a LOAD segment\n"
msgstr "le segment PHDR n'est pas couvert par un segment LOAD\n"
-#: readelf.c:5667
+#: readelf.c:6009
msgid "more than one dynamic segment\n"
msgstr "plus d'un segment dynamique\n"
-#: readelf.c:5686
+#: readelf.c:6028
msgid "no .dynamic section in the dynamic segment\n"
msgstr "pas de section .dynamic dans le segment dynamique\n"
-#: readelf.c:5705
+#: readelf.c:6047
msgid "the .dynamic section is not the same as the dynamic segment\n"
msgstr "la section .dynamic n'est pas la même que le segment dynamique\n"
-#: readelf.c:5716
+#: readelf.c:6058
msgid "the dynamic segment offset + size exceeds the size of the file\n"
msgstr "le décalage de segment dynamique + taille dépasse la taille du fichier\n"
-#: readelf.c:5729
+#: readelf.c:6071
msgid "Unable to find program interpreter name\n"
msgstr "Incapable de repérer le nom de l'interpréteur du programme\n"
-#: readelf.c:5740
+#: readelf.c:6082
#, c-format
msgid " [Requesting program interpreter: %s]\n"
msgstr " [Réquisition de l'interpréteur de programme: %s]\n"
-#: readelf.c:5751
+#: readelf.c:6093
#, c-format
msgid ""
"\n"
@@ -8273,102 +8440,102 @@ msgstr ""
"\n"
" Correspondance section/segment :\n"
-#: readelf.c:5752
+#: readelf.c:6094
#, c-format
msgid " Segment Sections...\n"
msgstr " Sections de segment...\n"
-#: readelf.c:5794 readelf.c:10759
+#: readelf.c:6136 readelf.c:11113
msgid "Cannot interpret virtual addresses without program headers.\n"
msgstr "Ne peut interpréter les adresses virtuelles sans l'en-tête du programme.\n"
-#: readelf.c:5810
+#: readelf.c:6152
#, c-format
msgid "Virtual address 0x%lx not located in any PT_LOAD segment.\n"
msgstr "L'adresse virtuelle 0x%lx ne peut être localisé dans aucun segment PT_LOAD.\n"
-#: readelf.c:5835 readelf.c:5899
+#: readelf.c:6177 readelf.c:6241
msgid "The e_shentsize field in the ELF header is less than the size of an ELF section header\n"
msgstr "Le champ e_shentsize dans l'en-tête ELF est plus petit que la taille d'un en-tête de section ELF\n"
-#: readelf.c:5839 readelf.c:5904
+#: readelf.c:6181 readelf.c:6246
msgid "The e_shentsize field in the ELF header is larger than the size of an ELF section header\n"
msgstr "Le champ e_shentsize dans l'en-tête ELF est plus grand que la taille d'un en-tête de section ELF\n"
-#: readelf.c:5843 readelf.c:5909
+#: readelf.c:6185 readelf.c:6251
msgid "section headers"
msgstr "En-têtes de section"
-#: readelf.c:5852 readelf.c:5918
+#: readelf.c:6194 readelf.c:6260
#, c-format
msgid "Out of memory reading %u section headers\n"
msgstr "Mémoire épuisée lors de la lecture de %u en-têtes de section\n"
-#: readelf.c:5872 readelf.c:5938
+#: readelf.c:6214 readelf.c:6280
#, c-format
msgid "Section %u has an out of range sh_link value of %u\n"
msgstr "La section %u a une valeur sh_link %u hors limite\n"
-#: readelf.c:5874 readelf.c:5940
+#: readelf.c:6216 readelf.c:6282
#, c-format
msgid "Section %u has an out of range sh_info value of %u\n"
msgstr "La section %u a une valeur sh_info %u hors limite\n"
-#: readelf.c:5982 readelf.c:6099
+#: readelf.c:6324 readelf.c:6441
#, c-format
msgid "Section %s has an invalid sh_entsize of 0x%lx\n"
msgstr "La section %s a une sh_entsize de 0x%lx invalide\n"
-#: readelf.c:5990 readelf.c:6107 readelf.c:12767
+#: readelf.c:6332 readelf.c:6449 readelf.c:13146
#, c-format
msgid "Section %s has an invalid sh_size of 0x%lx\n"
msgstr "La section %s a une sh_size de 0x%lx invalide\n"
-#: readelf.c:6000 readelf.c:6117
+#: readelf.c:6342 readelf.c:6459
#, c-format
msgid "Size (0x%lx) of section %s is not a multiple of its sh_entsize (0x%lx)\n"
msgstr "La taille (0x%lx) de la section %s n'est pas un multiple de sa sh_entsize (0x%lx)\n"
-#: readelf.c:6008 readelf.c:6125 readelf.c:15196
+#: readelf.c:6350 readelf.c:6467 readelf.c:15575
msgid "symbols"
msgstr "symboles"
-#: readelf.c:6020 readelf.c:6137
+#: readelf.c:6362 readelf.c:6479
msgid "Multiple symbol table index sections associated with the same symbol section\n"
msgstr "Plusieurs sections d'index de tables de symboles associées avec la même section de symboles\n"
-#: readelf.c:6027 readelf.c:6144
+#: readelf.c:6369 readelf.c:6486
msgid "symbol table section indices"
msgstr "indices de section de la table des symboles"
-#: readelf.c:6034 readelf.c:6151
+#: readelf.c:6376 readelf.c:6493
#, c-format
msgid "Index section %s has an sh_size of 0x%lx - expected 0x%lx\n"
msgstr "La section d'index %s a une sh_size de 0x%lx — 0x%lx attendu\n"
-#: readelf.c:6046 readelf.c:6163
+#: readelf.c:6388 readelf.c:6505
#, c-format
msgid "Out of memory reading %lu symbols\n"
msgstr "Mémoire épuisée lors de la lecture de %lu symboles\n"
-#: readelf.c:6372 readelf.c:6469 readelf.c:6487 readelf.c:6505
+#: readelf.c:6714 readelf.c:6811 readelf.c:6829 readelf.c:6847
msgid "Internal error: not enough buffer room for section flag info"
msgstr "Erreur interne: pas assez d'espace tampon pour les info de fanions de section"
-#: readelf.c:6512
+#: readelf.c:6854
#, c-format
msgid "UNKNOWN (%*.*lx)"
msgstr "INCONNU (%*.*lx)"
-#: readelf.c:6531 readelf.c:6546
+#: readelf.c:6873 readelf.c:6888
msgid "Compressed section is too small even for a compression header\n"
msgstr "La section compressée est trop petite, même pour un en-tête de compression\n"
-#: readelf.c:6568
+#: readelf.c:6910
msgid "possibly corrupt ELF file header - it has a non-zero section header offset, but no section headers\n"
msgstr "en-tête ELF peut-être endommagé – il a un offset non nul pour l'en-tête de section mais pas d'en-tête de section\n"
-#: readelf.c:6573
+#: readelf.c:6915
#, c-format
msgid ""
"\n"
@@ -8377,57 +8544,57 @@ msgstr ""
"\n"
"Il n'y a pas de section dans ce fichier.\n"
-#: readelf.c:6581 readelf.c:20805
+#: readelf.c:6923 readelf.c:21262
#, c-format
msgid "In linked file '%s': "
msgstr "Dans le fichier lié « %s » : "
-#: readelf.c:6583
+#: readelf.c:6925
#, c-format
msgid "There is %d section header, starting at offset 0x%lx:\n"
msgid_plural "There are %d section headers, starting at offset 0x%lx:\n"
msgstr[0] "Il y a %d en-tête de section, débutant à l'adresse de décalage 0x%lx:\n"
msgstr[1] "Il y a %d en-têtes de section, débutant à l'adresse de décalage 0x%lx:\n"
-#: readelf.c:6605 readelf.c:7278 readelf.c:7479 readelf.c:13054
-#: readelf.c:15585
+#: readelf.c:6947 readelf.c:7624 readelf.c:7826 readelf.c:13434
+#: readelf.c:15933
msgid "string table"
msgstr "table de chaînes"
#. Note: coded this way so that there is a single string for translation.
-#: readelf.c:6671
+#: readelf.c:7013
#, c-format
msgid "Section %d has invalid sh_entsize of %s\n"
msgstr "La section %d a une sh_entsize de %s invalide\n"
-#: readelf.c:6672
+#: readelf.c:7014
#, c-format
msgid "(Using the expected size of %u for the rest of this dump)\n"
msgstr "(Utilise la taille attendue %u pour le reste de cette vidange)\n"
-#: readelf.c:6696
+#: readelf.c:7038
msgid "File contains multiple dynamic symbol tables\n"
msgstr "Le fichier contient plusieurs tables dynamiques de symboles\n"
-#: readelf.c:6711
+#: readelf.c:7053
msgid "File contains multiple dynamic string tables\n"
msgstr "Le fichier contient plusieurs tables de chaînes dynamiques\n"
-#: readelf.c:6717
+#: readelf.c:7059
msgid "dynamic strings"
msgstr "chaînes dynamiques"
-#: readelf.c:6745 readelf.c:6751
+#: readelf.c:7087 readelf.c:7093
#, c-format
msgid "Section '%s': zero-sized relocation section\n"
msgstr "Section « %s »: section de réadressage avec une taille nulle\n"
-#: readelf.c:6760
+#: readelf.c:7106
#, c-format
msgid "Section '%s': has a size of zero - is this intended ?\n"
msgstr "Section « %s »: a une taille nulle – est-ce voulu ?\n"
-#: readelf.c:6844
+#: readelf.c:7190
#, c-format
msgid ""
"\n"
@@ -8436,7 +8603,7 @@ msgstr ""
"\n"
"En-têtes de section dans le fichier lié « %s » :\n"
-#: readelf.c:6846
+#: readelf.c:7192
#, c-format
msgid ""
"\n"
@@ -8445,7 +8612,7 @@ msgstr ""
"\n"
"En-têtes de section :\n"
-#: readelf.c:6848
+#: readelf.c:7194
#, c-format
msgid ""
"\n"
@@ -8454,106 +8621,106 @@ msgstr ""
"\n"
"En-têtes de section :\n"
-#: readelf.c:6854 readelf.c:6865 readelf.c:6876
+#: readelf.c:7200 readelf.c:7211 readelf.c:7222
#, c-format
msgid " [Nr] Name\n"
msgstr " [Nr] Nom\n"
-#: readelf.c:6855
+#: readelf.c:7201
#, c-format
msgid " Type Addr Off Size ES Lk Inf Al\n"
msgstr " Type Adr Décala.Taille ES LN Inf Al\n"
-#: readelf.c:6859
+#: readelf.c:7205
#, c-format
msgid " [Nr] Name Type Addr Off Size ES Flg Lk Inf Al\n"
msgstr " [Nr] Nom Type Adr Décala.Taille ES Fan LN Inf Al\n"
-#: readelf.c:6866
+#: readelf.c:7212
#, c-format
msgid " Type Address Off Size ES Lk Inf Al\n"
msgstr " Type Adresse Décala.Taille ES LN Inf Al\n"
-#: readelf.c:6870
+#: readelf.c:7216
#, c-format
msgid " [Nr] Name Type Address Off Size ES Flg Lk Inf Al\n"
msgstr " [Nr] Nom Type Adr Décala.Taille ES Fan LN Inf Al\n"
-#: readelf.c:6877
+#: readelf.c:7223
#, c-format
msgid " Type Address Offset Link\n"
msgstr " Type Adresse Décalage Lien\n"
-#: readelf.c:6878
+#: readelf.c:7224
#, c-format
msgid " Size EntSize Info Align\n"
msgstr " Taille TaillEntrée Info Alignement\n"
-#: readelf.c:6882
+#: readelf.c:7228
#, c-format
msgid " [Nr] Name Type Address Offset\n"
msgstr " [Nr] Nom Type Adresse Décalage\n"
-#: readelf.c:6883
+#: readelf.c:7229
#, c-format
msgid " Size EntSize Flags Link Info Align\n"
msgstr " Taille TaillEntrée Fanion Lien Info Alignement\n"
-#: readelf.c:6888
+#: readelf.c:7234
#, c-format
msgid " Flags\n"
msgstr " Fanions\n"
-#: readelf.c:6917
+#: readelf.c:7263
#, c-format
msgid "[%2u]: Link field (%u) should index a symtab section.\n"
msgstr "[%2u]: Le champ de liaison (%u) devrait indexer une section symtab.\n"
-#: readelf.c:6930
+#: readelf.c:7276
#, c-format
msgid "[%2u]: Link field (%u) should index a string section.\n"
msgstr "[%2u]: Le champ de liaison (%u) devrait indexer une section de chaînes.\n"
-#: readelf.c:6938 readelf.c:6949
+#: readelf.c:7284 readelf.c:7295
#, c-format
msgid "[%2u]: Unexpected value (%u) in link field.\n"
msgstr "[%2u]: Valeur (%u) inattendue dans le champ de liaison.\n"
-#: readelf.c:6976
+#: readelf.c:7322
#, c-format
msgid "[%2u]: Info field (%u) should index a relocatable section.\n"
msgstr "[%2u]: Le champ d'info (%u) devrait indexer une section réadressable.\n"
-#: readelf.c:6987 readelf.c:7014
+#: readelf.c:7333 readelf.c:7360
#, c-format
msgid "[%2u]: Unexpected value (%u) in info field.\n"
msgstr "[%2u]: Valeur (%u) inattendue dans le champ d'info.\n"
-#: readelf.c:7009
+#: readelf.c:7355
#, c-format
msgid "[%2u]: Expected link to another section in info field"
msgstr "[%2u]: Lien inattendu vers une autre section dans un champ d'info"
-#: readelf.c:7024
+#: readelf.c:7370
#, c-format
msgid "Size of section %u is larger than the entire file!\n"
msgstr "La taille de la section %u est plus grande que le fichier entier !\n"
-#: readelf.c:7093
+#: readelf.c:7439
#, c-format
msgid "section %u: sh_link value of %u is larger than the number of sections\n"
msgstr "section %u: la valeur %u de sh_link est plus grande que le nombre de sections\n"
-#: readelf.c:7194
+#: readelf.c:7540
msgid "compression header"
msgstr "en-tête de compression"
-#: readelf.c:7199
+#: readelf.c:7545
#, c-format
msgid " [<corrupt>]\n"
msgstr " [<corrompu>]\n"
-#: readelf.c:7205
+#: readelf.c:7551
#, c-format
msgid " [<unknown>: 0x%x], "
msgstr " [<inconnu>: 0x%x], "
@@ -8561,7 +8728,7 @@ msgstr " [<inconnu>: 0x%x], "
#. The ordering of the letters shown here matches the ordering of the
#. corresponding SHF_xxx values, and hence the order in which these
#. letters will be displayed to the user.
-#: readelf.c:7220
+#: readelf.c:7566
#, c-format
msgid ""
"Key to Flags:\n"
@@ -8576,44 +8743,44 @@ msgstr ""
" T (TLS), C (compressé), x (inconnu), o (spécifique à l'OS), E (exclu),\n"
" "
-#: readelf.c:7228
+#: readelf.c:7574
#, c-format
msgid "R (retain), "
msgstr "R (retain), "
-#: readelf.c:7231
+#: readelf.c:7577
#, c-format
msgid "D (mbind), "
msgstr "D (mbind), "
-#: readelf.c:7239
+#: readelf.c:7585
#, c-format
msgid "l (large), "
msgstr "l (grand), "
-#: readelf.c:7241
+#: readelf.c:7587
#, c-format
msgid "y (purecode), "
msgstr "y (purecode), "
-#: readelf.c:7243
+#: readelf.c:7589
#, c-format
msgid "v (VLE), "
msgstr "v (VLE), "
-#: readelf.c:7268
+#: readelf.c:7614
msgid "Bad sh_link in symbol table section\n"
msgstr "sh_link erroné dans la section de la table des symboles\n"
-#: readelf.c:7303
+#: readelf.c:7649
msgid "<OS specific>"
msgstr "<spécificités du système d'exploitation>"
-#: readelf.c:7304
+#: readelf.c:7650
msgid "<PROC specific>"
msgstr "<spécificités du PROC>"
-#: readelf.c:7333
+#: readelf.c:7679
#, c-format
msgid ""
"\n"
@@ -8622,7 +8789,7 @@ msgstr ""
"\n"
"Il n'y a pas de groupe de sections dans le fichier lié « %s ».\n"
-#: readelf.c:7336 readelf.c:7375
+#: readelf.c:7682 readelf.c:7721
#, c-format
msgid ""
"\n"
@@ -8631,16 +8798,16 @@ msgstr ""
"\n"
"Il n'y a pas de groupe de section dans ce fichier.\n"
-#: readelf.c:7343
+#: readelf.c:7689
msgid "Section headers are not available!\n"
msgstr "En-têtes de section ne sont pas disponibles !\n"
-#: readelf.c:7354
+#: readelf.c:7700
#, c-format
msgid "Out of memory reading %u section group headers\n"
msgstr "Mémoire épuisée lors de la lecture de %u en-têtes de groupes de sections\n"
-#: readelf.c:7372
+#: readelf.c:7718
#, c-format
msgid ""
"\n"
@@ -8649,41 +8816,41 @@ msgstr ""
"\n"
"Il n'y a pas de groupes de sections dans le fichier lié « %s ».\n"
-#: readelf.c:7386
+#: readelf.c:7732
#, c-format
msgid "Out of memory reading %lu groups\n"
msgstr "Mémoire épuisée lors de la lecture de %lu groups\n"
-#: readelf.c:7399
+#: readelf.c:7745
#, c-format
msgid "Section groups in linked file '%s'\n"
msgstr "Groupes de sections dans le fichier lié « %s »\n"
-#: readelf.c:7420
+#: readelf.c:7766
#, c-format
msgid "Bad sh_link in group section `%s'\n"
msgstr "sh_link erroné dans la section de groupe « %s »\n"
-#: readelf.c:7433
+#: readelf.c:7779
#, c-format
msgid "Corrupt header in group section `%s'\n"
msgstr "En-tête corrompu dans la section de groupe « %s »\n"
-#: readelf.c:7439 readelf.c:7450
+#: readelf.c:7785 readelf.c:7796
#, c-format
msgid "Bad sh_info in group section `%s'\n"
msgstr "sh_info erroné dans la section de groupe « %s »\n"
-#: readelf.c:7489
+#: readelf.c:7836
#, c-format
msgid "Section %s has sh_entsize (0x%lx) which is larger than its size (0x%lx)\n"
msgstr "La section %s a un sh_entsize (0x%lx) qui est plus grand que sa taille (0x%lx)\n"
-#: readelf.c:7498
+#: readelf.c:7845
msgid "section data"
msgstr "données de section"
-#: readelf.c:7509
+#: readelf.c:7856
#, c-format
msgid ""
"\n"
@@ -8692,44 +8859,44 @@ msgstr ""
"\n"
"%sgroupe section [%5u] « %s » [%s] contient %u sections :\n"
-#: readelf.c:7512
+#: readelf.c:7859
#, c-format
msgid " [Index] Name\n"
msgstr " [Index] Nom\n"
-#: readelf.c:7530
+#: readelf.c:7877
#, c-format
msgid "section [%5u] in group section [%5u] > maximum section [%5u]\n"
msgstr "section [%5u] est dans le groupe section [%5u] > que le maximum de la section [%5u]\n"
-#: readelf.c:7533
+#: readelf.c:7880
msgid "Further error messages about overlarge group section indices suppressed\n"
msgstr "Les messages d'erreurs à venir à propos d'indices de section de groupes démesurés sont supprimés\n"
-#: readelf.c:7546
+#: readelf.c:7893
#, c-format
msgid "section [%5u] in group section [%5u] already in group section [%5u]\n"
msgstr "section [%5u] est dans le groupe section [%5u] qui est déjà dans le groupe section [%5u]\n"
-#: readelf.c:7550
+#: readelf.c:7897
msgid "Further error messages about already contained group sections suppressed\n"
msgstr "Les messages d'erreurs à venir à propos des sections de groupes déjà contenues sont supprimés\n"
-#: readelf.c:7562
+#: readelf.c:7909
#, c-format
msgid "section 0 in group section [%5u]\n"
msgstr "section 0 dans le groupe section [%5u]\n"
-#: readelf.c:7629
+#: readelf.c:7976
msgid "dynamic section image fixups"
msgstr "embellissement de l'image de section dynamique"
-#: readelf.c:7637
+#: readelf.c:7984
#, c-format
msgid "corrupt library name index of 0x%lx found in dynamic entry"
msgstr "un index de nom de bibliothèque (0x%lx) corrompu a été rencontré dans l'entrée dynamique"
-#: readelf.c:7642
+#: readelf.c:7989
#, c-format
msgid ""
"\n"
@@ -8738,16 +8905,16 @@ msgstr ""
"\n"
"Embellissement de l'image pour la bibliothèque requise #%d: %s - ident: %lx\n"
-#: readelf.c:7645
+#: readelf.c:7992
#, c-format
msgid "Seg Offset Type SymVec DataType\n"
msgstr "Seg Offset Type VecSym TypeDonnées\n"
-#: readelf.c:7679
+#: readelf.c:8026
msgid "dynamic section image relocations"
msgstr "réadressages de l'image de la section dynamique"
-#: readelf.c:7683
+#: readelf.c:8030
#, c-format
msgid ""
"\n"
@@ -8756,16 +8923,16 @@ msgstr ""
"\n"
"Relocalisations d'image\n"
-#: readelf.c:7685
+#: readelf.c:8032
#, c-format
msgid "Seg Offset Type Addend Seg Sym Off\n"
msgstr "Seg Offset Type Ajoute Seg Sym Off\n"
-#: readelf.c:7742
+#: readelf.c:8089
msgid "dynamic string section"
msgstr "section de chaînes dynamiques"
-#: readelf.c:7845
+#: readelf.c:8193
#, c-format
msgid ""
"\n"
@@ -8774,7 +8941,7 @@ msgstr ""
"\n"
"Dans le fichier lié « %s », la section « %s » à l'offset 0x%lx contient %ld octets :\n"
-#: readelf.c:7849
+#: readelf.c:8197
#, c-format
msgid ""
"\n"
@@ -8783,7 +8950,7 @@ msgstr ""
"\n"
"section de réadressage « %s » à l'adresse de décalage 0x%lx contient %ld octets:\n"
-#: readelf.c:7870
+#: readelf.c:8218
#, c-format
msgid ""
"\n"
@@ -8792,7 +8959,7 @@ msgstr ""
"\n"
"Il n'y a pas de réadressages dynamiques dans le fichier lié « %s ».\n"
-#: readelf.c:7873
+#: readelf.c:8221
#, c-format
msgid ""
"\n"
@@ -8801,7 +8968,7 @@ msgstr ""
"\n"
"Il n'y a pas d'informations de réadressage dynamique dans ce fichier.\n"
-#: readelf.c:7899
+#: readelf.c:8248
#, c-format
msgid ""
"\n"
@@ -8810,7 +8977,7 @@ msgstr ""
"\n"
"Dans le fichier lié « %s » section de réadressage "
-#: readelf.c:7902
+#: readelf.c:8251
#, c-format
msgid ""
"\n"
@@ -8819,14 +8986,14 @@ msgstr ""
"\n"
"Section de réadressage "
-#: readelf.c:7910
+#: readelf.c:8259
#, c-format
msgid " at offset 0x%lx contains %lu entry:\n"
msgid_plural " at offset 0x%lx contains %lu entries:\n"
msgstr[0] " à l'adresse de décalage 0x%lx contient %lu entrée:\n"
msgstr[1] " à l'adresse de décalage 0x%lx contient %lu entrées:\n"
-#: readelf.c:7959
+#: readelf.c:8308
#, c-format
msgid ""
"\n"
@@ -8835,7 +9002,7 @@ msgstr ""
"\n"
"Il n'y a pas de réadressages statiques dans le fichier lié « %s »."
-#: readelf.c:7962
+#: readelf.c:8311
#, c-format
msgid ""
"\n"
@@ -8844,7 +9011,7 @@ msgstr ""
"\n"
"Il n'y a pas d'informations de réadressage statique dans ce fichier."
-#: readelf.c:7963
+#: readelf.c:8312
#, c-format
msgid ""
"\n"
@@ -8853,7 +9020,7 @@ msgstr ""
"\n"
"Pour voir les réadressages dynamiques, ajoutez --use-dynamic à la ligne de commande.\n"
-#: readelf.c:7971
+#: readelf.c:8320
#, c-format
msgid ""
"\n"
@@ -8862,7 +9029,7 @@ msgstr ""
"\n"
"Il n'y a pas de réadressages dans le fichier lié « %s ».\n"
-#: readelf.c:7974
+#: readelf.c:8323
#, c-format
msgid ""
"\n"
@@ -8871,50 +9038,50 @@ msgstr ""
"\n"
"Il n'y a pas de réadressages dans ce fichier.\n"
-#: readelf.c:8142
+#: readelf.c:8491
#, c-format
msgid "Invalid section %u in table entry %ld\n"
msgstr "Section %u invalide dans l'entrée %ld de la table\n"
-#: readelf.c:8154
+#: readelf.c:8503
#, c-format
msgid "Invalid offset %lx in table entry %ld\n"
msgstr "Décalage %lx invalide dans l'entrée %ld de la table\n"
-#: readelf.c:8172
+#: readelf.c:8521
#, c-format
msgid "\tUnknown version.\n"
msgstr "\tVersion inconnue.\n"
-#: readelf.c:8235 readelf.c:8669
+#: readelf.c:8584 readelf.c:9021
msgid "unwind table"
msgstr "table de déroulage"
-#: readelf.c:8286 readelf.c:8752
+#: readelf.c:8635 readelf.c:9104
#, c-format
msgid "Skipping unknown relocation type: %u\n"
msgstr "Escamotage du type de réadressage inconnu: %u\n"
-#: readelf.c:8292 readelf.c:8759
+#: readelf.c:8641 readelf.c:9111
#, c-format
msgid "Skipping unexpected relocation type: %s\n"
msgstr "Escamotage du type de réadressage inattendu: %s\n"
-#: readelf.c:8301 readelf.c:8766
+#: readelf.c:8650 readelf.c:9118
#, c-format
msgid "Skipping reloc with overlarge offset: %lx\n"
msgstr "Escamotage du réadressage avec un offset démesuré: %lx\n"
-#: readelf.c:8308 readelf.c:8773
+#: readelf.c:8657 readelf.c:9125
#, c-format
msgid "Skipping reloc with invalid symbol index: %u\n"
msgstr "Passe outre le réadressage contenant un index de symbole invalide: %u\n"
-#: readelf.c:8356 readelf.c:8820 readelf.c:9928
+#: readelf.c:8705 readelf.c:9172 readelf.c:10282
msgid "Multiple symbol tables encountered\n"
msgstr "Plusieurs tables de symboles rencontrées\n"
-#: readelf.c:8371 readelf.c:8836 readelf.c:9943
+#: readelf.c:8720 readelf.c:9188 readelf.c:10297
#, c-format
msgid ""
"\n"
@@ -8923,7 +9090,7 @@ msgstr ""
"\n"
"Il n'y a pas de section de déroulage dans ce fichier.\n"
-#: readelf.c:8454
+#: readelf.c:8806
#, c-format
msgid ""
"\n"
@@ -8932,11 +9099,11 @@ msgstr ""
"\n"
"N'a pu repérer les infos de la section de déroulage pour "
-#: readelf.c:8466
+#: readelf.c:8818
msgid "unwind info"
msgstr "info déroulage"
-#: readelf.c:8469
+#: readelf.c:8821
#, c-format
msgid ""
"\n"
@@ -8945,12 +9112,12 @@ msgstr ""
"\n"
"Section de déroulage "
-#: readelf.c:8476
+#: readelf.c:8828
#, c-format
msgid " at offset 0x%lx contains %lu entries:\n"
msgstr " à l'adresse de décalage 0x%lx contient %lu entrées:\n"
-#: readelf.c:8845 readelf.c:9950
+#: readelf.c:9197 readelf.c:10304
#, c-format
msgid ""
"\n"
@@ -8965,192 +9132,197 @@ msgstr[1] ""
"\n"
"La section de déroulage « %s » à l'offset 0x%lx contient %lu entrées :\n"
-#: readelf.c:8978
+#: readelf.c:9330
msgid "unwind data"
msgstr "données déroulage"
-#: readelf.c:9051
+#: readelf.c:9403
#, c-format
msgid "Skipping unexpected relocation at offset 0x%lx\n"
msgstr "Escamotage du réadressage inattendu à l'offset 0x%lx\n"
-#: readelf.c:9073
+#: readelf.c:9425
#, c-format
msgid "Unknown section relocation type %d encountered\n"
msgstr "Le Type de réadressage de section %d inconnu a été rencontré\n"
-#: readelf.c:9081
+#: readelf.c:9433
#, c-format
msgid "Bad symbol index in unwind relocation (%lu > %lu)\n"
msgstr "Mauvais index de symbole dans le réadressage de déroulement (%lu > %lu)\n"
-#: readelf.c:9096
+#: readelf.c:9448
#, c-format
msgid "Skipping unknown ARM relocation type: %d\n"
msgstr "Escamotage du type de réadressage ARM inconnu: %d\n"
-#: readelf.c:9106
+#: readelf.c:9458
#, c-format
msgid "Skipping unexpected ARM relocation type %s\n"
msgstr "Escamotage du type de réadressage ARM inattendu %s\n"
-#: readelf.c:9115
+#: readelf.c:9467
#, c-format
msgid "Skipping unknown C6000 relocation type: %d\n"
msgstr "Escamotage du type de réadressage C6000 inconnu: %d\n"
-#: readelf.c:9125
+#: readelf.c:9477
#, c-format
msgid "Skipping unexpected C6000 relocation type %s\n"
msgstr "Escamotage du type de réadressage C6000 inattendu %s\n"
#. This function currently only supports ARM and TI unwinders.
-#: readelf.c:9134
+#: readelf.c:9486
msgid "Only TI and ARM unwinders are currently supported\n"
msgstr "Seuls les les dérouleurs TI et ARM sont actuellement supportés\n"
-#: readelf.c:9197
+#: readelf.c:9549
#, c-format
msgid "[Truncated opcode]\n"
msgstr "[Opcode tronqué]\n"
-#: readelf.c:9245 readelf.c:9461
+#: readelf.c:9597 readelf.c:9815
#, c-format
msgid "Refuse to unwind"
msgstr "Refus de dérouler"
-#: readelf.c:9268
+#: readelf.c:9620
#, c-format
msgid " [Reserved]"
msgstr " [Réservé]"
-#: readelf.c:9296
+#: readelf.c:9648
#, c-format
msgid " finish"
msgstr " terminé"
-#: readelf.c:9301 readelf.c:9394
+#: readelf.c:9653 readelf.c:9748
#, c-format
msgid "[Spare]"
msgstr "[Réserve]"
-#: readelf.c:9335
+#: readelf.c:9687
msgid "corrupt change to vsp\n"
msgstr "changement de vsp corrompu\n"
-#: readelf.c:9416 readelf.c:9573
+#: readelf.c:9713
+#, c-format
+msgid " pop {ra_auth_code}"
+msgstr " pop {ra_auth_code}"
+
+#: readelf.c:9770 readelf.c:9927
#, c-format
msgid " [unsupported opcode]"
msgstr " [opcode non supporté]"
-#: readelf.c:9509
+#: readelf.c:9863
#, c-format
msgid "pop frame {"
msgstr "pop frame {"
-#: readelf.c:9512
+#: readelf.c:9866
#, c-format
msgid "*corrupt* - no registers specified"
msgstr "*corrompu* – aucun registre spécifié"
-#: readelf.c:9526
+#: readelf.c:9880
msgid "[pad]"
msgstr "[pad]"
-#: readelf.c:9555
+#: readelf.c:9909
msgid "Corrupt stack pointer adjustment detected\n"
msgstr "Un ajustement de pointeur de pile corrompu a été détecté\n"
-#: readelf.c:9562
+#: readelf.c:9916
#, c-format
msgid "sp = sp + %ld"
msgstr "sp = sp + %ld"
-#: readelf.c:9637
+#: readelf.c:9991
#, c-format
msgid " Personality routine: "
msgstr " Routine de personnalité : "
-#: readelf.c:9669
+#: readelf.c:10023
#, c-format
msgid " [Truncated data]\n"
msgstr " [Données tronquées]\n"
-#: readelf.c:9693
+#: readelf.c:10047
#, c-format
msgid "Corrupt ARM compact model table entry: %x \n"
msgstr "Entrée de table de modèle compact ARM corrompue: %x \n"
-#: readelf.c:9698
+#: readelf.c:10052
#, c-format
msgid " Compact model index: %d\n"
msgstr " Index de modèle compact %d\n"
-#: readelf.c:9724
+#: readelf.c:10078
msgid "Unknown ARM compact model index encountered\n"
msgstr "Index de modèle compact ARM inconnu\n"
-#: readelf.c:9725
+#: readelf.c:10079
#, c-format
msgid " [reserved]\n"
msgstr " [réservé]\n"
-#: readelf.c:9740
+#: readelf.c:10094
#, c-format
msgid " Restore stack from frame pointer\n"
msgstr " Rétablir la pile depuis le pointeur de trame\n"
-#: readelf.c:9742
+#: readelf.c:10096
#, c-format
msgid " Stack increment %d\n"
msgstr " Incrément de pile %d\n"
-#: readelf.c:9743
+#: readelf.c:10097
#, c-format
msgid " Registers restored: "
msgstr " Registres rétablis : "
-#: readelf.c:9748
+#: readelf.c:10102
#, c-format
msgid " Return register: %s\n"
msgstr " Registre de retour : %s\n"
-#: readelf.c:9752
+#: readelf.c:10106
#, c-format
msgid " [reserved (%d)]\n"
msgstr " [réservé (%d)]\n"
-#: readelf.c:9756
+#: readelf.c:10110
#, c-format
msgid "Unsupported architecture type %d encountered when decoding unwind table\n"
msgstr "Le type d'architecture %d non supporté a été rencontré lors du décodage de la table de déroulage\n"
-#: readelf.c:9811
+#: readelf.c:10165
#, c-format
msgid "corrupt index table entry: %x\n"
msgstr "entrée corrompue de la table index: %x\n"
-#: readelf.c:9851
+#: readelf.c:10205
#, c-format
msgid "Unwind entry contains corrupt offset (0x%lx) into section %s\n"
msgstr "L'entrée de déroulement contient un décalage corrompu (0x%lx) dans la section %s\n"
-#: readelf.c:9867
+#: readelf.c:10221
#, c-format
msgid "Could not locate .ARM.extab section containing 0x%lx.\n"
msgstr "Impossible de trouver la section .ARM.extab contenant 0x%lx.\n"
-#: readelf.c:9911
+#: readelf.c:10265
#, c-format
msgid "Unsupported architecture type %d encountered when processing unwind table\n"
msgstr "Le type d'architecture %d non supporté a été rencontré lors du traitement de la table de déroulage\n"
-#: readelf.c:9973
+#: readelf.c:10327
#, c-format
msgid "No processor specific unwind information to decode\n"
msgstr "Pas d'information de déroulement spécifique au processeur à décoder\n"
-#: readelf.c:10003
+#: readelf.c:10357
#, c-format
msgid ""
"\n"
@@ -9159,79 +9331,79 @@ msgstr ""
"\n"
"Le décodage de la section de déroulement pour le type de machine %s n'est pas actuellement supporté.\n"
-#: readelf.c:10030
+#: readelf.c:10384
#, c-format
msgid "NONE"
msgstr "AUCUNE"
-#: readelf.c:10055
+#: readelf.c:10409
#, c-format
msgid "Interface Version: %s"
msgstr "Version de l'interface: %s"
#. Note: coded this way so that there is a single string for translation.
-#: readelf.c:10062
+#: readelf.c:10416
#, c-format
msgid "<corrupt: %s>"
msgstr "<corrompu: %s>"
-#: readelf.c:10080
+#: readelf.c:10434
#, c-format
msgid "Time Stamp: %s"
msgstr "Horodatage: %s"
-#: readelf.c:10274 readelf.c:10324
+#: readelf.c:10628 readelf.c:10678
msgid "dynamic section"
msgstr "section dynamique"
-#: readelf.c:10294 readelf.c:10345
+#: readelf.c:10648 readelf.c:10699
#, c-format
msgid "Out of memory allocating space for %lu dynamic entries\n"
msgstr "Mémoire épuisée lors de l'allocation d'un espace pour %lu entrées dynamiques\n"
-#: readelf.c:10419
+#: readelf.c:10773
#, c-format
msgid "Size truncation prevents reading %s elements of size %u\n"
msgstr "La troncature de la taille empêche la lecture de %s éléments de taille %u\n"
-#: readelf.c:10428
+#: readelf.c:10782
#, c-format
msgid "Invalid number of dynamic entries: %s\n"
msgstr "Nombre d'entrées dynamiques invalide: %s\n"
-#: readelf.c:10436
+#: readelf.c:10790
#, c-format
msgid "Out of memory reading %s dynamic entries\n"
msgstr "Mémoire épuisée lors de la lecture de %s entrées dynamiques\n"
-#: readelf.c:10443
+#: readelf.c:10797
#, c-format
msgid "Unable to read in %s bytes of dynamic data\n"
msgstr "Incapable de lire %s octets de données dynamiques\n"
-#: readelf.c:10452
+#: readelf.c:10806
#, c-format
msgid "Out of memory allocating space for %s dynamic entries\n"
msgstr "Mémoire épuisée lors de l'allocation d'un espace pour %s entrées dynamiques\n"
-#: readelf.c:10492 readelf.c:10546 readelf.c:10570 readelf.c:10603
-#: readelf.c:10629 readelf.c:10648
+#: readelf.c:10846 readelf.c:10900 readelf.c:10924 readelf.c:10957
+#: readelf.c:10983 readelf.c:11002
msgid "Unable to seek to start of dynamic information\n"
msgstr "Incapable de repérer le début des informations dynamiques\n"
-#: readelf.c:10498 readelf.c:10552
+#: readelf.c:10852 readelf.c:10906
msgid "Failed to read in number of buckets\n"
msgstr "Échec de lecture parmi tous les baquets\n"
-#: readelf.c:10504
+#: readelf.c:10858
msgid "Failed to read in number of chains\n"
msgstr "Échec de lecture du nombre de chaînes\n"
-#: readelf.c:10611
+#: readelf.c:10965
msgid "Failed to determine last chain length\n"
msgstr "Ne peux pas déterminer la longueur de la dernière chaîne\n"
-#: readelf.c:10711
+#: readelf.c:11065
#, c-format
msgid ""
"\n"
@@ -9240,7 +9412,7 @@ msgstr ""
"\n"
"Il n'y a pas de section dynamique dans le fichier lié « %s ».\n"
-#: readelf.c:10714
+#: readelf.c:11068
#, c-format
msgid ""
"\n"
@@ -9250,165 +9422,159 @@ msgstr ""
"Il n'y a pas de section dynamique dans ce fichier.\n"
#. See PR 21379 for a reproducer.
-#: readelf.c:10774
+#: readelf.c:11128
msgid "Invalid PT_LOAD entry\n"
msgstr "Entrée PT_LOAD invalide\n"
-#: readelf.c:10800
+#: readelf.c:11154
msgid "the .dynsym section doesn't match the DT_SYMTAB and DT_SYMENT tags\n"
msgstr "La section .dynsym ne correspond pas aux balises DT_SYMTAB et DT_SYMENT\n"
-#: readelf.c:10810
+#: readelf.c:11164
msgid "Corrupt DT_SYMTAB dynamic entry\n"
msgstr "Entrée dynamique DT_SYMTAB corrompue\n"
-#: readelf.c:10846
+#: readelf.c:11200
msgid "the .dynstr section doesn't match the DT_STRTAB and DT_STRSZ tags\n"
msgstr "la section .dynstr ne correspond pas aux balises DT_STRTAB et DT_STRSZ\n"
-#: readelf.c:10851
+#: readelf.c:11205
msgid "dynamic string table"
msgstr "table dynamique de chaînes"
-#: readelf.c:10854
+#: readelf.c:11208
msgid "Corrupt DT_STRTAB dynamic entry\n"
msgstr "Entrée dynamique DT_STRTAB corrompue\n"
-#: readelf.c:10879
+#: readelf.c:11233
#, c-format
msgid "Bad value (%d) for SYMINENT entry\n"
msgstr "Mauvaise valeur (%d) pour l'entrée SYMINENT\n"
-#: readelf.c:10898
+#: readelf.c:11252
msgid "symbol information"
msgstr "information de symbole"
-#: readelf.c:10904
+#: readelf.c:11258
msgid "Multiple dynamic symbol information sections found\n"
msgstr "Plusieurs sections d'informations de symboles dynamiques trouvées\n"
-#: readelf.c:10910
+#: readelf.c:11264
#, c-format
msgid "Out of memory allocating %lu bytes for dynamic symbol info\n"
msgstr "Mémoire épuisée lors de l'allocation de %lu octets pour les informations des symboles dynamiques\n"
-#: readelf.c:10936
+#: readelf.c:11288
#, c-format
msgid ""
"\n"
-"In linked file '%s' the dynamic section at offset 0x%lx contains 1 entry:\n"
-msgstr ""
-"\n"
-"Dans le fichier lié « %s », la section dynamique à l'offset 0x%lx contient 1 entrée :\n"
-
-#: readelf.c:10940
-#, c-format
-msgid ""
-"\n"
-"Dynamic section at offset 0x%lx contains 1 entry:\n"
-msgstr ""
-"\n"
-"La section dynamique à l'offset 0x%lx contient 1 entrée :\n"
-
-#: readelf.c:10946
-#, c-format
-msgid ""
+"In linked file '%s' the dynamic section at offset 0x%lx contains %lu entry:\n"
+msgid_plural ""
"\n"
"In linked file '%s' the dynamic section at offset 0x%lx contains %lu entries:\n"
-msgstr ""
+msgstr[0] ""
+"\n"
+"Dans le fichier lié « %s », la section dynamique à l'offset 0x%lx contient %lu entrée :\n"
+msgstr[1] ""
"\n"
"Dans le fichier lié « %s », la section dynamique à l'offset 0x%lx contient %lu entrées :\n"
-#: readelf.c:10951
+#: readelf.c:11295
#, c-format
msgid ""
"\n"
+"Dynamic section at offset 0x%lx contains %lu entry:\n"
+msgid_plural ""
+"\n"
"Dynamic section at offset 0x%lx contains %lu entries:\n"
-msgstr ""
+msgstr[0] ""
+"\n"
+"La section dynamique à l'offset 0x%lx contient %lu entrée :\n"
+msgstr[1] ""
"\n"
"La section dynamique à l'offset 0x%lx contient %lu entrées :\n"
-#: readelf.c:10957
+#: readelf.c:11302
#, c-format
msgid " Tag Type Name/Value\n"
msgstr " Étiquettes Type Nom/Valeur\n"
-#: readelf.c:10991
+#: readelf.c:11336
#, c-format
msgid "Auxiliary library"
msgstr "Bibliothèque auxiliaire"
-#: readelf.c:10995
+#: readelf.c:11340
#, c-format
msgid "Filter library"
msgstr "Bibliothèque de filtre"
-#: readelf.c:10999
+#: readelf.c:11344
#, c-format
msgid "Configuration file"
msgstr "Fichier de configuration"
-#: readelf.c:11003
+#: readelf.c:11348
#, c-format
msgid "Dependency audit library"
msgstr "Bibliothèque d'audit des dépendances"
-#: readelf.c:11007
+#: readelf.c:11352
#, c-format
msgid "Audit library"
msgstr "Bibliothèque des audits"
-#: readelf.c:11026 readelf.c:11054 readelf.c:11082 readelf.c:11417
+#: readelf.c:11371 readelf.c:11399 readelf.c:11427 readelf.c:11767
#, c-format
msgid "Flags:"
msgstr "Fanions:"
-#: readelf.c:11029 readelf.c:11057 readelf.c:11084 readelf.c:11419
+#: readelf.c:11374 readelf.c:11402 readelf.c:11429 readelf.c:11769
#, c-format
msgid " None\n"
msgstr "Aucun\n"
-#: readelf.c:11290
+#: readelf.c:11636
#, c-format
msgid "Shared library: [%s]"
msgstr "Bibliothèque partagée: [%s]"
-#: readelf.c:11294
+#: readelf.c:11640
#, c-format
msgid " program interpreter"
msgstr " programme interpréteur"
-#: readelf.c:11298
+#: readelf.c:11644
#, c-format
msgid "Library soname: [%s]"
msgstr "Bibliothèque soname: [%s]"
-#: readelf.c:11302
+#: readelf.c:11648
#, c-format
msgid "Library rpath: [%s]"
msgstr "Bibliothèque rpath: [%s]"
-#: readelf.c:11306
+#: readelf.c:11652
#, c-format
msgid "Library runpath: [%s]"
msgstr "Bibliothèque runpath:[%s]"
-#: readelf.c:11340
+#: readelf.c:11689
#, c-format
msgid " (bytes)\n"
msgstr " (octets)\n"
-#: readelf.c:11370
+#: readelf.c:11720
#, c-format
msgid "Not needed object: [%s]\n"
msgstr "Objet non nécessaire: [%s]\n"
-#: readelf.c:11395
+#: readelf.c:11745
#, c-format
msgid "<corrupt time val: %lx"
msgstr "<heure corrompue: %lx"
-#: readelf.c:11538
+#: readelf.c:11888
#, c-format
msgid ""
"\n"
@@ -9423,7 +9589,7 @@ msgstr[1] ""
"\n"
"Dans le fichier lié « %s », la section des définitions de version « %s » contient %u entrées :\n"
-#: readelf.c:11545
+#: readelf.c:11895
#, c-format
msgid ""
"\n"
@@ -9438,71 +9604,71 @@ msgstr[1] ""
"\n"
"La section des définitions de version « %s » contient %u entrées :\n"
-#: readelf.c:11553 readelf.c:11700 readelf.c:11866
+#: readelf.c:11903 readelf.c:12050 readelf.c:12216
#, c-format
msgid " Addr: 0x"
msgstr " Adr: 0x"
-#: readelf.c:11555 readelf.c:11702 readelf.c:11868
+#: readelf.c:11905 readelf.c:12052 readelf.c:12218
#, c-format
msgid " Offset: %#08lx Link: %u (%s)\n"
msgstr " Décalage: %#08lx Lien: %u (%s)\n"
-#: readelf.c:11561
+#: readelf.c:11911
msgid "version definition section"
msgstr "section de définition de version"
-#: readelf.c:11590
+#: readelf.c:11940
#, c-format
msgid " %#06lx: Rev: %d Flags: %s"
msgstr " %#06lx: Rev: %d Fanions: %s"
-#: readelf.c:11593
+#: readelf.c:11943
#, c-format
msgid " Index: %d Cnt: %d "
msgstr " Index: %d Compteur: %d "
-#: readelf.c:11610
+#: readelf.c:11960
#, c-format
msgid "Name: %s\n"
msgstr "Nom: %s\n"
-#: readelf.c:11613
+#: readelf.c:11963
#, c-format
msgid "Name index: %ld\n"
msgstr "Nom de l'index: %ld\n"
-#: readelf.c:11622
+#: readelf.c:11972
#, c-format
msgid "Invalid vda_next field of %lx\n"
msgstr "Champ vda_next %lx invalide\n"
-#: readelf.c:11642
+#: readelf.c:11992
#, c-format
msgid " %#06lx: Parent %d: %s\n"
msgstr " %#06lx: Parent %d: %s\n"
-#: readelf.c:11646
+#: readelf.c:11996
#, c-format
msgid " %#06lx: Parent %d, name index: %ld\n"
msgstr " %#06lx: Parent %d, index nom: %ld\n"
-#: readelf.c:11651
+#: readelf.c:12001
#, c-format
msgid " Version def aux past end of section\n"
msgstr " Définition de version « aux » au delà de la fin de la section\n"
-#: readelf.c:11658
+#: readelf.c:12008
#, c-format
msgid "Invalid vd_next field of %lx\n"
msgstr "Champ vd_next %lx invalide\n"
-#: readelf.c:11669
+#: readelf.c:12019
#, c-format
msgid " Version definition past end of section\n"
msgstr " Définition de version au delà de la fin de la section\n"
-#: readelf.c:11685
+#: readelf.c:12035
#, c-format
msgid ""
"\n"
@@ -9517,7 +9683,7 @@ msgstr[1] ""
"\n"
"Dans le fichier lié « %s », la section de dépendances de version « %s » contient %u entrées :\n"
-#: readelf.c:11692
+#: readelf.c:12042
#, c-format
msgid ""
"\n"
@@ -9532,68 +9698,68 @@ msgstr[1] ""
"\n"
"La section de dépendances de version « %s » contient %u entrées :\n"
-#: readelf.c:11709
+#: readelf.c:12059
msgid "Version Needs section"
msgstr "Section de version « Needs »"
-#: readelf.c:11734
+#: readelf.c:12084
#, c-format
msgid " %#06lx: Version: %d"
msgstr " %#06lx: Version: %d"
-#: readelf.c:11737
+#: readelf.c:12087
#, c-format
msgid " File: %s"
msgstr " Fichier: %s"
-#: readelf.c:11740
+#: readelf.c:12090
#, c-format
msgid " File: %lx"
msgstr " Fichier: %lx"
-#: readelf.c:11742
+#: readelf.c:12092
#, c-format
msgid " Cnt: %d\n"
msgstr " Compteur: %d\n"
-#: readelf.c:11765
+#: readelf.c:12115
#, c-format
msgid " %#06lx: Name: %s"
msgstr " %#06lx: Nom: %s"
-#: readelf.c:11768
+#: readelf.c:12118
#, c-format
msgid " %#06lx: Name index: %lx"
msgstr " %#06lx: Index du nom: %lx"
-#: readelf.c:11771
+#: readelf.c:12121
#, c-format
msgid " Flags: %s Version: %d\n"
msgstr " Fanions: %s Version: %d\n"
-#: readelf.c:11777
+#: readelf.c:12127
#, c-format
msgid "Invalid vna_next field of %lx\n"
msgstr "Champ vna_next %lx invalide\n"
-#: readelf.c:11790
+#: readelf.c:12140
msgid "Missing Version Needs auxiliary information\n"
msgstr "Les informations auxiliaires de la version « Needs » manquent\n"
-#: readelf.c:11795
+#: readelf.c:12145
#, c-format
msgid "Invalid vn_next field of %lx\n"
msgstr "Champ vn_next %lx invalide\n"
-#: readelf.c:11805
+#: readelf.c:12155
msgid "Missing Version Needs information\n"
msgstr "Les informations de la version « Needs » manquent\n"
-#: readelf.c:11843
+#: readelf.c:12193
msgid "version string table"
msgstr "table chaîne de version"
-#: readelf.c:11851
+#: readelf.c:12201
#, c-format
msgid ""
"\n"
@@ -9608,7 +9774,7 @@ msgstr[1] ""
"\n"
"Dans le fichier lié « %s », la section des symboles de version « %s » contient %lu entrées :\n"
-#: readelf.c:11858
+#: readelf.c:12208
#, c-format
msgid ""
"\n"
@@ -9623,47 +9789,47 @@ msgstr[1] ""
"\n"
"La section des symboles de version « %s » contient %lu entrées :\n"
-#: readelf.c:11877
+#: readelf.c:12227
msgid "version symbol data"
msgstr "données de symbole de version"
-#: readelf.c:11897
+#: readelf.c:12247
msgid "*invalid*"
msgstr "*invalide*"
-#: readelf.c:11905
+#: readelf.c:12255
msgid " 0 (*local*) "
msgstr " 0 (*local*) "
-#: readelf.c:11909
+#: readelf.c:12259
msgid " 1 (*global*) "
msgstr " 1 (*global*) "
-#: readelf.c:11920
+#: readelf.c:12270
msgid "invalid index into symbol array\n"
msgstr "mauvais index dans la table\n"
-#: readelf.c:11943 readelf.c:12515
+#: readelf.c:12293 readelf.c:12890
msgid "version need"
msgstr "version « need »"
-#: readelf.c:11954
+#: readelf.c:12304
msgid "version need aux (2)"
msgstr "version « need aux » (2)"
-#: readelf.c:12001 readelf.c:12459
+#: readelf.c:12351 readelf.c:12834
msgid "version def"
msgstr "définition de version"
-#: readelf.c:12029 readelf.c:12490
+#: readelf.c:12379 readelf.c:12865
msgid "version def aux"
msgstr "définition de version « aux »"
-#: readelf.c:12037
+#: readelf.c:12387
msgid "*both*"
msgstr "*les deux*"
-#: readelf.c:12069
+#: readelf.c:12419
#, c-format
msgid ""
"\n"
@@ -9672,7 +9838,7 @@ msgstr ""
"\n"
"Aucune information de version repérée dans le fichier lié « %s ».\n"
-#: readelf.c:12072
+#: readelf.c:12422
#, c-format
msgid ""
"\n"
@@ -9681,70 +9847,74 @@ msgstr ""
"\n"
"Aucune information de version repérée dans ce fichier.\n"
-#: readelf.c:12168
+#: readelf.c:12518
#, c-format
msgid "Unrecognized visibility value: %u\n"
msgstr "Valeur de visibilité non reconnue : %u\n"
-#: readelf.c:12181
+#: readelf.c:12531
#, c-format
msgid "Unrecognized alpha specific other value: %u\n"
msgstr "Autre valeur spécifique alpah non reconnue: %u\n"
-#: readelf.c:12258
+#: readelf.c:12608
#, c-format
msgid "Unrecognized IA64 VMS ST Function type: %d\n"
msgstr "Type de fonction IA64 VMS ST non reconnu : %d\n"
-#: readelf.c:12282
+#: readelf.c:12632
#, c-format
msgid "Unrecognized IA64 VMS ST Linkage: %d\n"
msgstr "Liaison IA64 VMS ST non reconnue: %d\n"
-#: readelf.c:12308
+#: readelf.c:12658
#, c-format
msgid "<localentry>: %d"
msgstr "<entréelocale>: %d"
-#: readelf.c:12348
+#: readelf.c:12672
+msgid " VARIANT_CC"
+msgstr " VARIANT_CC"
+
+#: readelf.c:12723
#, c-format
msgid "<other>: %x"
msgstr "<autre>: %x"
-#: readelf.c:12388
+#: readelf.c:12763
#, c-format
msgid "bad section index[%3d]"
msgstr "mauvais index de section[%3d]"
-#: readelf.c:12421
+#: readelf.c:12796
msgid "version data"
msgstr "données de version"
-#: readelf.c:12533
+#: readelf.c:12908
msgid "version need aux (3)"
msgstr "version « need aux » (3)"
-#: readelf.c:12683
+#: readelf.c:13062
#, c-format
msgid "local symbol %lu found at index >= %s's sh_info value of %u\n"
msgstr "symbole local %1$lu trouvé à l'index >= de la valeur sh_info %3$u de %2$s\n"
-#: readelf.c:12702
+#: readelf.c:13081
#, c-format
msgid "Unknown LTO symbol definition encountered: %u\n"
msgstr "Définition de symbole LTO inconnue rencontrée : %u\n"
-#: readelf.c:12721
+#: readelf.c:13100
#, c-format
msgid "Unknown LTO symbol visibility encountered: %u\n"
msgstr "Visibilité de symbole LTO inconnue rencontrée : %u\n"
-#: readelf.c:12739
+#: readelf.c:13118
#, c-format
msgid "Unknown LTO symbol type encountered: %u\n"
msgstr "Type de symbole LTO inconnu rencontré : %u\n"
-#: readelf.c:12755
+#: readelf.c:13134
#, c-format
msgid ""
"\n"
@@ -9753,7 +9923,7 @@ msgstr ""
"\n"
"La section de la table de symboles LTO « %s » dans le fichier lié « %s » est vide !\n"
-#: readelf.c:12759
+#: readelf.c:13138
#, c-format
msgid ""
"\n"
@@ -9762,24 +9932,24 @@ msgstr ""
"\n"
"La table de symboles LTO « %s » est vide !\n"
-#: readelf.c:12774
+#: readelf.c:13153
msgid "LTO symbols"
msgstr "symboles LTO"
-#: readelf.c:12791
+#: readelf.c:13171
#, c-format
msgid "LTO Symbol extension table '%s' is empty!\n"
msgstr "La table d'extension des symboles LTO « %s » est vide !\n"
-#: readelf.c:12797
+#: readelf.c:13177
msgid "LTO ext symbol data"
msgstr "données de symboles étendus LTO"
-#: readelf.c:12802
+#: readelf.c:13182
msgid "Unexpected version number in symbol extension table\n"
msgstr "Numéro de version inattendu dans la table d'extension des symboles\n"
-#: readelf.c:12811
+#: readelf.c:13191
#, c-format
msgid ""
"\n"
@@ -9788,49 +9958,49 @@ msgstr ""
"\n"
"Dans le fichier lié « %s » : "
-#: readelf.c:12818
+#: readelf.c:13198
#, c-format
msgid "LTO Symbol table '%s' and extension table '%s' contain:\n"
msgstr "La table de symboles LTO « %s » et la table d'extension « %s » contiennent :\n"
-#: readelf.c:12823
+#: readelf.c:13203
#, c-format
msgid "LTO Symbol table '%s'\n"
msgstr "Table des symboles LTO « %s »\n"
-#: readelf.c:12825
+#: readelf.c:13205
#, c-format
msgid " and extension table '%s' contain:\n"
msgstr " et la table d'extension « %s » contiennent :\n"
-#: readelf.c:12830
+#: readelf.c:13210
#, c-format
msgid "LTO Symbol table '%s' contains:\n"
msgstr "La table de symboles LTO « %s » contient :\n"
-#: readelf.c:12835
+#: readelf.c:13215
#, c-format
msgid " Comdat_Key Kind Visibility Size Slot Type Section Name\n"
msgstr " Comdat_Key Genre Visibilité Taille Empl. Type Section Nom\n"
-#: readelf.c:12837
+#: readelf.c:13217
#, c-format
msgid " Comdat_Key Kind Visibility Size Slot Name\n"
msgstr " Comdat_Key Genre Visibilité Taille Empl. Nom\n"
-#: readelf.c:12884
+#: readelf.c:13264
msgid "Ran out of LTO symbol extension data\n"
msgstr "À cours de données de l'extension de symboles LTO\n"
-#: readelf.c:12904
+#: readelf.c:13284
msgid "Data remains in the LTO symbol extension table\n"
msgstr "Des données restent dans la table d'extension de symboles LTO\n"
-#: readelf.c:12914
+#: readelf.c:13294
msgid "Buffer overrun encountered whilst decoding LTO symbol table\n"
msgstr "Débordement de tampon rencontré en décodant la table des symboles LTO\n"
-#: readelf.c:12966
+#: readelf.c:13346
#, c-format
msgid ""
"\n"
@@ -9845,7 +10015,7 @@ msgstr[1] ""
"\n"
"Dans le fichier lié « %s », la table des symboles dynamiques contient %lu entrées :\n"
-#: readelf.c:12974
+#: readelf.c:13354
#, c-format
msgid ""
"\n"
@@ -9860,17 +10030,17 @@ msgstr[1] ""
"\n"
"La table de symboles pour l'image contient %lu entrées :\n"
-#: readelf.c:12980 readelf.c:13033
+#: readelf.c:13360 readelf.c:13413
#, c-format
msgid " Num: Value Size Type Bind Vis Ndx Name\n"
msgstr " Num: Valeur Tail Type Lien Vis Ndx Nom\n"
-#: readelf.c:12982 readelf.c:13035
+#: readelf.c:13362 readelf.c:13415
#, c-format
msgid " Num: Value Size Type Bind Vis Ndx Name\n"
msgstr " Num: Valeur Tail Type Lien Vis Ndx Nom\n"
-#: readelf.c:13011
+#: readelf.c:13391
#, c-format
msgid ""
"\n"
@@ -9879,7 +10049,7 @@ msgstr ""
"\n"
"Table de symboles « %s » a un sh_entsize à zéro !\n"
-#: readelf.c:13019
+#: readelf.c:13399
#, c-format
msgid ""
"\n"
@@ -9894,7 +10064,7 @@ msgstr[1] ""
"\n"
"Dans le fichier lié « %s », la section des symboles « %s » contient %lu entrées :\n"
-#: readelf.c:13026
+#: readelf.c:13406
#, c-format
msgid ""
"\n"
@@ -9909,7 +10079,7 @@ msgstr[1] ""
"\n"
"La table de symboles « %s » contient %lu entrées :\n"
-#: readelf.c:13069
+#: readelf.c:13449
#, c-format
msgid ""
"\n"
@@ -9918,7 +10088,7 @@ msgstr ""
"\n"
"L'information dynamique des symboles n'est pas disponible pour l'affichage des symboles.\n"
-#: readelf.c:13082
+#: readelf.c:13462
#, c-format
msgid ""
"\n"
@@ -9933,24 +10103,24 @@ msgstr[1] ""
"\n"
"Histogramme de la longueur de la liste des baquets (total de %lu baquets) :\n"
-#: readelf.c:13093
+#: readelf.c:13473
msgid "Out of memory allocating space for histogram buckets\n"
msgstr "Mémoire épuisée lors de l'allocation de l'espace pour les classes de l'histogramme\n"
-#: readelf.c:13099 readelf.c:13177
+#: readelf.c:13479 readelf.c:13557
#, c-format
msgid " Length Number %% of total Coverage\n"
msgstr " Long. Nombre %% de couverture totale\n"
-#: readelf.c:13109
+#: readelf.c:13489
msgid "histogram chain is corrupt\n"
msgstr "la chaîne de l'histogramme est corrompue\n"
-#: readelf.c:13121
+#: readelf.c:13501
msgid "Out of memory allocating space for histogram counts\n"
msgstr "Mémoire épuisée lors de l'allocation de l'espace pour le décompte de l'histogramme\n"
-#: readelf.c:13161
+#: readelf.c:13541
#, c-format
msgid ""
"\n"
@@ -9965,15 +10135,15 @@ msgstr[1] ""
"\n"
"Histogramme de la longueur de la liste des baquets « %s » (total de %lu baquets) :\n"
-#: readelf.c:13173
+#: readelf.c:13553
msgid "Out of memory allocating space for gnu histogram buckets\n"
msgstr "Mémoire épuisée par l'allocation de l'espace pour les classes de l'histogramme gnu\n"
-#: readelf.c:13200
+#: readelf.c:13580
msgid "Out of memory allocating space for gnu histogram counts\n"
msgstr "Mémoire épuisée par l'allocation de l'espace pour le décompte de l'histogramme gnu\n"
-#: readelf.c:13266
+#: readelf.c:13646
#, c-format
msgid ""
"\n"
@@ -9988,7 +10158,7 @@ msgstr[1] ""
"\n"
"Dans le fichier lié « %s », le segment d'informations dynamiques à l'adresse de décalage 0x%lx contient %d entrées :\n"
-#: readelf.c:13273
+#: readelf.c:13653
#, c-format
msgid ""
"\n"
@@ -10003,101 +10173,101 @@ msgstr[1] ""
"\n"
"Le segment d'informations dynamiques à l'adresse de décalage 0x%lx contient %d entrées :\n"
-#: readelf.c:13281
+#: readelf.c:13661
#, c-format
msgid " Num: Name BoundTo Flags\n"
msgstr " Num: Nom Lier à Fanions\n"
-#: readelf.c:13288
+#: readelf.c:13668
#, c-format
msgid "<corrupt index>"
msgstr "<index corrompu>"
-#: readelf.c:13293
+#: readelf.c:13673
#, c-format
msgid "<corrupt: %19ld>"
msgstr "<corrompu: %19ld>"
-#: readelf.c:13390
+#: readelf.c:13770
#, c-format
msgid "MSP430 SYM_DIFF reloc contains invalid symbol index %lu\n"
msgstr "le réadressage SYM_DIFF du MSP430 contient l'index de symbole %lu invalide\n"
-#: readelf.c:13437
+#: readelf.c:13817
#, c-format
msgid "MSP430 ULEB128 field at 0x%lx contains invalid ULEB128 value\n"
msgstr "le champ MSP430 ULEB128 à 0x%lx contient une valeur ULEB128 invalide\n"
-#: readelf.c:13441
+#: readelf.c:13821
#, c-format
msgid "MSP430 reloc contains invalid symbol index %lu\n"
msgstr "le réadressage du MSP430 contient l'index de symbole %lu invalide\n"
#. PR 21137
-#: readelf.c:13452
+#: readelf.c:13832
#, c-format
msgid "MSP430 sym diff reloc contains invalid offset: 0x%lx\n"
msgstr "Le réadressage différentiel des symboles du MSP430 contient un offset invalide: 0x%lx\n"
-#: readelf.c:13463
+#: readelf.c:13843
msgid "Unhandled MSP430 reloc type found after SYM_DIFF reloc\n"
msgstr "Type de réadressage MSP430 non géré après un réadressage SYM_DIFF\n"
-#: readelf.c:13486
+#: readelf.c:13866
#, c-format
msgid "MN10300_SYM_DIFF reloc contains invalid symbol index %lu\n"
msgstr "Le réadressage MN10300_SYM_DIFF contient l'index de symbole %lu invalide\n"
-#: readelf.c:13500
+#: readelf.c:13880
#, c-format
msgid "MN10300 reloc contains invalid symbol index %lu\n"
msgstr "Le réadressage MN10300 contient l'index de symbole %lu invalide\n"
-#: readelf.c:13510
+#: readelf.c:13890
#, c-format
msgid "MN10300 sym diff reloc contains invalid offset: 0x%lx\n"
msgstr "Le réadressage différentiel des symboles du MN10300 contient un offset invalide: 0x%lx\n"
-#: readelf.c:13520
+#: readelf.c:13900
msgid "Unhandled MN10300 reloc type found after SYM_DIFF reloc\n"
msgstr "Type de réadressage MN10300 non géré après un réadressage SYM_DIFF\n"
-#: readelf.c:13543
+#: readelf.c:13923
#, c-format
msgid "RL78_SYM reloc contains invalid symbol index %lu\n"
msgstr "Le réadressage RL78_SYM contient l'index de symbole %lu invalide\n"
-#: readelf.c:13562 readelf.c:13571
+#: readelf.c:13942 readelf.c:13951
#, c-format
msgid "RL78 sym diff reloc contains invalid offset: 0x%lx\n"
msgstr "Le réadressage différentiel des symboles RL78 contient un offset invalide: 0x%lx\n"
-#: readelf.c:13790
+#: readelf.c:14172
#, c-format
msgid "Missing knowledge of 32-bit reloc types used in DWARF sections of machine number %d\n"
msgstr "Information manquante à propos des types de réadressages 32 bits dans les sections DWARF de la machine %d\n"
-#: readelf.c:14473
+#: readelf.c:14857
#, c-format
msgid "unable to apply unsupported reloc type %d to section %s\n"
msgstr "Incapable d'appliquer le type de réadressage non supporté %d à la section %s\n"
-#: readelf.c:14482
+#: readelf.c:14866
#, c-format
msgid "skipping invalid relocation offset 0x%lx in section %s\n"
msgstr "passe outre l'offset de réadressage invalide 0x%lx dans la section %s\n"
-#: readelf.c:14491
+#: readelf.c:14875
#, c-format
msgid "skipping invalid relocation symbol index 0x%lx in section %s\n"
msgstr "passe outre l'indexe du symbole de réadressage 0x%lx invalide dans la section %s\n"
-#: readelf.c:14514
+#: readelf.c:14898
#, c-format
msgid "skipping unexpected symbol type %s in section %s relocation %ld\n"
msgstr "passe outre le type de symbole inattendu %s dans la section %s de réadressage %ld\n"
-#: readelf.c:14591
+#: readelf.c:14975
#, c-format
msgid ""
"\n"
@@ -10106,16 +10276,16 @@ msgstr ""
"\n"
"Vidange de la section assembleur %s\n"
-#: readelf.c:14609
+#: readelf.c:14993
#, c-format
msgid "Section '%s' has no data to dump.\n"
msgstr "La section « %s » n'a pas de données à vidanger.\n"
-#: readelf.c:14615
+#: readelf.c:14999
msgid "section contents"
msgstr "contenus de la section"
-#: readelf.c:14691
+#: readelf.c:15075
#, c-format
msgid ""
"\n"
@@ -10124,7 +10294,7 @@ msgstr ""
"\n"
"Vidange textuelle de la section « %s » dans le fichier lié %s :\n"
-#: readelf.c:14695
+#: readelf.c:15079
#, c-format
msgid ""
"\n"
@@ -10133,33 +10303,33 @@ msgstr ""
"\n"
"Vidange textuelle de la section « %s » :\n"
-#: readelf.c:14716 readelf.c:14932 readelf.c:15355
+#: readelf.c:15100 readelf.c:15316 readelf.c:15703
#, c-format
msgid "section '%s' has unsupported compress type: %d\n"
msgstr "la section « %s » a un type de compression non supporté: %d\n"
-#: readelf.c:14748 readelf.c:14966 readelf.c:15392
+#: readelf.c:15132 readelf.c:15350 readelf.c:15740
#, c-format
msgid "Unable to decompress section %s\n"
msgstr "Incapable de décompresser la section %s\n"
-#: readelf.c:14773
+#: readelf.c:15157
#, c-format
msgid " Note: This section has relocations against it, but these have NOT been applied to this dump.\n"
msgstr " Note : Cette section a des réadressages mais ils n'ont PAS été appliqués à cette vidange.\n"
-#: readelf.c:14866 readelf.c:16353 readelf.c:16393 readelf.c:16431
-#: readelf.c:16478 readelf.c:16509 readelf.c:18113 readelf.c:18145
+#: readelf.c:15250 readelf.c:16726 readelf.c:16766 readelf.c:16804
+#: readelf.c:16851 readelf.c:16882 readelf.c:18488 readelf.c:18520
#, c-format
msgid "<corrupt>\n"
msgstr "<corrompu>\n"
-#: readelf.c:14874
+#: readelf.c:15258
#, c-format
msgid " No strings found in this section."
msgstr " Aucun texte trouvé dans cette section."
-#: readelf.c:14907
+#: readelf.c:15291
#, c-format
msgid ""
"\n"
@@ -10168,7 +10338,7 @@ msgstr ""
"\n"
"Vidange hexadécimale de la section « %s » dans le fichier lié %s :\n"
-#: readelf.c:14911
+#: readelf.c:15295
#, c-format
msgid ""
"\n"
@@ -10177,45 +10347,36 @@ msgstr ""
"\n"
"Vidange hexadécimale de la section « %s » :\n"
-#: readelf.c:14999
+#: readelf.c:15383
#, c-format
msgid " NOTE: This section has relocations against it, but these have NOT been applied to this dump.\n"
msgstr " NOTE : Cette section a des réadressages mais ils n'ont PAS été appliqués à cette vidange.\n"
-#: readelf.c:15144
+#: readelf.c:15525
#, c-format
msgid "Iteration failed: %s, %s\n"
msgstr "L'itération a échouée : %s, %s\n"
-#: readelf.c:15190
+#: readelf.c:15569
#, c-format
msgid "No symbol section named %s\n"
msgstr "Aucune section de symbole nommée %s\n"
-#: readelf.c:15206
+#: readelf.c:15585
#, c-format
msgid "No string table section named %s\n"
msgstr "Aucune section de table de chaînes nommée %s\n"
-#: readelf.c:15213
+#: readelf.c:15592
msgid "strings"
msgstr "chaînes"
-#: readelf.c:15223
-#, c-format
-msgid "No CTF parent section named %s\n"
-msgstr "Aucune section parent CTF nommée %s\n"
-
-#: readelf.c:15229
-msgid "CTF parent"
-msgstr "parent CTF"
-
-#: readelf.c:15242 readelf.c:15255 readelf.c:15269
+#: readelf.c:15605 readelf.c:15617
#, c-format
msgid "CTF open failure: %s\n"
msgstr "Échec de l'ouverture de CTF : %s\n"
-#: readelf.c:15276
+#: readelf.c:15624
#, c-format
msgid ""
"\n"
@@ -10224,7 +10385,7 @@ msgstr ""
"\n"
"Vidange de la section CTF « %s » dans le fichier lié %s :\n"
-#: readelf.c:15280
+#: readelf.c:15628
#, c-format
msgid ""
"\n"
@@ -10233,27 +10394,27 @@ msgstr ""
"\n"
"Vidange de la section CTF « %s » :\n"
-#: readelf.c:15286
+#: readelf.c:15636
#, c-format
msgid "CTF member open failure: %s\n"
msgstr "Échec de l'ouverture du membre CTF : %s\n"
-#: readelf.c:15319
+#: readelf.c:15667
#, c-format
msgid "%s section data"
msgstr "données de section %s"
-#: readelf.c:15342
+#: readelf.c:15690
#, c-format
msgid "compressed section %s is too small to contain a compression header\n"
msgstr "la section compressée %s est trop petite pour contenir un en-tête compressé\n"
-#: readelf.c:15468 readelf.c:15495 readelf.c:15520
+#: readelf.c:15816 readelf.c:15843 readelf.c:15868
#, c-format
msgid "malformed note encountered in section %s whilst scanning for build-id note\n"
msgstr "note mal formée rencontrée dans la section %s en recherchant la note du ID de compilation\n"
-#: readelf.c:15644
+#: readelf.c:15993
#, c-format
msgid ""
"\n"
@@ -10266,503 +10427,503 @@ msgstr ""
#. which has the NOBITS type - the bits in the file will be random.
#. This can happen when a file containing a .eh_frame section is
#. stripped with the --only-keep-debug command line option.
-#: readelf.c:15653
+#: readelf.c:16002
#, c-format
msgid "section '%s' has the NOBITS type - its contents are unreliable.\n"
msgstr "la section « %s » a le type NOBITS – son contenu n'est pas fiable.\n"
-#: readelf.c:15703
+#: readelf.c:16052
#, c-format
msgid "Unrecognized debug section: %s\n"
msgstr "Section de débug non reconnue : %s\n"
-#: readelf.c:15732
+#: readelf.c:16082
#, c-format
msgid "Section '%s' was not dumped because it does not exist\n"
msgstr "La section « %s » n'a pas été vidangée parce qu'inexistante\n"
-#: readelf.c:15805
+#: readelf.c:16155
#, c-format
msgid "Section %d was not dumped because it does not exist!\n"
msgstr "La section %d n'a pas été vidangée parce qu'inexistante !\n"
-#: readelf.c:15861
+#: readelf.c:16211
msgid "<corrupt tag>\n"
msgstr "<étiquette corrompue>\n"
-#: readelf.c:15876
+#: readelf.c:16226
#, c-format
msgid "<corrupt string tag>"
msgstr "<étiquette de chaîne corrompue>"
-#: readelf.c:15910
+#: readelf.c:16260
#, c-format
msgid "Absent/Non standard\n"
msgstr "Absent/Non standard\n"
-#: readelf.c:15913
+#: readelf.c:16263
#, c-format
msgid "Bare metal/mwdt\n"
msgstr "Bare metal/mwdt\n"
-#: readelf.c:15916
+#: readelf.c:16266
#, c-format
msgid "Bare metal/newlib\n"
msgstr "Bare metal/newlib\n"
-#: readelf.c:15919
+#: readelf.c:16269
#, c-format
msgid "Linux/uclibc\n"
msgstr "Linux/uclibc\n"
-#: readelf.c:15922
+#: readelf.c:16272
#, c-format
msgid "Linux/glibc\n"
msgstr "Linux/glibc\n"
-#: readelf.c:15925 readelf.c:16004
+#: readelf.c:16275 readelf.c:16354
#, c-format
msgid "Unknown\n"
msgstr "inconnu\n"
-#: readelf.c:15937 readelf.c:15967 readelf.c:15995
+#: readelf.c:16287 readelf.c:16317 readelf.c:16345
#, c-format
msgid "Absent\n"
msgstr "Absent\n"
-#: readelf.c:15979
+#: readelf.c:16329
msgid "yes"
msgstr "oui"
-#: readelf.c:15979
+#: readelf.c:16329
msgid "no"
msgstr "non"
-#: readelf.c:16016 readelf.c:16023
+#: readelf.c:16366 readelf.c:16373
msgid "default"
msgstr "défaut"
-#: readelf.c:16017
+#: readelf.c:16367
msgid "smallest"
msgstr "le plus petit"
-#: readelf.c:16022
+#: readelf.c:16372
msgid "OPTFP"
msgstr "OPTFP"
-#: readelf.c:16220 readelf.c:16233 readelf.c:16251 readelf.c:16772
-#: readelf.c:17051 readelf.c:17063 readelf.c:17075
+#: readelf.c:16593 readelf.c:16606 readelf.c:16624 readelf.c:17145
+#: readelf.c:17424 readelf.c:17436 readelf.c:17448
#, c-format
msgid "None\n"
msgstr "Aucun\n"
-#: readelf.c:16221
+#: readelf.c:16594
#, c-format
msgid "Application\n"
msgstr "Application\n"
-#: readelf.c:16222
+#: readelf.c:16595
#, c-format
msgid "Realtime\n"
msgstr "Temps réel\n"
-#: readelf.c:16223
+#: readelf.c:16596
#, c-format
msgid "Microcontroller\n"
msgstr "Microcontrôlleur\n"
-#: readelf.c:16224
+#: readelf.c:16597
#, c-format
msgid "Application or Realtime\n"
msgstr "Application ou temps réel\n"
-#: readelf.c:16234 readelf.c:16253 readelf.c:16824 readelf.c:16841
-#: readelf.c:16912 readelf.c:16932 readelf.c:19716
+#: readelf.c:16607 readelf.c:16626 readelf.c:17197 readelf.c:17214
+#: readelf.c:17285 readelf.c:17305 readelf.c:20136
#, c-format
msgid "8-byte\n"
msgstr "8-octet\n"
-#: readelf.c:16235 readelf.c:16915 readelf.c:16935 readelf.c:19715
+#: readelf.c:16608 readelf.c:17288 readelf.c:17308 readelf.c:20135
#, c-format
msgid "4-byte\n"
msgstr "4-octet\n"
-#: readelf.c:16239 readelf.c:16257
+#: readelf.c:16612 readelf.c:16630
#, c-format
msgid "8-byte and up to %d-byte extended\n"
msgstr "8-octet et plus jusqu'à une extension de %d-octet\n"
-#: readelf.c:16252
+#: readelf.c:16625
#, c-format
msgid "8-byte, except leaf SP\n"
msgstr "8-octet, sauf pour feuille SP\n"
-#: readelf.c:16268 readelf.c:16350 readelf.c:16950
+#: readelf.c:16641 readelf.c:16723 readelf.c:17323
#, c-format
msgid "flag = %d, vendor = "
msgstr "fanion = %d, vendeur = "
-#: readelf.c:16289
+#: readelf.c:16662
#, c-format
msgid "True\n"
msgstr "Vrai\n"
-#: readelf.c:16309
+#: readelf.c:16682
#, c-format
msgid "<unknown: %d>\n"
msgstr "<inconnu: %d>\n"
-#: readelf.c:16354
+#: readelf.c:16727
msgid "corrupt vendor attribute\n"
msgstr "l'attribut de vendeur est corrompu\n"
-#: readelf.c:16404
+#: readelf.c:16777
#, c-format
msgid "unspecified hard/soft float\n"
msgstr "nombre en virgule flottante matériel/logiciel non spécifié\n"
-#: readelf.c:16407
+#: readelf.c:16780
#, c-format
msgid "hard float\n"
msgstr "flottant matériel\n"
-#: readelf.c:16410
+#: readelf.c:16783
#, c-format
msgid "soft float\n"
msgstr "flottant logiciel\n"
-#: readelf.c:16442
+#: readelf.c:16815
#, c-format
msgid "unspecified hard/soft float, "
msgstr "nombre en virgule flottante matériel/logiciel non spécifié, "
-#: readelf.c:16445
+#: readelf.c:16818
#, c-format
msgid "hard float, "
msgstr "flottant matériel, "
-#: readelf.c:16448
+#: readelf.c:16821
#, c-format
msgid "soft float, "
msgstr "flottant logiciel, "
-#: readelf.c:16451
+#: readelf.c:16824
#, c-format
msgid "single-precision hard float, "
msgstr "flottant matériel simple précision, "
-#: readelf.c:16458
+#: readelf.c:16831
#, c-format
msgid "unspecified long double\n"
msgstr "double long non spécifié\n"
-#: readelf.c:16461
+#: readelf.c:16834
#, c-format
msgid "128-bit IBM long double\n"
msgstr "double long 128 bits IBM\n"
-#: readelf.c:16464
+#: readelf.c:16837
#, c-format
msgid "64-bit long double\n"
msgstr "double long 64 bits\n"
-#: readelf.c:16467
+#: readelf.c:16840
#, c-format
msgid "128-bit IEEE long double\n"
msgstr "double long 128 bits IEEE\n"
-#: readelf.c:16489 readelf.c:16520
+#: readelf.c:16862 readelf.c:16893
#, c-format
msgid "unspecified\n"
msgstr "non spécifié\n"
-#: readelf.c:16492
+#: readelf.c:16865
#, c-format
msgid "generic\n"
msgstr "générique\n"
-#: readelf.c:16526
+#: readelf.c:16899
#, c-format
msgid "memory\n"
msgstr "mémoire\n"
-#: readelf.c:16553
+#: readelf.c:16926
#, c-format
msgid "any\n"
msgstr "quelconque\n"
-#: readelf.c:16556
+#: readelf.c:16929
#, c-format
msgid "software\n"
msgstr "logiciel\n"
-#: readelf.c:16559
+#: readelf.c:16932
#, c-format
msgid "hardware\n"
msgstr "matériel\n"
-#: readelf.c:16682
+#: readelf.c:17055
#, c-format
msgid "Hard or soft float\n"
msgstr "Flottant matériel ou logiciel\n"
-#: readelf.c:16685
+#: readelf.c:17058
#, c-format
msgid "Hard float (double precision)\n"
msgstr "Flottant matériel (double précision)\n"
-#: readelf.c:16688
+#: readelf.c:17061
#, c-format
msgid "Hard float (single precision)\n"
msgstr "Flottant matériel (simple précision)\n"
-#: readelf.c:16691
+#: readelf.c:17064
#, c-format
msgid "Soft float\n"
msgstr "Flottant logiciel\n"
-#: readelf.c:16694
+#: readelf.c:17067
#, c-format
msgid "Hard float (MIPS32r2 64-bit FPU 12 callee-saved)\n"
msgstr "Flottant matériel (coprocesseur 64 bits MIPS32r2 sauvegardé par l'appelant)\n"
-#: readelf.c:16697
+#: readelf.c:17070
#, c-format
msgid "Hard float (32-bit CPU, Any FPU)\n"
msgstr "Flottant matériel (processeur 32 bits, n'importe quel coprocesseur math)\n"
-#: readelf.c:16700
+#: readelf.c:17073
#, c-format
msgid "Hard float (32-bit CPU, 64-bit FPU)\n"
msgstr "Flottant matériel (processeur 32 bits, coprocesseur 64 bits)\n"
-#: readelf.c:16703
+#: readelf.c:17076
#, c-format
msgid "Hard float compat (32-bit CPU, 64-bit FPU)\n"
msgstr "Flottant matériel compat (processeur 32 bits, coprocesseur 64 bits)\n"
-#: readelf.c:16706
+#: readelf.c:17079
#, c-format
msgid "NaN 2008 compatibility\n"
msgstr "Compatibilité NaN 2008\n"
-#: readelf.c:16739
+#: readelf.c:17112
#, c-format
msgid "Any MSA or not\n"
msgstr "N'importe quel MSA ou pas\n"
-#: readelf.c:16742
+#: readelf.c:17115
#, c-format
msgid "128-bit MSA\n"
msgstr "MSA 128 bits\n"
-#: readelf.c:16804
+#: readelf.c:17177
#, c-format
msgid "Not used\n"
msgstr "Pas utilisé\n"
-#: readelf.c:16807
+#: readelf.c:17180
#, c-format
msgid "2 bytes\n"
msgstr "2 octets\n"
-#: readelf.c:16810
+#: readelf.c:17183
#, c-format
msgid "4 bytes\n"
msgstr "4 octets\n"
-#: readelf.c:16827 readelf.c:16844 readelf.c:16918 readelf.c:16938
+#: readelf.c:17200 readelf.c:17217 readelf.c:17291 readelf.c:17311
#, c-format
msgid "16-byte\n"
msgstr "16-octets\n"
-#: readelf.c:16858
+#: readelf.c:17231
#, c-format
msgid "DSBT addressing not used\n"
msgstr "Adressage DSBT pas utilisé\n"
-#: readelf.c:16861
+#: readelf.c:17234
#, c-format
msgid "DSBT addressing used\n"
msgstr "Adressage DSBT utilisé\n"
-#: readelf.c:16875
+#: readelf.c:17248
#, c-format
msgid "Data addressing position-dependent\n"
msgstr "Adressage des données dépendant de la position\n"
-#: readelf.c:16878
+#: readelf.c:17251
#, c-format
msgid "Data addressing position-independent, GOT near DP\n"
msgstr "Adressage des données indépendant de la position, GOT près de DP\n"
-#: readelf.c:16881
+#: readelf.c:17254
#, c-format
msgid "Data addressing position-independent, GOT far from DP\n"
msgstr "Adressage des données indépendant de la position, GOT loin de DP\n"
-#: readelf.c:16895
+#: readelf.c:17268
#, c-format
msgid "Code addressing position-dependent\n"
msgstr "Adressage de code dépendant de la position\n"
-#: readelf.c:16898
+#: readelf.c:17271
#, c-format
msgid "Code addressing position-independent\n"
msgstr "Adressage de code indépendant de la position\n"
-#: readelf.c:17052
+#: readelf.c:17425
#, c-format
msgid "MSP430\n"
msgstr "MSP430\n"
-#: readelf.c:17053
+#: readelf.c:17426
#, c-format
msgid "MSP430X\n"
msgstr "MSP430X\n"
-#: readelf.c:17064 readelf.c:17076
+#: readelf.c:17437 readelf.c:17449
#, c-format
msgid "Small\n"
msgstr "Petit\n"
-#: readelf.c:17065 readelf.c:17077
+#: readelf.c:17438 readelf.c:17450
#, c-format
msgid "Large\n"
msgstr "Grand\n"
-#: readelf.c:17078
+#: readelf.c:17451
#, c-format
msgid "Restricted Large\n"
msgstr "Grand restreint\n"
-#: readelf.c:17084
+#: readelf.c:17457
#, c-format
msgid " <unknown tag %d>: "
msgstr " <étiquette %d inconnue>: "
-#: readelf.c:17130
+#: readelf.c:17503
#, c-format
msgid "Any Region\n"
msgstr "Toute Région\n"
-#: readelf.c:17133
+#: readelf.c:17506
#, c-format
msgid "Lower Region Only\n"
msgstr "Région Basse Uniquement\n"
-#: readelf.c:17192
+#: readelf.c:17565
#, c-format
msgid "%u\n"
msgstr "%u\n"
-#: readelf.c:17199
+#: readelf.c:17572
#, c-format
msgid "No unaligned access\n"
msgstr "Aucun accès non aligné\n"
-#: readelf.c:17202
+#: readelf.c:17575
#, c-format
msgid "Unaligned access\n"
msgstr "Accès non aligné\n"
-#: readelf.c:17208
+#: readelf.c:17581
#, c-format
msgid "%u-bytes\n"
msgstr "%u-octets\n"
-#: readelf.c:17347
+#: readelf.c:17723
msgid "attributes"
msgstr "attributs"
-#: readelf.c:17359
+#: readelf.c:17735
#, c-format
msgid "Unknown attributes version '%c'(%d) - expecting 'A'\n"
msgstr "Version d'attributs « %c »(%d) inconnue — « A » attendue\n"
-#: readelf.c:17378
+#: readelf.c:17754
msgid "Tag section ends prematurely\n"
msgstr "La section des étiquettes s'est terminée prématurément\n"
-#: readelf.c:17387
+#: readelf.c:17763
#, c-format
msgid "Bad attribute length (%u > %u)\n"
msgstr "Longueur d'attribut erronée (%u > %u)\n"
-#: readelf.c:17395
+#: readelf.c:17771
#, c-format
msgid "Attribute length of %u is too small\n"
msgstr "La longueur d'attribut %u est trop petite\n"
-#: readelf.c:17406
+#: readelf.c:17782
msgid "Corrupt attribute section name\n"
msgstr "Nom de section d'attributs corrompu\n"
-#: readelf.c:17411
+#: readelf.c:17787
#, c-format
msgid "Attribute Section: "
msgstr "Section d'Attribut: "
-#: readelf.c:17438
+#: readelf.c:17814
msgid "Unused bytes at end of section\n"
msgstr "Octets inutilisés à la fin de la section\n"
-#: readelf.c:17448
+#: readelf.c:17824
#, c-format
msgid "Bad subsection length (%u > %u)\n"
msgstr "Longueur erronée de la sous-section (%u > %u)\n"
-#: readelf.c:17456
+#: readelf.c:17832
#, c-format
msgid "Bad subsection length (%u < 6)\n"
msgstr "Longueur erronée de la sous-section (%u < 6)\n"
-#: readelf.c:17471
+#: readelf.c:17847
#, c-format
msgid "File Attributes\n"
msgstr "Attributs du fichier\n"
-#: readelf.c:17474
+#: readelf.c:17850
#, c-format
msgid "Section Attributes:"
msgstr "Attributs de Section:"
-#: readelf.c:17477
+#: readelf.c:17853
#, c-format
msgid "Symbol Attributes:"
msgstr "Attributs de Symbols:"
-#: readelf.c:17490
+#: readelf.c:17866
#, c-format
msgid "Unknown tag: %d\n"
msgstr "Tag inconnu: %d\n"
-#: readelf.c:17511
+#: readelf.c:17887
#, c-format
msgid " Unknown attribute:\n"
msgstr " Attribut inconnue :\n"
-#: readelf.c:17553
+#: readelf.c:17929
msgid "MIPS GOT entry extends beyond the end of available data\n"
msgstr "L'entrée GOT MIPS s'étend au delà de la fin des données disponibles\n"
-#: readelf.c:17636 readelf.c:17705
+#: readelf.c:18012 readelf.c:18081
msgid "Unknown"
msgstr "Inconnu"
-#: readelf.c:17752
+#: readelf.c:18128
msgid "Corrupt MIPS ABI Flags section.\n"
msgstr "Section de fanions ABI MIPS corrompue.\n"
-#: readelf.c:17758
+#: readelf.c:18134
msgid "MIPS ABI Flags section"
msgstr "Section de fanions ABI MIPS"
-#: readelf.c:17817 readelf.c:18400
+#: readelf.c:18193 readelf.c:18775
msgid "Global Offset Table data"
msgstr "Données table d'offsets globale (GOT)"
-#: readelf.c:17821
+#: readelf.c:18197
#, c-format
msgid ""
"\n"
@@ -10771,45 +10932,45 @@ msgstr ""
"\n"
"GOTi statique:\n"
-#: readelf.c:17822 readelf.c:18405
+#: readelf.c:18198 readelf.c:18780
#, c-format
msgid " Canonical gp value: "
msgstr " Valeur gp canonique: "
-#: readelf.c:17836 readelf.c:18409 readelf.c:18539
+#: readelf.c:18212 readelf.c:18784 readelf.c:18914
#, c-format
msgid " Reserved entries:\n"
msgstr " Entrées réservées:\n"
-#: readelf.c:17837
+#: readelf.c:18213
#, c-format
msgid " %*s %10s %*s\n"
msgstr " %*s %10s %*s\n"
-#: readelf.c:17838 readelf.c:17868 readelf.c:18411 readelf.c:18439
-#: readelf.c:18457 readelf.c:18541 readelf.c:18550
+#: readelf.c:18214 readelf.c:18244 readelf.c:18786 readelf.c:18814
+#: readelf.c:18832 readelf.c:18916 readelf.c:18925
msgid "Address"
msgstr "Adresse"
-#: readelf.c:17838 readelf.c:17868 readelf.c:18411 readelf.c:18439
-#: readelf.c:18458
+#: readelf.c:18214 readelf.c:18244 readelf.c:18786 readelf.c:18814
+#: readelf.c:18833
msgid "Access"
msgstr "Accès"
-#: readelf.c:17839 readelf.c:17869
+#: readelf.c:18215 readelf.c:18245
msgid "Value"
msgstr "Valeur"
-#: readelf.c:17866 readelf.c:18437
+#: readelf.c:18242 readelf.c:18812
#, c-format
msgid " Local entries:\n"
msgstr " Entrées locales:\n"
-#: readelf.c:17948 readelf.c:18656
+#: readelf.c:18324 readelf.c:19031
msgid "liblist section data"
msgstr "données de section liblist"
-#: readelf.c:17951
+#: readelf.c:18327
#, c-format
msgid ""
"\n"
@@ -10824,37 +10985,37 @@ msgstr[1] ""
"\n"
"La section « .liblist » contient %lu entrées :\n"
-#: readelf.c:17955
+#: readelf.c:18331
msgid " Library Time Stamp Checksum Version Flags\n"
msgstr " Bibliothèqye Horodatage Checksum Version Fanions\n"
-#: readelf.c:17981
+#: readelf.c:18357
#, c-format
msgid "<corrupt: %9ld>"
msgstr "<corrompu: %9ld>"
-#: readelf.c:17986
+#: readelf.c:18362
msgid " NONE"
msgstr " AUCUN"
-#: readelf.c:18037
+#: readelf.c:18412
msgid "No MIPS_OPTIONS header found\n"
msgstr "Pas d'en-tête MIPS_OPTIONS trouvé\n"
-#: readelf.c:18043
+#: readelf.c:18418
msgid "The MIPS options section is too small.\n"
msgstr "La section des options MIPS est trop petite.\n"
-#: readelf.c:18048
+#: readelf.c:18423
msgid "options"
msgstr "options"
-#: readelf.c:18067
+#: readelf.c:18442
#, c-format
msgid "Invalid size (%u) for MIPS option\n"
msgstr "Taille (%u) invalide pour l'option MIPS\n"
-#: readelf.c:18076
+#: readelf.c:18451
#, c-format
msgid ""
"\n"
@@ -10869,28 +11030,28 @@ msgstr[1] ""
"\n"
"La section « %s » contient %d entrées :\n"
-#: readelf.c:18114 readelf.c:18146
+#: readelf.c:18489 readelf.c:18521
msgid "Truncated MIPS REGINFO option\n"
msgstr "Option MIPS REGINFO tronquée\n"
-#: readelf.c:18282
+#: readelf.c:18657
msgid "conflict list found without a dynamic symbol table\n"
msgstr "conflit de liste repéré sans symbole de table dynamique\n"
-#: readelf.c:18290
+#: readelf.c:18665
#, c-format
msgid "Overlarge number of conflicts detected: %lx\n"
msgstr "Nombre démesuré de conflits rencontrés: %lx\n"
-#: readelf.c:18298
+#: readelf.c:18673
msgid "Out of memory allocating space for dynamic conflicts\n"
msgstr "Mémoire épuisée lors de l'allocation de l'espace pour les conflits dynamiques\n"
-#: readelf.c:18308 readelf.c:18326
+#: readelf.c:18683 readelf.c:18701
msgid "conflict"
msgstr "conflit"
-#: readelf.c:18339
+#: readelf.c:18714
#, c-format
msgid ""
"\n"
@@ -10905,31 +11066,31 @@ msgstr[1] ""
"\n"
"La section « .conflict » contient %lu entrées :\n"
-#: readelf.c:18343
+#: readelf.c:18718
msgid " Num: Index Value Name"
msgstr " Nombre: Index Valeur Nom"
-#: readelf.c:18350
+#: readelf.c:18725
#, c-format
msgid "<corrupt symbol index>"
msgstr "<index de symbole corrompu>"
-#: readelf.c:18361 readelf.c:18487 readelf.c:18575
+#: readelf.c:18736 readelf.c:18862 readelf.c:18950
#, c-format
msgid "<corrupt: %14ld>"
msgstr "<corrompu: %14ld>"
-#: readelf.c:18384
+#: readelf.c:18759
#, c-format
msgid "The GOT symbol offset (%lu) is greater than the symbol table size (%lu)\n"
msgstr "Le décalage du symbole GOT (%lu) est plus grand que la taille de la table des symboles (%lu)\n"
-#: readelf.c:18393
+#: readelf.c:18768
#, c-format
msgid "Too many GOT symbols: %lu\n"
msgstr "Trop de symboles GOT: %lu\n"
-#: readelf.c:18404
+#: readelf.c:18779
#, c-format
msgid ""
"\n"
@@ -10938,92 +11099,92 @@ msgstr ""
"\n"
"TOG principale :\n"
-#: readelf.c:18410
+#: readelf.c:18785
#, c-format
msgid " %*s %10s %*s Purpose\n"
msgstr " %*s %10s %*s Purpose\n"
-#: readelf.c:18412 readelf.c:18440 readelf.c:18459 readelf.c:18541
-#: readelf.c:18551
+#: readelf.c:18787 readelf.c:18815 readelf.c:18834 readelf.c:18916
+#: readelf.c:18926
msgid "Initial"
msgstr "Initial"
-#: readelf.c:18414
+#: readelf.c:18789
#, c-format
msgid " Lazy resolver\n"
msgstr " Résolution différée\n"
-#: readelf.c:18429
+#: readelf.c:18804
#, c-format
msgid " Module pointer (GNU extension)\n"
msgstr " Pointeur de module (extension GNU)\n"
-#: readelf.c:18455
+#: readelf.c:18830
#, c-format
msgid " Global entries:\n"
msgstr " Entrées globales:\n"
-#: readelf.c:18460 readelf.c:18552
+#: readelf.c:18835 readelf.c:18927
msgid "Sym.Val."
msgstr "Val.Sym."
#. Note for translators: "Ndx" = abbreviated form of "Index".
-#: readelf.c:18463 readelf.c:18552
+#: readelf.c:18838 readelf.c:18927
msgid "Ndx"
msgstr "Ndx"
-#: readelf.c:18463 readelf.c:18552
+#: readelf.c:18838 readelf.c:18927
msgid "Name"
msgstr "Nom"
-#: readelf.c:18473
+#: readelf.c:18848
#, c-format
msgid "<no dynamic symbols>"
msgstr "<pas de symbole dynamique>"
-#: readelf.c:18490
+#: readelf.c:18865
#, c-format
msgid "<symbol index %lu exceeds number of dynamic symbols>"
msgstr "<l'index de symbole %lu excède le nombre de symboles dynamiques>"
-#: readelf.c:18531
+#: readelf.c:18906
msgid "Procedure Linkage Table data"
msgstr "Données table de liaisons des procédures"
-#: readelf.c:18540
+#: readelf.c:18915
#, c-format
msgid " %*s %*s Purpose\n"
msgstr " %*s %*s Purpose\n"
-#: readelf.c:18543
+#: readelf.c:18918
#, c-format
msgid " PLT lazy resolver\n"
msgstr " Solveur différé de la PLT\n"
-#: readelf.c:18545
+#: readelf.c:18920
#, c-format
msgid " Module pointer\n"
msgstr " Pointeur du module\n"
-#: readelf.c:18548
+#: readelf.c:18923
#, c-format
msgid " Entries:\n"
msgstr " Entrées:\n"
-#: readelf.c:18562
+#: readelf.c:18937
#, c-format
msgid "<corrupt symbol index: %lu>"
msgstr "<index de symbole corrompu: %lu>"
-#: readelf.c:18601
+#: readelf.c:18976
msgid "NDS32 elf flags section"
msgstr "section de fanions elf NDS32"
-#: readelf.c:18667
+#: readelf.c:19042
msgid "liblist string table"
msgstr "table de chaînes liblist"
-#: readelf.c:18679
+#: readelf.c:19054
#, c-format
msgid ""
"\n"
@@ -11038,436 +11199,453 @@ msgstr[1] ""
"\n"
"La section « %s » de la liste des bibliothèques contient %lu entrées :\n"
-#: readelf.c:18685
+#: readelf.c:19060
msgid " Library Time Stamp Checksum Version Flags"
msgstr " Bibliothèque Horodatage Checksum Version Fanions"
-#: readelf.c:18735
+#: readelf.c:19110
msgid "NT_AUXV (auxiliary vector)"
msgstr "NT_AUXV (vecteur auxiliaire)"
-#: readelf.c:18737
+#: readelf.c:19112
msgid "NT_PRSTATUS (prstatus structure)"
msgstr "NT_PRSTATUS (structure prstatus)"
-#: readelf.c:18739
+#: readelf.c:19114
msgid "NT_FPREGSET (floating point registers)"
msgstr "NT_FPREGSET (registres en virgule flottante)"
-#: readelf.c:18741
+#: readelf.c:19116
msgid "NT_PRPSINFO (prpsinfo structure)"
msgstr "NT_PRPSINFO (structure prpsinfo)"
-#: readelf.c:18743
+#: readelf.c:19118
msgid "NT_TASKSTRUCT (task structure)"
msgstr "NT_TASKSTRUCT (structure de tâches)"
-#: readelf.c:18745
+#: readelf.c:19120
msgid "NT_GDB_TDESC (GDB XML target description)"
msgstr "NT_GDB_TDESC (description de cible XML GDB)"
-#: readelf.c:18747
+#: readelf.c:19122
msgid "NT_PRXFPREG (user_xfpregs structure)"
msgstr "NT_PRXFPREG (structure user_xfpregs)"
-#: readelf.c:18749
+#: readelf.c:19124
msgid "NT_PPC_VMX (ppc Altivec registers)"
msgstr "NT_PPC_VMX (registres ppc Altivec)"
-#: readelf.c:18751
+#: readelf.c:19126
msgid "NT_PPC_VSX (ppc VSX registers)"
msgstr "NT_PPC_VSX (registres ppc VSX)"
-#: readelf.c:18753
+#: readelf.c:19128
msgid "NT_PPC_TAR (ppc TAR register)"
msgstr "NT_PPC_TAR (registres ppc TAR)"
-#: readelf.c:18755
+#: readelf.c:19130
msgid "NT_PPC_PPR (ppc PPR register)"
msgstr "NT_PPC_PPR (registres ppc PPR)"
-#: readelf.c:18757
+#: readelf.c:19132
msgid "NT_PPC_DSCR (ppc DSCR register)"
msgstr "NT_PPC_DSCR (registres ppc DSCR)"
-#: readelf.c:18759
+#: readelf.c:19134
msgid "NT_PPC_EBB (ppc EBB registers)"
msgstr "NT_PPC_EBB (registres ppc EBB)"
-#: readelf.c:18761
+#: readelf.c:19136
msgid "NT_PPC_PMU (ppc PMU registers)"
msgstr "NT_PPC_PMU (registres ppc PMU)"
-#: readelf.c:18763
+#: readelf.c:19138
msgid "NT_PPC_TM_CGPR (ppc checkpointed GPR registers)"
msgstr "NT_PPC_TM_CGPR (registres GPR checkpointed ppc)"
-#: readelf.c:18765
+#: readelf.c:19140
msgid "NT_PPC_TM_CFPR (ppc checkpointed floating point registers)"
msgstr "NT_PPC_TM_CFPR (registres en virgule flottante checkpointed ppc)"
-#: readelf.c:18767
+#: readelf.c:19142
msgid "NT_PPC_TM_CVMX (ppc checkpointed Altivec registers)"
msgstr "NT_PPC_TM_CVMX (registres Altivec checkpointed ppc)"
-#: readelf.c:18769
+#: readelf.c:19144
msgid "NT_PPC_TM_CVSX (ppc checkpointed VSX registers)"
msgstr "NT_PPC_TM_CVSX (registres VSX checkpointed ppc)"
-#: readelf.c:18771
+#: readelf.c:19146
msgid "NT_PPC_TM_SPR (ppc TM special purpose registers)"
msgstr "NT_PPC_TM_SPR (registres ppc TM à usage spécial)"
-#: readelf.c:18773
+#: readelf.c:19148
msgid "NT_PPC_TM_CTAR (ppc checkpointed TAR register)"
msgstr "NT_PPC_TM_CTAR (registres TAR checkpointed ppc)"
-#: readelf.c:18775
+#: readelf.c:19150
msgid "NT_PPC_TM_CPPR (ppc checkpointed PPR register)"
msgstr "NT_PPC_TM_CPPR (registres PPR checkpointed ppc)"
-#: readelf.c:18777
+#: readelf.c:19152
msgid "NT_PPC_TM_CDSCR (ppc checkpointed DSCR register)"
msgstr "NT_PPC_TM_CDSCR (registres DSCR checkpointed ppc)"
-#: readelf.c:18779
+#: readelf.c:19154
msgid "NT_386_TLS (x86 TLS information)"
msgstr "NT_386_TLS (information TLS x86)"
-#: readelf.c:18781
+#: readelf.c:19156
msgid "NT_386_IOPERM (x86 I/O permissions)"
msgstr "NT_386_IOPERM (permissions E/S x86)"
-#: readelf.c:18783
+#: readelf.c:19158
msgid "NT_X86_XSTATE (x86 XSAVE extended state)"
msgstr "NT_X86_XSTATE (état étendu x86 XSAVE)"
-#: readelf.c:18785
+#: readelf.c:19160
msgid "NT_X86_CET (x86 CET state)"
msgstr "NT_X86_CET (état étendu x86)"
-#: readelf.c:18787
+#: readelf.c:19162
msgid "NT_S390_HIGH_GPRS (s390 upper register halves)"
msgstr "NT_S390_HIGH_GPRS (moitiés supérieures des registres du s390)"
-#: readelf.c:18789
+#: readelf.c:19164
msgid "NT_S390_TIMER (s390 timer register)"
msgstr "NT_S390_TIMER (registre du timer du s390)"
-#: readelf.c:18791
+#: readelf.c:19166
msgid "NT_S390_TODCMP (s390 TOD comparator register)"
msgstr "NT_S390_TODCMP (registre du comparateur TOD du s390)"
-#: readelf.c:18793
+#: readelf.c:19168
msgid "NT_S390_TODPREG (s390 TOD programmable register)"
msgstr "NT_S390_TODPREG (registre programmable du TOD du s390)"
-#: readelf.c:18795
+#: readelf.c:19170
msgid "NT_S390_CTRS (s390 control registers)"
msgstr "NT_S390_CTRS (registres de contrôle du s390)"
-#: readelf.c:18797
+#: readelf.c:19172
msgid "NT_S390_PREFIX (s390 prefix register)"
msgstr "NT_S390_PREFIX (registre de préfixe du s390)"
-#: readelf.c:18799
+#: readelf.c:19174
msgid "NT_S390_LAST_BREAK (s390 last breaking event address)"
msgstr "NT_S390_LAST_BREAK (adresse de dernier événement d'arrêt s390)"
-#: readelf.c:18801
+#: readelf.c:19176
msgid "NT_S390_SYSTEM_CALL (s390 system call restart data)"
msgstr "NT_S390_SYSTEM_CALL (données de redémarrage de l'appel système S390)"
-#: readelf.c:18803
+#: readelf.c:19178
msgid "NT_S390_TDB (s390 transaction diagnostic block)"
msgstr "NT_S390_TDB (bloc de diagnostique de transaction S390)"
-#: readelf.c:18805
+#: readelf.c:19180
msgid "NT_S390_VXRS_LOW (s390 vector registers 0-15 upper half)"
msgstr "NT_S390_VXRS_LOW (moitié supérieure des registres vectoriels 0-15 du s390)"
-#: readelf.c:18807
+#: readelf.c:19182
msgid "NT_S390_VXRS_HIGH (s390 vector registers 16-31)"
msgstr "NT_S390_VTRS_HIGH (registres vectoriels 16-31 du s390)"
-#: readelf.c:18809
+#: readelf.c:19184
msgid "NT_S390_GS_CB (s390 guarded-storage registers)"
msgstr "NT_S390_GS_CB (registres de stockage quadruple du s390)"
-#: readelf.c:18811
+#: readelf.c:19186
msgid "NT_S390_GS_BC (s390 guarded-storage broadcast control)"
msgstr "NT_S390_GS_BC (contrôle de diffusion quadruple stockage du s390)"
-#: readelf.c:18813
+#: readelf.c:19188
msgid "NT_ARM_VFP (arm VFP registers)"
msgstr "NT_ARM_VFP (registre arm VFP)"
-#: readelf.c:18815
+#: readelf.c:19190
msgid "NT_ARM_TLS (AArch TLS registers)"
msgstr "NT_ARM_TLS (registre TLS AArch)"
-#: readelf.c:18817
+#: readelf.c:19192
msgid "NT_ARM_HW_BREAK (AArch hardware breakpoint registers)"
msgstr "NT_ARM_HW_BREAK (registres de point d'arrêt matériel de AArch)"
-#: readelf.c:18819
+#: readelf.c:19194
msgid "NT_ARM_HW_WATCH (AArch hardware watchpoint registers)"
msgstr "NT_ARM_HW_WATCH (registres de point d'observation matériel de AArch)"
-#: readelf.c:18821
+#: readelf.c:19196
msgid "NT_ARM_SVE (AArch SVE registers)"
msgstr "NT_ARM_SVE (registres SVE de AArch)"
-#: readelf.c:18823
+#: readelf.c:19198
msgid "NT_ARM_PAC_MASK (AArch pointer authentication code masks)"
msgstr "NT_ARM_PAC_MASK (masques de code d'authentification de pointeur de AArch)"
-#: readelf.c:18825
+#: readelf.c:19200
+msgid "NT_ARM_PACA_KEYS (ARM pointer authentication address keys)"
+msgstr "NT_ARM_PACA_KEYS (clés d'adresses d'authentification des pointeurs ARM)"
+
+#: readelf.c:19202
+msgid "NT_ARM_PACG_KEYS (ARM pointer authentication generic keys)"
+msgstr "NT_ARM_PACG_KEYS (clés génériques d'authentification des pointeurs ARM)"
+
+#: readelf.c:19204
msgid "NT_ARM_TAGGED_ADDR_CTRL (AArch tagged address control)"
msgstr "NT_ARM_TAGGED_ADDR_CTRL (contrôle d'adresse marquée de AArch)"
-#: readelf.c:18827
+#: readelf.c:19206
+msgid "NT_ARM_PAC_ENABLED_KEYS (AArch64 pointer authentication enabled keys)"
+msgstr "NT_ARM_PAC_ENABLED_KEYS (clés actives d'authentification de pointeurs AArch64)"
+
+#: readelf.c:19208
msgid "NT_ARC_V2 (ARC HS accumulator/extra registers)"
msgstr "NT_ARC_V2 (accumulateur/registres supplémentaires de ARC HS)"
-#: readelf.c:18829
+#: readelf.c:19210
msgid "NT_RISCV_CSR (RISC-V control and status registers)"
msgstr "NT_RISCV_CSR (registres de contrôle et de statut du s390)"
-#: readelf.c:18831
+#: readelf.c:19212
msgid "NT_PSTATUS (pstatus structure)"
msgstr "NT_PSTATUS (structure pstatus)"
-#: readelf.c:18833
+#: readelf.c:19214
msgid "NT_FPREGS (floating point registers)"
msgstr "NT_FPREGS (registres en virgule flottante)"
-#: readelf.c:18835
+#: readelf.c:19216
msgid "NT_PSINFO (psinfo structure)"
msgstr "NT_PSINFO (structure psinfo)"
-#: readelf.c:18837
+#: readelf.c:19218
msgid "NT_LWPSTATUS (lwpstatus_t structure)"
msgstr "NT_LWPSTATUS (structure lwpstatus_t)"
-#: readelf.c:18839
+#: readelf.c:19220
msgid "NT_LWPSINFO (lwpsinfo_t structure)"
msgstr "NT_LWPSINFO (structure lwpsinfo_t)"
-#: readelf.c:18841
+#: readelf.c:19222
msgid "NT_WIN32PSTATUS (win32_pstatus structure)"
msgstr "NT_WIN32PSTATUS (structure win32_pstatus)"
-#: readelf.c:18843
+#: readelf.c:19224
msgid "NT_SIGINFO (siginfo_t data)"
msgstr "NT_SIGINFO (données siginfo_t)"
-#: readelf.c:18845
+#: readelf.c:19226
msgid "NT_FILE (mapped files)"
msgstr "NT_FILE (fichiers mappés)"
-#: readelf.c:18847
-msgid "NT_MEMTAG (memory tags)"
-msgstr "NT_MEMTAG (étiquettes mémoire)"
-
-#: readelf.c:18855
+#: readelf.c:19234
msgid "NT_VERSION (version)"
msgstr "NT_VERSION (version)"
-#: readelf.c:18857
+#: readelf.c:19236
msgid "NT_ARCH (architecture)"
msgstr "NT_ARCH (architecture)"
-#: readelf.c:18859
+#: readelf.c:19238
msgid "OPEN"
msgstr "OUVERT"
-#: readelf.c:18861
+#: readelf.c:19240
msgid "func"
msgstr "fonction"
-#: readelf.c:18863
+#: readelf.c:19242
msgid "GO BUILDID"
msgstr "GO BUILDID"
-#: readelf.c:18868 readelf.c:18987 readelf.c:19689 readelf.c:19857
-#: readelf.c:19934 readelf.c:20051
+#: readelf.c:19244
+msgid "FDO_PACKAGING_METADATA"
+msgstr "FDO_PACKAGING_METADATA"
+
+#: readelf.c:19249 readelf.c:19368 readelf.c:20109 readelf.c:20277
+#: readelf.c:20374 readelf.c:20502
#, c-format
msgid "Unknown note type: (0x%08x)"
msgstr "Type de note inconnu: (0x%08x)"
-#: readelf.c:18889
+#: readelf.c:19270
#, c-format
msgid " Cannot decode 64-bit note in 32-bit build\n"
msgstr " Une note 64 bits ne peut être décodée dans une construction 32 bits\n"
-#: readelf.c:18897
+#: readelf.c:19278
msgid " Malformed note - too short for header\n"
msgstr " Note mal formée – trop courte pour l'en-tête\n"
-#: readelf.c:18906
+#: readelf.c:19287
msgid " Malformed note - does not end with \\0\n"
msgstr " Note mal formée – n'est pas terminée par \\0\n"
-#: readelf.c:18919
+#: readelf.c:19300
msgid " Malformed note - too short for supplied file count\n"
msgstr " Note mal formée – trop courte pour le compteur de fichier fourni\n"
-#: readelf.c:18923
+#: readelf.c:19304
#, c-format
msgid " Page size: "
msgstr " Taille de page: "
-#: readelf.c:18927
+#: readelf.c:19308
#, c-format
msgid " %*s%*s%*s\n"
msgstr " %*s%*s%*s\n"
-#: readelf.c:18928
+#: readelf.c:19309
msgid "Start"
msgstr "Début"
-#: readelf.c:18929
+#: readelf.c:19310
msgid "End"
msgstr "Fin"
-#: readelf.c:18930
+#: readelf.c:19311
msgid "Page Offset"
msgstr "Décalage de page"
-#: readelf.c:18938
+#: readelf.c:19319
msgid " Malformed note - filenames end too early\n"
msgstr " Note mal formée – les noms de fichiers se terminent trop tôt\n"
-#: readelf.c:18970
+#: readelf.c:19351
msgid "NT_GNU_ABI_TAG (ABI version tag)"
msgstr "NT_GNU_ABI_TAG (étiquette de version ABI)"
-#: readelf.c:18972
+#: readelf.c:19353
msgid "NT_GNU_HWCAP (DSO-supplied software HWCAP info)"
msgstr "NT_GNU_HWCAP (information HWCAP du logiciel fournie par le DSO)"
-#: readelf.c:18974
+#: readelf.c:19355
msgid "NT_GNU_BUILD_ID (unique build ID bitstring)"
msgstr "NT_GNU_BUILD_ID (chaîne de bits du ID de construction unique)"
-#: readelf.c:18976
+#: readelf.c:19357
msgid "NT_GNU_GOLD_VERSION (gold version)"
msgstr "NT_GNU_GOLD_VERSION (version d'or)"
-#: readelf.c:18978
+#: readelf.c:19359
msgid "NT_GNU_PROPERTY_TYPE_0"
msgstr "NT_GNU_PROPERTY_TYPE_0"
-#: readelf.c:18980
+#: readelf.c:19361
msgid "NT_GNU_BUILD_ATTRIBUTE_OPEN"
msgstr "NT_GNU_BUILD_ATTRIBUTE_OPEN"
-#: readelf.c:18982
+#: readelf.c:19363
msgid "NT_GNU_BUILD_ATTRIBUTE_FUNC"
msgstr "NT_GNU_BUILD_ATTRIBUTE_FUNC"
-#: readelf.c:19071 readelf.c:19202 readelf.c:19239
+#: readelf.c:19452 readelf.c:19583 readelf.c:19620
#, c-format
msgid "<None>"
msgstr "<Aucun>"
-#: readelf.c:19329
+#: readelf.c:19732
#, c-format
msgid " Properties: "
msgstr " Propriétés: "
-#: readelf.c:19333
+#: readelf.c:19736
#, c-format
msgid "<corrupt GNU_PROPERTY_TYPE, size = %#lx>\n"
msgstr "<GNU_PROPERTY_TYPE corrompu, taille = %#lx>\n"
-#: readelf.c:19345
+#: readelf.c:19748
#, c-format
msgid "<corrupt descsz: %#lx>\n"
msgstr "<descsz corrompu: %#lx>\n"
-#: readelf.c:19356
+#: readelf.c:19759
#, c-format
msgid "<corrupt type (%#x) datasz: %#x>\n"
msgstr "<type (%#x) corrompu datasz: %#x>\n"
-#: readelf.c:19378 readelf.c:19432 readelf.c:19454
+#: readelf.c:19781 readelf.c:19835 readelf.c:19857
#, c-format
msgid "x86 ISA used: <corrupt length: %#x> "
msgstr "ISA x86 utilisée: <longueur corrompue: %#x> "
-#: readelf.c:19389 readelf.c:19443 readelf.c:19465
+#: readelf.c:19792 readelf.c:19846 readelf.c:19868
#, c-format
msgid "x86 ISA needed: <corrupt length: %#x> "
msgstr "ISA x86 requise: <longueur corrompue: %#x> "
-#: readelf.c:19400
+#: readelf.c:19803
#, c-format
msgid "x86 feature: <corrupt length: %#x> "
msgstr "fonctionnalité x86: <longueur corrompue: %#x> "
-#: readelf.c:19411
+#: readelf.c:19814
#, c-format
msgid "x86 feature used: <corrupt length: %#x> "
msgstr "fonctionnalité x86 utilisée: <longueur corrompue: %#x> "
-#: readelf.c:19422
+#: readelf.c:19825
#, c-format
msgid "x86 feature needed: <corrupt length: %#x> "
msgstr "fonctionnalité x86 requise: <longueur corrompue: %#x> "
-#: readelf.c:19484 readelf.c:19498 readelf.c:19506 readelf.c:19520
+#: readelf.c:19887 readelf.c:19901 readelf.c:19909 readelf.c:19940
#, c-format
msgid "<corrupt length: %#x> "
msgstr "<longueur corrompue: %#x> "
-#: readelf.c:19496
+#: readelf.c:19899
#, c-format
msgid "stack size: "
msgstr "taille de pile: "
-#: readelf.c:19516
+#: readelf.c:19922
+#, c-format
+msgid "1_needed: <corrupt length: %#x> "
+msgstr "1_requise: <longueur corrompue: %#x> "
+
+#: readelf.c:19936
#, c-format
msgid "UINT32_AND (%#x): "
msgstr "UINT32_AND (%#x): "
-#: readelf.c:19518
+#: readelf.c:19938
#, c-format
msgid "UINT32_OR (%#x): "
msgstr "UINT32_OR (%#x): "
-#: readelf.c:19530
+#: readelf.c:19950
#, c-format
msgid "<unknown type %#x data: "
msgstr "<type de donnée %#x inconnu: "
-#: readelf.c:19532
+#: readelf.c:19952
#, c-format
msgid "<processor-specific type %#x data: "
msgstr "<type de donnée %#x spécifique au processeur: "
-#: readelf.c:19534
+#: readelf.c:19954
#, c-format
msgid "<application-specific type %#x data: "
msgstr "<type de donnée %#x spécifique à l'application: "
-#: readelf.c:19563
+#: readelf.c:19983
#, c-format
msgid " Build ID: "
msgstr " ID construction: "
-#: readelf.c:19578
+#: readelf.c:19998
#, c-format
msgid " <corrupt GNU_ABI_TAG>\n"
msgstr " <GNU_ABI_TAG corrompu>\n"
-#: readelf.c:19615
+#: readelf.c:20035
#, c-format
msgid " OS: %s, ABI: %ld.%ld.%ld\n"
msgstr " OS: %s, ABI: %ld.%ld.%ld\n"
-#: readelf.c:19624
+#: readelf.c:20044
#, c-format
msgid " Version: "
msgstr " Version: "
@@ -11477,292 +11655,317 @@ msgstr " Version: "
#. is a series of entries, where each entry is a single byte followed
#. by a nul terminated string. The byte gives the bit number to test
#. if enabled in the bitmask.
-#: readelf.c:19640
+#: readelf.c:20060
#, c-format
msgid " Hardware Capabilities: "
msgstr " Capacités Matérielles: "
-#: readelf.c:19643
+#: readelf.c:20063
msgid "<corrupt GNU_HWCAP>\n"
msgstr "<GNU_HWCAP corrompu>\n"
-#: readelf.c:19648
+#: readelf.c:20068
#, c-format
msgid "num entries: %ld, enabled mask: %lx\n"
msgstr "nbre entrées: %ld, masque activation: %lx\n"
-#: readelf.c:19664
+#: readelf.c:20084
#, c-format
msgid " Description data: "
msgstr " Données description: "
-#: readelf.c:19682
+#: readelf.c:20102
msgid "Alignment of 8-byte objects"
msgstr "Alignement d'objets de 8 octets"
-#: readelf.c:19683
+#: readelf.c:20103
msgid "Sizeof double and long double"
msgstr "Sizeof double et double long"
-#: readelf.c:19684
+#: readelf.c:20104
msgid "Type of FPU support needed"
msgstr "Type de support coprocesseur nécessaire"
-#: readelf.c:19685
+#: readelf.c:20105
msgid "Use of SIMD instructions"
msgstr "Utilisation d'instructions SIMD"
-#: readelf.c:19686
+#: readelf.c:20106
msgid "Use of cache"
msgstr "Utilisation de la cache"
-#: readelf.c:19687
+#: readelf.c:20107
msgid "Use of MMU"
msgstr "Utilisation du MMU"
-#: readelf.c:19723
+#: readelf.c:20143
#, c-format
msgid "4-bytes\n"
msgstr "4-octets\n"
-#: readelf.c:19724
+#: readelf.c:20144
#, c-format
msgid "8-bytes\n"
msgstr "8-octets\n"
-#: readelf.c:19731
+#: readelf.c:20151
#, c-format
msgid "FPU-2.0\n"
msgstr "FPU-2.0\n"
-#: readelf.c:19732
+#: readelf.c:20152
#, c-format
msgid "FPU-3.0\n"
msgstr "FPU-3.0\n"
-#: readelf.c:19741
+#: readelf.c:20161
#, c-format
msgid "yes\n"
msgstr "oui\n"
-#: readelf.c:19751
+#: readelf.c:20171
#, c-format
msgid "unknown value: %x\n"
msgstr "valeur inconnue: %x\n"
-#: readelf.c:19807
+#: readelf.c:20227
msgid "NT_THRMISC (thrmisc structure)"
msgstr "NT_THRMISC (structure thrmisc)"
-#: readelf.c:19809
+#: readelf.c:20229
msgid "NT_PROCSTAT_PROC (proc data)"
msgstr "NT_PROCSTAT_PROC (données processus)"
-#: readelf.c:19811
+#: readelf.c:20231
msgid "NT_PROCSTAT_FILES (files data)"
msgstr "NT_PROCSTAT_FILES (données fichiers)"
-#: readelf.c:19813
+#: readelf.c:20233
msgid "NT_PROCSTAT_VMMAP (vmmap data)"
msgstr "NT_PROCSTAT_VMMAP (données vmmap)"
-#: readelf.c:19815
+#: readelf.c:20235
msgid "NT_PROCSTAT_GROUPS (groups data)"
msgstr "NT_PROCSTAT_GROUPS (données groupes)"
-#: readelf.c:19817
+#: readelf.c:20237
msgid "NT_PROCSTAT_UMASK (umask data)"
msgstr "NT_PROCSTAT_UMASK (données umask)"
-#: readelf.c:19819
+#: readelf.c:20239
msgid "NT_PROCSTAT_RLIMIT (rlimit data)"
msgstr "NT_PROCSTAT_RLIMIT (données rlimit)"
-#: readelf.c:19821
+#: readelf.c:20241
msgid "NT_PROCSTAT_OSREL (osreldate data)"
msgstr "NT_PROCSTAT_OSREL (données osreldate)"
-#: readelf.c:19823
+#: readelf.c:20243
msgid "NT_PROCSTAT_PSSTRINGS (ps_strings data)"
msgstr "NT_PROCSTAT_PSSTRINGS (données ps_strings)"
-#: readelf.c:19825
+#: readelf.c:20245
msgid "NT_PROCSTAT_AUXV (auxv data)"
msgstr "NT_PROCSTAT_AUXV (données auxv)"
-#: readelf.c:19827
+#: readelf.c:20247
msgid "NT_PTLWPINFO (ptrace_lwpinfo structure)"
msgstr "NT_PTLWPINFO (structure ptrace_lwpinfo)"
#. NetBSD core "procinfo" structure.
-#: readelf.c:19841
+#: readelf.c:20261
msgid "NetBSD procinfo structure"
-msgstr "structure proinfo NetBSD"
+msgstr "structure procinfo NetBSD"
-#: readelf.c:19844
+#: readelf.c:20264
msgid "NetBSD ELF auxiliary vector data"
msgstr "données de vecteur auxiliaire ELF NetBSD"
-#: readelf.c:19847
+#: readelf.c:20267
msgid "PT_LWPSTATUS (ptrace_lwpstatus structure)"
msgstr "PT_LWPSTATUS (structure ptrace_lwpstatus)"
-#: readelf.c:19876 readelf.c:19893 readelf.c:19907
+#: readelf.c:20296 readelf.c:20313 readelf.c:20327
msgid "PT_GETREGS (reg structure)"
msgstr "PT_GETREGS (structure reg)"
-#: readelf.c:19878 readelf.c:19895 readelf.c:19909
+#: readelf.c:20298 readelf.c:20315 readelf.c:20329
msgid "PT_GETFPREGS (fpreg structure)"
msgstr "PT_GETFPPREGS (structure fpreg)"
-#: readelf.c:19891
+#: readelf.c:20311
msgid "PT___GETREGS40 (old reg structure)"
msgstr "PT___GETREGS40 (ancienne structure reg)"
-#: readelf.c:19928
+#: readelf.c:20346
+msgid "OpenBSD procinfo structure"
+msgstr "structure procinfo OpenBSD"
+
+#: readelf.c:20348
+msgid "OpenBSD ELF auxiliary vector data"
+msgstr "données de vecteur auxiliaire ELF OpenBSD"
+
+#: readelf.c:20350
+msgid "OpenBSD regular registers"
+msgstr "registres ordinaires OpenBSD"
+
+#: readelf.c:20352
+msgid "OpenBSD floating point registers"
+msgstr "registres en virgule flottante OpenBSD"
+
+#: readelf.c:20354
+msgid "OpenBSD window cookie"
+msgstr "cookie de fenêtre OpenBSD"
+
+#: readelf.c:20368
msgid "NT_STAPSDT (SystemTap probe descriptors)"
msgstr "NT_STAPSDT (descripteurs de sonde SystemTap)"
-#: readelf.c:19996
+#: readelf.c:20436
#, c-format
msgid " Provider: %s\n"
msgstr " Fournisseur: %s\n"
-#: readelf.c:19997
+#: readelf.c:20437
#, c-format
msgid " Name: %s\n"
msgstr " Nom: %s\n"
-#: readelf.c:19998
+#: readelf.c:20438
#, c-format
msgid " Location: "
msgstr " Emplacement: "
-#: readelf.c:20000
+#: readelf.c:20440
#, c-format
msgid ", Base: "
msgstr ", Base: "
-#: readelf.c:20002
+#: readelf.c:20442
#, c-format
msgid ", Semaphore: "
msgstr ", Sémaphore: "
-#: readelf.c:20005
+#: readelf.c:20445
#, c-format
msgid " Arguments: %s\n"
msgstr " Arguments: %s\n"
-#: readelf.c:20010
+#: readelf.c:20450
#, c-format
msgid " <corrupt - note is too small>\n"
msgstr " <corrompu - la note est trop petite>\n"
-#: readelf.c:20011
+#: readelf.c:20451
msgid "corrupt stapdt note - the data size is too small\n"
msgstr "note stapdt corrompue - la taille des données est trop petite\n"
-#: readelf.c:20023
+#: readelf.c:20460
+#, c-format
+msgid " Packaging Metadata: %.*s\n"
+msgstr " Métadonnées d'empaquetage : %.*s\n"
+
+#: readelf.c:20474
msgid "NT_VMS_MHD (module header)"
msgstr "NT_VMS_MHD (en-tête de module)"
-#: readelf.c:20025
+#: readelf.c:20476
msgid "NT_VMS_LNM (language name)"
msgstr "NT_VMS_LNM (nom du langage)"
-#: readelf.c:20027
+#: readelf.c:20478
msgid "NT_VMS_SRC (source files)"
msgstr "NT_VMS_SRC (fichiers source)"
-#: readelf.c:20031
+#: readelf.c:20482
msgid "NT_VMS_EIDC (consistency check)"
msgstr "NT_VMS_EIDC (vérification de cohérence)"
-#: readelf.c:20033
+#: readelf.c:20484
msgid "NT_VMS_FPMODE (FP mode)"
msgstr "NT_VMS_FPMODE (mode FP)"
-#: readelf.c:20037
+#: readelf.c:20488
msgid "NT_VMS_IMGNAM (image name)"
msgstr "NT_VMS_IMGNAM (nom de l'image)"
-#: readelf.c:20039
+#: readelf.c:20490
msgid "NT_VMS_IMGID (image id)"
msgstr "NT_VMS_IMGID (id de l'image)"
-#: readelf.c:20041
+#: readelf.c:20492
msgid "NT_VMS_LINKID (link id)"
msgstr "NT_VMS_LINKID (id du lien)"
-#: readelf.c:20043
+#: readelf.c:20494
msgid "NT_VMS_IMGBID (build id)"
msgstr "NT_VMS_IMGBID (id de construction)"
-#: readelf.c:20045
+#: readelf.c:20496
msgid "NT_VMS_GSTNAM (sym table name)"
msgstr "NT_VMS_GSTNAM (nom de la table des symboles)"
-#: readelf.c:20072
+#: readelf.c:20523
#, c-format
msgid " Creation date : %.17s\n"
msgstr " Date création : %.17s\n"
-#: readelf.c:20073
+#: readelf.c:20524
#, c-format
msgid " Last patch date: %.17s\n"
msgstr " Date dernier correctif: %.17s\n"
-#: readelf.c:20076
+#: readelf.c:20527
#, c-format
msgid " Module name : %s\n"
msgstr " Nom du module : %s\n"
-#: readelf.c:20078
+#: readelf.c:20529
#, c-format
msgid " Module version : %s\n"
msgstr " Version du module: %s\n"
-#: readelf.c:20080 readelf.c:20085
+#: readelf.c:20531 readelf.c:20536
#, c-format
msgid " Module version : <missing>\n"
msgstr " Version du module: <manquante>\n"
-#: readelf.c:20084
+#: readelf.c:20535
#, c-format
msgid " Module name : <missing>\n"
msgstr " Nom du module : <manquant>\n"
-#: readelf.c:20090
+#: readelf.c:20541
#, c-format
msgid " Language: %.*s\n"
msgstr " Langage: %.*s\n"
-#: readelf.c:20095
+#: readelf.c:20546
#, c-format
msgid " Floating Point mode: "
msgstr " Mode virgule flottante: "
-#: readelf.c:20105
+#: readelf.c:20556
#, c-format
msgid " Link time: "
msgstr " Heure du lien: "
-#: readelf.c:20116
+#: readelf.c:20567
#, c-format
msgid " Patch time: "
msgstr " Heure correctif: "
-#: readelf.c:20130
+#: readelf.c:20581
#, c-format
msgid " Major id: %u, minor id: %u\n"
msgstr " Id majeur: %u, id mineur: %u\n"
-#: readelf.c:20133
+#: readelf.c:20584
#, c-format
msgid " Last modified : "
msgstr " Dernière modification: "
-#: readelf.c:20136
+#: readelf.c:20587
#, c-format
msgid ""
"\n"
@@ -11771,223 +11974,223 @@ msgstr ""
"\n"
" Fanions de lien : "
-#: readelf.c:20139
+#: readelf.c:20590
#, c-format
msgid " Header flags: 0x%08x\n"
msgstr " Fanions en-tête: 0x%08x\n"
-#: readelf.c:20141
+#: readelf.c:20592
#, c-format
msgid " Image id : %.*s\n"
msgstr " Id image : %.*s\n"
-#: readelf.c:20146
+#: readelf.c:20597
#, c-format
msgid " Image name: %.*s\n"
msgstr " Nom image : %.*s\n"
-#: readelf.c:20150
+#: readelf.c:20601
#, c-format
msgid " Global symbol table name: %.*s\n"
msgstr " Nom table symboles globale: %.*s\n"
-#: readelf.c:20154
+#: readelf.c:20605
#, c-format
msgid " Image id: %.*s\n"
msgstr " Id image: %.*s\n"
-#: readelf.c:20158
+#: readelf.c:20609
#, c-format
msgid " Linker id: %.*s\n"
msgstr " Id lieur: %.*s\n"
-#: readelf.c:20168
+#: readelf.c:20619
#, c-format
msgid " <corrupt - data size is too small>\n"
msgstr " <corrompu - la taille des données est trop petite>\n"
-#: readelf.c:20169
+#: readelf.c:20620
msgid "corrupt IA64 note: data size is too small\n"
msgstr "note IA64 corrompue : la taille des données est trop petite\n"
-#: readelf.c:20336 readelf.c:20344
+#: readelf.c:20787 readelf.c:20795
#, c-format
msgid " Applies to region from %#lx to %#lx\n"
msgstr " Est appliqué à la région depuis %#lx à %#lx\n"
-#: readelf.c:20339 readelf.c:20346
+#: readelf.c:20790 readelf.c:20797
#, c-format
msgid " Applies to region from %#lx\n"
msgstr " Est appliqué à la région depuis %#lx\n"
-#: readelf.c:20366
+#: readelf.c:20817
#, c-format
msgid " <invalid description size: %lx>\n"
msgstr " <taille de description invalide: %lx>\n"
-#: readelf.c:20367
+#: readelf.c:20818
#, c-format
msgid " <invalid descsz>"
msgstr " <descsz invalide>"
-#: readelf.c:20393
+#: readelf.c:20844
#, c-format
msgid "Gap in build notes detected from %#lx to %#lx\n"
msgstr "Trou détecté dans les notes de compilation depuis %#lx à %#lx\n"
-#: readelf.c:20396 readelf.c:20407
+#: readelf.c:20847 readelf.c:20858
#, c-format
msgid " Applies to region from %#lx"
msgstr " Est appliqué à la la région depuis %#lx"
-#: readelf.c:20401 readelf.c:20412
+#: readelf.c:20852 readelf.c:20863
#, c-format
msgid " to %#lx"
msgstr " à %#lx"
-#: readelf.c:20418
+#: readelf.c:20869
#, c-format
msgid " (%s)"
msgstr " (%s)"
-#: readelf.c:20439 readelf.c:20454
+#: readelf.c:20890 readelf.c:20905
#, c-format
msgid "corrupt name field in GNU build attribute note: size = %ld\n"
msgstr "champ de nom corrompu dans la note d'attribut de compilation GNU: taille = %ld\n"
-#: readelf.c:20440 readelf.c:20455
+#: readelf.c:20891 readelf.c:20906
msgid " <corrupt name>"
msgstr " <nom corrompu>"
-#: readelf.c:20474
+#: readelf.c:20925
#, c-format
msgid "unrecognised attribute type in name field: %d\n"
msgstr "type d'attribut non reconnu dans le champ du nom: %d\n"
-#: readelf.c:20475
+#: readelf.c:20926
msgid "<unknown name type>"
msgstr "<type de nom inconnu>"
-#: readelf.c:20485
+#: readelf.c:20936
msgid "<version>"
msgstr "<version>"
-#: readelf.c:20490
+#: readelf.c:20941
msgid "<stack prot>"
msgstr "<protection de la pile>"
-#: readelf.c:20495
+#: readelf.c:20946
msgid "<relro>"
msgstr "<relro>"
-#: readelf.c:20500
+#: readelf.c:20951
msgid "<stack size>"
msgstr "<taille de la pile>"
-#: readelf.c:20505
+#: readelf.c:20956
msgid "<tool>"
msgstr "<outil>"
-#: readelf.c:20510
+#: readelf.c:20961
msgid "<ABI>"
msgstr "<ABI>"
-#: readelf.c:20515
+#: readelf.c:20966
msgid "<PIC>"
msgstr "<PIC>"
-#: readelf.c:20520
+#: readelf.c:20971
msgid "<short enum>"
msgstr "<enum court>"
-#: readelf.c:20539
+#: readelf.c:20990
#, c-format
msgid "unrecognised byte in name field: %d\n"
msgstr "octet non reconnu dans le champ du nom: %d\n"
-#: readelf.c:20540
+#: readelf.c:20991
#, c-format
msgid "<unknown:_%d>"
msgstr "<inconnu:_%d>"
-#: readelf.c:20552
+#: readelf.c:21003
#, c-format
msgid "attribute does not have an expected type (%c)\n"
msgstr "l'attribut n'a pas un type attendu (%c)\n"
-#: readelf.c:20556
+#: readelf.c:21007
#, c-format
msgid "corrupt name field: namesz: %lu but parsing gets to %ld\n"
msgstr "champ de nom corrompu: namesz: %lu mais l'analyse abouti à %ld\n"
-#: readelf.c:20583
+#: readelf.c:21034
#, c-format
msgid "corrupt numeric name field: too many bytes in the value: %x\n"
msgstr "champ de nom numérique corrompu: trop d'octets dans la valeur: %x\n"
-#: readelf.c:20755
+#: readelf.c:21212
#, c-format
msgid " description data: "
msgstr " données de description: "
-#: readelf.c:20797
+#: readelf.c:21254
msgid "notes"
msgstr "notes"
-#: readelf.c:20809
+#: readelf.c:21266
#, c-format
msgid "Displaying notes found in: %s\n"
msgstr "Affichage des notes trouvées dans: %s\n"
-#: readelf.c:20811
+#: readelf.c:21268
#, c-format
msgid "Displaying notes found at file offset 0x%08lx with length 0x%08lx:\n"
msgstr "Affichage des notes trouvées au décalage de fichier 0x%08lx avec une longueur de 0x%08lx:\n"
-#: readelf.c:20823
+#: readelf.c:21280
#, c-format
msgid "Corrupt note: alignment %ld, expecting 4 or 8\n"
msgstr "Note corrompue: alignement %ld, attendait 4 ou 8\n"
-#: readelf.c:20829
+#: readelf.c:21286
#, c-format
msgid " %-20s %-10s\tDescription\n"
msgstr " %-20s %-10s\tDescription\n"
-#: readelf.c:20829
+#: readelf.c:21286
msgid "Owner"
msgstr "Propriétaire"
-#: readelf.c:20829
+#: readelf.c:21286
msgid "Data size"
msgstr "Taille des données"
-#: readelf.c:20847 readelf.c:20876
+#: readelf.c:21304 readelf.c:21333
#, c-format
msgid "Corrupt note: only %ld byte remains, not enough for a full note\n"
msgid_plural "Corrupt note: only %ld bytes remain, not enough for a full note\n"
msgstr[0] "Note corrompue: seul %ld octet restant, pas assez pour une note compète\n"
msgstr[1] "Note corrompue: seuls %ld octets restants, pas assez pour une note compète\n"
-#: readelf.c:20904
+#: readelf.c:21361
#, c-format
msgid "note with invalid namesz and/or descsz found at offset 0x%lx\n"
msgstr "note avec un namesz ou un descsz invalide rencontrée à l'offset 0x%lx\n"
-#: readelf.c:20906
+#: readelf.c:21363
#, c-format
msgid " type: 0x%lx, namesize: 0x%08lx, descsize: 0x%08lx, alignment: %u\n"
msgstr " type: 0x%lx, taille des noms: 0x%08lx, taille de descriptions: 0x%08lx, alignement: %u\n"
-#: readelf.c:20924
+#: readelf.c:21381
msgid "Out of memory allocating space for inote name\n"
msgstr "Mémoire épuisée par l'allocation du nom inote\n"
-#: readelf.c:20984
+#: readelf.c:21441
msgid "v850 notes"
msgstr "notes v850"
-#: readelf.c:20991
+#: readelf.c:21448
#, c-format
msgid ""
"\n"
@@ -11996,42 +12199,42 @@ msgstr ""
"\n"
"Affichage du contenu de la section de notes du V850 de Renesas au décalage 0x%lx avec une longueur de 0x%lx:\n"
-#: readelf.c:21008
+#: readelf.c:21465
#, c-format
msgid "Corrupt note: name size is too big: %lx\n"
msgstr "Note corrompue: la taille du nom est trop grande: %lx\n"
-#: readelf.c:21018
+#: readelf.c:21475
#, c-format
msgid "corrupt descsz found in note at offset 0x%lx\n"
msgstr "descsz corrompu trouvé dans la note à l'offset 0x%lx\n"
-#: readelf.c:21020 readelf.c:21033
+#: readelf.c:21477 readelf.c:21490
#, c-format
msgid " type: 0x%lx, namesize: 0x%lx, descsize: 0x%lx\n"
msgstr " type: 0x%lx, taille des noms: 0x%lx, taille de descriptions: 0x%lx\n"
-#: readelf.c:21031
+#: readelf.c:21488
#, c-format
msgid "corrupt namesz found in note at offset 0x%lx\n"
msgstr "namesz corrompu repéré dans la note au décalage 0x%lx\n"
-#: readelf.c:21110
+#: readelf.c:21567
#, c-format
msgid "No notes found in linked file '%s'.\n"
msgstr "Pas de notes trouvées dans le fichier lié « %s ».\n"
-#: readelf.c:21113
+#: readelf.c:21570
#, c-format
msgid "No notes found file.\n"
msgstr "Pas de note trouvée dans le fichier.\n"
-#: readelf.c:21122
+#: readelf.c:21579
#, c-format
msgid " Unknown GNU attribute: %s\n"
msgstr " Attribut GNU inconnu: %s\n"
-#: readelf.c:21270
+#: readelf.c:21727
msgid ""
"This instance of readelf has been built without support for a\n"
"64 bit data type and so it cannot read 64 bit ELF files.\n"
@@ -12039,12 +12242,12 @@ msgstr ""
"Cette instance de readelf a été construite sans soutien pour des\n"
"types de données de 64 bits et ne peut donc lire des fichiers de 64 bits ELF.\n"
-#: readelf.c:21440
+#: readelf.c:21897
#, c-format
msgid "%s: Failed to read file header\n"
msgstr "%s: Échec de lecture de l'en-tête du fichier\n"
-#: readelf.c:21455
+#: readelf.c:21912
#, c-format
msgid ""
"\n"
@@ -12053,72 +12256,72 @@ msgstr ""
"\n"
"Fichier: %s\n"
-#: readelf.c:21616
+#: readelf.c:22073
#, c-format
msgid "%s: unable to dump the index as none was found\n"
msgstr "%s: impossible de sortir l'index car il n'y en a pas\n"
-#: readelf.c:21623
+#: readelf.c:22080
#, c-format
msgid "Index of archive %s: (%lu entries, 0x%lx bytes in the symbol table)\n"
msgstr "Index de l'archive %s: (%lu entrées, 0x%lx octets dans la table des symboles)\n"
-#: readelf.c:21647
+#: readelf.c:22104
#, c-format
msgid "Contents of binary %s at offset "
msgstr "Contenu du binaire %s au décalage "
-#: readelf.c:21659
+#: readelf.c:22116
#, c-format
msgid "%s: end of the symbol table reached before the end of the index\n"
msgstr "%s: fin de la table des symboles atteinte avant la fin de l'index\n"
-#: readelf.c:21678
+#: readelf.c:22135
#, c-format
msgid "%s: %ld byte remains in the symbol table, but without corresponding entries in the index table\n"
msgid_plural "%s: %ld bytes remain in the symbol table, but without corresponding entries in the index table\n"
msgstr[0] "%s: %ld octet reste dans la table des symboles mais sans entrée correspondante dans la table d'index\n"
msgstr[1] "%s: %ld octets restent dans la table des symboles mais sans entrée correspondante dans la table d'index\n"
-#: readelf.c:21691
+#: readelf.c:22148
#, c-format
msgid "%s: failed to seek back to start of object files in the archive\n"
msgstr "%s: échec du retour au début des fichiers objets dans l'archive\n"
-#: readelf.c:21785 readelf.c:21904
+#: readelf.c:22240 readelf.c:22359
#, c-format
msgid "Input file '%s' is not readable.\n"
msgstr "Fichier d'entrée « %s » n'est pas lisible.\n"
-#: readelf.c:21813
+#: readelf.c:22268
#, c-format
msgid "%s: contains corrupt thin archive: %s\n"
msgstr "%s: contient une archive légère corrompue: %s\n"
-#: readelf.c:21831
+#: readelf.c:22286
#, c-format
msgid "%s: failed to seek to archive member.\n"
msgstr "%s: échec de repérage du membre de l'archive.\n"
-#: readelf.c:21896
+#: readelf.c:22351
msgid "Out of memory allocating file data structure\n"
msgstr "Mémoire épuisée lors de l'allocation de la structure de données du fichier\n"
-#: readelf.c:21933
+#: readelf.c:22388
#, c-format
msgid "File %s is not an archive so its index cannot be displayed.\n"
msgstr "Le fichier %s n'est pas une archive donc son index ne peut pas être affiché.\n"
-#: readelf.c:22004
+#: readelf.c:22459
msgid "Nothing to do.\n"
msgstr "Rien à faire.\n"
-#: rename.c:198
+#: rename.c:200
#, c-format
msgid "%s: cannot set time: %s"
msgstr "%s: ne peut initialiser l'heure : %s"
-#: rename.c:217
+#: rename.c:219
#, c-format
msgid "unable to copy file '%s'; reason: %s"
msgstr "incapable de copier le fichier « %s » pour la raison : %s"
@@ -12730,77 +12933,77 @@ msgstr "Nombre de type de fichier %d hors limite\n"
msgid "Type index number %d out of range\n"
msgstr "Nombre de type index %d hors limite\n"
-#: stabs.c:3506
+#: stabs.c:3507
#, c-format
msgid "Unrecognized XCOFF type %d\n"
msgstr "Type XCOFF non reconnu %d\n"
-#: stabs.c:3799
+#: stabs.c:3798
#, c-format
msgid "bad mangled name `%s'\n"
msgstr "mauvais codage par mutilation du nom « %s »\n"
-#: stabs.c:3894
+#: stabs.c:3893
#, c-format
msgid "no argument types in mangled string\n"
msgstr "aucun type d'argument dans la chaîne encodé par mutilation\n"
-#: stabs.c:5242
+#: stabs.c:5241
#, c-format
msgid "Demangled name is not a function\n"
msgstr "nom démutilé n'est pas une fonction\n"
-#: stabs.c:5284
+#: stabs.c:5283
#, c-format
msgid "Unexpected type in v3 arglist demangling\n"
msgstr "Type inattendu dans la arglist v3 en démutilation\n"
-#: stabs.c:5356
+#: stabs.c:5355
#, c-format
msgid "Unrecognized demangle component %d\n"
msgstr "Composant de démutilation non reconnu %d\n"
-#: stabs.c:5408
+#: stabs.c:5407
#, c-format
msgid "Failed to print demangled template\n"
msgstr "Échec d'affichage du modèle de démutilation\n"
-#: stabs.c:5488
+#: stabs.c:5487
#, c-format
msgid "Couldn't get demangled builtin type\n"
msgstr "N'a pu obtenir le type de démutilation construit\n"
-#: stabs.c:5537
+#: stabs.c:5536
#, c-format
msgid "Unexpected demangled varargs\n"
msgstr "Varargs inattendu de démutilation\n"
-#: stabs.c:5544
+#: stabs.c:5543
#, c-format
msgid "Unrecognized demangled builtin type\n"
msgstr "type de construit de démutilation non reconnu\n"
-#: strings.c:198 strings.c:265
+#: strings.c:229 strings.c:316
#, c-format
msgid "invalid integer argument %s"
msgstr "argument en valeur entière invalide %s"
-#: strings.c:268
+#: strings.c:319
#, c-format
msgid "invalid minimum string length %d"
msgstr "longueur minimum de chaîne %d invalide"
-#: strings.c:339
+#: strings.c:390
#, c-format
msgid "%s: Reading section %s failed: %s"
msgstr "%s: La lecture de la section %s a échouée: %s"
-#: strings.c:678
+#: strings.c:1313
#, c-format
msgid " Display printable strings in [file(s)] (stdin by default)\n"
msgstr "Afficher les chaînes imprimables des [fichier(s)] (stdin par défaut)\n"
-#: strings.c:682
+#: strings.c:1317
#, c-format
msgid ""
" -a - --all Scan the entire file, not just the data section [default]\n"
@@ -12809,7 +13012,7 @@ msgstr ""
" -a - --all Scruter entièrement le fichier, pas seulement les sections de données [défaut]\n"
" -d --data Ne scruter que les sections de données du fichier\n"
-#: strings.c:686
+#: strings.c:1321
#, c-format
msgid ""
" -a - --all Scan the entire file, not just the data section\n"
@@ -12818,32 +13021,36 @@ msgstr ""
" -a - --all Scruter entièrement le fichier, pas seulement les sections de données\n"
" -d --data Ne scruter que les sections de données du fichier [défaut]\n"
-#: strings.c:690
+#: strings.c:1325
#, c-format
msgid ""
" -f --print-file-name Print the name of the file before each string\n"
-" -n --bytes=[number] Locate & print any NUL-terminated sequence of at\n"
-" -<number> least [number] characters (default 4).\n"
+" -n <number> Locate & print any sequence of at least <number>\n"
+" --bytes=<number> displayable characters. (The default is 4).\n"
" -t --radix={o,d,x} Print the location of the string in base 8, 10 or 16\n"
" -w --include-all-whitespace Include all whitespace as valid string characters\n"
" -o An alias for --radix=o\n"
" -T --target=<BFDNAME> Specify the binary file format\n"
" -e --encoding={s,S,b,l,B,L} Select character size and endianness:\n"
" s = 7-bit, S = 8-bit, {b,l} = 16-bit, {B,L} = 32-bit\n"
+" --unicode={default|show|invalid|hex|escape|highlight}\n"
+" -U {d|s|i|x|e|h} Specify how to treat UTF-8 encoded unicode characters\n"
" -s --output-separator=<string> String used to separate strings in output.\n"
" @<file> Read options from <file>\n"
" -h --help Display this information\n"
" -v -V --version Print the program's version number\n"
msgstr ""
" -f --print-file-name Afficher le nom du fichier avant chaque chaîne\n"
-" -n --bytes=[nombre] Localiser et afficher toute séquence terminée par NUL d'au\n"
-" -<nombre> moins [nombre] caractères (par défaut 4).\n"
+" -n <nombre> Localiser et afficher toute séquence d'au moins\n"
+" --bytes=<nombre> <nombre> caractères affichables (par défaut 4).\n"
" -t --radix={o,d,x} Afficher la position de la chaîne en base 8, 10 ou 16\n"
" -o Un alias pour --radix=o\n"
" -T --target=<NOMBFD> Spécifier le format du fichier binaire\n"
" -e --encoding={s,S,b,l,B,L} Sélectionner la taille des caractères et le\n"
" système de poids fort ou faible :\n"
" s = 7-bits, S = 8-bits, {b,l} = 16-bits, {B,L} = 32-bits\n"
+" --unicode={default|show|invalid|hex|escape|highlight}\n"
+" -U {d|s|i|x|e|h} Spécifier comment traiter les caractères unicode encodés en UTF-8\n"
" -s --output-separator=<chaîne> Chaîne utilisée pour séparer les chaînes en sortie.\n"
" @<fichier> Lire les options à partir du <fichier>\n"
" -h --help Afficher l'aide-mémoire\n"
@@ -12853,54 +13060,55 @@ msgstr ""
msgid "*undefined*"
msgstr "*non défini*"
-#: sysdump.c:57
+#. PR 28564
+#: sysdump.c:57 sysdump.c:66
msgid "*corrupt*"
msgstr "*corrompu*"
-#: sysdump.c:125
+#: sysdump.c:131
#, c-format
msgid "SUM IS %x\n"
msgstr "SOMME EST %x\n"
#. PR 17512: file: id:000001,src:000002,op:flip1,pos:45.
#. Prevent infinite loops re-reading beyond the end of the buffer.
-#: sysdump.c:163
+#: sysdump.c:169
msgid "ICE: getINT: Out of buffer space"
msgstr "ICE: getINT: À cours d'espace tampon"
-#: sysdump.c:188
+#: sysdump.c:194
#, c-format
msgid "Unsupported read size: %d"
msgstr "Taille de lecture non supportée: %d"
-#: sysdump.c:499
+#: sysdump.c:505
#, c-format
msgid "GOT A %x\n"
msgstr "OBTENU %x\n"
-#: sysdump.c:517
+#: sysdump.c:523
#, c-format
msgid "WANTED %x!!\n"
msgstr "REQUIS %x !!\n"
-#: sysdump.c:535
+#: sysdump.c:541
msgid "SYMBOL INFO"
msgstr "INFO SYMBOLE"
-#: sysdump.c:553
+#: sysdump.c:559
msgid "DERIVED TYPE"
msgstr "TYPE DÉRIVÉ"
-#: sysdump.c:610
+#: sysdump.c:616
msgid "MODULE***\n"
msgstr "MODULE***\n"
-#: sysdump.c:643
+#: sysdump.c:649
#, c-format
msgid "Print a human readable interpretation of a SYSROFF object file\n"
msgstr "Afficher dans un format humainement lisible l'interprétation du fichier objet SYSROFF\n"
-#: sysdump.c:644
+#: sysdump.c:650
#, c-format
msgid ""
" The options are:\n"
@@ -12911,7 +13119,7 @@ msgstr ""
" -h --help Afficher l'aide-mémoire\n"
" -v --version Afficher le nom et la version du logiciel\n"
-#: sysdump.c:710
+#: sysdump.c:716
#, c-format
msgid "cannot open input file %s"
msgstr "ne peut ouvrir le fichier d'entrée %s"
@@ -13000,8 +13208,8 @@ msgstr "\t<descripteur IA64 corrompu>\n"
#: version.c:34
#, c-format
-msgid "Copyright (C) 2021 Free Software Foundation, Inc.\n"
-msgstr "Copyright © 2021 Free Software Foundation, Inc.\n"
+msgid "Copyright (C) 2022 Free Software Foundation, Inc.\n"
+msgstr "Copyright © 2022 Free Software Foundation, Inc.\n"
#: version.c:35
#, c-format
@@ -13258,6 +13466,146 @@ msgstr "stab_int_type: mauvaise taille %u"
msgid "%s: warning: unknown size for field `%s' in struct"
msgstr "%s: AVERTISSEMENT: taille inconnue pour le champ « %s » dans le struct"
+#~ msgid "There is a hole [0x%lx - 0x%lx] in .debug_loc section.\n"
+#~ msgstr "Il y a un trou [0x%lx - 0x%lx] dans la section .debug_loc.\n"
+
+#~ msgid "There is an overlap [0x%lx - 0x%lx] in .debug_loc section.\n"
+#~ msgstr "Il y a un chevauchement [0x%lx - 0x%lx] dans la section .debug_loc.\n"
+
+#~ msgid ""
+#~ " The options are:\n"
+#~ " -a, --debug-syms Display debugger-only symbols\n"
+#~ " -A, --print-file-name Print name of the input file before every symbol\n"
+#~ " -B Same as --format=bsd\n"
+#~ " -C, --demangle[=STYLE] Decode low-level symbol names into user-level names\n"
+#~ " The STYLE, if specified, can be `auto' (the default),\n"
+#~ " `gnu', `lucid', `arm', `hp', `edg', `gnu-v3', `java'\n"
+#~ " or `gnat'\n"
+#~ " --no-demangle Do not demangle low-level symbol names\n"
+#~ " --recurse-limit Enable a demangling recursion limit. This is the default.\n"
+#~ " --no-recurse-limit Disable a demangling recursion limit.\n"
+#~ " -D, --dynamic Display dynamic symbols instead of normal symbols\n"
+#~ " --defined-only Display only defined symbols\n"
+#~ " -e (ignored)\n"
+#~ " -f, --format=FORMAT Use the output format FORMAT. FORMAT can be `bsd',\n"
+#~ " `sysv', `posix' or 'just-symbols'. The default is `bsd'\n"
+#~ " -g, --extern-only Display only external symbols\n"
+#~ " --ifunc-chars=CHARS Characters to use when displaying ifunc symbols\n"
+#~ " -j, --just-symbols Same as --format=just-symbols\n"
+#~ " -l, --line-numbers Use debugging information to find a filename and\n"
+#~ " line number for each symbol\n"
+#~ " -n, --numeric-sort Sort symbols numerically by address\n"
+#~ " -o Same as -A\n"
+#~ " -p, --no-sort Do not sort the symbols\n"
+#~ " -P, --portability Same as --format=posix\n"
+#~ " -r, --reverse-sort Reverse the sense of the sort\n"
+#~ msgstr ""
+#~ "Les options sont :\n"
+#~ " -a, --debug-syms Afficher seulement les symboles de débug\n"
+#~ " -A, --print-file-name Afficher le nom du fichier d'entrée avant chaque symbole\n"
+#~ " -B Identique à --format=bsd\n"
+#~ " -C, --demangle[=STYLE] Décoder les noms des symboles de bas niveau en noms de ceux\n"
+#~ " du niveau usager. Le STYLE, si spécifié, peut être « auto »\n"
+#~ " (par défaut), « gnu », « lucid », « arm », « hp », « edg » « gnu-v1 »,\n"
+#~ " «java» ou «gnat»\n"
+#~ " --no-demangle Ne pas encoder par mutilation les noms des symboles de bas niveau\n"
+#~ " --recurse-limit Activer une limite sur la récursion. Par défaut.\n"
+#~ " --no-recurse-limit Désactiver la limite sur la récursion.\n"
+#~ " -D, --dynamic Afficher les symboles dynamiques au lieu des symboles normaux\n"
+#~ " --defined-only Afficher seulement les symboles définis\n"
+#~ " -e (ignoré)\n"
+#~ " -f, --format=FORMAT Utiliser le FORMAT de sortie qui peut être « bsd » (par défaut),\n"
+#~ " « sysv » ou « posix ».\n"
+#~ " -g, --extern-only Afficher seulement les symboles externes\n"
+#~ " --ifunc-chars=CARS Caractères à utiliser lors de l'affichage de symboles ifunc\n"
+#~ " -j, --just-symbols Identique à ---format=just-symbols\n"
+#~ " -l, --line-numbers Utiliser les informations de débug pour repérer le nom de fichier\n"
+#~ " et un numéro de ligne pour chaque symbole\n"
+#~ " -n, --numeric-sort Trier les symboles numériquement par adresse\n"
+#~ " -o Identique à -A\n"
+#~ " -p, --no-sort Ne pas trier les symboles\n"
+#~ " -P, --portability Identique à --format=posix\n"
+#~ " -r, --reverse-sort Trier en ordre inverse\n"
+
+#~ msgid ""
+#~ " -S, --print-size Print size of defined symbols\n"
+#~ " -s, --print-armap Include index for symbols from archive members\n"
+#~ " --quiet Suppress \"no symbols\" diagnostic\n"
+#~ " --size-sort Sort symbols by size\n"
+#~ " --special-syms Include special symbols in the output\n"
+#~ " --synthetic Display synthetic symbols as well\n"
+#~ " -t, --radix=RADIX Use RADIX for printing symbol values\n"
+#~ " --target=BFDNAME Specify the target object format as BFDNAME\n"
+#~ " -u, --undefined-only Display only undefined symbols\n"
+#~ " --with-symbol-versions Display version strings after symbol names\n"
+#~ " -X 32_64 (ignored)\n"
+#~ " @FILE Read options from FILE\n"
+#~ " -h, --help Display this information\n"
+#~ " -V, --version Display this program's version number\n"
+#~ "\n"
+#~ msgstr ""
+#~ " -S, --print-size Afficher la taille des symboles définis\n"
+#~ " -s, --print-armap Inclure un index pour les symboles à partir des membres de l'archive\n"
+#~ " --quiet Supprimer le diagnostique « no symbols »\n"
+#~ " --size-sort Trier les symboles par leur taille\n"
+#~ " --special-syms Inclure les symboles spéciaux sur la sortie\n"
+#~ " --synthetic Afficher aussi les symboles synthétiques\n"
+#~ " -t, --radix=BASE Utiliser la BASE numérique pour afficher la valeur des symboles\n"
+#~ " --target=NOM_BFD Spécifier la cible du format de l'objet par le NOM_BFD\n"
+#~ " -u, --undefined-only Afficher seulement les symboles indéfinis\n"
+#~ " --with-symbol-versions Afficher les chaînes de version après les noms de symboles\n"
+#~ " -X 32_64 (ignoré)\n"
+#~ " @FICHIER Lire les options à partir du FICHIER\n"
+#~ " -h, --help Afficher l'aide-mémoire\n"
+#~ " -V, --version Afficher le nom et la version du logiciel\n"
+#~ "\n"
+
+#~ msgid ""
+#~ " -C, --demangle[=STYLE] Decode mangled/processed symbol names\n"
+#~ " The STYLE, if specified, can be `auto', `gnu',\n"
+#~ " `lucid', `arm', `hp', `edg', `gnu-v3', `java'\n"
+#~ " or `gnat'\n"
+#~ msgstr ""
+#~ " -C, --demangle[=STYLE] Décoder les noms de symboles décorés/traités\n"
+#~ " Le STYLE, si précisé, peut être « auto », « gnu »,\n"
+#~ " « lucid », « arm », « hp », « edg », « gnu-v3 »,\n"
+#~ " « java » ou « gnat »\n"
+
+#~ msgid ""
+#~ " -C --demangle[=STYLE] Decode low-level symbol names into user-level names\n"
+#~ " The STYLE, if specified, can be `auto' (the default),\n"
+#~ " `gnu', `lucid', `arm', `hp', `edg', `gnu-v3', `java'\n"
+#~ " or `gnat'\n"
+#~ msgstr ""
+#~ " -C --demangle[=STYLE] Décoder les noms des symboles bas niveau en des noms\n"
+#~ " du niveau utilisateur.\n"
+#~ " Le STYLE, si précisé, peut être « auto » (par défaut),\n"
+#~ " « gnu », « lucid », « arm », « hp », « edg », « gnu-v3 »,\n"
+#~ " « java » ou « gnat »\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "In linked file '%s' the dynamic section at offset 0x%lx contains 1 entry:\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Dans le fichier lié « %s », la section dynamique à l'offset 0x%lx contient 1 entrée :\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Dynamic section at offset 0x%lx contains 1 entry:\n"
+#~ msgstr ""
+#~ "\n"
+#~ "La section dynamique à l'offset 0x%lx contient 1 entrée :\n"
+
+#~ msgid "No CTF parent section named %s\n"
+#~ msgstr "Aucune section parent CTF nommée %s\n"
+
+#~ msgid "CTF parent"
+#~ msgstr "parent CTF"
+
+#~ msgid "NT_MEMTAG (memory tags)"
+#~ msgstr "NT_MEMTAG (étiquettes mémoire)"
+
#~ msgid "%s: Can't allocate memory for temp name (%s)\n"
#~ msgstr "%s: Impossible d'allouer la mémoire pour le nom temporaire (%s)\n"
diff --git a/binutils/po/ro.po b/binutils/po/ro.po
index f1bdfa4a7b5..2ab847c58f2 100644
--- a/binutils/po/ro.po
+++ b/binutils/po/ro.po
@@ -1,1660 +1,4908 @@
-# Mesajele în limba românã pentru binutils.
+# Mesajele în limba română pentru binutils.
# Copyright (C) 2003 Free Software Foundation, Inc.
-# Acest fiºier este distribuit sub aceeaºi licenþã ca ºi pachetul binutils.
+# This file is distributed under the same license as the binutils package.
+# Acest fișier este distribuit sub aceeași licență ca și pachetul binutils.
+#
# Laurentiu Buzdugan <lbuz@rolix.org>, 2005.
+# Traducere făcută de LB, pentru versiunea bfd 2.15.96.
+# Actualizare a mesajelor, de la fiÈ™ierul „binutils-2.36.90.potâ€.
+# Actualizare a codării caracteror, la codarea de caractere UTF-8.
+# Actualizare a diacriticelor de la „cu sedilă†la „cu virgulăâ€.
+# Actualizare a algoritmului formelor de plural (de la „două†la „treiâ€).
+# NU și a mesajelor traduse (acestea au rămas neschimbate).
+# Eliminare a mesajelor ce-au dispărut în ultima versiune.
+# Actualizări realizate de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>, 15.01.2022.
#
msgid ""
msgstr ""
-"Project-Id-Version: binutils 2.15.96\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2005-03-03 21:03+1030\n"
-"PO-Revision-Date: 2005-03-09 12:00-0500\n"
-"Last-Translator: Laurentiu Buzdugan <lbuz@rolix.org>\n"
+"Project-Id-Version: binutils 2.37.90\n"
+"Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n"
+"POT-Creation-Date: 2022-01-22 12:22+0000\n"
+"PO-Revision-Date: 2022-01-23 16:51+0100\n"
+"Last-Translator: Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>\n"
"Language-Team: Romanian <translation-team-ro@lists.sourceforge.net>\n"
-"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Language: ro\n"
"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=ISO-8859-2\n"
+"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2);\n"
+"X-Generator: Poedit 2.3.1\n"
-#: addr2line.c:73
+#: addr2line.c:87
#, c-format
msgid "Usage: %s [option(s)] [addr(s)]\n"
-msgstr "Folosire: %s [opþiune(i)] [adresã(e)]\n"
+msgstr "Folosire: %s [opțiune(i)] [adresă(e)]\n"
-#: addr2line.c:74
+#: addr2line.c:88
#, c-format
msgid " Convert addresses into line number/file name pairs.\n"
-msgstr " Converteºte adrese în perechi numãr linei/nume fiºier.\n"
+msgstr " Convertește adrese în perechi număr linei/nume fișier.\n"
-#: addr2line.c:75
+#: addr2line.c:89
#, c-format
msgid " If no addresses are specified on the command line, they will be read from stdin\n"
-msgstr " Dacã nu este specificatã nici o adresã în linia de comandã, acestea vor fi citite de la intrarea standard (stdin)\n"
+msgstr " Dacă nu este specificată nici o adresă în linia de comandă, acestea vor fi citite de la intrarea standard (stdin)\n"
-#: addr2line.c:76
-#, c-format
+#: addr2line.c:90
+#, fuzzy, c-format
msgid ""
" The options are:\n"
+" @<file> Read options from <file>\n"
+" -a --addresses Show addresses\n"
" -b --target=<bfdname> Set the binary file format\n"
" -e --exe=<executable> Set the input file name (default is a.out)\n"
+" -i --inlines Unwind inlined functions\n"
+" -j --section=<name> Read section-relative offsets instead of addresses\n"
+" -p --pretty-print Make the output easier to read for humans\n"
" -s --basenames Strip directory names\n"
" -f --functions Show function names\n"
" -C --demangle[=style] Demangle function names\n"
+" -R --recurse-limit Enable a limit on recursion whilst demangling. [Default]\n"
+" -r --no-recurse-limit Disable a limit on recursion whilst demangling\n"
" -h --help Display this information\n"
" -v --version Display the program's version\n"
"\n"
msgstr ""
-" Opþiunile sunt:\n"
-" -b --target=<bfdname> Seteazã formatul binar al fiºierului\n"
-" -e --exe=<executable> Seteazã numele fiºierului de intrare (implicit a.out)\n"
+" Opțiunile sunt:\n"
+" -b --target=<bfdname> Setează formatul binar al fișierului\n"
+" -e --exe=<executable> Setează numele fișierului de intrare (implicit a.out)\n"
" -s --basenames Strip directory names\n"
-" -f --functions Afiºeazã numele funcþiilor\n"
+" -f --functions Afișează numele funcțiilor\n"
" -C --demangle[=style] Demangle function names\n"
" -h --help Display this information\n"
" -v --version Display the program's version\n"
"\n"
-#: addr2line.c:88 ar.c:263 coffdump.c:467 nlmconv.c:1110 objcopy.c:478
-#: objcopy.c:512 readelf.c:2631 size.c:99 srconv.c:1731 strings.c:667
-#: sysdump.c:655 windres.c:672
+#: addr2line.c:109 ar.c:359 ar.c:396 coffdump.c:471 dlltool.c:3713
+#: dllwrap.c:518 elfedit.c:976 objcopy.c:697 objcopy.c:752 readelf.c:5165
+#: size.c:109 srconv.c:1704 strings.c:1343 sysdump.c:655 windmc.c:227
+#: windres.c:690
#, c-format
msgid "Report bugs to %s\n"
-msgstr "Raportaþi bug-uri la %s\n"
+msgstr "Raportați bug-uri la %s\n"
+
+#. Note for translators: This printf is used to join the
+#. function name just printed above to the line number/
+#. file name pair that is about to be printed below. Eg:
+#.
+#. foo at 123:bar.c
+#: addr2line.c:313
+#, c-format
+msgid " at "
+msgstr ""
+
+#. Note for translators: This printf is used to join the
+#. line number/file name pair that has just been printed with
+#. the line number/file name pair that is going to be printed
+#. by the next iteration of the while loop. Eg:
+#.
+#. 123:bar.c (inlined by) 456:main.c
+#: addr2line.c:353
+#, c-format
+msgid " (inlined by) "
+msgstr ""
-#: addr2line.c:241
+#: addr2line.c:386
#, c-format
-msgid "%s: can not get addresses from archive"
+msgid "%s: cannot get addresses from archive"
+msgstr ""
+
+#: addr2line.c:403
+#, fuzzy, c-format
+msgid "%s: cannot find section %s"
+msgstr "%s: nu pot seta timpul: %s"
+
+#: addr2line.c:442 ar.c:758 dlltool.c:3237 nm.c:2051 objcopy.c:6036
+#: objdump.c:5372 size.c:151 strings.c:340 windmc.c:958 windres.c:816
+msgid "fatal error: libbfd ABI mismatch"
msgstr ""
-#: addr2line.c:311 nm.c:1519 objdump.c:2848
+#: addr2line.c:469 nm.c:2077 objdump.c:5419 readelf.c:5438
#, c-format
msgid "unknown demangling style `%s'"
msgstr ""
-#: ar.c:205
+#: ar.c:275
#, c-format
msgid "no entry %s in archive\n"
msgstr ""
-#: ar.c:221
+#: ar.c:289
#, c-format
-msgid "Usage: %s [emulation options] [-]{dmpqrstx}[abcfilNoPsSuvV] [member-name] [count] archive-file file...\n"
+msgid "Usage: %s [emulation options] [-]{dmpqrstx}[abcDfilMNoOPsSTuvV] [--plugin <name>] [member-name] [count] archive-file file...\n"
msgstr ""
-#: ar.c:224
+#: ar.c:295
+#, c-format
+msgid "Usage: %s [emulation options] [-]{dmpqrstx}[abcDfilMNoOPsSTuvV] [member-name] [count] archive-file file...\n"
+msgstr ""
+
+#: ar.c:303
#, c-format
msgid " %s -M [<mri-script]\n"
msgstr ""
-#: ar.c:225
+#: ar.c:304
#, c-format
msgid " commands:\n"
msgstr " comenzi:\n"
-#: ar.c:226
+#: ar.c:305
#, c-format
msgid " d - delete file(s) from the archive\n"
-msgstr " d - ºterge fiºier(e) din arhivã\n"
+msgstr " d - șterge fișier(e) din arhivă\n"
-#: ar.c:227
+#: ar.c:306
#, c-format
msgid " m[ab] - move file(s) in the archive\n"
-msgstr " m[ab] - mutã fiºier(e) în arhivã\n"
+msgstr " m[ab] - mută fișier(e) în arhivă\n"
-#: ar.c:228
+#: ar.c:307
#, c-format
msgid " p - print file(s) found in the archive\n"
-msgstr " p - tipãreºte fiºier(e) gãsite în arhivã\n"
+msgstr " p - tipărește fișier(e) găsite în arhivă\n"
-#: ar.c:229
+#: ar.c:308
#, c-format
msgid " q[f] - quick append file(s) to the archive\n"
-msgstr " q[f] - adaugã rapid fiºier(e) la arhivã\n"
+msgstr " q[f] - adaugă rapid fișier(e) la arhivă\n"
-#: ar.c:230
+#: ar.c:309
#, c-format
msgid " r[ab][f][u] - replace existing or insert new file(s) into the archive\n"
msgstr ""
-#: ar.c:231
-#, c-format
-msgid " t - display contents of archive\n"
-msgstr " t - afiºeazã conþinutul arhivei\n"
+#: ar.c:310
+#, fuzzy, c-format
+msgid " s - act as ranlib\n"
+msgstr " t - afișează conținutul arhivei\n"
-#: ar.c:232
+#: ar.c:311
+#, fuzzy, c-format
+msgid " t[O][v] - display contents of the archive\n"
+msgstr " t - afișează conținutul arhivei\n"
+
+#: ar.c:312
#, c-format
msgid " x[o] - extract file(s) from the archive\n"
-msgstr " x[o] - extrage fiºier(e) din arhivã\n"
+msgstr " x[o] - extrage fișier(e) din arhivă\n"
-#: ar.c:233
+#: ar.c:313
#, c-format
msgid " command specific modifiers:\n"
msgstr " modificatori specifici pentru comenzi:\n"
-#: ar.c:234
+#: ar.c:314
#, c-format
msgid " [a] - put file(s) after [member-name]\n"
-msgstr " [a] - pune fiºier(e) dupã [nume-membru]\n"
+msgstr " [a] - pune fișier(e) după [nume-membru]\n"
-#: ar.c:235
+#: ar.c:315
#, c-format
msgid " [b] - put file(s) before [member-name] (same as [i])\n"
msgstr ""
-#: ar.c:236
+#: ar.c:318
+#, c-format
+msgid " [D] - use zero for timestamps and uids/gids (default)\n"
+msgstr ""
+
+#: ar.c:320
+#, c-format
+msgid " [U] - use actual timestamps and uids/gids\n"
+msgstr ""
+
+#: ar.c:325
+#, c-format
+msgid " [D] - use zero for timestamps and uids/gids\n"
+msgstr ""
+
+#: ar.c:327
+#, c-format
+msgid " [U] - use actual timestamps and uids/gids (default)\n"
+msgstr ""
+
+#: ar.c:330
#, c-format
msgid " [N] - use instance [count] of name\n"
msgstr ""
-#: ar.c:237
+#: ar.c:331
#, c-format
msgid " [f] - truncate inserted file names\n"
msgstr ""
-#: ar.c:238
+#: ar.c:332
#, c-format
msgid " [P] - use full path names when matching\n"
msgstr ""
-#: ar.c:239
+#: ar.c:333
#, c-format
msgid " [o] - preserve original dates\n"
msgstr ""
-#: ar.c:240
+#: ar.c:334
+#, fuzzy, c-format
+msgid " [O] - display offsets of files in the archive\n"
+msgstr " t - afișează conținutul arhivei\n"
+
+#: ar.c:335
#, c-format
msgid " [u] - only replace files that are newer than current archive contents\n"
msgstr ""
-#: ar.c:241
+#: ar.c:336
#, c-format
msgid " generic modifiers:\n"
msgstr ""
-#: ar.c:242
+#: ar.c:337
#, c-format
msgid " [c] - do not warn if the library had to be created\n"
msgstr ""
-#: ar.c:243
+#: ar.c:338
#, c-format
msgid " [s] - create an archive index (cf. ranlib)\n"
msgstr ""
-#: ar.c:244
+#: ar.c:339
+#, c-format
+msgid " [l <text> ] - specify the dependencies of this library\n"
+msgstr ""
+
+#: ar.c:340
#, c-format
msgid " [S] - do not build a symbol table\n"
msgstr ""
-#: ar.c:245
+#: ar.c:341
+#, fuzzy, c-format
+msgid " [T] - deprecated, use --thin instead\n"
+msgstr " m[ab] - mută fișier(e) în arhivă\n"
+
+#: ar.c:342
#, c-format
msgid " [v] - be verbose\n"
msgstr ""
-#: ar.c:246
+#: ar.c:343
#, c-format
msgid " [V] - display the version number\n"
msgstr ""
-#: ar.c:253
+#: ar.c:344
+#, c-format
+msgid " @<file> - read options from <file>\n"
+msgstr ""
+
+#: ar.c:345
+#, c-format
+msgid " --target=BFDNAME - specify the target object format as BFDNAME\n"
+msgstr ""
+
+#: ar.c:346
+#, c-format
+msgid " --output=DIRNAME - specify the output directory for extraction operations\n"
+msgstr ""
+
+#: ar.c:347
+#, c-format
+msgid " --record-libdeps=<text> - specify the dependencies of this library\n"
+msgstr ""
+
+#: ar.c:348
+#, fuzzy, c-format
+msgid " --thin - make a thin archive\n"
+msgstr " m[ab] - mută fișier(e) în arhivă\n"
+
+#: ar.c:350
+#, fuzzy, c-format
+msgid " optional:\n"
+msgstr "opțiuni"
+
+#: ar.c:351
+#, c-format
+msgid " --plugin <p> - load the specified plugin\n"
+msgstr ""
+
+#: ar.c:372
#, c-format
msgid "Usage: %s [options] archive\n"
msgstr ""
-#: ar.c:254
+#: ar.c:373
#, c-format
msgid " Generate an index to speed access to archives\n"
msgstr ""
-#: ar.c:255
+#: ar.c:374
#, c-format
msgid ""
" The options are:\n"
+" @<file> Read options from <file>\n"
+msgstr ""
+
+#: ar.c:377
+#, c-format
+msgid " --plugin <name> Load the specified plugin\n"
+msgstr ""
+
+#: ar.c:381
+#, c-format
+msgid ""
+" -D Use zero for symbol map timestamp (default)\n"
+" -U Use an actual symbol map timestamp\n"
+msgstr ""
+
+#: ar.c:385
+#, c-format
+msgid ""
+" -D Use zero for symbol map timestamp\n"
+" -U Use actual symbol map timestamp (default)\n"
+msgstr ""
+
+#: ar.c:388
+#, c-format
+msgid ""
+" -t Update the archive's symbol map timestamp\n"
" -h --help Print this help message\n"
-" -V --version Print version information\n"
+" -v --version Print version information\n"
msgstr ""
-#: ar.c:483
+#: ar.c:513
msgid "two different operation options specified"
msgstr ""
-#: ar.c:558
+#: ar.c:549
+msgid "libdeps specified more than once"
+msgstr ""
+
+#: ar.c:610 ar.c:685 nm.c:2188
#, c-format
-msgid "illegal option -- %c"
-msgstr "opþiune ilegalã -- %c"
+msgid "sorry - this program has been built without plugin support\n"
+msgstr ""
-#: ar.c:604
+#: ar.c:814
msgid "no operation specified"
-msgstr "nici o operaþiune specificatã"
+msgstr "nici o operațiune specificată"
-#: ar.c:607
+#: ar.c:817
msgid "`u' is only meaningful with the `r' option."
msgstr ""
-#: ar.c:615
+#: ar.c:820
+msgid "`u' is not meaningful with the `D' option."
+msgstr ""
+
+#: ar.c:823
+msgid "`u' modifier ignored since `D' is the default (see `U')"
+msgstr ""
+
+#: ar.c:832
+msgid "missing position arg."
+msgstr ""
+
+#: ar.c:838
msgid "`N' is only meaningful with the `x' and `d' options."
msgstr ""
-#: ar.c:618
+#: ar.c:840
+msgid "`N' missing value."
+msgstr ""
+
+#: ar.c:843
msgid "Value for `N' must be positive."
msgstr ""
-#: ar.c:668
+#: ar.c:859
+msgid "`x' cannot be used on thin archives."
+msgstr ""
+
+#: ar.c:873
+msgid "Cannot create libdeps record."
+msgstr ""
+
+#: ar.c:876
+msgid "Cannot set libdeps record type to binary."
+msgstr ""
+
+#: ar.c:879
+msgid "Cannot set libdeps object format."
+msgstr ""
+
+#: ar.c:882
+msgid "Cannot make libdeps object writable."
+msgstr ""
+
+#: ar.c:885
+msgid "Cannot write libdeps record."
+msgstr ""
+
+#: ar.c:888
+msgid "Cannot make libdeps object readable."
+msgstr ""
+
+#: ar.c:891
+#, fuzzy
+msgid "Cannot reset libdeps record type."
+msgstr "tip înregistrare (record) neașteptat"
+
+#: ar.c:952
#, c-format
msgid "internal error -- this option not implemented"
msgstr ""
-#: ar.c:737
+#: ar.c:1021
#, c-format
msgid "creating %s"
msgstr "creez %s"
-#: ar.c:786 ar.c:836 ar.c:1154 objcopy.c:1603
+#: ar.c:1052
#, c-format
-msgid "internal stat error on %s"
-msgstr "eroare stat internã pe %s"
+msgid "Cannot convert existing library %s to thin format"
+msgstr ""
-#: ar.c:790
+#: ar.c:1058
#, c-format
-msgid ""
-"\n"
-"<%s>\n"
-"\n"
+msgid "Cannot convert existing thin library %s to normal format"
msgstr ""
-#: ar.c:806 ar.c:873
+#: ar.c:1090 ar.c:1190 ar.c:1512 objcopy.c:3612
+#, c-format
+msgid "internal stat error on %s"
+msgstr "eroare stat internă pe %s"
+
+#: ar.c:1109 ar.c:1216
#, c-format
msgid "%s is not a valid archive"
-msgstr "%s nu este o arhivã validã"
+msgstr "%s nu este o arhivă validă"
-#: ar.c:841
+#: ar.c:1137
#, c-format
-msgid "stat returns negative size for %s"
-msgstr "stat a returnat o dimensiune negativã pentru %s"
+msgid "illegal output pathname for archive member: %s, using '%s' instead"
+msgstr ""
-#: ar.c:1059
+#: ar.c:1264
+msgid "could not create temporary file whilst writing archive"
+msgstr ""
+
+#: ar.c:1415
#, c-format
msgid "No member named `%s'\n"
msgstr "Nici un membru numit `%s'\n"
-#: ar.c:1109
+#: ar.c:1465
#, c-format
msgid "no entry %s in archive %s!"
msgstr ""
-#: ar.c:1246
+#: ar.c:1625
#, c-format
msgid "%s: no archive map to update"
msgstr ""
-#: arsup.c:83
+#: arsup.c:91
#, c-format
msgid "No entry %s in archive.\n"
msgstr ""
-#: arsup.c:109
+#: arsup.c:116
#, c-format
msgid "Can't open file %s\n"
-msgstr "Nu pot deschide fiºierul %s\n"
+msgstr "Nu pot deschide fișierul %s\n"
-#: arsup.c:162
+#: arsup.c:159
+#, fuzzy, c-format
+msgid "%s: Can't open temporary file (%s)\n"
+msgstr "nu pot deschide fișierul temporar `%s': %s"
+
+#: arsup.c:170
#, c-format
msgid "%s: Can't open output archive %s\n"
-msgstr "%s: Nu pot deschide arhiva de ieºire %s\n"
+msgstr "%s: Nu pot deschide arhiva de ieșire %s\n"
-#: arsup.c:179
+#: arsup.c:191
#, c-format
msgid "%s: Can't open input archive %s\n"
msgstr "%s: Nu pot deschide arhiva de intrare %s\n"
-#: arsup.c:188
+#: arsup.c:200
#, c-format
msgid "%s: file %s is not an archive\n"
msgstr ""
-#: arsup.c:227
+#: arsup.c:240
#, c-format
msgid "%s: no output archive specified yet\n"
msgstr ""
-#: arsup.c:247 arsup.c:285 arsup.c:327 arsup.c:347 arsup.c:413
+#: arsup.c:260 arsup.c:303 arsup.c:345 arsup.c:383 arsup.c:449
#, c-format
msgid "%s: no open output archive\n"
msgstr ""
-#: arsup.c:258 arsup.c:368 arsup.c:394
+#: arsup.c:276 arsup.c:404 arsup.c:430
#, c-format
msgid "%s: can't open file %s\n"
-msgstr "%s: nu pot deschide fiºierul %s\n"
+msgstr "%s: nu pot deschide fișierul %s\n"
-#: arsup.c:312 arsup.c:390 arsup.c:471
+#: arsup.c:330 arsup.c:426 arsup.c:507
#, c-format
msgid "%s: can't find module file %s\n"
-msgstr "%s: nu pot gãsi fiºierul modul %s\n"
+msgstr "%s: nu pot găsi fișierul modul %s\n"
-#: arsup.c:422
+#: arsup.c:458
#, c-format
msgid "Current open archive is %s\n"
-msgstr "Arhiva deschisã curent este %s\n"
+msgstr "Arhiva deschisă curent este %s\n"
-#: arsup.c:446
+#: arsup.c:482
#, c-format
msgid "%s: no open archive\n"
-msgstr "%s: nici o arhivã deschisã\n"
+msgstr "%s: nici o arhivă deschisă\n"
-#: binemul.c:37
+#: binemul.c:38
#, c-format
msgid " No emulation specific options\n"
msgstr ""
#. Macros for common output.
-#: binemul.h:42
+#: binemul.h:45
#, c-format
msgid " emulation options: \n"
msgstr ""
-#: bucomm.c:109
+#: bucomm.c:43 bucomm.c:76
+msgid "cause of error unknown"
+msgstr ""
+
+#: bucomm.c:157
#, c-format
msgid "can't set BFD default target to `%s': %s"
msgstr ""
-#: bucomm.c:120
+#: bucomm.c:169
#, c-format
msgid "%s: Matching formats:"
msgstr ""
-#: bucomm.c:135
+#: bucomm.c:184
#, c-format
msgid "Supported targets:"
msgstr ""
-#: bucomm.c:137
+#: bucomm.c:186
#, c-format
msgid "%s: supported targets:"
msgstr ""
-#: bucomm.c:153
+#: bucomm.c:204
#, c-format
msgid "Supported architectures:"
msgstr ""
-#: bucomm.c:155
+#: bucomm.c:206
#, c-format
msgid "%s: supported architectures:"
msgstr ""
-#: bucomm.c:348
+#: bucomm.c:219
+msgid "big endian"
+msgstr ""
+
+#: bucomm.c:220
+msgid "little endian"
+msgstr ""
+
+#: bucomm.c:221
+msgid "endianness unknown"
+msgstr ""
+
+#: bucomm.c:268
+#, c-format
+msgid ""
+"%s\n"
+" (header %s, data %s)\n"
+msgstr ""
+
+#: bucomm.c:417
#, c-format
msgid "BFD header file version %s\n"
msgstr ""
-#: bucomm.c:449
+#: bucomm.c:447
+#, c-format
+msgid "<time data corrupt>"
+msgstr ""
+
+#: bucomm.c:587
#, c-format
msgid "%s: bad number: %s"
msgstr ""
-#: bucomm.c:466 strings.c:386
+#: bucomm.c:607 strings.c:453
#, c-format
msgid "'%s': No such file"
msgstr ""
-#: bucomm.c:468 strings.c:388
+#: bucomm.c:609 strings.c:455
#, c-format
msgid "Warning: could not locate '%s'. reason: %s"
msgstr ""
-#: bucomm.c:472
+#: bucomm.c:613 strings.c:461
+#, c-format
+msgid "Warning: '%s' is a directory"
+msgstr ""
+
+#: bucomm.c:615 bucomm.c:628
#, c-format
msgid "Warning: '%s' is not an ordinary file"
msgstr ""
-#: coffdump.c:105
+#: bucomm.c:617
+#, c-format
+msgid "Warning: '%s' has negative size, probably it is too large"
+msgstr ""
+
+#: coffdump.c:106
#, c-format
msgid "#lines %d "
msgstr ""
-#: coffdump.c:459 sysdump.c:648
+#: coffdump.c:129
+#, fuzzy, c-format
+msgid "size %d "
+msgstr "mărime"
+
+#: coffdump.c:134
+#, c-format
+msgid "section definition at %x size %x\n"
+msgstr ""
+
+#: coffdump.c:140
+#, c-format
+msgid "pointer to"
+msgstr ""
+
+#: coffdump.c:145
+#, c-format
+msgid "array [%d] of"
+msgstr ""
+
+#: coffdump.c:150
+#, c-format
+msgid "function returning"
+msgstr ""
+
+#: coffdump.c:154
+#, c-format
+msgid "arguments"
+msgstr ""
+
+#: coffdump.c:158
+#, c-format
+msgid "code"
+msgstr ""
+
+#: coffdump.c:164
+#, c-format
+msgid "structure definition"
+msgstr ""
+
+#: coffdump.c:170
+#, c-format
+msgid "structure ref to UNKNOWN struct"
+msgstr ""
+
+#: coffdump.c:172
+#, c-format
+msgid "structure ref to %s"
+msgstr ""
+
+#: coffdump.c:175
+#, c-format
+msgid "enum ref to %s"
+msgstr ""
+
+#: coffdump.c:178
+#, c-format
+msgid "enum definition"
+msgstr ""
+
+#: coffdump.c:251
+#, c-format
+msgid "Stack offset %x"
+msgstr ""
+
+#: coffdump.c:254
+#, fuzzy, c-format
+msgid "Memory section %s+%x"
+msgstr "setează dimensiune secțiune"
+
+#: coffdump.c:257
+#, c-format
+msgid "Register %d"
+msgstr ""
+
+#: coffdump.c:260
+#, c-format
+msgid "Struct Member offset %x"
+msgstr ""
+
+#: coffdump.c:263
+#, c-format
+msgid "Enum Member offset %x"
+msgstr ""
+
+#: coffdump.c:266
+#, c-format
+msgid "Undefined symbol"
+msgstr ""
+
+#: coffdump.c:334
+#, fuzzy, c-format
+msgid "List of symbols"
+msgstr "simboluri"
+
+#: coffdump.c:341
+#, c-format
+msgid "Symbol %s, tag %d, number %d"
+msgstr ""
+
+#: coffdump.c:345 readelf.c:18836 readelf.c:18927
+#, c-format
+msgid "Type"
+msgstr ""
+
+#: coffdump.c:350
+#, c-format
+msgid "Where"
+msgstr ""
+
+#: coffdump.c:354
+#, c-format
+msgid "Visible"
+msgstr ""
+
+#: coffdump.c:370
+msgid "List of blocks "
+msgstr ""
+
+#: coffdump.c:383
+#, c-format
+msgid "vars %d"
+msgstr ""
+
+#: coffdump.c:386
+#, c-format
+msgid "blocks"
+msgstr ""
+
+#: coffdump.c:404
+#, c-format
+msgid "List of source files"
+msgstr ""
+
+#: coffdump.c:410
+#, fuzzy, c-format
+msgid "Source file %s"
+msgstr "Am încercat fișier: %s"
+
+#: coffdump.c:424
+#, c-format
+msgid "section %s %d %d address %x size %x number %d nrelocs %u"
+msgstr ""
+
+#. PR 17512: file: 0a38fb7c.
+#: coffdump.c:436
+msgid "<no sym>"
+msgstr ""
+
+#: coffdump.c:451
+#, fuzzy, c-format
+msgid "#sources %d"
+msgstr "nici o resursă"
+
+#: coffdump.c:462 sysdump.c:648
#, c-format
msgid "Usage: %s [option(s)] in-file\n"
msgstr ""
-#: coffdump.c:460
+#: coffdump.c:463
#, c-format
-msgid " Print a human readable interpretation of a SYSROFF object file\n"
+msgid " Print a human readable interpretation of a COFF object file\n"
msgstr ""
-#: coffdump.c:461
+#: coffdump.c:464
#, c-format
msgid ""
" The options are:\n"
+" @<file> Read options from <file>\n"
" -h --help Display this information\n"
" -v --version Display the program's version\n"
"\n"
msgstr ""
-#: coffdump.c:527 srconv.c:1819 sysdump.c:710
+#: coffdump.c:532 srconv.c:1793 sysdump.c:711
msgid "no input file specified"
msgstr ""
-#: debug.c:648
+#: coffgrok.c:107
+msgid "Out of context scope change encountered"
+msgstr ""
+
+#: coffgrok.c:130
+#, c-format
+msgid "Invalid section target index: %u"
+msgstr ""
+
+#: coffgrok.c:187
+#, c-format
+msgid "Invalid section target index: %d"
+msgstr ""
+
+#: coffgrok.c:190
+msgid "Target section has insufficient relocs"
+msgstr ""
+
+#: coffgrok.c:198 coffgrok.c:445
+#, c-format
+msgid "Symbol index %u encountered when there are no symbols"
+msgstr ""
+
+#: coffgrok.c:199 coffgrok.c:446
+#, c-format
+msgid "Invalid symbol index %u encountered"
+msgstr ""
+
+#: coffgrok.c:251
+#, c-format
+msgid "Invalid section number (%d) encountered"
+msgstr ""
+
+#: coffgrok.c:273
+#, fuzzy, c-format
+msgid "Unrecognized symbol class: %d"
+msgstr "Formă nerecunoscută: %d\n"
+
+#: coffgrok.c:351
+#, c-format
+msgid "Type entry %u does not have enough symbolic information"
+msgstr ""
+
+#: coffgrok.c:354
+#, c-format
+msgid "Type entry %u does not refer to a symbol"
+msgstr ""
+
+#: coffgrok.c:376
+msgid "Section definition needs a section length"
+msgstr ""
+
+#: coffgrok.c:427
+msgid "Aggregate definition needs auxiliary information"
+msgstr ""
+
+#: coffgrok.c:436
+#, c-format
+msgid "Invalid tag index %#lx encountered"
+msgstr ""
+
+#: coffgrok.c:477
+msgid "Enum definition needs auxiliary information"
+msgstr ""
+
+#: coffgrok.c:484
+#, c-format
+msgid "Invalid enum symbol index %u encountered"
+msgstr ""
+
+#: coffgrok.c:520
+msgid "Array definition needs auxiliary information"
+msgstr ""
+
+#: coffgrok.c:536
+#, c-format
+msgid "Out of range sum for els (%#x) * size (%#x)"
+msgstr ""
+
+#: coffgrok.c:627 coffgrok.c:870
+#, fuzzy, c-format
+msgid "Unrecognised symbol class: %d"
+msgstr "Formă nerecunoscută: %d\n"
+
+#: coffgrok.c:644
+msgid "ICE: do_define called without a block"
+msgstr ""
+
+#: coffgrok.c:646
+#, c-format
+msgid "Out of range symbol index: %u"
+msgstr ""
+
+#: coffgrok.c:683
+msgid "Section referenced before any file is defined"
+msgstr ""
+
+#: coffgrok.c:701
+#, c-format
+msgid "Out of range sum for offset (%#x) + size (%#x)"
+msgstr ""
+
+#: coffgrok.c:706
+#, c-format
+msgid "Out of range type size: %u"
+msgstr ""
+
+#: coffgrok.c:792
+msgid "Function start encountered without a top level scope."
+msgstr ""
+
+#: coffgrok.c:818
+msgid "Block start encountered without a scope for it."
+msgstr ""
+
+#: coffgrok.c:828
+msgid "Function arguments encountered without a function definition"
+msgstr ""
+
+#: coffgrok.c:836
+msgid "Structure element encountered without a structure definition"
+msgstr ""
+
+#: coffgrok.c:841
+msgid "Enum element encountered without an enum definition"
+msgstr ""
+
+#: coffgrok.c:849
+msgid "Aggregate definition encountered without a scope"
+msgstr ""
+
+#: coffgrok.c:855
+msgid "Label definition encountered without a file scope"
+msgstr ""
+
+#: coffgrok.c:863
+msgid "Variable definition encountered without a scope"
+msgstr ""
+
+#: coffgrok.c:886
+#, fuzzy, c-format
+msgid "%s: is not a COFF format file"
+msgstr "'%s' nu este un fișier obișnuit\n"
+
+#: cxxfilt.c:124 nm.c:379 objdump.c:405
+#, c-format
+msgid "Report bugs to %s.\n"
+msgstr "Raportați bug-uri la %s.\n"
+
+#: debug.c:647
msgid "debug_add_to_current_namespace: no current file"
msgstr ""
-#: debug.c:727
+#: debug.c:726
msgid "debug_start_source: no debug_set_filename call"
msgstr ""
-#: debug.c:783
+#: debug.c:780
msgid "debug_record_function: no debug_set_filename call"
msgstr ""
-#: debug.c:835
+#: debug.c:832
msgid "debug_record_parameter: no current function"
msgstr ""
-#: debug.c:867
+#: debug.c:864
msgid "debug_end_function: no current function"
msgstr ""
-#: debug.c:873
+#: debug.c:870
msgid "debug_end_function: some blocks were not closed"
msgstr ""
-#: debug.c:901
+#: debug.c:898
msgid "debug_start_block: no current block"
msgstr ""
-#: debug.c:937
+#: debug.c:934
msgid "debug_end_block: no current block"
msgstr ""
-#: debug.c:944
+#: debug.c:941
msgid "debug_end_block: attempt to close top level block"
msgstr ""
-#: debug.c:967
+#: debug.c:964
msgid "debug_record_line: no current unit"
msgstr ""
#. FIXME
-#: debug.c:1020
+#: debug.c:1017
msgid "debug_start_common_block: not implemented"
msgstr ""
#. FIXME
-#: debug.c:1031
+#: debug.c:1028
msgid "debug_end_common_block: not implemented"
msgstr ""
#. FIXME.
-#: debug.c:1115
+#: debug.c:1112
msgid "debug_record_label: not implemented"
msgstr ""
-#: debug.c:1137
+#: debug.c:1134
msgid "debug_record_variable: no current file"
msgstr ""
-#: debug.c:1665
+#: debug.c:1662
msgid "debug_make_undefined_type: unsupported kind"
msgstr ""
-#: debug.c:1842
+#: debug.c:1839
msgid "debug_name_type: no current file"
msgstr ""
-#: debug.c:1887
+#: debug.c:1884
msgid "debug_tag_type: no current file"
msgstr ""
-#: debug.c:1895
+#: debug.c:1892
msgid "debug_tag_type: extra tag attempted"
msgstr ""
-#: debug.c:1932
+#: debug.c:1929
#, c-format
msgid "Warning: changing type size from %d to %d\n"
msgstr ""
-#: debug.c:1954
+#: debug.c:1951
msgid "debug_find_named_type: no current compilation unit"
msgstr ""
-#: debug.c:2057
+#: debug.c:2054
#, c-format
msgid "debug_get_real_type: circular debug information for %s\n"
msgstr ""
-#: debug.c:2484
+#: debug.c:2490
msgid "debug_write_type: illegal type encountered"
msgstr ""
-#: dlltool.c:773 dlltool.c:797 dlltool.c:826
+#: dlltool.c:869 dlltool.c:893 dlltool.c:922
#, c-format
msgid "Internal error: Unknown machine type: %d"
msgstr ""
-#: dlltool.c:862
+#: dlltool.c:964
#, c-format
msgid "Can't open def file: %s"
-msgstr "Nu pot deschide fiºierul def: %s"
+msgstr "Nu pot deschide fișierul def: %s"
-#: dlltool.c:867
+#: dlltool.c:969
#, c-format
msgid "Processing def file: %s"
-msgstr "Procesez fiºierul def: %s"
+msgstr "Procesez fișierul def: %s"
-#: dlltool.c:871
+#: dlltool.c:973
msgid "Processed def file"
-msgstr "Am procesat fiºierul def"
+msgstr "Am procesat fișierul def"
-#: dlltool.c:895
+#: dlltool.c:997
#, c-format
msgid "Syntax error in def file %s:%d"
msgstr ""
-#: dlltool.c:930
+#: dlltool.c:1032
#, c-format
msgid "%s: Path components stripped from image name, '%s'."
msgstr ""
-#: dlltool.c:939
+#: dlltool.c:1050
#, c-format
msgid "NAME: %s base: %x"
msgstr ""
-#: dlltool.c:942 dlltool.c:958
+#: dlltool.c:1053 dlltool.c:1074
msgid "Can't have LIBRARY and NAME"
msgstr ""
-#: dlltool.c:955
+#: dlltool.c:1071
#, c-format
msgid "LIBRARY: %s base: %x"
msgstr ""
-#: dlltool.c:1191 resrc.c:269
+#: dlltool.c:1226
+#, c-format
+msgid "VERSION %d.%d\n"
+msgstr ""
+
+#: dlltool.c:1274
+#, fuzzy, c-format
+msgid "run: %s %s"
+msgstr "Avertisment: %s: %s\n"
+
+#: dlltool.c:1315 resrc.c:288
#, c-format
msgid "wait: %s"
-msgstr "aºteaptã: %s"
+msgstr "așteaptă: %s"
-#: dlltool.c:1196 dllwrap.c:418 resrc.c:274
+#: dlltool.c:1320 dllwrap.c:416 resrc.c:293
#, c-format
msgid "subprocess got fatal signal %d"
msgstr "subprocesul a primit semnalul fatal %d"
-#: dlltool.c:1202 dllwrap.c:425 resrc.c:281
+#: dlltool.c:1326 dllwrap.c:423 resrc.c:300
#, c-format
msgid "%s exited with status %d"
msgstr "%s a terminat cu codul %d"
-#: dlltool.c:1233
+#: dlltool.c:1357
#, c-format
msgid "Sucking in info from %s section in %s"
-msgstr "Absorb info din secþiunea %s în %s"
+msgstr "Absorb info din secțiunea %s în %s"
-#: dlltool.c:1358
+#: dlltool.c:1497
#, c-format
msgid "Excluding symbol: %s"
msgstr ""
-#: dlltool.c:1447 dlltool.c:1458 nm.c:998 nm.c:1009
+#: dlltool.c:1586 dlltool.c:1597 nm.c:1416 nm.c:1427 nm.c:1437
#, c-format
msgid "%s: no symbols"
msgstr ""
#. FIXME: we ought to read in and block out the base relocations.
-#: dlltool.c:1484
+#: dlltool.c:1623
#, c-format
msgid "Done reading %s"
msgstr "Am terminat de citit %s"
-#: dlltool.c:1494
-#, c-format
-msgid "Unable to open object file: %s"
-msgstr ""
+#: dlltool.c:1633
+#, fuzzy, c-format
+msgid "Unable to open object file: %s: %s"
+msgstr "Nu pot deschide fișierul-bază: %s"
-#: dlltool.c:1497
+#: dlltool.c:1636
#, c-format
msgid "Scanning object file %s"
-msgstr "Scanez fiºierul obiect %s"
+msgstr "Scanez fișierul obiect %s"
-#: dlltool.c:1512
+#: dlltool.c:1656
#, c-format
msgid "Cannot produce mcore-elf dll from archive file: %s"
-msgstr "Nu pot produce dll mcore-elf fin fiºierul arhivã: %s"
+msgstr "Nu pot produce dll mcore-elf fin fișierul arhivă: %s"
-#: dlltool.c:1598
+#: dlltool.c:1758
msgid "Adding exports to output file"
msgstr ""
-#: dlltool.c:1646
+#: dlltool.c:1810
msgid "Added exports to output file"
msgstr ""
-#: dlltool.c:1767
+#: dlltool.c:1978
#, c-format
msgid "Generating export file: %s"
-msgstr "Generez fiºier de export: %s"
+msgstr "Generez fișier de export: %s"
-#: dlltool.c:1772
+#: dlltool.c:1983
#, c-format
msgid "Unable to open temporary assembler file: %s"
msgstr ""
-#: dlltool.c:1775
+#: dlltool.c:1988
#, c-format
msgid "Opened temporary file: %s"
msgstr ""
-#: dlltool.c:1997
+#: dlltool.c:2164
+msgid "failed to read the number of entries from base file"
+msgstr ""
+
+#: dlltool.c:2215
msgid "Generated exports file"
-msgstr "Am generat fiºier de export"
+msgstr "Am generat fișier de export"
-#: dlltool.c:2203
-#, c-format
-msgid "bfd_open failed open stub file: %s"
-msgstr ""
+#: dlltool.c:2373
+#, fuzzy, c-format
+msgid "bfd_open failed open stub file: %s: %s"
+msgstr "stat a eșuat pentru fișierul de font `%s': %s"
-#: dlltool.c:2206
+#: dlltool.c:2377
#, c-format
msgid "Creating stub file: %s"
-msgstr "Creez fiºier stub: %s"
+msgstr "Creez fișier stub: %s"
-#: dlltool.c:2588
+#: dlltool.c:2691
+#, fuzzy, c-format
+msgid "bfd_open failed reopen stub file: %s: %s"
+msgstr "stat a eșuat pentru fișierul de font `%s': %s"
+
+#: dlltool.c:2705 dlltool.c:2784
#, c-format
msgid "failed to open temporary head file: %s"
msgstr ""
-#: dlltool.c:2647
+#: dlltool.c:2769 dlltool.c:2859
+#, fuzzy, c-format
+msgid "failed to open temporary head file: %s: %s"
+msgstr "nu pot deschide fișierul temporar `%s': %s"
+
+#: dlltool.c:2874
#, c-format
msgid "failed to open temporary tail file: %s"
msgstr ""
-#: dlltool.c:2714
-#, c-format
-msgid "Can't open .lib file: %s"
-msgstr "Nu pot deschide fiºierul .lib: %s"
+#: dlltool.c:2910
+#, fuzzy, c-format
+msgid "failed to open temporary tail file: %s: %s"
+msgstr "nu pot deschide fișierul temporar `%s': %s"
-#: dlltool.c:2717
+#: dlltool.c:2933
+#, fuzzy, c-format
+msgid "Can't create .lib file: %s: %s"
+msgstr "Nu pot deschide fișierul .lib: %s"
+
+#: dlltool.c:2937
#, c-format
msgid "Creating library file: %s"
-msgstr "Creez fiºier bibliotecã: %s"
+msgstr "Creez fișier bibliotecă: %s"
-#: dlltool.c:2800 dlltool.c:2806
+#: dlltool.c:3024 dlltool.c:3030
#, c-format
msgid "cannot delete %s: %s"
-msgstr "nu pot ºterge %s: %s"
+msgstr "nu pot șterge %s: %s"
-#: dlltool.c:2811
+#: dlltool.c:3036
msgid "Created lib file"
-msgstr "Am creat fiºier lib"
+msgstr "Am creat fișier lib"
+
+#: dlltool.c:3242
+#, fuzzy, c-format
+msgid "Can't open .lib file: %s: %s"
+msgstr "Nu pot deschide fișierul .lib: %s"
+
+#: dlltool.c:3250 dlltool.c:3272
+#, fuzzy, c-format
+msgid "%s is not a library"
+msgstr "%s nu este o arhivă validă"
+
+#: dlltool.c:3290
+#, c-format
+msgid "Import library `%s' specifies two or more dlls"
+msgstr ""
+
+#: dlltool.c:3301
+#, c-format
+msgid "Unable to determine dll name for `%s' (not an import library?)"
+msgstr ""
-#: dlltool.c:2904
+#: dlltool.c:3527
#, c-format
msgid "Warning, ignoring duplicate EXPORT %s %d,%d"
msgstr "Avertisment, ignor EXPORT duplicat %s %d,%d"
-#: dlltool.c:2910
+#: dlltool.c:3533
#, c-format
-msgid "Error, duplicate EXPORT with oridinals: %s"
+msgid "Error, duplicate EXPORT with ordinals: %s"
msgstr ""
-#: dlltool.c:3026
+#: dlltool.c:3636
msgid "Processing definitions"
msgstr ""
-#: dlltool.c:3058
+#: dlltool.c:3663
msgid "Processed definitions"
msgstr ""
#. xgetext:c-format
-#: dlltool.c:3065 dllwrap.c:479
+#: dlltool.c:3670 dllwrap.c:477
#, c-format
msgid "Usage %s <option(s)> <object-file(s)>\n"
msgstr ""
#. xgetext:c-format
-#: dlltool.c:3067
+#: dlltool.c:3672
#, c-format
msgid " -m --machine <machine> Create as DLL for <machine>. [default: %s]\n"
msgstr ""
-#: dlltool.c:3068
+#: dlltool.c:3673
#, c-format
-msgid " possible <machine>: arm[_interwork], i386, mcore[-elf]{-le|-be}, ppc, thumb\n"
+msgid " possible <machine>: arm[_interwork], i386, mcore[-elf]{-le|-be}, thumb\n"
msgstr ""
-#: dlltool.c:3069
+#: dlltool.c:3674
#, c-format
msgid " -e --output-exp <outname> Generate an export file.\n"
msgstr ""
-#: dlltool.c:3070
+#: dlltool.c:3675
#, c-format
msgid " -l --output-lib <outname> Generate an interface library.\n"
msgstr ""
-#: dlltool.c:3071
+#: dlltool.c:3676
+#, c-format
+msgid " -y --output-delaylib <outname> Create a delay-import library.\n"
+msgstr ""
+
+#: dlltool.c:3677
#, c-format
msgid " -a --add-indirect Add dll indirects to export file.\n"
msgstr ""
-#: dlltool.c:3072
+#: dlltool.c:3678
#, c-format
msgid " -D --dllname <name> Name of input dll to put into interface lib.\n"
msgstr ""
-#: dlltool.c:3073
+#: dlltool.c:3679
#, c-format
msgid " -d --input-def <deffile> Name of .def file to be read in.\n"
msgstr ""
-#: dlltool.c:3074
+#: dlltool.c:3680
#, c-format
msgid " -z --output-def <deffile> Name of .def file to be created.\n"
msgstr ""
-#: dlltool.c:3075
+#: dlltool.c:3681
#, c-format
msgid " --export-all-symbols Export all symbols to .def\n"
msgstr ""
-#: dlltool.c:3076
+#: dlltool.c:3682
#, c-format
msgid " --no-export-all-symbols Only export listed symbols\n"
msgstr ""
-#: dlltool.c:3077
+#: dlltool.c:3683
#, c-format
msgid " --exclude-symbols <list> Don't export <list>\n"
msgstr ""
-#: dlltool.c:3078
+#: dlltool.c:3684
#, c-format
msgid " --no-default-excludes Clear default exclude symbols\n"
msgstr ""
-#: dlltool.c:3079
+#: dlltool.c:3685
#, c-format
msgid " -b --base-file <basefile> Read linker generated base file.\n"
msgstr ""
-#: dlltool.c:3080
+#: dlltool.c:3686
#, c-format
msgid " -x --no-idata4 Don't generate idata$4 section.\n"
msgstr ""
-#: dlltool.c:3081
+#: dlltool.c:3687
#, c-format
msgid " -c --no-idata5 Don't generate idata$5 section.\n"
msgstr ""
-#: dlltool.c:3082
+#: dlltool.c:3688
+#, c-format
+msgid " --use-nul-prefixed-import-tables Use zero prefixed idata$4 and idata$5.\n"
+msgstr ""
+
+#: dlltool.c:3689
+#, c-format
+msgid " -U --add-underscore Add underscores to all symbols in interface library.\n"
+msgstr ""
+
+#: dlltool.c:3690
#, c-format
-msgid " -U --add-underscore Add underscores to symbols in interface library.\n"
+msgid " --add-stdcall-underscore Add underscores to stdcall symbols in interface library.\n"
msgstr ""
-#: dlltool.c:3083
+#: dlltool.c:3691
+#, c-format
+msgid " --no-leading-underscore All symbols shouldn't be prefixed by an underscore.\n"
+msgstr ""
+
+#: dlltool.c:3692
+#, c-format
+msgid " --leading-underscore All symbols should be prefixed by an underscore.\n"
+msgstr ""
+
+#: dlltool.c:3693
#, c-format
msgid " -k --kill-at Kill @<n> from exported names.\n"
msgstr ""
-#: dlltool.c:3084
+#: dlltool.c:3694
#, c-format
msgid " -A --add-stdcall-alias Add aliases without @<n>.\n"
msgstr ""
-#: dlltool.c:3085
+#: dlltool.c:3695
#, c-format
msgid " -p --ext-prefix-alias <prefix> Add aliases with <prefix>.\n"
msgstr ""
-#: dlltool.c:3086
+#: dlltool.c:3696
#, c-format
msgid " -S --as <name> Use <name> for assembler.\n"
msgstr ""
-#: dlltool.c:3087
+#: dlltool.c:3697
#, c-format
msgid " -f --as-flags <flags> Pass <flags> to the assembler.\n"
msgstr ""
-#: dlltool.c:3088
+#: dlltool.c:3698
#, c-format
msgid " -C --compat-implib Create backward compatible import library.\n"
msgstr ""
-#: dlltool.c:3089
+#: dlltool.c:3699
#, c-format
msgid " -n --no-delete Keep temp files (repeat for extra preservation).\n"
msgstr ""
-#: dlltool.c:3090
+#: dlltool.c:3700
#, c-format
msgid " -t --temp-prefix <prefix> Use <prefix> to construct temp file names.\n"
msgstr ""
-#: dlltool.c:3091
+#: dlltool.c:3701
+#, c-format
+msgid " -I --identify <implib> Report the name of the DLL associated with <implib>.\n"
+msgstr ""
+
+#: dlltool.c:3702
+#, c-format
+msgid " --identify-strict Causes --identify to report error when multiple DLLs.\n"
+msgstr ""
+
+#: dlltool.c:3703
#, c-format
msgid " -v --verbose Be verbose.\n"
msgstr ""
-#: dlltool.c:3092
+#: dlltool.c:3704
#, c-format
msgid " -V --version Display the program version.\n"
msgstr ""
-#: dlltool.c:3093
+#: dlltool.c:3705
#, c-format
msgid " -h --help Display this information.\n"
msgstr ""
-#: dlltool.c:3095
+#: dlltool.c:3706
+#, fuzzy, c-format
+msgid " @<file> Read options from <file>.\n"
+msgstr " Lungime: %ld\n"
+
+#: dlltool.c:3708
#, c-format
msgid " -M --mcore-elf <outname> Process mcore-elf object files into <outname>.\n"
msgstr ""
-#: dlltool.c:3096
+#: dlltool.c:3709
#, c-format
msgid " -L --linker <name> Use <name> as the linker.\n"
msgstr ""
-#: dlltool.c:3097
+#: dlltool.c:3710
#, c-format
msgid " -F --linker-flags <flags> Pass <flags> to the linker.\n"
msgstr ""
-#: dlltool.c:3211
+#: dlltool.c:3854
+#, fuzzy, c-format
+msgid "Unable to open def-file: %s"
+msgstr "Nu pot deschide fișierul-bază: %s"
+
+#: dlltool.c:3859
#, c-format
msgid "Path components stripped from dllname, '%s'."
msgstr ""
-#: dlltool.c:3256
+#: dlltool.c:3907
#, c-format
msgid "Unable to open base-file: %s"
-msgstr "Nu pot deschide fiºierul-bazã: %s"
+msgstr "Nu pot deschide fișierul-bază: %s"
-#: dlltool.c:3288
+#: dlltool.c:3956
#, c-format
msgid "Machine '%s' not supported"
-msgstr "Maºina '%s' nu este suportatã"
+msgstr "Mașina '%s' nu este suportată"
+
+#: dlltool.c:4036
+#, c-format
+msgid "Warning, machine type (%d) not supported for delayimport."
+msgstr ""
-#: dlltool.c:3392 dllwrap.c:209
+#: dlltool.c:4104 dllwrap.c:206
#, c-format
msgid "Tried file: %s"
-msgstr "Am încercat fiºier: %s"
+msgstr "Am încercat fișier: %s"
-#: dlltool.c:3399 dllwrap.c:216
+#: dlltool.c:4111 dllwrap.c:213
#, c-format
msgid "Using file: %s"
-msgstr "Folosesc fiºier: %s"
+msgstr "Folosesc fișier: %s"
-#: dllwrap.c:299
+#: dllwrap.c:296
#, c-format
msgid "Keeping temporary base file %s"
msgstr ""
-#: dllwrap.c:301
+#: dllwrap.c:298
#, c-format
msgid "Deleting temporary base file %s"
-msgstr "ªterg fiºier bazã temporar %s"
+msgstr "Șterg fișier bază temporar %s"
-#: dllwrap.c:315
+#: dllwrap.c:312
#, c-format
msgid "Keeping temporary exp file %s"
-msgstr "Pãstrez fiºier exp temporar %s"
+msgstr "Păstrez fișier exp temporar %s"
-#: dllwrap.c:317
+#: dllwrap.c:314
#, c-format
msgid "Deleting temporary exp file %s"
-msgstr "ªterg fiºier exp temporar %s"
+msgstr "Șterg fișier exp temporar %s"
-#: dllwrap.c:330
+#: dllwrap.c:327
#, c-format
msgid "Keeping temporary def file %s"
-msgstr "Pãstrez fiºier def temporar %s"
+msgstr "Păstrez fișier def temporar %s"
-#: dllwrap.c:332
+#: dllwrap.c:329
#, c-format
msgid "Deleting temporary def file %s"
-msgstr "ªterg fiºier def temporar %s"
+msgstr "Șterg fișier def temporar %s"
-#: dllwrap.c:480
+#: dllwrap.c:411
+#, fuzzy, c-format
+msgid "pwait returns: %s"
+msgstr "așteaptă: %s"
+
+#: dllwrap.c:478
#, c-format
msgid " Generic options:\n"
-msgstr " Opþiuni generice:\n"
+msgstr " Opțiuni generice:\n"
-#: dllwrap.c:481
+#: dllwrap.c:479
+#, c-format
+msgid " @<file> Read options from <file>\n"
+msgstr ""
+
+#: dllwrap.c:480
#, c-format
msgid " --quiet, -q Work quietly\n"
msgstr ""
-#: dllwrap.c:482
+#: dllwrap.c:481
#, c-format
msgid " --verbose, -v Verbose\n"
msgstr ""
-#: dllwrap.c:483
+#: dllwrap.c:482
#, c-format
msgid " --version Print dllwrap version\n"
msgstr ""
-#: dllwrap.c:484
+#: dllwrap.c:483
#, c-format
msgid " --implib <outname> Synonym for --output-lib\n"
msgstr ""
-#: dllwrap.c:485
+#: dllwrap.c:484
#, c-format
msgid " Options for %s:\n"
msgstr ""
-#: dllwrap.c:486
+#: dllwrap.c:485
#, c-format
msgid " --driver-name <driver> Defaults to \"gcc\"\n"
msgstr ""
-#: dllwrap.c:487
+#: dllwrap.c:486
#, c-format
msgid " --driver-flags <flags> Override default ld flags\n"
msgstr ""
-#: dllwrap.c:488
+#: dllwrap.c:487
#, c-format
msgid " --dlltool-name <dlltool> Defaults to \"dlltool\"\n"
msgstr ""
-#: dllwrap.c:489
+#: dllwrap.c:488
#, c-format
msgid " --entry <entry> Specify alternate DLL entry point\n"
msgstr ""
-#: dllwrap.c:490
+#: dllwrap.c:489
#, c-format
msgid " --image-base <base> Specify image base address\n"
msgstr ""
-#: dllwrap.c:491
+#: dllwrap.c:490
#, c-format
msgid " --target <machine> i386-cygwin32 or i386-mingw32\n"
msgstr ""
-#: dllwrap.c:492
+#: dllwrap.c:491
#, c-format
msgid " --dry-run Show what needs to be run\n"
msgstr ""
-#: dllwrap.c:493
+#: dllwrap.c:492
#, c-format
msgid " --mno-cygwin Create Mingw DLL\n"
msgstr ""
-#: dllwrap.c:494
+#: dllwrap.c:493
#, c-format
msgid " Options passed to DLLTOOL:\n"
msgstr ""
-#: dllwrap.c:495
+#: dllwrap.c:494
#, c-format
msgid " --machine <machine>\n"
msgstr ""
-#: dllwrap.c:496
+#: dllwrap.c:495
#, c-format
msgid " --output-exp <outname> Generate export file.\n"
msgstr ""
-#: dllwrap.c:497
+#: dllwrap.c:496
#, c-format
msgid " --output-lib <outname> Generate input library.\n"
msgstr ""
-#: dllwrap.c:498
+#: dllwrap.c:497
#, c-format
msgid " --add-indirect Add dll indirects to export file.\n"
msgstr ""
-#: dllwrap.c:499
+#: dllwrap.c:498
#, c-format
msgid " --dllname <name> Name of input dll to put into output lib.\n"
msgstr ""
-#: dllwrap.c:500
+#: dllwrap.c:499
#, c-format
msgid " --def <deffile> Name input .def file\n"
msgstr ""
-#: dllwrap.c:501
+#: dllwrap.c:500
#, c-format
msgid " --output-def <deffile> Name output .def file\n"
msgstr ""
-#: dllwrap.c:502
+#: dllwrap.c:501
#, c-format
msgid " --export-all-symbols Export all symbols to .def\n"
msgstr ""
-#: dllwrap.c:503
+#: dllwrap.c:502
#, c-format
msgid " --no-export-all-symbols Only export .drectve symbols\n"
msgstr ""
-#: dllwrap.c:504
+#: dllwrap.c:503
#, c-format
msgid " --exclude-symbols <list> Exclude <list> from .def\n"
msgstr ""
-#: dllwrap.c:505
+#: dllwrap.c:504
#, c-format
msgid " --no-default-excludes Zap default exclude symbols\n"
msgstr ""
-#: dllwrap.c:506
+#: dllwrap.c:505
#, c-format
msgid " --base-file <basefile> Read linker generated base file\n"
msgstr ""
-#: dllwrap.c:507
+#: dllwrap.c:506
#, c-format
msgid " --no-idata4 Don't generate idata$4 section\n"
msgstr ""
-#: dllwrap.c:508
+#: dllwrap.c:507
#, c-format
msgid " --no-idata5 Don't generate idata$5 section\n"
msgstr ""
-#: dllwrap.c:509
+#: dllwrap.c:508
#, c-format
msgid " -U Add underscores to .lib\n"
msgstr ""
-#: dllwrap.c:510
+#: dllwrap.c:509
#, c-format
msgid " -k Kill @<n> from exported names\n"
msgstr ""
-#: dllwrap.c:511
+#: dllwrap.c:510
#, c-format
msgid " --add-stdcall-alias Add aliases without @<n>\n"
msgstr ""
-#: dllwrap.c:512
+#: dllwrap.c:511
#, c-format
msgid " --as <name> Use <name> for assembler\n"
msgstr ""
-#: dllwrap.c:513
+#: dllwrap.c:512
#, c-format
msgid " --nodelete Keep temp files.\n"
msgstr ""
+#: dllwrap.c:513
+#, c-format
+msgid " --no-leading-underscore Entrypoint without underscore\n"
+msgstr ""
+
#: dllwrap.c:514
#, c-format
+msgid " --leading-underscore Entrypoint with underscore.\n"
+msgstr ""
+
+#: dllwrap.c:515
+#, c-format
msgid " Rest are passed unmodified to the language driver\n"
msgstr ""
-#: dllwrap.c:784
+#: dllwrap.c:640
+#, c-format
+msgid "WARNING: %s is deprecated, use gcc -shared or ld -shared instead\n"
+msgstr ""
+
+#: dllwrap.c:800
msgid "Must provide at least one of -o or --dllname options"
msgstr ""
-#: dllwrap.c:813
+#: dllwrap.c:829
msgid ""
"no export definition file provided.\n"
"Creating one, but that may not be what you want"
msgstr ""
-#: dllwrap.c:972
+#: dllwrap.c:1018
#, c-format
msgid "DLLTOOL name : %s\n"
msgstr ""
-#: dllwrap.c:973
+#: dllwrap.c:1019
#, c-format
msgid "DLLTOOL options : %s\n"
msgstr ""
-#: dllwrap.c:974
+#: dllwrap.c:1020
#, c-format
msgid "DRIVER name : %s\n"
msgstr ""
-#: dllwrap.c:975
+#: dllwrap.c:1021
#, c-format
msgid "DRIVER options : %s\n"
msgstr ""
-#: emul_aix.c:51
+#: dwarf.c:187
+msgid "Encoded value extends past end of section\n"
+msgstr ""
+
+#: dwarf.c:195
#, c-format
-msgid " [-g] - 32 bit small archive\n"
+msgid "Encoded size of %d is too large to read\n"
msgstr ""
-#: emul_aix.c:52
+#: dwarf.c:203
+msgid "Encoded size of 0 is too small to read\n"
+msgstr ""
+
+#. Read AMOUNT bytes from PTR and store them in VAL.
+#. Checks to make sure that the read will not reach or pass END.
+#. FUNC chooses whether the value read is unsigned or signed, and may
+#. be either byte_get or byte_get_signed. If INC is true, PTR is
+#. incremented after reading the value.
+#. This macro cannot protect against PTR values derived from user input.
+#. The C standard sections 6.5.6 and 6.5.8 say attempts to do so using
+#. pointers is undefined behaviour.
+#: dwarf.c:389
#, c-format
-msgid " [-X32] - ignores 64 bit objects\n"
+msgid "internal error: attempt to read %d byte of data in to %d sized variable"
+msgid_plural "internal error: attempt to read %d bytes of data in to %d sized variable"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: dwarf.c:477 dwarf.c:5210
+msgid "Badly formed extended line op encountered!\n"
msgstr ""
-#: emul_aix.c:53
+#: dwarf.c:483
#, c-format
-msgid " [-X64] - ignores 32 bit objects\n"
+msgid " Extended opcode %d: "
msgstr ""
-#: emul_aix.c:54
+#: dwarf.c:488
#, c-format
-msgid " [-X32_64] - accepts 32 and 64 bit objects\n"
+msgid ""
+"End of Sequence\n"
+"\n"
+msgstr ""
+
+#: dwarf.c:496
+#, c-format
+msgid "Length (%lu) of DW_LNE_set_address op is too long\n"
+msgstr ""
+
+#: dwarf.c:502
+#, c-format
+msgid "set Address to 0x%s\n"
+msgstr ""
+
+#: dwarf.c:509
+#, c-format
+msgid "define new File Table entry\n"
+msgstr ""
+
+#: dwarf.c:510 dwarf.c:4504
+#, c-format
+msgid " Entry\tDir\tTime\tSize\tName\n"
+msgstr ""
+
+#: dwarf.c:531
+msgid "DW_LNE_define_file: Bad opcode length\n"
+msgstr ""
+
+#: dwarf.c:536
+#, c-format
+msgid "set Discriminator to %s\n"
+msgstr ""
+
+#: dwarf.c:602
+#, c-format
+msgid " UNKNOWN DW_LNE_HP_SFC opcode (%u)\n"
+msgstr ""
+
+#. The test against DW_LNW_hi_user is redundant due to
+#. the limited range of the unsigned char data type used
+#. for op_code.
+#. && op_code <= DW_LNE_hi_user
+#: dwarf.c:619
+#, c-format
+msgid "user defined: "
+msgstr ""
+
+#: dwarf.c:621
+#, c-format
+msgid "UNKNOWN: "
+msgstr ""
+
+#: dwarf.c:622
+#, c-format
+msgid "length %d ["
+msgstr ""
+
+#: dwarf.c:640 dwarf.c:710
+msgid "<no .debug_str section>"
+msgstr ""
+
+#: dwarf.c:644
+#, c-format
+msgid "DW_FORM_strp offset too big: 0x%s\n"
+msgstr ""
+
+#: dwarf.c:646 dwarf.c:674 dwarf.c:1828
+msgid "<offset is too big>"
+msgstr ""
+
+#: dwarf.c:656
+msgid "<no NUL byte at end of .debug_str section>"
+msgstr ""
+
+#: dwarf.c:668
+#, fuzzy
+msgid "<no .debug_line_str section>"
+msgstr "secțiune modul"
+
+#: dwarf.c:672
+#, c-format
+msgid "DW_FORM_line_strp offset too big: 0x%s\n"
+msgstr ""
+
+#: dwarf.c:684
+msgid "<no NUL byte at end of .debug_line_str section>"
+msgstr ""
+
+#: dwarf.c:705
+msgid "<no .debug_str_offsets.dwo section>"
msgstr ""
-#: ieee.c:311
-msgid "unexpected end of debugging information"
+#: dwarf.c:706
+msgid "<no .debug_str_offsets section>"
msgstr ""
-#: ieee.c:398
-msgid "invalid number"
-msgstr "numãr invalid"
+#: dwarf.c:709
+msgid "<no .debug_str.dwo section>"
+msgstr ""
+
+#: dwarf.c:717
+#, c-format
+msgid "Expected offset size of 8 but given %s"
+msgstr ""
+
+#: dwarf.c:722
+#, c-format
+msgid "Expected offset size of 4 but given %s"
+msgstr ""
+
+#: dwarf.c:751
+#, c-format
+msgid "index table size too large for section %s vs %s\n"
+msgstr ""
-#: ieee.c:451
-msgid "invalid string length"
-msgstr "lungime ºir invalidã"
+#: dwarf.c:759
+#, c-format
+msgid "index table size %s is too small\n"
+msgstr ""
-#: ieee.c:506 ieee.c:547
-msgid "expression stack overflow"
-msgstr "depãºire stivã pentru expresie"
+#: dwarf.c:761
+msgid "<table too small>"
+msgstr ""
-#: ieee.c:526
-msgid "unsupported IEEE expression operator"
-msgstr "operator expresie IEEE nesuportat"
+#: dwarf.c:773
+#, c-format
+msgid "DW_FORM_GNU_str_index offset too big: 0x%s vs 0x%s\n"
+msgstr ""
-#: ieee.c:541
-msgid "unknown section"
-msgstr "secþiune necunoscutã"
+#: dwarf.c:776
+msgid "<index offset is too big>"
+msgstr ""
-#: ieee.c:562
-msgid "expression stack underflow"
+#: dwarf.c:783
+#, c-format
+msgid "DW_FORM_GNU_str_index indirect offset too big: 0x%s\n"
msgstr ""
-#: ieee.c:576
-msgid "expression stack mismatch"
+#: dwarf.c:785
+msgid "<indirect index offset is too big>"
msgstr ""
-#: ieee.c:613
-msgid "unknown builtin type"
+#: dwarf.c:794
+msgid "<no NUL byte at end of section>"
+msgstr ""
+
+#: dwarf.c:805
+#, fuzzy
+msgid "<no .debug_addr section>"
+msgstr "date secțiune debug_range"
+
+#: dwarf.c:809
+#, c-format
+msgid "Offset into section %s too big: 0x%s\n"
+msgstr ""
+
+#. PR 17531: file:4bcd9ce9.
+#: dwarf.c:1041
+#, c-format
+msgid "Debug info is corrupted, abbrev size (%lx) is larger than abbrev section size (%lx)\n"
+msgstr ""
+
+#: dwarf.c:1049
+#, c-format
+msgid "Debug info is corrupted, abbrev offset (%lx) is larger than abbrev section size (%lx)\n"
+msgstr ""
+
+#. Report the missing single zero which ends the section.
+#: dwarf.c:1111
+msgid ".debug_abbrev section not zero terminated\n"
+msgstr ""
+
+#: dwarf.c:1126
+#, c-format
+msgid "User TAG value: %#lx"
+msgstr ""
+
+#: dwarf.c:1128
+#, c-format
+msgid "Unknown TAG value: %#lx"
+msgstr ""
+
+#: dwarf.c:1148
+#, c-format
+msgid "Unknown FORM value: %lx"
+msgstr ""
+
+#: dwarf.c:1164
+#, fuzzy, c-format
+msgid "Unknown IDX value: %lx"
+msgstr "necunoscut>: %lx"
+
+#: dwarf.c:1178
+#, c-format
+msgid "%c%s byte block: "
+msgstr ""
+
+#: dwarf.c:1522
+#, c-format
+msgid "(DW_OP_call_ref in frame info)"
+msgstr ""
+
+#: dwarf.c:1545
+#, fuzzy, c-format
+msgid "size: %s "
+msgstr " Fișier: %s"
+
+#: dwarf.c:1547
+#, c-format
+msgid "offset: %s "
+msgstr ""
+
+#: dwarf.c:1563
+#, c-format
+msgid "DW_OP_GNU_push_tls_address or DW_OP_HP_unknown"
+msgstr ""
+
+#: dwarf.c:1588
+#, c-format
+msgid "(%s in frame info)"
+msgstr ""
+
+#: dwarf.c:1688
+#, c-format
+msgid "(DW_OP_GNU_variable_value in frame info)"
+msgstr ""
+
+#: dwarf.c:1741
+#, c-format
+msgid "(User defined location op 0x%x)"
+msgstr ""
+
+#: dwarf.c:1743
+#, c-format
+msgid "(Unknown location op 0x%x)"
+msgstr ""
+
+#: dwarf.c:1797
+msgid "<no links available>"
+msgstr ""
+
+#: dwarf.c:1821
+msgid "<no NUL byte at end of alt .debug_str section>"
+msgstr ""
+
+#: dwarf.c:1826
+#, c-format
+msgid "DW_FORM_GNU_strp_alt offset (%s) too big or no string sections available\n"
+msgstr ""
+
+#: dwarf.c:1849
+#, c-format
+msgid "Unknown AT value: %lx"
+msgstr ""
+
+#: dwarf.c:1915
+#, c-format
+msgid "Corrupt attribute block length: %lx\n"
+msgstr ""
+
+#: dwarf.c:2095
+#, c-format
+msgid "Unable to resolve ref_addr form: uvalue %lx > section size %lx (%s)\n"
+msgstr ""
+
+#: dwarf.c:2112
+#, c-format
+msgid "Unable to resolve ref form: uvalue %lx + cu_offset %lx > CU size %lx\n"
+msgstr ""
+
+#: dwarf.c:2122
+#, c-format
+msgid "Unexpected form %lx encountered whilst finding abbreviation for type\n"
+msgstr ""
+
+#: dwarf.c:2131
+#, c-format
+msgid "Unable to find abbreviations for CU offset %#lx\n"
+msgstr ""
+
+#: dwarf.c:2136
+#, c-format
+msgid "Empty abbreviation list encountered for CU offset %lx\n"
+msgstr ""
+
+#: dwarf.c:2161
+#, c-format
+msgid "Unable to find entry for abbreviation %lu\n"
+msgstr ""
+
+#: dwarf.c:2313
+msgid "corrupt discr_list - not using a block form\n"
+msgstr ""
+
+#: dwarf.c:2320
+msgid "corrupt discr_list - block not long enough\n"
+msgstr ""
+
+#: dwarf.c:2355
+#, c-format
+msgid "corrupt discr_list - unrecognized discriminant byte %#x\n"
+msgstr ""
+
+#: dwarf.c:2396
+msgid "Corrupt attribute\n"
+msgstr ""
+
+#: dwarf.c:2422
+msgid "Internal error: DW_FORM_ref_addr is not supported in DWARF version 1.\n"
+msgstr ""
+
+#: dwarf.c:2604
+msgid "Block ends prematurely\n"
+msgstr ""
+
+#. We have already displayed the form name.
+#: dwarf.c:2634 dwarf.c:2649 dwarf.c:2672
+#, fuzzy, c-format
+msgid "%c(offset: 0x%s): %s"
+msgstr "%s %s: %s"
+
+#: dwarf.c:2638
+#, c-format
+msgid "%c(indirect string, offset: 0x%s): %s"
+msgstr ""
+
+#: dwarf.c:2653
+#, c-format
+msgid "%c(indirect line string, offset: 0x%s): %s"
+msgstr ""
+
+#: dwarf.c:2676
+#, c-format
+msgid "%c(indexed string: 0x%s): %s"
+msgstr ""
+
+#. We have already displayed the form name.
+#: dwarf.c:2687
+#, c-format
+msgid "%c(offset: 0x%s) %s"
+msgstr ""
+
+#: dwarf.c:2691
+#, c-format
+msgid "%c(alt indirect string, offset: 0x%s) %s"
+msgstr ""
+
+#. We have already displayed the form name.
+#: dwarf.c:2729
+#, c-format
+msgid "%c(index: 0x%s): %s"
+msgstr ""
+
+#: dwarf.c:2733
+#, fuzzy, c-format
+msgid "%c(addr_index: 0x%s): %s"
+msgstr "Avertisment: %s: %s\n"
+
+#: dwarf.c:2745
+#, fuzzy, c-format
+msgid "Unrecognized form: 0x%lx\n"
+msgstr "Formă nerecunoscută: %d\n"
+
+#: dwarf.c:2808
+msgid "More location offset attributes than DW_AT_GNU_locview attributes\n"
+msgstr ""
+
+#: dwarf.c:2820
+msgid "More DW_AT_GNU_locview attributes than location offset attributes\n"
+msgstr ""
+
+#: dwarf.c:2889 dwarf.c:2921 dwarf.c:2936
+#, c-format
+msgid "Unsupported form (%s) for attribute %s\n"
+msgstr ""
+
+#: dwarf.c:2983
+#, c-format
+msgid "(not inlined)"
+msgstr ""
+
+#: dwarf.c:2986
+#, c-format
+msgid "(inlined)"
+msgstr ""
+
+#: dwarf.c:2989
+#, c-format
+msgid "(declared as inline but ignored)"
+msgstr ""
+
+#: dwarf.c:2992
+#, c-format
+msgid "(declared as inline and inlined)"
+msgstr ""
+
+#: dwarf.c:2995
+#, c-format
+msgid " (Unknown inline attribute value: %s)"
+msgstr ""
+
+#: dwarf.c:3052
+#, c-format
+msgid "(implementation defined: %s)"
+msgstr ""
+
+#: dwarf.c:3055
+#, fuzzy, c-format
+msgid "(Unknown: %s)"
+msgstr "<necunoscut: %x>"
+
+#: dwarf.c:3100
+#, c-format
+msgid "(user defined type)"
+msgstr ""
+
+#: dwarf.c:3102
+#, fuzzy, c-format
+msgid "(unknown type)"
+msgstr "tip BB necunoscut"
+
+#: dwarf.c:3115
+#, fuzzy, c-format
+msgid "(unknown accessibility)"
msgstr "tip intern (builtin) necunoscut"
-#: ieee.c:758
-msgid "BCD float type not supported"
+#: dwarf.c:3127
+#, fuzzy, c-format
+msgid "(unknown visibility)"
+msgstr "tip intern (builtin) necunoscut"
+
+#: dwarf.c:3140
+#, fuzzy, c-format
+msgid "(user specified)"
+msgstr "nici o operațiune specificată"
+
+#: dwarf.c:3142
+#, fuzzy, c-format
+msgid "(unknown endianity)"
+msgstr "secțiune necunoscută"
+
+#: dwarf.c:3154
+#, fuzzy, c-format
+msgid "(unknown virtuality)"
+msgstr "tip intern (builtin) necunoscut"
+
+#: dwarf.c:3166
+#, fuzzy, c-format
+msgid "(unknown case)"
+msgstr "secțiune necunoscută"
+
+#: dwarf.c:3184
+#, c-format
+msgid "(user defined)"
+msgstr ""
+
+#: dwarf.c:3186
+#, fuzzy, c-format
+msgid "(unknown convention)"
+msgstr "secțiune necunoscută"
+
+#: dwarf.c:3195
+#, c-format
+msgid "(undefined)"
+msgstr ""
+
+#: dwarf.c:3205
+#, c-format
+msgid "(unsigned)"
+msgstr ""
+
+#: dwarf.c:3206
+#, c-format
+msgid "(leading overpunch)"
+msgstr ""
+
+#: dwarf.c:3207
+#, c-format
+msgid "(trailing overpunch)"
+msgstr ""
+
+#: dwarf.c:3208
+#, c-format
+msgid "(leading separate)"
+msgstr ""
+
+#: dwarf.c:3209
+#, c-format
+msgid "(trailing separate)"
+msgstr ""
+
+#: dwarf.c:3210 dwarf.c:3221
+#, fuzzy, c-format
+msgid "(unrecognised)"
+msgstr "opțiune -E nerecunoscută"
+
+#: dwarf.c:3218
+#, c-format
+msgid "(no)"
+msgstr ""
+
+#: dwarf.c:3219
+#, c-format
+msgid "(in class)"
+msgstr ""
+
+#: dwarf.c:3220
+#, c-format
+msgid "(out of class)"
+msgstr ""
+
+#: dwarf.c:3252
+#, c-format
+msgid " (location list)"
+msgstr ""
+
+#: dwarf.c:3273 dwarf.c:6449 dwarf.c:6620 dwarf.c:6796
+#, c-format
+msgid " [without DW_AT_frame_base]"
+msgstr ""
+
+#: dwarf.c:3303
+#, c-format
+msgid "Offset %s used as value for DW_AT_import attribute of DIE at offset 0x%lx is too big.\n"
+msgstr ""
+
+#: dwarf.c:3309
+#, c-format
+msgid "\t[Abbrev Number: %ld"
+msgstr ""
+
+#: dwarf.c:3404
+#, c-format
+msgid ""
+"Raw dump of debug contents of section %s (loaded from %s):\n"
+"\n"
+msgstr ""
+
+#: dwarf.c:3407
+#, c-format
+msgid ""
+"Raw dump of debug contents of section %s:\n"
+"\n"
+msgstr ""
+
+#: dwarf.c:3412
+#, c-format
+msgid ""
+"Contents of the %s section (loaded from %s):\n"
+"\n"
+msgstr ""
+
+#: dwarf.c:3415
+#, c-format
+msgid ""
+"Contents of the %s section:\n"
+"\n"
+msgstr ""
+
+#: dwarf.c:3458
+#, c-format
+msgid "Reserved length value (0x%s) found in section %s\n"
+msgstr ""
+
+#: dwarf.c:3468
+#, c-format
+msgid "Corrupt unit length (got 0x%s expected at most 0x%s) in section %s\n"
+msgstr ""
+
+#: dwarf.c:3479
+#, c-format
+msgid "No comp units in %s section ?\n"
+msgstr ""
+
+#: dwarf.c:3493
+#, c-format
+msgid "Not enough memory for a debug info array of %u entries\n"
+msgstr ""
+
+#: dwarf.c:3522
+#, c-format
+msgid "Unable to locate %s section!\n"
+msgstr ""
+
+#: dwarf.c:3698
+#, c-format
+msgid "Invalid pointer size (%d) in compunit header, using %d instead\n"
+msgstr ""
+
+#: dwarf.c:3739
+#, c-format
+msgid " Compilation Unit @ offset 0x%s:\n"
+msgstr ""
+
+#: dwarf.c:3741
+#, fuzzy, c-format
+msgid " Length: 0x%s (%s)\n"
+msgstr " Lungime: %ld\n"
+
+#: dwarf.c:3744
+#, c-format
+msgid " Version: %d\n"
+msgstr ""
+
+#: dwarf.c:3749
+#, c-format
+msgid " Unit Type: %s (%x)\n"
+msgstr ""
+
+#: dwarf.c:3753
+#, c-format
+msgid " Abbrev Offset: 0x%s\n"
+msgstr ""
+
+#: dwarf.c:3755
+#, c-format
+msgid " Pointer Size: %d\n"
+msgstr ""
+
+#: dwarf.c:3758
+#, c-format
+msgid " Signature: 0x%s\n"
+msgstr ""
+
+#: dwarf.c:3760
+#, c-format
+msgid " Type Offset: 0x%s\n"
+msgstr ""
+
+#: dwarf.c:3764
+#, c-format
+msgid " DWO ID: 0x%s\n"
+msgstr ""
+
+#: dwarf.c:3770
+#, c-format
+msgid " Section contributions:\n"
+msgstr ""
+
+#: dwarf.c:3771
+#, c-format
+msgid " .debug_abbrev.dwo: 0x%s 0x%s\n"
+msgstr ""
+
+#: dwarf.c:3774
+#, c-format
+msgid " .debug_line.dwo: 0x%s 0x%s\n"
+msgstr ""
+
+#: dwarf.c:3777
+#, c-format
+msgid " .debug_loc.dwo: 0x%s 0x%s\n"
+msgstr ""
+
+#: dwarf.c:3780
+#, c-format
+msgid " .debug_str_offsets.dwo: 0x%s 0x%s\n"
+msgstr ""
+
+#: dwarf.c:3791
+#, c-format
+msgid "CU at offset %s contains corrupt or unsupported version number: %d.\n"
+msgstr ""
+
+#: dwarf.c:3803
+#, c-format
+msgid "CU at offset %s contains corrupt or unsupported unit type: %d.\n"
+msgstr ""
+
+#: dwarf.c:3858
+#, c-format
+msgid " <%d><%lx>: Abbrev Number: 0\n"
+msgstr ""
+
+#: dwarf.c:3868
+#, c-format
+msgid "Bogus end-of-siblings marker detected at offset %lx in %s section\n"
+msgstr ""
+
+#: dwarf.c:3872
+msgid "Further warnings about bogus end-of-sibling markers suppressed\n"
+msgstr ""
+
+#: dwarf.c:3891
+#, c-format
+msgid " <%d><%lx>: Abbrev Number: %lu"
+msgstr ""
+
+#: dwarf.c:3895
+#, c-format
+msgid " <%d><%lx>: ...\n"
+msgstr ""
+
+#: dwarf.c:3916
+#, c-format
+msgid "DIE at offset 0x%lx refers to abbreviation number %lu which does not exist\n"
+msgstr ""
+
+#: dwarf.c:3990
+msgid "DIE has locviews without loclist\n"
+msgstr ""
+
+#: dwarf.c:4099
+#, c-format
+msgid "The length field (0x%lx) in the debug_line header is wrong - the section is too small\n"
+msgstr ""
+
+#: dwarf.c:4114
+msgid "Only DWARF version 2, 3, 4 and 5 line info is currently supported.\n"
+msgstr ""
+
+#: dwarf.c:4126 dwarf.c:6889 dwarf.c:7763
+#, c-format
+msgid "The %s section contains unsupported segment selector size: %d.\n"
+msgstr ""
+
+#: dwarf.c:4143
+msgid "Invalid maximum operations per insn.\n"
+msgstr ""
+
+#: dwarf.c:4170
+#, fuzzy
+msgid "Directory Table"
+msgstr ""
+"\n"
+" Tabelul Director:\n"
+
+#: dwarf.c:4170
+msgid "File Name Table"
+msgstr ""
+
+#: dwarf.c:4174
+#, c-format
+msgid "Unexpectedly large number of columns in the %s (%u)\n"
+msgstr ""
+
+#: dwarf.c:4184
+#, c-format
+msgid "%s: Corrupt format description entry\n"
+msgstr ""
+
+#: dwarf.c:4192
+#, c-format
+msgid ""
+"\n"
+" The %s is empty.\n"
+msgstr ""
+
+#: dwarf.c:4197
+#, c-format
+msgid "%s: Corrupt entry count - expected %s but none found\n"
+msgstr ""
+
+#: dwarf.c:4204
+#, c-format
+msgid "%s: format count is zero, but the table is not empty\n"
+msgstr ""
+
+#: dwarf.c:4209
+#, c-format
+msgid ""
+"\n"
+" The %s (offset 0x%lx, lines %s, columns %u):\n"
+msgstr ""
+
+#: dwarf.c:4213
+#, c-format
+msgid " Entry"
+msgstr ""
+
+#: dwarf.c:4227
+#, c-format
+msgid "\tName"
+msgstr ""
+
+#: dwarf.c:4230
+#, c-format
+msgid "\tDir"
+msgstr ""
+
+#: dwarf.c:4233
+#, c-format
+msgid "\tTime"
+msgstr ""
+
+#: dwarf.c:4236
+#, c-format
+msgid "\tSize"
+msgstr ""
+
+#: dwarf.c:4239
+#, c-format
+msgid "\tMD5\t\t\t"
+msgstr ""
+
+#: dwarf.c:4242
+#, fuzzy, c-format
+msgid "\t(Unknown format content type %s)"
+msgstr "tip format necunoscut `%s'"
+
+#: dwarf.c:4276
+#, c-format
+msgid ""
+"\n"
+"%s: Corrupt entries list\n"
+msgstr ""
+
+#: dwarf.c:4302
+msgid "corrupt .debug_sup section: size is too small\n"
+msgstr ""
+
+#: dwarf.c:4309
+msgid "corrupt .debug_sup section: version < 5"
+msgstr ""
+
+#: dwarf.c:4313
+msgid "corrupt .debug_sup section: is_supplementary not 0 or 1\n"
+msgstr ""
+
+#: dwarf.c:4317
+msgid "corrupt .debug_sup section: filename not empty in supplementary section\n"
+msgstr ""
+
+#: dwarf.c:4322
+msgid "corrupt .debug_sup section: filename is not NUL terminated\n"
+msgstr ""
+
+#: dwarf.c:4330
+msgid "corrupt .debug_sup section: bad LEB128 field for checksum length\n"
+msgstr ""
+
+#: dwarf.c:4336
+msgid "corrupt .debug_sup section: checksum length is longer than the remaining section length\n"
+msgstr ""
+
+#: dwarf.c:4341
+#, c-format
+msgid "corrupt .debug_sup section: there are 0x%lx extra, unused bytes at the end of the section\n"
+msgstr ""
+
+#: dwarf.c:4345
+#, fuzzy, c-format
+msgid " Version: %u\n"
+msgstr " Versiune: %d\n"
+
+#: dwarf.c:4346
+#, c-format
+msgid " Is Supp: %u\n"
+msgstr ""
+
+#: dwarf.c:4347
+#, fuzzy, c-format
+msgid " Filename: %s\n"
+msgstr " Fișier: %s"
+
+#: dwarf.c:4348
+#, c-format
+msgid " Checksum Len: %lu\n"
+msgstr ""
+
+#: dwarf.c:4351
+#, c-format
+msgid " Checksum: "
+msgstr ""
+
+#: dwarf.c:4399 dwarf.c:4820
+msgid "Partial .debug_line. section encountered without a prior full .debug_line section\n"
+msgstr ""
+
+#: dwarf.c:4412 dwarf.c:5967
+#, fuzzy, c-format
+msgid " Offset: 0x%lx\n"
+msgstr " Lungime: %ld\n"
+
+#: dwarf.c:4413
+#, c-format
+msgid " Length: %ld\n"
+msgstr " Lungime: %ld\n"
+
+#: dwarf.c:4414
+#, c-format
+msgid " DWARF Version: %d\n"
+msgstr " Versiune DWARF: %d\n"
+
+#: dwarf.c:4417
+#, c-format
+msgid " Address size (bytes): %d\n"
+msgstr ""
+
+#: dwarf.c:4418
+#, c-format
+msgid " Segment selector (bytes): %d\n"
+msgstr ""
+
+#: dwarf.c:4420
+#, c-format
+msgid " Prologue Length: %d\n"
+msgstr ""
+
+#: dwarf.c:4421
+#, c-format
+msgid " Minimum Instruction Length: %d\n"
+msgstr ""
+
+#: dwarf.c:4423
+#, c-format
+msgid " Maximum Ops per Instruction: %d\n"
+msgstr ""
+
+#: dwarf.c:4424
+#, c-format
+msgid " Initial value of 'is_stmt': %d\n"
+msgstr ""
+
+#: dwarf.c:4425
+#, c-format
+msgid " Line Base: %d\n"
+msgstr " Ba Linie: %d\n"
+
+#: dwarf.c:4426
+#, c-format
+msgid " Line Range: %d\n"
+msgstr " Interval Linie: %d\n"
+
+#: dwarf.c:4427
+#, c-format
+msgid " Opcode Base: %d\n"
+msgstr " Bază Opcode: %d\n"
+
+#: dwarf.c:4432 dwarf.c:4836
+msgid "Line range of 0 is invalid, using 1 instead\n"
+msgstr ""
+
+#: dwarf.c:4444
+msgid "Line Base extends beyond end of section\n"
+msgstr ""
+
+#: dwarf.c:4448
+#, c-format
+msgid ""
+"\n"
+" Opcodes:\n"
+msgstr ""
+"\n"
+" Opcode-uri:\n"
+
+#: dwarf.c:4451
+#, fuzzy, c-format
+msgid " Opcode %d has %d arg\n"
+msgid_plural " Opcode %d has %d args\n"
+msgstr[0] " Opcode %d are %d argumente\n"
+msgstr[1] " Opcode %d are %d argumente\n"
+msgstr[2] ""
+
+#: dwarf.c:4471
+#, c-format
+msgid ""
+"\n"
+" The Directory Table is empty.\n"
+msgstr ""
+
+#: dwarf.c:4476
+#, fuzzy, c-format
+msgid ""
+"\n"
+" The Directory Table (offset 0x%lx):\n"
+msgstr ""
+"\n"
+" Tabelul Director:\n"
+
+#: dwarf.c:4499
+#, c-format
+msgid ""
+"\n"
+" The File Name Table is empty.\n"
+msgstr ""
+
+#: dwarf.c:4502
+#, c-format
+msgid ""
+"\n"
+" The File Name Table (offset 0x%lx):\n"
+msgstr ""
+
+#: dwarf.c:4527
+msgid "Corrupt file name table entry\n"
+msgstr ""
+
+#: dwarf.c:4544
+#, c-format
+msgid " No Line Number Statements.\n"
+msgstr ""
+
+#: dwarf.c:4547
+#, c-format
+msgid " Line Number Statements:\n"
+msgstr ""
+
+#: dwarf.c:4569
+#, c-format
+msgid " Special opcode %d: advance Address by %s to 0x%s%s"
+msgstr ""
+
+#: dwarf.c:4574 dwarf.c:4595 dwarf.c:4637 dwarf.c:4657 dwarf.c:4707
+#: dwarf.c:4727
+msgid " (reset view)"
+msgstr ""
+
+#: dwarf.c:4589
+#, c-format
+msgid " Special opcode %d: advance Address by %s to 0x%s[%d]%s"
+msgstr ""
+
+#: dwarf.c:4599
+#, c-format
+msgid " and Line by %s to %d"
+msgstr ""
+
+#: dwarf.c:4602 dwarf.c:4619
+#, c-format
+msgid " (view %u)\n"
+msgstr ""
+
+#: dwarf.c:4617
+#, fuzzy, c-format
+msgid " Copy"
+msgstr "Copiază\n"
+
+#: dwarf.c:4633
+#, c-format
+msgid " Advance PC by %s to 0x%s%s\n"
+msgstr ""
+
+#: dwarf.c:4652
+#, c-format
+msgid " Advance PC by %s to 0x%s[%d]%s\n"
+msgstr ""
+
+#: dwarf.c:4664
+#, c-format
+msgid " Advance Line by %s to %d\n"
+msgstr ""
+
+#: dwarf.c:4671
+#, c-format
+msgid " Set File Name to entry %s in the File Name Table\n"
+msgstr ""
+
+#: dwarf.c:4678
+#, c-format
+msgid " Set column to %s\n"
+msgstr ""
+
+#: dwarf.c:4686
+#, c-format
+msgid " Set is_stmt to %s\n"
+msgstr ""
+
+#: dwarf.c:4691
+#, c-format
+msgid " Set basic block\n"
+msgstr ""
+
+#: dwarf.c:4703
+#, c-format
+msgid " Advance PC by constant %s to 0x%s%s\n"
+msgstr ""
+
+#: dwarf.c:4722
+#, c-format
+msgid " Advance PC by constant %s to 0x%s[%d]%s\n"
+msgstr ""
+
+#: dwarf.c:4735
+#, c-format
+msgid " Advance PC by fixed size amount %s to 0x%s\n"
+msgstr ""
+
+#: dwarf.c:4742
+#, c-format
+msgid " Set prologue_end to true\n"
+msgstr ""
+
+#: dwarf.c:4746
+#, c-format
+msgid " Set epilogue_begin to true\n"
+msgstr ""
+
+#: dwarf.c:4751
+#, c-format
+msgid " Set ISA to %s\n"
+msgstr ""
+
+#: dwarf.c:4755 dwarf.c:5394
+#, c-format
+msgid " Unknown opcode %d with operands: "
+msgstr ""
+
+#: dwarf.c:4849
+#, c-format
+msgid "opcode base of %d extends beyond end of section\n"
+msgstr ""
+
+#: dwarf.c:4864
+#, c-format
+msgid "Unexpectedly large number of columns in the directory name table (%u)\n"
+msgstr ""
+
+#: dwarf.c:4876 dwarf.c:4900 dwarf.c:4930
+msgid "Corrupt directories list\n"
+msgstr ""
+
+#: dwarf.c:4938
+#, c-format
+msgid "Unexpectedly large number of columns in the file name table (%u)\n"
+msgstr ""
+
+#: dwarf.c:4950 dwarf.c:4975 dwarf.c:5022
+msgid "Corrupt file name list\n"
+msgstr ""
+
+#: dwarf.c:5044
+msgid "directory table ends unexpectedly\n"
+msgstr ""
+
+#: dwarf.c:5085
+msgid "file table ends unexpectedly\n"
+msgstr ""
+
+#: dwarf.c:5118
+#, fuzzy, c-format
+msgid "CU: No directory table\n"
+msgstr ""
+"\n"
+" Tabelul Director:\n"
+
+#: dwarf.c:5120
+#, c-format
+msgid "CU: %s:\n"
+msgstr ""
+
+#: dwarf.c:5130 dwarf.c:5435 readelf.c:6715 readelf.c:6812 readelf.c:6830
+#: readelf.c:6848 readelf.c:7652 readelf.c:11854 readelf.c:12519
+#: readelf.c:12532 readelf.c:17921 readelf.c:17953
+#, fuzzy
+msgid "<unknown>"
+msgstr "<necunoscut>: %d"
+
+#: dwarf.c:5133 dwarf.c:5324
+#, c-format
+msgid "directory index %u > number of directories %s\n"
+msgstr ""
+
+#: dwarf.c:5135 dwarf.c:5429 elfcomm.c:777 readelf.c:389 readelf.c:923
+#: readelf.c:7830 readelf.c:8393 readelf.c:10429 readelf.c:12871
+#: readelf.c:12937 readelf.c:12941 readelf.c:13013 readelf.c:13018
+#: readelf.c:16651 readelf.c:16740 readelf.c:17333 readelf.c:17352
+#: readelf.c:17471 readelf.c:17930 readelf.c:19085 readelf.c:19088
+#, c-format
+msgid "<corrupt>"
+msgstr ""
+
+#: dwarf.c:5141
+#, c-format
+msgid "CU: %s/%s:\n"
+msgstr ""
+
+#: dwarf.c:5147
+#, c-format
+msgid "File name Line number Starting address View Stmt\n"
+msgstr ""
+
+#: dwarf.c:5149
+#, c-format
+msgid "CU: Empty file name table\n"
+msgstr ""
+
+#: dwarf.c:5256
+#, c-format
+msgid "UNKNOWN (%u): length %ld\n"
+msgstr ""
+
+#: dwarf.c:5308
+#, c-format
+msgid ""
+"\n"
+" [Use file table entry %d]\n"
+msgstr ""
+
+#: dwarf.c:5312
+#, c-format
+msgid "file index %u > number of files %u\n"
+msgstr ""
+
+#: dwarf.c:5313
+#, c-format
+msgid ""
+"\n"
+" <over large file table index %u>"
+msgstr ""
+
+#: dwarf.c:5319
+#, c-format
+msgid ""
+"\n"
+" [Use file %s in directory table entry %d]\n"
+msgstr ""
+
+#: dwarf.c:5326
+#, c-format
+msgid ""
+"\n"
+" <over large directory table entry %u>\n"
+msgstr ""
+
+#: dwarf.c:5390
+#, c-format
+msgid " Set ISA to %lu\n"
+msgstr ""
+
+#: dwarf.c:5428
+#, c-format
+msgid "corrupt file index %u encountered\n"
+msgstr ""
+
+#: dwarf.c:5597
+#, fuzzy
+msgid "no info"
+msgstr "nici un fișier de intrare"
+
+#: dwarf.c:5598
+msgid "type"
+msgstr ""
+
+#: dwarf.c:5599
+msgid "variable"
+msgstr ""
+
+#: dwarf.c:5600
+#, fuzzy
+msgid "function"
+msgstr "secțiune necunoscută"
+
+#: dwarf.c:5601
+msgid "other"
+msgstr ""
+
+#: dwarf.c:5602
+msgid "unused5"
+msgstr ""
+
+#: dwarf.c:5603
+msgid "unused6"
+msgstr ""
+
+#: dwarf.c:5604
+msgid "unused7"
+msgstr ""
+
+#: dwarf.c:5642 dwarf.c:7220 dwarf.c:9626
+#, c-format
+msgid "Debug info is corrupted, %s header at %#lx has length %s\n"
+msgstr ""
+
+#: dwarf.c:5658 dwarf.c:7235
+#, c-format
+msgid ".debug_info offset of 0x%lx in %s section does not point to a CU header.\n"
+msgstr ""
+
+#: dwarf.c:5663
+#, c-format
+msgid " Length: %ld\n"
+msgstr ""
+
+#: dwarf.c:5665
+#, c-format
+msgid " Version: %d\n"
+msgstr ""
+
+#: dwarf.c:5667
+#, c-format
+msgid " Offset into .debug_info section: 0x%lx\n"
+msgstr ""
+
+#: dwarf.c:5669
+#, c-format
+msgid " Size of area in .debug_info section: %ld\n"
+msgstr ""
+
+#: dwarf.c:5678
+msgid "Only DWARF 2 and 3 pubnames are currently supported\n"
+msgstr ""
+
+#: dwarf.c:5686
+#, c-format
+msgid ""
+"\n"
+" Offset Kind Name\n"
+msgstr ""
+
+#: dwarf.c:5688
+#, c-format
+msgid ""
+"\n"
+" Offset\tName\n"
+msgstr ""
+
+#: dwarf.c:5722
+msgid "s"
+msgstr ""
+
+#: dwarf.c:5722
+msgid "g"
+msgstr ""
+
+#: dwarf.c:5780
+#, c-format
+msgid " DW_MACINFO_start_file - lineno: %d filenum: %d\n"
+msgstr ""
+
+#: dwarf.c:5786
+#, c-format
+msgid " DW_MACINFO_end_file\n"
+msgstr ""
+
+#: dwarf.c:5793
+#, c-format
+msgid " DW_MACINFO_define - lineno : %d macro : %*s\n"
+msgstr ""
+
+#: dwarf.c:5803
+#, c-format
+msgid " DW_MACINFO_undef - lineno : %d macro : %*s\n"
+msgstr ""
+
+#: dwarf.c:5816
+#, c-format
+msgid " DW_MACINFO_vendor_ext - constant : %d string : %*s\n"
+msgstr ""
+
+#: dwarf.c:5960
+#, c-format
+msgid "Expected to find a version number of 4 or 5 in section %s but found %d instead\n"
+msgstr ""
+
+#: dwarf.c:5969
+#, fuzzy, c-format
+msgid " Version: %d\n"
+msgstr " Versiune: %d\n"
+
+#: dwarf.c:5970
+#, fuzzy, c-format
+msgid " Offset size: %d\n"
+msgstr " Bază Opcode: %d\n"
+
+#: dwarf.c:5974
+#, c-format
+msgid " Offset into .debug_line: 0x%lx\n"
+msgstr ""
+
+#: dwarf.c:5988
+#, c-format
+msgid " Extension opcode arguments:\n"
+msgstr ""
+
+#: dwarf.c:5995
+#, c-format
+msgid " DW_MACRO_%02x has no arguments\n"
+msgstr ""
+
+#: dwarf.c:5998
+#, c-format
+msgid " DW_MACRO_%02x arguments: "
+msgstr ""
+
+#: dwarf.c:6024
+#, c-format
+msgid "Invalid extension opcode form %s\n"
+msgstr ""
+
+#: dwarf.c:6041
+msgid ".debug_macro section not zero terminated\n"
+msgstr ""
+
+#: dwarf.c:6055
+#, c-format
+msgid " DW_MACRO_define - lineno : %d macro : %*s\n"
+msgstr ""
+
+#: dwarf.c:6065
+#, c-format
+msgid " DW_MACRO_undef - lineno : %d macro : %*s\n"
+msgstr ""
+
+#: dwarf.c:6080
+msgid "DW_MACRO_start_file used, but no .debug_line offset provided.\n"
+msgstr ""
+
+#: dwarf.c:6086
+#, c-format
+msgid " DW_MACRO_start_file - lineno: %d filenum: %d\n"
+msgstr ""
+
+#: dwarf.c:6089
+#, c-format
+msgid " DW_MACRO_start_file - lineno: %d filenum: %d filename: %s%s%s\n"
+msgstr ""
+
+#: dwarf.c:6097
+#, c-format
+msgid " DW_MACRO_end_file\n"
+msgstr ""
+
+#: dwarf.c:6107
+#, c-format
+msgid " DW_MACRO_define_strp - lineno : %d macro : %s\n"
+msgstr ""
+
+#: dwarf.c:6118
+#, c-format
+msgid " DW_MACRO_undef_strp - lineno : %d macro : %s\n"
+msgstr ""
+
+#: dwarf.c:6124
+#, c-format
+msgid " DW_MACRO_import - offset : 0x%lx\n"
+msgstr ""
+
+#: dwarf.c:6131
+#, c-format
+msgid " DW_MACRO_define_sup - lineno : %d macro offset : 0x%lx\n"
+msgstr ""
+
+#: dwarf.c:6138
+#, c-format
+msgid " DW_MACRO_undef_sup - lineno : %d macro offset : 0x%lx\n"
+msgstr ""
+
+#: dwarf.c:6144
+#, c-format
+msgid " DW_MACRO_import_sup - offset : 0x%lx\n"
+msgstr ""
+
+#: dwarf.c:6159
+#, c-format
+msgid "(with offset %s) "
+msgstr ""
+
+#: dwarf.c:6160
+#, c-format
+msgid "lineno : %d macro : %s\n"
+msgstr ""
+
+#: dwarf.c:6167
+#, c-format
+msgid " <Target Specific macro op: %#x - UNHANDLED"
+msgstr ""
+
+#: dwarf.c:6173
+#, c-format
+msgid " Unknown macro opcode %02x seen\n"
+msgstr ""
+
+#: dwarf.c:6184
+#, c-format
+msgid " DW_MACRO_%02x\n"
+msgstr ""
+
+#: dwarf.c:6187
+#, c-format
+msgid " DW_MACRO_%02x -"
+msgstr ""
+
+#: dwarf.c:6242
+#, c-format
+msgid " Number TAG (0x%lx)\n"
+msgstr ""
+
+#: dwarf.c:6251
+msgid "has children"
+msgstr ""
+
+#: dwarf.c:6251
+msgid "no children"
+msgstr ""
+
+#: dwarf.c:6313
+#, c-format
+msgid "location view pair\n"
+msgstr ""
+
+#: dwarf.c:6344
+#, c-format
+msgid "No debug information available for loc lists of entry: %u\n"
+msgstr ""
+
+#: dwarf.c:6356 dwarf.c:6504 dwarf.c:6688
+#, c-format
+msgid "Invalid pointer size (%d) in debug info for entry %d\n"
+msgstr ""
+
+#: dwarf.c:6368 dwarf.c:6422 dwarf.c:6431 dwarf.c:6516 dwarf.c:6594
+#: dwarf.c:6602 dwarf.c:6700 dwarf.c:6773 dwarf.c:6781
+#, c-format
+msgid "Location list starting at offset 0x%lx is not terminated.\n"
+msgstr ""
+
+#: dwarf.c:6390 dwarf.c:6545 dwarf.c:6738 dwarf.c:7582 dwarf.c:7640
+#, c-format
+msgid "<End of list>\n"
+msgstr ""
+
+#: dwarf.c:6402 dwarf.c:6566 dwarf.c:7645
+#, c-format
+msgid "(base address)\n"
+msgstr ""
+
+#: dwarf.c:6416 dwarf.c:6538 dwarf.c:6726
+#, c-format
+msgid ""
+"views at %8.8lx for:\n"
+" %*s "
+msgstr ""
+
+#: dwarf.c:6452 dwarf.c:6623
+msgid " (start == end)"
+msgstr ""
+
+#: dwarf.c:6454 dwarf.c:6625
+msgid " (start > end)"
+msgstr ""
+
+#: dwarf.c:6491
+#, c-format
+msgid "No debug information available for loclists lists of entry: %u\n"
+msgstr ""
+
+#: dwarf.c:6571
+#, c-format
+msgid "View pair entry in loclist with locviews attribute\n"
+msgstr ""
+
+#: dwarf.c:6578
+#, c-format
+msgid "views for:\n"
+msgstr ""
+
+#: dwarf.c:6582
+#, c-format
+msgid "Invalid location list entry type %d\n"
+msgstr ""
+
+#: dwarf.c:6634
+#, c-format
+msgid "Trailing view pair not used in a range"
+msgstr ""
+
+#: dwarf.c:6676
+#, c-format
+msgid "No debug information for loc lists of entry: %u\n"
+msgstr ""
+
+#: dwarf.c:6744
+#, c-format
+msgid "(base address selection entry)\n"
+msgstr ""
+
+#: dwarf.c:6765
+#, c-format
+msgid "Unknown location list entry type 0x%x.\n"
+msgstr ""
+
+#: dwarf.c:6858 dwarf.c:7115 dwarf.c:7333 dwarf.c:7440 dwarf.c:7708
+#, fuzzy, c-format
+msgid ""
+"\n"
+"The %s section is empty.\n"
+msgstr ""
+"\n"
+"Nu există nici o secțiune în acest fișier.\n"
+
+#: dwarf.c:6878
+#, c-format
+msgid "The %s section contains corrupt or unsupported version number: %d.\n"
+msgstr ""
+
+#: dwarf.c:6898
+#, c-format
+msgid "The %s section contains unsupported offset entry count: %d.\n"
+msgstr ""
+
+#: dwarf.c:6909 dwarf.c:7339 dwarf.c:7781
+#, c-format
+msgid "Unable to load/parse the .debug_info section, so cannot interpret the %s section.\n"
+msgstr ""
+
+#: dwarf.c:6957
+msgid "No location lists in .debug_info section!\n"
+msgstr ""
+
+#: dwarf.c:6962
+#, c-format
+msgid "Location lists in %s section start at 0x%s\n"
+msgstr ""
+
+#: dwarf.c:6972
+#, c-format
+msgid ""
+" Warning: This section has relocations - addresses seen here may not be accurate.\n"
+"\n"
+msgstr ""
+
+#: dwarf.c:6974
+#, fuzzy, c-format
+msgid " Offset Begin End Expression\n"
+msgstr " Clasa: %s\n"
+
+#: dwarf.c:7029 dwarf.c:7882
+#, c-format
+msgid "There is a hole [0x%lx - 0x%lx] in %s section.\n"
+msgstr ""
+
+#: dwarf.c:7034 dwarf.c:7889
+#, c-format
+msgid "There is an overlap [0x%lx - 0x%lx] in %s section.\n"
+msgstr ""
+
+#: dwarf.c:7044
+#, c-format
+msgid "Offset 0x%lx is bigger than %s section size.\n"
+msgstr ""
+
+#: dwarf.c:7052
+#, c-format
+msgid "View Offset 0x%lx is bigger than %s section size.\n"
+msgstr ""
+
+#: dwarf.c:7070
+#, fuzzy
+msgid "DWO is not yet supported.\n"
msgstr "tip float BCD nu este suportat"
-#: ieee.c:895
-msgid "unexpected number"
-msgstr "numãr neaºteptat"
+#: dwarf.c:7087
+msgid "Hole and overlap detection requires adjacent view lists and loclists.\n"
+msgstr ""
-#: ieee.c:902
-msgid "unexpected record type"
-msgstr "tip înregistrare (record) neaºteptat"
+#: dwarf.c:7096
+#, c-format
+msgid "There is %ld unused byte at the end of section %s\n"
+msgid_plural "There are %ld unused bytes at the end of section %s\n"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
-#: ieee.c:935
-msgid "blocks left on stack at end"
+#: dwarf.c:7248
+msgid "Only DWARF 2 and 3 aranges are currently supported.\n"
msgstr ""
-#: ieee.c:1198
-msgid "unknown BB type"
-msgstr "tip BB necunoscut"
+#: dwarf.c:7252
+#, c-format
+msgid " Length: %ld\n"
+msgstr " Lungime: %ld\n"
-#: ieee.c:1207
-msgid "stack overflow"
-msgstr "depãºire stivã"
+#: dwarf.c:7254
+#, c-format
+msgid " Version: %d\n"
+msgstr " Versiune: %d\n"
-#: ieee.c:1230
-msgid "stack underflow"
-msgstr "depãsire negativã stivã"
+#: dwarf.c:7255
+#, c-format
+msgid " Offset into .debug_info: 0x%lx\n"
+msgstr ""
-#: ieee.c:1342 ieee.c:1412 ieee.c:2109
-msgid "illegal variable index"
-msgstr "index variabilã ilegal"
+#: dwarf.c:7257
+#, c-format
+msgid " Pointer Size: %d\n"
+msgstr ""
-#: ieee.c:1390
-msgid "illegal type index"
-msgstr "index tip ilegal"
+#: dwarf.c:7258
+#, c-format
+msgid " Segment Size: %d\n"
+msgstr ""
-#: ieee.c:1400 ieee.c:1437
-msgid "unknown TY code"
-msgstr "cod TY necunoscut"
+#: dwarf.c:7265
+#, c-format
+msgid "Invalid address size in %s section!\n"
+msgstr ""
-#: ieee.c:1419
-msgid "undefined variable in TY"
-msgstr "variabila nedefinitã în TY"
+#: dwarf.c:7275
+msgid "Pointer size + Segment size is not a power of two.\n"
+msgstr ""
-#. Pascal file name. FIXME.
-#: ieee.c:1830
-msgid "Pascal file name not supported"
-msgstr "nume fiºier Pascal nesuportat"
+#: dwarf.c:7280
+#, fuzzy, c-format
+msgid ""
+"\n"
+" Address Length\n"
+msgstr " Adresă punct de intrare: "
-#: ieee.c:1878
-msgid "unsupported qualifier"
+#: dwarf.c:7282
+#, c-format
+msgid ""
+"\n"
+" Address Length\n"
msgstr ""
-#: ieee.c:2147
-msgid "undefined variable in ATN"
+#: dwarf.c:7359
+#, c-format
+msgid "Corrupt address base (%lx) found in debug section %u\n"
msgstr ""
-#: ieee.c:2190
-msgid "unknown ATN type"
-msgstr "tip ATN necunoscut"
+#: dwarf.c:7376
+#, c-format
+msgid " For compilation unit at offset 0x%s:\n"
+msgstr ""
+
+#: dwarf.c:7379
+#, c-format
+msgid "\tIndex\tAddress\n"
+msgstr ""
+
+#: dwarf.c:7391
+#, c-format
+msgid "Corrupt %s section: expecting header size of 8 or 16, but found %ld instead\n"
+msgstr ""
+
+#: dwarf.c:7403
+#, c-format
+msgid "Corrupt %s section: expecting version number 5 in header but found %d instead\n"
+msgstr ""
+
+#: dwarf.c:7417
+#, c-format
+msgid "\t%d:\t"
+msgstr ""
+
+#: dwarf.c:7482 dwarf.c:7506
+#, c-format
+msgid " Length: %#lx\n"
+msgstr ""
+
+#: dwarf.c:7483 dwarf.c:7508
+#, c-format
+msgid " Index Offset [String]\n"
+msgstr ""
+
+#: dwarf.c:7491
+#, c-format
+msgid "Section %s is too small %#lx\n"
+msgstr ""
+
+#: dwarf.c:7499
+#, c-format
+msgid "Unexpected version number in str_offset header: %#x\n"
+msgstr ""
+
+#: dwarf.c:7504
+#, c-format
+msgid "Unexpected value in str_offset header's padding field: %#x\n"
+msgstr ""
-#. Reserved for FORTRAN common.
-#: ieee.c:2312
-msgid "unsupported ATN11"
-msgstr "ATN11 nesuportat"
+#: dwarf.c:7507
+#, fuzzy, c-format
+msgid " Version: %#lx\n"
+msgstr " Atribute: %s Versiune: %d\n"
-#. We have no way to record this information. FIXME.
-#: ieee.c:2339
-msgid "unsupported ATN12"
-msgstr "ATN12 nesuportat"
+#: dwarf.c:7601 dwarf.c:7681
+msgid "(start == end)"
+msgstr ""
-#: ieee.c:2399
-msgid "unexpected string in C++ misc"
-msgstr "ºir neaºteptat în C++ misc"
+#: dwarf.c:7603 dwarf.c:7683
+msgid "(start > end)"
+msgstr ""
-#: ieee.c:2412
-msgid "bad misc record"
-msgstr "înregistrare misc incorectã"
+#: dwarf.c:7627
+#, c-format
+msgid "Range list starting at offset 0x%s is not terminated.\n"
+msgstr ""
-#: ieee.c:2453
-msgid "unrecognized C++ misc record"
-msgstr "secvenþã C++ misc nerecunoscutã"
+#: dwarf.c:7661
+#, c-format
+msgid "Invalid range list entry type %d\n"
+msgstr ""
-#: ieee.c:2568
-msgid "undefined C++ object"
-msgstr "obiect C++ nedefinit"
+#: dwarf.c:7742
+#, c-format
+msgid "The length field (0x%lx) in the debug_rnglists header is wrong - the section is too small\n"
+msgstr ""
-#: ieee.c:2602
-msgid "unrecognized C++ object spec"
-msgstr "spec obiect C++ nerecunoscut"
+#: dwarf.c:7753
+msgid "Only DWARF version 5 debug_rnglists info is currently supported.\n"
+msgstr ""
-#: ieee.c:2638
-msgid "unsupported C++ object type"
-msgstr "tip obiect C++ nesuportat"
+#: dwarf.c:7772
+#, c-format
+msgid "The %s section contains unsupported offset entry count: %u.\n"
+msgstr ""
-#: ieee.c:2648
-msgid "C++ base class not defined"
+#. This can happen when the file was compiled with -gsplit-debug
+#. which removes references to range lists from the primary .o file.
+#: dwarf.c:7802
+#, c-format
+msgid "No range lists in .debug_info section.\n"
msgstr ""
-#: ieee.c:2660 ieee.c:2765
-msgid "C++ object has no fields"
+#: dwarf.c:7834
+#, c-format
+msgid "Range lists in %s section start at 0x%lx\n"
msgstr ""
-#: ieee.c:2679
-msgid "C++ base class not found in container"
+#: dwarf.c:7839
+#, c-format
+msgid " Offset Begin End\n"
msgstr ""
-#: ieee.c:2786
-msgid "C++ data member not found in container"
+#: dwarf.c:7857
+#, c-format
+msgid "Corrupt pointer size (%d) in debug entry at offset %8.8lx\n"
msgstr ""
-#: ieee.c:2827 ieee.c:2977
-msgid "unknown C++ visibility"
+#: dwarf.c:7864
+#, c-format
+msgid "Corrupt offset (%#8.8lx) in range entry %u\n"
msgstr ""
-#: ieee.c:2861
-msgid "bad C++ field bit pos or size"
+#: dwarf.c:7965
+#, c-format
+msgid "Unfeasibly large register number: %u\n"
msgstr ""
-#: ieee.c:2953
-msgid "bad type for C++ method function"
+#: dwarf.c:7978
+#, c-format
+msgid "Out of memory allocating %u columns in dwarf frame arrays\n"
msgstr ""
-#: ieee.c:2963
-msgid "no type information for C++ method function"
+#: dwarf.c:8427
+msgid "No terminator for augmentation name\n"
msgstr ""
-#: ieee.c:3002
-msgid "C++ static virtual method"
+#: dwarf.c:8445
+#, c-format
+msgid "Invalid pointer size (%d) in CIE data\n"
msgstr ""
-#: ieee.c:3097
-msgid "unrecognized C++ object overhead spec"
+#: dwarf.c:8453
+#, c-format
+msgid "Invalid segment size (%d) in CIE data\n"
msgstr ""
-#: ieee.c:3136
-msgid "undefined C++ vtable"
+#: dwarf.c:8489 dwarf.c:8862
+#, c-format
+msgid "Augmentation data too long: 0x%s, expected at most %#lx\n"
msgstr ""
-#: ieee.c:3205
-msgid "C++ default values not in a function"
+#: dwarf.c:8576
+#, c-format
+msgid " Augmentation data: "
msgstr ""
-#: ieee.c:3245
-msgid "unrecognized C++ default type"
+#: dwarf.c:8592
+msgid "bad register: "
msgstr ""
-#: ieee.c:3276
-msgid "reference parameter is not a pointer"
+#: dwarf.c:8764
+msgid "Failed to read CIE information\n"
msgstr ""
-#: ieee.c:3359
-msgid "unrecognized C++ reference type"
-msgstr "tip referinþã C++ nerecunoscut"
+#: dwarf.c:8775 dwarf.c:8796 dwarf.c:8823
+#, fuzzy
+msgid "Invalid max register\n"
+msgstr "Rdăcină (radix) invalidă: %s\n"
-#: ieee.c:3441
-msgid "C++ reference not found"
-msgstr "referinþa C++ nu a fost gãsitã"
+#. PR 17512: file: 9e196b3e.
+#: dwarf.c:8838
+#, c-format
+msgid "Probably corrupt segment size: %d - using 4 instead\n"
+msgstr ""
-#: ieee.c:3449
-msgid "C++ reference is not pointer"
-msgstr "referinþa C++ nu este pointer"
+#. Ideally translate "invalid " to 8 chars, trailing space
+#. is optional.
+#: dwarf.c:8884
+#, fuzzy, c-format
+msgid "cie=invalid "
+msgstr "număr invalid"
-#: ieee.c:3475 ieee.c:3483
-msgid "missing required ASN"
-msgstr "ASN necesar lipseºte"
+#: dwarf.c:9317
+msgid "Invalid column number in saved frame state\n"
+msgstr ""
-#: ieee.c:3510 ieee.c:3518
-msgid "missing required ATN65"
-msgstr "ATN65 necesar lipseºte"
+#: dwarf.c:9364
+#, c-format
+msgid " DW_CFA_def_cfa_expression: <corrupt len %lu>\n"
+msgstr ""
-#: ieee.c:3532
-msgid "bad ATN65 record"
+#: dwarf.c:9387
+#, c-format
+msgid " DW_CFA_expression: <corrupt len %lu>\n"
msgstr ""
-#: ieee.c:4160
+#: dwarf.c:9520
#, c-format
-msgid "IEEE numeric overflow: 0x"
+msgid " DW_CFA_??? (User defined call frame op: %#x)\n"
msgstr ""
-#: ieee.c:4204
+#: dwarf.c:9522
#, c-format
-msgid "IEEE string length overflow: %u\n"
+msgid "Unsupported or unknown Dwarf Call Frame Instruction number: %#x\n"
msgstr ""
-#: ieee.c:5203
+#: dwarf.c:9636 dwarf.c:10053
#, c-format
-msgid "IEEE unsupported integer type size %u\n"
+msgid "Version %ld\n"
+msgstr ""
+
+#: dwarf.c:9642
+msgid "Only DWARF version 5 .debug_names is currently supported.\n"
msgstr ""
-#: ieee.c:5237
+#: dwarf.c:9649
#, c-format
-msgid "IEEE unsupported float type size %u\n"
+msgid "Padding field of .debug_names must be 0 (found 0x%x)\n"
msgstr ""
-#: ieee.c:5271
+#: dwarf.c:9654
+msgid "Compilation unit count must be >= 1 in .debug_names\n"
+msgstr ""
+
+#: dwarf.c:9665
#, c-format
-msgid "IEEE unsupported complex type size %u\n"
+msgid "Augmentation string length %u must be rounded up to a multiple of 4 in .debug_names.\n"
msgstr ""
-#: nlmconv.c:267 srconv.c:1810
-msgid "input and output files must be different"
+#: dwarf.c:9673
+#, c-format
+msgid "Augmentation string:"
msgstr ""
-#: nlmconv.c:314
-msgid "input file named both on command line and with INPUT"
+#: dwarf.c:9700
+#, c-format
+msgid "CU table:\n"
+msgstr ""
+
+#: dwarf.c:9709 dwarf.c:9722
+#, c-format
+msgid "[%3u] 0x%lx\n"
+msgstr ""
+
+#: dwarf.c:9713
+#, c-format
+msgid "TU table:\n"
+msgstr ""
+
+#: dwarf.c:9726
+#, c-format
+msgid "Foreign TU table:\n"
+msgstr ""
+
+#: dwarf.c:9735
+#, c-format
+msgid "[%3u] "
+msgstr ""
+
+#: dwarf.c:9746
+#, c-format
+msgid "Entry pool offset (0x%lx) exceeds unit size 0x%lx for unit 0x%lx in the debug_names\n"
+msgstr ""
+
+#: dwarf.c:9775
+#, c-format
+msgid "Used %zu of %lu bucket.\n"
+msgid_plural "Used %zu of %lu buckets.\n"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: dwarf.c:9802
+#, c-format
+msgid "Out of %lu items there are %zu bucket clashes (longest of %zu entries).\n"
msgstr ""
-#: nlmconv.c:323
-msgid "no input file"
-msgstr "nici un fiºier de intrare"
+#: dwarf.c:9839
+#, c-format
+msgid "Duplicate abbreviation tag %lu in unit 0x%lx in the debug_names\n"
+msgstr ""
-#: nlmconv.c:353
-msgid "no name for output file"
-msgstr "nici un nume pentru fiºierul de ieºire"
+#: dwarf.c:9861 dwarf.c:10179
+#, c-format
+msgid ""
+"\n"
+"Symbol table:\n"
+msgstr ""
-#: nlmconv.c:367
-msgid "warning: input and output formats are not compatible"
+#: dwarf.c:9913
+#, c-format
+msgid "Undefined abbreviation tag %lu in unit 0x%lx in the debug_names\n"
msgstr ""
-#: nlmconv.c:396
-msgid "make .bss section"
-msgstr "creazã secþiunea .bss"
+#: dwarf.c:9944
+#, c-format
+msgid " <no entries>"
+msgstr ""
-#: nlmconv.c:405
-msgid "make .nlmsections section"
-msgstr "creazã secþiunea .nlmsections"
+#: dwarf.c:9976
+msgid "The debuglink filename is corrupt/missing\n"
+msgstr ""
-#: nlmconv.c:407
-msgid "set .nlmsections flags"
-msgstr "seteazã atribute .nlmsections"
+#: dwarf.c:9980
+#, c-format
+msgid " Separate debug info file: %s\n"
+msgstr ""
-#: nlmconv.c:435
-msgid "set .bss vma"
-msgstr "seteazã vma .bss"
+#: dwarf.c:9991
+msgid "CRC offset missing/truncated\n"
+msgstr ""
-#: nlmconv.c:442
-msgid "set .data size"
-msgstr "seteazã dimensiune .data"
+#: dwarf.c:9997
+#, c-format
+msgid " CRC value: %#x\n"
+msgstr ""
-#: nlmconv.c:622
+#: dwarf.c:10001
#, c-format
-msgid "warning: symbol %s imported but not in import list"
-msgstr "avertisment: simbolul %s importat dar nu este prezent în lista de import"
+msgid "There are %#lx extraneous bytes at the end of the section\n"
+msgstr ""
-#: nlmconv.c:642
-msgid "set start address"
+#: dwarf.c:10015
+#, c-format
+msgid "Build-ID is too short (%#lx bytes)\n"
msgstr ""
-#: nlmconv.c:691
+#: dwarf.c:10019
#, c-format
-msgid "warning: START procedure %s not defined"
+msgid " Build-ID (%#lx bytes):"
msgstr ""
-#: nlmconv.c:693
+#: dwarf.c:10048
#, c-format
-msgid "warning: EXIT procedure %s not defined"
+msgid "Truncated header in the %s section.\n"
msgstr ""
-#: nlmconv.c:695
+#: dwarf.c:10059
#, c-format
-msgid "warning: CHECK procedure %s not defined"
+msgid "Unsupported version %lu.\n"
msgstr ""
-#: nlmconv.c:716 nlmconv.c:905
-msgid "custom section"
-msgstr "secþiune personalizatã"
+#: dwarf.c:10063
+msgid "The address table data in version 3 may be wrong.\n"
+msgstr ""
-#: nlmconv.c:737 nlmconv.c:934
-msgid "help section"
-msgstr "secþiune ajutor"
+#: dwarf.c:10065
+msgid "Version 4 does not support case insensitive lookups.\n"
+msgstr ""
-#: nlmconv.c:759 nlmconv.c:952
-msgid "message section"
-msgstr "secþiune mesaj"
+#: dwarf.c:10067
+msgid "Version 5 does not include inlined functions.\n"
+msgstr ""
-#: nlmconv.c:775 nlmconv.c:985
-msgid "module section"
-msgstr "secþiune modul"
+#: dwarf.c:10069
+msgid "Version 6 does not include symbol attributes.\n"
+msgstr ""
-#: nlmconv.c:795 nlmconv.c:1001
-msgid "rpc section"
-msgstr "secþiune rpc"
+#: dwarf.c:10087
+#, c-format
+msgid "Corrupt header in the %s section.\n"
+msgstr ""
-#. There is no place to record this information.
-#: nlmconv.c:831
+#: dwarf.c:10094
#, c-format
-msgid "%s: warning: shared libraries can not have uninitialized data"
+msgid "TU offset (%x) is less than CU offset (%x)\n"
msgstr ""
-#: nlmconv.c:852 nlmconv.c:1020
-msgid "shared section"
-msgstr "secþiune partajatã"
+#: dwarf.c:10103
+#, c-format
+msgid "Address table offset (%x) is less than TU offset (%x)\n"
+msgstr ""
-#: nlmconv.c:860
-msgid "warning: No version number given"
-msgstr "avertisment: Nici un numãr de versiune furnizat"
+#: dwarf.c:10113
+#, c-format
+msgid "Symbol table offset (%x) is less then Address table offset (%x)\n"
+msgstr ""
-#: nlmconv.c:900 nlmconv.c:929 nlmconv.c:947 nlmconv.c:996 nlmconv.c:1015
+#: dwarf.c:10122
#, c-format
-msgid "%s: read: %s"
-msgstr "%s: citit: %s"
+msgid "Constant pool offset (%x) is less than symbol table offset (%x)\n"
+msgstr ""
-#: nlmconv.c:922
-msgid "warning: FULLMAP is not supported; try ld -M"
-msgstr "avertisment: FULLMAP nu este suportat; încercaþi ld -M"
+#: dwarf.c:10137
+msgid "Address table extends beyond end of section.\n"
+msgstr ""
-#: nlmconv.c:1098
+#: dwarf.c:10141
#, c-format
-msgid "Usage: %s [option(s)] [in-file [out-file]]\n"
+msgid ""
+"\n"
+"CU table:\n"
msgstr ""
-#: nlmconv.c:1099
+#: dwarf.c:10147
#, c-format
-msgid " Convert an object file into a NetWare Loadable Module\n"
+msgid "[%3u] 0x%lx - 0x%lx\n"
msgstr ""
-#: nlmconv.c:1100
+#: dwarf.c:10152
#, c-format
msgid ""
-" The options are:\n"
-" -I --input-target=<bfdname> Set the input binary file format\n"
-" -O --output-target=<bfdname> Set the output binary file format\n"
-" -T --header-file=<file> Read <file> for NLM header information\n"
-" -l --linker=<linker> Use <linker> for any linking\n"
-" -d --debug Display on stderr the linker command line\n"
-" -h --help Display this information\n"
-" -v --version Display the program's version\n"
+"\n"
+"TU table:\n"
+msgstr ""
+
+#: dwarf.c:10159
+#, c-format
+msgid "[%3u] 0x%lx 0x%lx "
+msgstr ""
+
+#: dwarf.c:10166
+#, c-format
+msgid ""
+"\n"
+"Address table:\n"
+msgstr ""
+
+#: dwarf.c:10176
+#, c-format
+msgid "%lu\n"
+msgstr ""
+
+#: dwarf.c:10194
+#, c-format
+msgid "[%3u] <corrupt offset: %x>"
+msgstr ""
+
+#: dwarf.c:10195
+#, c-format
+msgid "Corrupt name offset of 0x%x found for symbol table slot %d\n"
+msgstr ""
+
+#: dwarf.c:10206
+#, c-format
+msgid "<invalid CU vector offset: %x>\n"
+msgstr ""
+
+#: dwarf.c:10207
+#, c-format
+msgid "Corrupt CU vector offset of 0x%x found for symbol table slot %d\n"
+msgstr ""
+
+#: dwarf.c:10218
+#, c-format
+msgid "Invalid number of CUs (0x%x) for symbol table slot %d\n"
+msgstr ""
+
+#: dwarf.c:10243
+msgid "static"
+msgstr ""
+
+#: dwarf.c:10243
+msgid "global"
+msgstr ""
+
+#: dwarf.c:10281 dwarf.c:10292
+msgid "Internal error: out of space in the shndx pool.\n"
msgstr ""
-#: nlmconv.c:1140
+#: dwarf.c:10355
+#, fuzzy, c-format
+msgid "Section %s is empty\n"
+msgstr "Secțiuni:\n"
+
+#: dwarf.c:10361
#, c-format
-msgid "support not compiled in for %s"
+msgid "Section %s is too small to contain a CU/TU header\n"
msgstr ""
-#: nlmconv.c:1177
-msgid "make section"
-msgstr "creazã secþiune"
+#: dwarf.c:10380
+#, fuzzy, c-format
+msgid " Version: %u\n"
+msgstr " Versiune: %d\n"
+
+#: dwarf.c:10382
+#, c-format
+msgid " Number of columns: %u\n"
+msgstr ""
-#: nlmconv.c:1191
-msgid "set section size"
-msgstr "seteazã dimensiune secþiune"
+#: dwarf.c:10383
+#, c-format
+msgid " Number of used entries: %u\n"
+msgstr ""
-#: nlmconv.c:1197
-msgid "set section alignment"
-msgstr "seteazã aliniere secþiune"
+#: dwarf.c:10384
+#, c-format
+msgid ""
+" Number of slots: %u\n"
+"\n"
+msgstr ""
-#: nlmconv.c:1201
-msgid "set section flags"
-msgstr "seteazã atribute secþiune"
+#: dwarf.c:10391
+#, c-format
+msgid "Section %s is too small for %u slot\n"
+msgid_plural "Section %s is too small for %u slots\n"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
-#: nlmconv.c:1212
-msgid "set .nlmsections size"
-msgstr "seteazã dimensiune .nlmsections"
+#: dwarf.c:10415
+msgid "Section index pool located before start of section\n"
+msgstr ""
-#: nlmconv.c:1293 nlmconv.c:1301 nlmconv.c:1310 nlmconv.c:1315
-msgid "set .nlmsection contents"
+#: dwarf.c:10420
+#, c-format
+msgid " [%3d] Signature: 0x%s Sections: "
msgstr ""
-#: nlmconv.c:1794
-msgid "stub section sizes"
-msgstr "dimensiuni secþiune stub"
+#: dwarf.c:10426
+#, c-format
+msgid "Section %s too small for shndx pool\n"
+msgstr ""
-#: nlmconv.c:1841
-msgid "writing stub"
-msgstr "scriu stub"
+#: dwarf.c:10472
+#, c-format
+msgid "Section %s too small for offset and size tables\n"
+msgstr ""
-#: nlmconv.c:1925
+#: dwarf.c:10479
#, c-format
-msgid "unresolved PC relative reloc against %s"
+msgid " Offset table\n"
+msgstr ""
+
+#: dwarf.c:10481 dwarf.c:10569
+msgid "signature"
+msgstr ""
+
+#: dwarf.c:10481 dwarf.c:10569
+msgid "dwo_id"
msgstr ""
-#: nlmconv.c:1989
+#: dwarf.c:10520
#, c-format
-msgid "overflow when adjusting relocation against %s"
+msgid "Row index (%u) is larger than number of used entries (%u)\n"
msgstr ""
-#: nlmconv.c:2116
+#: dwarf.c:10534 dwarf.c:10593
#, c-format
-msgid "%s: execution of %s failed: "
+msgid " [%3d] 0x%s"
msgstr ""
-#: nlmconv.c:2131
+#: dwarf.c:10549 dwarf.c:10621
#, c-format
-msgid "Execution of %s failed"
+msgid "Overlarge Dwarf section index detected: %u\n"
msgstr ""
-#: nm.c:224 size.c:80 strings.c:651
+#: dwarf.c:10567
+#, c-format
+msgid " Size table\n"
+msgstr ""
+
+#: dwarf.c:10607
+#, c-format
+msgid "Too many rows/columns in DWARF index section %s\n"
+msgstr ""
+
+#: dwarf.c:10636
+#, c-format
+msgid " Unsupported version (%d)\n"
+msgstr ""
+
+#: dwarf.c:10708
+#, c-format
+msgid "Displaying the debug contents of section %s is not yet supported.\n"
+msgstr ""
+
+#: dwarf.c:10739
+#, c-format
+msgid "Attempt to allocate an array with an excessive number of elements: 0x%lx\n"
+msgstr ""
+
+#: dwarf.c:10757
+#, c-format
+msgid "Attempt to re-allocate an array with an excessive number of elements: 0x%lx\n"
+msgstr ""
+
+#: dwarf.c:10773
+#, c-format
+msgid "Attempt to allocate a zero'ed array with an excessive number of elements: 0x%lx\n"
+msgstr ""
+
+#: dwarf.c:10871
+#, fuzzy, c-format
+msgid "Unable to reopen separate debug info file: %s\n"
+msgstr "Nu pot deschide fișierul-bază: %s"
+
+#: dwarf.c:10883
+#, c-format
+msgid "Separate debug info file %s found, but CRC does not match - ignoring\n"
+msgstr ""
+
+#: dwarf.c:11062
+#, fuzzy, c-format
+msgid "Corrupt debuglink section: %s\n"
+msgstr "Secțiune depanare nerecunoscută: %s\n"
+
+#: dwarf.c:11101
+msgid "Out of memory"
+msgstr ""
+
+#. Failed to find the file.
+#: dwarf.c:11176
+#, c-format
+msgid "could not find separate debug file '%s'\n"
+msgstr ""
+
+#: dwarf.c:11178 dwarf.c:11183 dwarf.c:11189 dwarf.c:11193 dwarf.c:11198
+#: dwarf.c:11201 dwarf.c:11204 dwarf.c:11207
+#, fuzzy, c-format
+msgid "tried: %s\n"
+msgstr ""
+"\n"
+"Fișier: %s\n"
+
+#: dwarf.c:11215
+#, c-format
+msgid "tried: DEBUGINFOD_URLS=%s\n"
+msgstr ""
+
+#: dwarf.c:11243
+#, fuzzy, c-format
+msgid "failed to open separate debug file: %s\n"
+msgstr "Nu pot deschide fișierul-bază: %s"
+
+#: dwarf.c:11252
+#, fuzzy, c-format
+msgid ""
+"\n"
+"%s: Found separate debug info file: %s\n"
+msgstr "%s: nu pot crea secțiune de depanare: %s"
+
+#: dwarf.c:11275
+msgid "Out of memory allocating dwo filename\n"
+msgstr ""
+
+#: dwarf.c:11281
+#, fuzzy, c-format
+msgid "Unable to load dwo file: %s\n"
+msgstr "Nu pot deschide fișierul-bază: %s"
+
+#. FIXME: We should check the dwo_id.
+#: dwarf.c:11288
+#, fuzzy, c-format
+msgid ""
+"%s: Found separate debug object file: %s\n"
+"\n"
+msgstr "%s: nu pot crea secțiune de depanare: %s"
+
+#: dwarf.c:11320
+msgid "Unable to load the .note.gnu.build-id section\n"
+msgstr ""
+
+#: dwarf.c:11326
+msgid ".note.gnu.build-id section is corrupt/empty\n"
+msgstr ""
+
+#: dwarf.c:11347
+msgid ".note.gnu.build-id data size is too small\n"
+msgstr ""
+
+#: dwarf.c:11353
+msgid ".note.gnu.build-id data size is too bug\n"
+msgstr ""
+
+#: dwarf.c:11414
+msgid ".debug_sup section is corrupt/empty\n"
+msgstr ""
+
+#: dwarf.c:11424
+msgid "filename in .debug_sup section is corrupt\n"
+msgstr ""
+
+#: dwarf.c:11439
+msgid "unable to construct path for supplementary debug file"
+msgstr ""
+
+#: dwarf.c:11453
+msgid "out of memory constructing filename for .debug_sup link\n"
+msgstr ""
+
+#: dwarf.c:11461
+#, c-format
+msgid "unable to open file '%s' referenced from .debug_sup section\n"
+msgstr ""
+
+#: dwarf.c:11466
+#, c-format
+msgid ""
+"%s: Found supplementary debug file: %s\n"
+"\n"
+msgstr ""
+
+#: dwarf.c:11558
+msgid "Multiple DWO_NAMEs encountered for the same CU\n"
+msgstr ""
+
+#: dwarf.c:11570
+msgid "multiple DWO_IDs encountered for the same CU\n"
+msgstr ""
+
+#: dwarf.c:11575
+#, fuzzy
+msgid "Unexpected DWO INFO type"
+msgstr "tip înregistrare (record) neașteptat"
+
+#: dwarf.c:11590
+#, c-format
+msgid ""
+"The %s section contains link(s) to dwo file(s):\n"
+"\n"
+msgstr ""
+
+#: dwarf.c:11595
+#, fuzzy, c-format
+msgid " Name: %s\n"
+msgstr "Nume: %s\n"
+
+#: dwarf.c:11596
+#, fuzzy, c-format
+msgid " Directory: %s\n"
+msgstr ""
+"\n"
+" Tabelul Director:\n"
+
+#: dwarf.c:11596
+msgid "<not-found>"
+msgstr ""
+
+#: dwarf.c:11598
+#, c-format
+msgid " ID: "
+msgstr ""
+
+#: dwarf.c:11600
+#, c-format
+msgid " ID: <not specified>\n"
+msgstr ""
+
+#: dwarf.c:11764 dwarf.c:11808
+#, c-format
+msgid "Unrecognized debug option '%s'\n"
+msgstr "Opțiune de depanare nerecunoscută '%s'\n"
+
+#: dwarf.h:273
+msgid "end of data encountered whilst reading LEB\n"
+msgstr ""
+
+#: dwarf.h:275
+msgid "read LEB value is too large to store in destination variable\n"
+msgstr ""
+
+#: elfcomm.c:47
+#, c-format
+msgid "%s: Error: "
+msgstr ""
+
+#: elfcomm.c:61
+#, c-format
+msgid "%s: Warning: "
+msgstr "%s: Avertisment: "
+
+#: elfcomm.c:73 elfcomm.c:88 elfcomm.c:166 elfcomm.c:236
+#, c-format
+msgid "Unhandled data length: %d\n"
+msgstr ""
+
+#: elfcomm.c:296 elfcomm.c:321 elfcomm.c:795
+msgid "Out of memory\n"
+msgstr "Memorie insuficientă\n"
+
+#: elfcomm.c:313
+#, c-format
+msgid "Abnormal length of thin archive member name: %lx\n"
+msgstr ""
+
+#: elfcomm.c:357
+#, c-format
+msgid "%s: invalid archive header size: %ld\n"
+msgstr ""
+
+#: elfcomm.c:370
+#, c-format
+msgid "%s: failed to skip archive symbol table\n"
+msgstr ""
+
+#: elfcomm.c:389
+#, c-format
+msgid "%s: the archive index is empty\n"
+msgstr ""
+
+#: elfcomm.c:397 elfcomm.c:426
+#, fuzzy, c-format
+msgid "%s: failed to read archive index\n"
+msgstr "%s: nici o arhivă deschisă\n"
+
+#: elfcomm.c:408
+#, c-format
+msgid "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"
+msgstr ""
+
+#: elfcomm.c:418
+msgid "Out of memory whilst trying to read archive symbol index\n"
+msgstr ""
+
+#: elfcomm.c:438
+msgid "Out of memory whilst trying to convert the archive symbol index\n"
+msgstr ""
+
+#: elfcomm.c:451
+#, c-format
+msgid "%s: the archive has an index but no symbols\n"
+msgstr ""
+
+#: elfcomm.c:459
+msgid "Out of memory whilst trying to read archive index symbol table\n"
+msgstr ""
+
+#: elfcomm.c:467
+#, c-format
+msgid "%s: failed to read archive index symbol table\n"
+msgstr ""
+
+#: elfcomm.c:477
+#, c-format
+msgid "%s: failed to read archive header following archive index\n"
+msgstr ""
+
+#: elfcomm.c:510
+#, c-format
+msgid "%s: failed to seek to first archive header\n"
+msgstr ""
+
+#. PR 24049 - we cannot use filedata->file_name as this will
+#. have already been freed.
+#: elfcomm.c:519 elfcomm.c:753 elfedit.c:613 readelf.c:22187
+#, c-format
+msgid "%s: failed to read archive header\n"
+msgstr ""
+
+#: elfcomm.c:536
+#, fuzzy, c-format
+msgid "%s has no archive index\n"
+msgstr "%s: nici o arhivă deschisă\n"
+
+#: elfcomm.c:548
+#, c-format
+msgid "%s: long name table is too small, (size = %ld)\n"
+msgstr ""
+
+#: elfcomm.c:556
+#, c-format
+msgid "%s: long name table is too big, (size = 0x%lx)\n"
+msgstr ""
+
+#: elfcomm.c:567
+msgid "Out of memory reading long symbol names in archive\n"
+msgstr ""
+
+#: elfcomm.c:575
+#, c-format
+msgid "%s: failed to read long symbol name string table\n"
+msgstr ""
+
+#: elfcomm.c:658
+msgid "Archive member uses long names, but no longname table found\n"
+msgstr ""
+
+#: elfcomm.c:672
+#, c-format
+msgid "Found long name index (%ld) beyond end of long name table\n"
+msgstr ""
+
+#: elfcomm.c:691
+msgid "Invalid Thin archive member name\n"
+msgstr ""
+
+#: elfcomm.c:747
+#, c-format
+msgid "%s: failed to seek to next file name\n"
+msgstr ""
+
+#: elfcomm.c:758 elfedit.c:620 readelf.c:22194
+#, fuzzy, c-format
+msgid "%s: did not find a valid archive header\n"
+msgstr "%s nu este o arhivă validă"
+
+#: elfedit.c:93
+#, c-format
+msgid "%s: Not an i386 nor x86-64 ELF file\n"
+msgstr ""
+
+#: elfedit.c:99
+#, fuzzy, c-format
+msgid "%s: stat () failed\n"
+msgstr "%s: fread a eșuat"
+
+#: elfedit.c:107
+#, fuzzy, c-format
+msgid "%s: mmap () failed\n"
+msgstr "%s: fread a eșuat"
+
+#: elfedit.c:246
+#, c-format
+msgid "%s: Invalid PT_NOTE segment\n"
+msgstr ""
+
+#: elfedit.c:271
+#, c-format
+msgid "Unknown x86 feature: %s\n"
+msgstr ""
+
+#: elfedit.c:319
+#, c-format
+msgid "%s: Unsupported EI_VERSION: %d is not %d\n"
+msgstr ""
+
+#: elfedit.c:340
+#, c-format
+msgid "%s: Unmatched input EI_CLASS: %d is not %d\n"
+msgstr ""
+
+#: elfedit.c:349
+#, c-format
+msgid "%s: Unmatched output EI_CLASS: %d is not %d\n"
+msgstr ""
+
+#: elfedit.c:358
+#, c-format
+msgid "%s: Unmatched e_machine: %d is not %d\n"
+msgstr ""
+
+#: elfedit.c:369
+#, c-format
+msgid "%s: Unmatched e_type: %d is not %d\n"
+msgstr ""
+
+#: elfedit.c:380
+#, c-format
+msgid "%s: Unmatched EI_OSABI: %d is not %d\n"
+msgstr ""
+
+#: elfedit.c:392
+#, c-format
+msgid "%s: Unmatched EI_ABIVERSION: %d is not %d\n"
+msgstr ""
+
+#: elfedit.c:429
+#, c-format
+msgid "%s: Failed to update ELF header: %s\n"
+msgstr ""
+
+#: elfedit.c:499
+msgid ""
+"This executable has been built without support for a\n"
+"64 bit data type and so it cannot process 64 bit ELF files.\n"
+msgstr ""
+
+#: elfedit.c:540
+#, c-format
+msgid "%s: Failed to read ELF header\n"
+msgstr ""
+
+#: elfedit.c:547
+#, c-format
+msgid "%s: Failed to seek to ELF header\n"
+msgstr ""
+
+#: elfedit.c:604 readelf.c:22175
+#, c-format
+msgid "%s: failed to seek to next archive header\n"
+msgstr ""
+
+#: elfedit.c:635 elfedit.c:644 readelf.c:22207 readelf.c:22216
+#, c-format
+msgid "%s: bad archive file name\n"
+msgstr ""
+
+#: elfedit.c:667 elfedit.c:778
+#, c-format
+msgid "Input file '%s' is not readable\n"
+msgstr ""
+
+#: elfedit.c:694
+#, c-format
+msgid "%s: failed to seek to archive member\n"
+msgstr ""
+
+#: elfedit.c:735 readelf.c:22335
+#, c-format
+msgid "'%s': No such file\n"
+msgstr ""
+
+#: elfedit.c:737 readelf.c:22337
+#, c-format
+msgid "Could not locate '%s'. System error message: %s\n"
+msgstr ""
+
+#: elfedit.c:758 readelf.c:22344
+#, c-format
+msgid "'%s' is not an ordinary file\n"
+msgstr "'%s' nu este un fișier obișnuit\n"
+
+#: elfedit.c:784 readelf.c:22366
+#, c-format
+msgid "%s: Failed to read file's magic number\n"
+msgstr ""
+
+#: elfedit.c:848
+#, c-format
+msgid "Unknown OSABI: %s\n"
+msgstr ""
+
+#: elfedit.c:873
+#, fuzzy, c-format
+msgid "Unknown machine type: %s\n"
+msgstr "tip format necunoscut `%s'"
+
+#: elfedit.c:892
+#, fuzzy, c-format
+msgid "Unknown type: %s\n"
+msgstr "tip BB necunoscut"
+
+#: elfedit.c:943
+#, fuzzy, c-format
+msgid "Usage: %s <option(s)> elffile(s)\n"
+msgstr "Folosire: %s [opțiune(i)] [adresă(e)]\n"
+
+#: elfedit.c:945
+#, c-format
+msgid " Update the ELF header of ELF files\n"
+msgstr ""
+
+#: elfedit.c:946 nm.c:295 objcopy.c:565 objcopy.c:706 strings.c:1314
+#, c-format
+msgid " The options are:\n"
+msgstr ""
+
+#: elfedit.c:947
+#, c-format
+msgid ""
+" --input-mach [none|i386|iamcu|l1om|k1om|x86_64]\n"
+" Set input machine type\n"
+" --output-mach [none|i386|iamcu|l1om|k1om|x86_64]\n"
+" Set output machine type\n"
+" --input-type [none|rel|exec|dyn]\n"
+" Set input file type\n"
+" --output-type [none|rel|exec|dyn]\n"
+" Set output file type\n"
+" --input-osabi [%s]\n"
+" Set input OSABI\n"
+" --output-osabi [%s]\n"
+" Set output OSABI\n"
+" --input-abiversion [0-255] Set input ABIVERSION\n"
+" --output-abiversion [0-255] Set output ABIVERSION\n"
+msgstr ""
+
+#: elfedit.c:964
+#, c-format
+msgid ""
+" --enable-x86-feature [ibt|shstk|lam_u48|lam_u57]\n"
+" Enable x86 feature\n"
+" --disable-x86-feature [ibt|shstk|lam_u48|lam_u57]\n"
+" Disable x86 feature\n"
+msgstr ""
+
+#: elfedit.c:970
+#, c-format
+msgid ""
+" -h --help Display this information\n"
+" -v --version Display the version number of %s\n"
+msgstr ""
+
+#: elfedit.c:1049 elfedit.c:1060
+#, fuzzy, c-format
+msgid "Invalid ABIVERSION: %s\n"
+msgstr "Rdăcină (radix) invalidă: %s\n"
+
+#: emul_aix.c:44
+#, c-format
+msgid " [-g] - 32 bit small archive\n"
+msgstr ""
+
+#: emul_aix.c:45
+#, c-format
+msgid " [-X32] - ignores 64 bit objects\n"
+msgstr ""
+
+#: emul_aix.c:46
+#, c-format
+msgid " [-X64] - ignores 32 bit objects\n"
+msgstr ""
+
+#: emul_aix.c:47
+#, c-format
+msgid " [-X32_64] - accepts 32 and 64 bit objects\n"
+msgstr ""
+
+#: mclex.c:245
+msgid "Duplicate symbol entered into keyword list."
+msgstr ""
+
+#: nm.c:293 size.c:88 strings.c:1312
#, c-format
msgid "Usage: %s [option(s)] [file(s)]\n"
msgstr ""
-#: nm.c:225
+#: nm.c:294
#, c-format
msgid " List symbols in [file(s)] (a.out by default).\n"
msgstr ""
-#: nm.c:226
+#: nm.c:296
+#, fuzzy, c-format
+msgid " -a, --debug-syms Display debugger-only symbols\n"
+msgstr " t - afișează conținutul arhivei\n"
+
+#: nm.c:298
+#, c-format
+msgid " -A, --print-file-name Print name of the input file before every symbol\n"
+msgstr ""
+
+#: nm.c:300
+#, fuzzy, c-format
+msgid " -B Same as --format=bsd\n"
+msgstr " OS/ABI: %s\n"
+
+#: nm.c:302
+#, c-format
+msgid " -C, --demangle[=STYLE] Decode mangled/processed symbol names\n"
+msgstr ""
+
+#: nm.c:304 readelf.c:5056
+#, fuzzy
+msgid " STYLE can be "
+msgstr " Clasa: %s\n"
+
+#: nm.c:306
+#, c-format
+msgid " --no-demangle Do not demangle low-level symbol names\n"
+msgstr ""
+
+#: nm.c:308
+#, c-format
+msgid " --recurse-limit Enable a demangling recursion limit. (default)\n"
+msgstr ""
+
+#: nm.c:310
+#, c-format
+msgid " --no-recurse-limit Disable a demangling recursion limit.\n"
+msgstr ""
+
+#: nm.c:312
+#, fuzzy, c-format
+msgid " -D, --dynamic Display dynamic symbols instead of normal symbols\n"
+msgstr " t - afișează conținutul arhivei\n"
+
+#: nm.c:314
+#, fuzzy, c-format
+msgid " --defined-only Display only defined symbols\n"
+msgstr " t - afișează conținutul arhivei\n"
+
+#: nm.c:316
+#, fuzzy, c-format
+msgid " -e (ignored)\n"
+msgstr " Versiune: %d\n"
+
+#: nm.c:318
#, c-format
msgid ""
-" The options are:\n"
-" -a, --debug-syms Display debugger-only symbols\n"
-" -A, --print-file-name Print name of the input file before every symbol\n"
-" -B Same as --format=bsd\n"
-" -C, --demangle[=STYLE] Decode low-level symbol names into user-level names\n"
-" The STYLE, if specified, can be `auto' (the default),\n"
-" `gnu', `lucid', `arm', `hp', `edg', `gnu-v3', `java'\n"
-" or `gnat'\n"
-" --no-demangle Do not demangle low-level symbol names\n"
-" -D, --dynamic Display dynamic symbols instead of normal symbols\n"
-" --defined-only Display only defined symbols\n"
-" -e (ignored)\n"
" -f, --format=FORMAT Use the output format FORMAT. FORMAT can be `bsd',\n"
-" `sysv' or `posix'. The default is `bsd'\n"
-" -g, --extern-only Display only external symbols\n"
+" `sysv', `posix' or 'just-symbols'.\n"
+" The default is `bsd'\n"
+msgstr ""
+
+#: nm.c:322
+#, fuzzy, c-format
+msgid " -g, --extern-only Display only external symbols\n"
+msgstr " t - afișează conținutul arhivei\n"
+
+#: nm.c:324
+#, c-format
+msgid " --ifunc-chars=CHARS Characters to use when displaying ifunc symbols\n"
+msgstr ""
+
+#: nm.c:326
+#, c-format
+msgid " -j, --just-symbols Same as --format=just-symbols\n"
+msgstr ""
+
+#: nm.c:328
+#, c-format
+msgid ""
" -l, --line-numbers Use debugging information to find a filename and\n"
" line number for each symbol\n"
-" -n, --numeric-sort Sort symbols numerically by address\n"
-" -o Same as -A\n"
-" -p, --no-sort Do not sort the symbols\n"
-" -P, --portability Same as --format=posix\n"
-" -r, --reverse-sort Reverse the sense of the sort\n"
-" -S, --print-size Print size of defined symbols\n"
-" -s, --print-armap Include index for symbols from archive members\n"
-" --size-sort Sort symbols by size\n"
-" --special-syms Include special symbols in the output\n"
-" --synthetic Display synthetic symbols as well\n"
-" -t, --radix=RADIX Use RADIX for printing symbol values\n"
-" --target=BFDNAME Specify the target object format as BFDNAME\n"
-" -u, --undefined-only Display only undefined symbols\n"
-" -X 32_64 (ignored)\n"
-" -h, --help Display this information\n"
-" -V, --version Display this program's version number\n"
-"\n"
-msgstr ""
-
-#: nm.c:262 objdump.c:232
+msgstr ""
+
+#: nm.c:331
#, c-format
-msgid "Report bugs to %s.\n"
-msgstr "Raportaþi bug-uri la %s.\n"
+msgid " -n, --numeric-sort Sort symbols numerically by address\n"
+msgstr ""
-#: nm.c:294
+#: nm.c:333
+#, fuzzy, c-format
+msgid " -o Same as -A\n"
+msgstr " Versiune: %d\n"
+
+#: nm.c:335
+#, fuzzy, c-format
+msgid " -p, --no-sort Do not sort the symbols\n"
+msgstr " t - afișează conținutul arhivei\n"
+
+#: nm.c:337
+#, c-format
+msgid " -P, --portability Same as --format=posix\n"
+msgstr ""
+
+#: nm.c:339
+#, c-format
+msgid " -r, --reverse-sort Reverse the sense of the sort\n"
+msgstr ""
+
+#: nm.c:342
+#, c-format
+msgid " --plugin NAME Load the specified plugin\n"
+msgstr ""
+
+#: nm.c:345
+#, c-format
+msgid " -S, --print-size Print size of defined symbols\n"
+msgstr ""
+
+#: nm.c:347
+#, c-format
+msgid " -s, --print-armap Include index for symbols from archive members\n"
+msgstr ""
+
+#: nm.c:349
+#, c-format
+msgid " --quiet Suppress \"no symbols\" diagnostic\n"
+msgstr ""
+
+#: nm.c:351
+#, c-format
+msgid " --size-sort Sort symbols by size\n"
+msgstr ""
+
+#: nm.c:353
+#, c-format
+msgid " --special-syms Include special symbols in the output\n"
+msgstr ""
+
+#: nm.c:355
+#, fuzzy, c-format
+msgid " --synthetic Display synthetic symbols as well\n"
+msgstr " t - afișează conținutul arhivei\n"
+
+#: nm.c:357
+#, c-format
+msgid " -t, --radix=RADIX Use RADIX for printing symbol values\n"
+msgstr ""
+
+#: nm.c:359
+#, c-format
+msgid " --target=BFDNAME Specify the target object format as BFDNAME\n"
+msgstr ""
+
+#: nm.c:361
+#, c-format
+msgid " -u, --undefined-only Display only undefined symbols\n"
+msgstr ""
+
+#: nm.c:363
+#, c-format
+msgid ""
+" -U {d|s|i|x|e|h} Specify how to treat UTF-8 encoded unicode characters\n"
+" --unicode={default|show|invalid|hex|escape|highlight}\n"
+msgstr ""
+
+#: nm.c:366
+#, c-format
+msgid " --with-symbol-versions Display version strings after symbol names\n"
+msgstr ""
+
+#: nm.c:368
+#, fuzzy, c-format
+msgid " -X 32_64 (ignored)\n"
+msgstr " Versiune: %d\n"
+
+#: nm.c:370
+#, fuzzy, c-format
+msgid " @FILE Read options from FILE\n"
+msgstr " Lungime: %ld\n"
+
+#: nm.c:372
+#, fuzzy, c-format
+msgid " -h, --help Display this information\n"
+msgstr " t - afișează conținutul arhivei\n"
+
+#: nm.c:374
+#, fuzzy, c-format
+msgid " -V, --version Display this program's version number\n"
+msgstr " t - afișează conținutul arhivei\n"
+
+#: nm.c:395
#, c-format
msgid "%s: invalid radix"
-msgstr "%s: rãdãcinã (radix) invalidã"
+msgstr "%s: rădăcină (radix) invalidă"
-#: nm.c:318
+#: nm.c:425
#, c-format
msgid "%s: invalid output format"
-msgstr "%s: format de ieºire invalid"
+msgstr "%s: format de ieșire invalid"
-#: nm.c:339 readelf.c:6342 readelf.c:6378
+#: nm.c:450 readelf.c:12440 readelf.c:12483
#, c-format
msgid "<processor specific>: %d"
msgstr ""
-#: nm.c:341 readelf.c:6345 readelf.c:6390
+#: nm.c:452 readelf.c:12447 readelf.c:12500
#, c-format
msgid "<OS specific>: %d"
msgstr ""
-#: nm.c:343 readelf.c:6347 readelf.c:6393
+#: nm.c:454 readelf.c:12450 readelf.c:12503
#, c-format
msgid "<unknown>: %d"
msgstr "<necunoscut>: %d"
-#: nm.c:380
+#: nm.c:484
+#, fuzzy, c-format
+msgid "<unknown>: %d/%d"
+msgstr "<necunoscut>: %d"
+
+#: nm.c:742
#, c-format
msgid ""
"\n"
"Archive index:\n"
msgstr ""
-#: nm.c:1225
+#: nm.c:797 nm.c:1494
+#, c-format
+msgid "%s: plugin needed to handle lto object"
+msgstr ""
+
+#: nm.c:1731
#, c-format
msgid ""
"\n"
@@ -1663,7 +4911,7 @@ msgid ""
"\n"
msgstr ""
-#: nm.c:1227
+#: nm.c:1733
#, c-format
msgid ""
"\n"
@@ -1672,21 +4920,21 @@ msgid ""
"\n"
msgstr ""
-#: nm.c:1229 nm.c:1280
+#: nm.c:1735 nm.c:1796
#, c-format
msgid ""
"Name Value Class Type Size Line Section\n"
"\n"
msgstr ""
-#: nm.c:1232 nm.c:1283
+#: nm.c:1738 nm.c:1799
#, c-format
msgid ""
"Name Value Class Type Size Line Section\n"
"\n"
msgstr ""
-#: nm.c:1276
+#: nm.c:1792
#, c-format
msgid ""
"\n"
@@ -1695,7 +4943,7 @@ msgid ""
"\n"
msgstr ""
-#: nm.c:1278
+#: nm.c:1794
#, c-format
msgid ""
"\n"
@@ -1704,67 +4952,100 @@ msgid ""
"\n"
msgstr ""
-#: nm.c:1580
+#: nm.c:1900
+#, c-format
+msgid "Print width has not been initialized (%d)"
+msgstr ""
+
+#: nm.c:2162 objdump.c:5674 readelf.c:5472 strings.c:292
+#, fuzzy, c-format
+msgid "invalid argument to -U/--unicode: %s"
+msgstr "argument invalid pentru --format: %s"
+
+#: nm.c:2177
msgid "Only -X 32_64 is supported"
msgstr ""
-#: nm.c:1600
+#: nm.c:2209
msgid "Using the --size-sort and --undefined-only options together"
msgstr ""
-#: nm.c:1601
+#: nm.c:2210
msgid "will produce no output, since undefined symbols have no size."
msgstr ""
-#: nm.c:1629
-#, c-format
-msgid "data size %ld"
-msgstr ""
-
-#: objcopy.c:396 srconv.c:1721
+#: objcopy.c:563 srconv.c:1693
#, c-format
msgid "Usage: %s [option(s)] in-file [out-file]\n"
msgstr ""
-#: objcopy.c:397
+#: objcopy.c:564
#, c-format
msgid " Copies a binary file, possibly transforming it in the process\n"
msgstr ""
-#: objcopy.c:398 objcopy.c:487
-#, c-format
-msgid " The options are:\n"
-msgstr ""
-
-#: objcopy.c:399
+#: objcopy.c:566
#, c-format
msgid ""
" -I --input-target <bfdname> Assume input file is in format <bfdname>\n"
" -O --output-target <bfdname> Create an output file in format <bfdname>\n"
-" -B --binary-architecture <arch> Set arch of output file, when input is binary\n"
+" -B --binary-architecture <arch> Set output arch, when input is arch-less\n"
" -F --target <bfdname> Set both input and output format to <bfdname>\n"
" --debugging Convert debugging information, if possible\n"
" -p --preserve-dates Copy modified/access timestamps to the output\n"
+msgstr ""
+
+#: objcopy.c:574 objcopy.c:714
+#, c-format
+msgid ""
+" -D --enable-deterministic-archives\n"
+" Produce deterministic output when stripping archives (default)\n"
+" -U --disable-deterministic-archives\n"
+" Disable -D behavior\n"
+msgstr ""
+
+#: objcopy.c:580 objcopy.c:720
+#, c-format
+msgid ""
+" -D --enable-deterministic-archives\n"
+" Produce deterministic output when stripping archives\n"
+" -U --disable-deterministic-archives\n"
+" Disable -D behavior (default)\n"
+msgstr ""
+
+#: objcopy.c:585
+#, c-format
+msgid ""
" -j --only-section <name> Only copy section <name> into the output\n"
" --add-gnu-debuglink=<file> Add section .gnu_debuglink linking to <file>\n"
" -R --remove-section <name> Remove section <name> from the output\n"
+" --remove-relocations <name> Remove relocations from section <name>\n"
" -S --strip-all Remove all symbol and relocation information\n"
" -g --strip-debug Remove all debugging symbols & sections\n"
+" --strip-dwo Remove all DWO sections\n"
" --strip-unneeded Remove all symbols not needed by relocations\n"
" -N --strip-symbol <name> Do not copy symbol <name>\n"
" --strip-unneeded-symbol <name>\n"
" Do not copy symbol <name> unless needed by\n"
" relocations\n"
" --only-keep-debug Strip everything but the debug information\n"
-" -K --keep-symbol <name> Only copy symbol <name>\n"
+" --extract-dwo Copy only DWO sections\n"
+" --extract-symbol Remove section contents but keep symbols\n"
+" --keep-section <name> Do not strip section <name>\n"
+" -K --keep-symbol <name> Do not strip symbol <name>\n"
+" --keep-section-symbols Do not strip section symbols\n"
+" --keep-file-symbols Do not strip file symbol(s)\n"
+" --localize-hidden Turn all ELF hidden symbols into locals\n"
" -L --localize-symbol <name> Force symbol <name> to be marked as a local\n"
+" --globalize-symbol <name> Force symbol <name> to be marked as a global\n"
" -G --keep-global-symbol <name> Localize all symbols except <name>\n"
" -W --weaken-symbol <name> Force symbol <name> to be marked as a weak\n"
" --weaken Force all global symbols to be marked as weak\n"
" -w --wildcard Permit wildcard in symbol comparison\n"
" -x --discard-all Remove all non-global symbols\n"
" -X --discard-locals Remove any compiler-generated symbols\n"
-" -i --interleave <number> Only copy one out of every <number> bytes\n"
+" -i --interleave[=<number>] Only copy N out of every <number> bytes\n"
+" --interleave-width <number> Set N for --interleave\n"
" -b --byte <num> Select byte <num> in every interleaved block\n"
" --gap-fill <val> Fill gaps between sections with <val>\n"
" --pad-to <addr> Pad the last section up to address <addr>\n"
@@ -1783,10 +5064,19 @@ msgid ""
" Warn if a named section does not exist\n"
" --set-section-flags <name>=<flags>\n"
" Set section <name>'s properties to <flags>\n"
+" --set-section-alignment <name>=<align>\n"
+" Set section <name>'s alignment to <align> bytes\n"
" --add-section <name>=<file> Add section <name> found in <file> to output\n"
+" --update-section <name>=<file>\n"
+" Update contents of section <name> with\n"
+" contents found in <file>\n"
+" --dump-section <name>=<file> Dump the contents of section <name> into <file>\n"
" --rename-section <old>=<new>[,<flags>] Rename section <old> to <new>\n"
+" --long-section-names {enable|disable|keep}\n"
+" Handle long section names in Coff objects.\n"
" --change-leading-char Force output format's leading character style\n"
" --remove-leading-char Remove leading character from global symbols\n"
+" --reverse-bytes=<num> Reverse <num> bytes at a time, in output sections with content\n"
" --redefine-sym <old>=<new> Redefine symbol name <old> to <new>\n"
" --redefine-syms <file> --redefine-sym for all symbol pairs \n"
" listed in <file>\n"
@@ -1798,9 +5088,11 @@ msgid ""
" in <file>\n"
" --keep-symbols <file> -K for all symbols listed in <file>\n"
" --localize-symbols <file> -L for all symbols listed in <file>\n"
+" --globalize-symbols <file> --globalize-symbol for all in <file>\n"
" --keep-global-symbols <file> -G for all symbols listed in <file>\n"
" --weaken-symbols <file> -W for all symbols listed in <file>\n"
-" --alt-machine-code <index> Use alternate machine code for output\n"
+" --add-symbol <name>=[<section>:]<value>[,<flags>] Add a symbol\n"
+" --alt-machine-code <index> Use the target's <index>'th alternative machine\n"
" --writable-text Mark the output text as writable\n"
" --readonly-text Make the output text write protected\n"
" --pure Mark the output file as demand paged\n"
@@ -1810,36 +5102,66 @@ msgid ""
" --prefix-alloc-sections <prefix>\n"
" Add <prefix> to start of every allocatable\n"
" section name\n"
+" --file-alignment <num> Set PE file alignment to <num>\n"
+" --heap <reserve>[,<commit>] Set PE reserve/commit heap to <reserve>/\n"
+" <commit>\n"
+" --image-base <address> Set PE image base to <address>\n"
+" --section-alignment <num> Set PE section alignment to <num>\n"
+" --stack <reserve>[,<commit>] Set PE reserve/commit stack to <reserve>/\n"
+" <commit>\n"
+" --subsystem <name>[:<version>]\n"
+" Set PE subsystem to <name> [& <version>]\n"
+" --compress-debug-sections[={none|zlib|zlib-gnu|zlib-gabi}]\n"
+" Compress DWARF debug sections using zlib\n"
+" --decompress-debug-sections Decompress DWARF debug sections using zlib\n"
+" --elf-stt-common=[yes|no] Generate ELF common symbols with STT_COMMON\n"
+" type\n"
+" --verilog-data-width <number> Specifies data width, in bytes, for verilog output\n"
+" -M --merge-notes Remove redundant entries in note sections\n"
+" --no-merge-notes Do not attempt to remove redundant notes (default)\n"
" -v --verbose List all object files modified\n"
+" @<file> Read options from <file>\n"
" -V --version Display this program's version number\n"
" -h --help Display this output\n"
" --info List object formats & architectures supported\n"
msgstr ""
-#: objcopy.c:485
+#: objcopy.c:704
#, c-format
msgid "Usage: %s <option(s)> in-file(s)\n"
msgstr ""
-#: objcopy.c:486
+#: objcopy.c:705
#, c-format
msgid " Removes symbols and sections from files\n"
msgstr ""
-#: objcopy.c:488
+#: objcopy.c:707
#, c-format
msgid ""
" -I --input-target=<bfdname> Assume input file is in format <bfdname>\n"
" -O --output-target=<bfdname> Create an output file in format <bfdname>\n"
" -F --target=<bfdname> Set both input and output format to <bfdname>\n"
" -p --preserve-dates Copy modified/access timestamps to the output\n"
-" -R --remove-section=<name> Remove section <name> from the output\n"
+msgstr ""
+
+#: objcopy.c:725
+#, c-format
+msgid ""
+" -R --remove-section=<name> Also remove section <name> from the output\n"
+" --remove-relocations <name> Remove relocations from section <name>\n"
" -s --strip-all Remove all symbol and relocation information\n"
" -g -S -d --strip-debug Remove all debugging symbols & sections\n"
+" --strip-dwo Remove all DWO sections\n"
" --strip-unneeded Remove all symbols not needed by relocations\n"
" --only-keep-debug Strip everything but the debug information\n"
+" -M --merge-notes Remove redundant entries in note sections (default)\n"
+" --no-merge-notes Do not attempt to remove redundant notes\n"
" -N --strip-symbol=<name> Do not copy symbol <name>\n"
-" -K --keep-symbol=<name> Only copy symbol <name>\n"
+" --keep-section=<name> Do not strip section <name>\n"
+" -K --keep-symbol=<name> Do not strip symbol <name>\n"
+" --keep-section-symbols Do not strip section symbols\n"
+" --keep-file-symbols Do not strip file symbol(s)\n"
" -w --wildcard Permit wildcard in symbol comparison\n"
" -x --discard-all Remove all non-global symbols\n"
" -X --discard-locals Remove any compiler-generated symbols\n"
@@ -1850,3095 +5172,7454 @@ msgid ""
" -o <file> Place stripped output into <file>\n"
msgstr ""
-#: objcopy.c:560
+#: objcopy.c:803
#, c-format
msgid "unrecognized section flag `%s'"
-msgstr "atribut secþiune nerecunoscut `%s'"
+msgstr "atribut secțiune nerecunoscut `%s'"
-#: objcopy.c:561
+#: objcopy.c:804 objcopy.c:876
#, c-format
msgid "supported flags: %s"
msgstr "atribute suportate: %s"
-#: objcopy.c:638
+#: objcopy.c:875
+#, fuzzy, c-format
+msgid "unrecognized symbol flag `%s'"
+msgstr "atribut secțiune nerecunoscut `%s'"
+
+#: objcopy.c:934
+#, c-format
+msgid "error: %s both copied and removed"
+msgstr ""
+
+#: objcopy.c:940
+#, c-format
+msgid "error: %s both sets and alters VMA"
+msgstr ""
+
+#: objcopy.c:946
+#, c-format
+msgid "error: %s both sets and alters LMA"
+msgstr ""
+
+#: objcopy.c:1091
#, c-format
msgid "cannot open '%s': %s"
msgstr "nu pot deschide '%s': %s"
-#: objcopy.c:641 objcopy.c:2629
+#: objcopy.c:1094 objcopy.c:5091
#, c-format
msgid "%s: fread failed"
-msgstr "%s: fread a eºuat"
+msgstr "%s: fread a eșuat"
-#: objcopy.c:714
+#: objcopy.c:1167
#, c-format
msgid "%s:%d: Ignoring rubbish found on this line"
msgstr ""
-#: objcopy.c:976
+#: objcopy.c:1339
+#, c-format
+msgid "error: section %s matches both remove and copy options"
+msgstr ""
+
+#: objcopy.c:1342
+#, c-format
+msgid "error: section %s matches both update and remove options"
+msgstr ""
+
+#: objcopy.c:1500
+#, c-format
+msgid "Section %s not found"
+msgstr ""
+
+#: objcopy.c:1550
+msgid "redefining symbols does not work on LTO-compiled object files"
+msgstr ""
+
+#: objcopy.c:1662
+#, c-format
+msgid "not stripping symbol `%s' because it is named in a relocation"
+msgstr ""
+
+#: objcopy.c:1723
+#, fuzzy, c-format
+msgid "'before=%s' not found"
+msgstr "referința C++ nu a fost găsită"
+
+#: objcopy.c:1762
#, c-format
msgid "%s: Multiple redefinition of symbol \"%s\""
msgstr ""
-#: objcopy.c:980
+#: objcopy.c:1766
#, c-format
msgid "%s: Symbol \"%s\" is target of more than one redefinition"
-msgstr "%s: Simbolului \"%s\" este destinaþie pentru mai mult de o redefinire"
+msgstr "%s: Simbolului \"%s\" este destinație pentru mai mult de o redefinire"
-#: objcopy.c:1008
+#: objcopy.c:1793
#, c-format
msgid "couldn't open symbol redefinition file %s (error: %s)"
msgstr ""
-#: objcopy.c:1086
+#: objcopy.c:1871
#, c-format
msgid "%s:%d: garbage found at end of line"
msgstr ""
-#: objcopy.c:1089
+#: objcopy.c:1874
#, c-format
msgid "%s:%d: missing new symbol name"
msgstr ""
-#: objcopy.c:1099
+#: objcopy.c:1884
#, c-format
msgid "%s:%d: premature end of file"
msgstr ""
-#: objcopy.c:1124
-msgid "Unable to change endianness of input file(s)"
+#: objcopy.c:1910
+#, fuzzy, c-format
+msgid "stat returns negative size for `%s'"
+msgstr "stat a returnat o dimensiune negativă pentru %s"
+
+#: objcopy.c:1922
+#, c-format
+msgid "copy from `%s' [unknown] to `%s' [unknown]\n"
+msgstr ""
+
+#: objcopy.c:2167
+#, c-format
+msgid "%s[%s]: Cannot merge - there are relocations against this section"
+msgstr ""
+
+#: objcopy.c:2189
+msgid "corrupt GNU build attribute note: description size not a factor of 4"
+msgstr ""
+
+#: objcopy.c:2196
+msgid "corrupt GNU build attribute note: wrong note type"
+msgstr ""
+
+#: objcopy.c:2202
+msgid "corrupt GNU build attribute note: note too big"
+msgstr ""
+
+#: objcopy.c:2208
+msgid "corrupt GNU build attribute note: name too small"
+msgstr ""
+
+#: objcopy.c:2231
+msgid "corrupt GNU build attribute note: unsupported version"
+msgstr ""
+
+#: objcopy.c:2265
+msgid "corrupt GNU build attribute note: bad description size"
+msgstr ""
+
+#: objcopy.c:2301
+msgid "corrupt GNU build attribute note: name not NUL terminated"
+msgstr ""
+
+#: objcopy.c:2313
+msgid "corrupt GNU build attribute notes: excess data at end"
+msgstr ""
+
+#: objcopy.c:2320
+msgid "bad GNU build attribute notes: no known versions detected"
+msgstr ""
+
+#. This happens with glibc. No idea why.
+#: objcopy.c:2324
+#, c-format
+msgid "%s[%s]: Warning: version note missing - assuming version 3"
+msgstr ""
+
+#: objcopy.c:2334
+msgid "bad GNU build attribute notes: multiple different versions"
msgstr ""
-#: objcopy.c:1133
+#: objcopy.c:2574
#, c-format
-msgid "copy from %s(%s) to %s(%s)\n"
+msgid "%s[%s]: Note - dropping 'share' flag as output format is not COFF"
msgstr ""
-#: objcopy.c:1170
+#. PR 17636: Call non-fatal so that we return to our parent who
+#. may need to tidy temporary files.
+#: objcopy.c:2606
+#, fuzzy, c-format
+msgid "unable to change endianness of '%s'"
+msgstr "Nu pot citi în cei 0x%x octeți ai lui %s\n"
+
+#: objcopy.c:2613
+#, fuzzy, c-format
+msgid "unable to modify '%s' due to errors"
+msgstr "nu pot copia fișierul '%s' motiv: %s"
+
+#: objcopy.c:2626
#, c-format
-msgid "Unable to recognise the format of the input file %s"
-msgstr "Nu pot recunoaºte formatul fiºierului de intrare %s"
+msgid "error: the input file '%s' has no sections"
+msgstr ""
-#: objcopy.c:1174
+#: objcopy.c:2636
#, c-format
-msgid "Warning: Output file cannot represent architecture %s"
+msgid "--compress-debug-sections=[zlib|zlib-gnu|zlib-gabi] is unsupported on `%s'"
msgstr ""
-#: objcopy.c:1211
+#: objcopy.c:2643
#, c-format
-msgid "can't create section `%s': %s"
+msgid "--elf-stt-common=[yes|no] is unsupported on `%s'"
msgstr ""
-#: objcopy.c:1277
-msgid "there are no sections to be copied!"
+#: objcopy.c:2650
+#, c-format
+msgid "copy from `%s' [%s] to `%s' [%s]\n"
msgstr ""
-#: objcopy.c:1323
+#: objcopy.c:2698
+#, c-format
+msgid "Input file `%s' ignores binary architecture parameter."
+msgstr ""
+
+#: objcopy.c:2714
+#, fuzzy, c-format
+msgid "Unable to recognise the format of the input file `%s'"
+msgstr "Nu pot recunoaște formatul fișierului de intrare %s"
+
+#: objcopy.c:2717
#, c-format
-msgid "Can't fill gap after %s: %s"
+msgid "Output file cannot represent architecture `%s'"
msgstr ""
-#: objcopy.c:1348
+#: objcopy.c:2780
#, c-format
-msgid "Can't add padding to %s: %s"
+msgid "warning: file alignment (0x%s) > section alignment (0x%s)"
msgstr ""
-#: objcopy.c:1514
+#: objcopy.c:2853
+#, fuzzy, c-format
+msgid "can't add section '%s'"
+msgstr "%s: nu pot crea secțiune de depanare: %s"
+
+#: objcopy.c:2867
+#, fuzzy, c-format
+msgid "can't create section `%s'"
+msgstr "%s: nu pot crea secțiune de depanare: %s"
+
+#: objcopy.c:2915
#, c-format
-msgid "%s: error copying private BFD data: %s"
+msgid "error: %s not found, can't be updated"
msgstr ""
-#: objcopy.c:1525
-msgid "unknown alternate machine code, ignored"
+#: objcopy.c:2948
+msgid "warning: note section is empty"
msgstr ""
-#: objcopy.c:1555 objcopy.c:1585
+#: objcopy.c:2957
+msgid "warning: could not load note section"
+msgstr ""
+
+#: objcopy.c:2973
+msgid "warning: failed to set merged notes size"
+msgstr ""
+
+#: objcopy.c:2999
#, c-format
-msgid "cannot mkdir %s for archive copying (error: %s)"
+msgid "can't dump section '%s' - it does not exist"
+msgstr ""
+
+#: objcopy.c:3007
+msgid "can't dump section - it has no contents"
msgstr ""
-#: objcopy.c:1790
+#: objcopy.c:3019
+#, fuzzy
+msgid "could not open section dump file"
+msgstr "nu pot deschide fișierul de intrare %s"
+
+#: objcopy.c:3027
#, c-format
-msgid "Multiple renames of section %s"
-msgstr "Multiple redenumiri ale secþiunii %s"
+msgid "error writing section contents to %s (error: %s)"
+msgstr ""
-#: objcopy.c:1841
-msgid "private header data"
-msgstr "date antet privat"
+#: objcopy.c:3037
+msgid "could not retrieve section contents"
+msgstr ""
-#: objcopy.c:1849
+#: objcopy.c:3051
#, c-format
-msgid "%s: error in %s: %s"
-msgstr "%s: eroare în %s: %s"
+msgid "%s: debuglink section already exists"
+msgstr ""
-#: objcopy.c:1903
-msgid "making"
-msgstr "creez"
+#: objcopy.c:3063
+#, fuzzy, c-format
+msgid "cannot create debug link section `%s'"
+msgstr "%s: nu pot crea secțiune de depanare: %s"
-#: objcopy.c:1912
-msgid "size"
-msgstr "mãrime"
+#: objcopy.c:3157
+msgid "Can't fill gap after section"
+msgstr ""
-#: objcopy.c:1926
-msgid "vma"
+#: objcopy.c:3182
+msgid "can't add padding"
msgstr ""
-#: objcopy.c:1951
-msgid "alignment"
+#: objcopy.c:3359
+msgid "error: failed to locate merged notes"
msgstr ""
-#: objcopy.c:1966
-msgid "flags"
-msgstr "atribute"
+#: objcopy.c:3368
+msgid "error: failed to merge notes"
+msgstr ""
-#: objcopy.c:1988
-msgid "private data"
-msgstr "date private"
+#: objcopy.c:3377
+msgid "error: failed to copy merged notes into output"
+msgstr ""
-#: objcopy.c:1996
+#: objcopy.c:3394
#, c-format
-msgid "%s: section `%s': error in %s: %s"
-msgstr "%s: secþiune `%s': eroare în %s: %s"
+msgid "%s: Could not find any mergeable note sections"
+msgstr ""
+
+#: objcopy.c:3403
+#, fuzzy, c-format
+msgid "cannot fill debug link section `%s'"
+msgstr "%s: nu pot crea secțiune de depanare: %s"
+
+#: objcopy.c:3464
+msgid "error copying private BFD data"
+msgstr ""
+
+#: objcopy.c:3475
+#, c-format
+msgid "this target does not support %lu alternative machine codes"
+msgstr ""
+
+#: objcopy.c:3479
+msgid "treating that number as an absolute e_machine value instead"
+msgstr ""
-#: objcopy.c:2274
+#: objcopy.c:3483
+msgid "ignoring the alternative value"
+msgstr ""
+
+#: objcopy.c:3529
+msgid "sorry: copying thin archives is not currently supported"
+msgstr ""
+
+#: objcopy.c:3536 objcopy.c:3591
#, c-format
-msgid "%s: can't create debugging section: %s"
-msgstr "%s: nu pot crea secþiune de depanare: %s"
+msgid "cannot create tempdir for archive copying (error: %s)"
+msgstr ""
-#: objcopy.c:2288
+#: objcopy.c:3573
#, c-format
-msgid "%s: can't set debugging section contents: %s"
+msgid "illegal pathname found in archive member: %s"
msgstr ""
-#: objcopy.c:2297
+#: objcopy.c:3625
+#, fuzzy
+msgid "Unable to recognise the format of file"
+msgstr "Nu pot recunoaște formatul fișierului de intrare %s"
+
+#: objcopy.c:3758
#, c-format
-msgid "%s: don't know how to write debugging information for %s"
+msgid "error: the input file '%s' is empty"
msgstr ""
-#: objcopy.c:2472
-msgid "byte number must be non-negative"
+#: objcopy.c:3836
+#, c-format
+msgid "--add-gnu-debuglink ignored for archive %s"
msgstr ""
-#: objcopy.c:2482
-msgid "interleave must be positive"
+#: objcopy.c:3945
+#, c-format
+msgid "Multiple renames of section %s"
+msgstr "Multiple redenumiri ale secțiunii %s"
+
+#: objcopy.c:3991
+#, fuzzy
+msgid "error in private header data"
+msgstr "date antet privat"
+
+#: objcopy.c:4084
+msgid "failed to create output section"
+msgstr ""
+
+#: objcopy.c:4099
+#, fuzzy
+msgid "failed to set size"
+msgstr "setează dimensiune secțiune"
+
+#: objcopy.c:4118
+msgid "failed to set vma"
+msgstr ""
+
+#: objcopy.c:4148
+#, fuzzy
+msgid "failed to set alignment"
+msgstr "setează aliniere secțiune"
+
+#: objcopy.c:4180
+#, fuzzy
+msgid "failed to copy private data"
+msgstr "date private"
+
+#: objcopy.c:4337
+msgid "relocation count is negative"
msgstr ""
-#: objcopy.c:2502 objcopy.c:2510
+#. User must pad the section up in order to do this.
+#: objcopy.c:4436
#, c-format
-msgid "%s both copied and removed"
+msgid "cannot reverse bytes: length of section %s must be evenly divisible by %d"
+msgstr ""
+
+#: objcopy.c:4644
+#, fuzzy
+msgid "can't create debugging section"
+msgstr "%s: nu pot crea secțiune de depanare: %s"
+
+#: objcopy.c:4658
+#, fuzzy
+msgid "can't set debugging section contents"
+msgstr "%s: nu pot crea secțiune de depanare: %s"
+
+#: objcopy.c:4667
+#, fuzzy, c-format
+msgid "don't know how to write debugging information for %s"
+msgstr "%s: nici o informație de depanare recunoscută"
+
+#: objcopy.c:4856
+msgid "could not create temporary file to hold stripped copy"
msgstr ""
-#: objcopy.c:2603 objcopy.c:2674 objcopy.c:2774 objcopy.c:2805 objcopy.c:2829
-#: objcopy.c:2833 objcopy.c:2853
+#: objcopy.c:4930
+#, c-format
+msgid "%s: bad version in PE subsystem"
+msgstr ""
+
+#: objcopy.c:4960
+#, c-format
+msgid "unknown PE subsystem: %s"
+msgstr ""
+
+#: objcopy.c:5044 objcopy.c:5316 objcopy.c:5396 objcopy.c:5537 objcopy.c:5569
+#: objcopy.c:5632 objcopy.c:5636 objcopy.c:5656
#, c-format
msgid "bad format for %s"
msgstr "format incorect pentru %s"
-#: objcopy.c:2624
+#: objcopy.c:5073
#, c-format
msgid "cannot open: %s: %s"
msgstr "nu pot deschide : %s: %s"
-#: objcopy.c:2743
+#: objcopy.c:5128
+msgid "byte number must be non-negative"
+msgstr ""
+
+#: objcopy.c:5134
+#, c-format
+msgid "architecture %s unknown"
+msgstr ""
+
+#: objcopy.c:5142
+msgid "interleave must be positive"
+msgstr ""
+
+#: objcopy.c:5151
+msgid "interleave width must be positive"
+msgstr ""
+
+#: objcopy.c:5469
+#, fuzzy, c-format
+msgid "unrecognized --compress-debug-sections type `%s'"
+msgstr "tip opțiune --endian nerecunoscută `%s'"
+
+#: objcopy.c:5490
+#, fuzzy, c-format
+msgid "unrecognized --elf-stt-common= option `%s'"
+msgstr "atribut secțiune nerecunoscut `%s'"
+
+#: objcopy.c:5506
#, c-format
msgid "Warning: truncating gap-fill from 0x%s to 0x%x"
msgstr "Avetisment: trunchez umplere-gol de la 0x%s la 0x%x"
-#: objcopy.c:2903
-msgid "alternate machine code index must be positive"
+#: objcopy.c:5592
+msgid "bad format for --set-section-alignment: argument needed"
msgstr ""
-#: objcopy.c:2961
-msgid "byte number must be less than interleave"
+#: objcopy.c:5596
+msgid "bad format for --set-section-alignment: numeric argument needed"
+msgstr ""
+
+#. Number has more than on 1, i.e. wasn't a power of 2.
+#: objcopy.c:5608
+msgid "bad format for --set-section-alignment: alignment is not a power of two"
msgstr ""
-#: objcopy.c:2991
+#: objcopy.c:5715
#, c-format
-msgid "architecture %s unknown"
+msgid "unknown long section names option '%s'"
+msgstr ""
+
+#: objcopy.c:5738
+msgid "unable to parse alternative machine code"
msgstr ""
-#: objcopy.c:2995
-msgid "Warning: input target 'binary' required for binary architecture parameter."
+#: objcopy.c:5787
+msgid "number of bytes to reverse must be positive and even"
msgstr ""
-#: objcopy.c:2996
+#: objcopy.c:5790
#, c-format
-msgid " Argument %s ignored"
-msgstr "Argument %s ignorat"
+msgid "Warning: ignoring previous --reverse-bytes value of %d"
+msgstr ""
+
+#: objcopy.c:5805
+#, c-format
+msgid "%s: invalid reserve value for --heap"
+msgstr ""
+
+#: objcopy.c:5811
+#, fuzzy, c-format
+msgid "%s: invalid commit value for --heap"
+msgstr "%s: format de ieșire invalid"
+
+#: objcopy.c:5836
+#, c-format
+msgid "%s: invalid reserve value for --stack"
+msgstr ""
-#: objcopy.c:3002
+#: objcopy.c:5842
+#, fuzzy, c-format
+msgid "%s: invalid commit value for --stack"
+msgstr "%s: format de ieșire invalid"
+
+#: objcopy.c:5851
+msgid "verilog data width must be at least 1 byte"
+msgstr ""
+
+#: objcopy.c:5868
+msgid "--globalize-symbol(s) is incompatible with -G/--keep-global-symbol(s)"
+msgstr ""
+
+#: objcopy.c:5880
+msgid "interleave start byte must be set with --byte"
+msgstr ""
+
+#: objcopy.c:5883
+msgid "byte number must be less than interleave"
+msgstr ""
+
+#: objcopy.c:5886
+msgid "interleave width must be less than or equal to interleave - byte`"
+msgstr ""
+
+#: objcopy.c:5909
#, c-format
-msgid "warning: could not locate '%s'. System error message: %s"
+msgid "unknown input EFI target: %s"
msgstr ""
-#: objcopy.c:3042 objcopy.c:3056
+#: objcopy.c:5919
+#, fuzzy, c-format
+msgid "unknown output EFI target: %s"
+msgstr "tip format necunoscut `%s'"
+
+#: objcopy.c:5943
+#, c-format
+msgid "warning: could not create temporary file whilst copying '%s', (error: %s)"
+msgstr ""
+
+#: objcopy.c:5980 objcopy.c:5994
#, c-format
msgid "%s %s%c0x%s never used"
msgstr ""
-#: objdump.c:176
+#: objdump.c:225
#, c-format
msgid "Usage: %s <option(s)> <file(s)>\n"
msgstr ""
-#: objdump.c:177
+#: objdump.c:226
#, c-format
msgid " Display information from object <file(s)>.\n"
msgstr ""
-#: objdump.c:178
+#: objdump.c:227
#, c-format
msgid " At least one of the following switches must be given:\n"
msgstr ""
-#: objdump.c:179
+#: objdump.c:228
+#, c-format
+msgid " -a, --archive-headers Display archive header information\n"
+msgstr ""
+
+#: objdump.c:230
+#, c-format
+msgid " -f, --file-headers Display the contents of the overall file header\n"
+msgstr ""
+
+#: objdump.c:232
+#, c-format
+msgid " -p, --private-headers Display object format specific file header contents\n"
+msgstr ""
+
+#: objdump.c:234
+#, c-format
+msgid " -P, --private=OPT,OPT... Display object format specific contents\n"
+msgstr ""
+
+#: objdump.c:236
+#, c-format
+msgid " -h, --[section-]headers Display the contents of the section headers\n"
+msgstr ""
+
+#: objdump.c:238
+#, fuzzy, c-format
+msgid " -x, --all-headers Display the contents of all headers\n"
+msgstr " t - afișează conținutul arhivei\n"
+
+#: objdump.c:240
+#, c-format
+msgid " -d, --disassemble Display assembler contents of executable sections\n"
+msgstr ""
+
+#: objdump.c:242
+#, c-format
+msgid " -D, --disassemble-all Display assembler contents of all sections\n"
+msgstr ""
+
+#: objdump.c:244
+#, c-format
+msgid " --disassemble=<sym> Display assembler contents from <sym>\n"
+msgstr ""
+
+#: objdump.c:246
+#, c-format
+msgid " -S, --source Intermix source code with disassembly\n"
+msgstr ""
+
+#: objdump.c:248
+#, c-format
+msgid " --source-comment[=<txt>] Prefix lines of source code with <txt>\n"
+msgstr ""
+
+#: objdump.c:250
+#, c-format
+msgid " -s, --full-contents Display the full contents of all sections requested\n"
+msgstr ""
+
+#: objdump.c:252
+#, c-format
+msgid " -g, --debugging Display debug information in object file\n"
+msgstr ""
+
+#: objdump.c:254
+#, c-format
+msgid " -e, --debugging-tags Display debug information using ctags style\n"
+msgstr ""
+
+#: objdump.c:256
+#, c-format
+msgid " -G, --stabs Display (in raw form) any STABS info in the file\n"
+msgstr ""
+
+#: objdump.c:258
+#, c-format
+msgid ""
+" -W, --dwarf[a/=abbrev, A/=addr, r/=aranges, c/=cu_index, L/=decodedline,\n"
+" f/=frames, F/=frames-interp, g/=gdb_index, i/=info, o/=loc,\n"
+" m/=macro, p/=pubnames, t/=pubtypes, R/=Ranges, l/=rawline,\n"
+" s/=str, O/=str-offsets, u/=trace_abbrev, T/=trace_aranges,\n"
+" U/=trace_info]\n"
+" Display the contents of DWARF debug sections\n"
+msgstr ""
+
+#: objdump.c:265
+#, c-format
+msgid ""
+" -Wk,--dwarf=links Display the contents of sections that link to\n"
+" separate debuginfo files\n"
+msgstr ""
+
+#: objdump.c:269
+#, c-format
+msgid ""
+" -WK,--dwarf=follow-links\n"
+" Follow links to separate debug info files (default)\n"
+msgstr ""
+
+#: objdump.c:272
#, c-format
msgid ""
-" -a, --archive-headers Display archive header information\n"
-" -f, --file-headers Display the contents of the overall file header\n"
-" -p, --private-headers Display object format specific file header contents\n"
-" -h, --[section-]headers Display the contents of the section headers\n"
-" -x, --all-headers Display the contents of all headers\n"
-" -d, --disassemble Display assembler contents of executable sections\n"
-" -D, --disassemble-all Display assembler contents of all sections\n"
-" -S, --source Intermix source code with disassembly\n"
-" -s, --full-contents Display the full contents of all sections requested\n"
-" -g, --debugging Display debug information in object file\n"
-" -e, --debugging-tags Display debug information using ctags style\n"
-" -G, --stabs Display (in raw form) any STABS info in the file\n"
-" -t, --syms Display the contents of the symbol table(s)\n"
-" -T, --dynamic-syms Display the contents of the dynamic symbol table\n"
-" -r, --reloc Display the relocation entries in the file\n"
-" -R, --dynamic-reloc Display the dynamic relocation entries in the file\n"
-" -v, --version Display this program's version number\n"
-" -i, --info List object formats and architectures supported\n"
-" -H, --help Display this information\n"
+" -WN,--dwarf=no-follow-links\n"
+" Do not follow links to separate debug info files\n"
msgstr ""
-#: objdump.c:202
+#: objdump.c:276
+#, c-format
+msgid ""
+" -WK,--dwarf=follow-links\n"
+" Follow links to separate debug info files\n"
+msgstr ""
+
+#: objdump.c:279
+#, c-format
+msgid ""
+" -WN,--dwarf=no-follow-links\n"
+" Do not follow links to separate debug info files\n"
+" (default)\n"
+msgstr ""
+
+#: objdump.c:284
+#, c-format
+msgid ""
+" -L, --process-links Display the contents of non-debug sections in\n"
+" separate debuginfo files. (Implies -WK)\n"
+msgstr ""
+
+#: objdump.c:288
+#, c-format
+msgid " --ctf[=SECTION] Display CTF info from SECTION, (default `.ctf')\n"
+msgstr ""
+
+#: objdump.c:291
+#, fuzzy, c-format
+msgid " -t, --syms Display the contents of the symbol table(s)\n"
+msgstr " t - afișează conținutul arhivei\n"
+
+#: objdump.c:293
+#, c-format
+msgid " -T, --dynamic-syms Display the contents of the dynamic symbol table\n"
+msgstr ""
+
+#: objdump.c:295
+#, fuzzy, c-format
+msgid " -r, --reloc Display the relocation entries in the file\n"
+msgstr " t - afișează conținutul arhivei\n"
+
+#: objdump.c:297
+#, c-format
+msgid " -R, --dynamic-reloc Display the dynamic relocation entries in the file\n"
+msgstr ""
+
+#: objdump.c:299
+#, c-format
+msgid " @<file> Read options from <file>\n"
+msgstr ""
+
+#: objdump.c:301
+#, c-format
+msgid " -v, --version Display this program's version number\n"
+msgstr ""
+
+#: objdump.c:303
+#, c-format
+msgid " -i, --info List object formats and architectures supported\n"
+msgstr ""
+
+#: objdump.c:305
+#, c-format
+msgid " -H, --help Display this information\n"
+msgstr ""
+
+#: objdump.c:312
#, c-format
msgid ""
"\n"
" The following switches are optional:\n"
msgstr ""
-#: objdump.c:203
+#: objdump.c:313
+#, c-format
+msgid " -b, --target=BFDNAME Specify the target object format as BFDNAME\n"
+msgstr ""
+
+#: objdump.c:315
+#, c-format
+msgid " -m, --architecture=MACHINE Specify the target architecture as MACHINE\n"
+msgstr ""
+
+#: objdump.c:317
+#, c-format
+msgid " -j, --section=NAME Only display information for section NAME\n"
+msgstr ""
+
+#: objdump.c:319
+#, c-format
+msgid " -M, --disassembler-options=OPT Pass text OPT on to the disassembler\n"
+msgstr ""
+
+#: objdump.c:321
+#, c-format
+msgid " -EB --endian=big Assume big endian format when disassembling\n"
+msgstr ""
+
+#: objdump.c:323
+#, c-format
+msgid " -EL --endian=little Assume little endian format when disassembling\n"
+msgstr ""
+
+#: objdump.c:325
+#, c-format
+msgid " --file-start-context Include context from start of file (with -S)\n"
+msgstr ""
+
+#: objdump.c:327
+#, c-format
+msgid " -I, --include=DIR Add DIR to search list for source files\n"
+msgstr ""
+
+#: objdump.c:329
+#, c-format
+msgid " -l, --line-numbers Include line numbers and filenames in output\n"
+msgstr ""
+
+#: objdump.c:331
+#, c-format
+msgid " -F, --file-offsets Include file offsets when displaying information\n"
+msgstr ""
+
+#: objdump.c:333
+#, c-format
+msgid " -C, --demangle[=STYLE] Decode mangled/processed symbol names\n"
+msgstr ""
+
+#: objdump.c:335
+#, fuzzy
+msgid " STYLE can be "
+msgstr " Date: %s\n"
+
+#: objdump.c:337
#, c-format
msgid ""
-" -b, --target=BFDNAME Specify the target object format as BFDNAME\n"
-" -m, --architecture=MACHINE Specify the target architecture as MACHINE\n"
-" -j, --section=NAME Only display information for section NAME\n"
-" -M, --disassembler-options=OPT Pass text OPT on to the disassembler\n"
-" -EB --endian=big Assume big endian format when disassembling\n"
-" -EL --endian=little Assume little endian format when disassembling\n"
-" --file-start-context Include context from start of file (with -S)\n"
-" -I, --include=DIR Add DIR to search list for source files\n"
-" -l, --line-numbers Include line numbers and filenames in output\n"
-" -C, --demangle[=STYLE] Decode mangled/processed symbol names\n"
-" The STYLE, if specified, can be `auto', `gnu',\n"
-" `lucid', `arm', `hp', `edg', `gnu-v3', `java'\n"
-" or `gnat'\n"
-" -w, --wide Format output for more than 80 columns\n"
-" -z, --disassemble-zeroes Do not skip blocks of zeroes when disassembling\n"
-" --start-address=ADDR Only process data whose address is >= ADDR\n"
-" --stop-address=ADDR Only process data whose address is <= ADDR\n"
-" --prefix-addresses Print complete address alongside disassembly\n"
-" --[no-]show-raw-insn Display hex alongside symbolic disassembly\n"
-" --adjust-vma=OFFSET Add OFFSET to all displayed section addresses\n"
-" --special-syms Include special symbols in symbol dumps\n"
-"\n"
+" --recurse-limit Enable a limit on recursion whilst demangling\n"
+" (default)\n"
+msgstr ""
+
+#: objdump.c:340
+#, c-format
+msgid " --no-recurse-limit Disable a limit on recursion whilst demangling\n"
+msgstr ""
+
+#: objdump.c:342
+#, c-format
+msgid " -w, --wide Format output for more than 80 columns\n"
+msgstr ""
+
+#: objdump.c:344
+#, c-format
+msgid ""
+" -U[d|l|i|x|e|h] Controls the display of UTF-8 unicode characters\n"
+" --unicode=[default|locale|invalid|hex|escape|highlight]\n"
+msgstr ""
+
+#: objdump.c:347
+#, c-format
+msgid " -z, --disassemble-zeroes Do not skip blocks of zeroes when disassembling\n"
+msgstr ""
+
+#: objdump.c:349
+#, c-format
+msgid " --start-address=ADDR Only process data whose address is >= ADDR\n"
+msgstr ""
+
+#: objdump.c:351
+#, c-format
+msgid " --stop-address=ADDR Only process data whose address is < ADDR\n"
+msgstr ""
+
+#: objdump.c:353
+#, c-format
+msgid " --no-addresses Do not print address alongside disassembly\n"
+msgstr ""
+
+#: objdump.c:355
+#, c-format
+msgid " --prefix-addresses Print complete address alongside disassembly\n"
+msgstr ""
+
+#: objdump.c:357
+#, c-format
+msgid " --[no-]show-raw-insn Display hex alongside symbolic disassembly\n"
+msgstr ""
+
+#: objdump.c:359
+#, c-format
+msgid " --insn-width=WIDTH Display WIDTH bytes on a single line for -d\n"
+msgstr ""
+
+#: objdump.c:361
+#, c-format
+msgid " --adjust-vma=OFFSET Add OFFSET to all displayed section addresses\n"
+msgstr ""
+
+#: objdump.c:363
+#, c-format
+msgid " --special-syms Include special symbols in symbol dumps\n"
+msgstr ""
+
+#: objdump.c:365
+#, c-format
+msgid " --inlines Print all inlines for source line (with -l)\n"
+msgstr ""
+
+#: objdump.c:367
+#, c-format
+msgid " --prefix=PREFIX Add PREFIX to absolute paths for -S\n"
+msgstr ""
+
+#: objdump.c:369
+#, c-format
+msgid " --prefix-strip=LEVEL Strip initial directory names for -S\n"
+msgstr ""
+
+#: objdump.c:371
+#, c-format
+msgid " --dwarf-depth=N Do not display DIEs at depth N or greater\n"
+msgstr ""
+
+#: objdump.c:373
+#, c-format
+msgid " --dwarf-start=N Display DIEs starting at offset N\n"
+msgstr ""
+
+#: objdump.c:375
+#, c-format
+msgid " --dwarf-check Make additional dwarf consistency checks.\n"
msgstr ""
#: objdump.c:378
#, c-format
-msgid "Sections:\n"
-msgstr "Secþiuni:\n"
+msgid " --ctf-parent=NAME Use CTF archive member NAME as the CTF parent\n"
+msgstr ""
+
+#: objdump.c:381
+#, c-format
+msgid " --visualize-jumps Visualize jumps by drawing ASCII art lines\n"
+msgstr ""
+
+#: objdump.c:383
+#, c-format
+msgid " --visualize-jumps=color Use colors in the ASCII art\n"
+msgstr ""
+
+#: objdump.c:385
+#, c-format
+msgid ""
+" --visualize-jumps=extended-color\n"
+" Use extended 8-bit color codes\n"
+msgstr ""
+
+#: objdump.c:388
+#, c-format
+msgid ""
+" --visualize-jumps=off Disable jump visualization\n"
+"\n"
+msgstr ""
-#: objdump.c:381 objdump.c:385
+#: objdump.c:399
#, c-format
-msgid "Idx Name Size VMA LMA File off Algn"
-msgstr "Idx Nume Dim VMA LMA Fiºier off Algn"
+msgid ""
+"\n"
+"Options supported for -P/--private switch:\n"
+msgstr ""
+
+#: objdump.c:759
+#, c-format
+msgid "section '%s' mentioned in a -j option, but not found in any input file"
+msgstr ""
+
+#: objdump.c:914
+#, c-format
+msgid "Sections:\n"
+msgstr "Secțiuni:\n"
-#: objdump.c:387
+#: objdump.c:920
#, c-format
-msgid "Idx Name Size VMA LMA File off Algn"
-msgstr "Idx Nume Dim VMA LMA Fiºier off Algn"
+msgid "Idx %-*s Size %-*s%-*sFile off Algn"
+msgstr ""
-#: objdump.c:391
+#: objdump.c:926
#, c-format
msgid " Flags"
msgstr " Atribute"
-#: objdump.c:393
+#: objdump.c:948
#, c-format
-msgid " Pg"
+msgid "failed to read symbol table from: %s"
+msgstr ""
+
+#: objdump.c:949 objdump.c:4907
+msgid "error message was"
msgstr ""
-#: objdump.c:436
+#: objdump.c:964
+#, c-format
+msgid "error: symbol table size (%#lx) is larger than filesize (%#lx)"
+msgstr ""
+
+#: objdump.c:994
#, c-format
msgid "%s: not a dynamic object"
msgstr ""
-#: objdump.c:1722
+#: objdump.c:1593 objdump.c:1620
+#, fuzzy, c-format
+msgid " (File Offset: 0x%lx)"
+msgstr " Fișier: %lx"
+
+#: objdump.c:1865
+#, c-format
+msgid "source file %s is more recent than object file\n"
+msgstr ""
+
+#: objdump.c:2893
#, c-format
-msgid "Disassembly of section %s:\n"
+msgid "\t... (skipping %lu zeroes, resuming at file offset: 0x%lx)\n"
msgstr ""
-#: objdump.c:1884
+#: objdump.c:3025
#, c-format
-msgid "Can't use supplied machine %s"
+msgid "disassemble_fn returned length %d"
msgstr ""
-#: objdump.c:1903
+#: objdump.c:3353 objdump.c:4527
#, c-format
-msgid "Can't disassemble for architecture %s\n"
+msgid "Reading section %s failed because: %s"
msgstr ""
-#: objdump.c:1973
+#: objdump.c:3374
+#, c-format
+msgid ""
+"\n"
+"Disassembly of section %s:\n"
+msgstr ""
+
+#: objdump.c:3665
+#, c-format
+msgid "can't use supplied machine %s"
+msgstr ""
+
+#: objdump.c:3686
+#, c-format
+msgid "can't disassemble for architecture %s\n"
+msgstr ""
+
+#: objdump.c:3775
+#, c-format
+msgid ""
+"\n"
+"Section '%s' has an invalid size: %#llx.\n"
+msgstr ""
+
+#: objdump.c:3820
#, c-format
msgid ""
-"No %s section present\n"
"\n"
+"Can't get contents for section '%s'.\n"
msgstr ""
-#: objdump.c:1982
+#: objdump.c:3999
+#, fuzzy, c-format
+msgid "File %s does not contain any dwarf debug information\n"
+msgstr "%s: nici o informație de depanare recunoscută"
+
+#: objdump.c:4036
#, c-format
-msgid "Reading %s section of %s failed: %s"
+msgid ""
+"No %s section present\n"
+"\n"
msgstr ""
-#: objdump.c:2026
+#: objdump.c:4043
+#, fuzzy, c-format
+msgid "reading %s section of %s failed: %s"
+msgstr "Creez fișier stub: %s"
+
+#: objdump.c:4089
#, c-format
msgid ""
"Contents of %s section:\n"
"\n"
msgstr ""
-#: objdump.c:2153
+#: objdump.c:4223
#, c-format
msgid "architecture: %s, "
msgstr ""
-#: objdump.c:2156
+#: objdump.c:4226
#, c-format
msgid "flags 0x%08x:\n"
msgstr "atribute 0x%08x:\n"
-#: objdump.c:2170
+#: objdump.c:4239
#, c-format
msgid ""
"\n"
"start address 0x"
msgstr ""
-#: objdump.c:2210
+#: objdump.c:4289 readelf.c:15478
+#, fuzzy, c-format
+msgid "%s: %s"
+msgstr "%s %s: %s"
+
+#: objdump.c:4289 readelf.c:15478
+#, fuzzy
+msgid "warning"
+msgstr "%s: avertisment: "
+
+#: objdump.c:4289 readelf.c:15478
+msgid "error"
+msgstr ""
+
+#: objdump.c:4295 readelf.c:15483
+#, c-format
+msgid "CTF error: cannot get CTF errors: `%s'"
+msgstr ""
+
+#: objdump.c:4319 readelf.c:15505
+#, fuzzy, c-format
+msgid ""
+"\n"
+"CTF archive member: %s:\n"
+msgstr "În arhivă %s:\n"
+
+#: objdump.c:4339
+#, fuzzy, c-format
+msgid "Iteration failed: %s, %s"
+msgstr "stat a eșuat pentru fișierul `%s': %s"
+
+#: objdump.c:4377 objdump.c:4384
+#, fuzzy, c-format
+msgid "CTF open failure: %s"
+msgstr "Nu pot deschide fișierul %s\n"
+
+#: objdump.c:4388
+#, fuzzy, c-format
+msgid "Contents of CTF section %s:\n"
+msgstr "Multiple redenumiri ale secțiunii %s"
+
+#: objdump.c:4395
+#, c-format
+msgid "CTF archive member open failure: %s"
+msgstr ""
+
+#: objdump.c:4413
+#, c-format
+msgid "warning: private headers incomplete: %s"
+msgstr ""
+
+#: objdump.c:4431
+msgid "option -P/--private not supported by this file"
+msgstr ""
+
+#: objdump.c:4455
+#, fuzzy, c-format
+msgid "target specific dump '%s' not supported"
+msgstr "Mașina '%s' nu este suportată"
+
+#: objdump.c:4519
+#, fuzzy, c-format
+msgid "Contents of section %s:"
+msgstr "Multiple redenumiri ale secțiunii %s"
+
+#: objdump.c:4521
#, c-format
-msgid "Contents of section %s:\n"
+msgid " (Starting at file offset: 0x%lx)"
msgstr ""
-#: objdump.c:2335
+#: objdump.c:4631
#, c-format
msgid "no symbols\n"
msgstr ""
-#: objdump.c:2342
+#: objdump.c:4638
#, c-format
msgid "no information for symbol number %ld\n"
msgstr ""
-#: objdump.c:2345
+#: objdump.c:4641
#, c-format
msgid "could not determine the type of symbol number %ld\n"
msgstr ""
-#: objdump.c:2611
+#: objdump.c:4905
+#, fuzzy, c-format
+msgid "failed to read relocs in: %s"
+msgstr "nu pot redenumi '%s' motiv: %s"
+
+#: objdump.c:5064
#, c-format
msgid ""
"\n"
"%s: file format %s\n"
msgstr ""
-#: objdump.c:2662
+#: objdump.c:5172
#, c-format
msgid "%s: printing debugging information failed"
msgstr ""
-#: objdump.c:2753
+#: objdump.c:5268
#, c-format
msgid "In archive %s:\n"
-msgstr "În arhivã %s:\n"
+msgstr "În arhivă %s:\n"
-#: objdump.c:2873
+#. Prevent corrupted files from spinning us into an
+#. infinite loop. 100 is an arbitrary heuristic.
+#: objdump.c:5273
+msgid "Archive nesting is too deep"
+msgstr ""
+
+#: objdump.c:5277
+#, fuzzy, c-format
+msgid "In nested archive %s:\n"
+msgstr "În arhivă %s:\n"
+
+#: objdump.c:5440
+msgid "error: the start address should be before the end address"
+msgstr ""
+
+#: objdump.c:5445
+msgid "error: the stop address should be after the start address"
+msgstr ""
+
+#: objdump.c:5457
+msgid "error: prefix strip must be non-negative"
+msgstr ""
+
+#: objdump.c:5462
+msgid "error: instruction width must be positive"
+msgstr ""
+
+#: objdump.c:5483
+#, fuzzy
+msgid "unrecognized argument to --visualize-option"
+msgstr "opțiune -E nerecunoscută"
+
+#: objdump.c:5493
msgid "unrecognized -E option"
-msgstr "opþiune -E nerecunoscutã"
+msgstr "opțiune -E nerecunoscută"
-#: objdump.c:2884
+#: objdump.c:5504
#, c-format
msgid "unrecognized --endian type `%s'"
-msgstr "tip opþiune --endian nerecunoscutã `%s'"
+msgstr "tip opțiune --endian nerecunoscută `%s'"
+
+#: od-elf32_avr.c:53
+#, c-format
+msgid ""
+"For AVR ELF files:\n"
+" mem-usage Display memory usage\n"
+" avr-prop Display contents of .avr.prop section\n"
+msgstr ""
+
+#: od-elf32_avr.c:200
+#, c-format
+msgid "Warning: textsize (%#lx) + datasize (%#lx) overflows size type\n"
+msgstr ""
+
+#: od-elf32_avr.c:210
+#, c-format
+msgid "Warning: textsize (%#lx) + datasize (%#lx) + bootloadersize (%#lx) overflows size type\n"
+msgstr ""
+
+#: od-elf32_avr.c:221
+#, c-format
+msgid "Warning: datatsize (%#lx) + bssssize (%#lx) overflows size type\n"
+msgstr ""
+
+#: od-elf32_avr.c:232
+#, c-format
+msgid "Warning: datasize (%#lx) + bsssize (%#lx) + noinitsize (%#lx) overflows size type\n"
+msgstr ""
+
+#: od-macho.c:74
+#, c-format
+msgid ""
+"For Mach-O files:\n"
+" header Display the file header\n"
+" section Display the segments and sections commands\n"
+" map Display the section map\n"
+" load Display the load commands\n"
+" dysymtab Display the dynamic symbol table\n"
+" codesign Display code signature\n"
+" seg_split_info Display segment split info\n"
+" compact_unwind Display compact unwinding info\n"
+" function_starts Display start address of functions\n"
+" data_in_code Display data in code entries\n"
+" twolevel_hints Display the two-level namespace lookup hints table\n"
+" dyld_info Display dyld information\n"
+msgstr ""
+
+#: od-macho.c:322
+msgid "Mach-O header:\n"
+msgstr ""
+
+#: od-macho.c:323
+#, c-format
+msgid " magic : %08lx\n"
+msgstr ""
+
+#: od-macho.c:324
+#, c-format
+msgid " cputype : %08lx (%s)\n"
+msgstr ""
+
+#: od-macho.c:326
+#, c-format
+msgid " cpusubtype: %08lx\n"
+msgstr ""
+
+#: od-macho.c:327
+#, fuzzy, c-format
+msgid " filetype : %08lx (%s)\n"
+msgstr ""
+"\n"
+"Tipul fișierului elf este %s\n"
+
+#: od-macho.c:330
+#, c-format
+msgid " ncmds : %08lx (%lu)\n"
+msgstr ""
+
+#: od-macho.c:331
+#, c-format
+msgid " sizeofcmds: %08lx (%lu)\n"
+msgstr ""
+
+#: od-macho.c:332
+#, c-format
+msgid " flags : %08lx ("
+msgstr ""
+
+#: od-macho.c:334
+msgid ")\n"
+msgstr ""
+
+#: od-macho.c:335
+#, c-format
+msgid " reserved : %08x\n"
+msgstr ""
+
+#: od-macho.c:354
+#, fuzzy
+msgid "Segments and Sections:\n"
+msgstr "Secțiuni:\n"
+
+#: od-macho.c:355
+msgid " #: Segment name Section name Address\n"
+msgstr ""
+
+#: od-macho.c:997
+msgid "cannot read rebase dyld info"
+msgstr ""
+
+#: od-macho.c:1002
+msgid "cannot read bind dyld info"
+msgstr ""
+
+#: od-macho.c:1007
+msgid "cannot read weak bind dyld info"
+msgstr ""
+
+#: od-macho.c:1012
+msgid "cannot read lazy bind dyld info"
+msgstr ""
+
+#: od-macho.c:1017
+msgid "cannot read export symbols dyld info"
+msgstr ""
+
+#: od-macho.c:1097 od-macho.c:1107 od-macho.c:1181 od-macho.c:1233
+#, c-format
+msgid " [bad block length]\n"
+msgstr ""
+
+#: od-macho.c:1101
+#, c-format
+msgid " %u index entry:\n"
+msgid_plural " %u index entries:\n"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: od-macho.c:1117
+#, c-format
+msgid " index entry %u: type: %08x, offset: %08x\n"
+msgstr ""
+
+#: od-macho.c:1188
+#, fuzzy, c-format
+msgid " version: %08x\n"
+msgstr " Versiune: %d\n"
+
+#: od-macho.c:1189
+#, fuzzy, c-format
+msgid " flags: %08x\n"
+msgstr " Ba Linie: %d\n"
+
+#: od-macho.c:1190
+#, c-format
+msgid " hash offset: %08x\n"
+msgstr ""
+
+#: od-macho.c:1192
+#, c-format
+msgid " ident offset: %08x (- %08x)\n"
+msgstr ""
+
+#: od-macho.c:1194
+#, fuzzy, c-format
+msgid " identity: %s\n"
+msgstr " Fișier: %s"
+
+#: od-macho.c:1195
+#, c-format
+msgid " nbr special slots: %08x (at offset %08x)\n"
+msgstr ""
+
+#: od-macho.c:1198
+#, c-format
+msgid " nbr code slots: %08x\n"
+msgstr ""
+
+#: od-macho.c:1199
+#, fuzzy, c-format
+msgid " code limit: %08x\n"
+msgstr " Bază Opcode: %d\n"
+
+#: od-macho.c:1200
+#, fuzzy, c-format
+msgid " hash size: %02x\n"
+msgstr " (Dimensiune Pointer: %u)\n"
+
+#: od-macho.c:1201
+#, c-format
+msgid " hash type: %02x (%s)\n"
+msgstr ""
+
+#: od-macho.c:1204
+#, fuzzy, c-format
+msgid " spare1: %02x\n"
+msgstr " Bază Opcode: %d\n"
+
+#: od-macho.c:1205
+#, fuzzy, c-format
+msgid " page size: %02x\n"
+msgstr " (Dimensiune Pointer: %u)\n"
+
+#: od-macho.c:1206
+#, fuzzy, c-format
+msgid " spare2: %08x\n"
+msgstr " Bază Opcode: %d\n"
+
+#: od-macho.c:1208
+#, c-format
+msgid " scatter offset: %08x\n"
+msgstr ""
+
+#: od-macho.c:1220
+#, c-format
+msgid " [truncated block]\n"
+msgstr ""
+
+#: od-macho.c:1228
+#, c-format
+msgid " magic : %08x (%s)\n"
+msgstr ""
+
+#: od-macho.c:1230
+#, c-format
+msgid " length: %08x\n"
+msgstr ""
+
+#: od-macho.c:1261
+msgid "cannot read code signature data"
+msgstr ""
+
+#: od-macho.c:1289
+msgid "cannot read segment split info"
+msgstr ""
+
+#: od-macho.c:1295
+msgid "segment split info is not nul terminated"
+msgstr ""
+
+#: od-macho.c:1303
+#, c-format
+msgid " 32 bit pointers:\n"
+msgstr ""
+
+#: od-macho.c:1306
+#, c-format
+msgid " 64 bit pointers:\n"
+msgstr ""
+
+#: od-macho.c:1309
+#, c-format
+msgid " PPC hi-16:\n"
+msgstr ""
+
+#: od-macho.c:1312
+#, c-format
+msgid " Unhandled location type %u\n"
+msgstr ""
+
+#: od-macho.c:1336
+msgid "cannot read function starts"
+msgstr ""
+
+#: od-macho.c:1400
+msgid "cannot read data_in_code"
+msgstr ""
+
+#: od-macho.c:1438
+msgid "cannot read twolevel hints"
+msgstr ""
+
+#: od-macho.c:1506
+msgid "cannot read build tools"
+msgstr ""
+
+#: od-xcoff.c:77
+#, c-format
+msgid ""
+"For XCOFF files:\n"
+" header Display the file header\n"
+" aout Display the auxiliary header\n"
+" sections Display the section headers\n"
+" syms Display the symbols table\n"
+" relocs Display the relocation entries\n"
+" lineno Display the line number entries\n"
+" loader Display loader section\n"
+" except Display exception table\n"
+" typchk Display type-check section\n"
+" traceback Display traceback tags\n"
+" toc Display toc symbols\n"
+" ldinfo Display loader info in core files\n"
+msgstr ""
+
+#: od-xcoff.c:418
+#, fuzzy, c-format
+msgid " nbr sections: %d\n"
+msgstr " Opțiuni generice:\n"
+
+#: od-xcoff.c:419
+#, c-format
+msgid " time and date: 0x%08x - "
+msgstr ""
+
+#: od-xcoff.c:421 readelf.c:20126
+#, c-format
+msgid "not set\n"
+msgstr ""
+
+#: od-xcoff.c:428
+#, c-format
+msgid " symbols off: 0x%08x\n"
+msgstr ""
+
+#: od-xcoff.c:429
+#, c-format
+msgid " nbr symbols: %d\n"
+msgstr ""
+
+#: od-xcoff.c:430
+#, c-format
+msgid " opt hdr sz: %d\n"
+msgstr ""
+
+#: od-xcoff.c:431
+#, c-format
+msgid " flags: 0x%04x "
+msgstr ""
+
+#: od-xcoff.c:445
+#, c-format
+msgid "Auxiliary header:\n"
+msgstr ""
+
+#: od-xcoff.c:448
+#, c-format
+msgid " No aux header\n"
+msgstr ""
+
+#: od-xcoff.c:453
+#, c-format
+msgid "warning: optional header size too large (> %d)\n"
+msgstr ""
+
+#: od-xcoff.c:459
+msgid "cannot read auxhdr"
+msgstr ""
+
+#: od-xcoff.c:524
+#, c-format
+msgid "Section headers (at %u+%u=0x%08x to 0x%08x):\n"
+msgstr ""
+
+#: od-xcoff.c:529
+#, fuzzy, c-format
+msgid " No section header\n"
+msgstr "antete secțiune"
+
+#: od-xcoff.c:534 od-xcoff.c:546 od-xcoff.c:601
+#, fuzzy
+msgid "cannot read section header"
+msgstr "antete secțiune"
+
+#: od-xcoff.c:560
+#, c-format
+msgid " Flags: %08x "
+msgstr ""
+
+#: od-xcoff.c:568
+#, c-format
+msgid "overflow - nreloc: %u, nlnno: %u\n"
+msgstr ""
+
+#: od-xcoff.c:589 od-xcoff.c:924 od-xcoff.c:980
+#, fuzzy
+msgid "cannot read section headers"
+msgstr "antete secțiune"
+
+#: od-xcoff.c:648
+#, fuzzy
+msgid "cannot read strings table length"
+msgstr "lungime șir invalidă"
+
+#: od-xcoff.c:664
+msgid "cannot read strings table"
+msgstr ""
+
+#: od-xcoff.c:672
+msgid "cannot read symbol table"
+msgstr ""
+
+#: od-xcoff.c:687
+msgid "cannot read symbol entry"
+msgstr ""
+
+#: od-xcoff.c:722
+msgid "cannot read symbol aux entry"
+msgstr ""
+
+#: od-xcoff.c:744
+#, c-format
+msgid "Symbols table (strtable at 0x%08x)"
+msgstr ""
+
+#: od-xcoff.c:749
+#, fuzzy, c-format
+msgid ""
+":\n"
+" No symbols\n"
+msgstr "simboluri"
+
+#: od-xcoff.c:755
+#, c-format
+msgid " (no strings):\n"
+msgstr ""
+
+#: od-xcoff.c:757
+#, c-format
+msgid " (strings size: %08x):\n"
+msgstr ""
+
+#. Translators: 'sc' is for storage class, 'off' for offset.
+#: od-xcoff.c:771
+#, c-format
+msgid " # sc value section type aux name/off\n"
+msgstr ""
+
+#. Section length, number of relocs and line number.
+#: od-xcoff.c:823
+#, c-format
+msgid " scnlen: %08x nreloc: %-6u nlinno: %-6u\n"
+msgstr ""
-#: rdcoff.c:196
+#. Section length and number of relocs.
+#: od-xcoff.c:830
+#, c-format
+msgid " scnlen: %08x nreloc: %-6u\n"
+msgstr ""
+
+#: od-xcoff.c:893
+#, c-format
+msgid "offset: %08x"
+msgstr ""
+
+#: od-xcoff.c:936
+#, c-format
+msgid "Relocations for %s (%u)\n"
+msgstr ""
+
+#: od-xcoff.c:939
+msgid "cannot read relocations"
+msgstr ""
+
+#: od-xcoff.c:952
+#, fuzzy
+msgid "cannot read relocation entry"
+msgstr "intrare directorul numit"
+
+#: od-xcoff.c:992
+#, c-format
+msgid "Line numbers for %s (%u)\n"
+msgstr ""
+
+#: od-xcoff.c:995
+msgid "cannot read line numbers"
+msgstr ""
+
+#. Line number, symbol index and physical address.
+#: od-xcoff.c:999
+#, c-format
+msgid "lineno symndx/paddr\n"
+msgstr ""
+
+#: od-xcoff.c:1007
+msgid "cannot read line number entry"
+msgstr ""
+
+#: od-xcoff.c:1050
+#, fuzzy, c-format
+msgid "no .loader section in file\n"
+msgstr ""
+"\n"
+"Nu există nici o secțiune în acest fișier.\n"
+
+#: od-xcoff.c:1056
+#, c-format
+msgid "section .loader is too short\n"
+msgstr ""
+
+#: od-xcoff.c:1063
+#, fuzzy, c-format
+msgid "Loader header:\n"
+msgstr "antete program"
+
+#: od-xcoff.c:1065
+#, fuzzy, c-format
+msgid " version: %u\n"
+msgstr " Versiune: %d\n"
+
+#: od-xcoff.c:1068
+#, c-format
+msgid " Unhandled version\n"
+msgstr ""
+
+#: od-xcoff.c:1073
+#, c-format
+msgid " nbr symbols: %u\n"
+msgstr ""
+
+#: od-xcoff.c:1075
+#, fuzzy, c-format
+msgid " nbr relocs: %u\n"
+msgstr " (Dimensiune Pointer: %u)\n"
+
+#. Import string table length.
+#: od-xcoff.c:1077
+#, c-format
+msgid " import strtab len: %u\n"
+msgstr ""
+
+#: od-xcoff.c:1080
+#, fuzzy, c-format
+msgid " nbr import files: %u\n"
+msgstr "Generez fișier de export: %s"
+
+#: od-xcoff.c:1082
+#, c-format
+msgid " import file off: %u\n"
+msgstr ""
+
+#: od-xcoff.c:1084
+#, c-format
+msgid " string table len: %u\n"
+msgstr ""
+
+#: od-xcoff.c:1086
+#, c-format
+msgid " string table off: %u\n"
+msgstr ""
+
+#: od-xcoff.c:1089
+#, c-format
+msgid "Dynamic symbols:\n"
+msgstr ""
+
+#: od-xcoff.c:1096
+#, c-format
+msgid " %4u %08x %3u "
+msgstr ""
+
+#: od-xcoff.c:1109
+#, c-format
+msgid " %3u %3u "
+msgstr ""
+
+#: od-xcoff.c:1118
+#, c-format
+msgid "(bad offset: %u)"
+msgstr ""
+
+#: od-xcoff.c:1125
+#, c-format
+msgid "Dynamic relocs:\n"
+msgstr ""
+
+#: od-xcoff.c:1165
+#, c-format
+msgid "Import files:\n"
+msgstr ""
+
+#: od-xcoff.c:1197
+#, fuzzy, c-format
+msgid "no .except section in file\n"
+msgstr "setează dimensiune secțiune"
+
+#: od-xcoff.c:1205
+#, c-format
+msgid "Exception table:\n"
+msgstr ""
+
+#: od-xcoff.c:1240
+#, c-format
+msgid "no .typchk section in file\n"
+msgstr ""
+
+#: od-xcoff.c:1247
+#, fuzzy, c-format
+msgid "Type-check section:\n"
+msgstr "secțiune rpc"
+
+#: od-xcoff.c:1294
+#, fuzzy, c-format
+msgid " address beyond section size\n"
+msgstr "setează dimensiune secțiune"
+
+#: od-xcoff.c:1304
+#, fuzzy, c-format
+msgid " tags at %08x\n"
+msgstr "atribute 0x%08x:\n"
+
+#: od-xcoff.c:1382
+#, c-format
+msgid " number of CTL anchors: %u\n"
+msgstr ""
+
+#: od-xcoff.c:1401
+#, c-format
+msgid " Name (len: %u): "
+msgstr ""
+
+#: od-xcoff.c:1404
+#, c-format
+msgid "[truncated]\n"
+msgstr ""
+
+#: od-xcoff.c:1423
+#, c-format
+msgid " (end of tags at %08x)\n"
+msgstr ""
+
+#: od-xcoff.c:1426
+#, c-format
+msgid " no tags found\n"
+msgstr ""
+
+#: od-xcoff.c:1430
+#, c-format
+msgid " Truncated .text section\n"
+msgstr ""
+
+#: od-xcoff.c:1515
+#, c-format
+msgid "TOC:\n"
+msgstr ""
+
+#: od-xcoff.c:1558
+#, c-format
+msgid "Nbr entries: %-8u Size: %08x (%u)\n"
+msgstr ""
+
+#: od-xcoff.c:1642
+#, fuzzy
+msgid "cannot read header"
+msgstr "antete program"
+
+#: od-xcoff.c:1650
+#, fuzzy, c-format
+msgid "File header:\n"
+msgstr "antet dialog"
+
+#: od-xcoff.c:1651
+#, c-format
+msgid " magic: 0x%04x (0%04o) "
+msgstr ""
+
+#: od-xcoff.c:1655
+#, c-format
+msgid "(WRMAGIC: writable text segments)"
+msgstr ""
+
+#: od-xcoff.c:1658
+#, c-format
+msgid "(ROMAGIC: readonly sharablee text segments)"
+msgstr ""
+
+#: od-xcoff.c:1661
+#, c-format
+msgid "(TOCMAGIC: readonly text segments and TOC)"
+msgstr ""
+
+#: od-xcoff.c:1664
+#, fuzzy, c-format
+msgid "unknown magic"
+msgstr "secțiune necunoscută"
+
+#: od-xcoff.c:1672 od-xcoff.c:1814
+#, c-format
+msgid " Unhandled magic\n"
+msgstr ""
+
+#: od-xcoff.c:1738
+msgid "cannot read loader info table"
+msgstr ""
+
+#: od-xcoff.c:1770
+#, c-format
+msgid ""
+"\n"
+"ldinfo dump not supported in 32 bits environments\n"
+msgstr ""
+
+#: od-xcoff.c:1788
+msgid "cannot core read header"
+msgstr ""
+
+#: od-xcoff.c:1795
+#, fuzzy, c-format
+msgid "Core header:\n"
+msgstr "antete program"
+
+#: od-xcoff.c:1796
+#, c-format
+msgid " version: 0x%08x "
+msgstr ""
+
+#: od-xcoff.c:1800
+#, c-format
+msgid "(dumpx format - aix4.3 / 32 bits)"
+msgstr ""
+
+#: od-xcoff.c:1803
+#, c-format
+msgid "(dumpxx format - aix5.0 / 64 bits)"
+msgstr ""
+
+#: od-xcoff.c:1806
+#, fuzzy, c-format
+msgid "unknown format"
+msgstr "tip format necunoscut `%s'"
+
+#: rclex.c:196
+msgid "invalid value specified for pragma code_page.\n"
+msgstr ""
+
+#: rdcoff.c:116
+#, c-format
+msgid "Excessively large slot index: %lx"
+msgstr ""
+
+#: rdcoff.c:202
#, c-format
msgid "parse_coff_type: Bad type code 0x%x"
msgstr ""
-#: rdcoff.c:404 rdcoff.c:509 rdcoff.c:697
+#: rdcoff.c:410 rdcoff.c:517 rdcoff.c:707
#, c-format
msgid "bfd_coff_get_syment failed: %s"
msgstr ""
-#: rdcoff.c:420 rdcoff.c:717
+#: rdcoff.c:427 rdcoff.c:727
#, c-format
msgid "bfd_coff_get_auxent failed: %s"
msgstr ""
-#: rdcoff.c:784
+#: rdcoff.c:794
#, c-format
msgid "%ld: .bf without preceding function"
msgstr ""
-#: rdcoff.c:834
+#: rdcoff.c:844
#, c-format
msgid "%ld: unexpected .ef\n"
msgstr ""
-#: rddbg.c:85
+#: rddbg.c:81
#, c-format
msgid "%s: no recognized debugging information"
-msgstr "%s: nici o informaþie de depanare recunoscutã"
+msgstr "%s: nici o informație de depanare recunoscută"
-#: rddbg.c:394
+#: rddbg.c:199
#, c-format
-msgid "Last stabs entries before error:\n"
+msgid "%s: %s: stab entry %ld is corrupt, strx = 0x%x, type = %d\n"
msgstr ""
-#: readelf.c:272
+#: rddbg.c:223
#, c-format
-msgid "%s: Error: "
+msgid "%s: %s: stab entry %ld is corrupt\n"
msgstr ""
-#: readelf.c:283
+#: rddbg.c:392
#, c-format
-msgid "%s: Warning: "
-msgstr "%s: Avertisment: "
+msgid "Last stabs entries before error:\n"
+msgstr ""
+
+#: readelf.c:385
+#, fuzzy
+msgid "<none>"
+msgstr "nimic"
-#: readelf.c:298
+#: readelf.c:387
+msgid "<no-strings>"
+msgstr ""
+
+#: readelf.c:482
#, c-format
-msgid "Unable to seek to 0x%x for %s\n"
+msgid "Size truncation prevents reading %s elements of size %s for %s\n"
msgstr ""
-#: readelf.c:310
+#: readelf.c:492
#, c-format
-msgid "Out of memory allocating 0x%x bytes for %s\n"
+msgid "Size overflow prevents reading %s elements of size %s for %s\n"
msgstr ""
-#: readelf.c:318
+#: readelf.c:505
#, c-format
-msgid "Unable to read in 0x%x bytes of %s\n"
-msgstr "Nu pot citi în cei 0x%x octeþi ai lui %s\n"
+msgid "Reading %s bytes extends past end of file for %s\n"
+msgstr ""
-#: readelf.c:364 readelf.c:412 readelf.c:615 readelf.c:647
+#: readelf.c:514
+#, fuzzy, c-format
+msgid "Unable to seek to 0x%lx for %s\n"
+msgstr "Nu pot citi în cei 0x%x octeți ai lui %s\n"
+
+#: readelf.c:528
#, c-format
-msgid "Unhandled data length: %d\n"
+msgid "Out of memory allocating %s bytes for %s\n"
msgstr ""
-#: readelf.c:752
+#: readelf.c:539
+#, fuzzy, c-format
+msgid "Unable to read in %s bytes of %s\n"
+msgstr "Nu pot citi în cei 0x%x octeți ai lui %s\n"
+
+#: readelf.c:1151
msgid "Don't know about relocations on this machine architecture\n"
msgstr ""
-#: readelf.c:772 readelf.c:799 readelf.c:842 readelf.c:869
-msgid "relocs"
-msgstr ""
+#: readelf.c:1178 readelf.c:1283
+#, fuzzy
+msgid "32-bit relocation data"
+msgstr "date secțiune depanare"
-#: readelf.c:782 readelf.c:809 readelf.c:852 readelf.c:879
-msgid "out of memory parsing relocs"
-msgstr ""
+#: readelf.c:1190 readelf.c:1220 readelf.c:1294 readelf.c:1323 readelf.c:1402
+#, fuzzy
+msgid "out of memory parsing relocs\n"
+msgstr "Memorie insuficientă\n"
+
+#: readelf.c:1208 readelf.c:1312
+#, fuzzy
+msgid "64-bit relocation data"
+msgstr "date secțiune depanare"
-#: readelf.c:933
+#: readelf.c:1376
+#, fuzzy
+msgid "RELR relocation data"
+msgstr "date secțiune depanare"
+
+#: readelf.c:1516
+#, c-format
+msgid " %lu offset\n"
+msgid_plural " %lu offsets\n"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: readelf.c:1528
#, c-format
msgid " Offset Info Type Sym. Value Symbol's Name + Addend\n"
msgstr ""
-#: readelf.c:935
+#: readelf.c:1530
#, c-format
msgid " Offset Info Type Sym.Value Sym. Name + Addend\n"
msgstr ""
-#: readelf.c:940
+#: readelf.c:1535
#, c-format
msgid " Offset Info Type Sym. Value Symbol's Name\n"
msgstr ""
-#: readelf.c:942
+#: readelf.c:1537
#, c-format
msgid " Offset Info Type Sym.Value Sym. Name\n"
msgstr ""
-#: readelf.c:950
+#: readelf.c:1545
#, c-format
msgid " Offset Info Type Symbol's Value Symbol's Name + Addend\n"
msgstr ""
-#: readelf.c:952
+#: readelf.c:1547
#, c-format
msgid " Offset Info Type Sym. Value Sym. Name + Addend\n"
msgstr ""
-#: readelf.c:957
+#: readelf.c:1552
#, c-format
msgid " Offset Info Type Symbol's Value Symbol's Name\n"
msgstr ""
-#: readelf.c:959
+#: readelf.c:1554
#, c-format
msgid " Offset Info Type Sym. Value Sym. Name\n"
msgstr ""
-#: readelf.c:1239 readelf.c:1241 readelf.c:1324 readelf.c:1326 readelf.c:1335
-#: readelf.c:1337
+#: readelf.c:1930 readelf.c:2125 readelf.c:2133
#, c-format
msgid "unrecognized: %-7lx"
msgstr ""
-#: readelf.c:1295
+#: readelf.c:1956
+#, fuzzy, c-format
+msgid "<unknown addend: %lx>"
+msgstr "<necunoscut: %x>"
+
+#: readelf.c:1965
+#, c-format
+msgid " bad symbol index: %08lx in reloc\n"
+msgstr ""
+
+#: readelf.c:2070
#, c-format
msgid "<string table index: %3ld>"
msgstr ""
-#: readelf.c:1297
+#: readelf.c:2073
#, c-format
-msgid "<corrupt string table index: %3ld>"
+msgid "<corrupt string table index: %3ld>\n"
msgstr ""
-#: readelf.c:1569
+#: readelf.c:2595
#, c-format
msgid "Processor Specific: %lx"
msgstr ""
-#: readelf.c:1588
+#: readelf.c:2622
#, c-format
msgid "Operating System specific: %lx"
msgstr ""
-#: readelf.c:1592 readelf.c:2370
+#: readelf.c:2626 readelf.c:4563
#, c-format
msgid "<unknown>: %lx"
msgstr "necunoscut>: %lx"
-#: readelf.c:1605
+#: readelf.c:2726
msgid "NONE (None)"
msgstr "NONE (Nimic)"
-#: readelf.c:1606
+#: readelf.c:2727
msgid "REL (Relocatable file)"
-msgstr "REL (Fiºier realocabil)"
+msgstr "REL (Fișier realocabil)"
-#: readelf.c:1607
+#: readelf.c:2728
msgid "EXEC (Executable file)"
-msgstr "EXEC (Fiºier executabil)"
+msgstr "EXEC (Fișier executabil)"
-#: readelf.c:1608
+#: readelf.c:2731
+msgid "DYN (Position-Independent Executable file)"
+msgstr ""
+
+#: readelf.c:2733
msgid "DYN (Shared object file)"
msgstr ""
-#: readelf.c:1609
+#: readelf.c:2734
msgid "CORE (Core file)"
msgstr ""
-#: readelf.c:1613
+#: readelf.c:2738
#, c-format
msgid "Processor Specific: (%x)"
msgstr ""
-#: readelf.c:1615
+#: readelf.c:2740
#, c-format
msgid "OS Specific: (%x)"
msgstr ""
-#: readelf.c:1617 readelf.c:1724 readelf.c:2554
+#: readelf.c:2742
#, c-format
msgid "<unknown>: %x"
msgstr "<necunoscut>: %x"
-#: readelf.c:1629
+#. Please keep this switch table sorted by increasing EM_ value.
+#. 0
+#: readelf.c:2756 readelf.c:18010 readelf.c:18021
msgid "None"
msgstr "Nimic"
-#: readelf.c:2229
+#: readelf.c:3004
+#, fuzzy, c-format
+msgid "<unknown>: 0x%x"
+msgstr "[<necunoscut>: 0x%x]"
+
+#: readelf.c:3290
+#, fuzzy
+msgid ", <unknown>"
+msgstr "<necunoscut>: %d"
+
+#: readelf.c:3659 readelf.c:10755
+#, fuzzy
+msgid "unknown"
+msgstr "<necunoscut>: %d"
+
+#: readelf.c:3660
+#, fuzzy
+msgid "unknown mac"
+msgstr "secțiune necunoscută"
+
+#: readelf.c:3728
+#, fuzzy
+msgid ", <unknown MeP cpu type>"
+msgstr "tip BB necunoscut"
+
+#: readelf.c:3738
+#, fuzzy
+msgid "<unknown MeP copro type>"
+msgstr "tip BB necunoscut"
+
+#: readelf.c:3749
+#, c-format
+msgid ", unknown flags bits: %#x"
+msgstr ""
+
+#: readelf.c:3758
+#, fuzzy
+msgid ", relocatable"
+msgstr "REL (Fișier realocabil)"
+
+#: readelf.c:3761
+#, fuzzy
+msgid ", relocatable-lib"
+msgstr "REL (Fișier realocabil)"
+
+#: readelf.c:3843
+msgid ", unknown v850 architecture variant"
+msgstr ""
+
+#: readelf.c:3911
+#, fuzzy
+msgid ", unknown CPU"
+msgstr "<necunoscut>: %d"
+
+#: readelf.c:3926
+#, fuzzy
+msgid ", unknown ABI"
+msgstr "tip BB necunoscut"
+
+#: readelf.c:3951 readelf.c:4022
+#, fuzzy
+msgid ", unknown ISA"
+msgstr "tip ATN necunoscut"
+
+#: readelf.c:4132
+#, c-format
+msgid "Unrecognised IA64 VMS Command Code: %x\n"
+msgstr ""
+
+#: readelf.c:4198
+msgid ": architecture variant: "
+msgstr ""
+
+#: readelf.c:4217
+#, fuzzy
+msgid ": unknown"
+msgstr "<necunoscut>: %d"
+
+#: readelf.c:4221
+msgid ": unknown extra flag bits also present"
+msgstr ""
+
+#: readelf.c:4235
+#, fuzzy
+msgid ", unknown"
+msgstr "<necunoscut>: %d"
+
+#: readelf.c:4301
msgid "Standalone App"
-msgstr "Aplicaþie independentã"
+msgstr "Aplicație independentă"
-#: readelf.c:2232 readelf.c:2952 readelf.c:2968
+#: readelf.c:4310
+msgid "Bare-metal C6000"
+msgstr ""
+
+#: readelf.c:4320 readelf.c:5535 readelf.c:5551 readelf.c:19439
+#: readelf.c:19539 readelf.c:19570 readelf.c:19607 readelf.c:19668
+#: readelf.c:19695 readelf.c:19717
#, c-format
msgid "<unknown: %x>"
msgstr "<necunoscut: %x>"
-#: readelf.c:2597
+#. This message is probably going to be displayed in a 15
+#. character wide field, so put the hex value first.
+#: readelf.c:4933
+#, fuzzy, c-format
+msgid "%08x: <unknown>"
+msgstr "<necunoscut>: %d"
+
+#: readelf.c:5021
#, c-format
msgid "Usage: readelf <option(s)> elf-file(s)\n"
msgstr ""
-#: readelf.c:2598
+#: readelf.c:5022
#, c-format
msgid " Display information about the contents of ELF format files\n"
msgstr ""
-#: readelf.c:2599
-#, c-format
-msgid ""
-" Options are:\n"
-" -a --all Equivalent to: -h -l -S -s -r -d -V -A -I\n"
-" -h --file-header Display the ELF file header\n"
-" -l --program-headers Display the program headers\n"
-" --segments An alias for --program-headers\n"
-" -S --section-headers Display the sections' header\n"
-" --sections An alias for --section-headers\n"
-" -g --section-groups Display the section groups\n"
-" -e --headers Equivalent to: -h -l -S\n"
-" -s --syms Display the symbol table\n"
-" --symbols An alias for --syms\n"
-" -n --notes Display the core notes (if present)\n"
-" -r --relocs Display the relocations (if present)\n"
-" -u --unwind Display the unwind info (if present)\n"
-" -d --dynamic Display the dynamic section (if present)\n"
-" -V --version-info Display the version sections (if present)\n"
-" -A --arch-specific Display architecture specific information (if any).\n"
-" -D --use-dynamic Use the dynamic section info when displaying symbols\n"
-" -x --hex-dump=<number> Dump the contents of section <number>\n"
-" -w[liaprmfFsoR] or\n"
-" --debug-dump[=line,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=str,=loc,=Ranges]\n"
-" Display the contents of DWARF2 debug sections\n"
+#: readelf.c:5023
+#, c-format
+msgid " Options are:\n"
msgstr ""
-#: readelf.c:2622
+#: readelf.c:5024
+#, c-format
+msgid " -a --all Equivalent to: -h -l -S -s -r -d -V -A -I\n"
+msgstr ""
+
+#: readelf.c:5026
+#, c-format
+msgid " -h --file-header Display the ELF file header\n"
+msgstr ""
+
+#: readelf.c:5028
+#, c-format
+msgid " -l --program-headers Display the program headers\n"
+msgstr ""
+
+#: readelf.c:5030
+#, c-format
+msgid " --segments An alias for --program-headers\n"
+msgstr ""
+
+#: readelf.c:5032
+#, c-format
+msgid " -S --section-headers Display the sections' header\n"
+msgstr ""
+
+#: readelf.c:5034
+#, c-format
+msgid " --sections An alias for --section-headers\n"
+msgstr ""
+
+#: readelf.c:5036
+#, c-format
+msgid " -g --section-groups Display the section groups\n"
+msgstr ""
+
+#: readelf.c:5038
+#, c-format
+msgid " -t --section-details Display the section details\n"
+msgstr ""
+
+#: readelf.c:5040
+#, c-format
+msgid " -e --headers Equivalent to: -h -l -S\n"
+msgstr ""
+
+#: readelf.c:5042
+#, fuzzy, c-format
+msgid " -s --syms Display the symbol table\n"
+msgstr " t - afișează conținutul arhivei\n"
+
+#: readelf.c:5044
+#, c-format
+msgid " --symbols An alias for --syms\n"
+msgstr ""
+
+#: readelf.c:5046
+#, fuzzy, c-format
+msgid " --dyn-syms Display the dynamic symbol table\n"
+msgstr " t - afișează conținutul arhivei\n"
+
+#: readelf.c:5048
+#, c-format
+msgid " --lto-syms Display LTO symbol tables\n"
+msgstr ""
+
+#: readelf.c:5050
#, c-format
msgid ""
-" -i --instruction-dump=<number>\n"
-" Disassemble the contents of section <number>\n"
+" --sym-base=[0|8|10|16] \n"
+" Force base for symbol sizes. The options are \n"
+" mixed (the default), octal, decimal, hexadecimal.\n"
+msgstr ""
+
+#: readelf.c:5054
+#, c-format
+msgid " -C --demangle[=STYLE] Decode mangled/processed symbol names\n"
+msgstr ""
+
+#: readelf.c:5058
+#, c-format
+msgid " --no-demangle Do not demangle low-level symbol names. (default)\n"
+msgstr ""
+
+#: readelf.c:5060
+#, c-format
+msgid " --recurse-limit Enable a demangling recursion limit. (default)\n"
+msgstr ""
+
+#: readelf.c:5062
+#, c-format
+msgid " --no-recurse-limit Disable a demangling recursion limit\n"
msgstr ""
-#: readelf.c:2626
+#: readelf.c:5064
#, c-format
msgid ""
-" -I --histogram Display histogram of bucket list lengths\n"
-" -W --wide Allow output width to exceed 80 characters\n"
-" -H --help Display this information\n"
-" -v --version Display the version number of readelf\n"
+" -U[dlexhi] --unicode=[default|locale|escape|hex|highlight|invalid]\n"
+" Display unicode characters as determined by the current locale\n"
+" (default), escape sequences, \"<hex sequences>\", highlighted\n"
+" escape sequences, or treat them as invalid and display as\n"
+" \"{hex sequences}\"\n"
msgstr ""
-#: readelf.c:2651 readelf.c:12118
-msgid "Out of memory allocating dump request table."
+#: readelf.c:5070
+#, fuzzy, c-format
+msgid " -n --notes Display the core notes (if present)\n"
+msgstr " t - afișează conținutul arhivei\n"
+
+#: readelf.c:5072
+#, c-format
+msgid " -r --relocs Display the relocations (if present)\n"
msgstr ""
-#: readelf.c:2820 readelf.c:2888
+#: readelf.c:5074
#, c-format
-msgid "Unrecognized debug option '%s'\n"
-msgstr "Opþiune de depanare nerecunoscutã '%s'\n"
+msgid " -u --unwind Display the unwind info (if present)\n"
+msgstr ""
-#: readelf.c:2922
+#: readelf.c:5076
#, c-format
-msgid "Invalid option '-%c'\n"
-msgstr "Opþiune invalidã '-%c'\n"
+msgid " -d --dynamic Display the dynamic section (if present)\n"
+msgstr ""
-#: readelf.c:2936
-msgid "Nothing to do.\n"
+#: readelf.c:5078
+#, c-format
+msgid " -V --version-info Display the version sections (if present)\n"
+msgstr ""
+
+#: readelf.c:5080
+#, c-format
+msgid " -A --arch-specific Display architecture specific information (if any)\n"
+msgstr ""
+
+#: readelf.c:5082
+#, c-format
+msgid " -c --archive-index Display the symbol/file index in an archive\n"
+msgstr ""
+
+#: readelf.c:5084
+#, c-format
+msgid " -D --use-dynamic Use the dynamic section info when displaying symbols\n"
msgstr ""
-#: readelf.c:2948 readelf.c:2964 readelf.c:5906
+#: readelf.c:5086
+#, c-format
+msgid ""
+" -L --lint|--enable-checks\n"
+" Display warning messages for possible problems\n"
+msgstr ""
+
+#: readelf.c:5089
+#, c-format
+msgid ""
+" -x --hex-dump=<number|name>\n"
+" Dump the contents of section <number|name> as bytes\n"
+msgstr ""
+
+#: readelf.c:5092
+#, c-format
+msgid ""
+" -p --string-dump=<number|name>\n"
+" Dump the contents of section <number|name> as strings\n"
+msgstr ""
+
+#: readelf.c:5095
+#, c-format
+msgid ""
+" -R --relocated-dump=<number|name>\n"
+" Dump the relocated contents of section <number|name>\n"
+msgstr ""
+
+#: readelf.c:5098
+#, c-format
+msgid " -z --decompress Decompress section before dumping it\n"
+msgstr ""
+
+#: readelf.c:5100
+#, c-format
+msgid ""
+" -w --debug-dump[a/=abbrev, A/=addr, r/=aranges, c/=cu_index, L/=decodedline,\n"
+" f/=frames, F/=frames-interp, g/=gdb_index, i/=info, o/=loc,\n"
+" m/=macro, p/=pubnames, t/=pubtypes, R/=Ranges, l/=rawline,\n"
+" s/=str, O/=str-offsets, u/=trace_abbrev, T/=trace_aranges,\n"
+" U/=trace_info]\n"
+" Display the contents of DWARF debug sections\n"
+msgstr ""
+
+#: readelf.c:5107
+#, c-format
+msgid ""
+" -wk --debug-dump=links Display the contents of sections that link to separate\n"
+" debuginfo files\n"
+msgstr ""
+
+#: readelf.c:5110
+#, c-format
+msgid ""
+" -P --process-links Display the contents of non-debug sections in separate\n"
+" debuginfo files. (Implies -wK)\n"
+msgstr ""
+
+#: readelf.c:5114
+#, c-format
+msgid ""
+" -wK --debug-dump=follow-links\n"
+" Follow links to separate debug info files (default)\n"
+msgstr ""
+
+#: readelf.c:5117
+#, c-format
+msgid ""
+" -wN --debug-dump=no-follow-links\n"
+" Do not follow links to separate debug info files\n"
+msgstr ""
+
+#: readelf.c:5121
+#, c-format
+msgid ""
+" -wK --debug-dump=follow-links\n"
+" Follow links to separate debug info files\n"
+msgstr ""
+
+#: readelf.c:5124
+#, c-format
+msgid ""
+" -wN --debug-dump=no-follow-links\n"
+" Do not follow links to separate debug info files\n"
+" (default)\n"
+msgstr ""
+
+#: readelf.c:5129
+#, c-format
+msgid " --dwarf-depth=N Do not display DIEs at depth N or greater\n"
+msgstr ""
+
+#: readelf.c:5131
+#, c-format
+msgid " --dwarf-start=N Display DIEs starting at offset N\n"
+msgstr ""
+
+#: readelf.c:5134
+#, c-format
+msgid " --ctf=<number|name> Display CTF info from section <number|name>\n"
+msgstr ""
+
+#: readelf.c:5136
+#, c-format
+msgid " --ctf-parent=<name> Use CTF archive member <name> as the CTF parent\n"
+msgstr ""
+
+#: readelf.c:5138
+#, c-format
+msgid ""
+" --ctf-symbols=<number|name>\n"
+" Use section <number|name> as the CTF external symtab\n"
+msgstr ""
+
+#: readelf.c:5141
+#, c-format
+msgid ""
+" --ctf-strings=<number|name>\n"
+" Use section <number|name> as the CTF external strtab\n"
+msgstr ""
+
+#: readelf.c:5147
+#, c-format
+msgid ""
+" -i --instruction-dump=<number|name>\n"
+" Disassemble the contents of section <number|name>\n"
+msgstr ""
+
+#: readelf.c:5151
+#, c-format
+msgid " -I --histogram Display histogram of bucket list lengths\n"
+msgstr ""
+
+#: readelf.c:5153
+#, c-format
+msgid " -W --wide Allow output width to exceed 80 characters\n"
+msgstr ""
+
+#: readelf.c:5155
+#, c-format
+msgid " -T --silent-truncation If a symbol name is truncated, do not add [...] suffix\n"
+msgstr ""
+
+#: readelf.c:5157
+#, c-format
+msgid " @<file> Read options from <file>\n"
+msgstr ""
+
+#: readelf.c:5159
+#, fuzzy, c-format
+msgid " -H --help Display this information\n"
+msgstr " t - afișează conținutul arhivei\n"
+
+#: readelf.c:5161
+#, c-format
+msgid " -v --version Display the version number of readelf\n"
+msgstr ""
+
+#: readelf.c:5187 readelf.c:5218 readelf.c:5222
+msgid "Out of memory allocating dump request table.\n"
+msgstr ""
+
+#: readelf.c:5458
+msgid "Missing arg to -U/--unicode"
+msgstr ""
+
+#: readelf.c:5497
+#, c-format
+msgid "Invalid option '-%c'\n"
+msgstr "Opțiune invalidă '-%c'\n"
+
+#: readelf.c:5531 readelf.c:5547 readelf.c:11828
msgid "none"
msgstr "nimic"
-#: readelf.c:2965
+#: readelf.c:5548
msgid "2's complement, little endian"
msgstr ""
-#: readelf.c:2966
+#: readelf.c:5549
msgid "2's complement, big endian"
msgstr ""
-#: readelf.c:2984
+#: readelf.c:5569
msgid "Not an ELF file - it has the wrong magic bytes at the start\n"
msgstr ""
-#: readelf.c:2992
+#: readelf.c:5581
+#, c-format
+msgid "ELF Header in linked file '%s':\n"
+msgstr ""
+
+#: readelf.c:5583
#, c-format
msgid "ELF Header:\n"
msgstr ""
-#: readelf.c:2993
+#: readelf.c:5584
#, c-format
msgid " Magic: "
msgstr ""
-#: readelf.c:2997
+#: readelf.c:5588
#, c-format
msgid " Class: %s\n"
msgstr " Clasa: %s\n"
-#: readelf.c:2999
+#: readelf.c:5590
#, c-format
msgid " Data: %s\n"
msgstr " Date: %s\n"
-#: readelf.c:3001
-#, c-format
-msgid " Version: %d %s\n"
+#: readelf.c:5592
+#, fuzzy, c-format
+msgid " Version: %d%s\n"
msgstr " Versiune: %d %s\n"
-#: readelf.c:3008
+#: readelf.c:5595
+msgid " (current)"
+msgstr ""
+
+#: readelf.c:5597
+#, fuzzy
+msgid " <unknown>"
+msgstr "<necunoscut>: %d"
+
+#: readelf.c:5599
#, c-format
msgid " OS/ABI: %s\n"
msgstr " OS/ABI: %s\n"
-#: readelf.c:3010
+#: readelf.c:5601
#, c-format
msgid " ABI Version: %d\n"
msgstr " Versiune ABI: %d\n"
-#: readelf.c:3012
+#: readelf.c:5603
#, c-format
msgid " Type: %s\n"
msgstr " Tip: %s\n"
-#: readelf.c:3014
+#: readelf.c:5605
#, c-format
msgid " Machine: %s\n"
-msgstr " Maºinã: %s\n"
+msgstr " Mașină: %s\n"
-#: readelf.c:3016
+#: readelf.c:5607
#, c-format
msgid " Version: 0x%lx\n"
msgstr " Versiune: 0x%lx\n"
-#: readelf.c:3019
+#: readelf.c:5610
#, c-format
msgid " Entry point address: "
-msgstr " Adresã punct de intrare: "
+msgstr " Adresă punct de intrare: "
-#: readelf.c:3021
+#: readelf.c:5612
#, c-format
msgid ""
"\n"
" Start of program headers: "
msgstr ""
"\n"
-" Începutul antetelor programului: "
+" ÃŽnceputul antetelor programului: "
-#: readelf.c:3023
+#: readelf.c:5614
#, c-format
msgid ""
" (bytes into file)\n"
" Start of section headers: "
msgstr ""
-#: readelf.c:3025
+#: readelf.c:5616
#, c-format
msgid " (bytes into file)\n"
-msgstr " (octeþi în fiºier)\n"
+msgstr " (octeți în fișier)\n"
-#: readelf.c:3027
+#: readelf.c:5618
#, c-format
msgid " Flags: 0x%lx%s\n"
msgstr " Atribute: 0x%lx%s\n"
-#: readelf.c:3030
-#, c-format
-msgid " Size of this header: %ld (bytes)\n"
+#: readelf.c:5621
+#, fuzzy, c-format
+msgid " Size of this header: %u (bytes)\n"
+msgstr " (Dimensiune Pointer: %u)\n"
+
+#: readelf.c:5623
+#, fuzzy, c-format
+msgid " Size of program headers: %u (bytes)\n"
msgstr ""
+"\n"
+" ÃŽnceputul antetelor programului: "
-#: readelf.c:3032
-#, c-format
-msgid " Size of program headers: %ld (bytes)\n"
+#: readelf.c:5625
+#, fuzzy, c-format
+msgid " Number of program headers: %u"
+msgstr ""
+"\n"
+" ÃŽnceputul antetelor programului: "
+
+#: readelf.c:5635
+#, fuzzy, c-format
+msgid " Size of section headers: %u (bytes)\n"
msgstr ""
+"\n"
+" ÃŽnceputul antetelor programului: "
-#: readelf.c:3034
-#, c-format
-msgid " Number of program headers: %ld\n"
+#: readelf.c:5637
+#, fuzzy, c-format
+msgid " Number of section headers: %u"
msgstr ""
+"\n"
+" ÃŽnceputul antetelor programului: "
-#: readelf.c:3036
+#: readelf.c:5645
#, c-format
-msgid " Size of section headers: %ld (bytes)\n"
+msgid " Section header string table index: %u"
msgstr ""
-#: readelf.c:3038
+#: readelf.c:5657
#, c-format
-msgid " Number of section headers: %ld"
+msgid " <corrupt: out of range>"
msgstr ""
-#: readelf.c:3043
-#, c-format
-msgid " Section header string table index: %ld"
+#: readelf.c:5696 readelf.c:5743
+msgid "The e_phentsize field in the ELF header is less than the size of an ELF program header\n"
+msgstr ""
+
+#: readelf.c:5700 readelf.c:5747
+msgid "The e_phentsize field in the ELF header is larger than the size of an ELF program header\n"
msgstr ""
-#: readelf.c:3074 readelf.c:3107
+#: readelf.c:5703 readelf.c:5750
msgid "program headers"
msgstr "antete program"
-#: readelf.c:3145 readelf.c:3446 readelf.c:3487 readelf.c:3546 readelf.c:3609
-#: readelf.c:3993 readelf.c:4017 readelf.c:5247 readelf.c:5291 readelf.c:5489
-#: readelf.c:6450 readelf.c:6464 readelf.c:11493 readelf.c:11912
-#: readelf.c:11979
-msgid "Out of memory\n"
-msgstr "Memorie insuficientã\n"
+#: readelf.c:5789
+#, c-format
+msgid "Too many program headers - %#x - the file is not that big\n"
+msgstr ""
+
+#: readelf.c:5798
+#, c-format
+msgid "Out of memory reading %u program headers\n"
+msgstr ""
+
+#: readelf.c:5828
+msgid "possibly corrupt ELF header - it has a non-zero program header offset, but no program headers\n"
+msgstr ""
+
+#: readelf.c:5833
+#, fuzzy, c-format
+msgid ""
+"\n"
+"There are no program headers in linked file '%s'.\n"
+msgstr ""
+"\n"
+"Nu există nici o secțiune în acest fișier.\n"
-#: readelf.c:3172
+#: readelf.c:5836
#, c-format
msgid ""
"\n"
"There are no program headers in this file.\n"
msgstr ""
-#: readelf.c:3178
+#: readelf.c:5847
#, c-format
msgid ""
"\n"
"Elf file type is %s\n"
msgstr ""
"\n"
-"Tipul fiºierului elf este %s\n"
+"Tipul fișierului elf este %s\n"
-#: readelf.c:3179
+#: readelf.c:5848
#, c-format
-msgid "Entry point "
+msgid "Entry point 0x%s\n"
msgstr ""
-#: readelf.c:3181
+#: readelf.c:5849
#, c-format
-msgid ""
-"\n"
-"There are %d program headers, starting at offset "
-msgstr ""
+msgid "There is %d program header, starting at offset %s\n"
+msgid_plural "There are %d program headers, starting at offset %s\n"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
-#: readelf.c:3193 readelf.c:3195
+#: readelf.c:5862 readelf.c:5864
#, c-format
msgid ""
"\n"
"Program Headers:\n"
msgstr ""
-#: readelf.c:3199
+#: readelf.c:5868
#, c-format
msgid " Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align\n"
msgstr ""
-#: readelf.c:3202
+#: readelf.c:5871
#, c-format
msgid " Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align\n"
msgstr ""
-#: readelf.c:3206
+#: readelf.c:5875
#, c-format
msgid " Type Offset VirtAddr PhysAddr\n"
msgstr ""
-#: readelf.c:3208
+#: readelf.c:5877
#, c-format
msgid " FileSiz MemSiz Flags Align\n"
msgstr ""
-#: readelf.c:3301
+#: readelf.c:5975
+msgid "LOAD segments must be sorted in order of increasing VirtAddr\n"
+msgstr ""
+
+#: readelf.c:5978
+msgid "the segment's file size is larger than its memory size\n"
+msgstr ""
+
+#: readelf.c:5985
+msgid "the PHDR segment must occur before any LOAD segment\n"
+msgstr ""
+
+#: readelf.c:6003
+msgid "the PHDR segment is not covered by a LOAD segment\n"
+msgstr ""
+
+#: readelf.c:6009
msgid "more than one dynamic segment\n"
msgstr ""
-#: readelf.c:3312
-msgid "no .dynamic section in the dynamic segment"
+#: readelf.c:6028
+msgid "no .dynamic section in the dynamic segment\n"
msgstr ""
-#: readelf.c:3321
-msgid "the .dynamic section is not contained within the dynamic segment"
+#: readelf.c:6047
+msgid "the .dynamic section is not the same as the dynamic segment\n"
msgstr ""
-#: readelf.c:3323
-msgid "the .dynamic section is not the first section in the dynamic segment."
+#: readelf.c:6058
+msgid "the dynamic segment offset + size exceeds the size of the file\n"
msgstr ""
-#: readelf.c:3337
+#: readelf.c:6071
msgid "Unable to find program interpreter name\n"
msgstr ""
-#: readelf.c:3344
-#, c-format
-msgid ""
-"\n"
-" [Requesting program interpreter: %s]"
-msgstr ""
+#: readelf.c:6082
+#, fuzzy, c-format
+msgid " [Requesting program interpreter: %s]\n"
+msgstr " interpretor de programe"
-#: readelf.c:3356
+#: readelf.c:6093
#, c-format
msgid ""
"\n"
" Section to Segment mapping:\n"
msgstr ""
-#: readelf.c:3357
+#: readelf.c:6094
#, c-format
msgid " Segment Sections...\n"
msgstr ""
-#: readelf.c:3408
+#: readelf.c:6136 readelf.c:11113
msgid "Cannot interpret virtual addresses without program headers.\n"
msgstr ""
-#: readelf.c:3424
+#: readelf.c:6152
#, c-format
msgid "Virtual address 0x%lx not located in any PT_LOAD segment.\n"
msgstr ""
-#: readelf.c:3438 readelf.c:3479
+#: readelf.c:6177 readelf.c:6241
+msgid "The e_shentsize field in the ELF header is less than the size of an ELF section header\n"
+msgstr ""
+
+#: readelf.c:6181 readelf.c:6246
+msgid "The e_shentsize field in the ELF header is larger than the size of an ELF section header\n"
+msgstr ""
+
+#: readelf.c:6185 readelf.c:6251
msgid "section headers"
-msgstr "antete secþiune"
+msgstr "antete secțiune"
+
+#: readelf.c:6194 readelf.c:6260
+#, c-format
+msgid "Out of memory reading %u section headers\n"
+msgstr ""
+
+#: readelf.c:6214 readelf.c:6280
+#, c-format
+msgid "Section %u has an out of range sh_link value of %u\n"
+msgstr ""
+
+#: readelf.c:6216 readelf.c:6282
+#, c-format
+msgid "Section %u has an out of range sh_info value of %u\n"
+msgstr ""
+
+#: readelf.c:6324 readelf.c:6441
+#, c-format
+msgid "Section %s has an invalid sh_entsize of 0x%lx\n"
+msgstr ""
-#: readelf.c:3523 readelf.c:3586
+#: readelf.c:6332 readelf.c:6449 readelf.c:13146
+#, c-format
+msgid "Section %s has an invalid sh_size of 0x%lx\n"
+msgstr ""
+
+#: readelf.c:6342 readelf.c:6459
+#, c-format
+msgid "Size (0x%lx) of section %s is not a multiple of its sh_entsize (0x%lx)\n"
+msgstr ""
+
+#: readelf.c:6350 readelf.c:6467 readelf.c:15575
msgid "symbols"
msgstr "simboluri"
-#: readelf.c:3533 readelf.c:3596
-msgid "symtab shndx"
-msgstr "symtab shndx"
+#: readelf.c:6362 readelf.c:6479
+msgid "Multiple symbol table index sections associated with the same symbol section\n"
+msgstr ""
+
+#: readelf.c:6369 readelf.c:6486
+#, fuzzy
+msgid "symbol table section indices"
+msgstr "dimensiuni secțiune stub"
+
+#: readelf.c:6376 readelf.c:6493
+#, c-format
+msgid "Index section %s has an sh_size of 0x%lx - expected 0x%lx\n"
+msgstr ""
-#: readelf.c:3697 readelf.c:3977
+#: readelf.c:6388 readelf.c:6505
+#, c-format
+msgid "Out of memory reading %lu symbols\n"
+msgstr ""
+
+#: readelf.c:6714 readelf.c:6811 readelf.c:6829 readelf.c:6847
+msgid "Internal error: not enough buffer room for section flag info"
+msgstr ""
+
+#: readelf.c:6854
+#, c-format
+msgid "UNKNOWN (%*.*lx)"
+msgstr ""
+
+#: readelf.c:6873 readelf.c:6888
+msgid "Compressed section is too small even for a compression header\n"
+msgstr ""
+
+#: readelf.c:6910
+msgid "possibly corrupt ELF file header - it has a non-zero section header offset, but no section headers\n"
+msgstr ""
+
+#: readelf.c:6915
#, c-format
msgid ""
"\n"
"There are no sections in this file.\n"
msgstr ""
"\n"
-"Nu existã nici o secþiune în acest fiºier.\n"
+"Nu există nici o secțiune în acest fișier.\n"
-#: readelf.c:3703
+#: readelf.c:6923 readelf.c:21262
+#, fuzzy, c-format
+msgid "In linked file '%s': "
+msgstr "Am încercat fișier: %s"
+
+#: readelf.c:6925
#, c-format
-msgid "There are %d section headers, starting at offset 0x%lx:\n"
-msgstr ""
+msgid "There is %d section header, starting at offset 0x%lx:\n"
+msgid_plural "There are %d section headers, starting at offset 0x%lx:\n"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
-#: readelf.c:3720 readelf.c:4079 readelf.c:4290 readelf.c:4591 readelf.c:5011
-#: readelf.c:6618
+#: readelf.c:6947 readelf.c:7624 readelf.c:7826 readelf.c:13434
+#: readelf.c:15933
msgid "string table"
msgstr ""
-#: readelf.c:3765
+#. Note: coded this way so that there is a single string for translation.
+#: readelf.c:7013
+#, c-format
+msgid "Section %d has invalid sh_entsize of %s\n"
+msgstr ""
+
+#: readelf.c:7014
+#, c-format
+msgid "(Using the expected size of %u for the rest of this dump)\n"
+msgstr ""
+
+#: readelf.c:7038
msgid "File contains multiple dynamic symbol tables\n"
msgstr ""
-#: readelf.c:3777
+#: readelf.c:7053
msgid "File contains multiple dynamic string tables\n"
msgstr ""
-#: readelf.c:3782
+#: readelf.c:7059
msgid "dynamic strings"
msgstr ""
-#: readelf.c:3789
-msgid "File contains multiple symtab shndx tables\n"
+#: readelf.c:7087 readelf.c:7093
+#, c-format
+msgid "Section '%s': zero-sized relocation section\n"
msgstr ""
-#: readelf.c:3828
+#: readelf.c:7106
+#, c-format
+msgid "Section '%s': has a size of zero - is this intended ?\n"
+msgstr ""
+
+#: readelf.c:7190
+#, c-format
+msgid ""
+"\n"
+"Section Headers in linked file '%s':\n"
+msgstr ""
+
+#: readelf.c:7192
#, c-format
msgid ""
"\n"
"Section Headers:\n"
msgstr ""
-#: readelf.c:3830
+#: readelf.c:7194
#, c-format
msgid ""
"\n"
"Section Header:\n"
msgstr ""
-#: readelf.c:3834
+#: readelf.c:7200 readelf.c:7211 readelf.c:7222
+#, fuzzy, c-format
+msgid " [Nr] Name\n"
+msgstr " [Index] Nume\n"
+
+#: readelf.c:7201
+#, fuzzy, c-format
+msgid " Type Addr Off Size ES Lk Inf Al\n"
+msgstr " Tip: %s\n"
+
+#: readelf.c:7205
#, c-format
msgid " [Nr] Name Type Addr Off Size ES Flg Lk Inf Al\n"
msgstr ""
-#: readelf.c:3837
+#: readelf.c:7212
+#, fuzzy, c-format
+msgid " Type Address Off Size ES Lk Inf Al\n"
+msgstr " Tip: %s\n"
+
+#: readelf.c:7216
#, c-format
msgid " [Nr] Name Type Address Off Size ES Flg Lk Inf Al\n"
msgstr ""
-#: readelf.c:3840
+#: readelf.c:7223
+#, fuzzy, c-format
+msgid " Type Address Offset Link\n"
+msgstr " Tip: %s\n"
+
+#: readelf.c:7224
+#, fuzzy, c-format
+msgid " Size EntSize Info Align\n"
+msgstr "Idx Nume Dim VMA LMA Fișier off Algn"
+
+#: readelf.c:7228
#, c-format
msgid " [Nr] Name Type Address Offset\n"
msgstr ""
-#: readelf.c:3841
+#: readelf.c:7229
#, c-format
msgid " Size EntSize Flags Link Info Align\n"
msgstr ""
-#: readelf.c:3936
+#: readelf.c:7234
+#, fuzzy, c-format
+msgid " Flags\n"
+msgstr " Atribute"
+
+#: readelf.c:7263
+#, c-format
+msgid "[%2u]: Link field (%u) should index a symtab section.\n"
+msgstr ""
+
+#: readelf.c:7276
+#, c-format
+msgid "[%2u]: Link field (%u) should index a string section.\n"
+msgstr ""
+
+#: readelf.c:7284 readelf.c:7295
+#, c-format
+msgid "[%2u]: Unexpected value (%u) in link field.\n"
+msgstr ""
+
+#: readelf.c:7322
+#, c-format
+msgid "[%2u]: Info field (%u) should index a relocatable section.\n"
+msgstr ""
+
+#: readelf.c:7333 readelf.c:7360
+#, c-format
+msgid "[%2u]: Unexpected value (%u) in info field.\n"
+msgstr ""
+
+#: readelf.c:7355
+#, c-format
+msgid "[%2u]: Expected link to another section in info field"
+msgstr ""
+
+#: readelf.c:7370
+#, c-format
+msgid "Size of section %u is larger than the entire file!\n"
+msgstr ""
+
+#: readelf.c:7439
+#, c-format
+msgid "section %u: sh_link value of %u is larger than the number of sections\n"
+msgstr ""
+
+#: readelf.c:7540
+#, fuzzy
+msgid "compression header"
+msgstr "antete secțiune"
+
+#: readelf.c:7545
+#, c-format
+msgid " [<corrupt>]\n"
+msgstr ""
+
+#: readelf.c:7551
+#, fuzzy, c-format
+msgid " [<unknown>: 0x%x], "
+msgstr "[<necunoscut>: 0x%x]"
+
+#. The ordering of the letters shown here matches the ordering of the
+#. corresponding SHF_xxx values, and hence the order in which these
+#. letters will be displayed to the user.
+#: readelf.c:7566
#, c-format
msgid ""
"Key to Flags:\n"
-" W (write), A (alloc), X (execute), M (merge), S (strings)\n"
-" I (info), L (link order), G (group), x (unknown)\n"
-" O (extra OS processing required) o (OS specific), p (processor specific)\n"
+" W (write), A (alloc), X (execute), M (merge), S (strings), I (info),\n"
+" L (link order), O (extra OS processing required), G (group), T (TLS),\n"
+" C (compressed), x (unknown), o (OS specific), E (exclude),\n"
+" "
msgstr ""
-#: readelf.c:3954
+#: readelf.c:7574
#, c-format
-msgid "[<unknown>: 0x%x]"
-msgstr "[<necunoscut>: 0x%x]"
+msgid "R (retain), "
+msgstr ""
-#: readelf.c:3984
-msgid "Section headers are not available!\n"
+#: readelf.c:7577
+#, c-format
+msgid "D (mbind), "
+msgstr ""
+
+#: readelf.c:7585
+#, c-format
+msgid "l (large), "
msgstr ""
-#: readelf.c:4008
+#: readelf.c:7587
+#, c-format
+msgid "y (purecode), "
+msgstr ""
+
+#: readelf.c:7589
+#, c-format
+msgid "v (VLE), "
+msgstr ""
+
+#: readelf.c:7614
+msgid "Bad sh_link in symbol table section\n"
+msgstr ""
+
+#: readelf.c:7649
+msgid "<OS specific>"
+msgstr ""
+
+#: readelf.c:7650
+msgid "<PROC specific>"
+msgstr ""
+
+#: readelf.c:7679
+#, fuzzy, c-format
+msgid ""
+"\n"
+"There are no sections group in linked file '%s'.\n"
+msgstr ""
+"\n"
+"Nu există nici o secțiune în acest fișier.\n"
+
+#: readelf.c:7682 readelf.c:7721
#, c-format
msgid ""
"\n"
"There are no section groups in this file.\n"
msgstr ""
-#: readelf.c:4042
+#: readelf.c:7689
+msgid "Section headers are not available!\n"
+msgstr ""
+
+#: readelf.c:7700
+#, c-format
+msgid "Out of memory reading %u section group headers\n"
+msgstr ""
+
+#: readelf.c:7718
+#, fuzzy, c-format
+msgid ""
+"\n"
+"There are no section groups in linked file '%s'.\n"
+msgstr ""
+"\n"
+"Nu există nici o secțiune în acest fișier.\n"
+
+#: readelf.c:7732
+#, c-format
+msgid "Out of memory reading %lu groups\n"
+msgstr ""
+
+#: readelf.c:7745
+#, c-format
+msgid "Section groups in linked file '%s'\n"
+msgstr ""
+
+#: readelf.c:7766
#, c-format
msgid "Bad sh_link in group section `%s'\n"
msgstr ""
-#: readelf.c:4061
+#: readelf.c:7779
+#, c-format
+msgid "Corrupt header in group section `%s'\n"
+msgstr ""
+
+#: readelf.c:7785 readelf.c:7796
#, c-format
msgid "Bad sh_info in group section `%s'\n"
msgstr ""
-#: readelf.c:4085 readelf.c:6947
+#: readelf.c:7836
+#, c-format
+msgid "Section %s has sh_entsize (0x%lx) which is larger than its size (0x%lx)\n"
+msgstr ""
+
+#: readelf.c:7845
msgid "section data"
-msgstr "date secþiune"
+msgstr "date secțiune"
+
+#: readelf.c:7856
+#, c-format
+msgid ""
+"\n"
+"%sgroup section [%5u] `%s' [%s] contains %u sections:\n"
+msgstr ""
-#: readelf.c:4097
+#: readelf.c:7859
#, c-format
msgid " [Index] Name\n"
msgstr " [Index] Nume\n"
-#: readelf.c:4114
+#: readelf.c:7877
#, c-format
-msgid "section [%5u] already in group section [%5u]\n"
+msgid "section [%5u] in group section [%5u] > maximum section [%5u]\n"
msgstr ""
-#: readelf.c:4127
+#: readelf.c:7880
+msgid "Further error messages about overlarge group section indices suppressed\n"
+msgstr ""
+
+#: readelf.c:7893
+#, c-format
+msgid "section [%5u] in group section [%5u] already in group section [%5u]\n"
+msgstr ""
+
+#: readelf.c:7897
+msgid "Further error messages about already contained group sections suppressed\n"
+msgstr ""
+
+#: readelf.c:7909
#, c-format
msgid "section 0 in group section [%5u]\n"
msgstr ""
-#: readelf.c:4224
+#: readelf.c:7976
+#, fuzzy
+msgid "dynamic section image fixups"
+msgstr "secțiune dinamică"
+
+#: readelf.c:7984
+#, c-format
+msgid "corrupt library name index of 0x%lx found in dynamic entry"
+msgstr ""
+
+#: readelf.c:7989
+#, c-format
+msgid ""
+"\n"
+"Image fixups for needed library #%d: %s - ident: %lx\n"
+msgstr ""
+
+#: readelf.c:7992
+#, fuzzy, c-format
+msgid "Seg Offset Type SymVec DataType\n"
+msgstr " Tip: %s\n"
+
+#: readelf.c:8026
+#, fuzzy
+msgid "dynamic section image relocations"
+msgstr "secțiune dinamică"
+
+#: readelf.c:8030
+#, c-format
+msgid ""
+"\n"
+"Image relocs\n"
+msgstr ""
+
+#: readelf.c:8032
+#, fuzzy, c-format
+msgid "Seg Offset Type Addend Seg Sym Off\n"
+msgstr "Idx Nume Dim VMA LMA Fișier off Algn"
+
+#: readelf.c:8089
+#, fuzzy
+msgid "dynamic string section"
+msgstr "secțiune dinamică"
+
+#: readelf.c:8193
+#, c-format
+msgid ""
+"\n"
+"In linked file '%s' section '%s' at offset 0x%lx contains %ld bytes:\n"
+msgstr ""
+
+#: readelf.c:8197
#, c-format
msgid ""
"\n"
"'%s' relocation section at offset 0x%lx contains %ld bytes:\n"
msgstr ""
-#: readelf.c:4236
+#: readelf.c:8218
+#, fuzzy, c-format
+msgid ""
+"\n"
+"There are no dynamic relocations in linked file '%s'.\n"
+msgstr ""
+"\n"
+"Nu există nici o secțiune în acest fișier.\n"
+
+#: readelf.c:8221
#, c-format
msgid ""
"\n"
"There are no dynamic relocations in this file.\n"
msgstr ""
-#: readelf.c:4260
+#: readelf.c:8248
+#, c-format
+msgid ""
+"\n"
+"In linked file '%s' relocation section "
+msgstr ""
+
+#: readelf.c:8251
#, c-format
msgid ""
"\n"
"Relocation section "
msgstr ""
-#: readelf.c:4265 readelf.c:4666 readelf.c:4680 readelf.c:5025
+#: readelf.c:8259
#, c-format
-msgid "'%s'"
+msgid " at offset 0x%lx contains %lu entry:\n"
+msgid_plural " at offset 0x%lx contains %lu entries:\n"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: readelf.c:8308
+#, fuzzy, c-format
+msgid ""
+"\n"
+"There are no static relocations in linked file '%s'."
msgstr ""
+"\n"
+"Nu există nici o secțiune în acest fișier.\n"
-#: readelf.c:4267 readelf.c:4682 readelf.c:5027
+#: readelf.c:8311
+#, fuzzy, c-format
+msgid ""
+"\n"
+"There are no static relocations in this file."
+msgstr ""
+"\n"
+"Nu există nici o secțiune în acest fișier.\n"
+
+#: readelf.c:8312
#, c-format
-msgid " at offset 0x%lx contains %lu entries:\n"
+msgid ""
+"\n"
+"To see the dynamic relocations add --use-dynamic to the command line.\n"
msgstr ""
-#: readelf.c:4308
+#: readelf.c:8320
+#, fuzzy, c-format
+msgid ""
+"\n"
+"There are no relocations in linked file '%s'.\n"
+msgstr ""
+"\n"
+"Nu există nici o secțiune în acest fișier.\n"
+
+#: readelf.c:8323
#, c-format
msgid ""
"\n"
"There are no relocations in this file.\n"
msgstr ""
-#: readelf.c:4482 readelf.c:4862
+#: readelf.c:8491
+#, c-format
+msgid "Invalid section %u in table entry %ld\n"
+msgstr ""
+
+#: readelf.c:8503
+#, c-format
+msgid "Invalid offset %lx in table entry %ld\n"
+msgstr ""
+
+#: readelf.c:8521
+#, fuzzy, c-format
+msgid "\tUnknown version.\n"
+msgstr "secțiune necunoscută"
+
+#: readelf.c:8584 readelf.c:9021
msgid "unwind table"
-msgstr "deruleazã tabel"
+msgstr "derulează tabel"
+
+#: readelf.c:8635 readelf.c:9104
+#, c-format
+msgid "Skipping unknown relocation type: %u\n"
+msgstr ""
+
+#: readelf.c:8641 readelf.c:9111
+#, fuzzy, c-format
+msgid "Skipping unexpected relocation type: %s\n"
+msgstr "tip înregistrare (record) neașteptat"
+
+#: readelf.c:8650 readelf.c:9118
+#, c-format
+msgid "Skipping reloc with overlarge offset: %lx\n"
+msgstr ""
-#: readelf.c:4540 readelf.c:4959
+#: readelf.c:8657 readelf.c:9125
#, c-format
-msgid "Skipping unexpected relocation type %s\n"
+msgid "Skipping reloc with invalid symbol index: %u\n"
msgstr ""
-#: readelf.c:4598 readelf.c:5018 readelf.c:5069
+#: readelf.c:8705 readelf.c:9172 readelf.c:10282
+msgid "Multiple symbol tables encountered\n"
+msgstr ""
+
+#: readelf.c:8720 readelf.c:9188 readelf.c:10297
#, c-format
msgid ""
"\n"
"There are no unwind sections in this file.\n"
msgstr ""
-#: readelf.c:4661
+#: readelf.c:8806
#, c-format
msgid ""
"\n"
"Could not find unwind info section for "
msgstr ""
-#: readelf.c:4673
+#: readelf.c:8818
msgid "unwind info"
msgstr ""
-#: readelf.c:4675 readelf.c:5024
+#: readelf.c:8821
#, c-format
msgid ""
"\n"
"Unwind section "
msgstr ""
-#: readelf.c:5228 readelf.c:5272
+#: readelf.c:8828
+#, c-format
+msgid " at offset 0x%lx contains %lu entries:\n"
+msgstr ""
+
+#: readelf.c:9197 readelf.c:10304
+#, c-format
+msgid ""
+"\n"
+"Unwind section '%s' at offset 0x%lx contains %lu entry:\n"
+msgid_plural ""
+"\n"
+"Unwind section '%s' at offset 0x%lx contains %lu entries:\n"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: readelf.c:9330
+#, fuzzy
+msgid "unwind data"
+msgstr "derulează tabel"
+
+#: readelf.c:9403
+#, c-format
+msgid "Skipping unexpected relocation at offset 0x%lx\n"
+msgstr ""
+
+#: readelf.c:9425
+#, c-format
+msgid "Unknown section relocation type %d encountered\n"
+msgstr ""
+
+#: readelf.c:9433
+#, c-format
+msgid "Bad symbol index in unwind relocation (%lu > %lu)\n"
+msgstr ""
+
+#: readelf.c:9448
+#, c-format
+msgid "Skipping unknown ARM relocation type: %d\n"
+msgstr ""
+
+#: readelf.c:9458
+#, fuzzy, c-format
+msgid "Skipping unexpected ARM relocation type %s\n"
+msgstr "tip înregistrare (record) neașteptat"
+
+#: readelf.c:9467
+#, c-format
+msgid "Skipping unknown C6000 relocation type: %d\n"
+msgstr ""
+
+#: readelf.c:9477
+#, c-format
+msgid "Skipping unexpected C6000 relocation type %s\n"
+msgstr ""
+
+#. This function currently only supports ARM and TI unwinders.
+#: readelf.c:9486
+msgid "Only TI and ARM unwinders are currently supported\n"
+msgstr ""
+
+#: readelf.c:9549
+#, c-format
+msgid "[Truncated opcode]\n"
+msgstr ""
+
+#: readelf.c:9597 readelf.c:9815
+#, c-format
+msgid "Refuse to unwind"
+msgstr ""
+
+#: readelf.c:9620
+#, c-format
+msgid " [Reserved]"
+msgstr ""
+
+#: readelf.c:9648
+#, c-format
+msgid " finish"
+msgstr ""
+
+#: readelf.c:9653 readelf.c:9748
+#, c-format
+msgid "[Spare]"
+msgstr ""
+
+#: readelf.c:9687
+msgid "corrupt change to vsp\n"
+msgstr ""
+
+#: readelf.c:9713
+#, c-format
+msgid " pop {ra_auth_code}"
+msgstr ""
+
+#: readelf.c:9770 readelf.c:9927
+#, c-format
+msgid " [unsupported opcode]"
+msgstr ""
+
+#: readelf.c:9863
+#, c-format
+msgid "pop frame {"
+msgstr ""
+
+#: readelf.c:9866
+#, c-format
+msgid "*corrupt* - no registers specified"
+msgstr ""
+
+#: readelf.c:9880
+msgid "[pad]"
+msgstr ""
+
+#: readelf.c:9909
+msgid "Corrupt stack pointer adjustment detected\n"
+msgstr ""
+
+#: readelf.c:9916
+#, c-format
+msgid "sp = sp + %ld"
+msgstr ""
+
+#: readelf.c:9991
+#, c-format
+msgid " Personality routine: "
+msgstr ""
+
+#: readelf.c:10023
+#, c-format
+msgid " [Truncated data]\n"
+msgstr ""
+
+#: readelf.c:10047
+#, c-format
+msgid "Corrupt ARM compact model table entry: %x \n"
+msgstr ""
+
+#: readelf.c:10052
+#, fuzzy, c-format
+msgid " Compact model index: %d\n"
+msgstr "Nume index: %ld\n"
+
+#: readelf.c:10078
+msgid "Unknown ARM compact model index encountered\n"
+msgstr ""
+
+#: readelf.c:10079
+#, c-format
+msgid " [reserved]\n"
+msgstr ""
+
+#: readelf.c:10094
+#, c-format
+msgid " Restore stack from frame pointer\n"
+msgstr ""
+
+#: readelf.c:10096
+#, c-format
+msgid " Stack increment %d\n"
+msgstr ""
+
+#: readelf.c:10097
+#, c-format
+msgid " Registers restored: "
+msgstr ""
+
+#: readelf.c:10102
+#, c-format
+msgid " Return register: %s\n"
+msgstr ""
+
+#: readelf.c:10106
+#, c-format
+msgid " [reserved (%d)]\n"
+msgstr ""
+
+#: readelf.c:10110
+#, c-format
+msgid "Unsupported architecture type %d encountered when decoding unwind table\n"
+msgstr ""
+
+#: readelf.c:10165
+#, c-format
+msgid "corrupt index table entry: %x\n"
+msgstr ""
+
+#: readelf.c:10205
+#, c-format
+msgid "Unwind entry contains corrupt offset (0x%lx) into section %s\n"
+msgstr ""
+
+#: readelf.c:10221
+#, c-format
+msgid "Could not locate .ARM.extab section containing 0x%lx.\n"
+msgstr ""
+
+#: readelf.c:10265
+#, c-format
+msgid "Unsupported architecture type %d encountered when processing unwind table\n"
+msgstr ""
+
+#: readelf.c:10327
+#, c-format
+msgid "No processor specific unwind information to decode\n"
+msgstr ""
+
+#: readelf.c:10357
+#, c-format
+msgid ""
+"\n"
+"The decoding of unwind sections for machine type %s is not currently supported.\n"
+msgstr ""
+
+#: readelf.c:10384
+#, c-format
+msgid "NONE"
+msgstr ""
+
+#: readelf.c:10409
+#, c-format
+msgid "Interface Version: %s"
+msgstr ""
+
+#. Note: coded this way so that there is a single string for translation.
+#: readelf.c:10416
+#, c-format
+msgid "<corrupt: %s>"
+msgstr ""
+
+#: readelf.c:10434
+#, c-format
+msgid "Time Stamp: %s"
+msgstr ""
+
+#: readelf.c:10628 readelf.c:10678
msgid "dynamic section"
-msgstr "secþiune dinamicã"
+msgstr "secțiune dinamică"
+
+#: readelf.c:10648 readelf.c:10699
+#, c-format
+msgid "Out of memory allocating space for %lu dynamic entries\n"
+msgstr ""
+
+#: readelf.c:10773
+#, c-format
+msgid "Size truncation prevents reading %s elements of size %u\n"
+msgstr ""
+
+#: readelf.c:10782
+#, c-format
+msgid "Invalid number of dynamic entries: %s\n"
+msgstr ""
+
+#: readelf.c:10790
+#, c-format
+msgid "Out of memory reading %s dynamic entries\n"
+msgstr ""
+
+#: readelf.c:10797
+#, fuzzy, c-format
+msgid "Unable to read in %s bytes of dynamic data\n"
+msgstr "Nu pot citi în cei 0x%x octeți ai lui %s\n"
+
+#: readelf.c:10806
+#, c-format
+msgid "Out of memory allocating space for %s dynamic entries\n"
+msgstr ""
+
+#: readelf.c:10846 readelf.c:10900 readelf.c:10924 readelf.c:10957
+#: readelf.c:10983 readelf.c:11002
+msgid "Unable to seek to start of dynamic information\n"
+msgstr ""
+
+#: readelf.c:10852 readelf.c:10906
+msgid "Failed to read in number of buckets\n"
+msgstr ""
+
+#: readelf.c:10858
+msgid "Failed to read in number of chains\n"
+msgstr ""
+
+#: readelf.c:10965
+msgid "Failed to determine last chain length\n"
+msgstr ""
-#: readelf.c:5349
+#: readelf.c:11065
+#, fuzzy, c-format
+msgid ""
+"\n"
+"There is no dynamic section in linked file '%s'.\n"
+msgstr ""
+"\n"
+"Nu există nici o secțiune în acest fișier.\n"
+
+#: readelf.c:11068
#, c-format
msgid ""
"\n"
"There is no dynamic section in this file.\n"
msgstr ""
-#: readelf.c:5387
-msgid "Unable to seek to end of file!"
+#. See PR 21379 for a reproducer.
+#: readelf.c:11128
+msgid "Invalid PT_LOAD entry\n"
msgstr ""
-#: readelf.c:5400
-msgid "Unable to determine the number of symbols to load\n"
+#: readelf.c:11154
+msgid "the .dynsym section doesn't match the DT_SYMTAB and DT_SYMENT tags\n"
msgstr ""
-#: readelf.c:5435
-msgid "Unable to seek to end of file\n"
+#: readelf.c:11164
+msgid "Corrupt DT_SYMTAB dynamic entry\n"
msgstr ""
-#: readelf.c:5442
-msgid "Unable to determine the length of the dynamic string table\n"
+#: readelf.c:11200
+msgid "the .dynstr section doesn't match the DT_STRTAB and DT_STRSZ tags\n"
msgstr ""
-#: readelf.c:5447
+#: readelf.c:11205
msgid "dynamic string table"
msgstr ""
-#: readelf.c:5482
+#: readelf.c:11208
+msgid "Corrupt DT_STRTAB dynamic entry\n"
+msgstr ""
+
+#: readelf.c:11233
+#, c-format
+msgid "Bad value (%d) for SYMINENT entry\n"
+msgstr ""
+
+#: readelf.c:11252
msgid "symbol information"
msgstr ""
-#: readelf.c:5507
+#: readelf.c:11258
+msgid "Multiple dynamic symbol information sections found\n"
+msgstr ""
+
+#: readelf.c:11264
+#, c-format
+msgid "Out of memory allocating %lu bytes for dynamic symbol info\n"
+msgstr ""
+
+#: readelf.c:11288
#, c-format
msgid ""
"\n"
-"Dynamic section at offset 0x%lx contains %u entries:\n"
-msgstr ""
+"In linked file '%s' the dynamic section at offset 0x%lx contains %lu entry:\n"
+msgid_plural ""
+"\n"
+"In linked file '%s' the dynamic section at offset 0x%lx contains %lu entries:\n"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
-#: readelf.c:5510
+#: readelf.c:11295
+#, c-format
+msgid ""
+"\n"
+"Dynamic section at offset 0x%lx contains %lu entry:\n"
+msgid_plural ""
+"\n"
+"Dynamic section at offset 0x%lx contains %lu entries:\n"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: readelf.c:11302
#, c-format
msgid " Tag Type Name/Value\n"
msgstr ""
-#: readelf.c:5546
+#: readelf.c:11336
#, c-format
msgid "Auxiliary library"
msgstr ""
-#: readelf.c:5550
+#: readelf.c:11340
#, c-format
msgid "Filter library"
msgstr ""
-#: readelf.c:5554
+#: readelf.c:11344
#, c-format
msgid "Configuration file"
-msgstr "Fiºier de configurare"
+msgstr "Fișier de configurare"
-#: readelf.c:5558
+#: readelf.c:11348
#, c-format
msgid "Dependency audit library"
msgstr ""
-#: readelf.c:5562
+#: readelf.c:11352
#, c-format
msgid "Audit library"
msgstr ""
-#: readelf.c:5580 readelf.c:5608 readelf.c:5636
+#: readelf.c:11371 readelf.c:11399 readelf.c:11427 readelf.c:11767
#, c-format
msgid "Flags:"
msgstr "Atribute:"
-#: readelf.c:5583 readelf.c:5611 readelf.c:5638
+#: readelf.c:11374 readelf.c:11402 readelf.c:11429 readelf.c:11769
#, c-format
msgid " None\n"
msgstr "Nimic\n"
-#: readelf.c:5759
+#: readelf.c:11636
#, c-format
msgid "Shared library: [%s]"
-msgstr "Bibliotecã partajatã: [%s]"
+msgstr "Bibliotecă partajată: [%s]"
-#: readelf.c:5762
+#: readelf.c:11640
#, c-format
msgid " program interpreter"
msgstr " interpretor de programe"
-#: readelf.c:5766
+#: readelf.c:11644
#, c-format
msgid "Library soname: [%s]"
msgstr ""
-#: readelf.c:5770
+#: readelf.c:11648
#, c-format
msgid "Library rpath: [%s]"
msgstr ""
-#: readelf.c:5774
+#: readelf.c:11652
#, c-format
msgid "Library runpath: [%s]"
-msgstr "Cale de rulare bibliotecã: [%s]"
+msgstr "Cale de rulare bibliotecă: [%s]"
-#: readelf.c:5837
+#: readelf.c:11689
+#, fuzzy, c-format
+msgid " (bytes)\n"
+msgstr " (octeți în fișier)\n"
+
+#: readelf.c:11720
#, c-format
msgid "Not needed object: [%s]\n"
msgstr ""
-#: readelf.c:5951
+#: readelf.c:11745
+#, c-format
+msgid "<corrupt time val: %lx"
+msgstr ""
+
+#: readelf.c:11888
#, c-format
msgid ""
"\n"
-"Version definition section '%s' contains %ld entries:\n"
-msgstr ""
+"In linked file '%s' the version definition section '%s' contains %u entry:\n"
+msgid_plural ""
+"\n"
+"In linked file '%s' the version definition section '%s' contains %u entries:\n"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
-#: readelf.c:5954
+#: readelf.c:11895
#, c-format
-msgid " Addr: 0x"
-msgstr ""
+msgid ""
+"\n"
+"Version definition section '%s' contains %u entry:\n"
+msgid_plural ""
+"\n"
+"Version definition section '%s' contains %u entries:\n"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: readelf.c:11903 readelf.c:12050 readelf.c:12216
+#, c-format
+msgid " Addr: 0x"
+msgstr " Addr: 0x"
-#: readelf.c:5956 readelf.c:6148
+#: readelf.c:11905 readelf.c:12052 readelf.c:12218
#, c-format
-msgid " Offset: %#08lx Link: %lx (%s)\n"
+msgid " Offset: %#08lx Link: %u (%s)\n"
msgstr ""
-#: readelf.c:5961
+#: readelf.c:11911
msgid "version definition section"
msgstr ""
-#: readelf.c:5987
-#, c-format
-msgid " %#06x: Rev: %d Flags: %s"
+#: readelf.c:11940
+#, fuzzy, c-format
+msgid " %#06lx: Rev: %d Flags: %s"
msgstr " %#06x: Rev: %d Atribute: %s"
-#: readelf.c:5990
+#: readelf.c:11943
#, c-format
msgid " Index: %d Cnt: %d "
msgstr ""
-#: readelf.c:6001
+#: readelf.c:11960
#, c-format
msgid "Name: %s\n"
msgstr "Nume: %s\n"
-#: readelf.c:6003
+#: readelf.c:11963
#, c-format
msgid "Name index: %ld\n"
msgstr "Nume index: %ld\n"
-#: readelf.c:6018
-#, c-format
-msgid " %#06x: Parent %d: %s\n"
-msgstr " %#06x: Pãrinte %d: %s\n"
-
-#: readelf.c:6021
+#: readelf.c:11972
#, c-format
-msgid " %#06x: Parent %d, name index: %ld\n"
+msgid "Invalid vda_next field of %lx\n"
msgstr ""
-#: readelf.c:6040
+#: readelf.c:11992
+#, fuzzy, c-format
+msgid " %#06lx: Parent %d: %s\n"
+msgstr " %#06x: Părinte %d: %s\n"
+
+#: readelf.c:11996
+#, fuzzy, c-format
+msgid " %#06lx: Parent %d, name index: %ld\n"
+msgstr " %#06x: Nume index: %lx"
+
+#: readelf.c:12001
#, c-format
-msgid ""
-"\n"
-"Version needs section '%s' contains %ld entries:\n"
+msgid " Version def aux past end of section\n"
msgstr ""
-#: readelf.c:6043
+#: readelf.c:12008
#, c-format
-msgid " Addr: 0x"
-msgstr " Addr: 0x"
+msgid "Invalid vd_next field of %lx\n"
+msgstr ""
-#: readelf.c:6045
+#: readelf.c:12019
#, c-format
-msgid " Offset: %#08lx Link to section: %ld (%s)\n"
+msgid " Version definition past end of section\n"
msgstr ""
-#: readelf.c:6050
-msgid "version need section"
-msgstr ""
+#: readelf.c:12035
+#, c-format
+msgid ""
+"\n"
+"In linked file '%s' the version needs section '%s' contains %u entry:\n"
+msgid_plural ""
+"\n"
+"In linked file '%s' the version needs section '%s' contains %u entries:\n"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
-#: readelf.c:6072
+#: readelf.c:12042
#, c-format
-msgid " %#06x: Version: %d"
-msgstr ""
+msgid ""
+"\n"
+"Version needs section '%s' contains %u entry:\n"
+msgid_plural ""
+"\n"
+"Version needs section '%s' contains %u entries:\n"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: readelf.c:12059
+#, fuzzy
+msgid "Version Needs section"
+msgstr "secțiune partajată"
+
+#: readelf.c:12084
+#, fuzzy, c-format
+msgid " %#06lx: Version: %d"
+msgstr " Atribute: %s Versiune: %d\n"
-#: readelf.c:6075
+#: readelf.c:12087
#, c-format
msgid " File: %s"
-msgstr " Fiºier: %s"
+msgstr " Fișier: %s"
-#: readelf.c:6077
+#: readelf.c:12090
#, c-format
msgid " File: %lx"
-msgstr " Fiºier: %lx"
+msgstr " Fișier: %lx"
-#: readelf.c:6079
+#: readelf.c:12092
#, c-format
msgid " Cnt: %d\n"
msgstr " Cnt: %d\n"
-#: readelf.c:6097
-#, c-format
-msgid " %#06x: Name: %s"
+#: readelf.c:12115
+#, fuzzy, c-format
+msgid " %#06lx: Name: %s"
msgstr " %#06x: Nume: %s"
-#: readelf.c:6100
-#, c-format
-msgid " %#06x: Name index: %lx"
+#: readelf.c:12118
+#, fuzzy, c-format
+msgid " %#06lx: Name index: %lx"
msgstr " %#06x: Nume index: %lx"
-#: readelf.c:6103
+#: readelf.c:12121
#, c-format
msgid " Flags: %s Version: %d\n"
msgstr " Atribute: %s Versiune: %d\n"
-#: readelf.c:6139
+#: readelf.c:12127
+#, c-format
+msgid "Invalid vna_next field of %lx\n"
+msgstr ""
+
+#: readelf.c:12140
+msgid "Missing Version Needs auxiliary information\n"
+msgstr ""
+
+#: readelf.c:12145
+#, c-format
+msgid "Invalid vn_next field of %lx\n"
+msgstr ""
+
+#: readelf.c:12155
+msgid "Missing Version Needs information\n"
+msgstr ""
+
+#: readelf.c:12193
msgid "version string table"
msgstr ""
-#: readelf.c:6143
+#: readelf.c:12201
#, c-format
msgid ""
"\n"
-"Version symbols section '%s' contains %d entries:\n"
-msgstr ""
+"In linked file '%s' the version symbols section '%s' contains %lu entry:\n"
+msgid_plural ""
+"\n"
+"In linked file '%s' the version symbols section '%s' contains %lu entries:\n"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
-#: readelf.c:6146
+#: readelf.c:12208
#, c-format
-msgid " Addr: "
-msgstr " Addr: "
+msgid ""
+"\n"
+"Version symbols section '%s' contains %lu entry:\n"
+msgid_plural ""
+"\n"
+"Version symbols section '%s' contains %lu entries:\n"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
-#: readelf.c:6156
+#: readelf.c:12227
msgid "version symbol data"
msgstr ""
-#: readelf.c:6183
+#: readelf.c:12247
+#, fuzzy
+msgid "*invalid*"
+msgstr "număr invalid"
+
+#: readelf.c:12255
msgid " 0 (*local*) "
msgstr ""
-#: readelf.c:6187
+#: readelf.c:12259
msgid " 1 (*global*) "
msgstr ""
-#: readelf.c:6223 readelf.c:6677
+#: readelf.c:12270
+msgid "invalid index into symbol array\n"
+msgstr ""
+
+#: readelf.c:12293 readelf.c:12890
msgid "version need"
msgstr ""
-#: readelf.c:6233
+#: readelf.c:12304
msgid "version need aux (2)"
msgstr ""
-#: readelf.c:6275 readelf.c:6740
+#: readelf.c:12351 readelf.c:12834
msgid "version def"
msgstr ""
-#: readelf.c:6294 readelf.c:6755
+#: readelf.c:12379 readelf.c:12865
msgid "version def aux"
msgstr ""
-#: readelf.c:6325
+#: readelf.c:12387
+msgid "*both*"
+msgstr ""
+
+#: readelf.c:12419
+#, c-format
+msgid ""
+"\n"
+"No version information found in linked file '%s'.\n"
+msgstr ""
+
+#: readelf.c:12422
#, c-format
msgid ""
"\n"
"No version information found in this file.\n"
msgstr ""
-#: readelf.c:6456
-msgid "Unable to read in dynamic data\n"
+#: readelf.c:12518
+#, fuzzy, c-format
+msgid "Unrecognized visibility value: %u\n"
+msgstr "Secțiune depanare nerecunoscută: %s\n"
+
+#: readelf.c:12531
+#, fuzzy, c-format
+msgid "Unrecognized alpha specific other value: %u\n"
+msgstr "Secțiune depanare nerecunoscută: %s\n"
+
+#: readelf.c:12608
+#, fuzzy, c-format
+msgid "Unrecognized IA64 VMS ST Function type: %d\n"
+msgstr "Secțiune depanare nerecunoscută: %s\n"
+
+#: readelf.c:12632
+#, fuzzy, c-format
+msgid "Unrecognized IA64 VMS ST Linkage: %d\n"
+msgstr "Formă nerecunoscută: %d\n"
+
+#: readelf.c:12658
+#, c-format
+msgid "<localentry>: %d"
msgstr ""
-#: readelf.c:6509
-msgid "Unable to seek to start of dynamic information"
+#: readelf.c:12672
+msgid " VARIANT_CC"
msgstr ""
-#: readelf.c:6515
-msgid "Failed to read in number of buckets\n"
+#: readelf.c:12723
+#, c-format
+msgid "<other>: %x"
msgstr ""
-#: readelf.c:6521
-msgid "Failed to read in number of chains\n"
+#: readelf.c:12763
+#, fuzzy, c-format
+msgid "bad section index[%3d]"
+msgstr "dimensiuni secțiune stub"
+
+#: readelf.c:12796
+msgid "version data"
+msgstr ""
+
+#: readelf.c:12908
+msgid "version need aux (3)"
+msgstr ""
+
+#: readelf.c:13062
+#, c-format
+msgid "local symbol %lu found at index >= %s's sh_info value of %u\n"
+msgstr ""
+
+#: readelf.c:13081
+#, c-format
+msgid "Unknown LTO symbol definition encountered: %u\n"
msgstr ""
-#: readelf.c:6541
+#: readelf.c:13100
+#, c-format
+msgid "Unknown LTO symbol visibility encountered: %u\n"
+msgstr ""
+
+#: readelf.c:13118
+#, c-format
+msgid "Unknown LTO symbol type encountered: %u\n"
+msgstr ""
+
+#: readelf.c:13134
#, c-format
msgid ""
"\n"
-"Symbol table for image:\n"
+"The LTO Symbol table section '%s' in linked file '%s' is empty!\n"
msgstr ""
-#: readelf.c:6543
+#: readelf.c:13138
#, c-format
-msgid " Num Buc: Value Size Type Bind Vis Ndx Name\n"
+msgid ""
+"\n"
+"LTO Symbol table '%s' is empty!\n"
msgstr ""
-#: readelf.c:6545
+#: readelf.c:13153
+#, fuzzy
+msgid "LTO symbols"
+msgstr "simboluri"
+
+#: readelf.c:13171
#, c-format
-msgid " Num Buc: Value Size Type Bind Vis Ndx Name\n"
+msgid "LTO Symbol extension table '%s' is empty!\n"
msgstr ""
-#: readelf.c:6597
-#, c-format
+#: readelf.c:13177
+msgid "LTO ext symbol data"
+msgstr ""
+
+#: readelf.c:13182
+msgid "Unexpected version number in symbol extension table\n"
+msgstr ""
+
+#: readelf.c:13191
+#, fuzzy, c-format
msgid ""
"\n"
-"Symbol table '%s' contains %lu entries:\n"
+"In linked file '%s': "
+msgstr "Am încercat fișier: %s"
+
+#: readelf.c:13198
+#, c-format
+msgid "LTO Symbol table '%s' and extension table '%s' contain:\n"
msgstr ""
-#: readelf.c:6601
+#: readelf.c:13203
#, c-format
-msgid " Num: Value Size Type Bind Vis Ndx Name\n"
+msgid "LTO Symbol table '%s'\n"
msgstr ""
-#: readelf.c:6603
+#: readelf.c:13205
#, c-format
-msgid " Num: Value Size Type Bind Vis Ndx Name\n"
+msgid " and extension table '%s' contain:\n"
msgstr ""
-#: readelf.c:6649
-msgid "version data"
+#: readelf.c:13210
+#, c-format
+msgid "LTO Symbol table '%s' contains:\n"
msgstr ""
-#: readelf.c:6690
-msgid "version need aux (3)"
+#: readelf.c:13215
+#, c-format
+msgid " Comdat_Key Kind Visibility Size Slot Type Section Name\n"
+msgstr ""
+
+#: readelf.c:13217
+#, c-format
+msgid " Comdat_Key Kind Visibility Size Slot Name\n"
+msgstr ""
+
+#: readelf.c:13264
+msgid "Ran out of LTO symbol extension data\n"
+msgstr ""
+
+#: readelf.c:13284
+msgid "Data remains in the LTO symbol extension table\n"
msgstr ""
-#: readelf.c:6715
-msgid "bad dynamic symbol"
+#: readelf.c:13294
+msgid "Buffer overrun encountered whilst decoding LTO symbol table\n"
msgstr ""
-#: readelf.c:6778
+#: readelf.c:13346
#, c-format
msgid ""
"\n"
-"Dynamic symbol information is not available for displaying symbols.\n"
-msgstr ""
+"In linked file '%s' the dynamic symbol table contains %lu entry:\n"
+msgid_plural ""
+"\n"
+"In linked file '%s' the dynamic symbol table contains %lu entries:\n"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
-#: readelf.c:6790
+#: readelf.c:13354
#, c-format
msgid ""
"\n"
-"Histogram for bucket list length (total of %lu buckets):\n"
-msgstr ""
+"Symbol table for image contains %lu entry:\n"
+msgid_plural ""
+"\n"
+"Symbol table for image contains %lu entries:\n"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
-#: readelf.c:6792
+#: readelf.c:13360 readelf.c:13413
#, c-format
-msgid " Length Number %% of total Coverage\n"
+msgid " Num: Value Size Type Bind Vis Ndx Name\n"
msgstr ""
-#: readelf.c:6797 readelf.c:6813 readelf.c:10967 readelf.c:11159
-msgid "Out of memory"
+#: readelf.c:13362 readelf.c:13415
+#, c-format
+msgid " Num: Value Size Type Bind Vis Ndx Name\n"
msgstr ""
-#: readelf.c:6862
+#: readelf.c:13391
#, c-format
msgid ""
"\n"
-"Dynamic info segment at offset 0x%lx contains %d entries:\n"
+"Symbol table '%s' has a sh_entsize of zero!\n"
msgstr ""
-#: readelf.c:6865
+#: readelf.c:13399
#, c-format
-msgid " Num: Name BoundTo Flags\n"
-msgstr ""
+msgid ""
+"\n"
+"In linked file '%s' symbol section '%s' contains %lu entry:\n"
+msgid_plural ""
+"\n"
+"In linked file '%s' symbol section '%s' contains %lu entries:\n"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
-#: readelf.c:6917
+#: readelf.c:13406
#, c-format
msgid ""
"\n"
-"Assembly dump of section %s\n"
-msgstr ""
+"Symbol table '%s' contains %lu entry:\n"
+msgid_plural ""
+"\n"
+"Symbol table '%s' contains %lu entries:\n"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
-#: readelf.c:6938
+#: readelf.c:13449
#, c-format
msgid ""
"\n"
-"Section '%s' has no data to dump.\n"
+"Dynamic symbol information is not available for displaying symbols.\n"
msgstr ""
-#: readelf.c:6943
+#: readelf.c:13462
#, c-format
msgid ""
"\n"
-"Hex dump of section '%s':\n"
-msgstr ""
+"Histogram for bucket list length (total of %lu bucket):\n"
+msgid_plural ""
+"\n"
+"Histogram for bucket list length (total of %lu buckets):\n"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
-#: readelf.c:7090
-msgid "badly formed extended line op encountered!\n"
+#: readelf.c:13473
+msgid "Out of memory allocating space for histogram buckets\n"
msgstr ""
-#: readelf.c:7097
+#: readelf.c:13479 readelf.c:13557
#, c-format
-msgid " Extended opcode %d: "
+msgid " Length Number %% of total Coverage\n"
+msgstr ""
+
+#: readelf.c:13489
+msgid "histogram chain is corrupt\n"
+msgstr ""
+
+#: readelf.c:13501
+msgid "Out of memory allocating space for histogram counts\n"
msgstr ""
-#: readelf.c:7102
+#: readelf.c:13541
#, c-format
msgid ""
-"End of Sequence\n"
"\n"
+"Histogram for `%s' bucket list length (total of %lu bucket):\n"
+msgid_plural ""
+"\n"
+"Histogram for `%s' bucket list length (total of %lu buckets):\n"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: readelf.c:13553
+msgid "Out of memory allocating space for gnu histogram buckets\n"
msgstr ""
-#: readelf.c:7108
+#: readelf.c:13580
+msgid "Out of memory allocating space for gnu histogram counts\n"
+msgstr ""
+
+#: readelf.c:13646
+#, c-format
+msgid ""
+"\n"
+"In linked file '%s: the dynamic info segment at offset 0x%lx contains %d entry:\n"
+msgid_plural ""
+"\n"
+"In linked file '%s: the dynamic info segment at offset 0x%lx contains %d entries:\n"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: readelf.c:13653
#, c-format
-msgid "set Address to 0x%lx\n"
+msgid ""
+"\n"
+"Dynamic info segment at offset 0x%lx contains %d entry:\n"
+msgid_plural ""
+"\n"
+"Dynamic info segment at offset 0x%lx contains %d entries:\n"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: readelf.c:13661
+#, c-format
+msgid " Num: Name BoundTo Flags\n"
msgstr ""
-#: readelf.c:7113
+#: readelf.c:13668
#, c-format
-msgid " define new File Table entry\n"
+msgid "<corrupt index>"
msgstr ""
-#: readelf.c:7114 readelf.c:9032
+#: readelf.c:13673
#, c-format
-msgid " Entry\tDir\tTime\tSize\tName\n"
+msgid "<corrupt: %19ld>"
msgstr ""
-#: readelf.c:7116
+#: readelf.c:13770
#, c-format
-msgid " %d\t"
+msgid "MSP430 SYM_DIFF reloc contains invalid symbol index %lu\n"
msgstr ""
-#: readelf.c:7119 readelf.c:7121 readelf.c:7123 readelf.c:9044 readelf.c:9046
-#: readelf.c:9048
+#: readelf.c:13817
#, c-format
-msgid "%lu\t"
-msgstr "%lu\t"
+msgid "MSP430 ULEB128 field at 0x%lx contains invalid ULEB128 value\n"
+msgstr ""
-#: readelf.c:7124
+#: readelf.c:13821
#, c-format
-msgid ""
-"%s\n"
-"\n"
+msgid "MSP430 reloc contains invalid symbol index %lu\n"
msgstr ""
-#: readelf.c:7128
+#. PR 21137
+#: readelf.c:13832
#, c-format
-msgid "UNKNOWN: length %d\n"
+msgid "MSP430 sym diff reloc contains invalid offset: 0x%lx\n"
msgstr ""
-#: readelf.c:7155
-msgid "debug_str section data"
+#: readelf.c:13843
+msgid "Unhandled MSP430 reloc type found after SYM_DIFF reloc\n"
msgstr ""
-#: readelf.c:7173
-msgid "<no .debug_str section>"
+#: readelf.c:13866
+#, c-format
+msgid "MN10300_SYM_DIFF reloc contains invalid symbol index %lu\n"
msgstr ""
-#: readelf.c:7176
-msgid "<offset is too big>"
+#: readelf.c:13880
+#, c-format
+msgid "MN10300 reloc contains invalid symbol index %lu\n"
msgstr ""
-#: readelf.c:7201
-msgid "debug_loc section data"
+#: readelf.c:13890
+#, c-format
+msgid "MN10300 sym diff reloc contains invalid offset: 0x%lx\n"
msgstr ""
-#: readelf.c:7235
-msgid "debug_range section data"
-msgstr "date secþiune debug_range"
+#: readelf.c:13900
+msgid "Unhandled MN10300 reloc type found after SYM_DIFF reloc\n"
+msgstr ""
-#: readelf.c:7307
+#: readelf.c:13923
#, c-format
-msgid "%s: skipping unexpected symbol type %s in relocation in section .rela%s\n"
+msgid "RL78_SYM reloc contains invalid symbol index %lu\n"
msgstr ""
-#: readelf.c:7321
+#: readelf.c:13942 readelf.c:13951
#, c-format
-msgid "skipping unexpected symbol type %s in relocation in section .rela.%s\n"
+msgid "RL78 sym diff reloc contains invalid offset: 0x%lx\n"
msgstr ""
-#: readelf.c:7565
+#: readelf.c:14172
#, c-format
-msgid "Unknown TAG value: %lx"
+msgid "Missing knowledge of 32-bit reloc types used in DWARF sections of machine number %d\n"
msgstr ""
-#: readelf.c:7601
+#: readelf.c:14857
#, c-format
-msgid "Unknown FORM value: %lx"
+msgid "unable to apply unsupported reloc type %d to section %s\n"
msgstr ""
-#: readelf.c:7610
+#: readelf.c:14866
#, c-format
-msgid " %lu byte block: "
+msgid "skipping invalid relocation offset 0x%lx in section %s\n"
msgstr ""
-#: readelf.c:7944
+#: readelf.c:14875
#, c-format
-msgid "(User defined location op)"
+msgid "skipping invalid relocation symbol index 0x%lx in section %s\n"
msgstr ""
-#: readelf.c:7946
+#: readelf.c:14898
#, c-format
-msgid "(Unknown location op)"
+msgid "skipping unexpected symbol type %s in section %s relocation %ld\n"
msgstr ""
-#: readelf.c:8015
-msgid "Internal error: DWARF version is not 2 or 3.\n"
+#: readelf.c:14975
+#, c-format
+msgid ""
+"\n"
+"Assembly dump of section %s\n"
msgstr ""
-#: readelf.c:8113
-msgid "DW_FORM_data8 is unsupported when sizeof (unsigned long) != 8\n"
+#: readelf.c:14993
+#, c-format
+msgid "Section '%s' has no data to dump.\n"
msgstr ""
-#: readelf.c:8162
+#: readelf.c:14999
+#, fuzzy
+msgid "section contents"
+msgstr "setează aliniere secțiune"
+
+#: readelf.c:15075
#, c-format
-msgid " (indirect string, offset: 0x%lx): %s"
+msgid ""
+"\n"
+"String dump of section '%s' in linked file %s:\n"
msgstr ""
-#: readelf.c:8171
-#, c-format
-msgid "Unrecognized form: %d\n"
-msgstr "Formã nerecunoscutã: %d\n"
+#: readelf.c:15079
+#, fuzzy, c-format
+msgid ""
+"\n"
+"String dump of section '%s':\n"
+msgstr "Multiple redenumiri ale secțiunii %s"
-#: readelf.c:8256
+#: readelf.c:15100 readelf.c:15316 readelf.c:15703
#, c-format
-msgid "(not inlined)"
+msgid "section '%s' has unsupported compress type: %d\n"
msgstr ""
-#: readelf.c:8259
+#: readelf.c:15132 readelf.c:15350 readelf.c:15740
+#, fuzzy, c-format
+msgid "Unable to decompress section %s\n"
+msgstr "Nu pot deschide fișierul-bază: %s"
+
+#: readelf.c:15157
#, c-format
-msgid "(inlined)"
+msgid " Note: This section has relocations against it, but these have NOT been applied to this dump.\n"
msgstr ""
-#: readelf.c:8262
+#: readelf.c:15250 readelf.c:16726 readelf.c:16766 readelf.c:16804
+#: readelf.c:16851 readelf.c:16882 readelf.c:18488 readelf.c:18520
#, c-format
-msgid "(declared as inline but ignored)"
+msgid "<corrupt>\n"
msgstr ""
-#: readelf.c:8265
+#: readelf.c:15258
#, c-format
-msgid "(declared as inline and inlined)"
+msgid " No strings found in this section."
msgstr ""
-#: readelf.c:8268
-#, c-format
-msgid " (Unknown inline attribute value: %lx)"
+#: readelf.c:15291
+#, fuzzy, c-format
+msgid ""
+"\n"
+"Hex dump of section '%s' in linked file %s:\n"
msgstr ""
+"\n"
+"Nu există nici o secțiune în acest fișier.\n"
-#: readelf.c:8413 readelf.c:9537
+#: readelf.c:15295
#, c-format
-msgid " [without DW_AT_frame_base]"
+msgid ""
+"\n"
+"Hex dump of section '%s':\n"
msgstr ""
-#: readelf.c:8416
+#: readelf.c:15383
#, c-format
-msgid "(location list)"
+msgid " NOTE: This section has relocations against it, but these have NOT been applied to this dump.\n"
msgstr ""
-#: readelf.c:8534
+#: readelf.c:15525
+#, fuzzy, c-format
+msgid "Iteration failed: %s, %s\n"
+msgstr "stat a eșuat pentru fișierul `%s': %s"
+
+#: readelf.c:15569
+#, fuzzy, c-format
+msgid "No symbol section named %s\n"
+msgstr "Nici un membru numit `%s'\n"
+
+#: readelf.c:15585
#, c-format
-msgid "Unknown AT value: %lx"
+msgid "No string table section named %s\n"
msgstr ""
-#: readelf.c:8602
-msgid "No comp units in .debug_info section ?"
+#: readelf.c:15592
+msgid "strings"
msgstr ""
-#: readelf.c:8611
+#: readelf.c:15605 readelf.c:15617
+#, fuzzy, c-format
+msgid "CTF open failure: %s\n"
+msgstr "Nu pot deschide fișierul %s\n"
+
+#: readelf.c:15624
#, c-format
-msgid "Not enough memory for a debug info array of %u entries"
+msgid ""
+"\n"
+"Dump of CTF section '%s' in linked file %s:\n"
msgstr ""
-#: readelf.c:8619 readelf.c:9630
+#: readelf.c:15628
#, c-format
msgid ""
-"The section %s contains:\n"
"\n"
+"Dump of CTF section '%s':\n"
msgstr ""
-#: readelf.c:8693
+#: readelf.c:15636
+#, fuzzy, c-format
+msgid "CTF member open failure: %s\n"
+msgstr "Nu pot deschide fișierul %s\n"
+
+#: readelf.c:15667
+#, fuzzy, c-format
+msgid "%s section data"
+msgstr "date secțiune"
+
+#: readelf.c:15690
#, c-format
-msgid " Compilation Unit @ %lx:\n"
+msgid "compressed section %s is too small to contain a compression header\n"
msgstr ""
-#: readelf.c:8694
+#: readelf.c:15816 readelf.c:15843 readelf.c:15868
#, c-format
-msgid " Length: %ld\n"
+msgid "malformed note encountered in section %s whilst scanning for build-id note\n"
msgstr ""
-#: readelf.c:8695
+#: readelf.c:15993
#, c-format
-msgid " Version: %d\n"
+msgid ""
+"\n"
+"Section '%s' has no debugging data.\n"
msgstr ""
-#: readelf.c:8696
+#. There is no point in dumping the contents of a debugging section
+#. which has the NOBITS type - the bits in the file will be random.
+#. This can happen when a file containing a .eh_frame section is
+#. stripped with the --only-keep-debug command line option.
+#: readelf.c:16002
#, c-format
-msgid " Abbrev Offset: %ld\n"
+msgid "section '%s' has the NOBITS type - its contents are unreliable.\n"
msgstr ""
-#: readelf.c:8697
+#: readelf.c:16052
#, c-format
-msgid " Pointer Size: %d\n"
+msgid "Unrecognized debug section: %s\n"
+msgstr "Secțiune depanare nerecunoscută: %s\n"
+
+#: readelf.c:16082
+#, c-format
+msgid "Section '%s' was not dumped because it does not exist\n"
msgstr ""
-#: readelf.c:8702
-msgid "Only version 2 and 3 DWARF debug information is currently supported.\n"
+#: readelf.c:16155
+#, c-format
+msgid "Section %d was not dumped because it does not exist!\n"
msgstr ""
-#: readelf.c:8717
-msgid "Unable to locate .debug_abbrev section!\n"
+#: readelf.c:16211
+msgid "<corrupt tag>\n"
msgstr ""
-#: readelf.c:8722
-msgid "debug_abbrev section data"
+#: readelf.c:16226
+#, c-format
+msgid "<corrupt string tag>"
msgstr ""
-#: readelf.c:8759
+#: readelf.c:16260
#, c-format
-msgid "Unable to locate entry %lu in the abbreviation table\n"
+msgid "Absent/Non standard\n"
msgstr ""
-#: readelf.c:8765
+#: readelf.c:16263
#, c-format
-msgid " <%d><%lx>: Abbrev Number: %lu (%s)\n"
+msgid "Bare metal/mwdt\n"
msgstr ""
-#: readelf.c:8838
+#: readelf.c:16266
#, c-format
-msgid "%s section needs a populated .debug_info section\n"
+msgid "Bare metal/newlib\n"
msgstr ""
-#: readelf.c:8845
+#: readelf.c:16269
#, c-format
-msgid "%s section has more comp units than .debug_info section\n"
+msgid "Linux/uclibc\n"
msgstr ""
-#: readelf.c:8847
+#: readelf.c:16272
#, c-format
-msgid ""
-"assuming that the pointer size is %d, from the last comp unit in .debug_info\n"
-"\n"
+msgid "Linux/glibc\n"
msgstr ""
-#: readelf.c:8891
-msgid "extracting information from .debug_info section"
+#: readelf.c:16275 readelf.c:16354
+#, c-format
+msgid "Unknown\n"
msgstr ""
-#: readelf.c:8909
+#: readelf.c:16287 readelf.c:16317 readelf.c:16345
#, c-format
-msgid ""
-"\n"
-"Dump of debug contents of section %s:\n"
-"\n"
+msgid "Absent\n"
+msgstr ""
+
+#: readelf.c:16329
+msgid "yes"
+msgstr ""
+
+#: readelf.c:16329
+#, fuzzy
+msgid "no"
+msgstr "nimic"
+
+#: readelf.c:16366 readelf.c:16373
+msgid "default"
msgstr ""
-#: readelf.c:8948
-msgid "The line info appears to be corrupt - the section is too small\n"
+#: readelf.c:16367
+msgid "smallest"
msgstr ""
-#: readelf.c:8957
-msgid "Only DWARF version 2 and 3 line info is currently supported.\n"
+#: readelf.c:16372
+msgid "OPTFP"
msgstr ""
-#: readelf.c:8984
+#: readelf.c:16593 readelf.c:16606 readelf.c:16624 readelf.c:17145
+#: readelf.c:17424 readelf.c:17436 readelf.c:17448
+#, fuzzy, c-format
+msgid "None\n"
+msgstr "Nimic\n"
+
+#: readelf.c:16594
#, c-format
-msgid " Length: %ld\n"
-msgstr " Lungime: %ld\n"
+msgid "Application\n"
+msgstr ""
-#: readelf.c:8985
+#: readelf.c:16595
#, c-format
-msgid " DWARF Version: %d\n"
-msgstr " Versiune DWARF: %d\n"
+msgid "Realtime\n"
+msgstr ""
-#: readelf.c:8986
+#: readelf.c:16596
#, c-format
-msgid " Prologue Length: %d\n"
+msgid "Microcontroller\n"
msgstr ""
-#: readelf.c:8987
+#: readelf.c:16597
#, c-format
-msgid " Minimum Instruction Length: %d\n"
+msgid "Application or Realtime\n"
msgstr ""
-#: readelf.c:8988
+#: readelf.c:16607 readelf.c:16626 readelf.c:17197 readelf.c:17214
+#: readelf.c:17285 readelf.c:17305 readelf.c:20136
#, c-format
-msgid " Initial value of 'is_stmt': %d\n"
+msgid "8-byte\n"
msgstr ""
-#: readelf.c:8989
+#: readelf.c:16608 readelf.c:17288 readelf.c:17308 readelf.c:20135
#, c-format
-msgid " Line Base: %d\n"
-msgstr " Ba Linie: %d\n"
+msgid "4-byte\n"
+msgstr ""
-#: readelf.c:8990
+#: readelf.c:16612 readelf.c:16630
#, c-format
-msgid " Line Range: %d\n"
-msgstr " Interval Linie: %d\n"
+msgid "8-byte and up to %d-byte extended\n"
+msgstr ""
-#: readelf.c:8991
+#: readelf.c:16625
#, c-format
-msgid " Opcode Base: %d\n"
-msgstr " Bazã Opcode: %d\n"
+msgid "8-byte, except leaf SP\n"
+msgstr ""
-#: readelf.c:8992
+#: readelf.c:16641 readelf.c:16723 readelf.c:17323
#, c-format
-msgid " (Pointer size: %u)\n"
-msgstr " (Dimensiune Pointer: %u)\n"
+msgid "flag = %d, vendor = "
+msgstr ""
-#: readelf.c:9001
+#: readelf.c:16662
#, c-format
-msgid ""
-"\n"
-" Opcodes:\n"
+msgid "True\n"
msgstr ""
-"\n"
-" Opcode-uri:\n"
-#: readelf.c:9004
+#: readelf.c:16682
+#, fuzzy, c-format
+msgid "<unknown: %d>\n"
+msgstr "<necunoscut: %x>"
+
+#: readelf.c:16727
+msgid "corrupt vendor attribute\n"
+msgstr ""
+
+#: readelf.c:16777
#, c-format
-msgid " Opcode %d has %d args\n"
-msgstr " Opcode %d are %d argumente\n"
+msgid "unspecified hard/soft float\n"
+msgstr ""
-#: readelf.c:9010
+#: readelf.c:16780
#, c-format
-msgid ""
-"\n"
-" The Directory Table is empty.\n"
+msgid "hard float\n"
msgstr ""
-#: readelf.c:9013
+#: readelf.c:16783
#, c-format
-msgid ""
-"\n"
-" The Directory Table:\n"
+msgid "soft float\n"
msgstr ""
-"\n"
-" Tabelul Director:\n"
-#: readelf.c:9017
+#: readelf.c:16815
#, c-format
-msgid " %s\n"
-msgstr " %s\n"
+msgid "unspecified hard/soft float, "
+msgstr ""
-#: readelf.c:9028
+#: readelf.c:16818
#, c-format
-msgid ""
-"\n"
-" The File Name Table is empty.\n"
+msgid "hard float, "
msgstr ""
-#: readelf.c:9031
+#: readelf.c:16821
#, c-format
-msgid ""
-"\n"
-" The File Name Table:\n"
+msgid "soft float, "
msgstr ""
-#: readelf.c:9039
+#: readelf.c:16824
#, c-format
-msgid " %d\t"
+msgid "single-precision hard float, "
msgstr ""
-#: readelf.c:9050
+#: readelf.c:16831
#, c-format
-msgid "%s\n"
+msgid "unspecified long double\n"
msgstr ""
-#. Now display the statements.
-#: readelf.c:9058
+#: readelf.c:16834
#, c-format
-msgid ""
-"\n"
-" Line Number Statements:\n"
+msgid "128-bit IBM long double\n"
msgstr ""
-#: readelf.c:9073
+#: readelf.c:16837
#, c-format
-msgid " Special opcode %d: advance Address by %d to 0x%lx"
+msgid "64-bit long double\n"
msgstr ""
-#: readelf.c:9077
+#: readelf.c:16840
#, c-format
-msgid " and Line by %d to %d\n"
+msgid "128-bit IEEE long double\n"
msgstr ""
-#: readelf.c:9088
+#: readelf.c:16862 readelf.c:16893
#, c-format
-msgid " Copy\n"
-msgstr "Copiazã\n"
+msgid "unspecified\n"
+msgstr ""
-#: readelf.c:9095
+#: readelf.c:16865
#, c-format
-msgid " Advance PC by %d to %lx\n"
+msgid "generic\n"
msgstr ""
-#: readelf.c:9103
+#: readelf.c:16899
+#, fuzzy, c-format
+msgid "memory\n"
+msgstr "Memorie insuficientă\n"
+
+#: readelf.c:16926
#, c-format
-msgid " Advance Line by %d to %d\n"
+msgid "any\n"
msgstr ""
-#: readelf.c:9110
+#: readelf.c:16929
#, c-format
-msgid " Set File Name to entry %d in the File Name Table\n"
+msgid "software\n"
msgstr ""
-#: readelf.c:9118
+#: readelf.c:16932
#, c-format
-msgid " Set column to %d\n"
+msgid "hardware\n"
msgstr ""
-#: readelf.c:9125
+#: readelf.c:17055
#, c-format
-msgid " Set is_stmt to %d\n"
+msgid "Hard or soft float\n"
msgstr ""
-#: readelf.c:9130
+#: readelf.c:17058
#, c-format
-msgid " Set basic block\n"
+msgid "Hard float (double precision)\n"
msgstr ""
-#: readelf.c:9138
+#: readelf.c:17061
#, c-format
-msgid " Advance PC by constant %d to 0x%lx\n"
+msgid "Hard float (single precision)\n"
msgstr ""
-#: readelf.c:9146
+#: readelf.c:17064
#, c-format
-msgid " Advance PC by fixed size amount %d to 0x%lx\n"
+msgid "Soft float\n"
msgstr ""
-#: readelf.c:9151
+#: readelf.c:17067
#, c-format
-msgid " Set prologue_end to true\n"
+msgid "Hard float (MIPS32r2 64-bit FPU 12 callee-saved)\n"
msgstr ""
-#: readelf.c:9155
+#: readelf.c:17070
#, c-format
-msgid " Set epilogue_begin to true\n"
+msgid "Hard float (32-bit CPU, Any FPU)\n"
msgstr ""
-#: readelf.c:9161
+#: readelf.c:17073
#, c-format
-msgid " Set ISA to %d\n"
+msgid "Hard float (32-bit CPU, 64-bit FPU)\n"
msgstr ""
-#: readelf.c:9165
+#: readelf.c:17076
#, c-format
-msgid " Unknown opcode %d with operands: "
+msgid "Hard float compat (32-bit CPU, 64-bit FPU)\n"
msgstr ""
-#: readelf.c:9193 readelf.c:9279 readelf.c:9354
+#: readelf.c:17079
#, c-format
-msgid ""
-"Contents of the %s section:\n"
-"\n"
+msgid "NaN 2008 compatibility\n"
msgstr ""
-#: readelf.c:9233
-msgid "Only DWARF 2 and 3 pubnames are currently supported\n"
+#: readelf.c:17112
+#, c-format
+msgid "Any MSA or not\n"
msgstr ""
-#: readelf.c:9240
+#: readelf.c:17115
#, c-format
-msgid " Length: %ld\n"
+msgid "128-bit MSA\n"
msgstr ""
-#: readelf.c:9242
+#: readelf.c:17177
#, c-format
-msgid " Version: %d\n"
+msgid "Not used\n"
msgstr ""
-#: readelf.c:9244
+#: readelf.c:17180
#, c-format
-msgid " Offset into .debug_info section: %ld\n"
+msgid "2 bytes\n"
msgstr ""
-#: readelf.c:9246
+#: readelf.c:17183
#, c-format
-msgid " Size of area in .debug_info section: %ld\n"
+msgid "4 bytes\n"
msgstr ""
-#: readelf.c:9249
+#: readelf.c:17200 readelf.c:17217 readelf.c:17291 readelf.c:17311
#, c-format
-msgid ""
-"\n"
-" Offset\tName\n"
+msgid "16-byte\n"
msgstr ""
-#: readelf.c:9300
+#: readelf.c:17231
#, c-format
-msgid " DW_MACINFO_start_file - lineno: %d filenum: %d\n"
+msgid "DSBT addressing not used\n"
msgstr ""
-#: readelf.c:9306
+#: readelf.c:17234
#, c-format
-msgid " DW_MACINFO_end_file\n"
+msgid "DSBT addressing used\n"
msgstr ""
-#: readelf.c:9314
+#: readelf.c:17248
#, c-format
-msgid " DW_MACINFO_define - lineno : %d macro : %s\n"
+msgid "Data addressing position-dependent\n"
msgstr ""
-#: readelf.c:9323
+#: readelf.c:17251
#, c-format
-msgid " DW_MACINFO_undef - lineno : %d macro : %s\n"
+msgid "Data addressing position-independent, GOT near DP\n"
msgstr ""
-#: readelf.c:9335
+#: readelf.c:17254
#, c-format
-msgid " DW_MACINFO_vendor_ext - constant : %d string : %s\n"
+msgid "Data addressing position-independent, GOT far from DP\n"
msgstr ""
-#: readelf.c:9363
+#: readelf.c:17268
#, c-format
-msgid " Number TAG\n"
+msgid "Code addressing position-dependent\n"
msgstr ""
-#: readelf.c:9369
+#: readelf.c:17271
#, c-format
-msgid " %ld %s [%s]\n"
+msgid "Code addressing position-independent\n"
msgstr ""
-#: readelf.c:9372
-msgid "has children"
+#: readelf.c:17425
+#, c-format
+msgid "MSP430\n"
msgstr ""
-#: readelf.c:9372
-msgid "no children"
+#: readelf.c:17426
+#, c-format
+msgid "MSP430X\n"
msgstr ""
-#: readelf.c:9375
+#: readelf.c:17437 readelf.c:17449
#, c-format
-msgid " %-18s %s\n"
+msgid "Small\n"
msgstr ""
-#: readelf.c:9410
+#: readelf.c:17438 readelf.c:17450
#, c-format
-msgid ""
-"\n"
-"The .debug_loc section is empty.\n"
+msgid "Large\n"
msgstr ""
-#. FIXME: Should we handle this case?
-#: readelf.c:9455
-msgid "Location lists in .debug_info section aren't in ascending order!\n"
+#: readelf.c:17451
+#, c-format
+msgid "Restricted Large\n"
msgstr ""
-#: readelf.c:9458
-msgid "No location lists in .debug_info section!\n"
+#: readelf.c:17457
+#, fuzzy, c-format
+msgid " <unknown tag %d>: "
+msgstr "<necunoscut>: %d"
+
+#: readelf.c:17503
+#, c-format
+msgid "Any Region\n"
msgstr ""
-#: readelf.c:9461
+#: readelf.c:17506
#, c-format
-msgid "Location lists in .debug_loc section start at 0x%lx\n"
+msgid "Lower Region Only\n"
msgstr ""
-#: readelf.c:9464
+#: readelf.c:17565
#, c-format
-msgid ""
-"Contents of the .debug_loc section:\n"
-"\n"
+msgid "%u\n"
msgstr ""
-#: readelf.c:9465
+#: readelf.c:17572
#, c-format
-msgid " Offset Begin End Expression\n"
+msgid "No unaligned access\n"
msgstr ""
-#: readelf.c:9495
+#: readelf.c:17575
#, c-format
-msgid "There is a hole [0x%lx - 0x%lx] in .debug_loc section.\n"
+msgid "Unaligned access\n"
msgstr ""
-#: readelf.c:9498
+#: readelf.c:17581
#, c-format
-msgid "There is an overlap [0x%lx - 0x%lx] in .debug_loc section.\n"
+msgid "%u-bytes\n"
+msgstr ""
+
+#: readelf.c:17723
+msgid "attributes"
msgstr ""
-#: readelf.c:9512 readelf.c:9837
+#: readelf.c:17735
#, c-format
-msgid " %8.8lx <End of list>\n"
+msgid "Unknown attributes version '%c'(%d) - expecting 'A'\n"
msgstr ""
-#: readelf.c:9540 readelf.c:9854
-msgid " (start == end)"
+#: readelf.c:17754
+msgid "Tag section ends prematurely\n"
msgstr ""
-#: readelf.c:9542 readelf.c:9856
-msgid " (start > end)"
+#: readelf.c:17763
+#, c-format
+msgid "Bad attribute length (%u > %u)\n"
msgstr ""
-#: readelf.c:9566
+#: readelf.c:17771
#, c-format
-msgid ""
-"\n"
-"The .debug_str section is empty.\n"
+msgid "Attribute length of %u is too small\n"
msgstr ""
-#: readelf.c:9570
+#: readelf.c:17782
+msgid "Corrupt attribute section name\n"
+msgstr ""
+
+#: readelf.c:17787
#, c-format
-msgid ""
-"Contents of the .debug_str section:\n"
-"\n"
+msgid "Attribute Section: "
msgstr ""
-#: readelf.c:9675
-msgid "Only DWARF 2 and 3 aranges are currently supported.\n"
+#: readelf.c:17814
+msgid "Unused bytes at end of section\n"
msgstr ""
-#: readelf.c:9679
+#: readelf.c:17824
#, c-format
-msgid " Length: %ld\n"
-msgstr " Lungime: %ld\n"
+msgid "Bad subsection length (%u > %u)\n"
+msgstr ""
-#: readelf.c:9680
+#: readelf.c:17832
#, c-format
-msgid " Version: %d\n"
-msgstr " Versiune: %d\n"
+msgid "Bad subsection length (%u < 6)\n"
+msgstr ""
-#: readelf.c:9681
+#: readelf.c:17847
#, c-format
-msgid " Offset into .debug_info: %lx\n"
+msgid "File Attributes\n"
msgstr ""
-#: readelf.c:9682
+#: readelf.c:17850
+#, fuzzy, c-format
+msgid "Section Attributes:"
+msgstr "Secțiuni:\n"
+
+#: readelf.c:17853
#, c-format
-msgid " Pointer Size: %d\n"
+msgid "Symbol Attributes:"
msgstr ""
-#: readelf.c:9683
+#: readelf.c:17866
+#, fuzzy, c-format
+msgid "Unknown tag: %d\n"
+msgstr "<necunoscut>: %d"
+
+#: readelf.c:17887
#, c-format
-msgid " Segment Size: %d\n"
+msgid " Unknown attribute:\n"
+msgstr ""
+
+#: readelf.c:17929
+msgid "MIPS GOT entry extends beyond the end of available data\n"
+msgstr ""
+
+#: readelf.c:18012 readelf.c:18081
+#, fuzzy
+msgid "Unknown"
+msgstr "<necunoscut>: %d"
+
+#: readelf.c:18128
+msgid "Corrupt MIPS ABI Flags section.\n"
+msgstr ""
+
+#: readelf.c:18134
+msgid "MIPS ABI Flags section"
+msgstr ""
+
+#: readelf.c:18193 readelf.c:18775
+msgid "Global Offset Table data"
msgstr ""
-#: readelf.c:9685
+#: readelf.c:18197
#, c-format
msgid ""
"\n"
-" Address Length\n"
+"Static GOT:\n"
+msgstr ""
+
+#: readelf.c:18198 readelf.c:18780
+#, c-format
+msgid " Canonical gp value: "
+msgstr ""
+
+#: readelf.c:18212 readelf.c:18784 readelf.c:18914
+#, c-format
+msgid " Reserved entries:\n"
+msgstr ""
+
+#: readelf.c:18213
+#, c-format
+msgid " %*s %10s %*s\n"
+msgstr ""
+
+#: readelf.c:18214 readelf.c:18244 readelf.c:18786 readelf.c:18814
+#: readelf.c:18832 readelf.c:18916 readelf.c:18925
+msgid "Address"
+msgstr ""
+
+#: readelf.c:18214 readelf.c:18244 readelf.c:18786 readelf.c:18814
+#: readelf.c:18833
+msgid "Access"
+msgstr ""
+
+#: readelf.c:18215 readelf.c:18245
+msgid "Value"
msgstr ""
-#: readelf.c:9741
+#: readelf.c:18242 readelf.c:18812
+#, c-format
+msgid " Local entries:\n"
+msgstr ""
+
+#: readelf.c:18324 readelf.c:19031
+#, fuzzy
+msgid "liblist section data"
+msgstr "date secțiune"
+
+#: readelf.c:18327
#, c-format
msgid ""
"\n"
-"The .debug_ranges section is empty.\n"
+"Section '.liblist' contains %lu entry:\n"
+msgid_plural ""
+"\n"
+"Section '.liblist' contains %lu entries:\n"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: readelf.c:18331
+#, fuzzy
+msgid " Library Time Stamp Checksum Version Flags\n"
+msgstr " Clasa: %s\n"
+
+#: readelf.c:18357
+#, c-format
+msgid "<corrupt: %9ld>"
+msgstr ""
+
+#: readelf.c:18362
+msgid " NONE"
msgstr ""
-#. FIXME: Should we handle this case?
-#: readelf.c:9786
-msgid "Range lists in .debug_info section aren't in ascending order!\n"
+#: readelf.c:18412
+msgid "No MIPS_OPTIONS header found\n"
msgstr ""
-#: readelf.c:9789
-msgid "No range lists in .debug_info section!\n"
+#: readelf.c:18418
+msgid "The MIPS options section is too small.\n"
msgstr ""
-#: readelf.c:9792
+#: readelf.c:18423
+msgid "options"
+msgstr "opțiuni"
+
+#: readelf.c:18442
#, c-format
-msgid "Range lists in .debug_ranges section start at 0x%lx\n"
+msgid "Invalid size (%u) for MIPS option\n"
msgstr ""
-#: readelf.c:9795
+#: readelf.c:18451
#, c-format
msgid ""
-"Contents of the .debug_ranges section:\n"
"\n"
+"Section '%s' contains %d entry:\n"
+msgid_plural ""
+"\n"
+"Section '%s' contains %d entries:\n"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: readelf.c:18489 readelf.c:18521
+msgid "Truncated MIPS REGINFO option\n"
+msgstr ""
+
+#: readelf.c:18657
+msgid "conflict list found without a dynamic symbol table\n"
msgstr ""
-#: readelf.c:9796
+#: readelf.c:18665
#, c-format
-msgid " Offset Begin End\n"
+msgid "Overlarge number of conflicts detected: %lx\n"
msgstr ""
-#: readelf.c:9820
+#: readelf.c:18673
+msgid "Out of memory allocating space for dynamic conflicts\n"
+msgstr ""
+
+#: readelf.c:18683 readelf.c:18701
+msgid "conflict"
+msgstr ""
+
+#: readelf.c:18714
#, c-format
-msgid "There is a hole [0x%lx - 0x%lx] in .debug_ranges section.\n"
+msgid ""
+"\n"
+"Section '.conflict' contains %lu entry:\n"
+msgid_plural ""
+"\n"
+"Section '.conflict' contains %lu entries:\n"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: readelf.c:18718
+msgid " Num: Index Value Name"
msgstr ""
-#: readelf.c:9823
+#: readelf.c:18725
#, c-format
-msgid "There is an overlap [0x%lx - 0x%lx] in .debug_ranges section.\n"
+msgid "<corrupt symbol index>"
msgstr ""
-#: readelf.c:10017
+#: readelf.c:18736 readelf.c:18862 readelf.c:18950
#, c-format
-msgid "The section %s contains:\n"
+msgid "<corrupt: %14ld>"
msgstr ""
-#: readelf.c:10663
+#: readelf.c:18759
#, c-format
-msgid "unsupported or unknown DW_CFA_%d\n"
+msgid "The GOT symbol offset (%lu) is greater than the symbol table size (%lu)\n"
msgstr ""
-#: readelf.c:10688
+#: readelf.c:18768
#, c-format
-msgid "Displaying the debug contents of section %s is not yet supported.\n"
+msgid "Too many GOT symbols: %lu\n"
msgstr ""
-#: readelf.c:10732
+#: readelf.c:18779
#, c-format
msgid ""
"\n"
-"Section '%s' has no debugging data.\n"
+"Primary GOT:\n"
msgstr ""
-#: readelf.c:10746
-msgid "debug section data"
-msgstr "date secþiune depanare"
+#: readelf.c:18785
+#, c-format
+msgid " %*s %10s %*s Purpose\n"
+msgstr ""
+
+#: readelf.c:18787 readelf.c:18815 readelf.c:18834 readelf.c:18916
+#: readelf.c:18926
+msgid "Initial"
+msgstr ""
-#: readelf.c:10765
+#: readelf.c:18789
#, c-format
-msgid "Unrecognized debug section: %s\n"
-msgstr "Secþiune depanare nerecunoscutã: %s\n"
+msgid " Lazy resolver\n"
+msgstr ""
-#: readelf.c:10800
+#: readelf.c:18804
#, c-format
-msgid "Section %d was not dumped because it does not exist!\n"
+msgid " Module pointer (GNU extension)\n"
msgstr ""
-#: readelf.c:10872 readelf.c:11236
-msgid "liblist"
+#: readelf.c:18830
+#, c-format
+msgid " Global entries:\n"
msgstr ""
-#: readelf.c:10961
-msgid "options"
-msgstr "opþiuni"
+#: readelf.c:18835 readelf.c:18927
+msgid "Sym.Val."
+msgstr ""
+
+#. Note for translators: "Ndx" = abbreviated form of "Index".
+#: readelf.c:18838 readelf.c:18927
+msgid "Ndx"
+msgstr ""
+
+#: readelf.c:18838 readelf.c:18927
+#, fuzzy
+msgid "Name"
+msgstr "Nume: %s\n"
-#: readelf.c:10991
+#: readelf.c:18848
#, c-format
-msgid ""
-"\n"
-"Section '%s' contains %d entries:\n"
+msgid "<no dynamic symbols>"
msgstr ""
-#: readelf.c:11152
-msgid "conflict list found without a dynamic symbol table"
+#: readelf.c:18865
+#, c-format
+msgid "<symbol index %lu exceeds number of dynamic symbols>"
msgstr ""
-#: readelf.c:11168 readelf.c:11182
-msgid "conflict"
+#: readelf.c:18906
+msgid "Procedure Linkage Table data"
msgstr ""
-#: readelf.c:11192
+#: readelf.c:18915
#, c-format
-msgid ""
-"\n"
-"Section '.conflict' contains %lu entries:\n"
+msgid " %*s %*s Purpose\n"
msgstr ""
-#: readelf.c:11194
-msgid " Num: Index Value Name"
+#: readelf.c:18918
+#, c-format
+msgid " PLT lazy resolver\n"
+msgstr ""
+
+#: readelf.c:18920
+#, c-format
+msgid " Module pointer\n"
+msgstr ""
+
+#: readelf.c:18923
+#, c-format
+msgid " Entries:\n"
+msgstr ""
+
+#: readelf.c:18937
+#, c-format
+msgid "<corrupt symbol index: %lu>"
+msgstr ""
+
+#: readelf.c:18976
+msgid "NDS32 elf flags section"
msgstr ""
-#: readelf.c:11243
+#: readelf.c:19042
msgid "liblist string table"
msgstr ""
-#: readelf.c:11252
+#: readelf.c:19054
#, c-format
msgid ""
"\n"
"Library list section '%s' contains %lu entries:\n"
-msgstr ""
+msgid_plural ""
+"\n"
+"Library list section '%s' contains %lu entries:\n"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: readelf.c:19060
+#, fuzzy
+msgid " Library Time Stamp Checksum Version Flags"
+msgstr " Clasa: %s\n"
-#: readelf.c:11303
+#: readelf.c:19110
msgid "NT_AUXV (auxiliary vector)"
msgstr ""
-#: readelf.c:11305
+#: readelf.c:19112
msgid "NT_PRSTATUS (prstatus structure)"
msgstr ""
-#: readelf.c:11307
+#: readelf.c:19114
msgid "NT_FPREGSET (floating point registers)"
msgstr ""
-#: readelf.c:11309
+#: readelf.c:19116
msgid "NT_PRPSINFO (prpsinfo structure)"
msgstr ""
-#: readelf.c:11311
+#: readelf.c:19118
msgid "NT_TASKSTRUCT (task structure)"
msgstr ""
-#: readelf.c:11313
+#: readelf.c:19120
+msgid "NT_GDB_TDESC (GDB XML target description)"
+msgstr ""
+
+#: readelf.c:19122
msgid "NT_PRXFPREG (user_xfpregs structure)"
msgstr ""
-#: readelf.c:11315
+#: readelf.c:19124
+msgid "NT_PPC_VMX (ppc Altivec registers)"
+msgstr ""
+
+#: readelf.c:19126
+msgid "NT_PPC_VSX (ppc VSX registers)"
+msgstr ""
+
+#: readelf.c:19128
+msgid "NT_PPC_TAR (ppc TAR register)"
+msgstr ""
+
+#: readelf.c:19130
+msgid "NT_PPC_PPR (ppc PPR register)"
+msgstr ""
+
+#: readelf.c:19132
+msgid "NT_PPC_DSCR (ppc DSCR register)"
+msgstr ""
+
+#: readelf.c:19134
+msgid "NT_PPC_EBB (ppc EBB registers)"
+msgstr ""
+
+#: readelf.c:19136
+msgid "NT_PPC_PMU (ppc PMU registers)"
+msgstr ""
+
+#: readelf.c:19138
+msgid "NT_PPC_TM_CGPR (ppc checkpointed GPR registers)"
+msgstr ""
+
+#: readelf.c:19140
+msgid "NT_PPC_TM_CFPR (ppc checkpointed floating point registers)"
+msgstr ""
+
+#: readelf.c:19142
+msgid "NT_PPC_TM_CVMX (ppc checkpointed Altivec registers)"
+msgstr ""
+
+#: readelf.c:19144
+msgid "NT_PPC_TM_CVSX (ppc checkpointed VSX registers)"
+msgstr ""
+
+#: readelf.c:19146
+msgid "NT_PPC_TM_SPR (ppc TM special purpose registers)"
+msgstr ""
+
+#: readelf.c:19148
+msgid "NT_PPC_TM_CTAR (ppc checkpointed TAR register)"
+msgstr ""
+
+#: readelf.c:19150
+msgid "NT_PPC_TM_CPPR (ppc checkpointed PPR register)"
+msgstr ""
+
+#: readelf.c:19152
+msgid "NT_PPC_TM_CDSCR (ppc checkpointed DSCR register)"
+msgstr ""
+
+#: readelf.c:19154
+msgid "NT_386_TLS (x86 TLS information)"
+msgstr ""
+
+#: readelf.c:19156
+msgid "NT_386_IOPERM (x86 I/O permissions)"
+msgstr ""
+
+#: readelf.c:19158
+msgid "NT_X86_XSTATE (x86 XSAVE extended state)"
+msgstr ""
+
+#: readelf.c:19160
+msgid "NT_X86_CET (x86 CET state)"
+msgstr ""
+
+#: readelf.c:19162
+msgid "NT_S390_HIGH_GPRS (s390 upper register halves)"
+msgstr ""
+
+#: readelf.c:19164
+msgid "NT_S390_TIMER (s390 timer register)"
+msgstr ""
+
+#: readelf.c:19166
+msgid "NT_S390_TODCMP (s390 TOD comparator register)"
+msgstr ""
+
+#: readelf.c:19168
+msgid "NT_S390_TODPREG (s390 TOD programmable register)"
+msgstr ""
+
+#: readelf.c:19170
+msgid "NT_S390_CTRS (s390 control registers)"
+msgstr ""
+
+#: readelf.c:19172
+msgid "NT_S390_PREFIX (s390 prefix register)"
+msgstr ""
+
+#: readelf.c:19174
+msgid "NT_S390_LAST_BREAK (s390 last breaking event address)"
+msgstr ""
+
+#: readelf.c:19176
+msgid "NT_S390_SYSTEM_CALL (s390 system call restart data)"
+msgstr ""
+
+#: readelf.c:19178
+msgid "NT_S390_TDB (s390 transaction diagnostic block)"
+msgstr ""
+
+#: readelf.c:19180
+msgid "NT_S390_VXRS_LOW (s390 vector registers 0-15 upper half)"
+msgstr ""
+
+#: readelf.c:19182
+msgid "NT_S390_VXRS_HIGH (s390 vector registers 16-31)"
+msgstr ""
+
+#: readelf.c:19184
+msgid "NT_S390_GS_CB (s390 guarded-storage registers)"
+msgstr ""
+
+#: readelf.c:19186
+msgid "NT_S390_GS_BC (s390 guarded-storage broadcast control)"
+msgstr ""
+
+#: readelf.c:19188
+msgid "NT_ARM_VFP (arm VFP registers)"
+msgstr ""
+
+#: readelf.c:19190
+msgid "NT_ARM_TLS (AArch TLS registers)"
+msgstr ""
+
+#: readelf.c:19192
+msgid "NT_ARM_HW_BREAK (AArch hardware breakpoint registers)"
+msgstr ""
+
+#: readelf.c:19194
+msgid "NT_ARM_HW_WATCH (AArch hardware watchpoint registers)"
+msgstr ""
+
+#: readelf.c:19196
+msgid "NT_ARM_SVE (AArch SVE registers)"
+msgstr ""
+
+#: readelf.c:19198
+msgid "NT_ARM_PAC_MASK (AArch pointer authentication code masks)"
+msgstr ""
+
+#: readelf.c:19200
+msgid "NT_ARM_PACA_KEYS (ARM pointer authentication address keys)"
+msgstr ""
+
+#: readelf.c:19202
+msgid "NT_ARM_PACG_KEYS (ARM pointer authentication generic keys)"
+msgstr ""
+
+#: readelf.c:19204
+msgid "NT_ARM_TAGGED_ADDR_CTRL (AArch tagged address control)"
+msgstr ""
+
+#: readelf.c:19206
+msgid "NT_ARM_PAC_ENABLED_KEYS (AArch64 pointer authentication enabled keys)"
+msgstr ""
+
+#: readelf.c:19208
+msgid "NT_ARC_V2 (ARC HS accumulator/extra registers)"
+msgstr ""
+
+#: readelf.c:19210
+msgid "NT_RISCV_CSR (RISC-V control and status registers)"
+msgstr ""
+
+#: readelf.c:19212
msgid "NT_PSTATUS (pstatus structure)"
msgstr ""
-#: readelf.c:11317
+#: readelf.c:19214
msgid "NT_FPREGS (floating point registers)"
msgstr ""
-#: readelf.c:11319
+#: readelf.c:19216
msgid "NT_PSINFO (psinfo structure)"
msgstr ""
-#: readelf.c:11321
+#: readelf.c:19218
msgid "NT_LWPSTATUS (lwpstatus_t structure)"
msgstr ""
-#: readelf.c:11323
+#: readelf.c:19220
msgid "NT_LWPSINFO (lwpsinfo_t structure)"
msgstr ""
-#: readelf.c:11325
+#: readelf.c:19222
msgid "NT_WIN32PSTATUS (win32_pstatus structure)"
msgstr ""
-#: readelf.c:11333
+#: readelf.c:19224
+msgid "NT_SIGINFO (siginfo_t data)"
+msgstr ""
+
+#: readelf.c:19226
+msgid "NT_FILE (mapped files)"
+msgstr ""
+
+#: readelf.c:19234
msgid "NT_VERSION (version)"
msgstr ""
-#: readelf.c:11335
+#: readelf.c:19236
msgid "NT_ARCH (architecture)"
msgstr ""
-#: readelf.c:11340 readelf.c:11362
+#: readelf.c:19238
+msgid "OPEN"
+msgstr ""
+
+#: readelf.c:19240
+msgid "func"
+msgstr ""
+
+#: readelf.c:19242
+msgid "GO BUILDID"
+msgstr ""
+
+#: readelf.c:19244
+msgid "FDO_PACKAGING_METADATA"
+msgstr ""
+
+#: readelf.c:19249 readelf.c:19368 readelf.c:20109 readelf.c:20277
+#: readelf.c:20374 readelf.c:20502
#, c-format
msgid "Unknown note type: (0x%08x)"
msgstr ""
+#: readelf.c:19270
+#, c-format
+msgid " Cannot decode 64-bit note in 32-bit build\n"
+msgstr ""
+
+#: readelf.c:19278
+msgid " Malformed note - too short for header\n"
+msgstr ""
+
+#: readelf.c:19287
+msgid " Malformed note - does not end with \\0\n"
+msgstr ""
+
+#: readelf.c:19300
+msgid " Malformed note - too short for supplied file count\n"
+msgstr ""
+
+#: readelf.c:19304
+#, c-format
+msgid " Page size: "
+msgstr ""
+
+#: readelf.c:19308
+#, c-format
+msgid " %*s%*s%*s\n"
+msgstr ""
+
+#: readelf.c:19309
+msgid "Start"
+msgstr ""
+
+#: readelf.c:19310
+msgid "End"
+msgstr ""
+
+#: readelf.c:19311
+msgid "Page Offset"
+msgstr ""
+
+#: readelf.c:19319
+msgid " Malformed note - filenames end too early\n"
+msgstr ""
+
+#: readelf.c:19351
+msgid "NT_GNU_ABI_TAG (ABI version tag)"
+msgstr ""
+
+#: readelf.c:19353
+msgid "NT_GNU_HWCAP (DSO-supplied software HWCAP info)"
+msgstr ""
+
+#: readelf.c:19355
+msgid "NT_GNU_BUILD_ID (unique build ID bitstring)"
+msgstr ""
+
+#: readelf.c:19357
+msgid "NT_GNU_GOLD_VERSION (gold version)"
+msgstr ""
+
+#: readelf.c:19359
+msgid "NT_GNU_PROPERTY_TYPE_0"
+msgstr ""
+
+#: readelf.c:19361
+msgid "NT_GNU_BUILD_ATTRIBUTE_OPEN"
+msgstr ""
+
+#: readelf.c:19363
+msgid "NT_GNU_BUILD_ATTRIBUTE_FUNC"
+msgstr ""
+
+#: readelf.c:19452 readelf.c:19583 readelf.c:19620
+#, fuzzy, c-format
+msgid "<None>"
+msgstr "Nimic"
+
+#: readelf.c:19732
+#, c-format
+msgid " Properties: "
+msgstr ""
+
+#: readelf.c:19736
+#, c-format
+msgid "<corrupt GNU_PROPERTY_TYPE, size = %#lx>\n"
+msgstr ""
+
+#: readelf.c:19748
+#, c-format
+msgid "<corrupt descsz: %#lx>\n"
+msgstr ""
+
+#: readelf.c:19759
+#, c-format
+msgid "<corrupt type (%#x) datasz: %#x>\n"
+msgstr ""
+
+#: readelf.c:19781 readelf.c:19835 readelf.c:19857
+#, c-format
+msgid "x86 ISA used: <corrupt length: %#x> "
+msgstr ""
+
+#: readelf.c:19792 readelf.c:19846 readelf.c:19868
+#, c-format
+msgid "x86 ISA needed: <corrupt length: %#x> "
+msgstr ""
+
+#: readelf.c:19803
+#, c-format
+msgid "x86 feature: <corrupt length: %#x> "
+msgstr ""
+
+#: readelf.c:19814
+#, c-format
+msgid "x86 feature used: <corrupt length: %#x> "
+msgstr ""
+
+#: readelf.c:19825
+#, c-format
+msgid "x86 feature needed: <corrupt length: %#x> "
+msgstr ""
+
+#: readelf.c:19887 readelf.c:19901 readelf.c:19909 readelf.c:19940
+#, c-format
+msgid "<corrupt length: %#x> "
+msgstr ""
+
+#: readelf.c:19899
+#, fuzzy, c-format
+msgid "stack size: "
+msgstr "setează dimensiune .data"
+
+#: readelf.c:19922
+#, c-format
+msgid "1_needed: <corrupt length: %#x> "
+msgstr ""
+
+#: readelf.c:19936
+#, c-format
+msgid "UINT32_AND (%#x): "
+msgstr ""
+
+#: readelf.c:19938
+#, c-format
+msgid "UINT32_OR (%#x): "
+msgstr ""
+
+#: readelf.c:19950
+#, fuzzy, c-format
+msgid "<unknown type %#x data: "
+msgstr "tip BB necunoscut"
+
+#: readelf.c:19952
+#, c-format
+msgid "<processor-specific type %#x data: "
+msgstr ""
+
+#: readelf.c:19954
+#, c-format
+msgid "<application-specific type %#x data: "
+msgstr ""
+
+#: readelf.c:19983
+#, c-format
+msgid " Build ID: "
+msgstr ""
+
+#: readelf.c:19998
+#, c-format
+msgid " <corrupt GNU_ABI_TAG>\n"
+msgstr ""
+
+#: readelf.c:20035
+#, c-format
+msgid " OS: %s, ABI: %ld.%ld.%ld\n"
+msgstr ""
+
+#: readelf.c:20044
+#, fuzzy, c-format
+msgid " Version: "
+msgstr " Atribute: %s Versiune: %d\n"
+
+#. Hardware capabilities information. Word 0 is the number of entries.
+#. Word 1 is a bitmask of enabled entries. The rest of the descriptor
+#. is a series of entries, where each entry is a single byte followed
+#. by a nul terminated string. The byte gives the bit number to test
+#. if enabled in the bitmask.
+#: readelf.c:20060
+#, c-format
+msgid " Hardware Capabilities: "
+msgstr ""
+
+#: readelf.c:20063
+msgid "<corrupt GNU_HWCAP>\n"
+msgstr ""
+
+#: readelf.c:20068
+#, c-format
+msgid "num entries: %ld, enabled mask: %lx\n"
+msgstr ""
+
+#: readelf.c:20084
+#, fuzzy, c-format
+msgid " Description data: "
+msgstr "date secțiune"
+
+#: readelf.c:20102
+msgid "Alignment of 8-byte objects"
+msgstr ""
+
+#: readelf.c:20103
+msgid "Sizeof double and long double"
+msgstr ""
+
+#: readelf.c:20104
+msgid "Type of FPU support needed"
+msgstr ""
+
+#: readelf.c:20105
+msgid "Use of SIMD instructions"
+msgstr ""
+
+#: readelf.c:20106
+msgid "Use of cache"
+msgstr ""
+
+#: readelf.c:20107
+msgid "Use of MMU"
+msgstr ""
+
+#: readelf.c:20143
+#, c-format
+msgid "4-bytes\n"
+msgstr ""
+
+#: readelf.c:20144
+#, c-format
+msgid "8-bytes\n"
+msgstr ""
+
+#: readelf.c:20151
+#, c-format
+msgid "FPU-2.0\n"
+msgstr ""
+
+#: readelf.c:20152
+#, c-format
+msgid "FPU-3.0\n"
+msgstr ""
+
+#: readelf.c:20161
+#, c-format
+msgid "yes\n"
+msgstr ""
+
+#: readelf.c:20171
+#, fuzzy, c-format
+msgid "unknown value: %x\n"
+msgstr "<necunoscut>: %x"
+
+#: readelf.c:20227
+msgid "NT_THRMISC (thrmisc structure)"
+msgstr ""
+
+#: readelf.c:20229
+msgid "NT_PROCSTAT_PROC (proc data)"
+msgstr ""
+
+#: readelf.c:20231
+msgid "NT_PROCSTAT_FILES (files data)"
+msgstr ""
+
+#: readelf.c:20233
+msgid "NT_PROCSTAT_VMMAP (vmmap data)"
+msgstr ""
+
+#: readelf.c:20235
+msgid "NT_PROCSTAT_GROUPS (groups data)"
+msgstr ""
+
+#: readelf.c:20237
+msgid "NT_PROCSTAT_UMASK (umask data)"
+msgstr ""
+
+#: readelf.c:20239
+msgid "NT_PROCSTAT_RLIMIT (rlimit data)"
+msgstr ""
+
+#: readelf.c:20241
+msgid "NT_PROCSTAT_OSREL (osreldate data)"
+msgstr ""
+
+#: readelf.c:20243
+msgid "NT_PROCSTAT_PSSTRINGS (ps_strings data)"
+msgstr ""
+
+#: readelf.c:20245
+msgid "NT_PROCSTAT_AUXV (auxv data)"
+msgstr ""
+
+#: readelf.c:20247
+msgid "NT_PTLWPINFO (ptrace_lwpinfo structure)"
+msgstr ""
+
#. NetBSD core "procinfo" structure.
-#: readelf.c:11352
+#: readelf.c:20261
msgid "NetBSD procinfo structure"
msgstr ""
-#: readelf.c:11379 readelf.c:11393
+#: readelf.c:20264
+msgid "NetBSD ELF auxiliary vector data"
+msgstr ""
+
+#: readelf.c:20267
+msgid "PT_LWPSTATUS (ptrace_lwpstatus structure)"
+msgstr ""
+
+#: readelf.c:20296 readelf.c:20313 readelf.c:20327
msgid "PT_GETREGS (reg structure)"
msgstr ""
-#: readelf.c:11381 readelf.c:11395
+#: readelf.c:20298 readelf.c:20315 readelf.c:20329
msgid "PT_GETFPREGS (fpreg structure)"
msgstr ""
-#: readelf.c:11401
+#: readelf.c:20311
+msgid "PT___GETREGS40 (old reg structure)"
+msgstr ""
+
+#: readelf.c:20346
+msgid "OpenBSD procinfo structure"
+msgstr ""
+
+#: readelf.c:20348
+msgid "OpenBSD ELF auxiliary vector data"
+msgstr ""
+
+#: readelf.c:20350
+msgid "OpenBSD regular registers"
+msgstr ""
+
+#: readelf.c:20352
+msgid "OpenBSD floating point registers"
+msgstr ""
+
+#: readelf.c:20354
+msgid "OpenBSD window cookie"
+msgstr ""
+
+#: readelf.c:20368
+msgid "NT_STAPSDT (SystemTap probe descriptors)"
+msgstr ""
+
+#: readelf.c:20436
+#, c-format
+msgid " Provider: %s\n"
+msgstr ""
+
+#: readelf.c:20437
+#, fuzzy, c-format
+msgid " Name: %s\n"
+msgstr "Nume: %s\n"
+
+#: readelf.c:20438
+#, c-format
+msgid " Location: "
+msgstr ""
+
+#: readelf.c:20440
#, c-format
-msgid "PT_FIRSTMACH+%d"
+msgid ", Base: "
+msgstr ""
+
+#: readelf.c:20442
+#, c-format
+msgid ", Semaphore: "
+msgstr ""
+
+#: readelf.c:20445
+#, fuzzy, c-format
+msgid " Arguments: %s\n"
+msgstr "Argument %s ignorat"
+
+#: readelf.c:20450
+#, c-format
+msgid " <corrupt - note is too small>\n"
+msgstr ""
+
+#: readelf.c:20451
+msgid "corrupt stapdt note - the data size is too small\n"
+msgstr ""
+
+#: readelf.c:20460
+#, fuzzy, c-format
+msgid " Packaging Metadata: %.*s\n"
+msgstr " %#06x: Nume: %s"
+
+#: readelf.c:20474
+msgid "NT_VMS_MHD (module header)"
+msgstr ""
+
+#: readelf.c:20476
+msgid "NT_VMS_LNM (language name)"
+msgstr ""
+
+#: readelf.c:20478
+msgid "NT_VMS_SRC (source files)"
msgstr ""
-#: readelf.c:11447
+#: readelf.c:20482
+msgid "NT_VMS_EIDC (consistency check)"
+msgstr ""
+
+#: readelf.c:20484
+msgid "NT_VMS_FPMODE (FP mode)"
+msgstr ""
+
+#: readelf.c:20488
+msgid "NT_VMS_IMGNAM (image name)"
+msgstr ""
+
+#: readelf.c:20490
+msgid "NT_VMS_IMGID (image id)"
+msgstr ""
+
+#: readelf.c:20492
+msgid "NT_VMS_LINKID (link id)"
+msgstr ""
+
+#: readelf.c:20494
+msgid "NT_VMS_IMGBID (build id)"
+msgstr ""
+
+#: readelf.c:20496
+msgid "NT_VMS_GSTNAM (sym table name)"
+msgstr ""
+
+#: readelf.c:20523
+#, c-format
+msgid " Creation date : %.17s\n"
+msgstr ""
+
+#: readelf.c:20524
+#, c-format
+msgid " Last patch date: %.17s\n"
+msgstr ""
+
+#: readelf.c:20527
+#, c-format
+msgid " Module name : %s\n"
+msgstr ""
+
+#: readelf.c:20529
+#, fuzzy, c-format
+msgid " Module version : %s\n"
+msgstr " Atribute: %s Versiune: %d\n"
+
+#: readelf.c:20531 readelf.c:20536
+#, c-format
+msgid " Module version : <missing>\n"
+msgstr ""
+
+#: readelf.c:20535
+#, c-format
+msgid " Module name : <missing>\n"
+msgstr ""
+
+#: readelf.c:20541
+#, c-format
+msgid " Language: %.*s\n"
+msgstr ""
+
+#: readelf.c:20546
+#, c-format
+msgid " Floating Point mode: "
+msgstr ""
+
+#: readelf.c:20556
+#, c-format
+msgid " Link time: "
+msgstr ""
+
+#: readelf.c:20567
+#, c-format
+msgid " Patch time: "
+msgstr ""
+
+#: readelf.c:20581
+#, c-format
+msgid " Major id: %u, minor id: %u\n"
+msgstr ""
+
+#: readelf.c:20584
+#, c-format
+msgid " Last modified : "
+msgstr ""
+
+#: readelf.c:20587
+#, c-format
+msgid ""
+"\n"
+" Link flags : "
+msgstr ""
+
+#: readelf.c:20590
+#, fuzzy, c-format
+msgid " Header flags: 0x%08x\n"
+msgstr "atribute 0x%08x:\n"
+
+#: readelf.c:20592
+#, c-format
+msgid " Image id : %.*s\n"
+msgstr ""
+
+#: readelf.c:20597
+#, fuzzy, c-format
+msgid " Image name: %.*s\n"
+msgstr " %#06x: Nume: %s"
+
+#: readelf.c:20601
+#, c-format
+msgid " Global symbol table name: %.*s\n"
+msgstr ""
+
+#: readelf.c:20605
+#, c-format
+msgid " Image id: %.*s\n"
+msgstr ""
+
+#: readelf.c:20609
+#, c-format
+msgid " Linker id: %.*s\n"
+msgstr ""
+
+#: readelf.c:20619
+#, c-format
+msgid " <corrupt - data size is too small>\n"
+msgstr ""
+
+#: readelf.c:20620
+msgid "corrupt IA64 note: data size is too small\n"
+msgstr ""
+
+#: readelf.c:20787 readelf.c:20795
+#, c-format
+msgid " Applies to region from %#lx to %#lx\n"
+msgstr ""
+
+#: readelf.c:20790 readelf.c:20797
+#, c-format
+msgid " Applies to region from %#lx\n"
+msgstr ""
+
+#: readelf.c:20817
+#, c-format
+msgid " <invalid description size: %lx>\n"
+msgstr ""
+
+#: readelf.c:20818
+#, c-format
+msgid " <invalid descsz>"
+msgstr ""
+
+#: readelf.c:20844
+#, c-format
+msgid "Gap in build notes detected from %#lx to %#lx\n"
+msgstr ""
+
+#: readelf.c:20847 readelf.c:20858
+#, c-format
+msgid " Applies to region from %#lx"
+msgstr ""
+
+#: readelf.c:20852 readelf.c:20863
+#, c-format
+msgid " to %#lx"
+msgstr ""
+
+#: readelf.c:20869
+#, c-format
+msgid " (%s)"
+msgstr ""
+
+#: readelf.c:20890 readelf.c:20905
+#, c-format
+msgid "corrupt name field in GNU build attribute note: size = %ld\n"
+msgstr ""
+
+#: readelf.c:20891 readelf.c:20906
+msgid " <corrupt name>"
+msgstr ""
+
+#: readelf.c:20925
+#, c-format
+msgid "unrecognised attribute type in name field: %d\n"
+msgstr ""
+
+#: readelf.c:20926
+#, fuzzy
+msgid "<unknown name type>"
+msgstr "tip BB necunoscut"
+
+#: readelf.c:20936
+msgid "<version>"
+msgstr ""
+
+#: readelf.c:20941
+#, fuzzy
+msgid "<stack prot>"
+msgstr "depășire stivă"
+
+#: readelf.c:20946
+msgid "<relro>"
+msgstr ""
+
+#: readelf.c:20951
+#, fuzzy
+msgid "<stack size>"
+msgstr "setează dimensiune .data"
+
+#: readelf.c:20956
+msgid "<tool>"
+msgstr ""
+
+#: readelf.c:20961
+msgid "<ABI>"
+msgstr ""
+
+#: readelf.c:20966
+msgid "<PIC>"
+msgstr ""
+
+#: readelf.c:20971
+msgid "<short enum>"
+msgstr ""
+
+#: readelf.c:20990
+#, fuzzy, c-format
+msgid "unrecognised byte in name field: %d\n"
+msgstr "atribut secțiune nerecunoscut `%s'"
+
+#: readelf.c:20991
+#, fuzzy, c-format
+msgid "<unknown:_%d>"
+msgstr "<necunoscut: %x>"
+
+#: readelf.c:21003
+#, c-format
+msgid "attribute does not have an expected type (%c)\n"
+msgstr ""
+
+#: readelf.c:21007
+#, c-format
+msgid "corrupt name field: namesz: %lu but parsing gets to %ld\n"
+msgstr ""
+
+#: readelf.c:21034
+#, c-format
+msgid "corrupt numeric name field: too many bytes in the value: %x\n"
+msgstr ""
+
+#: readelf.c:21212
+#, fuzzy, c-format
+msgid " description data: "
+msgstr "date secțiune"
+
+#: readelf.c:21254
msgid "notes"
msgstr "note"
-#: readelf.c:11453
+#: readelf.c:21266
+#, c-format
+msgid "Displaying notes found in: %s\n"
+msgstr ""
+
+#: readelf.c:21268
+#, c-format
+msgid "Displaying notes found at file offset 0x%08lx with length 0x%08lx:\n"
+msgstr ""
+
+#: readelf.c:21280
+#, c-format
+msgid "Corrupt note: alignment %ld, expecting 4 or 8\n"
+msgstr ""
+
+#: readelf.c:21286
+#, c-format
+msgid " %-20s %-10s\tDescription\n"
+msgstr ""
+
+#: readelf.c:21286
+msgid "Owner"
+msgstr ""
+
+#: readelf.c:21286
+#, fuzzy
+msgid "Data size"
+msgstr "setează dimensiune .data"
+
+#: readelf.c:21304 readelf.c:21333
+#, c-format
+msgid "Corrupt note: only %ld byte remains, not enough for a full note\n"
+msgid_plural "Corrupt note: only %ld bytes remain, not enough for a full note\n"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: readelf.c:21361
+#, c-format
+msgid "note with invalid namesz and/or descsz found at offset 0x%lx\n"
+msgstr ""
+
+#: readelf.c:21363
+#, c-format
+msgid " type: 0x%lx, namesize: 0x%08lx, descsize: 0x%08lx, alignment: %u\n"
+msgstr ""
+
+#: readelf.c:21381
+msgid "Out of memory allocating space for inote name\n"
+msgstr ""
+
+#: readelf.c:21441
+#, fuzzy
+msgid "v850 notes"
+msgstr "note"
+
+#: readelf.c:21448
#, c-format
msgid ""
"\n"
-"Notes at offset 0x%08lx with length 0x%08lx:\n"
+"Displaying contents of Renesas V850 notes section at offset 0x%lx with length 0x%lx:\n"
+msgstr ""
+
+#: readelf.c:21465
+#, c-format
+msgid "Corrupt note: name size is too big: %lx\n"
msgstr ""
-#: readelf.c:11455
+#: readelf.c:21475
#, c-format
-msgid " Owner\t\tData size\tDescription\n"
+msgid "corrupt descsz found in note at offset 0x%lx\n"
msgstr ""
-#: readelf.c:11474
+#: readelf.c:21477 readelf.c:21490
#, c-format
-msgid "corrupt note found at offset %x into core notes\n"
+msgid " type: 0x%lx, namesize: 0x%lx, descsize: 0x%lx\n"
msgstr ""
-#: readelf.c:11476
+#: readelf.c:21488
#, c-format
-msgid " type: %x, namesize: %08lx, descsize: %08lx\n"
+msgid "corrupt namesz found in note at offset 0x%lx\n"
msgstr ""
-#: readelf.c:11574
+#: readelf.c:21567
+#, c-format
+msgid "No notes found in linked file '%s'.\n"
+msgstr ""
+
+#: readelf.c:21570
+#, fuzzy, c-format
+msgid "No notes found file.\n"
+msgstr " (octeți în fișier)\n"
+
+#: readelf.c:21579
#, c-format
-msgid "No note segments present in the core file.\n"
+msgid " Unknown GNU attribute: %s\n"
msgstr ""
-#: readelf.c:11653
+#: readelf.c:21727
msgid ""
"This instance of readelf has been built without support for a\n"
"64 bit data type and so it cannot read 64 bit ELF files.\n"
msgstr ""
-#: readelf.c:11700 readelf.c:12059
+#: readelf.c:21897
#, c-format
msgid "%s: Failed to read file header\n"
msgstr ""
-#: readelf.c:11713
+#: readelf.c:21912
#, c-format
msgid ""
"\n"
"File: %s\n"
msgstr ""
"\n"
-"Fiºier: %s\n"
+"Fișier: %s\n"
-#: readelf.c:11876 readelf.c:11897 readelf.c:11934 readelf.c:12014
+#: readelf.c:22073
#, c-format
-msgid "%s: failed to read archive header\n"
+msgid "%s: unable to dump the index as none was found\n"
msgstr ""
-#: readelf.c:11887
+#: readelf.c:22080
#, c-format
-msgid "%s: failed to skip archive symbol table\n"
+msgid "Index of archive %s: (%lu entries, 0x%lx bytes in the symbol table)\n"
msgstr ""
-#: readelf.c:11919
+#: readelf.c:22104
#, c-format
-msgid "%s: failed to read string table\n"
+msgid "Contents of binary %s at offset "
msgstr ""
-#: readelf.c:11955
+#: readelf.c:22116
#, c-format
-msgid "%s: invalid archive string table offset %lu\n"
+msgid "%s: end of the symbol table reached before the end of the index\n"
msgstr ""
-#: readelf.c:11971
+#: readelf.c:22135
#, c-format
-msgid "%s: bad archive file name\n"
-msgstr ""
+msgid "%s: %ld byte remains in the symbol table, but without corresponding entries in the index table\n"
+msgid_plural "%s: %ld bytes remain in the symbol table, but without corresponding entries in the index table\n"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: readelf.c:22148
+#, fuzzy, c-format
+msgid "%s: failed to seek back to start of object files in the archive\n"
+msgstr " m[ab] - mută fișier(e) în arhivă\n"
-#: readelf.c:12003
+#: readelf.c:22240 readelf.c:22359
#, c-format
-msgid "%s: failed to seek to next archive header\n"
+msgid "Input file '%s' is not readable.\n"
msgstr ""
-#: readelf.c:12037
+#: readelf.c:22268
+#, fuzzy, c-format
+msgid "%s: contains corrupt thin archive: %s\n"
+msgstr "%s: Nu pot deschide arhiva de intrare %s\n"
+
+#: readelf.c:22286
#, c-format
-msgid "'%s': No such file\n"
+msgid "%s: failed to seek to archive member.\n"
msgstr ""
-#: readelf.c:12039
-#, c-format
-msgid "Could not locate '%s'. System error message: %s\n"
+#: readelf.c:22351
+msgid "Out of memory allocating file data structure\n"
msgstr ""
-#: readelf.c:12046
+#: readelf.c:22388
#, c-format
-msgid "'%s' is not an ordinary file\n"
-msgstr "'%s' nu este un fiºier obiºnuit\n"
+msgid "File %s is not an archive so its index cannot be displayed.\n"
+msgstr ""
-#: readelf.c:12053
-#, c-format
-msgid "Input file '%s' is not readable.\n"
+#: readelf.c:22459
+msgid "Nothing to do.\n"
msgstr ""
-#: rename.c:127
+#: rename.c:200
#, c-format
msgid "%s: cannot set time: %s"
msgstr "%s: nu pot seta timpul: %s"
-#. We have to clean up here.
-#: rename.c:162 rename.c:200
-#, c-format
-msgid "unable to rename '%s' reason: %s"
-msgstr "nu pot redenumi '%s' motiv: %s"
-
-#: rename.c:208
-#, c-format
-msgid "unable to copy file '%s' reason: %s"
-msgstr "nu pot copia fiºierul '%s' motiv: %s"
+#: rename.c:219
+#, fuzzy, c-format
+msgid "unable to copy file '%s'; reason: %s"
+msgstr "nu pot copia fișierul '%s' motiv: %s"
-#: resbin.c:132
+#: resbin.c:119
#, c-format
msgid "%s: not enough binary data"
msgstr ""
-#: resbin.c:148
+#: resbin.c:135
msgid "null terminated unicode string"
msgstr ""
-#: resbin.c:175 resbin.c:181
+#: resbin.c:162 resbin.c:168
msgid "resource ID"
msgstr ""
-#: resbin.c:221
+#: resbin.c:207
msgid "cursor"
msgstr ""
-#: resbin.c:253 resbin.c:260
+#: resbin.c:238 resbin.c:245
msgid "menu header"
msgstr ""
-#: resbin.c:270
+#: resbin.c:254
msgid "menuex header"
msgstr ""
-#: resbin.c:274
+#: resbin.c:258
msgid "menuex offset"
msgstr ""
-#: resbin.c:281
+#: resbin.c:263
#, c-format
msgid "unsupported menu version %d"
msgstr ""
-#: resbin.c:306 resbin.c:321 resbin.c:384
+#: resbin.c:288 resbin.c:303 resbin.c:365
msgid "menuitem header"
msgstr ""
-#: resbin.c:414
+#: resbin.c:395
msgid "menuitem"
msgstr "articol-meniu"
-#: resbin.c:453 resbin.c:481
+#: resbin.c:432 resbin.c:460
msgid "dialog header"
msgstr "antet dialog"
-#: resbin.c:471
+#: resbin.c:450
#, c-format
msgid "unexpected DIALOGEX version %d"
msgstr ""
-#: resbin.c:516
+#: resbin.c:495
msgid "dialog font point size"
msgstr ""
-#: resbin.c:524
+#: resbin.c:503
msgid "dialogex font information"
msgstr ""
-#: resbin.c:550 resbin.c:568
+#: resbin.c:529 resbin.c:547
msgid "dialog control"
msgstr ""
-#: resbin.c:560
+#: resbin.c:539
msgid "dialogex control"
msgstr ""
-#: resbin.c:589
+#: resbin.c:568
msgid "dialog control end"
msgstr ""
-#: resbin.c:601
+#: resbin.c:578
msgid "dialog control data"
msgstr ""
-#: resbin.c:642
+#: resbin.c:618
msgid "stringtable string length"
msgstr ""
-#: resbin.c:652
+#: resbin.c:628
msgid "stringtable string"
msgstr ""
-#: resbin.c:683
+#: resbin.c:658
msgid "fontdir header"
msgstr ""
-#: resbin.c:696
+#: resbin.c:672
msgid "fontdir"
msgstr ""
-#: resbin.c:712
+#: resbin.c:689
msgid "fontdir device name"
msgstr ""
-#: resbin.c:718
+#: resbin.c:695
msgid "fontdir face name"
-msgstr "nume faþã fontdir"
+msgstr "nume față fontdir"
-#: resbin.c:759
+#: resbin.c:735
msgid "accelerator"
msgstr "accelerator"
-#: resbin.c:819
+#: resbin.c:794
msgid "group cursor header"
msgstr ""
-#: resbin.c:823
+#: resbin.c:798 resrc.c:1350
#, c-format
msgid "unexpected group cursor type %d"
msgstr ""
-#: resbin.c:838
+#: resbin.c:813
msgid "group cursor"
msgstr ""
-#: resbin.c:875
+#: resbin.c:849
msgid "group icon header"
msgstr ""
-#: resbin.c:879
+#: resbin.c:853 resrc.c:1297
#, c-format
msgid "unexpected group icon type %d"
msgstr ""
-#: resbin.c:894
+#: resbin.c:868
msgid "group icon"
-msgstr "grup pictogramã"
+msgstr "grup pictogramă"
-#: resbin.c:957 resbin.c:1174
+#: resbin.c:932
msgid "unexpected version string"
msgstr ""
-#: resbin.c:989
+#: resbin.c:964
#, c-format
-msgid "version length %d does not match resource length %lu"
+msgid "version length %lu greater than resource length %lu"
msgstr ""
-#: resbin.c:993
+#: resbin.c:968
#, c-format
msgid "unexpected version type %d"
msgstr ""
-#: resbin.c:1005
+#: resbin.c:983
#, c-format
-msgid "unexpected fixed version information length %d"
+msgid "unexpected fixed version information length %ld"
msgstr ""
-#: resbin.c:1008
+#: resbin.c:986
msgid "fixed version info"
msgstr ""
-#: resbin.c:1012
+#: resbin.c:990
#, c-format
msgid "unexpected fixed version signature %lu"
msgstr ""
-#: resbin.c:1016
+#: resbin.c:994
#, c-format
msgid "unexpected fixed version info version %lu"
msgstr ""
-#: resbin.c:1045
+#: resbin.c:1023
msgid "version var info"
msgstr ""
-#: resbin.c:1062
+#: resbin.c:1040
#, c-format
-msgid "unexpected stringfileinfo value length %d"
+msgid "unexpected stringfileinfo value length %ld"
+msgstr ""
+
+#: resbin.c:1057
+msgid "version stringtable"
msgstr ""
-#: resbin.c:1072
+#: resbin.c:1065
#, c-format
-msgid "unexpected version stringtable value length %d"
+msgid "unexpected version stringtable value length %ld"
msgstr ""
-#: resbin.c:1106
+#: resbin.c:1082
+msgid "version string"
+msgstr ""
+
+#: resbin.c:1097
#, c-format
-msgid "unexpected version string length %d != %d + %d"
+msgid "unexpected version string length %ld != %ld + %ld"
msgstr ""
-#: resbin.c:1117
+#: resbin.c:1104
#, c-format
-msgid "unexpected version string length %d < %d"
+msgid "unexpected version string length %ld < %ld"
msgstr ""
-#: resbin.c:1134
+#: resbin.c:1130
#, c-format
-msgid "unexpected varfileinfo value length %d"
+msgid "unexpected varfileinfo value length %ld"
msgstr ""
-#: resbin.c:1153
+#: resbin.c:1149
msgid "version varfileinfo"
msgstr ""
-#: resbin.c:1168
+#: resbin.c:1164
#, c-format
-msgid "unexpected version value length %d"
+msgid "unexpected version value length %ld"
+msgstr ""
+
+#: resbin.c:1174
+msgid "nul bytes found in version string"
msgstr ""
-#: rescoff.c:126
+#: resbin.c:1177
+#, c-format
+msgid "unexpected version string character: %x"
+msgstr ""
+
+#: rescoff.c:123
msgid "filename required for COFF input"
msgstr ""
-#: rescoff.c:143
+#: rescoff.c:140
#, c-format
msgid "%s: no resource section"
msgstr ""
#: rescoff.c:150
-msgid "can't read resource section"
+#, c-format
+msgid "%s: .rsrc section is bigger than the file!"
msgstr ""
-#: rescoff.c:174
+#: rescoff.c:178
#, c-format
msgid "%s: %s: address out of bounds"
msgstr ""
-#: rescoff.c:190
+#: rescoff.c:199
+msgid "Resources nest too deep"
+msgstr ""
+
+#: rescoff.c:202
msgid "directory"
msgstr "director"
-#: rescoff.c:218
+#: rescoff.c:230
msgid "named directory entry"
msgstr "intrare directorul numit"
-#: rescoff.c:227
+#: rescoff.c:239
msgid "directory entry name"
msgstr ""
-#: rescoff.c:247
+#: rescoff.c:253
+#, fuzzy
+msgid "resource name"
+msgstr "resursă ID"
+
+#: rescoff.c:264
msgid "named subdirectory"
msgstr "subdirectorul numit"
-#: rescoff.c:255
+#: rescoff.c:272
msgid "named resource"
-msgstr "resursã numitã"
+msgstr "resursă numită"
-#: rescoff.c:270
+#: rescoff.c:287
msgid "ID directory entry"
msgstr "intrare director ID"
-#: rescoff.c:287
+#: rescoff.c:304
msgid "ID subdirectory"
msgstr "subdirector ID"
-#: rescoff.c:295
+#: rescoff.c:312
msgid "ID resource"
-msgstr "resursã ID"
+msgstr "resursă ID"
-#: rescoff.c:318
+#: rescoff.c:337
msgid "resource type unknown"
msgstr ""
-#: rescoff.c:321
+#: rescoff.c:340
msgid "data entry"
msgstr ""
-#: rescoff.c:329
+#: rescoff.c:348
msgid "resource data"
msgstr ""
-#: rescoff.c:334
+#: rescoff.c:353
msgid "resource data size"
msgstr ""
-#: rescoff.c:427
+#: rescoff.c:448
msgid "filename required for COFF output"
msgstr ""
-#: rescoff.c:719
+#: rescoff.c:732
msgid "can't get BFD_RELOC_RVA relocation type"
msgstr ""
-#: resrc.c:238 resrc.c:309
+#: resrc.c:256 resrc.c:328
#, c-format
msgid "can't open temporary file `%s': %s"
-msgstr "nu pot deschide fiºierul temporar `%s': %s"
+msgstr "nu pot deschide fișierul temporar `%s': %s"
-#: resrc.c:244
+#: resrc.c:262
#, c-format
msgid "can't redirect stdout: `%s': %s"
msgstr ""
-#: resrc.c:260
-#, c-format
-msgid "%s %s: %s"
-msgstr "%s %s: %s"
-
-#: resrc.c:305
+#: resrc.c:324
#, c-format
msgid "can't execute `%s': %s"
msgstr "nu pot executa `%s': %s"
-#: resrc.c:314
+#: resrc.c:333
#, c-format
msgid "Using temporary file `%s' to read preprocessor output\n"
msgstr ""
-#: resrc.c:321
+#: resrc.c:340
#, c-format
msgid "can't popen `%s': %s"
msgstr "nu pot popen `%s': %s"
-#: resrc.c:323
+#: resrc.c:342
#, c-format
msgid "Using popen to read preprocessor output\n"
msgstr ""
-#: resrc.c:362
+#: resrc.c:408
#, c-format
msgid "Tried `%s'\n"
msgstr ""
-#: resrc.c:373
+#: resrc.c:419
#, c-format
msgid "Using `%s'\n"
msgstr "Folosesc `%s'\n"
-#: resrc.c:529
-#, c-format
-msgid "%s:%d: %s\n"
-msgstr "%s:%d: %s\n"
+#: resrc.c:603
+#, fuzzy
+msgid "preprocessing failed."
+msgstr "Procesez fișierul def: %s"
-#: resrc.c:537
+#: resrc.c:634
#, c-format
msgid "%s: unexpected EOF"
msgstr ""
-#: resrc.c:586
+#: resrc.c:683
#, c-format
msgid "%s: read of %lu returned %lu"
msgstr ""
-#: resrc.c:624 resrc.c:1134
+#: resrc.c:722 resrc.c:1497
#, c-format
msgid "stat failed on bitmap file `%s': %s"
msgstr ""
-#: resrc.c:675
+#: resrc.c:773
#, c-format
msgid "cursor file `%s' does not contain cursor data"
msgstr ""
-#: resrc.c:707 resrc.c:1003
+#: resrc.c:805 resrc.c:1205
#, c-format
msgid "%s: fseek to %lu failed: %s"
msgstr ""
-#: resrc.c:831
+#: resrc.c:931
msgid "help ID requires DIALOGEX"
msgstr ""
-#: resrc.c:833
+#: resrc.c:933
msgid "control data requires DIALOGEX"
msgstr ""
-#: resrc.c:861
+#: resrc.c:961
#, c-format
msgid "stat failed on font file `%s': %s"
-msgstr "stat a eºuat pentru fiºierul de font `%s': %s"
+msgstr "stat a eșuat pentru fișierul de font `%s': %s"
-#: resrc.c:972
+#: resrc.c:1174
#, c-format
msgid "icon file `%s' does not contain icon data"
-msgstr "fiºier pictogramã `%s' nu conþine date pictogramã"
+msgstr "fișier pictogramă `%s' nu conține date pictogramă"
-#: resrc.c:1273 resrc.c:1308
+#: resrc.c:1723 resrc.c:1758
#, c-format
msgid "stat failed on file `%s': %s"
-msgstr "stat a eºuat pentru fiºierul `%s': %s"
+msgstr "stat a eșuat pentru fișierul `%s': %s"
-#: resrc.c:1494
+#: resrc.c:1957
#, c-format
msgid "can't open `%s' for output: %s"
msgstr ""
-#: size.c:81
+#: size.c:89
#, c-format
msgid " Displays the sizes of sections inside binary files\n"
msgstr ""
-#: size.c:82
+#: size.c:90
#, c-format
msgid " If no input file(s) are specified, a.out is assumed\n"
msgstr ""
-#: size.c:83
+#: size.c:91
#, c-format
msgid ""
" The options are:\n"
-" -A|-B --format={sysv|berkeley} Select output style (default is %s)\n"
+" -A|-B|-G --format={sysv|berkeley|gnu} Select output style (default is %s)\n"
" -o|-d|-x --radix={8|10|16} Display numbers in octal, decimal or hex\n"
" -t --totals Display the total sizes (Berkeley only)\n"
+" --common Display total size for *COM* syms\n"
" --target=<bfdname> Set the binary file format\n"
+" @<file> Read options from <file>\n"
" -h --help Display this information\n"
" -v --version Display the program's version\n"
"\n"
msgstr ""
-#: size.c:153
+#: size.c:174
#, c-format
msgid "invalid argument to --format: %s"
msgstr "argument invalid pentru --format: %s"
-#: size.c:180
+#: size.c:201
#, c-format
msgid "Invalid radix: %s\n"
-msgstr "Rdãcinã (radix) invalidã: %s\n"
+msgstr "Rdăcină (radix) invalidă: %s\n"
+
+#: srconv.c:130
+msgid "Checksum failure"
+msgstr ""
+
+#. FIXME: Return error status.
+#: srconv.c:142
+msgid "Failed to write checksum"
+msgstr ""
-#: srconv.c:1722
+#: srconv.c:182
+#, c-format
+msgid "Unsupported integer write size: %d"
+msgstr ""
+
+#. FIXME: Return error status.
+#: srconv.c:268
+msgid "Failed to write TR block"
+msgstr ""
+
+#: srconv.c:359
+#, c-format
+msgid "Unrecognized H8300 sub-architecture: %ld"
+msgstr ""
+
+#: srconv.c:377
+#, c-format
+msgid "Unsupported architecture: %d"
+msgstr ""
+
+#: srconv.c:831
+#, fuzzy, c-format
+msgid "Unrecognised type: %d"
+msgstr "Formă nerecunoscută: %d\n"
+
+#: srconv.c:957
+#, fuzzy, c-format
+msgid "Unrecognised coff symbol type: %d"
+msgstr "Formă nerecunoscută: %d\n"
+
+#: srconv.c:1019 srconv.c:1119
+#, c-format
+msgid "Unrecognised coff symbol visibility: %d"
+msgstr ""
+
+#: srconv.c:1045 srconv.c:1090
+#, fuzzy, c-format
+msgid "Unrecognised coff symbol location: %d"
+msgstr "Secțiune depanare nerecunoscută: %s\n"
+
+#. FIXME: Return error status.
+#: srconv.c:1424
+msgid "Failed to write CS struct"
+msgstr ""
+
+#: srconv.c:1694
#, c-format
msgid "Convert a COFF object file into a SYSROFF object file\n"
msgstr ""
-#: srconv.c:1723
+#: srconv.c:1695
#, c-format
msgid ""
" The options are:\n"
" -q --quick (Obsolete - ignored)\n"
" -n --noprescan Do not perform a scan to convert commons into defs\n"
" -d --debug Display information about what is being done\n"
+" @<file> Read options from <file>\n"
" -h --help Display this information\n"
" -v --version Print the program's version number\n"
msgstr ""
-#: srconv.c:1866
+#: srconv.c:1784
+msgid "input and output files must be different"
+msgstr ""
+
+#: srconv.c:1840
#, c-format
msgid "unable to open output file %s"
-msgstr "nu pot deschide fiºierul de ieºire %s"
+msgstr "nu pot deschide fișierul de ieșire %s"
-#: stabs.c:330 stabs.c:1708
+#: stabs.c:344 stabs.c:1772
msgid "numeric overflow"
msgstr ""
-#: stabs.c:340
+#: stabs.c:354
#, c-format
msgid "Bad stab: %s\n"
msgstr ""
-#: stabs.c:348
+#: stabs.c:362
#, c-format
msgid "Warning: %s: %s\n"
msgstr "Avertisment: %s: %s\n"
-#: stabs.c:458
+#: stabs.c:474
#, c-format
msgid "N_LBRAC not within function\n"
msgstr ""
-#: stabs.c:497
+#: stabs.c:513
#, c-format
msgid "Too many N_RBRACs\n"
msgstr ""
-#: stabs.c:738
+#: stabs.c:746
msgid "unknown C++ encoded name"
msgstr ""
#. Complain and keep going, so compilers can invent new
#. cross-reference types.
-#: stabs.c:1253
+#: stabs.c:1307
msgid "unrecognized cross reference type"
-msgstr "tip referinþã încruciºatã nerecunoscutã"
+msgstr "tip referință încrucișată nerecunoscută"
#. Does this actually ever happen? Is that why we are worrying
#. about dealing with it rather than just calling error_type?
-#: stabs.c:1800
+#: stabs.c:1864
msgid "missing index type"
msgstr ""
-#: stabs.c:2114
+#: stabs.c:2215
msgid "unknown virtual character for baseclass"
msgstr ""
-#: stabs.c:2132
+#: stabs.c:2236
msgid "unknown visibility character for baseclass"
msgstr ""
-#: stabs.c:2318
+#: stabs.c:2441
msgid "unnamed $vb type"
-msgstr "Tip $vb fãrã nume"
+msgstr "Tip $vb fără nume"
-#: stabs.c:2324
+#: stabs.c:2447
msgid "unrecognized C++ abbreviation"
msgstr ""
-#: stabs.c:2400
+#: stabs.c:2532
msgid "unknown visibility character for field"
msgstr ""
-#: stabs.c:2652
+#: stabs.c:2801
msgid "const/volatile indicator missing"
msgstr ""
-#: stabs.c:2888
-#, c-format
-msgid "No mangling for \"%s\"\n"
-msgstr ""
-
-#: stabs.c:3188
+#: stabs.c:3342
msgid "Undefined N_EXCL"
msgstr ""
-#: stabs.c:3268
+#: stabs.c:3422
#, c-format
msgid "Type file number %d out of range\n"
msgstr ""
-#: stabs.c:3273
+#: stabs.c:3427
#, c-format
msgid "Type index number %d out of range\n"
-msgstr "Numãr index tip %d în afara domeniului\n"
+msgstr "Număr index tip %d în afara domeniului\n"
-#: stabs.c:3352
+#: stabs.c:3507
#, c-format
msgid "Unrecognized XCOFF type %d\n"
msgstr ""
-#: stabs.c:3644
+#: stabs.c:3798
#, c-format
msgid "bad mangled name `%s'\n"
msgstr ""
-#: stabs.c:3739
+#: stabs.c:3893
#, c-format
msgid "no argument types in mangled string\n"
msgstr ""
-#: stabs.c:5093
+#: stabs.c:5241
#, c-format
msgid "Demangled name is not a function\n"
msgstr ""
-#: stabs.c:5135
+#: stabs.c:5283
#, c-format
msgid "Unexpected type in v3 arglist demangling\n"
msgstr ""
-#: stabs.c:5202
+#: stabs.c:5355
#, c-format
msgid "Unrecognized demangle component %d\n"
msgstr ""
-#: stabs.c:5254
+#: stabs.c:5407
#, c-format
msgid "Failed to print demangled template\n"
msgstr ""
-#: stabs.c:5334
+#: stabs.c:5487
#, c-format
msgid "Couldn't get demangled builtin type\n"
msgstr ""
-#: stabs.c:5383
+#: stabs.c:5536
#, c-format
msgid "Unexpected demangled varargs\n"
msgstr ""
-#: stabs.c:5390
+#: stabs.c:5543
#, c-format
msgid "Unrecognized demangled builtin type\n"
msgstr ""
-#: strings.c:206
-#, c-format
-msgid "invalid number %s"
-msgstr "numãr invalid %s"
-
-#: strings.c:643
+#: strings.c:229 strings.c:316
#, c-format
msgid "invalid integer argument %s"
-msgstr "argument întreg invalid %s"
+msgstr "argument întreg invalid %s"
-#: strings.c:652
+#: strings.c:319
+#, fuzzy, c-format
+msgid "invalid minimum string length %d"
+msgstr "lungime șir invalidă"
+
+#: strings.c:390
+#, fuzzy, c-format
+msgid "%s: Reading section %s failed: %s"
+msgstr "%s: nu pot crea secțiune de depanare: %s"
+
+#: strings.c:1313
#, c-format
msgid " Display printable strings in [file(s)] (stdin by default)\n"
msgstr ""
-#: strings.c:653
+#: strings.c:1317
+#, c-format
+msgid ""
+" -a - --all Scan the entire file, not just the data section [default]\n"
+" -d --data Only scan the data sections in the file\n"
+msgstr ""
+
+#: strings.c:1321
#, c-format
msgid ""
-" The options are:\n"
" -a - --all Scan the entire file, not just the data section\n"
+" -d --data Only scan the data sections in the file [default]\n"
+msgstr ""
+
+#: strings.c:1325
+#, c-format
+msgid ""
" -f --print-file-name Print the name of the file before each string\n"
-" -n --bytes=[number] Locate & print any NUL-terminated sequence of at\n"
-" -<number> least [number] characters (default 4).\n"
+" -n <number> Locate & print any sequence of at least <number>\n"
+" --bytes=<number> displayable characters. (The default is 4).\n"
" -t --radix={o,d,x} Print the location of the string in base 8, 10 or 16\n"
+" -w --include-all-whitespace Include all whitespace as valid string characters\n"
" -o An alias for --radix=o\n"
" -T --target=<BFDNAME> Specify the binary file format\n"
" -e --encoding={s,S,b,l,B,L} Select character size and endianness:\n"
" s = 7-bit, S = 8-bit, {b,l} = 16-bit, {B,L} = 32-bit\n"
+" --unicode={default|show|invalid|hex|escape|highlight}\n"
+" -U {d|s|i|x|e|h} Specify how to treat UTF-8 encoded unicode characters\n"
+" -s --output-separator=<string> String used to separate strings in output.\n"
+" @<file> Read options from <file>\n"
" -h --help Display this information\n"
-" -v --version Print the program's version number\n"
+" -v -V --version Print the program's version number\n"
+msgstr ""
+
+#: sysdump.c:51
+msgid "*undefined*"
+msgstr ""
+
+#. PR 28564
+#: sysdump.c:57 sysdump.c:66
+msgid "*corrupt*"
+msgstr ""
+
+#: sysdump.c:131
+#, c-format
+msgid "SUM IS %x\n"
+msgstr ""
+
+#. PR 17512: file: id:000001,src:000002,op:flip1,pos:45.
+#. Prevent infinite loops re-reading beyond the end of the buffer.
+#: sysdump.c:169
+msgid "ICE: getINT: Out of buffer space"
+msgstr ""
+
+#: sysdump.c:194
+#, fuzzy, c-format
+msgid "Unsupported read size: %d"
+msgstr "atribute suportate: %s"
+
+#: sysdump.c:505
+#, c-format
+msgid "GOT A %x\n"
+msgstr ""
+
+#: sysdump.c:523
+#, c-format
+msgid "WANTED %x!!\n"
+msgstr ""
+
+#: sysdump.c:541
+msgid "SYMBOL INFO"
+msgstr ""
+
+#: sysdump.c:559
+msgid "DERIVED TYPE"
+msgstr ""
+
+#: sysdump.c:616
+msgid "MODULE***\n"
msgstr ""
#: sysdump.c:649
@@ -4954,70 +12635,220 @@ msgid ""
" -v --version Print the program's version number\n"
msgstr ""
-#: sysdump.c:715
+#: sysdump.c:716
#, c-format
msgid "cannot open input file %s"
-msgstr "nu pot deschide fiºierul de intrare %s"
+msgstr "nu pot deschide fișierul de intrare %s"
-#: version.c:35
+#: unwind-ia64.c:180
+#, fuzzy, c-format
+msgid "Unknown code 0x%02x\n"
+msgstr "cod TY necunoscut"
+
+#. PR 18420.
+#: unwind-ia64.c:366
#, c-format
-msgid "Copyright 2005 Free Software Foundation, Inc.\n"
+msgid ""
+"\n"
+"ERROR: unwind length too long (0x%lx > 0x%lx)\n"
+"\n"
+msgstr ""
+
+#: unwind-ia64.c:578
+#, c-format
+msgid "Bad uleb128\n"
+msgstr ""
+
+#: unwind-ia64.c:592
+#, c-format
+msgid "\t<corrupt X1>\n"
+msgstr ""
+
+#: unwind-ia64.c:616
+#, c-format
+msgid "\t<corrupt X2>\n"
+msgstr ""
+
+#: unwind-ia64.c:642
+#, c-format
+msgid "\t<corrupt X3>\n"
+msgstr ""
+
+#: unwind-ia64.c:670
+#, c-format
+msgid "\t<corrupt X4>\n"
+msgstr ""
+
+#: unwind-ia64.c:712
+#, c-format
+msgid "\t<corrupt R2>\n"
+msgstr ""
+
+#: unwind-ia64.c:758
+#, c-format
+msgid "\t<corrupt P2>\n"
+msgstr ""
+
+#: unwind-ia64.c:773
+#, c-format
+msgid "\t<corrupt P3>\n"
+msgstr ""
+
+#: unwind-ia64.c:832
+#, c-format
+msgid "\t<corrupt P5>\n"
+msgstr ""
+
+#: unwind-ia64.c:939
+#, c-format
+msgid "\t<corrupt P8>\n"
+msgstr ""
+
+#: unwind-ia64.c:1014
+#, c-format
+msgid "\t<corrupt P9>\n"
+msgstr ""
+
+#: unwind-ia64.c:1026
+#, c-format
+msgid "\t<corrupt P10>\n"
+msgstr ""
+
+#: unwind-ia64.c:1157
+#, c-format
+msgid "\t<corrupt IA64 descriptor>\n"
+msgstr ""
+
+#: version.c:34
+#, fuzzy, c-format
+msgid "Copyright (C) 2022 Free Software Foundation, Inc.\n"
msgstr "Copyright 2005 Free Software Foundation, Inc.\n"
-#: version.c:36
+#: version.c:35
#, c-format
msgid ""
"This program is free software; you may redistribute it under the terms of\n"
-"the GNU General Public License. This program has absolutely no warranty.\n"
+"the GNU General Public License version 3 or (at your option) any later version.\n"
+"This program has absolutely no warranty.\n"
+msgstr ""
+
+#: windmc.c:189
+#, c-format
+msgid "can't create %s file `%s' for output.\n"
+msgstr ""
+
+#: windmc.c:197
+#, fuzzy, c-format
+msgid "Usage: %s [option(s)] [input-file]\n"
+msgstr "Folosire: %s [opțiune(i)] [adresă(e)]\n"
+
+#: windmc.c:199
+#, c-format
+msgid ""
+" The options are:\n"
+" -a --ascii_in Read input file as ASCII file\n"
+" -A --ascii_out Write binary messages as ASCII\n"
+" -b --binprefix .bin filename is prefixed by .mc filename_ for uniqueness.\n"
+" -c --customflag Set custom flags for messages\n"
+" -C --codepage_in=<val> Set codepage when reading mc text file\n"
+" -d --decimal_values Print values to text files decimal\n"
+" -e --extension=<extension> Set header extension used on export header file\n"
+" -F --target <target> Specify output target for endianness.\n"
+" -h --headerdir=<directory> Set the export directory for headers\n"
+" -u --unicode_in Read input file as UTF16 file\n"
+" -U --unicode_out Write binary messages as UFT16\n"
+" -m --maxlength=<val> Set the maximal allowed message length\n"
+" -n --nullterminate Automatic add a zero termination to strings\n"
+" -o --hresult_use Use HRESULT definition instead of status code definition\n"
+" -O --codepage_out=<val> Set codepage used for writing text file\n"
+" -r --rcdir=<directory> Set the export directory for rc files\n"
+" -x --xdbg=<directory> Where to create the .dbg C include file\n"
+" that maps message ID's to their symbolic name.\n"
+msgstr ""
+
+#: windmc.c:219
+#, c-format
+msgid ""
+" -H --help Print this help message\n"
+" -v --verbose Verbose - tells you what it's doing\n"
+" -V --version Print version information\n"
msgstr ""
-#: windres.c:204
+#: windmc.c:260 windres.c:404
+#, c-format
+msgid "%s: warning: "
+msgstr "%s: avertisment: "
+
+#: windmc.c:261
+#, c-format
+msgid "A codepage was specified switch `%s' and UTF16.\n"
+msgstr ""
+
+#: windmc.c:262
+#, c-format
+msgid "\tcodepage settings are ignored.\n"
+msgstr ""
+
+#: windmc.c:306
+msgid "try to add a ill language."
+msgstr ""
+
+#: windmc.c:1115
+#, fuzzy, c-format
+msgid "unable to open file `%s' for input.\n"
+msgstr "nu pot deschide fișierul de ieșire %s"
+
+#: windmc.c:1123
+#, fuzzy, c-format
+msgid "unable to read contents of %s"
+msgstr "Nu pot citi în cei 0x%x octeți ai lui %s\n"
+
+#: windmc.c:1135
+msgid "input file does not seems to be UFT16.\n"
+msgstr ""
+
+#: windres.c:214
#, c-format
msgid "can't open %s `%s': %s"
msgstr "nu pot deschide %s `%s': %s"
-#: windres.c:370
+#: windres.c:383
#, c-format
msgid ": expected to be a directory\n"
-msgstr ": am aºteptat sã fie un director\n"
+msgstr ": am așteptat să fie un director\n"
-#: windres.c:382
+#: windres.c:395
#, c-format
msgid ": expected to be a leaf\n"
msgstr ""
-#: windres.c:391
-#, c-format
-msgid "%s: warning: "
-msgstr "%s: avertisment: "
-
-#: windres.c:393
+#: windres.c:406
#, c-format
msgid ": duplicate value\n"
msgstr ""
-#: windres.c:543
+#: windres.c:558
#, c-format
msgid "unknown format type `%s'"
msgstr "tip format necunoscut `%s'"
-#: windres.c:544
+#: windres.c:559
#, c-format
msgid "%s: supported formats:"
msgstr ""
#. Otherwise, we give up.
-#: windres.c:627
+#: windres.c:642
#, c-format
msgid "can not determine type of file `%s'; use the -J option"
msgstr ""
-#: windres.c:639
+#: windres.c:654
#, c-format
msgid "Usage: %s [option(s)] [input-file] [output-file]\n"
msgstr ""
-#: windres.c:641
+#: windres.c:656
#, c-format
msgid ""
" The options are:\n"
@@ -5027,30 +12858,33 @@ msgid ""
" -O --output-format=<format> Specify output format\n"
" -F --target=<target> Specify COFF target\n"
" --preprocessor=<program> Program to use to preprocess rc file\n"
+" --preprocessor-arg=<arg> Additional preprocessor argument\n"
" -I --include-dir=<dir> Include directory when preprocessing rc file\n"
" -D --define <sym>[=<val>] Define SYM when preprocessing rc file\n"
" -U --undefine <sym> Undefine SYM when preprocessing rc file\n"
" -v --verbose Verbose - tells you what it's doing\n"
+" -c --codepage=<codepage> Specify default codepage\n"
" -l --language=<val> Set language when reading rc file\n"
" --use-temp-file Use a temporary file instead of popen to read\n"
" the preprocessor output\n"
" --no-use-temp-file Use popen (default)\n"
msgstr ""
-#: windres.c:657
+#: windres.c:674
#, c-format
msgid " --yydebug Turn on parser debugging\n"
msgstr ""
-#: windres.c:660
+#: windres.c:677
#, c-format
msgid ""
" -r Ignored for compatibility with rc\n"
+" @<file> Read options from <file>\n"
" -h --help Print this help message\n"
" -V --version Print version information\n"
msgstr ""
-#: windres.c:664
+#: windres.c:682
#, c-format
msgid ""
"FORMAT is one of rc, res, or coff, and is deduced from the file name\n"
@@ -5058,34 +12892,39 @@ msgid ""
"No input-file is stdin, default rc. No output-file is stdout, default rc.\n"
msgstr ""
-#: windres.c:800
+#: windres.c:845
+#, fuzzy
+msgid "invalid codepage specified.\n"
+msgstr "nici o operațiune specificată"
+
+#: windres.c:860
msgid "invalid option -f\n"
-msgstr "opþiune invalidã -f\n"
+msgstr "opțiune invalidă -f\n"
-#: windres.c:805
+#: windres.c:865
msgid "No filename following the -fo option.\n"
msgstr ""
-#: windres.c:863
+#: windres.c:960
#, c-format
msgid "Option -I is deprecated for setting the input format, please use -J instead.\n"
msgstr ""
-#: windres.c:981
+#: windres.c:1073
msgid "no resources"
-msgstr "nici o resursã"
+msgstr "nici o resursă"
-#: wrstabs.c:354 wrstabs.c:1915
+#: wrstabs.c:353 wrstabs.c:1926
#, c-format
msgid "string_hash_lookup failed: %s"
msgstr ""
-#: wrstabs.c:635
+#: wrstabs.c:638
#, c-format
msgid "stab_int_type: bad size %u"
msgstr ""
-#: wrstabs.c:1393
+#: wrstabs.c:1396
#, c-format
msgid "%s: warning: unknown size for field `%s' in struct"
msgstr ""
diff --git a/binutils/po/sr.po b/binutils/po/sr.po
index d50a5751873..ac0e3d2f527 100644
--- a/binutils/po/sr.po
+++ b/binutils/po/sr.po
@@ -1,13 +1,13 @@
# Serbian translation of binutils.
# Copyright © 2020 Free Software Foundation, Inc.
# This file is distributed under the same license as the binutils package.
-# МироÑлав Ðиколић <miroslavnikolic@rocketmail.com>, 2014–2021.
+# МироÑлав Ðиколић <miroslavnikolic@rocketmail.com>, 2014–2022.
msgid ""
msgstr ""
-"Project-Id-Version: binutils-2.36.90\n"
-"Report-Msgid-Bugs-To: bug-binutils@gnu.org\n"
-"POT-Creation-Date: 2021-07-03 15:06+0100\n"
-"PO-Revision-Date: 2021-07-24 07:17+0200\n"
+"Project-Id-Version: binutils-2.37.90\n"
+"Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n"
+"POT-Creation-Date: 2022-01-22 12:22+0000\n"
+"PO-Revision-Date: 2022-02-19 07:08+0200\n"
"Last-Translator: МироÑлав Ðиколић <miroslavnikolic@rocketmail.com>\n"
"Language-Team: Serbian <(nothing)>\n"
"Language: sr\n"
@@ -55,8 +55,8 @@ msgstr ""
"Опције Ñу:\n"
" @<датотека> Чита опције из <датотеке>\n"
" -a --addresses Приказује адреÑе\n"
-" -b --target=<бфдназив> Подешава Ð·Ð°Ð¿Ð¸Ñ Ð±Ð¸Ð½Ð°Ñ€Ð½Ðµ датотеке\n"
-" -e --exe=<извршна> Подешава назив улазне датотеке (оÑновно је „a.out“)\n"
+" -b --target=<бфдназив> ПоÑтавља Ð·Ð°Ð¿Ð¸Ñ Ð±Ð¸Ð½Ð°Ñ€Ð½Ðµ датотеке\n"
+" -e --exe=<извршна> ПоÑтавља назив улазне датотеке (оÑновно је „a.out“)\n"
" -i --inlines Развија надовезане функције\n"
" -j --section=<назив> Чита помераје одноÑне на одељке умеÑто адреÑа\n"
" -p --pretty-print Чини излаз лакшим за читање људима\n"
@@ -69,9 +69,9 @@ msgstr ""
" -v --version Приказује издање програма\n"
"\n"
-#: addr2line.c:109 ar.c:357 ar.c:394 coffdump.c:471 dlltool.c:3715
-#: dllwrap.c:518 elfedit.c:952 objcopy.c:697 objcopy.c:752 readelf.c:4842
-#: size.c:109 srconv.c:1704 strings.c:706 sysdump.c:649 windmc.c:227
+#: addr2line.c:109 ar.c:359 ar.c:396 coffdump.c:471 dlltool.c:3713
+#: dllwrap.c:518 elfedit.c:976 objcopy.c:697 objcopy.c:752 readelf.c:5165
+#: size.c:109 srconv.c:1704 strings.c:1343 sysdump.c:655 windmc.c:227
#: windres.c:690
#, c-format
msgid "Report bugs to %s\n"
@@ -108,227 +108,232 @@ msgstr "%s: не могу да добавим адреÑе из архиве"
msgid "%s: cannot find section %s"
msgstr "%s: не могу да пронађем одељак %s"
-#: addr2line.c:442 ar.c:756 dlltool.c:3239 nm.c:1807 objcopy.c:6029
-#: objdump.c:5211 size.c:151 strings.c:289 windmc.c:958 windres.c:816
+#: addr2line.c:442 ar.c:758 dlltool.c:3237 nm.c:2051 objcopy.c:6036
+#: objdump.c:5372 size.c:151 strings.c:340 windmc.c:958 windres.c:816
msgid "fatal error: libbfd ABI mismatch"
msgstr "кобна грешка: „libbfd ABI“ не одговара"
-#: addr2line.c:469 nm.c:1833 objdump.c:5258 readelf.c:5115
+#: addr2line.c:469 nm.c:2077 objdump.c:5419 readelf.c:5438
#, c-format
msgid "unknown demangling style `%s'"
msgstr "непознат Ñтил раÑкршчавања „%s“"
-#: ar.c:274
+#: ar.c:275
#, c-format
msgid "no entry %s in archive\n"
msgstr "нема уноÑа „%s“ у архиви\n"
-#: ar.c:288
+#: ar.c:289
#, c-format
msgid "Usage: %s [emulation options] [-]{dmpqrstx}[abcDfilMNoOPsSTuvV] [--plugin <name>] [member-name] [count] archive-file file...\n"
msgstr "Употреба: %s [опције опонашања] [-]{dmpqrstx}[abcDfilMNoOPsSTuvV] [--plugin <назив>] [назив-члана] [број] датотека-архиве датотека...\n"
-#: ar.c:294
+#: ar.c:295
#, c-format
msgid "Usage: %s [emulation options] [-]{dmpqrstx}[abcDfilMNoOPsSTuvV] [member-name] [count] archive-file file...\n"
msgstr "Употреба: %s [опције опонашања] [-]{dmpqrstx}[abcDfilMNoOPsSTuvV] [назив-члана] [број] датотека-архиве датотека...\n"
-#: ar.c:302
+#: ar.c:303
#, c-format
msgid " %s -M [<mri-script]\n"
msgstr " %s -M [<мри-ÑпиÑ]\n"
-#: ar.c:303
+#: ar.c:304
#, c-format
msgid " commands:\n"
msgstr " наредбе:\n"
-#: ar.c:304
+#: ar.c:305
#, c-format
msgid " d - delete file(s) from the archive\n"
msgstr " d – брише датотеку(е) из архиве\n"
-#: ar.c:305
+#: ar.c:306
#, c-format
msgid " m[ab] - move file(s) in the archive\n"
msgstr " m[ab] – премешта датотеку(е) у архиву\n"
-#: ar.c:306
+#: ar.c:307
#, c-format
msgid " p - print file(s) found in the archive\n"
msgstr " p – иÑпиÑује датотеку(е) пронађену(е) у архиви\n"
-#: ar.c:307
+#: ar.c:308
#, c-format
msgid " q[f] - quick append file(s) to the archive\n"
msgstr " q[f] – брзо додаје датотеку(е) у архиву\n"
-#: ar.c:308
+#: ar.c:309
#, c-format
msgid " r[ab][f][u] - replace existing or insert new file(s) into the archive\n"
msgstr " r[ab][f][u] – замењује поÑтојећу(е) или умеће нову(е) датотеку(е) у архиву\n"
-#: ar.c:309
+#: ar.c:310
#, c-format
msgid " s - act as ranlib\n"
msgstr " s – делује као библиотека покретања\n"
-#: ar.c:310
+#: ar.c:311
#, c-format
msgid " t[O][v] - display contents of the archive\n"
msgstr " t[O][v] – приказује Ñадржај архиве\n"
-#: ar.c:311
+#: ar.c:312
#, c-format
msgid " x[o] - extract file(s) from the archive\n"
msgstr " x[o] – извлачи датотеку(е) из архиве\n"
-#: ar.c:312
+#: ar.c:313
#, c-format
msgid " command specific modifiers:\n"
msgstr " наредбено поÑебни измењивачи:\n"
-#: ar.c:313
+#: ar.c:314
#, c-format
msgid " [a] - put file(s) after [member-name]\n"
msgstr " [a] – поÑтавља датотеку(е) након [назив-члана]\n"
-#: ar.c:314
+#: ar.c:315
#, c-format
msgid " [b] - put file(s) before [member-name] (same as [i])\n"
msgstr " [b] – поÑтавља датотеку(е) пре [назив-члана] (иÑто као [i])\n"
-#: ar.c:317
+#: ar.c:318
#, c-format
msgid " [D] - use zero for timestamps and uids/gids (default)\n"
msgstr " [D] – кориÑти нулу за временÑке ознаке и јиб-ове/гиб-ове (оÑновно)\n"
-#: ar.c:319
+#: ar.c:320
#, c-format
msgid " [U] - use actual timestamps and uids/gids\n"
msgstr " [U] – кориÑти тренутне временÑке ознаке и јиб-ове/гиб-ове\n"
-#: ar.c:324
+#: ar.c:325
#, c-format
msgid " [D] - use zero for timestamps and uids/gids\n"
msgstr " [D] – кориÑти нулу за временÑке ознаке и јиб-ове/гиб-ове\n"
-#: ar.c:326
+#: ar.c:327
#, c-format
msgid " [U] - use actual timestamps and uids/gids (default)\n"
msgstr " [U] – кориÑти тренутне временÑке ознаке и јиб-ове/гиб-ове (оÑновно)\n"
-#: ar.c:329
+#: ar.c:330
#, c-format
msgid " [N] - use instance [count] of name\n"
msgstr " [N] – кориÑти примерак [број] назива\n"
-#: ar.c:330
+#: ar.c:331
#, c-format
msgid " [f] - truncate inserted file names\n"
msgstr " [f] – Ñкраћује називе уметнутих датотека\n"
-#: ar.c:331
+#: ar.c:332
#, c-format
msgid " [P] - use full path names when matching\n"
msgstr " [P] – кориÑти пуне називе путања приликом упоређивања\n"
-#: ar.c:332
+#: ar.c:333
#, c-format
msgid " [o] - preserve original dates\n"
msgstr " [o] – задржава изворне датуме\n"
-#: ar.c:333
+#: ar.c:334
#, c-format
msgid " [O] - display offsets of files in the archive\n"
msgstr " [O] – приказује помераје датотека у архиви\n"
-#: ar.c:334
+#: ar.c:335
#, c-format
msgid " [u] - only replace files that are newer than current archive contents\n"
msgstr " [u] – замењује Ñамо датотеке које Ñу новије од тренутног Ñадржаја архиве\n"
-#: ar.c:335
+#: ar.c:336
#, c-format
msgid " generic modifiers:\n"
msgstr " општи измењивачи:\n"
-#: ar.c:336
+#: ar.c:337
#, c-format
msgid " [c] - do not warn if the library had to be created\n"
msgstr " [c] – не упозорава ако библиотека треба да буде направљена\n"
-#: ar.c:337
+#: ar.c:338
#, c-format
msgid " [s] - create an archive index (cf. ranlib)\n"
msgstr " [s] – прави Ð¸Ð½Ð´ÐµÐºÑ Ð°Ñ€Ñ…Ð¸Ð²Ðµ (видети „ranlib“)\n"
-#: ar.c:338
+#: ar.c:339
#, c-format
msgid " [l <text> ] - specify the dependencies of this library\n"
msgstr " [l <текÑÑ‚> ] – наводи завиÑноÑти ове библиотеке\n"
-#: ar.c:339
+#: ar.c:340
#, c-format
msgid " [S] - do not build a symbol table\n"
msgstr " [S] – не изграђује табелу Ñимбола\n"
-#: ar.c:340
+#: ar.c:341
#, c-format
-msgid " [T] - make a thin archive\n"
-msgstr " [T] – прави лаку архиву\n"
+msgid " [T] - deprecated, use --thin instead\n"
+msgstr " [T] – заÑтарело, кориÑтите --thin умеÑто тога\n"
-#: ar.c:341
+#: ar.c:342
#, c-format
msgid " [v] - be verbose\n"
msgstr " [v] – бива опширан\n"
-#: ar.c:342
+#: ar.c:343
#, c-format
msgid " [V] - display the version number\n"
msgstr " [V] – приказује број издања\n"
-#: ar.c:343
+#: ar.c:344
#, c-format
msgid " @<file> - read options from <file>\n"
msgstr " @<датотека> – чита опције из <датотеке>\n"
-#: ar.c:344
+#: ar.c:345
#, c-format
msgid " --target=BFDNAME - specify the target object format as BFDNAME\n"
msgstr " --target=БФДÐÐЗИВ – наводи Ð·Ð°Ð¿Ð¸Ñ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° мете као БФДÐÐЗИВ\n"
-#: ar.c:345
+#: ar.c:346
#, c-format
msgid " --output=DIRNAME - specify the output directory for extraction operations\n"
msgstr " --output=DIRNAME – наводи излазни директоријум за радње извлачења\n"
-#: ar.c:346
+#: ar.c:347
#, c-format
msgid " --record-libdeps=<text> - specify the dependencies of this library\n"
msgstr " --record-libdeps=<текÑÑ‚> – наводи завиÑноÑти ове библиотеке\n"
#: ar.c:348
#, c-format
+msgid " --thin - make a thin archive\n"
+msgstr " --thin – прави лаку архиву\n"
+
+#: ar.c:350
+#, c-format
msgid " optional:\n"
msgstr " опционално:\n"
-#: ar.c:349
+#: ar.c:351
#, c-format
msgid " --plugin <p> - load the specified plugin\n"
msgstr " -plugin <p> – учитава наведени прикључак\n"
-#: ar.c:370
+#: ar.c:372
#, c-format
msgid "Usage: %s [options] archive\n"
msgstr "Употреба: %s [опције] архива\n"
-#: ar.c:371
+#: ar.c:373
#, c-format
msgid " Generate an index to speed access to archives\n"
-msgstr " Ствара Ð¸Ð½Ð´ÐµÐºÑ Ð´Ð° убрза приÑтуп архивама\n"
+msgstr " Створите Ð¸Ð½Ð´ÐµÐºÑ Ð·Ð° убрзање приÑтупа архивама\n"
-#: ar.c:372
+#: ar.c:374
#, c-format
msgid ""
" The options are:\n"
@@ -337,12 +342,12 @@ msgstr ""
" Опције Ñу:\n"
" @<датотека> Чита опције из <датотеке>\n"
-#: ar.c:375
+#: ar.c:377
#, c-format
msgid " --plugin <name> Load the specified plugin\n"
msgstr " --plugin <назив> Учитава наведени прикључак\n"
-#: ar.c:379
+#: ar.c:381
#, c-format
msgid ""
" -D Use zero for symbol map timestamp (default)\n"
@@ -351,7 +356,7 @@ msgstr ""
" -D КориÑти нулу за временÑку онаку мапе Ñимбола (оÑновно)\n"
" -U КориÑти тренутну временÑку ознаку мапе Ñимбола\n"
-#: ar.c:383
+#: ar.c:385
#, c-format
msgid ""
" -D Use zero for symbol map timestamp\n"
@@ -360,7 +365,7 @@ msgstr ""
" -D КориÑти нулу за временÑку онаку мапе Ñимбола\n"
" -U КориÑти тренутну временÑку ознаку мапе Ñимбола (оÑновно)\n"
-#: ar.c:386
+#: ar.c:388
#, c-format
msgid ""
" -t Update the archive's symbol map timestamp\n"
@@ -371,133 +376,133 @@ msgstr ""
" -h --help Приказује ову поруку помоћи\n"
" -V --version ИÑпиÑује податке о издању\n"
-#: ar.c:511
+#: ar.c:513
msgid "two different operation options specified"
msgstr "наведене Ñу две различите опције радње"
-#: ar.c:547
+#: ar.c:549
msgid "libdeps specified more than once"
msgstr "„libdeps“ је наведено више од једном"
-#: ar.c:608 ar.c:683 nm.c:1926
+#: ar.c:610 ar.c:685 nm.c:2188
#, c-format
msgid "sorry - this program has been built without plugin support\n"
msgstr "извините – овај програм је изграђен без подршке за прикључке\n"
-#: ar.c:812
+#: ar.c:814
msgid "no operation specified"
msgstr "није наведена радња"
-#: ar.c:815
+#: ar.c:817
msgid "`u' is only meaningful with the `r' option."
msgstr "„u“ има ÑмиÑла Ñамо Ñа опцијом „r“."
-#: ar.c:818
+#: ar.c:820
msgid "`u' is not meaningful with the `D' option."
msgstr "„u“ има ÑмиÑла Ñамо Ñа опцијом „D“."
-#: ar.c:821
+#: ar.c:823
msgid "`u' modifier ignored since `D' is the default (see `U')"
msgstr "„u“ измењивач је занемарен јер је „D“ оÑновно (видите „U“)"
-#: ar.c:830
+#: ar.c:832
msgid "missing position arg."
msgstr "недоÑтаје аргумент положаја."
-#: ar.c:836
+#: ar.c:838
msgid "`N' is only meaningful with the `x' and `d' options."
msgstr "„N“ има ÑмиÑла Ñамо Ñа опцијама „x“ и „d“."
-#: ar.c:838
+#: ar.c:840
msgid "`N' missing value."
msgstr "„N“ недоÑтајућа вредноÑÑ‚."
-#: ar.c:841
+#: ar.c:843
msgid "Value for `N' must be positive."
msgstr "ВредноÑÑ‚ за „N“ мора бити позитивна."
-#: ar.c:857
+#: ar.c:859
msgid "`x' cannot be used on thin archives."
msgstr "„x“ не може да Ñе кориÑти на лаким архивама."
-#: ar.c:871
+#: ar.c:873
msgid "Cannot create libdeps record."
msgstr "Ðе могу да направим „libdeps“ запиÑ."
-#: ar.c:874
+#: ar.c:876
msgid "Cannot set libdeps record type to binary."
msgstr "Ðе могу да поÑтавим врÑту „libdeps“ запиÑа за извршну."
-#: ar.c:877
+#: ar.c:879
msgid "Cannot set libdeps object format."
msgstr "Ðе могу да поÑтавим формат „libdeps“ објекат."
-#: ar.c:880
+#: ar.c:882
msgid "Cannot make libdeps object writable."
msgstr "Ðе могу да учиним упиÑивим „libdeps“ објекат."
-#: ar.c:883
+#: ar.c:885
msgid "Cannot write libdeps record."
msgstr "Ðе могу да пишем „libdeps“ запиÑ."
-#: ar.c:886
+#: ar.c:888
msgid "Cannot make libdeps object readable."
msgstr "Ðе могу да учиним читљивим „libdeps“ објекат."
-#: ar.c:889
+#: ar.c:891
msgid "Cannot reset libdeps record type."
msgstr "Ðе могу поново да поÑтавим врÑту „libdeps“ запиÑа."
-#: ar.c:950
+#: ar.c:952
#, c-format
msgid "internal error -- this option not implemented"
msgstr "унутрашња грешка –– ова опција није примењена"
-#: ar.c:1019
+#: ar.c:1021
#, c-format
msgid "creating %s"
msgstr "Ñтварам „%s“"
-#: ar.c:1050
+#: ar.c:1052
#, c-format
msgid "Cannot convert existing library %s to thin format"
msgstr "Ðе могу да претворим поÑтојећу библиотеку „%s“ у лаки запиÑ"
-#: ar.c:1056
+#: ar.c:1058
#, c-format
msgid "Cannot convert existing thin library %s to normal format"
msgstr "Ðе могу да претворим лаку библиотеку „%s“ у обичан запиÑ"
-#: ar.c:1088 ar.c:1185 ar.c:1507 objcopy.c:3606
+#: ar.c:1090 ar.c:1190 ar.c:1512 objcopy.c:3612
#, c-format
msgid "internal stat error on %s"
msgstr "унутрашња грешка добављања података над „%s“"
-#: ar.c:1107 ar.c:1211
+#: ar.c:1109 ar.c:1216
#, c-format
msgid "%s is not a valid archive"
msgstr "%s није иÑправна архива"
-#: ar.c:1135
+#: ar.c:1137
#, c-format
msgid "illegal output pathname for archive member: %s, using '%s' instead"
msgstr "неиÑправна путања излаза за члана архиве: %s, кориÑтићу „%s“"
-#: ar.c:1259
+#: ar.c:1264
msgid "could not create temporary file whilst writing archive"
msgstr "не могу да Ñтворим привремену датотеку док пишем архиву"
-#: ar.c:1410
+#: ar.c:1415
#, c-format
msgid "No member named `%s'\n"
msgstr "Ðема члана под називом „%s“\n"
-#: ar.c:1460
+#: ar.c:1465
#, c-format
msgid "no entry %s in archive %s!"
msgstr "нема уноÑа „%s“ у архиви „%s“!"
-#: ar.c:1620
+#: ar.c:1625
#, c-format
msgid "%s: no archive map to update"
msgstr "%s: нема мапе архиве за оÑвежавање"
@@ -573,7 +578,7 @@ msgstr " Ðема поÑебних опција опонашања\n"
msgid " emulation options: \n"
msgstr " опције опонашања: \n"
-#: bucomm.c:43 bucomm.c:77
+#: bucomm.c:43 bucomm.c:76
msgid "cause of error unknown"
msgstr "непозната грешка"
@@ -643,17 +648,17 @@ msgstr "<оштећени подаци времена>"
msgid "%s: bad number: %s"
msgstr "%s: лош број: %s"
-#: bucomm.c:607 strings.c:402
+#: bucomm.c:607 strings.c:453
#, c-format
msgid "'%s': No such file"
msgstr "„%s“: Ðема такве датотеке"
-#: bucomm.c:609 strings.c:404
+#: bucomm.c:609 strings.c:455
#, c-format
msgid "Warning: could not locate '%s'. reason: %s"
msgstr "Упозорење : не могу да пронађем „%s“. Разлог: %s"
-#: bucomm.c:613 strings.c:410
+#: bucomm.c:613 strings.c:461
#, c-format
msgid "Warning: '%s' is a directory"
msgstr "Упозорење : „%s“ је директоријум"
@@ -773,7 +778,7 @@ msgstr "СпиÑак Ñимбола"
msgid "Symbol %s, tag %d, number %d"
msgstr "Симбол %s, ознака %d, број %d"
-#: coffdump.c:345 readelf.c:18461 readelf.c:18552
+#: coffdump.c:345 readelf.c:18836 readelf.c:18927
#, c-format
msgid "Type"
msgstr "Ð’Ñ€Ñта"
@@ -827,7 +832,7 @@ msgstr "<нема Ñимбола>"
msgid "#sources %d"
msgstr "#извори %d"
-#: coffdump.c:462 sysdump.c:642
+#: coffdump.c:462 sysdump.c:648
#, c-format
msgid "Usage: %s [option(s)] in-file\n"
msgstr "Употреба: %s [опције] ул-датотека\n"
@@ -852,7 +857,7 @@ msgstr ""
" -V --version Приказује издање програма\n"
"\n"
-#: coffdump.c:532 srconv.c:1793 sysdump.c:705
+#: coffdump.c:532 srconv.c:1793 sysdump.c:711
msgid "no input file specified"
msgstr "није наведена улазна датотека"
@@ -1000,7 +1005,7 @@ msgstr "Ðаиђох на одредницу променљиве без доÑÐ
msgid "%s: is not a COFF format file"
msgstr "%s: није датотека у „COFF“ запиÑу"
-#: cxxfilt.c:124 nm.c:324 objdump.c:390
+#: cxxfilt.c:124 nm.c:379 objdump.c:405
#, c-format
msgid "Report bugs to %s.\n"
msgstr "Грешке пријавите на „%s“.\n"
@@ -1094,7 +1099,7 @@ msgstr "debug_find_named_type: нема јединице текућег попу
msgid "debug_get_real_type: circular debug information for %s\n"
msgstr "debug_get_real_type: кружни подаци прочишћавања за „%s\n"
-#: debug.c:2484
+#: debug.c:2490
msgid "debug_write_type: illegal type encountered"
msgstr "debug_write_type: наиђох на неиÑправну врÑту"
@@ -1122,437 +1127,437 @@ msgstr "Датотека одреднице је обрађена"
msgid "Syntax error in def file %s:%d"
msgstr "Садржајна грешка у датотеци одреднице „%s“:%d"
-#: dlltool.c:1034
+#: dlltool.c:1032
#, c-format
msgid "%s: Path components stripped from image name, '%s'."
msgstr "%s: СаÑтојци путање Ñу иÑцепљени из назива Ñлике, „%s“."
-#: dlltool.c:1052
+#: dlltool.c:1050
#, c-format
msgid "NAME: %s base: %x"
msgstr "ÐÐЗИВ: %s оÑнова: %x"
-#: dlltool.c:1055 dlltool.c:1076
+#: dlltool.c:1053 dlltool.c:1074
msgid "Can't have LIBRARY and NAME"
msgstr "Ðе могу да имам БИБЛИОТЕКУ и ÐÐЗИВ"
-#: dlltool.c:1073
+#: dlltool.c:1071
#, c-format
msgid "LIBRARY: %s base: %x"
msgstr "БИБЛИОТЕКÐ: %s оÑнова: %x"
-#: dlltool.c:1228
+#: dlltool.c:1226
#, c-format
msgid "VERSION %d.%d\n"
msgstr "ИЗДÐЊЕ %d.%d\n"
-#: dlltool.c:1276
+#: dlltool.c:1274
#, c-format
msgid "run: %s %s"
msgstr "покрени: %s %s"
-#: dlltool.c:1317 resrc.c:288
+#: dlltool.c:1315 resrc.c:288
#, c-format
msgid "wait: %s"
msgstr "чекај: %s"
-#: dlltool.c:1322 dllwrap.c:416 resrc.c:293
+#: dlltool.c:1320 dllwrap.c:416 resrc.c:293
#, c-format
msgid "subprocess got fatal signal %d"
msgstr "Ð¿Ð¾Ñ‚Ð¿Ñ€Ð¾Ñ†ÐµÑ Ñ˜Ðµ добио кобни Ñигнал %d"
-#: dlltool.c:1328 dllwrap.c:423 resrc.c:300
+#: dlltool.c:1326 dllwrap.c:423 resrc.c:300
#, c-format
msgid "%s exited with status %d"
msgstr "%s је изашао Ñа Ñтањем %d"
-#: dlltool.c:1359
+#: dlltool.c:1357
#, c-format
msgid "Sucking in info from %s section in %s"
msgstr "ИÑиÑавам податке из %s одељка у %s"
-#: dlltool.c:1499
+#: dlltool.c:1497
#, c-format
msgid "Excluding symbol: %s"
msgstr "Избацујем Ñимбол: %s"
-#: dlltool.c:1588 dlltool.c:1599 nm.c:1172 nm.c:1183 nm.c:1193
+#: dlltool.c:1586 dlltool.c:1597 nm.c:1416 nm.c:1427 nm.c:1437
#, c-format
msgid "%s: no symbols"
msgstr "%s: нема Ñимбола"
#. FIXME: we ought to read in and block out the base relocations.
-#: dlltool.c:1625
+#: dlltool.c:1623
#, c-format
msgid "Done reading %s"
msgstr "Завршио Ñам читање „%s“"
-#: dlltool.c:1635
+#: dlltool.c:1633
#, c-format
msgid "Unable to open object file: %s: %s"
msgstr "Ðе могу да отворим датотеку објекта: %s: %s"
-#: dlltool.c:1638
+#: dlltool.c:1636
#, c-format
msgid "Scanning object file %s"
msgstr "Скенирам датотеку објекта „%s“"
-#: dlltool.c:1658
+#: dlltool.c:1656
#, c-format
msgid "Cannot produce mcore-elf dll from archive file: %s"
msgstr "Ðе могу да произведем „dll mcore-elf“ из датотеке архиве: %s"
-#: dlltool.c:1760
+#: dlltool.c:1758
msgid "Adding exports to output file"
msgstr "Додајем извозе у датотеку излаза"
-#: dlltool.c:1812
+#: dlltool.c:1810
msgid "Added exports to output file"
msgstr "Додао Ñам извозе у излазну датотеку"
-#: dlltool.c:1980
+#: dlltool.c:1978
#, c-format
msgid "Generating export file: %s"
msgstr "Стварам датотеку извоза: %s"
-#: dlltool.c:1985
+#: dlltool.c:1983
#, c-format
msgid "Unable to open temporary assembler file: %s"
msgstr "Ðе могу да отворим привремену датотеку аÑемблера: %s"
-#: dlltool.c:1990
+#: dlltool.c:1988
#, c-format
msgid "Opened temporary file: %s"
msgstr "Привремена датотека је отворена: %s"
-#: dlltool.c:2166
+#: dlltool.c:2164
msgid "failed to read the number of entries from base file"
msgstr "ниÑам уÑпео да прочитам број уноÑа из оÑновне датотеке"
-#: dlltool.c:2217
+#: dlltool.c:2215
msgid "Generated exports file"
msgstr "Датотека извоза је Ñтворена"
-#: dlltool.c:2375
+#: dlltool.c:2373
#, c-format
msgid "bfd_open failed open stub file: %s: %s"
msgstr "бфд_отвори није уÑпео да отвори привидну датотеку: %s: %s"
-#: dlltool.c:2379
+#: dlltool.c:2377
#, c-format
msgid "Creating stub file: %s"
msgstr "Правим привидну датотеку: %s"
-#: dlltool.c:2693
+#: dlltool.c:2691
#, c-format
msgid "bfd_open failed reopen stub file: %s: %s"
msgstr "бфд_отвори није уÑпео поново да отвори привидну датотеку: %s: %s"
-#: dlltool.c:2707 dlltool.c:2786
+#: dlltool.c:2705 dlltool.c:2784
#, c-format
msgid "failed to open temporary head file: %s"
msgstr "ниÑам уÑпео да отворим привремену прву датотеку: %s"
-#: dlltool.c:2771 dlltool.c:2861
+#: dlltool.c:2769 dlltool.c:2859
#, c-format
msgid "failed to open temporary head file: %s: %s"
msgstr "ниÑам уÑпео да отворим привремену прву датотеку: %s: %s"
-#: dlltool.c:2876
+#: dlltool.c:2874
#, c-format
msgid "failed to open temporary tail file: %s"
msgstr "ниÑам уÑпео да отворим привремену поÑледњу датотеку: %s"
-#: dlltool.c:2912
+#: dlltool.c:2910
#, c-format
msgid "failed to open temporary tail file: %s: %s"
msgstr "ниÑам уÑпео да отворим привремену поÑледњу датотеку: %s: %s"
-#: dlltool.c:2935
+#: dlltool.c:2933
#, c-format
msgid "Can't create .lib file: %s: %s"
msgstr "Ðе могу да направим датотеку „.lib“: %s: %s"
-#: dlltool.c:2939
+#: dlltool.c:2937
#, c-format
msgid "Creating library file: %s"
msgstr "Правим датотеку библиотеке: %s"
-#: dlltool.c:3026 dlltool.c:3032
+#: dlltool.c:3024 dlltool.c:3030
#, c-format
msgid "cannot delete %s: %s"
msgstr "не могу да обришем „%s“: %s"
-#: dlltool.c:3038
+#: dlltool.c:3036
msgid "Created lib file"
msgstr "Ðаправљена је библ датотека"
-#: dlltool.c:3244
+#: dlltool.c:3242
#, c-format
msgid "Can't open .lib file: %s: %s"
msgstr "Ðе могу да отворим датотеку „.lib“: %s: %s"
-#: dlltool.c:3252 dlltool.c:3274
+#: dlltool.c:3250 dlltool.c:3272
#, c-format
msgid "%s is not a library"
msgstr "%s није библиотека"
-#: dlltool.c:3292
+#: dlltool.c:3290
#, c-format
msgid "Import library `%s' specifies two or more dlls"
msgstr "Библиотека увоза „%s“ наводи два или више ДЛЛ-а"
-#: dlltool.c:3303
+#: dlltool.c:3301
#, c-format
msgid "Unable to determine dll name for `%s' (not an import library?)"
msgstr "Ðе могу да одредим длл назив за „%s“ (није библиотека увоза?)"
-#: dlltool.c:3529
+#: dlltool.c:3527
#, c-format
msgid "Warning, ignoring duplicate EXPORT %s %d,%d"
msgstr "Упозорење, занемарујем двоÑтруко ИЗВОЗ %s %d,%d"
-#: dlltool.c:3535
+#: dlltool.c:3533
#, c-format
msgid "Error, duplicate EXPORT with ordinals: %s"
msgstr "Грешка двоÑтруки ИЗВОЗ Ñа редним бројевима: %s"
-#: dlltool.c:3638
+#: dlltool.c:3636
msgid "Processing definitions"
msgstr "Обрађујем одреднице"
-#: dlltool.c:3665
+#: dlltool.c:3663
msgid "Processed definitions"
msgstr "Обрађене одреднице"
#. xgetext:c-format
-#: dlltool.c:3672 dllwrap.c:477
+#: dlltool.c:3670 dllwrap.c:477
#, c-format
msgid "Usage %s <option(s)> <object-file(s)>\n"
msgstr "Употреба %s <опције> <датотека-објкета>\n"
#. xgetext:c-format
-#: dlltool.c:3674
+#: dlltool.c:3672
#, c-format
msgid " -m --machine <machine> Create as DLL for <machine>. [default: %s]\n"
msgstr " -m --machine <машина> Прави као ДЛЛ за <машину>. [оÑновно је: %s]\n"
-#: dlltool.c:3675
+#: dlltool.c:3673
#, c-format
msgid " possible <machine>: arm[_interwork], i386, mcore[-elf]{-le|-be}, thumb\n"
msgstr " могућа <машина>: arm[_interwork], i386, mcore[-elf]{-le|-be}, thumb\n"
-#: dlltool.c:3676
+#: dlltool.c:3674
#, c-format
msgid " -e --output-exp <outname> Generate an export file.\n"
msgstr " -e --output-exp <назив-излаза> Ствара датотеку извоза.\n"
-#: dlltool.c:3677
+#: dlltool.c:3675
#, c-format
msgid " -l --output-lib <outname> Generate an interface library.\n"
msgstr " -l --output-lib <назив-излаза> Ствара библиотеку Ñучеља.\n"
-#: dlltool.c:3678
+#: dlltool.c:3676
#, c-format
msgid " -y --output-delaylib <outname> Create a delay-import library.\n"
msgstr " -y --output-delaylib <назив-излаза> Ствара библиотеку кашњења-увоза.\n"
-#: dlltool.c:3679
+#: dlltool.c:3677
#, c-format
msgid " -a --add-indirect Add dll indirects to export file.\n"
msgstr " -a --add-indirect Додаје „длл“ поÑредно у датотеку извоза.\n"
-#: dlltool.c:3680
+#: dlltool.c:3678
#, c-format
msgid " -D --dllname <name> Name of input dll to put into interface lib.\n"
msgstr " -D --dllname <назив> Ðазив улазне длл за Ñтављање у библиотеку Ñучеља.\n"
-#: dlltool.c:3681
+#: dlltool.c:3679
#, c-format
msgid " -d --input-def <deffile> Name of .def file to be read in.\n"
msgstr " -d --input-def <дефотека> Ðазив „.def“ датотеке за читање.\n"
-#: dlltool.c:3682
+#: dlltool.c:3680
#, c-format
msgid " -z --output-def <deffile> Name of .def file to be created.\n"
msgstr " -z --output-def <дефотека> Ðазив „.def“ датотеке за Ñтварање.\n"
-#: dlltool.c:3683
+#: dlltool.c:3681
#, c-format
msgid " --export-all-symbols Export all symbols to .def\n"
msgstr " --export-all-symbols Извози Ñве Ñимболе у „.def“\n"
-#: dlltool.c:3684
+#: dlltool.c:3682
#, c-format
msgid " --no-export-all-symbols Only export listed symbols\n"
msgstr " --no-export-all-symbols Извози Ñамо иÑпиÑане Ñимболе\n"
-#: dlltool.c:3685
+#: dlltool.c:3683
#, c-format
msgid " --exclude-symbols <list> Don't export <list>\n"
msgstr " --exclude-symbols <ÑпиÑак> Ðе извози <ÑпиÑак>\n"
-#: dlltool.c:3686
+#: dlltool.c:3684
#, c-format
msgid " --no-default-excludes Clear default exclude symbols\n"
msgstr " --no-default-excludes ЧиÑти оÑновне Ñимболе иÑкључивања\n"
-#: dlltool.c:3687
+#: dlltool.c:3685
#, c-format
msgid " -b --base-file <basefile> Read linker generated base file.\n"
msgstr " -b --base-file <fichier_base> Чита датотеку оÑнове Ñтворену Ñвезивачем.\n"
-#: dlltool.c:3688
+#: dlltool.c:3686
#, c-format
msgid " -x --no-idata4 Don't generate idata$4 section.\n"
msgstr " -x --no-idata4 Ðе прави одељак „idata$4“.\n"
-#: dlltool.c:3689
+#: dlltool.c:3687
#, c-format
msgid " -c --no-idata5 Don't generate idata$5 section.\n"
msgstr " -c --no-idata5 Ðе прави одељак „idata$5“.\n"
-#: dlltool.c:3690
+#: dlltool.c:3688
#, c-format
msgid " --use-nul-prefixed-import-tables Use zero prefixed idata$4 and idata$5.\n"
msgstr " --use-nul-prefixed-import-tables КориÑти „idata$4“ и „idata$5“ Ñа префикÑом нуле.\n"
-#: dlltool.c:3691
+#: dlltool.c:3689
#, c-format
msgid " -U --add-underscore Add underscores to all symbols in interface library.\n"
msgstr " -U --add-underscore Додаје подвлаке Ñвим Ñимболима у библиотеци Ñучеља.\n"
-#: dlltool.c:3692
+#: dlltool.c:3690
#, c-format
msgid " --add-stdcall-underscore Add underscores to stdcall symbols in interface library.\n"
msgstr " --add-stdcall-underscore Додаје подвлаке Ñимболима Ñтандардног позива у библиотеци Ñучеља.\n"
-#: dlltool.c:3693
+#: dlltool.c:3691
#, c-format
msgid " --no-leading-underscore All symbols shouldn't be prefixed by an underscore.\n"
msgstr " --no-leading-underscore Сви Ñимболи не требају имати подвлаку као префикÑ.\n"
-#: dlltool.c:3694
+#: dlltool.c:3692
#, c-format
msgid " --leading-underscore All symbols should be prefixed by an underscore.\n"
msgstr " --leading-underscore Сви Ñимболи требају имати подвлаку као префикÑ.\n"
-#: dlltool.c:3695
+#: dlltool.c:3693
#, c-format
msgid " -k --kill-at Kill @<n> from exported names.\n"
msgstr " -k --kill-at Убија @<n> из извезених назива.\n"
-#: dlltool.c:3696
+#: dlltool.c:3694
#, c-format
msgid " -A --add-stdcall-alias Add aliases without @<n>.\n"
msgstr " -A --add-stdcall-alias Додаје пÑеудониме без @<n>.\n"
-#: dlltool.c:3697
+#: dlltool.c:3695
#, c-format
msgid " -p --ext-prefix-alias <prefix> Add aliases with <prefix>.\n"
msgstr " -p --axd-prefix-alias <префикÑ> Додаје пÑеудониме Ñа <префикÑом>.\n"
-#: dlltool.c:3698
+#: dlltool.c:3696
#, c-format
msgid " -S --as <name> Use <name> for assembler.\n"
msgstr " -S --as <назив> КориÑти <назив> за аÑемблера.\n"
-#: dlltool.c:3699
+#: dlltool.c:3697
#, c-format
msgid " -f --as-flags <flags> Pass <flags> to the assembler.\n"
msgstr " -f --as-flags <опције> ПроÑлеђује <опције> у аÑемблер.\n"
-#: dlltool.c:3700
+#: dlltool.c:3698
#, c-format
msgid " -C --compat-implib Create backward compatible import library.\n"
msgstr " -C --compat-implib Ствара повратно ÑаглаÑну библиотеку увоза.\n"
-#: dlltool.c:3701
+#: dlltool.c:3699
#, c-format
msgid " -n --no-delete Keep temp files (repeat for extra preservation).\n"
msgstr " -n --no-delete Задржава привремене датотеке (понавља зарад додатнпог очувања).\n"
-#: dlltool.c:3702
+#: dlltool.c:3700
#, c-format
msgid " -t --temp-prefix <prefix> Use <prefix> to construct temp file names.\n"
msgstr " -t --temp-prefix <префикÑ> КориÑти <префикÑ> да изгради називе привремених датотека.\n"
-#: dlltool.c:3703
+#: dlltool.c:3701
#, c-format
msgid " -I --identify <implib> Report the name of the DLL associated with <implib>.\n"
msgstr " -I --identify <библувз> Даје назив ДЛЛ-а придруженог <библувз>-а.\n"
-#: dlltool.c:3704
+#: dlltool.c:3702
#, c-format
msgid " --identify-strict Causes --identify to report error when multiple DLLs.\n"
msgstr " --identify-strict Доводи до тога да „--identify“ да грешку када има више ДЛЛ-а.\n"
-#: dlltool.c:3705
+#: dlltool.c:3703
#, c-format
msgid " -v --verbose Be verbose.\n"
msgstr " -v --verbose Бива опширан.\n"
-#: dlltool.c:3706
+#: dlltool.c:3704
#, c-format
msgid " -V --version Display the program version.\n"
msgstr " -V --version Приказује издање програма.\n"
-#: dlltool.c:3707
+#: dlltool.c:3705
#, c-format
msgid " -h --help Display this information.\n"
msgstr " -h --help Приказује ове податке.\n"
-#: dlltool.c:3708
+#: dlltool.c:3706
#, c-format
msgid " @<file> Read options from <file>.\n"
msgstr " @<датотека> Чита опције из <датотеке>.\n"
-#: dlltool.c:3710
+#: dlltool.c:3708
#, c-format
msgid " -M --mcore-elf <outname> Process mcore-elf object files into <outname>.\n"
msgstr " -M --mcore-elf <излзназив> Обрађује „mcore-elf“ датотеке предмета у <излзназив>.\n"
-#: dlltool.c:3711
+#: dlltool.c:3709
#, c-format
msgid " -L --linker <name> Use <name> as the linker.\n"
msgstr " -L --linker <назив> КориÑти <назив> као Ñвезивача.\n"
-#: dlltool.c:3712
+#: dlltool.c:3710
#, c-format
msgid " -F --linker-flags <flags> Pass <flags> to the linker.\n"
msgstr " -F --linker-flags <опције> ПроÑлеђује <опције> до Ñвезивача.\n"
-#: dlltool.c:3856
+#: dlltool.c:3854
#, c-format
msgid "Unable to open def-file: %s"
msgstr "Ðе могу да отворим датотеку одреднице: %s"
-#: dlltool.c:3861
+#: dlltool.c:3859
#, c-format
msgid "Path components stripped from dllname, '%s'."
msgstr "СаÑтојци путање Ñу иÑцепљени из дллназива, „%s“."
-#: dlltool.c:3909
+#: dlltool.c:3907
#, c-format
msgid "Unable to open base-file: %s"
msgstr "Ðе могу да отворим оÑновну датотеку: %s"
-#: dlltool.c:3944
+#: dlltool.c:3956
#, c-format
msgid "Machine '%s' not supported"
msgstr "Machine „%s“ није подржана"
-#: dlltool.c:4024
+#: dlltool.c:4036
#, c-format
msgid "Warning, machine type (%d) not supported for delayimport."
msgstr "Упозорење, врÑта машине (%d) није подржана за кашњење-увоза."
-#: dlltool.c:4092 dllwrap.c:206
+#: dlltool.c:4104 dllwrap.c:206
#, c-format
msgid "Tried file: %s"
msgstr "Покушах датотеку: %s"
-#: dlltool.c:4099 dllwrap.c:213
+#: dlltool.c:4111 dllwrap.c:213
#, c-format
msgid "Using file: %s"
msgstr "КориÑтим датотеку: %s"
@@ -2120,278 +2125,278 @@ msgstr "Ðепозната ÐТ вредноÑÑ‚: %lx"
msgid "Corrupt attribute block length: %lx\n"
msgstr "Оштећена дужина блока атрибута: %lx\n"
-#: dwarf.c:2094
+#: dwarf.c:2095
#, c-format
msgid "Unable to resolve ref_addr form: uvalue %lx > section size %lx (%s)\n"
-msgstr "Ðе могу да решим „ref_addr“ образац: „uvalue %lx“ > величине одељка %lx (%s)\n"
+msgstr "Ðе могу да решим „ref_addr“ образац: uvalue %lx“ > величине одељка %lx (%s)\n"
-#: dwarf.c:2111
+#: dwarf.c:2112
#, c-format
-msgid "Unable to resolve ref form: uvalue %lx + cu_offset %lx > section size %lx\n"
-msgstr "Ðе могу да решим образац „ref“: „uvalue %lx + cu_offset %lx“ > величине одељка %lx\n"
+msgid "Unable to resolve ref form: uvalue %lx + cu_offset %lx > CU size %lx\n"
+msgstr "Ðе могу да решим образац „ref“: uvalue %lx + cu_offset %lx“ > CU величине %lx\n"
-#: dwarf.c:2121
+#: dwarf.c:2122
#, c-format
msgid "Unexpected form %lx encountered whilst finding abbreviation for type\n"
msgstr "Ðађох неочекивани образац %lx док Ñам тражио Ñкраћеницу за врÑту\n"
-#: dwarf.c:2130
+#: dwarf.c:2131
#, c-format
msgid "Unable to find abbreviations for CU offset %#lx\n"
msgstr "Ðе могу да нађем Ñкраћенице за померај процеÑора %#lx\n"
-#: dwarf.c:2135
+#: dwarf.c:2136
#, c-format
msgid "Empty abbreviation list encountered for CU offset %lx\n"
msgstr "Ðаиђох на празан ÑпиÑак Ñкраћеница за померај процеÑора %lx\n"
-#: dwarf.c:2160
+#: dwarf.c:2161
#, c-format
msgid "Unable to find entry for abbreviation %lu\n"
msgstr "Ðе могу да нађем ÑƒÐ½Ð¾Ñ Ð·Ð° Ñкраћеницу %lu\n"
-#: dwarf.c:2310
+#: dwarf.c:2313
msgid "corrupt discr_list - not using a block form\n"
msgstr "оштећен је „discr_list“ – не кориÑтим облик блока\n"
-#: dwarf.c:2317
+#: dwarf.c:2320
msgid "corrupt discr_list - block not long enough\n"
msgstr "оштећен „discr_list“ – блок није довољно дуг\n"
-#: dwarf.c:2361
+#: dwarf.c:2355
#, c-format
msgid "corrupt discr_list - unrecognized discriminant byte %#x\n"
msgstr "оштећен „discr_list“ – непознат диÑкриминантни бајт %#x\n"
-#: dwarf.c:2402
+#: dwarf.c:2396
msgid "Corrupt attribute\n"
msgstr "Оштећен атрибут\n"
-#: dwarf.c:2428
+#: dwarf.c:2422
msgid "Internal error: DW_FORM_ref_addr is not supported in DWARF version 1.\n"
msgstr "Унутрашња грешка: „DW_FORM_ref_addr“ није подржано у „DWARF“-у издања 1.\n"
-#: dwarf.c:2610
+#: dwarf.c:2604
msgid "Block ends prematurely\n"
msgstr "Блок је прерано завршио\n"
#. We have already displayed the form name.
-#: dwarf.c:2640 dwarf.c:2655 dwarf.c:2678
+#: dwarf.c:2634 dwarf.c:2649 dwarf.c:2672
#, c-format
msgid "%c(offset: 0x%s): %s"
msgstr "%c(померај: 0x%s): %s"
-#: dwarf.c:2644
+#: dwarf.c:2638
#, c-format
msgid "%c(indirect string, offset: 0x%s): %s"
msgstr "%c(поÑредна ниÑка, померај: 0x%s): %s"
-#: dwarf.c:2659
+#: dwarf.c:2653
#, c-format
msgid "%c(indirect line string, offset: 0x%s): %s"
msgstr "%c(поÑредна ниÑка, померај: 0x%s): %s"
-#: dwarf.c:2682
+#: dwarf.c:2676
#, c-format
msgid "%c(indexed string: 0x%s): %s"
msgstr "%c(индекÑирана ниÑка: 0x%s): %s"
#. We have already displayed the form name.
-#: dwarf.c:2693
+#: dwarf.c:2687
#, c-format
msgid "%c(offset: 0x%s) %s"
msgstr "%c(померај: 0x%s) %s"
-#: dwarf.c:2697
+#: dwarf.c:2691
#, c-format
msgid "%c(alt indirect string, offset: 0x%s) %s"
msgstr "%c(поÑредна ниÑка алт, померај: 0x%s) %s"
#. We have already displayed the form name.
-#: dwarf.c:2735
+#: dwarf.c:2729
#, c-format
msgid "%c(index: 0x%s): %s"
msgstr "%c(индекÑ: 0x%s): %s"
-#: dwarf.c:2739
+#: dwarf.c:2733
#, c-format
msgid "%c(addr_index: 0x%s): %s"
msgstr "%c(индекÑ_адреÑе: 0x%s): %s"
-#: dwarf.c:2751
+#: dwarf.c:2745
#, c-format
msgid "Unrecognized form: 0x%lx\n"
msgstr "Ðепознат облик: 0×%lu\n"
-#: dwarf.c:2812
+#: dwarf.c:2808
msgid "More location offset attributes than DW_AT_GNU_locview attributes\n"
msgstr "Има више атрибута помераја меÑта него „DW_AT_GNU_locview“ атрибута\n"
-#: dwarf.c:2824
+#: dwarf.c:2820
msgid "More DW_AT_GNU_locview attributes than location offset attributes\n"
msgstr "Има више „DW_AT_GNU_locview“ атрибута него атрибута помераја меÑта\n"
-#: dwarf.c:2893 dwarf.c:2925 dwarf.c:2940
+#: dwarf.c:2889 dwarf.c:2921 dwarf.c:2936
#, c-format
msgid "Unsupported form (%s) for attribute %s\n"
msgstr "Ðеподржан облик (%s) за атрибут „%s“\n"
-#: dwarf.c:2985
+#: dwarf.c:2983
#, c-format
msgid "(not inlined)"
msgstr "(није надовезано)"
-#: dwarf.c:2988
+#: dwarf.c:2986
#, c-format
msgid "(inlined)"
msgstr "(надовезано)"
-#: dwarf.c:2991
+#: dwarf.c:2989
#, c-format
msgid "(declared as inline but ignored)"
msgstr "(објављено као надовезујуће али занемарено)"
-#: dwarf.c:2994
+#: dwarf.c:2992
#, c-format
msgid "(declared as inline and inlined)"
msgstr "(објављено као надовезујуће и надовезано)"
-#: dwarf.c:2997
+#: dwarf.c:2995
#, c-format
msgid " (Unknown inline attribute value: %s)"
msgstr " (Ðепозната вредноÑÑ‚ оÑобине надовезујућег: %s)"
-#: dwarf.c:3054
+#: dwarf.c:3052
#, c-format
msgid "(implementation defined: %s)"
msgstr "(одређена примена: %s)"
-#: dwarf.c:3057
+#: dwarf.c:3055
#, c-format
msgid "(Unknown: %s)"
msgstr "(Ðепознато: %s)"
-#: dwarf.c:3102
+#: dwarf.c:3100
#, c-format
msgid "(user defined type)"
msgstr "(кориÑник је одредио врÑту)"
-#: dwarf.c:3104
+#: dwarf.c:3102
#, c-format
msgid "(unknown type)"
msgstr "(непозната врÑта)"
-#: dwarf.c:3117
+#: dwarf.c:3115
#, c-format
msgid "(unknown accessibility)"
msgstr "(непозната приÑтупачноÑÑ‚)"
-#: dwarf.c:3129
+#: dwarf.c:3127
#, c-format
msgid "(unknown visibility)"
msgstr "(непозната видљивоÑÑ‚)"
-#: dwarf.c:3142
+#: dwarf.c:3140
#, c-format
msgid "(user specified)"
msgstr "(кориÑник је навео)"
-#: dwarf.c:3144
+#: dwarf.c:3142
#, c-format
msgid "(unknown endianity)"
msgstr "(непозната крајноÑÑ‚)"
-#: dwarf.c:3156
+#: dwarf.c:3154
#, c-format
msgid "(unknown virtuality)"
msgstr "(непозната виртуалноÑÑ‚)"
-#: dwarf.c:3168
+#: dwarf.c:3166
#, c-format
msgid "(unknown case)"
msgstr "(непозната величина Ñлова)"
-#: dwarf.c:3186
+#: dwarf.c:3184
#, c-format
msgid "(user defined)"
msgstr "(кориÑник је одредио)"
-#: dwarf.c:3188
+#: dwarf.c:3186
#, c-format
msgid "(unknown convention)"
msgstr "(непознат одоговор)"
-#: dwarf.c:3197
+#: dwarf.c:3195
#, c-format
msgid "(undefined)"
msgstr "(неодређено)"
-#: dwarf.c:3207
+#: dwarf.c:3205
#, c-format
msgid "(unsigned)"
msgstr "(неозначено)"
-#: dwarf.c:3208
+#: dwarf.c:3206
#, c-format
msgid "(leading overpunch)"
msgstr "(водеће пребушавање)"
-#: dwarf.c:3209
+#: dwarf.c:3207
#, c-format
msgid "(trailing overpunch)"
msgstr "(пратеће пребушавање)"
-#: dwarf.c:3210
+#: dwarf.c:3208
#, c-format
msgid "(leading separate)"
msgstr "(водећи раздвојник)"
-#: dwarf.c:3211
+#: dwarf.c:3209
#, c-format
msgid "(trailing separate)"
msgstr "(пратећи раздвојник)"
-#: dwarf.c:3212 dwarf.c:3223
+#: dwarf.c:3210 dwarf.c:3221
#, c-format
msgid "(unrecognised)"
msgstr "(непрепознато)"
-#: dwarf.c:3220
+#: dwarf.c:3218
#, c-format
msgid "(no)"
msgstr "(не)"
-#: dwarf.c:3221
+#: dwarf.c:3219
#, c-format
msgid "(in class)"
msgstr "(у клаÑи)"
-#: dwarf.c:3222
+#: dwarf.c:3220
#, c-format
msgid "(out of class)"
msgstr "(ван клаÑе)"
-#: dwarf.c:3254
+#: dwarf.c:3252
#, c-format
msgid " (location list)"
msgstr " (ÑпиÑак меÑта)"
-#: dwarf.c:3275 dwarf.c:6444 dwarf.c:6614 dwarf.c:6789
+#: dwarf.c:3273 dwarf.c:6449 dwarf.c:6620 dwarf.c:6796
#, c-format
msgid " [without DW_AT_frame_base]"
msgstr " [без „DW_AT_frame_base“]"
-#: dwarf.c:3305
+#: dwarf.c:3303
#, c-format
msgid "Offset %s used as value for DW_AT_import attribute of DIE at offset 0x%lx is too big.\n"
msgstr "Померај %s коришћен као вредноÑÑ‚ за оÑобину „DW_AT_import“ ДИЕ-а на померају 0x%lx је превелик.\n"
-#: dwarf.c:3311
+#: dwarf.c:3309
#, c-format
msgid "\t[Abbrev Number: %ld"
msgstr "\t[Број Ñкраћенице: %ld"
-#: dwarf.c:3406
+#: dwarf.c:3404
#, c-format
msgid ""
"Raw dump of debug contents of section %s (loaded from %s):\n"
@@ -2400,7 +2405,7 @@ msgstr ""
"Сирови избачај Ñадржаја прочишћавања одељка %s (учитано из %s):\n"
"\n"
-#: dwarf.c:3409
+#: dwarf.c:3407
#, c-format
msgid ""
"Raw dump of debug contents of section %s:\n"
@@ -2409,7 +2414,7 @@ msgstr ""
"Сирови избачај Ñадржаја прочишћавања одељка %s:\n"
"\n"
-#: dwarf.c:3414
+#: dwarf.c:3412
#, c-format
msgid ""
"Contents of the %s section (loaded from %s):\n"
@@ -2418,7 +2423,7 @@ msgstr ""
"Садржај одељка %s (учитано из %s):\n"
"\n"
-#: dwarf.c:3417
+#: dwarf.c:3415
#, c-format
msgid ""
"Contents of the %s section:\n"
@@ -2427,15 +2432,15 @@ msgstr ""
"Садржај одељка %s:\n"
"\n"
-#: dwarf.c:3460
+#: dwarf.c:3458
#, c-format
msgid "Reserved length value (0x%s) found in section %s\n"
msgstr "РезервиÑана вредноÑÑ‚ дужине (0x%s) је пронађена у одељку %s\n"
-#: dwarf.c:3470
+#: dwarf.c:3468
#, c-format
-msgid "Corrupt unit length (0x%s) found in section %s\n"
-msgstr "Оштећена дужина јединице (0x%s) је пронађена у одељку %s\n"
+msgid "Corrupt unit length (got 0x%s expected at most 0x%s) in section %s\n"
+msgstr "Оштећена дужина јединице (добих 0x%s, очекивах барем 0x%s) у одељку %s\n"
#: dwarf.c:3479
#, c-format
@@ -2579,7 +2584,7 @@ msgstr "Поље дужине (0x%lx) у заглављу „ред_прочиш
msgid "Only DWARF version 2, 3, 4 and 5 line info is currently supported.\n"
msgstr "Само „DWARF“ издање 2, 3, 4 и 5 податка реда је тренутно подржано.\n"
-#: dwarf.c:4126 dwarf.c:6882 dwarf.c:7747
+#: dwarf.c:4126 dwarf.c:6889 dwarf.c:7763
#, c-format
msgid "The %s section contains unsupported segment selector size: %d.\n"
msgstr "Одељак „%s“ Ñадржи неподржану величину бирача одељка: %d.\n"
@@ -2740,7 +2745,7 @@ msgstr " Сума провере: "
msgid "Partial .debug_line. section encountered without a prior full .debug_line section\n"
msgstr "Ðаиђох на делимичан одељак „.debug_line.“ без претходног пуног одељка „.debug_line“\n"
-#: dwarf.c:4412 dwarf.c:5962
+#: dwarf.c:4412 dwarf.c:5967
#, c-format
msgid " Offset: 0x%lx\n"
msgstr " Померај: 0x%lx\n"
@@ -2970,7 +2975,7 @@ msgstr " Подешава „epilogue_begin“ на тачно\n"
msgid " Set ISA to %s\n"
msgstr " Подешава ИСРна „%s“\n"
-#: dwarf.c:4755 dwarf.c:5392
+#: dwarf.c:4755 dwarf.c:5394
#, c-format
msgid " Unknown opcode %d with operands: "
msgstr " Ðепознат опкод „%d“ Ñа операндима: "
@@ -3016,22 +3021,22 @@ msgstr "ЦУ: Ðема табеле директоријума\n"
msgid "CU: %s:\n"
msgstr "ЦУ: %s:\n"
-#: dwarf.c:5130 dwarf.c:5430 readelf.c:6373 readelf.c:6470 readelf.c:6488
-#: readelf.c:6506 readelf.c:7306 readelf.c:11504 readelf.c:12169
-#: readelf.c:12182 readelf.c:17545 readelf.c:17577
+#: dwarf.c:5130 dwarf.c:5435 readelf.c:6715 readelf.c:6812 readelf.c:6830
+#: readelf.c:6848 readelf.c:7652 readelf.c:11854 readelf.c:12519
+#: readelf.c:12532 readelf.c:17921 readelf.c:17953
msgid "<unknown>"
msgstr "<непознато>"
-#: dwarf.c:5133 dwarf.c:5322
+#: dwarf.c:5133 dwarf.c:5324
#, c-format
msgid "directory index %u > number of directories %s\n"
msgstr "Ð¸Ð½Ð´ÐµÐºÑ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼Ð° %u > од броја директоријума %s\n"
-#: dwarf.c:5135 dwarf.c:5424 elfcomm.c:777 readelf.c:356 readelf.c:745
-#: readelf.c:7483 readelf.c:8044 readelf.c:10075 readelf.c:12496
-#: readelf.c:12562 readelf.c:12566 readelf.c:12634 readelf.c:12639
-#: readelf.c:16278 readelf.c:16367 readelf.c:16960 readelf.c:16979
-#: readelf.c:17098 readelf.c:17554 readelf.c:18710 readelf.c:18713
+#: dwarf.c:5135 dwarf.c:5429 elfcomm.c:777 readelf.c:389 readelf.c:923
+#: readelf.c:7830 readelf.c:8393 readelf.c:10429 readelf.c:12871
+#: readelf.c:12937 readelf.c:12941 readelf.c:13013 readelf.c:13018
+#: readelf.c:16651 readelf.c:16740 readelf.c:17333 readelf.c:17352
+#: readelf.c:17471 readelf.c:17930 readelf.c:19085 readelf.c:19088
#, c-format
msgid "<corrupt>"
msgstr "<оштећено>"
@@ -3056,7 +3061,7 @@ msgstr "ЦУ: Празна табела назива датотека\n"
msgid "UNKNOWN (%u): length %ld\n"
msgstr "ÐЕПОЗÐÐТО (%u): дужина %ld\n"
-#: dwarf.c:5306
+#: dwarf.c:5308
#, c-format
msgid ""
"\n"
@@ -3065,12 +3070,12 @@ msgstr ""
"\n"
" [КориÑти ÑƒÐ½Ð¾Ñ Ñ‚Ð°Ð±ÐµÐ»Ðµ датотека „%d“]\n"
-#: dwarf.c:5310
+#: dwarf.c:5312
#, c-format
msgid "file index %u > number of files %u\n"
msgstr "Ð¸Ð½Ð´ÐµÐºÑ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ %u > од броја датотека %u\n"
-#: dwarf.c:5311
+#: dwarf.c:5313
#, c-format
msgid ""
"\n"
@@ -3079,7 +3084,7 @@ msgstr ""
"\n"
" <превелик Ð¸Ð½Ð´ÐµÐºÑ Ñ‚Ð°Ð±ÐµÐ»Ðµ датотеке %u>"
-#: dwarf.c:5317
+#: dwarf.c:5319
#, c-format
msgid ""
"\n"
@@ -3088,7 +3093,7 @@ msgstr ""
"\n"
" [КориÑти датотеку „%s“ у уноÑу табеле директоријума %d]\n"
-#: dwarf.c:5324
+#: dwarf.c:5326
#, c-format
msgid ""
"\n"
@@ -3097,83 +3102,83 @@ msgstr ""
"\n"
" <превелик Ð¸Ð½Ð´ÐµÐºÑ Ñ‚Ð°Ð±ÐµÐ»Ðµ директоријума %u>\n"
-#: dwarf.c:5388
+#: dwarf.c:5390
#, c-format
msgid " Set ISA to %lu\n"
msgstr " Подешава ИСРна „%lu“\n"
-#: dwarf.c:5423
+#: dwarf.c:5428
#, c-format
msgid "corrupt file index %u encountered\n"
msgstr "наиђох на оштећен Ð¸Ð½Ð´ÐµÐºÑ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ %u encountered\n"
-#: dwarf.c:5592
+#: dwarf.c:5597
msgid "no info"
msgstr "нема података"
-#: dwarf.c:5593
+#: dwarf.c:5598
msgid "type"
msgstr "врÑта"
-#: dwarf.c:5594
+#: dwarf.c:5599
msgid "variable"
msgstr "променљива"
-#: dwarf.c:5595
+#: dwarf.c:5600
msgid "function"
msgstr "функција"
-#: dwarf.c:5596
+#: dwarf.c:5601
msgid "other"
msgstr "друго"
-#: dwarf.c:5597
+#: dwarf.c:5602
msgid "unused5"
msgstr "некоришћено5"
-#: dwarf.c:5598
+#: dwarf.c:5603
msgid "unused6"
msgstr "некоришћено6"
-#: dwarf.c:5599
+#: dwarf.c:5604
msgid "unused7"
msgstr "некоришћено7"
-#: dwarf.c:5637 dwarf.c:7210 dwarf.c:9605
+#: dwarf.c:5642 dwarf.c:7220 dwarf.c:9626
#, c-format
msgid "Debug info is corrupted, %s header at %#lx has length %s\n"
msgstr "Подаци прочишћавања Ñу оштећени, „%s“ заглавље на %#lx је дужине %s\n"
-#: dwarf.c:5653 dwarf.c:7225
+#: dwarf.c:5658 dwarf.c:7235
#, c-format
msgid ".debug_info offset of 0x%lx in %s section does not point to a CU header.\n"
msgstr "Померај „.debug_info“ од 0x%lx у одељку %s не указује на ЦУ заглавље.\n"
-#: dwarf.c:5658
+#: dwarf.c:5663
#, c-format
msgid " Length: %ld\n"
msgstr " Дужина: %ld\n"
-#: dwarf.c:5660
+#: dwarf.c:5665
#, c-format
msgid " Version: %d\n"
msgstr " Издање: %d\n"
-#: dwarf.c:5662
+#: dwarf.c:5667
#, c-format
msgid " Offset into .debug_info section: 0x%lx\n"
msgstr " Померај у одељку „.debug_info“: 0x%lx\n"
-#: dwarf.c:5664
+#: dwarf.c:5669
#, c-format
msgid " Size of area in .debug_info section: %ld\n"
msgstr " Величина облаÑти у одељку „.debug_info“: %ld\n"
-#: dwarf.c:5673
+#: dwarf.c:5678
msgid "Only DWARF 2 and 3 pubnames are currently supported\n"
msgstr "Само ДВÐРФ 2 и 3 пубназиви Ñу тренутно подржани\n"
-#: dwarf.c:5681
+#: dwarf.c:5686
#, c-format
msgid ""
"\n"
@@ -3182,7 +3187,7 @@ msgstr ""
"\n"
" Померај Ð’Ñ€Ñта Ðазив\n"
-#: dwarf.c:5683
+#: dwarf.c:5688
#, c-format
msgid ""
"\n"
@@ -3191,217 +3196,217 @@ msgstr ""
"\n"
" Померај\tÐазив\n"
-#: dwarf.c:5717
+#: dwarf.c:5722
msgid "s"
msgstr "Ñ"
-#: dwarf.c:5717
+#: dwarf.c:5722
msgid "g"
msgstr "г"
-#: dwarf.c:5775
+#: dwarf.c:5780
#, c-format
msgid " DW_MACINFO_start_file - lineno: %d filenum: %d\n"
msgstr " DW_MACINFO_start_file – број реда: %d број датотеке: %d\n"
-#: dwarf.c:5781
+#: dwarf.c:5786
#, c-format
msgid " DW_MACINFO_end_file\n"
msgstr " DW_MACINFO_end_file\n"
-#: dwarf.c:5788
+#: dwarf.c:5793
#, c-format
msgid " DW_MACINFO_define - lineno : %d macro : %*s\n"
msgstr " DW_MACINFO_define – број реда : %d макро : %*s\n"
-#: dwarf.c:5798
+#: dwarf.c:5803
#, c-format
msgid " DW_MACINFO_undef - lineno : %d macro : %*s\n"
msgstr " DW_MACINFO_undef – број реда : %d макро : %*s\n"
-#: dwarf.c:5811
+#: dwarf.c:5816
#, c-format
msgid " DW_MACINFO_vendor_ext - constant : %d string : %*s\n"
msgstr " DW_MACINFO_vendor_ext – конÑтанта : %d ниÑка : %*s\n"
-#: dwarf.c:5955
+#: dwarf.c:5960
#, c-format
msgid "Expected to find a version number of 4 or 5 in section %s but found %d instead\n"
msgstr "Очекивах да нађем број издања 4 или 5 у одељку „%s“ али нађох %d+\n"
-#: dwarf.c:5964
+#: dwarf.c:5969
#, c-format
msgid " Version: %d\n"
msgstr " Издање: %d\n"
-#: dwarf.c:5965
+#: dwarf.c:5970
#, c-format
msgid " Offset size: %d\n"
msgstr " Величина помераја: %d\n"
-#: dwarf.c:5969
+#: dwarf.c:5974
#, c-format
msgid " Offset into .debug_line: 0x%lx\n"
msgstr " Померај у „.debug_line“: 0x%lx\n"
-#: dwarf.c:5983
+#: dwarf.c:5988
#, c-format
msgid " Extension opcode arguments:\n"
msgstr " Ðргументи опкода проширења:\n"
-#: dwarf.c:5990
+#: dwarf.c:5995
#, c-format
msgid " DW_MACRO_%02x has no arguments\n"
msgstr " „DW_MACRO_%02x“ нема аргументе\n"
-#: dwarf.c:5993
+#: dwarf.c:5998
#, c-format
msgid " DW_MACRO_%02x arguments: "
msgstr " „DW_MACRO_%02x“ аргументи: "
-#: dwarf.c:6019
+#: dwarf.c:6024
#, c-format
msgid "Invalid extension opcode form %s\n"
msgstr "ÐеиÑправан облик опкода проширења „%s“\n"
-#: dwarf.c:6036
+#: dwarf.c:6041
msgid ".debug_macro section not zero terminated\n"
msgstr "Одељак „.debug_macro“ није окончан нулом\n"
-#: dwarf.c:6050
+#: dwarf.c:6055
#, c-format
msgid " DW_MACRO_define - lineno : %d macro : %*s\n"
msgstr " „DW_MACRO_define“ – број реда : %d макро : %*s\n"
-#: dwarf.c:6060
+#: dwarf.c:6065
#, c-format
msgid " DW_MACRO_undef - lineno : %d macro : %*s\n"
msgstr " „DW_MACRO_undef“ – број реда : %d макро : %*s\n"
-#: dwarf.c:6075
+#: dwarf.c:6080
msgid "DW_MACRO_start_file used, but no .debug_line offset provided.\n"
msgstr "„DW_MACRO_start_file“ Ñе кориÑти, али није доÑтављен померај „.debug_line“.\n"
-#: dwarf.c:6081
+#: dwarf.c:6086
#, c-format
msgid " DW_MACRO_start_file - lineno: %d filenum: %d\n"
msgstr " „DW_MACRO_start_file“ – број реда : %d бр. датотеке: %d\n"
-#: dwarf.c:6084
+#: dwarf.c:6089
#, c-format
msgid " DW_MACRO_start_file - lineno: %d filenum: %d filename: %s%s%s\n"
msgstr " „DW_MACRO_start_file“ – број реда : %d бр. реда: %d назив датотеке: %s%s%s\n"
-#: dwarf.c:6092
+#: dwarf.c:6097
#, c-format
msgid " DW_MACRO_end_file\n"
msgstr " „DW_MACRO_end_file“\n"
-#: dwarf.c:6102
+#: dwarf.c:6107
#, c-format
msgid " DW_MACRO_define_strp - lineno : %d macro : %s\n"
msgstr " „DW_MACRO_define“_strp – број реда : %d макро : %s\n"
-#: dwarf.c:6113
+#: dwarf.c:6118
#, c-format
msgid " DW_MACRO_undef_strp - lineno : %d macro : %s\n"
msgstr " „DW_MACRO_undef_strp“ – број реда : %d макро : %s\n"
-#: dwarf.c:6119
+#: dwarf.c:6124
#, c-format
msgid " DW_MACRO_import - offset : 0x%lx\n"
msgstr " „DW_MACRO_import“ – померај : 0x%lx\n"
-#: dwarf.c:6126
+#: dwarf.c:6131
#, c-format
msgid " DW_MACRO_define_sup - lineno : %d macro offset : 0x%lx\n"
msgstr " DW_MACRO_define_sup“ – број реда : %d макро померај : 0х%lx\n"
-#: dwarf.c:6133
+#: dwarf.c:6138
#, c-format
msgid " DW_MACRO_undef_sup - lineno : %d macro offset : 0x%lx\n"
msgstr " DW_MACRO_undef_sup“ – број реда : %d макро померај : 0х%lx\n"
-#: dwarf.c:6139
+#: dwarf.c:6144
#, c-format
msgid " DW_MACRO_import_sup - offset : 0x%lx\n"
msgstr " DW_MACRO_import_sup“ – померај : 0x%lx\n"
-#: dwarf.c:6154
+#: dwarf.c:6159
#, c-format
msgid "(with offset %s) "
msgstr "(Ñа померајем „%s “) "
-#: dwarf.c:6155
+#: dwarf.c:6160
#, c-format
msgid "lineno : %d macro : %s\n"
msgstr "број реда : %d макро : %s\n"
-#: dwarf.c:6162
+#: dwarf.c:6167
#, c-format
msgid " <Target Specific macro op: %#x - UNHANDLED"
msgstr " <Мети Ñпецифичан макро оп: %#x – ÐЕОБРÐЂЕÐО"
-#: dwarf.c:6168
+#: dwarf.c:6173
#, c-format
msgid " Unknown macro opcode %02x seen\n"
msgstr " Виђен је непознат макро опкод %02x\n"
-#: dwarf.c:6179
+#: dwarf.c:6184
#, c-format
msgid " DW_MACRO_%02x\n"
msgstr " „DW_MACRO_%02x“\n"
-#: dwarf.c:6182
+#: dwarf.c:6187
#, c-format
msgid " DW_MACRO_%02x -"
msgstr " „DW_MACRO_%02x“ –"
-#: dwarf.c:6237
+#: dwarf.c:6242
#, c-format
msgid " Number TAG (0x%lx)\n"
msgstr " ОЗÐÐКРброја (0x%lx)\n"
-#: dwarf.c:6246
+#: dwarf.c:6251
msgid "has children"
msgstr "има пород"
-#: dwarf.c:6246
+#: dwarf.c:6251
msgid "no children"
msgstr "нема пород"
-#: dwarf.c:6308
+#: dwarf.c:6313
#, c-format
msgid "location view pair\n"
msgstr "пар прегледа меÑта\n"
-#: dwarf.c:6340
+#: dwarf.c:6344
#, c-format
msgid "No debug information available for loc lists of entry: %u\n"
msgstr "ÐиÑу доÑтупни подаци прочишћавања за ÑпиÑкове меÑта уноÑа: %u\n"
-#: dwarf.c:6352 dwarf.c:6499 dwarf.c:6682
+#: dwarf.c:6356 dwarf.c:6504 dwarf.c:6688
#, c-format
msgid "Invalid pointer size (%d) in debug info for entry %d\n"
msgstr "ÐеиÑправна величина показивача (%d) у подацима прочишћавања за ÑƒÐ½Ð¾Ñ %d\n"
-#: dwarf.c:6364 dwarf.c:6417 dwarf.c:6426 dwarf.c:6511 dwarf.c:6588
-#: dwarf.c:6596 dwarf.c:6693 dwarf.c:6766 dwarf.c:6774
+#: dwarf.c:6368 dwarf.c:6422 dwarf.c:6431 dwarf.c:6516 dwarf.c:6594
+#: dwarf.c:6602 dwarf.c:6700 dwarf.c:6773 dwarf.c:6781
#, c-format
msgid "Location list starting at offset 0x%lx is not terminated.\n"
msgstr "СпиÑак меÑта који почиње на померају 0x%lx није окончан.\n"
-#: dwarf.c:6385 dwarf.c:6539 dwarf.c:6731 dwarf.c:7569 dwarf.c:7624
+#: dwarf.c:6390 dwarf.c:6545 dwarf.c:6738 dwarf.c:7582 dwarf.c:7640
#, c-format
msgid "<End of list>\n"
msgstr "<Крај ÑпиÑка>\n"
-#: dwarf.c:6397 dwarf.c:6560 dwarf.c:7629
+#: dwarf.c:6402 dwarf.c:6566 dwarf.c:7645
#, c-format
msgid "(base address)\n"
msgstr "(адреÑа оÑнове)\n"
-#: dwarf.c:6411 dwarf.c:6532 dwarf.c:6719
+#: dwarf.c:6416 dwarf.c:6538 dwarf.c:6726
#, c-format
msgid ""
"views at %8.8lx for:\n"
@@ -3410,55 +3415,55 @@ msgstr ""
"прегледи на „%8.8lx“ за:\n"
" %*s "
-#: dwarf.c:6447 dwarf.c:6617
+#: dwarf.c:6452 dwarf.c:6623
msgid " (start == end)"
msgstr " (почетак == крај)"
-#: dwarf.c:6449 dwarf.c:6619
+#: dwarf.c:6454 dwarf.c:6625
msgid " (start > end)"
msgstr " (почетак > крај)"
-#: dwarf.c:6486
+#: dwarf.c:6491
#, c-format
msgid "No debug information available for loclists lists of entry: %u\n"
msgstr "ÐиÑу доÑтупни подаци прочишћавања за ÑпиÑкове ÑпиÑкова меÑта уноÑа: %u\n"
-#: dwarf.c:6565
+#: dwarf.c:6571
#, c-format
msgid "View pair entry in loclist with locviews attribute\n"
msgstr "Ð£Ð½Ð¾Ñ Ð¿Ð°Ñ€Ð° прегледа на ÑпиÑку меÑта Ñа атрибутом прегледа меÑта\n"
-#: dwarf.c:6572
+#: dwarf.c:6578
#, c-format
msgid "views for:\n"
msgstr "прегледи за:\n"
-#: dwarf.c:6576
+#: dwarf.c:6582
#, c-format
msgid "Invalid location list entry type %d\n"
msgstr "ÐеиÑправна врÑта уноÑа ÑпиÑка меÑта %d\n"
-#: dwarf.c:6628
+#: dwarf.c:6634
#, c-format
msgid "Trailing view pair not used in a range"
msgstr "Пратећи пар прегледа није коришћен у опÑегу"
-#: dwarf.c:6670
+#: dwarf.c:6676
#, c-format
msgid "No debug information for loc lists of entry: %u\n"
msgstr "Ðема података прочишћавања за ÑпиÑкове меÑта уноÑа: %u\n"
-#: dwarf.c:6737
+#: dwarf.c:6744
#, c-format
msgid "(base address selection entry)\n"
msgstr "(ÑƒÐ½Ð¾Ñ Ð¸Ð·Ð±Ð¾Ñ€Ð° адреÑе оÑнове)\n"
-#: dwarf.c:6758
+#: dwarf.c:6765
#, c-format
msgid "Unknown location list entry type 0x%x.\n"
msgstr "Ðепозната врÑта уноÑа ÑпиÑка меÑта 0x%x.\n"
-#: dwarf.c:6851 dwarf.c:7104 dwarf.c:7323 dwarf.c:7430 dwarf.c:7691
+#: dwarf.c:6858 dwarf.c:7115 dwarf.c:7333 dwarf.c:7440 dwarf.c:7708
#, c-format
msgid ""
"\n"
@@ -3467,31 +3472,31 @@ msgstr ""
"\n"
"Одељак %s је празан.\n"
-#: dwarf.c:6871
+#: dwarf.c:6878
#, c-format
msgid "The %s section contains corrupt or unsupported version number: %d.\n"
msgstr "Одељак %s Ñадржи оштећени или неподржани број издања: %d.\n"
-#: dwarf.c:6891
+#: dwarf.c:6898
#, c-format
msgid "The %s section contains unsupported offset entry count: %d.\n"
msgstr "Одељак „%s“ Ñадржи неподржан број уноÑа помераја: %d.\n"
-#: dwarf.c:6902 dwarf.c:7329 dwarf.c:7765
+#: dwarf.c:6909 dwarf.c:7339 dwarf.c:7781
#, c-format
msgid "Unable to load/parse the .debug_info section, so cannot interpret the %s section.\n"
msgstr "Ðе могу да учитам/обрадим одељак „.debug_info“, тако да не могу да раÑтумачим одељак %s.\n"
-#: dwarf.c:6950
+#: dwarf.c:6957
msgid "No location lists in .debug_info section!\n"
msgstr "Ðема ÑпиÑкова меÑта у одељку „.debug_info“!\n"
-#: dwarf.c:6955
+#: dwarf.c:6962
#, c-format
msgid "Location lists in %s section start at 0x%s\n"
msgstr "СпиÑкови меÑта у одељку %s почињу на 0x%s\n"
-#: dwarf.c:6965
+#: dwarf.c:6972
#, c-format
msgid ""
" Warning: This section has relocations - addresses seen here may not be accurate.\n"
@@ -3500,40 +3505,40 @@ msgstr ""
" Упозорење: Овај одељак има премештања – адреÑе овде виђене могу бити нетачне.\n"
"\n"
-#: dwarf.c:6967
+#: dwarf.c:6974
#, c-format
msgid " Offset Begin End Expression\n"
msgstr " Померај Почетак Крај Израз\n"
-#: dwarf.c:7022
+#: dwarf.c:7029 dwarf.c:7882
#, c-format
-msgid "There is a hole [0x%lx - 0x%lx] in .debug_loc section.\n"
-msgstr "ПоÑтоји рупа [0x%lx – 0x%lx] у одељку „.debug_loc“.\n"
+msgid "There is a hole [0x%lx - 0x%lx] in %s section.\n"
+msgstr "ПоÑтоји рупа [0x%lx – 0x%lx] у одељку „%s.\n"
-#: dwarf.c:7026
+#: dwarf.c:7034 dwarf.c:7889
#, c-format
-msgid "There is an overlap [0x%lx - 0x%lx] in .debug_loc section.\n"
-msgstr "ПоÑтоји преклапање [0x%lx – 0x%lx] у одељку „.debug_loc“.\n"
+msgid "There is an overlap [0x%lx - 0x%lx] in %s section.\n"
+msgstr "ПоÑтоји преклапање [0x%lx – 0x%lx] у одељку „%s“.\n"
-#: dwarf.c:7035
+#: dwarf.c:7044
#, c-format
-msgid "Offset 0x%lx is bigger than .debug_loc section size.\n"
-msgstr "Померај 0x%lx је већи од величине одељка „.debug_loc“.\n"
+msgid "Offset 0x%lx is bigger than %s section size.\n"
+msgstr "Померај 0x%lx је већи од величине одељка „%s“.\n"
-#: dwarf.c:7042
+#: dwarf.c:7052
#, c-format
-msgid "View Offset 0x%lx is bigger than .debug_loc section size.\n"
-msgstr "Померај прегледа 0x%lx је већи од величине одељка „.debug_loc“.\n"
+msgid "View Offset 0x%lx is bigger than %s section size.\n"
+msgstr "Померај прегледа 0x%lx је већи од величине одељка „%s“.\n"
-#: dwarf.c:7059
+#: dwarf.c:7070
msgid "DWO is not yet supported.\n"
msgstr "„DWO“ још није подржано.\n"
-#: dwarf.c:7076
+#: dwarf.c:7087
msgid "Hole and overlap detection requires adjacent view lists and loclists.\n"
msgstr "Откривање рупа и преклапања захтева ÑуÑедне ÑпиÑкове прегледа и ÑпиÑкове меÑта.\n"
-#: dwarf.c:7085
+#: dwarf.c:7096
#, c-format
msgid "There is %ld unused byte at the end of section %s\n"
msgid_plural "There are %ld unused bytes at the end of section %s\n"
@@ -3541,45 +3546,45 @@ msgstr[0] "ПоÑтоји %ld некоришћени бајт на крају о
msgstr[1] "ПоÑтоје %ld некоришћена бајта на крају одељка %s\n"
msgstr[2] "ПоÑтоји %ld некоришћених бајтова на крају одељка %s\n"
-#: dwarf.c:7238
+#: dwarf.c:7248
msgid "Only DWARF 2 and 3 aranges are currently supported.\n"
msgstr "Само ДВÐРФ 2 и 3 ређања Ñу тренутно подржана.\n"
-#: dwarf.c:7242
+#: dwarf.c:7252
#, c-format
msgid " Length: %ld\n"
msgstr " Дужина: %ld\n"
-#: dwarf.c:7244
+#: dwarf.c:7254
#, c-format
msgid " Version: %d\n"
msgstr " Издање: %d\n"
-#: dwarf.c:7245
+#: dwarf.c:7255
#, c-format
msgid " Offset into .debug_info: 0x%lx\n"
msgstr " Померај у „.debug_info“: 0x%lx\n"
-#: dwarf.c:7247
+#: dwarf.c:7257
#, c-format
msgid " Pointer Size: %d\n"
msgstr " Величина показивача: %d\n"
-#: dwarf.c:7248
+#: dwarf.c:7258
#, c-format
msgid " Segment Size: %d\n"
msgstr " Величина подеока: %d\n"
-#: dwarf.c:7255
+#: dwarf.c:7265
#, c-format
msgid "Invalid address size in %s section!\n"
msgstr "ÐеиÑправна величина адреÑе у одељку %s!\n"
-#: dwarf.c:7265
+#: dwarf.c:7275
msgid "Pointer size + Segment size is not a power of two.\n"
msgstr "Величина показивача + величина подеока није Ñтепен двојке.\n"
-#: dwarf.c:7270
+#: dwarf.c:7280
#, c-format
msgid ""
"\n"
@@ -3588,7 +3593,7 @@ msgstr ""
"\n"
" ÐдреÑа Дужина\n"
-#: dwarf.c:7272
+#: dwarf.c:7282
#, c-format
msgid ""
"\n"
@@ -3597,270 +3602,267 @@ msgstr ""
"\n"
" ÐдреÑа Дужина\n"
-#: dwarf.c:7349
+#: dwarf.c:7359
#, c-format
msgid "Corrupt address base (%lx) found in debug section %u\n"
msgstr "Оштећена оÑнова адреÑе (%lx) је пронађена у одељку прочишћавања %u\n"
-#: dwarf.c:7366
+#: dwarf.c:7376
#, c-format
msgid " For compilation unit at offset 0x%s:\n"
msgstr " За јединицу превођења на померају 0x%s:\n"
-#: dwarf.c:7369
+#: dwarf.c:7379
#, c-format
msgid "\tIndex\tAddress\n"
msgstr "\tПопиÑ\tÐдреÑа\n"
-#: dwarf.c:7381
+#: dwarf.c:7391
#, c-format
msgid "Corrupt %s section: expecting header size of 8 or 16, but found %ld instead\n"
msgstr "Оштећени одељак „%s“: очекујући величину заглавља 8 или 16, али нађох %ld\n"
-#: dwarf.c:7393
+#: dwarf.c:7403
#, c-format
msgid "Corrupt %s section: expecting version number 5 in header but found %d instead\n"
msgstr "Оштећени одељак „%s“: очекујући број издања 5 у заглављу, али нађох %d\n"
-#: dwarf.c:7407
+#: dwarf.c:7417
#, c-format
msgid "\t%d:\t"
msgstr "\t%d:\t"
-#: dwarf.c:7472 dwarf.c:7496
+#: dwarf.c:7482 dwarf.c:7506
#, c-format
msgid " Length: %#lx\n"
msgstr " Дужина: %#lx\n"
-#: dwarf.c:7473 dwarf.c:7498
+#: dwarf.c:7483 dwarf.c:7508
#, c-format
msgid " Index Offset [String]\n"
msgstr " Ð˜Ð½Ð´ÐµÐºÑ ÐŸÐ¾Ð¼ÐµÑ€Ð°Ñ˜ [ÐиÑка]\n"
-#: dwarf.c:7481
+#: dwarf.c:7491
#, c-format
msgid "Section %s is too small %#lx\n"
msgstr "Одељак „%s“ је премали за %#lx\n"
-#: dwarf.c:7489
+#: dwarf.c:7499
#, c-format
msgid "Unexpected version number in str_offset header: %#x\n"
msgstr "Ðеочекивани број издања у заглављу помераја ниÑке: %#x\n"
-#: dwarf.c:7494
+#: dwarf.c:7504
#, c-format
msgid "Unexpected value in str_offset header's padding field: %#x\n"
msgstr "Ðеочекивана вредноÑÑ‚ у пољу попуне заглавља помераја ниÑке: %#x\n"
-#: dwarf.c:7497
+#: dwarf.c:7507
#, c-format
msgid " Version: %#lx\n"
msgstr " Издање: %#lx\n"
-#: dwarf.c:7588 dwarf.c:7665
+#: dwarf.c:7601 dwarf.c:7681
msgid "(start == end)"
msgstr "(почетак == крај)"
-#: dwarf.c:7590 dwarf.c:7667
+#: dwarf.c:7603 dwarf.c:7683
msgid "(start > end)"
msgstr "(почетак > крај)"
-#: dwarf.c:7612
+#: dwarf.c:7627
#, c-format
-msgid "Range list starting at offset 0x%lx is not terminated.\n"
-msgstr "СпиÑак опÑега који почиње на померају 0x%lx није окончан.\n"
+msgid "Range list starting at offset 0x%s is not terminated.\n"
+msgstr "СпиÑак опÑега који почиње на померају 0x%s није окончан.\n"
-#: dwarf.c:7645
+#: dwarf.c:7661
#, c-format
msgid "Invalid range list entry type %d\n"
msgstr "ÐеиÑправна врÑта уноÑа ÑпиÑка опÑега %d\n"
-#: dwarf.c:7725
+#: dwarf.c:7742
#, c-format
msgid "The length field (0x%lx) in the debug_rnglists header is wrong - the section is too small\n"
msgstr "Поље дужине (0x%lx) у заглављу „ÑпиÑковиопÑега_прочишћавања“ је погрешно – одељак је премали\n"
-#: dwarf.c:7737
+#: dwarf.c:7753
msgid "Only DWARF version 5 debug_rnglists info is currently supported.\n"
msgstr "Само „DWARF“ издање 5 ÑпиÑкова_опÑега_прочишћавања је тренутно подржано.\n"
-#: dwarf.c:7756
+#: dwarf.c:7772
#, c-format
msgid "The %s section contains unsupported offset entry count: %u.\n"
msgstr "Одељак „%s“ Ñадржи неподржан број уноÑа помераја: %u.\n"
#. This can happen when the file was compiled with -gsplit-debug
#. which removes references to range lists from the primary .o file.
-#: dwarf.c:7786
+#: dwarf.c:7802
#, c-format
msgid "No range lists in .debug_info section.\n"
msgstr "Ðема ÑпиÑкова опÑега у одељку „.debug_info“.\n"
-#: dwarf.c:7818
+#: dwarf.c:7834
#, c-format
msgid "Range lists in %s section start at 0x%lx\n"
msgstr "СпиÑкови опÑега у одељку %s почињу на 0x%lx\n"
-#: dwarf.c:7823
+#: dwarf.c:7839
#, c-format
msgid " Offset Begin End\n"
msgstr " Померај Почетак Крај\n"
-#: dwarf.c:7841
+#: dwarf.c:7857
#, c-format
msgid "Corrupt pointer size (%d) in debug entry at offset %8.8lx\n"
msgstr "Оштећена величина показивача (%d) у уноÑу прочишћавања на померају %8.8lx\n"
-#: dwarf.c:7848
+#: dwarf.c:7864
#, c-format
msgid "Corrupt offset (%#8.8lx) in range entry %u\n"
msgstr "Оштећен померај (%#8.8lx) у уноÑу опÑега %u\n"
-#: dwarf.c:7866
-#, c-format
-msgid "There is a hole [0x%lx - 0x%lx] in %s section.\n"
-msgstr "ПоÑтоји рупа [0x%lx – 0x%lx] у одељку „%s.\n"
-
-#: dwarf.c:7873
-#, c-format
-msgid "There is an overlap [0x%lx - 0x%lx] in %s section.\n"
-msgstr "ПоÑтоји преклапање [0x%lx – 0x%lx] у одељку „%s“.\n"
-
-#: dwarf.c:7949
+#: dwarf.c:7965
#, c-format
msgid "Unfeasibly large register number: %u\n"
msgstr "ÐеоÑтвариво велики број региÑтра: %u\n"
-#: dwarf.c:7962
+#: dwarf.c:7978
#, c-format
msgid "Out of memory allocating %u columns in dwarf frame arrays\n"
msgstr "Ðема више меморије за додељивање %u Ñтупца у низовима „dwarf“ оквира\n"
-#: dwarf.c:8411
+#: dwarf.c:8427
msgid "No terminator for augmentation name\n"
msgstr "Ðема окончивача за назив повећања\n"
-#: dwarf.c:8429
+#: dwarf.c:8445
#, c-format
msgid "Invalid pointer size (%d) in CIE data\n"
msgstr "ÐеиÑправна величина показивача (%d) у „CIE“ подацима\n"
-#: dwarf.c:8437
+#: dwarf.c:8453
#, c-format
msgid "Invalid segment size (%d) in CIE data\n"
msgstr "ÐеиÑправна величина подеока (%d) у „CIE“ подацима\n"
-#: dwarf.c:8473 dwarf.c:8849
+#: dwarf.c:8489 dwarf.c:8862
#, c-format
msgid "Augmentation data too long: 0x%s, expected at most %#lx\n"
msgstr "Подаци повећања Ñу предуги: 0x%s, очекивах највише %#lx\n"
-#: dwarf.c:8560
+#: dwarf.c:8576
#, c-format
msgid " Augmentation data: "
msgstr " Подаци повећања: "
-#: dwarf.c:8576
+#: dwarf.c:8592
msgid "bad register: "
msgstr "лош региÑтар: "
-#: dwarf.c:8748
+#: dwarf.c:8764
msgid "Failed to read CIE information\n"
msgstr "ÐиÑам уÑпео да прочитам „CIE“ податке\n"
-#: dwarf.c:8759 dwarf.c:8783 dwarf.c:8810
+#: dwarf.c:8775 dwarf.c:8796 dwarf.c:8823
msgid "Invalid max register\n"
msgstr "ÐеиÑправан највећи региÑтар\n"
#. PR 17512: file: 9e196b3e.
-#: dwarf.c:8825
+#: dwarf.c:8838
#, c-format
msgid "Probably corrupt segment size: %d - using 4 instead\n"
msgstr "Вероватно је оштећена величина подеока: %d – кориÑтићу 4\n"
-#: dwarf.c:9296
+#. Ideally translate "invalid " to 8 chars, trailing space
+#. is optional.
+#: dwarf.c:8884
+#, c-format
+msgid "cie=invalid "
+msgstr "cie=нетачно "
+
+#: dwarf.c:9317
msgid "Invalid column number in saved frame state\n"
msgstr "ÐеиÑправан број Ñтупца у Ñачуваном Ñтању оквира\n"
-#: dwarf.c:9343
+#: dwarf.c:9364
#, c-format
msgid " DW_CFA_def_cfa_expression: <corrupt len %lu>\n"
msgstr " „DW_CFA_def_cfa_expression“: <оштећена дужина %lu>\n"
-#: dwarf.c:9366
+#: dwarf.c:9387
#, c-format
msgid " DW_CFA_expression: <corrupt len %lu>\n"
msgstr " „DW_CFA_expression“: <оштећена дужина %lu>\n"
-#: dwarf.c:9499
+#: dwarf.c:9520
#, c-format
msgid " DW_CFA_??? (User defined call frame op: %#x)\n"
msgstr " DW_CFA_??? (Оп кадра позива који је одредио кориÑник: %#x)\n"
-#: dwarf.c:9501
+#: dwarf.c:9522
#, c-format
msgid "Unsupported or unknown Dwarf Call Frame Instruction number: %#x\n"
msgstr "Ðеподржан или непознат број инÑтрукције „Dwarf Call Frame“: %#x\n"
-#: dwarf.c:9615 dwarf.c:10032
+#: dwarf.c:9636 dwarf.c:10053
#, c-format
msgid "Version %ld\n"
msgstr "Издање %ld\n"
-#: dwarf.c:9621
+#: dwarf.c:9642
msgid "Only DWARF version 5 .debug_names is currently supported.\n"
msgstr "Само „DWARF“ издање 5 „.назива_прочишћавања“ је тренутно подржано.\n"
-#: dwarf.c:9628
+#: dwarf.c:9649
#, c-format
msgid "Padding field of .debug_names must be 0 (found 0x%x)\n"
msgstr "Поље попуњавања за „.debug_names“ мора бити 0 (нађох 0x%x)\n"
-#: dwarf.c:9633
+#: dwarf.c:9654
msgid "Compilation unit count must be >= 1 in .debug_names\n"
msgstr "Број јединица иÑпуњавања мора бити >= 1 у „.debug_names“\n"
-#: dwarf.c:9644
+#: dwarf.c:9665
#, c-format
msgid "Augmentation string length %u must be rounded up to a multiple of 4 in .debug_names.\n"
msgstr "Дужина ниÑке повећања %u мора бити заокружена на производ 4 у „.debug_names“.\n"
-#: dwarf.c:9652
+#: dwarf.c:9673
#, c-format
msgid "Augmentation string:"
msgstr "ÐиÑка повећања:"
-#: dwarf.c:9679
+#: dwarf.c:9700
#, c-format
msgid "CU table:\n"
msgstr "ЦУ табела:\n"
-#: dwarf.c:9688 dwarf.c:9701
+#: dwarf.c:9709 dwarf.c:9722
#, c-format
msgid "[%3u] 0x%lx\n"
msgstr "[%3u] 0x%lx\n"
-#: dwarf.c:9692
+#: dwarf.c:9713
#, c-format
msgid "TU table:\n"
msgstr "ТУ табела:\n"
-#: dwarf.c:9705
+#: dwarf.c:9726
#, c-format
msgid "Foreign TU table:\n"
msgstr "Страна ТУ табела:\n"
-#: dwarf.c:9714
+#: dwarf.c:9735
#, c-format
msgid "[%3u] "
msgstr "[%3u] "
-#: dwarf.c:9725
+#: dwarf.c:9746
#, c-format
msgid "Entry pool offset (0x%lx) exceeds unit size 0x%lx for unit 0x%lx in the debug_names\n"
msgstr "Померај уноÑа припреме (0x%lx) превазилази величину јединице 0x%lx за јединицу 0x%lx у „називима_прочишћавања\n"
-#: dwarf.c:9754
+#: dwarf.c:9775
#, c-format
msgid "Used %zu of %lu bucket.\n"
msgid_plural "Used %zu of %lu buckets.\n"
@@ -3868,17 +3870,17 @@ msgstr[0] "Коришћено је %zu од %lu ведара.\n"
msgstr[1] "Коришћена Ñу %zu од %lu ведара.\n"
msgstr[2] "Коришћено је %zu од %lu ведара.\n"
-#: dwarf.c:9781
+#: dwarf.c:9802
#, c-format
msgid "Out of %lu items there are %zu bucket clashes (longest of %zu entries).\n"
msgstr "Од %lu Ñтавке имамо %zu преклапања ведра (најдужих од %zu уноÑа).\n"
-#: dwarf.c:9818
+#: dwarf.c:9839
#, c-format
msgid "Duplicate abbreviation tag %lu in unit 0x%lx in the debug_names\n"
msgstr "УдвоÑтручена ознака Ñкраћења %lu у јединицци 0x%lx у „називима_прочишћавања“\n"
-#: dwarf.c:9840 dwarf.c:10158
+#: dwarf.c:9861 dwarf.c:10179
#, c-format
msgid ""
"\n"
@@ -3887,105 +3889,105 @@ msgstr ""
"\n"
"Табела Ñимбола:\n"
-#: dwarf.c:9892
+#: dwarf.c:9913
#, c-format
msgid "Undefined abbreviation tag %lu in unit 0x%lx in the debug_names\n"
msgstr "Ðеодређена ознака Ñкраћења %lu у јединицци 0x%lx у „називима_прочишћавања“\n"
-#: dwarf.c:9923
+#: dwarf.c:9944
#, c-format
msgid " <no entries>"
msgstr " <нема уноÑа>"
-#: dwarf.c:9955
+#: dwarf.c:9976
msgid "The debuglink filename is corrupt/missing\n"
msgstr "Ðазив датотеке везе прочишћавања је оштећен или недоÑтаје\n"
-#: dwarf.c:9959
+#: dwarf.c:9980
#, c-format
msgid " Separate debug info file: %s\n"
msgstr " Одвојена датотека података прочишћавања: %s\n"
-#: dwarf.c:9970
+#: dwarf.c:9991
msgid "CRC offset missing/truncated\n"
msgstr "„CRC“ померај недоÑтаје или је Ñкраћен\n"
-#: dwarf.c:9976
+#: dwarf.c:9997
#, c-format
msgid " CRC value: %#x\n"
msgstr " „CRC“ вредноÑÑ‚: %#x\n"
-#: dwarf.c:9980
+#: dwarf.c:10001
#, c-format
msgid "There are %#lx extraneous bytes at the end of the section\n"
msgstr "ПоÑтоји %#lx Ñтраних бајтова на крају одељка\n"
-#: dwarf.c:9994
+#: dwarf.c:10015
#, c-format
msgid "Build-ID is too short (%#lx bytes)\n"
msgstr "ИБ изградње је прекратак (%#lx бајта)\n"
-#: dwarf.c:9998
+#: dwarf.c:10019
#, c-format
msgid " Build-ID (%#lx bytes):"
msgstr " ИБ изградње (%#lx бајта):"
-#: dwarf.c:10027
+#: dwarf.c:10048
#, c-format
msgid "Truncated header in the %s section.\n"
msgstr "Скраћено заглавље у одељку %s.\n"
-#: dwarf.c:10038
+#: dwarf.c:10059
#, c-format
msgid "Unsupported version %lu.\n"
msgstr "Издање %lu није подржано.\n"
-#: dwarf.c:10042
+#: dwarf.c:10063
msgid "The address table data in version 3 may be wrong.\n"
msgstr "Можда Ñу погрешни подаци табеле адреÑе у издању 3.\n"
-#: dwarf.c:10044
+#: dwarf.c:10065
msgid "Version 4 does not support case insensitive lookups.\n"
msgstr "Издање 4 не подржава тражење неоÑетљиво на величину Ñлова.\n"
-#: dwarf.c:10046
+#: dwarf.c:10067
msgid "Version 5 does not include inlined functions.\n"
msgstr "Издање 5 не укључује уграђене функције.\n"
-#: dwarf.c:10048
+#: dwarf.c:10069
msgid "Version 6 does not include symbol attributes.\n"
msgstr "Издање 6 не укључује атрибуте Ñимбола.\n"
-#: dwarf.c:10066
+#: dwarf.c:10087
#, c-format
msgid "Corrupt header in the %s section.\n"
msgstr "Оштећено заглавље у одељку %s.\n"
-#: dwarf.c:10073
+#: dwarf.c:10094
#, c-format
msgid "TU offset (%x) is less than CU offset (%x)\n"
msgstr "ТУ померај (%x) је мањи од ЦУ помераја (%x)\n"
-#: dwarf.c:10082
+#: dwarf.c:10103
#, c-format
msgid "Address table offset (%x) is less than TU offset (%x)\n"
msgstr "Померај табеле адреÑе (%x) је мањи од ТУ помераја (%x)\n"
-#: dwarf.c:10092
+#: dwarf.c:10113
#, c-format
msgid "Symbol table offset (%x) is less then Address table offset (%x)\n"
msgstr "Померај табеле Ñимбола (%x) је мање од помераја табеле адреÑе (%x)\n"
-#: dwarf.c:10101
+#: dwarf.c:10122
#, c-format
msgid "Constant pool offset (%x) is less than symbol table offset (%x)\n"
msgstr "Стални померај припреме (%x) је мањи од помераја табеле Ñимбола (%x)\n"
-#: dwarf.c:10116
+#: dwarf.c:10137
msgid "Address table extends beyond end of section.\n"
msgstr "Табела адреÑе превазилази крај одељка.\n"
-#: dwarf.c:10120
+#: dwarf.c:10141
#, c-format
msgid ""
"\n"
@@ -3994,12 +3996,12 @@ msgstr ""
"\n"
"ЦУ табела:\n"
-#: dwarf.c:10126
+#: dwarf.c:10147
#, c-format
msgid "[%3u] 0x%lx - 0x%lx\n"
msgstr "[%3u] 0x%lx – 0x%lx\n"
-#: dwarf.c:10131
+#: dwarf.c:10152
#, c-format
msgid ""
"\n"
@@ -4008,12 +4010,12 @@ msgstr ""
"\n"
"ТУ табела:\n"
-#: dwarf.c:10138
+#: dwarf.c:10159
#, c-format
msgid "[%3u] 0x%lx 0x%lx "
msgstr "[%3u] 0x%lx 0x%lx "
-#: dwarf.c:10145
+#: dwarf.c:10166
#, c-format
msgid ""
"\n"
@@ -4022,74 +4024,74 @@ msgstr ""
"\n"
"Табела адреÑе:\n"
-#: dwarf.c:10155
+#: dwarf.c:10176
#, c-format
msgid "%lu\n"
msgstr "%lu\n"
-#: dwarf.c:10173
+#: dwarf.c:10194
#, c-format
msgid "[%3u] <corrupt offset: %x>"
msgstr "[%3u] <оштећен померај: %x>"
-#: dwarf.c:10174
+#: dwarf.c:10195
#, c-format
msgid "Corrupt name offset of 0x%x found for symbol table slot %d\n"
msgstr "Ðађох оштећен померај назива 0x%x за утор табеле Ñимбола %d\n"
-#: dwarf.c:10185
+#: dwarf.c:10206
#, c-format
msgid "<invalid CU vector offset: %x>\n"
msgstr "<неиÑправан померај ЦУ вектора: %x>\n"
-#: dwarf.c:10186
+#: dwarf.c:10207
#, c-format
msgid "Corrupt CU vector offset of 0x%x found for symbol table slot %d\n"
msgstr "Ðађох оштећен померај ЦУ вектора 0x%x за утор табеле Ñимбола %d\n"
-#: dwarf.c:10197
+#: dwarf.c:10218
#, c-format
msgid "Invalid number of CUs (0x%x) for symbol table slot %d\n"
msgstr "ÐеиÑправан број ЦУ-ова (0x%x) за утор табеле Ñимбола %d\n"
-#: dwarf.c:10222
+#: dwarf.c:10243
msgid "static"
msgstr "Ñтатичко"
-#: dwarf.c:10222
+#: dwarf.c:10243
msgid "global"
msgstr "опште"
-#: dwarf.c:10260 dwarf.c:10271
+#: dwarf.c:10281 dwarf.c:10292
msgid "Internal error: out of space in the shndx pool.\n"
msgstr "Унутрашња грешка: нема више меÑта у „shndx“ припреми.\n"
-#: dwarf.c:10334
+#: dwarf.c:10355
#, c-format
msgid "Section %s is empty\n"
msgstr "Одељак %s је празан\n"
-#: dwarf.c:10340
+#: dwarf.c:10361
#, c-format
msgid "Section %s is too small to contain a CU/TU header\n"
msgstr "Одељак „%s“ је премали да Ñадржи ЦУ/ТУ заглавље\n"
-#: dwarf.c:10359
+#: dwarf.c:10380
#, c-format
msgid " Version: %u\n"
msgstr " Издање: %u\n"
-#: dwarf.c:10361
+#: dwarf.c:10382
#, c-format
msgid " Number of columns: %u\n"
msgstr " Број Ñтубаца: %u\n"
-#: dwarf.c:10362
+#: dwarf.c:10383
#, c-format
msgid " Number of used entries: %u\n"
msgstr " Број коришћених уноÑа: %u\n"
-#: dwarf.c:10363
+#: dwarf.c:10384
#, c-format
msgid ""
" Number of slots: %u\n"
@@ -4098,7 +4100,7 @@ msgstr ""
" Број прикључака: %u\n"
"\n"
-#: dwarf.c:10370
+#: dwarf.c:10391
#, c-format
msgid "Section %s is too small for %u slot\n"
msgid_plural "Section %s is too small for %u slots\n"
@@ -4106,125 +4108,130 @@ msgstr[0] "Одељак „%s“ је премали за %u утор\n"
msgstr[1] "Одељак „%s“ је премали за %u утора\n"
msgstr[2] "Одељак „%s“ је премали за %u утора\n"
-#: dwarf.c:10394
+#: dwarf.c:10415
msgid "Section index pool located before start of section\n"
msgstr "Припрема индекÑа одељка Ñе налази пре почетка одељка\n"
-#: dwarf.c:10399
+#: dwarf.c:10420
#, c-format
msgid " [%3d] Signature: 0x%s Sections: "
msgstr " [%3d] ПотпиÑ: 0x%s Одељци: "
-#: dwarf.c:10405
+#: dwarf.c:10426
#, c-format
msgid "Section %s too small for shndx pool\n"
msgstr "Одељак „%s“ је премали за „shndx“ припрему\n"
-#: dwarf.c:10451
+#: dwarf.c:10472
#, c-format
msgid "Section %s too small for offset and size tables\n"
msgstr "Одељак „%s“ је премали за табеле помераја и величине\n"
-#: dwarf.c:10458
+#: dwarf.c:10479
#, c-format
msgid " Offset table\n"
msgstr " Табела помераја\n"
-#: dwarf.c:10460 dwarf.c:10548
+#: dwarf.c:10481 dwarf.c:10569
msgid "signature"
msgstr "потпиÑ"
-#: dwarf.c:10460 dwarf.c:10548
+#: dwarf.c:10481 dwarf.c:10569
msgid "dwo_id"
msgstr "dwo_id"
-#: dwarf.c:10499
+#: dwarf.c:10520
#, c-format
msgid "Row index (%u) is larger than number of used entries (%u)\n"
msgstr "Ð˜Ð½Ð´ÐµÐºÑ Ñ€ÐµÐ´Ð° (%u) је већи од броја коришћених уноÑа (%u)\n"
-#: dwarf.c:10513 dwarf.c:10572
+#: dwarf.c:10534 dwarf.c:10593
#, c-format
msgid " [%3d] 0x%s"
msgstr " [%3d] 0x%s"
-#: dwarf.c:10528 dwarf.c:10586
+#: dwarf.c:10549 dwarf.c:10621
#, c-format
msgid "Overlarge Dwarf section index detected: %u\n"
msgstr "Откривен је превелик Ð¸Ð½Ð´ÐµÐºÑ â€ždwarf“ одељка: %u\n"
-#: dwarf.c:10546
+#: dwarf.c:10567
#, c-format
msgid " Size table\n"
msgstr " Табела величине\n"
-#: dwarf.c:10601
+#: dwarf.c:10607
+#, c-format
+msgid "Too many rows/columns in DWARF index section %s\n"
+msgstr "Превише редова/колона у „DWARF“ одељку индекÑа „%s“\n"
+
+#: dwarf.c:10636
#, c-format
msgid " Unsupported version (%d)\n"
msgstr " Ðеподржано издање (%d)\n"
-#: dwarf.c:10673
+#: dwarf.c:10708
#, c-format
msgid "Displaying the debug contents of section %s is not yet supported.\n"
msgstr "Приказивање Ñадржаја прочишћавања одељка %s још није подржано.\n"
-#: dwarf.c:10704
+#: dwarf.c:10739
#, c-format
msgid "Attempt to allocate an array with an excessive number of elements: 0x%lx\n"
msgstr "Покушах да доделим низ Ñа превеликим бројем елемената: 0x%lx\n"
-#: dwarf.c:10722
+#: dwarf.c:10757
#, c-format
msgid "Attempt to re-allocate an array with an excessive number of elements: 0x%lx\n"
msgstr "Покушах поново да доделим низ Ñа превеликим бројем елемената: 0x%lx\n"
-#: dwarf.c:10738
+#: dwarf.c:10773
#, c-format
msgid "Attempt to allocate a zero'ed array with an excessive number of elements: 0x%lx\n"
msgstr "Покушах да доделим нултиран низ Ñа превеликим бројем елемената: 0x%lx\n"
-#: dwarf.c:10836
+#: dwarf.c:10871
#, c-format
msgid "Unable to reopen separate debug info file: %s\n"
msgstr "Ðе могу поново да отворим одвојену датотеку података прочишћавања: %s\n"
-#: dwarf.c:10848
+#: dwarf.c:10883
#, c-format
msgid "Separate debug info file %s found, but CRC does not match - ignoring\n"
msgstr "Ðађох одвојену датотеку података прочишћавања „%s“, али „CRC“ не одговара – занемарујем\n"
-#: dwarf.c:11024
+#: dwarf.c:11062
#, c-format
msgid "Corrupt debuglink section: %s\n"
msgstr "Оштећен одељак везе прочишћавања: %s\n"
-#: dwarf.c:11062
+#: dwarf.c:11101
msgid "Out of memory"
msgstr "ПонеÑтало је меморије"
#. Failed to find the file.
-#: dwarf.c:11136
+#: dwarf.c:11176
#, c-format
msgid "could not find separate debug file '%s'\n"
msgstr "не могу да нађем одвојену датотеку прочишћавања „%s“\n"
-#: dwarf.c:11138 dwarf.c:11143 dwarf.c:11149 dwarf.c:11153 dwarf.c:11158
-#: dwarf.c:11161 dwarf.c:11164 dwarf.c:11167
+#: dwarf.c:11178 dwarf.c:11183 dwarf.c:11189 dwarf.c:11193 dwarf.c:11198
+#: dwarf.c:11201 dwarf.c:11204 dwarf.c:11207
#, c-format
msgid "tried: %s\n"
msgstr "покушах „%s“\n"
-#: dwarf.c:11175
+#: dwarf.c:11215
#, c-format
msgid "tried: DEBUGINFOD_URLS=%s\n"
msgstr "покушах: „DEBUGINFOD_URLS=%s“\n"
-#: dwarf.c:11192
+#: dwarf.c:11243
#, c-format
msgid "failed to open separate debug file: %s\n"
msgstr "ниÑам уÑпео да отворим одвојену датотеку прочишћавања: %s\n"
-#: dwarf.c:11201
+#: dwarf.c:11252
#, c-format
msgid ""
"\n"
@@ -4233,17 +4240,17 @@ msgstr ""
"\n"
"%s: Ðађох одвојену датотеку података прочишћавања: %s\n"
-#: dwarf.c:11224
+#: dwarf.c:11275
msgid "Out of memory allocating dwo filename\n"
msgstr "ПонеÑтало је меморије приликом додељивања „dwo“ назива датотеке\n"
-#: dwarf.c:11230
+#: dwarf.c:11281
#, c-format
msgid "Unable to load dwo file: %s\n"
msgstr "Ðе могу да учитам „dwo“ датотеку: %s\n"
#. FIXME: We should check the dwo_id.
-#: dwarf.c:11237
+#: dwarf.c:11288
#, c-format
msgid ""
"%s: Found separate debug object file: %s\n"
@@ -4252,28 +4259,44 @@ msgstr ""
"%s: Ðађох одвојену датотеку објекта прочишћавања: %s\n"
"\n"
-#: dwarf.c:11256
+#: dwarf.c:11320
+msgid "Unable to load the .note.gnu.build-id section\n"
+msgstr "Ðе могу да учитам одељак „.note.gnu.build-id“\n"
+
+#: dwarf.c:11326
+msgid ".note.gnu.build-id section is corrupt/empty\n"
+msgstr "одељак „.note.gnu.build-id“ је оштећен/празан\n"
+
+#: dwarf.c:11347
+msgid ".note.gnu.build-id data size is too small\n"
+msgstr "величина података „.note.gnu.build-id“ је премала\n"
+
+#: dwarf.c:11353
+msgid ".note.gnu.build-id data size is too bug\n"
+msgstr "величина података „.note.gnu.build-id“ је превелика\n"
+
+#: dwarf.c:11414
msgid ".debug_sup section is corrupt/empty\n"
msgstr "одељак „.debug_sup“ је оштећен/празан\n"
-#: dwarf.c:11266
+#: dwarf.c:11424
msgid "filename in .debug_sup section is corrupt\n"
msgstr "назив датотеке у „.debug_sup“ одељку је оштећен\n"
-#: dwarf.c:11281
+#: dwarf.c:11439
msgid "unable to construct path for supplementary debug file"
msgstr "не могу да направим путању за додатну датотеку прочишћавања"
-#: dwarf.c:11295
+#: dwarf.c:11453
msgid "out of memory constructing filename for .debug_sup link\n"
msgstr "неÑтало је меморије приликом изградње назива датотеке за „.debug_sup“ везу\n"
-#: dwarf.c:11303
+#: dwarf.c:11461
#, c-format
msgid "unable to open file '%s' referenced from .debug_sup section\n"
msgstr "не могу да отворим датотеку „%s“ упутну из „.debug_sup“ одељка\n"
-#: dwarf.c:11308
+#: dwarf.c:11466
#, c-format
msgid ""
"%s: Found supplementary debug file: %s\n"
@@ -4282,19 +4305,19 @@ msgstr ""
"%s: Ðађох додатну датотеку прочишћавања: %s\n"
"\n"
-#: dwarf.c:11398
+#: dwarf.c:11558
msgid "Multiple DWO_NAMEs encountered for the same CU\n"
msgstr "Ðаиђох на више „DWO_NAME“-а за иÑту ЦЈ\n"
-#: dwarf.c:11410
+#: dwarf.c:11570
msgid "multiple DWO_IDs encountered for the same CU\n"
msgstr "наиђох на више „DWO_ID“-а за иÑту ЦЈ\n"
-#: dwarf.c:11415
+#: dwarf.c:11575
msgid "Unexpected DWO INFO type"
msgstr "Ðеочекивана „DWO INFO“ врÑта"
-#: dwarf.c:11430
+#: dwarf.c:11590
#, c-format
msgid ""
"The %s section contains link(s) to dwo file(s):\n"
@@ -4303,44 +4326,42 @@ msgstr ""
"Одељак „%s“ Ñадржи везу до „dwo“ датотеке:\n"
"\n"
-#: dwarf.c:11435
+#: dwarf.c:11595
#, c-format
msgid " Name: %s\n"
msgstr " Ðазив: %s\n"
-#: dwarf.c:11436
+#: dwarf.c:11596
#, c-format
msgid " Directory: %s\n"
msgstr " Директоријум: %s\n"
-#: dwarf.c:11436
+#: dwarf.c:11596
msgid "<not-found>"
msgstr "<ниÑам нашао>"
-#: dwarf.c:11438
+#: dwarf.c:11598
#, c-format
msgid " ID: "
msgstr " ИБ: "
-#: dwarf.c:11440
+#: dwarf.c:11600
#, c-format
msgid " ID: <not specified>\n"
msgstr " ИБ: <није наведено>\n"
-#: dwarf.c:11604 dwarf.c:11648
+#: dwarf.c:11764 dwarf.c:11808
#, c-format
msgid "Unrecognized debug option '%s'\n"
msgstr "Ðепозната опција прочишћавања „%s“\n"
-#: dwarf.h:270
-#, c-format
-msgid "%s:%lu: end of data encountered whilst reading LEB\n"
-msgstr "%s:%lu: наиђох на крај података приликом читања „LEB“-а\n"
+#: dwarf.h:273
+msgid "end of data encountered whilst reading LEB\n"
+msgstr "наиђох на крај података приликом читања „LEB“-а\n"
-#: dwarf.h:272
-#, c-format
-msgid "%s:%lu: read LEB value is too large to store in destination variable\n"
-msgstr "%s:%lu: вредноÑÑ‚ читања „LEB“-а је превелика за Ñмештај у променљиву одредишта\n"
+#: dwarf.h:275
+msgid "read LEB value is too large to store in destination variable\n"
+msgstr "вредноÑÑ‚ читања „LEB“-а је превелика за Ñмештај у променљиву одредишта\n"
#: elfcomm.c:47
#, c-format
@@ -4425,7 +4446,7 @@ msgstr "%s: ниÑам уÑпео да премотам до првог загл
#. PR 24049 - we cannot use filedata->file_name as this will
#. have already been freed.
-#: elfcomm.c:519 elfcomm.c:753 elfedit.c:595 readelf.c:21730
+#: elfcomm.c:519 elfcomm.c:753 elfedit.c:613 readelf.c:22187
#, c-format
msgid "%s: failed to read archive header\n"
msgstr "%s: ниÑам уÑпео да прочитам заглавље архиве\n"
@@ -4472,72 +4493,77 @@ msgstr "ÐеиÑправан назив члана танане архиве\n"
msgid "%s: failed to seek to next file name\n"
msgstr "%s: ниÑам уÑпео да премотам до Ñледећег назива датотеке\n"
-#: elfcomm.c:758 elfedit.c:602 readelf.c:21737
+#: elfcomm.c:758 elfedit.c:620 readelf.c:22194
#, c-format
msgid "%s: did not find a valid archive header\n"
msgstr "%s: ниÑам пронашао иÑправно заглавље архиве\n"
-#: elfedit.c:91
+#: elfedit.c:93
#, c-format
msgid "%s: Not an i386 nor x86-64 ELF file\n"
msgstr "%s: Ðије „i386“ нити „x86-64“ ЕЛФ датотека\n"
-#: elfedit.c:97
+#: elfedit.c:99
#, c-format
msgid "%s: stat () failed\n"
msgstr "%s: није уÑпело „stat ()“\n"
-#: elfedit.c:105
+#: elfedit.c:107
#, c-format
msgid "%s: mmap () failed\n"
msgstr "%s: није упÑело „mmap ()“\n"
-#: elfedit.c:244
+#: elfedit.c:246
#, c-format
msgid "%s: Invalid PT_NOTE segment\n"
msgstr "%s: ÐеиÑправан „PT_NOTE“ подеок\n"
-#: elfedit.c:269
+#: elfedit.c:271
#, c-format
msgid "Unknown x86 feature: %s\n"
msgstr "Ðепозната x86 функција: %s\n"
-#: elfedit.c:317
+#: elfedit.c:319
#, c-format
msgid "%s: Unsupported EI_VERSION: %d is not %d\n"
msgstr "%s: „EI_VERSION“ није подржано: „%d“ није „%d“\n"
-#: elfedit.c:338
+#: elfedit.c:340
#, c-format
msgid "%s: Unmatched input EI_CLASS: %d is not %d\n"
msgstr "%s: Ðепоклопљен улаз „EI_CLASS“: „%d“ није „%d“\n"
-#: elfedit.c:347
+#: elfedit.c:349
#, c-format
msgid "%s: Unmatched output EI_CLASS: %d is not %d\n"
msgstr "%s: Ðепоклопљен излаз „EI_CLASS“: „%d“ није „%d“\n"
-#: elfedit.c:356
+#: elfedit.c:358
#, c-format
msgid "%s: Unmatched e_machine: %d is not %d\n"
msgstr "%s: „e_machine“ није поклопљено: „%d“ није „%d“\n"
-#: elfedit.c:367
+#: elfedit.c:369
#, c-format
msgid "%s: Unmatched e_type: %d is not %d\n"
msgstr "%s: „e_type“ није поклопљено: „%d“ није „%d“\n"
-#: elfedit.c:378
+#: elfedit.c:380
#, c-format
msgid "%s: Unmatched EI_OSABI: %d is not %d\n"
msgstr "%s: „EI_OSABI“ није поклопљено: „%d“ није „%d“\n"
-#: elfedit.c:411
+#: elfedit.c:392
+#, c-format
+msgid "%s: Unmatched EI_ABIVERSION: %d is not %d\n"
+msgstr "%s: „EI_ABIVERSION“ није поклопљено: „%d“ није „%d“\n"
+
+#: elfedit.c:429
#, c-format
msgid "%s: Failed to update ELF header: %s\n"
msgstr "%s: ÐиÑам уÑпео да оÑвежим ЕЛФ заглавље: %s\n"
-#: elfedit.c:481
+#: elfedit.c:499
msgid ""
"This executable has been built without support for a\n"
"64 bit data type and so it cannot process 64 bit ELF files.\n"
@@ -4545,87 +4571,87 @@ msgstr ""
"Ова извршна је изграђена без подршке за 64-битну врÑту\n"
"података тако да не може да обради 64-битне ЕЛФ датотеке.\n"
-#: elfedit.c:522
+#: elfedit.c:540
#, c-format
msgid "%s: Failed to read ELF header\n"
msgstr "%s: ÐиÑам уÑпео да прочитам ЕЛФ заглавље\n"
-#: elfedit.c:529
+#: elfedit.c:547
#, c-format
msgid "%s: Failed to seek to ELF header\n"
msgstr "%s: ÐиÑам уÑпео да премотам до ЕЛФ заглавља\n"
-#: elfedit.c:586 readelf.c:21718
+#: elfedit.c:604 readelf.c:22175
#, c-format
msgid "%s: failed to seek to next archive header\n"
msgstr "%s: ниÑам уÑпео да премотам до Ñледећег заглавља архиве\n"
-#: elfedit.c:617 elfedit.c:626 readelf.c:21752 readelf.c:21761
+#: elfedit.c:635 elfedit.c:644 readelf.c:22207 readelf.c:22216
#, c-format
msgid "%s: bad archive file name\n"
msgstr "%s: лош назив датотеке архиве\n"
-#: elfedit.c:649 elfedit.c:760
+#: elfedit.c:667 elfedit.c:778
#, c-format
msgid "Input file '%s' is not readable\n"
msgstr "Улазна датотека „%s“ није читљива\n"
-#: elfedit.c:676
+#: elfedit.c:694
#, c-format
msgid "%s: failed to seek to archive member\n"
msgstr "%s: ниÑам уÑпео да премотам до члана архиве\n"
-#: elfedit.c:717 readelf.c:21880
+#: elfedit.c:735 readelf.c:22335
#, c-format
msgid "'%s': No such file\n"
msgstr "„%s“: Ðема такве датотеке\n"
-#: elfedit.c:719 readelf.c:21882
+#: elfedit.c:737 readelf.c:22337
#, c-format
msgid "Could not locate '%s'. System error message: %s\n"
msgstr "Ðе могу да пронађем „%s“. Порука грешке ÑиÑтема: %s\n"
-#: elfedit.c:740 readelf.c:21889
+#: elfedit.c:758 readelf.c:22344
#, c-format
msgid "'%s' is not an ordinary file\n"
msgstr "„%s“ није обична датотека\n"
-#: elfedit.c:766 readelf.c:21911
+#: elfedit.c:784 readelf.c:22366
#, c-format
msgid "%s: Failed to read file's magic number\n"
msgstr "%s: ÐиÑам уÑпео да прочитам магичан број датотеке\n"
-#: elfedit.c:830
+#: elfedit.c:848
#, c-format
msgid "Unknown OSABI: %s\n"
msgstr "Ðепознат ОСÐБИ: %s\n"
-#: elfedit.c:855
+#: elfedit.c:873
#, c-format
msgid "Unknown machine type: %s\n"
msgstr "Ðепозната врÑта машине: %s\n"
-#: elfedit.c:874
+#: elfedit.c:892
#, c-format
msgid "Unknown type: %s\n"
msgstr "Ðепозната врÑта: %s\n"
-#: elfedit.c:921
+#: elfedit.c:943
#, c-format
msgid "Usage: %s <option(s)> elffile(s)\n"
msgstr "Употреба: %s <опција(е)> елфдатотека(е)\n"
-#: elfedit.c:923
+#: elfedit.c:945
#, c-format
msgid " Update the ELF header of ELF files\n"
msgstr "ОÑвежите ЕЛФ заглавље у ЕЛФ датотекама\n"
-#: elfedit.c:924 objcopy.c:565 objcopy.c:706 strings.c:679
+#: elfedit.c:946 nm.c:295 objcopy.c:565 objcopy.c:706 strings.c:1314
#, c-format
msgid " The options are:\n"
msgstr " Опције Ñу:\n"
-#: elfedit.c:925
+#: elfedit.c:947
#, c-format
msgid ""
" --input-mach [none|i386|iamcu|l1om|k1om|x86_64]\n"
@@ -4640,6 +4666,8 @@ msgid ""
" Set input OSABI\n"
" --output-osabi [%s]\n"
" Set output OSABI\n"
+" --input-abiversion [0-255] Set input ABIVERSION\n"
+" --output-abiversion [0-255] Set output ABIVERSION\n"
msgstr ""
" --input-mach [none|i386|iamcu|l1om|k1om|x86_64]\n"
" ПоÑтавља врÑту улазне машине\n"
@@ -4653,8 +4681,11 @@ msgstr ""
" ПоÑтавља улазно „OSABI“\n"
" --output-osabi [%s]\n"
" ПоÑтавља излазно „OSABI“\n"
+" --input-abiversion [0-255] ПоÑтавља улазно „ABIVERSION“\n"
+" --output-abiversion [0-255] ПоÑтавља излазно „ABIVERSION“\n"
+"\n"
-#: elfedit.c:940
+#: elfedit.c:964
#, c-format
msgid ""
" --enable-x86-feature [ibt|shstk|lam_u48|lam_u57]\n"
@@ -4667,7 +4698,7 @@ msgstr ""
" --disable-x86-feature [ibt|shstk|lam_u48|lam_u57]\n"
" ИÑкључује x86 функцију\n"
-#: elfedit.c:946
+#: elfedit.c:970
#, c-format
msgid ""
" -h --help Display this information\n"
@@ -4676,6 +4707,11 @@ msgstr ""
" -h --help Приказује ове податке\n"
" -v --version Приказује број издања „%s“\n"
+#: elfedit.c:1049 elfedit.c:1060
+#, c-format
+msgid "Invalid ABIVERSION: %s\n"
+msgstr "ÐеиÑправно „ABIVERSION“: %s\n"
+
#: emul_aix.c:44
#, c-format
msgid " [-g] - 32 bit small archive\n"
@@ -4696,147 +4732,249 @@ msgstr " [-X64] – занемарује предмете од 32 бит
msgid " [-X32_64] - accepts 32 and 64 bit objects\n"
msgstr " [-X32_64] – прихвата предмете од 32 и 64 бита\n"
-#: mclex.c:240
+#: mclex.c:245
msgid "Duplicate symbol entered into keyword list."
msgstr "УдвоÑтручени Ñимбол је унет у ÑпиÑак кључних речи."
-#: nm.c:274 size.c:88 strings.c:677
+#: nm.c:293 size.c:88 strings.c:1312
#, c-format
msgid "Usage: %s [option(s)] [file(s)]\n"
msgstr "Употреба: %s [опција(е)] [датотека(е)]\n"
-#: nm.c:275
+#: nm.c:294
#, c-format
msgid " List symbols in [file(s)] (a.out by default).\n"
msgstr " Приказује Ñимболе у [датотека(е)] (оÑновно је „a.out“).\n"
-#: nm.c:276
+#: nm.c:296
+#, c-format
+msgid " -a, --debug-syms Display debugger-only symbols\n"
+msgstr " -a, --debug-syms Приказује Ñимболе Ñамо прочишћавања\n"
+
+#: nm.c:298
+#, c-format
+msgid " -A, --print-file-name Print name of the input file before every symbol\n"
+msgstr " -A, --print-file-name ИÑпиÑује назив улазне датотеке пре Ñваког Ñимбола\n"
+
+#: nm.c:300
+#, c-format
+msgid " -B Same as --format=bsd\n"
+msgstr " -B ИÑто као „--format=bsd“\n"
+
+#: nm.c:302
+#, c-format
+msgid " -C, --demangle[=STYLE] Decode mangled/processed symbol names\n"
+msgstr " -C, --demangle[=СТИЛ] Декодира прекрштене/обрађене називе Ñимбола\n"
+
+#: nm.c:304 readelf.c:5056
+msgid " STYLE can be "
+msgstr " СТИЛ може бити "
+
+#: nm.c:306
+#, c-format
+msgid " --no-demangle Do not demangle low-level symbol names\n"
+msgstr " --no-demangle Ðе раÑкршћавања називе Ñимбола ниÑког нивоа.\n"
+
+#: nm.c:308
+#, c-format
+msgid " --recurse-limit Enable a demangling recursion limit. (default)\n"
+msgstr " --recurse-limit Укључује ограничење понављања раÑкршћавања. (оÑновно)\n"
+
+#: nm.c:310
+#, c-format
+msgid " --no-recurse-limit Disable a demangling recursion limit.\n"
+msgstr " --no-recurse-limit ИÑкључује ограничење понављања раÑкршћавања\n"
+
+#: nm.c:312
+#, c-format
+msgid " -D, --dynamic Display dynamic symbols instead of normal symbols\n"
+msgstr " -D, --dynamic Приказује динамичке Ñимболе умеÑто обичних Ñимбола\n"
+
+#: nm.c:314
+#, c-format
+msgid " --defined-only Display only defined symbols\n"
+msgstr " --defined-only Приказује Ñамо дефиниÑане Ñимболе\n"
+
+#: nm.c:316
+#, c-format
+msgid " -e (ignored)\n"
+msgstr " -e (занемарено)\n"
+
+#: nm.c:318
#, c-format
msgid ""
-" The options are:\n"
-" -a, --debug-syms Display debugger-only symbols\n"
-" -A, --print-file-name Print name of the input file before every symbol\n"
-" -B Same as --format=bsd\n"
-" -C, --demangle[=STYLE] Decode low-level symbol names into user-level names\n"
-" The STYLE, if specified, can be `auto' (the default),\n"
-" `gnu', `lucid', `arm', `hp', `edg', `gnu-v3', `java'\n"
-" or `gnat'\n"
-" --no-demangle Do not demangle low-level symbol names\n"
-" --recurse-limit Enable a demangling recursion limit. This is the default.\n"
-" --no-recurse-limit Disable a demangling recursion limit.\n"
-" -D, --dynamic Display dynamic symbols instead of normal symbols\n"
-" --defined-only Display only defined symbols\n"
-" -e (ignored)\n"
" -f, --format=FORMAT Use the output format FORMAT. FORMAT can be `bsd',\n"
-" `sysv', `posix' or 'just-symbols'. The default is `bsd'\n"
-" -g, --extern-only Display only external symbols\n"
-" --ifunc-chars=CHARS Characters to use when displaying ifunc symbols\n"
-" -j, --just-symbols Same as --format=just-symbols\n"
+" `sysv', `posix' or 'just-symbols'.\n"
+" The default is `bsd'\n"
+msgstr ""
+" -f, --format=ФОРМÐТ КориÑти излазни формат ФОРМÐТ. ФОРМÐТ може бити „bsd“,\n"
+" „sysv“, „posix“ или „just-symbols“.\n"
+" ОÑновно је „bsd“\n"
+
+#: nm.c:322
+#, c-format
+msgid " -g, --extern-only Display only external symbols\n"
+msgstr " -g, --extern-only Приказује Ñамо Ñпољне Ñимболе\n"
+
+#: nm.c:324
+#, c-format
+msgid " --ifunc-chars=CHARS Characters to use when displaying ifunc symbols\n"
+msgstr " --ifunc-chars=ЗÐÐЦИ Знаци за коришћење када Ñе приказују „ifunc“ Ñимболи\n"
+
+#: nm.c:326
+#, c-format
+msgid " -j, --just-symbols Same as --format=just-symbols\n"
+msgstr " -j, --just-symbols ИÑто као „--format=just-symbols“\n"
+
+#: nm.c:328
+#, c-format
+msgid ""
" -l, --line-numbers Use debugging information to find a filename and\n"
" line number for each symbol\n"
-" -n, --numeric-sort Sort symbols numerically by address\n"
-" -o Same as -A\n"
-" -p, --no-sort Do not sort the symbols\n"
-" -P, --portability Same as --format=posix\n"
-" -r, --reverse-sort Reverse the sense of the sort\n"
msgstr ""
-"Опције Ñу:\n"
-" -a, --debug-syms Приказује Ñамо Ñимболе прочишћавача\n"
-" -A, --print-file-name ИÑпиÑује назив улазне датотеке пре Ñваког Ñимбола\n"
-" -B ИÑто као „--format=бÑд“\n"
-" -C, --demangle[=СТИЛ] Декодира називе Ñимбола ниÑког нивоа у називе кориÑничког нивоа\n"
-" СТИЛ, ако је наведен, може бити „auto“ (оÑновно), „gnu“,\n"
-" „lucid“, „arm“, „hp“, „edg“ „gnu-v3“, „java“ или „gnat“\n"
-" --no-demangle Ðе раÑкршћава називе Ñимбола ниÑког нивоа\n"
-" --recurse-limit Укључује ограничење дубачења раÑкршћавања. Ово је оÑновно.\n"
-" --no-recurse-limit ИÑкључује ограничење дубачења раÑкршћавања.\n"
-" -D, --dynamic Приказује динамичке Ñимболе умеÑто нормалних\n"
-" --defined-only Приказује Ñамо одређене Ñимболе\n"
-" -e (занемарено)\n"
-" -f, --format=ЗÐПИС КориÑти излазни Ð·Ð°Ð¿Ð¸Ñ Ð—ÐПИС. ЗÐПИС може бити „bsd“,\n"
-" „sysv“ или „posix“. ОÑновни је „bsd“\n"
-" -g, --extern-only Приказује Ñамо Ñпољне Ñимболе\n"
-" --ifunc-chars=ЗÐÐЦИ Знаци за коришћење приликом приказивања „ifunc“ Ñимбола\n"
-" -j, --just-symbols ИÑто као „--format=just-symbols“\n"
-" -l, --line-numbers КориÑти податке прочишћавања да пронађе назив датотеке\n"
-" и број реда за Ñваки Ñимбол\n"
-" -n, --numeric-sort Ређа Ñимболе нумерички према адреÑама\n"
-" -o ИÑто као „-A“\n"
-" -p, --no-sort Ðе ређа Ñимболе\n"
-" -P, --portability ИÑто као „--format=поÑикÑ“\n"
-" -r, --reverse-sort Окреће Ñмер ређања\n"
-
-#: nm.c:303
+" -l, --line-numbers КориÑти информације прочишћавања да нађе назив датотеке и\n"
+" број реда за Ñваки Ñимбол\n"
+
+#: nm.c:331
+#, c-format
+msgid " -n, --numeric-sort Sort symbols numerically by address\n"
+msgstr " -n, --numeric-sort Ређа Ñимболе бројевно према адреÑи\n"
+
+#: nm.c:333
+#, c-format
+msgid " -o Same as -A\n"
+msgstr " -o ИÑто као „-A“\n"
+
+#: nm.c:335
+#, c-format
+msgid " -p, --no-sort Do not sort the symbols\n"
+msgstr " -p, --no-sort Ðе ређа Ñимболе\n"
+
+#: nm.c:337
+#, c-format
+msgid " -P, --portability Same as --format=posix\n"
+msgstr " -P, --portability ИÑто као „--format=posix“\n"
+
+#: nm.c:339
+#, c-format
+msgid " -r, --reverse-sort Reverse the sense of the sort\n"
+msgstr " -r, --reverse-sort Обрће Ñмер ређања\n"
+
+#: nm.c:342
#, c-format
msgid " --plugin NAME Load the specified plugin\n"
-msgstr " --plugin NOM Учитава наведени прикључак\n"
+msgstr " --plugin NOM Учитава наведени прикључак\n"
-#: nm.c:306
+#: nm.c:345
+#, c-format
+msgid " -S, --print-size Print size of defined symbols\n"
+msgstr " -S, --print-size ИÑпиÑује величину дефиниÑаних Ñимбола\n"
+
+#: nm.c:347
+#, c-format
+msgid " -s, --print-armap Include index for symbols from archive members\n"
+msgstr " -s, --print-armap Укључује Ð¸Ð½Ð´ÐµÐºÑ Ð·Ð° Ñимболе из чланова архива\n"
+
+#: nm.c:349
+#, c-format
+msgid " --quiet Suppress \"no symbols\" diagnostic\n"
+msgstr " --quiet ПотиÑкује дијагноÑтику „no symbols“\n"
+
+#: nm.c:351
+#, c-format
+msgid " --size-sort Sort symbols by size\n"
+msgstr " --size-sort Ређа Ñимболе по величини\n"
+
+#: nm.c:353
+#, c-format
+msgid " --special-syms Include special symbols in the output\n"
+msgstr " --special-syms Укључује нарочите Ñимболе у излаз\n"
+
+#: nm.c:355
+#, c-format
+msgid " --synthetic Display synthetic symbols as well\n"
+msgstr " --synthetic Приказује Ñинтетичке Ñимболе иÑто тако\n"
+
+#: nm.c:357
+#, c-format
+msgid " -t, --radix=RADIX Use RADIX for printing symbol values\n"
+msgstr " -t, --radix=RADIX КориÑти „RADIX“ за иÑпиÑивање вредноÑти Ñимбола\n"
+
+#: nm.c:359
+#, c-format
+msgid " --target=BFDNAME Specify the target object format as BFDNAME\n"
+msgstr " --target=БФДÐÐЗИВ Ðаводи Ð·Ð°Ð¿Ð¸Ñ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° мете као БФДÐÐЗИВ\n"
+
+#: nm.c:361
+#, c-format
+msgid " -u, --undefined-only Display only undefined symbols\n"
+msgstr " -u, --undefined-only Приказује Ñамо недефиниÑане Ñимболе\n"
+
+#: nm.c:363
#, c-format
msgid ""
-" -S, --print-size Print size of defined symbols\n"
-" -s, --print-armap Include index for symbols from archive members\n"
-" --quiet Suppress \"no symbols\" diagnostic\n"
-" --size-sort Sort symbols by size\n"
-" --special-syms Include special symbols in the output\n"
-" --synthetic Display synthetic symbols as well\n"
-" -t, --radix=RADIX Use RADIX for printing symbol values\n"
-" --target=BFDNAME Specify the target object format as BFDNAME\n"
-" -u, --undefined-only Display only undefined symbols\n"
-" --with-symbol-versions Display version strings after symbol names\n"
-" -X 32_64 (ignored)\n"
-" @FILE Read options from FILE\n"
-" -h, --help Display this information\n"
-" -V, --version Display this program's version number\n"
-"\n"
-msgstr ""
-" -S, --print-size ИÑпиÑује величину дефиниÑаних Ñимбола\n"
-" -s, --print-armap Укључује Ð¸Ð½Ð´ÐµÐºÑ Ð·Ð° Ñимболе из чланова архиве\n"
-" --quiet ПотиÑкује дијагноÑтику „без Ñимбола“\n"
-" --size-sort Ређа Ñимболе према величини\n"
-" --special-syms Укључује Ñпецијалне Ñимболе у излазу\n"
-" --synthetic Приказује Ñинтетичке Ñимболе као такве\n"
-" -t, --radix=КОРЕРКориÑти КОРЕРзаиÑпиÑивање вредноÑти Ñимбола\n"
-" --target=БФДÐÐЗИВ Ðаводи формат циљног формата као БФДÐÐЗИВ \n"
-" -u, --undefined-only Приказује Ñамо недефиниÑане Ñимболе\n"
-" --with-symbol-versions Приказује ниÑке издања након назива Ñимбола\n"
-" -X 32_64 (занемарено)\n"
-" @ДÐТОТЕКРЧита опције из ДÐТОТЕКЕ\n"
-" -h, --help Приказује ове информације\n"
-" -V, --version Приказује број издања програма\n"
-"\n"
-
-#: nm.c:340
+" -U {d|s|i|x|e|h} Specify how to treat UTF-8 encoded unicode characters\n"
+" --unicode={default|show|invalid|hex|escape|highlight}\n"
+msgstr ""
+" -U {d|s|i|x|e|h} Ðаводи како радити Ñа УТФ-8 кодиране јуникод знакове\n"
+" --unicode={default|show|invalid|hex|escape|highlight}\n"
+
+#: nm.c:366
+#, c-format
+msgid " --with-symbol-versions Display version strings after symbol names\n"
+msgstr " --with-symbol-versions Приказује ниÑке издања након назива Ñимбола\n"
+
+#: nm.c:368
+#, c-format
+msgid " -X 32_64 (ignored)\n"
+msgstr " -X 32_64 (занемарено)\n"
+
+#: nm.c:370
+#, c-format
+msgid " @FILE Read options from FILE\n"
+msgstr " @ДТТКРЧита опције из ДÐТОТЕКЕ\n"
+
+#: nm.c:372
+#, c-format
+msgid " -h, --help Display this information\n"
+msgstr " -h, --help Приказује ове информације\n"
+
+#: nm.c:374
+#, c-format
+msgid " -V, --version Display this program's version number\n"
+msgstr " -V, --version Приказује издање овог програма\n"
+
+#: nm.c:395
#, c-format
msgid "%s: invalid radix"
msgstr "%s: неиÑправна бројевна оÑнова"
-#: nm.c:370
+#: nm.c:425
#, c-format
msgid "%s: invalid output format"
msgstr "%s: неиÑправан излазни запиÑ"
-#: nm.c:395 readelf.c:12090 readelf.c:12133
+#: nm.c:450 readelf.c:12440 readelf.c:12483
#, c-format
msgid "<processor specific>: %d"
msgstr "<поÑебноÑÑ‚ процеÑора>: %d"
-#: nm.c:397 readelf.c:12097 readelf.c:12150
+#: nm.c:452 readelf.c:12447 readelf.c:12500
#, c-format
msgid "<OS specific>: %d"
msgstr "<ПоÑебноÑÑ‚ ОС-а>: %d"
-#: nm.c:399 readelf.c:12100 readelf.c:12153
+#: nm.c:454 readelf.c:12450 readelf.c:12503
#, c-format
msgid "<unknown>: %d"
msgstr "<непознато>: %d"
-#: nm.c:429
+#: nm.c:484
#, c-format
msgid "<unknown>: %d/%d"
msgstr "<непознато>: %d/%d"
-#: nm.c:499
+#: nm.c:742
#, c-format
msgid ""
"\n"
@@ -4845,12 +4983,12 @@ msgstr ""
"\n"
"Ð˜Ð½Ð´ÐµÐºÑ Ð°Ñ€Ñ…Ð¸Ð²Ðµ:\n"
-#: nm.c:553 nm.c:1250
+#: nm.c:797 nm.c:1494
#, c-format
msgid "%s: plugin needed to handle lto object"
msgstr "%s: потребан је прикључак за руковање „lto“ објектом"
-#: nm.c:1487
+#: nm.c:1731
#, c-format
msgid ""
"\n"
@@ -4863,7 +5001,7 @@ msgstr ""
"Ðеодређени Ñимболи из %s:\n"
"\n"
-#: nm.c:1489
+#: nm.c:1733
#, c-format
msgid ""
"\n"
@@ -4876,7 +5014,7 @@ msgstr ""
"Симболи из „%s“:\n"
"\n"
-#: nm.c:1491 nm.c:1552
+#: nm.c:1735 nm.c:1796
#, c-format
msgid ""
"Name Value Class Type Size Line Section\n"
@@ -4885,7 +5023,7 @@ msgstr ""
"Ðазив Вред Разред Ð’Ñ€Ñта Вел Ред Одељак\n"
"\n"
-#: nm.c:1494 nm.c:1555
+#: nm.c:1738 nm.c:1799
#, c-format
msgid ""
"Name Value Class Type Size Line Section\n"
@@ -4894,7 +5032,7 @@ msgstr ""
"Ðазив Вред Разред Ð’Ñ€Ñта Вел Ред Одељак\n"
"\n"
-#: nm.c:1548
+#: nm.c:1792
#, c-format
msgid ""
"\n"
@@ -4907,7 +5045,7 @@ msgstr ""
"Ðеодређени Ñимболи из %s[%s]:\n"
"\n"
-#: nm.c:1550
+#: nm.c:1794
#, c-format
msgid ""
"\n"
@@ -4920,20 +5058,25 @@ msgstr ""
"Симболи из %s[%s]:\n"
"\n"
-#: nm.c:1656
+#: nm.c:1900
#, c-format
msgid "Print width has not been initialized (%d)"
msgstr "Ширина иÑпиÑивања није покренута (%d)"
-#: nm.c:1915
+#: nm.c:2162 objdump.c:5674 readelf.c:5472 strings.c:292
+#, c-format
+msgid "invalid argument to -U/--unicode: %s"
+msgstr "неиÑправан аргумент за „-U/--unicode“: %s"
+
+#: nm.c:2177
msgid "Only -X 32_64 is supported"
msgstr "Подржано је Ñамо „-X 32_64“"
-#: nm.c:1947
+#: nm.c:2209
msgid "Using the --size-sort and --undefined-only options together"
msgstr "КориÑтим заједно опције „--size-sort“ и „--undefined-only“"
-#: nm.c:1948
+#: nm.c:2210
msgid "will produce no output, since undefined symbols have no size."
msgstr "неће дати никаквих резултата, јер неодређени Ñимболи немају величину."
@@ -4957,12 +5100,12 @@ msgid ""
" --debugging Convert debugging information, if possible\n"
" -p --preserve-dates Copy modified/access timestamps to the output\n"
msgstr ""
-" -I --input-target <бфдназив> Сматра да је улазна датотека у запиÑу <бфдназив>\n"
-" -O --output-target <бфдназив> Прави излазну датотеку у запиÑу <бфдназив>\n"
-" -B --binary-architecture <арх> ПоÑтавља архитектуру излаза, када је улаз арх-мање\n"
-" -F --target <бфдназив> ПоÑтавља и улазни и излазни Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° <бфдназив>\n"
-" --debugging Претвара податке прочишћавања, ако је могуће\n"
-" -p --preserve-dates Умножава измењене/приÑтупне временÑке ознаке на излаз\n"
+" -I --input-target <бфдназив> Сматра да је улазна датотека у запиÑу <бфдназив>\n"
+" -O --output-target <бфдназив> Прави излазну датотеку у запиÑу <бфдназив>\n"
+" -B --binary-architecture <арх> ПоÑтавља архитектуру излаза, када је улаз арх-мање\n"
+" -F --target <бфдназив> ПоÑтавља и улазни и излазни Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° <бфдназив>\n"
+" --debugging Претвара податке прочишћавања, ако је могуће\n"
+" -p --preserve-dates Умножава измењене/приÑтупне временÑке ознаке на излаз\n"
#: objcopy.c:574 objcopy.c:714
#, c-format
@@ -5316,7 +5459,7 @@ msgstr "грешка: „%s“ и подешава и мења ЛМÐ"
msgid "cannot open '%s': %s"
msgstr "не могу да отворим „%s“ : %s"
-#: objcopy.c:1094 objcopy.c:5055
+#: objcopy.c:1094 objcopy.c:5091
#, c-format
msgid "%s: fread failed"
msgstr "%s: није уÑпело оÑлобађање"
@@ -5341,589 +5484,593 @@ msgstr "грешка: одељак „%s“ одговара и опцији оÑ
msgid "Section %s not found"
msgstr "ÐиÑам нашао одељак „%s“"
-#: objcopy.c:1654
+#: objcopy.c:1550
+msgid "redefining symbols does not work on LTO-compiled object files"
+msgstr "поновно дефиниÑање Ñимбола не ради на „LTO“-преведеним објектним датотекама"
+
+#: objcopy.c:1662
#, c-format
msgid "not stripping symbol `%s' because it is named in a relocation"
msgstr "не огољавам Ñимбол „%s“ јер је именован у премештају"
-#: objcopy.c:1715
+#: objcopy.c:1723
#, c-format
msgid "'before=%s' not found"
msgstr "ÐиÑам нашао „before=%s“"
-#: objcopy.c:1754
+#: objcopy.c:1762
#, c-format
msgid "%s: Multiple redefinition of symbol \"%s\""
msgstr "%s: ВишеÑтруко поновно одређивање Ñимбола „%s“"
-#: objcopy.c:1758
+#: objcopy.c:1766
#, c-format
msgid "%s: Symbol \"%s\" is target of more than one redefinition"
msgstr "%s: Симбол „%s“ је мета за више од једног поновног одређивања"
-#: objcopy.c:1785
+#: objcopy.c:1793
#, c-format
msgid "couldn't open symbol redefinition file %s (error: %s)"
msgstr "не могу да отворим датотеку поновног одређивања Ñимбола „%s“ (грешка: %s)"
-#: objcopy.c:1863
+#: objcopy.c:1871
#, c-format
msgid "%s:%d: garbage found at end of line"
msgstr "%s:%d: пронађено је ђубре на крају реда"
-#: objcopy.c:1866
+#: objcopy.c:1874
#, c-format
msgid "%s:%d: missing new symbol name"
msgstr "%s:%d: недоÑтаје назив новог Ñимбола"
-#: objcopy.c:1876
+#: objcopy.c:1884
#, c-format
msgid "%s:%d: premature end of file"
msgstr "%s:%d: прерани крај датотеке"
-#: objcopy.c:1903
+#: objcopy.c:1910
#, c-format
msgid "stat returns negative size for `%s'"
msgstr "Ñтат враћа негативну величину за „%s“"
-#: objcopy.c:1915
+#: objcopy.c:1922
#, c-format
msgid "copy from `%s' [unknown] to `%s' [unknown]\n"
msgstr "умножавам из „%s“ [непознато] у „%s“ [непознато]\n"
-#: objcopy.c:2162
+#: objcopy.c:2167
#, c-format
msgid "%s[%s]: Cannot merge - there are relocations against this section"
msgstr "%s[%s]: Ðе могу да Ñтопим – поÑтоје премештаји за овај одељак"
-#: objcopy.c:2184
+#: objcopy.c:2189
msgid "corrupt GNU build attribute note: description size not a factor of 4"
msgstr "оштећена напомена атрибута Гну изградње: величина опиÑа није фактор 4"
-#: objcopy.c:2191
+#: objcopy.c:2196
msgid "corrupt GNU build attribute note: wrong note type"
msgstr "оштећена напомена атрибута Гну изградње: погрешна врÑта напомене"
-#: objcopy.c:2197
+#: objcopy.c:2202
msgid "corrupt GNU build attribute note: note too big"
msgstr "оштећена напомена атрибута Гну изградње: напомена је превелика"
-#: objcopy.c:2203
+#: objcopy.c:2208
msgid "corrupt GNU build attribute note: name too small"
msgstr "оштећена напомена атрибута Гну изградње: назив је премали"
-#: objcopy.c:2226
+#: objcopy.c:2231
msgid "corrupt GNU build attribute note: unsupported version"
msgstr "оштећена напомена атрибута Гну изградње: неподжано издање"
-#: objcopy.c:2260
+#: objcopy.c:2265
msgid "corrupt GNU build attribute note: bad description size"
msgstr "оштећена напомена атрибута Гну изградње: лоша величина опиÑа"
-#: objcopy.c:2296
+#: objcopy.c:2301
msgid "corrupt GNU build attribute note: name not NUL terminated"
msgstr "оштећена напомена атрибута Гну изградње: назив није „NUL“ окончан"
-#: objcopy.c:2308
+#: objcopy.c:2313
msgid "corrupt GNU build attribute notes: excess data at end"
msgstr "оштећена напомена атрибута Гну изградње: превише података на крају"
-#: objcopy.c:2315
+#: objcopy.c:2320
msgid "bad GNU build attribute notes: no known versions detected"
msgstr "лоше напомене атрибута Гну изградње: ниÑам открио позната издања"
#. This happens with glibc. No idea why.
-#: objcopy.c:2319
+#: objcopy.c:2324
#, c-format
msgid "%s[%s]: Warning: version note missing - assuming version 3"
msgstr "%s[%s]: Упозорење: недоÑтаје напомена издања – подразумевам издање 3"
-#: objcopy.c:2329
+#: objcopy.c:2334
msgid "bad GNU build attribute notes: multiple different versions"
msgstr "лоше напомене атрибута Гну изградње: више различитих издања"
-#: objcopy.c:2569
+#: objcopy.c:2574
#, c-format
msgid "%s[%s]: Note - dropping 'share' flag as output format is not COFF"
msgstr "%s[%s]: Ðапомена – одбацујем заÑтавицу „share“ као формат излаза није „COFF“"
#. PR 17636: Call non-fatal so that we return to our parent who
#. may need to tidy temporary files.
-#: objcopy.c:2601
+#: objcopy.c:2606
#, c-format
msgid "unable to change endianness of '%s'"
msgstr "не могу да променим крајњоÑÑ‚ за „%s“"
-#: objcopy.c:2608
+#: objcopy.c:2613
#, c-format
msgid "unable to modify '%s' due to errors"
msgstr "не могу да изменим „%s“ због грешака"
-#: objcopy.c:2621
+#: objcopy.c:2626
#, c-format
msgid "error: the input file '%s' has no sections"
msgstr "грешка: улазна датотека „%s“ нема одељке"
-#: objcopy.c:2631
+#: objcopy.c:2636
#, c-format
msgid "--compress-debug-sections=[zlib|zlib-gnu|zlib-gabi] is unsupported on `%s'"
msgstr "--compress-debug-sections=[zlib|zlib-gnu|zlib-gabi] није подржано на „%s“"
-#: objcopy.c:2638
+#: objcopy.c:2643
#, c-format
msgid "--elf-stt-common=[yes|no] is unsupported on `%s'"
msgstr "--elf-stt-common=[да|не] није подржано на „%s“"
-#: objcopy.c:2645
+#: objcopy.c:2650
#, c-format
msgid "copy from `%s' [%s] to `%s' [%s]\n"
msgstr "умножавам из „%s“ [%s] у „%s“ [%s]\n"
-#: objcopy.c:2693
+#: objcopy.c:2698
#, c-format
msgid "Input file `%s' ignores binary architecture parameter."
msgstr "Улазна датотека „%s“ занемарује бинарне параметре архитектуре."
-#: objcopy.c:2709
+#: objcopy.c:2714
#, c-format
msgid "Unable to recognise the format of the input file `%s'"
msgstr "Ðе могу да препознам Ð·Ð°Ð¿Ð¸Ñ ÑƒÐ»Ð°Ð·Ð½Ðµ датотеке „%s“"
-#: objcopy.c:2712
+#: objcopy.c:2717
#, c-format
msgid "Output file cannot represent architecture `%s'"
msgstr "Излазна датотека не може да предÑтавља архитектуру „%s“"
-#: objcopy.c:2775
+#: objcopy.c:2780
#, c-format
msgid "warning: file alignment (0x%s) > section alignment (0x%s)"
msgstr "упозорење: поравнање датотеке (0x%s) > поравнање одељка (0x%s)"
-#: objcopy.c:2848
+#: objcopy.c:2853
#, c-format
msgid "can't add section '%s'"
msgstr "не могу да додам одељак „%s“"
-#: objcopy.c:2862
+#: objcopy.c:2867
#, c-format
msgid "can't create section `%s'"
msgstr "не могу да направим одељак „%s“"
-#: objcopy.c:2910
+#: objcopy.c:2915
#, c-format
msgid "error: %s not found, can't be updated"
msgstr "грешка: ниÑам нашао „%s“, не може бити оÑвежено"
-#: objcopy.c:2943
+#: objcopy.c:2948
msgid "warning: note section is empty"
msgstr "упозорење: одељак напомене је празан"
-#: objcopy.c:2952
+#: objcopy.c:2957
msgid "warning: could not load note section"
msgstr "упозорење : не могу да учитам одељак напомене"
-#: objcopy.c:2968
+#: objcopy.c:2973
msgid "warning: failed to set merged notes size"
msgstr "упозорење: ниÑам уÑпео да подеÑим Ñпојену величину напомена"
-#: objcopy.c:2994
+#: objcopy.c:2999
#, c-format
msgid "can't dump section '%s' - it does not exist"
msgstr "не могу да избацим одељак „%s“ – не поÑтоји"
-#: objcopy.c:3002
+#: objcopy.c:3007
msgid "can't dump section - it has no contents"
msgstr "не могу да избацим одељак – не Ñадржи ништа"
-#: objcopy.c:3014
+#: objcopy.c:3019
msgid "could not open section dump file"
msgstr "не могу да отворим датотеку избачаја одељка"
-#: objcopy.c:3022
+#: objcopy.c:3027
#, c-format
msgid "error writing section contents to %s (error: %s)"
msgstr "грешка пиÑања Ñадржаја одељка у „%s“ (грешка: %s)"
-#: objcopy.c:3032
+#: objcopy.c:3037
msgid "could not retrieve section contents"
msgstr "не могу да довучем Ñадржај одељка"
-#: objcopy.c:3046
+#: objcopy.c:3051
#, c-format
msgid "%s: debuglink section already exists"
msgstr "%s: већ поÑтоји одељак везе прочишћавања"
-#: objcopy.c:3058
+#: objcopy.c:3063
#, c-format
msgid "cannot create debug link section `%s'"
msgstr "не могу да направим одељак прочишћавања „%s“"
-#: objcopy.c:3152
+#: objcopy.c:3157
msgid "Can't fill gap after section"
msgstr "Ðе могу да попуним јаз након одељка"
-#: objcopy.c:3177
+#: objcopy.c:3182
msgid "can't add padding"
msgstr "не могу да додам попуну"
-#: objcopy.c:3354
+#: objcopy.c:3359
msgid "error: failed to locate merged notes"
msgstr "грешка: ниÑам уÑпео да нађем Ñпојене напомене"
-#: objcopy.c:3363
+#: objcopy.c:3368
msgid "error: failed to merge notes"
msgstr "грешка: ниÑам уÑпео да Ñпојим напомене"
-#: objcopy.c:3372
+#: objcopy.c:3377
msgid "error: failed to copy merged notes into output"
msgstr "грешка: ниÑам уÑпео да умножим Ñпојене напомене у излаз"
-#: objcopy.c:3389
+#: objcopy.c:3394
#, c-format
msgid "%s: Could not find any mergeable note sections"
msgstr "%s: Ðе могу да нађем ниједан Ñпојиви одељак напомена"
-#: objcopy.c:3398
+#: objcopy.c:3403
#, c-format
msgid "cannot fill debug link section `%s'"
msgstr "не могу да попуним одељак прочишћавања „%s“"
-#: objcopy.c:3459
+#: objcopy.c:3464
msgid "error copying private BFD data"
msgstr "ниÑам уÑпео да умножим личне БФД податке"
-#: objcopy.c:3470
+#: objcopy.c:3475
#, c-format
msgid "this target does not support %lu alternative machine codes"
msgstr "ова мета не подржава %lu заменÑке кодове машине"
-#: objcopy.c:3474
+#: objcopy.c:3479
msgid "treating that number as an absolute e_machine value instead"
msgstr "Ñматрам тај број за апÑолутну вредноÑÑ‚ „e_machine“"
-#: objcopy.c:3478
+#: objcopy.c:3483
msgid "ignoring the alternative value"
msgstr "занемарујем заменÑку вредноÑÑ‚"
-#: objcopy.c:3524
+#: objcopy.c:3529
msgid "sorry: copying thin archives is not currently supported"
msgstr "извините: умножавање танане архиве тренутно није подржано"
-#: objcopy.c:3531 objcopy.c:3586
+#: objcopy.c:3536 objcopy.c:3591
#, c-format
msgid "cannot create tempdir for archive copying (error: %s)"
msgstr "не могу да направим привремениу директоријум за умножавање архиве (грешка: %s)"
-#: objcopy.c:3568
+#: objcopy.c:3573
#, c-format
msgid "illegal pathname found in archive member: %s"
msgstr "нађох неиÑправан назив путање у члану архиве: %s"
-#: objcopy.c:3619
+#: objcopy.c:3625
msgid "Unable to recognise the format of file"
msgstr "Ðе могу да препознам Ð·Ð°Ð¿Ð¸Ñ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ"
-#: objcopy.c:3752
+#: objcopy.c:3758
#, c-format
msgid "error: the input file '%s' is empty"
msgstr "грешка: улазна датотека „%s“ је празна"
-#: objcopy.c:3830
+#: objcopy.c:3836
#, c-format
msgid "--add-gnu-debuglink ignored for archive %s"
msgstr "„--add-gnu-debuglink“ је занемарено за архиву „%s“"
-#: objcopy.c:3939
+#: objcopy.c:3945
#, c-format
msgid "Multiple renames of section %s"
msgstr "ВишеÑтрука преименовања одељка %s"
-#: objcopy.c:3985
+#: objcopy.c:3991
msgid "error in private header data"
msgstr "грешка у личним подацима заглавља"
-#: objcopy.c:4078
+#: objcopy.c:4084
msgid "failed to create output section"
msgstr "ниÑам уÑпео да направим излазни одељак"
-#: objcopy.c:4093
+#: objcopy.c:4099
msgid "failed to set size"
msgstr "ниÑам уÑпео да подеÑим величину"
-#: objcopy.c:4112
+#: objcopy.c:4118
msgid "failed to set vma"
msgstr "ниÑам уÑпео да подеÑим вма"
-#: objcopy.c:4142
+#: objcopy.c:4148
msgid "failed to set alignment"
msgstr "ниÑам уÑпео да подеÑим поравнање"
-#: objcopy.c:4174
+#: objcopy.c:4180
msgid "failed to copy private data"
msgstr "ниÑам уÑпео да умножим личне податке"
-#: objcopy.c:4331
+#: objcopy.c:4337
msgid "relocation count is negative"
msgstr "укупноÑÑ‚ премештаја је негативна"
#. User must pad the section up in order to do this.
-#: objcopy.c:4430
+#: objcopy.c:4436
#, c-format
msgid "cannot reverse bytes: length of section %s must be evenly divisible by %d"
msgstr "не могу да преокренем бајтове: дужина одељка %s мора бити парно дељива Ñа %d"
-#: objcopy.c:4638
+#: objcopy.c:4644
msgid "can't create debugging section"
msgstr "не могу да направим одељак прочишћавања"
-#: objcopy.c:4652
+#: objcopy.c:4658
msgid "can't set debugging section contents"
msgstr "не могу да подеÑим Ñадржај одељка прочишћавања"
-#: objcopy.c:4661
+#: objcopy.c:4667
#, c-format
msgid "don't know how to write debugging information for %s"
msgstr "не знам како да упишем податке прочишћавања за %s"
-#: objcopy.c:4850
+#: objcopy.c:4856
msgid "could not create temporary file to hold stripped copy"
msgstr "не могу да Ñтворим привремену датотеку да држим огољени примерак"
-#: objcopy.c:4924
+#: objcopy.c:4930
#, c-format
msgid "%s: bad version in PE subsystem"
msgstr "%s: лоше издање у ПЕ подÑиÑтему"
-#: objcopy.c:4954
+#: objcopy.c:4960
#, c-format
msgid "unknown PE subsystem: %s"
msgstr "непознат ПЕ подÑиÑтем: %s"
-#: objcopy.c:5008 objcopy.c:5280 objcopy.c:5360 objcopy.c:5501 objcopy.c:5533
-#: objcopy.c:5596 objcopy.c:5600 objcopy.c:5620
+#: objcopy.c:5044 objcopy.c:5316 objcopy.c:5396 objcopy.c:5537 objcopy.c:5569
+#: objcopy.c:5632 objcopy.c:5636 objcopy.c:5656
#, c-format
msgid "bad format for %s"
msgstr "лош Ð·Ð°Ð¿Ð¸Ñ Ð·Ð° „%s“"
-#: objcopy.c:5037
+#: objcopy.c:5073
#, c-format
msgid "cannot open: %s: %s"
msgstr "не могу да отворим: %s: %s"
-#: objcopy.c:5092
+#: objcopy.c:5128
msgid "byte number must be non-negative"
msgstr "број бајта мора бити не-негативан"
-#: objcopy.c:5098
+#: objcopy.c:5134
#, c-format
msgid "architecture %s unknown"
msgstr "непозната архитектура %s"
-#: objcopy.c:5106
+#: objcopy.c:5142
msgid "interleave must be positive"
msgstr "преплетање мора бити позитивно"
-#: objcopy.c:5115
+#: objcopy.c:5151
msgid "interleave width must be positive"
msgstr "ширина преплетања мора бити позитивна"
-#: objcopy.c:5433
+#: objcopy.c:5469
#, c-format
msgid "unrecognized --compress-debug-sections type `%s'"
msgstr "непозната „--compress-debug-sections“ врÑта „%s“"
-#: objcopy.c:5454
+#: objcopy.c:5490
#, c-format
msgid "unrecognized --elf-stt-common= option `%s'"
msgstr "непозната „--elf-stt-common“ опција „%s“"
-#: objcopy.c:5470
+#: objcopy.c:5506
#, c-format
msgid "Warning: truncating gap-fill from 0x%s to 0x%x"
msgstr "Упозорење: Ñкраћујем иÑпуну јаза од 0x%s до 0x%x"
-#: objcopy.c:5556
+#: objcopy.c:5592
msgid "bad format for --set-section-alignment: argument needed"
msgstr "лош Ð·Ð°Ð¿Ð¸Ñ Ð·Ð° „--set-section-alignment“: потребан је аргумент"
-#: objcopy.c:5560
+#: objcopy.c:5596
msgid "bad format for --set-section-alignment: numeric argument needed"
msgstr "лош Ð·Ð°Ð¿Ð¸Ñ Ð·Ð° „--set-section-alignment“: потребан је бројевни аргумент"
#. Number has more than on 1, i.e. wasn't a power of 2.
-#: objcopy.c:5572
+#: objcopy.c:5608
msgid "bad format for --set-section-alignment: alignment is not a power of two"
msgstr "лош Ð·Ð°Ð¿Ð¸Ñ Ð·Ð° „--set-section-alignment“: поравнање није Ñтепен двојке"
-#: objcopy.c:5679
+#: objcopy.c:5715
#, c-format
msgid "unknown long section names option '%s'"
msgstr "непозната дуга опција назива одељка „%s“"
-#: objcopy.c:5702
+#: objcopy.c:5738
msgid "unable to parse alternative machine code"
msgstr "не могу да обрадим заменÑки код машине"
-#: objcopy.c:5751
+#: objcopy.c:5787
msgid "number of bytes to reverse must be positive and even"
msgstr "број бајтова за преокретање мора бити позитиван и паран"
-#: objcopy.c:5754
+#: objcopy.c:5790
#, c-format
msgid "Warning: ignoring previous --reverse-bytes value of %d"
msgstr "Упозорење: занемарујем претходну вредноÑÑ‚ „--reverse-bytes“ од %d"
-#: objcopy.c:5769
+#: objcopy.c:5805
#, c-format
msgid "%s: invalid reserve value for --heap"
msgstr "%s: неиÑправна вредноÑÑ‚ резерве за „--heap“"
-#: objcopy.c:5775
+#: objcopy.c:5811
#, c-format
msgid "%s: invalid commit value for --heap"
msgstr "%s: неиÑправна вредноÑÑ‚ предаје за „--heap“"
-#: objcopy.c:5800
+#: objcopy.c:5836
#, c-format
msgid "%s: invalid reserve value for --stack"
msgstr "%s: неиÑправна вредноÑÑ‚ резерве за „--stack“"
-#: objcopy.c:5806
+#: objcopy.c:5842
#, c-format
msgid "%s: invalid commit value for --stack"
msgstr "%s: неиÑправна вредноÑÑ‚ предаје за „--stack“"
-#: objcopy.c:5815
+#: objcopy.c:5851
msgid "verilog data width must be at least 1 byte"
msgstr "ширина верилог података мора бити барем 1 бајт"
-#: objcopy.c:5832
+#: objcopy.c:5868
msgid "--globalize-symbol(s) is incompatible with -G/--keep-global-symbol(s)"
msgstr "„--globalize-symbol(s)“ није ÑаглаÑно Ñа „-G/--keep-global-symbol(s)“"
-#: objcopy.c:5844
+#: objcopy.c:5880
msgid "interleave start byte must be set with --byte"
msgstr "почетни бајт преплетања мора бити подешен опцијом „--byte“"
-#: objcopy.c:5847
+#: objcopy.c:5883
msgid "byte number must be less than interleave"
msgstr "број бајтова мора бити мањи од преплетања"
-#: objcopy.c:5850
+#: objcopy.c:5886
msgid "interleave width must be less than or equal to interleave - byte`"
msgstr "ширина преплетања мора бити мања од или иÑта као преплетање – byte`"
-#: objcopy.c:5879
+#: objcopy.c:5909
#, c-format
msgid "unknown input EFI target: %s"
msgstr "непозната улазна ЕФИ мета: %s"
-#: objcopy.c:5910
+#: objcopy.c:5919
#, c-format
msgid "unknown output EFI target: %s"
msgstr "непозната излазна ЕФИ мета: %s"
-#: objcopy.c:5936
+#: objcopy.c:5943
#, c-format
msgid "warning: could not create temporary file whilst copying '%s', (error: %s)"
msgstr "упозорење: не могу да направим привремену датотеку док умножавам „%s“ (грешка: %s)"
-#: objcopy.c:5973 objcopy.c:5987
+#: objcopy.c:5980 objcopy.c:5994
#, c-format
msgid "%s %s%c0x%s never used"
msgstr "%s %s%c0x%s никада коришћено"
-#: objdump.c:212
+#: objdump.c:225
#, c-format
msgid "Usage: %s <option(s)> <file(s)>\n"
msgstr "Употреба: %s <опција(е)> <датотека(е)>\n"
-#: objdump.c:213
+#: objdump.c:226
#, c-format
msgid " Display information from object <file(s)>.\n"
msgstr " Приказује податке из <датотеке(а)> предмета.\n"
-#: objdump.c:214
+#: objdump.c:227
#, c-format
msgid " At least one of the following switches must be given:\n"
msgstr " Барем један од Ñледећих прекидача мора бити дат:\n"
-#: objdump.c:215
+#: objdump.c:228
#, c-format
msgid " -a, --archive-headers Display archive header information\n"
msgstr " -a, --archive-headers Приказује информације заглавља архиве\n"
-#: objdump.c:217
+#: objdump.c:230
#, c-format
msgid " -f, --file-headers Display the contents of the overall file header\n"
msgstr " -f, --file-headers Приказује Ñадржаје преклопних заглавља датотеке\n"
-#: objdump.c:219
+#: objdump.c:232
#, c-format
msgid " -p, --private-headers Display object format specific file header contents\n"
msgstr " -p, --private-headers Приказује Ñадржај заглавља датотеке Ñпецифичне за формат објекта\n"
-#: objdump.c:221
+#: objdump.c:234
#, c-format
msgid " -P, --private=OPT,OPT... Display object format specific contents\n"
msgstr " -P, --private=OPT,OPT... Приказује Ñадржај Ñпецифичан формату објекта\n"
-#: objdump.c:223
+#: objdump.c:236
#, c-format
msgid " -h, --[section-]headers Display the contents of the section headers\n"
msgstr " -h, --[одељка-]заглавља Приказује Ñадржај заглавља одељка\n"
-#: objdump.c:225
+#: objdump.c:238
#, c-format
msgid " -x, --all-headers Display the contents of all headers\n"
msgstr " -x, --all-headers Приказује Ñадржај Ñвих заглавља\n"
-#: objdump.c:227
+#: objdump.c:240
#, c-format
msgid " -d, --disassemble Display assembler contents of executable sections\n"
msgstr " -d, --disassemble Приказује Ñадржај аÑемблера извршних одељака\n"
-#: objdump.c:229
+#: objdump.c:242
#, c-format
msgid " -D, --disassemble-all Display assembler contents of all sections\n"
msgstr " -D, --disassemble Приказује Ñадржај аÑемблера Ñвих одељака\n"
-#: objdump.c:231
+#: objdump.c:244
#, c-format
msgid " --disassemble=<sym> Display assembler contents from <sym>\n"
msgstr " --disassemble=<Ñим> Приказује Ñадржај аÑемблера за <Ñим>\n"
-#: objdump.c:233
+#: objdump.c:246
#, c-format
msgid " -S, --source Intermix source code with disassembly\n"
msgstr " -S, --source Меша изворни код Ñа рашчлањивачем\n"
-#: objdump.c:235
+#: objdump.c:248
#, c-format
msgid " --source-comment[=<txt>] Prefix lines of source code with <txt>\n"
msgstr " --source-comment[=<текÑÑ‚>] Ставља <текÑÑ‚> као Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ Ð¸Ð·Ð²Ð¾Ñ€Ð½Ð¾Ð³ кода\n"
-#: objdump.c:237
+#: objdump.c:250
#, c-format
msgid " -s, --full-contents Display the full contents of all sections requested\n"
msgstr " -s, --full-contents Приказује пун Ñадржај Ñвих захтеваних одељака\n"
-#: objdump.c:239
+#: objdump.c:252
#, c-format
msgid " -g, --debugging Display debug information in object file\n"
msgstr " -g, --debugging Приказује информације прочишћавања у објектној датотеци\n"
-#: objdump.c:241
+#: objdump.c:254
#, c-format
msgid " -e, --debugging-tags Display debug information using ctags style\n"
msgstr " -e, --debugging-tags Приказује информације прочишћавања кориÑтећи „ctags“ Ñтил\n"
-#: objdump.c:243
+#: objdump.c:256
#, c-format
msgid " -G, --stabs Display (in raw form) any STABS info in the file\n"
msgstr " -G, --stabs Приказује (у Ñировом облики+у) Ñве „STABS“ информације у датотеци\n"
-#: objdump.c:245
+#: objdump.c:258
#, c-format
msgid ""
" -W, --dwarf[a/=abbrev, A/=addr, r/=aranges, c/=cu_index, L/=decodedline,\n"
@@ -5940,7 +6087,7 @@ msgstr ""
" U/=инфо_трага]\n"
" Приказује Ñадржај одељака „DWARF“ прочишћавања\n"
-#: objdump.c:252
+#: objdump.c:265
#, c-format
msgid ""
" -Wk,--dwarf=links Display the contents of sections that link to\n"
@@ -5949,7 +6096,7 @@ msgstr ""
" -Wk,--dwarf=links Приказује Ñадржај одељака који повезују на одвојене\n"
" датотеке информација прочишћавања\n"
-#: objdump.c:256
+#: objdump.c:269
#, c-format
msgid ""
" -WK,--dwarf=follow-links\n"
@@ -5958,7 +6105,7 @@ msgstr ""
" -WK,--dwarf=follow-links\n"
" Прати везе до одвојених датотека информација прочишћавања (оÑновно)\n"
-#: objdump.c:259
+#: objdump.c:272
#, c-format
msgid ""
" -WN,--dwarf=no-follow-links\n"
@@ -5967,7 +6114,7 @@ msgstr ""
" -WN,--dwarf=no-follow-links\n"
" Ðе прати везе до одвојених датотека информација прочишћавања\n"
-#: objdump.c:263
+#: objdump.c:276
#, c-format
msgid ""
" -WK,--dwarf=follow-links\n"
@@ -5976,7 +6123,7 @@ msgstr ""
" -WK,--dwarf=follow-links\n"
" Прати везе до одвојених датотека информација прочишћавања\n"
-#: objdump.c:266
+#: objdump.c:279
#, c-format
msgid ""
" -WN,--dwarf=no-follow-links\n"
@@ -5987,7 +6134,7 @@ msgstr ""
" Ðе прати везе до одвојених датотека информација прочишћавања\n"
" (оÑновно)\n"
-#: objdump.c:271
+#: objdump.c:284
#, c-format
msgid ""
" -L, --process-links Display the contents of non-debug sections in\n"
@@ -5996,52 +6143,52 @@ msgstr ""
" -L, --process-links Приказује Ñадржај одељака не-прочишћавања у\n"
" одвојеним датотекама информација прочишћавања. (Подразумева „-WK“)\n"
-#: objdump.c:275
+#: objdump.c:288
#, c-format
-msgid " --ctf=SECTION Display CTF info from SECTION\n"
-msgstr " --ctf=ОДЕЉÐК Приказује „CTF“ податке из ОДЕЉКÐ\n"
+msgid " --ctf[=SECTION] Display CTF info from SECTION, (default `.ctf')\n"
+msgstr " --ctf[=ОДЕЉÐК] Приказује „CTF“ податке из ОДЕЉКÐ, (оÑновно је „.ctf“)\n"
-#: objdump.c:278
+#: objdump.c:291
#, c-format
msgid " -t, --syms Display the contents of the symbol table(s)\n"
msgstr " -t, --syms Приказује Ñадржај табеле(а) Ñимбола\n"
-#: objdump.c:280
+#: objdump.c:293
#, c-format
msgid " -T, --dynamic-syms Display the contents of the dynamic symbol table\n"
msgstr " -T, --dynamic-syms Приказује Ñадржај динамичке табеле Ñимбола\n"
-#: objdump.c:282
+#: objdump.c:295
#, c-format
msgid " -r, --reloc Display the relocation entries in the file\n"
msgstr " -r, --reloc Приказује уноÑе премештања у датотеци\n"
-#: objdump.c:284
+#: objdump.c:297
#, c-format
msgid " -R, --dynamic-reloc Display the dynamic relocation entries in the file\n"
msgstr " -R, --reloc Приказује динамичке уноÑе премештања у датотеци\n"
-#: objdump.c:286
+#: objdump.c:299
#, c-format
msgid " @<file> Read options from <file>\n"
msgstr " @<датотека> Чита опције из <датотеке>\n"
-#: objdump.c:288
+#: objdump.c:301
#, c-format
msgid " -v, --version Display this program's version number\n"
msgstr " -V --version Приказује издање овог програма\n"
-#: objdump.c:290
+#: objdump.c:303
#, c-format
msgid " -i, --info List object formats and architectures supported\n"
msgstr " -i, --info ИÑпиÑује подржане објектне формате и архитектуре\n"
-#: objdump.c:292
+#: objdump.c:305
#, c-format
msgid " -H, --help Display this information\n"
msgstr " -H --help Приказује ове информације\n"
-#: objdump.c:299
+#: objdump.c:312
#, c-format
msgid ""
"\n"
@@ -6050,70 +6197,66 @@ msgstr ""
"\n"
" Следећи прекидачи Ñу опционални:\n"
-#: objdump.c:300
+#: objdump.c:313
#, c-format
msgid " -b, --target=BFDNAME Specify the target object format as BFDNAME\n"
msgstr " -b, --target=БФДÐÐЗИВ Ðаводи формат објекта мете као БФДÐÐЗИВ\n"
-#: objdump.c:302
+#: objdump.c:315
#, c-format
msgid " -m, --architecture=MACHINE Specify the target architecture as MACHINE\n"
msgstr " -m, --architecture=РÐЧУÐÐР Ðаводи циљну архитектуру као РÐЧУÐÐР\n"
-#: objdump.c:304
+#: objdump.c:317
#, c-format
msgid " -j, --section=NAME Only display information for section NAME\n"
msgstr " -j, --section=ÐÐЗИВ Само приказује информације за одељак ÐÐЗИВ\n"
-#: objdump.c:306
+#: objdump.c:319
#, c-format
msgid " -M, --disassembler-options=OPT Pass text OPT on to the disassembler\n"
msgstr " -M, --disassembler-options=ОПЦ Убацује текÑÑ‚ ОПЦ у рашчлањивач\n"
-#: objdump.c:308
+#: objdump.c:321
#, c-format
msgid " -EB --endian=big Assume big endian format when disassembling\n"
msgstr " -EB --endian=велика Подразумева формат велике крајњоÑти приликом рашчлањивања\n"
-#: objdump.c:310
+#: objdump.c:323
#, c-format
msgid " -EL --endian=little Assume little endian format when disassembling\n"
msgstr " -EL --endian=мала Подразумева формат мале крајњоÑти приликом рашчлањивања\n"
-#: objdump.c:312
+#: objdump.c:325
#, c-format
msgid " --file-start-context Include context from start of file (with -S)\n"
msgstr " --file-start-context Укључује Ñаджај Ñа почетка датотеке (Ñа „-S“)\n"
-#: objdump.c:314
+#: objdump.c:327
#, c-format
msgid " -I, --include=DIR Add DIR to search list for source files\n"
msgstr " -I, --include=ДИР Додаје ДИР на ÑпиÑак претраге за изворне датотеке\n"
-#: objdump.c:316
+#: objdump.c:329
#, c-format
msgid " -l, --line-numbers Include line numbers and filenames in output\n"
msgstr " -l, --line-numbers Укључује бројеве редова и називе датотека на излазу\n"
-#: objdump.c:318
+#: objdump.c:331
#, c-format
msgid " -F, --file-offsets Include file offsets when displaying information\n"
msgstr " -F, --file-offsets Укључује помераје датотека приликом приказивања информација\n"
-#: objdump.c:320
+#: objdump.c:333
#, c-format
-msgid ""
-" -C, --demangle[=STYLE] Decode mangled/processed symbol names\n"
-" The STYLE, if specified, can be `auto', `gnu',\n"
-" `lucid', `arm', `hp', `edg', `gnu-v3', `java'\n"
-" or `gnat'\n"
-msgstr ""
-" -C, --demangle[=СТИЛ] Декодира прекрштене/обрађене називе Ñимбола\n"
-" СТИЛ, ако је наведен, може бити „auto“, „gnu“,\n"
-" „lucid“, „arm“, „hp“, „edg“, „gnu-v3“, „java“\n"
-" или „gnat“\n"
+msgid " -C, --demangle[=STYLE] Decode mangled/processed symbol names\n"
+msgstr " -C, --demangle[=СТИЛ] Декодира прекрштене/обрађене називе Ñимбола\n"
-#: objdump.c:325
+#: objdump.c:335
+msgid " STYLE can be "
+msgstr " СТИЛ може бити "
+
+#: objdump.c:337
#, c-format
msgid ""
" --recurse-limit Enable a limit on recursion whilst demangling\n"
@@ -6122,107 +6265,116 @@ msgstr ""
" --recurse-limit Укључује ограничење понављања приликом раÑкршћавања\n"
" (оÑновно)\n"
-#: objdump.c:328
+#: objdump.c:340
#, c-format
msgid " --no-recurse-limit Disable a limit on recursion whilst demangling\n"
msgstr " --no-recurse-limit ИÑкључује ограничење понављања приликом раÑкршћавања\n"
-#: objdump.c:330
+#: objdump.c:342
#, c-format
msgid " -w, --wide Format output for more than 80 columns\n"
msgstr " -w, --wide Обликује излаз за више од 80 колона\n"
-#: objdump.c:332
+#: objdump.c:344
+#, c-format
+msgid ""
+" -U[d|l|i|x|e|h] Controls the display of UTF-8 unicode characters\n"
+" --unicode=[default|locale|invalid|hex|escape|highlight]\n"
+msgstr ""
+" -U[d|l|i|x|e|h] Контролише приказ УТФ-8 јуникод знакова\n"
+" --unicode=[default|locale|invalid|hex|escape|highlight]\n"
+
+#: objdump.c:347
#, c-format
msgid " -z, --disassemble-zeroes Do not skip blocks of zeroes when disassembling\n"
msgstr " -z, --disassemble-zeroes Ðе преÑкаче блокове нула приликом рашчлањивања\n"
-#: objdump.c:334
+#: objdump.c:349
#, c-format
msgid " --start-address=ADDR Only process data whose address is >= ADDR\n"
msgstr " --start-address=ÐДР Само обрађује податке чија адреÑа је >= ÐДР\n"
-#: objdump.c:336
+#: objdump.c:351
#, c-format
msgid " --stop-address=ADDR Only process data whose address is < ADDR\n"
msgstr " --stop-address=ÐДР Само обрађује податке чија адреÑа је < ÐДР\n"
-#: objdump.c:338
+#: objdump.c:353
#, c-format
msgid " --no-addresses Do not print address alongside disassembly\n"
msgstr " --no-addresses Ðе иÑпиÑује адреÑе уз рашчлањивање\n"
-#: objdump.c:340
+#: objdump.c:355
#, c-format
msgid " --prefix-addresses Print complete address alongside disassembly\n"
msgstr " --prefix-addresses ИÑпиÑује потпуну адреÑу уз рашчлањивање\n"
-#: objdump.c:342
+#: objdump.c:357
#, c-format
msgid " --[no-]show-raw-insn Display hex alongside symbolic disassembly\n"
msgstr " --[no-]show-raw-insn Приказује хекÑадецимално уз Ñимболичко рашчлањивање\n"
-#: objdump.c:344
+#: objdump.c:359
#, c-format
msgid " --insn-width=WIDTH Display WIDTH bytes on a single line for -d\n"
msgstr " --insn-width=ШИРИÐРПриказује ШИРИÐРбајтова у једном реду за „-d“\n"
-#: objdump.c:346
+#: objdump.c:361
#, c-format
msgid " --adjust-vma=OFFSET Add OFFSET to all displayed section addresses\n"
msgstr " --adjust-vma=ПОМЕРÐЈ Додаје ПОМЕРÐЈ Ñвим приказаним адреÑама одељка\n"
-#: objdump.c:348
+#: objdump.c:363
#, c-format
msgid " --special-syms Include special symbols in symbol dumps\n"
msgstr " --special-syms Укључује нарочите Ñимболе у иÑпиÑу Ñимбола\n"
-#: objdump.c:350
+#: objdump.c:365
#, c-format
msgid " --inlines Print all inlines for source line (with -l)\n"
msgstr " --inlines ИÑпиÑује Ñва надовезивања за изворни ред (Ñа „-l“)\n"
-#: objdump.c:352
+#: objdump.c:367
#, c-format
msgid " --prefix=PREFIX Add PREFIX to absolute paths for -S\n"
msgstr " --prefix=ПРЕФИКС Додаје ПРЕФИКС апÑолутним путањама за „-S“\n"
-#: objdump.c:354
+#: objdump.c:369
#, c-format
msgid " --prefix-strip=LEVEL Strip initial directory names for -S\n"
msgstr " --prefix-strip=ÐИВО ИÑпражњује почетне називе директоријума за „-S“\n"
-#: objdump.c:356
+#: objdump.c:371
#, c-format
msgid " --dwarf-depth=N Do not display DIEs at depth N or greater\n"
msgstr " --dwarf-depth=N Ðе приказује „DIE“-е на дубини N или већој\n"
-#: objdump.c:358
+#: objdump.c:373
#, c-format
msgid " --dwarf-start=N Display DIEs starting at offset N\n"
msgstr " --dwarf-start=N Приказује „DIE“ почевши на померају N\n"
-#: objdump.c:360
+#: objdump.c:375
#, c-format
msgid " --dwarf-check Make additional dwarf consistency checks.\n"
msgstr " --dwarf-check Одрађује додатна проверавања „dwarf“ доÑледноÑти.\n"
-#: objdump.c:363
+#: objdump.c:378
#, c-format
-msgid " --ctf-parent=SECTION Use SECTION as the CTF parent\n"
-msgstr " --ctf-parent=ОДЕЉÐК КориÑти ОДЕЉÐК као родитеља „CTF“-а\n"
+msgid " --ctf-parent=NAME Use CTF archive member NAME as the CTF parent\n"
+msgstr " --ctf-parent=ÐÐЗИВ КориÑти ÐÐЗИВ „CTF“ члана архиве као родитеља „CTF“-а\n"
-#: objdump.c:366
+#: objdump.c:381
#, c-format
msgid " --visualize-jumps Visualize jumps by drawing ASCII art lines\n"
msgstr " --visualize-jumps Приказује Ñкокове иÑцртавајући редове ÐСКРИ Ñимболима\n"
-#: objdump.c:368
+#: objdump.c:383
#, c-format
msgid " --visualize-jumps=color Use colors in the ASCII art\n"
msgstr " --visualize-jumps=боја КориÑти боје у ÐСКРИ иÑпиÑу\n"
-#: objdump.c:370
+#: objdump.c:385
#, c-format
msgid ""
" --visualize-jumps=extended-color\n"
@@ -6231,7 +6383,7 @@ msgstr ""
" --visualize-jumps=проширена-боја\n"
" КориÑти проширене 8-битне кодове боје\n"
-#: objdump.c:373
+#: objdump.c:388
#, c-format
msgid ""
" --visualize-jumps=off Disable jump visualization\n"
@@ -6240,7 +6392,7 @@ msgstr ""
" --visualize-jumps=off ИÑкључује приказивање Ñкока\n"
"\n"
-#: objdump.c:384
+#: objdump.c:399
#, c-format
msgid ""
"\n"
@@ -6249,71 +6401,71 @@ msgstr ""
"\n"
"Подржане опције за прекидач „-P/--private“:\n"
-#: objdump.c:621
+#: objdump.c:759
#, c-format
msgid "section '%s' mentioned in a -j option, but not found in any input file"
msgstr "одељак „%s“ је поменут у опцији „-j“, али га нема ни у једној улазној датотеци"
-#: objdump.c:776
+#: objdump.c:914
#, c-format
msgid "Sections:\n"
msgstr "Одељци:\n"
-#: objdump.c:782
+#: objdump.c:920
#, c-format
msgid "Idx %-*s Size %-*s%-*sFile off Algn"
msgstr "Idx %-*s Величина %-*s%-*sДатотека Поравн"
-#: objdump.c:788
+#: objdump.c:926
#, c-format
msgid " Flags"
msgstr " Опције"
-#: objdump.c:810
+#: objdump.c:948
#, c-format
msgid "failed to read symbol table from: %s"
msgstr "ниÑам уÑпео да прочитам табелу Ñимбола из: %s"
-#: objdump.c:811 objdump.c:4753
+#: objdump.c:949 objdump.c:4907
msgid "error message was"
msgstr "порука грешке беше"
-#: objdump.c:826
+#: objdump.c:964
#, c-format
msgid "error: symbol table size (%#lx) is larger than filesize (%#lx)"
msgstr "грешка: величина табеле Ñимбола (%#lx) је већа од величине датотеке (%#lx)"
-#: objdump.c:856
+#: objdump.c:994
#, c-format
msgid "%s: not a dynamic object"
msgstr "%s: није динамички објекат"
-#: objdump.c:1455 objdump.c:1482
+#: objdump.c:1593 objdump.c:1620
#, c-format
msgid " (File Offset: 0x%lx)"
msgstr " (Померај датотеке: 0x%lx)"
-#: objdump.c:1727
+#: objdump.c:1865
#, c-format
msgid "source file %s is more recent than object file\n"
msgstr "датотека извора „%s“ је новија од датотеке објекта\n"
-#: objdump.c:2755
+#: objdump.c:2893
#, c-format
msgid "\t... (skipping %lu zeroes, resuming at file offset: 0x%lx)\n"
msgstr "\t... (преÑкачем %lu нуле, наÑтављам на померају датотеке: 0x%lx)\n"
-#: objdump.c:2887
+#: objdump.c:3025
#, c-format
msgid "disassemble_fn returned length %d"
msgstr "„disassemble_fn“ даје дужину %d"
-#: objdump.c:3215 objdump.c:4391
+#: objdump.c:3353 objdump.c:4527
#, c-format
msgid "Reading section %s failed because: %s"
msgstr "ÐиÑам уÑпео да прочитам одељак %s због: %s"
-#: objdump.c:3236
+#: objdump.c:3374
#, c-format
msgid ""
"\n"
@@ -6322,17 +6474,17 @@ msgstr ""
"\n"
"РаÑтављање одељка %s:\n"
-#: objdump.c:3527
+#: objdump.c:3665
#, c-format
msgid "can't use supplied machine %s"
msgstr "не могу да кориÑтим доÑтављену машину %s"
-#: objdump.c:3548
+#: objdump.c:3686
#, c-format
msgid "can't disassemble for architecture %s\n"
msgstr "не могу да раÑтавим за архитектуру %s\n"
-#: objdump.c:3637
+#: objdump.c:3775
#, c-format
msgid ""
"\n"
@@ -6341,7 +6493,7 @@ msgstr ""
"\n"
"Одељак „%s“ има неиÑправну величину: %#llx.\n"
-#: objdump.c:3682
+#: objdump.c:3820
#, c-format
msgid ""
"\n"
@@ -6350,12 +6502,12 @@ msgstr ""
"\n"
"Ðе могу да добавим Ñадржај за одељак „%s“.\n"
-#: objdump.c:3844
+#: objdump.c:3999
#, c-format
msgid "File %s does not contain any dwarf debug information\n"
msgstr "Датотека „%s“ не Ñадржи никакве „dwarf“ податке прочишћавања\n"
-#: objdump.c:3881
+#: objdump.c:4036
#, c-format
msgid ""
"No %s section present\n"
@@ -6364,12 +6516,12 @@ msgstr ""
"Ðема %s одељка\n"
"\n"
-#: objdump.c:3888
+#: objdump.c:4043
#, c-format
msgid "reading %s section of %s failed: %s"
msgstr "ниÑам уÑпео да прочитам одељак %s од %s: %s"
-#: objdump.c:3934
+#: objdump.c:4089
#, c-format
msgid ""
"Contents of %s section:\n"
@@ -6378,17 +6530,17 @@ msgstr ""
"Садржај одељка %s:\n"
"\n"
-#: objdump.c:4068
+#: objdump.c:4223
#, c-format
msgid "architecture: %s, "
msgstr "архитектура: %s, "
-#: objdump.c:4071
+#: objdump.c:4226
#, c-format
msgid "flags 0x%08x:\n"
msgstr "опције 0x%08x:\n"
-#: objdump.c:4084
+#: objdump.c:4239
#, c-format
msgid ""
"\n"
@@ -6397,25 +6549,25 @@ msgstr ""
"\n"
"почетна адреÑа 0x"
-#: objdump.c:4134 readelf.c:15094
+#: objdump.c:4289 readelf.c:15478
#, c-format
msgid "%s: %s"
msgstr "%s: %s"
-#: objdump.c:4134 readelf.c:15094
+#: objdump.c:4289 readelf.c:15478
msgid "warning"
msgstr "упозорење"
-#: objdump.c:4134 readelf.c:15094
+#: objdump.c:4289 readelf.c:15478
msgid "error"
msgstr "грешка"
-#: objdump.c:4140 readelf.c:15099
+#: objdump.c:4295 readelf.c:15483
#, c-format
msgid "CTF error: cannot get CTF errors: `%s'"
msgstr "„CTF“ грешка: не могу да добавим „CTF“ грешке: %s"
-#: objdump.c:4167 readelf.c:15125
+#: objdump.c:4319 readelf.c:15505
#, c-format
msgid ""
"\n"
@@ -6424,71 +6576,71 @@ msgstr ""
"\n"
"Члан „CTF“ архиве: %s:\n"
-#: objdump.c:4186
+#: objdump.c:4339
#, c-format
msgid "Iteration failed: %s, %s"
msgstr "Понављање није уÑпело: %s, %s"
-#: objdump.c:4223 objdump.c:4233 objdump.c:4248
+#: objdump.c:4377 objdump.c:4384
#, c-format
msgid "CTF open failure: %s"
msgstr "ÐиÑам уÑпео да отворим „CTF“: %s"
-#: objdump.c:4252
+#: objdump.c:4388
#, c-format
msgid "Contents of CTF section %s:\n"
msgstr "Садржај „CTF“ одељка %s:\n"
-#: objdump.c:4257
+#: objdump.c:4395
#, c-format
msgid "CTF archive member open failure: %s"
msgstr "неуÑпех отварања члана „CTF“ архиве: %s"
-#: objdump.c:4277
+#: objdump.c:4413
#, c-format
msgid "warning: private headers incomplete: %s"
msgstr "упозорење: лична заглавља Ñу непотпуна: %s"
-#: objdump.c:4295
+#: objdump.c:4431
msgid "option -P/--private not supported by this file"
msgstr "опција „-P/--private“ није подржана овом датотеком"
-#: objdump.c:4319
+#: objdump.c:4455
#, c-format
msgid "target specific dump '%s' not supported"
msgstr "нарочит избачај мете „%s“ није подржан"
-#: objdump.c:4383
+#: objdump.c:4519
#, c-format
msgid "Contents of section %s:"
msgstr "Садржај одељка %s:"
-#: objdump.c:4385
+#: objdump.c:4521
#, c-format
msgid " (Starting at file offset: 0x%lx)"
msgstr " (Почињем на померају датотеке: 0x%lx)"
-#: objdump.c:4495
+#: objdump.c:4631
#, c-format
msgid "no symbols\n"
msgstr "нема Ñимбола\n"
-#: objdump.c:4502
+#: objdump.c:4638
#, c-format
msgid "no information for symbol number %ld\n"
msgstr "нема података за број Ñимбола %ld\n"
-#: objdump.c:4505
+#: objdump.c:4641
#, c-format
msgid "could not determine the type of symbol number %ld\n"
msgstr "не могу да одредим врÑту броја Ñимбола %ld\n"
-#: objdump.c:4751
+#: objdump.c:4905
#, c-format
msgid "failed to read relocs in: %s"
msgstr "ниÑам уÑпео да прочитам премештања у: %s"
-#: objdump.c:4911
+#: objdump.c:5064
#, c-format
msgid ""
"\n"
@@ -6497,52 +6649,52 @@ msgstr ""
"\n"
"%s: Ð·Ð°Ð¿Ð¸Ñ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ %s\n"
-#: objdump.c:5011
+#: objdump.c:5172
#, c-format
msgid "%s: printing debugging information failed"
msgstr "%s: није уÑпело иÑпиÑивање података прочишћавања"
-#: objdump.c:5107
+#: objdump.c:5268
#, c-format
msgid "In archive %s:\n"
msgstr "У архиви %s:\n"
#. Prevent corrupted files from spinning us into an
#. infinite loop. 100 is an arbitrary heuristic.
-#: objdump.c:5112
+#: objdump.c:5273
msgid "Archive nesting is too deep"
msgstr "Угнежђење архиве је предубоко"
-#: objdump.c:5116
+#: objdump.c:5277
#, c-format
msgid "In nested archive %s:\n"
msgstr "У угнежденој архиви %s:\n"
-#: objdump.c:5279
+#: objdump.c:5440
msgid "error: the start address should be before the end address"
msgstr "грешка: адреÑа почетка мора бити пре адреÑе краја"
-#: objdump.c:5284
+#: objdump.c:5445
msgid "error: the stop address should be after the start address"
msgstr "грешка: адреÑа краја мора бити након адреÑе почетка"
-#: objdump.c:5296
+#: objdump.c:5457
msgid "error: prefix strip must be non-negative"
msgstr "грешка: иÑцепак префикÑа мора бити не-негативан"
-#: objdump.c:5301
+#: objdump.c:5462
msgid "error: instruction width must be positive"
msgstr "грешка: ширина инÑтрукције мора бити позитивна"
-#: objdump.c:5322
+#: objdump.c:5483
msgid "unrecognized argument to --visualize-option"
msgstr "непознати аргументи за „--visualize-option“"
-#: objdump.c:5332
+#: objdump.c:5493
msgid "unrecognized -E option"
msgstr "непозната опција „-E“"
-#: objdump.c:5343
+#: objdump.c:5504
#, c-format
msgid "unrecognized --endian type `%s'"
msgstr "непозната „--endian“ врÑта „%s“"
@@ -6877,7 +7029,7 @@ msgstr " број одељака: %d\n"
msgid " time and date: 0x%08x - "
msgstr " време и датум: 0x%08x – "
-#: od-xcoff.c:421 readelf.c:19706
+#: od-xcoff.c:421 readelf.c:20126
#, c-format
msgid "not set\n"
msgstr "није подешено\n"
@@ -7344,363 +7496,375 @@ msgstr "%s: %s: ÑƒÐ½Ð¾Ñ Ð¾ÐºÑ€ÑšÐºÐ° %ld је оштећен\n"
msgid "Last stabs entries before error:\n"
msgstr "ПоÑледњи уноÑи ударца пре грешке:\n"
-#: readelf.c:354
+#: readelf.c:385
msgid "<none>"
msgstr "<ништа>"
-#: readelf.c:355
+#: readelf.c:387
msgid "<no-strings>"
msgstr "<нема ниÑки>"
-#: readelf.c:437
+#: readelf.c:482
#, c-format
msgid "Size truncation prevents reading %s elements of size %s for %s\n"
msgstr "Скраћивање величине Ñпречава читање %s елемента величине %s за %s\n"
-#: readelf.c:447
+#: readelf.c:492
#, c-format
msgid "Size overflow prevents reading %s elements of size %s for %s\n"
msgstr "Прекорачење величине Ñпречава читање %s елемента величине %s за %s\n"
-#: readelf.c:460
+#: readelf.c:505
#, c-format
msgid "Reading %s bytes extends past end of file for %s\n"
msgstr "Читање %s бајта превазилази крај датотеке за „%s“\n"
-#: readelf.c:469
+#: readelf.c:514
#, c-format
msgid "Unable to seek to 0x%lx for %s\n"
msgstr "Ðе могу да премотам на 0x%lx за „%s“\n"
-#: readelf.c:483
+#: readelf.c:528
#, c-format
msgid "Out of memory allocating %s bytes for %s\n"
msgstr "ПонеÑтало је меморије за време додељивања %s бајта за „%s“\n"
-#: readelf.c:494
+#: readelf.c:539
#, c-format
msgid "Unable to read in %s bytes of %s\n"
msgstr "Ðе могу да прочитам %s бајта од %s\n"
-#: readelf.c:971
+#: readelf.c:1151
msgid "Don't know about relocations on this machine architecture\n"
msgstr "Ðе знам о премештајима на овој архитектури машине\n"
-#: readelf.c:998 readelf.c:1103
+#: readelf.c:1178 readelf.c:1283
msgid "32-bit relocation data"
msgstr "32-битни подаци премештаја"
-#: readelf.c:1010 readelf.c:1040 readelf.c:1114 readelf.c:1143
+#: readelf.c:1190 readelf.c:1220 readelf.c:1294 readelf.c:1323 readelf.c:1402
msgid "out of memory parsing relocs\n"
msgstr "понеÑтало је меморије за време обраде премештаја\n"
-#: readelf.c:1028 readelf.c:1132
+#: readelf.c:1208 readelf.c:1312
msgid "64-bit relocation data"
msgstr "64-битни подаци премештаја"
-#: readelf.c:1262
+#: readelf.c:1376
+msgid "RELR relocation data"
+msgstr "„RELR“ подаци премештаја"
+
+#: readelf.c:1516
+#, c-format
+msgid " %lu offset\n"
+msgid_plural " %lu offsets\n"
+msgstr[0] " %lu померај\n"
+msgstr[1] " %lu помераја\n"
+msgstr[2] " %lu помераја\n"
+
+#: readelf.c:1528
#, c-format
msgid " Offset Info Type Sym. Value Symbol's Name + Addend\n"
msgstr " Померај Инфо Ð’Ñ€Ñта Вред Ñмбла Ðзив Ñмбла + Сабирак\n"
-#: readelf.c:1264
+#: readelf.c:1530
#, c-format
msgid " Offset Info Type Sym.Value Sym. Name + Addend\n"
msgstr " Померај Инфо Ð’Ñ€Ñта Вред Ñмбла Ðзив Ñмбла + Сабирак\n"
-#: readelf.c:1269
+#: readelf.c:1535
#, c-format
msgid " Offset Info Type Sym. Value Symbol's Name\n"
msgstr " Померај Инфо Ð’Ñ€Ñта Вред Ñмбла Ðзив Ñмбла\n"
-#: readelf.c:1271
+#: readelf.c:1537
#, c-format
msgid " Offset Info Type Sym.Value Sym. Name\n"
msgstr " Померај Инфо Ð’Ñ€Ñта Вред Ñмбла Ðзив Ñмбла\n"
-#: readelf.c:1279
+#: readelf.c:1545
#, c-format
msgid " Offset Info Type Symbol's Value Symbol's Name + Addend\n"
msgstr " Померај Инфо Ð’Ñ€Ñта Вред. Ñимбола Ðазив Ñимбола + Сабирак\n"
-#: readelf.c:1281
+#: readelf.c:1547
#, c-format
msgid " Offset Info Type Sym. Value Sym. Name + Addend\n"
msgstr " Померај Инфо Ð’Ñ€Ñта Вред Ñмбла Ðзив Ñмбла + Сабирак\n"
-#: readelf.c:1286
+#: readelf.c:1552
#, c-format
msgid " Offset Info Type Symbol's Value Symbol's Name\n"
msgstr " Померај Инфо Ð’Ñ€Ñта Вред. Ñимбола Ðазив Ñимбола\n"
-#: readelf.c:1288
+#: readelf.c:1554
#, c-format
msgid " Offset Info Type Sym. Value Sym. Name\n"
msgstr " Померај Подаци Ð’Ñ€Ñта Вред. Ñмбла Ðазив Ñмбла\n"
-#: readelf.c:1659 readelf.c:1852 readelf.c:1860
+#: readelf.c:1930 readelf.c:2125 readelf.c:2133
#, c-format
msgid "unrecognized: %-7lx"
msgstr "непознато: %-7lx"
-#: readelf.c:1685
+#: readelf.c:1956
#, c-format
msgid "<unknown addend: %lx>"
msgstr "<непознат Ñабирак: %lx>"
-#: readelf.c:1694
+#: readelf.c:1965
#, c-format
msgid " bad symbol index: %08lx in reloc\n"
msgstr " лош Ð¸Ð½Ð´ÐµÐºÑ Ñимбола: %08lx у премештају\n"
-#: readelf.c:1797
+#: readelf.c:2070
#, c-format
msgid "<string table index: %3ld>"
msgstr "<Ð¸Ð½Ð´ÐµÐºÑ Ñ‚Ð°Ð±ÐµÐ»Ðµ ниÑке: %3ld>"
-#: readelf.c:1800
+#: readelf.c:2073
#, c-format
msgid "<corrupt string table index: %3ld>\n"
msgstr "<оштећен Ð¸Ð½Ð´ÐµÐºÑ Ñ‚Ð°Ð±ÐµÐ»Ðµ ниÑке: %3ld>\n"
-#: readelf.c:2305
+#: readelf.c:2595
#, c-format
msgid "Processor Specific: %lx"
msgstr "ПоÑебноÑÑ‚ процеÑора: %lx"
-#: readelf.c:2332
+#: readelf.c:2622
#, c-format
msgid "Operating System specific: %lx"
msgstr "ПоÑебноÑÑ‚ оперативног ÑиÑтема: %lx"
-#: readelf.c:2336 readelf.c:4246
+#: readelf.c:2626 readelf.c:4563
#, c-format
msgid "<unknown>: %lx"
msgstr "<непознато>: %lx"
-#: readelf.c:2436
+#: readelf.c:2726
msgid "NONE (None)"
msgstr "NONE (ништа)"
-#: readelf.c:2437
+#: readelf.c:2727
msgid "REL (Relocatable file)"
msgstr "REL (премеÑтива датотека)"
-#: readelf.c:2438
+#: readelf.c:2728
msgid "EXEC (Executable file)"
msgstr "EXEC (извршна датотека)"
-#: readelf.c:2441
+#: readelf.c:2731
msgid "DYN (Position-Independent Executable file)"
msgstr "DYN (Положајно незавиÑна извршна датотека)"
-#: readelf.c:2443
+#: readelf.c:2733
msgid "DYN (Shared object file)"
msgstr "DYN (дељена датотека предмета)"
-#: readelf.c:2444
+#: readelf.c:2734
msgid "CORE (Core file)"
msgstr "CORE (кључна датотека)"
-#: readelf.c:2448
+#: readelf.c:2738
#, c-format
msgid "Processor Specific: (%x)"
msgstr "ПоÑебноÑÑ‚ процеÑора: (%x)"
-#: readelf.c:2450
+#: readelf.c:2740
#, c-format
msgid "OS Specific: (%x)"
msgstr "ПоÑебноÑÑ‚ ОС-а: (%x)"
-#: readelf.c:2452
+#: readelf.c:2742
#, c-format
msgid "<unknown>: %x"
msgstr "<непознато>: %x"
#. Please keep this switch table sorted by increasing EM_ value.
#. 0
-#: readelf.c:2466 readelf.c:17634 readelf.c:17645
+#: readelf.c:2756 readelf.c:18010 readelf.c:18021
msgid "None"
msgstr "Ðишта"
-#: readelf.c:2714
+#: readelf.c:3004
#, c-format
msgid "<unknown>: 0x%x"
msgstr "<непознато>: 0x%x"
-#: readelf.c:3000
+#: readelf.c:3290
msgid ", <unknown>"
msgstr ", <непознато>"
-#: readelf.c:3369 readelf.c:10401
+#: readelf.c:3659 readelf.c:10755
msgid "unknown"
msgstr "непознато"
-#: readelf.c:3370
+#: readelf.c:3660
msgid "unknown mac"
msgstr "непознат мак"
-#: readelf.c:3438
+#: readelf.c:3728
msgid ", <unknown MeP cpu type>"
msgstr ", <непозната врÑта „MeP“ процеÑора>"
-#: readelf.c:3448
+#: readelf.c:3738
msgid "<unknown MeP copro type>"
msgstr "<непозната „MeP copro“ врÑте>"
-#: readelf.c:3459
+#: readelf.c:3749
#, c-format
msgid ", unknown flags bits: %#x"
msgstr ", непознати битови заÑтавица: %#x"
-#: readelf.c:3468
+#: readelf.c:3758
msgid ", relocatable"
msgstr ", премеÑтиво"
-#: readelf.c:3471
+#: readelf.c:3761
msgid ", relocatable-lib"
msgstr ", премеÑтива библиотека"
-#: readelf.c:3553
+#: readelf.c:3843
msgid ", unknown v850 architecture variant"
msgstr ", непозната варијанта и850 архитектуре"
-#: readelf.c:3621
+#: readelf.c:3911
msgid ", unknown CPU"
msgstr ", непозната ЦПЈ"
-#: readelf.c:3636
+#: readelf.c:3926
msgid ", unknown ABI"
msgstr ", непознат ÐБИ"
-#: readelf.c:3661 readelf.c:3732
+#: readelf.c:3951 readelf.c:4022
msgid ", unknown ISA"
msgstr ", непознат ИСÐ"
-#: readelf.c:3842
+#: readelf.c:4132
#, c-format
msgid "Unrecognised IA64 VMS Command Code: %x\n"
msgstr "Ðепознат „IA64 VMS“ код наредби: %x\n"
-#: readelf.c:3908
+#: readelf.c:4198
msgid ": architecture variant: "
msgstr ": варијанта архитектуре: "
-#: readelf.c:3927
+#: readelf.c:4217
msgid ": unknown"
msgstr ": непознато"
-#: readelf.c:3931
+#: readelf.c:4221
msgid ": unknown extra flag bits also present"
msgstr ": приÑутни Ñу битови непознате додатне опције"
-#: readelf.c:3945
+#: readelf.c:4235
msgid ", unknown"
msgstr ", непознато"
-#: readelf.c:3997
+#: readelf.c:4301
msgid "Standalone App"
msgstr "СамоÑталан програм"
-#: readelf.c:4006
+#: readelf.c:4310
msgid "Bare-metal C6000"
msgstr "Огољени-метал Ц6000"
-#: readelf.c:4016 readelf.c:5193 readelf.c:5209 readelf.c:19058
-#: readelf.c:19158 readelf.c:19189 readelf.c:19226 readelf.c:19287
-#: readelf.c:19314
+#: readelf.c:4320 readelf.c:5535 readelf.c:5551 readelf.c:19439
+#: readelf.c:19539 readelf.c:19570 readelf.c:19607 readelf.c:19668
+#: readelf.c:19695 readelf.c:19717
#, c-format
msgid "<unknown: %x>"
msgstr "<непознато: %x>"
#. This message is probably going to be displayed in a 15
#. character wide field, so put the hex value first.
-#: readelf.c:4615
+#: readelf.c:4933
#, c-format
msgid "%08x: <unknown>"
msgstr "%08x: <непознато>"
-#: readelf.c:4702
+#: readelf.c:5021
#, c-format
msgid "Usage: readelf <option(s)> elf-file(s)\n"
msgstr "Употреба: readelf <опција(е)> елф-датотека(е)\n"
-#: readelf.c:4703
+#: readelf.c:5022
#, c-format
msgid " Display information about the contents of ELF format files\n"
msgstr "Приказује податке о Ñадржају датотека ЕЛФ запиÑа\n"
-#: readelf.c:4704
+#: readelf.c:5023
#, c-format
msgid " Options are:\n"
msgstr " Опције Ñу:\n"
-#: readelf.c:4705
+#: readelf.c:5024
#, c-format
msgid " -a --all Equivalent to: -h -l -S -s -r -d -V -A -I\n"
msgstr " -a --all ИÑто као: -h -l -S -s -r -d -V -A -I\n"
-#: readelf.c:4707
+#: readelf.c:5026
#, c-format
msgid " -h --file-header Display the ELF file header\n"
msgstr " -h --file-header Приказује заглавље „ELF“ датотеке\n"
-#: readelf.c:4709
+#: readelf.c:5028
#, c-format
msgid " -l --program-headers Display the program headers\n"
msgstr " -l --program-headers Приказује заглавља програма\n"
-#: readelf.c:4711
+#: readelf.c:5030
#, c-format
msgid " --segments An alias for --program-headers\n"
msgstr " --segments ÐÐ»Ð¸Ñ˜Ð°Ñ Ð·Ð° „--program-headers“\n"
-#: readelf.c:4713
+#: readelf.c:5032
#, c-format
msgid " -S --section-headers Display the sections' header\n"
msgstr " -S --section-headers Приказује заглавље одељака\n"
-#: readelf.c:4715
+#: readelf.c:5034
#, c-format
msgid " --sections An alias for --section-headers\n"
msgstr " --sections ÐÐ»Ð¸Ñ˜Ð°Ñ Ð·Ð° „--section-headers“\n"
-#: readelf.c:4717
+#: readelf.c:5036
#, c-format
msgid " -g --section-groups Display the section groups\n"
msgstr " -g --section-groups Приказује групе одељка\n"
-#: readelf.c:4719
+#: readelf.c:5038
#, c-format
msgid " -t --section-details Display the section details\n"
msgstr " -t --section-details Приказује појединоÑти одељка\n"
-#: readelf.c:4721
+#: readelf.c:5040
#, c-format
msgid " -e --headers Equivalent to: -h -l -S\n"
msgstr " -e --headers ИÑто као: -h -l -S\n"
-#: readelf.c:4723
+#: readelf.c:5042
#, c-format
msgid " -s --syms Display the symbol table\n"
msgstr " -s --syms Приказује табелу Ñимбола\n"
-#: readelf.c:4725
+#: readelf.c:5044
#, c-format
msgid " --symbols An alias for --syms\n"
msgstr " --symbols ÐÐ»Ð¸Ñ˜Ð°Ñ Ð·Ð° „--syms“\n"
-#: readelf.c:4727
+#: readelf.c:5046
#, c-format
msgid " --dyn-syms Display the dynamic symbol table\n"
msgstr " --dyn-syms Приказује динамичку табелу Ñимбола\n"
-#: readelf.c:4729
+#: readelf.c:5048
#, c-format
msgid " --lto-syms Display LTO symbol tables\n"
msgstr " --lto-syms Приказује „LTO“ табеле Ñимбола\n"
-#: readelf.c:4731
+#: readelf.c:5050
#, c-format
msgid ""
" --sym-base=[0|8|10|16] \n"
@@ -7711,75 +7875,82 @@ msgstr ""
" Приморава оÑнову за величинама Ñимбола. Опције Ñу \n"
" mixed (оÑновно), octal, decimal, hexadecimal.\n"
-#: readelf.c:4735
+#: readelf.c:5054
#, c-format
-msgid ""
-" -C --demangle[=STYLE] Decode low-level symbol names into user-level names\n"
-" The STYLE, if specified, can be `auto' (the default),\n"
-" `gnu', `lucid', `arm', `hp', `edg', `gnu-v3', `java'\n"
-" or `gnat'\n"
-msgstr ""
-" -C --demangle[=СТИЛ] Декодира називе Ñимбола ниÑког нивоа у називе кориÑничког нивоа\n"
-" СТИЛ, ако је наведен, може бити „auto“ (оÑновно),\n"
-" „gnu“, „lucid“, „arm“, „hp“, „edg“, „gnu-v3“, „java“\n"
-" или „gnat“\n"
+msgid " -C --demangle[=STYLE] Decode mangled/processed symbol names\n"
+msgstr " -C --demangle[=СТИЛ] Декодира прекрштене/обрађене називе Ñимбола\n"
-#: readelf.c:4740
+#: readelf.c:5058
#, c-format
msgid " --no-demangle Do not demangle low-level symbol names. (default)\n"
msgstr " --no-demangle Ðе раÑкршћавања називе Ñимбола ниÑког нивоа. (оÑновно)\n"
-#: readelf.c:4742
+#: readelf.c:5060
#, c-format
msgid " --recurse-limit Enable a demangling recursion limit. (default)\n"
msgstr " --recurse-limit Укључује ограничење понављања раÑкршћавања. (оÑновно)\n"
-#: readelf.c:4744
+#: readelf.c:5062
#, c-format
msgid " --no-recurse-limit Disable a demangling recursion limit\n"
msgstr " --no-recurse-limit ИÑкључује ограничење понављања раÑкршћавања\n"
-#: readelf.c:4746
+#: readelf.c:5064
+#, c-format
+msgid ""
+" -U[dlexhi] --unicode=[default|locale|escape|hex|highlight|invalid]\n"
+" Display unicode characters as determined by the current locale\n"
+" (default), escape sequences, \"<hex sequences>\", highlighted\n"
+" escape sequences, or treat them as invalid and display as\n"
+" \"{hex sequences}\"\n"
+msgstr ""
+" -U[dlexhi] --unicode=[default|locale|escape|hex|highlight|invalid]\n"
+" Приказује јуникод знакове као што је одређено тренутним језиком\n"
+" (оÑновно), низовима промене реда, „<Ñ…ÐµÐºÑ Ð½Ð¸Ð·Ð¾Ð²Ð¸Ð¼Ð°>\", иÑтакнутим\n"
+" нитовима промене реда, или их Ñматра неиÑправним и приказје као\n"
+" „{Ñ…ÐµÐºÑ Ð½Ð¸Ð·Ð¾Ð²Ðµ}“\n"
+
+#: readelf.c:5070
#, c-format
msgid " -n --notes Display the core notes (if present)\n"
msgstr " -n --notes Приказује напомене језгра (ако их има)\n"
-#: readelf.c:4748
+#: readelf.c:5072
#, c-format
msgid " -r --relocs Display the relocations (if present)\n"
msgstr " -r --relocs Приказује премештаје (ако их има)\n"
-#: readelf.c:4750
+#: readelf.c:5074
#, c-format
msgid " -u --unwind Display the unwind info (if present)\n"
msgstr " -u --unwind Приказује информације развијања (ако их има)\n"
-#: readelf.c:4752
+#: readelf.c:5076
#, c-format
msgid " -d --dynamic Display the dynamic section (if present)\n"
msgstr " -d --dynamic Приказује динамичке одељке (ако их има)\n"
-#: readelf.c:4754
+#: readelf.c:5078
#, c-format
msgid " -V --version-info Display the version sections (if present)\n"
msgstr " -V --version-info Приказује одељке издања (ако их има)\n"
-#: readelf.c:4756
+#: readelf.c:5080
#, c-format
msgid " -A --arch-specific Display architecture specific information (if any)\n"
msgstr " -A --arch-specific Приказује Ñпецифичне информације о архитектури (ако поÑтоје)\n"
-#: readelf.c:4758
+#: readelf.c:5082
#, c-format
msgid " -c --archive-index Display the symbol/file index in an archive\n"
msgstr " -c --archive-index Приказује Ð¸Ð½Ð´ÐµÐºÑ Ñимбола/датотеке у архиви\n"
-#: readelf.c:4760
+#: readelf.c:5084
#, c-format
msgid " -D --use-dynamic Use the dynamic section info when displaying symbols\n"
msgstr " -D --use-dynamic КориÑти информације динамичког одељка приликом приказивања Ñимбола\n"
-#: readelf.c:4762
+#: readelf.c:5086
#, c-format
msgid ""
" -L --lint|--enable-checks\n"
@@ -7788,7 +7959,7 @@ msgstr ""
" -L --lint|--enable-checks\n"
" Приказује поруке упозорења за могуће проблеме\n"
-#: readelf.c:4765
+#: readelf.c:5089
#, c-format
msgid ""
" -x --hex-dump=<number|name>\n"
@@ -7797,7 +7968,7 @@ msgstr ""
" -x --hex-dump=<број|назив>\n"
" ИÑпиÑује Ñадржај одељка <број|назив> као бајтове\n"
-#: readelf.c:4768
+#: readelf.c:5092
#, c-format
msgid ""
" -p --string-dump=<number|name>\n"
@@ -7806,7 +7977,7 @@ msgstr ""
" -p --string-dump=<број|назив>\n"
" ИÑпиÑује Ñадржај одељка <број|назив> као ниÑке\n"
-#: readelf.c:4771
+#: readelf.c:5095
#, c-format
msgid ""
" -R --relocated-dump=<number|name>\n"
@@ -7815,12 +7986,12 @@ msgstr ""
" -R --relocated-dump=<број|назив>\n"
" ИÑпиÑује премештене Ñадржаје одељка <број|назив>\n"
-#: readelf.c:4774
+#: readelf.c:5098
#, c-format
msgid " -z --decompress Decompress section before dumping it\n"
msgstr " -z --decompress РаÑпакује одељак пре иÑпиÑивања\n"
-#: readelf.c:4776
+#: readelf.c:5100
#, c-format
msgid ""
" -w --debug-dump[a/=abbrev, A/=addr, r/=aranges, c/=cu_index, L/=decodedline,\n"
@@ -7837,7 +8008,7 @@ msgstr ""
" U/=инфо_трага]\n"
" Приказује Ñадржај одељака „DWARF“ прочишћавања\n"
-#: readelf.c:4783
+#: readelf.c:5107
#, c-format
msgid ""
" -wk --debug-dump=links Display the contents of sections that link to separate\n"
@@ -7846,7 +8017,7 @@ msgstr ""
" -wk --debug-dump=везе Приказује Ñадржај одељака који повезују на одвојене\n"
" датотеке информација прочишћавања\n"
-#: readelf.c:4786
+#: readelf.c:5110
#, c-format
msgid ""
" -P --process-links Display the contents of non-debug sections in separate\n"
@@ -7855,7 +8026,7 @@ msgstr ""
" -P, --process-links Приказује Ñадржај одељака не-прочишћавања у\n"
" одвојеним датотекама информација прочишћавања. (Подразумева „-wK“)\n"
-#: readelf.c:4790
+#: readelf.c:5114
#, c-format
msgid ""
" -wK --debug-dump=follow-links\n"
@@ -7864,7 +8035,7 @@ msgstr ""
" -wK --debug-dump=follow-links\n"
" Прати везе до одвојених датотека информација прочишћавања (оÑновно)\n"
-#: readelf.c:4793
+#: readelf.c:5117
#, c-format
msgid ""
" -wN --debug-dump=no-follow-links\n"
@@ -7873,7 +8044,7 @@ msgstr ""
" wN --debug-dump=no-follow-links\n"
" Ðе прати везе до одвојених датотека информација прочишћавања\n"
-#: readelf.c:4797
+#: readelf.c:5121
#, c-format
msgid ""
" -wK --debug-dump=follow-links\n"
@@ -7882,7 +8053,7 @@ msgstr ""
" -wK --debug-dump=follow-links\n"
" Прати везе до одвојених датотека информација прочишћавања\n"
-#: readelf.c:4800
+#: readelf.c:5124
#, c-format
msgid ""
" -wN --debug-dump=no-follow-links\n"
@@ -7893,31 +8064,27 @@ msgstr ""
" Ðе прати везе до одвојених датотека информација прочишћавања\n"
" (оÑновно)\n"
-#: readelf.c:4805
+#: readelf.c:5129
#, c-format
msgid " --dwarf-depth=N Do not display DIEs at depth N or greater\n"
msgstr " --dwarf-depth=N Ðе приказује „DIE“-е на дубини N или већој\n"
-#: readelf.c:4807
+#: readelf.c:5131
#, c-format
msgid " --dwarf-start=N Display DIEs starting at offset N\n"
msgstr " --dwarf-start=N Приказује „DIE“ почевши на померају N\n"
-#: readelf.c:4810
+#: readelf.c:5134
#, c-format
msgid " --ctf=<number|name> Display CTF info from section <number|name>\n"
msgstr " --ctf=<број|назив> Приказује „CTF“ информације из одељка <број|назив>\n"
-#: readelf.c:4812
+#: readelf.c:5136
#, c-format
-msgid ""
-" --ctf-parent=<number|name>\n"
-" Use section <number|name> as the CTF parent\n"
-msgstr ""
-" --ctf-parent=<број|назив>\n"
-" КориÑти одељак <број|назив> као „CTF“ полазни\n"
+msgid " --ctf-parent=<name> Use CTF archive member <name> as the CTF parent\n"
+msgstr " --ctf-parent=<назив> КориÑти <назив> „CTF“ члана архиве као родитеља „CTF“-а\n"
-#: readelf.c:4815
+#: readelf.c:5138
#, c-format
msgid ""
" --ctf-symbols=<number|name>\n"
@@ -7926,7 +8093,7 @@ msgstr ""
" --ctf-symbols=<број|назив>\n"
" КориÑти одељак <број|назив> као „CTF“ Ñпољну табелу Ñимбола\n"
-#: readelf.c:4818
+#: readelf.c:5141
#, c-format
msgid ""
" --ctf-strings=<number|name>\n"
@@ -7935,7 +8102,7 @@ msgstr ""
" --ctf-strings=<број|назив>\n"
" КориÑти одељак <број|назив> као „CTF“ Ñпољну табелу ниÑки\n"
-#: readelf.c:4824
+#: readelf.c:5147
#, c-format
msgid ""
" -i --instruction-dump=<number|name>\n"
@@ -7944,130 +8111,134 @@ msgstr ""
" -i --instruction-dump=<број|назив>\n"
" РаÑтавља Ñадржај одељка <број|назив>\n"
-#: readelf.c:4828
+#: readelf.c:5151
#, c-format
msgid " -I --histogram Display histogram of bucket list lengths\n"
msgstr " -I --histogram Приказује хиÑтограм дужина ÑпиÑка ведра\n"
-#: readelf.c:4830
+#: readelf.c:5153
#, c-format
msgid " -W --wide Allow output width to exceed 80 characters\n"
msgstr " -W --wide Допушта да ширина излаза премаши 80 знакова\n"
-#: readelf.c:4832
+#: readelf.c:5155
#, c-format
msgid " -T --silent-truncation If a symbol name is truncated, do not add [...] suffix\n"
msgstr " -T --silent-truncation Ðко је назив Ñимбола Ñкраћен, не додаје ÑÑƒÑ„Ð¸ÐºÑ [...]\n"
-#: readelf.c:4834
+#: readelf.c:5157
#, c-format
msgid " @<file> Read options from <file>\n"
msgstr " @<датотека> Чита опције из <датотеке>\n"
-#: readelf.c:4836
+#: readelf.c:5159
#, c-format
msgid " -H --help Display this information\n"
msgstr " -H --help Приказује ове информације\n"
-#: readelf.c:4838
+#: readelf.c:5161
#, c-format
msgid " -v --version Display the version number of readelf\n"
msgstr " -v --version Приказује број издања за „readelf“\n"
-#: readelf.c:4864 readelf.c:4895 readelf.c:4899
+#: readelf.c:5187 readelf.c:5218 readelf.c:5222
msgid "Out of memory allocating dump request table.\n"
msgstr "ПонеÑтало је меморије приликом додељивања табеле захтева избачаја.\n"
-#: readelf.c:5155
+#: readelf.c:5458
+msgid "Missing arg to -U/--unicode"
+msgstr "ÐедоÑтаје аргумент за „-U/--unicode“"
+
+#: readelf.c:5497
#, c-format
msgid "Invalid option '-%c'\n"
msgstr "ÐеиÑправна опција „-%c“\n"
-#: readelf.c:5189 readelf.c:5205 readelf.c:11478
+#: readelf.c:5531 readelf.c:5547 readelf.c:11828
msgid "none"
msgstr "ништа"
-#: readelf.c:5206
+#: readelf.c:5548
msgid "2's complement, little endian"
msgstr "комплемент двојке, мала крајњоÑÑ‚"
-#: readelf.c:5207
+#: readelf.c:5549
msgid "2's complement, big endian"
msgstr "комплемент двојке, велика крајњоÑÑ‚"
-#: readelf.c:5227
+#: readelf.c:5569
msgid "Not an ELF file - it has the wrong magic bytes at the start\n"
msgstr "Ðије ЕЛФ датотека – има погрешне магичне бајтове на почетку\n"
-#: readelf.c:5239
+#: readelf.c:5581
#, c-format
msgid "ELF Header in linked file '%s':\n"
msgstr "ЕЛФ заглавље у повезаној датотеци „%s“:\n"
-#: readelf.c:5241
+#: readelf.c:5583
#, c-format
msgid "ELF Header:\n"
msgstr "ЕЛФ заглавље:\n"
-#: readelf.c:5242
+#: readelf.c:5584
#, c-format
msgid " Magic: "
msgstr " Магија: "
-#: readelf.c:5246
+#: readelf.c:5588
#, c-format
msgid " Class: %s\n"
msgstr " Разред: %s\n"
-#: readelf.c:5248
+#: readelf.c:5590
#, c-format
msgid " Data: %s\n"
msgstr " Подаци: %s\n"
-#: readelf.c:5250
+#: readelf.c:5592
#, c-format
msgid " Version: %d%s\n"
msgstr " Издање: %d%s\n"
-#: readelf.c:5253
+#: readelf.c:5595
msgid " (current)"
msgstr " (текуће)"
-#: readelf.c:5255
+#: readelf.c:5597
msgid " <unknown>"
msgstr " <непознато>"
-#: readelf.c:5257
+#: readelf.c:5599
#, c-format
msgid " OS/ABI: %s\n"
msgstr " ОС/ÐБИ: %s\n"
-#: readelf.c:5259
+#: readelf.c:5601
#, c-format
msgid " ABI Version: %d\n"
msgstr " Издање ÐБИ-ја: %d\n"
-#: readelf.c:5261
+#: readelf.c:5603
#, c-format
msgid " Type: %s\n"
msgstr " Ð’Ñ€Ñта: %s\n"
-#: readelf.c:5263
+#: readelf.c:5605
#, c-format
msgid " Machine: %s\n"
msgstr " Машина: %s\n"
-#: readelf.c:5265
+#: readelf.c:5607
#, c-format
msgid " Version: 0x%lx\n"
msgstr " Издање: 0x%lx\n"
-#: readelf.c:5268
+#: readelf.c:5610
#, c-format
msgid " Entry point address: "
msgstr " ÐдреÑа улазне тачке: "
-#: readelf.c:5270
+#: readelf.c:5612
#, c-format
msgid ""
"\n"
@@ -8076,7 +8247,7 @@ msgstr ""
"\n"
" Почетак заглавља програма: "
-#: readelf.c:5272
+#: readelf.c:5614
#, c-format
msgid ""
" (bytes into file)\n"
@@ -8085,78 +8256,78 @@ msgstr ""
" (бајтова у датотеци)\n"
" Почетак заглавља одељка: "
-#: readelf.c:5274
+#: readelf.c:5616
#, c-format
msgid " (bytes into file)\n"
msgstr " (бајтова у датотеци)\n"
-#: readelf.c:5276
+#: readelf.c:5618
#, c-format
msgid " Flags: 0x%lx%s\n"
msgstr " Опције: 0x%lx%s\n"
-#: readelf.c:5279
+#: readelf.c:5621
#, c-format
msgid " Size of this header: %u (bytes)\n"
msgstr " Величина овог заглавља: %u (бајта)\n"
-#: readelf.c:5281
+#: readelf.c:5623
#, c-format
msgid " Size of program headers: %u (bytes)\n"
msgstr " Величина заглавља програма: %u (бајта)\n"
-#: readelf.c:5283
+#: readelf.c:5625
#, c-format
msgid " Number of program headers: %u"
msgstr " Број заглавља програма: %u"
-#: readelf.c:5293
+#: readelf.c:5635
#, c-format
msgid " Size of section headers: %u (bytes)\n"
msgstr " Величина заглавља одељка: %u (бајта)\n"
-#: readelf.c:5295
+#: readelf.c:5637
#, c-format
msgid " Number of section headers: %u"
msgstr " Број заглавља одељка: %u"
-#: readelf.c:5303
+#: readelf.c:5645
#, c-format
msgid " Section header string table index: %u"
msgstr " Ð˜Ð½Ð´ÐµÐºÑ Ñ‚Ð°Ð±ÐµÐ»Ðµ ниÑке заглавља одељка: %u"
-#: readelf.c:5315
+#: readelf.c:5657
#, c-format
msgid " <corrupt: out of range>"
msgstr " <оштећено: ван опÑега>"
-#: readelf.c:5354 readelf.c:5401
+#: readelf.c:5696 readelf.c:5743
msgid "The e_phentsize field in the ELF header is less than the size of an ELF program header\n"
msgstr "Поље „e_phentsize“ у ЕЛФ заглављу је мање од величине заглавља ЕЛФ програма\n"
-#: readelf.c:5358 readelf.c:5405
+#: readelf.c:5700 readelf.c:5747
msgid "The e_phentsize field in the ELF header is larger than the size of an ELF program header\n"
msgstr "Поље „e_phentsize“ у ЕЛФ заглављу је веће од величине заглавља ЕЛФ програма\n"
-#: readelf.c:5361 readelf.c:5408
+#: readelf.c:5703 readelf.c:5750
msgid "program headers"
msgstr "заглавља програма"
-#: readelf.c:5447
+#: readelf.c:5789
#, c-format
msgid "Too many program headers - %#x - the file is not that big\n"
msgstr "Превише заглавља програма – %#x – датотека није толико велика\n"
-#: readelf.c:5456
+#: readelf.c:5798
#, c-format
msgid "Out of memory reading %u program headers\n"
msgstr "ПонеÑтало је меморије за време читања %u заглавља програма\n"
-#: readelf.c:5486
+#: readelf.c:5828
msgid "possibly corrupt ELF header - it has a non-zero program header offset, but no program headers\n"
msgstr "вероватно оштећено ЕЛФ заглавље – има не-нулти померај заглавља програма, али нема заглавља програма\n"
-#: readelf.c:5491
+#: readelf.c:5833
#, c-format
msgid ""
"\n"
@@ -8165,7 +8336,7 @@ msgstr ""
"\n"
"Ðема заглавља програма у овој повезаној датотеци „%s“.\n"
-#: readelf.c:5494
+#: readelf.c:5836
#, c-format
msgid ""
"\n"
@@ -8174,7 +8345,7 @@ msgstr ""
"\n"
"Ðема заглавља програма у овој датотеци.\n"
-#: readelf.c:5505
+#: readelf.c:5847
#, c-format
msgid ""
"\n"
@@ -8183,12 +8354,12 @@ msgstr ""
"\n"
"Ð’Ñ€Ñта елф датотеке је „%s“\n"
-#: readelf.c:5506
+#: readelf.c:5848
#, c-format
msgid "Entry point 0x%s\n"
msgstr "Улазна тачка 0x%s\n"
-#: readelf.c:5507
+#: readelf.c:5849
#, c-format
msgid "There is %d program header, starting at offset %s\n"
msgid_plural "There are %d program headers, starting at offset %s\n"
@@ -8196,7 +8367,7 @@ msgstr[0] "ПоÑтоји %d заглавље програма, које почÐ
msgstr[1] "ПоÑтоје %d заглавља програма, која почињу на померају %s\n"
msgstr[2] "ПоÑтоји %d заглавља програма, која почињу на померају %s\n"
-#: readelf.c:5520 readelf.c:5522
+#: readelf.c:5862 readelf.c:5864
#, c-format
msgid ""
"\n"
@@ -8205,68 +8376,68 @@ msgstr ""
"\n"
"Заглавља програма:\n"
-#: readelf.c:5526
+#: readelf.c:5868
#, c-format
msgid " Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align\n"
msgstr " Ð’Ñ€Ñта Померај Вирт.адр Физ.адр Вел.дат Вел.мем Опц Првнње\n"
-#: readelf.c:5529
+#: readelf.c:5871
#, c-format
msgid " Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align\n"
msgstr " Ð’Ñ€Ñта Померај Вирт.адр Физ.адр Вел.дат Вел.мем Опц Првнње\n"
-#: readelf.c:5533
+#: readelf.c:5875
#, c-format
msgid " Type Offset VirtAddr PhysAddr\n"
msgstr " Ð’Ñ€Ñта Померај Вирт.адр Физ.адр\n"
-#: readelf.c:5535
+#: readelf.c:5877
#, c-format
msgid " FileSiz MemSiz Flags Align\n"
msgstr " Вел.дат Вел.мем Опцје Првнње\n"
-#: readelf.c:5633
+#: readelf.c:5975
msgid "LOAD segments must be sorted in order of increasing VirtAddr\n"
msgstr "„LOAD“ подеоци морају бити поређани по раÑтућем „VirtAddr“\n"
-#: readelf.c:5636
+#: readelf.c:5978
msgid "the segment's file size is larger than its memory size\n"
msgstr "величина датотеке подеока је већа од његове величине меморије\n"
-#: readelf.c:5643
+#: readelf.c:5985
msgid "the PHDR segment must occur before any LOAD segment\n"
msgstr "„PHDR“ подеок Ñе мора појавити пре било ког „LOAD“ подеока\n"
-#: readelf.c:5661
+#: readelf.c:6003
msgid "the PHDR segment is not covered by a LOAD segment\n"
msgstr "„PHDR“ подеок није покривен „LOAD“ подеоком\n"
-#: readelf.c:5667
+#: readelf.c:6009
msgid "more than one dynamic segment\n"
msgstr "више од једног динамичког одломка\n"
-#: readelf.c:5686
+#: readelf.c:6028
msgid "no .dynamic section in the dynamic segment\n"
msgstr "нема одељака „.dynamic“ у динамичком одломку\n"
-#: readelf.c:5705
+#: readelf.c:6047
msgid "the .dynamic section is not the same as the dynamic segment\n"
msgstr "одељак „.dynamic“ није иÑти као динамички одломак\n"
-#: readelf.c:5716
+#: readelf.c:6058
msgid "the dynamic segment offset + size exceeds the size of the file\n"
msgstr "померај динамичког подеока + величина превазилазе величину датотеке\n"
-#: readelf.c:5729
+#: readelf.c:6071
msgid "Unable to find program interpreter name\n"
msgstr "Ðе могу да нађем назив тумача програма\n"
-#: readelf.c:5740
+#: readelf.c:6082
#, c-format
msgid " [Requesting program interpreter: %s]\n"
msgstr " [Потражујем тумача програма: %s]\n"
-#: readelf.c:5751
+#: readelf.c:6093
#, c-format
msgid ""
"\n"
@@ -8275,102 +8446,102 @@ msgstr ""
"\n"
" Мапирање одељка у одломак:\n"
-#: readelf.c:5752
+#: readelf.c:6094
#, c-format
msgid " Segment Sections...\n"
msgstr " Одељци одломка...\n"
-#: readelf.c:5794 readelf.c:10759
+#: readelf.c:6136 readelf.c:11113
msgid "Cannot interpret virtual addresses without program headers.\n"
msgstr "Ðе могу да протумачим виртуелне адреÑе без заглавља програма.\n"
-#: readelf.c:5810
+#: readelf.c:6152
#, c-format
msgid "Virtual address 0x%lx not located in any PT_LOAD segment.\n"
msgstr "Виртуелна адреÑа 0x%lx Ñе не налази ни у једном „PT_LOAD“ одломку.\n"
-#: readelf.c:5835 readelf.c:5899
+#: readelf.c:6177 readelf.c:6241
msgid "The e_shentsize field in the ELF header is less than the size of an ELF section header\n"
msgstr "Поље „e_shentsize“ у ЕЛФ заглављу је мање од величине заглавља ЕЛФ одељка\n"
-#: readelf.c:5839 readelf.c:5904
+#: readelf.c:6181 readelf.c:6246
msgid "The e_shentsize field in the ELF header is larger than the size of an ELF section header\n"
msgstr "Поље „e_shentsize“ у ЕЛФ заглављу је веће од величине заглавља ЕЛФ одељка\n"
-#: readelf.c:5843 readelf.c:5909
+#: readelf.c:6185 readelf.c:6251
msgid "section headers"
msgstr "заглавља одељка"
-#: readelf.c:5852 readelf.c:5918
+#: readelf.c:6194 readelf.c:6260
#, c-format
msgid "Out of memory reading %u section headers\n"
msgstr "ПонеÑтало је меморије за време читања %u заглавља одељка\n"
-#: readelf.c:5872 readelf.c:5938
+#: readelf.c:6214 readelf.c:6280
#, c-format
msgid "Section %u has an out of range sh_link value of %u\n"
msgstr "Одељак %u има ван опÑега „sh_link“ вредноÑÑ‚ од %u\n"
-#: readelf.c:5874 readelf.c:5940
+#: readelf.c:6216 readelf.c:6282
#, c-format
msgid "Section %u has an out of range sh_info value of %u\n"
msgstr "Одељак %u има ван опÑега „sh_info“ вредноÑÑ‚ од %u\n"
-#: readelf.c:5982 readelf.c:6099
+#: readelf.c:6324 readelf.c:6441
#, c-format
msgid "Section %s has an invalid sh_entsize of 0x%lx\n"
msgstr "Одељак %s има неиÑправну „sh_entsize“ од 0x%lx\n"
-#: readelf.c:5990 readelf.c:6107 readelf.c:12767
+#: readelf.c:6332 readelf.c:6449 readelf.c:13146
#, c-format
msgid "Section %s has an invalid sh_size of 0x%lx\n"
msgstr "Одељак %s има неиÑправну „sh_size“ од 0x%lx\n"
-#: readelf.c:6000 readelf.c:6117
+#: readelf.c:6342 readelf.c:6459
#, c-format
msgid "Size (0x%lx) of section %s is not a multiple of its sh_entsize (0x%lx)\n"
msgstr "Величина (0x%lx) одељка %s није производ његове „sh_entsize“ (0x%lx)\n"
-#: readelf.c:6008 readelf.c:6125 readelf.c:15196
+#: readelf.c:6350 readelf.c:6467 readelf.c:15575
msgid "symbols"
msgstr "Ñимболи"
-#: readelf.c:6020 readelf.c:6137
+#: readelf.c:6362 readelf.c:6479
msgid "Multiple symbol table index sections associated with the same symbol section\n"
msgstr "Више одељака индекÑа табеле Ñимбола придружених Ñа иÑтим одељком Ñимбола\n"
-#: readelf.c:6027 readelf.c:6144
+#: readelf.c:6369 readelf.c:6486
msgid "symbol table section indices"
msgstr "индекÑи одељка табеле Ñимбола"
-#: readelf.c:6034 readelf.c:6151
+#: readelf.c:6376 readelf.c:6493
#, c-format
msgid "Index section %s has an sh_size of 0x%lx - expected 0x%lx\n"
msgstr "Одељак индекÑа %s има „sh_size“ од 0x%lx – очекивах 0x%lx\n"
-#: readelf.c:6046 readelf.c:6163
+#: readelf.c:6388 readelf.c:6505
#, c-format
msgid "Out of memory reading %lu symbols\n"
msgstr "ПонеÑтало је меморије за време читања %lu Ñимбола\n"
-#: readelf.c:6372 readelf.c:6469 readelf.c:6487 readelf.c:6505
+#: readelf.c:6714 readelf.c:6811 readelf.c:6829 readelf.c:6847
msgid "Internal error: not enough buffer room for section flag info"
msgstr "Унутрашња грешка: нема довољно међумеморије за податке заÑтавице одељка"
-#: readelf.c:6512
+#: readelf.c:6854
#, c-format
msgid "UNKNOWN (%*.*lx)"
msgstr "ÐЕПОЗÐÐТО (%*.*lx)"
-#: readelf.c:6531 readelf.c:6546
+#: readelf.c:6873 readelf.c:6888
msgid "Compressed section is too small even for a compression header\n"
msgstr "Сажети одељак је премали чак и за заглавље Ñажимања\n"
-#: readelf.c:6568
+#: readelf.c:6910
msgid "possibly corrupt ELF file header - it has a non-zero section header offset, but no section headers\n"
msgstr "вероватно је оштећено заглавље ЕЛФ датотеке – има не-нулти померај заглавља одељка, али нема заглавља одељка\n"
-#: readelf.c:6573
+#: readelf.c:6915
#, c-format
msgid ""
"\n"
@@ -8379,12 +8550,12 @@ msgstr ""
"\n"
"Ðема одељака у овој датотеци.\n"
-#: readelf.c:6581 readelf.c:20805
+#: readelf.c:6923 readelf.c:21262
#, c-format
msgid "In linked file '%s': "
msgstr "У повезаној датотеци „%s“: "
-#: readelf.c:6583
+#: readelf.c:6925
#, c-format
msgid "There is %d section header, starting at offset 0x%lx:\n"
msgid_plural "There are %d section headers, starting at offset 0x%lx:\n"
@@ -8392,45 +8563,45 @@ msgstr[0] "ПоÑтоји %d заглавље одељка, које почињÐ
msgstr[1] "ПоÑтоје %d заглавља одељака, која почињу на померају 0x%lx:\n"
msgstr[2] "ПоÑтоји %d заглавља одељака, која почињу на померају 0x%lx:\n"
-#: readelf.c:6605 readelf.c:7278 readelf.c:7479 readelf.c:13054
-#: readelf.c:15585
+#: readelf.c:6947 readelf.c:7624 readelf.c:7826 readelf.c:13434
+#: readelf.c:15933
msgid "string table"
msgstr "табела ниÑке"
#. Note: coded this way so that there is a single string for translation.
-#: readelf.c:6671
+#: readelf.c:7013
#, c-format
msgid "Section %d has invalid sh_entsize of %s\n"
msgstr "Одељак %d има неиÑправну „sh_entsize“ од %s\n"
-#: readelf.c:6672
+#: readelf.c:7014
#, c-format
msgid "(Using the expected size of %u for the rest of this dump)\n"
msgstr "(КориÑтим очекивану величину од %u за оÑтатак овог избачаја)\n"
-#: readelf.c:6696
+#: readelf.c:7038
msgid "File contains multiple dynamic symbol tables\n"
msgstr "Датотека Ñадржи више табела динамичких Ñимбола\n"
-#: readelf.c:6711
+#: readelf.c:7053
msgid "File contains multiple dynamic string tables\n"
msgstr "Датотека Ñадржи више табела динамичке ниÑке\n"
-#: readelf.c:6717
+#: readelf.c:7059
msgid "dynamic strings"
msgstr "динамичке ниÑке"
-#: readelf.c:6745 readelf.c:6751
+#: readelf.c:7087 readelf.c:7093
#, c-format
msgid "Section '%s': zero-sized relocation section\n"
msgstr "Одељак „%s“: одељак премештаја нулте величине\n"
-#: readelf.c:6760
+#: readelf.c:7106
#, c-format
msgid "Section '%s': has a size of zero - is this intended ?\n"
msgstr "Одељак „%s“: има нулту величину – да ли је то намеравано ?\n"
-#: readelf.c:6844
+#: readelf.c:7190
#, c-format
msgid ""
"\n"
@@ -8439,7 +8610,7 @@ msgstr ""
"\n"
"Заглавља одељака у повезаној датотеци „%s“:\n"
-#: readelf.c:6846
+#: readelf.c:7192
#, c-format
msgid ""
"\n"
@@ -8448,7 +8619,7 @@ msgstr ""
"\n"
"Заглавља одељка:\n"
-#: readelf.c:6848
+#: readelf.c:7194
#, c-format
msgid ""
"\n"
@@ -8457,106 +8628,106 @@ msgstr ""
"\n"
"Заглавље одељка:\n"
-#: readelf.c:6854 readelf.c:6865 readelf.c:6876
+#: readelf.c:7200 readelf.c:7211 readelf.c:7222
#, c-format
msgid " [Nr] Name\n"
msgstr " [Бр] Ðазив\n"
-#: readelf.c:6855
+#: readelf.c:7201
#, c-format
msgid " Type Addr Off Size ES Lk Inf Al\n"
msgstr " Ð’Ñ€Ñта ÐдреÑа Пмрај Влчна ЕС Вз Инф Пор\n"
-#: readelf.c:6859
+#: readelf.c:7205
#, c-format
msgid " [Nr] Name Type Addr Off Size ES Flg Lk Inf Al\n"
msgstr " [Бр] Ðазив Ð’Ñ€Ñта ÐдреÑа Пмрј Влчна ЕС Опц Вз Инф Пор\n"
-#: readelf.c:6866
+#: readelf.c:7212
#, c-format
msgid " Type Address Off Size ES Lk Inf Al\n"
msgstr " Ð’Ñ€Ñта ÐдреÑа Пмрј Влчна ЕС Вз Инф Пор\n"
-#: readelf.c:6870
+#: readelf.c:7216
#, c-format
msgid " [Nr] Name Type Address Off Size ES Flg Lk Inf Al\n"
msgstr " [Бр] Ðазив Ð’Ñ€Ñта ÐдреÑа Пмрј Влчна ЕС Опц Вз Инф Пор\n"
-#: readelf.c:6877
+#: readelf.c:7223
#, c-format
msgid " Type Address Offset Link\n"
msgstr " Ð’Ñ€Ñта ÐдреÑа Померај Веза\n"
-#: readelf.c:6878
+#: readelf.c:7224
#, c-format
msgid " Size EntSize Info Align\n"
msgstr " Величина Улзна вел Инфо Поравнање\n"
-#: readelf.c:6882
+#: readelf.c:7228
#, c-format
msgid " [Nr] Name Type Address Offset\n"
msgstr " [Бр] Ðазив Ð’Ñ€Ñта ÐдреÑа Померај\n"
-#: readelf.c:6883
+#: readelf.c:7229
#, c-format
msgid " Size EntSize Flags Link Info Align\n"
msgstr " Величина Улзна вел. Опције Веза Инфо Порвнње\n"
-#: readelf.c:6888
+#: readelf.c:7234
#, c-format
msgid " Flags\n"
msgstr " Опције\n"
-#: readelf.c:6917
+#: readelf.c:7263
#, c-format
msgid "[%2u]: Link field (%u) should index a symtab section.\n"
msgstr "[%2u]: Поље везе (%u) треба да индекÑира одељак Ñимтаб.\n"
-#: readelf.c:6930
+#: readelf.c:7276
#, c-format
msgid "[%2u]: Link field (%u) should index a string section.\n"
msgstr "[%2u]: Поље везе (%u) треба да индекÑира одељак ниÑке.\n"
-#: readelf.c:6938 readelf.c:6949
+#: readelf.c:7284 readelf.c:7295
#, c-format
msgid "[%2u]: Unexpected value (%u) in link field.\n"
msgstr "[%2u]: Ðеочекивана вредноÑÑ‚ (%u) у пољу везе.\n"
-#: readelf.c:6976
+#: readelf.c:7322
#, c-format
msgid "[%2u]: Info field (%u) should index a relocatable section.\n"
msgstr "[%2u]: Поље података (%u) треба да индекÑира премеÑтиви одељак.\n"
-#: readelf.c:6987 readelf.c:7014
+#: readelf.c:7333 readelf.c:7360
#, c-format
msgid "[%2u]: Unexpected value (%u) in info field.\n"
msgstr "[%2u]: Ðеочекивана вредноÑÑ‚ (%u) у пољу података.\n"
-#: readelf.c:7009
+#: readelf.c:7355
#, c-format
msgid "[%2u]: Expected link to another section in info field"
msgstr "[%2u]: Очекивах везу до другог одељка у пољу података"
-#: readelf.c:7024
+#: readelf.c:7370
#, c-format
msgid "Size of section %u is larger than the entire file!\n"
msgstr "Величина одељка %u је већа од читаве датотеке!\n"
-#: readelf.c:7093
+#: readelf.c:7439
#, c-format
msgid "section %u: sh_link value of %u is larger than the number of sections\n"
msgstr "одељак %u: „sh_link“ вредноÑÑ‚ за %u је већа од броја одељака\n"
-#: readelf.c:7194
+#: readelf.c:7540
msgid "compression header"
msgstr "заглавље Ñажимања"
-#: readelf.c:7199
+#: readelf.c:7545
#, c-format
msgid " [<corrupt>]\n"
msgstr " [<оштећено>]\n"
-#: readelf.c:7205
+#: readelf.c:7551
#, c-format
msgid " [<unknown>: 0x%x], "
msgstr " [<непознато>: 0x%x], "
@@ -8564,7 +8735,7 @@ msgstr " [<непознато>: 0x%x], "
#. The ordering of the letters shown here matches the ordering of the
#. corresponding SHF_xxx values, and hence the order in which these
#. letters will be displayed to the user.
-#: readelf.c:7220
+#: readelf.c:7566
#, c-format
msgid ""
"Key to Flags:\n"
@@ -8579,44 +8750,44 @@ msgstr ""
" C (Ñажето), x (непознато), o (поÑебноÑÑ‚ ОС-а), E (иÑкључи),\n"
" "
-#: readelf.c:7228
+#: readelf.c:7574
#, c-format
msgid "R (retain), "
msgstr "R (задржи), "
-#: readelf.c:7231
+#: readelf.c:7577
#, c-format
msgid "D (mbind), "
msgstr "D (mbind), "
-#: readelf.c:7239
+#: readelf.c:7585
#, c-format
msgid "l (large), "
msgstr "l (велико), "
-#: readelf.c:7241
+#: readelf.c:7587
#, c-format
msgid "y (purecode), "
msgstr "y (чиÑÑ‚ код), "
-#: readelf.c:7243
+#: readelf.c:7589
#, c-format
msgid "v (VLE), "
msgstr "v (VLE), "
-#: readelf.c:7268
+#: readelf.c:7614
msgid "Bad sh_link in symbol table section\n"
msgstr "Лоша „sh_link“ у одељку табеле Ñимбола\n"
-#: readelf.c:7303
+#: readelf.c:7649
msgid "<OS specific>"
msgstr "<ПоÑебноÑÑ‚ ОС-а>"
-#: readelf.c:7304
+#: readelf.c:7650
msgid "<PROC specific>"
msgstr "<ПоÑебноÑÑ‚ „PROC“-а>"
-#: readelf.c:7333
+#: readelf.c:7679
#, c-format
msgid ""
"\n"
@@ -8625,7 +8796,7 @@ msgstr ""
"\n"
"Ðема групе заглавља у повезаној датотеци „%s“.\n"
-#: readelf.c:7336 readelf.c:7375
+#: readelf.c:7682 readelf.c:7721
#, c-format
msgid ""
"\n"
@@ -8634,16 +8805,16 @@ msgstr ""
"\n"
"Ðема групе одељка у овој датотеци.\n"
-#: readelf.c:7343
+#: readelf.c:7689
msgid "Section headers are not available!\n"
msgstr "Заглавља одељка ниÑу доÑтупна!\n"
-#: readelf.c:7354
+#: readelf.c:7700
#, c-format
msgid "Out of memory reading %u section group headers\n"
msgstr "ПонеÑтало је меморије за време читања %u заглавља групе одељка\n"
-#: readelf.c:7372
+#: readelf.c:7718
#, c-format
msgid ""
"\n"
@@ -8652,41 +8823,41 @@ msgstr ""
"\n"
"Ðема група заглавља у повезаној датотеци „%s“.\n"
-#: readelf.c:7386
+#: readelf.c:7732
#, c-format
msgid "Out of memory reading %lu groups\n"
msgstr "ПонеÑтало је меморије за време читања %lu група\n"
-#: readelf.c:7399
+#: readelf.c:7745
#, c-format
msgid "Section groups in linked file '%s'\n"
msgstr "Групе одељка у повезаној датотеци „%s“\n"
-#: readelf.c:7420
+#: readelf.c:7766
#, c-format
msgid "Bad sh_link in group section `%s'\n"
msgstr "Лоша „sh_link“ у одељку групе „%s“\n"
-#: readelf.c:7433
+#: readelf.c:7779
#, c-format
msgid "Corrupt header in group section `%s'\n"
msgstr "Оштећено заглавље у одељку групе „%s“\n"
-#: readelf.c:7439 readelf.c:7450
+#: readelf.c:7785 readelf.c:7796
#, c-format
msgid "Bad sh_info in group section `%s'\n"
msgstr "Лоши „sh_info“ у одељку групе „%s“\n"
-#: readelf.c:7489
+#: readelf.c:7836
#, c-format
msgid "Section %s has sh_entsize (0x%lx) which is larger than its size (0x%lx)\n"
msgstr "Одељак %s има „sh_entsize“ (0x%lx) која је већа од његове величине (0x%lx)\n"
-#: readelf.c:7498
+#: readelf.c:7845
msgid "section data"
msgstr "подаци одељка"
-#: readelf.c:7509
+#: readelf.c:7856
#, c-format
msgid ""
"\n"
@@ -8695,44 +8866,44 @@ msgstr ""
"\n"
"%sгрупа одељка [%5u] „%s“ [%s] Ñадржи %u одељка:\n"
-#: readelf.c:7512
+#: readelf.c:7859
#, c-format
msgid " [Index] Name\n"
msgstr " [ИндекÑ] Ðазив\n"
-#: readelf.c:7530
+#: readelf.c:7877
#, c-format
msgid "section [%5u] in group section [%5u] > maximum section [%5u]\n"
msgstr "одељак [%5u] у одељку групе [%5u] > највише одељака [%5u]\n"
-#: readelf.c:7533
+#: readelf.c:7880
msgid "Further error messages about overlarge group section indices suppressed\n"
msgstr "Будуће поруке грешака о превеликим индекÑима одељка групе Ñу потиÑнуте\n"
-#: readelf.c:7546
+#: readelf.c:7893
#, c-format
msgid "section [%5u] in group section [%5u] already in group section [%5u]\n"
msgstr "одељак [%5u] у одељку групе [%5u] је већ у одељку групе [%5u]\n"
-#: readelf.c:7550
+#: readelf.c:7897
msgid "Further error messages about already contained group sections suppressed\n"
msgstr "Будуће поруке грешака о већ Ñадржаним одељцима групе Ñу потиÑнуте\n"
-#: readelf.c:7562
+#: readelf.c:7909
#, c-format
msgid "section 0 in group section [%5u]\n"
msgstr "одељак 0 у одељку групе [%5u]\n"
-#: readelf.c:7629
+#: readelf.c:7976
msgid "dynamic section image fixups"
msgstr "преправке Ñлике динамичког одељка"
-#: readelf.c:7637
+#: readelf.c:7984
#, c-format
msgid "corrupt library name index of 0x%lx found in dynamic entry"
msgstr "нађох оштећен Ð¸Ð½Ð´ÐµÐºÑ Ð½Ð°Ð·Ð¸Ð²Ð° датотеке 0x%lx у динамичком уноÑу"
-#: readelf.c:7642
+#: readelf.c:7989
#, c-format
msgid ""
"\n"
@@ -8741,16 +8912,16 @@ msgstr ""
"\n"
"Преправке Ñлике потребне библиотеке #%d: %s – увуци: %lx\n"
-#: readelf.c:7645
+#: readelf.c:7992
#, c-format
msgid "Seg Offset Type SymVec DataType\n"
msgstr "Одл Померај Ð’Ñ€Ñта ВекСим Ð’Ñ€Ñта пдтка\n"
-#: readelf.c:7679
+#: readelf.c:8026
msgid "dynamic section image relocations"
msgstr "премештаји Ñлике динамичког одељка"
-#: readelf.c:7683
+#: readelf.c:8030
#, c-format
msgid ""
"\n"
@@ -8759,16 +8930,16 @@ msgstr ""
"\n"
"Премештаји Ñлике\n"
-#: readelf.c:7685
+#: readelf.c:8032
#, c-format
msgid "Seg Offset Type Addend Seg Sym Off\n"
msgstr "Одл Померај Ð’Ñ€Ñта Сабирак Одл Сим Пом\n"
-#: readelf.c:7742
+#: readelf.c:8089
msgid "dynamic string section"
msgstr "одељак динамичке ниÑке"
-#: readelf.c:7845
+#: readelf.c:8193
#, c-format
msgid ""
"\n"
@@ -8777,7 +8948,7 @@ msgstr ""
"\n"
"У повезаној датотеци „%s“ одељак „%s“ на померају 0x%lx Ñадржи %ld бајта:\n"
-#: readelf.c:7849
+#: readelf.c:8197
#, c-format
msgid ""
"\n"
@@ -8786,7 +8957,7 @@ msgstr ""
"\n"
"одељак премештаја „%s“ на померају 0x%lx Ñадржи %ld бајта:\n"
-#: readelf.c:7870
+#: readelf.c:8218
#, c-format
msgid ""
"\n"
@@ -8795,7 +8966,7 @@ msgstr ""
"\n"
"Ðема динамичких премештаја у повезаној датотеци „%s“.\n"
-#: readelf.c:7873
+#: readelf.c:8221
#, c-format
msgid ""
"\n"
@@ -8804,7 +8975,7 @@ msgstr ""
"\n"
"Ðема динамичких премештаја у овој датотеци.\n"
-#: readelf.c:7899
+#: readelf.c:8248
#, c-format
msgid ""
"\n"
@@ -8813,7 +8984,7 @@ msgstr ""
"\n"
"У повезаној датотеци „%s“одељак премештаја "
-#: readelf.c:7902
+#: readelf.c:8251
#, c-format
msgid ""
"\n"
@@ -8822,7 +8993,7 @@ msgstr ""
"\n"
"Одељак премештаја "
-#: readelf.c:7910
+#: readelf.c:8259
#, c-format
msgid " at offset 0x%lx contains %lu entry:\n"
msgid_plural " at offset 0x%lx contains %lu entries:\n"
@@ -8830,7 +9001,7 @@ msgstr[0] " на померају 0x%lx Ñадржи %lu уноÑ:\n"
msgstr[1] " на померају 0x%lx Ñадржи %lu уноÑа:\n"
msgstr[2] " на померају 0x%lx Ñадржи %lu уноÑа:\n"
-#: readelf.c:7959
+#: readelf.c:8308
#, c-format
msgid ""
"\n"
@@ -8839,7 +9010,7 @@ msgstr ""
"\n"
"Ðема Ñтатичких премештаја у повезаној датотеци „%s“."
-#: readelf.c:7962
+#: readelf.c:8311
#, c-format
msgid ""
"\n"
@@ -8848,7 +9019,7 @@ msgstr ""
"\n"
"Ðема Ñтатичких премештаја у овој датотеци."
-#: readelf.c:7963
+#: readelf.c:8312
#, c-format
msgid ""
"\n"
@@ -8857,7 +9028,7 @@ msgstr ""
"\n"
"Да видите динамичке премештаје додајте „--use-dynamic“ на линију наредби.\n"
-#: readelf.c:7971
+#: readelf.c:8320
#, c-format
msgid ""
"\n"
@@ -8866,7 +9037,7 @@ msgstr ""
"\n"
"Ðема премештаја у повезаној датотеци „%s“.\n"
-#: readelf.c:7974
+#: readelf.c:8323
#, c-format
msgid ""
"\n"
@@ -8875,50 +9046,50 @@ msgstr ""
"\n"
"Ðема премештаја у овој датотеци.\n"
-#: readelf.c:8142
+#: readelf.c:8491
#, c-format
msgid "Invalid section %u in table entry %ld\n"
msgstr "ÐеиÑправан одељак %u у уноÑу табеле %ld\n"
-#: readelf.c:8154
+#: readelf.c:8503
#, c-format
msgid "Invalid offset %lx in table entry %ld\n"
msgstr "ÐеиÑправан померај %lx у уноÑу табеле %ld\n"
-#: readelf.c:8172
+#: readelf.c:8521
#, c-format
msgid "\tUnknown version.\n"
msgstr "\tÐепознато издање.\n"
-#: readelf.c:8235 readelf.c:8669
+#: readelf.c:8584 readelf.c:9021
msgid "unwind table"
msgstr "табела одмотавања"
-#: readelf.c:8286 readelf.c:8752
+#: readelf.c:8635 readelf.c:9104
#, c-format
msgid "Skipping unknown relocation type: %u\n"
msgstr "ПреÑкачем неопознату врÑту премештаја: %u\n"
-#: readelf.c:8292 readelf.c:8759
+#: readelf.c:8641 readelf.c:9111
#, c-format
msgid "Skipping unexpected relocation type: %s\n"
msgstr "ПреÑкачем неочекивану врÑту премештаја: %s\n"
-#: readelf.c:8301 readelf.c:8766
+#: readelf.c:8650 readelf.c:9118
#, c-format
msgid "Skipping reloc with overlarge offset: %lx\n"
msgstr "ПреÑкачем премештај Ñа превеликим померајем: %lx\n"
-#: readelf.c:8308 readelf.c:8773
+#: readelf.c:8657 readelf.c:9125
#, c-format
msgid "Skipping reloc with invalid symbol index: %u\n"
msgstr "ПреÑкачем премештај Ñа неиÑправним индекÑом Ñимбола: %u\n"
-#: readelf.c:8356 readelf.c:8820 readelf.c:9928
+#: readelf.c:8705 readelf.c:9172 readelf.c:10282
msgid "Multiple symbol tables encountered\n"
msgstr "Ðаиђох на више табела Ñимбола\n"
-#: readelf.c:8371 readelf.c:8836 readelf.c:9943
+#: readelf.c:8720 readelf.c:9188 readelf.c:10297
#, c-format
msgid ""
"\n"
@@ -8927,7 +9098,7 @@ msgstr ""
"\n"
"Ðема одељка одмотавања у овој датотеци.\n"
-#: readelf.c:8454
+#: readelf.c:8806
#, c-format
msgid ""
"\n"
@@ -8936,11 +9107,11 @@ msgstr ""
"\n"
"Ðе могу да пронађем одељак података одмотавања за "
-#: readelf.c:8466
+#: readelf.c:8818
msgid "unwind info"
msgstr "подаци одмотавања"
-#: readelf.c:8469
+#: readelf.c:8821
#, c-format
msgid ""
"\n"
@@ -8949,12 +9120,12 @@ msgstr ""
"\n"
"Одељак одмотавања "
-#: readelf.c:8476
+#: readelf.c:8828
#, c-format
msgid " at offset 0x%lx contains %lu entries:\n"
msgstr " на померају 0x%lx Ñадржи %lu уноÑа:\n"
-#: readelf.c:8845 readelf.c:9950
+#: readelf.c:9197 readelf.c:10304
#, c-format
msgid ""
"\n"
@@ -8972,192 +9143,197 @@ msgstr[2] ""
"\n"
"Одељак одмотавања „%s“ на померају 0x%lx Ñадржи %lu уноÑа:\n"
-#: readelf.c:8978
+#: readelf.c:9330
msgid "unwind data"
msgstr "подаци одмотавања"
-#: readelf.c:9051
+#: readelf.c:9403
#, c-format
msgid "Skipping unexpected relocation at offset 0x%lx\n"
msgstr "ПреÑкачем неочекивани премештај на померају 0x%lx\n"
-#: readelf.c:9073
+#: readelf.c:9425
#, c-format
msgid "Unknown section relocation type %d encountered\n"
msgstr "Ðаиђох на непознату врÑту премештаја %d\n"
-#: readelf.c:9081
+#: readelf.c:9433
#, c-format
msgid "Bad symbol index in unwind relocation (%lu > %lu)\n"
msgstr "Лош Ð¸Ð½Ð´ÐµÐºÑ Ñимбола у неодвијеном премештају (%lu > %lu)\n"
-#: readelf.c:9096
+#: readelf.c:9448
#, c-format
msgid "Skipping unknown ARM relocation type: %d\n"
msgstr "ПреÑкачем непознату врÑту „ARM“ премештаја: %d\n"
-#: readelf.c:9106
+#: readelf.c:9458
#, c-format
msgid "Skipping unexpected ARM relocation type %s\n"
msgstr "ПреÑкачем неочекивану врÑту „ARM“ премештаја „%s“\n"
-#: readelf.c:9115
+#: readelf.c:9467
#, c-format
msgid "Skipping unknown C6000 relocation type: %d\n"
msgstr "ПреÑкачем непознату врÑту „C6000“ премештаја: %d\n"
-#: readelf.c:9125
+#: readelf.c:9477
#, c-format
msgid "Skipping unexpected C6000 relocation type %s\n"
msgstr "ПреÑкачем неочекивану врÑту „C6000“ премештаја „%s“\n"
#. This function currently only supports ARM and TI unwinders.
-#: readelf.c:9134
+#: readelf.c:9486
msgid "Only TI and ARM unwinders are currently supported\n"
msgstr "Само „TI“ и „ARM“ одмотавачи Ñу тренутно подржани\n"
-#: readelf.c:9197
+#: readelf.c:9549
#, c-format
msgid "[Truncated opcode]\n"
msgstr "[Скраћени опкод]\n"
-#: readelf.c:9245 readelf.c:9461
+#: readelf.c:9597 readelf.c:9815
#, c-format
msgid "Refuse to unwind"
msgstr "Одбија да одмота"
-#: readelf.c:9268
+#: readelf.c:9620
#, c-format
msgid " [Reserved]"
msgstr " [РезервиÑано]"
-#: readelf.c:9296
+#: readelf.c:9648
#, c-format
msgid " finish"
msgstr " крај"
-#: readelf.c:9301 readelf.c:9394
+#: readelf.c:9653 readelf.c:9748
#, c-format
msgid "[Spare]"
msgstr "[ДопунÑко]"
-#: readelf.c:9335
+#: readelf.c:9687
msgid "corrupt change to vsp\n"
msgstr "оштећена измена у „vsp“\n"
-#: readelf.c:9416 readelf.c:9573
+#: readelf.c:9713
+#, c-format
+msgid " pop {ra_auth_code}"
+msgstr " pop {ra_auth_code}"
+
+#: readelf.c:9770 readelf.c:9927
#, c-format
msgid " [unsupported opcode]"
msgstr " [неподржан опкод]"
-#: readelf.c:9509
+#: readelf.c:9863
#, c-format
msgid "pop frame {"
msgstr "поп кадар {"
-#: readelf.c:9512
+#: readelf.c:9866
#, c-format
msgid "*corrupt* - no registers specified"
msgstr "*оштећено* – ниÑу наведени региÑтри"
-#: readelf.c:9526
+#: readelf.c:9880
msgid "[pad]"
msgstr "[пад]"
-#: readelf.c:9555
+#: readelf.c:9909
msgid "Corrupt stack pointer adjustment detected\n"
msgstr "Оштећено дотеривање показивача Ñпремника је откривено\n"
-#: readelf.c:9562
+#: readelf.c:9916
#, c-format
msgid "sp = sp + %ld"
msgstr "sp = sp + %ld"
-#: readelf.c:9637
+#: readelf.c:9991
#, c-format
msgid " Personality routine: "
msgstr " Потпрограм личноÑти: "
-#: readelf.c:9669
+#: readelf.c:10023
#, c-format
msgid " [Truncated data]\n"
msgstr " [Скраћени подаци]\n"
-#: readelf.c:9693
+#: readelf.c:10047
#, c-format
msgid "Corrupt ARM compact model table entry: %x \n"
msgstr "Оштећен ÑƒÐ½Ð¾Ñ Ñ‚Ð°Ð±ÐµÐ»Ðµ збијеног ÐРМ модела: %x \n"
-#: readelf.c:9698
+#: readelf.c:10052
#, c-format
msgid " Compact model index: %d\n"
msgstr " ÐŸÐ¾Ð¿Ð¸Ñ Ð·Ð±Ð¸Ñ˜ÐµÐ½Ð¾Ð³ модела: %d\n"
-#: readelf.c:9724
+#: readelf.c:10078
msgid "Unknown ARM compact model index encountered\n"
msgstr "Ðађох непознати Ð¸Ð½Ð´ÐµÐºÑ Ð·Ð±Ð¸Ñ˜ÐµÐ½Ð¾Ð³ ÐРМ модела\n"
-#: readelf.c:9725
+#: readelf.c:10079
#, c-format
msgid " [reserved]\n"
msgstr " [резервиÑано]\n"
-#: readelf.c:9740
+#: readelf.c:10094
#, c-format
msgid " Restore stack from frame pointer\n"
msgstr " Поврати Ñпремник од показивача кадра\n"
-#: readelf.c:9742
+#: readelf.c:10096
#, c-format
msgid " Stack increment %d\n"
msgstr " Повећање Ñпремника %d\n"
-#: readelf.c:9743
+#: readelf.c:10097
#, c-format
msgid " Registers restored: "
msgstr " Повраћени региÑтри: "
-#: readelf.c:9748
+#: readelf.c:10102
#, c-format
msgid " Return register: %s\n"
msgstr " РегиÑтар резултата: %s\n"
-#: readelf.c:9752
+#: readelf.c:10106
#, c-format
msgid " [reserved (%d)]\n"
msgstr " [резервиÑано (%d)]\n"
-#: readelf.c:9756
+#: readelf.c:10110
#, c-format
msgid "Unsupported architecture type %d encountered when decoding unwind table\n"
msgstr "Ðеподржана врÑта архитектуре %d је откривена приликом декодирања табеле развијања\n"
-#: readelf.c:9811
+#: readelf.c:10165
#, c-format
msgid "corrupt index table entry: %x\n"
msgstr "оштећен Ð¸Ð½Ð´ÐµÐºÑ Ñ‚Ð°Ð±ÐµÐ»Ðµ ниÑке: %x\n"
-#: readelf.c:9851
+#: readelf.c:10205
#, c-format
msgid "Unwind entry contains corrupt offset (0x%lx) into section %s\n"
msgstr "Ðеодмотани ÑƒÐ½Ð¾Ñ Ñадржи оштећени померај (0x%lx) у одељку %s\n"
-#: readelf.c:9867
+#: readelf.c:10221
#, c-format
msgid "Could not locate .ARM.extab section containing 0x%lx.\n"
msgstr "Ðе могу да нађем одељак „.ARM.extab“ који Ñадржи 0x%lx.\n"
-#: readelf.c:9911
+#: readelf.c:10265
#, c-format
msgid "Unsupported architecture type %d encountered when processing unwind table\n"
msgstr "Ðеподржана врÑта архитектуре %d је откривена приликом обраде табеле развијања\n"
-#: readelf.c:9973
+#: readelf.c:10327
#, c-format
msgid "No processor specific unwind information to decode\n"
msgstr "Ðема информација развијања Ñпецифичних процеÑору за декодирање\n"
-#: readelf.c:10003
+#: readelf.c:10357
#, c-format
msgid ""
"\n"
@@ -9166,79 +9342,79 @@ msgstr ""
"\n"
"Декодирање одељака развијања за врÑту машине %s није тренутно подржано.\n"
-#: readelf.c:10030
+#: readelf.c:10384
#, c-format
msgid "NONE"
msgstr "ÐИШТÐ"
-#: readelf.c:10055
+#: readelf.c:10409
#, c-format
msgid "Interface Version: %s"
msgstr "Издање Ñучеља: %s"
#. Note: coded this way so that there is a single string for translation.
-#: readelf.c:10062
+#: readelf.c:10416
#, c-format
msgid "<corrupt: %s>"
msgstr "<оштећено: %s>"
-#: readelf.c:10080
+#: readelf.c:10434
#, c-format
msgid "Time Stamp: %s"
msgstr "ВременÑка ознака: %s"
-#: readelf.c:10274 readelf.c:10324
+#: readelf.c:10628 readelf.c:10678
msgid "dynamic section"
msgstr "динамички одељак"
-#: readelf.c:10294 readelf.c:10345
+#: readelf.c:10648 readelf.c:10699
#, c-format
msgid "Out of memory allocating space for %lu dynamic entries\n"
msgstr "ПонеÑтало је меморије за време додељивања проÑтора за %lu динамичка уноÑа\n"
-#: readelf.c:10419
+#: readelf.c:10773
#, c-format
msgid "Size truncation prevents reading %s elements of size %u\n"
msgstr "Скраћивање величине Ñпречава читање %s елемента величине %u\n"
-#: readelf.c:10428
+#: readelf.c:10782
#, c-format
msgid "Invalid number of dynamic entries: %s\n"
msgstr "ÐеиÑправан број динамичких уноÑа: %s\n"
-#: readelf.c:10436
+#: readelf.c:10790
#, c-format
msgid "Out of memory reading %s dynamic entries\n"
msgstr "ПонеÑтало је меморије за време читања %s динамичка уноÑа\n"
-#: readelf.c:10443
+#: readelf.c:10797
#, c-format
msgid "Unable to read in %s bytes of dynamic data\n"
msgstr "Ðе могу да прочитам %s бајта динамчких података\n"
-#: readelf.c:10452
+#: readelf.c:10806
#, c-format
msgid "Out of memory allocating space for %s dynamic entries\n"
msgstr "ПонеÑтало је меморије за време додељивања проÑтора за %s динамичка уноÑа\n"
-#: readelf.c:10492 readelf.c:10546 readelf.c:10570 readelf.c:10603
-#: readelf.c:10629 readelf.c:10648
+#: readelf.c:10846 readelf.c:10900 readelf.c:10924 readelf.c:10957
+#: readelf.c:10983 readelf.c:11002
msgid "Unable to seek to start of dynamic information\n"
msgstr "Ðе могу да премотам на почетак променљивих података\n"
-#: readelf.c:10498 readelf.c:10552
+#: readelf.c:10852 readelf.c:10906
msgid "Failed to read in number of buckets\n"
msgstr "ÐиÑам уÑпео да прочитам број ведара\n"
-#: readelf.c:10504
+#: readelf.c:10858
msgid "Failed to read in number of chains\n"
msgstr "ÐиÑам уÑпео да прочитам број ланаца\n"
-#: readelf.c:10611
+#: readelf.c:10965
msgid "Failed to determine last chain length\n"
msgstr "ÐиÑам уÑпео да одредим дужину поÑледњег ланца\n"
-#: readelf.c:10711
+#: readelf.c:11065
#, c-format
msgid ""
"\n"
@@ -9247,7 +9423,7 @@ msgstr ""
"\n"
"Ðема динамичког одељка у повезаној датотеци „%s“.\n"
-#: readelf.c:10714
+#: readelf.c:11068
#, c-format
msgid ""
"\n"
@@ -9257,165 +9433,165 @@ msgstr ""
"Ðема динамичког одељка у овој датотеци.\n"
#. See PR 21379 for a reproducer.
-#: readelf.c:10774
+#: readelf.c:11128
msgid "Invalid PT_LOAD entry\n"
msgstr "ÐеиÑправан „PT_LOAD“ уноÑ\n"
-#: readelf.c:10800
+#: readelf.c:11154
msgid "the .dynsym section doesn't match the DT_SYMTAB and DT_SYMENT tags\n"
msgstr "одељак „.dynsym“ не одговара ознакама „DT_SYMTAB“ и „DT_SYMENT“\n"
-#: readelf.c:10810
+#: readelf.c:11164
msgid "Corrupt DT_SYMTAB dynamic entry\n"
msgstr "Оштећен динамички ÑƒÐ½Ð¾Ñ â€žDT_SYMTAB“\n"
-#: readelf.c:10846
+#: readelf.c:11200
msgid "the .dynstr section doesn't match the DT_STRTAB and DT_STRSZ tags\n"
msgstr "одељак „.dynstr“ не одговара ознакама „DT_STRTAB“ и „DT_STRSZ“\n"
-#: readelf.c:10851
+#: readelf.c:11205
msgid "dynamic string table"
msgstr "табела динамичке ниÑке"
-#: readelf.c:10854
+#: readelf.c:11208
msgid "Corrupt DT_STRTAB dynamic entry\n"
msgstr "Оштећен динамички ÑƒÐ½Ð¾Ñ â€žDT_STRTAB“\n"
-#: readelf.c:10879
+#: readelf.c:11233
#, c-format
msgid "Bad value (%d) for SYMINENT entry\n"
msgstr "Лоша вредноÑÑ‚ (%d) за „SYMINENT“ уноÑ\n"
-#: readelf.c:10898
+#: readelf.c:11252
msgid "symbol information"
msgstr "подаци Ñимбола"
-#: readelf.c:10904
+#: readelf.c:11258
msgid "Multiple dynamic symbol information sections found\n"
msgstr "Ðађох више одељака података динамичког Ñимбола\n"
-#: readelf.c:10910
+#: readelf.c:11264
#, c-format
msgid "Out of memory allocating %lu bytes for dynamic symbol info\n"
msgstr "ПонеÑтало је меморије за време додељивања %lu бајта за динамичке податке Ñимбола\n"
-#: readelf.c:10936
+#: readelf.c:11288
#, c-format
msgid ""
"\n"
-"In linked file '%s' the dynamic section at offset 0x%lx contains 1 entry:\n"
-msgstr ""
-"\n"
-"У повезаној датотеци „%s“ динамички одељак на померају 0x%lx Ñадржи 1 уноÑ:\n"
-
-#: readelf.c:10940
-#, c-format
-msgid ""
+"In linked file '%s' the dynamic section at offset 0x%lx contains %lu entry:\n"
+msgid_plural ""
"\n"
-"Dynamic section at offset 0x%lx contains 1 entry:\n"
-msgstr ""
+"In linked file '%s' the dynamic section at offset 0x%lx contains %lu entries:\n"
+msgstr[0] ""
"\n"
-"Динамички одељак на померају 0x%lx Ñадржи 1 уноÑ:\n"
-
-#: readelf.c:10946
-#, c-format
-msgid ""
+"У повезаној датотеци „%s“ динамички одељак на померају 0x%lx Ñадржи %lu уноÑ:\n"
+msgstr[1] ""
"\n"
-"In linked file '%s' the dynamic section at offset 0x%lx contains %lu entries:\n"
-msgstr ""
+"У повезаној датотеци „%s“ динамички одељак на померају 0x%lx Ñадржи %lu уноÑа:\n"
+msgstr[2] ""
"\n"
"У повезаној датотеци „%s“ динамички одељак на померају 0x%lx Ñадржи %lu уноÑа:\n"
-#: readelf.c:10951
+#: readelf.c:11295
#, c-format
msgid ""
"\n"
+"Dynamic section at offset 0x%lx contains %lu entry:\n"
+msgid_plural ""
+"\n"
"Dynamic section at offset 0x%lx contains %lu entries:\n"
-msgstr ""
+msgstr[0] ""
+"\n"
+"Динамички одељак на померају 0x%lx Ñадржи %lu уноÑ:\n"
+msgstr[1] ""
+"\n"
+"Динамички одељак на померају 0x%lx Ñадржи %lu уноÑа:\n"
+msgstr[2] ""
"\n"
"Динамички одељак на померају 0x%lx Ñадржи %lu уноÑа:\n"
-#: readelf.c:10957
+#: readelf.c:11302
#, c-format
msgid " Tag Type Name/Value\n"
msgstr " Ознака Ð’Ñ€Ñта Ðазив/ВредноÑÑ‚\n"
-#: readelf.c:10991
+#: readelf.c:11336
#, c-format
msgid "Auxiliary library"
msgstr "Помоћна библиотека"
-#: readelf.c:10995
+#: readelf.c:11340
#, c-format
msgid "Filter library"
msgstr "Библиотека пропуÑника"
-#: readelf.c:10999
+#: readelf.c:11344
#, c-format
msgid "Configuration file"
msgstr "Датотека подешавања"
-#: readelf.c:11003
+#: readelf.c:11348
#, c-format
msgid "Dependency audit library"
msgstr "Библиотека прегледа завиÑноÑти"
-#: readelf.c:11007
+#: readelf.c:11352
#, c-format
msgid "Audit library"
msgstr "Библиотека прегледа"
-#: readelf.c:11026 readelf.c:11054 readelf.c:11082 readelf.c:11417
+#: readelf.c:11371 readelf.c:11399 readelf.c:11427 readelf.c:11767
#, c-format
msgid "Flags:"
msgstr "Опције:"
-#: readelf.c:11029 readelf.c:11057 readelf.c:11084 readelf.c:11419
+#: readelf.c:11374 readelf.c:11402 readelf.c:11429 readelf.c:11769
#, c-format
msgid " None\n"
msgstr " Ðишта\n"
-#: readelf.c:11290
+#: readelf.c:11636
#, c-format
msgid "Shared library: [%s]"
msgstr "Дељена библиотека: [%s]"
-#: readelf.c:11294
+#: readelf.c:11640
#, c-format
msgid " program interpreter"
msgstr " тумач програма"
-#: readelf.c:11298
+#: readelf.c:11644
#, c-format
msgid "Library soname: [%s]"
msgstr "тзвназив библиотеке: [%s]"
-#: readelf.c:11302
+#: readelf.c:11648
#, c-format
msgid "Library rpath: [%s]"
msgstr "рпутања библиотеке: [%s]"
-#: readelf.c:11306
+#: readelf.c:11652
#, c-format
msgid "Library runpath: [%s]"
msgstr "покретања_путања библиотеке: [%s]"
-#: readelf.c:11340
+#: readelf.c:11689
#, c-format
msgid " (bytes)\n"
msgstr " (бајта)\n"
-#: readelf.c:11370
+#: readelf.c:11720
#, c-format
msgid "Not needed object: [%s]\n"
msgstr "Ðепотребан предмет: [%s]\n"
-#: readelf.c:11395
+#: readelf.c:11745
#, c-format
msgid "<corrupt time val: %lx"
msgstr "<оштећена вредноÑÑ‚ времена: %lx"
-#: readelf.c:11538
+#: readelf.c:11888
#, c-format
msgid ""
"\n"
@@ -9433,7 +9609,7 @@ msgstr[2] ""
"\n"
"У повезаној датотеци „%s“ одељак одреднице издања „%s“ Ñадржи %u уноÑа:\n"
-#: readelf.c:11545
+#: readelf.c:11895
#, c-format
msgid ""
"\n"
@@ -9451,71 +9627,71 @@ msgstr[2] ""
"\n"
"Одељак одреднице издања „%s“ Ñадржи %u уноÑа:\n"
-#: readelf.c:11553 readelf.c:11700 readelf.c:11866
+#: readelf.c:11903 readelf.c:12050 readelf.c:12216
#, c-format
msgid " Addr: 0x"
msgstr " ÐдреÑа: 0x"
-#: readelf.c:11555 readelf.c:11702 readelf.c:11868
+#: readelf.c:11905 readelf.c:12052 readelf.c:12218
#, c-format
msgid " Offset: %#08lx Link: %u (%s)\n"
msgstr " Померај: %#08lx Веза: %u (%s)\n"
-#: readelf.c:11561
+#: readelf.c:11911
msgid "version definition section"
msgstr "одељак одреднице издања"
-#: readelf.c:11590
+#: readelf.c:11940
#, c-format
msgid " %#06lx: Rev: %d Flags: %s"
msgstr " %#06lx: Рев: %d Опције: %s"
-#: readelf.c:11593
+#: readelf.c:11943
#, c-format
msgid " Index: %d Cnt: %d "
msgstr " ИндекÑ: %d Бројач: %d "
-#: readelf.c:11610
+#: readelf.c:11960
#, c-format
msgid "Name: %s\n"
msgstr "Ðазив: %s\n"
-#: readelf.c:11613
+#: readelf.c:11963
#, c-format
msgid "Name index: %ld\n"
msgstr "Ð˜Ð½Ð´ÐµÐºÑ Ð½Ð°Ð·Ð¸Ð²Ð°: %ld\n"
-#: readelf.c:11622
+#: readelf.c:11972
#, c-format
msgid "Invalid vda_next field of %lx\n"
msgstr "ÐеиÑправно „vda_next“ поље од %lx\n"
-#: readelf.c:11642
+#: readelf.c:11992
#, c-format
msgid " %#06lx: Parent %d: %s\n"
msgstr " %#06lx: Родитељ %d: %s\n"
-#: readelf.c:11646
+#: readelf.c:11996
#, c-format
msgid " %#06lx: Parent %d, name index: %ld\n"
msgstr " %#06lx: Родитељ %d, Ð¸Ð½Ð´ÐµÐºÑ Ð½Ð°Ð·Ð¸Ð²Ð°: %ld\n"
-#: readelf.c:11651
+#: readelf.c:12001
#, c-format
msgid " Version def aux past end of section\n"
msgstr " Одредница издања „aux“ је прешла крај одељка\n"
-#: readelf.c:11658
+#: readelf.c:12008
#, c-format
msgid "Invalid vd_next field of %lx\n"
msgstr "ÐеиÑправно „vd_next“ поље од %lx\n"
-#: readelf.c:11669
+#: readelf.c:12019
#, c-format
msgid " Version definition past end of section\n"
msgstr " Одредница издања је прешла крај одељка\n"
-#: readelf.c:11685
+#: readelf.c:12035
#, c-format
msgid ""
"\n"
@@ -9533,7 +9709,7 @@ msgstr[2] ""
"\n"
"У повезаној датотеци „%s“ одељку потребно издање „%s“ Ñадржи %u уноÑа:\n"
-#: readelf.c:11692
+#: readelf.c:12042
#, c-format
msgid ""
"\n"
@@ -9551,68 +9727,68 @@ msgstr[2] ""
"\n"
"Издању треба одељак „%s“ који Ñадржи %u уноÑа:\n"
-#: readelf.c:11709
+#: readelf.c:12059
msgid "Version Needs section"
msgstr "Одељак „Издању треба“"
-#: readelf.c:11734
+#: readelf.c:12084
#, c-format
msgid " %#06lx: Version: %d"
msgstr " %#06lx: Издање: %d"
-#: readelf.c:11737
+#: readelf.c:12087
#, c-format
msgid " File: %s"
msgstr " Датотека: %s"
-#: readelf.c:11740
+#: readelf.c:12090
#, c-format
msgid " File: %lx"
msgstr " Датотека: %lx"
-#: readelf.c:11742
+#: readelf.c:12092
#, c-format
msgid " Cnt: %d\n"
msgstr " Бројач: %d\n"
-#: readelf.c:11765
+#: readelf.c:12115
#, c-format
msgid " %#06lx: Name: %s"
msgstr " %#06lx: Ðазив: %s"
-#: readelf.c:11768
+#: readelf.c:12118
#, c-format
msgid " %#06lx: Name index: %lx"
msgstr " %#06lx: Ð˜Ð½Ð´ÐµÐºÑ Ð½Ð°Ð·Ð¸Ð²Ð°: %lx"
-#: readelf.c:11771
+#: readelf.c:12121
#, c-format
msgid " Flags: %s Version: %d\n"
msgstr " Опције: %s Издање: %d\n"
-#: readelf.c:11777
+#: readelf.c:12127
#, c-format
msgid "Invalid vna_next field of %lx\n"
msgstr "ÐеиÑправно „vna_next“ поље од %lx\n"
-#: readelf.c:11790
+#: readelf.c:12140
msgid "Missing Version Needs auxiliary information\n"
msgstr "Потребне Ñу додатне информације недоÑтајућег издања\n"
-#: readelf.c:11795
+#: readelf.c:12145
#, c-format
msgid "Invalid vn_next field of %lx\n"
msgstr "ÐеиÑправно „vn_next“ поље од %lx\n"
-#: readelf.c:11805
+#: readelf.c:12155
msgid "Missing Version Needs information\n"
msgstr "ÐедоÑтају подаци за „Издању треба“\n"
-#: readelf.c:11843
+#: readelf.c:12193
msgid "version string table"
msgstr "табела ниÑке издања"
-#: readelf.c:11851
+#: readelf.c:12201
#, c-format
msgid ""
"\n"
@@ -9630,7 +9806,7 @@ msgstr[2] ""
"\n"
"У повезаној датотеци „%s“ одељак Ñимбола издања „%s“ Ñадржи %lu уноÑа:\n"
-#: readelf.c:11858
+#: readelf.c:12208
#, c-format
msgid ""
"\n"
@@ -9648,47 +9824,47 @@ msgstr[2] ""
"\n"
"Одељак Ñимбола издања „%s“ Ñадржи %lu уноÑа:\n"
-#: readelf.c:11877
+#: readelf.c:12227
msgid "version symbol data"
msgstr "подаци Ñимбола издања"
-#: readelf.c:11897
+#: readelf.c:12247
msgid "*invalid*"
msgstr "*неиÑправно*"
-#: readelf.c:11905
+#: readelf.c:12255
msgid " 0 (*local*) "
msgstr " 0 (*меÑно*) "
-#: readelf.c:11909
+#: readelf.c:12259
msgid " 1 (*global*) "
msgstr " 1 (*опште*) "
-#: readelf.c:11920
+#: readelf.c:12270
msgid "invalid index into symbol array\n"
msgstr "неиÑправан Ð¸Ð½Ð´ÐµÐºÑ Ñƒ низу Ñимбола\n"
-#: readelf.c:11943 readelf.c:12515
+#: readelf.c:12293 readelf.c:12890
msgid "version need"
msgstr "издање „need“"
-#: readelf.c:11954
+#: readelf.c:12304
msgid "version need aux (2)"
msgstr "издање „need aux“ (2)"
-#: readelf.c:12001 readelf.c:12459
+#: readelf.c:12351 readelf.c:12834
msgid "version def"
msgstr "одредница издања"
-#: readelf.c:12029 readelf.c:12490
+#: readelf.c:12379 readelf.c:12865
msgid "version def aux"
msgstr "помоћна одредница издања"
-#: readelf.c:12037
+#: readelf.c:12387
msgid "*both*"
msgstr "*оба*"
-#: readelf.c:12069
+#: readelf.c:12419
#, c-format
msgid ""
"\n"
@@ -9697,7 +9873,7 @@ msgstr ""
"\n"
"Ðема података о издању у повезаној датотеци „%s“.\n"
-#: readelf.c:12072
+#: readelf.c:12422
#, c-format
msgid ""
"\n"
@@ -9706,70 +9882,74 @@ msgstr ""
"\n"
"Ðема података о издању у овој датотеци.\n"
-#: readelf.c:12168
+#: readelf.c:12518
#, c-format
msgid "Unrecognized visibility value: %u\n"
msgstr "Ðепозната вредноÑÑ‚ видљивоÑти: %u\n"
-#: readelf.c:12181
+#: readelf.c:12531
#, c-format
msgid "Unrecognized alpha specific other value: %u\n"
msgstr "Ðепозната друга „alpha“ Ñпецифична вредноÑÑ‚: %u\n"
-#: readelf.c:12258
+#: readelf.c:12608
#, c-format
msgid "Unrecognized IA64 VMS ST Function type: %d\n"
msgstr "Ðепозната врÑта „IA64 VMS ST“ функције: %d\n"
-#: readelf.c:12282
+#: readelf.c:12632
#, c-format
msgid "Unrecognized IA64 VMS ST Linkage: %d\n"
msgstr "Ðепознато „IA64 VMS ST“ повезивање: %d\n"
-#: readelf.c:12308
+#: readelf.c:12658
#, c-format
msgid "<localentry>: %d"
msgstr "<меÑни_уноÑ>: %d"
-#: readelf.c:12348
+#: readelf.c:12672
+msgid " VARIANT_CC"
+msgstr " VARIANT_CC"
+
+#: readelf.c:12723
#, c-format
msgid "<other>: %x"
msgstr "<друго>: %x"
-#: readelf.c:12388
+#: readelf.c:12763
#, c-format
msgid "bad section index[%3d]"
msgstr "лош Ð¸Ð½Ð´ÐµÐºÑ Ð¾Ð´ÐµÑ™ÐºÐ°[%3d]"
-#: readelf.c:12421
+#: readelf.c:12796
msgid "version data"
msgstr "подаци издања"
-#: readelf.c:12533
+#: readelf.c:12908
msgid "version need aux (3)"
msgstr "издање „need aux“ (3)"
-#: readelf.c:12683
+#: readelf.c:13062
#, c-format
msgid "local symbol %lu found at index >= %s's sh_info value of %u\n"
msgstr "нађох локални Ñимбол %lu у индекÑу >= %s „sh_info“ вредноÑÑ‚ %u\n"
-#: readelf.c:12702
+#: readelf.c:13081
#, c-format
msgid "Unknown LTO symbol definition encountered: %u\n"
msgstr "Ðаиђох на непознату дефиницију „LTO“ Ñимбола: %u\n"
-#: readelf.c:12721
+#: readelf.c:13100
#, c-format
msgid "Unknown LTO symbol visibility encountered: %u\n"
msgstr "Ðаиђох на непознату видљивоÑÑ‚ „LTO“ Ñимбола: %u\n"
-#: readelf.c:12739
+#: readelf.c:13118
#, c-format
msgid "Unknown LTO symbol type encountered: %u\n"
msgstr "Ðаиђох на непознату врÑту „LTO“ Ñимбола: %u\n"
-#: readelf.c:12755
+#: readelf.c:13134
#, c-format
msgid ""
"\n"
@@ -9778,7 +9958,7 @@ msgstr ""
"\n"
"Одељак табеле „LTO“ Ñимбола „%s“ у повезаној датотеци „%s“ је празан!\n"
-#: readelf.c:12759
+#: readelf.c:13138
#, c-format
msgid ""
"\n"
@@ -9787,24 +9967,24 @@ msgstr ""
"\n"
"Табела „LTO“ Ñимбола „%s“ је празна!\n"
-#: readelf.c:12774
+#: readelf.c:13153
msgid "LTO symbols"
msgstr "„LTO“ Ñимболи"
-#: readelf.c:12791
+#: readelf.c:13171
#, c-format
msgid "LTO Symbol extension table '%s' is empty!\n"
msgstr "Табела проширења „LTO“ Ñимбола „%s“ је празна!\n"
-#: readelf.c:12797
+#: readelf.c:13177
msgid "LTO ext symbol data"
msgstr "Подаци проширења „LTO“ Ñимбола"
-#: readelf.c:12802
+#: readelf.c:13182
msgid "Unexpected version number in symbol extension table\n"
msgstr "Ðеочекивани број издања у табели проширења Ñимбола\n"
-#: readelf.c:12811
+#: readelf.c:13191
#, c-format
msgid ""
"\n"
@@ -9813,49 +9993,49 @@ msgstr ""
"\n"
"У повезаној датотеци „%s“: "
-#: readelf.c:12818
+#: readelf.c:13198
#, c-format
msgid "LTO Symbol table '%s' and extension table '%s' contain:\n"
msgstr "Табела „LTO“ Ñимбола „%s“ и табела проширења „%s“ Ñадрже:\n"
-#: readelf.c:12823
+#: readelf.c:13203
#, c-format
msgid "LTO Symbol table '%s'\n"
msgstr "Табела „LTO“ Ñимбола „%s“\n"
-#: readelf.c:12825
+#: readelf.c:13205
#, c-format
msgid " and extension table '%s' contain:\n"
msgstr " и табела проширења „%s“ Ñадрже:\n"
-#: readelf.c:12830
+#: readelf.c:13210
#, c-format
msgid "LTO Symbol table '%s' contains:\n"
msgstr "Табела „LTO“ Ñимбола „%s“ Ñадржи:\n"
-#: readelf.c:12835
+#: readelf.c:13215
#, c-format
msgid " Comdat_Key Kind Visibility Size Slot Type Section Name\n"
msgstr " Ðарпод_Кључ Ð’Ñ€Ñта ВидљивоÑÑ‚ Величина Утор Ð’Ñ€Ñта Ðазив одељка\n"
-#: readelf.c:12837
+#: readelf.c:13217
#, c-format
msgid " Comdat_Key Kind Visibility Size Slot Name\n"
msgstr " Ðарпод_Кључ Ð’Ñ€Ñта ВидљивоÑÑ‚ Величина Ðазив утора\n"
-#: readelf.c:12884
+#: readelf.c:13264
msgid "Ran out of LTO symbol extension data\n"
msgstr "Ðема више података проширења „LTO“ Ñимбола\n"
-#: readelf.c:12904
+#: readelf.c:13284
msgid "Data remains in the LTO symbol extension table\n"
msgstr "Подаци оÑтали у табели проширења „LTO“ Ñимбола\n"
-#: readelf.c:12914
+#: readelf.c:13294
msgid "Buffer overrun encountered whilst decoding LTO symbol table\n"
msgstr "Ðаиђох на прекорачење међумеморије за време дешифровања табеле „LTO“ Ñимбола\n"
-#: readelf.c:12966
+#: readelf.c:13346
#, c-format
msgid ""
"\n"
@@ -9873,7 +10053,7 @@ msgstr[2] ""
"\n"
"У повезаној датотеци „%s“ табела динамичког Ñимбола Ñадржи %lu уноÑа:\n"
-#: readelf.c:12974
+#: readelf.c:13354
#, c-format
msgid ""
"\n"
@@ -9891,17 +10071,17 @@ msgstr[2] ""
"\n"
"Табела Ñимбола за Ñлику Ñадржи %lu уноÑа:\n"
-#: readelf.c:12980 readelf.c:13033
+#: readelf.c:13360 readelf.c:13413
#, c-format
msgid " Num: Value Size Type Bind Vis Ndx Name\n"
msgstr " Број: ВрднÑÑ‚ Вел. Ð’Ñ€Ñта Свеза Виз Инд Ðазив\n"
-#: readelf.c:12982 readelf.c:13035
+#: readelf.c:13362 readelf.c:13415
#, c-format
msgid " Num: Value Size Type Bind Vis Ndx Name\n"
msgstr " Број: ВрднÑÑ‚ Вел. Ð’Ñ€Ñта Свеза Виз Инд Ðазив\n"
-#: readelf.c:13011
+#: readelf.c:13391
#, c-format
msgid ""
"\n"
@@ -9910,7 +10090,7 @@ msgstr ""
"\n"
"Табела Ñимбола „%s“ има нулту „sh_entsize“!\n"
-#: readelf.c:13019
+#: readelf.c:13399
#, c-format
msgid ""
"\n"
@@ -9928,7 +10108,7 @@ msgstr[2] ""
"\n"
"У повезаној датотеци „%s“ одељак Ñимбола „%s“ Ñадржи %lu уноÑа:\n"
-#: readelf.c:13026
+#: readelf.c:13406
#, c-format
msgid ""
"\n"
@@ -9946,7 +10126,7 @@ msgstr[2] ""
"\n"
"Табела Ñимбола „%s“ Ñадржи %lu уноÑа:\n"
-#: readelf.c:13069
+#: readelf.c:13449
#, c-format
msgid ""
"\n"
@@ -9955,7 +10135,7 @@ msgstr ""
"\n"
"Подаци динамичког Ñимбола ниÑу доÑтупни за приказивање Ñимбола.\n"
-#: readelf.c:13082
+#: readelf.c:13462
#, c-format
msgid ""
"\n"
@@ -9973,24 +10153,24 @@ msgstr[2] ""
"\n"
"ХиÑтограм за дужину ÑпиÑка ведра (укупно %lu ведара):\n"
-#: readelf.c:13093
+#: readelf.c:13473
msgid "Out of memory allocating space for histogram buckets\n"
msgstr "ПонеÑтало је меморије приликом додељивања проÑтора за ведра хиÑтограма\n"
-#: readelf.c:13099 readelf.c:13177
+#: readelf.c:13479 readelf.c:13557
#, c-format
msgid " Length Number %% of total Coverage\n"
msgstr " Дужина Број %% од укупно ПокривеноÑÑ‚\n"
-#: readelf.c:13109
+#: readelf.c:13489
msgid "histogram chain is corrupt\n"
msgstr "ланац хиÑтограма је оштећен\n"
-#: readelf.c:13121
+#: readelf.c:13501
msgid "Out of memory allocating space for histogram counts\n"
msgstr "ПонеÑтало је меморије приликом додељивања проÑтора за број хиÑтограма\n"
-#: readelf.c:13161
+#: readelf.c:13541
#, c-format
msgid ""
"\n"
@@ -10008,15 +10188,15 @@ msgstr[2] ""
"\n"
"ХиÑтограм за „%s“ дужину ÑпиÑка ведра (укупно %lu ведара):\n"
-#: readelf.c:13173
+#: readelf.c:13553
msgid "Out of memory allocating space for gnu histogram buckets\n"
msgstr "ПонеÑтало је меморије приликом додељивања проÑтора за ведра гну хиÑтограма\n"
-#: readelf.c:13200
+#: readelf.c:13580
msgid "Out of memory allocating space for gnu histogram counts\n"
msgstr "ПонеÑтало је меморије приликом додељивања проÑтора за број гну хиÑтограма\n"
-#: readelf.c:13266
+#: readelf.c:13646
#, c-format
msgid ""
"\n"
@@ -10034,7 +10214,7 @@ msgstr[2] ""
"\n"
"У повезаној датотеци „%s“ одломак динамичких информација на померају 0x%lx Ñадржи %d уноÑа:\n"
-#: readelf.c:13273
+#: readelf.c:13653
#, c-format
msgid ""
"\n"
@@ -10052,101 +10232,101 @@ msgstr[2] ""
"\n"
"Одломак динамичких података на померају 0x%lx Ñадржи %d уноÑа:\n"
-#: readelf.c:13281
+#: readelf.c:13661
#, c-format
msgid " Num: Name BoundTo Flags\n"
msgstr " Бр.: Ðазив Свезан за Опције\n"
-#: readelf.c:13288
+#: readelf.c:13668
#, c-format
msgid "<corrupt index>"
msgstr "<оштећен индекÑ>"
-#: readelf.c:13293
+#: readelf.c:13673
#, c-format
msgid "<corrupt: %19ld>"
msgstr "<оштећено: %19ld>"
-#: readelf.c:13390
+#: readelf.c:13770
#, c-format
msgid "MSP430 SYM_DIFF reloc contains invalid symbol index %lu\n"
msgstr "„MSP430 SYM_DIFF“ премештај Ñадржи неиÑправан Ð¸Ð½Ð´ÐµÐºÑ Ñимбола %lu\n"
-#: readelf.c:13437
+#: readelf.c:13817
#, c-format
msgid "MSP430 ULEB128 field at 0x%lx contains invalid ULEB128 value\n"
msgstr "„MSP430 ULEB128“ поље на 0x%lx Ñадржи неиÑправну „ULEB128“ вредноÑÑ‚\n"
-#: readelf.c:13441
+#: readelf.c:13821
#, c-format
msgid "MSP430 reloc contains invalid symbol index %lu\n"
msgstr "„MSP430“ премештај Ñадржи неиÑправан Ð¸Ð½Ð´ÐµÐºÑ Ñимбола %lu\n"
#. PR 21137
-#: readelf.c:13452
+#: readelf.c:13832
#, c-format
msgid "MSP430 sym diff reloc contains invalid offset: 0x%lx\n"
msgstr "„MSP430“ премештај разлике Ñимбола Ñадржи неиÑправан померај: 0x%lx\n"
-#: readelf.c:13463
+#: readelf.c:13843
msgid "Unhandled MSP430 reloc type found after SYM_DIFF reloc\n"
msgstr "Ðађох необрадиву „MSP430“ врÑту премештаја након „SYM_DIFF“ премештаја\n"
-#: readelf.c:13486
+#: readelf.c:13866
#, c-format
msgid "MN10300_SYM_DIFF reloc contains invalid symbol index %lu\n"
msgstr "„MN10300_SYM_DIFF“ премештај Ñадржи неиÑправан Ð¸Ð½Ð´ÐµÐºÑ Ñимбола %lu\n"
-#: readelf.c:13500
+#: readelf.c:13880
#, c-format
msgid "MN10300 reloc contains invalid symbol index %lu\n"
msgstr "„MN10300“ премештај Ñадржи неиÑправан Ð¸Ð½Ð´ÐµÐºÑ Ñимбола %lu\n"
-#: readelf.c:13510
+#: readelf.c:13890
#, c-format
msgid "MN10300 sym diff reloc contains invalid offset: 0x%lx\n"
msgstr "„MN10300“ премештај разлике Ñимбола Ñадржи неиÑправан померај: 0x%lx\n"
-#: readelf.c:13520
+#: readelf.c:13900
msgid "Unhandled MN10300 reloc type found after SYM_DIFF reloc\n"
msgstr "Пронађох непознату MN10300 врÑту премештаја након „SYM_DIFF“ премештаја\n"
-#: readelf.c:13543
+#: readelf.c:13923
#, c-format
msgid "RL78_SYM reloc contains invalid symbol index %lu\n"
msgstr "„RL78_SYM“ премештај Ñадржи неиÑправан Ð¸Ð½Ð´ÐµÐºÑ Ñимбола %lu\n"
-#: readelf.c:13562 readelf.c:13571
+#: readelf.c:13942 readelf.c:13951
#, c-format
msgid "RL78 sym diff reloc contains invalid offset: 0x%lx\n"
msgstr "„RL78“ премештај разлике Ñимбола Ñадржи неиÑправан померај: 0x%lx\n"
-#: readelf.c:13790
+#: readelf.c:14172
#, c-format
msgid "Missing knowledge of 32-bit reloc types used in DWARF sections of machine number %d\n"
msgstr "ÐедоÑтаје знање о 32-битним врÑтама премештаја коришћених у „DWARF“ одељцима броја машине %d\n"
-#: readelf.c:14473
+#: readelf.c:14857
#, c-format
msgid "unable to apply unsupported reloc type %d to section %s\n"
msgstr "не могу да применим неподржану врÑту премештаја %d на одељак %s\n"
-#: readelf.c:14482
+#: readelf.c:14866
#, c-format
msgid "skipping invalid relocation offset 0x%lx in section %s\n"
msgstr "преÑкачем неиÑправан померај премештаја 0x%lx у одељку %s\n"
-#: readelf.c:14491
+#: readelf.c:14875
#, c-format
msgid "skipping invalid relocation symbol index 0x%lx in section %s\n"
msgstr "преÑкачем неиÑправан Ð¸Ð½Ð´ÐµÐºÑ Ñимбола премештаја 0x%lx у одељку %s\n"
-#: readelf.c:14514
+#: readelf.c:14898
#, c-format
msgid "skipping unexpected symbol type %s in section %s relocation %ld\n"
msgstr "преÑкачем неочекивану врÑту Ñимбола %s у одељку %s премештај %ld\n"
-#: readelf.c:14591
+#: readelf.c:14975
#, c-format
msgid ""
"\n"
@@ -10155,16 +10335,16 @@ msgstr ""
"\n"
"Избачај аÑемблера за одељак %s\n"
-#: readelf.c:14609
+#: readelf.c:14993
#, c-format
msgid "Section '%s' has no data to dump.\n"
msgstr "Одељак „%s“ нема податке за избачај.\n"
-#: readelf.c:14615
+#: readelf.c:14999
msgid "section contents"
msgstr "Ñадржај одељка"
-#: readelf.c:14691
+#: readelf.c:15075
#, c-format
msgid ""
"\n"
@@ -10173,7 +10353,7 @@ msgstr ""
"\n"
"Избачај ниÑке одељка „%s“ у повезаној датотеци „%s“:\n"
-#: readelf.c:14695
+#: readelf.c:15079
#, c-format
msgid ""
"\n"
@@ -10182,33 +10362,33 @@ msgstr ""
"\n"
"Избачај ниÑке одељка „%s“:\n"
-#: readelf.c:14716 readelf.c:14932 readelf.c:15355
+#: readelf.c:15100 readelf.c:15316 readelf.c:15703
#, c-format
msgid "section '%s' has unsupported compress type: %d\n"
msgstr "одељак „%s“ има неподржану врÑту Ñажимања: %d\n"
-#: readelf.c:14748 readelf.c:14966 readelf.c:15392
+#: readelf.c:15132 readelf.c:15350 readelf.c:15740
#, c-format
msgid "Unable to decompress section %s\n"
msgstr "Ðе могу да раÑпакујем одељак %s\n"
-#: readelf.c:14773
+#: readelf.c:15157
#, c-format
msgid " Note: This section has relocations against it, but these have NOT been applied to this dump.\n"
msgstr " Ðапомена: Ðад овим одељком Ñе раде премештаји, али они ÐИСУ примењени на овај избачај.\n"
-#: readelf.c:14866 readelf.c:16353 readelf.c:16393 readelf.c:16431
-#: readelf.c:16478 readelf.c:16509 readelf.c:18113 readelf.c:18145
+#: readelf.c:15250 readelf.c:16726 readelf.c:16766 readelf.c:16804
+#: readelf.c:16851 readelf.c:16882 readelf.c:18488 readelf.c:18520
#, c-format
msgid "<corrupt>\n"
msgstr "<оштећено>\n"
-#: readelf.c:14874
+#: readelf.c:15258
#, c-format
msgid " No strings found in this section."
msgstr " Ðема пронађених ниÑки у овом одељку."
-#: readelf.c:14907
+#: readelf.c:15291
#, c-format
msgid ""
"\n"
@@ -10217,7 +10397,7 @@ msgstr ""
"\n"
"ХекÑадецимални избачај одељка „%s“ у повезаној датотеци „%s“:\n"
-#: readelf.c:14911
+#: readelf.c:15295
#, c-format
msgid ""
"\n"
@@ -10226,45 +10406,36 @@ msgstr ""
"\n"
"ХекÑадецимални избачај одељка „%s“:\n"
-#: readelf.c:14999
+#: readelf.c:15383
#, c-format
msgid " NOTE: This section has relocations against it, but these have NOT been applied to this dump.\n"
msgstr " ÐÐПОМЕÐÐ: Ðад овим одељком Ñе раде премештаји, али они ÐИСУ примењени на овај избачај.\n"
-#: readelf.c:15144
+#: readelf.c:15525
#, c-format
msgid "Iteration failed: %s, %s\n"
msgstr "Понављање није уÑпело: %s, %s\n"
-#: readelf.c:15190
+#: readelf.c:15569
#, c-format
msgid "No symbol section named %s\n"
msgstr "Ðема одељка Ñимбола под називом „%s“\n"
-#: readelf.c:15206
+#: readelf.c:15585
#, c-format
msgid "No string table section named %s\n"
msgstr "Ðема одељка табеле ниÑке под називом „%s“\n"
-#: readelf.c:15213
+#: readelf.c:15592
msgid "strings"
msgstr "ниÑке"
-#: readelf.c:15223
-#, c-format
-msgid "No CTF parent section named %s\n"
-msgstr "Ðема „CTF“ родитељÑки одељак под називом „%s“\n"
-
-#: readelf.c:15229
-msgid "CTF parent"
-msgstr "„CTF“ родитељ"
-
-#: readelf.c:15242 readelf.c:15255 readelf.c:15269
+#: readelf.c:15605 readelf.c:15617
#, c-format
msgid "CTF open failure: %s\n"
msgstr "ÐиÑам уÑпео да отворим „CTF“: %s\n"
-#: readelf.c:15276
+#: readelf.c:15624
#, c-format
msgid ""
"\n"
@@ -10273,7 +10444,7 @@ msgstr ""
"\n"
"Избачај „CTF“ одељка „%s“ у повезаној датотеци „%s“:\n"
-#: readelf.c:15280
+#: readelf.c:15628
#, c-format
msgid ""
"\n"
@@ -10282,27 +10453,27 @@ msgstr ""
"\n"
"Избачај „CTF“ одељка „%s“:\n"
-#: readelf.c:15286
+#: readelf.c:15636
#, c-format
msgid "CTF member open failure: %s\n"
msgstr "ÐеуÑпех отварања „CTF“ члана: %s\n"
-#: readelf.c:15319
+#: readelf.c:15667
#, c-format
msgid "%s section data"
msgstr "подаци одељка %s"
-#: readelf.c:15342
+#: readelf.c:15690
#, c-format
msgid "compressed section %s is too small to contain a compression header\n"
msgstr "Ñажети одељак „%s“ је премали да Ñадржи заглавље Ñажимања\n"
-#: readelf.c:15468 readelf.c:15495 readelf.c:15520
+#: readelf.c:15816 readelf.c:15843 readelf.c:15868
#, c-format
msgid "malformed note encountered in section %s whilst scanning for build-id note\n"
msgstr "наиђох на лошу напомену у одељку „%s“ док Ñам тражио напомену иб-а изградње\n"
-#: readelf.c:15644
+#: readelf.c:15993
#, c-format
msgid ""
"\n"
@@ -10315,503 +10486,503 @@ msgstr ""
#. which has the NOBITS type - the bits in the file will be random.
#. This can happen when a file containing a .eh_frame section is
#. stripped with the --only-keep-debug command line option.
-#: readelf.c:15653
+#: readelf.c:16002
#, c-format
msgid "section '%s' has the NOBITS type - its contents are unreliable.\n"
msgstr "одељак „%s“ има врÑту „NOBITS“ – његови Ñадржаји Ñу непоуздани.\n"
-#: readelf.c:15703
+#: readelf.c:16052
#, c-format
msgid "Unrecognized debug section: %s\n"
msgstr "Ðепознат одељак прочишћавања: %s\n"
-#: readelf.c:15732
+#: readelf.c:16082
#, c-format
msgid "Section '%s' was not dumped because it does not exist\n"
msgstr "Одељак „%s“ није избачен зато што не поÑтоји\n"
-#: readelf.c:15805
+#: readelf.c:16155
#, c-format
msgid "Section %d was not dumped because it does not exist!\n"
msgstr "Одељак %d није избачен зато што не поÑтоји!\n"
-#: readelf.c:15861
+#: readelf.c:16211
msgid "<corrupt tag>\n"
msgstr "<оштећена ознака>\n"
-#: readelf.c:15876
+#: readelf.c:16226
#, c-format
msgid "<corrupt string tag>"
msgstr "<оштећена ознака ниÑке>"
-#: readelf.c:15910
+#: readelf.c:16260
#, c-format
msgid "Absent/Non standard\n"
msgstr "ОдÑтутно/ÐеÑтандардно\n"
-#: readelf.c:15913
+#: readelf.c:16263
#, c-format
msgid "Bare metal/mwdt\n"
msgstr "Огољени метал/mwdt\n"
-#: readelf.c:15916
+#: readelf.c:16266
#, c-format
msgid "Bare metal/newlib\n"
msgstr "Огољени метал/newlib\n"
-#: readelf.c:15919
+#: readelf.c:16269
#, c-format
msgid "Linux/uclibc\n"
msgstr "ЛинукÑ/uclibc\n"
-#: readelf.c:15922
+#: readelf.c:16272
#, c-format
msgid "Linux/glibc\n"
msgstr "ЛинукÑ/glibc\n"
-#: readelf.c:15925 readelf.c:16004
+#: readelf.c:16275 readelf.c:16354
#, c-format
msgid "Unknown\n"
msgstr "Ðепознато\n"
-#: readelf.c:15937 readelf.c:15967 readelf.c:15995
+#: readelf.c:16287 readelf.c:16317 readelf.c:16345
#, c-format
msgid "Absent\n"
msgstr "ÐедоÑтаје\n"
-#: readelf.c:15979
+#: readelf.c:16329
msgid "yes"
msgstr "да"
-#: readelf.c:15979
+#: readelf.c:16329
msgid "no"
msgstr "не"
-#: readelf.c:16016 readelf.c:16023
+#: readelf.c:16366 readelf.c:16373
msgid "default"
msgstr "оÑновно"
-#: readelf.c:16017
+#: readelf.c:16367
msgid "smallest"
msgstr "најмање"
-#: readelf.c:16022
+#: readelf.c:16372
msgid "OPTFP"
msgstr "OPTFP"
-#: readelf.c:16220 readelf.c:16233 readelf.c:16251 readelf.c:16772
-#: readelf.c:17051 readelf.c:17063 readelf.c:17075
+#: readelf.c:16593 readelf.c:16606 readelf.c:16624 readelf.c:17145
+#: readelf.c:17424 readelf.c:17436 readelf.c:17448
#, c-format
msgid "None\n"
msgstr "Ðишта\n"
-#: readelf.c:16221
+#: readelf.c:16594
#, c-format
msgid "Application\n"
msgstr "Програм\n"
-#: readelf.c:16222
+#: readelf.c:16595
#, c-format
msgid "Realtime\n"
msgstr "Стварно време\n"
-#: readelf.c:16223
+#: readelf.c:16596
#, c-format
msgid "Microcontroller\n"
msgstr "Микроконтролер\n"
-#: readelf.c:16224
+#: readelf.c:16597
#, c-format
msgid "Application or Realtime\n"
msgstr "Програм или Ñтварно време\n"
-#: readelf.c:16234 readelf.c:16253 readelf.c:16824 readelf.c:16841
-#: readelf.c:16912 readelf.c:16932 readelf.c:19716
+#: readelf.c:16607 readelf.c:16626 readelf.c:17197 readelf.c:17214
+#: readelf.c:17285 readelf.c:17305 readelf.c:20136
#, c-format
msgid "8-byte\n"
msgstr "8-бајта\n"
-#: readelf.c:16235 readelf.c:16915 readelf.c:16935 readelf.c:19715
+#: readelf.c:16608 readelf.c:17288 readelf.c:17308 readelf.c:20135
#, c-format
msgid "4-byte\n"
msgstr "4-бајта\n"
-#: readelf.c:16239 readelf.c:16257
+#: readelf.c:16612 readelf.c:16630
#, c-format
msgid "8-byte and up to %d-byte extended\n"
msgstr "8-бајта и Ñве до %d-бајта проширено\n"
-#: readelf.c:16252
+#: readelf.c:16625
#, c-format
msgid "8-byte, except leaf SP\n"
msgstr "8-бајта, оÑим за лиÑÑ‚ СП\n"
-#: readelf.c:16268 readelf.c:16350 readelf.c:16950
+#: readelf.c:16641 readelf.c:16723 readelf.c:17323
#, c-format
msgid "flag = %d, vendor = "
msgstr "опција = %d, продавац = "
-#: readelf.c:16289
+#: readelf.c:16662
#, c-format
msgid "True\n"
msgstr "Тачно\n"
-#: readelf.c:16309
+#: readelf.c:16682
#, c-format
msgid "<unknown: %d>\n"
msgstr "<непознато: %d>\n"
-#: readelf.c:16354
+#: readelf.c:16727
msgid "corrupt vendor attribute\n"
msgstr "оштећен атрибут продавца\n"
-#: readelf.c:16404
+#: readelf.c:16777
#, c-format
msgid "unspecified hard/soft float\n"
msgstr "неодређеи машинÑки/ÑофтверÑки покретни зарез\n"
-#: readelf.c:16407
+#: readelf.c:16780
#, c-format
msgid "hard float\n"
msgstr "машинÑки зарез\n"
-#: readelf.c:16410
+#: readelf.c:16783
#, c-format
msgid "soft float\n"
msgstr "ÑофтверÑки зарез\n"
-#: readelf.c:16442
+#: readelf.c:16815
#, c-format
msgid "unspecified hard/soft float, "
msgstr "неодређеи машинÑки/ÑофтверÑки покретни зарез, "
-#: readelf.c:16445
+#: readelf.c:16818
#, c-format
msgid "hard float, "
msgstr "машинÑки зарез, "
-#: readelf.c:16448
+#: readelf.c:16821
#, c-format
msgid "soft float, "
msgstr "ÑофтверÑки зарез, "
-#: readelf.c:16451
+#: readelf.c:16824
#, c-format
msgid "single-precision hard float, "
msgstr "машинÑки зарез једно-тачноÑти, "
-#: readelf.c:16458
+#: readelf.c:16831
#, c-format
msgid "unspecified long double\n"
msgstr "неодређени дуги дубл\n"
-#: readelf.c:16461
+#: readelf.c:16834
#, c-format
msgid "128-bit IBM long double\n"
msgstr "128-битни „IBM“ дуги дубл\n"
-#: readelf.c:16464
+#: readelf.c:16837
#, c-format
msgid "64-bit long double\n"
msgstr "64-битни дуги дубл\n"
-#: readelf.c:16467
+#: readelf.c:16840
#, c-format
msgid "128-bit IEEE long double\n"
msgstr "128-битни „IEEE“ дуги дубл\n"
-#: readelf.c:16489 readelf.c:16520
+#: readelf.c:16862 readelf.c:16893
#, c-format
msgid "unspecified\n"
msgstr "неодређено\n"
-#: readelf.c:16492
+#: readelf.c:16865
#, c-format
msgid "generic\n"
msgstr "опште\n"
-#: readelf.c:16526
+#: readelf.c:16899
#, c-format
msgid "memory\n"
msgstr "меморија\n"
-#: readelf.c:16553
+#: readelf.c:16926
#, c-format
msgid "any\n"
msgstr "било који\n"
-#: readelf.c:16556
+#: readelf.c:16929
#, c-format
msgid "software\n"
msgstr "ÑофтверÑки\n"
-#: readelf.c:16559
+#: readelf.c:16932
#, c-format
msgid "hardware\n"
msgstr "машинÑки\n"
-#: readelf.c:16682
+#: readelf.c:17055
#, c-format
msgid "Hard or soft float\n"
msgstr "МашинÑки или програмÑки зарез\n"
-#: readelf.c:16685
+#: readelf.c:17058
#, c-format
msgid "Hard float (double precision)\n"
msgstr "МашинÑки зарез (дво-тачноÑÑ‚)\n"
-#: readelf.c:16688
+#: readelf.c:17061
#, c-format
msgid "Hard float (single precision)\n"
msgstr "МашинÑки зарез (једно-тачноÑÑ‚)\n"
-#: readelf.c:16691
+#: readelf.c:17064
#, c-format
msgid "Soft float\n"
msgstr "СофтверÑки зарез\n"
-#: readelf.c:16694
+#: readelf.c:17067
#, c-format
msgid "Hard float (MIPS32r2 64-bit FPU 12 callee-saved)\n"
msgstr "ХардверÑки покретни зарез („MIPS32r2“ 64-бита „FPU 12 callee-saved“)\n"
-#: readelf.c:16697
+#: readelf.c:17070
#, c-format
msgid "Hard float (32-bit CPU, Any FPU)\n"
msgstr "ХардверÑки покретни зарез (32-битни процеÑор, било који „FPU“)\n"
-#: readelf.c:16700
+#: readelf.c:17073
#, c-format
msgid "Hard float (32-bit CPU, 64-bit FPU)\n"
msgstr "ХардверÑки покретни зарез (32-битни процеÑор, 64-битни „FPU“)\n"
-#: readelf.c:16703
+#: readelf.c:17076
#, c-format
msgid "Hard float compat (32-bit CPU, 64-bit FPU)\n"
msgstr "ХардверÑко покретном зарезу ÑаглаÑно (32-битни процеÑор, 64-битни „FPU“)\n"
-#: readelf.c:16706
+#: readelf.c:17079
#, c-format
msgid "NaN 2008 compatibility\n"
msgstr "NaN 2008 ÑаглаÑноÑÑ‚\n"
-#: readelf.c:16739
+#: readelf.c:17112
#, c-format
msgid "Any MSA or not\n"
msgstr "Било који МСРили не\n"
-#: readelf.c:16742
+#: readelf.c:17115
#, c-format
msgid "128-bit MSA\n"
msgstr "128-битни МСÐ\n"
-#: readelf.c:16804
+#: readelf.c:17177
#, c-format
msgid "Not used\n"
msgstr "Ðе кориÑти Ñе\n"
-#: readelf.c:16807
+#: readelf.c:17180
#, c-format
msgid "2 bytes\n"
msgstr "2 бајта\n"
-#: readelf.c:16810
+#: readelf.c:17183
#, c-format
msgid "4 bytes\n"
msgstr "4 бајта\n"
-#: readelf.c:16827 readelf.c:16844 readelf.c:16918 readelf.c:16938
+#: readelf.c:17200 readelf.c:17217 readelf.c:17291 readelf.c:17311
#, c-format
msgid "16-byte\n"
msgstr "16-бајта\n"
-#: readelf.c:16858
+#: readelf.c:17231
#, c-format
msgid "DSBT addressing not used\n"
msgstr "ДСБТ адреÑирање није коришћено\n"
-#: readelf.c:16861
+#: readelf.c:17234
#, c-format
msgid "DSBT addressing used\n"
msgstr "ДСБТ адреÑирање је коришћено\n"
-#: readelf.c:16875
+#: readelf.c:17248
#, c-format
msgid "Data addressing position-dependent\n"
msgstr "ÐдреÑирање података завиÑно од положаја\n"
-#: readelf.c:16878
+#: readelf.c:17251
#, c-format
msgid "Data addressing position-independent, GOT near DP\n"
msgstr "ÐдреÑирање података незавиÑно од положаја, ТОП близу ДП\n"
-#: readelf.c:16881
+#: readelf.c:17254
#, c-format
msgid "Data addressing position-independent, GOT far from DP\n"
msgstr "ÐдреÑирање података незавиÑно од положаја, ТОП далеко од ДП\n"
-#: readelf.c:16895
+#: readelf.c:17268
#, c-format
msgid "Code addressing position-dependent\n"
msgstr "ÐдреÑирање кода завиÑно од положаја\n"
-#: readelf.c:16898
+#: readelf.c:17271
#, c-format
msgid "Code addressing position-independent\n"
msgstr "ÐдреÑирање кода незавиÑно од положаја\n"
-#: readelf.c:17052
+#: readelf.c:17425
#, c-format
msgid "MSP430\n"
msgstr "MSP430\n"
-#: readelf.c:17053
+#: readelf.c:17426
#, c-format
msgid "MSP430X\n"
msgstr "MSP430X\n"
-#: readelf.c:17064 readelf.c:17076
+#: readelf.c:17437 readelf.c:17449
#, c-format
msgid "Small\n"
msgstr "Мало\n"
-#: readelf.c:17065 readelf.c:17077
+#: readelf.c:17438 readelf.c:17450
#, c-format
msgid "Large\n"
msgstr "Велико\n"
-#: readelf.c:17078
+#: readelf.c:17451
#, c-format
msgid "Restricted Large\n"
msgstr "Ограничене дужине\n"
-#: readelf.c:17084
+#: readelf.c:17457
#, c-format
msgid " <unknown tag %d>: "
msgstr " <непозната ознака %d>: "
-#: readelf.c:17130
+#: readelf.c:17503
#, c-format
msgid "Any Region\n"
msgstr "Било која облаÑÑ‚\n"
-#: readelf.c:17133
+#: readelf.c:17506
#, c-format
msgid "Lower Region Only\n"
msgstr "Само нижа облаÑÑ‚\n"
-#: readelf.c:17192
+#: readelf.c:17565
#, c-format
msgid "%u\n"
msgstr "%u\n"
-#: readelf.c:17199
+#: readelf.c:17572
#, c-format
msgid "No unaligned access\n"
msgstr "Ðема непоравнатог приÑтупа\n"
-#: readelf.c:17202
+#: readelf.c:17575
#, c-format
msgid "Unaligned access\n"
msgstr "Ðепоравнат приÑтуп\n"
-#: readelf.c:17208
+#: readelf.c:17581
#, c-format
msgid "%u-bytes\n"
msgstr "%u-бајта\n"
-#: readelf.c:17347
+#: readelf.c:17723
msgid "attributes"
msgstr "оÑобине"
-#: readelf.c:17359
+#: readelf.c:17735
#, c-format
msgid "Unknown attributes version '%c'(%d) - expecting 'A'\n"
msgstr "Ðепознато издање атрибута „%c“(%d) – очекујем „A“\n"
-#: readelf.c:17378
+#: readelf.c:17754
msgid "Tag section ends prematurely\n"
msgstr "Одељак ознаке Ñе завршава прерано\n"
-#: readelf.c:17387
+#: readelf.c:17763
#, c-format
msgid "Bad attribute length (%u > %u)\n"
msgstr "Лоша дужина атрибута (%u > %u)\n"
-#: readelf.c:17395
+#: readelf.c:17771
#, c-format
msgid "Attribute length of %u is too small\n"
msgstr "Дужина атрибута %u је премала\n"
-#: readelf.c:17406
+#: readelf.c:17782
msgid "Corrupt attribute section name\n"
msgstr "Ðазив одељка оштећеног атрибута\n"
-#: readelf.c:17411
+#: readelf.c:17787
#, c-format
msgid "Attribute Section: "
msgstr "Одељак атрибута: "
-#: readelf.c:17438
+#: readelf.c:17814
msgid "Unused bytes at end of section\n"
msgstr "Ðекоришћени бајтови на крају одељка\n"
-#: readelf.c:17448
+#: readelf.c:17824
#, c-format
msgid "Bad subsection length (%u > %u)\n"
msgstr "Лоша дужина пододељка (%u > %u)\n"
-#: readelf.c:17456
+#: readelf.c:17832
#, c-format
msgid "Bad subsection length (%u < 6)\n"
msgstr "Лоша дужина пододељка (%u < 6)\n"
-#: readelf.c:17471
+#: readelf.c:17847
#, c-format
msgid "File Attributes\n"
msgstr "ОÑобине датотеке\n"
-#: readelf.c:17474
+#: readelf.c:17850
#, c-format
msgid "Section Attributes:"
msgstr "ОÑобине одељка:"
-#: readelf.c:17477
+#: readelf.c:17853
#, c-format
msgid "Symbol Attributes:"
msgstr "ОÑобине Ñимбола:"
-#: readelf.c:17490
+#: readelf.c:17866
#, c-format
msgid "Unknown tag: %d\n"
msgstr "Ðепозната ознака: %d\n"
-#: readelf.c:17511
+#: readelf.c:17887
#, c-format
msgid " Unknown attribute:\n"
msgstr " Ðепознат атрибут:\n"
-#: readelf.c:17553
+#: readelf.c:17929
msgid "MIPS GOT entry extends beyond the end of available data\n"
msgstr "„MIPS GOT“ ÑƒÐ½Ð¾Ñ Ð¿Ñ€ÐµÐ²Ð°Ð·Ð¸Ð»Ð°Ð·Ð¸ крај доÑтупних података\n"
-#: readelf.c:17636 readelf.c:17705
+#: readelf.c:18012 readelf.c:18081
msgid "Unknown"
msgstr "Ðепознато"
-#: readelf.c:17752
+#: readelf.c:18128
msgid "Corrupt MIPS ABI Flags section.\n"
msgstr "Оштећени одељак „MIPS ABI“ заÑтавица.\n"
-#: readelf.c:17758
+#: readelf.c:18134
msgid "MIPS ABI Flags section"
msgstr "Одељак „MIPS ABI“ заÑтавица"
-#: readelf.c:17817 readelf.c:18400
+#: readelf.c:18193 readelf.c:18775
msgid "Global Offset Table data"
msgstr "Подаци табеле општег помераја"
-#: readelf.c:17821
+#: readelf.c:18197
#, c-format
msgid ""
"\n"
@@ -10820,45 +10991,45 @@ msgstr ""
"\n"
"Статичко „GOT“:\n"
-#: readelf.c:17822 readelf.c:18405
+#: readelf.c:18198 readelf.c:18780
#, c-format
msgid " Canonical gp value: "
msgstr " ПропиÑна гп вредноÑÑ‚: "
-#: readelf.c:17836 readelf.c:18409 readelf.c:18539
+#: readelf.c:18212 readelf.c:18784 readelf.c:18914
#, c-format
msgid " Reserved entries:\n"
msgstr " РезервиÑани уноÑи:\n"
-#: readelf.c:17837
+#: readelf.c:18213
#, c-format
msgid " %*s %10s %*s\n"
msgstr " %*s %10s %*s\n"
-#: readelf.c:17838 readelf.c:17868 readelf.c:18411 readelf.c:18439
-#: readelf.c:18457 readelf.c:18541 readelf.c:18550
+#: readelf.c:18214 readelf.c:18244 readelf.c:18786 readelf.c:18814
+#: readelf.c:18832 readelf.c:18916 readelf.c:18925
msgid "Address"
msgstr "ÐдреÑа"
-#: readelf.c:17838 readelf.c:17868 readelf.c:18411 readelf.c:18439
-#: readelf.c:18458
+#: readelf.c:18214 readelf.c:18244 readelf.c:18786 readelf.c:18814
+#: readelf.c:18833
msgid "Access"
msgstr "ПриÑтуп"
-#: readelf.c:17839 readelf.c:17869
+#: readelf.c:18215 readelf.c:18245
msgid "Value"
msgstr "ВредноÑÑ‚"
-#: readelf.c:17866 readelf.c:18437
+#: readelf.c:18242 readelf.c:18812
#, c-format
msgid " Local entries:\n"
msgstr " МеÑни подаци:\n"
-#: readelf.c:17948 readelf.c:18656
+#: readelf.c:18324 readelf.c:19031
msgid "liblist section data"
msgstr "подаци одељка библÑпиÑка"
-#: readelf.c:17951
+#: readelf.c:18327
#, c-format
msgid ""
"\n"
@@ -10876,37 +11047,37 @@ msgstr[2] ""
"\n"
"Одељак „.liblist“ Ñадржи %lu уноÑа:\n"
-#: readelf.c:17955
+#: readelf.c:18331
msgid " Library Time Stamp Checksum Version Flags\n"
msgstr " Библиотека ВременÑка ознака Сума пров. Издање Опције\n"
-#: readelf.c:17981
+#: readelf.c:18357
#, c-format
msgid "<corrupt: %9ld>"
msgstr "<оштећено: %9ld>"
-#: readelf.c:17986
+#: readelf.c:18362
msgid " NONE"
msgstr " ÐИШТÐ"
-#: readelf.c:18037
+#: readelf.c:18412
msgid "No MIPS_OPTIONS header found\n"
msgstr "ÐиÑам нашао „MIPS_OPTIONS“ заглавље\n"
-#: readelf.c:18043
+#: readelf.c:18418
msgid "The MIPS options section is too small.\n"
msgstr "Одељак „MIPS“ опција је премали.\n"
-#: readelf.c:18048
+#: readelf.c:18423
msgid "options"
msgstr "опције"
-#: readelf.c:18067
+#: readelf.c:18442
#, c-format
msgid "Invalid size (%u) for MIPS option\n"
msgstr "ÐеиÑправна величина (%u) за „MIPS“ опцију\n"
-#: readelf.c:18076
+#: readelf.c:18451
#, c-format
msgid ""
"\n"
@@ -10924,28 +11095,28 @@ msgstr[2] ""
"\n"
"Одељак „%s“ Ñадржи %d уноÑа:\n"
-#: readelf.c:18114 readelf.c:18146
+#: readelf.c:18489 readelf.c:18521
msgid "Truncated MIPS REGINFO option\n"
msgstr "Скраћена „MIPS REGINFO“ опција\n"
-#: readelf.c:18282
+#: readelf.c:18657
msgid "conflict list found without a dynamic symbol table\n"
msgstr "пронађен је Ñукобљавајући ÑпиÑак без динамичке табеле Ñимбола\n"
-#: readelf.c:18290
+#: readelf.c:18665
#, c-format
msgid "Overlarge number of conflicts detected: %lx\n"
msgstr "Превелик број Ñукоба је откривен: %lx\n"
-#: readelf.c:18298
+#: readelf.c:18673
msgid "Out of memory allocating space for dynamic conflicts\n"
msgstr "ПонеÑтало је меморије за време додељивања проÑтора за динамичке Ñукобе\n"
-#: readelf.c:18308 readelf.c:18326
+#: readelf.c:18683 readelf.c:18701
msgid "conflict"
msgstr "Ñукоб"
-#: readelf.c:18339
+#: readelf.c:18714
#, c-format
msgid ""
"\n"
@@ -10963,31 +11134,31 @@ msgstr[2] ""
"\n"
"Одељак „.conflict“ Ñадржи %lu уноÑа:\n"
-#: readelf.c:18343
+#: readelf.c:18718
msgid " Num: Index Value Name"
msgstr " Број: Ð˜Ð½Ð´ÐµÐºÑ Ð’Ñ€Ð´Ð½ÑÑ‚ Ðазив"
-#: readelf.c:18350
+#: readelf.c:18725
#, c-format
msgid "<corrupt symbol index>"
msgstr "<оштећен Ð¸Ð½Ð´ÐµÐºÑ Ñимбола>"
-#: readelf.c:18361 readelf.c:18487 readelf.c:18575
+#: readelf.c:18736 readelf.c:18862 readelf.c:18950
#, c-format
msgid "<corrupt: %14ld>"
msgstr "<оштећено: %14ld>"
-#: readelf.c:18384
+#: readelf.c:18759
#, c-format
msgid "The GOT symbol offset (%lu) is greater than the symbol table size (%lu)\n"
msgstr "Померај „GOT“ Ñимбола (%lu) је већи од величине табеле Ñимбола (%lu)\n"
-#: readelf.c:18393
+#: readelf.c:18768
#, c-format
msgid "Too many GOT symbols: %lu\n"
msgstr "Превише „GOT“ Ñимбола: %lu\n"
-#: readelf.c:18404
+#: readelf.c:18779
#, c-format
msgid ""
"\n"
@@ -10996,92 +11167,92 @@ msgstr ""
"\n"
"Главни ТОП:\n"
-#: readelf.c:18410
+#: readelf.c:18785
#, c-format
msgid " %*s %10s %*s Purpose\n"
msgstr " %*s %10s %*s Ñврха\n"
-#: readelf.c:18412 readelf.c:18440 readelf.c:18459 readelf.c:18541
-#: readelf.c:18551
+#: readelf.c:18787 readelf.c:18815 readelf.c:18834 readelf.c:18916
+#: readelf.c:18926
msgid "Initial"
msgstr "Почетно"
-#: readelf.c:18414
+#: readelf.c:18789
#, c-format
msgid " Lazy resolver\n"
msgstr " Лењи решавач\n"
-#: readelf.c:18429
+#: readelf.c:18804
#, c-format
msgid " Module pointer (GNU extension)\n"
msgstr " Показивач модула (Гну проширење)\n"
-#: readelf.c:18455
+#: readelf.c:18830
#, c-format
msgid " Global entries:\n"
msgstr " Општи подаци:\n"
-#: readelf.c:18460 readelf.c:18552
+#: readelf.c:18835 readelf.c:18927
msgid "Sym.Val."
msgstr "Сим.Вред."
#. Note for translators: "Ndx" = abbreviated form of "Index".
-#: readelf.c:18463 readelf.c:18552
+#: readelf.c:18838 readelf.c:18927
msgid "Ndx"
msgstr "Инд"
-#: readelf.c:18463 readelf.c:18552
+#: readelf.c:18838 readelf.c:18927
msgid "Name"
msgstr "Ðазив"
-#: readelf.c:18473
+#: readelf.c:18848
#, c-format
msgid "<no dynamic symbols>"
msgstr "<нема динамичких Ñимбола>"
-#: readelf.c:18490
+#: readelf.c:18865
#, c-format
msgid "<symbol index %lu exceeds number of dynamic symbols>"
msgstr "<Ð¸Ð½Ð´ÐµÐºÑ Ñимбола %lu превазилази број динамичких Ñимбола>"
-#: readelf.c:18531
+#: readelf.c:18906
msgid "Procedure Linkage Table data"
msgstr "Подаци табеле повезивања поÑтупка"
-#: readelf.c:18540
+#: readelf.c:18915
#, c-format
msgid " %*s %*s Purpose\n"
msgstr " %*s %*s Ñврха\n"
-#: readelf.c:18543
+#: readelf.c:18918
#, c-format
msgid " PLT lazy resolver\n"
msgstr " ТПП лењи решавач\n"
-#: readelf.c:18545
+#: readelf.c:18920
#, c-format
msgid " Module pointer\n"
msgstr " Показивач модула\n"
-#: readelf.c:18548
+#: readelf.c:18923
#, c-format
msgid " Entries:\n"
msgstr " УноÑи:\n"
-#: readelf.c:18562
+#: readelf.c:18937
#, c-format
msgid "<corrupt symbol index: %lu>"
msgstr "<оштећен Ð¸Ð½Ð´ÐµÐºÑ Ñимбола: %lu>"
-#: readelf.c:18601
+#: readelf.c:18976
msgid "NDS32 elf flags section"
msgstr "одељак NDS32 елф опција"
-#: readelf.c:18667
+#: readelf.c:19042
msgid "liblist string table"
msgstr "табела ниÑке библÑпиÑка"
-#: readelf.c:18679
+#: readelf.c:19054
#, c-format
msgid ""
"\n"
@@ -11099,436 +11270,453 @@ msgstr[2] ""
"\n"
"Одељак ÑпиÑка библиотека „%s“ Ñадржи %lu уноÑа:\n"
-#: readelf.c:18685
+#: readelf.c:19060
msgid " Library Time Stamp Checksum Version Flags"
msgstr " Библиотека ВременÑка ознака Сума првре Издање Опције"
-#: readelf.c:18735
+#: readelf.c:19110
msgid "NT_AUXV (auxiliary vector)"
msgstr "NT_AUXV (помоћни вектор)"
-#: readelf.c:18737
+#: readelf.c:19112
msgid "NT_PRSTATUS (prstatus structure)"
msgstr "NT_PRSTATUS (Ñтруктура прÑтања)"
-#: readelf.c:18739
+#: readelf.c:19114
msgid "NT_FPREGSET (floating point registers)"
msgstr "NT_FPREGSET (региÑтри покретног зареза)"
-#: readelf.c:18741
+#: readelf.c:19116
msgid "NT_PRPSINFO (prpsinfo structure)"
msgstr "NT_PRPSINFO (Ñтруктура прпÑподатака)"
-#: readelf.c:18743
+#: readelf.c:19118
msgid "NT_TASKSTRUCT (task structure)"
msgstr "NT_TASKSTRUCT (Ñтруктура задатка)"
-#: readelf.c:18745
+#: readelf.c:19120
msgid "NT_GDB_TDESC (GDB XML target description)"
msgstr "NT_GDB_TDESC (Ð¾Ð¿Ð¸Ñ â€žGDB XML“ мете)"
-#: readelf.c:18747
+#: readelf.c:19122
msgid "NT_PRXFPREG (user_xfpregs structure)"
msgstr "NT_PRXFPREG (Ñтруктура кориÑничког_икÑфпрегÑа)"
-#: readelf.c:18749
+#: readelf.c:19124
msgid "NT_PPC_VMX (ppc Altivec registers)"
msgstr "NT_PPC_VMX (ппц Ðлтивек региÑтри)"
-#: readelf.c:18751
+#: readelf.c:19126
msgid "NT_PPC_VSX (ppc VSX registers)"
msgstr "NT_PPC_VSX (ппц Ð’Ð¡Ð˜ÐºÑ Ñ€ÐµÐ³Ð¸Ñтри)"
-#: readelf.c:18753
+#: readelf.c:19128
msgid "NT_PPC_TAR (ppc TAR register)"
msgstr "NT_PPC_TAR (ппц „TAR“ региÑтар)"
-#: readelf.c:18755
+#: readelf.c:19130
msgid "NT_PPC_PPR (ppc PPR register)"
msgstr "NT_PPC_PPR (ппц „PPR“ региÑтар)"
-#: readelf.c:18757
+#: readelf.c:19132
msgid "NT_PPC_DSCR (ppc DSCR register)"
msgstr "NT_PPC_DSCR (ппц „DSCR“ региÑтар)"
-#: readelf.c:18759
+#: readelf.c:19134
msgid "NT_PPC_EBB (ppc EBB registers)"
msgstr "NT_PPC_EBB (ппц „EBB“ региÑтри)"
-#: readelf.c:18761
+#: readelf.c:19136
msgid "NT_PPC_PMU (ppc PMU registers)"
msgstr "NT_PPC_PMU (ппц „PMU“ региÑтри)"
-#: readelf.c:18763
+#: readelf.c:19138
msgid "NT_PPC_TM_CGPR (ppc checkpointed GPR registers)"
msgstr "NT_PPC_TM_CGPR (ппц проверени „GPR“ региÑтри)"
-#: readelf.c:18765
+#: readelf.c:19140
msgid "NT_PPC_TM_CFPR (ppc checkpointed floating point registers)"
msgstr "NT_PPC_TM_CFPR (ппц проверени региÑтри покретне тачке)"
-#: readelf.c:18767
+#: readelf.c:19142
msgid "NT_PPC_TM_CVMX (ppc checkpointed Altivec registers)"
msgstr "NT_PPC_TM_CVMX (ппц проверени „Altivec“ региÑтри)"
-#: readelf.c:18769
+#: readelf.c:19144
msgid "NT_PPC_TM_CVSX (ppc checkpointed VSX registers)"
msgstr "NT_PPC_TM_CVSX (ппц проверени „VSX“ региÑтри)"
-#: readelf.c:18771
+#: readelf.c:19146
msgid "NT_PPC_TM_SPR (ppc TM special purpose registers)"
msgstr "NT_PPC_TM_SPR (ппц „TM“ региÑтри поÑебне намене)"
-#: readelf.c:18773
+#: readelf.c:19148
msgid "NT_PPC_TM_CTAR (ppc checkpointed TAR register)"
msgstr "NT_PPC_TM_CTAR (ппц проверени „TAR“ региÑтар)"
-#: readelf.c:18775
+#: readelf.c:19150
msgid "NT_PPC_TM_CPPR (ppc checkpointed PPR register)"
msgstr "NT_PPC_TM_CPPR (ппц проверени „PPR“ региÑтар)"
-#: readelf.c:18777
+#: readelf.c:19152
msgid "NT_PPC_TM_CDSCR (ppc checkpointed DSCR register)"
msgstr "NT_PPC_TM_CDSCR (ппц проверени „DSCR“ региÑтар)"
-#: readelf.c:18779
+#: readelf.c:19154
msgid "NT_386_TLS (x86 TLS information)"
msgstr "NT_386_TLS (x86 ТЛС подаци)"
-#: readelf.c:18781
+#: readelf.c:19156
msgid "NT_386_IOPERM (x86 I/O permissions)"
msgstr "NT_386_IOPERM (x86 У/И овлашћења)"
-#: readelf.c:18783
+#: readelf.c:19158
msgid "NT_X86_XSTATE (x86 XSAVE extended state)"
msgstr "NT_X86_XSTATE (x86 XSAVE проширено Ñтање)"
-#: readelf.c:18785
+#: readelf.c:19160
msgid "NT_X86_CET (x86 CET state)"
msgstr "NT_X86_CET (x86 CET Ñтање)"
-#: readelf.c:18787
+#: readelf.c:19162
msgid "NT_S390_HIGH_GPRS (s390 upper register halves)"
msgstr "NT_S390_HIGH_GPRS (s390 горње половине региÑтра)"
-#: readelf.c:18789
+#: readelf.c:19164
msgid "NT_S390_TIMER (s390 timer register)"
msgstr "NT_S390_TIMER (s390 временÑки региÑтар)"
-#: readelf.c:18791
+#: readelf.c:19166
msgid "NT_S390_TODCMP (s390 TOD comparator register)"
msgstr "NT_S390_TODCMP (s390 ТОД региÑтар упоређивача)"
-#: readelf.c:18793
+#: readelf.c:19168
msgid "NT_S390_TODPREG (s390 TOD programmable register)"
msgstr "NT_S390_TODPREG (s390 ТОД програмљив региÑтар)"
-#: readelf.c:18795
+#: readelf.c:19170
msgid "NT_S390_CTRS (s390 control registers)"
msgstr "NT_S390_CTRS (s390 региÑтри управљања)"
-#: readelf.c:18797
+#: readelf.c:19172
msgid "NT_S390_PREFIX (s390 prefix register)"
msgstr "NT_S390_PREFIX (s390 региÑтар префикÑа)"
-#: readelf.c:18799
+#: readelf.c:19174
msgid "NT_S390_LAST_BREAK (s390 last breaking event address)"
msgstr "NT_S390_LAST_BREAK (s390 адреÑа поÑледњег догађаја прекида)"
-#: readelf.c:18801
+#: readelf.c:19176
msgid "NT_S390_SYSTEM_CALL (s390 system call restart data)"
msgstr "NT_S390_SYSTEM_CALL (s390 подаци поновног покретања ÑиÑтемÑког позива)"
-#: readelf.c:18803
+#: readelf.c:19178
msgid "NT_S390_TDB (s390 transaction diagnostic block)"
msgstr "NT_S390_TDB (s390 блок дијагнозе преноÑа)"
-#: readelf.c:18805
+#: readelf.c:19180
msgid "NT_S390_VXRS_LOW (s390 vector registers 0-15 upper half)"
msgstr "NT_S390_VXRS_LOW (региÑтри „s390“ вектора 0-15 горње половине)"
-#: readelf.c:18807
+#: readelf.c:19182
msgid "NT_S390_VXRS_HIGH (s390 vector registers 16-31)"
msgstr "NT_S390_VXRS_HIGH (региÑтри „s390“ вектора 16-31)"
-#: readelf.c:18809
+#: readelf.c:19184
msgid "NT_S390_GS_CB (s390 guarded-storage registers)"
msgstr "NT_S390_GS_CB (региÑтри „s390“ чуваног Ñмештаја)"
-#: readelf.c:18811
+#: readelf.c:19186
msgid "NT_S390_GS_BC (s390 guarded-storage broadcast control)"
msgstr "NT_S390_GS_BC (контрола емитовања „s390“ чуваног Ñмештаја)"
-#: readelf.c:18813
+#: readelf.c:19188
msgid "NT_ARM_VFP (arm VFP registers)"
msgstr "NT_ARM_VFP (арм ВФП региÑтри)"
-#: readelf.c:18815
+#: readelf.c:19190
msgid "NT_ARM_TLS (AArch TLS registers)"
msgstr "NT_ARM_TLS (ÐÐрх ТЛС региÑтри)"
-#: readelf.c:18817
+#: readelf.c:19192
msgid "NT_ARM_HW_BREAK (AArch hardware breakpoint registers)"
msgstr "NT_ARM_HW_BREAK (ÐÐрх региÑтри тачке прекида хардвера)"
-#: readelf.c:18819
+#: readelf.c:19194
msgid "NT_ARM_HW_WATCH (AArch hardware watchpoint registers)"
msgstr "NT_ARM_HW_WATCH (ÐÐрх региÑтри тачке оÑматрања хардвера)"
-#: readelf.c:18821
+#: readelf.c:19196
msgid "NT_ARM_SVE (AArch SVE registers)"
msgstr "NT_ARM_SVE (ÐÐрх SVE региÑтри)"
-#: readelf.c:18823
+#: readelf.c:19198
msgid "NT_ARM_PAC_MASK (AArch pointer authentication code masks)"
msgstr "NT_ARM_PAC_MASK (ÐÐрх показивача маÑке кода потврђивања идентитета)"
-#: readelf.c:18825
+#: readelf.c:19200
+msgid "NT_ARM_PACA_KEYS (ARM pointer authentication address keys)"
+msgstr "NT_ARM_PACA_KEYS (кључеви адреÑе потврђивања идентитета ARM показивача)"
+
+#: readelf.c:19202
+msgid "NT_ARM_PACG_KEYS (ARM pointer authentication generic keys)"
+msgstr "NT_ARM_PACG_KEYS (општи кључеви потврђивања идентитета ARM показивача)"
+
+#: readelf.c:19204
msgid "NT_ARM_TAGGED_ADDR_CTRL (AArch tagged address control)"
msgstr "NT_ARM_TAGGED_ADDR_CTRL (ÐÐрх означена контрола адреÑе)"
-#: readelf.c:18827
+#: readelf.c:19206
+msgid "NT_ARM_PAC_ENABLED_KEYS (AArch64 pointer authentication enabled keys)"
+msgstr "NT_ARM_PAC_ENABLED_KEYS (укључени кључеви потврђивања идентитета AArch64 показивача)"
+
+#: readelf.c:19208
msgid "NT_ARC_V2 (ARC HS accumulator/extra registers)"
msgstr "NT_ARC_V2 („ARC HS“ акумулатор/додатни региÑтри)"
-#: readelf.c:18829
+#: readelf.c:19210
msgid "NT_RISCV_CSR (RISC-V control and status registers)"
msgstr "NT_RISCV_CSR (региÑтри „RISC-V“ контроле и Ñтања)"
-#: readelf.c:18831
+#: readelf.c:19212
msgid "NT_PSTATUS (pstatus structure)"
msgstr "NT_PSTATUS (Ñтруктура пÑÑтања)"
-#: readelf.c:18833
+#: readelf.c:19214
msgid "NT_FPREGS (floating point registers)"
msgstr "NT_FPREGS (региÑтри покретног зареза)"
-#: readelf.c:18835
+#: readelf.c:19216
msgid "NT_PSINFO (psinfo structure)"
msgstr "NT_PSINFO (Ñтруктура пÑподатака)"
-#: readelf.c:18837
+#: readelf.c:19218
msgid "NT_LWPSTATUS (lwpstatus_t structure)"
msgstr "NT_LWPSTATUS (Ñтруктура лвпÑÑтања_Ñ‚)"
-#: readelf.c:18839
+#: readelf.c:19220
msgid "NT_LWPSINFO (lwpsinfo_t structure)"
msgstr "NT_LWPSINFO (Ñтруктура лвпÑподатака_Ñ‚)"
-#: readelf.c:18841
+#: readelf.c:19222
msgid "NT_WIN32PSTATUS (win32_pstatus structure)"
msgstr "NT_WIN32PSTATUS (Ñтруктура win32_пÑÑтања)"
-#: readelf.c:18843
+#: readelf.c:19224
msgid "NT_SIGINFO (siginfo_t data)"
msgstr "NT_SIGINFO (Ñигинфо_Ñ‚ подаци)"
-#: readelf.c:18845
+#: readelf.c:19226
msgid "NT_FILE (mapped files)"
msgstr "NT_FILE (мапиране датотеке)"
-#: readelf.c:18847
-msgid "NT_MEMTAG (memory tags)"
-msgstr "NT_MEMTAG (меморијÑке ознаке)"
-
-#: readelf.c:18855
+#: readelf.c:19234
msgid "NT_VERSION (version)"
msgstr "NT_VERSION (издање)"
-#: readelf.c:18857
+#: readelf.c:19236
msgid "NT_ARCH (architecture)"
msgstr "NT_ARCH (архитектура)"
-#: readelf.c:18859
+#: readelf.c:19238
msgid "OPEN"
msgstr "OPEN"
-#: readelf.c:18861
+#: readelf.c:19240
msgid "func"
msgstr "функција"
-#: readelf.c:18863
+#: readelf.c:19242
msgid "GO BUILDID"
msgstr "GO BUILDID"
-#: readelf.c:18868 readelf.c:18987 readelf.c:19689 readelf.c:19857
-#: readelf.c:19934 readelf.c:20051
+#: readelf.c:19244
+msgid "FDO_PACKAGING_METADATA"
+msgstr "FDO_МЕТÐПОДÐЦИ_ПÐКОВÐЊÐ"
+
+#: readelf.c:19249 readelf.c:19368 readelf.c:20109 readelf.c:20277
+#: readelf.c:20374 readelf.c:20502
#, c-format
msgid "Unknown note type: (0x%08x)"
msgstr "Ðепозната врÑта напомене: (0x%08x)"
-#: readelf.c:18889
+#: readelf.c:19270
#, c-format
msgid " Cannot decode 64-bit note in 32-bit build\n"
msgstr " Ðе могу да декодирам 64-битну напомену у 32-битној изградњи\n"
-#: readelf.c:18897
+#: readelf.c:19278
msgid " Malformed note - too short for header\n"
msgstr " Лоша напомена – прекратка за заглавље\n"
-#: readelf.c:18906
+#: readelf.c:19287
msgid " Malformed note - does not end with \\0\n"
msgstr " Лоша напомена – не завршава Ñе на \\0\n"
-#: readelf.c:18919
+#: readelf.c:19300
msgid " Malformed note - too short for supplied file count\n"
msgstr " Лоша напомена – прекратка за доÑтављени број датотека\n"
-#: readelf.c:18923
+#: readelf.c:19304
#, c-format
msgid " Page size: "
msgstr " Величина Ñтранице: "
-#: readelf.c:18927
+#: readelf.c:19308
#, c-format
msgid " %*s%*s%*s\n"
msgstr " %*s%*s%*s\n"
-#: readelf.c:18928
+#: readelf.c:19309
msgid "Start"
msgstr "Почетак"
-#: readelf.c:18929
+#: readelf.c:19310
msgid "End"
msgstr "Крај"
-#: readelf.c:18930
+#: readelf.c:19311
msgid "Page Offset"
msgstr "Померај Ñтранице"
-#: readelf.c:18938
+#: readelf.c:19319
msgid " Malformed note - filenames end too early\n"
msgstr " Лоша напомена – називи датотека Ñе прерано завршавају\n"
-#: readelf.c:18970
+#: readelf.c:19351
msgid "NT_GNU_ABI_TAG (ABI version tag)"
msgstr "NT_GNU_ABI_TAG (ознака ÐБИ издања)"
-#: readelf.c:18972
+#: readelf.c:19353
msgid "NT_GNU_HWCAP (DSO-supplied software HWCAP info)"
msgstr "NT_GNU_HWCAP (ÑофтверÑки „HWCAP“ подаци које доÑтавља ДСО)"
-#: readelf.c:18974
+#: readelf.c:19355
msgid "NT_GNU_BUILD_ID (unique build ID bitstring)"
msgstr "NT_GNU_BUILD_ID (јединÑтвена битниÑка ИБ-а изградње)"
-#: readelf.c:18976
+#: readelf.c:19357
msgid "NT_GNU_GOLD_VERSION (gold version)"
msgstr "NT_GNU_GOLD_VERSION (златно издање)"
-#: readelf.c:18978
+#: readelf.c:19359
msgid "NT_GNU_PROPERTY_TYPE_0"
msgstr "NT_GNU_PROPERTY_TYPE_0"
-#: readelf.c:18980
+#: readelf.c:19361
msgid "NT_GNU_BUILD_ATTRIBUTE_OPEN"
msgstr "NT_GNU_BUILD_ATTRIBUTE_OPEN"
-#: readelf.c:18982
+#: readelf.c:19363
msgid "NT_GNU_BUILD_ATTRIBUTE_FUNC"
msgstr "NT_GNU_BUILD_ATTRIBUTE_FUNC"
-#: readelf.c:19071 readelf.c:19202 readelf.c:19239
+#: readelf.c:19452 readelf.c:19583 readelf.c:19620
#, c-format
msgid "<None>"
msgstr "<Ðишта>"
-#: readelf.c:19329
+#: readelf.c:19732
#, c-format
msgid " Properties: "
msgstr " СвојÑтва: "
-#: readelf.c:19333
+#: readelf.c:19736
#, c-format
msgid "<corrupt GNU_PROPERTY_TYPE, size = %#lx>\n"
msgstr "<оштећено „GNU_PROPERTY_TYPE“, величина = %#lx>\n"
-#: readelf.c:19345
+#: readelf.c:19748
#, c-format
msgid "<corrupt descsz: %#lx>\n"
msgstr "<оштећена вел_опиÑа: %#lx>\n"
-#: readelf.c:19356
+#: readelf.c:19759
#, c-format
msgid "<corrupt type (%#x) datasz: %#x>\n"
msgstr "<оштећена врÑта (%#x) вел_података: %#x>\n"
-#: readelf.c:19378 readelf.c:19432 readelf.c:19454
+#: readelf.c:19781 readelf.c:19835 readelf.c:19857
#, c-format
msgid "x86 ISA used: <corrupt length: %#x> "
msgstr "„x86 ISA“ је коришћено: <оштећена дужина: %#x> "
-#: readelf.c:19389 readelf.c:19443 readelf.c:19465
+#: readelf.c:19792 readelf.c:19846 readelf.c:19868
#, c-format
msgid "x86 ISA needed: <corrupt length: %#x> "
msgstr "„x86 ISA“ је потребно: <оштећена дужина: %#x> "
-#: readelf.c:19400
+#: readelf.c:19803
#, c-format
msgid "x86 feature: <corrupt length: %#x> "
msgstr "„x86“ функција: <оштећена дужина: %#x> "
-#: readelf.c:19411
+#: readelf.c:19814
#, c-format
msgid "x86 feature used: <corrupt length: %#x> "
msgstr "„x86“ функција је коришћена: <оштећена дужина: %#x> "
-#: readelf.c:19422
+#: readelf.c:19825
#, c-format
msgid "x86 feature needed: <corrupt length: %#x> "
msgstr "„x86“ функција је потребна: <оштећена дужина: %#x> "
-#: readelf.c:19484 readelf.c:19498 readelf.c:19506 readelf.c:19520
+#: readelf.c:19887 readelf.c:19901 readelf.c:19909 readelf.c:19940
#, c-format
msgid "<corrupt length: %#x> "
msgstr "<оштећена дужина: %#x> "
-#: readelf.c:19496
+#: readelf.c:19899
#, c-format
msgid "stack size: "
msgstr "величина Ñпремника: "
-#: readelf.c:19516
+#: readelf.c:19922
+#, c-format
+msgid "1_needed: <corrupt length: %#x> "
+msgstr "„1“ је потребно: <оштећена дужина: %#x> "
+
+#: readelf.c:19936
#, c-format
msgid "UINT32_AND (%#x): "
msgstr "UINT32_AND (%#x): "
-#: readelf.c:19518
+#: readelf.c:19938
#, c-format
msgid "UINT32_OR (%#x): "
msgstr "UINT32_OR (%#x): "
-#: readelf.c:19530
+#: readelf.c:19950
#, c-format
msgid "<unknown type %#x data: "
msgstr "<непозната врÑта %#x података: "
-#: readelf.c:19532
+#: readelf.c:19952
#, c-format
msgid "<processor-specific type %#x data: "
msgstr "<процеÑору Ñпецифичне врÑте %#x подаци: "
-#: readelf.c:19534
+#: readelf.c:19954
#, c-format
msgid "<application-specific type %#x data: "
msgstr "<програму Ñпецифичне врÑте %#x подаци: "
-#: readelf.c:19563
+#: readelf.c:19983
#, c-format
msgid " Build ID: "
msgstr " ИБ изградње: "
-#: readelf.c:19578
+#: readelf.c:19998
#, c-format
msgid " <corrupt GNU_ABI_TAG>\n"
msgstr " <оштећено „GNU_ABI_TAG“>\n"
-#: readelf.c:19615
+#: readelf.c:20035
#, c-format
msgid " OS: %s, ABI: %ld.%ld.%ld\n"
msgstr " ОС: %s, ÐБИ: %ld.%ld.%ld\n"
-#: readelf.c:19624
+#: readelf.c:20044
#, c-format
msgid " Version: "
msgstr " Издање: "
@@ -11538,292 +11726,317 @@ msgstr " Издање: "
#. is a series of entries, where each entry is a single byte followed
#. by a nul terminated string. The byte gives the bit number to test
#. if enabled in the bitmask.
-#: readelf.c:19640
+#: readelf.c:20060
#, c-format
msgid " Hardware Capabilities: "
msgstr " ХардверÑке могућноÑти: "
-#: readelf.c:19643
+#: readelf.c:20063
msgid "<corrupt GNU_HWCAP>\n"
msgstr "<оштећено „GNU_HWCAP“>\n"
-#: readelf.c:19648
+#: readelf.c:20068
#, c-format
msgid "num entries: %ld, enabled mask: %lx\n"
msgstr "број уноÑа: %ld, укључена маÑка: %lx\n"
-#: readelf.c:19664
+#: readelf.c:20084
#, c-format
msgid " Description data: "
msgstr " Подаци опиÑа: "
-#: readelf.c:19682
+#: readelf.c:20102
msgid "Alignment of 8-byte objects"
msgstr "Поравнање 8-бајтних објеката"
-#: readelf.c:19683
+#: readelf.c:20103
msgid "Sizeof double and long double"
msgstr "Величина дубла или дугог дубла"
-#: readelf.c:19684
+#: readelf.c:20104
msgid "Type of FPU support needed"
msgstr "Ð’Ñ€Ñта „FPU“ подршке је потребна"
-#: readelf.c:19685
+#: readelf.c:20105
msgid "Use of SIMD instructions"
msgstr "Употреба „SIMD“ инÑтрукција"
-#: readelf.c:19686
+#: readelf.c:20106
msgid "Use of cache"
msgstr "Употреба оÑтаве"
-#: readelf.c:19687
+#: readelf.c:20107
msgid "Use of MMU"
msgstr "Употреба „MMU“"
-#: readelf.c:19723
+#: readelf.c:20143
#, c-format
msgid "4-bytes\n"
msgstr "4-бајта\n"
-#: readelf.c:19724
+#: readelf.c:20144
#, c-format
msgid "8-bytes\n"
msgstr "8-бајта\n"
-#: readelf.c:19731
+#: readelf.c:20151
#, c-format
msgid "FPU-2.0\n"
msgstr "FPU-2.0\n"
-#: readelf.c:19732
+#: readelf.c:20152
#, c-format
msgid "FPU-3.0\n"
msgstr "FPU-3.0\n"
-#: readelf.c:19741
+#: readelf.c:20161
#, c-format
msgid "yes\n"
msgstr "да\n"
-#: readelf.c:19751
+#: readelf.c:20171
#, c-format
msgid "unknown value: %x\n"
msgstr "непозната вредноÑÑ‚: %x\n"
-#: readelf.c:19807
+#: readelf.c:20227
msgid "NT_THRMISC (thrmisc structure)"
msgstr "NT_THRMISC („thrmisc“ Ñтруктура)"
-#: readelf.c:19809
+#: readelf.c:20229
msgid "NT_PROCSTAT_PROC (proc data)"
msgstr "NT_PROCSTAT_PROC (подаци процеÑора)"
-#: readelf.c:19811
+#: readelf.c:20231
msgid "NT_PROCSTAT_FILES (files data)"
msgstr "NT_PROCSTAT_FILES (подаци датотека)"
-#: readelf.c:19813
+#: readelf.c:20233
msgid "NT_PROCSTAT_VMMAP (vmmap data)"
msgstr "NT_PROCSTAT_VMMAP („vmmap“ подаци)"
-#: readelf.c:19815
+#: readelf.c:20235
msgid "NT_PROCSTAT_GROUPS (groups data)"
msgstr "NT_PROCSTAT_GROUPS (подаци група)"
-#: readelf.c:19817
+#: readelf.c:20237
msgid "NT_PROCSTAT_UMASK (umask data)"
msgstr "NT_PROCSTAT_UMASK („umask“ подаци)"
-#: readelf.c:19819
+#: readelf.c:20239
msgid "NT_PROCSTAT_RLIMIT (rlimit data)"
msgstr "NT_PROCSTAT_RLIMIT („rlimit“ подаци)"
-#: readelf.c:19821
+#: readelf.c:20241
msgid "NT_PROCSTAT_OSREL (osreldate data)"
msgstr "NT_PROCSTAT_OSREL („osreldate“ подаци)"
-#: readelf.c:19823
+#: readelf.c:20243
msgid "NT_PROCSTAT_PSSTRINGS (ps_strings data)"
msgstr "NT_PROCSTAT_PSSTRINGS („ps_strings“ подаци)"
-#: readelf.c:19825
+#: readelf.c:20245
msgid "NT_PROCSTAT_AUXV (auxv data)"
msgstr "NT_PROCSTAT_AUXV („auxv“ подаци)"
-#: readelf.c:19827
+#: readelf.c:20247
msgid "NT_PTLWPINFO (ptrace_lwpinfo structure)"
msgstr "NT_PTLWPINFO („ptrace_lwpinfo“ Ñтруктура)"
#. NetBSD core "procinfo" structure.
-#: readelf.c:19841
+#: readelf.c:20261
msgid "NetBSD procinfo structure"
msgstr "ÐетБСД прокинфо Ñтруктура"
-#: readelf.c:19844
+#: readelf.c:20264
msgid "NetBSD ELF auxiliary vector data"
msgstr "„NetBSD ELF“ подаци помоћног вектора"
-#: readelf.c:19847
+#: readelf.c:20267
msgid "PT_LWPSTATUS (ptrace_lwpstatus structure)"
msgstr "PT_LWPSTATUS (Ñтруктура „ptrace_lwpstatus“)"
-#: readelf.c:19876 readelf.c:19893 readelf.c:19907
+#: readelf.c:20296 readelf.c:20313 readelf.c:20327
msgid "PT_GETREGS (reg structure)"
msgstr "PT_GETREGS (рег Ñтруктура)"
-#: readelf.c:19878 readelf.c:19895 readelf.c:19909
+#: readelf.c:20298 readelf.c:20315 readelf.c:20329
msgid "PT_GETFPREGS (fpreg structure)"
msgstr "PT_GETFPPREGS (фпрег Ñтруктура)"
-#: readelf.c:19891
+#: readelf.c:20311
msgid "PT___GETREGS40 (old reg structure)"
msgstr "PT___GETREGS40 (Ñтара „reg“ Ñтруктура)"
-#: readelf.c:19928
+#: readelf.c:20346
+msgid "OpenBSD procinfo structure"
+msgstr "Структура података процеÑора OpenBSD-а"
+
+#: readelf.c:20348
+msgid "OpenBSD ELF auxiliary vector data"
+msgstr "„OpenBSD ELF“ подаци помоћног вектора"
+
+#: readelf.c:20350
+msgid "OpenBSD regular registers"
+msgstr "„OpenBSD“ уобичајени региÑтри"
+
+#: readelf.c:20352
+msgid "OpenBSD floating point registers"
+msgstr "„OpenBSD“ региÑтри покретног зареза"
+
+#: readelf.c:20354
+msgid "OpenBSD window cookie"
+msgstr "„OpenBSD“ колачићи прозора"
+
+#: readelf.c:20368
msgid "NT_STAPSDT (SystemTap probe descriptors)"
msgstr "NT_STAPSDT (опиÑници СиÑтемТап иÑпитивања)"
-#: readelf.c:19996
+#: readelf.c:20436
#, c-format
msgid " Provider: %s\n"
msgstr " ДоÑтављач: %s\n"
-#: readelf.c:19997
+#: readelf.c:20437
#, c-format
msgid " Name: %s\n"
msgstr " Ðазив: %s\n"
-#: readelf.c:19998
+#: readelf.c:20438
#, c-format
msgid " Location: "
msgstr " МеÑто: "
-#: readelf.c:20000
+#: readelf.c:20440
#, c-format
msgid ", Base: "
msgstr ", ОÑнова: "
-#: readelf.c:20002
+#: readelf.c:20442
#, c-format
msgid ", Semaphore: "
msgstr ", Семафор: "
-#: readelf.c:20005
+#: readelf.c:20445
#, c-format
msgid " Arguments: %s\n"
msgstr " Ðргументи: %s\n"
-#: readelf.c:20010
+#: readelf.c:20450
#, c-format
msgid " <corrupt - note is too small>\n"
msgstr " <оштећено – напомена је премала>\n"
-#: readelf.c:20011
+#: readelf.c:20451
msgid "corrupt stapdt note - the data size is too small\n"
msgstr "оштећена „stapdt“ напомена – величина података је премала\n"
-#: readelf.c:20023
+#: readelf.c:20460
+#, c-format
+msgid " Packaging Metadata: %.*s\n"
+msgstr " Метаподаци паковања: %.*s\n"
+
+#: readelf.c:20474
msgid "NT_VMS_MHD (module header)"
msgstr "NT_VMS_MHD (заглавље модула)"
-#: readelf.c:20025
+#: readelf.c:20476
msgid "NT_VMS_LNM (language name)"
msgstr "NT_VMS_LNM (назив језика)"
-#: readelf.c:20027
+#: readelf.c:20478
msgid "NT_VMS_SRC (source files)"
msgstr "NT_VMS_SRC (изворне датотеке)"
-#: readelf.c:20031
+#: readelf.c:20482
msgid "NT_VMS_EIDC (consistency check)"
msgstr "NT_VMS_EIDC (провера доÑледноÑти)"
-#: readelf.c:20033
+#: readelf.c:20484
msgid "NT_VMS_FPMODE (FP mode)"
msgstr "NT_VMS_FPMODE (ФП режим)"
-#: readelf.c:20037
+#: readelf.c:20488
msgid "NT_VMS_IMGNAM (image name)"
msgstr "NT_VMS_IMGNAM (назив Ñлике)"
-#: readelf.c:20039
+#: readelf.c:20490
msgid "NT_VMS_IMGID (image id)"
msgstr "NT_VMS_IMGID (иб Ñлике)"
-#: readelf.c:20041
+#: readelf.c:20492
msgid "NT_VMS_LINKID (link id)"
msgstr "NT_VMS_LINKID (иб везе)"
-#: readelf.c:20043
+#: readelf.c:20494
msgid "NT_VMS_IMGBID (build id)"
msgstr "NT_VMS_IMGBID (иб изградње)"
-#: readelf.c:20045
+#: readelf.c:20496
msgid "NT_VMS_GSTNAM (sym table name)"
msgstr "NT_VMS_GSTNAM (назив табеле Ñимбола)"
-#: readelf.c:20072
+#: readelf.c:20523
#, c-format
msgid " Creation date : %.17s\n"
msgstr " Датум Ñтварања : %.17s\n"
-#: readelf.c:20073
+#: readelf.c:20524
#, c-format
msgid " Last patch date: %.17s\n"
msgstr " Датум поÑледње закрпе: %.17s\n"
-#: readelf.c:20076
+#: readelf.c:20527
#, c-format
msgid " Module name : %s\n"
msgstr " Ðазив модула : %s\n"
-#: readelf.c:20078
+#: readelf.c:20529
#, c-format
msgid " Module version : %s\n"
msgstr " Издање модула : %s\n"
-#: readelf.c:20080 readelf.c:20085
+#: readelf.c:20531 readelf.c:20536
#, c-format
msgid " Module version : <missing>\n"
msgstr " Издање модула : <недоÑтаје>\n"
-#: readelf.c:20084
+#: readelf.c:20535
#, c-format
msgid " Module name : <missing>\n"
msgstr " Ðазив модула : <недоÑтаје>\n"
-#: readelf.c:20090
+#: readelf.c:20541
#, c-format
msgid " Language: %.*s\n"
msgstr " Језик: %.*s\n"
-#: readelf.c:20095
+#: readelf.c:20546
#, c-format
msgid " Floating Point mode: "
msgstr " Режим покретног зареза: "
-#: readelf.c:20105
+#: readelf.c:20556
#, c-format
msgid " Link time: "
msgstr " Време везе: "
-#: readelf.c:20116
+#: readelf.c:20567
#, c-format
msgid " Patch time: "
msgstr " Време закрпе: "
-#: readelf.c:20130
+#: readelf.c:20581
#, c-format
msgid " Major id: %u, minor id: %u\n"
msgstr " Главни иб: %u, Ñпоредни иб: %u\n"
-#: readelf.c:20133
+#: readelf.c:20584
#, c-format
msgid " Last modified : "
msgstr " ПоÑледња измена : "
-#: readelf.c:20136
+#: readelf.c:20587
#, c-format
msgid ""
"\n"
@@ -11832,198 +12045,198 @@ msgstr ""
"\n"
" Опције везе : "
-#: readelf.c:20139
+#: readelf.c:20590
#, c-format
msgid " Header flags: 0x%08x\n"
msgstr " Опције заглавља: 0x%08x\n"
-#: readelf.c:20141
+#: readelf.c:20592
#, c-format
msgid " Image id : %.*s\n"
msgstr " ИБ Ñлике : %.*s\n"
-#: readelf.c:20146
+#: readelf.c:20597
#, c-format
msgid " Image name: %.*s\n"
msgstr " Ðазив Ñлике: %.*s\n"
-#: readelf.c:20150
+#: readelf.c:20601
#, c-format
msgid " Global symbol table name: %.*s\n"
msgstr " Ðазив опште табеле Ñимбола: %.*s\n"
-#: readelf.c:20154
+#: readelf.c:20605
#, c-format
msgid " Image id: %.*s\n"
msgstr " ИБ Ñлике: %.*s\n"
-#: readelf.c:20158
+#: readelf.c:20609
#, c-format
msgid " Linker id: %.*s\n"
msgstr " Иб Ñвезивача: %.*s\n"
-#: readelf.c:20168
+#: readelf.c:20619
#, c-format
msgid " <corrupt - data size is too small>\n"
msgstr " <оштећено – величина података је премала>\n"
-#: readelf.c:20169
+#: readelf.c:20620
msgid "corrupt IA64 note: data size is too small\n"
msgstr "оштећена „IA64“ напомена – величина података је премала\n"
-#: readelf.c:20336 readelf.c:20344
+#: readelf.c:20787 readelf.c:20795
#, c-format
msgid " Applies to region from %#lx to %#lx\n"
msgstr " Примењује Ñе на облаÑÑ‚ од %#lx до %#lx\n"
-#: readelf.c:20339 readelf.c:20346
+#: readelf.c:20790 readelf.c:20797
#, c-format
msgid " Applies to region from %#lx\n"
msgstr " Примењује Ñе на облаÑÑ‚ од %#lx\n"
-#: readelf.c:20366
+#: readelf.c:20817
#, c-format
msgid " <invalid description size: %lx>\n"
msgstr " <неиÑправна величина опиÑа: %lx>\n"
-#: readelf.c:20367
+#: readelf.c:20818
#, c-format
msgid " <invalid descsz>"
msgstr " <неиÑправна вел_опиÑа>"
-#: readelf.c:20393
+#: readelf.c:20844
#, c-format
msgid "Gap in build notes detected from %#lx to %#lx\n"
msgstr "Јаз у напоменама изградње је откривен од %#lx до %#lx\n"
-#: readelf.c:20396 readelf.c:20407
+#: readelf.c:20847 readelf.c:20858
#, c-format
msgid " Applies to region from %#lx"
msgstr " Примењује Ñе на облаÑÑ‚ од %#lx"
-#: readelf.c:20401 readelf.c:20412
+#: readelf.c:20852 readelf.c:20863
#, c-format
msgid " to %#lx"
msgstr " до %#lx"
-#: readelf.c:20418
+#: readelf.c:20869
#, c-format
msgid " (%s)"
msgstr " (%s)"
-#: readelf.c:20439 readelf.c:20454
+#: readelf.c:20890 readelf.c:20905
#, c-format
msgid "corrupt name field in GNU build attribute note: size = %ld\n"
msgstr "оштећено поље назива у напомени атрибута Гну изградње: величина = %ld\n"
-#: readelf.c:20440 readelf.c:20455
+#: readelf.c:20891 readelf.c:20906
msgid " <corrupt name>"
msgstr " <оштећен назив>"
-#: readelf.c:20474
+#: readelf.c:20925
#, c-format
msgid "unrecognised attribute type in name field: %d\n"
msgstr "непозната врÑта атрибута у пољу назива: %d\n"
-#: readelf.c:20475
+#: readelf.c:20926
msgid "<unknown name type>"
msgstr "<непозната врÑта назива>"
-#: readelf.c:20485
+#: readelf.c:20936
msgid "<version>"
msgstr "<издање>"
-#: readelf.c:20490
+#: readelf.c:20941
msgid "<stack prot>"
msgstr "<прот Ñпремника>"
-#: readelf.c:20495
+#: readelf.c:20946
msgid "<relro>"
msgstr "<relro>"
-#: readelf.c:20500
+#: readelf.c:20951
msgid "<stack size>"
msgstr "<величина Ñпремника>"
-#: readelf.c:20505
+#: readelf.c:20956
msgid "<tool>"
msgstr "<алат>"
-#: readelf.c:20510
+#: readelf.c:20961
msgid "<ABI>"
msgstr "<ABI>"
-#: readelf.c:20515
+#: readelf.c:20966
msgid "<PIC>"
msgstr "<PIC>"
-#: readelf.c:20520
+#: readelf.c:20971
msgid "<short enum>"
msgstr "<кратко набрајање>"
-#: readelf.c:20539
+#: readelf.c:20990
#, c-format
msgid "unrecognised byte in name field: %d\n"
msgstr "непознат бајт у пољу назива: %d\n"
-#: readelf.c:20540
+#: readelf.c:20991
#, c-format
msgid "<unknown:_%d>"
msgstr "<непознато:_%d>"
-#: readelf.c:20552
+#: readelf.c:21003
#, c-format
msgid "attribute does not have an expected type (%c)\n"
msgstr "атрибут нема очекивану врÑту (%c)\n"
-#: readelf.c:20556
+#: readelf.c:21007
#, c-format
msgid "corrupt name field: namesz: %lu but parsing gets to %ld\n"
msgstr "оштећено поље назива: вел_назива: %lu али обрадом добија %ld\n"
-#: readelf.c:20583
+#: readelf.c:21034
#, c-format
msgid "corrupt numeric name field: too many bytes in the value: %x\n"
msgstr "оштећено бројевно поље назива: превише бајтова у вредноÑти: %x\n"
-#: readelf.c:20755
+#: readelf.c:21212
#, c-format
msgid " description data: "
msgstr " подаци опиÑа: "
-#: readelf.c:20797
+#: readelf.c:21254
msgid "notes"
msgstr "напомене"
-#: readelf.c:20809
+#: readelf.c:21266
#, c-format
msgid "Displaying notes found in: %s\n"
msgstr "Приказујем напомене нађене у: %s\n"
-#: readelf.c:20811
+#: readelf.c:21268
#, c-format
msgid "Displaying notes found at file offset 0x%08lx with length 0x%08lx:\n"
msgstr "Приказујем напомене нађене на померају 0x%08lx Ñа дужином 0x%08lx:\n"
-#: readelf.c:20823
+#: readelf.c:21280
#, c-format
msgid "Corrupt note: alignment %ld, expecting 4 or 8\n"
msgstr "Оштећена напомена: поравнање %ld, очекујем 4 или 8\n"
-#: readelf.c:20829
+#: readelf.c:21286
#, c-format
msgid " %-20s %-10s\tDescription\n"
msgstr " %-20s %-10s\tОпиÑ\n"
-#: readelf.c:20829
+#: readelf.c:21286
msgid "Owner"
msgstr "ВлаÑник"
-#: readelf.c:20829
+#: readelf.c:21286
msgid "Data size"
msgstr "Величина података"
-#: readelf.c:20847 readelf.c:20876
+#: readelf.c:21304 readelf.c:21333
#, c-format
msgid "Corrupt note: only %ld byte remains, not enough for a full note\n"
msgid_plural "Corrupt note: only %ld bytes remain, not enough for a full note\n"
@@ -12031,25 +12244,25 @@ msgstr[0] "Оштећена напомена: Ñамо %ld бајт оÑтаје
msgstr[1] "Оштећена напомена: Ñамо %ld бајта оÑтају, недовољно за читаву напомену\n"
msgstr[2] "Оштећена напомена: Ñамо %ld бајта оÑтаје, недовољно за читаву напомену\n"
-#: readelf.c:20904
+#: readelf.c:21361
#, c-format
msgid "note with invalid namesz and/or descsz found at offset 0x%lx\n"
msgstr "напомена Ñа неиÑправним „namesz“ и/или „descsz“ је нађена на померају 0x%lx\n"
-#: readelf.c:20906
+#: readelf.c:21363
#, c-format
msgid " type: 0x%lx, namesize: 0x%08lx, descsize: 0x%08lx, alignment: %u\n"
msgstr " врÑта: 0Ñ…%lx, величина назива: 0Ñ…%08lx, величина опиÑа: 0h%08lx, поравнање: %u\n"
-#: readelf.c:20924
+#: readelf.c:21381
msgid "Out of memory allocating space for inote name\n"
msgstr "ПонеÑтало је меморије приликом додељивања проÑтора за назив и-напомене\n"
-#: readelf.c:20984
+#: readelf.c:21441
msgid "v850 notes"
msgstr "„v850“ напомене"
-#: readelf.c:20991
+#: readelf.c:21448
#, c-format
msgid ""
"\n"
@@ -12058,42 +12271,42 @@ msgstr ""
"\n"
"Приказујем Ñадржај одељка „Renesas V850“ напомена на померају 0x%lx Ñа дужином 0x%lx:\n"
-#: readelf.c:21008
+#: readelf.c:21465
#, c-format
msgid "Corrupt note: name size is too big: %lx\n"
msgstr "Оштећена напомена: величина назива је превелика: %lx\n"
-#: readelf.c:21018
+#: readelf.c:21475
#, c-format
msgid "corrupt descsz found in note at offset 0x%lx\n"
msgstr "нађох оштећену вел_опиÑа у напомени на померају 0x%lx\n"
-#: readelf.c:21020 readelf.c:21033
+#: readelf.c:21477 readelf.c:21490
#, c-format
msgid " type: 0x%lx, namesize: 0x%lx, descsize: 0x%lx\n"
msgstr " врÑта: 0Ñ…%lx, величина назива: 0Ñ…%lx, величина опиÑа: 0x%lx\n"
-#: readelf.c:21031
+#: readelf.c:21488
#, c-format
msgid "corrupt namesz found in note at offset 0x%lx\n"
msgstr "нађох оштећену вел_назива у напомени на померају 0x%lx\n"
-#: readelf.c:21110
+#: readelf.c:21567
#, c-format
msgid "No notes found in linked file '%s'.\n"
msgstr "ÐиÑам нашао никакве напомене у повезаној датотеци „%s“.\n"
-#: readelf.c:21113
+#: readelf.c:21570
#, c-format
msgid "No notes found file.\n"
msgstr "ÐиÑам нашао напомене у датотеци.\n"
-#: readelf.c:21122
+#: readelf.c:21579
#, c-format
msgid " Unknown GNU attribute: %s\n"
msgstr " Ðепознат Гну атрибут: %s\n"
-#: readelf.c:21270
+#: readelf.c:21727
msgid ""
"This instance of readelf has been built without support for a\n"
"64 bit data type and so it cannot read 64 bit ELF files.\n"
@@ -12101,12 +12314,12 @@ msgstr ""
"Овај примерак „readelf“-а је изграђен без подршке за 64-битну\n"
"врÑту података тако да не може да чита 64-битне ЕЛФ датотеке.\n"
-#: readelf.c:21440
+#: readelf.c:21897
#, c-format
msgid "%s: Failed to read file header\n"
msgstr "%s: ÐиÑам уÑпео да прочитам заглавље датотеке\n"
-#: readelf.c:21455
+#: readelf.c:21912
#, c-format
msgid ""
"\n"
@@ -12115,27 +12328,27 @@ msgstr ""
"\n"
"Датотека: %s\n"
-#: readelf.c:21616
+#: readelf.c:22073
#, c-format
msgid "%s: unable to dump the index as none was found\n"
msgstr "%s: не могу да изнеÑем Ð¸Ð½Ð´ÐµÐºÑ Ñ˜ÐµÑ€ нема ни једног\n"
-#: readelf.c:21623
+#: readelf.c:22080
#, c-format
msgid "Index of archive %s: (%lu entries, 0x%lx bytes in the symbol table)\n"
msgstr "Ð˜Ð½Ð´ÐµÐºÑ Ð°Ñ€Ñ…Ð¸Ð²Ðµ %s: (%lu уноÑа, 0x%lx бајта у табели Ñимбола)\n"
-#: readelf.c:21647
+#: readelf.c:22104
#, c-format
msgid "Contents of binary %s at offset "
msgstr "Садржај извршног „%s“ на померају "
-#: readelf.c:21659
+#: readelf.c:22116
#, c-format
msgid "%s: end of the symbol table reached before the end of the index\n"
msgstr "%s: Ñтигох до краја табеле Ñимбола пре краја индекÑа\n"
-#: readelf.c:21678
+#: readelf.c:22135
#, c-format
msgid "%s: %ld byte remains in the symbol table, but without corresponding entries in the index table\n"
msgid_plural "%s: %ld bytes remain in the symbol table, but without corresponding entries in the index table\n"
@@ -12143,45 +12356,45 @@ msgstr[0] "%s: %ld бајт оÑтаје у табели Ñимбола, али
msgstr[1] "%s: %ld бајта оÑтају у табели Ñимбола, али без одговарајућих уноÑа у табели индекÑа\n"
msgstr[2] "%s: %ld бајтова оÑтаје у табели Ñимбола, али без одговарајућих уноÑа у табели индекÑа\n"
-#: readelf.c:21691
+#: readelf.c:22148
#, c-format
msgid "%s: failed to seek back to start of object files in the archive\n"
msgstr "%s: ниÑам уÑпео да премотам назад на почетак датотека предмета у архиви\n"
-#: readelf.c:21785 readelf.c:21904
+#: readelf.c:22240 readelf.c:22359
#, c-format
msgid "Input file '%s' is not readable.\n"
msgstr "Улазна датотека %s није читљива.\n"
-#: readelf.c:21813
+#: readelf.c:22268
#, c-format
msgid "%s: contains corrupt thin archive: %s\n"
msgstr "%s: Ñадржи оштећену лаку архиву: %s\n"
-#: readelf.c:21831
+#: readelf.c:22286
#, c-format
msgid "%s: failed to seek to archive member.\n"
msgstr "%s: ниÑам уÑпео да премотам до члана архиве.\n"
-#: readelf.c:21896
+#: readelf.c:22351
msgid "Out of memory allocating file data structure\n"
msgstr "ПонеÑтало је меморије приликом додељивања Ñтруктуре података датотеке\n"
-#: readelf.c:21933
+#: readelf.c:22388
#, c-format
msgid "File %s is not an archive so its index cannot be displayed.\n"
msgstr "Датотека %s није архива тако да њен Ð¸Ð½Ð´ÐµÐºÑ Ð½Ðµ може бити приказан.\n"
-#: readelf.c:22004
+#: readelf.c:22459
msgid "Nothing to do.\n"
msgstr "Ðишта за радити.\n"
-#: rename.c:198
+#: rename.c:200
#, c-format
msgid "%s: cannot set time: %s"
msgstr "%s: не могу да подеÑим време: %s"
-#: rename.c:217
+#: rename.c:219
#, c-format
msgid "unable to copy file '%s'; reason: %s"
msgstr "не могу да умножим датотеку „%s“; разлог: %s"
@@ -12793,77 +13006,77 @@ msgstr "Број датотеке врÑте %d је ван опÑега\n"
msgid "Type index number %d out of range\n"
msgstr "Број индекÑа врÑте %d је ван опÑега\n"
-#: stabs.c:3506
+#: stabs.c:3507
#, c-format
msgid "Unrecognized XCOFF type %d\n"
msgstr "Ðепозната ХЦОФФ врÑта „%d“\n"
-#: stabs.c:3799
+#: stabs.c:3798
#, c-format
msgid "bad mangled name `%s'\n"
msgstr "лош прекрштени назив „%s“\n"
-#: stabs.c:3894
+#: stabs.c:3893
#, c-format
msgid "no argument types in mangled string\n"
msgstr "нема врÑта аргумената у прекрштеној ниÑци\n"
-#: stabs.c:5242
+#: stabs.c:5241
#, c-format
msgid "Demangled name is not a function\n"
msgstr "РаÑкршћени назив није функција\n"
-#: stabs.c:5284
+#: stabs.c:5283
#, c-format
msgid "Unexpected type in v3 arglist demangling\n"
msgstr "Ðеочекивана врÑта у и3 ÑпиÑку аргумената раÑкршћавања\n"
-#: stabs.c:5356
+#: stabs.c:5355
#, c-format
msgid "Unrecognized demangle component %d\n"
msgstr "Ðепознат ÑаÑтојак раÑкршћавања „%d“\n"
-#: stabs.c:5408
+#: stabs.c:5407
#, c-format
msgid "Failed to print demangled template\n"
msgstr "ÐиÑам уÑпео да иÑпиÑшем раÑкршћени шаблон\n"
-#: stabs.c:5488
+#: stabs.c:5487
#, c-format
msgid "Couldn't get demangled builtin type\n"
msgstr "Ðе могу да добавим раÑкршћену врÑту уграђеноÑти\n"
-#: stabs.c:5537
+#: stabs.c:5536
#, c-format
msgid "Unexpected demangled varargs\n"
msgstr "Ðеочекивани раÑкршћени аргументи променљиве\n"
-#: stabs.c:5544
+#: stabs.c:5543
#, c-format
msgid "Unrecognized demangled builtin type\n"
msgstr "Ðепозната раÑкршћена врÑта уграђеноÑти\n"
-#: strings.c:198 strings.c:265
+#: strings.c:229 strings.c:316
#, c-format
msgid "invalid integer argument %s"
msgstr "неиÑправан аргумент целог броја %s"
-#: strings.c:268
+#: strings.c:319
#, c-format
msgid "invalid minimum string length %d"
msgstr "неиÑправна најмања дужина ниÑке %d"
-#: strings.c:339
+#: strings.c:390
#, c-format
msgid "%s: Reading section %s failed: %s"
msgstr "%s: Ðије уÑпело читање одељка „%s“: %s"
-#: strings.c:678
+#: strings.c:1313
#, c-format
msgid " Display printable strings in [file(s)] (stdin by default)\n"
msgstr " Приказује иÑпиÑиве ниÑке у [датотеци(кама)] (Ñтндулаз по оÑнови)\n"
-#: strings.c:682
+#: strings.c:1317
#, c-format
msgid ""
" -a - --all Scan the entire file, not just the data section [default]\n"
@@ -12872,7 +13085,7 @@ msgstr ""
" -a - --all Скенира читаву датотеку, не Ñамо одељак података [оÑновно]\n"
" -d --data Скенира Ñамо одељке података у датотеци\n"
-#: strings.c:686
+#: strings.c:1321
#, c-format
msgid ""
" -a - --all Scan the entire file, not just the data section\n"
@@ -12881,89 +13094,94 @@ msgstr ""
" -a - --all Скенира читаву датотеку, не Ñамо одељак података\n"
" -d --data Скенира Ñамо одељке података у датотеци [оÑновно]\n"
-#: strings.c:690
+#: strings.c:1325
#, c-format
msgid ""
" -f --print-file-name Print the name of the file before each string\n"
-" -n --bytes=[number] Locate & print any NUL-terminated sequence of at\n"
-" -<number> least [number] characters (default 4).\n"
+" -n <number> Locate & print any sequence of at least <number>\n"
+" --bytes=<number> displayable characters. (The default is 4).\n"
" -t --radix={o,d,x} Print the location of the string in base 8, 10 or 16\n"
" -w --include-all-whitespace Include all whitespace as valid string characters\n"
" -o An alias for --radix=o\n"
" -T --target=<BFDNAME> Specify the binary file format\n"
" -e --encoding={s,S,b,l,B,L} Select character size and endianness:\n"
" s = 7-bit, S = 8-bit, {b,l} = 16-bit, {B,L} = 32-bit\n"
+" --unicode={default|show|invalid|hex|escape|highlight}\n"
+" -U {d|s|i|x|e|h} Specify how to treat UTF-8 encoded unicode characters\n"
" -s --output-separator=<string> String used to separate strings in output.\n"
" @<file> Read options from <file>\n"
" -h --help Display this information\n"
" -v -V --version Print the program's version number\n"
msgstr ""
" -f --print-file-name ИÑпиÑује назив датотеке пре Ñваке ниÑке\n"
-" -n --bytes=[број] Ðалази и иÑпиÑује Ñве низове завршене на ÐИШТÐ\n"
-" -<број> од најмање [број] знакова (оÑновно је 4).\n"
-" -t --radix={o,d,x} ИÑпиÑује меÑто ниÑке Ñа оÑновом 8, 10 или 16\n"
-" -w --include-all-whitespace Укључује Ñве празнине као иÑправне знаке ниÑке\n"
-" -o ПÑеудоним за „--radix=o\n"
-" -T --target=<БФДÐÐЗИВ> Ðаводи Ð·Ð°Ð¿Ð¸Ñ Ð±Ð¸Ð½Ð°Ñ€Ð½Ðµ датотеке\n"
-" -e --encoding={s,S,b,l,B,L} Бира величину знака и крајњоÑÑ‚ (велику или малу):\n"
+" -n <број> Ðалази и иÑпиÑује Ñваки низ од барем <броја>\n"
+" --bytes=<број> приказиви знакови. (ОÑновно је 4).\n"
+" -t --radix={o,d,x} ИÑпиÑује меÑто ниÑке у оÑнови 8, 10 или 16\n"
+" -w --include-all-whitespace Укључује Ñве празнине као иÑправне знакове ниÑке\n"
+" -o ÐÐ»Ð¸Ñ˜Ð°Ñ Ð·Ð° „--radix=o“\n"
+" -T --target=<БДОÐÐЗИВ> Ðаводи формат бинарне датотеке\n"
+" -e --encoding={s,S,b,l,B,L} Бира величину знака и крајноÑÑ‚:\n"
" s = 7-бита, S = 8-бита, {b,l} = 16-бита, {B,L} = 32-бита\n"
-" -s --output-separator=<ниÑка> ÐиÑка која Ñе кориÑти за раздвајање ниÑки на излазу.\n"
+" --unicode={default|show|invalid|hex|escape|highlight}\n"
+" -U {d|s|i|x|e|h} Ðаводи како да Ñе ради Ñа УТФ-8 кодираним јуникод знаковима\n"
+" -s --output-separator=<ниÑка> ÐиÑка коришћена за раздвајање ниÑки у излазу.\n"
" @<датотека> Чита опције из <датотеке>\n"
-" -h --help Приказује ову помоћ\n"
-" -v -V --version Приказује број издања програма\n"
+" -h --help Приказује ове информације\n"
+" -v -V --version ИÑпиÑује број издања програма\n"
#: sysdump.c:51
msgid "*undefined*"
msgstr "*неодређено*"
-#: sysdump.c:57
+#. PR 28564
+#: sysdump.c:57 sysdump.c:66
msgid "*corrupt*"
msgstr "*оштећено*"
-#: sysdump.c:125
+#: sysdump.c:131
#, c-format
msgid "SUM IS %x\n"
msgstr "ЗБИР ЈЕ %x\n"
#. PR 17512: file: id:000001,src:000002,op:flip1,pos:45.
#. Prevent infinite loops re-reading beyond the end of the buffer.
-#: sysdump.c:163
+#: sysdump.c:169
msgid "ICE: getINT: Out of buffer space"
msgstr "ICE: getINT: Ðема више међумеморије"
-#: sysdump.c:188
+#: sysdump.c:194
#, c-format
msgid "Unsupported read size: %d"
msgstr "Ðеподржана величина читања: %d"
-#: sysdump.c:499
+#: sysdump.c:505
#, c-format
msgid "GOT A %x\n"
msgstr "ДОБИХ %x\n"
-#: sysdump.c:517
+#: sysdump.c:523
#, c-format
msgid "WANTED %x!!\n"
msgstr "ПОТРЕБÐО ЈЕ %x!!\n"
-#: sysdump.c:535
+#: sysdump.c:541
msgid "SYMBOL INFO"
msgstr "ПОДÐЦИ СИМБОЛÐ"
-#: sysdump.c:553
+#: sysdump.c:559
msgid "DERIVED TYPE"
msgstr "ПРОИЗÐШЛРВРСТÐ"
-#: sysdump.c:610
+#: sysdump.c:616
msgid "MODULE***\n"
msgstr "МОДУЛ***\n"
-#: sysdump.c:643
+#: sysdump.c:649
#, c-format
msgid "Print a human readable interpretation of a SYSROFF object file\n"
msgstr "ИÑпиÑује људима читљиво тумачење датотеке СИСРОФФ објкета\n"
-#: sysdump.c:644
+#: sysdump.c:650
#, c-format
msgid ""
" The options are:\n"
@@ -12974,7 +13192,7 @@ msgstr ""
" -h --help Приказује ове податке\n"
" -v --version Приказује број издања програма\n"
-#: sysdump.c:710
+#: sysdump.c:716
#, c-format
msgid "cannot open input file %s"
msgstr "не могу да отворим улазну датотеку %s"
@@ -13063,8 +13281,8 @@ msgstr "\t<оштећен „IA64“ опиÑ>\n"
#: version.c:34
#, c-format
-msgid "Copyright (C) 2021 Free Software Foundation, Inc.\n"
-msgstr "ÐуторÑка права © 2021 Задужбина Ñлободног Ñофтвера, Доо.\n"
+msgid "Copyright (C) 2022 Free Software Foundation, Inc.\n"
+msgstr "ÐуторÑка права © 2022 Задужбина Ñлободног Ñофтвера, Доо.\n"
#: version.c:35
#, c-format
@@ -13319,6 +13537,144 @@ msgstr "stab_int_type: лоша величина %u"
msgid "%s: warning: unknown size for field `%s' in struct"
msgstr "%s: упозорење: непозната величина за поље „%s“ у Ñтруктури"
+#~ msgid "There is a hole [0x%lx - 0x%lx] in .debug_loc section.\n"
+#~ msgstr "ПоÑтоји рупа [0x%lx – 0x%lx] у одељку „.debug_loc“.\n"
+
+#~ msgid "There is an overlap [0x%lx - 0x%lx] in .debug_loc section.\n"
+#~ msgstr "ПоÑтоји преклапање [0x%lx – 0x%lx] у одељку „.debug_loc“.\n"
+
+#~ msgid ""
+#~ " The options are:\n"
+#~ " -a, --debug-syms Display debugger-only symbols\n"
+#~ " -A, --print-file-name Print name of the input file before every symbol\n"
+#~ " -B Same as --format=bsd\n"
+#~ " -C, --demangle[=STYLE] Decode low-level symbol names into user-level names\n"
+#~ " The STYLE, if specified, can be `auto' (the default),\n"
+#~ " `gnu', `lucid', `arm', `hp', `edg', `gnu-v3', `java'\n"
+#~ " or `gnat'\n"
+#~ " --no-demangle Do not demangle low-level symbol names\n"
+#~ " --recurse-limit Enable a demangling recursion limit. This is the default.\n"
+#~ " --no-recurse-limit Disable a demangling recursion limit.\n"
+#~ " -D, --dynamic Display dynamic symbols instead of normal symbols\n"
+#~ " --defined-only Display only defined symbols\n"
+#~ " -e (ignored)\n"
+#~ " -f, --format=FORMAT Use the output format FORMAT. FORMAT can be `bsd',\n"
+#~ " `sysv', `posix' or 'just-symbols'. The default is `bsd'\n"
+#~ " -g, --extern-only Display only external symbols\n"
+#~ " --ifunc-chars=CHARS Characters to use when displaying ifunc symbols\n"
+#~ " -j, --just-symbols Same as --format=just-symbols\n"
+#~ " -l, --line-numbers Use debugging information to find a filename and\n"
+#~ " line number for each symbol\n"
+#~ " -n, --numeric-sort Sort symbols numerically by address\n"
+#~ " -o Same as -A\n"
+#~ " -p, --no-sort Do not sort the symbols\n"
+#~ " -P, --portability Same as --format=posix\n"
+#~ " -r, --reverse-sort Reverse the sense of the sort\n"
+#~ msgstr ""
+#~ "Опције Ñу:\n"
+#~ " -a, --debug-syms Приказује Ñамо Ñимболе прочишћавача\n"
+#~ " -A, --print-file-name ИÑпиÑује назив улазне датотеке пре Ñваког Ñимбола\n"
+#~ " -B ИÑто као „--format=бÑд“\n"
+#~ " -C, --demangle[=СТИЛ] Декодира називе Ñимбола ниÑког нивоа у називе кориÑничког нивоа\n"
+#~ " СТИЛ, ако је наведен, може бити „auto“ (оÑновно), „gnu“,\n"
+#~ " „lucid“, „arm“, „hp“, „edg“ „gnu-v3“, „java“ или „gnat“\n"
+#~ " --no-demangle Ðе раÑкршћава називе Ñимбола ниÑког нивоа\n"
+#~ " --recurse-limit Укључује ограничење дубачења раÑкршћавања. Ово је оÑновно.\n"
+#~ " --no-recurse-limit ИÑкључује ограничење дубачења раÑкршћавања.\n"
+#~ " -D, --dynamic Приказује динамичке Ñимболе умеÑто нормалних\n"
+#~ " --defined-only Приказује Ñамо одређене Ñимболе\n"
+#~ " -e (занемарено)\n"
+#~ " -f, --format=ЗÐПИС КориÑти излазни Ð·Ð°Ð¿Ð¸Ñ Ð—ÐПИС. ЗÐПИС може бити „bsd“,\n"
+#~ " „sysv“ или „posix“. ОÑновни је „bsd“\n"
+#~ " -g, --extern-only Приказује Ñамо Ñпољне Ñимболе\n"
+#~ " --ifunc-chars=ЗÐÐЦИ Знаци за коришћење приликом приказивања „ifunc“ Ñимбола\n"
+#~ " -j, --just-symbols ИÑто као „--format=just-symbols“\n"
+#~ " -l, --line-numbers КориÑти податке прочишћавања да пронађе назив датотеке\n"
+#~ " и број реда за Ñваки Ñимбол\n"
+#~ " -n, --numeric-sort Ређа Ñимболе нумерички према адреÑама\n"
+#~ " -o ИÑто као „-A“\n"
+#~ " -p, --no-sort Ðе ређа Ñимболе\n"
+#~ " -P, --portability ИÑто као „--format=поÑикÑ“\n"
+#~ " -r, --reverse-sort Окреће Ñмер ређања\n"
+
+#~ msgid ""
+#~ " -S, --print-size Print size of defined symbols\n"
+#~ " -s, --print-armap Include index for symbols from archive members\n"
+#~ " --quiet Suppress \"no symbols\" diagnostic\n"
+#~ " --size-sort Sort symbols by size\n"
+#~ " --special-syms Include special symbols in the output\n"
+#~ " --synthetic Display synthetic symbols as well\n"
+#~ " -t, --radix=RADIX Use RADIX for printing symbol values\n"
+#~ " --target=BFDNAME Specify the target object format as BFDNAME\n"
+#~ " -u, --undefined-only Display only undefined symbols\n"
+#~ " --with-symbol-versions Display version strings after symbol names\n"
+#~ " -X 32_64 (ignored)\n"
+#~ " @FILE Read options from FILE\n"
+#~ " -h, --help Display this information\n"
+#~ " -V, --version Display this program's version number\n"
+#~ "\n"
+#~ msgstr ""
+#~ " -S, --print-size ИÑпиÑује величину дефиниÑаних Ñимбола\n"
+#~ " -s, --print-armap Укључује Ð¸Ð½Ð´ÐµÐºÑ Ð·Ð° Ñимболе из чланова архиве\n"
+#~ " --quiet ПотиÑкује дијагноÑтику „без Ñимбола“\n"
+#~ " --size-sort Ређа Ñимболе према величини\n"
+#~ " --special-syms Укључује Ñпецијалне Ñимболе у излазу\n"
+#~ " --synthetic Приказује Ñинтетичке Ñимболе као такве\n"
+#~ " -t, --radix=КОРЕРКориÑти КОРЕРзаиÑпиÑивање вредноÑти Ñимбола\n"
+#~ " --target=БФДÐÐЗИВ Ðаводи формат циљног формата као БФДÐÐЗИВ \n"
+#~ " -u, --undefined-only Приказује Ñамо недефиниÑане Ñимболе\n"
+#~ " --with-symbol-versions Приказује ниÑке издања након назива Ñимбола\n"
+#~ " -X 32_64 (занемарено)\n"
+#~ " @ДÐТОТЕКРЧита опције из ДÐТОТЕКЕ\n"
+#~ " -h, --help Приказује ове информације\n"
+#~ " -V, --version Приказује број издања програма\n"
+#~ "\n"
+
+#~ msgid ""
+#~ " -C, --demangle[=STYLE] Decode mangled/processed symbol names\n"
+#~ " The STYLE, if specified, can be `auto', `gnu',\n"
+#~ " `lucid', `arm', `hp', `edg', `gnu-v3', `java'\n"
+#~ " or `gnat'\n"
+#~ msgstr ""
+#~ " -C, --demangle[=СТИЛ] Декодира прекрштене/обрађене називе Ñимбола\n"
+#~ " СТИЛ, ако је наведен, може бити „auto“, „gnu“,\n"
+#~ " „lucid“, „arm“, „hp“, „edg“, „gnu-v3“, „java“\n"
+#~ " или „gnat“\n"
+
+#~ msgid ""
+#~ " -C --demangle[=STYLE] Decode low-level symbol names into user-level names\n"
+#~ " The STYLE, if specified, can be `auto' (the default),\n"
+#~ " `gnu', `lucid', `arm', `hp', `edg', `gnu-v3', `java'\n"
+#~ " or `gnat'\n"
+#~ msgstr ""
+#~ " -C --demangle[=СТИЛ] Декодира називе Ñимбола ниÑког нивоа у називе кориÑничког нивоа\n"
+#~ " СТИЛ, ако је наведен, може бити „auto“ (оÑновно),\n"
+#~ " „gnu“, „lucid“, „arm“, „hp“, „edg“, „gnu-v3“, „java“\n"
+#~ " или „gnat“\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "In linked file '%s' the dynamic section at offset 0x%lx contains 1 entry:\n"
+#~ msgstr ""
+#~ "\n"
+#~ "У повезаној датотеци „%s“ динамички одељак на померају 0x%lx Ñадржи 1 уноÑ:\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Dynamic section at offset 0x%lx contains 1 entry:\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Динамички одељак на померају 0x%lx Ñадржи 1 уноÑ:\n"
+
+#~ msgid "No CTF parent section named %s\n"
+#~ msgstr "Ðема „CTF“ родитељÑки одељак под називом „%s“\n"
+
+#~ msgid "CTF parent"
+#~ msgstr "„CTF“ родитељ"
+
+#~ msgid "NT_MEMTAG (memory tags)"
+#~ msgstr "NT_MEMTAG (меморијÑке ознаке)"
+
#~ msgid "%s: Can't allocate memory for temp name (%s)\n"
#~ msgstr "%s: Ðе могу да доделим меморију за назив температуре (%s)\n"
diff --git a/binutils/po/sv.po b/binutils/po/sv.po
index 838e26f7afc..2a80ada24d9 100644
--- a/binutils/po/sv.po
+++ b/binutils/po/sv.po
@@ -1,18 +1,18 @@
# Swedish messages for binutils.
-# Copyright © 2001, 2002, 2013, 2014, 2016, 2017, 2018, 2019, 2020, 2021 Free Software Foundation, Inc.
+# Copyright © 2001, 2002, 2013, 2014, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Free Software Foundation, Inc.
# This file is distributed under the same license as the binutils package.
#
# Tommy Pettersson <ptp@lysator.liu.se>, 2001, 2002, 2004.
-# Göran Uddeborg <goeran@uddeborg.se>, 2013, 2014, 2016, 2017, 2018, 2019, 2020, 2021.
+# Göran Uddeborg <goeran@uddeborg.se>, 2013, 2014, 2016, 2017, 2018, 2019, 2020, 2021, 2022.
#
-# $Revision: 1.30 $
+# $Revision: 1.32 $
#
msgid ""
msgstr ""
-"Project-Id-Version: binutils 2.36.90\n"
-"Report-Msgid-Bugs-To: bug-binutils@gnu.org\n"
-"POT-Creation-Date: 2021-07-03 15:06+0100\n"
-"PO-Revision-Date: 2021-07-12 22:29+0200\n"
+"Project-Id-Version: binutils 2.37.90\n"
+"Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n"
+"POT-Creation-Date: 2022-01-22 12:22+0000\n"
+"PO-Revision-Date: 2022-01-26 23:00+0100\n"
"Last-Translator: Göran Uddeborg <goeran@uddeborg.se>\n"
"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
"Language: sv\n"
@@ -74,9 +74,9 @@ msgstr ""
" -v --version Visa programmets version\n"
"\n"
-#: addr2line.c:109 ar.c:357 ar.c:394 coffdump.c:471 dlltool.c:3715
-#: dllwrap.c:518 elfedit.c:952 objcopy.c:697 objcopy.c:752 readelf.c:4842
-#: size.c:109 srconv.c:1704 strings.c:706 sysdump.c:649 windmc.c:227
+#: addr2line.c:109 ar.c:359 ar.c:396 coffdump.c:471 dlltool.c:3713
+#: dllwrap.c:518 elfedit.c:976 objcopy.c:697 objcopy.c:752 readelf.c:5165
+#: size.c:109 srconv.c:1704 strings.c:1343 sysdump.c:655 windmc.c:227
#: windres.c:690
#, c-format
msgid "Report bugs to %s\n"
@@ -115,227 +115,232 @@ msgstr "%s: kan inte hämta adresser från arkivet"
msgid "%s: cannot find section %s"
msgstr "%s: kan inte hitta sektionen %s"
-#: addr2line.c:442 ar.c:756 dlltool.c:3239 nm.c:1807 objcopy.c:6029
-#: objdump.c:5211 size.c:151 strings.c:289 windmc.c:958 windres.c:816
+#: addr2line.c:442 ar.c:758 dlltool.c:3237 nm.c:2051 objcopy.c:6036
+#: objdump.c:5372 size.c:151 strings.c:340 windmc.c:958 windres.c:816
msgid "fatal error: libbfd ABI mismatch"
msgstr "ödesdigert fel: libbfd-ABI:et stämmer inte"
-#: addr2line.c:469 nm.c:1833 objdump.c:5258 readelf.c:5115
+#: addr2line.c:469 nm.c:2077 objdump.c:5419 readelf.c:5438
#, c-format
msgid "unknown demangling style `%s'"
msgstr "okänd avkodningsstil â€%sâ€"
-#: ar.c:274
+#: ar.c:275
#, c-format
msgid "no entry %s in archive\n"
msgstr "ingen post %s i arkivet\n"
-#: ar.c:288
+#: ar.c:289
#, c-format
msgid "Usage: %s [emulation options] [-]{dmpqrstx}[abcDfilMNoOPsSTuvV] [--plugin <name>] [member-name] [count] archive-file file...\n"
msgstr "Användning: %s [emuleringsflaggor] [-]{dmpqrstx}[abcDfilMNoOPsSTuvV] [--plugin <namn>] [medlemsnamn] [nummer] arkivfil fil…\n"
-#: ar.c:294
+#: ar.c:295
#, c-format
msgid "Usage: %s [emulation options] [-]{dmpqrstx}[abcDfilMNoOPsSTuvV] [member-name] [count] archive-file file...\n"
msgstr "Användning: %s [emuleringsflaggor] [-]{dmpqrstx}[abcDfilMNoOPsSTuvV] [medlemsnamn] [nummer] arkivfil fil…\n"
-#: ar.c:302
+#: ar.c:303
#, c-format
msgid " %s -M [<mri-script]\n"
msgstr " %s -M [<mri-skript]\n"
-#: ar.c:303
+#: ar.c:304
#, c-format
msgid " commands:\n"
msgstr " kommandon:\n"
-#: ar.c:304
+#: ar.c:305
#, c-format
msgid " d - delete file(s) from the archive\n"
msgstr " d - radera fil(er) i arkivet\n"
-#: ar.c:305
+#: ar.c:306
#, c-format
msgid " m[ab] - move file(s) in the archive\n"
msgstr " m[ab] - flytta fil(er) i arkivet\n"
-#: ar.c:306
+#: ar.c:307
#, c-format
msgid " p - print file(s) found in the archive\n"
msgstr " p - skriv ut fil(er) som påträffas i arkivet\n"
-#: ar.c:307
+#: ar.c:308
#, c-format
msgid " q[f] - quick append file(s) to the archive\n"
msgstr " q[f] - snabbfoga fil(er) till slutet av arkivet\n"
-#: ar.c:308
+#: ar.c:309
#, c-format
msgid " r[ab][f][u] - replace existing or insert new file(s) into the archive\n"
msgstr " r[ab][f][u] - ersätt existerande eller infoga ny(a) fil(er) i arkivet\n"
-#: ar.c:309
+#: ar.c:310
#, c-format
msgid " s - act as ranlib\n"
msgstr " s - fungera som ranlib\n"
-#: ar.c:310
+#: ar.c:311
#, c-format
msgid " t[O][v] - display contents of the archive\n"
msgstr " t[O][v] - visa innehållet i arkivet\n"
-#: ar.c:311
+#: ar.c:312
#, c-format
msgid " x[o] - extract file(s) from the archive\n"
msgstr " x[o] - hämta fil(er) från arkivet\n"
-#: ar.c:312
+#: ar.c:313
#, c-format
msgid " command specific modifiers:\n"
msgstr " modifierare specifika för kommandona:\n"
-#: ar.c:313
+#: ar.c:314
#, c-format
msgid " [a] - put file(s) after [member-name]\n"
msgstr " [a] - infoga fil(er) efter [medlemsnamn]\n"
-#: ar.c:314
+#: ar.c:315
#, c-format
msgid " [b] - put file(s) before [member-name] (same as [i])\n"
msgstr " [b] - infoga fil(er) före [medlemsnamn] (samma som [i])\n"
-#: ar.c:317
+#: ar.c:318
#, c-format
msgid " [D] - use zero for timestamps and uids/gids (default)\n"
msgstr " [D] - använd noll som tidsstämpel och uid/gid (standard)\n"
-#: ar.c:319
+#: ar.c:320
#, c-format
msgid " [U] - use actual timestamps and uids/gids\n"
msgstr " [D] - använd verkliga tidsstämplar och uid/gid\n"
-#: ar.c:324
+#: ar.c:325
#, c-format
msgid " [D] - use zero for timestamps and uids/gids\n"
msgstr " [D] - använd noll som tidsstämpel och uid/gid\n"
-#: ar.c:326
+#: ar.c:327
#, c-format
msgid " [U] - use actual timestamps and uids/gids (default)\n"
msgstr " [D] - använd verkliga tidsstämplar och uid/gid (standard)\n"
-#: ar.c:329
+#: ar.c:330
#, c-format
msgid " [N] - use instance [count] of name\n"
msgstr " [N] - använd förekomst [nummer] av namn\n"
-#: ar.c:330
+#: ar.c:331
#, c-format
msgid " [f] - truncate inserted file names\n"
msgstr " [f] - korta av infogade filnamn\n"
-#: ar.c:331
+#: ar.c:332
#, c-format
msgid " [P] - use full path names when matching\n"
msgstr " [P] - mönsterpassa mot namnets hela sökväg\n"
-#: ar.c:332
+#: ar.c:333
#, c-format
msgid " [o] - preserve original dates\n"
msgstr " [o] - bevara ursprungliga datum\n"
-#: ar.c:333
+#: ar.c:334
#, c-format
msgid " [O] - display offsets of files in the archive\n"
msgstr " [O] - visa avstånd till filer i arkivet\n"
-#: ar.c:334
+#: ar.c:335
#, c-format
msgid " [u] - only replace files that are newer than current archive contents\n"
msgstr " [u] - ersätt bara filer som är nyare än i arkivet\n"
-#: ar.c:335
+#: ar.c:336
#, c-format
msgid " generic modifiers:\n"
msgstr " generella modifierare:\n"
-#: ar.c:336
+#: ar.c:337
#, c-format
msgid " [c] - do not warn if the library had to be created\n"
msgstr " [c] - varna inte om biblioteket måste skapas\n"
-#: ar.c:337
+#: ar.c:338
#, c-format
msgid " [s] - create an archive index (cf. ranlib)\n"
msgstr " [s] - skapa ett index över arkivet (jfr. ranlib)\n"
-#: ar.c:338
+#: ar.c:339
#, c-format
msgid " [l <text> ] - specify the dependencies of this library\n"
msgstr " [l <text> ] - ange beroendena för detta bibliotek\n"
-#: ar.c:339
+#: ar.c:340
#, c-format
msgid " [S] - do not build a symbol table\n"
msgstr " [S] - skapa inget index över arkivet\n"
-#: ar.c:340
+#: ar.c:341
#, c-format
-msgid " [T] - make a thin archive\n"
-msgstr " [T] - skapa ett tunt arkiv\n"
+msgid " [T] - deprecated, use --thin instead\n"
+msgstr " [T] - föråldrat, använd --thin istället\n"
-#: ar.c:341
+#: ar.c:342
#, c-format
msgid " [v] - be verbose\n"
msgstr " [v] - beskriv utförligt\n"
-#: ar.c:342
+#: ar.c:343
#, c-format
msgid " [V] - display the version number\n"
msgstr " [V] - visa versionsinformation\n"
-#: ar.c:343
+#: ar.c:344
#, c-format
msgid " @<file> - read options from <file>\n"
msgstr " @<fil> - läs flaggor från <fil>\n"
-#: ar.c:344
+#: ar.c:345
#, c-format
msgid " --target=BFDNAME - specify the target object format as BFDNAME\n"
msgstr " --target=BFDNAMN - ange målobjektformatet att vara BFDNAMN\n"
-#: ar.c:345
+#: ar.c:346
#, c-format
msgid " --output=DIRNAME - specify the output directory for extraction operations\n"
msgstr " --output=KATNAMN - ange utmatningskatalogen för extraheringsflaggor\n"
-#: ar.c:346
+#: ar.c:347
#, c-format
msgid " --record-libdeps=<text> - specify the dependencies of this library\n"
msgstr " --record-libdeps=<text> - ange beroendena för detta bibliotek\n"
#: ar.c:348
#, c-format
+msgid " --thin - make a thin archive\n"
+msgstr " --thin - skapa ett tunt arkiv\n"
+
+#: ar.c:350
+#, c-format
msgid " optional:\n"
msgstr " valfria:\n"
-#: ar.c:349
+#: ar.c:351
#, c-format
msgid " --plugin <p> - load the specified plugin\n"
msgstr " --plugin <p> - ladda den angivna insticksmodulen\n"
-#: ar.c:370
+#: ar.c:372
#, c-format
msgid "Usage: %s [options] archive\n"
msgstr "Användning: %s [flaggor] arkiv\n"
-#: ar.c:371
+#: ar.c:373
#, c-format
msgid " Generate an index to speed access to archives\n"
msgstr " Generera ett index för att snabba upp uppslagningar i arkivet\n"
-#: ar.c:372
+#: ar.c:374
#, c-format
msgid ""
" The options are:\n"
@@ -344,12 +349,12 @@ msgstr ""
" Flaggorna är:\n"
" @<fil> Läs flaggor från <fil>\n"
-#: ar.c:375
+#: ar.c:377
#, c-format
msgid " --plugin <name> Load the specified plugin\n"
msgstr " --plugin <namn> Ladda den angivna insticksmodulen\n"
-#: ar.c:379
+#: ar.c:381
#, c-format
msgid ""
" -D Use zero for symbol map timestamp (default)\n"
@@ -358,7 +363,7 @@ msgstr ""
" -D Använd noll som tidsstämpel i symbolkartan (standard)\n"
" -U Använd verklig tidsstämpel i symbolkartan\n"
-#: ar.c:383
+#: ar.c:385
#, c-format
msgid ""
" -D Use zero for symbol map timestamp\n"
@@ -367,7 +372,7 @@ msgstr ""
" -D Använd noll som tidsstämpel i symbolkartan\n"
" -U Använd verklig tidsstämpel i symbolkartan (standard)\n"
-#: ar.c:386
+#: ar.c:388
#, c-format
msgid ""
" -t Update the archive's symbol map timestamp\n"
@@ -378,134 +383,134 @@ msgstr ""
" -h --help Visa denna hjälp\n"
" -V --version Visa versionsinformation\n"
-#: ar.c:511
+#: ar.c:513
msgid "two different operation options specified"
msgstr "två olika kommandoflaggor gavs"
-#: ar.c:547
+#: ar.c:549
msgid "libdeps specified more than once"
msgstr "libdeps angivet mer än en gång"
-#: ar.c:608 ar.c:683 nm.c:1926
+#: ar.c:610 ar.c:685 nm.c:2188
#, c-format
msgid "sorry - this program has been built without plugin support\n"
msgstr "ledsen - detta program är byggt utan stöd för insticksmoduler\n"
-#: ar.c:812
+#: ar.c:814
msgid "no operation specified"
msgstr "ingen kommandoflagga gavs"
-#: ar.c:815
+#: ar.c:817
msgid "`u' is only meaningful with the `r' option."
msgstr "â€u†är bara meningsfull tillsammans med â€râ€."
-#: ar.c:818
+#: ar.c:820
msgid "`u' is not meaningful with the `D' option."
msgstr "â€u†är bara meningsfull tillsammans med flaggan â€Dâ€."
-#: ar.c:821
+#: ar.c:823
msgid "`u' modifier ignored since `D' is the default (see `U')"
msgstr "modifieraren â€u†ignoreras eftersom â€D†är standard (se â€Uâ€)"
-#: ar.c:830
+#: ar.c:832
msgid "missing position arg."
msgstr "saknat positionsargument."
-#: ar.c:836
+#: ar.c:838
msgid "`N' is only meaningful with the `x' and `d' options."
msgstr "â€N†är bara meningsfull tillsammans med â€x†eller â€dâ€."
-#: ar.c:838
+#: ar.c:840
msgid "`N' missing value."
msgstr "â€N†saknar värde."
-#: ar.c:841
+#: ar.c:843
msgid "Value for `N' must be positive."
msgstr "Argumentet till â€N†mÃ¥ste vara positivt."
-#: ar.c:857
+#: ar.c:859
msgid "`x' cannot be used on thin archives."
msgstr "â€x†kan inte användas pÃ¥ tunna arkiv."
-#: ar.c:871
+#: ar.c:873
msgid "Cannot create libdeps record."
msgstr "Kan inte skapa libdeps-post."
-#: ar.c:874
+#: ar.c:876
msgid "Cannot set libdeps record type to binary."
msgstr "Kan inte sätta libdeps-posttypen till binär."
-#: ar.c:877
+#: ar.c:879
msgid "Cannot set libdeps object format."
msgstr "Kan inte sätta libdeps-objektformatet."
-#: ar.c:880
+#: ar.c:882
msgid "Cannot make libdeps object writable."
msgstr "Kan inte göra libdeps-objektet skrivbart."
-#: ar.c:883
+#: ar.c:885
msgid "Cannot write libdeps record."
msgstr "Kan inte skriva libdeps-posten."
-#: ar.c:886
+#: ar.c:888
msgid "Cannot make libdeps object readable."
msgstr "Kan inte göra libdeps-objektet läsbart."
-#: ar.c:889
+#: ar.c:891
msgid "Cannot reset libdeps record type."
msgstr "Kan inte återställa libdeps-posttypen."
-#: ar.c:950
+#: ar.c:952
#, c-format
msgid "internal error -- this option not implemented"
msgstr "internt fel -- flaggan är inte implementerad"
-#: ar.c:1019
+#: ar.c:1021
#, c-format
msgid "creating %s"
msgstr "skapar %s"
-#: ar.c:1050
+#: ar.c:1052
#, c-format
msgid "Cannot convert existing library %s to thin format"
msgstr "Kan inte konvertera ett befintligt bibliotek %s till tunt format"
-#: ar.c:1056
+#: ar.c:1058
#, c-format
msgid "Cannot convert existing thin library %s to normal format"
msgstr "Kan inte konvertera ett befintligt tunt bibliotek %s till normalt format"
-#: ar.c:1088 ar.c:1185 ar.c:1507 objcopy.c:3606
+#: ar.c:1090 ar.c:1190 ar.c:1512 objcopy.c:3612
#, c-format
msgid "internal stat error on %s"
msgstr "internt stat-fel för %s"
-#: ar.c:1107 ar.c:1211
+#: ar.c:1109 ar.c:1216
#, c-format
msgid "%s is not a valid archive"
msgstr "%s är inte ett giltigt arkiv"
-#: ar.c:1135
+#: ar.c:1137
#, c-format
msgid "illegal output pathname for archive member: %s, using '%s' instead"
msgstr "otillÃ¥ten utmatningssökväg för arkivmedlem: %s, använder â€%s†istället"
-#: ar.c:1259
+#: ar.c:1264
msgid "could not create temporary file whilst writing archive"
msgstr "kunde inte skapa en temporärfil när arkivet skrevs"
-#: ar.c:1410
+#: ar.c:1415
#, c-format
msgid "No member named `%s'\n"
msgstr "Ingen medlem heter â€%sâ€\n"
-#: ar.c:1460
+#: ar.c:1465
#, c-format
msgid "no entry %s in archive %s!"
msgstr "ingen post %s i arkiv %s!"
# archive map verkar vara vad indexet kallas i källkoden
-#: ar.c:1620
+#: ar.c:1625
#, c-format
msgid "%s: no archive map to update"
msgstr "%s: inget index att uppdatera"
@@ -582,7 +587,7 @@ msgstr " Inga emuleringsspecifika flaggor\n"
msgid " emulation options: \n"
msgstr " emuleringsflaggor:\n"
-#: bucomm.c:43 bucomm.c:77
+#: bucomm.c:43 bucomm.c:76
msgid "cause of error unknown"
msgstr "orsak till felet okänd"
@@ -652,17 +657,17 @@ msgstr "<tidsdata trasig>"
msgid "%s: bad number: %s"
msgstr "%s: felaktigt tal: %s"
-#: bucomm.c:607 strings.c:402
+#: bucomm.c:607 strings.c:453
#, c-format
msgid "'%s': No such file"
msgstr "â€%sâ€: Filen finns inte"
-#: bucomm.c:609 strings.c:404
+#: bucomm.c:609 strings.c:455
#, c-format
msgid "Warning: could not locate '%s'. reason: %s"
msgstr "Varning: kunde inte hitta â€%sâ€. orsak: %s"
-#: bucomm.c:613 strings.c:410
+#: bucomm.c:613 strings.c:461
#, c-format
msgid "Warning: '%s' is a directory"
msgstr "Varning: â€%s†är en katalog"
@@ -782,7 +787,7 @@ msgstr "Lista över symboler"
msgid "Symbol %s, tag %d, number %d"
msgstr "Symbol %s, tagg %d, nummer %d"
-#: coffdump.c:345 readelf.c:18461 readelf.c:18552
+#: coffdump.c:345 readelf.c:18836 readelf.c:18927
#, c-format
msgid "Type"
msgstr "Typ"
@@ -836,7 +841,7 @@ msgstr "<ingen symbol>"
msgid "#sources %d"
msgstr "antal källor %d"
-#: coffdump.c:462 sysdump.c:642
+#: coffdump.c:462 sysdump.c:648
#, c-format
msgid "Usage: %s [option(s)] in-file\n"
msgstr "Användning: %s [flaggor] infil\n"
@@ -861,7 +866,7 @@ msgstr ""
" -v --version Visa programmets versionsinformation\n"
"\n"
-#: coffdump.c:532 srconv.c:1793 sysdump.c:705
+#: coffdump.c:532 srconv.c:1793 sysdump.c:711
msgid "no input file specified"
msgstr "ingen infil valdes"
@@ -1009,7 +1014,7 @@ msgstr "En variabeldefinition påträffad utan en räckvidd"
msgid "%s: is not a COFF format file"
msgstr "%s: är inte en fil i COFF-format"
-#: cxxfilt.c:124 nm.c:324 objdump.c:390
+#: cxxfilt.c:124 nm.c:379 objdump.c:405
#, c-format
msgid "Report bugs to %s.\n"
msgstr ""
@@ -1105,7 +1110,7 @@ msgstr "debug_find_named_type: ingen aktuell kompileringsenhet"
msgid "debug_get_real_type: circular debug information for %s\n"
msgstr "debug_get_real_type: %s har cirkulär felsökningsinformation\n"
-#: debug.c:2484
+#: debug.c:2490
msgid "debug_write_type: illegal type encountered"
msgstr "debug_write_type: påträffade en ogiltig typ"
@@ -1133,262 +1138,262 @@ msgstr "Def-filen är bearbetad"
msgid "Syntax error in def file %s:%d"
msgstr "Syntaktiskt fel i def-fil %s:%d"
-#: dlltool.c:1034
+#: dlltool.c:1032
#, c-format
msgid "%s: Path components stripped from image name, '%s'."
msgstr "%s: Sökvägskomponenter borttagna frÃ¥n avbildsnamnet, â€%sâ€."
-#: dlltool.c:1052
+#: dlltool.c:1050
#, c-format
msgid "NAME: %s base: %x"
msgstr "NAME: %s bas: %x"
-#: dlltool.c:1055 dlltool.c:1076
+#: dlltool.c:1053 dlltool.c:1074
msgid "Can't have LIBRARY and NAME"
msgstr "Kan inte ha både LIBRARY och NAME"
-#: dlltool.c:1073
+#: dlltool.c:1071
#, c-format
msgid "LIBRARY: %s base: %x"
msgstr "LIBRARY: %s bas: %x"
-#: dlltool.c:1228
+#: dlltool.c:1226
#, c-format
msgid "VERSION %d.%d\n"
msgstr "VERSION %d.%d\n"
-#: dlltool.c:1276
+#: dlltool.c:1274
#, c-format
msgid "run: %s %s"
msgstr "kör: %s %s"
-#: dlltool.c:1317 resrc.c:288
+#: dlltool.c:1315 resrc.c:288
#, c-format
msgid "wait: %s"
msgstr "wait: %s"
-#: dlltool.c:1322 dllwrap.c:416 resrc.c:293
+#: dlltool.c:1320 dllwrap.c:416 resrc.c:293
#, c-format
msgid "subprocess got fatal signal %d"
msgstr "subprocessen fick fatal signal %d"
-#: dlltool.c:1328 dllwrap.c:423 resrc.c:300
+#: dlltool.c:1326 dllwrap.c:423 resrc.c:300
#, c-format
msgid "%s exited with status %d"
msgstr "%s avslutade med status %d"
-#: dlltool.c:1359
+#: dlltool.c:1357
#, c-format
msgid "Sucking in info from %s section in %s"
msgstr "Suger åt mig info från sektion %s i %s"
-#: dlltool.c:1499
+#: dlltool.c:1497
#, c-format
msgid "Excluding symbol: %s"
msgstr "Undantar symbol: %s"
-#: dlltool.c:1588 dlltool.c:1599 nm.c:1172 nm.c:1183 nm.c:1193
+#: dlltool.c:1586 dlltool.c:1597 nm.c:1416 nm.c:1427 nm.c:1437
#, c-format
msgid "%s: no symbols"
msgstr "%s: inga symboler"
#. FIXME: we ought to read in and block out the base relocations.
-#: dlltool.c:1625
+#: dlltool.c:1623
#, c-format
msgid "Done reading %s"
msgstr "Klar med att läsa %s"
-#: dlltool.c:1635
+#: dlltool.c:1633
#, c-format
msgid "Unable to open object file: %s: %s"
msgstr "Kan inte öppna objektfilen: %s: %s"
-#: dlltool.c:1638
+#: dlltool.c:1636
#, c-format
msgid "Scanning object file %s"
msgstr "Avläser objektfil %s"
-#: dlltool.c:1658
+#: dlltool.c:1656
#, c-format
msgid "Cannot produce mcore-elf dll from archive file: %s"
msgstr "Kan inte producera en mcore-elf-dll från arkivfil: %s"
-#: dlltool.c:1760
+#: dlltool.c:1758
msgid "Adding exports to output file"
msgstr "Lägger till exporter till utfilen"
-#: dlltool.c:1812
+#: dlltool.c:1810
msgid "Added exports to output file"
msgstr "La till exporter till utfilen"
-#: dlltool.c:1980
+#: dlltool.c:1978
#, c-format
msgid "Generating export file: %s"
msgstr "Genererar exportfil: %s"
-#: dlltool.c:1985
+#: dlltool.c:1983
#, c-format
msgid "Unable to open temporary assembler file: %s"
msgstr "Kan inte öppna temporär assemblerfil: %s"
-#: dlltool.c:1990
+#: dlltool.c:1988
#, c-format
msgid "Opened temporary file: %s"
msgstr "Öppnade temporär fil: %s"
-#: dlltool.c:2166
+#: dlltool.c:2164
msgid "failed to read the number of entries from base file"
msgstr "misslyckades att läsa antalet poster från basfilen"
-#: dlltool.c:2217
+#: dlltool.c:2215
msgid "Generated exports file"
msgstr "Genererade exportfil"
-#: dlltool.c:2375
+#: dlltool.c:2373
#, c-format
msgid "bfd_open failed open stub file: %s: %s"
msgstr "bfd_open lyckades inte öppna stubbfilen: %s: %s"
-#: dlltool.c:2379
+#: dlltool.c:2377
#, c-format
msgid "Creating stub file: %s"
msgstr "Skapar stubbfil: %s"
-#: dlltool.c:2693
+#: dlltool.c:2691
#, c-format
msgid "bfd_open failed reopen stub file: %s: %s"
msgstr "bfd_open lyckades inte återöppna stubbfil: %s: %s"
-#: dlltool.c:2707 dlltool.c:2786
+#: dlltool.c:2705 dlltool.c:2784
#, c-format
msgid "failed to open temporary head file: %s"
msgstr "lyckades inte öppna temporär huvudfil: %s"
-#: dlltool.c:2771 dlltool.c:2861
+#: dlltool.c:2769 dlltool.c:2859
#, c-format
msgid "failed to open temporary head file: %s: %s"
msgstr "lyckades inte öppna temporär huvudfil: %s: %s"
-#: dlltool.c:2876
+#: dlltool.c:2874
#, c-format
msgid "failed to open temporary tail file: %s"
msgstr "lyckades inte öppna temporär svansfil: %s"
-#: dlltool.c:2912
+#: dlltool.c:2910
#, c-format
msgid "failed to open temporary tail file: %s: %s"
msgstr "lyckades inte öppna temporär svansfil: %s: %s"
-#: dlltool.c:2935
+#: dlltool.c:2933
#, c-format
msgid "Can't create .lib file: %s: %s"
msgstr "Kan inte skapa .lib-fil: %s: %s"
-#: dlltool.c:2939
+#: dlltool.c:2937
#, c-format
msgid "Creating library file: %s"
msgstr "Skapar biblioteksfil: %s"
-#: dlltool.c:3026 dlltool.c:3032
+#: dlltool.c:3024 dlltool.c:3030
#, c-format
msgid "cannot delete %s: %s"
msgstr "kan inte radera %s: %s"
-#: dlltool.c:3038
+#: dlltool.c:3036
msgid "Created lib file"
msgstr "Skapade biblioteksfilen"
-#: dlltool.c:3244
+#: dlltool.c:3242
#, c-format
msgid "Can't open .lib file: %s: %s"
msgstr "Kan inte öppna .lib-fil: %s: %s"
-#: dlltool.c:3252 dlltool.c:3274
+#: dlltool.c:3250 dlltool.c:3272
#, c-format
msgid "%s is not a library"
msgstr "%s är inte ett bibliotek"
-#: dlltool.c:3292
+#: dlltool.c:3290
#, c-format
msgid "Import library `%s' specifies two or more dlls"
msgstr "importbiblioteket â€%s†anger tvÃ¥ eller flera dll:er"
-#: dlltool.c:3303
+#: dlltool.c:3301
#, c-format
msgid "Unable to determine dll name for `%s' (not an import library?)"
msgstr "Kan inte avgöra dll-namnet för â€%s†(inte ett importbibliotek?)"
-#: dlltool.c:3529
+#: dlltool.c:3527
#, c-format
msgid "Warning, ignoring duplicate EXPORT %s %d,%d"
msgstr "Varning, ignorerar dubbel EXPORT %s %d,%d"
-#: dlltool.c:3535
+#: dlltool.c:3533
#, c-format
msgid "Error, duplicate EXPORT with ordinals: %s"
msgstr "Fel, dubbel EXPORT med ordningstal: %s"
-#: dlltool.c:3638
+#: dlltool.c:3636
msgid "Processing definitions"
msgstr "Bearbetar definitioner"
-#: dlltool.c:3665
+#: dlltool.c:3663
msgid "Processed definitions"
msgstr "Definitionerna är bearbetade"
#. xgetext:c-format
-#: dlltool.c:3672 dllwrap.c:477
+#: dlltool.c:3670 dllwrap.c:477
#, c-format
msgid "Usage %s <option(s)> <object-file(s)>\n"
msgstr "Användning: %s <flaggor> <objektfil(er)>\n"
#. xgetext:c-format
-#: dlltool.c:3674
+#: dlltool.c:3672
#, c-format
msgid " -m --machine <machine> Create as DLL for <machine>. [default: %s]\n"
msgstr " -m --machine <maskin> Skapa som DLL för <maskin>. [förval: %s]\n"
-#: dlltool.c:3675
+#: dlltool.c:3673
#, c-format
msgid " possible <machine>: arm[_interwork], i386, mcore[-elf]{-le|-be}, thumb\n"
msgstr " möjliga <maskin>: arm[_interwork], i386, mcore[-elf]{-le|-be}, thumb\n"
-#: dlltool.c:3676
+#: dlltool.c:3674
#, c-format
msgid " -e --output-exp <outname> Generate an export file.\n"
msgstr " -e --output-exp <utnamn> Generera en exportfil.\n"
-#: dlltool.c:3677
+#: dlltool.c:3675
#, c-format
msgid " -l --output-lib <outname> Generate an interface library.\n"
msgstr " -l --output-lib <utnamn> Generera ett gränssnittsbibliotek.\n"
-#: dlltool.c:3678
+#: dlltool.c:3676
#, c-format
msgid " -y --output-delaylib <outname> Create a delay-import library.\n"
msgstr " -y --output-delaylib <utnamn> Skapa ett bibliotek för fördröjd import.\n"
-#: dlltool.c:3679
+#: dlltool.c:3677
#, c-format
msgid " -a --add-indirect Add dll indirects to export file.\n"
msgstr " -a --add-indirect Lägg till indirekta dll till exportfilen.\n"
-#: dlltool.c:3680
+#: dlltool.c:3678
#, c-format
msgid " -D --dllname <name> Name of input dll to put into interface lib.\n"
msgstr " -D --dllname <namn> Namn på indata-dll att infoga i gränssnittsbiblioteket.\n"
-#: dlltool.c:3681
+#: dlltool.c:3679
#, c-format
msgid " -d --input-def <deffile> Name of .def file to be read in.\n"
msgstr " -d --input-def <def-fil> Namn på .def-fil att läsa in.\n"
-#: dlltool.c:3682
+#: dlltool.c:3680
#, c-format
msgid " -z --output-def <deffile> Name of .def file to be created.\n"
msgstr " -z --output-def <def-fil> Namn på .def-fil att skapa.\n"
-#: dlltool.c:3683
+#: dlltool.c:3681
#, c-format
msgid " --export-all-symbols Export all symbols to .def\n"
msgstr " --export-all-symbols Exportera alla symboler till .def\n"
@@ -1397,7 +1402,7 @@ msgstr " --export-all-symbols Exportera alla symboler till .def\n"
# extra i den engelska texten för att två flaggor är för långa. I den
# svenska översättningen är de indenterade tre tecken extra för att
# den ena flaggan blev ytterligare ett tecken för lång.
-#: dlltool.c:3684
+#: dlltool.c:3682
#, c-format
msgid " --no-export-all-symbols Only export listed symbols\n"
msgstr " --no-export-all-symbols Exportera endast anvisade symboler\n"
@@ -1406,173 +1411,173 @@ msgstr " --no-export-all-symbols Exportera endast anvisade symboler\n"
# extra i den engelska texten för att två flaggor är för långa. I den
# svenska översättningen är de indenterade tre tecken extra för att
# den ena flaggan blev ytterligare ett tecken för lång.
-#: dlltool.c:3685
+#: dlltool.c:3683
#, c-format
msgid " --exclude-symbols <list> Don't export <list>\n"
msgstr " --exclude-symbols <lista> Exportera inte symboler i <lista>\n"
-#: dlltool.c:3686
+#: dlltool.c:3684
#, c-format
msgid " --no-default-excludes Clear default exclude symbols\n"
msgstr " --no-default-excludes LÃ¥t bli att inte exportera vissa standardsymboler\n"
-#: dlltool.c:3687
+#: dlltool.c:3685
#, c-format
msgid " -b --base-file <basefile> Read linker generated base file.\n"
msgstr " -b --base-file <basfil> Läs den länkgenererade basfilen.\n"
-#: dlltool.c:3688
+#: dlltool.c:3686
#, c-format
msgid " -x --no-idata4 Don't generate idata$4 section.\n"
msgstr " -x --no-idata4 Generera ingen idata$4-sektion.\n"
-#: dlltool.c:3689
+#: dlltool.c:3687
#, c-format
msgid " -c --no-idata5 Don't generate idata$5 section.\n"
msgstr " -c --no-idata5 Generera ingen idata$5-sektion.\n"
-#: dlltool.c:3690
+#: dlltool.c:3688
#, c-format
msgid " --use-nul-prefixed-import-tables Use zero prefixed idata$4 and idata$5.\n"
msgstr " --use-nul-prefixed-import-tables Använd idata$4 och idata$5 med nollprefix.\n"
-#: dlltool.c:3691
+#: dlltool.c:3689
#, c-format
msgid " -U --add-underscore Add underscores to all symbols in interface library.\n"
msgstr " -U --add-underscore Lägg till understrykningstecken till alla symboler i gränssnittsbiblioteket.\n"
-#: dlltool.c:3692
+#: dlltool.c:3690
#, c-format
msgid " --add-stdcall-underscore Add underscores to stdcall symbols in interface library.\n"
msgstr " --add-stdcall-underscore Lägg till understrykningstecken till stdcall-symboler i gränssnittsbiblioteket.\n"
-#: dlltool.c:3693
+#: dlltool.c:3691
#, c-format
msgid " --no-leading-underscore All symbols shouldn't be prefixed by an underscore.\n"
msgstr " --no-leading-underscore Ha inte ett understrykningsprefix på alla symboler.\n"
-#: dlltool.c:3694
+#: dlltool.c:3692
#, c-format
msgid " --leading-underscore All symbols should be prefixed by an underscore.\n"
msgstr " --leading-underscore Ha ett understrykningsprefix på alla symboler.\n"
-#: dlltool.c:3695
+#: dlltool.c:3693
#, c-format
msgid " -k --kill-at Kill @<n> from exported names.\n"
msgstr " -k --kill-at Utplåna @<n> från exporterade namn.\n"
-#: dlltool.c:3696
+#: dlltool.c:3694
#, c-format
msgid " -A --add-stdcall-alias Add aliases without @<n>.\n"
msgstr " -A --add-stdcall-alias Tillför alias utan @<n>.\n"
-#: dlltool.c:3697
+#: dlltool.c:3695
#, c-format
msgid " -p --ext-prefix-alias <prefix> Add aliases with <prefix>.\n"
msgstr " -p --ext-prefix-alias <prefix> Lägg till alias med <prefix>.\n"
-#: dlltool.c:3698
+#: dlltool.c:3696
#, c-format
msgid " -S --as <name> Use <name> for assembler.\n"
msgstr " -S --as <namn> Använd <namn> som assemblerare.\n"
-#: dlltool.c:3699
+#: dlltool.c:3697
#, c-format
msgid " -f --as-flags <flags> Pass <flags> to the assembler.\n"
msgstr " -f --as-flags <flaggor> Skicka <flaggor> till assembleraren.\n"
-#: dlltool.c:3700
+#: dlltool.c:3698
#, c-format
msgid " -C --compat-implib Create backward compatible import library.\n"
msgstr " -C --compat-implib Skapa bakåtkompatibelt importbibliotek.\n"
-#: dlltool.c:3701
+#: dlltool.c:3699
#, c-format
msgid " -n --no-delete Keep temp files (repeat for extra preservation).\n"
msgstr " -n --no-delete Behåll temporärfiler (repetera för ökat antal).\n"
-#: dlltool.c:3702
+#: dlltool.c:3700
#, c-format
msgid " -t --temp-prefix <prefix> Use <prefix> to construct temp file names.\n"
msgstr " -t --temp-prefix <prefix> Använd <prefix> för att skapa temporärfilnamn.\n"
-#: dlltool.c:3703
+#: dlltool.c:3701
#, c-format
msgid " -I --identify <implib> Report the name of the DLL associated with <implib>.\n"
msgstr " -I --identify <impbib> Rapportera namnet på DLL:en som hör till <impbib>.\n"
-#: dlltool.c:3704
+#: dlltool.c:3702
#, c-format
msgid " --identify-strict Causes --identify to report error when multiple DLLs.\n"
msgstr " --identify-strict FÃ¥r --identify att rapportera fel vid flera DLL:er.\n"
-#: dlltool.c:3705
+#: dlltool.c:3703
#, c-format
msgid " -v --verbose Be verbose.\n"
msgstr " -v --verbose Beskriv utförligt.\n"
-#: dlltool.c:3706
+#: dlltool.c:3704
#, c-format
msgid " -V --version Display the program version.\n"
msgstr " -V --version Visa versionsinformation om programmet.\n"
-#: dlltool.c:3707
+#: dlltool.c:3705
#, c-format
msgid " -h --help Display this information.\n"
msgstr " -h --help Visa den här informationen.\n"
-#: dlltool.c:3708
+#: dlltool.c:3706
#, c-format
msgid " @<file> Read options from <file>.\n"
msgstr " -@<fil> Läs flaggor från <fil>.\n"
-#: dlltool.c:3710
+#: dlltool.c:3708
#, c-format
msgid " -M --mcore-elf <outname> Process mcore-elf object files into <outname>.\n"
msgstr " -M --mcore-elf <utnamn> Behandla mcore-elf-objektfiler till <utnamn>.\n"
-#: dlltool.c:3711
+#: dlltool.c:3709
#, c-format
msgid " -L --linker <name> Use <name> as the linker.\n"
msgstr " -L --linker <namn> Använd <namn> som länkare.\n"
# Indenteringen blir fel här för <flaggor> är för långt.
-#: dlltool.c:3712
+#: dlltool.c:3710
#, c-format
msgid " -F --linker-flags <flags> Pass <flags> to the linker.\n"
msgstr " -F --linker-flags <flaggor> Skicka <flaggor> till länkaren.\n"
-#: dlltool.c:3856
+#: dlltool.c:3854
#, c-format
msgid "Unable to open def-file: %s"
msgstr "Kan inte öppna def-filen: %s"
-#: dlltool.c:3861
+#: dlltool.c:3859
#, c-format
msgid "Path components stripped from dllname, '%s'."
msgstr "Sökvägskomponenter tas bort frÃ¥n dllnamnet, â€%sâ€."
-#: dlltool.c:3909
+#: dlltool.c:3907
#, c-format
msgid "Unable to open base-file: %s"
msgstr "Kan inte öppna basfilen: %s"
-#: dlltool.c:3944
+#: dlltool.c:3956
#, c-format
msgid "Machine '%s' not supported"
msgstr "Maskin â€%s†hanteras inte"
-#: dlltool.c:4024
+#: dlltool.c:4036
#, c-format
msgid "Warning, machine type (%d) not supported for delayimport."
msgstr "Varning, maskintypen (%d) stödjs inte för delayimport."
-#: dlltool.c:4092 dllwrap.c:206
+#: dlltool.c:4104 dllwrap.c:206
#, c-format
msgid "Tried file: %s"
msgstr "Provade fil: %s"
-#: dlltool.c:4099 dllwrap.c:213
+#: dlltool.c:4111 dllwrap.c:213
#, c-format
msgid "Using file: %s"
msgstr "Använder fil: %s"
@@ -2147,278 +2152,278 @@ msgstr "Okänt AT-värde: %lx"
msgid "Corrupt attribute block length: %lx\n"
msgstr "trasigt längd på attributblock: %lx\n"
-#: dwarf.c:2094
+#: dwarf.c:2095
#, c-format
msgid "Unable to resolve ref_addr form: uvalue %lx > section size %lx (%s)\n"
msgstr "Kan inte slå upp ref_addr-form: uvalue %lx > sektionsstorleken %lx (%s)\n"
-#: dwarf.c:2111
+#: dwarf.c:2112
#, c-format
-msgid "Unable to resolve ref form: uvalue %lx + cu_offset %lx > section size %lx\n"
-msgstr "Kan inte slå upp ref-form: uvalue %lx + cu_offset %lx > sektionsstorleken %lx\n"
+msgid "Unable to resolve ref form: uvalue %lx + cu_offset %lx > CU size %lx\n"
+msgstr "Kan inte slå upp ref-form: uvalue %lx + cu_offset %lx > CU-storlek %lx\n"
-#: dwarf.c:2121
+#: dwarf.c:2122
#, c-format
msgid "Unexpected form %lx encountered whilst finding abbreviation for type\n"
msgstr "Oväntad form %lx påträffad under sökande efter förkortning för typen\n"
-#: dwarf.c:2130
+#: dwarf.c:2131
#, c-format
msgid "Unable to find abbreviations for CU offset %#lx\n"
msgstr "Kan inte hitta förkortningar för CU-avstånd %#lx\n"
-#: dwarf.c:2135
+#: dwarf.c:2136
#, c-format
msgid "Empty abbreviation list encountered for CU offset %lx\n"
msgstr "Tom förkortningslista påträffad för CU-avstånd %lx\n"
-#: dwarf.c:2160
+#: dwarf.c:2161
#, c-format
msgid "Unable to find entry for abbreviation %lu\n"
msgstr "Kan inte hitta posten för förkortningen %lu\n"
-#: dwarf.c:2310
+#: dwarf.c:2313
msgid "corrupt discr_list - not using a block form\n"
msgstr "trasig discr_list – använder inte en blockform\n"
-#: dwarf.c:2317
+#: dwarf.c:2320
msgid "corrupt discr_list - block not long enough\n"
msgstr "trasig discr_list – blocket är inte långt nog\n"
-#: dwarf.c:2361
+#: dwarf.c:2355
#, c-format
msgid "corrupt discr_list - unrecognized discriminant byte %#x\n"
msgstr "trasig discr_list – okänd diskriminantbyte %#x\n"
-#: dwarf.c:2402
+#: dwarf.c:2396
msgid "Corrupt attribute\n"
msgstr "Trasigt attribut\n"
-#: dwarf.c:2428
+#: dwarf.c:2422
msgid "Internal error: DW_FORM_ref_addr is not supported in DWARF version 1.\n"
msgstr "Internt fel: DW_FORM_ref_addr stödjs inte i DWARF version 1.\n"
-#: dwarf.c:2610
+#: dwarf.c:2604
msgid "Block ends prematurely\n"
msgstr "Blocket tar slut i förtid\n"
#. We have already displayed the form name.
-#: dwarf.c:2640 dwarf.c:2655 dwarf.c:2678
+#: dwarf.c:2634 dwarf.c:2649 dwarf.c:2672
#, c-format
msgid "%c(offset: 0x%s): %s"
msgstr "%c(avstånd: 0x%s): %s"
-#: dwarf.c:2644
+#: dwarf.c:2638
#, c-format
msgid "%c(indirect string, offset: 0x%s): %s"
msgstr "%c(indirekt sträng, avstånd: 0x%s): %s"
-#: dwarf.c:2659
+#: dwarf.c:2653
#, c-format
msgid "%c(indirect line string, offset: 0x%s): %s"
msgstr "%c(indirekt radsträng, avstånd: 0x%s): %s"
-#: dwarf.c:2682
+#: dwarf.c:2676
#, c-format
msgid "%c(indexed string: 0x%s): %s"
msgstr "%c(indexerad sträng: 0x%s): %s"
#. We have already displayed the form name.
-#: dwarf.c:2693
+#: dwarf.c:2687
#, c-format
msgid "%c(offset: 0x%s) %s"
msgstr "%c(avstånd: 0x%s) %s"
-#: dwarf.c:2697
+#: dwarf.c:2691
#, c-format
msgid "%c(alt indirect string, offset: 0x%s) %s"
msgstr "%c(alt indirekt sträng, avstånd: 0x%s) %s"
#. We have already displayed the form name.
-#: dwarf.c:2735
+#: dwarf.c:2729
#, c-format
msgid "%c(index: 0x%s): %s"
msgstr "%c(index: 0x%s): %s"
-#: dwarf.c:2739
+#: dwarf.c:2733
#, c-format
msgid "%c(addr_index: 0x%s): %s"
msgstr "%c(addr_index: 0x%s): %s"
-#: dwarf.c:2751
+#: dwarf.c:2745
#, c-format
msgid "Unrecognized form: 0x%lx\n"
msgstr "Okänd formtyp: 0x%lx\n"
-#: dwarf.c:2812
+#: dwarf.c:2808
msgid "More location offset attributes than DW_AT_GNU_locview attributes\n"
msgstr "Fler platsavståndsattribut än DW_AT_GNU_locview-attribut\n"
-#: dwarf.c:2824
+#: dwarf.c:2820
msgid "More DW_AT_GNU_locview attributes than location offset attributes\n"
msgstr "Fler DW_AT_GNU_locview-attribut än platsavståndsattribut\n"
-#: dwarf.c:2893 dwarf.c:2925 dwarf.c:2940
+#: dwarf.c:2889 dwarf.c:2921 dwarf.c:2936
#, c-format
msgid "Unsupported form (%s) for attribute %s\n"
msgstr "Okänd form (%s) för attributet %s\n"
-#: dwarf.c:2985
+#: dwarf.c:2983
#, c-format
msgid "(not inlined)"
msgstr "(inte inline:ad)"
-#: dwarf.c:2988
+#: dwarf.c:2986
#, c-format
msgid "(inlined)"
msgstr "(inline:ad)"
-#: dwarf.c:2991
+#: dwarf.c:2989
#, c-format
msgid "(declared as inline but ignored)"
msgstr "(deklarerad som inline men ignorerad)"
-#: dwarf.c:2994
+#: dwarf.c:2992
#, c-format
msgid "(declared as inline and inlined)"
msgstr "(deklarerad som inline och inline:ad)"
-#: dwarf.c:2997
+#: dwarf.c:2995
#, c-format
msgid " (Unknown inline attribute value: %s)"
msgstr " (Okänt inline-attributvärde: %s)"
-#: dwarf.c:3054
+#: dwarf.c:3052
#, c-format
msgid "(implementation defined: %s)"
msgstr "(implementationsdefinierad: %s)"
-#: dwarf.c:3057
+#: dwarf.c:3055
#, c-format
msgid "(Unknown: %s)"
msgstr "(Okänd: %s)"
-#: dwarf.c:3102
+#: dwarf.c:3100
#, c-format
msgid "(user defined type)"
msgstr "(användardefinierad typ)"
-#: dwarf.c:3104
+#: dwarf.c:3102
#, c-format
msgid "(unknown type)"
msgstr "(okänd typ)"
-#: dwarf.c:3117
+#: dwarf.c:3115
#, c-format
msgid "(unknown accessibility)"
msgstr "(okänd åtkomlighet)"
-#: dwarf.c:3129
+#: dwarf.c:3127
#, c-format
msgid "(unknown visibility)"
msgstr "(okänd synlighet)"
-#: dwarf.c:3142
+#: dwarf.c:3140
#, c-format
msgid "(user specified)"
msgstr "(användarspecificerad)"
-#: dwarf.c:3144
+#: dwarf.c:3142
#, c-format
msgid "(unknown endianity)"
msgstr "(okänd byteordning)"
-#: dwarf.c:3156
+#: dwarf.c:3154
#, c-format
msgid "(unknown virtuality)"
msgstr "(okänd virtualitet)"
-#: dwarf.c:3168
+#: dwarf.c:3166
#, c-format
msgid "(unknown case)"
msgstr "(okänt fall)"
-#: dwarf.c:3186
+#: dwarf.c:3184
#, c-format
msgid "(user defined)"
msgstr "(användardefinierad)"
-#: dwarf.c:3188
+#: dwarf.c:3186
#, c-format
msgid "(unknown convention)"
msgstr "(okänd konvention)"
-#: dwarf.c:3197
+#: dwarf.c:3195
#, c-format
msgid "(undefined)"
msgstr "(odefinierad)"
-#: dwarf.c:3207
+#: dwarf.c:3205
#, c-format
msgid "(unsigned)"
msgstr "(teckenlös)"
-#: dwarf.c:3208
+#: dwarf.c:3206
#, c-format
msgid "(leading overpunch)"
msgstr "(inledande överhålslag)"
-#: dwarf.c:3209
+#: dwarf.c:3207
#, c-format
msgid "(trailing overpunch)"
msgstr "(avslutande överhålslag)"
-#: dwarf.c:3210
+#: dwarf.c:3208
#, c-format
msgid "(leading separate)"
msgstr "(inledning separat)"
-#: dwarf.c:3211
+#: dwarf.c:3209
#, c-format
msgid "(trailing separate)"
msgstr "(avslutning separat)"
-#: dwarf.c:3212 dwarf.c:3223
+#: dwarf.c:3210 dwarf.c:3221
#, c-format
msgid "(unrecognised)"
msgstr "(okänd)"
-#: dwarf.c:3220
+#: dwarf.c:3218
#, c-format
msgid "(no)"
msgstr "(nej)"
-#: dwarf.c:3221
+#: dwarf.c:3219
#, c-format
msgid "(in class)"
msgstr "(i klass)"
-#: dwarf.c:3222
+#: dwarf.c:3220
#, c-format
msgid "(out of class)"
msgstr "(utanför klass)"
-#: dwarf.c:3254
+#: dwarf.c:3252
#, c-format
msgid " (location list)"
msgstr " (platslista)"
-#: dwarf.c:3275 dwarf.c:6444 dwarf.c:6614 dwarf.c:6789
+#: dwarf.c:3273 dwarf.c:6449 dwarf.c:6620 dwarf.c:6796
#, c-format
msgid " [without DW_AT_frame_base]"
msgstr " [utan DW_AT_frame_base]"
-#: dwarf.c:3305
+#: dwarf.c:3303
#, c-format
msgid "Offset %s used as value for DW_AT_import attribute of DIE at offset 0x%lx is too big.\n"
msgstr "Avståndet %s som används som ett värde till attributet DW_AT_import på DIE vid avståndet 0x%lx är för stort.\n"
-#: dwarf.c:3311
+#: dwarf.c:3309
#, c-format
msgid "\t[Abbrev Number: %ld"
msgstr "\t[Förkortningsnummer: %ld"
-#: dwarf.c:3406
+#: dwarf.c:3404
#, c-format
msgid ""
"Raw dump of debug contents of section %s (loaded from %s):\n"
@@ -2427,7 +2432,7 @@ msgstr ""
"Rå utskrift av felsökningsinnehåll i sektion %s (inläst från %s):\n"
"\n"
-#: dwarf.c:3409
+#: dwarf.c:3407
#, c-format
msgid ""
"Raw dump of debug contents of section %s:\n"
@@ -2436,7 +2441,7 @@ msgstr ""
"Rå utskrift av felsökningsinnehåll i sektion %s:\n"
"\n"
-#: dwarf.c:3414
+#: dwarf.c:3412
#, c-format
msgid ""
"Contents of the %s section (loaded from %s):\n"
@@ -2445,7 +2450,7 @@ msgstr ""
"%s-sektionens innehåll (inläst från %s):\n"
"\n"
-#: dwarf.c:3417
+#: dwarf.c:3415
#, c-format
msgid ""
"Contents of the %s section:\n"
@@ -2454,15 +2459,15 @@ msgstr ""
"%s-sektionens innehåll:\n"
"\n"
-#: dwarf.c:3460
+#: dwarf.c:3458
#, c-format
msgid "Reserved length value (0x%s) found in section %s\n"
msgstr "Reserverat längdvärde (0x%s) hittat i sektionen %s\n"
-#: dwarf.c:3470
+#: dwarf.c:3468
#, c-format
-msgid "Corrupt unit length (0x%s) found in section %s\n"
-msgstr "Trasig enhetslängd (0x%s) upptäckt i sektionen %s\n"
+msgid "Corrupt unit length (got 0x%s expected at most 0x%s) in section %s\n"
+msgstr "Trasig enhetslängd (fick 0x%s men högst 0x%s förväntades) i sektionen %s\n"
#: dwarf.c:3479
#, c-format
@@ -2606,7 +2611,7 @@ msgstr "Längdfältet (0x%lx) i debug_line-huvudet är trasig — sektionen är
msgid "Only DWARF version 2, 3, 4 and 5 line info is currently supported.\n"
msgstr "Endast radinfo från DWARF 2, 3, 4 och 5 hanteras för närvarande.\n"
-#: dwarf.c:4126 dwarf.c:6882 dwarf.c:7747
+#: dwarf.c:4126 dwarf.c:6889 dwarf.c:7763
#, c-format
msgid "The %s section contains unsupported segment selector size: %d.\n"
msgstr "%s-sektionen innehåller en segmentvalsstorlek som inte stödjs: %d.\n"
@@ -2767,7 +2772,7 @@ msgstr " Kontrollsumma:"
msgid "Partial .debug_line. section encountered without a prior full .debug_line section\n"
msgstr "Partiell .debug_line-sektion påträffad utan en föregående fullständig .debug_line-sektion\n"
-#: dwarf.c:4412 dwarf.c:5962
+#: dwarf.c:4412 dwarf.c:5967
#, c-format
msgid " Offset: 0x%lx\n"
msgstr " Avstånd: 0x%lx\n"
@@ -2997,7 +3002,7 @@ msgstr " Sätt epilogue_begin till sann\n"
msgid " Set ISA to %s\n"
msgstr " Sätt ISA till %s\n"
-#: dwarf.c:4755 dwarf.c:5392
+#: dwarf.c:4755 dwarf.c:5394
#, c-format
msgid " Unknown opcode %d with operands: "
msgstr " Okänd op-kod %d med operand: "
@@ -3043,22 +3048,22 @@ msgstr "CU: ingen katalogtabell\n"
msgid "CU: %s:\n"
msgstr "CU: %s:\n"
-#: dwarf.c:5130 dwarf.c:5430 readelf.c:6373 readelf.c:6470 readelf.c:6488
-#: readelf.c:6506 readelf.c:7306 readelf.c:11504 readelf.c:12169
-#: readelf.c:12182 readelf.c:17545 readelf.c:17577
+#: dwarf.c:5130 dwarf.c:5435 readelf.c:6715 readelf.c:6812 readelf.c:6830
+#: readelf.c:6848 readelf.c:7652 readelf.c:11854 readelf.c:12519
+#: readelf.c:12532 readelf.c:17921 readelf.c:17953
msgid "<unknown>"
msgstr "<okänd>"
-#: dwarf.c:5133 dwarf.c:5322
+#: dwarf.c:5133 dwarf.c:5324
#, c-format
msgid "directory index %u > number of directories %s\n"
msgstr "katalogindex %u > antalet kataloger %s\n"
-#: dwarf.c:5135 dwarf.c:5424 elfcomm.c:777 readelf.c:356 readelf.c:745
-#: readelf.c:7483 readelf.c:8044 readelf.c:10075 readelf.c:12496
-#: readelf.c:12562 readelf.c:12566 readelf.c:12634 readelf.c:12639
-#: readelf.c:16278 readelf.c:16367 readelf.c:16960 readelf.c:16979
-#: readelf.c:17098 readelf.c:17554 readelf.c:18710 readelf.c:18713
+#: dwarf.c:5135 dwarf.c:5429 elfcomm.c:777 readelf.c:389 readelf.c:923
+#: readelf.c:7830 readelf.c:8393 readelf.c:10429 readelf.c:12871
+#: readelf.c:12937 readelf.c:12941 readelf.c:13013 readelf.c:13018
+#: readelf.c:16651 readelf.c:16740 readelf.c:17333 readelf.c:17352
+#: readelf.c:17471 readelf.c:17930 readelf.c:19085 readelf.c:19088
#, c-format
msgid "<corrupt>"
msgstr "<trasig>"
@@ -3083,7 +3088,7 @@ msgstr "CU: trasig filnamnstabell\n"
msgid "UNKNOWN (%u): length %ld\n"
msgstr "OKÄND (%u): längd %ld\n"
-#: dwarf.c:5306
+#: dwarf.c:5308
#, c-format
msgid ""
"\n"
@@ -3092,12 +3097,12 @@ msgstr ""
"\n"
" [Använd filtabellspost %d]\n"
-#: dwarf.c:5310
+#: dwarf.c:5312
#, c-format
msgid "file index %u > number of files %u\n"
msgstr "filindex %u > antalet filer %u\n"
-#: dwarf.c:5311
+#: dwarf.c:5313
#, c-format
msgid ""
"\n"
@@ -3106,7 +3111,7 @@ msgstr ""
"\n"
" <för stort filtabellsindex %u>"
-#: dwarf.c:5317
+#: dwarf.c:5319
#, c-format
msgid ""
"\n"
@@ -3115,7 +3120,7 @@ msgstr ""
"\n"
" [Använd filen %s i katalogtabellpost %d]\n"
-#: dwarf.c:5324
+#: dwarf.c:5326
#, c-format
msgid ""
"\n"
@@ -3124,83 +3129,83 @@ msgstr ""
"\n"
" <för stor katalogtabellpost %u>\n"
-#: dwarf.c:5388
+#: dwarf.c:5390
#, c-format
msgid " Set ISA to %lu\n"
msgstr " Sätt ISA till %lu\n"
-#: dwarf.c:5423
+#: dwarf.c:5428
#, c-format
msgid "corrupt file index %u encountered\n"
msgstr "trasigt filindex %u påträffat\n"
-#: dwarf.c:5592
+#: dwarf.c:5597
msgid "no info"
msgstr "ingen info"
-#: dwarf.c:5593
+#: dwarf.c:5598
msgid "type"
msgstr "typ"
-#: dwarf.c:5594
+#: dwarf.c:5599
msgid "variable"
msgstr "variabel"
-#: dwarf.c:5595
+#: dwarf.c:5600
msgid "function"
msgstr "funktion"
-#: dwarf.c:5596
+#: dwarf.c:5601
msgid "other"
msgstr "annat"
-#: dwarf.c:5597
+#: dwarf.c:5602
msgid "unused5"
msgstr "oanvänd5"
-#: dwarf.c:5598
+#: dwarf.c:5603
msgid "unused6"
msgstr "oanvänd6"
-#: dwarf.c:5599
+#: dwarf.c:5604
msgid "unused7"
msgstr "oanvänd7"
-#: dwarf.c:5637 dwarf.c:7210 dwarf.c:9605
+#: dwarf.c:5642 dwarf.c:7220 dwarf.c:9626
#, c-format
msgid "Debug info is corrupted, %s header at %#lx has length %s\n"
msgstr "Felsökningsinfo är trasig, %s-huvudet vid %#lx har längden %s\n"
-#: dwarf.c:5653 dwarf.c:7225
+#: dwarf.c:5658 dwarf.c:7235
#, c-format
msgid ".debug_info offset of 0x%lx in %s section does not point to a CU header.\n"
msgstr ".debug_info-avstånd på 0x%lx i sektionen %s pekar inte på ett CU-huvud.\n"
-#: dwarf.c:5658
+#: dwarf.c:5663
#, c-format
msgid " Length: %ld\n"
msgstr " längd: %ld\n"
-#: dwarf.c:5660
+#: dwarf.c:5665
#, c-format
msgid " Version: %d\n"
msgstr " version: %d\n"
-#: dwarf.c:5662
+#: dwarf.c:5667
#, c-format
msgid " Offset into .debug_info section: 0x%lx\n"
msgstr " Avstånd in i .debug_info-sektionen: 0x%lx\n"
-#: dwarf.c:5664
+#: dwarf.c:5669
#, c-format
msgid " Size of area in .debug_info section: %ld\n"
msgstr " storl. på omr. i .debug_info-sekt.: %ld\n"
-#: dwarf.c:5673
+#: dwarf.c:5678
msgid "Only DWARF 2 and 3 pubnames are currently supported\n"
msgstr "Endast DWARF 2 och 3 pub.-namn hanteras för närvarande\n"
-#: dwarf.c:5681
+#: dwarf.c:5686
#, c-format
msgid ""
"\n"
@@ -3209,7 +3214,7 @@ msgstr ""
"\n"
" Avstånd Sort Namn\n"
-#: dwarf.c:5683
+#: dwarf.c:5688
#, c-format
msgid ""
"\n"
@@ -3218,217 +3223,217 @@ msgstr ""
"\n"
" Offset\tNamn\n"
-#: dwarf.c:5717
+#: dwarf.c:5722
msgid "s"
msgstr "s"
-#: dwarf.c:5717
+#: dwarf.c:5722
msgid "g"
msgstr "g"
-#: dwarf.c:5775
+#: dwarf.c:5780
#, c-format
msgid " DW_MACINFO_start_file - lineno: %d filenum: %d\n"
msgstr " DW_MACINFO_start_file - rad: %d filnr: %d\n"
-#: dwarf.c:5781
+#: dwarf.c:5786
#, c-format
msgid " DW_MACINFO_end_file\n"
msgstr " DW_MACINFO_end_file\n"
-#: dwarf.c:5788
+#: dwarf.c:5793
#, c-format
msgid " DW_MACINFO_define - lineno : %d macro : %*s\n"
msgstr " DW_MACINFO_define — rad : %d makro : %*s\n"
-#: dwarf.c:5798
+#: dwarf.c:5803
#, c-format
msgid " DW_MACINFO_undef - lineno : %d macro : %*s\n"
msgstr " DW_MACINFO_undef — rad : %d makro : %*s\n"
-#: dwarf.c:5811
+#: dwarf.c:5816
#, c-format
msgid " DW_MACINFO_vendor_ext - constant : %d string : %*s\n"
msgstr " DW_MACINFO_vendor_ext — konstant : %d sträng : %*s\n"
-#: dwarf.c:5955
+#: dwarf.c:5960
#, c-format
msgid "Expected to find a version number of 4 or 5 in section %s but found %d instead\n"
msgstr "Förväntade att hitta ett versionsnummer 4 eller 5 i sektionen %s men hittade %d istället\n"
-#: dwarf.c:5964
+#: dwarf.c:5969
#, c-format
msgid " Version: %d\n"
msgstr " Version: %d\n"
-#: dwarf.c:5965
+#: dwarf.c:5970
#, c-format
msgid " Offset size: %d\n"
msgstr " Avståndsstorlek: %d\n"
-#: dwarf.c:5969
+#: dwarf.c:5974
#, c-format
msgid " Offset into .debug_line: 0x%lx\n"
msgstr " Avstånd in i .debug_info: 0x%lx\n"
-#: dwarf.c:5983
+#: dwarf.c:5988
#, c-format
msgid " Extension opcode arguments:\n"
msgstr " Argument till utökad op-kod:\n"
-#: dwarf.c:5990
+#: dwarf.c:5995
#, c-format
msgid " DW_MACRO_%02x has no arguments\n"
msgstr " DW_MACRO_%02x har inga argument\n"
-#: dwarf.c:5993
+#: dwarf.c:5998
#, c-format
msgid " DW_MACRO_%02x arguments: "
msgstr " DW_MACRO_%02x argument: "
-#: dwarf.c:6019
+#: dwarf.c:6024
#, c-format
msgid "Invalid extension opcode form %s\n"
msgstr "Ogiltig utöknings-opkodform %s\n"
-#: dwarf.c:6036
+#: dwarf.c:6041
msgid ".debug_macro section not zero terminated\n"
msgstr "sektionen .debug_macro är inte nollterminerad\n"
-#: dwarf.c:6050
+#: dwarf.c:6055
#, c-format
msgid " DW_MACRO_define - lineno : %d macro : %*s\n"
msgstr " DW_MACRO_define — radnr : %d makro : %*s\n"
-#: dwarf.c:6060
+#: dwarf.c:6065
#, c-format
msgid " DW_MACRO_undef - lineno : %d macro : %*s\n"
msgstr " DW_MACRO_undef — radnr : %d makro : %*s\n"
-#: dwarf.c:6075
+#: dwarf.c:6080
msgid "DW_MACRO_start_file used, but no .debug_line offset provided.\n"
msgstr "DW_MACRO_start_file använd, men inget .debug_line-avstånd givet.\n"
-#: dwarf.c:6081
+#: dwarf.c:6086
#, c-format
msgid " DW_MACRO_start_file - lineno: %d filenum: %d\n"
msgstr " DW_MACRO_start_file - radnr: %d filnr: %d\n"
-#: dwarf.c:6084
+#: dwarf.c:6089
#, c-format
msgid " DW_MACRO_start_file - lineno: %d filenum: %d filename: %s%s%s\n"
msgstr " DW_MACRO_start_file - radnr: %d filnr: %d filnamn: %s%s%s\n"
-#: dwarf.c:6092
+#: dwarf.c:6097
#, c-format
msgid " DW_MACRO_end_file\n"
msgstr " DW_MACRO_end_file\n"
-#: dwarf.c:6102
+#: dwarf.c:6107
#, c-format
msgid " DW_MACRO_define_strp - lineno : %d macro : %s\n"
msgstr " DW_MACRO_define_strp — radnr : %d makro : %s\n"
-#: dwarf.c:6113
+#: dwarf.c:6118
#, c-format
msgid " DW_MACRO_undef_strp - lineno : %d macro : %s\n"
msgstr " DW_MACRO_undef_strp — radnr : %d makro : %s\n"
-#: dwarf.c:6119
+#: dwarf.c:6124
#, c-format
msgid " DW_MACRO_import - offset : 0x%lx\n"
msgstr " DW_MACRO_import — avstånd : 0x%lx\n"
-#: dwarf.c:6126
+#: dwarf.c:6131
#, c-format
msgid " DW_MACRO_define_sup - lineno : %d macro offset : 0x%lx\n"
msgstr " DW_MACRO_define_sup — radnr : %d makroavstånd : 0x%lx\n"
-#: dwarf.c:6133
+#: dwarf.c:6138
#, c-format
msgid " DW_MACRO_undef_sup - lineno : %d macro offset : 0x%lx\n"
msgstr " DW_MACRO_undef_sup — radnr : %d makroavstånd : 0x%lx\n"
-#: dwarf.c:6139
+#: dwarf.c:6144
#, c-format
msgid " DW_MACRO_import_sup - offset : 0x%lx\n"
msgstr " DW_MACRO_import_sup — avstånd : 0x%lx\n"
-#: dwarf.c:6154
+#: dwarf.c:6159
#, c-format
msgid "(with offset %s) "
msgstr "(med avstånd %s) "
-#: dwarf.c:6155
+#: dwarf.c:6160
#, c-format
msgid "lineno : %d macro : %s\n"
msgstr "radnr : %d makro : %s\n"
-#: dwarf.c:6162
+#: dwarf.c:6167
#, c-format
msgid " <Target Specific macro op: %#x - UNHANDLED"
msgstr " <Målspecifik makrooperator: %#x – OHANTERAT"
-#: dwarf.c:6168
+#: dwarf.c:6173
#, c-format
msgid " Unknown macro opcode %02x seen\n"
msgstr " Okänd makroopkod %02x upptäckt\n"
-#: dwarf.c:6179
+#: dwarf.c:6184
#, c-format
msgid " DW_MACRO_%02x\n"
msgstr " DW_MACRO_%02x\n"
-#: dwarf.c:6182
+#: dwarf.c:6187
#, c-format
msgid " DW_MACRO_%02x -"
msgstr " DW_MACRO_%02x —"
-#: dwarf.c:6237
+#: dwarf.c:6242
#, c-format
msgid " Number TAG (0x%lx)\n"
msgstr " Nummer-TAGG (0x%lx)\n"
-#: dwarf.c:6246
+#: dwarf.c:6251
msgid "has children"
msgstr "har barn"
-#: dwarf.c:6246
+#: dwarf.c:6251
msgid "no children"
msgstr "inga barn"
-#: dwarf.c:6308
+#: dwarf.c:6313
#, c-format
msgid "location view pair\n"
msgstr "platsvypar\n"
-#: dwarf.c:6340
+#: dwarf.c:6344
#, c-format
msgid "No debug information available for loc lists of entry: %u\n"
msgstr "Ingen felsökningsinformation tillgänglig för loc-listor för post: %u\n"
-#: dwarf.c:6352 dwarf.c:6499 dwarf.c:6682
+#: dwarf.c:6356 dwarf.c:6504 dwarf.c:6688
#, c-format
msgid "Invalid pointer size (%d) in debug info for entry %d\n"
msgstr "Felaktig pekarstorlek (%d) i felsökningsinformation för post %d\n"
-#: dwarf.c:6364 dwarf.c:6417 dwarf.c:6426 dwarf.c:6511 dwarf.c:6588
-#: dwarf.c:6596 dwarf.c:6693 dwarf.c:6766 dwarf.c:6774
+#: dwarf.c:6368 dwarf.c:6422 dwarf.c:6431 dwarf.c:6516 dwarf.c:6594
+#: dwarf.c:6602 dwarf.c:6700 dwarf.c:6773 dwarf.c:6781
#, c-format
msgid "Location list starting at offset 0x%lx is not terminated.\n"
msgstr "Platslistan som startar på avstånd 0x%lx är inte avslutad.\n"
-#: dwarf.c:6385 dwarf.c:6539 dwarf.c:6731 dwarf.c:7569 dwarf.c:7624
+#: dwarf.c:6390 dwarf.c:6545 dwarf.c:6738 dwarf.c:7582 dwarf.c:7640
#, c-format
msgid "<End of list>\n"
msgstr "<Slut på listan>\n"
-#: dwarf.c:6397 dwarf.c:6560 dwarf.c:7629
+#: dwarf.c:6402 dwarf.c:6566 dwarf.c:7645
#, c-format
msgid "(base address)\n"
msgstr "(basadress)\n"
-#: dwarf.c:6411 dwarf.c:6532 dwarf.c:6719
+#: dwarf.c:6416 dwarf.c:6538 dwarf.c:6726
#, c-format
msgid ""
"views at %8.8lx for:\n"
@@ -3437,55 +3442,55 @@ msgstr ""
"vyer vid %8.8lx för:\n"
" %*s "
-#: dwarf.c:6447 dwarf.c:6617
+#: dwarf.c:6452 dwarf.c:6623
msgid " (start == end)"
msgstr " (start == slut)"
-#: dwarf.c:6449 dwarf.c:6619
+#: dwarf.c:6454 dwarf.c:6625
msgid " (start > end)"
msgstr " (start > slut)"
-#: dwarf.c:6486
+#: dwarf.c:6491
#, c-format
msgid "No debug information available for loclists lists of entry: %u\n"
msgstr "Ingen felsökningsinformation tillgänglig för loc-listor för post: %u\n"
-#: dwarf.c:6565
+#: dwarf.c:6571
#, c-format
msgid "View pair entry in loclist with locviews attribute\n"
msgstr "Visa parposter i loclist med locviews-attribut\n"
-#: dwarf.c:6572
+#: dwarf.c:6578
#, c-format
msgid "views for:\n"
msgstr "vyer för:\n"
-#: dwarf.c:6576
+#: dwarf.c:6582
#, c-format
msgid "Invalid location list entry type %d\n"
msgstr "Felaktig typ av platslistpost %d\n"
-#: dwarf.c:6628
+#: dwarf.c:6634
#, c-format
msgid "Trailing view pair not used in a range"
msgstr "Avslutande vypar inte använt i något intervall"
-#: dwarf.c:6670
+#: dwarf.c:6676
#, c-format
msgid "No debug information for loc lists of entry: %u\n"
msgstr "Ingen felsökningsinformation för platslista för post: %u\n"
-#: dwarf.c:6737
+#: dwarf.c:6744
#, c-format
msgid "(base address selection entry)\n"
msgstr "(valpost för basadress)\n"
-#: dwarf.c:6758
+#: dwarf.c:6765
#, c-format
msgid "Unknown location list entry type 0x%x.\n"
msgstr "Okänd typ av platslistpost 0x%x.\n"
-#: dwarf.c:6851 dwarf.c:7104 dwarf.c:7323 dwarf.c:7430 dwarf.c:7691
+#: dwarf.c:6858 dwarf.c:7115 dwarf.c:7333 dwarf.c:7440 dwarf.c:7708
#, c-format
msgid ""
"\n"
@@ -3494,31 +3499,31 @@ msgstr ""
"\n"
"Sektionen %s är tom.\n"
-#: dwarf.c:6871
+#: dwarf.c:6878
#, c-format
msgid "The %s section contains corrupt or unsupported version number: %d.\n"
msgstr "%s-sektionen innehåller trasiga eller ej stödda versionsnummer: %d.\n"
-#: dwarf.c:6891
+#: dwarf.c:6898
#, c-format
msgid "The %s section contains unsupported offset entry count: %d.\n"
msgstr "%s-sektionen innehåller avståndspostantal som ej stödjs: %d.\n"
-#: dwarf.c:6902 dwarf.c:7329 dwarf.c:7765
+#: dwarf.c:6909 dwarf.c:7339 dwarf.c:7781
#, c-format
msgid "Unable to load/parse the .debug_info section, so cannot interpret the %s section.\n"
msgstr "Kan inte ladda/tolka sektionen .debug_info, så kan inte tolka sektionen %s.\n"
-#: dwarf.c:6950
+#: dwarf.c:6957
msgid "No location lists in .debug_info section!\n"
msgstr "Inga platslistor i sektionen .debug_info!\n"
-#: dwarf.c:6955
+#: dwarf.c:6962
#, c-format
msgid "Location lists in %s section start at 0x%s\n"
msgstr "Platslistorna i sektionen %s startar vid 0x%s\n"
-#: dwarf.c:6965
+#: dwarf.c:6972
#, c-format
msgid ""
" Warning: This section has relocations - addresses seen here may not be accurate.\n"
@@ -3528,85 +3533,85 @@ msgstr ""
"\n"
# Expression är en maskinkodsinstruktion
-#: dwarf.c:6967
+#: dwarf.c:6974
#, c-format
msgid " Offset Begin End Expression\n"
msgstr " Avstånd Start Slut Instruktion\n"
-#: dwarf.c:7022
+#: dwarf.c:7029 dwarf.c:7882
#, c-format
-msgid "There is a hole [0x%lx - 0x%lx] in .debug_loc section.\n"
-msgstr "Det finns ett hål [0x%lx - 0x%lx] i sektionen .debug_loc.\n"
+msgid "There is a hole [0x%lx - 0x%lx] in %s section.\n"
+msgstr "Det finns ett hål [0x%lx - 0x%lx] i sektionen %s.\n"
-#: dwarf.c:7026
+#: dwarf.c:7034 dwarf.c:7889
#, c-format
-msgid "There is an overlap [0x%lx - 0x%lx] in .debug_loc section.\n"
-msgstr "Det finns en överlappning [0x%lx - 0x%lx] i sektionen .debug_loc.\n"
+msgid "There is an overlap [0x%lx - 0x%lx] in %s section.\n"
+msgstr "Det finns en överlappning [0x%lx - 0x%lx] i sektionen %s.\n"
-#: dwarf.c:7035
+#: dwarf.c:7044
#, c-format
-msgid "Offset 0x%lx is bigger than .debug_loc section size.\n"
-msgstr "Avstånd 0x%lx är större än storleken på sektionen .debug_loc.\n"
+msgid "Offset 0x%lx is bigger than %s section size.\n"
+msgstr "Avstånd 0x%lx är större än storleken på sektionen %s.\n"
-#: dwarf.c:7042
+#: dwarf.c:7052
#, c-format
-msgid "View Offset 0x%lx is bigger than .debug_loc section size.\n"
-msgstr "Vyavståndet 0x%lx är större än storleken på sektionen .debug_loc.\n"
+msgid "View Offset 0x%lx is bigger than %s section size.\n"
+msgstr "Vyavståndet 0x%lx är större än storleken på sektionen %s.\n"
-#: dwarf.c:7059
+#: dwarf.c:7070
msgid "DWO is not yet supported.\n"
msgstr "DWO stödjs inte ännu.\n"
-#: dwarf.c:7076
+#: dwarf.c:7087
msgid "Hole and overlap detection requires adjacent view lists and loclists.\n"
msgstr "Hål- och överlappsdetektering kräver intilliggande vylistor och loclist:or.\n"
-#: dwarf.c:7085
+#: dwarf.c:7096
#, c-format
msgid "There is %ld unused byte at the end of section %s\n"
msgid_plural "There are %ld unused bytes at the end of section %s\n"
msgstr[0] "Det finns %ld oanvänd byte i slutet av sektionen %s\n"
msgstr[1] "Det finns %ld oanvända byte i slutet av sektionen %s\n"
-#: dwarf.c:7238
+#: dwarf.c:7248
msgid "Only DWARF 2 and 3 aranges are currently supported.\n"
msgstr "Endast DWARF 2 och 3 a-intervall hanteras för närvarande.\n"
-#: dwarf.c:7242
+#: dwarf.c:7252
#, c-format
msgid " Length: %ld\n"
msgstr " längd: %ld\n"
-#: dwarf.c:7244
+#: dwarf.c:7254
#, c-format
msgid " Version: %d\n"
msgstr " version: %d\n"
-#: dwarf.c:7245
+#: dwarf.c:7255
#, c-format
msgid " Offset into .debug_info: 0x%lx\n"
msgstr " Avstånd in i .debug_info: 0x%lx\n"
-#: dwarf.c:7247
+#: dwarf.c:7257
#, c-format
msgid " Pointer Size: %d\n"
msgstr " pekarstorlek: %d\n"
-#: dwarf.c:7248
+#: dwarf.c:7258
#, c-format
msgid " Segment Size: %d\n"
msgstr " segmentstorlek: %d\n"
-#: dwarf.c:7255
+#: dwarf.c:7265
#, c-format
msgid "Invalid address size in %s section!\n"
msgstr "Ogiltig adresstorlek i sektionen %s!\n"
-#: dwarf.c:7265
+#: dwarf.c:7275
msgid "Pointer size + Segment size is not a power of two.\n"
msgstr "Pekarstorlek + Segmentstorlek är inte en potens av två.\n"
-#: dwarf.c:7270
+#: dwarf.c:7280
#, c-format
msgid ""
"\n"
@@ -3615,7 +3620,7 @@ msgstr ""
"\n"
" Adress Längd\n"
-#: dwarf.c:7272
+#: dwarf.c:7282
#, c-format
msgid ""
"\n"
@@ -3624,287 +3629,284 @@ msgstr ""
"\n"
" Adress Längd\n"
-#: dwarf.c:7349
+#: dwarf.c:7359
#, c-format
msgid "Corrupt address base (%lx) found in debug section %u\n"
msgstr "Trasig adressbas (%lx) upptäckt i felsökningssektion %u\n"
-#: dwarf.c:7366
+#: dwarf.c:7376
#, c-format
msgid " For compilation unit at offset 0x%s:\n"
msgstr " För kompileringsenhet på avstånd 0x%s:\n"
-#: dwarf.c:7369
+#: dwarf.c:7379
#, c-format
msgid "\tIndex\tAddress\n"
msgstr "\tIndex\tAdress\n"
-#: dwarf.c:7381
+#: dwarf.c:7391
#, c-format
msgid "Corrupt %s section: expecting header size of 8 or 16, but found %ld instead\n"
msgstr "Trasig %s-sektion: huvudstorlek på 8 eller 16 förväntades, men %ld hittades istället\n"
-#: dwarf.c:7393
+#: dwarf.c:7403
#, c-format
msgid "Corrupt %s section: expecting version number 5 in header but found %d instead\n"
msgstr "Trasig %s-sektion: versionsnumret 5 förväntades i huvudet men %d hittades istället\n"
-#: dwarf.c:7407
+#: dwarf.c:7417
#, c-format
msgid "\t%d:\t"
msgstr "\t%d:\t"
-#: dwarf.c:7472 dwarf.c:7496
+#: dwarf.c:7482 dwarf.c:7506
#, c-format
msgid " Length: %#lx\n"
msgstr " Längd: %#lx\n"
-#: dwarf.c:7473 dwarf.c:7498
+#: dwarf.c:7483 dwarf.c:7508
#, c-format
msgid " Index Offset [String]\n"
msgstr " Index Avst. [Sträng]\n"
-#: dwarf.c:7481
+#: dwarf.c:7491
#, c-format
msgid "Section %s is too small %#lx\n"
msgstr "Sektionen %s är för liten %#lx\n"
-#: dwarf.c:7489
+#: dwarf.c:7499
#, c-format
msgid "Unexpected version number in str_offset header: %#x\n"
msgstr "Oväntat versionsnummer i huvudet str_offset: %#x\n"
-#: dwarf.c:7494
+#: dwarf.c:7504
#, c-format
msgid "Unexpected value in str_offset header's padding field: %#x\n"
msgstr "Oväntat värde i str_offset-huvudets utfyllnadsfält: %#x\n"
-#: dwarf.c:7497
+#: dwarf.c:7507
#, c-format
msgid " Version: %#lx\n"
msgstr " Version: %#lx\n"
-#: dwarf.c:7588 dwarf.c:7665
+#: dwarf.c:7601 dwarf.c:7681
msgid "(start == end)"
msgstr "(start == slut)"
-#: dwarf.c:7590 dwarf.c:7667
+#: dwarf.c:7603 dwarf.c:7683
msgid "(start > end)"
msgstr "(start > slut)"
-#: dwarf.c:7612
+#: dwarf.c:7627
#, c-format
-msgid "Range list starting at offset 0x%lx is not terminated.\n"
-msgstr "Intervallistan som startar på avstånd 0x%lx är inte avslutad.\n"
+msgid "Range list starting at offset 0x%s is not terminated.\n"
+msgstr "Intervallistan som startar på avstånd 0x%s är inte avslutad.\n"
-#: dwarf.c:7645
+#: dwarf.c:7661
#, c-format
msgid "Invalid range list entry type %d\n"
msgstr "Okänd typ av intervallistpost %d\n"
-#: dwarf.c:7725
+#: dwarf.c:7742
#, c-format
msgid "The length field (0x%lx) in the debug_rnglists header is wrong - the section is too small\n"
msgstr "Längdfältet (0x%lx) i huvudet debug_rnglists är felaktigt — sektionen är för liten\n"
-#: dwarf.c:7737
+#: dwarf.c:7753
msgid "Only DWARF version 5 debug_rnglists info is currently supported.\n"
msgstr "Endast debug_rnglists-information från DWARF version 5 stödjs för närvarande.\n"
-#: dwarf.c:7756
+#: dwarf.c:7772
#, c-format
msgid "The %s section contains unsupported offset entry count: %u.\n"
msgstr "%s-sektionen innehåller avståndspostantal som ej stödjs: %u.\n"
#. This can happen when the file was compiled with -gsplit-debug
#. which removes references to range lists from the primary .o file.
-#: dwarf.c:7786
+#: dwarf.c:7802
#, c-format
msgid "No range lists in .debug_info section.\n"
msgstr "Inga intervallistor i sektionen .debug_info.\n"
-#: dwarf.c:7818
+#: dwarf.c:7834
#, c-format
msgid "Range lists in %s section start at 0x%lx\n"
msgstr "Intervallistor i sektionen %s startar vid 0x%lx\n"
-#: dwarf.c:7823
+#: dwarf.c:7839
#, c-format
msgid " Offset Begin End\n"
msgstr " Avstånd Start Slut\n"
-#: dwarf.c:7841
+#: dwarf.c:7857
#, c-format
msgid "Corrupt pointer size (%d) in debug entry at offset %8.8lx\n"
msgstr "Trasig pekarstorlek (%d) i felsökningspost på position %8.8lx\n"
-#: dwarf.c:7848
+#: dwarf.c:7864
#, c-format
msgid "Corrupt offset (%#8.8lx) in range entry %u\n"
msgstr "Trasigt avstånd (%#8.8lx) i intervallpost %u\n"
-#: dwarf.c:7866
-#, c-format
-msgid "There is a hole [0x%lx - 0x%lx] in %s section.\n"
-msgstr "Det finns ett hål [0x%lx - 0x%lx] i sektionen %s.\n"
-
-#: dwarf.c:7873
-#, c-format
-msgid "There is an overlap [0x%lx - 0x%lx] in %s section.\n"
-msgstr "Det finns en överlappning [0x%lx - 0x%lx] i sektionen %s.\n"
-
-#: dwarf.c:7949
+#: dwarf.c:7965
#, c-format
msgid "Unfeasibly large register number: %u\n"
msgstr "Ohanterligt stort registerantal: %u\n"
-#: dwarf.c:7962
+#: dwarf.c:7978
#, c-format
msgid "Out of memory allocating %u columns in dwarf frame arrays\n"
msgstr "Slut på minne vid allokering av %u kolumner i dwarf-ramvektorer\n"
-#: dwarf.c:8411
+#: dwarf.c:8427
msgid "No terminator for augmentation name\n"
msgstr "Ingen avslutare för tilläggsnamn\n"
-#: dwarf.c:8429
+#: dwarf.c:8445
#, c-format
msgid "Invalid pointer size (%d) in CIE data\n"
msgstr "Felaktig pekarstorlek (%d) i CIE-data\n"
-#: dwarf.c:8437
+#: dwarf.c:8453
#, c-format
msgid "Invalid segment size (%d) in CIE data\n"
msgstr "Felaktig segmentstorlek (%d) i CIE-data\n"
-#: dwarf.c:8473 dwarf.c:8849
+#: dwarf.c:8489 dwarf.c:8862
#, c-format
msgid "Augmentation data too long: 0x%s, expected at most %#lx\n"
msgstr "Tilläggsdatan är för lång: 0x%s, förväntades högst %#lx\n"
-#: dwarf.c:8560
+#: dwarf.c:8576
#, c-format
msgid " Augmentation data: "
msgstr " Tilläggsdata: "
-#: dwarf.c:8576
+#: dwarf.c:8592
msgid "bad register: "
msgstr "felaktigt register: "
-#: dwarf.c:8748
+#: dwarf.c:8764
msgid "Failed to read CIE information\n"
msgstr "Lyckades inte läsa CIE-information\n"
-#: dwarf.c:8759 dwarf.c:8783 dwarf.c:8810
+#: dwarf.c:8775 dwarf.c:8796 dwarf.c:8823
msgid "Invalid max register\n"
msgstr "Ogiltigt maxregister\n"
#. PR 17512: file: 9e196b3e.
-#: dwarf.c:8825
+#: dwarf.c:8838
#, c-format
msgid "Probably corrupt segment size: %d - using 4 instead\n"
msgstr "Troligen trasig segmentstorlek: %d — använder 4 istället\n"
-#: dwarf.c:9296
+#. Ideally translate "invalid " to 8 chars, trailing space
+#. is optional.
+#: dwarf.c:8884
+#, c-format
+msgid "cie=invalid "
+msgstr "cie=felaktig"
+
+#: dwarf.c:9317
msgid "Invalid column number in saved frame state\n"
msgstr "Felaktigt kolumnantal i sparat ramtillstånd\n"
-#: dwarf.c:9343
+#: dwarf.c:9364
#, c-format
msgid " DW_CFA_def_cfa_expression: <corrupt len %lu>\n"
msgstr " DW_CFA_def_cfa_expression: <trasig längd %lu>\n"
-#: dwarf.c:9366
+#: dwarf.c:9387
#, c-format
msgid " DW_CFA_expression: <corrupt len %lu>\n"
msgstr " DW_CFA_expression: <trasig längd %lu>\n"
-#: dwarf.c:9499
+#: dwarf.c:9520
#, c-format
msgid " DW_CFA_??? (User defined call frame op: %#x)\n"
msgstr " DW_CFA_??? (Användardefinierad anropsramop: %#x)\n"
-#: dwarf.c:9501
+#: dwarf.c:9522
#, c-format
msgid "Unsupported or unknown Dwarf Call Frame Instruction number: %#x\n"
msgstr "Ej stött eller okänt nummer på Dwarf anropsramsinstruktion: %#x\n"
-#: dwarf.c:9615 dwarf.c:10032
+#: dwarf.c:9636 dwarf.c:10053
#, c-format
msgid "Version %ld\n"
msgstr "Version %ld\n"
-#: dwarf.c:9621
+#: dwarf.c:9642
msgid "Only DWARF version 5 .debug_names is currently supported.\n"
msgstr "Endast .debug_names från DWARF 5 hanteras för närvarande.\n"
-#: dwarf.c:9628
+#: dwarf.c:9649
#, c-format
msgid "Padding field of .debug_names must be 0 (found 0x%x)\n"
msgstr "Utfyllnadsfält till .debug_names måste vara 0 (hittade 0x%x)\n"
-#: dwarf.c:9633
+#: dwarf.c:9654
msgid "Compilation unit count must be >= 1 in .debug_names\n"
msgstr "Antalet kompileringsenheter måste vara ≥ 1 i .debug_names\n"
-#: dwarf.c:9644
+#: dwarf.c:9665
#, c-format
msgid "Augmentation string length %u must be rounded up to a multiple of 4 in .debug_names.\n"
msgstr "Tilläggsstränglängden %u måste avrundas upp till en multipel av 4 i .debug_names.\n"
-#: dwarf.c:9652
+#: dwarf.c:9673
#, c-format
msgid "Augmentation string:"
msgstr "Tilläggssträng:"
-#: dwarf.c:9679
+#: dwarf.c:9700
#, c-format
msgid "CU table:\n"
msgstr "CU-tabell:\n"
-#: dwarf.c:9688 dwarf.c:9701
+#: dwarf.c:9709 dwarf.c:9722
#, c-format
msgid "[%3u] 0x%lx\n"
msgstr "[%3u] 0x%lx\n"
-#: dwarf.c:9692
+#: dwarf.c:9713
#, c-format
msgid "TU table:\n"
msgstr "TU-tabell:\n"
-#: dwarf.c:9705
+#: dwarf.c:9726
#, c-format
msgid "Foreign TU table:\n"
msgstr "Främmande TU-tabell:\n"
-#: dwarf.c:9714
+#: dwarf.c:9735
#, c-format
msgid "[%3u] "
msgstr "[%3u] "
-#: dwarf.c:9725
+#: dwarf.c:9746
#, c-format
msgid "Entry pool offset (0x%lx) exceeds unit size 0x%lx for unit 0x%lx in the debug_names\n"
msgstr "Start-pool-avståndet (0x%lx) överskrider enhetsstorleken 0x%lx för enhet 0x%lx i debug_names\n"
-#: dwarf.c:9754
+#: dwarf.c:9775
#, c-format
msgid "Used %zu of %lu bucket.\n"
msgid_plural "Used %zu of %lu buckets.\n"
msgstr[0] "Använde %zu av %lu hink.\n"
msgstr[1] "Använde %zu av %lu hinkar.\n"
-#: dwarf.c:9781
+#: dwarf.c:9802
#, c-format
msgid "Out of %lu items there are %zu bucket clashes (longest of %zu entries).\n"
msgstr "Av %lu saker finns det %zu hinkkollisioner (längsta på %zu poster).\n"
-#: dwarf.c:9818
+#: dwarf.c:9839
#, c-format
msgid "Duplicate abbreviation tag %lu in unit 0x%lx in the debug_names\n"
msgstr "Dubblerad förkortningstagg %lu i enhet 0x%lx i debug_names\n"
-#: dwarf.c:9840 dwarf.c:10158
+#: dwarf.c:9861 dwarf.c:10179
#, c-format
msgid ""
"\n"
@@ -3913,105 +3915,105 @@ msgstr ""
"\n"
"Symboltabell:\n"
-#: dwarf.c:9892
+#: dwarf.c:9913
#, c-format
msgid "Undefined abbreviation tag %lu in unit 0x%lx in the debug_names\n"
msgstr "Odefinierad förkortningstagg %lu i enhet 0x%lx i debug_names\n"
-#: dwarf.c:9923
+#: dwarf.c:9944
#, c-format
msgid " <no entries>"
msgstr " <inga poster>"
-#: dwarf.c:9955
+#: dwarf.c:9976
msgid "The debuglink filename is corrupt/missing\n"
msgstr "debuglink-filnamnet är trasigt/saknas\n"
-#: dwarf.c:9959
+#: dwarf.c:9980
#, c-format
msgid " Separate debug info file: %s\n"
msgstr " Separat fil med felsökningsinformation: %s\n"
-#: dwarf.c:9970
+#: dwarf.c:9991
msgid "CRC offset missing/truncated\n"
msgstr "CRC-avstånd saknas/avhugget\n"
-#: dwarf.c:9976
+#: dwarf.c:9997
#, c-format
msgid " CRC value: %#x\n"
msgstr " CRC-värde: %#x\n"
-#: dwarf.c:9980
+#: dwarf.c:10001
#, c-format
msgid "There are %#lx extraneous bytes at the end of the section\n"
msgstr "Det finns %#lx överskjutande byte i slutet av sektionen\n"
-#: dwarf.c:9994
+#: dwarf.c:10015
#, c-format
msgid "Build-ID is too short (%#lx bytes)\n"
msgstr "Bygg-ID är för kort (%#lx byte)\n"
-#: dwarf.c:9998
+#: dwarf.c:10019
#, c-format
msgid " Build-ID (%#lx bytes):"
msgstr " Bygg-ID (%#lx byte):"
-#: dwarf.c:10027
+#: dwarf.c:10048
#, c-format
msgid "Truncated header in the %s section.\n"
msgstr "Avhugget huvud i sektionen %s.\n"
-#: dwarf.c:10038
+#: dwarf.c:10059
#, c-format
msgid "Unsupported version %lu.\n"
msgstr "Versionen %lu stödjs inte.\n"
-#: dwarf.c:10042
+#: dwarf.c:10063
msgid "The address table data in version 3 may be wrong.\n"
msgstr "Adresstabelldata i version 3 kan vara fel.\n"
-#: dwarf.c:10044
+#: dwarf.c:10065
msgid "Version 4 does not support case insensitive lookups.\n"
msgstr "Version 4 stödjer inte skiftlägesokänsliga uppslagningar.\n"
-#: dwarf.c:10046
+#: dwarf.c:10067
msgid "Version 5 does not include inlined functions.\n"
msgstr "Version 5 innehåller inte inline:ade funktioner.\n"
-#: dwarf.c:10048
+#: dwarf.c:10069
msgid "Version 6 does not include symbol attributes.\n"
msgstr "Version 6 inkluderar inte symbolattribut.\n"
-#: dwarf.c:10066
+#: dwarf.c:10087
#, c-format
msgid "Corrupt header in the %s section.\n"
msgstr "Trasigt huvud i sektionen %s.\n"
-#: dwarf.c:10073
+#: dwarf.c:10094
#, c-format
msgid "TU offset (%x) is less than CU offset (%x)\n"
msgstr "TU-avståndet (%x) är mindre än CU-avståndet (%x)\n"
-#: dwarf.c:10082
+#: dwarf.c:10103
#, c-format
msgid "Address table offset (%x) is less than TU offset (%x)\n"
msgstr "Adresstabellavståndet (%x) är mindre än TU-avståndet (%x)\n"
-#: dwarf.c:10092
+#: dwarf.c:10113
#, c-format
msgid "Symbol table offset (%x) is less then Address table offset (%x)\n"
msgstr "Symboltabellavståndet (%x) är mindre än adresstabellavståndet (%x)\n"
-#: dwarf.c:10101
+#: dwarf.c:10122
#, c-format
msgid "Constant pool offset (%x) is less than symbol table offset (%x)\n"
msgstr "Konstant-pool-avståndet (%x) är mindre än symboltabellavståndet (%x)\n"
-#: dwarf.c:10116
+#: dwarf.c:10137
msgid "Address table extends beyond end of section.\n"
msgstr "Adresstabellen sträcker sig bortom slutet på sektionen.\n"
-#: dwarf.c:10120
+#: dwarf.c:10141
#, c-format
msgid ""
"\n"
@@ -4020,12 +4022,12 @@ msgstr ""
"\n"
"CU-tabell:\n"
-#: dwarf.c:10126
+#: dwarf.c:10147
#, c-format
msgid "[%3u] 0x%lx - 0x%lx\n"
msgstr "[%3u] 0x%lx - 0x%lx\n"
-#: dwarf.c:10131
+#: dwarf.c:10152
#, c-format
msgid ""
"\n"
@@ -4034,12 +4036,12 @@ msgstr ""
"\n"
"TU-tabell:\n"
-#: dwarf.c:10138
+#: dwarf.c:10159
#, c-format
msgid "[%3u] 0x%lx 0x%lx "
msgstr "[%3u] 0x%lx 0x%lx "
-#: dwarf.c:10145
+#: dwarf.c:10166
#, c-format
msgid ""
"\n"
@@ -4048,74 +4050,74 @@ msgstr ""
"\n"
"Adresstabell:\n"
-#: dwarf.c:10155
+#: dwarf.c:10176
#, c-format
msgid "%lu\n"
msgstr "%lu\n"
-#: dwarf.c:10173
+#: dwarf.c:10194
#, c-format
msgid "[%3u] <corrupt offset: %x>"
msgstr "[%3u] <trasigt avstånd: %x>"
-#: dwarf.c:10174
+#: dwarf.c:10195
#, c-format
msgid "Corrupt name offset of 0x%x found for symbol table slot %d\n"
msgstr "Trasigt namnavstånd på 0x%x hittat för symboltabellfack %d\n"
-#: dwarf.c:10185
+#: dwarf.c:10206
#, c-format
msgid "<invalid CU vector offset: %x>\n"
msgstr "<felaktigt CU-vektoravstånd: %x>\n"
-#: dwarf.c:10186
+#: dwarf.c:10207
#, c-format
msgid "Corrupt CU vector offset of 0x%x found for symbol table slot %d\n"
msgstr "Trasigt CU-vektoravstånd på 0x%x hittat för symboltabellfack %d\n"
-#: dwarf.c:10197
+#: dwarf.c:10218
#, c-format
msgid "Invalid number of CUs (0x%x) for symbol table slot %d\n"
msgstr "Felaktigt antal CU:n (0x%x) för symboltabellfack %d\n"
-#: dwarf.c:10222
+#: dwarf.c:10243
msgid "static"
msgstr "statisk"
-#: dwarf.c:10222
+#: dwarf.c:10243
msgid "global"
msgstr "global"
-#: dwarf.c:10260 dwarf.c:10271
+#: dwarf.c:10281 dwarf.c:10292
msgid "Internal error: out of space in the shndx pool.\n"
msgstr "Internt fel: slut på utrymme i shndx-poolen.\n"
-#: dwarf.c:10334
+#: dwarf.c:10355
#, c-format
msgid "Section %s is empty\n"
msgstr "Sektionen %s är tom\n"
-#: dwarf.c:10340
+#: dwarf.c:10361
#, c-format
msgid "Section %s is too small to contain a CU/TU header\n"
msgstr "Sektionen %s är för liten för att innehålla ett CU-/TU-huvud\n"
-#: dwarf.c:10359
+#: dwarf.c:10380
#, c-format
msgid " Version: %u\n"
msgstr " Version: %u\n"
-#: dwarf.c:10361
+#: dwarf.c:10382
#, c-format
msgid " Number of columns: %u\n"
msgstr " Antal kolumner: %u\n"
-#: dwarf.c:10362
+#: dwarf.c:10383
#, c-format
msgid " Number of used entries: %u\n"
msgstr " Antal använda poster: %u\n"
-#: dwarf.c:10363
+#: dwarf.c:10384
#, c-format
msgid ""
" Number of slots: %u\n"
@@ -4124,132 +4126,137 @@ msgstr ""
" Antal fack: %u\n"
"\n"
-#: dwarf.c:10370
+#: dwarf.c:10391
#, c-format
msgid "Section %s is too small for %u slot\n"
msgid_plural "Section %s is too small for %u slots\n"
msgstr[0] "Sektionen %s är för liten för %u fack\n"
msgstr[1] "Sektionen %s är för liten för %u fack\n"
-#: dwarf.c:10394
+#: dwarf.c:10415
msgid "Section index pool located before start of section\n"
msgstr "Sektionsindexpoolen placerad före starten på sektionen\n"
-#: dwarf.c:10399
+#: dwarf.c:10420
#, c-format
msgid " [%3d] Signature: 0x%s Sections: "
msgstr " [%3d] Signatur: 0x%s Sektioner: "
-#: dwarf.c:10405
+#: dwarf.c:10426
#, c-format
msgid "Section %s too small for shndx pool\n"
msgstr "Sektionen %s är för liten för shndx-pool\n"
-#: dwarf.c:10451
+#: dwarf.c:10472
#, c-format
msgid "Section %s too small for offset and size tables\n"
msgstr "Sektionen %s är för liten för avstånds- och storlekstabeller\n"
-#: dwarf.c:10458
+#: dwarf.c:10479
#, c-format
msgid " Offset table\n"
msgstr " Avståndstabell\n"
-#: dwarf.c:10460 dwarf.c:10548
+#: dwarf.c:10481 dwarf.c:10569
msgid "signature"
msgstr "signatur"
-#: dwarf.c:10460 dwarf.c:10548
+#: dwarf.c:10481 dwarf.c:10569
msgid "dwo_id"
msgstr "dwo_id"
-#: dwarf.c:10499
+#: dwarf.c:10520
#, c-format
msgid "Row index (%u) is larger than number of used entries (%u)\n"
msgstr "Radindexet (%u) är större än antalet använda poster (%u)\n"
-#: dwarf.c:10513 dwarf.c:10572
+#: dwarf.c:10534 dwarf.c:10593
#, c-format
msgid " [%3d] 0x%s"
msgstr " [%3d] 0x%s"
-#: dwarf.c:10528 dwarf.c:10586
+#: dwarf.c:10549 dwarf.c:10621
#, c-format
msgid "Overlarge Dwarf section index detected: %u\n"
msgstr "För stort Dwarf-sektionsindex upptäckt: %u\n"
-#: dwarf.c:10546
+#: dwarf.c:10567
#, c-format
msgid " Size table\n"
msgstr " Storlekstabell\n"
-#: dwarf.c:10601
+#: dwarf.c:10607
+#, c-format
+msgid "Too many rows/columns in DWARF index section %s\n"
+msgstr "För många rader/kolumner i DWARF-indexsektionen %s\n"
+
+#: dwarf.c:10636
#, c-format
msgid " Unsupported version (%d)\n"
msgstr " Ej stödd version (%d)\n"
-#: dwarf.c:10673
+#: dwarf.c:10708
#, c-format
msgid "Displaying the debug contents of section %s is not yet supported.\n"
msgstr "Visa felsökningsinnehållet i sektion %s hanteras inte än.\n"
-#: dwarf.c:10704
+#: dwarf.c:10739
#, c-format
msgid "Attempt to allocate an array with an excessive number of elements: 0x%lx\n"
msgstr "Försök att allokera en vektor med ett överdrivet antal element: 0x%lx\n"
-#: dwarf.c:10722
+#: dwarf.c:10757
#, c-format
msgid "Attempt to re-allocate an array with an excessive number of elements: 0x%lx\n"
msgstr "Försök att omallokera en vektor med ett överdrivet antal element: 0x%lx\n"
-#: dwarf.c:10738
+#: dwarf.c:10773
#, c-format
msgid "Attempt to allocate a zero'ed array with an excessive number of elements: 0x%lx\n"
msgstr "Försök att allokera en nollställd vektor med ett överdrivet antal element: 0x%lx\n"
-#: dwarf.c:10836
+#: dwarf.c:10871
#, c-format
msgid "Unable to reopen separate debug info file: %s\n"
msgstr "Kan inte återöppna filen med felsökningsinformation: %s\n"
-#: dwarf.c:10848
+#: dwarf.c:10883
#, c-format
msgid "Separate debug info file %s found, but CRC does not match - ignoring\n"
msgstr "Separat fil %s med felsökningsinformation hittad, men CRC:n stämmer inte — ignorerar\n"
-#: dwarf.c:11024
+#: dwarf.c:11062
#, c-format
msgid "Corrupt debuglink section: %s\n"
msgstr "Trasig debuglink-sektion: %s\n"
-#: dwarf.c:11062
+#: dwarf.c:11101
msgid "Out of memory"
msgstr "Slut på minne"
#. Failed to find the file.
-#: dwarf.c:11136
+#: dwarf.c:11176
#, c-format
msgid "could not find separate debug file '%s'\n"
msgstr "kunde inte hitta en separat fil med felsökningsinformation â€%sâ€\n"
-#: dwarf.c:11138 dwarf.c:11143 dwarf.c:11149 dwarf.c:11153 dwarf.c:11158
-#: dwarf.c:11161 dwarf.c:11164 dwarf.c:11167
+#: dwarf.c:11178 dwarf.c:11183 dwarf.c:11189 dwarf.c:11193 dwarf.c:11198
+#: dwarf.c:11201 dwarf.c:11204 dwarf.c:11207
#, c-format
msgid "tried: %s\n"
msgstr "provade: %s\n"
-#: dwarf.c:11175
+#: dwarf.c:11215
#, c-format
msgid "tried: DEBUGINFOD_URLS=%s\n"
msgstr "provade: DEBUGINFOD_URLS=%s\n"
-#: dwarf.c:11192
+#: dwarf.c:11243
#, c-format
msgid "failed to open separate debug file: %s\n"
msgstr "misslyckades att öppna en separat fil med felsökningsinformation: %s\n"
-#: dwarf.c:11201
+#: dwarf.c:11252
#, c-format
msgid ""
"\n"
@@ -4258,17 +4265,17 @@ msgstr ""
"\n"
"%s: Hittade separat fil med felsökningsinformation: %s\n"
-#: dwarf.c:11224
+#: dwarf.c:11275
msgid "Out of memory allocating dwo filename\n"
msgstr "Slut på minne vid allokering av dwo-filnamn\n"
-#: dwarf.c:11230
+#: dwarf.c:11281
#, c-format
msgid "Unable to load dwo file: %s\n"
msgstr "Kan inte läsa in dwo-filen: %s\n"
#. FIXME: We should check the dwo_id.
-#: dwarf.c:11237
+#: dwarf.c:11288
#, c-format
msgid ""
"%s: Found separate debug object file: %s\n"
@@ -4277,28 +4284,44 @@ msgstr ""
"%s: Hittade separat fil med felsökningsobjekt: %s\n"
"\n"
-#: dwarf.c:11256
+#: dwarf.c:11320
+msgid "Unable to load the .note.gnu.build-id section\n"
+msgstr "Kan inte ladda sektionen .note.gnu.build-id\n"
+
+#: dwarf.c:11326
+msgid ".note.gnu.build-id section is corrupt/empty\n"
+msgstr "sektionen .note.gnu.build-id är trasig/tom\n"
+
+#: dwarf.c:11347
+msgid ".note.gnu.build-id data size is too small\n"
+msgstr "datastorleken på .note.gnu.build-id är för liten\n"
+
+#: dwarf.c:11353
+msgid ".note.gnu.build-id data size is too bug\n"
+msgstr ".note.gnu.build-id datastorleken är för stor\n"
+
+#: dwarf.c:11414
msgid ".debug_sup section is corrupt/empty\n"
msgstr ".debug_sup-sektionen är trasig/tom\n"
-#: dwarf.c:11266
+#: dwarf.c:11424
msgid "filename in .debug_sup section is corrupt\n"
msgstr "filnamnet i .debug_sup-sektionen är trasigt\n"
-#: dwarf.c:11281
+#: dwarf.c:11439
msgid "unable to construct path for supplementary debug file"
msgstr "kan inte konstruera sökväg för fil med kompletterande felsökningsinformation"
-#: dwarf.c:11295
+#: dwarf.c:11453
msgid "out of memory constructing filename for .debug_sup link\n"
msgstr "slut på minne vid konstruktionen av filnamnet för .debug_sup-länken\n"
-#: dwarf.c:11303
+#: dwarf.c:11461
#, c-format
msgid "unable to open file '%s' referenced from .debug_sup section\n"
msgstr "kan inte öppna filen â€%s†refererad frÃ¥n .debug_sup-sektionen\n"
-#: dwarf.c:11308
+#: dwarf.c:11466
#, c-format
msgid ""
"%s: Found supplementary debug file: %s\n"
@@ -4307,63 +4330,61 @@ msgstr ""
"%s: Hittade kompletterande fil med felsökningsinformation: %s\n"
"\n"
-#: dwarf.c:11398
+#: dwarf.c:11558
msgid "Multiple DWO_NAMEs encountered for the same CU\n"
msgstr "Flera DWO_NAME:ar påträffade för samma CU\n"
-#: dwarf.c:11410
+#: dwarf.c:11570
msgid "multiple DWO_IDs encountered for the same CU\n"
msgstr "flera DWO_ID:er påträffade för samma CU\n"
-#: dwarf.c:11415
+#: dwarf.c:11575
msgid "Unexpected DWO INFO type"
msgstr "Oväntad DWO INFO-typ"
-#: dwarf.c:11430
+#: dwarf.c:11590
#, c-format
msgid ""
"The %s section contains link(s) to dwo file(s):\n"
"\n"
msgstr "Sektionen %s innehåller länk(ar) till dwo-fil(er):\n"
-#: dwarf.c:11435
+#: dwarf.c:11595
#, c-format
msgid " Name: %s\n"
msgstr " Namn: %s\n"
-#: dwarf.c:11436
+#: dwarf.c:11596
#, c-format
msgid " Directory: %s\n"
msgstr " Katalog: %s\n"
-#: dwarf.c:11436
+#: dwarf.c:11596
msgid "<not-found>"
msgstr "<ej funnen>"
-#: dwarf.c:11438
+#: dwarf.c:11598
#, c-format
msgid " ID: "
msgstr " ID: "
-#: dwarf.c:11440
+#: dwarf.c:11600
#, c-format
msgid " ID: <not specified>\n"
msgstr " ID: <ej angiven>\n"
-#: dwarf.c:11604 dwarf.c:11648
+#: dwarf.c:11764 dwarf.c:11808
#, c-format
msgid "Unrecognized debug option '%s'\n"
msgstr "Okänt felsökningsargument â€%sâ€\n"
-#: dwarf.h:270
-#, c-format
-msgid "%s:%lu: end of data encountered whilst reading LEB\n"
-msgstr "%s:%lu: slutet på data hittades medan LEB lästes\n"
+#: dwarf.h:273
+msgid "end of data encountered whilst reading LEB\n"
+msgstr "slutet på data hittades medan LEB lästes\n"
-#: dwarf.h:272
-#, c-format
-msgid "%s:%lu: read LEB value is too large to store in destination variable\n"
-msgstr "%s:%lu: det lästa LEB-värdet är för stort för att lagras i destinationsvariabeln\n"
+#: dwarf.h:275
+msgid "read LEB value is too large to store in destination variable\n"
+msgstr "det lästa LEB-värdet är för stort för att lagras i destinationsvariabeln\n"
#: elfcomm.c:47
#, c-format
@@ -4448,7 +4469,7 @@ msgstr "%s: lyckades inte söka till första arkivhuvudet\n"
#. PR 24049 - we cannot use filedata->file_name as this will
#. have already been freed.
-#: elfcomm.c:519 elfcomm.c:753 elfedit.c:595 readelf.c:21730
+#: elfcomm.c:519 elfcomm.c:753 elfedit.c:613 readelf.c:22187
#, c-format
msgid "%s: failed to read archive header\n"
msgstr "%s: lyckades inte läsa arkivhuvudet\n"
@@ -4495,72 +4516,77 @@ msgstr "Felaktigt medlemsnamn i tunt arkiv\n"
msgid "%s: failed to seek to next file name\n"
msgstr "%s: lyckades inte söka till nästa filnamn\n"
-#: elfcomm.c:758 elfedit.c:602 readelf.c:21737
+#: elfcomm.c:758 elfedit.c:620 readelf.c:22194
#, c-format
msgid "%s: did not find a valid archive header\n"
msgstr "%s hittade inte ett giltigt arkivhuvud\n"
-#: elfedit.c:91
+#: elfedit.c:93
#, c-format
msgid "%s: Not an i386 nor x86-64 ELF file\n"
msgstr "%s: Inte en i386- eller x86-64-ELF-fil\n"
-#: elfedit.c:97
+#: elfedit.c:99
#, c-format
msgid "%s: stat () failed\n"
msgstr "%s: stat () misslyckades\n"
-#: elfedit.c:105
+#: elfedit.c:107
#, c-format
msgid "%s: mmap () failed\n"
msgstr "%s: mmap () misslyckades\n"
-#: elfedit.c:244
+#: elfedit.c:246
#, c-format
msgid "%s: Invalid PT_NOTE segment\n"
msgstr "%s: Felaktigt PT_NOTE-segment\n"
-#: elfedit.c:269
+#: elfedit.c:271
#, c-format
msgid "Unknown x86 feature: %s\n"
msgstr "Okänd x86-funktion: %s\n"
-#: elfedit.c:317
+#: elfedit.c:319
#, c-format
msgid "%s: Unsupported EI_VERSION: %d is not %d\n"
msgstr "%s: Ej stödd EI_VERSION: %d är inte %d\n"
-#: elfedit.c:338
+#: elfedit.c:340
#, c-format
msgid "%s: Unmatched input EI_CLASS: %d is not %d\n"
msgstr "%s: Ej matchad indata-EI_CLASS: %d är inte %d\n"
-#: elfedit.c:347
+#: elfedit.c:349
#, c-format
msgid "%s: Unmatched output EI_CLASS: %d is not %d\n"
msgstr "%s: Ej matchad utdata-EI_CLASS: %d är inte %d\n"
-#: elfedit.c:356
+#: elfedit.c:358
#, c-format
msgid "%s: Unmatched e_machine: %d is not %d\n"
msgstr "%s: Ej matchad e_machine: %d är inte %d\n"
-#: elfedit.c:367
+#: elfedit.c:369
#, c-format
msgid "%s: Unmatched e_type: %d is not %d\n"
msgstr "%s: Ej matchad e_type: %d är inte %d\n"
-#: elfedit.c:378
+#: elfedit.c:380
#, c-format
msgid "%s: Unmatched EI_OSABI: %d is not %d\n"
msgstr "%s: Ej matchad EI_OSABI: %d är inte %d\n"
-#: elfedit.c:411
+#: elfedit.c:392
+#, c-format
+msgid "%s: Unmatched EI_ABIVERSION: %d is not %d\n"
+msgstr "%s: Ej matchad EI_ABIVERSION: %d är inte %d\n"
+
+#: elfedit.c:429
#, c-format
msgid "%s: Failed to update ELF header: %s\n"
msgstr "%s: Lyckades inte uppdatera ELF-huvudet: %s\n"
-#: elfedit.c:481
+#: elfedit.c:499
msgid ""
"This executable has been built without support for a\n"
"64 bit data type and so it cannot process 64 bit ELF files.\n"
@@ -4568,87 +4594,87 @@ msgstr ""
"Det här programmet har byggts utan stöd för någon 64-bitars\n"
"datatyp och kan därför inte behandla 64-bitars ELF-filer.\n"
-#: elfedit.c:522
+#: elfedit.c:540
#, c-format
msgid "%s: Failed to read ELF header\n"
msgstr "%s: Lyckades inte läsa ELF-huvudet\n"
-#: elfedit.c:529
+#: elfedit.c:547
#, c-format
msgid "%s: Failed to seek to ELF header\n"
msgstr "%s: Lyckades inte söka till ELF-huvudet\n"
-#: elfedit.c:586 readelf.c:21718
+#: elfedit.c:604 readelf.c:22175
#, c-format
msgid "%s: failed to seek to next archive header\n"
msgstr "%s: lyckades inte söka till nästa arkivhuvud\n"
-#: elfedit.c:617 elfedit.c:626 readelf.c:21752 readelf.c:21761
+#: elfedit.c:635 elfedit.c:644 readelf.c:22207 readelf.c:22216
#, c-format
msgid "%s: bad archive file name\n"
msgstr "%s: felaktigt arkivfilnamn\n"
-#: elfedit.c:649 elfedit.c:760
+#: elfedit.c:667 elfedit.c:778
#, c-format
msgid "Input file '%s' is not readable\n"
msgstr "Infil â€%s†är inte läsbar\n"
-#: elfedit.c:676
+#: elfedit.c:694
#, c-format
msgid "%s: failed to seek to archive member\n"
msgstr "%s: lyckades inte söka till arkivmedlem\n"
-#: elfedit.c:717 readelf.c:21880
+#: elfedit.c:735 readelf.c:22335
#, c-format
msgid "'%s': No such file\n"
msgstr "â€%sâ€: Filen finns inte\n"
-#: elfedit.c:719 readelf.c:21882
+#: elfedit.c:737 readelf.c:22337
#, c-format
msgid "Could not locate '%s'. System error message: %s\n"
msgstr "Kunde inte hitta â€%sâ€. Systemfelmeddelande: %s\n"
-#: elfedit.c:740 readelf.c:21889
+#: elfedit.c:758 readelf.c:22344
#, c-format
msgid "'%s' is not an ordinary file\n"
msgstr "â€%s†är inte en normal fil\n"
-#: elfedit.c:766 readelf.c:21911
+#: elfedit.c:784 readelf.c:22366
#, c-format
msgid "%s: Failed to read file's magic number\n"
msgstr "%s: Lyckades inte läsa filens magiska tal\n"
-#: elfedit.c:830
+#: elfedit.c:848
#, c-format
msgid "Unknown OSABI: %s\n"
msgstr "Okänt OSABI: %s\n"
-#: elfedit.c:855
+#: elfedit.c:873
#, c-format
msgid "Unknown machine type: %s\n"
msgstr "Okänd maskintyp: %s\n"
-#: elfedit.c:874
+#: elfedit.c:892
#, c-format
msgid "Unknown type: %s\n"
msgstr "Okänd typ: %s\n"
-#: elfedit.c:921
+#: elfedit.c:943
#, c-format
msgid "Usage: %s <option(s)> elffile(s)\n"
msgstr "Användning: %s <flaggor> elffil(er)>\n"
-#: elfedit.c:923
+#: elfedit.c:945
#, c-format
msgid " Update the ELF header of ELF files\n"
msgstr "Uppdatera ELF-huvudet på ELF-filer\n"
-#: elfedit.c:924 objcopy.c:565 objcopy.c:706 strings.c:679
+#: elfedit.c:946 nm.c:295 objcopy.c:565 objcopy.c:706 strings.c:1314
#, c-format
msgid " The options are:\n"
msgstr " Flaggorna är:\n"
-#: elfedit.c:925
+#: elfedit.c:947
#, c-format
msgid ""
" --input-mach [none|i386|iamcu|l1om|k1om|x86_64]\n"
@@ -4663,6 +4689,8 @@ msgid ""
" Set input OSABI\n"
" --output-osabi [%s]\n"
" Set output OSABI\n"
+" --input-abiversion [0-255] Set input ABIVERSION\n"
+" --output-abiversion [0-255] Set output ABIVERSION\n"
msgstr ""
" --input-mach [none|i386|iamcu|l1om|k1om|x86_64]\n"
" Ange indatas maskintyp\n"
@@ -4676,8 +4704,10 @@ msgstr ""
" Ange indatas OSABI\n"
" --output-osabi [%s]\n"
" Ange utdatas OSABI\n"
+" --input-abiversion [0-255] Ange ABIVERSION för indata\n"
+" --output-abiversion [0-255] Ange ABIVERSION för utdata\n"
-#: elfedit.c:940
+#: elfedit.c:964
#, c-format
msgid ""
" --enable-x86-feature [ibt|shstk|lam_u48|lam_u57]\n"
@@ -4690,7 +4720,7 @@ msgstr ""
" --disable-x86-feature [ibt|shstk|lam_u48|lam_u57]\n"
" Avaktivera en x86-funktion\n"
-#: elfedit.c:946
+#: elfedit.c:970
#, c-format
msgid ""
" -h --help Display this information\n"
@@ -4699,6 +4729,11 @@ msgstr ""
" -h --help Visa denna hjälp\n"
" -v --version Visa versionsnumret på %s\n"
+#: elfedit.c:1049 elfedit.c:1060
+#, c-format
+msgid "Invalid ABIVERSION: %s\n"
+msgstr "Ogiltig ABIVERSION: %s\n"
+
#: emul_aix.c:44
#, c-format
msgid " [-g] - 32 bit small archive\n"
@@ -4719,149 +4754,249 @@ msgstr " [-X64] - ignorerar 32-bitarsobject\n"
msgid " [-X32_64] - accepts 32 and 64 bit objects\n"
msgstr " [-X32_64] - accepterar 32- och 64-bitarsobjekt\n"
-#: mclex.c:240
+#: mclex.c:245
msgid "Duplicate symbol entered into keyword list."
msgstr "Dubblerad symbol inlagt i nyckelordslistan."
-#: nm.c:274 size.c:88 strings.c:677
+#: nm.c:293 size.c:88 strings.c:1312
#, c-format
msgid "Usage: %s [option(s)] [file(s)]\n"
msgstr "Användning: %s [flaggor] [fil(er)]\n"
-#: nm.c:275
+#: nm.c:294
#, c-format
msgid " List symbols in [file(s)] (a.out by default).\n"
msgstr "Lista symboler i [fil(er)] (a.out som standard).\n"
-#: nm.c:276
+#: nm.c:296
+#, c-format
+msgid " -a, --debug-syms Display debugger-only symbols\n"
+msgstr " -a, --debug-syms Visa symboler endast till för felsökning\n"
+
+#: nm.c:298
+#, c-format
+msgid " -A, --print-file-name Print name of the input file before every symbol\n"
+msgstr " -A, --print-file-name Skriv infilens namn före varje symbol\n"
+
+#: nm.c:300
+#, c-format
+msgid " -B Same as --format=bsd\n"
+msgstr " -B Samma som --format=bsd\n"
+
+#: nm.c:302
+#, c-format
+msgid " -C, --demangle[=STYLE] Decode mangled/processed symbol names\n"
+msgstr " -C, --demangle[=STIL] Avkoda manglade/bearbetade symbolnamn\n"
+
+#: nm.c:304 readelf.c:5056
+msgid " STYLE can be "
+msgstr " STIL kan vara "
+
+#: nm.c:306
+#, c-format
+msgid " --no-demangle Do not demangle low-level symbol names\n"
+msgstr " --no-demangle Avmangla inte lågnivåsymbolnamn\n"
+
+#: nm.c:308
+#, c-format
+msgid " --recurse-limit Enable a demangling recursion limit. (default)\n"
+msgstr " --recurse-limit Aktivera en rekursionsgräns vid avmangling. (standard)\n"
+
+#: nm.c:310
+#, c-format
+msgid " --no-recurse-limit Disable a demangling recursion limit.\n"
+msgstr " --no-recurse-limit Avaktivera en rekursionsgräns för avmangling.\n"
+
+#: nm.c:312
+#, c-format
+msgid " -D, --dynamic Display dynamic symbols instead of normal symbols\n"
+msgstr " -D, --dynamic Visa dynamiska symboler istället för vanliga symboler\n"
+
+#: nm.c:314
+#, c-format
+msgid " --defined-only Display only defined symbols\n"
+msgstr " --defined-only Visa endast definierade symboler\n"
+
+#: nm.c:316
+#, c-format
+msgid " -e (ignored)\n"
+msgstr " -e (ignorerad)\n"
+
+#: nm.c:318
#, c-format
msgid ""
-" The options are:\n"
-" -a, --debug-syms Display debugger-only symbols\n"
-" -A, --print-file-name Print name of the input file before every symbol\n"
-" -B Same as --format=bsd\n"
-" -C, --demangle[=STYLE] Decode low-level symbol names into user-level names\n"
-" The STYLE, if specified, can be `auto' (the default),\n"
-" `gnu', `lucid', `arm', `hp', `edg', `gnu-v3', `java'\n"
-" or `gnat'\n"
-" --no-demangle Do not demangle low-level symbol names\n"
-" --recurse-limit Enable a demangling recursion limit. This is the default.\n"
-" --no-recurse-limit Disable a demangling recursion limit.\n"
-" -D, --dynamic Display dynamic symbols instead of normal symbols\n"
-" --defined-only Display only defined symbols\n"
-" -e (ignored)\n"
" -f, --format=FORMAT Use the output format FORMAT. FORMAT can be `bsd',\n"
-" `sysv', `posix' or 'just-symbols'. The default is `bsd'\n"
-" -g, --extern-only Display only external symbols\n"
-" --ifunc-chars=CHARS Characters to use when displaying ifunc symbols\n"
-" -j, --just-symbols Same as --format=just-symbols\n"
-" -l, --line-numbers Use debugging information to find a filename and\n"
-" line number for each symbol\n"
-" -n, --numeric-sort Sort symbols numerically by address\n"
-" -o Same as -A\n"
-" -p, --no-sort Do not sort the symbols\n"
-" -P, --portability Same as --format=posix\n"
-" -r, --reverse-sort Reverse the sense of the sort\n"
+" `sysv', `posix' or 'just-symbols'.\n"
+" The default is `bsd'\n"
msgstr ""
-" Flaggorna är:\n"
-" -a, --debug-syms Visa endast felsökningssymboler\n"
-" -A, --print-file-name Skriv infilens namn före varje symbol\n"
-" -B Samma som --format=bsd\n"
-" -C, --demangle[=STIL] Avkoda manglade symbolnamn till användarform\n"
-" STIL, om den anges, kan vara â€auto†(standard)\n"
-" â€gnuâ€, â€lucidâ€, â€armâ€, â€hpâ€, â€edgâ€, â€gnu-v3â€, â€javaâ€,\n"
-" eller â€gnatâ€\n"
-" --no-demangle Avkoda inte manglade symbolnamn\n"
-" -R --recurse-limit Aktivera en rekursionsgräns vid avmangling. Detta är standard.\n"
-" -r --no-recurse-limit Avaktivera rekursionsgränsen vid avmangling.\n"
-" -D, --dynamic Visa dynamiska symboler istället för vanliga symboler\n"
-" --defined-only Visa endast definierade symboler\n"
-" -e (ignorerad)\n"
" -f, --format=FORMAT Använd FORMAT som utdataformat. FORMAT kan vara\n"
" â€bsdâ€, â€sysvâ€, â€posix†eller â€just-symbolsâ€.\n"
" Standard är â€bsdâ€\n"
-" -g, --extern-only Visa endast externa symboler\n"
-" --ifunc-chars=TECKEN Tecken att använda när ifunc-symboler visas\n"
-" -j, --just-symbols Samma som --format=just-symbols\n"
+
+#: nm.c:322
+#, c-format
+msgid " -g, --extern-only Display only external symbols\n"
+msgstr " -g, --extern-only Visa endast externa symboler\n"
+
+#: nm.c:324
+#, c-format
+msgid " --ifunc-chars=CHARS Characters to use when displaying ifunc symbols\n"
+msgstr " --ifunc-chars=TECKEN Tecken att använda när ifunc-symboler visas\n"
+
+#: nm.c:326
+#, c-format
+msgid " -j, --just-symbols Same as --format=just-symbols\n"
+msgstr " -j, --just-symbols Samma som --format=just-symbols\n"
+
+#: nm.c:328
+#, c-format
+msgid ""
+" -l, --line-numbers Use debugging information to find a filename and\n"
+" line number for each symbol\n"
+msgstr ""
" -l, --line-numbers Använd felsökningsinformationen för att slå upp\n"
" filnamn och radnummer för varje symbol\n"
-" -n, --numeric-sort Sortera symboler numeriskt efter adress\n"
-" -o Samma som -A\n"
-" -p, --no-sort Sortera inte symbolerna\n"
-" -P, --portability Samma som --format=posix\n"
-" -r, --reverse-sort Sortera baklänges\n"
-#: nm.c:303
+#: nm.c:331
+#, c-format
+msgid " -n, --numeric-sort Sort symbols numerically by address\n"
+msgstr " -n, --numeric-sort Sortera symboler numeriskt efter adress\n"
+
+#: nm.c:333
+#, c-format
+msgid " -o Same as -A\n"
+msgstr " -o Samma som -A\n"
+
+#: nm.c:335
+#, c-format
+msgid " -p, --no-sort Do not sort the symbols\n"
+msgstr " -p, --no-sort Sortera inte symbolerna\n"
+
+#: nm.c:337
+#, c-format
+msgid " -P, --portability Same as --format=posix\n"
+msgstr " -P, --portability Samma som --format=posix\n"
+
+#: nm.c:339
+#, c-format
+msgid " -r, --reverse-sort Reverse the sense of the sort\n"
+msgstr " -r, --reverse-sort Sortera baklänges\n"
+
+#: nm.c:342
#, c-format
msgid " --plugin NAME Load the specified plugin\n"
msgstr " --plugin NAMN Ladda den angivna insticksmodulen\n"
-#: nm.c:306
+#: nm.c:345
+#, c-format
+msgid " -S, --print-size Print size of defined symbols\n"
+msgstr " -S, --print-size Skriv ut storleken på definierade symboler\n"
+
+#: nm.c:347
+#, c-format
+msgid " -s, --print-armap Include index for symbols from archive members\n"
+msgstr " -s, --print-armap Ta med index för symboler i arkivmedlemmar\n"
+
+#: nm.c:349
+#, c-format
+msgid " --quiet Suppress \"no symbols\" diagnostic\n"
+msgstr " --quiet Utelämna felmeddelanden om â€inga symbolerâ€\n"
+
+#: nm.c:351
+#, c-format
+msgid " --size-sort Sort symbols by size\n"
+msgstr " --size-sort Sortera symboler efter storlek\n"
+
+#: nm.c:353
+#, c-format
+msgid " --special-syms Include special symbols in the output\n"
+msgstr " --special-syms Ta med specialsymboler i utdata\n"
+
+#: nm.c:355
+#, c-format
+msgid " --synthetic Display synthetic symbols as well\n"
+msgstr " --synthetic Visa syntetiska symboler också\n"
+
+#: nm.c:357
+#, c-format
+msgid " -t, --radix=RADIX Use RADIX for printing symbol values\n"
+msgstr " -t, --radix=BAS Skriv ut siffervärden i talbas BAS\n"
+
+#: nm.c:359
+#, c-format
+msgid " --target=BFDNAME Specify the target object format as BFDNAME\n"
+msgstr " --target=BFDNAMN Ange målobjektformatet att vara BFDNAMN\n"
+
+#: nm.c:361
+#, c-format
+msgid " -u, --undefined-only Display only undefined symbols\n"
+msgstr " -u, --undefined-only Visa endast odefinierade symboler\n"
+
+#: nm.c:363
#, c-format
msgid ""
-" -S, --print-size Print size of defined symbols\n"
-" -s, --print-armap Include index for symbols from archive members\n"
-" --quiet Suppress \"no symbols\" diagnostic\n"
-" --size-sort Sort symbols by size\n"
-" --special-syms Include special symbols in the output\n"
-" --synthetic Display synthetic symbols as well\n"
-" -t, --radix=RADIX Use RADIX for printing symbol values\n"
-" --target=BFDNAME Specify the target object format as BFDNAME\n"
-" -u, --undefined-only Display only undefined symbols\n"
-" --with-symbol-versions Display version strings after symbol names\n"
-" -X 32_64 (ignored)\n"
-" @FILE Read options from FILE\n"
-" -h, --help Display this information\n"
-" -V, --version Display this program's version number\n"
-"\n"
-msgstr ""
-" -S, --print-size Skriv ut storleken på definierade symboler\n"
-" -s, --print-armap Ta med index för symboler i arkivmedlemmar\n"
-" --quiet Utelämna felmeddelanden om â€inga symbolerâ€\n"
-" --size-sort Sortera symboler efter storlek\n"
-" --special-syms Inkludera specialsymboler i utdata\n"
-" --synthetic Visa syntetiska symboler också\n"
-" -t, --radix=BAS Skriv ut siffervärden i talbas BAS\n"
-" --target=BFDNAMN Ange målobjektformatet att vara BFDNAMN\n"
-" -u, --undefined-only Visa endast odefinierade symboler\n"
-" --with-symbol-versions Visa versionssträngar efter symbolnamn\n"
-" -X 32_64 (ignorerad)\n"
-" @<fil> Läs flaggor från FIL\n"
-" -h, --help Visa denna hjälptext\n"
-" -V, --version Visa programmets versionsinformation\n"
-"\n"
-
-#: nm.c:340
+" -U {d|s|i|x|e|h} Specify how to treat UTF-8 encoded unicode characters\n"
+" --unicode={default|show|invalid|hex|escape|highlight}\n"
+msgstr ""
+" -U {d|s|i|x|e|h} Ange hur UTF-8-kodade unicode-tecken skall hanteras\n"
+" --unicode={default|show|invalid|hex|escape|highlight}\n"
+
+#: nm.c:366
+#, c-format
+msgid " --with-symbol-versions Display version strings after symbol names\n"
+msgstr " --with-symbol-versions Visa versionssträngar efter symbolnamn\n"
+
+#: nm.c:368
+#, c-format
+msgid " -X 32_64 (ignored)\n"
+msgstr " -X 32_64 (ignorerad)\n"
+
+#: nm.c:370
+#, c-format
+msgid " @FILE Read options from FILE\n"
+msgstr " @FIL Läs flaggor från FIL\n"
+
+#: nm.c:372
+#, c-format
+msgid " -h, --help Display this information\n"
+msgstr " -h, --help Visa den här informationen\n"
+
+#: nm.c:374
+#, c-format
+msgid " -V, --version Display this program's version number\n"
+msgstr " -V, --version Visa det här programmets versionsnummer\n"
+
+#: nm.c:395
#, c-format
msgid "%s: invalid radix"
msgstr "%s: ogiltig talbas"
-#: nm.c:370
+#: nm.c:425
#, c-format
msgid "%s: invalid output format"
msgstr "%s: ogiltigt utdataformat"
-#: nm.c:395 readelf.c:12090 readelf.c:12133
+#: nm.c:450 readelf.c:12440 readelf.c:12483
#, c-format
msgid "<processor specific>: %d"
msgstr "<processorspecifik>: %d"
-#: nm.c:397 readelf.c:12097 readelf.c:12150
+#: nm.c:452 readelf.c:12447 readelf.c:12500
#, c-format
msgid "<OS specific>: %d"
msgstr "<OS-specifik>: %d"
-#: nm.c:399 readelf.c:12100 readelf.c:12153
+#: nm.c:454 readelf.c:12450 readelf.c:12503
#, c-format
msgid "<unknown>: %d"
msgstr "<okänd>: %d"
-#: nm.c:429
+#: nm.c:484
#, c-format
msgid "<unknown>: %d/%d"
msgstr "<okänd>: %d/%d"
-#: nm.c:499
+#: nm.c:742
#, c-format
msgid ""
"\n"
@@ -4870,12 +5005,12 @@ msgstr ""
"\n"
"Arkivindex:\n"
-#: nm.c:553 nm.c:1250
+#: nm.c:797 nm.c:1494
#, c-format
msgid "%s: plugin needed to handle lto object"
msgstr "%s: en insticksmodul behövs för att hantera lto-objekt"
-#: nm.c:1487
+#: nm.c:1731
#, c-format
msgid ""
"\n"
@@ -4888,7 +5023,7 @@ msgstr ""
"Odefinierade symboler från %s:\n"
"\n"
-#: nm.c:1489
+#: nm.c:1733
#, c-format
msgid ""
"\n"
@@ -4901,7 +5036,7 @@ msgstr ""
"Symboler från %s:\n"
"\n"
-#: nm.c:1491 nm.c:1552
+#: nm.c:1735 nm.c:1796
#, c-format
msgid ""
"Name Value Class Type Size Line Section\n"
@@ -4910,7 +5045,7 @@ msgstr ""
"Namn Värde Klass Typ Storlek Rad Sektion\n"
"\n"
-#: nm.c:1494 nm.c:1555
+#: nm.c:1738 nm.c:1799
#, c-format
msgid ""
"Name Value Class Type Size Line Section\n"
@@ -4919,7 +5054,7 @@ msgstr ""
"Namn Värde Klass Typ Storlek Rad Sektion\n"
"\n"
-#: nm.c:1548
+#: nm.c:1792
#, c-format
msgid ""
"\n"
@@ -4932,7 +5067,7 @@ msgstr ""
"Odefinierade symboler från %s[%s]:\n"
"\n"
-#: nm.c:1550
+#: nm.c:1794
#, c-format
msgid ""
"\n"
@@ -4945,20 +5080,25 @@ msgstr ""
"Symboler från %s[%s]:\n"
"\n"
-#: nm.c:1656
+#: nm.c:1900
#, c-format
msgid "Print width has not been initialized (%d)"
msgstr "Utskriftsbredden har inte initierats (%d)"
-#: nm.c:1915
+#: nm.c:2162 objdump.c:5674 readelf.c:5472 strings.c:292
+#, c-format
+msgid "invalid argument to -U/--unicode: %s"
+msgstr "ogiltigt argument till -U/--unicode: %s"
+
+#: nm.c:2177
msgid "Only -X 32_64 is supported"
msgstr "Endast -X 32_64 hanteras"
-#: nm.c:1947
+#: nm.c:2209
msgid "Using the --size-sort and --undefined-only options together"
msgstr "Användning av --size-sort och --undefined-only samtidigt"
-#: nm.c:1948
+#: nm.c:2210
msgid "will produce no output, since undefined symbols have no size."
msgstr "ger ingen utdata, eftersom odefinierade symboler inte har någon storlek"
@@ -5181,7 +5321,7 @@ msgstr ""
" --set-section-flags <namn>=<flaggor>\n"
" Sätt sektion <namn>s egenskaper till\n"
" <flaggor>\n"
-" --set-section-alignment <namn>=<just>\\n\"\n"
+" --set-section-alignment <namn>=<just>\n"
" Sätt setkion <namn>s justering till <just> byte\n"
" --add-section <namn>=<fil> Lägg till sektion <namn> från <fil> i utdata\n"
" --update-section <namn>=<fil>\n"
@@ -5362,7 +5502,7 @@ msgstr "fel: %s både sätter och ändrar LMA"
msgid "cannot open '%s': %s"
msgstr "kan inte öppna: â€%sâ€: %s"
-#: objcopy.c:1094 objcopy.c:5055
+#: objcopy.c:1094 objcopy.c:5091
#, c-format
msgid "%s: fread failed"
msgstr "%s: fread misslyckades"
@@ -5387,591 +5527,595 @@ msgstr "fel: sektionen %s matchar både uppdaterings- och borttagningsflaggorna"
msgid "Section %s not found"
msgstr "Sektionen %s finns inte"
-#: objcopy.c:1654
+#: objcopy.c:1550
+msgid "redefining symbols does not work on LTO-compiled object files"
+msgstr "att omdefiniera symboler fungerar inte på LTO-kompilerade objektfiler"
+
+#: objcopy.c:1662
#, c-format
msgid "not stripping symbol `%s' because it is named in a relocation"
msgstr "tar inte bort symbolen â€%s†för den namnges i en omlokalisering"
-#: objcopy.c:1715
+#: objcopy.c:1723
#, c-format
msgid "'before=%s' not found"
msgstr "â€before=%s†finns inte"
-#: objcopy.c:1754
+#: objcopy.c:1762
#, c-format
msgid "%s: Multiple redefinition of symbol \"%s\""
msgstr "%s: Flera omdefinieringar av symbol â€%sâ€"
-#: objcopy.c:1758
+#: objcopy.c:1766
#, c-format
msgid "%s: Symbol \"%s\" is target of more than one redefinition"
msgstr "%s: Mer än en symbol omdefinieras till â€%sâ€"
-#: objcopy.c:1785
+#: objcopy.c:1793
#, c-format
msgid "couldn't open symbol redefinition file %s (error: %s)"
msgstr "kunde inte öppna fil â€%s†med symbolomdefinieringar (fel: %s)"
-#: objcopy.c:1863
+#: objcopy.c:1871
#, c-format
msgid "%s:%d: garbage found at end of line"
msgstr "%s:%d: skräp i slutet av raden"
-#: objcopy.c:1866
+#: objcopy.c:1874
#, c-format
msgid "%s:%d: missing new symbol name"
msgstr "%s:%d: nytt symbolnamn saknas"
-#: objcopy.c:1876
+#: objcopy.c:1884
#, c-format
msgid "%s:%d: premature end of file"
msgstr "%s:%d: för tidigt filslut"
-#: objcopy.c:1903
+#: objcopy.c:1910
#, c-format
msgid "stat returns negative size for `%s'"
msgstr "stat returnerar negativ storlek pÃ¥ â€%sâ€"
-#: objcopy.c:1915
+#: objcopy.c:1922
#, c-format
msgid "copy from `%s' [unknown] to `%s' [unknown]\n"
msgstr "kopiera frÃ¥n â€%s†[okänd] till â€%s†[okänd]\n"
-#: objcopy.c:2162
+#: objcopy.c:2167
#, c-format
msgid "%s[%s]: Cannot merge - there are relocations against this section"
msgstr "%s[%s]: Kan inte slå samman – det finns omlokaliseringar mot denna sektion"
-#: objcopy.c:2184
+#: objcopy.c:2189
msgid "corrupt GNU build attribute note: description size not a factor of 4"
msgstr "trasig notering om GNU-byggattribut: beskrivningsstorleken är inte en multipel av 4"
-#: objcopy.c:2191
+#: objcopy.c:2196
msgid "corrupt GNU build attribute note: wrong note type"
msgstr "trasig notering om GNU-byggattribut: felaktig noteringstyp"
-#: objcopy.c:2197
+#: objcopy.c:2202
msgid "corrupt GNU build attribute note: note too big"
msgstr "trasig notering om GNU-byggattribut: noteringen är för stor"
-#: objcopy.c:2203
+#: objcopy.c:2208
msgid "corrupt GNU build attribute note: name too small"
msgstr "trasig notering om GNU-byggattribut: namnet är för litet"
-#: objcopy.c:2226
+#: objcopy.c:2231
msgid "corrupt GNU build attribute note: unsupported version"
msgstr "trasig notering om GNU-byggattribut: ej stödd version"
-#: objcopy.c:2260
+#: objcopy.c:2265
msgid "corrupt GNU build attribute note: bad description size"
msgstr "trasig notering om GNU-byggattribut: felaktig beskrivningsstorlek"
-#: objcopy.c:2296
+#: objcopy.c:2301
msgid "corrupt GNU build attribute note: name not NUL terminated"
msgstr "trasig notering om GNU-byggattribut: namnet är inte NUL-avslutat"
-#: objcopy.c:2308
+#: objcopy.c:2313
msgid "corrupt GNU build attribute notes: excess data at end"
msgstr "trasig notering om GNU-byggattribut: extra data på slutet"
-#: objcopy.c:2315
+#: objcopy.c:2320
msgid "bad GNU build attribute notes: no known versions detected"
msgstr "felaktiga noteringar om GNU-byggattribut: inga kända versioner hittade"
#. This happens with glibc. No idea why.
-#: objcopy.c:2319
+#: objcopy.c:2324
#, c-format
msgid "%s[%s]: Warning: version note missing - assuming version 3"
msgstr "%s[%s]: Varning: versionsnotering saknas – antar version 3"
-#: objcopy.c:2329
+#: objcopy.c:2334
msgid "bad GNU build attribute notes: multiple different versions"
msgstr "felaktiga noteringar om GNU-byggattribut: flera olika versioner"
-#: objcopy.c:2569
+#: objcopy.c:2574
#, c-format
msgid "%s[%s]: Note - dropping 'share' flag as output format is not COFF"
msgstr "%s[%s]: Obs – tar bort flaggan â€share†eftersom utmatningsformatet inte är COFF"
#. PR 17636: Call non-fatal so that we return to our parent who
#. may need to tidy temporary files.
-#: objcopy.c:2601
+#: objcopy.c:2606
#, c-format
msgid "unable to change endianness of '%s'"
msgstr "kan inte ändra byteordning pÃ¥ â€%sâ€"
-#: objcopy.c:2608
+#: objcopy.c:2613
#, c-format
msgid "unable to modify '%s' due to errors"
msgstr "kan inte ändra â€%s†pÃ¥ grund av fel"
-#: objcopy.c:2621
+#: objcopy.c:2626
#, c-format
msgid "error: the input file '%s' has no sections"
msgstr "fel: infilen â€%s†har inga sektioner"
-#: objcopy.c:2631
+#: objcopy.c:2636
#, c-format
msgid "--compress-debug-sections=[zlib|zlib-gnu|zlib-gabi] is unsupported on `%s'"
msgstr "--compress-debug-sections=[zlib|zlib-gnu|zlib-gabi] stödjs inte pÃ¥ â€%sâ€"
-#: objcopy.c:2638
+#: objcopy.c:2643
#, c-format
msgid "--elf-stt-common=[yes|no] is unsupported on `%s'"
msgstr "--elf-stt-common=[yes|no] stödjs inte pÃ¥ â€%sâ€"
-#: objcopy.c:2645
+#: objcopy.c:2650
#, c-format
msgid "copy from `%s' [%s] to `%s' [%s]\n"
msgstr "kopierar frÃ¥n â€%s†[%s] till â€%s†[%s]\n"
-#: objcopy.c:2693
+#: objcopy.c:2698
#, c-format
msgid "Input file `%s' ignores binary architecture parameter."
msgstr "Infilen â€%s†ignorerar parameter för binärarkitektur."
-#: objcopy.c:2709
+#: objcopy.c:2714
#, c-format
msgid "Unable to recognise the format of the input file `%s'"
msgstr "Känner inte igen formatet pÃ¥ infilen â€%sâ€"
-#: objcopy.c:2712
+#: objcopy.c:2717
#, c-format
msgid "Output file cannot represent architecture `%s'"
msgstr "Utfilen kan inte representera arkitekturen â€%sâ€"
-#: objcopy.c:2775
+#: objcopy.c:2780
#, c-format
msgid "warning: file alignment (0x%s) > section alignment (0x%s)"
msgstr "varning: filjustering (0x%s) > sektionsjustering (0x%s)"
-#: objcopy.c:2848
+#: objcopy.c:2853
#, c-format
msgid "can't add section '%s'"
msgstr "kan inte lägga till sektion â€%sâ€"
-#: objcopy.c:2862
+#: objcopy.c:2867
#, c-format
msgid "can't create section `%s'"
msgstr "kan inte skapa sektion â€%sâ€"
-#: objcopy.c:2910
+#: objcopy.c:2915
#, c-format
msgid "error: %s not found, can't be updated"
msgstr "fel: %s finns inte, kan inte uppdateras"
-#: objcopy.c:2943
+#: objcopy.c:2948
msgid "warning: note section is empty"
msgstr "varning: noteringssektionen är tom"
-#: objcopy.c:2952
+#: objcopy.c:2957
msgid "warning: could not load note section"
msgstr "varning: kunde inte läsa in noteringssektionen"
-#: objcopy.c:2968
+#: objcopy.c:2973
msgid "warning: failed to set merged notes size"
msgstr "varning: misslyckades att sätta storleken på sammanslagna noteringar"
-#: objcopy.c:2994
+#: objcopy.c:2999
#, c-format
msgid "can't dump section '%s' - it does not exist"
msgstr "kan inte skriva sektion â€%s†— den finns inte"
-#: objcopy.c:3002
+#: objcopy.c:3007
msgid "can't dump section - it has no contents"
msgstr "kan inte skriva sektionen — den har inget innehåll"
-#: objcopy.c:3014
+#: objcopy.c:3019
msgid "could not open section dump file"
msgstr "kunde inte öppna sektionsutskriftsfil"
-#: objcopy.c:3022
+#: objcopy.c:3027
#, c-format
msgid "error writing section contents to %s (error: %s)"
msgstr "fel när sektionsinnehållet skrevs till %s (fel: %s)"
-#: objcopy.c:3032
+#: objcopy.c:3037
msgid "could not retrieve section contents"
msgstr "kunde inte hämta sektionsinnehållet"
-#: objcopy.c:3046
+#: objcopy.c:3051
#, c-format
msgid "%s: debuglink section already exists"
msgstr "%s: sektionen debuglink finns redan"
-#: objcopy.c:3058
+#: objcopy.c:3063
#, c-format
msgid "cannot create debug link section `%s'"
msgstr "kan inte skapa sektionen för felsökningslänkning â€%sâ€"
-#: objcopy.c:3152
+#: objcopy.c:3157
msgid "Can't fill gap after section"
msgstr "Kan inte fylla luckan efter sektionen"
-#: objcopy.c:3177
+#: objcopy.c:3182
msgid "can't add padding"
msgstr "kan inte lägga till utfyllnad"
-#: objcopy.c:3354
+#: objcopy.c:3359
msgid "error: failed to locate merged notes"
msgstr "fel: misslyckades att hitta sammanslagna noteringar"
-#: objcopy.c:3363
+#: objcopy.c:3368
msgid "error: failed to merge notes"
msgstr "fel: misslyckades att slå samman noteringar"
-#: objcopy.c:3372
+#: objcopy.c:3377
msgid "error: failed to copy merged notes into output"
msgstr "fel: misslyckades att kopiera sammanslagna noteringar till utdata"
-#: objcopy.c:3389
+#: objcopy.c:3394
#, c-format
msgid "%s: Could not find any mergeable note sections"
msgstr "%s: Kunde inte hitta några noteringssektioner som det gick att slå samman"
-#: objcopy.c:3398
+#: objcopy.c:3403
#, c-format
msgid "cannot fill debug link section `%s'"
msgstr "kan inte fylla sektionen för felsökningslänkning: â€%sâ€"
-#: objcopy.c:3459
+#: objcopy.c:3464
msgid "error copying private BFD data"
msgstr "fel vid kopiering av privat BFD-data: %s"
-#: objcopy.c:3470
+#: objcopy.c:3475
#, c-format
msgid "this target does not support %lu alternative machine codes"
msgstr "detta mål stödjer inte %lu alternativa maskinkoder"
-#: objcopy.c:3474
+#: objcopy.c:3479
msgid "treating that number as an absolute e_machine value instead"
msgstr "behandlar det talet som ett absolut e_machine-värde istället"
-#: objcopy.c:3478
+#: objcopy.c:3483
msgid "ignoring the alternative value"
msgstr "ignorerar alternativvärdet"
-#: objcopy.c:3524
+#: objcopy.c:3529
msgid "sorry: copying thin archives is not currently supported"
msgstr "ledsen: kopiering av tunna arkiv stödjs inte för närvarande"
-#: objcopy.c:3531 objcopy.c:3586
+#: objcopy.c:3536 objcopy.c:3591
#, c-format
msgid "cannot create tempdir for archive copying (error: %s)"
msgstr "kan inte skapa temporärkatalog för arkivkopiering (fel: %s)"
-#: objcopy.c:3568
+#: objcopy.c:3573
#, c-format
msgid "illegal pathname found in archive member: %s"
msgstr "otillåten sökväg hittat i arkivmedlem: %s"
-#: objcopy.c:3619
+#: objcopy.c:3625
msgid "Unable to recognise the format of file"
msgstr "Känner inte igen filens format"
-#: objcopy.c:3752
+#: objcopy.c:3758
#, c-format
msgid "error: the input file '%s' is empty"
msgstr "fel: infilen â€%s†är tom"
-#: objcopy.c:3830
+#: objcopy.c:3836
#, c-format
msgid "--add-gnu-debuglink ignored for archive %s"
msgstr "--add-gnu-debuglink ignoreras för arkivet %s"
-#: objcopy.c:3939
+#: objcopy.c:3945
#, c-format
msgid "Multiple renames of section %s"
msgstr "Flera namnbyten på sektion %s"
-#: objcopy.c:3985
+#: objcopy.c:3991
msgid "error in private header data"
msgstr "fel i privat huvuddata"
-#: objcopy.c:4078
+#: objcopy.c:4084
msgid "failed to create output section"
msgstr "misslyckades att skapa en utsektion"
-#: objcopy.c:4093
+#: objcopy.c:4099
msgid "failed to set size"
msgstr "misslyckades att sätta storleken"
-#: objcopy.c:4112
+#: objcopy.c:4118
msgid "failed to set vma"
msgstr "misslyckades att sätta vma"
-#: objcopy.c:4142
+#: objcopy.c:4148
msgid "failed to set alignment"
msgstr "misslyckades att sätta justeringen"
-#: objcopy.c:4174
+#: objcopy.c:4180
msgid "failed to copy private data"
msgstr "misslyckades att kopiera privata data"
-#: objcopy.c:4331
+#: objcopy.c:4337
msgid "relocation count is negative"
msgstr "antalet omlokaliseringar är negativt"
#. User must pad the section up in order to do this.
-#: objcopy.c:4430
+#: objcopy.c:4436
#, c-format
msgid "cannot reverse bytes: length of section %s must be evenly divisible by %d"
msgstr "kan inte reversera byte: längden på sektion %s måste vara jämnt delbar med %d"
-#: objcopy.c:4638
+#: objcopy.c:4644
msgid "can't create debugging section"
msgstr "kan inte skapa felsökningssektionen: %s"
-#: objcopy.c:4652
+#: objcopy.c:4658
msgid "can't set debugging section contents"
msgstr "kan inte sätta innehållet i felsökningssektionen"
-#: objcopy.c:4661
+#: objcopy.c:4667
#, c-format
msgid "don't know how to write debugging information for %s"
msgstr "vet inte hur man skriver felsökningsinformation för %s"
-#: objcopy.c:4850
+#: objcopy.c:4856
msgid "could not create temporary file to hold stripped copy"
msgstr "kunde inte skapa en temporärfil med en strippad kopia"
-#: objcopy.c:4924
+#: objcopy.c:4930
#, c-format
msgid "%s: bad version in PE subsystem"
msgstr "%s: felaktig version i PE-subsystemet"
-#: objcopy.c:4954
+#: objcopy.c:4960
#, c-format
msgid "unknown PE subsystem: %s"
msgstr "okänt PE-subsystem: %s"
-#: objcopy.c:5008 objcopy.c:5280 objcopy.c:5360 objcopy.c:5501 objcopy.c:5533
-#: objcopy.c:5596 objcopy.c:5600 objcopy.c:5620
+#: objcopy.c:5044 objcopy.c:5316 objcopy.c:5396 objcopy.c:5537 objcopy.c:5569
+#: objcopy.c:5632 objcopy.c:5636 objcopy.c:5656
#, c-format
msgid "bad format for %s"
msgstr "felaktigt format på %s"
-#: objcopy.c:5037
+#: objcopy.c:5073
#, c-format
msgid "cannot open: %s: %s"
msgstr "kan inte öppna: %s: %s"
-#: objcopy.c:5092
+#: objcopy.c:5128
msgid "byte number must be non-negative"
msgstr "bytenummer får inte vara negativt"
-#: objcopy.c:5098
+#: objcopy.c:5134
#, c-format
msgid "architecture %s unknown"
msgstr "arkitektur %s är okänd"
-#: objcopy.c:5106
+#: objcopy.c:5142
msgid "interleave must be positive"
msgstr "intervallstorleken måste vara positiv"
-#: objcopy.c:5115
+#: objcopy.c:5151
msgid "interleave width must be positive"
msgstr "intervallbredden måste vara positiv"
-#: objcopy.c:5433
+#: objcopy.c:5469
#, c-format
msgid "unrecognized --compress-debug-sections type `%s'"
msgstr "okänd --compress-debug-sections-typ â€%sâ€"
-#: objcopy.c:5454
+#: objcopy.c:5490
#, c-format
msgid "unrecognized --elf-stt-common= option `%s'"
msgstr "okänd --elf-stt-common=-flagga â€%sâ€"
-#: objcopy.c:5470
+#: objcopy.c:5506
#, c-format
msgid "Warning: truncating gap-fill from 0x%s to 0x%x"
msgstr "Varning: kortar av utfyllnadsvärdet från 0x%s till 0x%x"
-#: objcopy.c:5556
+#: objcopy.c:5592
msgid "bad format for --set-section-alignment: argument needed"
msgstr "felaktig format för --set-section-alignment: ett argument behövs"
-#: objcopy.c:5560
+#: objcopy.c:5596
msgid "bad format for --set-section-alignment: numeric argument needed"
msgstr "felaktig format för --set-section-alignment: ett numeriskt argument behövs"
#. Number has more than on 1, i.e. wasn't a power of 2.
-#: objcopy.c:5572
+#: objcopy.c:5608
msgid "bad format for --set-section-alignment: alignment is not a power of two"
msgstr "felaktig format till --set-section-alignment: justeringen är inte en potens av två"
-#: objcopy.c:5679
+#: objcopy.c:5715
#, c-format
msgid "unknown long section names option '%s'"
msgstr "okänt alternativ för lÃ¥nga sektionsnamn â€%sâ€"
-#: objcopy.c:5702
+#: objcopy.c:5738
msgid "unable to parse alternative machine code"
msgstr "kan inte tolka alternativ maskinkod"
-#: objcopy.c:5751
+#: objcopy.c:5787
msgid "number of bytes to reverse must be positive and even"
msgstr "antalet byte att invertera måste vara positivt och jämnt"
-#: objcopy.c:5754
+#: objcopy.c:5790
#, c-format
msgid "Warning: ignoring previous --reverse-bytes value of %d"
msgstr "Varning: ignorerar föregående --reverse-bytes-värde på %d"
-#: objcopy.c:5769
+#: objcopy.c:5805
#, c-format
msgid "%s: invalid reserve value for --heap"
msgstr "%s: ogiltigt reserveringsvärde till --heap"
-#: objcopy.c:5775
+#: objcopy.c:5811
#, c-format
msgid "%s: invalid commit value for --heap"
msgstr "%s: ogiltigt förbindelsevärde till --heap"
-#: objcopy.c:5800
+#: objcopy.c:5836
#, c-format
msgid "%s: invalid reserve value for --stack"
msgstr "%s: ogiltigt reserveringsvärde till --stack"
-#: objcopy.c:5806
+#: objcopy.c:5842
#, c-format
msgid "%s: invalid commit value for --stack"
msgstr "%s: ogiltigt förbindelsevärde till --stack"
-#: objcopy.c:5815
+#: objcopy.c:5851
msgid "verilog data width must be at least 1 byte"
msgstr "verilog-databredd måste vara åtminstone 1 byte"
-#: objcopy.c:5832
+#: objcopy.c:5868
msgid "--globalize-symbol(s) is incompatible with -G/--keep-global-symbol(s)"
msgstr "--globalize-symbol(s) är inkompatibelt med -G/--keep-global-symbol(s)"
-#: objcopy.c:5844
+#: objcopy.c:5880
msgid "interleave start byte must be set with --byte"
msgstr "intervallstartbyten måste anges med --byte"
-#: objcopy.c:5847
+#: objcopy.c:5883
msgid "byte number must be less than interleave"
msgstr "bytenummer måste vara mindre än antalet byte i intervallet"
-#: objcopy.c:5850
+#: objcopy.c:5886
msgid "interleave width must be less than or equal to interleave - byte`"
msgstr "intervallbredden måste vara mindre än eller lika med intervallet - byte`"
-#: objcopy.c:5879
+#: objcopy.c:5909
#, c-format
msgid "unknown input EFI target: %s"
msgstr "okänt in-EFI-mål: %s"
-#: objcopy.c:5910
+#: objcopy.c:5919
#, c-format
msgid "unknown output EFI target: %s"
msgstr "okänd utdata-EFI-mål: %s"
-#: objcopy.c:5936
+#: objcopy.c:5943
#, c-format
msgid "warning: could not create temporary file whilst copying '%s', (error: %s)"
msgstr "varning: kunde inte skapa temporärfil vid kopiering av â€%sâ€, (fel: %s)"
-#: objcopy.c:5973 objcopy.c:5987
+#: objcopy.c:5980 objcopy.c:5994
#, c-format
msgid "%s %s%c0x%s never used"
msgstr "%s %s%c0x%s användes aldrig"
-#: objdump.c:212
+#: objdump.c:225
#, c-format
msgid "Usage: %s <option(s)> <file(s)>\n"
msgstr "Användning: %s <flaggor> <fil(er)>\n"
-#: objdump.c:213
+#: objdump.c:226
#, c-format
msgid " Display information from object <file(s)>.\n"
msgstr "Visa information från objekt<fil(er)>.\n"
-#: objdump.c:214
+#: objdump.c:227
#, c-format
msgid " At least one of the following switches must be given:\n"
msgstr " Minst en av följande flaggor måste ges:\n"
-#: objdump.c:215
+#: objdump.c:228
#, c-format
msgid " -a, --archive-headers Display archive header information\n"
msgstr " -a, --archive-headers Visa arkivhuvudinformation\n"
-#: objdump.c:217
+#: objdump.c:230
#, c-format
msgid " -f, --file-headers Display the contents of the overall file header\n"
msgstr " -f, --file-headers Visa innehållet i det övergripande filhuvudet\n"
-#: objdump.c:219
+#: objdump.c:232
#, c-format
msgid " -p, --private-headers Display object format specific file header contents\n"
msgstr " -p, --private-headers Visa objektformatsspecifika filhuvudinnehåll\n"
-#: objdump.c:221
+#: objdump.c:234
#, c-format
msgid " -P, --private=OPT,OPT... Display object format specific contents\n"
msgstr " -P, --private=ALT,ALT… Visa objektformatspecifikt innehåll\n"
-#: objdump.c:223
+#: objdump.c:236
#, c-format
msgid " -h, --[section-]headers Display the contents of the section headers\n"
msgstr " -h, --[section-]headers Visa innehållet av sektionshuvuden\n"
-#: objdump.c:225
+#: objdump.c:238
#, c-format
msgid " -x, --all-headers Display the contents of all headers\n"
msgstr " -x, --all-headers Visa innehållet i alla huvuden\n"
-#: objdump.c:227
+#: objdump.c:240
#, c-format
msgid " -d, --disassemble Display assembler contents of executable sections\n"
msgstr " -d, --disassemble Visa assemblerinnehållet i exekverbara sektioner\n"
-#: objdump.c:229
+#: objdump.c:242
#, c-format
msgid " -D, --disassemble-all Display assembler contents of all sections\n"
msgstr " -D, --disassemble-all Visa assemblerinnehållet i alla sektioner\n"
-#: objdump.c:231
+#: objdump.c:244
#, c-format
msgid " --disassemble=<sym> Display assembler contents from <sym>\n"
msgstr " --disassemble=<sym> Visa assemblerinnehållet från <sym>\n"
-#: objdump.c:233
+#: objdump.c:246
#, c-format
msgid " -S, --source Intermix source code with disassembly\n"
msgstr " -S, --source Blanda in källkod med disassemblering\n"
-#: objdump.c:235
+#: objdump.c:248
#, c-format
msgid " --source-comment[=<txt>] Prefix lines of source code with <txt>\n"
msgstr " --source-comment[=<txt>] Inled källkodsrader med <txt>\n"
-#: objdump.c:237
+#: objdump.c:250
#, c-format
msgid " -s, --full-contents Display the full contents of all sections requested\n"
msgstr " -s, --full-contents Visa hela innehållet av alla begärda sektioner\n"
-#: objdump.c:239
+#: objdump.c:252
#, c-format
msgid " -g, --debugging Display debug information in object file\n"
msgstr " -g, --debugging Visa felsökningsinformation i objektfilen\n"
-#: objdump.c:241
+#: objdump.c:254
#, c-format
msgid " -e, --debugging-tags Display debug information using ctags style\n"
msgstr " -e, --debugging-tags Visa felsökningsinformation i ctags-stil\n"
-#: objdump.c:243
+#: objdump.c:256
#, c-format
msgid " -G, --stabs Display (in raw form) any STABS info in the file\n"
msgstr ""
" -G, --stabs Visa (i rått format) eventuell STABS-information\n"
" i filen\n"
-#: objdump.c:245
+#: objdump.c:258
#, c-format
msgid ""
" -W, --dwarf[a/=abbrev, A/=addr, r/=aranges, c/=cu_index, L/=decodedline,\n"
@@ -5988,7 +6132,7 @@ msgstr ""
" U/=trace_info]\n"
" Vissa innehållet i DWARF-felsökningssektioner\n"
-#: objdump.c:252
+#: objdump.c:265
#, c-format
msgid ""
" -Wk,--dwarf=links Display the contents of sections that link to\n"
@@ -5997,7 +6141,7 @@ msgstr ""
" -Wk,--dwarf=links Visa innehållet i sektioner som länkar till\n"
" separata felsökningsinformationsfiler\n"
-#: objdump.c:256
+#: objdump.c:269
#, c-format
msgid ""
" -WK,--dwarf=follow-links\n"
@@ -6007,7 +6151,7 @@ msgstr ""
" Följ länkar till separata filer med\n"
" felsökningsinformation (standard)\n"
-#: objdump.c:259
+#: objdump.c:272
#, c-format
msgid ""
" -WN,--dwarf=no-follow-links\n"
@@ -6017,7 +6161,7 @@ msgstr ""
" Följ inte länkar till separata filer med\n"
" felsökningsinformation\n"
-#: objdump.c:263
+#: objdump.c:276
#, c-format
msgid ""
" -WK,--dwarf=follow-links\n"
@@ -6027,7 +6171,7 @@ msgstr ""
" Följ länkar till separata filer med\n"
" felsökningsinformation\n"
-#: objdump.c:266
+#: objdump.c:279
#, c-format
msgid ""
" -WN,--dwarf=no-follow-links\n"
@@ -6038,7 +6182,7 @@ msgstr ""
" Följ inte länkar till separata filer med\n"
" felsökningsinformation (standard)\n"
-#: objdump.c:271
+#: objdump.c:284
#, c-format
msgid ""
" -L, --process-links Display the contents of non-debug sections in\n"
@@ -6048,52 +6192,52 @@ msgstr ""
" i separata filer med felsökningsinformation.\n"
" (Implicerar -WK)\n"
-#: objdump.c:275
+#: objdump.c:288
#, c-format
-msgid " --ctf=SECTION Display CTF info from SECTION\n"
-msgstr " --ctf=SEKTION Visa CTF-information från SEKTION\n"
+msgid " --ctf[=SECTION] Display CTF info from SECTION, (default `.ctf')\n"
+msgstr " --ctf[=SEKTION] Visa CTF-information frÃ¥n SEKTION, (standard â€.ctfâ€)\n"
-#: objdump.c:278
+#: objdump.c:291
#, c-format
msgid " -t, --syms Display the contents of the symbol table(s)\n"
msgstr " -t, --syms Visa innehållet i symboltabellerna\n"
-#: objdump.c:280
+#: objdump.c:293
#, c-format
msgid " -T, --dynamic-syms Display the contents of the dynamic symbol table\n"
msgstr " -T, --dynamic-syms Visa innehållet i den dynamiska symboltabellen\n"
-#: objdump.c:282
+#: objdump.c:295
#, c-format
msgid " -r, --reloc Display the relocation entries in the file\n"
msgstr " -r, --reloc Visa omlokaliseringsposterna i filen\n"
-#: objdump.c:284
+#: objdump.c:297
#, c-format
msgid " -R, --dynamic-reloc Display the dynamic relocation entries in the file\n"
msgstr " -R, --dynamic-reloc Visa dynamiska omlokaliseringsposter i filen\n"
-#: objdump.c:286
+#: objdump.c:299
#, c-format
msgid " @<file> Read options from <file>\n"
msgstr " @<fil> Läs flaggor från <fil>\n"
-#: objdump.c:288
+#: objdump.c:301
#, c-format
msgid " -v, --version Display this program's version number\n"
msgstr " -v, --version Visa det här programmets versionsnummer\n"
-#: objdump.c:290
+#: objdump.c:303
#, c-format
msgid " -i, --info List object formats and architectures supported\n"
msgstr " -i, --info Lista objektformat och arkitekturer som stödjs\n"
-#: objdump.c:292
+#: objdump.c:305
#, c-format
msgid " -H, --help Display this information\n"
msgstr " -H, --help Visa den här informationen\n"
-#: objdump.c:299
+#: objdump.c:312
#, c-format
msgid ""
"\n"
@@ -6102,76 +6246,72 @@ msgstr ""
"\n"
" Följande flaggor är frivilliga:\n"
-#: objdump.c:300
+#: objdump.c:313
#, c-format
msgid " -b, --target=BFDNAME Specify the target object format as BFDNAME\n"
msgstr " -b, --target=BFDNAMN Ange målobjektformatet att vara BFDNAMN\n"
-#: objdump.c:302
+#: objdump.c:315
#, c-format
msgid " -m, --architecture=MACHINE Specify the target architecture as MACHINE\n"
msgstr " -m, --architecture=MASKIN Ange målarkitekturen som MASKIN\n"
-#: objdump.c:304
+#: objdump.c:317
#, c-format
msgid " -j, --section=NAME Only display information for section NAME\n"
msgstr " -j, --section=NAMN Visa endast information om sektionen NAMN\n"
-#: objdump.c:306
+#: objdump.c:319
#, c-format
msgid " -M, --disassembler-options=OPT Pass text OPT on to the disassembler\n"
msgstr " -M, --disassembler-options=ALT Skicka texten ALT till disassembleraren\n"
-#: objdump.c:308
+#: objdump.c:321
#, c-format
msgid " -EB --endian=big Assume big endian format when disassembling\n"
msgstr ""
" -EB --endian=big Anta rakt byteordningsformat vid\n"
" disassemblering\n"
-#: objdump.c:310
+#: objdump.c:323
#, c-format
msgid " -EL --endian=little Assume little endian format when disassembling\n"
msgstr ""
" -EL --endian=little Anta omvänt bytordningsformat vid\n"
" disassemblering\n"
-#: objdump.c:312
+#: objdump.c:325
#, c-format
msgid " --file-start-context Include context from start of file (with -S)\n"
msgstr ""
" --file-start-context Inkludera sammanhanget från början av filen\n"
" (med -S)\n"
-#: objdump.c:314
+#: objdump.c:327
#, c-format
msgid " -I, --include=DIR Add DIR to search list for source files\n"
msgstr " -I, --include=KAT Lägg till KAT till söklistan för källkodsfiler\n"
-#: objdump.c:316
+#: objdump.c:329
#, c-format
msgid " -l, --line-numbers Include line numbers and filenames in output\n"
msgstr " -l, --line-numbers Inkludera radnummer och filnamn i utmatningen\n"
-#: objdump.c:318
+#: objdump.c:331
#, c-format
msgid " -F, --file-offsets Include file offsets when displaying information\n"
msgstr " -F, --file-offsets Ta med filavstånd när information visas\n"
-#: objdump.c:320
+#: objdump.c:333
#, c-format
-msgid ""
-" -C, --demangle[=STYLE] Decode mangled/processed symbol names\n"
-" The STYLE, if specified, can be `auto', `gnu',\n"
-" `lucid', `arm', `hp', `edg', `gnu-v3', `java'\n"
-" or `gnat'\n"
-msgstr ""
-" -C, --demangle[=STIL] Avkoda manglade/bearbetade symbolnamn\n"
-" STIL, om angivet, kan vara â€autoâ€, â€gnuâ€,\n"
-" â€lucidâ€, â€armâ€, â€hpâ€, â€edgâ€, â€gnu-v3â€, â€javaâ€\n"
-" eller â€gnatâ€\n"
+msgid " -C, --demangle[=STYLE] Decode mangled/processed symbol names\n"
+msgstr " -C, --demangle[=STIL] Avkoda manglade/processade symbolnamn\n"
-#: objdump.c:325
+#: objdump.c:335
+msgid " STYLE can be "
+msgstr " STIL kan vara "
+
+#: objdump.c:337
#, c-format
msgid ""
" --recurse-limit Enable a limit on recursion whilst demangling\n"
@@ -6180,115 +6320,124 @@ msgstr ""
" --recurse-limit Aktivera en gräns på rekursionen vid\n"
" avmangling (standard)\n"
-#: objdump.c:328
+#: objdump.c:340
#, c-format
msgid " --no-recurse-limit Disable a limit on recursion whilst demangling\n"
msgstr ""
" --no-recurse-limit Avaktivera en gräns på rekursionen vid\n"
" avmangling\n"
-#: objdump.c:330
+#: objdump.c:342
#, c-format
msgid " -w, --wide Format output for more than 80 columns\n"
msgstr " -w, --wide Formatera utmatninger för mer än 80 kolumner\n"
-#: objdump.c:332
+#: objdump.c:344
+#, c-format
+msgid ""
+" -U[d|l|i|x|e|h] Controls the display of UTF-8 unicode characters\n"
+" --unicode=[default|locale|invalid|hex|escape|highlight]\n"
+msgstr ""
+" -U[d|l|i|x|e|h] Styr visningen av UTF-8 unicode-tecken\n"
+" --unicode=[default|locale|invalid|hex|escape|highlight]\n"
+
+#: objdump.c:347
#, c-format
msgid " -z, --disassemble-zeroes Do not skip blocks of zeroes when disassembling\n"
msgstr ""
" -z, --disassemble-zeroes Hoppa inte över block av nollor vid\n"
" disassemblering\n"
-#: objdump.c:334
+#: objdump.c:349
#, c-format
msgid " --start-address=ADDR Only process data whose address is >= ADDR\n"
msgstr " --start-address=ADR Bearbeta bara data vars adress är ≥ ADR\n"
-#: objdump.c:336
+#: objdump.c:351
#, c-format
msgid " --stop-address=ADDR Only process data whose address is < ADDR\n"
msgstr " --stop-address=ADR Bearbeta bara data vars adress är < ADR\n"
-#: objdump.c:338
+#: objdump.c:353
#, c-format
msgid " --no-addresses Do not print address alongside disassembly\n"
msgstr " --no-addresses Skriv inte ut adresser med disassembleringen\n"
-#: objdump.c:340
+#: objdump.c:355
#, c-format
msgid " --prefix-addresses Print complete address alongside disassembly\n"
msgstr ""
" --prefix-addresses Skriv fullständiga adresser med\n"
" disassembleringen\n"
-#: objdump.c:342
+#: objdump.c:357
#, c-format
msgid " --[no-]show-raw-insn Display hex alongside symbolic disassembly\n"
msgstr " --[no-]show-raw-insn Visa hex med symbolisk disassemblering\n"
-#: objdump.c:344
+#: objdump.c:359
#, c-format
msgid " --insn-width=WIDTH Display WIDTH bytes on a single line for -d\n"
msgstr " --insn-width=BREDD Visa BREDD byte på en rad med -d\n"
-#: objdump.c:346
+#: objdump.c:361
#, c-format
msgid " --adjust-vma=OFFSET Add OFFSET to all displayed section addresses\n"
msgstr ""
" --adjust-vma=AVSTÅND Lägg till AVSTÅND till alla visade\n"
" sektionsadresser\n"
-#: objdump.c:348
+#: objdump.c:363
#, c-format
msgid " --special-syms Include special symbols in symbol dumps\n"
msgstr " --special-syms Ta med specialsymboler i symboldumpar\n"
-#: objdump.c:350
+#: objdump.c:365
#, c-format
msgid " --inlines Print all inlines for source line (with -l)\n"
msgstr " --inlines Skriv ut alla inline:ingar för källkodsrader\n"
-#: objdump.c:352
+#: objdump.c:367
#, c-format
msgid " --prefix=PREFIX Add PREFIX to absolute paths for -S\n"
msgstr " --prefix=PREFIX Lägg till PREFIX till absoluta sökvägar för -S\n"
-#: objdump.c:354
+#: objdump.c:369
#, c-format
msgid " --prefix-strip=LEVEL Strip initial directory names for -S\n"
msgstr " --prefix-strip=NIVÅ Ta bort inledande katalognamn för -S\n"
-#: objdump.c:356
+#: objdump.c:371
#, c-format
msgid " --dwarf-depth=N Do not display DIEs at depth N or greater\n"
msgstr " --dwarf-depth=N Visa inte DIE:r på djup N eller större\n"
-#: objdump.c:358
+#: objdump.c:373
#, c-format
msgid " --dwarf-start=N Display DIEs starting at offset N\n"
msgstr " --dwarf-start=N Visa DIE:r med start på avstånd N\n"
-#: objdump.c:360
+#: objdump.c:375
#, c-format
msgid " --dwarf-check Make additional dwarf consistency checks.\n"
msgstr " --dwarf-check Gör extra konsistenskontroller av dwarf.\n"
-#: objdump.c:363
+#: objdump.c:378
#, c-format
-msgid " --ctf-parent=SECTION Use SECTION as the CTF parent\n"
-msgstr " --ctf-parent=SEKTION Använd SEKTION som CTF-föräldern\n"
+msgid " --ctf-parent=NAME Use CTF archive member NAME as the CTF parent\n"
+msgstr " --ctf-parent=NAMN Använd CTF-arkivmedlem NAMN som CTF-föräldern\n"
-#: objdump.c:366
+#: objdump.c:381
#, c-format
msgid " --visualize-jumps Visualize jumps by drawing ASCII art lines\n"
msgstr " --visualize-jumps Visualisera hopp genom att rita ASCII-grafik\n"
-#: objdump.c:368
+#: objdump.c:383
#, c-format
msgid " --visualize-jumps=color Use colors in the ASCII art\n"
msgstr " --visualize-jumps=color Använd färger i ASCII-grafiken\n"
-#: objdump.c:370
+#: objdump.c:385
#, c-format
msgid ""
" --visualize-jumps=extended-color\n"
@@ -6297,7 +6446,7 @@ msgstr ""
" --visualize-jumps=extended-color\n"
" Använd utökade 8-bitars färgkoder\n"
-#: objdump.c:373
+#: objdump.c:388
#, c-format
msgid ""
" --visualize-jumps=off Disable jump visualization\n"
@@ -6306,7 +6455,7 @@ msgstr ""
" --visualize-jumps=off Avaktivera hoppvisualisering\n"
"\n"
-#: objdump.c:384
+#: objdump.c:399
#, c-format
msgid ""
"\n"
@@ -6315,71 +6464,71 @@ msgstr ""
"\n"
"Flaggor som stödjs för -P/--private-switch:\n"
-#: objdump.c:621
+#: objdump.c:759
#, c-format
msgid "section '%s' mentioned in a -j option, but not found in any input file"
msgstr "sektionen â€%s†nämns i en -j-flagga, men finns inte i nÃ¥gon infil"
-#: objdump.c:776
+#: objdump.c:914
#, c-format
msgid "Sections:\n"
msgstr "Sektioner:\n"
-#: objdump.c:782
+#: objdump.c:920
#, c-format
msgid "Idx %-*s Size %-*s%-*sFile off Algn"
msgstr "Idx %-*s Storlek %-*s%-*sFilavst Just"
-#: objdump.c:788
+#: objdump.c:926
#, c-format
msgid " Flags"
msgstr " Flaggor"
-#: objdump.c:810
+#: objdump.c:948
#, c-format
msgid "failed to read symbol table from: %s"
msgstr "misslyckades att läsa symboltabellen ifrån: %s"
-#: objdump.c:811 objdump.c:4753
+#: objdump.c:949 objdump.c:4907
msgid "error message was"
msgstr "felmeddelandet var"
-#: objdump.c:826
+#: objdump.c:964
#, c-format
msgid "error: symbol table size (%#lx) is larger than filesize (%#lx)"
msgstr "fel: symboltabellstorleken (%#lx) är större än filstorleken (%#lx)"
-#: objdump.c:856
+#: objdump.c:994
#, c-format
msgid "%s: not a dynamic object"
msgstr "%s: inte ett dynamiskt objekt"
-#: objdump.c:1455 objdump.c:1482
+#: objdump.c:1593 objdump.c:1620
#, c-format
msgid " (File Offset: 0x%lx)"
msgstr " (Filavstånd: 0x%lx)"
-#: objdump.c:1727
+#: objdump.c:1865
#, c-format
msgid "source file %s is more recent than object file\n"
msgstr "källfilen %s är nyare än objektfilen\n"
-#: objdump.c:2755
+#: objdump.c:2893
#, c-format
msgid "\t... (skipping %lu zeroes, resuming at file offset: 0x%lx)\n"
msgstr "\t… (hoppar över %lu nollor, återupptar vid filavstånd: 0x%lx)\n"
-#: objdump.c:2887
+#: objdump.c:3025
#, c-format
msgid "disassemble_fn returned length %d"
msgstr "disassemble_fn returnerade längden %d"
-#: objdump.c:3215 objdump.c:4391
+#: objdump.c:3353 objdump.c:4527
#, c-format
msgid "Reading section %s failed because: %s"
msgstr "Att läsa sektionen %s misslyckades för att: %s"
-#: objdump.c:3236
+#: objdump.c:3374
#, c-format
msgid ""
"\n"
@@ -6388,17 +6537,17 @@ msgstr ""
"\n"
"Disassemblering av sektion %s:\n"
-#: objdump.c:3527
+#: objdump.c:3665
#, c-format
msgid "can't use supplied machine %s"
msgstr "kan inte använda den angivna maskinen %s"
-#: objdump.c:3548
+#: objdump.c:3686
#, c-format
msgid "can't disassemble for architecture %s\n"
msgstr "kan inte disassemblera för arkitekturen %s\n"
-#: objdump.c:3637
+#: objdump.c:3775
#, c-format
msgid ""
"\n"
@@ -6407,7 +6556,7 @@ msgstr ""
"\n"
"Sektionen â€%s†har en felaktig storlek: %#llx.\n"
-#: objdump.c:3682
+#: objdump.c:3820
#, c-format
msgid ""
"\n"
@@ -6416,12 +6565,12 @@ msgstr ""
"\n"
"Kan inte hämta innehÃ¥llet i sektionen â€%sâ€.\n"
-#: objdump.c:3844
+#: objdump.c:3999
#, c-format
msgid "File %s does not contain any dwarf debug information\n"
msgstr "Filen %s innehåller inte någon dwarf-felsökningsinformation\n"
-#: objdump.c:3881
+#: objdump.c:4036
#, c-format
msgid ""
"No %s section present\n"
@@ -6430,12 +6579,12 @@ msgstr ""
"Det finns ingen %s-sektion\n"
"\n"
-#: objdump.c:3888
+#: objdump.c:4043
#, c-format
msgid "reading %s section of %s failed: %s"
msgstr "Lyckades inte läsa sektionen %s i %s: %s"
-#: objdump.c:3934
+#: objdump.c:4089
#, c-format
msgid ""
"Contents of %s section:\n"
@@ -6444,17 +6593,17 @@ msgstr ""
"Innehåll i %s-sektionen:\n"
"\n"
-#: objdump.c:4068
+#: objdump.c:4223
#, c-format
msgid "architecture: %s, "
msgstr "arkitektur: %s, "
-#: objdump.c:4071
+#: objdump.c:4226
#, c-format
msgid "flags 0x%08x:\n"
msgstr "flaggor 0x%08x:\n"
-#: objdump.c:4084
+#: objdump.c:4239
#, c-format
msgid ""
"\n"
@@ -6463,25 +6612,25 @@ msgstr ""
"\n"
"startadress 0x"
-#: objdump.c:4134 readelf.c:15094
+#: objdump.c:4289 readelf.c:15478
#, c-format
msgid "%s: %s"
msgstr "%s: %s"
-#: objdump.c:4134 readelf.c:15094
+#: objdump.c:4289 readelf.c:15478
msgid "warning"
msgstr "varning"
-#: objdump.c:4134 readelf.c:15094
+#: objdump.c:4289 readelf.c:15478
msgid "error"
msgstr "fel"
-#: objdump.c:4140 readelf.c:15099
+#: objdump.c:4295 readelf.c:15483
#, c-format
msgid "CTF error: cannot get CTF errors: `%s'"
msgstr "CTF-fel: kan inte hämta CTF-felen: â€%sâ€"
-#: objdump.c:4167 readelf.c:15125
+#: objdump.c:4319 readelf.c:15505
#, c-format
msgid ""
"\n"
@@ -6490,71 +6639,71 @@ msgstr ""
"\n"
"CTF-arkivmedlem: %s:\n"
-#: objdump.c:4186
+#: objdump.c:4339
#, c-format
msgid "Iteration failed: %s, %s"
msgstr "Iterationen misslyckades: %s, %s"
-#: objdump.c:4223 objdump.c:4233 objdump.c:4248
+#: objdump.c:4377 objdump.c:4384
#, c-format
msgid "CTF open failure: %s"
msgstr "CTF-öppningsfel: %s"
-#: objdump.c:4252
+#: objdump.c:4388
#, c-format
msgid "Contents of CTF section %s:\n"
msgstr "Innehållet i CTF-sektionen %s:\n"
-#: objdump.c:4257
+#: objdump.c:4395
#, c-format
msgid "CTF archive member open failure: %s"
msgstr "Att öppna CTF-arkivmedlem misslyckades: %s"
-#: objdump.c:4277
+#: objdump.c:4413
#, c-format
msgid "warning: private headers incomplete: %s"
msgstr "varning: privata huvuden är ofullständiga: %s"
-#: objdump.c:4295
+#: objdump.c:4431
msgid "option -P/--private not supported by this file"
msgstr "flaggan -P/--private stödjs inte av denna fil"
-#: objdump.c:4319
+#: objdump.c:4455
#, c-format
msgid "target specific dump '%s' not supported"
msgstr "mÃ¥lspecifik dump â€%s†stödjs inte"
-#: objdump.c:4383
+#: objdump.c:4519
#, c-format
msgid "Contents of section %s:"
msgstr "Innehåll i sektionen %s:"
-#: objdump.c:4385
+#: objdump.c:4521
#, c-format
msgid " (Starting at file offset: 0x%lx)"
msgstr " (Startar vid filavstånd: 0x%lx)"
-#: objdump.c:4495
+#: objdump.c:4631
#, c-format
msgid "no symbols\n"
msgstr "inga symboler\n"
-#: objdump.c:4502
+#: objdump.c:4638
#, c-format
msgid "no information for symbol number %ld\n"
msgstr "ingen information för symbol nummer %ld\n"
-#: objdump.c:4505
+#: objdump.c:4641
#, c-format
msgid "could not determine the type of symbol number %ld\n"
msgstr "kunde inte bestämma typen på symbol nummer %ld\n"
-#: objdump.c:4751
+#: objdump.c:4905
#, c-format
msgid "failed to read relocs in: %s"
msgstr "misslyckades att läsa omlokaliseringar i: %s"
-#: objdump.c:4911
+#: objdump.c:5064
#, c-format
msgid ""
"\n"
@@ -6563,52 +6712,52 @@ msgstr ""
"\n"
"%s: filformat %s\n"
-#: objdump.c:5011
+#: objdump.c:5172
#, c-format
msgid "%s: printing debugging information failed"
msgstr "%s: lyckades inte visa felsökningsinformationen"
-#: objdump.c:5107
+#: objdump.c:5268
#, c-format
msgid "In archive %s:\n"
msgstr "I arkiv %s:\n"
#. Prevent corrupted files from spinning us into an
#. infinite loop. 100 is an arbitrary heuristic.
-#: objdump.c:5112
+#: objdump.c:5273
msgid "Archive nesting is too deep"
msgstr "Arkivnästningen är för djup"
-#: objdump.c:5116
+#: objdump.c:5277
#, c-format
msgid "In nested archive %s:\n"
msgstr "I nästat arkiv %s:\n"
-#: objdump.c:5279
+#: objdump.c:5440
msgid "error: the start address should be before the end address"
msgstr "fel: startadressen borde vara före slutadressen"
-#: objdump.c:5284
+#: objdump.c:5445
msgid "error: the stop address should be after the start address"
msgstr "fel: slutadressen bör vara efter startadressen"
-#: objdump.c:5296
+#: objdump.c:5457
msgid "error: prefix strip must be non-negative"
msgstr "fel: prefixantal att ta bort får inte vara negativt"
-#: objdump.c:5301
+#: objdump.c:5462
msgid "error: instruction width must be positive"
msgstr "fel: instruktionen måste vara positiv"
-#: objdump.c:5322
+#: objdump.c:5483
msgid "unrecognized argument to --visualize-option"
msgstr "okänt argument till --visualize-flagga"
-#: objdump.c:5332
+#: objdump.c:5493
msgid "unrecognized -E option"
msgstr "okänd -E-flagga"
-#: objdump.c:5343
+#: objdump.c:5504
#, c-format
msgid "unrecognized --endian type `%s'"
msgstr "okänd --endian-typ â€%sâ€"
@@ -6944,7 +7093,7 @@ msgstr " ant sektioner:%d\n"
msgid " time and date: 0x%08x - "
msgstr " tid och datum: 0x%08x - "
-#: od-xcoff.c:421 readelf.c:19706
+#: od-xcoff.c:421 readelf.c:20126
#, c-format
msgid "not set\n"
msgstr "ej satt\n"
@@ -7411,363 +7560,374 @@ msgstr "%s: %s: stab-post %ld är trasig\n"
msgid "Last stabs entries before error:\n"
msgstr "De sista stabs-posterna före felet:\n"
-#: readelf.c:354
+#: readelf.c:385
msgid "<none>"
msgstr "<ingen>"
-#: readelf.c:355
+#: readelf.c:387
msgid "<no-strings>"
msgstr "<inga strängar>"
-#: readelf.c:437
+#: readelf.c:482
#, c-format
msgid "Size truncation prevents reading %s elements of size %s for %s\n"
msgstr "Avhuggen storlek förhindrar läsning av %s element av storlek %s för %s\n"
-#: readelf.c:447
+#: readelf.c:492
#, c-format
msgid "Size overflow prevents reading %s elements of size %s for %s\n"
msgstr "Storleksöverspill förhindrar läsning av %s element av storlek %s för %s\n"
-#: readelf.c:460
+#: readelf.c:505
#, c-format
msgid "Reading %s bytes extends past end of file for %s\n"
msgstr "Läsning av %s byte sträcker sig utanför slutet av filen för %s\n"
-#: readelf.c:469
+#: readelf.c:514
#, c-format
msgid "Unable to seek to 0x%lx for %s\n"
msgstr "Kan inte söka till 0x%lx för %s\n"
-#: readelf.c:483
+#: readelf.c:528
#, c-format
msgid "Out of memory allocating %s bytes for %s\n"
msgstr "Slut på minne vid allokering av %s byte för %s\n"
-#: readelf.c:494
+#: readelf.c:539
#, c-format
msgid "Unable to read in %s bytes of %s\n"
msgstr "Kan inte läsa in %s byte av %s\n"
-#: readelf.c:971
+#: readelf.c:1151
msgid "Don't know about relocations on this machine architecture\n"
msgstr "Vet inget om omlokaliseringar på denna maskinarkitektur\n"
-#: readelf.c:998 readelf.c:1103
+#: readelf.c:1178 readelf.c:1283
msgid "32-bit relocation data"
msgstr "32-bitars omlokaliseringsdata"
-#: readelf.c:1010 readelf.c:1040 readelf.c:1114 readelf.c:1143
+#: readelf.c:1190 readelf.c:1220 readelf.c:1294 readelf.c:1323 readelf.c:1402
msgid "out of memory parsing relocs\n"
msgstr "slut på minne vid tolkning av omlokaliseringar\n"
-#: readelf.c:1028 readelf.c:1132
+#: readelf.c:1208 readelf.c:1312
msgid "64-bit relocation data"
msgstr "64-bitars omlokaliseringsdata"
-#: readelf.c:1262
+#: readelf.c:1376
+msgid "RELR relocation data"
+msgstr "RELR-omlokaliseringsdata"
+
+#: readelf.c:1516
+#, c-format
+msgid " %lu offset\n"
+msgid_plural " %lu offsets\n"
+msgstr[0] " %lu avstånd\n"
+msgstr[1] " %lu avstånd\n"
+
+#: readelf.c:1528
#, c-format
msgid " Offset Info Type Sym. Value Symbol's Name + Addend\n"
msgstr " Offset Info Typ Symbolvärde Symbolnamn + Tillägg\n"
-#: readelf.c:1264
+#: readelf.c:1530
#, c-format
msgid " Offset Info Type Sym.Value Sym. Name + Addend\n"
msgstr " Offset Info Typ Sym.värde Symbolnamn + Tillägg\n"
-#: readelf.c:1269
+#: readelf.c:1535
#, c-format
msgid " Offset Info Type Sym. Value Symbol's Name\n"
msgstr " Offset Info Typ Sym.värde Symbolnamn\n"
-#: readelf.c:1271
+#: readelf.c:1537
#, c-format
msgid " Offset Info Type Sym.Value Sym. Name\n"
msgstr " Offset Info Typ Sym.värde Symbolnamn\n"
-#: readelf.c:1279
+#: readelf.c:1545
#, c-format
msgid " Offset Info Type Symbol's Value Symbol's Name + Addend\n"
msgstr " Offset Info Typ Symbolvärde Symbolnamn + Tillägg\n"
-#: readelf.c:1281
+#: readelf.c:1547
#, c-format
msgid " Offset Info Type Sym. Value Sym. Name + Addend\n"
msgstr " Offset Info Typ Symbolvärde Symbolnamn + Tillägg\n"
-#: readelf.c:1286
+#: readelf.c:1552
#, c-format
msgid " Offset Info Type Symbol's Value Symbol's Name\n"
msgstr " Offset Info Typ Symbolvärde Symbolnamn\n"
-#: readelf.c:1288
+#: readelf.c:1554
#, c-format
msgid " Offset Info Type Sym. Value Sym. Name\n"
msgstr " Offset Info Typ Symbolvärde Symbolnamn\n"
-#: readelf.c:1659 readelf.c:1852 readelf.c:1860
+#: readelf.c:1930 readelf.c:2125 readelf.c:2133
#, c-format
msgid "unrecognized: %-7lx"
msgstr "okänd: %-7lx"
-#: readelf.c:1685
+#: readelf.c:1956
#, c-format
msgid "<unknown addend: %lx>"
msgstr "<okänd addend: %lx>"
-#: readelf.c:1694
+#: readelf.c:1965
#, c-format
msgid " bad symbol index: %08lx in reloc\n"
msgstr " felaktigt symbolindex: %08lx i omlokaliseringar\n"
-#: readelf.c:1797
+#: readelf.c:2070
#, c-format
msgid "<string table index: %3ld>"
msgstr "<strängtabellsindex: %3ld>"
-#: readelf.c:1800
+#: readelf.c:2073
#, c-format
msgid "<corrupt string table index: %3ld>\n"
msgstr "<trasigt strängtabellsindex: %3ld>\n"
-#: readelf.c:2305
+#: readelf.c:2595
#, c-format
msgid "Processor Specific: %lx"
msgstr "processorspecifik: %lx"
-#: readelf.c:2332
+#: readelf.c:2622
#, c-format
msgid "Operating System specific: %lx"
msgstr "operativsystemsspecifik: %lx"
-#: readelf.c:2336 readelf.c:4246
+#: readelf.c:2626 readelf.c:4563
#, c-format
msgid "<unknown>: %lx"
msgstr "<okänd>: %lx"
-#: readelf.c:2436
+#: readelf.c:2726
msgid "NONE (None)"
msgstr "NONE (ingen)"
-#: readelf.c:2437
+#: readelf.c:2727
msgid "REL (Relocatable file)"
msgstr "REL (omlokaliserbar fil)"
-#: readelf.c:2438
+#: readelf.c:2728
msgid "EXEC (Executable file)"
msgstr "EXEC (exekverbar fil)"
-#: readelf.c:2441
+#: readelf.c:2731
msgid "DYN (Position-Independent Executable file)"
msgstr "DYN (positionsoberoende körbar fil)"
-#: readelf.c:2443
+#: readelf.c:2733
msgid "DYN (Shared object file)"
msgstr "DYN (delad objektfil)"
-#: readelf.c:2444
+#: readelf.c:2734
msgid "CORE (Core file)"
msgstr "CORE (minnesfil)"
-#: readelf.c:2448
+#: readelf.c:2738
#, c-format
msgid "Processor Specific: (%x)"
msgstr "processorspecifik: (%x)"
-#: readelf.c:2450
+#: readelf.c:2740
#, c-format
msgid "OS Specific: (%x)"
msgstr "OS-specifik: (%x)"
-#: readelf.c:2452
+#: readelf.c:2742
#, c-format
msgid "<unknown>: %x"
msgstr "<okänd>: %x"
#. Please keep this switch table sorted by increasing EM_ value.
#. 0
-#: readelf.c:2466 readelf.c:17634 readelf.c:17645
+#: readelf.c:2756 readelf.c:18010 readelf.c:18021
msgid "None"
msgstr "ingen"
-#: readelf.c:2714
+#: readelf.c:3004
#, c-format
msgid "<unknown>: 0x%x"
msgstr "<okänd>: 0x%x"
-#: readelf.c:3000
+#: readelf.c:3290
msgid ", <unknown>"
msgstr ", <okänd>"
-#: readelf.c:3369 readelf.c:10401
+#: readelf.c:3659 readelf.c:10755
msgid "unknown"
msgstr "okänd"
-#: readelf.c:3370
+#: readelf.c:3660
msgid "unknown mac"
msgstr "okänd mac"
-#: readelf.c:3438
+#: readelf.c:3728
msgid ", <unknown MeP cpu type>"
msgstr ", <okänd MeP-cpu-typ>"
-#: readelf.c:3448
+#: readelf.c:3738
msgid "<unknown MeP copro type>"
msgstr "<okänd MeP-copro-typ>"
-#: readelf.c:3459
+#: readelf.c:3749
#, c-format
msgid ", unknown flags bits: %#x"
msgstr ", okända flaggbitar: %#x"
-#: readelf.c:3468
+#: readelf.c:3758
msgid ", relocatable"
msgstr ", omlokaliserbart"
-#: readelf.c:3471
+#: readelf.c:3761
msgid ", relocatable-lib"
msgstr ", omlokaliserbart bibliotek"
-#: readelf.c:3553
+#: readelf.c:3843
msgid ", unknown v850 architecture variant"
msgstr ", okänd variant av v850-arkitekturen"
-#: readelf.c:3621
+#: readelf.c:3911
msgid ", unknown CPU"
msgstr ", okänd CPU"
-#: readelf.c:3636
+#: readelf.c:3926
msgid ", unknown ABI"
msgstr ", okänt ABI"
-#: readelf.c:3661 readelf.c:3732
+#: readelf.c:3951 readelf.c:4022
msgid ", unknown ISA"
msgstr ", okänd ISA"
-#: readelf.c:3842
+#: readelf.c:4132
#, c-format
msgid "Unrecognised IA64 VMS Command Code: %x\n"
msgstr "Okänd IA64 VMS-kommandokod: %x\n"
-#: readelf.c:3908
+#: readelf.c:4198
msgid ": architecture variant: "
msgstr ": arkitekturvariant: "
-#: readelf.c:3927
+#: readelf.c:4217
msgid ": unknown"
msgstr ": okänd"
-#: readelf.c:3931
+#: readelf.c:4221
msgid ": unknown extra flag bits also present"
msgstr ": okända extra flaggbitar finns också"
-#: readelf.c:3945
+#: readelf.c:4235
msgid ", unknown"
msgstr ", okänd"
-#: readelf.c:3997
+#: readelf.c:4301
msgid "Standalone App"
msgstr "Självständigt program"
-#: readelf.c:4006
+#: readelf.c:4310
msgid "Bare-metal C6000"
msgstr "Ren C6000"
-#: readelf.c:4016 readelf.c:5193 readelf.c:5209 readelf.c:19058
-#: readelf.c:19158 readelf.c:19189 readelf.c:19226 readelf.c:19287
-#: readelf.c:19314
+#: readelf.c:4320 readelf.c:5535 readelf.c:5551 readelf.c:19439
+#: readelf.c:19539 readelf.c:19570 readelf.c:19607 readelf.c:19668
+#: readelf.c:19695 readelf.c:19717
#, c-format
msgid "<unknown: %x>"
msgstr "<okänd: %x>"
#. This message is probably going to be displayed in a 15
#. character wide field, so put the hex value first.
-#: readelf.c:4615
+#: readelf.c:4933
#, c-format
msgid "%08x: <unknown>"
msgstr "%08x: <okänd>"
-#: readelf.c:4702
+#: readelf.c:5021
#, c-format
msgid "Usage: readelf <option(s)> elf-file(s)\n"
msgstr "Användning: readelf <flaggor> elf-fil(er)\n"
-#: readelf.c:4703
+#: readelf.c:5022
#, c-format
msgid " Display information about the contents of ELF format files\n"
msgstr " Visa information om innehållet i filer i ELF-format\n"
-#: readelf.c:4704
+#: readelf.c:5023
#, c-format
msgid " Options are:\n"
msgstr " Flaggorna är:\n"
-#: readelf.c:4705
+#: readelf.c:5024
#, c-format
msgid " -a --all Equivalent to: -h -l -S -s -r -d -V -A -I\n"
msgstr " -a --all Samma som: -h -l -S -s -r -d -V -A -I\n"
-#: readelf.c:4707
+#: readelf.c:5026
#, c-format
msgid " -h --file-header Display the ELF file header\n"
msgstr " -h --file-header Visa ELF-filens huvud\n"
-#: readelf.c:4709
+#: readelf.c:5028
#, c-format
msgid " -l --program-headers Display the program headers\n"
msgstr " -l --program-headers Visa programhuvudena\n"
-#: readelf.c:4711
+#: readelf.c:5030
#, c-format
msgid " --segments An alias for --program-headers\n"
msgstr " --segments Synonym för --program-headers\n"
-#: readelf.c:4713
+#: readelf.c:5032
#, c-format
msgid " -S --section-headers Display the sections' header\n"
msgstr " -S --section-headers Visa sektionernas huvuden\n"
-#: readelf.c:4715
+#: readelf.c:5034
#, c-format
msgid " --sections An alias for --section-headers\n"
msgstr " --sections Synonym för --section-headers\n"
-#: readelf.c:4717
+#: readelf.c:5036
#, c-format
msgid " -g --section-groups Display the section groups\n"
msgstr " -g --section-groups Visa sektionsgrupperna\n"
-#: readelf.c:4719
+#: readelf.c:5038
#, c-format
msgid " -t --section-details Display the section details\n"
msgstr " -t --section-details Visa detaljer om sektionerna\n"
-#: readelf.c:4721
+#: readelf.c:5040
#, c-format
msgid " -e --headers Equivalent to: -h -l -S\n"
msgstr " -e --headers Samma som: -h -l -S\n"
-#: readelf.c:4723
+#: readelf.c:5042
#, c-format
msgid " -s --syms Display the symbol table\n"
msgstr " -s --syms Visa symboltabellen\n"
-#: readelf.c:4725
+#: readelf.c:5044
#, c-format
msgid " --symbols An alias for --syms\n"
msgstr " --symbols Synonym för --syms\n"
-#: readelf.c:4727
+#: readelf.c:5046
#, c-format
msgid " --dyn-syms Display the dynamic symbol table\n"
msgstr " --dyn-syms Visa tabellen över dynamiska symboler\n"
-#: readelf.c:4729
+#: readelf.c:5048
#, c-format
msgid " --lto-syms Display LTO symbol tables\n"
msgstr " --lto-syms Visa tabellen över LTO-symboler\n"
-#: readelf.c:4731
+#: readelf.c:5050
#, c-format
msgid ""
" --sym-base=[0|8|10|16] \n"
@@ -7778,77 +7938,84 @@ msgstr ""
" Bestäm bas för symbolstorlekar. Alternativen är\n"
" blandat (standard), oktalt, decimalt, hexadecimalt.\n"
-#: readelf.c:4735
+#: readelf.c:5054
#, c-format
-msgid ""
-" -C --demangle[=STYLE] Decode low-level symbol names into user-level names\n"
-" The STYLE, if specified, can be `auto' (the default),\n"
-" `gnu', `lucid', `arm', `hp', `edg', `gnu-v3', `java'\n"
-" or `gnat'\n"
-msgstr ""
-" -C --demangle[=STIL] Avkoda lågnivåsymbolnamn till användarnivånamn\n"
-" STIL, om den anges, kan vara â€auto†(standard)\n"
-" â€gnuâ€, â€lucidâ€, â€armâ€, â€hpâ€, â€edgâ€, â€gnu-v3â€, â€javaâ€,\n"
-" eller â€gnatâ€\n"
+msgid " -C --demangle[=STYLE] Decode mangled/processed symbol names\n"
+msgstr " -C, --demangle[=STIL] Avkoda manglade/processade symbolnamn\n"
-#: readelf.c:4740
+#: readelf.c:5058
#, c-format
msgid " --no-demangle Do not demangle low-level symbol names. (default)\n"
msgstr " --no-demangle Avmangla inte lågnivåsymbolnamn. (standard)\n"
-#: readelf.c:4742
+#: readelf.c:5060
#, c-format
msgid " --recurse-limit Enable a demangling recursion limit. (default)\n"
msgstr ""
" --recurse-limit Aktivera en rekursionsgräns vid avmangling.\n"
" (standard)\n"
-#: readelf.c:4744
+#: readelf.c:5062
#, c-format
msgid " --no-recurse-limit Disable a demangling recursion limit\n"
msgstr " --no-recurse-limit Avaktivera en rekursionsgräns för avmangling.\n"
-#: readelf.c:4746
+#: readelf.c:5064
+#, c-format
+msgid ""
+" -U[dlexhi] --unicode=[default|locale|escape|hex|highlight|invalid]\n"
+" Display unicode characters as determined by the current locale\n"
+" (default), escape sequences, \"<hex sequences>\", highlighted\n"
+" escape sequences, or treat them as invalid and display as\n"
+" \"{hex sequences}\"\n"
+msgstr ""
+" -U[dlexhi] --unicode=[default|locale|escape|hex|highlight|invalid]\n"
+" Visa unicode-tecken som den aktuella lokalen säger\n"
+" (default), flyktföljder, â€<hex-sekvenser>â€,\n"
+" markerade flyktföljder, eller betrakta deom som\n"
+" ogiltiga och visa som â€{hex-sekvenser}â€\n"
+
+#: readelf.c:5070
#, c-format
msgid " -n --notes Display the core notes (if present)\n"
msgstr " -n --notes Visa kärnnoteringarna (om några finns)\n"
-#: readelf.c:4748
+#: readelf.c:5072
#, c-format
msgid " -r --relocs Display the relocations (if present)\n"
msgstr " -r --relocs Visa omlokeringarna (om de finns)\n"
-#: readelf.c:4750
+#: readelf.c:5074
#, c-format
msgid " -u --unwind Display the unwind info (if present)\n"
msgstr " -u --unwind Visa tillbakarullningsinformationen (om den finns)\n"
-#: readelf.c:4752
+#: readelf.c:5076
#, c-format
msgid " -d --dynamic Display the dynamic section (if present)\n"
msgstr " -d --dynamic Visa den dynamiska sektionen (om den finns)\n"
-#: readelf.c:4754
+#: readelf.c:5078
#, c-format
msgid " -V --version-info Display the version sections (if present)\n"
msgstr " -V --version-info Visa versionssektionerna (om några finns)\n"
-#: readelf.c:4756
+#: readelf.c:5080
#, c-format
msgid " -A --arch-specific Display architecture specific information (if any)\n"
msgstr " -A --arch-specific Visa arkitekturspecifik information (om någon finns)\n"
-#: readelf.c:4758
+#: readelf.c:5082
#, c-format
msgid " -c --archive-index Display the symbol/file index in an archive\n"
msgstr " -c --archive-index Visa symbol-/filindex i ett arkiv\n"
-#: readelf.c:4760
+#: readelf.c:5084
#, c-format
msgid " -D --use-dynamic Use the dynamic section info when displaying symbols\n"
msgstr " -D --use-dynamic Använd den dynamiska sektionen för att visa symboler\n"
-#: readelf.c:4762
+#: readelf.c:5086
#, c-format
msgid ""
" -L --lint|--enable-checks\n"
@@ -7857,7 +8024,7 @@ msgstr ""
" -L --lint|--enable-checks\n"
" Visa varningsmeddelanden för möjliga problem\n"
-#: readelf.c:4765
+#: readelf.c:5089
#, c-format
msgid ""
" -x --hex-dump=<number|name>\n"
@@ -7866,7 +8033,7 @@ msgstr ""
" -x --hex-dump=<nummer|namn>\n"
" Visa innehållet i sektion <nummer|namn> som byte\n"
-#: readelf.c:4768
+#: readelf.c:5092
#, c-format
msgid ""
" -p --string-dump=<number|name>\n"
@@ -7875,7 +8042,7 @@ msgstr ""
" -p --string-dump=<nummer|namn>\n"
" Visa innehållet i sektion <nummer|namn> som strängar\n"
-#: readelf.c:4771
+#: readelf.c:5095
#, c-format
msgid ""
" -R --relocated-dump=<number|name>\n"
@@ -7884,12 +8051,12 @@ msgstr ""
" -R --relocated-dump=<nummer|namn>\n"
" Visa det relokerade innehållet i sektion <nummer|namn>\n"
-#: readelf.c:4774
+#: readelf.c:5098
#, c-format
msgid " -z --decompress Decompress section before dumping it\n"
msgstr " -z --decompress Dekomprimera sektionen före den visas\n"
-#: readelf.c:4776
+#: readelf.c:5100
#, c-format
msgid ""
" -w --debug-dump[a/=abbrev, A/=addr, r/=aranges, c/=cu_index, L/=decodedline,\n"
@@ -7906,7 +8073,7 @@ msgstr ""
" U/=trace_info]\n"
" Visa innehållet i DWARF-felsökningssektioner\n"
-#: readelf.c:4783
+#: readelf.c:5107
#, c-format
msgid ""
" -wk --debug-dump=links Display the contents of sections that link to separate\n"
@@ -7915,7 +8082,7 @@ msgstr ""
" -wk --debug-dump=links Visa innehållet i sektioner som länkar till separata\n"
" filer med felsökningsinformation\n"
-#: readelf.c:4786
+#: readelf.c:5110
#, c-format
msgid ""
" -P --process-links Display the contents of non-debug sections in separate\n"
@@ -7925,7 +8092,7 @@ msgstr ""
" i separata filer med felsökningsinformation.\n"
" (Implicerar -wK)\n"
-#: readelf.c:4790
+#: readelf.c:5114
#, c-format
msgid ""
" -wK --debug-dump=follow-links\n"
@@ -7935,7 +8102,7 @@ msgstr ""
" Följ länkar till separata filer med\n"
" felsökningsinformation (standard)\n"
-#: readelf.c:4793
+#: readelf.c:5117
#, c-format
msgid ""
" -wN --debug-dump=no-follow-links\n"
@@ -7945,7 +8112,7 @@ msgstr ""
" Följ inte länkar till separata filer med\n"
" felsökningsinformation\n"
-#: readelf.c:4797
+#: readelf.c:5121
#, c-format
msgid ""
" -wK --debug-dump=follow-links\n"
@@ -7955,7 +8122,7 @@ msgstr ""
" Följ länkar till separata filer med\n"
" felsökningsinformation\n"
-#: readelf.c:4800
+#: readelf.c:5124
#, c-format
msgid ""
" -wN --debug-dump=no-follow-links\n"
@@ -7966,31 +8133,27 @@ msgstr ""
" Följ inte länkar till separata filer med\n"
" felsökningsinformation (standard)\n"
-#: readelf.c:4805
+#: readelf.c:5129
#, c-format
msgid " --dwarf-depth=N Do not display DIEs at depth N or greater\n"
msgstr " --dwarf-depth=N Visa inte DIE:r på djup N eller större\n"
-#: readelf.c:4807
+#: readelf.c:5131
#, c-format
msgid " --dwarf-start=N Display DIEs starting at offset N\n"
msgstr " --dwarf-start=N Visa DIE:r med start på avstånd N\n"
-#: readelf.c:4810
+#: readelf.c:5134
#, c-format
msgid " --ctf=<number|name> Display CTF info from section <number|name>\n"
msgstr " --ctf=<nummer|namn> Visa CTF-info från sektionen <nummer|namn>\n"
-#: readelf.c:4812
+#: readelf.c:5136
#, c-format
-msgid ""
-" --ctf-parent=<number|name>\n"
-" Use section <number|name> as the CTF parent\n"
-msgstr ""
-" --ctf-parent=<nummer|namn>\n"
-" Använd sektion <nummer|namn> som CTF-föräldern\n"
+msgid " --ctf-parent=<name> Use CTF archive member <name> as the CTF parent\n"
+msgstr " --ctf-parent=<namn> Använd arkivmedlem <namn> som CTF-föräldern\n"
-#: readelf.c:4815
+#: readelf.c:5138
#, c-format
msgid ""
" --ctf-symbols=<number|name>\n"
@@ -8000,7 +8163,7 @@ msgstr ""
" Använd sektion <nummer|namn> som den externa\n"
" CTF-symboltabellen\n"
-#: readelf.c:4818
+#: readelf.c:5141
#, c-format
msgid ""
" --ctf-strings=<number|name>\n"
@@ -8010,7 +8173,7 @@ msgstr ""
" Använd sektion <nummer|namn> som den externa\n"
" CTF-strängtabellen\n"
-#: readelf.c:4824
+#: readelf.c:5147
#, c-format
msgid ""
" -i --instruction-dump=<number|name>\n"
@@ -8019,140 +8182,144 @@ msgstr ""
" -i --instruction-dump=<nummer|namn>\n"
" Disassemblera innehållet i sektion <nummer|namn>\n"
-#: readelf.c:4828
+#: readelf.c:5151
#, c-format
msgid " -I --histogram Display histogram of bucket list lengths\n"
msgstr " -I --histogram Visa ett histogram över hinkarnas listlängder\n"
-#: readelf.c:4830
+#: readelf.c:5153
#, c-format
msgid " -W --wide Allow output width to exceed 80 characters\n"
msgstr " -W --wide Tillåt utskrift bredare än 80 tecken\n"
-#: readelf.c:4832
+#: readelf.c:5155
#, c-format
msgid " -T --silent-truncation If a symbol name is truncated, do not add [...] suffix\n"
msgstr " -T --silent-truncation Om ett symbolnamn huggs av, lägg inte till [...]\n"
-#: readelf.c:4834
+#: readelf.c:5157
#, c-format
msgid " @<file> Read options from <file>\n"
msgstr " @<fil> Läs flaggor från <fil>\n"
-#: readelf.c:4836
+#: readelf.c:5159
#, c-format
msgid " -H --help Display this information\n"
msgstr " -H --help Visa den här informationen.\n"
-#: readelf.c:4838
+#: readelf.c:5161
#, c-format
msgid " -v --version Display the version number of readelf\n"
msgstr " -v --version Visa versionsinformation för readelf\n"
-#: readelf.c:4864 readelf.c:4895 readelf.c:4899
+#: readelf.c:5187 readelf.c:5218 readelf.c:5222
msgid "Out of memory allocating dump request table.\n"
msgstr "Slut på minne vid allokering av tabell för önskade utskrifter.\n"
-#: readelf.c:5155
+#: readelf.c:5458
+msgid "Missing arg to -U/--unicode"
+msgstr "Argument saknas till -U/--unicode"
+
+#: readelf.c:5497
#, c-format
msgid "Invalid option '-%c'\n"
msgstr "Ogiltig flagga â€-%câ€\n"
-#: readelf.c:5189 readelf.c:5205 readelf.c:11478
+#: readelf.c:5531 readelf.c:5547 readelf.c:11828
msgid "none"
msgstr "ingen"
-#: readelf.c:5206
+#: readelf.c:5548
msgid "2's complement, little endian"
msgstr "2-komplement, little endian"
-#: readelf.c:5207
+#: readelf.c:5549
msgid "2's complement, big endian"
msgstr "2-komplement, big endian"
-#: readelf.c:5227
+#: readelf.c:5569
msgid "Not an ELF file - it has the wrong magic bytes at the start\n"
msgstr "Inte en ELF-fil - den har fel magiska byte i början\n"
-#: readelf.c:5239
+#: readelf.c:5581
#, c-format
msgid "ELF Header in linked file '%s':\n"
msgstr "ELF-huvud i länkade filer â€%sâ€:\n"
-#: readelf.c:5241
+#: readelf.c:5583
#, c-format
msgid "ELF Header:\n"
msgstr "ELF-huvud:\n"
-#: readelf.c:5242
+#: readelf.c:5584
#, c-format
msgid " Magic: "
msgstr " Magi: "
# 37 tecken i "vänstra" kolumnen
-#: readelf.c:5246
+#: readelf.c:5588
#, c-format
msgid " Class: %s\n"
msgstr " Klass: %s\n"
# 37 tecken i "vänstra" kolumnen
-#: readelf.c:5248
+#: readelf.c:5590
#, c-format
msgid " Data: %s\n"
msgstr " Data: %s\n"
# 37 tecken i "vänstra" kolumnen
-#: readelf.c:5250
+#: readelf.c:5592
#, c-format
msgid " Version: %d%s\n"
msgstr " Version: %d%s\n"
-#: readelf.c:5253
+#: readelf.c:5595
msgid " (current)"
msgstr " (aktuell)"
-#: readelf.c:5255
+#: readelf.c:5597
msgid " <unknown>"
msgstr " <okänd>"
# 37 tecken i "vänstra" kolumnen
-#: readelf.c:5257
+#: readelf.c:5599
#, c-format
msgid " OS/ABI: %s\n"
msgstr " OS/ABI: %s\n"
# 37 tecken i "vänstra" kolumnen
-#: readelf.c:5259
+#: readelf.c:5601
#, c-format
msgid " ABI Version: %d\n"
msgstr " ABI-version: %d\n"
# 37 tecken i "vänstra" kolumnen
-#: readelf.c:5261
+#: readelf.c:5603
#, c-format
msgid " Type: %s\n"
msgstr " Typ: %s\n"
# 37 tecken i "vänstra" kolumnen
-#: readelf.c:5263
+#: readelf.c:5605
#, c-format
msgid " Machine: %s\n"
msgstr " Maskin: %s\n"
# 37 tecken i "vänstra" kolumnen
-#: readelf.c:5265
+#: readelf.c:5607
#, c-format
msgid " Version: 0x%lx\n"
msgstr " Version: 0x%lx\n"
# 37 tecken i "vänstra" kolumnen
-#: readelf.c:5268
+#: readelf.c:5610
#, c-format
msgid " Entry point address: "
msgstr " Ingångsadress: "
# 37 tecken i "vänstra" kolumnen
-#: readelf.c:5270
+#: readelf.c:5612
#, c-format
msgid ""
"\n"
@@ -8162,7 +8329,7 @@ msgstr ""
" Start för programhuvuden: "
# 37 tecken i "vänstra" kolumnen
-#: readelf.c:5272
+#: readelf.c:5614
#, c-format
msgid ""
" (bytes into file)\n"
@@ -8171,85 +8338,85 @@ msgstr ""
" (byte in i filen)\n"
" Start för sektionshuvuden: "
-#: readelf.c:5274
+#: readelf.c:5616
#, c-format
msgid " (bytes into file)\n"
msgstr " (byte in i filen)\n"
# 37 tecken i "vänstra" kolumnen
-#: readelf.c:5276
+#: readelf.c:5618
#, c-format
msgid " Flags: 0x%lx%s\n"
msgstr " Flaggor: 0x%lx%s\n"
# 37 tecken i "vänstra" kolumnen
-#: readelf.c:5279
+#: readelf.c:5621
#, c-format
msgid " Size of this header: %u (bytes)\n"
msgstr " Detta huvuds storlek: %u (byte)\n"
# 37 tecken i "vänstra" kolumnen
-#: readelf.c:5281
+#: readelf.c:5623
#, c-format
msgid " Size of program headers: %u (bytes)\n"
msgstr " Programhuvudenas storlek: %u (byte)\n"
# 37 tecken i "vänstra" kolumnen
-#: readelf.c:5283
+#: readelf.c:5625
#, c-format
msgid " Number of program headers: %u"
msgstr " Antal programhuvuden: %u"
# 37 tecken i "vänstra" kolumnen
-#: readelf.c:5293
+#: readelf.c:5635
#, c-format
msgid " Size of section headers: %u (bytes)\n"
msgstr " Sektionshuvudenas storlek: %u (byte)\n"
# 37 tecken i "vänstra" kolumnen
-#: readelf.c:5295
+#: readelf.c:5637
#, c-format
msgid " Number of section headers: %u"
msgstr " Antal sektionshuvuden: %u"
# 37 tecken i "vänstra" kolumnen
-#: readelf.c:5303
+#: readelf.c:5645
#, c-format
msgid " Section header string table index: %u"
msgstr " Sektionshuvudets strängtabellndx: %u"
-#: readelf.c:5315
+#: readelf.c:5657
#, c-format
msgid " <corrupt: out of range>"
msgstr " <trasig: utanför intervallet>"
-#: readelf.c:5354 readelf.c:5401
+#: readelf.c:5696 readelf.c:5743
msgid "The e_phentsize field in the ELF header is less than the size of an ELF program header\n"
msgstr "e_phentsize-fältet i ELF-huvudet är mindre än storleken på ett ELF-programhuvud\n"
-#: readelf.c:5358 readelf.c:5405
+#: readelf.c:5700 readelf.c:5747
msgid "The e_phentsize field in the ELF header is larger than the size of an ELF program header\n"
msgstr "Fältet e_phentsize i ELF-huvudet är större än storleken på ett ELF-programhuvud\n"
-#: readelf.c:5361 readelf.c:5408
+#: readelf.c:5703 readelf.c:5750
msgid "program headers"
msgstr "programhuvuden"
-#: readelf.c:5447
+#: readelf.c:5789
#, c-format
msgid "Too many program headers - %#x - the file is not that big\n"
msgstr "För många programhuvuden — %#x — filen är inte så stor\n"
-#: readelf.c:5456
+#: readelf.c:5798
#, c-format
msgid "Out of memory reading %u program headers\n"
msgstr "Slut på minne när %u programhuvuden lästes\n"
-#: readelf.c:5486
+#: readelf.c:5828
msgid "possibly corrupt ELF header - it has a non-zero program header offset, but no program headers\n"
msgstr "möjligen trasigt ELF-huvud — det har ett avstånd till programhuvuden som inte är noll, men inga programhuvuden\n"
-#: readelf.c:5491
+#: readelf.c:5833
#, c-format
msgid ""
"\n"
@@ -8258,7 +8425,7 @@ msgstr ""
"\n"
"Det finns inga programhuvuden i den länkade filen â€%sâ€.\n"
-#: readelf.c:5494
+#: readelf.c:5836
#, c-format
msgid ""
"\n"
@@ -8267,7 +8434,7 @@ msgstr ""
"\n"
"Det finns inga programhuvuden i denna fil.\n"
-#: readelf.c:5505
+#: readelf.c:5847
#, c-format
msgid ""
"\n"
@@ -8276,12 +8443,12 @@ msgstr ""
"\n"
"Elf-filtyp är %s\n"
-#: readelf.c:5506
+#: readelf.c:5848
#, c-format
msgid "Entry point 0x%s\n"
msgstr "Ingångspunkt 0x%s\n"
-#: readelf.c:5507
+#: readelf.c:5849
#, c-format
msgid "There is %d program header, starting at offset %s\n"
msgid_plural "There are %d program headers, starting at offset %s\n"
@@ -8289,7 +8456,7 @@ msgstr[0] "Det finns %d programhuvud, med början på avståndet %s\n"
msgstr[1] "Det finns %d programhuvuden, med början på avståndet %s\n"
# BUGG: plural-s
-#: readelf.c:5520 readelf.c:5522
+#: readelf.c:5862 readelf.c:5864
#, c-format
msgid ""
"\n"
@@ -8298,68 +8465,68 @@ msgstr ""
"\n"
"Programhuvuden:\n"
-#: readelf.c:5526
+#: readelf.c:5868
#, c-format
msgid " Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align\n"
msgstr " Typ Offset VirtAdr FysAdr FilSt MinneSt Flg Just\n"
-#: readelf.c:5529
+#: readelf.c:5871
#, c-format
msgid " Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align\n"
msgstr " Typ Offset VirtAdr FysAdr FilStrl MinneSt Flg Just\n"
-#: readelf.c:5533
+#: readelf.c:5875
#, c-format
msgid " Type Offset VirtAddr PhysAddr\n"
msgstr " Typ Offset VirtAdr FysAdr\n"
-#: readelf.c:5535
+#: readelf.c:5877
#, c-format
msgid " FileSiz MemSiz Flags Align\n"
msgstr " FilStrl MinneStrl Flagg Just\n"
-#: readelf.c:5633
+#: readelf.c:5975
msgid "LOAD segments must be sorted in order of increasing VirtAddr\n"
msgstr "LOAD-segment måste sorteras i ordning med ökande VirtAddr\n"
-#: readelf.c:5636
+#: readelf.c:5978
msgid "the segment's file size is larger than its memory size\n"
msgstr "segmentets filstorlek är större än dess minnesstorlek\n"
-#: readelf.c:5643
+#: readelf.c:5985
msgid "the PHDR segment must occur before any LOAD segment\n"
msgstr "PHDR-segmentet måste komma före alla LOAD-segment\n"
-#: readelf.c:5661
+#: readelf.c:6003
msgid "the PHDR segment is not covered by a LOAD segment\n"
msgstr "PHDR-segmentet täcks inte av något LOAD-segment\n"
-#: readelf.c:5667
+#: readelf.c:6009
msgid "more than one dynamic segment\n"
msgstr "mer än ett dynamiskt segment\n"
-#: readelf.c:5686
+#: readelf.c:6028
msgid "no .dynamic section in the dynamic segment\n"
msgstr "ingen sektion .dynamic i det dynamiska segmentet\n"
-#: readelf.c:5705
+#: readelf.c:6047
msgid "the .dynamic section is not the same as the dynamic segment\n"
msgstr "sektionen .dynamic är inte detsamma som det dynamiska segmentet\n"
-#: readelf.c:5716
+#: readelf.c:6058
msgid "the dynamic segment offset + size exceeds the size of the file\n"
msgstr "det dynamiska segmentavståndet + storleken överskrider storleken på filen\n"
-#: readelf.c:5729
+#: readelf.c:6071
msgid "Unable to find program interpreter name\n"
msgstr "Kan inte hitta namnet på programtolken\n"
-#: readelf.c:5740
+#: readelf.c:6082
#, c-format
msgid " [Requesting program interpreter: %s]\n"
msgstr " [Begär programtolkare: %s]\n"
-#: readelf.c:5751
+#: readelf.c:6093
#, c-format
msgid ""
"\n"
@@ -8368,102 +8535,102 @@ msgstr ""
"\n"
" Sektion till segment-avbildning:\n"
-#: readelf.c:5752
+#: readelf.c:6094
#, c-format
msgid " Segment Sections...\n"
msgstr " Segmentsektioner...\n"
-#: readelf.c:5794 readelf.c:10759
+#: readelf.c:6136 readelf.c:11113
msgid "Cannot interpret virtual addresses without program headers.\n"
msgstr "Kan inte tolka virtuella adresser utan programhuvud.\n"
-#: readelf.c:5810
+#: readelf.c:6152
#, c-format
msgid "Virtual address 0x%lx not located in any PT_LOAD segment.\n"
msgstr "Virtuell adress 0x%lx finns ej i något PT_LOAD-segment.\n"
-#: readelf.c:5835 readelf.c:5899
+#: readelf.c:6177 readelf.c:6241
msgid "The e_shentsize field in the ELF header is less than the size of an ELF section header\n"
msgstr "e_shentsize-fältet i ELF-huvudet är mindre än storleken på ett ELF-sektionshuvud\n"
-#: readelf.c:5839 readelf.c:5904
+#: readelf.c:6181 readelf.c:6246
msgid "The e_shentsize field in the ELF header is larger than the size of an ELF section header\n"
msgstr "e_shentsize-fältet i ELF-huvudet är större än storleken på ett ELF-sektionshuvud\n"
-#: readelf.c:5843 readelf.c:5909
+#: readelf.c:6185 readelf.c:6251
msgid "section headers"
msgstr "sektionshuvuden"
-#: readelf.c:5852 readelf.c:5918
+#: readelf.c:6194 readelf.c:6260
#, c-format
msgid "Out of memory reading %u section headers\n"
msgstr "Slut på minne när %u sektionshuvuden lästes\n"
-#: readelf.c:5872 readelf.c:5938
+#: readelf.c:6214 readelf.c:6280
#, c-format
msgid "Section %u has an out of range sh_link value of %u\n"
msgstr "Sektion %u har ett sh_link-värde %u utanför intervallet\n"
-#: readelf.c:5874 readelf.c:5940
+#: readelf.c:6216 readelf.c:6282
#, c-format
msgid "Section %u has an out of range sh_info value of %u\n"
msgstr "Sektion %u har ett sh_info-värde %u utanför intervallet\n"
-#: readelf.c:5982 readelf.c:6099
+#: readelf.c:6324 readelf.c:6441
#, c-format
msgid "Section %s has an invalid sh_entsize of 0x%lx\n"
msgstr "Sektionen %s har en felaktig sh_entsize på 0x%lx\n"
-#: readelf.c:5990 readelf.c:6107 readelf.c:12767
+#: readelf.c:6332 readelf.c:6449 readelf.c:13146
#, c-format
msgid "Section %s has an invalid sh_size of 0x%lx\n"
msgstr "Sektionen %s har en felaktig sh_size på 0x%lx\n"
-#: readelf.c:6000 readelf.c:6117
+#: readelf.c:6342 readelf.c:6459
#, c-format
msgid "Size (0x%lx) of section %s is not a multiple of its sh_entsize (0x%lx)\n"
msgstr "Storleken (0x%lx) på sektionen %s är inte en multipel av dess sh_entsize (0x%lx)\n"
-#: readelf.c:6008 readelf.c:6125 readelf.c:15196
+#: readelf.c:6350 readelf.c:6467 readelf.c:15575
msgid "symbols"
msgstr "symboler"
-#: readelf.c:6020 readelf.c:6137
+#: readelf.c:6362 readelf.c:6479
msgid "Multiple symbol table index sections associated with the same symbol section\n"
msgstr "Flera sektioner med symboltabellsindex associerade med samma sumbolsektion\n"
-#: readelf.c:6027 readelf.c:6144
+#: readelf.c:6369 readelf.c:6486
msgid "symbol table section indices"
msgstr "sektionsindex för symboltabellen"
-#: readelf.c:6034 readelf.c:6151
+#: readelf.c:6376 readelf.c:6493
#, c-format
msgid "Index section %s has an sh_size of 0x%lx - expected 0x%lx\n"
msgstr "Indexsektionen %s har en sh_size på 0x%lx — 0x%lx förväntades\n"
-#: readelf.c:6046 readelf.c:6163
+#: readelf.c:6388 readelf.c:6505
#, c-format
msgid "Out of memory reading %lu symbols\n"
msgstr "Slut på minne när %lu symboler lästes\n"
-#: readelf.c:6372 readelf.c:6469 readelf.c:6487 readelf.c:6505
+#: readelf.c:6714 readelf.c:6811 readelf.c:6829 readelf.c:6847
msgid "Internal error: not enough buffer room for section flag info"
msgstr "Internt fel: inte tillräckligt med buffertutrymme för sektionsflagginformation"
-#: readelf.c:6512
+#: readelf.c:6854
#, c-format
msgid "UNKNOWN (%*.*lx)"
msgstr "OKÄND (%*.*lx)"
-#: readelf.c:6531 readelf.c:6546
+#: readelf.c:6873 readelf.c:6888
msgid "Compressed section is too small even for a compression header\n"
msgstr "Komprimerad sektion är för liten till och med för ett komprimeringshuvud\n"
-#: readelf.c:6568
+#: readelf.c:6910
msgid "possibly corrupt ELF file header - it has a non-zero section header offset, but no section headers\n"
msgstr "möjligen trasigt ELF-filhuvud - det har ett avstånd till sektionshuvuden som inte är noll, men inga sektionshuvuden\n"
-#: readelf.c:6573
+#: readelf.c:6915
#, c-format
msgid ""
"\n"
@@ -8472,57 +8639,57 @@ msgstr ""
"\n"
"Det finns inga sektioner i denna fil.\n"
-#: readelf.c:6581 readelf.c:20805
+#: readelf.c:6923 readelf.c:21262
#, c-format
msgid "In linked file '%s': "
msgstr "I länkad fil â€%sâ€: "
-#: readelf.c:6583
+#: readelf.c:6925
#, c-format
msgid "There is %d section header, starting at offset 0x%lx:\n"
msgid_plural "There are %d section headers, starting at offset 0x%lx:\n"
msgstr[0] "Det finns %d sektionshuvud, med början på avståndet 0x%lx:\n"
msgstr[1] "Det finns %d sektionshuvuden, med början på avståndet 0x%lx:\n"
-#: readelf.c:6605 readelf.c:7278 readelf.c:7479 readelf.c:13054
-#: readelf.c:15585
+#: readelf.c:6947 readelf.c:7624 readelf.c:7826 readelf.c:13434
+#: readelf.c:15933
msgid "string table"
msgstr "strängtabell"
#. Note: coded this way so that there is a single string for translation.
-#: readelf.c:6671
+#: readelf.c:7013
#, c-format
msgid "Section %d has invalid sh_entsize of %s\n"
msgstr "Sektion %d har en felaktig sh_entsize på %s\n"
-#: readelf.c:6672
+#: readelf.c:7014
#, c-format
msgid "(Using the expected size of %u for the rest of this dump)\n"
msgstr "(Använder den förväntade storleken på %u för resten av denna dump)\n"
-#: readelf.c:6696
+#: readelf.c:7038
msgid "File contains multiple dynamic symbol tables\n"
msgstr "Filen innehåller flera tabeller med dynamiska symboler\n"
-#: readelf.c:6711
+#: readelf.c:7053
msgid "File contains multiple dynamic string tables\n"
msgstr "Filen innehåller flera dynamiska strängtabeller\n"
-#: readelf.c:6717
+#: readelf.c:7059
msgid "dynamic strings"
msgstr "dynamiska strängar"
-#: readelf.c:6745 readelf.c:6751
+#: readelf.c:7087 readelf.c:7093
#, c-format
msgid "Section '%s': zero-sized relocation section\n"
msgstr "Sektion â€%sâ€: nollstor relokeringssektion\n"
-#: readelf.c:6760
+#: readelf.c:7106
#, c-format
msgid "Section '%s': has a size of zero - is this intended ?\n"
msgstr "Sektion â€%sâ€: har en storlek pÃ¥ noll – är detta avsiktligt?\n"
-#: readelf.c:6844
+#: readelf.c:7190
#, c-format
msgid ""
"\n"
@@ -8531,7 +8698,7 @@ msgstr ""
"\n"
"Sektionshuvuden i den länkade filen â€%sâ€:\n"
-#: readelf.c:6846
+#: readelf.c:7192
#, c-format
msgid ""
"\n"
@@ -8540,7 +8707,7 @@ msgstr ""
"\n"
"Sektionshuvuden:\n"
-#: readelf.c:6848
+#: readelf.c:7194
#, c-format
msgid ""
"\n"
@@ -8549,106 +8716,106 @@ msgstr ""
"\n"
"Sektionshuvud:\n"
-#: readelf.c:6854 readelf.c:6865 readelf.c:6876
+#: readelf.c:7200 readelf.c:7211 readelf.c:7222
#, c-format
msgid " [Nr] Name\n"
msgstr " [Nr] Namn\n"
-#: readelf.c:6855
+#: readelf.c:7201
#, c-format
msgid " Type Addr Off Size ES Lk Inf Al\n"
msgstr " Typ Adr Avst Strl PS Lk Inf Ju\n"
-#: readelf.c:6859
+#: readelf.c:7205
#, c-format
msgid " [Nr] Name Type Addr Off Size ES Flg Lk Inf Al\n"
msgstr " [Nr] Namn Typ Adr Avst Strl PS Flg Lk Inf Ju\n"
-#: readelf.c:6866
+#: readelf.c:7212
#, c-format
msgid " Type Address Off Size ES Lk Inf Al\n"
msgstr " Typ Adress Avst Strl PS Lk Inf Ju\n"
-#: readelf.c:6870
+#: readelf.c:7216
#, c-format
msgid " [Nr] Name Type Address Off Size ES Flg Lk Inf Al\n"
msgstr " [Nr] Namn Typ Adress Avst Strl PS Flg Lk Inf Ju\n"
-#: readelf.c:6877
+#: readelf.c:7223
#, c-format
msgid " Type Address Offset Link\n"
msgstr " Typ Adress Avstånd Länk\n"
-#: readelf.c:6878
+#: readelf.c:7224
#, c-format
msgid " Size EntSize Info Align\n"
msgstr " Storlek Poststorlek Info Just\n"
-#: readelf.c:6882
+#: readelf.c:7228
#, c-format
msgid " [Nr] Name Type Address Offset\n"
msgstr " [Nr] Namn Typ Adress Avstånd\n"
-#: readelf.c:6883
+#: readelf.c:7229
#, c-format
msgid " Size EntSize Flags Link Info Align\n"
msgstr " Storlek Poststorlek Flagg Länk Info Just\n"
-#: readelf.c:6888
+#: readelf.c:7234
#, c-format
msgid " Flags\n"
msgstr " Flaggor\n"
-#: readelf.c:6917
+#: readelf.c:7263
#, c-format
msgid "[%2u]: Link field (%u) should index a symtab section.\n"
msgstr "[%2u]: Länkfält (%u) skall indexera en symboltabellsektion.\n"
-#: readelf.c:6930
+#: readelf.c:7276
#, c-format
msgid "[%2u]: Link field (%u) should index a string section.\n"
msgstr "[%2u]: Länkfält (%u) skall indexera en strängsektion.\n"
-#: readelf.c:6938 readelf.c:6949
+#: readelf.c:7284 readelf.c:7295
#, c-format
msgid "[%2u]: Unexpected value (%u) in link field.\n"
msgstr "[%2u]: Oväntat värde (%u) i länkfält.\n"
-#: readelf.c:6976
+#: readelf.c:7322
#, c-format
msgid "[%2u]: Info field (%u) should index a relocatable section.\n"
msgstr "[%2u]: Infofält (%u) skall indexera en omlokaliserbar sektion.\n"
-#: readelf.c:6987 readelf.c:7014
+#: readelf.c:7333 readelf.c:7360
#, c-format
msgid "[%2u]: Unexpected value (%u) in info field.\n"
msgstr "[%2u]: Oväntat värde (%u) i infofält.\n"
-#: readelf.c:7009
+#: readelf.c:7355
#, c-format
msgid "[%2u]: Expected link to another section in info field"
msgstr "[%2u]: En länk till en annan sektion förväntades i infofältet"
-#: readelf.c:7024
+#: readelf.c:7370
#, c-format
msgid "Size of section %u is larger than the entire file!\n"
msgstr "Storleken på sektion %u är större än hela filen!\n"
-#: readelf.c:7093
+#: readelf.c:7439
#, c-format
msgid "section %u: sh_link value of %u is larger than the number of sections\n"
msgstr "sektion %u: sh_link-värdet på %u är större än antalet sektioner\n"
-#: readelf.c:7194
+#: readelf.c:7540
msgid "compression header"
msgstr "komprimeringshuvud"
-#: readelf.c:7199
+#: readelf.c:7545
#, c-format
msgid " [<corrupt>]\n"
msgstr " [<trasig>]\n"
-#: readelf.c:7205
+#: readelf.c:7551
#, c-format
msgid " [<unknown>: 0x%x], "
msgstr " [<okänd>: 0x%x], "
@@ -8656,7 +8823,7 @@ msgstr " [<okänd>: 0x%x], "
#. The ordering of the letters shown here matches the ordering of the
#. corresponding SHF_xxx values, and hence the order in which these
#. letters will be displayed to the user.
-#: readelf.c:7220
+#: readelf.c:7566
#, c-format
msgid ""
"Key to Flags:\n"
@@ -8671,44 +8838,44 @@ msgstr ""
" C (komprimerad, x (okänd), o (OS-specifik), E (uteslut),\n"
" "
-#: readelf.c:7228
+#: readelf.c:7574
#, c-format
msgid "R (retain), "
msgstr "R (bevara), "
-#: readelf.c:7231
+#: readelf.c:7577
#, c-format
msgid "D (mbind), "
msgstr "D (mbind), "
-#: readelf.c:7239
+#: readelf.c:7585
#, c-format
msgid "l (large), "
msgstr "l (stor), "
-#: readelf.c:7241
+#: readelf.c:7587
#, c-format
msgid "y (purecode), "
msgstr "y (ren kod), "
-#: readelf.c:7243
+#: readelf.c:7589
#, c-format
msgid "v (VLE), "
msgstr "v (VLE), "
-#: readelf.c:7268
+#: readelf.c:7614
msgid "Bad sh_link in symbol table section\n"
msgstr "Felaktig sh_link i symboltabellsektionen\n"
-#: readelf.c:7303
+#: readelf.c:7649
msgid "<OS specific>"
msgstr "<OS-specifik>"
-#: readelf.c:7304
+#: readelf.c:7650
msgid "<PROC specific>"
msgstr "<PROC-specifik>"
-#: readelf.c:7333
+#: readelf.c:7679
#, c-format
msgid ""
"\n"
@@ -8717,7 +8884,7 @@ msgstr ""
"\n"
"Det finns inga sektionsgrupper i den länkade filen â€%sâ€.\n"
-#: readelf.c:7336 readelf.c:7375
+#: readelf.c:7682 readelf.c:7721
#, c-format
msgid ""
"\n"
@@ -8726,16 +8893,16 @@ msgstr ""
"\n"
"Det finns inga sektionsgrupper i denna fil.\n"
-#: readelf.c:7343
+#: readelf.c:7689
msgid "Section headers are not available!\n"
msgstr "Sektionshuvuden är inte tillgängliga!\n"
-#: readelf.c:7354
+#: readelf.c:7700
#, c-format
msgid "Out of memory reading %u section group headers\n"
msgstr "Slut på minne när %u sektionsgrupphuvuden lästes\n"
-#: readelf.c:7372
+#: readelf.c:7718
#, c-format
msgid ""
"\n"
@@ -8744,41 +8911,41 @@ msgstr ""
"\n"
"Det finns inga sektionsgrupper i den länkade filen â€%sâ€.\n"
-#: readelf.c:7386
+#: readelf.c:7732
#, c-format
msgid "Out of memory reading %lu groups\n"
msgstr "Slut på minne när %lu grupper lästes\n"
-#: readelf.c:7399
+#: readelf.c:7745
#, c-format
msgid "Section groups in linked file '%s'\n"
msgstr "Sektionsgrupper i den länkade filen â€%sâ€.\n"
-#: readelf.c:7420
+#: readelf.c:7766
#, c-format
msgid "Bad sh_link in group section `%s'\n"
msgstr "Felaktig sh_link i gruppsektionen â€%sâ€\n"
-#: readelf.c:7433
+#: readelf.c:7779
#, c-format
msgid "Corrupt header in group section `%s'\n"
msgstr "Trasigt huvud i gruppsektionen â€%sâ€\n"
-#: readelf.c:7439 readelf.c:7450
+#: readelf.c:7785 readelf.c:7796
#, c-format
msgid "Bad sh_info in group section `%s'\n"
msgstr "Felaktig sh_info i gruppsektionen â€%sâ€\n"
-#: readelf.c:7489
+#: readelf.c:7836
#, c-format
msgid "Section %s has sh_entsize (0x%lx) which is larger than its size (0x%lx)\n"
msgstr "Sektionen %s har sh_entsize (0x%lx) som är större än dess storlek (0x%lx)\n"
-#: readelf.c:7498
+#: readelf.c:7845
msgid "section data"
msgstr "sektionsdata"
-#: readelf.c:7509
+#: readelf.c:7856
#, c-format
msgid ""
"\n"
@@ -8787,44 +8954,44 @@ msgstr ""
"\n"
"%sgruppsektionen [%5u] â€%s†[%s] innehÃ¥ller %u sektioner:\n"
-#: readelf.c:7512
+#: readelf.c:7859
#, c-format
msgid " [Index] Name\n"
msgstr " [Index] Namn\n"
-#: readelf.c:7530
+#: readelf.c:7877
#, c-format
msgid "section [%5u] in group section [%5u] > maximum section [%5u]\n"
msgstr "sektion [%5u] i gruppsektion [%5u] > maximala sektionen [%5u]\n"
-#: readelf.c:7533
+#: readelf.c:7880
msgid "Further error messages about overlarge group section indices suppressed\n"
msgstr "Ytterligare felmeddelanden om för stora gruppsektionsindex utelämnas\n"
-#: readelf.c:7546
+#: readelf.c:7893
#, c-format
msgid "section [%5u] in group section [%5u] already in group section [%5u]\n"
msgstr "sektion [%5u] i gruppsektion [%5u] är redan i gruppsektion [%5u]\n"
-#: readelf.c:7550
+#: readelf.c:7897
msgid "Further error messages about already contained group sections suppressed\n"
msgstr "Ytterligare felmeddelanden om gruppsektioner som redan är inuti utelämnas\n"
-#: readelf.c:7562
+#: readelf.c:7909
#, c-format
msgid "section 0 in group section [%5u]\n"
msgstr "sektion 0 i gruppsektion [%5u]\n"
-#: readelf.c:7629
+#: readelf.c:7976
msgid "dynamic section image fixups"
msgstr "avbildsfixar för den dynamiska sektionen"
-#: readelf.c:7637
+#: readelf.c:7984
#, c-format
msgid "corrupt library name index of 0x%lx found in dynamic entry"
msgstr "trasigt biblioteksnamnsindex på 0x%lx hittat i en dynamisk post"
-#: readelf.c:7642
+#: readelf.c:7989
#, c-format
msgid ""
"\n"
@@ -8833,16 +9000,16 @@ msgstr ""
"\n"
"Avbildsfixar behövs för bibliotek nr. %d: %s - ident: %lx\n"
-#: readelf.c:7645
+#: readelf.c:7992
#, c-format
msgid "Seg Offset Type SymVec DataType\n"
msgstr "Seg-avstånd Typ Symvek Datatyp\n"
-#: readelf.c:7679
+#: readelf.c:8026
msgid "dynamic section image relocations"
msgstr "omlokaliseringar för dynamisk sektion"
-#: readelf.c:7683
+#: readelf.c:8030
#, c-format
msgid ""
"\n"
@@ -8851,16 +9018,16 @@ msgstr ""
"\n"
"Avbildsomlokaliseringar\n"
-#: readelf.c:7685
+#: readelf.c:8032
#, c-format
msgid "Seg Offset Type Addend Seg Sym Off\n"
msgstr "Seg-avstånd Typ Addend Segsymavst\n"
-#: readelf.c:7742
+#: readelf.c:8089
msgid "dynamic string section"
msgstr "sektion för dynamiska strängar"
-#: readelf.c:7845
+#: readelf.c:8193
#, c-format
msgid ""
"\n"
@@ -8869,7 +9036,7 @@ msgstr ""
"\n"
"I den länkade filen â€%s†innehÃ¥ller sektion â€%s†pÃ¥ avstÃ¥ndet 0x%lx %ld byte:\n"
-#: readelf.c:7849
+#: readelf.c:8197
#, c-format
msgid ""
"\n"
@@ -8878,7 +9045,7 @@ msgstr ""
"\n"
"â€%s†omlokaliseringssektion pÃ¥ offset 0x%lx innehÃ¥ller %ld byte:\n"
-#: readelf.c:7870
+#: readelf.c:8218
#, c-format
msgid ""
"\n"
@@ -8887,7 +9054,7 @@ msgstr ""
"\n"
"Det finns inga dynamiska omlokaliseringar i den länkade filen â€%sâ€.\n"
-#: readelf.c:7873
+#: readelf.c:8221
#, c-format
msgid ""
"\n"
@@ -8896,7 +9063,7 @@ msgstr ""
"\n"
"Det finns inga dynamiska omlokaliseringar i denna fil.\n"
-#: readelf.c:7899
+#: readelf.c:8248
#, c-format
msgid ""
"\n"
@@ -8905,7 +9072,7 @@ msgstr ""
"\n"
"I den länkade filen â€%s†omlokeringssektion "
-#: readelf.c:7902
+#: readelf.c:8251
#, c-format
msgid ""
"\n"
@@ -8914,14 +9081,14 @@ msgstr ""
"\n"
"Omlokeringssektion "
-#: readelf.c:7910
+#: readelf.c:8259
#, c-format
msgid " at offset 0x%lx contains %lu entry:\n"
msgid_plural " at offset 0x%lx contains %lu entries:\n"
msgstr[0] " på avståndet 0x%lx innehåller %lu post:\n"
msgstr[1] " på avståndet 0x%lx innehåller %lu poster:\n"
-#: readelf.c:7959
+#: readelf.c:8308
#, c-format
msgid ""
"\n"
@@ -8930,7 +9097,7 @@ msgstr ""
"\n"
"Det finns inga statiska omlokaliseringar i den länkade filen â€%sâ€."
-#: readelf.c:7962
+#: readelf.c:8311
#, c-format
msgid ""
"\n"
@@ -8939,7 +9106,7 @@ msgstr ""
"\n"
"Det finns inga statiska omlokaliseringar i denna fil."
-#: readelf.c:7963
+#: readelf.c:8312
#, c-format
msgid ""
"\n"
@@ -8948,7 +9115,7 @@ msgstr ""
"\n"
"För att se de dynamiska omlokaliseringarna, lägg till --use-dynamic på kommandoraden.\n"
-#: readelf.c:7971
+#: readelf.c:8320
#, c-format
msgid ""
"\n"
@@ -8957,7 +9124,7 @@ msgstr ""
"\n"
"Det finns inga omlokaliseringar i den länkade filen â€%sâ€.\n"
-#: readelf.c:7974
+#: readelf.c:8323
#, c-format
msgid ""
"\n"
@@ -8966,50 +9133,50 @@ msgstr ""
"\n"
"Det finns inga omlokaliseringar i denna fil.\n"
-#: readelf.c:8142
+#: readelf.c:8491
#, c-format
msgid "Invalid section %u in table entry %ld\n"
msgstr "Felaktig sektion %u i tabellspost %ld\n"
-#: readelf.c:8154
+#: readelf.c:8503
#, c-format
msgid "Invalid offset %lx in table entry %ld\n"
msgstr "Felaktigt avstånd %lx i tabellspost %ld\n"
-#: readelf.c:8172
+#: readelf.c:8521
#, c-format
msgid "\tUnknown version.\n"
msgstr "\tOkänd version.\n"
-#: readelf.c:8235 readelf.c:8669
+#: readelf.c:8584 readelf.c:9021
msgid "unwind table"
msgstr "utrullningstabell"
-#: readelf.c:8286 readelf.c:8752
+#: readelf.c:8635 readelf.c:9104
#, c-format
msgid "Skipping unknown relocation type: %u\n"
msgstr "Hoppar över okänd omlokaliseringstyp: %u\n"
-#: readelf.c:8292 readelf.c:8759
+#: readelf.c:8641 readelf.c:9111
#, c-format
msgid "Skipping unexpected relocation type: %s\n"
msgstr "Hoppar över oväntad omlokaliseringstyp: %s\n"
-#: readelf.c:8301 readelf.c:8766
+#: readelf.c:8650 readelf.c:9118
#, c-format
msgid "Skipping reloc with overlarge offset: %lx\n"
msgstr "Hoppar över omlokalisering med för stort avstånd: %lx\n"
-#: readelf.c:8308 readelf.c:8773
+#: readelf.c:8657 readelf.c:9125
#, c-format
msgid "Skipping reloc with invalid symbol index: %u\n"
msgstr "Hoppar över omlokalisering med ett felaktigt symbolindex: %u\n"
-#: readelf.c:8356 readelf.c:8820 readelf.c:9928
+#: readelf.c:8705 readelf.c:9172 readelf.c:10282
msgid "Multiple symbol tables encountered\n"
msgstr "Flera symboltabeller påträffade\n"
-#: readelf.c:8371 readelf.c:8836 readelf.c:9943
+#: readelf.c:8720 readelf.c:9188 readelf.c:10297
#, c-format
msgid ""
"\n"
@@ -9019,7 +9186,7 @@ msgstr ""
"Det finns inga utrullningssektioner i denna fil.\n"
# BUGG: Fortsättningen är inte markerad för översättning i koden och innehåller '-citattecken.
-#: readelf.c:8454
+#: readelf.c:8806
#, c-format
msgid ""
"\n"
@@ -9028,11 +9195,11 @@ msgstr ""
"\n"
"Kunde inte hitta utrullningssektion till "
-#: readelf.c:8466
+#: readelf.c:8818
msgid "unwind info"
msgstr "utrullningsinfo"
-#: readelf.c:8469
+#: readelf.c:8821
#, c-format
msgid ""
"\n"
@@ -9041,12 +9208,12 @@ msgstr ""
"\n"
"Utrullningssektion "
-#: readelf.c:8476
+#: readelf.c:8828
#, c-format
msgid " at offset 0x%lx contains %lu entries:\n"
msgstr " på offset 0x%lx innehåller %lu poster:\n"
-#: readelf.c:8845 readelf.c:9950
+#: readelf.c:9197 readelf.c:10304
#, c-format
msgid ""
"\n"
@@ -9061,192 +9228,197 @@ msgstr[1] ""
"\n"
"Utrullad sektion â€%s†pÃ¥ avstÃ¥ndet 0x%lx innehÃ¥ller %lu poster:\n"
-#: readelf.c:8978
+#: readelf.c:9330
msgid "unwind data"
msgstr "rulla ut data"
-#: readelf.c:9051
+#: readelf.c:9403
#, c-format
msgid "Skipping unexpected relocation at offset 0x%lx\n"
msgstr "Hoppar över oväntad omlokalisering på avståndet 0x%lx\n"
-#: readelf.c:9073
+#: readelf.c:9425
#, c-format
msgid "Unknown section relocation type %d encountered\n"
msgstr "Okänd sektionsomlokaliseringstyp %d påträffad\n"
-#: readelf.c:9081
+#: readelf.c:9433
#, c-format
msgid "Bad symbol index in unwind relocation (%lu > %lu)\n"
msgstr "Felaktigt symbolindex i utrullningsomlokalisering (%lu > %lu)\n"
-#: readelf.c:9096
+#: readelf.c:9448
#, c-format
msgid "Skipping unknown ARM relocation type: %d\n"
msgstr "Hoppar över okänd ARM-omlokaliseringstyp: %d\n"
-#: readelf.c:9106
+#: readelf.c:9458
#, c-format
msgid "Skipping unexpected ARM relocation type %s\n"
msgstr "Hoppar över oväntad ARM-omlokaliseringstyp %s\n"
-#: readelf.c:9115
+#: readelf.c:9467
#, c-format
msgid "Skipping unknown C6000 relocation type: %d\n"
msgstr "Hoppar över okänd C6000-omlokaliseringstyp: %d\n"
-#: readelf.c:9125
+#: readelf.c:9477
#, c-format
msgid "Skipping unexpected C6000 relocation type %s\n"
msgstr "Hoppar över oväntad C6000-omlokaliseringstyp %s\n"
#. This function currently only supports ARM and TI unwinders.
-#: readelf.c:9134
+#: readelf.c:9486
msgid "Only TI and ARM unwinders are currently supported\n"
msgstr "Endast TI- och ARM-utrullare stödjs för närvarande\n"
-#: readelf.c:9197
+#: readelf.c:9549
#, c-format
msgid "[Truncated opcode]\n"
msgstr "[Avhuggen op-kod]\n"
-#: readelf.c:9245 readelf.c:9461
+#: readelf.c:9597 readelf.c:9815
#, c-format
msgid "Refuse to unwind"
msgstr "Vägra att rulla ut"
-#: readelf.c:9268
+#: readelf.c:9620
#, c-format
msgid " [Reserved]"
msgstr " [Reserverad]"
-#: readelf.c:9296
+#: readelf.c:9648
#, c-format
msgid " finish"
msgstr " slut"
-#: readelf.c:9301 readelf.c:9394
+#: readelf.c:9653 readelf.c:9748
#, c-format
msgid "[Spare]"
msgstr "[Reserv]"
-#: readelf.c:9335
+#: readelf.c:9687
msgid "corrupt change to vsp\n"
msgstr "trasig ändring av vsp\n"
-#: readelf.c:9416 readelf.c:9573
+#: readelf.c:9713
+#, c-format
+msgid " pop {ra_auth_code}"
+msgstr " poppa {ra_auth_code}"
+
+#: readelf.c:9770 readelf.c:9927
#, c-format
msgid " [unsupported opcode]"
msgstr " [ej stödd op-kod]"
-#: readelf.c:9509
+#: readelf.c:9863
#, c-format
msgid "pop frame {"
msgstr "poppa ram {"
-#: readelf.c:9512
+#: readelf.c:9866
#, c-format
msgid "*corrupt* - no registers specified"
msgstr "*trasig* – inga register använda"
-#: readelf.c:9526
+#: readelf.c:9880
msgid "[pad]"
msgstr "[fyll]"
-#: readelf.c:9555
+#: readelf.c:9909
msgid "Corrupt stack pointer adjustment detected\n"
msgstr "Trasig stackpekarjustering upptäckt\n"
-#: readelf.c:9562
+#: readelf.c:9916
#, c-format
msgid "sp = sp + %ld"
msgstr "sp = sp + %ld"
-#: readelf.c:9637
+#: readelf.c:9991
#, c-format
msgid " Personality routine: "
msgstr " Personalitetsrutin: "
-#: readelf.c:9669
+#: readelf.c:10023
#, c-format
msgid " [Truncated data]\n"
msgstr " [Avhuggen data]\n"
-#: readelf.c:9693
+#: readelf.c:10047
#, c-format
msgid "Corrupt ARM compact model table entry: %x \n"
msgstr "Trasig tabellingång för ARM kompakt modell: %x \n"
-#: readelf.c:9698
+#: readelf.c:10052
#, c-format
msgid " Compact model index: %d\n"
msgstr " Kompakt modellindex: %d\n"
-#: readelf.c:9724
+#: readelf.c:10078
msgid "Unknown ARM compact model index encountered\n"
msgstr "Okänd index för ARM kompakt modell påträffat\n"
-#: readelf.c:9725
+#: readelf.c:10079
#, c-format
msgid " [reserved]\n"
msgstr " [reserverad]\n"
-#: readelf.c:9740
+#: readelf.c:10094
#, c-format
msgid " Restore stack from frame pointer\n"
msgstr " Återställ stack från rampekare\n"
-#: readelf.c:9742
+#: readelf.c:10096
#, c-format
msgid " Stack increment %d\n"
msgstr " Stackökning %d\n"
-#: readelf.c:9743
+#: readelf.c:10097
#, c-format
msgid " Registers restored: "
msgstr " Återställda register: "
-#: readelf.c:9748
+#: readelf.c:10102
#, c-format
msgid " Return register: %s\n"
msgstr " Returregister: %s\n"
-#: readelf.c:9752
+#: readelf.c:10106
#, c-format
msgid " [reserved (%d)]\n"
msgstr " [reserverad (%d)]\n"
-#: readelf.c:9756
+#: readelf.c:10110
#, c-format
msgid "Unsupported architecture type %d encountered when decoding unwind table\n"
msgstr "Arkitekturtyp %d som ej stödjs påträffad när utrullningstabellen avkodades\n"
-#: readelf.c:9811
+#: readelf.c:10165
#, c-format
msgid "corrupt index table entry: %x\n"
msgstr "trasigt strängtabellsindex: %x\n"
-#: readelf.c:9851
+#: readelf.c:10205
#, c-format
msgid "Unwind entry contains corrupt offset (0x%lx) into section %s\n"
msgstr "Utrullningspost innehåller trasigt avstånd (0x%lx) i sektionen %s\n"
-#: readelf.c:9867
+#: readelf.c:10221
#, c-format
msgid "Could not locate .ARM.extab section containing 0x%lx.\n"
msgstr "Kunde inte hitta sektionen .ARM.extab innehållande 0x%lx.\n"
-#: readelf.c:9911
+#: readelf.c:10265
#, c-format
msgid "Unsupported architecture type %d encountered when processing unwind table\n"
msgstr "Arkitekturtyp %d som ej stödjs påträffad när utrullningstabellen bearbetades\n"
-#: readelf.c:9973
+#: readelf.c:10327
#, c-format
msgid "No processor specific unwind information to decode\n"
msgstr "Ingen processorspecifik utrullningsinformation att avkoda\n"
-#: readelf.c:10003
+#: readelf.c:10357
#, c-format
msgid ""
"\n"
@@ -9255,79 +9427,79 @@ msgstr ""
"\n"
"Avkodningen av utrullningssektioner för maskintypen %s stödjs inte för närvarande.\n"
-#: readelf.c:10030
+#: readelf.c:10384
#, c-format
msgid "NONE"
msgstr "INGA"
-#: readelf.c:10055
+#: readelf.c:10409
#, c-format
msgid "Interface Version: %s"
msgstr "Gränssnittsversion: %s"
#. Note: coded this way so that there is a single string for translation.
-#: readelf.c:10062
+#: readelf.c:10416
#, c-format
msgid "<corrupt: %s>"
msgstr "<trasig: %s>"
-#: readelf.c:10080
+#: readelf.c:10434
#, c-format
msgid "Time Stamp: %s"
msgstr "Tidsstämpel: %s"
-#: readelf.c:10274 readelf.c:10324
+#: readelf.c:10628 readelf.c:10678
msgid "dynamic section"
msgstr "dynamisk sektion"
-#: readelf.c:10294 readelf.c:10345
+#: readelf.c:10648 readelf.c:10699
#, c-format
msgid "Out of memory allocating space for %lu dynamic entries\n"
msgstr "Slut på minne vid allokering av utrymme för %lu dynamiska poster\n"
-#: readelf.c:10419
+#: readelf.c:10773
#, c-format
msgid "Size truncation prevents reading %s elements of size %u\n"
msgstr "Avhuggen storlek förhindrar läsning av %s element med storlek %u\n"
-#: readelf.c:10428
+#: readelf.c:10782
#, c-format
msgid "Invalid number of dynamic entries: %s\n"
msgstr "Felaktigt antal dynamiska poster: %s\n"
-#: readelf.c:10436
+#: readelf.c:10790
#, c-format
msgid "Out of memory reading %s dynamic entries\n"
msgstr "Slut på minne vid läsning av %s dynamiska poster\n"
-#: readelf.c:10443
+#: readelf.c:10797
#, c-format
msgid "Unable to read in %s bytes of dynamic data\n"
msgstr "Kan inte läsa in %s byte med dynamiska data\n"
-#: readelf.c:10452
+#: readelf.c:10806
#, c-format
msgid "Out of memory allocating space for %s dynamic entries\n"
msgstr "Slut på minne vid allokering av utrymme för %s dynamiska poster\n"
-#: readelf.c:10492 readelf.c:10546 readelf.c:10570 readelf.c:10603
-#: readelf.c:10629 readelf.c:10648
+#: readelf.c:10846 readelf.c:10900 readelf.c:10924 readelf.c:10957
+#: readelf.c:10983 readelf.c:11002
msgid "Unable to seek to start of dynamic information\n"
msgstr "Kan inte uppsöka början av den dynamiska informationen\n"
-#: readelf.c:10498 readelf.c:10552
+#: readelf.c:10852 readelf.c:10906
msgid "Failed to read in number of buckets\n"
msgstr "Lyckades inte läsa antal hinkar\n"
-#: readelf.c:10504
+#: readelf.c:10858
msgid "Failed to read in number of chains\n"
msgstr "Lyckades inte läsa antal kedjor\n"
-#: readelf.c:10611
+#: readelf.c:10965
msgid "Failed to determine last chain length\n"
msgstr "Lyckades inte avgöra sista kedjans längd\n"
-#: readelf.c:10711
+#: readelf.c:11065
#, c-format
msgid ""
"\n"
@@ -9336,7 +9508,7 @@ msgstr ""
"\n"
"Det finns ingen dynamisk sektion i den länkade filen â€%sâ€.\n"
-#: readelf.c:10714
+#: readelf.c:11068
#, c-format
msgid ""
"\n"
@@ -9346,165 +9518,159 @@ msgstr ""
"Det finns ingen dynamisk sektion i denna fil.\n"
#. See PR 21379 for a reproducer.
-#: readelf.c:10774
+#: readelf.c:11128
msgid "Invalid PT_LOAD entry\n"
msgstr "Felaktigt PT_LOAD-post\n"
-#: readelf.c:10800
+#: readelf.c:11154
msgid "the .dynsym section doesn't match the DT_SYMTAB and DT_SYMENT tags\n"
msgstr "sektionen .dynsym stämmer inte med taggarna DT_SYMBAB och DT_SYMENT\n"
-#: readelf.c:10810
+#: readelf.c:11164
msgid "Corrupt DT_SYMTAB dynamic entry\n"
msgstr "Trasig DT_SYMTAB dynamisk post\n"
-#: readelf.c:10846
+#: readelf.c:11200
msgid "the .dynstr section doesn't match the DT_STRTAB and DT_STRSZ tags\n"
msgstr "sektionen .dynstr stämmer inte med taggarna DT_STRTAB och DT_STRSZ\n"
-#: readelf.c:10851
+#: readelf.c:11205
msgid "dynamic string table"
msgstr "dynamisk sträng-tabell"
-#: readelf.c:10854
+#: readelf.c:11208
msgid "Corrupt DT_STRTAB dynamic entry\n"
msgstr "Trasig DT_STRTAB dynamisk post\n"
-#: readelf.c:10879
+#: readelf.c:11233
#, c-format
msgid "Bad value (%d) for SYMINENT entry\n"
msgstr "Felaktigt värde (%d) för SYMINENT-post\n"
-#: readelf.c:10898
+#: readelf.c:11252
msgid "symbol information"
msgstr "symbolinformation"
-#: readelf.c:10904
+#: readelf.c:11258
msgid "Multiple dynamic symbol information sections found\n"
msgstr "Flera sektioner med dynamisk symbol-information funna\n"
-#: readelf.c:10910
+#: readelf.c:11264
#, c-format
msgid "Out of memory allocating %lu bytes for dynamic symbol info\n"
msgstr "Slut på minne vid allokering av %lu byte för information om dynamiska symboler\n"
-#: readelf.c:10936
-#, c-format
-msgid ""
-"\n"
-"In linked file '%s' the dynamic section at offset 0x%lx contains 1 entry:\n"
-msgstr ""
-"\n"
-"I den länkade filen â€%s†innehÃ¥ller den dynamiska sektionen pÃ¥ avstÃ¥ndet 0x%lx 1 post:\n"
-
-#: readelf.c:10940
+#: readelf.c:11288
#, c-format
msgid ""
"\n"
-"Dynamic section at offset 0x%lx contains 1 entry:\n"
-msgstr ""
-"\n"
-"Den dynamiska sektionen på avståndet 0x%lx innehåller 1 post:\n"
-
-#: readelf.c:10946
-#, c-format
-msgid ""
+"In linked file '%s' the dynamic section at offset 0x%lx contains %lu entry:\n"
+msgid_plural ""
"\n"
"In linked file '%s' the dynamic section at offset 0x%lx contains %lu entries:\n"
-msgstr ""
+msgstr[0] ""
+"\n"
+"I den länkade filen â€%s†innehÃ¥ller den dynamiska sektionen pÃ¥ avstÃ¥ndet 0x%lx %lu post:\n"
+msgstr[1] ""
"\n"
"I den länkade filen â€%s†innehÃ¥ller den dynamiska sektionen pÃ¥ avstÃ¥ndet 0x%lx %lu poster:\n"
-#: readelf.c:10951
+#: readelf.c:11295
#, c-format
msgid ""
"\n"
+"Dynamic section at offset 0x%lx contains %lu entry:\n"
+msgid_plural ""
+"\n"
"Dynamic section at offset 0x%lx contains %lu entries:\n"
-msgstr ""
+msgstr[0] ""
+"\n"
+"Den dynamiska sektionen på avståndet 0x%lx innehåller %lu post:\n"
+msgstr[1] ""
"\n"
"Den dynamiska sektionen på avståndet 0x%lx innehåller %lu poster:\n"
-#: readelf.c:10957
+#: readelf.c:11302
#, c-format
msgid " Tag Type Name/Value\n"
msgstr " Tagg Typ Namn/Värde\n"
-#: readelf.c:10991
+#: readelf.c:11336
#, c-format
msgid "Auxiliary library"
msgstr "yttre bibliotek"
-#: readelf.c:10995
+#: readelf.c:11340
#, c-format
msgid "Filter library"
msgstr "filterbibliotek"
-#: readelf.c:10999
+#: readelf.c:11344
#, c-format
msgid "Configuration file"
msgstr "konfigurationsfil"
-#: readelf.c:11003
+#: readelf.c:11348
#, c-format
msgid "Dependency audit library"
msgstr "beroendeövervakningsbibliotek"
-#: readelf.c:11007
+#: readelf.c:11352
#, c-format
msgid "Audit library"
msgstr "övervakningsbibliotek"
-#: readelf.c:11026 readelf.c:11054 readelf.c:11082 readelf.c:11417
+#: readelf.c:11371 readelf.c:11399 readelf.c:11427 readelf.c:11767
#, c-format
msgid "Flags:"
msgstr "flaggor:"
-#: readelf.c:11029 readelf.c:11057 readelf.c:11084 readelf.c:11419
+#: readelf.c:11374 readelf.c:11402 readelf.c:11429 readelf.c:11769
#, c-format
msgid " None\n"
msgstr " inga\n"
-#: readelf.c:11290
+#: readelf.c:11636
#, c-format
msgid "Shared library: [%s]"
msgstr "delat bibliotek: [%s]"
-#: readelf.c:11294
+#: readelf.c:11640
#, c-format
msgid " program interpreter"
msgstr " programtolk"
-#: readelf.c:11298
+#: readelf.c:11644
#, c-format
msgid "Library soname: [%s]"
msgstr "biblioteks so-namn: [%s]"
-#: readelf.c:11302
+#: readelf.c:11648
#, c-format
msgid "Library rpath: [%s]"
msgstr "bibliotekets rpath: [%s]"
-#: readelf.c:11306
+#: readelf.c:11652
#, c-format
msgid "Library runpath: [%s]"
msgstr "bibliotekets runpath: [%s]"
-#: readelf.c:11340
+#: readelf.c:11689
#, c-format
msgid " (bytes)\n"
msgstr " (byte)\n"
-#: readelf.c:11370
+#: readelf.c:11720
#, c-format
msgid "Not needed object: [%s]\n"
msgstr "onödigt objekt: [%s]\n"
-#: readelf.c:11395
+#: readelf.c:11745
#, c-format
msgid "<corrupt time val: %lx"
msgstr "<trasigt tidsvärde: %lx"
-#: readelf.c:11538
+#: readelf.c:11888
#, c-format
msgid ""
"\n"
@@ -9519,7 +9685,7 @@ msgstr[1] ""
"\n"
"I den länkade filen â€%s†innehÃ¥ller versiondefinitionssektion â€%s†%u poster:\n"
-#: readelf.c:11545
+#: readelf.c:11895
#, c-format
msgid ""
"\n"
@@ -9534,71 +9700,71 @@ msgstr[1] ""
"\n"
"Versiondefinitionssektion â€%s†innehÃ¥ller %u poster:\n"
-#: readelf.c:11553 readelf.c:11700 readelf.c:11866
+#: readelf.c:11903 readelf.c:12050 readelf.c:12216
#, c-format
msgid " Addr: 0x"
msgstr " Adr: 0x"
-#: readelf.c:11555 readelf.c:11702 readelf.c:11868
+#: readelf.c:11905 readelf.c:12052 readelf.c:12218
#, c-format
msgid " Offset: %#08lx Link: %u (%s)\n"
msgstr " Avstånd: %#08lx Länk: %u (%s)\n"
-#: readelf.c:11561
+#: readelf.c:11911
msgid "version definition section"
msgstr "versiondefinitionssektion"
-#: readelf.c:11590
+#: readelf.c:11940
#, c-format
msgid " %#06lx: Rev: %d Flags: %s"
msgstr " %#06lx: Rev: %d Flaggor: %s"
-#: readelf.c:11593
+#: readelf.c:11943
#, c-format
msgid " Index: %d Cnt: %d "
msgstr " Index: %d Ant: %d "
-#: readelf.c:11610
+#: readelf.c:11960
#, c-format
msgid "Name: %s\n"
msgstr "Namn: %s\n"
-#: readelf.c:11613
+#: readelf.c:11963
#, c-format
msgid "Name index: %ld\n"
msgstr "Namnindex: %ld\n"
-#: readelf.c:11622
+#: readelf.c:11972
#, c-format
msgid "Invalid vda_next field of %lx\n"
msgstr "Felaktigt vda_next-fält på %lx\n"
-#: readelf.c:11642
+#: readelf.c:11992
#, c-format
msgid " %#06lx: Parent %d: %s\n"
msgstr " %#06lx: Förälder %d: %s\n"
-#: readelf.c:11646
+#: readelf.c:11996
#, c-format
msgid " %#06lx: Parent %d, name index: %ld\n"
msgstr " %#06lx: Förälder %d, namnindex: %ld\n"
-#: readelf.c:11651
+#: readelf.c:12001
#, c-format
msgid " Version def aux past end of section\n"
msgstr " Versions-def aux efter slutet av sektionen\n"
-#: readelf.c:11658
+#: readelf.c:12008
#, c-format
msgid "Invalid vd_next field of %lx\n"
msgstr "Felaktigt vd_next-fält på %lx\n"
-#: readelf.c:11669
+#: readelf.c:12019
#, c-format
msgid " Version definition past end of section\n"
msgstr " Versiondefinition efter slutet av sektionen\n"
-#: readelf.c:11685
+#: readelf.c:12035
#, c-format
msgid ""
"\n"
@@ -9613,7 +9779,7 @@ msgstr[1] ""
"\n"
"I den länkade filen â€%s†innehÃ¥ller versionbehovssektion â€%s†%u poster:\n"
-#: readelf.c:11692
+#: readelf.c:12042
#, c-format
msgid ""
"\n"
@@ -9628,68 +9794,68 @@ msgstr[1] ""
"\n"
"Versionbehovssektion â€%s†innehÃ¥ller %u poster:\n"
-#: readelf.c:11709
+#: readelf.c:12059
msgid "Version Needs section"
msgstr "Versionsbehovssektion"
-#: readelf.c:11734
+#: readelf.c:12084
#, c-format
msgid " %#06lx: Version: %d"
msgstr " %#06lx: Version: %d"
-#: readelf.c:11737
+#: readelf.c:12087
#, c-format
msgid " File: %s"
msgstr " Fil: %s"
-#: readelf.c:11740
+#: readelf.c:12090
#, c-format
msgid " File: %lx"
msgstr " Fil: %lx"
-#: readelf.c:11742
+#: readelf.c:12092
#, c-format
msgid " Cnt: %d\n"
msgstr " Ant: %d\n"
-#: readelf.c:11765
+#: readelf.c:12115
#, c-format
msgid " %#06lx: Name: %s"
msgstr " %#06lx: Namn: %s"
-#: readelf.c:11768
+#: readelf.c:12118
#, c-format
msgid " %#06lx: Name index: %lx"
msgstr " %#06lx: Namnindex: %lx"
-#: readelf.c:11771
+#: readelf.c:12121
#, c-format
msgid " Flags: %s Version: %d\n"
msgstr " Flaggor: %s Version: %d\n"
-#: readelf.c:11777
+#: readelf.c:12127
#, c-format
msgid "Invalid vna_next field of %lx\n"
msgstr "Felaktigt vna_next-fält på %lx\n"
-#: readelf.c:11790
+#: readelf.c:12140
msgid "Missing Version Needs auxiliary information\n"
msgstr "Saknad version behöver ytterligare information\n"
-#: readelf.c:11795
+#: readelf.c:12145
#, c-format
msgid "Invalid vn_next field of %lx\n"
msgstr "Felaktigt vn_next-fält på %lx\n"
-#: readelf.c:11805
+#: readelf.c:12155
msgid "Missing Version Needs information\n"
msgstr "Saknad version behöver information\n"
-#: readelf.c:11843
+#: readelf.c:12193
msgid "version string table"
msgstr "versionssträngtabell"
-#: readelf.c:11851
+#: readelf.c:12201
#, c-format
msgid ""
"\n"
@@ -9704,7 +9870,7 @@ msgstr[1] ""
"\n"
"I den länkade filen â€%s†innehÃ¥ller versionsymbolssektionen â€%s†%lu poster:\n"
-#: readelf.c:11858
+#: readelf.c:12208
#, c-format
msgid ""
"\n"
@@ -9719,47 +9885,47 @@ msgstr[1] ""
"\n"
"Versionsymbolssektion â€%s†innehÃ¥ller %lu poster:\n"
-#: readelf.c:11877
+#: readelf.c:12227
msgid "version symbol data"
msgstr "versionsymbolsdata"
-#: readelf.c:11897
+#: readelf.c:12247
msgid "*invalid*"
msgstr "*ogiltigt*"
-#: readelf.c:11905
+#: readelf.c:12255
msgid " 0 (*local*) "
msgstr " 0 (*lokal*) "
-#: readelf.c:11909
+#: readelf.c:12259
msgid " 1 (*global*) "
msgstr " 1 (*global*) "
-#: readelf.c:11920
+#: readelf.c:12270
msgid "invalid index into symbol array\n"
msgstr "ogiltigt index in i symbolvektor\n"
-#: readelf.c:11943 readelf.c:12515
+#: readelf.c:12293 readelf.c:12890
msgid "version need"
msgstr "versionsbehov"
-#: readelf.c:11954
+#: readelf.c:12304
msgid "version need aux (2)"
msgstr "yttre versionsbehov (2)"
-#: readelf.c:12001 readelf.c:12459
+#: readelf.c:12351 readelf.c:12834
msgid "version def"
msgstr "versionsdef."
-#: readelf.c:12029 readelf.c:12490
+#: readelf.c:12379 readelf.c:12865
msgid "version def aux"
msgstr "yttre versionsdef."
-#: readelf.c:12037
+#: readelf.c:12387
msgid "*both*"
msgstr "*båda*"
-#: readelf.c:12069
+#: readelf.c:12419
#, c-format
msgid ""
"\n"
@@ -9768,7 +9934,7 @@ msgstr ""
"\n"
"Det fanns ingen versionsinformation i den länkade filen â€%sâ€.\n"
-#: readelf.c:12072
+#: readelf.c:12422
#, c-format
msgid ""
"\n"
@@ -9777,70 +9943,74 @@ msgstr ""
"\n"
"Det fanns ingen versionsinformation i denna fil.\n"
-#: readelf.c:12168
+#: readelf.c:12518
#, c-format
msgid "Unrecognized visibility value: %u\n"
msgstr "Okänt synlighetsvärde: %u\n"
-#: readelf.c:12181
+#: readelf.c:12531
#, c-format
msgid "Unrecognized alpha specific other value: %u\n"
msgstr "Okänt alpha-specifikt annat värde: %u\n"
-#: readelf.c:12258
+#: readelf.c:12608
#, c-format
msgid "Unrecognized IA64 VMS ST Function type: %d\n"
msgstr "Okänd IA64 VMS ST-funktionstyp %d\n"
-#: readelf.c:12282
+#: readelf.c:12632
#, c-format
msgid "Unrecognized IA64 VMS ST Linkage: %d\n"
msgstr "Okänd IA64 VMS ST-länkning: %d\n"
-#: readelf.c:12308
+#: readelf.c:12658
#, c-format
msgid "<localentry>: %d"
msgstr "<lokalpost>: %d"
-#: readelf.c:12348
+#: readelf.c:12672
+msgid " VARIANT_CC"
+msgstr " VARIANT_CC"
+
+#: readelf.c:12723
#, c-format
msgid "<other>: %x"
msgstr "<annan>: %x"
-#: readelf.c:12388
+#: readelf.c:12763
#, c-format
msgid "bad section index[%3d]"
msgstr "trasigt sektionsindex[%3d]"
-#: readelf.c:12421
+#: readelf.c:12796
msgid "version data"
msgstr "versionsdata"
-#: readelf.c:12533
+#: readelf.c:12908
msgid "version need aux (3)"
msgstr "yttre versionsbehov (3)"
-#: readelf.c:12683
+#: readelf.c:13062
#, c-format
msgid "local symbol %lu found at index >= %s's sh_info value of %u\n"
msgstr "lokal symbol %lu hittad vid index ≥ %ss sh_info-värde på %u\n"
-#: readelf.c:12702
+#: readelf.c:13081
#, c-format
msgid "Unknown LTO symbol definition encountered: %u\n"
msgstr "Okänd LTO-symboldefinition påträffad: %u\n"
-#: readelf.c:12721
+#: readelf.c:13100
#, c-format
msgid "Unknown LTO symbol visibility encountered: %u\n"
msgstr "Okänd LTO-symbolssynlighet påträffad: %u\n"
-#: readelf.c:12739
+#: readelf.c:13118
#, c-format
msgid "Unknown LTO symbol type encountered: %u\n"
msgstr "Okänd LTO-symboltyp påträffad: %u\n"
-#: readelf.c:12755
+#: readelf.c:13134
#, c-format
msgid ""
"\n"
@@ -9849,7 +10019,7 @@ msgstr ""
"\n"
"LTO-symboltabellsektionen â€%s†i den länkade filen â€%s†är tom!\n"
-#: readelf.c:12759
+#: readelf.c:13138
#, c-format
msgid ""
"\n"
@@ -9858,24 +10028,24 @@ msgstr ""
"\n"
"LTO-symboltabellen â€%s†är tom!\n"
-#: readelf.c:12774
+#: readelf.c:13153
msgid "LTO symbols"
msgstr "LTO-symboler"
-#: readelf.c:12791
+#: readelf.c:13171
#, c-format
msgid "LTO Symbol extension table '%s' is empty!\n"
msgstr "LTO-symbolutökningstabellen â€%s†är tom!\n"
-#: readelf.c:12797
+#: readelf.c:13177
msgid "LTO ext symbol data"
msgstr "LTO-utökningssymbolsdata"
-#: readelf.c:12802
+#: readelf.c:13182
msgid "Unexpected version number in symbol extension table\n"
msgstr "Oväntat versionsnummer i symbolutökningstabellen\n"
-#: readelf.c:12811
+#: readelf.c:13191
#, c-format
msgid ""
"\n"
@@ -9884,49 +10054,49 @@ msgstr ""
"\n"
"I den länkade filen â€%sâ€: "
-#: readelf.c:12818
+#: readelf.c:13198
#, c-format
msgid "LTO Symbol table '%s' and extension table '%s' contain:\n"
msgstr "LTO-symboltabell â€%s†och utökningstabellen â€%s†innehÃ¥ller:\n"
-#: readelf.c:12823
+#: readelf.c:13203
#, c-format
msgid "LTO Symbol table '%s'\n"
msgstr "LTO-symboltabell â€%sâ€\n"
-#: readelf.c:12825
+#: readelf.c:13205
#, c-format
msgid " and extension table '%s' contain:\n"
msgstr " och utökningstabellen â€%s†innehÃ¥ller:\n"
-#: readelf.c:12830
+#: readelf.c:13210
#, c-format
msgid "LTO Symbol table '%s' contains:\n"
msgstr "LTO-symboltabellen â€%s†innehÃ¥ller:\n"
-#: readelf.c:12835
+#: readelf.c:13215
#, c-format
msgid " Comdat_Key Kind Visibility Size Slot Type Section Name\n"
msgstr " Comdat-nyckel Sort Synlighet Storlek Fack Typ Sektion Namn\n"
-#: readelf.c:12837
+#: readelf.c:13217
#, c-format
msgid " Comdat_Key Kind Visibility Size Slot Name\n"
msgstr " Comdat-nyckel Sort Synlighet Storlek Fack Namn\n"
-#: readelf.c:12884
+#: readelf.c:13264
msgid "Ran out of LTO symbol extension data\n"
msgstr "Fick slut på LTO-symbolutökningsdata\n"
-#: readelf.c:12904
+#: readelf.c:13284
msgid "Data remains in the LTO symbol extension table\n"
msgstr "Data återstår i LTO-symbolutökningstabellen\n"
-#: readelf.c:12914
+#: readelf.c:13294
msgid "Buffer overrun encountered whilst decoding LTO symbol table\n"
msgstr "Bufferöverskridande påträffades under avkodning av LTO-symboltabellen\n"
-#: readelf.c:12966
+#: readelf.c:13346
#, c-format
msgid ""
"\n"
@@ -9941,7 +10111,7 @@ msgstr[1] ""
"\n"
"I den länkade filen â€%s†innehÃ¥ller den dynamiska symboltabellen %lu poster:\n"
-#: readelf.c:12974
+#: readelf.c:13354
#, c-format
msgid ""
"\n"
@@ -9956,17 +10126,17 @@ msgstr[1] ""
"\n"
"Symboltabellen för avbild innehåller %lu poster:\n"
-#: readelf.c:12980 readelf.c:13033
+#: readelf.c:13360 readelf.c:13413
#, c-format
msgid " Num: Value Size Type Bind Vis Ndx Name\n"
msgstr " Nr: Värde Strl Typ Bind Synl Idx Namn\n"
-#: readelf.c:12982 readelf.c:13035
+#: readelf.c:13362 readelf.c:13415
#, c-format
msgid " Num: Value Size Type Bind Vis Ndx Name\n"
msgstr " Nr: Värde Strl Typ Bind Synl Idx Namn\n"
-#: readelf.c:13011
+#: readelf.c:13391
#, c-format
msgid ""
"\n"
@@ -9975,7 +10145,7 @@ msgstr ""
"\n"
"Symboltabellen â€%s†har en sh_entsize pÃ¥ noll!\n"
-#: readelf.c:13019
+#: readelf.c:13399
#, c-format
msgid ""
"\n"
@@ -9990,7 +10160,7 @@ msgstr[1] ""
"\n"
"I den länkade filen â€%s†innehÃ¥ller â€%s†%lu poster:\n"
-#: readelf.c:13026
+#: readelf.c:13406
#, c-format
msgid ""
"\n"
@@ -10005,7 +10175,7 @@ msgstr[1] ""
"\n"
"Symboltabell â€%s†innehÃ¥ller %lu poster:\n"
-#: readelf.c:13069
+#: readelf.c:13449
#, c-format
msgid ""
"\n"
@@ -10014,7 +10184,7 @@ msgstr ""
"\n"
"Informationen om dynamiska symboler är inte tillgänglig för att visa symboler.\n"
-#: readelf.c:13082
+#: readelf.c:13462
#, c-format
msgid ""
"\n"
@@ -10029,24 +10199,24 @@ msgstr[1] ""
"\n"
"Histogram över hinkarnas listlängd (totalt %lu hinkar):\n"
-#: readelf.c:13093
+#: readelf.c:13473
msgid "Out of memory allocating space for histogram buckets\n"
msgstr "Slut på minne vid allokering av utrymme för histogramhinkar\n"
-#: readelf.c:13099 readelf.c:13177
+#: readelf.c:13479 readelf.c:13557
#, c-format
msgid " Length Number %% of total Coverage\n"
msgstr " Längd Nummer %% av alla Täckning\n"
-#: readelf.c:13109
+#: readelf.c:13489
msgid "histogram chain is corrupt\n"
msgstr "histogramkedjan är trasig\n"
-#: readelf.c:13121
+#: readelf.c:13501
msgid "Out of memory allocating space for histogram counts\n"
msgstr "Slut på minne vid allokering utrymme för histogramräknare\n"
-#: readelf.c:13161
+#: readelf.c:13541
#, c-format
msgid ""
"\n"
@@ -10061,15 +10231,15 @@ msgstr[1] ""
"\n"
"Histogram över â€%sâ€-hinkarnas listlängd (totalt %lu hinkar):\n"
-#: readelf.c:13173
+#: readelf.c:13553
msgid "Out of memory allocating space for gnu histogram buckets\n"
msgstr "Slut på minne vid allokering utrymme för gnu histogramhinkar\n"
-#: readelf.c:13200
+#: readelf.c:13580
msgid "Out of memory allocating space for gnu histogram counts\n"
msgstr "Slut på minne vid allokering av utrymme för gnu histogramräknare\n"
-#: readelf.c:13266
+#: readelf.c:13646
#, c-format
msgid ""
"\n"
@@ -10084,7 +10254,7 @@ msgstr[1] ""
"\n"
"I den länkade filen â€%s†innehÃ¥ller segmentet med dynamisk information pÃ¥ avstÃ¥nd 0x%lx %d poster:\n"
-#: readelf.c:13273
+#: readelf.c:13653
#, c-format
msgid ""
"\n"
@@ -10099,101 +10269,101 @@ msgstr[1] ""
"\n"
"Dynamiskt info-segment på offset 0x%lx innehåller %d poster:\n"
-#: readelf.c:13281
+#: readelf.c:13661
#, c-format
msgid " Num: Name BoundTo Flags\n"
msgstr " Nr: Namn Bind till Flagg\n"
-#: readelf.c:13288
+#: readelf.c:13668
#, c-format
msgid "<corrupt index>"
msgstr "<trasigt index>"
-#: readelf.c:13293
+#: readelf.c:13673
#, c-format
msgid "<corrupt: %19ld>"
msgstr "<trasig: %19ld>"
-#: readelf.c:13390
+#: readelf.c:13770
#, c-format
msgid "MSP430 SYM_DIFF reloc contains invalid symbol index %lu\n"
msgstr "MSP430 SYM_DIFF-omlokalisering innehåller ett felaktigt symbolindex %lu\n"
-#: readelf.c:13437
+#: readelf.c:13817
#, c-format
msgid "MSP430 ULEB128 field at 0x%lx contains invalid ULEB128 value\n"
msgstr "MSP430 ULEB128 fält vid 0x%lx innehåller ett ogiltigt ULEB128-värde\n"
-#: readelf.c:13441
+#: readelf.c:13821
#, c-format
msgid "MSP430 reloc contains invalid symbol index %lu\n"
msgstr "MSP430-omlokalisering innehåller ett felaktigt symbolindex %lu\n"
#. PR 21137
-#: readelf.c:13452
+#: readelf.c:13832
#, c-format
msgid "MSP430 sym diff reloc contains invalid offset: 0x%lx\n"
msgstr "MSP430 symbolskillnadsomlokalisering innehåller ett felaktigt avstånd: 0x%lx\n"
-#: readelf.c:13463
+#: readelf.c:13843
msgid "Unhandled MSP430 reloc type found after SYM_DIFF reloc\n"
msgstr "Ej hanterad MSP430-omlokaliseringstyp hittad efter SYM_DIFF-omlokalisering\n"
-#: readelf.c:13486
+#: readelf.c:13866
#, c-format
msgid "MN10300_SYM_DIFF reloc contains invalid symbol index %lu\n"
msgstr "MN10300_SYM_DIFF-omlokalisering innehåller ett felaktigt symbolindex %lu\n"
-#: readelf.c:13500
+#: readelf.c:13880
#, c-format
msgid "MN10300 reloc contains invalid symbol index %lu\n"
msgstr "MN10300-omlokalisering innehåller ett felaktigt symbolindex %lu\n"
-#: readelf.c:13510
+#: readelf.c:13890
#, c-format
msgid "MN10300 sym diff reloc contains invalid offset: 0x%lx\n"
msgstr "MN10300-symbolskillnadsomlokalisering innehåller ett felaktigt avstånd: 0x%lx\n"
-#: readelf.c:13520
+#: readelf.c:13900
msgid "Unhandled MN10300 reloc type found after SYM_DIFF reloc\n"
msgstr "Ej hanterad MN10300-omlokaliseringstyp hittad efter SYM_DIFF-omlokalisering\n"
-#: readelf.c:13543
+#: readelf.c:13923
#, c-format
msgid "RL78_SYM reloc contains invalid symbol index %lu\n"
msgstr "RL78_SYM-omlokalisering innehåller ett felaktigt symbolindex %lu\n"
-#: readelf.c:13562 readelf.c:13571
+#: readelf.c:13942 readelf.c:13951
#, c-format
msgid "RL78 sym diff reloc contains invalid offset: 0x%lx\n"
msgstr "RL78-symbolskillnadsomlokalisering innehåller ett felaktigt avstånd: 0x%lx\n"
-#: readelf.c:13790
+#: readelf.c:14172
#, c-format
msgid "Missing knowledge of 32-bit reloc types used in DWARF sections of machine number %d\n"
msgstr "Saknad kunskap om 32-bitars omlokaliseringstyper använda i DWARF-sektioner för maskin nummer %d\n"
-#: readelf.c:14473
+#: readelf.c:14857
#, c-format
msgid "unable to apply unsupported reloc type %d to section %s\n"
msgstr "kan inte använda ej stödd omlokaliseringstyp %d till sektionen %s\n"
-#: readelf.c:14482
+#: readelf.c:14866
#, c-format
msgid "skipping invalid relocation offset 0x%lx in section %s\n"
msgstr "hoppar över felaktigt omlokaliseringsavstånd 0x%lx i sektionen %s\n"
-#: readelf.c:14491
+#: readelf.c:14875
#, c-format
msgid "skipping invalid relocation symbol index 0x%lx in section %s\n"
msgstr "hoppar över felaktigt omlokaliseringssymbolindex 0x%lx i sektionen %s\n"
-#: readelf.c:14514
+#: readelf.c:14898
#, c-format
msgid "skipping unexpected symbol type %s in section %s relocation %ld\n"
msgstr "hoppar över oväntad symboltyp %s i sektionen %s omlokalisering %ld\n"
-#: readelf.c:14591
+#: readelf.c:14975
#, c-format
msgid ""
"\n"
@@ -10202,16 +10372,16 @@ msgstr ""
"\n"
"Disassembleringsutskrift av sektion %s\n"
-#: readelf.c:14609
+#: readelf.c:14993
#, c-format
msgid "Section '%s' has no data to dump.\n"
msgstr "Sektion â€%s†har ingen data att skriva ut.\n"
-#: readelf.c:14615
+#: readelf.c:14999
msgid "section contents"
msgstr "sektionsinnehåll"
-#: readelf.c:14691
+#: readelf.c:15075
#, c-format
msgid ""
"\n"
@@ -10220,7 +10390,7 @@ msgstr ""
"\n"
"Strängutskrift av sektion â€%s†i den länkade filen %s:\n"
-#: readelf.c:14695
+#: readelf.c:15079
#, c-format
msgid ""
"\n"
@@ -10229,33 +10399,33 @@ msgstr ""
"\n"
"Strängutskrift av sektion â€%sâ€:\n"
-#: readelf.c:14716 readelf.c:14932 readelf.c:15355
+#: readelf.c:15100 readelf.c:15316 readelf.c:15703
#, c-format
msgid "section '%s' has unsupported compress type: %d\n"
msgstr "sektionen â€%s†har en komprimeringstyp som inte stödjs: %d\n"
-#: readelf.c:14748 readelf.c:14966 readelf.c:15392
+#: readelf.c:15132 readelf.c:15350 readelf.c:15740
#, c-format
msgid "Unable to decompress section %s\n"
msgstr "Kan inte dekomprimera sektionen %s\n"
-#: readelf.c:14773
+#: readelf.c:15157
#, c-format
msgid " Note: This section has relocations against it, but these have NOT been applied to this dump.\n"
msgstr " Observera: Denna sektion har omlokaliseringar mot sig, men dessa har INTE tillämpats på denna dump.\n"
-#: readelf.c:14866 readelf.c:16353 readelf.c:16393 readelf.c:16431
-#: readelf.c:16478 readelf.c:16509 readelf.c:18113 readelf.c:18145
+#: readelf.c:15250 readelf.c:16726 readelf.c:16766 readelf.c:16804
+#: readelf.c:16851 readelf.c:16882 readelf.c:18488 readelf.c:18520
#, c-format
msgid "<corrupt>\n"
msgstr "<trasig>\n"
-#: readelf.c:14874
+#: readelf.c:15258
#, c-format
msgid " No strings found in this section."
msgstr " Det fanns inga strängar i denna sektion."
-#: readelf.c:14907
+#: readelf.c:15291
#, c-format
msgid ""
"\n"
@@ -10264,7 +10434,7 @@ msgstr ""
"\n"
"Hexadecimal utskrift av sektion â€%s†av den länkade filen %s:\n"
-#: readelf.c:14911
+#: readelf.c:15295
#, c-format
msgid ""
"\n"
@@ -10273,45 +10443,36 @@ msgstr ""
"\n"
"Hexadecimal utskrift av sektion â€%sâ€:\n"
-#: readelf.c:14999
+#: readelf.c:15383
#, c-format
msgid " NOTE: This section has relocations against it, but these have NOT been applied to this dump.\n"
msgstr " OBSERVERA: Denna sektion har omlokaliseringar mot sig, men dessa har INTE tillämpats på denna dump.\n"
-#: readelf.c:15144
+#: readelf.c:15525
#, c-format
msgid "Iteration failed: %s, %s\n"
msgstr "Iterationen misslyckades: %s, %s\n"
-#: readelf.c:15190
+#: readelf.c:15569
#, c-format
msgid "No symbol section named %s\n"
msgstr "Ingen symbolsetkon med namnet %s\n"
-#: readelf.c:15206
+#: readelf.c:15585
#, c-format
msgid "No string table section named %s\n"
msgstr "Ingen strängtabellsektion med namnet %s\n"
-#: readelf.c:15213
+#: readelf.c:15592
msgid "strings"
msgstr "strängar"
-#: readelf.c:15223
-#, c-format
-msgid "No CTF parent section named %s\n"
-msgstr "Ingen CTF-föräldersektion med namnet %s\n"
-
-#: readelf.c:15229
-msgid "CTF parent"
-msgstr "CTF-förälder"
-
-#: readelf.c:15242 readelf.c:15255 readelf.c:15269
+#: readelf.c:15605 readelf.c:15617
#, c-format
msgid "CTF open failure: %s\n"
msgstr "CTF-öppningsfel: %s\n"
-#: readelf.c:15276
+#: readelf.c:15624
#, c-format
msgid ""
"\n"
@@ -10320,7 +10481,7 @@ msgstr ""
"\n"
"Utskrift av CTF-sektionen â€%s†i den länkade filen %s:\n"
-#: readelf.c:15280
+#: readelf.c:15628
#, c-format
msgid ""
"\n"
@@ -10329,27 +10490,27 @@ msgstr ""
"\n"
"Utskrift av CTF-sektionen â€%sâ€:\n"
-#: readelf.c:15286
+#: readelf.c:15636
#, c-format
msgid "CTF member open failure: %s\n"
msgstr "Misslyckande av öppning av CTF-medlem: %s\n"
-#: readelf.c:15319
+#: readelf.c:15667
#, c-format
msgid "%s section data"
msgstr "sektionsdata för %s"
-#: readelf.c:15342
+#: readelf.c:15690
#, c-format
msgid "compressed section %s is too small to contain a compression header\n"
msgstr "den komprimerade sektionen %s är för liten för att innehålla ett komprimeringshuvud\n"
-#: readelf.c:15468 readelf.c:15495 readelf.c:15520
+#: readelf.c:15816 readelf.c:15843 readelf.c:15868
#, c-format
msgid "malformed note encountered in section %s whilst scanning for build-id note\n"
msgstr "felformad notering upptäckt i sektionen %s vid skanning efter en build-id-notering\n"
-#: readelf.c:15644
+#: readelf.c:15993
#, c-format
msgid ""
"\n"
@@ -10362,503 +10523,503 @@ msgstr ""
#. which has the NOBITS type - the bits in the file will be random.
#. This can happen when a file containing a .eh_frame section is
#. stripped with the --only-keep-debug command line option.
-#: readelf.c:15653
+#: readelf.c:16002
#, c-format
msgid "section '%s' has the NOBITS type - its contents are unreliable.\n"
msgstr "sektionen â€%s†har typen NOBITS — dess innehÃ¥ll är opÃ¥litligt.\n"
-#: readelf.c:15703
+#: readelf.c:16052
#, c-format
msgid "Unrecognized debug section: %s\n"
msgstr "Okänd felsökningssektion: %s\n"
-#: readelf.c:15732
+#: readelf.c:16082
#, c-format
msgid "Section '%s' was not dumped because it does not exist\n"
msgstr "Sektionen â€%s†skrevs inte ut eftersom den inte finns\n"
-#: readelf.c:15805
+#: readelf.c:16155
#, c-format
msgid "Section %d was not dumped because it does not exist!\n"
msgstr "Sektion %d skrevs inte ut eftersom den inte finns!\n"
-#: readelf.c:15861
+#: readelf.c:16211
msgid "<corrupt tag>\n"
msgstr "<trasig tagg>\n"
-#: readelf.c:15876
+#: readelf.c:16226
#, c-format
msgid "<corrupt string tag>"
msgstr "<trasig strängtabellstagg>"
-#: readelf.c:15910
+#: readelf.c:16260
#, c-format
msgid "Absent/Non standard\n"
msgstr "Frånvarande/ickestandard\n"
-#: readelf.c:15913
+#: readelf.c:16263
#, c-format
msgid "Bare metal/mwdt\n"
msgstr "Ren metall/mwdt\n"
-#: readelf.c:15916
+#: readelf.c:16266
#, c-format
msgid "Bare metal/newlib\n"
msgstr "Ren metall/newlib\n"
-#: readelf.c:15919
+#: readelf.c:16269
#, c-format
msgid "Linux/uclibc\n"
msgstr "Linux/uclibc\n"
-#: readelf.c:15922
+#: readelf.c:16272
#, c-format
msgid "Linux/glibc\n"
msgstr "Linux/glibc\n"
-#: readelf.c:15925 readelf.c:16004
+#: readelf.c:16275 readelf.c:16354
#, c-format
msgid "Unknown\n"
msgstr "Okänd\n"
-#: readelf.c:15937 readelf.c:15967 readelf.c:15995
+#: readelf.c:16287 readelf.c:16317 readelf.c:16345
#, c-format
msgid "Absent\n"
msgstr "Frånvarande\n"
-#: readelf.c:15979
+#: readelf.c:16329
msgid "yes"
msgstr "ja"
-#: readelf.c:15979
+#: readelf.c:16329
msgid "no"
msgstr "nej"
-#: readelf.c:16016 readelf.c:16023
+#: readelf.c:16366 readelf.c:16373
msgid "default"
msgstr "standard"
-#: readelf.c:16017
+#: readelf.c:16367
msgid "smallest"
msgstr "minsta"
-#: readelf.c:16022
+#: readelf.c:16372
msgid "OPTFP"
msgstr "OPTFP"
-#: readelf.c:16220 readelf.c:16233 readelf.c:16251 readelf.c:16772
-#: readelf.c:17051 readelf.c:17063 readelf.c:17075
+#: readelf.c:16593 readelf.c:16606 readelf.c:16624 readelf.c:17145
+#: readelf.c:17424 readelf.c:17436 readelf.c:17448
#, c-format
msgid "None\n"
msgstr "Ingen\n"
-#: readelf.c:16221
+#: readelf.c:16594
#, c-format
msgid "Application\n"
msgstr "Program\n"
-#: readelf.c:16222
+#: readelf.c:16595
#, c-format
msgid "Realtime\n"
msgstr "Realtid\n"
-#: readelf.c:16223
+#: readelf.c:16596
#, c-format
msgid "Microcontroller\n"
msgstr "Mikrokontroll\n"
-#: readelf.c:16224
+#: readelf.c:16597
#, c-format
msgid "Application or Realtime\n"
msgstr "Program eller realtid\n"
-#: readelf.c:16234 readelf.c:16253 readelf.c:16824 readelf.c:16841
-#: readelf.c:16912 readelf.c:16932 readelf.c:19716
+#: readelf.c:16607 readelf.c:16626 readelf.c:17197 readelf.c:17214
+#: readelf.c:17285 readelf.c:17305 readelf.c:20136
#, c-format
msgid "8-byte\n"
msgstr "8-byte\n"
-#: readelf.c:16235 readelf.c:16915 readelf.c:16935 readelf.c:19715
+#: readelf.c:16608 readelf.c:17288 readelf.c:17308 readelf.c:20135
#, c-format
msgid "4-byte\n"
msgstr "4-byte\n"
-#: readelf.c:16239 readelf.c:16257
+#: readelf.c:16612 readelf.c:16630
#, c-format
msgid "8-byte and up to %d-byte extended\n"
msgstr "8-byte och upp till %d-byte utökad\n"
-#: readelf.c:16252
+#: readelf.c:16625
#, c-format
msgid "8-byte, except leaf SP\n"
msgstr "8-byte, utom löv-SP\n"
-#: readelf.c:16268 readelf.c:16350 readelf.c:16950
+#: readelf.c:16641 readelf.c:16723 readelf.c:17323
#, c-format
msgid "flag = %d, vendor = "
msgstr "flagga = %d, leverantör = "
-#: readelf.c:16289
+#: readelf.c:16662
#, c-format
msgid "True\n"
msgstr "Sant\n"
-#: readelf.c:16309
+#: readelf.c:16682
#, c-format
msgid "<unknown: %d>\n"
msgstr "<okänd: %d>\n"
-#: readelf.c:16354
+#: readelf.c:16727
msgid "corrupt vendor attribute\n"
msgstr "trasigt leverantörsattribut\n"
-#: readelf.c:16404
+#: readelf.c:16777
#, c-format
msgid "unspecified hard/soft float\n"
msgstr "ospecificerade hårda/mjuka flyttal\n"
-#: readelf.c:16407
+#: readelf.c:16780
#, c-format
msgid "hard float\n"
msgstr "hårda flyttal\n"
-#: readelf.c:16410
+#: readelf.c:16783
#, c-format
msgid "soft float\n"
msgstr "mjuka flyttal\n"
-#: readelf.c:16442
+#: readelf.c:16815
#, c-format
msgid "unspecified hard/soft float, "
msgstr "ospecificerade hårda/mjuka flyttal, "
-#: readelf.c:16445
+#: readelf.c:16818
#, c-format
msgid "hard float, "
msgstr "hårda flyttal, "
-#: readelf.c:16448
+#: readelf.c:16821
#, c-format
msgid "soft float, "
msgstr "mjuka flyttal, "
-#: readelf.c:16451
+#: readelf.c:16824
#, c-format
msgid "single-precision hard float, "
msgstr "enkelprecisions hårda flyttal, "
-#: readelf.c:16458
+#: readelf.c:16831
#, c-format
msgid "unspecified long double\n"
msgstr "ospecificerade långa dubbla\n"
-#: readelf.c:16461
+#: readelf.c:16834
#, c-format
msgid "128-bit IBM long double\n"
msgstr "128-bitars IBM långa dubbla\n"
-#: readelf.c:16464
+#: readelf.c:16837
#, c-format
msgid "64-bit long double\n"
msgstr "64-bitars lång dubbel\n"
-#: readelf.c:16467
+#: readelf.c:16840
#, c-format
msgid "128-bit IEEE long double\n"
msgstr "128-bitars IEEE långa dubbla\n"
-#: readelf.c:16489 readelf.c:16520
+#: readelf.c:16862 readelf.c:16893
#, c-format
msgid "unspecified\n"
msgstr "ospecificerad\n"
-#: readelf.c:16492
+#: readelf.c:16865
#, c-format
msgid "generic\n"
msgstr "allmän\n"
-#: readelf.c:16526
+#: readelf.c:16899
#, c-format
msgid "memory\n"
msgstr "minne\n"
-#: readelf.c:16553
+#: readelf.c:16926
#, c-format
msgid "any\n"
msgstr "vilken som helst\n"
-#: readelf.c:16556
+#: readelf.c:16929
#, c-format
msgid "software\n"
msgstr "programvara\n"
-#: readelf.c:16559
+#: readelf.c:16932
#, c-format
msgid "hardware\n"
msgstr "hårdvara\n"
-#: readelf.c:16682
+#: readelf.c:17055
#, c-format
msgid "Hard or soft float\n"
msgstr "HÃ¥rda eller mjuka flyttal\n"
-#: readelf.c:16685
+#: readelf.c:17058
#, c-format
msgid "Hard float (double precision)\n"
msgstr "HÃ¥rda flyttal (dubbel precision)\n"
-#: readelf.c:16688
+#: readelf.c:17061
#, c-format
msgid "Hard float (single precision)\n"
msgstr "HÃ¥rda flyttal (enkel precision)\n"
-#: readelf.c:16691
+#: readelf.c:17064
#, c-format
msgid "Soft float\n"
msgstr "Mjuka flyttal\n"
-#: readelf.c:16694
+#: readelf.c:17067
#, c-format
msgid "Hard float (MIPS32r2 64-bit FPU 12 callee-saved)\n"
msgstr "HÃ¥rda flyttal (MIPS32r2 64-bitars FPU 12 anropssparad)\n"
-#: readelf.c:16697
+#: readelf.c:17070
#, c-format
msgid "Hard float (32-bit CPU, Any FPU)\n"
msgstr "HÃ¥rda flyttal (32-bitars CPU, godtycklig FPU)\n"
-#: readelf.c:16700
+#: readelf.c:17073
#, c-format
msgid "Hard float (32-bit CPU, 64-bit FPU)\n"
msgstr "HÃ¥rda flyttal (32-bitars CPU, 64-bitars FPU)\n"
-#: readelf.c:16703
+#: readelf.c:17076
#, c-format
msgid "Hard float compat (32-bit CPU, 64-bit FPU)\n"
msgstr "HÃ¥rda flyttalskompatibilitet (32-bitars CPU, 64-bitars FPU)\n"
-#: readelf.c:16706
+#: readelf.c:17079
#, c-format
msgid "NaN 2008 compatibility\n"
msgstr "NaN 2008-kompatibilitet\n"
-#: readelf.c:16739
+#: readelf.c:17112
#, c-format
msgid "Any MSA or not\n"
msgstr "Godtycklig MSA eller ingen\n"
-#: readelf.c:16742
+#: readelf.c:17115
#, c-format
msgid "128-bit MSA\n"
msgstr "128-bitars MSA\n"
-#: readelf.c:16804
+#: readelf.c:17177
#, c-format
msgid "Not used\n"
msgstr "Inte använt\n"
-#: readelf.c:16807
+#: readelf.c:17180
#, c-format
msgid "2 bytes\n"
msgstr "2 byte\n"
-#: readelf.c:16810
+#: readelf.c:17183
#, c-format
msgid "4 bytes\n"
msgstr "4 byte\n"
-#: readelf.c:16827 readelf.c:16844 readelf.c:16918 readelf.c:16938
+#: readelf.c:17200 readelf.c:17217 readelf.c:17291 readelf.c:17311
#, c-format
msgid "16-byte\n"
msgstr "16 byte\n"
-#: readelf.c:16858
+#: readelf.c:17231
#, c-format
msgid "DSBT addressing not used\n"
msgstr "DSBT-adressering används inte\n"
-#: readelf.c:16861
+#: readelf.c:17234
#, c-format
msgid "DSBT addressing used\n"
msgstr "DSBT-adressering används\n"
-#: readelf.c:16875
+#: readelf.c:17248
#, c-format
msgid "Data addressing position-dependent\n"
msgstr "Dataadressering positionsberoende\n"
-#: readelf.c:16878
+#: readelf.c:17251
#, c-format
msgid "Data addressing position-independent, GOT near DP\n"
msgstr "Dataadressering positionsoberoende, GOT nära DP\n"
-#: readelf.c:16881
+#: readelf.c:17254
#, c-format
msgid "Data addressing position-independent, GOT far from DP\n"
msgstr "Dataadressering positionsoberoende, GOT långt från DP\n"
-#: readelf.c:16895
+#: readelf.c:17268
#, c-format
msgid "Code addressing position-dependent\n"
msgstr "Kodadressering positionsberoende\n"
-#: readelf.c:16898
+#: readelf.c:17271
#, c-format
msgid "Code addressing position-independent\n"
msgstr "Kodadressering positionsoberoende\n"
-#: readelf.c:17052
+#: readelf.c:17425
#, c-format
msgid "MSP430\n"
msgstr "MSP430\n"
-#: readelf.c:17053
+#: readelf.c:17426
#, c-format
msgid "MSP430X\n"
msgstr "MSP430X\n"
-#: readelf.c:17064 readelf.c:17076
+#: readelf.c:17437 readelf.c:17449
#, c-format
msgid "Small\n"
msgstr "Liten\n"
-#: readelf.c:17065 readelf.c:17077
+#: readelf.c:17438 readelf.c:17450
#, c-format
msgid "Large\n"
msgstr "Stor\n"
-#: readelf.c:17078
+#: readelf.c:17451
#, c-format
msgid "Restricted Large\n"
msgstr "Begränsad stor\n"
-#: readelf.c:17084
+#: readelf.c:17457
#, c-format
msgid " <unknown tag %d>: "
msgstr " <okänd tagg %d>: "
-#: readelf.c:17130
+#: readelf.c:17503
#, c-format
msgid "Any Region\n"
msgstr "Godtycklig region\n"
-#: readelf.c:17133
+#: readelf.c:17506
#, c-format
msgid "Lower Region Only\n"
msgstr "Endast nedre region\n"
-#: readelf.c:17192
+#: readelf.c:17565
#, c-format
msgid "%u\n"
msgstr "%u\n"
-#: readelf.c:17199
+#: readelf.c:17572
#, c-format
msgid "No unaligned access\n"
msgstr "Ingen ojusterad åtkomst\n"
-#: readelf.c:17202
+#: readelf.c:17575
#, c-format
msgid "Unaligned access\n"
msgstr "Ojusterad åtkomst\n"
-#: readelf.c:17208
+#: readelf.c:17581
#, c-format
msgid "%u-bytes\n"
msgstr "%u-byte\n"
-#: readelf.c:17347
+#: readelf.c:17723
msgid "attributes"
msgstr "attribut"
-#: readelf.c:17359
+#: readelf.c:17735
#, c-format
msgid "Unknown attributes version '%c'(%d) - expecting 'A'\n"
msgstr "Okänd attributversion â€%câ€(%d) — â€A†förväntades\n"
-#: readelf.c:17378
+#: readelf.c:17754
msgid "Tag section ends prematurely\n"
msgstr "Sektionen slutar för tidigt\n"
-#: readelf.c:17387
+#: readelf.c:17763
#, c-format
msgid "Bad attribute length (%u > %u)\n"
msgstr "Felaktig attributlängd (%u > %u)\n"
-#: readelf.c:17395
+#: readelf.c:17771
#, c-format
msgid "Attribute length of %u is too small\n"
msgstr "Attributlängden på %u är för liten\n"
-#: readelf.c:17406
+#: readelf.c:17782
msgid "Corrupt attribute section name\n"
msgstr "Trasigt attributsektionsnamn\n"
-#: readelf.c:17411
+#: readelf.c:17787
#, c-format
msgid "Attribute Section: "
msgstr "Attributsektion: "
-#: readelf.c:17438
+#: readelf.c:17814
msgid "Unused bytes at end of section\n"
msgstr "Oanvända byte i slutet av sektionen\n"
-#: readelf.c:17448
+#: readelf.c:17824
#, c-format
msgid "Bad subsection length (%u > %u)\n"
msgstr "Felaktig delsektionslängd (%u > %u)\n"
-#: readelf.c:17456
+#: readelf.c:17832
#, c-format
msgid "Bad subsection length (%u < 6)\n"
msgstr "Felaktig delsektionslängd (%u < 6)\n"
-#: readelf.c:17471
+#: readelf.c:17847
#, c-format
msgid "File Attributes\n"
msgstr "Filattribut\n"
-#: readelf.c:17474
+#: readelf.c:17850
#, c-format
msgid "Section Attributes:"
msgstr "Sektionsattribut:"
-#: readelf.c:17477
+#: readelf.c:17853
#, c-format
msgid "Symbol Attributes:"
msgstr "Symbolattribut:"
-#: readelf.c:17490
+#: readelf.c:17866
#, c-format
msgid "Unknown tag: %d\n"
msgstr "Okänd tagg: %d\n"
-#: readelf.c:17511
+#: readelf.c:17887
#, c-format
msgid " Unknown attribute:\n"
msgstr " Okänt attribut:\n"
-#: readelf.c:17553
+#: readelf.c:17929
msgid "MIPS GOT entry extends beyond the end of available data\n"
msgstr "MIPS GOT-post sträcker sig bortom slutet på tillgängliga data\n"
-#: readelf.c:17636 readelf.c:17705
+#: readelf.c:18012 readelf.c:18081
msgid "Unknown"
msgstr "Okänd"
-#: readelf.c:17752
+#: readelf.c:18128
msgid "Corrupt MIPS ABI Flags section.\n"
msgstr "Trasig MIPS ABI-flaggsektion.\n"
-#: readelf.c:17758
+#: readelf.c:18134
msgid "MIPS ABI Flags section"
msgstr "MIPS ABI-flaggsektion"
-#: readelf.c:17817 readelf.c:18400
+#: readelf.c:18193 readelf.c:18775
msgid "Global Offset Table data"
msgstr "Global avståndstabellsdata"
-#: readelf.c:17821
+#: readelf.c:18197
#, c-format
msgid ""
"\n"
@@ -10867,45 +11028,45 @@ msgstr ""
"\n"
"Statisk GOT:\n"
-#: readelf.c:17822 readelf.c:18405
+#: readelf.c:18198 readelf.c:18780
#, c-format
msgid " Canonical gp value: "
msgstr " Kanoniskt gp-värde: "
-#: readelf.c:17836 readelf.c:18409 readelf.c:18539
+#: readelf.c:18212 readelf.c:18784 readelf.c:18914
#, c-format
msgid " Reserved entries:\n"
msgstr " Reserverade poster:\n"
-#: readelf.c:17837
+#: readelf.c:18213
#, c-format
msgid " %*s %10s %*s\n"
msgstr " %*s %10s %*s\n"
-#: readelf.c:17838 readelf.c:17868 readelf.c:18411 readelf.c:18439
-#: readelf.c:18457 readelf.c:18541 readelf.c:18550
+#: readelf.c:18214 readelf.c:18244 readelf.c:18786 readelf.c:18814
+#: readelf.c:18832 readelf.c:18916 readelf.c:18925
msgid "Address"
msgstr "Adress"
-#: readelf.c:17838 readelf.c:17868 readelf.c:18411 readelf.c:18439
-#: readelf.c:18458
+#: readelf.c:18214 readelf.c:18244 readelf.c:18786 readelf.c:18814
+#: readelf.c:18833
msgid "Access"
msgstr "Ã…tkomst"
-#: readelf.c:17839 readelf.c:17869
+#: readelf.c:18215 readelf.c:18245
msgid "Value"
msgstr "Värde"
-#: readelf.c:17866 readelf.c:18437
+#: readelf.c:18242 readelf.c:18812
#, c-format
msgid " Local entries:\n"
msgstr " Lokala poster:\n"
-#: readelf.c:17948 readelf.c:18656
+#: readelf.c:18324 readelf.c:19031
msgid "liblist section data"
msgstr "liblist sektionsdata"
-#: readelf.c:17951
+#: readelf.c:18327
#, c-format
msgid ""
"\n"
@@ -10920,37 +11081,37 @@ msgstr[1] ""
"\n"
"Sektionen â€.liblist†innehÃ¥ller %lu poster:\n"
-#: readelf.c:17955
+#: readelf.c:18331
msgid " Library Time Stamp Checksum Version Flags\n"
msgstr " Bibliotek Tidsstämpel Kontr.sum. Version Flaggor\n"
-#: readelf.c:17981
+#: readelf.c:18357
#, c-format
msgid "<corrupt: %9ld>"
msgstr "<trasig: %9ld>"
-#: readelf.c:17986
+#: readelf.c:18362
msgid " NONE"
msgstr " INGA"
-#: readelf.c:18037
+#: readelf.c:18412
msgid "No MIPS_OPTIONS header found\n"
msgstr "Inget MIPS_OPTIONS-huvud hittades\n"
-#: readelf.c:18043
+#: readelf.c:18418
msgid "The MIPS options section is too small.\n"
msgstr "MIPS-alternativsektionen är för liten.\n"
-#: readelf.c:18048
+#: readelf.c:18423
msgid "options"
msgstr "flaggor"
-#: readelf.c:18067
+#: readelf.c:18442
#, c-format
msgid "Invalid size (%u) for MIPS option\n"
msgstr "felaktig storlek (%u) för MIPS-alternativ\n"
-#: readelf.c:18076
+#: readelf.c:18451
#, c-format
msgid ""
"\n"
@@ -10965,28 +11126,28 @@ msgstr[1] ""
"\n"
"Sektionen â€%s†innehÃ¥ller %d poster:\n"
-#: readelf.c:18114 readelf.c:18146
+#: readelf.c:18489 readelf.c:18521
msgid "Truncated MIPS REGINFO option\n"
msgstr "Avhuggen MIPS REGINFO-flagga\n"
-#: readelf.c:18282
+#: readelf.c:18657
msgid "conflict list found without a dynamic symbol table\n"
msgstr "fann konfliktlista utan dynamisk symboltabell\n"
-#: readelf.c:18290
+#: readelf.c:18665
#, c-format
msgid "Overlarge number of conflicts detected: %lx\n"
msgstr "För stort antal konflikter upptäckta: %lx\n"
-#: readelf.c:18298
+#: readelf.c:18673
msgid "Out of memory allocating space for dynamic conflicts\n"
msgstr "Slut på minne vid allokering av utrymme för dynamiska konflikter\n"
-#: readelf.c:18308 readelf.c:18326
+#: readelf.c:18683 readelf.c:18701
msgid "conflict"
msgstr "konflikt"
-#: readelf.c:18339
+#: readelf.c:18714
#, c-format
msgid ""
"\n"
@@ -11001,31 +11162,31 @@ msgstr[1] ""
"\n"
"Sektionen â€.conflict†innehÃ¥ller %lu poster:\n"
-#: readelf.c:18343
+#: readelf.c:18718
msgid " Num: Index Value Name"
msgstr " Num: Index Värde Namn"
-#: readelf.c:18350
+#: readelf.c:18725
#, c-format
msgid "<corrupt symbol index>"
msgstr "<trasigt symbolindex>"
-#: readelf.c:18361 readelf.c:18487 readelf.c:18575
+#: readelf.c:18736 readelf.c:18862 readelf.c:18950
#, c-format
msgid "<corrupt: %14ld>"
msgstr "<trasig: %14ld>"
-#: readelf.c:18384
+#: readelf.c:18759
#, c-format
msgid "The GOT symbol offset (%lu) is greater than the symbol table size (%lu)\n"
msgstr "GOT-symbolavståndet (%lu) är större än symboltabellens storlek (%lu)\n"
-#: readelf.c:18393
+#: readelf.c:18768
#, c-format
msgid "Too many GOT symbols: %lu\n"
msgstr "För många GOT-symboler: %lu\n"
-#: readelf.c:18404
+#: readelf.c:18779
#, c-format
msgid ""
"\n"
@@ -11034,92 +11195,92 @@ msgstr ""
"\n"
"Primär GOT:\n"
-#: readelf.c:18410
+#: readelf.c:18785
#, c-format
msgid " %*s %10s %*s Purpose\n"
msgstr " %*s %10s %*s Syfte\n"
-#: readelf.c:18412 readelf.c:18440 readelf.c:18459 readelf.c:18541
-#: readelf.c:18551
+#: readelf.c:18787 readelf.c:18815 readelf.c:18834 readelf.c:18916
+#: readelf.c:18926
msgid "Initial"
msgstr "Initial"
-#: readelf.c:18414
+#: readelf.c:18789
#, c-format
msgid " Lazy resolver\n"
msgstr " Lat upplösare\n"
-#: readelf.c:18429
+#: readelf.c:18804
#, c-format
msgid " Module pointer (GNU extension)\n"
msgstr " Modulpekare (GNU-utökning)\n"
-#: readelf.c:18455
+#: readelf.c:18830
#, c-format
msgid " Global entries:\n"
msgstr " Globala poster:\n"
-#: readelf.c:18460 readelf.c:18552
+#: readelf.c:18835 readelf.c:18927
msgid "Sym.Val."
msgstr "Sym.Vär."
#. Note for translators: "Ndx" = abbreviated form of "Index".
-#: readelf.c:18463 readelf.c:18552
+#: readelf.c:18838 readelf.c:18927
msgid "Ndx"
msgstr "Idx"
-#: readelf.c:18463 readelf.c:18552
+#: readelf.c:18838 readelf.c:18927
msgid "Name"
msgstr "Namn"
-#: readelf.c:18473
+#: readelf.c:18848
#, c-format
msgid "<no dynamic symbols>"
msgstr "<inga dynamiska symboler>"
-#: readelf.c:18490
+#: readelf.c:18865
#, c-format
msgid "<symbol index %lu exceeds number of dynamic symbols>"
msgstr "<symbolindex %lu överstiger antalet dynamiska symboler>"
-#: readelf.c:18531
+#: readelf.c:18906
msgid "Procedure Linkage Table data"
msgstr "Processlänkningstabelldata"
-#: readelf.c:18540
+#: readelf.c:18915
#, c-format
msgid " %*s %*s Purpose\n"
msgstr " %*s %*s Syfte\n"
-#: readelf.c:18543
+#: readelf.c:18918
#, c-format
msgid " PLT lazy resolver\n"
msgstr " PLT lat upplösare\n"
-#: readelf.c:18545
+#: readelf.c:18920
#, c-format
msgid " Module pointer\n"
msgstr " Modulpekare\n"
-#: readelf.c:18548
+#: readelf.c:18923
#, c-format
msgid " Entries:\n"
msgstr " Poster:\n"
-#: readelf.c:18562
+#: readelf.c:18937
#, c-format
msgid "<corrupt symbol index: %lu>"
msgstr "<trasigt symbolindex: %lu>"
-#: readelf.c:18601
+#: readelf.c:18976
msgid "NDS32 elf flags section"
msgstr "NDS32 elf-flaggsektion"
-#: readelf.c:18667
+#: readelf.c:19042
msgid "liblist string table"
msgstr "liblist-strängtabell"
-#: readelf.c:18679
+#: readelf.c:19054
#, c-format
msgid ""
"\n"
@@ -11134,437 +11295,454 @@ msgstr[1] ""
"\n"
"Bibliotekslistsektionen â€%s†innehÃ¥ller %lu poster:\n"
-#: readelf.c:18685
+#: readelf.c:19060
msgid " Library Time Stamp Checksum Version Flags"
msgstr " Bibliotek Tidsstämpel Kontr.sum. Version Flaggor"
-#: readelf.c:18735
+#: readelf.c:19110
msgid "NT_AUXV (auxiliary vector)"
msgstr "NT_AUXV (extra vektor)"
-#: readelf.c:18737
+#: readelf.c:19112
msgid "NT_PRSTATUS (prstatus structure)"
msgstr "NT_PRSTATUS (prstatus-struktur)"
-#: readelf.c:18739
+#: readelf.c:19114
msgid "NT_FPREGSET (floating point registers)"
msgstr "NT_FPREGSET (flyttalsregister)"
-#: readelf.c:18741
+#: readelf.c:19116
msgid "NT_PRPSINFO (prpsinfo structure)"
msgstr "NT_PRPSINFO (prpsinfo-struktur)"
-#: readelf.c:18743
+#: readelf.c:19118
msgid "NT_TASKSTRUCT (task structure)"
msgstr "NT_TASKSTRUCT (task-struktur)"
-#: readelf.c:18745
+#: readelf.c:19120
msgid "NT_GDB_TDESC (GDB XML target description)"
msgstr "NT_GDB_TDESC (GDB XML-målbeskrivning)"
-#: readelf.c:18747
+#: readelf.c:19122
msgid "NT_PRXFPREG (user_xfpregs structure)"
msgstr "NT_PRXFPREG (user_xfpregs-struktur)"
-#: readelf.c:18749
+#: readelf.c:19124
msgid "NT_PPC_VMX (ppc Altivec registers)"
msgstr "NT_PPC_VMX (ppc Altivec-register)"
-#: readelf.c:18751
+#: readelf.c:19126
msgid "NT_PPC_VSX (ppc VSX registers)"
msgstr "NT_PPC_VSX (ppc VSX-register)"
-#: readelf.c:18753
+#: readelf.c:19128
msgid "NT_PPC_TAR (ppc TAR register)"
msgstr "NT_PPC_TAR (ppc TAR-register)"
-#: readelf.c:18755
+#: readelf.c:19130
msgid "NT_PPC_PPR (ppc PPR register)"
msgstr "NT_PPC_PPR (ppc PPR-register)"
-#: readelf.c:18757
+#: readelf.c:19132
msgid "NT_PPC_DSCR (ppc DSCR register)"
msgstr "NT_PPC_DSCR (ppc DSCR-register)"
-#: readelf.c:18759
+#: readelf.c:19134
msgid "NT_PPC_EBB (ppc EBB registers)"
msgstr "NT_PPC_EBB (ppc EBB-register)"
-#: readelf.c:18761
+#: readelf.c:19136
msgid "NT_PPC_PMU (ppc PMU registers)"
msgstr "NT_PPC_PMU (ppc PMU-register)"
-#: readelf.c:18763
+#: readelf.c:19138
msgid "NT_PPC_TM_CGPR (ppc checkpointed GPR registers)"
msgstr "NT_PPC_TM_CGPR (ppc GPR-register med kontrollpunkter)"
-#: readelf.c:18765
+#: readelf.c:19140
msgid "NT_PPC_TM_CFPR (ppc checkpointed floating point registers)"
msgstr "NT_PPC_TM_CFPR (ppc flyttalsregister med kontrollpunkter)"
-#: readelf.c:18767
+#: readelf.c:19142
msgid "NT_PPC_TM_CVMX (ppc checkpointed Altivec registers)"
msgstr "NT_PPC_TM_CVMX (ppc Altivec-register med kontrollpunkter)"
-#: readelf.c:18769
+#: readelf.c:19144
msgid "NT_PPC_TM_CVSX (ppc checkpointed VSX registers)"
msgstr "NT_PPC_TM_CVSX (ppc VSX-register med kontrollpunkter)"
-#: readelf.c:18771
+#: readelf.c:19146
msgid "NT_PPC_TM_SPR (ppc TM special purpose registers)"
msgstr "NT_PPC_TM_SPR (ppc TM-register för specialändamål)"
-#: readelf.c:18773
+#: readelf.c:19148
msgid "NT_PPC_TM_CTAR (ppc checkpointed TAR register)"
msgstr "NT_PPC_TM_CTAR (ppc TAR-register med kontrollpunkter)"
-#: readelf.c:18775
+#: readelf.c:19150
msgid "NT_PPC_TM_CPPR (ppc checkpointed PPR register)"
msgstr "NT_PPC_TM_CPPR (ppc PPR-register med kontrollpunkter)"
-#: readelf.c:18777
+#: readelf.c:19152
msgid "NT_PPC_TM_CDSCR (ppc checkpointed DSCR register)"
msgstr "NT_PPC_TM_CDSCR (ppc DSCR-register med kontrollpunkter)"
-#: readelf.c:18779
+#: readelf.c:19154
msgid "NT_386_TLS (x86 TLS information)"
msgstr "NT_386_TLS (x86 TLS-information)"
-#: readelf.c:18781
+#: readelf.c:19156
msgid "NT_386_IOPERM (x86 I/O permissions)"
msgstr "NT_386_IOPERM (x86 I/O-tillstånd)"
-#: readelf.c:18783
+#: readelf.c:19158
msgid "NT_X86_XSTATE (x86 XSAVE extended state)"
msgstr "NT_X86_XSTATE (x86 XSAVE utökat tillstånd)"
-#: readelf.c:18785
+#: readelf.c:19160
msgid "NT_X86_CET (x86 CET state)"
msgstr "NT_X86_CET (x86 CET-tillstånd)"
-#: readelf.c:18787
+#: readelf.c:19162
msgid "NT_S390_HIGH_GPRS (s390 upper register halves)"
msgstr "NT_S390_HIGH_GPRS (s390 övre registerhalvor)"
-#: readelf.c:18789
+#: readelf.c:19164
msgid "NT_S390_TIMER (s390 timer register)"
msgstr "NT_S390_TIMER (s390 tidtagningsregister)"
-#: readelf.c:18791
+#: readelf.c:19166
msgid "NT_S390_TODCMP (s390 TOD comparator register)"
msgstr "NT_S390_TODCMP (s390 TOD-jämförelseregister)"
-#: readelf.c:18793
+#: readelf.c:19168
msgid "NT_S390_TODPREG (s390 TOD programmable register)"
msgstr "NT_S390_TODPREG (s390 TOD-programmerbart register)"
-#: readelf.c:18795
+#: readelf.c:19170
msgid "NT_S390_CTRS (s390 control registers)"
msgstr "NT_S390_CTRS (s390 kontrollregister)"
-#: readelf.c:18797
+#: readelf.c:19172
msgid "NT_S390_PREFIX (s390 prefix register)"
msgstr "NT_S390_PREFIX (s390 prefixregister)"
-#: readelf.c:18799
+#: readelf.c:19174
msgid "NT_S390_LAST_BREAK (s390 last breaking event address)"
msgstr "NT_S390_LAST_BREAK (s390 sista brytande händelseadress)"
-#: readelf.c:18801
+#: readelf.c:19176
msgid "NT_S390_SYSTEM_CALL (s390 system call restart data)"
msgstr "NT_S390_SYSTEM_CALL (s390 omstartsdata för systemanrop)"
-#: readelf.c:18803
+#: readelf.c:19178
msgid "NT_S390_TDB (s390 transaction diagnostic block)"
msgstr "NT_S390_TDB (s390 transactionsdiagnostikblock)"
-#: readelf.c:18805
+#: readelf.c:19180
msgid "NT_S390_VXRS_LOW (s390 vector registers 0-15 upper half)"
msgstr "NT_S390_VXRS_LOW (s390 vektorregister 0-15 övre halva)"
-#: readelf.c:18807
+#: readelf.c:19182
msgid "NT_S390_VXRS_HIGH (s390 vector registers 16-31)"
msgstr "NT_S390_VXRS_HIGH (s390 vektorregister 16-31)"
-#: readelf.c:18809
+#: readelf.c:19184
msgid "NT_S390_GS_CB (s390 guarded-storage registers)"
msgstr "NT_S390_GS_CB (s390 vaktad lagrings-register)"
-#: readelf.c:18811
+#: readelf.c:19186
msgid "NT_S390_GS_BC (s390 guarded-storage broadcast control)"
msgstr "NT_S390_GS_BC (s390 spridningsstyrning av skyddad lagring)"
-#: readelf.c:18813
+#: readelf.c:19188
msgid "NT_ARM_VFP (arm VFP registers)"
msgstr "NT_ARM_VFP (arm VFP-register)"
-#: readelf.c:18815
+#: readelf.c:19190
msgid "NT_ARM_TLS (AArch TLS registers)"
msgstr "NT_ARM_TLS (AArch TLS-register)"
-#: readelf.c:18817
+#: readelf.c:19192
msgid "NT_ARM_HW_BREAK (AArch hardware breakpoint registers)"
msgstr "NT_ARM_HW_BREAK (AArch brytpunktsregister i hårdvara)"
-#: readelf.c:18819
+#: readelf.c:19194
msgid "NT_ARM_HW_WATCH (AArch hardware watchpoint registers)"
msgstr "NT_ARM_HW_WATCH (AArch observationspunktsregister i hårdvara)"
-#: readelf.c:18821
+#: readelf.c:19196
msgid "NT_ARM_SVE (AArch SVE registers)"
msgstr "NT_ARM_SVE (AArch SVE-register)"
-#: readelf.c:18823
+#: readelf.c:19198
msgid "NT_ARM_PAC_MASK (AArch pointer authentication code masks)"
msgstr "NT_ARM_PAC_MASK (AArch-kodmasker för pekarutenticering)"
-#: readelf.c:18825
+#: readelf.c:19200
+msgid "NT_ARM_PACA_KEYS (ARM pointer authentication address keys)"
+msgstr "NT_ARM_PACA_KEYS (ARM adressnycklar för pekarutenticering)"
+
+#: readelf.c:19202
+msgid "NT_ARM_PACG_KEYS (ARM pointer authentication generic keys)"
+msgstr "NT_ARM_PACG_KEYS (ARM generiska nycklar för pekarutenticering)"
+
+#: readelf.c:19204
msgid "NT_ARM_TAGGED_ADDR_CTRL (AArch tagged address control)"
msgstr "NT_ARM_TAGGED_ADDR_CTRL (AArch-taggad adresstyrning)"
-#: readelf.c:18827
+#: readelf.c:19206
+msgid "NT_ARM_PAC_ENABLED_KEYS (AArch64 pointer authentication enabled keys)"
+msgstr "NT_ARM_PAC_ENABLED_KEYS (AArch aktiverade nycklar för pekarutenticering)"
+
+#: readelf.c:19208
msgid "NT_ARC_V2 (ARC HS accumulator/extra registers)"
msgstr "NT_ARC_V2 (ARC HS ackumulator/extra register)"
-#: readelf.c:18829
+#: readelf.c:19210
msgid "NT_RISCV_CSR (RISC-V control and status registers)"
msgstr "NT_RISCV_CSR (RISC-V styr- och statusregister)"
-#: readelf.c:18831
+#: readelf.c:19212
msgid "NT_PSTATUS (pstatus structure)"
msgstr "NT_PSTATUS (pstatus-struktur)"
-#: readelf.c:18833
+#: readelf.c:19214
msgid "NT_FPREGS (floating point registers)"
msgstr "NT_FPREGS (flyttalsregister)"
-#: readelf.c:18835
+#: readelf.c:19216
msgid "NT_PSINFO (psinfo structure)"
msgstr "NT_PSINFO (psinfo-struktur)"
-#: readelf.c:18837
+#: readelf.c:19218
msgid "NT_LWPSTATUS (lwpstatus_t structure)"
msgstr "NT_LWPSTATUS (lwpstatus_t-struktur)"
-#: readelf.c:18839
+#: readelf.c:19220
msgid "NT_LWPSINFO (lwpsinfo_t structure)"
msgstr "NT_LWPSINFO (lwpsinfo_t-struktur)"
-#: readelf.c:18841
+#: readelf.c:19222
msgid "NT_WIN32PSTATUS (win32_pstatus structure)"
msgstr "NT_WIN32PSTATUS (win32_pstatus-struktur)"
-#: readelf.c:18843
+#: readelf.c:19224
msgid "NT_SIGINFO (siginfo_t data)"
msgstr "NT_SIGINFO (siginfo_t-data)"
-#: readelf.c:18845
+#: readelf.c:19226
msgid "NT_FILE (mapped files)"
msgstr "NT_FILE (mappade filer)"
-#: readelf.c:18847
-msgid "NT_MEMTAG (memory tags)"
-msgstr "NT_MEMTAG (minnestaggar)"
-
-#: readelf.c:18855
+#: readelf.c:19234
msgid "NT_VERSION (version)"
msgstr "NT_VERSION (version)"
-#: readelf.c:18857
+#: readelf.c:19236
msgid "NT_ARCH (architecture)"
msgstr "NT_ARCH (arkitektur)"
-#: readelf.c:18859
+#: readelf.c:19238
msgid "OPEN"
msgstr "OPEN"
-#: readelf.c:18861
+#: readelf.c:19240
msgid "func"
msgstr "funk"
-#: readelf.c:18863
+#: readelf.c:19242
msgid "GO BUILDID"
msgstr "GO BUILDID"
-#: readelf.c:18868 readelf.c:18987 readelf.c:19689 readelf.c:19857
-#: readelf.c:19934 readelf.c:20051
+#: readelf.c:19244
+msgid "FDO_PACKAGING_METADATA"
+msgstr "FDO_PACKAGING_METADATA"
+
+#: readelf.c:19249 readelf.c:19368 readelf.c:20109 readelf.c:20277
+#: readelf.c:20374 readelf.c:20502
#, c-format
msgid "Unknown note type: (0x%08x)"
msgstr "Okänd kommentarstyp: (0x%08x)"
-#: readelf.c:18889
+#: readelf.c:19270
#, c-format
msgid " Cannot decode 64-bit note in 32-bit build\n"
msgstr " Kan inte avkoda 64-bitars notering i 32-bitars bygge\n"
-#: readelf.c:18897
+#: readelf.c:19278
msgid " Malformed note - too short for header\n"
msgstr " Felformaterad notering — för kort för huvudet\n"
-#: readelf.c:18906
+#: readelf.c:19287
msgid " Malformed note - does not end with \\0\n"
msgstr " Felformaterad notering — avslutas inte med \\0\n"
-#: readelf.c:18919
+#: readelf.c:19300
msgid " Malformed note - too short for supplied file count\n"
msgstr " Felformaterad notering — för kort för det angivna filantalet\n"
-#: readelf.c:18923
+#: readelf.c:19304
#, c-format
msgid " Page size: "
msgstr " Sidstorlek: "
-#: readelf.c:18927
+#: readelf.c:19308
#, c-format
msgid " %*s%*s%*s\n"
msgstr " %*s%*s%*s\n"
-#: readelf.c:18928
+#: readelf.c:19309
msgid "Start"
msgstr "Start"
-#: readelf.c:18929
+#: readelf.c:19310
msgid "End"
msgstr "Slut"
-#: readelf.c:18930
+#: readelf.c:19311
msgid "Page Offset"
msgstr "Sidavstånd"
-#: readelf.c:18938
+#: readelf.c:19319
msgid " Malformed note - filenames end too early\n"
msgstr " Felformaterad notering — filnamn slutar för tidigt\n"
-#: readelf.c:18970
+#: readelf.c:19351
msgid "NT_GNU_ABI_TAG (ABI version tag)"
msgstr "NT_GNU_ABI_TAG (ABI-versionstagg)"
-#: readelf.c:18972
+#: readelf.c:19353
msgid "NT_GNU_HWCAP (DSO-supplied software HWCAP info)"
msgstr "NT_GNU_HWCAP (DSO-levererad programvaras HWCAP-info)"
-#: readelf.c:18974
+#: readelf.c:19355
msgid "NT_GNU_BUILD_ID (unique build ID bitstring)"
msgstr "NT_GNU_BUILD_ID (unik bygg-id-bitsträng)"
-#: readelf.c:18976
+#: readelf.c:19357
msgid "NT_GNU_GOLD_VERSION (gold version)"
msgstr "NT_GNU_GOLD_VERSION (guldversion)"
-#: readelf.c:18978
+#: readelf.c:19359
msgid "NT_GNU_PROPERTY_TYPE_0"
msgstr "NT_GNU_PROPERTY_TYPE_0"
-#: readelf.c:18980
+#: readelf.c:19361
msgid "NT_GNU_BUILD_ATTRIBUTE_OPEN"
msgstr "NT_GNU_BUILD_ATTRIBUTE_OPEN"
-#: readelf.c:18982
+#: readelf.c:19363
msgid "NT_GNU_BUILD_ATTRIBUTE_FUNC"
msgstr "NT_GNU_BUILD_ATTRIBUTE_FUNC"
-#: readelf.c:19071 readelf.c:19202 readelf.c:19239
+#: readelf.c:19452 readelf.c:19583 readelf.c:19620
#, c-format
msgid "<None>"
msgstr "<Ingen>"
-#: readelf.c:19329
+#: readelf.c:19732
#, c-format
msgid " Properties: "
msgstr " Egenskaper: "
-#: readelf.c:19333
+#: readelf.c:19736
#, c-format
msgid "<corrupt GNU_PROPERTY_TYPE, size = %#lx>\n"
msgstr "<trasig GNU_PROPERTY_TYPE, storlek = %#lx>\n"
-#: readelf.c:19345
+#: readelf.c:19748
#, c-format
msgid "<corrupt descsz: %#lx>\n"
msgstr "<trasig descsz: %#lx>\n"
# datasz är ett namn på en variabel i koden
-#: readelf.c:19356
+#: readelf.c:19759
#, c-format
msgid "<corrupt type (%#x) datasz: %#x>\n"
msgstr "<trasig typ (%#x) datasz: %#x>\n"
-#: readelf.c:19378 readelf.c:19432 readelf.c:19454
+#: readelf.c:19781 readelf.c:19835 readelf.c:19857
#, c-format
msgid "x86 ISA used: <corrupt length: %#x> "
msgstr "x86-ISA använd: <trasig längd: %#x> "
-#: readelf.c:19389 readelf.c:19443 readelf.c:19465
+#: readelf.c:19792 readelf.c:19846 readelf.c:19868
#, c-format
msgid "x86 ISA needed: <corrupt length: %#x> "
msgstr "x86-ISA behövs: <trasig längd: %#x> "
-#: readelf.c:19400
+#: readelf.c:19803
#, c-format
msgid "x86 feature: <corrupt length: %#x> "
msgstr "x86-funktion: <trasig längd: %#x> "
-#: readelf.c:19411
+#: readelf.c:19814
#, c-format
msgid "x86 feature used: <corrupt length: %#x> "
msgstr "x86-funktion använd: <trasig längd: %#x> "
-#: readelf.c:19422
+#: readelf.c:19825
#, c-format
msgid "x86 feature needed: <corrupt length: %#x> "
msgstr "x86-funktion behövs: <trasig längd: %#x> "
-#: readelf.c:19484 readelf.c:19498 readelf.c:19506 readelf.c:19520
+#: readelf.c:19887 readelf.c:19901 readelf.c:19909 readelf.c:19940
#, c-format
msgid "<corrupt length: %#x> "
msgstr "<trasig längd: %#x> "
-#: readelf.c:19496
+#: readelf.c:19899
#, c-format
msgid "stack size: "
msgstr "stackstorlek: "
-#: readelf.c:19516
+#: readelf.c:19922
+#, c-format
+msgid "1_needed: <corrupt length: %#x> "
+msgstr "1_needed: <trasig längd: %#x> "
+
+#: readelf.c:19936
#, c-format
msgid "UINT32_AND (%#x): "
msgstr "UINT32_AND (%#x): "
-#: readelf.c:19518
+#: readelf.c:19938
#, c-format
msgid "UINT32_OR (%#x): "
msgstr "UINT32_OR (%#x): "
-#: readelf.c:19530
+#: readelf.c:19950
#, c-format
msgid "<unknown type %#x data: "
msgstr "<okänd typ %#x-data: "
-#: readelf.c:19532
+#: readelf.c:19952
#, c-format
msgid "<processor-specific type %#x data: "
msgstr "<processorspecifik typ %#x-data: "
-#: readelf.c:19534
+#: readelf.c:19954
#, c-format
msgid "<application-specific type %#x data: "
msgstr "<programspecifik typ %#x-data: "
-#: readelf.c:19563
+#: readelf.c:19983
#, c-format
msgid " Build ID: "
msgstr " Bygg-id: "
-#: readelf.c:19578
+#: readelf.c:19998
#, c-format
msgid " <corrupt GNU_ABI_TAG>\n"
msgstr " <trasig GNU_ABI_TAG>\n"
-#: readelf.c:19615
+#: readelf.c:20035
#, c-format
msgid " OS: %s, ABI: %ld.%ld.%ld\n"
msgstr " OS: %s, ABI: %ld.%ld.%ld\n"
-#: readelf.c:19624
+#: readelf.c:20044
#, c-format
msgid " Version: "
msgstr " Version: "
@@ -11574,292 +11752,317 @@ msgstr " Version: "
#. is a series of entries, where each entry is a single byte followed
#. by a nul terminated string. The byte gives the bit number to test
#. if enabled in the bitmask.
-#: readelf.c:19640
+#: readelf.c:20060
#, c-format
msgid " Hardware Capabilities: "
msgstr " HÃ¥rdvaruegenskaper: "
-#: readelf.c:19643
+#: readelf.c:20063
msgid "<corrupt GNU_HWCAP>\n"
msgstr "<trasig GNU_HWCAP>\n"
-#: readelf.c:19648
+#: readelf.c:20068
#, c-format
msgid "num entries: %ld, enabled mask: %lx\n"
msgstr "num entries: %ld, aktiverad mask: %lx\n"
-#: readelf.c:19664
+#: readelf.c:20084
#, c-format
msgid " Description data: "
msgstr " Beskrivningsdata: "
-#: readelf.c:19682
+#: readelf.c:20102
msgid "Alignment of 8-byte objects"
msgstr "Justering av 8-bytesobjekt"
-#: readelf.c:19683
+#: readelf.c:20103
msgid "Sizeof double and long double"
msgstr "Storlek på dubbla och långa dubbla"
-#: readelf.c:19684
+#: readelf.c:20104
msgid "Type of FPU support needed"
msgstr "Typ av FPU-stöd som behövs"
-#: readelf.c:19685
+#: readelf.c:20105
msgid "Use of SIMD instructions"
msgstr "Användning av SIMD-instruktioner"
-#: readelf.c:19686
+#: readelf.c:20106
msgid "Use of cache"
msgstr "Användning av cache"
-#: readelf.c:19687
+#: readelf.c:20107
msgid "Use of MMU"
msgstr "Användning av MMU"
-#: readelf.c:19723
+#: readelf.c:20143
#, c-format
msgid "4-bytes\n"
msgstr "4-byte\n"
-#: readelf.c:19724
+#: readelf.c:20144
#, c-format
msgid "8-bytes\n"
msgstr "8-byte\n"
-#: readelf.c:19731
+#: readelf.c:20151
#, c-format
msgid "FPU-2.0\n"
msgstr "FPU-2.0\n"
-#: readelf.c:19732
+#: readelf.c:20152
#, c-format
msgid "FPU-3.0\n"
msgstr "FPU-3.0\n"
-#: readelf.c:19741
+#: readelf.c:20161
#, c-format
msgid "yes\n"
msgstr "ja\n"
-#: readelf.c:19751
+#: readelf.c:20171
#, c-format
msgid "unknown value: %x\n"
msgstr "okänt värde: %x\n"
-#: readelf.c:19807
+#: readelf.c:20227
msgid "NT_THRMISC (thrmisc structure)"
msgstr "NT_THRMISC (thrmisc-struktur)"
-#: readelf.c:19809
+#: readelf.c:20229
msgid "NT_PROCSTAT_PROC (proc data)"
msgstr "NT_PROCSTAT_PROC (processdata)"
-#: readelf.c:19811
+#: readelf.c:20231
msgid "NT_PROCSTAT_FILES (files data)"
msgstr "NT_PROCSTAT_FILES (fildata)"
-#: readelf.c:19813
+#: readelf.c:20233
msgid "NT_PROCSTAT_VMMAP (vmmap data)"
msgstr "NT_PROCSTAT_VMMAP (vmmap-data)"
-#: readelf.c:19815
+#: readelf.c:20235
msgid "NT_PROCSTAT_GROUPS (groups data)"
msgstr "NT_PROCSTAT_GROUPS (gruppdata)"
-#: readelf.c:19817
+#: readelf.c:20237
msgid "NT_PROCSTAT_UMASK (umask data)"
msgstr "NT_PROCSTAT_UMASK (umask-data)"
-#: readelf.c:19819
+#: readelf.c:20239
msgid "NT_PROCSTAT_RLIMIT (rlimit data)"
msgstr "NT_PROCSTAT_RLIMIT (rlimit-data)"
-#: readelf.c:19821
+#: readelf.c:20241
msgid "NT_PROCSTAT_OSREL (osreldate data)"
msgstr "NT_PROCSTAT_OSREL (osreldate-data)"
-#: readelf.c:19823
+#: readelf.c:20243
msgid "NT_PROCSTAT_PSSTRINGS (ps_strings data)"
msgstr "NT_PROCSTAT_PSSTRINGS (ps_strings-data)"
-#: readelf.c:19825
+#: readelf.c:20245
msgid "NT_PROCSTAT_AUXV (auxv data)"
msgstr "NT_PROCSTAT_AUXV (auxv-data)"
-#: readelf.c:19827
+#: readelf.c:20247
msgid "NT_PTLWPINFO (ptrace_lwpinfo structure)"
msgstr "NT_PTLWPINFO (ptrace_lwpinfo-struktur)"
#. NetBSD core "procinfo" structure.
-#: readelf.c:19841
+#: readelf.c:20261
msgid "NetBSD procinfo structure"
msgstr "NetBSD processinfo-struktur"
-#: readelf.c:19844
+#: readelf.c:20264
msgid "NetBSD ELF auxiliary vector data"
-msgstr "NetBSD ELF extra vektordata)"
+msgstr "NetBSD ELF extra vektordata"
-#: readelf.c:19847
+#: readelf.c:20267
msgid "PT_LWPSTATUS (ptrace_lwpstatus structure)"
msgstr "PT_LWPSTATUS (ptrace_lwpstatus-struktur)"
-#: readelf.c:19876 readelf.c:19893 readelf.c:19907
+#: readelf.c:20296 readelf.c:20313 readelf.c:20327
msgid "PT_GETREGS (reg structure)"
msgstr "PT_GETREGS (reg-struktur)"
-#: readelf.c:19878 readelf.c:19895 readelf.c:19909
+#: readelf.c:20298 readelf.c:20315 readelf.c:20329
msgid "PT_GETFPREGS (fpreg structure)"
msgstr "PT_GETFPREGS (fpreg-struktur)"
-#: readelf.c:19891
+#: readelf.c:20311
msgid "PT___GETREGS40 (old reg structure)"
msgstr "PT___GETREGS40 (gammal reg-struktur)"
-#: readelf.c:19928
+#: readelf.c:20346
+msgid "OpenBSD procinfo structure"
+msgstr "OpenBSD processinfo-struktur"
+
+#: readelf.c:20348
+msgid "OpenBSD ELF auxiliary vector data"
+msgstr "OpenBSD ELF extra vektordata"
+
+#: readelf.c:20350
+msgid "OpenBSD regular registers"
+msgstr "OpenBSD reguljära register"
+
+#: readelf.c:20352
+msgid "OpenBSD floating point registers"
+msgstr "OpenBSD flyttalsregister"
+
+#: readelf.c:20354
+msgid "OpenBSD window cookie"
+msgstr "OpenBSD fönsterkaka"
+
+#: readelf.c:20368
msgid "NT_STAPSDT (SystemTap probe descriptors)"
msgstr "NT_STAPSDT (SystemTap-probbeskrivare)"
-#: readelf.c:19996
+#: readelf.c:20436
#, c-format
msgid " Provider: %s\n"
msgstr " Leverantör: %s\n"
-#: readelf.c:19997
+#: readelf.c:20437
#, c-format
msgid " Name: %s\n"
msgstr " Namn: %s\n"
-#: readelf.c:19998
+#: readelf.c:20438
#, c-format
msgid " Location: "
msgstr " Plats: "
-#: readelf.c:20000
+#: readelf.c:20440
#, c-format
msgid ", Base: "
msgstr ", Bas: "
-#: readelf.c:20002
+#: readelf.c:20442
#, c-format
msgid ", Semaphore: "
msgstr ", Semafor: "
-#: readelf.c:20005
+#: readelf.c:20445
#, c-format
msgid " Arguments: %s\n"
msgstr " Argument: %s\n"
-#: readelf.c:20010
+#: readelf.c:20450
#, c-format
msgid " <corrupt - note is too small>\n"
msgstr " <trasig – noteringen är för liten>\n"
-#: readelf.c:20011
+#: readelf.c:20451
msgid "corrupt stapdt note - the data size is too small\n"
msgstr "trasig stapdt-notering – datastorleken är för liten\n"
-#: readelf.c:20023
+#: readelf.c:20460
+#, c-format
+msgid " Packaging Metadata: %.*s\n"
+msgstr " Paketeringsmetadata: %.*s\n"
+
+#: readelf.c:20474
msgid "NT_VMS_MHD (module header)"
msgstr "NT_VMS_MHD (modulhuvud)"
-#: readelf.c:20025
+#: readelf.c:20476
msgid "NT_VMS_LNM (language name)"
msgstr "NT_VMS_LNM (språknamn)"
-#: readelf.c:20027
+#: readelf.c:20478
msgid "NT_VMS_SRC (source files)"
msgstr "NT_VMS_SRC (källfiler)"
-#: readelf.c:20031
+#: readelf.c:20482
msgid "NT_VMS_EIDC (consistency check)"
msgstr "NT_VMS_EIDC (konsistenskontroll)"
-#: readelf.c:20033
+#: readelf.c:20484
msgid "NT_VMS_FPMODE (FP mode)"
msgstr "NT_VMS_FPMODE (FP-läge)"
-#: readelf.c:20037
+#: readelf.c:20488
msgid "NT_VMS_IMGNAM (image name)"
msgstr "NT_VMS_IMGNAM (avbildsnamn)"
-#: readelf.c:20039
+#: readelf.c:20490
msgid "NT_VMS_IMGID (image id)"
msgstr "NT_VMS_IMGID (avbilds-id)"
-#: readelf.c:20041
+#: readelf.c:20492
msgid "NT_VMS_LINKID (link id)"
msgstr "NT_VMS_LINKID (länk-id)"
-#: readelf.c:20043
+#: readelf.c:20494
msgid "NT_VMS_IMGBID (build id)"
msgstr "NT_VMS_IMGBID (bygg-id)"
-#: readelf.c:20045
+#: readelf.c:20496
msgid "NT_VMS_GSTNAM (sym table name)"
msgstr "NT_VMS_GSTNAM (symboltabellnamn)"
-#: readelf.c:20072
+#: readelf.c:20523
#, c-format
msgid " Creation date : %.17s\n"
msgstr " Tid skapad : %.17s\n"
-#: readelf.c:20073
+#: readelf.c:20524
#, c-format
msgid " Last patch date: %.17s\n"
msgstr " Tid senaste patch: %.17s\n"
-#: readelf.c:20076
+#: readelf.c:20527
#, c-format
msgid " Module name : %s\n"
msgstr " Modulnamn : %s\n"
-#: readelf.c:20078
+#: readelf.c:20529
#, c-format
msgid " Module version : %s\n"
msgstr " Modulversion : %s\n"
-#: readelf.c:20080 readelf.c:20085
+#: readelf.c:20531 readelf.c:20536
#, c-format
msgid " Module version : <missing>\n"
msgstr " Modulversion : <saknas>\n"
-#: readelf.c:20084
+#: readelf.c:20535
#, c-format
msgid " Module name : <missing>\n"
msgstr " Modulnamn : <saknas>\n"
-#: readelf.c:20090
+#: readelf.c:20541
#, c-format
msgid " Language: %.*s\n"
msgstr " Språk: %.*s\n"
-#: readelf.c:20095
+#: readelf.c:20546
#, c-format
msgid " Floating Point mode: "
msgstr " Flyttalsläge: "
-#: readelf.c:20105
+#: readelf.c:20556
#, c-format
msgid " Link time: "
msgstr " Länkningstidpunkt: "
-#: readelf.c:20116
+#: readelf.c:20567
#, c-format
msgid " Patch time: "
msgstr " Patchningstidpunkt: "
-#: readelf.c:20130
+#: readelf.c:20581
#, c-format
msgid " Major id: %u, minor id: %u\n"
msgstr " Övre id: %u, undre id: %u\n"
-#: readelf.c:20133
+#: readelf.c:20584
#, c-format
msgid " Last modified : "
msgstr " Senast ändrad : "
-#: readelf.c:20136
+#: readelf.c:20587
#, c-format
msgid ""
"\n"
@@ -11868,223 +12071,223 @@ msgstr ""
"\n"
" Länkflaggor : "
-#: readelf.c:20139
+#: readelf.c:20590
#, c-format
msgid " Header flags: 0x%08x\n"
msgstr " Huvudflaggor: 0x%08x\n"
-#: readelf.c:20141
+#: readelf.c:20592
#, c-format
msgid " Image id : %.*s\n"
msgstr " Avbilds-id : %.*s\n"
-#: readelf.c:20146
+#: readelf.c:20597
#, c-format
msgid " Image name: %.*s\n"
msgstr " Avbildsnamn: %.*s\n"
-#: readelf.c:20150
+#: readelf.c:20601
#, c-format
msgid " Global symbol table name: %.*s\n"
msgstr " Global symboltabellsnamn: %.*s\n"
-#: readelf.c:20154
+#: readelf.c:20605
#, c-format
msgid " Image id: %.*s\n"
msgstr " Avbilds-id: %.*s\n"
-#: readelf.c:20158
+#: readelf.c:20609
#, c-format
msgid " Linker id: %.*s\n"
msgstr " Länkar-id: %.*s\n"
-#: readelf.c:20168
+#: readelf.c:20619
#, c-format
msgid " <corrupt - data size is too small>\n"
msgstr " <trasig – datastorleken är för liten>\n"
-#: readelf.c:20169
+#: readelf.c:20620
msgid "corrupt IA64 note: data size is too small\n"
msgstr "trasig IA64-kommentar: datastorleken är för liten\n"
-#: readelf.c:20336 readelf.c:20344
+#: readelf.c:20787 readelf.c:20795
#, c-format
msgid " Applies to region from %#lx to %#lx\n"
msgstr " Gäller regionen från %#lx till %#lx\n"
-#: readelf.c:20339 readelf.c:20346
+#: readelf.c:20790 readelf.c:20797
#, c-format
msgid " Applies to region from %#lx\n"
msgstr " Gäller för regionen från %#lx\n"
-#: readelf.c:20366
+#: readelf.c:20817
#, c-format
msgid " <invalid description size: %lx>\n"
msgstr " <felaktig beskrivningsstorlek: %lx>\n"
-#: readelf.c:20367
+#: readelf.c:20818
#, c-format
msgid " <invalid descsz>"
msgstr " <felaktig descsz>"
-#: readelf.c:20393
+#: readelf.c:20844
#, c-format
msgid "Gap in build notes detected from %#lx to %#lx\n"
msgstr "Gap i byggnoteringar hittat från %#lx till %#lx\n"
-#: readelf.c:20396 readelf.c:20407
+#: readelf.c:20847 readelf.c:20858
#, c-format
msgid " Applies to region from %#lx"
msgstr " Gäller för regionen från %#lx"
-#: readelf.c:20401 readelf.c:20412
+#: readelf.c:20852 readelf.c:20863
#, c-format
msgid " to %#lx"
msgstr " till %#lx"
-#: readelf.c:20418
+#: readelf.c:20869
#, c-format
msgid " (%s)"
msgstr " (%s)"
-#: readelf.c:20439 readelf.c:20454
+#: readelf.c:20890 readelf.c:20905
#, c-format
msgid "corrupt name field in GNU build attribute note: size = %ld\n"
msgstr "trasigt namnfält i noteringar om GNU-byggattribut: storlek = %ld\n"
-#: readelf.c:20440 readelf.c:20455
+#: readelf.c:20891 readelf.c:20906
msgid " <corrupt name>"
msgstr " <trasigt namn>"
-#: readelf.c:20474
+#: readelf.c:20925
#, c-format
msgid "unrecognised attribute type in name field: %d\n"
msgstr "okänd attributtyp i namnfält: %d\n"
-#: readelf.c:20475
+#: readelf.c:20926
msgid "<unknown name type>"
msgstr "<okänd namntyp>"
-#: readelf.c:20485
+#: readelf.c:20936
msgid "<version>"
msgstr "<version>"
-#: readelf.c:20490
+#: readelf.c:20941
msgid "<stack prot>"
msgstr "<stackskydd>"
-#: readelf.c:20495
+#: readelf.c:20946
msgid "<relro>"
msgstr "<skrivsk. omlok.>"
-#: readelf.c:20500
+#: readelf.c:20951
msgid "<stack size>"
msgstr "<stackstorlek>"
-#: readelf.c:20505
+#: readelf.c:20956
msgid "<tool>"
msgstr "<verktyg>"
-#: readelf.c:20510
+#: readelf.c:20961
msgid "<ABI>"
msgstr "<ABI>"
-#: readelf.c:20515
+#: readelf.c:20966
msgid "<PIC>"
msgstr "<PIC>"
-#: readelf.c:20520
+#: readelf.c:20971
msgid "<short enum>"
msgstr "<kort uppr.>"
-#: readelf.c:20539
+#: readelf.c:20990
#, c-format
msgid "unrecognised byte in name field: %d\n"
msgstr "okänd byte i namnfältet: %d\n"
-#: readelf.c:20540
+#: readelf.c:20991
#, c-format
msgid "<unknown:_%d>"
msgstr "<okänd:_%d>"
-#: readelf.c:20552
+#: readelf.c:21003
#, c-format
msgid "attribute does not have an expected type (%c)\n"
msgstr "attributet har inte någon förväntad typ (%c)\n"
-#: readelf.c:20556
+#: readelf.c:21007
#, c-format
msgid "corrupt name field: namesz: %lu but parsing gets to %ld\n"
msgstr "trasigt namnfält: namesz: %lu men tolkningen kommer till %ld\n"
-#: readelf.c:20583
+#: readelf.c:21034
#, c-format
msgid "corrupt numeric name field: too many bytes in the value: %x\n"
msgstr "trasigt numeriskt namnfält: för många byte i värdet: %x\n"
-#: readelf.c:20755
+#: readelf.c:21212
#, c-format
msgid " description data: "
msgstr " beskrivningsdata: "
-#: readelf.c:20797
+#: readelf.c:21254
msgid "notes"
msgstr "kommentarer"
-#: readelf.c:20809
+#: readelf.c:21266
#, c-format
msgid "Displaying notes found in: %s\n"
msgstr "Visar kommentarer hittade i: %s\n"
-#: readelf.c:20811
+#: readelf.c:21268
#, c-format
msgid "Displaying notes found at file offset 0x%08lx with length 0x%08lx:\n"
msgstr "Visar kommentarer hittade på avstånd 0x%08lx med längd 0x%08lx:\n"
-#: readelf.c:20823
+#: readelf.c:21280
#, c-format
msgid "Corrupt note: alignment %ld, expecting 4 or 8\n"
msgstr "Trasig notering: justering %ld, 4 eller 8 förväntades\n"
-#: readelf.c:20829
+#: readelf.c:21286
#, c-format
msgid " %-20s %-10s\tDescription\n"
msgstr " %-20s %-10s\tBeskrivning\n"
-#: readelf.c:20829
+#: readelf.c:21286
msgid "Owner"
msgstr "Ägare"
-#: readelf.c:20829
+#: readelf.c:21286
msgid "Data size"
msgstr "Datastorlek"
-#: readelf.c:20847 readelf.c:20876
+#: readelf.c:21304 readelf.c:21333
#, c-format
msgid "Corrupt note: only %ld byte remains, not enough for a full note\n"
msgid_plural "Corrupt note: only %ld bytes remain, not enough for a full note\n"
msgstr[0] "Trasig notering: endast %ld byte återstår, inte tillräckligt för en fullständig notering\n"
msgstr[1] "Trasig notering: endast %ld byte återstår, inte tillräckligt för en fullständig notering\n"
-#: readelf.c:20904
+#: readelf.c:21361
#, c-format
msgid "note with invalid namesz and/or descsz found at offset 0x%lx\n"
msgstr "notering med ogiltig namesz och/eller descsz hittad på avståndet 0x%lx\n"
-#: readelf.c:20906
+#: readelf.c:21363
#, c-format
msgid " type: 0x%lx, namesize: 0x%08lx, descsize: 0x%08lx, alignment: %u\n"
msgstr " typ: 0x%lx, namnstorlek: 0x%08lx, beskrivningsstorlek: 0x%08lx, justering: %u\n"
-#: readelf.c:20924
+#: readelf.c:21381
msgid "Out of memory allocating space for inote name\n"
msgstr "Slut på minne vid allokering utrymme för inote-namn\n"
-#: readelf.c:20984
+#: readelf.c:21441
msgid "v850 notes"
msgstr "v850-noteringar"
-#: readelf.c:20991
+#: readelf.c:21448
#, c-format
msgid ""
"\n"
@@ -12093,42 +12296,42 @@ msgstr ""
"\n"
"Visar innehållet i Renesas V850 noteringssektion på avstånd 0x%lx med längd 0x%lx:\n"
-#: readelf.c:21008
+#: readelf.c:21465
#, c-format
msgid "Corrupt note: name size is too big: %lx\n"
msgstr "Trasig kommentar: namnstorleken är för stor: %lx\n"
-#: readelf.c:21018
+#: readelf.c:21475
#, c-format
msgid "corrupt descsz found in note at offset 0x%lx\n"
msgstr "trasig descsz hittad i notering på avståndet 0x%lx\n"
-#: readelf.c:21020 readelf.c:21033
+#: readelf.c:21477 readelf.c:21490
#, c-format
msgid " type: 0x%lx, namesize: 0x%lx, descsize: 0x%lx\n"
msgstr " typ: 0x%lx, namnstorlek: 0x%lx, beskrivningsstorlek: 0x%lx\n"
-#: readelf.c:21031
+#: readelf.c:21488
#, c-format
msgid "corrupt namesz found in note at offset 0x%lx\n"
msgstr "trasig namesz hittad i notering på avståndet 0x%lx\n"
-#: readelf.c:21110
+#: readelf.c:21567
#, c-format
msgid "No notes found in linked file '%s'.\n"
msgstr "Det finns inga noteringar i den länkade filen â€%sâ€.\n"
-#: readelf.c:21113
+#: readelf.c:21570
#, c-format
msgid "No notes found file.\n"
msgstr "Det finns inga noteringar i filen.\n"
-#: readelf.c:21122
+#: readelf.c:21579
#, c-format
msgid " Unknown GNU attribute: %s\n"
msgstr " Okänt GNU-attribut: %s\n"
-#: readelf.c:21270
+#: readelf.c:21727
msgid ""
"This instance of readelf has been built without support for a\n"
"64 bit data type and so it cannot read 64 bit ELF files.\n"
@@ -12136,12 +12339,12 @@ msgstr ""
"Den här binären av readelf har byggts utan hantering av 64-bitars\n"
"datatyper och kan därför inte läsa 64-bitars ELF-filer.\n"
-#: readelf.c:21440
+#: readelf.c:21897
#, c-format
msgid "%s: Failed to read file header\n"
msgstr "%s: Lyckades inte läsa filhuvudet\n"
-#: readelf.c:21455
+#: readelf.c:21912
#, c-format
msgid ""
"\n"
@@ -12150,72 +12353,72 @@ msgstr ""
"\n"
"Fil: %s\n"
-#: readelf.c:21616
+#: readelf.c:22073
#, c-format
msgid "%s: unable to dump the index as none was found\n"
msgstr "%s: kan inte dumpa indexet eftersom det inte fanns något\n"
-#: readelf.c:21623
+#: readelf.c:22080
#, c-format
msgid "Index of archive %s: (%lu entries, 0x%lx bytes in the symbol table)\n"
msgstr "Index för arkiv %s: (%lu poster, 0x%lx byte i symboltabellen)\n"
-#: readelf.c:21647
+#: readelf.c:22104
#, c-format
msgid "Contents of binary %s at offset "
msgstr "Innehåll i binären %s på avståndet "
-#: readelf.c:21659
+#: readelf.c:22116
#, c-format
msgid "%s: end of the symbol table reached before the end of the index\n"
msgstr "%s: nådde slutet på symboltabellen före slutet på indexet\n"
-#: readelf.c:21678
+#: readelf.c:22135
#, c-format
msgid "%s: %ld byte remains in the symbol table, but without corresponding entries in the index table\n"
msgid_plural "%s: %ld bytes remain in the symbol table, but without corresponding entries in the index table\n"
msgstr[0] "%s: %ld byte återstår i symboltabellen, men utan motsvarande poster i indextabellen\n"
msgstr[1] "%s: %ld byte återstår i symboltabellen, men utan motsvarande poster i indextabellen\n"
-#: readelf.c:21691
+#: readelf.c:22148
#, c-format
msgid "%s: failed to seek back to start of object files in the archive\n"
msgstr "%s: misslyckades att söka tillbaka till starten av objektfiler i arkivet\n"
-#: readelf.c:21785 readelf.c:21904
+#: readelf.c:22240 readelf.c:22359
#, c-format
msgid "Input file '%s' is not readable.\n"
msgstr "Infilen â€%s†är inte läsbar.\n"
-#: readelf.c:21813
+#: readelf.c:22268
#, c-format
msgid "%s: contains corrupt thin archive: %s\n"
msgstr "%s: innehåller trasigt tunt arkiv: %s\n"
-#: readelf.c:21831
+#: readelf.c:22286
#, c-format
msgid "%s: failed to seek to archive member.\n"
msgstr "%s: kunde inte söka till en arkivmedlem.\n"
-#: readelf.c:21896
+#: readelf.c:22351
msgid "Out of memory allocating file data structure\n"
msgstr "Slut på minne vid allokering av fildatapost\n"
-#: readelf.c:21933
+#: readelf.c:22388
#, c-format
msgid "File %s is not an archive so its index cannot be displayed.\n"
msgstr "Filen %s är inte ett arkiv så dess index kan inte visas.\n"
-#: readelf.c:22004
+#: readelf.c:22459
msgid "Nothing to do.\n"
msgstr "Inget att göra.\n"
-#: rename.c:198
+#: rename.c:200
#, c-format
msgid "%s: cannot set time: %s"
msgstr "%s: kan inte sätta tiden: %s"
-#: rename.c:217
+#: rename.c:219
#, c-format
msgid "unable to copy file '%s'; reason: %s"
msgstr "kan inte kopiera filen â€%sâ€; orsak: %s"
@@ -12828,77 +13031,77 @@ msgstr "Typs filnummer %d utanför sitt intervall\n"
msgid "Type index number %d out of range\n"
msgstr "Typs indexnummer %d utanför sitt intervall\n"
-#: stabs.c:3506
+#: stabs.c:3507
#, c-format
msgid "Unrecognized XCOFF type %d\n"
msgstr "Okänd XCOFF-typ %d\n"
-#: stabs.c:3799
+#: stabs.c:3798
#, c-format
msgid "bad mangled name `%s'\n"
msgstr "felaktigt manglat namn â€%sâ€\n"
-#: stabs.c:3894
+#: stabs.c:3893
#, c-format
msgid "no argument types in mangled string\n"
msgstr "inga argumenttyper i den manglade strängen\n"
-#: stabs.c:5242
+#: stabs.c:5241
#, c-format
msgid "Demangled name is not a function\n"
msgstr "Avmanglat namn är inte en funktion\n"
-#: stabs.c:5284
+#: stabs.c:5283
#, c-format
msgid "Unexpected type in v3 arglist demangling\n"
msgstr "Oväntad typ i avmangling av v3-argumentlista\n"
-#: stabs.c:5356
+#: stabs.c:5355
#, c-format
msgid "Unrecognized demangle component %d\n"
msgstr "Okänd avmanglingskomponent %d\n"
-#: stabs.c:5408
+#: stabs.c:5407
#, c-format
msgid "Failed to print demangled template\n"
msgstr "Lyckades inte skriva avmanglad mall\n"
-#: stabs.c:5488
+#: stabs.c:5487
#, c-format
msgid "Couldn't get demangled builtin type\n"
msgstr "Kunde inte få tag på avmanglad inbyggd typ\n"
-#: stabs.c:5537
+#: stabs.c:5536
#, c-format
msgid "Unexpected demangled varargs\n"
msgstr "Oväntade avmanglade varargs\n"
-#: stabs.c:5544
+#: stabs.c:5543
#, c-format
msgid "Unrecognized demangled builtin type\n"
msgstr "Okänd avmanglad inbyggd typ\n"
-#: strings.c:198 strings.c:265
+#: strings.c:229 strings.c:316
#, c-format
msgid "invalid integer argument %s"
msgstr "ogiltigt heltalsargument %s"
-#: strings.c:268
+#: strings.c:319
#, c-format
msgid "invalid minimum string length %d"
msgstr "ogiltig minsta stränglängd %d"
-#: strings.c:339
+#: strings.c:390
#, c-format
msgid "%s: Reading section %s failed: %s"
msgstr "%s: att läsa sektionen %s misslyckades: %s"
-#: strings.c:678
+#: strings.c:1313
#, c-format
msgid " Display printable strings in [file(s)] (stdin by default)\n"
msgstr " Visa läsbara strängar i [fil(er)] (eller från standard in)\n"
-#: strings.c:682
+#: strings.c:1317
#, c-format
msgid ""
" -a - --all Scan the entire file, not just the data section [default]\n"
@@ -12907,7 +13110,7 @@ msgstr ""
" -a - --all Läs igenom hela filen, inte bara datasektionen [standard]\n"
" -d --data Läs bara igenom datasektionen i filen\n"
-#: strings.c:686
+#: strings.c:1321
#, c-format
msgid ""
" -a - --all Scan the entire file, not just the data section\n"
@@ -12916,25 +13119,28 @@ msgstr ""
" -a - --all Läs igenom hela filen, inte bara datasektionen\n"
" -d --data Läs bara igenom datasektionen i filen [standard]\n"
-#: strings.c:690
+#: strings.c:1325
#, c-format
msgid ""
" -f --print-file-name Print the name of the file before each string\n"
-" -n --bytes=[number] Locate & print any NUL-terminated sequence of at\n"
-" -<number> least [number] characters (default 4).\n"
+" -n <number> Locate & print any sequence of at least <number>\n"
+" --bytes=<number> displayable characters. (The default is 4).\n"
" -t --radix={o,d,x} Print the location of the string in base 8, 10 or 16\n"
" -w --include-all-whitespace Include all whitespace as valid string characters\n"
" -o An alias for --radix=o\n"
" -T --target=<BFDNAME> Specify the binary file format\n"
" -e --encoding={s,S,b,l,B,L} Select character size and endianness:\n"
" s = 7-bit, S = 8-bit, {b,l} = 16-bit, {B,L} = 32-bit\n"
+" --unicode={default|show|invalid|hex|escape|highlight}\n"
+" -U {d|s|i|x|e|h} Specify how to treat UTF-8 encoded unicode characters\n"
" -s --output-separator=<string> String used to separate strings in output.\n"
" @<file> Read options from <file>\n"
" -h --help Display this information\n"
" -v -V --version Print the program's version number\n"
msgstr ""
" -f --print-file-name Skriv filens namn före varje sträng\n"
-" -n --bytes=[antal] Hitta och skriv ut varje NUL-terminerad sekvens\n"
+" -n <antal> Hitta och skriv ut varje sekvens av minst <antal>\n"
+" --bytes=<antal> skrivbara tecken. (Standard är 4).\n"
" -<antal> med minst [antal] tecken (standard 4).\n"
" -t --radix={o,d,x} Skriv strängens position i talbas 8, 10 eller 16\n"
" -w --include-all-whitespace Inkludera alla blanka som giltiga strängtecken\n"
@@ -12942,6 +13148,8 @@ msgstr ""
" -T --target=<BFDNAMN> Välj binärfilens format\n"
" -e --encoding={s,S,b,l,B,L} Välj teckenstorlek och byteordning:\n"
" s = 7-bit, S = 8-bit, {b,l} = 16-bit, {B,L} = 32-bit\n"
+" --unicode={default|show|invalid|hex|escape|highlight}\n"
+" -U {d|s|i|x|e|h} Ange hur UTF-8-kodade unicode-tecken skall hanteras\n"
" -s --output-separator=<sträng> Sträng som skall användas för att separera\n"
" strängar i utdata.\n"
" @<fil> Läs flaggor från <fil>\n"
@@ -12952,54 +13160,55 @@ msgstr ""
msgid "*undefined*"
msgstr "*odefinierad*"
-#: sysdump.c:57
+#. PR 28564
+#: sysdump.c:57 sysdump.c:66
msgid "*corrupt*"
msgstr "*trasig*"
-#: sysdump.c:125
+#: sysdump.c:131
#, c-format
msgid "SUM IS %x\n"
msgstr "SUMMAN ÄR %x\n"
#. PR 17512: file: id:000001,src:000002,op:flip1,pos:45.
#. Prevent infinite loops re-reading beyond the end of the buffer.
-#: sysdump.c:163
+#: sysdump.c:169
msgid "ICE: getINT: Out of buffer space"
msgstr "ICE: getINT: Slut på buffertutrymme"
-#: sysdump.c:188
+#: sysdump.c:194
#, c-format
msgid "Unsupported read size: %d"
msgstr "Lässtorleken stödjs inte: %d"
-#: sysdump.c:499
+#: sysdump.c:505
#, c-format
msgid "GOT A %x\n"
msgstr "FICK EN %x\n"
-#: sysdump.c:517
+#: sysdump.c:523
#, c-format
msgid "WANTED %x!!\n"
msgstr "VILLE HA %x!!\n"
-#: sysdump.c:535
+#: sysdump.c:541
msgid "SYMBOL INFO"
msgstr "SYMBOLINFO"
-#: sysdump.c:553
+#: sysdump.c:559
msgid "DERIVED TYPE"
msgstr "HÄRLEDD TYP"
-#: sysdump.c:610
+#: sysdump.c:616
msgid "MODULE***\n"
msgstr "MODUL***\n"
-#: sysdump.c:643
+#: sysdump.c:649
#, c-format
msgid "Print a human readable interpretation of a SYSROFF object file\n"
msgstr "Skriv en mänskligt läsbar tolkning av en SYSROFF-objektfil\n"
-#: sysdump.c:644
+#: sysdump.c:650
#, c-format
msgid ""
" The options are:\n"
@@ -13010,7 +13219,7 @@ msgstr ""
" -h --help Visa denna hjälp\n"
" -v --version Visa programmets versionsinformation\n"
-#: sysdump.c:710
+#: sysdump.c:716
#, c-format
msgid "cannot open input file %s"
msgstr "kan inte öppna infil %s"
@@ -13099,8 +13308,8 @@ msgstr "\t<trasig IA64-beskrivare>\n"
#: version.c:34
#, c-format
-msgid "Copyright (C) 2021 Free Software Foundation, Inc.\n"
-msgstr "Copyright © 2021 Free Software Foundation, Inc.\n"
+msgid "Copyright (C) 2022 Free Software Foundation, Inc.\n"
+msgstr "Copyright © 2022 Free Software Foundation, Inc.\n"
#: version.c:35
#, c-format
diff --git a/binutils/po/uk.po b/binutils/po/uk.po
index e36ad2d3bb9..7e8589f49e9 100644
--- a/binutils/po/uk.po
+++ b/binutils/po/uk.po
@@ -3,13 +3,13 @@
# This file is distributed under the same license as the binutils package.
#
# Maxim V. Dziumanenko <dziumanenko@gmail.com>, 2007.
-# Yuri Chornoivan <yurchor@ukr.net>, 2012, 2013, 2014, 2017, 2018, 2019, 2020, 2021.
+# Yuri Chornoivan <yurchor@ukr.net>, 2012, 2013, 2014, 2017, 2018, 2019, 2020, 2021, 2022.
msgid ""
msgstr ""
-"Project-Id-Version: binutils 2.36.90\n"
-"Report-Msgid-Bugs-To: bug-binutils@gnu.org\n"
-"POT-Creation-Date: 2021-07-03 15:06+0100\n"
-"PO-Revision-Date: 2021-07-04 15:46+0300\n"
+"Project-Id-Version: binutils 2.37.90\n"
+"Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n"
+"POT-Creation-Date: 2022-01-22 12:22+0000\n"
+"PO-Revision-Date: 2022-01-23 15:45+0200\n"
"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
"Language-Team: Ukrainian <trans-uk@lists.fedoraproject.org>\n"
"Language: uk\n"
@@ -72,9 +72,9 @@ msgstr ""
" -v --version Показати верÑÑ–ÑŽ програми\n"
"\n"
-#: addr2line.c:109 ar.c:357 ar.c:394 coffdump.c:471 dlltool.c:3715
-#: dllwrap.c:518 elfedit.c:952 objcopy.c:697 objcopy.c:752 readelf.c:4842
-#: size.c:109 srconv.c:1704 strings.c:706 sysdump.c:649 windmc.c:227
+#: addr2line.c:109 ar.c:359 ar.c:396 coffdump.c:471 dlltool.c:3713
+#: dllwrap.c:518 elfedit.c:976 objcopy.c:697 objcopy.c:752 readelf.c:5165
+#: size.c:109 srconv.c:1704 strings.c:1343 sysdump.c:655 windmc.c:227
#: windres.c:690
#, c-format
msgid "Report bugs to %s\n"
@@ -111,227 +111,232 @@ msgstr "%s: неможливо отримати адреÑи з архіву"
msgid "%s: cannot find section %s"
msgstr "%s: неможливо знайти розділ: %s"
-#: addr2line.c:442 ar.c:756 dlltool.c:3239 nm.c:1807 objcopy.c:6029
-#: objdump.c:5211 size.c:151 strings.c:289 windmc.c:958 windres.c:816
+#: addr2line.c:442 ar.c:758 dlltool.c:3237 nm.c:2051 objcopy.c:6036
+#: objdump.c:5372 size.c:151 strings.c:340 windmc.c:958 windres.c:816
msgid "fatal error: libbfd ABI mismatch"
msgstr "критична помилка: невідповідніÑÑ‚ÑŒ двійкового інтерфейÑу libbfd"
-#: addr2line.c:469 nm.c:1833 objdump.c:5258 readelf.c:5115
+#: addr2line.c:469 nm.c:2077 objdump.c:5419 readelf.c:5438
#, c-format
msgid "unknown demangling style `%s'"
msgstr "невідомий Ñтиль Ð´ÐµÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ `%s'"
-#: ar.c:274
+#: ar.c:275
#, c-format
msgid "no entry %s in archive\n"
msgstr "в архіві немає запиÑу %s\n"
-#: ar.c:288
+#: ar.c:289
#, c-format
msgid "Usage: %s [emulation options] [-]{dmpqrstx}[abcDfilMNoOPsSTuvV] [--plugin <name>] [member-name] [count] archive-file file...\n"
msgstr "КориÑтуваннÑ: %s [параметри емулÑції] [-]{dmpqrstx}[abcDfilMNoOPsSTuvV] [--plugin <назва>] [назва_члена] [лічильник] файл_архіву файл...\n"
-#: ar.c:294
+#: ar.c:295
#, c-format
msgid "Usage: %s [emulation options] [-]{dmpqrstx}[abcDfilMNoOPsSTuvV] [member-name] [count] archive-file file...\n"
msgstr "КориÑтуваннÑ: %s [параметри емулÑції] [-]{dmpqrstx}[abcDfilMNoOPsSTuvV] [назва_члена] [лічильник] файл_архіву файл...\n"
-#: ar.c:302
+#: ar.c:303
#, c-format
msgid " %s -M [<mri-script]\n"
msgstr " %s -M [<Ñценарій mri]\n"
-#: ar.c:303
+#: ar.c:304
#, c-format
msgid " commands:\n"
msgstr " команди:\n"
-#: ar.c:304
+#: ar.c:305
#, c-format
msgid " d - delete file(s) from the archive\n"
msgstr " d - Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð² з архіву\n"
-#: ar.c:305
+#: ar.c:306
#, c-format
msgid " m[ab] - move file(s) in the archive\n"
msgstr " m[ab] - переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð² у архів\n"
-#: ar.c:306
+#: ar.c:307
#, c-format
msgid " p - print file(s) found in the archive\n"
msgstr " p - вивід файлів, знайдених у архіві\n"
-#: ar.c:307
+#: ar.c:308
#, c-format
msgid " q[f] - quick append file(s) to the archive\n"
msgstr " q[f] - швидке Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð² до архіву\n"
-#: ar.c:308
+#: ar.c:309
#, c-format
msgid " r[ab][f][u] - replace existing or insert new file(s) into the archive\n"
msgstr " r[ab][f][u] - заміна Ñ–Ñнуючих або Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð½Ð¾Ð²Ð¸Ñ… файлів до архіву\n"
-#: ar.c:309
+#: ar.c:310
#, c-format
msgid " s - act as ranlib\n"
msgstr " s — працювати у режимі ranlib\n"
-#: ar.c:310
+#: ar.c:311
#, c-format
msgid " t[O][v] - display contents of the archive\n"
msgstr " t[O][v] - вивеÑти вміÑÑ‚ архіву\n"
-#: ar.c:311
+#: ar.c:312
#, c-format
msgid " x[o] - extract file(s) from the archive\n"
msgstr " x[o] - Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð² з архіву\n"
-#: ar.c:312
+#: ar.c:313
#, c-format
msgid " command specific modifiers:\n"
msgstr " оÑобливі модифікатори Ð´Ð»Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´:\n"
-#: ar.c:313
+#: ar.c:314
#, c-format
msgid " [a] - put file(s) after [member-name]\n"
msgstr " [a] - Ñ€Ð¾Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð² піÑÐ»Ñ [назви_члена]\n"
-#: ar.c:314
+#: ar.c:315
#, c-format
msgid " [b] - put file(s) before [member-name] (same as [i])\n"
msgstr " [b] - Ñ€Ð¾Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð² до [назви_члена] (те ж Ñаме, що й [i])\n"
-#: ar.c:317
+#: ar.c:318
#, c-format
msgid " [D] - use zero for timestamps and uids/gids (default)\n"
msgstr " [D] - викориÑтовувати нуль Ð´Ð»Ñ Ñ‡Ð°Ñових позначок Ñ– uid/gid (типово)\n"
-#: ar.c:319
+#: ar.c:320
#, c-format
msgid " [U] - use actual timestamps and uids/gids\n"
msgstr " [U] - викориÑтовувати дійÑні чаÑові позначки та uid/gid\n"
-#: ar.c:324
+#: ar.c:325
#, c-format
msgid " [D] - use zero for timestamps and uids/gids\n"
msgstr " [D] - викориÑтовувати нуль Ð´Ð»Ñ Ñ‡Ð°Ñових позначок Ñ– uid/gid\n"
-#: ar.c:326
+#: ar.c:327
#, c-format
msgid " [U] - use actual timestamps and uids/gids (default)\n"
msgstr " [U] - викориÑтовувати дійÑні чаÑові позначки та uid/gid (типово)\n"
-#: ar.c:329
+#: ar.c:330
#, c-format
msgid " [N] - use instance [count] of name\n"
msgstr " [N] - викориÑÑ‚Ð°Ð½Ð½Ñ [відліку], Ñк варіанту назви\n"
-#: ar.c:330
+#: ar.c:331
#, c-format
msgid " [f] - truncate inserted file names\n"
msgstr " [f] - Ð¾Ð±Ñ€Ñ–Ð·Ð°Ð½Ð½Ñ Ð½Ð°Ð·Ð² вÑтавлених файлів\n"
-#: ar.c:331
+#: ar.c:332
#, c-format
msgid " [P] - use full path names when matching\n"
msgstr " [P] - викориÑÑ‚Ð°Ð½Ð½Ñ Ð¿Ð¾Ð²Ð½Ð¸Ñ… назв шлÑхів при порівнÑнні\n"
-#: ar.c:332
+#: ar.c:333
#, c-format
msgid " [o] - preserve original dates\n"
msgstr " [o] - Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÐ¾Ð²Ð¸Ñ… дат\n"
-#: ar.c:333
+#: ar.c:334
#, c-format
msgid " [O] - display offsets of files in the archive\n"
msgstr " [O] - вивеÑти зÑуви файлів у архіві\n"
-#: ar.c:334
+#: ar.c:335
#, c-format
msgid " [u] - only replace files that are newer than current archive contents\n"
msgstr " [u] - заміна лише новіших файлів, ніж поточний вміÑÑ‚ архіву\n"
-#: ar.c:335
+#: ar.c:336
#, c-format
msgid " generic modifiers:\n"
msgstr " звичайні модифікатори:\n"
-#: ar.c:336
+#: ar.c:337
#, c-format
msgid " [c] - do not warn if the library had to be created\n"
msgstr " [c] - не попереджувати, Ñкщо має бути Ñтворена бібліотека\n"
-#: ar.c:337
+#: ar.c:338
#, c-format
msgid " [s] - create an archive index (cf. ranlib)\n"
msgstr " [s] - ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ–Ð½Ð´ÐµÐºÑу архіву (cf. ranlib)\n"
-#: ar.c:338
+#: ar.c:339
#, c-format
msgid " [l <text> ] - specify the dependencies of this library\n"
msgstr " [l <текÑÑ‚> ] - вказати залежноÑÑ‚Ñ– цієї бібліотеки\n"
-#: ar.c:339
+#: ar.c:340
#, c-format
msgid " [S] - do not build a symbol table\n"
msgstr " [S] - не Ñтворювати таблицю Ñимволів\n"
-#: ar.c:340
+#: ar.c:341
#, c-format
-msgid " [T] - make a thin archive\n"
-msgstr " [T] - Ñтворити тонкий архів\n"
+msgid " [T] - deprecated, use --thin instead\n"
+msgstr " [T] - заÑтарілий, ÑкориÑтайтеÑÑ Ð·Ð°Ð¼Ñ–ÑÑ‚ÑŒ нього --thin\n"
-#: ar.c:341
+#: ar.c:342
#, c-format
msgid " [v] - be verbose\n"
msgstr " [v] - докладний режим\n"
-#: ar.c:342
+#: ar.c:343
#, c-format
msgid " [V] - display the version number\n"
msgstr " [V] - вивід номера верÑÑ–Ñ—\n"
-#: ar.c:343
+#: ar.c:344
#, c-format
msgid " @<file> - read options from <file>\n"
msgstr " @<файл> - читати ключі з <файла>\n"
-#: ar.c:344
+#: ar.c:345
#, c-format
msgid " --target=BFDNAME - specify the target object format as BFDNAME\n"
msgstr " --target=BFD-назва — вказати Ñк формат об'єкта Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ BFD-назву\n"
-#: ar.c:345
+#: ar.c:346
#, c-format
msgid " --output=DIRNAME - specify the output directory for extraction operations\n"
msgstr " --output=КÐТÐЛОГ — вказати каталог Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… Ð´Ð»Ñ Ð´Ñ–Ð¹ із видобуваннÑ\n"
-#: ar.c:346
+#: ar.c:347
#, c-format
msgid " --record-libdeps=<text> - specify the dependencies of this library\n"
msgstr " --record-libdeps=<текÑÑ‚> - вказати залежноÑÑ‚Ñ– цієї бібліотеки\n"
#: ar.c:348
#, c-format
+msgid " --thin - make a thin archive\n"
+msgstr " --thin - Ñтворити тонкий архів\n"
+
+#: ar.c:350
+#, c-format
msgid " optional:\n"
msgstr " додаткові:\n"
-#: ar.c:349
+#: ar.c:351
#, c-format
msgid " --plugin <p> - load the specified plugin\n"
msgstr " --plugin <p> — завантажити вказаний додаток\n"
-#: ar.c:370
+#: ar.c:372
#, c-format
msgid "Usage: %s [options] archive\n"
msgstr "ВикориÑтаннÑ: %s [ключі] архів\n"
-#: ar.c:371
+#: ar.c:373
#, c-format
msgid " Generate an index to speed access to archives\n"
msgstr " Створює Ñ–Ð½Ð´ÐµÐºÑ Ð´Ð»Ñ Ð·Ð±Ñ–Ð»ÑŒÑˆÐµÐ½Ð½Ñ ÑˆÐ²Ð¸Ð´ÐºÐ¾ÑÑ‚Ñ– доÑтупу до архівів\n"
-#: ar.c:372
+#: ar.c:374
#, c-format
msgid ""
" The options are:\n"
@@ -340,12 +345,12 @@ msgstr ""
" Ключі:\n"
" @<файл> Читати ключі з <файла>.\n"
-#: ar.c:375
+#: ar.c:377
#, c-format
msgid " --plugin <name> Load the specified plugin\n"
msgstr " --plugin <назва> Завантажити вказаний додаток\n"
-#: ar.c:379
+#: ar.c:381
#, c-format
msgid ""
" -D Use zero for symbol map timestamp (default)\n"
@@ -354,7 +359,7 @@ msgstr ""
" -D викориÑтовувати нуль Ð´Ð»Ñ Ñ‡Ð°Ñової позначки Ñимвольної карти (типово)\n"
" -U викориÑтовувати поточну чаÑову позначку Ð´Ð»Ñ Ñимвольної карти\n"
-#: ar.c:383
+#: ar.c:385
#, c-format
msgid ""
" -D Use zero for symbol map timestamp\n"
@@ -363,7 +368,7 @@ msgstr ""
" -D викориÑтовувати нуль Ð´Ð»Ñ Ñ‡Ð°Ñової позначки Ñимвольної карти\n"
" -U викориÑтовувати поточну чаÑову позначку Ð´Ð»Ñ Ñимвольної карти (типово)\n"
-#: ar.c:386
+#: ar.c:388
#, c-format
msgid ""
" -t Update the archive's symbol map timestamp\n"
@@ -374,133 +379,133 @@ msgstr ""
" -h --help ВивеÑти це довідкове повідомленнÑ\n"
" -v --version ВивеÑти дані щодо верÑÑ–Ñ—\n"
-#: ar.c:511
+#: ar.c:513
msgid "two different operation options specified"
msgstr "вказані ключі Ð´Ð»Ñ Ð´Ð²Ð¾Ñ… різних операцій"
-#: ar.c:547
+#: ar.c:549
msgid "libdeps specified more than once"
msgstr "libdeps вказано декілька разів"
-#: ar.c:608 ar.c:683 nm.c:1926
+#: ar.c:610 ar.c:685 nm.c:2188
#, c-format
msgid "sorry - this program has been built without plugin support\n"
msgstr "Вибачте, цю програму було зібрано без підтримки додатків.\n"
-#: ar.c:812
+#: ar.c:814
msgid "no operation specified"
msgstr "Ð¾Ð¿ÐµÑ€Ð°Ñ†Ñ–Ñ Ð½Ðµ вказана"
-#: ar.c:815
+#: ar.c:817
msgid "`u' is only meaningful with the `r' option."
msgstr "`u' має Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð»Ð¸ÑˆÐµ з ключем `r'."
-#: ar.c:818
+#: ar.c:820
msgid "`u' is not meaningful with the `D' option."
msgstr "`u' не матиме Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð· `D'."
-#: ar.c:821
+#: ar.c:823
msgid "`u' modifier ignored since `D' is the default (see `U')"
msgstr "модифікатор «u» проігноровано, оÑкільки типовим Ñ” «D» (див. «U»)"
-#: ar.c:830
+#: ar.c:832
msgid "missing position arg."
msgstr "пропущено аргумент розташуваннÑ."
-#: ar.c:836
+#: ar.c:838
msgid "`N' is only meaningful with the `x' and `d' options."
msgstr "`N' має Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð»Ð¸ÑˆÐµ з ключами `x' та `d'."
-#: ar.c:838
+#: ar.c:840
msgid "`N' missing value."
msgstr "Пропущено Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«N»."
-#: ar.c:841
+#: ar.c:843
msgid "Value for `N' must be positive."
msgstr "Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ Â«N» має бути додатнім."
-#: ar.c:857
+#: ar.c:859
msgid "`x' cannot be used on thin archives."
msgstr "`x' не можна викориÑтовувати Ð´Ð»Ñ Ñ‚Ð¾Ð½ÐºÐ¸Ñ… архівів."
-#: ar.c:871
+#: ar.c:873
msgid "Cannot create libdeps record."
msgstr "Ðе вдалоÑÑ Ñтворити Ð·Ð°Ð¿Ð¸Ñ libdeps."
-#: ar.c:874
+#: ar.c:876
msgid "Cannot set libdeps record type to binary."
msgstr "Ðеможливо вÑтановити тип запиÑу libdeps у binary."
-#: ar.c:877
+#: ar.c:879
msgid "Cannot set libdeps object format."
msgstr "Ðеможливо вÑтановити формат об'єктів libdeps."
-#: ar.c:880
+#: ar.c:882
msgid "Cannot make libdeps object writable."
msgstr "Ðе вдалоÑÑ Ð·Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸ об'єкт libdeps придатним до запиÑу."
-#: ar.c:883
+#: ar.c:885
msgid "Cannot write libdeps record."
msgstr "Ðе вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати Ð·Ð°Ð¿Ð¸Ñ libdeps."
-#: ar.c:886
+#: ar.c:888
msgid "Cannot make libdeps object readable."
msgstr "Ðе вдалоÑÑ Ð·Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸ об'єкт libdeps придатним до читаннÑ."
-#: ar.c:889
+#: ar.c:891
msgid "Cannot reset libdeps record type."
msgstr "Ðе вдалоÑÑ Ñкинути тип запиÑу libdeps."
-#: ar.c:950
+#: ar.c:952
#, c-format
msgid "internal error -- this option not implemented"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° -- цей ключ не реалізований"
-#: ar.c:1019
+#: ar.c:1021
#, c-format
msgid "creating %s"
msgstr "ÑтворюєтьÑÑ %s"
-#: ar.c:1050
+#: ar.c:1052
#, c-format
msgid "Cannot convert existing library %s to thin format"
msgstr "Ðе вдалоÑÑ Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ наÑвну бібліотеку %s у тонкий формат"
-#: ar.c:1056
+#: ar.c:1058
#, c-format
msgid "Cannot convert existing thin library %s to normal format"
msgstr "Ðе вдалоÑÑ Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ наÑвну тонку бібліотеку %s у звичайний формат"
-#: ar.c:1088 ar.c:1185 ar.c:1507 objcopy.c:3606
+#: ar.c:1090 ar.c:1190 ar.c:1512 objcopy.c:3612
#, c-format
msgid "internal stat error on %s"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° stat на %s"
-#: ar.c:1107 ar.c:1211
+#: ar.c:1109 ar.c:1216
#, c-format
msgid "%s is not a valid archive"
msgstr "%s не є правильним архівом"
-#: ar.c:1135
+#: ar.c:1137
#, c-format
msgid "illegal output pathname for archive member: %s, using '%s' instead"
msgstr "некоректна назва шлÑху Ð´Ð»Ñ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ñ‡Ð°Ñтини архіву: %s, викориÑтовуємо заміÑÑ‚ÑŒ неї «%s»"
-#: ar.c:1259
+#: ar.c:1264
msgid "could not create temporary file whilst writing archive"
msgstr "не вдалоÑÑ Ñтворити тимчаÑовий файл під Ñ‡Ð°Ñ Ð·Ð°Ð¿Ð¸Ñу архіву"
-#: ar.c:1410
+#: ar.c:1415
#, c-format
msgid "No member named `%s'\n"
msgstr "Ðемає члена з назвою `%s'\n"
-#: ar.c:1460
+#: ar.c:1465
#, c-format
msgid "no entry %s in archive %s!"
msgstr "пункту %s немає а архіві %s!"
-#: ar.c:1620
+#: ar.c:1625
#, c-format
msgid "%s: no archive map to update"
msgstr "%s: немає карти архіву Ð´Ð»Ñ Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ"
@@ -576,7 +581,7 @@ msgstr " Ðе вказані Ñпецифічні Ð´Ð»Ñ ÐµÐ¼ÑƒÐ»Ñції паÑ
msgid " emulation options: \n"
msgstr " ключі емулÑції: \n"
-#: bucomm.c:43 bucomm.c:77
+#: bucomm.c:43 bucomm.c:76
msgid "cause of error unknown"
msgstr "невідома причина помилки"
@@ -646,17 +651,17 @@ msgstr "<пошкоджені чаÑові дані>"
msgid "%s: bad number: %s"
msgstr "%s: некоректне чиÑло: %s"
-#: bucomm.c:607 strings.c:402
+#: bucomm.c:607 strings.c:453
#, c-format
msgid "'%s': No such file"
msgstr "«%s»: немає такого файла"
-#: bucomm.c:609 strings.c:404
+#: bucomm.c:609 strings.c:455
#, c-format
msgid "Warning: could not locate '%s'. reason: %s"
msgstr "ПопередженнÑ: неможливо знайти '%s'. Причина: %s"
-#: bucomm.c:613 strings.c:410
+#: bucomm.c:613 strings.c:461
#, c-format
msgid "Warning: '%s' is a directory"
msgstr "ПопередженнÑ: «%s» Ñ” каталогом"
@@ -776,7 +781,7 @@ msgstr "СпиÑок Ñимволів"
msgid "Symbol %s, tag %d, number %d"
msgstr "Символ %s, теґ %d, номер %d"
-#: coffdump.c:345 readelf.c:18461 readelf.c:18552
+#: coffdump.c:345 readelf.c:18836 readelf.c:18927
#, c-format
msgid "Type"
msgstr "Тип"
@@ -830,7 +835,7 @@ msgstr "<немає Ñимволу>"
msgid "#sources %d"
msgstr "#джерела %d"
-#: coffdump.c:462 sysdump.c:642
+#: coffdump.c:462 sysdump.c:648
#, c-format
msgid "Usage: %s [option(s)] in-file\n"
msgstr "ВикориÑтаннÑ: %s [ключі] вх-файл\n"
@@ -855,7 +860,7 @@ msgstr ""
" -v --version Вивід верÑÑ–Ñ— програми\n"
"\n"
-#: coffdump.c:532 srconv.c:1793 sysdump.c:705
+#: coffdump.c:532 srconv.c:1793 sysdump.c:711
msgid "no input file specified"
msgstr "не вказаний вхідний файл"
@@ -1003,7 +1008,7 @@ msgstr "ВиÑвлено Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð·Ð¼Ñ–Ð½Ð½Ð¾Ñ— без зазнач
msgid "%s: is not a COFF format file"
msgstr "%s: не є файлом у форматі COFF"
-#: cxxfilt.c:124 nm.c:324 objdump.c:390
+#: cxxfilt.c:124 nm.c:379 objdump.c:405
#, c-format
msgid "Report bugs to %s.\n"
msgstr "Звіти про помилки надÑилайте у %s\n"
@@ -1097,7 +1102,7 @@ msgstr "debug_find_named_type: немає поточного Ð¼Ð¾Ð´ÑƒÐ»Ñ ÐºÐ¾Ð¼
msgid "debug_get_real_type: circular debug information for %s\n"
msgstr "debug_get_real_type: циклічна діагноÑтична Ñ–Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ Ð´Ð»Ñ %s\n"
-#: debug.c:2484
+#: debug.c:2490
msgid "debug_write_type: illegal type encountered"
msgstr "debug_write_type: виÑвлено некоректний тип"
@@ -1125,437 +1130,437 @@ msgstr "Оброблено файл def"
msgid "Syntax error in def file %s:%d"
msgstr "Помилка ÑинтакÑиÑу у файлі def %s:%d"
-#: dlltool.c:1034
+#: dlltool.c:1032
#, c-format
msgid "%s: Path components stripped from image name, '%s'."
msgstr "%s: Компоненти шлÑху, що отримані з назви зображеннÑ, '%s'."
-#: dlltool.c:1052
+#: dlltool.c:1050
#, c-format
msgid "NAME: %s base: %x"
msgstr "NAME: %s base: %x"
-#: dlltool.c:1055 dlltool.c:1076
+#: dlltool.c:1053 dlltool.c:1074
msgid "Can't have LIBRARY and NAME"
msgstr "LIBRARY та NAME не можуть викориÑтовуватиÑÑŒ одночаÑно"
-#: dlltool.c:1073
+#: dlltool.c:1071
#, c-format
msgid "LIBRARY: %s base: %x"
msgstr "LIBRARY: %s база: %x"
-#: dlltool.c:1228
+#: dlltool.c:1226
#, c-format
msgid "VERSION %d.%d\n"
msgstr "ВЕРСІЯ %d.%d\n"
-#: dlltool.c:1276
+#: dlltool.c:1274
#, c-format
msgid "run: %s %s"
msgstr "запуÑк: %s %s"
-#: dlltool.c:1317 resrc.c:288
+#: dlltool.c:1315 resrc.c:288
#, c-format
msgid "wait: %s"
msgstr "очікуваннÑ: %s"
-#: dlltool.c:1322 dllwrap.c:416 resrc.c:293
+#: dlltool.c:1320 dllwrap.c:416 resrc.c:293
#, c-format
msgid "subprocess got fatal signal %d"
msgstr "Ð¿Ñ–Ð´Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð² критичний Ñигнал %d"
-#: dlltool.c:1328 dllwrap.c:423 resrc.c:300
+#: dlltool.c:1326 dllwrap.c:423 resrc.c:300
#, c-format
msgid "%s exited with status %d"
msgstr "%s завершений зі ÑтатуÑом %d"
-#: dlltool.c:1359
+#: dlltool.c:1357
#, c-format
msgid "Sucking in info from %s section in %s"
msgstr "ОтримуєтьÑÑ Ñ–Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ Ð· розділу %s в %s"
-#: dlltool.c:1499
+#: dlltool.c:1497
#, c-format
msgid "Excluding symbol: %s"
msgstr "Символ виключеннÑ: %s"
-#: dlltool.c:1588 dlltool.c:1599 nm.c:1172 nm.c:1183 nm.c:1193
+#: dlltool.c:1586 dlltool.c:1597 nm.c:1416 nm.c:1427 nm.c:1437
#, c-format
msgid "%s: no symbols"
msgstr "%s: немає Ñимволів"
#. FIXME: we ought to read in and block out the base relocations.
-#: dlltool.c:1625
+#: dlltool.c:1623
#, c-format
msgid "Done reading %s"
msgstr "Ð§Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð¾ %s"
-#: dlltool.c:1635
+#: dlltool.c:1633
#, c-format
msgid "Unable to open object file: %s: %s"
msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ об'єктний файл: %s: %s"
-#: dlltool.c:1638
+#: dlltool.c:1636
#, c-format
msgid "Scanning object file %s"
msgstr "СкануєтьÑÑ Ð¾Ð±'єктний файл %s"
-#: dlltool.c:1658
+#: dlltool.c:1656
#, c-format
msgid "Cannot produce mcore-elf dll from archive file: %s"
msgstr "Ðеможливо Ñформувати mcore-elf dll з файла архіву: %s"
-#: dlltool.c:1760
+#: dlltool.c:1758
msgid "Adding exports to output file"
msgstr "ЕкÑпортні дані додаютьÑÑ Ñƒ файл Ð´Ð»Ñ Ð²Ð¸Ð²Ð¾Ð´Ñƒ"
-#: dlltool.c:1812
+#: dlltool.c:1810
msgid "Added exports to output file"
msgstr "ЕкÑпортні дані додані у файл Ð´Ð»Ñ Ð²Ð¸Ð²Ð¾Ð´Ñƒ"
-#: dlltool.c:1980
+#: dlltool.c:1978
#, c-format
msgid "Generating export file: %s"
msgstr "СтворюєтьÑÑ Ñ„Ð°Ð¹Ð» екÑпорту: %s"
-#: dlltool.c:1985
+#: dlltool.c:1983
#, c-format
msgid "Unable to open temporary assembler file: %s"
msgstr "Ðеможливо відкрити тимчаÑовий файл аÑемблера: %s"
-#: dlltool.c:1990
+#: dlltool.c:1988
#, c-format
msgid "Opened temporary file: %s"
msgstr "Відкритий тимчаÑовий файл: %s"
-#: dlltool.c:2166
+#: dlltool.c:2164
msgid "failed to read the number of entries from base file"
msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ кількіÑÑ‚ÑŒ запиÑів з оÑновного файла"
-#: dlltool.c:2217
+#: dlltool.c:2215
msgid "Generated exports file"
msgstr "Створено файл екÑпорту"
-#: dlltool.c:2375
+#: dlltool.c:2373
#, c-format
msgid "bfd_open failed open stub file: %s: %s"
msgstr "bfd_open не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл stub: %s: %s"
-#: dlltool.c:2379
+#: dlltool.c:2377
#, c-format
msgid "Creating stub file: %s"
msgstr "СтворюєтьÑÑ Ñ„Ð°Ð¹Ð» stub: %s"
-#: dlltool.c:2693
+#: dlltool.c:2691
#, c-format
msgid "bfd_open failed reopen stub file: %s: %s"
msgstr "bfd_open не вдалоÑÑ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾ відкрити файл stub: %s: %s"
-#: dlltool.c:2707 dlltool.c:2786
+#: dlltool.c:2705 dlltool.c:2784
#, c-format
msgid "failed to open temporary head file: %s"
msgstr "помилка при відкриванні тимчаÑового файла заголовка: %s"
-#: dlltool.c:2771 dlltool.c:2861
+#: dlltool.c:2769 dlltool.c:2859
#, c-format
msgid "failed to open temporary head file: %s: %s"
msgstr "помилка при відкриванні тимчаÑового файла заголовка: %s: %s"
-#: dlltool.c:2876
+#: dlltool.c:2874
#, c-format
msgid "failed to open temporary tail file: %s"
msgstr "помилка при відкриванні тимчаÑового кінцевого файла: %s"
-#: dlltool.c:2912
+#: dlltool.c:2910
#, c-format
msgid "failed to open temporary tail file: %s: %s"
msgstr "помилка при відкриванні тимчаÑового кінцевого файла: %s: %s"
-#: dlltool.c:2935
+#: dlltool.c:2933
#, c-format
msgid "Can't create .lib file: %s: %s"
msgstr "Ðе вдалоÑÑ Ñтворити файл .lib: %s: %s"
-#: dlltool.c:2939
+#: dlltool.c:2937
#, c-format
msgid "Creating library file: %s"
msgstr "СтворюєтьÑÑ Ñ„Ð°Ð¹Ð» бібліотеки: %s"
-#: dlltool.c:3026 dlltool.c:3032
+#: dlltool.c:3024 dlltool.c:3030
#, c-format
msgid "cannot delete %s: %s"
msgstr "неможливо видалити %s: %s"
-#: dlltool.c:3038
+#: dlltool.c:3036
msgid "Created lib file"
msgstr "Створено lib-файл"
-#: dlltool.c:3244
+#: dlltool.c:3242
#, c-format
msgid "Can't open .lib file: %s: %s"
msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл .lib: %s: %s"
-#: dlltool.c:3252 dlltool.c:3274
+#: dlltool.c:3250 dlltool.c:3272
#, c-format
msgid "%s is not a library"
msgstr "%s не є бібліотекою"
-#: dlltool.c:3292
+#: dlltool.c:3290
#, c-format
msgid "Import library `%s' specifies two or more dlls"
msgstr "У імпортованій бібліотеці «%s» визначено дві або більше dll"
-#: dlltool.c:3303
+#: dlltool.c:3301
#, c-format
msgid "Unable to determine dll name for `%s' (not an import library?)"
msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ назву dll Ð´Ð»Ñ Â«%s» (не Ñ” імпортованою бібліотекою?)"
-#: dlltool.c:3529
+#: dlltool.c:3527
#, c-format
msgid "Warning, ignoring duplicate EXPORT %s %d,%d"
msgstr "ПопередженнÑ, пропуÑкаєтьÑÑ Ð´ÑƒÐ±Ð»Ñ–ÐºÐ°Ñ‚ EXPORT %s %d,%d"
-#: dlltool.c:3535
+#: dlltool.c:3533
#, c-format
msgid "Error, duplicate EXPORT with ordinals: %s"
msgstr "Помилка, EXPORT повторюєтьÑÑ Ð· порÑдковими чиÑлівниками: %s"
-#: dlltool.c:3638
+#: dlltool.c:3636
msgid "Processing definitions"
msgstr "ОброблюютьÑÑ Ð¾Ð¿Ð¸Ñи"
-#: dlltool.c:3665
+#: dlltool.c:3663
msgid "Processed definitions"
msgstr "ОпиÑи оброблені"
#. xgetext:c-format
-#: dlltool.c:3672 dllwrap.c:477
+#: dlltool.c:3670 dllwrap.c:477
#, c-format
msgid "Usage %s <option(s)> <object-file(s)>\n"
msgstr "ВикориÑÑ‚Ð°Ð½Ð½Ñ %s <ключі> <об'єктні_файли>\n"
#. xgetext:c-format
-#: dlltool.c:3674
+#: dlltool.c:3672
#, c-format
msgid " -m --machine <machine> Create as DLL for <machine>. [default: %s]\n"
msgstr " -m --machine <машина> Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñк DLL Ð´Ð»Ñ <машини>. [типово: %s]\n"
-#: dlltool.c:3675
+#: dlltool.c:3673
#, c-format
msgid " possible <machine>: arm[_interwork], i386, mcore[-elf]{-le|-be}, thumb\n"
msgstr " можливо <машина>: arm[_interwork], i386, mcore[-elf]{-le|-be}, thumb\n"
-#: dlltool.c:3676
+#: dlltool.c:3674
#, c-format
msgid " -e --output-exp <outname> Generate an export file.\n"
msgstr " -e --output-exp <вих_назва> Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð° екÑпорту.\n"
-#: dlltool.c:3677
+#: dlltool.c:3675
#, c-format
msgid " -l --output-lib <outname> Generate an interface library.\n"
msgstr " -l --output-lib <вих_назва> Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÐºÐ¸ інтерфейÑу.\n"
-#: dlltool.c:3678
+#: dlltool.c:3676
#, c-format
msgid " -y --output-delaylib <outname> Create a delay-import library.\n"
msgstr " -y --output-delaylib <вих_назва> Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÐºÐ¸ відкладеного імпортуваннÑ.\n"
-#: dlltool.c:3679
+#: dlltool.c:3677
#, c-format
msgid " -a --add-indirect Add dll indirects to export file.\n"
msgstr " -a --add-indirect Ð”Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð½ÐµÐ¿Ñ€Ñмих dll у файл екÑпорту.\n"
-#: dlltool.c:3680
+#: dlltool.c:3678
#, c-format
msgid " -D --dllname <name> Name of input dll to put into interface lib.\n"
msgstr " -D --dllname <назва> Ðазва вхідної dll Ð´Ð»Ñ Ñ€Ð¾Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ñƒ бібліотеці інтерфейÑу.\n"
-#: dlltool.c:3681
+#: dlltool.c:3679
#, c-format
msgid " -d --input-def <deffile> Name of .def file to be read in.\n"
msgstr " -d --input-def <def-файл> Ðазва файла .def Ð´Ð»Ñ Ð·Ñ‡Ð¸Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ.\n"
-#: dlltool.c:3682
+#: dlltool.c:3680
#, c-format
msgid " -z --output-def <deffile> Name of .def file to be created.\n"
msgstr " -z --output-def <def-файл> Ðазва файла .def, що ÑтворюєтьÑÑ.\n"
-#: dlltool.c:3683
+#: dlltool.c:3681
#, c-format
msgid " --export-all-symbols Export all symbols to .def\n"
msgstr " --export-all-symbols ЕкÑпорт вÑÑ–Ñ… Ñимволів у .def\n"
-#: dlltool.c:3684
+#: dlltool.c:3682
#, c-format
msgid " --no-export-all-symbols Only export listed symbols\n"
msgstr " --no-export-all-symbols ЕкÑпорт лише перелічених Ñимволів\n"
-#: dlltool.c:3685
+#: dlltool.c:3683
#, c-format
msgid " --exclude-symbols <list> Don't export <list>\n"
msgstr " --exclude-symbols <ÑпиÑок> Ðе екÑпортувати <ÑпиÑок>\n"
-#: dlltool.c:3686
+#: dlltool.c:3684
#, c-format
msgid " --no-default-excludes Clear default exclude symbols\n"
msgstr " --no-default-excludes ÐžÑ‡Ð¸Ñ‰ÐµÐ½Ð½Ñ Ñ‚Ð¸Ð¿Ð¾Ð²Ð¸Ñ… Ñимволів виключеннÑ\n"
-#: dlltool.c:3687
+#: dlltool.c:3685
#, c-format
msgid " -b --base-file <basefile> Read linker generated base file.\n"
msgstr " -b --base-file <base-файл> Ð§Ð¸Ñ‚Ð°Ð½Ð½Ñ Ñтвореного компонувальником base-файла.\n"
-#: dlltool.c:3688
+#: dlltool.c:3686
#, c-format
msgid " -x --no-idata4 Don't generate idata$4 section.\n"
msgstr " -x --no-idata4 Ðе Ñтворювати розділ idata$4.\n"
-#: dlltool.c:3689
+#: dlltool.c:3687
#, c-format
msgid " -c --no-idata5 Don't generate idata$5 section.\n"
msgstr " -c --no-idata5 Ðе Ñтворювати розділ idata$5.\n"
-#: dlltool.c:3690
+#: dlltool.c:3688
#, c-format
msgid " --use-nul-prefixed-import-tables Use zero prefixed idata$4 and idata$5.\n"
msgstr " --use-nul-prefixed-import-tables ВикориÑтовувати idata$4 Ñ– idata$5 з порожніми префікÑами.\n"
-#: dlltool.c:3691
+#: dlltool.c:3689
#, c-format
msgid " -U --add-underscore Add underscores to all symbols in interface library.\n"
msgstr " -U --add-underscore Ð”Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ñимволів підкреÑÐ»ÐµÐ½Ð½Ñ Ð´Ð¾ уÑÑ–Ñ… Ñимволів у бібліотеці інтерфейÑу.\n"
-#: dlltool.c:3692
+#: dlltool.c:3690
#, c-format
msgid " --add-stdcall-underscore Add underscores to stdcall symbols in interface library.\n"
msgstr " --add-stdcall-underscore Ð”Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ñимволів підкреÑÐ»ÐµÐ½Ð½Ñ stdcall-Ñимволів у бібліотеці інтерфейÑу.\n"
-#: dlltool.c:3693
+#: dlltool.c:3691
#, c-format
msgid " --no-leading-underscore All symbols shouldn't be prefixed by an underscore.\n"
msgstr " --no-leading-underscore Ð’ÑÑ– Ñимволи не повинні починатиÑÑ Ð· підкреÑлюваннÑ.\n"
-#: dlltool.c:3694
+#: dlltool.c:3692
#, c-format
msgid " --leading-underscore All symbols should be prefixed by an underscore.\n"
msgstr " --leading-underscore Ð’ÑÑ– Ñимволи мають починатиÑÑ Ð· підкреÑлюваннÑ.\n"
-#: dlltool.c:3695
+#: dlltool.c:3693
#, c-format
msgid " -k --kill-at Kill @<n> from exported names.\n"
msgstr " -k --kill-at Ð’Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ @<n> з екÑпортованих назв.\n"
-#: dlltool.c:3696
+#: dlltool.c:3694
#, c-format
msgid " -A --add-stdcall-alias Add aliases without @<n>.\n"
msgstr " -A --add-stdcall-alias Ð”Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð¿Ñевдонімів без @<n>.\n"
-#: dlltool.c:3697
+#: dlltool.c:3695
#, c-format
msgid " -p --ext-prefix-alias <prefix> Add aliases with <prefix>.\n"
msgstr " -p --ext-prefix-alias <префікÑ> Ð”Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð¿Ñевдонімів з <префікÑом>.\n"
-#: dlltool.c:3698
+#: dlltool.c:3696
#, c-format
msgid " -S --as <name> Use <name> for assembler.\n"
msgstr " -S --as <назва> ВикориÑÑ‚Ð°Ð½Ð½Ñ <назви> Ð´Ð»Ñ Ð°Ñемблера.\n"
-#: dlltool.c:3699
+#: dlltool.c:3697
#, c-format
msgid " -f --as-flags <flags> Pass <flags> to the assembler.\n"
msgstr " -f --as-flags <ключі> Передача <ключів> в аÑемблер.\n"
-#: dlltool.c:3700
+#: dlltool.c:3698
#, c-format
msgid " -C --compat-implib Create backward compatible import library.\n"
msgstr " -C --compat-implib Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÐºÐ¸ імпорту із зворотною ÑуміÑніÑÑ‚ÑŽ.\n"
-#: dlltool.c:3701
+#: dlltool.c:3699
#, c-format
msgid " -n --no-delete Keep temp files (repeat for extra preservation).\n"
msgstr " -n --no-delete Залишати тимчаÑові файли (повтор Ð´Ð»Ñ Ð´Ð¾Ð´Ð°Ñ‚ÐºÐ¾Ð²Ð¾Ð³Ð¾ захиÑту).\n"
-#: dlltool.c:3702
+#: dlltool.c:3700
#, c-format
msgid " -t --temp-prefix <prefix> Use <prefix> to construct temp file names.\n"
msgstr " -t --temp-prefix <префікÑ> ВикориÑÑ‚Ð°Ð½Ð½Ñ <префікÑу> Ð´Ð»Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð½Ð°Ð·Ð² чаÑових файлів.\n"
-#: dlltool.c:3703
+#: dlltool.c:3701
#, c-format
msgid " -I --identify <implib> Report the name of the DLL associated with <implib>.\n"
msgstr " -I --identify <імпбібл> Повідомити про назву DLL, пов'Ñзаної з <імпбібл>.\n"
-#: dlltool.c:3704
+#: dlltool.c:3702
#, c-format
msgid " --identify-strict Causes --identify to report error when multiple DLLs.\n"
msgstr " --identify-strict Змушує --identify повідомлÑти про помилку, Ñкщо визначено декілька DLL.\n"
-#: dlltool.c:3705
+#: dlltool.c:3703
#, c-format
msgid " -v --verbose Be verbose.\n"
msgstr " -v --verbose Режим з докладним виводом.\n"
-#: dlltool.c:3706
+#: dlltool.c:3704
#, c-format
msgid " -V --version Display the program version.\n"
msgstr " -V --version Ð’Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð²ÐµÑ€ÑÑ–Ñ— програми.\n"
-#: dlltool.c:3707
+#: dlltool.c:3705
#, c-format
msgid " -h --help Display this information.\n"
msgstr " -h --help Ð’Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ñ†Ñ–Ñ”Ñ— інформації.\n"
-#: dlltool.c:3708
+#: dlltool.c:3706
#, c-format
msgid " @<file> Read options from <file>.\n"
msgstr " @<файл> Читати ключі з <файла>.\n"
-#: dlltool.c:3710
+#: dlltool.c:3708
#, c-format
msgid " -M --mcore-elf <outname> Process mcore-elf object files into <outname>.\n"
msgstr " -M --mcore-elf <вих_назва> Обробка об'єктного файла mcore-elf у <вих_назва>.\n"
-#: dlltool.c:3711
+#: dlltool.c:3709
#, c-format
msgid " -L --linker <name> Use <name> as the linker.\n"
msgstr " -L --linker <назва> ВикориÑÑ‚Ð°Ð½Ð½Ñ <назви> у ÑкоÑÑ‚Ñ– компонувальника.\n"
-#: dlltool.c:3712
+#: dlltool.c:3710
#, c-format
msgid " -F --linker-flags <flags> Pass <flags> to the linker.\n"
msgstr " -F --linker-flags <ознаки> Передача <ознак> компонувальнику.\n"
-#: dlltool.c:3856
+#: dlltool.c:3854
#, c-format
msgid "Unable to open def-file: %s"
msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл def: %s"
-#: dlltool.c:3861
+#: dlltool.c:3859
#, c-format
msgid "Path components stripped from dllname, '%s'."
msgstr "Компоненти шлÑху, що отримані з назви dll, '%s'."
-#: dlltool.c:3909
+#: dlltool.c:3907
#, c-format
msgid "Unable to open base-file: %s"
msgstr "Ðеможливо відкрити base-файл: %s"
-#: dlltool.c:3944
+#: dlltool.c:3956
#, c-format
msgid "Machine '%s' not supported"
msgstr "Машина '%s' не підтримуєтьÑÑ"
-#: dlltool.c:4024
+#: dlltool.c:4036
#, c-format
msgid "Warning, machine type (%d) not supported for delayimport."
msgstr "ПопередженнÑ, не передбачено підтримки типу архітектури (%d) Ð´Ð»Ñ Ð²Ñ–Ð´ÐºÐ»Ð°Ð´ÐµÐ½Ð¾Ð³Ð¾ імпортуваннÑ."
-#: dlltool.c:4092 dllwrap.c:206
+#: dlltool.c:4104 dllwrap.c:206
#, c-format
msgid "Tried file: %s"
msgstr "Випробуваний файл: %s"
-#: dlltool.c:4099 dllwrap.c:213
+#: dlltool.c:4111 dllwrap.c:213
#, c-format
msgid "Using file: %s"
msgstr "ВикориÑтовуєтьÑÑ Ñ„Ð°Ð¹Ð»: %s"
@@ -2124,278 +2129,278 @@ msgstr "Ðевідоме Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ AT: %lx"
msgid "Corrupt attribute block length: %lx\n"
msgstr "Пошкоджено довжину блоку атрибутів: %lx\n"
-#: dwarf.c:2094
+#: dwarf.c:2095
#, c-format
msgid "Unable to resolve ref_addr form: uvalue %lx > section size %lx (%s)\n"
msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ форму ref_addr: uvalue %lx > розмір розділу %lx (%s)\n"
-#: dwarf.c:2111
+#: dwarf.c:2112
#, c-format
-msgid "Unable to resolve ref form: uvalue %lx + cu_offset %lx > section size %lx\n"
-msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ форму поÑиланнÑ: uvalue %lx + cu_offset %lx > розмір розділу %lx\n"
+msgid "Unable to resolve ref form: uvalue %lx + cu_offset %lx > CU size %lx\n"
+msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ форму поÑиланнÑ: uvalue %lx + cu_offset %lx > розмір CU %lx\n"
-#: dwarf.c:2121
+#: dwarf.c:2122
#, c-format
msgid "Unexpected form %lx encountered whilst finding abbreviation for type\n"
msgstr "ВиÑвлено неочікувану форму %lx під Ñ‡Ð°Ñ Ð¿Ð¾ÑˆÑƒÐºÑƒ ÑÐºÐ¾Ñ€Ð¾Ñ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ñ‚Ð¸Ð¿Ñƒ\n"
-#: dwarf.c:2130
+#: dwarf.c:2131
#, c-format
msgid "Unable to find abbreviations for CU offset %#lx\n"
msgstr "Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ ÑÐºÐ¾Ñ€Ð¾Ñ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð·Ñуву CU %#lx\n"
-#: dwarf.c:2135
+#: dwarf.c:2136
#, c-format
msgid "Empty abbreviation list encountered for CU offset %lx\n"
msgstr "ВиÑвлено порожній ÑпиÑок Ñкорочень Ð´Ð»Ñ Ð·Ñуву CU %lx\n"
-#: dwarf.c:2160
+#: dwarf.c:2161
#, c-format
msgid "Unable to find entry for abbreviation %lu\n"
msgstr "Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ð·Ð°Ð¿Ð¸Ñ Ð´Ð»Ñ ÑÐºÐ¾Ñ€Ð¾Ñ‡ÐµÐ½Ð½Ñ %lu\n"
-#: dwarf.c:2310
+#: dwarf.c:2313
msgid "corrupt discr_list - not using a block form\n"
msgstr "пошкоджено discr_list — не викориÑтовуємо блокову форму\n"
-#: dwarf.c:2317
+#: dwarf.c:2320
msgid "corrupt discr_list - block not long enough\n"
msgstr "пошкоджено discr_list — блок є надто коротким\n"
-#: dwarf.c:2361
+#: dwarf.c:2355
#, c-format
msgid "corrupt discr_list - unrecognized discriminant byte %#x\n"
msgstr "пошкоджено discr_list — невідомий байт критерію Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð²Ð°Ð½Ð½Ñ %#x\n"
-#: dwarf.c:2402
+#: dwarf.c:2396
msgid "Corrupt attribute\n"
msgstr "Пошкоджений атрибут\n"
-#: dwarf.c:2428
+#: dwarf.c:2422
msgid "Internal error: DW_FORM_ref_addr is not supported in DWARF version 1.\n"
msgstr "Ð’Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: підтримки DW_FORM_ref_addr у верÑÑ–Ñ— 1 DWARF не передбачено.\n"
-#: dwarf.c:2610
+#: dwarf.c:2604
msgid "Block ends prematurely\n"
msgstr "Ðадто раннє Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ð±Ð»Ð¾ÐºÑƒ\n"
#. We have already displayed the form name.
-#: dwarf.c:2640 dwarf.c:2655 dwarf.c:2678
+#: dwarf.c:2634 dwarf.c:2649 dwarf.c:2672
#, c-format
msgid "%c(offset: 0x%s): %s"
msgstr "%c(зÑув: 0x%s): %s"
-#: dwarf.c:2644
+#: dwarf.c:2638
#, c-format
msgid "%c(indirect string, offset: 0x%s): %s"
msgstr "%c(опоÑередкований Ñ€Ñдок, зÑув: 0x%s): %s"
-#: dwarf.c:2659
+#: dwarf.c:2653
#, c-format
msgid "%c(indirect line string, offset: 0x%s): %s"
msgstr "%c(опоÑередкований Ñ€Ñдок, зÑув: 0x%s): %s"
-#: dwarf.c:2682
+#: dwarf.c:2676
#, c-format
msgid "%c(indexed string: 0x%s): %s"
msgstr "%c(індекÑований Ñ€Ñдок: 0x%s): %s"
#. We have already displayed the form name.
-#: dwarf.c:2693
+#: dwarf.c:2687
#, c-format
msgid "%c(offset: 0x%s) %s"
msgstr "%c(зÑув: 0x%s) %s"
-#: dwarf.c:2697
+#: dwarf.c:2691
#, c-format
msgid "%c(alt indirect string, offset: 0x%s) %s"
msgstr "%c(альтернативний опоÑередкований Ñ€Ñдок, зÑув: 0x%s) %s"
#. We have already displayed the form name.
-#: dwarf.c:2735
+#: dwarf.c:2729
#, c-format
msgid "%c(index: 0x%s): %s"
msgstr "%c(індекÑ: 0x%s): %s"
-#: dwarf.c:2739
+#: dwarf.c:2733
#, c-format
msgid "%c(addr_index: 0x%s): %s"
msgstr "%c(addr_index: 0x%s): %s"
-#: dwarf.c:2751
+#: dwarf.c:2745
#, c-format
msgid "Unrecognized form: 0x%lx\n"
msgstr "Ðевідома форма: 0x%lx\n"
-#: dwarf.c:2812
+#: dwarf.c:2808
msgid "More location offset attributes than DW_AT_GNU_locview attributes\n"
msgstr "Більше атрибутів зÑуву міÑÑ†Ñ Ð·Ð° кількіÑÑ‚ÑŒ атрибутів DW_AT_GNU_locview\n"
-#: dwarf.c:2824
+#: dwarf.c:2820
msgid "More DW_AT_GNU_locview attributes than location offset attributes\n"
msgstr "Більше атрибутів DW_AT_GNU_locview за кількіÑÑ‚ÑŒ атрибутів зÑуву міÑцÑ\n"
-#: dwarf.c:2893 dwarf.c:2925 dwarf.c:2940
+#: dwarf.c:2889 dwarf.c:2921 dwarf.c:2936
#, c-format
msgid "Unsupported form (%s) for attribute %s\n"
msgstr "Ðепідтримувана форма (%s) атрибута %s\n"
-#: dwarf.c:2985
+#: dwarf.c:2983
#, c-format
msgid "(not inlined)"
msgstr "(не вÑередині Ñ€Ñдка)"
-#: dwarf.c:2988
+#: dwarf.c:2986
#, c-format
msgid "(inlined)"
msgstr "(вÑередині Ñ€Ñдка)"
-#: dwarf.c:2991
+#: dwarf.c:2989
#, c-format
msgid "(declared as inline but ignored)"
msgstr "(оголошений Ñк inline, але пропущений)"
-#: dwarf.c:2994
+#: dwarf.c:2992
#, c-format
msgid "(declared as inline and inlined)"
msgstr "(оголошений Ñк inline, так Ñ– Ñ”)"
-#: dwarf.c:2997
+#: dwarf.c:2995
#, c-format
msgid " (Unknown inline attribute value: %s)"
msgstr " (Ðевідоме Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð±ÑƒÐ´Ð¾Ð²Ð°Ð½Ð¾Ð³Ð¾ атрибута: %s)"
-#: dwarf.c:3054
+#: dwarf.c:3052
#, c-format
msgid "(implementation defined: %s)"
msgstr "(визначено реалізацією: %s)"
-#: dwarf.c:3057
+#: dwarf.c:3055
#, c-format
msgid "(Unknown: %s)"
msgstr "(Ðевідомо: %s)"
-#: dwarf.c:3102
+#: dwarf.c:3100
#, c-format
msgid "(user defined type)"
msgstr "(визначений кориÑтувачем тип)"
-#: dwarf.c:3104
+#: dwarf.c:3102
#, c-format
msgid "(unknown type)"
msgstr "(невідомий тип)"
-#: dwarf.c:3117
+#: dwarf.c:3115
#, c-format
msgid "(unknown accessibility)"
msgstr "(невідома доÑтупніÑÑ‚ÑŒ)"
-#: dwarf.c:3129
+#: dwarf.c:3127
#, c-format
msgid "(unknown visibility)"
msgstr "(невідома видиміÑÑ‚ÑŒ)"
-#: dwarf.c:3142
+#: dwarf.c:3140
#, c-format
msgid "(user specified)"
msgstr "(визначено кориÑтувачем)"
-#: dwarf.c:3144
+#: dwarf.c:3142
#, c-format
msgid "(unknown endianity)"
msgstr "(невідомий порÑдок байтів)"
-#: dwarf.c:3156
+#: dwarf.c:3154
#, c-format
msgid "(unknown virtuality)"
msgstr "(невідома віртуальніÑÑ‚ÑŒ)"
-#: dwarf.c:3168
+#: dwarf.c:3166
#, c-format
msgid "(unknown case)"
msgstr "(невідомий випадок)"
-#: dwarf.c:3186
+#: dwarf.c:3184
#, c-format
msgid "(user defined)"
msgstr "(визначено кориÑтувачем)"
-#: dwarf.c:3188
+#: dwarf.c:3186
#, c-format
msgid "(unknown convention)"
msgstr "(невідома угода)"
-#: dwarf.c:3197
+#: dwarf.c:3195
#, c-format
msgid "(undefined)"
msgstr "(не визначено)"
-#: dwarf.c:3207
+#: dwarf.c:3205
#, c-format
msgid "(unsigned)"
msgstr "(без знаку)"
-#: dwarf.c:3208
+#: dwarf.c:3206
#, c-format
msgid "(leading overpunch)"
msgstr "(початкове overpunch)"
-#: dwarf.c:3209
+#: dwarf.c:3207
#, c-format
msgid "(trailing overpunch)"
msgstr "(завершальне overpunch)"
-#: dwarf.c:3210
+#: dwarf.c:3208
#, c-format
msgid "(leading separate)"
msgstr "(початкове separate)"
-#: dwarf.c:3211
+#: dwarf.c:3209
#, c-format
msgid "(trailing separate)"
msgstr "(завершальне separate)"
-#: dwarf.c:3212 dwarf.c:3223
+#: dwarf.c:3210 dwarf.c:3221
#, c-format
msgid "(unrecognised)"
msgstr "(не розпізнано)"
-#: dwarf.c:3220
+#: dwarf.c:3218
#, c-format
msgid "(no)"
msgstr "(ні)"
-#: dwarf.c:3221
+#: dwarf.c:3219
#, c-format
msgid "(in class)"
msgstr "(у клаÑÑ–)"
-#: dwarf.c:3222
+#: dwarf.c:3220
#, c-format
msgid "(out of class)"
msgstr "(поза клаÑом)"
-#: dwarf.c:3254
+#: dwarf.c:3252
#, c-format
msgid " (location list)"
msgstr " (ÑпиÑок розташуваннÑ)"
-#: dwarf.c:3275 dwarf.c:6444 dwarf.c:6614 dwarf.c:6789
+#: dwarf.c:3273 dwarf.c:6449 dwarf.c:6620 dwarf.c:6796
#, c-format
msgid " [without DW_AT_frame_base]"
msgstr " [без DW_AT_frame_base]"
-#: dwarf.c:3305
+#: dwarf.c:3303
#, c-format
msgid "Offset %s used as value for DW_AT_import attribute of DIE at offset 0x%lx is too big.\n"
msgstr "ЗÑув %s, викориÑтаний Ñк Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð° DW_AT_import DIE за зÑувом 0x%lx, Ñ” надто великим.\n"
-#: dwarf.c:3311
+#: dwarf.c:3309
#, c-format
msgid "\t[Abbrev Number: %ld"
msgstr "\t[Ðомер абревіатури: %ld"
-#: dwarf.c:3406
+#: dwarf.c:3404
#, c-format
msgid ""
"Raw dump of debug contents of section %s (loaded from %s):\n"
@@ -2404,7 +2409,7 @@ msgstr ""
"Ðеоброблений дамп діагноÑтичних даних розділу %s (завантаженого з %s):\n"
"\n"
-#: dwarf.c:3409
+#: dwarf.c:3407
#, c-format
msgid ""
"Raw dump of debug contents of section %s:\n"
@@ -2413,7 +2418,7 @@ msgstr ""
"Ðеоброблений дамп діагноÑтичних даних розділу %s:\n"
"\n"
-#: dwarf.c:3414
+#: dwarf.c:3412
#, c-format
msgid ""
"Contents of the %s section (loaded from %s):\n"
@@ -2422,7 +2427,7 @@ msgstr ""
"ВміÑÑ‚ розділу %s (завантаженого з %s):\n"
"\n"
-#: dwarf.c:3417
+#: dwarf.c:3415
#, c-format
msgid ""
"Contents of the %s section:\n"
@@ -2431,15 +2436,15 @@ msgstr ""
"ВміÑÑ‚ розділу %s:\n"
"\n"
-#: dwarf.c:3460
+#: dwarf.c:3458
#, c-format
msgid "Reserved length value (0x%s) found in section %s\n"
msgstr "ВиÑвлено зарезервоване Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð¸ (0x%s) у розділі %s\n"
-#: dwarf.c:3470
+#: dwarf.c:3468
#, c-format
-msgid "Corrupt unit length (0x%s) found in section %s\n"
-msgstr "ÐŸÐ¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… щодо довжини Ð¼Ð¾Ð´ÑƒÐ»Ñ (0x%s) у розділі %s\n"
+msgid "Corrupt unit length (got 0x%s expected at most 0x%s) in section %s\n"
+msgstr "ÐŸÐ¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… щодо довжини Ð¼Ð¾Ð´ÑƒÐ»Ñ (отримано 0x%s, мало бути принаймні 0x%s) у розділі %s\n"
#: dwarf.c:3479
#, c-format
@@ -2583,7 +2588,7 @@ msgstr "ВміÑÑ‚ Ð¿Ð¾Ð»Ñ Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð¸ (0x%lx) у заголовку debug_l
msgid "Only DWARF version 2, 3, 4 and 5 line info is currently supported.\n"
msgstr "У поточній верÑÑ–Ñ— передбачено підтримку даних Ñ€Ñдків лише DWARF верÑій 2, 3, 4 або 5.\n"
-#: dwarf.c:4126 dwarf.c:6882 dwarf.c:7747
+#: dwarf.c:4126 dwarf.c:6889 dwarf.c:7763
#, c-format
msgid "The %s section contains unsupported segment selector size: %d.\n"
msgstr "Розділ %s міÑтить непідтримуваний розмір Ñелектора Ñегмента: %d.\n"
@@ -2744,7 +2749,7 @@ msgstr " Контрольна Ñума: "
msgid "Partial .debug_line. section encountered without a prior full .debug_line section\n"
msgstr "ВиÑвлено чаÑтковий розділ .debug_line. без попереднього повного розділу .debug_line\n"
-#: dwarf.c:4412 dwarf.c:5962
+#: dwarf.c:4412 dwarf.c:5967
#, c-format
msgid " Offset: 0x%lx\n"
msgstr " ЗÑув: 0x%lx\n"
@@ -2975,7 +2980,7 @@ msgstr " Ð’ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ epilogue_begin в `Ñ–Ñтина'\n"
msgid " Set ISA to %s\n"
msgstr " Ð’ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ ISA у Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ %s\n"
-#: dwarf.c:4755 dwarf.c:5392
+#: dwarf.c:4755 dwarf.c:5394
#, c-format
msgid " Unknown opcode %d with operands: "
msgstr " Ðевідомий код операції %d Ñ Ð¾Ð¿ÐµÑ€Ð°Ð½Ð´Ð°Ð¼Ð¸: "
@@ -3021,22 +3026,22 @@ msgstr "CU: немає таблиці каталогів\n"
msgid "CU: %s:\n"
msgstr "CU: %s:\n"
-#: dwarf.c:5130 dwarf.c:5430 readelf.c:6373 readelf.c:6470 readelf.c:6488
-#: readelf.c:6506 readelf.c:7306 readelf.c:11504 readelf.c:12169
-#: readelf.c:12182 readelf.c:17545 readelf.c:17577
+#: dwarf.c:5130 dwarf.c:5435 readelf.c:6715 readelf.c:6812 readelf.c:6830
+#: readelf.c:6848 readelf.c:7652 readelf.c:11854 readelf.c:12519
+#: readelf.c:12532 readelf.c:17921 readelf.c:17953
msgid "<unknown>"
msgstr "<невідомий>"
-#: dwarf.c:5133 dwarf.c:5322
+#: dwarf.c:5133 dwarf.c:5324
#, c-format
msgid "directory index %u > number of directories %s\n"
msgstr "Ñ–Ð½Ð´ÐµÐºÑ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñƒ %u > кількіÑÑ‚ÑŒ каталогів %s\n"
-#: dwarf.c:5135 dwarf.c:5424 elfcomm.c:777 readelf.c:356 readelf.c:745
-#: readelf.c:7483 readelf.c:8044 readelf.c:10075 readelf.c:12496
-#: readelf.c:12562 readelf.c:12566 readelf.c:12634 readelf.c:12639
-#: readelf.c:16278 readelf.c:16367 readelf.c:16960 readelf.c:16979
-#: readelf.c:17098 readelf.c:17554 readelf.c:18710 readelf.c:18713
+#: dwarf.c:5135 dwarf.c:5429 elfcomm.c:777 readelf.c:389 readelf.c:923
+#: readelf.c:7830 readelf.c:8393 readelf.c:10429 readelf.c:12871
+#: readelf.c:12937 readelf.c:12941 readelf.c:13013 readelf.c:13018
+#: readelf.c:16651 readelf.c:16740 readelf.c:17333 readelf.c:17352
+#: readelf.c:17471 readelf.c:17930 readelf.c:19085 readelf.c:19088
#, c-format
msgid "<corrupt>"
msgstr "<пошкоджено>"
@@ -3061,7 +3066,7 @@ msgstr "CU: Ð¿Ð¾Ñ€Ð¾Ð¶Ð½Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ð½Ð°Ð·Ð² файлів\n"
msgid "UNKNOWN (%u): length %ld\n"
msgstr "ÐЕВІДОМО (%u): довжина %ld\n"
-#: dwarf.c:5306
+#: dwarf.c:5308
#, c-format
msgid ""
"\n"
@@ -3070,12 +3075,12 @@ msgstr ""
"\n"
" [ВикориÑÑ‚Ð°Ð½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñу таблиці файлів %d]\n"
-#: dwarf.c:5310
+#: dwarf.c:5312
#, c-format
msgid "file index %u > number of files %u\n"
msgstr "Ñ–Ð½Ð´ÐµÐºÑ Ñ„Ð°Ð¹Ð»Ð° %u > кількіÑÑ‚ÑŒ файлів %u\n"
-#: dwarf.c:5311
+#: dwarf.c:5313
#, c-format
msgid ""
"\n"
@@ -3084,7 +3089,7 @@ msgstr ""
"\n"
" <надто великий Ñ–Ð½Ð´ÐµÐºÑ Ñƒ таблиці файлів, %u>"
-#: dwarf.c:5317
+#: dwarf.c:5319
#, c-format
msgid ""
"\n"
@@ -3093,7 +3098,7 @@ msgstr ""
"\n"
" [ВикориÑÑ‚Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð° %s у запиÑÑ– таблиці каталогів %d]\n"
-#: dwarf.c:5324
+#: dwarf.c:5326
#, c-format
msgid ""
"\n"
@@ -3102,83 +3107,83 @@ msgstr ""
"\n"
" <надто великий номер запиÑу у таблиці каталогів, %u>\n"
-#: dwarf.c:5388
+#: dwarf.c:5390
#, c-format
msgid " Set ISA to %lu\n"
msgstr " Ð’ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ ISA в %lu\n"
-#: dwarf.c:5423
+#: dwarf.c:5428
#, c-format
msgid "corrupt file index %u encountered\n"
msgstr "виÑвлено пошкоджений Ñ–Ð½Ð´ÐµÐºÑ Ñ„Ð°Ð¹Ð»Ð° %u\n"
-#: dwarf.c:5592
+#: dwarf.c:5597
msgid "no info"
msgstr "немає інформації"
-#: dwarf.c:5593
+#: dwarf.c:5598
msgid "type"
msgstr "тип"
-#: dwarf.c:5594
+#: dwarf.c:5599
msgid "variable"
msgstr "змінна"
-#: dwarf.c:5595
+#: dwarf.c:5600
msgid "function"
msgstr "функціÑ"
-#: dwarf.c:5596
+#: dwarf.c:5601
msgid "other"
msgstr "інше"
-#: dwarf.c:5597
+#: dwarf.c:5602
msgid "unused5"
msgstr "невикориÑтане5"
-#: dwarf.c:5598
+#: dwarf.c:5603
msgid "unused6"
msgstr "невикориÑтане6"
-#: dwarf.c:5599
+#: dwarf.c:5604
msgid "unused7"
msgstr "невикориÑтане7"
-#: dwarf.c:5637 dwarf.c:7210 dwarf.c:9605
+#: dwarf.c:5642 dwarf.c:7220 dwarf.c:9626
#, c-format
msgid "Debug info is corrupted, %s header at %#lx has length %s\n"
msgstr "ДіагноÑтичні дані пошкоджено, довжина заголовка %s за адреÑою %#lx Ñкладає %s\n"
-#: dwarf.c:5653 dwarf.c:7225
+#: dwarf.c:5658 dwarf.c:7235
#, c-format
msgid ".debug_info offset of 0x%lx in %s section does not point to a CU header.\n"
msgstr "ЗÑув .debug_info 0x%lx у розділі %s не вказує на заголовок CU.\n"
-#: dwarf.c:5658
+#: dwarf.c:5663
#, c-format
msgid " Length: %ld\n"
msgstr " Довжина: %ld\n"
-#: dwarf.c:5660
+#: dwarf.c:5665
#, c-format
msgid " Version: %d\n"
msgstr " ВерÑÑ–Ñ: %d\n"
-#: dwarf.c:5662
+#: dwarf.c:5667
#, c-format
msgid " Offset into .debug_info section: 0x%lx\n"
msgstr " ЗÑув до розділу .debug_info: 0x%lx\n"
-#: dwarf.c:5664
+#: dwarf.c:5669
#, c-format
msgid " Size of area in .debug_info section: %ld\n"
msgstr " Розм. облаÑÑ‚Ñ– у розділі .debug_info: %ld\n"
-#: dwarf.c:5673
+#: dwarf.c:5678
msgid "Only DWARF 2 and 3 pubnames are currently supported\n"
msgstr "Ðаразі підтримуютьÑÑ pubname лише Ð´Ð»Ñ DWARF верÑÑ–Ñ— 2 Ñ– 3\n"
-#: dwarf.c:5681
+#: dwarf.c:5686
#, c-format
msgid ""
"\n"
@@ -3187,7 +3192,7 @@ msgstr ""
"\n"
" ЗÑув Тип Ðазва\n"
-#: dwarf.c:5683
+#: dwarf.c:5688
#, c-format
msgid ""
"\n"
@@ -3196,217 +3201,217 @@ msgstr ""
"\n"
" ЗÑув\tÐазва\n"
-#: dwarf.c:5717
+#: dwarf.c:5722
msgid "s"
msgstr "Ñ"
-#: dwarf.c:5717
+#: dwarf.c:5722
msgid "g"
msgstr "з"
-#: dwarf.c:5775
+#: dwarf.c:5780
#, c-format
msgid " DW_MACINFO_start_file - lineno: %d filenum: %d\n"
msgstr " DW_MACINFO_start_file - номер_Ñ€Ñдка: %d номер_файла: %d\n"
-#: dwarf.c:5781
+#: dwarf.c:5786
#, c-format
msgid " DW_MACINFO_end_file\n"
msgstr " DW_MACINFO_end_file\n"
-#: dwarf.c:5788
+#: dwarf.c:5793
#, c-format
msgid " DW_MACINFO_define - lineno : %d macro : %*s\n"
msgstr " DW_MACINFO_define - номер_Ñ€Ñдка : %d Ð¼Ð°ÐºÑ€Ð¾Ñ : %*s\n"
-#: dwarf.c:5798
+#: dwarf.c:5803
#, c-format
msgid " DW_MACINFO_undef - lineno : %d macro : %*s\n"
msgstr " DW_MACINFO_undef - номер_Ñ€Ñдка : %d Ð¼Ð°ÐºÑ€Ð¾Ñ : %*s\n"
-#: dwarf.c:5811
+#: dwarf.c:5816
#, c-format
msgid " DW_MACINFO_vendor_ext - constant : %d string : %*s\n"
msgstr " DW_MACINFO_vendor_ext - конÑтанта : %d Ñ€Ñдок : %*s\n"
-#: dwarf.c:5955
+#: dwarf.c:5960
#, c-format
msgid "Expected to find a version number of 4 or 5 in section %s but found %d instead\n"
msgstr "Мало бути вказано номер верÑÑ–Ñ— 4 або 5 у розділі %s, але виÑвлено номер верÑÑ–Ñ— %d\n"
-#: dwarf.c:5964
+#: dwarf.c:5969
#, c-format
msgid " Version: %d\n"
msgstr " ВерÑÑ–Ñ: %d\n"
-#: dwarf.c:5965
+#: dwarf.c:5970
#, c-format
msgid " Offset size: %d\n"
msgstr " Розмір зÑуву: %d\n"
-#: dwarf.c:5969
+#: dwarf.c:5974
#, c-format
msgid " Offset into .debug_line: 0x%lx\n"
msgstr " ЗÑув до .debug_line: 0x%lx\n"
-#: dwarf.c:5983
+#: dwarf.c:5988
#, c-format
msgid " Extension opcode arguments:\n"
msgstr " Ðргументи коду операції розширеннÑ:\n"
-#: dwarf.c:5990
+#: dwarf.c:5995
#, c-format
msgid " DW_MACRO_%02x has no arguments\n"
msgstr " DW_MACRO_%02x не має аргументів\n"
-#: dwarf.c:5993
+#: dwarf.c:5998
#, c-format
msgid " DW_MACRO_%02x arguments: "
msgstr " Ðргументи DW_MACRO_%02x: "
-#: dwarf.c:6019
+#: dwarf.c:6024
#, c-format
msgid "Invalid extension opcode form %s\n"
msgstr "Ðекоректна форма коду операції розширеннÑ, %s\n"
-#: dwarf.c:6036
+#: dwarf.c:6041
msgid ".debug_macro section not zero terminated\n"
msgstr "Розділ .debug_macro не завершуєтьÑÑ Ð½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¼ байтом\n"
-#: dwarf.c:6050
+#: dwarf.c:6055
#, c-format
msgid " DW_MACRO_define - lineno : %d macro : %*s\n"
msgstr " DW_MACRO_define - номер_Ñ€Ñдка : %d Ð¼Ð°ÐºÑ€Ð¾Ñ : %*s\n"
-#: dwarf.c:6060
+#: dwarf.c:6065
#, c-format
msgid " DW_MACRO_undef - lineno : %d macro : %*s\n"
msgstr " DW_MACRO_undef - номер_Ñ€Ñдка : %d Ð¼Ð°ÐºÑ€Ð¾Ñ : %*s\n"
-#: dwarf.c:6075
+#: dwarf.c:6080
msgid "DW_MACRO_start_file used, but no .debug_line offset provided.\n"
msgstr "ВикориÑтано DW_MACRO_start_file, але не надано зÑуву .debug_line.\n"
-#: dwarf.c:6081
+#: dwarf.c:6086
#, c-format
msgid " DW_MACRO_start_file - lineno: %d filenum: %d\n"
msgstr " DW_MACRO_start_file - номер_Ñ€Ñдка: %d номер_файла: %d\n"
-#: dwarf.c:6084
+#: dwarf.c:6089
#, c-format
msgid " DW_MACRO_start_file - lineno: %d filenum: %d filename: %s%s%s\n"
msgstr " DW_MACRO_start_file - номер_Ñ€Ñдка: %d номер_файла: %d назва файла: %s%s%s\n"
-#: dwarf.c:6092
+#: dwarf.c:6097
#, c-format
msgid " DW_MACRO_end_file\n"
msgstr " DW_MACRO_end_file\n"
-#: dwarf.c:6102
+#: dwarf.c:6107
#, c-format
msgid " DW_MACRO_define_strp - lineno : %d macro : %s\n"
msgstr " DW_MACRO_define_strp - номер_Ñ€Ñдка : %d Ð¼Ð°ÐºÑ€Ð¾Ñ : %s\n"
-#: dwarf.c:6113
+#: dwarf.c:6118
#, c-format
msgid " DW_MACRO_undef_strp - lineno : %d macro : %s\n"
msgstr " DW_MACRO_undef_strp - номер_Ñ€Ñдка : %d Ð¼Ð°ÐºÑ€Ð¾Ñ : %s\n"
-#: dwarf.c:6119
+#: dwarf.c:6124
#, c-format
msgid " DW_MACRO_import - offset : 0x%lx\n"
msgstr " DW_MACRO_import - зÑув: 0x%lx\n"
-#: dwarf.c:6126
+#: dwarf.c:6131
#, c-format
msgid " DW_MACRO_define_sup - lineno : %d macro offset : 0x%lx\n"
msgstr " DW_MACRO_define_sup - номер Ñ€Ñдка: %d зÑув макроÑу: 0x%lx\n"
-#: dwarf.c:6133
+#: dwarf.c:6138
#, c-format
msgid " DW_MACRO_undef_sup - lineno : %d macro offset : 0x%lx\n"
msgstr " DW_MACRO_undef_sup - номер Ñ€Ñдка: %d зÑув макроÑу: 0x%lx\n"
-#: dwarf.c:6139
+#: dwarf.c:6144
#, c-format
msgid " DW_MACRO_import_sup - offset : 0x%lx\n"
msgstr " DW_MACRO_import_sup - зÑув: 0x%lx\n"
-#: dwarf.c:6154
+#: dwarf.c:6159
#, c-format
msgid "(with offset %s) "
msgstr "(зі зÑувом %s) "
-#: dwarf.c:6155
+#: dwarf.c:6160
#, c-format
msgid "lineno : %d macro : %s\n"
msgstr "номер Ñ€Ñдка: %d Ð¼Ð°ÐºÑ€Ð¾Ñ : %s\n"
-#: dwarf.c:6162
+#: dwarf.c:6167
#, c-format
msgid " <Target Specific macro op: %#x - UNHANDLED"
msgstr " <Оператор макроÑу, Ñпецифічний Ð´Ð»Ñ Ñ†Ñ–Ð»Ñ–: %#x - ÐЕПРИДÐТÐИЙ ДО ОБРОБКИ"
-#: dwarf.c:6168
+#: dwarf.c:6173
#, c-format
msgid " Unknown macro opcode %02x seen\n"
msgstr " ВиÑвлено невідомий код операції макроÑу %02x\n"
-#: dwarf.c:6179
+#: dwarf.c:6184
#, c-format
msgid " DW_MACRO_%02x\n"
msgstr " DW_MACRO_%02x\n"
-#: dwarf.c:6182
+#: dwarf.c:6187
#, c-format
msgid " DW_MACRO_%02x -"
msgstr " DW_MACRO_%02x -"
-#: dwarf.c:6237
+#: dwarf.c:6242
#, c-format
msgid " Number TAG (0x%lx)\n"
msgstr " Ðомер Ð¢Ð•Ò (0x%lx)\n"
-#: dwarf.c:6246
+#: dwarf.c:6251
msgid "has children"
msgstr "має нащадків"
-#: dwarf.c:6246
+#: dwarf.c:6251
msgid "no children"
msgstr "немає нащадків"
-#: dwarf.c:6308
+#: dwarf.c:6313
#, c-format
msgid "location view pair\n"
msgstr "пара переглÑдів міÑць\n"
-#: dwarf.c:6340
+#: dwarf.c:6344
#, c-format
msgid "No debug information available for loc lists of entry: %u\n"
msgstr "ÐедоÑтупна діагноÑтична Ñ–Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ Ð´Ð»Ñ ÑпиÑків міÑць запиÑу: %u\n"
-#: dwarf.c:6352 dwarf.c:6499 dwarf.c:6682
+#: dwarf.c:6356 dwarf.c:6504 dwarf.c:6688
#, c-format
msgid "Invalid pointer size (%d) in debug info for entry %d\n"
msgstr "Ðекоректний розмір вказівника (%d) у діагноÑтичних даних Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу %d\n"
-#: dwarf.c:6364 dwarf.c:6417 dwarf.c:6426 dwarf.c:6511 dwarf.c:6588
-#: dwarf.c:6596 dwarf.c:6693 dwarf.c:6766 dwarf.c:6774
+#: dwarf.c:6368 dwarf.c:6422 dwarf.c:6431 dwarf.c:6516 dwarf.c:6594
+#: dwarf.c:6602 dwarf.c:6700 dwarf.c:6773 dwarf.c:6781
#, c-format
msgid "Location list starting at offset 0x%lx is not terminated.\n"
msgstr "СпиÑок розташувань, починаючи із зÑуву 0x%lx, не завершений.\n"
-#: dwarf.c:6385 dwarf.c:6539 dwarf.c:6731 dwarf.c:7569 dwarf.c:7624
+#: dwarf.c:6390 dwarf.c:6545 dwarf.c:6738 dwarf.c:7582 dwarf.c:7640
#, c-format
msgid "<End of list>\n"
msgstr "<Кінець ÑпиÑку>\n"
-#: dwarf.c:6397 dwarf.c:6560 dwarf.c:7629
+#: dwarf.c:6402 dwarf.c:6566 dwarf.c:7645
#, c-format
msgid "(base address)\n"
msgstr "(оÑновна адреÑа)\n"
-#: dwarf.c:6411 dwarf.c:6532 dwarf.c:6719
+#: dwarf.c:6416 dwarf.c:6538 dwarf.c:6726
#, c-format
msgid ""
"views at %8.8lx for:\n"
@@ -3415,55 +3420,55 @@ msgstr ""
"переглÑди у %8.8lx длÑ:\n"
" %*s "
-#: dwarf.c:6447 dwarf.c:6617
+#: dwarf.c:6452 dwarf.c:6623
msgid " (start == end)"
msgstr " (початок == кінець)"
-#: dwarf.c:6449 dwarf.c:6619
+#: dwarf.c:6454 dwarf.c:6625
msgid " (start > end)"
msgstr " (початок > кінець)"
-#: dwarf.c:6486
+#: dwarf.c:6491
#, c-format
msgid "No debug information available for loclists lists of entry: %u\n"
msgstr "Ðемає діагноÑтичних даних Ð´Ð»Ñ ÑпиÑків loclists запиÑу: %u\n"
-#: dwarf.c:6565
+#: dwarf.c:6571
#, c-format
msgid "View pair entry in loclist with locviews attribute\n"
msgstr "Ð—Ð°Ð¿Ð¸Ñ Ð¿Ð°Ñ€Ð¸ переглÑду у loclist із атрибутом locviews\n"
-#: dwarf.c:6572
+#: dwarf.c:6578
#, c-format
msgid "views for:\n"
msgstr "переглÑди длÑ:\n"
-#: dwarf.c:6576
+#: dwarf.c:6582
#, c-format
msgid "Invalid location list entry type %d\n"
msgstr "Ðекоректний тип запиÑу ÑпиÑку розміщень %d\n"
-#: dwarf.c:6628
+#: dwarf.c:6634
#, c-format
msgid "Trailing view pair not used in a range"
msgstr "Завершальна пара переглÑду не викориÑтовуєтьÑÑ Ñƒ діапазоні"
-#: dwarf.c:6670
+#: dwarf.c:6676
#, c-format
msgid "No debug information for loc lists of entry: %u\n"
msgstr "Ðемає діагноÑтичної інформації Ð´Ð»Ñ ÑпиÑків міÑць запиÑу: %u\n"
-#: dwarf.c:6737
+#: dwarf.c:6744
#, c-format
msgid "(base address selection entry)\n"
msgstr "(вхід вибору базової адреÑи)\n"
-#: dwarf.c:6758
+#: dwarf.c:6765
#, c-format
msgid "Unknown location list entry type 0x%x.\n"
msgstr "Ðевідомий тип запиÑу ÑпиÑку Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ 0x%x.\n"
-#: dwarf.c:6851 dwarf.c:7104 dwarf.c:7323 dwarf.c:7430 dwarf.c:7691
+#: dwarf.c:6858 dwarf.c:7115 dwarf.c:7333 dwarf.c:7440 dwarf.c:7708
#, c-format
msgid ""
"\n"
@@ -3472,31 +3477,31 @@ msgstr ""
"\n"
"Розділ %s порожній.\n"
-#: dwarf.c:6871
+#: dwarf.c:6878
#, c-format
msgid "The %s section contains corrupt or unsupported version number: %d.\n"
msgstr "Розділ %s міÑтить пошкоджений або непідтримуваний номер верÑÑ–Ñ—: %d.\n"
-#: dwarf.c:6891
+#: dwarf.c:6898
#, c-format
msgid "The %s section contains unsupported offset entry count: %d.\n"
msgstr "Розділ %s міÑтить непідтримувану кількіÑÑ‚ÑŒ запиÑів зÑувів: %d.\n"
-#: dwarf.c:6902 dwarf.c:7329 dwarf.c:7765
+#: dwarf.c:6909 dwarf.c:7339 dwarf.c:7781
#, c-format
msgid "Unable to load/parse the .debug_info section, so cannot interpret the %s section.\n"
msgstr "Ðе вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ або обробити розділ .debug_info, отже обробка розділу %s неможлива.\n"
-#: dwarf.c:6950
+#: dwarf.c:6957
msgid "No location lists in .debug_info section!\n"
msgstr "У розділі .debug_info немає ÑпиÑків розташуваннÑ!\n"
-#: dwarf.c:6955
+#: dwarf.c:6962
#, c-format
msgid "Location lists in %s section start at 0x%s\n"
msgstr "СпиÑки розташувань у розділі %s починаютьÑÑ Ð· 0x%s\n"
-#: dwarf.c:6965
+#: dwarf.c:6972
#, c-format
msgid ""
" Warning: This section has relocations - addresses seen here may not be accurate.\n"
@@ -3505,40 +3510,40 @@ msgstr ""
" ПопередженнÑ: у цьому розділі Ñ” переÑÑƒÐ²Ð°Ð½Ð½Ñ - показані тут адреÑи можуть бути неточними.\n"
"\n"
-#: dwarf.c:6967
+#: dwarf.c:6974
#, c-format
msgid " Offset Begin End Expression\n"
msgstr " ЗÑув Початок Кінець Вираз\n"
-#: dwarf.c:7022
+#: dwarf.c:7029 dwarf.c:7882
#, c-format
-msgid "There is a hole [0x%lx - 0x%lx] in .debug_loc section.\n"
-msgstr "Ð’ розділі .debug_loc Ñ–Ñнує дірка [0x%lx - 0x%lx].\n"
+msgid "There is a hole [0x%lx - 0x%lx] in %s section.\n"
+msgstr "Дірка [0x%lx - 0x%lx] у розділі %s.\n"
-#: dwarf.c:7026
+#: dwarf.c:7034 dwarf.c:7889
#, c-format
-msgid "There is an overlap [0x%lx - 0x%lx] in .debug_loc section.\n"
-msgstr "Ð’ розділі .debug_loc Ñ–Ñнує Ð¿ÐµÑ€ÐµÐºÑ€Ð¸Ñ‚Ñ‚Ñ [0x%lx - 0x%lx].\n"
+msgid "There is an overlap [0x%lx - 0x%lx] in %s section.\n"
+msgstr "ÐŸÐµÑ€ÐµÐºÑ€Ð¸Ñ‚Ñ‚Ñ [0x%lx - 0x%lx] у розділі %s.\n"
-#: dwarf.c:7035
+#: dwarf.c:7044
#, c-format
-msgid "Offset 0x%lx is bigger than .debug_loc section size.\n"
-msgstr "ЗÑув 0x%lx більш, ніж розмір розділу .debug_loc.\n"
+msgid "Offset 0x%lx is bigger than %s section size.\n"
+msgstr "ЗÑув 0x%lx більш, ніж розмір розділу %s.\n"
-#: dwarf.c:7042
+#: dwarf.c:7052
#, c-format
-msgid "View Offset 0x%lx is bigger than .debug_loc section size.\n"
-msgstr "ЗÑув переглÑду 0x%lx більший за розмір розділу .debug_loc.\n"
+msgid "View Offset 0x%lx is bigger than %s section size.\n"
+msgstr "ЗÑув переглÑду 0x%lx більший за розмір розділу %s.\n"
-#: dwarf.c:7059
+#: dwarf.c:7070
msgid "DWO is not yet supported.\n"
msgstr "Підтримку DWO ще не реалізовано.\n"
-#: dwarf.c:7076
+#: dwarf.c:7087
msgid "Hole and overlap detection requires adjacent view lists and loclists.\n"
msgstr "Ð”Ð»Ñ Ð²Ð¸ÑÐ²Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾Ð³Ð°Ð»Ð¸Ð½ Ñ– перекриттів потрібні ÑуÑідні ÑпиÑки переглÑду або ÑпиÑки міÑць.\n"
-#: dwarf.c:7085
+#: dwarf.c:7096
#, c-format
msgid "There is %ld unused byte at the end of section %s\n"
msgid_plural "There are %ld unused bytes at the end of section %s\n"
@@ -3547,45 +3552,45 @@ msgstr[1] "У розділі %2$s виÑвлено %1$ld невикориÑтаÐ
msgstr[2] "У розділі %2$s виÑвлено %1$ld невикориÑтаних байтів\n"
msgstr[3] "У розділі %2$s виÑвлено %1$ld невикориÑтаний байт\n"
-#: dwarf.c:7238
+#: dwarf.c:7248
msgid "Only DWARF 2 and 3 aranges are currently supported.\n"
msgstr "Ðаразі підтримуютьÑÑ Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ Ð»Ð¸ÑˆÐµ Ð´Ð»Ñ DWARF верÑÑ–Ñ— 2 та 3.\n"
-#: dwarf.c:7242
+#: dwarf.c:7252
#, c-format
msgid " Length: %ld\n"
msgstr " Довжина: %ld\n"
-#: dwarf.c:7244
+#: dwarf.c:7254
#, c-format
msgid " Version: %d\n"
msgstr " ВерÑÑ–Ñ: %d\n"
-#: dwarf.c:7245
+#: dwarf.c:7255
#, c-format
msgid " Offset into .debug_info: 0x%lx\n"
msgstr " ЗÑув до .debug_info: 0x%lx\n"
-#: dwarf.c:7247
+#: dwarf.c:7257
#, c-format
msgid " Pointer Size: %d\n"
msgstr " Розмір вказівника: %d\n"
-#: dwarf.c:7248
+#: dwarf.c:7258
#, c-format
msgid " Segment Size: %d\n"
msgstr " Розмір Ñегменту: %d\n"
-#: dwarf.c:7255
+#: dwarf.c:7265
#, c-format
msgid "Invalid address size in %s section!\n"
msgstr "Ðекоректний розмір адреÑи у розділі %s!\n"
-#: dwarf.c:7265
+#: dwarf.c:7275
msgid "Pointer size + Segment size is not a power of two.\n"
msgstr "Розмір вказівника + розмір Ñегменту не Ñ” Ñтупенем двійки.\n"
-#: dwarf.c:7270
+#: dwarf.c:7280
#, c-format
msgid ""
"\n"
@@ -3594,7 +3599,7 @@ msgstr ""
"\n"
" ÐдреÑа Довжина\n"
-#: dwarf.c:7272
+#: dwarf.c:7282
#, c-format
msgid ""
"\n"
@@ -3603,270 +3608,267 @@ msgstr ""
"\n"
" ÐдреÑа Довжина\n"
-#: dwarf.c:7349
+#: dwarf.c:7359
#, c-format
msgid "Corrupt address base (%lx) found in debug section %u\n"
msgstr "ВиÑвлено пошкоджену оÑнову Ð°Ð´Ñ€ÐµÑ (%lx) у діагноÑтичному розділі %u\n"
-#: dwarf.c:7366
+#: dwarf.c:7376
#, c-format
msgid " For compilation unit at offset 0x%s:\n"
msgstr " Ð”Ð»Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñ Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ Ð·Ð° зÑувом 0x%s:\n"
-#: dwarf.c:7369
+#: dwarf.c:7379
#, c-format
msgid "\tIndex\tAddress\n"
msgstr "\tІндекÑ\tÐдреÑа\n"
-#: dwarf.c:7381
+#: dwarf.c:7391
#, c-format
msgid "Corrupt %s section: expecting header size of 8 or 16, but found %ld instead\n"
msgstr "Пошкоджено розділ %s: розмір заголовка мав дорівнювати 8 або 16, втім, виÑвлено %ld\n"
-#: dwarf.c:7393
+#: dwarf.c:7403
#, c-format
msgid "Corrupt %s section: expecting version number 5 in header but found %d instead\n"
msgstr "Пошкоджено розділ %s: у заголовку мало бути вказано верÑÑ–ÑŽ 5, але там знайдено номер верÑÑ–Ñ— %d\n"
-#: dwarf.c:7407
+#: dwarf.c:7417
#, c-format
msgid "\t%d:\t"
msgstr "\t%d:\t"
-#: dwarf.c:7472 dwarf.c:7496
+#: dwarf.c:7482 dwarf.c:7506
#, c-format
msgid " Length: %#lx\n"
msgstr " Довжина: %#lx\n"
-#: dwarf.c:7473 dwarf.c:7498
+#: dwarf.c:7483 dwarf.c:7508
#, c-format
msgid " Index Offset [String]\n"
msgstr " Ð†Ð½Ð´ÐµÐºÑ Ð—Ñув [РÑдок]\n"
-#: dwarf.c:7481
+#: dwarf.c:7491
#, c-format
msgid "Section %s is too small %#lx\n"
msgstr "Розділ %s є надто малим %#lx\n"
-#: dwarf.c:7489
+#: dwarf.c:7499
#, c-format
msgid "Unexpected version number in str_offset header: %#x\n"
msgstr "Ðеочікуваний номер верÑÑ–Ñ— у заголовку str_offset: %#x\n"
-#: dwarf.c:7494
+#: dwarf.c:7504
#, c-format
msgid "Unexpected value in str_offset header's padding field: %#x\n"
msgstr "Ðеочікуване Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñƒ полі Ð´Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° str_offset: %#x\n"
-#: dwarf.c:7497
+#: dwarf.c:7507
#, c-format
msgid " Version: %#lx\n"
msgstr " ВерÑÑ–Ñ: %#lx\n"
-#: dwarf.c:7588 dwarf.c:7665
+#: dwarf.c:7601 dwarf.c:7681
msgid "(start == end)"
msgstr "(початок == кінець)"
-#: dwarf.c:7590 dwarf.c:7667
+#: dwarf.c:7603 dwarf.c:7683
msgid "(start > end)"
msgstr "(початок > кінець)"
-#: dwarf.c:7612
+#: dwarf.c:7627
#, c-format
-msgid "Range list starting at offset 0x%lx is not terminated.\n"
-msgstr "СпиÑок діапазонів, починаючи із зÑуву 0x%lx, не завершений.\n"
+msgid "Range list starting at offset 0x%s is not terminated.\n"
+msgstr "СпиÑок діапазонів, починаючи із зÑуву 0x%s, не завершений.\n"
-#: dwarf.c:7645
+#: dwarf.c:7661
#, c-format
msgid "Invalid range list entry type %d\n"
msgstr "Ðекоректний тип запиÑу ÑпиÑку діапазонів %d\n"
-#: dwarf.c:7725
+#: dwarf.c:7742
#, c-format
msgid "The length field (0x%lx) in the debug_rnglists header is wrong - the section is too small\n"
msgstr "ВміÑÑ‚ Ð¿Ð¾Ð»Ñ Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð¸ (0x%lx) у заголовку debug_rnglists Ñ” помилковим — розділ надто малий\n"
-#: dwarf.c:7737
+#: dwarf.c:7753
msgid "Only DWARF version 5 debug_rnglists info is currently supported.\n"
msgstr "У поточній верÑÑ–Ñ— передбачено підтримку лише debug_rnglists верÑÑ–Ñ— DWARF 5.\n"
-#: dwarf.c:7756
+#: dwarf.c:7772
#, c-format
msgid "The %s section contains unsupported offset entry count: %u.\n"
msgstr "Розділ %s міÑтить непідтримувану кількіÑÑ‚ÑŒ запиÑів зÑувів: %u.\n"
#. This can happen when the file was compiled with -gsplit-debug
#. which removes references to range lists from the primary .o file.
-#: dwarf.c:7786
+#: dwarf.c:7802
#, c-format
msgid "No range lists in .debug_info section.\n"
msgstr "У розділі .debug_info немає ÑпиÑків діапазонів.\n"
-#: dwarf.c:7818
+#: dwarf.c:7834
#, c-format
msgid "Range lists in %s section start at 0x%lx\n"
msgstr "СпиÑки діапазонів в розділі %s починаютьÑÑ Ñ 0x%lx\n"
-#: dwarf.c:7823
+#: dwarf.c:7839
#, c-format
msgid " Offset Begin End\n"
msgstr " ЗÑув Початок Кінець\n"
-#: dwarf.c:7841
+#: dwarf.c:7857
#, c-format
msgid "Corrupt pointer size (%d) in debug entry at offset %8.8lx\n"
msgstr "Пошкоджено розмір вказівника (%d) у діагноÑтичному запиÑÑ– із зÑувом %8.8lx\n"
-#: dwarf.c:7848
+#: dwarf.c:7864
#, c-format
msgid "Corrupt offset (%#8.8lx) in range entry %u\n"
msgstr "Пошкоджений зÑув (%#8.8lx) у запиÑÑ– діапазону %u\n"
-#: dwarf.c:7866
-#, c-format
-msgid "There is a hole [0x%lx - 0x%lx] in %s section.\n"
-msgstr "Дірка [0x%lx - 0x%lx] у розділі %s.\n"
-
-#: dwarf.c:7873
-#, c-format
-msgid "There is an overlap [0x%lx - 0x%lx] in %s section.\n"
-msgstr "ÐŸÐµÑ€ÐµÐºÑ€Ð¸Ñ‚Ñ‚Ñ [0x%lx - 0x%lx] у розділі %s.\n"
-
-#: dwarf.c:7949
+#: dwarf.c:7965
#, c-format
msgid "Unfeasibly large register number: %u\n"
msgstr "Ðадто великий номер регіÑтра: %u\n"
-#: dwarf.c:7962
+#: dwarf.c:7978
#, c-format
msgid "Out of memory allocating %u columns in dwarf frame arrays\n"
msgstr "Бракує пам'ÑÑ‚Ñ– при розподілі %u Ñтовпчиків у маÑивах кадрів dwarf\n"
-#: dwarf.c:8411
+#: dwarf.c:8427
msgid "No terminator for augmentation name\n"
msgstr "Ðемає термінатора Ð´Ð»Ñ Ð½Ð°Ð·Ð²Ð¸ розширеннÑ\n"
-#: dwarf.c:8429
+#: dwarf.c:8445
#, c-format
msgid "Invalid pointer size (%d) in CIE data\n"
msgstr "Ðекоректний розмір вказівника (%d) у даних CIE\n"
-#: dwarf.c:8437
+#: dwarf.c:8453
#, c-format
msgid "Invalid segment size (%d) in CIE data\n"
msgstr "Ðекоректний розмір Ñегмента (%d) у даних CIE\n"
-#: dwarf.c:8473 dwarf.c:8849
+#: dwarf.c:8489 dwarf.c:8862
#, c-format
msgid "Augmentation data too long: 0x%s, expected at most %#lx\n"
msgstr "Дані Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Ñ” надто довгими: 0x%s, мало бути не більше за %#lx\n"
-#: dwarf.c:8560
+#: dwarf.c:8576
#, c-format
msgid " Augmentation data: "
msgstr " Дані розширеннÑ: "
-#: dwarf.c:8576
+#: dwarf.c:8592
msgid "bad register: "
msgstr "помилковий регіÑÑ‚Ñ€: "
-#: dwarf.c:8748
+#: dwarf.c:8764
msgid "Failed to read CIE information\n"
msgstr "Ðе вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ дані CIE\n"
-#: dwarf.c:8759 dwarf.c:8783 dwarf.c:8810
+#: dwarf.c:8775 dwarf.c:8796 dwarf.c:8823
msgid "Invalid max register\n"
msgstr "Ðекоректний макÑимальний регіÑÑ‚Ñ€\n"
#. PR 17512: file: 9e196b3e.
-#: dwarf.c:8825
+#: dwarf.c:8838
#, c-format
msgid "Probably corrupt segment size: %d - using 4 instead\n"
msgstr "Ймовірно, пошкоджено розмір Ñегмента: %d - викориÑтовуємо заміÑÑ‚ÑŒ нього Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ 4\n"
-#: dwarf.c:9296
+#. Ideally translate "invalid " to 8 chars, trailing space
+#. is optional.
+#: dwarf.c:8884
+#, c-format
+msgid "cie=invalid "
+msgstr "cie=invalid "
+
+#: dwarf.c:9317
msgid "Invalid column number in saved frame state\n"
msgstr "Ðекоректний номер Ñтовпчика у збереженому Ñтані кадрів\n"
-#: dwarf.c:9343
+#: dwarf.c:9364
#, c-format
msgid " DW_CFA_def_cfa_expression: <corrupt len %lu>\n"
msgstr " DW_CFA_def_cfa_expression: <пошкоджено довжину %lu>\n"
-#: dwarf.c:9366
+#: dwarf.c:9387
#, c-format
msgid " DW_CFA_expression: <corrupt len %lu>\n"
msgstr " DW_CFA_expression: <пошкоджено довжину %lu>\n"
-#: dwarf.c:9499
+#: dwarf.c:9520
#, c-format
msgid " DW_CFA_??? (User defined call frame op: %#x)\n"
msgstr " DW_CFA_??? (Визначена кориÑтувачем Ð¾Ð¿ÐµÑ€Ð°Ñ†Ñ–Ñ Ñ„Ñ€ÐµÐ¹Ð¼Ñƒ викликів: %#x)\n"
-#: dwarf.c:9501
+#: dwarf.c:9522
#, c-format
msgid "Unsupported or unknown Dwarf Call Frame Instruction number: %#x\n"
msgstr "Ðепідтримуваний або невідомий номер інÑтрукції фрейму викликів Dwarf: %#x\n"
-#: dwarf.c:9615 dwarf.c:10032
+#: dwarf.c:9636 dwarf.c:10053
#, c-format
msgid "Version %ld\n"
msgstr "ВерÑÑ–Ñ %ld\n"
-#: dwarf.c:9621
+#: dwarf.c:9642
msgid "Only DWARF version 5 .debug_names is currently supported.\n"
msgstr "У поточній верÑÑ–Ñ— передбачено підтримку лише .debug_names верÑÑ–Ñ— DWARF 5.\n"
-#: dwarf.c:9628
+#: dwarf.c:9649
#, c-format
msgid "Padding field of .debug_names must be 0 (found 0x%x)\n"
msgstr "Поле Ð´Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ .debug_names має міÑтити 0 (виÑвлено 0x%x)\n"
-#: dwarf.c:9633
+#: dwarf.c:9654
msgid "Compilation unit count must be >= 1 in .debug_names\n"
msgstr "КількіÑÑ‚ÑŒ модулів Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ Ð¼Ð°Ñ” бути >= 1 у .debug_names\n"
-#: dwarf.c:9644
+#: dwarf.c:9665
#, c-format
msgid "Augmentation string length %u must be rounded up to a multiple of 4 in .debug_names.\n"
msgstr "Довжина Ñ€Ñдка Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ %u має заокруглюватиÑÑ Ð´Ð¾ кратної до 4 у .debug_names.\n"
-#: dwarf.c:9652
+#: dwarf.c:9673
#, c-format
msgid "Augmentation string:"
msgstr "РÑдок розширеннÑ:"
-#: dwarf.c:9679
+#: dwarf.c:9700
#, c-format
msgid "CU table:\n"
msgstr "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ CU:\n"
-#: dwarf.c:9688 dwarf.c:9701
+#: dwarf.c:9709 dwarf.c:9722
#, c-format
msgid "[%3u] 0x%lx\n"
msgstr "[%3u] 0x%lx\n"
-#: dwarf.c:9692
+#: dwarf.c:9713
#, c-format
msgid "TU table:\n"
msgstr "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ TU:\n"
-#: dwarf.c:9705
+#: dwarf.c:9726
#, c-format
msgid "Foreign TU table:\n"
msgstr "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ð·Ð¾Ð²Ð½Ñ–ÑˆÐ½Ñ–Ñ… TU:\n"
-#: dwarf.c:9714
+#: dwarf.c:9735
#, c-format
msgid "[%3u] "
msgstr "[%3u] "
-#: dwarf.c:9725
+#: dwarf.c:9746
#, c-format
msgid "Entry pool offset (0x%lx) exceeds unit size 0x%lx for unit 0x%lx in the debug_names\n"
msgstr "ЗÑув буфера запиÑів (0x%lx) перевищує розмір Ð¼Ð¾Ð´ÑƒÐ»Ñ 0x%lx Ð´Ð»Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñ 0x%lx у debug_names\n"
-#: dwarf.c:9754
+#: dwarf.c:9775
#, c-format
msgid "Used %zu of %lu bucket.\n"
msgid_plural "Used %zu of %lu buckets.\n"
@@ -3875,17 +3877,17 @@ msgstr[1] "ВикориÑтано %zu з %lu блоків.\n"
msgstr[2] "ВикориÑтано %zu з %lu блоків.\n"
msgstr[3] "ВикориÑтано %zu з %lu блоку.\n"
-#: dwarf.c:9781
+#: dwarf.c:9802
#, c-format
msgid "Out of %lu items there are %zu bucket clashes (longest of %zu entries).\n"
msgstr "З %lu запиÑів у %zu Ñ” конфлікти блоків (найдовший у %zu запиÑів).\n"
-#: dwarf.c:9818
+#: dwarf.c:9839
#, c-format
msgid "Duplicate abbreviation tag %lu in unit 0x%lx in the debug_names\n"
msgstr "Ð”ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð¼Ñ–Ñ‚ÐºÐ¸ ÑÐºÐ¾Ñ€Ð¾Ñ‡ÐµÐ½Ð½Ñ %lu у модулі 0x%lx у debug_names\n"
-#: dwarf.c:9840 dwarf.c:10158
+#: dwarf.c:9861 dwarf.c:10179
#, c-format
msgid ""
"\n"
@@ -3894,105 +3896,105 @@ msgstr ""
"\n"
"Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ñимволів:\n"
-#: dwarf.c:9892
+#: dwarf.c:9913
#, c-format
msgid "Undefined abbreviation tag %lu in unit 0x%lx in the debug_names\n"
msgstr "Ðевизначена мітка ÑÐºÐ¾Ñ€Ð¾Ñ‡ÐµÐ½Ð½Ñ %lu у модулі 0x%lx у debug_names\n"
-#: dwarf.c:9923
+#: dwarf.c:9944
#, c-format
msgid " <no entries>"
msgstr " <немає запиÑів>"
-#: dwarf.c:9955
+#: dwarf.c:9976
msgid "The debuglink filename is corrupt/missing\n"
msgstr "Пошкоджено або не вказано назву файла debuglink\n"
-#: dwarf.c:9959
+#: dwarf.c:9980
#, c-format
msgid " Separate debug info file: %s\n"
msgstr " Окремий файл діагноÑтичних даних: %s\n"
-#: dwarf.c:9970
+#: dwarf.c:9991
msgid "CRC offset missing/truncated\n"
msgstr "Ðе вказано зÑув CRC або зÑув обрізано\n"
-#: dwarf.c:9976
+#: dwarf.c:9997
#, c-format
msgid " CRC value: %#x\n"
msgstr " Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ CRC: %#x\n"
-#: dwarf.c:9980
+#: dwarf.c:10001
#, c-format
msgid "There are %#lx extraneous bytes at the end of the section\n"
msgstr "Ðаприкінці розділу виÑвлено %#lx зайвих байтів\n"
-#: dwarf.c:9994
+#: dwarf.c:10015
#, c-format
msgid "Build-ID is too short (%#lx bytes)\n"
msgstr "Ðадто короткий ідентифікатор Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ (%#lx байтів)\n"
-#: dwarf.c:9998
+#: dwarf.c:10019
#, c-format
msgid " Build-ID (%#lx bytes):"
msgstr " Ід. Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ (%#lx байтів):"
-#: dwarf.c:10027
+#: dwarf.c:10048
#, c-format
msgid "Truncated header in the %s section.\n"
msgstr "Обрізаний заголовок у розділі %s.\n"
-#: dwarf.c:10038
+#: dwarf.c:10059
#, c-format
msgid "Unsupported version %lu.\n"
msgstr "Ðепідтримувана верÑÑ–Ñ %lu.\n"
-#: dwarf.c:10042
+#: dwarf.c:10063
msgid "The address table data in version 3 may be wrong.\n"
msgstr "Дані таблиці Ð°Ð´Ñ€ÐµÑ Ñƒ верÑÑ–Ñ— 3 можуть бути помилковими.\n"
-#: dwarf.c:10044
+#: dwarf.c:10065
msgid "Version 4 does not support case insensitive lookups.\n"
msgstr "У верÑÑ–Ñ— 4 не передбачено підтримки фільтрувань без Ð²Ñ€Ð°Ñ…ÑƒÐ²Ð°Ð½Ð½Ñ Ñ€ÐµÐ³Ñ–Ñтру.\n"
-#: dwarf.c:10046
+#: dwarf.c:10067
msgid "Version 5 does not include inlined functions.\n"
msgstr "У верÑÑ–ÑŽ 5 не включено вбудованих функцій.\n"
-#: dwarf.c:10048
+#: dwarf.c:10069
msgid "Version 6 does not include symbol attributes.\n"
msgstr "До верÑÑ–Ñ— 6 не включено атрибутів Ñимволів.\n"
-#: dwarf.c:10066
+#: dwarf.c:10087
#, c-format
msgid "Corrupt header in the %s section.\n"
msgstr "Заголовок у розділі %s пошкоджено.\n"
-#: dwarf.c:10073
+#: dwarf.c:10094
#, c-format
msgid "TU offset (%x) is less than CU offset (%x)\n"
msgstr "ЗÑув TU (%x) Ñ” меншим за зÑув CU (%x)\n"
-#: dwarf.c:10082
+#: dwarf.c:10103
#, c-format
msgid "Address table offset (%x) is less than TU offset (%x)\n"
msgstr "ЗÑув таблиці Ð°Ð´Ñ€ÐµÑ (%x) Ñ” меншим за зÑув TU (%x)\n"
-#: dwarf.c:10092
+#: dwarf.c:10113
#, c-format
msgid "Symbol table offset (%x) is less then Address table offset (%x)\n"
msgstr "ЗÑув таблиці Ñимволів (%x) Ñ” меншим за зÑув таблиці Ð°Ð´Ñ€ÐµÑ (%x)\n"
-#: dwarf.c:10101
+#: dwarf.c:10122
#, c-format
msgid "Constant pool offset (%x) is less than symbol table offset (%x)\n"
msgstr "ЗÑув буфера Ñталих (%x) Ñ” меншим за зÑув таблиці Ñимволів (%x)\n"
-#: dwarf.c:10116
+#: dwarf.c:10137
msgid "Address table extends beyond end of section.\n"
msgstr "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ð°Ð´Ñ€ÐµÑ Ð²Ð¸Ñ…Ð¾Ð´Ð¸Ñ‚ÑŒ за межі ÐºÑ–Ð½Ñ†Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ\n"
-#: dwarf.c:10120
+#: dwarf.c:10141
#, c-format
msgid ""
"\n"
@@ -4001,12 +4003,12 @@ msgstr ""
"\n"
"Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ CU:\n"
-#: dwarf.c:10126
+#: dwarf.c:10147
#, c-format
msgid "[%3u] 0x%lx - 0x%lx\n"
msgstr "[%3u] 0x%lx - 0x%lx\n"
-#: dwarf.c:10131
+#: dwarf.c:10152
#, c-format
msgid ""
"\n"
@@ -4015,12 +4017,12 @@ msgstr ""
"\n"
"Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ TU:\n"
-#: dwarf.c:10138
+#: dwarf.c:10159
#, c-format
msgid "[%3u] 0x%lx 0x%lx "
msgstr "[%3u] 0x%lx 0x%lx "
-#: dwarf.c:10145
+#: dwarf.c:10166
#, c-format
msgid ""
"\n"
@@ -4029,74 +4031,74 @@ msgstr ""
"\n"
"Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ð°Ð´Ñ€ÐµÑ:\n"
-#: dwarf.c:10155
+#: dwarf.c:10176
#, c-format
msgid "%lu\n"
msgstr "%lu\n"
-#: dwarf.c:10173
+#: dwarf.c:10194
#, c-format
msgid "[%3u] <corrupt offset: %x>"
msgstr "[%3u] <пошкоджений зÑув: %x>"
-#: dwarf.c:10174
+#: dwarf.c:10195
#, c-format
msgid "Corrupt name offset of 0x%x found for symbol table slot %d\n"
msgstr "ВиÑвлено пошкоджений зÑув назви 0x%x Ð´Ð»Ñ Ñлота таблиці Ñимволів %d\n"
-#: dwarf.c:10185
+#: dwarf.c:10206
#, c-format
msgid "<invalid CU vector offset: %x>\n"
msgstr "<некоректний зÑув вектора CU: %x>\n"
-#: dwarf.c:10186
+#: dwarf.c:10207
#, c-format
msgid "Corrupt CU vector offset of 0x%x found for symbol table slot %d\n"
msgstr "ВиÑвлено пошкоджений зÑув вектора CU 0x%x Ð´Ð»Ñ Ñлота таблиці Ñимволів %d\n"
-#: dwarf.c:10197
+#: dwarf.c:10218
#, c-format
msgid "Invalid number of CUs (0x%x) for symbol table slot %d\n"
msgstr "Ðекоректна кількіÑÑ‚ÑŒ CU (0x%x) Ð´Ð»Ñ Ñлоту таблиці Ñимволів %d\n"
-#: dwarf.c:10222
+#: dwarf.c:10243
msgid "static"
msgstr "Ñтатична"
-#: dwarf.c:10222
+#: dwarf.c:10243
msgid "global"
msgstr "загальна"
-#: dwarf.c:10260 dwarf.c:10271
+#: dwarf.c:10281 dwarf.c:10292
msgid "Internal error: out of space in the shndx pool.\n"
msgstr "Ð’Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: вихід за межі у буфері shndx.\n"
-#: dwarf.c:10334
+#: dwarf.c:10355
#, c-format
msgid "Section %s is empty\n"
msgstr "Розділ %s порожній\n"
-#: dwarf.c:10340
+#: dwarf.c:10361
#, c-format
msgid "Section %s is too small to contain a CU/TU header\n"
msgstr "Розділ %s Ñ” надто малим, щоб міÑтити заголовок CU/TU\n"
-#: dwarf.c:10359
+#: dwarf.c:10380
#, c-format
msgid " Version: %u\n"
msgstr " ВерÑÑ–Ñ: %u\n"
-#: dwarf.c:10361
+#: dwarf.c:10382
#, c-format
msgid " Number of columns: %u\n"
msgstr " КількіÑÑ‚ÑŒ Ñтовпчиків: %u\n"
-#: dwarf.c:10362
+#: dwarf.c:10383
#, c-format
msgid " Number of used entries: %u\n"
msgstr " КількіÑÑ‚ÑŒ викориÑтаних запиÑів: %u\n"
-#: dwarf.c:10363
+#: dwarf.c:10384
#, c-format
msgid ""
" Number of slots: %u\n"
@@ -4105,7 +4107,7 @@ msgstr ""
" КількіÑÑ‚ÑŒ Ñлотів: %u\n"
"\n"
-#: dwarf.c:10370
+#: dwarf.c:10391
#, c-format
msgid "Section %s is too small for %u slot\n"
msgid_plural "Section %s is too small for %u slots\n"
@@ -4114,125 +4116,130 @@ msgstr[1] "Розділ %s Ñ” надто малим Ð´Ð»Ñ %u Ñлотів\n"
msgstr[2] "Розділ %s Ñ” надто малим Ð´Ð»Ñ %u Ñлотів\n"
msgstr[3] "Розділ %s Ñ” надто малим Ð´Ð»Ñ %u Ñлоту\n"
-#: dwarf.c:10394
+#: dwarf.c:10415
msgid "Section index pool located before start of section\n"
msgstr "Буфер індекÑів розділу розташовано до початку розділу\n"
-#: dwarf.c:10399
+#: dwarf.c:10420
#, c-format
msgid " [%3d] Signature: 0x%s Sections: "
msgstr " [%3d] Сигнатура: 0x%s Розділи: "
-#: dwarf.c:10405
+#: dwarf.c:10426
#, c-format
msgid "Section %s too small for shndx pool\n"
msgstr "Розділ %s Ñ” надто малим Ð´Ð»Ñ Ð±ÑƒÑ„ÐµÑ€Ð° shndx\n"
-#: dwarf.c:10451
+#: dwarf.c:10472
#, c-format
msgid "Section %s too small for offset and size tables\n"
msgstr "Розділ %s Ñ” надто малим Ð´Ð»Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†ÑŒ зÑуву та розміру\n"
-#: dwarf.c:10458
+#: dwarf.c:10479
#, c-format
msgid " Offset table\n"
msgstr " Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ð·Ñувів\n"
-#: dwarf.c:10460 dwarf.c:10548
+#: dwarf.c:10481 dwarf.c:10569
msgid "signature"
msgstr "Ñигнатура"
-#: dwarf.c:10460 dwarf.c:10548
+#: dwarf.c:10481 dwarf.c:10569
msgid "dwo_id"
msgstr "dwo_id"
-#: dwarf.c:10499
+#: dwarf.c:10520
#, c-format
msgid "Row index (%u) is larger than number of used entries (%u)\n"
msgstr "Ð†Ð½Ð´ÐµÐºÑ Ñ€Ñдка (%u) Ñ” більшим за кількіÑÑ‚ÑŒ викориÑтаних запиÑів (%u)\n"
-#: dwarf.c:10513 dwarf.c:10572
+#: dwarf.c:10534 dwarf.c:10593
#, c-format
msgid " [%3d] 0x%s"
msgstr " [%3d] 0x%s"
-#: dwarf.c:10528 dwarf.c:10586
+#: dwarf.c:10549 dwarf.c:10621
#, c-format
msgid "Overlarge Dwarf section index detected: %u\n"
msgstr "ВиÑвлено надто великий Ñ–Ð½Ð´ÐµÐºÑ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Dwarf: %u\n"
-#: dwarf.c:10546
+#: dwarf.c:10567
#, c-format
msgid " Size table\n"
msgstr " Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñ–Ð²\n"
-#: dwarf.c:10601
+#: dwarf.c:10607
+#, c-format
+msgid "Too many rows/columns in DWARF index section %s\n"
+msgstr "Забагато Ñ€Ñдків/Ñтовпчиків у розділі покажчика DWARF %s\n"
+
+#: dwarf.c:10636
#, c-format
msgid " Unsupported version (%d)\n"
msgstr " Ðепідтримувана верÑÑ–Ñ (%d)\n"
-#: dwarf.c:10673
+#: dwarf.c:10708
#, c-format
msgid "Displaying the debug contents of section %s is not yet supported.\n"
msgstr "Ð’Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð´Ñ–Ð°Ð³Ð½Ð¾Ñтичної інформації розділу %s ще не підтримуєтьÑÑ.\n"
-#: dwarf.c:10704
+#: dwarf.c:10739
#, c-format
msgid "Attempt to allocate an array with an excessive number of elements: 0x%lx\n"
msgstr "Спроба розміÑтити маÑив із надто великою кількіÑÑ‚ÑŽ елементів: 0x%lx\n"
-#: dwarf.c:10722
+#: dwarf.c:10757
#, c-format
msgid "Attempt to re-allocate an array with an excessive number of elements: 0x%lx\n"
msgstr "Спроба повторно розміÑтити маÑив із надто великою кількіÑÑ‚ÑŽ елементів: 0x%lx\n"
-#: dwarf.c:10738
+#: dwarf.c:10773
#, c-format
msgid "Attempt to allocate a zero'ed array with an excessive number of elements: 0x%lx\n"
msgstr "Спроба розміÑтити нульовий маÑив із надто великою кількіÑÑ‚ÑŽ елементів: 0x%lx\n"
-#: dwarf.c:10836
+#: dwarf.c:10871
#, c-format
msgid "Unable to reopen separate debug info file: %s\n"
msgstr "Ðе вдалоÑÑ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾ відкрити окремий файл діагноÑтичних даних: %s\n"
-#: dwarf.c:10848
+#: dwarf.c:10883
#, c-format
msgid "Separate debug info file %s found, but CRC does not match - ignoring\n"
msgstr "ВиÑвлено окремий файл діагноÑтичних даних %s, але його контрольна Ñума не збігаєтьÑÑ Ð· еталонною — ігноруємо\n"
-#: dwarf.c:11024
+#: dwarf.c:11062
#, c-format
msgid "Corrupt debuglink section: %s\n"
msgstr "Пошкоджено розділ debuglink: %s\n"
-#: dwarf.c:11062
+#: dwarf.c:11101
msgid "Out of memory"
msgstr "Бракує пам'ÑÑ‚Ñ–"
#. Failed to find the file.
-#: dwarf.c:11136
+#: dwarf.c:11176
#, c-format
msgid "could not find separate debug file '%s'\n"
msgstr "не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ окремий файл діагноÑтичних даних «%s»\n"
-#: dwarf.c:11138 dwarf.c:11143 dwarf.c:11149 dwarf.c:11153 dwarf.c:11158
-#: dwarf.c:11161 dwarf.c:11164 dwarf.c:11167
+#: dwarf.c:11178 dwarf.c:11183 dwarf.c:11189 dwarf.c:11193 dwarf.c:11198
+#: dwarf.c:11201 dwarf.c:11204 dwarf.c:11207
#, c-format
msgid "tried: %s\n"
msgstr "Ñпроба: %s\n"
-#: dwarf.c:11175
+#: dwarf.c:11215
#, c-format
msgid "tried: DEBUGINFOD_URLS=%s\n"
msgstr "Ñпроба: DEBUGINFOD_URLS=%s\n"
-#: dwarf.c:11192
+#: dwarf.c:11243
#, c-format
msgid "failed to open separate debug file: %s\n"
msgstr "не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ окремий файл діагноÑтичних даних: %s\n"
-#: dwarf.c:11201
+#: dwarf.c:11252
#, c-format
msgid ""
"\n"
@@ -4241,17 +4248,17 @@ msgstr ""
"\n"
"%s: виÑвлено окремий файл діагноÑтичних даних: %s\n"
-#: dwarf.c:11224
+#: dwarf.c:11275
msgid "Out of memory allocating dwo filename\n"
msgstr "Бракує пам'ÑÑ‚Ñ– Ð´Ð»Ñ Ð½Ð°Ð·Ð²Ð¸ файла dwo\n"
-#: dwarf.c:11230
+#: dwarf.c:11281
#, c-format
msgid "Unable to load dwo file: %s\n"
msgstr "Ðе вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ файл dwo: %s\n"
#. FIXME: We should check the dwo_id.
-#: dwarf.c:11237
+#: dwarf.c:11288
#, c-format
msgid ""
"%s: Found separate debug object file: %s\n"
@@ -4260,28 +4267,44 @@ msgstr ""
"%s: виÑвлено окремий файл діагноÑтичних об'єктів: %s\n"
"\n"
-#: dwarf.c:11256
+#: dwarf.c:11320
+msgid "Unable to load the .note.gnu.build-id section\n"
+msgstr "Ðе вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ розділ .note.gnu.build-id\n"
+
+#: dwarf.c:11326
+msgid ".note.gnu.build-id section is corrupt/empty\n"
+msgstr "Розділ .note.gnu.build-id пошкоджено або він є порожнім\n"
+
+#: dwarf.c:11347
+msgid ".note.gnu.build-id data size is too small\n"
+msgstr "Розмір даних .note.gnu.build-id є надто малим\n"
+
+#: dwarf.c:11353
+msgid ".note.gnu.build-id data size is too bug\n"
+msgstr "Розмір даних .note.gnu.build-id є надто великим\n"
+
+#: dwarf.c:11414
msgid ".debug_sup section is corrupt/empty\n"
msgstr "розділ .debug_sup пошкоджено або він є порожнім\n"
-#: dwarf.c:11266
+#: dwarf.c:11424
msgid "filename in .debug_sup section is corrupt\n"
msgstr "назву файла у розділі .debug_sup пошкоджено\n"
-#: dwarf.c:11281
+#: dwarf.c:11439
msgid "unable to construct path for supplementary debug file"
msgstr "не вдалоÑÑ Ð¿Ð¾Ð±ÑƒÐ´ÑƒÐ²Ð°Ñ‚Ð¸ шлÑÑ… до допоміжного діагноÑтичного файла"
-#: dwarf.c:11295
+#: dwarf.c:11453
msgid "out of memory constructing filename for .debug_sup link\n"
msgstr "вихід за межі отриманої облаÑÑ‚Ñ– пам'ÑÑ‚Ñ– під Ñ‡Ð°Ñ Ð¿Ð¾Ð±ÑƒÐ´Ð¾Ð²Ð¸ назви файла Ð´Ð»Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ .debug_sup\n"
-#: dwarf.c:11303
+#: dwarf.c:11461
#, c-format
msgid "unable to open file '%s' referenced from .debug_sup section\n"
msgstr "не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл «%s», на Ñкий поÑилаєтьÑÑ Ñ€Ð¾Ð·Ð´Ñ–Ð» .debug_sup\n"
-#: dwarf.c:11308
+#: dwarf.c:11466
#, c-format
msgid ""
"%s: Found supplementary debug file: %s\n"
@@ -4290,19 +4313,19 @@ msgstr ""
"%s: виÑвлено додатковий діагноÑтичний файл: %s\n"
"\n"
-#: dwarf.c:11398
+#: dwarf.c:11558
msgid "Multiple DWO_NAMEs encountered for the same CU\n"
msgstr "ВиÑвлено декілька DWO_NAME Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ CU\n"
-#: dwarf.c:11410
+#: dwarf.c:11570
msgid "multiple DWO_IDs encountered for the same CU\n"
msgstr "виÑвлено декілька DWO_ID Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ CU\n"
-#: dwarf.c:11415
+#: dwarf.c:11575
msgid "Unexpected DWO INFO type"
msgstr "ÐеÑподіваний тип INFO DWO"
-#: dwarf.c:11430
+#: dwarf.c:11590
#, c-format
msgid ""
"The %s section contains link(s) to dwo file(s):\n"
@@ -4311,44 +4334,42 @@ msgstr ""
"Розділ %s міÑтить поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° файли dwo:\n"
"\n"
-#: dwarf.c:11435
+#: dwarf.c:11595
#, c-format
msgid " Name: %s\n"
msgstr " Ðазва: %s\n"
-#: dwarf.c:11436
+#: dwarf.c:11596
#, c-format
msgid " Directory: %s\n"
msgstr " Каталог: %s\n"
-#: dwarf.c:11436
+#: dwarf.c:11596
msgid "<not-found>"
msgstr "<не знайдено>"
-#: dwarf.c:11438
+#: dwarf.c:11598
#, c-format
msgid " ID: "
msgstr " Ід.: "
-#: dwarf.c:11440
+#: dwarf.c:11600
#, c-format
msgid " ID: <not specified>\n"
msgstr " Ід.: <не вказано>\n"
-#: dwarf.c:11604 dwarf.c:11648
+#: dwarf.c:11764 dwarf.c:11808
#, c-format
msgid "Unrecognized debug option '%s'\n"
msgstr "Ðерозпізнаний діагноÑтичний ключ '%s'\n"
-#: dwarf.h:270
-#, c-format
-msgid "%s:%lu: end of data encountered whilst reading LEB\n"
-msgstr "%s:%lu: зафікÑовано кінець даних під Ñ‡Ð°Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ LEB\n"
+#: dwarf.h:273
+msgid "end of data encountered whilst reading LEB\n"
+msgstr "зафікÑовано кінець даних під Ñ‡Ð°Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ LEB\n"
-#: dwarf.h:272
-#, c-format
-msgid "%s:%lu: read LEB value is too large to store in destination variable\n"
-msgstr "%s:%lu: прочитане Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ LEB Ñ” надто великим Ð´Ð»Ñ Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ Ñƒ змінній призначеннÑ\n"
+#: dwarf.h:275
+msgid "read LEB value is too large to store in destination variable\n"
+msgstr "прочитане Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ LEB Ñ” надто великим Ð´Ð»Ñ Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ Ñƒ змінній призначеннÑ\n"
#: elfcomm.c:47
#, c-format
@@ -4433,7 +4454,7 @@ msgstr "%s: помилка при позиціюванні першого заг
#. PR 24049 - we cannot use filedata->file_name as this will
#. have already been freed.
-#: elfcomm.c:519 elfcomm.c:753 elfedit.c:595 readelf.c:21730
+#: elfcomm.c:519 elfcomm.c:753 elfedit.c:613 readelf.c:22187
#, c-format
msgid "%s: failed to read archive header\n"
msgstr "%s: помилка при читанні заголовка архіву\n"
@@ -4480,72 +4501,77 @@ msgstr "Ðекоректна назва елемента архіву Thin\n"
msgid "%s: failed to seek to next file name\n"
msgstr "%s: помилка при Ð¿Ð¾Ð·Ð¸Ñ†Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ Ð½Ð° наÑтупну назву файла\n"
-#: elfcomm.c:758 elfedit.c:602 readelf.c:21737
+#: elfcomm.c:758 elfedit.c:620 readelf.c:22194
#, c-format
msgid "%s: did not find a valid archive header\n"
msgstr "%s: не знайдено коректного заголовка архіву\n"
-#: elfedit.c:91
+#: elfedit.c:93
#, c-format
msgid "%s: Not an i386 nor x86-64 ELF file\n"
msgstr "%s: не є файлом ELF i386 або x86-64\n"
-#: elfedit.c:97
+#: elfedit.c:99
#, c-format
msgid "%s: stat () failed\n"
msgstr "%s: помилка stat ()\n"
-#: elfedit.c:105
+#: elfedit.c:107
#, c-format
msgid "%s: mmap () failed\n"
msgstr "%s: помилка mmap ()\n"
-#: elfedit.c:244
+#: elfedit.c:246
#, c-format
msgid "%s: Invalid PT_NOTE segment\n"
msgstr "%s: некоректний Ñегмент PT_NOTE\n"
-#: elfedit.c:269
+#: elfedit.c:271
#, c-format
msgid "Unknown x86 feature: %s\n"
msgstr "Ðевідома можливіÑÑ‚ÑŒ x86: %s\n"
-#: elfedit.c:317
+#: elfedit.c:319
#, c-format
msgid "%s: Unsupported EI_VERSION: %d is not %d\n"
msgstr "%s: непідтримуване Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ EI_VERSION: %d не дорівнює %d\n"
-#: elfedit.c:338
+#: elfedit.c:340
#, c-format
msgid "%s: Unmatched input EI_CLASS: %d is not %d\n"
msgstr "%s: невідповідніÑÑ‚ÑŒ вхідного EI_CLASS: %d не дорівнює %d\n"
-#: elfedit.c:347
+#: elfedit.c:349
#, c-format
msgid "%s: Unmatched output EI_CLASS: %d is not %d\n"
msgstr "%s: невідповідніÑÑ‚ÑŒ вихідного EI_CLASS: %d не дорівнює %d\n"
-#: elfedit.c:356
+#: elfedit.c:358
#, c-format
msgid "%s: Unmatched e_machine: %d is not %d\n"
msgstr "%s: невідповідніÑÑ‚ÑŒ e_machine: %d не дорівнює %d\n"
-#: elfedit.c:367
+#: elfedit.c:369
#, c-format
msgid "%s: Unmatched e_type: %d is not %d\n"
msgstr "%s: невідповідніÑÑ‚ÑŒ e_type: %d не дорівнює %d\n"
-#: elfedit.c:378
+#: elfedit.c:380
#, c-format
msgid "%s: Unmatched EI_OSABI: %d is not %d\n"
msgstr "%s: EI_OSABI без відповідника: %d не дорівнює %d\n"
-#: elfedit.c:411
+#: elfedit.c:392
+#, c-format
+msgid "%s: Unmatched EI_ABIVERSION: %d is not %d\n"
+msgstr "%s: EI_ABIVERSION без відповідника: %d не дорівнює %d\n"
+
+#: elfedit.c:429
#, c-format
msgid "%s: Failed to update ELF header: %s\n"
msgstr "%s: не вдалоÑÑ Ð¾Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ заголовок ELF: %s\n"
-#: elfedit.c:481
+#: elfedit.c:499
msgid ""
"This executable has been built without support for a\n"
"64 bit data type and so it cannot process 64 bit ELF files.\n"
@@ -4553,87 +4579,87 @@ msgstr ""
"Це виконуваний файл було зібрано без підтримки 64-бітового типу\n"
"даних, тому він не може оброблÑти 64-бітові файли ELF.\n"
-#: elfedit.c:522
+#: elfedit.c:540
#, c-format
msgid "%s: Failed to read ELF header\n"
msgstr "%s: не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ заголовок ELF\n"
-#: elfedit.c:529
+#: elfedit.c:547
#, c-format
msgid "%s: Failed to seek to ELF header\n"
msgstr "%s: не вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ Ð¿Ð¾Ð·Ð¸Ñ†Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ Ð½Ð° заголовок ELF\n"
-#: elfedit.c:586 readelf.c:21718
+#: elfedit.c:604 readelf.c:22175
#, c-format
msgid "%s: failed to seek to next archive header\n"
msgstr "%s: помилка при пошуку наÑтупного заголовка архіву\n"
-#: elfedit.c:617 elfedit.c:626 readelf.c:21752 readelf.c:21761
+#: elfedit.c:635 elfedit.c:644 readelf.c:22207 readelf.c:22216
#, c-format
msgid "%s: bad archive file name\n"
msgstr "%s: неправильна назва файла архіву\n"
-#: elfedit.c:649 elfedit.c:760
+#: elfedit.c:667 elfedit.c:778
#, c-format
msgid "Input file '%s' is not readable\n"
msgstr "Вхідний файл '%s' Ñ” непридатним до читаннÑ.\n"
-#: elfedit.c:676
+#: elfedit.c:694
#, c-format
msgid "%s: failed to seek to archive member\n"
msgstr "%s: не вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ Ð¿Ð¾Ð·Ð¸Ñ†Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ Ð½Ð° член архіву\n"
-#: elfedit.c:717 readelf.c:21880
+#: elfedit.c:735 readelf.c:22335
#, c-format
msgid "'%s': No such file\n"
msgstr "'%s': Ðемає такого файла\n"
-#: elfedit.c:719 readelf.c:21882
+#: elfedit.c:737 readelf.c:22337
#, c-format
msgid "Could not locate '%s'. System error message: %s\n"
msgstr "Ðеможливо найти '%s'. СиÑтемне Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ помилку: %s\n"
-#: elfedit.c:740 readelf.c:21889
+#: elfedit.c:758 readelf.c:22344
#, c-format
msgid "'%s' is not an ordinary file\n"
msgstr "%s не є звичайним файлом\n"
-#: elfedit.c:766 readelf.c:21911
+#: elfedit.c:784 readelf.c:22366
#, c-format
msgid "%s: Failed to read file's magic number\n"
msgstr "%s: не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ контрольну Ñуму файла\n"
-#: elfedit.c:830
+#: elfedit.c:848
#, c-format
msgid "Unknown OSABI: %s\n"
msgstr "Ðевідоме Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ OSABI: %s\n"
-#: elfedit.c:855
+#: elfedit.c:873
#, c-format
msgid "Unknown machine type: %s\n"
msgstr "Ðевідомий тип архітектури: %s\n"
-#: elfedit.c:874
+#: elfedit.c:892
#, c-format
msgid "Unknown type: %s\n"
msgstr "Ðевідомий тип: %s\n"
-#: elfedit.c:921
+#: elfedit.c:943
#, c-format
msgid "Usage: %s <option(s)> elffile(s)\n"
msgstr "ВикориÑтаннÑ: %s <ключі> файли_elf\n"
-#: elfedit.c:923
+#: elfedit.c:945
#, c-format
msgid " Update the ELF header of ELF files\n"
msgstr " ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° ELF файлів ELF\n"
-#: elfedit.c:924 objcopy.c:565 objcopy.c:706 strings.c:679
+#: elfedit.c:946 nm.c:295 objcopy.c:565 objcopy.c:706 strings.c:1314
#, c-format
msgid " The options are:\n"
msgstr " Параметри:\n"
-#: elfedit.c:925
+#: elfedit.c:947
#, c-format
msgid ""
" --input-mach [none|i386|iamcu|l1om|k1om|x86_64]\n"
@@ -4648,6 +4674,8 @@ msgid ""
" Set input OSABI\n"
" --output-osabi [%s]\n"
" Set output OSABI\n"
+" --input-abiversion [0-255] Set input ABIVERSION\n"
+" --output-abiversion [0-255] Set output ABIVERSION\n"
msgstr ""
" --input-mach [none|i386|iamcu|l1om|k1om|x86_64]\n"
" Ð’Ñтановити вхідний тип комп'ютера\n"
@@ -4661,8 +4689,10 @@ msgstr ""
" Ð’Ñтановити вхідний OSABI\n"
" --output-osabi [%s]\n"
" Ð’Ñтановити вихідний OSABI\n"
+" --input-abiversion [0-255] Ð’Ñтановити Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ABIVERSION вхідних даних\n"
+" --output-abiversion [0-255] Ð’Ñтановити Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ABIVERSION результату\n"
-#: elfedit.c:940
+#: elfedit.c:964
#, c-format
msgid ""
" --enable-x86-feature [ibt|shstk|lam_u48|lam_u57]\n"
@@ -4675,7 +4705,7 @@ msgstr ""
" --disable-x86-feature [ibt|shstk|lam_u48|lam_u57]\n"
" вимкнути можливіÑÑ‚ÑŒ x86\n"
-#: elfedit.c:946
+#: elfedit.c:970
#, c-format
msgid ""
" -h --help Display this information\n"
@@ -4684,6 +4714,11 @@ msgstr ""
" -h --help вивеÑти ці дані\n"
" -v --version вивеÑти номер верÑÑ–Ñ— %s\n"
+#: elfedit.c:1049 elfedit.c:1060
+#, c-format
+msgid "Invalid ABIVERSION: %s\n"
+msgstr "Ðекоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ABIVERSION: %s\n"
+
#: emul_aix.c:44
#, c-format
msgid " [-g] - 32 bit small archive\n"
@@ -4704,150 +4739,249 @@ msgstr " [-X64] - пропуÑкає 32-бітні об'єкти\n"
msgid " [-X32_64] - accepts 32 and 64 bit objects\n"
msgstr " [-X32_64] - допуÑкає 32- Ñ– 64-бітні об'єкти\n"
-#: mclex.c:240
+#: mclex.c:245
msgid "Duplicate symbol entered into keyword list."
msgstr "У ÑпиÑку ключових Ñлів введено дублікат Ñимволу."
-#: nm.c:274 size.c:88 strings.c:677
+#: nm.c:293 size.c:88 strings.c:1312
#, c-format
msgid "Usage: %s [option(s)] [file(s)]\n"
msgstr "ВикориÑтаннÑ: %s [ключі] [файл(и)]\n"
-#: nm.c:275
+#: nm.c:294
#, c-format
msgid " List symbols in [file(s)] (a.out by default).\n"
msgstr " Ð’Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ ÑпиÑку Ñимволів у [файл(и)] (типово в a.out).\n"
-#: nm.c:276
+#: nm.c:296
+#, c-format
+msgid " -a, --debug-syms Display debugger-only symbols\n"
+msgstr " -a, --debug-syms вивеÑти Ñимволи, Ñкі призначено лише Ð´Ð»Ñ Ð·Ð°Ñобу діагноÑтики\n"
+
+#: nm.c:298
+#, c-format
+msgid " -A, --print-file-name Print name of the input file before every symbol\n"
+msgstr " -A, --print-file-name виводити назву вхідного файла перед кожним Ñимволом\n"
+
+#: nm.c:300
+#, c-format
+msgid " -B Same as --format=bsd\n"
+msgstr " -B те Ñаме, що Ñ– --format=bsd\n"
+
+#: nm.c:302
+#, c-format
+msgid " -C, --demangle[=STYLE] Decode mangled/processed symbol names\n"
+msgstr " -C, --demangle[=СТИЛЬ] декодувати зашифровані/оброблені назви Ñимволів\n"
+
+#: nm.c:304 readelf.c:5056
+msgid " STYLE can be "
+msgstr " Можливі Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° СТИЛЬ: "
+
+#: nm.c:306
+#, c-format
+msgid " --no-demangle Do not demangle low-level symbol names\n"
+msgstr " --no-demangle не дешифрувати низькорівневі назви Ñимволів\n"
+
+#: nm.c:308
+#, c-format
+msgid " --recurse-limit Enable a demangling recursion limit. (default)\n"
+msgstr " --recurse-limit увімкнути Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ð½Ð° рекурÑÑ–ÑŽ при дешифруванні (типова поведінка)\n"
+
+#: nm.c:310
+#, c-format
+msgid " --no-recurse-limit Disable a demangling recursion limit.\n"
+msgstr " --no-recurse-limit вимкнути Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ð½Ð° рекурÑÑ–ÑŽ при дешифруванні.\n"
+
+#: nm.c:312
+#, c-format
+msgid " -D, --dynamic Display dynamic symbols instead of normal symbols\n"
+msgstr " -D, --dynamic вивеÑти динамічні Ñимволи заміÑÑ‚ÑŒ звичайних Ñимволів\n"
+
+#: nm.c:314
+#, c-format
+msgid " --defined-only Display only defined symbols\n"
+msgstr " --defined-only вивеÑти лише визначені Ñимволи\n"
+
+#: nm.c:316
+#, c-format
+msgid " -e (ignored)\n"
+msgstr " -e (буде проігноровано)\n"
+
+#: nm.c:318
#, c-format
msgid ""
-" The options are:\n"
-" -a, --debug-syms Display debugger-only symbols\n"
-" -A, --print-file-name Print name of the input file before every symbol\n"
-" -B Same as --format=bsd\n"
-" -C, --demangle[=STYLE] Decode low-level symbol names into user-level names\n"
-" The STYLE, if specified, can be `auto' (the default),\n"
-" `gnu', `lucid', `arm', `hp', `edg', `gnu-v3', `java'\n"
-" or `gnat'\n"
-" --no-demangle Do not demangle low-level symbol names\n"
-" --recurse-limit Enable a demangling recursion limit. This is the default.\n"
-" --no-recurse-limit Disable a demangling recursion limit.\n"
-" -D, --dynamic Display dynamic symbols instead of normal symbols\n"
-" --defined-only Display only defined symbols\n"
-" -e (ignored)\n"
" -f, --format=FORMAT Use the output format FORMAT. FORMAT can be `bsd',\n"
-" `sysv', `posix' or 'just-symbols'. The default is `bsd'\n"
-" -g, --extern-only Display only external symbols\n"
-" --ifunc-chars=CHARS Characters to use when displaying ifunc symbols\n"
-" -j, --just-symbols Same as --format=just-symbols\n"
+" `sysv', `posix' or 'just-symbols'.\n"
+" The default is `bsd'\n"
+msgstr ""
+" -f, --format=ФОРМÐТ викориÑтовувати формат виводу ФОРМÐТ ФОРМÐТом може бути\n"
+" «bsd», «sysv», «posix» або «just-symbols».\n"
+" Типовим Ñ” Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«bsd»\n"
+
+#: nm.c:322
+#, c-format
+msgid " -g, --extern-only Display only external symbols\n"
+msgstr " -g, --extern-only вивеÑти лише зовнішні Ñимволи\n"
+
+#: nm.c:324
+#, c-format
+msgid " --ifunc-chars=CHARS Characters to use when displaying ifunc symbols\n"
+msgstr " --ifunc-chars=СИМВ Ñимволи, Ñкими Ñлід ÑкориÑтатиÑÑ Ð´Ð»Ñ Ð¿Ð¾ÐºÐ°Ð·Ñƒ Ñимволів ifunc\n"
+
+#: nm.c:326
+#, c-format
+msgid " -j, --just-symbols Same as --format=just-symbols\n"
+msgstr " -j, --just-symbols те Ñаме, що Ñ– --format=just-symbols\n"
+
+#: nm.c:328
+#, c-format
+msgid ""
" -l, --line-numbers Use debugging information to find a filename and\n"
" line number for each symbol\n"
-" -n, --numeric-sort Sort symbols numerically by address\n"
-" -o Same as -A\n"
-" -p, --no-sort Do not sort the symbols\n"
-" -P, --portability Same as --format=posix\n"
-" -r, --reverse-sort Reverse the sense of the sort\n"
msgstr ""
-" Ключі:\n"
-" -a, --debug-syms Ð’Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð»Ð¸ÑˆÐµ діагноÑтичних Ñимволів\n"
-" -A, --print-file-name Ð’Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð½Ð°Ð·Ð²Ð¸ вхідного файла перед кожним Ñимволом\n"
-" -B То же, що і --format=bsd\n"
-" -C, --demangle[=СТИЛЬ] Ð”ÐµÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð¸Ð·ÑŒÐºÐ¾Ñ€Ñ–Ð²Ð½ÐµÐ²Ð¸Ñ… назв Ñимволів у назви\n"
-" Ñ€Ñ–Ð²Ð½Ñ ÐºÐ¾Ñ€Ð¸Ñтувача\n"
-" СТИЛЬ, Ñкщо вказаний, може бути `auto' (типово),\n"
-" `gnu', `lucid', `arm', `hp', `edg', `gnu-v3', `java'\n"
-" або `gnat'\n"
-" --no-demangle Ðе декодувати низькорівневі назви Ñимволів\n"
-" --recurse-limit Увімкнути Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ð½Ð° рекурÑÑ–ÑŽ під Ñ‡Ð°Ñ Ð´ÐµÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ [типово]\n"
-" --no-recurse-limit Вимкнути Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ð½Ð° рекурÑÑ–ÑŽ під Ñ‡Ð°Ñ Ð´ÐµÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ\n"
-" -D, --dynamic Ð’Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¸Ñ… Ñимволів заміÑÑ‚ÑŒ звичайних Ñимволів\n"
-" --defined-only Ð’Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð»Ð¸ÑˆÐµ визначених Ñимволів\n"
-" -e (ігноруєтьÑÑ)\n"
-" -f, --format=ФОРМÐТ ВикориÑÑ‚Ð°Ð½Ð½Ñ Ð¤ÐžÐ ÐœÐТ Ñк формату виводу.\n"
-" ФОРМÐТ може бути «bsd», «sysv», «posix» або «just-symbols».\n"
-" Типово викориÑтовуєтьÑÑ `bsd'.\n"
-" -g, --extern-only Ð’Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð»Ð¸ÑˆÐµ зовнішніх Ñимволів\n"
-" --ifunc-chars=СИМВ Символи, Ñким Ñлід ÑкориÑтатиÑÑ Ð¿Ñ€Ð¸ показі Ñимволів ifunc\n"
-" -j, --just-symbols Те Ñаме, що Ñ– --format=just-symbols\n"
-" -l, --line-numbers ВикориÑÑ‚Ð°Ð½Ð½Ñ Ð´Ñ–Ð°Ð³Ð½Ð¾Ñтичних даних Ð´Ð»Ñ Ð¿Ð¾ÑˆÑƒÐºÑƒ\n"
-" назви файла Ñ– номеру Ñ€Ñдка Ð´Ð»Ñ ÐºÐ¾Ð¶Ð½Ð¾Ð³Ð¾ Ñимволу\n"
-" -n, --numeric-sort Ð¡Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñимволів за чиÑловими характериÑтиками адреÑи\n"
-" -o Те Ñаме, що Ñ– -A\n"
-" -p, --no-sort Без ÑÐ¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñимволів\n"
-" -P, --portability Те Ñаме, що Ñ– --format=posix\n"
-" -r, --reverse-sort Ð¡Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ зворотному порÑдку\n"
-
-#: nm.c:303
+" -l, --line-numbers ÑкориÑтатиÑÑ Ð²Ñ–Ð´Ð¾Ð¼Ð¾ÑÑ‚Ñми щодо діагноÑтики Ð´Ð»Ñ Ð¿Ð¾ÑˆÑƒÐºÑƒ\n"
+" назви файла Ñ– номера Ñ€Ñдка Ð´Ð»Ñ ÐºÐ¾Ð¶Ð½Ð¾Ð³Ð¾ з Ñимволів\n"
+
+#: nm.c:331
+#, c-format
+msgid " -n, --numeric-sort Sort symbols numerically by address\n"
+msgstr " -n, --numeric-sort упорÑдкувати Ñимволи у чиÑловий ÑпоÑіб за адреÑою\n"
+
+#: nm.c:333
+#, c-format
+msgid " -o Same as -A\n"
+msgstr " -o те Ñаме, що Ñ– -A\n"
+
+#: nm.c:335
+#, c-format
+msgid " -p, --no-sort Do not sort the symbols\n"
+msgstr " -p, --no-sort не упорÑдковувати Ñимволи\n"
+
+#: nm.c:337
+#, c-format
+msgid " -P, --portability Same as --format=posix\n"
+msgstr " -P, --portability те Ñаме, що Ñ– --format=posix\n"
+
+#: nm.c:339
+#, c-format
+msgid " -r, --reverse-sort Reverse the sense of the sort\n"
+msgstr " -r, --reverse-sort зЗмінити порÑдок на протилежний\n"
+
+#: nm.c:342
#, c-format
msgid " --plugin NAME Load the specified plugin\n"
msgstr " --plugin ÐÐЗВРЗавантажити вказаний додаток\n"
-#: nm.c:306
+#: nm.c:345
+#, c-format
+msgid " -S, --print-size Print size of defined symbols\n"
+msgstr " -S, --print-size вивеÑти розмір визначених Ñимволів\n"
+
+#: nm.c:347
+#, c-format
+msgid " -s, --print-armap Include index for symbols from archive members\n"
+msgstr " -s, --print-armap включити покажчик Ð´Ð»Ñ Ñимволів з елементів архіву\n"
+
+#: nm.c:349
+#, c-format
+msgid " --quiet Suppress \"no symbols\" diagnostic\n"
+msgstr " --quiet придушити діагноÑтику «немає Ñимволів»\n"
+
+#: nm.c:351
+#, c-format
+msgid " --size-sort Sort symbols by size\n"
+msgstr " --size-sort упорÑдкувати Ñимволи за розміром\n"
+
+#: nm.c:353
+#, c-format
+msgid " --special-syms Include special symbols in the output\n"
+msgstr " --special-syms включити до Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ñпеціальні Ñимволи\n"
+
+#: nm.c:355
+#, c-format
+msgid " --synthetic Display synthetic symbols as well\n"
+msgstr " --synthetic вивеÑти також Ñинтетичні Ñимволи\n"
+
+#: nm.c:357
+#, c-format
+msgid " -t, --radix=RADIX Use RADIX for printing symbol values\n"
+msgstr " -t, --radix=RADIX викориÑтати RADIX Ð´Ð»Ñ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½ÑŒ Ñимволів\n"
+
+#: nm.c:359
+#, c-format
+msgid " --target=BFDNAME Specify the target object format as BFDNAME\n"
+msgstr " --target=BFD-назва вказати Ñк формат об'єкта Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ BFD-назву\n"
+
+#: nm.c:361
+#, c-format
+msgid " -u, --undefined-only Display only undefined symbols\n"
+msgstr " -u, --undefined-only вивеÑти лише невизначені Ñимволи\n"
+
+#: nm.c:363
#, c-format
msgid ""
-" -S, --print-size Print size of defined symbols\n"
-" -s, --print-armap Include index for symbols from archive members\n"
-" --quiet Suppress \"no symbols\" diagnostic\n"
-" --size-sort Sort symbols by size\n"
-" --special-syms Include special symbols in the output\n"
-" --synthetic Display synthetic symbols as well\n"
-" -t, --radix=RADIX Use RADIX for printing symbol values\n"
-" --target=BFDNAME Specify the target object format as BFDNAME\n"
-" -u, --undefined-only Display only undefined symbols\n"
-" --with-symbol-versions Display version strings after symbol names\n"
-" -X 32_64 (ignored)\n"
-" @FILE Read options from FILE\n"
-" -h, --help Display this information\n"
-" -V, --version Display this program's version number\n"
-"\n"
-msgstr ""
-" -S, --print-size Ð’Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ визначених Ñимволів\n"
-" -s, --print-armap Ð’ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð¿Ð¾ÐºÐ°Ð¶Ñ‡Ð¸ÐºÐ° Ð´Ð»Ñ Ñимволів з членів архіву\n"
-" --quiet Придушити діагноÑтику «без Ñимволів»\n"
-" --size-sort Ð¡Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñимволів за розміром\n"
-" --special-syms Ð’ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ñпеціальних Ñимволів у дані, що виводÑÑ‚ÑŒÑÑ\n"
-" --synthetic Ð’Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ñ‚Ð°ÐºÐ¾Ð¶ Ñинтетичних Ñимволів\n"
-" -t, --radix=RADIX ВикориÑÑ‚Ð°Ð½Ð½Ñ RADIX Ð´Ð»Ñ Ð²Ð¸Ð²Ð¾Ð´Ñƒ значень Ñимволів\n"
-" --target=BFD-ÐÐÐ—Ð’Ð Ð’ÐºÐ°Ð·ÑƒÐ²Ð°Ð½Ð½Ñ Ñ†Ñ–Ð»ÑŒÐ¾Ð²Ð¾Ð³Ð¾ формату об'єкта Ñк BFD-ÐÐЗВÐ\n"
-" -u, --undefined-only Ð’Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð»Ð¸ÑˆÐµ невизначених Ñимволів\n"
-" --with-symbol-versions ВивеÑти Ñ€Ñдки верÑій піÑÐ»Ñ Ð½Ð°Ð·Ð² Ñимволів\n"
-" -X 32_64 (ігноруєтьÑÑ)\n"
-" @ФÐЙЛ Читати ключі з ФÐЙЛÐ\n"
-" -h, --help Ð’Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ñ†Ñ–Ñ”Ñ— інформації\n"
-" -V, --version Ð’Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð½Ð¾Ð¼ÐµÑ€Ð° верÑÑ–Ñ— програми\n"
-"\n"
-
-#: nm.c:340
+" -U {d|s|i|x|e|h} Specify how to treat UTF-8 encoded unicode characters\n"
+" --unicode={default|show|invalid|hex|escape|highlight}\n"
+msgstr ""
+" -U {d|s|i|x|e|h} визначити ÑпоÑіб обробки кодованих в UTF-8 Ñимволів unicode\n"
+" --unicode={default|show|invalid|hex|escape|highlight}\n"
+
+#: nm.c:366
+#, c-format
+msgid " --with-symbol-versions Display version strings after symbol names\n"
+msgstr " --with-symbol-versions вивеÑти Ñ€Ñдки верÑій піÑÐ»Ñ Ð½Ð°Ð·Ð² Ñимволів\n"
+
+#: nm.c:368
+#, c-format
+msgid " -X 32_64 (ignored)\n"
+msgstr " -X 32_64 (буде проігноровано)\n"
+
+#: nm.c:370
+#, c-format
+msgid " @FILE Read options from FILE\n"
+msgstr " @ФÐЙЛ прочитати параметри з файла ФÐЙЛ\n"
+
+#: nm.c:372
+#, c-format
+msgid " -h, --help Display this information\n"
+msgstr " -h --help вивеÑти ці дані\n"
+
+#: nm.c:374
+#, c-format
+msgid " -V, --version Display this program's version number\n"
+msgstr " -V, --version вивеÑти номер верÑÑ–Ñ— цієї програми\n"
+
+#: nm.c:395
#, c-format
msgid "%s: invalid radix"
msgstr "%s: неправильний radix"
-#: nm.c:370
+#: nm.c:425
#, c-format
msgid "%s: invalid output format"
msgstr "%s: неправильний формат виводу"
-#: nm.c:395 readelf.c:12090 readelf.c:12133
+#: nm.c:450 readelf.c:12440 readelf.c:12483
#, c-format
msgid "<processor specific>: %d"
msgstr "<Ñпецифічний Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑора>: %d"
-#: nm.c:397 readelf.c:12097 readelf.c:12150
+#: nm.c:452 readelf.c:12447 readelf.c:12500
#, c-format
msgid "<OS specific>: %d"
msgstr "<Ñпецифічний Ð´Ð»Ñ ÐžÐ¡>: %d"
-#: nm.c:399 readelf.c:12100 readelf.c:12153
+#: nm.c:454 readelf.c:12450 readelf.c:12503
#, c-format
msgid "<unknown>: %d"
msgstr "<невідомий>: %d"
-#: nm.c:429
+#: nm.c:484
#, c-format
msgid "<unknown>: %d/%d"
msgstr "<невідомо>: %d/%d"
-#: nm.c:499
+#: nm.c:742
#, c-format
msgid ""
"\n"
@@ -4856,12 +4990,12 @@ msgstr ""
"\n"
"Ð†Ð½Ð´ÐµÐºÑ Ð°Ñ€Ñ…Ñ–Ð²Ñƒ:\n"
-#: nm.c:553 nm.c:1250
+#: nm.c:797 nm.c:1494
#, c-format
msgid "%s: plugin needed to handle lto object"
msgstr "%s: Ð´Ð»Ñ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ об'єкта lto потрібен додаток"
-#: nm.c:1487
+#: nm.c:1731
#, c-format
msgid ""
"\n"
@@ -4874,7 +5008,7 @@ msgstr ""
"Ðевизначені Ñимволи з %s:\n"
"\n"
-#: nm.c:1489
+#: nm.c:1733
#, c-format
msgid ""
"\n"
@@ -4887,7 +5021,7 @@ msgstr ""
"Символи з %s:\n"
"\n"
-#: nm.c:1491 nm.c:1552
+#: nm.c:1735 nm.c:1796
#, c-format
msgid ""
"Name Value Class Type Size Line Section\n"
@@ -4896,7 +5030,7 @@ msgstr ""
"Ðазва Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÐšÐ»Ð°Ñ Ð¢Ð¸Ð¿ Розмір РÑдок Розділ\n"
"\n"
-#: nm.c:1494 nm.c:1555
+#: nm.c:1738 nm.c:1799
#, c-format
msgid ""
"Name Value Class Type Size Line Section\n"
@@ -4905,7 +5039,7 @@ msgstr ""
"Ðазва Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÐšÐ»Ð°Ñ Ð¢Ð¸Ð¿ Розмір РÑдок Розділ\n"
"\n"
-#: nm.c:1548
+#: nm.c:1792
#, c-format
msgid ""
"\n"
@@ -4918,7 +5052,7 @@ msgstr ""
"Ðевизначені Ñимволи з %s[%s]:\n"
"\n"
-#: nm.c:1550
+#: nm.c:1794
#, c-format
msgid ""
"\n"
@@ -4931,20 +5065,25 @@ msgstr ""
"Символи з %s[%s]:\n"
"\n"
-#: nm.c:1656
+#: nm.c:1900
#, c-format
msgid "Print width has not been initialized (%d)"
msgstr "Ширина друку не була ініціалізована (%d)"
-#: nm.c:1915
+#: nm.c:2162 objdump.c:5674 readelf.c:5472 strings.c:292
+#, c-format
+msgid "invalid argument to -U/--unicode: %s"
+msgstr "некоректний аргумент -U/--unicode: %s"
+
+#: nm.c:2177
msgid "Only -X 32_64 is supported"
msgstr "ПідтримуютьÑÑ Ð»Ð¸ÑˆÐµ -X 32_64"
-#: nm.c:1947
+#: nm.c:2209
msgid "Using the --size-sort and --undefined-only options together"
msgstr "ВикориÑÑ‚Ð°Ð½Ð½Ñ Ñ€Ð°Ð·Ð¾Ð¼ ключів --size-sort та --undefined-only"
-#: nm.c:1948
+#: nm.c:2210
msgid "will produce no output, since undefined symbols have no size."
msgstr "не дає даних на вивід, оÑкільки невизначені Ñимволи не мають розмір."
@@ -5328,7 +5467,7 @@ msgstr "помилка: %s одночаÑно вÑтановлює та змін
msgid "cannot open '%s': %s"
msgstr "неможливо відкрити '%s': %s"
-#: objcopy.c:1094 objcopy.c:5055
+#: objcopy.c:1094 objcopy.c:5091
#, c-format
msgid "%s: fread failed"
msgstr "%s: помилка при fread"
@@ -5353,589 +5492,593 @@ msgstr "помилка: розділ %s відповідає одночаÑно
msgid "Section %s not found"
msgstr "Розділ %s не знайдено"
-#: objcopy.c:1654
+#: objcopy.c:1550
+msgid "redefining symbols does not work on LTO-compiled object files"
+msgstr "Ð¿ÐµÑ€ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñимволів не працює Ð´Ð»Ñ Ñкомпільованих LTO об'єктних файлів"
+
+#: objcopy.c:1662
#, c-format
msgid "not stripping symbol `%s' because it is named in a relocation"
msgstr "Ñимвол `%s' не обрізуєтьÑÑ, оÑкільки його назва перелічена при переÑуванні"
-#: objcopy.c:1715
+#: objcopy.c:1723
#, c-format
msgid "'before=%s' not found"
msgstr "Ðе знайдено «before=%s»"
-#: objcopy.c:1754
+#: objcopy.c:1762
#, c-format
msgid "%s: Multiple redefinition of symbol \"%s\""
msgstr "%s: Багатократне Ð¿ÐµÑ€ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñимволу \"%s\""
-#: objcopy.c:1758
+#: objcopy.c:1766
#, c-format
msgid "%s: Symbol \"%s\" is target of more than one redefinition"
msgstr "%s: Символ \"%s\" Ñ” ціллю більш, ніж одного перевизначеннÑ"
-#: objcopy.c:1785
+#: objcopy.c:1793
#, c-format
msgid "couldn't open symbol redefinition file %s (error: %s)"
msgstr "неможливо відкрити файл Ð¿ÐµÑ€ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñимволу %s (помилка: %s)"
-#: objcopy.c:1863
+#: objcopy.c:1871
#, c-format
msgid "%s:%d: garbage found at end of line"
msgstr "%s:%d: наприкінці Ñ€Ñдка знайдено ÑміттÑ"
-#: objcopy.c:1866
+#: objcopy.c:1874
#, c-format
msgid "%s:%d: missing new symbol name"
msgstr "%s:%d: немає назви нового Ñимволу"
-#: objcopy.c:1876
+#: objcopy.c:1884
#, c-format
msgid "%s:%d: premature end of file"
msgstr "%s:%d: передчаÑний кінець файла"
-#: objcopy.c:1903
+#: objcopy.c:1910
#, c-format
msgid "stat returns negative size for `%s'"
msgstr "stat повернув від'ємний розмір Ð´Ð»Ñ `%s'"
-#: objcopy.c:1915
+#: objcopy.c:1922
#, c-format
msgid "copy from `%s' [unknown] to `%s' [unknown]\n"
msgstr "ÐºÐ¾Ð¿Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ Ð· `%s' [невідомо] у `%s' [невідомо]\n"
-#: objcopy.c:2162
+#: objcopy.c:2167
#, c-format
msgid "%s[%s]: Cannot merge - there are relocations against this section"
msgstr "%s[%s]: об'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ðµ — Ñ–Ñнують Ð¿ÐµÑ€ÐµÐ¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð²Ñ–Ð´Ð½Ð¾Ñно цього розділу"
-#: objcopy.c:2184
+#: objcopy.c:2189
msgid "corrupt GNU build attribute note: description size not a factor of 4"
msgstr "пошкоджено нотатку атрибута Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ GNU: розмір опиÑу не Ñ” кратним до 4"
-#: objcopy.c:2191
+#: objcopy.c:2196
msgid "corrupt GNU build attribute note: wrong note type"
msgstr "пошкоджено нотатку атрибута Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ GNU: помилковий тип нотатки"
-#: objcopy.c:2197
+#: objcopy.c:2202
msgid "corrupt GNU build attribute note: note too big"
msgstr "пошкоджено нотатку атрибута Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ GNU: надто велика нотатка"
-#: objcopy.c:2203
+#: objcopy.c:2208
msgid "corrupt GNU build attribute note: name too small"
msgstr "пошкоджено нотатку атрибута Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ GNU: надто мала нотатка"
-#: objcopy.c:2226
+#: objcopy.c:2231
msgid "corrupt GNU build attribute note: unsupported version"
msgstr "пошкоджено нотатку атрибута Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ GNU: непідтримувана верÑÑ–Ñ"
-#: objcopy.c:2260
+#: objcopy.c:2265
msgid "corrupt GNU build attribute note: bad description size"
msgstr "пошкоджено нотатку атрибута Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ GNU: помилковий розмір опиÑу"
-#: objcopy.c:2296
+#: objcopy.c:2301
msgid "corrupt GNU build attribute note: name not NUL terminated"
msgstr "пошкоджено нотатку атрибута Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ GNU: не завершуєтьÑÑ Ñимволом NUL"
-#: objcopy.c:2308
+#: objcopy.c:2313
msgid "corrupt GNU build attribute notes: excess data at end"
msgstr "пошкоджено нотатки атрибута Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ GNU: зайві дані наприкінці"
-#: objcopy.c:2315
+#: objcopy.c:2320
msgid "bad GNU build attribute notes: no known versions detected"
msgstr "помилкові нотатки атрибута Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ GNU: не виÑвлено відомих верÑій"
#. This happens with glibc. No idea why.
-#: objcopy.c:2319
+#: objcopy.c:2324
#, c-format
msgid "%s[%s]: Warning: version note missing - assuming version 3"
msgstr "%s[%s]: попередженнÑ: немає нотатки щодо верÑÑ–Ñ— — припуÑкаємо верÑÑ–ÑŽ 3"
-#: objcopy.c:2329
+#: objcopy.c:2334
msgid "bad GNU build attribute notes: multiple different versions"
msgstr "помилкові нотатки атрибута Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ GNU: декілька різних верÑій"
-#: objcopy.c:2569
+#: objcopy.c:2574
#, c-format
msgid "%s[%s]: Note - dropping 'share' flag as output format is not COFF"
msgstr "%s[%s]: Ð·Ð°ÑƒÐ²Ð°Ð¶ÐµÐ½Ð½Ñ â€” відкидаємо прапорець «share», оÑкільки форматом Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð½Ðµ Ñ” COFF"
#. PR 17636: Call non-fatal so that we return to our parent who
#. may need to tidy temporary files.
-#: objcopy.c:2601
+#: objcopy.c:2606
#, c-format
msgid "unable to change endianness of '%s'"
msgstr "не вдалоÑÑ Ð·Ð¼Ñ–Ð½Ð¸Ñ‚Ð¸ порÑдок байтів «%s»"
-#: objcopy.c:2608
+#: objcopy.c:2613
#, c-format
msgid "unable to modify '%s' due to errors"
msgstr "не вдалоÑÑ Ð·Ð¼Ñ–Ð½Ð¸Ñ‚Ð¸ «%s» через помилки"
-#: objcopy.c:2621
+#: objcopy.c:2626
#, c-format
msgid "error: the input file '%s' has no sections"
msgstr "помилка: файл вхідних даних «%s» не має розділів"
-#: objcopy.c:2631
+#: objcopy.c:2636
#, c-format
msgid "--compress-debug-sections=[zlib|zlib-gnu|zlib-gabi] is unsupported on `%s'"
msgstr "--compress-debug-sections=[zlib|zlib-gnu|zlib-gabi] є непідтримуваним на «%s»"
-#: objcopy.c:2638
+#: objcopy.c:2643
#, c-format
msgid "--elf-stt-common=[yes|no] is unsupported on `%s'"
msgstr "--elf-stt-common=[yes|no] є непідтримуваним на «%s»"
-#: objcopy.c:2645
+#: objcopy.c:2650
#, c-format
msgid "copy from `%s' [%s] to `%s' [%s]\n"
msgstr "ÐºÐ¾Ð¿Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ Ð· `%s' [%s] у `%s' [%s]\n"
-#: objcopy.c:2693
+#: objcopy.c:2698
#, c-format
msgid "Input file `%s' ignores binary architecture parameter."
msgstr "У файлі вхідних даних, «%s», ігноруєтьÑÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€ двійкової архітектури."
-#: objcopy.c:2709
+#: objcopy.c:2714
#, c-format
msgid "Unable to recognise the format of the input file `%s'"
msgstr "Ðеможливо визначити формат вхідного файла `%s'"
-#: objcopy.c:2712
+#: objcopy.c:2717
#, c-format
msgid "Output file cannot represent architecture `%s'"
msgstr "Файл виведених даних не може предÑтавити архітектуру «%s»"
-#: objcopy.c:2775
+#: objcopy.c:2780
#, c-format
msgid "warning: file alignment (0x%s) > section alignment (0x%s)"
msgstr "попередженнÑ: Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ Ñƒ файлі (0x%s) > Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ Ñƒ розділі (0x%s)"
-#: objcopy.c:2848
+#: objcopy.c:2853
#, c-format
msgid "can't add section '%s'"
msgstr "не вдалоÑÑ Ð´Ð¾Ð´Ð°Ñ‚Ð¸ розділ «%s»"
-#: objcopy.c:2862
+#: objcopy.c:2867
#, c-format
msgid "can't create section `%s'"
msgstr "не вдалоÑÑ Ñтворити розділ «%s»"
-#: objcopy.c:2910
+#: objcopy.c:2915
#, c-format
msgid "error: %s not found, can't be updated"
msgstr "помилка: %s не знайдено, Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ðµ"
-#: objcopy.c:2943
+#: objcopy.c:2948
msgid "warning: note section is empty"
msgstr "попередженнÑ: розділ нотаток порожній"
-#: objcopy.c:2952
+#: objcopy.c:2957
msgid "warning: could not load note section"
msgstr "попередженнÑ: не вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ розділ нотаток"
-#: objcopy.c:2968
+#: objcopy.c:2973
msgid "warning: failed to set merged notes size"
msgstr "попередженнÑ: не вдалоÑÑ Ð²Ñтановити розмір об'єднаних нотаток"
-#: objcopy.c:2994
+#: objcopy.c:2999
#, c-format
msgid "can't dump section '%s' - it does not exist"
msgstr "не вдалоÑÑ Ñтворити дамп розділу «%s» — його не Ñ–Ñнує"
-#: objcopy.c:3002
+#: objcopy.c:3007
msgid "can't dump section - it has no contents"
msgstr "не вдалоÑÑ Ñтворити дамп розділу — розділ нічого не міÑтить"
-#: objcopy.c:3014
+#: objcopy.c:3019
msgid "could not open section dump file"
msgstr "не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл дампу розділу"
-#: objcopy.c:3022
+#: objcopy.c:3027
#, c-format
msgid "error writing section contents to %s (error: %s)"
msgstr "помилка під Ñ‡Ð°Ñ Ñпроби запиÑати вміÑÑ‚ розділу до %s (помилка: %s)"
-#: objcopy.c:3032
+#: objcopy.c:3037
msgid "could not retrieve section contents"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ вміÑÑ‚ розділу"
-#: objcopy.c:3046
+#: objcopy.c:3051
#, c-format
msgid "%s: debuglink section already exists"
msgstr "%s: розділ debuglink вже Ñ–Ñнує"
-#: objcopy.c:3058
+#: objcopy.c:3063
#, c-format
msgid "cannot create debug link section `%s'"
msgstr "не вдалоÑÑ Ñтворити розділ діагноÑтичних зв'Ñзків «%s»"
-#: objcopy.c:3152
+#: objcopy.c:3157
msgid "Can't fill gap after section"
msgstr "Ðе вдалоÑÑ Ð·Ð°Ð¿Ð¾Ð²Ð½Ð¸Ñ‚Ð¸ проміжок піÑÐ»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ"
-#: objcopy.c:3177
+#: objcopy.c:3182
msgid "can't add padding"
msgstr "не вдалоÑÑ Ð´Ð¾Ð´Ð°Ñ‚Ð¸ заповненнÑ"
-#: objcopy.c:3354
+#: objcopy.c:3359
msgid "error: failed to locate merged notes"
msgstr "помилка: не вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ Ð¾Ð±'єднаних нотаток"
-#: objcopy.c:3363
+#: objcopy.c:3368
msgid "error: failed to merge notes"
msgstr "помилка: не вдалоÑÑ Ð¾Ð±'єднати нотатки"
-#: objcopy.c:3372
+#: objcopy.c:3377
msgid "error: failed to copy merged notes into output"
msgstr "помилка: не вдалоÑÑ Ñкопіювати об'єднані нотатки до вихідних даних"
-#: objcopy.c:3389
+#: objcopy.c:3394
#, c-format
msgid "%s: Could not find any mergeable note sections"
msgstr "%s: не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ жодного придатного до об'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ нотаток"
-#: objcopy.c:3398
+#: objcopy.c:3403
#, c-format
msgid "cannot fill debug link section `%s'"
msgstr "не вдалоÑÑ Ð·Ð°Ð¿Ð¾Ð²Ð½Ð¸Ñ‚Ð¸ розділ діагноÑтичних зв'Ñзків «%s»"
-#: objcopy.c:3459
+#: objcopy.c:3464
msgid "error copying private BFD data"
msgstr "помилка під Ñ‡Ð°Ñ Ñпроби ÐºÐ¾Ð¿Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ Ð·Ð°ÐºÑ€Ð¸Ñ‚Ð¸Ñ… даних BFD"
-#: objcopy.c:3470
+#: objcopy.c:3475
#, c-format
msgid "this target does not support %lu alternative machine codes"
msgstr "Ñ†Ñ Ñ†Ñ–Ð»ÑŒ не підтримує %lu альтернативних машинних кодів"
-#: objcopy.c:3474
+#: objcopy.c:3479
msgid "treating that number as an absolute e_machine value instead"
msgstr "натоміÑÑ‚ÑŒ це чиÑло вважаєтьÑÑ Ð°Ð±Ñолютним значеннÑм e_machine"
-#: objcopy.c:3478
+#: objcopy.c:3483
msgid "ignoring the alternative value"
msgstr "ігноруєтьÑÑ Ð°Ð»ÑŒÑ‚ÐµÑ€Ð½Ð°Ñ‚Ð¸Ð²Ð½Ðµ значеннÑ"
-#: objcopy.c:3524
+#: objcopy.c:3529
msgid "sorry: copying thin archives is not currently supported"
msgstr "вибачте: підтримку ÐºÐ¾Ð¿Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ Ñ‚Ð¾Ð½ÐºÐ¸Ñ… архівів у поточній верÑÑ–Ñ— ще не передбачено"
-#: objcopy.c:3531 objcopy.c:3586
+#: objcopy.c:3536 objcopy.c:3591
#, c-format
msgid "cannot create tempdir for archive copying (error: %s)"
msgstr "неможливо Ñтворити тимчаÑовий каталог Ð´Ð»Ñ ÐºÐ¾Ð¿Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ Ð°Ñ€Ñ…Ñ–Ð²Ñƒ (помилка: %s)"
-#: objcopy.c:3568
+#: objcopy.c:3573
#, c-format
msgid "illegal pathname found in archive member: %s"
msgstr "у елементі архіву виÑвлено некоректну назву шлÑху: %s"
-#: objcopy.c:3619
+#: objcopy.c:3625
msgid "Unable to recognise the format of file"
msgstr "Ðе вдалоÑÑ Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ñ‚Ð¸ формат файла"
-#: objcopy.c:3752
+#: objcopy.c:3758
#, c-format
msgid "error: the input file '%s' is empty"
msgstr "помилка: вхідний файл '%s' порожній"
-#: objcopy.c:3830
+#: objcopy.c:3836
#, c-format
msgid "--add-gnu-debuglink ignored for archive %s"
msgstr "--add-gnu-debuglink проігноровано Ð´Ð»Ñ Ð°Ñ€Ñ…Ñ–Ð²Ñƒ %s"
-#: objcopy.c:3939
+#: objcopy.c:3945
#, c-format
msgid "Multiple renames of section %s"
msgstr "Багатократні Ð¿ÐµÑ€ÐµÐ¹Ð¼ÐµÐ½ÑƒÐ²Ð°Ð½Ð½Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %s"
-#: objcopy.c:3985
+#: objcopy.c:3991
msgid "error in private header data"
msgstr "помилка у даних закритого заголовка"
-#: objcopy.c:4078
+#: objcopy.c:4084
msgid "failed to create output section"
msgstr "не вдалоÑÑ Ñтворити розділ виведеннÑ"
-#: objcopy.c:4093
+#: objcopy.c:4099
msgid "failed to set size"
msgstr "не вдалоÑÑ Ð²Ñтановити розмір"
-#: objcopy.c:4112
+#: objcopy.c:4118
msgid "failed to set vma"
msgstr "не вдалоÑÑ Ð·Ð°Ð´Ð°Ñ‚Ð¸ vma"
-#: objcopy.c:4142
+#: objcopy.c:4148
msgid "failed to set alignment"
msgstr "не вдалоÑÑ Ð²Ñтановити Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ"
-#: objcopy.c:4174
+#: objcopy.c:4180
msgid "failed to copy private data"
msgstr "не вдалоÑÑ Ñкопіювати закриті дані"
-#: objcopy.c:4331
+#: objcopy.c:4337
msgid "relocation count is negative"
msgstr "лічильник переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ” від'ємним"
#. User must pad the section up in order to do this.
-#: objcopy.c:4430
+#: objcopy.c:4436
#, c-format
msgid "cannot reverse bytes: length of section %s must be evenly divisible by %d"
msgstr "не вдалоÑÑ Ð¿ÐµÑ€ÐµÑтавити байти у зворотному порÑдку: довжина розділу %s має ділитиÑÑ Ð±ÐµÐ· залишку на %d"
-#: objcopy.c:4638
+#: objcopy.c:4644
msgid "can't create debugging section"
msgstr "не вдалоÑÑ Ñтворити розділ діагноÑтики"
-#: objcopy.c:4652
+#: objcopy.c:4658
msgid "can't set debugging section contents"
msgstr "не вдалоÑÑ Ð²Ñтановити вміÑÑ‚ діагноÑтичного розділу"
-#: objcopy.c:4661
+#: objcopy.c:4667
#, c-format
msgid "don't know how to write debugging information for %s"
msgstr "невідомо, Ñк запиÑувати діагноÑтичні дані Ð´Ð»Ñ %s"
-#: objcopy.c:4850
+#: objcopy.c:4856
msgid "could not create temporary file to hold stripped copy"
msgstr "не вдалоÑÑ Ñтворити файл тимчаÑових даних Ð´Ð»Ñ Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð¾Ð±Ñ€Ñ–Ð·Ð°Ð½Ð¾Ñ— копії"
-#: objcopy.c:4924
+#: objcopy.c:4930
#, c-format
msgid "%s: bad version in PE subsystem"
msgstr "%s: помилковий Ð·Ð°Ð¿Ð¸Ñ Ð²ÐµÑ€ÑÑ–Ñ— у підÑиÑтемі PE"
-#: objcopy.c:4954
+#: objcopy.c:4960
#, c-format
msgid "unknown PE subsystem: %s"
msgstr "невідома підÑиÑтема PE: %s"
-#: objcopy.c:5008 objcopy.c:5280 objcopy.c:5360 objcopy.c:5501 objcopy.c:5533
-#: objcopy.c:5596 objcopy.c:5600 objcopy.c:5620
+#: objcopy.c:5044 objcopy.c:5316 objcopy.c:5396 objcopy.c:5537 objcopy.c:5569
+#: objcopy.c:5632 objcopy.c:5636 objcopy.c:5656
#, c-format
msgid "bad format for %s"
msgstr "некоректний формат Ð´Ð»Ñ %s"
-#: objcopy.c:5037
+#: objcopy.c:5073
#, c-format
msgid "cannot open: %s: %s"
msgstr "неможливо відкрити: %s: %s"
-#: objcopy.c:5092
+#: objcopy.c:5128
msgid "byte number must be non-negative"
msgstr "номер байту має бути не від'ємним"
-#: objcopy.c:5098
+#: objcopy.c:5134
#, c-format
msgid "architecture %s unknown"
msgstr "архітектура %s невідома"
-#: objcopy.c:5106
+#: objcopy.c:5142
msgid "interleave must be positive"
msgstr "Ñ‡ÐµÑ€Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ð¼Ð°Ñ” бути додатнім"
-#: objcopy.c:5115
+#: objcopy.c:5151
msgid "interleave width must be positive"
msgstr "ширина Ñ‡ÐµÑ€Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ð¼Ð°Ñ” бути додатною"
-#: objcopy.c:5433
+#: objcopy.c:5469
#, c-format
msgid "unrecognized --compress-debug-sections type `%s'"
msgstr "нерозпізнаний тип --compress-debug-sections «%s»"
-#: objcopy.c:5454
+#: objcopy.c:5490
#, c-format
msgid "unrecognized --elf-stt-common= option `%s'"
msgstr "нерозпізнаний параметр --elf-stt-common= «%s»"
-#: objcopy.c:5470
+#: objcopy.c:5506
#, c-format
msgid "Warning: truncating gap-fill from 0x%s to 0x%x"
msgstr "ПопередженнÑ: обрізуєтьÑÑ Ð·Ð°Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾Ð¼Ñ–Ð¶ÐºÑƒ от 0x%s до 0x%x"
-#: objcopy.c:5556
+#: objcopy.c:5592
msgid "bad format for --set-section-alignment: argument needed"
msgstr "помилкове Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ --set-section-alignment: пропущено аргумент"
-#: objcopy.c:5560
+#: objcopy.c:5596
msgid "bad format for --set-section-alignment: numeric argument needed"
msgstr "помилкове Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ --set-section-alignment: Ñлід вказати чиÑловий аргумент"
#. Number has more than on 1, i.e. wasn't a power of 2.
-#: objcopy.c:5572
+#: objcopy.c:5608
msgid "bad format for --set-section-alignment: alignment is not a power of two"
msgstr "помилкове Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ --set-section-alignment: Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ Ð½Ðµ Ñ” Ñтепенем двійки"
-#: objcopy.c:5679
+#: objcopy.c:5715
#, c-format
msgid "unknown long section names option '%s'"
msgstr "невідомий параметр довгих назв розділів, «%s»"
-#: objcopy.c:5702
+#: objcopy.c:5738
msgid "unable to parse alternative machine code"
msgstr "не вдалоÑÑ Ñ€Ð¾Ð·Ñ–Ð±Ñ€Ð°Ñ‚Ð¸ альтернативний машинний код"
-#: objcopy.c:5751
+#: objcopy.c:5787
msgid "number of bytes to reverse must be positive and even"
msgstr "чиÑло байтів, порÑдок Ñких має змінитиÑÑ Ð½Ð° зворотній повинно бути додатнім та парним"
-#: objcopy.c:5754
+#: objcopy.c:5790
#, c-format
msgid "Warning: ignoring previous --reverse-bytes value of %d"
msgstr "ПопередженнÑ: попереднє Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ --reverse-bytes, що дорівнює %d буде проігнороване"
-#: objcopy.c:5769
+#: objcopy.c:5805
#, c-format
msgid "%s: invalid reserve value for --heap"
msgstr "%s: некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ€ÐµÐ·ÐµÑ€Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ --heap"
-#: objcopy.c:5775
+#: objcopy.c:5811
#, c-format
msgid "%s: invalid commit value for --heap"
msgstr "%s: некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð½ÐµÑÐµÐ½Ð½Ñ Ð´Ð»Ñ --heap"
-#: objcopy.c:5800
+#: objcopy.c:5836
#, c-format
msgid "%s: invalid reserve value for --stack"
msgstr "%s: некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ€ÐµÐ·ÐµÑ€Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ --stack"
-#: objcopy.c:5806
+#: objcopy.c:5842
#, c-format
msgid "%s: invalid commit value for --stack"
msgstr "%s: некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð½ÐµÑÐµÐ½Ð½Ñ Ð´Ð»Ñ --stack"
-#: objcopy.c:5815
+#: objcopy.c:5851
msgid "verilog data width must be at least 1 byte"
msgstr "ширина даних verilog має Ñкладати принаймні 1 байт"
-#: objcopy.c:5832
+#: objcopy.c:5868
msgid "--globalize-symbol(s) is incompatible with -G/--keep-global-symbol(s)"
msgstr "--globalize-symbol(s) Ñ” неÑуміÑними з -G/--keep-global-symbol(s)"
-#: objcopy.c:5844
+#: objcopy.c:5880
msgid "interleave start byte must be set with --byte"
msgstr "початок Ñ‡ÐµÑ€Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ð¼Ð°Ñ” бути задано за допомогою --byte"
-#: objcopy.c:5847
+#: objcopy.c:5883
msgid "byte number must be less than interleave"
msgstr "номер байту має бути меншим чергуваннÑ"
-#: objcopy.c:5850
+#: objcopy.c:5886
msgid "interleave width must be less than or equal to interleave - byte`"
msgstr "ширина Ñ‡ÐµÑ€Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ð¼Ð°Ñ” бути меншою або рівною чергуванню - байт`"
-#: objcopy.c:5879
+#: objcopy.c:5909
#, c-format
msgid "unknown input EFI target: %s"
msgstr "невідоме вхідне Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ EFI: %s"
-#: objcopy.c:5910
+#: objcopy.c:5919
#, c-format
msgid "unknown output EFI target: %s"
msgstr "невідоме оÑтаточне Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ EFI: %s"
-#: objcopy.c:5936
+#: objcopy.c:5943
#, c-format
msgid "warning: could not create temporary file whilst copying '%s', (error: %s)"
msgstr "попередженнÑ: не вдалоÑÑ Ñтворити тимчаÑовий файл доки копіюєтьÑÑ '%s', (помилка: %s)"
-#: objcopy.c:5973 objcopy.c:5987
+#: objcopy.c:5980 objcopy.c:5994
#, c-format
msgid "%s %s%c0x%s never used"
msgstr "%s %s%c0x%s ніколи не викориÑтовуєтьÑÑ"
-#: objdump.c:212
+#: objdump.c:225
#, c-format
msgid "Usage: %s <option(s)> <file(s)>\n"
msgstr "ВикориÑтаннÑ: %s <ключі> <файл(и)>\n"
-#: objdump.c:213
+#: objdump.c:226
#, c-format
msgid " Display information from object <file(s)>.\n"
msgstr " Відображає інформацію з об'єкта <файл(и)>.\n"
-#: objdump.c:214
+#: objdump.c:227
#, c-format
msgid " At least one of the following switches must be given:\n"
msgstr " Має бути вказаний принаймні один з наÑтупних ключів:\n"
-#: objdump.c:215
+#: objdump.c:228
#, c-format
msgid " -a, --archive-headers Display archive header information\n"
msgstr " -a, --archive-headers вивеÑти відомоÑÑ‚Ñ– щодо заголовка архіву\n"
-#: objdump.c:217
+#: objdump.c:230
#, c-format
msgid " -f, --file-headers Display the contents of the overall file header\n"
msgstr " -f, --file-headers вивеÑти вміÑÑ‚ загального заголовка файлів\n"
-#: objdump.c:219
+#: objdump.c:232
#, c-format
msgid " -p, --private-headers Display object format specific file header contents\n"
msgstr " -p, --private-headers вивеÑти Ñпецифічний Ð´Ð»Ñ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ñƒ об'єктів вміÑÑ‚ заголовків файлів\n"
-#: objdump.c:221
+#: objdump.c:234
#, c-format
msgid " -P, --private=OPT,OPT... Display object format specific contents\n"
msgstr " -P, --private=ПÐР,ПÐР... вивеÑти Ñпецифічні Ð´Ð»Ñ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ñ–Ð² об'єктів дані\n"
-#: objdump.c:223
+#: objdump.c:236
#, c-format
msgid " -h, --[section-]headers Display the contents of the section headers\n"
msgstr " -h, --[section-]headers вивеÑти вміÑÑ‚ заголовків розділів\n"
-#: objdump.c:225
+#: objdump.c:238
#, c-format
msgid " -x, --all-headers Display the contents of all headers\n"
msgstr " -x, --all-headers вивеÑти вміÑÑ‚ уÑÑ–Ñ… заголовків\n"
-#: objdump.c:227
+#: objdump.c:240
#, c-format
msgid " -d, --disassemble Display assembler contents of executable sections\n"
msgstr " -d, --disassemble вивеÑти дані аÑемблера виконуваних розділів\n"
-#: objdump.c:229
+#: objdump.c:242
#, c-format
msgid " -D, --disassemble-all Display assembler contents of all sections\n"
msgstr " -D, --disassemble-all вивеÑти дані аÑемблера уÑÑ–Ñ… розділів\n"
-#: objdump.c:231
+#: objdump.c:244
#, c-format
msgid " --disassemble=<sym> Display assembler contents from <sym>\n"
msgstr " --disassemble=<Ñим> вивеÑти дані аÑемблера з Ñимволу <Ñим>\n"
-#: objdump.c:233
+#: objdump.c:246
#, c-format
msgid " -S, --source Intermix source code with disassembly\n"
msgstr " -S, --source перемішати початковий код із дизаÑембльованим\n"
-#: objdump.c:235
+#: objdump.c:248
#, c-format
msgid " --source-comment[=<txt>] Prefix lines of source code with <txt>\n"
msgstr " --source-comment[=<txt>] додавати префікÑи <txt> Ð´Ð»Ñ Ñ€Ñдків початкового коду\n"
-#: objdump.c:237
+#: objdump.c:250
#, c-format
msgid " -s, --full-contents Display the full contents of all sections requested\n"
msgstr " -s, --full-contents вивеÑти веÑÑŒ вміÑÑ‚ вÑÑ–Ñ… вказаних розділів\n"
-#: objdump.c:239
+#: objdump.c:252
#, c-format
msgid " -g, --debugging Display debug information in object file\n"
msgstr " -g, --debugging вивеÑти діагноÑтичні дані у об'єктному файлі\n"
-#: objdump.c:241
+#: objdump.c:254
#, c-format
msgid " -e, --debugging-tags Display debug information using ctags style\n"
msgstr " -e, --debugging-tags вивеÑти діагноÑтичні дані з викориÑтаннÑм Ñтилю ctags\n"
-#: objdump.c:243
+#: objdump.c:256
#, c-format
msgid " -G, --stabs Display (in raw form) any STABS info in the file\n"
msgstr " -G, --stabs вивеÑти (без обробки) уÑÑ– дані STABS у файлі\n"
-#: objdump.c:245
+#: objdump.c:258
#, c-format
msgid ""
" -W, --dwarf[a/=abbrev, A/=addr, r/=aranges, c/=cu_index, L/=decodedline,\n"
@@ -5952,7 +6095,7 @@ msgstr ""
" U/=trace_info]\n"
" вивеÑти дані діагноÑтичних розділів DWARF\n"
-#: objdump.c:252
+#: objdump.c:265
#, c-format
msgid ""
" -Wk,--dwarf=links Display the contents of sections that link to\n"
@@ -5961,7 +6104,7 @@ msgstr ""
" -Wk,--dwarf=links вивеÑти дані розділів, Ñкі пов'Ñзано із\n"
" окремими файлами debuginfo\n"
-#: objdump.c:256
+#: objdump.c:269
#, c-format
msgid ""
" -WK,--dwarf=follow-links\n"
@@ -5970,7 +6113,7 @@ msgstr ""
" -WK,--dwarf=follow-links\n"
" переходити за поÑиланнÑм до окремих файлів діагноÑтичних даних (типово)\n"
-#: objdump.c:259
+#: objdump.c:272
#, c-format
msgid ""
" -WN,--dwarf=no-follow-links\n"
@@ -5979,7 +6122,7 @@ msgstr ""
" -WN,--dwarf=no-follow-links\n"
" не переходити за поÑиланнÑми до окремих файлів діагноÑтичних даних\n"
-#: objdump.c:263
+#: objdump.c:276
#, c-format
msgid ""
" -WK,--dwarf=follow-links\n"
@@ -5989,7 +6132,7 @@ msgstr ""
" переходити за поÑиланнÑм до окремих файлів\n"
" діагноÑтичних даних\n"
-#: objdump.c:266
+#: objdump.c:279
#, c-format
msgid ""
" -WN,--dwarf=no-follow-links\n"
@@ -6000,7 +6143,7 @@ msgstr ""
" не переходити за поÑиланнÑми до окремих файлів\n"
" діагноÑтичних даних (типово)\n"
-#: objdump.c:271
+#: objdump.c:284
#, c-format
msgid ""
" -L, --process-links Display the contents of non-debug sections in\n"
@@ -6009,52 +6152,52 @@ msgstr ""
" -L, --process-links вивеÑти вміÑÑ‚ недіагноÑтичних розділів до\n"
" окремих файлів debuginfo. (ДопиÑує -WK)\n"
-#: objdump.c:275
+#: objdump.c:288
#, c-format
-msgid " --ctf=SECTION Display CTF info from SECTION\n"
-msgstr " --ctf=РОЗДІЛ вивеÑти інформацію CTF з розділу РОЗДІЛ\n"
+msgid " --ctf[=SECTION] Display CTF info from SECTION, (default `.ctf')\n"
+msgstr " --ctf[=РОЗДІЛ] вивеÑти інформацію CTF з розділу РОЗДІЛ (типовим Ñ” Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«.ctf»)\n"
-#: objdump.c:278
+#: objdump.c:291
#, c-format
msgid " -t, --syms Display the contents of the symbol table(s)\n"
msgstr " -t, --syms вивеÑти дані таблиць Ñимволів\n"
-#: objdump.c:280
+#: objdump.c:293
#, c-format
msgid " -T, --dynamic-syms Display the contents of the dynamic symbol table\n"
msgstr " -T, --dynamic-syms вивеÑти дані таблиці динамічних Ñимволів\n"
-#: objdump.c:282
+#: objdump.c:295
#, c-format
msgid " -r, --reloc Display the relocation entries in the file\n"
msgstr " -r, --reloc вивеÑти запиÑи переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð¾ файла\n"
-#: objdump.c:284
+#: objdump.c:297
#, c-format
msgid " -R, --dynamic-reloc Display the dynamic relocation entries in the file\n"
msgstr " -R, --dynamic-reloc вивеÑти динамічні запиÑи переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð¾ файла\n"
-#: objdump.c:286
+#: objdump.c:299
#, c-format
msgid " @<file> Read options from <file>\n"
msgstr " @<файл> читати ключі з <файла>.\n"
-#: objdump.c:288
+#: objdump.c:301
#, c-format
msgid " -v, --version Display this program's version number\n"
msgstr " -v, --version вивеÑти номер верÑÑ–Ñ— цієї програми\n"
-#: objdump.c:290
+#: objdump.c:303
#, c-format
msgid " -i, --info List object formats and architectures supported\n"
msgstr " -i, --info вивеÑти ÑпиÑок підтримуваних форматів об'єктів та архітектур\n"
-#: objdump.c:292
+#: objdump.c:305
#, c-format
msgid " -H, --help Display this information\n"
msgstr " -H, --help вивеÑти ці дані\n"
-#: objdump.c:299
+#: objdump.c:312
#, c-format
msgid ""
"\n"
@@ -6063,70 +6206,66 @@ msgstr ""
"\n"
" ÐаÑтупні ключі Ñ” необов'Ñзковими:\n"
-#: objdump.c:300
+#: objdump.c:313
#, c-format
msgid " -b, --target=BFDNAME Specify the target object format as BFDNAME\n"
msgstr " -b, --target=BFD-назва вказати Ñк формат об'єкта Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ BFD-назву\n"
-#: objdump.c:302
+#: objdump.c:315
#, c-format
msgid " -m, --architecture=MACHINE Specify the target architecture as MACHINE\n"
msgstr " -m, --architecture=ÐРХІТЕК вказати цільову архітектуру Ñк ÐРХІТЕК\n"
-#: objdump.c:304
+#: objdump.c:317
#, c-format
msgid " -j, --section=NAME Only display information for section NAME\n"
msgstr " -j, --section=ÐÐЗВРвивеÑти дані лише Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ із назвою ÐÐЗВÐ\n"
-#: objdump.c:306
+#: objdump.c:319
#, c-format
msgid " -M, --disassembler-options=OPT Pass text OPT on to the disassembler\n"
msgstr " -M, --disassembler-options=ПÐР передати текÑÑ‚ ПÐР дизаÑемблеру\n"
-#: objdump.c:308
+#: objdump.c:321
#, c-format
msgid " -EB --endian=big Assume big endian format when disassembling\n"
msgstr " -EB --endian=big припуÑкати зворотний порÑдок байтів при дизаÑемлюванні\n"
-#: objdump.c:310
+#: objdump.c:323
#, c-format
msgid " -EL --endian=little Assume little endian format when disassembling\n"
msgstr " -EL --endian=little припуÑкати прÑмий порÑдок байтів при дизаÑемблюванні\n"
-#: objdump.c:312
+#: objdump.c:325
#, c-format
msgid " --file-start-context Include context from start of file (with -S)\n"
msgstr " --file-start-context включити контекÑÑ‚ з початку файла (з -S)\n"
-#: objdump.c:314
+#: objdump.c:327
#, c-format
msgid " -I, --include=DIR Add DIR to search list for source files\n"
msgstr " -I, --include=КÐТ додати каталог КÐТ до ÑпиÑку пошуку файлів із початковим кодом\n"
-#: objdump.c:316
+#: objdump.c:329
#, c-format
msgid " -l, --line-numbers Include line numbers and filenames in output\n"
msgstr " -l, --line-numbers включити до виведених даних номери Ñ€Ñдків та назви файлів\n"
-#: objdump.c:318
+#: objdump.c:331
#, c-format
msgid " -F, --file-offsets Include file offsets when displaying information\n"
msgstr " -F, --file-offsets включити зÑуви у файлах при виведенні даних\n"
-#: objdump.c:320
+#: objdump.c:333
#, c-format
-msgid ""
-" -C, --demangle[=STYLE] Decode mangled/processed symbol names\n"
-" The STYLE, if specified, can be `auto', `gnu',\n"
-" `lucid', `arm', `hp', `edg', `gnu-v3', `java'\n"
-" or `gnat'\n"
-msgstr ""
-" -C, --demangle[=СТИЛЬ] декодувати зашифровані/оброблені назви Ñимволів\n"
-" СТИЛЬ, Ñкщо вказано, може бути «auto», «gnu»,\n"
-" «lucid», «arm», «hp», «edg», «gnu-v3», «java»\n"
-" або «gnat»\n"
+msgid " -C, --demangle[=STYLE] Decode mangled/processed symbol names\n"
+msgstr " -C, --demangle[=СТИЛЬ] декодувати зашифровані/оброблені назви Ñимволів\n"
-#: objdump.c:325
+#: objdump.c:335
+msgid " STYLE can be "
+msgstr " Можливі Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° СТИЛЬ: "
+
+#: objdump.c:337
#, c-format
msgid ""
" --recurse-limit Enable a limit on recursion whilst demangling\n"
@@ -6135,107 +6274,116 @@ msgstr ""
" --recurse-limit увімкнути Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ð½Ð° рекурÑÑ–ÑŽ при дешифруванні\n"
" (типова поведінка)\n"
-#: objdump.c:328
+#: objdump.c:340
#, c-format
msgid " --no-recurse-limit Disable a limit on recursion whilst demangling\n"
msgstr " --no-recurse-limit вимкнути Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ð½Ð° рекурÑÑ–ÑŽ при дешифруванні\n"
-#: objdump.c:330
+#: objdump.c:342
#, c-format
msgid " -w, --wide Format output for more than 80 columns\n"
msgstr " -w, --wide форматувати виведені дані з понад 80 позиціÑми у Ñ€Ñдку\n"
-#: objdump.c:332
+#: objdump.c:344
+#, c-format
+msgid ""
+" -U[d|l|i|x|e|h] Controls the display of UTF-8 unicode characters\n"
+" --unicode=[default|locale|invalid|hex|escape|highlight]\n"
+msgstr ""
+" -U[d|l|i|x|e|h] керує виведеннÑм Ñимволів unicode у кодуванні UTF-8\n"
+" --unicode=[default|locale|invalid|hex|escape|highlight]\n"
+
+#: objdump.c:347
#, c-format
msgid " -z, --disassemble-zeroes Do not skip blocks of zeroes when disassembling\n"
msgstr " -z, --disassemble-zeroes не пропуÑкати блоки нулів при дизаÑемблюванні\n"
-#: objdump.c:334
+#: objdump.c:349
#, c-format
msgid " --start-address=ADDR Only process data whose address is >= ADDR\n"
msgstr " --start-address=ÐДРЕСРобробити лише дані, Ñ‡Ð¸Ñ Ð°Ð´Ñ€ÐµÑа >= ÐДРЕСÐ\n"
-#: objdump.c:336
+#: objdump.c:351
#, c-format
msgid " --stop-address=ADDR Only process data whose address is < ADDR\n"
msgstr " --stop-address=ÐДРЕСРобробити лише дані, Ñ‡Ð¸Ñ Ð°Ð´Ñ€ÐµÑа < ÐДРЕСÐ\n"
-#: objdump.c:338
+#: objdump.c:353
#, c-format
msgid " --no-addresses Do not print address alongside disassembly\n"
msgstr " --no-addresses не виводити адреÑи разом із дизаÑембльованим кодом\n"
-#: objdump.c:340
+#: objdump.c:355
#, c-format
msgid " --prefix-addresses Print complete address alongside disassembly\n"
msgstr " --prefix-addresses вивеÑти повну адреÑу разом із дезаÑембльованим кодом\n"
-#: objdump.c:342
+#: objdump.c:357
#, c-format
msgid " --[no-]show-raw-insn Display hex alongside symbolic disassembly\n"
msgstr " --[no-]show-raw-insn виводити шіÑтнадцÑткове дизаÑÐµÐ¼Ð±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ñ€Ð°Ð·Ð¾Ð¼ із Ñимвольним\n"
-#: objdump.c:344
+#: objdump.c:359
#, c-format
msgid " --insn-width=WIDTH Display WIDTH bytes on a single line for -d\n"
msgstr " --insn-width=ШИРИÐРвиводити ШИРИÐРбайтів в окремому Ñ€Ñдку Ð´Ð»Ñ -d\n"
-#: objdump.c:346
+#: objdump.c:361
#, c-format
msgid " --adjust-vma=OFFSET Add OFFSET to all displayed section addresses\n"
msgstr " --adjust-vma=ЗСУВ додати ЗСУВ до вÑÑ–Ñ… виведених Ð°Ð´Ñ€ÐµÑ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð²\n"
-#: objdump.c:348
+#: objdump.c:363
#, c-format
msgid " --special-syms Include special symbols in symbol dumps\n"
msgstr " --special-syms включити Ñпеціальні Ñимволи до дампів Ñимволів\n"
-#: objdump.c:350
+#: objdump.c:365
#, c-format
msgid " --inlines Print all inlines for source line (with -l)\n"
msgstr " --inlines вивеÑти увеÑÑŒ вбудований код Ð´Ð»Ñ Ñ€Ñдка початкового коду (з -l)\n"
-#: objdump.c:352
+#: objdump.c:367
#, c-format
msgid " --prefix=PREFIX Add PREFIX to absolute paths for -S\n"
msgstr " --prefix=ПЕРЕФІКС додати ПРЕФІКС до абÑолютних шлÑхів Ð´Ð»Ñ -S\n"
-#: objdump.c:354
+#: objdump.c:369
#, c-format
msgid " --prefix-strip=LEVEL Strip initial directory names for -S\n"
msgstr " --prefix-strip=РІВЕÐЬ виучити назви початкових каталогів Ð´Ð»Ñ -S\n"
-#: objdump.c:356
+#: objdump.c:371
#, c-format
msgid " --dwarf-depth=N Do not display DIEs at depth N or greater\n"
msgstr " --dwarf-depth=N не виводити DIE глибиною N або більше\n"
-#: objdump.c:358
+#: objdump.c:373
#, c-format
msgid " --dwarf-start=N Display DIEs starting at offset N\n"
msgstr " --dwarf-start=N вивеÑти DIE, що починаютьÑÑ Ð·Ñ– зміщеннÑм N\n"
-#: objdump.c:360
+#: objdump.c:375
#, c-format
msgid " --dwarf-check Make additional dwarf consistency checks.\n"
msgstr " --dwarf-check виконати додаткові перевірки коректноÑÑ‚Ñ– dwarf.\n"
-#: objdump.c:363
+#: objdump.c:378
#, c-format
-msgid " --ctf-parent=SECTION Use SECTION as the CTF parent\n"
-msgstr " --ctf-parent=РОЗДІЛ ÑкориÑтатиÑÑ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð¾Ð¼ РОЗДІЛ Ñк батьківÑьким розділом CTF\n"
+msgid " --ctf-parent=NAME Use CTF archive member NAME as the CTF parent\n"
+msgstr " --ctf-parent=ÐÐЗВРÑкориÑтатиÑÑ ÐµÐ»ÐµÐ¼ÐµÐ½Ñ‚Ð¾Ð¼ архіву CTF ÐÐЗВРÑк батьківÑьким CTF\n"
-#: objdump.c:366
+#: objdump.c:381
#, c-format
msgid " --visualize-jumps Visualize jumps by drawing ASCII art lines\n"
msgstr " --visualize-jumps візуалізувати переходи малюваннÑм ліній ASCII\n"
-#: objdump.c:368
+#: objdump.c:383
#, c-format
msgid " --visualize-jumps=color Use colors in the ASCII art\n"
msgstr " --visualize-jumps=color ÑкориÑтатиÑÑ ÐºÐ¾Ð»ÑŒÐ¾Ñ€Ð°Ð¼Ð¸ у коді ASCII\n"
-#: objdump.c:370
+#: objdump.c:385
#, c-format
msgid ""
" --visualize-jumps=extended-color\n"
@@ -6244,7 +6392,7 @@ msgstr ""
" --visualize-jumps=extended-color\n"
" ÑкориÑтатиÑÑ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ð¼Ð¸ 8-бітовими кодами кольорів\n"
-#: objdump.c:373
+#: objdump.c:388
#, c-format
msgid ""
" --visualize-jumps=off Disable jump visualization\n"
@@ -6253,7 +6401,7 @@ msgstr ""
" --visualize-jumps=off вимкнути візуалізацію переходів\n"
"\n"
-#: objdump.c:384
+#: objdump.c:399
#, c-format
msgid ""
"\n"
@@ -6262,71 +6410,71 @@ msgstr ""
"\n"
"Ключі, підтримку Ñких передбачено Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ¼Ð¸ÐºÐ°Ñ‡Ð° -P/--private:\n"
-#: objdump.c:621
+#: objdump.c:759
#, c-format
msgid "section '%s' mentioned in a -j option, but not found in any input file"
msgstr "розділ «%s» згадано у параметрі -j, але його не знайдено у жодному файлі вхідних даних"
-#: objdump.c:776
+#: objdump.c:914
#, c-format
msgid "Sections:\n"
msgstr "Розділи:\n"
-#: objdump.c:782
+#: objdump.c:920
#, c-format
msgid "Idx %-*s Size %-*s%-*sFile off Algn"
msgstr "Idx %-*s Розмір %-*s%-*sФайл вимк Вирів."
-#: objdump.c:788
+#: objdump.c:926
#, c-format
msgid " Flags"
msgstr " Ознаки"
-#: objdump.c:810
+#: objdump.c:948
#, c-format
msgid "failed to read symbol table from: %s"
msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ таблицю Ñимволів з %s"
-#: objdump.c:811 objdump.c:4753
+#: objdump.c:949 objdump.c:4907
msgid "error message was"
msgstr "Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ помилку"
-#: objdump.c:826
+#: objdump.c:964
#, c-format
msgid "error: symbol table size (%#lx) is larger than filesize (%#lx)"
msgstr "помилка: розмір таблиці Ñимволів (%#lx) перевищує розмір файла (%#lx)"
-#: objdump.c:856
+#: objdump.c:994
#, c-format
msgid "%s: not a dynamic object"
msgstr "%s: не динамічний об'єкт"
-#: objdump.c:1455 objdump.c:1482
+#: objdump.c:1593 objdump.c:1620
#, c-format
msgid " (File Offset: 0x%lx)"
msgstr " (зÑув у файлі: 0x%lx)"
-#: objdump.c:1727
+#: objdump.c:1865
#, c-format
msgid "source file %s is more recent than object file\n"
msgstr "файл джерела %s є новішим за файл об'єктів\n"
-#: objdump.c:2755
+#: objdump.c:2893
#, c-format
msgid "\t... (skipping %lu zeroes, resuming at file offset: 0x%lx)\n"
msgstr "\t... (пропуÑкаємо %lu нулів, відновлюємо обробку на зÑуві у файлі: 0x%lx)\n"
-#: objdump.c:2887
+#: objdump.c:3025
#, c-format
msgid "disassemble_fn returned length %d"
msgstr "disassemble_fn повернуто довжину %d"
-#: objdump.c:3215 objdump.c:4391
+#: objdump.c:3353 objdump.c:4527
#, c-format
msgid "Reading section %s failed because: %s"
msgstr "Помилка Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %s, причина: %s"
-#: objdump.c:3236
+#: objdump.c:3374
#, c-format
msgid ""
"\n"
@@ -6335,17 +6483,17 @@ msgstr ""
"\n"
"ДизаÑÐµÐ¼Ð±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %s:\n"
-#: objdump.c:3527
+#: objdump.c:3665
#, c-format
msgid "can't use supplied machine %s"
msgstr "не вдалоÑÑ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñтати надану архітектуру, %s"
-#: objdump.c:3548
+#: objdump.c:3686
#, c-format
msgid "can't disassemble for architecture %s\n"
msgstr "дизаÑÐµÐ¼Ð±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ %s неможливе\n"
-#: objdump.c:3637
+#: objdump.c:3775
#, c-format
msgid ""
"\n"
@@ -6354,7 +6502,7 @@ msgstr ""
"\n"
"Розмір розділу «%s» є некоректним: %#llx.\n"
-#: objdump.c:3682
+#: objdump.c:3820
#, c-format
msgid ""
"\n"
@@ -6363,12 +6511,12 @@ msgstr ""
"\n"
"Ðеможливо отримати вміÑÑ‚ розділу '%s'.\n"
-#: objdump.c:3844
+#: objdump.c:3999
#, c-format
msgid "File %s does not contain any dwarf debug information\n"
msgstr "Файл %s не міÑтить жодних діагноÑтичних даних dwarf\n"
-#: objdump.c:3881
+#: objdump.c:4036
#, c-format
msgid ""
"No %s section present\n"
@@ -6377,12 +6525,12 @@ msgstr ""
"Ðемає розділу %s\n"
"\n"
-#: objdump.c:3888
+#: objdump.c:4043
#, c-format
msgid "reading %s section of %s failed: %s"
msgstr "помилка під Ñ‡Ð°Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %s %s: %s"
-#: objdump.c:3934
+#: objdump.c:4089
#, c-format
msgid ""
"Contents of %s section:\n"
@@ -6391,17 +6539,17 @@ msgstr ""
"ЗміÑÑ‚ розділу %s:\n"
"\n"
-#: objdump.c:4068
+#: objdump.c:4223
#, c-format
msgid "architecture: %s, "
msgstr "архітектура: %s, "
-#: objdump.c:4071
+#: objdump.c:4226
#, c-format
msgid "flags 0x%08x:\n"
msgstr "ознаки 0x%08x:\n"
-#: objdump.c:4084
+#: objdump.c:4239
#, c-format
msgid ""
"\n"
@@ -6410,25 +6558,25 @@ msgstr ""
"\n"
"початкова адреÑа 0x"
-#: objdump.c:4134 readelf.c:15094
+#: objdump.c:4289 readelf.c:15478
#, c-format
msgid "%s: %s"
msgstr "%s: %s"
-#: objdump.c:4134 readelf.c:15094
+#: objdump.c:4289 readelf.c:15478
msgid "warning"
msgstr "попередженнÑ"
-#: objdump.c:4134 readelf.c:15094
+#: objdump.c:4289 readelf.c:15478
msgid "error"
msgstr "помилка"
-#: objdump.c:4140 readelf.c:15099
+#: objdump.c:4295 readelf.c:15483
#, c-format
msgid "CTF error: cannot get CTF errors: `%s'"
msgstr "Помилка CTF: не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ помилки CTF: «%s»"
-#: objdump.c:4167 readelf.c:15125
+#: objdump.c:4319 readelf.c:15505
#, c-format
msgid ""
"\n"
@@ -6437,71 +6585,71 @@ msgstr ""
"\n"
"ЧаÑтина архіву CTF: %s:\n"
-#: objdump.c:4186
+#: objdump.c:4339
#, c-format
msgid "Iteration failed: %s, %s"
msgstr "Помилка у ітерації: %s, %s"
-#: objdump.c:4223 objdump.c:4233 objdump.c:4248
+#: objdump.c:4377 objdump.c:4384
#, c-format
msgid "CTF open failure: %s"
msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ CTF: %s"
-#: objdump.c:4252
+#: objdump.c:4388
#, c-format
msgid "Contents of CTF section %s:\n"
msgstr "ВміÑÑ‚ розділу CTF %s:\n"
-#: objdump.c:4257
+#: objdump.c:4395
#, c-format
msgid "CTF archive member open failure: %s"
msgstr "не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ член архіву CTF: %s"
-#: objdump.c:4277
+#: objdump.c:4413
#, c-format
msgid "warning: private headers incomplete: %s"
msgstr "попередженнÑ: неповні закриті заголовки: %s"
-#: objdump.c:4295
+#: objdump.c:4431
msgid "option -P/--private not supported by this file"
msgstr "ключ -P/--private не підтримуєтьÑÑ Ñ†Ð¸Ð¼ файлом"
-#: objdump.c:4319
+#: objdump.c:4455
#, c-format
msgid "target specific dump '%s' not supported"
msgstr "підтримки Ñпецифічних до Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð°Ð¼Ð¿Ñ–Ð² «%s» не передбачено"
-#: objdump.c:4383
+#: objdump.c:4519
#, c-format
msgid "Contents of section %s:"
msgstr "ВміÑÑ‚ розділу %s:"
-#: objdump.c:4385
+#: objdump.c:4521
#, c-format
msgid " (Starting at file offset: 0x%lx)"
msgstr " (ПочинаєтьÑÑ Ð· такого зÑуву у файлі: 0x%lx)"
-#: objdump.c:4495
+#: objdump.c:4631
#, c-format
msgid "no symbols\n"
msgstr "немає Ñимволів\n"
-#: objdump.c:4502
+#: objdump.c:4638
#, c-format
msgid "no information for symbol number %ld\n"
msgstr "немає інформації про Ñимвол номер %ld\n"
-#: objdump.c:4505
+#: objdump.c:4641
#, c-format
msgid "could not determine the type of symbol number %ld\n"
msgstr "неможливо визначити тип Ñимволу номер %ld\n"
-#: objdump.c:4751
+#: objdump.c:4905
#, c-format
msgid "failed to read relocs in: %s"
msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ %s"
-#: objdump.c:4911
+#: objdump.c:5064
#, c-format
msgid ""
"\n"
@@ -6510,52 +6658,52 @@ msgstr ""
"\n"
"%s: формат файла %s\n"
-#: objdump.c:5011
+#: objdump.c:5172
#, c-format
msgid "%s: printing debugging information failed"
msgstr "%s: вивід діагноÑтичних даних завершивÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾ÑŽ"
-#: objdump.c:5107
+#: objdump.c:5268
#, c-format
msgid "In archive %s:\n"
msgstr "В архіві %s:\n"
#. Prevent corrupted files from spinning us into an
#. infinite loop. 100 is an arbitrary heuristic.
-#: objdump.c:5112
+#: objdump.c:5273
msgid "Archive nesting is too deep"
msgstr "Ðадто глибоке Ð²ÐºÐ»Ð°Ð´ÐµÐ½Ð½Ñ Ñƒ архіві"
-#: objdump.c:5116
+#: objdump.c:5277
#, c-format
msgid "In nested archive %s:\n"
msgstr "У вкладеному архіві %s:\n"
-#: objdump.c:5279
+#: objdump.c:5440
msgid "error: the start address should be before the end address"
msgstr "помилка: початкова адреÑа має бути меншою за кінцеву адреÑу"
-#: objdump.c:5284
+#: objdump.c:5445
msgid "error: the stop address should be after the start address"
msgstr "помилка: кінцева адреÑа має бути більшою за початкову адреÑу"
-#: objdump.c:5296
+#: objdump.c:5457
msgid "error: prefix strip must be non-negative"
msgstr "помилка: префікÑ, що обрізаєтьÑÑ, має бути невід'ємним"
-#: objdump.c:5301
+#: objdump.c:5462
msgid "error: instruction width must be positive"
msgstr "помилка: Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÑˆÐ¸Ñ€Ð¸Ð½Ð¸ інÑтрукції має бути додатним"
-#: objdump.c:5322
+#: objdump.c:5483
msgid "unrecognized argument to --visualize-option"
msgstr "невідомий аргумент --visualize-option"
-#: objdump.c:5332
+#: objdump.c:5493
msgid "unrecognized -E option"
msgstr "нерозпізнаний ключ -E"
-#: objdump.c:5343
+#: objdump.c:5504
#, c-format
msgid "unrecognized --endian type `%s'"
msgstr "нерозпізнаний --endian тип `%s'"
@@ -6891,7 +7039,7 @@ msgstr " к-ть розділів: %d\n"
msgid " time and date: 0x%08x - "
msgstr " Ñ‡Ð°Ñ Ñ– дата: 0x%08x - "
-#: od-xcoff.c:421 readelf.c:19706
+#: od-xcoff.c:421 readelf.c:20126
#, c-format
msgid "not set\n"
msgstr "не вÑтановлено\n"
@@ -7358,363 +7506,376 @@ msgstr "%s: %s: Ð·Ð°Ð¿Ð¸Ñ stab %ld пошкоджено\n"
msgid "Last stabs entries before error:\n"
msgstr "ОÑтанні пункти stabs перед помилкою:\n"
-#: readelf.c:354
+#: readelf.c:385
msgid "<none>"
msgstr "<немає>"
-#: readelf.c:355
+#: readelf.c:387
msgid "<no-strings>"
msgstr "<немає Ñ€Ñдків>"
-#: readelf.c:437
+#: readelf.c:482
#, c-format
msgid "Size truncation prevents reading %s elements of size %s for %s\n"
msgstr "ÐžÐ±Ñ€Ñ–Ð·Ð°Ð½Ð½Ñ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ заважає читанню %s елементів розміру %s Ð´Ð»Ñ %s\n"
-#: readelf.c:447
+#: readelf.c:492
#, c-format
msgid "Size overflow prevents reading %s elements of size %s for %s\n"
msgstr "ÐŸÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ заважає читанню %s елементів розміру %s Ð´Ð»Ñ %s\n"
-#: readelf.c:460
+#: readelf.c:505
#, c-format
msgid "Reading %s bytes extends past end of file for %s\n"
msgstr "Ð§Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð±Ð°Ð¹Ñ‚Ñ–Ð² %s виходить за межі ÐºÑ–Ð½Ñ†Ñ Ñ„Ð°Ð¹Ð»Ð° %s\n"
-#: readelf.c:469
+#: readelf.c:514
#, c-format
msgid "Unable to seek to 0x%lx for %s\n"
msgstr "Ðеможливо знайти 0x%lx Ð´Ð»Ñ %s\n"
-#: readelf.c:483
+#: readelf.c:528
#, c-format
msgid "Out of memory allocating %s bytes for %s\n"
msgstr "Бракує пам'ÑÑ‚Ñ– Ð´Ð»Ñ Ñ€Ð¾Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ %s байтів %s\n"
-#: readelf.c:494
+#: readelf.c:539
#, c-format
msgid "Unable to read in %s bytes of %s\n"
msgstr "Ðе вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ %s байтів %s\n"
-#: readelf.c:971
+#: readelf.c:1151
msgid "Don't know about relocations on this machine architecture\n"
msgstr "Ðевідомо про переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— архітектури машини\n"
-#: readelf.c:998 readelf.c:1103
+#: readelf.c:1178 readelf.c:1283
msgid "32-bit relocation data"
msgstr "32-бітові дані переÑуваннÑ"
-#: readelf.c:1010 readelf.c:1040 readelf.c:1114 readelf.c:1143
+#: readelf.c:1190 readelf.c:1220 readelf.c:1294 readelf.c:1323 readelf.c:1402
msgid "out of memory parsing relocs\n"
msgstr "бракує пам'ÑÑ‚Ñ– при розборі relocs\n"
-#: readelf.c:1028 readelf.c:1132
+#: readelf.c:1208 readelf.c:1312
msgid "64-bit relocation data"
msgstr "64-бітові дані переÑуваннÑ"
-#: readelf.c:1262
+#: readelf.c:1376
+msgid "RELR relocation data"
+msgstr "дані переÑÑƒÐ²Ð°Ð½Ð½Ñ RELR"
+
+#: readelf.c:1516
+#, c-format
+msgid " %lu offset\n"
+msgid_plural " %lu offsets\n"
+msgstr[0] " %lu зÑув\n"
+msgstr[1] " %lu зÑуви\n"
+msgstr[2] " %lu зÑувів\n"
+msgstr[3] " %lu зÑув\n"
+
+#: readelf.c:1528
#, c-format
msgid " Offset Info Type Sym. Value Symbol's Name + Addend\n"
msgstr " ЗÑув Інфо Тип Знач.Ñимв. Ðазва Ñимволу + Addend\n"
-#: readelf.c:1264
+#: readelf.c:1530
#, c-format
msgid " Offset Info Type Sym.Value Sym. Name + Addend\n"
msgstr " ЗÑув Інфо Тип Знач.Ñимв Ðазва Ñимв. + Addend\n"
-#: readelf.c:1269
+#: readelf.c:1535
#, c-format
msgid " Offset Info Type Sym. Value Symbol's Name\n"
msgstr " ЗÑув Інфо Тип Знач.Ñимв Ðазва Ñимволу\n"
-#: readelf.c:1271
+#: readelf.c:1537
#, c-format
msgid " Offset Info Type Sym.Value Sym. Name\n"
msgstr " ЗÑув Інфо Тип Знач.Ñимв Ðазва Ñимв.\n"
-#: readelf.c:1279
+#: readelf.c:1545
#, c-format
msgid " Offset Info Type Symbol's Value Symbol's Name + Addend\n"
msgstr " ЗÑув Інфо Тип Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñимв. Ðазва Ñимволу + Addend\n"
-#: readelf.c:1281
+#: readelf.c:1547
#, c-format
msgid " Offset Info Type Sym. Value Sym. Name + Addend\n"
msgstr " ЗÑув Інфо Тип Знач.Ñимв. Ðазва Ñимв. + Addend\n"
-#: readelf.c:1286
+#: readelf.c:1552
#, c-format
msgid " Offset Info Type Symbol's Value Symbol's Name\n"
msgstr " ЗÑув Інфо Тип Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñимв. Ðазва Ñимволу\n"
-#: readelf.c:1288
+#: readelf.c:1554
#, c-format
msgid " Offset Info Type Sym. Value Sym. Name\n"
msgstr " ЗÑув Інфо Тип Знач.Ñимв. Ðазва Ñимв.\n"
-#: readelf.c:1659 readelf.c:1852 readelf.c:1860
+#: readelf.c:1930 readelf.c:2125 readelf.c:2133
#, c-format
msgid "unrecognized: %-7lx"
msgstr "нерозпізнаний: %-7lx"
-#: readelf.c:1685
+#: readelf.c:1956
#, c-format
msgid "<unknown addend: %lx>"
msgstr "<невідомий addend: %lx>"
-#: readelf.c:1694
+#: readelf.c:1965
#, c-format
msgid " bad symbol index: %08lx in reloc\n"
msgstr " помилковий Ñ–Ð½Ð´ÐµÐºÑ Ñимволу: %08lx у переÑуванні\n"
-#: readelf.c:1797
+#: readelf.c:2070
#, c-format
msgid "<string table index: %3ld>"
msgstr "<Ñ–Ð½Ð´ÐµÐºÑ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ñ€Ñдків: %3ld>"
-#: readelf.c:1800
+#: readelf.c:2073
#, c-format
msgid "<corrupt string table index: %3ld>\n"
msgstr "<пошкоджено покажчик таблиці Ñ€Ñдків: %3ld>\n"
-#: readelf.c:2305
+#: readelf.c:2595
#, c-format
msgid "Processor Specific: %lx"
msgstr "Специфічний Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑора: %lx"
-#: readelf.c:2332
+#: readelf.c:2622
#, c-format
msgid "Operating System specific: %lx"
msgstr "Специфічний Ð´Ð»Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ñ–Ð¹Ð½Ð¾Ñ— ÑиÑтеми: %lx"
-#: readelf.c:2336 readelf.c:4246
+#: readelf.c:2626 readelf.c:4563
#, c-format
msgid "<unknown>: %lx"
msgstr "<невідомий>: %lx"
-#: readelf.c:2436
+#: readelf.c:2726
msgid "NONE (None)"
msgstr "ÐЕМÐЄ (Ðемає)"
-#: readelf.c:2437
+#: readelf.c:2727
msgid "REL (Relocatable file)"
msgstr "REL (Переміщуваний файл)"
-#: readelf.c:2438
+#: readelf.c:2728
msgid "EXEC (Executable file)"
msgstr "EXEC (Виконуваний файл)"
-#: readelf.c:2441
+#: readelf.c:2731
msgid "DYN (Position-Independent Executable file)"
msgstr "DYN (позиційно незалежний виконуваний файл)"
-#: readelf.c:2443
+#: readelf.c:2733
msgid "DYN (Shared object file)"
msgstr "DYN (Спільний об'єктний файл)"
-#: readelf.c:2444
+#: readelf.c:2734
msgid "CORE (Core file)"
msgstr "CORE (ОÑновний файл)"
-#: readelf.c:2448
+#: readelf.c:2738
#, c-format
msgid "Processor Specific: (%x)"
msgstr "Специфічний Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑора: (%x)"
-#: readelf.c:2450
+#: readelf.c:2740
#, c-format
msgid "OS Specific: (%x)"
msgstr "Специфічний Ð´Ð»Ñ ÐžÐ¡: (%x)"
-#: readelf.c:2452
+#: readelf.c:2742
#, c-format
msgid "<unknown>: %x"
msgstr "<невідомий>: %x"
#. Please keep this switch table sorted by increasing EM_ value.
#. 0
-#: readelf.c:2466 readelf.c:17634 readelf.c:17645
+#: readelf.c:2756 readelf.c:18010 readelf.c:18021
msgid "None"
msgstr "Ðемає"
-#: readelf.c:2714
+#: readelf.c:3004
#, c-format
msgid "<unknown>: 0x%x"
msgstr "<невідомий>: 0x%x"
-#: readelf.c:3000
+#: readelf.c:3290
msgid ", <unknown>"
msgstr ", <невідомий>"
-#: readelf.c:3369 readelf.c:10401
+#: readelf.c:3659 readelf.c:10755
msgid "unknown"
msgstr "невідомий"
-#: readelf.c:3370
+#: readelf.c:3660
msgid "unknown mac"
msgstr "невідомий mac"
-#: readelf.c:3438
+#: readelf.c:3728
msgid ", <unknown MeP cpu type>"
msgstr ", <невідомий тип процеÑора MeP>"
-#: readelf.c:3448
+#: readelf.c:3738
msgid "<unknown MeP copro type>"
msgstr "<невідомий тип copro MeP>"
-#: readelf.c:3459
+#: readelf.c:3749
#, c-format
msgid ", unknown flags bits: %#x"
msgstr ", невідомі біти прапорців: %#x"
-#: readelf.c:3468
+#: readelf.c:3758
msgid ", relocatable"
msgstr ", придатний до переÑуваннÑ"
-#: readelf.c:3471
+#: readelf.c:3761
msgid ", relocatable-lib"
msgstr ", придатна до переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÐºÐ°"
-#: readelf.c:3553
+#: readelf.c:3843
msgid ", unknown v850 architecture variant"
msgstr ", невідомий варіант архітектури v850"
-#: readelf.c:3621
+#: readelf.c:3911
msgid ", unknown CPU"
msgstr ", невідомий процеÑор"
-#: readelf.c:3636
+#: readelf.c:3926
msgid ", unknown ABI"
msgstr ", невідомий ABI"
-#: readelf.c:3661 readelf.c:3732
+#: readelf.c:3951 readelf.c:4022
msgid ", unknown ISA"
msgstr ", невідомий ISA"
-#: readelf.c:3842
+#: readelf.c:4132
#, c-format
msgid "Unrecognised IA64 VMS Command Code: %x\n"
msgstr "Ðерозпізнаний код команди VMS IA64: %x\n"
-#: readelf.c:3908
+#: readelf.c:4198
msgid ": architecture variant: "
msgstr ": варіант архітектури: "
-#: readelf.c:3927
+#: readelf.c:4217
msgid ": unknown"
msgstr ": невідомо"
-#: readelf.c:3931
+#: readelf.c:4221
msgid ": unknown extra flag bits also present"
msgstr ": також виÑвлено біти невідомого зайвого прапорцÑ"
-#: readelf.c:3945
+#: readelf.c:4235
msgid ", unknown"
msgstr ", невідомий"
-#: readelf.c:3997
+#: readelf.c:4301
msgid "Standalone App"
msgstr "Ізольована програма"
-#: readelf.c:4006
+#: readelf.c:4310
msgid "Bare-metal C6000"
msgstr "Bare-metal C6000"
-#: readelf.c:4016 readelf.c:5193 readelf.c:5209 readelf.c:19058
-#: readelf.c:19158 readelf.c:19189 readelf.c:19226 readelf.c:19287
-#: readelf.c:19314
+#: readelf.c:4320 readelf.c:5535 readelf.c:5551 readelf.c:19439
+#: readelf.c:19539 readelf.c:19570 readelf.c:19607 readelf.c:19668
+#: readelf.c:19695 readelf.c:19717
#, c-format
msgid "<unknown: %x>"
msgstr "<невідомий: %x>"
#. This message is probably going to be displayed in a 15
#. character wide field, so put the hex value first.
-#: readelf.c:4615
+#: readelf.c:4933
#, c-format
msgid "%08x: <unknown>"
msgstr "%08x: <невідомо>"
-#: readelf.c:4702
+#: readelf.c:5021
#, c-format
msgid "Usage: readelf <option(s)> elf-file(s)\n"
msgstr "ВикориÑтаннÑ: readelf <ключі> elf-файл(и)\n"
-#: readelf.c:4703
+#: readelf.c:5022
#, c-format
msgid " Display information about the contents of ELF format files\n"
msgstr " Відображає інформацію про вміÑÑ‚ файлів у форматі ELF\n"
-#: readelf.c:4704
+#: readelf.c:5023
#, c-format
msgid " Options are:\n"
msgstr " Параметри:\n"
-#: readelf.c:4705
+#: readelf.c:5024
#, c-format
msgid " -a --all Equivalent to: -h -l -S -s -r -d -V -A -I\n"
msgstr " -a --all еквівалент такого набору: -h -l -S -s -r -d -V -A -I\n"
-#: readelf.c:4707
+#: readelf.c:5026
#, c-format
msgid " -h --file-header Display the ELF file header\n"
msgstr " -h --file-header вивеÑти заголовок файла ELF\n"
-#: readelf.c:4709
+#: readelf.c:5028
#, c-format
msgid " -l --program-headers Display the program headers\n"
msgstr " -l --program-headers вивеÑти заголовки програми\n"
-#: readelf.c:4711
+#: readelf.c:5030
#, c-format
msgid " --segments An alias for --program-headers\n"
msgstr " --segments альтернатива --program-headers\n"
-#: readelf.c:4713
+#: readelf.c:5032
#, c-format
msgid " -S --section-headers Display the sections' header\n"
msgstr " -S --section-headers вивеÑти заголовки розділів\n"
-#: readelf.c:4715
+#: readelf.c:5034
#, c-format
msgid " --sections An alias for --section-headers\n"
msgstr " --sections альтернатива --section-headers\n"
-#: readelf.c:4717
+#: readelf.c:5036
#, c-format
msgid " -g --section-groups Display the section groups\n"
msgstr " -g --section-groups вивеÑти групи розділів\n"
-#: readelf.c:4719
+#: readelf.c:5038
#, c-format
msgid " -t --section-details Display the section details\n"
msgstr " -t --section-details вивеÑти подробиці щодо розділу\n"
-#: readelf.c:4721
+#: readelf.c:5040
#, c-format
msgid " -e --headers Equivalent to: -h -l -S\n"
msgstr " -e --headers еквівалент такого набору: -h -l -S\n"
-#: readelf.c:4723
+#: readelf.c:5042
#, c-format
msgid " -s --syms Display the symbol table\n"
msgstr " -s --syms вивеÑти таблицю Ñимволів\n"
-#: readelf.c:4725
+#: readelf.c:5044
#, c-format
msgid " --symbols An alias for --syms\n"
msgstr " --symbols альтернатива --syms\n"
-#: readelf.c:4727
+#: readelf.c:5046
#, c-format
msgid " --dyn-syms Display the dynamic symbol table\n"
msgstr " --dyn-syms вивеÑти таблицю динамічних Ñимволів\n"
-#: readelf.c:4729
+#: readelf.c:5048
#, c-format
msgid " --lto-syms Display LTO symbol tables\n"
msgstr " --lto-syms вивеÑти таблиці Ñимволів LTO\n"
-#: readelf.c:4731
+#: readelf.c:5050
#, c-format
msgid ""
" --sym-base=[0|8|10|16] \n"
@@ -7725,75 +7886,82 @@ msgstr ""
" примуÑова оÑнова чиÑÐ»ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñ–Ð² Ñимволів. Варіанти:\n"
" мішана (типовий), віÑімкова, деÑÑткова, шіÑтнадцÑткова.\n"
-#: readelf.c:4735
+#: readelf.c:5054
#, c-format
-msgid ""
-" -C --demangle[=STYLE] Decode low-level symbol names into user-level names\n"
-" The STYLE, if specified, can be `auto' (the default),\n"
-" `gnu', `lucid', `arm', `hp', `edg', `gnu-v3', `java'\n"
-" or `gnat'\n"
-msgstr ""
-" -C, --demangle[=СТИЛЬ] декодувати низькорівневі назви Ñимволів до зручних назв\n"
-" СТИЛЬ, Ñкщо вказано, може бути «auto» (типовий),\n"
-" «gnu», «lucid», «arm», «hp», «edg», «gnu-v3», «java»\n"
-" або «gnat»\n"
+msgid " -C --demangle[=STYLE] Decode mangled/processed symbol names\n"
+msgstr " -C, --demangle[=СТИЛЬ] декодувати зашифровані/оброблені назви Ñимволів\n"
-#: readelf.c:4740
+#: readelf.c:5058
#, c-format
msgid " --no-demangle Do not demangle low-level symbol names. (default)\n"
msgstr " --no-demangle не дешифрувати низькорівневі назви Ñимволів (типово)\n"
-#: readelf.c:4742
+#: readelf.c:5060
#, c-format
msgid " --recurse-limit Enable a demangling recursion limit. (default)\n"
msgstr " --recurse-limit увімкнути Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ð½Ð° рекурÑÑ–ÑŽ при дешифруванні (типова поведінка)\n"
-#: readelf.c:4744
+#: readelf.c:5062
#, c-format
msgid " --no-recurse-limit Disable a demangling recursion limit\n"
msgstr " --no-recurse-limit вимкнути Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ð½Ð° рекурÑÑ–ÑŽ при дешифруванні\n"
-#: readelf.c:4746
+#: readelf.c:5064
+#, c-format
+msgid ""
+" -U[dlexhi] --unicode=[default|locale|escape|hex|highlight|invalid]\n"
+" Display unicode characters as determined by the current locale\n"
+" (default), escape sequences, \"<hex sequences>\", highlighted\n"
+" escape sequences, or treat them as invalid and display as\n"
+" \"{hex sequences}\"\n"
+msgstr ""
+" -U[dlexhi] --unicode=[default|locale|escape|hex|highlight|invalid]\n"
+" вивеÑти Ñимволи unicode у ÑпоÑіб, Ñкий визначено поточною локаллю\n"
+" (типовий варіант), керівних поÑлідовноÑтей, «<шіÑтнаднцÑткових поÑлідовноÑтей>»,\n"
+" підÑвічених керівних поÑлідовноÑтей або вважати Ñ—Ñ… некоректним Ñ–\n"
+" ввеÑти Ñк «{шіÑтнадцÑткові поÑлідовноÑÑ‚Ñ–}»\n"
+
+#: readelf.c:5070
#, c-format
msgid " -n --notes Display the core notes (if present)\n"
msgstr " -n --notes вивеÑти нотатки щодо Ñдра (Ñкщо Ñ”)\n"
-#: readelf.c:4748
+#: readelf.c:5072
#, c-format
msgid " -r --relocs Display the relocations (if present)\n"
msgstr " -r --relocs вивеÑти переÑÑƒÐ²Ð°Ð½Ð½Ñ (Ñкщо Ñ”)\n"
-#: readelf.c:4750
+#: readelf.c:5074
#, c-format
msgid " -u --unwind Display the unwind info (if present)\n"
msgstr " -u --unwind вивеÑти відомоÑÑ‚Ñ– щодо unwind (Ñкщо Ñ”)\n"
-#: readelf.c:4752
+#: readelf.c:5076
#, c-format
msgid " -d --dynamic Display the dynamic section (if present)\n"
msgstr " -d --dynamic вивеÑти динамічний розділ (Ñкщо Ñ”)\n"
-#: readelf.c:4754
+#: readelf.c:5078
#, c-format
msgid " -V --version-info Display the version sections (if present)\n"
msgstr " -V --version-info вивеÑти розділи верÑій (Ñкщо Ñ”)\n"
-#: readelf.c:4756
+#: readelf.c:5080
#, c-format
msgid " -A --arch-specific Display architecture specific information (if any)\n"
msgstr " -A --arch-specific вивеÑти Ñпецифічні Ð´Ð»Ñ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ дані, Ñкщо такі буде виÑвлено\n"
-#: readelf.c:4758
+#: readelf.c:5082
#, c-format
msgid " -c --archive-index Display the symbol/file index in an archive\n"
msgstr " -c --archive-index вивеÑти Ñ–Ð½Ð´ÐµÐºÑ Ñимволів/файлів в архіві\n"
-#: readelf.c:4760
+#: readelf.c:5084
#, c-format
msgid " -D --use-dynamic Use the dynamic section info when displaying symbols\n"
msgstr " -D --use-dynamic при показі Ñимволів викориÑтати дані щодо динамічних розділів\n"
-#: readelf.c:4762
+#: readelf.c:5086
#, c-format
msgid ""
" -L --lint|--enable-checks\n"
@@ -7802,7 +7970,7 @@ msgstr ""
" -L --lint|--enable-checks\n"
" вивеÑти Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ можливих проблем\n"
-#: readelf.c:4765
+#: readelf.c:5089
#, c-format
msgid ""
" -x --hex-dump=<number|name>\n"
@@ -7811,7 +7979,7 @@ msgstr ""
" -x --hex-dump=<номер|назва>\n"
" вивеÑти дамп щодо вміÑту розділу <номер|назва> Ñк байти\n"
-#: readelf.c:4768
+#: readelf.c:5092
#, c-format
msgid ""
" -p --string-dump=<number|name>\n"
@@ -7820,7 +7988,7 @@ msgstr ""
" -p --string-dump=<номер|назва>\n"
" Ñтворити дамп вміÑту розділу <номер|назва> у форматі Ñ€Ñдків\n"
-#: readelf.c:4771
+#: readelf.c:5095
#, c-format
msgid ""
" -R --relocated-dump=<number|name>\n"
@@ -7829,12 +7997,12 @@ msgstr ""
" -R --relocated-dump=<номер|назва>\n"
" вивеÑти дамп вміÑту переÑунутих даних розділу <номер|назва>\n"
-#: readelf.c:4774
+#: readelf.c:5098
#, c-format
msgid " -z --decompress Decompress section before dumping it\n"
msgstr " -z --decompress розпакувати розділ до ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¹Ð¾Ð³Ð¾ дампу\n"
-#: readelf.c:4776
+#: readelf.c:5100
#, c-format
msgid ""
" -w --debug-dump[a/=abbrev, A/=addr, r/=aranges, c/=cu_index, L/=decodedline,\n"
@@ -7851,7 +8019,7 @@ msgstr ""
" U/=trace_info]\n"
" вивеÑти вміÑÑ‚ діагноÑтичних розділів DWARF\n"
-#: readelf.c:4783
+#: readelf.c:5107
#, c-format
msgid ""
" -wk --debug-dump=links Display the contents of sections that link to separate\n"
@@ -7860,7 +8028,7 @@ msgstr ""
" -wk --debug-dump=links вивеÑти вміÑÑ‚ розділів, Ñкі поÑилаютьÑÑ Ð½Ð° окремі\n"
" файли debuginfo\n"
-#: readelf.c:4786
+#: readelf.c:5110
#, c-format
msgid ""
" -P --process-links Display the contents of non-debug sections in separate\n"
@@ -7869,7 +8037,7 @@ msgstr ""
" -P, --process-links вивеÑти вміÑÑ‚ недіагноÑтичних розділів до\n"
" окремих файлів debuginfo. (ДопиÑує -wK)\n"
-#: readelf.c:4790
+#: readelf.c:5114
#, c-format
msgid ""
" -wK --debug-dump=follow-links\n"
@@ -7878,7 +8046,7 @@ msgstr ""
" -wK --debug-dump=follow-links\n"
" переходити за поÑиланнÑм до окремих файлів діагноÑтичних даних (типово)\n"
-#: readelf.c:4793
+#: readelf.c:5117
#, c-format
msgid ""
" -wN --debug-dump=no-follow-links\n"
@@ -7887,7 +8055,7 @@ msgstr ""
" -wN --debug-dump=no-follow-links\n"
" не переходити за поÑиланнÑми до окремих файлів діагноÑтичних даних\n"
-#: readelf.c:4797
+#: readelf.c:5121
#, c-format
msgid ""
" -wK --debug-dump=follow-links\n"
@@ -7896,7 +8064,7 @@ msgstr ""
" -wK --debug-dump=follow-links\n"
" переходити за поÑиланнÑм до окремих файлів діагноÑтичних даних\n"
-#: readelf.c:4800
+#: readelf.c:5124
#, c-format
msgid ""
" -wN --debug-dump=no-follow-links\n"
@@ -7907,31 +8075,27 @@ msgstr ""
" не переходити за поÑиланнÑми до окремих файлів\n"
" діагноÑтичних даних (типово)\n"
-#: readelf.c:4805
+#: readelf.c:5129
#, c-format
msgid " --dwarf-depth=N Do not display DIEs at depth N or greater\n"
msgstr " --dwarf-depth=N Ðе показувати DIE глибиною N або більше\n"
-#: readelf.c:4807
+#: readelf.c:5131
#, c-format
msgid " --dwarf-start=N Display DIEs starting at offset N\n"
msgstr " --dwarf-start=N Показувати DIE, що починаютьÑÑ Ð·Ñ– зміщеннÑм N\n"
-#: readelf.c:4810
+#: readelf.c:5134
#, c-format
msgid " --ctf=<number|name> Display CTF info from section <number|name>\n"
msgstr " --ctf=<номер|назва> вивеÑти відомоÑÑ‚Ñ– CTF з розділу <номер|назва>\n"
-#: readelf.c:4812
+#: readelf.c:5136
#, c-format
-msgid ""
-" --ctf-parent=<number|name>\n"
-" Use section <number|name> as the CTF parent\n"
-msgstr ""
-" --ctf-parent=<номер|назва>\n"
-" ÑкориÑтатиÑÑ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð¾Ð¼ <номер|назва> Ñк батьківÑьким CTF\n"
+msgid " --ctf-parent=<name> Use CTF archive member <name> as the CTF parent\n"
+msgstr " --ctf-parent=<назва> ÑкориÑтатиÑÑ ÐµÐ»ÐµÐ¼ÐµÐ½Ñ‚Ð¾Ð¼ архіву CTF <назва> Ñк батьківÑьким CTF\n"
-#: readelf.c:4815
+#: readelf.c:5138
#, c-format
msgid ""
" --ctf-symbols=<number|name>\n"
@@ -7940,7 +8104,7 @@ msgstr ""
" --ctf-symbols=<номер|назва>\n"
" ÑкориÑтатиÑÑ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð¾Ð¼ <номер|назва> Ñк зовнішньою таблицею Ñимволів CTF\n"
-#: readelf.c:4818
+#: readelf.c:5141
#, c-format
msgid ""
" --ctf-strings=<number|name>\n"
@@ -7949,7 +8113,7 @@ msgstr ""
" --ctf-strings=<номер|назва>\n"
" викориÑтати розділ <номер|назва> Ñк зовнішню таблицю Ñ€Ñдків CTF\n"
-#: readelf.c:4824
+#: readelf.c:5147
#, c-format
msgid ""
" -i --instruction-dump=<number|name>\n"
@@ -7958,130 +8122,134 @@ msgstr ""
" -i --instruction-dump=<номер|назва>\n"
" ДизаÑÐµÐ¼Ð±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð²Ð¼Ñ–Ñту розділу <номер|назва>\n"
-#: readelf.c:4828
+#: readelf.c:5151
#, c-format
msgid " -I --histogram Display histogram of bucket list lengths\n"
msgstr " -I --histogram Показати гіÑтограму довжин ÑпиÑку блоків\n"
-#: readelf.c:4830
+#: readelf.c:5153
#, c-format
msgid " -W --wide Allow output width to exceed 80 characters\n"
msgstr " -W --wide дозволити Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ñ–Ð· шириною, що перевищує 80 Ñимволів\n"
-#: readelf.c:4832
+#: readelf.c:5155
#, c-format
msgid " -T --silent-truncation If a symbol name is truncated, do not add [...] suffix\n"
msgstr " -T --silent-truncation Ñкщо назву Ñимволу обрізано, не додавати ÑÑƒÑ„Ñ–ÐºÑ [...]\n"
-#: readelf.c:4834
+#: readelf.c:5157
#, c-format
msgid " @<file> Read options from <file>\n"
msgstr " @<файл> Читати параметри з <файла>\n"
-#: readelf.c:4836
+#: readelf.c:5159
#, c-format
msgid " -H --help Display this information\n"
msgstr " -H --help вивеÑти ці відомоÑÑ‚Ñ–\n"
-#: readelf.c:4838
+#: readelf.c:5161
#, c-format
msgid " -v --version Display the version number of readelf\n"
msgstr " -v --version вивеÑти номер верÑÑ–Ñ— readelf\n"
-#: readelf.c:4864 readelf.c:4895 readelf.c:4899
+#: readelf.c:5187 readelf.c:5218 readelf.c:5222
msgid "Out of memory allocating dump request table.\n"
msgstr "Бракує пам'ÑÑ‚Ñ– при розміщенні дампу таблиці запиту.\n"
-#: readelf.c:5155
+#: readelf.c:5458
+msgid "Missing arg to -U/--unicode"
+msgstr "Пропущено аргумент -U/--unicode"
+
+#: readelf.c:5497
#, c-format
msgid "Invalid option '-%c'\n"
msgstr "Ðеправильний ключ '-%c'\n"
-#: readelf.c:5189 readelf.c:5205 readelf.c:11478
+#: readelf.c:5531 readelf.c:5547 readelf.c:11828
msgid "none"
msgstr "немає"
-#: readelf.c:5206
+#: readelf.c:5548
msgid "2's complement, little endian"
msgstr "Ð´Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð´Ð¾ 2, little endian"
-#: readelf.c:5207
+#: readelf.c:5549
msgid "2's complement, big endian"
msgstr "Ð´Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð´Ð¾ 2, big endian"
-#: readelf.c:5227
+#: readelf.c:5569
msgid "Not an ELF file - it has the wrong magic bytes at the start\n"
msgstr "Ðе ELF-файл - він міÑтить неправильні magic-байти на початку\n"
-#: readelf.c:5239
+#: readelf.c:5581
#, c-format
msgid "ELF Header in linked file '%s':\n"
msgstr "Заголовок ELF у пов'Ñзаному файлі «%s»:\n"
-#: readelf.c:5241
+#: readelf.c:5583
#, c-format
msgid "ELF Header:\n"
msgstr "Заголовок ELF:\n"
-#: readelf.c:5242
+#: readelf.c:5584
#, c-format
msgid " Magic: "
msgstr " Magic: "
-#: readelf.c:5246
+#: readelf.c:5588
#, c-format
msgid " Class: %s\n"
msgstr " КлаÑ: %s\n"
-#: readelf.c:5248
+#: readelf.c:5590
#, c-format
msgid " Data: %s\n"
msgstr " Дані: %s\n"
-#: readelf.c:5250
+#: readelf.c:5592
#, c-format
msgid " Version: %d%s\n"
msgstr " ВерÑÑ–Ñ: %d%s\n"
-#: readelf.c:5253
+#: readelf.c:5595
msgid " (current)"
msgstr " (поточна)"
-#: readelf.c:5255
+#: readelf.c:5597
msgid " <unknown>"
msgstr " <невідомо>"
-#: readelf.c:5257
+#: readelf.c:5599
#, c-format
msgid " OS/ABI: %s\n"
msgstr " OS/ABI: %s\n"
-#: readelf.c:5259
+#: readelf.c:5601
#, c-format
msgid " ABI Version: %d\n"
msgstr " ВерÑÑ–Ñ ABI: %d\n"
-#: readelf.c:5261
+#: readelf.c:5603
#, c-format
msgid " Type: %s\n"
msgstr " Тип: %s\n"
-#: readelf.c:5263
+#: readelf.c:5605
#, c-format
msgid " Machine: %s\n"
msgstr " Машина: %s\n"
-#: readelf.c:5265
+#: readelf.c:5607
#, c-format
msgid " Version: 0x%lx\n"
msgstr " ВерÑÑ–Ñ: 0x%lx\n"
-#: readelf.c:5268
+#: readelf.c:5610
#, c-format
msgid " Entry point address: "
msgstr " ÐдреÑа точки входу: "
-#: readelf.c:5270
+#: readelf.c:5612
#, c-format
msgid ""
"\n"
@@ -8090,7 +8258,7 @@ msgstr ""
"\n"
" Початок заголовків програми: "
-#: readelf.c:5272
+#: readelf.c:5614
#, c-format
msgid ""
" (bytes into file)\n"
@@ -8099,78 +8267,78 @@ msgstr ""
" (байт в файлі)\n"
" Початок заголовків програми: "
-#: readelf.c:5274
+#: readelf.c:5616
#, c-format
msgid " (bytes into file)\n"
msgstr " (байт в файлі)\n"
-#: readelf.c:5276
+#: readelf.c:5618
#, c-format
msgid " Flags: 0x%lx%s\n"
msgstr " Ознаки: 0x%lx%s\n"
-#: readelf.c:5279
+#: readelf.c:5621
#, c-format
msgid " Size of this header: %u (bytes)\n"
msgstr " Розмір цього заголовка: %u (байт)\n"
-#: readelf.c:5281
+#: readelf.c:5623
#, c-format
msgid " Size of program headers: %u (bytes)\n"
msgstr " Розмір заголовків програми: %u (байт)\n"
-#: readelf.c:5283
+#: readelf.c:5625
#, c-format
msgid " Number of program headers: %u"
msgstr " КількіÑÑ‚ÑŒ заголовків програми: %u"
-#: readelf.c:5293
+#: readelf.c:5635
#, c-format
msgid " Size of section headers: %u (bytes)\n"
msgstr " Розмір заголовків розділу: %u (байт)\n"
-#: readelf.c:5295
+#: readelf.c:5637
#, c-format
msgid " Number of section headers: %u"
msgstr " ЧиÑло заголовків розділу: %u"
-#: readelf.c:5303
+#: readelf.c:5645
#, c-format
msgid " Section header string table index: %u"
msgstr " Ð†Ð½Ð´ÐµÐºÑ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ñ€Ñдків заголовка розділу: %u"
-#: readelf.c:5315
+#: readelf.c:5657
#, c-format
msgid " <corrupt: out of range>"
msgstr " <пошкоджений: поза діапазоном>"
-#: readelf.c:5354 readelf.c:5401
+#: readelf.c:5696 readelf.c:5743
msgid "The e_phentsize field in the ELF header is less than the size of an ELF program header\n"
msgstr "Поле e_phentsize у заголовку ELF є меншим за розмір заголовка програми ELF\n"
-#: readelf.c:5358 readelf.c:5405
+#: readelf.c:5700 readelf.c:5747
msgid "The e_phentsize field in the ELF header is larger than the size of an ELF program header\n"
msgstr "Поле e_phentsize у заголовку ELF є більшим за розмір заголовка програми ELF\n"
-#: readelf.c:5361 readelf.c:5408
+#: readelf.c:5703 readelf.c:5750
msgid "program headers"
msgstr "заголовки програми"
-#: readelf.c:5447
+#: readelf.c:5789
#, c-format
msgid "Too many program headers - %#x - the file is not that big\n"
msgstr "Забагато заголовків програми - %#x - файл не є таким великим\n"
-#: readelf.c:5456
+#: readelf.c:5798
#, c-format
msgid "Out of memory reading %u program headers\n"
msgstr "Під Ñ‡Ð°Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÑ–Ð² програми %u вичерпано пам'ÑÑ‚ÑŒ\n"
-#: readelf.c:5486
+#: readelf.c:5828
msgid "possibly corrupt ELF header - it has a non-zero program header offset, but no program headers\n"
msgstr "ймовірно, пошкоджено заголовок ELF: він має ненульовий зÑув заголовка програми, але не міÑтить Ñамого заголовка програми\n"
-#: readelf.c:5491
+#: readelf.c:5833
#, c-format
msgid ""
"\n"
@@ -8179,7 +8347,7 @@ msgstr ""
"\n"
"У пов'Ñзаному файлі «%s» немає заголовків програми.\n"
-#: readelf.c:5494
+#: readelf.c:5836
#, c-format
msgid ""
"\n"
@@ -8188,7 +8356,7 @@ msgstr ""
"\n"
"У цьому файлі немає заголовків програми.\n"
-#: readelf.c:5505
+#: readelf.c:5847
#, c-format
msgid ""
"\n"
@@ -8197,12 +8365,12 @@ msgstr ""
"\n"
"Тип elf-файла - %s\n"
-#: readelf.c:5506
+#: readelf.c:5848
#, c-format
msgid "Entry point 0x%s\n"
msgstr "Точка входу 0x%s\n"
-#: readelf.c:5507
+#: readelf.c:5849
#, c-format
msgid "There is %d program header, starting at offset %s\n"
msgid_plural "There are %d program headers, starting at offset %s\n"
@@ -8211,7 +8379,7 @@ msgstr[1] "ВиÑвлено %d заголовки програми, почина
msgstr[2] "ВиÑвлено %d заголовків програми, починаючи зі зÑуву %s\n"
msgstr[3] "ВиÑвлено %d заголовок програми, починаючи зі зÑуву %s\n"
-#: readelf.c:5520 readelf.c:5522
+#: readelf.c:5862 readelf.c:5864
#, c-format
msgid ""
"\n"
@@ -8220,68 +8388,68 @@ msgstr ""
"\n"
"Заголовки програми:\n"
-#: readelf.c:5526
+#: readelf.c:5868
#, c-format
msgid " Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align\n"
msgstr " Тип ЗÑув Вірт.адр Фіз.адр Рзм.фйл Рзм.пм Озн Вирівн\n"
-#: readelf.c:5529
+#: readelf.c:5871
#, c-format
msgid " Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align\n"
msgstr " Тип ЗÑув Віртуальна адреÑа Фізична адреÑа Рзм.фйл Рзм.пм Озн Вирівн\n"
-#: readelf.c:5533
+#: readelf.c:5875
#, c-format
msgid " Type Offset VirtAddr PhysAddr\n"
msgstr " Тип ЗÑув Віртуальна адреÑа Фізична адреÑа\n"
-#: readelf.c:5535
+#: readelf.c:5877
#, c-format
msgid " FileSiz MemSiz Flags Align\n"
msgstr " Розмір файла Розмір пам'ÑÑ‚Ñ– ВирівнюваннÑ\n"
-#: readelf.c:5633
+#: readelf.c:5975
msgid "LOAD segments must be sorted in order of increasing VirtAddr\n"
msgstr "Сегменти LOAD має бути упорÑдковано за зроÑтаннÑм VirtAddr\n"
-#: readelf.c:5636
+#: readelf.c:5978
msgid "the segment's file size is larger than its memory size\n"
msgstr "розмір файла Ñегмента перевищує розмір отриманої Ð´Ð»Ñ Ð½ÑŒÐ¾Ð³Ð¾ пам'ÑÑ‚Ñ–\n"
-#: readelf.c:5643
+#: readelf.c:5985
msgid "the PHDR segment must occur before any LOAD segment\n"
msgstr "Ñегмент PHDR має бути розташовано до будь-Ñкого Ñегмента LOAD\n"
-#: readelf.c:5661
+#: readelf.c:6003
msgid "the PHDR segment is not covered by a LOAD segment\n"
msgstr "Ñегмент PHDR не покриваєтьÑÑ Ñегментом LOAD\n"
-#: readelf.c:5667
+#: readelf.c:6009
msgid "more than one dynamic segment\n"
msgstr "більш ніж один динамічний Ñегмент\n"
-#: readelf.c:5686
+#: readelf.c:6028
msgid "no .dynamic section in the dynamic segment\n"
msgstr "у динамічному Ñегменті немає розділу .dynamic\n"
-#: readelf.c:5705
+#: readelf.c:6047
msgid "the .dynamic section is not the same as the dynamic segment\n"
msgstr "розділ .dynamic не Ñ” тим Ñамим, що Ñ– в динамічному Ñегменті\n"
-#: readelf.c:5716
+#: readelf.c:6058
msgid "the dynamic segment offset + size exceeds the size of the file\n"
msgstr "зÑув динамічного Ñегмента + розмір перевищують розмір файла\n"
-#: readelf.c:5729
+#: readelf.c:6071
msgid "Unable to find program interpreter name\n"
msgstr "Ðеможливо знайти назву інтерпретатора програми\n"
-#: readelf.c:5740
+#: readelf.c:6082
#, c-format
msgid " [Requesting program interpreter: %s]\n"
msgstr " [Запитаний інтерпретатор програми: %s]\n"
-#: readelf.c:5751
+#: readelf.c:6093
#, c-format
msgid ""
"\n"
@@ -8290,102 +8458,102 @@ msgstr ""
"\n"
" ВідповідніÑÑ‚ÑŒ розділ-Ñегмент:\n"
-#: readelf.c:5752
+#: readelf.c:6094
#, c-format
msgid " Segment Sections...\n"
msgstr " Сегмент Розділи...\n"
-#: readelf.c:5794 readelf.c:10759
+#: readelf.c:6136 readelf.c:11113
msgid "Cannot interpret virtual addresses without program headers.\n"
msgstr "Ðеможливо інтерпретувати віртуальні адреÑи без заголовків програми.\n"
-#: readelf.c:5810
+#: readelf.c:6152
#, c-format
msgid "Virtual address 0x%lx not located in any PT_LOAD segment.\n"
msgstr "Віртуальна адреÑа 0x%lx не розміщена у жодному Ñегменті PT_LOAD.\n"
-#: readelf.c:5835 readelf.c:5899
+#: readelf.c:6177 readelf.c:6241
msgid "The e_shentsize field in the ELF header is less than the size of an ELF section header\n"
msgstr "Поле e_shentsize у заголовку ELF є меншим за розмір заголовка розділу ELF\n"
-#: readelf.c:5839 readelf.c:5904
+#: readelf.c:6181 readelf.c:6246
msgid "The e_shentsize field in the ELF header is larger than the size of an ELF section header\n"
msgstr "Поле e_shentsize у заголовку ELF є більшим за розмір заголовка розділу ELF\n"
-#: readelf.c:5843 readelf.c:5909
+#: readelf.c:6185 readelf.c:6251
msgid "section headers"
msgstr "заголовки розділів"
-#: readelf.c:5852 readelf.c:5918
+#: readelf.c:6194 readelf.c:6260
#, c-format
msgid "Out of memory reading %u section headers\n"
msgstr "Під Ñ‡Ð°Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÑ–Ð² розділу %u вичерпано пам'ÑÑ‚ÑŒ\n"
-#: readelf.c:5872 readelf.c:5938
+#: readelf.c:6214 readelf.c:6280
#, c-format
msgid "Section %u has an out of range sh_link value of %u\n"
msgstr "Розділ %u міÑÑ‚ÑÑ‚ÑŒ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ sh_link %u виходить за межі припуÑтимого діапазону\n"
-#: readelf.c:5874 readelf.c:5940
+#: readelf.c:6216 readelf.c:6282
#, c-format
msgid "Section %u has an out of range sh_info value of %u\n"
msgstr "Розділ %u міÑÑ‚ÑÑ‚ÑŒ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ sh_info %u виходить за межі припуÑтимого діапазону\n"
-#: readelf.c:5982 readelf.c:6099
+#: readelf.c:6324 readelf.c:6441
#, c-format
msgid "Section %s has an invalid sh_entsize of 0x%lx\n"
msgstr "Розділ %s має некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ sh_entsize 0x%lx\n"
-#: readelf.c:5990 readelf.c:6107 readelf.c:12767
+#: readelf.c:6332 readelf.c:6449 readelf.c:13146
#, c-format
msgid "Section %s has an invalid sh_size of 0x%lx\n"
msgstr "Розділ %s має некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ sh_size 0x%lx\n"
-#: readelf.c:6000 readelf.c:6117
+#: readelf.c:6342 readelf.c:6459
#, c-format
msgid "Size (0x%lx) of section %s is not a multiple of its sh_entsize (0x%lx)\n"
msgstr "Розмір (0x%lx) розділу %s не є кратним до його sh_entsize (0x%lx)\n"
-#: readelf.c:6008 readelf.c:6125 readelf.c:15196
+#: readelf.c:6350 readelf.c:6467 readelf.c:15575
msgid "symbols"
msgstr "Ñимволи"
-#: readelf.c:6020 readelf.c:6137
+#: readelf.c:6362 readelf.c:6479
msgid "Multiple symbol table index sections associated with the same symbol section\n"
msgstr "Із одним розділом Ñимволів пов'Ñзано декілька розділів покажчика таблиці Ñимволів\n"
-#: readelf.c:6027 readelf.c:6144
+#: readelf.c:6369 readelf.c:6486
msgid "symbol table section indices"
msgstr "індекÑи розділу таблиці Ñимволів"
-#: readelf.c:6034 readelf.c:6151
+#: readelf.c:6376 readelf.c:6493
#, c-format
msgid "Index section %s has an sh_size of 0x%lx - expected 0x%lx\n"
msgstr "Розділ покажчика %s має sh_size 0x%lx - очікувалоÑÑ 0x%lx\n"
-#: readelf.c:6046 readelf.c:6163
+#: readelf.c:6388 readelf.c:6505
#, c-format
msgid "Out of memory reading %lu symbols\n"
msgstr "Ð§Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð¿Ð¾Ð·Ð° межами пам'ÑÑ‚Ñ– %lu Ñимволів\n"
-#: readelf.c:6372 readelf.c:6469 readelf.c:6487 readelf.c:6505
+#: readelf.c:6714 readelf.c:6811 readelf.c:6829 readelf.c:6847
msgid "Internal error: not enough buffer room for section flag info"
msgstr "Ð’Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: недоÑтатньо міÑÑ†Ñ Ñƒ буфері Ð´Ð»Ñ Ñ–Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ— щодо прапорців розділів"
-#: readelf.c:6512
+#: readelf.c:6854
#, c-format
msgid "UNKNOWN (%*.*lx)"
msgstr "ÐЕВІДОМО (%*.*lx)"
-#: readelf.c:6531 readelf.c:6546
+#: readelf.c:6873 readelf.c:6888
msgid "Compressed section is too small even for a compression header\n"
msgstr "СтиÑнений розділ Ñ” надто малим навіть Ð´Ð»Ñ ÑтиÑненого заголовка\n"
-#: readelf.c:6568
+#: readelf.c:6910
msgid "possibly corrupt ELF file header - it has a non-zero section header offset, but no section headers\n"
msgstr "ймовірно, пошкоджено заголовок файла ELF: він має ненульовий зÑув заголовка розділів, але не міÑтить Ñамих заголовків розділів.\n"
-#: readelf.c:6573
+#: readelf.c:6915
#, c-format
msgid ""
"\n"
@@ -8394,12 +8562,12 @@ msgstr ""
"\n"
"У цьому файлі немає розділів.\n"
-#: readelf.c:6581 readelf.c:20805
+#: readelf.c:6923 readelf.c:21262
#, c-format
msgid "In linked file '%s': "
msgstr "У пов'Ñзаному файлі «%s»: "
-#: readelf.c:6583
+#: readelf.c:6925
#, c-format
msgid "There is %d section header, starting at offset 0x%lx:\n"
msgid_plural "There are %d section headers, starting at offset 0x%lx:\n"
@@ -8408,45 +8576,45 @@ msgstr[1] "ВиÑвлено %d заголовки розділу, починаю
msgstr[2] "ВиÑвлено %d заголовків розділу, починаючи зі зÑуву 0x%lx:\n"
msgstr[3] "ВиÑвлено %d заголовок розділу, починаючи зі зÑуву 0x%lx:\n"
-#: readelf.c:6605 readelf.c:7278 readelf.c:7479 readelf.c:13054
-#: readelf.c:15585
+#: readelf.c:6947 readelf.c:7624 readelf.c:7826 readelf.c:13434
+#: readelf.c:15933
msgid "string table"
msgstr "Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ñ€Ñдків"
#. Note: coded this way so that there is a single string for translation.
-#: readelf.c:6671
+#: readelf.c:7013
#, c-format
msgid "Section %d has invalid sh_entsize of %s\n"
msgstr "Розділ %d має некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ sh_entsize %s\n"
-#: readelf.c:6672
+#: readelf.c:7014
#, c-format
msgid "(Using the expected size of %u for the rest of this dump)\n"
msgstr "(ВикориÑтовуємо очікуваний розмір %u Ð´Ð»Ñ Ñ€ÐµÑˆÑ‚Ð¸ цього дампу)\n"
-#: readelf.c:6696
+#: readelf.c:7038
msgid "File contains multiple dynamic symbol tables\n"
msgstr "Файл міÑтить декілька таблиць динамічних Ñимволів\n"
-#: readelf.c:6711
+#: readelf.c:7053
msgid "File contains multiple dynamic string tables\n"
msgstr "Файл міÑтить декілька таблиць динамічних Ñ€Ñдків\n"
-#: readelf.c:6717
+#: readelf.c:7059
msgid "dynamic strings"
msgstr "динамічні Ñ€Ñдки"
-#: readelf.c:6745 readelf.c:6751
+#: readelf.c:7087 readelf.c:7093
#, c-format
msgid "Section '%s': zero-sized relocation section\n"
msgstr "Розділ «%s»: розділ переÑувань нульового розміру\n"
-#: readelf.c:6760
+#: readelf.c:7106
#, c-format
msgid "Section '%s': has a size of zero - is this intended ?\n"
msgstr "Розділ «%s»: має нульовий розмір — так треба?\n"
-#: readelf.c:6844
+#: readelf.c:7190
#, c-format
msgid ""
"\n"
@@ -8455,7 +8623,7 @@ msgstr ""
"\n"
"Заголовки розділів у пов'Ñзаному файлі «%s»:\n"
-#: readelf.c:6846
+#: readelf.c:7192
#, c-format
msgid ""
"\n"
@@ -8464,7 +8632,7 @@ msgstr ""
"\n"
"Заголовки розділів:\n"
-#: readelf.c:6848
+#: readelf.c:7194
#, c-format
msgid ""
"\n"
@@ -8473,106 +8641,106 @@ msgstr ""
"\n"
"Заголовок розділу:\n"
-#: readelf.c:6854 readelf.c:6865 readelf.c:6876
+#: readelf.c:7200 readelf.c:7211 readelf.c:7222
#, c-format
msgid " [Nr] Name\n"
msgstr " [Nr] Ðазва\n"
-#: readelf.c:6855
+#: readelf.c:7201
#, c-format
msgid " Type Addr Off Size ES Lk Inf Al\n"
msgstr " Тип ÐдреÑа ЗÑув Розм ES Ð¡Ñ Ð†Ð½Ñ„ Al\n"
-#: readelf.c:6859
+#: readelf.c:7205
#, c-format
msgid " [Nr] Name Type Addr Off Size ES Flg Lk Inf Al\n"
msgstr " [Ðм] Ðазва Тип ÐдреÑа ЗÑув Розм ES Флг Ð¡Ñ Ð†Ð½Ñ„ Al\n"
-#: readelf.c:6866
+#: readelf.c:7212
#, c-format
msgid " Type Address Off Size ES Lk Inf Al\n"
msgstr " Тип ÐдреÑа ЗÑув Розм ES Ð¡Ñ Ð†Ð½Ñ„ Al\n"
-#: readelf.c:6870
+#: readelf.c:7216
#, c-format
msgid " [Nr] Name Type Address Off Size ES Flg Lk Inf Al\n"
msgstr " [Ðм] Ðазва Тип ÐдреÑа ЗÑув Розм ES Озн Лк Інф Al\n"
-#: readelf.c:6877
+#: readelf.c:7223
#, c-format
msgid " Type Address Offset Link\n"
msgstr " Тип ÐдреÑа ЗÑув ПоÑиланнÑ\n"
-#: readelf.c:6878
+#: readelf.c:7224
#, c-format
msgid " Size EntSize Info Align\n"
msgstr " Розмір Розм.Ent Інфо Вирівн\n"
-#: readelf.c:6882
+#: readelf.c:7228
#, c-format
msgid " [Nr] Name Type Address Offset\n"
msgstr " [Ðм] Ðазва Тип ÐдреÑа ЗÑув\n"
-#: readelf.c:6883
+#: readelf.c:7229
#, c-format
msgid " Size EntSize Flags Link Info Align\n"
msgstr " Розмір Розм.Ent Ознаки ПоÑил Інфо Вирівн\n"
-#: readelf.c:6888
+#: readelf.c:7234
#, c-format
msgid " Flags\n"
msgstr " Ознаки\n"
-#: readelf.c:6917
+#: readelf.c:7263
#, c-format
msgid "[%2u]: Link field (%u) should index a symtab section.\n"
msgstr "[%2u]: поле Link (%u) має міÑтити Ñ–Ð½Ð´ÐµÐºÑ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ symtab.\n"
-#: readelf.c:6930
+#: readelf.c:7276
#, c-format
msgid "[%2u]: Link field (%u) should index a string section.\n"
msgstr "[%2u]: поле Link (%u) має міÑтити Ñ–Ð½Ð´ÐµÐºÑ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ñ€Ñдків.\n"
-#: readelf.c:6938 readelf.c:6949
+#: readelf.c:7284 readelf.c:7295
#, c-format
msgid "[%2u]: Unexpected value (%u) in link field.\n"
msgstr "[%2u]: неочікуване Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ (%u) у полі поÑиланнÑ.\n"
-#: readelf.c:6976
+#: readelf.c:7322
#, c-format
msgid "[%2u]: Info field (%u) should index a relocatable section.\n"
msgstr "[%2u]: поле Info (%u) має міÑтити Ñ–Ð½Ð´ÐµÐºÑ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ переÑувань.\n"
-#: readelf.c:6987 readelf.c:7014
+#: readelf.c:7333 readelf.c:7360
#, c-format
msgid "[%2u]: Unexpected value (%u) in info field.\n"
msgstr "[%2u]: неочікуване Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ (%u) у полі інформації.\n"
-#: readelf.c:7009
+#: readelf.c:7355
#, c-format
msgid "[%2u]: Expected link to another section in info field"
msgstr "[%2u]: очікуване поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° інший розділу у полі інформації"
-#: readelf.c:7024
+#: readelf.c:7370
#, c-format
msgid "Size of section %u is larger than the entire file!\n"
msgstr "Розмір розділу %u Ñ” більше за розмір уÑього файла!\n"
-#: readelf.c:7093
+#: readelf.c:7439
#, c-format
msgid "section %u: sh_link value of %u is larger than the number of sections\n"
msgstr "розділ %u: Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ sh_link %u Ñ” більшим за кількіÑÑ‚ÑŒ розділів\n"
-#: readelf.c:7194
+#: readelf.c:7540
msgid "compression header"
msgstr "заголовок ÑтиÑканнÑ"
-#: readelf.c:7199
+#: readelf.c:7545
#, c-format
msgid " [<corrupt>]\n"
msgstr " [<пошкоджено>]\n"
-#: readelf.c:7205
+#: readelf.c:7551
#, c-format
msgid " [<unknown>: 0x%x], "
msgstr " [<невідомий>: 0x%x], "
@@ -8580,7 +8748,7 @@ msgstr " [<невідомий>: 0x%x], "
#. The ordering of the letters shown here matches the ordering of the
#. corresponding SHF_xxx values, and hence the order in which these
#. letters will be displayed to the user.
-#: readelf.c:7220
+#: readelf.c:7566
#, c-format
msgid ""
"Key to Flags:\n"
@@ -8596,44 +8764,44 @@ msgstr ""
" p (Ñпецифічний Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑора), E (виключений),\n"
" "
-#: readelf.c:7228
+#: readelf.c:7574
#, c-format
msgid "R (retain), "
msgstr "R (зберегти), "
-#: readelf.c:7231
+#: readelf.c:7577
#, c-format
msgid "D (mbind), "
msgstr "D (mbind), "
-#: readelf.c:7239
+#: readelf.c:7585
#, c-format
msgid "l (large), "
msgstr "l (великий), "
-#: readelf.c:7241
+#: readelf.c:7587
#, c-format
msgid "y (purecode), "
msgstr "y (purecode), "
-#: readelf.c:7243
+#: readelf.c:7589
#, c-format
msgid "v (VLE), "
msgstr "v (VLE), "
-#: readelf.c:7268
+#: readelf.c:7614
msgid "Bad sh_link in symbol table section\n"
msgstr "Помилковий sh_link у розділі таблиці Ñимволів\n"
-#: readelf.c:7303
+#: readelf.c:7649
msgid "<OS specific>"
msgstr "<Ñпецифічний Ð´Ð»Ñ ÐžÐ¡>"
-#: readelf.c:7304
+#: readelf.c:7650
msgid "<PROC specific>"
msgstr "<Ñпецифічний Ð´Ð»Ñ PROC>"
-#: readelf.c:7333
+#: readelf.c:7679
#, c-format
msgid ""
"\n"
@@ -8642,7 +8810,7 @@ msgstr ""
"\n"
"У пов'Ñзаному файлі «%s» немає групи розділів.\n"
-#: readelf.c:7336 readelf.c:7375
+#: readelf.c:7682 readelf.c:7721
#, c-format
msgid ""
"\n"
@@ -8651,16 +8819,16 @@ msgstr ""
"\n"
"В цьому файлі немає груп розділів.\n"
-#: readelf.c:7343
+#: readelf.c:7689
msgid "Section headers are not available!\n"
msgstr "ÐедоÑтупні заголовки розділу!\n"
-#: readelf.c:7354
+#: readelf.c:7700
#, c-format
msgid "Out of memory reading %u section group headers\n"
msgstr "Під Ñ‡Ð°Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÑ–Ð² групи розділів %u вичерпано пам'ÑÑ‚ÑŒ\n"
-#: readelf.c:7372
+#: readelf.c:7718
#, c-format
msgid ""
"\n"
@@ -8669,41 +8837,41 @@ msgstr ""
"\n"
"У пов'Ñзаному файлі «%s» немає груп розділів.\n"
-#: readelf.c:7386
+#: readelf.c:7732
#, c-format
msgid "Out of memory reading %lu groups\n"
msgstr "Ð§Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð¿Ð¾Ð·Ð° межами пам'ÑÑ‚Ñ– %lu груп\n"
-#: readelf.c:7399
+#: readelf.c:7745
#, c-format
msgid "Section groups in linked file '%s'\n"
msgstr "Групи розділів у пов'Ñзаному файлі «%s»\n"
-#: readelf.c:7420
+#: readelf.c:7766
#, c-format
msgid "Bad sh_link in group section `%s'\n"
msgstr "Ðеправильний sh_link у розділі груп `%s'\n"
-#: readelf.c:7433
+#: readelf.c:7779
#, c-format
msgid "Corrupt header in group section `%s'\n"
msgstr "Пошкоджений заголовок у розділі груп, «%s»\n"
-#: readelf.c:7439 readelf.c:7450
+#: readelf.c:7785 readelf.c:7796
#, c-format
msgid "Bad sh_info in group section `%s'\n"
msgstr "Ðеправильний sh_info у розділі груп «%s»\n"
-#: readelf.c:7489
+#: readelf.c:7836
#, c-format
msgid "Section %s has sh_entsize (0x%lx) which is larger than its size (0x%lx)\n"
msgstr "Розділ %s має sh_entsize (0x%lx), що більше за його розмір (0x%lx)\n"
-#: readelf.c:7498
+#: readelf.c:7845
msgid "section data"
msgstr "дані розділу"
-#: readelf.c:7509
+#: readelf.c:7856
#, c-format
msgid ""
"\n"
@@ -8712,44 +8880,44 @@ msgstr ""
"\n"
"%sрозділ груп [%5u] «%s» [%s] міÑтить %u розділів:\n"
-#: readelf.c:7512
+#: readelf.c:7859
#, c-format
msgid " [Index] Name\n"
msgstr " [ІндекÑ] Ðазва\n"
-#: readelf.c:7530
+#: readelf.c:7877
#, c-format
msgid "section [%5u] in group section [%5u] > maximum section [%5u]\n"
msgstr "розділ [%5u] вже знаходитьÑÑ Ñƒ розділі груп [%5u] > макÑимальний розділ [%5u]\n"
-#: readelf.c:7533
+#: readelf.c:7880
msgid "Further error messages about overlarge group section indices suppressed\n"
msgstr "Подальші Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ помилки, пов'Ñзані із надто великим індекÑами розділу, придушено\n"
-#: readelf.c:7546
+#: readelf.c:7893
#, c-format
msgid "section [%5u] in group section [%5u] already in group section [%5u]\n"
msgstr "розділ [%5u] з розділу груп [%5u] вже знаходитьÑÑ Ñƒ розділі груп [%5u]\n"
-#: readelf.c:7550
+#: readelf.c:7897
msgid "Further error messages about already contained group sections suppressed\n"
msgstr "Подальші Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ помилки, пов'Ñзані із тим, що у файлі вже міÑÑ‚ÑÑ‚ÑŒÑÑ Ð³Ñ€ÑƒÐ¿Ð¾Ð²Ñ– розділи, придушено\n"
-#: readelf.c:7562
+#: readelf.c:7909
#, c-format
msgid "section 0 in group section [%5u]\n"
msgstr "розділ 0 у розділі груп [%5u]\n"
-#: readelf.c:7629
+#: readelf.c:7976
msgid "dynamic section image fixups"
msgstr "динамічний розділі прив'Ñзок образу"
-#: readelf.c:7637
+#: readelf.c:7984
#, c-format
msgid "corrupt library name index of 0x%lx found in dynamic entry"
msgstr "виÑвлено пошкоджений Ñ–Ð½Ð´ÐµÐºÑ Ð½Ð°Ð·Ð²Ð¸ бібліотеки 0x%lx у динамічному запиÑÑ–"
-#: readelf.c:7642
+#: readelf.c:7989
#, c-format
msgid ""
"\n"
@@ -8758,16 +8926,16 @@ msgstr ""
"\n"
"Прив'Ñзки образу Ð´Ð»Ñ Ð¿Ð¾Ñ‚Ñ€Ñ–Ð±Ð½Ð¾Ñ— бібліотеки %d: %s - ідент.: %lx\n"
-#: readelf.c:7645
+#: readelf.c:7992
#, c-format
msgid "Seg Offset Type SymVec DataType\n"
msgstr "Сег ЗÑув Тип СимВек ТипДаних\n"
-#: readelf.c:7679
+#: readelf.c:8026
msgid "dynamic section image relocations"
msgstr "переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¾Ð±Ñ€Ð°Ð·Ñƒ динамічного розділу"
-#: readelf.c:7683
+#: readelf.c:8030
#, c-format
msgid ""
"\n"
@@ -8776,16 +8944,16 @@ msgstr ""
"\n"
"ПереÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¾Ð±Ñ€Ð°Ð·Ñƒ\n"
-#: readelf.c:7685
+#: readelf.c:8032
#, c-format
msgid "Seg Offset Type Addend Seg Sym Off\n"
msgstr "Сег ЗÑув Тип Доданок Сег Сим ЗÑув\n"
-#: readelf.c:7742
+#: readelf.c:8089
msgid "dynamic string section"
msgstr "динамічний розділ Ñ€Ñдків"
-#: readelf.c:7845
+#: readelf.c:8193
#, c-format
msgid ""
"\n"
@@ -8794,7 +8962,7 @@ msgstr ""
"\n"
"У пов'Ñзаному файлі «%s», розділ «%s» зі зÑувом 0x%lx міÑтитьÑÑ %ld байтів:\n"
-#: readelf.c:7849
+#: readelf.c:8197
#, c-format
msgid ""
"\n"
@@ -8803,7 +8971,7 @@ msgstr ""
"\n"
"'%s' розділ переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ñ– зÑувом 0x%lx міÑтить %ld байт:\n"
-#: readelf.c:7870
+#: readelf.c:8218
#, c-format
msgid ""
"\n"
@@ -8812,7 +8980,7 @@ msgstr ""
"\n"
"У пов'Ñзаному файлі «%s» немає динамічних переÑувань.\n"
-#: readelf.c:7873
+#: readelf.c:8221
#, c-format
msgid ""
"\n"
@@ -8821,7 +8989,7 @@ msgstr ""
"\n"
"Ð’ цьому файлі немає динамічних переÑувань .\n"
-#: readelf.c:7899
+#: readelf.c:8248
#, c-format
msgid ""
"\n"
@@ -8830,7 +8998,7 @@ msgstr ""
"\n"
"У пов'Ñзаному файлі «%s» розділ переÑувань "
-#: readelf.c:7902
+#: readelf.c:8251
#, c-format
msgid ""
"\n"
@@ -8839,7 +9007,7 @@ msgstr ""
"\n"
"Розділ переÑÑƒÐ²Ð°Ð½Ð½Ñ "
-#: readelf.c:7910
+#: readelf.c:8259
#, c-format
msgid " at offset 0x%lx contains %lu entry:\n"
msgid_plural " at offset 0x%lx contains %lu entries:\n"
@@ -8848,7 +9016,7 @@ msgstr[1] " зі зÑувом 0x%lx міÑтить %lu запиÑи:\n"
msgstr[2] " зі зÑувом 0x%lx міÑтить %lu запиÑів:\n"
msgstr[3] " зі зÑувом 0x%lx міÑтить %lu запиÑ:\n"
-#: readelf.c:7959
+#: readelf.c:8308
#, c-format
msgid ""
"\n"
@@ -8857,7 +9025,7 @@ msgstr ""
"\n"
"У пов'Ñзаному файлі «%s» немає Ñтатичних переÑувань."
-#: readelf.c:7962
+#: readelf.c:8311
#, c-format
msgid ""
"\n"
@@ -8866,7 +9034,7 @@ msgstr ""
"\n"
"У цьому файлі немає Ñтатичних переÑувань."
-#: readelf.c:7963
+#: readelf.c:8312
#, c-format
msgid ""
"\n"
@@ -8875,7 +9043,7 @@ msgstr ""
"\n"
"Щоб переглÑнути динамічні переÑуваннÑ, додайте до Ñ€Ñдка команди параметр --use-dynamic.\n"
-#: readelf.c:7971
+#: readelf.c:8320
#, c-format
msgid ""
"\n"
@@ -8884,7 +9052,7 @@ msgstr ""
"\n"
"У пов'Ñзаному файлі «%s» немає переÑувань.\n"
-#: readelf.c:7974
+#: readelf.c:8323
#, c-format
msgid ""
"\n"
@@ -8893,50 +9061,50 @@ msgstr ""
"\n"
"Ð’ цьому файлі немає переÑувань.\n"
-#: readelf.c:8142
+#: readelf.c:8491
#, c-format
msgid "Invalid section %u in table entry %ld\n"
msgstr "Ðекоректний розділ %u у запиÑÑ– таблиці %ld\n"
-#: readelf.c:8154
+#: readelf.c:8503
#, c-format
msgid "Invalid offset %lx in table entry %ld\n"
msgstr "Ðекоректний зÑув %lx у запиÑÑ– таблиці %ld\n"
-#: readelf.c:8172
+#: readelf.c:8521
#, c-format
msgid "\tUnknown version.\n"
msgstr "\tÐевідома верÑÑ–Ñ.\n"
-#: readelf.c:8235 readelf.c:8669
+#: readelf.c:8584 readelf.c:9021
msgid "unwind table"
msgstr "розгорнута таблицÑ"
-#: readelf.c:8286 readelf.c:8752
+#: readelf.c:8635 readelf.c:9104
#, c-format
msgid "Skipping unknown relocation type: %u\n"
msgstr "ПропуÑкаємо невідомий тип переÑуваннÑ: %u\n"
-#: readelf.c:8292 readelf.c:8759
+#: readelf.c:8641 readelf.c:9111
#, c-format
msgid "Skipping unexpected relocation type: %s\n"
msgstr "ПропуÑкаєтьÑÑ Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð¸Ð¹ тип переÑуваннÑ: %s\n"
-#: readelf.c:8301 readelf.c:8766
+#: readelf.c:8650 readelf.c:9118
#, c-format
msgid "Skipping reloc with overlarge offset: %lx\n"
msgstr "ПропуÑкаємо переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ–Ð· надто великим зÑувом: %lx\n"
-#: readelf.c:8308 readelf.c:8773
+#: readelf.c:8657 readelf.c:9125
#, c-format
msgid "Skipping reloc with invalid symbol index: %u\n"
msgstr "ПропуÑкаємо переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ–Ð· некоректним індекÑом Ñимволу: %u\n"
-#: readelf.c:8356 readelf.c:8820 readelf.c:9928
+#: readelf.c:8705 readelf.c:9172 readelf.c:10282
msgid "Multiple symbol tables encountered\n"
msgstr "ВиÑвлено декілька таблиць Ñимволів\n"
-#: readelf.c:8371 readelf.c:8836 readelf.c:9943
+#: readelf.c:8720 readelf.c:9188 readelf.c:10297
#, c-format
msgid ""
"\n"
@@ -8945,7 +9113,7 @@ msgstr ""
"\n"
"В цьому файлі немає розгорнутих розділів.\n"
-#: readelf.c:8454
+#: readelf.c:8806
#, c-format
msgid ""
"\n"
@@ -8954,11 +9122,11 @@ msgstr ""
"\n"
"Ðе вдаєтьÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ розділ з розгорнутою інформацією длÑ"
-#: readelf.c:8466
+#: readelf.c:8818
msgid "unwind info"
msgstr "розгорнута інформаціÑ"
-#: readelf.c:8469
+#: readelf.c:8821
#, c-format
msgid ""
"\n"
@@ -8967,12 +9135,12 @@ msgstr ""
"\n"
"Розгорнутий розділ "
-#: readelf.c:8476
+#: readelf.c:8828
#, c-format
msgid " at offset 0x%lx contains %lu entries:\n"
msgstr " зі зÑувом 0x%lx міÑтить %lu пунктів:\n"
-#: readelf.c:8845 readelf.c:9950
+#: readelf.c:9197 readelf.c:10304
#, c-format
msgid ""
"\n"
@@ -8993,192 +9161,197 @@ msgstr[3] ""
"\n"
"Розділ Ñ€Ð¾Ð·Ð³Ð¾Ñ€Ñ‚Ð°Ð½Ð½Ñ Â«%s» за зÑувом 0x%lx міÑтить %lu запиÑ:\n"
-#: readelf.c:8978
+#: readelf.c:9330
msgid "unwind data"
msgstr "розгорнуті дані"
-#: readelf.c:9051
+#: readelf.c:9403
#, c-format
msgid "Skipping unexpected relocation at offset 0x%lx\n"
msgstr "ПропуÑкаємо неочікуване переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð° зÑувом 0x%lx\n"
-#: readelf.c:9073
+#: readelf.c:9425
#, c-format
msgid "Unknown section relocation type %d encountered\n"
msgstr "ВиÑвлено невідомий тип переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð² %d\n"
-#: readelf.c:9081
+#: readelf.c:9433
#, c-format
msgid "Bad symbol index in unwind relocation (%lu > %lu)\n"
msgstr "Помилковий Ñ–Ð½Ð´ÐµÐºÑ Ñимволу у переÑуванні Ñ€Ð¾Ð·Ð³Ð¾Ñ€Ñ‚Ð°Ð½Ð½Ñ (%lu > %lu)\n"
-#: readelf.c:9096
+#: readelf.c:9448
#, c-format
msgid "Skipping unknown ARM relocation type: %d\n"
msgstr "ПропуÑкаємо невідомий тип переÑÑƒÐ²Ð°Ð½Ð½Ñ ARM: %d\n"
-#: readelf.c:9106
+#: readelf.c:9458
#, c-format
msgid "Skipping unexpected ARM relocation type %s\n"
msgstr "ПропуÑкаєтьÑÑ Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð¸Ð¹ тип переÑÑƒÐ²Ð°Ð½Ð½Ñ ARM %s\n"
-#: readelf.c:9115
+#: readelf.c:9467
#, c-format
msgid "Skipping unknown C6000 relocation type: %d\n"
msgstr "ПропуÑкаємо невідомий тип переÑÑƒÐ²Ð°Ð½Ð½Ñ C6000: %d\n"
-#: readelf.c:9125
+#: readelf.c:9477
#, c-format
msgid "Skipping unexpected C6000 relocation type %s\n"
msgstr "ПропуÑкаєтьÑÑ Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð¸Ð¹ тип переÑÑƒÐ²Ð°Ð½Ð½Ñ C6000 %s\n"
#. This function currently only supports ARM and TI unwinders.
-#: readelf.c:9134
+#: readelf.c:9486
msgid "Only TI and ARM unwinders are currently supported\n"
msgstr "У поточній верÑÑ–Ñ— передбачено підтримку лише заÑобів Ñ€Ð¾Ð·Ð³Ð¾Ñ€Ñ‚Ð°Ð½Ð½Ñ TI Ñ– ARM\n"
-#: readelf.c:9197
+#: readelf.c:9549
#, c-format
msgid "[Truncated opcode]\n"
msgstr "[Обрізаний код операції]\n"
-#: readelf.c:9245 readelf.c:9461
+#: readelf.c:9597 readelf.c:9815
#, c-format
msgid "Refuse to unwind"
msgstr "Відмова у розгортанні"
-#: readelf.c:9268
+#: readelf.c:9620
#, c-format
msgid " [Reserved]"
msgstr " [Зарезервовано]"
-#: readelf.c:9296
+#: readelf.c:9648
#, c-format
msgid " finish"
msgstr " кінець"
-#: readelf.c:9301 readelf.c:9394
+#: readelf.c:9653 readelf.c:9748
#, c-format
msgid "[Spare]"
msgstr "[ЗапаÑ]"
-#: readelf.c:9335
+#: readelf.c:9687
msgid "corrupt change to vsp\n"
msgstr "пошкоджена зміна на vsp\n"
-#: readelf.c:9416 readelf.c:9573
+#: readelf.c:9713
+#, c-format
+msgid " pop {ra_auth_code}"
+msgstr " pop {ra_auth_code}"
+
+#: readelf.c:9770 readelf.c:9927
#, c-format
msgid " [unsupported opcode]"
msgstr " [непідтримуваний код операції]"
-#: readelf.c:9509
+#: readelf.c:9863
#, c-format
msgid "pop frame {"
msgstr "pop frame {"
-#: readelf.c:9512
+#: readelf.c:9866
#, c-format
msgid "*corrupt* - no registers specified"
msgstr "*пошкоджено* — не вказано регіÑтрів"
-#: readelf.c:9526
+#: readelf.c:9880
msgid "[pad]"
msgstr "[заповнювач]"
-#: readelf.c:9555
+#: readelf.c:9909
msgid "Corrupt stack pointer adjustment detected\n"
msgstr "ВиÑвлено пошкоджене ÐºÐ¾Ñ€Ð¸Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ð²ÐºÐ°Ð·Ñ–Ð²Ð½Ð¸ÐºÐ° Ñтека\n"
-#: readelf.c:9562
+#: readelf.c:9916
#, c-format
msgid "sp = sp + %ld"
msgstr "sp = sp + %ld"
-#: readelf.c:9637
+#: readelf.c:9991
#, c-format
msgid " Personality routine: "
msgstr " Підпрограма перÑоналізації: "
-#: readelf.c:9669
+#: readelf.c:10023
#, c-format
msgid " [Truncated data]\n"
msgstr " [Обрізані дані]\n"
-#: readelf.c:9693
+#: readelf.c:10047
#, c-format
msgid "Corrupt ARM compact model table entry: %x \n"
msgstr "Пошкоджений Ð·Ð°Ð¿Ð¸Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– компактної моделі ARM: %x \n"
-#: readelf.c:9698
+#: readelf.c:10052
#, c-format
msgid " Compact model index: %d\n"
msgstr " Ð†Ð½Ð´ÐµÐºÑ ÐºÐ¾Ð¼Ð¿Ð°ÐºÑ‚Ð½Ð¾Ñ— моделі: %d\n"
-#: readelf.c:9724
+#: readelf.c:10078
msgid "Unknown ARM compact model index encountered\n"
msgstr "ВиÑвлено невідомий Ñ–Ð½Ð´ÐµÐºÑ ÐºÐ¾Ð¼Ð¿Ð°ÐºÑ‚Ð½Ð¾Ñ— моделі ARM\n"
-#: readelf.c:9725
+#: readelf.c:10079
#, c-format
msgid " [reserved]\n"
msgstr " [зарезервовано]\n"
-#: readelf.c:9740
+#: readelf.c:10094
#, c-format
msgid " Restore stack from frame pointer\n"
msgstr " Відновити Ñтек на оÑнові вказівника кадру\n"
-#: readelf.c:9742
+#: readelf.c:10096
#, c-format
msgid " Stack increment %d\n"
msgstr " Крок Ð·Ð±Ñ–Ð»ÑŒÑˆÐµÐ½Ð½Ñ Ñтека %d\n"
-#: readelf.c:9743
+#: readelf.c:10097
#, c-format
msgid " Registers restored: "
msgstr " Відновлено регіÑтри: "
-#: readelf.c:9748
+#: readelf.c:10102
#, c-format
msgid " Return register: %s\n"
msgstr " РегіÑÑ‚Ñ€ поверненнÑ: %s\n"
-#: readelf.c:9752
+#: readelf.c:10106
#, c-format
msgid " [reserved (%d)]\n"
msgstr " [зарезервовано (%d)]\n"
-#: readelf.c:9756
+#: readelf.c:10110
#, c-format
msgid "Unsupported architecture type %d encountered when decoding unwind table\n"
msgstr "Під Ñ‡Ð°Ñ Ð´ÐµÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– розгортань виÑвлено непідтримуваний тип архітектури %d\n"
-#: readelf.c:9811
+#: readelf.c:10165
#, c-format
msgid "corrupt index table entry: %x\n"
msgstr "пошкоджено Ð·Ð°Ð¿Ð¸Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– індекÑів: %x\n"
-#: readelf.c:9851
+#: readelf.c:10205
#, c-format
msgid "Unwind entry contains corrupt offset (0x%lx) into section %s\n"
msgstr "Розгорнутий Ð·Ð°Ð¿Ð¸Ñ Ð¼Ñ–Ñтить пошкоджений зÑув (0x%lx) у розділ %s\n"
-#: readelf.c:9867
+#: readelf.c:10221
#, c-format
msgid "Could not locate .ARM.extab section containing 0x%lx.\n"
msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ .ARM.extab, що міÑтить 0x%lx.\n"
-#: readelf.c:9911
+#: readelf.c:10265
#, c-format
msgid "Unsupported architecture type %d encountered when processing unwind table\n"
msgstr "Під Ñ‡Ð°Ñ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ таблиці розгортань виÑвлено непідтримуваний тип архітектури %d\n"
-#: readelf.c:9973
+#: readelf.c:10327
#, c-format
msgid "No processor specific unwind information to decode\n"
msgstr "Ðемає Ñпецифічних Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑора даних unwind Ð´Ð»Ñ Ð´ÐµÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ\n"
-#: readelf.c:10003
+#: readelf.c:10357
#, c-format
msgid ""
"\n"
@@ -9187,79 +9360,79 @@ msgstr ""
"\n"
"У поточній верÑÑ–Ñ— не передбачено Ð´ÐµÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð² Ñ€Ð¾Ð·Ð³Ð¾Ñ€Ñ‚Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ð¼Ð°ÑˆÐ¸Ð½ типу %s.\n"
-#: readelf.c:10030
+#: readelf.c:10384
#, c-format
msgid "NONE"
msgstr "ÐІЧОГО"
-#: readelf.c:10055
+#: readelf.c:10409
#, c-format
msgid "Interface Version: %s"
msgstr "ВерÑÑ–Ñ Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñу: %s"
#. Note: coded this way so that there is a single string for translation.
-#: readelf.c:10062
+#: readelf.c:10416
#, c-format
msgid "<corrupt: %s>"
msgstr "<пошкоджено: %s>"
-#: readelf.c:10080
+#: readelf.c:10434
#, c-format
msgid "Time Stamp: %s"
msgstr "ЧаÑова позначка: %s"
-#: readelf.c:10274 readelf.c:10324
+#: readelf.c:10628 readelf.c:10678
msgid "dynamic section"
msgstr "динамічний розділ"
-#: readelf.c:10294 readelf.c:10345
+#: readelf.c:10648 readelf.c:10699
#, c-format
msgid "Out of memory allocating space for %lu dynamic entries\n"
msgstr "Бракує пам'ÑÑ‚Ñ– при розподілі міÑÑ†Ñ Ð´Ð»Ñ %lu динамічних запиÑів\n"
-#: readelf.c:10419
+#: readelf.c:10773
#, c-format
msgid "Size truncation prevents reading %s elements of size %u\n"
msgstr "ÐžÐ±Ñ€Ñ–Ð·Ð°Ð½Ð½Ñ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ заважає читанню %s елементів розміру %u\n"
-#: readelf.c:10428
+#: readelf.c:10782
#, c-format
msgid "Invalid number of dynamic entries: %s\n"
msgstr "Ðекоректна кількіÑÑ‚ÑŒ динамічних запиÑів: %s\n"
-#: readelf.c:10436
+#: readelf.c:10790
#, c-format
msgid "Out of memory reading %s dynamic entries\n"
msgstr "Бракує пам'ÑÑ‚Ñ– при читанні %s динамічних запиÑів\n"
-#: readelf.c:10443
+#: readelf.c:10797
#, c-format
msgid "Unable to read in %s bytes of dynamic data\n"
msgstr "Ðе вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ %s байтів у динамічних даних\n"
-#: readelf.c:10452
+#: readelf.c:10806
#, c-format
msgid "Out of memory allocating space for %s dynamic entries\n"
msgstr "Бракує пам'ÑÑ‚Ñ– при розподілі міÑÑ†Ñ Ð´Ð»Ñ %s динамічних запиÑів\n"
-#: readelf.c:10492 readelf.c:10546 readelf.c:10570 readelf.c:10603
-#: readelf.c:10629 readelf.c:10648
+#: readelf.c:10846 readelf.c:10900 readelf.c:10924 readelf.c:10957
+#: readelf.c:10983 readelf.c:11002
msgid "Unable to seek to start of dynamic information\n"
msgstr "Ðеможливо перейти до початку динамічної інформації\n"
-#: readelf.c:10498 readelf.c:10552
+#: readelf.c:10852 readelf.c:10906
msgid "Failed to read in number of buckets\n"
msgstr "Помилка при читанні кількоÑÑ‚Ñ– облаÑтей пам'ÑÑ‚Ñ–\n"
-#: readelf.c:10504
+#: readelf.c:10858
msgid "Failed to read in number of chains\n"
msgstr "Помилка при читанні кількоÑÑ‚Ñ– ланцюжків\n"
-#: readelf.c:10611
+#: readelf.c:10965
msgid "Failed to determine last chain length\n"
msgstr "Помилка при читанні кількоÑÑ‚Ñ– ланцюжків\n"
-#: readelf.c:10711
+#: readelf.c:11065
#, c-format
msgid ""
"\n"
@@ -9268,7 +9441,7 @@ msgstr ""
"\n"
"У пов'Ñзаному файлі «%s» немає динамічного розділу.\n"
-#: readelf.c:10714
+#: readelf.c:11068
#, c-format
msgid ""
"\n"
@@ -9278,165 +9451,171 @@ msgstr ""
"В цьому файлі немає динамічного розділу.\n"
#. See PR 21379 for a reproducer.
-#: readelf.c:10774
+#: readelf.c:11128
msgid "Invalid PT_LOAD entry\n"
msgstr "Ðекоректний Ð·Ð°Ð¿Ð¸Ñ PT_LOAD\n"
-#: readelf.c:10800
+#: readelf.c:11154
msgid "the .dynsym section doesn't match the DT_SYMTAB and DT_SYMENT tags\n"
msgstr "розділ .dynsym не відповідає міткам DT_SYMTAB і DT_SYMENT\n"
-#: readelf.c:10810
+#: readelf.c:11164
msgid "Corrupt DT_SYMTAB dynamic entry\n"
msgstr "Пошкоджений динамічний Ð·Ð°Ð¿Ð¸Ñ DT_SYMTAB\n"
-#: readelf.c:10846
+#: readelf.c:11200
msgid "the .dynstr section doesn't match the DT_STRTAB and DT_STRSZ tags\n"
msgstr "розділ .dynstr не відповідає міткам DT_STRTAB і DT_STRSZ\n"
-#: readelf.c:10851
+#: readelf.c:11205
msgid "dynamic string table"
msgstr "Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¸Ñ… Ñ€Ñдків"
-#: readelf.c:10854
+#: readelf.c:11208
msgid "Corrupt DT_STRTAB dynamic entry\n"
msgstr "Пошкоджений динамічний Ð·Ð°Ð¿Ð¸Ñ DT_STRTAB\n"
-#: readelf.c:10879
+#: readelf.c:11233
#, c-format
msgid "Bad value (%d) for SYMINENT entry\n"
msgstr "Помилкове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ (%d) Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу SYMINENT\n"
-#: readelf.c:10898
+#: readelf.c:11252
msgid "symbol information"
msgstr "Ñ–Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ Ð¿Ñ€Ð¾ Ñимвол"
-#: readelf.c:10904
+#: readelf.c:11258
msgid "Multiple dynamic symbol information sections found\n"
msgstr "ВиÑвлено декілька розділів даних щодо динамічних Ñимволів\n"
-#: readelf.c:10910
+#: readelf.c:11264
#, c-format
msgid "Out of memory allocating %lu bytes for dynamic symbol info\n"
msgstr "Бракує пам'ÑÑ‚Ñ– на Ñ€Ð¾Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ %lu байтів Ð´Ð»Ñ Ð´Ð°Ð½Ð¸Ñ… щодо динамічних Ñимволів\n"
-#: readelf.c:10936
+#: readelf.c:11288
#, c-format
msgid ""
"\n"
-"In linked file '%s' the dynamic section at offset 0x%lx contains 1 entry:\n"
-msgstr ""
+"In linked file '%s' the dynamic section at offset 0x%lx contains %lu entry:\n"
+msgid_plural ""
"\n"
-"У пов'Ñзаному файлі «%s» динамічний розділ із зÑувом 0x%lx міÑтить один запиÑ:\n"
-
-#: readelf.c:10940
-#, c-format
-msgid ""
+"In linked file '%s' the dynamic section at offset 0x%lx contains %lu entries:\n"
+msgstr[0] ""
"\n"
-"Dynamic section at offset 0x%lx contains 1 entry:\n"
-msgstr ""
+"У пов'Ñзаному файлі «%s» динамічний розділ із зÑувом 0x%lx міÑтить %lu запиÑів:\n"
+msgstr[1] ""
"\n"
-"Динамічний розділ із зÑувом 0x%lx міÑтить один запиÑ:\n"
-
-#: readelf.c:10946
-#, c-format
-msgid ""
+"У пов'Ñзаному файлі «%s» динамічний розділ із зÑувом 0x%lx міÑтить %lu запиÑів:\n"
+msgstr[2] ""
"\n"
-"In linked file '%s' the dynamic section at offset 0x%lx contains %lu entries:\n"
-msgstr ""
+"У пов'Ñзаному файлі «%s» динамічний розділ із зÑувом 0x%lx міÑтить %lu запиÑів:\n"
+msgstr[3] ""
"\n"
"У пов'Ñзаному файлі «%s» динамічний розділ із зÑувом 0x%lx міÑтить %lu запиÑів:\n"
-#: readelf.c:10951
+#: readelf.c:11295
#, c-format
msgid ""
"\n"
+"Dynamic section at offset 0x%lx contains %lu entry:\n"
+msgid_plural ""
+"\n"
"Dynamic section at offset 0x%lx contains %lu entries:\n"
-msgstr ""
+msgstr[0] ""
+"\n"
+"Динамічний розділ із зÑувом 0x%lx міÑтить %lu запиÑ:\n"
+msgstr[1] ""
+"\n"
+"Динамічний розділ із зÑувом 0x%lx міÑтить %lu запиÑів:\n"
+msgstr[2] ""
+"\n"
+"Динамічний розділ із зÑувом 0x%lx міÑтить %lu запиÑів:\n"
+msgstr[3] ""
"\n"
"Динамічний розділ із зÑувом 0x%lx міÑтить %lu запиÑів:\n"
-#: readelf.c:10957
+#: readelf.c:11302
#, c-format
msgid " Tag Type Name/Value\n"
msgstr " Тег Тип Ðазва/ЗначеннÑ\n"
-#: readelf.c:10991
+#: readelf.c:11336
#, c-format
msgid "Auxiliary library"
msgstr "Допоміжна бібліотека"
-#: readelf.c:10995
+#: readelf.c:11340
#, c-format
msgid "Filter library"
msgstr "Бібліотека фільтрів"
-#: readelf.c:10999
+#: readelf.c:11344
#, c-format
msgid "Configuration file"
msgstr "Файл налаштовуваннÑ"
-#: readelf.c:11003
+#: readelf.c:11348
#, c-format
msgid "Dependency audit library"
msgstr "Бібліотека аудиту залежноÑтей"
-#: readelf.c:11007
+#: readelf.c:11352
#, c-format
msgid "Audit library"
msgstr "Бібліотека аудиту"
-#: readelf.c:11026 readelf.c:11054 readelf.c:11082 readelf.c:11417
+#: readelf.c:11371 readelf.c:11399 readelf.c:11427 readelf.c:11767
#, c-format
msgid "Flags:"
msgstr "Ознаки:"
-#: readelf.c:11029 readelf.c:11057 readelf.c:11084 readelf.c:11419
+#: readelf.c:11374 readelf.c:11402 readelf.c:11429 readelf.c:11769
#, c-format
msgid " None\n"
msgstr " Ðемає\n"
-#: readelf.c:11290
+#: readelf.c:11636
#, c-format
msgid "Shared library: [%s]"
msgstr "Спільна бібліотека: [%s]"
-#: readelf.c:11294
+#: readelf.c:11640
#, c-format
msgid " program interpreter"
msgstr " інтерпретатор програми"
-#: readelf.c:11298
+#: readelf.c:11644
#, c-format
msgid "Library soname: [%s]"
msgstr "Бібліотека soname: [%s]"
-#: readelf.c:11302
+#: readelf.c:11648
#, c-format
msgid "Library rpath: [%s]"
msgstr "Бібліотека rpath: [%s]"
-#: readelf.c:11306
+#: readelf.c:11652
#, c-format
msgid "Library runpath: [%s]"
msgstr "Бібліотека runpath: [%s]"
-#: readelf.c:11340
+#: readelf.c:11689
#, c-format
msgid " (bytes)\n"
msgstr " (байтів)\n"
-#: readelf.c:11370
+#: readelf.c:11720
#, c-format
msgid "Not needed object: [%s]\n"
msgstr "Ðепотрібний об'єкт: [%s]\n"
-#: readelf.c:11395
+#: readelf.c:11745
#, c-format
msgid "<corrupt time val: %lx"
msgstr "<пошкоджено Ð·Ð°Ð¿Ð¸Ñ Ñ‡Ð°Ñу: %lx"
-#: readelf.c:11538
+#: readelf.c:11888
#, c-format
msgid ""
"\n"
@@ -9457,7 +9636,7 @@ msgstr[3] ""
"\n"
"У пов'Ñзаному файлі «%s» розділ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²ÐµÑ€ÑÑ–Ñ—, «%s», міÑтить %u запиÑ:\n"
-#: readelf.c:11545
+#: readelf.c:11895
#, c-format
msgid ""
"\n"
@@ -9478,71 +9657,71 @@ msgstr[3] ""
"\n"
"Розділ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²ÐµÑ€ÑÑ–Ñ—, «%s», міÑтить %u запиÑ:\n"
-#: readelf.c:11553 readelf.c:11700 readelf.c:11866
+#: readelf.c:11903 readelf.c:12050 readelf.c:12216
#, c-format
msgid " Addr: 0x"
msgstr " ÐдреÑа: 0x"
-#: readelf.c:11555 readelf.c:11702 readelf.c:11868
+#: readelf.c:11905 readelf.c:12052 readelf.c:12218
#, c-format
msgid " Offset: %#08lx Link: %u (%s)\n"
msgstr " ЗÑув: %#08lx Зв'Ñзок: %u (%s)\n"
-#: readelf.c:11561
+#: readelf.c:11911
msgid "version definition section"
msgstr "розділ опиÑу верÑÑ–Ñ—"
-#: readelf.c:11590
+#: readelf.c:11940
#, c-format
msgid " %#06lx: Rev: %d Flags: %s"
msgstr " %#06lx: ВипуÑк: %d Прапорці: %s"
-#: readelf.c:11593
+#: readelf.c:11943
#, c-format
msgid " Index: %d Cnt: %d "
msgstr " ІндекÑ: %d Лічильник: %d "
-#: readelf.c:11610
+#: readelf.c:11960
#, c-format
msgid "Name: %s\n"
msgstr "Ðазва: %s\n"
-#: readelf.c:11613
+#: readelf.c:11963
#, c-format
msgid "Name index: %ld\n"
msgstr "Ð†Ð½Ð´ÐµÐºÑ Ð½Ð°Ð·Ð²Ð¸: %ld\n"
-#: readelf.c:11622
+#: readelf.c:11972
#, c-format
msgid "Invalid vda_next field of %lx\n"
msgstr "Ðекоректне поле vda_next %lx\n"
-#: readelf.c:11642
+#: readelf.c:11992
#, c-format
msgid " %#06lx: Parent %d: %s\n"
msgstr " %#06lx: Батько %d: %s\n"
-#: readelf.c:11646
+#: readelf.c:11996
#, c-format
msgid " %#06lx: Parent %d, name index: %ld\n"
msgstr " %#06lx: Батько %d, Ñ–Ð½Ð´ÐµÐºÑ Ð½Ð°Ð·Ð²Ð¸: %ld\n"
-#: readelf.c:11651
+#: readelf.c:12001
#, c-format
msgid " Version def aux past end of section\n"
msgstr " ВерÑÑ–Ñ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð¾Ð¿Ð¾Ð¼Ñ–Ð¶Ð½Ð¸Ñ… даних піÑÐ»Ñ ÐºÑ–Ð½Ñ†Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ\n"
-#: readelf.c:11658
+#: readelf.c:12008
#, c-format
msgid "Invalid vd_next field of %lx\n"
msgstr "Ðекоректне поле vd_next %lx\n"
-#: readelf.c:11669
+#: readelf.c:12019
#, c-format
msgid " Version definition past end of section\n"
msgstr " Ð’Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²ÐµÑ€ÑÑ–Ñ— за кінцем розділу\n"
-#: readelf.c:11685
+#: readelf.c:12035
#, c-format
msgid ""
"\n"
@@ -9563,7 +9742,7 @@ msgstr[3] ""
"\n"
"У пов'Ñзаному файлі «%s» розділ залежноÑтей верÑÑ–Ñ— «%s» міÑтить %u запиÑ:\n"
-#: readelf.c:11692
+#: readelf.c:12042
#, c-format
msgid ""
"\n"
@@ -9584,68 +9763,68 @@ msgstr[3] ""
"\n"
"Розділ залежноÑтей верÑÑ–Ñ— «%s» міÑтить %u запиÑ:\n"
-#: readelf.c:11709
+#: readelf.c:12059
msgid "Version Needs section"
msgstr "Розділ залежноÑтей верÑÑ–Ñ—"
-#: readelf.c:11734
+#: readelf.c:12084
#, c-format
msgid " %#06lx: Version: %d"
msgstr " %#06lx: ВерÑÑ–Ñ: %d"
-#: readelf.c:11737
+#: readelf.c:12087
#, c-format
msgid " File: %s"
msgstr " Файл: %s"
-#: readelf.c:11740
+#: readelf.c:12090
#, c-format
msgid " File: %lx"
msgstr " Файл: %lx"
-#: readelf.c:11742
+#: readelf.c:12092
#, c-format
msgid " Cnt: %d\n"
msgstr " Лічильник: %d\n"
-#: readelf.c:11765
+#: readelf.c:12115
#, c-format
msgid " %#06lx: Name: %s"
msgstr " %#06lx: Ðазва: %s"
-#: readelf.c:11768
+#: readelf.c:12118
#, c-format
msgid " %#06lx: Name index: %lx"
msgstr " %#06lx: Ð†Ð½Ð´ÐµÐºÑ Ð½Ð°Ð·Ð²Ð¸: %lx"
-#: readelf.c:11771
+#: readelf.c:12121
#, c-format
msgid " Flags: %s Version: %d\n"
msgstr " Ознаки: %s ВерÑÑ–Ñ: %d\n"
-#: readelf.c:11777
+#: readelf.c:12127
#, c-format
msgid "Invalid vna_next field of %lx\n"
msgstr "Ðекоректне поле vna_next %lx\n"
-#: readelf.c:11790
+#: readelf.c:12140
msgid "Missing Version Needs auxiliary information\n"
msgstr "Ðе виÑтачає допоміжних даних щодо залежноÑтей за верÑÑ–Ñми\n"
-#: readelf.c:11795
+#: readelf.c:12145
#, c-format
msgid "Invalid vn_next field of %lx\n"
msgstr "Ðекоректне поле vn_next %lx\n"
-#: readelf.c:11805
+#: readelf.c:12155
msgid "Missing Version Needs information\n"
msgstr "Ðе виÑтачає даних щодо залежноÑтей за верÑÑ–Ñми\n"
-#: readelf.c:11843
+#: readelf.c:12193
msgid "version string table"
msgstr "Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ñ€Ñдків верÑÑ–Ñ—"
-#: readelf.c:11851
+#: readelf.c:12201
#, c-format
msgid ""
"\n"
@@ -9666,7 +9845,7 @@ msgstr[3] ""
"\n"
"У пов'Ñзаному файлі «%s» розділ Ñимволів верÑÑ–Ñ— «%s» міÑтить %lu запиÑ:\n"
-#: readelf.c:11858
+#: readelf.c:12208
#, c-format
msgid ""
"\n"
@@ -9687,47 +9866,47 @@ msgstr[3] ""
"\n"
"Розділ Ñимволів верÑÑ–Ñ— «%s» міÑтить %lu запиÑ:\n"
-#: readelf.c:11877
+#: readelf.c:12227
msgid "version symbol data"
msgstr "дані Ñимволу верÑÑ–Ñ—"
-#: readelf.c:11897
+#: readelf.c:12247
msgid "*invalid*"
msgstr "*некоректний*"
-#: readelf.c:11905
+#: readelf.c:12255
msgid " 0 (*local*) "
msgstr " 0 (*локальна*) "
-#: readelf.c:11909
+#: readelf.c:12259
msgid " 1 (*global*) "
msgstr " 1 (*глобальна*) "
-#: readelf.c:11920
+#: readelf.c:12270
msgid "invalid index into symbol array\n"
msgstr "некоректний Ñ–Ð½Ð´ÐµÐºÑ Ñƒ маÑиві Ñимволів\n"
-#: readelf.c:11943 readelf.c:12515
+#: readelf.c:12293 readelf.c:12890
msgid "version need"
msgstr "залежніÑÑ‚ÑŒ верÑÑ–Ñ—"
-#: readelf.c:11954
+#: readelf.c:12304
msgid "version need aux (2)"
msgstr "залежніÑÑ‚ÑŒ верÑÑ–Ñ— aux (2)"
-#: readelf.c:12001 readelf.c:12459
+#: readelf.c:12351 readelf.c:12834
msgid "version def"
msgstr "Ð¾Ð¿Ð¸Ñ Ð²ÐµÑ€ÑÑ–Ñ—"
-#: readelf.c:12029 readelf.c:12490
+#: readelf.c:12379 readelf.c:12865
msgid "version def aux"
msgstr "Ð¾Ð¿Ð¸Ñ Ð²ÐµÑ€ÑÑ–Ñ— aux"
-#: readelf.c:12037
+#: readelf.c:12387
msgid "*both*"
msgstr "*обидва*"
-#: readelf.c:12069
+#: readelf.c:12419
#, c-format
msgid ""
"\n"
@@ -9736,7 +9915,7 @@ msgstr ""
"\n"
"У пов'Ñзаному файлі «%s» не знайдено даних щодо верÑÑ–Ñ—.\n"
-#: readelf.c:12072
+#: readelf.c:12422
#, c-format
msgid ""
"\n"
@@ -9745,70 +9924,74 @@ msgstr ""
"\n"
"Ð’ цьому файлі не знайдено інформацію про верÑÑ–Ñ—.\n"
-#: readelf.c:12168
+#: readelf.c:12518
#, c-format
msgid "Unrecognized visibility value: %u\n"
msgstr "Ðерозпізнане Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð¸Ð´Ð¸Ð¼Ð¾ÑÑ‚Ñ–: %u\n"
-#: readelf.c:12181
+#: readelf.c:12531
#, c-format
msgid "Unrecognized alpha specific other value: %u\n"
msgstr "Ðевідоме Ñпецифічне Ð´Ð»Ñ alpha інше значеннÑ: %u\n"
-#: readelf.c:12258
+#: readelf.c:12608
#, c-format
msgid "Unrecognized IA64 VMS ST Function type: %d\n"
msgstr "Ðерозпізнаний тип функції ST VMS IA64: %d\n"
-#: readelf.c:12282
+#: readelf.c:12632
#, c-format
msgid "Unrecognized IA64 VMS ST Linkage: %d\n"
msgstr "Ðерозпізнане ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ ST VMS IA64: %d\n"
-#: readelf.c:12308
+#: readelf.c:12658
#, c-format
msgid "<localentry>: %d"
msgstr "<локальний вхід>: %d"
-#: readelf.c:12348
+#: readelf.c:12672
+msgid " VARIANT_CC"
+msgstr " VARIANT_CC"
+
+#: readelf.c:12723
#, c-format
msgid "<other>: %x"
msgstr "<інше>: %x"
-#: readelf.c:12388
+#: readelf.c:12763
#, c-format
msgid "bad section index[%3d]"
msgstr "помилковий Ñ–Ð½Ð´ÐµÐºÑ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ[%3d]"
-#: readelf.c:12421
+#: readelf.c:12796
msgid "version data"
msgstr "дані верÑÑ–Ñ—"
-#: readelf.c:12533
+#: readelf.c:12908
msgid "version need aux (3)"
msgstr "залежніÑÑ‚ÑŒ верÑÑ–Ñ— aux (3)"
-#: readelf.c:12683
+#: readelf.c:13062
#, c-format
msgid "local symbol %lu found at index >= %s's sh_info value of %u\n"
msgstr "локальний Ñимвол %lu, знайдений за індекÑом >= Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ sh_info %s, %u\n"
-#: readelf.c:12702
+#: readelf.c:13081
#, c-format
msgid "Unknown LTO symbol definition encountered: %u\n"
msgstr "ВиÑвлено невідоме Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñимволу LTO: %u\n"
-#: readelf.c:12721
+#: readelf.c:13100
#, c-format
msgid "Unknown LTO symbol visibility encountered: %u\n"
msgstr "ВиÑвлено невідому видиміÑÑ‚ÑŒ Ñимволу LTO: %u\n"
-#: readelf.c:12739
+#: readelf.c:13118
#, c-format
msgid "Unknown LTO symbol type encountered: %u\n"
msgstr "ВиÑвлено невідомий тип Ñимволу LTO: %u\n"
-#: readelf.c:12755
+#: readelf.c:13134
#, c-format
msgid ""
"\n"
@@ -9817,7 +10000,7 @@ msgstr ""
"\n"
"Розділ таблиці Ñимволів LTO «%s» у пов'Ñзаному файлі «%s» Ñ” порожнім!\n"
-#: readelf.c:12759
+#: readelf.c:13138
#, c-format
msgid ""
"\n"
@@ -9826,24 +10009,24 @@ msgstr ""
"\n"
"Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ñимволів LTO «%s» Ñ” порожньою!\n"
-#: readelf.c:12774
+#: readelf.c:13153
msgid "LTO symbols"
msgstr "Ñимволи LTO"
-#: readelf.c:12791
+#: readelf.c:13171
#, c-format
msgid "LTO Symbol extension table '%s' is empty!\n"
msgstr "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½ÑŒ Ñимволів LTO «%s» Ñ” порожньою!\n"
-#: readelf.c:12797
+#: readelf.c:13177
msgid "LTO ext symbol data"
msgstr "Дані розширень Ñимволів LTO"
-#: readelf.c:12802
+#: readelf.c:13182
msgid "Unexpected version number in symbol extension table\n"
msgstr "Ðеочікуваний номер верÑÑ–Ñ— у таблиці розширень Ñимволів\n"
-#: readelf.c:12811
+#: readelf.c:13191
#, c-format
msgid ""
"\n"
@@ -9852,49 +10035,49 @@ msgstr ""
"\n"
"У пов'Ñзаному файлі «%s»: "
-#: readelf.c:12818
+#: readelf.c:13198
#, c-format
msgid "LTO Symbol table '%s' and extension table '%s' contain:\n"
msgstr "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ñимволів LTO «%s» Ñ– Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½ÑŒ «%s» міÑÑ‚ÑÑ‚ÑŒ таке:\n"
-#: readelf.c:12823
+#: readelf.c:13203
#, c-format
msgid "LTO Symbol table '%s'\n"
msgstr "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ñимволів LTO «%s»\n"
-#: readelf.c:12825
+#: readelf.c:13205
#, c-format
msgid " and extension table '%s' contain:\n"
msgstr " Ñ– Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½ÑŒ «%s» міÑÑ‚ÑÑ‚ÑŒ таке:\n"
-#: readelf.c:12830
+#: readelf.c:13210
#, c-format
msgid "LTO Symbol table '%s' contains:\n"
msgstr "У таблиці Ñимволів LTO «%s» міÑтитьÑÑ Ñ‚Ð°ÐºÐµ:\n"
-#: readelf.c:12835
+#: readelf.c:13215
#, c-format
msgid " Comdat_Key Kind Visibility Size Slot Type Section Name\n"
msgstr " Ключ_Comdat Тип ВидиміÑÑ‚ÑŒ Розмір Слот Тип Ðазва розділу\n"
-#: readelf.c:12837
+#: readelf.c:13217
#, c-format
msgid " Comdat_Key Kind Visibility Size Slot Name\n"
msgstr " Ключ_Comdat Тип ВидиміÑÑ‚ÑŒ Розмір Слот Ðазва\n"
-#: readelf.c:12884
+#: readelf.c:13264
msgid "Ran out of LTO symbol extension data\n"
msgstr "Вичерпано дані розширень Ñимволів LTO\n"
-#: readelf.c:12904
+#: readelf.c:13284
msgid "Data remains in the LTO symbol extension table\n"
msgstr "Залишки даних у таблиці розширень Ñимволів LTO\n"
-#: readelf.c:12914
+#: readelf.c:13294
msgid "Buffer overrun encountered whilst decoding LTO symbol table\n"
msgstr "СталоÑÑ Ð²Ð¸Ñ‡ÐµÑ€Ð¿Ð°Ð½Ð½Ñ Ð±ÑƒÑ„ÐµÑ€Ð° під Ñ‡Ð°Ñ Ð´ÐµÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ñимволів LTO\n"
-#: readelf.c:12966
+#: readelf.c:13346
#, c-format
msgid ""
"\n"
@@ -9915,7 +10098,7 @@ msgstr[3] ""
"\n"
"У пов'Ñзаному файлі «%s» Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¸Ñ… Ñимволів міÑтить %lu запиÑ:\n"
-#: readelf.c:12974
+#: readelf.c:13354
#, c-format
msgid ""
"\n"
@@ -9936,17 +10119,17 @@ msgstr[3] ""
"\n"
"Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ñимволів Ð´Ð»Ñ Ð¾Ð±Ñ€Ð°Ð·Ñƒ міÑтить %lu запиÑ:\n"
-#: readelf.c:12980 readelf.c:13033
+#: readelf.c:13360 readelf.c:13413
#, c-format
msgid " Num: Value Size Type Bind Vis Ndx Name\n"
msgstr " ЧиÑ: Знач Розм Тип Зв'Ñз Vis Ð†Ð½Ð´ÐµÐºÑ Ð½Ð°Ð·Ð²Ð¸\n"
-#: readelf.c:12982 readelf.c:13035
+#: readelf.c:13362 readelf.c:13415
#, c-format
msgid " Num: Value Size Type Bind Vis Ndx Name\n"
msgstr " ЧиÑ: Знач Розм Тип Зв'Ñз Vis Ð†Ð½Ð´ÐµÐºÑ Ð½Ð°Ð·Ð²Ð¸\n"
-#: readelf.c:13011
+#: readelf.c:13391
#, c-format
msgid ""
"\n"
@@ -9955,7 +10138,7 @@ msgstr ""
"\n"
"sh_entsize таблиці Ñимволів «%s» Ñ” нульовим!\n"
-#: readelf.c:13019
+#: readelf.c:13399
#, c-format
msgid ""
"\n"
@@ -9976,7 +10159,7 @@ msgstr[3] ""
"\n"
"У пов'Ñзаному файлі «%s» розділ Ñимволів «%s» міÑтить %lu запиÑ:\n"
-#: readelf.c:13026
+#: readelf.c:13406
#, c-format
msgid ""
"\n"
@@ -9997,7 +10180,7 @@ msgstr[3] ""
"\n"
"Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ñимволів «%s» міÑтить %lu запиÑ:\n"
-#: readelf.c:13069
+#: readelf.c:13449
#, c-format
msgid ""
"\n"
@@ -10006,7 +10189,7 @@ msgstr ""
"\n"
"Ð†Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ Ñимволу не доÑтупна Ð´Ð»Ñ Ð²Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ñимволів.\n"
-#: readelf.c:13082
+#: readelf.c:13462
#, c-format
msgid ""
"\n"
@@ -10027,24 +10210,24 @@ msgstr[3] ""
"\n"
"ГіÑтограма довжини ÑпиÑку облаÑтей пам'ÑÑ‚Ñ– (вÑього %lu облаÑÑ‚ÑŒ):\n"
-#: readelf.c:13093
+#: readelf.c:13473
msgid "Out of memory allocating space for histogram buckets\n"
msgstr "Бракує пам'ÑÑ‚Ñ– при розподілі міÑÑ†Ñ Ð´Ð»Ñ Ð±Ð»Ð¾ÐºÑ–Ð² гіÑтограми\n"
-#: readelf.c:13099 readelf.c:13177
+#: readelf.c:13479 readelf.c:13557
#, c-format
msgid " Length Number %% of total Coverage\n"
msgstr " Довжина ЧиÑло %% від уÑÑ–Ñ… ОхопленнÑ\n"
-#: readelf.c:13109
+#: readelf.c:13489
msgid "histogram chain is corrupt\n"
msgstr "ланцюжок гіÑтограми пошкоджено\n"
-#: readelf.c:13121
+#: readelf.c:13501
msgid "Out of memory allocating space for histogram counts\n"
msgstr "Бракує пам'ÑÑ‚Ñ– при розподілі міÑÑ†Ñ Ð´Ð»Ñ ÐºÑ–Ð»ÑŒÐºÑ–Ñних даних гіÑтограми\n"
-#: readelf.c:13161
+#: readelf.c:13541
#, c-format
msgid ""
"\n"
@@ -10065,15 +10248,15 @@ msgstr[3] ""
"\n"
"ГіÑтограма довжини ÑпиÑку облаÑтей пам'ÑÑ‚Ñ– «%s» (вÑього %lu облаÑÑ‚ÑŒ):\n"
-#: readelf.c:13173
+#: readelf.c:13553
msgid "Out of memory allocating space for gnu histogram buckets\n"
msgstr "Бракує пам'ÑÑ‚Ñ– при розподілі міÑÑ†Ñ Ð´Ð»Ñ Ð±Ð»Ð¾ÐºÑ–Ð² гіÑтограми gnu\n"
-#: readelf.c:13200
+#: readelf.c:13580
msgid "Out of memory allocating space for gnu histogram counts\n"
msgstr "Бракує пам'ÑÑ‚Ñ– при розподілі міÑÑ†Ñ Ð´Ð»Ñ ÐºÑ–Ð»ÑŒÐºÑ–Ñних даних гіÑтограми gnu\n"
-#: readelf.c:13266
+#: readelf.c:13646
#, c-format
msgid ""
"\n"
@@ -10094,7 +10277,7 @@ msgstr[3] ""
"\n"
"У пов'Ñзаному файлі «%s»: Ñегмент динамічної інформації із зÑувом 0x%lx міÑтить %d запиÑ:\n"
-#: readelf.c:13273
+#: readelf.c:13653
#, c-format
msgid ""
"\n"
@@ -10115,101 +10298,101 @@ msgstr[3] ""
"\n"
"Сегмент динамічної інформації із зÑувом 0x%lx міÑтить %d запиÑ:\n"
-#: readelf.c:13281
+#: readelf.c:13661
#, c-format
msgid " Num: Name BoundTo Flags\n"
msgstr " ЧиÑ: Ðазва Межа Ознаки\n"
-#: readelf.c:13288
+#: readelf.c:13668
#, c-format
msgid "<corrupt index>"
msgstr "<пошкоджений індекÑ>"
-#: readelf.c:13293
+#: readelf.c:13673
#, c-format
msgid "<corrupt: %19ld>"
msgstr "<пошкоджено: %19ld>"
-#: readelf.c:13390
+#: readelf.c:13770
#, c-format
msgid "MSP430 SYM_DIFF reloc contains invalid symbol index %lu\n"
msgstr "ПереÑÑƒÐ²Ð°Ð½Ð½Ñ SYM_DIFF MSP430 міÑтить некоректний Ñ–Ð½Ð´ÐµÐºÑ Ñимволу %lu\n"
-#: readelf.c:13437
+#: readelf.c:13817
#, c-format
msgid "MSP430 ULEB128 field at 0x%lx contains invalid ULEB128 value\n"
msgstr "У полі ULEB128 MSP430 за адреÑою 0x%lx міÑтитьÑÑ Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ULEB128\n"
-#: readelf.c:13441
+#: readelf.c:13821
#, c-format
msgid "MSP430 reloc contains invalid symbol index %lu\n"
msgstr "ПереÑÑƒÐ²Ð°Ð½Ð½Ñ MSP430 міÑтить некоректний Ñ–Ð½Ð´ÐµÐºÑ Ñимволу %lu\n"
#. PR 21137
-#: readelf.c:13452
+#: readelf.c:13832
#, c-format
msgid "MSP430 sym diff reloc contains invalid offset: 0x%lx\n"
msgstr "переÑÑƒÐ²Ð°Ð½Ð½Ñ sym diff MSP430 міÑтить некоректний зÑув: 0x%lx\n"
-#: readelf.c:13463
+#: readelf.c:13843
msgid "Unhandled MSP430 reloc type found after SYM_DIFF reloc\n"
msgstr "ПіÑÐ»Ñ Ð¿ÐµÑ€ÐµÑÑƒÐ²Ð°Ð½Ð½Ñ SYM_DIFF виÑвлено непридатний до обробки тип переÑÑƒÐ²Ð°Ð½Ð½Ñ MSP430\n"
-#: readelf.c:13486
+#: readelf.c:13866
#, c-format
msgid "MN10300_SYM_DIFF reloc contains invalid symbol index %lu\n"
msgstr "ПереÑÑƒÐ²Ð°Ð½Ð½Ñ MN10300_SYM_DIFF міÑтить некоректний Ñ–Ð½Ð´ÐµÐºÑ Ñимволу %lu\n"
-#: readelf.c:13500
+#: readelf.c:13880
#, c-format
msgid "MN10300 reloc contains invalid symbol index %lu\n"
msgstr "ПереÑÑƒÐ²Ð°Ð½Ð½Ñ MN10300 міÑтить некоректний Ñ–Ð½Ð´ÐµÐºÑ Ñимволу %lu\n"
-#: readelf.c:13510
+#: readelf.c:13890
#, c-format
msgid "MN10300 sym diff reloc contains invalid offset: 0x%lx\n"
msgstr "переÑÑƒÐ²Ð°Ð½Ð½Ñ sym diff MN10300 міÑтить некоректний зÑув: 0x%lx\n"
-#: readelf.c:13520
+#: readelf.c:13900
msgid "Unhandled MN10300 reloc type found after SYM_DIFF reloc\n"
msgstr "ПіÑÐ»Ñ Ð¿ÐµÑ€ÐµÑÑƒÐ²Ð°Ð½Ð½Ñ SYM_DIFF виÑвлено непридатний до обробки тип переÑÑƒÐ²Ð°Ð½Ð½Ñ MN10300\n"
-#: readelf.c:13543
+#: readelf.c:13923
#, c-format
msgid "RL78_SYM reloc contains invalid symbol index %lu\n"
msgstr "ПереÑÑƒÐ²Ð°Ð½Ð½Ñ RL78_SYM міÑтить некоректний Ñ–Ð½Ð´ÐµÐºÑ Ñимволу %lu\n"
-#: readelf.c:13562 readelf.c:13571
+#: readelf.c:13942 readelf.c:13951
#, c-format
msgid "RL78 sym diff reloc contains invalid offset: 0x%lx\n"
msgstr "переÑÑƒÐ²Ð°Ð½Ð½Ñ sym diff RL78 міÑтить некоректний зÑув: 0x%lx\n"
-#: readelf.c:13790
+#: readelf.c:14172
#, c-format
msgid "Missing knowledge of 32-bit reloc types used in DWARF sections of machine number %d\n"
msgstr "Ðе виÑтачає даних щодо 32-бітових типів переÑуваннÑ, викориÑтаних у розділах DWARF архітектури з номером %d\n"
-#: readelf.c:14473
+#: readelf.c:14857
#, c-format
msgid "unable to apply unsupported reloc type %d to section %s\n"
msgstr "не вдалоÑÑ Ð·Ð°ÑтоÑувати непідтримуваний тип переÑуваннÑ, %d, до розділу %s\n"
-#: readelf.c:14482
+#: readelf.c:14866
#, c-format
msgid "skipping invalid relocation offset 0x%lx in section %s\n"
msgstr "пропуÑкаєтьÑÑ Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ зÑув переÑÑƒÐ²Ð°Ð½Ð½Ñ 0x%lx у розділі %s\n"
-#: readelf.c:14491
+#: readelf.c:14875
#, c-format
msgid "skipping invalid relocation symbol index 0x%lx in section %s\n"
msgstr "пропуÑкаємо некоректний Ñ–Ð½Ð´ÐµÐºÑ Ð¿ÐµÑ€ÐµÑÑƒÐ²Ð°Ð½Ð½Ñ Ñимволу 0x%lx у розділі %s\n"
-#: readelf.c:14514
+#: readelf.c:14898
#, c-format
msgid "skipping unexpected symbol type %s in section %s relocation %ld\n"
msgstr "пропуÑкаємо неочікуваний тип Ñимволу %s у розділі %s, переÑÑƒÐ²Ð°Ð½Ð½Ñ %ld\n"
-#: readelf.c:14591
+#: readelf.c:14975
#, c-format
msgid ""
"\n"
@@ -10218,16 +10401,16 @@ msgstr ""
"\n"
"Зібраний дамп розділу %s\n"
-#: readelf.c:14609
+#: readelf.c:14993
#, c-format
msgid "Section '%s' has no data to dump.\n"
msgstr "Розділ «%s» не міÑтить даних Ð´Ð»Ñ Ð´Ð°Ð¼Ð¿Ñƒ.\n"
-#: readelf.c:14615
+#: readelf.c:14999
msgid "section contents"
msgstr "вміÑÑ‚ розділу"
-#: readelf.c:14691
+#: readelf.c:15075
#, c-format
msgid ""
"\n"
@@ -10236,7 +10419,7 @@ msgstr ""
"\n"
"Дамп Ñ€Ñдків у розділу «%s» у пов'Ñзаному файлі %s:\n"
-#: readelf.c:14695
+#: readelf.c:15079
#, c-format
msgid ""
"\n"
@@ -10245,33 +10428,33 @@ msgstr ""
"\n"
"Дамп Ñ€Ñдків розділу '%s':\n"
-#: readelf.c:14716 readelf.c:14932 readelf.c:15355
+#: readelf.c:15100 readelf.c:15316 readelf.c:15703
#, c-format
msgid "section '%s' has unsupported compress type: %d\n"
msgstr "розділ «%s» належить до непідтримуваного типу ÑтиÑÐºÐ°Ð½Ð½Ñ %d\n"
-#: readelf.c:14748 readelf.c:14966 readelf.c:15392
+#: readelf.c:15132 readelf.c:15350 readelf.c:15740
#, c-format
msgid "Unable to decompress section %s\n"
msgstr "Ðе вдалоÑÑ Ñ€Ð¾Ð·Ð¿Ð°ÐºÑƒÐ²Ð°Ñ‚Ð¸ розділ %s\n"
-#: readelf.c:14773
+#: readelf.c:15157
#, c-format
msgid " Note: This section has relocations against it, but these have NOT been applied to this dump.\n"
msgstr " ЗауваженнÑ: цей розділ міÑтить Ñимволи, що переÑуваютьÑÑ Ñамі на Ñебе, ці Ñимволи не було заÑтоÑовано до цього дампу.\n"
-#: readelf.c:14866 readelf.c:16353 readelf.c:16393 readelf.c:16431
-#: readelf.c:16478 readelf.c:16509 readelf.c:18113 readelf.c:18145
+#: readelf.c:15250 readelf.c:16726 readelf.c:16766 readelf.c:16804
+#: readelf.c:16851 readelf.c:16882 readelf.c:18488 readelf.c:18520
#, c-format
msgid "<corrupt>\n"
msgstr "<пошкоджено>\n"
-#: readelf.c:14874
+#: readelf.c:15258
#, c-format
msgid " No strings found in this section."
msgstr " У цьому розділі не знайдено Ñ€Ñдків."
-#: readelf.c:14907
+#: readelf.c:15291
#, c-format
msgid ""
"\n"
@@ -10280,7 +10463,7 @@ msgstr ""
"\n"
"ШіÑтнадцÑтковий дамп розділу «%s» у пов'Ñзаному файлі %s:\n"
-#: readelf.c:14911
+#: readelf.c:15295
#, c-format
msgid ""
"\n"
@@ -10289,45 +10472,36 @@ msgstr ""
"\n"
"Hex-дамп розділу '%s':\n"
-#: readelf.c:14999
+#: readelf.c:15383
#, c-format
msgid " NOTE: This section has relocations against it, but these have NOT been applied to this dump.\n"
msgstr " ПРИМІТКÐ: Цей розділ міÑтить переміщувані Ñимволи на Ñамого Ñебе, але вони ÐЕ були заÑтоÑовані до цього дампу.\n"
-#: readelf.c:15144
+#: readelf.c:15525
#, c-format
msgid "Iteration failed: %s, %s\n"
msgstr "Помилка у ітерації: %s, %s\n"
-#: readelf.c:15190
+#: readelf.c:15569
#, c-format
msgid "No symbol section named %s\n"
msgstr "Ðемає розділу Ñимволів із назвою %s\n"
-#: readelf.c:15206
+#: readelf.c:15585
#, c-format
msgid "No string table section named %s\n"
msgstr "Ðемає розділу таблиці Ñ€Ñдків із назвою %s\n"
-#: readelf.c:15213
+#: readelf.c:15592
msgid "strings"
msgstr "Ñ€Ñдки"
-#: readelf.c:15223
-#, c-format
-msgid "No CTF parent section named %s\n"
-msgstr "Ðемає батьківÑького розділу CTF із назвою %s\n"
-
-#: readelf.c:15229
-msgid "CTF parent"
-msgstr "батьківÑький CTF"
-
-#: readelf.c:15242 readelf.c:15255 readelf.c:15269
+#: readelf.c:15605 readelf.c:15617
#, c-format
msgid "CTF open failure: %s\n"
msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ CTF: %s\n"
-#: readelf.c:15276
+#: readelf.c:15624
#, c-format
msgid ""
"\n"
@@ -10336,7 +10510,7 @@ msgstr ""
"\n"
"Дамп розділу CTF «%s» у пов'Ñзаному файлі %s:\n"
-#: readelf.c:15280
+#: readelf.c:15628
#, c-format
msgid ""
"\n"
@@ -10345,27 +10519,27 @@ msgstr ""
"\n"
"Дамп розділу CTF «%s»:\n"
-#: readelf.c:15286
+#: readelf.c:15636
#, c-format
msgid "CTF member open failure: %s\n"
msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ член CTF: %s\n"
-#: readelf.c:15319
+#: readelf.c:15667
#, c-format
msgid "%s section data"
msgstr "дані розділу %s"
-#: readelf.c:15342
+#: readelf.c:15690
#, c-format
msgid "compressed section %s is too small to contain a compression header\n"
msgstr "ÑтиÑнений розділ %s Ñ” надто малим, щоб міÑтити заголовок ÑтиÑканнÑ\n"
-#: readelf.c:15468 readelf.c:15495 readelf.c:15520
+#: readelf.c:15816 readelf.c:15843 readelf.c:15868
#, c-format
msgid "malformed note encountered in section %s whilst scanning for build-id note\n"
msgstr "помилкове Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð¾Ñ‚Ð°Ñ‚ÐºÐ¸ у розділі %s під Ñ‡Ð°Ñ ÑÐºÐ°Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ð½Ð¾Ñ‚Ð°Ñ‚ÐºÐ¸ build-id\n"
-#: readelf.c:15644
+#: readelf.c:15993
#, c-format
msgid ""
"\n"
@@ -10378,503 +10552,503 @@ msgstr ""
#. which has the NOBITS type - the bits in the file will be random.
#. This can happen when a file containing a .eh_frame section is
#. stripped with the --only-keep-debug command line option.
-#: readelf.c:15653
+#: readelf.c:16002
#, c-format
msgid "section '%s' has the NOBITS type - its contents are unreliable.\n"
msgstr "розділ «%s» належить до типу NOBITS — його вміÑту не можна довірÑти.\n"
-#: readelf.c:15703
+#: readelf.c:16052
#, c-format
msgid "Unrecognized debug section: %s\n"
msgstr "Ðерозпізнаний розділ діагноÑтики: %s\n"
-#: readelf.c:15732
+#: readelf.c:16082
#, c-format
msgid "Section '%s' was not dumped because it does not exist\n"
msgstr "Ð”Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ «%s» дамп не був виконаний, оÑкільки його не Ñ–Ñнує\n"
-#: readelf.c:15805
+#: readelf.c:16155
#, c-format
msgid "Section %d was not dumped because it does not exist!\n"
msgstr "Ð”Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %d дамп не був виконаний, оÑкільки він не Ñ–Ñнує!\n"
-#: readelf.c:15861
+#: readelf.c:16211
msgid "<corrupt tag>\n"
msgstr "<пошкоджена мітка>\n"
-#: readelf.c:15876
+#: readelf.c:16226
#, c-format
msgid "<corrupt string tag>"
msgstr "<пошкоджена Ñ€Ñдкова мітка>"
-#: readelf.c:15910
+#: readelf.c:16260
#, c-format
msgid "Absent/Non standard\n"
msgstr "Ðемає/ÐеÑтандартний\n"
-#: readelf.c:15913
+#: readelf.c:16263
#, c-format
msgid "Bare metal/mwdt\n"
msgstr "Bare metal/mwdt\n"
-#: readelf.c:15916
+#: readelf.c:16266
#, c-format
msgid "Bare metal/newlib\n"
msgstr "Bare metal/newlib\n"
-#: readelf.c:15919
+#: readelf.c:16269
#, c-format
msgid "Linux/uclibc\n"
msgstr "Linux/uclibc\n"
-#: readelf.c:15922
+#: readelf.c:16272
#, c-format
msgid "Linux/glibc\n"
msgstr "Linux/glibc\n"
-#: readelf.c:15925 readelf.c:16004
+#: readelf.c:16275 readelf.c:16354
#, c-format
msgid "Unknown\n"
msgstr "Ðевідомо\n"
-#: readelf.c:15937 readelf.c:15967 readelf.c:15995
+#: readelf.c:16287 readelf.c:16317 readelf.c:16345
#, c-format
msgid "Absent\n"
msgstr "Ðемає\n"
-#: readelf.c:15979
+#: readelf.c:16329
msgid "yes"
msgstr "так"
-#: readelf.c:15979
+#: readelf.c:16329
msgid "no"
msgstr "ні"
-#: readelf.c:16016 readelf.c:16023
+#: readelf.c:16366 readelf.c:16373
msgid "default"
msgstr "типовий"
-#: readelf.c:16017
+#: readelf.c:16367
msgid "smallest"
msgstr "найменший"
-#: readelf.c:16022
+#: readelf.c:16372
msgid "OPTFP"
msgstr "OPTFP"
-#: readelf.c:16220 readelf.c:16233 readelf.c:16251 readelf.c:16772
-#: readelf.c:17051 readelf.c:17063 readelf.c:17075
+#: readelf.c:16593 readelf.c:16606 readelf.c:16624 readelf.c:17145
+#: readelf.c:17424 readelf.c:17436 readelf.c:17448
#, c-format
msgid "None\n"
msgstr "Ðемає\n"
-#: readelf.c:16221
+#: readelf.c:16594
#, c-format
msgid "Application\n"
msgstr "Програма\n"
-#: readelf.c:16222
+#: readelf.c:16595
#, c-format
msgid "Realtime\n"
msgstr "У режимі реального чаÑу\n"
-#: readelf.c:16223
+#: readelf.c:16596
#, c-format
msgid "Microcontroller\n"
msgstr "Мікроконтролер\n"
-#: readelf.c:16224
+#: readelf.c:16597
#, c-format
msgid "Application or Realtime\n"
msgstr "Програма або режим реального чаÑу\n"
-#: readelf.c:16234 readelf.c:16253 readelf.c:16824 readelf.c:16841
-#: readelf.c:16912 readelf.c:16932 readelf.c:19716
+#: readelf.c:16607 readelf.c:16626 readelf.c:17197 readelf.c:17214
+#: readelf.c:17285 readelf.c:17305 readelf.c:20136
#, c-format
msgid "8-byte\n"
msgstr "8-байтовий\n"
-#: readelf.c:16235 readelf.c:16915 readelf.c:16935 readelf.c:19715
+#: readelf.c:16608 readelf.c:17288 readelf.c:17308 readelf.c:20135
#, c-format
msgid "4-byte\n"
msgstr "4-байтовий\n"
-#: readelf.c:16239 readelf.c:16257
+#: readelf.c:16612 readelf.c:16630
#, c-format
msgid "8-byte and up to %d-byte extended\n"
msgstr "8-байтовий і розширюваний до %d-байтового\n"
-#: readelf.c:16252
+#: readelf.c:16625
#, c-format
msgid "8-byte, except leaf SP\n"
msgstr "8-байтовий, окрім Ð²Ñ–Ð´Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ SP\n"
-#: readelf.c:16268 readelf.c:16350 readelf.c:16950
+#: readelf.c:16641 readelf.c:16723 readelf.c:17323
#, c-format
msgid "flag = %d, vendor = "
msgstr "прапорець = %d, виробник = "
-#: readelf.c:16289
+#: readelf.c:16662
#, c-format
msgid "True\n"
msgstr "True\n"
-#: readelf.c:16309
+#: readelf.c:16682
#, c-format
msgid "<unknown: %d>\n"
msgstr "<невідомо: %d>\n"
-#: readelf.c:16354
+#: readelf.c:16727
msgid "corrupt vendor attribute\n"
msgstr "пошкоджений атрибут виробника\n"
-#: readelf.c:16404
+#: readelf.c:16777
#, c-format
msgid "unspecified hard/soft float\n"
msgstr "не вказана апаратна або програмна рухома крапка\n"
-#: readelf.c:16407
+#: readelf.c:16780
#, c-format
msgid "hard float\n"
msgstr "Ðпаратна рухома крапка\n"
-#: readelf.c:16410
+#: readelf.c:16783
#, c-format
msgid "soft float\n"
msgstr "Програмна рухома крапка\n"
-#: readelf.c:16442
+#: readelf.c:16815
#, c-format
msgid "unspecified hard/soft float, "
msgstr "не вказана апаратна або програмна рухома крапка, "
-#: readelf.c:16445
+#: readelf.c:16818
#, c-format
msgid "hard float, "
msgstr "апаратна рухома крапка, "
-#: readelf.c:16448
+#: readelf.c:16821
#, c-format
msgid "soft float, "
msgstr "програмна рухома крапка, "
-#: readelf.c:16451
+#: readelf.c:16824
#, c-format
msgid "single-precision hard float, "
msgstr "апаратна рухома крапка з одинарною точніÑÑ‚ÑŽ, "
-#: readelf.c:16458
+#: readelf.c:16831
#, c-format
msgid "unspecified long double\n"
msgstr "невказане long double\n"
-#: readelf.c:16461
+#: readelf.c:16834
#, c-format
msgid "128-bit IBM long double\n"
msgstr "128-бітове IBM long double\n"
-#: readelf.c:16464
+#: readelf.c:16837
#, c-format
msgid "64-bit long double\n"
msgstr "64-бітове long double\n"
-#: readelf.c:16467
+#: readelf.c:16840
#, c-format
msgid "128-bit IEEE long double\n"
msgstr "128-бітове IEEE long double\n"
-#: readelf.c:16489 readelf.c:16520
+#: readelf.c:16862 readelf.c:16893
#, c-format
msgid "unspecified\n"
msgstr "не визначено\n"
-#: readelf.c:16492
+#: readelf.c:16865
#, c-format
msgid "generic\n"
msgstr "загальний\n"
-#: readelf.c:16526
+#: readelf.c:16899
#, c-format
msgid "memory\n"
msgstr "пам'ÑÑ‚ÑŒ\n"
-#: readelf.c:16553
+#: readelf.c:16926
#, c-format
msgid "any\n"
msgstr "будь-Ñкий\n"
-#: readelf.c:16556
+#: readelf.c:16929
#, c-format
msgid "software\n"
msgstr "програмний\n"
-#: readelf.c:16559
+#: readelf.c:16932
#, c-format
msgid "hardware\n"
msgstr "апаратний\n"
-#: readelf.c:16682
+#: readelf.c:17055
#, c-format
msgid "Hard or soft float\n"
msgstr "Ðпаратна або програмна рухома крапка\n"
-#: readelf.c:16685
+#: readelf.c:17058
#, c-format
msgid "Hard float (double precision)\n"
msgstr "Ðпаратна рухома крапка (подвійна точніÑÑ‚ÑŒ)\n"
-#: readelf.c:16688
+#: readelf.c:17061
#, c-format
msgid "Hard float (single precision)\n"
msgstr "Ðпаратна рухома крапка (одинарна точніÑÑ‚ÑŒ)\n"
-#: readelf.c:16691
+#: readelf.c:17064
#, c-format
msgid "Soft float\n"
msgstr "Програма рухома крапка\n"
-#: readelf.c:16694
+#: readelf.c:17067
#, c-format
msgid "Hard float (MIPS32r2 64-bit FPU 12 callee-saved)\n"
msgstr "Ðпаратна рухома крапка (64-бітовий ÑпівпроцеÑор MIPS32r2, 12 безпечних Ð´Ð»Ñ Ð²Ð¸ÐºÐ»Ð¸ÐºÑ–Ð² регіÑтрів)\n"
-#: readelf.c:16697
+#: readelf.c:17070
#, c-format
msgid "Hard float (32-bit CPU, Any FPU)\n"
msgstr "Ðпаратна рухома крапка (32-бітовий процеÑор, будь-Ñкий FPU)\n"
-#: readelf.c:16700
+#: readelf.c:17073
#, c-format
msgid "Hard float (32-bit CPU, 64-bit FPU)\n"
msgstr "Ðпаратна рухома крапка (32-бітовий процеÑор, 64-бітовий FPU)\n"
-#: readelf.c:16703
+#: readelf.c:17076
#, c-format
msgid "Hard float compat (32-bit CPU, 64-bit FPU)\n"
msgstr "СуміÑніÑÑ‚ÑŒ апаратної рухомої крапки (32-бітовий процеÑор, 64-бітовий FPU)\n"
-#: readelf.c:16706
+#: readelf.c:17079
#, c-format
msgid "NaN 2008 compatibility\n"
msgstr "ÑуміÑніÑÑ‚ÑŒ із NaN 2008\n"
-#: readelf.c:16739
+#: readelf.c:17112
#, c-format
msgid "Any MSA or not\n"
msgstr "Будь-Ñкий MSA або нічого\n"
-#: readelf.c:16742
+#: readelf.c:17115
#, c-format
msgid "128-bit MSA\n"
msgstr "128-бітовий MSA\n"
-#: readelf.c:16804
+#: readelf.c:17177
#, c-format
msgid "Not used\n"
msgstr "Ðе викориÑтовуєтьÑÑ\n"
-#: readelf.c:16807
+#: readelf.c:17180
#, c-format
msgid "2 bytes\n"
msgstr "2 байти\n"
-#: readelf.c:16810
+#: readelf.c:17183
#, c-format
msgid "4 bytes\n"
msgstr "4 байти\n"
-#: readelf.c:16827 readelf.c:16844 readelf.c:16918 readelf.c:16938
+#: readelf.c:17200 readelf.c:17217 readelf.c:17291 readelf.c:17311
#, c-format
msgid "16-byte\n"
msgstr "16-байтовий\n"
-#: readelf.c:16858
+#: readelf.c:17231
#, c-format
msgid "DSBT addressing not used\n"
msgstr "ÐдреÑÑƒÐ²Ð°Ð½Ð½Ñ DSBT не викориÑтовуєтьÑÑ\n"
-#: readelf.c:16861
+#: readelf.c:17234
#, c-format
msgid "DSBT addressing used\n"
msgstr "ÐдреÑÑƒÐ²Ð°Ð½Ð½Ñ DSBT викориÑтовуєтьÑÑ\n"
-#: readelf.c:16875
+#: readelf.c:17248
#, c-format
msgid "Data addressing position-dependent\n"
msgstr "ÐдреÑÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… залежить від позиції\n"
-#: readelf.c:16878
+#: readelf.c:17251
#, c-format
msgid "Data addressing position-independent, GOT near DP\n"
msgstr "ÐдреÑÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… не залежить від позиції, GOT порÑд з DP\n"
-#: readelf.c:16881
+#: readelf.c:17254
#, c-format
msgid "Data addressing position-independent, GOT far from DP\n"
msgstr "ÐдреÑÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… не залежить від позиції, GOT віддалено від DP\n"
-#: readelf.c:16895
+#: readelf.c:17268
#, c-format
msgid "Code addressing position-dependent\n"
msgstr "ÐдреÑÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ¾Ð´Ñƒ залежить від позиції\n"
-#: readelf.c:16898
+#: readelf.c:17271
#, c-format
msgid "Code addressing position-independent\n"
msgstr "ÐдреÑÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ¾Ð´Ñƒ не залежить від позиції\n"
-#: readelf.c:17052
+#: readelf.c:17425
#, c-format
msgid "MSP430\n"
msgstr "MSP430\n"
-#: readelf.c:17053
+#: readelf.c:17426
#, c-format
msgid "MSP430X\n"
msgstr "MSP430X\n"
-#: readelf.c:17064 readelf.c:17076
+#: readelf.c:17437 readelf.c:17449
#, c-format
msgid "Small\n"
msgstr "Малий\n"
-#: readelf.c:17065 readelf.c:17077
+#: readelf.c:17438 readelf.c:17450
#, c-format
msgid "Large\n"
msgstr "Великий\n"
-#: readelf.c:17078
+#: readelf.c:17451
#, c-format
msgid "Restricted Large\n"
msgstr "Обмежений великий\n"
-#: readelf.c:17084
+#: readelf.c:17457
#, c-format
msgid " <unknown tag %d>: "
msgstr " <невідомий теґ %d>: "
-#: readelf.c:17130
+#: readelf.c:17503
#, c-format
msgid "Any Region\n"
msgstr "Будь-Ñка ділÑнка\n"
-#: readelf.c:17133
+#: readelf.c:17506
#, c-format
msgid "Lower Region Only\n"
msgstr "Лише Ð½Ð¸Ð¶Ð½Ñ Ð´Ñ–Ð»Ñнка\n"
-#: readelf.c:17192
+#: readelf.c:17565
#, c-format
msgid "%u\n"
msgstr "%u\n"
-#: readelf.c:17199
+#: readelf.c:17572
#, c-format
msgid "No unaligned access\n"
msgstr "Ðемає невирівнÑного доÑтупу\n"
-#: readelf.c:17202
+#: readelf.c:17575
#, c-format
msgid "Unaligned access\n"
msgstr "ÐевирівнÑний доÑтуп\n"
-#: readelf.c:17208
+#: readelf.c:17581
#, c-format
msgid "%u-bytes\n"
msgstr "%u-байтові\n"
-#: readelf.c:17347
+#: readelf.c:17723
msgid "attributes"
msgstr "атрибути"
-#: readelf.c:17359
+#: readelf.c:17735
#, c-format
msgid "Unknown attributes version '%c'(%d) - expecting 'A'\n"
msgstr "Ðевідома верÑÑ–Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñ–Ð² «%c»(%d) - мало бути «A»\n"
-#: readelf.c:17378
+#: readelf.c:17754
msgid "Tag section ends prematurely\n"
msgstr "Ðадто раннє Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ міток\n"
-#: readelf.c:17387
+#: readelf.c:17763
#, c-format
msgid "Bad attribute length (%u > %u)\n"
msgstr "Помилкова довжина атрибута (%u > %u)\n"
-#: readelf.c:17395
+#: readelf.c:17771
#, c-format
msgid "Attribute length of %u is too small\n"
msgstr "Довжина атрибута %u є надто малою\n"
-#: readelf.c:17406
+#: readelf.c:17782
msgid "Corrupt attribute section name\n"
msgstr "Пошкоджено назву розділу атрибутів\n"
-#: readelf.c:17411
+#: readelf.c:17787
#, c-format
msgid "Attribute Section: "
msgstr "Розділ атрибутів: "
-#: readelf.c:17438
+#: readelf.c:17814
msgid "Unused bytes at end of section\n"
msgstr "ÐевикориÑтані байти наприкінці розділу\n"
-#: readelf.c:17448
+#: readelf.c:17824
#, c-format
msgid "Bad subsection length (%u > %u)\n"
msgstr "Помилкова довжина підрозділу (%u > %u)\n"
-#: readelf.c:17456
+#: readelf.c:17832
#, c-format
msgid "Bad subsection length (%u < 6)\n"
msgstr "Помилкова довжина підрозділу (%u < 6)\n"
-#: readelf.c:17471
+#: readelf.c:17847
#, c-format
msgid "File Attributes\n"
msgstr "Ðтрибути файла\n"
-#: readelf.c:17474
+#: readelf.c:17850
#, c-format
msgid "Section Attributes:"
msgstr "Ðтрибути розділу:"
-#: readelf.c:17477
+#: readelf.c:17853
#, c-format
msgid "Symbol Attributes:"
msgstr "Ðтрибути Ñимволу:"
-#: readelf.c:17490
+#: readelf.c:17866
#, c-format
msgid "Unknown tag: %d\n"
msgstr "Ðевідомий теґ: %d\n"
-#: readelf.c:17511
+#: readelf.c:17887
#, c-format
msgid " Unknown attribute:\n"
msgstr " Ðевідомий атрибут:\n"
-#: readelf.c:17553
+#: readelf.c:17929
msgid "MIPS GOT entry extends beyond the end of available data\n"
msgstr "Ð—Ð°Ð¿Ð¸Ñ GOT MIPS виходить за кінець доÑтупних даних\n"
-#: readelf.c:17636 readelf.c:17705
+#: readelf.c:18012 readelf.c:18081
msgid "Unknown"
msgstr "Ðевідомий"
-#: readelf.c:17752
+#: readelf.c:18128
msgid "Corrupt MIPS ABI Flags section.\n"
msgstr "Пошкоджено розділ прапорців ABI MIPS.\n"
-#: readelf.c:17758
+#: readelf.c:18134
msgid "MIPS ABI Flags section"
msgstr "Розділ прапорців ABI MIPS"
-#: readelf.c:17817 readelf.c:18400
+#: readelf.c:18193 readelf.c:18775
msgid "Global Offset Table data"
msgstr "Дані загальної таблиці зÑувів"
-#: readelf.c:17821
+#: readelf.c:18197
#, c-format
msgid ""
"\n"
@@ -10883,45 +11057,45 @@ msgstr ""
"\n"
"Статичний GOT:\n"
-#: readelf.c:17822 readelf.c:18405
+#: readelf.c:18198 readelf.c:18780
#, c-format
msgid " Canonical gp value: "
msgstr " Канонічне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ gp: "
-#: readelf.c:17836 readelf.c:18409 readelf.c:18539
+#: readelf.c:18212 readelf.c:18784 readelf.c:18914
#, c-format
msgid " Reserved entries:\n"
msgstr " Зарезервовані запиÑи:\n"
-#: readelf.c:17837
+#: readelf.c:18213
#, c-format
msgid " %*s %10s %*s\n"
msgstr " %*s %10s %*s\n"
-#: readelf.c:17838 readelf.c:17868 readelf.c:18411 readelf.c:18439
-#: readelf.c:18457 readelf.c:18541 readelf.c:18550
+#: readelf.c:18214 readelf.c:18244 readelf.c:18786 readelf.c:18814
+#: readelf.c:18832 readelf.c:18916 readelf.c:18925
msgid "Address"
msgstr "ÐдреÑа"
-#: readelf.c:17838 readelf.c:17868 readelf.c:18411 readelf.c:18439
-#: readelf.c:18458
+#: readelf.c:18214 readelf.c:18244 readelf.c:18786 readelf.c:18814
+#: readelf.c:18833
msgid "Access"
msgstr "ДоÑтуп"
-#: readelf.c:17839 readelf.c:17869
+#: readelf.c:18215 readelf.c:18245
msgid "Value"
msgstr "ЗначеннÑ"
-#: readelf.c:17866 readelf.c:18437
+#: readelf.c:18242 readelf.c:18812
#, c-format
msgid " Local entries:\n"
msgstr " Локальні запиÑи:\n"
-#: readelf.c:17948 readelf.c:18656
+#: readelf.c:18324 readelf.c:19031
msgid "liblist section data"
msgstr "дані розділу liblist"
-#: readelf.c:17951
+#: readelf.c:18327
#, c-format
msgid ""
"\n"
@@ -10942,37 +11116,37 @@ msgstr[3] ""
"\n"
"Розділ «.liblist» міÑтить %lu запиÑ:\n"
-#: readelf.c:17955
+#: readelf.c:18331
msgid " Library Time Stamp Checksum Version Flags\n"
msgstr " Бібліотека ЧаÑова позначка Контр. Ñума ВерÑÑ–Ñ ÐŸÑ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ–\n"
-#: readelf.c:17981
+#: readelf.c:18357
#, c-format
msgid "<corrupt: %9ld>"
msgstr "<пошкоджено: %9ld>"
-#: readelf.c:17986
+#: readelf.c:18362
msgid " NONE"
msgstr " ÐЕМÐЄ"
-#: readelf.c:18037
+#: readelf.c:18412
msgid "No MIPS_OPTIONS header found\n"
msgstr "Ðе знайдено заголовка MIPS_OPTIONS\n"
-#: readelf.c:18043
+#: readelf.c:18418
msgid "The MIPS options section is too small.\n"
msgstr "Розмір розділу параметрів MIPS є надто малим.\n"
-#: readelf.c:18048
+#: readelf.c:18423
msgid "options"
msgstr "ключі"
-#: readelf.c:18067
+#: readelf.c:18442
#, c-format
msgid "Invalid size (%u) for MIPS option\n"
msgstr "Ðекоректний розмір (%u) параметра MIPS\n"
-#: readelf.c:18076
+#: readelf.c:18451
#, c-format
msgid ""
"\n"
@@ -10993,28 +11167,28 @@ msgstr[3] ""
"\n"
"Розділ «%s» міÑтить %d запиÑ:\n"
-#: readelf.c:18114 readelf.c:18146
+#: readelf.c:18489 readelf.c:18521
msgid "Truncated MIPS REGINFO option\n"
msgstr "Обрізаний параметр REGINFO MIPS\n"
-#: readelf.c:18282
+#: readelf.c:18657
msgid "conflict list found without a dynamic symbol table\n"
msgstr "знайдено ÑпиÑок конфліктів без таблиці динамічних Ñимволів\n"
-#: readelf.c:18290
+#: readelf.c:18665
#, c-format
msgid "Overlarge number of conflicts detected: %lx\n"
msgstr "ВиÑвлено надто велику кількіÑÑ‚ÑŒ конфліктів: %lx\n"
-#: readelf.c:18298
+#: readelf.c:18673
msgid "Out of memory allocating space for dynamic conflicts\n"
msgstr "Бракує пам'ÑÑ‚Ñ– при розподілі міÑÑ†Ñ Ð´Ð»Ñ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¸Ñ… конфліктів\n"
-#: readelf.c:18308 readelf.c:18326
+#: readelf.c:18683 readelf.c:18701
msgid "conflict"
msgstr "конфлікт"
-#: readelf.c:18339
+#: readelf.c:18714
#, c-format
msgid ""
"\n"
@@ -11035,31 +11209,31 @@ msgstr[3] ""
"\n"
"Розділ «.conflict» міÑтить %lu запиÑ:\n"
-#: readelf.c:18343
+#: readelf.c:18718
msgid " Num: Index Value Name"
msgstr " Ðом: Ð†Ð½Ð´ÐµÐºÑ Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ðазва"
-#: readelf.c:18350
+#: readelf.c:18725
#, c-format
msgid "<corrupt symbol index>"
msgstr "<пошкоджений Ñ–Ð½Ð´ÐµÐºÑ Ñимволу>"
-#: readelf.c:18361 readelf.c:18487 readelf.c:18575
+#: readelf.c:18736 readelf.c:18862 readelf.c:18950
#, c-format
msgid "<corrupt: %14ld>"
msgstr "<пошкоджено: %14ld>"
-#: readelf.c:18384
+#: readelf.c:18759
#, c-format
msgid "The GOT symbol offset (%lu) is greater than the symbol table size (%lu)\n"
msgstr "ЗÑув Ñимволу GOT (%lu) перевищує розмір таблиці Ñимволів (%lu)\n"
-#: readelf.c:18393
+#: readelf.c:18768
#, c-format
msgid "Too many GOT symbols: %lu\n"
msgstr "Забагато Ñимволів GOT: %lu\n"
-#: readelf.c:18404
+#: readelf.c:18779
#, c-format
msgid ""
"\n"
@@ -11068,92 +11242,92 @@ msgstr ""
"\n"
"ОÑновний GOT:\n"
-#: readelf.c:18410
+#: readelf.c:18785
#, c-format
msgid " %*s %10s %*s Purpose\n"
msgstr " %*s %10s %*s призначеннÑ\n"
-#: readelf.c:18412 readelf.c:18440 readelf.c:18459 readelf.c:18541
-#: readelf.c:18551
+#: readelf.c:18787 readelf.c:18815 readelf.c:18834 readelf.c:18916
+#: readelf.c:18926
msgid "Initial"
msgstr "Початковий"
-#: readelf.c:18414
+#: readelf.c:18789
#, c-format
msgid " Lazy resolver\n"
msgstr " Вирішувач з відкладеннÑм\n"
-#: readelf.c:18429
+#: readelf.c:18804
#, c-format
msgid " Module pointer (GNU extension)\n"
msgstr " Модульний вказівник (Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ GNU)\n"
-#: readelf.c:18455
+#: readelf.c:18830
#, c-format
msgid " Global entries:\n"
msgstr " Загальні запиÑи:\n"
-#: readelf.c:18460 readelf.c:18552
+#: readelf.c:18835 readelf.c:18927
msgid "Sym.Val."
msgstr "Сим.Знач."
#. Note for translators: "Ndx" = abbreviated form of "Index".
-#: readelf.c:18463 readelf.c:18552
+#: readelf.c:18838 readelf.c:18927
msgid "Ndx"
msgstr "Інд"
-#: readelf.c:18463 readelf.c:18552
+#: readelf.c:18838 readelf.c:18927
msgid "Name"
msgstr "Ðазва"
-#: readelf.c:18473
+#: readelf.c:18848
#, c-format
msgid "<no dynamic symbols>"
msgstr "<немає динамічних Ñимволів>"
-#: readelf.c:18490
+#: readelf.c:18865
#, c-format
msgid "<symbol index %lu exceeds number of dynamic symbols>"
msgstr "<Ñ–Ð½Ð´ÐµÐºÑ Ñимволу %lu перевищує кількіÑÑ‚ÑŒ динамічних Ñимволів>"
-#: readelf.c:18531
+#: readelf.c:18906
msgid "Procedure Linkage Table data"
msgstr "Дані таблиці ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€"
-#: readelf.c:18540
+#: readelf.c:18915
#, c-format
msgid " %*s %*s Purpose\n"
msgstr " %*s %*s призначеннÑ\n"
-#: readelf.c:18543
+#: readelf.c:18918
#, c-format
msgid " PLT lazy resolver\n"
msgstr " Вирішувач з відкладеннÑм ТКП\n"
-#: readelf.c:18545
+#: readelf.c:18920
#, c-format
msgid " Module pointer\n"
msgstr " Модульний вказівник\n"
-#: readelf.c:18548
+#: readelf.c:18923
#, c-format
msgid " Entries:\n"
msgstr " ЗапиÑи:\n"
-#: readelf.c:18562
+#: readelf.c:18937
#, c-format
msgid "<corrupt symbol index: %lu>"
msgstr "<пошкоджений Ñ–Ð½Ð´ÐµÐºÑ Ñимволу: %lu>"
-#: readelf.c:18601
+#: readelf.c:18976
msgid "NDS32 elf flags section"
msgstr "розділ прапорців elf NDS32"
-#: readelf.c:18667
+#: readelf.c:19042
msgid "liblist string table"
msgstr "Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ñ€Ñдків liblist"
-#: readelf.c:18679
+#: readelf.c:19054
#, c-format
msgid ""
"\n"
@@ -11174,436 +11348,453 @@ msgstr[3] ""
"\n"
"Розділ ÑпиÑку бібліотек «%s» міÑтить %lu запиÑ:\n"
-#: readelf.c:18685
+#: readelf.c:19060
msgid " Library Time Stamp Checksum Version Flags"
msgstr " Бібліотека ЧаÑова позначка Контр. Ñума ВерÑÑ–Ñ ÐŸÑ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ–"
-#: readelf.c:18735
+#: readelf.c:19110
msgid "NT_AUXV (auxiliary vector)"
msgstr "NT_AUXV (допоміжний вектор)"
-#: readelf.c:18737
+#: readelf.c:19112
msgid "NT_PRSTATUS (prstatus structure)"
msgstr "NT_PRSTATUS (Ñтруктура prstatus)"
-#: readelf.c:18739
+#: readelf.c:19114
msgid "NT_FPREGSET (floating point registers)"
msgstr "NT_FPREGSET (регіÑтри з плаваючою комою)"
-#: readelf.c:18741
+#: readelf.c:19116
msgid "NT_PRPSINFO (prpsinfo structure)"
msgstr "NT_PRPSINFO (Ñтруктура prpsinfo)"
-#: readelf.c:18743
+#: readelf.c:19118
msgid "NT_TASKSTRUCT (task structure)"
msgstr "NT_TASKSTRUCT (Ñтруктура task)"
-#: readelf.c:18745
+#: readelf.c:19120
msgid "NT_GDB_TDESC (GDB XML target description)"
msgstr "NT_GDB_TDESC (Ð¾Ð¿Ð¸Ñ Ñ†Ñ–Ð»Ñ– у XML GDB)"
-#: readelf.c:18747
+#: readelf.c:19122
msgid "NT_PRXFPREG (user_xfpregs structure)"
msgstr "NT_PRXFPREG (Ñтруктура user_xfpregs)"
-#: readelf.c:18749
+#: readelf.c:19124
msgid "NT_PPC_VMX (ppc Altivec registers)"
msgstr "NT_PPC_VMX (регіÑтри Altivec ppc)"
-#: readelf.c:18751
+#: readelf.c:19126
msgid "NT_PPC_VSX (ppc VSX registers)"
msgstr "NT_PPC_VSX (регіÑтри VSX ppc)"
-#: readelf.c:18753
+#: readelf.c:19128
msgid "NT_PPC_TAR (ppc TAR register)"
msgstr "NT_PPC_TAR (регіÑÑ‚Ñ€ TAR ppc)"
-#: readelf.c:18755
+#: readelf.c:19130
msgid "NT_PPC_PPR (ppc PPR register)"
msgstr "NT_PPC_PPR (регіÑÑ‚Ñ€ PPR ppc)"
-#: readelf.c:18757
+#: readelf.c:19132
msgid "NT_PPC_DSCR (ppc DSCR register)"
msgstr "NT_PPC_DSCR (регіÑÑ‚Ñ€ DSCR ppc)"
-#: readelf.c:18759
+#: readelf.c:19134
msgid "NT_PPC_EBB (ppc EBB registers)"
msgstr "NT_PPC_EBB (регіÑтри EBB ppc)"
-#: readelf.c:18761
+#: readelf.c:19136
msgid "NT_PPC_PMU (ppc PMU registers)"
msgstr "NT_PPC_PMU (регіÑтри PMU ppc)"
-#: readelf.c:18763
+#: readelf.c:19138
msgid "NT_PPC_TM_CGPR (ppc checkpointed GPR registers)"
msgstr "NT_PPC_TM_CGPR (контрольовані регіÑтри GPR ppc)"
-#: readelf.c:18765
+#: readelf.c:19140
msgid "NT_PPC_TM_CFPR (ppc checkpointed floating point registers)"
msgstr "NT_PPC_TM_CFPR (контрольовані регіÑтри чиÑел із рухомою крапкою ppc)"
-#: readelf.c:18767
+#: readelf.c:19142
msgid "NT_PPC_TM_CVMX (ppc checkpointed Altivec registers)"
msgstr "NT_PPC_TM_CVMX (контрольовані регіÑтри Altivec ppc)"
-#: readelf.c:18769
+#: readelf.c:19144
msgid "NT_PPC_TM_CVSX (ppc checkpointed VSX registers)"
msgstr "NT_PPC_TM_CVSX (контрольовані регіÑтри VSX ppc)"
-#: readelf.c:18771
+#: readelf.c:19146
msgid "NT_PPC_TM_SPR (ppc TM special purpose registers)"
msgstr "NT_PPC_TM_SPR (регіÑтри Ñпеціального Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ TM ppc)"
-#: readelf.c:18773
+#: readelf.c:19148
msgid "NT_PPC_TM_CTAR (ppc checkpointed TAR register)"
msgstr "NT_PPC_TM_CTAR (контрольований регіÑÑ‚Ñ€ TAR ppc)"
-#: readelf.c:18775
+#: readelf.c:19150
msgid "NT_PPC_TM_CPPR (ppc checkpointed PPR register)"
msgstr "NT_PPC_TM_CPPR (контрольований регіÑÑ‚Ñ€ PPR ppc)"
-#: readelf.c:18777
+#: readelf.c:19152
msgid "NT_PPC_TM_CDSCR (ppc checkpointed DSCR register)"
msgstr "NT_PPC_TM_CDSCR (контрольований регіÑÑ‚Ñ€ DSCR ppc)"
-#: readelf.c:18779
+#: readelf.c:19154
msgid "NT_386_TLS (x86 TLS information)"
msgstr "NT_386_TLS (дані TLS x86)"
-#: readelf.c:18781
+#: readelf.c:19156
msgid "NT_386_IOPERM (x86 I/O permissions)"
msgstr "NT_386_IOPERM (права доÑтупу на введеннÑ-Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ x86)"
-#: readelf.c:18783
+#: readelf.c:19158
msgid "NT_X86_XSTATE (x86 XSAVE extended state)"
msgstr "NT_X86_XSTATE (розширений Ñтан XSAVE x86)"
-#: readelf.c:18785
+#: readelf.c:19160
msgid "NT_X86_CET (x86 CET state)"
msgstr "NT_X86_CET (Ñтан CET x86)"
-#: readelf.c:18787
+#: readelf.c:19162
msgid "NT_S390_HIGH_GPRS (s390 upper register halves)"
msgstr "NT_S390_HIGH_GPRS (верхні половинки регіÑтрів s390)"
-#: readelf.c:18789
+#: readelf.c:19164
msgid "NT_S390_TIMER (s390 timer register)"
msgstr "NT_S390_TIMER (регіÑÑ‚Ñ€ таймера s390)"
-#: readelf.c:18791
+#: readelf.c:19166
msgid "NT_S390_TODCMP (s390 TOD comparator register)"
msgstr "NT_S390_TODCMP (регіÑÑ‚Ñ€ порівнювача TOD s390)"
-#: readelf.c:18793
+#: readelf.c:19168
msgid "NT_S390_TODPREG (s390 TOD programmable register)"
msgstr "NT_S390_TODPREG (програмований регіÑÑ‚Ñ€ TOD s390)"
-#: readelf.c:18795
+#: readelf.c:19170
msgid "NT_S390_CTRS (s390 control registers)"
msgstr "NT_S390_CTRS (керівні регіÑтри s390)"
-#: readelf.c:18797
+#: readelf.c:19172
msgid "NT_S390_PREFIX (s390 prefix register)"
msgstr "NT_S390_PREFIX (регіÑÑ‚Ñ€ префікÑа s390)"
-#: readelf.c:18799
+#: readelf.c:19174
msgid "NT_S390_LAST_BREAK (s390 last breaking event address)"
msgstr "NT_S390_LAST_BREAK (адреÑа оÑтанньої події із Ð¿ÐµÑ€ÐµÑ€Ð¸Ð²Ð°Ð½Ð½Ñ s390)"
-#: readelf.c:18801
+#: readelf.c:19176
msgid "NT_S390_SYSTEM_CALL (s390 system call restart data)"
msgstr "NT_S390_SYSTEM_CALL (дані перезапуÑку ÑиÑтемного виклику s390)"
-#: readelf.c:18803
+#: readelf.c:19178
msgid "NT_S390_TDB (s390 transaction diagnostic block)"
msgstr "NT_S390_TDB (діагноÑтичний блок транзакції s390)"
-#: readelf.c:18805
+#: readelf.c:19180
msgid "NT_S390_VXRS_LOW (s390 vector registers 0-15 upper half)"
msgstr "NT_S390_VXRS_LOW (Ð²ÐµÑ€Ñ…Ð½Ñ Ð¿Ð¾Ð»Ð¾Ð²Ð¸Ð½Ð° векторних регіÑтрів s390 0-15)"
-#: readelf.c:18807
+#: readelf.c:19182
msgid "NT_S390_VXRS_HIGH (s390 vector registers 16-31)"
msgstr "NT_S390_VXRS_HIGH (векторні регіÑтри s390 16-31)"
-#: readelf.c:18809
+#: readelf.c:19184
msgid "NT_S390_GS_CB (s390 guarded-storage registers)"
msgstr "NT_S390_GS_CB (регіÑтри захищеного Ñховища даних s390)"
-#: readelf.c:18811
+#: readelf.c:19186
msgid "NT_S390_GS_BC (s390 guarded-storage broadcast control)"
msgstr "NT_S390_GS_BC (ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ñ‚Ñ€Ð°Ð½ÑлÑцією захищеного Ñховища даних s390)"
-#: readelf.c:18813
+#: readelf.c:19188
msgid "NT_ARM_VFP (arm VFP registers)"
msgstr "NT_ARM_VFP (регіÑтри VFP arm)"
-#: readelf.c:18815
+#: readelf.c:19190
msgid "NT_ARM_TLS (AArch TLS registers)"
msgstr "NT_ARM_TLS (регіÑтри TLS AArch)"
-#: readelf.c:18817
+#: readelf.c:19192
msgid "NT_ARM_HW_BREAK (AArch hardware breakpoint registers)"
msgstr "NT_ARM_HW_BREAK (регіÑтри апаратної точки зупину AArch)"
-#: readelf.c:18819
+#: readelf.c:19194
msgid "NT_ARM_HW_WATCH (AArch hardware watchpoint registers)"
msgstr "NT_ARM_HW_WATCH (регіÑтри апаратної точки ÑпоÑÑ‚ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ AArch)"
-#: readelf.c:18821
+#: readelf.c:19196
msgid "NT_ARM_SVE (AArch SVE registers)"
msgstr "NT_ARM_SVE (регіÑтри SVE AArch)"
-#: readelf.c:18823
+#: readelf.c:19198
msgid "NT_ARM_PAC_MASK (AArch pointer authentication code masks)"
msgstr "NT_ARM_PAC_MASK (маÑки коду Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð²Ð°Ð½Ð½Ñ Ð²ÐºÐ°Ð·Ñ–Ð²Ð½Ð¸ÐºÑ–Ð² AArch)"
-#: readelf.c:18825
+#: readelf.c:19200
+msgid "NT_ARM_PACA_KEYS (ARM pointer authentication address keys)"
+msgstr "NT_ARM_PACA_KEYS (ключі Ð°Ð´Ñ€ÐµÑ Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð²Ð°Ð½Ð½Ñ Ð·Ð° вказівником ARM)"
+
+#: readelf.c:19202
+msgid "NT_ARM_PACG_KEYS (ARM pointer authentication generic keys)"
+msgstr "NT_ARM_PACG_KEYS (загальні ключі Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð²Ð°Ð½Ð½Ñ Ð·Ð° вказівником ARM)"
+
+#: readelf.c:19204
msgid "NT_ARM_TAGGED_ADDR_CTRL (AArch tagged address control)"
msgstr "NT_ARM_TAGGED_ADDR_CTRL (ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð¼Ñ–Ñ‡ÐµÐ½Ð¸Ð¼Ð¸ адреÑами AArch)"
-#: readelf.c:18827
+#: readelf.c:19206
+msgid "NT_ARM_PAC_ENABLED_KEYS (AArch64 pointer authentication enabled keys)"
+msgstr "NT_ARM_PAC_ENABLED_KEYS (увімкнені ключі Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð²Ð°Ð½Ð½Ñ Ð·Ð° вказівником AArch64)"
+
+#: readelf.c:19208
msgid "NT_ARC_V2 (ARC HS accumulator/extra registers)"
msgstr "NT_ARC_V2 (регіÑтри акумулÑтора/додаткові регіÑтри ARC HS)"
-#: readelf.c:18829
+#: readelf.c:19210
msgid "NT_RISCV_CSR (RISC-V control and status registers)"
msgstr "NT_RISCV_CSR (регіÑтри ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ñ– Ñтану RISC-V)"
-#: readelf.c:18831
+#: readelf.c:19212
msgid "NT_PSTATUS (pstatus structure)"
msgstr "NT_PSTATUS (Ñтруктура pstatus)"
-#: readelf.c:18833
+#: readelf.c:19214
msgid "NT_FPREGS (floating point registers)"
msgstr "NT_FPREGS (регіÑтри з плаваючою комою)"
-#: readelf.c:18835
+#: readelf.c:19216
msgid "NT_PSINFO (psinfo structure)"
msgstr "NT_PSINFO (Ñтруктура psinfo)"
-#: readelf.c:18837
+#: readelf.c:19218
msgid "NT_LWPSTATUS (lwpstatus_t structure)"
msgstr "NT_LWPSTATUS (Ñтруктура lwpstatus_t)"
-#: readelf.c:18839
+#: readelf.c:19220
msgid "NT_LWPSINFO (lwpsinfo_t structure)"
msgstr "NT_LWPSINFO (Ñтруктура lwpsinfo_t)"
-#: readelf.c:18841
+#: readelf.c:19222
msgid "NT_WIN32PSTATUS (win32_pstatus structure)"
msgstr "NT_WIN32PSTATUS (Ñтруктура win32_pstatus)"
-#: readelf.c:18843
+#: readelf.c:19224
msgid "NT_SIGINFO (siginfo_t data)"
msgstr "NT_SIGINFO (дані siginfo_t)"
-#: readelf.c:18845
+#: readelf.c:19226
msgid "NT_FILE (mapped files)"
msgstr "NT_FILE (пов'Ñзані файли)"
-#: readelf.c:18847
-msgid "NT_MEMTAG (memory tags)"
-msgstr "NT_MEMTAG (мітки пам'ÑÑ‚Ñ–)"
-
-#: readelf.c:18855
+#: readelf.c:19234
msgid "NT_VERSION (version)"
msgstr "NT_VERSION (верÑÑ–Ñ)"
-#: readelf.c:18857
+#: readelf.c:19236
msgid "NT_ARCH (architecture)"
msgstr "NT_ARCH (архітектура)"
-#: readelf.c:18859
+#: readelf.c:19238
msgid "OPEN"
msgstr "ВІДКРИТИ"
-#: readelf.c:18861
+#: readelf.c:19240
msgid "func"
msgstr "функціÑ"
-#: readelf.c:18863
+#: readelf.c:19242
msgid "GO BUILDID"
msgstr "GO BUILDID"
-#: readelf.c:18868 readelf.c:18987 readelf.c:19689 readelf.c:19857
-#: readelf.c:19934 readelf.c:20051
+#: readelf.c:19244
+msgid "FDO_PACKAGING_METADATA"
+msgstr "МЕТÐДÐÐІ_ПÐКУВÐÐÐЯ_FDO"
+
+#: readelf.c:19249 readelf.c:19368 readelf.c:20109 readelf.c:20277
+#: readelf.c:20374 readelf.c:20502
#, c-format
msgid "Unknown note type: (0x%08x)"
msgstr "Ðевідомий тип коментарÑ: (0x%08x)"
-#: readelf.c:18889
+#: readelf.c:19270
#, c-format
msgid " Cannot decode 64-bit note in 32-bit build\n"
msgstr " Ðеможливо декодувати 64-бітову нотатку у 32-бітовій збірці\n"
-#: readelf.c:18897
+#: readelf.c:19278
msgid " Malformed note - too short for header\n"
msgstr " Помилкове Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð¾Ñ‚Ð°Ñ‚ÐºÐ¸ — надто коротка Ð´Ð»Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ°\n"
-#: readelf.c:18906
+#: readelf.c:19287
msgid " Malformed note - does not end with \\0\n"
msgstr " Помилкове Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð¾Ñ‚Ð°Ñ‚ÐºÐ¸ — не завершуєтьÑÑ \\0\n"
-#: readelf.c:18919
+#: readelf.c:19300
msgid " Malformed note - too short for supplied file count\n"
msgstr " Помилкове Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð¾Ñ‚Ð°Ñ‚ÐºÐ¸ — надто коротка Ð´Ð»Ñ Ð½Ð°Ð´Ð°Ð½Ð¾Ñ— кількоÑÑ‚Ñ– файлів\n"
-#: readelf.c:18923
+#: readelf.c:19304
#, c-format
msgid " Page size: "
msgstr " Розмір Ñторінки: "
-#: readelf.c:18927
+#: readelf.c:19308
#, c-format
msgid " %*s%*s%*s\n"
msgstr " %*s%*s%*s\n"
-#: readelf.c:18928
+#: readelf.c:19309
msgid "Start"
msgstr "Початок"
-#: readelf.c:18929
+#: readelf.c:19310
msgid "End"
msgstr "Кінець"
-#: readelf.c:18930
+#: readelf.c:19311
msgid "Page Offset"
msgstr "ЗÑув Ñторінки"
-#: readelf.c:18938
+#: readelf.c:19319
msgid " Malformed note - filenames end too early\n"
msgstr " Помилкове Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð¾Ñ‚Ð°Ñ‚ÐºÐ¸ — назви файлів завершилиÑÑ Ð½Ð°Ð´Ñ‚Ð¾ рано\n"
-#: readelf.c:18970
+#: readelf.c:19351
msgid "NT_GNU_ABI_TAG (ABI version tag)"
msgstr "NT_GNU_ABI_TAG (теґ верÑÑ–Ñ— ABI)"
-#: readelf.c:18972
+#: readelf.c:19353
msgid "NT_GNU_HWCAP (DSO-supplied software HWCAP info)"
msgstr "NT_GNU_HWCAP (програмні дані щодо HWCAP, надані DSO)"
-#: readelf.c:18974
+#: readelf.c:19355
msgid "NT_GNU_BUILD_ID (unique build ID bitstring)"
msgstr "NT_GNU_BUILD_ID (бітовий Ñ€Ñдок унікального ідентифікатора збираннÑ)"
-#: readelf.c:18976
+#: readelf.c:19357
msgid "NT_GNU_GOLD_VERSION (gold version)"
msgstr "NT_GNU_GOLD_VERSION (верÑÑ–Ñ gold)"
-#: readelf.c:18978
+#: readelf.c:19359
msgid "NT_GNU_PROPERTY_TYPE_0"
msgstr "NT_GNU_PROPERTY_TYPE_0"
-#: readelf.c:18980
+#: readelf.c:19361
msgid "NT_GNU_BUILD_ATTRIBUTE_OPEN"
msgstr "NT_GNU_BUILD_ATTRIBUTE_OPEN"
-#: readelf.c:18982
+#: readelf.c:19363
msgid "NT_GNU_BUILD_ATTRIBUTE_FUNC"
msgstr "NT_GNU_BUILD_ATTRIBUTE_FUNC"
-#: readelf.c:19071 readelf.c:19202 readelf.c:19239
+#: readelf.c:19452 readelf.c:19583 readelf.c:19620
#, c-format
msgid "<None>"
msgstr "<немає>"
-#: readelf.c:19329
+#: readelf.c:19732
#, c-format
msgid " Properties: "
msgstr " ВлаÑтивоÑÑ‚Ñ–: "
-#: readelf.c:19333
+#: readelf.c:19736
#, c-format
msgid "<corrupt GNU_PROPERTY_TYPE, size = %#lx>\n"
msgstr "<пошкоджено GNU_PROPERTY_TYPE, розмір = %#lx>\n"
-#: readelf.c:19345
+#: readelf.c:19748
#, c-format
msgid "<corrupt descsz: %#lx>\n"
msgstr "<пошкоджено descsz: %#lx>\n"
-#: readelf.c:19356
+#: readelf.c:19759
#, c-format
msgid "<corrupt type (%#x) datasz: %#x>\n"
msgstr "<пошкоджено тип (%#x) розмір даних: %#x>\n"
-#: readelf.c:19378 readelf.c:19432 readelf.c:19454
+#: readelf.c:19781 readelf.c:19835 readelf.c:19857
#, c-format
msgid "x86 ISA used: <corrupt length: %#x> "
msgstr "ВикориÑтана ISA x86: <пошкоджено довжину: %#x> "
-#: readelf.c:19389 readelf.c:19443 readelf.c:19465
+#: readelf.c:19792 readelf.c:19846 readelf.c:19868
#, c-format
msgid "x86 ISA needed: <corrupt length: %#x> "
msgstr "Потрібна ISA x86: <пошкоджено довжину: %#x> "
-#: readelf.c:19400
+#: readelf.c:19803
#, c-format
msgid "x86 feature: <corrupt length: %#x> "
msgstr "МожливіÑÑ‚ÑŒ x86: <пошкоджено довжину: %#x> "
-#: readelf.c:19411
+#: readelf.c:19814
#, c-format
msgid "x86 feature used: <corrupt length: %#x> "
msgstr "ВикориÑтана можливіÑÑ‚ÑŒ x86: <пошкоджено довжину: %#x> "
-#: readelf.c:19422
+#: readelf.c:19825
#, c-format
msgid "x86 feature needed: <corrupt length: %#x> "
msgstr "Потрібна можливіÑÑ‚ÑŒ x86: <пошкоджено довжину: %#x> "
-#: readelf.c:19484 readelf.c:19498 readelf.c:19506 readelf.c:19520
+#: readelf.c:19887 readelf.c:19901 readelf.c:19909 readelf.c:19940
#, c-format
msgid "<corrupt length: %#x> "
msgstr "<пошкоджено довжину: %#x> "
-#: readelf.c:19496
+#: readelf.c:19899
#, c-format
msgid "stack size: "
msgstr "розмір Ñтека: "
-#: readelf.c:19516
+#: readelf.c:19922
+#, c-format
+msgid "1_needed: <corrupt length: %#x> "
+msgstr "1_needed: <пошкоджена довжина: %#x> "
+
+#: readelf.c:19936
#, c-format
msgid "UINT32_AND (%#x): "
msgstr "UINT32_AND (%#x): "
-#: readelf.c:19518
+#: readelf.c:19938
#, c-format
msgid "UINT32_OR (%#x): "
msgstr "UINT32_OR (%#x): "
-#: readelf.c:19530
+#: readelf.c:19950
#, c-format
msgid "<unknown type %#x data: "
msgstr "<невідомий тип %#x дані: "
-#: readelf.c:19532
+#: readelf.c:19952
#, c-format
msgid "<processor-specific type %#x data: "
msgstr "<Ñпецифічний Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑора тип %#x даних: "
-#: readelf.c:19534
+#: readelf.c:19954
#, c-format
msgid "<application-specific type %#x data: "
msgstr "<днаі Ñпецифічного Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ типу %#x: "
-#: readelf.c:19563
+#: readelf.c:19983
#, c-format
msgid " Build ID: "
msgstr " Ід. збираннÑ: "
-#: readelf.c:19578
+#: readelf.c:19998
#, c-format
msgid " <corrupt GNU_ABI_TAG>\n"
msgstr " <пошкоджений GNU_ABI_TAG>\n"
-#: readelf.c:19615
+#: readelf.c:20035
#, c-format
msgid " OS: %s, ABI: %ld.%ld.%ld\n"
msgstr " ОС: %s, ABI: %ld.%ld.%ld\n"
-#: readelf.c:19624
+#: readelf.c:20044
#, c-format
msgid " Version: "
msgstr " ВерÑÑ–Ñ: "
@@ -11613,292 +11804,317 @@ msgstr " ВерÑÑ–Ñ: "
#. is a series of entries, where each entry is a single byte followed
#. by a nul terminated string. The byte gives the bit number to test
#. if enabled in the bitmask.
-#: readelf.c:19640
+#: readelf.c:20060
#, c-format
msgid " Hardware Capabilities: "
msgstr " Ðпаратні можливоÑÑ‚Ñ–: "
-#: readelf.c:19643
+#: readelf.c:20063
msgid "<corrupt GNU_HWCAP>\n"
msgstr "<пошкоджений GNU_HWCAP>\n"
-#: readelf.c:19648
+#: readelf.c:20068
#, c-format
msgid "num entries: %ld, enabled mask: %lx\n"
msgstr "кть запиÑів: %ld, увімкнена маÑка: %lx\n"
-#: readelf.c:19664
+#: readelf.c:20084
#, c-format
msgid " Description data: "
msgstr " Дані опиÑу: "
-#: readelf.c:19682
+#: readelf.c:20102
msgid "Alignment of 8-byte objects"
msgstr "Ð’Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ 8-байтових об'єктів"
-#: readelf.c:19683
+#: readelf.c:20103
msgid "Sizeof double and long double"
msgstr "Розмір double і long double"
-#: readelf.c:19684
+#: readelf.c:20104
msgid "Type of FPU support needed"
msgstr "Потрібний тип підтримки FPU"
-#: readelf.c:19685
+#: readelf.c:20105
msgid "Use of SIMD instructions"
msgstr "ВикориÑÑ‚Ð°Ð½Ð½Ñ Ñ–Ð½Ñтрукцій SIMD"
-#: readelf.c:19686
+#: readelf.c:20106
msgid "Use of cache"
msgstr "ВикориÑÑ‚Ð°Ð½Ð½Ñ ÐºÐµÑˆÑƒ"
-#: readelf.c:19687
+#: readelf.c:20107
msgid "Use of MMU"
msgstr "ВикориÑÑ‚Ð°Ð½Ð½Ñ MMU"
-#: readelf.c:19723
+#: readelf.c:20143
#, c-format
msgid "4-bytes\n"
msgstr "4-байтові\n"
-#: readelf.c:19724
+#: readelf.c:20144
#, c-format
msgid "8-bytes\n"
msgstr "8-байтові\n"
-#: readelf.c:19731
+#: readelf.c:20151
#, c-format
msgid "FPU-2.0\n"
msgstr "FPU-2.0\n"
-#: readelf.c:19732
+#: readelf.c:20152
#, c-format
msgid "FPU-3.0\n"
msgstr "FPU-3.0\n"
-#: readelf.c:19741
+#: readelf.c:20161
#, c-format
msgid "yes\n"
msgstr "так\n"
-#: readelf.c:19751
+#: readelf.c:20171
#, c-format
msgid "unknown value: %x\n"
msgstr "невідоме значеннÑ: %x\n"
-#: readelf.c:19807
+#: readelf.c:20227
msgid "NT_THRMISC (thrmisc structure)"
msgstr "NT_THRMISC (Ñтруктура thrmisc)"
-#: readelf.c:19809
+#: readelf.c:20229
msgid "NT_PROCSTAT_PROC (proc data)"
msgstr "NT_PROCSTAT_PROC (дані процеÑу)"
-#: readelf.c:19811
+#: readelf.c:20231
msgid "NT_PROCSTAT_FILES (files data)"
msgstr "NT_PROCSTAT_FILES (дані файлів)"
-#: readelf.c:19813
+#: readelf.c:20233
msgid "NT_PROCSTAT_VMMAP (vmmap data)"
msgstr "NT_PROCSTAT_VMMAP (дані vmmap)"
-#: readelf.c:19815
+#: readelf.c:20235
msgid "NT_PROCSTAT_GROUPS (groups data)"
msgstr "NT_PROCSTAT_GROUPS (дані груп)"
-#: readelf.c:19817
+#: readelf.c:20237
msgid "NT_PROCSTAT_UMASK (umask data)"
msgstr "NT_PROCSTAT_UMASK (дані umask)"
-#: readelf.c:19819
+#: readelf.c:20239
msgid "NT_PROCSTAT_RLIMIT (rlimit data)"
msgstr "NT_PROCSTAT_RLIMIT (дані rlimit)"
-#: readelf.c:19821
+#: readelf.c:20241
msgid "NT_PROCSTAT_OSREL (osreldate data)"
msgstr "NT_PROCSTAT_OSREL (дані osreldate)"
-#: readelf.c:19823
+#: readelf.c:20243
msgid "NT_PROCSTAT_PSSTRINGS (ps_strings data)"
msgstr "NT_PROCSTAT_PSSTRINGS (дані ps_strings)"
-#: readelf.c:19825
+#: readelf.c:20245
msgid "NT_PROCSTAT_AUXV (auxv data)"
msgstr "NT_PROCSTAT_AUXV (дані auxv)"
-#: readelf.c:19827
+#: readelf.c:20247
msgid "NT_PTLWPINFO (ptrace_lwpinfo structure)"
msgstr "NT_PTLWPINFO (Ñтруктура ptrace_lwpinfo)"
#. NetBSD core "procinfo" structure.
-#: readelf.c:19841
+#: readelf.c:20261
msgid "NetBSD procinfo structure"
msgstr "Структура procinfo NetBSD"
-#: readelf.c:19844
+#: readelf.c:20264
msgid "NetBSD ELF auxiliary vector data"
msgstr "Допоміжні векторні дані ELF NetBSD"
-#: readelf.c:19847
+#: readelf.c:20267
msgid "PT_LWPSTATUS (ptrace_lwpstatus structure)"
msgstr "PT_LWPSTATUS (Ñтруктура ptrace_lwpstatus)"
-#: readelf.c:19876 readelf.c:19893 readelf.c:19907
+#: readelf.c:20296 readelf.c:20313 readelf.c:20327
msgid "PT_GETREGS (reg structure)"
msgstr "PT_GETREGS (Ñтруктура reg)"
-#: readelf.c:19878 readelf.c:19895 readelf.c:19909
+#: readelf.c:20298 readelf.c:20315 readelf.c:20329
msgid "PT_GETFPREGS (fpreg structure)"
msgstr "PT_GETFPREGS (Ñтруктура fpreg)"
-#: readelf.c:19891
+#: readelf.c:20311
msgid "PT___GETREGS40 (old reg structure)"
msgstr "PT___GETREGS40 (Ñтара Ñтруктура reg)"
-#: readelf.c:19928
+#: readelf.c:20346
+msgid "OpenBSD procinfo structure"
+msgstr "Структура procinfo OpenBSD"
+
+#: readelf.c:20348
+msgid "OpenBSD ELF auxiliary vector data"
+msgstr "Допоміжні векторні дані ELF OpenBSD"
+
+#: readelf.c:20350
+msgid "OpenBSD regular registers"
+msgstr "Звичайні регіÑтри OpenBSD"
+
+#: readelf.c:20352
+msgid "OpenBSD floating point registers"
+msgstr "РегіÑтри з рухомою крапкою OpenBSD"
+
+#: readelf.c:20354
+msgid "OpenBSD window cookie"
+msgstr "Кука вікна OpenBSD"
+
+#: readelf.c:20368
msgid "NT_STAPSDT (SystemTap probe descriptors)"
msgstr "NT_STAPSDT (деÑкриптори Ð·Ð¾Ð½Ð´ÑƒÐ²Ð°Ð½Ð½Ñ SystemTap)"
-#: readelf.c:19996
+#: readelf.c:20436
#, c-format
msgid " Provider: %s\n"
msgstr " ПоÑтачальник: %s\n"
-#: readelf.c:19997
+#: readelf.c:20437
#, c-format
msgid " Name: %s\n"
msgstr " Ðазва: %s\n"
-#: readelf.c:19998
+#: readelf.c:20438
#, c-format
msgid " Location: "
msgstr " РозташуваннÑ: "
-#: readelf.c:20000
+#: readelf.c:20440
#, c-format
msgid ", Base: "
msgstr ", ОÑнова: "
-#: readelf.c:20002
+#: readelf.c:20442
#, c-format
msgid ", Semaphore: "
msgstr ", Семафор: "
-#: readelf.c:20005
+#: readelf.c:20445
#, c-format
msgid " Arguments: %s\n"
msgstr " Ðргументи: %s\n"
-#: readelf.c:20010
+#: readelf.c:20450
#, c-format
msgid " <corrupt - note is too small>\n"
msgstr " <пошкоджено — надто мала нотатка>\n"
-#: readelf.c:20011
+#: readelf.c:20451
msgid "corrupt stapdt note - the data size is too small\n"
msgstr "пошкоджено нотатку stapdt - надто малий розмір даних\n"
-#: readelf.c:20023
+#: readelf.c:20460
+#, c-format
+msgid " Packaging Metadata: %.*s\n"
+msgstr " Метадані пакуваннÑ: %.*s\n"
+
+#: readelf.c:20474
msgid "NT_VMS_MHD (module header)"
msgstr "NT_VMS_MHD (заголовок модулÑ)"
-#: readelf.c:20025
+#: readelf.c:20476
msgid "NT_VMS_LNM (language name)"
msgstr "NT_VMS_LNM (назва мови)"
-#: readelf.c:20027
+#: readelf.c:20478
msgid "NT_VMS_SRC (source files)"
msgstr "NT_VMS_SRC (файли коду)"
-#: readelf.c:20031
+#: readelf.c:20482
msgid "NT_VMS_EIDC (consistency check)"
msgstr "NT_VMS_EIDC (перевірка ціліÑноÑÑ‚Ñ–)"
-#: readelf.c:20033
+#: readelf.c:20484
msgid "NT_VMS_FPMODE (FP mode)"
msgstr "NT_VMS_FPMODE (режим FP)"
-#: readelf.c:20037
+#: readelf.c:20488
msgid "NT_VMS_IMGNAM (image name)"
msgstr "NT_VMS_IMGNAM (назва образу)"
-#: readelf.c:20039
+#: readelf.c:20490
msgid "NT_VMS_IMGID (image id)"
msgstr "NT_VMS_IMGID (ідентифікатор образу)"
-#: readelf.c:20041
+#: readelf.c:20492
msgid "NT_VMS_LINKID (link id)"
msgstr "NT_VMS_LINKID (ідентифікатор компонуваннÑ)"
-#: readelf.c:20043
+#: readelf.c:20494
msgid "NT_VMS_IMGBID (build id)"
msgstr "NT_VMS_IMGBID (ідентифікатор збираннÑ)"
-#: readelf.c:20045
+#: readelf.c:20496
msgid "NT_VMS_GSTNAM (sym table name)"
msgstr "NT_VMS_GSTNAM (назва таблиці Ñимволів)"
-#: readelf.c:20072
+#: readelf.c:20523
#, c-format
msgid " Creation date : %.17s\n"
msgstr " Дата ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ : %.17s\n"
-#: readelf.c:20073
+#: readelf.c:20524
#, c-format
msgid " Last patch date: %.17s\n"
msgstr " Дата оÑтаннього латаннÑ: %.17s\n"
-#: readelf.c:20076
+#: readelf.c:20527
#, c-format
msgid " Module name : %s\n"
msgstr " Ðазва Ð¼Ð¾Ð´ÑƒÐ»Ñ : %s\n"
-#: readelf.c:20078
+#: readelf.c:20529
#, c-format
msgid " Module version : %s\n"
msgstr " ВерÑÑ–Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñ : %s\n"
-#: readelf.c:20080 readelf.c:20085
+#: readelf.c:20531 readelf.c:20536
#, c-format
msgid " Module version : <missing>\n"
msgstr " ВерÑÑ–Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñ : <пропущено>\n"
-#: readelf.c:20084
+#: readelf.c:20535
#, c-format
msgid " Module name : <missing>\n"
msgstr " Ðазва Ð¼Ð¾Ð´ÑƒÐ»Ñ : <пропущено>\n"
-#: readelf.c:20090
+#: readelf.c:20541
#, c-format
msgid " Language: %.*s\n"
msgstr " Мова: %.*s\n"
-#: readelf.c:20095
+#: readelf.c:20546
#, c-format
msgid " Floating Point mode: "
msgstr " Режим рухомої крапки: "
-#: readelf.c:20105
+#: readelf.c:20556
#, c-format
msgid " Link time: "
msgstr " Ð§Ð°Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ: "
-#: readelf.c:20116
+#: readelf.c:20567
#, c-format
msgid " Patch time: "
msgstr " Ð§Ð°Ñ Ð»Ð°Ñ‚Ð°Ð½Ð½Ñ: "
-#: readelf.c:20130
+#: readelf.c:20581
#, c-format
msgid " Major id: %u, minor id: %u\n"
msgstr " ОÑновний ід.: %u, допоміжний ід.: %u\n"
-#: readelf.c:20133
+#: readelf.c:20584
#, c-format
msgid " Last modified : "
msgstr " ОÑтанні зміни : "
-#: readelf.c:20136
+#: readelf.c:20587
#, c-format
msgid ""
"\n"
@@ -11907,198 +12123,198 @@ msgstr ""
"\n"
" Прапорці комонуваннÑ: "
-#: readelf.c:20139
+#: readelf.c:20590
#, c-format
msgid " Header flags: 0x%08x\n"
msgstr " Прапорці заголовка: 0x%08x\n"
-#: readelf.c:20141
+#: readelf.c:20592
#, c-format
msgid " Image id : %.*s\n"
msgstr " Ід. образу : %.*s\n"
-#: readelf.c:20146
+#: readelf.c:20597
#, c-format
msgid " Image name: %.*s\n"
msgstr " Ðазва образу: %.*s\n"
-#: readelf.c:20150
+#: readelf.c:20601
#, c-format
msgid " Global symbol table name: %.*s\n"
msgstr " Ðазва загальної таблиці Ñимволів: %.*s\n"
-#: readelf.c:20154
+#: readelf.c:20605
#, c-format
msgid " Image id: %.*s\n"
msgstr " Ід. образу: %.*s\n"
-#: readelf.c:20158
+#: readelf.c:20609
#, c-format
msgid " Linker id: %.*s\n"
msgstr " Ідентифікатор компонувальника: %.*s\n"
-#: readelf.c:20168
+#: readelf.c:20619
#, c-format
msgid " <corrupt - data size is too small>\n"
msgstr " <пошкоджено - надто малий розмір даних>\n"
-#: readelf.c:20169
+#: readelf.c:20620
msgid "corrupt IA64 note: data size is too small\n"
msgstr "пошкоджено нотатку IA64: надто малий розмір даних\n"
-#: readelf.c:20336 readelf.c:20344
+#: readelf.c:20787 readelf.c:20795
#, c-format
msgid " Applies to region from %#lx to %#lx\n"
msgstr " ЗаÑтоÑовуєтьÑÑ Ð´Ð¾ облаÑÑ‚Ñ– від %#lx до %#lx\n"
-#: readelf.c:20339 readelf.c:20346
+#: readelf.c:20790 readelf.c:20797
#, c-format
msgid " Applies to region from %#lx\n"
msgstr " ЗаÑтоÑовуєтьÑÑ Ð´Ð¾ облаÑÑ‚Ñ– від %#lx\n"
-#: readelf.c:20366
+#: readelf.c:20817
#, c-format
msgid " <invalid description size: %lx>\n"
msgstr " <некоректний розмір опиÑу: %lx>\n"
-#: readelf.c:20367
+#: readelf.c:20818
#, c-format
msgid " <invalid descsz>"
msgstr " <некоректний descsz>"
-#: readelf.c:20393
+#: readelf.c:20844
#, c-format
msgid "Gap in build notes detected from %#lx to %#lx\n"
msgstr "ВиÑвлено прогалину у нотатках щодо збираннÑ, з %#lx до %#lx\n"
-#: readelf.c:20396 readelf.c:20407
+#: readelf.c:20847 readelf.c:20858
#, c-format
msgid " Applies to region from %#lx"
msgstr " ЗаÑтоÑовуєтьÑÑ Ð´Ð¾ облаÑÑ‚Ñ– від %#lx"
-#: readelf.c:20401 readelf.c:20412
+#: readelf.c:20852 readelf.c:20863
#, c-format
msgid " to %#lx"
msgstr " до %#lx"
-#: readelf.c:20418
+#: readelf.c:20869
#, c-format
msgid " (%s)"
msgstr " (%s)"
-#: readelf.c:20439 readelf.c:20454
+#: readelf.c:20890 readelf.c:20905
#, c-format
msgid "corrupt name field in GNU build attribute note: size = %ld\n"
msgstr "пошкоджене поле назви у нотатці атрибута Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ GNU: розмір = %ld\n"
-#: readelf.c:20440 readelf.c:20455
+#: readelf.c:20891 readelf.c:20906
msgid " <corrupt name>"
msgstr " <пошкоджено назву>"
-#: readelf.c:20474
+#: readelf.c:20925
#, c-format
msgid "unrecognised attribute type in name field: %d\n"
msgstr "невідомий тип атрибута у полі назви: %d\n"
-#: readelf.c:20475
+#: readelf.c:20926
msgid "<unknown name type>"
msgstr "<невідомий тип назви>"
-#: readelf.c:20485
+#: readelf.c:20936
msgid "<version>"
msgstr "<верÑÑ–Ñ>"
-#: readelf.c:20490
+#: readelf.c:20941
msgid "<stack prot>"
msgstr "<prot Ñтека>"
-#: readelf.c:20495
+#: readelf.c:20946
msgid "<relro>"
msgstr "<relro>"
-#: readelf.c:20500
+#: readelf.c:20951
msgid "<stack size>"
msgstr "<розмір Ñтека>"
-#: readelf.c:20505
+#: readelf.c:20956
msgid "<tool>"
msgstr "<інÑтрумент>"
-#: readelf.c:20510
+#: readelf.c:20961
msgid "<ABI>"
msgstr "<ABI>"
-#: readelf.c:20515
+#: readelf.c:20966
msgid "<PIC>"
msgstr "<PIC>"
-#: readelf.c:20520
+#: readelf.c:20971
msgid "<short enum>"
msgstr "<короткий enum>"
-#: readelf.c:20539
+#: readelf.c:20990
#, c-format
msgid "unrecognised byte in name field: %d\n"
msgstr "нерозпізнаний байт у полі назви: %d\n"
-#: readelf.c:20540
+#: readelf.c:20991
#, c-format
msgid "<unknown:_%d>"
msgstr "<невідомо:_%d>"
-#: readelf.c:20552
+#: readelf.c:21003
#, c-format
msgid "attribute does not have an expected type (%c)\n"
msgstr "атрибут не належить до очікуваного типу (%c)\n"
-#: readelf.c:20556
+#: readelf.c:21007
#, c-format
msgid "corrupt name field: namesz: %lu but parsing gets to %ld\n"
msgstr "пошкоджене поле назви: namesz: %lu, але обробка дає %ld\n"
-#: readelf.c:20583
+#: readelf.c:21034
#, c-format
msgid "corrupt numeric name field: too many bytes in the value: %x\n"
msgstr "пошкоджене поле назви чиÑлового значеннÑ: забагато байтів у значенні: %x\n"
-#: readelf.c:20755
+#: readelf.c:21212
#, c-format
msgid " description data: "
msgstr " дані опиÑу: "
-#: readelf.c:20797
+#: readelf.c:21254
msgid "notes"
msgstr "коментар"
-#: readelf.c:20809
+#: readelf.c:21266
#, c-format
msgid "Displaying notes found in: %s\n"
msgstr "Виводимо нотатки, Ñкі знайдено у %s\n"
-#: readelf.c:20811
+#: readelf.c:21268
#, c-format
msgid "Displaying notes found at file offset 0x%08lx with length 0x%08lx:\n"
msgstr "Виводимо нотатки, знайдені за зÑувом 0x%08lx у файлі, довжина: 0x%08lx:\n"
-#: readelf.c:20823
+#: readelf.c:21280
#, c-format
msgid "Corrupt note: alignment %ld, expecting 4 or 8\n"
msgstr "Пошкоджена нотатка: Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ %ld, а мало бути 4 або 8\n"
-#: readelf.c:20829
+#: readelf.c:21286
#, c-format
msgid " %-20s %-10s\tDescription\n"
msgstr " %-20s %-10s\tОпиÑ\n"
-#: readelf.c:20829
+#: readelf.c:21286
msgid "Owner"
msgstr "ВлаÑник"
-#: readelf.c:20829
+#: readelf.c:21286
msgid "Data size"
msgstr "Розмір даних"
-#: readelf.c:20847 readelf.c:20876
+#: readelf.c:21304 readelf.c:21333
#, c-format
msgid "Corrupt note: only %ld byte remains, not enough for a full note\n"
msgid_plural "Corrupt note: only %ld bytes remain, not enough for a full note\n"
@@ -12107,25 +12323,25 @@ msgstr[1] "Пошкоджена нотатка: залишилоÑÑ %ld байÑ
msgstr[2] "Пошкоджена нотатка: залишилоÑÑ %ld байтів, недоÑтатньо Ð´Ð»Ñ Ð¿Ð¾Ð²Ð½Ð¾Ñ†Ñ–Ð½Ð½Ð¾Ñ— нотатки\n"
msgstr[3] "Пошкоджена нотатка: залишивÑÑ %ld байт, недоÑтатньо Ð´Ð»Ñ Ð¿Ð¾Ð²Ð½Ð¾Ñ†Ñ–Ð½Ð½Ð¾Ñ— нотатки\n"
-#: readelf.c:20904
+#: readelf.c:21361
#, c-format
msgid "note with invalid namesz and/or descsz found at offset 0x%lx\n"
msgstr "за зÑувом 0x%lx виÑвлено нотатку з некоректними значеннÑми namesz або descsz\n"
-#: readelf.c:20906
+#: readelf.c:21363
#, c-format
msgid " type: 0x%lx, namesize: 0x%08lx, descsize: 0x%08lx, alignment: %u\n"
msgstr " тип: 0x%lx, розмір назви: 0x%08lx, розмір опиÑу: 0x%08lx, вирівнюваннÑ: %u\n"
-#: readelf.c:20924
+#: readelf.c:21381
msgid "Out of memory allocating space for inote name\n"
msgstr "Бракує пам'ÑÑ‚Ñ– при розподілі міÑÑ†Ñ Ð´Ð»Ñ Ð½Ð°Ð·Ð²Ð¸ inote\n"
-#: readelf.c:20984
+#: readelf.c:21441
msgid "v850 notes"
msgstr "Ðотатки щодо v850"
-#: readelf.c:20991
+#: readelf.c:21448
#, c-format
msgid ""
"\n"
@@ -12134,42 +12350,42 @@ msgstr ""
"\n"
"Показуємо вміÑÑ‚ розділу нотаток Renesas V850 зі зÑувом 0x%lx Ñ– довжиною 0x%lx:\n"
-#: readelf.c:21008
+#: readelf.c:21465
#, c-format
msgid "Corrupt note: name size is too big: %lx\n"
msgstr "Пошкоджена нотатка: розмір назви є надто великим: %lx\n"
-#: readelf.c:21018
+#: readelf.c:21475
#, c-format
msgid "corrupt descsz found in note at offset 0x%lx\n"
msgstr "виÑвлено пошкоджене Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ descsz у нотатці зі зÑувом 0x%lx\n"
-#: readelf.c:21020 readelf.c:21033
+#: readelf.c:21477 readelf.c:21490
#, c-format
msgid " type: 0x%lx, namesize: 0x%lx, descsize: 0x%lx\n"
msgstr " тип: 0x%lx, розмір назви: 0x%lx, розмір опиÑу: 0x%lx\n"
-#: readelf.c:21031
+#: readelf.c:21488
#, c-format
msgid "corrupt namesz found in note at offset 0x%lx\n"
msgstr "виÑвлено пошкоджене Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ namesz у нотатці зі зÑувом 0x%lx\n"
-#: readelf.c:21110
+#: readelf.c:21567
#, c-format
msgid "No notes found in linked file '%s'.\n"
msgstr "У пов'Ñзаному файлі не знайдено нотаток «%s».\n"
-#: readelf.c:21113
+#: readelf.c:21570
#, c-format
msgid "No notes found file.\n"
msgstr "У файлі не знайдено нотаток.\n"
-#: readelf.c:21122
+#: readelf.c:21579
#, c-format
msgid " Unknown GNU attribute: %s\n"
msgstr " Ðевідомий атрибут GNU: %s\n"
-#: readelf.c:21270
+#: readelf.c:21727
msgid ""
"This instance of readelf has been built without support for a\n"
"64 bit data type and so it cannot read 64 bit ELF files.\n"
@@ -12177,12 +12393,12 @@ msgstr ""
"Ð¦Ñ ÐºÐ¾Ð¿Ñ–Ñ readelf була Ñтворена без підтримки 64-бітного типу\n"
"даних, і тому вона не може читати 64-бітні файли ELF.\n"
-#: readelf.c:21440
+#: readelf.c:21897
#, c-format
msgid "%s: Failed to read file header\n"
msgstr "%s: Помилка при читанні заголовка файла\n"
-#: readelf.c:21455
+#: readelf.c:21912
#, c-format
msgid ""
"\n"
@@ -12191,27 +12407,27 @@ msgstr ""
"\n"
"Файл: %s\n"
-#: readelf.c:21616
+#: readelf.c:22073
#, c-format
msgid "%s: unable to dump the index as none was found\n"
msgstr "%s: не вдалоÑÑ Ñтворити дамп покажчика, оÑкільки такого не було виÑвлено\n"
-#: readelf.c:21623
+#: readelf.c:22080
#, c-format
msgid "Index of archive %s: (%lu entries, 0x%lx bytes in the symbol table)\n"
msgstr "Покажчик архіву %s: (у таблиці Ñимволів запиÑів: %lu, байтів: 0x%lx)\n"
-#: readelf.c:21647
+#: readelf.c:22104
#, c-format
msgid "Contents of binary %s at offset "
msgstr "ВміÑÑ‚ бінарного %s за зÑувом "
-#: readelf.c:21659
+#: readelf.c:22116
#, c-format
msgid "%s: end of the symbol table reached before the end of the index\n"
msgstr "%s: Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ñимволів завершилаÑÑ Ð´Ð¾ ÐºÑ–Ð½Ñ†Ñ Ð¿Ð¾ÐºÐ°Ð¶Ñ‡Ð¸ÐºÐ°\n"
-#: readelf.c:21678
+#: readelf.c:22135
#, c-format
msgid "%s: %ld byte remains in the symbol table, but without corresponding entries in the index table\n"
msgid_plural "%s: %ld bytes remain in the symbol table, but without corresponding entries in the index table\n"
@@ -12220,45 +12436,45 @@ msgstr[1] "%s: у таблиці Ñимволів залишилоÑÑ %ld баÐ
msgstr[2] "%s: у таблиці Ñимволів залишилоÑÑ %ld байтів без відповідних запиÑів у таблиці індекÑів\n"
msgstr[3] "%s: у таблиці Ñимволів залишивÑÑ %ld байт без відповідних запиÑів у таблиці індекÑів\n"
-#: readelf.c:21691
+#: readelf.c:22148
#, c-format
msgid "%s: failed to seek back to start of object files in the archive\n"
msgstr "%s: не вдалоÑÑ Ð¿Ð¾Ð²ÐµÑ€Ð½ÑƒÑ‚Ð¸ позицію до початку об'єктних файлів у архіві\n"
-#: readelf.c:21785 readelf.c:21904
+#: readelf.c:22240 readelf.c:22359
#, c-format
msgid "Input file '%s' is not readable.\n"
msgstr "Вхідний файл '%s' Ñ” непридатним до читаннÑ.\n"
-#: readelf.c:21813
+#: readelf.c:22268
#, c-format
msgid "%s: contains corrupt thin archive: %s\n"
msgstr "%s: міÑтить пошкоджений тонкий архів: %s\n"
-#: readelf.c:21831
+#: readelf.c:22286
#, c-format
msgid "%s: failed to seek to archive member.\n"
msgstr "%s: не вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ Ð¿Ð¾Ð·Ð¸Ñ†Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ Ð½Ð° член архіву.\n"
-#: readelf.c:21896
+#: readelf.c:22351
msgid "Out of memory allocating file data structure\n"
msgstr "Бракує пам'ÑÑ‚Ñ– при розподілі міÑÑ†Ñ Ð´Ð»Ñ Ñтруктури даних файла\n"
-#: readelf.c:21933
+#: readelf.c:22388
#, c-format
msgid "File %s is not an archive so its index cannot be displayed.\n"
msgstr "Файл %s не є архівом, отже його покажчик не може бути показано.\n"
-#: readelf.c:22004
+#: readelf.c:22459
msgid "Nothing to do.\n"
msgstr "Ðемає що виконувати.\n"
-#: rename.c:198
+#: rename.c:200
#, c-format
msgid "%s: cannot set time: %s"
msgstr "%s: неможливо вÑтановити чаÑ: %s"
-#: rename.c:217
+#: rename.c:219
#, c-format
msgid "unable to copy file '%s'; reason: %s"
msgstr "не вдалоÑÑ Ñкопіювати файл «%s»; причина: %s"
@@ -12870,77 +13086,77 @@ msgstr "Ðомер файла типу %d за межами діапазону\n
msgid "Type index number %d out of range\n"
msgstr "Ðомер індекÑу типу %d за межами діапазону\n"
-#: stabs.c:3506
+#: stabs.c:3507
#, c-format
msgid "Unrecognized XCOFF type %d\n"
msgstr "Ðерозпізнаний тип XCOFF %d\n"
-#: stabs.c:3799
+#: stabs.c:3798
#, c-format
msgid "bad mangled name `%s'\n"
msgstr "некоректна Ñкорегована назва `%s'\n"
-#: stabs.c:3894
+#: stabs.c:3893
#, c-format
msgid "no argument types in mangled string\n"
msgstr "немає типів аргументів у Ñкорегованому Ñ€Ñдку\n"
-#: stabs.c:5242
+#: stabs.c:5241
#, c-format
msgid "Demangled name is not a function\n"
msgstr "Декодована назва не є функцією\n"
-#: stabs.c:5284
+#: stabs.c:5283
#, c-format
msgid "Unexpected type in v3 arglist demangling\n"
msgstr "Ðеочікуваний тип при декодуванні v3 arglist\n"
-#: stabs.c:5356
+#: stabs.c:5355
#, c-format
msgid "Unrecognized demangle component %d\n"
msgstr "Ðерозпізнаний компонент Ð´ÐµÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ %d\n"
-#: stabs.c:5408
+#: stabs.c:5407
#, c-format
msgid "Failed to print demangled template\n"
msgstr "Помилка при виводі декодованого шаблону\n"
-#: stabs.c:5488
+#: stabs.c:5487
#, c-format
msgid "Couldn't get demangled builtin type\n"
msgstr "Ðеможливо отримати декодований вбудований тип\n"
-#: stabs.c:5537
+#: stabs.c:5536
#, c-format
msgid "Unexpected demangled varargs\n"
msgstr "Ðеочікуваний декодований varargs\n"
-#: stabs.c:5544
+#: stabs.c:5543
#, c-format
msgid "Unrecognized demangled builtin type\n"
msgstr "Ðеочікуваний декодований вбудований тип\n"
-#: strings.c:198 strings.c:265
+#: strings.c:229 strings.c:316
#, c-format
msgid "invalid integer argument %s"
msgstr "неправильний ціле чиÑло у аргументі %s"
-#: strings.c:268
+#: strings.c:319
#, c-format
msgid "invalid minimum string length %d"
msgstr "некоректна мінімальна довжина Ñ€Ñдка, %d"
-#: strings.c:339
+#: strings.c:390
#, c-format
msgid "%s: Reading section %s failed: %s"
msgstr "%s: не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ розділ %s: %s"
-#: strings.c:678
+#: strings.c:1313
#, c-format
msgid " Display printable strings in [file(s)] (stdin by default)\n"
msgstr " Ð’Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð¸Ñ… Ð´Ð»Ñ Ð´Ñ€ÑƒÐºÑƒ Ñ€Ñдків у [файл(ах)] (типово stdin)\n"
-#: strings.c:682
+#: strings.c:1317
#, c-format
msgid ""
" -a - --all Scan the entire file, not just the data section [default]\n"
@@ -12949,7 +13165,7 @@ msgstr ""
" -a - --all Ñканувати увеÑÑŒ файл, а не лише розділ даних [типово]\n"
" -d --data Ñканувати лише розділи даних у файлі\n"
-#: strings.c:686
+#: strings.c:1321
#, c-format
msgid ""
" -a - --all Scan the entire file, not just the data section\n"
@@ -12958,32 +13174,36 @@ msgstr ""
" -a - --all Ñканувати увеÑÑŒ файл, а не лише розділ даних\n"
" -d --data Ñканувати лише розділи даних у файлі [типово]\n"
-#: strings.c:690
+#: strings.c:1325
#, c-format
msgid ""
" -f --print-file-name Print the name of the file before each string\n"
-" -n --bytes=[number] Locate & print any NUL-terminated sequence of at\n"
-" -<number> least [number] characters (default 4).\n"
+" -n <number> Locate & print any sequence of at least <number>\n"
+" --bytes=<number> displayable characters. (The default is 4).\n"
" -t --radix={o,d,x} Print the location of the string in base 8, 10 or 16\n"
" -w --include-all-whitespace Include all whitespace as valid string characters\n"
" -o An alias for --radix=o\n"
" -T --target=<BFDNAME> Specify the binary file format\n"
" -e --encoding={s,S,b,l,B,L} Select character size and endianness:\n"
" s = 7-bit, S = 8-bit, {b,l} = 16-bit, {B,L} = 32-bit\n"
+" --unicode={default|show|invalid|hex|escape|highlight}\n"
+" -U {d|s|i|x|e|h} Specify how to treat UTF-8 encoded unicode characters\n"
" -s --output-separator=<string> String used to separate strings in output.\n"
" @<file> Read options from <file>\n"
" -h --help Display this information\n"
" -v -V --version Print the program's version number\n"
msgstr ""
-" -f --print-file-name Ð’Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð½Ð°Ð·Ð²Ð¸ файла перед кожним Ñ€Ñдком\n"
-" -n --bytes=[чиÑло] ВиÑÐ²Ð»ÐµÐ½Ð½Ñ Ñ‚Ð° вивід будь-Ñких поÑлідовноÑтей із завершальним\n"
-" -<чиÑло> нулем довжиною у [чиÑло] Ñимволів (типово 4).\n"
+" -f --print-file-name вивеÑти назву файла перед кожним Ñ€Ñдком\n"
+" -n <чиÑло> знайти Ñ– вивеÑти уÑÑ– поÑлідовноÑÑ‚Ñ– з принаймні <чиÑло>\n"
+" --bytes=<чиÑло> показаних Ñимволів. (типовим значеннÑм Ñ” 4).\n"
" -t --radix={o,d,x} Ð’Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ Ñ€Ñдка у оÑнові чиÑÐ»ÐµÐ½Ð½Ñ 8, 10 або 16\n"
" -w --include-all-whitespace Включити уÑÑ– пробіли Ñк чинні Ñимволи Ñ€Ñдка\n"
" -o ПÑевдонім Ð´Ð»Ñ --radix=o\n"
" -T --target=<BFD-ÐÐЗВÐ> Ð’ÐºÐ°Ð·ÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ñƒ двійкового файла\n"
" -e --encoding={s,S,b,l,B,L} Вибір розміру Ñимволу та порÑдку байтів:\n"
" s = 7-біт, S = 8-біт, {b,l} = 16-біт, {B,L} = 32-біт\n"
+" --unicode={default|show|invalid|hex|escape|highlight}\n"
+" -U {d|s|i|x|e|h} вказати ÑпоÑіб обробки Ñимволів unicode у кодуванні UTF-8\n"
" -s --output-separator=<Ñ€Ñдок> РÑдок Ð´Ð»Ñ Ð²Ñ–Ð´Ð¾ÐºÑ€ÐµÐ¼Ð»ÐµÐ½Ð½Ñ Ñ€Ñдків у виведених даних.\n"
" @<файл> Читати ключі з <файла>\n"
" -h --help Ð’Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ñ†Ñ–Ñ”Ñ— інформації\n"
@@ -12993,54 +13213,55 @@ msgstr ""
msgid "*undefined*"
msgstr "*не визначено*"
-#: sysdump.c:57
+#. PR 28564
+#: sysdump.c:57 sysdump.c:66
msgid "*corrupt*"
msgstr "*пошкоджено*"
-#: sysdump.c:125
+#: sysdump.c:131
#, c-format
msgid "SUM IS %x\n"
msgstr "СУМРДОРІВÐЮЄ %x\n"
#. PR 17512: file: id:000001,src:000002,op:flip1,pos:45.
#. Prevent infinite loops re-reading beyond the end of the buffer.
-#: sysdump.c:163
+#: sysdump.c:169
msgid "ICE: getINT: Out of buffer space"
msgstr "ICE: getINT: вихід за межі проÑтору буфера"
-#: sysdump.c:188
+#: sysdump.c:194
#, c-format
msgid "Unsupported read size: %d"
msgstr "Ðепідтримуваний розмір читаннÑ: %d"
-#: sysdump.c:499
+#: sysdump.c:505
#, c-format
msgid "GOT A %x\n"
msgstr "ОТРИМÐÐО %x\n"
-#: sysdump.c:517
+#: sysdump.c:523
#, c-format
msgid "WANTED %x!!\n"
msgstr "ПОТРІБÐЕ %x!!\n"
-#: sysdump.c:535
+#: sysdump.c:541
msgid "SYMBOL INFO"
msgstr "ДÐÐІ СИМВОЛУ"
-#: sysdump.c:553
+#: sysdump.c:559
msgid "DERIVED TYPE"
msgstr "ПОХІДÐИЙ ТИП"
-#: sysdump.c:610
+#: sysdump.c:616
msgid "MODULE***\n"
msgstr "МОДУЛЬ***\n"
-#: sysdump.c:643
+#: sysdump.c:649
#, c-format
msgid "Print a human readable interpretation of a SYSROFF object file\n"
msgstr "Ð’Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ñ–Ð½Ñ‚ÐµÑ€Ð¿Ñ€ÐµÑ‚Ð°Ñ†Ñ–Ñ— об'єктного файла SYSROFF у зрозумілій людині формі\n"
-#: sysdump.c:644
+#: sysdump.c:650
#, c-format
msgid ""
" The options are:\n"
@@ -13051,7 +13272,7 @@ msgstr ""
" -h --help Ð’Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ñ†Ñ–Ñ”Ñ— інформації\n"
" -v --version Ð’Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð½Ð¾Ð¼ÐµÑ€Ð° верÑÑ–Ñ— програми\n"
-#: sysdump.c:710
+#: sysdump.c:716
#, c-format
msgid "cannot open input file %s"
msgstr "неможливо відкрити вхідний файл %s"
@@ -13140,8 +13361,8 @@ msgstr "\t<пошкоджено деÑкриптор IA64>\n"
#: version.c:34
#, c-format
-msgid "Copyright (C) 2021 Free Software Foundation, Inc.\n"
-msgstr "© Free Software Foundation, Inc., 2021\n"
+msgid "Copyright (C) 2022 Free Software Foundation, Inc.\n"
+msgstr "© Free Software Foundation, Inc., 2022\n"
#: version.c:35
#, c-format
@@ -13398,6 +13619,147 @@ msgstr "stab_int_type: неправильний розмір %u"
msgid "%s: warning: unknown size for field `%s' in struct"
msgstr "%s: попередженнÑ: невідомий розмір Ð¿Ð¾Ð»Ñ `%s' в struct"
+#~ msgid "There is a hole [0x%lx - 0x%lx] in .debug_loc section.\n"
+#~ msgstr "Ð’ розділі .debug_loc Ñ–Ñнує дірка [0x%lx - 0x%lx].\n"
+
+#~ msgid "There is an overlap [0x%lx - 0x%lx] in .debug_loc section.\n"
+#~ msgstr "Ð’ розділі .debug_loc Ñ–Ñнує Ð¿ÐµÑ€ÐµÐºÑ€Ð¸Ñ‚Ñ‚Ñ [0x%lx - 0x%lx].\n"
+
+#~ msgid ""
+#~ " The options are:\n"
+#~ " -a, --debug-syms Display debugger-only symbols\n"
+#~ " -A, --print-file-name Print name of the input file before every symbol\n"
+#~ " -B Same as --format=bsd\n"
+#~ " -C, --demangle[=STYLE] Decode low-level symbol names into user-level names\n"
+#~ " The STYLE, if specified, can be `auto' (the default),\n"
+#~ " `gnu', `lucid', `arm', `hp', `edg', `gnu-v3', `java'\n"
+#~ " or `gnat'\n"
+#~ " --no-demangle Do not demangle low-level symbol names\n"
+#~ " --recurse-limit Enable a demangling recursion limit. This is the default.\n"
+#~ " --no-recurse-limit Disable a demangling recursion limit.\n"
+#~ " -D, --dynamic Display dynamic symbols instead of normal symbols\n"
+#~ " --defined-only Display only defined symbols\n"
+#~ " -e (ignored)\n"
+#~ " -f, --format=FORMAT Use the output format FORMAT. FORMAT can be `bsd',\n"
+#~ " `sysv', `posix' or 'just-symbols'. The default is `bsd'\n"
+#~ " -g, --extern-only Display only external symbols\n"
+#~ " --ifunc-chars=CHARS Characters to use when displaying ifunc symbols\n"
+#~ " -j, --just-symbols Same as --format=just-symbols\n"
+#~ " -l, --line-numbers Use debugging information to find a filename and\n"
+#~ " line number for each symbol\n"
+#~ " -n, --numeric-sort Sort symbols numerically by address\n"
+#~ " -o Same as -A\n"
+#~ " -p, --no-sort Do not sort the symbols\n"
+#~ " -P, --portability Same as --format=posix\n"
+#~ " -r, --reverse-sort Reverse the sense of the sort\n"
+#~ msgstr ""
+#~ " Ключі:\n"
+#~ " -a, --debug-syms Ð’Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð»Ð¸ÑˆÐµ діагноÑтичних Ñимволів\n"
+#~ " -A, --print-file-name Ð’Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð½Ð°Ð·Ð²Ð¸ вхідного файла перед кожним Ñимволом\n"
+#~ " -B То же, що і --format=bsd\n"
+#~ " -C, --demangle[=СТИЛЬ] Ð”ÐµÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð¸Ð·ÑŒÐºÐ¾Ñ€Ñ–Ð²Ð½ÐµÐ²Ð¸Ñ… назв Ñимволів у назви\n"
+#~ " Ñ€Ñ–Ð²Ð½Ñ ÐºÐ¾Ñ€Ð¸Ñтувача\n"
+#~ " СТИЛЬ, Ñкщо вказаний, може бути `auto' (типово),\n"
+#~ " `gnu', `lucid', `arm', `hp', `edg', `gnu-v3', `java'\n"
+#~ " або `gnat'\n"
+#~ " --no-demangle Ðе декодувати низькорівневі назви Ñимволів\n"
+#~ " --recurse-limit Увімкнути Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ð½Ð° рекурÑÑ–ÑŽ під Ñ‡Ð°Ñ Ð´ÐµÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ [типово]\n"
+#~ " --no-recurse-limit Вимкнути Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ð½Ð° рекурÑÑ–ÑŽ під Ñ‡Ð°Ñ Ð´ÐµÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ\n"
+#~ " -D, --dynamic Ð’Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¸Ñ… Ñимволів заміÑÑ‚ÑŒ звичайних Ñимволів\n"
+#~ " --defined-only Ð’Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð»Ð¸ÑˆÐµ визначених Ñимволів\n"
+#~ " -e (ігноруєтьÑÑ)\n"
+#~ " -f, --format=ФОРМÐТ ВикориÑÑ‚Ð°Ð½Ð½Ñ Ð¤ÐžÐ ÐœÐТ Ñк формату виводу.\n"
+#~ " ФОРМÐТ може бути «bsd», «sysv», «posix» або «just-symbols».\n"
+#~ " Типово викориÑтовуєтьÑÑ `bsd'.\n"
+#~ " -g, --extern-only Ð’Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð»Ð¸ÑˆÐµ зовнішніх Ñимволів\n"
+#~ " --ifunc-chars=СИМВ Символи, Ñким Ñлід ÑкориÑтатиÑÑ Ð¿Ñ€Ð¸ показі Ñимволів ifunc\n"
+#~ " -j, --just-symbols Те Ñаме, що Ñ– --format=just-symbols\n"
+#~ " -l, --line-numbers ВикориÑÑ‚Ð°Ð½Ð½Ñ Ð´Ñ–Ð°Ð³Ð½Ð¾Ñтичних даних Ð´Ð»Ñ Ð¿Ð¾ÑˆÑƒÐºÑƒ\n"
+#~ " назви файла Ñ– номеру Ñ€Ñдка Ð´Ð»Ñ ÐºÐ¾Ð¶Ð½Ð¾Ð³Ð¾ Ñимволу\n"
+#~ " -n, --numeric-sort Ð¡Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñимволів за чиÑловими характериÑтиками адреÑи\n"
+#~ " -o Те Ñаме, що Ñ– -A\n"
+#~ " -p, --no-sort Без ÑÐ¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñимволів\n"
+#~ " -P, --portability Те Ñаме, що Ñ– --format=posix\n"
+#~ " -r, --reverse-sort Ð¡Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ зворотному порÑдку\n"
+
+#~ msgid ""
+#~ " -S, --print-size Print size of defined symbols\n"
+#~ " -s, --print-armap Include index for symbols from archive members\n"
+#~ " --quiet Suppress \"no symbols\" diagnostic\n"
+#~ " --size-sort Sort symbols by size\n"
+#~ " --special-syms Include special symbols in the output\n"
+#~ " --synthetic Display synthetic symbols as well\n"
+#~ " -t, --radix=RADIX Use RADIX for printing symbol values\n"
+#~ " --target=BFDNAME Specify the target object format as BFDNAME\n"
+#~ " -u, --undefined-only Display only undefined symbols\n"
+#~ " --with-symbol-versions Display version strings after symbol names\n"
+#~ " -X 32_64 (ignored)\n"
+#~ " @FILE Read options from FILE\n"
+#~ " -h, --help Display this information\n"
+#~ " -V, --version Display this program's version number\n"
+#~ "\n"
+#~ msgstr ""
+#~ " -S, --print-size Ð’Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ визначених Ñимволів\n"
+#~ " -s, --print-armap Ð’ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð¿Ð¾ÐºÐ°Ð¶Ñ‡Ð¸ÐºÐ° Ð´Ð»Ñ Ñимволів з членів архіву\n"
+#~ " --quiet Придушити діагноÑтику «без Ñимволів»\n"
+#~ " --size-sort Ð¡Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñимволів за розміром\n"
+#~ " --special-syms Ð’ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ñпеціальних Ñимволів у дані, що виводÑÑ‚ÑŒÑÑ\n"
+#~ " --synthetic Ð’Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ñ‚Ð°ÐºÐ¾Ð¶ Ñинтетичних Ñимволів\n"
+#~ " -t, --radix=RADIX ВикориÑÑ‚Ð°Ð½Ð½Ñ RADIX Ð´Ð»Ñ Ð²Ð¸Ð²Ð¾Ð´Ñƒ значень Ñимволів\n"
+#~ " --target=BFD-ÐÐÐ—Ð’Ð Ð’ÐºÐ°Ð·ÑƒÐ²Ð°Ð½Ð½Ñ Ñ†Ñ–Ð»ÑŒÐ¾Ð²Ð¾Ð³Ð¾ формату об'єкта Ñк BFD-ÐÐЗВÐ\n"
+#~ " -u, --undefined-only Ð’Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð»Ð¸ÑˆÐµ невизначених Ñимволів\n"
+#~ " --with-symbol-versions ВивеÑти Ñ€Ñдки верÑій піÑÐ»Ñ Ð½Ð°Ð·Ð² Ñимволів\n"
+#~ " -X 32_64 (ігноруєтьÑÑ)\n"
+#~ " @ФÐЙЛ Читати ключі з ФÐЙЛÐ\n"
+#~ " -h, --help Ð’Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ñ†Ñ–Ñ”Ñ— інформації\n"
+#~ " -V, --version Ð’Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð½Ð¾Ð¼ÐµÑ€Ð° верÑÑ–Ñ— програми\n"
+#~ "\n"
+
+#~ msgid ""
+#~ " -C, --demangle[=STYLE] Decode mangled/processed symbol names\n"
+#~ " The STYLE, if specified, can be `auto', `gnu',\n"
+#~ " `lucid', `arm', `hp', `edg', `gnu-v3', `java'\n"
+#~ " or `gnat'\n"
+#~ msgstr ""
+#~ " -C, --demangle[=СТИЛЬ] декодувати зашифровані/оброблені назви Ñимволів\n"
+#~ " СТИЛЬ, Ñкщо вказано, може бути «auto», «gnu»,\n"
+#~ " «lucid», «arm», «hp», «edg», «gnu-v3», «java»\n"
+#~ " або «gnat»\n"
+
+#~ msgid ""
+#~ " -C --demangle[=STYLE] Decode low-level symbol names into user-level names\n"
+#~ " The STYLE, if specified, can be `auto' (the default),\n"
+#~ " `gnu', `lucid', `arm', `hp', `edg', `gnu-v3', `java'\n"
+#~ " or `gnat'\n"
+#~ msgstr ""
+#~ " -C, --demangle[=СТИЛЬ] декодувати низькорівневі назви Ñимволів до зручних назв\n"
+#~ " СТИЛЬ, Ñкщо вказано, може бути «auto» (типовий),\n"
+#~ " «gnu», «lucid», «arm», «hp», «edg», «gnu-v3», «java»\n"
+#~ " або «gnat»\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "In linked file '%s' the dynamic section at offset 0x%lx contains 1 entry:\n"
+#~ msgstr ""
+#~ "\n"
+#~ "У пов'Ñзаному файлі «%s» динамічний розділ із зÑувом 0x%lx міÑтить один запиÑ:\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Dynamic section at offset 0x%lx contains 1 entry:\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Динамічний розділ із зÑувом 0x%lx міÑтить один запиÑ:\n"
+
+#~ msgid "No CTF parent section named %s\n"
+#~ msgstr "Ðемає батьківÑького розділу CTF із назвою %s\n"
+
+#~ msgid "CTF parent"
+#~ msgstr "батьківÑький CTF"
+
+#~ msgid "NT_MEMTAG (memory tags)"
+#~ msgstr "NT_MEMTAG (мітки пам'ÑÑ‚Ñ–)"
+
#~ msgid "%s: Can't allocate memory for temp name (%s)\n"
#~ msgstr "%s: не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ пам'ÑÑ‚ÑŒ Ð´Ð»Ñ Ñ‚Ð¸Ð¼Ñ‡Ð°Ñової назви (%s)\n"
diff --git a/binutils/rddbg.c b/binutils/rddbg.c
index 42605b83d1a..169c52f4983 100644
--- a/binutils/rddbg.c
+++ b/binutils/rddbg.c
@@ -210,7 +210,7 @@ read_section_stabs_debugging_info (bfd *abfd, asymbol **syms, long symcount,
an attempt to read the byte before 'strings' would occur. */
while ((len = strlen (s)) > 0
&& s[len - 1] == '\\'
- && stab + 12 < stabs + stabsize)
+ && stab + 16 <= stabs + stabsize)
{
char *p;
diff --git a/binutils/readelf.c b/binutils/readelf.c
index b45683cd571..d45e0920788 100644
--- a/binutils/readelf.c
+++ b/binutils/readelf.c
@@ -46,6 +46,10 @@
#include <zlib.h>
#include <wchar.h>
+#if defined HAVE_MSGPACK
+#include <msgpack.h>
+#endif
+
#if __GNUC__ >= 2
/* Define BFD64 here, even if our default architecture is 32 bit ELF
as this will allow us to read in and parse 64bit and 32bit ELF files.
@@ -92,6 +96,7 @@
#include "elf/aarch64.h"
#include "elf/alpha.h"
+#include "elf/amdgpu.h"
#include "elf/arc.h"
#include "elf/arm.h"
#include "elf/avr.h"
@@ -239,6 +244,7 @@ static bool decompress_dumps = false;
static bool do_not_show_symbol_truncation = false;
static bool do_demangle = false; /* Pretty print C++ symbol names. */
static bool process_links = false;
+static bool dump_any_debugging = false;
static int demangle_flags = DMGL_ANSI | DMGL_PARAMS;
static int sym_base = 0;
@@ -1924,6 +1930,9 @@ dump_relocations (Filedata * filedata,
rtype = elf_loongarch_reloc_type (type);
break;
+ case EM_AMDGPU:
+ rtype = elf_amdgpu_reloc_type (type);
+ break;
}
if (rtype == NULL)
@@ -3564,6 +3573,153 @@ decode_NDS32_machine_flags (unsigned e_flags, char buf[], size_t size)
r += snprintf (buf + r, size -r, ", L2C");
}
+static void
+decode_AMDGPU_machine_flags (Filedata *filedata, unsigned int e_flags,
+ char *buf)
+{
+ unsigned char *e_ident = filedata->file_header.e_ident;
+ unsigned char osabi = e_ident[EI_OSABI];
+ unsigned char abiversion = e_ident[EI_ABIVERSION];
+ unsigned int mach;
+
+ /* HSA OS ABI v2 used a different encoding, but we don't need to support it,
+ it has been deprecated for a while.
+
+ The PAL, MESA3D and NONE OS ABIs are not properly versioned, at the time
+ of writing, they use the same flags as HSA v3, so the code below uses that
+ assumption. */
+ if (osabi == ELFOSABI_AMDGPU_HSA && abiversion < ELFABIVERSION_AMDGPU_HSA_V3)
+ return;
+
+ mach = e_flags & EF_AMDGPU_MACH;
+ switch (mach)
+ {
+#define AMDGPU_CASE(code, string) \
+ case code: strcat (buf, ", " string); break;
+ AMDGPU_CASE (EF_AMDGPU_MACH_AMDGCN_GFX600, "gfx600")
+ AMDGPU_CASE (EF_AMDGPU_MACH_AMDGCN_GFX601, "gfx601")
+ AMDGPU_CASE (EF_AMDGPU_MACH_AMDGCN_GFX700, "gfx700")
+ AMDGPU_CASE (EF_AMDGPU_MACH_AMDGCN_GFX701, "gfx701")
+ AMDGPU_CASE (EF_AMDGPU_MACH_AMDGCN_GFX702, "gfx702")
+ AMDGPU_CASE (EF_AMDGPU_MACH_AMDGCN_GFX703, "gfx703")
+ AMDGPU_CASE (EF_AMDGPU_MACH_AMDGCN_GFX704, "gfx704")
+ AMDGPU_CASE (EF_AMDGPU_MACH_AMDGCN_GFX801, "gfx801")
+ AMDGPU_CASE (EF_AMDGPU_MACH_AMDGCN_GFX802, "gfx802")
+ AMDGPU_CASE (EF_AMDGPU_MACH_AMDGCN_GFX803, "gfx803")
+ AMDGPU_CASE (EF_AMDGPU_MACH_AMDGCN_GFX810, "gfx810")
+ AMDGPU_CASE (EF_AMDGPU_MACH_AMDGCN_GFX900, "gfx900")
+ AMDGPU_CASE (EF_AMDGPU_MACH_AMDGCN_GFX902, "gfx902")
+ AMDGPU_CASE (EF_AMDGPU_MACH_AMDGCN_GFX904, "gfx904")
+ AMDGPU_CASE (EF_AMDGPU_MACH_AMDGCN_GFX906, "gfx906")
+ AMDGPU_CASE (EF_AMDGPU_MACH_AMDGCN_GFX908, "gfx908")
+ AMDGPU_CASE (EF_AMDGPU_MACH_AMDGCN_GFX909, "gfx909")
+ AMDGPU_CASE (EF_AMDGPU_MACH_AMDGCN_GFX90C, "gfx90c")
+ AMDGPU_CASE (EF_AMDGPU_MACH_AMDGCN_GFX1010, "gfx1010")
+ AMDGPU_CASE (EF_AMDGPU_MACH_AMDGCN_GFX1011, "gfx1011")
+ AMDGPU_CASE (EF_AMDGPU_MACH_AMDGCN_GFX1012, "gfx1012")
+ AMDGPU_CASE (EF_AMDGPU_MACH_AMDGCN_GFX1030, "gfx1030")
+ AMDGPU_CASE (EF_AMDGPU_MACH_AMDGCN_GFX1031, "gfx1031")
+ AMDGPU_CASE (EF_AMDGPU_MACH_AMDGCN_GFX1032, "gfx1032")
+ AMDGPU_CASE (EF_AMDGPU_MACH_AMDGCN_GFX1033, "gfx1033")
+ AMDGPU_CASE (EF_AMDGPU_MACH_AMDGCN_GFX602, "gfx602")
+ AMDGPU_CASE (EF_AMDGPU_MACH_AMDGCN_GFX705, "gfx705")
+ AMDGPU_CASE (EF_AMDGPU_MACH_AMDGCN_GFX805, "gfx805")
+ AMDGPU_CASE (EF_AMDGPU_MACH_AMDGCN_GFX1035, "gfx1035")
+ AMDGPU_CASE (EF_AMDGPU_MACH_AMDGCN_GFX1034, "gfx1034")
+ AMDGPU_CASE (EF_AMDGPU_MACH_AMDGCN_GFX90A, "gfx90a")
+ AMDGPU_CASE (EF_AMDGPU_MACH_AMDGCN_GFX940, "gfx940")
+ AMDGPU_CASE (EF_AMDGPU_MACH_AMDGCN_GFX1013, "gfx1013")
+ AMDGPU_CASE (EF_AMDGPU_MACH_AMDGCN_GFX1036, "gfx1036")
+ default:
+ sprintf (buf, _(", <unknown AMDGPU GPU type: %#x>"), mach);
+ break;
+#undef AMDGPU_CASE
+ }
+
+ buf += strlen (buf);
+ e_flags &= ~EF_AMDGPU_MACH;
+
+ if ((osabi == ELFOSABI_AMDGPU_HSA
+ && abiversion == ELFABIVERSION_AMDGPU_HSA_V3)
+ || osabi != ELFOSABI_AMDGPU_HSA)
+ {
+ /* For HSA v3 and other OS ABIs. */
+ if (e_flags & EF_AMDGPU_FEATURE_XNACK_V3)
+ {
+ strcat (buf, ", xnack on");
+ buf += strlen (buf);
+ e_flags &= ~EF_AMDGPU_FEATURE_XNACK_V3;
+ }
+
+ if (e_flags & EF_AMDGPU_FEATURE_SRAMECC_V3)
+ {
+ strcat (buf, ", sramecc on");
+ buf += strlen (buf);
+ e_flags &= ~EF_AMDGPU_FEATURE_SRAMECC_V3;
+ }
+ }
+ else
+ {
+ /* For HSA v4+. */
+ int xnack, sramecc;
+
+ xnack = e_flags & EF_AMDGPU_FEATURE_XNACK_V4;
+ switch (xnack)
+ {
+ case EF_AMDGPU_FEATURE_XNACK_UNSUPPORTED_V4:
+ break;
+
+ case EF_AMDGPU_FEATURE_XNACK_ANY_V4:
+ strcat (buf, ", xnack any");
+ break;
+
+ case EF_AMDGPU_FEATURE_XNACK_OFF_V4:
+ strcat (buf, ", xnack off");
+ break;
+
+ case EF_AMDGPU_FEATURE_XNACK_ON_V4:
+ strcat (buf, ", xnack on");
+ break;
+
+ default:
+ sprintf (buf, _(", <unknown xnack value: %#x>"), xnack);
+ break;
+ }
+
+ buf += strlen (buf);
+ e_flags &= ~EF_AMDGPU_FEATURE_XNACK_V4;
+
+ sramecc = e_flags & EF_AMDGPU_FEATURE_SRAMECC_V4;
+ switch (sramecc)
+ {
+ case EF_AMDGPU_FEATURE_SRAMECC_UNSUPPORTED_V4:
+ break;
+
+ case EF_AMDGPU_FEATURE_SRAMECC_ANY_V4:
+ strcat (buf, ", sramecc any");
+ break;
+
+ case EF_AMDGPU_FEATURE_SRAMECC_OFF_V4:
+ strcat (buf, ", sramecc off");
+ break;
+
+ case EF_AMDGPU_FEATURE_SRAMECC_ON_V4:
+ strcat (buf, ", sramecc on");
+ break;
+
+ default:
+ sprintf (buf, _(", <unknown sramecc value: %#x>"), sramecc);
+ break;
+ }
+
+ buf += strlen (buf);
+ e_flags &= ~EF_AMDGPU_FEATURE_SRAMECC_V4;
+ }
+
+ if (e_flags != 0)
+ sprintf (buf, _(", unknown flags bits: %#x"), e_flags);
+}
+
static char *
get_machine_flags (Filedata * filedata, unsigned e_flags, unsigned e_machine)
{
@@ -3716,6 +3872,10 @@ get_machine_flags (Filedata * filedata, unsigned e_flags, unsigned e_machine)
}
break;
+ case EM_AMDGPU:
+ decode_AMDGPU_machine_flags (filedata, e_flags, buf);
+ break;
+
case EM_CYGNUS_MEP:
switch (e_flags & EF_MEP_CPU_MASK)
{
@@ -4283,6 +4443,17 @@ get_osabi_name (Filedata * filedata, unsigned int osabi)
if (osabi >= 64)
switch (filedata->file_header.e_machine)
{
+ case EM_AMDGPU:
+ switch (osabi)
+ {
+ case ELFOSABI_AMDGPU_HSA: return "AMD HSA";
+ case ELFOSABI_AMDGPU_PAL: return "AMD PAL";
+ case ELFOSABI_AMDGPU_MESA3D: return "AMD Mesa3D";
+ default:
+ break;
+ }
+ break;
+
case EM_ARM:
switch (osabi)
{
@@ -5126,6 +5297,14 @@ usage (FILE * stream)
Do not follow links to separate debug info files\n\
(default)\n"));
#endif
+#if HAVE_LIBDEBUGINFOD
+ fprintf (stream, _("\
+ -wD --debug-dump=use-debuginfod\n\
+ When following links, also query debuginfod servers (default)\n"));
+ fprintf (stream, _("\
+ -wE --debug-dump=do-not-use-debuginfod\n\
+ When following links, do not query debuginfod servers\n"));
+#endif
fprintf (stream, _("\
--dwarf-depth=N Do not display DIEs at depth N or greater\n"));
fprintf (stream, _("\
@@ -5332,6 +5511,7 @@ parse_args (struct dump_data *dumpdata, int argc, char ** argv)
case 'P':
process_links = true;
do_follow_links = true;
+ dump_any_debugging = true;
break;
case 'x':
request_dump (dumpdata, HEX_DUMP);
@@ -5347,6 +5527,7 @@ parse_args (struct dump_data *dumpdata, int argc, char ** argv)
break;
case 'w':
do_dump = true;
+ dump_any_debugging = true;
if (optarg == NULL)
{
do_debugging = true;
@@ -5360,6 +5541,7 @@ parse_args (struct dump_data *dumpdata, int argc, char ** argv)
break;
case OPTION_DEBUG_DUMP:
do_dump = true;
+ dump_any_debugging = true;
if (optarg == NULL)
{
do_debugging = true;
@@ -5627,10 +5809,7 @@ process_file_header (Filedata * filedata)
if (filedata->section_headers != NULL
&& header->e_phnum == PN_XNUM
&& filedata->section_headers[0].sh_info != 0)
- {
- header->e_phnum = filedata->section_headers[0].sh_info;
- printf (" (%u)", header->e_phnum);
- }
+ printf (" (%u)", filedata->section_headers[0].sh_info);
putc ('\n', stdout);
printf (_(" Size of section headers: %u (bytes)\n"),
header->e_shentsize);
@@ -5663,7 +5842,12 @@ process_file_header (Filedata * filedata)
{
if (header->e_phnum == PN_XNUM
&& filedata->section_headers[0].sh_info != 0)
- header->e_phnum = filedata->section_headers[0].sh_info;
+ {
+ /* Throw away any cached read of PN_XNUM headers. */
+ free (filedata->program_headers);
+ filedata->program_headers = NULL;
+ header->e_phnum = filedata->section_headers[0].sh_info;
+ }
if (header->e_shnum == SHN_UNDEF)
header->e_shnum = filedata->section_headers[0].sh_size;
if (header->e_shstrndx == (SHN_XINDEX & 0xffff))
@@ -11291,12 +11475,12 @@ the .dynstr section doesn't match the DT_STRTAB and DT_STRSZ tags\n"));
filedata->file_name,
filedata->dynamic_addr,
(unsigned long) filedata->dynamic_nent);
- else
- printf (ngettext ("\nDynamic section at offset 0x%lx contains %lu entry:\n",
- "\nDynamic section at offset 0x%lx contains %lu entries:\n",
- (unsigned long) filedata->dynamic_nent),
- filedata->dynamic_addr,
- (unsigned long) filedata->dynamic_nent);
+ else
+ printf (ngettext ("\nDynamic section at offset 0x%lx contains %lu entry:\n",
+ "\nDynamic section at offset 0x%lx contains %lu entries:\n",
+ (unsigned long) filedata->dynamic_nent),
+ filedata->dynamic_addr,
+ (unsigned long) filedata->dynamic_nent);
}
if (do_dynamic)
printf (_(" Tag Type Name/Value\n"));
@@ -14088,7 +14272,7 @@ is_32bit_abs_reloc (Filedata * filedata, unsigned int reloc_type)
case EM_MT:
return reloc_type == 2; /* R_MT_32. */
case EM_NDS32:
- return reloc_type == 20; /* R_NDS32_RELA. */
+ return reloc_type == 20; /* R_NDS32_32_RELA. */
case EM_ALTERA_NIOS2:
return reloc_type == 12; /* R_NIOS2_BFD_RELOC_32. */
case EM_NIOS32:
@@ -14400,7 +14584,7 @@ is_16bit_abs_reloc (Filedata * filedata, unsigned int reloc_type)
case EM_MSP430_OLD:
return reloc_type == 5; /* R_MSP430_16_BYTE. */
case EM_NDS32:
- return reloc_type == 19; /* R_NDS32_RELA. */
+ return reloc_type == 19; /* R_NDS32_16_RELA. */
case EM_ALTERA_NIOS2:
return reloc_type == 13; /* R_NIOS2_BFD_RELOC_16. */
case EM_NIOS32:
@@ -14661,11 +14845,11 @@ is_none_reloc (Filedata * filedata, unsigned int reloc_type)
case EM_METAG:
return reloc_type == 3; /* R_METAG_NONE. */
case EM_NDS32:
- return (reloc_type == 0 /* R_XTENSA_NONE. */
- || reloc_type == 204 /* R_NDS32_DIFF8. */
- || reloc_type == 205 /* R_NDS32_DIFF16. */
- || reloc_type == 206 /* R_NDS32_DIFF32. */
- || reloc_type == 207 /* R_NDS32_ULEB128. */);
+ return (reloc_type == 0 /* R_NDS32_NONE. */
+ || reloc_type == 205 /* R_NDS32_DIFF8. */
+ || reloc_type == 206 /* R_NDS32_DIFF16. */
+ || reloc_type == 207 /* R_NDS32_DIFF32. */
+ || reloc_type == 208 /* R_NDS32_DIFF_ULEB128. */);
case EM_TI_PRU:
return (reloc_type == 0 /* R_PRU_NONE. */
|| reloc_type == 65 /* R_PRU_DIFF8. */
@@ -15913,6 +16097,9 @@ load_debug_section (enum dwarf_section_display_enum debug, void * data)
Elf_Internal_Shdr * sec;
Filedata * filedata = (Filedata *) data;
+ if (!dump_any_debugging)
+ return false;
+
/* Without section headers we cannot find any sections. */
if (filedata->section_headers == NULL)
return false;
@@ -19192,6 +19379,8 @@ get_note_type (Filedata * filedata, unsigned e_type)
return _("NT_ARM_HW_BREAK (AArch hardware breakpoint registers)");
case NT_ARM_HW_WATCH:
return _("NT_ARM_HW_WATCH (AArch hardware watchpoint registers)");
+ case NT_ARM_SYSTEM_CALL:
+ return _("NT_ARM_SYSTEM_CALL (AArch system call number)");
case NT_ARM_SVE:
return _("NT_ARM_SVE (AArch SVE registers)");
case NT_ARM_PAC_MASK:
@@ -19544,6 +19733,22 @@ decode_x86_compat_2_isa (unsigned int bitmask)
}
}
+static const char *
+get_amdgpu_elf_note_type (unsigned int e_type)
+{
+ switch (e_type)
+ {
+ case NT_AMDGPU_METADATA:
+ return _("NT_AMDGPU_METADATA (code object metadata)");
+ default:
+ {
+ static char buf[64];
+ snprintf (buf, sizeof (buf), _("Unknown note type: (0x%08x)"), e_type);
+ return buf;
+ }
+ }
+}
+
static void
decode_x86_isa (unsigned int bitmask)
{
@@ -20245,6 +20450,8 @@ get_freebsd_elfcore_note_type (Filedata * filedata, unsigned e_type)
return _("NT_PROCSTAT_AUXV (auxv data)");
case NT_FREEBSD_PTLWPINFO:
return _("NT_PTLWPINFO (ptrace_lwpinfo structure)");
+ case NT_FREEBSD_X86_SEGBASES:
+ return _("NT_X86_SEGBASES (x86 segment base registers)");
}
return get_note_type (filedata, e_type);
}
@@ -21111,6 +21318,177 @@ print_gnu_build_attribute_name (Elf_Internal_Note * pnote)
return true;
}
+/* Print the contents of PNOTE as hex. */
+
+static void
+print_note_contents_hex (Elf_Internal_Note *pnote)
+{
+ if (pnote->descsz)
+ {
+ unsigned long i;
+
+ printf (_(" description data: "));
+ for (i = 0; i < pnote->descsz; i++)
+ printf ("%02x ", pnote->descdata[i] & 0xff);
+ if (!do_wide)
+ printf ("\n");
+ }
+
+ if (do_wide)
+ printf ("\n");
+}
+
+#if defined HAVE_MSGPACK
+
+static void
+print_indents (int n)
+{
+ printf (" ");
+
+ for (int i = 0; i < n; i++)
+ printf (" ");
+}
+
+/* Print OBJ in human-readable form. */
+
+static void
+dump_msgpack_obj (const msgpack_object *obj, int indent)
+{
+ switch (obj->type)
+ {
+ case MSGPACK_OBJECT_NIL:
+ printf ("(nil)");
+ break;
+
+ case MSGPACK_OBJECT_BOOLEAN:
+ printf ("%s", obj->via.boolean ? "true" : "false");
+ break;
+
+ case MSGPACK_OBJECT_POSITIVE_INTEGER:
+ printf ("%" PRIu64, obj->via.u64);
+ break;
+
+ case MSGPACK_OBJECT_NEGATIVE_INTEGER:
+ printf ("%" PRIi64, obj->via.i64);
+ break;
+
+ case MSGPACK_OBJECT_FLOAT32:
+ case MSGPACK_OBJECT_FLOAT64:
+ printf ("%f", obj->via.f64);
+ break;
+
+ case MSGPACK_OBJECT_STR:
+ printf ("\"%.*s\"", obj->via.str.size, obj->via.str.ptr);
+ break;
+
+ case MSGPACK_OBJECT_ARRAY:
+ {
+ const msgpack_object_array *array = &obj->via.array;
+
+ printf ("[\n");
+ ++indent;
+
+ for (uint32_t i = 0; i < array->size; ++i)
+ {
+ const msgpack_object *item = &array->ptr[i];
+
+ print_indents (indent);
+ dump_msgpack_obj (item, indent);
+ printf (",\n");
+ }
+
+ --indent;
+ print_indents (indent);
+ printf ("]");
+ break;
+ }
+ break;
+
+ case MSGPACK_OBJECT_MAP:
+ {
+ const msgpack_object_map *map = &obj->via.map;
+
+ printf ("{\n");
+ ++indent;
+
+ for (uint32_t i = 0; i < map->size; ++i)
+ {
+ const msgpack_object_kv *kv = &map->ptr[i];
+ const msgpack_object *key = &kv->key;
+ const msgpack_object *val = &kv->val;
+
+ print_indents (indent);
+ dump_msgpack_obj (key, indent);
+ printf (": ");
+ dump_msgpack_obj (val, indent);
+
+ printf (",\n");
+ }
+
+ --indent;
+ print_indents (indent);
+ printf ("}");
+
+ break;
+ }
+
+ case MSGPACK_OBJECT_BIN:
+ printf ("(bin)");
+ break;
+
+ case MSGPACK_OBJECT_EXT:
+ printf ("(ext)");
+ break;
+ }
+}
+
+static void
+dump_msgpack (const msgpack_unpacked *msg)
+{
+ print_indents (0);
+ dump_msgpack_obj (&msg->data, 0);
+ printf ("\n");
+}
+
+#endif /* defined HAVE_MSGPACK */
+
+static bool
+print_amdgpu_note (Elf_Internal_Note *pnote)
+{
+#if defined HAVE_MSGPACK
+ /* If msgpack is available, decode and dump the note's content. */
+ bool ret;
+ msgpack_unpacked msg;
+ msgpack_unpack_return msgpack_ret;
+
+ assert (pnote->type == NT_AMDGPU_METADATA);
+
+ msgpack_unpacked_init (&msg);
+ msgpack_ret = msgpack_unpack_next (&msg, pnote->descdata, pnote->descsz,
+ NULL);
+
+ switch (msgpack_ret)
+ {
+ case MSGPACK_UNPACK_SUCCESS:
+ dump_msgpack (&msg);
+ ret = true;
+ break;
+
+ default:
+ error (_("failed to unpack msgpack contents in NT_AMDGPU_METADATA note"));
+ ret = false;
+ break;
+ }
+
+ msgpack_unpacked_destroy (&msg);
+ return ret;
+#else
+ /* msgpack is not available, dump contents as hex. */
+ print_note_contents_hex (pnote);
+ return true;
+#endif
+}
+
/* Note that by the ELF standard, the name field is already null byte
terminated, and namesz includes the terminating null byte.
I.E. the value of namesz for the name "FSF" is 4.
@@ -21133,6 +21511,10 @@ process_note (Elf_Internal_Note * pnote,
/* GNU-specific object file notes. */
nt = get_gnu_elf_note_type (pnote->type);
+ else if (startswith (pnote->namedata, "AMDGPU"))
+ /* AMDGPU-specific object file notes. */
+ nt = get_amdgpu_elf_note_type (pnote->type);
+
else if (startswith (pnote->namedata, "FreeBSD"))
/* FreeBSD-specific core file notes. */
nt = get_freebsd_elfcore_note_type (filedata, pnote->type);
@@ -21204,21 +21586,11 @@ process_note (Elf_Internal_Note * pnote,
&& (pnote->type == NT_GNU_BUILD_ATTRIBUTE_OPEN
|| pnote->type == NT_GNU_BUILD_ATTRIBUTE_FUNC))
return print_gnu_build_attribute_description (pnote, filedata);
+ else if (startswith (pnote->namedata, "AMDGPU")
+ && pnote->type == NT_AMDGPU_METADATA)
+ return print_amdgpu_note (pnote);
- if (pnote->descsz)
- {
- unsigned long i;
-
- printf (_(" description data: "));
- for (i = 0; i < pnote->descsz; i++)
- printf ("%02x ", pnote->descdata[i] & 0xff);
- if (!do_wide)
- printf ("\n");
- }
-
- if (do_wide)
- printf ("\n");
-
+ print_note_contents_hex (pnote);
return true;
}
diff --git a/binutils/stabs.c b/binutils/stabs.c
index 1e78c0d1769..2b5241637c1 100644
--- a/binutils/stabs.c
+++ b/binutils/stabs.c
@@ -1129,13 +1129,13 @@ parse_stab_string (void *dhandle, struct stab_handle *info, int stabtype,
case 'Y':
/* SUNPro C++ Namespace =Yn0. */
/* Skip the namespace mapping, as it is not used now. */
- if (*(++p) == 'n' && *(++p) == '0')
+ if (*p++ != 0 && *p++ == 'n' && *p++ == '0')
{
/* =Yn0name; */
- while (*p != ';')
+ while (*p && *p != ';')
++p;
- ++p;
- return true;
+ if (*p)
+ return true;
}
/* TODO SUNPro C++ support:
Support default arguments after F,P parameters
diff --git a/binutils/stamp-h.in b/binutils/stamp-h.in
deleted file mode 100644
index 9788f70238c..00000000000
--- a/binutils/stamp-h.in
+++ /dev/null
@@ -1 +0,0 @@
-timestamp
diff --git a/binutils/testsuite/binutils-all/debuginfod.exp b/binutils/testsuite/binutils-all/debuginfod.exp
index 96543b2037a..f5935ad0348 100644
--- a/binutils/testsuite/binutils-all/debuginfod.exp
+++ b/binutils/testsuite/binutils-all/debuginfod.exp
@@ -185,8 +185,14 @@ proc test_fetch_debugaltlink { prog progargs } {
}
if { [regexp ".*DEBUGINFOD.*" $conf_objdump] } {
- test_fetch_debuglink $OBJDUMP "-W"
+ test_fetch_debuglink $OBJDUMP "-W -WD"
test_fetch_debugaltlink $OBJDUMP "-Wk"
+
+ set test "disabling debuginfod access"
+ setup_xfail *-*-*
+ test_fetch_debuglink $OBJDUMP "-W -WE"
+ set test "debuginfod"
+
} else {
untested "$test (objdump not configured with debuginfod)"
}
@@ -194,6 +200,12 @@ if { [regexp ".*DEBUGINFOD.*" $conf_objdump] } {
if { [regexp ".*DEBUGINFOD.*" $conf_readelf] } {
test_fetch_debuglink $READELF "-w"
test_fetch_debugaltlink $READELF "-wk"
+
+ set test "disabling debuginfod access"
+ setup_xfail *-*-*
+ test_fetch_debuglink $READELF "-w -wE"
+ set test "debuginfod"
+
} else {
untested "$test (readelf not configured with debuginfod)"
}
diff --git a/binutils/testsuite/binutils-all/dw5.W b/binutils/testsuite/binutils-all/dw5.W
index 562b64fe220..bfcdac175ba 100644
--- a/binutils/testsuite/binutils-all/dw5.W
+++ b/binutils/testsuite/binutils-all/dw5.W
@@ -281,7 +281,7 @@ Contents of the .debug_loclists section:
00000039 <End of list>
Contents of the .debug_rnglists section:
-
+#...
Offset Begin End
0000000c 0000000000001234 0000000000001236
00000016 0000000000001234 0000000000001239
@@ -347,7 +347,7 @@ Raw dump of debug contents of section .debug_line:
Contents of the .debug_line section:
-CU: ./main.c:
+main.c:
File name Line number Starting address View Stmt
main.c 6 0x1234 x
main.c 6 0x12346 x
diff --git a/binutils/testsuite/binutils-all/mips/micromips-branch-alias.d b/binutils/testsuite/binutils-all/mips/micromips-branch-alias.d
new file mode 100644
index 00000000000..3a5a879ead0
--- /dev/null
+++ b/binutils/testsuite/binutils-all/mips/micromips-branch-alias.d
@@ -0,0 +1,17 @@
+#PROG: objcopy
+#objdump: -d --prefix-addresses --show-raw-insn
+#name: microMIPS branch instruction alias disassembly
+#source: micromips-branch-alias.s
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+[0-9a-f]+ <[^>]*> 9400 0000 b [0-9a-f]+ <[^>]*>
+[0-9a-f]+ <[^>]*> 4040 0000 b [0-9a-f]+ <[^>]*>
+[0-9a-f]+ <[^>]*> 40e0 0000 bc [0-9a-f]+ <[^>]*>
+[0-9a-f]+ <[^>]*> 9401 0000 beqz at,[0-9a-f]+ <[^>]*>
+[0-9a-f]+ <[^>]*> b401 0000 bnez at,[0-9a-f]+ <[^>]*>
+[0-9a-f]+ <[^>]*> 4060 0000 bal [0-9a-f]+ <[^>]*>
+[0-9a-f]+ <[^>]*> 4260 0000 bals [0-9a-f]+ <[^>]*>
+[0-9a-f]+ <[^>]*> 0000 0000 nop
+ \.\.\.
diff --git a/binutils/testsuite/binutils-all/mips/micromips-branch-alias.s b/binutils/testsuite/binutils-all/mips/micromips-branch-alias.s
new file mode 100644
index 00000000000..3d27bb47178
--- /dev/null
+++ b/binutils/testsuite/binutils-all/mips/micromips-branch-alias.s
@@ -0,0 +1,17 @@
+ .text
+ .set mips32r3
+ .set noat
+ .set noreorder
+ .set micromips
+foo:
+ beq $0, $0, . + 4
+ bgez $0, . + 4
+ beqzc $0, . + 4
+ beqz $1, . + 4
+ bnez $1, . + 4
+ bgezal $0, . + 4
+ bgezals $0, . + 4
+
+# Force some (non-delay-slot) zero bytes, to make 'objdump' print ...
+ .align 4, 0
+ .space 16
diff --git a/binutils/testsuite/binutils-all/mips/micromips-branch-noalias.d b/binutils/testsuite/binutils-all/mips/micromips-branch-noalias.d
new file mode 100644
index 00000000000..3c9fa7d33e6
--- /dev/null
+++ b/binutils/testsuite/binutils-all/mips/micromips-branch-noalias.d
@@ -0,0 +1,17 @@
+#PROG: objcopy
+#objdump: -M no-aliases -d --prefix-addresses --show-raw-insn
+#name: microMIPS branch canonical alias disassembly
+#source: micromips-branch-alias.s
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+[0-9a-f]+ <[^>]*> 9400 0000 beq zero,zero,[0-9a-f]+ <[^>]*>
+[0-9a-f]+ <[^>]*> 4040 0000 bgez zero,[0-9a-f]+ <[^>]*>
+[0-9a-f]+ <[^>]*> 40e0 0000 beqzc zero,[0-9a-f]+ <[^>]*>
+[0-9a-f]+ <[^>]*> 9401 0000 beq at,zero,[0-9a-f]+ <[^>]*>
+[0-9a-f]+ <[^>]*> b401 0000 bne at,zero,[0-9a-f]+ <[^>]*>
+[0-9a-f]+ <[^>]*> 4060 0000 bgezal zero,[0-9a-f]+ <[^>]*>
+[0-9a-f]+ <[^>]*> 4260 0000 bgezals zero,[0-9a-f]+ <[^>]*>
+[0-9a-f]+ <[^>]*> 0000 0000 sll zero,zero,0x0
+ \.\.\.
diff --git a/binutils/testsuite/binutils-all/mips/mips-branch-alias.s b/binutils/testsuite/binutils-all/mips/mips-branch-alias.s
new file mode 100644
index 00000000000..dfde3c0b5fb
--- /dev/null
+++ b/binutils/testsuite/binutils-all/mips/mips-branch-alias.s
@@ -0,0 +1,18 @@
+ .text
+ .set noat
+ .set noreorder
+ .set mips2
+foo:
+ beq $0, $0, . + 4
+ bgez $0, . + 4
+ bgezal $0, . + 4
+ bltzal $0, . + 4
+ beqz $1, . + 4
+ bnez $1, . + 4
+
+ beqzl $1, . + 4
+ bnezl $1, . + 4
+
+# Force some (non-delay-slot) zero bytes, to make 'objdump' print ...
+ .align 4, 0
+ .space 16
diff --git a/binutils/testsuite/binutils-all/mips/mips.exp b/binutils/testsuite/binutils-all/mips/mips.exp
index 3d818f812ef..b6fe11d85a5 100644
--- a/binutils/testsuite/binutils-all/mips/mips.exp
+++ b/binutils/testsuite/binutils-all/mips/mips.exp
@@ -238,6 +238,14 @@ run_dump_test_o32 "mips16-extend-insn" noarch
run_dump_test_o32 "mips16e2-extend-insn" noarch
run_dump_test_o32 "mips16-alias" noarch
run_dump_test_o32 "mips16-noalias" noarch
+run_dump_test_o32 "mips1-branch-alias"
+run_dump_test_o32 "mips1-branch-noalias"
+run_dump_test_o32 "mips2-branch-alias"
+run_dump_test_o32 "mips2-branch-noalias"
+run_dump_test_o32 "mips32r6-branch-alias"
+run_dump_test_o32 "mips32r6-branch-noalias"
+run_dump_test_o32 "micromips-branch-alias"
+run_dump_test_o32 "micromips-branch-noalias"
run_dump_test_o32 "mips-note-2"
run_dump_test_n32 "mips-note-2-n32"
diff --git a/binutils/testsuite/binutils-all/mips/mips1-branch-alias.d b/binutils/testsuite/binutils-all/mips/mips1-branch-alias.d
new file mode 100644
index 00000000000..467775f97c9
--- /dev/null
+++ b/binutils/testsuite/binutils-all/mips/mips1-branch-alias.d
@@ -0,0 +1,17 @@
+#PROG: objcopy
+#objdump: -m mips:3000 -d --prefix-addresses --show-raw-insn
+#name: MIPS1 branch instruction alias disassembly
+#source: mips-branch-alias.s
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+[0-9a-f]+ <[^>]*> 10000000 b [0-9a-f]+ <[^>]*>
+[0-9a-f]+ <[^>]*> 04010000 b [0-9a-f]+ <[^>]*>
+[0-9a-f]+ <[^>]*> 04110000 bal [0-9a-f]+ <[^>]*>
+[0-9a-f]+ <[^>]*> 04100000 bltzal zero,[0-9a-f]+ <[^>]*>
+[0-9a-f]+ <[^>]*> 10200000 beqz at,[0-9a-f]+ <[^>]*>
+[0-9a-f]+ <[^>]*> 14200000 bnez at,[0-9a-f]+ <[^>]*>
+[0-9a-f]+ <[^>]*> 50200000 0x50200000
+[0-9a-f]+ <[^>]*> 54200000 0x54200000
+ \.\.\.
diff --git a/binutils/testsuite/binutils-all/mips/mips1-branch-noalias.d b/binutils/testsuite/binutils-all/mips/mips1-branch-noalias.d
new file mode 100644
index 00000000000..b3fa8a0f917
--- /dev/null
+++ b/binutils/testsuite/binutils-all/mips/mips1-branch-noalias.d
@@ -0,0 +1,17 @@
+#PROG: objcopy
+#objdump: -M no-aliases -m mips:3000 -d --prefix-addresses --show-raw-insn
+#name: MIPS1 branch canonical alias disassembly
+#source: mips-branch-alias.s
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+[0-9a-f]+ <[^>]*> 10000000 beq zero,zero,[0-9a-f]+ <[^>]*>
+[0-9a-f]+ <[^>]*> 04010000 bgez zero,[0-9a-f]+ <[^>]*>
+[0-9a-f]+ <[^>]*> 04110000 bgezal zero,[0-9a-f]+ <[^>]*>
+[0-9a-f]+ <[^>]*> 04100000 bltzal zero,[0-9a-f]+ <[^>]*>
+[0-9a-f]+ <[^>]*> 10200000 beq at,zero,[0-9a-f]+ <[^>]*>
+[0-9a-f]+ <[^>]*> 14200000 bne at,zero,[0-9a-f]+ <[^>]*>
+[0-9a-f]+ <[^>]*> 50200000 0x50200000
+[0-9a-f]+ <[^>]*> 54200000 0x54200000
+ \.\.\.
diff --git a/binutils/testsuite/binutils-all/mips/mips2-branch-alias.d b/binutils/testsuite/binutils-all/mips/mips2-branch-alias.d
new file mode 100644
index 00000000000..f1fbeea2830
--- /dev/null
+++ b/binutils/testsuite/binutils-all/mips/mips2-branch-alias.d
@@ -0,0 +1,18 @@
+#PROG: objcopy
+#objdump: -m mips:6000 -d --prefix-addresses --show-raw-insn
+#name: MIPS2 branch instruction alias disassembly
+#source: mips-branch-alias.s
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+[0-9a-f]+ <[^>]*> 10000000 b [0-9a-f]+ <[^>]*>
+[0-9a-f]+ <[^>]*> 04010000 b [0-9a-f]+ <[^>]*>
+[0-9a-f]+ <[^>]*> 04110000 bal [0-9a-f]+ <[^>]*>
+[0-9a-f]+ <[^>]*> 04100000 bltzal zero,[0-9a-f]+ <[^>]*>
+[0-9a-f]+ <[^>]*> 10200000 beqz at,[0-9a-f]+ <[^>]*>
+[0-9a-f]+ <[^>]*> 14200000 bnez at,[0-9a-f]+ <[^>]*>
+[0-9a-f]+ <[^>]*> 50200000 beqzl at,[0-9a-f]+ <[^>]*>
+[0-9a-f]+ <[^>]*> 54200000 bnezl at,[0-9a-f]+ <[^>]*>
+[0-9a-f]+ <[^>]*> 00000000 nop
+ \.\.\.
diff --git a/binutils/testsuite/binutils-all/mips/mips2-branch-noalias.d b/binutils/testsuite/binutils-all/mips/mips2-branch-noalias.d
new file mode 100644
index 00000000000..0f819e827ab
--- /dev/null
+++ b/binutils/testsuite/binutils-all/mips/mips2-branch-noalias.d
@@ -0,0 +1,18 @@
+#PROG: objcopy
+#objdump: -M no-aliases -m mips:6000 -d --prefix-addresses --show-raw-insn
+#name: MIPS2 branch canonical alias disassembly
+#source: mips-branch-alias.s
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+[0-9a-f]+ <[^>]*> 10000000 beq zero,zero,[0-9a-f]+ <[^>]*>
+[0-9a-f]+ <[^>]*> 04010000 bgez zero,[0-9a-f]+ <[^>]*>
+[0-9a-f]+ <[^>]*> 04110000 bgezal zero,[0-9a-f]+ <[^>]*>
+[0-9a-f]+ <[^>]*> 04100000 bltzal zero,[0-9a-f]+ <[^>]*>
+[0-9a-f]+ <[^>]*> 10200000 beq at,zero,[0-9a-f]+ <[^>]*>
+[0-9a-f]+ <[^>]*> 14200000 bne at,zero,[0-9a-f]+ <[^>]*>
+[0-9a-f]+ <[^>]*> 50200000 beql at,zero,[0-9a-f]+ <[^>]*>
+[0-9a-f]+ <[^>]*> 54200000 bnel at,zero,[0-9a-f]+ <[^>]*>
+[0-9a-f]+ <[^>]*> 00000000 sll zero,zero,0x0
+ \.\.\.
diff --git a/binutils/testsuite/binutils-all/mips/mips32r6-branch-alias.d b/binutils/testsuite/binutils-all/mips/mips32r6-branch-alias.d
new file mode 100644
index 00000000000..aebbb26a6f2
--- /dev/null
+++ b/binutils/testsuite/binutils-all/mips/mips32r6-branch-alias.d
@@ -0,0 +1,17 @@
+#PROG: objcopy
+#objdump: -m mips:isa32r6 -d --prefix-addresses --show-raw-insn
+#name: MIPS32r6 branch instruction alias disassembly
+#source: mips-branch-alias.s
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+[0-9a-f]+ <[^>]*> 10000000 b [0-9a-f]+ <[^>]*>
+[0-9a-f]+ <[^>]*> 04010000 b [0-9a-f]+ <[^>]*>
+[0-9a-f]+ <[^>]*> 04110000 bal [0-9a-f]+ <[^>]*>
+[0-9a-f]+ <[^>]*> 04100000 nal
+[0-9a-f]+ <[^>]*> 10200000 beqz at,[0-9a-f]+ <[^>]*>
+[0-9a-f]+ <[^>]*> 14200000 bnez at,[0-9a-f]+ <[^>]*>
+[0-9a-f]+ <[^>]*> 50200000 0x50200000
+[0-9a-f]+ <[^>]*> 54200000 0x54200000
+ \.\.\.
diff --git a/binutils/testsuite/binutils-all/mips/mips32r6-branch-noalias.d b/binutils/testsuite/binutils-all/mips/mips32r6-branch-noalias.d
new file mode 100644
index 00000000000..d7d512f7962
--- /dev/null
+++ b/binutils/testsuite/binutils-all/mips/mips32r6-branch-noalias.d
@@ -0,0 +1,17 @@
+#PROG: objcopy
+#objdump: -M no-aliases -m mips:isa32r6 -d --prefix-addresses --show-raw-insn
+#name: MIPS32r6 branch canonical alias disassembly
+#source: mips-branch-alias.s
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+[0-9a-f]+ <[^>]*> 10000000 beq zero,zero,[0-9a-f]+ <[^>]*>
+[0-9a-f]+ <[^>]*> 04010000 bgez zero,[0-9a-f]+ <[^>]*>
+[0-9a-f]+ <[^>]*> 04110000 bal [0-9a-f]+ <[^>]*>
+[0-9a-f]+ <[^>]*> 04100000 nal
+[0-9a-f]+ <[^>]*> 10200000 beq at,zero,[0-9a-f]+ <[^>]*>
+[0-9a-f]+ <[^>]*> 14200000 bne at,zero,[0-9a-f]+ <[^>]*>
+[0-9a-f]+ <[^>]*> 50200000 0x50200000
+[0-9a-f]+ <[^>]*> 54200000 0x54200000
+ \.\.\.
diff --git a/binutils/testsuite/binutils-all/objcopy.exp b/binutils/testsuite/binutils-all/objcopy.exp
index bb80c1f0b55..9a5dad5384e 100644
--- a/binutils/testsuite/binutils-all/objcopy.exp
+++ b/binutils/testsuite/binutils-all/objcopy.exp
@@ -967,6 +967,60 @@ proc keep_debug_symbols_and_check_links { prog flags test } {
}
}
+# For ELF relocatables, test that --only-keep-debug
+# marks non-debug output sections as NOBITS.
+
+proc keep_debug_symbols_for_elf_relocatable { prog flags test } {
+ global srcdir
+ global subdir
+ global READELF
+
+ if { [target_compile $srcdir/$subdir/testprog.c tmpdir/testprog.o object debug] != "" } {
+ untested $test
+ return
+ }
+
+ if [is_remote host] {
+ set relocatable [remote_download host tmpdir/testprog.o]
+ } else {
+ set relocatable tmpdir/testprog.o
+ }
+
+ set non_debug_sections {}
+ set got [binutils_run $READELF "-S --wide ${relocatable}"]
+ while { [regexp \
+ {[^a-zA-Z]+([a-zA-Z0-9_\.]+)[ \t]+([A-Z]+)[ \t]+[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ [0-9]+[ \t]+([A-Z]*)[ \t]+[0-9]+(.*)} \
+ $got all name type flag rest] } {
+ if { $type != "NOTE" && [regexp {[AG]} $flag] } {
+ lappend non_debug_sections $name
+ }
+ set got $rest
+ }
+
+ set exec_output [binutils_run $prog "$flags ${relocatable}"]
+ if ![string equal "" $exec_output] {
+ fail $test
+ return
+ }
+
+ set fails 0
+ set got [binutils_run $READELF "-S --wide ${relocatable}"]
+ while { [regexp \
+ {[^a-zA-Z]+([a-zA-Z0-9_\.]+)[ \t]+([A-Z]+)[ \t]+[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ [0-9]+[ \t]+[A-Z]*[ \t]+[0-9]+(.*)} \
+ $got all name type rest] } {
+ if { [lsearch -exact $non_debug_sections $name] >= 0 && $type != "NOBITS" } {
+ set fails 1
+ send_log "Expected SHT_NOBITS type for .$name\n"
+ }
+ set got $rest
+ }
+ if { $fails == 1 } {
+ fail $test
+ return
+ }
+
+ pass $test
+}
set test1 "simple objcopy of executable"
set test1r "run objcopy of executable"
@@ -978,6 +1032,7 @@ set test4 "keep only debug data"
set test5 "simple objcopy of debug data"
if [is_elf_format] {
set test6 "NOBITS sections retain sh_link field"
+ set test7 "--only-keep-debug for ELF relocatables"
}
switch [copy_setup] {
@@ -1008,6 +1063,7 @@ switch [copy_setup] {
"$OBJCOPY" "$OBJCOPYFLAGS" "$test5"
if [is_elf_format] {
keep_debug_symbols_and_check_links "$STRIP" "--only-keep-debug $STRIPFLAGS" "$test6"
+ keep_debug_symbols_for_elf_relocatable "$STRIP" "--only-keep-debug $STRIPFLAGS" "$test7"
}
}
"0" {
@@ -1018,6 +1074,7 @@ switch [copy_setup] {
"$OBJCOPY" "$OBJCOPYFLAGS" "$test5"
if [is_elf_format] {
keep_debug_symbols_and_check_links "$STRIP" "--only-keep-debug $STRIPFLAGS" "$test6"
+ keep_debug_symbols_for_elf_relocatable "$STRIP" "--only-keep-debug $STRIPFLAGS" "$test7"
}
}
}
@@ -1087,6 +1144,10 @@ proc objcopy_test_symbol_manipulation {} {
verbose [file rootname $t]
run_dump_test [file rootname $t]
}
+
+ if { [supports_gnu_unique] } {
+ run_dump_test "weaken-gnu-unique"
+ }
}
proc objcopy_test_elf_common_symbols {} {
diff --git a/binutils/testsuite/binutils-all/objdump.WL b/binutils/testsuite/binutils-all/objdump.WL
index e16d5bad437..f02a9e63839 100644
--- a/binutils/testsuite/binutils-all/objdump.WL
+++ b/binutils/testsuite/binutils-all/objdump.WL
@@ -3,7 +3,7 @@
Contents of the \.debug_line section:
-CU: \./dw2-decodedline\.c:
+dw2-decodedline\.c:
File name Line number Starting address View Stmt
directory/file1\.c:
diff --git a/binutils/testsuite/binutils-all/weaken-gnu-unique.d b/binutils/testsuite/binutils-all/weaken-gnu-unique.d
new file mode 100644
index 00000000000..b0e60c4ff80
--- /dev/null
+++ b/binutils/testsuite/binutils-all/weaken-gnu-unique.d
@@ -0,0 +1,8 @@
+#name: weaken STB_GNU_UNIQUE symbols
+#PROG: objcopy
+#objcopy: -W foo
+#source: unique.s
+#readelf: -s
+
+#...
+ +[0-9]+: +[0-9a-f]+ +[0-9]+ +OBJECT +WEAK +DEFAULT +[1-9] foo
diff --git a/binutils/testsuite/binutils-all/x86-64/pr26808.dump b/binutils/testsuite/binutils-all/x86-64/pr26808.dump
index f64f9d008f9..7ef73b24dc9 100644
--- a/binutils/testsuite/binutils-all/x86-64/pr26808.dump
+++ b/binutils/testsuite/binutils-all/x86-64/pr26808.dump
@@ -30,13 +30,13 @@ Contents of the .debug_info.dwo section:
<a5> DW_AT_decl_file : 1
<a6> DW_AT_decl_line : 30
<a7> DW_AT_type : <0x90>
- <ab> DW_AT_low_pc : (addr_index: 0x0): <no .debug_addr section>
+ <ab> DW_AT_low_pc : (addr_index: 0x0): 0
<ac> DW_AT_high_pc : 0x304
<b4> DW_AT_frame_base : 1 byte block: 9c (DW_OP_call_frame_cfa)
<b6> DW_AT_GNU_all_tail_call_sites: 1
<b6> DW_AT_sibling : <0x11b>
<2><ba>: Abbrev Number: 14 (DW_TAG_lexical_block)
- <bb> DW_AT_low_pc : (addr_index: 0x1): <no .debug_addr section>
+ <bb> DW_AT_low_pc : (addr_index: 0x1): 0
<bc> DW_AT_high_pc : 0x2fa
<3><c4>: Abbrev Number: 15 (DW_TAG_variable)
<c5> DW_AT_name : c1
@@ -56,7 +56,7 @@ Contents of the .debug_info.dwo section:
<ff> DW_AT_artificial : 1
<ff> DW_AT_location : 2 byte block: fb 2 (DW_OP_GNU_addr_index <0x2>)
<3><102>: Abbrev Number: 14 (DW_TAG_lexical_block)
- <103> DW_AT_low_pc : (addr_index: 0x3): <no .debug_addr section>
+ <103> DW_AT_low_pc : (addr_index: 0x3): 0
<104> DW_AT_high_pc : 0x2f
<4><10c>: Abbrev Number: 17 (DW_TAG_variable)
<10d> DW_AT_name : i
@@ -274,7 +274,7 @@ Contents of the .debug_info.dwo section:
<2dd> DW_AT_decl_file : 1
<2de> DW_AT_decl_line : 70
<2df> DW_AT_linkage_name: _Z4f13iv
- <2e8> DW_AT_low_pc : (addr_index: 0x0): <no .debug_addr section>
+ <2e8> DW_AT_low_pc : (addr_index: 0x0): 0
<2e9> DW_AT_high_pc : 0x6
<2f1> DW_AT_frame_base : 1 byte block: 9c (DW_OP_call_frame_cfa)
<2f3> DW_AT_GNU_all_call_sites: 1
@@ -282,7 +282,7 @@ Contents of the .debug_info.dwo section:
<2f4> DW_AT_specification: <0x219>
<2f8> DW_AT_decl_file : 2
<2f9> DW_AT_decl_line : 30
- <2fa> DW_AT_low_pc : (addr_index: 0x1): <no .debug_addr section>
+ <2fa> DW_AT_low_pc : (addr_index: 0x1): 0
<2fb> DW_AT_high_pc : 0x20
<303> DW_AT_frame_base : 1 byte block: 9c (DW_OP_call_frame_cfa)
<305> DW_AT_object_pointer: <0x30d>
@@ -300,7 +300,7 @@ Contents of the .debug_info.dwo section:
<31d> DW_AT_specification: <0x223>
<321> DW_AT_decl_file : 2
<322> DW_AT_decl_line : 38
- <323> DW_AT_low_pc : (addr_index: 0x2): <no .debug_addr section>
+ <323> DW_AT_low_pc : (addr_index: 0x2): 0
<324> DW_AT_high_pc : 0x18
<32c> DW_AT_frame_base : 1 byte block: 9c (DW_OP_call_frame_cfa)
<32e> DW_AT_object_pointer: <0x336>
@@ -316,7 +316,7 @@ Contents of the .debug_info.dwo section:
<341> DW_AT_specification: <0x22d>
<345> DW_AT_decl_file : 2
<346> DW_AT_decl_line : 46
- <347> DW_AT_low_pc : (addr_index: 0x3): <no .debug_addr section>
+ <347> DW_AT_low_pc : (addr_index: 0x3): 0
<348> DW_AT_high_pc : 0x18
<350> DW_AT_frame_base : 1 byte block: 9c (DW_OP_call_frame_cfa)
<352> DW_AT_object_pointer: <0x35a>
@@ -332,7 +332,7 @@ Contents of the .debug_info.dwo section:
<365> DW_AT_specification: <0x237>
<369> DW_AT_decl_file : 2
<36a> DW_AT_decl_line : 54
- <36b> DW_AT_low_pc : (addr_index: 0x4): <no .debug_addr section>
+ <36b> DW_AT_low_pc : (addr_index: 0x4): 0
<36c> DW_AT_high_pc : 0x16
<374> DW_AT_frame_base : 1 byte block: 9c (DW_OP_call_frame_cfa)
<376> DW_AT_object_pointer: <0x37e>
@@ -348,7 +348,7 @@ Contents of the .debug_info.dwo section:
<389> DW_AT_specification: <0x26b>
<38d> DW_AT_decl_file : 2
<38e> DW_AT_decl_line : 62
- <38f> DW_AT_low_pc : (addr_index: 0x5): <no .debug_addr section>
+ <38f> DW_AT_low_pc : (addr_index: 0x5): 0
<390> DW_AT_high_pc : 0x16
<398> DW_AT_frame_base : 1 byte block: 9c (DW_OP_call_frame_cfa)
<39a> DW_AT_object_pointer: <0x3a2>
@@ -366,7 +366,7 @@ Contents of the .debug_info.dwo section:
<3b2> DW_AT_specification: <0x275>
<3b6> DW_AT_decl_file : 2
<3b7> DW_AT_decl_line : 72
- <3b8> DW_AT_low_pc : (addr_index: 0x6): <no .debug_addr section>
+ <3b8> DW_AT_low_pc : (addr_index: 0x6): 0
<3b9> DW_AT_high_pc : 0x1b
<3c1> DW_AT_frame_base : 1 byte block: 9c (DW_OP_call_frame_cfa)
<3c3> DW_AT_object_pointer: <0x3cb>
@@ -382,7 +382,7 @@ Contents of the .debug_info.dwo section:
<3d6> DW_AT_specification: <0x27f>
<3da> DW_AT_decl_file : 2
<3db> DW_AT_decl_line : 82
- <3dc> DW_AT_low_pc : (addr_index: 0x7): <no .debug_addr section>
+ <3dc> DW_AT_low_pc : (addr_index: 0x7): 0
<3dd> DW_AT_high_pc : 0x1b
<3e5> DW_AT_frame_base : 1 byte block: 9c (DW_OP_call_frame_cfa)
<3e7> DW_AT_object_pointer: <0x3ef>
@@ -398,7 +398,7 @@ Contents of the .debug_info.dwo section:
<3fa> DW_AT_specification: <0x289>
<3fe> DW_AT_decl_file : 2
<3ff> DW_AT_decl_line : 92
- <400> DW_AT_low_pc : (addr_index: 0x8): <no .debug_addr section>
+ <400> DW_AT_low_pc : (addr_index: 0x8): 0
<401> DW_AT_high_pc : 0x19
<409> DW_AT_frame_base : 1 byte block: 9c (DW_OP_call_frame_cfa)
<40b> DW_AT_object_pointer: <0x413>
@@ -414,7 +414,7 @@ Contents of the .debug_info.dwo section:
<41e> DW_AT_specification: <0x2ae>
<422> DW_AT_decl_file : 2
<423> DW_AT_decl_line : 102
- <424> DW_AT_low_pc : (addr_index: 0x9): <no .debug_addr section>
+ <424> DW_AT_low_pc : (addr_index: 0x9): 0
<425> DW_AT_high_pc : 0x19
<42d> DW_AT_frame_base : 1 byte block: 9c (DW_OP_call_frame_cfa)
<42f> DW_AT_object_pointer: <0x437>
@@ -432,7 +432,7 @@ Contents of the .debug_info.dwo section:
<447> DW_AT_specification: <0x2b8>
<44b> DW_AT_decl_file : 2
<44c> DW_AT_decl_line : 112
- <44d> DW_AT_low_pc : (addr_index: 0xa): <no .debug_addr section>
+ <44d> DW_AT_low_pc : (addr_index: 0xa): 0
<44e> DW_AT_high_pc : 0x1f
<456> DW_AT_frame_base : 1 byte block: 9c (DW_OP_call_frame_cfa)
<458> DW_AT_object_pointer: <0x460>
@@ -451,7 +451,7 @@ Contents of the .debug_info.dwo section:
<471> DW_AT_decl_line : 120
<472> DW_AT_linkage_name: _Z4f11av
<47b> DW_AT_type : <0x242>
- <47f> DW_AT_low_pc : (addr_index: 0xb): <no .debug_addr section>
+ <47f> DW_AT_low_pc : (addr_index: 0xb): 0
<480> DW_AT_high_pc : 0xb
<488> DW_AT_frame_base : 1 byte block: 9c (DW_OP_call_frame_cfa)
<48a> DW_AT_GNU_all_call_sites: 1
@@ -459,7 +459,7 @@ Contents of the .debug_info.dwo section:
<48b> DW_AT_specification: <0x2c2>
<48f> DW_AT_decl_file : 2
<490> DW_AT_decl_line : 126
- <491> DW_AT_low_pc : (addr_index: 0xc): <no .debug_addr section>
+ <491> DW_AT_low_pc : (addr_index: 0xc): 0
<492> DW_AT_high_pc : 0x20
<49a> DW_AT_frame_base : 1 byte block: 9c (DW_OP_call_frame_cfa)
<49c> DW_AT_object_pointer: <0x4a4>
@@ -478,7 +478,7 @@ Contents of the .debug_info.dwo section:
<4b4> DW_AT_decl_line : 134
<4b5> DW_AT_linkage_name: _Z3t12v
<4bd> DW_AT_type : <0x249>
- <4c1> DW_AT_low_pc : (addr_index: 0xd): <no .debug_addr section>
+ <4c1> DW_AT_low_pc : (addr_index: 0xd): 0
<4c2> DW_AT_high_pc : 0x19
<4ca> DW_AT_frame_base : 1 byte block: 9c (DW_OP_call_frame_cfa)
<4cc> DW_AT_GNU_all_tail_call_sites: 1
@@ -489,7 +489,7 @@ Contents of the .debug_info.dwo section:
<4d2> DW_AT_decl_line : 142
<4d3> DW_AT_linkage_name: _Z3t13v
<4db> DW_AT_type : <0x249>
- <4df> DW_AT_low_pc : (addr_index: 0xe): <no .debug_addr section>
+ <4df> DW_AT_low_pc : (addr_index: 0xe): 0
<4e0> DW_AT_high_pc : 0x14
<4e8> DW_AT_frame_base : 1 byte block: 9c (DW_OP_call_frame_cfa)
<4ea> DW_AT_GNU_all_tail_call_sites: 1
@@ -500,13 +500,13 @@ Contents of the .debug_info.dwo section:
<4f0> DW_AT_decl_line : 150
<4f1> DW_AT_linkage_name: _Z3t14v
<4f9> DW_AT_type : <0x249>
- <4fd> DW_AT_low_pc : (addr_index: 0xf): <no .debug_addr section>
+ <4fd> DW_AT_low_pc : (addr_index: 0xf): 0
<4fe> DW_AT_high_pc : 0x61
<506> DW_AT_frame_base : 1 byte block: 9c (DW_OP_call_frame_cfa)
<508> DW_AT_GNU_all_tail_call_sites: 1
<508> DW_AT_sibling : <0x532>
<2><50c>: Abbrev Number: 24 (DW_TAG_lexical_block)
- <50d> DW_AT_low_pc : (addr_index: 0x10): <no .debug_addr section>
+ <50d> DW_AT_low_pc : (addr_index: 0x10): 0
<50e> DW_AT_high_pc : 0x57
<3><516>: Abbrev Number: 25 (DW_TAG_variable)
<517> DW_AT_name : s1
@@ -538,13 +538,13 @@ Contents of the .debug_info.dwo section:
<54b> DW_AT_decl_line : 163
<54c> DW_AT_linkage_name: _Z3t15v
<554> DW_AT_type : <0x249>
- <558> DW_AT_low_pc : (addr_index: 0x11): <no .debug_addr section>
+ <558> DW_AT_low_pc : (addr_index: 0x11): 0
<559> DW_AT_high_pc : 0x5d
<561> DW_AT_frame_base : 1 byte block: 9c (DW_OP_call_frame_cfa)
<563> DW_AT_GNU_all_tail_call_sites: 1
<563> DW_AT_sibling : <0x58d>
<2><567>: Abbrev Number: 24 (DW_TAG_lexical_block)
- <568> DW_AT_low_pc : (addr_index: 0x12): <no .debug_addr section>
+ <568> DW_AT_low_pc : (addr_index: 0x12): 0
<569> DW_AT_high_pc : 0x53
<3><571>: Abbrev Number: 25 (DW_TAG_variable)
<572> DW_AT_name : s1
@@ -576,7 +576,7 @@ Contents of the .debug_info.dwo section:
<5a9> DW_AT_decl_line : 176
<5aa> DW_AT_linkage_name: _Z3t16v
<5b2> DW_AT_type : <0x249>
- <5b6> DW_AT_low_pc : (addr_index: 0x13): <no .debug_addr section>
+ <5b6> DW_AT_low_pc : (addr_index: 0x13): 0
<5b7> DW_AT_high_pc : 0x13
<5bf> DW_AT_frame_base : 1 byte block: 9c (DW_OP_call_frame_cfa)
<5c1> DW_AT_GNU_all_tail_call_sites: 1
@@ -587,13 +587,13 @@ Contents of the .debug_info.dwo section:
<5c7> DW_AT_decl_line : 184
<5c8> DW_AT_linkage_name: _Z3t17v
<5d0> DW_AT_type : <0x249>
- <5d4> DW_AT_low_pc : (addr_index: 0x14): <no .debug_addr section>
+ <5d4> DW_AT_low_pc : (addr_index: 0x14): 0
<5d5> DW_AT_high_pc : 0x5f
<5dd> DW_AT_frame_base : 1 byte block: 9c (DW_OP_call_frame_cfa)
<5df> DW_AT_GNU_all_call_sites: 1
<5df> DW_AT_sibling : <0x612>
<2><5e3>: Abbrev Number: 24 (DW_TAG_lexical_block)
- <5e4> DW_AT_low_pc : (addr_index: 0x15): <no .debug_addr section>
+ <5e4> DW_AT_low_pc : (addr_index: 0x15): 0
<5e5> DW_AT_high_pc : 0x59
<3><5ed>: Abbrev Number: 25 (DW_TAG_variable)
<5ee> DW_AT_name : c
@@ -602,7 +602,7 @@ Contents of the .debug_info.dwo section:
<5f2> DW_AT_type : <0x53d>
<5f6> DW_AT_location : 2 byte block: 91 6f (DW_OP_fbreg: -17)
<3><5f9>: Abbrev Number: 24 (DW_TAG_lexical_block)
- <5fa> DW_AT_low_pc : (addr_index: 0x16): <no .debug_addr section>
+ <5fa> DW_AT_low_pc : (addr_index: 0x16): 0
<5fb> DW_AT_high_pc : 0x50
<4><603>: Abbrev Number: 25 (DW_TAG_variable)
<604> DW_AT_name : i
@@ -620,13 +620,13 @@ Contents of the .debug_info.dwo section:
<618> DW_AT_decl_line : 199
<619> DW_AT_linkage_name: _Z3t18v
<621> DW_AT_type : <0x249>
- <625> DW_AT_low_pc : (addr_index: 0x17): <no .debug_addr section>
+ <625> DW_AT_low_pc : (addr_index: 0x17): 0
<626> DW_AT_high_pc : 0x5f
<62e> DW_AT_frame_base : 1 byte block: 9c (DW_OP_call_frame_cfa)
<630> DW_AT_GNU_all_tail_call_sites: 1
<630> DW_AT_sibling : <0x67a>
<2><634>: Abbrev Number: 24 (DW_TAG_lexical_block)
- <635> DW_AT_low_pc : (addr_index: 0x18): <no .debug_addr section>
+ <635> DW_AT_low_pc : (addr_index: 0x18): 0
<636> DW_AT_high_pc : 0x55
<3><63e>: Abbrev Number: 25 (DW_TAG_variable)
<63f> DW_AT_name : c
@@ -635,7 +635,7 @@ Contents of the .debug_info.dwo section:
<643> DW_AT_type : <0x53d>
<647> DW_AT_location : 2 byte block: 91 6f (DW_OP_fbreg: -17)
<3><64a>: Abbrev Number: 24 (DW_TAG_lexical_block)
- <64b> DW_AT_low_pc : (addr_index: 0x19): <no .debug_addr section>
+ <64b> DW_AT_low_pc : (addr_index: 0x19): 0
<64c> DW_AT_high_pc : 0x4c
<4><654>: Abbrev Number: 25 (DW_TAG_variable)
<655> DW_AT_name : i
@@ -644,7 +644,7 @@ Contents of the .debug_info.dwo section:
<659> DW_AT_type : <0x242>
<65d> DW_AT_location : 2 byte block: 91 68 (DW_OP_fbreg: -24)
<4><660>: Abbrev Number: 24 (DW_TAG_lexical_block)
- <661> DW_AT_low_pc : (addr_index: 0x1a): <no .debug_addr section>
+ <661> DW_AT_low_pc : (addr_index: 0x1a): 0
<662> DW_AT_high_pc : 0x34
<5><66a>: Abbrev Number: 25 (DW_TAG_variable)
<66b> DW_AT_name : s
@@ -786,7 +786,7 @@ Contents of the .debug_info.dwo section:
<7d3> DW_AT_decl_line : 32
<7d4> DW_AT_linkage_name: _Z4t16av
<7dd> DW_AT_type : <0x7c4>
- <7e1> DW_AT_low_pc : (addr_index: 0x0): <no .debug_addr section>
+ <7e1> DW_AT_low_pc : (addr_index: 0x0): 0
<7e2> DW_AT_high_pc : 0x13
<7ea> DW_AT_frame_base : 1 byte block: 9c (DW_OP_call_frame_cfa)
<7ec> DW_AT_GNU_all_tail_call_sites: 1
@@ -878,14 +878,14 @@ Contents of the .debug_info.dwo section:
<908> DW_AT_decl_file : 1
<909> DW_AT_decl_line : 70
<90a> DW_AT_linkage_name: _Z4f13iv
- <913> DW_AT_low_pc : (addr_index: 0x0): <no .debug_addr section>
+ <913> DW_AT_low_pc : (addr_index: 0x0): 0
<914> DW_AT_high_pc : 0x6
<91c> DW_AT_frame_base : 1 byte block: 9c (DW_OP_call_frame_cfa)
<91e> DW_AT_GNU_all_call_sites: 1
<1><91e>: Abbrev Number: 17 (DW_TAG_subprogram)
<91f> DW_AT_specification: <0x8a8>
<923> DW_AT_decl_file : 2
- <924> DW_AT_low_pc : (addr_index: 0x1): <no .debug_addr section>
+ <924> DW_AT_low_pc : (addr_index: 0x1): 0
<925> DW_AT_high_pc : 0xf
<92d> DW_AT_frame_base : 1 byte block: 9c (DW_OP_call_frame_cfa)
<92f> DW_AT_object_pointer: <0x937>
@@ -903,7 +903,7 @@ Contents of the .debug_info.dwo section:
<94b> DW_AT_specification: <0x89b>
<94f> DW_AT_decl_file : 2
<950> DW_AT_decl_line : 36
- <951> DW_AT_low_pc : (addr_index: 0x2): <no .debug_addr section>
+ <951> DW_AT_low_pc : (addr_index: 0x2): 0
<952> DW_AT_high_pc : 0x20
<95a> DW_AT_frame_base : 1 byte block: 9c (DW_OP_call_frame_cfa)
<95c> DW_AT_object_pointer: <0x964>
@@ -922,7 +922,7 @@ Contents of the .debug_info.dwo section:
<978> DW_AT_decl_line : 72
<979> DW_AT_linkage_name: _Z3f10v
<981> DW_AT_type : <0x8b7>
- <985> DW_AT_low_pc : (addr_index: 0x3): <no .debug_addr section>
+ <985> DW_AT_low_pc : (addr_index: 0x3): 0
<986> DW_AT_high_pc : 0xb
<98e> DW_AT_frame_base : 1 byte block: 9c (DW_OP_call_frame_cfa)
<990> DW_AT_GNU_all_call_sites: 1
@@ -933,7 +933,7 @@ Contents of the .debug_info.dwo section:
<997> DW_AT_decl_line : 80
<998> DW_AT_linkage_name: _Z4f11bPFivE
<9a5> DW_AT_type : <0x8b7>
- <9a9> DW_AT_low_pc : (addr_index: 0x4): <no .debug_addr section>
+ <9a9> DW_AT_low_pc : (addr_index: 0x4): 0
<9aa> DW_AT_high_pc : 0x14
<9b2> DW_AT_frame_base : 1 byte block: 9c (DW_OP_call_frame_cfa)
<9b4> DW_AT_GNU_all_tail_call_sites: 1
@@ -954,7 +954,7 @@ Contents of the .debug_info.dwo section:
<9d3> DW_AT_specification: <0x8e0>
<9d7> DW_AT_decl_file : 2
<9d8> DW_AT_decl_line : 88
- <9d9> DW_AT_low_pc : (addr_index: 0x5): <no .debug_addr section>
+ <9d9> DW_AT_low_pc : (addr_index: 0x5): 0
<9da> DW_AT_high_pc : 0xf
<9e2> DW_AT_frame_base : 1 byte block: 9c (DW_OP_call_frame_cfa)
<9e4> DW_AT_object_pointer: <0x9ec>
@@ -976,7 +976,7 @@ Contents of the .debug_info.dwo section:
<a06> DW_AT_decl_line : 96
<a07> DW_AT_linkage_name: _Z3f13v
<a0f> DW_AT_type : <0xa1e>
- <a13> DW_AT_low_pc : (addr_index: 0x6): <no .debug_addr section>
+ <a13> DW_AT_low_pc : (addr_index: 0x6): 0
<a14> DW_AT_high_pc : 0xb
<a1c> DW_AT_frame_base : 1 byte block: 9c (DW_OP_call_frame_cfa)
<a1e> DW_AT_GNU_all_call_sites: 1
@@ -990,7 +990,7 @@ Contents of the .debug_info.dwo section:
<a2a> DW_AT_decl_line : 104
<a2b> DW_AT_linkage_name: _Z3f14v
<a33> DW_AT_type : <0xa42>
- <a37> DW_AT_low_pc : (addr_index: 0x7): <no .debug_addr section>
+ <a37> DW_AT_low_pc : (addr_index: 0x7): 0
<a38> DW_AT_high_pc : 0xb
<a40> DW_AT_frame_base : 1 byte block: 9c (DW_OP_call_frame_cfa)
<a42> DW_AT_GNU_all_call_sites: 1
@@ -1010,7 +1010,7 @@ Contents of the .debug_info.dwo section:
<a5b> DW_AT_decl_line : 112
<a5c> DW_AT_linkage_name: _Z3f15v
<a64> DW_AT_type : <0xa73>
- <a68> DW_AT_low_pc : (addr_index: 0x8): <no .debug_addr section>
+ <a68> DW_AT_low_pc : (addr_index: 0x8): 0
<a69> DW_AT_high_pc : 0xb
<a71> DW_AT_frame_base : 1 byte block: 9c (DW_OP_call_frame_cfa)
<a73> DW_AT_GNU_all_call_sites: 1
@@ -1030,7 +1030,7 @@ Contents of the .debug_info.dwo section:
<a8f> DW_AT_decl_line : 127
<a90> DW_AT_linkage_name: _Z3f18i
<a98> DW_AT_type : <0xa42>
- <a9c> DW_AT_low_pc : (addr_index: 0x9): <no .debug_addr section>
+ <a9c> DW_AT_low_pc : (addr_index: 0x9): 0
<a9d> DW_AT_high_pc : 0x44
<aa5> DW_AT_frame_base : 1 byte block: 9c (DW_OP_call_frame_cfa)
<aa7> DW_AT_GNU_all_call_sites: 1
diff --git a/binutils/testsuite/lib/binutils-common.exp b/binutils/testsuite/lib/binutils-common.exp
index 0e0ba8e5aee..ccc33a827b4 100644
--- a/binutils/testsuite/lib/binutils-common.exp
+++ b/binutils/testsuite/lib/binutils-common.exp
@@ -427,6 +427,18 @@ proc supports_persistent_section {} {
return 0;
}
+# Whether a target support DT_RELR sections.
+proc supports_dt_relr {} {
+ if { ([istarget x86_64-*-*]
+ || [istarget i?86-*-*]
+ || [istarget powerpc64*-*-*])
+ && ([istarget *-*-linux*]
+ || [istarget *-*-gnu*]) } {
+ return 1
+ }
+ return 0
+}
+
# Compare two files line-by-line. FILE_1 is the actual output and FILE_2
# is the expected output. Ignore blank lines in either file.
#
@@ -625,6 +637,10 @@ proc prune_warnings_extra { text } {
}
# PR binutils/23898: It is OK to have gaps in build notes.
regsub -all "(^|\n)(\[^\n\]*: Warning: Gap in build notes detected from\[^\n\]*\n?)+" $text "\\1" text
+ regsub -all "(^|\n)(\[^\n\]*: warning:\[^\n\]*missing \\.note\\.GNU-stack section\[^\n\]*\n?)+" $text "\\1" text
+ regsub -all "(^|\n)(\[^\n\]*: NOTE: This behaviour is deprecated\[^\n\]*\n?)+" $text "\\1" text
+ regsub -all "(^|\n)(\[^\n\]*: warning:\[^\n\]*has a LOAD segment with RWX permissions\[^\n\]*\n?)+" $text "\\1" text
+ regsub -all "(^|\n)(\[^\n\]*: warning:\[^\n\]*has a TLS segment with execute permission\[^\n\]*\n?)+" $text "\\1" text
return $text
}
@@ -854,7 +870,9 @@ proc run_dump_test { name {extra_options {}} } {
global ADDR2LINE ADDR2LINEFLAGS AS ASFLAGS CC_FOR_TARGET CFLAGS_FOR_TARGET
global ELFEDIT ELFEDITFLAGS LD LDFLAGS NM NMFLAGS OBJCOPY OBJCOPYFLAGS
global OBJDUMP OBJDUMPFLAGS READELF READELFFLAGS STRIP STRIPFLAGS
+ global SIZE SIZEFLAGS
global copyfile env runtests srcdir subdir verbose
+ global DT_RELR_LDFLAGS NO_DT_RELR_LDFLAGS
if [string match "*/*" $name] {
set file $name
@@ -1312,7 +1330,7 @@ proc run_dump_test { name {extra_options {}} } {
send_log "$cmd\n"
set cmdret [remote_exec host [concat sh -c [list "$cmd 2>&1"]] "" "/dev/null" "dump.tmp"]
remote_upload host "dump.tmp"
- append comp_output [file_contents "dump.tmp"]
+ append comp_output [prune_warnings [file_contents "dump.tmp"]]
remote_file host delete "dump.tmp"
remote_file build delete "dump.tmp"
set cmdret [lindex $cmdret 0]
@@ -1329,7 +1347,7 @@ proc run_dump_test { name {extra_options {}} } {
send_log "$cmd\n"
set cmdret [remote_exec host [concat sh -c [list "$cmd 2>&1"]] "" "/dev/null" "dump.tmp"]
remote_upload host "dump.tmp"
- append comp_output [file_contents "dump.tmp"]
+ append comp_output [prune_warnings [file_contents "dump.tmp"]]
remote_file host delete "dump.tmp"
remote_file build delete "dump.tmp"
set cmdret [lindex $cmdret 0]
diff --git a/config.guess b/config.guess
index cc7a8107011..7f76b6228f7 100755
--- a/config.guess
+++ b/config.guess
@@ -1,12 +1,14 @@
#! /bin/sh
# Attempt to guess a canonical system name.
-# Copyright 1992-2021 Free Software Foundation, Inc.
+# Copyright 1992-2022 Free Software Foundation, Inc.
-timestamp='2021-04-21'
+# shellcheck disable=SC2006,SC2268 # see below for rationale
+
+timestamp='2022-01-09'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
+# 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
@@ -32,7 +34,15 @@ timestamp='2021-04-21'
# Please send patches to <config-patches@gnu.org>.
-me=$(echo "$0" | sed -e 's,.*/,,')
+# The "shellcheck disable" line above the timestamp inhibits complaints
+# about features and limitations of the classic Bourne shell that were
+# superseded or lifted in POSIX. However, this script identifies a wide
+# variety of pre-POSIX systems that do not have POSIX shells at all, and
+# even some reasonably current systems (Solaris 10 as case-in-point) still
+# have a pre-POSIX /bin/sh.
+
+
+me=`echo "$0" | sed -e 's,.*/,,'`
usage="\
Usage: $0 [OPTION]
@@ -50,7 +60,7 @@ version="\
GNU config.guess ($timestamp)
Originally written by Per Bothner.
-Copyright 1992-2021 Free Software Foundation, Inc.
+Copyright 1992-2022 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -84,6 +94,9 @@ if test $# != 0; then
exit 1
fi
+# Just in case it came from the environment.
+GUESS=
+
# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
# compiler to aid in system detection is discouraged as it requires
# temporary files to be created and, as you can see below, it is a
@@ -102,8 +115,8 @@ set_cc_for_build() {
# prevent multiple calls if $tmp is already set
test "$tmp" && return 0
: "${TMPDIR=/tmp}"
- # shellcheck disable=SC2039
- { tmp=$( (umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null) && test -n "$tmp" && test -d "$tmp" ; } ||
+ # shellcheck disable=SC2039,SC3028
+ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
{ test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } ||
{ tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } ||
{ echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; }
@@ -112,7 +125,7 @@ set_cc_for_build() {
,,) echo "int x;" > "$dummy.c"
for driver in cc gcc c89 c99 ; do
if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then
- CC_FOR_BUILD="$driver"
+ CC_FOR_BUILD=$driver
break
fi
done
@@ -131,12 +144,12 @@ if test -f /.attbin/uname ; then
PATH=$PATH:/.attbin ; export PATH
fi
-UNAME_MACHINE=$( (uname -m) 2>/dev/null) || UNAME_MACHINE=unknown
-UNAME_RELEASE=$( (uname -r) 2>/dev/null) || UNAME_RELEASE=unknown
-UNAME_SYSTEM=$( (uname -s) 2>/dev/null) || UNAME_SYSTEM=unknown
-UNAME_VERSION=$( (uname -v) 2>/dev/null) || UNAME_VERSION=unknown
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
-case "$UNAME_SYSTEM" in
+case $UNAME_SYSTEM in
Linux|GNU|GNU/*)
LIBC=unknown
@@ -157,7 +170,8 @@ Linux|GNU|GNU/*)
#endif
#endif
EOF
- eval "$($CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g')"
+ cc_set_libc=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`
+ eval "$cc_set_libc"
# Second heuristic to detect musl libc.
if [ "$LIBC" = unknown ] &&
@@ -176,7 +190,7 @@ esac
# Note: order is significant - the case branches are not exclusive.
-case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
+case $UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION in
*:NetBSD:*:*)
# NetBSD (nbsd) targets should (where applicable) match one or
# more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
@@ -188,11 +202,11 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
#
# Note: NetBSD doesn't particularly care about the vendor
# portion of the name. We always set it to "unknown".
- UNAME_MACHINE_ARCH=$( (uname -p 2>/dev/null || \
+ UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \
/sbin/sysctl -n hw.machine_arch 2>/dev/null || \
/usr/sbin/sysctl -n hw.machine_arch 2>/dev/null || \
- echo unknown))
- case "$UNAME_MACHINE_ARCH" in
+ echo unknown)`
+ case $UNAME_MACHINE_ARCH in
aarch64eb) machine=aarch64_be-unknown ;;
armeb) machine=armeb-unknown ;;
arm*) machine=arm-unknown ;;
@@ -200,15 +214,15 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
sh3eb) machine=sh-unknown ;;
sh5el) machine=sh5le-unknown ;;
earmv*)
- arch=$(echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,')
- endian=$(echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p')
- machine="${arch}${endian}"-unknown
+ arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'`
+ endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'`
+ machine=${arch}${endian}-unknown
;;
- *) machine="$UNAME_MACHINE_ARCH"-unknown ;;
+ *) machine=$UNAME_MACHINE_ARCH-unknown ;;
esac
# The Operating System including object format, if it has switched
# to ELF recently (or will in the future) and ABI.
- case "$UNAME_MACHINE_ARCH" in
+ case $UNAME_MACHINE_ARCH in
earm*)
os=netbsdelf
;;
@@ -229,10 +243,10 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
;;
esac
# Determine ABI tags.
- case "$UNAME_MACHINE_ARCH" in
+ case $UNAME_MACHINE_ARCH in
earm*)
expr='s/^earmv[0-9]/-eabi/;s/eb$//'
- abi=$(echo "$UNAME_MACHINE_ARCH" | sed -e "$expr")
+ abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"`
;;
esac
# The OS release
@@ -240,80 +254,82 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
# thus, need a distinct triplet. However, they do not need
# kernel version information, so it can be replaced with a
# suitable tag, in the style of linux-gnu.
- case "$UNAME_VERSION" in
+ case $UNAME_VERSION in
Debian*)
release='-gnu'
;;
*)
- release=$(echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2)
+ release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2`
;;
esac
# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
# contains redundant information, the shorter form:
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
- echo "$machine-${os}${release}${abi-}"
- exit ;;
+ GUESS=$machine-${os}${release}${abi-}
+ ;;
*:Bitrig:*:*)
- UNAME_MACHINE_ARCH=$(arch | sed 's/Bitrig.//')
- echo "$UNAME_MACHINE_ARCH"-unknown-bitrig"$UNAME_RELEASE"
- exit ;;
+ UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
+ GUESS=$UNAME_MACHINE_ARCH-unknown-bitrig$UNAME_RELEASE
+ ;;
*:OpenBSD:*:*)
- UNAME_MACHINE_ARCH=$(arch | sed 's/OpenBSD.//')
- echo "$UNAME_MACHINE_ARCH"-unknown-openbsd"$UNAME_RELEASE"
- exit ;;
+ UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
+ GUESS=$UNAME_MACHINE_ARCH-unknown-openbsd$UNAME_RELEASE
+ ;;
*:SecBSD:*:*)
- UNAME_MACHINE_ARCH=$(arch | sed 's/SecBSD.//')
- echo "$UNAME_MACHINE_ARCH"-unknown-secbsd"$UNAME_RELEASE"
- exit ;;
+ UNAME_MACHINE_ARCH=`arch | sed 's/SecBSD.//'`
+ GUESS=$UNAME_MACHINE_ARCH-unknown-secbsd$UNAME_RELEASE
+ ;;
*:LibertyBSD:*:*)
- UNAME_MACHINE_ARCH=$(arch | sed 's/^.*BSD\.//')
- echo "$UNAME_MACHINE_ARCH"-unknown-libertybsd"$UNAME_RELEASE"
- exit ;;
+ UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'`
+ GUESS=$UNAME_MACHINE_ARCH-unknown-libertybsd$UNAME_RELEASE
+ ;;
*:MidnightBSD:*:*)
- echo "$UNAME_MACHINE"-unknown-midnightbsd"$UNAME_RELEASE"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-midnightbsd$UNAME_RELEASE
+ ;;
*:ekkoBSD:*:*)
- echo "$UNAME_MACHINE"-unknown-ekkobsd"$UNAME_RELEASE"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-ekkobsd$UNAME_RELEASE
+ ;;
*:SolidBSD:*:*)
- echo "$UNAME_MACHINE"-unknown-solidbsd"$UNAME_RELEASE"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-solidbsd$UNAME_RELEASE
+ ;;
*:OS108:*:*)
- echo "$UNAME_MACHINE"-unknown-os108_"$UNAME_RELEASE"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-os108_$UNAME_RELEASE
+ ;;
macppc:MirBSD:*:*)
- echo powerpc-unknown-mirbsd"$UNAME_RELEASE"
- exit ;;
+ GUESS=powerpc-unknown-mirbsd$UNAME_RELEASE
+ ;;
*:MirBSD:*:*)
- echo "$UNAME_MACHINE"-unknown-mirbsd"$UNAME_RELEASE"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-mirbsd$UNAME_RELEASE
+ ;;
*:Sortix:*:*)
- echo "$UNAME_MACHINE"-unknown-sortix
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-sortix
+ ;;
*:Twizzler:*:*)
- echo "$UNAME_MACHINE"-unknown-twizzler
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-twizzler
+ ;;
*:Redox:*:*)
- echo "$UNAME_MACHINE"-unknown-redox
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-redox
+ ;;
mips:OSF1:*.*)
- echo mips-dec-osf1
- exit ;;
+ GUESS=mips-dec-osf1
+ ;;
alpha:OSF1:*:*)
+ # Reset EXIT trap before exiting to avoid spurious non-zero exit code.
+ trap '' 0
case $UNAME_RELEASE in
*4.0)
- UNAME_RELEASE=$(/usr/sbin/sizer -v | awk '{print $3}')
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
;;
*5.*)
- UNAME_RELEASE=$(/usr/sbin/sizer -v | awk '{print $4}')
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
;;
esac
# According to Compaq, /usr/sbin/psrinfo has been available on
# OSF/1 and Tru64 systems produced since 1995. I hope that
# covers most systems running today. This code pipes the CPU
# types through head -n 1, so we only detect the type of CPU 0.
- ALPHA_CPU_TYPE=$(/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1)
- case "$ALPHA_CPU_TYPE" 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 ;;
"EV4.5 (21064)")
@@ -350,68 +366,69 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
# 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)"
- # Reset EXIT trap before exiting to avoid spurious non-zero exit code.
- exitcode=$?
- trap '' 0
- exit $exitcode ;;
+ OSF_REL=`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
+ GUESS=$UNAME_MACHINE-dec-osf$OSF_REL
+ ;;
Amiga*:UNIX_System_V:4.0:*)
- echo m68k-unknown-sysv4
- exit ;;
+ GUESS=m68k-unknown-sysv4
+ ;;
*:[Aa]miga[Oo][Ss]:*:*)
- echo "$UNAME_MACHINE"-unknown-amigaos
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-amigaos
+ ;;
*:[Mm]orph[Oo][Ss]:*:*)
- echo "$UNAME_MACHINE"-unknown-morphos
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-morphos
+ ;;
*:OS/390:*:*)
- echo i370-ibm-openedition
- exit ;;
+ GUESS=i370-ibm-openedition
+ ;;
*:z/VM:*:*)
- echo s390-ibm-zvmoe
- exit ;;
+ GUESS=s390-ibm-zvmoe
+ ;;
*:OS400:*:*)
- echo powerpc-ibm-os400
- exit ;;
+ GUESS=powerpc-ibm-os400
+ ;;
arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
- echo arm-acorn-riscix"$UNAME_RELEASE"
- exit ;;
+ GUESS=arm-acorn-riscix$UNAME_RELEASE
+ ;;
arm*:riscos:*:*|arm*:RISCOS:*:*)
- echo arm-unknown-riscos
- exit ;;
+ GUESS=arm-unknown-riscos
+ ;;
SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
- echo hppa1.1-hitachi-hiuxmpp
- exit ;;
+ GUESS=hppa1.1-hitachi-hiuxmpp
+ ;;
Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
# akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
- if test "$( (/bin/universe) 2>/dev/null)" = att ; then
- echo pyramid-pyramid-sysv3
- else
- echo pyramid-pyramid-bsd
- fi
- exit ;;
+ case `(/bin/universe) 2>/dev/null` in
+ att) GUESS=pyramid-pyramid-sysv3 ;;
+ *) GUESS=pyramid-pyramid-bsd ;;
+ esac
+ ;;
NILE*:*:*:dcosx)
- echo pyramid-pyramid-svr4
- exit ;;
+ GUESS=pyramid-pyramid-svr4
+ ;;
DRS?6000:unix:4.0:6*)
- echo sparc-icl-nx6
- exit ;;
+ GUESS=sparc-icl-nx6
+ ;;
DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
- case $(/usr/bin/uname -p) in
- sparc) echo sparc-icl-nx7; exit ;;
- esac ;;
+ case `/usr/bin/uname -p` in
+ sparc) GUESS=sparc-icl-nx7 ;;
+ esac
+ ;;
s390x:SunOS:*:*)
- echo "$UNAME_MACHINE"-ibm-solaris2"$(echo "$UNAME_RELEASE" | sed -e 's/[^.]*//')"
- exit ;;
+ SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+ GUESS=$UNAME_MACHINE-ibm-solaris2$SUN_REL
+ ;;
sun4H:SunOS:5.*:*)
- echo sparc-hal-solaris2"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')"
- exit ;;
+ SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+ GUESS=sparc-hal-solaris2$SUN_REL
+ ;;
sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
- echo sparc-sun-solaris2"$(echo "$UNAME_RELEASE" | sed -e 's/[^.]*//')"
- exit ;;
+ SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+ GUESS=sparc-sun-solaris2$SUN_REL
+ ;;
i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
- echo i386-pc-auroraux"$UNAME_RELEASE"
- exit ;;
+ GUESS=i386-pc-auroraux$UNAME_RELEASE
+ ;;
i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
set_cc_for_build
SUN_ARCH=i386
@@ -420,47 +437,50 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
# This test works for both compilers.
if test "$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 -m64 -E - 2>/dev/null) | \
grep IS_64BIT_ARCH >/dev/null
then
SUN_ARCH=x86_64
fi
fi
- echo "$SUN_ARCH"-pc-solaris2"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')"
- exit ;;
+ SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+ GUESS=$SUN_ARCH-pc-solaris2$SUN_REL
+ ;;
sun4*:SunOS:6*:*)
# According to config.sub, this is the proper way to canonicalize
# SunOS6. Hard to guess exactly what SunOS6 will be like, but
# it's likely to be more like Solaris than SunOS4.
- echo sparc-sun-solaris3"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')"
- exit ;;
+ SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+ GUESS=sparc-sun-solaris3$SUN_REL
+ ;;
sun4*:SunOS:*:*)
- case "$(/usr/bin/arch -k)" in
+ case `/usr/bin/arch -k` in
Series*|S4*)
- UNAME_RELEASE=$(uname -v)
+ UNAME_RELEASE=`uname -v`
;;
esac
# Japanese Language versions have a version number like `4.1.3-JL'.
- echo sparc-sun-sunos"$(echo "$UNAME_RELEASE"|sed -e 's/-/_/')"
- exit ;;
+ SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/'`
+ GUESS=sparc-sun-sunos$SUN_REL
+ ;;
sun3*:SunOS:*:*)
- echo m68k-sun-sunos"$UNAME_RELEASE"
- exit ;;
+ GUESS=m68k-sun-sunos$UNAME_RELEASE
+ ;;
sun*:*:4.2BSD:*)
- UNAME_RELEASE=$( (sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null)
+ UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3
- case "$(/bin/arch)" in
+ case `/bin/arch` in
sun3)
- echo m68k-sun-sunos"$UNAME_RELEASE"
+ GUESS=m68k-sun-sunos$UNAME_RELEASE
;;
sun4)
- echo sparc-sun-sunos"$UNAME_RELEASE"
+ GUESS=sparc-sun-sunos$UNAME_RELEASE
;;
esac
- exit ;;
+ ;;
aushp:SunOS:*:*)
- echo sparc-auspex-sunos"$UNAME_RELEASE"
- exit ;;
+ GUESS=sparc-auspex-sunos$UNAME_RELEASE
+ ;;
# The situation for MiNT is a little confusing. The machine name
# can be virtually everything (everything which is not
# "atarist" or "atariste" at least should have a processor
@@ -470,41 +490,41 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
# MiNT. But MiNT is downward compatible to TOS, so this should
# be no problem.
atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
- echo m68k-atari-mint"$UNAME_RELEASE"
- exit ;;
+ GUESS=m68k-atari-mint$UNAME_RELEASE
+ ;;
atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
- echo m68k-atari-mint"$UNAME_RELEASE"
- exit ;;
+ GUESS=m68k-atari-mint$UNAME_RELEASE
+ ;;
*falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
- echo m68k-atari-mint"$UNAME_RELEASE"
- exit ;;
+ GUESS=m68k-atari-mint$UNAME_RELEASE
+ ;;
milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
- echo m68k-milan-mint"$UNAME_RELEASE"
- exit ;;
+ GUESS=m68k-milan-mint$UNAME_RELEASE
+ ;;
hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
- echo m68k-hades-mint"$UNAME_RELEASE"
- exit ;;
+ GUESS=m68k-hades-mint$UNAME_RELEASE
+ ;;
*:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
- echo m68k-unknown-mint"$UNAME_RELEASE"
- exit ;;
+ GUESS=m68k-unknown-mint$UNAME_RELEASE
+ ;;
m68k:machten:*:*)
- echo m68k-apple-machten"$UNAME_RELEASE"
- exit ;;
+ GUESS=m68k-apple-machten$UNAME_RELEASE
+ ;;
powerpc:machten:*:*)
- echo powerpc-apple-machten"$UNAME_RELEASE"
- exit ;;
+ GUESS=powerpc-apple-machten$UNAME_RELEASE
+ ;;
RISC*:Mach:*:*)
- echo mips-dec-mach_bsd4.3
- exit ;;
+ GUESS=mips-dec-mach_bsd4.3
+ ;;
RISC*:ULTRIX:*:*)
- echo mips-dec-ultrix"$UNAME_RELEASE"
- exit ;;
+ GUESS=mips-dec-ultrix$UNAME_RELEASE
+ ;;
VAX*:ULTRIX*:*:*)
- echo vax-dec-ultrix"$UNAME_RELEASE"
- exit ;;
+ GUESS=vax-dec-ultrix$UNAME_RELEASE
+ ;;
2020:CLIX:*:* | 2430:CLIX:*:*)
- echo clipper-intergraph-clix"$UNAME_RELEASE"
- exit ;;
+ GUESS=clipper-intergraph-clix$UNAME_RELEASE
+ ;;
mips:*:*:UMIPS | mips:*:*:RISCos)
set_cc_for_build
sed 's/^ //' << EOF > "$dummy.c"
@@ -529,78 +549,79 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
}
EOF
$CC_FOR_BUILD -o "$dummy" "$dummy.c" &&
- dummyarg=$(echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p') &&
- SYSTEM_NAME=$("$dummy" "$dummyarg") &&
+ dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` &&
+ SYSTEM_NAME=`"$dummy" "$dummyarg"` &&
{ echo "$SYSTEM_NAME"; exit; }
- echo mips-mips-riscos"$UNAME_RELEASE"
- exit ;;
+ GUESS=mips-mips-riscos$UNAME_RELEASE
+ ;;
Motorola:PowerMAX_OS:*:*)
- echo powerpc-motorola-powermax
- exit ;;
+ GUESS=powerpc-motorola-powermax
+ ;;
Motorola:*:4.3:PL8-*)
- echo powerpc-harris-powermax
- exit ;;
+ GUESS=powerpc-harris-powermax
+ ;;
Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
- echo powerpc-harris-powermax
- exit ;;
+ GUESS=powerpc-harris-powermax
+ ;;
Night_Hawk:Power_UNIX:*:*)
- echo powerpc-harris-powerunix
- exit ;;
+ GUESS=powerpc-harris-powerunix
+ ;;
m88k:CX/UX:7*:*)
- echo m88k-harris-cxux7
- exit ;;
+ GUESS=m88k-harris-cxux7
+ ;;
m88k:*:4*:R4*)
- echo m88k-motorola-sysv4
- exit ;;
+ GUESS=m88k-motorola-sysv4
+ ;;
m88k:*:3*:R3*)
- echo m88k-motorola-sysv3
- exit ;;
+ GUESS=m88k-motorola-sysv3
+ ;;
AViiON:dgux:*:*)
# DG/UX returns AViiON for all architectures
- UNAME_PROCESSOR=$(/usr/bin/uname -p)
+ UNAME_PROCESSOR=`/usr/bin/uname -p`
if test "$UNAME_PROCESSOR" = mc88100 || test "$UNAME_PROCESSOR" = mc88110
then
if test "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx || \
test "$TARGET_BINARY_INTERFACE"x = x
then
- echo m88k-dg-dgux"$UNAME_RELEASE"
+ GUESS=m88k-dg-dgux$UNAME_RELEASE
else
- echo m88k-dg-dguxbcs"$UNAME_RELEASE"
+ GUESS=m88k-dg-dguxbcs$UNAME_RELEASE
fi
else
- echo i586-dg-dgux"$UNAME_RELEASE"
+ GUESS=i586-dg-dgux$UNAME_RELEASE
fi
- exit ;;
+ ;;
M88*:DolphinOS:*:*) # DolphinOS (SVR3)
- echo m88k-dolphin-sysv3
- exit ;;
+ GUESS=m88k-dolphin-sysv3
+ ;;
M88*:*:R3*:*)
# Delta 88k system running SVR3
- echo m88k-motorola-sysv3
- exit ;;
+ GUESS=m88k-motorola-sysv3
+ ;;
XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
- echo m88k-tektronix-sysv3
- exit ;;
+ GUESS=m88k-tektronix-sysv3
+ ;;
Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
- echo m68k-tektronix-bsd
- exit ;;
+ GUESS=m68k-tektronix-bsd
+ ;;
*:IRIX*:*:*)
- echo mips-sgi-irix"$(echo "$UNAME_RELEASE"|sed -e 's/-/_/g')"
- exit ;;
+ IRIX_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/g'`
+ GUESS=mips-sgi-irix$IRIX_REL
+ ;;
????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
- echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
- exit ;; # Note that: echo "'$(uname -s)'" gives 'AIX '
+ GUESS=romp-ibm-aix # uname -m gives an 8 hex-code CPU id
+ ;; # Note that: echo "'`uname -s`'" gives 'AIX '
i*86:AIX:*:*)
- echo i386-ibm-aix
- exit ;;
+ GUESS=i386-ibm-aix
+ ;;
ia64:AIX:*:*)
if test -x /usr/bin/oslevel ; then
- IBM_REV=$(/usr/bin/oslevel)
+ IBM_REV=`/usr/bin/oslevel`
else
- IBM_REV="$UNAME_VERSION.$UNAME_RELEASE"
+ IBM_REV=$UNAME_VERSION.$UNAME_RELEASE
fi
- echo "$UNAME_MACHINE"-ibm-aix"$IBM_REV"
- exit ;;
+ GUESS=$UNAME_MACHINE-ibm-aix$IBM_REV
+ ;;
*:AIX:2:3)
if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
set_cc_for_build
@@ -615,68 +636,68 @@ EOF
exit(0);
}
EOF
- if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=$("$dummy")
+ if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"`
then
- echo "$SYSTEM_NAME"
+ GUESS=$SYSTEM_NAME
else
- echo rs6000-ibm-aix3.2.5
+ GUESS=rs6000-ibm-aix3.2.5
fi
elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
- echo rs6000-ibm-aix3.2.4
+ GUESS=rs6000-ibm-aix3.2.4
else
- echo rs6000-ibm-aix3.2
+ GUESS=rs6000-ibm-aix3.2
fi
- exit ;;
+ ;;
*:AIX:*:[4567])
- IBM_CPU_ID=$(/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }')
+ IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then
IBM_ARCH=rs6000
else
IBM_ARCH=powerpc
fi
if test -x /usr/bin/lslpp ; then
- IBM_REV=$(/usr/bin/lslpp -Lqc bos.rte.libc |
- awk -F: '{ print $3 }' | sed s/[0-9]*$/0/)
+ IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | \
+ awk -F: '{ print $3 }' | sed s/[0-9]*$/0/`
else
- IBM_REV="$UNAME_VERSION.$UNAME_RELEASE"
+ IBM_REV=$UNAME_VERSION.$UNAME_RELEASE
fi
- echo "$IBM_ARCH"-ibm-aix"$IBM_REV"
- exit ;;
+ GUESS=$IBM_ARCH-ibm-aix$IBM_REV
+ ;;
*:AIX:*:*)
- echo rs6000-ibm-aix
- exit ;;
+ GUESS=rs6000-ibm-aix
+ ;;
ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*)
- echo romp-ibm-bsd4.4
- exit ;;
+ GUESS=romp-ibm-bsd4.4
+ ;;
ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
- echo romp-ibm-bsd"$UNAME_RELEASE" # 4.3 with uname added to
- exit ;; # report: romp-ibm BSD 4.3
+ GUESS=romp-ibm-bsd$UNAME_RELEASE # 4.3 with uname added to
+ ;; # report: romp-ibm BSD 4.3
*:BOSX:*:*)
- echo rs6000-bull-bosx
- exit ;;
+ GUESS=rs6000-bull-bosx
+ ;;
DPX/2?00:B.O.S.:*:*)
- echo m68k-bull-sysv3
- exit ;;
+ GUESS=m68k-bull-sysv3
+ ;;
9000/[34]??:4.3bsd:1.*:*)
- echo m68k-hp-bsd
- exit ;;
+ GUESS=m68k-hp-bsd
+ ;;
hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
- echo m68k-hp-bsd4.4
- exit ;;
+ GUESS=m68k-hp-bsd4.4
+ ;;
9000/[34678]??:HP-UX:*:*)
- HPUX_REV=$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//')
- case "$UNAME_MACHINE" in
+ HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'`
+ case $UNAME_MACHINE in
9000/31?) HP_ARCH=m68000 ;;
9000/[34]??) HP_ARCH=m68k ;;
9000/[678][0-9][0-9])
if test -x /usr/bin/getconf; then
- 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
+ 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
532) # CPU_PA_RISC2_0
- case "$sc_kernel_bits" in
+ case $sc_kernel_bits in
32) HP_ARCH=hppa2.0n ;;
64) HP_ARCH=hppa2.0w ;;
'') HP_ARCH=hppa2.0 ;; # HP-UX 10.20
@@ -718,7 +739,7 @@ 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
@@ -743,12 +764,12 @@ EOF
HP_ARCH=hppa64
fi
fi
- echo "$HP_ARCH"-hp-hpux"$HPUX_REV"
- exit ;;
+ GUESS=$HP_ARCH-hp-hpux$HPUX_REV
+ ;;
ia64:HP-UX:*:*)
- HPUX_REV=$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//')
- echo ia64-hp-hpux"$HPUX_REV"
- exit ;;
+ HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'`
+ GUESS=ia64-hp-hpux$HPUX_REV
+ ;;
3050*:HI-UX:*:*)
set_cc_for_build
sed 's/^ //' << EOF > "$dummy.c"
@@ -776,38 +797,38 @@ EOF
exit (0);
}
EOF
- $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=$("$dummy") &&
+ $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` &&
{ echo "$SYSTEM_NAME"; exit; }
- echo unknown-hitachi-hiuxwe2
- exit ;;
+ GUESS=unknown-hitachi-hiuxwe2
+ ;;
9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*)
- echo hppa1.1-hp-bsd
- exit ;;
+ GUESS=hppa1.1-hp-bsd
+ ;;
9000/8??:4.3bsd:*:*)
- echo hppa1.0-hp-bsd
- exit ;;
+ GUESS=hppa1.0-hp-bsd
+ ;;
*9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
- echo hppa1.0-hp-mpeix
- exit ;;
+ GUESS=hppa1.0-hp-mpeix
+ ;;
hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*)
- echo hppa1.1-hp-osf
- exit ;;
+ GUESS=hppa1.1-hp-osf
+ ;;
hp8??:OSF1:*:*)
- echo hppa1.0-hp-osf
- exit ;;
+ GUESS=hppa1.0-hp-osf
+ ;;
i*86:OSF1:*:*)
if test -x /usr/sbin/sysversion ; then
- echo "$UNAME_MACHINE"-unknown-osf1mk
+ GUESS=$UNAME_MACHINE-unknown-osf1mk
else
- echo "$UNAME_MACHINE"-unknown-osf1
+ GUESS=$UNAME_MACHINE-unknown-osf1
fi
- exit ;;
+ ;;
parisc*:Lites*:*:*)
- echo hppa1.1-hp-lites
- exit ;;
+ GUESS=hppa1.1-hp-lites
+ ;;
C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
- echo c1-convex-bsd
- exit ;;
+ GUESS=c1-convex-bsd
+ ;;
C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
if getsysinfo -f scalar_acc
then echo c32-convex-bsd
@@ -815,17 +836,18 @@ EOF
fi
exit ;;
C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
- echo c34-convex-bsd
- exit ;;
+ GUESS=c34-convex-bsd
+ ;;
C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
- echo c38-convex-bsd
- exit ;;
+ GUESS=c38-convex-bsd
+ ;;
C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
- echo c4-convex-bsd
- exit ;;
+ GUESS=c4-convex-bsd
+ ;;
CRAY*Y-MP:*:*:*)
- echo ymp-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
- exit ;;
+ CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'`
+ GUESS=ymp-cray-unicos$CRAY_REL
+ ;;
CRAY*[A-Z]90:*:*:*)
echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \
| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
@@ -833,114 +855,129 @@ EOF
-e 's/\.[^.]*$/.X/'
exit ;;
CRAY*TS:*:*:*)
- echo t90-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
- exit ;;
+ CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'`
+ GUESS=t90-cray-unicos$CRAY_REL
+ ;;
CRAY*T3E:*:*:*)
- echo alphaev5-cray-unicosmk"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
- exit ;;
+ CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'`
+ GUESS=alphaev5-cray-unicosmk$CRAY_REL
+ ;;
CRAY*SV1:*:*:*)
- echo sv1-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
- exit ;;
+ CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'`
+ GUESS=sv1-cray-unicos$CRAY_REL
+ ;;
*:UNICOS/mp:*:*)
- echo craynv-cray-unicosmp"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
- exit ;;
+ CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'`
+ GUESS=craynv-cray-unicosmp$CRAY_REL
+ ;;
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_REL=$(echo "$UNAME_RELEASE" | sed -e 's/ /_/')
- echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
- exit ;;
+ 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/ /_/'`
+ GUESS=${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}
+ ;;
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/ /_/')
- echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
- exit ;;
+ FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
+ FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'`
+ GUESS=sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}
+ ;;
i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
- echo "$UNAME_MACHINE"-pc-bsdi"$UNAME_RELEASE"
- exit ;;
+ GUESS=$UNAME_MACHINE-pc-bsdi$UNAME_RELEASE
+ ;;
sparc*:BSD/OS:*:*)
- echo sparc-unknown-bsdi"$UNAME_RELEASE"
- exit ;;
+ GUESS=sparc-unknown-bsdi$UNAME_RELEASE
+ ;;
*:BSD/OS:*:*)
- echo "$UNAME_MACHINE"-unknown-bsdi"$UNAME_RELEASE"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-bsdi$UNAME_RELEASE
+ ;;
arm:FreeBSD:*:*)
- UNAME_PROCESSOR=$(uname -p)
+ UNAME_PROCESSOR=`uname -p`
set_cc_for_build
if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
| grep -q __ARM_PCS_VFP
then
- echo "${UNAME_PROCESSOR}"-unknown-freebsd"$(echo ${UNAME_RELEASE}|sed -e 's/[-(].*//')"-gnueabi
+ FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'`
+ GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabi
else
- echo "${UNAME_PROCESSOR}"-unknown-freebsd"$(echo ${UNAME_RELEASE}|sed -e 's/[-(].*//')"-gnueabihf
+ FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'`
+ GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabihf
fi
- exit ;;
+ ;;
*:FreeBSD:*:*)
- UNAME_PROCESSOR=$(/usr/bin/uname -p)
- case "$UNAME_PROCESSOR" in
+ UNAME_PROCESSOR=`/usr/bin/uname -p`
+ case $UNAME_PROCESSOR in
amd64)
UNAME_PROCESSOR=x86_64 ;;
i386)
UNAME_PROCESSOR=i586 ;;
esac
- echo "$UNAME_PROCESSOR"-unknown-freebsd"$(echo "$UNAME_RELEASE"|sed -e 's/[-(].*//')"
- exit ;;
+ FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'`
+ GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL
+ ;;
i*:CYGWIN*:*)
- echo "$UNAME_MACHINE"-pc-cygwin
- exit ;;
+ GUESS=$UNAME_MACHINE-pc-cygwin
+ ;;
*:MINGW64*:*)
- echo "$UNAME_MACHINE"-pc-mingw64
- exit ;;
+ GUESS=$UNAME_MACHINE-pc-mingw64
+ ;;
*:MINGW*:*)
- echo "$UNAME_MACHINE"-pc-mingw32
- exit ;;
+ GUESS=$UNAME_MACHINE-pc-mingw32
+ ;;
*:MSYS*:*)
- echo "$UNAME_MACHINE"-pc-msys
- exit ;;
+ GUESS=$UNAME_MACHINE-pc-msys
+ ;;
i*:PW*:*)
- echo "$UNAME_MACHINE"-pc-pw32
- exit ;;
+ GUESS=$UNAME_MACHINE-pc-pw32
+ ;;
+ *:SerenityOS:*:*)
+ GUESS=$UNAME_MACHINE-pc-serenity
+ ;;
*:Interix*:*)
- case "$UNAME_MACHINE" in
+ case $UNAME_MACHINE in
x86)
- echo i586-pc-interix"$UNAME_RELEASE"
- exit ;;
+ GUESS=i586-pc-interix$UNAME_RELEASE
+ ;;
authenticamd | genuineintel | EM64T)
- echo x86_64-unknown-interix"$UNAME_RELEASE"
- exit ;;
+ GUESS=x86_64-unknown-interix$UNAME_RELEASE
+ ;;
IA64)
- echo ia64-unknown-interix"$UNAME_RELEASE"
- exit ;;
+ GUESS=ia64-unknown-interix$UNAME_RELEASE
+ ;;
esac ;;
i*:UWIN*:*)
- echo "$UNAME_MACHINE"-pc-uwin
- exit ;;
+ GUESS=$UNAME_MACHINE-pc-uwin
+ ;;
amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
- echo x86_64-pc-cygwin
- exit ;;
+ GUESS=x86_64-pc-cygwin
+ ;;
prep*:SunOS:5.*:*)
- echo powerpcle-unknown-solaris2"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')"
- exit ;;
+ SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+ GUESS=powerpcle-unknown-solaris2$SUN_REL
+ ;;
*:GNU:*:*)
# the GNU system
- echo "$(echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,')-unknown-$LIBC$(echo "$UNAME_RELEASE"|sed -e 's,/.*$,,')"
- exit ;;
+ GNU_ARCH=`echo "$UNAME_MACHINE" | sed -e 's,[-/].*$,,'`
+ GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's,/.*$,,'`
+ GUESS=$GNU_ARCH-unknown-$LIBC$GNU_REL
+ ;;
*:GNU/*:*:*)
# other systems with GNU libc and userland
- echo "$UNAME_MACHINE-unknown-$(echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]")$(echo "$UNAME_RELEASE"|sed -e 's/[-(].*//')-$LIBC"
- exit ;;
+ GNU_SYS=`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"`
+ GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'`
+ GUESS=$UNAME_MACHINE-unknown-$GNU_SYS$GNU_REL-$LIBC
+ ;;
*:Minix:*:*)
- echo "$UNAME_MACHINE"-unknown-minix
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-minix
+ ;;
aarch64:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
aarch64_be:Linux:*:*)
UNAME_MACHINE=aarch64_be
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
alpha:Linux:*:*)
- case $(sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null) in
+ case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null` in
EV5) UNAME_MACHINE=alphaev5 ;;
EV56) UNAME_MACHINE=alphaev56 ;;
PCA56) UNAME_MACHINE=alphapca56 ;;
@@ -951,63 +988,63 @@ EOF
esac
objdump --private-headers /bin/sh | grep -q ld.so.1
if test "$?" = 0 ; then LIBC=gnulibc1 ; fi
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- arc:Linux:*:* | arceb:Linux:*:* | arc64:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ arc:Linux:*:* | arceb:Linux:*:* | arc32:Linux:*:* | arc64:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
arm*:Linux:*:*)
set_cc_for_build
if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
| grep -q __ARM_EABI__
then
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
else
if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
| grep -q __ARM_PCS_VFP
then
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabi
+ GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabi
else
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabihf
+ GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabihf
fi
fi
- exit ;;
+ ;;
avr32*:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
cris:Linux:*:*)
- echo "$UNAME_MACHINE"-axis-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-axis-linux-$LIBC
+ ;;
crisv32:Linux:*:*)
- echo "$UNAME_MACHINE"-axis-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-axis-linux-$LIBC
+ ;;
e2k:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
frv:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
hexagon:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
i*86:Linux:*:*)
- echo "$UNAME_MACHINE"-pc-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-pc-linux-$LIBC
+ ;;
ia64:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
k1om:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
loongarch32:Linux:*:* | loongarch64:Linux:*:* | loongarchx32:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
m32r*:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
m68*:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
mips:Linux:*:* | mips64:Linux:*:*)
set_cc_for_build
IS_GLIBC=0
@@ -1052,65 +1089,66 @@ EOF
#endif
#endif
EOF
- eval "$($CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI')"
+ cc_set_vars=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI'`
+ eval "$cc_set_vars"
test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; }
;;
mips64el:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
openrisc*:Linux:*:*)
- echo or1k-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=or1k-unknown-linux-$LIBC
+ ;;
or32:Linux:*:* | or1k*:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
padre:Linux:*:*)
- echo sparc-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=sparc-unknown-linux-$LIBC
+ ;;
parisc64:Linux:*:* | hppa64:Linux:*:*)
- echo hppa64-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=hppa64-unknown-linux-$LIBC
+ ;;
parisc:Linux:*:* | hppa:Linux:*:*)
# Look for CPU level
- case $(grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2) in
- PA7*) echo hppa1.1-unknown-linux-"$LIBC" ;;
- PA8*) echo hppa2.0-unknown-linux-"$LIBC" ;;
- *) echo hppa-unknown-linux-"$LIBC" ;;
+ case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+ PA7*) GUESS=hppa1.1-unknown-linux-$LIBC ;;
+ PA8*) GUESS=hppa2.0-unknown-linux-$LIBC ;;
+ *) GUESS=hppa-unknown-linux-$LIBC ;;
esac
- exit ;;
+ ;;
ppc64:Linux:*:*)
- echo powerpc64-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=powerpc64-unknown-linux-$LIBC
+ ;;
ppc:Linux:*:*)
- echo powerpc-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=powerpc-unknown-linux-$LIBC
+ ;;
ppc64le:Linux:*:*)
- echo powerpc64le-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=powerpc64le-unknown-linux-$LIBC
+ ;;
ppcle:Linux:*:*)
- echo powerpcle-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=powerpcle-unknown-linux-$LIBC
+ ;;
riscv32:Linux:*:* | riscv32be:Linux:*:* | riscv64:Linux:*:* | riscv64be:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
s390:Linux:*:* | s390x:Linux:*:*)
- echo "$UNAME_MACHINE"-ibm-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-ibm-linux-$LIBC
+ ;;
sh64*:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
sh*:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
sparc:Linux:*:* | sparc64:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
tile*:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
vax:Linux:*:*)
- echo "$UNAME_MACHINE"-dec-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-dec-linux-$LIBC
+ ;;
x86_64:Linux:*:*)
set_cc_for_build
LIBCABI=$LIBC
@@ -1119,71 +1157,71 @@ EOF
(CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
grep IS_X32 >/dev/null
then
- LIBCABI="$LIBC"x32
+ LIBCABI=${LIBC}x32
fi
fi
- echo "$UNAME_MACHINE"-pc-linux-"$LIBCABI"
- exit ;;
+ GUESS=$UNAME_MACHINE-pc-linux-$LIBCABI
+ ;;
xtensa*:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
i*86:DYNIX/ptx:4*:*)
# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
# earlier versions are messed up and put the nodename in both
# sysname and nodename.
- echo i386-sequent-sysv4
- exit ;;
+ GUESS=i386-sequent-sysv4
+ ;;
i*86:UNIX_SV:4.2MP:2.*)
# Unixware is an offshoot of SVR4, but it has its own version
# number series starting with 2...
# I am not positive that other SVR4 systems won't match this,
# I just have to hope. -- rms.
# Use sysv4.2uw... so that sysv4* matches it.
- echo "$UNAME_MACHINE"-pc-sysv4.2uw"$UNAME_VERSION"
- exit ;;
+ GUESS=$UNAME_MACHINE-pc-sysv4.2uw$UNAME_VERSION
+ ;;
i*86:OS/2:*:*)
# If we were able to find `uname', then EMX Unix compatibility
# is probably installed.
- echo "$UNAME_MACHINE"-pc-os2-emx
- exit ;;
+ GUESS=$UNAME_MACHINE-pc-os2-emx
+ ;;
i*86:XTS-300:*:STOP)
- echo "$UNAME_MACHINE"-unknown-stop
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-stop
+ ;;
i*86:atheos:*:*)
- echo "$UNAME_MACHINE"-unknown-atheos
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-atheos
+ ;;
i*86:syllable:*:*)
- echo "$UNAME_MACHINE"-pc-syllable
- exit ;;
+ GUESS=$UNAME_MACHINE-pc-syllable
+ ;;
i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
- echo i386-unknown-lynxos"$UNAME_RELEASE"
- exit ;;
+ GUESS=i386-unknown-lynxos$UNAME_RELEASE
+ ;;
i*86:*DOS:*:*)
- echo "$UNAME_MACHINE"-pc-msdosdjgpp
- exit ;;
+ GUESS=$UNAME_MACHINE-pc-msdosdjgpp
+ ;;
i*86:*:4.*:*)
- UNAME_REL=$(echo "$UNAME_RELEASE" | sed 's/\/MP$//')
+ UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'`
if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
- echo "$UNAME_MACHINE"-univel-sysv"$UNAME_REL"
+ GUESS=$UNAME_MACHINE-univel-sysv$UNAME_REL
else
- echo "$UNAME_MACHINE"-pc-sysv"$UNAME_REL"
+ GUESS=$UNAME_MACHINE-pc-sysv$UNAME_REL
fi
- exit ;;
+ ;;
i*86:*:5:[678]*)
# UnixWare 7.x, OpenUNIX and OpenServer 6.
- case $(/bin/uname -X | grep "^Machine") in
+ case `/bin/uname -X | grep "^Machine"` in
*486*) UNAME_MACHINE=i486 ;;
*Pentium) UNAME_MACHINE=i586 ;;
*Pent*|*Celeron) UNAME_MACHINE=i686 ;;
esac
- echo "$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+ ;;
i*86:*:3.2:*)
if test -f /usr/options/cb.name; then
- UNAME_REL=$(sed -n 's/.*Version //p' </usr/options/cb.name)
- echo "$UNAME_MACHINE"-pc-isc"$UNAME_REL"
+ UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+ GUESS=$UNAME_MACHINE-pc-isc$UNAME_REL
elif /bin/uname -X 2>/dev/null >/dev/null ; then
- UNAME_REL=$( (/bin/uname -X|grep Release|sed -e 's/.*= //'))
+ UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
(/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
(/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
&& UNAME_MACHINE=i586
@@ -1191,11 +1229,11 @@ EOF
&& UNAME_MACHINE=i686
(/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
&& UNAME_MACHINE=i686
- echo "$UNAME_MACHINE"-pc-sco"$UNAME_REL"
+ GUESS=$UNAME_MACHINE-pc-sco$UNAME_REL
else
- echo "$UNAME_MACHINE"-pc-sysv32
+ GUESS=$UNAME_MACHINE-pc-sysv32
fi
- exit ;;
+ ;;
pc:*:*:*)
# Left here for compatibility:
# uname -m prints for DJGPP always 'pc', but it prints nothing about
@@ -1203,37 +1241,37 @@ EOF
# Note: whatever this is, it MUST be the same as what config.sub
# prints for the "djgpp" host, or else GDB configure will decide that
# this is a cross-build.
- echo i586-pc-msdosdjgpp
- exit ;;
+ GUESS=i586-pc-msdosdjgpp
+ ;;
Intel:Mach:3*:*)
- echo i386-pc-mach3
- exit ;;
+ GUESS=i386-pc-mach3
+ ;;
paragon:*:*:*)
- echo i860-intel-osf1
- exit ;;
+ GUESS=i860-intel-osf1
+ ;;
i860:*:4.*:*) # i860-SVR4
if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
- echo i860-stardent-sysv"$UNAME_RELEASE" # Stardent Vistra i860-SVR4
+ GUESS=i860-stardent-sysv$UNAME_RELEASE # Stardent Vistra i860-SVR4
else # Add other i860-SVR4 vendors below as they are discovered.
- echo i860-unknown-sysv"$UNAME_RELEASE" # Unknown i860-SVR4
+ GUESS=i860-unknown-sysv$UNAME_RELEASE # Unknown i860-SVR4
fi
- exit ;;
+ ;;
mini*:CTIX:SYS*5:*)
# "miniframe"
- echo m68010-convergent-sysv
- exit ;;
+ GUESS=m68010-convergent-sysv
+ ;;
mc68k:UNIX:SYSTEM5:3.51m)
- echo m68k-convergent-sysv
- exit ;;
+ GUESS=m68k-convergent-sysv
+ ;;
M680?0:D-NIX:5.3:*)
- echo m68k-diab-dnix
- exit ;;
+ GUESS=m68k-diab-dnix
+ ;;
M68*:*:R3V[5678]*:*)
test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
OS_REL=''
test -r /etc/.relid \
- && OS_REL=.$(sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid)
+ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
&& { echo i486-ncr-sysv4.3"$OS_REL"; exit; }
/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
@@ -1244,7 +1282,7 @@ EOF
NCR*:*:4.2:* | MPRAS*:*:4.2:*)
OS_REL='.3'
test -r /etc/.relid \
- && OS_REL=.$(sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid)
+ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
&& { echo i486-ncr-sysv4.3"$OS_REL"; exit; }
/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
@@ -1252,118 +1290,118 @@ EOF
/bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
&& { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;;
m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
- echo m68k-unknown-lynxos"$UNAME_RELEASE"
- exit ;;
+ GUESS=m68k-unknown-lynxos$UNAME_RELEASE
+ ;;
mc68030:UNIX_System_V:4.*:*)
- echo m68k-atari-sysv4
- exit ;;
+ GUESS=m68k-atari-sysv4
+ ;;
TSUNAMI:LynxOS:2.*:*)
- echo sparc-unknown-lynxos"$UNAME_RELEASE"
- exit ;;
+ GUESS=sparc-unknown-lynxos$UNAME_RELEASE
+ ;;
rs6000:LynxOS:2.*:*)
- echo rs6000-unknown-lynxos"$UNAME_RELEASE"
- exit ;;
+ GUESS=rs6000-unknown-lynxos$UNAME_RELEASE
+ ;;
PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
- echo powerpc-unknown-lynxos"$UNAME_RELEASE"
- exit ;;
+ GUESS=powerpc-unknown-lynxos$UNAME_RELEASE
+ ;;
SM[BE]S:UNIX_SV:*:*)
- echo mips-dde-sysv"$UNAME_RELEASE"
- exit ;;
+ GUESS=mips-dde-sysv$UNAME_RELEASE
+ ;;
RM*:ReliantUNIX-*:*:*)
- echo mips-sni-sysv4
- exit ;;
+ GUESS=mips-sni-sysv4
+ ;;
RM*:SINIX-*:*:*)
- echo mips-sni-sysv4
- exit ;;
+ GUESS=mips-sni-sysv4
+ ;;
*:SINIX-*:*:*)
if uname -p 2>/dev/null >/dev/null ; then
- UNAME_MACHINE=$( (uname -p) 2>/dev/null)
- echo "$UNAME_MACHINE"-sni-sysv4
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ GUESS=$UNAME_MACHINE-sni-sysv4
else
- echo ns32k-sni-sysv
+ GUESS=ns32k-sni-sysv
fi
- exit ;;
+ ;;
PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
# says <Richard.M.Bartel@ccMail.Census.GOV>
- echo i586-unisys-sysv4
- exit ;;
+ GUESS=i586-unisys-sysv4
+ ;;
*:UNIX_System_V:4*:FTX*)
# From Gerald Hewes <hewes@openmarket.com>.
# How about differentiating between stratus architectures? -djm
- echo hppa1.1-stratus-sysv4
- exit ;;
+ GUESS=hppa1.1-stratus-sysv4
+ ;;
*:*:*:FTX*)
# From seanf@swdc.stratus.com.
- echo i860-stratus-sysv4
- exit ;;
+ GUESS=i860-stratus-sysv4
+ ;;
i*86:VOS:*:*)
# From Paul.Green@stratus.com.
- echo "$UNAME_MACHINE"-stratus-vos
- exit ;;
+ GUESS=$UNAME_MACHINE-stratus-vos
+ ;;
*:VOS:*:*)
# From Paul.Green@stratus.com.
- echo hppa1.1-stratus-vos
- exit ;;
+ GUESS=hppa1.1-stratus-vos
+ ;;
mc68*:A/UX:*:*)
- echo m68k-apple-aux"$UNAME_RELEASE"
- exit ;;
+ GUESS=m68k-apple-aux$UNAME_RELEASE
+ ;;
news*:NEWS-OS:6*:*)
- echo mips-sony-newsos6
- exit ;;
+ GUESS=mips-sony-newsos6
+ ;;
R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
if test -d /usr/nec; then
- echo mips-nec-sysv"$UNAME_RELEASE"
+ GUESS=mips-nec-sysv$UNAME_RELEASE
else
- echo mips-unknown-sysv"$UNAME_RELEASE"
+ GUESS=mips-unknown-sysv$UNAME_RELEASE
fi
- exit ;;
+ ;;
BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
- echo powerpc-be-beos
- exit ;;
+ GUESS=powerpc-be-beos
+ ;;
BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
- echo powerpc-apple-beos
- exit ;;
+ GUESS=powerpc-apple-beos
+ ;;
BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
- echo i586-pc-beos
- exit ;;
+ GUESS=i586-pc-beos
+ ;;
BePC:Haiku:*:*) # Haiku running on Intel PC compatible.
- echo i586-pc-haiku
- exit ;;
+ GUESS=i586-pc-haiku
+ ;;
x86_64:Haiku:*:*)
- echo x86_64-unknown-haiku
- exit ;;
+ GUESS=x86_64-unknown-haiku
+ ;;
SX-4:SUPER-UX:*:*)
- echo sx4-nec-superux"$UNAME_RELEASE"
- exit ;;
+ GUESS=sx4-nec-superux$UNAME_RELEASE
+ ;;
SX-5:SUPER-UX:*:*)
- echo sx5-nec-superux"$UNAME_RELEASE"
- exit ;;
+ GUESS=sx5-nec-superux$UNAME_RELEASE
+ ;;
SX-6:SUPER-UX:*:*)
- echo sx6-nec-superux"$UNAME_RELEASE"
- exit ;;
+ GUESS=sx6-nec-superux$UNAME_RELEASE
+ ;;
SX-7:SUPER-UX:*:*)
- echo sx7-nec-superux"$UNAME_RELEASE"
- exit ;;
+ GUESS=sx7-nec-superux$UNAME_RELEASE
+ ;;
SX-8:SUPER-UX:*:*)
- echo sx8-nec-superux"$UNAME_RELEASE"
- exit ;;
+ GUESS=sx8-nec-superux$UNAME_RELEASE
+ ;;
SX-8R:SUPER-UX:*:*)
- echo sx8r-nec-superux"$UNAME_RELEASE"
- exit ;;
+ GUESS=sx8r-nec-superux$UNAME_RELEASE
+ ;;
SX-ACE:SUPER-UX:*:*)
- echo sxace-nec-superux"$UNAME_RELEASE"
- exit ;;
+ GUESS=sxace-nec-superux$UNAME_RELEASE
+ ;;
Power*:Rhapsody:*:*)
- echo powerpc-apple-rhapsody"$UNAME_RELEASE"
- exit ;;
+ GUESS=powerpc-apple-rhapsody$UNAME_RELEASE
+ ;;
*:Rhapsody:*:*)
- echo "$UNAME_MACHINE"-apple-rhapsody"$UNAME_RELEASE"
- exit ;;
+ GUESS=$UNAME_MACHINE-apple-rhapsody$UNAME_RELEASE
+ ;;
arm64:Darwin:*:*)
- echo aarch64-apple-darwin"$UNAME_RELEASE"
- exit ;;
+ GUESS=aarch64-apple-darwin$UNAME_RELEASE
+ ;;
*:Darwin:*:*)
- UNAME_PROCESSOR=$(uname -p)
+ UNAME_PROCESSOR=`uname -p`
case $UNAME_PROCESSOR in
unknown) UNAME_PROCESSOR=powerpc ;;
esac
@@ -1397,109 +1435,119 @@ EOF
# uname -m returns i386 or x86_64
UNAME_PROCESSOR=$UNAME_MACHINE
fi
- echo "$UNAME_PROCESSOR"-apple-darwin"$UNAME_RELEASE"
- exit ;;
+ GUESS=$UNAME_PROCESSOR-apple-darwin$UNAME_RELEASE
+ ;;
*:procnto*:*:* | *:QNX:[0123456789]*:*)
- UNAME_PROCESSOR=$(uname -p)
+ UNAME_PROCESSOR=`uname -p`
if test "$UNAME_PROCESSOR" = x86; then
UNAME_PROCESSOR=i386
UNAME_MACHINE=pc
fi
- echo "$UNAME_PROCESSOR"-"$UNAME_MACHINE"-nto-qnx"$UNAME_RELEASE"
- exit ;;
+ GUESS=$UNAME_PROCESSOR-$UNAME_MACHINE-nto-qnx$UNAME_RELEASE
+ ;;
*:QNX:*:4*)
- echo i386-pc-qnx
- exit ;;
+ GUESS=i386-pc-qnx
+ ;;
NEO-*:NONSTOP_KERNEL:*:*)
- echo neo-tandem-nsk"$UNAME_RELEASE"
- exit ;;
+ GUESS=neo-tandem-nsk$UNAME_RELEASE
+ ;;
NSE-*:NONSTOP_KERNEL:*:*)
- echo nse-tandem-nsk"$UNAME_RELEASE"
- exit ;;
+ GUESS=nse-tandem-nsk$UNAME_RELEASE
+ ;;
NSR-*:NONSTOP_KERNEL:*:*)
- echo nsr-tandem-nsk"$UNAME_RELEASE"
- exit ;;
+ GUESS=nsr-tandem-nsk$UNAME_RELEASE
+ ;;
NSV-*:NONSTOP_KERNEL:*:*)
- echo nsv-tandem-nsk"$UNAME_RELEASE"
- exit ;;
+ GUESS=nsv-tandem-nsk$UNAME_RELEASE
+ ;;
NSX-*:NONSTOP_KERNEL:*:*)
- echo nsx-tandem-nsk"$UNAME_RELEASE"
- exit ;;
+ GUESS=nsx-tandem-nsk$UNAME_RELEASE
+ ;;
*:NonStop-UX:*:*)
- echo mips-compaq-nonstopux
- exit ;;
+ GUESS=mips-compaq-nonstopux
+ ;;
BS2000:POSIX*:*:*)
- echo bs2000-siemens-sysv
- exit ;;
+ GUESS=bs2000-siemens-sysv
+ ;;
DS/*:UNIX_System_V:*:*)
- echo "$UNAME_MACHINE"-"$UNAME_SYSTEM"-"$UNAME_RELEASE"
- exit ;;
+ GUESS=$UNAME_MACHINE-$UNAME_SYSTEM-$UNAME_RELEASE
+ ;;
*:Plan9:*:*)
# "uname -m" is not consistent, so use $cputype instead. 386
# is converted to i386 for consistency with other x86
# operating systems.
- # shellcheck disable=SC2154
- if test "$cputype" = 386; then
+ if test "${cputype-}" = 386; then
UNAME_MACHINE=i386
- else
- UNAME_MACHINE="$cputype"
+ elif test "x${cputype-}" != x; then
+ UNAME_MACHINE=$cputype
fi
- echo "$UNAME_MACHINE"-unknown-plan9
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-plan9
+ ;;
*:TOPS-10:*:*)
- echo pdp10-unknown-tops10
- exit ;;
+ GUESS=pdp10-unknown-tops10
+ ;;
*:TENEX:*:*)
- echo pdp10-unknown-tenex
- exit ;;
+ GUESS=pdp10-unknown-tenex
+ ;;
KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
- echo pdp10-dec-tops20
- exit ;;
+ GUESS=pdp10-dec-tops20
+ ;;
XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
- echo pdp10-xkl-tops20
- exit ;;
+ GUESS=pdp10-xkl-tops20
+ ;;
*:TOPS-20:*:*)
- echo pdp10-unknown-tops20
- exit ;;
+ GUESS=pdp10-unknown-tops20
+ ;;
*:ITS:*:*)
- echo pdp10-unknown-its
- exit ;;
+ GUESS=pdp10-unknown-its
+ ;;
SEI:*:*:SEIUX)
- echo mips-sei-seiux"$UNAME_RELEASE"
- exit ;;
+ GUESS=mips-sei-seiux$UNAME_RELEASE
+ ;;
*:DragonFly:*:*)
- echo "$UNAME_MACHINE"-unknown-dragonfly"$(echo "$UNAME_RELEASE"|sed -e 's/[-(].*//')"
- exit ;;
+ DRAGONFLY_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'`
+ GUESS=$UNAME_MACHINE-unknown-dragonfly$DRAGONFLY_REL
+ ;;
*:*VMS:*:*)
- UNAME_MACHINE=$( (uname -p) 2>/dev/null)
- case "$UNAME_MACHINE" in
- A*) echo alpha-dec-vms ; exit ;;
- I*) echo ia64-dec-vms ; exit ;;
- V*) echo vax-dec-vms ; exit ;;
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ case $UNAME_MACHINE in
+ A*) GUESS=alpha-dec-vms ;;
+ I*) GUESS=ia64-dec-vms ;;
+ V*) GUESS=vax-dec-vms ;;
esac ;;
*:XENIX:*:SysV)
- echo i386-pc-xenix
- exit ;;
+ GUESS=i386-pc-xenix
+ ;;
i*86:skyos:*:*)
- echo "$UNAME_MACHINE"-pc-skyos"$(echo "$UNAME_RELEASE" | sed -e 's/ .*$//')"
- exit ;;
+ SKYOS_REL=`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'`
+ GUESS=$UNAME_MACHINE-pc-skyos$SKYOS_REL
+ ;;
i*86:rdos:*:*)
- echo "$UNAME_MACHINE"-pc-rdos
- exit ;;
+ GUESS=$UNAME_MACHINE-pc-rdos
+ ;;
+ i*86:Fiwix:*:*)
+ GUESS=$UNAME_MACHINE-pc-fiwix
+ ;;
*:AROS:*:*)
- echo "$UNAME_MACHINE"-unknown-aros
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-aros
+ ;;
x86_64:VMkernel:*:*)
- echo "$UNAME_MACHINE"-unknown-esx
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-esx
+ ;;
amd64:Isilon\ OneFS:*:*)
- echo x86_64-unknown-onefs
- exit ;;
+ GUESS=x86_64-unknown-onefs
+ ;;
*:Unleashed:*:*)
- echo "$UNAME_MACHINE"-unknown-unleashed"$UNAME_RELEASE"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-unleashed$UNAME_RELEASE
+ ;;
esac
+# Do we have a guess based on uname results?
+if test "x$GUESS" != x; then
+ echo "$GUESS"
+ exit
+fi
+
# No uname command or uname output not recognized.
set_cc_for_build
cat > "$dummy.c" <<EOF
@@ -1539,7 +1587,7 @@ main ()
#define __ARCHITECTURE__ "m68k"
#endif
int version;
- version=$( (hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null);
+ version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
if (version < 4)
printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
else
@@ -1631,7 +1679,7 @@ main ()
}
EOF
-$CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=$($dummy) &&
+$CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=`"$dummy"` &&
{ echo "$SYSTEM_NAME"; exit; }
# Apollos put the system type in the environment.
@@ -1639,7 +1687,7 @@ test -d /usr/apollo && { echo "$ISP-apollo-$SYSTYPE"; exit; }
echo "$0: unable to guess system type" >&2
-case "$UNAME_MACHINE:$UNAME_SYSTEM" in
+case $UNAME_MACHINE:$UNAME_SYSTEM in
mips:Linux | mips64:Linux)
# If we got here on MIPS GNU/Linux, output extra information.
cat >&2 <<EOF
@@ -1661,9 +1709,11 @@ and
https://git.savannah.gnu.org/cgit/config.git/plain/config.sub
EOF
-year=$(echo $timestamp | sed 's,-.*,,')
+our_year=`echo $timestamp | sed 's,-.*,,'`
+thisyear=`date +%Y`
# shellcheck disable=SC2003
-if test "$(expr "$(date +%Y)" - "$year")" -lt 3 ; then
+script_age=`expr "$thisyear" - "$our_year"`
+if test "$script_age" -lt 3 ; then
cat >&2 <<EOF
If $0 has already been updated, send the following data and any
@@ -1672,20 +1722,20 @@ provide the necessary information to handle your system.
config.guess timestamp = $timestamp
-uname -m = $( (uname -m) 2>/dev/null || echo unknown)
-uname -r = $( (uname -r) 2>/dev/null || echo unknown)
-uname -s = $( (uname -s) 2>/dev/null || echo unknown)
-uname -v = $( (uname -v) 2>/dev/null || echo unknown)
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
-/usr/bin/uname -p = $( (/usr/bin/uname -p) 2>/dev/null)
-/bin/uname -X = $( (/bin/uname -X) 2>/dev/null)
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null`
-hostinfo = $( (hostinfo) 2>/dev/null)
-/bin/universe = $( (/bin/universe) 2>/dev/null)
-/usr/bin/arch -k = $( (/usr/bin/arch -k) 2>/dev/null)
-/bin/arch = $( (/bin/arch) 2>/dev/null)
-/usr/bin/oslevel = $( (/usr/bin/oslevel) 2>/dev/null)
-/usr/convex/getsysinfo = $( (/usr/convex/getsysinfo) 2>/dev/null)
+hostinfo = `(hostinfo) 2>/dev/null`
+/bin/universe = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
UNAME_MACHINE = "$UNAME_MACHINE"
UNAME_RELEASE = "$UNAME_RELEASE"
diff --git a/config.sub b/config.sub
index 7384e9198b4..dba16e84c77 100755
--- a/config.sub
+++ b/config.sub
@@ -1,12 +1,14 @@
#! /bin/sh
# Configuration validation subroutine script.
-# Copyright 1992-2021 Free Software Foundation, Inc.
+# Copyright 1992-2022 Free Software Foundation, Inc.
-timestamp='2021-04-30'
+# shellcheck disable=SC2006,SC2268 # see below for rationale
+
+timestamp='2022-01-03'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
+# 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
@@ -50,7 +52,14 @@ timestamp='2021-04-30'
# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
# It is wrong to echo any other type of specification.
-me=$(echo "$0" | sed -e 's,.*/,,')
+# The "shellcheck disable" line above the timestamp inhibits complaints
+# about features and limitations of the classic Bourne shell that were
+# superseded or lifted in POSIX. However, this script identifies a wide
+# variety of pre-POSIX systems that do not have POSIX shells at all, and
+# even some reasonably current systems (Solaris 10 as case-in-point) still
+# have a pre-POSIX /bin/sh.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
usage="\
Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS
@@ -67,7 +76,7 @@ Report bugs and patches to <config-patches@gnu.org>."
version="\
GNU config.sub ($timestamp)
-Copyright 1992-2021 Free Software Foundation, Inc.
+Copyright 1992-2022 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -112,9 +121,11 @@ esac
# Split fields of configuration type
# shellcheck disable=SC2162
+saved_IFS=$IFS
IFS="-" read field1 field2 field3 field4 <<EOF
$1
EOF
+IFS=$saved_IFS
# Separate into logical components for further validation
case $1 in
@@ -163,6 +174,10 @@ case $1 in
basic_machine=$field1
basic_os=$field2
;;
+ zephyr*)
+ basic_machine=$field1-unknown
+ basic_os=$field2
+ ;;
# Manufacturers
dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \
| att* | 7300* | 3300* | delta* | motorola* | sun[234]* \
@@ -769,22 +784,22 @@ case $basic_machine in
vendor=hp
;;
i*86v32)
- cpu=$(echo "$1" | sed -e 's/86.*/86/')
+ cpu=`echo "$1" | sed -e 's/86.*/86/'`
vendor=pc
basic_os=sysv32
;;
i*86v4*)
- cpu=$(echo "$1" | sed -e 's/86.*/86/')
+ cpu=`echo "$1" | sed -e 's/86.*/86/'`
vendor=pc
basic_os=sysv4
;;
i*86v)
- cpu=$(echo "$1" | sed -e 's/86.*/86/')
+ cpu=`echo "$1" | sed -e 's/86.*/86/'`
vendor=pc
basic_os=sysv
;;
i*86sol2)
- cpu=$(echo "$1" | sed -e 's/86.*/86/')
+ cpu=`echo "$1" | sed -e 's/86.*/86/'`
vendor=pc
basic_os=solaris2
;;
@@ -917,14 +932,16 @@ case $basic_machine in
;;
leon-*|leon[3-9]-*)
cpu=sparc
- vendor=$(echo "$basic_machine" | sed 's/-.*//')
+ vendor=`echo "$basic_machine" | sed 's/-.*//'`
;;
*-*)
# shellcheck disable=SC2162
+ saved_IFS=$IFS
IFS="-" read cpu vendor <<EOF
$basic_machine
EOF
+ IFS=$saved_IFS
;;
# We use `pc' rather than `unknown'
# because (1) that's what they normally are, and
@@ -1003,6 +1020,11 @@ case $cpu-$vendor in
;;
# Here we normalize CPU types with a missing or matching vendor
+ armh-unknown | armh-alt)
+ cpu=armv7l
+ vendor=alt
+ basic_os=${basic_os:-linux-gnueabihf}
+ ;;
dpx20-unknown | dpx20-bull)
cpu=rs6000
vendor=bull
@@ -1084,7 +1106,7 @@ case $cpu-$vendor in
cpu=mipsisa64sb1el
;;
sh5e[lb]-*)
- cpu=$(echo "$cpu" | sed 's/^\(sh.\)e\(.\)$/\1\2e/')
+ cpu=`echo "$cpu" | sed 's/^\(sh.\)e\(.\)$/\1\2e/'`
;;
spur-*)
cpu=spur
@@ -1102,9 +1124,9 @@ case $cpu-$vendor in
cpu=x86_64
;;
xscale-* | xscalee[bl]-*)
- cpu=$(echo "$cpu" | sed 's/^xscale/arm/')
+ cpu=`echo "$cpu" | sed 's/^xscale/arm/'`
;;
- arm64-*)
+ arm64-* | aarch64le-*)
cpu=aarch64
;;
@@ -1165,7 +1187,7 @@ case $cpu-$vendor in
| alphapca5[67] | alpha64pca5[67] \
| am33_2.0 \
| amdgcn \
- | arc | arceb | arc64 \
+ | arc | arceb | arc32 | arc64 \
| arm | arm[lb]e | arme[lb] | armv* \
| avr | avr32 \
| asmjs \
@@ -1287,35 +1309,37 @@ esac
if test x$basic_os != x
then
-# First recognize some ad-hoc caes, or perhaps split kernel-os, or else just
+# First recognize some ad-hoc cases, or perhaps split kernel-os, or else just
# set os.
case $basic_os in
gnu/linux*)
kernel=linux
- os=$(echo $basic_os | sed -e 's|gnu/linux|gnu|')
+ os=`echo "$basic_os" | sed -e 's|gnu/linux|gnu|'`
;;
os2-emx)
kernel=os2
- os=$(echo $basic_os | sed -e 's|os2-emx|emx|')
+ os=`echo "$basic_os" | sed -e 's|os2-emx|emx|'`
;;
nto-qnx*)
kernel=nto
- os=$(echo $basic_os | sed -e 's|nto-qnx|qnx|')
+ os=`echo "$basic_os" | sed -e 's|nto-qnx|qnx|'`
;;
*-*)
# shellcheck disable=SC2162
+ saved_IFS=$IFS
IFS="-" read kernel os <<EOF
$basic_os
EOF
+ IFS=$saved_IFS
;;
# Default OS when just kernel was specified
nto*)
kernel=nto
- os=$(echo $basic_os | sed -e 's|nto|qnx|')
+ os=`echo "$basic_os" | sed -e 's|nto|qnx|'`
;;
linux*)
kernel=linux
- os=$(echo $basic_os | sed -e 's|linux|gnu|')
+ os=`echo "$basic_os" | sed -e 's|linux|gnu|'`
;;
*)
kernel=
@@ -1336,7 +1360,7 @@ case $os in
os=cnk
;;
solaris1 | solaris1.*)
- os=$(echo $os | sed -e 's|solaris1|sunos4|')
+ os=`echo "$os" | sed -e 's|solaris1|sunos4|'`
;;
solaris)
os=solaris2
@@ -1365,7 +1389,7 @@ case $os in
os=sco3.2v4
;;
sco3.2.[4-9]*)
- os=$(echo $os | sed -e 's/sco3.2./sco3.2v/')
+ os=`echo "$os" | sed -e 's/sco3.2./sco3.2v/'`
;;
sco*v* | scout)
# Don't match below
@@ -1395,7 +1419,7 @@ case $os in
os=lynxos
;;
mac[0-9]*)
- os=$(echo "$os" | sed -e 's|mac|macos|')
+ os=`echo "$os" | sed -e 's|mac|macos|'`
;;
opened*)
os=openedition
@@ -1404,10 +1428,10 @@ case $os in
os=os400
;;
sunos5*)
- os=$(echo "$os" | sed -e 's|sunos5|solaris2|')
+ os=`echo "$os" | sed -e 's|sunos5|solaris2|'`
;;
sunos6*)
- os=$(echo "$os" | sed -e 's|sunos6|solaris3|')
+ os=`echo "$os" | sed -e 's|sunos6|solaris3|'`
;;
wince*)
os=wince
@@ -1441,7 +1465,7 @@ case $os in
;;
# Preserve the version number of sinix5.
sinix5.*)
- os=$(echo $os | sed -e 's|sinix|sysv|')
+ os=`echo "$os" | sed -e 's|sinix|sysv|'`
;;
sinix*)
os=sysv4
@@ -1688,7 +1712,7 @@ fi
# Now, validate our (potentially fixed-up) OS.
case $os in
# Sometimes we do "kernel-libc", so those need to count as OSes.
- musl* | newlib* | uclibc*)
+ musl* | newlib* | relibc* | uclibc*)
;;
# Likewise for "kernel-abi"
eabi* | gnueabi*)
@@ -1729,7 +1753,8 @@ case $os in
| skyos* | haiku* | rdos* | toppers* | drops* | es* \
| onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \
| midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \
- | nsk* | powerunix* | genode* | zvmoe* | qnx* | emx*)
+ | nsk* | powerunix* | genode* | zvmoe* | qnx* | emx* | zephyr* \
+ | fiwix* )
;;
# This one is extra strict with allowed versions
sco3.2v2 | sco3.2v[4-9]* | sco5v6*)
@@ -1746,11 +1771,12 @@ esac
# As a final step for OS-related things, validate the OS-kernel combination
# (given a valid OS), if there is a kernel.
case $kernel-$os in
- linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* | linux-musl* | linux-uclibc* )
+ linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* \
+ | linux-musl* | linux-relibc* | linux-uclibc* )
;;
uclinux-uclibc* )
;;
- -dietlibc* | -newlib* | -musl* | -uclibc* )
+ -dietlibc* | -newlib* | -musl* | -relibc* | -uclibc* )
# These are just libc implementations, not actual OSes, and thus
# require a kernel.
echo "Invalid configuration \`$1': libc \`$os' needs explicit kernel." 1>&2
diff --git a/config/ChangeLog b/config/ChangeLog
index 4a05c5a53fb..dc0663bdfc8 100644
--- a/config/ChangeLog
+++ b/config/ChangeLog
@@ -1,3 +1,7 @@
+2022-01-22 Nick Clifton <nickc@redhat.com>
+
+ * 2.38 release branch created.
+
2021-07-03 Nick Clifton <nickc@redhat.com>
* 2.37 release branch created.
diff --git a/configure b/configure
index 787fcf89100..1badcb314f8 100755
--- a/configure
+++ b/configure
@@ -618,6 +618,7 @@ CXX_FOR_TARGET
CC_FOR_TARGET
RANLIB_PLUGIN_OPTION
AR_PLUGIN_OPTION
+PKG_CONFIG_PATH
READELF
OBJDUMP
OBJCOPY
@@ -787,6 +788,7 @@ enable_as_accelerator_for
enable_offload_targets
enable_gold
enable_ld
+enable_gprofng
enable_compressed_debug_sections
enable_libquadmath
enable_libquadmath_support
@@ -1514,6 +1516,7 @@ Optional Features:
offload target compiler during the build
--enable-gold[=ARG] build gold [ARG={default,yes,no}]
--enable-ld[=ARG] build ld [ARG={default,yes,no}]
+ --enable-gprofng[=ARG] build gprofng [ARG={yes,no}]
--enable-compressed-debug-sections={all,gas,gold,ld,none}
Enable compressed debug sections for gas, gold or ld
by default
@@ -3072,6 +3075,22 @@ $as_echo "$as_me: WARNING: neither ld nor gold are enabled" >&2;}
;;
esac
+# Check whether --enable-gprofng was given.
+if test "${enable_gprofng+set}" = set; then :
+ enableval=$enable_gprofng; enable_gprofng=$enableval
+else
+ enable_gprofng=yes
+fi
+
+if test "$enable_gprofng" = "yes"; then
+ case "${target}" in
+ x86_64-*-linux* | i?86-*-linux* | aarch64-*-linux*)
+ configdirs="$configdirs gprofng"
+ ;;
+ esac
+fi
+
+
# PR gas/19109
# Decide the default method for compressing debug sections.
# Provide a configure time option to override our default.
@@ -10292,6 +10311,7 @@ fi
+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5
$as_echo_n "checking for -plugin option... " >&6; }
diff --git a/configure.ac b/configure.ac
index 2b10e9a1b02..5b6e2048514 100644
--- a/configure.ac
+++ b/configure.ac
@@ -392,6 +392,20 @@ case "${ENABLE_LD}" in
;;
esac
+AC_ARG_ENABLE(gprofng,
+[AS_HELP_STRING([[--enable-gprofng[=ARG]]],
+ [build gprofng @<:@ARG={yes,no}@:>@])],
+enable_gprofng=$enableval,
+enable_gprofng=yes)
+if test "$enable_gprofng" = "yes"; then
+ case "${target}" in
+ x86_64-*-linux* | i?86-*-linux* | aarch64-*-linux*)
+ configdirs="$configdirs gprofng"
+ ;;
+ esac
+fi
+
+
# PR gas/19109
# Decide the default method for compressing debug sections.
# Provide a configure time option to override our default.
@@ -3451,6 +3465,7 @@ AC_SUBST(CC)
AC_SUBST(CXX)
AC_SUBST(CFLAGS)
AC_SUBST(CXXFLAGS)
+AC_SUBST(PKG_CONFIG_PATH)
GCC_PLUGIN_OPTION(PLUGIN_OPTION)
AR_PLUGIN_OPTION=
diff --git a/cpu/ChangeLog b/cpu/ChangeLog
index 1c178a8fd3e..f0ce6ca0f8c 100644
--- a/cpu/ChangeLog
+++ b/cpu/ChangeLog
@@ -1,3 +1,7 @@
+2022-01-22 Nick Clifton <nickc@redhat.com>
+
+ * 2.38 release branch created.
+
2021-07-05 Alan Modra <amodra@gmail.com>
* mep.opc (macros): Make static and const.
diff --git a/cpu/mep.opc b/cpu/mep.opc
index 6ad0c5879e8..278b4454c33 100644
--- a/cpu/mep.opc
+++ b/cpu/mep.opc
@@ -1451,12 +1451,15 @@ mep_print_insn (CGEN_CPU_DESC cd, bfd_vma pc, disassemble_info *info)
if (info->section && info->section->owner)
{
bfd *abfd = info->section->owner;
- mep_config_index = abfd->tdata.elf_obj_data->elf_header->e_flags & EF_MEP_INDEX_MASK;
- /* This instantly redefines MEP_CONFIG, MEP_OMASK, .... MEP_VLIW64 */
+ if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
+ {
+ mep_config_index = abfd->tdata.elf_obj_data->elf_header->e_flags & EF_MEP_INDEX_MASK;
+ /* This instantly redefines MEP_CONFIG, MEP_OMASK, .... MEP_VLIW64 */
- cop_type = abfd->tdata.elf_obj_data->elf_header->e_flags & EF_MEP_COP_MASK;
- if (cop_type == EF_MEP_COP_IVC2)
- ivc2 = 1;
+ cop_type = abfd->tdata.elf_obj_data->elf_header->e_flags & EF_MEP_COP_MASK;
+ if (cop_type == EF_MEP_COP_IVC2)
+ ivc2 = 1;
+ }
}
/* Picking the right ISA bitmask for the current context is tricky. */
diff --git a/elfcpp/ChangeLog b/elfcpp/ChangeLog
index d7dd7698f74..d7b14346065 100644
--- a/elfcpp/ChangeLog
+++ b/elfcpp/ChangeLog
@@ -1,3 +1,7 @@
+2022-01-22 Nick Clifton <nickc@redhat.com>
+
+ * 2.38 release branch created.
+
2021-07-03 Nick Clifton <nickc@redhat.com>
* 2.37 release branch created.
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 01080b94350..63fcc53bf70 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,63 @@
+2022-04-07 Mark Harmstone <mark@harmstone.com>
+
+ * config/tc-i386.c (pe_directive_secidx): New function.
+ (md_pseudo_table): Add support for secidx.
+ (x86_cons_fix_new): Likewise.
+ (tc_gen_reloc): Likewise.
+ * expr.c (op_rank): Add O_secidx.
+ * expr.h (operatorT): Likewise.
+ * symbols.c (resolve_symbol_value): Add support for O_secidx.
+ * testsuite/gas/i386/secidx.s: New test source file.
+ * testsuite/gas/i386/secidx.d: New test driver file.
+ * testsuite/gas/i386/i386.exp: Run new test.
+
+2022-04-07 Andreas Krebbel <krebbel@linux.ibm.com>
+
+ * config/tc-s390.c (s390_parse_cpu): Add z16 as alternate CPU
+ name.
+ * doc/as.texi: Add z16 and arch14 to CPU string list.
+ * doc/c-s390.texi: Add z16 to CPU string list.
+
+2022-04-06 Nick Clifton <nickc@redhat.com>
+
+ PR 28981
+ * testsuite/gas/elf/dwarf-5-irp.d: Update expected output.
+
+2022-03-21 Nick Clifton <nickc@redhat.com>
+
+ PR 28791
+ * config/tc-z80.c (emit_data_val): Do not warn about overlarge
+ constants generated by bit manipulation operators.
+ * testsuite/gas/z80/pr28791.s: New test source file.
+ * testsuite/gas/z80/pr28791.d: New test driver file.
+
+2022-01-28 Nick Clifton <nickc@redhat.com>
+
+ * po/fr.po: Updated French translation.
+
+2022-01-24 Nick Clifton <nickc@redhat.com>
+
+ * po/uk.po: Updated Ukranian translation.
+
+2022-01-22 Nick Clifton <nickc@redhat.com>
+
+ * configure: Regenerate.
+ * po/gas.pot: Regenerate.
+
+2022-01-22 Nick Clifton <nickc@redhat.com>
+
+ * 2.38 release branch created.
+
+2022-01-17 Nick Clifton <nickc@redhat.com>
+
+ * Makefile.in: Regenerate.
+ * po/gas.pot: Regenerate.
+
+2022-01-17 Sergey Belyashov <sergey.belyashov@gmail.com>
+
+ PR 28762
+ * app.c (do_scrub_chars): Correct handling when the symbol is not 'af'.
+
2021-12-16 Nick Clifton <nickc@redhat.com>
PR 28686
diff --git a/gas/Makefile.in b/gas/Makefile.in
index 8f0a56fd8d6..67dac53f68c 100644
--- a/gas/Makefile.in
+++ b/gas/Makefile.in
@@ -1854,7 +1854,7 @@ info: info-recursive
info-am: $(INFO_DEPS) info-local
-install-data-am: install-data-local install-info-am install-man
+install-data-am: install-info-am install-man
install-dvi: install-dvi-recursive
@@ -2008,10 +2008,10 @@ uninstall-man: uninstall-man1
distclean-DEJAGNU distclean-compile distclean-generic \
distclean-hdr distclean-libtool distclean-tags dvi dvi-am html \
html-am html-local info info-am info-local install install-am \
- install-data install-data-am install-data-local install-dvi \
- install-dvi-am install-exec install-exec-am install-exec-local \
- install-html install-html-am install-info install-info-am \
- install-man install-man1 install-pdf install-pdf-am install-ps \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-exec-local install-html \
+ install-html-am install-info install-info-am install-man \
+ install-man1 install-pdf install-pdf-am install-ps \
install-ps-am install-strip installcheck installcheck-am \
installdirs installdirs-am maintainer-clean \
maintainer-clean-aminfo maintainer-clean-generic mostlyclean \
@@ -2211,10 +2211,6 @@ doc/asconfig.texi: doc/$(CONFIG).texi doc/$(am__dirstamp)
$(AM_V_GEN)cp $(srcdir)/doc/$(CONFIG).texi doc/asconfig.texi
$(AM_V_at)chmod u+w doc/asconfig.texi
-# We want install to imply install-info as per GNU standards, despite the
-# cygnus option.
-install-data-local: install-info
-
# Maintenance
# We need it for the taz target in ../Makefile.in.
diff --git a/gas/NEWS b/gas/NEWS
index e780e683d88..846b5135cc5 100644
--- a/gas/NEWS
+++ b/gas/NEWS
@@ -1,5 +1,10 @@
-*- text -*-
+* Remove (rudimentary) support for the x86-64 sub-architectures Intel L1OM and
+ Intel K1OM.
+
+Changes in 2.38:
+
* Add support for AArch64 system registers that were missing in previous
releases.
diff --git a/gas/app.c b/gas/app.c
index c798b6a12e4..a3ad146625c 100644
--- a/gas/app.c
+++ b/gas/app.c
@@ -748,6 +748,8 @@ do_scrub_chars (size_t (*get) (char *, size_t), char *tostart, size_t tolen)
}
else
{
+ if (ch != EOF)
+ UNGET (ch);
state = 9;
break;
}
@@ -1086,10 +1088,10 @@ do_scrub_chars (size_t (*get) (char *, size_t), char *tostart, size_t tolen)
/* PUT didn't jump out. We could just break, but we
know what will happen, so optimize a bit. */
ch = GET ();
- old_state = 3;
+ old_state = 9;
}
- else if (state == 9)
- old_state = 3;
+ else if (state == 3)
+ old_state = 9;
else
old_state = state;
state = 5;
diff --git a/gas/as.c b/gas/as.c
index f320bac89b5..0262a6fec98 100644
--- a/gas/as.c
+++ b/gas/as.c
@@ -836,6 +836,8 @@ This program has absolutely no warranty.\n"));
versions/sections/options. */
if (startswith (old_argv[optind - 1], "-gdwarf"))
as_fatal (_("unknown DWARF option %s\n"), old_argv[optind - 1]);
+ else if (old_argv[optind - 1][1] == 'g' && optarg != NULL)
+ as_fatal (_("unknown option `%s'"), old_argv[optind - 1]);
if (md_debug_format_selector)
debug_type = md_debug_format_selector (& use_gnu_debug_info_extensions);
diff --git a/gas/as.h b/gas/as.h
index ff5b9a4c01c..135abc8f23d 100644
--- a/gas/as.h
+++ b/gas/as.h
@@ -473,8 +473,8 @@ void do_scrub_begin (int);
void input_scrub_begin (void);
void input_scrub_close (void);
void input_scrub_end (void);
-int new_logical_line (const char *, int);
-int new_logical_line_flags (const char *, int, int);
+void new_logical_line (const char *, int);
+void new_logical_line_flags (const char *, int, int);
void subsegs_begin (void);
void subseg_change (segT, int);
segT subseg_new (const char *, subsegT);
diff --git a/gas/cond.c b/gas/cond.c
index d5c0911d77e..b6e538a846f 100644
--- a/gas/cond.c
+++ b/gas/cond.c
@@ -561,6 +561,7 @@ cond_finish_check (int nest)
as_bad_where (current_cframe->else_file_line.file,
current_cframe->else_file_line.line,
_("here is the \"else\" of the unterminated conditional"));
+ cond_exit_macro (nest);
}
}
diff --git a/gas/config/bfin-lex.l b/gas/config/bfin-lex.l
index 7af47b12954..f0a685b710b 100644
--- a/gas/config/bfin-lex.l
+++ b/gas/config/bfin-lex.l
@@ -311,7 +311,7 @@ int yylex (void);
char *ref = strdup (yytext);
if (ref[1] == 'b' || ref[1] == 'B')
{
- name = fb_label_name ((int) (ref[0] - '0'), 0);
+ name = fb_label_name (ref[0] - '0', 0);
yylval.symbol = symbol_find (name);
if ((yylval.symbol != NULL)
@@ -329,7 +329,7 @@ int yylex (void);
Construct a local label name, then an undefined symbol.
Just return it as never seen before. */
- name = fb_label_name ((int) (ref[0] - '0'), 1);
+ name = fb_label_name (ref[0] - '0', 1);
yylval.symbol = symbol_find_or_make (name);
/* We have no need to check symbol properties. */
return SYMBOL;
diff --git a/gas/config/obj-coff.c b/gas/config/obj-coff.c
index 1924524aa35..98c39e43907 100644
--- a/gas/config/obj-coff.c
+++ b/gas/config/obj-coff.c
@@ -316,7 +316,7 @@ c_symbol_merge (symbolS *debug, symbolS *normal)
}
void
-c_dot_file_symbol (const char *filename, int appfile ATTRIBUTE_UNUSED)
+c_dot_file_symbol (const char *filename)
{
symbolS *symbolP;
@@ -447,11 +447,11 @@ coff_add_linesym (symbolS *sym)
}
static void
-obj_coff_ln (int appline)
+obj_coff_ln (int ignore ATTRIBUTE_UNUSED)
{
int l;
- if (! appline && def_symbol_in_progress != NULL)
+ if (def_symbol_in_progress != NULL)
{
as_warn (_(".ln pseudo-op inside .def/.endef: ignored."));
demand_empty_rest_of_line ();
@@ -460,9 +460,9 @@ obj_coff_ln (int appline)
l = get_absolute_expression ();
- /* If there is no lineno symbol, treat a .ln
- directive as if it were a .appline directive. */
- if (appline || current_lineno_sym == NULL)
+ /* If there is no lineno symbol, treat a .ln directive
+ as if it were a (no longer existing) .appline one. */
+ if (current_lineno_sym == NULL)
new_logical_line ((char *) NULL, l - 1);
else
add_lineno (frag_now, frag_now_fix (), l);
@@ -473,8 +473,7 @@ obj_coff_ln (int appline)
if (listing)
{
- if (! appline)
- l += coff_line_base - 1;
+ l += coff_line_base - 1;
listing_source_line (l);
}
}
@@ -1705,7 +1704,7 @@ coff_adjust_symtab (void)
{
if (symbol_rootP == NULL
|| S_GET_STORAGE_CLASS (symbol_rootP) != C_FILE)
- c_dot_file_symbol ("fake", 0);
+ c_dot_file_symbol ("fake");
}
void
@@ -1849,7 +1848,6 @@ symbol_dump (void)
const pseudo_typeS coff_pseudo_table[] =
{
{"ABORT", s_abort, 0},
- {"appline", obj_coff_ln, 1},
/* We accept the .bss directive for backward compatibility with
earlier versions of gas. */
{"bss", obj_coff_bss, 0},
diff --git a/gas/config/obj-coff.h b/gas/config/obj-coff.h
index 1892b8a3f3f..1dbd38aea37 100644
--- a/gas/config/obj-coff.h
+++ b/gas/config/obj-coff.h
@@ -129,10 +129,8 @@
#define OUTPUT_FLAVOR bfd_target_coff_flavour
-/* Alter the field names, for now, until we've fixed up the other
- references to use the new name. */
+/* COFF symbol flags. See SF_* macros. */
#define OBJ_SYMFIELD_TYPE unsigned long
-#define sy_obj sy_obj_flags
/* We can't use the predefined section symbols in bfd/section.c, as
COFF symbols have extra fields. See bfd/libcoff.h:coff_symbol_type. */
@@ -187,9 +185,8 @@
#define SA_SET_SECT_NRELOC(s,v) (SYM_AUXENT (s)->x_sect.x_nreloc = (v))
#endif
-/* Internal use only definitions. SF_ stands for symbol flags.
-
- These values can be assigned to sy_symbol.ost_flags field of a symbolS. */
+/* Internal use only definitions. SF_ stands for symbol flags. These
+ values can be assigned to OBJ_SYMFIELD_TYPE obj field of a symbolS. */
#define SF_NORMAL_MASK 0x0000ffff /* bits 12-15 are general purpose. */
@@ -249,7 +246,7 @@ extern int coff_n_line_nos;
extern symbolS *coff_last_function;
#define obj_emit_lineno(WHERE, LINE, FILE_START) abort ()
-#define obj_app_file(name, app) c_dot_file_symbol (name, app)
+#define obj_app_file(name) c_dot_file_symbol (name)
#define obj_frob_symbol(S,P) coff_frob_symbol (S, & P)
#define obj_frob_section(S) coff_frob_section (S)
#define obj_frob_file_after_relocs() coff_frob_file_after_relocs ()
@@ -315,14 +312,12 @@ extern const pseudo_typeS coff_pseudo_table[];
SA_SET_SCN_NRELOC (section_symbol (sec), n)
#endif
-#define obj_app_file(name, app) c_dot_file_symbol (name, app)
-
extern int S_SET_DATA_TYPE (symbolS *, int);
extern int S_SET_STORAGE_CLASS (symbolS *, int);
extern int S_GET_STORAGE_CLASS (symbolS *);
extern void SA_SET_SYM_ENDNDX (symbolS *, symbolS *);
extern void coff_add_linesym (symbolS *);
-extern void c_dot_file_symbol (const char *, int);
+extern void c_dot_file_symbol (const char *);
extern void coff_frob_symbol (symbolS *, int *);
extern void coff_adjust_symtab (void);
extern void coff_frob_section (segT);
@@ -338,7 +333,6 @@ extern void pecoff_obj_clear_weak_hook (symbolS *);
extern void obj_coff_section (int);
extern segT obj_coff_add_segment (const char *);
extern void obj_coff_section (int);
-extern void c_dot_file_symbol (const char *, int);
extern segT s_get_segment (symbolS *);
#ifndef tc_coff_symbol_emit_hook
extern void tc_coff_symbol_emit_hook (symbolS *);
diff --git a/gas/config/obj-ecoff.h b/gas/config/obj-ecoff.h
index 2cd7e9b5b0d..06e002cd696 100644
--- a/gas/config/obj-ecoff.h
+++ b/gas/config/obj-ecoff.h
@@ -61,7 +61,7 @@ struct ecoff_sy_obj
#define obj_symbol_clone_hook ecoff_symbol_clone_hook
/* Record file switches in the ECOFF symbol table. */
-#define obj_app_file(name, app) ecoff_new_file (name, app)
+#define obj_app_file(name) ecoff_new_file (name)
/* At the moment we don't want to do any stabs processing in read.c. */
#define OBJ_PROCESS_STAB(seg, what, string, type, other, desc) \
diff --git a/gas/config/obj-elf.c b/gas/config/obj-elf.c
index b56f8aa5220..c02d26ba453 100644
--- a/gas/config/obj-elf.c
+++ b/gas/config/obj-elf.c
@@ -258,46 +258,36 @@ elf_sec_sym_ok_for_reloc (asection *sec)
}
void
-elf_file_symbol (const char *s, int appfile)
+elf_file_symbol (const char *s)
{
asymbol *bsym;
+ symbolS *sym = symbol_new (s, absolute_section, &zero_address_frag, 0);
+ size_t name_length = strlen (s);
- if (!appfile
- || symbol_rootP == NULL
- || (bsym = symbol_get_bfdsym (symbol_rootP)) == NULL
- || (bsym->flags & BSF_FILE) == 0)
+ if (name_length > strlen (S_GET_NAME (sym)))
{
- symbolS *sym;
- size_t name_length;
-
- sym = symbol_new (s, absolute_section, &zero_address_frag, 0);
-
- name_length = strlen (s);
- if (name_length > strlen (S_GET_NAME (sym)))
- {
- obstack_grow (&notes, s, name_length + 1);
- S_SET_NAME (sym, (const char *) obstack_finish (&notes));
- }
- else
- strcpy ((char *) S_GET_NAME (sym), s);
+ obstack_grow (&notes, s, name_length + 1);
+ S_SET_NAME (sym, (const char *) obstack_finish (&notes));
+ }
+ else
+ strcpy ((char *) S_GET_NAME (sym), s);
- symbol_get_bfdsym (sym)->flags |= BSF_FILE;
+ symbol_get_bfdsym (sym)->flags |= BSF_FILE;
- if (symbol_rootP != sym
- && ((bsym = symbol_get_bfdsym (symbol_rootP)) == NULL
- || (bsym->flags & BSF_FILE) == 0))
- {
- symbol_remove (sym, &symbol_rootP, &symbol_lastP);
- symbol_insert (sym, symbol_rootP, &symbol_rootP, &symbol_lastP);
- }
+ if (symbol_rootP != sym
+ && ((bsym = symbol_get_bfdsym (symbol_rootP)) == NULL
+ || (bsym->flags & BSF_FILE) == 0))
+ {
+ symbol_remove (sym, &symbol_rootP, &symbol_lastP);
+ symbol_insert (sym, symbol_rootP, &symbol_rootP, &symbol_lastP);
+ }
#ifdef DEBUG
- verify_symbol_chain (symbol_rootP, symbol_lastP);
+ verify_symbol_chain (symbol_rootP, symbol_lastP);
#endif
- }
#ifdef NEED_ECOFF_DEBUG
- ecoff_new_file (s, appfile);
+ ecoff_new_file (s);
#endif
}
@@ -2154,27 +2144,23 @@ elf_obj_symbol_clone_hook (symbolS *newsym, symbolS *orgsym ATTRIBUTE_UNUSED)
}
}
-/* When setting one symbol equal to another, by default we probably
- want them to have the same "size", whatever it means in the current
- context. */
-
void
elf_copy_symbol_attributes (symbolS *dest, symbolS *src)
{
struct elf_obj_sy *srcelf = symbol_get_obj (src);
struct elf_obj_sy *destelf = symbol_get_obj (dest);
- if (srcelf->size)
+ /* If size is unset, copy size from src. Because we don't track whether
+ .size has been used, we can't differentiate .size dest, 0 from the case
+ where dest's size is unset. */
+ if (!destelf->size && S_GET_SIZE (dest) == 0)
{
- if (destelf->size == NULL)
- destelf->size = XNEW (expressionS);
- *destelf->size = *srcelf->size;
- }
- else
- {
- free (destelf->size);
- destelf->size = NULL;
+ if (srcelf->size)
+ {
+ destelf->size = XNEW (expressionS);
+ *destelf->size = *srcelf->size;
+ }
+ S_SET_SIZE (dest, S_GET_SIZE (src));
}
- S_SET_SIZE (dest, S_GET_SIZE (src));
/* Don't copy visibility. */
S_SET_OTHER (dest, (ELF_ST_VISIBILITY (S_GET_OTHER (dest))
| (S_GET_OTHER (src) & ~ELF_ST_VISIBILITY (-1))));
diff --git a/gas/config/obj-elf.h b/gas/config/obj-elf.h
index e2941bfc576..2b9d28cb79a 100644
--- a/gas/config/obj-elf.h
+++ b/gas/config/obj-elf.h
@@ -180,7 +180,7 @@ extern void elf_frob_file_after_relocs (void);
#ifndef obj_app_file
#define obj_app_file elf_file_symbol
#endif
-extern void elf_file_symbol (const char *, int);
+extern void elf_file_symbol (const char *);
extern void obj_elf_section_change_hook (void);
diff --git a/gas/config/obj-multi.h b/gas/config/obj-multi.h
index a933d599906..0d56b4a3824 100644
--- a/gas/config/obj-multi.h
+++ b/gas/config/obj-multi.h
@@ -36,9 +36,9 @@
? (*this_format->begin) () \
: (void) 0)
-#define obj_app_file(NAME, APPFILE) \
+#define obj_app_file(NAME) \
(this_format->app_file \
- ? (*this_format->app_file) (NAME, APPFILE) \
+ ? (*this_format->app_file) (NAME) \
: (void) 0)
#define obj_frob_symbol(S,P) \
diff --git a/gas/config/tc-aarch64.c b/gas/config/tc-aarch64.c
index a4ef65274e4..dee7d19d94a 100644
--- a/gas/config/tc-aarch64.c
+++ b/gas/config/tc-aarch64.c
@@ -1982,6 +1982,7 @@ static void
s_aarch64_inst (int ignored ATTRIBUTE_UNUSED)
{
expressionS exp;
+ unsigned n = 0;
#ifdef md_flush_pending_output
md_flush_pending_output ();
@@ -2020,10 +2021,13 @@ s_aarch64_inst (int ignored ATTRIBUTE_UNUSED)
unsigned int val = exp.X_add_number;
exp.X_add_number = SWAP_32 (val);
}
- emit_expr (&exp, 4);
+ emit_expr (&exp, INSN_SIZE);
+ ++n;
}
while (*input_line_pointer++ == ',');
+ dwarf2_emit_insn (n * INSN_SIZE);
+
/* Put terminator back into stream. */
input_line_pointer--;
demand_empty_rest_of_line ();
@@ -10465,17 +10469,17 @@ aarch64_elf_copy_symbol_attributes (symbolS *dest, symbolS *src)
{
struct elf_obj_sy *srcelf = symbol_get_obj (src);
struct elf_obj_sy *destelf = symbol_get_obj (dest);
- if (srcelf->size)
- {
- if (destelf->size == NULL)
- destelf->size = XNEW (expressionS);
- *destelf->size = *srcelf->size;
- }
- else
+ /* If size is unset, copy size from src. Because we don't track whether
+ .size has been used, we can't differentiate .size dest, 0 from the case
+ where dest's size is unset. */
+ if (!destelf->size && S_GET_SIZE (dest) == 0)
{
- free (destelf->size);
- destelf->size = NULL;
+ if (srcelf->size)
+ {
+ destelf->size = XNEW (expressionS);
+ *destelf->size = *srcelf->size;
+ }
+ S_SET_SIZE (dest, S_GET_SIZE (src));
}
- S_SET_SIZE (dest, S_GET_SIZE (src));
}
#endif
diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c
index 04f6ade830b..ca4f97b164a 100644
--- a/gas/config/tc-arm.c
+++ b/gas/config/tc-arm.c
@@ -4033,6 +4033,8 @@ s_arm_elf_inst (int nbytes)
mapping_state (MAP_ARM);
}
+ dwarf2_emit_insn (0);
+
do
{
expressionS exp;
diff --git a/gas/config/tc-hppa.c b/gas/config/tc-hppa.c
index 742d262a5b5..5a4db51b89a 100644
--- a/gas/config/tc-hppa.c
+++ b/gas/config/tc-hppa.c
@@ -2432,24 +2432,37 @@ pa_chk_field_selector (char **str)
int middle, low, high;
int cmp;
char name[4];
+ char *s = *str;
/* Read past any whitespace. */
- /* FIXME: should we read past newlines and formfeeds??? */
- while (**str == ' ' || **str == '\t' || **str == '\n' || **str == '\f')
- *str = *str + 1;
-
- if ((*str)[1] == '\'' || (*str)[1] == '%')
- name[0] = TOLOWER ((*str)[0]),
- name[1] = 0;
- else if ((*str)[2] == '\'' || (*str)[2] == '%')
- name[0] = TOLOWER ((*str)[0]),
- name[1] = TOLOWER ((*str)[1]),
- name[2] = 0;
- else if ((*str)[3] == '\'' || (*str)[3] == '%')
- name[0] = TOLOWER ((*str)[0]),
- name[1] = TOLOWER ((*str)[1]),
- name[2] = TOLOWER ((*str)[2]),
- name[3] = 0;
+ while (*s == ' ' || *s == '\t')
+ s++;
+ *str = s;
+
+ if (is_end_of_line [(unsigned char) s[0]])
+ return e_fsel;
+ else if (s[1] == '\'' || s[1] == '%')
+ {
+ name[0] = TOLOWER (s[0]);
+ name[1] = 0;
+ }
+ else if (is_end_of_line [(unsigned char) s[1]])
+ return e_fsel;
+ else if (s[2] == '\'' || s[2] == '%')
+ {
+ name[0] = TOLOWER (s[0]);
+ name[1] = TOLOWER (s[1]);
+ name[2] = 0;
+ }
+ else if (is_end_of_line [(unsigned char) s[2]])
+ return e_fsel;
+ else if (s[3] == '\'' || s[3] == '%')
+ {
+ name[0] = TOLOWER (s[0]);
+ name[1] = TOLOWER (s[1]);
+ name[2] = TOLOWER (s[2]);
+ name[3] = 0;
+ }
else
return e_fsel;
diff --git a/gas/config/tc-i386-intel.c b/gas/config/tc-i386-intel.c
index 42f0afe0e41..83d22407429 100644
--- a/gas/config/tc-i386-intel.c
+++ b/gas/config/tc-i386-intel.c
@@ -289,6 +289,13 @@ i386_intel_simplify_register (expressionS *e)
return 0;
}
+ if (!check_register (&i386_regtab[reg_num]))
+ {
+ as_bad (_("register '%s%s' cannot be used here"),
+ register_prefix, i386_regtab[reg_num].reg_name);
+ return 0;
+ }
+
if (!intel_state.in_bracket)
{
if (i.op[this_operand].regs)
@@ -529,6 +536,9 @@ static int i386_intel_simplify (expressionS *e)
if (e->X_add_symbol
&& !i386_intel_simplify_symbol (e->X_add_symbol))
return 0;
+ if (!the_reg && this_operand >= 0
+ && e->X_op == O_symbol && !e->X_add_number)
+ the_reg = i.op[this_operand].regs;
if (e->X_op == O_add || e->X_op == O_subtract)
{
base = intel_state.base;
diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c
index e0632681477..61b9af1c24b 100644
--- a/gas/config/tc-i386.c
+++ b/gas/config/tc-i386.c
@@ -152,6 +152,7 @@ static void set_check (int);
static void set_cpu_arch (int);
#ifdef TE_PE
static void pe_directive_secrel (int);
+static void pe_directive_secidx (int);
#endif
static void signed_cons (int);
static char *output_invalid (int c);
@@ -976,10 +977,6 @@ static const arch_entry cpu_arch[] =
CPU_CORE2_FLAGS, 0 },
{ STRING_COMMA_LEN ("corei7"), PROCESSOR_COREI7,
CPU_COREI7_FLAGS, 0 },
- { STRING_COMMA_LEN ("l1om"), PROCESSOR_L1OM,
- CPU_L1OM_FLAGS, 0 },
- { STRING_COMMA_LEN ("k1om"), PROCESSOR_K1OM,
- CPU_K1OM_FLAGS, 0 },
{ STRING_COMMA_LEN ("iamcu"), PROCESSOR_IAMCU,
CPU_IAMCU_FLAGS, 0 },
{ STRING_COMMA_LEN ("k6"), PROCESSOR_K6,
@@ -1389,6 +1386,7 @@ const pseudo_typeS md_pseudo_table[] =
#endif
#ifdef TE_PE
{"secrel32", pe_directive_secrel, 0},
+ {"secidx", pe_directive_secidx, 0},
#endif
{0, 0, 0}
};
@@ -1599,8 +1597,6 @@ i386_generate_nops (fragS *fragP, char *where, offsetT count, int limit)
case PROCESSOR_CORE:
case PROCESSOR_CORE2:
case PROCESSOR_COREI7:
- case PROCESSOR_L1OM:
- case PROCESSOR_K1OM:
case PROCESSOR_GENERIC64:
case PROCESSOR_K6:
case PROCESSOR_ATHLON:
@@ -1656,8 +1652,6 @@ i386_generate_nops (fragS *fragP, char *where, offsetT count, int limit)
case PROCESSOR_CORE:
case PROCESSOR_CORE2:
case PROCESSOR_COREI7:
- case PROCESSOR_L1OM:
- case PROCESSOR_K1OM:
if (fragP->tc_frag_data.isa_flags.bitfield.cpunop)
patt = alt_patt;
else
@@ -1971,6 +1965,12 @@ cpu_flags_match (const insn_template *t)
return match;
x.bitfield.cpuavx512vl = 0;
+ /* AVX and AVX2 present at the same time express an operand size
+ dependency - strip AVX2 for the purposes here. The operand size
+ dependent check occurs in check_vecOperands(). */
+ if (x.bitfield.cpuavx && x.bitfield.cpuavx2)
+ x.bitfield.cpuavx2 = 0;
+
cpu = cpu_flags_and (x, cpu);
if (!cpu_flags_all_zero (&cpu))
{
@@ -2377,13 +2377,15 @@ operand_type_register_match (i386_operand_type g0,
&& g0.bitfield.zmmword == g1.bitfield.zmmword)
return 1;
- if (!(t0.bitfield.byte & t1.bitfield.byte)
- && !(t0.bitfield.word & t1.bitfield.word)
- && !(t0.bitfield.dword & t1.bitfield.dword)
- && !(t0.bitfield.qword & t1.bitfield.qword)
- && !(t0.bitfield.xmmword & t1.bitfield.xmmword)
- && !(t0.bitfield.ymmword & t1.bitfield.ymmword)
- && !(t0.bitfield.zmmword & t1.bitfield.zmmword))
+ /* If expectations overlap in no more than a single size, all is fine. */
+ g0 = operand_type_and (t0, t1);
+ if (g0.bitfield.byte
+ + g0.bitfield.word
+ + g0.bitfield.dword
+ + g0.bitfield.qword
+ + g0.bitfield.xmmword
+ + g0.bitfield.ymmword
+ + g0.bitfield.zmmword <= 1)
return 1;
i.error = register_type_mismatch;
@@ -2825,7 +2827,7 @@ check_cpu_arch_compatible (const char *name ATTRIBUTE_UNUSED,
#if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
static const char *arch;
- /* Intel LIOM is only supported on ELF. */
+ /* Intel MCU is only supported on ELF. */
if (!IS_ELF)
return;
@@ -2839,18 +2841,8 @@ check_cpu_arch_compatible (const char *name ATTRIBUTE_UNUSED,
}
/* If we are targeting Intel MCU, we must enable it. */
- if (get_elf_backend_data (stdoutput)->elf_machine_code != EM_IAMCU
- || new_flag.bitfield.cpuiamcu)
- return;
-
- /* If we are targeting Intel L1OM, we must enable it. */
- if (get_elf_backend_data (stdoutput)->elf_machine_code != EM_L1OM
- || new_flag.bitfield.cpul1om)
- return;
-
- /* If we are targeting Intel K1OM, we must enable it. */
- if (get_elf_backend_data (stdoutput)->elf_machine_code != EM_K1OM
- || new_flag.bitfield.cpuk1om)
+ if ((get_elf_backend_data (stdoutput)->elf_machine_code == EM_IAMCU)
+ == new_flag.bitfield.cpuiamcu)
return;
as_bad (_("`%s' is not supported on `%s'"), name, arch);
@@ -2873,10 +2865,10 @@ set_cpu_arch (int dummy ATTRIBUTE_UNUSED)
{
if (strcmp (string, cpu_arch[j].name) == 0)
{
- check_cpu_arch_compatible (string, cpu_arch[j].flags);
-
if (*string != '.')
{
+ check_cpu_arch_compatible (string, cpu_arch[j].flags);
+
cpu_arch_name = cpu_arch[j].name;
cpu_sub_arch_name = NULL;
cpu_arch_flags = cpu_arch[j].flags;
@@ -2992,21 +2984,7 @@ set_cpu_arch (int dummy ATTRIBUTE_UNUSED)
enum bfd_architecture
i386_arch (void)
{
- if (cpu_arch_isa == PROCESSOR_L1OM)
- {
- if (OUTPUT_FLAVOR != bfd_target_elf_flavour
- || flag_code != CODE_64BIT)
- as_fatal (_("Intel L1OM is 64bit ELF only"));
- return bfd_arch_l1om;
- }
- else if (cpu_arch_isa == PROCESSOR_K1OM)
- {
- if (OUTPUT_FLAVOR != bfd_target_elf_flavour
- || flag_code != CODE_64BIT)
- as_fatal (_("Intel K1OM is 64bit ELF only"));
- return bfd_arch_k1om;
- }
- else if (cpu_arch_isa == PROCESSOR_IAMCU)
+ if (cpu_arch_isa == PROCESSOR_IAMCU)
{
if (OUTPUT_FLAVOR != bfd_target_elf_flavour
|| flag_code == CODE_64BIT)
@@ -3022,21 +3000,7 @@ i386_mach (void)
{
if (startswith (default_arch, "x86_64"))
{
- if (cpu_arch_isa == PROCESSOR_L1OM)
- {
- if (OUTPUT_FLAVOR != bfd_target_elf_flavour
- || default_arch[6] != '\0')
- as_fatal (_("Intel L1OM is 64bit ELF only"));
- return bfd_mach_l1om;
- }
- else if (cpu_arch_isa == PROCESSOR_K1OM)
- {
- if (OUTPUT_FLAVOR != bfd_target_elf_flavour
- || default_arch[6] != '\0')
- as_fatal (_("Intel K1OM is 64bit ELF only"));
- return bfd_mach_k1om;
- }
- else if (default_arch[6] == '\0')
+ if (default_arch[6] == '\0')
return bfd_mach_x86_64;
else
return bfd_mach_x64_32;
@@ -4973,7 +4937,7 @@ md_assemble (char *line)
/* Don't optimize displacement for movabs since it only takes 64bit
displacement. */
if (i.disp_operands
- && i.disp_encoding != disp_encoding_32bit
+ && i.disp_encoding <= disp_encoding_8bit
&& (flag_code != CODE_64BIT
|| strcmp (mnemonic, "movabs") != 0))
optimize_disp ();
@@ -6039,6 +6003,23 @@ check_VecOperands (const insn_template *t)
}
}
+ /* Somewhat similarly, templates specifying both AVX and AVX2 are
+ requiring AVX2 support if the actual operand size is YMMword. */
+ if (t->cpu_flags.bitfield.cpuavx
+ && t->cpu_flags.bitfield.cpuavx2
+ && !cpu_arch_flags.bitfield.cpuavx2)
+ {
+ for (op = 0; op < t->operands; ++op)
+ {
+ if (t->operand_types[op].bitfield.xmmword
+ && i.types[op].bitfield.ymmword)
+ {
+ i.error = unsupported;
+ return 1;
+ }
+ }
+ }
+
/* Without VSIB byte, we can't have a vector register for index. */
if (!t->opcode_modifier.sib
&& i.index_reg
@@ -6291,7 +6272,7 @@ check_VecOperands (const insn_template *t)
if (i.rounding.type != rc_none)
{
if (!t->opcode_modifier.sae
- || (i.rounding.type != saeonly && !t->opcode_modifier.staticrounding))
+ || ((i.rounding.type != saeonly) != t->opcode_modifier.staticrounding))
{
i.error = unsupported_rc_sae;
return 1;
@@ -6306,6 +6287,11 @@ check_VecOperands (const insn_template *t)
return 1;
}
}
+ else if (t->opcode_modifier.sae)
+ {
+ i.error = unsupported_syntax;
+ return 1;
+ }
/* Check the special Imm4 cases; must be the first operand. */
if (t->cpu_flags.bitfield.cpuxop && t->operands == 5)
@@ -6323,7 +6309,7 @@ check_VecOperands (const insn_template *t)
/* Check vector Disp8 operand. */
if (t->opcode_modifier.disp8memshift
- && i.disp_encoding != disp_encoding_32bit)
+ && i.disp_encoding <= disp_encoding_8bit)
{
if (i.broadcast.type)
i.memshift = t->opcode_modifier.broadcast - 1;
@@ -8791,7 +8777,7 @@ output_branch (void)
}
code16 = flag_code == CODE_16BIT ? CODE16 : 0;
- size = i.disp_encoding == disp_encoding_32bit ? BIG : SMALL;
+ size = i.disp_encoding > disp_encoding_8bit ? BIG : SMALL;
prefix = 0;
if (i.prefix[DATA_PREFIX] != 0)
@@ -10288,6 +10274,8 @@ x86_cons_fix_new (fragS *frag, unsigned int off, unsigned int len,
exp->X_op = O_symbol;
r = BFD_RELOC_32_SECREL;
}
+ else if (exp->X_op == O_secidx)
+ r = BFD_RELOC_16_SECIDX;
#endif
fix_new_exp (frag, off, len, exp, 0, r);
@@ -10327,13 +10315,16 @@ lex_got (enum bfd_reloc_code_real *rel,
we don't yet know the operand size (this will be set by insn
matching). Hence we record the word32 relocation here,
and adjust the reloc according to the real size in reloc(). */
- static const struct {
+ static const struct
+ {
const char *str;
int len;
const enum bfd_reloc_code_real rel[2];
const i386_operand_type types64;
bool need_GOT_symbol;
- } gotrel[] = {
+ }
+ gotrel[] =
+ {
#ifndef TE_PE
#if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
{ STRING_COMMA_LEN ("SIZE"), { BFD_RELOC_SIZE32,
@@ -10578,6 +10569,25 @@ pe_directive_secrel (int dummy ATTRIBUTE_UNUSED)
input_line_pointer--;
demand_empty_rest_of_line ();
}
+
+static void
+pe_directive_secidx (int dummy ATTRIBUTE_UNUSED)
+{
+ expressionS exp;
+
+ do
+ {
+ expression (&exp);
+ if (exp.X_op == O_symbol)
+ exp.X_op = O_secidx;
+
+ emit_expr (&exp, 2);
+ }
+ while (*input_line_pointer++ == ',');
+
+ input_line_pointer--;
+ demand_empty_rest_of_line ();
+}
#endif
/* Handle Vector operations. */
@@ -12790,7 +12800,8 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
#endif
else if (use_rela_relocations)
{
- fixP->fx_no_overflow = 1;
+ if (!disallow_64bit_reloc || fixP->fx_r_type == NO_RELOC)
+ fixP->fx_no_overflow = 1;
/* Remember value for tc_gen_reloc. */
fixP->fx_addnumber = value;
value = 0;
@@ -12994,6 +13005,14 @@ parse_register (char *reg_string, char **end_op)
input_line_pointer = reg_string;
c = get_symbol_name (&reg_string);
symbolP = symbol_find (reg_string);
+ while (symbolP && S_GET_SEGMENT (symbolP) != reg_section)
+ {
+ const expressionS *e = symbol_get_value_expression(symbolP);
+
+ if (e->X_op != O_symbol || e->X_add_number)
+ break;
+ symbolP = e->X_add_symbol;
+ }
if (symbolP && S_GET_SEGMENT (symbolP) == reg_section)
{
const expressionS *e = symbol_get_value_expression (symbolP);
@@ -13019,11 +13038,12 @@ parse_register (char *reg_string, char **end_op)
int
i386_parse_name (char *name, expressionS *e, char *nextcharP)
{
- const reg_entry *r;
+ const reg_entry *r = NULL;
char *end = input_line_pointer;
*end = *nextcharP;
- r = parse_register (name, &input_line_pointer);
+ if (*name == REGISTER_PREFIX || allow_naked_reg)
+ r = parse_real_register (name, &input_line_pointer);
if (r && end <= input_line_pointer)
{
*nextcharP = *input_line_pointer;
@@ -13308,7 +13328,7 @@ md_parse_option (int c, const char *arg)
*next++ = '\0';
for (j = 0; j < ARRAY_SIZE (cpu_arch); j++)
{
- if (strcmp (arch, cpu_arch [j].name) == 0)
+ if (arch == saved && strcmp (arch, cpu_arch [j].name) == 0)
{
/* Processor. */
if (! cpu_arch[j].flags.bitfield.cpui386)
@@ -14071,19 +14091,7 @@ i386_target_format (void)
format = ELF_TARGET_FORMAT32;
break;
}
- if (cpu_arch_isa == PROCESSOR_L1OM)
- {
- if (x86_elf_abi != X86_64_ABI)
- as_fatal (_("Intel L1OM is 64bit only"));
- return ELF_TARGET_L1OM_FORMAT;
- }
- else if (cpu_arch_isa == PROCESSOR_K1OM)
- {
- if (x86_elf_abi != X86_64_ABI)
- as_fatal (_("Intel K1OM is 64bit only"));
- return ELF_TARGET_K1OM_FORMAT;
- }
- else if (cpu_arch_isa == PROCESSOR_IAMCU)
+ if (cpu_arch_isa == PROCESSOR_IAMCU)
{
if (x86_elf_abi != I386_ABI)
as_fatal (_("Intel MCU is 32bit only"));
@@ -14211,6 +14219,17 @@ i386_cons_align (int ignore ATTRIBUTE_UNUSED)
int
i386_validate_fix (fixS *fixp)
{
+ if (fixp->fx_addsy && S_GET_SEGMENT(fixp->fx_addsy) == reg_section)
+ {
+ reloc_howto_type *howto;
+
+ howto = bfd_reloc_type_lookup (stdoutput, fixp->fx_r_type);
+ as_bad_where (fixp->fx_file, fixp->fx_line,
+ _("invalid %s relocation against register"),
+ howto ? howto->name : "<unknown>");
+ return 0;
+ }
+
#if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
if (fixp->fx_r_type == BFD_RELOC_SIZE32
|| fixp->fx_r_type == BFD_RELOC_SIZE64)
@@ -14371,6 +14390,7 @@ tc_gen_reloc (asection *section ATTRIBUTE_UNUSED, fixS *fixp)
case BFD_RELOC_VTABLE_INHERIT:
#ifdef TE_PE
case BFD_RELOC_32_SECREL:
+ case BFD_RELOC_16_SECIDX:
#endif
code = fixp->fx_r_type;
break;
diff --git a/gas/config/tc-i386.h b/gas/config/tc-i386.h
index 603ae475bbc..d7c6b33c778 100644
--- a/gas/config/tc-i386.h
+++ b/gas/config/tc-i386.h
@@ -80,14 +80,6 @@ extern unsigned long i386_mach (void);
#define ELF_TARGET_FORMAT32 "elf32-x86-64"
#endif
-#ifndef ELF_TARGET_L1OM_FORMAT
-#define ELF_TARGET_L1OM_FORMAT "elf64-l1om"
-#endif
-
-#ifndef ELF_TARGET_K1OM_FORMAT
-#define ELF_TARGET_K1OM_FORMAT "elf64-k1om"
-#endif
-
#ifndef ELF_TARGET_IAMCU_FORMAT
#define ELF_TARGET_IAMCU_FORMAT "elf32-iamcu"
#endif
@@ -244,8 +236,6 @@ enum processor_type
PROCESSOR_CORE,
PROCESSOR_CORE2,
PROCESSOR_COREI7,
- PROCESSOR_L1OM,
- PROCESSOR_K1OM,
PROCESSOR_IAMCU,
PROCESSOR_K6,
PROCESSOR_ATHLON,
diff --git a/gas/config/tc-loongarch.c b/gas/config/tc-loongarch.c
index 2fe40adfc85..08203d291bd 100644
--- a/gas/config/tc-loongarch.c
+++ b/gas/config/tc-loongarch.c
@@ -25,6 +25,7 @@
#include "elf/loongarch.h"
#include "opcode/loongarch.h"
#include "obj-elf.h"
+#include "bfd/elfxx-loongarch.h"
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
@@ -122,7 +123,6 @@ enum options
struct option md_longopts[] =
{
{ "mabi", required_argument, NULL, OPTION_ABI },
- { "mfloat-abi", required_argument, NULL, OPTION_FLOAT_ABI },
{ "mfpu", required_argument, NULL, OPTION_FLOAT_ISA },
@@ -139,35 +139,36 @@ int
md_parse_option (int c, const char *arg)
{
int ret = 1;
+ char lp64[256] = "";
+ char ilp32[256] = "";
+ unsigned char *suf = (unsigned char *)arg;
+
+ lp64['s'] = lp64['S'] = EF_LOONGARCH_ABI_LP64_SOFT_FLOAT;
+ lp64['f'] = lp64['F'] = EF_LOONGARCH_ABI_LP64_SINGLE_FLOAT;
+ lp64['d'] = lp64['D'] = EF_LOONGARCH_ABI_LP64_DOUBLE_FLOAT;
+
+ ilp32['s'] = ilp32['S'] = EF_LOONGARCH_ABI_ILP32_SOFT_FLOAT;
+ ilp32['f'] = ilp32['F'] = EF_LOONGARCH_ABI_ILP32_SINGLE_FLOAT;
+ ilp32['d'] = ilp32['D'] = EF_LOONGARCH_ABI_ILP32_DOUBLE_FLOAT;
+
switch (c)
{
case OPTION_ABI:
- if (strcasecmp (arg, "lp64") == 0)
+ if (strncasecmp (arg, "lp64", 4) == 0 && lp64[suf[4]] != 0)
{
- LARCH_opts.ase_abi |= EF_LOONGARCH_ABI_LP64;
LARCH_opts.ase_ilp32 = 1;
LARCH_opts.ase_lp64 = 1;
+ LARCH_opts.ase_abi = lp64[suf[4]];
}
- else if (strcasecmp (arg, "ilp32") == 0)
+ else if (strncasecmp (arg, "ilp32", 5) == 0 && ilp32[suf[5]] != 0)
{
- LARCH_opts.ase_abi |= EF_LOONGARCH_ABI_ILP32;
+ LARCH_opts.ase_abi = ilp32[suf[5]];
LARCH_opts.ase_ilp32 = 1;
}
else
ret = 0;
break;
- case OPTION_FLOAT_ABI:
- if (strcasecmp (arg, "soft") == 0)
- LARCH_opts.ase_abi |= EF_LOONGARCH_FLOAT_ABI_SOFT;
- else if (strcasecmp (arg, "single") == 0)
- LARCH_opts.ase_abi |= EF_LOONGARCH_FLOAT_ABI_SINGLE;
- else if (strcasecmp (arg, "double") == 0)
- LARCH_opts.ase_abi |= EF_LOONGARCH_FLOAT_ABI_DOUBLE;
- else
- ret = 0;
- break;
-
case OPTION_FLOAT_ISA:
if (strcasecmp (arg, "soft") == 0)
LARCH_opts.ase_nf = 1;
@@ -214,31 +215,25 @@ static struct htab *x_htab = NULL;
void
loongarch_after_parse_args ()
{
- /* Set default ABI/ISA LP64. */
+ /* Set default ABI/ISA LP64D. */
if (!EF_LOONGARCH_IS_LP64(LARCH_opts.ase_abi)
&& !EF_LOONGARCH_IS_ILP32(LARCH_opts.ase_abi))
{
if (strcmp (default_arch, "loongarch64") == 0)
{
- LARCH_opts.ase_abi |= EF_LOONGARCH_ABI_LP64;
+ LARCH_opts.ase_abi = EF_LOONGARCH_ABI_LP64_DOUBLE_FLOAT;
LARCH_opts.ase_ilp32 = 1;
LARCH_opts.ase_lp64 = 1;
}
else if (strcmp (default_arch, "loongarch32") == 0)
{
- LARCH_opts.ase_abi |= EF_LOONGARCH_ABI_ILP32;
+ LARCH_opts.ase_abi = EF_LOONGARCH_ABI_ILP32_DOUBLE_FLOAT;
LARCH_opts.ase_ilp32 = 1;
}
else
as_bad ("unknown default architecture `%s'", default_arch);
}
- /* Set default ABI double-float. */
- if (!EF_LOONGARCH_IS_SOFT_FLOAT(LARCH_opts.ase_abi)
- && !EF_LOONGARCH_IS_SINGLE_FLOAT(LARCH_opts.ase_abi)
- && !EF_LOONGARCH_IS_DOUBLE_FLOAT(LARCH_opts.ase_abi))
- LARCH_opts.ase_abi |= EF_LOONGARCH_FLOAT_ABI_DOUBLE;
-
/* Set default ISA double-float. */
if (!LARCH_opts.ase_nf
&& !LARCH_opts.ase_sf
@@ -359,6 +354,12 @@ md_begin ()
assert (8 <= sizeof (offsetT));
}
+unsigned long
+loongarch_mach (void)
+{
+ return LARCH_opts.ase_lp64 ? bfd_mach_loongarch64 : bfd_mach_loongarch32;
+}
+
static const expressionS const_0 = { .X_op = O_constant, .X_add_number = 0 };
static const char *
@@ -875,6 +876,9 @@ append_fixp_and_insn (struct loongarch_cl_insn *ip)
bfd_reloc_code_real_type reloc_type;
struct reloc_info *reloc_info = ip->reloc_info;
size_t i;
+
+ dwarf2_emit_insn (0);
+
for (i = 0; i < ip->reloc_num; i++)
{
reloc_type = reloc_info[i].type;
@@ -891,7 +895,6 @@ append_fixp_and_insn (struct loongarch_cl_insn *ip)
as_fatal (_("Internal error: not support relax now"));
else
append_fixed_insn (ip);
- dwarf2_emit_insn (0);
}
/* Ask helper for returning a malloced c_str or NULL. */
@@ -974,7 +977,8 @@ assember_macro_helper (const char *const args[], void *context_ptr)
}
while (0);
- ret = loongarch_expand_macro (insns_buf, arg_strs, NULL, NULL);
+ ret = loongarch_expand_macro (insns_buf, arg_strs, NULL, NULL,
+ sizeof (args_buf));
}
return ret;
}
@@ -986,6 +990,7 @@ static void
loongarch_assemble_INSNs (char *str)
{
char *rest;
+ size_t len_str = strlen(str);
for (rest = str; *rest != ';' && *rest != '\0'; rest++);
if (*rest == ';')
@@ -1031,7 +1036,7 @@ loongarch_assemble_INSNs (char *str)
char *c_str = loongarch_expand_macro (the_one.insn->macro,
the_one.arg_strs,
assember_macro_helper,
- &the_one);
+ &the_one, len_str);
loongarch_assemble_INSNs (c_str);
free (c_str);
}
@@ -1068,13 +1073,29 @@ md_pcrel_from (fixS *fixP ATTRIBUTE_UNUSED)
return 0;
}
+static void fix_reloc_insn (fixS *fixP, bfd_vma reloc_val, char *buf)
+{
+ reloc_howto_type *howto;
+ insn_t insn;
+ howto = bfd_reloc_type_lookup (stdoutput, fixP->fx_r_type);
+
+ insn = bfd_getl32 (buf);
+
+ if (!loongarch_adjust_reloc_bitsfield(howto, &reloc_val))
+ as_warn_where (fixP->fx_file, fixP->fx_line, "Reloc overflow");
+
+ insn = (insn & (insn_t)howto->src_mask)
+ | ((insn & (~(insn_t)howto->dst_mask)) | reloc_val);
+
+ bfd_putl32 (insn, buf);
+}
+
void
md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
{
static int64_t stack_top;
static int last_reloc_is_sop_push_pcrel_1 = 0;
int last_reloc_is_sop_push_pcrel = last_reloc_is_sop_push_pcrel_1;
- insn_t insn;
last_reloc_is_sop_push_pcrel_1 = 0;
char *buf = fixP->fx_frag->fr_literal + fixP->fx_where;
@@ -1083,17 +1104,17 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
case BFD_RELOC_LARCH_SOP_PUSH_TLS_TPREL:
case BFD_RELOC_LARCH_SOP_PUSH_TLS_GD:
case BFD_RELOC_LARCH_SOP_PUSH_TLS_GOT:
- if (fixP->fx_addsy)
- S_SET_THREAD_LOCAL (fixP->fx_addsy);
- else
- as_bad_where (fixP->fx_file, fixP->fx_line,
- _("Relocation against a constant"));
- break;
case BFD_RELOC_LARCH_SOP_PUSH_PCREL:
case BFD_RELOC_LARCH_SOP_PUSH_PLT_PCREL:
if (fixP->fx_addsy == NULL)
as_bad_where (fixP->fx_file, fixP->fx_line,
_("Relocation against a constant"));
+
+ if (fixP->fx_r_type == BFD_RELOC_LARCH_SOP_PUSH_TLS_TPREL
+ || fixP->fx_r_type == BFD_RELOC_LARCH_SOP_PUSH_TLS_GD
+ || fixP->fx_r_type == BFD_RELOC_LARCH_SOP_PUSH_TLS_GOT)
+ S_SET_THREAD_LOCAL (fixP->fx_addsy);
+
if (fixP->fx_r_type == BFD_RELOC_LARCH_SOP_PUSH_PCREL)
{
last_reloc_is_sop_push_pcrel_1 = 1;
@@ -1106,111 +1127,18 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
break;
case BFD_RELOC_LARCH_SOP_POP_32_S_10_5:
- if (!last_reloc_is_sop_push_pcrel)
- break;
- if ((stack_top & ~(uint64_t) 0xf) != 0x0
- && (stack_top & ~(uint64_t) 0xf) != ~(uint64_t) 0xf)
- as_warn_where (fixP->fx_file, fixP->fx_line, "Reloc overflow");
- insn = bfd_getl32 (buf);
- insn = (insn & (~(uint32_t) 0x7c00)) | ((stack_top & 0x1f) << 10);
- bfd_putl32 (insn, buf);
- break;
-
- case BFD_RELOC_LARCH_SOP_POP_32_U_10_12:
- if (!last_reloc_is_sop_push_pcrel)
- break;
- if (stack_top & ~(uint64_t) 0xfff)
- as_warn_where (fixP->fx_file, fixP->fx_line, "Reloc overflow");
- insn = bfd_getl32 (buf);
- insn = (insn & (~(uint32_t) 0x3ffc00)) | ((stack_top & 0xfff) << 10);
- bfd_putl32 (insn, buf);
- break;
-
case BFD_RELOC_LARCH_SOP_POP_32_S_10_12:
- if (!last_reloc_is_sop_push_pcrel)
- break;
- if ((stack_top & ~(uint64_t) 0x7ff) != 0x0
- && (stack_top & ~(uint64_t) 0x7ff) != ~(uint64_t) 0x7ff)
- as_warn_where (fixP->fx_file, fixP->fx_line, "Reloc overflow");
- insn = bfd_getl32 (buf);
- insn = (insn & (~(uint32_t) 0x3ffc00)) | ((stack_top & 0xfff) << 10);
- bfd_putl32 (insn, buf);
- break;
-
+ case BFD_RELOC_LARCH_SOP_POP_32_U_10_12:
case BFD_RELOC_LARCH_SOP_POP_32_S_10_16:
- if (!last_reloc_is_sop_push_pcrel)
- break;
- if ((stack_top & ~(uint64_t) 0x7fff) != 0x0
- && (stack_top & ~(uint64_t) 0x7fff) != ~(uint64_t) 0x7fff)
- as_warn_where (fixP->fx_file, fixP->fx_line, "Reloc overflow");
- insn = bfd_getl32 (buf);
- insn = (insn & 0xfc0003ff) | ((stack_top & 0xffff) << 10);
- bfd_putl32 (insn, buf);
- break;
-
case BFD_RELOC_LARCH_SOP_POP_32_S_10_16_S2:
- if (!last_reloc_is_sop_push_pcrel)
- break;
- if ((stack_top & 0x3) != 0)
- as_warn_where (fixP->fx_file, fixP->fx_line, "Reloc overflow");
- stack_top >>= 2;
- if ((stack_top & ~(uint64_t) 0x7fff) != 0x0
- && (stack_top & ~(uint64_t) 0x7fff) != ~(uint64_t) 0x7fff)
- as_warn_where (fixP->fx_file, fixP->fx_line, "Reloc overflow");
- insn = bfd_getl32 (buf);
- insn = (insn & 0xfc0003ff) | ((stack_top & 0xffff) << 10);
- bfd_putl32 (insn, buf);
- break;
-
- case BFD_RELOC_LARCH_SOP_POP_32_S_0_5_10_16_S2:
- if (!last_reloc_is_sop_push_pcrel)
- break;
- if ((stack_top & 0x3) != 0)
- break;
- stack_top >>= 2;
- if ((stack_top & ~(uint64_t) 0xfffff) != 0x0
- && (stack_top & ~(uint64_t) 0xfffff) != ~(uint64_t) 0xfffff)
- as_warn_where (fixP->fx_file, fixP->fx_line, "Reloc overflow");
- insn = bfd_getl32 (buf);
- insn = ((insn & 0xfc0003e0)
- | ((stack_top & 0xffff) << 10)
- | ((stack_top & 0x1f0000) >> 16));
- bfd_putl32 (insn, buf);
- break;
-
case BFD_RELOC_LARCH_SOP_POP_32_S_5_20:
- if (!last_reloc_is_sop_push_pcrel)
- break;
- if ((stack_top & ~(uint64_t) 0x7ffff) != 0x0
- && (stack_top & ~(uint64_t) 0x7ffff) != ~(uint64_t) 0x7ffff)
- as_warn_where (fixP->fx_file, fixP->fx_line, "Reloc overflow");
- insn = bfd_getl32 (buf);
- insn = (insn & (~(uint32_t) 0x1ffffe0)) | ((stack_top & 0xfffff) << 5);
- bfd_putl32 (insn, buf);
- break;
-
+ case BFD_RELOC_LARCH_SOP_POP_32_U:
+ case BFD_RELOC_LARCH_SOP_POP_32_S_0_5_10_16_S2:
case BFD_RELOC_LARCH_SOP_POP_32_S_0_10_10_16_S2:
if (!last_reloc_is_sop_push_pcrel)
break;
- if ((stack_top & 0x3) != 0)
- as_warn_where (fixP->fx_file, fixP->fx_line, "Reloc overflow");
- stack_top >>= 2;
- if ((stack_top & ~(uint64_t) 0x1ffffff) != 0x0
- && (stack_top & ~(uint64_t) 0x1ffffff) != ~(uint64_t) 0x1ffffff)
- as_warn_where (fixP->fx_file, fixP->fx_line, "Reloc overflow");
- insn = bfd_getl32 (buf);
- insn = ((insn & 0xfc000000)
- | ((stack_top & 0xffff) << 10)
- | ((stack_top & 0x3ff0000) >> 16));
- bfd_putl32 (insn, buf);
- break;
- case BFD_RELOC_LARCH_SOP_POP_32_U:
- if (!last_reloc_is_sop_push_pcrel)
- break;
- if (stack_top & ~(uint64_t) 0xffffffff)
- as_warn_where (fixP->fx_file, fixP->fx_line, "Reloc overflow");
- bfd_putl32 (stack_top, buf);
+ fix_reloc_insn (fixP, (bfd_vma)stack_top, buf);
break;
case BFD_RELOC_64:
@@ -1378,5 +1306,5 @@ loongarch_handle_align (fragS *fragp)
void
loongarch_elf_final_processing (void)
{
- elf_elfheader (stdoutput)->e_flags |= LARCH_opts.ase_abi;
+ elf_elfheader (stdoutput)->e_flags = LARCH_opts.ase_abi;
}
diff --git a/gas/config/tc-loongarch.h b/gas/config/tc-loongarch.h
index 705d45a4517..2664da59f51 100644
--- a/gas/config/tc-loongarch.h
+++ b/gas/config/tc-loongarch.h
@@ -24,6 +24,9 @@
#define TARGET_BYTES_BIG_ENDIAN 0
#define TARGET_ARCH bfd_arch_loongarch
+#define TARGET_MACH (loongarch_mach ())
+extern unsigned long loongarch_mach (void);
+
#define WORKING_DOT_WORD 1
#define REPEAT_CONS_EXPRESSIONS
diff --git a/gas/config/tc-m68k.c b/gas/config/tc-m68k.c
index 6184f6bf91b..9afa2448482 100644
--- a/gas/config/tc-m68k.c
+++ b/gas/config/tc-m68k.c
@@ -107,25 +107,9 @@ static int m68k_rel32_from_cmdline;
displacement. */
static enum m68k_size m68k_index_width_default = SIZE_LONG;
-/* We want to warn if any text labels are misaligned. In order to get
- the right line number, we need to record the line number for each
- label. */
-struct label_line
-{
- struct label_line *next;
- symbolS *label;
- const char *file;
- unsigned int line;
- int text;
-};
-
-/* The list of labels. */
-
-static struct label_line *labels;
-
/* The current label. */
-static struct label_line *current_label;
+static struct m68k_tc_sy *current_label;
/* Pointer to list holding the opcodes sorted by name. */
static struct m68k_opcode const ** m68k_sorted_opcodes;
@@ -4697,14 +4681,11 @@ md_begin (void)
void
m68k_frob_label (symbolS *sym)
{
- struct label_line *n;
+ struct m68k_tc_sy *n;
- n = XNEW (struct label_line);
- n->next = labels;
- n->label = sym;
+ n = symbol_get_tc (sym);
n->file = as_where (&n->line);
n->text = 0;
- labels = n;
current_label = n;
dwarf2_emit_label (sym);
@@ -4733,19 +4714,13 @@ m68k_frob_symbol (symbolS *sym)
}
else if ((S_GET_VALUE (sym) & 1) != 0)
{
- struct label_line *l;
+ struct m68k_tc_sy *l;
+ l = symbol_get_tc (sym);
- for (l = labels; l != NULL; l = l->next)
- {
- if (l->label == sym)
- {
- if (l->text)
- as_warn_where (l->file, l->line,
- _("text label `%s' aligned to odd boundary"),
- S_GET_NAME (sym));
- break;
- }
- }
+ if (l->text)
+ as_warn_where (l->file, l->line,
+ _("text label `%s' aligned to odd boundary"),
+ S_GET_NAME (sym));
}
}
diff --git a/gas/config/tc-m68k.h b/gas/config/tc-m68k.h
index 5039db8f9db..4ab62b16b1a 100644
--- a/gas/config/tc-m68k.h
+++ b/gas/config/tc-m68k.h
@@ -18,6 +18,9 @@
Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
02110-1301, USA. */
+#ifndef TC_M68K_H
+#define TC_M68K_H
+
#define TC_M68K 1
struct fix;
@@ -139,3 +142,17 @@ struct broken_word;
tc_m68k_check_adjusted_broken_word ((offsetT) (new_offset), (brokw))
extern void tc_m68k_check_adjusted_broken_word (offsetT,
struct broken_word *);
+
+/* We want to warn if any text labels are misaligned. In order to get
+ the right line number, we need to record the line number for each
+ label. */
+struct m68k_tc_sy
+{
+ const char *file;
+ unsigned int line;
+ int text;
+};
+
+#define TC_SYMFIELD_TYPE struct m68k_tc_sy
+
+#endif /* TC_M68K_H */
diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c
index f632e94e020..9b895a65b63 100644
--- a/gas/config/tc-mips.c
+++ b/gas/config/tc-mips.c
@@ -19723,7 +19723,7 @@ s_mips_file (int x ATTRIBUTE_UNUSED)
if (ECOFF_DEBUGGING)
{
get_number ();
- s_app_file (0);
+ s_file (0);
}
else
{
@@ -19737,8 +19737,8 @@ s_mips_file (int x ATTRIBUTE_UNUSED)
after 3.1 in order to support DWARF-2 on MIPS. */
if (filename != NULL && ! first_file_directive)
{
- (void) new_logical_line (filename, -1);
- s_app_file_string (filename, 0);
+ new_logical_line (filename, -1);
+ s_file_string (filename);
}
first_file_directive = 1;
}
diff --git a/gas/config/tc-ppc.c b/gas/config/tc-ppc.c
index 159d3155b4c..72128af501b 100644
--- a/gas/config/tc-ppc.c
+++ b/gas/config/tc-ppc.c
@@ -85,7 +85,6 @@ static int set_target_endian = 0;
static bool reg_names_p = TARGET_REG_NAMES_P;
-static void ppc_macro (char *, const struct powerpc_macro *);
static void ppc_byte (int);
#if defined (OBJ_XCOFF) || defined (OBJ_ELF)
@@ -110,6 +109,7 @@ static void ppc_change_csect (symbolS *, offsetT);
static void ppc_file (int);
static void ppc_function (int);
static void ppc_extern (int);
+static void ppc_globl (int);
static void ppc_lglobl (int);
static void ppc_ref (int);
static void ppc_section (int);
@@ -119,6 +119,8 @@ static void ppc_rename (int);
static void ppc_toc (int);
static void ppc_xcoff_cons (int);
static void ppc_vbyte (int);
+static void ppc_weak (int);
+static void ppc_GNU_visibility (int);
#endif
#ifdef OBJ_ELF
@@ -230,6 +232,7 @@ const pseudo_typeS md_pseudo_table[] =
{ "extern", ppc_extern, 0 },
{ "file", ppc_file, 0 },
{ "function", ppc_function, 0 },
+ { "globl", ppc_globl, 0 },
{ "lglobl", ppc_lglobl, 0 },
{ "ref", ppc_ref, 0 },
{ "rename", ppc_rename, 0 },
@@ -242,6 +245,12 @@ const pseudo_typeS md_pseudo_table[] =
{ "word", ppc_xcoff_cons, 1 },
{ "short", ppc_xcoff_cons, 1 },
{ "vbyte", ppc_vbyte, 0 },
+ { "weak", ppc_weak, 0 },
+
+ /* Enable GNU syntax for symbol visibility. */
+ {"internal", ppc_GNU_visibility, SYM_V_INTERNAL},
+ {"hidden", ppc_GNU_visibility, SYM_V_HIDDEN},
+ {"protected", ppc_GNU_visibility, SYM_V_PROTECTED},
#endif
#ifdef OBJ_ELF
@@ -970,9 +979,6 @@ static unsigned int ppc_obj64 = BFD_DEFAULT_TARGET_SIZE == 64;
/* Opcode hash table. */
static htab_t ppc_hash;
-/* Macro hash table. */
-static htab_t ppc_macro_hash;
-
#ifdef OBJ_ELF
/* What type of shared library support to use. */
static enum { SHLIB_NONE, SHLIB_PIC, SHLIB_MRELOCATABLE } shlib = SHLIB_NONE;
@@ -1579,10 +1585,10 @@ insn_validate (const struct powerpc_opcode *op)
val = -1;
if ((operand->flags & PPC_OPERAND_NEGATIVE) != 0)
val = -val;
- else if ((operand->flags & PPC_OPERAND_PLUS1) != 0)
- val += 1;
mask = (*operand->insert) (0, val, ppc_cpu, &errmsg);
}
+ else if (operand->shift == (int) PPC_OPSHIFT_SH6)
+ mask = (0x1f << 11) | 0x2;
else if (operand->shift >= 0)
mask = operand->bitm << operand->shift;
else
@@ -1607,22 +1613,18 @@ insn_validate (const struct powerpc_opcode *op)
return false;
}
-/* Insert opcodes and macros into hash tables. Called at startup and
- for .machine pseudo. */
+/* Insert opcodes into hash tables. Called at startup and for
+ .machine pseudo. */
static void
ppc_setup_opcodes (void)
{
const struct powerpc_opcode *op;
const struct powerpc_opcode *op_end;
- const struct powerpc_macro *macro;
- const struct powerpc_macro *macro_end;
bool bad_insn = false;
if (ppc_hash != NULL)
htab_delete (ppc_hash);
- if (ppc_macro_hash != NULL)
- htab_delete (ppc_macro_hash);
/* Insert the opcodes into a hash table. */
ppc_hash = str_htab_create ();
@@ -1829,19 +1831,6 @@ ppc_setup_opcodes (void)
str_hash_insert (ppc_hash, op->name, op, 0);
}
- /* Insert the macros into a hash table. */
- ppc_macro_hash = str_htab_create ();
-
- macro_end = powerpc_macros + powerpc_num_macros;
- for (macro = powerpc_macros; macro < macro_end; macro++)
- if (((macro->flags & ppc_cpu) != 0
- || (ppc_cpu & PPC_OPCODE_ANY) != 0)
- && str_hash_insert (ppc_macro_hash, macro->name, macro, 0) != NULL)
- {
- as_bad (_("duplicate %s"), macro->name);
- bad_insn = true;
- }
-
if (bad_insn)
abort ();
}
@@ -3282,15 +3271,7 @@ md_assemble (char *str)
opcode = (const struct powerpc_opcode *) str_hash_find (ppc_hash, str);
if (opcode == (const struct powerpc_opcode *) NULL)
{
- const struct powerpc_macro *macro;
-
- macro = (const struct powerpc_macro *) str_hash_find (ppc_macro_hash,
- str);
- if (macro == (const struct powerpc_macro *) NULL)
- as_bad (_("unrecognized opcode: `%s'"), str);
- else
- ppc_macro (s, macro);
-
+ as_bad (_("unrecognized opcode: `%s'"), str);
ppc_clear_labels ();
return;
}
@@ -4123,85 +4104,6 @@ md_assemble (char *str)
fixP->fx_pcrel_adjust = fixups[i].opindex;
}
}
-
-/* Handle a macro. Gather all the operands, transform them as
- described by the macro, and call md_assemble recursively. All the
- operands are separated by commas; we don't accept parentheses
- around operands here. */
-
-static void
-ppc_macro (char *str, const struct powerpc_macro *macro)
-{
- char *operands[10];
- unsigned int count;
- char *s;
- unsigned int len;
- const char *format;
- unsigned int arg;
- char *send;
- char *complete;
-
- /* Gather the users operands into the operands array. */
- count = 0;
- s = str;
- while (1)
- {
- if (count >= sizeof operands / sizeof operands[0])
- break;
- operands[count++] = s;
- s = strchr (s, ',');
- if (s == (char *) NULL)
- break;
- *s++ = '\0';
- }
-
- if (count != macro->operands)
- {
- as_bad (_("wrong number of operands"));
- return;
- }
-
- /* Work out how large the string must be (the size is unbounded
- because it includes user input). */
- len = 0;
- format = macro->format;
- while (*format != '\0')
- {
- if (*format != '%')
- {
- ++len;
- ++format;
- }
- else
- {
- arg = strtol (format + 1, &send, 10);
- know (send != format && arg < count);
- len += strlen (operands[arg]);
- format = send;
- }
- }
-
- /* Put the string together. */
- complete = s = XNEWVEC (char, len + 1);
- format = macro->format;
- while (*format != '\0')
- {
- if (*format != '%')
- *s++ = *format++;
- else
- {
- arg = strtol (format + 1, &send, 10);
- strcpy (s, operands[arg]);
- s += strlen (s);
- format = send;
- }
- }
- *s = '\0';
-
- /* Assemble the constructed instruction. */
- md_assemble (complete);
- free (complete);
-}
#ifdef OBJ_ELF
/* For ELF, add support for SHT_ORDERED. */
@@ -4285,6 +4187,71 @@ ppc_byte (int ignore ATTRIBUTE_UNUSED)
to handle symbol suffixes for such symbols. */
static bool ppc_stab_symbol;
+/* Retrieve the visiblity input for pseudo-ops having ones. */
+static unsigned short
+ppc_xcoff_get_visibility (void) {
+ SKIP_WHITESPACE();
+
+ if (startswith (input_line_pointer, "exported"))
+ {
+ input_line_pointer += 8;
+ return SYM_V_EXPORTED;
+ }
+
+ if (startswith (input_line_pointer, "hidden"))
+ {
+ input_line_pointer += 6;
+ return SYM_V_HIDDEN;
+ }
+
+ if (startswith (input_line_pointer, "internal"))
+ {
+ input_line_pointer += 8;
+ return SYM_V_INTERNAL;
+ }
+
+ if (startswith (input_line_pointer, "protected"))
+ {
+ input_line_pointer += 9;
+ return SYM_V_PROTECTED;
+ }
+
+ return 0;
+}
+
+/* Retrieve visiblity using GNU syntax. */
+static void ppc_GNU_visibility (int visibility) {
+ int c;
+ char *name;
+ symbolS *symbolP;
+ coff_symbol_type *coffsym;
+
+ do
+ {
+ if ((name = read_symbol_name ()) == NULL)
+ break;
+ symbolP = symbol_find_or_make (name);
+ coffsym = coffsymbol (symbol_get_bfdsym (symbolP));
+
+ coffsym->native->u.syment.n_type &= ~SYM_V_MASK;
+ coffsym->native->u.syment.n_type |= visibility;
+
+ c = *input_line_pointer;
+ if (c == ',')
+ {
+ input_line_pointer ++;
+
+ SKIP_WHITESPACE ();
+
+ if (*input_line_pointer == '\n')
+ c = '\n';
+ }
+ }
+ while (c == ',');
+
+ demand_empty_rest_of_line ();
+}
+
/* The .comm and .lcomm pseudo-ops for XCOFF. XCOFF puts common
symbols in the .bss segment as though they were local common
symbols, and uses a different smclas. The native Aix 4.3.3 assembler
@@ -4305,6 +4272,7 @@ ppc_comm (int lcomm)
symbolS *lcomm_sym = NULL;
symbolS *sym;
char *pfrag;
+ unsigned short visibility = 0;
struct ppc_xcoff_section *section;
endc = get_symbol_name (&name);
@@ -4341,6 +4309,19 @@ ppc_comm (int lcomm)
as_warn (_("ignoring bad alignment"));
align = 2;
}
+
+ /* The fourth argument to .comm is the visibility. */
+ if (*input_line_pointer == ',')
+ {
+ input_line_pointer++;
+ visibility = ppc_xcoff_get_visibility ();
+ if (!visibility)
+ {
+ as_bad (_("Unknown visibility field in .comm"));
+ ignore_rest_of_line ();
+ return;
+ }
+ }
}
}
else
@@ -4463,6 +4444,14 @@ ppc_comm (int lcomm)
symbol_get_frag (lcomm_sym)->fr_offset += size;
}
+ if (!lcomm && visibility)
+ {
+ /* Add visibility to .comm symbol. */
+ coff_symbol_type *coffsym = coffsymbol (symbol_get_bfdsym (sym));
+ coffsym->native->u.syment.n_type &= ~SYM_V_MASK;
+ coffsym->native->u.syment.n_type |= visibility;
+ }
+
subseg_set (current_seg, current_subseg);
demand_empty_rest_of_line ();
@@ -4842,13 +4831,102 @@ static void
ppc_extern (int ignore ATTRIBUTE_UNUSED)
{
char *name;
- char endc;
+ symbolS *sym;
- endc = get_symbol_name (&name);
+ if ((name = read_symbol_name ()) == NULL)
+ return;
- (void) symbol_find_or_make (name);
+ sym = symbol_find_or_make (name);
- (void) restore_line_pointer (endc);
+ if (*input_line_pointer == ',')
+ {
+ unsigned short visibility;
+ coff_symbol_type *coffsym = coffsymbol (symbol_get_bfdsym (sym));
+
+ input_line_pointer++;
+ visibility = ppc_xcoff_get_visibility ();
+ if (!visibility)
+ {
+ as_bad (_("Unknown visibility field in .extern"));
+ ignore_rest_of_line ();
+ return;
+ }
+
+ coffsym->native->u.syment.n_type &= ~SYM_V_MASK;
+ coffsym->native->u.syment.n_type |= visibility;
+ }
+
+ demand_empty_rest_of_line ();
+}
+
+/* XCOFF semantic for .globl says that the second parameter is
+ the symbol visibility. */
+
+static void
+ppc_globl (int ignore ATTRIBUTE_UNUSED)
+{
+ char *name;
+ symbolS *sym;
+
+ if ((name = read_symbol_name ()) == NULL)
+ return;
+
+ sym = symbol_find_or_make (name);
+ S_SET_EXTERNAL (sym);
+
+ if (*input_line_pointer == ',')
+ {
+ unsigned short visibility;
+ coff_symbol_type *coffsym = coffsymbol (symbol_get_bfdsym (sym));
+
+ input_line_pointer++;
+ visibility = ppc_xcoff_get_visibility ();
+ if (!visibility)
+ {
+ as_bad (_("Unknown visibility field in .globl"));
+ ignore_rest_of_line ();
+ return;
+ }
+
+ coffsym->native->u.syment.n_type &= ~SYM_V_MASK;
+ coffsym->native->u.syment.n_type |= visibility;
+ }
+
+ demand_empty_rest_of_line ();
+}
+
+/* XCOFF semantic for .weak says that the second parameter is
+ the symbol visibility. */
+
+static void
+ppc_weak (int ignore ATTRIBUTE_UNUSED)
+{
+ char *name;
+ symbolS *sym;
+
+ if ((name = read_symbol_name ()) == NULL)
+ return;
+
+ sym = symbol_find_or_make (name);
+ S_SET_WEAK (sym);
+
+ if (*input_line_pointer == ',')
+ {
+ unsigned short visibility;
+ coff_symbol_type *coffsym = coffsymbol (symbol_get_bfdsym (sym));
+
+ input_line_pointer++;
+ visibility = ppc_xcoff_get_visibility ();
+ if (!visibility)
+ {
+ as_bad (_("Unknown visibility field in .weak"));
+ ignore_rest_of_line ();
+ return;
+ }
+
+ coffsym->native->u.syment.n_type &= ~SYM_V_MASK;
+ coffsym->native->u.syment.n_type |= visibility;
+ }
demand_empty_rest_of_line ();
}
@@ -5116,7 +5194,7 @@ ppc_file (int ignore ATTRIBUTE_UNUSED)
}
/* Use coff dot_file creation and adjust auxiliary entries. */
- c_dot_file_symbol (sfname, 0);
+ c_dot_file_symbol (sfname);
S_SET_NUMBER_AUXILIARY (symbol_rootP, auxnb);
coffsym = coffsymbol (symbol_get_bfdsym (symbol_rootP));
coffsym->native[1].u.auxent.x_file.x_ftype = XFT_FN;
@@ -5779,7 +5857,30 @@ ppc_machine (int ignore ATTRIBUTE_UNUSED)
options do not count as a new machine, instead they add
to currently selected opcodes. */
ppc_cpu_t machine_sticky = 0;
- new_cpu = ppc_parse_cpu (ppc_cpu, &machine_sticky, cpu_string);
+ /* Unfortunately, some versions of gcc emit a .machine
+ directive very near the start of the compiler's assembly
+ output file. This is bad because it overrides user -Wa
+ cpu selection. Worse, there are versions of gcc that
+ emit the *wrong* cpu, not even respecting the -mcpu given
+ to gcc. See gcc pr101393. And to compound the problem,
+ as of 20220222 gcc doesn't pass the correct cpu option to
+ gas on the command line. See gcc pr59828. Hack around
+ this by keeping sticky options for an early .machine. */
+ asection *sec;
+ for (sec = stdoutput->sections; sec != NULL; sec = sec->next)
+ {
+ segment_info_type *info = seg_info (sec);
+ /* Are the frags for this section perturbed from their
+ initial state? Even .align will count here. */
+ if (info != NULL
+ && (info->frchainP->frch_root != info->frchainP->frch_last
+ || info->frchainP->frch_root->fr_type != rs_fill
+ || info->frchainP->frch_root->fr_fix != 0))
+ break;
+ }
+ new_cpu = ppc_parse_cpu (ppc_cpu,
+ sec == NULL ? &sticky : &machine_sticky,
+ cpu_string);
if (new_cpu != 0)
ppc_cpu = new_cpu;
else
diff --git a/gas/config/tc-riscv.c b/gas/config/tc-riscv.c
index 390aaf1710b..fb3fc649802 100644
--- a/gas/config/tc-riscv.c
+++ b/gas/config/tc-riscv.c
@@ -89,6 +89,20 @@ struct riscv_csr_extra
struct riscv_csr_extra *next;
};
+/* This structure contains information about errors that occur within the
+ riscv_ip function */
+struct riscv_ip_error
+{
+ /* General error message */
+ const char* msg;
+
+ /* Statement that caused the error */
+ char* statement;
+
+ /* Missing extension that needs to be enabled */
+ const char* missing_ext;
+};
+
#ifndef DEFAULT_ARCH
#define DEFAULT_ARCH "riscv64"
#endif
@@ -882,38 +896,44 @@ riscv_csr_address (const char *csr_name,
{
struct riscv_csr_extra *saved_entry = entry;
enum riscv_csr_class csr_class = entry->csr_class;
- bool need_check_version = true;
- bool result = true;
+ bool need_check_version = false;
+ bool rv32_only = true;
+ const char* extension = NULL;
switch (csr_class)
{
- case CSR_CLASS_I:
- result = riscv_subset_supports (&riscv_rps_as, "i");
- break;
case CSR_CLASS_I_32:
- result = (xlen == 32 && riscv_subset_supports (&riscv_rps_as, "i"));
+ rv32_only = (xlen == 32);
+ /* Fall through. */
+ case CSR_CLASS_I:
+ need_check_version = true;
+ extension = "i";
break;
case CSR_CLASS_F:
- result = riscv_subset_supports (&riscv_rps_as, "f");
- need_check_version = false;
+ extension = "f";
break;
case CSR_CLASS_ZKR:
- result = riscv_subset_supports (&riscv_rps_as, "zkr");
- need_check_version = false;
+ extension = "zkr";
break;
case CSR_CLASS_V:
- result = riscv_subset_supports (&riscv_rps_as, "v");
- need_check_version = false;
+ extension = "v";
break;
case CSR_CLASS_DEBUG:
- need_check_version = false;
break;
default:
as_bad (_("internal: bad RISC-V CSR class (0x%x)"), csr_class);
}
- if (riscv_opts.csr_check && !result)
- as_warn (_("invalid CSR `%s' for the current ISA"), csr_name);
+ if (riscv_opts.csr_check)
+ {
+ if (!rv32_only)
+ as_warn (_("invalid CSR `%s', needs rv32i extension"), csr_name);
+
+ if (extension != NULL
+ && !riscv_subset_supports (&riscv_rps_as, extension))
+ as_warn (_("invalid CSR `%s', needs `%s' extension"),
+ csr_name, extension);
+ }
while (entry != NULL)
{
@@ -1159,6 +1179,7 @@ validate_riscv_insn (const struct riscv_opcode *opc, int length)
case 'j': used_bits |= ENCODE_ITYPE_IMM (-1U); break;
case 'a': used_bits |= ENCODE_JTYPE_IMM (-1U); break;
case 'p': used_bits |= ENCODE_BTYPE_IMM (-1U); break;
+ case 'f': /* Fall through. */
case 'q': used_bits |= ENCODE_STYPE_IMM (-1U); break;
case 'u': used_bits |= ENCODE_UTYPE_IMM (-1U); break;
case 'z': break; /* Zero immediate. */
@@ -2215,7 +2236,7 @@ riscv_is_priv_insn (insn_t insn)
side effect, it sets the global variable imm_reloc to the type of
relocation to do if one of the operands is an address expression. */
-static const char *
+static struct riscv_ip_error
riscv_ip (char *str, struct riscv_cl_insn *ip, expressionS *imm_expr,
bfd_reloc_code_real_type *imm_reloc, htab_t hash)
{
@@ -2228,7 +2249,10 @@ riscv_ip (char *str, struct riscv_cl_insn *ip, expressionS *imm_expr,
unsigned int regno;
int argnum;
const struct percent_op_match *p;
- const char *error = "unrecognized opcode";
+ struct riscv_ip_error error;
+ error.msg = "unrecognized opcode";
+ error.statement = str;
+ error.missing_ext = NULL;
/* Indicate we are assembling instruction with CSR. */
bool insn_with_csr = false;
@@ -2251,10 +2275,15 @@ riscv_ip (char *str, struct riscv_cl_insn *ip, expressionS *imm_expr,
continue;
if (!riscv_multi_subset_supports (&riscv_rps_as, insn->insn_class))
- continue;
+ {
+ error.missing_ext = riscv_multi_subset_supports_ext (&riscv_rps_as,
+ insn->insn_class);
+ continue;
+ }
/* Reset error message of the previous round. */
- error = _("illegal operands");
+ error.msg = _("illegal operands");
+ error.missing_ext = NULL;
create_insn (ip, insn);
argnum = 1;
@@ -2304,14 +2333,14 @@ riscv_ip (char *str, struct riscv_cl_insn *ip, expressionS *imm_expr,
&& riscv_subset_supports (&riscv_rps_as, "zve32x")
&& !riscv_subset_supports (&riscv_rps_as, "zve64x"))
{
- error = _("illegal opcode for zve32x");
+ error.msg = _("illegal opcode for zve32x");
break;
}
}
if (*asarg != '\0')
break;
/* Successful assembly. */
- error = NULL;
+ error.msg = NULL;
insn_with_csr = false;
goto out;
@@ -3163,6 +3192,23 @@ riscv_ip (char *str, struct riscv_cl_insn *ip, expressionS *imm_expr,
imm_expr->X_op = O_absent;
continue;
+ case 'f': /* Prefetch offset, pseudo S-type but lower 5-bits zero. */
+ if (riscv_handle_implicit_zero_offset (imm_expr, asarg))
+ continue;
+ my_getExpression (imm_expr, asarg);
+ check_absolute_expr (ip, imm_expr, false);
+ if (((unsigned) (imm_expr->X_add_number) & 0x1fU)
+ || imm_expr->X_add_number >= (signed) RISCV_IMM_REACH / 2
+ || imm_expr->X_add_number < -(signed) RISCV_IMM_REACH / 2)
+ as_bad (_("improper prefetch offset (%ld)"),
+ (long) imm_expr->X_add_number);
+ ip->insn_opcode |=
+ ENCODE_STYPE_IMM ((unsigned) (imm_expr->X_add_number) &
+ ~ 0x1fU);
+ imm_expr->X_op = O_absent;
+ asarg = expr_end;
+ continue;
+
default:
unknown_riscv_ip_operand:
as_fatal (_("internal: unknown argument type `%s'"),
@@ -3220,7 +3266,7 @@ riscv_ip_hardcode (char *str,
insn->match = values[num - 1];
create_insn (ip, insn);
unsigned int bytes = riscv_insn_length (insn->match);
- if (values[num - 1] >> (8 * bytes) != 0
+ if ((bytes < sizeof(values[0]) && values[num - 1] >> (8 * bytes) != 0)
|| (num == 2 && values[0] != bytes))
return _("value conflicts with instruction length");
@@ -3247,11 +3293,16 @@ md_assemble (char *str)
riscv_mapping_state (MAP_INSN, 0);
- const char *error = riscv_ip (str, &insn, &imm_expr, &imm_reloc, op_hash);
+ const struct riscv_ip_error error = riscv_ip (str, &insn, &imm_expr,
+ &imm_reloc, op_hash);
- if (error)
+ if (error.msg)
{
- as_bad ("%s `%s'", error, str);
+ if (error.missing_ext)
+ as_bad ("%s `%s', extension `%s' required", error.msg,
+ error.statement, error.missing_ext);
+ else
+ as_bad ("%s `%s'", error.msg, error.statement);
return;
}
@@ -3913,6 +3964,12 @@ riscv_frag_align_code (int n)
riscv_mapping_state (MAP_INSN, worst_case_bytes);
+ /* We need to start a new frag after the alignment which may be removed by
+ the linker, to prevent the assembler from computing static offsets.
+ This is necessary to get correct EH info. */
+ frag_wane (frag_now);
+ frag_new (0);
+
return true;
}
@@ -4254,17 +4311,23 @@ s_riscv_insn (int x ATTRIBUTE_UNUSED)
riscv_mapping_state (MAP_INSN, 0);
- const char *error = riscv_ip (str, &insn, &imm_expr,
+ struct riscv_ip_error error = riscv_ip (str, &insn, &imm_expr,
&imm_reloc, insn_type_hash);
- if (error)
+ if (error.msg)
{
char *save_in = input_line_pointer;
- error = riscv_ip_hardcode (str, &insn, &imm_expr, error);
+ error.msg = riscv_ip_hardcode (str, &insn, &imm_expr, error.msg);
input_line_pointer = save_in;
}
- if (error)
- as_bad ("%s `%s'", error, str);
+ if (error.msg)
+ {
+ if (error.missing_ext)
+ as_bad ("%s `%s', extension `%s' required", error.msg, error.statement,
+ error.missing_ext);
+ else
+ as_bad ("%s `%s'", error.msg, error.statement);
+ }
else
{
gas_assert (insn.insn_mo->pinfo != INSN_MACRO);
@@ -4477,19 +4540,18 @@ riscv_elf_copy_symbol_attributes (symbolS *dest, symbolS *src)
{
struct elf_obj_sy *srcelf = symbol_get_obj (src);
struct elf_obj_sy *destelf = symbol_get_obj (dest);
- if (srcelf->size)
+ /* If size is unset, copy size from src. Because we don't track whether
+ .size has been used, we can't differentiate .size dest, 0 from the case
+ where dest's size is unset. */
+ if (!destelf->size && S_GET_SIZE (dest) == 0)
{
- if (destelf->size == NULL)
- destelf->size = XNEW (expressionS);
- *destelf->size = *srcelf->size;
- }
- else
- {
- if (destelf->size != NULL)
- free (destelf->size);
- destelf->size = NULL;
+ if (srcelf->size)
+ {
+ destelf->size = XNEW (expressionS);
+ *destelf->size = *srcelf->size;
+ }
+ S_SET_SIZE (dest, S_GET_SIZE (src));
}
- S_SET_SIZE (dest, S_GET_SIZE (src));
}
/* RISC-V pseudo-ops table. */
diff --git a/gas/config/tc-s390.c b/gas/config/tc-s390.c
index f192a786f32..4af635beac3 100644
--- a/gas/config/tc-s390.c
+++ b/gas/config/tc-s390.c
@@ -293,7 +293,7 @@ s390_parse_cpu (const char *arg,
S390_INSTR_FLAG_HTM | S390_INSTR_FLAG_VX },
{ STRING_COMMA_LEN ("z15"), STRING_COMMA_LEN ("arch13"),
S390_INSTR_FLAG_HTM | S390_INSTR_FLAG_VX },
- { STRING_COMMA_LEN (""), STRING_COMMA_LEN ("arch14"),
+ { STRING_COMMA_LEN ("z16"), STRING_COMMA_LEN ("arch14"),
S390_INSTR_FLAG_HTM | S390_INSTR_FLAG_VX }
};
static struct
diff --git a/gas/config/tc-tic54x.c b/gas/config/tc-tic54x.c
index 60704770ba9..dc8cc1d8cbf 100644
--- a/gas/config/tc-tic54x.c
+++ b/gas/config/tc-tic54x.c
@@ -4966,7 +4966,7 @@ tic54x_adjust_symtab (void)
{
unsigned lineno;
const char * filename = as_where (&lineno);
- c_dot_file_symbol (filename, 0);
+ c_dot_file_symbol (filename);
}
}
diff --git a/gas/config/tc-z80.c b/gas/config/tc-z80.c
index 522e909bbc6..81fbfe3b0ae 100644
--- a/gas/config/tc-z80.c
+++ b/gas/config/tc-z80.c
@@ -1134,7 +1134,15 @@ emit_data_val (expressionS * val, int size)
if (val->X_op == O_constant)
{
int i;
- if (is_overflow (val->X_add_number, size*8))
+
+ /* PR 28791:
+ Check for overflow, but ignore values that were generated by bit
+ manipulation operators (eg ~0xe6 and -7). This does mean that
+ manipluated overlarge values will not be reported (eg ~0x1234),
+ but it does help to maintain compatibility with earlier versions
+ of the assembler. */
+ if (! val->X_extrabit
+ && is_overflow (val->X_add_number, size*8))
as_warn ( _("%d-bit overflow (%+ld)"), size*8, val->X_add_number);
for (i = 0; i < size; ++i)
p[i] = (char)(val->X_add_number >> (i*8));
diff --git a/gas/config/tc-z8k.c b/gas/config/tc-z8k.c
index 0c255769070..5fef6575625 100644
--- a/gas/config/tc-z8k.c
+++ b/gas/config/tc-z8k.c
@@ -116,7 +116,7 @@ const pseudo_typeS md_pseudo_table[] = {
{"segm" , s_segm , 1},
{"unsegm" , s_segm , 0},
{"unseg" , s_segm , 0},
- {"name" , s_app_file , 0},
+ {"name" , s_file , 0},
{"global" , s_globl , 0},
{"wval" , cons , 2},
{"lval" , cons , 4},
diff --git a/gas/configure b/gas/configure
index 12ca81bb16b..1fae77adea0 100755
--- a/gas/configure
+++ b/gas/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for gas 2.37.50.
+# Generated by GNU Autoconf 2.69 for gas 2.38.50.
#
#
# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
@@ -587,8 +587,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='gas'
PACKAGE_TARNAME='gas'
-PACKAGE_VERSION='2.37.50'
-PACKAGE_STRING='gas 2.37.50'
+PACKAGE_VERSION='2.38.50'
+PACKAGE_STRING='gas 2.38.50'
PACKAGE_BUGREPORT=''
PACKAGE_URL=''
@@ -1369,7 +1369,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 gas 2.37.50 to adapt to many kinds of systems.
+\`configure' configures gas 2.38.50 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1440,7 +1440,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of gas 2.37.50:";;
+ short | recursive ) echo "Configuration of gas 2.38.50:";;
esac
cat <<\_ACEOF
@@ -1576,7 +1576,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-gas configure 2.37.50
+gas configure 2.38.50
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1987,7 +1987,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 gas $as_me 2.37.50, which was
+It was created by gas $as_me 2.38.50, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -2966,7 +2966,7 @@ fi
# Define the identity of the package.
PACKAGE='gas'
- VERSION='2.37.50'
+ VERSION='2.38.50'
cat >>confdefs.h <<_ACEOF
@@ -4988,25 +4988,31 @@ else
lt_nm_to_check="$lt_nm_to_check nm"
fi
fi
- for lt_tmp_nm in $lt_nm_to_check; do
+ for lt_tmp_nm in "$lt_nm_to_check"; do
lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
IFS="$lt_save_ifs"
test -z "$ac_dir" && ac_dir=.
- case "$lt_tmp_nm" in
+ # Strip out any user-provided options from the nm to test twice,
+ # the first time to test to see if nm (rather than its options) has
+ # an explicit path, the second time to yield a file which can be
+ # nm'ed itself.
+ tmp_nm_path="`$ECHO "$lt_tmp_nm" | sed 's, -.*$,,'`"
+ case "$tmp_nm_path" in
*/*|*\\*) tmp_nm="$lt_tmp_nm";;
*) tmp_nm="$ac_dir/$lt_tmp_nm";;
esac
- if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+ tmp_nm_to_nm="`$ECHO "$tmp_nm" | sed 's, -.*$,,'`"
+ if test -f "$tmp_nm_to_nm" || test -f "$tmp_nm_to_nm$ac_exeext" ; then
# Check to see if the nm accepts a BSD-compat flag.
# Adding the `sed 1q' prevents false positives on HP-UX, which says:
# nm: unknown option "B" ignored
- case `"$tmp_nm" -B "$tmp_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
+ case `"$tmp_nm" -B "$tmp_nm_to_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
*$tmp_nm*) lt_cv_path_NM="$tmp_nm -B"
break
;;
*)
- case `"$tmp_nm" -p "$tmp_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
+ case `"$tmp_nm" -p "$tmp_nm_to_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
*$tmp_nm*)
lt_cv_path_NM="$tmp_nm -p"
break
@@ -10696,7 +10702,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 10699 "configure"
+#line 10705 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -10802,7 +10808,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 10805 "configure"
+#line 10811 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -14609,7 +14615,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 gas $as_me 2.37.50, which was
+This file was extended by gas $as_me 2.38.50, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -14675,7 +14681,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-gas config.status 2.37.50
+gas config.status 2.38.50
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
diff --git a/gas/doc/as.texi b/gas/doc/as.texi
index 1a13b5dda42..09b0ca5f565 100644
--- a/gas/doc/as.texi
+++ b/gas/doc/as.texi
@@ -1897,8 +1897,8 @@ Specify which s390 processor variant is the target, @samp{g5} (or
@samp{arch3}), @samp{g6}, @samp{z900} (or @samp{arch5}), @samp{z990} (or
@samp{arch6}), @samp{z9-109}, @samp{z9-ec} (or @samp{arch7}), @samp{z10} (or
@samp{arch8}), @samp{z196} (or @samp{arch9}), @samp{zEC12} (or @samp{arch10}),
-@samp{z13} (or @samp{arch11}), @samp{z14} (or @samp{arch12}), or @samp{z15}
-(or @samp{arch13}).
+@samp{z13} (or @samp{arch11}), @samp{z14} (or @samp{arch12}), @samp{z15}
+(or @samp{arch13}), or @samp{z16} (or @samp{arch14}).
@item -mregnames
@itemx -mno-regnames
Allow or disallow symbolic names for registers.
@@ -4355,7 +4355,7 @@ You may not subtract arguments from different sections.
@item <=
@dfn{Is Less Than Or Equal To}
-The comparison operators can be used as infix operators. A true results has a
+The comparison operators can be used as infix operators. A true result has a
value of -1 whereas a false result has a value of 0. Note, these operators
perform signed comparisons.
@end table
@@ -6186,6 +6186,27 @@ Note: this problem of correctly identifying string parameters to pseudo ops
also applies to the identifiers used in @code{.irp} (@pxref{Irp})
and @code{.irpc} (@pxref{Irpc}) as well.
+Another issue can occur with the actual arguments passed during macro
+invocation: Multiple arguments can be separated by blanks or commas. To have
+arguments actually contain blanks or commas (or potentially other non-alpha-
+numeric characters), individual arguments will need to be enclosed in either
+parentheses @code{()}, square brackets @code{[]}, or double quote @code{"}
+characters. The latter may be the only viable option in certain situations,
+as only double quotes are actually stripped while establishing arguments. It
+may be important to be aware of two escaping models used when processing such
+quoted argument strings: For one two adjacent double quotes represent a single
+double quote in the resulting argument, going along the lines of the stripping
+of the enclosing quotes. But then double quotes can also be escaped by a
+backslash @code{\}, but this backslash will not be retained in the resulting
+actual argument as then seen / used while expanding the macro.
+
+As a consequence to the first of these escaping mechanisms two string literals
+intended to be representing separate macro arguments need to be separated by
+white space (or, better yet, by a comma). To state it differently, such
+adjacent string literals - even if separated only by a blank - will not be
+concatenated when determining macro arguments, even if they're only separated
+by white space. This is unlike certain other pseudo ops, e.g. @code{.ascii}.
+
@item .endm
@cindex @code{endm} directive
Mark the end of a macro definition.
diff --git a/gas/doc/c-i386.texi b/gas/doc/c-i386.texi
index faefb396cc2..5262af2023b 100644
--- a/gas/doc/c-i386.texi
+++ b/gas/doc/c-i386.texi
@@ -110,8 +110,6 @@ processor names are recognized:
@code{core},
@code{core2},
@code{corei7},
-@code{l1om},
-@code{k1om},
@code{iamcu},
@code{k6},
@code{k6_2},
@@ -1510,7 +1508,7 @@ supported on the CPU specified. The choices for @var{cpu_type} are:
@item @samp{i486} @tab @samp{i586} @tab @samp{i686} @tab @samp{pentium}
@item @samp{pentiumpro} @tab @samp{pentiumii} @tab @samp{pentiumiii} @tab @samp{pentium4}
@item @samp{prescott} @tab @samp{nocona} @tab @samp{core} @tab @samp{core2}
-@item @samp{corei7} @tab @samp{l1om} @tab @samp{k1om} @tab @samp{iamcu}
+@item @samp{corei7} @tab @samp{iamcu}
@item @samp{k6} @tab @samp{k6_2} @tab @samp{athlon} @tab @samp{k8}
@item @samp{amdfam10} @tab @samp{bdver1} @tab @samp{bdver2} @tab @samp{bdver3}
@item @samp{bdver4} @tab @samp{znver1} @tab @samp{znver2} @tab @samp{znver3}
diff --git a/gas/doc/c-riscv.texi b/gas/doc/c-riscv.texi
index be9c1148355..21d867e9cf0 100644
--- a/gas/doc/c-riscv.texi
+++ b/gas/doc/c-riscv.texi
@@ -206,7 +206,6 @@ know what you're doing, this should only be at the top of a file.
Enables or disables relaxation. The RISC-V assembler and linker
opportunistically relax some code sequences, but sometimes this behavior is not
desirable.
-@end table
@item csr-check
@itemx no-csr-check
@@ -224,6 +223,7 @@ sometimes. Besides, @samp{.option arch, -i} is illegal, since we cannot
remove the base i extension anytime. If you want to reset the whole ISA
string, you can also use @samp{.option arch, =rv32imac} to overwrite the
previous settings.
+@end table
@cindex INSN directives
@item .insn @var{type}, @var{operand} [,...,@var{operand_n}]
diff --git a/gas/doc/c-s390.texi b/gas/doc/c-s390.texi
index edd9737066d..c51b5a14ec8 100644
--- a/gas/doc/c-s390.texi
+++ b/gas/doc/c-s390.texi
@@ -18,7 +18,7 @@ and eleven chip levels. The architecture modes are the Enterprise System
Architecture (ESA) and the newer z/Architecture mode. The chip levels
are g5 (or arch3), g6, z900 (or arch5), z990 (or arch6), z9-109, z9-ec
(or arch7), z10 (or arch8), z196 (or arch9), zEC12 (or arch10), z13
-(or arch11), z14 (or arch12), z15 (or arch13), or arch14.
+(or arch11), z14 (or arch12), z15 (or arch13), or z16 (or arch14).
@menu
* s390 Options:: Command-line Options.
@@ -72,7 +72,7 @@ are recognized:
@code{z13} (or @code{arch11}),
@code{z14} (or @code{arch12}),
@code{z15} (or @code{arch13}), and
-@code{arch14}.
+@code{z16} (or @code{arch14}).
Assembling an instruction that is not supported on the target
processor results in an error message.
diff --git a/gas/doc/local.mk b/gas/doc/local.mk
index c2de441257c..ac205cf08a2 100644
--- a/gas/doc/local.mk
+++ b/gas/doc/local.mk
@@ -101,10 +101,6 @@ CPU_DOCS = \
%D%/c-z80.texi \
%D%/c-z8k.texi
-# We want install to imply install-info as per GNU standards, despite the
-# cygnus option.
-install-data-local: install-info
-
# This one isn't ready for prime time yet. Not even a little bit.
noinst_TEXINFOS = %D%/internals.texi
diff --git a/gas/dwarf2dbg.c b/gas/dwarf2dbg.c
index 7269c4cdf87..185d57c253f 100644
--- a/gas/dwarf2dbg.c
+++ b/gas/dwarf2dbg.c
@@ -402,18 +402,27 @@ set_or_check_view (struct line_entry *e, struct line_entry *p,
if (viewx.X_op != O_constant || viewx.X_add_number)
{
expressionS incv;
+ expressionS *p_view;
if (!p->loc.u.view)
- {
- p->loc.u.view = symbol_temp_make ();
- gas_assert (!S_IS_DEFINED (p->loc.u.view));
- }
+ p->loc.u.view = symbol_temp_make ();
memset (&incv, 0, sizeof (incv));
incv.X_unsigned = 1;
incv.X_op = O_symbol;
incv.X_add_symbol = p->loc.u.view;
incv.X_add_number = 1;
+ p_view = symbol_get_value_expression (p->loc.u.view);
+ if (p_view->X_op == O_constant || p_view->X_op == O_symbol)
+ {
+ /* If we can, constant fold increments so that a chain of
+ expressions v + 1 + 1 ... + 1 is not created.
+ resolve_expression isn't ideal for this purpose. The
+ base v might not be resolvable until later. */
+ incv.X_op = p_view->X_op;
+ incv.X_add_symbol = p_view->X_add_symbol;
+ incv.X_add_number = p_view->X_add_number + 1;
+ }
if (viewx.X_op == O_constant)
{
@@ -1119,7 +1128,7 @@ dwarf2_emit_label (symbolS *label)
}
/* Handle two forms of .file directive:
- - Pass .file "source.c" to s_app_file
+ - Pass .file "source.c" to s_file
- Handle .file 1 "source.c" by adding an entry to the DWARF-2 file table
If an entry is added to the file table, return a pointer to the filename. */
@@ -1137,7 +1146,7 @@ dwarf2_directive_filename (void)
SKIP_WHITESPACE ();
if (*input_line_pointer == '"')
{
- s_app_file (0);
+ s_file (0);
return NULL;
}
@@ -2128,7 +2137,7 @@ out_dir_and_file_list (segT line_seg, int sizeof_offset)
bool emit_timestamps = true;
bool emit_filesize = true;
segT line_str_seg = NULL;
- symbolS *line_strp;
+ symbolS *line_strp, *file0_strp = NULL;
/* Output the Directory Table. */
if (DWARF2_LINE_VERSION >= 5)
@@ -2161,18 +2170,10 @@ out_dir_and_file_list (segT line_seg, int sizeof_offset)
line_str_seg->entsize = 1;
/* DWARF5 uses slot zero, but that is only set explicitly
- using a .file 0 directive. If that isn't used, but dir
- one is used, then use that as main file directory.
- Otherwise use pwd as main file directory. */
- if (dirs_in_use > 0 && dirs != NULL && dirs[0] != NULL)
+ using a .file 0 directive. Otherwise use pwd as main file
+ directory. */
+ if (dirs_in_use > 0 && dirs[0] != NULL)
dir = remap_debug_filename (dirs[0]);
- else if (dirs_in_use > 1
- && dirs != NULL
- && dirs[1] != NULL
- /* DWARF-5 directory tables expect dir[0] to be the same as
- DW_AT_comp_dir, which is the same as pwd. */
- && dwarf_level < 5)
- dir = remap_debug_filename (dirs[1]);
else
dir = remap_debug_filename (getpwd ());
@@ -2270,11 +2271,15 @@ out_dir_and_file_list (segT line_seg, int sizeof_offset)
if (files[i].filename == NULL)
{
- /* Prevent a crash later, particularly for file 1. DWARF5
- uses slot zero, but that is only set explicitly using a
- .file 0 directive. If that isn't used, but file 1 is,
- then use that as main file name. */
- if (DWARF2_LINE_VERSION >= 5 && i == 0 && files_in_use >= 1 && files[0].filename == NULL)
+ if (DWARF2_LINE_VERSION < 5 || i != 0)
+ {
+ as_bad (_("unassigned file number %ld"), (long) i);
+ continue;
+ }
+ /* DWARF5 uses slot zero, but that is only set explicitly using
+ a .file 0 directive. If that isn't used, but file 1 is, then
+ use that as main file name. */
+ if (files_in_use > 1 && files[1].filename != NULL)
{
files[0].filename = files[1].filename;
files[0].dir = files[1].dir;
@@ -2283,12 +2288,7 @@ out_dir_and_file_list (segT line_seg, int sizeof_offset)
files[0].md5[j] = files[1].md5[j];
}
else
- files[i].filename = "";
- if (DWARF2_LINE_VERSION < 5 || i != 0)
- {
- as_bad (_("unassigned file number %ld"), (long) i);
- continue;
- }
+ files[0].filename = "";
}
fullfilename = DWARF2_FILE_NAME (files[i].filename,
@@ -2301,9 +2301,17 @@ out_dir_and_file_list (segT line_seg, int sizeof_offset)
}
else
{
- line_strp = add_line_strp (line_str_seg, fullfilename);
+ if (!file0_strp)
+ line_strp = add_line_strp (line_str_seg, fullfilename);
+ else
+ line_strp = file0_strp;
subseg_set (line_seg, 0);
TC_DWARF2_EMIT_OFFSET (line_strp, sizeof_offset);
+ if (i == 0 && files_in_use > 1
+ && files[0].filename == files[1].filename)
+ file0_strp = line_strp;
+ else
+ file0_strp = NULL;
}
/* Directory number. */
@@ -2666,14 +2674,55 @@ out_debug_aranges (segT aranges_seg, segT info_seg)
static void
out_debug_abbrev (segT abbrev_seg,
segT info_seg ATTRIBUTE_UNUSED,
- segT line_seg ATTRIBUTE_UNUSED)
+ segT line_seg ATTRIBUTE_UNUSED,
+ unsigned char *func_formP)
{
int secoff_form;
+ bool have_efunc = false, have_lfunc = false;
+
+ /* Check the symbol table for function symbols which also have their size
+ specified. */
+ if (symbol_rootP)
+ {
+ symbolS *symp;
+
+ for (symp = symbol_rootP; symp; symp = symbol_next (symp))
+ {
+ /* A warning construct is a warning symbol followed by the
+ symbol warned about. Skip this and the following symbol. */
+ if (symbol_get_bfdsym (symp)->flags & BSF_WARNING)
+ {
+ symp = symbol_next (symp);
+ if (!symp)
+ break;
+ continue;
+ }
+
+ if (!S_IS_DEFINED (symp) || !S_IS_FUNCTION (symp))
+ continue;
+
+#if defined (OBJ_ELF) /* || defined (OBJ_MAYBE_ELF) */
+ if (S_GET_SIZE (symp) == 0)
+ {
+ if (!IS_ELF || symbol_get_obj (symp)->size == NULL)
+ continue;
+ }
+#else
+ continue;
+#endif
+
+ if (S_IS_EXTERNAL (symp))
+ have_efunc = true;
+ else
+ have_lfunc = true;
+ }
+ }
+
subseg_set (abbrev_seg, 0);
out_uleb128 (1);
out_uleb128 (DW_TAG_compile_unit);
- out_byte (DW_CHILDREN_no);
+ out_byte (have_efunc || have_lfunc ? DW_CHILDREN_yes : DW_CHILDREN_no);
if (DWARF2_VERSION < 4)
{
if (DWARF2_FORMAT (line_seg) == dwarf2_format_32bit)
@@ -2700,6 +2749,29 @@ out_debug_abbrev (segT abbrev_seg,
out_abbrev (DW_AT_language, DW_FORM_data2);
out_abbrev (0, 0);
+ if (have_efunc || have_lfunc)
+ {
+ out_uleb128 (2);
+ out_uleb128 (DW_TAG_subprogram);
+ out_byte (DW_CHILDREN_no);
+ out_abbrev (DW_AT_name, DW_FORM_strp);
+ if (have_efunc)
+ {
+ if (have_lfunc || DWARF2_VERSION < 4)
+ *func_formP = DW_FORM_flag;
+ else
+ *func_formP = DW_FORM_flag_present;
+ out_abbrev (DW_AT_external, *func_formP);
+ }
+ else
+ /* Any non-zero value other than DW_FORM_flag will do. */
+ *func_formP = DW_FORM_block;
+ out_abbrev (DW_AT_low_pc, DW_FORM_addr);
+ out_abbrev (DW_AT_high_pc,
+ DWARF2_VERSION < 4 ? DW_FORM_addr : DW_FORM_udata);
+ out_abbrev (0, 0);
+ }
+
/* Terminate the abbreviations for this compilation unit. */
out_byte (0);
}
@@ -2707,9 +2779,10 @@ out_debug_abbrev (segT abbrev_seg,
/* Emit a description of this compilation unit for .debug_info. */
static void
-out_debug_info (segT info_seg, segT abbrev_seg, segT line_seg,
+out_debug_info (segT info_seg, segT abbrev_seg, segT line_seg, segT str_seg,
symbolS *ranges_sym, symbolS *name_sym,
- symbolS *comp_dir_sym, symbolS *producer_sym)
+ symbolS *comp_dir_sym, symbolS *producer_sym,
+ unsigned char func_form)
{
expressionS exp;
symbolS *info_end;
@@ -2791,6 +2864,81 @@ out_debug_info (segT info_seg, segT abbrev_seg, segT line_seg,
dwarf2 draft has no standard code for assembler. */
out_two (DW_LANG_Mips_Assembler);
+ if (func_form)
+ {
+ symbolS *symp;
+
+ for (symp = symbol_rootP; symp; symp = symbol_next (symp))
+ {
+ const char *name;
+ size_t len;
+
+ /* Skip warning constructs (see above). */
+ if (symbol_get_bfdsym (symp)->flags & BSF_WARNING)
+ {
+ symp = symbol_next (symp);
+ if (!symp)
+ break;
+ continue;
+ }
+
+ if (!S_IS_DEFINED (symp) || !S_IS_FUNCTION (symp))
+ continue;
+
+ subseg_set (str_seg, 0);
+ name_sym = symbol_temp_new_now_octets ();
+ name = S_GET_NAME (symp);
+ len = strlen (name) + 1;
+ memcpy (frag_more (len), name, len);
+
+ subseg_set (info_seg, 0);
+
+ /* DW_TAG_subprogram DIE abbrev */
+ out_uleb128 (2);
+
+ /* DW_AT_name */
+ TC_DWARF2_EMIT_OFFSET (name_sym, sizeof_offset);
+
+ /* DW_AT_external. */
+ if (func_form == DW_FORM_flag)
+ out_byte (S_IS_EXTERNAL (symp));
+
+ /* DW_AT_low_pc */
+ exp.X_op = O_symbol;
+ exp.X_add_symbol = symp;
+ exp.X_add_number = 0;
+ emit_expr (&exp, sizeof_address);
+
+ /* DW_AT_high_pc */
+ exp.X_op = O_constant;
+#if defined (OBJ_ELF) /* || defined (OBJ_MAYBE_ELF) */
+ exp.X_add_number = S_GET_SIZE (symp);
+ if (exp.X_add_number == 0 && IS_ELF
+ && symbol_get_obj (symp)->size != NULL)
+ {
+ exp.X_op = O_add;
+ exp.X_op_symbol = make_expr_symbol (symbol_get_obj (symp)->size);
+ }
+#else
+ exp.X_add_number = 0;
+#endif
+ if (DWARF2_VERSION < 4)
+ {
+ if (exp.X_op == O_constant)
+ exp.X_op = O_symbol;
+ exp.X_add_symbol = symp;
+ emit_expr (&exp, sizeof_address);
+ }
+ else if (exp.X_op == O_constant)
+ out_uleb128 (exp.X_add_number);
+ else
+ emit_leb128_expr (symbol_get_value_expression (exp.X_op_symbol), 0);
+ }
+
+ /* End of children. */
+ out_leb128 (0);
+ }
+
symbol_set_value_now (info_end);
}
@@ -2960,6 +3108,7 @@ dwarf2_finish (void)
segT aranges_seg;
segT str_seg;
symbolS *name_sym, *comp_dir_sym, *producer_sym, *ranges_sym;
+ unsigned char func_form = 0;
gas_assert (all_segs);
@@ -3005,10 +3154,11 @@ dwarf2_finish (void)
}
out_debug_aranges (aranges_seg, info_seg);
- out_debug_abbrev (abbrev_seg, info_seg, line_seg);
+ out_debug_abbrev (abbrev_seg, info_seg, line_seg, &func_form);
out_debug_str (str_seg, &name_sym, &comp_dir_sym, &producer_sym);
- out_debug_info (info_seg, abbrev_seg, line_seg, ranges_sym,
- name_sym, comp_dir_sym, producer_sym);
+ out_debug_info (info_seg, abbrev_seg, line_seg, str_seg,
+ ranges_sym, name_sym, comp_dir_sym, producer_sym,
+ func_form);
}
}
diff --git a/gas/ecoff.c b/gas/ecoff.c
index 250faaee8e8..416ba1eb210 100644
--- a/gas/ecoff.c
+++ b/gas/ecoff.c
@@ -2312,7 +2312,7 @@ add_file (const char *file_name, int indx ATTRIBUTE_UNUSED, int fake)
compiler output, only in hand coded assembler. */
void
-ecoff_new_file (const char *name, int appfile ATTRIBUTE_UNUSED)
+ecoff_new_file (const char *name)
{
if (cur_file_ptr != NULL && filename_cmp (cur_file_ptr->name, name) == 0)
return;
diff --git a/gas/ecoff.h b/gas/ecoff.h
index 421f23174a9..01f9703dd4d 100644
--- a/gas/ecoff.h
+++ b/gas/ecoff.h
@@ -37,7 +37,7 @@ extern void ecoff_read_begin_hook (void);
/* This function should be called when the assembler switches to a new
file. */
-extern void ecoff_new_file (const char *, int);
+extern void ecoff_new_file (const char *);
/* This function should be called when a new symbol is created, by
obj_symbol_new_hook. */
diff --git a/gas/expr.c b/gas/expr.c
index 1e97a83f27b..6ad8bee2733 100644
--- a/gas/expr.c
+++ b/gas/expr.c
@@ -567,7 +567,7 @@ integer_constant (int radix, expressionS *expressionP)
/* Backward ref to local label.
Because it is backward, expect it to be defined. */
/* Construct a local label. */
- name = fb_label_name ((int) number, 0);
+ name = fb_label_name (number, 0);
/* Seen before, or symbol is defined: OK. */
symbolP = symbol_find (name);
@@ -601,7 +601,7 @@ integer_constant (int radix, expressionS *expressionP)
Construct a local label name, then an undefined symbol.
Don't create a xseg frag for it: caller may do that.
Just return it as never seen before. */
- name = fb_label_name ((int) number, 1);
+ name = fb_label_name (number, 1);
symbolP = symbol_find_or_make (name);
/* We have no need to check symbol properties. */
#ifndef many_segments
@@ -620,15 +620,15 @@ integer_constant (int radix, expressionS *expressionP)
then this is a fresh instantiation of that number, so create
it. */
- if (dollar_label_defined ((long) number))
+ if (dollar_label_defined (number))
{
- name = dollar_label_name ((long) number, 0);
+ name = dollar_label_name (number, 0);
symbolP = symbol_find (name);
know (symbolP != NULL);
}
else
{
- name = dollar_label_name ((long) number, 1);
+ name = dollar_label_name (number, 1);
symbolP = symbol_find_or_make (name);
}
@@ -1212,9 +1212,7 @@ operand (expressionS *expressionP, enum expr_mode mode)
{
as_bad (_("expected symbol name"));
(void) restore_line_pointer (c);
- if (c != ')')
- ignore_rest_of_line ();
- else
+ if (c == ')')
++input_line_pointer;
break;
}
@@ -1524,6 +1522,7 @@ static operator_rankT op_rank[O_max] = {
0, /* O_constant */
0, /* O_symbol */
0, /* O_symbol_rva */
+ 0, /* O_secidx */
0, /* O_register */
0, /* O_big */
9, /* O_uminus */
diff --git a/gas/expr.h b/gas/expr.h
index 3471e7cd572..dff40857427 100644
--- a/gas/expr.h
+++ b/gas/expr.h
@@ -18,28 +18,27 @@
Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
02110-1301, USA. */
-/*
- * By popular demand, we define a struct to represent an expression.
- * This will no doubt mutate as expressions become baroque.
- *
- * Currently, we support expressions like "foo OP bar + 42". In other
- * words we permit a (possibly undefined) symbol, a (possibly
- * undefined) symbol and the operation used to combine the symbols,
- * and an (absolute) augend. RMS says this is so we can have 1-pass
- * assembly for any compiler emissions, and a 'case' statement might
- * emit 'undefined1 - undefined2'.
- *
- * The type of an expression used to be stored as a segment. That got
- * confusing because it overloaded the concept of a segment. I added
- * an operator field, instead.
- */
+/* By popular demand, we define a struct to represent an expression.
+ This will no doubt mutate as expressions become baroque.
+
+ Currently, we support expressions like "foo OP bar + 42". In other
+ words we permit a (possibly undefined) symbol, a (possibly
+ undefined) symbol and the operation used to combine the symbols,
+ and an (absolute) augend. RMS says this is so we can have 1-pass
+ assembly for any compiler emissions, and a 'case' statement might
+ emit 'undefined1 - undefined2'.
+
+ The type of an expression used to be stored as a segment. That got
+ confusing because it overloaded the concept of a segment. I added
+ an operator field, instead. */
/* This is the type of an expression. The operator types are also
used while parsing an expression.
NOTE: This enumeration must match the op_rank array in expr.c. */
-typedef enum {
+typedef enum
+{
/* An illegal expression. */
O_illegal,
/* A nonexistent expression. */
@@ -50,6 +49,8 @@ typedef enum {
O_symbol,
/* X_add_symbol + X_add_number - the base address of the image. */
O_symbol_rva,
+ /* The section index of X_add_symbol. */
+ O_secidx,
/* A register (X_add_number is register number). */
O_register,
/* A big value. If X_add_number is negative or 0, the value is in
@@ -112,7 +113,8 @@ typedef enum {
O_max
} operatorT;
-typedef struct expressionS {
+typedef struct expressionS
+{
/* The main symbol. */
symbolS *X_add_symbol;
/* The second symbol, if needed. */
@@ -182,12 +184,10 @@ extern unsigned int get_single_number (void);
extern symbolS *make_expr_symbol (expressionS * expressionP);
extern int expr_symbol_where (symbolS *, const char **, unsigned int *);
extern void current_location (expressionS *);
-
extern symbolS *expr_build_uconstant (offsetT);
extern symbolS *expr_build_dot (void);
extern uint32_t generic_bignum_to_int32 (void);
extern uint64_t generic_bignum_to_int64 (void);
-
-int resolve_expression (expressionS *);
+extern int resolve_expression (expressionS *);
extern bool literal_prefix_dollar_hex;
diff --git a/gas/input-scrub.c b/gas/input-scrub.c
index 37877bffe1c..f65cd7957b1 100644
--- a/gas/input-scrub.c
+++ b/gas/input-scrub.c
@@ -80,7 +80,7 @@ static size_t sb_index = -1;
static sb from_sb;
/* Should we do a conditional check on from_sb? */
-static int from_sb_is_expansion = 1;
+static enum expansion from_sb_expansion = expanding_none;
/* The number of nested sb structures we have included. */
int macro_nest;
@@ -102,7 +102,7 @@ static const char *logical_input_file;
/* 1-origin line number in a source file. */
/* A line ends in '\n' or eof. */
static unsigned int physical_input_line;
-static int logical_input_line;
+static unsigned int logical_input_line;
/* Struct used to save the state of the input handler during include files */
struct input_save {
@@ -111,13 +111,13 @@ struct input_save {
size_t partial_size;
char save_source[AFTER_SIZE];
size_t buffer_length;
- const char * physical_input_file;
- const char * logical_input_file;
+ const char * physical_input_file;
+ const char * logical_input_file;
unsigned int physical_input_line;
- int logical_input_line;
+ unsigned int logical_input_line;
size_t sb_index;
sb from_sb;
- int from_sb_is_expansion; /* Should we do a conditional check? */
+ enum expansion from_sb_expansion; /* Should we do a conditional check? */
struct input_save * next_saved_file; /* Chain of input_saves. */
char * input_file_save; /* Saved state of input routines. */
char * saved_position; /* Caller's saved position in buf. */
@@ -137,7 +137,7 @@ static void
input_scrub_reinit (void)
{
input_file_begin (); /* Reinitialize! */
- logical_input_line = -1;
+ logical_input_line = -1u;
logical_input_file = NULL;
buffer_length = input_file_buffer_size () * 2;
@@ -167,7 +167,7 @@ input_scrub_push (char *saved_position)
saved->logical_input_line = logical_input_line;
saved->sb_index = sb_index;
saved->from_sb = from_sb;
- saved->from_sb_is_expansion = from_sb_is_expansion;
+ saved->from_sb_expansion = from_sb_expansion;
memcpy (saved->save_source, save_source, sizeof (save_source));
saved->next_saved_file = next_saved_file;
saved->input_file_save = input_file_push ();
@@ -196,7 +196,7 @@ input_scrub_pop (struct input_save *saved)
logical_input_line = saved->logical_input_line;
sb_index = saved->sb_index;
from_sb = saved->from_sb;
- from_sb_is_expansion = saved->from_sb_is_expansion;
+ from_sb_expansion = saved->from_sb_expansion;
partial_where = saved->partial_where;
partial_size = saved->partial_size;
next_saved_file = saved->next_saved_file;
@@ -252,6 +252,7 @@ char *
input_scrub_include_file (const char *filename, char *position)
{
next_saved_file = input_scrub_push (position);
+ from_sb_expansion = expanding_none;
return input_scrub_new_file (filename);
}
@@ -259,7 +260,7 @@ input_scrub_include_file (const char *filename, char *position)
expanding a macro. */
void
-input_scrub_include_sb (sb *from, char *position, int is_expansion)
+input_scrub_include_sb (sb *from, char *position, enum expansion expansion)
{
int newline;
@@ -267,8 +268,10 @@ input_scrub_include_sb (sb *from, char *position, int is_expansion)
as_fatal (_("macros nested too deeply"));
++macro_nest;
+ gas_assert (expansion < expanding_nested);
+
#ifdef md_macro_start
- if (is_expansion)
+ if (expansion == expanding_macro)
{
md_macro_start ();
}
@@ -279,7 +282,9 @@ input_scrub_include_sb (sb *from, char *position, int is_expansion)
/* Allocate sufficient space: from->len + optional newline. */
newline = from->len >= 1 && from->ptr[0] != '\n';
sb_build (&from_sb, from->len + newline);
- from_sb_is_expansion = is_expansion;
+ if (expansion == expanding_repeat && from_sb_expansion >= expanding_macro)
+ expansion = expanding_nested;
+ from_sb_expansion = expansion;
if (newline)
{
/* Add the sentinel required by read.c. */
@@ -304,7 +309,7 @@ input_scrub_close (void)
{
input_file_close ();
physical_input_line = 0;
- logical_input_line = -1;
+ logical_input_line = -1u;
}
char *
@@ -317,7 +322,7 @@ input_scrub_next_buffer (char **bufp)
if (sb_index >= from_sb.len)
{
sb_kill (&from_sb);
- if (from_sb_is_expansion)
+ if (from_sb_expansion == expanding_macro)
{
cond_finish_check (macro_nest);
#ifdef md_macro_end
@@ -429,22 +434,23 @@ void
bump_line_counters (void)
{
if (sb_index == (size_t) -1)
- {
- ++physical_input_line;
- if (logical_input_line >= 0)
- ++logical_input_line;
- }
+ ++physical_input_line;
+
+ /* PR gas/16908 workaround: Don't bump logical line numbers while
+ expanding macros, unless file (and maybe line; see as_where()) are
+ used inside the macro. */
+ if (logical_input_line != -1u && from_sb_expansion < expanding_macro)
+ ++logical_input_line;
}
/* Tells us what the new logical line number and file are.
If the line_number is -1, we don't change the current logical line
- number. If it is -2, we decrement the logical line number (this is
- to support the .appfile pseudo-op inserted into the stream by
- do_scrub_chars).
- If the fname is NULL, we don't change the current logical file name.
+ number.
+ If fname is NULL, we don't change the current logical file name, unless
+ bit 3 of flags is set.
Returns nonzero if the filename actually changes. */
-int
+void
new_logical_line_flags (const char *fname, /* DON'T destroy it! We point to it! */
int line_number,
int flags)
@@ -461,6 +467,18 @@ new_logical_line_flags (const char *fname, /* DON'T destroy it! We point to it!
case 1 << 2:
/* FIXME: we could check that include nesting is correct. */
break;
+ case 1 << 3:
+ if (line_number < 0 || fname != NULL || next_saved_file == NULL)
+ abort ();
+ /* PR gas/16908 workaround: Ignore updates when nested inside a macro
+ expansion. */
+ if (from_sb_expansion == expanding_nested)
+ return;
+ if (next_saved_file->logical_input_file)
+ fname = next_saved_file->logical_input_file;
+ else
+ fname = next_saved_file->physical_input_file;
+ break;
default:
abort ();
}
@@ -477,18 +495,22 @@ new_logical_line_flags (const char *fname, /* DON'T destroy it! We point to it!
if (fname
&& (logical_input_file == NULL
|| filename_cmp (logical_input_file, fname)))
- {
- logical_input_file = fname;
- return 1;
- }
- else
- return 0;
+ logical_input_file = fname;
+
+ /* When encountering file or line changes inside a macro, arrange for
+ bump_line_counters() to henceforth increment the logical line number
+ again, just like it does when expanding repeats. See as_where() for
+ why changing file or line alone doesn't alter expansion mode. */
+ if (from_sb_expansion == expanding_macro
+ && logical_input_file != NULL
+ && logical_input_line != -1u)
+ from_sb_expansion = expanding_repeat;
}
-int
+void
new_logical_line (const char *fname, int line_number)
{
- return new_logical_line_flags (fname, line_number, 0);
+ new_logical_line_flags (fname, line_number, 0);
}
@@ -515,7 +537,7 @@ const char *
as_where (unsigned int *linep)
{
if (logical_input_file != NULL
- && (linep == NULL || logical_input_line >= 0))
+ && (linep == NULL || logical_input_line != -1u))
{
if (linep != NULL)
*linep = logical_input_line;
diff --git a/gas/macro.c b/gas/macro.c
index 9327a6dea76..c8ebcab0f07 100644
--- a/gas/macro.c
+++ b/gas/macro.c
@@ -126,6 +126,21 @@ buffer_and_nest (const char *from, const char *to, sb *ptr,
else
from_len = strlen (from);
+ /* Except for macros record the present source position, such that
+ diagnostics and debug info will be properly associated with the
+ respective original lines, rather than with the line of the ending
+ directive (TO). */
+ if (from == NULL || strcasecmp (from, "MACRO") != 0)
+ {
+ unsigned int line;
+ char *linefile;
+
+ as_where (&line);
+ linefile = xasprintf ("\t.linefile %u .\n", line);
+ sb_add_buffer (ptr, linefile, strlen (linefile));
+ xfree (linefile);
+ }
+
while (more)
{
/* Try to find the first pseudo op on the line. */
@@ -184,23 +199,35 @@ buffer_and_nest (const char *from, const char *to, sb *ptr,
{
if (! flag_m68k_mri && ptr->ptr[i] == '.')
i++;
- if (from == NULL
- && strncasecmp (ptr->ptr + i, "IRPC", from_len = 4) != 0
- && strncasecmp (ptr->ptr + i, "IRP", from_len = 3) != 0
- && strncasecmp (ptr->ptr + i, "IREPC", from_len = 5) != 0
- && strncasecmp (ptr->ptr + i, "IREP", from_len = 4) != 0
- && strncasecmp (ptr->ptr + i, "REPT", from_len = 4) != 0
- && strncasecmp (ptr->ptr + i, "REP", from_len = 3) != 0)
- from_len = 0;
+ size_t len = ptr->len - i;
+ if (from == NULL)
+ {
+ if (len >= 5 && strncasecmp (ptr->ptr + i, "IREPC", 5) == 0)
+ from_len = 5;
+ else if (len >= 4 && strncasecmp (ptr->ptr + i, "IREP", 4) == 0)
+ from_len = 4;
+ else if (len >= 4 && strncasecmp (ptr->ptr + i, "IRPC", 4) == 0)
+ from_len = 4;
+ else if (len >= 4 && strncasecmp (ptr->ptr + i, "REPT", 4) == 0)
+ from_len = 4;
+ else if (len >= 3 && strncasecmp (ptr->ptr + i, "IRP", 3) == 0)
+ from_len = 3;
+ else if (len >= 3 && strncasecmp (ptr->ptr + i, "REP", 3) == 0)
+ from_len = 3;
+ else
+ from_len = 0;
+ }
if ((from != NULL
- ? strncasecmp (ptr->ptr + i, from, from_len) == 0
+ ? (len >= from_len
+ && strncasecmp (ptr->ptr + i, from, from_len) == 0)
: from_len > 0)
- && (ptr->len == (i + from_len)
+ && (len == from_len
|| ! (is_part_of_name (ptr->ptr[i + from_len])
|| is_name_ender (ptr->ptr[i + from_len]))))
depth++;
- if (strncasecmp (ptr->ptr + i, to, to_len) == 0
- && (ptr->len == (i + to_len)
+ if (len >= to_len
+ && strncasecmp (ptr->ptr + i, to, to_len) == 0
+ && (len == to_len
|| ! (is_part_of_name (ptr->ptr[i + to_len])
|| is_name_ender (ptr->ptr[i + to_len]))))
{
@@ -222,13 +249,14 @@ buffer_and_nest (const char *from, const char *to, sb *ptr,
number when expanding the macro), and since for short
macros we clearly prefer reporting the point of expansion
anyway, there's not an obviously better fix here. */
- if (strncasecmp (ptr->ptr + i, "linefile", 8) == 0)
+ if (from != NULL && strcasecmp (from, "MACRO") == 0
+ && len >= 8 && strncasecmp (ptr->ptr + i, "linefile", 8) == 0)
{
char saved_eol_char = ptr->ptr[ptr->len];
ptr->ptr[ptr->len] = '\0';
temp_ilp (ptr->ptr + i + 8);
- s_app_line (0);
+ s_linefile (0);
restore_ilp ();
ptr->ptr[ptr->len] = saved_eol_char;
ptr->len = line_start;
diff --git a/gas/obj.h b/gas/obj.h
index dd98e665cbf..5d237075c9d 100644
--- a/gas/obj.h
+++ b/gas/obj.h
@@ -42,7 +42,7 @@ struct format_ops {
unsigned dfl_leading_underscore : 1;
unsigned emit_section_symbols : 1;
void (*begin) (void);
- void (*app_file) (const char *, int);
+ void (*app_file) (const char *);
void (*frob_symbol) (symbolS *, int *);
void (*frob_file) (void);
void (*frob_file_before_adjust) (void);
diff --git a/gas/po/fr.po b/gas/po/fr.po
index 259b1f51a41..9eb3124f0c9 100644
--- a/gas/po/fr.po
+++ b/gas/po/fr.po
@@ -1,14 +1,14 @@
# French translation of GNU gas.
-# Copyright (C) 2021 Free Software Foundation, Inc.
+# Copyright (C) 2022 Free Software Foundation, Inc.
# This file is distributed under the same license as the binutils package.
# Michel Robitaille <robitail@IRO.UMontreal.CA>, traducteur depuis/since 1996.
-# Frédéric Marchal <fmarchal@perso.be>, 2021.
+# Frédéric Marchal <fmarchal@perso.be>, 2022.
msgid ""
msgstr ""
-"Project-Id-Version: gas-2.36.90\n"
-"Report-Msgid-Bugs-To: bug-binutils@gnu.org\n"
-"POT-Creation-Date: 2021-07-03 15:02+0100\n"
-"PO-Revision-Date: 2021-07-04 20:21+0200\n"
+"Project-Id-Version: gas-2.37.90\n"
+"Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n"
+"POT-Creation-Date: 2022-01-22 12:21+0000\n"
+"PO-Revision-Date: 2022-01-28 11:22+0100\n"
"Last-Translator: Frédéric Marchal <fmarchal@perso.be>\n"
"Language-Team: French <traduc@traduc.org>\n"
"Language: fr\n"
@@ -18,41 +18,60 @@ msgstr ""
"X-Bugs: Report translation errors to the Language-Team address.\n"
"Plural-Forms: nplurals=2; plural=(n >= 2);\n"
-#: app.c:494 app.c:508
+#: app.c:381
+#, c-format
+msgid "multibyte character (%#x) encountered in input"
+msgstr "caractère sur plusieurs octets (%#x) rencontrée en entrée"
+
+#: app.c:383
+#, c-format
+msgid "multibyte character (%#x) encountered in %s"
+msgstr "caractère sur plusieurs octets (%#x) rencontré dans %s"
+
+#: app.c:385
+#, c-format
+msgid "multibyte character (%#x) encountered in %s at or near line %u"
+msgstr "caractère sur plusieurs octets (%#x) rencontré dans %s à ou près de la ligne %u"
+
+#: app.c:389
+msgid "further multibyte character warnings suppressed"
+msgstr "les avertissements supplémentaires à propos des caractères sur plusieurs octets sont ignorés"
+
+#: app.c:548 app.c:562
msgid "end of file in comment"
msgstr "fin du fichier dans le commentaire"
-#: app.c:586 app.c:631
+#: app.c:640 app.c:685
#, c-format
msgid "end of file in string; '%c' inserted"
msgstr "fin du fichier dans la chaîne; « %c » inséré"
-#: app.c:657
+#: app.c:711
#, c-format
msgid "unknown escape '\\%c' in string; ignored"
msgstr "échappement inconnu « \\%c » dans la chaîne; ignoré"
-#: app.c:831 input-scrub.c:363
+#: app.c:887 input-scrub.c:363
msgid "end of file not at end of a line; newline inserted"
msgstr "fin du fichier n'est pas à la fin de la ligne; nouvelle ligne insérée"
-#: app.c:993
+#: app.c:1049
msgid "end of file in multiline comment"
msgstr "fin de fichier dans un commentaire multilignes"
-#: app.c:1067
+#: app.c:1123
msgid "end of file after a one-character quote; \\0 inserted"
msgstr "fin du fichier après la présence d'un seul caractère apostrophe; \\0 inséré"
-#: app.c:1075
+#: app.c:1131
msgid "end of file in escape character"
msgstr "fin de fichier dans le caractère d'échappement"
-#: app.c:1087
+#: app.c:1143
msgid "missing close quote; (assumed)"
msgstr "apostrophe de fermeture manquant; (assumé)"
-#: app.c:1155 app.c:1210 app.c:1222 app.c:1300
+#: app.c:1211 app.c:1266 app.c:1278 app.c:1356
msgid "end of file in comment; newline inserted"
msgstr "fin de fichier dans le commentaire; nouvelle ligne insérée"
@@ -193,12 +212,12 @@ msgstr ""
msgid " --elf-stt-common=[no|yes] "
msgstr " --elf-stt-common=[no|yes] "
-#: as.c:317 as.c:328 config/tc-i386.c:13799 config/tc-i386.c:13819
+#: as.c:317 as.c:328 config/tc-i386.c:13918 config/tc-i386.c:13938
#, c-format
msgid "(default: yes)\n"
msgstr "(défaut: yes)\n"
-#: as.c:319 as.c:330 config/tc-i386.c:13801 config/tc-i386.c:13821
+#: as.c:319 as.c:330 config/tc-i386.c:13920 config/tc-i386.c:13940
#, c-format
msgid "(default: no)\n"
msgstr "(défaut: no)\n"
@@ -422,23 +441,28 @@ msgstr " @FICHIER lire les options dans le FICHIER\n"
msgid "Report bugs to %s\n"
msgstr "Rapporter toutes anomalies à %s\n"
-#: as.c:646
+#: as.c:648
#, c-format
msgid "unrecognized option -%c%s"
msgstr "option non reconnue -%c%s"
+#: as.c:698
+#, c-format
+msgid "unexpected argument to --multibyte-input-option: '%s'"
+msgstr "argument inattendu pour --multibyte-input-option : « %s »"
+
#. This output is intended to follow the GNU standards document.
-#: as.c:688
+#: as.c:703
#, c-format
msgid "GNU assembler %s\n"
msgstr "Assembleur GNU %s\n"
-#: as.c:689
+#: as.c:704
#, c-format
-msgid "Copyright (C) 2021 Free Software Foundation, Inc.\n"
-msgstr "Copyright © 2021 Free Software Foundation, Inc.\n"
+msgid "Copyright (C) 2022 Free Software Foundation, Inc.\n"
+msgstr "Copyright © 2022 Free Software Foundation, Inc.\n"
-#: as.c:690
+#: as.c:705
#, c-format
msgid ""
"This program is free software; you may redistribute it under the terms of\n"
@@ -449,7 +473,7 @@ msgstr ""
"version 3 de la licence GNU General Public License ou suivante.\n"
"Ce programme n'est couvert par AUCUNE garantie.\n"
-#: as.c:695
+#: as.c:710
#, c-format
msgid ""
"This assembler was configured for a target of `%s' and default,\n"
@@ -458,131 +482,131 @@ msgstr ""
"Cet assembleur a été configuré pour la cible « %s » et le type\n"
"de processeur par défaut « %s ».\n"
-#: as.c:699
+#: as.c:714
#, c-format
msgid "This assembler was configured for a target of `%s'.\n"
msgstr "Cet assembleur a été configuré pour la cible « %s ».\n"
-#: as.c:707
+#: as.c:722
msgid "multiple emulation names specified"
msgstr "multiples noms d'émulation spécifiés"
-#: as.c:709
+#: as.c:724
msgid "emulations not handled in this configuration"
msgstr "émulations non traités dans cette configuration"
-#: as.c:714
+#: as.c:729
#, c-format
msgid "alias = %s\n"
msgstr "alias = %s\n"
-#: as.c:715
+#: as.c:730
#, c-format
msgid "canonical = %s\n"
msgstr "canonique = %s\n"
-#: as.c:716
+#: as.c:731
#, c-format
msgid "cpu-type = %s\n"
msgstr "type de CPU = %s\n"
-#: as.c:718
+#: as.c:733
#, c-format
msgid "format = %s\n"
msgstr "format = %s\n"
-#: as.c:721
+#: as.c:736
#, c-format
msgid "bfd-target = %s\n"
msgstr "cible-bfd = %s\n"
-#: as.c:738
+#: as.c:753
#, c-format
msgid "Invalid --compress-debug-sections option: `%s'"
msgstr "Option --compress-debug-sections invalide: « %s »"
-#: as.c:741
+#: as.c:756
#, c-format
msgid "--compress-debug-sections=%s is unsupported"
msgstr "--compress-debug-sections=%s n'est pas supporté"
-#: as.c:766
+#: as.c:781
msgid "bad defsym; format is --defsym name=value"
msgstr "defsym erroné; format est --defsym nom=valeur"
-#: as.c:786
+#: as.c:801
msgid "no file name following -t option"
msgstr "aucun nom de fichier après l'option -t"
-#: as.c:801
+#: as.c:816
#, c-format
msgid "failed to read instruction table %s\n"
msgstr "échec de lecture de la table d'instructions %s\n"
-#: as.c:823
+#: as.c:838
#, c-format
msgid "unknown DWARF option %s\n"
msgstr "Option DWARF inconnue %s\n"
-#: as.c:874
+#: as.c:889
#, c-format
msgid "Invalid --gdwarf-cie-version `%s'"
msgstr "Option --gdwarf-cie-version « %s » invalide"
-#: as.c:967
+#: as.c:982
#, c-format
msgid "Invalid --size-check= option: `%s'"
msgstr "Option --size-check= invalide: « %s »"
-#: as.c:976
+#: as.c:991
#, c-format
msgid "Invalid --elf-stt-common= option: `%s'"
msgstr "Option --elf-stt-common= invalide: « %s »"
-#: as.c:990
+#: as.c:1005
#, c-format
msgid "Invalid --generate-missing-build-notes option: `%s'"
msgstr "Option --generate-missing-build-notes invalide: « %s »"
-#: as.c:1061
+#: as.c:1076
#, c-format
msgid "invalid listing option `%c'"
msgstr "option de listage invalide « %c »"
-#: as.c:1124
+#: as.c:1139
#, c-format
msgid "%s: total time in assembly: %ld.%06ld\n"
msgstr "%s: temps total d'assemblage: %ld.%06ld\n"
-#: as.c:1288
+#: as.c:1303
msgid "libbfd ABI mismatch"
msgstr "désaccord de l'ABI libbfd"
-#: as.c:1333
+#: as.c:1348
#, c-format
msgid "The input '%s' and output '%s' files are the same"
msgstr "Les fichiers d'entrée « %s » et de sortie « %s » sont les mêmes"
-#: as.c:1443
+#: as.c:1458
#, c-format
msgid "%d warning"
msgid_plural "%d warnings"
msgstr[0] "%d avertissement"
msgstr[1] "%d avertissements"
-#: as.c:1445
+#: as.c:1460
#, c-format
msgid "%d error"
msgid_plural "%d errors"
msgstr[0] "%d erreur"
msgstr[1] "%d erreurs"
-#: as.c:1449
+#: as.c:1464
#, c-format
msgid "%s, treating warnings as errors"
msgstr "%s, traitement des avertissements comme des erreurs"
-#: as.c:1460
+#: as.c:1475
#, c-format
msgid "%s, %s, generating bad object file\n"
msgstr "%s, %s, génération d'un fichier objet erroné\n"
@@ -596,33 +620,33 @@ msgstr "Casse valeur %ld inattendue à la ligne %d du fichier « %s »\n"
#. * We have a GROSS internal error.
#. * This should never happen.
#.
-#: atof-generic.c:437 config/tc-m68k.c:3503
+#: atof-generic.c:455 config/tc-m68k.c:3503
msgid "failed sanity check"
msgstr "la vérification de l'état de santé a échoué"
#: cgen.c:106 config/tc-alpha.c:2095 config/tc-alpha.c:2119
-#: config/tc-arc.c:4058 config/tc-arc.c:4131 config/tc-d10v.c:550
-#: config/tc-d30v.c:534 config/tc-mn10200.c:1098 config/tc-mn10300.c:1752
-#: config/tc-ppc.c:3920 config/tc-s390.c:1334 config/tc-s390.c:1457
-#: config/tc-s390.c:1591 config/tc-v850.c:2538 config/tc-v850.c:2609
-#: config/tc-v850.c:2656 config/tc-v850.c:2693 config/tc-v850.c:2730
-#: config/tc-v850.c:2993
+#: config/tc-arc.c:4053 config/tc-arc.c:4126 config/tc-d10v.c:550
+#: config/tc-d30v.c:534 config/tc-mn10200.c:1091 config/tc-mn10300.c:1752
+#: config/tc-ppc.c:3939 config/tc-s390.c:1334 config/tc-s390.c:1457
+#: config/tc-s390.c:1591 config/tc-v850.c:2535 config/tc-v850.c:2606
+#: config/tc-v850.c:2653 config/tc-v850.c:2690 config/tc-v850.c:2727
+#: config/tc-v850.c:2990
msgid "too many fixups"
msgstr "trop de correctifs"
#: cgen.c:371 cgen.c:391 config/tc-d10v.c:461 config/tc-d30v.c:450
-#: config/tc-mn10200.c:1040 config/tc-mn10300.c:1677 config/tc-ppc.c:3443
-#: config/tc-s390.c:1318 config/tc-v850.c:2647 config/tc-v850.c:2681
-#: config/tc-v850.c:2721 config/tc-v850.c:2966 config/tc-z80.c:785
+#: config/tc-mn10200.c:1033 config/tc-mn10300.c:1677 config/tc-ppc.c:3462
+#: config/tc-s390.c:1318 config/tc-v850.c:2644 config/tc-v850.c:2678
+#: config/tc-v850.c:2718 config/tc-v850.c:2963 config/tc-z80.c:785
msgid "illegal operand"
msgstr "opérande illégal"
-#: cgen.c:395 config/tc-avr.c:900 config/tc-d10v.c:463 config/tc-d30v.c:452
+#: cgen.c:395 config/tc-avr.c:910 config/tc-d10v.c:463 config/tc-d30v.c:452
#: config/tc-h8300.c:496 config/tc-mcore.c:662 config/tc-microblaze.c:613
-#: config/tc-mmix.c:495 config/tc-mn10200.c:1043 config/tc-mn10300.c:1680
-#: config/tc-msp430.c:417 config/tc-ppc.c:3445 config/tc-s390.c:1323
-#: config/tc-sh.c:988 config/tc-v850.c:2651 config/tc-v850.c:2685
-#: config/tc-v850.c:2725 config/tc-v850.c:2969 config/tc-xgate.c:895
+#: config/tc-mmix.c:495 config/tc-mn10200.c:1036 config/tc-mn10300.c:1680
+#: config/tc-msp430.c:417 config/tc-ppc.c:3464 config/tc-s390.c:1323
+#: config/tc-sh.c:988 config/tc-v850.c:2648 config/tc-v850.c:2682
+#: config/tc-v850.c:2722 config/tc-v850.c:2966 config/tc-xgate.c:895
#: config/tc-z80.c:932 config/tc-z8k.c:349
msgid "missing operand"
msgstr "opérande manquant"
@@ -635,23 +659,16 @@ msgstr "un réadressage de cet opérande implique un débordement"
msgid "operand mask overflow"
msgstr "débordement du masque de l'opérande"
-#. We can't actually support subtracting a symbol.
-#: cgen.c:858 config/tc-arm.c:2076 config/tc-arm.c:11321 config/tc-arm.c:11373
-#: config/tc-arm.c:11655 config/tc-arm.c:12551 config/tc-arm.c:13691
-#: config/tc-arm.c:13731 config/tc-arm.c:14104 config/tc-arm.c:14146
-#: config/tc-arm.c:21386 config/tc-arm.c:21446 config/tc-avr.c:1551
-#: config/tc-avr.c:1563 config/tc-avr.c:1827 config/tc-cris.c:4054
-#: config/tc-d10v.c:1506 config/tc-d30v.c:1909 config/tc-ft32.c:574
-#: config/tc-ft32.c:587 config/tc-mips.c:9707 config/tc-mips.c:11017
-#: config/tc-mips.c:12314 config/tc-mips.c:12997 config/tc-nds32.c:7829
-#: config/tc-pru.c:746 config/tc-pru.c:756 config/tc-spu.c:960
-#: config/tc-spu.c:984 config/tc-tilegx.c:1479 config/tc-tilepro.c:1337
-#: config/tc-v850.c:3451 config/tc-vax.c:282 config/tc-xstormy16.c:482
-#: config/tc-xtensa.c:6009 config/tc-xtensa.c:13092 config/tc-z80.c:3856
+#: cgen.c:858 config/tc-arm.c:2054 config/tc-arm.c:11343 config/tc-arm.c:11395
+#: config/tc-arm.c:11683 config/tc-arm.c:12579 config/tc-arm.c:13719
+#: config/tc-arm.c:13759 config/tc-arm.c:14132 config/tc-arm.c:14174
+#: config/tc-arm.c:21420 config/tc-arm.c:21480 config/tc-mips.c:9707
+#: config/tc-mips.c:11017 config/tc-mips.c:12314 config/tc-mips.c:12997
+#: config/tc-spu.c:981 config/tc-xtensa.c:13092
msgid "expression too complex"
msgstr "expression trop complexe"
-#: cgen.c:959 config/tc-ppc.c:7200 config/tc-s390.c:2372 config/tc-v850.c:3503
+#: cgen.c:959 config/tc-ppc.c:7467 config/tc-s390.c:2369 config/tc-v850.c:3499
#: config/tc-xstormy16.c:541
msgid "unresolved expression that must be resolved"
msgstr "expression non résolue qui doit être résolue"
@@ -661,7 +678,7 @@ msgstr "expression non résolue qui doit être résolue"
msgid "internal error: can't install fix for reloc type %d (`%s')"
msgstr "erreur interne: ne peut installer un correctif pour le type de réadressage %d (« %s »)"
-#: cgen.c:1035 config/tc-nios2.c:1355 config/tc-pru.c:787
+#: cgen.c:1035 config/tc-nios2.c:1355 config/tc-pru.c:786
msgid "relocation is not supported"
msgstr "le réadressage n'est pas supporté"
@@ -729,20 +746,24 @@ msgstr "voici le début du conditionnel non terminé"
msgid "here is the \"else\" of the unterminated conditional"
msgstr "voici le « else » du conditionnel non terminé"
-#: config/atof-ieee.c:140
+#: config/atof-ieee.c:148
msgid "cannot create floating-point number"
msgstr "impossible de créer le nombre à virgule flottante"
-#: config/atof-ieee.c:318
+#: config/atof-ieee.c:335
msgid "NaNs are not supported by this target"
msgstr "NaNs ne sont pas supportés par cette cible"
-#: config/atof-ieee.c:362 config/atof-ieee.c:407
+#: config/atof-ieee.c:354
+msgid "NaN flavors are not supported by this target"
+msgstr "les variantes de NaN ne sont pas supportées par cette cible"
+
+#: config/atof-ieee.c:392
msgid "Infinities are not supported by this target"
msgstr "Les nombres infinis ne sont pas supportés par cette cible"
-#: config/atof-ieee.c:829 config/atof-vax.c:449 config/tc-arm.c:1322
-#: config/tc-ia64.c:11600 config/tc-tic30.c:1241 config/tc-tic4x.c:2565
+#: config/atof-ieee.c:825 config/atof-vax.c:449 config/tc-arm.c:1284
+#: config/tc-ia64.c:11595 config/tc-tic30.c:1241 config/tc-tic4x.c:2567
msgid "Unrecognized or unsupported floating point constant"
msgstr "Constante décimale non reconnue ou non supportée"
@@ -889,7 +910,7 @@ msgstr "Ne peut initialiser les masques de registres"
msgid "bad .common segment %s"
msgstr "segment .common erroné %s"
-#: config/obj-elf.c:420 config/tc-aarch64.c:2009
+#: config/obj-elf.c:420 config/tc-aarch64.c:1968
msgid "Missing symbol name in directive"
msgstr "Nom de symbole manquant dans la directive"
@@ -912,266 +933,271 @@ msgstr "initialisation incorrecte des attributs de section de %s"
#. assembly might get the section type wrong; Even high
#. profile projects like glibc have done so in the past.
#. So don't error in this case.
-#: config/obj-elf.c:797
+#: config/obj-elf.c:813
#, c-format
msgid "ignoring changed section type for %s"
msgstr "changement de type de section ignoré pour %s"
#. Do error when assembly isn't self-consistent.
-#: config/obj-elf.c:800
+#: config/obj-elf.c:816
#, c-format
msgid "changed section type for %s"
msgstr "le type de la section a été changé en %s"
-#: config/obj-elf.c:815
+#: config/obj-elf.c:831
#, c-format
msgid "ignoring changed section attributes for %s"
msgstr "changement d'attributs de section ignoré pour %s"
-#: config/obj-elf.c:817
+#: config/obj-elf.c:833
#, c-format
msgid "changed section attributes for %s"
msgstr "les attributs de la section ont été changés en %s"
-#: config/obj-elf.c:825
+#: config/obj-elf.c:841
#, c-format
msgid "changed section entity size for %s"
msgstr "la taille de l'entité de la section a été changée en %s"
-#: config/obj-elf.c:896
+#: config/obj-elf.c:910
msgid "unrecognized .section attribute: want a,e,o,w,x,M,S,G,T or number"
msgstr "attribut de .section non reconnu: a,e,o,w,x,M,S,G,T ou un nombre attendu"
-#: config/obj-elf.c:980
+#: config/obj-elf.c:994
msgid "extraneous characters at end of numeric section type"
msgstr "caractères superflus à la fin du type de section numérique"
-#: config/obj-elf.c:986 read.c:3010
+#: config/obj-elf.c:1000 read.c:3010
msgid "unrecognized section type"
msgstr "type de section non reconnu"
-#: config/obj-elf.c:1018
+#: config/obj-elf.c:1032
msgid "unrecognized section attribute"
msgstr "attribut de section non reconnu"
-#: config/obj-elf.c:1049 config/tc-alpha.c:4206
+#: config/obj-elf.c:1063 config/tc-alpha.c:4206
msgid "missing name"
msgstr "nom manquant"
-#: config/obj-elf.c:1092
+#: config/obj-elf.c:1106
msgid "group name not parseable"
msgstr "nom de groupe non analysable"
-#: config/obj-elf.c:1098
+#: config/obj-elf.c:1112
#, c-format
msgid "section %s already has a group (%s)"
msgstr "la section %s a déjà un groupe (%s)"
-#: config/obj-elf.c:1153
+#: config/obj-elf.c:1167
#, c-format
msgid "section name '%s' already defined as another symbol"
msgstr "le nom de section « %s » est déjà défini comme un autre symbole"
-#: config/obj-elf.c:1245
+#: config/obj-elf.c:1259
msgid "invalid merge entity size"
msgstr "mauvaise taille de fusion d'entité"
-#: config/obj-elf.c:1252
+#: config/obj-elf.c:1266
msgid "entity size for SHF_MERGE not specified"
msgstr "taille d'entité pour SHF_MERGE non spécifiée"
-#: config/obj-elf.c:1280
+#: config/obj-elf.c:1294
msgid "? section flag ignored with G present"
msgstr "fanion ? de section ignoré quand G est présent"
-#: config/obj-elf.c:1305
+#: config/obj-elf.c:1319
msgid "group name for SHF_GROUP not specified"
msgstr "nom de groupe pour SHF_GROUP non spécifié"
-#: config/obj-elf.c:1331
+#: config/obj-elf.c:1345
#, c-format
msgid "unsupported mbind section info: %s"
msgstr "information de section mbind non supportée: %s"
-#: config/obj-elf.c:1384
+#: config/obj-elf.c:1398
#, c-format
msgid "unsupported section id: %s"
msgstr "identifiant de section non supporté: %s"
-#: config/obj-elf.c:1409
+#: config/obj-elf.c:1423
msgid "character following name is not '#'"
msgstr "caractère suivant le nom n'est pas « # »"
-#: config/obj-elf.c:1436
+#: config/obj-elf.c:1450
#, c-format
msgid "SHF_ALLOC isn't set for GNU_MBIND section: %s"
msgstr "SHF_ALLOC n'est pas défini pour la section GNU_MBIND: %s"
-#: config/obj-elf.c:1443
+#: config/obj-elf.c:1457
#, c-format
msgid "%s section is supported only by GNU and FreeBSD targets"
msgstr "la section %s n'est supportée que par les cibles GNU et FreeBSD"
-#: config/obj-elf.c:1584
+#: config/obj-elf.c:1598
msgid ".previous without corresponding .section; ignored"
msgstr ".previous sans .section correspondante; ignoré"
-#: config/obj-elf.c:1610
+#: config/obj-elf.c:1624
msgid ".popsection without corresponding .pushsection; ignored"
msgstr ".popsection sans .pushsection correspondant; ignoré"
-#: config/obj-elf.c:1654 config/obj-elf.c:1749
+#: config/obj-elf.c:1668 config/obj-elf.c:1763
#, c-format
msgid "missing version name in `%s' for symbol `%s'"
msgstr "nom de version manquant dans « %s» pour le symbole «%s »"
-#: config/obj-elf.c:1673
+#: config/obj-elf.c:1687
#, c-format
msgid "only one version name with `@@@' is allowed for symbol `%s'"
msgstr "seulement un nom de version avec « @@@ » est autorisé pour le symbole « %s »"
-#: config/obj-elf.c:1681
+#: config/obj-elf.c:1695
#, c-format
msgid "invalid version name '%s' for symbol `%s'"
msgstr "nom de version « %s » invalide pour le symbole « %s »"
-#: config/obj-elf.c:1723
+#: config/obj-elf.c:1737
msgid "expected comma after name in .symver"
msgstr "virgule attendue après le nom dans .symver"
-#: config/obj-elf.c:1740 config/obj-elf.c:2644
+#: config/obj-elf.c:1754 config/obj-elf.c:2658
#, c-format
msgid "`%s' can't be versioned to common symbol '%s'"
msgstr "« %s » ne peut être liée par version au symbole commun « %s »"
-#: config/obj-elf.c:1817
+#: config/obj-elf.c:1831
#, c-format
msgid "expected `%s' to have already been set for .vtable_inherit"
msgstr "«%s» aurait déjà dû être fixé pour .vtable_inherit"
-#: config/obj-elf.c:1827
+#: config/obj-elf.c:1841
msgid "expected comma after name in .vtable_inherit"
msgstr "virgule attendue après le nom dans .vtable_inherit"
-#: config/obj-elf.c:1888
+#: config/obj-elf.c:1902
msgid "expected comma after name in .vtable_entry"
msgstr "virgule attendue après le nom dans .vtable_entry"
-#: config/obj-elf.c:2027
+#: config/obj-elf.c:2041
#, c-format
msgid "Attribute name not recognised: %s"
msgstr "Nom d'attribut pas reconnu: %s"
-#: config/obj-elf.c:2044
+#: config/obj-elf.c:2058
msgid "expected numeric constant"
msgstr "constante numérique attendue"
-#: config/obj-elf.c:2053 config/tc-arm.c:7048
+#: config/obj-elf.c:2067 config/tc-arm.c:7056
msgid "expected comma"
msgstr "virgule attendue"
-#: config/obj-elf.c:2086
+#: config/obj-elf.c:2100
msgid "bad string constant"
msgstr "mauvaise constante en tant que chaîne de caractères"
-#: config/obj-elf.c:2090
+#: config/obj-elf.c:2104
msgid "expected <tag> , <value>"
msgstr "<étiquette> , <valeur> attendu"
-#: config/obj-elf.c:2223
+#: config/obj-elf.c:2237
msgid "expected quoted string"
msgstr "chaîne entre apostrophes attendue"
-#: config/obj-elf.c:2243
+#: config/obj-elf.c:2257
#, c-format
msgid "expected comma after name `%s' in .size directive"
msgstr "virgule attendue après le nom « %s » dans la directive .size"
-#: config/obj-elf.c:2252
+#: config/obj-elf.c:2266
msgid "missing expression in .size directive"
msgstr "expression manquante dans la directive .size"
-#: config/obj-elf.c:2372
+#: config/obj-elf.c:2386
#, c-format
msgid "symbol '%s' is already defined"
msgstr "symbole « %s » déjà défini"
-#: config/obj-elf.c:2392
+#: config/obj-elf.c:2406
#, c-format
msgid "symbol type \"%s\" is supported only by GNU and FreeBSD targets"
msgstr "type de symbole « %s » n'est supporté que par les cibles GNU et FreeBSD"
-#: config/obj-elf.c:2396
+#: config/obj-elf.c:2410
#, c-format
msgid "symbol type \"%s\" is not supported by MIPS targets"
msgstr "le type de symbole « %s » n'est pas supporté par les cibles MIPS"
-#: config/obj-elf.c:2408
+#: config/obj-elf.c:2422
#, c-format
msgid "symbol type \"%s\" is supported only by GNU targets"
msgstr "le type de symbole « %s » n'est supporté que par les cibles GNU"
-#: config/obj-elf.c:2418
+#: config/obj-elf.c:2432
#, c-format
msgid "unrecognized symbol type \"%s\""
msgstr "type de symbole non reconnu « %s »"
-#: config/obj-elf.c:2439
+#: config/obj-elf.c:2453
#, c-format
msgid "cannot change type of common symbol '%s'"
msgstr "impossible de changer le type du symbole commun « %s »"
-#: config/obj-elf.c:2451
+#: config/obj-elf.c:2465
#, c-format
msgid "symbol '%s' already has its type set"
msgstr "symbole « %s » a déjà son type défini"
-#: config/obj-elf.c:2617 config/obj-elf.c:2620
+#: config/obj-elf.c:2631 config/obj-elf.c:2634
#, c-format
msgid ".size expression for %s does not evaluate to a constant"
msgstr "l'expression .size de %s n'est pas une constante"
-#: config/obj-elf.c:2716 ecoff.c:3578
+#: config/obj-elf.c:2723
+#, c-format
+msgid "symbol '%s' with multiple versions cannot be used in relocation"
+msgstr "le symbole « %s » avec plusieurs versions ne peut pas être utilisé dans un réadressage"
+
+#: config/obj-elf.c:2741 ecoff.c:3578
#, c-format
msgid "symbol `%s' can not be both weak and common"
msgstr "symbole « %s » ne peut être à la fois weak et common"
-#: config/obj-elf.c:2751
+#: config/obj-elf.c:2789
#, c-format
msgid "undefined linked-to symbol `%s' on section `%s'"
msgstr "le symbole linked-to « %s » est indéfini sur la section « %s »"
-#: config/obj-elf.c:2829
+#: config/obj-elf.c:2867
#, c-format
msgid "assuming all members of group `%s' are COMDAT"
msgstr "assume que tous les membres du groupe « %s » sont COMDAT"
-#: config/obj-elf.c:2841
+#: config/obj-elf.c:2879
#, c-format
msgid "can't create group: %s"
msgstr "ne peut créer le groupe: %s"
-#: config/obj-elf.c:2918
+#: config/obj-elf.c:2956
#, c-format
msgid "invalid attempt to declare external version name as default in symbol `%s'"
msgstr "tentative invalide de déclaration d'un nom de version externe comme nom par défaut pour le symbole « %s »"
-#: config/obj-elf.c:2928
+#: config/obj-elf.c:2966
#, c-format
msgid "multiple versions [`%s'|`%s'] for symbol `%s'"
msgstr "versions multiples [«%s»|«%s»] pour le symbole «%s»"
-#: config/obj-elf.c:3020
+#: config/obj-elf.c:3058
#, c-format
msgid "failed to set up debugging information: %s"
msgstr "échec d'initialisation des informations de débug: %s"
-#: config/obj-elf.c:3040
+#: config/obj-elf.c:3078
#, c-format
msgid "can't start writing .mdebug section: %s"
msgstr "ne peut débuter l'écriture de la section .mdebug: %s"
-#: config/obj-elf.c:3048
+#: config/obj-elf.c:3086
#, c-format
msgid "could not write .mdebug section: %s"
msgstr "n'a pas pu écrire la section .mdebug: %s"
@@ -1220,7 +1246,7 @@ msgstr "informations de taille de section inattendues"
msgid "missing sizeof_stub expression"
msgstr "expression sizeof_stub manquante"
-#: config/obj-macho.c:478 config/tc-ia64.c:1080 config/tc-ia64.c:11761
+#: config/obj-macho.c:478 config/tc-ia64.c:1081 config/tc-ia64.c:11756
#: config/tc-score.c:6093 expr.c:1213 read.c:1783
msgid "expected symbol name"
msgstr "nom de symbole attendu"
@@ -1233,14 +1259,14 @@ msgstr "expression absolue erronée ou irréductible"
msgid "missing size expression"
msgstr "expression de la taille manquante"
-#: config/obj-macho.c:506 config/tc-ia64.c:1115 read.c:1827
+#: config/obj-macho.c:506 config/tc-ia64.c:1116 read.c:1827
#, c-format
msgid "size (%ld) out of range, ignored"
msgstr "taille (%ld) hors limite, ignoré"
-#: config/obj-macho.c:516 config/tc-score.c:6248 dwarf2dbg.c:1309 ecoff.c:3346
-#: read.c:1839 read.c:1942 read.c:2693 read.c:3266 read.c:3772 symbols.c:495
-#: symbols.c:590
+#: config/obj-macho.c:516 config/tc-score.c:6248 dwarf2dbg.c:1394 ecoff.c:3346
+#: read.c:1839 read.c:1942 read.c:2693 read.c:3266 read.c:3860 symbols.c:515
+#: symbols.c:610
#, c-format
msgid "symbol `%s' is already defined"
msgstr "symbole « %s » est déjà défini"
@@ -1393,853 +1419,955 @@ msgstr "Un seul pseudo opérateur .copyright par fichier !"
msgid "attaching copyright header %s: %s"
msgstr "attachement de l'en-tête de copyright %s: %s"
-#: config/tc-aarch64.c:374
+#: config/tc-aarch64.c:381
msgid "integer 32-bit register expected"
msgstr "registre entier 32 bits attendu"
-#: config/tc-aarch64.c:377
+#: config/tc-aarch64.c:384
msgid "integer 64-bit register expected"
msgstr "registre entier 64 bits attendu"
-#: config/tc-aarch64.c:380
+#: config/tc-aarch64.c:387
msgid "integer register expected"
msgstr "registre entier attendu"
-#: config/tc-aarch64.c:383
+#: config/tc-aarch64.c:390
msgid "64-bit integer or SP register expected"
msgstr "registre entier 64 bits ou SP attendu"
-#: config/tc-aarch64.c:386 config/tc-mcore.c:840 config/tc-mcore.c:1356
+#: config/tc-aarch64.c:393 config/tc-mcore.c:840 config/tc-mcore.c:1356
#: config/tc-mcore.c:1410
msgid "base register expected"
msgstr "registre de base attendu"
-#: config/tc-aarch64.c:389
+#: config/tc-aarch64.c:396
msgid "integer or zero register expected"
msgstr "registre entier ou zéro attendu"
-#: config/tc-aarch64.c:392
+#: config/tc-aarch64.c:399
msgid "offset register expected"
msgstr "registre de décalage attendu"
-#: config/tc-aarch64.c:395
+#: config/tc-aarch64.c:402
msgid "integer or SP register expected"
msgstr "registre entier ou SP attendu"
-#: config/tc-aarch64.c:398
+#: config/tc-aarch64.c:405
msgid "integer, zero or SP register expected"
msgstr "registre entier, zéro ou SP attendu"
-#: config/tc-aarch64.c:401
+#: config/tc-aarch64.c:408
msgid "8-bit SIMD scalar register expected"
msgstr "registre scalaire SIMD 8 bits attendu"
-#: config/tc-aarch64.c:404
+#: config/tc-aarch64.c:411
msgid "16-bit SIMD scalar or floating-point half precision register expected"
msgstr "registre scalaire SIMD 16 bits ou demi précision flottant attendu"
-#: config/tc-aarch64.c:408
+#: config/tc-aarch64.c:415
msgid "32-bit SIMD scalar or floating-point single precision register expected"
msgstr "registre scalaire SIMD 32 bits ou simple précision flottant attendu"
-#: config/tc-aarch64.c:412
+#: config/tc-aarch64.c:419
msgid "64-bit SIMD scalar or floating-point double precision register expected"
msgstr "registre scalaire SIMD 64 bits ou double précision flottant attendu"
-#: config/tc-aarch64.c:416
+#: config/tc-aarch64.c:423
msgid "128-bit SIMD scalar or floating-point quad precision register expected"
msgstr "registre scalaire SIMD 128 bits ou quadruple précision flottant attendu"
-#: config/tc-aarch64.c:421 config/tc-arm.c:4746
+#: config/tc-aarch64.c:428 config/tc-arm.c:4750
msgid "register expected"
msgstr "registre attendu"
#. any [BHSDQ]P FP
-#: config/tc-aarch64.c:424
+#: config/tc-aarch64.c:431
msgid "SIMD scalar or floating-point register expected"
msgstr "registre scalaire SIMD ou flottant attendu"
#. any V reg
-#: config/tc-aarch64.c:427
+#: config/tc-aarch64.c:434
msgid "vector register expected"
msgstr "registre vectoriel attendu"
-#: config/tc-aarch64.c:430
+#: config/tc-aarch64.c:437
msgid "SVE vector register expected"
msgstr "registre vectoriel SVE attendu"
-#: config/tc-aarch64.c:433
+#: config/tc-aarch64.c:440
msgid "SVE predicate register expected"
msgstr "Registre de prédicat SVE attendu"
-#: config/tc-aarch64.c:436
+#: config/tc-aarch64.c:443
#, c-format
msgid "invalid register type %d"
msgstr "type de registre %d invalide"
-#: config/tc-aarch64.c:611 config/tc-aarch64.c:613 config/tc-arm.c:1196
+#: config/tc-aarch64.c:618 config/tc-aarch64.c:620 config/tc-arm.c:1201
#: config/tc-score.c:6492 expr.c:1379 read.c:2675
msgid "bad expression"
msgstr "expression erronée"
-#: config/tc-aarch64.c:624 config/tc-sparc.c:3376
+#: config/tc-aarch64.c:631 config/tc-sparc.c:3376
msgid "bad segment"
msgstr "segment erroné"
-#: config/tc-aarch64.c:659 config/tc-arm.c:1262
-msgid "invalid floating point number"
-msgstr "nombre en virgule flottante invalide"
-
-#: config/tc-aarch64.c:890
+#: config/tc-aarch64.c:849
#, c-format
msgid "bad size %d in vector width specifier"
msgstr "mauvaise taille %d dans le spécificateur de largeur de vecteur"
-#: config/tc-aarch64.c:923
+#: config/tc-aarch64.c:882
#, c-format
msgid "unexpected character `%c' in element size"
msgstr "caractère « %c » inattendu dans la taille d'élément"
-#: config/tc-aarch64.c:925
+#: config/tc-aarch64.c:884
msgid "missing element size"
msgstr "taille d'élément manquante"
-#: config/tc-aarch64.c:934
+#: config/tc-aarch64.c:893
#, c-format
msgid "invalid element size %d and vector size combination %c"
msgstr "taille d'élément %d invalide et combinaison %c de taille de vecteur"
-#: config/tc-aarch64.c:969
+#: config/tc-aarch64.c:928
#, c-format
msgid "unexpected character `%c' in predication type"
msgstr "caractère « %c » inattendu dans le prédicat de type"
-#: config/tc-aarch64.c:972
+#: config/tc-aarch64.c:931
msgid "missing predication type"
msgstr "type de prédicat manquant"
-#: config/tc-aarch64.c:1067
+#: config/tc-aarch64.c:1026
msgid "this type of register can't be indexed"
msgstr "ce type de registre ne peut pas être indexé"
-#: config/tc-aarch64.c:1073
+#: config/tc-aarch64.c:1032
msgid "index not allowed inside register list"
msgstr "index pas permis dans une liste de registres"
-#: config/tc-aarch64.c:1084 config/tc-aarch64.c:2054 config/tc-aarch64.c:2256
-#: config/tc-arm.c:1816 config/tc-arm.c:4022 config/tc-arm.c:5196
-#: config/tc-arm.c:7335
+#: config/tc-aarch64.c:1043 config/tc-aarch64.c:2013 config/tc-aarch64.c:2215
+#: config/tc-arm.c:1778 config/tc-arm.c:4000 config/tc-arm.c:5204
+#: config/tc-arm.c:7345
msgid "constant expression required"
msgstr "expression constante attendue"
#. Indexed vector register expected.
-#: config/tc-aarch64.c:1096
+#: config/tc-aarch64.c:1055
msgid "indexed vector register expected"
msgstr "registre vectoriel indexé attendu"
-#: config/tc-aarch64.c:1103
+#: config/tc-aarch64.c:1062
msgid "invalid use of vector register"
msgstr "mauvaise utilisation d'un registre vectoriel"
-#: config/tc-aarch64.c:1195 config/tc-arm.c:2132
+#: config/tc-aarch64.c:1154 config/tc-arm.c:2110
msgid "expecting {"
msgstr "{ attendu"
-#: config/tc-aarch64.c:1220
+#: config/tc-aarch64.c:1179
msgid "invalid vector register in list"
msgstr "registre vectoriel invalide dans la liste"
-#: config/tc-aarch64.c:1227
+#: config/tc-aarch64.c:1186
msgid "invalid scalar register in list"
msgstr "registre scalaire invalide dans la liste"
-#: config/tc-aarch64.c:1240
+#: config/tc-aarch64.c:1199
msgid "invalid range in vector register list"
msgstr "limite invalide dans la liste des registres vectoriels"
-#: config/tc-aarch64.c:1253
+#: config/tc-aarch64.c:1212
msgid "type mismatch in vector register list"
msgstr "mauvaise concordance de type dans la liste des registres vectoriels"
-#: config/tc-aarch64.c:1270
+#: config/tc-aarch64.c:1229
msgid "end of vector register list not found"
msgstr "fin de la liste des registres vectoriels pas trouvée"
-#: config/tc-aarch64.c:1287
+#: config/tc-aarch64.c:1246
msgid "constant expression required."
msgstr "expression constante attendue."
-#: config/tc-aarch64.c:1297
+#: config/tc-aarch64.c:1256
msgid "expected index"
msgstr "index attendu"
-#: config/tc-aarch64.c:1304
+#: config/tc-aarch64.c:1263
msgid "too many registers in vector register list"
msgstr "trop de registres dans la liste des registres vectoriels"
-#: config/tc-aarch64.c:1309
+#: config/tc-aarch64.c:1268
msgid "empty vector register list"
msgstr "liste de registres vectoriels vide"
-#: config/tc-aarch64.c:1331 config/tc-arm.c:2568
+#: config/tc-aarch64.c:1290 config/tc-arm.c:2546
#, c-format
msgid "ignoring attempt to redefine built-in register '%s'"
msgstr "ignore la tentative de redéfinir le registre intégré « %s »"
-#: config/tc-aarch64.c:1337 config/tc-arm.c:2573
+#: config/tc-aarch64.c:1296 config/tc-arm.c:2551
#, c-format
msgid "ignoring redefinition of register alias '%s'"
msgstr "ignore la redéfinition de l'alias du registre « %s »"
-#: config/tc-aarch64.c:1382 config/tc-arm.c:2638
+#: config/tc-aarch64.c:1341 config/tc-arm.c:2616
#, c-format
msgid "unknown register '%s' -- .req ignored"
msgstr "registre « %s » inconnu -- .req ignoré"
-#: config/tc-aarch64.c:1440 config/tc-arm.c:2846
+#: config/tc-aarch64.c:1399 config/tc-arm.c:2824
msgid "invalid syntax for .req directive"
msgstr "syntaxe invalide pour le directive .req"
-#: config/tc-aarch64.c:1465 config/tc-arm.c:2884
+#: config/tc-aarch64.c:1424 config/tc-arm.c:2862
msgid "invalid syntax for .unreq directive"
msgstr "syntaxe invalide pour le directive .unreq"
-#: config/tc-aarch64.c:1471 config/tc-arm.c:2891
+#: config/tc-aarch64.c:1430 config/tc-arm.c:2869
#, c-format
msgid "unknown register alias '%s'"
msgstr "alias de registre « %s » inconnu"
-#: config/tc-aarch64.c:1473
+#: config/tc-aarch64.c:1432
#, c-format
msgid "ignoring attempt to undefine built-in register '%s'"
msgstr "ignore la tentative de supprimer la définition du registre intégré « %s »"
-#: config/tc-aarch64.c:1797 config/tc-arm.c:3634 config/tc-arm.c:3661
-#: config/tc-arm.c:3674
+#: config/tc-aarch64.c:1756 config/tc-arm.c:3612 config/tc-arm.c:3639
+#: config/tc-arm.c:3652
msgid "literal pool overflow"
msgstr "débordement du pool de littéraux"
-#: config/tc-aarch64.c:1979 config/tc-aarch64.c:6398 config/tc-arm.c:3895
-#: config/tc-arm.c:7766
+#: config/tc-aarch64.c:1938 config/tc-aarch64.c:6917 config/tc-arm.c:3873
+#: config/tc-arm.c:7778
msgid "unrecognized relocation suffix"
msgstr "suffixe de réadressage non reconnu"
-#: config/tc-aarch64.c:1981
+#: config/tc-aarch64.c:1940
msgid "unimplemented relocation suffix"
msgstr "suffixe de réadressage non implémenté"
-#: config/tc-aarch64.c:2223 config/tc-aarch64.c:2414 config/tc-aarch64.c:2458
+#: config/tc-aarch64.c:2182 config/tc-aarch64.c:2373 config/tc-aarch64.c:2417
#: config/tc-csky.c:2314
msgid "immediate operand required"
msgstr "opérande immédiat requis"
-#: config/tc-aarch64.c:2232
+#: config/tc-aarch64.c:2191
msgid "missing immediate expression"
msgstr "expression immédiate manquante"
-#: config/tc-aarch64.c:2438 config/tc-aarch64.c:6221 config/tc-aarch64.c:6241
+#: config/tc-aarch64.c:2397 config/tc-aarch64.c:6740 config/tc-aarch64.c:6760
msgid "invalid floating-point constant"
msgstr "constante en virgule flottante erronée"
-#: config/tc-aarch64.c:3241 config/tc-arm.c:5536 config/tc-arm.c:5546
+#: config/tc-aarch64.c:3200 config/tc-arm.c:5544 config/tc-arm.c:5554
msgid "shift expression expected"
msgstr "expression de décalage attendu"
-#: config/tc-aarch64.c:3249
+#: config/tc-aarch64.c:3208
msgid "shift operator expected"
msgstr "opérateur de décalage attendu"
-#: config/tc-aarch64.c:3257
+#: config/tc-aarch64.c:3216
msgid "invalid use of 'MSL'"
msgstr "utilisation invalide de « MSL »"
-#: config/tc-aarch64.c:3265
+#: config/tc-aarch64.c:3224
msgid "invalid use of 'MUL'"
msgstr "utilisation invalide de « MUL »"
-#: config/tc-aarch64.c:3274
+#: config/tc-aarch64.c:3233
msgid "extending shift is not permitted"
msgstr "il n'est pas permis d'étendre le décalage"
-#: config/tc-aarch64.c:3282
+#: config/tc-aarch64.c:3241
msgid "'ROR' shift is not permitted"
msgstr "le décalage « ROR » n'est pas permis"
-#: config/tc-aarch64.c:3290
+#: config/tc-aarch64.c:3249
msgid "only 'LSL' shift is permitted"
msgstr "seul le décalage « LSL » est permis"
-#: config/tc-aarch64.c:3298
+#: config/tc-aarch64.c:3257
msgid "only 'MUL' is permitted"
msgstr "seul « MUL » est permis"
-#: config/tc-aarch64.c:3316
+#: config/tc-aarch64.c:3275
msgid "only 'MUL VL' is permitted"
msgstr "seul « MUL VL » est permis"
-#: config/tc-aarch64.c:3324
+#: config/tc-aarch64.c:3283
msgid "invalid shift for the register offset addressing mode"
msgstr "décalage invalide pour le mode d'adressage de l'offset du registre"
-#: config/tc-aarch64.c:3332
+#: config/tc-aarch64.c:3291
msgid "invalid shift operator"
msgstr "opérateur de décalage invalide"
-#: config/tc-aarch64.c:3366
+#: config/tc-aarch64.c:3325
msgid "missing shift amount"
msgstr "longueur de décalage manquante"
-#: config/tc-aarch64.c:3373
+#: config/tc-aarch64.c:3332
msgid "constant shift amount required"
msgstr "longueur de décalage constante requise"
-#: config/tc-aarch64.c:3382
+#: config/tc-aarch64.c:3341
msgid "shift amount out of range 0 to 63"
msgstr "la longueur du décalage n'est pas entre 0 et 63"
-#: config/tc-aarch64.c:3432
+#: config/tc-aarch64.c:3391
msgid "unexpected shift operator"
msgstr "opérateur de décalage inattendu"
-#: config/tc-aarch64.c:3468
+#: config/tc-aarch64.c:3427
msgid "unexpected register in the immediate operand"
msgstr "registre inattendu dans l'opérande immédiat"
-#: config/tc-aarch64.c:3493
+#: config/tc-aarch64.c:3452
msgid "integer register expected in the extended/shifted operand register"
msgstr "registre entier attendu dans le registre opérande étendu/décalé"
-#: config/tc-aarch64.c:3528 config/tc-aarch64.c:3666 config/tc-aarch64.c:3799
-#: config/tc-aarch64.c:3983 config/tc-aarch64.c:4025
+#: config/tc-aarch64.c:3487 config/tc-aarch64.c:3625 config/tc-aarch64.c:3758
+#: config/tc-aarch64.c:3958 config/tc-aarch64.c:4000
msgid "unknown relocation modifier"
msgstr "modificateur de réadressage inconnu"
-#: config/tc-aarch64.c:3535 config/tc-aarch64.c:3685 config/tc-aarch64.c:3806
-#: config/tc-aarch64.c:3990 config/tc-aarch64.c:4032
+#: config/tc-aarch64.c:3494 config/tc-aarch64.c:3644 config/tc-aarch64.c:3765
+#: config/tc-aarch64.c:3965 config/tc-aarch64.c:4007
msgid "this relocation modifier is not allowed on this instruction"
msgstr "ce modificateur de réadressage n'est pas permis sur cette instruction"
-#: config/tc-aarch64.c:3694 config/tc-aarch64.c:3818
+#: config/tc-aarch64.c:3653 config/tc-aarch64.c:3777
msgid "invalid relocation expression"
msgstr "expression de réadressage invalide"
-#: config/tc-aarch64.c:3711
+#: config/tc-aarch64.c:3670
msgid "invalid address"
msgstr "adresse invalide"
-#: config/tc-aarch64.c:3768
+#: config/tc-aarch64.c:3727
msgid "invalid use of 32-bit register offset"
msgstr "utilisation invalide d'un décalage de registre 32 bits"
-#: config/tc-aarch64.c:3777
+#: config/tc-aarch64.c:3736
msgid "offset has different size from base"
msgstr "le décalage à une taille différente de la base"
-#: config/tc-aarch64.c:3783
+#: config/tc-aarch64.c:3742
msgid "invalid use of 64-bit register offset"
msgstr "utilisation invalide d'un décalage de registre 64 bits"
#. [Xn],#expr
-#: config/tc-aarch64.c:3832 config/tc-aarch64.c:3890
+#: config/tc-aarch64.c:3791 config/tc-aarch64.c:3849
msgid "invalid expression in the address"
msgstr "expression invalide dans l'adresse"
-#: config/tc-aarch64.c:3846 config/tc-arm.c:6135 config/tc-arm.c:6728
+#: config/tc-aarch64.c:3805 config/tc-arm.c:6143 config/tc-arm.c:6736
msgid "']' expected"
msgstr "« ] » attendu"
-#: config/tc-aarch64.c:3854
+#: config/tc-aarch64.c:3813
msgid "register offset not allowed in pre-indexed addressing mode"
msgstr "le décalage de registre n'est pas permis en mode d'adressage pré indexé"
-#: config/tc-aarch64.c:3869 config/tc-arm.c:6171
+#: config/tc-aarch64.c:3828 config/tc-arm.c:6179
msgid "cannot combine pre- and post-indexing"
msgstr "ne peut combiner pré et post indexation"
#. Reject [Rn]!
-#: config/tc-aarch64.c:3914
+#: config/tc-aarch64.c:3873
msgid "missing offset in the pre-indexed address"
msgstr "offset manquant dans l'adressage pré indexé"
-#: config/tc-aarch64.c:4157
+#: config/tc-aarch64.c:4132
msgid "unknown or missing option to PSB/TSB"
msgstr "option inconnue ou manquante pour PSB/TSB"
-#: config/tc-aarch64.c:4165
+#: config/tc-aarch64.c:4140
msgid "the specified option is not accepted for PSB/TSB"
msgstr "l'option spécifiée n'est pas acceptée pour PSB/TSB"
-#: config/tc-aarch64.c:4192 config/tc-aarch64.c:4206
+#: config/tc-aarch64.c:4167 config/tc-aarch64.c:4181
msgid "unknown option to BTI"
msgstr "option inconnue pour BTI"
-#: config/tc-aarch64.c:4270
+#: config/tc-aarch64.c:4210
+msgid "missing ZA tile element size separator"
+msgstr "séparateur manquant dans la taille des éléments d'une tuile ZA"
+
+#: config/tc-aarch64.c:4266
+msgid "invalid ZA tile register number, expected za0"
+msgstr "numéro de registre invalide pour la tuile ZA, za0 attendu"
+
+#: config/tc-aarch64.c:4273
+msgid "invalid ZA tile register number, expected za0-za1"
+msgstr "numéro de registre invalide pour la tuile ZA, za0-za1 attendu"
+
+#. For the 32-bit variant: is the name of the ZA tile ZA0-ZA3.
+#: config/tc-aarch64.c:4281
+msgid "invalid ZA tile register number, expected za0-za3"
+msgstr "numéro de registre invalide pour la tuile ZA, za0-za3 attendu"
+
+#. For the 64-bit variant: is the name of the ZA tile ZA0-ZA7
+#: config/tc-aarch64.c:4289
+msgid "invalid ZA tile register number, expected za0-za7"
+msgstr "numéro de registre invalide pour la tuile ZA, za0-za7 attendu"
+
+#: config/tc-aarch64.c:4294
+msgid "invalid ZA tile element size, allowed b, h, s and d"
+msgstr "taille d'élément de la tuile ZA invalide, sont autorisés : b, h, s et d"
+
+#: config/tc-aarch64.c:4340
+msgid "expected '['"
+msgstr "« [ » attendu"
+
+#: config/tc-aarch64.c:4349
+msgid "expected vector select register W12-W15"
+msgstr "registre de sélection de vecteur W12-W15 attendu"
+
+#: config/tc-aarch64.c:4356
+msgid "expected ','"
+msgstr "« , » attendu"
+
+#: config/tc-aarch64.c:4362
+msgid "index offset immediate expected"
+msgstr "immédiat de décalage d'index attendu"
+
+#: config/tc-aarch64.c:4368
+msgid "expected ']'"
+msgstr "« ] » attendu"
+
+#: config/tc-aarch64.c:4443
+msgid "invalid ZA tile element size, allowed b, h, s, d and q"
+msgstr "taille d'élément de tuile ZA invalide, sont autorisés : b, h, s, d et q"
+
+#: config/tc-aarch64.c:4451
+msgid "ZA tile vector out of range"
+msgstr "vecteur de tuile ZA hors limite"
+
+#: config/tc-aarch64.c:4463
+msgid "index offset out of range"
+msgstr "offset d'index hors limite"
+
+#: config/tc-aarch64.c:4484 config/tc-aarch64.c:4579
+msgid "expected '{'"
+msgstr "« { » attendu"
+
+#: config/tc-aarch64.c:4497 config/tc-aarch64.c:4592
+msgid "expected '}'"
+msgstr "« } » attendu"
+
+#: config/tc-aarch64.c:4541 config/tc-aarch64.c:4556
+msgid "wrong ZA tile element format"
+msgstr "mauvais format d'élément de tuile ZA"
+
+#: config/tc-aarch64.c:4623
+msgid "expected ZA array"
+msgstr "tableau ZA attendu"
+
+#: config/tc-aarch64.c:4632 config/tc-aarch64.c:8993 config/tc-arm.c:28704
+#: config/tc-arm.c:28719 config/tc-arm.c:28734 config/tc-arm.c:28745
+#: config/tc-arm.c:28768 config/tc-arm.c:29618 config/tc-moxie.c:714
+#: config/tc-pj.c:449 config/tc-sh.c:3728
+msgid "offset out of range"
+msgstr "offset hors limite"
+
+#: config/tc-aarch64.c:4659
+msgid "expected SM or ZA operand"
+msgstr "opérande SM ou ZA> attendu"
+
+#: config/tc-aarch64.c:4708
+msgid "wrong predicate register element size, allowed b, h, s and d"
+msgstr "mauvaise taille d'élément de registre de prédicat, sont autorisés : b, h, s et d"
+
+#: config/tc-aarch64.c:4717
+msgid "element index out of range for given variant"
+msgstr "index d'élément hors limite pour la variante donnée"
+
+#: config/tc-aarch64.c:4781
#, c-format
msgid "selected processor does not support PSTATE field name '%s'"
msgstr "le processeur choisi ne supporte pas le nom de champ PSTATE « %s »"
-#: config/tc-aarch64.c:4275 config/tc-aarch64.c:4317
+#: config/tc-aarch64.c:4786 config/tc-aarch64.c:4828
#, c-format
msgid "selected processor does not support system register name '%s'"
msgstr "le processeur choisi ne supporte pas le nom de registre système « %s »"
-#: config/tc-aarch64.c:4278 config/tc-aarch64.c:4320
+#: config/tc-aarch64.c:4789 config/tc-aarch64.c:4831
#, c-format
msgid "system register name '%s' is deprecated and may be removed in a future release"
msgstr "le nom de registre système « %s » est déprécié et pourrait être supprimé dans une version ultérieure"
-#: config/tc-aarch64.c:4362
+#: config/tc-aarch64.c:4873
msgid "immediate value out of range "
msgstr "valeur immédiate hors limite "
-#: config/tc-aarch64.c:4876
+#: config/tc-aarch64.c:5392
#, c-format
msgid "Info: "
msgstr "Info: "
-#: config/tc-aarch64.c:4911 config/tc-score.c:2752 config/tc-score.c:6481
+#: config/tc-aarch64.c:5420
+#, c-format
+msgid "this `%s' should have an immediately preceding `%s' -- `%s'"
+msgstr "ce « %s » devrait avoir un immédiat précédant « %s » — « %s »"
+
+#: config/tc-aarch64.c:5426
+#, c-format
+msgid "the preceding `%s' should be followed by `%s` rather than `%s` -- `%s'"
+msgstr "le « %s » précédent devrait être suivi par « %s » plutôt que « %s » — « %s »"
+
+#: config/tc-aarch64.c:5440 config/tc-score.c:2752 config/tc-score.c:6481
#, c-format
msgid "%s -- `%s'"
msgstr "%s -- « %s »"
-#: config/tc-aarch64.c:4913
+#: config/tc-aarch64.c:5442
#, c-format
msgid "%s at operand %d -- `%s'"
msgstr "%s à l'opérande %d — « %s »"
-#: config/tc-aarch64.c:4919
+#: config/tc-aarch64.c:5448
#, c-format
msgid "operand %d must be %s -- `%s'"
msgstr "l'opérande %d doit être %s — « %s »"
-#: config/tc-aarch64.c:4925
+#: config/tc-aarch64.c:5454
#, c-format
msgid "operand mismatch -- `%s'"
msgstr "opérandes ne concordent pas — « %s »"
#. Print the hint.
-#: config/tc-aarch64.c:4985
+#: config/tc-aarch64.c:5514
msgid " did you mean this?"
msgstr " vouliez-vous dire ceci ?"
-#: config/tc-aarch64.c:4988 config/tc-aarch64.c:5015
+#: config/tc-aarch64.c:5517 config/tc-aarch64.c:5544
#, c-format
msgid " %s"
msgstr " %s"
-#: config/tc-aarch64.c:4993
+#: config/tc-aarch64.c:5522
msgid " other valid variant(s):"
msgstr " autre(s) variante(s) valide(s) :"
-#: config/tc-aarch64.c:5022
+#: config/tc-aarch64.c:5551
+#, c-format
+msgid "operand %d must have the same immediate value as operand 1 -- `%s'"
+msgstr "l'opérande %d doit avoir la même valeur immédiate que l'opérande 1 — « %s »"
+
+#: config/tc-aarch64.c:5557
#, c-format
msgid "operand %d must be the same register as operand 1 -- `%s'"
msgstr "l'opérande %d doit être le même registre que l'opérande 1 — « %s »"
-#: config/tc-aarch64.c:5028
+#: config/tc-aarch64.c:5563
#, c-format
msgid "%s out of range %d to %d at operand %d -- `%s'"
msgstr "%s hors des limites %d à %d dans l'opérande %d — « %s »"
-#: config/tc-aarch64.c:5029 config/tc-aarch64.c:5033 config/tc-aarch64.c:7041
+#: config/tc-aarch64.c:5564 config/tc-aarch64.c:5568 config/tc-aarch64.c:7666
msgid "immediate value"
msgstr "valeur immédiate"
-#: config/tc-aarch64.c:5032
+#: config/tc-aarch64.c:5567
#, c-format
msgid "%s must be %d at operand %d -- `%s'"
msgstr "%s doit être %d à l'opérande %d — « %s »"
-#: config/tc-aarch64.c:5039
+#: config/tc-aarch64.c:5574
#, c-format
msgid "invalid number of registers in the list; only 1 register is expected at operand %d -- `%s'"
msgstr "nombre de registres invalide dans la liste, seulement 1 registre est attendu à l'opérande %d — « %s »"
-#: config/tc-aarch64.c:5043
+#: config/tc-aarch64.c:5578
#, c-format
msgid "invalid number of registers in the list; %d registers are expected at operand %d -- `%s'"
msgstr "nombre de registres invalide dans la liste, %d registres sont attendus à l'opérande %d — « %s »"
-#: config/tc-aarch64.c:5049
+#: config/tc-aarch64.c:5584
#, c-format
msgid "immediate value must be a multiple of %d at operand %d -- `%s'"
msgstr "la valeur immédiate doit être un multiple de %d à l'opérande %d — « %s »"
-#: config/tc-aarch64.c:5367
+#: config/tc-aarch64.c:5885
msgid "bad vector arrangement type"
msgstr "mauvais type d'arrangement vectoriel"
-#: config/tc-aarch64.c:5496
+#: config/tc-aarch64.c:6014
msgid "the specified relocation type is not allowed for MOVK"
msgstr "le type de réadressage spécifié n'est pas permis pour MOVK"
-#: config/tc-aarch64.c:5544 config/tc-aarch64.c:5555
+#: config/tc-aarch64.c:6062 config/tc-aarch64.c:6073
msgid "the specified relocation type is not allowed for 32-bit register"
msgstr "le type de réadressage spécifié n'est pas permis avec un registre 32 bits"
-#: config/tc-aarch64.c:5666
+#: config/tc-aarch64.c:6184
msgid "relocation qualifier does not match instruction size"
msgstr "le qualificatif de réadressage ne correspond pas à la taille de l'instruction"
-#: config/tc-aarch64.c:5755
+#: config/tc-aarch64.c:6273
msgid "comma expected between operands"
msgstr "virgule attendue entre les opérandes"
-#: config/tc-aarch64.c:5786
+#: config/tc-aarch64.c:6304
msgid "invalid Rt register number in 64-byte load/store"
msgstr "numéro de registre Rt invalide dans un load/store sur 64 octets"
-#: config/tc-aarch64.c:5906
+#: config/tc-aarch64.c:6425
msgid "the top half of a 128-bit FP/SIMD register is expected"
msgstr "la moitié supérieure d'un registre FP/SIMD 128 bits est attendue"
-#: config/tc-aarch64.c:5981 config/tc-arm.c:2241 config/tc-arm.c:2286
+#: config/tc-aarch64.c:6500 config/tc-arm.c:2219 config/tc-arm.c:2264
#: config/tc-h8300.c:1042
msgid "invalid register list"
msgstr "liste de registres invalide"
-#: config/tc-aarch64.c:5988
+#: config/tc-aarch64.c:6507
msgid "expected element type rather than vector type"
msgstr "type élément attendu plutôt qu'un type vectoriel"
-#: config/tc-aarch64.c:6009
+#: config/tc-aarch64.c:6528
msgid "missing type suffix"
msgstr "suffixe de type manquant"
-#: config/tc-aarch64.c:6028
+#: config/tc-aarch64.c:6547
msgid "C0 - C15 expected"
msgstr "C0 - C15 attendu"
-#: config/tc-aarch64.c:6135 config/tc-aarch64.c:6159
+#: config/tc-aarch64.c:6654 config/tc-aarch64.c:6678
msgid "immediate zero expected"
msgstr "zéro immédiat attendu"
-#: config/tc-aarch64.c:6256
+#: config/tc-aarch64.c:6775
msgid "shift not allowed for bitmask immediate"
msgstr "décalage pas permis pour un champ de bits immédiat"
-#: config/tc-aarch64.c:6310
+#: config/tc-aarch64.c:6829
msgid "can't mix relocation modifier with explicit shift"
msgstr "ne peut mélanger un modificateur de réadressage avec un décalage explicite"
-#: config/tc-aarch64.c:6359 config/tc-arm.c:15901 config/tc-arm.c:15926
-#: config/tc-arm.c:15937 config/tc-arm.c:15944
+#: config/tc-aarch64.c:6878 config/tc-arm.c:15929 config/tc-arm.c:15954
+#: config/tc-arm.c:15965 config/tc-arm.c:15972
msgid "invalid condition"
msgstr "condition invalide"
-#: config/tc-aarch64.c:6385
+#: config/tc-aarch64.c:6904
msgid "invalid pc-relative address"
msgstr "adresse relative au PC invalide"
#. Only permit "=value" in the literal load instructions.
#. The literal will be generated by programmer_friendly_fixup.
-#: config/tc-aarch64.c:6393
+#: config/tc-aarch64.c:6912
msgid "invalid use of \"=immediate\""
msgstr "utilisation invalide de « =immediate »"
-#: config/tc-aarch64.c:6458 config/tc-aarch64.c:6490 config/tc-aarch64.c:6508
-#: config/tc-aarch64.c:6532 config/tc-aarch64.c:6552 config/tc-aarch64.c:6571
-#: config/tc-aarch64.c:6594 config/tc-aarch64.c:6630 config/tc-aarch64.c:6637
-#: config/tc-aarch64.c:6665 config/tc-aarch64.c:6685 config/tc-aarch64.c:6710
-#: config/tc-aarch64.c:6728 config/tc-aarch64.c:6736 config/tc-aarch64.c:6753
-#: config/tc-aarch64.c:6777
+#: config/tc-aarch64.c:6977 config/tc-aarch64.c:7009 config/tc-aarch64.c:7027
+#: config/tc-aarch64.c:7051 config/tc-aarch64.c:7071 config/tc-aarch64.c:7090
+#: config/tc-aarch64.c:7113 config/tc-aarch64.c:7179 config/tc-aarch64.c:7186
+#: config/tc-aarch64.c:7214 config/tc-aarch64.c:7235 config/tc-aarch64.c:7260
+#: config/tc-aarch64.c:7278 config/tc-aarch64.c:7286 config/tc-aarch64.c:7303
+#: config/tc-aarch64.c:7327
msgid "invalid addressing mode"
msgstr "mode d'adressage invalide"
-#: config/tc-aarch64.c:6474
+#: config/tc-aarch64.c:6993
msgid "the optional immediate offset can only be 0"
msgstr "l'offset immédiat facultatif ne peut être que zéro"
-#: config/tc-aarch64.c:6513 config/tc-aarch64.c:6537 config/tc-aarch64.c:6557
+#: config/tc-aarch64.c:7032 config/tc-aarch64.c:7056 config/tc-aarch64.c:7076
msgid "relocation not allowed"
msgstr "réadressage non permis"
-#: config/tc-aarch64.c:6604
+#: config/tc-aarch64.c:7123
msgid "writeback value must be an immediate constant"
msgstr "la valeur de réécriture doit être une constante immédiate"
+#: config/tc-aarch64.c:7134 config/tc-aarch64.c:7353
+msgid "unknown or missing PSTATE field name"
+msgstr "nom de champ PSTATE inconnu ou manquant"
+
#. Make sure this has priority over
#. "invalid addressing mode".
-#: config/tc-aarch64.c:6645
+#: config/tc-aarch64.c:7194
msgid "constant offset required"
msgstr "décalage constant requit"
-#: config/tc-aarch64.c:6789
+#: config/tc-aarch64.c:7339
msgid "unknown or missing system register name"
msgstr "nom de registre système inconnu ou invalide"
-#: config/tc-aarch64.c:6801
-msgid "unknown or missing PSTATE field name"
-msgstr "nom de champ PSTATE inconnu ou manquant"
-
-#: config/tc-aarch64.c:6833
+#: config/tc-aarch64.c:7387
msgid "unknown or missing operation name"
msgstr "nom d'opération inconnu ou manquant"
-#: config/tc-aarch64.c:6846
+#: config/tc-aarch64.c:7400
msgid "the specified option is not accepted in ISB"
msgstr "l'option spécifiée n'est pas acceptée dans ISB"
-#: config/tc-aarch64.c:6858 config/tc-aarch64.c:6875
+#: config/tc-aarch64.c:7412 config/tc-aarch64.c:7429
msgid "the specified option is not accepted in DSB"
msgstr "l'option spécifiée n'est pas acceptée dans DSB"
-#: config/tc-aarch64.c:6889
+#: config/tc-aarch64.c:7443
msgid "immediate value must be 16, 20, 24, 28"
msgstr "la valeur immédiate doit être 16, 20, 24, 28"
-#: config/tc-aarch64.c:6919 config/tc-aarch64.c:8132 config/tc-arm.c:8048
+#: config/tc-aarch64.c:7544 config/tc-aarch64.c:8792 config/tc-arm.c:8060
#, c-format
msgid "unhandled operand code %d"
msgstr "code d'opérande %d non géré"
-#: config/tc-aarch64.c:6961
+#: config/tc-aarch64.c:7586
msgid "unexpected comma before the omitted optional operand"
msgstr "virgule inattendue avant l'opérande facultatif omis"
-#: config/tc-aarch64.c:6989
+#: config/tc-aarch64.c:7614
msgid "unexpected characters following instruction"
msgstr "caractères inattendus après l'instruction"
-#: config/tc-aarch64.c:7067 config/tc-arm.c:5661 config/tc-arm.c:6279
-#: config/tc-arm.c:8852
+#: config/tc-aarch64.c:7692 config/tc-arm.c:5669 config/tc-arm.c:6287
+#: config/tc-arm.c:8874
msgid "constant expression expected"
msgstr "expression constante attendue"
-#: config/tc-aarch64.c:7074
+#: config/tc-aarch64.c:7699
msgid "literal pool insertion failed"
msgstr "insertion dans le pool littéral a échoué"
-#: config/tc-aarch64.c:7145 config/tc-aarch64.c:7160
+#: config/tc-aarch64.c:7770 config/tc-aarch64.c:7785
#, c-format
msgid "unpredictable transfer with writeback -- `%s'"
msgstr "transfert imprévisible avec réécriture — « %s »"
-#: config/tc-aarch64.c:7164 config/tc-aarch64.c:7178
+#: config/tc-aarch64.c:7789 config/tc-aarch64.c:7803
#, c-format
msgid "unpredictable load of register pair -- `%s'"
msgstr "chargement imprévisible d'une paire de registres — « %s »"
-#: config/tc-aarch64.c:7185 config/tc-aarch64.c:7198
+#: config/tc-aarch64.c:7810 config/tc-aarch64.c:7823
#, c-format
msgid "unpredictable: identical transfer and status registers --`%s'"
msgstr "imprévisible: registres de transfert et de statut identiques — « %s »"
-#: config/tc-aarch64.c:7193 config/tc-aarch64.c:7207
+#: config/tc-aarch64.c:7818 config/tc-aarch64.c:7832
#, c-format
msgid "unpredictable: identical base and status registers --`%s'"
msgstr "imprévisible: registres de base et de statut identiques — « %s »"
-#: config/tc-aarch64.c:7223
+#: config/tc-aarch64.c:7852
#, c-format
msgid "previous `%s' sequence has not been closed"
msgstr "la séquence « %s » précédente n'a pas été fermée"
-#: config/tc-aarch64.c:7302
+#: config/tc-aarch64.c:7937
+#, c-format
+msgid "unknown mnemonic -- `%s'"
+msgstr "mnémonique inconnue — « %s »"
+
+#: config/tc-aarch64.c:7947
#, c-format
msgid "unknown mnemonic `%s' -- `%s'"
msgstr "mnémonique inconnue « %s » — « %s »"
-#: config/tc-aarch64.c:7310
+#: config/tc-aarch64.c:7955
#, c-format
msgid "unexpected comma after the mnemonic name `%s' -- `%s'"
msgstr "virgule inattendue après le nom de mnémonique « %s » — « %s »"
-#: config/tc-aarch64.c:7368
+#: config/tc-aarch64.c:8013
#, c-format
msgid "selected processor does not support `%s'"
msgstr "le processeur choisi ne supporte pas « %s »"
-#: config/tc-aarch64.c:7791 config/tc-arm.c:28047
+#: config/tc-aarch64.c:8451 config/tc-arm.c:28125
msgid "GOT already in the symbol table"
msgstr "GOT est déjà dans la table des symboles"
-#: config/tc-aarch64.c:7954
+#: config/tc-aarch64.c:8614
msgid "immediate cannot be moved by a single instruction"
msgstr "une valeur immédiate ne peut pas être déplacée par une seule instruction"
-#: config/tc-aarch64.c:7998 config/tc-aarch64.c:8043 config/tc-aarch64.c:8069
-#: config/tc-arm.c:16445 config/tc-arm.c:18142 config/tc-arm.c:18722
-#: config/tc-arm.c:18749 config/tc-arm.c:19537 config/tc-arm.c:20372
-#: config/tc-arm.c:21389 config/tc-arm.c:21449 config/tc-metag.c:2443
+#: config/tc-aarch64.c:8658 config/tc-aarch64.c:8703 config/tc-aarch64.c:8729
+#: config/tc-arm.c:16473 config/tc-arm.c:18170 config/tc-arm.c:18750
+#: config/tc-arm.c:18777 config/tc-arm.c:19565 config/tc-arm.c:20400
+#: config/tc-arm.c:21423 config/tc-arm.c:21483 config/tc-metag.c:2443
#: config/tc-metag.c:2452 config/tc-metag.c:2491 config/tc-metag.c:2500
#: config/tc-metag.c:3019 config/tc-metag.c:3028
msgid "immediate out of range"
msgstr "valeur immédiate hors limite"
-#: config/tc-aarch64.c:8062 config/tc-metag.c:4654 config/tc-xtensa.c:4243
+#: config/tc-aarch64.c:8722 config/tc-metag.c:4654 config/tc-xtensa.c:4243
msgid "invalid immediate"
msgstr "immédiat invalide"
-#: config/tc-aarch64.c:8127 config/tc-tic6x.c:3855 config/tc-tic6x.c:3920
+#: config/tc-aarch64.c:8787 config/tc-tic6x.c:3855 config/tc-tic6x.c:3920
#: config/tc-tic6x.c:3947 config/tc-tic6x.c:3975
msgid "immediate offset out of range"
msgstr "offset immédiat est hors limite"
-#: config/tc-aarch64.c:8201 config/tc-arm.c:28385 config/tc-arm.c:28453
-#: config/tc-arm.c:28735
+#: config/tc-aarch64.c:8861 config/tc-arm.c:28463 config/tc-arm.c:28531
+#: config/tc-arm.c:28813
#, c-format
msgid "undefined symbol %s used as an immediate value"
msgstr "symbole non défini %s utilisé comme valeur immédiate"
-#: config/tc-aarch64.c:8213
+#: config/tc-aarch64.c:8873
msgid "pc-relative load offset not word aligned"
msgstr "offset de chargement relatif au PC n'est pas aligné sur un mot"
-#: config/tc-aarch64.c:8216
+#: config/tc-aarch64.c:8876
msgid "pc-relative load offset out of range"
msgstr "offset de chargement relatif au PC est hors limite"
-#: config/tc-aarch64.c:8228
+#: config/tc-aarch64.c:8888
msgid "pc-relative address offset out of range"
msgstr "offset d'adresse relatif au PC est hors limite"
-#: config/tc-aarch64.c:8240 config/tc-aarch64.c:8255
+#: config/tc-aarch64.c:8900 config/tc-aarch64.c:8915
msgid "conditional branch target not word aligned"
msgstr "cible du branchement conditionnel pas alignée sur un mot"
-#: config/tc-aarch64.c:8243 config/tc-aarch64.c:8258 config/tc-arm.c:29030
+#: config/tc-aarch64.c:8903 config/tc-aarch64.c:8918 config/tc-arm.c:29108
msgid "conditional branch out of range"
msgstr "branchement conditionnel hors limite"
-#: config/tc-aarch64.c:8271
+#: config/tc-aarch64.c:8931
msgid "branch target not word aligned"
msgstr "cible du branchement pas alignée sur un mot"
-#: config/tc-aarch64.c:8274 config/tc-arm.c:925 config/tc-arm.c:29836
+#: config/tc-aarch64.c:8934 config/tc-arm.c:929 config/tc-arm.c:29914
#: config/tc-mips.c:16069 config/tc-mips.c:16085 config/tc-mips.c:16175
msgid "branch out of range"
msgstr "branchement hors limite"
-#: config/tc-aarch64.c:8333 config/tc-arm.c:28626 config/tc-arm.c:28641
-#: config/tc-arm.c:28656 config/tc-arm.c:28667 config/tc-arm.c:28690
-#: config/tc-arm.c:29540 config/tc-moxie.c:714 config/tc-pj.c:449
-#: config/tc-sh.c:3728
-msgid "offset out of range"
-msgstr "offset hors limite"
-
-#: config/tc-aarch64.c:8348
+#: config/tc-aarch64.c:9008
msgid "unsigned value out of range"
msgstr "valeur non signée hors limite"
-#: config/tc-aarch64.c:8359
+#: config/tc-aarch64.c:9019
msgid "signed value out of range"
msgstr "valeur signée hors limite"
-#: config/tc-aarch64.c:8509
+#: config/tc-aarch64.c:9169
#, c-format
msgid "unexpected %s fixup"
msgstr "correctif %s inattendu"
-#: config/tc-aarch64.c:8574 config/tc-arm.c:30256 config/tc-arm.c:30277
-#: config/tc-mips.c:18436 config/tc-or1k.c:345 config/tc-score.c:7448
+#: config/tc-aarch64.c:9234 config/tc-arm.c:30334 config/tc-arm.c:30355
+#: config/tc-mips.c:18429 config/tc-or1k.c:345 config/tc-score.c:7448
#, c-format
msgid "cannot represent %s relocation in this object file format"
msgstr "ne peut représenter le réadressage %s dans ce format de fichier objet"
-#: config/tc-aarch64.c:8607
+#: config/tc-aarch64.c:9267
#, c-format
msgid "cannot do %u-byte relocation"
msgstr "ne peut faire un réadressage sur %u octets"
-#: config/tc-aarch64.c:9012 config/tc-arm.c:31091
+#: config/tc-aarch64.c:9672 config/tc-arm.c:31169
msgid "assemble for big-endian"
msgstr "assembler pour un système à octets de poids fort"
-#: config/tc-aarch64.c:9013 config/tc-arm.c:31092
+#: config/tc-aarch64.c:9673 config/tc-arm.c:31170
msgid "assemble for little-endian"
msgstr "assembler pour un système à octets de poids faible"
-#: config/tc-aarch64.c:9016
+#: config/tc-aarch64.c:9676
msgid "temporary switch for dumping"
msgstr "commutateur temporaire pour la vidange"
-#: config/tc-aarch64.c:9018
+#: config/tc-aarch64.c:9678
msgid "output verbose error messages"
msgstr "afficher des messages d'erreur verbeux"
-#: config/tc-aarch64.c:9020
+#: config/tc-aarch64.c:9680
msgid "do not output verbose error messages"
msgstr "ne pas afficher de messages d'erreur verbeux"
-#: config/tc-aarch64.c:9358 config/tc-arm.c:32213
+#: config/tc-aarch64.c:10056 config/tc-arm.c:32328
msgid "invalid architectural extension"
msgstr "extension d'architecture invalide"
-#: config/tc-aarch64.c:9383 config/tc-arm.c:32245
+#: config/tc-aarch64.c:10081 config/tc-arm.c:32360
msgid "must specify extensions to add before specifying those to remove"
msgstr "vous devez spécifier les extensions à ajouter avant celles à retirer"
-#: config/tc-aarch64.c:9391 config/tc-arm.c:32253
+#: config/tc-aarch64.c:10089 config/tc-arm.c:32368
msgid "missing architectural extension"
msgstr "extension d'architecture manquante"
-#: config/tc-aarch64.c:9418 config/tc-arm.c:32339
+#: config/tc-aarch64.c:10116 config/tc-arm.c:32454
#, c-format
msgid "unknown architectural extension `%s'"
msgstr "extension d'architecture inconnue « %s »"
-#: config/tc-aarch64.c:9442 config/tc-arm.c:32389 config/tc-metag.c:5832
+#: config/tc-aarch64.c:10140 config/tc-arm.c:32504 config/tc-metag.c:5832
#, c-format
msgid "missing cpu name `%s'"
msgstr "nom de cpu manquant « %s »"
-#: config/tc-aarch64.c:9456 config/tc-aarch64.c:9672 config/tc-arm.c:32424
-#: config/tc-arm.c:33225 config/tc-csky.c:1218 config/tc-metag.c:5843
+#: config/tc-aarch64.c:10154 config/tc-aarch64.c:10370 config/tc-arm.c:32539
+#: config/tc-arm.c:33346 config/tc-csky.c:1218 config/tc-metag.c:5843
#, c-format
msgid "unknown cpu `%s'"
msgstr "cpu inconnu « %s »"
-#: config/tc-aarch64.c:9474 config/tc-arm.c:32442
+#: config/tc-aarch64.c:10172 config/tc-arm.c:32557
#, c-format
msgid "missing architecture name `%s'"
msgstr "nom d'architecture manquante « %s »"
-#: config/tc-aarch64.c:9488 config/tc-aarch64.c:9719 config/tc-arm.c:32464
-#: config/tc-arm.c:33260 config/tc-arm.c:33290 config/tc-score.c:7683
+#: config/tc-aarch64.c:10186 config/tc-aarch64.c:10417 config/tc-arm.c:32579
+#: config/tc-arm.c:33381 config/tc-arm.c:33411 config/tc-score.c:7683
#, c-format
msgid "unknown architecture `%s'\n"
msgstr "architecture inconnue « %s »\n"
-#: config/tc-aarch64.c:9511
+#: config/tc-aarch64.c:10209
#, c-format
msgid "missing abi name `%s'"
msgstr "nom d'abi manquant « %s »"
-#: config/tc-aarch64.c:9522
+#: config/tc-aarch64.c:10220
#, c-format
msgid "unknown abi `%s'\n"
msgstr "abi « %s » inconnue\n"
-#: config/tc-aarch64.c:9528
+#: config/tc-aarch64.c:10226
msgid "<abi name>\t specify for ABI <abi name>"
msgstr "<nom abi>\t spécifie pour ABI <nom abi>"
-#: config/tc-aarch64.c:9531 config/tc-arm.c:32551 config/tc-metag.c:5909
+#: config/tc-aarch64.c:10229 config/tc-arm.c:32666 config/tc-metag.c:5909
msgid "<cpu name>\t assemble for CPU <cpu name>"
msgstr "<nom cpu>\t assembler pour le CPU <nom cpu>"
-#: config/tc-aarch64.c:9533 config/tc-arm.c:32553
+#: config/tc-aarch64.c:10231 config/tc-arm.c:32668
msgid "<arch name>\t assemble for architecture <arch name>"
msgstr "<nom arch>\t assembler pour l'architecture <nom arch>"
-#: config/tc-aarch64.c:9572 config/tc-aarch64.c:9591 config/tc-arm.c:32621
-#: config/tc-arm.c:32639 config/tc-arm.c:32659 config/tc-metag.c:5933
+#: config/tc-aarch64.c:10270 config/tc-aarch64.c:10289 config/tc-arm.c:32736
+#: config/tc-arm.c:32754 config/tc-arm.c:32774 config/tc-metag.c:5933
#, c-format
msgid "option `-%c%s' is deprecated: %s"
msgstr "option « -%c%s » est dépréciée: %s"
-#: config/tc-aarch64.c:9611
+#: config/tc-aarch64.c:10309
#, c-format
msgid " AArch64-specific assembler options:\n"
msgstr " Options en assembleur spécifiques à AArch64 :\n"
-#: config/tc-aarch64.c:9622 config/tc-arc.c:3581 config/tc-arm.c:32690
+#: config/tc-aarch64.c:10320 config/tc-arc.c:3576 config/tc-arm.c:32805
#, c-format
msgid " -EB assemble code for a big-endian cpu\n"
msgstr " -EB assembler le code pour un système de poids fort\n"
-#: config/tc-aarch64.c:9627 config/tc-arc.c:3583 config/tc-arm.c:32695
+#: config/tc-aarch64.c:10325 config/tc-arc.c:3578 config/tc-arm.c:32810
#, c-format
msgid " -EL assemble code for a little-endian cpu\n"
msgstr " -EL assembler le code pour un système de poids faible\n"
@@ -2313,7 +2441,7 @@ msgstr "arguments inappropriés pour l'opcode « %s »"
msgid "opcode `%s' not supported for target %s"
msgstr "opcode « %s » n'est pas supporté pour la cible %s"
-#: config/tc-alpha.c:1189 config/tc-alpha.c:3363 config/tc-avr.c:1905
+#: config/tc-alpha.c:1189 config/tc-alpha.c:3363 config/tc-avr.c:1915
#: config/tc-msp430.c:4361 config/tc-wasm32.c:753
#, c-format
msgid "unknown opcode `%s'"
@@ -2394,8 +2522,8 @@ msgstr "!tlsldm!%ld en double"
msgid "sequence number in use for !tlsgd!%ld"
msgstr "numéro de séquence utilisé pour !tlsgd!%ld"
-#: config/tc-alpha.c:1992 config/tc-arc.c:2848 config/tc-mn10200.c:854
-#: config/tc-mn10300.c:1150 config/tc-ppc.c:2019 config/tc-s390.c:668
+#: config/tc-alpha.c:1992 config/tc-arc.c:2848 config/tc-mn10200.c:847
+#: config/tc-mn10300.c:1150 config/tc-ppc.c:2028 config/tc-s390.c:668
#: config/tc-tilegx.c:422 config/tc-tilegx.c:472 config/tc-tilepro.c:375
msgid "operand"
msgstr "opérande"
@@ -2412,12 +2540,12 @@ msgstr "réadressage invalide pour le champ"
msgid "can not resolve expression"
msgstr "ne peut résoudre l'expression"
-#: config/tc-alpha.c:3512 config/tc-microblaze.c:204 config/tc-ppc.c:2352
+#: config/tc-alpha.c:3512 config/tc-microblaze.c:204 config/tc-ppc.c:2365
#, c-format
msgid ".COMMon length (%ld.) <0! Ignored."
msgstr "longueur de .COMMon (%ld.) <0! Ignoré."
-#: config/tc-alpha.c:3523 config/tc-ia64.c:1091 config/tc-sparc.c:4270
+#: config/tc-alpha.c:3523 config/tc-ia64.c:1092 config/tc-sparc.c:4270
#: config/tc-v850.c:306
msgid "Ignoring attempt to re-define symbol"
msgstr "Ignore la tentative de redéfinition du symbole"
@@ -2463,12 +2591,12 @@ msgstr "directive .fmask erronée"
msgid "bad .mask directive"
msgstr "directive .mask erronée"
-#: config/tc-alpha.c:3872 config/tc-mips.c:19918 config/tc-score.c:5736
+#: config/tc-alpha.c:3872 config/tc-mips.c:19911 config/tc-score.c:5736
#: ecoff.c:3161
msgid ".frame outside of .ent"
msgstr ".frame à l'extérieur de .ent"
-#: config/tc-alpha.c:3883 config/tc-mips.c:19929 ecoff.c:3172
+#: config/tc-alpha.c:3883 config/tc-mips.c:19922 ecoff.c:3172
msgid "bad .frame directive"
msgstr "directive .frame erronée"
@@ -2625,19 +2753,19 @@ msgstr "mauvaise directive .section: nécessite a,s,w,x,M,S,G,T dans la chaîne"
#: config/tc-alpha.c:5428 config/tc-alpha.c:5462 config/tc-arc.c:767
#: config/tc-arc.c:2552 config/tc-arc.c:2584 config/tc-arc.c:2689
-#: config/tc-cr16.c:813 config/tc-cr16.c:832 config/tc-cris.c:1223
-#: config/tc-crx.c:516 config/tc-crx.c:538 config/tc-crx.c:549
-#: config/tc-dlx.c:289 config/tc-hppa.c:8246 config/tc-i386.c:3071
-#: config/tc-i386.c:3123 config/tc-ia64.c:5380 config/tc-ia64.c:7418
-#: config/tc-ia64.c:7477 config/tc-m68k.c:4574 config/tc-m68k.c:4586
+#: config/tc-cr16.c:809 config/tc-cr16.c:828 config/tc-cris.c:1223
+#: config/tc-crx.c:512 config/tc-crx.c:534 config/tc-crx.c:545
+#: config/tc-dlx.c:289 config/tc-hppa.c:8246 config/tc-i386.c:3088
+#: config/tc-i386.c:3140 config/tc-ia64.c:5373 config/tc-ia64.c:7411
+#: config/tc-ia64.c:7470 config/tc-m68k.c:4574 config/tc-m68k.c:4586
#: config/tc-mips.c:3700 config/tc-mips.c:3733 config/tc-mips.c:3759
#: config/tc-nds32.c:3439 config/tc-nios2.c:3624 config/tc-nios2.c:3629
-#: config/tc-nios2.c:3635 config/tc-ns32k.c:1906 config/tc-ppc.c:1708
-#: config/tc-ppc.c:1746 config/tc-ppc.c:1785 config/tc-ppc.c:1824
-#: config/tc-ppc.c:1842 config/tc-pru.c:1569 config/tc-pru.c:1573
+#: config/tc-nios2.c:3635 config/tc-ns32k.c:1906 config/tc-ppc.c:1717
+#: config/tc-ppc.c:1755 config/tc-ppc.c:1794 config/tc-ppc.c:1833
+#: config/tc-ppc.c:1851 config/tc-pru.c:1568 config/tc-pru.c:1572
#: config/tc-s390.c:538 config/tc-s390.c:576 config/tc-sparc.c:961
#: config/tc-sparc.c:993 config/tc-tic30.c:121 config/tc-tic30.c:131
-#: config/tc-tic30.c:141 config/tc-tic30.c:151 config/tc-tic4x.c:1215
+#: config/tc-tic30.c:141 config/tc-tic30.c:151 config/tc-tic4x.c:1217
#: config/tc-tilegx.c:316 config/tc-tilepro.c:252 config/tc-vax.c:965
#: config/tc-vax.c:970 ecoff.c:1582
#, c-format
@@ -2645,7 +2773,7 @@ msgid "duplicate %s"
msgstr "%s en double"
#: config/tc-alpha.c:5545 config/tc-arc.c:2520 config/tc-arc.c:2534
-#: config/tc-arm.c:897 config/tc-xtensa.c:5487 config/tc-xtensa.c:5563
+#: config/tc-arm.c:901 config/tc-xtensa.c:5487 config/tc-xtensa.c:5563
#: config/tc-xtensa.c:5680 config/tc-z80.c:3675
msgid "syntax error"
msgstr "erreur de syntaxe"
@@ -2680,12 +2808,12 @@ msgstr ""
"-H\t\t\tafficher les nouveaux symboles après une troncation du hachage\n"
"-replace/-noreplace\tactiver ou non l'optimisation des appels de procédure\n"
-#: config/tc-alpha.c:5942 config/tc-arc.c:3128
+#: config/tc-alpha.c:5942 config/tc-arc.c:3123
#, c-format
msgid "unhandled relocation type %s"
msgstr "type de réadressage non traité %s"
-#: config/tc-alpha.c:5955 config/tc-arc.c:3136
+#: config/tc-alpha.c:5955 config/tc-arc.c:3131
msgid "non-absolute expression in constant field"
msgstr "expression non absolue dams le champ de constante"
@@ -2703,14 +2831,14 @@ msgstr "Utilisation de $at sans \".set noat\""
msgid "!samegp reloc against symbol without .prologue: %s"
msgstr "réadressage !samgp vers le symbole sans .prologue: %s"
-#: config/tc-alpha.c:6236 config/tc-arc.c:3259 config/tc-csky.c:5645
+#: config/tc-alpha.c:6236 config/tc-arc.c:3254 config/tc-csky.c:5646
#: config/tc-tilegx.c:1745 config/tc-tilepro.c:1522 config/tc-wasm32.c:813
#: config/tc-xtensa.c:6190
#, c-format
msgid "cannot represent `%s' relocation in object file"
msgstr "ne peut représenter le réadressage « %s » dans le fichier objet"
-#: config/tc-alpha.c:6242 config/tc-arc.c:3265
+#: config/tc-alpha.c:6242 config/tc-arc.c:3260
#, c-format
msgid "internal error? cannot generate `%s' relocation"
msgstr "erreur interne ? ne peut générer le réadressage « %s »"
@@ -2742,7 +2870,7 @@ msgstr "La valeur sur la ligne de commande écrase la directive « .cpu »"
msgid "unknown architecture: %s\n"
msgstr "architecture inconnue: %s\n"
-#: config/tc-arc.c:891 config/tc-ia64.c:7487 config/tc-tilegx.c:262
+#: config/tc-arc.c:891 config/tc-ia64.c:7480 config/tc-tilegx.c:262
msgid "Could not set architecture and machine"
msgstr "Ne peut initialiser l'architecture et la machine"
@@ -2778,7 +2906,7 @@ msgstr "Crochets incorrects dans le champ de l'opérande"
msgid "extra comma"
msgstr "virgule supplémentaire"
-#: config/tc-arc.c:1335 config/tc-pru.c:1450 config/tc-pru.c:1698
+#: config/tc-arc.c:1335 config/tc-pru.c:1449 config/tc-pru.c:1697
#: config/tc-xtensa.c:2090
msgid "missing argument"
msgstr "argument manquant"
@@ -2824,7 +2952,7 @@ msgid "flag mismatch"
msgstr "les fanions ne concordent pas"
#: config/tc-arc.c:2083 config/tc-nios2.c:3103 config/tc-nios2.c:3130
-#: config/tc-pru.c:1413 config/tc-pru.c:1438 config/tc-xtensa.c:2156
+#: config/tc-pru.c:1412 config/tc-pru.c:1437 config/tc-xtensa.c:2156
msgid "too many arguments"
msgstr "trop d'arguments"
@@ -2848,14 +2976,14 @@ msgstr "l'opcode « %s » n'est pas supporté pour la cible %s"
msgid "unknown opcode '%s'"
msgstr "opcode inconnu « %s »"
-#: config/tc-arc.c:2602 config/tc-arc.c:5068 config/tc-h8300.c:78
+#: config/tc-arc.c:2602 config/tc-arc.c:5063 config/tc-h8300.c:78
#: config/tc-h8300.c:87 config/tc-h8300.c:97 config/tc-h8300.c:107
#: config/tc-h8300.c:117 config/tc-h8300.c:128 config/tc-h8300.c:242
#: config/tc-hppa.c:6820 config/tc-hppa.c:6826 config/tc-hppa.c:6832
#: config/tc-hppa.c:6838 config/tc-hppa.c:8225 config/tc-lm32.c:197
#: config/tc-mips.c:3690 config/tc-mips.c:4187 config/tc-mn10300.c:935
-#: config/tc-mn10300.c:940 config/tc-mn10300.c:2440 config/tc-riscv.c:1221
-#: config/tc-riscv.c:3878 config/tc-xc16x.c:79 config/tc-xc16x.c:86
+#: config/tc-mn10300.c:940 config/tc-mn10300.c:2440 config/tc-riscv.c:1263
+#: config/tc-riscv.c:4430 config/tc-xc16x.c:79 config/tc-xc16x.c:86
#: config/tc-xc16x.c:93
msgid "could not set architecture and machine"
msgstr "ne peut initialiser l'architecture et la machine"
@@ -2873,13 +3001,7 @@ msgstr "Opérande non aligné. Il doit être aligné sur 32 bits"
msgid "Unaligned operand. Needs to be 16bit aligned"
msgstr "Opérande non aligné. Il doit être aligné sur 16 bits"
-#: config/tc-arc.c:2940 config/tc-cr16.c:577 config/tc-crx.c:321
-#: config/tc-mn10200.c:766 write.c:1034
-#, c-format
-msgid "can't resolve `%s' {%s section} - `%s' {%s section}"
-msgstr "ne peut résoudre « %s » {section %s} - « %s » {section %s}"
-
-#: config/tc-arc.c:2999
+#: config/tc-arc.c:2994
#, c-format
msgid "PC relative relocation not allowed for (internal) type %d"
msgstr "réadressage relatif au PC pas permis pour le type (interne) %d"
@@ -2888,35 +3010,35 @@ msgstr "réadressage relatif au PC pas permis pour le type (interne) %d"
#. the insn.
#. FIXME! Check for the conditionality of
#. the insn.
-#: config/tc-arc.c:3044 config/tc-arc.c:4025
+#: config/tc-arc.c:3039 config/tc-arc.c:4020
msgid "TLS_*_S9 relocs are not supported yet"
msgstr "les réadressages TLS_*_S9 ne sont pas encore supportés"
#. I cannot fix an GOTPC relocation because I need to relax it
#. from ld rx,[pcl,@sym@gotpc] to add rx,pcl,@sym@gotpc.
-#: config/tc-arc.c:3080
+#: config/tc-arc.c:3075
msgid "Unsupported operation on reloc"
msgstr "Opération non supportée sur le réadressage"
-#: config/tc-arc.c:3156 config/tc-arc.c:3172
+#: config/tc-arc.c:3151 config/tc-arc.c:3167
msgid "unknown fixup size"
msgstr "taille de correctif inconnue"
-#: config/tc-arc.c:3306
+#: config/tc-arc.c:3301
msgid "no relaxation found for this instruction."
msgstr "aucune relaxation trouvée pour cette instruction."
-#: config/tc-arc.c:3559
+#: config/tc-arc.c:3554
#, c-format
msgid "ARC-specific assembler options:\n"
msgstr "Options en assembleur spécifiques ARC:\n"
-#: config/tc-arc.c:3585
+#: config/tc-arc.c:3580
#, c-format
msgid " -mrelax enable relaxation\n"
msgstr " -mrelax permettre la relâche\n"
-#: config/tc-arc.c:3588
+#: config/tc-arc.c:3583
#, c-format
msgid ""
"The following ARC-specific assembler options are deprecated and are accepted\n"
@@ -2925,7 +3047,7 @@ msgstr ""
"Les options assembleur spécifiques à ARC ci-dessous sont dépréciées et sont\n"
"acceptées uniquement pour compatibilité:\n"
-#: config/tc-arc.c:3591
+#: config/tc-arc.c:3586
#, c-format
msgid ""
" -mEA\n"
@@ -2980,679 +3102,687 @@ msgstr ""
" -muser-mode-only\n"
" -mxy\n"
-#: config/tc-arc.c:3681
+#: config/tc-arc.c:3676
#, c-format
msgid "Unable to find %s relocation for instruction %s"
msgstr "Impossible de trouver le réadressage %s pour l'instruction %s"
-#: config/tc-arc.c:3976
+#: config/tc-arc.c:3971
#, c-format
msgid "Unable to use @plt relocation for insn %s"
msgstr "Impossible d'utiliser le réadressage @plt pour l'insn %s"
-#: config/tc-arc.c:3995
+#: config/tc-arc.c:3990
#, c-format
msgid "Unable to use @pcl relocation for insn %s"
msgstr "Impossible d'utiliser le réadressage @pcl pour l'insn %s"
-#: config/tc-arc.c:4051
+#: config/tc-arc.c:4046
#, c-format
msgid "invalid relocation %s for field"
msgstr "réadressage %s invalide pour le champ"
-#: config/tc-arc.c:4161
+#: config/tc-arc.c:4156
#, c-format
msgid "Insn %s has a jump/branch instruction %s in its delay slot."
msgstr "L'insn %s a une instruction de saut/branchement %s dans sa plage de délai."
-#: config/tc-arc.c:4166
+#: config/tc-arc.c:4161
#, c-format
msgid "Insn %s has an instruction %s with limm in its delay slot."
msgstr "L'insn %s a une instruction %s avec limm dans sa plage de délai."
-#: config/tc-arc.c:4276 config/tc-microblaze.c:2567 config/tc-mn10300.c:1069
-#: config/tc-sh.c:418 config/tc-z80.c:1119 read.c:4701
+#: config/tc-arc.c:4271 config/tc-microblaze.c:2567 config/tc-mn10300.c:1069
+#: config/tc-sh.c:418 config/tc-z80.c:1119 read.c:4794
#, c-format
msgid "unsupported BFD relocation size %u"
msgstr "taille de réadressage BFD non supportée %u"
-#: config/tc-arc.c:4296
+#: config/tc-arc.c:4291
#, c-format
msgid "Jump/Branch instruction detected at the end of the ZOL label @%s"
msgstr "Instruction de saut/branchement détectée à la fin de l'étiquette ZOL @%s"
-#: config/tc-arc.c:4303
+#: config/tc-arc.c:4298
#, c-format
msgid "Kernel instruction detected at the end of the ZOL label @%s"
msgstr "Instruction noyau détectée à la fin de l'étiquette ZOL @%s"
-#: config/tc-arc.c:4308
+#: config/tc-arc.c:4303
#, c-format
msgid "A jump instruction with long immediate detected at the end of the ZOL label @%s"
msgstr "Une instruction de saut avec un immédiat long est détectée à la fin de l'étiquette ZOL @%s"
-#: config/tc-arc.c:4314
+#: config/tc-arc.c:4309
#, c-format
msgid "An illegal use of delay slot detected at the end of the ZOL label @%s"
msgstr "Une utilisation illégale d'une plage de délai est détectée à la fin de l'étiquette ZOL @%s"
-#: config/tc-arc.c:4423
+#: config/tc-arc.c:4418
msgid "expected comma after instruction name"
msgstr "virgule attendue après le nom de l'instruction"
-#: config/tc-arc.c:4435
+#: config/tc-arc.c:4430
msgid "expected comma after major opcode"
msgstr "virgule attendue après l'opcode majeur"
-#: config/tc-arc.c:4620
+#: config/tc-arc.c:4615
#, c-format
msgid "Pseudocode already used %s"
msgstr "Le pseudocode a déjà utilisé %s"
-#: config/tc-arc.c:4628
+#: config/tc-arc.c:4623
#, c-format
msgid "major opcode not in range [0x%02x - 0x%02x]"
msgstr "l'opcode majeur n'est pas dans la plage [0x%02x - 0x%02x]"
-#: config/tc-arc.c:4632
+#: config/tc-arc.c:4627
msgid "minor opcode not in range [0x00 - 0x3f]"
msgstr "l'opcode mineur n'est pas dans la plage [0x00 - 0x3f]"
-#: config/tc-arc.c:4638
+#: config/tc-arc.c:4633
msgid "Improper use of OP1_IMM_IMPLIED"
msgstr "Utilisation inappropriée de OP1_IMM_IMPLIED"
-#: config/tc-arc.c:4644
+#: config/tc-arc.c:4639
msgid "Improper use of OP1_MUST_BE_IMM"
msgstr "Utilisation inappropriée de OP1_MUST_BE_IMM"
-#: config/tc-arc.c:4656
+#: config/tc-arc.c:4651
msgid "Couldn't generate extension instruction opcodes"
msgstr "N'a pu générer les opcodes des instructions d'extension"
-#: config/tc-arc.c:4691
+#: config/tc-arc.c:4686
msgid "expected comma after name"
msgstr "virgule attendue après le nom"
-#: config/tc-arc.c:4702
+#: config/tc-arc.c:4697
#, c-format
msgid "%s second argument cannot be a negative number %d"
msgstr "le deuxième argument de %s ne peut pas être un nombre négatif %d"
-#: config/tc-arc.c:4717
+#: config/tc-arc.c:4712
msgid "expected comma after register number"
msgstr "virgule attendue après un numéro de registre"
-#: config/tc-arc.c:4738
+#: config/tc-arc.c:4733
msgid "invalid mode"
msgstr "mode invalide"
-#: config/tc-arc.c:4756
+#: config/tc-arc.c:4751
msgid "expected comma after register mode"
msgstr "virgule attendue après le mode de registre"
-#: config/tc-arc.c:4771
+#: config/tc-arc.c:4766
msgid "shortcut designator invalid"
msgstr "indicateur de raccourci invalide"
-#: config/tc-arc.c:4869
+#: config/tc-arc.c:4864
#, c-format
msgid "core register %s value (%d) too large"
msgstr "valeur de registre coeur %s (%d) trop grande"
-#: config/tc-arc.c:4881
+#: config/tc-arc.c:4876
#, c-format
msgid "duplicate aux register %s"
msgstr "registre auxiliaire %s en double"
-#: config/tc-arc.c:4886
+#: config/tc-arc.c:4881
#, c-format
msgid "condition code %s value (%d) too large"
msgstr "valeur du code de condition %s (%d) trop grande"
-#: config/tc-arc.c:4903
+#: config/tc-arc.c:4898
msgid "Unknown extension"
msgstr "Exception inconnue"
-#: config/tc-arc.c:5006
+#: config/tc-arc.c:5001
msgid "Overwrite explicitly set Tag_ARC_CPU_base"
msgstr "Écrasement de Tag_ARC_CPU_base défini explicitement"
-#: config/tc-arc.c:5054
+#: config/tc-arc.c:5049
msgid "Overwrite explicitly set Tag_ARC_ABI_rf16 to full register file"
msgstr "Écrasement de Tag_ARC_ABI_rf16 défini explicitement avec le registre fichier complet"
-#: config/tc-arm.c:708
+#: config/tc-arm.c:711
msgid "ARM register expected"
msgstr "registre ARM attendu"
-#: config/tc-arm.c:709
+#: config/tc-arm.c:712
msgid "bad or missing co-processor number"
msgstr "numéro de co-processeur erroné ou manquant"
-#: config/tc-arm.c:710
+#: config/tc-arm.c:713
msgid "co-processor register expected"
msgstr "registre de coprocesseur attendu"
-#: config/tc-arm.c:711
+#: config/tc-arm.c:714
msgid "FPA register expected"
msgstr "registre FPA attendu"
-#: config/tc-arm.c:712
+#: config/tc-arm.c:715
msgid "VFP single precision register expected"
msgstr "registre VFP en simple précision attendu"
-#: config/tc-arm.c:713
+#: config/tc-arm.c:716
msgid "VFP/Neon double precision register expected"
msgstr "registre VFP/Neon en double précision attendu"
-#: config/tc-arm.c:714
+#: config/tc-arm.c:717
msgid "Neon quad precision register expected"
msgstr "registre Neon en quadruple précision attendu"
-#: config/tc-arm.c:715
+#: config/tc-arm.c:718
msgid "VFP single or double precision register expected"
msgstr "registre VFP en simple ou double précision attendu"
-#: config/tc-arm.c:716
+#: config/tc-arm.c:719
msgid "Neon double or quad precision register expected"
msgstr "registre Neon en double ou quadruple précision attendu"
-#: config/tc-arm.c:717
+#: config/tc-arm.c:720
msgid "Neon single or double precision register expected"
msgstr "Registre Neon en simple ou double précision attendu"
-#: config/tc-arm.c:718
+#: config/tc-arm.c:721
msgid "VFP single, double or Neon quad precision register expected"
msgstr "registre VFP en simple, double ou Neon en quadruple précision attendu"
-#: config/tc-arm.c:720
+#: config/tc-arm.c:723
msgid "VFP system register expected"
msgstr "registre système VFP attendu"
-#: config/tc-arm.c:721
+#: config/tc-arm.c:724
msgid "Maverick MVF register expected"
msgstr "registre Maverick MVF attendu"
-#: config/tc-arm.c:722
+#: config/tc-arm.c:725
msgid "Maverick MVD register expected"
msgstr "registre Maverick MVD attendu"
-#: config/tc-arm.c:723
+#: config/tc-arm.c:726
msgid "Maverick MVFX register expected"
msgstr "registre Maverick MVFX attendu"
-#: config/tc-arm.c:724
+#: config/tc-arm.c:727
msgid "Maverick MVDX register expected"
msgstr "registre Maverick MVDX attendu"
-#: config/tc-arm.c:725
+#: config/tc-arm.c:728
msgid "Maverick MVAX register expected"
msgstr "registre Maverick MVAX attendu"
-#: config/tc-arm.c:726
+#: config/tc-arm.c:729
msgid "Maverick DSPSC register expected"
msgstr "registre Maverick DSPSC attendu"
-#: config/tc-arm.c:727
+#: config/tc-arm.c:730
msgid "iWMMXt data register expected"
msgstr "registre de donnée iWMMXt attendu"
-#: config/tc-arm.c:728 config/tc-arm.c:7848
+#: config/tc-arm.c:731 config/tc-arm.c:7860
msgid "iWMMXt control register expected"
msgstr "registre de contrôle iWMMXt attendu"
-#: config/tc-arm.c:729
+#: config/tc-arm.c:732
msgid "iWMMXt scalar register expected"
msgstr "registre scalaire iWMMXt attendu"
-#: config/tc-arm.c:730
+#: config/tc-arm.c:733
msgid "XScale accumulator register expected"
msgstr "registre accumulateur XScale invalide"
-#: config/tc-arm.c:731
+#: config/tc-arm.c:734
msgid "MVE vector register expected"
msgstr "registre vectoriel MVE attendu"
-#: config/tc-arm.c:733
+#: config/tc-arm.c:736
msgid "ZR register expected"
msgstr "registre ZR attendu"
+#: config/tc-arm.c:737
+msgid "Pseudo register expected"
+msgstr "Pseudo-registre attendu"
+
#. For score5u : div/mul will pop warning message, mmu/alw/asw will pop error message.
-#: config/tc-arm.c:898 config/tc-score.c:259
+#: config/tc-arm.c:902 config/tc-score.c:259
msgid "bad arguments to instruction"
msgstr "arguments erronés pour l'instruction"
-#: config/tc-arm.c:899
+#: config/tc-arm.c:903
msgid "r13 not allowed here"
msgstr "r13 n'est pas permis ici"
-#: config/tc-arm.c:900
+#: config/tc-arm.c:904
msgid "r15 not allowed here"
msgstr "r15 n'est pas permis ici"
-#: config/tc-arm.c:901
+#: config/tc-arm.c:905
msgid "Odd register not allowed here"
msgstr "Registre impair pas permis ici"
-#: config/tc-arm.c:902
+#: config/tc-arm.c:906
msgid "Even register not allowed here"
msgstr "Registre pair pas permis ici"
-#: config/tc-arm.c:903
+#: config/tc-arm.c:907
msgid "instruction cannot be conditional"
msgstr "l'instruction ne peut pas être conditionnelle"
-#: config/tc-arm.c:904
+#: config/tc-arm.c:908
msgid "registers may not be the same"
msgstr "les registres ne peuvent pas être les mêmes"
-#: config/tc-arm.c:905
+#: config/tc-arm.c:909
msgid "lo register required"
msgstr "registre LO requis"
-#: config/tc-arm.c:906
+#: config/tc-arm.c:910
msgid "instruction not supported in Thumb16 mode"
msgstr "instruction pas supportée en mode Thumb16"
-#: config/tc-arm.c:907
+#: config/tc-arm.c:911
msgid "instruction does not accept this addressing mode"
msgstr "l'instruction n'accepte pas ce mode d'adressage"
-#: config/tc-arm.c:908
+#: config/tc-arm.c:912
msgid "branch must be last instruction in IT block"
msgstr "le branchement doit être la dernière instruction du bloc IT"
-#: config/tc-arm.c:909
+#: config/tc-arm.c:913
msgid "branch out of range or not a multiple of 2"
msgstr "branche hors de portée ou pas un multiple de 2"
-#: config/tc-arm.c:910
+#: config/tc-arm.c:914
msgid "instruction not allowed in VPT block"
msgstr "instruction non permise dans un bloc VPT"
-#: config/tc-arm.c:911
+#: config/tc-arm.c:915
msgid "instruction not allowed in IT block"
msgstr "instruction non permise dans un bloc IT"
-#: config/tc-arm.c:912
+#: config/tc-arm.c:916
msgid "instruction missing MVE vector predication code"
msgstr "l'instruction a besoin d'un code de prédication de vecteur MVE"
-#: config/tc-arm.c:913
+#: config/tc-arm.c:917
msgid "selected FPU does not support instruction"
msgstr "le FPU choisi ne supporte pas l'instruction"
-#: config/tc-arm.c:914
+#: config/tc-arm.c:918
msgid "thumb conditional instruction should be in IT block"
msgstr "l'instruction conditionnelle thumb devrait être dans le bloc IT"
-#: config/tc-arm.c:916
+#: config/tc-arm.c:920
msgid "vector predicated instruction should be in VPT/VPST block"
msgstr "l'instruction de prédication du vecteur devrait être dans un bloc VPT/VPST"
-#: config/tc-arm.c:917
+#: config/tc-arm.c:921
msgid "incorrect condition in IT block"
msgstr "condition incorrect dans le bloc IT"
-#: config/tc-arm.c:918
+#: config/tc-arm.c:922
msgid "incorrect condition in VPT/VPST block"
msgstr "condition incorrect dans le bloc VPT/VPST"
-#: config/tc-arm.c:919
+#: config/tc-arm.c:923
msgid "IT falling in the range of a previous IT block"
msgstr "IT atterri dans la plage d'un bloc IT précédent"
-#: config/tc-arm.c:920
+#: config/tc-arm.c:924
msgid "missing .fnstart before unwinding directive"
msgstr ".fnstart manquant avant la directive de déroulement"
-#: config/tc-arm.c:922
+#: config/tc-arm.c:926
msgid "cannot use register index with PC-relative addressing"
msgstr "ne peut pas utiliser un index de registre avec un adressage relatif au PC"
-#: config/tc-arm.c:924
+#: config/tc-arm.c:928
msgid "cannot use writeback with PC-relative addressing"
msgstr "la réécriture ne peut pas être utilisée avec un adressage relatif au PC"
-#: config/tc-arm.c:926
+#: config/tc-arm.c:930
msgid "selected processor does not support fp16 instruction"
msgstr "le processeur sélectionné ne supporte pas l'instruction fp16"
-#: config/tc-arm.c:927
+#: config/tc-arm.c:931
msgid "selected processor does not support bf16 instruction"
msgstr "le processeur sélectionné ne supporte pas l'instruction bf16"
-#: config/tc-arm.c:928
+#: config/tc-arm.c:932
msgid "selected processor does not support cde instruction"
msgstr "le processeur sélectionné ne supporte pas l'instruction cde"
-#: config/tc-arm.c:929
+#: config/tc-arm.c:933
msgid "coprocessor for insn is not enabled for cde"
msgstr "le coprocesseur pour l'insn n'est pas activé pour cde"
-#: config/tc-arm.c:930
+#: config/tc-arm.c:934
msgid "using "
msgstr "utilise "
-#: config/tc-arm.c:931
+#: config/tc-arm.c:935
msgid "relocation valid in thumb1 code only"
msgstr "le réadressage n'est valide que dans du code thumb1"
-#: config/tc-arm.c:932
+#: config/tc-arm.c:936
msgid "Warning: instruction is UNPREDICTABLE in an IT block"
msgstr "Attention: l'instruction est IMPRÉVISIBLE dans un bloc IT"
-#: config/tc-arm.c:934
+#: config/tc-arm.c:938
msgid "Warning: instruction is UNPREDICTABLE in a VPT block"
msgstr "Attention: l'instruction est IMPRÉVISIBLE dans un bloc VPT"
-#: config/tc-arm.c:936
+#: config/tc-arm.c:940
msgid "Warning: instruction is UNPREDICTABLE with PC operand"
msgstr "Attention: l'instruction est IMPRÉVISIBLE avec l'opérande PC"
-#: config/tc-arm.c:938
+#: config/tc-arm.c:942
msgid "Warning: instruction is UNPREDICTABLE with SP operand"
msgstr "Attention: l'instruction est IMPRÉVISIBLE avec l'opérande SP"
-#: config/tc-arm.c:940
+#: config/tc-arm.c:944
msgid "bad type in SIMD instruction"
msgstr "mauvais type dans une instruction SIMD"
-#: config/tc-arm.c:942
+#: config/tc-arm.c:946
msgid "GAS auto-detection mode and -march=all is deprecated for MVE, please use a valid -march or -mcpu option."
msgstr "le mode auto-détection de GAS et -march=all est déprécié pour MVE, veuillez utiliser une option -march ou -mcpu valide"
-#: config/tc-arm.c:944
+#: config/tc-arm.c:948
msgid "Warning: 32-bit element size and same destination and source operands makes instruction UNPREDICTABLE"
msgstr "Attention: une taille d'élément de 32 bits et les mêmes opérandes source et destination rendent l'instruction IMPRÉVISIBLE"
-#: config/tc-arm.c:946
+#: config/tc-arm.c:950
msgid "bad element type for instruction"
msgstr "mauvais type d'élément pour l'instruction"
-#: config/tc-arm.c:947
+#: config/tc-arm.c:951
msgid "MVE vector register Q[0..7] expected"
msgstr "registre vectoriel MVE Q[0..7] attendu"
-#: config/tc-arm.c:1167
+#: config/tc-arm.c:952
+msgid "selected processor does not support PACBTI extention"
+msgstr "le processeur choisi ne supporte pas l'extension PACBTI"
+
+#: config/tc-arm.c:1172
msgid "immediate expression requires a # prefix"
msgstr "préfixe # attendu avec une expression immédiate"
-#: config/tc-arm.c:1196 read.c:3940
+#: config/tc-arm.c:1201 read.c:4028
msgid "missing expression"
msgstr "expression manquante"
-#: config/tc-arm.c:1210 config/tc-arm.c:5674 config/tc-score.c:1209
+#: config/tc-arm.c:1215 config/tc-arm.c:5682 config/tc-score.c:1209
msgid "invalid constant"
msgstr "constante invalide"
-#: config/tc-arm.c:1388
+#: config/tc-arm.c:1350
msgid "expected #constant"
msgstr "#constante attendu"
-#: config/tc-arm.c:1560 config/tc-arm.c:1591
+#: config/tc-arm.c:1522 config/tc-arm.c:1553
#, c-format
msgid "bad size %d in type specifier"
msgstr "mauvaise taille %d dans le spécifieur de type"
-#: config/tc-arm.c:1567
+#: config/tc-arm.c:1529
msgid "unexpected type character `b' -- did you mean `bf'?"
msgstr "caractère de type « b » inattendu — vouliez-vous utiliser « bf » ?"
-#: config/tc-arm.c:1574
+#: config/tc-arm.c:1536
#, c-format
msgid "unexpected character `%c' in type specifier"
msgstr "caractère « %c » inattendu dans le spécificateur de type"
-#: config/tc-arm.c:1641
+#: config/tc-arm.c:1603
msgid "only one type should be specified for operand"
msgstr "un type seulement devrait être spécifié pour l'opérande"
-#: config/tc-arm.c:1647
+#: config/tc-arm.c:1609
msgid "vector type expected"
msgstr "type vectoriel attendu"
-#: config/tc-arm.c:1756
+#: config/tc-arm.c:1718
msgid "expected MVE register [q0..q7]"
msgstr "registre MVE attendu [q0..q7]"
-#: config/tc-arm.c:1776
+#: config/tc-arm.c:1738
msgid "can't redefine type for operand"
msgstr "le type ne peut pas être redéfini pour un opérande"
-#: config/tc-arm.c:1792
+#: config/tc-arm.c:1754
msgid "only D and Q registers may be indexed"
msgstr "seulement les registres D et Q peuvent être indexés"
-#: config/tc-arm.c:1794
+#: config/tc-arm.c:1756
msgid "only D registers may be indexed"
msgstr "seulement les registres D peuvent être indexés"
-#: config/tc-arm.c:1800
+#: config/tc-arm.c:1762
msgid "can't change index for operand"
msgstr "l'index de l'opérande ne peut pas être changé"
-#: config/tc-arm.c:1863
+#: config/tc-arm.c:1825
msgid "register operand expected, but got scalar"
msgstr "opérande de registre attendu mais on a trouvé un scalaire"
-#: config/tc-arm.c:1914
+#: config/tc-arm.c:1876
msgid "scalar must have an index"
msgstr "le scalaire doit avoir un indexe"
-#: config/tc-arm.c:1919 config/tc-arm.c:20217 config/tc-arm.c:20300
-#: config/tc-arm.c:20967
+#: config/tc-arm.c:1881 config/tc-arm.c:20245 config/tc-arm.c:20328
+#: config/tc-arm.c:21001
msgid "scalar index out of range"
msgstr "index scalaire hors limite"
-#: config/tc-arm.c:1989
+#: config/tc-arm.c:1959
msgid "r0-r12, lr or APSR expected"
msgstr "r0-r12, lr ou APSR attendus"
-#: config/tc-arm.c:2008
+#: config/tc-arm.c:1986
msgid "bad range in register list"
msgstr "mauvaise limite dans la liste des registres"
-#: config/tc-arm.c:2016 config/tc-arm.c:2025 config/tc-arm.c:2066
+#: config/tc-arm.c:1994 config/tc-arm.c:2003 config/tc-arm.c:2044
#, c-format
msgid "Warning: duplicated register (r%d) in register list"
msgstr "Attention: registre en double (r%d) dans la liste des registres"
-#: config/tc-arm.c:2028
+#: config/tc-arm.c:2006
msgid "Warning: register range not in ascending order"
msgstr "Attention: gamme de registres n'est pas en ordre croissant"
-#: config/tc-arm.c:2039
+#: config/tc-arm.c:2017
msgid "missing `}'"
msgstr "« } » manquant"
-#: config/tc-arm.c:2055
+#: config/tc-arm.c:2033
msgid "invalid register mask"
msgstr "masque de registre invalide"
-#: config/tc-arm.c:2199 config/tc-arm.c:2307
+#: config/tc-arm.c:2177 config/tc-arm.c:2285
msgid "VPR expected last"
msgstr "VPR attendu en dernier"
-#: config/tc-arm.c:2205
+#: config/tc-arm.c:2183
msgid "VFP single precision register or VPR expected"
msgstr "registre VFP en simple précision ou VPR attendu"
#. regtype == REG_TYPE_VFD.
-#: config/tc-arm.c:2208
+#: config/tc-arm.c:2186
msgid "VFP/Neon double precision register or VPR expected"
msgstr "registre VFP/Neon en double précision ou VPR attendu"
-#: config/tc-arm.c:2225 config/tc-arm.c:2269
+#: config/tc-arm.c:2203 config/tc-arm.c:2247
msgid "register out of range in list"
msgstr "registre hors limite dans la liste"
-#: config/tc-arm.c:2247 config/tc-arm.c:4542 config/tc-arm.c:4676
+#: config/tc-arm.c:2225 config/tc-arm.c:4546 config/tc-arm.c:4680
msgid "register list not in ascending order"
msgstr "liste de registres n'est pas en ordre croissant"
-#: config/tc-arm.c:2278
+#: config/tc-arm.c:2256
msgid "register range not in ascending order"
msgstr "gamme de registres n'est pas en ordre croissant"
-#: config/tc-arm.c:2317
+#: config/tc-arm.c:2295
msgid "non-contiguous register range"
msgstr "game de registres non contiguë"
-#: config/tc-arm.c:2377
+#: config/tc-arm.c:2355
msgid "register stride must be 1"
msgstr "pas des registres doit être 1"
-#: config/tc-arm.c:2378
+#: config/tc-arm.c:2356
msgid "register stride must be 1 or 2"
msgstr "pas des registres doit être 1 ou 2"
-#: config/tc-arm.c:2379
+#: config/tc-arm.c:2357
msgid "mismatched element/structure types in list"
msgstr "types d'élément/structure en désaccord dans la liste"
-#: config/tc-arm.c:2449
+#: config/tc-arm.c:2427
msgid "don't use Rn-Rm syntax with non-unit stride"
msgstr "n'utilisez pas la syntaxe Rn-Rm avec un pas non unitaire"
-#: config/tc-arm.c:2504
+#: config/tc-arm.c:2482
msgid "error parsing element/structure list"
msgstr "erreur lors de l'analyse de la liste élément/structure"
-#: config/tc-arm.c:2510
+#: config/tc-arm.c:2488
msgid "expected }"
msgstr "} attendu"
-#: config/tc-arm.c:2600
+#: config/tc-arm.c:2578
msgid "attempt to redefine typed alias"
msgstr "tentative de redéfinition de l'alias typé"
-#: config/tc-arm.c:2735
+#: config/tc-arm.c:2713
msgid "bad type for register"
msgstr "mauvais type pour le registre"
-#: config/tc-arm.c:2746 config/tc-nios2.c:1797
+#: config/tc-arm.c:2724 config/tc-nios2.c:1797
msgid "expression must be constant"
msgstr "l'expression doit être une constante"
-#: config/tc-arm.c:2763
+#: config/tc-arm.c:2741
msgid "can't redefine the type of a register alias"
msgstr "le type d'un alias de registre ne peut pas être redéfini"
-#: config/tc-arm.c:2770
+#: config/tc-arm.c:2748
msgid "you must specify a single type only"
msgstr "vous ne pouvez spécifier qu'un type unique"
-#: config/tc-arm.c:2783
+#: config/tc-arm.c:2761
msgid "can't redefine the index of a scalar alias"
msgstr "l'indexe d'un alias scalaire ne peut pas être redéfini"
-#: config/tc-arm.c:2791
+#: config/tc-arm.c:2769
msgid "scalar index must be constant"
msgstr "l'indexe scalaire doit être constant"
-#: config/tc-arm.c:2800
+#: config/tc-arm.c:2778
msgid "expecting ]"
msgstr "] attendu"
-#: config/tc-arm.c:2852
+#: config/tc-arm.c:2830
msgid "invalid syntax for .dn directive"
msgstr "syntaxe invalide pour le directive .dn"
-#: config/tc-arm.c:2858
+#: config/tc-arm.c:2836
msgid "invalid syntax for .qn directive"
msgstr "syntaxe invalide pour le directive .qn"
-#: config/tc-arm.c:2893
+#: config/tc-arm.c:2871
#, c-format
msgid "ignoring attempt to use .unreq on fixed register name: '%s'"
msgstr "ignore la tentative d'utiliser .unreq sur un nom de registre fixe: « %s »"
-#: config/tc-arm.c:3155
+#: config/tc-arm.c:3133
#, c-format
msgid "Failed to find real start of function: %s\n"
msgstr "impossible de trouver le début réel de la fonction: %s\n"
-#: config/tc-arm.c:3172
+#: config/tc-arm.c:3150
msgid "selected processor does not support THUMB opcodes"
msgstr "le processeur choisi ne supporte pas les opcodes THUMB"
-#: config/tc-arm.c:3185
+#: config/tc-arm.c:3163
msgid "selected processor does not support ARM opcodes"
msgstr "le processeur choisi ne supporte pas les opcodes ARM"
-#: config/tc-arm.c:3197
+#: config/tc-arm.c:3175
#, c-format
msgid "invalid instruction size selected (%d)"
msgstr "taille d'instruction choisie invalide (%d)"
-#: config/tc-arm.c:3229
+#: config/tc-arm.c:3207
#, c-format
msgid "invalid operand to .code directive (%d) (expecting 16 or 32)"
msgstr "opérande invalide pour la directive .code (%d) (attendu 16 ou 32)"
-#: config/tc-arm.c:3284
+#: config/tc-arm.c:3262
#, c-format
msgid "expected comma after name \"%s\""
msgstr "virgule attendue après le nom « %s »"
-#: config/tc-arm.c:3334 config/tc-m32r.c:584
+#: config/tc-arm.c:3312 config/tc-m32r.c:584
#, c-format
msgid "symbol `%s' already defined"
msgstr "symbole « %s » déjà défini"
-#: config/tc-arm.c:3367
+#: config/tc-arm.c:3345
#, c-format
msgid "unrecognized syntax mode \"%s\""
msgstr "mode de syntaxe « %s » non reconnu"
-#: config/tc-arm.c:3410
+#: config/tc-arm.c:3388
msgid ".ref pseudo-op only available with -mccs flag."
msgstr "le pseudo-op .ref n'est disponible qu'avec le fanion -mccs."
-#: config/tc-arm.c:3451
+#: config/tc-arm.c:3429
msgid ".asmfunc repeated."
msgstr ".asmfunc répété."
-#: config/tc-arm.c:3455
+#: config/tc-arm.c:3433
msgid ".asmfunc without function."
msgstr ".asmfunc sans fonction."
-#: config/tc-arm.c:3461
+#: config/tc-arm.c:3439
msgid ".asmfunc pseudo-op only available with -mccs flag."
msgstr "le pseudo-op .asmfunc n'est disponible qu'avec le fanion -mccs."
-#: config/tc-arm.c:3472
+#: config/tc-arm.c:3450
msgid ".endasmfunc without a .asmfunc."
msgstr ".endasmfunc sans .asmfunc."
-#: config/tc-arm.c:3476
+#: config/tc-arm.c:3454
msgid ".endasmfunc without function."
msgstr ".endasmfunc sans fonction."
-#: config/tc-arm.c:3487
+#: config/tc-arm.c:3465
msgid ".endasmfunc pseudo-op only available with -mccs flag."
msgstr "le pseudo-op .endasmfunc n'est disponible qu'avec le fanion -mccs."
-#: config/tc-arm.c:3496
+#: config/tc-arm.c:3474
msgid ".def pseudo-op only available with -mccs flag."
msgstr "le pseudo-op .def n'est disponible qu'avec le fanion -mccs."
-#: config/tc-arm.c:3654
+#: config/tc-arm.c:3632
msgid "invalid type for literal pool"
msgstr "type invalide pour le bassin de littérales"
-#: config/tc-arm.c:3734 config/tc-tic54x.c:5331
+#: config/tc-arm.c:3712 config/tc-tic54x.c:5331
#, c-format
msgid "Invalid label '%s'"
msgstr "Étiquette invalide « %s »"
-#: config/tc-arm.c:3910
+#: config/tc-arm.c:3888
msgid "(plt) is only valid on branch targets"
msgstr "(plt) est seulement valable dans des cibles de branchements"
-#: config/tc-arm.c:3916 config/tc-csky.c:7649 config/tc-s390.c:1202
+#: config/tc-arm.c:3894 config/tc-csky.c:7650 config/tc-s390.c:1202
#: config/tc-s390.c:1872 config/tc-xtensa.c:1712
#, c-format
msgid "%s relocations do not fit in %d byte"
@@ -3660,408 +3790,420 @@ msgid_plural "%s relocations do not fit in %d bytes"
msgstr[0] "réadressages %s n'entre pas dans %d octet"
msgstr[1] "réadressages %s n'entre pas dans %d octets"
-#: config/tc-arm.c:3998
+#: config/tc-arm.c:3976
msgid ".inst.n operand too big. Use .inst.w instead"
msgstr "opérande .inst.n trop grand. Utilisez plutôt .inst.w"
-#: config/tc-arm.c:4018
+#: config/tc-arm.c:3996
msgid "cannot determine Thumb instruction size. Use .inst.n/.inst.w instead"
msgstr "impossible de déterminer la taille de l'instruction Thumb. Utilisez plutôt .inst.n/.inst.w"
-#: config/tc-arm.c:4048
+#: config/tc-arm.c:4026
msgid "width suffixes are invalid in ARM mode"
msgstr "les suffixes de largeurs sont invalides en mode ARM"
-#: config/tc-arm.c:4090 dwarf2dbg.c:1345
+#: config/tc-arm.c:4068 dwarf2dbg.c:1429
msgid "expected 0 or 1"
msgstr "0 ou 1 attendu"
-#: config/tc-arm.c:4094
+#: config/tc-arm.c:4072
msgid "missing comma"
msgstr "virgule manquante"
-#: config/tc-arm.c:4127
+#: config/tc-arm.c:4105
msgid "duplicate .fnstart directive"
msgstr "directive .fnstart en double"
-#: config/tc-arm.c:4158 config/tc-tic6x.c:410
+#: config/tc-arm.c:4136 config/tc-tic6x.c:410
msgid "duplicate .handlerdata directive"
msgstr "directive .handlerdata en double"
-#: config/tc-arm.c:4177
+#: config/tc-arm.c:4155
msgid ".fnend directive without .fnstart"
msgstr "directive .fnend sans .fnstart"
-#: config/tc-arm.c:4244 config/tc-tic6x.c:391
+#: config/tc-arm.c:4222 config/tc-tic6x.c:391
msgid "personality routine specified for cantunwind frame"
msgstr "routine de personnalité spécifiée dans un cadre cantunwind"
-#: config/tc-arm.c:4261 config/tc-tic6x.c:452
+#: config/tc-arm.c:4239 config/tc-tic6x.c:452
msgid "duplicate .personalityindex directive"
msgstr "directive .personalityindex en double"
-#: config/tc-arm.c:4268 config/tc-tic6x.c:459
+#: config/tc-arm.c:4246 config/tc-tic6x.c:459
msgid "bad personality routine number"
msgstr "mauvais numéro de routine de personnalité"
-#: config/tc-arm.c:4290 config/tc-tic6x.c:476
+#: config/tc-arm.c:4268 config/tc-tic6x.c:476
msgid "duplicate .personality directive"
msgstr "directive .personality en double"
-#: config/tc-arm.c:4314 config/tc-arm.c:4444 config/tc-arm.c:4494
+#: config/tc-arm.c:4290
+msgid "expected pseudo register list"
+msgstr "liste de pseudo-registres attendue"
+
+#: config/tc-arm.c:4318 config/tc-arm.c:4448 config/tc-arm.c:4498
msgid "expected register list"
-msgstr "liste de registre attendue"
+msgstr "liste de registres attendue"
-#: config/tc-arm.c:4396
+#: config/tc-arm.c:4400
msgid "expected , <constant>"
msgstr ", <constante> attendu"
-#: config/tc-arm.c:4405
+#: config/tc-arm.c:4409
msgid "number of registers must be in the range [1:4]"
msgstr "Le nombre de registres doit être compris dans l'intervalle [1:4]"
-#: config/tc-arm.c:4556 config/tc-arm.c:4690
+#: config/tc-arm.c:4560 config/tc-arm.c:4694
msgid "bad register range"
msgstr "mauvaise gamme de registre"
-#: config/tc-arm.c:4756
+#: config/tc-arm.c:4760
msgid "FPA .unwind_save does not take a register list"
msgstr "FPA .unwind_save n'accepte pas une liste de registres"
-#: config/tc-arm.c:4784
+#: config/tc-arm.c:4792
msgid ".unwind_save does not support this kind of register"
msgstr ".unwind_save ne supporte pas ce type de registre"
-#: config/tc-arm.c:4823
+#: config/tc-arm.c:4831
msgid "SP and PC not permitted in .unwind_movsp directive"
msgstr "SP et PC pas permis dans la directive .unwind_movsp"
-#: config/tc-arm.c:4828
+#: config/tc-arm.c:4836
msgid "unexpected .unwind_movsp directive"
msgstr "directive .unwind_movsp inattendue"
-#: config/tc-arm.c:4855
+#: config/tc-arm.c:4863
msgid "stack increment must be multiple of 4"
msgstr "incrément de pile doit être un multiple de 4"
-#: config/tc-arm.c:4887
+#: config/tc-arm.c:4895
msgid "expected <reg>, <reg>"
msgstr "<reg>, <reg> attendu"
-#: config/tc-arm.c:4905
+#: config/tc-arm.c:4913
msgid "register must be either sp or set by a previousunwind_movsp directive"
msgstr "le registre doit être soit sp ou soit spécifié par une directive unwind_movsp précédente"
-#: config/tc-arm.c:4944
+#: config/tc-arm.c:4952
msgid "expected <offset>, <opcode>"
msgstr "<offset>, <opcode> attendu"
-#: config/tc-arm.c:4956
+#: config/tc-arm.c:4964
msgid "unwind opcode too long"
msgstr "opcode unwind trop long"
-#: config/tc-arm.c:4961
+#: config/tc-arm.c:4969
msgid "invalid unwind opcode"
msgstr "opcode unwind incorrect"
-#: config/tc-arm.c:5076 config/tc-arm.c:32368
+#: config/tc-arm.c:5084 config/tc-arm.c:32483
#, c-format
msgid "unrecognised float16 format \"%s\""
msgstr "format float16 « %s » non reconnu"
-#: config/tc-arm.c:5087
+#: config/tc-arm.c:5095
msgid "float16 format cannot be set more than once, ignoring."
msgstr "le format float16 ne peut pas être défini plus d'une fois, ignoré"
-#: config/tc-arm.c:5202 config/tc-arm.c:6285 config/tc-arm.c:11658
-#: config/tc-arm.c:12191 config/tc-arm.c:14311 config/tc-arm.c:16262
-#: config/tc-arm.c:16297 config/tc-arm.c:17225 config/tc-arm.c:19148
-#: config/tc-arm.c:19156 config/tc-arm.c:19163 config/tc-arm.c:20808
-#: config/tc-arm.c:29417 config/tc-arm.c:29481 config/tc-arm.c:29489
+#: config/tc-arm.c:5210 config/tc-arm.c:6293 config/tc-arm.c:11686
+#: config/tc-arm.c:12219 config/tc-arm.c:14339 config/tc-arm.c:16290
+#: config/tc-arm.c:16325 config/tc-arm.c:17253 config/tc-arm.c:19176
+#: config/tc-arm.c:19184 config/tc-arm.c:19191 config/tc-arm.c:20842
+#: config/tc-arm.c:29495 config/tc-arm.c:29559 config/tc-arm.c:29567
#: config/tc-metag.c:5174 config/tc-z8k.c:1161 config/tc-z8k.c:1171
msgid "immediate value out of range"
msgstr "valeur immédiate hors limite"
-#: config/tc-arm.c:5372
+#: config/tc-arm.c:5380
msgid "invalid FPA immediate expression"
msgstr "mauvaise expression FPA immédiate"
-#: config/tc-arm.c:5558
+#: config/tc-arm.c:5566
msgid "'UXTW' not allowed here"
msgstr "« UXTW » n'est pas permis ici"
-#: config/tc-arm.c:5566
+#: config/tc-arm.c:5574
msgid "'LSL' or 'ASR' required"
msgstr "« LSL » ou « ASR » requis"
-#: config/tc-arm.c:5574
+#: config/tc-arm.c:5582
msgid "'LSL' required"
msgstr "« LSL » requis"
-#: config/tc-arm.c:5582
+#: config/tc-arm.c:5590
msgid "'ASR' required"
msgstr "« ASR » requis"
-#: config/tc-arm.c:5589
+#: config/tc-arm.c:5597
msgid "'UXTW' required"
msgstr "« UXTW » requis"
-#: config/tc-arm.c:5668
+#: config/tc-arm.c:5676
msgid "invalid rotation"
msgstr "rotation invalide"
-#: config/tc-arm.c:5850 config/tc-arm.c:6063
+#: config/tc-arm.c:5858 config/tc-arm.c:6071
msgid "unknown group relocation"
msgstr "réadressage de groupe inconnu"
-#: config/tc-arm.c:5886
+#: config/tc-arm.c:5894
msgid "alignment must be constant"
msgstr "l'alignement doit être une constante"
-#: config/tc-arm.c:6097
+#: config/tc-arm.c:6105
msgid "this group relocation is not allowed on this instruction"
msgstr "ce réadressage de groupe n'est pas permis sur cette instruction"
-#: config/tc-arm.c:6153
+#: config/tc-arm.c:6161
msgid "'}' expected at end of 'option' field"
msgstr "« } » attendu à la fin du champ « option »"
-#: config/tc-arm.c:6158
+#: config/tc-arm.c:6166
msgid "cannot combine index with option"
msgstr "index ne peut pas être combiné avec option"
-#: config/tc-arm.c:6423
+#: config/tc-arm.c:6431
msgid "unexpected bit specified after APSR"
msgstr "bit inattendu après APSR"
-#: config/tc-arm.c:6435
+#: config/tc-arm.c:6443
msgid "selected processor does not support DSP extension"
msgstr "le processeur choisi ne supporte pas l'extension DSP"
-#: config/tc-arm.c:6447
+#: config/tc-arm.c:6455
msgid "bad bitmask specified after APSR"
msgstr "mauvais bitmask spécifié après APSR"
-#: config/tc-arm.c:6471
+#: config/tc-arm.c:6479
msgid "writing to APSR without specifying a bitmask is deprecated"
msgstr "écrire dans APSR sans spécifier de bitmask est réprouvé"
-#: config/tc-arm.c:6483 config/tc-arm.c:13414 config/tc-arm.c:13459
-#: config/tc-arm.c:13463
+#: config/tc-arm.c:6491 config/tc-arm.c:13442 config/tc-arm.c:13487
+#: config/tc-arm.c:13491
msgid "selected processor does not support requested special purpose register"
msgstr "le processeur sélectionné ne supporte pas le registre spécialisé demandé"
-#: config/tc-arm.c:6488
+#: config/tc-arm.c:6496
msgid "flag for {c}psr instruction expected"
msgstr "fanion pour instruction {c}psr attendu"
-#: config/tc-arm.c:6546
+#: config/tc-arm.c:6554
msgid "unrecognized CPS flag"
msgstr "fanion CPS non reconnu"
-#: config/tc-arm.c:6553
+#: config/tc-arm.c:6561
msgid "missing CPS flags"
msgstr "fanions CPS manquants"
-#: config/tc-arm.c:6576 config/tc-arm.c:6582
+#: config/tc-arm.c:6584 config/tc-arm.c:6590
msgid "valid endian specifiers are be or le"
msgstr "spécificateurs petit/gros boutistes possibles sont be ou le"
# macro.c:559error setting flags for \".sbss\": %s"
-#: config/tc-arm.c:6604
+#: config/tc-arm.c:6612
msgid "missing rotation field after comma"
msgstr "champ de rotation manquant après la virgule"
-#: config/tc-arm.c:6619
+#: config/tc-arm.c:6627
msgid "rotation can only be 0, 8, 16, or 24"
msgstr "rotation ne peut être que 0, 8, 16 ou 24"
-#: config/tc-arm.c:6648
+#: config/tc-arm.c:6656
msgid "condition required"
msgstr "condition requise"
-#: config/tc-arm.c:6690 config/tc-arm.c:9827
+#: config/tc-arm.c:6698 config/tc-arm.c:9849
msgid "'[' expected"
msgstr "« [ » attendu"
-#: config/tc-arm.c:6703
+#: config/tc-arm.c:6711
msgid "',' expected"
msgstr "« , » attendu"
-#: config/tc-arm.c:6720
+#: config/tc-arm.c:6728
msgid "invalid shift"
msgstr "décalage invalide"
-#: config/tc-arm.c:6800
+#: config/tc-arm.c:6808
msgid "expected ARM or MVE vector register"
msgstr "registre vectoriel ARM ou MVE attendu"
-#: config/tc-arm.c:6849
+#: config/tc-arm.c:6857
msgid "can't use Neon quad register here"
msgstr "un quadruple registre Neon ne peut pas être utilisé ici"
-#: config/tc-arm.c:6918
+#: config/tc-arm.c:6926
msgid "expected <Rm> or <Dm> or <Qm> operand"
msgstr "opérande <Rm> ou <Dm> ou <Qm> attendu"
-#: config/tc-arm.c:7018
+#: config/tc-arm.c:7026
msgid "VFP single, double or MVE vector register expected"
msgstr "registre VFP en simple ou double précision ou registre vectoriel MVE attendu"
-#: config/tc-arm.c:7038
+#: config/tc-arm.c:7046
msgid "parse error"
msgstr "erreur d'analyse"
-#: config/tc-arm.c:7340
+#: config/tc-arm.c:7350
msgid "immediate value 48 or 64 expected"
msgstr "valeur immédiate 48 ou 64 attendue"
#. ISB can only take SY as an option.
-#: config/tc-arm.c:7389
+#: config/tc-arm.c:7399
msgid "invalid barrier type"
msgstr "type de barrière invalide"
-#: config/tc-arm.c:7563
+#: config/tc-arm.c:7575
msgid "only floating point zero is allowed as immediate value"
msgstr "seul le zéro en virgule flottante est autorisé comme valeur immédiate"
-#: config/tc-arm.c:7658
+#: config/tc-arm.c:7670
msgid "immediate value is out of range"
msgstr "valeur immédiate hors limite"
-#: config/tc-arm.c:7833
+#: config/tc-arm.c:7845
msgid "iWMMXt data or control register expected"
msgstr "registre de donnée ou de contrôle iWMMXt attendu"
-#: config/tc-arm.c:7874
+#: config/tc-arm.c:7886
msgid "Banked registers are not available with this architecture."
msgstr "Registres « Banked » non disponibles pour cette architecture"
-#: config/tc-arm.c:8122
+#: config/tc-arm.c:8134
msgid "operand must be LR register"
-msgstr "opérande doit être un registre LR"
+msgstr "l'opérande doit être un registre LR"
-#: config/tc-arm.c:8193 config/tc-score.c:264
+#: config/tc-arm.c:8139
+msgid "operand must be SP register"
+msgstr "l'opérande doit être un registre SP"
+
+#: config/tc-arm.c:8144
+msgid "operand must be r12"
+msgstr "l'opérande doit être r12"
+
+#: config/tc-arm.c:8215 config/tc-score.c:264
msgid "garbage following instruction"
msgstr "instruction suivie de rebuts"
#. If REG is R13 (the stack pointer), warn that its use is
#. deprecated.
-#: config/tc-arm.c:8243
+#: config/tc-arm.c:8265
msgid "use of r13 is deprecated"
msgstr "utilisation de r13 est obsolète"
-#: config/tc-arm.c:8261 config/tc-arm.c:20514
+#: config/tc-arm.c:8283 config/tc-arm.c:20542
msgid "ARMv8.2 scalar fp16 instruction cannot be conditional, the behaviour is UNPREDICTABLE"
msgstr "l'instruction fp16 scalaire du ARMv8.2 ne peut pas être conditionnelle, le comportement est IMPRÉVISIBLE"
-#: config/tc-arm.c:8336
+#: config/tc-arm.c:8358
msgid "D register out of range for selected VFP version"
msgstr "registre D hors limite pour la version VFP choisie"
-#: config/tc-arm.c:8433 config/tc-arm.c:11353
+#: config/tc-arm.c:8455 config/tc-arm.c:11375
msgid "Instruction does not support =N addresses"
msgstr "L'instruction ne supporte par les adresses =N"
-#: config/tc-arm.c:8441
+#: config/tc-arm.c:8463
msgid "instruction does not accept preindexed addressing"
msgstr "l'instruction n'accepte pas un adressage pré indexé"
#. unindexed - only for coprocessor
-#: config/tc-arm.c:8457 config/tc-arm.c:11416
+#: config/tc-arm.c:8479 config/tc-arm.c:11438
msgid "instruction does not accept unindexed addressing"
msgstr "l'instruction n'accepte pas un adressage désindexé"
-#: config/tc-arm.c:8465
+#: config/tc-arm.c:8487
msgid "destination register same as write-back base"
msgstr "le registre de destination est le même que la base de réécriture arrière"
-#: config/tc-arm.c:8466
+#: config/tc-arm.c:8488
msgid "source register same as write-back base"
msgstr "registre source identique à la base de réécriture arrière"
-#: config/tc-arm.c:8516
+#: config/tc-arm.c:8538
msgid "use of PC in this instruction is deprecated"
msgstr "l'utilisation de PC dans cette instruction est dépréciée"
-#: config/tc-arm.c:8539
+#: config/tc-arm.c:8561
msgid "instruction does not accept scaled register index"
msgstr "l'instruction n'accepte pas un index de registre mis à l'échelle"
-#: config/tc-arm.c:8844
+#: config/tc-arm.c:8866
msgid "invalid pseudo operation"
msgstr "pseudo opération invalide"
-#: config/tc-arm.c:9084
+#: config/tc-arm.c:9106
msgid "invalid co-processor operand"
msgstr "opérande de coprocesseur invalide"
-#: config/tc-arm.c:9100
+#: config/tc-arm.c:9122
msgid "instruction does not support unindexed addressing"
msgstr "l'instruction n'accepte pas l'adressage désindexé"
-#: config/tc-arm.c:9115
+#: config/tc-arm.c:9137
msgid "pc may not be used with write-back"
msgstr "PC ne peut être utilisé en mode réécriture"
-#: config/tc-arm.c:9120
+#: config/tc-arm.c:9142
msgid "instruction does not support writeback"
msgstr "l'instruction ne supporte pas la réécriture"
-#: config/tc-arm.c:9226
+#: config/tc-arm.c:9248
msgid "Rn must not overlap other operands"
msgstr "Rn ne peut pas recouvrir d'autres opérandes"
-#: config/tc-arm.c:9231
+#: config/tc-arm.c:9253
msgid "swp{b} use is obsoleted for ARMv8 and later"
msgstr "swp{b} est obsolète pour ARMv8 et suivants"
-#: config/tc-arm.c:9234
+#: config/tc-arm.c:9256
msgid "swp{b} use is deprecated for ARMv6 and ARMv7"
msgstr "swp{b} est déprécié pour ARMv6 et ARMv7"
-#: config/tc-arm.c:9353 config/tc-arm.c:9372 config/tc-arm.c:9385
-#: config/tc-arm.c:12028 config/tc-arm.c:12059 config/tc-arm.c:12081
+#: config/tc-arm.c:9375 config/tc-arm.c:9394 config/tc-arm.c:9407
+#: config/tc-arm.c:12056 config/tc-arm.c:12087 config/tc-arm.c:12109
msgid "bit-field extends past end of register"
msgstr "le champ de bits s'étend au delà de la fin du registre"
-#: config/tc-arm.c:9415
+#: config/tc-arm.c:9437
msgid "the only valid suffixes here are '(plt)' and '(tlscall)'"
msgstr "les seuls suffixes valides ici sont « (plt) » et « (tlscall) »"
-#: config/tc-arm.c:9468
+#: config/tc-arm.c:9490
msgid "use of r15 in blx in ARM mode is not really useful"
msgstr "utilisation de r15 dans le blx en mode ARM n'est pas très utile"
-#: config/tc-arm.c:9490
+#: config/tc-arm.c:9512
msgid "use of r15 in bx in ARM mode is not really useful"
msgstr "utilisation de r15 dans le bx en mode ARM n'est pas très utile"
-#: config/tc-arm.c:9516
+#: config/tc-arm.c:9538
msgid "use of r15 in bxj is not really useful"
msgstr "utilisation de r15 dans le bxj n'est pas très utile"
-#: config/tc-arm.c:9564
+#: config/tc-arm.c:9586
msgid "This coprocessor register access is deprecated in ARMv8"
msgstr "L'accès à ce registre de coprocesseur est déprécié avec ARMv8"
-#: config/tc-arm.c:9772 config/tc-arm.c:9781
+#: config/tc-arm.c:9794 config/tc-arm.c:9803
msgid "writeback of base register is UNPREDICTABLE"
msgstr "réécriture arrière du registre de base est IMPRÉVISIBLE"
-#: config/tc-arm.c:9775
+#: config/tc-arm.c:9797
msgid "writeback of base register when in register list is UNPREDICTABLE"
msgstr "réécriture du registre de base en étant dans une liste de registres est IMPRÉVISBLE"
-#: config/tc-arm.c:9785
+#: config/tc-arm.c:9807
msgid "if writeback register is in list, it must be the lowest reg in the list"
msgstr "si le registre de réécriture est dans la liste, il doit être le plus bas dans la liste"
-#: config/tc-arm.c:9822
+#: config/tc-arm.c:9844
msgid "first transfer register must be even"
msgstr "le premier registre de transfert doit être pair"
-#: config/tc-arm.c:9825
+#: config/tc-arm.c:9847
msgid "can only transfer two consecutive registers"
msgstr "seuls deux registres consécutifs peuvent être transférés"
@@ -4069,1397 +4211,1401 @@ msgstr "seuls deux registres consécutifs peuvent être transférés"
#. have been called in the first place.
#. If op 2 were present and equal to PC, this function wouldn't
#. have been called in the first place.
-#: config/tc-arm.c:9826 config/tc-arm.c:9896 config/tc-arm.c:10627
-#: config/tc-arm.c:12903
+#: config/tc-arm.c:9848 config/tc-arm.c:9918 config/tc-arm.c:10649
+#: config/tc-arm.c:12931
msgid "r14 not allowed here"
msgstr "r14 n'est pas permis ici"
-#: config/tc-arm.c:9838
+#: config/tc-arm.c:9860
msgid "base register written back, and overlaps second transfer register"
msgstr "registre de base réécrit et recouvre le second registre de transfert"
-#: config/tc-arm.c:9848
+#: config/tc-arm.c:9870
msgid "index register overlaps transfer register"
msgstr "registre d'index recouvre le registre de transfert"
-#: config/tc-arm.c:9877 config/tc-arm.c:10594
+#: config/tc-arm.c:9899 config/tc-arm.c:10616
msgid "offset must be zero in ARM encoding"
msgstr "l'offset doit être zéro dans l'encodage ARM"
-#: config/tc-arm.c:9890 config/tc-arm.c:10621
+#: config/tc-arm.c:9912 config/tc-arm.c:10643
msgid "even register required"
msgstr "numéro pair de registre requis"
-#: config/tc-arm.c:9893
+#: config/tc-arm.c:9915
msgid "can only load two consecutive registers"
msgstr "seuls deux registres consécutifs peuvent être chargés"
-#: config/tc-arm.c:9911
+#: config/tc-arm.c:9933
msgid "ldr to register 15 must be 4-byte aligned"
msgstr "ldr vers le registre 15 doit être aligné sur 4 octets"
-#: config/tc-arm.c:9934 config/tc-arm.c:9966
+#: config/tc-arm.c:9956 config/tc-arm.c:9988
msgid "this instruction requires a post-indexed address"
msgstr "cette instruction requiert un adresse post indexée"
-#: config/tc-arm.c:9993
+#: config/tc-arm.c:10015
msgid "Rd and Rm should be different in mla"
msgstr "Rd et Rm devraient être différents dans mla"
-#: config/tc-arm.c:10020 config/tc-arm.c:13278
+#: config/tc-arm.c:10042 config/tc-arm.c:13306
msgid ":lower16: not allowed in this instruction"
msgstr ":lower16: pas permis dans cette instruction"
-#: config/tc-arm.c:10022 config/tc-arm.c:13283
+#: config/tc-arm.c:10044 config/tc-arm.c:13311
msgid ":upper16: not allowed in this instruction"
msgstr ":upper16: pas permis dans cette instruction"
-#: config/tc-arm.c:10039
+#: config/tc-arm.c:10061
msgid "operand 1 must be FPSCR"
msgstr "opérande 1 doit être FPSCR"
-#: config/tc-arm.c:10092 config/tc-arm.c:10101 config/tc-arm.c:10155
-#: config/tc-arm.c:10164
+#: config/tc-arm.c:10114 config/tc-arm.c:10123 config/tc-arm.c:10177
+#: config/tc-arm.c:10186
msgid "selected processor does not support instruction"
msgstr "le processeur sélectionné ne supporte pas l'instruction"
-#: config/tc-arm.c:10104 config/tc-arm.c:10167
+#: config/tc-arm.c:10126 config/tc-arm.c:10189
msgid "accessing MVE system register without MVE is UNPREDICTABLE"
msgstr "accéder au registre système MVE sans MVE est IMPRÉVISIBLE"
-#: config/tc-arm.c:10195 config/tc-arm.c:13397
+#: config/tc-arm.c:10217 config/tc-arm.c:13425
msgid "bad register for mrs"
msgstr "mauvais registre pour mrs"
-#: config/tc-arm.c:10202 config/tc-arm.c:13421
+#: config/tc-arm.c:10224 config/tc-arm.c:13449
msgid "'APSR', 'CPSR' or 'SPSR' expected"
msgstr "« APSR », « CPSR » ou « SPSR » attendus"
-#: config/tc-arm.c:10243
+#: config/tc-arm.c:10265
msgid "Rd and Rm should be different in mul"
msgstr "Rd et Rm devraient être différents dans mul"
-#: config/tc-arm.c:10262 config/tc-arm.c:10539 config/tc-arm.c:13560
+#: config/tc-arm.c:10284 config/tc-arm.c:10561 config/tc-arm.c:13588
msgid "rdhi and rdlo must be different"
msgstr "rdhi et rdlo doivent être différents"
-#: config/tc-arm.c:10268
+#: config/tc-arm.c:10290
msgid "rdhi, rdlo and rm must all be different"
msgstr "rdhi, rdlo et rm doivent tous être différents"
-#: config/tc-arm.c:10334
+#: config/tc-arm.c:10356
msgid "'[' expected after PLD mnemonic"
msgstr "« [ » attendu après la mnémonique PLD"
-#: config/tc-arm.c:10336 config/tc-arm.c:10351
+#: config/tc-arm.c:10358 config/tc-arm.c:10373
msgid "post-indexed expression used in preload instruction"
msgstr "expression post-indexée utilisée dans une instruction de préchargement"
-#: config/tc-arm.c:10338 config/tc-arm.c:10353
+#: config/tc-arm.c:10360 config/tc-arm.c:10375
msgid "writeback used in preload instruction"
msgstr "réécriture utilisée dans une instruction de préchargement"
-#: config/tc-arm.c:10340 config/tc-arm.c:10355
+#: config/tc-arm.c:10362 config/tc-arm.c:10377
msgid "unindexed addressing used in preload instruction"
msgstr "expression désindexée utilisée dans une instruction de préchargement"
-#: config/tc-arm.c:10349
+#: config/tc-arm.c:10371
msgid "'[' expected after PLI mnemonic"
msgstr "« [ » attendu après la mnémonique PLI"
-#: config/tc-arm.c:10364 config/tc-arm.c:13729
+#: config/tc-arm.c:10386 config/tc-arm.c:13757
msgid "push/pop do not support {reglist}^"
msgstr "push/pop ne supporte pas {reglist}^"
-#: config/tc-arm.c:10442 config/tc-arm.c:13906
+#: config/tc-arm.c:10464 config/tc-arm.c:13934
msgid "setend use is deprecated for ARMv8"
msgstr "l'utilisation de setend est déprécié avec ARMv8"
-#: config/tc-arm.c:10463 config/tc-arm.c:13967 config/tc-arm.c:13999
-#: config/tc-arm.c:14042
+#: config/tc-arm.c:10485 config/tc-arm.c:13995 config/tc-arm.c:14027
+#: config/tc-arm.c:14070
msgid "extraneous shift as part of operand to shift insn"
msgstr "shift superflu dans l'opérande de l'instruction de shift"
-#: config/tc-arm.c:10473 config/tc-arm.c:14105
+#: config/tc-arm.c:10495 config/tc-arm.c:14133
msgid "immediate too large (bigger than 0xF)"
msgstr "immédiat trop grand (plus grand que 0xF)"
-#: config/tc-arm.c:10497 config/tc-arm.c:10506
+#: config/tc-arm.c:10519 config/tc-arm.c:10528
msgid "selected processor does not support SETPAN instruction"
msgstr "le processeur choisi ne supporte pas l'instruction SETPAN"
-#: config/tc-arm.c:10565
+#: config/tc-arm.c:10587
msgid "SRS base register must be r13"
msgstr "le registre de base SRS doit être r13"
-#: config/tc-arm.c:10624
+#: config/tc-arm.c:10646
msgid "can only store two consecutive registers"
msgstr "seuls deux registres consécutifs peuvent être stockés"
-#: config/tc-arm.c:10746 config/tc-arm.c:10767
+#: config/tc-arm.c:10768 config/tc-arm.c:10789
msgid "only two consecutive VFP SP registers allowed here"
msgstr "seuls deux registres consécutifs VFP SP sont permis ici"
-#: config/tc-arm.c:10795 config/tc-arm.c:10810
+#: config/tc-arm.c:10817 config/tc-arm.c:10832
msgid "this addressing mode requires base-register writeback"
msgstr "ce mode d'adressage requiert une réécriture du registre de base"
#. If srcsize is 16, inst.operands[1].imm must be in the range 0-16.
#. i.e. immbits must be in range 0 - 16.
-#: config/tc-arm.c:10939
+#: config/tc-arm.c:10961
msgid "immediate value out of range, expected range [0, 16]"
msgstr "valeur immédiate hors limite: limité à [0, 16]"
#. If srcsize is 32, inst.operands[1].imm must be in the range 1-32.
#. i.e. immbits must be in range 0 - 31.
-#: config/tc-arm.c:10946
+#: config/tc-arm.c:10968
msgid "immediate value out of range, expected range [1, 32]"
msgstr "valeur immédiate hors limite: limité à [1, 32]"
-#: config/tc-arm.c:11012
+#: config/tc-arm.c:11034
msgid "this instruction does not support indexing"
msgstr "cette instruction ne supporte pas l'indexage"
-#: config/tc-arm.c:11035
+#: config/tc-arm.c:11057
msgid "only r15 allowed here"
msgstr "seul r15 est permis ici"
-#: config/tc-arm.c:11170
+#: config/tc-arm.c:11192
msgid "immediate operand requires iWMMXt2"
msgstr "opérande immédiat requiert iwMMXt2"
-#: config/tc-arm.c:11314
+#: config/tc-arm.c:11336
msgid "shift by register not allowed in thumb mode"
msgstr "décalage par registre pas permis en mode thumb"
-#: config/tc-arm.c:11326 config/tc-arm.c:14151 config/tc-arm.c:28708
+#: config/tc-arm.c:11348 config/tc-arm.c:14179 config/tc-arm.c:28786
msgid "shift expression is too large"
msgstr "l'expression de décalage est trop grande"
-#: config/tc-arm.c:11359
+#: config/tc-arm.c:11381
msgid "cannot use register index with this instruction"
msgstr "un index de registre ne peut être utilisé avec cette instruction"
-#: config/tc-arm.c:11361
+#: config/tc-arm.c:11383
msgid "Thumb does not support negative register indexing"
msgstr "Thumb ne supporte pas l'indexation négative du registre"
-#: config/tc-arm.c:11363
+#: config/tc-arm.c:11385
msgid "Thumb does not support register post-indexing"
msgstr "Thumb ne supporte pas la post-indexation du registre"
-#: config/tc-arm.c:11365
+#: config/tc-arm.c:11387
msgid "Thumb does not support register indexing with writeback"
msgstr "Thumb ne supporte pas l'indexation du registre avec réécriture"
-#: config/tc-arm.c:11367
+#: config/tc-arm.c:11389
msgid "Thumb supports only LSL in shifted register indexing"
msgstr "Thumb supporte uniquement LSL dans l'indexation décalée du registre"
-#: config/tc-arm.c:11376 config/tc-arm.c:19882
+#: config/tc-arm.c:11398 config/tc-arm.c:19910
msgid "shift out of range"
msgstr "décalage hors limite"
-#: config/tc-arm.c:11385
+#: config/tc-arm.c:11407
msgid "cannot use writeback with this instruction"
msgstr "cette instruction ne peut pas utiliser la réécriture"
-#: config/tc-arm.c:11406
+#: config/tc-arm.c:11428
msgid "cannot use post-indexing with PC-relative addressing"
msgstr "le post-indexage ne peut pas être utilisé avec un adressage relatif au PC"
-#: config/tc-arm.c:11407
+#: config/tc-arm.c:11429
msgid "cannot use post-indexing with this instruction"
msgstr "le post-indexage ne peut pas être utilisé avec cette instruction"
-#: config/tc-arm.c:11639
+#: config/tc-arm.c:11667
msgid "cannot honor width suffix"
msgstr "ne peut honorer le suffixe de largeur"
-#: config/tc-arm.c:11653
+#: config/tc-arm.c:11681
msgid "only SUBS PC, LR, #const allowed"
msgstr "seulement SUBS PC, LR, #const permis"
-#: config/tc-arm.c:11736 config/tc-arm.c:11896 config/tc-arm.c:11993
-#: config/tc-arm.c:13358 config/tc-arm.c:13666
+#: config/tc-arm.c:11764 config/tc-arm.c:11924 config/tc-arm.c:12021
+#: config/tc-arm.c:13386 config/tc-arm.c:13694
msgid "shift must be constant"
msgstr "le décalage doit être constant"
-#: config/tc-arm.c:11741
+#: config/tc-arm.c:11769
msgid "shift value over 3 not allowed in thumb mode"
msgstr "valeur de décalage supérieure à 3 pas permise en mode thumb"
-#: config/tc-arm.c:11743
+#: config/tc-arm.c:11771
msgid "only LSL shift allowed in thumb mode"
msgstr "seul le décalage LSL est permis en mode thumb"
-#: config/tc-arm.c:11767 config/tc-arm.c:11911 config/tc-arm.c:12008
-#: config/tc-arm.c:13371
+#: config/tc-arm.c:11795 config/tc-arm.c:11939 config/tc-arm.c:12036
+#: config/tc-arm.c:13399
msgid "unshifted register required"
msgstr "registre non décalé requis"
-#: config/tc-arm.c:11782 config/tc-arm.c:12019 config/tc-arm.c:13521
+#: config/tc-arm.c:11810 config/tc-arm.c:12047 config/tc-arm.c:13549
msgid "dest must overlap one source register"
msgstr "dest dois recouvrir un registre source"
-#: config/tc-arm.c:11914 config/tc-csky.c:6003
+#: config/tc-arm.c:11942 config/tc-csky.c:6004
msgid "dest and source1 must be the same register"
msgstr "dest et source1 doivent être le même registre"
-#: config/tc-arm.c:12154
+#: config/tc-arm.c:12182
msgid "selected architecture does not support wide conditional branch instruction"
msgstr "l'architecture sélectionnée ne supporte pas les instructions de branchements conditionnels larges"
-#: config/tc-arm.c:12187
+#: config/tc-arm.c:12215
msgid "instruction is always unconditional"
msgstr "l'instruction est toujours non-conditionnelle"
-#: config/tc-arm.c:12362
+#: config/tc-arm.c:12390
msgid "selected processor does not support 'A' form of this instruction"
msgstr "le processeur sélectionné ne supporte pas la forme « A » de cette instruction"
-#: config/tc-arm.c:12365
+#: config/tc-arm.c:12393
msgid "Thumb does not support the 2-argument form of this instruction"
msgstr "Thumb ne supporte pas la forme de cette instruction avec 2 arguments"
-#: config/tc-arm.c:12490
+#: config/tc-arm.c:12518
msgid "SP not allowed in register list"
msgstr "SP pas permis dans la liste des registres"
-#: config/tc-arm.c:12494 config/tc-arm.c:12601
+#: config/tc-arm.c:12522 config/tc-arm.c:12629
msgid "having the base register in the register list when using write back is UNPREDICTABLE"
msgstr "le résultat est IMPRÉVISIBLE si le registre de base est dans la liste des registres pendant une réécriture"
-#: config/tc-arm.c:12502
+#: config/tc-arm.c:12530
msgid "LR and PC should not both be in register list"
msgstr "LR et PC ne devraient pas être tous les deux dans la liste des registres"
-#: config/tc-arm.c:12510
+#: config/tc-arm.c:12538
msgid "PC not allowed in register list"
msgstr "PC pas permis dans la liste des registres"
-#: config/tc-arm.c:12553
+#: config/tc-arm.c:12581
msgid "Thumb load/store multiple does not support {reglist}^"
msgstr "Load/store multiples de Thumb ne supportent pas {reglist}"
-#: config/tc-arm.c:12578 config/tc-arm.c:12656
+#: config/tc-arm.c:12606 config/tc-arm.c:12684
#, c-format
msgid "value stored for r%d is UNKNOWN"
msgstr "valeur stockée pour r%d est INCONNUE"
-#: config/tc-arm.c:12649
+#: config/tc-arm.c:12677
msgid "Thumb-2 instruction only valid in unified syntax"
msgstr "Instruction Thumb 2 seulement valide dans la syntaxe unifiée"
-#: config/tc-arm.c:12653 config/tc-arm.c:12663
+#: config/tc-arm.c:12681 config/tc-arm.c:12691
msgid "this instruction will write back the base register"
msgstr "cette instruction va réécrire le registre de base"
-#: config/tc-arm.c:12666
+#: config/tc-arm.c:12694
msgid "this instruction will not write back the base register"
msgstr "cette instruction ne va pas réécrire le registre de base"
-#: config/tc-arm.c:12697
+#: config/tc-arm.c:12725
msgid "r14 not allowed as first register when second register is omitted"
msgstr "r14 n'est pas permis comme premier registre quand le second registre est omis"
-#: config/tc-arm.c:12797
+#: config/tc-arm.c:12825
msgid "This instruction may be unpredictable if executed on M-profile cores with interrupts enabled."
msgstr "Cette instruction peut être imprévisible si elle est exécutée sur un cœur M-profile avec les interruptions activées."
-#: config/tc-arm.c:12826 config/tc-arm.c:12839 config/tc-arm.c:12875
+#: config/tc-arm.c:12854 config/tc-arm.c:12867 config/tc-arm.c:12903
msgid "Thumb does not support this addressing mode"
msgstr "Thumb ne supporte pas ce mode d'adressage"
-#: config/tc-arm.c:12843
+#: config/tc-arm.c:12871
msgid "byte or halfword not valid for base register"
msgstr "octet ou demi-mot non valide pour un registre de base"
-#: config/tc-arm.c:12846
+#: config/tc-arm.c:12874
msgid "r15 based store not allowed"
msgstr "r15 utilisé comme registre de base de stockage n'est pas permis"
-#: config/tc-arm.c:12848
+#: config/tc-arm.c:12876
msgid "invalid base register for register offset"
msgstr "registre de base invalide pour un registre de décalage"
-#: config/tc-arm.c:12905
+#: config/tc-arm.c:12933
msgid "r12 not allowed here"
msgstr "r12 n'est pas permis ici"
-#: config/tc-arm.c:12911
+#: config/tc-arm.c:12939
msgid "base register written back, and overlaps one of transfer registers"
msgstr "registre de base réécrit et recouvre un des registres de transfert"
-#: config/tc-arm.c:13039
+#: config/tc-arm.c:13067
#, c-format
msgid "Use of r%u as a source register is deprecated when r%u is the destination register."
msgstr "L'utilisation de r%u en tant que registre source est dépréciée quand r%u est le registre destination"
-#: config/tc-arm.c:13234
+#: config/tc-arm.c:13262
msgid "shifts in CMP/MOV instructions are only supported in unified syntax"
msgstr "les décalages dans les instructions CMP/MOV sont uniquement supportées dans la syntaxe unifiée"
-#: config/tc-arm.c:13262
+#: config/tc-arm.c:13290
msgid "only lo regs allowed with immediate"
msgstr "seul les registres lo sont permis avec un immédiat"
-#: config/tc-arm.c:13439
+#: config/tc-arm.c:13467
msgid "Thumb encoding does not support an immediate here"
msgstr "encodage Thumb ne supporte pas un immédiat ici"
-#: config/tc-arm.c:13526
+#: config/tc-arm.c:13554
msgid "Thumb-2 MUL must not set flags"
msgstr "MUL sur Thumb-2 ne doit pas activer de fanion"
-#: config/tc-arm.c:13591
+#: config/tc-arm.c:13619
msgid "Thumb does not support NOP with hints"
msgstr "Thumb ne supporte pas NOP avec des indices"
-#: config/tc-arm.c:13751 config/tc-arm.c:13763
+#: config/tc-arm.c:13779 config/tc-arm.c:13791
msgid "invalid register list to push/pop instruction"
msgstr "liste de registres invalide pour les instructions push/pop"
-#: config/tc-arm.c:14026
+#: config/tc-arm.c:14054
msgid "source1 and dest must be same register"
msgstr "source1 et dest doivent être le même registre"
-#: config/tc-arm.c:14051
+#: config/tc-arm.c:14079
msgid "ror #imm not supported"
msgstr "ror #imm n'est pas supportée"
-#: config/tc-arm.c:14102
+#: config/tc-arm.c:14130
msgid "SMC is not permitted on this architecture"
msgstr "SMC n'est pas permis sur cette architecture"
-#: config/tc-arm.c:14268
+#: config/tc-arm.c:14296
msgid "Thumb encoding does not support rotation"
msgstr "l'encodage Thumb ne supporte pas les rotations"
-#: config/tc-arm.c:14288
+#: config/tc-arm.c:14316
msgid "instruction requires register index"
msgstr "l'instruction requiert un index de registre"
-#: config/tc-arm.c:14298
+#: config/tc-arm.c:14326
msgid "instruction does not allow shifted index"
msgstr "l'instruction n'autorise pas un index décalé"
-#: config/tc-arm.c:14454 config/tc-arm.c:29852
+#: config/tc-arm.c:14482 config/tc-arm.c:29930
msgid "out of range label-relative fixup value"
msgstr "la valeur de correctif relative à l'étiquette est hors limites"
-#: config/tc-arm.c:14778
+#: config/tc-arm.c:14806
msgid "invalid neon suffix for non neon instruction"
msgstr "suffixe néon invalide pour une instruction non néon"
-#: config/tc-arm.c:15173 config/tc-arm.c:15526 config/tc-arm.c:17011
-#: config/tc-arm.c:17091 config/tc-arm.c:17148 config/tc-arm.c:19029
-#: config/tc-arm.c:21212 config/tc-arm.c:21399
+#: config/tc-arm.c:15201 config/tc-arm.c:15554 config/tc-arm.c:17039
+#: config/tc-arm.c:17119 config/tc-arm.c:17176 config/tc-arm.c:19057
+#: config/tc-arm.c:21246 config/tc-arm.c:21433
msgid "invalid instruction shape"
msgstr "mauvaise forme d'instruction"
-#: config/tc-arm.c:15425
+#: config/tc-arm.c:15453
msgid "types specified in both the mnemonic and operands"
msgstr "types spécifiés à la fois dans la mnémonique et les opérandes"
-#: config/tc-arm.c:15462
+#: config/tc-arm.c:15490
msgid "operand types can't be inferred"
msgstr "les types de l'opérande ne peuvent pas être inférés"
-#: config/tc-arm.c:15468
+#: config/tc-arm.c:15496
msgid "type specifier has the wrong number of parts"
msgstr "le spécificateur de type a le mauvais nombre de parties"
-#: config/tc-arm.c:15554 config/tc-arm.c:19300 config/tc-arm.c:19307
+#: config/tc-arm.c:15582 config/tc-arm.c:19328 config/tc-arm.c:19335
msgid "operand size must match register width"
msgstr "la taille de l'opérande doit correspondre à la largeur du registre"
-#: config/tc-arm.c:15576
+#: config/tc-arm.c:15604
msgid "inconsistent types in Neon instruction"
msgstr "types inconsistants dans une instruction Neon"
-#: config/tc-arm.c:15997
+#: config/tc-arm.c:16025
msgid "Type is not allowed for this instruction"
msgstr "Le type n'est pas permis pour cette instruction"
-#: config/tc-arm.c:16072
+#: config/tc-arm.c:16100
msgid "MVE vector or ARM register expected"
msgstr "registre vectoriel MVE ou registre ARM attendu"
-#: config/tc-arm.c:16189
+#: config/tc-arm.c:16217
msgid "immediate must be either 1, 2, 4 or 8"
msgstr "immédiat doit être soit 1, 2, 4 ou 8"
-#: config/tc-arm.c:16346
+#: config/tc-arm.c:16374
msgid "immediate operand expected in the range [1,8]"
msgstr "opérande immédiat attendu dans la plage [1,8]"
-#: config/tc-arm.c:16347
+#: config/tc-arm.c:16375
msgid "immediate operand expected in the range [1,16]"
msgstr "opérande immédiat attendu dans la plage [1,16]"
-#: config/tc-arm.c:16489
+#: config/tc-arm.c:16517
msgid "expected LR"
msgstr "LR attendu"
-#: config/tc-arm.c:16988 config/tc-arm.c:17068 config/tc-arm.c:18665
-#: config/tc-arm.c:20499
+#: config/tc-arm.c:17016 config/tc-arm.c:17096 config/tc-arm.c:18693
+#: config/tc-arm.c:20527
msgid "immediate out of range for shift"
msgstr "valeur immédiate hors limite pour un décalage"
-#: config/tc-arm.c:17282
+#: config/tc-arm.c:17310
msgid "first and second operands shall be the same register"
msgstr "le premier et second opérandes seront les mêmes registres"
-#: config/tc-arm.c:17396 config/tc-arm.c:17458
+#: config/tc-arm.c:17424 config/tc-arm.c:17486
msgid "destination register and offset register may not be the same"
msgstr "le registre destination et le registre de décalage ne peuvent pas être le même"
-#: config/tc-arm.c:17408 config/tc-arm.c:17527
+#: config/tc-arm.c:17436 config/tc-arm.c:17555
msgid "immediate must be a multiple of 4 in the range of +/-[0,508]"
msgstr "l'immédiat doit être un multiple de 4 dans la plage +/-[0,508]"
-#: config/tc-arm.c:17410
+#: config/tc-arm.c:17438
msgid "immediate must be a multiple of 8 in the range of +/-[0,1016]"
msgstr "l'immédiat doit être un multiple de 8 dans la plage +/-[0,1016]"
# Frédéric: Entorse à la traduction car "décaler les décalages" risque de ne pas être clair
-#: config/tc-arm.c:17431
+#: config/tc-arm.c:17459
msgid "can not shift offsets when accessing less than half-word"
msgstr "impossible de décaler les offsets lors d'un accès à moins d'un demi-mot"
-#: config/tc-arm.c:17433
+#: config/tc-arm.c:17461
msgid "shift immediate must be 1, 2 or 3 for half-word, word or double-word accesses respectively"
msgstr "le décalage d'un immédiat doit être 1, 2 ou 3 pour les accès à des demi-mots, mots ou double mots respectivement"
-#: config/tc-arm.c:17520
+#: config/tc-arm.c:17548
msgid "immediate must be in the range of +/-[0,127]"
msgstr "l'immédiat doit être dans la plage +/-[0,127]"
-#: config/tc-arm.c:17523
+#: config/tc-arm.c:17551
msgid "immediate must be a multiple of 2 in the range of +/-[0,254]"
msgstr "l'immédiat doit être un multiple de 2 dans la plage +/-[0,254]"
-#: config/tc-arm.c:17537 config/tc-arm.c:18363
+#: config/tc-arm.c:17565 config/tc-arm.c:18391
msgid "MVE vector register in the range [Q0..Q7] expected"
msgstr "registre vectoriel MVE dans la plage [Q0..Q7] attendu"
-#: config/tc-arm.c:17853 config/tc-arm.c:19721
+#: config/tc-arm.c:17881 config/tc-arm.c:19749
msgid "scalar out of range for multiply instruction"
msgstr "scalaire hors limite pour une instruction de multiplication"
-#: config/tc-arm.c:17941
+#: config/tc-arm.c:17969
msgid "index must be in the range 0 to 3"
msgstr "l'index doit être dans la plage 0 à 3"
-#: config/tc-arm.c:17944
+#: config/tc-arm.c:17972
msgid "indexed register must be less than 8"
msgstr "le registre indexé doit être plus petit que 8"
-#: config/tc-arm.c:18145 config/tc-arm.c:21463
+#: config/tc-arm.c:18173 config/tc-arm.c:21497
msgid "Warning: 32-bit element size and same first and third operand makes instruction UNPREDICTABLE"
msgstr "Attention: une taille d'élément de 32 bits et les mêmes premier et troisième opérandes rendent l'instruction IMPRÉVISIBLE"
-#: config/tc-arm.c:18504
+#: config/tc-arm.c:18532
msgid "instruction form not available on this architecture."
msgstr "forme d'instruction pas supportée par cette architecture."
-#: config/tc-arm.c:18507
+#: config/tc-arm.c:18535
msgid "this instruction implies use of ARMv8.1 AdvSIMD."
msgstr "cette instruction implique l'utilisation de AdvSIMD du ARMv8.1."
-#: config/tc-arm.c:18614 config/tc-arm.c:18639
+#: config/tc-arm.c:18642 config/tc-arm.c:18667
msgid "immediate out of range for insert"
msgstr "valeur immédiate hors limite pour une insertion"
-#: config/tc-arm.c:18786
+#: config/tc-arm.c:18814
msgid "immediate out of range for narrowing operation"
msgstr "valeur immédiate hors limite pour une opération de rétrécissement"
-#: config/tc-arm.c:18933
+#: config/tc-arm.c:18961
msgid "operands 0 and 1 must be the same register"
msgstr "opérandes 0 et 1 doivent être le même registre"
-#: config/tc-arm.c:19039 config/tc-arm.c:21311
+#: config/tc-arm.c:19067 config/tc-arm.c:21345
msgid "invalid rounding mode"
msgstr "mode d'arrondi incorrect"
-#: config/tc-arm.c:19511
+#: config/tc-arm.c:19539
msgid "operand size must be specified for immediate VMOV"
msgstr "la taille de l'opérande doit être spécifiée pour VMOV immédiat"
-#: config/tc-arm.c:19521
+#: config/tc-arm.c:19549
msgid "immediate has bits set outside the operand size"
msgstr "la valeur immédiate à des bits mis en dehors de la taille de l'opérande"
-#: config/tc-arm.c:19756
+#: config/tc-arm.c:19784
msgid "vfmal/vfmsl with FP16 type cannot be conditional, the behaviour is UNPREDICTABLE"
msgstr "vfmal/vfmsl avec le type FP16 ne peut pas être conditionnel, le comportement est IMPRÉVISIBLE"
-#: config/tc-arm.c:19864
+#: config/tc-arm.c:19892
msgid "Instruction form not available on this architecture."
msgstr "Forme d'instruction pas supportée par cette architecture."
-#: config/tc-arm.c:19918
+#: config/tc-arm.c:19946
msgid "Warning: 64-bit element size and same destination and source operands makes instruction UNPREDICTABLE"
msgstr "Attention: une taille d'élément de 64 bits et les mêmes opérandes destination et source rendent l'instruction IMPRÉVISIBLE"
-#: config/tc-arm.c:19923
+#: config/tc-arm.c:19951
msgid "elements must be smaller than reversal region"
msgstr "les éléments doivent être plus petits que la région inversée"
-#: config/tc-arm.c:20015
+#: config/tc-arm.c:20043
msgid "Index one must be [2,3] and index two must be two less than index one."
msgstr "L'index un doit être [2,3] et l'index deux doit être deux plus petit que l'index un."
-#: config/tc-arm.c:20018
+#: config/tc-arm.c:20046
msgid "Destination registers may not be the same"
msgstr "Les registres de destination ne peuvent pas être les mêmes"
-#: config/tc-arm.c:20216 config/tc-arm.c:20299
+#: config/tc-arm.c:20244 config/tc-arm.c:20327
msgid "bad type for scalar"
msgstr "mauvais type pour un scalaire"
-#: config/tc-arm.c:20355
+#: config/tc-arm.c:20383
msgid "immediate constant is valid both as a bit-pattern and a floating point value (using the fp value)"
msgstr "la constante immédiate est valide à la fois comme champ de bits et comme valeur en virgule flottante (en utilisant la valeur fp)"
-#: config/tc-arm.c:20407 config/tc-arm.c:20418
+#: config/tc-arm.c:20435 config/tc-arm.c:20446
msgid "VFP registers must be adjacent"
msgstr "les registres VFP doivent être adjacents"
-#: config/tc-arm.c:20508
+#: config/tc-arm.c:20536
msgid "invalid suffix"
msgstr "suffixe invalide"
-#: config/tc-arm.c:20662
+#: config/tc-arm.c:20690
msgid "bad list length for table lookup"
msgstr "mauvaise longueur de liste pour une recherche dans la table"
-#: config/tc-arm.c:20695
+#: config/tc-arm.c:20723
msgid "writeback (!) must be used for VLDMDB and VSTMDB"
msgstr "réécriture (!) doit être utilisée pour VLDMDB et VSTMDB"
-#: config/tc-arm.c:20698 config/tc-arm.c:20723 config/tc-arm.c:20744
+#: config/tc-arm.c:20726 config/tc-arm.c:20752
msgid "register list must contain at least 1 and at most 16 registers"
msgstr "une liste de registres doit contenir au moins 1 registre et au plus 16 registres"
-#: config/tc-arm.c:20766 config/tc-arm.c:20799
+#: config/tc-arm.c:20747
+msgid "register list must contain at least 1 and at most 32 registers"
+msgstr "une liste de registres doit contenir au moins 1 registre et au plus 32 registres"
+
+#: config/tc-arm.c:20800 config/tc-arm.c:20833
msgid "Use of PC here is UNPREDICTABLE"
msgstr "L'utilisation de PC ici est IMPRÉVISIBLE"
-#: config/tc-arm.c:20768
+#: config/tc-arm.c:20802
msgid "Use of PC here is deprecated"
msgstr "L'utilisation de PC ici est dépréciée"
-#: config/tc-arm.c:20802
+#: config/tc-arm.c:20836
msgid "instruction does not accept register index"
msgstr "l'instruction n'accepte pas un index de registre"
-#: config/tc-arm.c:20805
+#: config/tc-arm.c:20839
msgid "instruction does not accept PC-relative addressing"
msgstr "l'instruction n'accepte pas un adressage relatif au PC"
-#: config/tc-arm.c:20827 config/tc-arm.c:20836
+#: config/tc-arm.c:20861 config/tc-arm.c:20870
msgid "Instruction not permitted on this architecture"
msgstr "Instruction pas permise sur cette architecture"
-#: config/tc-arm.c:20885
+#: config/tc-arm.c:20919
msgid "bad alignment"
msgstr "mauvais alignement"
-#: config/tc-arm.c:20902
+#: config/tc-arm.c:20936
msgid "bad list type for instruction"
msgstr "mauvais type de liste pour l'instruction"
-#: config/tc-arm.c:20946
+#: config/tc-arm.c:20980
msgid "unsupported alignment for instruction"
msgstr "alignement non supporté pour l'instruction"
-#: config/tc-arm.c:20965 config/tc-arm.c:21059 config/tc-arm.c:21071
-#: config/tc-arm.c:21081 config/tc-arm.c:21095
+#: config/tc-arm.c:20999 config/tc-arm.c:21093 config/tc-arm.c:21105
+#: config/tc-arm.c:21115 config/tc-arm.c:21129
msgid "bad list length"
msgstr "mauvaise longueur de liste"
-#: config/tc-arm.c:20970
+#: config/tc-arm.c:21004
msgid "stride of 2 unavailable when element size is 8"
msgstr "pas de 2 pas disponible quand la taille de l'élément est 8"
-#: config/tc-arm.c:21003 config/tc-arm.c:21079
+#: config/tc-arm.c:21037 config/tc-arm.c:21113
msgid "can't use alignment with this instruction"
msgstr "un alignement ne peut pas être utilisé avec cette instruction"
-#: config/tc-arm.c:21151
+#: config/tc-arm.c:21185
msgid "post-index must be a register"
msgstr "le post-index doit être un registre"
-#: config/tc-arm.c:21153
+#: config/tc-arm.c:21187
msgid "bad register for post-index"
msgstr "mauvais registre pour un post-index"
-#: config/tc-arm.c:21375
+#: config/tc-arm.c:21409
msgid "scalar out of range"
msgstr "scalaire hors limite"
-#: config/tc-arm.c:21508
+#: config/tc-arm.c:21542
msgid "Dot Product instructions cannot be conditional, the behaviour is UNPREDICTABLE"
msgstr "les instructions de produit scalaire ne peuvent pas être conditionnelles, le comportement est IMPRÉVISIBLE"
-#: config/tc-arm.c:21583 config/tc-arm.c:21611 config/tc-arm.c:22293
+#: config/tc-arm.c:21617 config/tc-arm.c:21645 config/tc-arm.c:22327
msgid "index must be 0 or 1"
msgstr "index doit être 0 ou 1"
-#: config/tc-arm.c:21586 config/tc-arm.c:21614 config/tc-arm.c:22296
+#: config/tc-arm.c:21620 config/tc-arm.c:21648 config/tc-arm.c:22330
msgid "indexed register must be less than 16"
msgstr "le registre indexé doit être plus petit que 16"
-#: config/tc-arm.c:21652
+#: config/tc-arm.c:21686
msgid "Register must be r0-r14 except r13, or APSR_nzcv."
msgstr "Le registre doit être r0-r14 sauf r13 ou APSR_nzcv."
-#: config/tc-arm.c:21655
+#: config/tc-arm.c:21689
msgid "Register must be an even register between r0-r10."
msgstr "Le registre doit être un registre paire entre r0-r10."
-#: config/tc-arm.c:21680
+#: config/tc-arm.c:21714
msgid "CDE Coprocessor must be in range 0-7"
msgstr "Le coprocesseur CDE doit être dans l'intervalle 0-7"
-#: config/tc-arm.c:21714
+#: config/tc-arm.c:21748
msgid "cx1d requires consecutive destination registers."
msgstr "cx1d requière des registres de destination consécutifs."
-#: config/tc-arm.c:21744
+#: config/tc-arm.c:21778
msgid "cx2d requires consecutive destination registers."
msgstr "cx2d requière des registres de destination consécutifs."
-#: config/tc-arm.c:21783
+#: config/tc-arm.c:21817
msgid "cx3d requires consecutive destination registers."
msgstr "cx3d requière des registres de destination consécutifs."
-#: config/tc-arm.c:21975
+#: config/tc-arm.c:22009
msgid "'q' register must be in range 0-7"
msgstr "le registre « q » doit être dans l'intervalle 0-7"
-#: config/tc-arm.c:21978
+#: config/tc-arm.c:22012
msgid "'d' register must be in range 0-15"
msgstr "le registre « d » doit être dans l'intervalle 0-15"
-#: config/tc-arm.c:21980
+#: config/tc-arm.c:22014
msgid "'s' register must be in range 0-31"
msgstr "le registre « s » doit être dans l'intervalle 0-31"
-#: config/tc-arm.c:22035
+#: config/tc-arm.c:22069
msgid "vcx instructions with Q registers require MVE"
msgstr "les instructions vcx avec les registres Q requièrent MVE"
-#: config/tc-arm.c:22040
+#: config/tc-arm.c:22074
msgid "vcx instructions with S or D registers require either MVE or Armv8-M floating point extension."
msgstr "les instruction vcx avec les registres S ou D requièrent soit MVE ou soit l'extension en virgule flottante Armv8-M."
-#: config/tc-arm.c:22056
+#: config/tc-arm.c:22090
msgid "vcx1 with S or D registers takes immediate within 0-2047"
msgstr "vcx1 avec les registres S ou D prend un immédiat entre 0-2047"
-#: config/tc-arm.c:22072
+#: config/tc-arm.c:22106
msgid "vcx2 with S or D registers takes immediate within 0-63"
msgstr "vcx2 avec les registres S ou D prend un immédiat entre 0-63"
-#: config/tc-arm.c:22087
+#: config/tc-arm.c:22121
msgid "vcx2 with S or D registers takes immediate within 0-7"
msgstr "vcx2 avec les registres S ou D prend un immédiat entre 0-7"
-#: config/tc-arm.c:22647 config/tc-arm.c:22751
+#: config/tc-arm.c:22711 config/tc-arm.c:22815
msgid "conditional infixes are deprecated in unified syntax"
msgstr "les infixes conditionnels sont dépréciés dans la syntaxe unifiée"
-#: config/tc-arm.c:22962
+#: config/tc-arm.c:23026
msgid "Warning: conditional outside an IT block for Thumb."
msgstr "Attention: condition hors d'un bloc IT pour Thumb."
-#: config/tc-arm.c:23290
+#: config/tc-arm.c:23354
msgid "Short branches, Undefined, SVC, LDM/STM"
msgstr "Branchements courts, non définis, SVC, LDM/STM"
-#: config/tc-arm.c:23291
+#: config/tc-arm.c:23355
msgid "Miscellaneous 16-bit instructions"
msgstr "Instructions 16 bits diverses"
-#: config/tc-arm.c:23292
+#: config/tc-arm.c:23356
msgid "ADR"
msgstr "ADR"
-#: config/tc-arm.c:23293
+#: config/tc-arm.c:23357
msgid "Literal loads"
msgstr "Chargements littéraux"
-#: config/tc-arm.c:23294
+#: config/tc-arm.c:23358
msgid "Hi-register ADD, MOV, CMP, BX, BLX using pc"
msgstr "ADD, MOV, CMP, BX, BLX sur registre haut utilisant le PC"
-#: config/tc-arm.c:23295
+#: config/tc-arm.c:23359
msgid "Hi-register ADD, MOV, CMP using pc"
msgstr "ADD, MOV, CMP sur registre haut utilisant le PC"
#. NOTE: 0x00dd is not the real encoding, instead, it is the 'tvalue'
#. field in asm_opcode. 'tvalue' is used at the stage this check happen.
-#: config/tc-arm.c:23298
+#: config/tc-arm.c:23362
msgid "ADD/SUB sp, sp #imm"
msgstr "ADD/SUB sp, sp #imm"
-#: config/tc-arm.c:23320
+#: config/tc-arm.c:23384
msgid "IT blocks containing 32-bit Thumb instructions are performance deprecated in ARMv8-A and ARMv8-R"
msgstr "Les blocs IT contenant des instructions Thumb 32 bits sont dépréciés par performance avec ARMv8-A et ARMv8-R"
-#: config/tc-arm.c:23332
+#: config/tc-arm.c:23396
#, c-format
msgid "IT blocks containing 16-bit Thumb instructions of the following class are performance deprecated in ARMv8-A and ARMv8-R: %s"
msgstr "Les blocs IT contenant des instructions Thumb 16 bits des classes suivantes sont dépréciés par performance avec ARMv8-A et ARMv8-R : %s"
-#: config/tc-arm.c:23346
+#: config/tc-arm.c:23410
msgid "IT blocks containing more than one conditional instruction are performance deprecated in ARMv8-A and ARMv8-R"
msgstr "Les blocs IT contenant plus d'une instruction conditionnelle sont dépréciés par performance dans ARMv8-A et ARMv8-R"
-#: config/tc-arm.c:23464
+#: config/tc-arm.c:23528
#, c-format
msgid "bad instruction `%s'"
msgstr "instruction « %s » erronée"
-#: config/tc-arm.c:23470
+#: config/tc-arm.c:23534
msgid "s suffix on comparison instruction is deprecated"
msgstr "suffixe s dans une instruction de comparaison est déprécié"
-#: config/tc-arm.c:23490
+#: config/tc-arm.c:23554
msgid "SVC is not permitted on this architecture"
msgstr "SVC pas permis sur cette architecture"
-#: config/tc-arm.c:23492
+#: config/tc-arm.c:23556
#, c-format
msgid "selected processor does not support `%s' in Thumb mode"
msgstr "le processeur choisi ne supporte pas « %s » en mode Thumb"
-#: config/tc-arm.c:23498
+#: config/tc-arm.c:23562
msgid "Thumb does not support conditional execution"
msgstr "Thumb ne supporte pas l'exécution conditionnelle"
-#: config/tc-arm.c:23518
+#: config/tc-arm.c:23582
#, c-format
msgid "selected processor does not support 32bit wide variant of instruction `%s'"
msgstr "le processeur sélectionné ne supporte pas la variante 32 bits de l'instruction « %s »"
-#: config/tc-arm.c:23521
+#: config/tc-arm.c:23585
#, c-format
msgid "selected processor does not support `%s' in Thumb-2 mode"
msgstr "le processeur choisi ne supporte pas « %s » en mode Thumb-2"
-#: config/tc-arm.c:23546
+#: config/tc-arm.c:23610
#, c-format
msgid "cannot honor width suffix -- `%s'"
msgstr "ne peut honorer le suffixe de largeur -- « %s »"
-#: config/tc-arm.c:23588
+#: config/tc-arm.c:23652
#, c-format
msgid "selected processor does not support `%s' in ARM mode"
msgstr "le processeur choisi ne supporte pas « %s » en mode ARM"
-#: config/tc-arm.c:23593
+#: config/tc-arm.c:23657
#, c-format
msgid "width suffixes are invalid in ARM mode -- `%s'"
msgstr "les suffixes de largeur sont invalides en mode ARM -- « %s »"
-#: config/tc-arm.c:23626
+#: config/tc-arm.c:23690
#, c-format
msgid "attempt to use an ARM instruction on a Thumb-only processor -- `%s'"
msgstr "tentative d'utiliser une instruction ARM sur un processeur ne supportant que Thumb -- « %s »"
-#: config/tc-arm.c:23644
+#: config/tc-arm.c:23708
#, c-format
msgid "section '%s' finished with an open IT block."
msgstr "la section « %s » s'est terminée avec un bloc IT ouvert."
-#: config/tc-arm.c:23647
+#: config/tc-arm.c:23711
#, c-format
msgid "section '%s' finished with an open VPT/VPST block."
msgstr "la section « %s » s'est terminée avec un bloc VPT/VPST ouvert."
-#: config/tc-arm.c:23654
+#: config/tc-arm.c:23718
msgid "file finished with an open IT block."
msgstr "le fichier s'est terminé avec un bloc IT ouvert."
-#: config/tc-arm.c:23656
+#: config/tc-arm.c:23720
msgid "file finished with an open VPT/VPST block."
msgstr "le fichier s'est terminé avec un bloc VPT/VPST ouvert."
-#: config/tc-arm.c:27353
+#: config/tc-arm.c:27431
#, c-format
msgid "alignments greater than %d bytes not supported in .text sections."
msgstr "alignements plus grand que %d octets ne sont pas supportés dans les sections .text"
-#: config/tc-arm.c:27619 config/tc-ia64.c:3590
+#: config/tc-arm.c:27697 config/tc-ia64.c:3591
#, c-format
msgid "Group section `%s' has no group signature"
msgstr "La section de groupe « %s » n'a pas de signature de groupe"
-#: config/tc-arm.c:27665
+#: config/tc-arm.c:27743
msgid "handlerdata in cantunwind frame"
msgstr "handlerdata dans un cadre cantunwind"
-#: config/tc-arm.c:27682
+#: config/tc-arm.c:27760
msgid "too many unwind opcodes for personality routine 0"
msgstr "trop d'opcodes unwind pour la routine de personnalité 0"
-#: config/tc-arm.c:27713
+#: config/tc-arm.c:27791
msgid "attempt to recreate an unwind entry"
msgstr "tentative de recréer une entrée unwind"
-#: config/tc-arm.c:27723
+#: config/tc-arm.c:27801
msgid "too many unwind opcodes"
msgstr "trop d'opcodes unwind"
-#: config/tc-arm.c:28023
+#: config/tc-arm.c:28101
#, c-format
msgid "[-mwarn-syms]: Assignment makes a symbol match an ARM instruction: %s"
msgstr "[-mwarn-syms]: L'affectation fait correspondre un symbole à une instruction ARM: %s"
-#: config/tc-arm.c:28387 config/tc-arm.c:28455
+#: config/tc-arm.c:28465 config/tc-arm.c:28533
#, c-format
msgid "symbol %s is in a different section"
msgstr "le symbole %s est dans une section différente"
-#: config/tc-arm.c:28389 config/tc-arm.c:28457
+#: config/tc-arm.c:28467 config/tc-arm.c:28535
#, c-format
msgid "symbol %s is weak and may be overridden later"
msgstr "le symbole %s est faible et pourrait être remplacé plus tard"
-#: config/tc-arm.c:28434 config/tc-arm.c:28806
+#: config/tc-arm.c:28512 config/tc-arm.c:28884
#, c-format
msgid "invalid constant (%lx) after fixup"
msgstr "constante invalide (%lx) après le correctif"
-#: config/tc-arm.c:28490
+#: config/tc-arm.c:28568
#, c-format
msgid "unable to compute ADRL instructions for PC offset of 0x%lx"
msgstr "incapable de calculer les instructions ADRL pour le décalage PC de 0x%lx"
-#: config/tc-arm.c:28526 config/tc-arm.c:28556
+#: config/tc-arm.c:28604 config/tc-arm.c:28634
msgid "invalid literal constant: pool needs to be closer"
msgstr "constante littéral invalide: le bassin doit être plus près"
-#: config/tc-arm.c:28529 config/tc-arm.c:28578
+#: config/tc-arm.c:28607 config/tc-arm.c:28656
#, c-format
msgid "bad immediate value for offset (%ld)"
msgstr "valeur immédiate erronée pour l'offset (%ld)"
-#: config/tc-arm.c:28559
+#: config/tc-arm.c:28637
#, c-format
msgid "bad immediate value for 8-bit offset (%ld)"
msgstr "valeur immédiate erronée pour un offset 8 bits (%ld)"
-#: config/tc-arm.c:28619
+#: config/tc-arm.c:28697
msgid "offset not a multiple of 4"
msgstr "l'offset n'est pas un multiple de 4"
-#: config/tc-arm.c:28822
+#: config/tc-arm.c:28900
msgid "invalid smc expression"
msgstr "expression smc invalide"
-#: config/tc-arm.c:28832
+#: config/tc-arm.c:28910
msgid "invalid hvc expression"
msgstr "expression hvc invalide"
-#: config/tc-arm.c:28843 config/tc-arm.c:28852
+#: config/tc-arm.c:28921 config/tc-arm.c:28930
msgid "invalid swi expression"
msgstr "expression swi invalide"
-#: config/tc-arm.c:28862
+#: config/tc-arm.c:28940
msgid "invalid expression in load/store multiple"
msgstr "expression invalide dans chargement/stockage multiples"
-#: config/tc-arm.c:28924
+#: config/tc-arm.c:29002
#, c-format
msgid "blx to '%s' an ARM ISA state function changed to bl"
msgstr "blx vers « %s » dans la fonction d'état ARM ISA changé en bl"
-#: config/tc-arm.c:28943
+#: config/tc-arm.c:29021
msgid "misaligned branch destination"
msgstr "destination de branchement mal alignée"
-#: config/tc-arm.c:29064
+#: config/tc-arm.c:29142
#, c-format
msgid "blx to Thumb func '%s' from Thumb ISA state changed to bl"
msgstr "blx vers fonction Thumb « %s » depuis l'état Thumb ISA changé en bl"
-#: config/tc-arm.c:29113
+#: config/tc-arm.c:29191
msgid "Thumb2 branch out of range"
msgstr "branchement Thumb2 hors limite"
-#: config/tc-arm.c:29165 config/tc-arm.c:29198
+#: config/tc-arm.c:29243 config/tc-arm.c:29276
msgid "Relocation supported only in FDPIC mode"
msgstr "Réadressage uniquement supporté en mode FDPIC"
-#: config/tc-arm.c:29228
+#: config/tc-arm.c:29306
msgid "rel31 relocation overflow"
msgstr "débordement de réadressage rel31"
-#: config/tc-arm.c:29250 config/tc-arm.c:29256 config/tc-arm.c:29260
-#: config/tc-arm.c:29307
+#: config/tc-arm.c:29328 config/tc-arm.c:29334 config/tc-arm.c:29338
+#: config/tc-arm.c:29385
msgid "co-processor offset out of range"
msgstr "offset du coprocesseur hors limite"
-#: config/tc-arm.c:29324
+#: config/tc-arm.c:29402
#, c-format
msgid "invalid offset, target not word aligned (0x%08lX)"
msgstr "offset invalide, cible n'est pas alignée sur une frontière de mot (0x%08lX)"
-#: config/tc-arm.c:29330
+#: config/tc-arm.c:29408
msgid "section does not have enough alignment to ensure safe PC-relative loads"
msgstr "la section n'a pas un alignement suffisant pour garantir des chargements sûrs relatifs au PC"
-#: config/tc-arm.c:29334 config/tc-arm.c:29343 config/tc-arm.c:29351
-#: config/tc-arm.c:29359 config/tc-arm.c:29367
+#: config/tc-arm.c:29412 config/tc-arm.c:29421 config/tc-arm.c:29429
+#: config/tc-arm.c:29437 config/tc-arm.c:29445
#, c-format
msgid "invalid offset, value too big (0x%08lX)"
msgstr "offset invalide, valeur trop grande (0x%08lX)"
-#: config/tc-arm.c:29408
+#: config/tc-arm.c:29486
msgid "invalid Hi register with immediate"
msgstr "registre HI invalide avec une immédiat"
-#: config/tc-arm.c:29424
+#: config/tc-arm.c:29502
msgid "invalid immediate for stack address calculation"
msgstr "immédiat invalide pour un calcul d'adresse de pile"
-#: config/tc-arm.c:29443
+#: config/tc-arm.c:29521
msgid "address calculation needs a strongly defined nearby symbol"
msgstr "le calcul d'adresse a besoin d'un symbole proche fortement défini"
-#: config/tc-arm.c:29459
+#: config/tc-arm.c:29537
msgid "symbol too far away"
msgstr "symbole trop éloigné"
-#: config/tc-arm.c:29471
+#: config/tc-arm.c:29549
#, c-format
msgid "invalid immediate for address calculation (value = 0x%08lX)"
msgstr "immédiat invalide pour le calcul d'adresse (valeur = 0x%08lX)"
-#: config/tc-arm.c:29501
+#: config/tc-arm.c:29579
#, c-format
msgid "invalid immediate: %ld is out of range"
msgstr "immédiat invalide: %ld est hors limite"
-#: config/tc-arm.c:29513
+#: config/tc-arm.c:29591
#, c-format
msgid "invalid shift value: %ld"
msgstr "valeur de décalage illégale: %ld"
-#: config/tc-arm.c:29583 config/tc-arm.c:29654
+#: config/tc-arm.c:29661 config/tc-arm.c:29732
#, c-format
msgid "the offset 0x%08lX is not representable"
msgstr "l'offset 0x%08lX n'est pas représentable"
-#: config/tc-arm.c:29615
+#: config/tc-arm.c:29693
#, c-format
msgid "Unable to process relocation for thumb opcode: %lx"
msgstr "Incapable de traiter le réadressage pour les opcodes thumb: %lx"
-#: config/tc-arm.c:29694
+#: config/tc-arm.c:29772
#, c-format
msgid "bad offset 0x%08lX (only 12 bits available for the magnitude)"
msgstr "mauvais offset 0x%08lX (seulement 12 bits disponibles pour grandeur)"
-#: config/tc-arm.c:29733
+#: config/tc-arm.c:29811
#, c-format
msgid "bad offset 0x%08lX (only 8 bits available for the magnitude)"
msgstr "mauvais offset 0x%08lX (seulement 8 bits disponibles pour la grandeur)"
-#: config/tc-arm.c:29773
+#: config/tc-arm.c:29851
#, c-format
msgid "bad offset 0x%08lX (must be word-aligned)"
msgstr "mauvais offset 0x%08lX (doit être aligné sur un mot)"
-#: config/tc-arm.c:29778
+#: config/tc-arm.c:29856
#, c-format
msgid "bad offset 0x%08lX (must be an 8-bit number of words)"
msgstr "mauvais offset 0x%08lX (doit être un nombre 8-bits de mots)"
-#: config/tc-arm.c:29999 config/tc-score.c:7359
+#: config/tc-arm.c:30077 config/tc-score.c:7359
#, c-format
msgid "bad relocation fixup type (%d)"
msgstr "type erroné de correctif de réadressage (%d)"
-#: config/tc-arm.c:30117
+#: config/tc-arm.c:30195
msgid "literal referenced across section boundary"
msgstr "littéral référencé à travers une frontière de section"
-#: config/tc-arm.c:30197
+#: config/tc-arm.c:30275
msgid "internal relocation (type: IMMEDIATE) not fixed up"
msgstr "réadressage interne (type: IMMÉDIAT) n'est pas corrigé"
-#: config/tc-arm.c:30202
+#: config/tc-arm.c:30280
msgid "ADRL used for a symbol not defined in the same file"
msgstr "ADRL utilisé pour un symbole qui n'est pas défini dans le même fichier"
-#: config/tc-arm.c:30209
+#: config/tc-arm.c:30287
#, c-format
msgid "%s used for a symbol not defined in the same file"
msgstr "%s utilisé pour un symbole qui n'est pas défini dans le même fichier"
-#: config/tc-arm.c:30225
+#: config/tc-arm.c:30303
#, c-format
msgid "undefined local label `%s'"
msgstr "label local « %s » non défini"
-#: config/tc-arm.c:30231
+#: config/tc-arm.c:30309
msgid "internal_relocation (type: OFFSET_IMM) not fixed up"
msgstr "réadressage interne (type: OFFSET_IMM) n'est pas corrigé"
-#: config/tc-arm.c:30253 config/tc-cris.c:4000 config/tc-csky.c:1152
-#: config/tc-ft32.c:709 config/tc-mcore.c:1929 config/tc-microblaze.c:2007
+#: config/tc-arm.c:30331 config/tc-cris.c:4000 config/tc-csky.c:1152
+#: config/tc-ft32.c:708 config/tc-mcore.c:1932 config/tc-microblaze.c:2007
#: config/tc-mmix.c:2907 config/tc-moxie.c:823 config/tc-ns32k.c:2245
#: config/tc-score.c:7446
msgid "<unknown>"
msgstr "<inconnu>"
-#: config/tc-arm.c:30652
+#: config/tc-arm.c:30730
#, c-format
msgid "%s: unexpected function type: %d"
msgstr "%s: type de fonction inattendu: %d"
-#: config/tc-arm.c:30792
+#: config/tc-arm.c:30870
msgid "use of old and new-style options to set CPU type"
msgstr "utilise des vieux et nouveaux styles d'options pour définir le type de CPU"
-#: config/tc-arm.c:30811
+#: config/tc-arm.c:30889
msgid "use of old and new-style options to set FPU type"
msgstr "utilise des vieux et nouveaux styles d'options pour définir le type de FPU"
-#: config/tc-arm.c:30890
+#: config/tc-arm.c:30968
msgid "hard-float conflicts with specified fpu"
msgstr "nombres flottants matériel entrent en conflit avec le fpu spécifié"
-#: config/tc-arm.c:31081
+#: config/tc-arm.c:31159
msgid "generate PIC code"
msgstr "générer du code PIC"
-#: config/tc-arm.c:31082
+#: config/tc-arm.c:31160
msgid "assemble Thumb code"
msgstr "assembler en code Thumb"
-#: config/tc-arm.c:31083
+#: config/tc-arm.c:31161
msgid "support ARM/Thumb interworking"
msgstr "supporter l'interaction ARM/Thumb"
-#: config/tc-arm.c:31085
+#: config/tc-arm.c:31163
msgid "code uses 32-bit program counter"
msgstr "le code utilise un compteur de programme de 32 bits"
-#: config/tc-arm.c:31086
+#: config/tc-arm.c:31164
msgid "code uses 26-bit program counter"
msgstr "le code utilise un compteur de programme de 26 bits"
-#: config/tc-arm.c:31087
+#: config/tc-arm.c:31165
msgid "floating point args are in fp regs"
msgstr "arguments en virgule flottante sont dans les registres FP"
-#: config/tc-arm.c:31089
+#: config/tc-arm.c:31167
msgid "re-entrant code"
msgstr "code réentrant"
-#: config/tc-arm.c:31090
+#: config/tc-arm.c:31168
msgid "code is ATPCS conformant"
msgstr "code est conforme ATPCS"
#. These are recognized by the assembler, but have no affect on code.
-#: config/tc-arm.c:31096
+#: config/tc-arm.c:31174
msgid "use frame pointer"
msgstr "utiliser le pointeur de trame"
-#: config/tc-arm.c:31097
+#: config/tc-arm.c:31175
msgid "use stack size checking"
msgstr "utiliser la vérification de la taille de la pile"
-#: config/tc-arm.c:31100
+#: config/tc-arm.c:31178
msgid "do not warn on use of deprecated feature"
msgstr "ne pas avertir en cas d'utilisation d'une fonctionnalité dépréciée"
-#: config/tc-arm.c:31103
+#: config/tc-arm.c:31181
msgid "warn about performance deprecated IT instructions in ARMv8-A and ARMv8-R"
msgstr "avertir au sujet des instructions IT dépréciées par performance dans ARMv8-A et ARMv8-R"
-#: config/tc-arm.c:31107
+#: config/tc-arm.c:31185
msgid "warn about symbols that match instruction names [default]"
msgstr "avertir à propos des symboles qui correspondent à des noms d'instructions [défaut]"
-#: config/tc-arm.c:31108
+#: config/tc-arm.c:31186
msgid "disable warnings about symobls that match instructions"
msgstr "désactiver les avertissements à propos de symboles qui correspondent à des instructions"
#. DON'T add any new processors to this list -- we want the whole list
#. to go away... Add them to the processors table instead.
-#: config/tc-arm.c:31124 config/tc-arm.c:31125
+#: config/tc-arm.c:31202 config/tc-arm.c:31203
msgid "use -mcpu=arm1"
msgstr "utiliser -mcpu=arm1"
-#: config/tc-arm.c:31126 config/tc-arm.c:31127
+#: config/tc-arm.c:31204 config/tc-arm.c:31205
msgid "use -mcpu=arm2"
msgstr "utiliser -mcpu=arm2"
-#: config/tc-arm.c:31128 config/tc-arm.c:31129
+#: config/tc-arm.c:31206 config/tc-arm.c:31207
msgid "use -mcpu=arm250"
msgstr "utiliser -mcpu=arm250"
-#: config/tc-arm.c:31130 config/tc-arm.c:31131
+#: config/tc-arm.c:31208 config/tc-arm.c:31209
msgid "use -mcpu=arm3"
msgstr "utiliser -mcpu=arm3"
-#: config/tc-arm.c:31132 config/tc-arm.c:31133
+#: config/tc-arm.c:31210 config/tc-arm.c:31211
msgid "use -mcpu=arm6"
msgstr "utiliser -mcpu=arm6"
-#: config/tc-arm.c:31134 config/tc-arm.c:31135
+#: config/tc-arm.c:31212 config/tc-arm.c:31213
msgid "use -mcpu=arm600"
msgstr "utiliser -mcpu=arm600"
-#: config/tc-arm.c:31136 config/tc-arm.c:31137
+#: config/tc-arm.c:31214 config/tc-arm.c:31215
msgid "use -mcpu=arm610"
msgstr "utiliser -mcpu=arm610"
-#: config/tc-arm.c:31138 config/tc-arm.c:31139
+#: config/tc-arm.c:31216 config/tc-arm.c:31217
msgid "use -mcpu=arm620"
msgstr "utiliser -mcpu=arm620"
-#: config/tc-arm.c:31140 config/tc-arm.c:31141
+#: config/tc-arm.c:31218 config/tc-arm.c:31219
msgid "use -mcpu=arm7"
msgstr "utiliser -mcpu=arm7"
-#: config/tc-arm.c:31142 config/tc-arm.c:31143
+#: config/tc-arm.c:31220 config/tc-arm.c:31221
msgid "use -mcpu=arm70"
msgstr "utiliser -mcpu=arm70"
-#: config/tc-arm.c:31144 config/tc-arm.c:31145
+#: config/tc-arm.c:31222 config/tc-arm.c:31223
msgid "use -mcpu=arm700"
msgstr "utiliser -mcpu=arm700"
-#: config/tc-arm.c:31146 config/tc-arm.c:31147
+#: config/tc-arm.c:31224 config/tc-arm.c:31225
msgid "use -mcpu=arm700i"
msgstr "utiliser -mcpu=arm700i"
-#: config/tc-arm.c:31148 config/tc-arm.c:31149
+#: config/tc-arm.c:31226 config/tc-arm.c:31227
msgid "use -mcpu=arm710"
msgstr "utiliser -mcpu=arm710"
-#: config/tc-arm.c:31150 config/tc-arm.c:31151
+#: config/tc-arm.c:31228 config/tc-arm.c:31229
msgid "use -mcpu=arm710c"
msgstr "utiliser -mcpu=arm710c"
-#: config/tc-arm.c:31152 config/tc-arm.c:31153
+#: config/tc-arm.c:31230 config/tc-arm.c:31231
msgid "use -mcpu=arm720"
msgstr "utiliser -mcpu=arm720"
-#: config/tc-arm.c:31154 config/tc-arm.c:31155
+#: config/tc-arm.c:31232 config/tc-arm.c:31233
msgid "use -mcpu=arm7d"
msgstr "utiliser -mcpu=arm7d"
-#: config/tc-arm.c:31156 config/tc-arm.c:31157
+#: config/tc-arm.c:31234 config/tc-arm.c:31235
msgid "use -mcpu=arm7di"
msgstr "utiliser -mcpu=arm7di"
-#: config/tc-arm.c:31158 config/tc-arm.c:31159
+#: config/tc-arm.c:31236 config/tc-arm.c:31237
msgid "use -mcpu=arm7m"
msgstr "utiliser -mcpu=arm7m"
-#: config/tc-arm.c:31160 config/tc-arm.c:31161
+#: config/tc-arm.c:31238 config/tc-arm.c:31239
msgid "use -mcpu=arm7dm"
msgstr "utiliser -mcpu=arm7dm"
-#: config/tc-arm.c:31162 config/tc-arm.c:31163
+#: config/tc-arm.c:31240 config/tc-arm.c:31241
msgid "use -mcpu=arm7dmi"
msgstr "utiliser -mcpu=arm7dmi"
-#: config/tc-arm.c:31164 config/tc-arm.c:31165
+#: config/tc-arm.c:31242 config/tc-arm.c:31243
msgid "use -mcpu=arm7100"
msgstr "utiliser -mcpu=arm7100"
-#: config/tc-arm.c:31166 config/tc-arm.c:31167
+#: config/tc-arm.c:31244 config/tc-arm.c:31245
msgid "use -mcpu=arm7500"
msgstr "utiliser -mcpu=arm7500"
-#: config/tc-arm.c:31168 config/tc-arm.c:31169
+#: config/tc-arm.c:31246 config/tc-arm.c:31247
msgid "use -mcpu=arm7500fe"
msgstr "utiliser -mcpu=arm7500fe"
-#: config/tc-arm.c:31170 config/tc-arm.c:31171 config/tc-arm.c:31172
-#: config/tc-arm.c:31173
+#: config/tc-arm.c:31248 config/tc-arm.c:31249 config/tc-arm.c:31250
+#: config/tc-arm.c:31251
msgid "use -mcpu=arm7tdmi"
msgstr "utiliser -mcpu=arm7tdmi"
-#: config/tc-arm.c:31174 config/tc-arm.c:31175
+#: config/tc-arm.c:31252 config/tc-arm.c:31253
msgid "use -mcpu=arm710t"
msgstr "utiliser -mcpu=arm710t"
-#: config/tc-arm.c:31176 config/tc-arm.c:31177
+#: config/tc-arm.c:31254 config/tc-arm.c:31255
msgid "use -mcpu=arm720t"
msgstr "utiliser -mcpu=arm720t"
-#: config/tc-arm.c:31178 config/tc-arm.c:31179
+#: config/tc-arm.c:31256 config/tc-arm.c:31257
msgid "use -mcpu=arm740t"
msgstr "utiliser -mcpu=arm740t"
-#: config/tc-arm.c:31180 config/tc-arm.c:31181
+#: config/tc-arm.c:31258 config/tc-arm.c:31259
msgid "use -mcpu=arm8"
msgstr "utiliser -mcpu=arm8"
-#: config/tc-arm.c:31182 config/tc-arm.c:31183
+#: config/tc-arm.c:31260 config/tc-arm.c:31261
msgid "use -mcpu=arm810"
msgstr "utiliser -mcpu=arm810"
-#: config/tc-arm.c:31184 config/tc-arm.c:31185
+#: config/tc-arm.c:31262 config/tc-arm.c:31263
msgid "use -mcpu=arm9"
msgstr "utiliser -mcpu=arm9"
-#: config/tc-arm.c:31186 config/tc-arm.c:31187
+#: config/tc-arm.c:31264 config/tc-arm.c:31265
msgid "use -mcpu=arm9tdmi"
msgstr "utiliser -mcpu=arm9tdmi"
-#: config/tc-arm.c:31188 config/tc-arm.c:31189
+#: config/tc-arm.c:31266 config/tc-arm.c:31267
msgid "use -mcpu=arm920"
msgstr "utiliser -mcpu=arm920"
-#: config/tc-arm.c:31190 config/tc-arm.c:31191
+#: config/tc-arm.c:31268 config/tc-arm.c:31269
msgid "use -mcpu=arm940"
msgstr "utiliser -mcpu=arm940"
-#: config/tc-arm.c:31192
+#: config/tc-arm.c:31270
msgid "use -mcpu=strongarm"
msgstr "utiliser -mcpu=strongarm"
-#: config/tc-arm.c:31194
+#: config/tc-arm.c:31272
msgid "use -mcpu=strongarm110"
msgstr "utiliser -mcpu=strongarm110"
-#: config/tc-arm.c:31196
+#: config/tc-arm.c:31274
msgid "use -mcpu=strongarm1100"
msgstr "utiliser -mcpu=strongarm1100"
-#: config/tc-arm.c:31198
+#: config/tc-arm.c:31276
msgid "use -mcpu=strongarm1110"
msgstr "utiliser -mcpu=strongarm1110"
-#: config/tc-arm.c:31199
+#: config/tc-arm.c:31277
msgid "use -mcpu=xscale"
msgstr "utiliser -mcpu=xscale"
-#: config/tc-arm.c:31200
+#: config/tc-arm.c:31278
msgid "use -mcpu=iwmmxt"
msgstr "utiliser -mcpu=iwmmxt"
-#: config/tc-arm.c:31201
+#: config/tc-arm.c:31279
msgid "use -mcpu=all"
msgstr "utiliser -mcpu=all"
#. Architecture variants -- don't add any more to this list either.
-#: config/tc-arm.c:31204 config/tc-arm.c:31205
+#: config/tc-arm.c:31282 config/tc-arm.c:31283
msgid "use -march=armv2"
msgstr "utiliser -march=armv2"
-#: config/tc-arm.c:31206 config/tc-arm.c:31207
+#: config/tc-arm.c:31284 config/tc-arm.c:31285
msgid "use -march=armv2a"
msgstr "utiliser -march=armv2a"
-#: config/tc-arm.c:31208 config/tc-arm.c:31209
+#: config/tc-arm.c:31286 config/tc-arm.c:31287
msgid "use -march=armv3"
msgstr "utiliser -march=armv3"
-#: config/tc-arm.c:31210 config/tc-arm.c:31211
+#: config/tc-arm.c:31288 config/tc-arm.c:31289
msgid "use -march=armv3m"
msgstr "utiliser -march=armv3m"
-#: config/tc-arm.c:31212 config/tc-arm.c:31213
+#: config/tc-arm.c:31290 config/tc-arm.c:31291
msgid "use -march=armv4"
msgstr "utiliser -march=armv4"
-#: config/tc-arm.c:31214 config/tc-arm.c:31215
+#: config/tc-arm.c:31292 config/tc-arm.c:31293
msgid "use -march=armv4t"
msgstr "utiliser -march=armv4t"
-#: config/tc-arm.c:31216 config/tc-arm.c:31217
+#: config/tc-arm.c:31294 config/tc-arm.c:31295
msgid "use -march=armv5"
msgstr "utiliser -march=armv5"
-#: config/tc-arm.c:31218 config/tc-arm.c:31219
+#: config/tc-arm.c:31296 config/tc-arm.c:31297
msgid "use -march=armv5t"
msgstr "utiliser -march=armv5t"
-#: config/tc-arm.c:31220 config/tc-arm.c:31221
+#: config/tc-arm.c:31298 config/tc-arm.c:31299
msgid "use -march=armv5te"
msgstr "utiliser -march=armv5te"
#. Floating point variants -- don't add any more to this list either.
-#: config/tc-arm.c:31224
+#: config/tc-arm.c:31302
msgid "use -mfpu=fpe"
msgstr "utiliser -mfpu=fpe"
-#: config/tc-arm.c:31225
+#: config/tc-arm.c:31303
msgid "use -mfpu=fpa10"
msgstr "utiliser -mfpu=fpa10"
-#: config/tc-arm.c:31226
+#: config/tc-arm.c:31304
msgid "use -mfpu=fpa11"
msgstr "utiliser -mfpu=fpa11"
-#: config/tc-arm.c:31228
+#: config/tc-arm.c:31306
msgid "use either -mfpu=softfpa or -mfpu=softvfp"
msgstr "utiliser soit -mfpu=softfpa ou -mfpu=softvfp"
-#: config/tc-arm.c:32312
+#: config/tc-arm.c:32427
msgid "extension does not apply to the base architecture"
msgstr "l'extension ne s'applique pas à l'architecture de base"
-#: config/tc-arm.c:32341
+#: config/tc-arm.c:32456
msgid "architectural extensions must be specified in alphabetical order"
msgstr "les extensions d'architecture doivent être spécifiées dans l'ordre alphabétique"
-#: config/tc-arm.c:32480 config/tc-arm.c:33423
+#: config/tc-arm.c:32595 config/tc-arm.c:33544
#, c-format
msgid "unknown floating point format `%s'\n"
msgstr "format de virgule flottante inconnu « %s »\n"
-#: config/tc-arm.c:32496 config/tc-csky.c:1264
+#: config/tc-arm.c:32611 config/tc-csky.c:1264
#, c-format
msgid "unknown floating point abi `%s'\n"
msgstr "ABI virgule flottante inconnue « %s »\n"
-#: config/tc-arm.c:32512
+#: config/tc-arm.c:32627
#, c-format
msgid "unknown EABI `%s'\n"
msgstr "EABI inconnue « %s »\n"
-#: config/tc-arm.c:32532
+#: config/tc-arm.c:32647
#, c-format
msgid "unknown implicit IT mode `%s', should be arm, thumb, always, or never."
msgstr "mode IT implicite « %s » inconnu, devrait être arm, thumb, always ou never."
-#: config/tc-arm.c:32555 config/tc-metag.c:5911
+#: config/tc-arm.c:32670 config/tc-metag.c:5911
msgid "<fpu name>\t assemble for FPU architecture <fpu name>"
msgstr "<nom fpu>\t assembler pour l'architecture FPU <nom fpu>"
-#: config/tc-arm.c:32557
+#: config/tc-arm.c:32672
msgid "<abi>\t assemble for floating point ABI <abi>"
msgstr "<abi>\t assembler pour l'ABI virgule flottante <abi>"
-#: config/tc-arm.c:32560
+#: config/tc-arm.c:32675
msgid "<ver>\t\t assemble for eabi version <ver>"
msgstr "<ver>\t\t assembler pour la version eabi <ver>"
-#: config/tc-arm.c:32563
+#: config/tc-arm.c:32678
msgid "<mode>\t controls implicit insertion of IT instructions"
msgstr "<mode>\t contrôle l'insertion implicite d'instructions IT"
-#: config/tc-arm.c:32565
+#: config/tc-arm.c:32680
msgid "\t\t\t TI CodeComposer Studio syntax compatibility mode"
msgstr "\t\t\t mode de compatibilité avec la syntaxe TI CodeComposer Studio"
-#: config/tc-arm.c:32568
+#: config/tc-arm.c:32683
msgid ""
"[ieee|alternative]\n"
" set the encoding for half precision floating point numbers to IEEE\n"
@@ -5469,41 +5615,41 @@ msgstr ""
" définir l'encodage pour les nombres en virgule flottante en semi-précision à IEEE\n"
" ou au format alternatif Arm."
-#: config/tc-arm.c:32679
+#: config/tc-arm.c:32794
#, c-format
msgid " ARM-specific assembler options:\n"
msgstr "Options en assembleur spécifiques ARM:\n"
-#: config/tc-arm.c:32699
+#: config/tc-arm.c:32814
#, c-format
msgid " --fix-v4bx Allow BX in ARMv4 code\n"
msgstr " --fix-v4bx Autoriser BX dans du code ARMv4\n"
-#: config/tc-arm.c:32703
+#: config/tc-arm.c:32818
#, c-format
msgid " --fdpic generate an FDPIC object file\n"
msgstr " --fdpic générer un fichier objet FDPIC\n"
-#: config/tc-arm.c:33011
+#: config/tc-arm.c:33132
msgid "no architecture contains all the instructions used\n"
msgstr "aucune architecture ne contient toutes les instructions utilisées\n"
-#: config/tc-arm.c:33363
+#: config/tc-arm.c:33484
#, c-format
msgid "architectural extension `%s' is not allowed for the current base architecture"
msgstr "l'extension d'architecture « %s » n'est pas permise pour l'architecture de base actuelle"
-#: config/tc-arm.c:33386
+#: config/tc-arm.c:33507
#, c-format
msgid "unknown architecture extension `%s'\n"
msgstr "extension d'architecture inconnue « %s »\n"
-#: config/tc-avr.c:593
+#: config/tc-avr.c:597
#, c-format
msgid "Known MCU names:"
msgstr "Noms MCU connus :"
-#: config/tc-avr.c:658
+#: config/tc-avr.c:662
#, c-format
msgid ""
"AVR Assembler options:\n"
@@ -5552,7 +5698,7 @@ msgstr ""
" avrxmega7 - XMEGA, > 128K, <= 256K FLASH, > 64K RAM\n"
" avrtiny - cœur AVR Tiny avec 16 registres gp\n"
-#: config/tc-avr.c:681
+#: config/tc-avr.c:685
#, c-format
msgid ""
" -mall-opcodes accept all AVR opcodes, even if not supported by MCU\n"
@@ -5564,6 +5710,8 @@ msgid ""
" -mlink-relax generate relocations for linker relaxation (default)\n"
" -mno-link-relax don't generate relocations for linker relaxation.\n"
" -mgcc-isr accept the __gcc_isr pseudo-instruction.\n"
+" -mno-dollar-line-separator\n"
+" do not treat the $ character as a line separator.\n"
msgstr ""
" -mall-opcodes accepter tous les opcodes AVR, même non supportés par MCU\n"
" -mno-skip-bug désactiver les avertissements pour l'escamotage des\n"
@@ -5574,204 +5722,206 @@ msgstr ""
" -mlink-relax générer les réadressages pour la relaxation du lieur\n"
" -mno-link-relax ne pas générer de réadressages pour la relaxation du lieur.\n"
" -mgcc-isr accepter la pseudo instruction __gcc_isr.\n"
+" -mno-dollar-line-separator\n"
+" ne pas traiter le caractère $ comme séparateur de lignes.\n"
-#: config/tc-avr.c:720
+#: config/tc-avr.c:726
#, c-format
msgid "unknown MCU: %s\n"
msgstr "MCU inconnue: %s\n"
-#: config/tc-avr.c:734
+#: config/tc-avr.c:740
#, c-format
msgid "redefinition of mcu type `%s' to `%s'"
msgstr "redéfinition du type MCU « %s » en « %s »"
-#: config/tc-avr.c:859
+#: config/tc-avr.c:869
msgid "constant value required"
msgstr "valeur constante requise"
-#: config/tc-avr.c:862
+#: config/tc-avr.c:872
#, c-format
msgid "number must be positive and less than %d"
msgstr "le nombre doit être positif et plus petit que %d"
-#: config/tc-avr.c:888 config/tc-avr.c:1025
+#: config/tc-avr.c:898 config/tc-avr.c:1035
#, c-format
msgid "constant out of 8-bit range: %d"
msgstr "constante hors limite pour les bornes de 8 bits: %d"
-#: config/tc-avr.c:956 config/tc-score.c:1198 read.c:3938
+#: config/tc-avr.c:966 config/tc-score.c:1198 read.c:4026
msgid "illegal expression"
msgstr "expression illégale"
-#: config/tc-avr.c:985 config/tc-avr.c:1995 config/tc-pru.c:1862
+#: config/tc-avr.c:995 config/tc-avr.c:2005 config/tc-pru.c:1861
msgid "`)' required"
msgstr "« ) » requis"
-#: config/tc-avr.c:1095
+#: config/tc-avr.c:1105
msgid "register name or number from 16 to 31 required"
msgstr "nom de registre ou numéro de registre 16 à 31 requis"
-#: config/tc-avr.c:1101
+#: config/tc-avr.c:1111
msgid "register name or number from 0 to 31 required"
msgstr "nom de registre ou numéro de registre 0 à 31 requis"
-#: config/tc-avr.c:1109
+#: config/tc-avr.c:1119
msgid "register r16-r23 required"
msgstr "registres r16-r23 requis"
-#: config/tc-avr.c:1115
+#: config/tc-avr.c:1125
msgid "register number above 15 required"
msgstr "numéro de registre au-dessus de 15 requis"
-#: config/tc-avr.c:1121 config/tc-csky.c:6394 config/tc-csky.c:6423
+#: config/tc-avr.c:1131 config/tc-csky.c:6395 config/tc-csky.c:6424
msgid "even register number required"
msgstr "numéro paire de registre requis"
-#: config/tc-avr.c:1127
+#: config/tc-avr.c:1137
msgid "register r24, r26, r28 or r30 required"
msgstr "registre r24, r26, r28 ou r30 requis"
-#: config/tc-avr.c:1148
+#: config/tc-avr.c:1158
msgid "pointer register (X, Y or Z) required"
msgstr "registre de pointeur (X, Y ou Z) requis"
-#: config/tc-avr.c:1155
+#: config/tc-avr.c:1165
msgid "cannot both predecrement and postincrement"
msgstr "ne peut pré-décrémenter et post-incrémenter en même temps"
-#: config/tc-avr.c:1163
+#: config/tc-avr.c:1173
msgid "addressing mode not supported"
msgstr "mode d'adressage non supporté"
-#: config/tc-avr.c:1169
+#: config/tc-avr.c:1179
msgid "can't predecrement"
msgstr "ne peut faire une pré-décrémentation"
-#: config/tc-avr.c:1172
+#: config/tc-avr.c:1182
msgid "pointer register Z required"
msgstr "registre de pointeur Z requis"
-#: config/tc-avr.c:1191
+#: config/tc-avr.c:1201
msgid "postincrement not supported"
msgstr "post-incrémentation pas supportée"
-#: config/tc-avr.c:1201
+#: config/tc-avr.c:1211
msgid "pointer register (Y or Z) required"
msgstr "registre de pointeur (Y ou Z) requis"
-#: config/tc-avr.c:1323 config/tc-xgate.c:1352
+#: config/tc-avr.c:1333 config/tc-xgate.c:1352
#, c-format
msgid "unknown constraint `%c'"
msgstr "contrainte inconnue « %c »"
-#: config/tc-avr.c:1386 config/tc-avr.c:2677
+#: config/tc-avr.c:1396 config/tc-avr.c:2687
msgid "`,' required"
msgstr "« , » requis"
-#: config/tc-avr.c:1407
+#: config/tc-avr.c:1417
msgid "undefined combination of operands"
msgstr "combinaison d'opérandes indéfinie"
-#: config/tc-avr.c:1416
+#: config/tc-avr.c:1426
msgid "skipping two-word instruction"
msgstr "escamotage d'une instruction de 2 mots"
-#: config/tc-avr.c:1604 config/tc-avr.c:1620 config/tc-avr.c:1751
+#: config/tc-avr.c:1614 config/tc-avr.c:1630 config/tc-avr.c:1761
#: config/tc-msp430.c:4498 config/tc-msp430.c:4517
#, c-format
msgid "odd address operand: %ld"
msgstr "opérande d'adresse impaire: %ld"
-#: config/tc-avr.c:1612 config/tc-avr.c:1631 config/tc-avr.c:1649
-#: config/tc-avr.c:1660 config/tc-avr.c:1676 config/tc-avr.c:1684
-#: config/tc-avr.c:1779 config/tc-avr.c:1786 config/tc-d10v.c:503
+#: config/tc-avr.c:1622 config/tc-avr.c:1641 config/tc-avr.c:1659
+#: config/tc-avr.c:1670 config/tc-avr.c:1686 config/tc-avr.c:1694
+#: config/tc-avr.c:1789 config/tc-avr.c:1796 config/tc-d10v.c:503
#: config/tc-d30v.c:550 config/tc-msp430.c:4506 config/tc-msp430.c:4524
#, c-format
msgid "operand out of range: %ld"
msgstr "opérande hors limite: %ld"
-#: config/tc-avr.c:1667
+#: config/tc-avr.c:1677
#, c-format
msgid "operand out of range: 0x%lx"
msgstr "opérande hors limite: 0x%lx"
-#: config/tc-avr.c:1772 config/tc-d10v.c:1592 config/tc-d30v.c:2011
+#: config/tc-avr.c:1782 config/tc-d10v.c:1592 config/tc-d30v.c:2011
#: config/tc-msp430.c:4595
#, c-format
msgid "line %d: unknown relocation type: 0x%x"
msgstr "ligne %d: type de réadressage inconnu: 0x%x"
-#: config/tc-avr.c:1800
+#: config/tc-avr.c:1810
msgid "only constant expression allowed"
msgstr "seule une expression constante est permise"
#. xgettext:c-format.
-#: config/tc-avr.c:1855 config/tc-bfin.c:824 config/tc-d10v.c:1461
-#: config/tc-d30v.c:1768 config/tc-metag.c:7016 config/tc-mn10200.c:779
-#: config/tc-mn10300.c:2177 config/tc-msp430.c:4643 config/tc-ppc.c:7473
-#: config/tc-ppc.c:7494 config/tc-spu.c:882 config/tc-spu.c:1093
-#: config/tc-v850.c:3367 config/tc-z80.c:3869
+#: config/tc-avr.c:1865 config/tc-bfin.c:824 config/tc-d10v.c:1461
+#: config/tc-d30v.c:1768 config/tc-metag.c:7016 config/tc-mn10200.c:772
+#: config/tc-mn10300.c:2177 config/tc-msp430.c:4643 config/tc-ppc.c:7746
+#: config/tc-spu.c:877 config/tc-spu.c:1090 config/tc-v850.c:3364
+#: config/tc-z80.c:3869
#, c-format
msgid "reloc %d not supported by object file format"
msgstr "réadressage %d n'est pas supporté dans le format du fichier objet"
-#: config/tc-avr.c:1877 config/tc-ft32.c:232 config/tc-h8300.c:1929
+#: config/tc-avr.c:1887 config/tc-ft32.c:232 config/tc-h8300.c:1929
#: config/tc-mcore.c:881 config/tc-microblaze.c:941 config/tc-moxie.c:180
#: config/tc-pj.c:253 config/tc-sh.c:2197 config/tc-wasm32.c:747
#: config/tc-z8k.c:1233
msgid "can't find opcode "
msgstr "ne peut repérer l'opcode "
-#: config/tc-avr.c:1896
+#: config/tc-avr.c:1906
#, c-format
msgid "illegal opcode %s for mcu %s"
msgstr "opcode %s illégal pour MCU %s"
-#: config/tc-avr.c:1912
+#: config/tc-avr.c:1922
#, c-format
msgid "pseudo instruction `%s' not supported"
msgstr "la pseudo instruction « %s » n'est pas supportée"
-#: config/tc-avr.c:1934
+#: config/tc-avr.c:1944
msgid "garbage at end of line"
msgstr "rebut à la fin de la ligne"
-#: config/tc-avr.c:2044 config/tc-pru.c:1894
+#: config/tc-avr.c:2054 config/tc-pru.c:1893
#, c-format
msgid "illegal %s relocation size: %d"
msgstr "taille de réadressage %s illégale: %d"
-#: config/tc-avr.c:2157 config/tc-avr.c:2212
+#: config/tc-avr.c:2167 config/tc-avr.c:2222
#, c-format
msgid "unknown record type %d (in %s)"
msgstr "type d'enregistrement %d inconnu (dans %s)"
-#: config/tc-avr.c:2233
+#: config/tc-avr.c:2243
#, c-format
msgid "Failed to create property section `%s'\n"
msgstr "Échec lors de la création de la section de propriétés « %s »\n"
-#: config/tc-avr.c:2669
+#: config/tc-avr.c:2679
#, c-format
msgid "%s requires value 0-2 as operand 1"
msgstr "%s requiert la valeur 0-2 comme opérande 1"
-#: config/tc-avr.c:2694
+#: config/tc-avr.c:2704
#, c-format
msgid "`%s %d' after `%s %d' from %s:%u"
msgstr "« %s %d » après « %s %d » dans %s:%u"
-#: config/tc-avr.c:2697
+#: config/tc-avr.c:2707
#, c-format
msgid "`%s %d' but no chunk open yet"
msgstr "« %s %d » mais pas encore de fragment ouvert"
-#: config/tc-avr.c:2785
+#: config/tc-avr.c:2795
#, c-format
msgid "dangling `__gcc_isr %d'"
msgstr "« __gcc_isr %d » ballant"
-#: config/tc-avr.c:2787
+#: config/tc-avr.c:2797
msgid "dangling `__gcc_isr'"
msgstr "« __gcc_isr » ballant"
@@ -5889,189 +6039,189 @@ msgstr "valeur du champ « %s » trop complexe pour un champ de bits"
msgid "Unknown register pair - index relative mode: `%d'"
msgstr "Paire de registres inconnue - mode d'indexation relatif: « %d »"
-#: config/tc-cr16.c:607 config/tc-crx.c:337
+#: config/tc-cr16.c:603 config/tc-crx.c:333
#, c-format
msgid "internal error: reloc %d (`%s') not supported by object file format"
msgstr "erreur interne: réadressage %d (« %s ») n'est pas supporté dans le format du fichier objet"
-#: config/tc-cr16.c:700 config/tc-i386.c:14007 config/tc-s390.c:2113
+#: config/tc-cr16.c:696 config/tc-i386.c:14126 config/tc-s390.c:2113
msgid "GOT already in symbol table"
msgstr "GOT est déjà dans la table de symboles"
#. Missing or bad expr becomes absolute 0.
-#: config/tc-cr16.c:884 config/tc-crx.c:574
+#: config/tc-cr16.c:880 config/tc-crx.c:570
#, c-format
msgid "missing or invalid displacement expression `%s' taken as 0"
msgstr "expression de déplacement invalide ou manquante « %s » alors 0 est assumé à sa place"
-#: config/tc-cr16.c:934
+#: config/tc-cr16.c:930
#, c-format
msgid "GOT bad expression with %s."
msgstr "mauvaise expression GOT avec %s"
-#: config/tc-cr16.c:1045
+#: config/tc-cr16.c:1041
#, c-format
msgid "operand %d: illegal use expression: `%s`"
msgstr "opérande %d: expression use illégale: « %s »"
-#: config/tc-cr16.c:1110 config/tc-crx.c:1084
+#: config/tc-cr16.c:1106 config/tc-crx.c:1080
#, c-format
msgid "Unknown register: `%d'"
msgstr "Registre inconnu: « %d »."
#. Issue a error message when register is illegal.
-#: config/tc-cr16.c:1118
+#: config/tc-cr16.c:1114
#, c-format
msgid "Illegal register (`%s') in Instruction: `%s'"
msgstr "Registre illégal (« %s ») dans l'instruction: « %s »"
-#: config/tc-cr16.c:1192 config/tc-cr16.c:1267
+#: config/tc-cr16.c:1188 config/tc-cr16.c:1263
#, c-format
msgid "Illegal register `%s' in Instruction `%s'"
msgstr "Registre illégal « %s » dans l'instruction « %s »"
-#: config/tc-cr16.c:1220 config/tc-cr16.c:1231
+#: config/tc-cr16.c:1216 config/tc-cr16.c:1227
#, c-format
msgid "Illegal register pair `%s' in Instruction `%s'"
msgstr "Paire de registres illégale « %s » dans l'instruction « %s »"
-#: config/tc-cr16.c:1256
+#: config/tc-cr16.c:1252
msgid "unmatched '['"
msgstr "« [ » non pairé"
-#: config/tc-cr16.c:1262
+#: config/tc-cr16.c:1258
msgid "garbage after index spec ignored"
msgstr "le rebut après la spécification d'index est ignoré"
-#: config/tc-cr16.c:1410 config/tc-crx.c:893
+#: config/tc-cr16.c:1406 config/tc-crx.c:889
#, c-format
msgid "Illegal operands (whitespace): `%s'"
msgstr "Opérandes illégaux (espaces): « %s »"
-#: config/tc-cr16.c:1422 config/tc-cr16.c:1429 config/tc-cr16.c:1446
-#: config/tc-crx.c:905 config/tc-crx.c:912 config/tc-crx.c:929
-#: config/tc-crx.c:1720
+#: config/tc-cr16.c:1418 config/tc-cr16.c:1425 config/tc-cr16.c:1442
+#: config/tc-crx.c:901 config/tc-crx.c:908 config/tc-crx.c:925
+#: config/tc-crx.c:1716
#, c-format
msgid "Missing matching brackets : `%s'"
msgstr "Crochets pairés manquantes: « %s »"
-#: config/tc-cr16.c:1478 config/tc-crx.c:955
+#: config/tc-cr16.c:1474 config/tc-crx.c:951
#, c-format
msgid "Unknown exception: `%s'"
msgstr "Exception inconnue: « %s »"
-#: config/tc-cr16.c:1560 config/tc-crx.c:1051
+#: config/tc-cr16.c:1556 config/tc-crx.c:1047
#, c-format
msgid "Illegal `cinv' parameter: `%c'"
msgstr "Paramètre « cinv » illégal: « %c »"
-#: config/tc-cr16.c:1581 config/tc-cr16.c:1620
+#: config/tc-cr16.c:1577 config/tc-cr16.c:1616
#, c-format
msgid "Unknown register pair: `%d'"
msgstr "Paire de registres inconnue: « %d »"
#. Issue a error message when register pair is illegal.
-#: config/tc-cr16.c:1589
+#: config/tc-cr16.c:1585
#, c-format
msgid "Illegal register pair (`%s') in Instruction: `%s'"
msgstr "Paire de registres inconnue (« %s ») dans l'instruction: « %s »"
#. Issue a error message when register pair is illegal.
-#: config/tc-cr16.c:1628
+#: config/tc-cr16.c:1624
#, c-format
msgid "Illegal index register pair (`%s') in Instruction: `%s'"
msgstr "Paire de registres d'index illégale (« %s ») dans l'instruction: « %s »"
-#: config/tc-cr16.c:1667
+#: config/tc-cr16.c:1663
#, c-format
msgid "Unknown processor register : `%d'"
msgstr "Registre processeur inconnu: « %d »"
#. Issue a error message when register pair is illegal.
-#: config/tc-cr16.c:1675
+#: config/tc-cr16.c:1671
#, c-format
msgid "Illegal processor register (`%s') in Instruction: `%s'"
msgstr "Registre processeur illégal (« %s ») dans l'instruction: « %s »"
-#: config/tc-cr16.c:1723
+#: config/tc-cr16.c:1719
#, c-format
msgid "Unknown processor register (32 bit) : `%d'"
msgstr "Registre processeur (32 bits) inconnu: « %d »"
#. Issue a error message when register pair is illegal.
-#: config/tc-cr16.c:1731
+#: config/tc-cr16.c:1727
#, c-format
msgid "Illegal 32 bit - processor register (`%s') in Instruction: `%s'"
msgstr "Registre du processeur 32 bits illégal (« %s ») dans l'instruction: « %s »"
-#: config/tc-cr16.c:2076 config/tc-crx.c:1618 config/tc-crx.c:1635
+#: config/tc-cr16.c:2072 config/tc-crx.c:1614 config/tc-crx.c:1631
#, c-format
msgid "Same src/dest register is used (`r%d'), result is undefined"
msgstr "Même registre src/dest est utilisé (« r%d »), le résultat est indéfini"
-#: config/tc-cr16.c:2098
+#: config/tc-cr16.c:2094
msgid "RA register is saved twice."
msgstr "Le registre RA est sauvegardé deux fois."
-#: config/tc-cr16.c:2102
+#: config/tc-cr16.c:2098
#, c-format
msgid "`%s' Illegal use of registers."
msgstr "« %s » Utilisation illégale des registres."
-#: config/tc-cr16.c:2116
+#: config/tc-cr16.c:2112
#, c-format
msgid "`%s' Illegal count-register combination."
msgstr "« %s » Combinaison de registres de comptage illégale."
-#: config/tc-cr16.c:2122
+#: config/tc-cr16.c:2118
#, c-format
msgid "`%s' Illegal use of register."
msgstr "« %s » Utilisation de registre illégale."
-#: config/tc-cr16.c:2131 config/tc-crx.c:1627
+#: config/tc-cr16.c:2127 config/tc-crx.c:1623
#, c-format
msgid "`%s' has undefined result"
msgstr "« %s » a un résultat indéfini"
-#: config/tc-cr16.c:2139
+#: config/tc-cr16.c:2135
#, c-format
msgid "Same src/dest register is used (`r%d'),result is undefined"
msgstr "Même registre src/dest est utilisé (« r%d »), le résultat est indéfini"
-#: config/tc-cr16.c:2310 config/tc-crx.c:1533
+#: config/tc-cr16.c:2306 config/tc-crx.c:1529
msgid "Incorrect number of operands"
msgstr "Nombre d'opérandes incorrect"
-#: config/tc-cr16.c:2312 config/tc-crx.c:1535
+#: config/tc-cr16.c:2308 config/tc-crx.c:1531
#, c-format
msgid "Illegal type of operand (arg %d)"
msgstr "Type d'opérande illégal (arg %d)"
-#: config/tc-cr16.c:2318 config/tc-crx.c:1541
+#: config/tc-cr16.c:2314 config/tc-crx.c:1537
#, c-format
msgid "Operand out of range (arg %d)"
msgstr "Opérande hors limite (arg %d)"
-#: config/tc-cr16.c:2321 config/tc-crx.c:1544
+#: config/tc-cr16.c:2317 config/tc-crx.c:1540
#, c-format
msgid "Operand has odd displacement (arg %d)"
msgstr "L'opérande a un déplacement impair (arg %d)"
-#: config/tc-cr16.c:2324 config/tc-cr16.c:2355 config/tc-crx.c:1559
-#: config/tc-crx.c:1587
+#: config/tc-cr16.c:2320 config/tc-cr16.c:2351 config/tc-crx.c:1555
+#: config/tc-crx.c:1583
#, c-format
msgid "Illegal operand (arg %d)"
msgstr "Opérande illégal (arg %d)"
#. Give an error if a frag containing code is not aligned to a 2-byte
#. boundary.
-#: config/tc-cr16.c:2457 config/tc-cr16.h:74 config/tc-crx.c:1909
+#: config/tc-cr16.c:2453 config/tc-cr16.h:74 config/tc-crx.c:1905
#: config/tc-crx.h:77
msgid "instruction address is not a multiple of 2"
msgstr "l'adresse de l'instruction n'est pas un multiple de 2"
-#: config/tc-cr16.c:2480 config/tc-cris.c:1550 config/tc-cris.c:1558
-#: config/tc-crx.c:1945 config/tc-dlx.c:680 config/tc-hppa.c:3212
+#: config/tc-cr16.c:2476 config/tc-cris.c:1550 config/tc-cris.c:1558
+#: config/tc-crx.c:1941 config/tc-dlx.c:680 config/tc-hppa.c:3212
#: config/tc-hppa.c:3219 config/tc-sparc.c:1749 config/tc-sparc.c:1757
#, c-format
msgid "Unknown opcode: `%s'"
@@ -6289,11 +6439,11 @@ msgstr "--pic est invalide pour ce format d'objet"
msgid "invalid <arch> in --march=<arch>: %s"
msgstr "<arch> invalide dans --march=<arch>: %s"
-#: config/tc-cris.c:3952 config/tc-ft32.c:689 config/tc-moxie.c:776
+#: config/tc-cris.c:3952 config/tc-ft32.c:688 config/tc-moxie.c:776
msgid "Semantics error. This type of operand can not be relocated, it must be an assembly-time constant"
msgstr "Erreur de sémantique. Ce type d'opérande ne peut être relocalisé, il doit être une constante résolue au moment de l'assemblage"
-#: config/tc-cris.c:4001 config/tc-ft32.c:710 config/tc-moxie.c:824
+#: config/tc-cris.c:4001 config/tc-ft32.c:709 config/tc-moxie.c:824
#, c-format
msgid "Cannot generate relocation type for symbol %s, code %s"
msgstr "Ne peut générer un type de réadressage pour le symbole %s, code %s"
@@ -6342,142 +6492,142 @@ msgstr ""
" --march=<arch>\t\tGénérer le code pour <arch>. Choix possibles pour <arch>\n"
"\t\t\t\tsont v0_v10, v10, v32 et common_v10_v32.\n"
-#: config/tc-cris.c:4082
+#: config/tc-cris.c:4081
msgid "Invalid pc-relative relocation"
msgstr "Réadressage relatif du PC invalide"
-#: config/tc-cris.c:4127
+#: config/tc-cris.c:4126
#, c-format
msgid "Adjusted signed .word (%ld) overflows: `switch'-statement too large."
msgstr "A ajusté le débordement signé de .word (%ld): option -statement trop grande."
-#: config/tc-cris.c:4157
+#: config/tc-cris.c:4156
#, c-format
msgid ".syntax %s requires command-line option `--underscore'"
msgstr ".syntax %s requiert l'option « --underscore »"
-#: config/tc-cris.c:4166
+#: config/tc-cris.c:4165
#, c-format
msgid ".syntax %s requires command-line option `--no-underscore'"
msgstr ".syntax %s requiert l'option « --no-underscore »"
-#: config/tc-cris.c:4203
+#: config/tc-cris.c:4202
msgid "Unknown .syntax operand"
msgstr "Opérande .syntax inconnu"
-#: config/tc-cris.c:4213
+#: config/tc-cris.c:4212
msgid "Pseudodirective .file is only valid when generating ELF"
msgstr "Pseudo-directive .file est valide seulement lors de la génération ELF"
-#: config/tc-cris.c:4225
+#: config/tc-cris.c:4224
msgid "Pseudodirective .loc is only valid when generating ELF"
msgstr "Pseudo-directive .loc est valide seulement lors de la génération ELF"
-#: config/tc-cris.c:4240
+#: config/tc-cris.c:4239
#, c-format
msgid "internal inconsistency problem: %s called for %d bytes"
msgstr "problème interne d'inconsistance: %s appelé pour %d octets"
-#: config/tc-cris.c:4392
+#: config/tc-cris.c:4391
msgid "unknown operand to .arch"
msgstr "opérande inconnu pour .arch"
-#: config/tc-cris.c:4401
+#: config/tc-cris.c:4400
msgid ".arch <arch> requires a matching --march=... option"
msgstr ".arch <arch> requiert une option --march=... correspondante"
-#: config/tc-crx.c:714 config/tc-crx.c:734 config/tc-crx.c:749
+#: config/tc-crx.c:710 config/tc-crx.c:730 config/tc-crx.c:745
#, c-format
msgid "Illegal register `%s' in instruction `%s'"
msgstr "Registre illégal « %s » dans l'instruction « %s »"
-#: config/tc-crx.c:777
+#: config/tc-crx.c:773
#, c-format
msgid "Illegal Scale - `%d'"
msgstr "Échelle illégale - « %d »"
#. Issue a error message when register is illegal.
-#: config/tc-crx.c:1092
+#: config/tc-crx.c:1088
#, c-format
msgid "Illegal register (`%s') in instruction: `%s'"
msgstr "Registre illégal (« %s ») dans l'instruction: « %s »"
-#: config/tc-crx.c:1221
+#: config/tc-crx.c:1217
#, c-format
msgid "Illegal co-processor register in instruction `%s'"
msgstr "Registre coprocesseur illégal dans l'instruction « %s »"
-#: config/tc-crx.c:1228
+#: config/tc-crx.c:1224
#, c-format
msgid "Illegal co-processor special register in instruction `%s'"
msgstr "Registre coprocesseur spécial illégal dans l'instruction « %s »"
-#: config/tc-crx.c:1548
+#: config/tc-crx.c:1544
#, c-format
msgid "Invalid DISPU4 operand value (arg %d)"
msgstr "Valeur de l'opérande DISPU4 invalide (arg %d)"
-#: config/tc-crx.c:1552
+#: config/tc-crx.c:1548
#, c-format
msgid "Invalid CST4 operand value (arg %d)"
msgstr "Valeur de l'opérande CST4 invalide (arg %d)"
-#: config/tc-crx.c:1555
+#: config/tc-crx.c:1551
#, c-format
msgid "Operand value is not within upper 64 KB (arg %d)"
msgstr "La valeur de l'opérande n'est pas dans les 64 ko supérieurs (arg %d)"
-#: config/tc-crx.c:1689
+#: config/tc-crx.c:1685
msgid "Invalid register in register list"
msgstr "Registre invalide dans la liste des registres"
-#: config/tc-crx.c:1743
+#: config/tc-crx.c:1739
#, c-format
msgid "Illegal register `%s' in cop-register list"
msgstr "Registre « %s » illégal dans la liste des registres cop"
-#: config/tc-crx.c:1751
+#: config/tc-crx.c:1747
#, c-format
msgid "Illegal register `%s' in cop-special-register list"
msgstr "Registre « %s » illégal dans la liste des registres cop spéciaux"
-#: config/tc-crx.c:1770
+#: config/tc-crx.c:1766
#, c-format
msgid "Illegal register `%s' in user register list"
msgstr "Registre « %s » illégal dans la liste des registres utilisateurs"
-#: config/tc-crx.c:1789
+#: config/tc-crx.c:1785
#, c-format
msgid "Illegal register `%s' in register list"
msgstr "Registre « %s » illégal dans la liste des registres"
-#: config/tc-crx.c:1795
+#: config/tc-crx.c:1791
#, c-format
msgid "Maximum %d bits may be set in `mask16' operand"
msgstr "Au plus %d bits peuvent être mis dans l'opérande « mask16 »"
-#: config/tc-crx.c:1804
+#: config/tc-crx.c:1800
#, c-format
msgid "rest of line ignored; first ignored character is `%c'"
msgstr "reste de la ligne ignorée; premier caractère ignoré est « %c »"
-#: config/tc-crx.c:1812
+#: config/tc-crx.c:1808
#, c-format
msgid "Illegal `mask16' operand, operation is undefined - `%s'"
msgstr "Opérande « mask16 » illégal, l'opération est non définie - « %s »"
#. HI can't be specified without LO (and vise-versa).
-#: config/tc-crx.c:1818
+#: config/tc-crx.c:1814
msgid "HI/LO registers should be specified together"
msgstr "Les registres HI/LO devraient être spécifiés ensembles"
-#: config/tc-crx.c:1824
+#: config/tc-crx.c:1820
msgid "HI/LO registers should be specified without additional registers"
msgstr "Le registre HI/LO devraient être spécifiés sans registre additionnel"
#. Variable not in small data read only segment accessed
#. using small data read only anchor.
-#: config/tc-csky.c:1149 config/tc-mcore.c:1924 config/tc-microblaze.c:1999
+#: config/tc-csky.c:1149 config/tc-mcore.c:1927 config/tc-microblaze.c:1999
#: config/tc-microblaze.c:2301 config/tc-microblaze.c:2324
msgid "unknown"
msgstr "inconnu"
@@ -6679,7 +6829,7 @@ msgstr "-mljump est ignorée pour les cl801/ck802"
msgid "more than 65K literal pools"
msgstr "plus de 65K de mots dans le bassin"
-#: config/tc-csky.c:2320 read.c:3655
+#: config/tc-csky.c:2320 read.c:3740
#, c-format
msgid "bad floating literal: %s"
msgstr "littéral de virgule flottante erroné: %s"
@@ -6702,35 +6852,35 @@ msgstr "traduction de mgeni en movi"
msgid "unsupported BFD relocation size %d"
msgstr "taille de réadressage BFD %d non supportée"
-#: config/tc-csky.c:5901
+#: config/tc-csky.c:5902
msgid "second operand must be 4"
msgstr "second opérande doit être un 4"
-#: config/tc-csky.c:5925 config/tc-mcore.c:1527
+#: config/tc-csky.c:5926 config/tc-mcore.c:1527
msgid "second operand must be 1"
msgstr "second opérande doit être un 1"
-#: config/tc-csky.c:5998 config/tc-xtensa.c:2002
+#: config/tc-csky.c:5999 config/tc-xtensa.c:2002
msgid "register number out of range"
msgstr "numéro de registre hors limite"
-#: config/tc-csky.c:6008
+#: config/tc-csky.c:6009
msgid "64-bit operator src/dst register must be less than 15"
msgstr "le registre src/dst de l'opérateur 64 bits doit être plus petit que 15"
-#: config/tc-csky.c:7835
+#: config/tc-csky.c:7836
msgid "the first operand must be a symbol"
msgstr "le premier opérande doit être un symbole"
-#: config/tc-csky.c:7844
+#: config/tc-csky.c:7845
msgid "missing stack size"
msgstr "taille de pile manquante"
-#: config/tc-csky.c:7857 config/tc-score.c:4244
+#: config/tc-csky.c:7858 config/tc-score.c:4244
msgid "value not in range [0, 0xffffffff]"
msgstr "valeur pas dans la gamme [0, 0xffffffff]"
-#: config/tc-csky.c:7867 config/tc-mcore.c:782
+#: config/tc-csky.c:7868 config/tc-mcore.c:782
msgid "operand must be a constant"
msgstr "l'opérande doit être une constante"
@@ -7033,7 +7183,7 @@ msgstr "Erreur d'expression pour le modificateur d'opérande %%hi/%%lo\n"
msgid "Invalid expression after %%%%\n"
msgstr "Expression invalide après %%%%\n"
-#: config/tc-dlx.c:691 config/tc-tic4x.c:2452
+#: config/tc-dlx.c:691 config/tc-tic4x.c:2454
#, c-format
msgid "Unknown opcode `%s'."
msgstr "Opcode « %s » inconnu."
@@ -7079,7 +7229,7 @@ msgstr "étiquette « $%d » redéfinie"
msgid "Invalid expression after # number\n"
msgstr "Expression invalide après # numéro\n"
-#: config/tc-dlx.c:1177 config/tc-m32r.c:2275 config/tc-nds32.c:7881
+#: config/tc-dlx.c:1177 config/tc-m32r.c:2275 config/tc-nds32.c:7841
#: config/tc-sparc.c:4011
#, c-format
msgid "internal error: can't export reloc type %d (`%s')"
@@ -7509,7 +7659,7 @@ msgstr " -h-tick-hex Supporter les constantes hexadécimales dans
msgid "call to tc_aout_fix_to_chars \n"
msgstr "appel de tc_aout_fix_to_chars \n"
-#: config/tc-h8300.c:2220 config/tc-xc16x.c:349
+#: config/tc-h8300.c:2220 config/tc-xc16x.c:348
#, c-format
msgid "call to md_convert_frag \n"
msgstr "appel de md_convert_frag \n"
@@ -7523,13 +7673,9 @@ msgstr "appel de md_estimate_size_before_relax \n"
msgid "Unexpected reference to a symbol in a non-code section"
msgstr "Référence inattendue à un symbole dans une section qui n'est pas du code"
-#: config/tc-h8300.c:2302 config/tc-xc16x.c:292
-msgid "Difference of symbols in different sections is not supported"
-msgstr "Des différences de symboles dans des sections différentes ne sont pas supportées"
-
-#: config/tc-h8300.c:2324 config/tc-mcore.c:2205 config/tc-microblaze.c:2494
+#: config/tc-h8300.c:2323 config/tc-mcore.c:2208 config/tc-microblaze.c:2494
#: config/tc-pj.c:488 config/tc-sh.c:3901 config/tc-tic6x.c:4514
-#: config/tc-xc16x.c:315
+#: config/tc-xc16x.c:314
#, c-format
msgid "Cannot represent relocation type %s"
msgstr "Ne peut représenter le type de réadressage %s"
@@ -7949,868 +8095,884 @@ msgstr "erreur interne: perte de l'opcode: « %s» «%s »\n"
msgid "Broken assembler. No assembly attempted."
msgstr "Assemblage cassé. Aucune tentative d'assemblage."
-#: config/tc-i386.c:1476
+#: config/tc-i386.c:1486
#, c-format
msgid "i386_output_nops called to generate nops of at most %d bytes!"
msgstr "i386_output_nops appelé pour générer des nops d'au plus %d octets !"
-#: config/tc-i386.c:1685
+#: config/tc-i386.c:1695
#, c-format
msgid "invalid single nop size: %d (expect within [0, %d])"
msgstr "taille de nop seul invalide: %d (valeur attendue entre [0, %d])"
-#: config/tc-i386.c:1726
+#: config/tc-i386.c:1736
msgid "jump over nop padding out of range"
msgstr "sauter par dessus les nop de remplissage hors de portée"
-#: config/tc-i386.c:2564
-msgid "%"
-msgstr "%"
+#: config/tc-i386.c:2581
+#, c-format
+msgid "0x%s shortened to 0x%s"
+msgstr "0x%s réduit à 0x%s"
-#: config/tc-i386.c:2656 config/tc-i386.c:7983
+#: config/tc-i386.c:2673 config/tc-i386.c:8079
msgid "same type of prefix used twice"
msgstr "même type de préfixe utilisé deux fois"
-#: config/tc-i386.c:2683
+#: config/tc-i386.c:2700
#, c-format
msgid "64bit mode not supported on `%s'."
msgstr "mode 64 bits pas supporté sur « %s »"
-#: config/tc-i386.c:2692
+#: config/tc-i386.c:2709
#, c-format
msgid "32bit mode not supported on `%s'."
msgstr "mode 32 bits pas supporté sur « %s »"
-#: config/tc-i386.c:2732
+#: config/tc-i386.c:2749
msgid "bad argument to syntax directive."
msgstr "mauvais argument pour la directive de syntaxe."
-#: config/tc-i386.c:2795
+#: config/tc-i386.c:2812
#, c-format
msgid "bad argument to %s_check directive."
msgstr "mauvais argument pour la directive %s_check."
-#: config/tc-i386.c:2799
+#: config/tc-i386.c:2816
#, c-format
msgid "missing argument for %s_check directive"
msgstr "argument manquant pour la directive %s_check"
-#: config/tc-i386.c:2839
+#: config/tc-i386.c:2856
#, c-format
msgid "`%s' is not supported on `%s'"
msgstr "« %s » n'est pas supporté sur « %s »"
-#: config/tc-i386.c:2945
+#: config/tc-i386.c:2962
#, c-format
msgid "no such architecture: `%s'"
msgstr "pas de telle architecture: « %s »"
-#: config/tc-i386.c:2950
+#: config/tc-i386.c:2967
msgid "missing cpu architecture"
msgstr "architecture cpu manquante"
-#: config/tc-i386.c:2967
+#: config/tc-i386.c:2984
#, c-format
msgid "no such architecture modifier: `%s'"
msgstr "pas de tel modificateur d'architecture: « %s »"
-#: config/tc-i386.c:2982 config/tc-i386.c:3012
+#: config/tc-i386.c:2999 config/tc-i386.c:3029
msgid "Intel L1OM is 64bit ELF only"
msgstr "Intel L1OM supporte uniquement ELF 64 bits"
-#: config/tc-i386.c:2989 config/tc-i386.c:3019
+#: config/tc-i386.c:3006 config/tc-i386.c:3036
msgid "Intel K1OM is 64bit ELF only"
msgstr "Intel K1OM supporte uniquement ELF 64 bits"
-#: config/tc-i386.c:2996 config/tc-i386.c:3033
+#: config/tc-i386.c:3013 config/tc-i386.c:3050
msgid "Intel MCU is 32bit ELF only"
msgstr "Intel MCU supporte uniquement ELF 32 bits"
-#: config/tc-i386.c:3040 config/tc-i386.c:13894
+#: config/tc-i386.c:3057 config/tc-i386.c:14013
msgid "unknown architecture"
msgstr "architecture inconnue"
-#: config/tc-i386.c:3427
+#: config/tc-i386.c:3444
msgid "there are no pc-relative size relocations"
msgstr "il n'y a pas de tailles de réadressages relatifs au PC"
-#: config/tc-i386.c:3439
+#: config/tc-i386.c:3456
#, c-format
msgid "unknown relocation (%u)"
msgstr "réadressage inconnu (%u)"
-#: config/tc-i386.c:3441
+#: config/tc-i386.c:3458
#, c-format
msgid "%u-byte relocation cannot be applied to %u-byte field"
msgstr "réadressage %u octets ne peut pas être appliqué sur un champ de %u octets"
-#: config/tc-i386.c:3445
+#: config/tc-i386.c:3462
msgid "non-pc-relative relocation for pc-relative field"
msgstr "réadressage non relatif au PC pour un champ relatif au PC"
-#: config/tc-i386.c:3450
+#: config/tc-i386.c:3467
msgid "relocated field and relocation type differ in signedness"
msgstr "le champ relocalisé et le type relocalisé diffèrent sur le signe"
-#: config/tc-i386.c:3459
+#: config/tc-i386.c:3476
msgid "there are no unsigned pc-relative relocations"
msgstr "il n'y a pas de réadressage non signé relative au PC"
-#: config/tc-i386.c:3467
+#: config/tc-i386.c:3484
#, c-format
msgid "cannot do %u byte pc-relative relocation"
msgstr "ne peut faire un réadressage relatif au PC de %u octets"
-#: config/tc-i386.c:3484
+#: config/tc-i386.c:3501
#, c-format
msgid "cannot do %s %u byte relocation"
msgstr "ne peut faire un réadressage %s %u octets"
-#: config/tc-i386.c:4035 config/tc-i386.c:4968
+#: config/tc-i386.c:4052 config/tc-i386.c:5019
#, c-format
msgid "invalid instruction `%s' after `%s'"
msgstr "mauvaise instruction « %s » après « %s »"
-#: config/tc-i386.c:4041
+#: config/tc-i386.c:4058
#, c-format
msgid "missing `lock' with `%s'"
msgstr "« lock » manquant avec « %s »"
-#: config/tc-i386.c:4048
+#: config/tc-i386.c:4065
#, c-format
msgid "instruction `%s' after `xacquire' not allowed"
msgstr "instruction « %s » pas permise après « xacquire »"
-#: config/tc-i386.c:4054
+#: config/tc-i386.c:4071
#, c-format
msgid "memory destination needed for instruction `%s' after `xrelease'"
msgstr "destination mémoire nécessaire pour l'instruction « %s » après « xrelease »"
-#: config/tc-i386.c:4700
+#: config/tc-i386.c:4743
#, c-format
msgid "`%s` changes flags which would affect control flow behavior"
msgstr "« %s » change les fanions qui peuvent affecter le comportement du contrôle de flux"
-#: config/tc-i386.c:4742
+#: config/tc-i386.c:4785
#, c-format
msgid "indirect `%s` with memory operand should be avoided"
msgstr "« %s » indirect avec un opérande mémoire devrait être évité"
-#: config/tc-i386.c:4753
+#: config/tc-i386.c:4796
#, c-format
msgid "`%s` skips -mlfence-before-indirect-branch on `%s`"
msgstr "« %s » passe outre -mlfence-before-indirect-branch sur « %s »"
-#: config/tc-i386.c:4774
+#: config/tc-i386.c:4817
#, c-format
msgid "`%s` skips -mlfence-before-ret on `%s`"
msgstr "« %s » passe outre -mlfence-before-ret sur « %s »"
-#: config/tc-i386.c:4919
-msgid "0x%"
-msgstr "0x%"
+#: config/tc-i386.c:4966
+#, c-format
+msgid "0x%s out of range of signed 32bit displacement"
+msgstr "0x%s hors limite pour un déplacement signé de 32 bits"
-#: config/tc-i386.c:4958
+#: config/tc-i386.c:5009
#, c-format
msgid "SSE instruction `%s' is used"
msgstr "instruction SSE « %s » est utilisée"
-#: config/tc-i386.c:4981
+#: config/tc-i386.c:5032
msgid "expecting lockable instruction after `lock'"
msgstr "instruction verrouillable attendue après l'instruction « lock »"
-#: config/tc-i386.c:4991
+#: config/tc-i386.c:5042
#, c-format
msgid "data size prefix invalid with `%s'"
msgstr "le préfixe de taille de donnée est invalide avec « %s »"
-#: config/tc-i386.c:5001
+#: config/tc-i386.c:5052
msgid "expecting valid branch instruction after `bnd'"
msgstr "instruction de branchement valide attendue après « bnd »"
-#: config/tc-i386.c:5005
+#: config/tc-i386.c:5056
msgid "expecting indirect branch instruction after `notrack'"
msgstr "instruction de branchement indirect attendue après « notrack »"
-#: config/tc-i386.c:5010
+#: config/tc-i386.c:5061
msgid "32-bit address isn't allowed in 64-bit MPX instructions."
msgstr "adresse 32 bits pas permise dans des instructions MPX 64 bits."
-#: config/tc-i386.c:5014
+#: config/tc-i386.c:5065
msgid "16-bit address isn't allowed in MPX instructions"
msgstr "adresse 16 bits pas permise dans des instructions MPX"
-#: config/tc-i386.c:5024
+#: config/tc-i386.c:5075
msgid "replacing `rep'/`repe' prefix by `bnd'"
msgstr "remplacement du préfixe « rep »/« repe » par « bnd »"
#. UnixWare fsub no args is alias for fsubp, fadd -> faddp, etc.
-#: config/tc-i386.c:5096
+#: config/tc-i386.c:5150
#, c-format
msgid "translating to `%sp'"
msgstr "traduction en « %sp »"
-#: config/tc-i386.c:5103
+#: config/tc-i386.c:5157
#, c-format
msgid "instruction `%s' isn't supported outside of protected mode."
msgstr "l'instruction « %s » n'est pas supportée en dehors du mode protégé."
-#: config/tc-i386.c:5111
+#: config/tc-i386.c:5165
#, c-format
msgid "REX prefix invalid with `%s'"
msgstr "le préfixe REX est invalide avec « %s »"
-#: config/tc-i386.c:5172
+#: config/tc-i386.c:5226
#, c-format
msgid "can't encode register '%s%s' in an instruction requiring REX prefix."
msgstr "ne peut encoder le registre « %s%s » dans l'instruction nécessitant le préfixe REX."
-#: config/tc-i386.c:5248 config/tc-i386.c:5452
+#: config/tc-i386.c:5302 config/tc-i386.c:5506
#, c-format
msgid "no such instruction: `%s'"
msgstr "pas de telle instruction: « %s »"
-#: config/tc-i386.c:5259 config/tc-i386.c:5485
+#: config/tc-i386.c:5313 config/tc-i386.c:5539
#, c-format
msgid "invalid character %s in mnemonic"
msgstr "caractère %s invalide dans la mnémonique"
-#: config/tc-i386.c:5266
+#: config/tc-i386.c:5320
msgid "expecting prefix; got nothing"
msgstr "préfixe attendu; rien de trouvé"
-#: config/tc-i386.c:5268
+#: config/tc-i386.c:5322
msgid "expecting mnemonic; got nothing"
msgstr "mnémonique attendue; rien de trouvé"
-#: config/tc-i386.c:5283 config/tc-i386.c:5507
+#: config/tc-i386.c:5337 config/tc-i386.c:5561
#, c-format
msgid "`%s' is only supported in 64-bit mode"
msgstr "« %s » est uniquement supporté en mode 64 bits"
-#: config/tc-i386.c:5284 config/tc-i386.c:5506
+#: config/tc-i386.c:5338 config/tc-i386.c:5560
#, c-format
msgid "`%s' is not supported in 64-bit mode"
msgstr "« %s » n'est pas supporté en mode 64 bits"
-#: config/tc-i386.c:5296
+#: config/tc-i386.c:5350
#, c-format
msgid "redundant %s prefix"
msgstr "préfixe %s redondant"
-#: config/tc-i386.c:5498
+#: config/tc-i386.c:5552
msgid "use .code16 to ensure correct addressing mode"
msgstr "utilisez .code16 pour assurer un mode d'adressage correct"
-#: config/tc-i386.c:5510
+#: config/tc-i386.c:5564
#, c-format
msgid "`%s' is not supported on `%s%s'"
msgstr "« %s » n'est pas supporté sur « %s%s »"
-#: config/tc-i386.c:5538
+#: config/tc-i386.c:5592
#, c-format
msgid "invalid character %s before operand %d"
msgstr "caractère %s invalide avant l'opérande %d"
-#: config/tc-i386.c:5550
+#: config/tc-i386.c:5604
#, c-format
msgid "unbalanced double quotes in operand %d."
msgstr "guillemets non pairées dans l'opérande %d."
-#: config/tc-i386.c:5557
+#: config/tc-i386.c:5611
#, c-format
msgid "unbalanced parenthesis in operand %d."
msgstr "parenthèses non pairées dans l'opérande %d."
-#: config/tc-i386.c:5570
+#: config/tc-i386.c:5624
#, c-format
msgid "invalid character %s in operand %d"
msgstr "caractère invalide %s dans l'opérande %d"
-#: config/tc-i386.c:5590
+#: config/tc-i386.c:5644
#, c-format
msgid "spurious operands; (%d operands/instruction max)"
msgstr "opérandes parasites; (%d opérandes/instructions au maximum)"
-#: config/tc-i386.c:5600 config/tc-i386.c:11480
+#: config/tc-i386.c:5654 config/tc-i386.c:11589
#, c-format
msgid "too many memory references for `%s'"
msgstr "trop de références mémoires pour « %s »"
-#: config/tc-i386.c:5621
+#: config/tc-i386.c:5675
msgid "expecting operand after ','; got nothing"
msgstr "opérande attendu après « , »; rien de trouvé"
-#: config/tc-i386.c:5626
+#: config/tc-i386.c:5680
msgid "expecting operand before ','; got nothing"
msgstr "opérande attendu avant « , »; rien de trouvé"
-#: config/tc-i386.c:6046
+#: config/tc-i386.c:6100
msgid "mask, index, and destination registers should be distinct"
msgstr "registres masque, index et de destination devraient être distincts"
-#: config/tc-i386.c:6063
+#: config/tc-i386.c:6117
msgid "index and destination registers should be distinct"
msgstr "registres index et de destination devraient être distincts"
-#: config/tc-i386.c:6806
+#: config/tc-i386.c:6891
msgid "operand size mismatch"
msgstr "non concordance de la taille d'opérande"
-#: config/tc-i386.c:6809
+#: config/tc-i386.c:6894
msgid "operand type mismatch"
msgstr "non concordance du type d'opérande"
-#: config/tc-i386.c:6812
+#: config/tc-i386.c:6897
msgid "register type mismatch"
msgstr "non concordance du type de registre"
-#: config/tc-i386.c:6815
+#: config/tc-i386.c:6900
msgid "number of operands mismatch"
msgstr "non concordance du nombre d'opérandes"
-#: config/tc-i386.c:6818
+#: config/tc-i386.c:6903
msgid "invalid instruction suffix"
msgstr "suffixe d'instruction invalide"
-#: config/tc-i386.c:6821
+#: config/tc-i386.c:6906
msgid "constant doesn't fit in 4 bits"
msgstr "la constante ne tient pas dans 4 bits"
-#: config/tc-i386.c:6824
+#: config/tc-i386.c:6909
msgid "unsupported with Intel mnemonic"
msgstr "non supporté avec les mnémoniques Intel"
-#: config/tc-i386.c:6827
+#: config/tc-i386.c:6912
msgid "unsupported syntax"
msgstr "syntaxe non supportée"
-#: config/tc-i386.c:6830
+#: config/tc-i386.c:6915
#, c-format
msgid "unsupported instruction `%s'"
msgstr "instruction « %s » non supportée"
-#: config/tc-i386.c:6834
+#: config/tc-i386.c:6919
msgid "invalid SIB address"
msgstr "adresse SIB invalide"
-#: config/tc-i386.c:6837
+#: config/tc-i386.c:6922
msgid "invalid VSIB address"
msgstr "adresse VSIB invalide"
-#: config/tc-i386.c:6840
+#: config/tc-i386.c:6925
msgid "mask, index, and destination registers must be distinct"
msgstr "registres masque, index et de destination doivent être distincts"
-#: config/tc-i386.c:6843
+#: config/tc-i386.c:6928
msgid "all tmm registers must be distinct"
msgstr "tous les registres tmm doivent être distincts"
-#: config/tc-i386.c:6846
+#: config/tc-i386.c:6931
+msgid "destination and source registers must be distinct"
+msgstr "les registres destination et source doivent être distincts"
+
+#: config/tc-i386.c:6934
msgid "unsupported vector index register"
msgstr "registre d'index vectoriel non supporté"
-#: config/tc-i386.c:6849
+#: config/tc-i386.c:6937
msgid "unsupported broadcast"
msgstr "diffusion non supporté"
-#: config/tc-i386.c:6852
+#: config/tc-i386.c:6940
msgid "broadcast is needed for operand of such type"
msgstr "une diffusion est nécessaire pour un opérande de ce type"
-#: config/tc-i386.c:6855
+#: config/tc-i386.c:6943
msgid "unsupported masking"
msgstr "masquage non supportée"
-#: config/tc-i386.c:6858
+#: config/tc-i386.c:6946
msgid "mask not on destination operand"
msgstr "masque pas sur un opérande de destination"
-#: config/tc-i386.c:6861
+#: config/tc-i386.c:6949
msgid "default mask isn't allowed"
msgstr "le masque par défaut n'est pas permis"
-#: config/tc-i386.c:6864
+#: config/tc-i386.c:6952
msgid "unsupported static rounding/sae"
msgstr "arrondi/sae statique non supporté"
-#: config/tc-i386.c:6868
+#: config/tc-i386.c:6956
msgid "RC/SAE operand must precede immediate operands"
msgstr "l'opérande RC/SAE doit précéder les opérandes immédiats"
-#: config/tc-i386.c:6870
+#: config/tc-i386.c:6958
msgid "RC/SAE operand must follow immediate operands"
msgstr "l'opérande RC/SAE doit suivre les opérandes immédiats"
-#: config/tc-i386.c:6873 config/tc-metag.c:4787 config/tc-metag.c:5528
+#: config/tc-i386.c:6961 config/tc-metag.c:4787 config/tc-metag.c:5528
#: config/tc-metag.c:5550
msgid "invalid register operand"
msgstr "opérande registre invalide"
-#: config/tc-i386.c:6876
+#: config/tc-i386.c:6964
#, c-format
msgid "%s for `%s'"
msgstr "%s pour « %s »"
-#: config/tc-i386.c:6885
+#: config/tc-i386.c:6973
#, c-format
msgid "indirect %s without `*'"
msgstr "%s indirect sans « * »"
#. Warn them that a data or address size prefix doesn't
#. affect assembly of the next line of code.
-#: config/tc-i386.c:6892
+#: config/tc-i386.c:6980
#, c-format
msgid "stand-alone `%s' prefix"
msgstr "préfixe « %s » autonome"
-#: config/tc-i386.c:6934
+#: config/tc-i386.c:7022
#, c-format
msgid "`%s' operand %u must use `%ses' segment"
msgstr "« %s » opérande %u doit utiliser le segment « %ses »"
-#: config/tc-i386.c:7089
+#: config/tc-i386.c:7177
msgid "generating 16-bit `iret' for .code16gcc directive"
msgstr "générer « iret » 16 bits pour la directive .code16gcc"
-#: config/tc-i386.c:7093
+#: config/tc-i386.c:7181
#, c-format
msgid "generating 32-bit `%s', unlike earlier gas versions"
msgstr "générer « %s » 32 bits contrairement aux versions précédentes de gas"
-#: config/tc-i386.c:7211
+#: config/tc-i386.c:7299
#, c-format
msgid "ambiguous operand size for `%s'"
msgstr "taille d'opérande ambiguë pour « %s »"
-#: config/tc-i386.c:7216
+#: config/tc-i386.c:7304
#, c-format
msgid "no instruction mnemonic suffix given and no register operands; can't size `%s'"
msgstr "aucun suffixe de mnémonique d'instruction fourni et pas d'opérande registre; ne peut déterminer la taille de « %s »"
-#: config/tc-i386.c:7221
+#: config/tc-i386.c:7309
#, c-format
msgid "%s; using default for `%s'"
msgstr "%s ; utilisation de la valeur par défaut pour « %s »"
-#: config/tc-i386.c:7223
+#: config/tc-i386.c:7311
msgid "ambiguous operand size"
msgstr "taille d'opérande ambiguë"
-#: config/tc-i386.c:7224
+#: config/tc-i386.c:7312
msgid "no instruction mnemonic suffix given and no register operands"
msgstr "aucun suffixe de mnémonique d'instruction fourni et pas d'opérande registre"
-#: config/tc-i386.c:7364
+#: config/tc-i386.c:7452
#, c-format
msgid "16-bit addressing unavailable for `%s'"
msgstr "adressage 16 bits indisponible pour « %s »"
-#: config/tc-i386.c:7432
+#: config/tc-i386.c:7520
#, c-format
msgid "invalid register operand size for `%s'"
msgstr "taille d'opérande de registre invalide pour « %s »"
#. Any other register is bad.
-#: config/tc-i386.c:7472 config/tc-i386.c:7497 config/tc-i386.c:7556
-#: config/tc-i386.c:7606
+#: config/tc-i386.c:7560 config/tc-i386.c:7585 config/tc-i386.c:7644
+#: config/tc-i386.c:7694
#, c-format
msgid "`%s%s' not allowed with `%s%c'"
msgstr "« %s%s» n'est pas permis avec « %s%c »"
-#: config/tc-i386.c:7510 config/tc-i386.c:7530 config/tc-i386.c:7581
-#: config/tc-i386.c:7620
+#: config/tc-i386.c:7598 config/tc-i386.c:7618 config/tc-i386.c:7669
+#: config/tc-i386.c:7708
#, c-format
msgid "incorrect register `%s%s' used with `%c' suffix"
msgstr "Registre incorrect « %s%s » utilisé avec le suffixe « %c »"
-#: config/tc-i386.c:7687
+#: config/tc-i386.c:7783
msgid "no instruction mnemonic suffix given; can't determine immediate size"
msgstr "aucun suffixe de mnémonique d'instruction fourni; ne peut déterminer la taille de l'immédiat"
-#: config/tc-i386.c:7851
+#: config/tc-i386.c:7947
#, c-format
msgid "source register `%s%s' implicitly denotes `%s%.3s%u' to `%s%.3s%u' source group in `%s'"
msgstr "le registre source « %s%s » dénote implicitement « %s%.3s%u » vers le groupe source « %s%.3s%u » dans « %s »"
-#: config/tc-i386.c:7895
+#: config/tc-i386.c:7991
#, c-format
msgid "you can't `%s %s%s'"
msgstr "vous ne pouvez pas utiliser « %s %s%s »"
#. Reversed arguments on faddp, fsubp, etc.
-#: config/tc-i386.c:7935
+#: config/tc-i386.c:8031
#, c-format
msgid "translating to `%s %s%s,%s%s'"
msgstr "traduction en « %s %s%s,%s%s »"
#. Extraneous `l' suffix on fp insn.
-#: config/tc-i386.c:7942
+#: config/tc-i386.c:8038
#, c-format
msgid "translating to `%s %s%s'"
msgstr "traduction en « %s %s%s »"
-#: config/tc-i386.c:7954
+#: config/tc-i386.c:8050
#, c-format
msgid "segment override on `%s' is ineffectual"
msgstr "écrasement de segment sur « %s » est inefficace"
-#: config/tc-i386.c:8693 config/tc-riscv.c:1296
+#: config/tc-i386.c:8789 config/tc-riscv.c:1340
msgid "relaxable branches not supported in absolute section"
msgstr "les branches relaxables ne sont pas supportées dans une section absolue"
-#: config/tc-i386.c:8728 config/tc-i386.c:8874 config/tc-i386.c:8956
+#: config/tc-i386.c:8824 config/tc-i386.c:8972 config/tc-i386.c:9054
#, c-format
msgid "skipping prefixes on `%s'"
msgstr "escamotage des préfixes sur « %s »"
-#: config/tc-i386.c:8982
+#: config/tc-i386.c:9080
msgid "16-bit jump out of range"
msgstr "saut de 16 bits hors limite"
-#: config/tc-i386.c:9236 config/tc-i386.c:9268 config/tc-i386.c:9357
+#: config/tc-i386.c:9334 config/tc-i386.c:9366 config/tc-i386.c:9455
#, c-format
msgid "`%s` skips -malign-branch-boundary on `%s`"
msgstr "« %s » passe outre -malign-branch-boundary sur « %s »"
-#: config/tc-i386.c:9633
+#: config/tc-i386.c:9646
+#, c-format
+msgid "Cannot convert `%s' in 16-bit mode"
+msgstr "Impossible de convertir « %s » en mode 16 bits"
+
+#: config/tc-i386.c:9648
+#, c-format
+msgid "Cannot convert `%s' with `-momit-lock-prefix=yes' in effect"
+msgstr "Impossible de convertir « %s » quand « -momit-lock-prefix=yes » est actif"
+
+#: config/tc-i386.c:9736
msgid "pseudo prefix without instruction"
msgstr "pseudo préfixe sans instruction"
-#: config/tc-i386.c:9779
+#: config/tc-i386.c:9882
#, c-format
msgid "instruction length of %u bytes exceeds the limit of 15"
msgstr "la longueur de %u octets pour l'instruction dépasse la limite de 15"
-#: config/tc-i386.c:10365
+#: config/tc-i386.c:10468
#, c-format
msgid "@%s reloc is not supported with %d-bit output format"
msgstr "réadressage @%s n'est pas supporté dans le format de sortie %d bits"
-#: config/tc-i386.c:10418
+#: config/tc-i386.c:10521
#, c-format
msgid "missing or invalid expression `%s'"
msgstr "expression manquante ou invalide « %s »"
-#: config/tc-i386.c:10427
+#: config/tc-i386.c:10530
#, c-format
msgid "invalid PLT expression `%s'"
msgstr "expression PLT invalide « %s »"
-#: config/tc-i386.c:10519
+#: config/tc-i386.c:10628
#, c-format
msgid "Unsupported broadcast: `%s'"
msgstr "Diffusion non supporté : « %s »"
-#: config/tc-i386.c:10536
+#: config/tc-i386.c:10645
#, c-format
msgid "`%s%s' can't be used for write mask"
msgstr "« %s%s » ne peut être utilisé comme masque d'écriture"
-#: config/tc-i386.c:10556
+#: config/tc-i386.c:10665
#, c-format
msgid "invalid write mask `%s'"
msgstr "masque d'écriture « %s » invalide"
-#: config/tc-i386.c:10577 config/tc-i386.c:11271
+#: config/tc-i386.c:10686 config/tc-i386.c:11380
#, c-format
msgid "duplicated `%s'"
msgstr "« %s » en double"
-#: config/tc-i386.c:10587
+#: config/tc-i386.c:10696
#, c-format
msgid "invalid zeroing-masking `%s'"
msgstr "masque de zérotage « %s » invalide"
-#: config/tc-i386.c:10600
+#: config/tc-i386.c:10709
#, c-format
msgid "missing `}' in `%s'"
msgstr "« } » manquante dans « %s »"
#. We don't know this one.
-#: config/tc-i386.c:10614
+#: config/tc-i386.c:10723
#, c-format
msgid "unknown vector operation: `%s'"
msgstr "opération vectorielle inconnue : « %s »"
-#: config/tc-i386.c:10620
+#: config/tc-i386.c:10729
msgid "zeroing-masking only allowed with write mask"
msgstr "le masquage par zéro est uniquement autorisé avec un masque en écriture"
-#: config/tc-i386.c:10640
+#: config/tc-i386.c:10749
#, c-format
msgid "at most %d immediate operands are allowed"
msgstr "au plus %d opérandes immédiats sont permis"
-#: config/tc-i386.c:10662 config/tc-i386.c:10930
+#: config/tc-i386.c:10771 config/tc-i386.c:11039
#, c-format
msgid "junk `%s' after expression"
msgstr "rebuts « %s » après l'expression"
-#: config/tc-i386.c:10675
+#: config/tc-i386.c:10784
#, c-format
msgid "illegal immediate register operand %s"
msgstr "opérande de registre immédiat illégal %s"
-#: config/tc-i386.c:10689
+#: config/tc-i386.c:10798
#, c-format
msgid "missing or invalid immediate expression `%s'"
msgstr "expression immédiate manquante ou invalide « %s »"
-#: config/tc-i386.c:10712 config/tc-i386.c:11010
+#: config/tc-i386.c:10821 config/tc-i386.c:11119
#, c-format
msgid "unimplemented segment %s in operand"
msgstr "segment %s non implémenté dans l'opérande"
-#: config/tc-i386.c:10761
+#: config/tc-i386.c:10870
#, c-format
msgid "expecting scale factor of 1, 2, 4, or 8: got `%s'"
msgstr "facteur d'échelle attendu de 1, 2, 4, ou 8: a obtenu « %s »"
-#: config/tc-i386.c:10770
+#: config/tc-i386.c:10879
#, c-format
msgid "scale factor of %d without an index register"
msgstr "facteur d'échelle de %d sans registre d'index"
-#: config/tc-i386.c:10792
+#: config/tc-i386.c:10901
#, c-format
msgid "at most %d displacement operands are allowed"
msgstr "au plus %d opérandes de déplacement sont permis"
-#: config/tc-i386.c:10986
+#: config/tc-i386.c:11095
#, c-format
msgid "missing or invalid displacement expression `%s'"
msgstr "expression de déplacement manquante ou invalide « %s »"
-#: config/tc-i386.c:11160
+#: config/tc-i386.c:11269
#, c-format
msgid "`%s' is not valid here (expected `%c%s%s%c')"
msgstr "« %s » n'est pas valable ici (attendu « %c%s%s%c »)"
-#: config/tc-i386.c:11172
+#: config/tc-i386.c:11281
#, c-format
msgid "`%s' is not a valid %s expression"
msgstr "« %s » n'est pas une expression %s valide"
-#: config/tc-i386.c:11184
+#: config/tc-i386.c:11293
#, c-format
msgid "invalid `%s' prefix"
msgstr "préfixe « %s » invalide"
-#: config/tc-i386.c:11217
+#: config/tc-i386.c:11326
#, c-format
msgid "`%s' cannot be used here"
msgstr "« %s » ne peut pas être utilisé ici"
-#: config/tc-i386.c:11226
+#: config/tc-i386.c:11335
msgid "register scaling is being ignored here"
msgstr "la mise à l'échelle du registre est ignorée ici"
-#: config/tc-i386.c:11288
+#: config/tc-i386.c:11397
#, c-format
msgid "Missing '}': '%s'"
msgstr "« } » manquante : « %s »"
-#: config/tc-i386.c:11294
+#: config/tc-i386.c:11403
#, c-format
msgid "Junk after '}': '%s'"
msgstr "Rebus après « } » : « %s »"
-#: config/tc-i386.c:11416
+#: config/tc-i386.c:11525
#, c-format
msgid "bad memory operand `%s'"
msgstr "opérande mémoire erroné « %s »"
-#: config/tc-i386.c:11432
+#: config/tc-i386.c:11541
#, c-format
msgid "junk `%s' after register"
msgstr "rebut « %s » après le registre"
-#: config/tc-i386.c:11445 config/tc-i386.c:11609 config/tc-i386.c:11653
+#: config/tc-i386.c:11554 config/tc-i386.c:11718 config/tc-i386.c:11762
#, c-format
msgid "bad register name `%s'"
msgstr "mauvais nom de registre « %s »"
-#: config/tc-i386.c:11453
+#: config/tc-i386.c:11562
msgid "immediate operand illegal with absolute jump"
msgstr "opérande immédiat illégal avec un saut absolu"
-#: config/tc-i386.c:11521
+#: config/tc-i386.c:11630
msgid "unbalanced figure braces"
msgstr "parenthèses de chiffre non appariées"
-#: config/tc-i386.c:11598
+#: config/tc-i386.c:11707
#, c-format
msgid "expecting `,' or `)' after index register in `%s'"
msgstr "« , » ou « ) » attendu après le registre d'index dans « %s »"
-#: config/tc-i386.c:11626
+#: config/tc-i386.c:11735
#, c-format
msgid "expecting `)' after scale factor in `%s'"
msgstr "« ) » attendu après le facteur d'échelle dans « %s »"
-#: config/tc-i386.c:11634
+#: config/tc-i386.c:11743
#, c-format
msgid "expecting index register or scale factor after `,'; got '%c'"
msgstr "registre d'index ou facteur d'échelle attendu après « , »; a obtenu « %c »"
-#: config/tc-i386.c:11642
+#: config/tc-i386.c:11751
#, c-format
msgid "expecting `,' or `)' after base register in `%s'"
msgstr "« , » ou « ) » attendu après le registre de base dans « %s »"
#. It's not a memory operand; argh!
-#: config/tc-i386.c:11691
+#: config/tc-i386.c:11800
#, c-format
msgid "invalid char %s beginning operand %d `%s'"
msgstr "caractère %s invalide au début de l'opérande %d « %s »"
-#: config/tc-i386.c:12350
+#: config/tc-i386.c:12460
#, c-format
msgid "%s:%u: add %d%s at 0x%llx to align %s within %d-byte boundary\n"
msgstr "%s:%u: ajouter %d%s à 0x%llx pour aligner %s dans une frontière de %d octets\n"
-#: config/tc-i386.c:12353
+#: config/tc-i386.c:12463
#, c-format
msgid "%s:%u: add additional %d%s at 0x%llx to align %s within %d-byte boundary\n"
msgstr "%s:%u: ajouter un %d%s supplémentaire à 0x%llx pour aligner %s dans une frontière de %d octets\n"
-#: config/tc-i386.c:12359
+#: config/tc-i386.c:12469
#, c-format
msgid "%s:%u: add %d%s-byte nop at 0x%llx to align %s within %d-byte boundary\n"
msgstr "%s:%u: ajouter un nop de %d%s octets à 0x%llx pour aligner %s dans une frontière de %d octets\n"
-#: config/tc-i386.c:12426
+#: config/tc-i386.c:12536
msgid "long jump required"
msgstr "long saut (jump) requis"
-#: config/tc-i386.c:12481
+#: config/tc-i386.c:12591
msgid "jump target out of range"
msgstr "cible du saut hors limite"
-#: config/tc-i386.c:12897
+#: config/tc-i386.c:13007
#, c-format
msgid "register '%s%s' cannot be used here"
msgstr "registre « %s%s » ne peut être utilisé ici"
-#: config/tc-i386.c:13112
+#: config/tc-i386.c:13224
#, c-format
msgid "invalid -mx86-used-note= option: `%s'"
msgstr "option -mx86-used-note= invalide: « %s »"
-#: config/tc-i386.c:13135
+#: config/tc-i386.c:13247
msgid "no compiled in support for x86_64"
msgstr "pas compilé avec le support pour x86_64"
-#: config/tc-i386.c:13155
+#: config/tc-i386.c:13267
msgid "no compiled in support for 32bit x86_64"
msgstr "pas compilé avec le support pour x86_64 32 bits"
-#: config/tc-i386.c:13159
+#: config/tc-i386.c:13271
msgid "32bit x86_64 is only supported for ELF"
msgstr "x86_64 32 bits est uniquement supporté avec ELF"
-#: config/tc-i386.c:13193 config/tc-i386.c:13281
+#: config/tc-i386.c:13305 config/tc-i386.c:13393
#, c-format
msgid "invalid -march= option: `%s'"
msgstr "option -march= invalide: « %s »"
-#: config/tc-i386.c:13291 config/tc-i386.c:13303
+#: config/tc-i386.c:13403 config/tc-i386.c:13415
#, c-format
msgid "invalid -mtune= option: `%s'"
msgstr "option -mtune= invalide: « %s »"
-#: config/tc-i386.c:13312
+#: config/tc-i386.c:13424
#, c-format
msgid "invalid -mmnemonic= option: `%s'"
msgstr "option -mmnemonic= invalide: « %s »"
-#: config/tc-i386.c:13321
+#: config/tc-i386.c:13433
#, c-format
msgid "invalid -msyntax= option: `%s'"
msgstr "option -msyntax= invalide: « %s »"
-#: config/tc-i386.c:13344
+#: config/tc-i386.c:13460
#, c-format
msgid "invalid -msse-check= option: `%s'"
msgstr "option -msse-check= invalide: « %s »"
-#: config/tc-i386.c:13355
+#: config/tc-i386.c:13471
#, c-format
msgid "invalid -moperand-check= option: `%s'"
msgstr "option -moperand-check= invalide: « %s »"
-#: config/tc-i386.c:13364
+#: config/tc-i386.c:13480
#, c-format
msgid "invalid -mavxscalar= option: `%s'"
msgstr "option -mavxscalar= invalide: « %s »"
-#: config/tc-i386.c:13373
+#: config/tc-i386.c:13489
#, c-format
msgid "invalid -mvexwig= option: `%s'"
msgstr "option -mvexwig= invalide: « %s »"
-#: config/tc-i386.c:13388
+#: config/tc-i386.c:13504
#, c-format
msgid "invalid -mevexlig= option: `%s'"
msgstr "option -mevexlig= invalide: « %s »"
-#: config/tc-i386.c:13401
+#: config/tc-i386.c:13517
#, c-format
msgid "invalid -mevexrcig= option: `%s'"
msgstr "option -mevexrcig= invalide: « %s »"
-#: config/tc-i386.c:13410
+#: config/tc-i386.c:13526
#, c-format
msgid "invalid -mevexwig= option: `%s'"
msgstr "option -mevexwig= invalide: « %s »"
-#: config/tc-i386.c:13425
+#: config/tc-i386.c:13541
#, c-format
msgid "invalid -momit-lock-prefix= option: `%s'"
msgstr "option -momit-lock-prefix= invalide: « %s »"
-#: config/tc-i386.c:13434
+#: config/tc-i386.c:13550
#, c-format
msgid "invalid -mfence-as-lock-add= option: `%s'"
msgstr "option -mfence-as-lock-add= invalide: « %s »"
-#: config/tc-i386.c:13443
+#: config/tc-i386.c:13559
#, c-format
msgid "invalid -mlfence-after-load= option: `%s'"
msgstr "option -mlfence-after-load= invalide: « %s »"
-#: config/tc-i386.c:13460
+#: config/tc-i386.c:13576
#, c-format
msgid "invalid -mlfence-before-indirect-branch= option: `%s'"
msgstr "option -mlfence-before-indirect-branch= invalide: « %s »"
-#: config/tc-i386.c:13474
+#: config/tc-i386.c:13590
#, c-format
msgid "invalid -mlfence-before-ret= option: `%s'"
msgstr "option -mlfence-before-ret= invalide: « %s »"
-#: config/tc-i386.c:13484
+#: config/tc-i386.c:13600
#, c-format
msgid "invalid -mrelax-relocations= option: `%s'"
msgstr "option -mrelax-relocations= invalide: « %s »"
-#: config/tc-i386.c:13513
+#: config/tc-i386.c:13629
#, c-format
msgid "invalid -malign-branch-boundary= value: %s"
msgstr "valeur de -malign-branch-boundary= invalide : %s"
-#: config/tc-i386.c:13527
+#: config/tc-i386.c:13643
#, c-format
msgid "invalid -malign-branch-prefix-size= value: %s"
msgstr "valeur de -malign-branch-prefix-size= invalide : %s"
-#: config/tc-i386.c:13554
+#: config/tc-i386.c:13670
#, c-format
msgid "invalid -malign-branch= option: `%s'"
msgstr "option -malign-branch= invalide: « %s »"
-#: config/tc-i386.c:13710
+#: config/tc-i386.c:13826
#, c-format
msgid ""
" -Qy, -Qn ignored\n"
@@ -8821,7 +8983,7 @@ msgstr ""
" -V afficher la version de l'assembleur\n"
" -k ignoré\n"
-#: config/tc-i386.c:13715
+#: config/tc-i386.c:13831
#, c-format
msgid ""
" -n Do not optimize code alignment\n"
@@ -8830,32 +8992,32 @@ msgstr ""
" -n ne pas optimiser l'alignement du code\n"
" -q ne pas produire d'avertissement\n"
-#: config/tc-i386.c:13719
+#: config/tc-i386.c:13835
#, c-format
msgid " -s ignored\n"
msgstr " -s ignoré\n"
-#: config/tc-i386.c:13724
+#: config/tc-i386.c:13840
#, c-format
msgid " --32/--64/--x32 generate 32bit/64bit/x32 object\n"
msgstr " --32/--64/--x32 générer un objet 32 bits/64 bits/x32\n"
-#: config/tc-i386.c:13727
+#: config/tc-i386.c:13843
#, c-format
msgid " --32/--64 generate 32bit/64bit object\n"
msgstr " --32/--64 générer un objet 32 bits/64 bits\n"
-#: config/tc-i386.c:13732
+#: config/tc-i386.c:13848
#, c-format
msgid " --divide do not treat `/' as a comment character\n"
msgstr " --divide ne traite pas « / » comme un caractère de commentaire\n"
-#: config/tc-i386.c:13735
+#: config/tc-i386.c:13851
#, c-format
msgid " --divide ignored\n"
msgstr " --divide ignoré\n"
-#: config/tc-i386.c:13738
+#: config/tc-i386.c:13854
#, c-format
msgid ""
" -march=CPU[,+EXTENSION...]\n"
@@ -8864,22 +9026,31 @@ msgstr ""
" -march=CPU[,+EXTENSION...]\n"
" générer du code pour CPU et EXTENSION, CPU est l'un de ceux-ci:\n"
-#: config/tc-i386.c:13742
+#: config/tc-i386.c:13858
#, c-format
msgid " EXTENSION is combination of:\n"
msgstr " EXTENSION est une combinaison de:\n"
-#: config/tc-i386.c:13745
+#: config/tc-i386.c:13861
#, c-format
msgid " -mtune=CPU optimize for CPU, CPU is one of:\n"
msgstr " -mtune=CPU optimiser pour CPU, CPU est l'un de ceux-ci:\n"
-#: config/tc-i386.c:13748
+#: config/tc-i386.c:13864
#, c-format
msgid " -msse2avx encode SSE instructions with VEX prefix\n"
msgstr " -msse2avx encoder les instructions SSE avec le préfixe VEX\n"
-#: config/tc-i386.c:13750
+#: config/tc-i386.c:13866
+#, c-format
+msgid ""
+" -muse-unaligned-vector-move\n"
+" encode aligned vector move as unaligned vector move\n"
+msgstr ""
+" -muse-unaligned-vector-move\n"
+" encoder le déplacement d'un vecteur aligné comme un déplacement d'un vecteur non aligné\n"
+
+#: config/tc-i386.c:13869
#, c-format
msgid ""
" -msse-check=[none|error|warning] (default: warning)\n"
@@ -8888,7 +9059,7 @@ msgstr ""
" -msse-check=[none|error|warning] (warning par défaut)\n"
" vérifier les instructions SSE\n"
-#: config/tc-i386.c:13753
+#: config/tc-i386.c:13872
#, c-format
msgid ""
" -moperand-check=[none|error|warning] (default: warning)\n"
@@ -8897,7 +9068,7 @@ msgstr ""
" -moperand-check=[none|error|warning] (warning par défaut)\n"
" vérifier la validité des combinaisons des opérandes\n"
-#: config/tc-i386.c:13756
+#: config/tc-i386.c:13875
#, c-format
msgid ""
" -mavxscalar=[128|256] (default: 128)\n"
@@ -8908,7 +9079,7 @@ msgstr ""
" encoder les instructions scalaires AVX avec une longueur de vecteur\n"
" spécifique\n"
-#: config/tc-i386.c:13760
+#: config/tc-i386.c:13879
#, c-format
msgid ""
" -mvexwig=[0|1] (default: 0)\n"
@@ -8919,7 +9090,7 @@ msgstr ""
" encoder les instructions VEX avec la valeur spécifique VEX.W\n"
" pour les instructions qui ignorent le bit EX.W\n"
-#: config/tc-i386.c:13764
+#: config/tc-i386.c:13883
#, c-format
msgid ""
" -mevexlig=[128|256|512] (default: 128)\n"
@@ -8930,7 +9101,7 @@ msgstr ""
" encoder les instructions scalaires EVEX avec une longueur de vecteur\n"
" spécifique\n"
-#: config/tc-i386.c:13768
+#: config/tc-i386.c:13887
#, c-format
msgid ""
" -mevexwig=[0|1] (default: 0)\n"
@@ -8941,7 +9112,7 @@ msgstr ""
" encoder les instructions EVEX avec la valeur spécifique EVEX.W\n"
" pour les instructions qui ignorent le bit EVEX.W\n"
-#: config/tc-i386.c:13772
+#: config/tc-i386.c:13891
#, c-format
msgid ""
" -mevexrcig=[rne|rd|ru|rz] (default: rne)\n"
@@ -8952,27 +9123,27 @@ msgstr ""
" encoder les instructions EVEX avec la valeur spécifique EVEX.RC\n"
" pour les instructions ignorées uniquement SAE\n"
-#: config/tc-i386.c:13776
+#: config/tc-i386.c:13895
#, c-format
msgid " -mmnemonic=[att|intel] "
msgstr " -mmnemonic=[att|intel] "
-#: config/tc-i386.c:13779
+#: config/tc-i386.c:13898
#, c-format
msgid "(default: att)\n"
msgstr "(att par défaut\n"
-#: config/tc-i386.c:13781
+#: config/tc-i386.c:13900
#, c-format
msgid "(default: intel)\n"
msgstr "(intel par défaut)\n"
-#: config/tc-i386.c:13782
+#: config/tc-i386.c:13901
#, c-format
msgid " use AT&T/Intel mnemonic\n"
msgstr " utiliser les mnémoniques AT&T/Intel\n"
-#: config/tc-i386.c:13784
+#: config/tc-i386.c:13903
#, c-format
msgid ""
" -msyntax=[att|intel] (default: att)\n"
@@ -8981,42 +9152,42 @@ msgstr ""
" -msyntax=[att|intel] (att par défaut)\n"
" utiliser la syntaxe AT&T/Intel\n"
-#: config/tc-i386.c:13787
+#: config/tc-i386.c:13906
#, c-format
msgid " -mindex-reg support pseudo index registers\n"
msgstr " -mindex-reg supporter les registres pseudo index\n"
-#: config/tc-i386.c:13789
+#: config/tc-i386.c:13908
#, c-format
msgid " -mnaked-reg don't require `%%' prefix for registers\n"
msgstr " -mnaked-reg n'exige pas le préfixe « %% » pour les registres\n"
-#: config/tc-i386.c:13791
+#: config/tc-i386.c:13910
#, c-format
msgid " -madd-bnd-prefix add BND prefix for all valid branches\n"
msgstr " -madd-bnd-prefix ajouter le préfix BND à tous les branchements valide\n"
-#: config/tc-i386.c:13794
+#: config/tc-i386.c:13913
#, c-format
msgid " -mshared disable branch optimization for shared code\n"
msgstr " -mshared désactiver l'optimisation de branche pour du code partagé\n"
-#: config/tc-i386.c:13796
+#: config/tc-i386.c:13915
#, c-format
msgid " -mx86-used-note=[no|yes] "
msgstr " -mx86-used-note=[no|yes] "
-#: config/tc-i386.c:13802
+#: config/tc-i386.c:13921
#, c-format
msgid " generate x86 used ISA and feature properties\n"
msgstr " générer les propriétés de fonctionnalités et ISA x86 utilisés\n"
-#: config/tc-i386.c:13806
+#: config/tc-i386.c:13925
#, c-format
msgid " -mbig-obj generate big object files\n"
msgstr " -mbig-obj générer des fichiers pour gros objets\n"
-#: config/tc-i386.c:13809
+#: config/tc-i386.c:13928
#, c-format
msgid ""
" -momit-lock-prefix=[no|yes] (default: no)\n"
@@ -9025,7 +9196,7 @@ msgstr ""
" -momit-lock-prefix=[no|yes] (no par défaut)\n"
" retirer tous les préfixes de verrous\n"
-#: config/tc-i386.c:13812
+#: config/tc-i386.c:13931
#, c-format
msgid ""
" -mfence-as-lock-add=[no|yes] (default: no)\n"
@@ -9036,17 +9207,17 @@ msgstr ""
" encoder lfence, mfence et sfence comme\n"
" lock addl $0x0, (%%{re}sp)\n"
-#: config/tc-i386.c:13816
+#: config/tc-i386.c:13935
#, c-format
msgid " -mrelax-relocations=[no|yes] "
msgstr " -mrelax-relocations=[no|yes] "
-#: config/tc-i386.c:13822
+#: config/tc-i386.c:13941
#, c-format
msgid " generate relax relocations\n"
msgstr " générer des réadressages relaxées\n"
-#: config/tc-i386.c:13824
+#: config/tc-i386.c:13943
#, c-format
msgid ""
" -malign-branch-boundary=NUM (default: 0)\n"
@@ -9055,7 +9226,7 @@ msgstr ""
" -malign-branch-boundary=NUM (défaut: 0)\n"
" aligner les branchements avant une frontière de NUM octets\n"
-#: config/tc-i386.c:13827
+#: config/tc-i386.c:13946
#, c-format
msgid ""
" -malign-branch=TYPE[+TYPE...] (default: jcc+fused+jmp)\n"
@@ -9068,7 +9239,7 @@ msgstr ""
" indirect\n"
" spécifier les types de branchements à aligner\n"
-#: config/tc-i386.c:13832
+#: config/tc-i386.c:13951
#, c-format
msgid ""
" -malign-branch-prefix-size=NUM (default: 5)\n"
@@ -9077,7 +9248,7 @@ msgstr ""
" -malign-branch-prefix-size=NUM (défaut: 5)\n"
" aligner les branchements avec NUM préfixes par instruction\n"
-#: config/tc-i386.c:13835
+#: config/tc-i386.c:13954
#, c-format
msgid ""
" -mbranches-within-32B-boundaries\n"
@@ -9086,7 +9257,7 @@ msgstr ""
" -mbranches-within-32B-boundaries\n"
" aligner les branchements avant une frontière de 32 octets\n"
-#: config/tc-i386.c:13838
+#: config/tc-i386.c:13957
#, c-format
msgid ""
" -mlfence-after-load=[no|yes] (default: no)\n"
@@ -9095,7 +9266,7 @@ msgstr ""
" -mlfence-after-load=[no|yes] (no par défaut)\n"
" générer lfence après chargmeent\n"
-#: config/tc-i386.c:13841
+#: config/tc-i386.c:13960
#, c-format
msgid ""
" -mlfence-before-indirect-branch=[none|all|register|memory] (default: none)\n"
@@ -9104,7 +9275,7 @@ msgstr ""
" -mlfence-before-indirect-branch=[none|all|register|memory] (par défaut: none)\n"
" générer lfence avant indirect près d'un branchement\n"
-#: config/tc-i386.c:13844
+#: config/tc-i386.c:13963
#, c-format
msgid ""
" -mlfence-before-ret=[none|or|not|shl|yes] (default: none)\n"
@@ -9113,683 +9284,679 @@ msgstr ""
" -mlfence-before-ret=[none|or|not|shl|yes] (par défaut: none)\n"
" générer lfence avant ret\n"
-#: config/tc-i386.c:13847
+#: config/tc-i386.c:13966
#, c-format
msgid " -mamd64 accept only AMD64 ISA [default]\n"
msgstr " -mamd64 accepter uniquement l'ISA AMD64 (par défaut)\n"
-#: config/tc-i386.c:13849
+#: config/tc-i386.c:13968
#, c-format
msgid " -mintel64 accept only Intel64 ISA\n"
msgstr " -mintel64 accepter uniquement l'ISA Intel64\n"
-#: config/tc-i386.c:13890
+#: config/tc-i386.c:14009
#, c-format
msgid "Intel MCU doesn't support `%s' architecture"
msgstr "Le MCU Intel ne supporte pas l'architecture « %s »"
-#: config/tc-i386.c:13958
+#: config/tc-i386.c:14077
msgid "Intel L1OM is 64bit only"
msgstr "Le L10M d'Intel est 64 bits uniquement"
-#: config/tc-i386.c:13964
+#: config/tc-i386.c:14083
msgid "Intel K1OM is 64bit only"
msgstr "Le K10M d'Intel est 64 bits uniquement"
-#: config/tc-i386.c:13970
+#: config/tc-i386.c:14089
msgid "Intel MCU is 32bit only"
msgstr "Le MCU d'Intel est 32 bits uniquement"
-#: config/tc-i386.c:14082
+#: config/tc-i386.c:14201
msgid "constant directive skips -mlfence-before-ret and -mlfence-before-indirect-branch"
msgstr "la directive constante passe outre -mlfence-before-ret et -mlfence-before-indirect-branch"
-#: config/tc-i386.c:14085
+#: config/tc-i386.c:14204
msgid "constant directive skips -mlfence-before-ret"
msgstr "la directive constante passe outre -mlfence-before-ret"
-#: config/tc-i386.c:14088
+#: config/tc-i386.c:14207
msgid "constant directive skips -mlfence-before-indirect-branch"
msgstr "la directive constante passe outre -mlfence-before-indirect-branch"
-#: config/tc-i386.c:14199
+#: config/tc-i386.c:14318
msgid "symbol size computation overflow"
msgstr "débordement lors du calcul de la taille du symbole"
-#: config/tc-i386.c:14273 config/tc-sparc.c:3852
+#: config/tc-i386.c:14392 config/tc-sparc.c:3852
#, c-format
msgid "can not do %d byte pc-relative relocation"
msgstr "ne peut faire un réadressage relatif au PC de %d octets"
-#: config/tc-i386.c:14291
+#: config/tc-i386.c:14410
#, c-format
msgid "can not do %d byte relocation"
msgstr "ne peut relocaliser %d octets"
-#: config/tc-i386.c:14359
+#: config/tc-i386.c:14478
#, c-format
msgid "cannot represent relocation type %s in x32 mode"
msgstr "ne peut représenter le type de réadressage %s en mode x32"
-#: config/tc-i386.c:14396 config/tc-s390.c:2605
+#: config/tc-i386.c:14515 config/tc-s390.c:2602
#, c-format
msgid "cannot represent relocation type %s"
msgstr "ne peut représenter le type de réadressage %s"
-#: config/tc-i386.c:14513
+#: config/tc-i386.c:14632
msgid "bad .section directive: want a,l,w,x,M,S,G,T in string"
msgstr "Directive .section erronée: nécessite a,l,w,x,M,S,G,T dans la chaîne"
-#: config/tc-i386.c:14516
+#: config/tc-i386.c:14635
msgid "bad .section directive: want a,w,x,M,S,G,T in string"
msgstr "Directive .section erronée: nécessite a,w,x,M,S,G,T dans la chaîne"
-#: config/tc-i386.c:14535
+#: config/tc-i386.c:14654
msgid ".largecomm supported only in 64bit mode, producing .comm"
msgstr ".largecomm supporté uniquement en mode 64 bits, .comm produit"
-#: config/tc-ia64.c:869
+#: config/tc-ia64.c:870
msgid "bad .section directive: want a,o,s,w,x,M,S,G,T in string"
msgstr "directive .section erronée: nécessite a,o,s,w,x,M,S,G,T dans la chaîne"
-#: config/tc-ia64.c:921
+#: config/tc-ia64.c:922
msgid "Size of frame exceeds maximum of 96 registers"
msgstr "La taille du cadre dépasse le maximum de 96 registres"
-#: config/tc-ia64.c:926
+#: config/tc-ia64.c:927
msgid "Size of rotating registers exceeds frame size"
msgstr "La taille des registres de rotation dépasse la taille du cadre"
-#: config/tc-ia64.c:1013
+#: config/tc-ia64.c:1014
msgid "Unwind directive not followed by an instruction."
msgstr "directive unwind n'est pas suivie d'une instruction."
-#: config/tc-ia64.c:1022 config/tc-ia64.c:7604
+#: config/tc-ia64.c:1023 config/tc-ia64.c:7597
msgid "qualifying predicate not followed by instruction"
msgstr "le prédicat qualifiant n'est pas suivi d'une instruction"
-#: config/tc-ia64.c:1070
+#: config/tc-ia64.c:1071
msgid "expected ',' after section name"
msgstr "« , » attendue après le nom de section"
-#: config/tc-ia64.c:1105
+#: config/tc-ia64.c:1106
msgid "expected ',' after symbol name"
msgstr "« , » attendue après le nom de symbole"
-#: config/tc-ia64.c:1129
+#: config/tc-ia64.c:1130
msgid "expected ',' after symbol size"
msgstr "« , » attendue après la taille du symbole"
-#: config/tc-ia64.c:1212 config/tc-ia64.c:1246
+#: config/tc-ia64.c:1213 config/tc-ia64.c:1247
msgid "record type is not valid"
msgstr "le type d'enregistrement n'est pas valable"
-#: config/tc-ia64.c:1315
+#: config/tc-ia64.c:1316
msgid "Invalid record type for P3 format."
msgstr "Type d'enregistrement invalide pour le format P3."
-#: config/tc-ia64.c:1351
+#: config/tc-ia64.c:1352
msgid "Invalid record type for format P6"
msgstr "Type d'enregistrement invalide pour le format P6."
-#: config/tc-ia64.c:1531 config/tc-ia64.c:1583
+#: config/tc-ia64.c:1532 config/tc-ia64.c:1584
msgid "Invalid record type for format B1"
msgstr "Type d'enregistrement invalide pour le format B1."
-#: config/tc-ia64.c:1616
+#: config/tc-ia64.c:1617
msgid "Invalid record type for format X1"
msgstr "Type d'enregistrement invalide pour le format X1."
-#: config/tc-ia64.c:1658
+#: config/tc-ia64.c:1659
msgid "Invalid record type for format X3"
msgstr "Type d'enregistrement invalide pour le format X3."
-#: config/tc-ia64.c:1696
+#: config/tc-ia64.c:1697
msgid "Previous .save incomplete"
msgstr ".save précédent incomplet"
-#: config/tc-ia64.c:2521
+#: config/tc-ia64.c:2522
msgid "spill_mask record unimplemented."
msgstr "enregistrement spill_mask non implémenté."
-#: config/tc-ia64.c:2578
+#: config/tc-ia64.c:2579
msgid "record_type_not_valid"
msgstr "type_enregistrement_invalide"
-#: config/tc-ia64.c:2662
+#: config/tc-ia64.c:2663
msgid "Ignoring attempt to spill beyond end of region"
msgstr "Ignore la tentative de déborder au delà de la fin de la région"
-#: config/tc-ia64.c:2721
+#: config/tc-ia64.c:2722
msgid "Only constant space allocation is supported"
msgstr "Seules les allocations à taille constante sont supportées"
-#: config/tc-ia64.c:2735
+#: config/tc-ia64.c:2736
msgid "Only constant offsets are supported"
msgstr "Seuls des offsets constants sont supportés"
-#: config/tc-ia64.c:2759
+#: config/tc-ia64.c:2760
msgid "Section switching in code is not supported."
msgstr "Commutation de section dans le code n'est pas supporté."
-#: config/tc-ia64.c:2801
+#: config/tc-ia64.c:2802
msgid "Insn slot not set in unwind record."
msgstr "Emplacement Insn pas mis dans l'enregistrement unwind."
-#: config/tc-ia64.c:2875
+#: config/tc-ia64.c:2876
msgid "frgr_mem record before region record!"
msgstr "enregistrement frgr_mem avant l'enregistrement de région !"
-#: config/tc-ia64.c:2886
+#: config/tc-ia64.c:2887
msgid "fr_mem record before region record!"
msgstr "enregistrement fr_mem avant l'enregistrement de région !"
-#: config/tc-ia64.c:2895
+#: config/tc-ia64.c:2896
msgid "gr_mem record before region record!"
msgstr "enregistrement gr_mem avant l'enregistrement de région !"
-#: config/tc-ia64.c:2904
+#: config/tc-ia64.c:2905
msgid "br_mem record before region record!"
msgstr "enregistrement br_mem avant l'enregistrement de région !"
-#: config/tc-ia64.c:2914
+#: config/tc-ia64.c:2915
msgid "gr_gr record before region record!"
msgstr "enregistrement gr_gr avant l'enregistrement de région !"
-#: config/tc-ia64.c:2922
+#: config/tc-ia64.c:2923
msgid "br_gr record before region record!"
msgstr "enregistrement br_gr avant l'enregistrement de région !"
-#: config/tc-ia64.c:3040
+#: config/tc-ia64.c:3041
#, c-format
msgid "First operand to .%s must be a predicate"
msgstr "Le premier opérande de .%s doit être un prédicat"
-#: config/tc-ia64.c:3044
+#: config/tc-ia64.c:3045
#, c-format
msgid "Pointless use of p0 as first operand to .%s"
msgstr "Utilisation inutile de p0 comme premier opérande de .%s"
-#: config/tc-ia64.c:3100
+#: config/tc-ia64.c:3101
#, c-format
msgid "Operand %d to .%s must be a preserved register"
msgstr "L'opérande %d de .%s doit être un registre préservé"
-#: config/tc-ia64.c:3136
+#: config/tc-ia64.c:3137
#, c-format
msgid "Operand %d to .%s must be a writable register"
msgstr "L'opérande %d de .%s doit être un registre avec accès en écriture"
-#: config/tc-ia64.c:3160
+#: config/tc-ia64.c:3161
#, c-format
msgid "Radix `%s' unsupported or invalid"
msgstr "Radical « %s » non supporté ou invalide"
-#: config/tc-ia64.c:3190 config/tc-ia64.c:3195
+#: config/tc-ia64.c:3191 config/tc-ia64.c:3196
#, c-format
msgid ".%s outside of %s"
msgstr ".%s en dehors de %s"
-#: config/tc-ia64.c:3281
+#: config/tc-ia64.c:3282
msgid "Tags on unwind pseudo-ops aren't supported, yet"
msgstr "Les étiquettes sur les pseudo-op unwind ne sont pas encore supportées"
-#: config/tc-ia64.c:3303
+#: config/tc-ia64.c:3304
msgid "First operand to .fframe must be a constant"
msgstr "Le premier opérande de .fframe doit être une constante"
-#: config/tc-ia64.c:3323
+#: config/tc-ia64.c:3324
msgid "First operand to .vframe must be a general register"
msgstr "Le premier opérande de .vframe doit être un registre général"
-#: config/tc-ia64.c:3331
+#: config/tc-ia64.c:3332
msgid "Operand of .vframe contradicts .prologue"
msgstr "L'opérande de .vframe contredit le .prologue"
-#: config/tc-ia64.c:3341
+#: config/tc-ia64.c:3342
msgid ".vframepsp is meaningless, assuming .vframesp was meant"
msgstr ".vframepsp n'a pas de sens, je suppose que c'est .vframesp qui était prévu"
-#: config/tc-ia64.c:3349
+#: config/tc-ia64.c:3350
msgid "Operand to .vframesp must be a constant (sp-relative offset)"
msgstr "L'opérande de .vframesp doit être une constante (offset relatif à sp)"
-#: config/tc-ia64.c:3376
+#: config/tc-ia64.c:3377
msgid "First operand to .save not a register"
msgstr "Le premier opérande de .save n'est pas un registre"
-#: config/tc-ia64.c:3382
+#: config/tc-ia64.c:3383
msgid "Second operand to .save not a valid register"
msgstr "Le second opérande de .save n'est pas un registre valide"
-#: config/tc-ia64.c:3413 config/tc-ia64.c:3424 config/tc-ia64.c:3432
+#: config/tc-ia64.c:3414 config/tc-ia64.c:3425 config/tc-ia64.c:3433
msgid "Second operand of .save contradicts .prologue"
msgstr "Le second opérande de .save contredit le .prologue"
-#: config/tc-ia64.c:3439
+#: config/tc-ia64.c:3440
msgid "First operand to .save not a valid register"
msgstr "Le premier opérande de .save n'est pas un registre valide"
-#: config/tc-ia64.c:3457
+#: config/tc-ia64.c:3458
msgid "First operand to .restore must be stack pointer (sp)"
msgstr "Le premier opérande de .restore doit être le pointeur de pile (sp)"
-#: config/tc-ia64.c:3466
+#: config/tc-ia64.c:3467
msgid "Second operand to .restore must be a constant >= 0"
msgstr "Le second opérande de .restore doit être une constante >= 0"
-#: config/tc-ia64.c:3476
+#: config/tc-ia64.c:3477
#, c-format
msgid "Epilogue count of %lu exceeds number of nested prologues (%u)"
msgstr "Le décompte des épilogues de %lu dépasse le nombre de prologues imbriqués (%u)"
-#: config/tc-ia64.c:3562
+#: config/tc-ia64.c:3563
#, c-format
msgid "Illegal section name `%s' (causes unwind section name clash)"
msgstr "Nom de section illégal « %s » (provoque une collision des noms des sections unwind)"
-#: config/tc-ia64.c:3737
+#: config/tc-ia64.c:3738
msgid "First operand to .altrp not a valid branch register"
msgstr "Le premier opérande de .altrp n'est pas un registre de branchement valide"
-#: config/tc-ia64.c:3766
+#: config/tc-ia64.c:3767
#, c-format
msgid "First operand to .%s not a register"
msgstr "Le premier opérande de .%s n'est pas un registre"
-#: config/tc-ia64.c:3771
+#: config/tc-ia64.c:3772
#, c-format
msgid "Second operand to .%s not a constant"
msgstr "Le second opérande de .%s n'est pas une constante"
-#: config/tc-ia64.c:3838
+#: config/tc-ia64.c:3839
#, c-format
msgid "First operand to .%s not a valid register"
msgstr "Le premier opérande de .%s n'est pas un registre valide"
-#: config/tc-ia64.c:3861
+#: config/tc-ia64.c:3862
msgid "First operand to .save.g must be a positive 4-bit constant"
msgstr "Le premier opérande de .save.g doit être une constante positive de 4 bits"
-#: config/tc-ia64.c:3874
+#: config/tc-ia64.c:3875
msgid "Second operand to .save.g must be a general register"
msgstr "Le second opérande de .save.g doit être un registre général"
-#: config/tc-ia64.c:3879
+#: config/tc-ia64.c:3880
#, c-format
msgid "Second operand to .save.g must be the first of %d general registers"
msgstr "Le second opérande de .save.g doit être le premier des %d registres généraux"
-#: config/tc-ia64.c:3902
+#: config/tc-ia64.c:3903
msgid "Operand to .save.f must be a positive 20-bit constant"
msgstr "L'opérande de .save.f doit être une constante positive de 20 bits"
-#: config/tc-ia64.c:3925
+#: config/tc-ia64.c:3926
msgid "First operand to .save.b must be a positive 5-bit constant"
msgstr "Le premier opérande de .save.b doit être une constante positive de 5 bits"
-#: config/tc-ia64.c:3938
+#: config/tc-ia64.c:3939
msgid "Second operand to .save.b must be a general register"
msgstr "Le second opérande de .save.b doit être un registre général"
-#: config/tc-ia64.c:3943
+#: config/tc-ia64.c:3944
#, c-format
msgid "Second operand to .save.b must be the first of %d general registers"
msgstr "Le second opérande de .save.b doit être le premier des %d registres généraux"
-#: config/tc-ia64.c:3969
+#: config/tc-ia64.c:3970
msgid "First operand to .save.gf must be a non-negative 4-bit constant"
msgstr "Le premier opérande de .save.gf doit être une constante non négative de 4 bits"
-#: config/tc-ia64.c:3977
+#: config/tc-ia64.c:3978
msgid "Second operand to .save.gf must be a non-negative 20-bit constant"
msgstr "Le second opérande de .save.gf doit être une constante non négative de 20 bits"
-#: config/tc-ia64.c:3985
+#: config/tc-ia64.c:3986
msgid "Operands to .save.gf may not be both zero"
msgstr "Les opérandes de .save.gf ne peuvent pas être tous les deux à zéro"
-#: config/tc-ia64.c:4002
+#: config/tc-ia64.c:4003
msgid "Operand to .spill must be a constant"
msgstr "L'opérande de .spill doit être une constante"
-#: config/tc-ia64.c:4071
+#: config/tc-ia64.c:4072
#, c-format
msgid "Operand %d to .%s must be a constant"
msgstr "L'opérande %d de .%s doit être une constante"
-#: config/tc-ia64.c:4092
+#: config/tc-ia64.c:4093
#, c-format
msgid "Missing .label_state %ld"
msgstr ".label_state %ld manquant"
-#: config/tc-ia64.c:4146
+#: config/tc-ia64.c:4147
msgid "Operand to .label_state must be a constant"
msgstr "L'opérande de .label_state doit être une constante"
-#: config/tc-ia64.c:4165
+#: config/tc-ia64.c:4166
msgid "Operand to .copy_state must be a constant"
msgstr "L'opérande de .copy_state doit être une constante"
-#: config/tc-ia64.c:4188
+#: config/tc-ia64.c:4189
msgid "First operand to .unwabi must be a constant"
msgstr "Le premier opérande de .unwabi doit être une constante"
-#: config/tc-ia64.c:4194
+#: config/tc-ia64.c:4195
msgid "Second operand to .unwabi must be a constant"
msgstr "Le second opérande de .unwabi doit être une constante"
-#: config/tc-ia64.c:4229
+#: config/tc-ia64.c:4230
msgid "Missing .endp after previous .proc"
msgstr ".endp manquant après la déclaration .proc précédente"
-#: config/tc-ia64.c:4247
+#: config/tc-ia64.c:4248
msgid "Empty argument of .proc"
msgstr "Argument vide dans .proc"
-#: config/tc-ia64.c:4252
+#: config/tc-ia64.c:4253
#, c-format
msgid "`%s' was already defined"
msgstr "« %s » a déjà été défini"
-#: config/tc-ia64.c:4295
+#: config/tc-ia64.c:4296
msgid "Initial .body should precede any instructions"
msgstr "Le .body initial doit précéder toute instruction"
-#: config/tc-ia64.c:4314
+#: config/tc-ia64.c:4315
msgid ".prologue within prologue"
msgstr ".prologue à l'intérieur d'un prologue"
-#: config/tc-ia64.c:4319
+#: config/tc-ia64.c:4320
msgid "Initial .prologue should precede any instructions"
msgstr "Le .prologue initial doit précéder toute instruction"
-#: config/tc-ia64.c:4329
+#: config/tc-ia64.c:4330
msgid "First operand to .prologue must be a positive 4-bit constant"
msgstr "Le premier opérande de .prologue doit être une constante positive de 4 bits"
-#: config/tc-ia64.c:4331
+#: config/tc-ia64.c:4332
msgid "Pointless use of zero first operand to .prologue"
msgstr "Utilisation inutile de zéro premier opérande de .prologue"
-#: config/tc-ia64.c:4347
+#: config/tc-ia64.c:4348
msgid "Using a constant as second operand to .prologue is deprecated"
msgstr "L'utilisation d'une constante comme second opérande de .prologue est dépréciée"
-#: config/tc-ia64.c:4353
+#: config/tc-ia64.c:4354
msgid "Second operand to .prologue must be a general register"
msgstr "Le second opérande de .prologue doit être un registre général"
-#: config/tc-ia64.c:4358
+#: config/tc-ia64.c:4359
#, c-format
msgid "Second operand to .prologue must be the first of %d general registers"
msgstr "Le second opérande de .prologue doit être le premier des %d registres généraux"
-#: config/tc-ia64.c:4471
+#: config/tc-ia64.c:4472
#, c-format
msgid "`%s' was not defined within procedure"
msgstr "« %s » n'a pas été défini à l'intérieur d'une procédure"
-#: config/tc-ia64.c:4507
+#: config/tc-ia64.c:4508
msgid "Empty argument of .endp"
msgstr "Argument vide dans .endp"
-#: config/tc-ia64.c:4521
+#: config/tc-ia64.c:4522
#, c-format
msgid "`%s' was not specified with previous .proc"
msgstr "« %s » n'a pas été spécifié avec le .proc précédent"
-#: config/tc-ia64.c:4536
+#: config/tc-ia64.c:4537
#, c-format
msgid "`%s' should be an operand to this .endp"
msgstr "« %s » devrait être un opérande de ce .endp"
-#: config/tc-ia64.c:4577 config/tc-ia64.c:4898 config/tc-ia64.c:5204
+#: config/tc-ia64.c:4578 config/tc-ia64.c:4891 config/tc-ia64.c:5197
msgid "Comma expected"
msgstr "Virgule attendue"
-#: config/tc-ia64.c:4617
+#: config/tc-ia64.c:4618
msgid "Expected '['"
msgstr "« [ » attendu"
-#: config/tc-ia64.c:4626 config/tc-ia64.c:7738
+#: config/tc-ia64.c:4627 config/tc-ia64.c:7731
msgid "Expected ']'"
msgstr "« ] » attendu"
-#: config/tc-ia64.c:4631
+#: config/tc-ia64.c:4632
msgid "Number of elements must be positive"
msgstr "Le nombre d'éléments doit être positif"
-#: config/tc-ia64.c:4642
+#: config/tc-ia64.c:4643
#, c-format
msgid "Used more than the declared %d rotating registers"
msgstr "A utilisé plus que les %d registres rotatifs déclarés"
-#: config/tc-ia64.c:4650
+#: config/tc-ia64.c:4651
msgid "Used more than the available 96 rotating registers"
msgstr "A utilisé plus que les 96 registres rotatifs disponibles"
-#: config/tc-ia64.c:4657
+#: config/tc-ia64.c:4658
msgid "Used more than the available 48 rotating registers"
msgstr "A utilisé plus que les 48 registres rotatifs disponibles"
-#: config/tc-ia64.c:4685
+#: config/tc-ia64.c:4686
#, c-format
msgid "Attempt to redefine register set `%s'"
msgstr "Tentative de redéfinition de l'ensemble de registres « %s »"
-#: config/tc-ia64.c:4750
+#: config/tc-ia64.c:4751
#, c-format
msgid "Unknown psr option `%s'"
msgstr "Option psr inconnue « %s »"
-#: config/tc-ia64.c:4784
-msgid "Missing section name"
-msgstr "Nom de section manquant"
-
-#: config/tc-ia64.c:4793
+#: config/tc-ia64.c:4786
msgid "Comma expected after section name"
msgstr "Virgule attendue après le nom de section"
-#: config/tc-ia64.c:4804
+#: config/tc-ia64.c:4797
msgid "Creating sections with .xdataN/.xrealN/.xstringZ is deprecated."
msgstr "Création de sections avec .xdataN/.xrealN/.xstringZ est dépréciée."
-#: config/tc-ia64.c:4893
+#: config/tc-ia64.c:4886
msgid "Register name expected"
msgstr "Nom de registre attendu"
-#: config/tc-ia64.c:4906
+#: config/tc-ia64.c:4899
msgid "Register value annotation ignored"
msgstr "Annotation de valeur de registre ignorée"
-#: config/tc-ia64.c:4945
+#: config/tc-ia64.c:4938
msgid "Directive invalid within a bundle"
msgstr "Directive invalide à l'intérieur d'un paquet"
-#: config/tc-ia64.c:5039
+#: config/tc-ia64.c:5032
msgid "Missing predicate relation type"
msgstr "Type de relation de prédicat manquant"
-#: config/tc-ia64.c:5045
+#: config/tc-ia64.c:5038
msgid "Unrecognized predicate relation type"
msgstr "Type de relation de prédicat non reconnu"
-#: config/tc-ia64.c:5091
+#: config/tc-ia64.c:5084
msgid "Bad register range"
msgstr "Gamme de registre erronée"
-#: config/tc-ia64.c:5100 config/tc-ia64.c:7684
+#: config/tc-ia64.c:5093 config/tc-ia64.c:7677
msgid "Predicate register expected"
msgstr "Registre de prédicat attendu"
-#: config/tc-ia64.c:5105
+#: config/tc-ia64.c:5098
msgid "Duplicate predicate register ignored"
msgstr "Prédicat de registre en double ignoré"
-#: config/tc-ia64.c:5121
+#: config/tc-ia64.c:5114
msgid "Predicate source and target required"
msgstr "Prédicat source et cible requis"
-#: config/tc-ia64.c:5123 config/tc-ia64.c:5135
+#: config/tc-ia64.c:5116 config/tc-ia64.c:5128
msgid "Use of p0 is not valid in this context"
msgstr "Utilisation de p0 n'est pas valide dans ce contexte"
-#: config/tc-ia64.c:5130
+#: config/tc-ia64.c:5123
msgid "At least two PR arguments expected"
msgstr "Au moins deux arguments PR attendus"
-#: config/tc-ia64.c:5144
+#: config/tc-ia64.c:5137
msgid "At least one PR argument expected"
msgstr "Au moins un argument PR attendu"
-#: config/tc-ia64.c:5176
+#: config/tc-ia64.c:5169
#, c-format
msgid "duplicate entry hint %s"
msgstr "indice d'entrée %s en double"
#. FIXME -- need 62-bit relocation type
-#: config/tc-ia64.c:5652
+#: config/tc-ia64.c:5645
msgid "62-bit relocation not yet implemented"
msgstr "Réadressage 62 bits n'est pas encore implémenté"
#. XXX technically, this is wrong: we should not be issuing warning
#. messages until we're sure this instruction pattern is going to
#. be used!
-#: config/tc-ia64.c:5738
+#: config/tc-ia64.c:5731
msgid "lower 16 bits of mask ignored"
msgstr "16 bits inférieurs du masque sont ignorés"
-#: config/tc-ia64.c:5967
+#: config/tc-ia64.c:5960
msgid "stride must be a multiple of 64; lower 6 bits ignored"
msgstr "le pas doit être un multiple de 64, les 6 bits inférieurs sont ignorés"
-#: config/tc-ia64.c:6085
+#: config/tc-ia64.c:6078
msgid "Expected separator `='"
msgstr "Séparateur « = » attendu"
-#: config/tc-ia64.c:6121
+#: config/tc-ia64.c:6114
msgid "Duplicate equal sign (=) in instruction"
msgstr "Signe égal (=) en double dans l'instruction"
-#: config/tc-ia64.c:6128
+#: config/tc-ia64.c:6121
#, c-format
msgid "Illegal operand separator `%c'"
msgstr "Séparateur d'opérande « %c » illégal"
-#: config/tc-ia64.c:6243
+#: config/tc-ia64.c:6236
#, c-format
msgid "Operand %u of `%s' should be %s"
msgstr "L'opérande %u de « %s » devrait être %s"
-#: config/tc-ia64.c:6247
+#: config/tc-ia64.c:6240
msgid "Wrong number of output operands"
msgstr "Nombre d'opérandes de sortie erroné"
-#: config/tc-ia64.c:6249
+#: config/tc-ia64.c:6242
msgid "Wrong number of input operands"
msgstr "Nombre d'opérandes d'entrée erroné"
-#: config/tc-ia64.c:6251
+#: config/tc-ia64.c:6244
msgid "Operand mismatch"
msgstr "Opérandes ne concordent pas"
-#: config/tc-ia64.c:6333
+#: config/tc-ia64.c:6326
#, c-format
msgid "Invalid use of `%c%d' as output operand"
msgstr "Utilisation invalide de « %c%d » en tant que opérande de sortie"
-#: config/tc-ia64.c:6336
+#: config/tc-ia64.c:6329
#, c-format
msgid "Invalid use of `r%d' as base update address operand"
msgstr "Utilisation invalide de « r%d » en tant opérande de mise à jour de base de l'adresse"
-#: config/tc-ia64.c:6360
+#: config/tc-ia64.c:6353
#, c-format
msgid "Invalid duplicate use of `%c%d'"
msgstr "Utilisation redondante de « %c%d » n'est pas permise"
-#: config/tc-ia64.c:6367
+#: config/tc-ia64.c:6360
#, c-format
msgid "Invalid simultaneous use of `f%d' and `f%d'"
msgstr "Utilisation simultanée de « f%d » et « f%d » n'est pas permise"
-#: config/tc-ia64.c:6373
+#: config/tc-ia64.c:6366
#, c-format
msgid "Dangerous simultaneous use of `f%d' and `f%d'"
msgstr "Utilisation simultanée de « f%d » et « f%d » est dangereuse"
-#: config/tc-ia64.c:6417
+#: config/tc-ia64.c:6410
msgid "Value truncated to 62 bits"
msgstr "Valeur tronquée à 62 bits"
-#: config/tc-ia64.c:6485
+#: config/tc-ia64.c:6478
#, c-format
msgid "Bad operand value: %s"
msgstr "Mauvaise valeur de l'opérande: %s"
#. Give an error if a frag containing code is not aligned to a 16 byte
#. boundary.
-#: config/tc-ia64.c:6560 config/tc-ia64.h:177
+#: config/tc-ia64.c:6553 config/tc-ia64.h:177
msgid "instruction address is not a multiple of 16"
msgstr "l'adresse de l'instruction n'est pas un multiple de 16"
-#: config/tc-ia64.c:6628
+#: config/tc-ia64.c:6621
#, c-format
msgid "`%s' must be last in bundle"
msgstr "« %s » doit être le dernier dans le paquet"
-#: config/tc-ia64.c:6660
+#: config/tc-ia64.c:6653
#, c-format
msgid "Internal error: don't know how to force %s to end of instruction group"
msgstr "Erreur interne: je ne sais pas comment forcer %s à la fin du groupe d'instructions"
-#: config/tc-ia64.c:6673
+#: config/tc-ia64.c:6666
#, c-format
msgid "`%s' must be last in instruction group"
msgstr "« %s » doit être le dernier dans le groupe d'instructions"
-#: config/tc-ia64.c:6703
+#: config/tc-ia64.c:6696
msgid "Label must be first in a bundle"
msgstr "L'étiquette doit être la première dans un paquet"
-#: config/tc-ia64.c:6780
+#: config/tc-ia64.c:6773
msgid "hint in B unit may be treated as nop"
msgstr "hint dans une unité B pourrait être traité comme un nop"
-#: config/tc-ia64.c:6791
+#: config/tc-ia64.c:6784
msgid "hint in B unit can't be used"
msgstr "hint ne peut pas être utilisé dans une unité B"
-#: config/tc-ia64.c:6805
+#: config/tc-ia64.c:6798
msgid "emit_one_bundle: unexpected dynamic op"
msgstr "emit_one_bundle: opérande dynamique inattendu"
-#: config/tc-ia64.c:6945
+#: config/tc-ia64.c:6938
#, c-format
msgid "`%s' does not fit into %s template"
msgstr "« %s » n'entre pas dans le modèle %s"
-#: config/tc-ia64.c:6960
+#: config/tc-ia64.c:6953
#, c-format
msgid "`%s' does not fit into bundle"
msgstr "« %s » n'entre pas dans le paquet"
-#: config/tc-ia64.c:6972
+#: config/tc-ia64.c:6965
#, c-format
msgid "`%s' can't go in %s of %s template"
msgstr "« %s » ne peut pas aller dans %s du modèle %s"
-#: config/tc-ia64.c:6978
+#: config/tc-ia64.c:6971
msgid "Missing '}' at end of file"
msgstr "« } » manquante à la fin du fichier"
-#: config/tc-ia64.c:7125
+#: config/tc-ia64.c:7118
#, c-format
msgid "Unrecognized option '-x%s'"
msgstr "Option non reconnue « -x%s »"
-#: config/tc-ia64.c:7152
+#: config/tc-ia64.c:7145
msgid ""
"IA-64 options:\n"
" --mconstant-gp\t mark output file as using the constant-GP model\n"
@@ -9823,7 +9990,7 @@ msgstr ""
" la vérification des violations de dépendances\n"
#. Note for translators: "automagically" can be translated as "automatically" here.
-#: config/tc-ia64.c:7169
+#: config/tc-ia64.c:7162
msgid ""
" -xauto\t\t automagically remove dependency violations (default)\n"
" -xnone\t\t turn off dependency violation checking\n"
@@ -9840,210 +10007,210 @@ msgstr ""
" la vérification des violations de dépendances\n"
" -xdebugx débug du vérificateur des violations des dépendances et active\n"
-#: config/tc-ia64.c:7184
+#: config/tc-ia64.c:7177
msgid "--gstabs is not supported for ia64"
msgstr "--gstabs n'est pas supporté pour ia64"
-#: config/tc-ia64.c:7619
+#: config/tc-ia64.c:7612
msgid "Explicit stops are ignored in auto mode"
msgstr "Les arrêts explicites sont ignorés en mode auto"
-#: config/tc-ia64.c:7628
+#: config/tc-ia64.c:7621
msgid "Found '{' when manual bundling is already turned on"
msgstr "« { » trouvé alors que le paquetage manuel est déjà activé"
-#: config/tc-ia64.c:7641
+#: config/tc-ia64.c:7634
msgid "Found '{' after explicit switch to automatic mode"
msgstr "« { » trouvée après un passage explicite en mode automatique"
-#: config/tc-ia64.c:7647
+#: config/tc-ia64.c:7640
msgid "Found '}' when manual bundling is off"
msgstr "« } » trouvée alors que le paquetage manuel est désactivé"
-#: config/tc-ia64.c:7674
+#: config/tc-ia64.c:7667
msgid "Expected ')'"
msgstr "« ) » attendue"
-#: config/tc-ia64.c:7679
+#: config/tc-ia64.c:7672
msgid "Qualifying predicate expected"
msgstr "Prédicat qualifiant attendu"
-#: config/tc-ia64.c:7698
+#: config/tc-ia64.c:7691
msgid "Tag must come before qualifying predicate."
msgstr "L'étiquette doit venir avant le prédicat qualifiant."
-#: config/tc-ia64.c:7727
+#: config/tc-ia64.c:7720
msgid "Expected ':'"
msgstr "« : » attendu"
-#: config/tc-ia64.c:7743
+#: config/tc-ia64.c:7736
msgid "Tag name expected"
msgstr "Nom d'étiquette attendu"
-#: config/tc-ia64.c:7844
+#: config/tc-ia64.c:7838
msgid "Rotating register index must be a non-negative constant"
msgstr "L'index du registre rotatif doit être une constante non négative"
-#: config/tc-ia64.c:7849
+#: config/tc-ia64.c:7843
#, c-format
msgid "Index out of range 0..%u"
msgstr "Index hors de la gamme 0..%u"
-#: config/tc-ia64.c:7861
+#: config/tc-ia64.c:7855
msgid "Indirect register index must be a general register"
msgstr "L'index du registre indirect doit être un registre général"
-#: config/tc-ia64.c:7870
+#: config/tc-ia64.c:7864
msgid "Index can only be applied to rotating or indirect registers"
msgstr "L'index peut uniquement être appliqué aux registres rotatifs ou indirects"
-#: config/tc-ia64.c:7906 config/tc-xstormy16.c:145
+#: config/tc-ia64.c:7900 config/tc-xstormy16.c:145
msgid "Expected '('"
msgstr "« ( » attendu"
-#: config/tc-ia64.c:7914 config/tc-pdp11.c:466 config/tc-pdp11.c:530
+#: config/tc-ia64.c:7908 config/tc-pdp11.c:466 config/tc-pdp11.c:530
#: config/tc-pdp11.c:564 config/tc-tilegx.c:1044 config/tc-tilepro.c:932
#: config/tc-xstormy16.c:154
msgid "Missing ')'"
msgstr "« ) » manquante"
-#: config/tc-ia64.c:7932 config/tc-xstormy16.c:161
+#: config/tc-ia64.c:7926 config/tc-xstormy16.c:161
msgid "Not a symbolic expression"
msgstr "Pas une expression symbolique"
-#: config/tc-ia64.c:7937 config/tc-ia64.c:7951
+#: config/tc-ia64.c:7931 config/tc-ia64.c:7945
msgid "Illegal combination of relocation functions"
msgstr "Combinaison illégale de fonctions de réadressage"
-#: config/tc-ia64.c:8040
+#: config/tc-ia64.c:8034
msgid "No current frame"
msgstr "Pas de cadre actif"
-#: config/tc-ia64.c:8042
+#: config/tc-ia64.c:8036
#, c-format
msgid "Register number out of range 0..%u"
msgstr "Numéro de registre hors de la gamme 0..%u"
-#: config/tc-ia64.c:8081
+#: config/tc-ia64.c:8075
msgid "Standalone `#' is illegal"
msgstr "« # » seul est illégal"
-#: config/tc-ia64.c:8084
+#: config/tc-ia64.c:8078
msgid "Redundant `#' suffix operators"
msgstr "Opérateurs de suffixe « # » redondant"
-#: config/tc-ia64.c:8242
+#: config/tc-ia64.c:8236
#, c-format
msgid "Unhandled dependency %s for %s (%s), note %d"
msgstr "Dépendance non traitée %s pour %s (%s), noter %d"
-#: config/tc-ia64.c:9555
+#: config/tc-ia64.c:9549
#, c-format
msgid "Unrecognized dependency specifier %d\n"
msgstr "Spécificateur de dépendance non reconnu %d\n"
-#: config/tc-ia64.c:10425
+#: config/tc-ia64.c:10419
msgid "Only the first path encountering the conflict is reported"
msgstr "Seul le premier chemin où le conflit est rencontré est rapporté"
-#: config/tc-ia64.c:10427
+#: config/tc-ia64.c:10421
msgid "This is the location of the conflicting usage"
msgstr "Voici la position de l'usage conflictuel"
-#: config/tc-ia64.c:10689
+#: config/tc-ia64.c:10683
#, c-format
msgid "Unknown opcode `%s'"
msgstr "Opcode inconnu « %s »"
-#: config/tc-ia64.c:10767
+#: config/tc-ia64.c:10761
#, c-format
msgid "AR %d can only be accessed by %c-unit"
msgstr "AR %d uniquement accessible par unité %c"
-#: config/tc-ia64.c:10779
+#: config/tc-ia64.c:10773
msgid "hint.b may be treated as nop"
msgstr "hint.b pourrait être traité comme un nop"
-#: config/tc-ia64.c:10782
+#: config/tc-ia64.c:10776
msgid "hint.b shouldn't be used"
msgstr "hint.b ne devrait pas être utilisé"
-#: config/tc-ia64.c:10821
+#: config/tc-ia64.c:10815
#, c-format
msgid "`%s' cannot be predicated"
msgstr "« %s » ne peu pas être transformé en prédicat"
-#: config/tc-ia64.c:10893
+#: config/tc-ia64.c:10888
msgid "Closing bracket missing"
msgstr "Accolade fermante manquante"
-#: config/tc-ia64.c:10902
+#: config/tc-ia64.c:10897
msgid "Index must be a general register"
msgstr "L'index doit être un registre général"
-#: config/tc-ia64.c:11067
+#: config/tc-ia64.c:11062
#, c-format
msgid "Unsupported fixup size %d"
msgstr "Taille du correctif %d non supportée"
#. This should be an error, but since previously there wasn't any
#. diagnostic here, don't make it fail because of this for now.
-#: config/tc-ia64.c:11339
+#: config/tc-ia64.c:11334
#, c-format
msgid "Cannot express %s%d%s relocation"
msgstr "Ne peut exprimer le réadressage %s%d%s"
-#: config/tc-ia64.c:11358
+#: config/tc-ia64.c:11353
msgid "No addend allowed in @fptr() relocation"
msgstr "Pas d'addende autorisé dans le réadressage @fptr()"
-#: config/tc-ia64.c:11397
+#: config/tc-ia64.c:11392
msgid "integer operand out of range"
msgstr "Opérande entier hors limite"
-#: config/tc-ia64.c:11464
+#: config/tc-ia64.c:11459
#, c-format
msgid "%s must have a constant value"
msgstr "%s doit avoir une valeur constante"
-#: config/tc-ia64.c:11484
+#: config/tc-ia64.c:11479
msgid "cannot resolve @slotcount parameter"
msgstr "ne peut résoudre le paramètre @slotcount"
-#: config/tc-ia64.c:11517
+#: config/tc-ia64.c:11512
msgid "invalid @slotcount value"
msgstr "valeur @slotcount invalide"
-#: config/tc-ia64.c:11554 config/tc-z8k.c:1388
+#: config/tc-ia64.c:11549 config/tc-z8k.c:1388
#, c-format
msgid "Cannot represent %s relocation in object file"
msgstr "Ne peut représenter le réadressage « %s » dans le fichier objet"
-#: config/tc-ia64.c:11663
+#: config/tc-ia64.c:11658
msgid "Can't add stop bit to mark end of instruction group"
msgstr "Ne peut ajouter le bit de stop pour marquer la fin du groupe d'instructions"
-#: config/tc-ia64.c:11771 read.c:2665 read.c:3304 read.c:3783 stabs.c:468
+#: config/tc-ia64.c:11766 read.c:2665 read.c:3304 read.c:3871 stabs.c:468
#, c-format
msgid "expected comma after \"%s\""
msgstr "virgule attendue après « %s »"
-#: config/tc-ia64.c:11814
+#: config/tc-ia64.c:11809
#, c-format
msgid "`%s' is already the alias of %s `%s'"
msgstr "« %s » est déjà l'alias de %s « %s »"
-#: config/tc-ia64.c:11826
+#: config/tc-ia64.c:11821
#, c-format
msgid "%s `%s' already has an alias `%s'"
msgstr "%s « %s » a déjà un alias « %s »"
-#: config/tc-ia64.c:11860
+#: config/tc-ia64.c:11855
#, c-format
msgid "symbol `%s' aliased to `%s' is not used"
msgstr "symbole « %s » ayant l'alias « %s » n'est pas utilisé"
-#: config/tc-ia64.c:11886
+#: config/tc-ia64.c:11881
#, c-format
msgid "section `%s' aliased to `%s' is not used"
msgstr "section « %s » ayant l'alias « %s » n'est pas utilisée"
@@ -10091,7 +10258,7 @@ msgstr "l'instruction accède implicitement à R31 du chargement précédent."
msgid "Unmatched high relocation"
msgstr "Réadressage haut sans correspondant"
-#: config/tc-iq2000.c:831 config/tc-mips.c:19783 config/tc-score.c:5804
+#: config/tc-iq2000.c:831 config/tc-mips.c:19776 config/tc-score.c:5804
msgid ".end not in text section"
msgstr ".end n'est pas dans la section de texte"
@@ -10103,7 +10270,7 @@ msgstr "directive .end n'est pas précédée de la directive .ent."
msgid ".end symbol does not match .ent symbol."
msgstr "symbole .end n'a pas de correspondance avec le symbole .ent."
-#: config/tc-iq2000.c:847 config/tc-mips.c:19803 config/tc-score.c:5820
+#: config/tc-iq2000.c:847 config/tc-mips.c:19796 config/tc-score.c:5820
msgid ".end directive missing or unknown symbol"
msgstr "Directive .end manquante ou symbole inconnu"
@@ -10111,7 +10278,7 @@ msgstr "Directive .end manquante ou symbole inconnu"
msgid "Expected simple number."
msgstr "Nombre simple attendu."
-#: config/tc-iq2000.c:894 config/tc-mips.c:19708 config/tc-score.c:5670
+#: config/tc-iq2000.c:894 config/tc-mips.c:19701 config/tc-score.c:5670
#, c-format
msgid " *input_line_pointer == '%c' 0x%02x\n"
msgstr " *input_line_pointer == « %c » 0x%02x\n"
@@ -10128,6 +10295,131 @@ msgstr ".ent ou .aent n'est pas dans la section texte."
msgid "missing `.end'"
msgstr "« .end » manquant"
+#: config/tc-loongarch.c:345
+#, c-format
+msgid "insn name: %s\tformat: %s\tsyntax error"
+msgstr "nom insn : %s\tformat : %s\terreur de syntaxe"
+
+#: config/tc-loongarch.c:348
+#, c-format
+msgid ""
+"insn name: %s\n"
+"format: %s\n"
+"we want macro but macro is NULL"
+msgstr ""
+"nom insn : %s\n"
+"format : %s\n"
+"nous avons besoin d'une macro mais macro est NULL"
+
+#: config/tc-loongarch.c:353
+#, c-format
+msgid ""
+"insn name: %s\n"
+"format: %s\n"
+"macro: %s\tsyntax error"
+msgstr ""
+"nom insn : %s\n"
+"format : %s\n"
+"macro : %s\terreur de syntaxe"
+
+#: config/tc-loongarch.c:402
+#, c-format
+msgid "Unsupported use of %s"
+msgstr "Utilisation non supporté de %s"
+
+#: config/tc-loongarch.c:475
+msgid "internal error: we have no internal label yet"
+msgstr "erreur interne: il n'y a pas encore d'étiquette interne"
+
+#: config/tc-loongarch.c:585
+msgid "This label shouldn't be with addend."
+msgstr "Cette étiquette ne devrait pas être avec un terme."
+
+#: config/tc-loongarch.c:625
+msgid "expr too huge"
+msgstr "expr trop grande"
+
+#: config/tc-loongarch.c:652
+#, c-format
+msgid ""
+"not support reloc bit-field\n"
+"fmt: %c%c %s\n"
+"args: %s"
+msgstr ""
+"pas de support pour réadressage champ de bits\n"
+"format : %c%c %s\n"
+"args : %s"
+
+#: config/tc-loongarch.c:700
+msgid "unknown escape"
+msgstr "échappement inconnu"
+
+#: config/tc-loongarch.c:727
+#, c-format
+msgid "require imm low %d bit is 0."
+msgstr "les %d bits inférieurs de imm doivent être 0."
+
+#. How to do after we detect overflow.
+#: config/tc-loongarch.c:739
+#, c-format
+msgid ""
+"Immediate overflow.\n"
+"format: %c%c%s\n"
+"arg: %s"
+msgstr ""
+"Débordement de l'immédiat.\n"
+"format : %c%c%s\n"
+"arg : %s"
+
+#: config/tc-loongarch.c:819
+msgid "AMO insns require rd != base && rd != rt when rd isn't $r0"
+msgstr "les insns AMD requièrent rd != base && rd != rt quand rd n'est pas $r0"
+
+#: config/tc-loongarch.c:831
+msgid "bstr(ins|pick).[wd] require msbd >= lsbd"
+msgstr "bstr(ins|pick).[wd] requière msbd >= lsbd"
+
+#: config/tc-loongarch.c:836
+msgid "csrxchg require rj != $r0 && rj != $r1"
+msgstr "csrxchg requière rj != $r0 && rj != $r1"
+
+#: config/tc-loongarch.c:883
+#, c-format
+msgid "no HOWTO loong relocation number %d"
+msgstr "pas de numéro de réadressage HOWTO loong %d"
+
+#: config/tc-loongarch.c:891
+msgid "Internal error: not support relax now"
+msgstr "Erreur interne: la relaxation n'est actuellement pas supportée"
+
+#: config/tc-loongarch.c:920
+#, c-format
+msgid "li overflow: hi32:0x%x lo32:0x%x"
+msgstr "débordement de li: hi32:0x%x lo32:0x%x"
+
+#: config/tc-loongarch.c:925
+msgid "we can't li.d on 32bit-arch"
+msgstr "l'instruction li.d n'est pas possible sur 32bit-arch"
+
+#: config/tc-loongarch.c:1020
+#, c-format
+msgid "no match insn: %s\t%s"
+msgstr "aucune correspondance pour insn : %s\t%s"
+
+#: config/tc-loongarch.c:1090 config/tc-loongarch.c:1096
+msgid "Relocation against a constant"
+msgstr "Réadressage par une constante"
+
+#: config/tc-loongarch.c:1301 config/tc-riscv.c:4029
+#, c-format
+msgid "cannot represent %s relocation in object file"
+msgstr "ne peut représenter le réadressage %s dans le fichier objet"
+
+#: config/tc-loongarch.c:1339
+#, c-format
+msgid "LARCH options:\n"
+msgstr "Options LARCH :\n"
+
#: config/tc-m32c.c:141
#, c-format
msgid " M32C specific command line options:\n"
@@ -10344,8 +10636,8 @@ msgstr "Virgule attendue après le nom de symbole: reste de la ligne ignoré."
msgid ".SCOMMon length (%ld.) <0! Ignored."
msgstr "longueur .SCOMMon (%ld.) <0! Ignoré."
-#: config/tc-m32r.c:1514 config/tc-microblaze.c:218 config/tc-ppc.c:2366
-#: config/tc-ppc.c:4332 config/tc-ppc.c:4374
+#: config/tc-m32r.c:1514 config/tc-microblaze.c:218 config/tc-ppc.c:2379
+#: config/tc-ppc.c:4417 config/tc-ppc.c:4472
msgid "ignoring bad alignment"
msgstr "mauvais alignement ignoré"
@@ -10729,10 +11021,6 @@ msgstr "bra ou bsr avec symbole non défini."
msgid "Subtype %d is not recognized."
msgstr "Sous-type %d n'est pas reconnu."
-#: config/tc-m68hc11.c:4337 config/tc-s12z.c:3936 config/tc-xgate.c:663
-msgid "Expression too complex."
-msgstr "Expression trop complexe."
-
#: config/tc-m68hc11.c:4368 config/tc-s12z.c:3976 config/tc-xgate.c:708
#: config/tc-xgate.c:717
msgid "Value out of 16-bit range."
@@ -11220,14 +11508,14 @@ msgstr "Opcode(%d.%s): "
msgid "Not a defined coldfire architecture"
msgstr "Pas une architecture coldfire définie"
-#: config/tc-m68k.c:7923 read.c:4673
+#: config/tc-m68k.c:7923 read.c:4766
#, c-format
msgid "%s relocations do not fit in %u byte"
msgid_plural "%s relocations do not fit in %u bytes"
msgstr[0] "Les réadressages %s n'entrent pas dans %u octet"
msgstr[1] "Les réadressages %s n'entrent pas dans %u octets"
-#: config/tc-m68k.c:7965 config/tc-ppc.c:2539
+#: config/tc-m68k.c:7965 config/tc-ppc.c:2552
msgid "unknown .gnu_attribute value"
msgstr "valeur de .gnu_attribute inconnue"
@@ -11365,12 +11653,12 @@ msgstr "opcode non implémenté « %s »"
msgid "ignoring operands: %s "
msgstr "opérandes ignorées: %s "
-#: config/tc-mcore.c:1670
+#: config/tc-mcore.c:1673
#, c-format
msgid "unrecognised cpu type '%s'"
msgstr "type de cpu non reconnu « %s »"
-#: config/tc-mcore.c:1688
+#: config/tc-mcore.c:1691
#, c-format
msgid ""
"MCORE specific options:\n"
@@ -11387,47 +11675,47 @@ msgstr ""
" -EB assembler pour un système à octets de poids fort (par défaut)\n"
" -EL assembler pour un système à octets de poids faible\n"
-#: config/tc-mcore.c:1706 config/tc-microblaze.c:1871
+#: config/tc-mcore.c:1709 config/tc-microblaze.c:1871
msgid "failed sanity check: short_jump"
msgstr "la vérification de l'état de santé a échoué: short_jump"
-#: config/tc-mcore.c:1716 config/tc-microblaze.c:1881
+#: config/tc-mcore.c:1719 config/tc-microblaze.c:1881
msgid "failed sanity check: long_jump"
msgstr "la vérification de l'état de santé a échoué: long_jump"
-#: config/tc-mcore.c:1742
+#: config/tc-mcore.c:1745
#, c-format
msgid "odd displacement at %x"
msgstr "déplacement impair à %x"
-#: config/tc-mcore.c:1951
+#: config/tc-mcore.c:1954
#, c-format
msgid "odd distance branch (0x%lx byte)"
msgid_plural "odd distance branch (0x%lx bytes)"
msgstr[0] "distance impaire de branchement (0x%lx octet)"
msgstr[1] "distance impaire de branchement (0x%lx octets)"
-#: config/tc-mcore.c:1958
+#: config/tc-mcore.c:1961
#, c-format
msgid "pcrel for branch to %s too far (0x%lx)"
msgstr "pcrel pour branchement vers %s est trop loin (0x%lx)"
-#: config/tc-mcore.c:1978
+#: config/tc-mcore.c:1981
#, c-format
msgid "pcrel for lrw/jmpi/jsri to %s too far (0x%lx)"
msgstr "pcrel pour lrw/jmpi/jsri vers %s est trop loin (0x%lx)"
-#: config/tc-mcore.c:1990
+#: config/tc-mcore.c:1993
#, c-format
msgid "pcrel for loopt too far (0x%lx)"
msgstr "pcrel pour loopt est trop éloigné (0x%lx)"
-#: config/tc-mcore.c:2186 config/tc-microblaze.c:2471 config/tc-tic30.c:1364
+#: config/tc-mcore.c:2189 config/tc-microblaze.c:2471 config/tc-tic30.c:1364
#, c-format
msgid "Can not do %d byte %srelocation"
msgstr "Ne peut déplacer %d octets par réadressage%s"
-#: config/tc-mcore.c:2188 config/tc-microblaze.c:2473 config/tc-tic30.c:1365
+#: config/tc-mcore.c:2191 config/tc-microblaze.c:2473 config/tc-tic30.c:1365
msgid "pc-relative "
msgstr "relatif au PC "
@@ -12089,7 +12377,7 @@ msgstr "l'extension « %s » a été retirée dans %s%d révision %d"
msgid "the `%s' extension requires 64-bit FPRs"
msgstr "l'extension « %s » requiert des FPR 64 bits"
-#: config/tc-mips.c:3048 config/tc-mips.c:16640
+#: config/tc-mips.c:3048 config/tc-mips.c:16633
#, c-format
msgid "unrecognized register name `%s'"
msgstr "nom de registre non reconnu « %s »"
@@ -12231,7 +12519,7 @@ msgstr "la relaxation de branchement n'est pas supportée dans « %s »"
msgid "trap exception not supported at ISA 1"
msgstr "exception par trappe non supportée sur ISA 1"
-#: config/tc-mips.c:4167 config/tc-mips.c:17523
+#: config/tc-mips.c:4167 config/tc-mips.c:17516
#, c-format
msgid "`%s' does not support legacy NaN"
msgstr "« %s » ne supporte pas le NaN historique"
@@ -12251,7 +12539,7 @@ msgstr "opérande %d hors limite"
msgid "operand %d must be constant"
msgstr "l'opérande %d doit être une constante"
-#: config/tc-mips.c:4970 read.c:4458 read.c:5254 write.c:263 write.c:1031
+#: config/tc-mips.c:4970 read.c:4546 read.c:5321 write.c:254 write.c:1031
msgid "register value used as expression"
msgstr "valeur de registre utilisée comme expression"
@@ -12339,7 +12627,7 @@ msgstr "saut vers une adresse mal alignée (0x%lx)"
#: config/tc-mips.c:7553 config/tc-mips.c:7573 config/tc-mips.c:7590
#: config/tc-mips.c:9140 config/tc-mips.c:15792 config/tc-mips.c:15799
-#: config/tc-mips.c:16192 config/tc-mips.c:19038
+#: config/tc-mips.c:16192 config/tc-mips.c:19031
#, c-format
msgid "branch to misaligned address (0x%lx)"
msgstr "saut vers une adresse mal alignée (0x%lx)"
@@ -12366,7 +12654,7 @@ msgstr "un registre de destination doit être fournis"
msgid "the source register must not be $31"
msgstr "le registre source ne doit pas être $31"
-#: config/tc-mips.c:8559 config/tc-mips.c:14532 config/tc-mips.c:19185
+#: config/tc-mips.c:8559 config/tc-mips.c:14532 config/tc-mips.c:19178
msgid "invalid unextended operand value"
msgstr "valeur d'opérande non étendue invalide"
@@ -12392,11 +12680,11 @@ msgstr "version non étendue d'opcode MIPS16 non reconnue"
msgid "unrecognized extended version of MIPS16 opcode"
msgstr "version étendue d'opcode MIPS16 non reconnue"
-#: config/tc-mips.c:8868 config/tc-mips.c:19056
+#: config/tc-mips.c:8868 config/tc-mips.c:19049
msgid "macro instruction expanded into multiple instructions in a branch delay slot"
msgstr "l'instruction macro a été étendue en de multiples instructions dans un emplacement de branchement différé"
-#: config/tc-mips.c:8871 config/tc-mips.c:19064
+#: config/tc-mips.c:8871 config/tc-mips.c:19057
msgid "macro instruction expanded into multiple instructions"
msgstr "instruction macro étendue en de multiples instructions"
@@ -12454,7 +12742,7 @@ msgstr "dla utilisé pour charger un registre 32 bits; il est recommandé d'util
msgid "la used to load 64-bit address; recommend using dla instead"
msgstr "la utilisé pour charger une adresse 64 bits; il est recommandé d'utiliser dla"
-#: config/tc-mips.c:11105 config/tc-riscv.c:1601
+#: config/tc-mips.c:11105 config/tc-riscv.c:1768
msgid "offset too large"
msgstr "décalage d'adresse trop grand"
@@ -12564,7 +12852,7 @@ msgstr "-%s en conflit avec d'autres options d'architecture, lequel implique -%s
msgid "-march=%s is not compatible with the selected ABI"
msgstr "-march=%s n'est pas compatible avec l'ABI sélectionnée"
-#: config/tc-mips.c:15796 config/tc-mips.c:16186 config/tc-mips.c:19035
+#: config/tc-mips.c:15796 config/tc-mips.c:16186 config/tc-mips.c:19028
msgid "branch to a symbol in another ISA mode"
msgstr "branchement vers un symbole dans un autre mode ISA"
@@ -12577,7 +12865,7 @@ msgstr "impossible d'encoder un terme mal aligné dans un champ réadressable (0
msgid "PC-relative reference to a different section"
msgstr "référence relative au PC vers une section différente"
-#: config/tc-mips.c:15912 config/tc-riscv.c:3023
+#: config/tc-mips.c:15912 config/tc-riscv.c:3498
msgid "TLS relocation against a constant"
msgstr "réadressage TLS par une constante"
@@ -12621,161 +12909,161 @@ msgstr "alignement trop grand, %d utilisé"
msgid "alignment negative, 0 assumed"
msgstr "alignement négatif, 0 utilisé"
-#: config/tc-mips.c:16520
+#: config/tc-mips.c:16513
#, c-format
msgid "%s: no such section"
msgstr "%s: pas de telle section"
-#: config/tc-mips.c:16576
+#: config/tc-mips.c:16569
#, c-format
msgid ".option pic%d not supported"
msgstr ".option pic%d n'est pas supportée"
-#: config/tc-mips.c:16578
+#: config/tc-mips.c:16571
#, c-format
msgid ".option pic%d not supported in VxWorks PIC mode"
msgstr ".option pic%d n'est pas supportée en mode VxWorks PIC"
-#: config/tc-mips.c:16590 config/tc-mips.c:16930
+#: config/tc-mips.c:16583 config/tc-mips.c:16923
msgid "-G may not be used with SVR4 PIC code"
msgstr "-G ne peut être utilisé avec du code PIC SVR4"
-#: config/tc-mips.c:16596
+#: config/tc-mips.c:16589
#, c-format
msgid "unrecognized option \"%s\""
msgstr "option « %s » non reconnue"
-#: config/tc-mips.c:16702
+#: config/tc-mips.c:16695
#, c-format
msgid "unknown architecture %s"
msgstr "architecture inconnue %s"
-#: config/tc-mips.c:16717 config/tc-mips.c:16881
+#: config/tc-mips.c:16710 config/tc-mips.c:16874
#, c-format
msgid "unknown ISA level %s"
msgstr "niveau ISA inconnu %s"
-#: config/tc-mips.c:16727
+#: config/tc-mips.c:16720
#, c-format
msgid "unknown ISA or architecture %s"
msgstr "ISA ou architecture inconnue %s"
-#: config/tc-mips.c:16786
+#: config/tc-mips.c:16779
msgid "`noreorder' must be set before `nomacro'"
msgstr "« noreorder » doit être initialisé avant « nomacro »"
-#: config/tc-mips.c:16816
+#: config/tc-mips.c:16809
msgid ".set pop with no .set push"
msgstr ".set pop sans .set push"
-#: config/tc-mips.c:16835
+#: config/tc-mips.c:16828
#, c-format
msgid "tried to set unrecognized symbol: %s\n"
msgstr "tentative d'initialisation d'un symbole non reconnu : %s\n"
-#: config/tc-mips.c:16908
+#: config/tc-mips.c:16901
#, c-format
msgid ".module used with unrecognized symbol: %s\n"
msgstr ".module utilisé avec un symbole non reconnu : %s\n"
-#: config/tc-mips.c:16914
+#: config/tc-mips.c:16907
msgid ".module is not permitted after generating code"
msgstr ".module n'est pas permis après la génération du code"
-#: config/tc-mips.c:16974 config/tc-mips.c:17053 config/tc-mips.c:17157
-#: config/tc-mips.c:17187 config/tc-mips.c:17236
+#: config/tc-mips.c:16967 config/tc-mips.c:17046 config/tc-mips.c:17150
+#: config/tc-mips.c:17180 config/tc-mips.c:17229
#, c-format
msgid "%s not supported in MIPS16 mode"
msgstr "%s n'est pas supporté en mode MIPS16"
-#: config/tc-mips.c:16981
+#: config/tc-mips.c:16974
msgid ".cpload not in noreorder section"
msgstr ".cpload n'est pas dans la section « noreorder »"
-#: config/tc-mips.c:17062 config/tc-mips.c:17081
+#: config/tc-mips.c:17055 config/tc-mips.c:17074
msgid "missing argument separator ',' for .cpsetup"
msgstr "séparateur d'argument « , » manquant pour .cpsetup"
-#: config/tc-mips.c:17279 config/tc-riscv.c:3344
+#: config/tc-mips.c:17272 config/tc-riscv.c:3833
#, c-format
msgid "unsupported use of %s"
msgstr "utilisation non supporté de %s"
-#: config/tc-mips.c:17370
+#: config/tc-mips.c:17363
msgid "unsupported use of .gpword"
msgstr "utilisation non supporté de .gpword"
-#: config/tc-mips.c:17408
+#: config/tc-mips.c:17401
msgid "unsupported use of .gpdword"
msgstr "utilisation non supportée de .gpdword"
-#: config/tc-mips.c:17440
+#: config/tc-mips.c:17433
msgid "unsupported use of .ehword"
msgstr "utilisation non supporté de .ehword"
-#: config/tc-mips.c:17527
+#: config/tc-mips.c:17520
msgid "bad .nan directive"
msgstr "directive .nan erronée"
-#: config/tc-mips.c:17576
+#: config/tc-mips.c:17569
#, c-format
msgid "ignoring attempt to redefine symbol %s"
msgstr "tentative ignorée de redéfinition du symbole %s"
-#: config/tc-mips.c:17591 ecoff.c:3359
+#: config/tc-mips.c:17584 ecoff.c:3359
msgid "bad .weakext directive"
msgstr "directive .weakext erronée"
-#: config/tc-mips.c:18560 config/tc-mips.c:18837
+#: config/tc-mips.c:18553 config/tc-mips.c:18830
msgid "relaxed out-of-range branch into a jump"
msgstr "relâche d'un branchement hors limite dans le saut (jump)"
-#: config/tc-mips.c:19060
+#: config/tc-mips.c:19053
msgid "extended instruction in a branch delay slot"
msgstr "instruction étendue dans la plage de délai de branchement"
-#: config/tc-mips.c:19174 config/tc-xtensa.c:1704 config/tc-xtensa.c:1982
+#: config/tc-mips.c:19167 config/tc-xtensa.c:1704 config/tc-xtensa.c:1982
msgid "unsupported relocation"
msgstr "réadressage non supporté"
-#: config/tc-mips.c:19682 config/tc-score.c:5644
+#: config/tc-mips.c:19675 config/tc-score.c:5644
msgid "expected simple number"
msgstr "nombre simple attendu"
-#: config/tc-mips.c:19710 config/tc-score.c:5671
+#: config/tc-mips.c:19703 config/tc-score.c:5671
msgid "invalid number"
msgstr "nombre invalide"
-#: config/tc-mips.c:19787 ecoff.c:2988
+#: config/tc-mips.c:19780 ecoff.c:2988
msgid ".end directive without a preceding .ent directive"
msgstr "directive .end sans directive .ent précédente"
-#: config/tc-mips.c:19796
+#: config/tc-mips.c:19789
msgid ".end symbol does not match .ent symbol"
msgstr "symbole .end n'a pas de correspondance avec le symbole .ent"
-#: config/tc-mips.c:19873
+#: config/tc-mips.c:19866
msgid ".ent or .aent not in text section"
msgstr ".ent ou .aent n'est pas dans la section texte"
-#: config/tc-mips.c:19876 config/tc-score.c:5703
+#: config/tc-mips.c:19869 config/tc-score.c:5703
msgid "missing .end"
msgstr ".end manquant"
-#: config/tc-mips.c:19959
+#: config/tc-mips.c:19952
msgid ".mask/.fmask outside of .ent"
msgstr ".mask/.fmask à l'extérieur de .ent"
-#: config/tc-mips.c:19966
+#: config/tc-mips.c:19959
msgid "bad .mask/.fmask directive"
msgstr "directive .mask/.fmask erronée"
-#: config/tc-mips.c:20269
+#: config/tc-mips.c:20262
#, c-format
msgid "bad value (%s) for %s"
msgstr "valeur invalide (%s) pour %s"
-#: config/tc-mips.c:20333
+#: config/tc-mips.c:20326
#, c-format
msgid ""
"MIPS options:\n"
@@ -12792,7 +13080,7 @@ msgstr ""
"-G NOMBRE permettre la référence des objets jusqu'à NOMBRE d'octets\n"
" implicitement avec le registre GP [par défaut 8]\n"
-#: config/tc-mips.c:20340
+#: config/tc-mips.c:20333
#, c-format
msgid ""
"-mips1\t\t\tgenerate MIPS ISA I instructions\n"
@@ -12829,7 +13117,7 @@ msgstr ""
"-mips64r6 générer des instructions MIPS64 version 6 ISA\n"
"-march=CPU/-mtune=CPU générer du code/planification pour le CPU, où CPU prend être:\n"
-#: config/tc-mips.c:20365
+#: config/tc-mips.c:20358
#, c-format
msgid ""
"-mCPU\t\t\tequivalent to -march=CPU -mtune=CPU. Deprecated.\n"
@@ -12840,7 +13128,7 @@ msgstr ""
"-no-mCPU ne pas générer de code spécifique au CPU.\n"
" Pour -mCPU et -no-mCPU, CPU doit être un des suivants:\n"
-#: config/tc-mips.c:20378
+#: config/tc-mips.c:20371
#, c-format
msgid ""
"-mips16\t\t\tgenerate mips16 instructions\n"
@@ -12849,7 +13137,7 @@ msgstr ""
"-mips16 générer des instructions mips16\n"
"-no-mips16 ne pas générer d'instruction mips16\n"
-#: config/tc-mips.c:20381
+#: config/tc-mips.c:20374
#, c-format
msgid ""
"-mmips16e2\t\tgenerate MIPS16e2 instructions\n"
@@ -12858,7 +13146,7 @@ msgstr ""
"-mmips16e2\t\tgénérer des instructions MIPS16e2\n"
"-mno-mips16e2\t\tne pas générer d'instruction MIPS16e2\n"
-#: config/tc-mips.c:20384
+#: config/tc-mips.c:20377
#, c-format
msgid ""
"-mmicromips\t\tgenerate microMIPS instructions\n"
@@ -12867,7 +13155,7 @@ msgstr ""
"-mmicromips\t\tgénérer des instructions microMIPS\n"
"-mno-micromips\tne pas générer d'instruction microMIPS\n"
-#: config/tc-mips.c:20387
+#: config/tc-mips.c:20380
#, c-format
msgid ""
"-msmartmips\t\tgenerate smartmips instructions\n"
@@ -12876,7 +13164,7 @@ msgstr ""
"-msmartmips générer des instructions smartmips\n"
"-mno-smartmips ne pas générer d'instruction smartmips\n"
-#: config/tc-mips.c:20390
+#: config/tc-mips.c:20383
#, c-format
msgid ""
"-mdsp\t\t\tgenerate DSP instructions\n"
@@ -12885,7 +13173,7 @@ msgstr ""
"-mdsp générer des instructions DSP\n"
"-mno-dsp ne pas générer d'instruction DSP\n"
-#: config/tc-mips.c:20393
+#: config/tc-mips.c:20386
#, c-format
msgid ""
"-mdspr2\t\t\tgenerate DSP R2 instructions\n"
@@ -12894,7 +13182,7 @@ msgstr ""
"-mdspr2 générer des instructions DSR R2\n"
"-mno-dspr2 ne pas générer d'instruction DSP R2\n"
-#: config/tc-mips.c:20396
+#: config/tc-mips.c:20389
#, c-format
msgid ""
"-mdspr3\t\t\tgenerate DSP R3 instructions\n"
@@ -12903,7 +13191,7 @@ msgstr ""
"-mdspr3 générer des instructions DSR R3\n"
"-mno-dspr3 ne pas générer d'instruction DSP R3\n"
-#: config/tc-mips.c:20399
+#: config/tc-mips.c:20392
#, c-format
msgid ""
"-mmt\t\t\tgenerate MT instructions\n"
@@ -12912,7 +13200,7 @@ msgstr ""
"-mmt générer des instructions MT\n"
"-mno-mt ne pas générer d'instruction MT\n"
-#: config/tc-mips.c:20402
+#: config/tc-mips.c:20395
#, c-format
msgid ""
"-mmcu\t\t\tgenerate MCU instructions\n"
@@ -12921,7 +13209,7 @@ msgstr ""
"-mmcu\t\t\tgénérer des instructions MCU\n"
"-mno-mcu\t\tne pas générer d'instruction MCU\n"
-#: config/tc-mips.c:20405
+#: config/tc-mips.c:20398
#, c-format
msgid ""
"-mmsa\t\t\tgenerate MSA instructions\n"
@@ -12930,7 +13218,7 @@ msgstr ""
"-mmsa\t\t\tgénérer des instruction MSA\n"
"-mno-msa\t\tne pas générer d'instruction MSA\n"
-#: config/tc-mips.c:20408
+#: config/tc-mips.c:20401
#, c-format
msgid ""
"-mxpa\t\t\tgenerate eXtended Physical Address (XPA) instructions\n"
@@ -12939,7 +13227,7 @@ msgstr ""
"-mxpa\t\t\tgénérer des instructions eXtended Physical Address (XPA)\n"
"-mno-xpa\t\tne pas générer d'instructions eXtended Physical Address (XPA)\n"
-#: config/tc-mips.c:20411
+#: config/tc-mips.c:20404
#, c-format
msgid ""
"-mvirt\t\t\tgenerate Virtualization instructions\n"
@@ -12948,7 +13236,7 @@ msgstr ""
"-mvirt\t\t\tgénérer des instructions de virtualisation\n"
"-mno-virt\t\tne pas générer des instructions de virtualisation\n"
-#: config/tc-mips.c:20414
+#: config/tc-mips.c:20407
#, c-format
msgid ""
"-mcrc\t\t\tgenerate CRC instructions\n"
@@ -12957,7 +13245,7 @@ msgstr ""
"-mcrc\t\t\tgénérer des instructions CRC\n"
"-mno-crc\t\tne pas générer d'instruction CRC\n"
-#: config/tc-mips.c:20417
+#: config/tc-mips.c:20410
#, c-format
msgid ""
"-mginv\t\t\tgenerate Global INValidate (GINV) instructions\n"
@@ -12966,7 +13254,7 @@ msgstr ""
"-mginv\t\t\tgénérer des instructions Global INvalidate (GINV)\n"
"-mno-ginv\t\tne pas générer des instructions Global INvalidate (GINV)\n"
-#: config/tc-mips.c:20420
+#: config/tc-mips.c:20413
#, c-format
msgid ""
"-mloongson-mmi\t\tgenerate Loongson MultiMedia extensions Instructions (MMI) instructions\n"
@@ -12975,7 +13263,7 @@ msgstr ""
"-mloongson-mmi\t\tgénérer les instruction Loongson MultiMedia extensions Instructions (MMI)\n"
"-mno-loongson-mmi\tne pas générer les instructions Loongson MultiMedia extensions Instructions\n"
-#: config/tc-mips.c:20423
+#: config/tc-mips.c:20416
#, c-format
msgid ""
"-mloongson-cam\t\tgenerate Loongson Content Address Memory (CAM) instructions\n"
@@ -12984,7 +13272,7 @@ msgstr ""
"-mloongson-cam\t\tgénérer les instructions Loongson Content Address Memory (CAM)\n"
"-mno-loongson-cam\tne pas générer les instructions Loongson Content Address Memory\n"
-#: config/tc-mips.c:20426
+#: config/tc-mips.c:20419
#, c-format
msgid ""
"-mloongson-ext\t\tgenerate Loongson EXTensions (EXT) instructions\n"
@@ -12993,7 +13281,7 @@ msgstr ""
"-mloongson-ext\t\tgénérer les instructions Loongson EXTensions (EXT)\n"
"-mno-loongson-ext\tne pas générer les instructions Loongson EXTensions\n"
-#: config/tc-mips.c:20429
+#: config/tc-mips.c:20422
#, c-format
msgid ""
"-mloongson-ext2\t\tgenerate Loongson EXTensions R2 (EXT2) instructions\n"
@@ -13002,7 +13290,7 @@ msgstr ""
"-mloongson-ext2\t\tgénérer les instructions Loongson EXTensions R2 (EXT2)\n"
"-mno-loongson-ext2\tne pas générer les instructions Loongson EXTensions R2\n"
-#: config/tc-mips.c:20432
+#: config/tc-mips.c:20425
#, c-format
msgid ""
"-minsn32\t\tonly generate 32-bit microMIPS instructions\n"
@@ -13011,7 +13299,7 @@ msgstr ""
"-minsn32\t\tne générer que des instructions microMIPS 32 bits\n"
"-mno-insn32\t\tgénérer toutes les instruction microMIPS\n"
-#: config/tc-mips.c:20436
+#: config/tc-mips.c:20429
#, c-format
msgid ""
"-mfix-loongson3-llsc\twork around Loongson3 LL/SC errata, default\n"
@@ -13020,7 +13308,7 @@ msgstr ""
"-mfix-loongson3-llsc\tcorrectif pour l'errata du Loongson3 LL/SC, défaut\n"
"-mno-fix-loongson3-llsc\tdésactiver le correctif de l'errata du Loongson3 LL/SC\n"
-#: config/tc-mips.c:20440
+#: config/tc-mips.c:20433
#, c-format
msgid ""
"-mfix-loongson3-llsc\twork around Loongson3 LL/SC errata\n"
@@ -13029,7 +13317,7 @@ msgstr ""
"-mfix-loongson3-llsc\tcontourner l'errata du Loongson3 LL/SC\n"
"-mno-fix-loongson3-llsc\tdésactiver le contournement de l'errata du Loongson3 LL/SC, défaut\n"
-#: config/tc-mips.c:20444
+#: config/tc-mips.c:20437
#, c-format
msgid ""
"-mfix-loongson2f-jump\twork around Loongson2F JUMP instructions\n"
@@ -13068,7 +13356,7 @@ msgstr ""
"--trap, --no-break\tcapturer les exceptions de division par 0 et les débordement de multiplication\n"
"--break, --no-trap\tinterrompt les exceptions de division par 0 et les débordement de multiplication\n"
-#: config/tc-mips.c:20462
+#: config/tc-mips.c:20455
#, c-format
msgid ""
"-mhard-float\t\tallow floating-point instructions\n"
@@ -13091,7 +13379,7 @@ msgstr ""
"-mno-ignore-branch-isa\trejeter les branches invalides qui requièrent un changement de mode ISA\n"
"-mnan=ENCODAGE\t\tchoisir une convention d'encodage NaN IEEE 754 parmi :\n"
-#: config/tc-mips.c:20480
+#: config/tc-mips.c:20473
#, c-format
msgid ""
"-KPIC, -call_shared\tgenerate SVR4 position independent code\n"
@@ -13114,26 +13402,26 @@ msgstr ""
" code (non partagé) indépendant de la position\n"
"-mabi=ABI\t\tcréer un fichier objet conforme à l'ABI pour:\n"
-#: config/tc-mips.c:20501
+#: config/tc-mips.c:20494
#, c-format
msgid "-32\t\t\tcreate o32 ABI object file%s\n"
msgstr "-32\t\t\tcréer un fichier objet%s avec l'ABI o32\n"
-#: config/tc-mips.c:20503 config/tc-mips.c:20506 config/tc-mips.c:20509
+#: config/tc-mips.c:20496 config/tc-mips.c:20499 config/tc-mips.c:20502
msgid " (default)"
msgstr " (défaut)"
-#: config/tc-mips.c:20504
+#: config/tc-mips.c:20497
#, c-format
msgid "-n32\t\t\tcreate n32 ABI object file%s\n"
msgstr "-n32\t\t\tcréer un fichier objet%s avec l'ABI n32\n"
-#: config/tc-mips.c:20507
+#: config/tc-mips.c:20500
#, c-format
msgid "-64\t\t\tcreate 64 ABI object file%s\n"
msgstr "-64\t\t\tcréer un fichier objet%s avec l'ABI 64\n"
-#: config/tc-mips.c:20589
+#: config/tc-mips.c:20582
msgid "missing .end at end of assembly"
msgstr ".end manquant à la fin de l'assemblage"
@@ -13219,8 +13507,8 @@ msgstr "opcode inconnu « %s »"
msgid "specified location wasn't TETRA-aligned"
msgstr "position spécifiée n'était pas alignée TETRA"
-#: config/tc-mmix.c:973 config/tc-mmix.c:988 config/tc-mmix.c:4225
-#: config/tc-mmix.c:4241
+#: config/tc-mmix.c:973 config/tc-mmix.c:988 config/tc-mmix.c:4224
+#: config/tc-mmix.c:4240
msgid "unaligned data at an absolute location is not supported"
msgstr "données non alignées sur une position absolue ne sont pas supportées"
@@ -13342,52 +13630,48 @@ msgstr "BSPEC sans ESPEC."
msgid "LOC to section unknown or indeterminable at first pass"
msgstr "LOC vers une section inconnue ou indéterminée lors de la première passe"
-#: config/tc-mmix.c:3746
-msgid "GREG expression too complicated"
-msgstr "expression GREG trop complexe"
-
-#: config/tc-mmix.c:3761
+#: config/tc-mmix.c:3760
msgid "internal: GREG expression not resolved to section"
msgstr "interne: expression GREG non résolue vers la section"
-#: config/tc-mmix.c:3810
+#: config/tc-mmix.c:3809
msgid "register section has contents\n"
msgstr "section de registre a un contenu\n"
-#: config/tc-mmix.c:3936
+#: config/tc-mmix.c:3935
msgid "section change from within a BSPEC/ESPEC pair is not supported"
msgstr "changement de section à partir de la paire BSPEC/ESPEC n'est pas supporté"
-#: config/tc-mmix.c:3957
+#: config/tc-mmix.c:3956
msgid "directive LOC from within a BSPEC/ESPEC pair is not supported"
msgstr "directive LOC depuis l'intérieur de la paire BSPEC/ESPEC n'est pas supportée"
-#: config/tc-mmix.c:3967
+#: config/tc-mmix.c:3966
msgid "invalid LOC expression"
msgstr "expression LOC invalide"
-#: config/tc-mmix.c:4012 config/tc-mmix.c:4039
+#: config/tc-mmix.c:4011 config/tc-mmix.c:4038
msgid "LOC expression stepping backwards is not supported"
msgstr "expression LOC avec pas arrière n'est pas supportée"
#. We will only get here in rare cases involving #NO_APP,
#. where the unterminated string is not recognized by the
#. preformatting pass.
-#: config/tc-mmix.c:4148 config/tc-mmix.c:4306 config/tc-z80.c:3190
+#: config/tc-mmix.c:4147 config/tc-mmix.c:4305 config/tc-z80.c:3190
msgid "unterminated string"
msgstr "chaîne non terminée"
-#: config/tc-mmix.c:4165
+#: config/tc-mmix.c:4164
msgid "BYTE expression not a pure number"
msgstr "Expression BYTE n'est pas un nombre pur"
#. Note that mmixal does not allow negative numbers in
#. BYTE sequences, so neither should we.
-#: config/tc-mmix.c:4174
+#: config/tc-mmix.c:4173
msgid "BYTE expression not in the range 0..255"
msgstr "expression BYTE n'est pas dans les bornes 0..255"
-#: config/tc-mmix.c:4223 config/tc-mmix.c:4239
+#: config/tc-mmix.c:4222 config/tc-mmix.c:4238
msgid "data item with alignment larger than location"
msgstr "élément de donnée avec un alignement plus grand que la position"
@@ -13406,15 +13690,15 @@ msgstr ""
"Options MN10200:\n"
"aucune pour l'instant\n"
-#: config/tc-mn10200.c:896 config/tc-mn10300.c:1253 config/tc-s390.c:1691
-#: config/tc-v850.c:2328
+#: config/tc-mn10200.c:889 config/tc-mn10300.c:1253 config/tc-s390.c:1691
+#: config/tc-v850.c:2325
#, c-format
msgid "Unrecognized opcode: `%s'"
msgstr "Opcode non reconnu: « %s »"
#. xgettext:c-format.
-#: config/tc-mn10200.c:1139 config/tc-mn10300.c:1821 config/tc-ppc.c:3969
-#: config/tc-s390.c:1604 config/tc-v850.c:3043
+#: config/tc-mn10200.c:1132 config/tc-mn10300.c:1821 config/tc-ppc.c:3988
+#: config/tc-s390.c:1604 config/tc-v850.c:3040
#, c-format
msgid "junk at end of line: `%s'"
msgstr "rebut à la fin de la ligne: « %s »"
@@ -14406,11 +14690,11 @@ msgid "Addend to unresolved symbol is not on word boundary."
msgstr "Ajout d'un symbole non résolu n'est pas sur une frontière de mot."
#. Should never here.
-#: config/tc-nds32.c:7656
+#: config/tc-nds32.c:7617
msgid "Used FPU instructions requires enabling FPU extension"
msgstr "Les instruction FPU utilisées requièrent l'activation de l'extension FPU"
-#: config/tc-nds32.c:7853
+#: config/tc-nds32.c:7813
#, c-format
msgid "Internal error: Unknown fixup type %d (`%s')"
msgstr "Erreur interne: Type de correctif %d inconnu (« %s »)"
@@ -14495,12 +14779,12 @@ msgstr "ne peut produire un réadressage 64 bits"
msgid "internal error: broken opcode descriptor for `%s %s'\n"
msgstr "erreur interne: descripteur de l'opcode endommagé pour « %s %s »\n"
-#: config/tc-nios2.c:1480 config/tc-pru.c:863
+#: config/tc-nios2.c:1480 config/tc-pru.c:862
msgid "can't create relocation"
msgstr "ne peut créer le réadressage"
-#: config/tc-nios2.c:1511 config/tc-pru.c:997 config/tc-pru.c:1017
-#: config/tc-pru.c:1044 config/tc-pru.c:1063 config/tc-pru.c:1077
+#: config/tc-nios2.c:1511 config/tc-pru.c:996 config/tc-pru.c:1016
+#: config/tc-pru.c:1043 config/tc-pru.c:1062 config/tc-pru.c:1076
#, c-format
msgid "unknown register %s"
msgstr "registre %s inconnu"
@@ -14562,13 +14846,13 @@ msgstr "r31 ne peut pas être utilisé avec jmpr.n; utilisez ret.n à la place"
msgid "Invalid constant operand %s"
msgstr "Opérande constant %s invalide"
-#: config/tc-nios2.c:2990 config/tc-nios2.c:3014 config/tc-pru.c:1319
-#: config/tc-pru.c:1344 config/tc-pru.c:1364
+#: config/tc-nios2.c:2990 config/tc-nios2.c:3014 config/tc-pru.c:1318
+#: config/tc-pru.c:1343 config/tc-pru.c:1363
#, c-format
msgid "badly formed expression near %s"
msgstr "Expression mal composée près de %s"
-#: config/tc-nios2.c:3119 config/tc-pru.c:1390
+#: config/tc-nios2.c:3119 config/tc-pru.c:1389
#, c-format
msgid "expecting %c near %s"
msgstr "%c attendu près de %s"
@@ -14589,12 +14873,12 @@ msgid "Big-endian R2 is not supported."
msgstr "R2 à octets de poids fort n'est pas supporté."
#. Unrecognised instruction - error.
-#: config/tc-nios2.c:3747 config/tc-pru.c:1717
+#: config/tc-nios2.c:3747 config/tc-pru.c:1716
#, c-format
msgid "unrecognised instruction %s"
msgstr "instruction %s non reconnue"
-#: config/tc-nios2.c:3867 config/tc-pru.c:1773
+#: config/tc-nios2.c:3867 config/tc-pru.c:1772
#, c-format
msgid "can't represent relocation type %s"
msgstr "ne peut représenter le type de réadressage %s"
@@ -14905,68 +15189,68 @@ msgstr ""
msgid "pcrel too far"
msgstr "pcrel trop éloigné"
-#: config/tc-ppc.c:949 config/tc-ppc.c:957 config/tc-ppc.c:3456
+#: config/tc-ppc.c:961 config/tc-ppc.c:969 config/tc-ppc.c:3475
msgid "invalid register expression"
msgstr "expression de registre invalide"
-#: config/tc-ppc.c:1122 config/tc-ppc.c:1180 config/tc-ppc.c:1228
+#: config/tc-ppc.c:1131 config/tc-ppc.c:1189 config/tc-ppc.c:1237
msgid "the use of -mvle requires big endian."
msgstr "l'utilisation de -mvle requiert un grand boutiste."
-#: config/tc-ppc.c:1160 config/tc-ppc.c:1182
+#: config/tc-ppc.c:1169 config/tc-ppc.c:1191
msgid "the use of -mvle requires -a32."
msgstr "l'utilisation de -mvle requiert -a32."
-#: config/tc-ppc.c:1162
+#: config/tc-ppc.c:1171
#, c-format
msgid "%s unsupported"
msgstr "%s n'est pas supportée"
-#: config/tc-ppc.c:1255 config/tc-s390.c:435 config/tc-s390.c:442
+#: config/tc-ppc.c:1264 config/tc-s390.c:435 config/tc-s390.c:442
#, c-format
msgid "invalid switch -m%s"
msgstr "option invalide -m%s"
-#: config/tc-ppc.c:1286
+#: config/tc-ppc.c:1295
msgid "--nops needs a numeric argument"
msgstr "--nops requiert un argument numérique"
-#: config/tc-ppc.c:1322
+#: config/tc-ppc.c:1331
#, c-format
msgid "PowerPC options:\n"
msgstr "Options PowerPC:\n"
-#: config/tc-ppc.c:1324
+#: config/tc-ppc.c:1333
#, c-format
msgid "-a32 generate ELF32/XCOFF32\n"
msgstr "-a32 générer ELF32/XCOFF32\n"
-#: config/tc-ppc.c:1327
+#: config/tc-ppc.c:1336
#, c-format
msgid "-a64 generate ELF64/XCOFF64\n"
msgstr "-a64 générer ELF64/XCOFF64\n"
-#: config/tc-ppc.c:1329
+#: config/tc-ppc.c:1338
#, c-format
msgid "-u ignored\n"
msgstr "-u ignorée\n"
-#: config/tc-ppc.c:1331
+#: config/tc-ppc.c:1340
#, c-format
msgid "-mpwrx, -mpwr2 generate code for POWER/2 (RIOS2)\n"
msgstr "-mpwrx, -mpwr2 générer du code pour POWER/2 (RIDS2)\n"
-#: config/tc-ppc.c:1333
+#: config/tc-ppc.c:1342
#, c-format
msgid "-mpwr generate code for POWER (RIOS1)\n"
msgstr "-mpwr générer du code pour POWER (RIOS1)\n"
-#: config/tc-ppc.c:1335
+#: config/tc-ppc.c:1344
#, c-format
msgid "-m601 generate code for PowerPC 601\n"
msgstr "-m601 générer du code pour PowerPC 601\n"
-#: config/tc-ppc.c:1337
+#: config/tc-ppc.c:1346
#, c-format
msgid ""
"-mppc, -mppc32, -m603, -m604\n"
@@ -14975,32 +15259,32 @@ msgstr ""
"-mppc, -mppc32, -m603, -m604\n"
" générer du code pour PowerPC 603/604\n"
-#: config/tc-ppc.c:1340
+#: config/tc-ppc.c:1349
#, c-format
msgid "-m403 generate code for PowerPC 403\n"
msgstr "-m403 générer du code pour PowerPC 403\n"
-#: config/tc-ppc.c:1342
+#: config/tc-ppc.c:1351
#, c-format
msgid "-m405 generate code for PowerPC 405\n"
msgstr "-m405 générer du code pour PowerPC 405\n"
-#: config/tc-ppc.c:1344
+#: config/tc-ppc.c:1353
#, c-format
msgid "-m440 generate code for PowerPC 440\n"
msgstr "-m440 générer du code pour PowerPC 440\n"
-#: config/tc-ppc.c:1346
+#: config/tc-ppc.c:1355
#, c-format
msgid "-m464 generate code for PowerPC 464\n"
msgstr "-m464 générer du code pour PowerPC 464\n"
-#: config/tc-ppc.c:1348
+#: config/tc-ppc.c:1357
#, c-format
msgid "-m476 generate code for PowerPC 476\n"
msgstr "-m476 générer du code pour PowerPC 476\n"
-#: config/tc-ppc.c:1350
+#: config/tc-ppc.c:1359
#, c-format
msgid ""
"-m7400, -m7410, -m7450, -m7455\n"
@@ -15009,7 +15293,7 @@ msgstr ""
"-m7400, -m7410, -m7450, -m7455\n"
" générer du code pour PowerPC 7400/7410/7450/7455\n"
-#: config/tc-ppc.c:1353
+#: config/tc-ppc.c:1362
#, c-format
msgid ""
"-m750cl, -mgekko, -mbroadway\n"
@@ -15018,37 +15302,37 @@ msgstr ""
"-m750cl, -mgekko, -mbroadway\n"
" générer du code pour PowerPC 750cl/Gekko/Broadway\n"
-#: config/tc-ppc.c:1356
+#: config/tc-ppc.c:1365
#, c-format
msgid "-m821, -m850, -m860 generate code for PowerPC 821/850/860\n"
msgstr "-m821, -m850, -m860 générer du code pour PowerPC 821/850/860\n"
-#: config/tc-ppc.c:1358
+#: config/tc-ppc.c:1367
#, c-format
msgid "-mppc64, -m620 generate code for PowerPC 620/625/630\n"
msgstr "-mppc64, -m620 générer du code pour PowerPC 620/625/630\n"
-#: config/tc-ppc.c:1360
+#: config/tc-ppc.c:1369
#, c-format
msgid "-mppc64bridge generate code for PowerPC 64, including bridge insns\n"
msgstr "-mppc64bridge générer du code pour PowerPC 64, y compris les insns bridge\n"
-#: config/tc-ppc.c:1362
+#: config/tc-ppc.c:1371
#, c-format
msgid "-mbooke generate code for 32-bit PowerPC BookE\n"
msgstr "-mbooke générer du code pour le PowerPC BookE 32 bits\n"
-#: config/tc-ppc.c:1364
+#: config/tc-ppc.c:1373
#, c-format
msgid "-ma2 generate code for A2 architecture\n"
msgstr "-ma2 générer du code pour l'architecture A2\n"
-#: config/tc-ppc.c:1366
+#: config/tc-ppc.c:1375
#, c-format
msgid "-mpower4, -mpwr4 generate code for Power4 architecture\n"
msgstr "-mpower4, -mpwr4 générer du code pour l'architecture Power4\n"
-#: config/tc-ppc.c:1368
+#: config/tc-ppc.c:1377
#, c-format
msgid ""
"-mpower5, -mpwr5, -mpwr5x\n"
@@ -15057,132 +15341,132 @@ msgstr ""
"-mpower5, -mpwr5, -mpwr5x\n"
" générer du code pour l'architecture Power5\n"
-#: config/tc-ppc.c:1371
+#: config/tc-ppc.c:1380
#, c-format
msgid "-mpower6, -mpwr6 generate code for Power6 architecture\n"
msgstr "-mpower6, -mpwr6 générer du code pour l'architecture Power6\n"
-#: config/tc-ppc.c:1373
+#: config/tc-ppc.c:1382
#, c-format
msgid "-mpower7, -mpwr7 generate code for Power7 architecture\n"
msgstr "-mpower7, -mpwr7 générer du code pour l'architecture Power7\n"
-#: config/tc-ppc.c:1375
+#: config/tc-ppc.c:1384
#, c-format
msgid "-mpower8, -mpwr8 generate code for Power8 architecture\n"
msgstr "-mpower8, -mpwr8 générer du code pour l'architecture Power8\n"
-#: config/tc-ppc.c:1377
+#: config/tc-ppc.c:1386
#, c-format
msgid "-mpower9, -mpwr9 generate code for Power9 architecture\n"
msgstr "-mpower9, -mpwr9 générer du code pour l'architecture Power9\n"
-#: config/tc-ppc.c:1379
+#: config/tc-ppc.c:1388
#, c-format
msgid "-mpower10, -mpwr10 generate code for Power10 architecture\n"
msgstr "-mpower10, -mpwr10 générer du code pour l'architecture Power10\n"
-#: config/tc-ppc.c:1381
+#: config/tc-ppc.c:1390
#, c-format
msgid "-mcell generate code for Cell Broadband Engine architecture\n"
msgstr "-mcell générer du code pour l'architecture Cell Broadband Engine\n"
-#: config/tc-ppc.c:1383
+#: config/tc-ppc.c:1392
#, c-format
msgid "-mcom generate code for Power/PowerPC common instructions\n"
msgstr "-mcom générer du code pour les instructions communes Power/PowerPC\n"
-#: config/tc-ppc.c:1385
+#: config/tc-ppc.c:1394
#, c-format
msgid "-many generate code for any architecture (PWR/PWRX/PPC)\n"
msgstr "-many générer du code pour n'importe quelle architecture (PWR/PWRX/PPC)\n"
-#: config/tc-ppc.c:1387
+#: config/tc-ppc.c:1396
#, c-format
msgid "-maltivec generate code for AltiVec\n"
msgstr "-maltivec générer duc ode pour AltiVec\n"
-#: config/tc-ppc.c:1389
+#: config/tc-ppc.c:1398
#, c-format
msgid "-mvsx generate code for Vector-Scalar (VSX) instructions\n"
msgstr "-mvsx générer du code pour les instructions Vector-Scalar (VSX)\n"
-#: config/tc-ppc.c:1391
+#: config/tc-ppc.c:1400
#, c-format
msgid "-me300 generate code for PowerPC e300 family\n"
msgstr "-me300 générer du code pour la famille PowerPC e300\n"
-#: config/tc-ppc.c:1393
+#: config/tc-ppc.c:1402
#, c-format
msgid "-me500, -me500x2 generate code for Motorola e500 core complex\n"
msgstr "-me500, -me500x2 générer du code pour le core complex du Motorola e500\n"
-#: config/tc-ppc.c:1395
+#: config/tc-ppc.c:1404
#, c-format
msgid "-me500mc, generate code for Freescale e500mc core complex\n"
msgstr "-me500mc, générer du code pour le core complex du Freescale e500mc\n"
-#: config/tc-ppc.c:1397
+#: config/tc-ppc.c:1406
#, c-format
msgid "-me500mc64, generate code for Freescale e500mc64 core complex\n"
msgstr "-me500mc64, générer du code pour le core complex du Freescale e500mc64\n"
-#: config/tc-ppc.c:1399
+#: config/tc-ppc.c:1408
#, c-format
msgid "-me5500, generate code for Freescale e5500 core complex\n"
msgstr "-me5500, générer du code pour le core complex du Freescale e5500\n"
-#: config/tc-ppc.c:1401
+#: config/tc-ppc.c:1410
#, c-format
msgid "-me6500, generate code for Freescale e6500 core complex\n"
msgstr "-me6500, générer du code pour le core complex du Freescale e6500\n"
-#: config/tc-ppc.c:1403
+#: config/tc-ppc.c:1412
#, c-format
msgid "-mspe generate code for Motorola SPE instructions\n"
msgstr "-mspe générer du code pour les instructions Motorola SPE\n"
-#: config/tc-ppc.c:1405
+#: config/tc-ppc.c:1414
#, c-format
msgid "-mspe2 generate code for Freescale SPE2 instructions\n"
msgstr "-mspe2 générer du code pour les instructions Freescale SPE2\n"
-#: config/tc-ppc.c:1407
+#: config/tc-ppc.c:1416
#, c-format
msgid "-mvle generate code for Freescale VLE instructions\n"
msgstr "-mvle générer du code pour les instructions Freescale VLE\n"
-#: config/tc-ppc.c:1409
+#: config/tc-ppc.c:1418
#, c-format
msgid "-mtitan generate code for AppliedMicro Titan core complex\n"
msgstr "-mtitan générer du code pour le core complex du AppliedMicro Titan\n"
-#: config/tc-ppc.c:1411
+#: config/tc-ppc.c:1420
#, c-format
msgid "-mregnames Allow symbolic names for registers\n"
msgstr "-mregnames Autoriser les noms symboliques pour les registres\n"
-#: config/tc-ppc.c:1413
+#: config/tc-ppc.c:1422
#, c-format
msgid "-mno-regnames Do not allow symbolic names for registers\n"
msgstr "-mno-regnames Ne pas autoriser les noms symboliques pour les registres\n"
-#: config/tc-ppc.c:1416
+#: config/tc-ppc.c:1425
#, c-format
msgid "-mrelocatable support for GCC's -mrelocatble option\n"
msgstr "-mrelocatable support pour l'option -mrelocatble de GCC\n"
-#: config/tc-ppc.c:1418
+#: config/tc-ppc.c:1427
#, c-format
msgid "-mrelocatable-lib support for GCC's -mrelocatble-lib option\n"
msgstr "-mrelocatable-lib support pour l'option -mrelocatble-lib de GCC\n"
-#: config/tc-ppc.c:1420
+#: config/tc-ppc.c:1429
#, c-format
msgid "-memb set PPC_EMB bit in ELF flags\n"
msgstr "-memb définir le bit PPC_EMB dans les fanions ELF\n"
-#: config/tc-ppc.c:1422
+#: config/tc-ppc.c:1431
#, c-format
msgid ""
"-mlittle, -mlittle-endian, -le\n"
@@ -15191,7 +15475,7 @@ msgstr ""
"-mlittle, -mlittle-endian, -le\n"
" générer du code pour une machine à octets de poids faibles\n"
-#: config/tc-ppc.c:1425
+#: config/tc-ppc.c:1434
#, c-format
msgid ""
"-mbig, -mbig-endian, -be\n"
@@ -15200,363 +15484,379 @@ msgstr ""
"-mbig, -mbig-endian, -be\n"
" générer du code pour une machine à octets de poids fort\n"
-#: config/tc-ppc.c:1428
+#: config/tc-ppc.c:1437
#, c-format
msgid "-msolaris generate code for Solaris\n"
msgstr "-msolaris générer du code pour Solaris\n"
-#: config/tc-ppc.c:1430
+#: config/tc-ppc.c:1439
#, c-format
msgid "-mno-solaris do not generate code for Solaris\n"
msgstr "-mno-solaris ne pas générer de code pour Solaris\n"
-#: config/tc-ppc.c:1432
+#: config/tc-ppc.c:1441
#, c-format
msgid "-K PIC set EF_PPC_RELOCATABLE_LIB in ELF flags\n"
msgstr "-K PIC définir EF_PPC_RELOCATABLE_LIB dans les fanions ELF\n"
-#: config/tc-ppc.c:1434
+#: config/tc-ppc.c:1443
#, c-format
msgid "-V print assembler version number\n"
msgstr "-V afficher le numéro de la version de l'assembleur\n"
-#: config/tc-ppc.c:1436
+#: config/tc-ppc.c:1445
#, c-format
msgid "-Qy, -Qn ignored\n"
msgstr "-Qy, -Qn ignorée\n"
-#: config/tc-ppc.c:1439
+#: config/tc-ppc.c:1448
#, c-format
msgid "-nops=count when aligning, more than COUNT nops uses a branch\n"
msgstr "-nops=num si plus que num nops sont nécessaires pour un alignement, utiliser un branchement\n"
-#: config/tc-ppc.c:1441
+#: config/tc-ppc.c:1450
#, c-format
msgid "-ppc476-workaround warn if emitting data to code sections\n"
msgstr "-ppc476-workaround avertir si émet des données vers des sections de code\n"
-#: config/tc-ppc.c:1471
+#: config/tc-ppc.c:1480
#, c-format
msgid "unknown default cpu = %s, os = %s"
msgstr "CPU par défaut inconnu = %s, système d'exploitation = %s"
-#: config/tc-ppc.c:1499
+#: config/tc-ppc.c:1508
msgid "neither Power nor PowerPC opcodes were selected."
msgstr "aucun opcode Power ou PowerPC n'a été sélectionné."
-#: config/tc-ppc.c:1557
+#: config/tc-ppc.c:1566
#, c-format
msgid "mask trims opcode bits for %s"
msgstr "le masque élague les bits de l'opcode pour %s"
-#: config/tc-ppc.c:1567
+#: config/tc-ppc.c:1576
#, c-format
msgid "operand index error for %s"
msgstr "erreur d'index d'opérande pour %s"
-#: config/tc-ppc.c:1593
+#: config/tc-ppc.c:1602
#, c-format
msgid "operand %d overlap in %s"
msgstr "recouvrement de l'opérande %d dans %s"
-#: config/tc-ppc.c:1602
+#: config/tc-ppc.c:1611
#, c-format
msgid "non-optional operand %d follows optional operand in %s"
msgstr "l'opérande non optionnel %d suit l'opérande optionnel dans %s"
-#: config/tc-ppc.c:1652
+#: config/tc-ppc.c:1661
#, c-format
msgid "powerpc_operands[%d].bitm invalid"
msgstr "powerpc_operands[%d].bitm invalide"
-#: config/tc-ppc.c:1659
+#: config/tc-ppc.c:1668
#, c-format
msgid "powerpc_operands[%d] duplicates powerpc_operands[%d]"
msgstr "powerpc_operands[%d] double powerpc_operands[%d]"
-#: config/tc-ppc.c:1685 config/tc-ppc.c:1736 config/tc-ppc.c:1774
-#: config/tc-ppc.c:1812
+#: config/tc-ppc.c:1694 config/tc-ppc.c:1745 config/tc-ppc.c:1783
+#: config/tc-ppc.c:1821
#, c-format
msgid "major opcode is not sorted for %s"
msgstr "l'opcode majeur n'est pas trié pour %s"
-#: config/tc-ppc.c:1691
+#: config/tc-ppc.c:1700
#, c-format
msgid "%s is enabled by vle flag"
msgstr "%s est activé par le fanion vle"
-#: config/tc-ppc.c:1698
+#: config/tc-ppc.c:1707
#, c-format
msgid "%s not disabled by vle flag"
msgstr "%s n'est pas désactivé par le fanion vle"
-#: config/tc-ppc.c:2208
+#: config/tc-ppc.c:2217
#, c-format
msgid "symbol+offset@%s means symbol@%s+offset"
msgstr "symbole+décalage@%s signifie symbole@%s+décalage"
-#: config/tc-ppc.c:2228
+#: config/tc-ppc.c:2237
#, c-format
msgid "symbol+offset@%s not supported"
msgstr "symbole+offseti@%s non supporté"
-#: config/tc-ppc.c:2303 config/tc-ppc.c:4267 config/tc-ppc.c:7399
+#: config/tc-ppc.c:2316 config/tc-ppc.c:4286 config/tc-ppc.c:7669
msgid "data in executable section"
msgstr "données dans une section exécutable"
-#: config/tc-ppc.c:2344
+#: config/tc-ppc.c:2357
msgid "expected comma after symbol-name: rest of line ignored."
msgstr "virgule attendue après le nom de symbole: reste de la ligne ignoré."
-#: config/tc-ppc.c:2377
+#: config/tc-ppc.c:2390
#, c-format
msgid "ignoring attempt to re-define symbol `%s'."
msgstr "tentative ignorée de redéfinition du symbole « %s »."
-#: config/tc-ppc.c:2385
+#: config/tc-ppc.c:2398
#, c-format
msgid "length of .lcomm \"%s\" is already %ld. Not changed to %ld."
msgstr "longueur de .lcomm « %s » est déjà %ld. N'a pas été changé à %ld."
-#: config/tc-ppc.c:2403
+#: config/tc-ppc.c:2416
msgid "common alignment not a power of 2"
msgstr "alignement du commun n'est pas une puissance de 2"
-#: config/tc-ppc.c:2445
+#: config/tc-ppc.c:2458
#, c-format
msgid "expected comma after name `%s' in .localentry directive"
msgstr "virgule attendue après le nom « %s » dans la directive .localentry"
-#: config/tc-ppc.c:2455
+#: config/tc-ppc.c:2468
msgid "missing expression in .localentry directive"
msgstr "expression manquante dans la directive .localentry"
-#: config/tc-ppc.c:2476
+#: config/tc-ppc.c:2489
#, c-format
msgid ".localentry expression for `%s' is not a valid power of 2"
msgstr "l'expression .localentry de « %s » n'est pas une puissance de 2 valable"
-#: config/tc-ppc.c:2493
+#: config/tc-ppc.c:2506
#, c-format
msgid ".localentry expression for `%s' does not evaluate to a constant"
msgstr "l'expression .localentry de « %s » n'est pas une constante"
-#: config/tc-ppc.c:2508
+#: config/tc-ppc.c:2521
msgid "missing expression in .abiversion directive"
msgstr "expression manquante dans la directive .abiversion"
-#: config/tc-ppc.c:2517
+#: config/tc-ppc.c:2530
msgid ".abiversion expression does not evaluate to a constant"
msgstr "l'expression .abiversion n'est pas évaluée en une constante"
-#: config/tc-ppc.c:2597
+#: config/tc-ppc.c:2610
msgid "relocation cannot be done when using -mrelocatable"
msgstr "réadressage ne peut être fait avec -mrelocatable"
-#: config/tc-ppc.c:2643
+#: config/tc-ppc.c:2656
msgid "TOC section size exceeds 64k"
msgstr "la taille de la section TOC excède 64k"
-#: config/tc-ppc.c:3197
+#: config/tc-ppc.c:3216
#, c-format
msgid "%s howto doesn't match size/pcrel in gas"
msgstr "le howto %s ne correspond pas à size/pcrel dans gas"
-#: config/tc-ppc.c:3281
+#: config/tc-ppc.c:3300
#, c-format
msgid "unrecognized opcode: `%s'"
msgstr "opcode non reconnu : « %s »"
#. lmw, stmw, lswi, lswx, stswi, stswx
-#: config/tc-ppc.c:3295
+#: config/tc-ppc.c:3314
#, c-format
msgid "`%s' invalid when little-endian"
msgstr "« %s » est invalide pour un petit boutiste"
-#: config/tc-ppc.c:3656
+#: config/tc-ppc.c:3675
#, c-format
msgid "@tls may not be used with \"%s\" operands"
msgstr "@tls ne peut pas être utilisé avec les opérandes « %s »"
-#: config/tc-ppc.c:3659
+#: config/tc-ppc.c:3678
msgid "@tls may only be used in last operand"
msgstr "@tls ne peut pas être utilisé dans le dernier opérande"
-#: config/tc-ppc.c:3697 config/tc-ppc.c:3707 config/tc-ppc.c:3717
-#: config/tc-ppc.c:3732
+#: config/tc-ppc.c:3716 config/tc-ppc.c:3726 config/tc-ppc.c:3736
+#: config/tc-ppc.c:3751
#, c-format
msgid "%s unsupported on this instruction"
msgstr "%s non supporté sur cette instruction"
-#: config/tc-ppc.c:3779
+#: config/tc-ppc.c:3798
#, c-format
msgid "assuming %s on symbol"
msgstr "suppose %s sur le symbole"
-#: config/tc-ppc.c:3902
+#: config/tc-ppc.c:3921
msgid "unsupported relocation for DS offset field"
msgstr "type de réadressage non supporté pour un décalage de champ DS"
-#: config/tc-ppc.c:3955
+#: config/tc-ppc.c:3974
#, c-format
msgid "syntax error; found `%c', expected `%c'"
msgstr "erreur de syntaxe; obtenu « %c », attendait « %c »"
-#: config/tc-ppc.c:3960
+#: config/tc-ppc.c:3979
#, c-format
msgid "syntax error; end of line, expected `%c'"
msgstr "erreur de syntaxe; fin de ligne, attendait « %c »"
-#: config/tc-ppc.c:4025 config/tc-ppc.c:6576
+#: config/tc-ppc.c:4044 config/tc-ppc.c:6843
#, c-format
msgid "instruction address is not a multiple of %d"
msgstr "l'adresse de l'instruction n'est pas un multiple de %d"
-#: config/tc-ppc.c:4151
+#: config/tc-ppc.c:4170
msgid "wrong number of operands"
msgstr "nombre d'opérandes erroné"
-#: config/tc-ppc.c:4224
+#: config/tc-ppc.c:4243
msgid "bad .section directive: want a,e,v,w,x,M,S,G,T in string"
msgstr "directive .section erronée: nécessite a,e,v,w,x,M,S,G,T dans la chaîne"
-#: config/tc-ppc.c:4307
+#: config/tc-ppc.c:4392
msgid "missing size"
msgstr "taille manquante"
-#: config/tc-ppc.c:4316
+#: config/tc-ppc.c:4401
msgid "negative size"
msgstr "taille négative"
-#: config/tc-ppc.c:4348
+#: config/tc-ppc.c:4428
+msgid "Unknown visibility field in .comm"
+msgstr "Champ de visibilité inconnu dans .comm"
+
+#: config/tc-ppc.c:4446
msgid "missing real symbol name"
msgstr "nom de symbole réel manquant"
-#: config/tc-ppc.c:4387
+#: config/tc-ppc.c:4485
msgid "attempt to redefine symbol"
msgstr "tentative de redéfinition de symbole"
-#: config/tc-ppc.c:4691
+#: config/tc-ppc.c:4794
#, c-format
msgid "no known dwarf XCOFF section for flag 0x%08x\n"
msgstr "aucune section dwarf XCOFF connue pour le fanion 0x%08x\n"
-#: config/tc-ppc.c:4704
+#: config/tc-ppc.c:4807
#, c-format
msgid "label %s was not defined in this dwarf section"
msgstr "l'étiquette « %s » n'a pas été définie dans cette section dwarf"
-#: config/tc-ppc.c:4818
+#: config/tc-ppc.c:4921
msgid "the XCOFF file format does not support arbitrary sections"
msgstr "le format de fichier XCOFF ne supporte pas des sections arbitraires"
-#: config/tc-ppc.c:4889
+#: config/tc-ppc.c:4958
+msgid "Unknown visibility field in .extern"
+msgstr "Champ de visibilité inconnu dans .extern"
+
+#: config/tc-ppc.c:4994
+msgid "Unknown visibility field in .globl"
+msgstr "Champ de visibilité inconnu dans .global"
+
+#: config/tc-ppc.c:5030
+msgid "Unknown visibility field in .weak"
+msgstr "Champ de visibilité inconnu dans .weak"
+
+#: config/tc-ppc.c:5081
msgid ".ref outside .csect"
msgstr ".ref à l'extérieur de .csect"
-#: config/tc-ppc.c:4910 config/tc-ppc.c:5110
+#: config/tc-ppc.c:5102 config/tc-ppc.c:5362
msgid "missing symbol name"
msgstr "nom de symbole manquant"
-#: config/tc-ppc.c:4940
+#: config/tc-ppc.c:5132
msgid "missing rename string"
msgstr "chaîne renommée manquante"
-#: config/tc-ppc.c:4970 config/tc-ppc.c:5512 read.c:3689
+#: config/tc-ppc.c:5162 config/tc-ppc.c:5764
msgid "missing value"
msgstr "valeur manquante"
-#: config/tc-ppc.c:4988
+#: config/tc-ppc.c:5180
msgid "illegal .stabx expression; zero assumed"
msgstr "expression .stabx illégale; zéro assumé"
-#: config/tc-ppc.c:5020
+#: config/tc-ppc.c:5212
msgid "missing class"
msgstr "classe manquante"
-#: config/tc-ppc.c:5029
+#: config/tc-ppc.c:5221
msgid "missing type"
msgstr "type manquant"
-#: config/tc-ppc.c:5056
+#: config/tc-ppc.c:5248
msgid ".stabx of storage class stsym must be within .bs/.es"
msgstr ".stabx de la classe de stockage stsym doit être à l'intérieur de .bs/.es"
-#: config/tc-ppc.c:5300
+#: config/tc-ppc.c:5552
msgid "nested .bs blocks"
msgstr "blocs .bs imbriqués"
-#: config/tc-ppc.c:5331
+#: config/tc-ppc.c:5583
msgid ".es without preceding .bs"
msgstr ".es n'est pas précédé de .bs"
-#: config/tc-ppc.c:5504
+#: config/tc-ppc.c:5756
msgid "non-constant byte count"
msgstr "compteur d'octet n'est pas une constante"
-#: config/tc-ppc.c:5579
+#: config/tc-ppc.c:5831
msgid ".tc not in .toc section"
msgstr ".tc n'est pas dans la section .toc"
-#: config/tc-ppc.c:5597
+#: config/tc-ppc.c:5849
msgid ".tc with no label"
msgstr ".tc sans étiquette"
-#: config/tc-ppc.c:5625
+#: config/tc-ppc.c:5877
#, c-format
msgid ".tc with storage class %d not yet supported"
msgstr ".tc avec la classe de stockage %d n'est pas encore supporté"
-#: config/tc-ppc.c:5695 config/tc-s390.c:1960
+#: config/tc-ppc.c:5946 config/tc-s390.c:1960
msgid ".machine stack overflow"
msgstr "débordement de pile .machine"
-#: config/tc-ppc.c:5702 config/tc-s390.c:1971
+#: config/tc-ppc.c:5953 config/tc-s390.c:1971
msgid ".machine stack underflow"
msgstr "dépassement négatif de la pile .machine"
-#: config/tc-ppc.c:5709 config/tc-s390.c:1983
+#: config/tc-ppc.c:5972 config/tc-s390.c:1983
#, c-format
msgid "invalid machine `%s'"
msgstr "machine invalide « %s »"
-#: config/tc-ppc.c:5752
+#: config/tc-ppc.c:6016
msgid "bad symbol suffix"
msgstr "mauvais suffixe de symbole"
-#: config/tc-ppc.c:5851
+#: config/tc-ppc.c:6115
msgid "unrecognized symbol suffix"
msgstr "suffixe de symbole non reconnu"
-#: config/tc-ppc.c:5939
+#: config/tc-ppc.c:6203
msgid ".ef with no preceding .function"
msgstr ".ef n'est pas précédé de .function"
-#: config/tc-ppc.c:6074
+#: config/tc-ppc.c:6339
#, c-format
msgid "warning: symbol %s has no csect"
msgstr "avertissement: symbole %s n'a pas de csect"
-#: config/tc-ppc.c:6406
+#: config/tc-ppc.c:6671
msgid "symbol in .toc does not match any .tc"
msgstr "symbole dans .toc ne concorde avec aucun .tc"
-#: config/tc-ppc.c:7104
+#: config/tc-ppc.c:7371
#, c-format
msgid "%s unsupported as instruction fixup"
msgstr "%s non supporté comme correctif d'instruction"
-#: config/tc-ppc.c:7203
+#: config/tc-ppc.c:7470
#, c-format
msgid "unsupported relocation against %s"
msgstr "réadressage non supporté vers %s"
-#: config/tc-ppc.c:7361
+#: config/tc-ppc.c:7632
#, c-format
-msgid "R_TLSML relocation doesn't target a symbol named \"_$TLSML\". %s"
-msgstr "le réadressage R_TLSML ne cible pas un symbole nommé « _$TLSML ». %s"
+msgid "R_TLSML relocation doesn't target a TOC entry named \"_$TLSML\": %s"
+msgstr "le réadressage R_TLSML ne cible pas une entrée TOC nommée « _$TLSML » : %s"
-#: config/tc-ppc.c:7382
+#: config/tc-ppc.c:7652
#, c-format
msgid "Gas failure, reloc value %d\n"
msgstr "Échec de GAS, valeur de réadressage %d\n"
@@ -15579,73 +15879,73 @@ msgstr "expression relative au PC inattendue"
msgid "residual low bits in pmem diff relocation"
msgstr "bits inférieurs résiduels dans le réadressage différentiel pmem"
-#: config/tc-pru.c:939 config/tc-pru.c:972
+#: config/tc-pru.c:938 config/tc-pru.c:971
#, c-format
msgid "trailing garbage after expression: %s"
msgstr "rebut après l'expression: %s"
-#: config/tc-pru.c:944
+#: config/tc-pru.c:943
#, c-format
msgid "expected expression, got %s"
msgstr "expression attendue, %s obtenu"
-#: config/tc-pru.c:977
+#: config/tc-pru.c:976
#, c-format
msgid "expected constant expression, got %s"
msgstr "expression constante attendue, %s obtenu"
-#: config/tc-pru.c:1030
+#: config/tc-pru.c:1029
msgid "data transfer register cannot be halfword"
msgstr "le registre de transfert de données ne peut pas être un demi-mot"
-#: config/tc-pru.c:1049
+#: config/tc-pru.c:1048
msgid "destination register must be full-word"
msgstr "le registre de destination doit être un mot entier"
-#: config/tc-pru.c:1081
+#: config/tc-pru.c:1080
#, c-format
msgid "cannot use partial register %s for addressing"
msgstr "ne peut utiliser le registre partiel %s pour l'adressage"
-#: config/tc-pru.c:1094
+#: config/tc-pru.c:1093
#, c-format
msgid "value %lu is too large for a byte operand"
msgstr "la valeur %lu est trop grande pour un opérande de type octet"
-#: config/tc-pru.c:1116
+#: config/tc-pru.c:1115
#, c-format
msgid "loop count constant %ld is out of range [1..%d]"
msgstr "la constante de décompte de boucle %ld est hors des limites [1..%d]"
-#: config/tc-pru.c:1216 config/tc-pru.c:1242
+#: config/tc-pru.c:1215 config/tc-pru.c:1241
#, c-format
msgid "byte count constant %ld is out of range [1..%d]"
msgstr "la constante de décompte d'octet %ld est hors des limites [1..%d]"
-#: config/tc-pru.c:1223 config/tc-pru.c:1249
+#: config/tc-pru.c:1222 config/tc-pru.c:1248
msgid "only r0 can be used as byte count register"
msgstr "seul r0 peut être utilisé comme registre de décompte d'octet"
-#: config/tc-pru.c:1225 config/tc-pru.c:1251
+#: config/tc-pru.c:1224 config/tc-pru.c:1250
msgid "only r0.bX byte fields of r0 can be used as byte count"
msgstr "seul le champs d'octet r0.bX de r0 peut être utilisé comme décompte d'octet"
-#: config/tc-pru.c:1264
+#: config/tc-pru.c:1263
#, c-format
msgid "invalid constant table offset %ld"
msgstr "décalage de table constant %ld invalide"
-#: config/tc-pru.c:1275
+#: config/tc-pru.c:1274
#, c-format
msgid "invalid WakeOnStatus %ld"
msgstr "WakeOnStatus %ld invalide"
-#: config/tc-pru.c:1286
+#: config/tc-pru.c:1285
#, c-format
msgid "invalid XFR WideBus Address %ld"
msgstr "adresse WideBux XFR %ld invalide"
-#: config/tc-pru.c:1546
+#: config/tc-pru.c:1545
#, c-format
msgid ""
"PRU options:\n"
@@ -15656,231 +15956,258 @@ msgstr ""
" -mlink-relax générer des réadressage pour la relaxation de l'éditeur de liens (défaut).\n"
" -mno-link-relax ne pas générer de réadressage pour la relaxation de l'éditeur de liens.\n"
-#: config/tc-pru.c:1819
+#: config/tc-pru.c:1818
#, c-format
msgid "Label \"%s\" matches a CPU register name"
msgstr "L'étiquette « %s » correspond à un nom de registre du processeur"
-#: config/tc-riscv.c:234
+#: config/tc-riscv.c:176
#, c-format
msgid "unknown default privileged spec `%s' set by -mpriv-spec or --with-priv-spec"
msgstr "spécification privilégiée par défaut « %s » inconnue définie par -mpriv-spec ou -with-priv-spec"
#. Still can not find the privileged spec class.
-#: config/tc-riscv.c:256
+#: config/tc-riscv.c:198
#, c-format
msgid "unknown default privileged spec `%d.%d.%d' set by privileged elf attributes"
msgstr "spécification privilégiée par défaut « %d.%d.%d » inconnue définie par les attributs privilégiés elf"
-#: config/tc-riscv.c:366 config/tc-riscv.c:745 config/tc-riscv.c:803
-#: config/tc-riscv.c:1188
+#: config/tc-riscv.c:266
+msgid "the architecture string of -march and elf architecture attributes cannot be empty"
+msgstr "la chaîne d'architecture de -march et des attributs de l'architecture elf ne peut pas être vide"
+
+#: config/tc-riscv.c:754 config/tc-riscv.c:815 config/tc-riscv.c:1230
#, c-format
msgid "internal: duplicate %s"
msgstr "interne: %s en double"
-#: config/tc-riscv.c:892
+#: config/tc-riscv.c:912
#, c-format
msgid "internal: bad RISC-V CSR class (0x%x)"
msgstr "interne: mauvaise classe CSR RISC-V (0x%x)"
-#: config/tc-riscv.c:896
+#: config/tc-riscv.c:916
#, c-format
msgid "invalid CSR `%s' for the current ISA"
msgstr "CSR « %s » invalide pour l'ISA courante"
-#: config/tc-riscv.c:917
+#: config/tc-riscv.c:937
#, c-format
msgid "invalid CSR `%s' for the privileged spec `%s'"
msgstr "CSR « %s » invalide pour la spécification privilégiée « %s »"
-#: config/tc-riscv.c:1027
+#: config/tc-riscv.c:1050
#, c-format
msgid "internal: bad RISC-V opcode (mask error): %s %s"
msgstr "interne: opcode RISC-V erroné (erreur de masque): %s %s"
-#: config/tc-riscv.c:1077
-#, c-format
-msgid "internal: bad RISC-V opcode (unknown operand type `CF%c'): %s %s"
-msgstr "interne: opcode RISC-V erroné (type d'opérande inconnu « CF%c »): %s %s"
-
-#: config/tc-riscv.c:1084
-#, c-format
-msgid "internal: bad RISC-V opcode (unknown operand type `C%c'): %s %s"
-msgstr "interne: opcode RISC-V erroné (type d'opérande inconnu « C%c »): %s %s"
-
-#: config/tc-riscv.c:1132 config/tc-riscv.c:1144
+#: config/tc-riscv.c:1190
#, c-format
-msgid "internal: bad RISC-V opcode (unknown operand type `F%c'): %s %s"
-msgstr "interne: opcode RISC-V erroné (type d'opérande inconnu « F%c »): %s %s"
+msgid "internal: bad RISC-V opcode (unknown operand type `%s'): %s %s"
+msgstr "interne: opcode RISC-V erroné (type d'opérande inconnu « %s »): %s %s"
-#: config/tc-riscv.c:1151
-#, c-format
-msgid "internal: bad RISC-V opcode (unknown operand type `%c'): %s %s"
-msgstr "interne: opcode RISC-V erroné (type d'opérande inconnu « %c »): %s %s"
-
-#: config/tc-riscv.c:1159
+#: config/tc-riscv.c:1199
#, c-format
msgid "internal: bad RISC-V opcode (bits 0x%lx undefined): %s %s"
msgstr "interne: mauvais opcode RISC-V (bits 0x%lx indéfinis): %s %s"
-#: config/tc-riscv.c:1199
+#: config/tc-riscv.c:1241
msgid "internal: broken assembler. No assembly attempted"
msgstr "interne: assemblage cassé. Aucune tentative d'assemblage"
-#: config/tc-riscv.c:1310
+#: config/tc-riscv.c:1354
#, c-format
-msgid "internal: usupported RISC-V relocation number %d"
+msgid "internal: unsupported RISC-V relocation number %d"
msgstr "interne: numéro de réadressage RISC-V %d non supporté"
-#: config/tc-riscv.c:1392
-msgid "internal: invalid macro"
-msgstr "interne: macro invalide"
+#: config/tc-riscv.c:1470
+#, c-format
+msgid "internal: invalid macro argument `%s'"
+msgstr "interne: l'argument « %s » de la macro est invalide"
-#: config/tc-riscv.c:1417
+#: config/tc-riscv.c:1495
msgid "internal: vasprintf failed"
msgstr "interne: vasprintf a échoué"
-#: config/tc-riscv.c:1447 config/tc-riscv.c:1525
+#: config/tc-riscv.c:1525 config/tc-riscv.c:1603
msgid "unsupported large constant"
msgstr "constante de grande taille non supportée"
-#: config/tc-riscv.c:1449
+#: config/tc-riscv.c:1527
#, c-format
msgid "unknown CSR `%s'"
msgstr "CSR inconnu « %s »"
-#: config/tc-riscv.c:1452
+#: config/tc-riscv.c:1530
#, c-format
msgid "instruction %s requires absolute expression"
msgstr "l'instruction %s requiert une expression absolue"
-#: config/tc-riscv.c:1719
+#: config/tc-riscv.c:1704 config/tc-riscv.c:1739
+msgid "must provide temp if destination overlaps mask"
+msgstr "il faut fournir temp si la destination chevauche le masque"
+
+#: config/tc-riscv.c:1891
#, c-format
msgid "internal: macro %s not implemented"
msgstr "interne: la macro %s n'est pas implémentée"
-#: config/tc-riscv.c:2062
+#: config/tc-riscv.c:2077
+msgid "multiple vsew constants"
+msgstr "constantes vsew multiples"
+
+#: config/tc-riscv.c:2085
+msgid "multiple vlmul constants"
+msgstr "constantes vlmul multiples"
+
+#: config/tc-riscv.c:2093
+msgid "multiple vta constants"
+msgstr "constantes vta multiples"
+
+#: config/tc-riscv.c:2101
+msgid "multiple vma constants"
+msgstr "constantes vma multiples"
+
+#. Reset error message of the previous round.
+#: config/tc-riscv.c:2257
+msgid "illegal operands"
+msgstr "opérandes illégaux"
+
+#: config/tc-riscv.c:2297
#, c-format
msgid "read-only CSR is written `%s'"
msgstr "le CSR en lecture seule est écrit avec « %s »"
-#: config/tc-riscv.c:2301
+#: config/tc-riscv.c:2307
+msgid "illegal opcode for zve32x"
+msgstr "opcode illégal pour zve32x"
+
+#: config/tc-riscv.c:2546
msgid "bad value for compressed funct6 field, value must be 0...64"
msgstr "mauvaise valeur pour le champ funct6 compressé, la valeur doit être 0...64"
-#: config/tc-riscv.c:2316
+#: config/tc-riscv.c:2561
msgid "bad value for compressed funct4 field, value must be 0...15"
msgstr "mauvaise valeur pour le champ funct4 compressé, la valeur doit être 0...15"
-#: config/tc-riscv.c:2331
+#: config/tc-riscv.c:2576
msgid "bad value for compressed funct3 field, value must be 0...7"
msgstr "mauvaise valeur pour le champ funct3 compressé, la valeur doit être 0...7"
-#: config/tc-riscv.c:2346
+#: config/tc-riscv.c:2591
msgid "bad value for compressed funct2 field, value must be 0...3"
msgstr "mauvaise valeur pour le champ funct2 compressé, la valeur doit être 0...3"
-#: config/tc-riscv.c:2356
-#, c-format
-msgid "internal: unknown compressed funct field specifier `CF%c'"
-msgstr "interne: spécificateur de champ FUNCT compressé « CF%c » inconnu"
+#: config/tc-riscv.c:2684
+msgid "bad value for vsetivli immediate field, value must be 0..1023"
+msgstr "mauvaise valeur pour le champ immédiat vsetivli, la valeur doit être 0...1023"
-#: config/tc-riscv.c:2362
-#, c-format
-msgid "internal: unknown compressed field specifier `C%c'"
-msgstr "interne: spécificateur de champ compressé « CF%c » inconnu"
+#: config/tc-riscv.c:2696
+msgid "bad value for vsetvli immediate field, value must be 0..2047"
+msgstr "mauvaise valeur pour le champ immédiat vsetvli, la valeur doit être 0...2047"
+
+#: config/tc-riscv.c:2709
+msgid "bad value for vector immediate field, value must be -16...15"
+msgstr "mauvaise valeur pour le champ immédiat vectoriel, la valeur doit être -16...15"
+
+#: config/tc-riscv.c:2721
+msgid "bad value for vector immediate field, value must be 0...31"
+msgstr "mauvaise valeur pour le champ immédiat vectoriel, la valeur doit être 0...31"
-#: config/tc-riscv.c:2386 config/tc-riscv.c:2397
+#: config/tc-riscv.c:2733
+msgid "bad value for vector immediate field, value must be -15...16"
+msgstr "mauvaise valeur pour le champ immédiat vectoriel, la valeur doit être -15...16"
+
+#: config/tc-riscv.c:2795 config/tc-riscv.c:2806
#, c-format
msgid "improper shift amount (%lu)"
msgstr "nombre de décalages erroné (%lu)"
-#: config/tc-riscv.c:2408
+#: config/tc-riscv.c:2817
#, c-format
msgid "improper CSRxI immediate (%lu)"
msgstr "immédiat CSRxI inopportun (%lu)"
-#: config/tc-riscv.c:2425
+#: config/tc-riscv.c:2834
#, c-format
msgid "improper CSR address (%lu)"
msgstr "adresse CSR inopportune (%lu)"
-#: config/tc-riscv.c:2603
+#: config/tc-riscv.c:3015
msgid "lui expression not in range 0..1048575"
msgstr "l'expression lui n'est pas dans les bornes 0..1048575"
-#: config/tc-riscv.c:2640
+#: config/tc-riscv.c:3052
msgid "bad value for opcode field, value must be 0...127 and lower 2 bits must be 0x3"
msgstr "mauvaise valeur pour le champ opcode, la valeur doit être 0...127 et les bits les plus faibles doivent être 0x3"
-#: config/tc-riscv.c:2656
+#: config/tc-riscv.c:3068
msgid "bad value for opcode field, value must be 0...2"
msgstr "mauvaise valeur pour le champ opcode, la valeur doit être 0...2"
-#: config/tc-riscv.c:2666
-#, c-format
-msgid "internal: unknown opcode field specifier `O%c'"
-msgstr "interne: spécificateur de champ Opcode « O%c » inconnu"
-
-#: config/tc-riscv.c:2680
+#: config/tc-riscv.c:3091
msgid "bad value for funct7 field, value must be 0...127"
msgstr "mauvaise valeur pour le champ funct7, la valeur doit être 0...127"
-#: config/tc-riscv.c:2695
+#: config/tc-riscv.c:3106
msgid "bad value for funct3 field, value must be 0...7"
msgstr "mauvaise valeur pour le champ funct3, la valeur doit être 0...7"
-#: config/tc-riscv.c:2710
+#: config/tc-riscv.c:3121
msgid "bad value for funct2 field, value must be 0...3"
msgstr "mauvaise valeur pour le champ funct2, la valeur doit être 0...3"
-#: config/tc-riscv.c:2720
+#: config/tc-riscv.c:3139
#, c-format
-msgid "internal: unknown funct field specifier `F%c'\n"
-msgstr "interne: spécificateur de champ funct « F%c » inconnu\n"
+msgid "Improper bs immediate (%lu)"
+msgstr "Immédiat bs inopportun (%lu)"
-#: config/tc-riscv.c:2735
+#: config/tc-riscv.c:3150
#, c-format
-msgid "internal: unknown argument type `%c'"
-msgstr "interne: type d'argument « %c » inconnu"
+msgid "Improper rnum immediate (%lu)"
+msgstr "Immédiat rnum inopportun (%lu)"
-#: config/tc-riscv.c:2740
-msgid "illegal operands"
-msgstr "opérandes illégaux"
+#: config/tc-riscv.c:3168
+#, c-format
+msgid "internal: unknown argument type `%s'"
+msgstr "interne: type d'argument « %s » inconnu"
+
+#: config/tc-riscv.c:3209
+msgid "values must be constant"
+msgstr "les valeurs doivent être des constantes"
+
+#: config/tc-riscv.c:3217
+msgid "unrecognized values"
+msgstr "valeurs non reconnues"
+
+#: config/tc-riscv.c:3225
+msgid "value conflicts with instruction length"
+msgstr "la valeur est en conflit avec la longueur d'instruction"
-#: config/tc-riscv.c:3119
+#: config/tc-riscv.c:3594
#, c-format
msgid "internal: bad CFA value #%d"
msgstr "interne: mauvaise valeur CFA #%d"
-#: config/tc-riscv.c:3200
+#: config/tc-riscv.c:3675
#, c-format
msgid "internal: bad relocation #%d"
msgstr "interne: mauvais réadressage #%d"
-#: config/tc-riscv.c:3205
-msgid "unsupported symbol subtraction"
-msgstr "symbole de soustraction non supporté"
-
-#: config/tc-riscv.c:3314
+#: config/tc-riscv.c:3799
msgid ".option pop with no .option push"
msgstr ".option pop sans .option push"
-#: config/tc-riscv.c:3324
+#: config/tc-riscv.c:3813
#, c-format
msgid "unrecognized .option directive: %s\n"
msgstr "directive .option non reconnue: %s\n"
-#: config/tc-riscv.c:3499
-#, c-format
-msgid "cannot represent %s relocation in object file"
-msgstr "ne peut représenter le réadressage %s dans le fichier objet"
-
-#: config/tc-riscv.c:3640
+#: config/tc-riscv.c:4170
#, c-format
msgid ""
"RISC-V options:\n"
-" -fpic generate position-independent code\n"
+" -fpic or -fPIC generate position-independent code\n"
" -fno-pic don't generate position-independent code (default)\n"
" -march=ISA set the RISC-V architecture\n"
" -misa-spec=ISAspec set the RISC-V ISA spec (2.2, 20190608, 20191213)\n"
@@ -15890,42 +16217,54 @@ msgid ""
" -mno-relax disable relax\n"
" -march-attr generate RISC-V arch attribute\n"
" -mno-arch-attr don't generate RISC-V arch attribute\n"
+" -mcsr-check enable the csr ISA and privilege spec version checks\n"
+" -mno-csr-check disable the csr ISA and privilege spec version checks (default)\n"
+" -mbig-endian assemble for big-endian\n"
+" -mlittle-endian assemble for little-endian\n"
msgstr ""
"Options RISC-V:\n"
-" -fpic générer du code indépendant de la position\n"
+" -fpic ou -fPIC générer du code indépendant de la position\n"
" -fno-pic ne pas générer du code indépendant de la position (défaut)\n"
" -march=ISA définir l'architecture RISC-V\n"
" -misa-spec=ISAspec définir la spécification de l'ISA RISC-V (2.2, 20190608, 20191213)\n"
-" -mpriv-spec=PRIVspec définir la spécification de privilège RISC-V (1.9.1, 1.10, 1.11, 1.12)\n"
+" -mpriv-spec=PRIVspec définir la spécification de privilège RISC-V (1.9, 1.10, 1.11, 1.12)\n"
" -mabi=ABI définir l'ABI RISC-V\n"
" -mrelax activer la relaxation (défaut)\n"
" -mno-relax désactiver la relaxation\n"
" -march-attr générer l'attribut arch RISC-V\n"
" -mno-arch-attr ne pas générer l'attribut arch RISC-V\n"
+" -mcsr-check activer l'ISA csr et les vérifications de la version de spécification des privilèges\n"
+" -mno-csr-check déactiver l'ISA csr et les vérifications de la version de spécification des privilèges (défaut)\n"
+" -mbig-endian assembler pour gros boutiste\n"
+" -mlittle-endian assembler pour petit boutiste\n"
-#: config/tc-riscv.c:3678
+#: config/tc-riscv.c:4212
#, c-format
msgid "unknown register `%s'"
msgstr "registre « %s » inconnu"
-#: config/tc-riscv.c:3700
+#: config/tc-riscv.c:4234
#, c-format
msgid "non-constant .%cleb128 is not supported"
msgstr ".%cleb128 non constant n'est pas supporté"
-#: config/tc-riscv.c:3785
+#: config/tc-riscv.c:4328
#, c-format
msgid "internal: bad RISC-V privileged spec (%s)"
msgstr "interne: mauvaise spécification privilégiée RISC-V (%s)"
-#: config/tc-riscv.c:3868
+#: config/tc-riscv.c:4420
msgid "architecture elf attributes must set before any instructions"
msgstr "les attributs d'architecture elf doivent apparaître avant toute instruction"
-#: config/tc-riscv.c:3886
+#: config/tc-riscv.c:4438
msgid "privileged elf attributes must set before any instructions"
msgstr "les attributs d'architecture elf doivent apparaître avant toute instruction"
+#: config/tc-riscv.c:4460
+msgid "missing symbol name for .variant_cc directive"
+msgstr "nom de symbole manquant pour la directive .variant_cc"
+
#: config/tc-rl78.c:213
msgid "16-bit relocation used in 8-bit operand"
msgstr "Réadressage 16 bits utilisé sur un opérande 8 bits"
@@ -16432,26 +16771,21 @@ msgstr "dépassement négatif de la pile .machinemode"
msgid "invalid machine mode `%s'"
msgstr "mode machine « %s » invalide"
-#: config/tc-s390.c:2258
-#, c-format
-msgid "cannot emit relocation %s against subsy symbol %s"
-msgstr "ne peut produire un réadressage %s sur le symbole subsy %s"
-
-#: config/tc-s390.c:2375
+#: config/tc-s390.c:2372
msgid "unsupported relocation type"
msgstr "type de réadressage non supporté"
-#: config/tc-s390.c:2430
+#: config/tc-s390.c:2427
#, c-format
msgid "cannot emit PC relative %s relocation%s%s"
msgstr "ne peut produire le réadressage %s relatif au PC%s%s"
-#: config/tc-s390.c:2569
+#: config/tc-s390.c:2566
#, c-format
msgid "Gas failure, reloc type %s\n"
msgstr "Échec de GAS, type de réadressage %s\n"
-#: config/tc-s390.c:2571
+#: config/tc-s390.c:2568
#, c-format
msgid "Gas failure, reloc type #%i\n"
msgstr "Échec de GAS, type de réadressage #%i\n"
@@ -17419,7 +17753,7 @@ msgstr "Capacité matérielle « %s » pas activée pour « %s »"
#: config/tc-sparc.c:3646 config/tc-sparc.c:3653 config/tc-sparc.c:3660
#: config/tc-sparc.c:3667 config/tc-sparc.c:3674 config/tc-sparc.c:3683
#: config/tc-sparc.c:3695 config/tc-sparc.c:3706 config/tc-sparc.c:3728
-#: config/tc-sparc.c:3752 write.c:1189
+#: config/tc-sparc.c:3752 write.c:1184
msgid "relocation overflow"
msgstr "débordement de réadressage"
@@ -17584,7 +17918,7 @@ msgstr "lrlive « %lu » invalide"
msgid "Relaxation should never occur"
msgstr "La relaxe ne devrait jamais se produire"
-#: config/tc-spu.c:1008
+#: config/tc-spu.c:1005
#, c-format
msgid "Relocation doesn't fit. (relocation value = 0x%lx)"
msgstr "Le réadressage ne tient pas dans l'espace (valeur de réadressage = 0x%lx)."
@@ -17767,231 +18101,231 @@ msgstr "l'instruction LDP a besoin d'un opérande 24 bits"
msgid "first operand is too large for a 24-bit displacement"
msgstr "le premier opérande est trop grand pour un déplacement de 24 bits"
-#: config/tc-tic4x.c:389
+#: config/tc-tic4x.c:391
msgid "Nan, using zero."
msgstr "Nan, utilise zéro."
-#: config/tc-tic4x.c:507
+#: config/tc-tic4x.c:509
#, c-format
msgid "Cannot represent exponent in %d bits"
msgstr "Ne peut représenter l'exposant sur %d bits"
-#: config/tc-tic4x.c:590 config/tc-tic4x.c:600
+#: config/tc-tic4x.c:592 config/tc-tic4x.c:602
msgid "Invalid floating point number"
msgstr "Nombre en virgule flottante invalide"
-#: config/tc-tic4x.c:719
+#: config/tc-tic4x.c:721
msgid "Comma expected\n"
msgstr "Virgule attendue\n"
-#: config/tc-tic4x.c:752 config/tc-tic54x.c:470
+#: config/tc-tic4x.c:754 config/tc-tic54x.c:470
msgid ".bss size argument missing\n"
msgstr "argument taille manquant dans .bss\n"
-#: config/tc-tic4x.c:760
+#: config/tc-tic4x.c:762
#, c-format
msgid ".bss size %ld < 0!"
msgstr "taille .bss %ld < 0 !"
-#: config/tc-tic4x.c:893
+#: config/tc-tic4x.c:895
msgid "Non-constant symbols not allowed\n"
msgstr "Symboles non constant pas permis\n"
-#: config/tc-tic4x.c:924
+#: config/tc-tic4x.c:926
msgid "Symbol missing\n"
msgstr "Symbole manquant\n"
#. Skip null symbol terminator.
-#: config/tc-tic4x.c:972
+#: config/tc-tic4x.c:974
msgid ".sect: subsection name ignored"
msgstr ".sect: nom de sous-section ignoré"
-#: config/tc-tic4x.c:1000 config/tc-tic4x.c:1101 config/tc-tic54x.c:1427
+#: config/tc-tic4x.c:1002 config/tc-tic4x.c:1103 config/tc-tic54x.c:1427
#, c-format
msgid "Error setting flags for \"%s\": %s"
msgstr "Erreur lors de l'initialisation des fanions de « %s »: %s"
-#: config/tc-tic4x.c:1032
+#: config/tc-tic4x.c:1034
msgid ".set syntax invalid\n"
msgstr "syntaxe erronée pour .set\n"
-#: config/tc-tic4x.c:1090
+#: config/tc-tic4x.c:1092
msgid ".usect: non-zero alignment flag ignored"
msgstr ".usect: fanion d'alignement non nul ignoré"
-#: config/tc-tic4x.c:1121
+#: config/tc-tic4x.c:1123
#, c-format
msgid "This assembler does not support processor generation %ld"
msgstr "Cet assembleur ne supporte pas la génération %ld du processeur"
-#: config/tc-tic4x.c:1125
+#: config/tc-tic4x.c:1127
msgid "Changing processor generation on fly not supported..."
msgstr "Le changement à la volée de la génération du processeur n'est pas supporté..."
-#: config/tc-tic4x.c:1412
+#: config/tc-tic4x.c:1414
msgid "Auxiliary register AR0--AR7 required for indirect"
msgstr "Registre auxiliaire AR0--AR7 requis pour l'indirection"
-#: config/tc-tic4x.c:1426
+#: config/tc-tic4x.c:1428
#, c-format
msgid "Bad displacement %d (require 0--255)\n"
msgstr "Mauvais déplacement %d (exige 0--255)\n"
-#: config/tc-tic4x.c:1444
+#: config/tc-tic4x.c:1446
msgid "Index register IR0,IR1 required for displacement"
msgstr "Registre d'index IR0,IR1 requis pour un déplacement"
-#: config/tc-tic4x.c:1512
+#: config/tc-tic4x.c:1514
msgid "Expecting a register name"
msgstr "Nom de registre attendu"
-#: config/tc-tic4x.c:1524 config/tc-tic4x.c:1547 config/tc-tic4x.c:1613
+#: config/tc-tic4x.c:1526 config/tc-tic4x.c:1549 config/tc-tic4x.c:1615
msgid "Number too large"
msgstr "Nombre trop grand"
-#: config/tc-tic4x.c:1537 config/tc-tic4x.c:1560
+#: config/tc-tic4x.c:1539 config/tc-tic4x.c:1562
msgid "Expecting a constant value"
msgstr "Valeur constante attendue"
-#: config/tc-tic4x.c:1568
+#: config/tc-tic4x.c:1570
#, c-format
msgid "Bad direct addressing construct %s"
msgstr "Construction erronée d'adressage indirect %s"
-#: config/tc-tic4x.c:1572
+#: config/tc-tic4x.c:1574
#, c-format
msgid "Direct value of %ld is not suitable"
msgstr "Valeur directe de %ld n'est pas convenable"
-#: config/tc-tic4x.c:1596
+#: config/tc-tic4x.c:1598
msgid "Unknown indirect addressing mode"
msgstr "Mode d'adressage indirect inconnu"
-#: config/tc-tic4x.c:1693
+#: config/tc-tic4x.c:1695
#, c-format
msgid "Immediate value of %ld is too large for ldf"
msgstr "Valeur immédiate de %ld est trop grande pour ldf"
-#: config/tc-tic4x.c:1733
+#: config/tc-tic4x.c:1735
msgid "Destination register must be ARn"
msgstr "Registre de destination doit être ARn"
-#: config/tc-tic4x.c:1752 config/tc-tic4x.c:2125 config/tc-tic4x.c:2184
+#: config/tc-tic4x.c:1754 config/tc-tic4x.c:2127 config/tc-tic4x.c:2186
#, c-format
msgid "Immediate value of %ld is too large"
msgstr "Valeur immédiate de %ld est trop grande"
-#: config/tc-tic4x.c:1781 config/tc-tic4x.c:1986
+#: config/tc-tic4x.c:1783 config/tc-tic4x.c:1988
msgid "Invalid indirect addressing mode"
msgstr "Mode d'adressage indirect invalide"
-#: config/tc-tic4x.c:1805 config/tc-tic4x.c:1845 config/tc-tic4x.c:2036
-#: config/tc-tic4x.c:2058
+#: config/tc-tic4x.c:1807 config/tc-tic4x.c:1847 config/tc-tic4x.c:2038
+#: config/tc-tic4x.c:2060
msgid "Register must be Rn"
msgstr "Le registre doit être Rn"
-#: config/tc-tic4x.c:1859 config/tc-tic4x.c:1929 config/tc-tic4x.c:1943
+#: config/tc-tic4x.c:1861 config/tc-tic4x.c:1931 config/tc-tic4x.c:1945
msgid "Register must be R0--R7"
msgstr "Le registre doit être R0--R7"
-#: config/tc-tic4x.c:1883 config/tc-tic4x.c:1911
+#: config/tc-tic4x.c:1885 config/tc-tic4x.c:1913
#, c-format
msgid "Invalid indirect addressing mode displacement %d"
msgstr "Déplacement %d invalide pour le mode d'adressage indirect"
-#: config/tc-tic4x.c:1957
+#: config/tc-tic4x.c:1959
msgid "Destination register must be R2 or R3"
msgstr "Le registre de destination doit être R2 ou R3"
-#: config/tc-tic4x.c:1971
+#: config/tc-tic4x.c:1973
msgid "Destination register must be R0 or R1"
msgstr "Le registre de destination doit être R0 ou R1"
-#: config/tc-tic4x.c:2008
+#: config/tc-tic4x.c:2010
#, c-format
msgid "Displacement value of %ld is too large"
msgstr "Valeur de déplacement %ld est trop grande"
-#: config/tc-tic4x.c:2069 config/tc-tic4x.c:2200
+#: config/tc-tic4x.c:2071 config/tc-tic4x.c:2202
msgid "Floating point number not valid in expression"
msgstr "Nombre en virgule flottante pas valable dans l'expression"
-#: config/tc-tic4x.c:2083
+#: config/tc-tic4x.c:2085
#, c-format
msgid "Signed immediate value %ld too large"
msgstr "Valeur immédiate signée %ld est trop grande"
-#: config/tc-tic4x.c:2146
+#: config/tc-tic4x.c:2148
#, c-format
msgid "Unsigned immediate value %ld too large"
msgstr "Valeur immédiate non signée %ld est trop grande"
-#: config/tc-tic4x.c:2214
+#: config/tc-tic4x.c:2216
#, c-format
msgid "Immediate value %ld too large"
msgstr "Valeur immédiate %ld est trop grande"
-#: config/tc-tic4x.c:2233 config/tc-tic4x.c:2261
+#: config/tc-tic4x.c:2235 config/tc-tic4x.c:2263
msgid "Register must be ivtp or tvtp"
msgstr "Le registre doit être ivtp ou tvtp"
-#: config/tc-tic4x.c:2247
+#: config/tc-tic4x.c:2249
msgid "Register must be address register"
msgstr "Le registre doit être un registre d'adresse"
-#: config/tc-tic4x.c:2320
+#: config/tc-tic4x.c:2322
msgid "Source and destination register should not be equal"
msgstr "Les registres source et destination ne devraient pas être égaux"
-#: config/tc-tic4x.c:2335
+#: config/tc-tic4x.c:2337
msgid "Equal parallel destination registers, one result will be discarded"
msgstr "Registres de destination parallèle égaux, un résultat sera abandonné"
-#: config/tc-tic4x.c:2376
+#: config/tc-tic4x.c:2378
msgid "Too many operands scanned"
msgstr "Trop d'opérandes passés en revue"
-#: config/tc-tic4x.c:2407
+#: config/tc-tic4x.c:2409
msgid "Parallel opcode cannot contain more than two instructions"
msgstr "Un opcode parallèle ne peut pas contenir plus de deux instructions"
-#: config/tc-tic4x.c:2481
+#: config/tc-tic4x.c:2483
#, c-format
msgid "Invalid operands for %s"
msgstr "Opérandes invalides pour %s"
-#: config/tc-tic4x.c:2484
+#: config/tc-tic4x.c:2486
#, c-format
msgid "Invalid instruction %s"
msgstr "Instruction %s erronée"
-#: config/tc-tic4x.c:2636
+#: config/tc-tic4x.c:2638
#, c-format
msgid "Bad relocation type: 0x%02x"
msgstr "Type de réadressage erroné: 0x%02x"
-#: config/tc-tic4x.c:2694
+#: config/tc-tic4x.c:2696
#, c-format
msgid "Unsupported processor generation %d"
msgstr "Génération %d du processeur n'est pas supportée"
-#: config/tc-tic4x.c:2702
+#: config/tc-tic4x.c:2704
msgid "Option -b is depreciated, please use -mbig"
msgstr "Option -b est dépréciée, veuillez utiliser -mbig"
-#: config/tc-tic4x.c:2709
+#: config/tc-tic4x.c:2711
msgid "Option -p is depreciated, please use -mmemparm"
msgstr "Option -p est dépréciée, veuillez utiliser -mmemparm"
-#: config/tc-tic4x.c:2716
+#: config/tc-tic4x.c:2718
msgid "Option -r is depreciated, please use -mregparm"
msgstr "Option -r est dépréciée, veuillez utiliser -mregparm"
-#: config/tc-tic4x.c:2723
+#: config/tc-tic4x.c:2725
msgid "Option -s is depreciated, please use -msmall"
msgstr "Option -s est dépréciée, veuillez utiliser -msmall"
-#: config/tc-tic4x.c:2752
+#: config/tc-tic4x.c:2754
#, c-format
msgid ""
"\n"
@@ -18036,12 +18370,12 @@ msgstr ""
" -mlowpower activer le support LOPOWER et MAXSPEED\n"
" -menhanced activer le support des opcodes étendus\n"
-#: config/tc-tic4x.c:2797
+#: config/tc-tic4x.c:2799
#, c-format
msgid "Label \"$%d\" redefined"
msgstr "Étiquette \"$%d\" redéfinie"
-#: config/tc-tic4x.c:3007
+#: config/tc-tic4x.c:3009
#, c-format
msgid "Reloc %d not supported by object file format"
msgstr "Réadressage %d n'est pas supporté dans le format du fichier objet"
@@ -19292,141 +19626,141 @@ msgstr "réadressage hi0() utilisé sur une instruction qui ne le supporte pas"
msgid "hi() relocation used on an instruction which does not support it"
msgstr "réadressage hi() utilisé sur une instruction qui ne le supporte pas"
-#: config/tc-v850.c:2036
+#: config/tc-v850.c:2032
msgid "lo() relocation used on an instruction which does not support it"
msgstr "réadressage lo() utilisé sur une instruction qui ne le supporte pas"
-#: config/tc-v850.c:2046
+#: config/tc-v850.c:2043
msgid "ctoff() is not supported by the rh850 ABI. Use -mgcc-abi instead"
msgstr "ctoff() n'est pas supporté par l'ABI rh850. Utilisez plutôt -mgcc-abi"
-#: config/tc-v850.c:2062
+#: config/tc-v850.c:2059
msgid "ctoff() relocation used on an instruction which does not support it"
msgstr "réadressage ctoff() utilisé sur une instruction qui ne le supporte pas"
-#: config/tc-v850.c:2081
+#: config/tc-v850.c:2078
msgid "sdaoff() relocation used on an instruction which does not support it"
msgstr "réadressage sdaoff() utilisé sur une instruction qui ne le supporte pas"
-#: config/tc-v850.c:2100
+#: config/tc-v850.c:2097
msgid "zdaoff() relocation used on an instruction which does not support it"
msgstr "réadressage zdaoff() utilisé sur une instruction qui ne le supporte pas"
-#: config/tc-v850.c:2132
+#: config/tc-v850.c:2129
msgid "tdaoff() relocation used on an instruction which does not support it"
msgstr "réadressage tdaoff() utilisé sur une instruction qui ne le supporte pas"
-#: config/tc-v850.c:2273
+#: config/tc-v850.c:2270
#, c-format
msgid "operand out of range (%d is not between %d and %d)"
msgstr "opérande hors limite (%d n'est pas entre %d et %d)"
-#: config/tc-v850.c:2356
+#: config/tc-v850.c:2353
msgid "st/ld offset 23 instruction was disabled ."
msgstr "l'instruction st/ld offset 23 a été désactivée."
-#: config/tc-v850.c:2365
+#: config/tc-v850.c:2362
msgid "Target processor does not support this instruction."
msgstr "Le processeur cible ne supporte pas cette instruction"
-#: config/tc-v850.c:2477 config/tc-v850.c:2487 config/tc-v850.c:2508
-#: config/tc-v850.c:2522 config/tc-v850.c:2528 config/tc-v850.c:2552
-#: config/tc-v850.c:2558 config/tc-v850.c:2565 config/tc-v850.c:2579
-#: config/tc-v850.c:2593 config/tc-v850.c:2599 config/tc-v850.c:2936
+#: config/tc-v850.c:2474 config/tc-v850.c:2484 config/tc-v850.c:2505
+#: config/tc-v850.c:2519 config/tc-v850.c:2525 config/tc-v850.c:2549
+#: config/tc-v850.c:2555 config/tc-v850.c:2562 config/tc-v850.c:2576
+#: config/tc-v850.c:2590 config/tc-v850.c:2596 config/tc-v850.c:2933
msgid "immediate operand is too large"
msgstr "opérande immédiat est trop grand"
-#: config/tc-v850.c:2494
+#: config/tc-v850.c:2491
#, c-format
msgid "AAARG -> unhandled constant reloc: %d"
msgstr "AAARG -> réadressage de constante non traité: %d"
-#: config/tc-v850.c:2629 config/tc-v850.c:2640
+#: config/tc-v850.c:2626 config/tc-v850.c:2637
msgid "constant too big to fit into instruction"
msgstr "constant trop grande pour être insérée dans l'instruction"
-#: config/tc-v850.c:2715
+#: config/tc-v850.c:2712
msgid "odd number cannot be used here"
msgstr "nombre impaire ne peut être utilisé ici"
-#: config/tc-v850.c:2760
+#: config/tc-v850.c:2757
msgid "invalid register name"
msgstr "nom de registre invalide"
-#: config/tc-v850.c:2766
+#: config/tc-v850.c:2763
msgid "register r0 cannot be used here"
msgstr "registre r0 ne peut être utilisé ici"
-#: config/tc-v850.c:2772
+#: config/tc-v850.c:2769
msgid "odd register cannot be used here"
msgstr "registre impaire ne peut être utilisé ici"
-#: config/tc-v850.c:2781
+#: config/tc-v850.c:2778
msgid "invalid system register name"
msgstr "nom de registre système invalide"
-#: config/tc-v850.c:2795
+#: config/tc-v850.c:2792
msgid "expected EP register"
msgstr "registre EP attendu"
-#: config/tc-v850.c:2812 config/tc-v850.c:2825
+#: config/tc-v850.c:2809 config/tc-v850.c:2822
msgid "invalid condition code name"
msgstr "nom du code de condition invalide"
-#: config/tc-v850.c:2818
+#: config/tc-v850.c:2815
msgid "condition sa cannot be used here"
msgstr "la condition sa ne peut être utilisée ici"
-#: config/tc-v850.c:2831
+#: config/tc-v850.c:2828
msgid "invalid cache operation name"
msgstr "nom d'opération de cache invalide"
-#: config/tc-v850.c:2836
+#: config/tc-v850.c:2833
msgid "invalid pref operation name"
msgstr "nom d'opération pref invalide"
-#: config/tc-v850.c:2841
+#: config/tc-v850.c:2838
msgid "invalid vector register name"
msgstr "nom de registre vectoriel invalide"
-#: config/tc-v850.c:2879
+#: config/tc-v850.c:2876
msgid "syntax error: value is missing before the register name"
msgstr "erreur de syntaxe: valeur manquante avant le nom du registre"
-#: config/tc-v850.c:2881
+#: config/tc-v850.c:2878
msgid "syntax error: register not expected"
msgstr "erreur de syntaxe: registre inattendu"
-#: config/tc-v850.c:2895
+#: config/tc-v850.c:2892
msgid "syntax error: system register not expected"
msgstr "erreur de syntaxe: registre système inattendu"
-#: config/tc-v850.c:2900 config/tc-v850.c:2905
+#: config/tc-v850.c:2897 config/tc-v850.c:2902
msgid "syntax error: condition code not expected"
msgstr "erreur de syntaxe: code de condition inattendu"
-#: config/tc-v850.c:2910
+#: config/tc-v850.c:2907
msgid "syntax error: vector register not expected"
msgstr "erreur de syntaxe: registre vectoriel inattendu"
-#: config/tc-v850.c:2920
+#: config/tc-v850.c:2917
msgid "immediate 0 cannot be used here"
msgstr "immédiat 0 ne peut être utilisé ici"
# This message is related to the bit size of the operand but the original message is confusing.
-#: config/tc-v850.c:2944
+#: config/tc-v850.c:2941
msgid "immediate operand is not match"
msgstr "opérande immédiat ne correspond pas"
-#: config/tc-v850.c:2957
+#: config/tc-v850.c:2954
msgid "displacement is too large"
msgstr "déplacement trop grand"
-#: config/tc-v850.c:2975 config/tc-xtensa.c:13078
+#: config/tc-v850.c:2972 config/tc-xtensa.c:13078
msgid "invalid operand"
msgstr "opérande invalide"
-#: config/tc-v850.c:3087
+#: config/tc-v850.c:3084
msgid "loop: 32-bit displacement not supported"
msgstr "boucle: déplacement 32 bits non supporté"
@@ -19751,7 +20085,7 @@ msgstr "signature d'appel manquante"
msgid "missing table index"
msgstr "index de table manquant"
-#: config/tc-wasm32.c:726 config/tc-z80.c:3695 read.c:3878
+#: config/tc-wasm32.c:726 config/tc-z80.c:3695 read.c:3966
#, c-format
msgid "junk at end of line, first unrecognized character is `%c'"
msgstr "rebut à la fin de la ligne, premier caractère non reconnu est « %c »"
@@ -21005,55 +21339,55 @@ msgstr "ouverture CFI à la fin du fichier; directive .cfi_endproc manquante"
msgid "CFI is not supported for this target"
msgstr "CFI n'est pas supporté pour cette cible"
-#: dwarf2dbg.c:379 dwarf2dbg.c:2944
+#: dwarf2dbg.c:378 dwarf2dbg.c:3048
msgid "view number mismatch"
msgstr "le numéro de vue ne concorde pas"
-#: dwarf2dbg.c:655 dwarf2dbg.c:1112
+#: dwarf2dbg.c:683 dwarf2dbg.c:1204
#, c-format
msgid "file number %lu is too big"
msgstr "le numéro de fichier %lu est trop grand"
-#: dwarf2dbg.c:821
+#: dwarf2dbg.c:896
#, c-format
msgid "file table slot %u is already occupied by a different file (%s%s%s vs %s%s%s)"
msgstr "l'emplacement %u dans la table de fichiers est déjà occupé par un fichier différent (%s%s%s vs %s%s%s)"
-#: dwarf2dbg.c:1062 dwarf2dbg.c:1164
+#: dwarf2dbg.c:1152 dwarf2dbg.c:1244
msgid "file number less than one"
msgstr "le numéro du fichier est plus petit que un"
-#: dwarf2dbg.c:1097
+#: dwarf2dbg.c:1187
msgid "md5 value too small or not a constant"
msgstr "la valeur md5 est trop petite ou pas une constante"
-#: dwarf2dbg.c:1171 dwarf2dbg.c:2194
+#: dwarf2dbg.c:1251 dwarf2dbg.c:2289
#, c-format
msgid "unassigned file number %ld"
msgstr "numéro de fichier %ld non assigné"
-#: dwarf2dbg.c:1240
+#: dwarf2dbg.c:1325
msgid "is_stmt value not 0 or 1"
msgstr "valeur de is_stmt n'est pas 0 ou 1"
-#: dwarf2dbg.c:1252
+#: dwarf2dbg.c:1337
msgid "isa number less than zero"
msgstr "le numéro isa est plus petit que un"
-#: dwarf2dbg.c:1264
+#: dwarf2dbg.c:1349
msgid "discriminator less than zero"
msgstr "discrimateur plus petit que zéro"
-#: dwarf2dbg.c:1283
+#: dwarf2dbg.c:1368
msgid "numeric view can only be asserted to zero"
msgstr "une vue numérique peut uniquement être affirmée à zéro"
-#: dwarf2dbg.c:1321
+#: dwarf2dbg.c:1406
#, c-format
msgid "unknown .loc sub-directive `%s'"
msgstr "sous directive .loc inconnue « %s »"
-#: dwarf2dbg.c:2307
+#: dwarf2dbg.c:2402
msgid "internal error: unknown dwarf2 format"
msgstr "erreur interne: format DWARF2 inconnu"
@@ -21233,11 +21567,11 @@ msgstr ".end ou .bend manquant à la fin du fichier"
msgid "GP prologue size exceeds field size, using 0 instead"
msgstr "taille du prologue GP excède la taille du champ, utilise 0 à la place"
-#: expr.c:73 read.c:3944
+#: expr.c:73 read.c:4032
msgid "bignum invalid"
msgstr "grand nombre invalide"
-#: expr.c:75 read.c:3946 read.c:4452 read.c:5248
+#: expr.c:75 read.c:4034 read.c:4540 read.c:5315
msgid "floating point number invalid"
msgstr "nombre flottant invalide"
@@ -21280,7 +21614,7 @@ msgstr "« %c » trouvé, attendait: « %c »"
msgid "missing '%c'"
msgstr "« %c » manquant"
-#: expr.c:1007 read.c:4732
+#: expr.c:1007 read.c:4825
msgid "EBCDIC constants are not supported"
msgstr "Les constantes EBCDIC ne sont pas supportées."
@@ -21318,22 +21652,27 @@ msgstr "opérande de droite est un grand nombre; entier 0 assumé"
msgid "right operand is a float; integer 0 assumed"
msgstr "opérande de droite est un nombre flottant; entier 0 assumé"
-#: expr.c:1948 symbols.c:1560
+#: expr.c:1948 symbols.c:1590
msgid "division by zero"
msgstr "division par zéro"
-#: expr.c:1954 symbols.c:1571
+#: expr.c:1954 symbols.c:1601
msgid "shift count"
msgstr "nombre de décalages"
-#: expr.c:2084
+#: expr.c:2089
msgid "operation combines symbols in different segments"
msgstr "operation combine des symboles dans différents segments"
-#: expr.c:2409
+#: expr.c:2412
msgid "missing closing '\"'"
msgstr "« \" » fermant manquant"
+#: expr.c:2440
+#, c-format
+msgid "'\\%c' in quoted symbol name; behavior may change in the future"
+msgstr "« \\%c » dans le nom de symbole entre guillemets ; le comportement peut changer dans le future"
+
#: frags.c:60
msgid "attempt to allocate data in absolute section"
msgstr "tentative d'allouer des données dans une section absolue"
@@ -21342,7 +21681,7 @@ msgstr "tentative d'allouer des données dans une section absolue"
msgid "attempt to allocate data in common section"
msgstr "tentative d'allouer des données dans une section commune"
-#: frags.c:115 write.c:1480
+#: frags.c:115 write.c:1509
#, c-format
msgid "can't extend frag %lu char"
msgid_plural "can't extend frag %lu chars"
@@ -21631,18 +21970,19 @@ msgstr "Erreur interne à %s:%d.\n"
msgid "Please report this bug.\n"
msgstr "SVP rapporter cette anomalie.\n"
-#: messages.c:384
+#: messages.c:393
#, c-format
-msgid "%s out of domain (%"
-msgstr "%s hors du domaine (%"
+msgid "%s out of domain (%s is not a multiple of %s)"
+msgstr "%s hors du domaine (%s n'est pas un multiple de %s)"
-#: messages.c:401
+#. xgettext:c-format.
+#: messages.c:412
#, c-format
-msgid "%s out of range (%"
-msgstr "%s hors de la plage (%"
+msgid "%s out of range (%s is not between %s and %s)"
+msgstr "%s hors limite (%s n'est pas entre %s et %s)"
#. xgettext:c-format.
-#: messages.c:423
+#: messages.c:426
#, c-format
msgid "%s out of range (0x%s is not between 0x%s and 0x%s)"
msgstr "%s hors limite (0x%s n'est pas entre 0x%s et 0x%s)"
@@ -21681,11 +22021,11 @@ msgstr "la séquence .bundle_lock est à %u octets mais la limite de .bundle_ali
msgid "single instruction is %u bytes long, but .bundle_align_mode limit is %u bytes"
msgstr "l'instruction simple occupe %u octets mais la limite de .bundle_align_mode est %u octets"
-#: read.c:823 read.c:2877 read.c:3448
+#: read.c:823 read.c:2877 read.c:3471
msgid "ignoring fill value in absolute section"
msgstr "ignore la valeur de remplissage dans la section absolue"
-#: read.c:825 read.c:2892 read.c:3487
+#: read.c:825 read.c:2892 read.c:3510
#, c-format
msgid "ignoring fill value in section `%s'"
msgstr "ignore la valeur de remplissage dans la section « %s »"
@@ -21861,239 +22201,240 @@ msgstr "compteur négatif pour %s – ignorée"
msgid "%s without %s"
msgstr "%s sans %s"
-#: read.c:3401
+#: read.c:3424
msgid "unsupported variable size or fill value"
msgstr "taille de variable ou valeur de remplissage non supportée"
-#: read.c:3409
+#: read.c:3432
#, c-format
msgid "size value for space directive too large: %lx"
msgstr "la valeur de taille pour la directive d'espace est trop grande: %lx"
-#: read.c:3438
+#: read.c:3461
msgid ".space repeat count is zero, ignored"
msgstr ".space compteur de répétition est zéro, ignoré"
-#: read.c:3440
+#: read.c:3463
msgid ".space repeat count is negative, ignored"
msgstr ".space compteur de répétition est négatif, ignoré"
-#: read.c:3471
+#: read.c:3494
msgid "space allocation too complex in absolute section"
msgstr "allocation d'espace trop complexe dans la section absolue"
-#: read.c:3477
+#: read.c:3500
msgid "space allocation too complex in common section"
msgstr "allocation d'espace trop complexe dans la section commune"
-#: read.c:3595
+#: read.c:3618
msgid "unsupported variable nop control in .nops directive"
msgstr "contrôle nop variable non supporté dans la directive .nops"
-#: read.c:3601
+#: read.c:3624
msgid "negative nop control byte, ignored"
msgstr "octet de contrôle nop négatif, ignoré"
-#: read.c:3831
+#: read.c:3693
+#, c-format
+msgid "unknown floating type '%c'"
+msgstr "type de virgule flottante inconnu « %c »"
+
+#: read.c:3919
#, c-format
msgid "%s: would close weakref loop: %s"
msgstr "%s: fermerait la boucle weakref: %s"
-#: read.c:3881
+#: read.c:3969
#, c-format
msgid "junk at end of line, first unrecognized character valued 0x%x"
msgstr "rebut à la fin de la ligne, premier caractère non reconnu évalué en 0x%x"
-#: read.c:4010 write.c:2391
+#: read.c:4098 write.c:2422
#, c-format
msgid "`%s' can't be equated to common symbol `%s'"
msgstr "« %s » ne peut être rendu équivalent au symbole commun « %s »"
-#: read.c:4138
+#: read.c:4226
msgid "unexpected `\"' in expression"
msgstr "« \" » inattendue dans l'expression"
-#: read.c:4151
+#: read.c:4239
msgid "rva without symbol"
msgstr "rva sans symbole"
-#: read.c:4220
+#: read.c:4308
msgid "missing or bad offset expression"
msgstr "expression d'offset manquante ou erronée"
-#: read.c:4244
+#: read.c:4332
msgid "missing reloc type"
msgstr "type de réadressage manquant"
-#: read.c:4268
+#: read.c:4356
msgid "unrecognized reloc type"
msgstr "type de réadressage non reconnu"
-#: read.c:4284
+#: read.c:4372
msgid "bad reloc expression"
msgstr "expression de réadressage erronée"
-#: read.c:4446 read.c:5242
+#: read.c:4534 read.c:5309
msgid "zero assumed for missing expression"
msgstr "zéro assumé pour l'expression manquante"
-#: read.c:4466 read.c:5271
+#: read.c:4554 read.c:5338
msgid "attempt to store value in absolute section"
msgstr "tentative de stockage d'une valeur dans une section absolue"
-#: read.c:4473 read.c:5277
+#: read.c:4561 read.c:5344
#, c-format
msgid "attempt to store non-zero value in section `%s'"
msgstr "tentative de stocker une valeur non nulle dans la section « %s »"
#. Leading bits contain both 0s & 1s.
-#: read.c:4550
-msgid "value 0x%"
-msgstr "valeur 0x%"
+#: read.c:4644
+#, c-format
+msgid "value 0x%s truncated to 0x%s"
+msgstr "valeur 0x%s tronquée à 0x%s"
-#: read.c:4594
+#: read.c:4687
#, c-format
msgid "bignum truncated to %d byte"
msgid_plural "bignum truncated to %d bytes"
msgstr[0] "grand nombre tronqué à %d octet"
msgstr[1] "grand nombre tronqué à %d octets"
-#: read.c:4803 read.c:4980
+#: read.c:4896 read.c:5047
msgid "unresolvable or nonpositive repeat count; using 1"
msgstr "compteur de répétition ne peut être résolu ou est non positif; utilise 1"
-#: read.c:4852
-#, c-format
-msgid "unknown floating type type '%c'"
-msgstr "type de virgule flottante inconnu « %c »"
-
-#: read.c:4874
+#: read.c:4939
msgid "floating point constant too large"
msgstr "constante en virgule flottante trop grande"
-#: read.c:4937
+#: read.c:5004
msgid "attempt to store float in absolute section"
msgstr "tentative de stocker un nombre décimal dans une section absolue"
-#: read.c:4944
+#: read.c:5011
#, c-format
msgid "attempt to store float in section `%s'"
msgstr "tentative de stocker un nombre décimal dans la section « %s »"
-#: read.c:5360
+#: read.c:5427
#, c-format
msgid "attempt to store non-empty string in section `%s'"
msgstr "tentative de stocker une chaîne non vide dans la section « %s »"
-#: read.c:5422
+#: read.c:5489
msgid "strings must be placed into a section"
msgstr "chaînes doivent être placées dans une section"
-#: read.c:5489
+#: read.c:5556
msgid "expected <nn>"
msgstr "<nn> attendu"
#. To be compatible with BSD 4.2 as: give the luser a linefeed!!
-#: read.c:5530 read.c:5617
+#: read.c:5597 read.c:5684
msgid "unterminated string; newline inserted"
msgstr "chaîne non terminée; saut de ligne inséré"
-#: read.c:5631
+#: read.c:5698
msgid "bad escaped character in string"
msgstr "mauvais caractère d'échappement dans la chaîne"
-#: read.c:5655
+#: read.c:5722
msgid "expected address expression"
msgstr "expression d'adresse attendue"
-#: read.c:5674
+#: read.c:5741
#, c-format
msgid "symbol \"%s\" undefined; zero assumed"
msgstr "symbole « %s » est indéfini; zéro assumé"
-#: read.c:5677
+#: read.c:5744
msgid "some symbol undefined; zero assumed"
msgstr "quelques symboles sont non définis; zéro assumé"
-#: read.c:5711
+#: read.c:5778
msgid "this string may not contain '\\0'"
msgstr "cette chaîne ne peut pas contenir « \\0 »"
-#: read.c:5748
+#: read.c:5815
msgid "missing string"
msgstr "chaîne manquante"
-#: read.c:5839
+#: read.c:5906
#, c-format
msgid ".incbin count zero, ignoring `%s'"
msgstr ".incbin a un compte à zéro, « %s » est ignoré"
-#: read.c:5865
+#: read.c:5932
#, c-format
msgid "file not found: %s"
msgstr "fichier non trouvé: %s"
-#: read.c:5879
+#: read.c:5946
#, c-format
msgid "unable to include `%s'"
msgstr "impossible d'inclure « %s »"
-#: read.c:5888
+#: read.c:5955
#, c-format
msgid "seek to end of .incbin file failed `%s'"
msgstr "recherche jusqu'à la fin de .incbin a échoué « %s »"
-#: read.c:5899
+#: read.c:5966
#, c-format
msgid "skip (%ld) or count (%ld) invalid for file size (%ld)"
msgstr "escamotage (%ld) ou compte (%ld) invalide pour la taille du fichier (%ld)"
-#: read.c:5906
+#: read.c:5973
#, c-format
msgid "could not skip to %ld in file `%s'"
msgstr "ne peut escamoter jusqu'à %ld dans le fichier « %s »"
-#: read.c:5915
+#: read.c:5982
#, c-format
msgid "truncated file `%s', %ld of %ld bytes read"
msgstr "fichier « %s » tronqué, %ld de %ld octets lus"
-#: read.c:6072
+#: read.c:6139
msgid "missing .func"
msgstr ".func manquant"
-#: read.c:6089
+#: read.c:6156
msgid ".endfunc missing for previous .func"
msgstr ".endfunc manquant pour la déclaration .func précédente"
-#: read.c:6148
+#: read.c:6215
#, c-format
msgid ".bundle_align_mode alignment too large (maximum %u)"
msgstr "alignement de .bundle_align_mode trop grand (%u au maximum)"
-#: read.c:6153
+#: read.c:6220
msgid "cannot change .bundle_align_mode inside .bundle_lock"
msgstr "ne peut changer .bundle_align_mode à l'intérieur de .bundle_lock"
-#: read.c:6167
+#: read.c:6234
msgid ".bundle_lock is meaningless without .bundle_align_mode"
msgstr ".bundle_lock n'a pas de sens sans .bundle_align_mode"
-#: read.c:6188
+#: read.c:6255
msgid ".bundle_unlock without preceding .bundle_lock"
msgstr ".bundle_unlock sans .bundle_lock précédent"
-#: read.c:6201
+#: read.c:6268
#, c-format
msgid ".bundle_lock sequence is %u bytes, but bundle size is only %u bytes"
msgstr "la séquence .bundle_lock occupe %u octets mais la taille du paquet est seulement %u octets"
-#: read.c:6300
+#: read.c:6367
#, c-format
msgid "missing closing `%c'"
msgstr "« %c » fermant manquant"
-#: read.c:6302
+#: read.c:6369
msgid "stray `\\'"
msgstr "« \\ » superflu"
@@ -22124,236 +22465,300 @@ msgstr ".stab%c: champ de description '%x' trop grand, essayez un format de déb
msgid "comma missing in .xstabs"
msgstr "virgule manquante dans .xstabs"
-#: symbols.c:442
+#: symbols.c:324 symbols.c:2455
+#, c-format
+msgid "symbol '%s' contains multibyte characters"
+msgstr "le symbole « %s » contient des caractères multi-octets"
+
+#: symbols.c:462
#, c-format
msgid "cannot define symbol `%s' in absolute section"
msgstr "ne peut définir le symbole « %s » dans la section absolue"
-#: symbols.c:575
+#: symbols.c:595
#, c-format
msgid "symbol `%s' is already defined as \"%s\"/%s%ld"
msgstr "symbole « %s » est déjà défini comme « %s »/%s%ld"
-#: symbols.c:1169
+#: symbols.c:1189
#, c-format
msgid "invalid operands (%s and %s sections) for `%s'"
msgstr "opérandes invalides (sections %s et %s) pour « %s »"
-#: symbols.c:1173
+#: symbols.c:1193
#, c-format
msgid "invalid operand (%s section) for `%s'"
msgstr "opérande invalide (section %s) pour « %s »"
-#: symbols.c:1181
+#: symbols.c:1201
#, c-format
msgid "invalid operands (%s and %s sections) for `%s' when setting `%s'"
msgstr "opérandes invalides (sections %s et %s) pour « %s » en définissant « %s »"
-#: symbols.c:1184
+#: symbols.c:1204
#, c-format
msgid "invalid operand (%s section) for `%s' when setting `%s'"
msgstr "opérande invalide (section %s) pour « %s » en définissant « %s »"
-#: symbols.c:1253
+#: symbols.c:1273
#, c-format
msgid "symbol definition loop encountered at `%s'"
msgstr "boucle de définition de symbole rencontrée à « %s »"
-#: symbols.c:1280
+#: symbols.c:1300
#, c-format
msgid "cannot convert expression symbol %s to complex relocation"
msgstr "ne peut convertir le symbole d'expression %s en réadressage complexe"
-#: symbols.c:1562
+#: symbols.c:1592
#, c-format
msgid "division by zero when setting `%s'"
msgstr "division par zéro lors de l'initialisation de « %s »"
#. See PR 20895 for a reproducer.
-#: symbols.c:1612
+#: symbols.c:1642
msgid "Invalid operation on symbol"
msgstr "Opération invalide sur le symbole"
-#: symbols.c:1662 write.c:2440
+#: symbols.c:1692 write.c:2471
#, c-format
msgid "can't resolve value for symbol `%s'"
msgstr "ne peut résoudre la valeur du symbole « %s »"
-#: symbols.c:2123
+#: symbols.c:2153
#, c-format
msgid "\"%d\" (instance number %d of a %s label)"
msgstr "« %d » (instance d'un nombre %d d'une étiquette %s)"
-#: symbols.c:2152
+#: symbols.c:2182
#, c-format
msgid "attempt to get value of unresolved symbol `%s'"
msgstr "tentative pour obtenir la valeur du symbole non résolu « %s »"
#. Do not reassign section symbols.
-#: symbols.c:2432
+#: symbols.c:2476
msgid "can't make section symbol global"
msgstr "ne peut rendre global le symbole de section"
-#: symbols.c:2438
+#: symbols.c:2482
msgid "can't make register symbol global"
msgstr "ne peut rendre global le symbole de registre"
-#: symbols.c:2544
+#: symbols.c:2588
#, c-format
msgid "Accessing function `%s' as thread-local object"
msgstr "Accès à la fonction « %s » comme un objet thread local"
-#: symbols.c:2548
+#: symbols.c:2592
#, c-format
msgid "Accessing `%s' as thread-local object"
msgstr "Accès à « %s » comme un objet de thread local"
-#: write.c:167
+#: write.c:158
#, c-format
msgid "field fx_size too small to hold %lu"
msgstr "champ fx_size trop petit pour contenir %lu"
-#: write.c:454
+#: write.c:445
#, c-format
msgid "attempt to .org/.space/.nops backwards? (%ld)"
msgstr "tentative d'utiliser .org/.space/.nops vers l'arrière ? (%ld)"
-#: write.c:476
+#: write.c:467
#, c-format
msgid "leb128 operand is an undefined symbol: %s"
msgstr "l'opérande leb128 est un symbole indéfini: %s"
-#: write.c:707
+#: write.c:698
msgid "invalid offset expression"
msgstr "expression d'offset invalide"
-#: write.c:729
+#: write.c:720
msgid "invalid reloc expression"
msgstr "expression de réadressage invalide"
-#: write.c:1122
+#: write.c:906
+#, c-format
+msgid "can't resolve %s - %s"
+msgstr "ne peut résoudre %s - %s"
+
+#: write.c:1117
#, c-format
msgid "value of %s too large for field of %d byte at %s"
msgid_plural "value of %s too large for field of %d bytes at %s"
msgstr[0] "la valeur de %s est trop grande pour le champ de %d octet à %s"
msgstr[1] "la valeur de %s est trop grande pour le champ de %d octets à %s"
-#: write.c:1138
+#: write.c:1133
#, c-format
msgid "signed .word overflow; switch may be too large; %ld at 0x%lx"
msgstr "débordement de .word signé; commutation peut être trop grande; %ld à 0x%lx"
-#: write.c:1179
+#: write.c:1174
msgid "redefined symbol cannot be used on reloc"
msgstr "symbole redéfini ne peut être utilisé sur un réadressage"
-#: write.c:1192
+#: write.c:1187
msgid "relocation out of range"
msgstr "réadressage hors limite"
-#: write.c:1195
+#: write.c:1190
#, c-format
msgid "%s:%u: bad return from bfd_install_relocation: %x"
msgstr "%s:%u: retour erroné de bfd_install_relocation: %x"
-#: write.c:1223
+#: write.c:1218
msgid "reloc not within (fixed part of) section"
msgstr "réadressage n'est pas dans une (partie corrigée de) section"
-#: write.c:1295
+#: write.c:1290
msgid "internal error: fixup not contained within frag"
msgstr "erreur interne: correctif non contenu à l'intérieur du fragment"
-#: write.c:1413 write.c:1550
+#: write.c:1442 write.c:1579
msgid "can't extend frag"
msgstr "ne peut étendre la fragmentation"
-#: write.c:1598
+#: write.c:1627
msgid "unimplemented .nops directive"
msgstr "directive .nops non impémentée"
-#: write.c:1632
+#: write.c:1661
#, c-format
msgid "can't write %ld byte to section %s of %s: '%s'"
msgid_plural "can't write %ld bytes to section %s of %s: '%s'"
msgstr[0] "impossible d'écrire %ld octet dans la section %s de %s: « %s »"
msgstr[1] "impossible d'écrire %ld octets dans la section %s de %s: « %s »"
-#: write.c:1658 write.c:1687 write.c:1724
+#: write.c:1687 write.c:1716 write.c:1753
#, c-format
msgid "can't fill %ld byte in section %s of %s: '%s'"
msgid_plural "can't fill %ld bytes in section %s of %s: '%s'"
msgstr[0] "impossible de remplir %ld octet dans la section %s de %s: « %s »"
msgstr[1] "impossible de remplir %ld octets dans la section %s de %s: « %s »"
-#: write.c:1939
+#: write.c:1970
msgid "unable to create reloc for build note"
msgstr "impossible de créer reloc pour la note de compilation"
-#: write.c:1943
+#: write.c:1974
msgid "<gnu build note>"
msgstr "<note de compilation gnu>"
-#: write.c:2356
+#: write.c:2387
#, c-format
msgid "%s: global symbols not supported in common sections"
msgstr "%s: symboles globaux non supportés dans les sections communes"
-#: write.c:2370
+#: write.c:2401
#, c-format
msgid "local label `%s' is not defined"
msgstr "étiquette locale « %s » n'est pas définie"
-#: write.c:2398
+#: write.c:2429
#, c-format
msgid "can't make global register symbol `%s'"
msgstr "ne peut rendre global le symbol de registre « %s »"
-#: write.c:2707
+#: write.c:2738
#, c-format
msgid "alignment padding (%lu byte) not a multiple of %ld"
msgid_plural "alignment padding (%lu bytes) not a multiple of %ld"
msgstr[0] "le remplissage pour alignement (%lu octet) n'est pas un multiple de %ld"
msgstr[1] "le remplissage pour alignement (%lu octets) n'est pas un multiple de %ld"
-#: write.c:2876
+#: write.c:2907
#, c-format
msgid ".word %s-%s+%s didn't fit"
msgstr ".word %s-%s+%s n'avait pas la bonne taille"
-#: write.c:2970
+#: write.c:3001
msgid "padding added"
msgstr "bourrage ajouté"
-#: write.c:3021
+#: write.c:3052
msgid "attempt to move .org backwards"
msgstr "tentative de déplacement de .org vers l'arrière"
-#: write.c:3046
+#: write.c:3077
msgid ".space, .nops or .fill specifies non-absolute value"
msgstr ".space, .nops ou .fill spécifient une valeur non absolue"
-#: write.c:3061
+#: write.c:3092
msgid ".space, .nops or .fill with negative value, ignored"
msgstr ".space, .nops ou .fill avec une valeur négative, ignoré"
-#: write.c:3133
+#: write.c:3164
#, c-format
msgid "Infinite loop encountered whilst attempting to compute the addresses of symbols in section %s"
msgstr "Boucle infinie rencontrée lors du calcul des adresses des symboles de la section %s"
+#~ msgid "invalid floating point number"
+#~ msgstr "nombre en virgule flottante invalide"
+
+#~ msgid "can't resolve `%s' {%s section} - `%s' {%s section}"
+#~ msgstr "ne peut résoudre « %s » {section %s} - « %s » {section %s}"
+
+#~ msgid "Difference of symbols in different sections is not supported"
+#~ msgstr "Des différences de symboles dans des sections différentes ne sont pas supportées"
+
+#~ msgid "%"
+#~ msgstr "%"
+
+#~ msgid "0x%"
+#~ msgstr "0x%"
+
+#~ msgid "Missing section name"
+#~ msgstr "Nom de section manquant"
+
+#~ msgid "Expression too complex."
+#~ msgstr "Expression trop complexe."
+
+#~ msgid "GREG expression too complicated"
+#~ msgstr "expression GREG trop complexe"
+
+#~ msgid "internal: bad RISC-V opcode (unknown operand type `CF%c'): %s %s"
+#~ msgstr "interne: opcode RISC-V erroné (type d'opérande inconnu « CF%c »): %s %s"
+
+#~ msgid "internal: bad RISC-V opcode (unknown operand type `C%c'): %s %s"
+#~ msgstr "interne: opcode RISC-V erroné (type d'opérande inconnu « C%c »): %s %s"
+
+#~ msgid "internal: bad RISC-V opcode (unknown operand type `F%c'): %s %s"
+#~ msgstr "interne: opcode RISC-V erroné (type d'opérande inconnu « F%c »): %s %s"
+
+#~ msgid "internal: unknown compressed funct field specifier `CF%c'"
+#~ msgstr "interne: spécificateur de champ FUNCT compressé « CF%c » inconnu"
+
+#~ msgid "internal: unknown compressed field specifier `C%c'"
+#~ msgstr "interne: spécificateur de champ compressé « CF%c » inconnu"
+
+#~ msgid "internal: unknown opcode field specifier `O%c'"
+#~ msgstr "interne: spécificateur de champ Opcode « O%c » inconnu"
+
+#~ msgid "internal: unknown funct field specifier `F%c'\n"
+#~ msgstr "interne: spécificateur de champ funct « F%c » inconnu\n"
+
+#~ msgid "unsupported symbol subtraction"
+#~ msgstr "symbole de soustraction non supporté"
+
+#~ msgid "cannot emit relocation %s against subsy symbol %s"
+#~ msgstr "ne peut produire un réadressage %s sur le symbole subsy %s"
+
+#~ msgid "%s out of domain (%"
+#~ msgstr "%s hors du domaine (%"
+
+#~ msgid "%s out of range (%"
+#~ msgstr "%s hors de la plage (%"
+
+#~ msgid "value 0x%"
+#~ msgstr "valeur 0x%"
+
#~ msgid "CSR instruction accepts only PDEC"
#~ msgstr "l'instruction CSR accepte uniquement PDEC"
#~ msgid "General purpose registers may not be the same"
#~ msgstr "Les registres généraux ne peuvent pas être les mêmes"
-#~ msgid "%s shortened to %s"
-#~ msgstr "%s réduit à %s"
-
-#~ msgid "0x%lx out range of signed 32bit displacement"
-#~ msgstr "0x%lx hors limite pour un déplacement signé de 32 bits"
-
#~ msgid "two .function pseudo-ops with no intervening .ef"
#~ msgstr "deux pseudo-op .function sans .ef intermédiaire"
@@ -22363,9 +22768,6 @@ msgstr "Boucle infinie rencontrée lors du calcul des adresses des symboles de l
#~ msgid "bad FUNCT field specifier 'F%c'\n"
#~ msgstr "mauvais spécificateur de champ FUNCT « F%c »\n"
-#~ msgid "Unsupported use of %s"
-#~ msgstr "Utilisation non supporté de %s"
-
#~ msgid ".attribute priv spec must set before any instructions"
#~ msgstr ".attribute priv doit apparaître avant toute instruction"
@@ -22375,9 +22777,6 @@ msgstr "Boucle infinie rencontrée lors du calcul des adresses des symboles de l
#~ msgid "value 0x%I64x truncated to 0x%I64x"
#~ msgstr "valeur 0x%I64x tronquée à 0x%I64x"
-#~ msgid "value 0x%lx truncated to 0x%lx"
-#~ msgstr "valeur 0x%lx tronquée à 0x%lx"
-
#~ msgid " --hash-size=<value> set the hash table size close to <value>\n"
#~ msgstr " --hash-size=<valeur> fixer la taille de la table de hash proche de <valeur>\n"
@@ -22432,9 +22831,6 @@ msgstr "Boucle infinie rencontrée lors du calcul des adresses des symboles de l
#~ msgid "(unknown reason)"
#~ msgstr "(raison inconnue)"
-#~ msgid "Internal error: Can't hash %s: %s"
-#~ msgstr "Erreur interne: ne peut adresser par hachage %s: %s"
-
#~ msgid "-mcpu conflict with -march option, using -mcpu"
#~ msgstr "-mcpu est en conflit avec l'option -march, utilisation de -mcpu"
@@ -22724,9 +23120,6 @@ msgstr "Boucle infinie rencontrée lors du calcul des adresses des symboles de l
#~ msgid "floating point numbers are not implemented"
#~ msgstr "nombres flottants pas implémentés"
-#~ msgid "%s out of domain (%d is not a multiple of %d)"
-#~ msgstr "%s hors du domaine (%d n'est pas un multiple de %d)"
-
#~ msgid "%s out of range (%d is not between %d and %d)"
#~ msgstr "%s hors limite (%d n'est pas entre %d et %d)"
@@ -22799,9 +23192,6 @@ msgstr "Boucle infinie rencontrée lors du calcul des adresses des symboles de l
#~ msgid "expecting a register for operand %d"
#~ msgstr "registre attendu pour l'opérande %d"
-#~ msgid "Internal Error: bad instruction length"
-#~ msgstr "Erreur interne: mauvaise longueur d'instruction"
-
#~ msgid "only supported with old gcc"
#~ msgstr "uniquement supporté avec un ancien gcc"
@@ -23552,9 +23942,6 @@ msgstr "Boucle infinie rencontrée lors du calcul des adresses des symboles de l
#~ msgid "absolute expression required"
#~ msgstr "expression absolue requise"
-#~ msgid "Invalid register number (%d)"
-#~ msgstr "Numéro de registre invalide (%d)"
-
#~ msgid "Invalid coprocessor 0 register number"
#~ msgstr "Numéro de registre du coprocesseur 0 invalide"
diff --git a/gas/po/gas.pot b/gas/po/gas.pot
index c9e5f155555..1b775bc142a 100644
--- a/gas/po/gas.pot
+++ b/gas/po/gas.pot
@@ -7,8 +7,8 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: bug-binutils@gnu.org\n"
-"POT-Creation-Date: 2021-08-11 10:45+0100\n"
+"Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n"
+"POT-Creation-Date: 2022-01-22 12:21+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,41 +18,60 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
-#: app.c:494 app.c:508
+#: app.c:381
+#, c-format
+msgid "multibyte character (%#x) encountered in input"
+msgstr ""
+
+#: app.c:383
+#, c-format
+msgid "multibyte character (%#x) encountered in %s"
+msgstr ""
+
+#: app.c:385
+#, c-format
+msgid "multibyte character (%#x) encountered in %s at or near line %u"
+msgstr ""
+
+#: app.c:389
+msgid "further multibyte character warnings suppressed"
+msgstr ""
+
+#: app.c:548 app.c:562
msgid "end of file in comment"
msgstr ""
-#: app.c:586 app.c:631
+#: app.c:640 app.c:685
#, c-format
msgid "end of file in string; '%c' inserted"
msgstr ""
-#: app.c:657
+#: app.c:711
#, c-format
msgid "unknown escape '\\%c' in string; ignored"
msgstr ""
-#: app.c:831 input-scrub.c:363
+#: app.c:887 input-scrub.c:363
msgid "end of file not at end of a line; newline inserted"
msgstr ""
-#: app.c:993
+#: app.c:1049
msgid "end of file in multiline comment"
msgstr ""
-#: app.c:1067
+#: app.c:1123
msgid "end of file after a one-character quote; \\0 inserted"
msgstr ""
-#: app.c:1075
+#: app.c:1131
msgid "end of file in escape character"
msgstr ""
-#: app.c:1087
+#: app.c:1143
msgid "missing close quote; (assumed)"
msgstr ""
-#: app.c:1155 app.c:1210 app.c:1222 app.c:1300
+#: app.c:1211 app.c:1266 app.c:1278 app.c:1356
msgid "end of file in comment; newline inserted"
msgstr ""
@@ -171,12 +190,12 @@ msgstr ""
msgid " --elf-stt-common=[no|yes] "
msgstr ""
-#: as.c:317 as.c:328 config/tc-i386.c:13859 config/tc-i386.c:13879
+#: as.c:317 as.c:328 config/tc-i386.c:13918 config/tc-i386.c:13938
#, c-format
msgid "(default: yes)\n"
msgstr ""
-#: as.c:319 as.c:330 config/tc-i386.c:13861 config/tc-i386.c:13881
+#: as.c:319 as.c:330 config/tc-i386.c:13920 config/tc-i386.c:13940
#, c-format
msgid "(default: no)\n"
msgstr ""
@@ -404,23 +423,28 @@ msgstr ""
msgid "Report bugs to %s\n"
msgstr ""
-#: as.c:646
+#: as.c:648
#, c-format
msgid "unrecognized option -%c%s"
msgstr ""
+#: as.c:698
+#, c-format
+msgid "unexpected argument to --multibyte-input-option: '%s'"
+msgstr ""
+
#. This output is intended to follow the GNU standards document.
-#: as.c:688
+#: as.c:703
#, c-format
msgid "GNU assembler %s\n"
msgstr ""
-#: as.c:689
+#: as.c:704
#, c-format
-msgid "Copyright (C) 2021 Free Software Foundation, Inc.\n"
+msgid "Copyright (C) 2022 Free Software Foundation, Inc.\n"
msgstr ""
-#: as.c:690
+#: as.c:705
#, c-format
msgid ""
"This program is free software; you may redistribute it under the terms of\n"
@@ -428,138 +452,138 @@ msgid ""
"This program has absolutely no warranty.\n"
msgstr ""
-#: as.c:695
+#: as.c:710
#, c-format
msgid ""
"This assembler was configured for a target of `%s' and default,\n"
"cpu type `%s'.\n"
msgstr ""
-#: as.c:699
+#: as.c:714
#, c-format
msgid "This assembler was configured for a target of `%s'.\n"
msgstr ""
-#: as.c:707
+#: as.c:722
msgid "multiple emulation names specified"
msgstr ""
-#: as.c:709
+#: as.c:724
msgid "emulations not handled in this configuration"
msgstr ""
-#: as.c:714
+#: as.c:729
#, c-format
msgid "alias = %s\n"
msgstr ""
-#: as.c:715
+#: as.c:730
#, c-format
msgid "canonical = %s\n"
msgstr ""
-#: as.c:716
+#: as.c:731
#, c-format
msgid "cpu-type = %s\n"
msgstr ""
-#: as.c:718
+#: as.c:733
#, c-format
msgid "format = %s\n"
msgstr ""
-#: as.c:721
+#: as.c:736
#, c-format
msgid "bfd-target = %s\n"
msgstr ""
-#: as.c:738
+#: as.c:753
#, c-format
msgid "Invalid --compress-debug-sections option: `%s'"
msgstr ""
-#: as.c:741
+#: as.c:756
#, c-format
msgid "--compress-debug-sections=%s is unsupported"
msgstr ""
-#: as.c:766
+#: as.c:781
msgid "bad defsym; format is --defsym name=value"
msgstr ""
-#: as.c:786
+#: as.c:801
msgid "no file name following -t option"
msgstr ""
-#: as.c:801
+#: as.c:816
#, c-format
msgid "failed to read instruction table %s\n"
msgstr ""
-#: as.c:823
+#: as.c:838
#, c-format
msgid "unknown DWARF option %s\n"
msgstr ""
-#: as.c:874
+#: as.c:889
#, c-format
msgid "Invalid --gdwarf-cie-version `%s'"
msgstr ""
-#: as.c:967
+#: as.c:982
#, c-format
msgid "Invalid --size-check= option: `%s'"
msgstr ""
-#: as.c:976
+#: as.c:991
#, c-format
msgid "Invalid --elf-stt-common= option: `%s'"
msgstr ""
-#: as.c:990
+#: as.c:1005
#, c-format
msgid "Invalid --generate-missing-build-notes option: `%s'"
msgstr ""
-#: as.c:1061
+#: as.c:1076
#, c-format
msgid "invalid listing option `%c'"
msgstr ""
-#: as.c:1124
+#: as.c:1139
#, c-format
msgid "%s: total time in assembly: %ld.%06ld\n"
msgstr ""
-#: as.c:1288
+#: as.c:1303
msgid "libbfd ABI mismatch"
msgstr ""
-#: as.c:1333
+#: as.c:1348
#, c-format
msgid "The input '%s' and output '%s' files are the same"
msgstr ""
-#: as.c:1443
+#: as.c:1458
#, c-format
msgid "%d warning"
msgid_plural "%d warnings"
msgstr[0] ""
msgstr[1] ""
-#: as.c:1445
+#: as.c:1460
#, c-format
msgid "%d error"
msgid_plural "%d errors"
msgstr[0] ""
msgstr[1] ""
-#: as.c:1449
+#: as.c:1464
#, c-format
msgid "%s, treating warnings as errors"
msgstr ""
-#: as.c:1460
+#: as.c:1475
#, c-format
msgid "%s, %s, generating bad object file\n"
msgstr ""
@@ -580,26 +604,26 @@ msgstr ""
#: cgen.c:106 config/tc-alpha.c:2095 config/tc-alpha.c:2119
#: config/tc-arc.c:4053 config/tc-arc.c:4126 config/tc-d10v.c:550
#: config/tc-d30v.c:534 config/tc-mn10200.c:1091 config/tc-mn10300.c:1752
-#: config/tc-ppc.c:3922 config/tc-s390.c:1334 config/tc-s390.c:1457
-#: config/tc-s390.c:1591 config/tc-v850.c:2538 config/tc-v850.c:2609
-#: config/tc-v850.c:2656 config/tc-v850.c:2693 config/tc-v850.c:2730
-#: config/tc-v850.c:2993
+#: config/tc-ppc.c:3939 config/tc-s390.c:1334 config/tc-s390.c:1457
+#: config/tc-s390.c:1591 config/tc-v850.c:2535 config/tc-v850.c:2606
+#: config/tc-v850.c:2653 config/tc-v850.c:2690 config/tc-v850.c:2727
+#: config/tc-v850.c:2990
msgid "too many fixups"
msgstr ""
#: cgen.c:371 cgen.c:391 config/tc-d10v.c:461 config/tc-d30v.c:450
-#: config/tc-mn10200.c:1033 config/tc-mn10300.c:1677 config/tc-ppc.c:3445
-#: config/tc-s390.c:1318 config/tc-v850.c:2647 config/tc-v850.c:2681
-#: config/tc-v850.c:2721 config/tc-v850.c:2966 config/tc-z80.c:785
+#: config/tc-mn10200.c:1033 config/tc-mn10300.c:1677 config/tc-ppc.c:3462
+#: config/tc-s390.c:1318 config/tc-v850.c:2644 config/tc-v850.c:2678
+#: config/tc-v850.c:2718 config/tc-v850.c:2963 config/tc-z80.c:785
msgid "illegal operand"
msgstr ""
#: cgen.c:395 config/tc-avr.c:910 config/tc-d10v.c:463 config/tc-d30v.c:452
#: config/tc-h8300.c:496 config/tc-mcore.c:662 config/tc-microblaze.c:613
#: config/tc-mmix.c:495 config/tc-mn10200.c:1036 config/tc-mn10300.c:1680
-#: config/tc-msp430.c:417 config/tc-ppc.c:3447 config/tc-s390.c:1323
-#: config/tc-sh.c:988 config/tc-v850.c:2651 config/tc-v850.c:2685
-#: config/tc-v850.c:2725 config/tc-v850.c:2969 config/tc-xgate.c:895
+#: config/tc-msp430.c:417 config/tc-ppc.c:3464 config/tc-s390.c:1323
+#: config/tc-sh.c:988 config/tc-v850.c:2648 config/tc-v850.c:2682
+#: config/tc-v850.c:2722 config/tc-v850.c:2966 config/tc-xgate.c:895
#: config/tc-z80.c:932 config/tc-z8k.c:349
msgid "missing operand"
msgstr ""
@@ -612,16 +636,16 @@ msgstr ""
msgid "operand mask overflow"
msgstr ""
-#: cgen.c:858 config/tc-arm.c:2036 config/tc-arm.c:11295 config/tc-arm.c:11347
-#: config/tc-arm.c:11635 config/tc-arm.c:12531 config/tc-arm.c:13671
-#: config/tc-arm.c:13711 config/tc-arm.c:14084 config/tc-arm.c:14126
-#: config/tc-arm.c:21366 config/tc-arm.c:21426 config/tc-mips.c:9707
+#: cgen.c:858 config/tc-arm.c:2054 config/tc-arm.c:11343 config/tc-arm.c:11395
+#: config/tc-arm.c:11683 config/tc-arm.c:12579 config/tc-arm.c:13719
+#: config/tc-arm.c:13759 config/tc-arm.c:14132 config/tc-arm.c:14174
+#: config/tc-arm.c:21420 config/tc-arm.c:21480 config/tc-mips.c:9707
#: config/tc-mips.c:11017 config/tc-mips.c:12314 config/tc-mips.c:12997
#: config/tc-spu.c:981 config/tc-xtensa.c:13092
msgid "expression too complex"
msgstr ""
-#: cgen.c:959 config/tc-ppc.c:7211 config/tc-s390.c:2369 config/tc-v850.c:3502
+#: cgen.c:959 config/tc-ppc.c:7467 config/tc-s390.c:2369 config/tc-v850.c:3499
#: config/tc-xstormy16.c:541
msgid "unresolved expression that must be resolved"
msgstr ""
@@ -715,8 +739,8 @@ msgstr ""
msgid "Infinities are not supported by this target"
msgstr ""
-#: config/atof-ieee.c:825 config/atof-vax.c:449 config/tc-arm.c:1282
-#: config/tc-ia64.c:11600 config/tc-tic30.c:1241 config/tc-tic4x.c:2567
+#: config/atof-ieee.c:825 config/atof-vax.c:449 config/tc-arm.c:1284
+#: config/tc-ia64.c:11595 config/tc-tic30.c:1241 config/tc-tic4x.c:2567
msgid "Unrecognized or unsupported floating point constant"
msgstr ""
@@ -863,7 +887,7 @@ msgstr ""
msgid "bad .common segment %s"
msgstr ""
-#: config/obj-elf.c:420 config/tc-aarch64.c:1961
+#: config/obj-elf.c:420 config/tc-aarch64.c:1968
msgid "Missing symbol name in directive"
msgstr ""
@@ -912,241 +936,246 @@ msgstr ""
msgid "changed section entity size for %s"
msgstr ""
-#: config/obj-elf.c:912
+#: config/obj-elf.c:910
msgid "unrecognized .section attribute: want a,e,o,w,x,M,S,G,T or number"
msgstr ""
-#: config/obj-elf.c:996
+#: config/obj-elf.c:994
msgid "extraneous characters at end of numeric section type"
msgstr ""
-#: config/obj-elf.c:1002 read.c:3010
+#: config/obj-elf.c:1000 read.c:3010
msgid "unrecognized section type"
msgstr ""
-#: config/obj-elf.c:1034
+#: config/obj-elf.c:1032
msgid "unrecognized section attribute"
msgstr ""
-#: config/obj-elf.c:1065 config/tc-alpha.c:4206
+#: config/obj-elf.c:1063 config/tc-alpha.c:4206
msgid "missing name"
msgstr ""
-#: config/obj-elf.c:1108
+#: config/obj-elf.c:1106
msgid "group name not parseable"
msgstr ""
-#: config/obj-elf.c:1114
+#: config/obj-elf.c:1112
#, c-format
msgid "section %s already has a group (%s)"
msgstr ""
-#: config/obj-elf.c:1169
+#: config/obj-elf.c:1167
#, c-format
msgid "section name '%s' already defined as another symbol"
msgstr ""
-#: config/obj-elf.c:1261
+#: config/obj-elf.c:1259
msgid "invalid merge entity size"
msgstr ""
-#: config/obj-elf.c:1268
+#: config/obj-elf.c:1266
msgid "entity size for SHF_MERGE not specified"
msgstr ""
-#: config/obj-elf.c:1296
+#: config/obj-elf.c:1294
msgid "? section flag ignored with G present"
msgstr ""
-#: config/obj-elf.c:1321
+#: config/obj-elf.c:1319
msgid "group name for SHF_GROUP not specified"
msgstr ""
-#: config/obj-elf.c:1347
+#: config/obj-elf.c:1345
#, c-format
msgid "unsupported mbind section info: %s"
msgstr ""
-#: config/obj-elf.c:1400
+#: config/obj-elf.c:1398
#, c-format
msgid "unsupported section id: %s"
msgstr ""
-#: config/obj-elf.c:1425
+#: config/obj-elf.c:1423
msgid "character following name is not '#'"
msgstr ""
-#: config/obj-elf.c:1452
+#: config/obj-elf.c:1450
#, c-format
msgid "SHF_ALLOC isn't set for GNU_MBIND section: %s"
msgstr ""
-#: config/obj-elf.c:1459
+#: config/obj-elf.c:1457
#, c-format
msgid "%s section is supported only by GNU and FreeBSD targets"
msgstr ""
-#: config/obj-elf.c:1600
+#: config/obj-elf.c:1598
msgid ".previous without corresponding .section; ignored"
msgstr ""
-#: config/obj-elf.c:1626
+#: config/obj-elf.c:1624
msgid ".popsection without corresponding .pushsection; ignored"
msgstr ""
-#: config/obj-elf.c:1670 config/obj-elf.c:1765
+#: config/obj-elf.c:1668 config/obj-elf.c:1763
#, c-format
msgid "missing version name in `%s' for symbol `%s'"
msgstr ""
-#: config/obj-elf.c:1689
+#: config/obj-elf.c:1687
#, c-format
msgid "only one version name with `@@@' is allowed for symbol `%s'"
msgstr ""
-#: config/obj-elf.c:1697
+#: config/obj-elf.c:1695
#, c-format
msgid "invalid version name '%s' for symbol `%s'"
msgstr ""
-#: config/obj-elf.c:1739
+#: config/obj-elf.c:1737
msgid "expected comma after name in .symver"
msgstr ""
-#: config/obj-elf.c:1756 config/obj-elf.c:2660
+#: config/obj-elf.c:1754 config/obj-elf.c:2658
#, c-format
msgid "`%s' can't be versioned to common symbol '%s'"
msgstr ""
-#: config/obj-elf.c:1833
+#: config/obj-elf.c:1831
#, c-format
msgid "expected `%s' to have already been set for .vtable_inherit"
msgstr ""
-#: config/obj-elf.c:1843
+#: config/obj-elf.c:1841
msgid "expected comma after name in .vtable_inherit"
msgstr ""
-#: config/obj-elf.c:1904
+#: config/obj-elf.c:1902
msgid "expected comma after name in .vtable_entry"
msgstr ""
-#: config/obj-elf.c:2043
+#: config/obj-elf.c:2041
#, c-format
msgid "Attribute name not recognised: %s"
msgstr ""
-#: config/obj-elf.c:2060
+#: config/obj-elf.c:2058
msgid "expected numeric constant"
msgstr ""
-#: config/obj-elf.c:2069 config/tc-arm.c:7008
+#: config/obj-elf.c:2067 config/tc-arm.c:7056
msgid "expected comma"
msgstr ""
-#: config/obj-elf.c:2102
+#: config/obj-elf.c:2100
msgid "bad string constant"
msgstr ""
-#: config/obj-elf.c:2106
+#: config/obj-elf.c:2104
msgid "expected <tag> , <value>"
msgstr ""
-#: config/obj-elf.c:2239
+#: config/obj-elf.c:2237
msgid "expected quoted string"
msgstr ""
-#: config/obj-elf.c:2259
+#: config/obj-elf.c:2257
#, c-format
msgid "expected comma after name `%s' in .size directive"
msgstr ""
-#: config/obj-elf.c:2268
+#: config/obj-elf.c:2266
msgid "missing expression in .size directive"
msgstr ""
-#: config/obj-elf.c:2388
+#: config/obj-elf.c:2386
#, c-format
msgid "symbol '%s' is already defined"
msgstr ""
-#: config/obj-elf.c:2408
+#: config/obj-elf.c:2406
#, c-format
msgid "symbol type \"%s\" is supported only by GNU and FreeBSD targets"
msgstr ""
-#: config/obj-elf.c:2412
+#: config/obj-elf.c:2410
#, c-format
msgid "symbol type \"%s\" is not supported by MIPS targets"
msgstr ""
-#: config/obj-elf.c:2424
+#: config/obj-elf.c:2422
#, c-format
msgid "symbol type \"%s\" is supported only by GNU targets"
msgstr ""
-#: config/obj-elf.c:2434
+#: config/obj-elf.c:2432
#, c-format
msgid "unrecognized symbol type \"%s\""
msgstr ""
-#: config/obj-elf.c:2455
+#: config/obj-elf.c:2453
#, c-format
msgid "cannot change type of common symbol '%s'"
msgstr ""
-#: config/obj-elf.c:2467
+#: config/obj-elf.c:2465
#, c-format
msgid "symbol '%s' already has its type set"
msgstr ""
-#: config/obj-elf.c:2633 config/obj-elf.c:2636
+#: config/obj-elf.c:2631 config/obj-elf.c:2634
#, c-format
msgid ".size expression for %s does not evaluate to a constant"
msgstr ""
-#: config/obj-elf.c:2732 ecoff.c:3578
+#: config/obj-elf.c:2723
+#, c-format
+msgid "symbol '%s' with multiple versions cannot be used in relocation"
+msgstr ""
+
+#: config/obj-elf.c:2741 ecoff.c:3578
#, c-format
msgid "symbol `%s' can not be both weak and common"
msgstr ""
-#: config/obj-elf.c:2767
+#: config/obj-elf.c:2789
#, c-format
msgid "undefined linked-to symbol `%s' on section `%s'"
msgstr ""
-#: config/obj-elf.c:2845
+#: config/obj-elf.c:2867
#, c-format
msgid "assuming all members of group `%s' are COMDAT"
msgstr ""
-#: config/obj-elf.c:2857
+#: config/obj-elf.c:2879
#, c-format
msgid "can't create group: %s"
msgstr ""
-#: config/obj-elf.c:2934
+#: config/obj-elf.c:2956
#, c-format
msgid ""
"invalid attempt to declare external version name as default in symbol `%s'"
msgstr ""
-#: config/obj-elf.c:2944
+#: config/obj-elf.c:2966
#, c-format
msgid "multiple versions [`%s'|`%s'] for symbol `%s'"
msgstr ""
-#: config/obj-elf.c:3036
+#: config/obj-elf.c:3058
#, c-format
msgid "failed to set up debugging information: %s"
msgstr ""
-#: config/obj-elf.c:3056
+#: config/obj-elf.c:3078
#, c-format
msgid "can't start writing .mdebug section: %s"
msgstr ""
-#: config/obj-elf.c:3064
+#: config/obj-elf.c:3086
#, c-format
msgid "could not write .mdebug section: %s"
msgstr ""
@@ -1195,7 +1224,7 @@ msgstr ""
msgid "missing sizeof_stub expression"
msgstr ""
-#: config/obj-macho.c:478 config/tc-ia64.c:1080 config/tc-ia64.c:11761
+#: config/obj-macho.c:478 config/tc-ia64.c:1081 config/tc-ia64.c:11756
#: config/tc-score.c:6093 expr.c:1213 read.c:1783
msgid "expected symbol name"
msgstr ""
@@ -1208,14 +1237,14 @@ msgstr ""
msgid "missing size expression"
msgstr ""
-#: config/obj-macho.c:506 config/tc-ia64.c:1115 read.c:1827
+#: config/obj-macho.c:506 config/tc-ia64.c:1116 read.c:1827
#, c-format
msgid "size (%ld) out of range, ignored"
msgstr ""
-#: config/obj-macho.c:516 config/tc-score.c:6248 dwarf2dbg.c:1324 ecoff.c:3346
-#: read.c:1839 read.c:1942 read.c:2693 read.c:3266 read.c:3860 symbols.c:495
-#: symbols.c:590
+#: config/obj-macho.c:516 config/tc-score.c:6248 dwarf2dbg.c:1394 ecoff.c:3346
+#: read.c:1839 read.c:1942 read.c:2693 read.c:3266 read.c:3860 symbols.c:515
+#: symbols.c:610
#, c-format
msgid "symbol `%s' is already defined"
msgstr ""
@@ -1374,855 +1403,961 @@ msgstr ""
msgid "attaching copyright header %s: %s"
msgstr ""
-#: config/tc-aarch64.c:374
+#: config/tc-aarch64.c:381
msgid "integer 32-bit register expected"
msgstr ""
-#: config/tc-aarch64.c:377
+#: config/tc-aarch64.c:384
msgid "integer 64-bit register expected"
msgstr ""
-#: config/tc-aarch64.c:380
+#: config/tc-aarch64.c:387
msgid "integer register expected"
msgstr ""
-#: config/tc-aarch64.c:383
+#: config/tc-aarch64.c:390
msgid "64-bit integer or SP register expected"
msgstr ""
-#: config/tc-aarch64.c:386 config/tc-mcore.c:840 config/tc-mcore.c:1356
+#: config/tc-aarch64.c:393 config/tc-mcore.c:840 config/tc-mcore.c:1356
#: config/tc-mcore.c:1410
msgid "base register expected"
msgstr ""
-#: config/tc-aarch64.c:389
+#: config/tc-aarch64.c:396
msgid "integer or zero register expected"
msgstr ""
-#: config/tc-aarch64.c:392
+#: config/tc-aarch64.c:399
msgid "offset register expected"
msgstr ""
-#: config/tc-aarch64.c:395
+#: config/tc-aarch64.c:402
msgid "integer or SP register expected"
msgstr ""
-#: config/tc-aarch64.c:398
+#: config/tc-aarch64.c:405
msgid "integer, zero or SP register expected"
msgstr ""
-#: config/tc-aarch64.c:401
+#: config/tc-aarch64.c:408
msgid "8-bit SIMD scalar register expected"
msgstr ""
-#: config/tc-aarch64.c:404
+#: config/tc-aarch64.c:411
msgid "16-bit SIMD scalar or floating-point half precision register expected"
msgstr ""
-#: config/tc-aarch64.c:408
+#: config/tc-aarch64.c:415
msgid "32-bit SIMD scalar or floating-point single precision register expected"
msgstr ""
-#: config/tc-aarch64.c:412
+#: config/tc-aarch64.c:419
msgid "64-bit SIMD scalar or floating-point double precision register expected"
msgstr ""
-#: config/tc-aarch64.c:416
+#: config/tc-aarch64.c:423
msgid "128-bit SIMD scalar or floating-point quad precision register expected"
msgstr ""
-#: config/tc-aarch64.c:421 config/tc-arm.c:4706
+#: config/tc-aarch64.c:428 config/tc-arm.c:4750
msgid "register expected"
msgstr ""
#. any [BHSDQ]P FP
-#: config/tc-aarch64.c:424
+#: config/tc-aarch64.c:431
msgid "SIMD scalar or floating-point register expected"
msgstr ""
#. any V reg
-#: config/tc-aarch64.c:427
+#: config/tc-aarch64.c:434
msgid "vector register expected"
msgstr ""
-#: config/tc-aarch64.c:430
+#: config/tc-aarch64.c:437
msgid "SVE vector register expected"
msgstr ""
-#: config/tc-aarch64.c:433
+#: config/tc-aarch64.c:440
msgid "SVE predicate register expected"
msgstr ""
-#: config/tc-aarch64.c:436
+#: config/tc-aarch64.c:443
#, c-format
msgid "invalid register type %d"
msgstr ""
-#: config/tc-aarch64.c:611 config/tc-aarch64.c:613 config/tc-arm.c:1199
+#: config/tc-aarch64.c:618 config/tc-aarch64.c:620 config/tc-arm.c:1201
#: config/tc-score.c:6492 expr.c:1379 read.c:2675
msgid "bad expression"
msgstr ""
-#: config/tc-aarch64.c:624 config/tc-sparc.c:3376
+#: config/tc-aarch64.c:631 config/tc-sparc.c:3376
msgid "bad segment"
msgstr ""
-#: config/tc-aarch64.c:842
+#: config/tc-aarch64.c:849
#, c-format
msgid "bad size %d in vector width specifier"
msgstr ""
-#: config/tc-aarch64.c:875
+#: config/tc-aarch64.c:882
#, c-format
msgid "unexpected character `%c' in element size"
msgstr ""
-#: config/tc-aarch64.c:877
+#: config/tc-aarch64.c:884
msgid "missing element size"
msgstr ""
-#: config/tc-aarch64.c:886
+#: config/tc-aarch64.c:893
#, c-format
msgid "invalid element size %d and vector size combination %c"
msgstr ""
-#: config/tc-aarch64.c:921
+#: config/tc-aarch64.c:928
#, c-format
msgid "unexpected character `%c' in predication type"
msgstr ""
-#: config/tc-aarch64.c:924
+#: config/tc-aarch64.c:931
msgid "missing predication type"
msgstr ""
-#: config/tc-aarch64.c:1019
+#: config/tc-aarch64.c:1026
msgid "this type of register can't be indexed"
msgstr ""
-#: config/tc-aarch64.c:1025
+#: config/tc-aarch64.c:1032
msgid "index not allowed inside register list"
msgstr ""
-#: config/tc-aarch64.c:1036 config/tc-aarch64.c:2006 config/tc-aarch64.c:2208
-#: config/tc-arm.c:1776 config/tc-arm.c:3982 config/tc-arm.c:5156
-#: config/tc-arm.c:7297
+#: config/tc-aarch64.c:1043 config/tc-aarch64.c:2013 config/tc-aarch64.c:2215
+#: config/tc-arm.c:1778 config/tc-arm.c:4000 config/tc-arm.c:5204
+#: config/tc-arm.c:7345
msgid "constant expression required"
msgstr ""
#. Indexed vector register expected.
-#: config/tc-aarch64.c:1048
+#: config/tc-aarch64.c:1055
msgid "indexed vector register expected"
msgstr ""
-#: config/tc-aarch64.c:1055
+#: config/tc-aarch64.c:1062
msgid "invalid use of vector register"
msgstr ""
-#: config/tc-aarch64.c:1147 config/tc-arm.c:2092
+#: config/tc-aarch64.c:1154 config/tc-arm.c:2110
msgid "expecting {"
msgstr ""
-#: config/tc-aarch64.c:1172
+#: config/tc-aarch64.c:1179
msgid "invalid vector register in list"
msgstr ""
-#: config/tc-aarch64.c:1179
+#: config/tc-aarch64.c:1186
msgid "invalid scalar register in list"
msgstr ""
-#: config/tc-aarch64.c:1192
+#: config/tc-aarch64.c:1199
msgid "invalid range in vector register list"
msgstr ""
-#: config/tc-aarch64.c:1205
+#: config/tc-aarch64.c:1212
msgid "type mismatch in vector register list"
msgstr ""
-#: config/tc-aarch64.c:1222
+#: config/tc-aarch64.c:1229
msgid "end of vector register list not found"
msgstr ""
-#: config/tc-aarch64.c:1239
+#: config/tc-aarch64.c:1246
msgid "constant expression required."
msgstr ""
-#: config/tc-aarch64.c:1249
+#: config/tc-aarch64.c:1256
msgid "expected index"
msgstr ""
-#: config/tc-aarch64.c:1256
+#: config/tc-aarch64.c:1263
msgid "too many registers in vector register list"
msgstr ""
-#: config/tc-aarch64.c:1261
+#: config/tc-aarch64.c:1268
msgid "empty vector register list"
msgstr ""
-#: config/tc-aarch64.c:1283 config/tc-arm.c:2528
+#: config/tc-aarch64.c:1290 config/tc-arm.c:2546
#, c-format
msgid "ignoring attempt to redefine built-in register '%s'"
msgstr ""
-#: config/tc-aarch64.c:1289 config/tc-arm.c:2533
+#: config/tc-aarch64.c:1296 config/tc-arm.c:2551
#, c-format
msgid "ignoring redefinition of register alias '%s'"
msgstr ""
-#: config/tc-aarch64.c:1334 config/tc-arm.c:2598
+#: config/tc-aarch64.c:1341 config/tc-arm.c:2616
#, c-format
msgid "unknown register '%s' -- .req ignored"
msgstr ""
-#: config/tc-aarch64.c:1392 config/tc-arm.c:2806
+#: config/tc-aarch64.c:1399 config/tc-arm.c:2824
msgid "invalid syntax for .req directive"
msgstr ""
-#: config/tc-aarch64.c:1417 config/tc-arm.c:2844
+#: config/tc-aarch64.c:1424 config/tc-arm.c:2862
msgid "invalid syntax for .unreq directive"
msgstr ""
-#: config/tc-aarch64.c:1423 config/tc-arm.c:2851
+#: config/tc-aarch64.c:1430 config/tc-arm.c:2869
#, c-format
msgid "unknown register alias '%s'"
msgstr ""
-#: config/tc-aarch64.c:1425
+#: config/tc-aarch64.c:1432
#, c-format
msgid "ignoring attempt to undefine built-in register '%s'"
msgstr ""
-#: config/tc-aarch64.c:1749 config/tc-arm.c:3594 config/tc-arm.c:3621
-#: config/tc-arm.c:3634
+#: config/tc-aarch64.c:1756 config/tc-arm.c:3612 config/tc-arm.c:3639
+#: config/tc-arm.c:3652
msgid "literal pool overflow"
msgstr ""
-#: config/tc-aarch64.c:1931 config/tc-aarch64.c:6350 config/tc-arm.c:3855
-#: config/tc-arm.c:7730
+#: config/tc-aarch64.c:1938 config/tc-aarch64.c:6917 config/tc-arm.c:3873
+#: config/tc-arm.c:7778
msgid "unrecognized relocation suffix"
msgstr ""
-#: config/tc-aarch64.c:1933
+#: config/tc-aarch64.c:1940
msgid "unimplemented relocation suffix"
msgstr ""
-#: config/tc-aarch64.c:2175 config/tc-aarch64.c:2366 config/tc-aarch64.c:2410
+#: config/tc-aarch64.c:2182 config/tc-aarch64.c:2373 config/tc-aarch64.c:2417
#: config/tc-csky.c:2314
msgid "immediate operand required"
msgstr ""
-#: config/tc-aarch64.c:2184
+#: config/tc-aarch64.c:2191
msgid "missing immediate expression"
msgstr ""
-#: config/tc-aarch64.c:2390 config/tc-aarch64.c:6173 config/tc-aarch64.c:6193
+#: config/tc-aarch64.c:2397 config/tc-aarch64.c:6740 config/tc-aarch64.c:6760
msgid "invalid floating-point constant"
msgstr ""
-#: config/tc-aarch64.c:3193 config/tc-arm.c:5496 config/tc-arm.c:5506
+#: config/tc-aarch64.c:3200 config/tc-arm.c:5544 config/tc-arm.c:5554
msgid "shift expression expected"
msgstr ""
-#: config/tc-aarch64.c:3201
+#: config/tc-aarch64.c:3208
msgid "shift operator expected"
msgstr ""
-#: config/tc-aarch64.c:3209
+#: config/tc-aarch64.c:3216
msgid "invalid use of 'MSL'"
msgstr ""
-#: config/tc-aarch64.c:3217
+#: config/tc-aarch64.c:3224
msgid "invalid use of 'MUL'"
msgstr ""
-#: config/tc-aarch64.c:3226
+#: config/tc-aarch64.c:3233
msgid "extending shift is not permitted"
msgstr ""
-#: config/tc-aarch64.c:3234
+#: config/tc-aarch64.c:3241
msgid "'ROR' shift is not permitted"
msgstr ""
-#: config/tc-aarch64.c:3242
+#: config/tc-aarch64.c:3249
msgid "only 'LSL' shift is permitted"
msgstr ""
-#: config/tc-aarch64.c:3250
+#: config/tc-aarch64.c:3257
msgid "only 'MUL' is permitted"
msgstr ""
-#: config/tc-aarch64.c:3268
+#: config/tc-aarch64.c:3275
msgid "only 'MUL VL' is permitted"
msgstr ""
-#: config/tc-aarch64.c:3276
+#: config/tc-aarch64.c:3283
msgid "invalid shift for the register offset addressing mode"
msgstr ""
-#: config/tc-aarch64.c:3284
+#: config/tc-aarch64.c:3291
msgid "invalid shift operator"
msgstr ""
-#: config/tc-aarch64.c:3318
+#: config/tc-aarch64.c:3325
msgid "missing shift amount"
msgstr ""
-#: config/tc-aarch64.c:3325
+#: config/tc-aarch64.c:3332
msgid "constant shift amount required"
msgstr ""
-#: config/tc-aarch64.c:3334
+#: config/tc-aarch64.c:3341
msgid "shift amount out of range 0 to 63"
msgstr ""
-#: config/tc-aarch64.c:3384
+#: config/tc-aarch64.c:3391
msgid "unexpected shift operator"
msgstr ""
-#: config/tc-aarch64.c:3420
+#: config/tc-aarch64.c:3427
msgid "unexpected register in the immediate operand"
msgstr ""
-#: config/tc-aarch64.c:3445
+#: config/tc-aarch64.c:3452
msgid "integer register expected in the extended/shifted operand register"
msgstr ""
-#: config/tc-aarch64.c:3480 config/tc-aarch64.c:3618 config/tc-aarch64.c:3751
-#: config/tc-aarch64.c:3935 config/tc-aarch64.c:3977
+#: config/tc-aarch64.c:3487 config/tc-aarch64.c:3625 config/tc-aarch64.c:3758
+#: config/tc-aarch64.c:3958 config/tc-aarch64.c:4000
msgid "unknown relocation modifier"
msgstr ""
-#: config/tc-aarch64.c:3487 config/tc-aarch64.c:3637 config/tc-aarch64.c:3758
-#: config/tc-aarch64.c:3942 config/tc-aarch64.c:3984
+#: config/tc-aarch64.c:3494 config/tc-aarch64.c:3644 config/tc-aarch64.c:3765
+#: config/tc-aarch64.c:3965 config/tc-aarch64.c:4007
msgid "this relocation modifier is not allowed on this instruction"
msgstr ""
-#: config/tc-aarch64.c:3646 config/tc-aarch64.c:3770
+#: config/tc-aarch64.c:3653 config/tc-aarch64.c:3777
msgid "invalid relocation expression"
msgstr ""
-#: config/tc-aarch64.c:3663
+#: config/tc-aarch64.c:3670
msgid "invalid address"
msgstr ""
-#: config/tc-aarch64.c:3720
+#: config/tc-aarch64.c:3727
msgid "invalid use of 32-bit register offset"
msgstr ""
-#: config/tc-aarch64.c:3729
+#: config/tc-aarch64.c:3736
msgid "offset has different size from base"
msgstr ""
-#: config/tc-aarch64.c:3735
+#: config/tc-aarch64.c:3742
msgid "invalid use of 64-bit register offset"
msgstr ""
#. [Xn],#expr
-#: config/tc-aarch64.c:3784 config/tc-aarch64.c:3842
+#: config/tc-aarch64.c:3791 config/tc-aarch64.c:3849
msgid "invalid expression in the address"
msgstr ""
-#: config/tc-aarch64.c:3798 config/tc-arm.c:6095 config/tc-arm.c:6688
+#: config/tc-aarch64.c:3805 config/tc-arm.c:6143 config/tc-arm.c:6736
msgid "']' expected"
msgstr ""
-#: config/tc-aarch64.c:3806
+#: config/tc-aarch64.c:3813
msgid "register offset not allowed in pre-indexed addressing mode"
msgstr ""
-#: config/tc-aarch64.c:3821 config/tc-arm.c:6131
+#: config/tc-aarch64.c:3828 config/tc-arm.c:6179
msgid "cannot combine pre- and post-indexing"
msgstr ""
#. Reject [Rn]!
-#: config/tc-aarch64.c:3866
+#: config/tc-aarch64.c:3873
msgid "missing offset in the pre-indexed address"
msgstr ""
-#: config/tc-aarch64.c:4109
+#: config/tc-aarch64.c:4132
msgid "unknown or missing option to PSB/TSB"
msgstr ""
-#: config/tc-aarch64.c:4117
+#: config/tc-aarch64.c:4140
msgid "the specified option is not accepted for PSB/TSB"
msgstr ""
-#: config/tc-aarch64.c:4144 config/tc-aarch64.c:4158
+#: config/tc-aarch64.c:4167 config/tc-aarch64.c:4181
msgid "unknown option to BTI"
msgstr ""
-#: config/tc-aarch64.c:4222
+#: config/tc-aarch64.c:4210
+msgid "missing ZA tile element size separator"
+msgstr ""
+
+#: config/tc-aarch64.c:4266
+msgid "invalid ZA tile register number, expected za0"
+msgstr ""
+
+#: config/tc-aarch64.c:4273
+msgid "invalid ZA tile register number, expected za0-za1"
+msgstr ""
+
+#. For the 32-bit variant: is the name of the ZA tile ZA0-ZA3.
+#: config/tc-aarch64.c:4281
+msgid "invalid ZA tile register number, expected za0-za3"
+msgstr ""
+
+#. For the 64-bit variant: is the name of the ZA tile ZA0-ZA7
+#: config/tc-aarch64.c:4289
+msgid "invalid ZA tile register number, expected za0-za7"
+msgstr ""
+
+#: config/tc-aarch64.c:4294
+msgid "invalid ZA tile element size, allowed b, h, s and d"
+msgstr ""
+
+#: config/tc-aarch64.c:4340
+msgid "expected '['"
+msgstr ""
+
+#: config/tc-aarch64.c:4349
+msgid "expected vector select register W12-W15"
+msgstr ""
+
+#: config/tc-aarch64.c:4356
+msgid "expected ','"
+msgstr ""
+
+#: config/tc-aarch64.c:4362
+msgid "index offset immediate expected"
+msgstr ""
+
+#: config/tc-aarch64.c:4368
+msgid "expected ']'"
+msgstr ""
+
+#: config/tc-aarch64.c:4443
+msgid "invalid ZA tile element size, allowed b, h, s, d and q"
+msgstr ""
+
+#: config/tc-aarch64.c:4451
+msgid "ZA tile vector out of range"
+msgstr ""
+
+#: config/tc-aarch64.c:4463
+msgid "index offset out of range"
+msgstr ""
+
+#: config/tc-aarch64.c:4484 config/tc-aarch64.c:4579
+msgid "expected '{'"
+msgstr ""
+
+#: config/tc-aarch64.c:4497 config/tc-aarch64.c:4592
+msgid "expected '}'"
+msgstr ""
+
+#: config/tc-aarch64.c:4541 config/tc-aarch64.c:4556
+msgid "wrong ZA tile element format"
+msgstr ""
+
+#: config/tc-aarch64.c:4623
+msgid "expected ZA array"
+msgstr ""
+
+#: config/tc-aarch64.c:4632 config/tc-aarch64.c:8993 config/tc-arm.c:28704
+#: config/tc-arm.c:28719 config/tc-arm.c:28734 config/tc-arm.c:28745
+#: config/tc-arm.c:28768 config/tc-arm.c:29618 config/tc-moxie.c:714
+#: config/tc-pj.c:449 config/tc-sh.c:3728
+msgid "offset out of range"
+msgstr ""
+
+#: config/tc-aarch64.c:4659
+msgid "expected SM or ZA operand"
+msgstr ""
+
+#: config/tc-aarch64.c:4708
+msgid "wrong predicate register element size, allowed b, h, s and d"
+msgstr ""
+
+#: config/tc-aarch64.c:4717
+msgid "element index out of range for given variant"
+msgstr ""
+
+#: config/tc-aarch64.c:4781
#, c-format
msgid "selected processor does not support PSTATE field name '%s'"
msgstr ""
-#: config/tc-aarch64.c:4227 config/tc-aarch64.c:4269
+#: config/tc-aarch64.c:4786 config/tc-aarch64.c:4828
#, c-format
msgid "selected processor does not support system register name '%s'"
msgstr ""
-#: config/tc-aarch64.c:4230 config/tc-aarch64.c:4272
+#: config/tc-aarch64.c:4789 config/tc-aarch64.c:4831
#, c-format
msgid ""
"system register name '%s' is deprecated and may be removed in a future "
"release"
msgstr ""
-#: config/tc-aarch64.c:4314
+#: config/tc-aarch64.c:4873
msgid "immediate value out of range "
msgstr ""
-#: config/tc-aarch64.c:4828
+#: config/tc-aarch64.c:5392
#, c-format
msgid "Info: "
msgstr ""
-#: config/tc-aarch64.c:4863 config/tc-score.c:2752 config/tc-score.c:6481
+#: config/tc-aarch64.c:5420
+#, c-format
+msgid "this `%s' should have an immediately preceding `%s' -- `%s'"
+msgstr ""
+
+#: config/tc-aarch64.c:5426
+#, c-format
+msgid "the preceding `%s' should be followed by `%s` rather than `%s` -- `%s'"
+msgstr ""
+
+#: config/tc-aarch64.c:5440 config/tc-score.c:2752 config/tc-score.c:6481
#, c-format
msgid "%s -- `%s'"
msgstr ""
-#: config/tc-aarch64.c:4865
+#: config/tc-aarch64.c:5442
#, c-format
msgid "%s at operand %d -- `%s'"
msgstr ""
-#: config/tc-aarch64.c:4871
+#: config/tc-aarch64.c:5448
#, c-format
msgid "operand %d must be %s -- `%s'"
msgstr ""
-#: config/tc-aarch64.c:4877
+#: config/tc-aarch64.c:5454
#, c-format
msgid "operand mismatch -- `%s'"
msgstr ""
#. Print the hint.
-#: config/tc-aarch64.c:4937
+#: config/tc-aarch64.c:5514
msgid " did you mean this?"
msgstr ""
-#: config/tc-aarch64.c:4940 config/tc-aarch64.c:4967
+#: config/tc-aarch64.c:5517 config/tc-aarch64.c:5544
#, c-format
msgid " %s"
msgstr ""
-#: config/tc-aarch64.c:4945
+#: config/tc-aarch64.c:5522
msgid " other valid variant(s):"
msgstr ""
-#: config/tc-aarch64.c:4974
+#: config/tc-aarch64.c:5551
+#, c-format
+msgid "operand %d must have the same immediate value as operand 1 -- `%s'"
+msgstr ""
+
+#: config/tc-aarch64.c:5557
#, c-format
msgid "operand %d must be the same register as operand 1 -- `%s'"
msgstr ""
-#: config/tc-aarch64.c:4980
+#: config/tc-aarch64.c:5563
#, c-format
msgid "%s out of range %d to %d at operand %d -- `%s'"
msgstr ""
-#: config/tc-aarch64.c:4981 config/tc-aarch64.c:4985 config/tc-aarch64.c:6993
+#: config/tc-aarch64.c:5564 config/tc-aarch64.c:5568 config/tc-aarch64.c:7666
msgid "immediate value"
msgstr ""
-#: config/tc-aarch64.c:4984
+#: config/tc-aarch64.c:5567
#, c-format
msgid "%s must be %d at operand %d -- `%s'"
msgstr ""
-#: config/tc-aarch64.c:4991
+#: config/tc-aarch64.c:5574
#, c-format
msgid ""
"invalid number of registers in the list; only 1 register is expected at "
"operand %d -- `%s'"
msgstr ""
-#: config/tc-aarch64.c:4995
+#: config/tc-aarch64.c:5578
#, c-format
msgid ""
"invalid number of registers in the list; %d registers are expected at "
"operand %d -- `%s'"
msgstr ""
-#: config/tc-aarch64.c:5001
+#: config/tc-aarch64.c:5584
#, c-format
msgid "immediate value must be a multiple of %d at operand %d -- `%s'"
msgstr ""
-#: config/tc-aarch64.c:5319
+#: config/tc-aarch64.c:5885
msgid "bad vector arrangement type"
msgstr ""
-#: config/tc-aarch64.c:5448
+#: config/tc-aarch64.c:6014
msgid "the specified relocation type is not allowed for MOVK"
msgstr ""
-#: config/tc-aarch64.c:5496 config/tc-aarch64.c:5507
+#: config/tc-aarch64.c:6062 config/tc-aarch64.c:6073
msgid "the specified relocation type is not allowed for 32-bit register"
msgstr ""
-#: config/tc-aarch64.c:5618
+#: config/tc-aarch64.c:6184
msgid "relocation qualifier does not match instruction size"
msgstr ""
-#: config/tc-aarch64.c:5707
+#: config/tc-aarch64.c:6273
msgid "comma expected between operands"
msgstr ""
-#: config/tc-aarch64.c:5738
+#: config/tc-aarch64.c:6304
msgid "invalid Rt register number in 64-byte load/store"
msgstr ""
-#: config/tc-aarch64.c:5858
+#: config/tc-aarch64.c:6425
msgid "the top half of a 128-bit FP/SIMD register is expected"
msgstr ""
-#: config/tc-aarch64.c:5933 config/tc-arm.c:2201 config/tc-arm.c:2246
+#: config/tc-aarch64.c:6500 config/tc-arm.c:2219 config/tc-arm.c:2264
#: config/tc-h8300.c:1042
msgid "invalid register list"
msgstr ""
-#: config/tc-aarch64.c:5940
+#: config/tc-aarch64.c:6507
msgid "expected element type rather than vector type"
msgstr ""
-#: config/tc-aarch64.c:5961
+#: config/tc-aarch64.c:6528
msgid "missing type suffix"
msgstr ""
-#: config/tc-aarch64.c:5980
+#: config/tc-aarch64.c:6547
msgid "C0 - C15 expected"
msgstr ""
-#: config/tc-aarch64.c:6087 config/tc-aarch64.c:6111
+#: config/tc-aarch64.c:6654 config/tc-aarch64.c:6678
msgid "immediate zero expected"
msgstr ""
-#: config/tc-aarch64.c:6208
+#: config/tc-aarch64.c:6775
msgid "shift not allowed for bitmask immediate"
msgstr ""
-#: config/tc-aarch64.c:6262
+#: config/tc-aarch64.c:6829
msgid "can't mix relocation modifier with explicit shift"
msgstr ""
-#: config/tc-aarch64.c:6311 config/tc-arm.c:15881 config/tc-arm.c:15906
-#: config/tc-arm.c:15917 config/tc-arm.c:15924
+#: config/tc-aarch64.c:6878 config/tc-arm.c:15929 config/tc-arm.c:15954
+#: config/tc-arm.c:15965 config/tc-arm.c:15972
msgid "invalid condition"
msgstr ""
-#: config/tc-aarch64.c:6337
+#: config/tc-aarch64.c:6904
msgid "invalid pc-relative address"
msgstr ""
#. Only permit "=value" in the literal load instructions.
#. The literal will be generated by programmer_friendly_fixup.
-#: config/tc-aarch64.c:6345
+#: config/tc-aarch64.c:6912
msgid "invalid use of \"=immediate\""
msgstr ""
-#: config/tc-aarch64.c:6410 config/tc-aarch64.c:6442 config/tc-aarch64.c:6460
-#: config/tc-aarch64.c:6484 config/tc-aarch64.c:6504 config/tc-aarch64.c:6523
-#: config/tc-aarch64.c:6546 config/tc-aarch64.c:6582 config/tc-aarch64.c:6589
-#: config/tc-aarch64.c:6617 config/tc-aarch64.c:6637 config/tc-aarch64.c:6662
-#: config/tc-aarch64.c:6680 config/tc-aarch64.c:6688 config/tc-aarch64.c:6705
-#: config/tc-aarch64.c:6729
+#: config/tc-aarch64.c:6977 config/tc-aarch64.c:7009 config/tc-aarch64.c:7027
+#: config/tc-aarch64.c:7051 config/tc-aarch64.c:7071 config/tc-aarch64.c:7090
+#: config/tc-aarch64.c:7113 config/tc-aarch64.c:7179 config/tc-aarch64.c:7186
+#: config/tc-aarch64.c:7214 config/tc-aarch64.c:7235 config/tc-aarch64.c:7260
+#: config/tc-aarch64.c:7278 config/tc-aarch64.c:7286 config/tc-aarch64.c:7303
+#: config/tc-aarch64.c:7327
msgid "invalid addressing mode"
msgstr ""
-#: config/tc-aarch64.c:6426
+#: config/tc-aarch64.c:6993
msgid "the optional immediate offset can only be 0"
msgstr ""
-#: config/tc-aarch64.c:6465 config/tc-aarch64.c:6489 config/tc-aarch64.c:6509
+#: config/tc-aarch64.c:7032 config/tc-aarch64.c:7056 config/tc-aarch64.c:7076
msgid "relocation not allowed"
msgstr ""
-#: config/tc-aarch64.c:6556
+#: config/tc-aarch64.c:7123
msgid "writeback value must be an immediate constant"
msgstr ""
+#: config/tc-aarch64.c:7134 config/tc-aarch64.c:7353
+msgid "unknown or missing PSTATE field name"
+msgstr ""
+
#. Make sure this has priority over
#. "invalid addressing mode".
-#: config/tc-aarch64.c:6597
+#: config/tc-aarch64.c:7194
msgid "constant offset required"
msgstr ""
-#: config/tc-aarch64.c:6741
+#: config/tc-aarch64.c:7339
msgid "unknown or missing system register name"
msgstr ""
-#: config/tc-aarch64.c:6753
-msgid "unknown or missing PSTATE field name"
-msgstr ""
-
-#: config/tc-aarch64.c:6785
+#: config/tc-aarch64.c:7387
msgid "unknown or missing operation name"
msgstr ""
-#: config/tc-aarch64.c:6798
+#: config/tc-aarch64.c:7400
msgid "the specified option is not accepted in ISB"
msgstr ""
-#: config/tc-aarch64.c:6810 config/tc-aarch64.c:6827
+#: config/tc-aarch64.c:7412 config/tc-aarch64.c:7429
msgid "the specified option is not accepted in DSB"
msgstr ""
-#: config/tc-aarch64.c:6841
+#: config/tc-aarch64.c:7443
msgid "immediate value must be 16, 20, 24, 28"
msgstr ""
-#: config/tc-aarch64.c:6871 config/tc-aarch64.c:8084 config/tc-arm.c:8012
+#: config/tc-aarch64.c:7544 config/tc-aarch64.c:8792 config/tc-arm.c:8060
#, c-format
msgid "unhandled operand code %d"
msgstr ""
-#: config/tc-aarch64.c:6913
+#: config/tc-aarch64.c:7586
msgid "unexpected comma before the omitted optional operand"
msgstr ""
-#: config/tc-aarch64.c:6941
+#: config/tc-aarch64.c:7614
msgid "unexpected characters following instruction"
msgstr ""
-#: config/tc-aarch64.c:7019 config/tc-arm.c:5621 config/tc-arm.c:6239
-#: config/tc-arm.c:8826
+#: config/tc-aarch64.c:7692 config/tc-arm.c:5669 config/tc-arm.c:6287
+#: config/tc-arm.c:8874
msgid "constant expression expected"
msgstr ""
-#: config/tc-aarch64.c:7026
+#: config/tc-aarch64.c:7699
msgid "literal pool insertion failed"
msgstr ""
-#: config/tc-aarch64.c:7097 config/tc-aarch64.c:7112
+#: config/tc-aarch64.c:7770 config/tc-aarch64.c:7785
#, c-format
msgid "unpredictable transfer with writeback -- `%s'"
msgstr ""
-#: config/tc-aarch64.c:7116 config/tc-aarch64.c:7130
+#: config/tc-aarch64.c:7789 config/tc-aarch64.c:7803
#, c-format
msgid "unpredictable load of register pair -- `%s'"
msgstr ""
-#: config/tc-aarch64.c:7137 config/tc-aarch64.c:7150
+#: config/tc-aarch64.c:7810 config/tc-aarch64.c:7823
#, c-format
msgid "unpredictable: identical transfer and status registers --`%s'"
msgstr ""
-#: config/tc-aarch64.c:7145 config/tc-aarch64.c:7159
+#: config/tc-aarch64.c:7818 config/tc-aarch64.c:7832
#, c-format
msgid "unpredictable: identical base and status registers --`%s'"
msgstr ""
-#: config/tc-aarch64.c:7175
+#: config/tc-aarch64.c:7852
#, c-format
msgid "previous `%s' sequence has not been closed"
msgstr ""
-#: config/tc-aarch64.c:7254
+#: config/tc-aarch64.c:7937
+#, c-format
+msgid "unknown mnemonic -- `%s'"
+msgstr ""
+
+#: config/tc-aarch64.c:7947
#, c-format
msgid "unknown mnemonic `%s' -- `%s'"
msgstr ""
-#: config/tc-aarch64.c:7262
+#: config/tc-aarch64.c:7955
#, c-format
msgid "unexpected comma after the mnemonic name `%s' -- `%s'"
msgstr ""
-#: config/tc-aarch64.c:7320
+#: config/tc-aarch64.c:8013
#, c-format
msgid "selected processor does not support `%s'"
msgstr ""
-#: config/tc-aarch64.c:7743 config/tc-arm.c:28067
+#: config/tc-aarch64.c:8451 config/tc-arm.c:28125
msgid "GOT already in the symbol table"
msgstr ""
-#: config/tc-aarch64.c:7906
+#: config/tc-aarch64.c:8614
msgid "immediate cannot be moved by a single instruction"
msgstr ""
-#: config/tc-aarch64.c:7950 config/tc-aarch64.c:7995 config/tc-aarch64.c:8021
-#: config/tc-arm.c:16425 config/tc-arm.c:18122 config/tc-arm.c:18702
-#: config/tc-arm.c:18729 config/tc-arm.c:19517 config/tc-arm.c:20352
-#: config/tc-arm.c:21369 config/tc-arm.c:21429 config/tc-metag.c:2443
+#: config/tc-aarch64.c:8658 config/tc-aarch64.c:8703 config/tc-aarch64.c:8729
+#: config/tc-arm.c:16473 config/tc-arm.c:18170 config/tc-arm.c:18750
+#: config/tc-arm.c:18777 config/tc-arm.c:19565 config/tc-arm.c:20400
+#: config/tc-arm.c:21423 config/tc-arm.c:21483 config/tc-metag.c:2443
#: config/tc-metag.c:2452 config/tc-metag.c:2491 config/tc-metag.c:2500
#: config/tc-metag.c:3019 config/tc-metag.c:3028
msgid "immediate out of range"
msgstr ""
-#: config/tc-aarch64.c:8014 config/tc-metag.c:4654 config/tc-xtensa.c:4243
+#: config/tc-aarch64.c:8722 config/tc-metag.c:4654 config/tc-xtensa.c:4243
msgid "invalid immediate"
msgstr ""
-#: config/tc-aarch64.c:8079 config/tc-tic6x.c:3855 config/tc-tic6x.c:3920
+#: config/tc-aarch64.c:8787 config/tc-tic6x.c:3855 config/tc-tic6x.c:3920
#: config/tc-tic6x.c:3947 config/tc-tic6x.c:3975
msgid "immediate offset out of range"
msgstr ""
-#: config/tc-aarch64.c:8153 config/tc-arm.c:28405 config/tc-arm.c:28473
-#: config/tc-arm.c:28755
+#: config/tc-aarch64.c:8861 config/tc-arm.c:28463 config/tc-arm.c:28531
+#: config/tc-arm.c:28813
#, c-format
msgid "undefined symbol %s used as an immediate value"
msgstr ""
-#: config/tc-aarch64.c:8165
+#: config/tc-aarch64.c:8873
msgid "pc-relative load offset not word aligned"
msgstr ""
-#: config/tc-aarch64.c:8168
+#: config/tc-aarch64.c:8876
msgid "pc-relative load offset out of range"
msgstr ""
-#: config/tc-aarch64.c:8180
+#: config/tc-aarch64.c:8888
msgid "pc-relative address offset out of range"
msgstr ""
-#: config/tc-aarch64.c:8192 config/tc-aarch64.c:8207
+#: config/tc-aarch64.c:8900 config/tc-aarch64.c:8915
msgid "conditional branch target not word aligned"
msgstr ""
-#: config/tc-aarch64.c:8195 config/tc-aarch64.c:8210 config/tc-arm.c:29050
+#: config/tc-aarch64.c:8903 config/tc-aarch64.c:8918 config/tc-arm.c:29108
msgid "conditional branch out of range"
msgstr ""
-#: config/tc-aarch64.c:8223
+#: config/tc-aarch64.c:8931
msgid "branch target not word aligned"
msgstr ""
-#: config/tc-aarch64.c:8226 config/tc-arm.c:927 config/tc-arm.c:29856
+#: config/tc-aarch64.c:8934 config/tc-arm.c:929 config/tc-arm.c:29914
#: config/tc-mips.c:16069 config/tc-mips.c:16085 config/tc-mips.c:16175
msgid "branch out of range"
msgstr ""
-#: config/tc-aarch64.c:8285 config/tc-arm.c:28646 config/tc-arm.c:28661
-#: config/tc-arm.c:28676 config/tc-arm.c:28687 config/tc-arm.c:28710
-#: config/tc-arm.c:29560 config/tc-moxie.c:714 config/tc-pj.c:449
-#: config/tc-sh.c:3728
-msgid "offset out of range"
-msgstr ""
-
-#: config/tc-aarch64.c:8300
+#: config/tc-aarch64.c:9008
msgid "unsigned value out of range"
msgstr ""
-#: config/tc-aarch64.c:8311
+#: config/tc-aarch64.c:9019
msgid "signed value out of range"
msgstr ""
-#: config/tc-aarch64.c:8461
+#: config/tc-aarch64.c:9169
#, c-format
msgid "unexpected %s fixup"
msgstr ""
-#: config/tc-aarch64.c:8526 config/tc-arm.c:30276 config/tc-arm.c:30297
-#: config/tc-mips.c:18436 config/tc-or1k.c:345 config/tc-score.c:7448
+#: config/tc-aarch64.c:9234 config/tc-arm.c:30334 config/tc-arm.c:30355
+#: config/tc-mips.c:18429 config/tc-or1k.c:345 config/tc-score.c:7448
#, c-format
msgid "cannot represent %s relocation in this object file format"
msgstr ""
-#: config/tc-aarch64.c:8559
+#: config/tc-aarch64.c:9267
#, c-format
msgid "cannot do %u-byte relocation"
msgstr ""
-#: config/tc-aarch64.c:8964 config/tc-arm.c:31111
+#: config/tc-aarch64.c:9672 config/tc-arm.c:31169
msgid "assemble for big-endian"
msgstr ""
-#: config/tc-aarch64.c:8965 config/tc-arm.c:31112
+#: config/tc-aarch64.c:9673 config/tc-arm.c:31170
msgid "assemble for little-endian"
msgstr ""
-#: config/tc-aarch64.c:8968
+#: config/tc-aarch64.c:9676
msgid "temporary switch for dumping"
msgstr ""
-#: config/tc-aarch64.c:8970
+#: config/tc-aarch64.c:9678
msgid "output verbose error messages"
msgstr ""
-#: config/tc-aarch64.c:8972
+#: config/tc-aarch64.c:9680
msgid "do not output verbose error messages"
msgstr ""
-#: config/tc-aarch64.c:9310 config/tc-arm.c:32234
+#: config/tc-aarch64.c:10056 config/tc-arm.c:32328
msgid "invalid architectural extension"
msgstr ""
-#: config/tc-aarch64.c:9335 config/tc-arm.c:32266
+#: config/tc-aarch64.c:10081 config/tc-arm.c:32360
msgid "must specify extensions to add before specifying those to remove"
msgstr ""
-#: config/tc-aarch64.c:9343 config/tc-arm.c:32274
+#: config/tc-aarch64.c:10089 config/tc-arm.c:32368
msgid "missing architectural extension"
msgstr ""
-#: config/tc-aarch64.c:9370 config/tc-arm.c:32360
+#: config/tc-aarch64.c:10116 config/tc-arm.c:32454
#, c-format
msgid "unknown architectural extension `%s'"
msgstr ""
-#: config/tc-aarch64.c:9394 config/tc-arm.c:32410 config/tc-metag.c:5832
+#: config/tc-aarch64.c:10140 config/tc-arm.c:32504 config/tc-metag.c:5832
#, c-format
msgid "missing cpu name `%s'"
msgstr ""
-#: config/tc-aarch64.c:9408 config/tc-aarch64.c:9624 config/tc-arm.c:32445
-#: config/tc-arm.c:33246 config/tc-csky.c:1218 config/tc-metag.c:5843
+#: config/tc-aarch64.c:10154 config/tc-aarch64.c:10370 config/tc-arm.c:32539
+#: config/tc-arm.c:33346 config/tc-csky.c:1218 config/tc-metag.c:5843
#, c-format
msgid "unknown cpu `%s'"
msgstr ""
-#: config/tc-aarch64.c:9426 config/tc-arm.c:32463
+#: config/tc-aarch64.c:10172 config/tc-arm.c:32557
#, c-format
msgid "missing architecture name `%s'"
msgstr ""
-#: config/tc-aarch64.c:9440 config/tc-aarch64.c:9671 config/tc-arm.c:32485
-#: config/tc-arm.c:33281 config/tc-arm.c:33311 config/tc-score.c:7683
+#: config/tc-aarch64.c:10186 config/tc-aarch64.c:10417 config/tc-arm.c:32579
+#: config/tc-arm.c:33381 config/tc-arm.c:33411 config/tc-score.c:7683
#, c-format
msgid "unknown architecture `%s'\n"
msgstr ""
-#: config/tc-aarch64.c:9463
+#: config/tc-aarch64.c:10209
#, c-format
msgid "missing abi name `%s'"
msgstr ""
-#: config/tc-aarch64.c:9474
+#: config/tc-aarch64.c:10220
#, c-format
msgid "unknown abi `%s'\n"
msgstr ""
-#: config/tc-aarch64.c:9480
+#: config/tc-aarch64.c:10226
msgid "<abi name>\t specify for ABI <abi name>"
msgstr ""
-#: config/tc-aarch64.c:9483 config/tc-arm.c:32572 config/tc-metag.c:5909
+#: config/tc-aarch64.c:10229 config/tc-arm.c:32666 config/tc-metag.c:5909
msgid "<cpu name>\t assemble for CPU <cpu name>"
msgstr ""
-#: config/tc-aarch64.c:9485 config/tc-arm.c:32574
+#: config/tc-aarch64.c:10231 config/tc-arm.c:32668
msgid "<arch name>\t assemble for architecture <arch name>"
msgstr ""
-#: config/tc-aarch64.c:9524 config/tc-aarch64.c:9543 config/tc-arm.c:32642
-#: config/tc-arm.c:32660 config/tc-arm.c:32680 config/tc-metag.c:5933
+#: config/tc-aarch64.c:10270 config/tc-aarch64.c:10289 config/tc-arm.c:32736
+#: config/tc-arm.c:32754 config/tc-arm.c:32774 config/tc-metag.c:5933
#, c-format
msgid "option `-%c%s' is deprecated: %s"
msgstr ""
-#: config/tc-aarch64.c:9563
+#: config/tc-aarch64.c:10309
#, c-format
msgid " AArch64-specific assembler options:\n"
msgstr ""
-#: config/tc-aarch64.c:9574 config/tc-arc.c:3576 config/tc-arm.c:32711
+#: config/tc-aarch64.c:10320 config/tc-arc.c:3576 config/tc-arm.c:32805
#, c-format
msgid " -EB assemble code for a big-endian cpu\n"
msgstr ""
-#: config/tc-aarch64.c:9579 config/tc-arc.c:3578 config/tc-arm.c:32716
+#: config/tc-aarch64.c:10325 config/tc-arc.c:3578 config/tc-arm.c:32810
#, c-format
msgid " -EL assemble code for a little-endian cpu\n"
msgstr ""
@@ -2378,7 +2513,7 @@ msgid "sequence number in use for !tlsgd!%ld"
msgstr ""
#: config/tc-alpha.c:1992 config/tc-arc.c:2848 config/tc-mn10200.c:847
-#: config/tc-mn10300.c:1150 config/tc-ppc.c:2016 config/tc-s390.c:668
+#: config/tc-mn10300.c:1150 config/tc-ppc.c:2028 config/tc-s390.c:668
#: config/tc-tilegx.c:422 config/tc-tilegx.c:472 config/tc-tilepro.c:375
msgid "operand"
msgstr ""
@@ -2395,12 +2530,12 @@ msgstr ""
msgid "can not resolve expression"
msgstr ""
-#: config/tc-alpha.c:3512 config/tc-microblaze.c:204 config/tc-ppc.c:2349
+#: config/tc-alpha.c:3512 config/tc-microblaze.c:204 config/tc-ppc.c:2365
#, c-format
msgid ".COMMon length (%ld.) <0! Ignored."
msgstr ""
-#: config/tc-alpha.c:3523 config/tc-ia64.c:1091 config/tc-sparc.c:4270
+#: config/tc-alpha.c:3523 config/tc-ia64.c:1092 config/tc-sparc.c:4270
#: config/tc-v850.c:306
msgid "Ignoring attempt to re-define symbol"
msgstr ""
@@ -2446,12 +2581,12 @@ msgstr ""
msgid "bad .mask directive"
msgstr ""
-#: config/tc-alpha.c:3872 config/tc-mips.c:19918 config/tc-score.c:5736
+#: config/tc-alpha.c:3872 config/tc-mips.c:19911 config/tc-score.c:5736
#: ecoff.c:3161
msgid ".frame outside of .ent"
msgstr ""
-#: config/tc-alpha.c:3883 config/tc-mips.c:19929 ecoff.c:3172
+#: config/tc-alpha.c:3883 config/tc-mips.c:19922 ecoff.c:3172
msgid "bad .frame directive"
msgstr ""
@@ -2610,14 +2745,14 @@ msgstr ""
#: config/tc-arc.c:2552 config/tc-arc.c:2584 config/tc-arc.c:2689
#: config/tc-cr16.c:809 config/tc-cr16.c:828 config/tc-cris.c:1223
#: config/tc-crx.c:512 config/tc-crx.c:534 config/tc-crx.c:545
-#: config/tc-dlx.c:289 config/tc-hppa.c:8246 config/tc-i386.c:3084
-#: config/tc-i386.c:3136 config/tc-ia64.c:5380 config/tc-ia64.c:7418
-#: config/tc-ia64.c:7477 config/tc-m68k.c:4574 config/tc-m68k.c:4586
+#: config/tc-dlx.c:289 config/tc-hppa.c:8246 config/tc-i386.c:3088
+#: config/tc-i386.c:3140 config/tc-ia64.c:5373 config/tc-ia64.c:7411
+#: config/tc-ia64.c:7470 config/tc-m68k.c:4574 config/tc-m68k.c:4586
#: config/tc-mips.c:3700 config/tc-mips.c:3733 config/tc-mips.c:3759
#: config/tc-nds32.c:3439 config/tc-nios2.c:3624 config/tc-nios2.c:3629
-#: config/tc-nios2.c:3635 config/tc-ns32k.c:1906 config/tc-ppc.c:1705
-#: config/tc-ppc.c:1743 config/tc-ppc.c:1782 config/tc-ppc.c:1821
-#: config/tc-ppc.c:1839 config/tc-pru.c:1568 config/tc-pru.c:1572
+#: config/tc-nios2.c:3635 config/tc-ns32k.c:1906 config/tc-ppc.c:1717
+#: config/tc-ppc.c:1755 config/tc-ppc.c:1794 config/tc-ppc.c:1833
+#: config/tc-ppc.c:1851 config/tc-pru.c:1568 config/tc-pru.c:1572
#: config/tc-s390.c:538 config/tc-s390.c:576 config/tc-sparc.c:961
#: config/tc-sparc.c:993 config/tc-tic30.c:121 config/tc-tic30.c:131
#: config/tc-tic30.c:141 config/tc-tic30.c:151 config/tc-tic4x.c:1217
@@ -2628,7 +2763,7 @@ msgid "duplicate %s"
msgstr ""
#: config/tc-alpha.c:5545 config/tc-arc.c:2520 config/tc-arc.c:2534
-#: config/tc-arm.c:899 config/tc-xtensa.c:5487 config/tc-xtensa.c:5563
+#: config/tc-arm.c:901 config/tc-xtensa.c:5487 config/tc-xtensa.c:5563
#: config/tc-xtensa.c:5680 config/tc-z80.c:3675
msgid "syntax error"
msgstr ""
@@ -2676,7 +2811,7 @@ msgstr ""
msgid "!samegp reloc against symbol without .prologue: %s"
msgstr ""
-#: config/tc-alpha.c:6236 config/tc-arc.c:3254 config/tc-csky.c:5645
+#: config/tc-alpha.c:6236 config/tc-arc.c:3254 config/tc-csky.c:5646
#: config/tc-tilegx.c:1745 config/tc-tilepro.c:1522 config/tc-wasm32.c:813
#: config/tc-xtensa.c:6190
#, c-format
@@ -2715,7 +2850,7 @@ msgstr ""
msgid "unknown architecture: %s\n"
msgstr ""
-#: config/tc-arc.c:891 config/tc-ia64.c:7487 config/tc-tilegx.c:262
+#: config/tc-arc.c:891 config/tc-ia64.c:7480 config/tc-tilegx.c:262
msgid "Could not set architecture and machine"
msgstr ""
@@ -2827,8 +2962,8 @@ msgstr ""
#: config/tc-hppa.c:6820 config/tc-hppa.c:6826 config/tc-hppa.c:6832
#: config/tc-hppa.c:6838 config/tc-hppa.c:8225 config/tc-lm32.c:197
#: config/tc-mips.c:3690 config/tc-mips.c:4187 config/tc-mn10300.c:935
-#: config/tc-mn10300.c:940 config/tc-mn10300.c:2440 config/tc-riscv.c:1221
-#: config/tc-riscv.c:3877 config/tc-xc16x.c:79 config/tc-xc16x.c:86
+#: config/tc-mn10300.c:940 config/tc-mn10300.c:2440 config/tc-riscv.c:1263
+#: config/tc-riscv.c:4430 config/tc-xc16x.c:79 config/tc-xc16x.c:86
#: config/tc-xc16x.c:93
msgid "could not set architecture and machine"
msgstr ""
@@ -3065,545 +3200,549 @@ msgstr ""
msgid "Overwrite explicitly set Tag_ARC_ABI_rf16 to full register file"
msgstr ""
-#: config/tc-arm.c:710
+#: config/tc-arm.c:711
msgid "ARM register expected"
msgstr ""
-#: config/tc-arm.c:711
+#: config/tc-arm.c:712
msgid "bad or missing co-processor number"
msgstr ""
-#: config/tc-arm.c:712
+#: config/tc-arm.c:713
msgid "co-processor register expected"
msgstr ""
-#: config/tc-arm.c:713
+#: config/tc-arm.c:714
msgid "FPA register expected"
msgstr ""
-#: config/tc-arm.c:714
+#: config/tc-arm.c:715
msgid "VFP single precision register expected"
msgstr ""
-#: config/tc-arm.c:715
+#: config/tc-arm.c:716
msgid "VFP/Neon double precision register expected"
msgstr ""
-#: config/tc-arm.c:716
+#: config/tc-arm.c:717
msgid "Neon quad precision register expected"
msgstr ""
-#: config/tc-arm.c:717
+#: config/tc-arm.c:718
msgid "VFP single or double precision register expected"
msgstr ""
-#: config/tc-arm.c:718
+#: config/tc-arm.c:719
msgid "Neon double or quad precision register expected"
msgstr ""
-#: config/tc-arm.c:719
+#: config/tc-arm.c:720
msgid "Neon single or double precision register expected"
msgstr ""
-#: config/tc-arm.c:720
+#: config/tc-arm.c:721
msgid "VFP single, double or Neon quad precision register expected"
msgstr ""
-#: config/tc-arm.c:722
+#: config/tc-arm.c:723
msgid "VFP system register expected"
msgstr ""
-#: config/tc-arm.c:723
+#: config/tc-arm.c:724
msgid "Maverick MVF register expected"
msgstr ""
-#: config/tc-arm.c:724
+#: config/tc-arm.c:725
msgid "Maverick MVD register expected"
msgstr ""
-#: config/tc-arm.c:725
+#: config/tc-arm.c:726
msgid "Maverick MVFX register expected"
msgstr ""
-#: config/tc-arm.c:726
+#: config/tc-arm.c:727
msgid "Maverick MVDX register expected"
msgstr ""
-#: config/tc-arm.c:727
+#: config/tc-arm.c:728
msgid "Maverick MVAX register expected"
msgstr ""
-#: config/tc-arm.c:728
+#: config/tc-arm.c:729
msgid "Maverick DSPSC register expected"
msgstr ""
-#: config/tc-arm.c:729
+#: config/tc-arm.c:730
msgid "iWMMXt data register expected"
msgstr ""
-#: config/tc-arm.c:730 config/tc-arm.c:7812
+#: config/tc-arm.c:731 config/tc-arm.c:7860
msgid "iWMMXt control register expected"
msgstr ""
-#: config/tc-arm.c:731
+#: config/tc-arm.c:732
msgid "iWMMXt scalar register expected"
msgstr ""
-#: config/tc-arm.c:732
+#: config/tc-arm.c:733
msgid "XScale accumulator register expected"
msgstr ""
-#: config/tc-arm.c:733
+#: config/tc-arm.c:734
msgid "MVE vector register expected"
msgstr ""
-#: config/tc-arm.c:735
+#: config/tc-arm.c:736
msgid "ZR register expected"
msgstr ""
+#: config/tc-arm.c:737
+msgid "Pseudo register expected"
+msgstr ""
+
#. For score5u : div/mul will pop warning message, mmu/alw/asw will pop error message.
-#: config/tc-arm.c:900 config/tc-score.c:259
+#: config/tc-arm.c:902 config/tc-score.c:259
msgid "bad arguments to instruction"
msgstr ""
-#: config/tc-arm.c:901
+#: config/tc-arm.c:903
msgid "r13 not allowed here"
msgstr ""
-#: config/tc-arm.c:902
+#: config/tc-arm.c:904
msgid "r15 not allowed here"
msgstr ""
-#: config/tc-arm.c:903
+#: config/tc-arm.c:905
msgid "Odd register not allowed here"
msgstr ""
-#: config/tc-arm.c:904
+#: config/tc-arm.c:906
msgid "Even register not allowed here"
msgstr ""
-#: config/tc-arm.c:905
+#: config/tc-arm.c:907
msgid "instruction cannot be conditional"
msgstr ""
-#: config/tc-arm.c:906
+#: config/tc-arm.c:908
msgid "registers may not be the same"
msgstr ""
-#: config/tc-arm.c:907
+#: config/tc-arm.c:909
msgid "lo register required"
msgstr ""
-#: config/tc-arm.c:908
+#: config/tc-arm.c:910
msgid "instruction not supported in Thumb16 mode"
msgstr ""
-#: config/tc-arm.c:909
+#: config/tc-arm.c:911
msgid "instruction does not accept this addressing mode"
msgstr ""
-#: config/tc-arm.c:910
+#: config/tc-arm.c:912
msgid "branch must be last instruction in IT block"
msgstr ""
-#: config/tc-arm.c:911
+#: config/tc-arm.c:913
msgid "branch out of range or not a multiple of 2"
msgstr ""
-#: config/tc-arm.c:912
+#: config/tc-arm.c:914
msgid "instruction not allowed in VPT block"
msgstr ""
-#: config/tc-arm.c:913
+#: config/tc-arm.c:915
msgid "instruction not allowed in IT block"
msgstr ""
-#: config/tc-arm.c:914
+#: config/tc-arm.c:916
msgid "instruction missing MVE vector predication code"
msgstr ""
-#: config/tc-arm.c:915
+#: config/tc-arm.c:917
msgid "selected FPU does not support instruction"
msgstr ""
-#: config/tc-arm.c:916
+#: config/tc-arm.c:918
msgid "thumb conditional instruction should be in IT block"
msgstr ""
-#: config/tc-arm.c:918
+#: config/tc-arm.c:920
msgid "vector predicated instruction should be in VPT/VPST block"
msgstr ""
-#: config/tc-arm.c:919
+#: config/tc-arm.c:921
msgid "incorrect condition in IT block"
msgstr ""
-#: config/tc-arm.c:920
+#: config/tc-arm.c:922
msgid "incorrect condition in VPT/VPST block"
msgstr ""
-#: config/tc-arm.c:921
+#: config/tc-arm.c:923
msgid "IT falling in the range of a previous IT block"
msgstr ""
-#: config/tc-arm.c:922
+#: config/tc-arm.c:924
msgid "missing .fnstart before unwinding directive"
msgstr ""
-#: config/tc-arm.c:924
+#: config/tc-arm.c:926
msgid "cannot use register index with PC-relative addressing"
msgstr ""
-#: config/tc-arm.c:926
+#: config/tc-arm.c:928
msgid "cannot use writeback with PC-relative addressing"
msgstr ""
-#: config/tc-arm.c:928
+#: config/tc-arm.c:930
msgid "selected processor does not support fp16 instruction"
msgstr ""
-#: config/tc-arm.c:929
+#: config/tc-arm.c:931
msgid "selected processor does not support bf16 instruction"
msgstr ""
-#: config/tc-arm.c:930
+#: config/tc-arm.c:932
msgid "selected processor does not support cde instruction"
msgstr ""
-#: config/tc-arm.c:931
+#: config/tc-arm.c:933
msgid "coprocessor for insn is not enabled for cde"
msgstr ""
-#: config/tc-arm.c:932
+#: config/tc-arm.c:934
msgid "using "
msgstr ""
-#: config/tc-arm.c:933
+#: config/tc-arm.c:935
msgid "relocation valid in thumb1 code only"
msgstr ""
-#: config/tc-arm.c:934
+#: config/tc-arm.c:936
msgid "Warning: instruction is UNPREDICTABLE in an IT block"
msgstr ""
-#: config/tc-arm.c:936
+#: config/tc-arm.c:938
msgid "Warning: instruction is UNPREDICTABLE in a VPT block"
msgstr ""
-#: config/tc-arm.c:938
+#: config/tc-arm.c:940
msgid "Warning: instruction is UNPREDICTABLE with PC operand"
msgstr ""
-#: config/tc-arm.c:940
+#: config/tc-arm.c:942
msgid "Warning: instruction is UNPREDICTABLE with SP operand"
msgstr ""
-#: config/tc-arm.c:942
+#: config/tc-arm.c:944
msgid "bad type in SIMD instruction"
msgstr ""
-#: config/tc-arm.c:944
+#: config/tc-arm.c:946
msgid ""
"GAS auto-detection mode and -march=all is deprecated for MVE, please use a "
"valid -march or -mcpu option."
msgstr ""
-#: config/tc-arm.c:946
+#: config/tc-arm.c:948
msgid ""
"Warning: 32-bit element size and same destination and source operands makes "
"instruction UNPREDICTABLE"
msgstr ""
-#: config/tc-arm.c:948
+#: config/tc-arm.c:950
msgid "bad element type for instruction"
msgstr ""
-#: config/tc-arm.c:949
+#: config/tc-arm.c:951
msgid "MVE vector register Q[0..7] expected"
msgstr ""
-#: config/tc-arm.c:950
+#: config/tc-arm.c:952
msgid "selected processor does not support PACBTI extention"
msgstr ""
-#: config/tc-arm.c:1170
+#: config/tc-arm.c:1172
msgid "immediate expression requires a # prefix"
msgstr ""
-#: config/tc-arm.c:1199 read.c:4028
+#: config/tc-arm.c:1201 read.c:4028
msgid "missing expression"
msgstr ""
-#: config/tc-arm.c:1213 config/tc-arm.c:5634 config/tc-score.c:1209
+#: config/tc-arm.c:1215 config/tc-arm.c:5682 config/tc-score.c:1209
msgid "invalid constant"
msgstr ""
-#: config/tc-arm.c:1348
+#: config/tc-arm.c:1350
msgid "expected #constant"
msgstr ""
-#: config/tc-arm.c:1520 config/tc-arm.c:1551
+#: config/tc-arm.c:1522 config/tc-arm.c:1553
#, c-format
msgid "bad size %d in type specifier"
msgstr ""
-#: config/tc-arm.c:1527
+#: config/tc-arm.c:1529
msgid "unexpected type character `b' -- did you mean `bf'?"
msgstr ""
-#: config/tc-arm.c:1534
+#: config/tc-arm.c:1536
#, c-format
msgid "unexpected character `%c' in type specifier"
msgstr ""
-#: config/tc-arm.c:1601
+#: config/tc-arm.c:1603
msgid "only one type should be specified for operand"
msgstr ""
-#: config/tc-arm.c:1607
+#: config/tc-arm.c:1609
msgid "vector type expected"
msgstr ""
-#: config/tc-arm.c:1716
+#: config/tc-arm.c:1718
msgid "expected MVE register [q0..q7]"
msgstr ""
-#: config/tc-arm.c:1736
+#: config/tc-arm.c:1738
msgid "can't redefine type for operand"
msgstr ""
-#: config/tc-arm.c:1752
+#: config/tc-arm.c:1754
msgid "only D and Q registers may be indexed"
msgstr ""
-#: config/tc-arm.c:1754
+#: config/tc-arm.c:1756
msgid "only D registers may be indexed"
msgstr ""
-#: config/tc-arm.c:1760
+#: config/tc-arm.c:1762
msgid "can't change index for operand"
msgstr ""
-#: config/tc-arm.c:1823
+#: config/tc-arm.c:1825
msgid "register operand expected, but got scalar"
msgstr ""
-#: config/tc-arm.c:1874
+#: config/tc-arm.c:1876
msgid "scalar must have an index"
msgstr ""
-#: config/tc-arm.c:1879 config/tc-arm.c:20197 config/tc-arm.c:20280
-#: config/tc-arm.c:20947
+#: config/tc-arm.c:1881 config/tc-arm.c:20245 config/tc-arm.c:20328
+#: config/tc-arm.c:21001
msgid "scalar index out of range"
msgstr ""
-#: config/tc-arm.c:1949
+#: config/tc-arm.c:1959
msgid "r0-r12, lr or APSR expected"
msgstr ""
-#: config/tc-arm.c:1968
+#: config/tc-arm.c:1986
msgid "bad range in register list"
msgstr ""
-#: config/tc-arm.c:1976 config/tc-arm.c:1985 config/tc-arm.c:2026
+#: config/tc-arm.c:1994 config/tc-arm.c:2003 config/tc-arm.c:2044
#, c-format
msgid "Warning: duplicated register (r%d) in register list"
msgstr ""
-#: config/tc-arm.c:1988
+#: config/tc-arm.c:2006
msgid "Warning: register range not in ascending order"
msgstr ""
-#: config/tc-arm.c:1999
+#: config/tc-arm.c:2017
msgid "missing `}'"
msgstr ""
-#: config/tc-arm.c:2015
+#: config/tc-arm.c:2033
msgid "invalid register mask"
msgstr ""
-#: config/tc-arm.c:2159 config/tc-arm.c:2267
+#: config/tc-arm.c:2177 config/tc-arm.c:2285
msgid "VPR expected last"
msgstr ""
-#: config/tc-arm.c:2165
+#: config/tc-arm.c:2183
msgid "VFP single precision register or VPR expected"
msgstr ""
#. regtype == REG_TYPE_VFD.
-#: config/tc-arm.c:2168
+#: config/tc-arm.c:2186
msgid "VFP/Neon double precision register or VPR expected"
msgstr ""
-#: config/tc-arm.c:2185 config/tc-arm.c:2229
+#: config/tc-arm.c:2203 config/tc-arm.c:2247
msgid "register out of range in list"
msgstr ""
-#: config/tc-arm.c:2207 config/tc-arm.c:4502 config/tc-arm.c:4636
+#: config/tc-arm.c:2225 config/tc-arm.c:4546 config/tc-arm.c:4680
msgid "register list not in ascending order"
msgstr ""
-#: config/tc-arm.c:2238
+#: config/tc-arm.c:2256
msgid "register range not in ascending order"
msgstr ""
-#: config/tc-arm.c:2277
+#: config/tc-arm.c:2295
msgid "non-contiguous register range"
msgstr ""
-#: config/tc-arm.c:2337
+#: config/tc-arm.c:2355
msgid "register stride must be 1"
msgstr ""
-#: config/tc-arm.c:2338
+#: config/tc-arm.c:2356
msgid "register stride must be 1 or 2"
msgstr ""
-#: config/tc-arm.c:2339
+#: config/tc-arm.c:2357
msgid "mismatched element/structure types in list"
msgstr ""
-#: config/tc-arm.c:2409
+#: config/tc-arm.c:2427
msgid "don't use Rn-Rm syntax with non-unit stride"
msgstr ""
-#: config/tc-arm.c:2464
+#: config/tc-arm.c:2482
msgid "error parsing element/structure list"
msgstr ""
-#: config/tc-arm.c:2470
+#: config/tc-arm.c:2488
msgid "expected }"
msgstr ""
-#: config/tc-arm.c:2560
+#: config/tc-arm.c:2578
msgid "attempt to redefine typed alias"
msgstr ""
-#: config/tc-arm.c:2695
+#: config/tc-arm.c:2713
msgid "bad type for register"
msgstr ""
-#: config/tc-arm.c:2706 config/tc-nios2.c:1797
+#: config/tc-arm.c:2724 config/tc-nios2.c:1797
msgid "expression must be constant"
msgstr ""
-#: config/tc-arm.c:2723
+#: config/tc-arm.c:2741
msgid "can't redefine the type of a register alias"
msgstr ""
-#: config/tc-arm.c:2730
+#: config/tc-arm.c:2748
msgid "you must specify a single type only"
msgstr ""
-#: config/tc-arm.c:2743
+#: config/tc-arm.c:2761
msgid "can't redefine the index of a scalar alias"
msgstr ""
-#: config/tc-arm.c:2751
+#: config/tc-arm.c:2769
msgid "scalar index must be constant"
msgstr ""
-#: config/tc-arm.c:2760
+#: config/tc-arm.c:2778
msgid "expecting ]"
msgstr ""
-#: config/tc-arm.c:2812
+#: config/tc-arm.c:2830
msgid "invalid syntax for .dn directive"
msgstr ""
-#: config/tc-arm.c:2818
+#: config/tc-arm.c:2836
msgid "invalid syntax for .qn directive"
msgstr ""
-#: config/tc-arm.c:2853
+#: config/tc-arm.c:2871
#, c-format
msgid "ignoring attempt to use .unreq on fixed register name: '%s'"
msgstr ""
-#: config/tc-arm.c:3115
+#: config/tc-arm.c:3133
#, c-format
msgid "Failed to find real start of function: %s\n"
msgstr ""
-#: config/tc-arm.c:3132
+#: config/tc-arm.c:3150
msgid "selected processor does not support THUMB opcodes"
msgstr ""
-#: config/tc-arm.c:3145
+#: config/tc-arm.c:3163
msgid "selected processor does not support ARM opcodes"
msgstr ""
-#: config/tc-arm.c:3157
+#: config/tc-arm.c:3175
#, c-format
msgid "invalid instruction size selected (%d)"
msgstr ""
-#: config/tc-arm.c:3189
+#: config/tc-arm.c:3207
#, c-format
msgid "invalid operand to .code directive (%d) (expecting 16 or 32)"
msgstr ""
-#: config/tc-arm.c:3244
+#: config/tc-arm.c:3262
#, c-format
msgid "expected comma after name \"%s\""
msgstr ""
-#: config/tc-arm.c:3294 config/tc-m32r.c:584
+#: config/tc-arm.c:3312 config/tc-m32r.c:584
#, c-format
msgid "symbol `%s' already defined"
msgstr ""
-#: config/tc-arm.c:3327
+#: config/tc-arm.c:3345
#, c-format
msgid "unrecognized syntax mode \"%s\""
msgstr ""
-#: config/tc-arm.c:3370
+#: config/tc-arm.c:3388
msgid ".ref pseudo-op only available with -mccs flag."
msgstr ""
-#: config/tc-arm.c:3411
+#: config/tc-arm.c:3429
msgid ".asmfunc repeated."
msgstr ""
-#: config/tc-arm.c:3415
+#: config/tc-arm.c:3433
msgid ".asmfunc without function."
msgstr ""
-#: config/tc-arm.c:3421
+#: config/tc-arm.c:3439
msgid ".asmfunc pseudo-op only available with -mccs flag."
msgstr ""
-#: config/tc-arm.c:3432
+#: config/tc-arm.c:3450
msgid ".endasmfunc without a .asmfunc."
msgstr ""
-#: config/tc-arm.c:3436
+#: config/tc-arm.c:3454
msgid ".endasmfunc without function."
msgstr ""
-#: config/tc-arm.c:3447
+#: config/tc-arm.c:3465
msgid ".endasmfunc pseudo-op only available with -mccs flag."
msgstr ""
-#: config/tc-arm.c:3456
+#: config/tc-arm.c:3474
msgid ".def pseudo-op only available with -mccs flag."
msgstr ""
-#: config/tc-arm.c:3614
+#: config/tc-arm.c:3632
msgid "invalid type for literal pool"
msgstr ""
-#: config/tc-arm.c:3694 config/tc-tic54x.c:5331
+#: config/tc-arm.c:3712 config/tc-tic54x.c:5331
#, c-format
msgid "Invalid label '%s'"
msgstr ""
-#: config/tc-arm.c:3870
+#: config/tc-arm.c:3888
msgid "(plt) is only valid on branch targets"
msgstr ""
-#: config/tc-arm.c:3876 config/tc-csky.c:7649 config/tc-s390.c:1202
+#: config/tc-arm.c:3894 config/tc-csky.c:7650 config/tc-s390.c:1202
#: config/tc-s390.c:1872 config/tc-xtensa.c:1712
#, c-format
msgid "%s relocations do not fit in %d byte"
@@ -3611,417 +3750,421 @@ msgid_plural "%s relocations do not fit in %d bytes"
msgstr[0] ""
msgstr[1] ""
-#: config/tc-arm.c:3958
+#: config/tc-arm.c:3976
msgid ".inst.n operand too big. Use .inst.w instead"
msgstr ""
-#: config/tc-arm.c:3978
+#: config/tc-arm.c:3996
msgid "cannot determine Thumb instruction size. Use .inst.n/.inst.w instead"
msgstr ""
-#: config/tc-arm.c:4008
+#: config/tc-arm.c:4026
msgid "width suffixes are invalid in ARM mode"
msgstr ""
-#: config/tc-arm.c:4050 dwarf2dbg.c:1360
+#: config/tc-arm.c:4068 dwarf2dbg.c:1429
msgid "expected 0 or 1"
msgstr ""
-#: config/tc-arm.c:4054
+#: config/tc-arm.c:4072
msgid "missing comma"
msgstr ""
-#: config/tc-arm.c:4087
+#: config/tc-arm.c:4105
msgid "duplicate .fnstart directive"
msgstr ""
-#: config/tc-arm.c:4118 config/tc-tic6x.c:410
+#: config/tc-arm.c:4136 config/tc-tic6x.c:410
msgid "duplicate .handlerdata directive"
msgstr ""
-#: config/tc-arm.c:4137
+#: config/tc-arm.c:4155
msgid ".fnend directive without .fnstart"
msgstr ""
-#: config/tc-arm.c:4204 config/tc-tic6x.c:391
+#: config/tc-arm.c:4222 config/tc-tic6x.c:391
msgid "personality routine specified for cantunwind frame"
msgstr ""
-#: config/tc-arm.c:4221 config/tc-tic6x.c:452
+#: config/tc-arm.c:4239 config/tc-tic6x.c:452
msgid "duplicate .personalityindex directive"
msgstr ""
-#: config/tc-arm.c:4228 config/tc-tic6x.c:459
+#: config/tc-arm.c:4246 config/tc-tic6x.c:459
msgid "bad personality routine number"
msgstr ""
-#: config/tc-arm.c:4250 config/tc-tic6x.c:476
+#: config/tc-arm.c:4268 config/tc-tic6x.c:476
msgid "duplicate .personality directive"
msgstr ""
-#: config/tc-arm.c:4274 config/tc-arm.c:4404 config/tc-arm.c:4454
+#: config/tc-arm.c:4290
+msgid "expected pseudo register list"
+msgstr ""
+
+#: config/tc-arm.c:4318 config/tc-arm.c:4448 config/tc-arm.c:4498
msgid "expected register list"
msgstr ""
-#: config/tc-arm.c:4356
+#: config/tc-arm.c:4400
msgid "expected , <constant>"
msgstr ""
-#: config/tc-arm.c:4365
+#: config/tc-arm.c:4409
msgid "number of registers must be in the range [1:4]"
msgstr ""
-#: config/tc-arm.c:4516 config/tc-arm.c:4650
+#: config/tc-arm.c:4560 config/tc-arm.c:4694
msgid "bad register range"
msgstr ""
-#: config/tc-arm.c:4716
+#: config/tc-arm.c:4760
msgid "FPA .unwind_save does not take a register list"
msgstr ""
-#: config/tc-arm.c:4744
+#: config/tc-arm.c:4792
msgid ".unwind_save does not support this kind of register"
msgstr ""
-#: config/tc-arm.c:4783
+#: config/tc-arm.c:4831
msgid "SP and PC not permitted in .unwind_movsp directive"
msgstr ""
-#: config/tc-arm.c:4788
+#: config/tc-arm.c:4836
msgid "unexpected .unwind_movsp directive"
msgstr ""
-#: config/tc-arm.c:4815
+#: config/tc-arm.c:4863
msgid "stack increment must be multiple of 4"
msgstr ""
-#: config/tc-arm.c:4847
+#: config/tc-arm.c:4895
msgid "expected <reg>, <reg>"
msgstr ""
-#: config/tc-arm.c:4865
+#: config/tc-arm.c:4913
msgid "register must be either sp or set by a previousunwind_movsp directive"
msgstr ""
-#: config/tc-arm.c:4904
+#: config/tc-arm.c:4952
msgid "expected <offset>, <opcode>"
msgstr ""
-#: config/tc-arm.c:4916
+#: config/tc-arm.c:4964
msgid "unwind opcode too long"
msgstr ""
-#: config/tc-arm.c:4921
+#: config/tc-arm.c:4969
msgid "invalid unwind opcode"
msgstr ""
-#: config/tc-arm.c:5036 config/tc-arm.c:32389
+#: config/tc-arm.c:5084 config/tc-arm.c:32483
#, c-format
msgid "unrecognised float16 format \"%s\""
msgstr ""
-#: config/tc-arm.c:5047
+#: config/tc-arm.c:5095
msgid "float16 format cannot be set more than once, ignoring."
msgstr ""
-#: config/tc-arm.c:5162 config/tc-arm.c:6245 config/tc-arm.c:11638
-#: config/tc-arm.c:12171 config/tc-arm.c:14291 config/tc-arm.c:16242
-#: config/tc-arm.c:16277 config/tc-arm.c:17205 config/tc-arm.c:19128
-#: config/tc-arm.c:19136 config/tc-arm.c:19143 config/tc-arm.c:20788
-#: config/tc-arm.c:29437 config/tc-arm.c:29501 config/tc-arm.c:29509
+#: config/tc-arm.c:5210 config/tc-arm.c:6293 config/tc-arm.c:11686
+#: config/tc-arm.c:12219 config/tc-arm.c:14339 config/tc-arm.c:16290
+#: config/tc-arm.c:16325 config/tc-arm.c:17253 config/tc-arm.c:19176
+#: config/tc-arm.c:19184 config/tc-arm.c:19191 config/tc-arm.c:20842
+#: config/tc-arm.c:29495 config/tc-arm.c:29559 config/tc-arm.c:29567
#: config/tc-metag.c:5174 config/tc-z8k.c:1161 config/tc-z8k.c:1171
msgid "immediate value out of range"
msgstr ""
-#: config/tc-arm.c:5332
+#: config/tc-arm.c:5380
msgid "invalid FPA immediate expression"
msgstr ""
-#: config/tc-arm.c:5518
+#: config/tc-arm.c:5566
msgid "'UXTW' not allowed here"
msgstr ""
-#: config/tc-arm.c:5526
+#: config/tc-arm.c:5574
msgid "'LSL' or 'ASR' required"
msgstr ""
-#: config/tc-arm.c:5534
+#: config/tc-arm.c:5582
msgid "'LSL' required"
msgstr ""
-#: config/tc-arm.c:5542
+#: config/tc-arm.c:5590
msgid "'ASR' required"
msgstr ""
-#: config/tc-arm.c:5549
+#: config/tc-arm.c:5597
msgid "'UXTW' required"
msgstr ""
-#: config/tc-arm.c:5628
+#: config/tc-arm.c:5676
msgid "invalid rotation"
msgstr ""
-#: config/tc-arm.c:5810 config/tc-arm.c:6023
+#: config/tc-arm.c:5858 config/tc-arm.c:6071
msgid "unknown group relocation"
msgstr ""
-#: config/tc-arm.c:5846
+#: config/tc-arm.c:5894
msgid "alignment must be constant"
msgstr ""
-#: config/tc-arm.c:6057
+#: config/tc-arm.c:6105
msgid "this group relocation is not allowed on this instruction"
msgstr ""
-#: config/tc-arm.c:6113
+#: config/tc-arm.c:6161
msgid "'}' expected at end of 'option' field"
msgstr ""
-#: config/tc-arm.c:6118
+#: config/tc-arm.c:6166
msgid "cannot combine index with option"
msgstr ""
-#: config/tc-arm.c:6383
+#: config/tc-arm.c:6431
msgid "unexpected bit specified after APSR"
msgstr ""
-#: config/tc-arm.c:6395
+#: config/tc-arm.c:6443
msgid "selected processor does not support DSP extension"
msgstr ""
-#: config/tc-arm.c:6407
+#: config/tc-arm.c:6455
msgid "bad bitmask specified after APSR"
msgstr ""
-#: config/tc-arm.c:6431
+#: config/tc-arm.c:6479
msgid "writing to APSR without specifying a bitmask is deprecated"
msgstr ""
-#: config/tc-arm.c:6443 config/tc-arm.c:13394 config/tc-arm.c:13439
-#: config/tc-arm.c:13443
+#: config/tc-arm.c:6491 config/tc-arm.c:13442 config/tc-arm.c:13487
+#: config/tc-arm.c:13491
msgid "selected processor does not support requested special purpose register"
msgstr ""
-#: config/tc-arm.c:6448
+#: config/tc-arm.c:6496
msgid "flag for {c}psr instruction expected"
msgstr ""
-#: config/tc-arm.c:6506
+#: config/tc-arm.c:6554
msgid "unrecognized CPS flag"
msgstr ""
-#: config/tc-arm.c:6513
+#: config/tc-arm.c:6561
msgid "missing CPS flags"
msgstr ""
-#: config/tc-arm.c:6536 config/tc-arm.c:6542
+#: config/tc-arm.c:6584 config/tc-arm.c:6590
msgid "valid endian specifiers are be or le"
msgstr ""
-#: config/tc-arm.c:6564
+#: config/tc-arm.c:6612
msgid "missing rotation field after comma"
msgstr ""
-#: config/tc-arm.c:6579
+#: config/tc-arm.c:6627
msgid "rotation can only be 0, 8, 16, or 24"
msgstr ""
-#: config/tc-arm.c:6608
+#: config/tc-arm.c:6656
msgid "condition required"
msgstr ""
-#: config/tc-arm.c:6650 config/tc-arm.c:9801
+#: config/tc-arm.c:6698 config/tc-arm.c:9849
msgid "'[' expected"
msgstr ""
-#: config/tc-arm.c:6663
+#: config/tc-arm.c:6711
msgid "',' expected"
msgstr ""
-#: config/tc-arm.c:6680
+#: config/tc-arm.c:6728
msgid "invalid shift"
msgstr ""
-#: config/tc-arm.c:6760
+#: config/tc-arm.c:6808
msgid "expected ARM or MVE vector register"
msgstr ""
-#: config/tc-arm.c:6809
+#: config/tc-arm.c:6857
msgid "can't use Neon quad register here"
msgstr ""
-#: config/tc-arm.c:6878
+#: config/tc-arm.c:6926
msgid "expected <Rm> or <Dm> or <Qm> operand"
msgstr ""
-#: config/tc-arm.c:6978
+#: config/tc-arm.c:7026
msgid "VFP single, double or MVE vector register expected"
msgstr ""
-#: config/tc-arm.c:6998
+#: config/tc-arm.c:7046
msgid "parse error"
msgstr ""
-#: config/tc-arm.c:7302
+#: config/tc-arm.c:7350
msgid "immediate value 48 or 64 expected"
msgstr ""
#. ISB can only take SY as an option.
-#: config/tc-arm.c:7351
+#: config/tc-arm.c:7399
msgid "invalid barrier type"
msgstr ""
-#: config/tc-arm.c:7527
+#: config/tc-arm.c:7575
msgid "only floating point zero is allowed as immediate value"
msgstr ""
-#: config/tc-arm.c:7622
+#: config/tc-arm.c:7670
msgid "immediate value is out of range"
msgstr ""
-#: config/tc-arm.c:7797
+#: config/tc-arm.c:7845
msgid "iWMMXt data or control register expected"
msgstr ""
-#: config/tc-arm.c:7838
+#: config/tc-arm.c:7886
msgid "Banked registers are not available with this architecture."
msgstr ""
-#: config/tc-arm.c:8086
+#: config/tc-arm.c:8134
msgid "operand must be LR register"
msgstr ""
-#: config/tc-arm.c:8091
+#: config/tc-arm.c:8139
msgid "operand must be SP register"
msgstr ""
-#: config/tc-arm.c:8096
+#: config/tc-arm.c:8144
msgid "operand must be r12"
msgstr ""
-#: config/tc-arm.c:8167 config/tc-score.c:264
+#: config/tc-arm.c:8215 config/tc-score.c:264
msgid "garbage following instruction"
msgstr ""
#. If REG is R13 (the stack pointer), warn that its use is
#. deprecated.
-#: config/tc-arm.c:8217
+#: config/tc-arm.c:8265
msgid "use of r13 is deprecated"
msgstr ""
-#: config/tc-arm.c:8235 config/tc-arm.c:20494
+#: config/tc-arm.c:8283 config/tc-arm.c:20542
msgid ""
"ARMv8.2 scalar fp16 instruction cannot be conditional, the behaviour is "
"UNPREDICTABLE"
msgstr ""
-#: config/tc-arm.c:8310
+#: config/tc-arm.c:8358
msgid "D register out of range for selected VFP version"
msgstr ""
-#: config/tc-arm.c:8407 config/tc-arm.c:11327
+#: config/tc-arm.c:8455 config/tc-arm.c:11375
msgid "Instruction does not support =N addresses"
msgstr ""
-#: config/tc-arm.c:8415
+#: config/tc-arm.c:8463
msgid "instruction does not accept preindexed addressing"
msgstr ""
#. unindexed - only for coprocessor
-#: config/tc-arm.c:8431 config/tc-arm.c:11390
+#: config/tc-arm.c:8479 config/tc-arm.c:11438
msgid "instruction does not accept unindexed addressing"
msgstr ""
-#: config/tc-arm.c:8439
+#: config/tc-arm.c:8487
msgid "destination register same as write-back base"
msgstr ""
-#: config/tc-arm.c:8440
+#: config/tc-arm.c:8488
msgid "source register same as write-back base"
msgstr ""
-#: config/tc-arm.c:8490
+#: config/tc-arm.c:8538
msgid "use of PC in this instruction is deprecated"
msgstr ""
-#: config/tc-arm.c:8513
+#: config/tc-arm.c:8561
msgid "instruction does not accept scaled register index"
msgstr ""
-#: config/tc-arm.c:8818
+#: config/tc-arm.c:8866
msgid "invalid pseudo operation"
msgstr ""
-#: config/tc-arm.c:9058
+#: config/tc-arm.c:9106
msgid "invalid co-processor operand"
msgstr ""
-#: config/tc-arm.c:9074
+#: config/tc-arm.c:9122
msgid "instruction does not support unindexed addressing"
msgstr ""
-#: config/tc-arm.c:9089
+#: config/tc-arm.c:9137
msgid "pc may not be used with write-back"
msgstr ""
-#: config/tc-arm.c:9094
+#: config/tc-arm.c:9142
msgid "instruction does not support writeback"
msgstr ""
-#: config/tc-arm.c:9200
+#: config/tc-arm.c:9248
msgid "Rn must not overlap other operands"
msgstr ""
-#: config/tc-arm.c:9205
+#: config/tc-arm.c:9253
msgid "swp{b} use is obsoleted for ARMv8 and later"
msgstr ""
-#: config/tc-arm.c:9208
+#: config/tc-arm.c:9256
msgid "swp{b} use is deprecated for ARMv6 and ARMv7"
msgstr ""
-#: config/tc-arm.c:9327 config/tc-arm.c:9346 config/tc-arm.c:9359
-#: config/tc-arm.c:12008 config/tc-arm.c:12039 config/tc-arm.c:12061
+#: config/tc-arm.c:9375 config/tc-arm.c:9394 config/tc-arm.c:9407
+#: config/tc-arm.c:12056 config/tc-arm.c:12087 config/tc-arm.c:12109
msgid "bit-field extends past end of register"
msgstr ""
-#: config/tc-arm.c:9389
+#: config/tc-arm.c:9437
msgid "the only valid suffixes here are '(plt)' and '(tlscall)'"
msgstr ""
-#: config/tc-arm.c:9442
+#: config/tc-arm.c:9490
msgid "use of r15 in blx in ARM mode is not really useful"
msgstr ""
-#: config/tc-arm.c:9464
+#: config/tc-arm.c:9512
msgid "use of r15 in bx in ARM mode is not really useful"
msgstr ""
-#: config/tc-arm.c:9490
+#: config/tc-arm.c:9538
msgid "use of r15 in bxj is not really useful"
msgstr ""
-#: config/tc-arm.c:9538
+#: config/tc-arm.c:9586
msgid "This coprocessor register access is deprecated in ARMv8"
msgstr ""
-#: config/tc-arm.c:9746 config/tc-arm.c:9755
+#: config/tc-arm.c:9794 config/tc-arm.c:9803
msgid "writeback of base register is UNPREDICTABLE"
msgstr ""
-#: config/tc-arm.c:9749
+#: config/tc-arm.c:9797
msgid "writeback of base register when in register list is UNPREDICTABLE"
msgstr ""
-#: config/tc-arm.c:9759
+#: config/tc-arm.c:9807
msgid "if writeback register is in list, it must be the lowest reg in the list"
msgstr ""
-#: config/tc-arm.c:9796
+#: config/tc-arm.c:9844
msgid "first transfer register must be even"
msgstr ""
-#: config/tc-arm.c:9799
+#: config/tc-arm.c:9847
msgid "can only transfer two consecutive registers"
msgstr ""
@@ -4029,1425 +4172,1429 @@ msgstr ""
#. have been called in the first place.
#. If op 2 were present and equal to PC, this function wouldn't
#. have been called in the first place.
-#: config/tc-arm.c:9800 config/tc-arm.c:9870 config/tc-arm.c:10601
-#: config/tc-arm.c:12883
+#: config/tc-arm.c:9848 config/tc-arm.c:9918 config/tc-arm.c:10649
+#: config/tc-arm.c:12931
msgid "r14 not allowed here"
msgstr ""
-#: config/tc-arm.c:9812
+#: config/tc-arm.c:9860
msgid "base register written back, and overlaps second transfer register"
msgstr ""
-#: config/tc-arm.c:9822
+#: config/tc-arm.c:9870
msgid "index register overlaps transfer register"
msgstr ""
-#: config/tc-arm.c:9851 config/tc-arm.c:10568
+#: config/tc-arm.c:9899 config/tc-arm.c:10616
msgid "offset must be zero in ARM encoding"
msgstr ""
-#: config/tc-arm.c:9864 config/tc-arm.c:10595
+#: config/tc-arm.c:9912 config/tc-arm.c:10643
msgid "even register required"
msgstr ""
-#: config/tc-arm.c:9867
+#: config/tc-arm.c:9915
msgid "can only load two consecutive registers"
msgstr ""
-#: config/tc-arm.c:9885
+#: config/tc-arm.c:9933
msgid "ldr to register 15 must be 4-byte aligned"
msgstr ""
-#: config/tc-arm.c:9908 config/tc-arm.c:9940
+#: config/tc-arm.c:9956 config/tc-arm.c:9988
msgid "this instruction requires a post-indexed address"
msgstr ""
-#: config/tc-arm.c:9967
+#: config/tc-arm.c:10015
msgid "Rd and Rm should be different in mla"
msgstr ""
-#: config/tc-arm.c:9994 config/tc-arm.c:13258
+#: config/tc-arm.c:10042 config/tc-arm.c:13306
msgid ":lower16: not allowed in this instruction"
msgstr ""
-#: config/tc-arm.c:9996 config/tc-arm.c:13263
+#: config/tc-arm.c:10044 config/tc-arm.c:13311
msgid ":upper16: not allowed in this instruction"
msgstr ""
-#: config/tc-arm.c:10013
+#: config/tc-arm.c:10061
msgid "operand 1 must be FPSCR"
msgstr ""
-#: config/tc-arm.c:10066 config/tc-arm.c:10075 config/tc-arm.c:10129
-#: config/tc-arm.c:10138
+#: config/tc-arm.c:10114 config/tc-arm.c:10123 config/tc-arm.c:10177
+#: config/tc-arm.c:10186
msgid "selected processor does not support instruction"
msgstr ""
-#: config/tc-arm.c:10078 config/tc-arm.c:10141
+#: config/tc-arm.c:10126 config/tc-arm.c:10189
msgid "accessing MVE system register without MVE is UNPREDICTABLE"
msgstr ""
-#: config/tc-arm.c:10169 config/tc-arm.c:13377
+#: config/tc-arm.c:10217 config/tc-arm.c:13425
msgid "bad register for mrs"
msgstr ""
-#: config/tc-arm.c:10176 config/tc-arm.c:13401
+#: config/tc-arm.c:10224 config/tc-arm.c:13449
msgid "'APSR', 'CPSR' or 'SPSR' expected"
msgstr ""
-#: config/tc-arm.c:10217
+#: config/tc-arm.c:10265
msgid "Rd and Rm should be different in mul"
msgstr ""
-#: config/tc-arm.c:10236 config/tc-arm.c:10513 config/tc-arm.c:13540
+#: config/tc-arm.c:10284 config/tc-arm.c:10561 config/tc-arm.c:13588
msgid "rdhi and rdlo must be different"
msgstr ""
-#: config/tc-arm.c:10242
+#: config/tc-arm.c:10290
msgid "rdhi, rdlo and rm must all be different"
msgstr ""
-#: config/tc-arm.c:10308
+#: config/tc-arm.c:10356
msgid "'[' expected after PLD mnemonic"
msgstr ""
-#: config/tc-arm.c:10310 config/tc-arm.c:10325
+#: config/tc-arm.c:10358 config/tc-arm.c:10373
msgid "post-indexed expression used in preload instruction"
msgstr ""
-#: config/tc-arm.c:10312 config/tc-arm.c:10327
+#: config/tc-arm.c:10360 config/tc-arm.c:10375
msgid "writeback used in preload instruction"
msgstr ""
-#: config/tc-arm.c:10314 config/tc-arm.c:10329
+#: config/tc-arm.c:10362 config/tc-arm.c:10377
msgid "unindexed addressing used in preload instruction"
msgstr ""
-#: config/tc-arm.c:10323
+#: config/tc-arm.c:10371
msgid "'[' expected after PLI mnemonic"
msgstr ""
-#: config/tc-arm.c:10338 config/tc-arm.c:13709
+#: config/tc-arm.c:10386 config/tc-arm.c:13757
msgid "push/pop do not support {reglist}^"
msgstr ""
-#: config/tc-arm.c:10416 config/tc-arm.c:13886
+#: config/tc-arm.c:10464 config/tc-arm.c:13934
msgid "setend use is deprecated for ARMv8"
msgstr ""
-#: config/tc-arm.c:10437 config/tc-arm.c:13947 config/tc-arm.c:13979
-#: config/tc-arm.c:14022
+#: config/tc-arm.c:10485 config/tc-arm.c:13995 config/tc-arm.c:14027
+#: config/tc-arm.c:14070
msgid "extraneous shift as part of operand to shift insn"
msgstr ""
-#: config/tc-arm.c:10447 config/tc-arm.c:14085
+#: config/tc-arm.c:10495 config/tc-arm.c:14133
msgid "immediate too large (bigger than 0xF)"
msgstr ""
-#: config/tc-arm.c:10471 config/tc-arm.c:10480
+#: config/tc-arm.c:10519 config/tc-arm.c:10528
msgid "selected processor does not support SETPAN instruction"
msgstr ""
-#: config/tc-arm.c:10539
+#: config/tc-arm.c:10587
msgid "SRS base register must be r13"
msgstr ""
-#: config/tc-arm.c:10598
+#: config/tc-arm.c:10646
msgid "can only store two consecutive registers"
msgstr ""
-#: config/tc-arm.c:10720 config/tc-arm.c:10741
+#: config/tc-arm.c:10768 config/tc-arm.c:10789
msgid "only two consecutive VFP SP registers allowed here"
msgstr ""
-#: config/tc-arm.c:10769 config/tc-arm.c:10784
+#: config/tc-arm.c:10817 config/tc-arm.c:10832
msgid "this addressing mode requires base-register writeback"
msgstr ""
#. If srcsize is 16, inst.operands[1].imm must be in the range 0-16.
#. i.e. immbits must be in range 0 - 16.
-#: config/tc-arm.c:10913
+#: config/tc-arm.c:10961
msgid "immediate value out of range, expected range [0, 16]"
msgstr ""
#. If srcsize is 32, inst.operands[1].imm must be in the range 1-32.
#. i.e. immbits must be in range 0 - 31.
-#: config/tc-arm.c:10920
+#: config/tc-arm.c:10968
msgid "immediate value out of range, expected range [1, 32]"
msgstr ""
-#: config/tc-arm.c:10986
+#: config/tc-arm.c:11034
msgid "this instruction does not support indexing"
msgstr ""
-#: config/tc-arm.c:11009
+#: config/tc-arm.c:11057
msgid "only r15 allowed here"
msgstr ""
-#: config/tc-arm.c:11144
+#: config/tc-arm.c:11192
msgid "immediate operand requires iWMMXt2"
msgstr ""
-#: config/tc-arm.c:11288
+#: config/tc-arm.c:11336
msgid "shift by register not allowed in thumb mode"
msgstr ""
-#: config/tc-arm.c:11300 config/tc-arm.c:14131 config/tc-arm.c:28728
+#: config/tc-arm.c:11348 config/tc-arm.c:14179 config/tc-arm.c:28786
msgid "shift expression is too large"
msgstr ""
-#: config/tc-arm.c:11333
+#: config/tc-arm.c:11381
msgid "cannot use register index with this instruction"
msgstr ""
-#: config/tc-arm.c:11335
+#: config/tc-arm.c:11383
msgid "Thumb does not support negative register indexing"
msgstr ""
-#: config/tc-arm.c:11337
+#: config/tc-arm.c:11385
msgid "Thumb does not support register post-indexing"
msgstr ""
-#: config/tc-arm.c:11339
+#: config/tc-arm.c:11387
msgid "Thumb does not support register indexing with writeback"
msgstr ""
-#: config/tc-arm.c:11341
+#: config/tc-arm.c:11389
msgid "Thumb supports only LSL in shifted register indexing"
msgstr ""
-#: config/tc-arm.c:11350 config/tc-arm.c:19862
+#: config/tc-arm.c:11398 config/tc-arm.c:19910
msgid "shift out of range"
msgstr ""
-#: config/tc-arm.c:11359
+#: config/tc-arm.c:11407
msgid "cannot use writeback with this instruction"
msgstr ""
-#: config/tc-arm.c:11380
+#: config/tc-arm.c:11428
msgid "cannot use post-indexing with PC-relative addressing"
msgstr ""
-#: config/tc-arm.c:11381
+#: config/tc-arm.c:11429
msgid "cannot use post-indexing with this instruction"
msgstr ""
-#: config/tc-arm.c:11619
+#: config/tc-arm.c:11667
msgid "cannot honor width suffix"
msgstr ""
-#: config/tc-arm.c:11633
+#: config/tc-arm.c:11681
msgid "only SUBS PC, LR, #const allowed"
msgstr ""
-#: config/tc-arm.c:11716 config/tc-arm.c:11876 config/tc-arm.c:11973
-#: config/tc-arm.c:13338 config/tc-arm.c:13646
+#: config/tc-arm.c:11764 config/tc-arm.c:11924 config/tc-arm.c:12021
+#: config/tc-arm.c:13386 config/tc-arm.c:13694
msgid "shift must be constant"
msgstr ""
-#: config/tc-arm.c:11721
+#: config/tc-arm.c:11769
msgid "shift value over 3 not allowed in thumb mode"
msgstr ""
-#: config/tc-arm.c:11723
+#: config/tc-arm.c:11771
msgid "only LSL shift allowed in thumb mode"
msgstr ""
-#: config/tc-arm.c:11747 config/tc-arm.c:11891 config/tc-arm.c:11988
-#: config/tc-arm.c:13351
+#: config/tc-arm.c:11795 config/tc-arm.c:11939 config/tc-arm.c:12036
+#: config/tc-arm.c:13399
msgid "unshifted register required"
msgstr ""
-#: config/tc-arm.c:11762 config/tc-arm.c:11999 config/tc-arm.c:13501
+#: config/tc-arm.c:11810 config/tc-arm.c:12047 config/tc-arm.c:13549
msgid "dest must overlap one source register"
msgstr ""
-#: config/tc-arm.c:11894 config/tc-csky.c:6003
+#: config/tc-arm.c:11942 config/tc-csky.c:6004
msgid "dest and source1 must be the same register"
msgstr ""
-#: config/tc-arm.c:12134
+#: config/tc-arm.c:12182
msgid ""
"selected architecture does not support wide conditional branch instruction"
msgstr ""
-#: config/tc-arm.c:12167
+#: config/tc-arm.c:12215
msgid "instruction is always unconditional"
msgstr ""
-#: config/tc-arm.c:12342
+#: config/tc-arm.c:12390
msgid "selected processor does not support 'A' form of this instruction"
msgstr ""
-#: config/tc-arm.c:12345
+#: config/tc-arm.c:12393
msgid "Thumb does not support the 2-argument form of this instruction"
msgstr ""
-#: config/tc-arm.c:12470
+#: config/tc-arm.c:12518
msgid "SP not allowed in register list"
msgstr ""
-#: config/tc-arm.c:12474 config/tc-arm.c:12581
+#: config/tc-arm.c:12522 config/tc-arm.c:12629
msgid ""
"having the base register in the register list when using write back is "
"UNPREDICTABLE"
msgstr ""
-#: config/tc-arm.c:12482
+#: config/tc-arm.c:12530
msgid "LR and PC should not both be in register list"
msgstr ""
-#: config/tc-arm.c:12490
+#: config/tc-arm.c:12538
msgid "PC not allowed in register list"
msgstr ""
-#: config/tc-arm.c:12533
+#: config/tc-arm.c:12581
msgid "Thumb load/store multiple does not support {reglist}^"
msgstr ""
-#: config/tc-arm.c:12558 config/tc-arm.c:12636
+#: config/tc-arm.c:12606 config/tc-arm.c:12684
#, c-format
msgid "value stored for r%d is UNKNOWN"
msgstr ""
-#: config/tc-arm.c:12629
+#: config/tc-arm.c:12677
msgid "Thumb-2 instruction only valid in unified syntax"
msgstr ""
-#: config/tc-arm.c:12633 config/tc-arm.c:12643
+#: config/tc-arm.c:12681 config/tc-arm.c:12691
msgid "this instruction will write back the base register"
msgstr ""
-#: config/tc-arm.c:12646
+#: config/tc-arm.c:12694
msgid "this instruction will not write back the base register"
msgstr ""
-#: config/tc-arm.c:12677
+#: config/tc-arm.c:12725
msgid "r14 not allowed as first register when second register is omitted"
msgstr ""
-#: config/tc-arm.c:12777
+#: config/tc-arm.c:12825
msgid ""
"This instruction may be unpredictable if executed on M-profile cores with "
"interrupts enabled."
msgstr ""
-#: config/tc-arm.c:12806 config/tc-arm.c:12819 config/tc-arm.c:12855
+#: config/tc-arm.c:12854 config/tc-arm.c:12867 config/tc-arm.c:12903
msgid "Thumb does not support this addressing mode"
msgstr ""
-#: config/tc-arm.c:12823
+#: config/tc-arm.c:12871
msgid "byte or halfword not valid for base register"
msgstr ""
-#: config/tc-arm.c:12826
+#: config/tc-arm.c:12874
msgid "r15 based store not allowed"
msgstr ""
-#: config/tc-arm.c:12828
+#: config/tc-arm.c:12876
msgid "invalid base register for register offset"
msgstr ""
-#: config/tc-arm.c:12885
+#: config/tc-arm.c:12933
msgid "r12 not allowed here"
msgstr ""
-#: config/tc-arm.c:12891
+#: config/tc-arm.c:12939
msgid "base register written back, and overlaps one of transfer registers"
msgstr ""
-#: config/tc-arm.c:13019
+#: config/tc-arm.c:13067
#, c-format
msgid ""
"Use of r%u as a source register is deprecated when r%u is the destination "
"register."
msgstr ""
-#: config/tc-arm.c:13214
+#: config/tc-arm.c:13262
msgid "shifts in CMP/MOV instructions are only supported in unified syntax"
msgstr ""
-#: config/tc-arm.c:13242
+#: config/tc-arm.c:13290
msgid "only lo regs allowed with immediate"
msgstr ""
-#: config/tc-arm.c:13419
+#: config/tc-arm.c:13467
msgid "Thumb encoding does not support an immediate here"
msgstr ""
-#: config/tc-arm.c:13506
+#: config/tc-arm.c:13554
msgid "Thumb-2 MUL must not set flags"
msgstr ""
-#: config/tc-arm.c:13571
+#: config/tc-arm.c:13619
msgid "Thumb does not support NOP with hints"
msgstr ""
-#: config/tc-arm.c:13731 config/tc-arm.c:13743
+#: config/tc-arm.c:13779 config/tc-arm.c:13791
msgid "invalid register list to push/pop instruction"
msgstr ""
-#: config/tc-arm.c:14006
+#: config/tc-arm.c:14054
msgid "source1 and dest must be same register"
msgstr ""
-#: config/tc-arm.c:14031
+#: config/tc-arm.c:14079
msgid "ror #imm not supported"
msgstr ""
-#: config/tc-arm.c:14082
+#: config/tc-arm.c:14130
msgid "SMC is not permitted on this architecture"
msgstr ""
-#: config/tc-arm.c:14248
+#: config/tc-arm.c:14296
msgid "Thumb encoding does not support rotation"
msgstr ""
-#: config/tc-arm.c:14268
+#: config/tc-arm.c:14316
msgid "instruction requires register index"
msgstr ""
-#: config/tc-arm.c:14278
+#: config/tc-arm.c:14326
msgid "instruction does not allow shifted index"
msgstr ""
-#: config/tc-arm.c:14434 config/tc-arm.c:29872
+#: config/tc-arm.c:14482 config/tc-arm.c:29930
msgid "out of range label-relative fixup value"
msgstr ""
-#: config/tc-arm.c:14758
+#: config/tc-arm.c:14806
msgid "invalid neon suffix for non neon instruction"
msgstr ""
-#: config/tc-arm.c:15153 config/tc-arm.c:15506 config/tc-arm.c:16991
-#: config/tc-arm.c:17071 config/tc-arm.c:17128 config/tc-arm.c:19009
-#: config/tc-arm.c:21192 config/tc-arm.c:21379
+#: config/tc-arm.c:15201 config/tc-arm.c:15554 config/tc-arm.c:17039
+#: config/tc-arm.c:17119 config/tc-arm.c:17176 config/tc-arm.c:19057
+#: config/tc-arm.c:21246 config/tc-arm.c:21433
msgid "invalid instruction shape"
msgstr ""
-#: config/tc-arm.c:15405
+#: config/tc-arm.c:15453
msgid "types specified in both the mnemonic and operands"
msgstr ""
-#: config/tc-arm.c:15442
+#: config/tc-arm.c:15490
msgid "operand types can't be inferred"
msgstr ""
-#: config/tc-arm.c:15448
+#: config/tc-arm.c:15496
msgid "type specifier has the wrong number of parts"
msgstr ""
-#: config/tc-arm.c:15534 config/tc-arm.c:19280 config/tc-arm.c:19287
+#: config/tc-arm.c:15582 config/tc-arm.c:19328 config/tc-arm.c:19335
msgid "operand size must match register width"
msgstr ""
-#: config/tc-arm.c:15556
+#: config/tc-arm.c:15604
msgid "inconsistent types in Neon instruction"
msgstr ""
-#: config/tc-arm.c:15977
+#: config/tc-arm.c:16025
msgid "Type is not allowed for this instruction"
msgstr ""
-#: config/tc-arm.c:16052
+#: config/tc-arm.c:16100
msgid "MVE vector or ARM register expected"
msgstr ""
-#: config/tc-arm.c:16169
+#: config/tc-arm.c:16217
msgid "immediate must be either 1, 2, 4 or 8"
msgstr ""
-#: config/tc-arm.c:16326
+#: config/tc-arm.c:16374
msgid "immediate operand expected in the range [1,8]"
msgstr ""
-#: config/tc-arm.c:16327
+#: config/tc-arm.c:16375
msgid "immediate operand expected in the range [1,16]"
msgstr ""
-#: config/tc-arm.c:16469
+#: config/tc-arm.c:16517
msgid "expected LR"
msgstr ""
-#: config/tc-arm.c:16968 config/tc-arm.c:17048 config/tc-arm.c:18645
-#: config/tc-arm.c:20479
+#: config/tc-arm.c:17016 config/tc-arm.c:17096 config/tc-arm.c:18693
+#: config/tc-arm.c:20527
msgid "immediate out of range for shift"
msgstr ""
-#: config/tc-arm.c:17262
+#: config/tc-arm.c:17310
msgid "first and second operands shall be the same register"
msgstr ""
-#: config/tc-arm.c:17376 config/tc-arm.c:17438
+#: config/tc-arm.c:17424 config/tc-arm.c:17486
msgid "destination register and offset register may not be the same"
msgstr ""
-#: config/tc-arm.c:17388 config/tc-arm.c:17507
+#: config/tc-arm.c:17436 config/tc-arm.c:17555
msgid "immediate must be a multiple of 4 in the range of +/-[0,508]"
msgstr ""
-#: config/tc-arm.c:17390
+#: config/tc-arm.c:17438
msgid "immediate must be a multiple of 8 in the range of +/-[0,1016]"
msgstr ""
-#: config/tc-arm.c:17411
+#: config/tc-arm.c:17459
msgid "can not shift offsets when accessing less than half-word"
msgstr ""
-#: config/tc-arm.c:17413
+#: config/tc-arm.c:17461
msgid ""
"shift immediate must be 1, 2 or 3 for half-word, word or double-word "
"accesses respectively"
msgstr ""
-#: config/tc-arm.c:17500
+#: config/tc-arm.c:17548
msgid "immediate must be in the range of +/-[0,127]"
msgstr ""
-#: config/tc-arm.c:17503
+#: config/tc-arm.c:17551
msgid "immediate must be a multiple of 2 in the range of +/-[0,254]"
msgstr ""
-#: config/tc-arm.c:17517 config/tc-arm.c:18343
+#: config/tc-arm.c:17565 config/tc-arm.c:18391
msgid "MVE vector register in the range [Q0..Q7] expected"
msgstr ""
-#: config/tc-arm.c:17833 config/tc-arm.c:19701
+#: config/tc-arm.c:17881 config/tc-arm.c:19749
msgid "scalar out of range for multiply instruction"
msgstr ""
-#: config/tc-arm.c:17921
+#: config/tc-arm.c:17969
msgid "index must be in the range 0 to 3"
msgstr ""
-#: config/tc-arm.c:17924
+#: config/tc-arm.c:17972
msgid "indexed register must be less than 8"
msgstr ""
-#: config/tc-arm.c:18125 config/tc-arm.c:21443
+#: config/tc-arm.c:18173 config/tc-arm.c:21497
msgid ""
"Warning: 32-bit element size and same first and third operand makes "
"instruction UNPREDICTABLE"
msgstr ""
-#: config/tc-arm.c:18484
+#: config/tc-arm.c:18532
msgid "instruction form not available on this architecture."
msgstr ""
-#: config/tc-arm.c:18487
+#: config/tc-arm.c:18535
msgid "this instruction implies use of ARMv8.1 AdvSIMD."
msgstr ""
-#: config/tc-arm.c:18594 config/tc-arm.c:18619
+#: config/tc-arm.c:18642 config/tc-arm.c:18667
msgid "immediate out of range for insert"
msgstr ""
-#: config/tc-arm.c:18766
+#: config/tc-arm.c:18814
msgid "immediate out of range for narrowing operation"
msgstr ""
-#: config/tc-arm.c:18913
+#: config/tc-arm.c:18961
msgid "operands 0 and 1 must be the same register"
msgstr ""
-#: config/tc-arm.c:19019 config/tc-arm.c:21291
+#: config/tc-arm.c:19067 config/tc-arm.c:21345
msgid "invalid rounding mode"
msgstr ""
-#: config/tc-arm.c:19491
+#: config/tc-arm.c:19539
msgid "operand size must be specified for immediate VMOV"
msgstr ""
-#: config/tc-arm.c:19501
+#: config/tc-arm.c:19549
msgid "immediate has bits set outside the operand size"
msgstr ""
-#: config/tc-arm.c:19736
+#: config/tc-arm.c:19784
msgid ""
"vfmal/vfmsl with FP16 type cannot be conditional, the behaviour is "
"UNPREDICTABLE"
msgstr ""
-#: config/tc-arm.c:19844
+#: config/tc-arm.c:19892
msgid "Instruction form not available on this architecture."
msgstr ""
-#: config/tc-arm.c:19898
+#: config/tc-arm.c:19946
msgid ""
"Warning: 64-bit element size and same destination and source operands makes "
"instruction UNPREDICTABLE"
msgstr ""
-#: config/tc-arm.c:19903
+#: config/tc-arm.c:19951
msgid "elements must be smaller than reversal region"
msgstr ""
-#: config/tc-arm.c:19995
+#: config/tc-arm.c:20043
msgid "Index one must be [2,3] and index two must be two less than index one."
msgstr ""
-#: config/tc-arm.c:19998
+#: config/tc-arm.c:20046
msgid "Destination registers may not be the same"
msgstr ""
-#: config/tc-arm.c:20196 config/tc-arm.c:20279
+#: config/tc-arm.c:20244 config/tc-arm.c:20327
msgid "bad type for scalar"
msgstr ""
-#: config/tc-arm.c:20335
+#: config/tc-arm.c:20383
msgid ""
"immediate constant is valid both as a bit-pattern and a floating point value "
"(using the fp value)"
msgstr ""
-#: config/tc-arm.c:20387 config/tc-arm.c:20398
+#: config/tc-arm.c:20435 config/tc-arm.c:20446
msgid "VFP registers must be adjacent"
msgstr ""
-#: config/tc-arm.c:20488
+#: config/tc-arm.c:20536
msgid "invalid suffix"
msgstr ""
-#: config/tc-arm.c:20642
+#: config/tc-arm.c:20690
msgid "bad list length for table lookup"
msgstr ""
-#: config/tc-arm.c:20675
+#: config/tc-arm.c:20723
msgid "writeback (!) must be used for VLDMDB and VSTMDB"
msgstr ""
-#: config/tc-arm.c:20678 config/tc-arm.c:20703 config/tc-arm.c:20724
+#: config/tc-arm.c:20726 config/tc-arm.c:20752
msgid "register list must contain at least 1 and at most 16 registers"
msgstr ""
-#: config/tc-arm.c:20746 config/tc-arm.c:20779
+#: config/tc-arm.c:20747
+msgid "register list must contain at least 1 and at most 32 registers"
+msgstr ""
+
+#: config/tc-arm.c:20800 config/tc-arm.c:20833
msgid "Use of PC here is UNPREDICTABLE"
msgstr ""
-#: config/tc-arm.c:20748
+#: config/tc-arm.c:20802
msgid "Use of PC here is deprecated"
msgstr ""
-#: config/tc-arm.c:20782
+#: config/tc-arm.c:20836
msgid "instruction does not accept register index"
msgstr ""
-#: config/tc-arm.c:20785
+#: config/tc-arm.c:20839
msgid "instruction does not accept PC-relative addressing"
msgstr ""
-#: config/tc-arm.c:20807 config/tc-arm.c:20816
+#: config/tc-arm.c:20861 config/tc-arm.c:20870
msgid "Instruction not permitted on this architecture"
msgstr ""
-#: config/tc-arm.c:20865
+#: config/tc-arm.c:20919
msgid "bad alignment"
msgstr ""
-#: config/tc-arm.c:20882
+#: config/tc-arm.c:20936
msgid "bad list type for instruction"
msgstr ""
-#: config/tc-arm.c:20926
+#: config/tc-arm.c:20980
msgid "unsupported alignment for instruction"
msgstr ""
-#: config/tc-arm.c:20945 config/tc-arm.c:21039 config/tc-arm.c:21051
-#: config/tc-arm.c:21061 config/tc-arm.c:21075
+#: config/tc-arm.c:20999 config/tc-arm.c:21093 config/tc-arm.c:21105
+#: config/tc-arm.c:21115 config/tc-arm.c:21129
msgid "bad list length"
msgstr ""
-#: config/tc-arm.c:20950
+#: config/tc-arm.c:21004
msgid "stride of 2 unavailable when element size is 8"
msgstr ""
-#: config/tc-arm.c:20983 config/tc-arm.c:21059
+#: config/tc-arm.c:21037 config/tc-arm.c:21113
msgid "can't use alignment with this instruction"
msgstr ""
-#: config/tc-arm.c:21131
+#: config/tc-arm.c:21185
msgid "post-index must be a register"
msgstr ""
-#: config/tc-arm.c:21133
+#: config/tc-arm.c:21187
msgid "bad register for post-index"
msgstr ""
-#: config/tc-arm.c:21355
+#: config/tc-arm.c:21409
msgid "scalar out of range"
msgstr ""
-#: config/tc-arm.c:21488
+#: config/tc-arm.c:21542
msgid ""
"Dot Product instructions cannot be conditional, the behaviour is "
"UNPREDICTABLE"
msgstr ""
-#: config/tc-arm.c:21563 config/tc-arm.c:21591 config/tc-arm.c:22273
+#: config/tc-arm.c:21617 config/tc-arm.c:21645 config/tc-arm.c:22327
msgid "index must be 0 or 1"
msgstr ""
-#: config/tc-arm.c:21566 config/tc-arm.c:21594 config/tc-arm.c:22276
+#: config/tc-arm.c:21620 config/tc-arm.c:21648 config/tc-arm.c:22330
msgid "indexed register must be less than 16"
msgstr ""
-#: config/tc-arm.c:21632
+#: config/tc-arm.c:21686
msgid "Register must be r0-r14 except r13, or APSR_nzcv."
msgstr ""
-#: config/tc-arm.c:21635
+#: config/tc-arm.c:21689
msgid "Register must be an even register between r0-r10."
msgstr ""
-#: config/tc-arm.c:21660
+#: config/tc-arm.c:21714
msgid "CDE Coprocessor must be in range 0-7"
msgstr ""
-#: config/tc-arm.c:21694
+#: config/tc-arm.c:21748
msgid "cx1d requires consecutive destination registers."
msgstr ""
-#: config/tc-arm.c:21724
+#: config/tc-arm.c:21778
msgid "cx2d requires consecutive destination registers."
msgstr ""
-#: config/tc-arm.c:21763
+#: config/tc-arm.c:21817
msgid "cx3d requires consecutive destination registers."
msgstr ""
-#: config/tc-arm.c:21955
+#: config/tc-arm.c:22009
msgid "'q' register must be in range 0-7"
msgstr ""
-#: config/tc-arm.c:21958
+#: config/tc-arm.c:22012
msgid "'d' register must be in range 0-15"
msgstr ""
-#: config/tc-arm.c:21960
+#: config/tc-arm.c:22014
msgid "'s' register must be in range 0-31"
msgstr ""
-#: config/tc-arm.c:22015
+#: config/tc-arm.c:22069
msgid "vcx instructions with Q registers require MVE"
msgstr ""
-#: config/tc-arm.c:22020
+#: config/tc-arm.c:22074
msgid ""
"vcx instructions with S or D registers require either MVE or Armv8-M "
"floating point extension."
msgstr ""
-#: config/tc-arm.c:22036
+#: config/tc-arm.c:22090
msgid "vcx1 with S or D registers takes immediate within 0-2047"
msgstr ""
-#: config/tc-arm.c:22052
+#: config/tc-arm.c:22106
msgid "vcx2 with S or D registers takes immediate within 0-63"
msgstr ""
-#: config/tc-arm.c:22067
+#: config/tc-arm.c:22121
msgid "vcx2 with S or D registers takes immediate within 0-7"
msgstr ""
-#: config/tc-arm.c:22657 config/tc-arm.c:22761
+#: config/tc-arm.c:22711 config/tc-arm.c:22815
msgid "conditional infixes are deprecated in unified syntax"
msgstr ""
-#: config/tc-arm.c:22972
+#: config/tc-arm.c:23026
msgid "Warning: conditional outside an IT block for Thumb."
msgstr ""
-#: config/tc-arm.c:23300
+#: config/tc-arm.c:23354
msgid "Short branches, Undefined, SVC, LDM/STM"
msgstr ""
-#: config/tc-arm.c:23301
+#: config/tc-arm.c:23355
msgid "Miscellaneous 16-bit instructions"
msgstr ""
-#: config/tc-arm.c:23302
+#: config/tc-arm.c:23356
msgid "ADR"
msgstr ""
-#: config/tc-arm.c:23303
+#: config/tc-arm.c:23357
msgid "Literal loads"
msgstr ""
-#: config/tc-arm.c:23304
+#: config/tc-arm.c:23358
msgid "Hi-register ADD, MOV, CMP, BX, BLX using pc"
msgstr ""
-#: config/tc-arm.c:23305
+#: config/tc-arm.c:23359
msgid "Hi-register ADD, MOV, CMP using pc"
msgstr ""
#. NOTE: 0x00dd is not the real encoding, instead, it is the 'tvalue'
#. field in asm_opcode. 'tvalue' is used at the stage this check happen.
-#: config/tc-arm.c:23308
+#: config/tc-arm.c:23362
msgid "ADD/SUB sp, sp #imm"
msgstr ""
-#: config/tc-arm.c:23330
+#: config/tc-arm.c:23384
msgid ""
"IT blocks containing 32-bit Thumb instructions are performance deprecated in "
"ARMv8-A and ARMv8-R"
msgstr ""
-#: config/tc-arm.c:23342
+#: config/tc-arm.c:23396
#, c-format
msgid ""
"IT blocks containing 16-bit Thumb instructions of the following class are "
"performance deprecated in ARMv8-A and ARMv8-R: %s"
msgstr ""
-#: config/tc-arm.c:23356
+#: config/tc-arm.c:23410
msgid ""
"IT blocks containing more than one conditional instruction are performance "
"deprecated in ARMv8-A and ARMv8-R"
msgstr ""
-#: config/tc-arm.c:23474
+#: config/tc-arm.c:23528
#, c-format
msgid "bad instruction `%s'"
msgstr ""
-#: config/tc-arm.c:23480
+#: config/tc-arm.c:23534
msgid "s suffix on comparison instruction is deprecated"
msgstr ""
-#: config/tc-arm.c:23500
+#: config/tc-arm.c:23554
msgid "SVC is not permitted on this architecture"
msgstr ""
-#: config/tc-arm.c:23502
+#: config/tc-arm.c:23556
#, c-format
msgid "selected processor does not support `%s' in Thumb mode"
msgstr ""
-#: config/tc-arm.c:23508
+#: config/tc-arm.c:23562
msgid "Thumb does not support conditional execution"
msgstr ""
-#: config/tc-arm.c:23528
+#: config/tc-arm.c:23582
#, c-format
msgid ""
"selected processor does not support 32bit wide variant of instruction `%s'"
msgstr ""
-#: config/tc-arm.c:23531
+#: config/tc-arm.c:23585
#, c-format
msgid "selected processor does not support `%s' in Thumb-2 mode"
msgstr ""
-#: config/tc-arm.c:23556
+#: config/tc-arm.c:23610
#, c-format
msgid "cannot honor width suffix -- `%s'"
msgstr ""
-#: config/tc-arm.c:23598
+#: config/tc-arm.c:23652
#, c-format
msgid "selected processor does not support `%s' in ARM mode"
msgstr ""
-#: config/tc-arm.c:23603
+#: config/tc-arm.c:23657
#, c-format
msgid "width suffixes are invalid in ARM mode -- `%s'"
msgstr ""
-#: config/tc-arm.c:23636
+#: config/tc-arm.c:23690
#, c-format
msgid "attempt to use an ARM instruction on a Thumb-only processor -- `%s'"
msgstr ""
-#: config/tc-arm.c:23654
+#: config/tc-arm.c:23708
#, c-format
msgid "section '%s' finished with an open IT block."
msgstr ""
-#: config/tc-arm.c:23657
+#: config/tc-arm.c:23711
#, c-format
msgid "section '%s' finished with an open VPT/VPST block."
msgstr ""
-#: config/tc-arm.c:23664
+#: config/tc-arm.c:23718
msgid "file finished with an open IT block."
msgstr ""
-#: config/tc-arm.c:23666
+#: config/tc-arm.c:23720
msgid "file finished with an open VPT/VPST block."
msgstr ""
-#: config/tc-arm.c:27373
+#: config/tc-arm.c:27431
#, c-format
msgid "alignments greater than %d bytes not supported in .text sections."
msgstr ""
-#: config/tc-arm.c:27639 config/tc-ia64.c:3590
+#: config/tc-arm.c:27697 config/tc-ia64.c:3591
#, c-format
msgid "Group section `%s' has no group signature"
msgstr ""
-#: config/tc-arm.c:27685
+#: config/tc-arm.c:27743
msgid "handlerdata in cantunwind frame"
msgstr ""
-#: config/tc-arm.c:27702
+#: config/tc-arm.c:27760
msgid "too many unwind opcodes for personality routine 0"
msgstr ""
-#: config/tc-arm.c:27733
+#: config/tc-arm.c:27791
msgid "attempt to recreate an unwind entry"
msgstr ""
-#: config/tc-arm.c:27743
+#: config/tc-arm.c:27801
msgid "too many unwind opcodes"
msgstr ""
-#: config/tc-arm.c:28043
+#: config/tc-arm.c:28101
#, c-format
msgid "[-mwarn-syms]: Assignment makes a symbol match an ARM instruction: %s"
msgstr ""
-#: config/tc-arm.c:28407 config/tc-arm.c:28475
+#: config/tc-arm.c:28465 config/tc-arm.c:28533
#, c-format
msgid "symbol %s is in a different section"
msgstr ""
-#: config/tc-arm.c:28409 config/tc-arm.c:28477
+#: config/tc-arm.c:28467 config/tc-arm.c:28535
#, c-format
msgid "symbol %s is weak and may be overridden later"
msgstr ""
-#: config/tc-arm.c:28454 config/tc-arm.c:28826
+#: config/tc-arm.c:28512 config/tc-arm.c:28884
#, c-format
msgid "invalid constant (%lx) after fixup"
msgstr ""
-#: config/tc-arm.c:28510
+#: config/tc-arm.c:28568
#, c-format
msgid "unable to compute ADRL instructions for PC offset of 0x%lx"
msgstr ""
-#: config/tc-arm.c:28546 config/tc-arm.c:28576
+#: config/tc-arm.c:28604 config/tc-arm.c:28634
msgid "invalid literal constant: pool needs to be closer"
msgstr ""
-#: config/tc-arm.c:28549 config/tc-arm.c:28598
+#: config/tc-arm.c:28607 config/tc-arm.c:28656
#, c-format
msgid "bad immediate value for offset (%ld)"
msgstr ""
-#: config/tc-arm.c:28579
+#: config/tc-arm.c:28637
#, c-format
msgid "bad immediate value for 8-bit offset (%ld)"
msgstr ""
-#: config/tc-arm.c:28639
+#: config/tc-arm.c:28697
msgid "offset not a multiple of 4"
msgstr ""
-#: config/tc-arm.c:28842
+#: config/tc-arm.c:28900
msgid "invalid smc expression"
msgstr ""
-#: config/tc-arm.c:28852
+#: config/tc-arm.c:28910
msgid "invalid hvc expression"
msgstr ""
-#: config/tc-arm.c:28863 config/tc-arm.c:28872
+#: config/tc-arm.c:28921 config/tc-arm.c:28930
msgid "invalid swi expression"
msgstr ""
-#: config/tc-arm.c:28882
+#: config/tc-arm.c:28940
msgid "invalid expression in load/store multiple"
msgstr ""
-#: config/tc-arm.c:28944
+#: config/tc-arm.c:29002
#, c-format
msgid "blx to '%s' an ARM ISA state function changed to bl"
msgstr ""
-#: config/tc-arm.c:28963
+#: config/tc-arm.c:29021
msgid "misaligned branch destination"
msgstr ""
-#: config/tc-arm.c:29084
+#: config/tc-arm.c:29142
#, c-format
msgid "blx to Thumb func '%s' from Thumb ISA state changed to bl"
msgstr ""
-#: config/tc-arm.c:29133
+#: config/tc-arm.c:29191
msgid "Thumb2 branch out of range"
msgstr ""
-#: config/tc-arm.c:29185 config/tc-arm.c:29218
+#: config/tc-arm.c:29243 config/tc-arm.c:29276
msgid "Relocation supported only in FDPIC mode"
msgstr ""
-#: config/tc-arm.c:29248
+#: config/tc-arm.c:29306
msgid "rel31 relocation overflow"
msgstr ""
-#: config/tc-arm.c:29270 config/tc-arm.c:29276 config/tc-arm.c:29280
-#: config/tc-arm.c:29327
+#: config/tc-arm.c:29328 config/tc-arm.c:29334 config/tc-arm.c:29338
+#: config/tc-arm.c:29385
msgid "co-processor offset out of range"
msgstr ""
-#: config/tc-arm.c:29344
+#: config/tc-arm.c:29402
#, c-format
msgid "invalid offset, target not word aligned (0x%08lX)"
msgstr ""
-#: config/tc-arm.c:29350
+#: config/tc-arm.c:29408
msgid "section does not have enough alignment to ensure safe PC-relative loads"
msgstr ""
-#: config/tc-arm.c:29354 config/tc-arm.c:29363 config/tc-arm.c:29371
-#: config/tc-arm.c:29379 config/tc-arm.c:29387
+#: config/tc-arm.c:29412 config/tc-arm.c:29421 config/tc-arm.c:29429
+#: config/tc-arm.c:29437 config/tc-arm.c:29445
#, c-format
msgid "invalid offset, value too big (0x%08lX)"
msgstr ""
-#: config/tc-arm.c:29428
+#: config/tc-arm.c:29486
msgid "invalid Hi register with immediate"
msgstr ""
-#: config/tc-arm.c:29444
+#: config/tc-arm.c:29502
msgid "invalid immediate for stack address calculation"
msgstr ""
-#: config/tc-arm.c:29463
+#: config/tc-arm.c:29521
msgid "address calculation needs a strongly defined nearby symbol"
msgstr ""
-#: config/tc-arm.c:29479
+#: config/tc-arm.c:29537
msgid "symbol too far away"
msgstr ""
-#: config/tc-arm.c:29491
+#: config/tc-arm.c:29549
#, c-format
msgid "invalid immediate for address calculation (value = 0x%08lX)"
msgstr ""
-#: config/tc-arm.c:29521
+#: config/tc-arm.c:29579
#, c-format
msgid "invalid immediate: %ld is out of range"
msgstr ""
-#: config/tc-arm.c:29533
+#: config/tc-arm.c:29591
#, c-format
msgid "invalid shift value: %ld"
msgstr ""
-#: config/tc-arm.c:29603 config/tc-arm.c:29674
+#: config/tc-arm.c:29661 config/tc-arm.c:29732
#, c-format
msgid "the offset 0x%08lX is not representable"
msgstr ""
-#: config/tc-arm.c:29635
+#: config/tc-arm.c:29693
#, c-format
msgid "Unable to process relocation for thumb opcode: %lx"
msgstr ""
-#: config/tc-arm.c:29714
+#: config/tc-arm.c:29772
#, c-format
msgid "bad offset 0x%08lX (only 12 bits available for the magnitude)"
msgstr ""
-#: config/tc-arm.c:29753
+#: config/tc-arm.c:29811
#, c-format
msgid "bad offset 0x%08lX (only 8 bits available for the magnitude)"
msgstr ""
-#: config/tc-arm.c:29793
+#: config/tc-arm.c:29851
#, c-format
msgid "bad offset 0x%08lX (must be word-aligned)"
msgstr ""
-#: config/tc-arm.c:29798
+#: config/tc-arm.c:29856
#, c-format
msgid "bad offset 0x%08lX (must be an 8-bit number of words)"
msgstr ""
-#: config/tc-arm.c:30019 config/tc-score.c:7359
+#: config/tc-arm.c:30077 config/tc-score.c:7359
#, c-format
msgid "bad relocation fixup type (%d)"
msgstr ""
-#: config/tc-arm.c:30137
+#: config/tc-arm.c:30195
msgid "literal referenced across section boundary"
msgstr ""
-#: config/tc-arm.c:30217
+#: config/tc-arm.c:30275
msgid "internal relocation (type: IMMEDIATE) not fixed up"
msgstr ""
-#: config/tc-arm.c:30222
+#: config/tc-arm.c:30280
msgid "ADRL used for a symbol not defined in the same file"
msgstr ""
-#: config/tc-arm.c:30229
+#: config/tc-arm.c:30287
#, c-format
msgid "%s used for a symbol not defined in the same file"
msgstr ""
-#: config/tc-arm.c:30245
+#: config/tc-arm.c:30303
#, c-format
msgid "undefined local label `%s'"
msgstr ""
-#: config/tc-arm.c:30251
+#: config/tc-arm.c:30309
msgid "internal_relocation (type: OFFSET_IMM) not fixed up"
msgstr ""
-#: config/tc-arm.c:30273 config/tc-cris.c:4000 config/tc-csky.c:1152
-#: config/tc-ft32.c:708 config/tc-mcore.c:1929 config/tc-microblaze.c:2007
+#: config/tc-arm.c:30331 config/tc-cris.c:4000 config/tc-csky.c:1152
+#: config/tc-ft32.c:708 config/tc-mcore.c:1932 config/tc-microblaze.c:2007
#: config/tc-mmix.c:2907 config/tc-moxie.c:823 config/tc-ns32k.c:2245
#: config/tc-score.c:7446
msgid "<unknown>"
msgstr ""
-#: config/tc-arm.c:30672
+#: config/tc-arm.c:30730
#, c-format
msgid "%s: unexpected function type: %d"
msgstr ""
-#: config/tc-arm.c:30812
+#: config/tc-arm.c:30870
msgid "use of old and new-style options to set CPU type"
msgstr ""
-#: config/tc-arm.c:30831
+#: config/tc-arm.c:30889
msgid "use of old and new-style options to set FPU type"
msgstr ""
-#: config/tc-arm.c:30910
+#: config/tc-arm.c:30968
msgid "hard-float conflicts with specified fpu"
msgstr ""
-#: config/tc-arm.c:31101
+#: config/tc-arm.c:31159
msgid "generate PIC code"
msgstr ""
-#: config/tc-arm.c:31102
+#: config/tc-arm.c:31160
msgid "assemble Thumb code"
msgstr ""
-#: config/tc-arm.c:31103
+#: config/tc-arm.c:31161
msgid "support ARM/Thumb interworking"
msgstr ""
-#: config/tc-arm.c:31105
+#: config/tc-arm.c:31163
msgid "code uses 32-bit program counter"
msgstr ""
-#: config/tc-arm.c:31106
+#: config/tc-arm.c:31164
msgid "code uses 26-bit program counter"
msgstr ""
-#: config/tc-arm.c:31107
+#: config/tc-arm.c:31165
msgid "floating point args are in fp regs"
msgstr ""
-#: config/tc-arm.c:31109
+#: config/tc-arm.c:31167
msgid "re-entrant code"
msgstr ""
-#: config/tc-arm.c:31110
+#: config/tc-arm.c:31168
msgid "code is ATPCS conformant"
msgstr ""
#. These are recognized by the assembler, but have no affect on code.
-#: config/tc-arm.c:31116
+#: config/tc-arm.c:31174
msgid "use frame pointer"
msgstr ""
-#: config/tc-arm.c:31117
+#: config/tc-arm.c:31175
msgid "use stack size checking"
msgstr ""
-#: config/tc-arm.c:31120
+#: config/tc-arm.c:31178
msgid "do not warn on use of deprecated feature"
msgstr ""
-#: config/tc-arm.c:31123
+#: config/tc-arm.c:31181
msgid ""
"warn about performance deprecated IT instructions in ARMv8-A and ARMv8-R"
msgstr ""
-#: config/tc-arm.c:31127
+#: config/tc-arm.c:31185
msgid "warn about symbols that match instruction names [default]"
msgstr ""
-#: config/tc-arm.c:31128
+#: config/tc-arm.c:31186
msgid "disable warnings about symobls that match instructions"
msgstr ""
#. DON'T add any new processors to this list -- we want the whole list
#. to go away... Add them to the processors table instead.
-#: config/tc-arm.c:31144 config/tc-arm.c:31145
+#: config/tc-arm.c:31202 config/tc-arm.c:31203
msgid "use -mcpu=arm1"
msgstr ""
-#: config/tc-arm.c:31146 config/tc-arm.c:31147
+#: config/tc-arm.c:31204 config/tc-arm.c:31205
msgid "use -mcpu=arm2"
msgstr ""
-#: config/tc-arm.c:31148 config/tc-arm.c:31149
+#: config/tc-arm.c:31206 config/tc-arm.c:31207
msgid "use -mcpu=arm250"
msgstr ""
-#: config/tc-arm.c:31150 config/tc-arm.c:31151
+#: config/tc-arm.c:31208 config/tc-arm.c:31209
msgid "use -mcpu=arm3"
msgstr ""
-#: config/tc-arm.c:31152 config/tc-arm.c:31153
+#: config/tc-arm.c:31210 config/tc-arm.c:31211
msgid "use -mcpu=arm6"
msgstr ""
-#: config/tc-arm.c:31154 config/tc-arm.c:31155
+#: config/tc-arm.c:31212 config/tc-arm.c:31213
msgid "use -mcpu=arm600"
msgstr ""
-#: config/tc-arm.c:31156 config/tc-arm.c:31157
+#: config/tc-arm.c:31214 config/tc-arm.c:31215
msgid "use -mcpu=arm610"
msgstr ""
-#: config/tc-arm.c:31158 config/tc-arm.c:31159
+#: config/tc-arm.c:31216 config/tc-arm.c:31217
msgid "use -mcpu=arm620"
msgstr ""
-#: config/tc-arm.c:31160 config/tc-arm.c:31161
+#: config/tc-arm.c:31218 config/tc-arm.c:31219
msgid "use -mcpu=arm7"
msgstr ""
-#: config/tc-arm.c:31162 config/tc-arm.c:31163
+#: config/tc-arm.c:31220 config/tc-arm.c:31221
msgid "use -mcpu=arm70"
msgstr ""
-#: config/tc-arm.c:31164 config/tc-arm.c:31165
+#: config/tc-arm.c:31222 config/tc-arm.c:31223
msgid "use -mcpu=arm700"
msgstr ""
-#: config/tc-arm.c:31166 config/tc-arm.c:31167
+#: config/tc-arm.c:31224 config/tc-arm.c:31225
msgid "use -mcpu=arm700i"
msgstr ""
-#: config/tc-arm.c:31168 config/tc-arm.c:31169
+#: config/tc-arm.c:31226 config/tc-arm.c:31227
msgid "use -mcpu=arm710"
msgstr ""
-#: config/tc-arm.c:31170 config/tc-arm.c:31171
+#: config/tc-arm.c:31228 config/tc-arm.c:31229
msgid "use -mcpu=arm710c"
msgstr ""
-#: config/tc-arm.c:31172 config/tc-arm.c:31173
+#: config/tc-arm.c:31230 config/tc-arm.c:31231
msgid "use -mcpu=arm720"
msgstr ""
-#: config/tc-arm.c:31174 config/tc-arm.c:31175
+#: config/tc-arm.c:31232 config/tc-arm.c:31233
msgid "use -mcpu=arm7d"
msgstr ""
-#: config/tc-arm.c:31176 config/tc-arm.c:31177
+#: config/tc-arm.c:31234 config/tc-arm.c:31235
msgid "use -mcpu=arm7di"
msgstr ""
-#: config/tc-arm.c:31178 config/tc-arm.c:31179
+#: config/tc-arm.c:31236 config/tc-arm.c:31237
msgid "use -mcpu=arm7m"
msgstr ""
-#: config/tc-arm.c:31180 config/tc-arm.c:31181
+#: config/tc-arm.c:31238 config/tc-arm.c:31239
msgid "use -mcpu=arm7dm"
msgstr ""
-#: config/tc-arm.c:31182 config/tc-arm.c:31183
+#: config/tc-arm.c:31240 config/tc-arm.c:31241
msgid "use -mcpu=arm7dmi"
msgstr ""
-#: config/tc-arm.c:31184 config/tc-arm.c:31185
+#: config/tc-arm.c:31242 config/tc-arm.c:31243
msgid "use -mcpu=arm7100"
msgstr ""
-#: config/tc-arm.c:31186 config/tc-arm.c:31187
+#: config/tc-arm.c:31244 config/tc-arm.c:31245
msgid "use -mcpu=arm7500"
msgstr ""
-#: config/tc-arm.c:31188 config/tc-arm.c:31189
+#: config/tc-arm.c:31246 config/tc-arm.c:31247
msgid "use -mcpu=arm7500fe"
msgstr ""
-#: config/tc-arm.c:31190 config/tc-arm.c:31191 config/tc-arm.c:31192
-#: config/tc-arm.c:31193
+#: config/tc-arm.c:31248 config/tc-arm.c:31249 config/tc-arm.c:31250
+#: config/tc-arm.c:31251
msgid "use -mcpu=arm7tdmi"
msgstr ""
-#: config/tc-arm.c:31194 config/tc-arm.c:31195
+#: config/tc-arm.c:31252 config/tc-arm.c:31253
msgid "use -mcpu=arm710t"
msgstr ""
-#: config/tc-arm.c:31196 config/tc-arm.c:31197
+#: config/tc-arm.c:31254 config/tc-arm.c:31255
msgid "use -mcpu=arm720t"
msgstr ""
-#: config/tc-arm.c:31198 config/tc-arm.c:31199
+#: config/tc-arm.c:31256 config/tc-arm.c:31257
msgid "use -mcpu=arm740t"
msgstr ""
-#: config/tc-arm.c:31200 config/tc-arm.c:31201
+#: config/tc-arm.c:31258 config/tc-arm.c:31259
msgid "use -mcpu=arm8"
msgstr ""
-#: config/tc-arm.c:31202 config/tc-arm.c:31203
+#: config/tc-arm.c:31260 config/tc-arm.c:31261
msgid "use -mcpu=arm810"
msgstr ""
-#: config/tc-arm.c:31204 config/tc-arm.c:31205
+#: config/tc-arm.c:31262 config/tc-arm.c:31263
msgid "use -mcpu=arm9"
msgstr ""
-#: config/tc-arm.c:31206 config/tc-arm.c:31207
+#: config/tc-arm.c:31264 config/tc-arm.c:31265
msgid "use -mcpu=arm9tdmi"
msgstr ""
-#: config/tc-arm.c:31208 config/tc-arm.c:31209
+#: config/tc-arm.c:31266 config/tc-arm.c:31267
msgid "use -mcpu=arm920"
msgstr ""
-#: config/tc-arm.c:31210 config/tc-arm.c:31211
+#: config/tc-arm.c:31268 config/tc-arm.c:31269
msgid "use -mcpu=arm940"
msgstr ""
-#: config/tc-arm.c:31212
+#: config/tc-arm.c:31270
msgid "use -mcpu=strongarm"
msgstr ""
-#: config/tc-arm.c:31214
+#: config/tc-arm.c:31272
msgid "use -mcpu=strongarm110"
msgstr ""
-#: config/tc-arm.c:31216
+#: config/tc-arm.c:31274
msgid "use -mcpu=strongarm1100"
msgstr ""
-#: config/tc-arm.c:31218
+#: config/tc-arm.c:31276
msgid "use -mcpu=strongarm1110"
msgstr ""
-#: config/tc-arm.c:31219
+#: config/tc-arm.c:31277
msgid "use -mcpu=xscale"
msgstr ""
-#: config/tc-arm.c:31220
+#: config/tc-arm.c:31278
msgid "use -mcpu=iwmmxt"
msgstr ""
-#: config/tc-arm.c:31221
+#: config/tc-arm.c:31279
msgid "use -mcpu=all"
msgstr ""
#. Architecture variants -- don't add any more to this list either.
-#: config/tc-arm.c:31224 config/tc-arm.c:31225
+#: config/tc-arm.c:31282 config/tc-arm.c:31283
msgid "use -march=armv2"
msgstr ""
-#: config/tc-arm.c:31226 config/tc-arm.c:31227
+#: config/tc-arm.c:31284 config/tc-arm.c:31285
msgid "use -march=armv2a"
msgstr ""
-#: config/tc-arm.c:31228 config/tc-arm.c:31229
+#: config/tc-arm.c:31286 config/tc-arm.c:31287
msgid "use -march=armv3"
msgstr ""
-#: config/tc-arm.c:31230 config/tc-arm.c:31231
+#: config/tc-arm.c:31288 config/tc-arm.c:31289
msgid "use -march=armv3m"
msgstr ""
-#: config/tc-arm.c:31232 config/tc-arm.c:31233
+#: config/tc-arm.c:31290 config/tc-arm.c:31291
msgid "use -march=armv4"
msgstr ""
-#: config/tc-arm.c:31234 config/tc-arm.c:31235
+#: config/tc-arm.c:31292 config/tc-arm.c:31293
msgid "use -march=armv4t"
msgstr ""
-#: config/tc-arm.c:31236 config/tc-arm.c:31237
+#: config/tc-arm.c:31294 config/tc-arm.c:31295
msgid "use -march=armv5"
msgstr ""
-#: config/tc-arm.c:31238 config/tc-arm.c:31239
+#: config/tc-arm.c:31296 config/tc-arm.c:31297
msgid "use -march=armv5t"
msgstr ""
-#: config/tc-arm.c:31240 config/tc-arm.c:31241
+#: config/tc-arm.c:31298 config/tc-arm.c:31299
msgid "use -march=armv5te"
msgstr ""
#. Floating point variants -- don't add any more to this list either.
-#: config/tc-arm.c:31244
+#: config/tc-arm.c:31302
msgid "use -mfpu=fpe"
msgstr ""
-#: config/tc-arm.c:31245
+#: config/tc-arm.c:31303
msgid "use -mfpu=fpa10"
msgstr ""
-#: config/tc-arm.c:31246
+#: config/tc-arm.c:31304
msgid "use -mfpu=fpa11"
msgstr ""
-#: config/tc-arm.c:31248
+#: config/tc-arm.c:31306
msgid "use either -mfpu=softfpa or -mfpu=softvfp"
msgstr ""
-#: config/tc-arm.c:32333
+#: config/tc-arm.c:32427
msgid "extension does not apply to the base architecture"
msgstr ""
-#: config/tc-arm.c:32362
+#: config/tc-arm.c:32456
msgid "architectural extensions must be specified in alphabetical order"
msgstr ""
-#: config/tc-arm.c:32501 config/tc-arm.c:33444
+#: config/tc-arm.c:32595 config/tc-arm.c:33544
#, c-format
msgid "unknown floating point format `%s'\n"
msgstr ""
-#: config/tc-arm.c:32517 config/tc-csky.c:1264
+#: config/tc-arm.c:32611 config/tc-csky.c:1264
#, c-format
msgid "unknown floating point abi `%s'\n"
msgstr ""
-#: config/tc-arm.c:32533
+#: config/tc-arm.c:32627
#, c-format
msgid "unknown EABI `%s'\n"
msgstr ""
-#: config/tc-arm.c:32553
+#: config/tc-arm.c:32647
#, c-format
msgid "unknown implicit IT mode `%s', should be arm, thumb, always, or never."
msgstr ""
-#: config/tc-arm.c:32576 config/tc-metag.c:5911
+#: config/tc-arm.c:32670 config/tc-metag.c:5911
msgid "<fpu name>\t assemble for FPU architecture <fpu name>"
msgstr ""
-#: config/tc-arm.c:32578
+#: config/tc-arm.c:32672
msgid "<abi>\t assemble for floating point ABI <abi>"
msgstr ""
-#: config/tc-arm.c:32581
+#: config/tc-arm.c:32675
msgid "<ver>\t\t assemble for eabi version <ver>"
msgstr ""
-#: config/tc-arm.c:32584
+#: config/tc-arm.c:32678
msgid "<mode>\t controls implicit insertion of IT instructions"
msgstr ""
-#: config/tc-arm.c:32586
+#: config/tc-arm.c:32680
msgid "\t\t\t TI CodeComposer Studio syntax compatibility mode"
msgstr ""
-#: config/tc-arm.c:32589
+#: config/tc-arm.c:32683
msgid ""
"[ieee|alternative]\n"
" set the encoding for half precision floating point "
@@ -5455,32 +5602,32 @@ msgid ""
" or Arm alternative format."
msgstr ""
-#: config/tc-arm.c:32700
+#: config/tc-arm.c:32794
#, c-format
msgid " ARM-specific assembler options:\n"
msgstr ""
-#: config/tc-arm.c:32720
+#: config/tc-arm.c:32814
#, c-format
msgid " --fix-v4bx Allow BX in ARMv4 code\n"
msgstr ""
-#: config/tc-arm.c:32724
+#: config/tc-arm.c:32818
#, c-format
msgid " --fdpic generate an FDPIC object file\n"
msgstr ""
-#: config/tc-arm.c:33032
+#: config/tc-arm.c:33132
msgid "no architecture contains all the instructions used\n"
msgstr ""
-#: config/tc-arm.c:33384
+#: config/tc-arm.c:33484
#, c-format
msgid ""
"architectural extension `%s' is not allowed for the current base architecture"
msgstr ""
-#: config/tc-arm.c:33407
+#: config/tc-arm.c:33507
#, c-format
msgid "unknown architecture extension `%s'\n"
msgstr ""
@@ -5582,7 +5729,7 @@ msgstr ""
msgid "register number above 15 required"
msgstr ""
-#: config/tc-avr.c:1131 config/tc-csky.c:6394 config/tc-csky.c:6423
+#: config/tc-avr.c:1131 config/tc-csky.c:6395 config/tc-csky.c:6424
msgid "even register number required"
msgstr ""
@@ -5667,8 +5814,8 @@ msgstr ""
#. xgettext:c-format.
#: config/tc-avr.c:1865 config/tc-bfin.c:824 config/tc-d10v.c:1461
#: config/tc-d30v.c:1768 config/tc-metag.c:7016 config/tc-mn10200.c:772
-#: config/tc-mn10300.c:2177 config/tc-msp430.c:4643 config/tc-ppc.c:7484
-#: config/tc-spu.c:877 config/tc-spu.c:1090 config/tc-v850.c:3367
+#: config/tc-mn10300.c:2177 config/tc-msp430.c:4643 config/tc-ppc.c:7746
+#: config/tc-spu.c:877 config/tc-spu.c:1090 config/tc-v850.c:3364
#: config/tc-z80.c:3869
#, c-format
msgid "reloc %d not supported by object file format"
@@ -5848,7 +5995,7 @@ msgstr ""
msgid "internal error: reloc %d (`%s') not supported by object file format"
msgstr ""
-#: config/tc-cr16.c:696 config/tc-i386.c:14067 config/tc-s390.c:2113
+#: config/tc-cr16.c:696 config/tc-i386.c:14126 config/tc-s390.c:2113
msgid "GOT already in symbol table"
msgstr ""
@@ -6435,7 +6582,7 @@ msgstr ""
#. Variable not in small data read only segment accessed
#. using small data read only anchor.
-#: config/tc-csky.c:1149 config/tc-mcore.c:1924 config/tc-microblaze.c:1999
+#: config/tc-csky.c:1149 config/tc-mcore.c:1927 config/tc-microblaze.c:1999
#: config/tc-microblaze.c:2301 config/tc-microblaze.c:2324
msgid "unknown"
msgstr ""
@@ -6659,35 +6806,35 @@ msgstr ""
msgid "unsupported BFD relocation size %d"
msgstr ""
-#: config/tc-csky.c:5901
+#: config/tc-csky.c:5902
msgid "second operand must be 4"
msgstr ""
-#: config/tc-csky.c:5925 config/tc-mcore.c:1527
+#: config/tc-csky.c:5926 config/tc-mcore.c:1527
msgid "second operand must be 1"
msgstr ""
-#: config/tc-csky.c:5998 config/tc-xtensa.c:2002
+#: config/tc-csky.c:5999 config/tc-xtensa.c:2002
msgid "register number out of range"
msgstr ""
-#: config/tc-csky.c:6008
+#: config/tc-csky.c:6009
msgid "64-bit operator src/dst register must be less than 15"
msgstr ""
-#: config/tc-csky.c:7835
+#: config/tc-csky.c:7836
msgid "the first operand must be a symbol"
msgstr ""
-#: config/tc-csky.c:7844
+#: config/tc-csky.c:7845
msgid "missing stack size"
msgstr ""
-#: config/tc-csky.c:7857 config/tc-score.c:4244
+#: config/tc-csky.c:7858 config/tc-score.c:4244
msgid "value not in range [0, 0xffffffff]"
msgstr ""
-#: config/tc-csky.c:7867 config/tc-mcore.c:782
+#: config/tc-csky.c:7868 config/tc-mcore.c:782
msgid "operand must be a constant"
msgstr ""
@@ -7025,7 +7172,7 @@ msgstr ""
msgid "Invalid expression after # number\n"
msgstr ""
-#: config/tc-dlx.c:1177 config/tc-m32r.c:2275 config/tc-nds32.c:7880
+#: config/tc-dlx.c:1177 config/tc-m32r.c:2275 config/tc-nds32.c:7841
#: config/tc-sparc.c:4011
#, c-format
msgid "internal error: can't export reloc type %d (`%s')"
@@ -7473,7 +7620,7 @@ msgstr ""
msgid "Unexpected reference to a symbol in a non-code section"
msgstr ""
-#: config/tc-h8300.c:2323 config/tc-mcore.c:2205 config/tc-microblaze.c:2494
+#: config/tc-h8300.c:2323 config/tc-mcore.c:2208 config/tc-microblaze.c:2494
#: config/tc-pj.c:488 config/tc-sh.c:3901 config/tc-tic6x.c:4514
#: config/tc-xc16x.c:314
#, c-format
@@ -7895,880 +8042,890 @@ msgstr ""
msgid "Broken assembler. No assembly attempted."
msgstr ""
-#: config/tc-i386.c:1482
+#: config/tc-i386.c:1486
#, c-format
msgid "i386_output_nops called to generate nops of at most %d bytes!"
msgstr ""
-#: config/tc-i386.c:1691
+#: config/tc-i386.c:1695
#, c-format
msgid "invalid single nop size: %d (expect within [0, %d])"
msgstr ""
-#: config/tc-i386.c:1732
+#: config/tc-i386.c:1736
msgid "jump over nop padding out of range"
msgstr ""
-#: config/tc-i386.c:2577
+#: config/tc-i386.c:2581
#, c-format
msgid "0x%s shortened to 0x%s"
msgstr ""
-#: config/tc-i386.c:2669 config/tc-i386.c:8024
+#: config/tc-i386.c:2673 config/tc-i386.c:8079
msgid "same type of prefix used twice"
msgstr ""
-#: config/tc-i386.c:2696
+#: config/tc-i386.c:2700
#, c-format
msgid "64bit mode not supported on `%s'."
msgstr ""
-#: config/tc-i386.c:2705
+#: config/tc-i386.c:2709
#, c-format
msgid "32bit mode not supported on `%s'."
msgstr ""
-#: config/tc-i386.c:2745
+#: config/tc-i386.c:2749
msgid "bad argument to syntax directive."
msgstr ""
-#: config/tc-i386.c:2808
+#: config/tc-i386.c:2812
#, c-format
msgid "bad argument to %s_check directive."
msgstr ""
-#: config/tc-i386.c:2812
+#: config/tc-i386.c:2816
#, c-format
msgid "missing argument for %s_check directive"
msgstr ""
-#: config/tc-i386.c:2852
+#: config/tc-i386.c:2856
#, c-format
msgid "`%s' is not supported on `%s'"
msgstr ""
-#: config/tc-i386.c:2958
+#: config/tc-i386.c:2962
#, c-format
msgid "no such architecture: `%s'"
msgstr ""
-#: config/tc-i386.c:2963
+#: config/tc-i386.c:2967
msgid "missing cpu architecture"
msgstr ""
-#: config/tc-i386.c:2980
+#: config/tc-i386.c:2984
#, c-format
msgid "no such architecture modifier: `%s'"
msgstr ""
-#: config/tc-i386.c:2995 config/tc-i386.c:3025
+#: config/tc-i386.c:2999 config/tc-i386.c:3029
msgid "Intel L1OM is 64bit ELF only"
msgstr ""
-#: config/tc-i386.c:3002 config/tc-i386.c:3032
+#: config/tc-i386.c:3006 config/tc-i386.c:3036
msgid "Intel K1OM is 64bit ELF only"
msgstr ""
-#: config/tc-i386.c:3009 config/tc-i386.c:3046
+#: config/tc-i386.c:3013 config/tc-i386.c:3050
msgid "Intel MCU is 32bit ELF only"
msgstr ""
-#: config/tc-i386.c:3053 config/tc-i386.c:13954
+#: config/tc-i386.c:3057 config/tc-i386.c:14013
msgid "unknown architecture"
msgstr ""
-#: config/tc-i386.c:3440
+#: config/tc-i386.c:3444
msgid "there are no pc-relative size relocations"
msgstr ""
-#: config/tc-i386.c:3452
+#: config/tc-i386.c:3456
#, c-format
msgid "unknown relocation (%u)"
msgstr ""
-#: config/tc-i386.c:3454
+#: config/tc-i386.c:3458
#, c-format
msgid "%u-byte relocation cannot be applied to %u-byte field"
msgstr ""
-#: config/tc-i386.c:3458
+#: config/tc-i386.c:3462
msgid "non-pc-relative relocation for pc-relative field"
msgstr ""
-#: config/tc-i386.c:3463
+#: config/tc-i386.c:3467
msgid "relocated field and relocation type differ in signedness"
msgstr ""
-#: config/tc-i386.c:3472
+#: config/tc-i386.c:3476
msgid "there are no unsigned pc-relative relocations"
msgstr ""
-#: config/tc-i386.c:3480
+#: config/tc-i386.c:3484
#, c-format
msgid "cannot do %u byte pc-relative relocation"
msgstr ""
-#: config/tc-i386.c:3497
+#: config/tc-i386.c:3501
#, c-format
msgid "cannot do %s %u byte relocation"
msgstr ""
-#: config/tc-i386.c:4048 config/tc-i386.c:4985
+#: config/tc-i386.c:4052 config/tc-i386.c:5019
#, c-format
msgid "invalid instruction `%s' after `%s'"
msgstr ""
-#: config/tc-i386.c:4054
+#: config/tc-i386.c:4058
#, c-format
msgid "missing `lock' with `%s'"
msgstr ""
-#: config/tc-i386.c:4061
+#: config/tc-i386.c:4065
#, c-format
msgid "instruction `%s' after `xacquire' not allowed"
msgstr ""
-#: config/tc-i386.c:4067
+#: config/tc-i386.c:4071
#, c-format
msgid "memory destination needed for instruction `%s' after `xrelease'"
msgstr ""
-#: config/tc-i386.c:4713
+#: config/tc-i386.c:4743
#, c-format
msgid "`%s` changes flags which would affect control flow behavior"
msgstr ""
-#: config/tc-i386.c:4755
+#: config/tc-i386.c:4785
#, c-format
msgid "indirect `%s` with memory operand should be avoided"
msgstr ""
-#: config/tc-i386.c:4766
+#: config/tc-i386.c:4796
#, c-format
msgid "`%s` skips -mlfence-before-indirect-branch on `%s`"
msgstr ""
-#: config/tc-i386.c:4787
+#: config/tc-i386.c:4817
#, c-format
msgid "`%s` skips -mlfence-before-ret on `%s`"
msgstr ""
-#: config/tc-i386.c:4936
+#: config/tc-i386.c:4966
#, c-format
msgid "0x%s out of range of signed 32bit displacement"
msgstr ""
-#: config/tc-i386.c:4975
+#: config/tc-i386.c:5009
#, c-format
msgid "SSE instruction `%s' is used"
msgstr ""
-#: config/tc-i386.c:4998
+#: config/tc-i386.c:5032
msgid "expecting lockable instruction after `lock'"
msgstr ""
-#: config/tc-i386.c:5008
+#: config/tc-i386.c:5042
#, c-format
msgid "data size prefix invalid with `%s'"
msgstr ""
-#: config/tc-i386.c:5018
+#: config/tc-i386.c:5052
msgid "expecting valid branch instruction after `bnd'"
msgstr ""
-#: config/tc-i386.c:5022
+#: config/tc-i386.c:5056
msgid "expecting indirect branch instruction after `notrack'"
msgstr ""
-#: config/tc-i386.c:5027
+#: config/tc-i386.c:5061
msgid "32-bit address isn't allowed in 64-bit MPX instructions."
msgstr ""
-#: config/tc-i386.c:5031
+#: config/tc-i386.c:5065
msgid "16-bit address isn't allowed in MPX instructions"
msgstr ""
-#: config/tc-i386.c:5041
+#: config/tc-i386.c:5075
msgid "replacing `rep'/`repe' prefix by `bnd'"
msgstr ""
#. UnixWare fsub no args is alias for fsubp, fadd -> faddp, etc.
-#: config/tc-i386.c:5113
+#: config/tc-i386.c:5150
#, c-format
msgid "translating to `%sp'"
msgstr ""
-#: config/tc-i386.c:5120
+#: config/tc-i386.c:5157
#, c-format
msgid "instruction `%s' isn't supported outside of protected mode."
msgstr ""
-#: config/tc-i386.c:5128
+#: config/tc-i386.c:5165
#, c-format
msgid "REX prefix invalid with `%s'"
msgstr ""
-#: config/tc-i386.c:5189
+#: config/tc-i386.c:5226
#, c-format
msgid "can't encode register '%s%s' in an instruction requiring REX prefix."
msgstr ""
-#: config/tc-i386.c:5265 config/tc-i386.c:5469
+#: config/tc-i386.c:5302 config/tc-i386.c:5506
#, c-format
msgid "no such instruction: `%s'"
msgstr ""
-#: config/tc-i386.c:5276 config/tc-i386.c:5502
+#: config/tc-i386.c:5313 config/tc-i386.c:5539
#, c-format
msgid "invalid character %s in mnemonic"
msgstr ""
-#: config/tc-i386.c:5283
+#: config/tc-i386.c:5320
msgid "expecting prefix; got nothing"
msgstr ""
-#: config/tc-i386.c:5285
+#: config/tc-i386.c:5322
msgid "expecting mnemonic; got nothing"
msgstr ""
-#: config/tc-i386.c:5300 config/tc-i386.c:5524
+#: config/tc-i386.c:5337 config/tc-i386.c:5561
#, c-format
msgid "`%s' is only supported in 64-bit mode"
msgstr ""
-#: config/tc-i386.c:5301 config/tc-i386.c:5523
+#: config/tc-i386.c:5338 config/tc-i386.c:5560
#, c-format
msgid "`%s' is not supported in 64-bit mode"
msgstr ""
-#: config/tc-i386.c:5313
+#: config/tc-i386.c:5350
#, c-format
msgid "redundant %s prefix"
msgstr ""
-#: config/tc-i386.c:5515
+#: config/tc-i386.c:5552
msgid "use .code16 to ensure correct addressing mode"
msgstr ""
-#: config/tc-i386.c:5527
+#: config/tc-i386.c:5564
#, c-format
msgid "`%s' is not supported on `%s%s'"
msgstr ""
-#: config/tc-i386.c:5555
+#: config/tc-i386.c:5592
#, c-format
msgid "invalid character %s before operand %d"
msgstr ""
-#: config/tc-i386.c:5567
+#: config/tc-i386.c:5604
#, c-format
msgid "unbalanced double quotes in operand %d."
msgstr ""
-#: config/tc-i386.c:5574
+#: config/tc-i386.c:5611
#, c-format
msgid "unbalanced parenthesis in operand %d."
msgstr ""
-#: config/tc-i386.c:5587
+#: config/tc-i386.c:5624
#, c-format
msgid "invalid character %s in operand %d"
msgstr ""
-#: config/tc-i386.c:5607
+#: config/tc-i386.c:5644
#, c-format
msgid "spurious operands; (%d operands/instruction max)"
msgstr ""
-#: config/tc-i386.c:5617 config/tc-i386.c:11540
+#: config/tc-i386.c:5654 config/tc-i386.c:11589
#, c-format
msgid "too many memory references for `%s'"
msgstr ""
-#: config/tc-i386.c:5638
+#: config/tc-i386.c:5675
msgid "expecting operand after ','; got nothing"
msgstr ""
-#: config/tc-i386.c:5643
+#: config/tc-i386.c:5680
msgid "expecting operand before ','; got nothing"
msgstr ""
-#: config/tc-i386.c:6063
+#: config/tc-i386.c:6100
msgid "mask, index, and destination registers should be distinct"
msgstr ""
-#: config/tc-i386.c:6080
+#: config/tc-i386.c:6117
msgid "index and destination registers should be distinct"
msgstr ""
-#: config/tc-i386.c:6836
+#: config/tc-i386.c:6891
msgid "operand size mismatch"
msgstr ""
-#: config/tc-i386.c:6839
+#: config/tc-i386.c:6894
msgid "operand type mismatch"
msgstr ""
-#: config/tc-i386.c:6842
+#: config/tc-i386.c:6897
msgid "register type mismatch"
msgstr ""
-#: config/tc-i386.c:6845
+#: config/tc-i386.c:6900
msgid "number of operands mismatch"
msgstr ""
-#: config/tc-i386.c:6848
+#: config/tc-i386.c:6903
msgid "invalid instruction suffix"
msgstr ""
-#: config/tc-i386.c:6851
+#: config/tc-i386.c:6906
msgid "constant doesn't fit in 4 bits"
msgstr ""
-#: config/tc-i386.c:6854
+#: config/tc-i386.c:6909
msgid "unsupported with Intel mnemonic"
msgstr ""
-#: config/tc-i386.c:6857
+#: config/tc-i386.c:6912
msgid "unsupported syntax"
msgstr ""
-#: config/tc-i386.c:6860
+#: config/tc-i386.c:6915
#, c-format
msgid "unsupported instruction `%s'"
msgstr ""
-#: config/tc-i386.c:6864
+#: config/tc-i386.c:6919
msgid "invalid SIB address"
msgstr ""
-#: config/tc-i386.c:6867
+#: config/tc-i386.c:6922
msgid "invalid VSIB address"
msgstr ""
-#: config/tc-i386.c:6870
+#: config/tc-i386.c:6925
msgid "mask, index, and destination registers must be distinct"
msgstr ""
-#: config/tc-i386.c:6873
+#: config/tc-i386.c:6928
msgid "all tmm registers must be distinct"
msgstr ""
-#: config/tc-i386.c:6876
+#: config/tc-i386.c:6931
msgid "destination and source registers must be distinct"
msgstr ""
-#: config/tc-i386.c:6879
+#: config/tc-i386.c:6934
msgid "unsupported vector index register"
msgstr ""
-#: config/tc-i386.c:6882
+#: config/tc-i386.c:6937
msgid "unsupported broadcast"
msgstr ""
-#: config/tc-i386.c:6885
+#: config/tc-i386.c:6940
msgid "broadcast is needed for operand of such type"
msgstr ""
-#: config/tc-i386.c:6888
+#: config/tc-i386.c:6943
msgid "unsupported masking"
msgstr ""
-#: config/tc-i386.c:6891
+#: config/tc-i386.c:6946
msgid "mask not on destination operand"
msgstr ""
-#: config/tc-i386.c:6894
+#: config/tc-i386.c:6949
msgid "default mask isn't allowed"
msgstr ""
-#: config/tc-i386.c:6897
+#: config/tc-i386.c:6952
msgid "unsupported static rounding/sae"
msgstr ""
-#: config/tc-i386.c:6901
+#: config/tc-i386.c:6956
msgid "RC/SAE operand must precede immediate operands"
msgstr ""
-#: config/tc-i386.c:6903
+#: config/tc-i386.c:6958
msgid "RC/SAE operand must follow immediate operands"
msgstr ""
-#: config/tc-i386.c:6906 config/tc-metag.c:4787 config/tc-metag.c:5528
+#: config/tc-i386.c:6961 config/tc-metag.c:4787 config/tc-metag.c:5528
#: config/tc-metag.c:5550
msgid "invalid register operand"
msgstr ""
-#: config/tc-i386.c:6909
+#: config/tc-i386.c:6964
#, c-format
msgid "%s for `%s'"
msgstr ""
-#: config/tc-i386.c:6918
+#: config/tc-i386.c:6973
#, c-format
msgid "indirect %s without `*'"
msgstr ""
#. Warn them that a data or address size prefix doesn't
#. affect assembly of the next line of code.
-#: config/tc-i386.c:6925
+#: config/tc-i386.c:6980
#, c-format
msgid "stand-alone `%s' prefix"
msgstr ""
-#: config/tc-i386.c:6967
+#: config/tc-i386.c:7022
#, c-format
msgid "`%s' operand %u must use `%ses' segment"
msgstr ""
-#: config/tc-i386.c:7122
+#: config/tc-i386.c:7177
msgid "generating 16-bit `iret' for .code16gcc directive"
msgstr ""
-#: config/tc-i386.c:7126
+#: config/tc-i386.c:7181
#, c-format
msgid "generating 32-bit `%s', unlike earlier gas versions"
msgstr ""
-#: config/tc-i386.c:7244
+#: config/tc-i386.c:7299
#, c-format
msgid "ambiguous operand size for `%s'"
msgstr ""
-#: config/tc-i386.c:7249
+#: config/tc-i386.c:7304
#, c-format
msgid ""
"no instruction mnemonic suffix given and no register operands; can't size `"
"%s'"
msgstr ""
-#: config/tc-i386.c:7254
+#: config/tc-i386.c:7309
#, c-format
msgid "%s; using default for `%s'"
msgstr ""
-#: config/tc-i386.c:7256
+#: config/tc-i386.c:7311
msgid "ambiguous operand size"
msgstr ""
-#: config/tc-i386.c:7257
+#: config/tc-i386.c:7312
msgid "no instruction mnemonic suffix given and no register operands"
msgstr ""
-#: config/tc-i386.c:7397
+#: config/tc-i386.c:7452
#, c-format
msgid "16-bit addressing unavailable for `%s'"
msgstr ""
-#: config/tc-i386.c:7465
+#: config/tc-i386.c:7520
#, c-format
msgid "invalid register operand size for `%s'"
msgstr ""
#. Any other register is bad.
-#: config/tc-i386.c:7505 config/tc-i386.c:7530 config/tc-i386.c:7589
-#: config/tc-i386.c:7639
+#: config/tc-i386.c:7560 config/tc-i386.c:7585 config/tc-i386.c:7644
+#: config/tc-i386.c:7694
#, c-format
msgid "`%s%s' not allowed with `%s%c'"
msgstr ""
-#: config/tc-i386.c:7543 config/tc-i386.c:7563 config/tc-i386.c:7614
-#: config/tc-i386.c:7653
+#: config/tc-i386.c:7598 config/tc-i386.c:7618 config/tc-i386.c:7669
+#: config/tc-i386.c:7708
#, c-format
msgid "incorrect register `%s%s' used with `%c' suffix"
msgstr ""
-#: config/tc-i386.c:7728
+#: config/tc-i386.c:7783
msgid "no instruction mnemonic suffix given; can't determine immediate size"
msgstr ""
-#: config/tc-i386.c:7892
+#: config/tc-i386.c:7947
#, c-format
msgid ""
"source register `%s%s' implicitly denotes `%s%.3s%u' to `%s%.3s%u' source "
"group in `%s'"
msgstr ""
-#: config/tc-i386.c:7936
+#: config/tc-i386.c:7991
#, c-format
msgid "you can't `%s %s%s'"
msgstr ""
#. Reversed arguments on faddp, fsubp, etc.
-#: config/tc-i386.c:7976
+#: config/tc-i386.c:8031
#, c-format
msgid "translating to `%s %s%s,%s%s'"
msgstr ""
#. Extraneous `l' suffix on fp insn.
-#: config/tc-i386.c:7983
+#: config/tc-i386.c:8038
#, c-format
msgid "translating to `%s %s%s'"
msgstr ""
-#: config/tc-i386.c:7995
+#: config/tc-i386.c:8050
#, c-format
msgid "segment override on `%s' is ineffectual"
msgstr ""
-#: config/tc-i386.c:8734 config/tc-riscv.c:1296
+#: config/tc-i386.c:8789 config/tc-riscv.c:1340
msgid "relaxable branches not supported in absolute section"
msgstr ""
-#: config/tc-i386.c:8769 config/tc-i386.c:8915 config/tc-i386.c:8997
+#: config/tc-i386.c:8824 config/tc-i386.c:8972 config/tc-i386.c:9054
#, c-format
msgid "skipping prefixes on `%s'"
msgstr ""
-#: config/tc-i386.c:9023
+#: config/tc-i386.c:9080
msgid "16-bit jump out of range"
msgstr ""
-#: config/tc-i386.c:9277 config/tc-i386.c:9309 config/tc-i386.c:9398
+#: config/tc-i386.c:9334 config/tc-i386.c:9366 config/tc-i386.c:9455
#, c-format
msgid "`%s` skips -malign-branch-boundary on `%s`"
msgstr ""
-#: config/tc-i386.c:9674
+#: config/tc-i386.c:9646
+#, c-format
+msgid "Cannot convert `%s' in 16-bit mode"
+msgstr ""
+
+#: config/tc-i386.c:9648
+#, c-format
+msgid "Cannot convert `%s' with `-momit-lock-prefix=yes' in effect"
+msgstr ""
+
+#: config/tc-i386.c:9736
msgid "pseudo prefix without instruction"
msgstr ""
-#: config/tc-i386.c:9820
+#: config/tc-i386.c:9882
#, c-format
msgid "instruction length of %u bytes exceeds the limit of 15"
msgstr ""
-#: config/tc-i386.c:10419
+#: config/tc-i386.c:10468
#, c-format
msgid "@%s reloc is not supported with %d-bit output format"
msgstr ""
-#: config/tc-i386.c:10472
+#: config/tc-i386.c:10521
#, c-format
msgid "missing or invalid expression `%s'"
msgstr ""
-#: config/tc-i386.c:10481
+#: config/tc-i386.c:10530
#, c-format
msgid "invalid PLT expression `%s'"
msgstr ""
-#: config/tc-i386.c:10579
+#: config/tc-i386.c:10628
#, c-format
msgid "Unsupported broadcast: `%s'"
msgstr ""
-#: config/tc-i386.c:10596
+#: config/tc-i386.c:10645
#, c-format
msgid "`%s%s' can't be used for write mask"
msgstr ""
-#: config/tc-i386.c:10616
+#: config/tc-i386.c:10665
#, c-format
msgid "invalid write mask `%s'"
msgstr ""
-#: config/tc-i386.c:10637 config/tc-i386.c:11331
+#: config/tc-i386.c:10686 config/tc-i386.c:11380
#, c-format
msgid "duplicated `%s'"
msgstr ""
-#: config/tc-i386.c:10647
+#: config/tc-i386.c:10696
#, c-format
msgid "invalid zeroing-masking `%s'"
msgstr ""
-#: config/tc-i386.c:10660
+#: config/tc-i386.c:10709
#, c-format
msgid "missing `}' in `%s'"
msgstr ""
#. We don't know this one.
-#: config/tc-i386.c:10674
+#: config/tc-i386.c:10723
#, c-format
msgid "unknown vector operation: `%s'"
msgstr ""
-#: config/tc-i386.c:10680
+#: config/tc-i386.c:10729
msgid "zeroing-masking only allowed with write mask"
msgstr ""
-#: config/tc-i386.c:10700
+#: config/tc-i386.c:10749
#, c-format
msgid "at most %d immediate operands are allowed"
msgstr ""
-#: config/tc-i386.c:10722 config/tc-i386.c:10990
+#: config/tc-i386.c:10771 config/tc-i386.c:11039
#, c-format
msgid "junk `%s' after expression"
msgstr ""
-#: config/tc-i386.c:10735
+#: config/tc-i386.c:10784
#, c-format
msgid "illegal immediate register operand %s"
msgstr ""
-#: config/tc-i386.c:10749
+#: config/tc-i386.c:10798
#, c-format
msgid "missing or invalid immediate expression `%s'"
msgstr ""
-#: config/tc-i386.c:10772 config/tc-i386.c:11070
+#: config/tc-i386.c:10821 config/tc-i386.c:11119
#, c-format
msgid "unimplemented segment %s in operand"
msgstr ""
-#: config/tc-i386.c:10821
+#: config/tc-i386.c:10870
#, c-format
msgid "expecting scale factor of 1, 2, 4, or 8: got `%s'"
msgstr ""
-#: config/tc-i386.c:10830
+#: config/tc-i386.c:10879
#, c-format
msgid "scale factor of %d without an index register"
msgstr ""
-#: config/tc-i386.c:10852
+#: config/tc-i386.c:10901
#, c-format
msgid "at most %d displacement operands are allowed"
msgstr ""
-#: config/tc-i386.c:11046
+#: config/tc-i386.c:11095
#, c-format
msgid "missing or invalid displacement expression `%s'"
msgstr ""
-#: config/tc-i386.c:11220
+#: config/tc-i386.c:11269
#, c-format
msgid "`%s' is not valid here (expected `%c%s%s%c')"
msgstr ""
-#: config/tc-i386.c:11232
+#: config/tc-i386.c:11281
#, c-format
msgid "`%s' is not a valid %s expression"
msgstr ""
-#: config/tc-i386.c:11244
+#: config/tc-i386.c:11293
#, c-format
msgid "invalid `%s' prefix"
msgstr ""
-#: config/tc-i386.c:11277
+#: config/tc-i386.c:11326
#, c-format
msgid "`%s' cannot be used here"
msgstr ""
-#: config/tc-i386.c:11286
+#: config/tc-i386.c:11335
msgid "register scaling is being ignored here"
msgstr ""
-#: config/tc-i386.c:11348
+#: config/tc-i386.c:11397
#, c-format
msgid "Missing '}': '%s'"
msgstr ""
-#: config/tc-i386.c:11354
+#: config/tc-i386.c:11403
#, c-format
msgid "Junk after '}': '%s'"
msgstr ""
-#: config/tc-i386.c:11476
+#: config/tc-i386.c:11525
#, c-format
msgid "bad memory operand `%s'"
msgstr ""
-#: config/tc-i386.c:11492
+#: config/tc-i386.c:11541
#, c-format
msgid "junk `%s' after register"
msgstr ""
-#: config/tc-i386.c:11505 config/tc-i386.c:11669 config/tc-i386.c:11713
+#: config/tc-i386.c:11554 config/tc-i386.c:11718 config/tc-i386.c:11762
#, c-format
msgid "bad register name `%s'"
msgstr ""
-#: config/tc-i386.c:11513
+#: config/tc-i386.c:11562
msgid "immediate operand illegal with absolute jump"
msgstr ""
-#: config/tc-i386.c:11581
+#: config/tc-i386.c:11630
msgid "unbalanced figure braces"
msgstr ""
-#: config/tc-i386.c:11658
+#: config/tc-i386.c:11707
#, c-format
msgid "expecting `,' or `)' after index register in `%s'"
msgstr ""
-#: config/tc-i386.c:11686
+#: config/tc-i386.c:11735
#, c-format
msgid "expecting `)' after scale factor in `%s'"
msgstr ""
-#: config/tc-i386.c:11694
+#: config/tc-i386.c:11743
#, c-format
msgid "expecting index register or scale factor after `,'; got '%c'"
msgstr ""
-#: config/tc-i386.c:11702
+#: config/tc-i386.c:11751
#, c-format
msgid "expecting `,' or `)' after base register in `%s'"
msgstr ""
#. It's not a memory operand; argh!
-#: config/tc-i386.c:11751
+#: config/tc-i386.c:11800
#, c-format
msgid "invalid char %s beginning operand %d `%s'"
msgstr ""
-#: config/tc-i386.c:12410
+#: config/tc-i386.c:12460
#, c-format
msgid "%s:%u: add %d%s at 0x%llx to align %s within %d-byte boundary\n"
msgstr ""
-#: config/tc-i386.c:12413
+#: config/tc-i386.c:12463
#, c-format
msgid ""
"%s:%u: add additional %d%s at 0x%llx to align %s within %d-byte boundary\n"
msgstr ""
-#: config/tc-i386.c:12419
+#: config/tc-i386.c:12469
#, c-format
msgid ""
"%s:%u: add %d%s-byte nop at 0x%llx to align %s within %d-byte boundary\n"
msgstr ""
-#: config/tc-i386.c:12486
+#: config/tc-i386.c:12536
msgid "long jump required"
msgstr ""
-#: config/tc-i386.c:12541
+#: config/tc-i386.c:12591
msgid "jump target out of range"
msgstr ""
-#: config/tc-i386.c:12957
+#: config/tc-i386.c:13007
#, c-format
msgid "register '%s%s' cannot be used here"
msgstr ""
-#: config/tc-i386.c:13172
+#: config/tc-i386.c:13224
#, c-format
msgid "invalid -mx86-used-note= option: `%s'"
msgstr ""
-#: config/tc-i386.c:13195
+#: config/tc-i386.c:13247
msgid "no compiled in support for x86_64"
msgstr ""
-#: config/tc-i386.c:13215
+#: config/tc-i386.c:13267
msgid "no compiled in support for 32bit x86_64"
msgstr ""
-#: config/tc-i386.c:13219
+#: config/tc-i386.c:13271
msgid "32bit x86_64 is only supported for ELF"
msgstr ""
-#: config/tc-i386.c:13253 config/tc-i386.c:13341
+#: config/tc-i386.c:13305 config/tc-i386.c:13393
#, c-format
msgid "invalid -march= option: `%s'"
msgstr ""
-#: config/tc-i386.c:13351 config/tc-i386.c:13363
+#: config/tc-i386.c:13403 config/tc-i386.c:13415
#, c-format
msgid "invalid -mtune= option: `%s'"
msgstr ""
-#: config/tc-i386.c:13372
+#: config/tc-i386.c:13424
#, c-format
msgid "invalid -mmnemonic= option: `%s'"
msgstr ""
-#: config/tc-i386.c:13381
+#: config/tc-i386.c:13433
#, c-format
msgid "invalid -msyntax= option: `%s'"
msgstr ""
-#: config/tc-i386.c:13404
+#: config/tc-i386.c:13460
#, c-format
msgid "invalid -msse-check= option: `%s'"
msgstr ""
-#: config/tc-i386.c:13415
+#: config/tc-i386.c:13471
#, c-format
msgid "invalid -moperand-check= option: `%s'"
msgstr ""
-#: config/tc-i386.c:13424
+#: config/tc-i386.c:13480
#, c-format
msgid "invalid -mavxscalar= option: `%s'"
msgstr ""
-#: config/tc-i386.c:13433
+#: config/tc-i386.c:13489
#, c-format
msgid "invalid -mvexwig= option: `%s'"
msgstr ""
-#: config/tc-i386.c:13448
+#: config/tc-i386.c:13504
#, c-format
msgid "invalid -mevexlig= option: `%s'"
msgstr ""
-#: config/tc-i386.c:13461
+#: config/tc-i386.c:13517
#, c-format
msgid "invalid -mevexrcig= option: `%s'"
msgstr ""
-#: config/tc-i386.c:13470
+#: config/tc-i386.c:13526
#, c-format
msgid "invalid -mevexwig= option: `%s'"
msgstr ""
-#: config/tc-i386.c:13485
+#: config/tc-i386.c:13541
#, c-format
msgid "invalid -momit-lock-prefix= option: `%s'"
msgstr ""
-#: config/tc-i386.c:13494
+#: config/tc-i386.c:13550
#, c-format
msgid "invalid -mfence-as-lock-add= option: `%s'"
msgstr ""
-#: config/tc-i386.c:13503
+#: config/tc-i386.c:13559
#, c-format
msgid "invalid -mlfence-after-load= option: `%s'"
msgstr ""
-#: config/tc-i386.c:13520
+#: config/tc-i386.c:13576
#, c-format
msgid "invalid -mlfence-before-indirect-branch= option: `%s'"
msgstr ""
-#: config/tc-i386.c:13534
+#: config/tc-i386.c:13590
#, c-format
msgid "invalid -mlfence-before-ret= option: `%s'"
msgstr ""
-#: config/tc-i386.c:13544
+#: config/tc-i386.c:13600
#, c-format
msgid "invalid -mrelax-relocations= option: `%s'"
msgstr ""
-#: config/tc-i386.c:13573
+#: config/tc-i386.c:13629
#, c-format
msgid "invalid -malign-branch-boundary= value: %s"
msgstr ""
-#: config/tc-i386.c:13587
+#: config/tc-i386.c:13643
#, c-format
msgid "invalid -malign-branch-prefix-size= value: %s"
msgstr ""
-#: config/tc-i386.c:13614
+#: config/tc-i386.c:13670
#, c-format
msgid "invalid -malign-branch= option: `%s'"
msgstr ""
-#: config/tc-i386.c:13770
+#: config/tc-i386.c:13826
#, c-format
msgid ""
" -Qy, -Qn ignored\n"
@@ -8776,39 +8933,39 @@ msgid ""
" -k ignored\n"
msgstr ""
-#: config/tc-i386.c:13775
+#: config/tc-i386.c:13831
#, c-format
msgid ""
" -n Do not optimize code alignment\n"
" -q quieten some warnings\n"
msgstr ""
-#: config/tc-i386.c:13779
+#: config/tc-i386.c:13835
#, c-format
msgid " -s ignored\n"
msgstr ""
-#: config/tc-i386.c:13784
+#: config/tc-i386.c:13840
#, c-format
msgid " --32/--64/--x32 generate 32bit/64bit/x32 object\n"
msgstr ""
-#: config/tc-i386.c:13787
+#: config/tc-i386.c:13843
#, c-format
msgid " --32/--64 generate 32bit/64bit object\n"
msgstr ""
-#: config/tc-i386.c:13792
+#: config/tc-i386.c:13848
#, c-format
msgid " --divide do not treat `/' as a comment character\n"
msgstr ""
-#: config/tc-i386.c:13795
+#: config/tc-i386.c:13851
#, c-format
msgid " --divide ignored\n"
msgstr ""
-#: config/tc-i386.c:13798
+#: config/tc-i386.c:13854
#, c-format
msgid ""
" -march=CPU[,+EXTENSION...]\n"
@@ -8816,36 +8973,44 @@ msgid ""
"of:\n"
msgstr ""
-#: config/tc-i386.c:13802
+#: config/tc-i386.c:13858
#, c-format
msgid " EXTENSION is combination of:\n"
msgstr ""
-#: config/tc-i386.c:13805
+#: config/tc-i386.c:13861
#, c-format
msgid " -mtune=CPU optimize for CPU, CPU is one of:\n"
msgstr ""
-#: config/tc-i386.c:13808
+#: config/tc-i386.c:13864
#, c-format
msgid " -msse2avx encode SSE instructions with VEX prefix\n"
msgstr ""
-#: config/tc-i386.c:13810
+#: config/tc-i386.c:13866
+#, c-format
+msgid ""
+" -muse-unaligned-vector-move\n"
+" encode aligned vector move as unaligned vector "
+"move\n"
+msgstr ""
+
+#: config/tc-i386.c:13869
#, c-format
msgid ""
" -msse-check=[none|error|warning] (default: warning)\n"
" check SSE instructions\n"
msgstr ""
-#: config/tc-i386.c:13813
+#: config/tc-i386.c:13872
#, c-format
msgid ""
" -moperand-check=[none|error|warning] (default: warning)\n"
" check operand combinations for validity\n"
msgstr ""
-#: config/tc-i386.c:13816
+#: config/tc-i386.c:13875
#, c-format
msgid ""
" -mavxscalar=[128|256] (default: 128)\n"
@@ -8854,7 +9019,7 @@ msgid ""
" length\n"
msgstr ""
-#: config/tc-i386.c:13820
+#: config/tc-i386.c:13879
#, c-format
msgid ""
" -mvexwig=[0|1] (default: 0)\n"
@@ -8862,7 +9027,7 @@ msgid ""
" for VEX.W bit ignored instructions\n"
msgstr ""
-#: config/tc-i386.c:13824
+#: config/tc-i386.c:13883
#, c-format
msgid ""
" -mevexlig=[128|256|512] (default: 128)\n"
@@ -8871,7 +9036,7 @@ msgid ""
" length\n"
msgstr ""
-#: config/tc-i386.c:13828
+#: config/tc-i386.c:13887
#, c-format
msgid ""
" -mevexwig=[0|1] (default: 0)\n"
@@ -8880,7 +9045,7 @@ msgid ""
" for EVEX.W bit ignored instructions\n"
msgstr ""
-#: config/tc-i386.c:13832
+#: config/tc-i386.c:13891
#, c-format
msgid ""
" -mevexrcig=[rne|rd|ru|rz] (default: rne)\n"
@@ -8889,77 +9054,77 @@ msgid ""
" for SAE-only ignored instructions\n"
msgstr ""
-#: config/tc-i386.c:13836
+#: config/tc-i386.c:13895
#, c-format
msgid " -mmnemonic=[att|intel] "
msgstr ""
-#: config/tc-i386.c:13839
+#: config/tc-i386.c:13898
#, c-format
msgid "(default: att)\n"
msgstr ""
-#: config/tc-i386.c:13841
+#: config/tc-i386.c:13900
#, c-format
msgid "(default: intel)\n"
msgstr ""
-#: config/tc-i386.c:13842
+#: config/tc-i386.c:13901
#, c-format
msgid " use AT&T/Intel mnemonic\n"
msgstr ""
-#: config/tc-i386.c:13844
+#: config/tc-i386.c:13903
#, c-format
msgid ""
" -msyntax=[att|intel] (default: att)\n"
" use AT&T/Intel syntax\n"
msgstr ""
-#: config/tc-i386.c:13847
+#: config/tc-i386.c:13906
#, c-format
msgid " -mindex-reg support pseudo index registers\n"
msgstr ""
-#: config/tc-i386.c:13849
+#: config/tc-i386.c:13908
#, c-format
msgid " -mnaked-reg don't require `%%' prefix for registers\n"
msgstr ""
-#: config/tc-i386.c:13851
+#: config/tc-i386.c:13910
#, c-format
msgid " -madd-bnd-prefix add BND prefix for all valid branches\n"
msgstr ""
-#: config/tc-i386.c:13854
+#: config/tc-i386.c:13913
#, c-format
msgid " -mshared disable branch optimization for shared code\n"
msgstr ""
-#: config/tc-i386.c:13856
+#: config/tc-i386.c:13915
#, c-format
msgid " -mx86-used-note=[no|yes] "
msgstr ""
-#: config/tc-i386.c:13862
+#: config/tc-i386.c:13921
#, c-format
msgid ""
" generate x86 used ISA and feature properties\n"
msgstr ""
-#: config/tc-i386.c:13866
+#: config/tc-i386.c:13925
#, c-format
msgid " -mbig-obj generate big object files\n"
msgstr ""
-#: config/tc-i386.c:13869
+#: config/tc-i386.c:13928
#, c-format
msgid ""
" -momit-lock-prefix=[no|yes] (default: no)\n"
" strip all lock prefixes\n"
msgstr ""
-#: config/tc-i386.c:13872
+#: config/tc-i386.c:13931
#, c-format
msgid ""
" -mfence-as-lock-add=[no|yes] (default: no)\n"
@@ -8967,24 +9132,24 @@ msgid ""
" lock addl $0x0, (%%{re}sp)\n"
msgstr ""
-#: config/tc-i386.c:13876
+#: config/tc-i386.c:13935
#, c-format
msgid " -mrelax-relocations=[no|yes] "
msgstr ""
-#: config/tc-i386.c:13882
+#: config/tc-i386.c:13941
#, c-format
msgid " generate relax relocations\n"
msgstr ""
-#: config/tc-i386.c:13884
+#: config/tc-i386.c:13943
#, c-format
msgid ""
" -malign-branch-boundary=NUM (default: 0)\n"
" align branches within NUM byte boundary\n"
msgstr ""
-#: config/tc-i386.c:13887
+#: config/tc-i386.c:13946
#, c-format
msgid ""
" -malign-branch=TYPE[+TYPE...] (default: jcc+fused+jmp)\n"
@@ -8994,28 +9159,28 @@ msgid ""
" specify types of branches to align\n"
msgstr ""
-#: config/tc-i386.c:13892
+#: config/tc-i386.c:13951
#, c-format
msgid ""
" -malign-branch-prefix-size=NUM (default: 5)\n"
" align branches with NUM prefixes per instruction\n"
msgstr ""
-#: config/tc-i386.c:13895
+#: config/tc-i386.c:13954
#, c-format
msgid ""
" -mbranches-within-32B-boundaries\n"
" align branches within 32 byte boundary\n"
msgstr ""
-#: config/tc-i386.c:13898
+#: config/tc-i386.c:13957
#, c-format
msgid ""
" -mlfence-after-load=[no|yes] (default: no)\n"
" generate lfence after load\n"
msgstr ""
-#: config/tc-i386.c:13901
+#: config/tc-i386.c:13960
#, c-format
msgid ""
" -mlfence-before-indirect-branch=[none|all|register|memory] (default: "
@@ -9023,692 +9188,688 @@ msgid ""
" generate lfence before indirect near branch\n"
msgstr ""
-#: config/tc-i386.c:13904
+#: config/tc-i386.c:13963
#, c-format
msgid ""
" -mlfence-before-ret=[none|or|not|shl|yes] (default: none)\n"
" generate lfence before ret\n"
msgstr ""
-#: config/tc-i386.c:13907
+#: config/tc-i386.c:13966
#, c-format
msgid " -mamd64 accept only AMD64 ISA [default]\n"
msgstr ""
-#: config/tc-i386.c:13909
+#: config/tc-i386.c:13968
#, c-format
msgid " -mintel64 accept only Intel64 ISA\n"
msgstr ""
-#: config/tc-i386.c:13950
+#: config/tc-i386.c:14009
#, c-format
msgid "Intel MCU doesn't support `%s' architecture"
msgstr ""
-#: config/tc-i386.c:14018
+#: config/tc-i386.c:14077
msgid "Intel L1OM is 64bit only"
msgstr ""
-#: config/tc-i386.c:14024
+#: config/tc-i386.c:14083
msgid "Intel K1OM is 64bit only"
msgstr ""
-#: config/tc-i386.c:14030
+#: config/tc-i386.c:14089
msgid "Intel MCU is 32bit only"
msgstr ""
-#: config/tc-i386.c:14142
+#: config/tc-i386.c:14201
msgid ""
"constant directive skips -mlfence-before-ret and -mlfence-before-indirect-"
"branch"
msgstr ""
-#: config/tc-i386.c:14145
+#: config/tc-i386.c:14204
msgid "constant directive skips -mlfence-before-ret"
msgstr ""
-#: config/tc-i386.c:14148
+#: config/tc-i386.c:14207
msgid "constant directive skips -mlfence-before-indirect-branch"
msgstr ""
-#: config/tc-i386.c:14259
+#: config/tc-i386.c:14318
msgid "symbol size computation overflow"
msgstr ""
-#: config/tc-i386.c:14333 config/tc-sparc.c:3852
+#: config/tc-i386.c:14392 config/tc-sparc.c:3852
#, c-format
msgid "can not do %d byte pc-relative relocation"
msgstr ""
-#: config/tc-i386.c:14351
+#: config/tc-i386.c:14410
#, c-format
msgid "can not do %d byte relocation"
msgstr ""
-#: config/tc-i386.c:14419
+#: config/tc-i386.c:14478
#, c-format
msgid "cannot represent relocation type %s in x32 mode"
msgstr ""
-#: config/tc-i386.c:14456 config/tc-s390.c:2602
+#: config/tc-i386.c:14515 config/tc-s390.c:2602
#, c-format
msgid "cannot represent relocation type %s"
msgstr ""
-#: config/tc-i386.c:14573
+#: config/tc-i386.c:14632
msgid "bad .section directive: want a,l,w,x,M,S,G,T in string"
msgstr ""
-#: config/tc-i386.c:14576
+#: config/tc-i386.c:14635
msgid "bad .section directive: want a,w,x,M,S,G,T in string"
msgstr ""
-#: config/tc-i386.c:14595
+#: config/tc-i386.c:14654
msgid ".largecomm supported only in 64bit mode, producing .comm"
msgstr ""
-#: config/tc-ia64.c:869
+#: config/tc-ia64.c:870
msgid "bad .section directive: want a,o,s,w,x,M,S,G,T in string"
msgstr ""
-#: config/tc-ia64.c:921
+#: config/tc-ia64.c:922
msgid "Size of frame exceeds maximum of 96 registers"
msgstr ""
-#: config/tc-ia64.c:926
+#: config/tc-ia64.c:927
msgid "Size of rotating registers exceeds frame size"
msgstr ""
-#: config/tc-ia64.c:1013
+#: config/tc-ia64.c:1014
msgid "Unwind directive not followed by an instruction."
msgstr ""
-#: config/tc-ia64.c:1022 config/tc-ia64.c:7604
+#: config/tc-ia64.c:1023 config/tc-ia64.c:7597
msgid "qualifying predicate not followed by instruction"
msgstr ""
-#: config/tc-ia64.c:1070
+#: config/tc-ia64.c:1071
msgid "expected ',' after section name"
msgstr ""
-#: config/tc-ia64.c:1105
+#: config/tc-ia64.c:1106
msgid "expected ',' after symbol name"
msgstr ""
-#: config/tc-ia64.c:1129
+#: config/tc-ia64.c:1130
msgid "expected ',' after symbol size"
msgstr ""
-#: config/tc-ia64.c:1212 config/tc-ia64.c:1246
+#: config/tc-ia64.c:1213 config/tc-ia64.c:1247
msgid "record type is not valid"
msgstr ""
-#: config/tc-ia64.c:1315
+#: config/tc-ia64.c:1316
msgid "Invalid record type for P3 format."
msgstr ""
-#: config/tc-ia64.c:1351
+#: config/tc-ia64.c:1352
msgid "Invalid record type for format P6"
msgstr ""
-#: config/tc-ia64.c:1531 config/tc-ia64.c:1583
+#: config/tc-ia64.c:1532 config/tc-ia64.c:1584
msgid "Invalid record type for format B1"
msgstr ""
-#: config/tc-ia64.c:1616
+#: config/tc-ia64.c:1617
msgid "Invalid record type for format X1"
msgstr ""
-#: config/tc-ia64.c:1658
+#: config/tc-ia64.c:1659
msgid "Invalid record type for format X3"
msgstr ""
-#: config/tc-ia64.c:1696
+#: config/tc-ia64.c:1697
msgid "Previous .save incomplete"
msgstr ""
-#: config/tc-ia64.c:2521
+#: config/tc-ia64.c:2522
msgid "spill_mask record unimplemented."
msgstr ""
-#: config/tc-ia64.c:2578
+#: config/tc-ia64.c:2579
msgid "record_type_not_valid"
msgstr ""
-#: config/tc-ia64.c:2662
+#: config/tc-ia64.c:2663
msgid "Ignoring attempt to spill beyond end of region"
msgstr ""
-#: config/tc-ia64.c:2721
+#: config/tc-ia64.c:2722
msgid "Only constant space allocation is supported"
msgstr ""
-#: config/tc-ia64.c:2735
+#: config/tc-ia64.c:2736
msgid "Only constant offsets are supported"
msgstr ""
-#: config/tc-ia64.c:2759
+#: config/tc-ia64.c:2760
msgid "Section switching in code is not supported."
msgstr ""
-#: config/tc-ia64.c:2801
+#: config/tc-ia64.c:2802
msgid "Insn slot not set in unwind record."
msgstr ""
-#: config/tc-ia64.c:2875
+#: config/tc-ia64.c:2876
msgid "frgr_mem record before region record!"
msgstr ""
-#: config/tc-ia64.c:2886
+#: config/tc-ia64.c:2887
msgid "fr_mem record before region record!"
msgstr ""
-#: config/tc-ia64.c:2895
+#: config/tc-ia64.c:2896
msgid "gr_mem record before region record!"
msgstr ""
-#: config/tc-ia64.c:2904
+#: config/tc-ia64.c:2905
msgid "br_mem record before region record!"
msgstr ""
-#: config/tc-ia64.c:2914
+#: config/tc-ia64.c:2915
msgid "gr_gr record before region record!"
msgstr ""
-#: config/tc-ia64.c:2922
+#: config/tc-ia64.c:2923
msgid "br_gr record before region record!"
msgstr ""
-#: config/tc-ia64.c:3040
+#: config/tc-ia64.c:3041
#, c-format
msgid "First operand to .%s must be a predicate"
msgstr ""
-#: config/tc-ia64.c:3044
+#: config/tc-ia64.c:3045
#, c-format
msgid "Pointless use of p0 as first operand to .%s"
msgstr ""
-#: config/tc-ia64.c:3100
+#: config/tc-ia64.c:3101
#, c-format
msgid "Operand %d to .%s must be a preserved register"
msgstr ""
-#: config/tc-ia64.c:3136
+#: config/tc-ia64.c:3137
#, c-format
msgid "Operand %d to .%s must be a writable register"
msgstr ""
-#: config/tc-ia64.c:3160
+#: config/tc-ia64.c:3161
#, c-format
msgid "Radix `%s' unsupported or invalid"
msgstr ""
-#: config/tc-ia64.c:3190 config/tc-ia64.c:3195
+#: config/tc-ia64.c:3191 config/tc-ia64.c:3196
#, c-format
msgid ".%s outside of %s"
msgstr ""
-#: config/tc-ia64.c:3281
+#: config/tc-ia64.c:3282
msgid "Tags on unwind pseudo-ops aren't supported, yet"
msgstr ""
-#: config/tc-ia64.c:3303
+#: config/tc-ia64.c:3304
msgid "First operand to .fframe must be a constant"
msgstr ""
-#: config/tc-ia64.c:3323
+#: config/tc-ia64.c:3324
msgid "First operand to .vframe must be a general register"
msgstr ""
-#: config/tc-ia64.c:3331
+#: config/tc-ia64.c:3332
msgid "Operand of .vframe contradicts .prologue"
msgstr ""
-#: config/tc-ia64.c:3341
+#: config/tc-ia64.c:3342
msgid ".vframepsp is meaningless, assuming .vframesp was meant"
msgstr ""
-#: config/tc-ia64.c:3349
+#: config/tc-ia64.c:3350
msgid "Operand to .vframesp must be a constant (sp-relative offset)"
msgstr ""
-#: config/tc-ia64.c:3376
+#: config/tc-ia64.c:3377
msgid "First operand to .save not a register"
msgstr ""
-#: config/tc-ia64.c:3382
+#: config/tc-ia64.c:3383
msgid "Second operand to .save not a valid register"
msgstr ""
-#: config/tc-ia64.c:3413 config/tc-ia64.c:3424 config/tc-ia64.c:3432
+#: config/tc-ia64.c:3414 config/tc-ia64.c:3425 config/tc-ia64.c:3433
msgid "Second operand of .save contradicts .prologue"
msgstr ""
-#: config/tc-ia64.c:3439
+#: config/tc-ia64.c:3440
msgid "First operand to .save not a valid register"
msgstr ""
-#: config/tc-ia64.c:3457
+#: config/tc-ia64.c:3458
msgid "First operand to .restore must be stack pointer (sp)"
msgstr ""
-#: config/tc-ia64.c:3466
+#: config/tc-ia64.c:3467
msgid "Second operand to .restore must be a constant >= 0"
msgstr ""
-#: config/tc-ia64.c:3476
+#: config/tc-ia64.c:3477
#, c-format
msgid "Epilogue count of %lu exceeds number of nested prologues (%u)"
msgstr ""
-#: config/tc-ia64.c:3562
+#: config/tc-ia64.c:3563
#, c-format
msgid "Illegal section name `%s' (causes unwind section name clash)"
msgstr ""
-#: config/tc-ia64.c:3737
+#: config/tc-ia64.c:3738
msgid "First operand to .altrp not a valid branch register"
msgstr ""
-#: config/tc-ia64.c:3766
+#: config/tc-ia64.c:3767
#, c-format
msgid "First operand to .%s not a register"
msgstr ""
-#: config/tc-ia64.c:3771
+#: config/tc-ia64.c:3772
#, c-format
msgid "Second operand to .%s not a constant"
msgstr ""
-#: config/tc-ia64.c:3838
+#: config/tc-ia64.c:3839
#, c-format
msgid "First operand to .%s not a valid register"
msgstr ""
-#: config/tc-ia64.c:3861
+#: config/tc-ia64.c:3862
msgid "First operand to .save.g must be a positive 4-bit constant"
msgstr ""
-#: config/tc-ia64.c:3874
+#: config/tc-ia64.c:3875
msgid "Second operand to .save.g must be a general register"
msgstr ""
-#: config/tc-ia64.c:3879
+#: config/tc-ia64.c:3880
#, c-format
msgid "Second operand to .save.g must be the first of %d general registers"
msgstr ""
-#: config/tc-ia64.c:3902
+#: config/tc-ia64.c:3903
msgid "Operand to .save.f must be a positive 20-bit constant"
msgstr ""
-#: config/tc-ia64.c:3925
+#: config/tc-ia64.c:3926
msgid "First operand to .save.b must be a positive 5-bit constant"
msgstr ""
-#: config/tc-ia64.c:3938
+#: config/tc-ia64.c:3939
msgid "Second operand to .save.b must be a general register"
msgstr ""
-#: config/tc-ia64.c:3943
+#: config/tc-ia64.c:3944
#, c-format
msgid "Second operand to .save.b must be the first of %d general registers"
msgstr ""
-#: config/tc-ia64.c:3969
+#: config/tc-ia64.c:3970
msgid "First operand to .save.gf must be a non-negative 4-bit constant"
msgstr ""
-#: config/tc-ia64.c:3977
+#: config/tc-ia64.c:3978
msgid "Second operand to .save.gf must be a non-negative 20-bit constant"
msgstr ""
-#: config/tc-ia64.c:3985
+#: config/tc-ia64.c:3986
msgid "Operands to .save.gf may not be both zero"
msgstr ""
-#: config/tc-ia64.c:4002
+#: config/tc-ia64.c:4003
msgid "Operand to .spill must be a constant"
msgstr ""
-#: config/tc-ia64.c:4071
+#: config/tc-ia64.c:4072
#, c-format
msgid "Operand %d to .%s must be a constant"
msgstr ""
-#: config/tc-ia64.c:4092
+#: config/tc-ia64.c:4093
#, c-format
msgid "Missing .label_state %ld"
msgstr ""
-#: config/tc-ia64.c:4146
+#: config/tc-ia64.c:4147
msgid "Operand to .label_state must be a constant"
msgstr ""
-#: config/tc-ia64.c:4165
+#: config/tc-ia64.c:4166
msgid "Operand to .copy_state must be a constant"
msgstr ""
-#: config/tc-ia64.c:4188
+#: config/tc-ia64.c:4189
msgid "First operand to .unwabi must be a constant"
msgstr ""
-#: config/tc-ia64.c:4194
+#: config/tc-ia64.c:4195
msgid "Second operand to .unwabi must be a constant"
msgstr ""
-#: config/tc-ia64.c:4229
+#: config/tc-ia64.c:4230
msgid "Missing .endp after previous .proc"
msgstr ""
-#: config/tc-ia64.c:4247
+#: config/tc-ia64.c:4248
msgid "Empty argument of .proc"
msgstr ""
-#: config/tc-ia64.c:4252
+#: config/tc-ia64.c:4253
#, c-format
msgid "`%s' was already defined"
msgstr ""
-#: config/tc-ia64.c:4295
+#: config/tc-ia64.c:4296
msgid "Initial .body should precede any instructions"
msgstr ""
-#: config/tc-ia64.c:4314
+#: config/tc-ia64.c:4315
msgid ".prologue within prologue"
msgstr ""
-#: config/tc-ia64.c:4319
+#: config/tc-ia64.c:4320
msgid "Initial .prologue should precede any instructions"
msgstr ""
-#: config/tc-ia64.c:4329
+#: config/tc-ia64.c:4330
msgid "First operand to .prologue must be a positive 4-bit constant"
msgstr ""
-#: config/tc-ia64.c:4331
+#: config/tc-ia64.c:4332
msgid "Pointless use of zero first operand to .prologue"
msgstr ""
-#: config/tc-ia64.c:4347
+#: config/tc-ia64.c:4348
msgid "Using a constant as second operand to .prologue is deprecated"
msgstr ""
-#: config/tc-ia64.c:4353
+#: config/tc-ia64.c:4354
msgid "Second operand to .prologue must be a general register"
msgstr ""
-#: config/tc-ia64.c:4358
+#: config/tc-ia64.c:4359
#, c-format
msgid "Second operand to .prologue must be the first of %d general registers"
msgstr ""
-#: config/tc-ia64.c:4471
+#: config/tc-ia64.c:4472
#, c-format
msgid "`%s' was not defined within procedure"
msgstr ""
-#: config/tc-ia64.c:4507
+#: config/tc-ia64.c:4508
msgid "Empty argument of .endp"
msgstr ""
-#: config/tc-ia64.c:4521
+#: config/tc-ia64.c:4522
#, c-format
msgid "`%s' was not specified with previous .proc"
msgstr ""
-#: config/tc-ia64.c:4536
+#: config/tc-ia64.c:4537
#, c-format
msgid "`%s' should be an operand to this .endp"
msgstr ""
-#: config/tc-ia64.c:4577 config/tc-ia64.c:4898 config/tc-ia64.c:5204
+#: config/tc-ia64.c:4578 config/tc-ia64.c:4891 config/tc-ia64.c:5197
msgid "Comma expected"
msgstr ""
-#: config/tc-ia64.c:4617
+#: config/tc-ia64.c:4618
msgid "Expected '['"
msgstr ""
-#: config/tc-ia64.c:4626 config/tc-ia64.c:7738
+#: config/tc-ia64.c:4627 config/tc-ia64.c:7731
msgid "Expected ']'"
msgstr ""
-#: config/tc-ia64.c:4631
+#: config/tc-ia64.c:4632
msgid "Number of elements must be positive"
msgstr ""
-#: config/tc-ia64.c:4642
+#: config/tc-ia64.c:4643
#, c-format
msgid "Used more than the declared %d rotating registers"
msgstr ""
-#: config/tc-ia64.c:4650
+#: config/tc-ia64.c:4651
msgid "Used more than the available 96 rotating registers"
msgstr ""
-#: config/tc-ia64.c:4657
+#: config/tc-ia64.c:4658
msgid "Used more than the available 48 rotating registers"
msgstr ""
-#: config/tc-ia64.c:4685
+#: config/tc-ia64.c:4686
#, c-format
msgid "Attempt to redefine register set `%s'"
msgstr ""
-#: config/tc-ia64.c:4750
+#: config/tc-ia64.c:4751
#, c-format
msgid "Unknown psr option `%s'"
msgstr ""
-#: config/tc-ia64.c:4784
-msgid "Missing section name"
-msgstr ""
-
-#: config/tc-ia64.c:4793
+#: config/tc-ia64.c:4786
msgid "Comma expected after section name"
msgstr ""
-#: config/tc-ia64.c:4804
+#: config/tc-ia64.c:4797
msgid "Creating sections with .xdataN/.xrealN/.xstringZ is deprecated."
msgstr ""
-#: config/tc-ia64.c:4893
+#: config/tc-ia64.c:4886
msgid "Register name expected"
msgstr ""
-#: config/tc-ia64.c:4906
+#: config/tc-ia64.c:4899
msgid "Register value annotation ignored"
msgstr ""
-#: config/tc-ia64.c:4945
+#: config/tc-ia64.c:4938
msgid "Directive invalid within a bundle"
msgstr ""
-#: config/tc-ia64.c:5039
+#: config/tc-ia64.c:5032
msgid "Missing predicate relation type"
msgstr ""
-#: config/tc-ia64.c:5045
+#: config/tc-ia64.c:5038
msgid "Unrecognized predicate relation type"
msgstr ""
-#: config/tc-ia64.c:5091
+#: config/tc-ia64.c:5084
msgid "Bad register range"
msgstr ""
-#: config/tc-ia64.c:5100 config/tc-ia64.c:7684
+#: config/tc-ia64.c:5093 config/tc-ia64.c:7677
msgid "Predicate register expected"
msgstr ""
-#: config/tc-ia64.c:5105
+#: config/tc-ia64.c:5098
msgid "Duplicate predicate register ignored"
msgstr ""
-#: config/tc-ia64.c:5121
+#: config/tc-ia64.c:5114
msgid "Predicate source and target required"
msgstr ""
-#: config/tc-ia64.c:5123 config/tc-ia64.c:5135
+#: config/tc-ia64.c:5116 config/tc-ia64.c:5128
msgid "Use of p0 is not valid in this context"
msgstr ""
-#: config/tc-ia64.c:5130
+#: config/tc-ia64.c:5123
msgid "At least two PR arguments expected"
msgstr ""
-#: config/tc-ia64.c:5144
+#: config/tc-ia64.c:5137
msgid "At least one PR argument expected"
msgstr ""
-#: config/tc-ia64.c:5176
+#: config/tc-ia64.c:5169
#, c-format
msgid "duplicate entry hint %s"
msgstr ""
#. FIXME -- need 62-bit relocation type
-#: config/tc-ia64.c:5652
+#: config/tc-ia64.c:5645
msgid "62-bit relocation not yet implemented"
msgstr ""
#. XXX technically, this is wrong: we should not be issuing warning
#. messages until we're sure this instruction pattern is going to
#. be used!
-#: config/tc-ia64.c:5738
+#: config/tc-ia64.c:5731
msgid "lower 16 bits of mask ignored"
msgstr ""
-#: config/tc-ia64.c:5967
+#: config/tc-ia64.c:5960
msgid "stride must be a multiple of 64; lower 6 bits ignored"
msgstr ""
-#: config/tc-ia64.c:6085
+#: config/tc-ia64.c:6078
msgid "Expected separator `='"
msgstr ""
-#: config/tc-ia64.c:6121
+#: config/tc-ia64.c:6114
msgid "Duplicate equal sign (=) in instruction"
msgstr ""
-#: config/tc-ia64.c:6128
+#: config/tc-ia64.c:6121
#, c-format
msgid "Illegal operand separator `%c'"
msgstr ""
-#: config/tc-ia64.c:6243
+#: config/tc-ia64.c:6236
#, c-format
msgid "Operand %u of `%s' should be %s"
msgstr ""
-#: config/tc-ia64.c:6247
+#: config/tc-ia64.c:6240
msgid "Wrong number of output operands"
msgstr ""
-#: config/tc-ia64.c:6249
+#: config/tc-ia64.c:6242
msgid "Wrong number of input operands"
msgstr ""
-#: config/tc-ia64.c:6251
+#: config/tc-ia64.c:6244
msgid "Operand mismatch"
msgstr ""
-#: config/tc-ia64.c:6333
+#: config/tc-ia64.c:6326
#, c-format
msgid "Invalid use of `%c%d' as output operand"
msgstr ""
-#: config/tc-ia64.c:6336
+#: config/tc-ia64.c:6329
#, c-format
msgid "Invalid use of `r%d' as base update address operand"
msgstr ""
-#: config/tc-ia64.c:6360
+#: config/tc-ia64.c:6353
#, c-format
msgid "Invalid duplicate use of `%c%d'"
msgstr ""
-#: config/tc-ia64.c:6367
+#: config/tc-ia64.c:6360
#, c-format
msgid "Invalid simultaneous use of `f%d' and `f%d'"
msgstr ""
-#: config/tc-ia64.c:6373
+#: config/tc-ia64.c:6366
#, c-format
msgid "Dangerous simultaneous use of `f%d' and `f%d'"
msgstr ""
-#: config/tc-ia64.c:6417
+#: config/tc-ia64.c:6410
msgid "Value truncated to 62 bits"
msgstr ""
-#: config/tc-ia64.c:6485
+#: config/tc-ia64.c:6478
#, c-format
msgid "Bad operand value: %s"
msgstr ""
#. Give an error if a frag containing code is not aligned to a 16 byte
#. boundary.
-#: config/tc-ia64.c:6560 config/tc-ia64.h:177
+#: config/tc-ia64.c:6553 config/tc-ia64.h:177
msgid "instruction address is not a multiple of 16"
msgstr ""
-#: config/tc-ia64.c:6628
+#: config/tc-ia64.c:6621
#, c-format
msgid "`%s' must be last in bundle"
msgstr ""
-#: config/tc-ia64.c:6660
+#: config/tc-ia64.c:6653
#, c-format
msgid "Internal error: don't know how to force %s to end of instruction group"
msgstr ""
-#: config/tc-ia64.c:6673
+#: config/tc-ia64.c:6666
#, c-format
msgid "`%s' must be last in instruction group"
msgstr ""
-#: config/tc-ia64.c:6703
+#: config/tc-ia64.c:6696
msgid "Label must be first in a bundle"
msgstr ""
-#: config/tc-ia64.c:6780
+#: config/tc-ia64.c:6773
msgid "hint in B unit may be treated as nop"
msgstr ""
-#: config/tc-ia64.c:6791
+#: config/tc-ia64.c:6784
msgid "hint in B unit can't be used"
msgstr ""
-#: config/tc-ia64.c:6805
+#: config/tc-ia64.c:6798
msgid "emit_one_bundle: unexpected dynamic op"
msgstr ""
-#: config/tc-ia64.c:6945
+#: config/tc-ia64.c:6938
#, c-format
msgid "`%s' does not fit into %s template"
msgstr ""
-#: config/tc-ia64.c:6960
+#: config/tc-ia64.c:6953
#, c-format
msgid "`%s' does not fit into bundle"
msgstr ""
-#: config/tc-ia64.c:6972
+#: config/tc-ia64.c:6965
#, c-format
msgid "`%s' can't go in %s of %s template"
msgstr ""
-#: config/tc-ia64.c:6978
+#: config/tc-ia64.c:6971
msgid "Missing '}' at end of file"
msgstr ""
-#: config/tc-ia64.c:7125
+#: config/tc-ia64.c:7118
#, c-format
msgid "Unrecognized option '-x%s'"
msgstr ""
-#: config/tc-ia64.c:7152
+#: config/tc-ia64.c:7145
msgid ""
"IA-64 options:\n"
" --mconstant-gp\t mark output file as using the constant-GP model\n"
@@ -9728,7 +9889,7 @@ msgid ""
msgstr ""
#. Note for translators: "automagically" can be translated as "automatically" here.
-#: config/tc-ia64.c:7169
+#: config/tc-ia64.c:7162
msgid ""
" -xauto\t\t automagically remove dependency violations (default)\n"
" -xnone\t\t turn off dependency violation checking\n"
@@ -9739,210 +9900,210 @@ msgid ""
"\t\t\t dependency violation checking\n"
msgstr ""
-#: config/tc-ia64.c:7184
+#: config/tc-ia64.c:7177
msgid "--gstabs is not supported for ia64"
msgstr ""
-#: config/tc-ia64.c:7619
+#: config/tc-ia64.c:7612
msgid "Explicit stops are ignored in auto mode"
msgstr ""
-#: config/tc-ia64.c:7628
+#: config/tc-ia64.c:7621
msgid "Found '{' when manual bundling is already turned on"
msgstr ""
-#: config/tc-ia64.c:7641
+#: config/tc-ia64.c:7634
msgid "Found '{' after explicit switch to automatic mode"
msgstr ""
-#: config/tc-ia64.c:7647
+#: config/tc-ia64.c:7640
msgid "Found '}' when manual bundling is off"
msgstr ""
-#: config/tc-ia64.c:7674
+#: config/tc-ia64.c:7667
msgid "Expected ')'"
msgstr ""
-#: config/tc-ia64.c:7679
+#: config/tc-ia64.c:7672
msgid "Qualifying predicate expected"
msgstr ""
-#: config/tc-ia64.c:7698
+#: config/tc-ia64.c:7691
msgid "Tag must come before qualifying predicate."
msgstr ""
-#: config/tc-ia64.c:7727
+#: config/tc-ia64.c:7720
msgid "Expected ':'"
msgstr ""
-#: config/tc-ia64.c:7743
+#: config/tc-ia64.c:7736
msgid "Tag name expected"
msgstr ""
-#: config/tc-ia64.c:7844
+#: config/tc-ia64.c:7838
msgid "Rotating register index must be a non-negative constant"
msgstr ""
-#: config/tc-ia64.c:7849
+#: config/tc-ia64.c:7843
#, c-format
msgid "Index out of range 0..%u"
msgstr ""
-#: config/tc-ia64.c:7861
+#: config/tc-ia64.c:7855
msgid "Indirect register index must be a general register"
msgstr ""
-#: config/tc-ia64.c:7870
+#: config/tc-ia64.c:7864
msgid "Index can only be applied to rotating or indirect registers"
msgstr ""
-#: config/tc-ia64.c:7906 config/tc-xstormy16.c:145
+#: config/tc-ia64.c:7900 config/tc-xstormy16.c:145
msgid "Expected '('"
msgstr ""
-#: config/tc-ia64.c:7914 config/tc-pdp11.c:466 config/tc-pdp11.c:530
+#: config/tc-ia64.c:7908 config/tc-pdp11.c:466 config/tc-pdp11.c:530
#: config/tc-pdp11.c:564 config/tc-tilegx.c:1044 config/tc-tilepro.c:932
#: config/tc-xstormy16.c:154
msgid "Missing ')'"
msgstr ""
-#: config/tc-ia64.c:7932 config/tc-xstormy16.c:161
+#: config/tc-ia64.c:7926 config/tc-xstormy16.c:161
msgid "Not a symbolic expression"
msgstr ""
-#: config/tc-ia64.c:7937 config/tc-ia64.c:7951
+#: config/tc-ia64.c:7931 config/tc-ia64.c:7945
msgid "Illegal combination of relocation functions"
msgstr ""
-#: config/tc-ia64.c:8040
+#: config/tc-ia64.c:8034
msgid "No current frame"
msgstr ""
-#: config/tc-ia64.c:8042
+#: config/tc-ia64.c:8036
#, c-format
msgid "Register number out of range 0..%u"
msgstr ""
-#: config/tc-ia64.c:8081
+#: config/tc-ia64.c:8075
msgid "Standalone `#' is illegal"
msgstr ""
-#: config/tc-ia64.c:8084
+#: config/tc-ia64.c:8078
msgid "Redundant `#' suffix operators"
msgstr ""
-#: config/tc-ia64.c:8242
+#: config/tc-ia64.c:8236
#, c-format
msgid "Unhandled dependency %s for %s (%s), note %d"
msgstr ""
-#: config/tc-ia64.c:9555
+#: config/tc-ia64.c:9549
#, c-format
msgid "Unrecognized dependency specifier %d\n"
msgstr ""
-#: config/tc-ia64.c:10425
+#: config/tc-ia64.c:10419
msgid "Only the first path encountering the conflict is reported"
msgstr ""
-#: config/tc-ia64.c:10427
+#: config/tc-ia64.c:10421
msgid "This is the location of the conflicting usage"
msgstr ""
-#: config/tc-ia64.c:10689
+#: config/tc-ia64.c:10683
#, c-format
msgid "Unknown opcode `%s'"
msgstr ""
-#: config/tc-ia64.c:10767
+#: config/tc-ia64.c:10761
#, c-format
msgid "AR %d can only be accessed by %c-unit"
msgstr ""
-#: config/tc-ia64.c:10779
+#: config/tc-ia64.c:10773
msgid "hint.b may be treated as nop"
msgstr ""
-#: config/tc-ia64.c:10782
+#: config/tc-ia64.c:10776
msgid "hint.b shouldn't be used"
msgstr ""
-#: config/tc-ia64.c:10821
+#: config/tc-ia64.c:10815
#, c-format
msgid "`%s' cannot be predicated"
msgstr ""
-#: config/tc-ia64.c:10893
+#: config/tc-ia64.c:10888
msgid "Closing bracket missing"
msgstr ""
-#: config/tc-ia64.c:10902
+#: config/tc-ia64.c:10897
msgid "Index must be a general register"
msgstr ""
-#: config/tc-ia64.c:11067
+#: config/tc-ia64.c:11062
#, c-format
msgid "Unsupported fixup size %d"
msgstr ""
#. This should be an error, but since previously there wasn't any
#. diagnostic here, don't make it fail because of this for now.
-#: config/tc-ia64.c:11339
+#: config/tc-ia64.c:11334
#, c-format
msgid "Cannot express %s%d%s relocation"
msgstr ""
-#: config/tc-ia64.c:11358
+#: config/tc-ia64.c:11353
msgid "No addend allowed in @fptr() relocation"
msgstr ""
-#: config/tc-ia64.c:11397
+#: config/tc-ia64.c:11392
msgid "integer operand out of range"
msgstr ""
-#: config/tc-ia64.c:11464
+#: config/tc-ia64.c:11459
#, c-format
msgid "%s must have a constant value"
msgstr ""
-#: config/tc-ia64.c:11484
+#: config/tc-ia64.c:11479
msgid "cannot resolve @slotcount parameter"
msgstr ""
-#: config/tc-ia64.c:11517
+#: config/tc-ia64.c:11512
msgid "invalid @slotcount value"
msgstr ""
-#: config/tc-ia64.c:11554 config/tc-z8k.c:1388
+#: config/tc-ia64.c:11549 config/tc-z8k.c:1388
#, c-format
msgid "Cannot represent %s relocation in object file"
msgstr ""
-#: config/tc-ia64.c:11663
+#: config/tc-ia64.c:11658
msgid "Can't add stop bit to mark end of instruction group"
msgstr ""
-#: config/tc-ia64.c:11771 read.c:2665 read.c:3304 read.c:3871 stabs.c:468
+#: config/tc-ia64.c:11766 read.c:2665 read.c:3304 read.c:3871 stabs.c:468
#, c-format
msgid "expected comma after \"%s\""
msgstr ""
-#: config/tc-ia64.c:11814
+#: config/tc-ia64.c:11809
#, c-format
msgid "`%s' is already the alias of %s `%s'"
msgstr ""
-#: config/tc-ia64.c:11826
+#: config/tc-ia64.c:11821
#, c-format
msgid "%s `%s' already has an alias `%s'"
msgstr ""
-#: config/tc-ia64.c:11860
+#: config/tc-ia64.c:11855
#, c-format
msgid "symbol `%s' aliased to `%s' is not used"
msgstr ""
-#: config/tc-ia64.c:11886
+#: config/tc-ia64.c:11881
#, c-format
msgid "section `%s' aliased to `%s' is not used"
msgstr ""
@@ -9990,7 +10151,7 @@ msgstr ""
msgid "Unmatched high relocation"
msgstr ""
-#: config/tc-iq2000.c:831 config/tc-mips.c:19783 config/tc-score.c:5804
+#: config/tc-iq2000.c:831 config/tc-mips.c:19776 config/tc-score.c:5804
msgid ".end not in text section"
msgstr ""
@@ -10002,7 +10163,7 @@ msgstr ""
msgid ".end symbol does not match .ent symbol."
msgstr ""
-#: config/tc-iq2000.c:847 config/tc-mips.c:19803 config/tc-score.c:5820
+#: config/tc-iq2000.c:847 config/tc-mips.c:19796 config/tc-score.c:5820
msgid ".end directive missing or unknown symbol"
msgstr ""
@@ -10010,7 +10171,7 @@ msgstr ""
msgid "Expected simple number."
msgstr ""
-#: config/tc-iq2000.c:894 config/tc-mips.c:19708 config/tc-score.c:5670
+#: config/tc-iq2000.c:894 config/tc-mips.c:19701 config/tc-score.c:5670
#, c-format
msgid " *input_line_pointer == '%c' 0x%02x\n"
msgstr ""
@@ -10027,6 +10188,119 @@ msgstr ""
msgid "missing `.end'"
msgstr ""
+#: config/tc-loongarch.c:345
+#, c-format
+msgid "insn name: %s\tformat: %s\tsyntax error"
+msgstr ""
+
+#: config/tc-loongarch.c:348
+#, c-format
+msgid ""
+"insn name: %s\n"
+"format: %s\n"
+"we want macro but macro is NULL"
+msgstr ""
+
+#: config/tc-loongarch.c:353
+#, c-format
+msgid ""
+"insn name: %s\n"
+"format: %s\n"
+"macro: %s\tsyntax error"
+msgstr ""
+
+#: config/tc-loongarch.c:402
+#, c-format
+msgid "Unsupported use of %s"
+msgstr ""
+
+#: config/tc-loongarch.c:475
+msgid "internal error: we have no internal label yet"
+msgstr ""
+
+#: config/tc-loongarch.c:585
+msgid "This label shouldn't be with addend."
+msgstr ""
+
+#: config/tc-loongarch.c:625
+msgid "expr too huge"
+msgstr ""
+
+#: config/tc-loongarch.c:652
+#, c-format
+msgid ""
+"not support reloc bit-field\n"
+"fmt: %c%c %s\n"
+"args: %s"
+msgstr ""
+
+#: config/tc-loongarch.c:700
+msgid "unknown escape"
+msgstr ""
+
+#: config/tc-loongarch.c:727
+#, c-format
+msgid "require imm low %d bit is 0."
+msgstr ""
+
+#. How to do after we detect overflow.
+#: config/tc-loongarch.c:739
+#, c-format
+msgid ""
+"Immediate overflow.\n"
+"format: %c%c%s\n"
+"arg: %s"
+msgstr ""
+
+#: config/tc-loongarch.c:819
+msgid "AMO insns require rd != base && rd != rt when rd isn't $r0"
+msgstr ""
+
+#: config/tc-loongarch.c:831
+msgid "bstr(ins|pick).[wd] require msbd >= lsbd"
+msgstr ""
+
+#: config/tc-loongarch.c:836
+msgid "csrxchg require rj != $r0 && rj != $r1"
+msgstr ""
+
+#: config/tc-loongarch.c:883
+#, c-format
+msgid "no HOWTO loong relocation number %d"
+msgstr ""
+
+#: config/tc-loongarch.c:891
+msgid "Internal error: not support relax now"
+msgstr ""
+
+#: config/tc-loongarch.c:920
+#, c-format
+msgid "li overflow: hi32:0x%x lo32:0x%x"
+msgstr ""
+
+#: config/tc-loongarch.c:925
+msgid "we can't li.d on 32bit-arch"
+msgstr ""
+
+#: config/tc-loongarch.c:1020
+#, c-format
+msgid "no match insn: %s\t%s"
+msgstr ""
+
+#: config/tc-loongarch.c:1090 config/tc-loongarch.c:1096
+msgid "Relocation against a constant"
+msgstr ""
+
+#: config/tc-loongarch.c:1301 config/tc-riscv.c:4029
+#, c-format
+msgid "cannot represent %s relocation in object file"
+msgstr ""
+
+#: config/tc-loongarch.c:1339
+#, c-format
+msgid "LARCH options:\n"
+msgstr ""
+
#: config/tc-m32c.c:141
#, c-format
msgid " M32C specific command line options:\n"
@@ -10257,8 +10531,8 @@ msgstr ""
msgid ".SCOMMon length (%ld.) <0! Ignored."
msgstr ""
-#: config/tc-m32r.c:1514 config/tc-microblaze.c:218 config/tc-ppc.c:2363
-#: config/tc-ppc.c:4334 config/tc-ppc.c:4376
+#: config/tc-m32r.c:1514 config/tc-microblaze.c:218 config/tc-ppc.c:2379
+#: config/tc-ppc.c:4417 config/tc-ppc.c:4472
msgid "ignoring bad alignment"
msgstr ""
@@ -11104,7 +11378,7 @@ msgid_plural "%s relocations do not fit in %u bytes"
msgstr[0] ""
msgstr[1] ""
-#: config/tc-m68k.c:7965 config/tc-ppc.c:2536
+#: config/tc-m68k.c:7965 config/tc-ppc.c:2552
msgid "unknown .gnu_attribute value"
msgstr ""
@@ -11241,12 +11515,12 @@ msgstr ""
msgid "ignoring operands: %s "
msgstr ""
-#: config/tc-mcore.c:1670
+#: config/tc-mcore.c:1673
#, c-format
msgid "unrecognised cpu type '%s'"
msgstr ""
-#: config/tc-mcore.c:1688
+#: config/tc-mcore.c:1691
#, c-format
msgid ""
"MCORE specific options:\n"
@@ -11257,47 +11531,47 @@ msgid ""
" -EL assemble for a little endian system\n"
msgstr ""
-#: config/tc-mcore.c:1706 config/tc-microblaze.c:1871
+#: config/tc-mcore.c:1709 config/tc-microblaze.c:1871
msgid "failed sanity check: short_jump"
msgstr ""
-#: config/tc-mcore.c:1716 config/tc-microblaze.c:1881
+#: config/tc-mcore.c:1719 config/tc-microblaze.c:1881
msgid "failed sanity check: long_jump"
msgstr ""
-#: config/tc-mcore.c:1742
+#: config/tc-mcore.c:1745
#, c-format
msgid "odd displacement at %x"
msgstr ""
-#: config/tc-mcore.c:1951
+#: config/tc-mcore.c:1954
#, c-format
msgid "odd distance branch (0x%lx byte)"
msgid_plural "odd distance branch (0x%lx bytes)"
msgstr[0] ""
msgstr[1] ""
-#: config/tc-mcore.c:1958
+#: config/tc-mcore.c:1961
#, c-format
msgid "pcrel for branch to %s too far (0x%lx)"
msgstr ""
-#: config/tc-mcore.c:1978
+#: config/tc-mcore.c:1981
#, c-format
msgid "pcrel for lrw/jmpi/jsri to %s too far (0x%lx)"
msgstr ""
-#: config/tc-mcore.c:1990
+#: config/tc-mcore.c:1993
#, c-format
msgid "pcrel for loopt too far (0x%lx)"
msgstr ""
-#: config/tc-mcore.c:2186 config/tc-microblaze.c:2471 config/tc-tic30.c:1364
+#: config/tc-mcore.c:2189 config/tc-microblaze.c:2471 config/tc-tic30.c:1364
#, c-format
msgid "Can not do %d byte %srelocation"
msgstr ""
-#: config/tc-mcore.c:2188 config/tc-microblaze.c:2473 config/tc-tic30.c:1365
+#: config/tc-mcore.c:2191 config/tc-microblaze.c:2473 config/tc-tic30.c:1365
msgid "pc-relative "
msgstr ""
@@ -11952,7 +12226,7 @@ msgstr ""
msgid "the `%s' extension requires 64-bit FPRs"
msgstr ""
-#: config/tc-mips.c:3048 config/tc-mips.c:16640
+#: config/tc-mips.c:3048 config/tc-mips.c:16633
#, c-format
msgid "unrecognized register name `%s'"
msgstr ""
@@ -12094,7 +12368,7 @@ msgstr ""
msgid "trap exception not supported at ISA 1"
msgstr ""
-#: config/tc-mips.c:4167 config/tc-mips.c:17523
+#: config/tc-mips.c:4167 config/tc-mips.c:17516
#, c-format
msgid "`%s' does not support legacy NaN"
msgstr ""
@@ -12202,7 +12476,7 @@ msgstr ""
#: config/tc-mips.c:7553 config/tc-mips.c:7573 config/tc-mips.c:7590
#: config/tc-mips.c:9140 config/tc-mips.c:15792 config/tc-mips.c:15799
-#: config/tc-mips.c:16192 config/tc-mips.c:19038
+#: config/tc-mips.c:16192 config/tc-mips.c:19031
#, c-format
msgid "branch to misaligned address (0x%lx)"
msgstr ""
@@ -12229,7 +12503,7 @@ msgstr ""
msgid "the source register must not be $31"
msgstr ""
-#: config/tc-mips.c:8559 config/tc-mips.c:14532 config/tc-mips.c:19185
+#: config/tc-mips.c:8559 config/tc-mips.c:14532 config/tc-mips.c:19178
msgid "invalid unextended operand value"
msgstr ""
@@ -12255,12 +12529,12 @@ msgstr ""
msgid "unrecognized extended version of MIPS16 opcode"
msgstr ""
-#: config/tc-mips.c:8868 config/tc-mips.c:19056
+#: config/tc-mips.c:8868 config/tc-mips.c:19049
msgid ""
"macro instruction expanded into multiple instructions in a branch delay slot"
msgstr ""
-#: config/tc-mips.c:8871 config/tc-mips.c:19064
+#: config/tc-mips.c:8871 config/tc-mips.c:19057
msgid "macro instruction expanded into multiple instructions"
msgstr ""
@@ -12322,7 +12596,7 @@ msgstr ""
msgid "la used to load 64-bit address; recommend using dla instead"
msgstr ""
-#: config/tc-mips.c:11105 config/tc-riscv.c:1601
+#: config/tc-mips.c:11105 config/tc-riscv.c:1768
msgid "offset too large"
msgstr ""
@@ -12432,7 +12706,7 @@ msgstr ""
msgid "-march=%s is not compatible with the selected ABI"
msgstr ""
-#: config/tc-mips.c:15796 config/tc-mips.c:16186 config/tc-mips.c:19035
+#: config/tc-mips.c:15796 config/tc-mips.c:16186 config/tc-mips.c:19028
msgid "branch to a symbol in another ISA mode"
msgstr ""
@@ -12445,7 +12719,7 @@ msgstr ""
msgid "PC-relative reference to a different section"
msgstr ""
-#: config/tc-mips.c:15912 config/tc-riscv.c:3023
+#: config/tc-mips.c:15912 config/tc-riscv.c:3498
msgid "TLS relocation against a constant"
msgstr ""
@@ -12489,161 +12763,161 @@ msgstr ""
msgid "alignment negative, 0 assumed"
msgstr ""
-#: config/tc-mips.c:16520
+#: config/tc-mips.c:16513
#, c-format
msgid "%s: no such section"
msgstr ""
-#: config/tc-mips.c:16576
+#: config/tc-mips.c:16569
#, c-format
msgid ".option pic%d not supported"
msgstr ""
-#: config/tc-mips.c:16578
+#: config/tc-mips.c:16571
#, c-format
msgid ".option pic%d not supported in VxWorks PIC mode"
msgstr ""
-#: config/tc-mips.c:16590 config/tc-mips.c:16930
+#: config/tc-mips.c:16583 config/tc-mips.c:16923
msgid "-G may not be used with SVR4 PIC code"
msgstr ""
-#: config/tc-mips.c:16596
+#: config/tc-mips.c:16589
#, c-format
msgid "unrecognized option \"%s\""
msgstr ""
-#: config/tc-mips.c:16702
+#: config/tc-mips.c:16695
#, c-format
msgid "unknown architecture %s"
msgstr ""
-#: config/tc-mips.c:16717 config/tc-mips.c:16881
+#: config/tc-mips.c:16710 config/tc-mips.c:16874
#, c-format
msgid "unknown ISA level %s"
msgstr ""
-#: config/tc-mips.c:16727
+#: config/tc-mips.c:16720
#, c-format
msgid "unknown ISA or architecture %s"
msgstr ""
-#: config/tc-mips.c:16786
+#: config/tc-mips.c:16779
msgid "`noreorder' must be set before `nomacro'"
msgstr ""
-#: config/tc-mips.c:16816
+#: config/tc-mips.c:16809
msgid ".set pop with no .set push"
msgstr ""
-#: config/tc-mips.c:16835
+#: config/tc-mips.c:16828
#, c-format
msgid "tried to set unrecognized symbol: %s\n"
msgstr ""
-#: config/tc-mips.c:16908
+#: config/tc-mips.c:16901
#, c-format
msgid ".module used with unrecognized symbol: %s\n"
msgstr ""
-#: config/tc-mips.c:16914
+#: config/tc-mips.c:16907
msgid ".module is not permitted after generating code"
msgstr ""
-#: config/tc-mips.c:16974 config/tc-mips.c:17053 config/tc-mips.c:17157
-#: config/tc-mips.c:17187 config/tc-mips.c:17236
+#: config/tc-mips.c:16967 config/tc-mips.c:17046 config/tc-mips.c:17150
+#: config/tc-mips.c:17180 config/tc-mips.c:17229
#, c-format
msgid "%s not supported in MIPS16 mode"
msgstr ""
-#: config/tc-mips.c:16981
+#: config/tc-mips.c:16974
msgid ".cpload not in noreorder section"
msgstr ""
-#: config/tc-mips.c:17062 config/tc-mips.c:17081
+#: config/tc-mips.c:17055 config/tc-mips.c:17074
msgid "missing argument separator ',' for .cpsetup"
msgstr ""
-#: config/tc-mips.c:17279 config/tc-riscv.c:3343
+#: config/tc-mips.c:17272 config/tc-riscv.c:3833
#, c-format
msgid "unsupported use of %s"
msgstr ""
-#: config/tc-mips.c:17370
+#: config/tc-mips.c:17363
msgid "unsupported use of .gpword"
msgstr ""
-#: config/tc-mips.c:17408
+#: config/tc-mips.c:17401
msgid "unsupported use of .gpdword"
msgstr ""
-#: config/tc-mips.c:17440
+#: config/tc-mips.c:17433
msgid "unsupported use of .ehword"
msgstr ""
-#: config/tc-mips.c:17527
+#: config/tc-mips.c:17520
msgid "bad .nan directive"
msgstr ""
-#: config/tc-mips.c:17576
+#: config/tc-mips.c:17569
#, c-format
msgid "ignoring attempt to redefine symbol %s"
msgstr ""
-#: config/tc-mips.c:17591 ecoff.c:3359
+#: config/tc-mips.c:17584 ecoff.c:3359
msgid "bad .weakext directive"
msgstr ""
-#: config/tc-mips.c:18560 config/tc-mips.c:18837
+#: config/tc-mips.c:18553 config/tc-mips.c:18830
msgid "relaxed out-of-range branch into a jump"
msgstr ""
-#: config/tc-mips.c:19060
+#: config/tc-mips.c:19053
msgid "extended instruction in a branch delay slot"
msgstr ""
-#: config/tc-mips.c:19174 config/tc-xtensa.c:1704 config/tc-xtensa.c:1982
+#: config/tc-mips.c:19167 config/tc-xtensa.c:1704 config/tc-xtensa.c:1982
msgid "unsupported relocation"
msgstr ""
-#: config/tc-mips.c:19682 config/tc-score.c:5644
+#: config/tc-mips.c:19675 config/tc-score.c:5644
msgid "expected simple number"
msgstr ""
-#: config/tc-mips.c:19710 config/tc-score.c:5671
+#: config/tc-mips.c:19703 config/tc-score.c:5671
msgid "invalid number"
msgstr ""
-#: config/tc-mips.c:19787 ecoff.c:2988
+#: config/tc-mips.c:19780 ecoff.c:2988
msgid ".end directive without a preceding .ent directive"
msgstr ""
-#: config/tc-mips.c:19796
+#: config/tc-mips.c:19789
msgid ".end symbol does not match .ent symbol"
msgstr ""
-#: config/tc-mips.c:19873
+#: config/tc-mips.c:19866
msgid ".ent or .aent not in text section"
msgstr ""
-#: config/tc-mips.c:19876 config/tc-score.c:5703
+#: config/tc-mips.c:19869 config/tc-score.c:5703
msgid "missing .end"
msgstr ""
-#: config/tc-mips.c:19959
+#: config/tc-mips.c:19952
msgid ".mask/.fmask outside of .ent"
msgstr ""
-#: config/tc-mips.c:19966
+#: config/tc-mips.c:19959
msgid "bad .mask/.fmask directive"
msgstr ""
-#: config/tc-mips.c:20269
+#: config/tc-mips.c:20262
#, c-format
msgid "bad value (%s) for %s"
msgstr ""
-#: config/tc-mips.c:20333
+#: config/tc-mips.c:20326
#, c-format
msgid ""
"MIPS options:\n"
@@ -12654,7 +12928,7 @@ msgid ""
"\t\t\timplicitly with the gp register [default 8]\n"
msgstr ""
-#: config/tc-mips.c:20340
+#: config/tc-mips.c:20333
#, c-format
msgid ""
"-mips1\t\t\tgenerate MIPS ISA I instructions\n"
@@ -12675,7 +12949,7 @@ msgid ""
"-march=CPU/-mtune=CPU\tgenerate code/schedule for CPU, where CPU is one of:\n"
msgstr ""
-#: config/tc-mips.c:20365
+#: config/tc-mips.c:20358
#, c-format
msgid ""
"-mCPU\t\t\tequivalent to -march=CPU -mtune=CPU. Deprecated.\n"
@@ -12683,105 +12957,105 @@ msgid ""
"\t\t\tFor -mCPU and -no-mCPU, CPU must be one of:\n"
msgstr ""
-#: config/tc-mips.c:20378
+#: config/tc-mips.c:20371
#, c-format
msgid ""
"-mips16\t\t\tgenerate mips16 instructions\n"
"-no-mips16\t\tdo not generate mips16 instructions\n"
msgstr ""
-#: config/tc-mips.c:20381
+#: config/tc-mips.c:20374
#, c-format
msgid ""
"-mmips16e2\t\tgenerate MIPS16e2 instructions\n"
"-mno-mips16e2\t\tdo not generate MIPS16e2 instructions\n"
msgstr ""
-#: config/tc-mips.c:20384
+#: config/tc-mips.c:20377
#, c-format
msgid ""
"-mmicromips\t\tgenerate microMIPS instructions\n"
"-mno-micromips\t\tdo not generate microMIPS instructions\n"
msgstr ""
-#: config/tc-mips.c:20387
+#: config/tc-mips.c:20380
#, c-format
msgid ""
"-msmartmips\t\tgenerate smartmips instructions\n"
"-mno-smartmips\t\tdo not generate smartmips instructions\n"
msgstr ""
-#: config/tc-mips.c:20390
+#: config/tc-mips.c:20383
#, c-format
msgid ""
"-mdsp\t\t\tgenerate DSP instructions\n"
"-mno-dsp\t\tdo not generate DSP instructions\n"
msgstr ""
-#: config/tc-mips.c:20393
+#: config/tc-mips.c:20386
#, c-format
msgid ""
"-mdspr2\t\t\tgenerate DSP R2 instructions\n"
"-mno-dspr2\t\tdo not generate DSP R2 instructions\n"
msgstr ""
-#: config/tc-mips.c:20396
+#: config/tc-mips.c:20389
#, c-format
msgid ""
"-mdspr3\t\t\tgenerate DSP R3 instructions\n"
"-mno-dspr3\t\tdo not generate DSP R3 instructions\n"
msgstr ""
-#: config/tc-mips.c:20399
+#: config/tc-mips.c:20392
#, c-format
msgid ""
"-mmt\t\t\tgenerate MT instructions\n"
"-mno-mt\t\t\tdo not generate MT instructions\n"
msgstr ""
-#: config/tc-mips.c:20402
+#: config/tc-mips.c:20395
#, c-format
msgid ""
"-mmcu\t\t\tgenerate MCU instructions\n"
"-mno-mcu\t\tdo not generate MCU instructions\n"
msgstr ""
-#: config/tc-mips.c:20405
+#: config/tc-mips.c:20398
#, c-format
msgid ""
"-mmsa\t\t\tgenerate MSA instructions\n"
"-mno-msa\t\tdo not generate MSA instructions\n"
msgstr ""
-#: config/tc-mips.c:20408
+#: config/tc-mips.c:20401
#, c-format
msgid ""
"-mxpa\t\t\tgenerate eXtended Physical Address (XPA) instructions\n"
"-mno-xpa\t\tdo not generate eXtended Physical Address (XPA) instructions\n"
msgstr ""
-#: config/tc-mips.c:20411
+#: config/tc-mips.c:20404
#, c-format
msgid ""
"-mvirt\t\t\tgenerate Virtualization instructions\n"
"-mno-virt\t\tdo not generate Virtualization instructions\n"
msgstr ""
-#: config/tc-mips.c:20414
+#: config/tc-mips.c:20407
#, c-format
msgid ""
"-mcrc\t\t\tgenerate CRC instructions\n"
"-mno-crc\t\tdo not generate CRC instructions\n"
msgstr ""
-#: config/tc-mips.c:20417
+#: config/tc-mips.c:20410
#, c-format
msgid ""
"-mginv\t\t\tgenerate Global INValidate (GINV) instructions\n"
"-mno-ginv\t\tdo not generate Global INValidate instructions\n"
msgstr ""
-#: config/tc-mips.c:20420
+#: config/tc-mips.c:20413
#, c-format
msgid ""
"-mloongson-mmi\t\tgenerate Loongson MultiMedia extensions Instructions (MMI) "
@@ -12790,7 +13064,7 @@ msgid ""
"Instructions\n"
msgstr ""
-#: config/tc-mips.c:20423
+#: config/tc-mips.c:20416
#, c-format
msgid ""
"-mloongson-cam\t\tgenerate Loongson Content Address Memory (CAM) "
@@ -12799,35 +13073,35 @@ msgid ""
"Instructions\n"
msgstr ""
-#: config/tc-mips.c:20426
+#: config/tc-mips.c:20419
#, c-format
msgid ""
"-mloongson-ext\t\tgenerate Loongson EXTensions (EXT) instructions\n"
"-mno-loongson-ext\tdo not generate Loongson EXTensions Instructions\n"
msgstr ""
-#: config/tc-mips.c:20429
+#: config/tc-mips.c:20422
#, c-format
msgid ""
"-mloongson-ext2\t\tgenerate Loongson EXTensions R2 (EXT2) instructions\n"
"-mno-loongson-ext2\tdo not generate Loongson EXTensions R2 Instructions\n"
msgstr ""
-#: config/tc-mips.c:20432
+#: config/tc-mips.c:20425
#, c-format
msgid ""
"-minsn32\t\tonly generate 32-bit microMIPS instructions\n"
"-mno-insn32\t\tgenerate all microMIPS instructions\n"
msgstr ""
-#: config/tc-mips.c:20436
+#: config/tc-mips.c:20429
#, c-format
msgid ""
"-mfix-loongson3-llsc\twork around Loongson3 LL/SC errata, default\n"
"-mno-fix-loongson3-llsc\tdisable work around Loongson3 LL/SC errata\n"
msgstr ""
-#: config/tc-mips.c:20440
+#: config/tc-mips.c:20433
#, c-format
msgid ""
"-mfix-loongson3-llsc\twork around Loongson3 LL/SC errata\n"
@@ -12835,7 +13109,7 @@ msgid ""
"default\n"
msgstr ""
-#: config/tc-mips.c:20444
+#: config/tc-mips.c:20437
#, c-format
msgid ""
"-mfix-loongson2f-jump\twork around Loongson2F JUMP instructions\n"
@@ -12857,7 +13131,7 @@ msgid ""
"--break, --no-trap\tbreak exception on div by 0 and mult overflow\n"
msgstr ""
-#: config/tc-mips.c:20462
+#: config/tc-mips.c:20455
#, c-format
msgid ""
"-mhard-float\t\tallow floating-point instructions\n"
@@ -12872,7 +13146,7 @@ msgid ""
"-mnan=ENCODING\t\tselect an IEEE 754 NaN encoding convention, either of:\n"
msgstr ""
-#: config/tc-mips.c:20480
+#: config/tc-mips.c:20473
#, c-format
msgid ""
"-KPIC, -call_shared\tgenerate SVR4 position independent code\n"
@@ -12886,26 +13160,26 @@ msgid ""
"-mabi=ABI\t\tcreate ABI conformant object file for:\n"
msgstr ""
-#: config/tc-mips.c:20501
+#: config/tc-mips.c:20494
#, c-format
msgid "-32\t\t\tcreate o32 ABI object file%s\n"
msgstr ""
-#: config/tc-mips.c:20503 config/tc-mips.c:20506 config/tc-mips.c:20509
+#: config/tc-mips.c:20496 config/tc-mips.c:20499 config/tc-mips.c:20502
msgid " (default)"
msgstr ""
-#: config/tc-mips.c:20504
+#: config/tc-mips.c:20497
#, c-format
msgid "-n32\t\t\tcreate n32 ABI object file%s\n"
msgstr ""
-#: config/tc-mips.c:20507
+#: config/tc-mips.c:20500
#, c-format
msgid "-64\t\t\tcreate 64 ABI object file%s\n"
msgstr ""
-#: config/tc-mips.c:20589
+#: config/tc-mips.c:20582
msgid "missing .end at end of assembly"
msgstr ""
@@ -13164,14 +13438,14 @@ msgid ""
msgstr ""
#: config/tc-mn10200.c:889 config/tc-mn10300.c:1253 config/tc-s390.c:1691
-#: config/tc-v850.c:2328
+#: config/tc-v850.c:2325
#, c-format
msgid "Unrecognized opcode: `%s'"
msgstr ""
#. xgettext:c-format.
-#: config/tc-mn10200.c:1132 config/tc-mn10300.c:1821 config/tc-ppc.c:3971
-#: config/tc-s390.c:1604 config/tc-v850.c:3043
+#: config/tc-mn10200.c:1132 config/tc-mn10300.c:1821 config/tc-ppc.c:3988
+#: config/tc-s390.c:1604 config/tc-v850.c:3040
#, c-format
msgid "junk at end of line: `%s'"
msgstr ""
@@ -14140,11 +14414,11 @@ msgid "Addend to unresolved symbol is not on word boundary."
msgstr ""
#. Should never here.
-#: config/tc-nds32.c:7656
+#: config/tc-nds32.c:7617
msgid "Used FPU instructions requires enabling FPU extension"
msgstr ""
-#: config/tc-nds32.c:7852
+#: config/tc-nds32.c:7813
#, c-format
msgid "Internal error: Unknown fixup type %d (`%s')"
msgstr ""
@@ -14629,659 +14903,675 @@ msgstr ""
msgid "pcrel too far"
msgstr ""
-#: config/tc-ppc.c:949 config/tc-ppc.c:957 config/tc-ppc.c:3458
+#: config/tc-ppc.c:961 config/tc-ppc.c:969 config/tc-ppc.c:3475
msgid "invalid register expression"
msgstr ""
-#: config/tc-ppc.c:1119 config/tc-ppc.c:1177 config/tc-ppc.c:1225
+#: config/tc-ppc.c:1131 config/tc-ppc.c:1189 config/tc-ppc.c:1237
msgid "the use of -mvle requires big endian."
msgstr ""
-#: config/tc-ppc.c:1157 config/tc-ppc.c:1179
+#: config/tc-ppc.c:1169 config/tc-ppc.c:1191
msgid "the use of -mvle requires -a32."
msgstr ""
-#: config/tc-ppc.c:1159
+#: config/tc-ppc.c:1171
#, c-format
msgid "%s unsupported"
msgstr ""
-#: config/tc-ppc.c:1252 config/tc-s390.c:435 config/tc-s390.c:442
+#: config/tc-ppc.c:1264 config/tc-s390.c:435 config/tc-s390.c:442
#, c-format
msgid "invalid switch -m%s"
msgstr ""
-#: config/tc-ppc.c:1283
+#: config/tc-ppc.c:1295
msgid "--nops needs a numeric argument"
msgstr ""
-#: config/tc-ppc.c:1319
+#: config/tc-ppc.c:1331
#, c-format
msgid "PowerPC options:\n"
msgstr ""
-#: config/tc-ppc.c:1321
+#: config/tc-ppc.c:1333
#, c-format
msgid "-a32 generate ELF32/XCOFF32\n"
msgstr ""
-#: config/tc-ppc.c:1324
+#: config/tc-ppc.c:1336
#, c-format
msgid "-a64 generate ELF64/XCOFF64\n"
msgstr ""
-#: config/tc-ppc.c:1326
+#: config/tc-ppc.c:1338
#, c-format
msgid "-u ignored\n"
msgstr ""
-#: config/tc-ppc.c:1328
+#: config/tc-ppc.c:1340
#, c-format
msgid "-mpwrx, -mpwr2 generate code for POWER/2 (RIOS2)\n"
msgstr ""
-#: config/tc-ppc.c:1330
+#: config/tc-ppc.c:1342
#, c-format
msgid "-mpwr generate code for POWER (RIOS1)\n"
msgstr ""
-#: config/tc-ppc.c:1332
+#: config/tc-ppc.c:1344
#, c-format
msgid "-m601 generate code for PowerPC 601\n"
msgstr ""
-#: config/tc-ppc.c:1334
+#: config/tc-ppc.c:1346
#, c-format
msgid ""
"-mppc, -mppc32, -m603, -m604\n"
" generate code for PowerPC 603/604\n"
msgstr ""
-#: config/tc-ppc.c:1337
+#: config/tc-ppc.c:1349
#, c-format
msgid "-m403 generate code for PowerPC 403\n"
msgstr ""
-#: config/tc-ppc.c:1339
+#: config/tc-ppc.c:1351
#, c-format
msgid "-m405 generate code for PowerPC 405\n"
msgstr ""
-#: config/tc-ppc.c:1341
+#: config/tc-ppc.c:1353
#, c-format
msgid "-m440 generate code for PowerPC 440\n"
msgstr ""
-#: config/tc-ppc.c:1343
+#: config/tc-ppc.c:1355
#, c-format
msgid "-m464 generate code for PowerPC 464\n"
msgstr ""
-#: config/tc-ppc.c:1345
+#: config/tc-ppc.c:1357
#, c-format
msgid "-m476 generate code for PowerPC 476\n"
msgstr ""
-#: config/tc-ppc.c:1347
+#: config/tc-ppc.c:1359
#, c-format
msgid ""
"-m7400, -m7410, -m7450, -m7455\n"
" generate code for PowerPC 7400/7410/7450/7455\n"
msgstr ""
-#: config/tc-ppc.c:1350
+#: config/tc-ppc.c:1362
#, c-format
msgid ""
"-m750cl, -mgekko, -mbroadway\n"
" generate code for PowerPC 750cl/Gekko/Broadway\n"
msgstr ""
-#: config/tc-ppc.c:1353
+#: config/tc-ppc.c:1365
#, c-format
msgid "-m821, -m850, -m860 generate code for PowerPC 821/850/860\n"
msgstr ""
-#: config/tc-ppc.c:1355
+#: config/tc-ppc.c:1367
#, c-format
msgid "-mppc64, -m620 generate code for PowerPC 620/625/630\n"
msgstr ""
-#: config/tc-ppc.c:1357
+#: config/tc-ppc.c:1369
#, c-format
msgid ""
"-mppc64bridge generate code for PowerPC 64, including bridge "
"insns\n"
msgstr ""
-#: config/tc-ppc.c:1359
+#: config/tc-ppc.c:1371
#, c-format
msgid "-mbooke generate code for 32-bit PowerPC BookE\n"
msgstr ""
-#: config/tc-ppc.c:1361
+#: config/tc-ppc.c:1373
#, c-format
msgid "-ma2 generate code for A2 architecture\n"
msgstr ""
-#: config/tc-ppc.c:1363
+#: config/tc-ppc.c:1375
#, c-format
msgid "-mpower4, -mpwr4 generate code for Power4 architecture\n"
msgstr ""
-#: config/tc-ppc.c:1365
+#: config/tc-ppc.c:1377
#, c-format
msgid ""
"-mpower5, -mpwr5, -mpwr5x\n"
" generate code for Power5 architecture\n"
msgstr ""
-#: config/tc-ppc.c:1368
+#: config/tc-ppc.c:1380
#, c-format
msgid "-mpower6, -mpwr6 generate code for Power6 architecture\n"
msgstr ""
-#: config/tc-ppc.c:1370
+#: config/tc-ppc.c:1382
#, c-format
msgid "-mpower7, -mpwr7 generate code for Power7 architecture\n"
msgstr ""
-#: config/tc-ppc.c:1372
+#: config/tc-ppc.c:1384
#, c-format
msgid "-mpower8, -mpwr8 generate code for Power8 architecture\n"
msgstr ""
-#: config/tc-ppc.c:1374
+#: config/tc-ppc.c:1386
#, c-format
msgid "-mpower9, -mpwr9 generate code for Power9 architecture\n"
msgstr ""
-#: config/tc-ppc.c:1376
+#: config/tc-ppc.c:1388
#, c-format
msgid "-mpower10, -mpwr10 generate code for Power10 architecture\n"
msgstr ""
-#: config/tc-ppc.c:1378
+#: config/tc-ppc.c:1390
#, c-format
msgid ""
"-mcell generate code for Cell Broadband Engine "
"architecture\n"
msgstr ""
-#: config/tc-ppc.c:1380
+#: config/tc-ppc.c:1392
#, c-format
msgid ""
"-mcom generate code for Power/PowerPC common instructions\n"
msgstr ""
-#: config/tc-ppc.c:1382
+#: config/tc-ppc.c:1394
#, c-format
msgid ""
"-many generate code for any architecture (PWR/PWRX/PPC)\n"
msgstr ""
-#: config/tc-ppc.c:1384
+#: config/tc-ppc.c:1396
#, c-format
msgid "-maltivec generate code for AltiVec\n"
msgstr ""
-#: config/tc-ppc.c:1386
+#: config/tc-ppc.c:1398
#, c-format
msgid ""
"-mvsx generate code for Vector-Scalar (VSX) instructions\n"
msgstr ""
-#: config/tc-ppc.c:1388
+#: config/tc-ppc.c:1400
#, c-format
msgid "-me300 generate code for PowerPC e300 family\n"
msgstr ""
-#: config/tc-ppc.c:1390
+#: config/tc-ppc.c:1402
#, c-format
msgid "-me500, -me500x2 generate code for Motorola e500 core complex\n"
msgstr ""
-#: config/tc-ppc.c:1392
+#: config/tc-ppc.c:1404
#, c-format
msgid ""
"-me500mc, generate code for Freescale e500mc core complex\n"
msgstr ""
-#: config/tc-ppc.c:1394
+#: config/tc-ppc.c:1406
#, c-format
msgid ""
"-me500mc64, generate code for Freescale e500mc64 core complex\n"
msgstr ""
-#: config/tc-ppc.c:1396
+#: config/tc-ppc.c:1408
#, c-format
msgid ""
"-me5500, generate code for Freescale e5500 core complex\n"
msgstr ""
-#: config/tc-ppc.c:1398
+#: config/tc-ppc.c:1410
#, c-format
msgid ""
"-me6500, generate code for Freescale e6500 core complex\n"
msgstr ""
-#: config/tc-ppc.c:1400
+#: config/tc-ppc.c:1412
#, c-format
msgid "-mspe generate code for Motorola SPE instructions\n"
msgstr ""
-#: config/tc-ppc.c:1402
+#: config/tc-ppc.c:1414
#, c-format
msgid "-mspe2 generate code for Freescale SPE2 instructions\n"
msgstr ""
-#: config/tc-ppc.c:1404
+#: config/tc-ppc.c:1416
#, c-format
msgid "-mvle generate code for Freescale VLE instructions\n"
msgstr ""
-#: config/tc-ppc.c:1406
+#: config/tc-ppc.c:1418
#, c-format
msgid ""
"-mtitan generate code for AppliedMicro Titan core complex\n"
msgstr ""
-#: config/tc-ppc.c:1408
+#: config/tc-ppc.c:1420
#, c-format
msgid "-mregnames Allow symbolic names for registers\n"
msgstr ""
-#: config/tc-ppc.c:1410
+#: config/tc-ppc.c:1422
#, c-format
msgid "-mno-regnames Do not allow symbolic names for registers\n"
msgstr ""
-#: config/tc-ppc.c:1413
+#: config/tc-ppc.c:1425
#, c-format
msgid "-mrelocatable support for GCC's -mrelocatble option\n"
msgstr ""
-#: config/tc-ppc.c:1415
+#: config/tc-ppc.c:1427
#, c-format
msgid "-mrelocatable-lib support for GCC's -mrelocatble-lib option\n"
msgstr ""
-#: config/tc-ppc.c:1417
+#: config/tc-ppc.c:1429
#, c-format
msgid "-memb set PPC_EMB bit in ELF flags\n"
msgstr ""
-#: config/tc-ppc.c:1419
+#: config/tc-ppc.c:1431
#, c-format
msgid ""
"-mlittle, -mlittle-endian, -le\n"
" generate code for a little endian machine\n"
msgstr ""
-#: config/tc-ppc.c:1422
+#: config/tc-ppc.c:1434
#, c-format
msgid ""
"-mbig, -mbig-endian, -be\n"
" generate code for a big endian machine\n"
msgstr ""
-#: config/tc-ppc.c:1425
+#: config/tc-ppc.c:1437
#, c-format
msgid "-msolaris generate code for Solaris\n"
msgstr ""
-#: config/tc-ppc.c:1427
+#: config/tc-ppc.c:1439
#, c-format
msgid "-mno-solaris do not generate code for Solaris\n"
msgstr ""
-#: config/tc-ppc.c:1429
+#: config/tc-ppc.c:1441
#, c-format
msgid "-K PIC set EF_PPC_RELOCATABLE_LIB in ELF flags\n"
msgstr ""
-#: config/tc-ppc.c:1431
+#: config/tc-ppc.c:1443
#, c-format
msgid "-V print assembler version number\n"
msgstr ""
-#: config/tc-ppc.c:1433
+#: config/tc-ppc.c:1445
#, c-format
msgid "-Qy, -Qn ignored\n"
msgstr ""
-#: config/tc-ppc.c:1436
+#: config/tc-ppc.c:1448
#, c-format
msgid ""
"-nops=count when aligning, more than COUNT nops uses a branch\n"
msgstr ""
-#: config/tc-ppc.c:1438
+#: config/tc-ppc.c:1450
#, c-format
msgid "-ppc476-workaround warn if emitting data to code sections\n"
msgstr ""
-#: config/tc-ppc.c:1468
+#: config/tc-ppc.c:1480
#, c-format
msgid "unknown default cpu = %s, os = %s"
msgstr ""
-#: config/tc-ppc.c:1496
+#: config/tc-ppc.c:1508
msgid "neither Power nor PowerPC opcodes were selected."
msgstr ""
-#: config/tc-ppc.c:1554
+#: config/tc-ppc.c:1566
#, c-format
msgid "mask trims opcode bits for %s"
msgstr ""
-#: config/tc-ppc.c:1564
+#: config/tc-ppc.c:1576
#, c-format
msgid "operand index error for %s"
msgstr ""
-#: config/tc-ppc.c:1590
+#: config/tc-ppc.c:1602
#, c-format
msgid "operand %d overlap in %s"
msgstr ""
-#: config/tc-ppc.c:1599
+#: config/tc-ppc.c:1611
#, c-format
msgid "non-optional operand %d follows optional operand in %s"
msgstr ""
-#: config/tc-ppc.c:1649
+#: config/tc-ppc.c:1661
#, c-format
msgid "powerpc_operands[%d].bitm invalid"
msgstr ""
-#: config/tc-ppc.c:1656
+#: config/tc-ppc.c:1668
#, c-format
msgid "powerpc_operands[%d] duplicates powerpc_operands[%d]"
msgstr ""
-#: config/tc-ppc.c:1682 config/tc-ppc.c:1733 config/tc-ppc.c:1771
-#: config/tc-ppc.c:1809
+#: config/tc-ppc.c:1694 config/tc-ppc.c:1745 config/tc-ppc.c:1783
+#: config/tc-ppc.c:1821
#, c-format
msgid "major opcode is not sorted for %s"
msgstr ""
-#: config/tc-ppc.c:1688
+#: config/tc-ppc.c:1700
#, c-format
msgid "%s is enabled by vle flag"
msgstr ""
-#: config/tc-ppc.c:1695
+#: config/tc-ppc.c:1707
#, c-format
msgid "%s not disabled by vle flag"
msgstr ""
-#: config/tc-ppc.c:2205
+#: config/tc-ppc.c:2217
#, c-format
msgid "symbol+offset@%s means symbol@%s+offset"
msgstr ""
-#: config/tc-ppc.c:2225
+#: config/tc-ppc.c:2237
#, c-format
msgid "symbol+offset@%s not supported"
msgstr ""
-#: config/tc-ppc.c:2300 config/tc-ppc.c:4269 config/tc-ppc.c:7410
+#: config/tc-ppc.c:2316 config/tc-ppc.c:4286 config/tc-ppc.c:7669
msgid "data in executable section"
msgstr ""
-#: config/tc-ppc.c:2341
+#: config/tc-ppc.c:2357
msgid "expected comma after symbol-name: rest of line ignored."
msgstr ""
-#: config/tc-ppc.c:2374
+#: config/tc-ppc.c:2390
#, c-format
msgid "ignoring attempt to re-define symbol `%s'."
msgstr ""
-#: config/tc-ppc.c:2382
+#: config/tc-ppc.c:2398
#, c-format
msgid "length of .lcomm \"%s\" is already %ld. Not changed to %ld."
msgstr ""
-#: config/tc-ppc.c:2400
+#: config/tc-ppc.c:2416
msgid "common alignment not a power of 2"
msgstr ""
-#: config/tc-ppc.c:2442
+#: config/tc-ppc.c:2458
#, c-format
msgid "expected comma after name `%s' in .localentry directive"
msgstr ""
-#: config/tc-ppc.c:2452
+#: config/tc-ppc.c:2468
msgid "missing expression in .localentry directive"
msgstr ""
-#: config/tc-ppc.c:2473
+#: config/tc-ppc.c:2489
#, c-format
msgid ".localentry expression for `%s' is not a valid power of 2"
msgstr ""
-#: config/tc-ppc.c:2490
+#: config/tc-ppc.c:2506
#, c-format
msgid ".localentry expression for `%s' does not evaluate to a constant"
msgstr ""
-#: config/tc-ppc.c:2505
+#: config/tc-ppc.c:2521
msgid "missing expression in .abiversion directive"
msgstr ""
-#: config/tc-ppc.c:2514
+#: config/tc-ppc.c:2530
msgid ".abiversion expression does not evaluate to a constant"
msgstr ""
-#: config/tc-ppc.c:2594
+#: config/tc-ppc.c:2610
msgid "relocation cannot be done when using -mrelocatable"
msgstr ""
-#: config/tc-ppc.c:2640
+#: config/tc-ppc.c:2656
msgid "TOC section size exceeds 64k"
msgstr ""
-#: config/tc-ppc.c:3199
+#: config/tc-ppc.c:3216
#, c-format
msgid "%s howto doesn't match size/pcrel in gas"
msgstr ""
-#: config/tc-ppc.c:3283
+#: config/tc-ppc.c:3300
#, c-format
msgid "unrecognized opcode: `%s'"
msgstr ""
#. lmw, stmw, lswi, lswx, stswi, stswx
-#: config/tc-ppc.c:3297
+#: config/tc-ppc.c:3314
#, c-format
msgid "`%s' invalid when little-endian"
msgstr ""
-#: config/tc-ppc.c:3658
+#: config/tc-ppc.c:3675
#, c-format
msgid "@tls may not be used with \"%s\" operands"
msgstr ""
-#: config/tc-ppc.c:3661
+#: config/tc-ppc.c:3678
msgid "@tls may only be used in last operand"
msgstr ""
-#: config/tc-ppc.c:3699 config/tc-ppc.c:3709 config/tc-ppc.c:3719
-#: config/tc-ppc.c:3734
+#: config/tc-ppc.c:3716 config/tc-ppc.c:3726 config/tc-ppc.c:3736
+#: config/tc-ppc.c:3751
#, c-format
msgid "%s unsupported on this instruction"
msgstr ""
-#: config/tc-ppc.c:3781
+#: config/tc-ppc.c:3798
#, c-format
msgid "assuming %s on symbol"
msgstr ""
-#: config/tc-ppc.c:3904
+#: config/tc-ppc.c:3921
msgid "unsupported relocation for DS offset field"
msgstr ""
-#: config/tc-ppc.c:3957
+#: config/tc-ppc.c:3974
#, c-format
msgid "syntax error; found `%c', expected `%c'"
msgstr ""
-#: config/tc-ppc.c:3962
+#: config/tc-ppc.c:3979
#, c-format
msgid "syntax error; end of line, expected `%c'"
msgstr ""
-#: config/tc-ppc.c:4027 config/tc-ppc.c:6587
+#: config/tc-ppc.c:4044 config/tc-ppc.c:6843
#, c-format
msgid "instruction address is not a multiple of %d"
msgstr ""
-#: config/tc-ppc.c:4153
+#: config/tc-ppc.c:4170
msgid "wrong number of operands"
msgstr ""
-#: config/tc-ppc.c:4226
+#: config/tc-ppc.c:4243
msgid "bad .section directive: want a,e,v,w,x,M,S,G,T in string"
msgstr ""
-#: config/tc-ppc.c:4309
+#: config/tc-ppc.c:4392
msgid "missing size"
msgstr ""
-#: config/tc-ppc.c:4318
+#: config/tc-ppc.c:4401
msgid "negative size"
msgstr ""
-#: config/tc-ppc.c:4350
+#: config/tc-ppc.c:4428
+msgid "Unknown visibility field in .comm"
+msgstr ""
+
+#: config/tc-ppc.c:4446
msgid "missing real symbol name"
msgstr ""
-#: config/tc-ppc.c:4389
+#: config/tc-ppc.c:4485
msgid "attempt to redefine symbol"
msgstr ""
-#: config/tc-ppc.c:4690
+#: config/tc-ppc.c:4794
#, c-format
msgid "no known dwarf XCOFF section for flag 0x%08x\n"
msgstr ""
-#: config/tc-ppc.c:4703
+#: config/tc-ppc.c:4807
#, c-format
msgid "label %s was not defined in this dwarf section"
msgstr ""
-#: config/tc-ppc.c:4817
+#: config/tc-ppc.c:4921
msgid "the XCOFF file format does not support arbitrary sections"
msgstr ""
-#: config/tc-ppc.c:4888
+#: config/tc-ppc.c:4958
+msgid "Unknown visibility field in .extern"
+msgstr ""
+
+#: config/tc-ppc.c:4994
+msgid "Unknown visibility field in .globl"
+msgstr ""
+
+#: config/tc-ppc.c:5030
+msgid "Unknown visibility field in .weak"
+msgstr ""
+
+#: config/tc-ppc.c:5081
msgid ".ref outside .csect"
msgstr ""
-#: config/tc-ppc.c:4909 config/tc-ppc.c:5108
+#: config/tc-ppc.c:5102 config/tc-ppc.c:5362
msgid "missing symbol name"
msgstr ""
-#: config/tc-ppc.c:4939
+#: config/tc-ppc.c:5132
msgid "missing rename string"
msgstr ""
-#: config/tc-ppc.c:4969 config/tc-ppc.c:5510
+#: config/tc-ppc.c:5162 config/tc-ppc.c:5764
msgid "missing value"
msgstr ""
-#: config/tc-ppc.c:4987
+#: config/tc-ppc.c:5180
msgid "illegal .stabx expression; zero assumed"
msgstr ""
-#: config/tc-ppc.c:5019
+#: config/tc-ppc.c:5212
msgid "missing class"
msgstr ""
-#: config/tc-ppc.c:5028
+#: config/tc-ppc.c:5221
msgid "missing type"
msgstr ""
-#: config/tc-ppc.c:5055
+#: config/tc-ppc.c:5248
msgid ".stabx of storage class stsym must be within .bs/.es"
msgstr ""
-#: config/tc-ppc.c:5298
+#: config/tc-ppc.c:5552
msgid "nested .bs blocks"
msgstr ""
-#: config/tc-ppc.c:5329
+#: config/tc-ppc.c:5583
msgid ".es without preceding .bs"
msgstr ""
-#: config/tc-ppc.c:5502
+#: config/tc-ppc.c:5756
msgid "non-constant byte count"
msgstr ""
-#: config/tc-ppc.c:5577
+#: config/tc-ppc.c:5831
msgid ".tc not in .toc section"
msgstr ""
-#: config/tc-ppc.c:5595
+#: config/tc-ppc.c:5849
msgid ".tc with no label"
msgstr ""
-#: config/tc-ppc.c:5623
+#: config/tc-ppc.c:5877
#, c-format
msgid ".tc with storage class %d not yet supported"
msgstr ""
-#: config/tc-ppc.c:5692 config/tc-s390.c:1960
+#: config/tc-ppc.c:5946 config/tc-s390.c:1960
msgid ".machine stack overflow"
msgstr ""
-#: config/tc-ppc.c:5699 config/tc-s390.c:1971
+#: config/tc-ppc.c:5953 config/tc-s390.c:1971
msgid ".machine stack underflow"
msgstr ""
-#: config/tc-ppc.c:5718 config/tc-s390.c:1983
+#: config/tc-ppc.c:5972 config/tc-s390.c:1983
#, c-format
msgid "invalid machine `%s'"
msgstr ""
-#: config/tc-ppc.c:5762
+#: config/tc-ppc.c:6016
msgid "bad symbol suffix"
msgstr ""
-#: config/tc-ppc.c:5861
+#: config/tc-ppc.c:6115
msgid "unrecognized symbol suffix"
msgstr ""
-#: config/tc-ppc.c:5949
+#: config/tc-ppc.c:6203
msgid ".ef with no preceding .function"
msgstr ""
-#: config/tc-ppc.c:6085
+#: config/tc-ppc.c:6339
#, c-format
msgid "warning: symbol %s has no csect"
msgstr ""
-#: config/tc-ppc.c:6417
+#: config/tc-ppc.c:6671
msgid "symbol in .toc does not match any .tc"
msgstr ""
-#: config/tc-ppc.c:7115
+#: config/tc-ppc.c:7371
#, c-format
msgid "%s unsupported as instruction fixup"
msgstr ""
-#: config/tc-ppc.c:7214
+#: config/tc-ppc.c:7470
#, c-format
msgid "unsupported relocation against %s"
msgstr ""
-#: config/tc-ppc.c:7372
+#: config/tc-ppc.c:7632
#, c-format
-msgid "R_TLSML relocation doesn't target a symbol named \"_$TLSML\". %s"
+msgid "R_TLSML relocation doesn't target a TOC entry named \"_$TLSML\": %s"
msgstr ""
-#: config/tc-ppc.c:7393
+#: config/tc-ppc.c:7652
#, c-format
msgid "Gas failure, reloc value %d\n"
msgstr ""
@@ -15383,263 +15673,306 @@ msgstr ""
msgid "Label \"%s\" matches a CPU register name"
msgstr ""
-#: config/tc-riscv.c:234
+#: config/tc-riscv.c:176
#, c-format
msgid ""
"unknown default privileged spec `%s' set by -mpriv-spec or --with-priv-spec"
msgstr ""
#. Still can not find the privileged spec class.
-#: config/tc-riscv.c:256
+#: config/tc-riscv.c:198
#, c-format
msgid ""
"unknown default privileged spec `%d.%d.%d' set by privileged elf attributes"
msgstr ""
-#: config/tc-riscv.c:366 config/tc-riscv.c:745 config/tc-riscv.c:803
-#: config/tc-riscv.c:1188
+#: config/tc-riscv.c:266
+msgid ""
+"the architecture string of -march and elf architecture attributes cannot be "
+"empty"
+msgstr ""
+
+#: config/tc-riscv.c:754 config/tc-riscv.c:815 config/tc-riscv.c:1230
#, c-format
msgid "internal: duplicate %s"
msgstr ""
-#: config/tc-riscv.c:892
+#: config/tc-riscv.c:912
#, c-format
msgid "internal: bad RISC-V CSR class (0x%x)"
msgstr ""
-#: config/tc-riscv.c:896
+#: config/tc-riscv.c:916
#, c-format
msgid "invalid CSR `%s' for the current ISA"
msgstr ""
-#: config/tc-riscv.c:917
+#: config/tc-riscv.c:937
#, c-format
msgid "invalid CSR `%s' for the privileged spec `%s'"
msgstr ""
-#: config/tc-riscv.c:1027
+#: config/tc-riscv.c:1050
#, c-format
msgid "internal: bad RISC-V opcode (mask error): %s %s"
msgstr ""
-#: config/tc-riscv.c:1077
-#, c-format
-msgid "internal: bad RISC-V opcode (unknown operand type `CF%c'): %s %s"
-msgstr ""
-
-#: config/tc-riscv.c:1084
-#, c-format
-msgid "internal: bad RISC-V opcode (unknown operand type `C%c'): %s %s"
-msgstr ""
-
-#: config/tc-riscv.c:1132 config/tc-riscv.c:1144
-#, c-format
-msgid "internal: bad RISC-V opcode (unknown operand type `F%c'): %s %s"
-msgstr ""
-
-#: config/tc-riscv.c:1151
+#: config/tc-riscv.c:1190
#, c-format
-msgid "internal: bad RISC-V opcode (unknown operand type `%c'): %s %s"
+msgid "internal: bad RISC-V opcode (unknown operand type `%s'): %s %s"
msgstr ""
-#: config/tc-riscv.c:1159
+#: config/tc-riscv.c:1199
#, c-format
msgid "internal: bad RISC-V opcode (bits 0x%lx undefined): %s %s"
msgstr ""
-#: config/tc-riscv.c:1199
+#: config/tc-riscv.c:1241
msgid "internal: broken assembler. No assembly attempted"
msgstr ""
-#: config/tc-riscv.c:1310
+#: config/tc-riscv.c:1354
#, c-format
msgid "internal: unsupported RISC-V relocation number %d"
msgstr ""
-#: config/tc-riscv.c:1392
-msgid "internal: invalid macro"
+#: config/tc-riscv.c:1470
+#, c-format
+msgid "internal: invalid macro argument `%s'"
msgstr ""
-#: config/tc-riscv.c:1417
+#: config/tc-riscv.c:1495
msgid "internal: vasprintf failed"
msgstr ""
-#: config/tc-riscv.c:1447 config/tc-riscv.c:1525
+#: config/tc-riscv.c:1525 config/tc-riscv.c:1603
msgid "unsupported large constant"
msgstr ""
-#: config/tc-riscv.c:1449
+#: config/tc-riscv.c:1527
#, c-format
msgid "unknown CSR `%s'"
msgstr ""
-#: config/tc-riscv.c:1452
+#: config/tc-riscv.c:1530
#, c-format
msgid "instruction %s requires absolute expression"
msgstr ""
-#: config/tc-riscv.c:1719
+#: config/tc-riscv.c:1704 config/tc-riscv.c:1739
+msgid "must provide temp if destination overlaps mask"
+msgstr ""
+
+#: config/tc-riscv.c:1891
#, c-format
msgid "internal: macro %s not implemented"
msgstr ""
-#: config/tc-riscv.c:2062
+#: config/tc-riscv.c:2077
+msgid "multiple vsew constants"
+msgstr ""
+
+#: config/tc-riscv.c:2085
+msgid "multiple vlmul constants"
+msgstr ""
+
+#: config/tc-riscv.c:2093
+msgid "multiple vta constants"
+msgstr ""
+
+#: config/tc-riscv.c:2101
+msgid "multiple vma constants"
+msgstr ""
+
+#. Reset error message of the previous round.
+#: config/tc-riscv.c:2257
+msgid "illegal operands"
+msgstr ""
+
+#: config/tc-riscv.c:2297
#, c-format
msgid "read-only CSR is written `%s'"
msgstr ""
-#: config/tc-riscv.c:2301
+#: config/tc-riscv.c:2307
+msgid "illegal opcode for zve32x"
+msgstr ""
+
+#: config/tc-riscv.c:2546
msgid "bad value for compressed funct6 field, value must be 0...64"
msgstr ""
-#: config/tc-riscv.c:2316
+#: config/tc-riscv.c:2561
msgid "bad value for compressed funct4 field, value must be 0...15"
msgstr ""
-#: config/tc-riscv.c:2331
+#: config/tc-riscv.c:2576
msgid "bad value for compressed funct3 field, value must be 0...7"
msgstr ""
-#: config/tc-riscv.c:2346
+#: config/tc-riscv.c:2591
msgid "bad value for compressed funct2 field, value must be 0...3"
msgstr ""
-#: config/tc-riscv.c:2356
-#, c-format
-msgid "internal: unknown compressed funct field specifier `CF%c'"
+#: config/tc-riscv.c:2684
+msgid "bad value for vsetivli immediate field, value must be 0..1023"
msgstr ""
-#: config/tc-riscv.c:2362
-#, c-format
-msgid "internal: unknown compressed field specifier `C%c'"
+#: config/tc-riscv.c:2696
+msgid "bad value for vsetvli immediate field, value must be 0..2047"
+msgstr ""
+
+#: config/tc-riscv.c:2709
+msgid "bad value for vector immediate field, value must be -16...15"
+msgstr ""
+
+#: config/tc-riscv.c:2721
+msgid "bad value for vector immediate field, value must be 0...31"
+msgstr ""
+
+#: config/tc-riscv.c:2733
+msgid "bad value for vector immediate field, value must be -15...16"
msgstr ""
-#: config/tc-riscv.c:2386 config/tc-riscv.c:2397
+#: config/tc-riscv.c:2795 config/tc-riscv.c:2806
#, c-format
msgid "improper shift amount (%lu)"
msgstr ""
-#: config/tc-riscv.c:2408
+#: config/tc-riscv.c:2817
#, c-format
msgid "improper CSRxI immediate (%lu)"
msgstr ""
-#: config/tc-riscv.c:2425
+#: config/tc-riscv.c:2834
#, c-format
msgid "improper CSR address (%lu)"
msgstr ""
-#: config/tc-riscv.c:2603
+#: config/tc-riscv.c:3015
msgid "lui expression not in range 0..1048575"
msgstr ""
-#: config/tc-riscv.c:2640
+#: config/tc-riscv.c:3052
msgid ""
"bad value for opcode field, value must be 0...127 and lower 2 bits must be "
"0x3"
msgstr ""
-#: config/tc-riscv.c:2656
+#: config/tc-riscv.c:3068
msgid "bad value for opcode field, value must be 0...2"
msgstr ""
-#: config/tc-riscv.c:2666
-#, c-format
-msgid "internal: unknown opcode field specifier `O%c'"
-msgstr ""
-
-#: config/tc-riscv.c:2680
+#: config/tc-riscv.c:3091
msgid "bad value for funct7 field, value must be 0...127"
msgstr ""
-#: config/tc-riscv.c:2695
+#: config/tc-riscv.c:3106
msgid "bad value for funct3 field, value must be 0...7"
msgstr ""
-#: config/tc-riscv.c:2710
+#: config/tc-riscv.c:3121
msgid "bad value for funct2 field, value must be 0...3"
msgstr ""
-#: config/tc-riscv.c:2720
+#: config/tc-riscv.c:3139
#, c-format
-msgid "internal: unknown funct field specifier `F%c'\n"
+msgid "Improper bs immediate (%lu)"
msgstr ""
-#: config/tc-riscv.c:2735
+#: config/tc-riscv.c:3150
#, c-format
-msgid "internal: unknown argument type `%c'"
+msgid "Improper rnum immediate (%lu)"
msgstr ""
-#: config/tc-riscv.c:2740
-msgid "illegal operands"
+#: config/tc-riscv.c:3168
+#, c-format
+msgid "internal: unknown argument type `%s'"
+msgstr ""
+
+#: config/tc-riscv.c:3209
+msgid "values must be constant"
+msgstr ""
+
+#: config/tc-riscv.c:3217
+msgid "unrecognized values"
msgstr ""
-#: config/tc-riscv.c:3119
+#: config/tc-riscv.c:3225
+msgid "value conflicts with instruction length"
+msgstr ""
+
+#: config/tc-riscv.c:3594
#, c-format
msgid "internal: bad CFA value #%d"
msgstr ""
-#: config/tc-riscv.c:3200
+#: config/tc-riscv.c:3675
#, c-format
msgid "internal: bad relocation #%d"
msgstr ""
-#: config/tc-riscv.c:3313
+#: config/tc-riscv.c:3799
msgid ".option pop with no .option push"
msgstr ""
-#: config/tc-riscv.c:3323
+#: config/tc-riscv.c:3813
#, c-format
msgid "unrecognized .option directive: %s\n"
msgstr ""
-#: config/tc-riscv.c:3498
-#, c-format
-msgid "cannot represent %s relocation in object file"
-msgstr ""
-
-#: config/tc-riscv.c:3639
+#: config/tc-riscv.c:4170
#, c-format
msgid ""
"RISC-V options:\n"
-" -fpic generate position-independent code\n"
+" -fpic or -fPIC generate position-independent code\n"
" -fno-pic don't generate position-independent code "
"(default)\n"
" -march=ISA set the RISC-V architecture\n"
" -misa-spec=ISAspec set the RISC-V ISA spec (2.2, 20190608, "
"20191213)\n"
-" -mpriv-spec=PRIVspec set the RISC-V privilege spec (1.9, 1.9.1, "
-"1.10, 1.11)\n"
+" -mpriv-spec=PRIVspec set the RISC-V privilege spec (1.9.1, 1.10, "
+"1.11, 1.12)\n"
" -mabi=ABI set the RISC-V ABI\n"
" -mrelax enable relax (default)\n"
" -mno-relax disable relax\n"
" -march-attr generate RISC-V arch attribute\n"
" -mno-arch-attr don't generate RISC-V arch attribute\n"
+" -mcsr-check enable the csr ISA and privilege spec version "
+"checks\n"
+" -mno-csr-check disable the csr ISA and privilege spec version "
+"checks (default)\n"
+" -mbig-endian assemble for big-endian\n"
+" -mlittle-endian assemble for little-endian\n"
msgstr ""
-#: config/tc-riscv.c:3677
+#: config/tc-riscv.c:4212
#, c-format
msgid "unknown register `%s'"
msgstr ""
-#: config/tc-riscv.c:3699
+#: config/tc-riscv.c:4234
#, c-format
msgid "non-constant .%cleb128 is not supported"
msgstr ""
-#: config/tc-riscv.c:3784
+#: config/tc-riscv.c:4328
#, c-format
msgid "internal: bad RISC-V privileged spec (%s)"
msgstr ""
-#: config/tc-riscv.c:3867
+#: config/tc-riscv.c:4420
msgid "architecture elf attributes must set before any instructions"
msgstr ""
-#: config/tc-riscv.c:3885
+#: config/tc-riscv.c:4438
msgid "privileged elf attributes must set before any instructions"
msgstr ""
+#: config/tc-riscv.c:4460
+msgid "missing symbol name for .variant_cc directive"
+msgstr ""
+
#: config/tc-rl78.c:213
msgid "16-bit relocation used in 8-bit operand"
msgstr ""
@@ -18974,140 +19307,140 @@ msgstr ""
msgid "hi() relocation used on an instruction which does not support it"
msgstr ""
-#: config/tc-v850.c:2036
+#: config/tc-v850.c:2032
msgid "lo() relocation used on an instruction which does not support it"
msgstr ""
-#: config/tc-v850.c:2046
+#: config/tc-v850.c:2043
msgid "ctoff() is not supported by the rh850 ABI. Use -mgcc-abi instead"
msgstr ""
-#: config/tc-v850.c:2062
+#: config/tc-v850.c:2059
msgid "ctoff() relocation used on an instruction which does not support it"
msgstr ""
-#: config/tc-v850.c:2081
+#: config/tc-v850.c:2078
msgid "sdaoff() relocation used on an instruction which does not support it"
msgstr ""
-#: config/tc-v850.c:2100
+#: config/tc-v850.c:2097
msgid "zdaoff() relocation used on an instruction which does not support it"
msgstr ""
-#: config/tc-v850.c:2132
+#: config/tc-v850.c:2129
msgid "tdaoff() relocation used on an instruction which does not support it"
msgstr ""
-#: config/tc-v850.c:2273
+#: config/tc-v850.c:2270
#, c-format
msgid "operand out of range (%d is not between %d and %d)"
msgstr ""
-#: config/tc-v850.c:2356
+#: config/tc-v850.c:2353
msgid "st/ld offset 23 instruction was disabled ."
msgstr ""
-#: config/tc-v850.c:2365
+#: config/tc-v850.c:2362
msgid "Target processor does not support this instruction."
msgstr ""
-#: config/tc-v850.c:2477 config/tc-v850.c:2487 config/tc-v850.c:2508
-#: config/tc-v850.c:2522 config/tc-v850.c:2528 config/tc-v850.c:2552
-#: config/tc-v850.c:2558 config/tc-v850.c:2565 config/tc-v850.c:2579
-#: config/tc-v850.c:2593 config/tc-v850.c:2599 config/tc-v850.c:2936
+#: config/tc-v850.c:2474 config/tc-v850.c:2484 config/tc-v850.c:2505
+#: config/tc-v850.c:2519 config/tc-v850.c:2525 config/tc-v850.c:2549
+#: config/tc-v850.c:2555 config/tc-v850.c:2562 config/tc-v850.c:2576
+#: config/tc-v850.c:2590 config/tc-v850.c:2596 config/tc-v850.c:2933
msgid "immediate operand is too large"
msgstr ""
-#: config/tc-v850.c:2494
+#: config/tc-v850.c:2491
#, c-format
msgid "AAARG -> unhandled constant reloc: %d"
msgstr ""
-#: config/tc-v850.c:2629 config/tc-v850.c:2640
+#: config/tc-v850.c:2626 config/tc-v850.c:2637
msgid "constant too big to fit into instruction"
msgstr ""
-#: config/tc-v850.c:2715
+#: config/tc-v850.c:2712
msgid "odd number cannot be used here"
msgstr ""
-#: config/tc-v850.c:2760
+#: config/tc-v850.c:2757
msgid "invalid register name"
msgstr ""
-#: config/tc-v850.c:2766
+#: config/tc-v850.c:2763
msgid "register r0 cannot be used here"
msgstr ""
-#: config/tc-v850.c:2772
+#: config/tc-v850.c:2769
msgid "odd register cannot be used here"
msgstr ""
-#: config/tc-v850.c:2781
+#: config/tc-v850.c:2778
msgid "invalid system register name"
msgstr ""
-#: config/tc-v850.c:2795
+#: config/tc-v850.c:2792
msgid "expected EP register"
msgstr ""
-#: config/tc-v850.c:2812 config/tc-v850.c:2825
+#: config/tc-v850.c:2809 config/tc-v850.c:2822
msgid "invalid condition code name"
msgstr ""
-#: config/tc-v850.c:2818
+#: config/tc-v850.c:2815
msgid "condition sa cannot be used here"
msgstr ""
-#: config/tc-v850.c:2831
+#: config/tc-v850.c:2828
msgid "invalid cache operation name"
msgstr ""
-#: config/tc-v850.c:2836
+#: config/tc-v850.c:2833
msgid "invalid pref operation name"
msgstr ""
-#: config/tc-v850.c:2841
+#: config/tc-v850.c:2838
msgid "invalid vector register name"
msgstr ""
-#: config/tc-v850.c:2879
+#: config/tc-v850.c:2876
msgid "syntax error: value is missing before the register name"
msgstr ""
-#: config/tc-v850.c:2881
+#: config/tc-v850.c:2878
msgid "syntax error: register not expected"
msgstr ""
-#: config/tc-v850.c:2895
+#: config/tc-v850.c:2892
msgid "syntax error: system register not expected"
msgstr ""
-#: config/tc-v850.c:2900 config/tc-v850.c:2905
+#: config/tc-v850.c:2897 config/tc-v850.c:2902
msgid "syntax error: condition code not expected"
msgstr ""
-#: config/tc-v850.c:2910
+#: config/tc-v850.c:2907
msgid "syntax error: vector register not expected"
msgstr ""
-#: config/tc-v850.c:2920
+#: config/tc-v850.c:2917
msgid "immediate 0 cannot be used here"
msgstr ""
-#: config/tc-v850.c:2944
+#: config/tc-v850.c:2941
msgid "immediate operand is not match"
msgstr ""
-#: config/tc-v850.c:2957
+#: config/tc-v850.c:2954
msgid "displacement is too large"
msgstr ""
-#: config/tc-v850.c:2975 config/tc-xtensa.c:13078
+#: config/tc-v850.c:2972 config/tc-xtensa.c:13078
msgid "invalid operand"
msgstr ""
-#: config/tc-v850.c:3087
+#: config/tc-v850.c:3084
msgid "loop: 32-bit displacement not supported"
msgstr ""
@@ -20643,56 +20976,56 @@ msgstr ""
msgid "CFI is not supported for this target"
msgstr ""
-#: dwarf2dbg.c:379 dwarf2dbg.c:2964
+#: dwarf2dbg.c:378 dwarf2dbg.c:3048
msgid "view number mismatch"
msgstr ""
-#: dwarf2dbg.c:670 dwarf2dbg.c:1127
+#: dwarf2dbg.c:683 dwarf2dbg.c:1204
#, c-format
msgid "file number %lu is too big"
msgstr ""
-#: dwarf2dbg.c:836
+#: dwarf2dbg.c:896
#, c-format
msgid ""
"file table slot %u is already occupied by a different file (%s%s%s vs %s%s%s)"
msgstr ""
-#: dwarf2dbg.c:1077 dwarf2dbg.c:1179
+#: dwarf2dbg.c:1152 dwarf2dbg.c:1244
msgid "file number less than one"
msgstr ""
-#: dwarf2dbg.c:1112
+#: dwarf2dbg.c:1187
msgid "md5 value too small or not a constant"
msgstr ""
-#: dwarf2dbg.c:1186 dwarf2dbg.c:2214
+#: dwarf2dbg.c:1251 dwarf2dbg.c:2289
#, c-format
msgid "unassigned file number %ld"
msgstr ""
-#: dwarf2dbg.c:1255
+#: dwarf2dbg.c:1325
msgid "is_stmt value not 0 or 1"
msgstr ""
-#: dwarf2dbg.c:1267
+#: dwarf2dbg.c:1337
msgid "isa number less than zero"
msgstr ""
-#: dwarf2dbg.c:1279
+#: dwarf2dbg.c:1349
msgid "discriminator less than zero"
msgstr ""
-#: dwarf2dbg.c:1298
+#: dwarf2dbg.c:1368
msgid "numeric view can only be asserted to zero"
msgstr ""
-#: dwarf2dbg.c:1336
+#: dwarf2dbg.c:1406
#, c-format
msgid "unknown .loc sub-directive `%s'"
msgstr ""
-#: dwarf2dbg.c:2327
+#: dwarf2dbg.c:2402
msgid "internal error: unknown dwarf2 format"
msgstr ""
@@ -20959,22 +21292,27 @@ msgstr ""
msgid "right operand is a float; integer 0 assumed"
msgstr ""
-#: expr.c:1948 symbols.c:1570
+#: expr.c:1948 symbols.c:1590
msgid "division by zero"
msgstr ""
-#: expr.c:1954 symbols.c:1581
+#: expr.c:1954 symbols.c:1601
msgid "shift count"
msgstr ""
-#: expr.c:2084
+#: expr.c:2089
msgid "operation combines symbols in different segments"
msgstr ""
-#: expr.c:2409
+#: expr.c:2412
msgid "missing closing '\"'"
msgstr ""
+#: expr.c:2440
+#, c-format
+msgid "'\\%c' in quoted symbol name; behavior may change in the future"
+msgstr ""
+
#: frags.c:60
msgid "attempt to allocate data in absolute section"
msgstr ""
@@ -20983,7 +21321,7 @@ msgstr ""
msgid "attempt to allocate data in common section"
msgstr ""
-#: frags.c:115 write.c:1475
+#: frags.c:115 write.c:1509
#, c-format
msgid "can't extend frag %lu char"
msgid_plural "can't extend frag %lu chars"
@@ -21537,7 +21875,7 @@ msgstr ""
msgid "junk at end of line, first unrecognized character valued 0x%x"
msgstr ""
-#: read.c:4098 write.c:2386
+#: read.c:4098 write.c:2422
#, c-format
msgid "`%s' can't be equated to common symbol `%s'"
msgstr ""
@@ -21753,86 +22091,91 @@ msgstr ""
msgid "comma missing in .xstabs"
msgstr ""
-#: symbols.c:442
+#: symbols.c:324 symbols.c:2455
+#, c-format
+msgid "symbol '%s' contains multibyte characters"
+msgstr ""
+
+#: symbols.c:462
#, c-format
msgid "cannot define symbol `%s' in absolute section"
msgstr ""
-#: symbols.c:575
+#: symbols.c:595
#, c-format
msgid "symbol `%s' is already defined as \"%s\"/%s%ld"
msgstr ""
-#: symbols.c:1169
+#: symbols.c:1189
#, c-format
msgid "invalid operands (%s and %s sections) for `%s'"
msgstr ""
-#: symbols.c:1173
+#: symbols.c:1193
#, c-format
msgid "invalid operand (%s section) for `%s'"
msgstr ""
-#: symbols.c:1181
+#: symbols.c:1201
#, c-format
msgid "invalid operands (%s and %s sections) for `%s' when setting `%s'"
msgstr ""
-#: symbols.c:1184
+#: symbols.c:1204
#, c-format
msgid "invalid operand (%s section) for `%s' when setting `%s'"
msgstr ""
-#: symbols.c:1253
+#: symbols.c:1273
#, c-format
msgid "symbol definition loop encountered at `%s'"
msgstr ""
-#: symbols.c:1280
+#: symbols.c:1300
#, c-format
msgid "cannot convert expression symbol %s to complex relocation"
msgstr ""
-#: symbols.c:1572
+#: symbols.c:1592
#, c-format
msgid "division by zero when setting `%s'"
msgstr ""
#. See PR 20895 for a reproducer.
-#: symbols.c:1622
+#: symbols.c:1642
msgid "Invalid operation on symbol"
msgstr ""
-#: symbols.c:1672 write.c:2435
+#: symbols.c:1692 write.c:2471
#, c-format
msgid "can't resolve value for symbol `%s'"
msgstr ""
-#: symbols.c:2133
+#: symbols.c:2153
#, c-format
msgid "\"%d\" (instance number %d of a %s label)"
msgstr ""
-#: symbols.c:2162
+#: symbols.c:2182
#, c-format
msgid "attempt to get value of unresolved symbol `%s'"
msgstr ""
#. Do not reassign section symbols.
-#: symbols.c:2442
+#: symbols.c:2476
msgid "can't make section symbol global"
msgstr ""
-#: symbols.c:2448
+#: symbols.c:2482
msgid "can't make register symbol global"
msgstr ""
-#: symbols.c:2554
+#: symbols.c:2588
#, c-format
msgid "Accessing function `%s' as thread-local object"
msgstr ""
-#: symbols.c:2558
+#: symbols.c:2592
#, c-format
msgid "Accessing `%s' as thread-local object"
msgstr ""
@@ -21898,80 +22241,80 @@ msgstr ""
msgid "internal error: fixup not contained within frag"
msgstr ""
-#: write.c:1408 write.c:1545
+#: write.c:1442 write.c:1579
msgid "can't extend frag"
msgstr ""
-#: write.c:1593
+#: write.c:1627
msgid "unimplemented .nops directive"
msgstr ""
-#: write.c:1627
+#: write.c:1661
#, c-format
msgid "can't write %ld byte to section %s of %s: '%s'"
msgid_plural "can't write %ld bytes to section %s of %s: '%s'"
msgstr[0] ""
msgstr[1] ""
-#: write.c:1653 write.c:1682 write.c:1719
+#: write.c:1687 write.c:1716 write.c:1753
#, c-format
msgid "can't fill %ld byte in section %s of %s: '%s'"
msgid_plural "can't fill %ld bytes in section %s of %s: '%s'"
msgstr[0] ""
msgstr[1] ""
-#: write.c:1934
+#: write.c:1970
msgid "unable to create reloc for build note"
msgstr ""
-#: write.c:1938
+#: write.c:1974
msgid "<gnu build note>"
msgstr ""
-#: write.c:2351
+#: write.c:2387
#, c-format
msgid "%s: global symbols not supported in common sections"
msgstr ""
-#: write.c:2365
+#: write.c:2401
#, c-format
msgid "local label `%s' is not defined"
msgstr ""
-#: write.c:2393
+#: write.c:2429
#, c-format
msgid "can't make global register symbol `%s'"
msgstr ""
-#: write.c:2702
+#: write.c:2738
#, c-format
msgid "alignment padding (%lu byte) not a multiple of %ld"
msgid_plural "alignment padding (%lu bytes) not a multiple of %ld"
msgstr[0] ""
msgstr[1] ""
-#: write.c:2871
+#: write.c:2907
#, c-format
msgid ".word %s-%s+%s didn't fit"
msgstr ""
-#: write.c:2965
+#: write.c:3001
msgid "padding added"
msgstr ""
-#: write.c:3016
+#: write.c:3052
msgid "attempt to move .org backwards"
msgstr ""
-#: write.c:3041
+#: write.c:3077
msgid ".space, .nops or .fill specifies non-absolute value"
msgstr ""
-#: write.c:3056
+#: write.c:3092
msgid ".space, .nops or .fill with negative value, ignored"
msgstr ""
-#: write.c:3128
+#: write.c:3164
#, c-format
msgid ""
"Infinite loop encountered whilst attempting to compute the addresses of "
diff --git a/gas/po/uk.po b/gas/po/uk.po
index 73581c7de9f..cdc7eed51fc 100644
--- a/gas/po/uk.po
+++ b/gas/po/uk.po
@@ -2,13 +2,13 @@
# Copyright (C) 2013 Free Software Foundation, Inc.
# This file is distributed under the same license as the binutils package.
#
-# Yuri Chornoivan <yurchor@ukr.net>, 2013, 2014, 2015, 2017, 2018, 2019, 2020, 2021.
+# Yuri Chornoivan <yurchor@ukr.net>, 2013, 2014, 2015, 2017, 2018, 2019, 2020, 2021, 2022.
msgid ""
msgstr ""
-"Project-Id-Version: gas 2.36.90\n"
-"Report-Msgid-Bugs-To: bug-binutils@gnu.org\n"
-"POT-Creation-Date: 2021-07-03 15:02+0100\n"
-"PO-Revision-Date: 2021-07-04 12:17+0300\n"
+"Project-Id-Version: gas 2.37.90\n"
+"Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n"
+"POT-Creation-Date: 2022-01-22 12:21+0000\n"
+"PO-Revision-Date: 2022-01-24 00:55+0200\n"
"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
"Language-Team: Ukrainian <trans-uk@lists.fedoraproject.org>\n"
"Language: uk\n"
@@ -19,41 +19,60 @@ msgstr ""
"Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Lokalize 20.12.0\n"
-#: app.c:494 app.c:508
+#: app.c:381
+#, c-format
+msgid "multibyte character (%#x) encountered in input"
+msgstr "у вхідних даних виÑвлено багатобайтовий Ñимвол (%#x)"
+
+#: app.c:383
+#, c-format
+msgid "multibyte character (%#x) encountered in %s"
+msgstr "виÑвлено багатобайтовий Ñимвол (%#x) у %s"
+
+#: app.c:385
+#, c-format
+msgid "multibyte character (%#x) encountered in %s at or near line %u"
+msgstr "виÑвлено багатобайтовий Ñимвол (%#x) у %s у Ñ€Ñдку %u або поблизу нього"
+
+#: app.c:389
+msgid "further multibyte character warnings suppressed"
+msgstr "подальші Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ багатобайтових Ñимволів придушено"
+
+#: app.c:548 app.c:562
msgid "end of file in comment"
msgstr "Ñимвол ÐºÑ–Ð½Ñ†Ñ Ñ„Ð°Ð¹Ð»Ð° у коментарі"
-#: app.c:586 app.c:631
+#: app.c:640 app.c:685
#, c-format
msgid "end of file in string; '%c' inserted"
msgstr "Ñимвол ÐºÑ–Ð½Ñ†Ñ Ñ„Ð°Ð¹Ð»Ð° у Ñ€Ñдку; вÑтавлено «%c»"
-#: app.c:657
+#: app.c:711
#, c-format
msgid "unknown escape '\\%c' in string; ignored"
msgstr "невідомий екранований Ñимвол «\\%c» у Ñ€Ñдку; проігноровано"
-#: app.c:831 input-scrub.c:363
+#: app.c:887 input-scrub.c:363
msgid "end of file not at end of a line; newline inserted"
msgstr "кінець файла не наприкінці Ñ€Ñдка; вÑтавлено Ñимвол розриву Ñ€Ñдка"
-#: app.c:993
+#: app.c:1049
msgid "end of file in multiline comment"
msgstr "Ñимвол ÐºÑ–Ð½Ñ†Ñ Ñ€Ñдка у багаторÑдковому коментарі"
-#: app.c:1067
+#: app.c:1123
msgid "end of file after a one-character quote; \\0 inserted"
msgstr "кінець файла піÑÐ»Ñ Ð¾Ð´Ð½Ð¾Ñимвольних лапок; вÑтавлено \\0"
-#: app.c:1075
+#: app.c:1131
msgid "end of file in escape character"
msgstr "Ñимвол ÐºÑ–Ð½Ñ†Ñ Ñ„Ð°Ð¹Ð»Ð° у екранованому Ñимволі"
-#: app.c:1087
+#: app.c:1143
msgid "missing close quote; (assumed)"
msgstr "не виÑтачає кінцевих лапок; (припуÑкаємо)"
-#: app.c:1155 app.c:1210 app.c:1222 app.c:1300
+#: app.c:1211 app.c:1266 app.c:1278 app.c:1356
msgid "end of file in comment; newline inserted"
msgstr "Ñимвол ÐºÑ–Ð½Ñ†Ñ Ñ„Ð°Ð¹Ð»Ð° у коментарі; вÑтавлено Ñимвол розриву Ñ€Ñдка"
@@ -194,12 +213,12 @@ msgstr ""
msgid " --elf-stt-common=[no|yes] "
msgstr " --elf-stt-common=[no|yes] "
-#: as.c:317 as.c:328 config/tc-i386.c:13799 config/tc-i386.c:13819
+#: as.c:317 as.c:328 config/tc-i386.c:13918 config/tc-i386.c:13938
#, c-format
msgid "(default: yes)\n"
msgstr "(типове значеннÑ: yes)\n"
-#: as.c:319 as.c:330 config/tc-i386.c:13801 config/tc-i386.c:13821
+#: as.c:319 as.c:330 config/tc-i386.c:13920 config/tc-i386.c:13940
#, c-format
msgid "(default: no)\n"
msgstr "(типове значеннÑ: no)\n"
@@ -416,23 +435,28 @@ msgstr " @ФÐЙЛ прочитати параметри з Ñ
msgid "Report bugs to %s\n"
msgstr "ПовідомлÑйте про вади за адреÑою %s\n"
-#: as.c:646
+#: as.c:648
#, c-format
msgid "unrecognized option -%c%s"
msgstr "невідомий параметр -%c%s"
+#: as.c:698
+#, c-format
+msgid "unexpected argument to --multibyte-input-option: '%s'"
+msgstr "неочікуваний аргумент --multibyte-input-option: «%s»"
+
#. This output is intended to follow the GNU standards document.
-#: as.c:688
+#: as.c:703
#, c-format
msgid "GNU assembler %s\n"
msgstr "ÐÑемблер GNU %s\n"
-#: as.c:689
+#: as.c:704
#, c-format
-msgid "Copyright (C) 2021 Free Software Foundation, Inc.\n"
-msgstr "© Free Software Foundation, Inc., 2021\n"
+msgid "Copyright (C) 2022 Free Software Foundation, Inc.\n"
+msgstr "© Free Software Foundation, Inc., 2022\n"
-#: as.c:690
+#: as.c:705
#, c-format
msgid ""
"This program is free software; you may redistribute it under the terms of\n"
@@ -443,7 +467,7 @@ msgstr ""
"GNU General Public License верÑÑ–Ñ— 3 або пізнішої верÑÑ–Ñ—\n"
"Ðвторами цієї програми не надаєтьÑÑ Ð¶Ð¾Ð´Ð½Ð¸Ñ… гарантій.\n"
-#: as.c:695
+#: as.c:710
#, c-format
msgid ""
"This assembler was configured for a target of `%s' and default,\n"
@@ -452,112 +476,112 @@ msgstr ""
"Цей аÑемблер було налаштовано на Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«%s» Ñ– типовий\n"
"тип процеÑора «%s»'.\n"
-#: as.c:699
+#: as.c:714
#, c-format
msgid "This assembler was configured for a target of `%s'.\n"
msgstr "Цей аÑемблер було налаштовано на Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«%s».\n"
-#: as.c:707
+#: as.c:722
msgid "multiple emulation names specified"
msgstr "вказано декілька назв емулÑцій"
-#: as.c:709
+#: as.c:724
msgid "emulations not handled in this configuration"
msgstr "у цій конфігурації не передбачено підтримки емулÑції"
-#: as.c:714
+#: as.c:729
#, c-format
msgid "alias = %s\n"
msgstr "альтернативна назва = %s\n"
-#: as.c:715
+#: as.c:730
#, c-format
msgid "canonical = %s\n"
msgstr "канонічна назва = %s\n"
-#: as.c:716
+#: as.c:731
#, c-format
msgid "cpu-type = %s\n"
msgstr "тип процеÑора = %s\n"
-#: as.c:718
+#: as.c:733
#, c-format
msgid "format = %s\n"
msgstr "формат = %s\n"
-#: as.c:721
+#: as.c:736
#, c-format
msgid "bfd-target = %s\n"
msgstr "bfd-target = %s\n"
-#: as.c:738
+#: as.c:753
#, c-format
msgid "Invalid --compress-debug-sections option: `%s'"
msgstr "Ðекоректний параметр --compress-debug-sections: «%s»"
-#: as.c:741
+#: as.c:756
#, c-format
msgid "--compress-debug-sections=%s is unsupported"
msgstr "Підтримки --compress-debug-sections=%s не передбачено"
-#: as.c:766
+#: as.c:781
msgid "bad defsym; format is --defsym name=value"
msgstr "помилковий аргумент defsym; формат визначеннÑ: --defsym назва=значеннÑ"
-#: as.c:786
+#: as.c:801
msgid "no file name following -t option"
msgstr "піÑÐ»Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° -t не вказано назви файла"
-#: as.c:801
+#: as.c:816
#, c-format
msgid "failed to read instruction table %s\n"
msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ таблицю інÑтрукцій %s\n"
-#: as.c:823
+#: as.c:838
#, c-format
msgid "unknown DWARF option %s\n"
msgstr "невідомий параметр DWARF %s\n"
-#: as.c:874
+#: as.c:889
#, c-format
msgid "Invalid --gdwarf-cie-version `%s'"
msgstr "Ðекоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ --gdwarf-cie-version, «%s»"
-#: as.c:967
+#: as.c:982
#, c-format
msgid "Invalid --size-check= option: `%s'"
msgstr "Ðекоректний параметр --size-check=: «%s»"
-#: as.c:976
+#: as.c:991
#, c-format
msgid "Invalid --elf-stt-common= option: `%s'"
msgstr "Ðекоректний параметр --elf-stt-common=: «%s»"
-#: as.c:990
+#: as.c:1005
#, c-format
msgid "Invalid --generate-missing-build-notes option: `%s'"
msgstr "Ðекоректний параметр --generate-missing-build-notes: «%s»"
-#: as.c:1061
+#: as.c:1076
#, c-format
msgid "invalid listing option `%c'"
msgstr "некоректний параметр ÑпиÑку «%c»"
-#: as.c:1124
+#: as.c:1139
#, c-format
msgid "%s: total time in assembly: %ld.%06ld\n"
msgstr "%s: загальний Ñ‡Ð°Ñ Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ: %ld.%06ld\n"
-#: as.c:1288
+#: as.c:1303
msgid "libbfd ABI mismatch"
msgstr "невідповідніÑÑ‚ÑŒ двійкового інтерфейÑу libbfd"
-#: as.c:1333
+#: as.c:1348
#, c-format
msgid "The input '%s' and output '%s' files are the same"
msgstr "Файл вхідних даних «%s» Ñ” тим Ñамим, що Ñ– файл вихідних даних, «%s»"
-#: as.c:1443
+#: as.c:1458
#, c-format
msgid "%d warning"
msgid_plural "%d warnings"
@@ -566,7 +590,7 @@ msgstr[1] "%d попередженнÑ"
msgstr[2] "%d попереджень"
msgstr[3] "%d попередженнÑ"
-#: as.c:1445
+#: as.c:1460
#, c-format
msgid "%d error"
msgid_plural "%d errors"
@@ -575,12 +599,12 @@ msgstr[1] "%d помилки"
msgstr[2] "%d помилок"
msgstr[3] "%d помилка"
-#: as.c:1449
+#: as.c:1464
#, c-format
msgid "%s, treating warnings as errors"
msgstr "%s, вважаємо Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°Ð¼Ð¸"
-#: as.c:1460
+#: as.c:1475
#, c-format
msgid "%s, %s, generating bad object file\n"
msgstr "%s, %s, ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¾Ð³Ð¾ об’єктного файла\n"
@@ -594,33 +618,33 @@ msgstr "Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð¸Ð¿Ð°Ð´ÐºÑƒ %ld у Ñ€Ñдку %d файла «%s» Ñ
#. * We have a GROSS internal error.
#. * This should never happen.
#.
-#: atof-generic.c:437 config/tc-m68k.c:3503
+#: atof-generic.c:455 config/tc-m68k.c:3503
msgid "failed sanity check"
msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ð¹Ñ‚Ð¸ перевірку на коректніÑÑ‚ÑŒ"
#: cgen.c:106 config/tc-alpha.c:2095 config/tc-alpha.c:2119
-#: config/tc-arc.c:4058 config/tc-arc.c:4131 config/tc-d10v.c:550
-#: config/tc-d30v.c:534 config/tc-mn10200.c:1098 config/tc-mn10300.c:1752
-#: config/tc-ppc.c:3920 config/tc-s390.c:1334 config/tc-s390.c:1457
-#: config/tc-s390.c:1591 config/tc-v850.c:2538 config/tc-v850.c:2609
-#: config/tc-v850.c:2656 config/tc-v850.c:2693 config/tc-v850.c:2730
-#: config/tc-v850.c:2993
+#: config/tc-arc.c:4053 config/tc-arc.c:4126 config/tc-d10v.c:550
+#: config/tc-d30v.c:534 config/tc-mn10200.c:1091 config/tc-mn10300.c:1752
+#: config/tc-ppc.c:3939 config/tc-s390.c:1334 config/tc-s390.c:1457
+#: config/tc-s390.c:1591 config/tc-v850.c:2535 config/tc-v850.c:2606
+#: config/tc-v850.c:2653 config/tc-v850.c:2690 config/tc-v850.c:2727
+#: config/tc-v850.c:2990
msgid "too many fixups"
msgstr "занадто багато виправлень"
#: cgen.c:371 cgen.c:391 config/tc-d10v.c:461 config/tc-d30v.c:450
-#: config/tc-mn10200.c:1040 config/tc-mn10300.c:1677 config/tc-ppc.c:3443
-#: config/tc-s390.c:1318 config/tc-v850.c:2647 config/tc-v850.c:2681
-#: config/tc-v850.c:2721 config/tc-v850.c:2966 config/tc-z80.c:785
+#: config/tc-mn10200.c:1033 config/tc-mn10300.c:1677 config/tc-ppc.c:3462
+#: config/tc-s390.c:1318 config/tc-v850.c:2644 config/tc-v850.c:2678
+#: config/tc-v850.c:2718 config/tc-v850.c:2963 config/tc-z80.c:785
msgid "illegal operand"
msgstr "неприпуÑтимий операнд"
-#: cgen.c:395 config/tc-avr.c:900 config/tc-d10v.c:463 config/tc-d30v.c:452
+#: cgen.c:395 config/tc-avr.c:910 config/tc-d10v.c:463 config/tc-d30v.c:452
#: config/tc-h8300.c:496 config/tc-mcore.c:662 config/tc-microblaze.c:613
-#: config/tc-mmix.c:495 config/tc-mn10200.c:1043 config/tc-mn10300.c:1680
-#: config/tc-msp430.c:417 config/tc-ppc.c:3445 config/tc-s390.c:1323
-#: config/tc-sh.c:988 config/tc-v850.c:2651 config/tc-v850.c:2685
-#: config/tc-v850.c:2725 config/tc-v850.c:2969 config/tc-xgate.c:895
+#: config/tc-mmix.c:495 config/tc-mn10200.c:1036 config/tc-mn10300.c:1680
+#: config/tc-msp430.c:417 config/tc-ppc.c:3464 config/tc-s390.c:1323
+#: config/tc-sh.c:988 config/tc-v850.c:2648 config/tc-v850.c:2682
+#: config/tc-v850.c:2722 config/tc-v850.c:2966 config/tc-xgate.c:895
#: config/tc-z80.c:932 config/tc-z8k.c:349
msgid "missing operand"
msgstr "пропущено операнд"
@@ -633,23 +657,16 @@ msgstr "переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð° цьому операнді призведе
msgid "operand mask overflow"
msgstr "Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð¼Ð°Ñки операнда"
-#. We can't actually support subtracting a symbol.
-#: cgen.c:858 config/tc-arm.c:2076 config/tc-arm.c:11321 config/tc-arm.c:11373
-#: config/tc-arm.c:11655 config/tc-arm.c:12551 config/tc-arm.c:13691
-#: config/tc-arm.c:13731 config/tc-arm.c:14104 config/tc-arm.c:14146
-#: config/tc-arm.c:21386 config/tc-arm.c:21446 config/tc-avr.c:1551
-#: config/tc-avr.c:1563 config/tc-avr.c:1827 config/tc-cris.c:4054
-#: config/tc-d10v.c:1506 config/tc-d30v.c:1909 config/tc-ft32.c:574
-#: config/tc-ft32.c:587 config/tc-mips.c:9707 config/tc-mips.c:11017
-#: config/tc-mips.c:12314 config/tc-mips.c:12997 config/tc-nds32.c:7829
-#: config/tc-pru.c:746 config/tc-pru.c:756 config/tc-spu.c:960
-#: config/tc-spu.c:984 config/tc-tilegx.c:1479 config/tc-tilepro.c:1337
-#: config/tc-v850.c:3451 config/tc-vax.c:282 config/tc-xstormy16.c:482
-#: config/tc-xtensa.c:6009 config/tc-xtensa.c:13092 config/tc-z80.c:3856
+#: cgen.c:858 config/tc-arm.c:2054 config/tc-arm.c:11343 config/tc-arm.c:11395
+#: config/tc-arm.c:11683 config/tc-arm.c:12579 config/tc-arm.c:13719
+#: config/tc-arm.c:13759 config/tc-arm.c:14132 config/tc-arm.c:14174
+#: config/tc-arm.c:21420 config/tc-arm.c:21480 config/tc-mips.c:9707
+#: config/tc-mips.c:11017 config/tc-mips.c:12314 config/tc-mips.c:12997
+#: config/tc-spu.c:981 config/tc-xtensa.c:13092
msgid "expression too complex"
msgstr "вираз Ñ” надто Ñкладним"
-#: cgen.c:959 config/tc-ppc.c:7200 config/tc-s390.c:2372 config/tc-v850.c:3503
+#: cgen.c:959 config/tc-ppc.c:7467 config/tc-s390.c:2369 config/tc-v850.c:3499
#: config/tc-xstormy16.c:541
msgid "unresolved expression that must be resolved"
msgstr "невизначений вираз, Ñкий має бути визначено"
@@ -659,7 +676,7 @@ msgstr "невизначений вираз, Ñкий має бути визна
msgid "internal error: can't install fix for reloc type %d (`%s')"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñ‚Ð¸Ð¿Ñƒ переÑÑƒÐ²Ð°Ð½Ð½Ñ %d («%s») неможливе"
-#: cgen.c:1035 config/tc-nios2.c:1355 config/tc-pru.c:787
+#: cgen.c:1035 config/tc-nios2.c:1355 config/tc-pru.c:786
msgid "relocation is not supported"
msgstr "підтримки переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ðµ передбачено"
@@ -727,20 +744,24 @@ msgstr "тут розташовано початок незавершеного
msgid "here is the \"else\" of the unterminated conditional"
msgstr "тут розташовано «else» початок незавершеного умовного блоку"
-#: config/atof-ieee.c:140
+#: config/atof-ieee.c:148
msgid "cannot create floating-point number"
msgstr "не вдалоÑÑ Ñтворити чиÑло з рухомою крапкою"
-#: config/atof-ieee.c:318
+#: config/atof-ieee.c:335
msgid "NaNs are not supported by this target"
msgstr "Ðа цьому призначенні NaN не передбачено"
-#: config/atof-ieee.c:362 config/atof-ieee.c:407
+#: config/atof-ieee.c:354
+msgid "NaN flavors are not supported by this target"
+msgstr "Ðа цьому призначенні різновиди NaN не передбачено"
+
+#: config/atof-ieee.c:392
msgid "Infinities are not supported by this target"
msgstr "Ðа цьому призначенні не передбачено неÑкінченні значеннÑ"
-#: config/atof-ieee.c:829 config/atof-vax.c:449 config/tc-arm.c:1322
-#: config/tc-ia64.c:11600 config/tc-tic30.c:1241 config/tc-tic4x.c:2565
+#: config/atof-ieee.c:825 config/atof-vax.c:449 config/tc-arm.c:1284
+#: config/tc-ia64.c:11595 config/tc-tic30.c:1241 config/tc-tic4x.c:2567
msgid "Unrecognized or unsupported floating point constant"
msgstr "Ðевідома або непідтримувана конÑтанта з рухомою крапкою"
@@ -887,7 +908,7 @@ msgstr "Ðе вдалоÑÑ Ð²Ñтановити маÑки регіÑтрів"
msgid "bad .common segment %s"
msgstr "помилковий Ñегмент .common %s"
-#: config/obj-elf.c:420 config/tc-aarch64.c:2009
+#: config/obj-elf.c:420 config/tc-aarch64.c:1968
msgid "Missing symbol name in directive"
msgstr "У директиві не виÑтачає назви Ñимволу"
@@ -910,266 +931,271 @@ msgstr "вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ñ… атрибутів роÐ
#. assembly might get the section type wrong; Even high
#. profile projects like glibc have done so in the past.
#. So don't error in this case.
-#: config/obj-elf.c:797
+#: config/obj-elf.c:813
#, c-format
msgid "ignoring changed section type for %s"
msgstr "ігноруємо змінений тип розділу Ð´Ð»Ñ %s"
#. Do error when assembly isn't self-consistent.
-#: config/obj-elf.c:800
+#: config/obj-elf.c:816
#, c-format
msgid "changed section type for %s"
msgstr "змінений тип розділу Ð´Ð»Ñ %s"
-#: config/obj-elf.c:815
+#: config/obj-elf.c:831
#, c-format
msgid "ignoring changed section attributes for %s"
msgstr "ігноруємо змінені атрибути розділу Ð´Ð»Ñ %s"
-#: config/obj-elf.c:817
+#: config/obj-elf.c:833
#, c-format
msgid "changed section attributes for %s"
msgstr "змінені атрибути розділу Ð´Ð»Ñ %s"
-#: config/obj-elf.c:825
+#: config/obj-elf.c:841
#, c-format
msgid "changed section entity size for %s"
msgstr "змінений розмір елемента розділу розділу Ð´Ð»Ñ %s"
-#: config/obj-elf.c:896
+#: config/obj-elf.c:910
msgid "unrecognized .section attribute: want a,e,o,w,x,M,S,G,T or number"
msgstr "невідомий атрибут .section: мало бути вказано атрибут з набору a,e,o,w,x,M,S,G,T або чиÑло"
-#: config/obj-elf.c:980
+#: config/obj-elf.c:994
msgid "extraneous characters at end of numeric section type"
msgstr "зайві Ñимволи наприкінці типу чиÑлового розділу"
-#: config/obj-elf.c:986 read.c:3010
+#: config/obj-elf.c:1000 read.c:3010
msgid "unrecognized section type"
msgstr "невідомий тип розділу"
-#: config/obj-elf.c:1018
+#: config/obj-elf.c:1032
msgid "unrecognized section attribute"
msgstr "невідомий атрибути розділу"
-#: config/obj-elf.c:1049 config/tc-alpha.c:4206
+#: config/obj-elf.c:1063 config/tc-alpha.c:4206
msgid "missing name"
msgstr "не вказано назву"
-#: config/obj-elf.c:1092
+#: config/obj-elf.c:1106
msgid "group name not parseable"
msgstr "не вдалоÑÑ Ð¾Ð±Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸ назву групи"
-#: config/obj-elf.c:1098
+#: config/obj-elf.c:1112
#, c-format
msgid "section %s already has a group (%s)"
msgstr "розділ %s вже міÑтить групу (%s)"
-#: config/obj-elf.c:1153
+#: config/obj-elf.c:1167
#, c-format
msgid "section name '%s' already defined as another symbol"
msgstr "назву розділу «%s» вже визначено Ñк інший Ñимвол"
-#: config/obj-elf.c:1245
+#: config/obj-elf.c:1259
msgid "invalid merge entity size"
msgstr "некоректний розмір запиÑу об’єднаннÑ"
-#: config/obj-elf.c:1252
+#: config/obj-elf.c:1266
msgid "entity size for SHF_MERGE not specified"
msgstr "розмір логічного об’єкта Ð´Ð»Ñ SHF_MERGE не вказано"
-#: config/obj-elf.c:1280
+#: config/obj-elf.c:1294
msgid "? section flag ignored with G present"
msgstr "прапорець розділу ? проігноровано, оÑкільки вказано G"
-#: config/obj-elf.c:1305
+#: config/obj-elf.c:1319
msgid "group name for SHF_GROUP not specified"
msgstr "назву групи Ð´Ð»Ñ SHF_GROUP не вказано"
-#: config/obj-elf.c:1331
+#: config/obj-elf.c:1345
#, c-format
msgid "unsupported mbind section info: %s"
msgstr "непідтримувані дані розділу mbind: %s"
-#: config/obj-elf.c:1384
+#: config/obj-elf.c:1398
#, c-format
msgid "unsupported section id: %s"
msgstr "непідтримуваний ідентифікатор розділу: %s"
-#: config/obj-elf.c:1409
+#: config/obj-elf.c:1423
msgid "character following name is not '#'"
msgstr "Ñимвол, що йде за назвою не Ñ” Ñимволом «#»"
-#: config/obj-elf.c:1436
+#: config/obj-elf.c:1450
#, c-format
msgid "SHF_ALLOC isn't set for GNU_MBIND section: %s"
msgstr "SHF_ALLOC не вÑтановлено Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ GNU_MBIND: %s"
-#: config/obj-elf.c:1443
+#: config/obj-elf.c:1457
#, c-format
msgid "%s section is supported only by GNU and FreeBSD targets"
msgstr "підтримку розділу %s передбачено лише Ð´Ð»Ñ Ñ†Ñ–Ð»ÐµÐ¹ GNU Ñ– FreeBSD"
-#: config/obj-elf.c:1584
+#: config/obj-elf.c:1598
msgid ".previous without corresponding .section; ignored"
msgstr ".previous без відповідного .section; ігноруємо"
-#: config/obj-elf.c:1610
+#: config/obj-elf.c:1624
msgid ".popsection without corresponding .pushsection; ignored"
msgstr ".popsection без відповідного .pushsection; ігноруємо"
-#: config/obj-elf.c:1654 config/obj-elf.c:1749
+#: config/obj-elf.c:1668 config/obj-elf.c:1763
#, c-format
msgid "missing version name in `%s' for symbol `%s'"
msgstr "у «%s» не вказано назву верÑÑ–Ñ— Ð´Ð»Ñ Ñимволу «%s»"
-#: config/obj-elf.c:1673
+#: config/obj-elf.c:1687
#, c-format
msgid "only one version name with `@@@' is allowed for symbol `%s'"
msgstr "можна викориÑтовувати лише одну назву верÑÑ–Ñ— з «@@@» Ð´Ð»Ñ Ñимволу «%s»"
-#: config/obj-elf.c:1681
+#: config/obj-elf.c:1695
#, c-format
msgid "invalid version name '%s' for symbol `%s'"
msgstr "некоректна назва верÑÑ–Ñ— «%s» Ð´Ð»Ñ Ñимволу «%s»"
-#: config/obj-elf.c:1723
+#: config/obj-elf.c:1737
msgid "expected comma after name in .symver"
msgstr "піÑÐ»Ñ Ð½Ð°Ð·Ð²Ð¸ у .symver мало бути вказано кому"
-#: config/obj-elf.c:1740 config/obj-elf.c:2644
+#: config/obj-elf.c:1754 config/obj-elf.c:2658
#, c-format
msgid "`%s' can't be versioned to common symbol '%s'"
msgstr "«%s» не можна прирівнювати верÑÑ–ÑŽ загального Ñимволу «%s»"
-#: config/obj-elf.c:1817
+#: config/obj-elf.c:1831
#, c-format
msgid "expected `%s' to have already been set for .vtable_inherit"
msgstr "очікувалоÑÑ, що «%s» вже було вÑтановлено Ð´Ð»Ñ .vtable_inherit"
-#: config/obj-elf.c:1827
+#: config/obj-elf.c:1841
msgid "expected comma after name in .vtable_inherit"
msgstr "у .vtable_inherit піÑÐ»Ñ Ð½Ð°Ð·Ð²Ð¸ мало бути додано кому"
-#: config/obj-elf.c:1888
+#: config/obj-elf.c:1902
msgid "expected comma after name in .vtable_entry"
msgstr "піÑÐ»Ñ Ð½Ð°Ð·Ð²Ð¸ у .symver мало бути вказано кому"
-#: config/obj-elf.c:2027
+#: config/obj-elf.c:2041
#, c-format
msgid "Attribute name not recognised: %s"
msgstr "Ðевідома назва атрибута: %s"
-#: config/obj-elf.c:2044
+#: config/obj-elf.c:2058
msgid "expected numeric constant"
msgstr "мало бути вказано чиÑлову Ñталу"
-#: config/obj-elf.c:2053 config/tc-arm.c:7048
+#: config/obj-elf.c:2067 config/tc-arm.c:7056
msgid "expected comma"
msgstr "мало бути вказано кому"
-#: config/obj-elf.c:2086
+#: config/obj-elf.c:2100
msgid "bad string constant"
msgstr "помилкова Ñ€Ñдкова Ñтала"
-#: config/obj-elf.c:2090
+#: config/obj-elf.c:2104
msgid "expected <tag> , <value>"
msgstr "мало бути <теґ> , <значеннÑ>"
-#: config/obj-elf.c:2223
+#: config/obj-elf.c:2237
msgid "expected quoted string"
msgstr "мало бути вказано Ñ€Ñдок у лапках"
-#: config/obj-elf.c:2243
+#: config/obj-elf.c:2257
#, c-format
msgid "expected comma after name `%s' in .size directive"
msgstr "у директиві .size мало бути викориÑтано кому піÑÐ»Ñ Ð½Ð°Ð·Ð²Ð¸ «%s»"
-#: config/obj-elf.c:2252
+#: config/obj-elf.c:2266
msgid "missing expression in .size directive"
msgstr "у директиві .size не виÑтачає виразу"
-#: config/obj-elf.c:2372
+#: config/obj-elf.c:2386
#, c-format
msgid "symbol '%s' is already defined"
msgstr "Ñимвол «%s» вже визначено"
-#: config/obj-elf.c:2392
+#: config/obj-elf.c:2406
#, c-format
msgid "symbol type \"%s\" is supported only by GNU and FreeBSD targets"
msgstr "підтримку типу Ñимволів «%s» передбачено лише Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½ÑŒ GNU та FreeBSD"
-#: config/obj-elf.c:2396
+#: config/obj-elf.c:2410
#, c-format
msgid "symbol type \"%s\" is not supported by MIPS targets"
msgstr "підтримки типу Ñимволів «%s» Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½ÑŒ MIPS не передбачено"
-#: config/obj-elf.c:2408
+#: config/obj-elf.c:2422
#, c-format
msgid "symbol type \"%s\" is supported only by GNU targets"
msgstr "підтримку типу Ñимволів «%s» передбачено лише Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½ÑŒ GNU"
-#: config/obj-elf.c:2418
+#: config/obj-elf.c:2432
#, c-format
msgid "unrecognized symbol type \"%s\""
msgstr "нерозпізнаний тип Ñимволу, «%s»"
-#: config/obj-elf.c:2439
+#: config/obj-elf.c:2453
#, c-format
msgid "cannot change type of common symbol '%s'"
msgstr "неможливо змінити тип загального Ñимволу «%s»"
-#: config/obj-elf.c:2451
+#: config/obj-elf.c:2465
#, c-format
msgid "symbol '%s' already has its type set"
msgstr "Ð´Ð»Ñ Ñимволу «%s» тип вже вÑтановлено"
-#: config/obj-elf.c:2617 config/obj-elf.c:2620
+#: config/obj-elf.c:2631 config/obj-elf.c:2634
#, c-format
msgid ".size expression for %s does not evaluate to a constant"
msgstr "вираз .size Ð´Ð»Ñ %s не дорівнює Ñталій величині"
-#: config/obj-elf.c:2716 ecoff.c:3578
+#: config/obj-elf.c:2723
+#, c-format
+msgid "symbol '%s' with multiple versions cannot be used in relocation"
+msgstr "Ñимвол «%s» із багатьма верÑÑ–Ñми не можна викориÑтовувати у переÑуванні"
+
+#: config/obj-elf.c:2741 ecoff.c:3578
#, c-format
msgid "symbol `%s' can not be both weak and common"
msgstr "Ñимвол «%s» не може бути одразу Ñлабким Ñ– загальним"
-#: config/obj-elf.c:2751
+#: config/obj-elf.c:2789
#, c-format
msgid "undefined linked-to symbol `%s' on section `%s'"
msgstr "невизначний пов'Ñзаний (linked-to) Ñимвол «%s» у розділі «%s»"
-#: config/obj-elf.c:2829
+#: config/obj-elf.c:2867
#, c-format
msgid "assuming all members of group `%s' are COMDAT"
msgstr "припуÑкаємо, що уÑÑ– учаÑники групи «%s» Ñ” COMDAT"
-#: config/obj-elf.c:2841
+#: config/obj-elf.c:2879
#, c-format
msgid "can't create group: %s"
msgstr "не вдалоÑÑ Ñтворити групу: %s"
-#: config/obj-elf.c:2918
+#: config/obj-elf.c:2956
#, c-format
msgid "invalid attempt to declare external version name as default in symbol `%s'"
msgstr "некоректна Ñпроба оголоÑити назву зовнішньої верÑÑ–Ñ— Ñк типову у Ñимволі «%s»"
-#: config/obj-elf.c:2928
+#: config/obj-elf.c:2966
#, c-format
msgid "multiple versions [`%s'|`%s'] for symbol `%s'"
msgstr "декілька верÑій [«%s»|«%s»] Ð´Ð»Ñ Ñимволу «%s»"
-#: config/obj-elf.c:3020
+#: config/obj-elf.c:3058
#, c-format
msgid "failed to set up debugging information: %s"
msgstr "не вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ діагноÑтичну інформацію: %s"
-#: config/obj-elf.c:3040
+#: config/obj-elf.c:3078
#, c-format
msgid "can't start writing .mdebug section: %s"
msgstr "не вдалоÑÑ Ñ€Ð¾Ð·Ð¿Ð¾Ñ‡Ð°Ñ‚Ð¸ Ð·Ð°Ð¿Ð¸Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ .mdebug: %s"
-#: config/obj-elf.c:3048
+#: config/obj-elf.c:3086
#, c-format
msgid "could not write .mdebug section: %s"
msgstr "не вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати розділ .mdebug: %s"
@@ -1218,7 +1244,7 @@ msgstr "неочікувана Ñ–Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ Ñ‰Ð¾Ð´Ð¾ розміру ро
msgid "missing sizeof_stub expression"
msgstr "пропущено вираз sizeof_stub"
-#: config/obj-macho.c:478 config/tc-ia64.c:1080 config/tc-ia64.c:11761
+#: config/obj-macho.c:478 config/tc-ia64.c:1081 config/tc-ia64.c:11756
#: config/tc-score.c:6093 expr.c:1213 read.c:1783
msgid "expected symbol name"
msgstr "мала бути назва Ñимволу"
@@ -1231,14 +1257,14 @@ msgstr "помилковий або неÑпрощуваний абÑолютнÐ
msgid "missing size expression"
msgstr "не визначає виразу розміру"
-#: config/obj-macho.c:506 config/tc-ia64.c:1115 read.c:1827
+#: config/obj-macho.c:506 config/tc-ia64.c:1116 read.c:1827
#, c-format
msgid "size (%ld) out of range, ignored"
msgstr "розмір (%ld) лежить поза межами припуÑтимого діапазону, проігноровано"
-#: config/obj-macho.c:516 config/tc-score.c:6248 dwarf2dbg.c:1309 ecoff.c:3346
-#: read.c:1839 read.c:1942 read.c:2693 read.c:3266 read.c:3772 symbols.c:495
-#: symbols.c:590
+#: config/obj-macho.c:516 config/tc-score.c:6248 dwarf2dbg.c:1394 ecoff.c:3346
+#: read.c:1839 read.c:1942 read.c:2693 read.c:3266 read.c:3860 symbols.c:515
+#: symbols.c:610
#, c-format
msgid "symbol `%s' is already defined"
msgstr "Ñимвол «%s» вже визначено"
@@ -1391,853 +1417,955 @@ msgstr "Можна викориÑтовувати лише один пÑевдо
msgid "attaching copyright header %s: %s"
msgstr "долучаємо заголовок з авторÑькими правами %s: %s"
-#: config/tc-aarch64.c:374
+#: config/tc-aarch64.c:381
msgid "integer 32-bit register expected"
msgstr "мало бути викориÑтано цілий 32-бітовий регіÑÑ‚Ñ€"
-#: config/tc-aarch64.c:377
+#: config/tc-aarch64.c:384
msgid "integer 64-bit register expected"
msgstr "мало бути вказано регіÑÑ‚Ñ€ цілих 64-бітових чиÑел"
-#: config/tc-aarch64.c:380
+#: config/tc-aarch64.c:387
msgid "integer register expected"
msgstr "мало бути вказано регіÑÑ‚Ñ€ цілих чиÑел"
-#: config/tc-aarch64.c:383
+#: config/tc-aarch64.c:390
msgid "64-bit integer or SP register expected"
msgstr "мало бути вказано 64-бітове ціле чиÑло, нуль або регіÑÑ‚Ñ€ SP"
-#: config/tc-aarch64.c:386 config/tc-mcore.c:840 config/tc-mcore.c:1356
+#: config/tc-aarch64.c:393 config/tc-mcore.c:840 config/tc-mcore.c:1356
#: config/tc-mcore.c:1410
msgid "base register expected"
msgstr "мало бути вказано базовий регіÑÑ‚Ñ€"
-#: config/tc-aarch64.c:389
+#: config/tc-aarch64.c:396
msgid "integer or zero register expected"
msgstr "мало бути вказано цілий або нульовий регіÑÑ‚Ñ€"
-#: config/tc-aarch64.c:392
+#: config/tc-aarch64.c:399
msgid "offset register expected"
msgstr "мало бути вказано регіÑÑ‚Ñ€ зÑуву"
-#: config/tc-aarch64.c:395
+#: config/tc-aarch64.c:402
msgid "integer or SP register expected"
msgstr "мало бути вказано ціле чиÑло або регіÑÑ‚Ñ€ SP"
-#: config/tc-aarch64.c:398
+#: config/tc-aarch64.c:405
msgid "integer, zero or SP register expected"
msgstr "мало бути вказано ціле чиÑло, нуль або регіÑÑ‚Ñ€ SP"
-#: config/tc-aarch64.c:401
+#: config/tc-aarch64.c:408
msgid "8-bit SIMD scalar register expected"
msgstr "мало бути вказано 8-бітовий ÑкалÑрний регіÑÑ‚Ñ€ SIMD"
-#: config/tc-aarch64.c:404
+#: config/tc-aarch64.c:411
msgid "16-bit SIMD scalar or floating-point half precision register expected"
msgstr "мало бути вказано 16-бітовий ÑкалÑрний регіÑÑ‚Ñ€ SIMD або регіÑÑ‚Ñ€ чиÑла із рухомою крапкою половинної точноÑÑ‚Ñ–"
-#: config/tc-aarch64.c:408
+#: config/tc-aarch64.c:415
msgid "32-bit SIMD scalar or floating-point single precision register expected"
msgstr "мало бути вказано 32-бітовий ÑкалÑрний регіÑÑ‚Ñ€ SIMD або регіÑÑ‚Ñ€ чиÑла із рухомою крапкою одинарної точноÑÑ‚Ñ–"
-#: config/tc-aarch64.c:412
+#: config/tc-aarch64.c:419
msgid "64-bit SIMD scalar or floating-point double precision register expected"
msgstr "мало бути вказано 64-бітовий ÑкалÑрний регіÑÑ‚Ñ€ SIMD або регіÑÑ‚Ñ€ чиÑла із рухомою крапкою подвійної точноÑÑ‚Ñ–"
-#: config/tc-aarch64.c:416
+#: config/tc-aarch64.c:423
msgid "128-bit SIMD scalar or floating-point quad precision register expected"
msgstr "мало бути вказано 128-бітовий ÑкалÑрний регіÑÑ‚Ñ€ SIMD або регіÑÑ‚Ñ€ чиÑла із рухомою крапкою почетверенної точноÑÑ‚Ñ–"
-#: config/tc-aarch64.c:421 config/tc-arm.c:4746
+#: config/tc-aarch64.c:428 config/tc-arm.c:4750
msgid "register expected"
msgstr "мало бути вказано регіÑÑ‚Ñ€"
#. any [BHSDQ]P FP
-#: config/tc-aarch64.c:424
+#: config/tc-aarch64.c:431
msgid "SIMD scalar or floating-point register expected"
msgstr "мало бути вказано ÑкалÑрний регіÑÑ‚Ñ€ SIMD або регіÑÑ‚Ñ€ чиÑла із рухомою крапкою"
#. any V reg
-#: config/tc-aarch64.c:427
+#: config/tc-aarch64.c:434
msgid "vector register expected"
msgstr "мало бути вказано векторний регіÑÑ‚Ñ€"
-#: config/tc-aarch64.c:430
+#: config/tc-aarch64.c:437
msgid "SVE vector register expected"
msgstr "мало бути вказано векторний регіÑÑ‚Ñ€ SVE"
-#: config/tc-aarch64.c:433
+#: config/tc-aarch64.c:440
msgid "SVE predicate register expected"
msgstr "Мало бути вказано предикативний регіÑÑ‚Ñ€ SVE"
-#: config/tc-aarch64.c:436
+#: config/tc-aarch64.c:443
#, c-format
msgid "invalid register type %d"
msgstr "некоректний тип регіÑтра, %d"
-#: config/tc-aarch64.c:611 config/tc-aarch64.c:613 config/tc-arm.c:1196
+#: config/tc-aarch64.c:618 config/tc-aarch64.c:620 config/tc-arm.c:1201
#: config/tc-score.c:6492 expr.c:1379 read.c:2675
msgid "bad expression"
msgstr "помилковий вираз"
-#: config/tc-aarch64.c:624 config/tc-sparc.c:3376
+#: config/tc-aarch64.c:631 config/tc-sparc.c:3376
msgid "bad segment"
msgstr "помилковий Ñегмент"
-#: config/tc-aarch64.c:659 config/tc-arm.c:1262
-msgid "invalid floating point number"
-msgstr "некоректне чиÑло з рухомою крапкою"
-
-#: config/tc-aarch64.c:890
+#: config/tc-aarch64.c:849
#, c-format
msgid "bad size %d in vector width specifier"
msgstr "помилковий розмір %d у Ñпецифікаторі ширини вектора"
-#: config/tc-aarch64.c:923
+#: config/tc-aarch64.c:882
#, c-format
msgid "unexpected character `%c' in element size"
msgstr "неочікуваний Ñимвол «%c» у розмірі елемента"
-#: config/tc-aarch64.c:925
+#: config/tc-aarch64.c:884
msgid "missing element size"
msgstr "не вказано розмір елемента"
-#: config/tc-aarch64.c:934
+#: config/tc-aarch64.c:893
#, c-format
msgid "invalid element size %d and vector size combination %c"
msgstr "некоректне Ð¿Ð¾Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ елемента %d та розміру вектора %c"
-#: config/tc-aarch64.c:969
+#: config/tc-aarch64.c:928
#, c-format
msgid "unexpected character `%c' in predication type"
msgstr "неочікуваний Ñимвол, «%c», у предикативному типі"
-#: config/tc-aarch64.c:972
+#: config/tc-aarch64.c:931
msgid "missing predication type"
msgstr "не вказано предикативного типу"
-#: config/tc-aarch64.c:1067
+#: config/tc-aarch64.c:1026
msgid "this type of register can't be indexed"
msgstr "цей тип регіÑтрів не може бути індекÑовано"
-#: config/tc-aarch64.c:1073
+#: config/tc-aarch64.c:1032
msgid "index not allowed inside register list"
msgstr "не можна викориÑтовувати індекÑÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ ÑпиÑку регіÑтрів"
-#: config/tc-aarch64.c:1084 config/tc-aarch64.c:2054 config/tc-aarch64.c:2256
-#: config/tc-arm.c:1816 config/tc-arm.c:4022 config/tc-arm.c:5196
-#: config/tc-arm.c:7335
+#: config/tc-aarch64.c:1043 config/tc-aarch64.c:2013 config/tc-aarch64.c:2215
+#: config/tc-arm.c:1778 config/tc-arm.c:4000 config/tc-arm.c:5204
+#: config/tc-arm.c:7345
msgid "constant expression required"
msgstr "потрібен Ñталий вираз"
#. Indexed vector register expected.
-#: config/tc-aarch64.c:1096
+#: config/tc-aarch64.c:1055
msgid "indexed vector register expected"
msgstr "мало бути вказано індекÑований векторний регіÑÑ‚Ñ€"
-#: config/tc-aarch64.c:1103
+#: config/tc-aarch64.c:1062
msgid "invalid use of vector register"
msgstr "некоректне викориÑÑ‚Ð°Ð½Ð½Ñ Ð²ÐµÐºÑ‚Ð¾Ñ€Ð½Ð¾Ð³Ð¾ регіÑтра"
-#: config/tc-aarch64.c:1195 config/tc-arm.c:2132
+#: config/tc-aarch64.c:1154 config/tc-arm.c:2110
msgid "expecting {"
msgstr "мало бути знайдено {"
-#: config/tc-aarch64.c:1220
+#: config/tc-aarch64.c:1179
msgid "invalid vector register in list"
msgstr "некоректний векторний регіÑÑ‚Ñ€ у ÑпиÑку"
-#: config/tc-aarch64.c:1227
+#: config/tc-aarch64.c:1186
msgid "invalid scalar register in list"
msgstr "некоректний ÑкалÑрний регіÑÑ‚Ñ€ у ÑпиÑку"
-#: config/tc-aarch64.c:1240
+#: config/tc-aarch64.c:1199
msgid "invalid range in vector register list"
msgstr "некоректний діапазон у ÑпиÑку векторних регіÑтрів"
-#: config/tc-aarch64.c:1253
+#: config/tc-aarch64.c:1212
msgid "type mismatch in vector register list"
msgstr "невідповідніÑÑ‚ÑŒ типів у ÑпиÑку векторних регіÑтрів"
-#: config/tc-aarch64.c:1270
+#: config/tc-aarch64.c:1229
msgid "end of vector register list not found"
msgstr "кінець ÑпиÑку векторних регіÑтрів не знайдено"
-#: config/tc-aarch64.c:1287
+#: config/tc-aarch64.c:1246
msgid "constant expression required."
msgstr "потрібен Ñталий вираз."
-#: config/tc-aarch64.c:1297
+#: config/tc-aarch64.c:1256
msgid "expected index"
msgstr "очікуваний індекÑ"
-#: config/tc-aarch64.c:1304
+#: config/tc-aarch64.c:1263
msgid "too many registers in vector register list"
msgstr "занадто багато регіÑтрів у ÑпиÑку векторних регіÑтрів"
-#: config/tc-aarch64.c:1309
+#: config/tc-aarch64.c:1268
msgid "empty vector register list"
msgstr "порожній ÑпиÑок векторних регіÑтрів"
-#: config/tc-aarch64.c:1331 config/tc-arm.c:2568
+#: config/tc-aarch64.c:1290 config/tc-arm.c:2546
#, c-format
msgid "ignoring attempt to redefine built-in register '%s'"
msgstr "ігноруємо Ñпробу перевизначити вбудований регіÑÑ‚Ñ€ «%s»"
-#: config/tc-aarch64.c:1337 config/tc-arm.c:2573
+#: config/tc-aarch64.c:1296 config/tc-arm.c:2551
#, c-format
msgid "ignoring redefinition of register alias '%s'"
msgstr "ігноруємо Ð¿ÐµÑ€ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð°Ð»ÑŒÑ‚ÐµÑ€Ð½Ð°Ñ‚Ð¸Ð²Ð½Ð¾Ñ— назви регіÑтра «%s»"
-#: config/tc-aarch64.c:1382 config/tc-arm.c:2638
+#: config/tc-aarch64.c:1341 config/tc-arm.c:2616
#, c-format
msgid "unknown register '%s' -- .req ignored"
msgstr "невідомий регіÑÑ‚Ñ€ «%s» -- .req проігноровано"
-#: config/tc-aarch64.c:1440 config/tc-arm.c:2846
+#: config/tc-aarch64.c:1399 config/tc-arm.c:2824
msgid "invalid syntax for .req directive"
msgstr "некоректний ÑинтакÑÐ¸Ñ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ð¸ .req"
-#: config/tc-aarch64.c:1465 config/tc-arm.c:2884
+#: config/tc-aarch64.c:1424 config/tc-arm.c:2862
msgid "invalid syntax for .unreq directive"
msgstr "некоректний ÑинтакÑÐ¸Ñ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ð¸ .unreq"
-#: config/tc-aarch64.c:1471 config/tc-arm.c:2891
+#: config/tc-aarch64.c:1430 config/tc-arm.c:2869
#, c-format
msgid "unknown register alias '%s'"
msgstr "невідома альтернативна назва регіÑтра, «%s»"
-#: config/tc-aarch64.c:1473
+#: config/tc-aarch64.c:1432
#, c-format
msgid "ignoring attempt to undefine built-in register '%s'"
msgstr "ігноруємо Ñпробу ÑкаÑувати Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð±ÑƒÐ´Ð¾Ð²Ð°Ð½Ð¾Ð³Ð¾ регіÑтра «%s»"
-#: config/tc-aarch64.c:1797 config/tc-arm.c:3634 config/tc-arm.c:3661
-#: config/tc-arm.c:3674
+#: config/tc-aarch64.c:1756 config/tc-arm.c:3612 config/tc-arm.c:3639
+#: config/tc-arm.c:3652
msgid "literal pool overflow"
msgstr "Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð±ÑƒÑ„ÐµÑ€Ð° літералів"
-#: config/tc-aarch64.c:1979 config/tc-aarch64.c:6398 config/tc-arm.c:3895
-#: config/tc-arm.c:7766
+#: config/tc-aarch64.c:1938 config/tc-aarch64.c:6917 config/tc-arm.c:3873
+#: config/tc-arm.c:7778
msgid "unrecognized relocation suffix"
msgstr "нерозпізнаний ÑÑƒÑ„Ñ–ÐºÑ Ð¿ÐµÑ€ÐµÑуваннÑ"
-#: config/tc-aarch64.c:1981
+#: config/tc-aarch64.c:1940
msgid "unimplemented relocation suffix"
msgstr "нереалізований ÑÑƒÑ„Ñ–ÐºÑ Ð¿ÐµÑ€ÐµÐ¼Ñ–Ñ‰ÐµÐ½Ð½Ñ"
-#: config/tc-aarch64.c:2223 config/tc-aarch64.c:2414 config/tc-aarch64.c:2458
+#: config/tc-aarch64.c:2182 config/tc-aarch64.c:2373 config/tc-aarch64.c:2417
#: config/tc-csky.c:2314
msgid "immediate operand required"
msgstr "потрібен безпоÑередній операнд"
-#: config/tc-aarch64.c:2232
+#: config/tc-aarch64.c:2191
msgid "missing immediate expression"
msgstr "пропущено безпоÑередній вираз"
-#: config/tc-aarch64.c:2438 config/tc-aarch64.c:6221 config/tc-aarch64.c:6241
+#: config/tc-aarch64.c:2397 config/tc-aarch64.c:6740 config/tc-aarch64.c:6760
msgid "invalid floating-point constant"
msgstr "некоректна Ñтала з рухомою комою"
-#: config/tc-aarch64.c:3241 config/tc-arm.c:5536 config/tc-arm.c:5546
+#: config/tc-aarch64.c:3200 config/tc-arm.c:5544 config/tc-arm.c:5554
msgid "shift expression expected"
msgstr "мало бути вказано вираз зÑуву"
-#: config/tc-aarch64.c:3249
+#: config/tc-aarch64.c:3208
msgid "shift operator expected"
msgstr "мало бути викориÑтано оператор зÑуву"
-#: config/tc-aarch64.c:3257
+#: config/tc-aarch64.c:3216
msgid "invalid use of 'MSL'"
msgstr "некоректне викориÑÑ‚Ð°Ð½Ð½Ñ Â«MSL»"
-#: config/tc-aarch64.c:3265
+#: config/tc-aarch64.c:3224
msgid "invalid use of 'MUL'"
msgstr "некоректне викориÑÑ‚Ð°Ð½Ð½Ñ Â«MUL»"
-#: config/tc-aarch64.c:3274
+#: config/tc-aarch64.c:3233
msgid "extending shift is not permitted"
msgstr "розширювальний зÑув заборонено"
-#: config/tc-aarch64.c:3282
+#: config/tc-aarch64.c:3241
msgid "'ROR' shift is not permitted"
msgstr "зÑув «ROR» заборонено"
-#: config/tc-aarch64.c:3290
+#: config/tc-aarch64.c:3249
msgid "only 'LSL' shift is permitted"
msgstr "дозволено лише зÑув «LSL»"
-#: config/tc-aarch64.c:3298
+#: config/tc-aarch64.c:3257
msgid "only 'MUL' is permitted"
msgstr "можна викориÑтовувати лише «MUL»"
-#: config/tc-aarch64.c:3316
+#: config/tc-aarch64.c:3275
msgid "only 'MUL VL' is permitted"
msgstr "можна викориÑтовувати лише «MUL VL»"
-#: config/tc-aarch64.c:3324
+#: config/tc-aarch64.c:3283
msgid "invalid shift for the register offset addressing mode"
msgstr "некоректний зÑув Ð´Ð»Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ñƒ адреÑÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ñ–Ð´Ñтупів регіÑтрів"
-#: config/tc-aarch64.c:3332
+#: config/tc-aarch64.c:3291
msgid "invalid shift operator"
msgstr "некоректний оператор зÑуву"
-#: config/tc-aarch64.c:3366
+#: config/tc-aarch64.c:3325
msgid "missing shift amount"
msgstr "не вказано величину зÑуву"
-#: config/tc-aarch64.c:3373
+#: config/tc-aarch64.c:3332
msgid "constant shift amount required"
msgstr "мало бути вказано Ñталу величину зÑуву"
-#: config/tc-aarch64.c:3382
+#: config/tc-aarch64.c:3341
msgid "shift amount out of range 0 to 63"
msgstr "величину зÑуву поза межами діапазону від 0 до 63"
-#: config/tc-aarch64.c:3432
+#: config/tc-aarch64.c:3391
msgid "unexpected shift operator"
msgstr "неочікуваний оператор зÑуву"
-#: config/tc-aarch64.c:3468
+#: config/tc-aarch64.c:3427
msgid "unexpected register in the immediate operand"
msgstr "неочікуваний регіÑÑ‚Ñ€ у безпоÑередньому операнді"
-#: config/tc-aarch64.c:3493
+#: config/tc-aarch64.c:3452
msgid "integer register expected in the extended/shifted operand register"
msgstr "мало бути вказано регіÑÑ‚Ñ€ цілих чиÑел у регіÑтрі розширеного або зÑунутого операнда"
-#: config/tc-aarch64.c:3528 config/tc-aarch64.c:3666 config/tc-aarch64.c:3799
-#: config/tc-aarch64.c:3983 config/tc-aarch64.c:4025
+#: config/tc-aarch64.c:3487 config/tc-aarch64.c:3625 config/tc-aarch64.c:3758
+#: config/tc-aarch64.c:3958 config/tc-aarch64.c:4000
msgid "unknown relocation modifier"
msgstr "невідомий модифікатор переÑуваннÑ"
-#: config/tc-aarch64.c:3535 config/tc-aarch64.c:3685 config/tc-aarch64.c:3806
-#: config/tc-aarch64.c:3990 config/tc-aarch64.c:4032
+#: config/tc-aarch64.c:3494 config/tc-aarch64.c:3644 config/tc-aarch64.c:3765
+#: config/tc-aarch64.c:3965 config/tc-aarch64.c:4007
msgid "this relocation modifier is not allowed on this instruction"
msgstr "цей модифікатор переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð°Ð±Ð¾Ñ€Ð¾Ð½ÐµÐ½Ð¾ у цій інÑтрукції"
-#: config/tc-aarch64.c:3694 config/tc-aarch64.c:3818
+#: config/tc-aarch64.c:3653 config/tc-aarch64.c:3777
msgid "invalid relocation expression"
msgstr "некоректний вираз переÑуваннÑ"
-#: config/tc-aarch64.c:3711
+#: config/tc-aarch64.c:3670
msgid "invalid address"
msgstr "некоректна адреÑа"
-#: config/tc-aarch64.c:3768
+#: config/tc-aarch64.c:3727
msgid "invalid use of 32-bit register offset"
msgstr "некоректне викориÑÑ‚Ð°Ð½Ð½Ñ 32-бітового зÑуву регіÑтра"
-#: config/tc-aarch64.c:3777
+#: config/tc-aarch64.c:3736
msgid "offset has different size from base"
msgstr "зÑув має розмір відмінний від бази"
-#: config/tc-aarch64.c:3783
+#: config/tc-aarch64.c:3742
msgid "invalid use of 64-bit register offset"
msgstr "некоректне викориÑÑ‚Ð°Ð½Ð½Ñ 64-бітового зÑуву регіÑтра"
#. [Xn],#expr
-#: config/tc-aarch64.c:3832 config/tc-aarch64.c:3890
+#: config/tc-aarch64.c:3791 config/tc-aarch64.c:3849
msgid "invalid expression in the address"
msgstr "некоректний вираз у адреÑÑ–"
-#: config/tc-aarch64.c:3846 config/tc-arm.c:6135 config/tc-arm.c:6728
+#: config/tc-aarch64.c:3805 config/tc-arm.c:6143 config/tc-arm.c:6736
msgid "']' expected"
msgstr "мало бути «]»"
-#: config/tc-aarch64.c:3854
+#: config/tc-aarch64.c:3813
msgid "register offset not allowed in pre-indexed addressing mode"
msgstr "у режимі попередньо індекÑованого адреÑÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ðµ можна викориÑтовувати регіÑтровий зÑув"
-#: config/tc-aarch64.c:3869 config/tc-arm.c:6171
+#: config/tc-aarch64.c:3828 config/tc-arm.c:6179
msgid "cannot combine pre- and post-indexing"
msgstr "не можна поєднувати пре- Ñ– поÑтіндекÑуваннÑ"
#. Reject [Rn]!
-#: config/tc-aarch64.c:3914
+#: config/tc-aarch64.c:3873
msgid "missing offset in the pre-indexed address"
msgstr "у попередньо індекÑованій адреÑÑ– не вказано зÑуву"
-#: config/tc-aarch64.c:4157
+#: config/tc-aarch64.c:4132
msgid "unknown or missing option to PSB/TSB"
msgstr "невідомий або пропущений параметр PSB/TSB"
-#: config/tc-aarch64.c:4165
+#: config/tc-aarch64.c:4140
msgid "the specified option is not accepted for PSB/TSB"
msgstr "вказаний параметр Ñ” неприйнÑтним Ð´Ð»Ñ PSB/TSB"
-#: config/tc-aarch64.c:4192 config/tc-aarch64.c:4206
+#: config/tc-aarch64.c:4167 config/tc-aarch64.c:4181
msgid "unknown option to BTI"
msgstr "невідомий параметр BTI"
-#: config/tc-aarch64.c:4270
+#: config/tc-aarch64.c:4210
+msgid "missing ZA tile element size separator"
+msgstr "пропущено роздільник розміру елемента плитки ZA"
+
+#: config/tc-aarch64.c:4266
+msgid "invalid ZA tile register number, expected za0"
+msgstr "некоректний номер регіÑтра плитки ZA, мало бути za0"
+
+#: config/tc-aarch64.c:4273
+msgid "invalid ZA tile register number, expected za0-za1"
+msgstr "некоректний номер регіÑтра плитки ZA, мало бути za0-za1"
+
+#. For the 32-bit variant: is the name of the ZA tile ZA0-ZA3.
+#: config/tc-aarch64.c:4281
+msgid "invalid ZA tile register number, expected za0-za3"
+msgstr "некоректний номер регіÑтра плитки ZA, мало бути za0-za3"
+
+#. For the 64-bit variant: is the name of the ZA tile ZA0-ZA7
+#: config/tc-aarch64.c:4289
+msgid "invalid ZA tile register number, expected za0-za7"
+msgstr "некоректний номер регіÑтра плитки ZA, мало бути za0-za7"
+
+#: config/tc-aarch64.c:4294
+msgid "invalid ZA tile element size, allowed b, h, s and d"
+msgstr "некоректний розмір елемента плитки ZA, мало бути b, h, s або d"
+
+#: config/tc-aarch64.c:4340
+msgid "expected '['"
+msgstr "мало бути «[»"
+
+#: config/tc-aarch64.c:4349
+msgid "expected vector select register W12-W15"
+msgstr "мало бути викориÑтано регіÑтри вибору вектора W12-W15"
+
+#: config/tc-aarch64.c:4356
+msgid "expected ','"
+msgstr "мала бути «,»"
+
+#: config/tc-aarch64.c:4362
+msgid "index offset immediate expected"
+msgstr "мало бути вказано регіÑÑ‚Ñ€ зÑуву пришвидшеного викориÑтаннÑ"
+
+#: config/tc-aarch64.c:4368
+msgid "expected ']'"
+msgstr "мало бути «]»"
+
+#: config/tc-aarch64.c:4443
+msgid "invalid ZA tile element size, allowed b, h, s, d and q"
+msgstr "некоректний розмір елемента плитки ZA, мало бути b, h, s, d або q"
+
+#: config/tc-aarch64.c:4451
+msgid "ZA tile vector out of range"
+msgstr "вектор плитки ZA перебуває поза припуÑтимим діапазоном"
+
+#: config/tc-aarch64.c:4463
+msgid "index offset out of range"
+msgstr "Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÐµÐ½Ð½Ñ Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾Ð³Ð¾ Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð¿Ð¾ÐºÐ°Ð¶Ñ‡Ð¸ÐºÐ°"
+
+#: config/tc-aarch64.c:4484 config/tc-aarch64.c:4579
+msgid "expected '{'"
+msgstr "мала бути «{»"
+
+#: config/tc-aarch64.c:4497 config/tc-aarch64.c:4592
+msgid "expected '}'"
+msgstr "мала бути «}»"
+
+#: config/tc-aarch64.c:4541 config/tc-aarch64.c:4556
+msgid "wrong ZA tile element format"
+msgstr "помилковий формат елемента плитки ZA"
+
+#: config/tc-aarch64.c:4623
+msgid "expected ZA array"
+msgstr "мав бути маÑив ZA"
+
+#: config/tc-aarch64.c:4632 config/tc-aarch64.c:8993 config/tc-arm.c:28704
+#: config/tc-arm.c:28719 config/tc-arm.c:28734 config/tc-arm.c:28745
+#: config/tc-arm.c:28768 config/tc-arm.c:29618 config/tc-moxie.c:714
+#: config/tc-pj.c:449 config/tc-sh.c:3728
+msgid "offset out of range"
+msgstr "Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÐµÐ½Ð½Ñ Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾Ð³Ð¾ зміщеннÑ"
+
+#: config/tc-aarch64.c:4659
+msgid "expected SM or ZA operand"
+msgstr "мав бути операнд SM або ZA"
+
+#: config/tc-aarch64.c:4708
+msgid "wrong predicate register element size, allowed b, h, s and d"
+msgstr "помилковий розмір елемента регіÑтра-предиката, мало бути b, h, s або d"
+
+#: config/tc-aarch64.c:4717
+msgid "element index out of range for given variant"
+msgstr "Ñ–Ð½Ð´ÐµÐºÑ ÐµÐ»ÐµÐ¼ÐµÐ½Ñ‚Ð° поза припуÑтимим діапазоном Ð´Ð»Ñ Ð·Ð°Ð´Ð°Ð½Ð¾Ð³Ð¾ варіанта"
+
+#: config/tc-aarch64.c:4781
#, c-format
msgid "selected processor does not support PSTATE field name '%s'"
msgstr "Ð´Ð»Ñ Ð²Ð¸Ð±Ñ€Ð°Ð½Ð¾ процеÑора не передбачено підтримки назви Ð¿Ð¾Ð»Ñ PSTATE «%s»"
-#: config/tc-aarch64.c:4275 config/tc-aarch64.c:4317
+#: config/tc-aarch64.c:4786 config/tc-aarch64.c:4828
#, c-format
msgid "selected processor does not support system register name '%s'"
msgstr "Ð´Ð»Ñ Ð²Ð¸Ð±Ñ€Ð°Ð½Ð¾Ð³Ð¾ процеÑора не передбачено підтримки назви ÑиÑтемного регіÑтра «%s»"
-#: config/tc-aarch64.c:4278 config/tc-aarch64.c:4320
+#: config/tc-aarch64.c:4789 config/tc-aarch64.c:4831
#, c-format
msgid "system register name '%s' is deprecated and may be removed in a future release"
msgstr "назва ÑиÑтемного регіÑтра «%s» вважаєтьÑÑ Ð·Ð°Ñтарілою, Ñ—Ñ— може бути уÑунуто у наÑтупних випуÑках"
-#: config/tc-aarch64.c:4362
+#: config/tc-aarch64.c:4873
msgid "immediate value out of range "
msgstr "поточне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð¾Ð·Ð° межами діапазону "
-#: config/tc-aarch64.c:4876
+#: config/tc-aarch64.c:5392
#, c-format
msgid "Info: "
msgstr "ІнформаціÑ: "
-#: config/tc-aarch64.c:4911 config/tc-score.c:2752 config/tc-score.c:6481
+#: config/tc-aarch64.c:5420
+#, c-format
+msgid "this `%s' should have an immediately preceding `%s' -- `%s'"
+msgstr "цьому «%s» має безпоÑередньо передувати «%s» — «%s»"
+
+#: config/tc-aarch64.c:5426
+#, c-format
+msgid "the preceding `%s' should be followed by `%s` rather than `%s` -- `%s'"
+msgstr "за попереднім «%s» має бути «%s», а не «%s» -- «%s»"
+
+#: config/tc-aarch64.c:5440 config/tc-score.c:2752 config/tc-score.c:6481
#, c-format
msgid "%s -- `%s'"
msgstr "%s -- «%s»"
-#: config/tc-aarch64.c:4913
+#: config/tc-aarch64.c:5442
#, c-format
msgid "%s at operand %d -- `%s'"
msgstr "%s у операнді %d -- «%s»"
-#: config/tc-aarch64.c:4919
+#: config/tc-aarch64.c:5448
#, c-format
msgid "operand %d must be %s -- `%s'"
msgstr "операнд %d має бути %s -- «%s»"
-#: config/tc-aarch64.c:4925
+#: config/tc-aarch64.c:5454
#, c-format
msgid "operand mismatch -- `%s'"
msgstr "невідповідніÑÑ‚ÑŒ операнда -- «%s»"
#. Print the hint.
-#: config/tc-aarch64.c:4985
+#: config/tc-aarch64.c:5514
msgid " did you mean this?"
msgstr " Ви мали на увазі це?"
-#: config/tc-aarch64.c:4988 config/tc-aarch64.c:5015
+#: config/tc-aarch64.c:5517 config/tc-aarch64.c:5544
#, c-format
msgid " %s"
msgstr " %s"
-#: config/tc-aarch64.c:4993
+#: config/tc-aarch64.c:5522
msgid " other valid variant(s):"
msgstr " інші коректні варіанти:"
-#: config/tc-aarch64.c:5022
+#: config/tc-aarch64.c:5551
+#, c-format
+msgid "operand %d must have the same immediate value as operand 1 -- `%s'"
+msgstr "операнд %d має бути тим Ñамим значеннÑм пришвидшеного викориÑтаннÑ, що Ñ– операнд 1 -- «%s»"
+
+#: config/tc-aarch64.c:5557
#, c-format
msgid "operand %d must be the same register as operand 1 -- `%s'"
msgstr "операнд %d має бути тим Ñамим регіÑтром, що Ñ– операнд 1 -- «%s»"
-#: config/tc-aarch64.c:5028
+#: config/tc-aarch64.c:5563
#, c-format
msgid "%s out of range %d to %d at operand %d -- `%s'"
msgstr "%s поза межами діапазону від %d до %d у операнді %d — «%s»"
-#: config/tc-aarch64.c:5029 config/tc-aarch64.c:5033 config/tc-aarch64.c:7041
+#: config/tc-aarch64.c:5564 config/tc-aarch64.c:5568 config/tc-aarch64.c:7666
msgid "immediate value"
msgstr "конÑтанта"
-#: config/tc-aarch64.c:5032
+#: config/tc-aarch64.c:5567
#, c-format
msgid "%s must be %d at operand %d -- `%s'"
msgstr "%s має бути %d у операнді %d -- «%s»"
-#: config/tc-aarch64.c:5039
+#: config/tc-aarch64.c:5574
#, c-format
msgid "invalid number of registers in the list; only 1 register is expected at operand %d -- `%s'"
msgstr "некоректна кількіÑÑ‚ÑŒ регіÑтрів у ÑпиÑку; мало бути вказано лише 1 регіÑÑ‚Ñ€ у операнді %d — «%s»"
-#: config/tc-aarch64.c:5043
+#: config/tc-aarch64.c:5578
#, c-format
msgid "invalid number of registers in the list; %d registers are expected at operand %d -- `%s'"
msgstr "некоректна кількіÑÑ‚ÑŒ регіÑтрів у ÑпиÑку; мало бути вказано лише %d регіÑтрів у операнді %d — «%s»"
-#: config/tc-aarch64.c:5049
+#: config/tc-aarch64.c:5584
#, c-format
msgid "immediate value must be a multiple of %d at operand %d -- `%s'"
msgstr "безпоÑереднє Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¼Ð°Ñ” бути кратним до %d у операнді %d -- «%s»"
-#: config/tc-aarch64.c:5367
+#: config/tc-aarch64.c:5885
msgid "bad vector arrangement type"
msgstr "помилковий тип упорÑÐ´ÐºÐ¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð²ÐµÐºÑ‚Ð¾Ñ€Ð°"
-#: config/tc-aarch64.c:5496
+#: config/tc-aarch64.c:6014
msgid "the specified relocation type is not allowed for MOVK"
msgstr "вказаний тип переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð°Ð±Ð¾Ñ€Ð¾Ð½ÐµÐ½Ð¾ Ð´Ð»Ñ MOVK"
-#: config/tc-aarch64.c:5544 config/tc-aarch64.c:5555
+#: config/tc-aarch64.c:6062 config/tc-aarch64.c:6073
msgid "the specified relocation type is not allowed for 32-bit register"
msgstr "вказаний тип переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð°Ð±Ð¾Ñ€Ð¾Ð½ÐµÐ½Ð¾ Ð´Ð»Ñ 32-бітового регіÑтра"
-#: config/tc-aarch64.c:5666
+#: config/tc-aarch64.c:6184
msgid "relocation qualifier does not match instruction size"
msgstr "кваліфікатор переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ðµ відповідає розміру інÑтрукції"
-#: config/tc-aarch64.c:5755
+#: config/tc-aarch64.c:6273
msgid "comma expected between operands"
msgstr "між операндами мало бути вказано кому"
-#: config/tc-aarch64.c:5786
+#: config/tc-aarch64.c:6304
msgid "invalid Rt register number in 64-byte load/store"
msgstr "некоректний номер регіÑтра Rt у 64-байтовому load/store"
-#: config/tc-aarch64.c:5906
+#: config/tc-aarch64.c:6425
msgid "the top half of a 128-bit FP/SIMD register is expected"
msgstr "мало бути вказано верхню половину 128-бітового регіÑтра FP/SIMD"
-#: config/tc-aarch64.c:5981 config/tc-arm.c:2241 config/tc-arm.c:2286
+#: config/tc-aarch64.c:6500 config/tc-arm.c:2219 config/tc-arm.c:2264
#: config/tc-h8300.c:1042
msgid "invalid register list"
msgstr "некоректний ÑпиÑок регіÑтрів"
-#: config/tc-aarch64.c:5988
+#: config/tc-aarch64.c:6507
msgid "expected element type rather than vector type"
msgstr "мало бути вказано тип елемента, а не тип вектора"
-#: config/tc-aarch64.c:6009
+#: config/tc-aarch64.c:6528
msgid "missing type suffix"
msgstr "пропущено ÑÑƒÑ„Ñ–ÐºÑ Ñ‚Ð¸Ð¿Ñƒ"
-#: config/tc-aarch64.c:6028
+#: config/tc-aarch64.c:6547
msgid "C0 - C15 expected"
msgstr "мало бути вказано C0 - C15"
-#: config/tc-aarch64.c:6135 config/tc-aarch64.c:6159
+#: config/tc-aarch64.c:6654 config/tc-aarch64.c:6678
msgid "immediate zero expected"
msgstr "мало бути викориÑтано нульову конÑтанту"
-#: config/tc-aarch64.c:6256
+#: config/tc-aarch64.c:6775
msgid "shift not allowed for bitmask immediate"
msgstr "не можна викориÑтовувати зÑув Ð´Ð»Ñ Ð±ÐµÐ·Ð¿Ð¾Ñередньої бітової маÑки"
-#: config/tc-aarch64.c:6310
+#: config/tc-aarch64.c:6829
msgid "can't mix relocation modifier with explicit shift"
msgstr "не можна поєднувати модифікатор переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð· Ñвним зÑувом"
-#: config/tc-aarch64.c:6359 config/tc-arm.c:15901 config/tc-arm.c:15926
-#: config/tc-arm.c:15937 config/tc-arm.c:15944
+#: config/tc-aarch64.c:6878 config/tc-arm.c:15929 config/tc-arm.c:15954
+#: config/tc-arm.c:15965 config/tc-arm.c:15972
msgid "invalid condition"
msgstr "некоректна умова"
-#: config/tc-aarch64.c:6385
+#: config/tc-aarch64.c:6904
msgid "invalid pc-relative address"
msgstr "некоректна відноÑна щодо лічильника команд (pc) адреÑа"
#. Only permit "=value" in the literal load instructions.
#. The literal will be generated by programmer_friendly_fixup.
-#: config/tc-aarch64.c:6393
+#: config/tc-aarch64.c:6912
msgid "invalid use of \"=immediate\""
msgstr "некоректне викориÑÑ‚Ð°Ð½Ð½Ñ Â«=immediate»"
-#: config/tc-aarch64.c:6458 config/tc-aarch64.c:6490 config/tc-aarch64.c:6508
-#: config/tc-aarch64.c:6532 config/tc-aarch64.c:6552 config/tc-aarch64.c:6571
-#: config/tc-aarch64.c:6594 config/tc-aarch64.c:6630 config/tc-aarch64.c:6637
-#: config/tc-aarch64.c:6665 config/tc-aarch64.c:6685 config/tc-aarch64.c:6710
-#: config/tc-aarch64.c:6728 config/tc-aarch64.c:6736 config/tc-aarch64.c:6753
-#: config/tc-aarch64.c:6777
+#: config/tc-aarch64.c:6977 config/tc-aarch64.c:7009 config/tc-aarch64.c:7027
+#: config/tc-aarch64.c:7051 config/tc-aarch64.c:7071 config/tc-aarch64.c:7090
+#: config/tc-aarch64.c:7113 config/tc-aarch64.c:7179 config/tc-aarch64.c:7186
+#: config/tc-aarch64.c:7214 config/tc-aarch64.c:7235 config/tc-aarch64.c:7260
+#: config/tc-aarch64.c:7278 config/tc-aarch64.c:7286 config/tc-aarch64.c:7303
+#: config/tc-aarch64.c:7327
msgid "invalid addressing mode"
msgstr "некоректний режим адреÑуваннÑ"
-#: config/tc-aarch64.c:6474
+#: config/tc-aarch64.c:6993
msgid "the optional immediate offset can only be 0"
msgstr "необов’Ñзковий безпоÑередній зÑув може бути лише нульовим"
-#: config/tc-aarch64.c:6513 config/tc-aarch64.c:6537 config/tc-aarch64.c:6557
+#: config/tc-aarch64.c:7032 config/tc-aarch64.c:7056 config/tc-aarch64.c:7076
msgid "relocation not allowed"
msgstr "переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð°Ð±Ð¾Ñ€Ð¾Ð½ÐµÐ½Ð¾"
-#: config/tc-aarch64.c:6604
+#: config/tc-aarch64.c:7123
msgid "writeback value must be an immediate constant"
msgstr "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð·Ð²Ð¾Ñ€Ð¾Ñ‚Ð½Ð¾Ð³Ð¾ запиÑу має бути безпоÑередньою Ñталою"
+#: config/tc-aarch64.c:7134 config/tc-aarch64.c:7353
+msgid "unknown or missing PSTATE field name"
+msgstr "невідома назва Ð¿Ð¾Ð»Ñ PSTATE або назву Ð¿Ð¾Ð»Ñ Ð¿Ñ€Ð¾Ð¿ÑƒÑ‰ÐµÐ½Ð¾"
+
#. Make sure this has priority over
#. "invalid addressing mode".
-#: config/tc-aarch64.c:6645
+#: config/tc-aarch64.c:7194
msgid "constant offset required"
msgstr "потрібен Ñталий зÑув"
-#: config/tc-aarch64.c:6789
+#: config/tc-aarch64.c:7339
msgid "unknown or missing system register name"
msgstr "невідома назва ÑиÑтемного регіÑтра або назву пропущено"
-#: config/tc-aarch64.c:6801
-msgid "unknown or missing PSTATE field name"
-msgstr "невідома назва Ð¿Ð¾Ð»Ñ PSTATE або назву Ð¿Ð¾Ð»Ñ Ð¿Ñ€Ð¾Ð¿ÑƒÑ‰ÐµÐ½Ð¾"
-
-#: config/tc-aarch64.c:6833
+#: config/tc-aarch64.c:7387
msgid "unknown or missing operation name"
msgstr "невідома назва операції або операцію не вказано"
-#: config/tc-aarch64.c:6846
+#: config/tc-aarch64.c:7400
msgid "the specified option is not accepted in ISB"
msgstr "вказаний параметр Ñ” неприйнÑтним Ð´Ð»Ñ ISB"
-#: config/tc-aarch64.c:6858 config/tc-aarch64.c:6875
+#: config/tc-aarch64.c:7412 config/tc-aarch64.c:7429
msgid "the specified option is not accepted in DSB"
msgstr "вказаний параметр Ñ” неприйнÑтним Ð´Ð»Ñ DSB"
-#: config/tc-aarch64.c:6889
+#: config/tc-aarch64.c:7443
msgid "immediate value must be 16, 20, 24, 28"
msgstr "значеннÑм пришвидшеного доÑтупу має бути 16, 20, 24, 28"
-#: config/tc-aarch64.c:6919 config/tc-aarch64.c:8132 config/tc-arm.c:8048
+#: config/tc-aarch64.c:7544 config/tc-aarch64.c:8792 config/tc-arm.c:8060
#, c-format
msgid "unhandled operand code %d"
msgstr "непридатний до обробки код операнда %d"
-#: config/tc-aarch64.c:6961
+#: config/tc-aarch64.c:7586
msgid "unexpected comma before the omitted optional operand"
msgstr "неочікувана кома перед пропущеним необов’Ñзковим операндом"
-#: config/tc-aarch64.c:6989
+#: config/tc-aarch64.c:7614
msgid "unexpected characters following instruction"
msgstr "неочікувані Ñимволи піÑÐ»Ñ Ñ–Ð½Ñтрукції"
-#: config/tc-aarch64.c:7067 config/tc-arm.c:5661 config/tc-arm.c:6279
-#: config/tc-arm.c:8852
+#: config/tc-aarch64.c:7692 config/tc-arm.c:5669 config/tc-arm.c:6287
+#: config/tc-arm.c:8874
msgid "constant expression expected"
msgstr "очікувавÑÑ Ñталий вираз"
-#: config/tc-aarch64.c:7074
+#: config/tc-aarch64.c:7699
msgid "literal pool insertion failed"
msgstr "Ñпроба буквального вÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð½Ñ Ð±ÑƒÑ„ÐµÑ€Ð° зазнала невдачі"
-#: config/tc-aarch64.c:7145 config/tc-aarch64.c:7160
+#: config/tc-aarch64.c:7770 config/tc-aarch64.c:7785
#, c-format
msgid "unpredictable transfer with writeback -- `%s'"
msgstr "непередбачуване Ð¿ÐµÑ€ÐµÐ´Ð°Ð²Ð°Ð½Ð½Ñ Ð· writeback -- «%s»"
-#: config/tc-aarch64.c:7164 config/tc-aarch64.c:7178
+#: config/tc-aarch64.c:7789 config/tc-aarch64.c:7803
#, c-format
msgid "unpredictable load of register pair -- `%s'"
msgstr "непередбачуване Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð¸ регіÑтрів -- «%s»"
-#: config/tc-aarch64.c:7185 config/tc-aarch64.c:7198
+#: config/tc-aarch64.c:7810 config/tc-aarch64.c:7823
#, c-format
msgid "unpredictable: identical transfer and status registers --`%s'"
msgstr "непередбачуване: збіг регіÑтрів Ð¿ÐµÑ€ÐµÐ´Ð°Ð²Ð°Ð½Ð½Ñ Ñ‚Ð° Ñтану -- «%s»"
-#: config/tc-aarch64.c:7193 config/tc-aarch64.c:7207
+#: config/tc-aarch64.c:7818 config/tc-aarch64.c:7832
#, c-format
msgid "unpredictable: identical base and status registers --`%s'"
msgstr "непередбачуване: збіг регіÑтрів бази та Ñтану -- «%s»"
-#: config/tc-aarch64.c:7223
+#: config/tc-aarch64.c:7852
#, c-format
msgid "previous `%s' sequence has not been closed"
msgstr "попередню поÑлідовніÑÑ‚ÑŒ «%s» не було закрито"
-#: config/tc-aarch64.c:7302
+#: config/tc-aarch64.c:7937
+#, c-format
+msgid "unknown mnemonic -- `%s'"
+msgstr "невідома мнемоніка: -- «%s»"
+
+#: config/tc-aarch64.c:7947
#, c-format
msgid "unknown mnemonic `%s' -- `%s'"
msgstr "невідома мнемоніка, «%s» -- «%s»"
-#: config/tc-aarch64.c:7310
+#: config/tc-aarch64.c:7955
#, c-format
msgid "unexpected comma after the mnemonic name `%s' -- `%s'"
msgstr "неочікувана кома піÑÐ»Ñ Ð½Ð°Ð·Ð²Ð¸ мнемоніки, «%s» -- «%s»"
-#: config/tc-aarch64.c:7368
+#: config/tc-aarch64.c:8013
#, c-format
msgid "selected processor does not support `%s'"
msgstr "у вибраному процеÑорі не передбачено підтримки «%s»"
-#: config/tc-aarch64.c:7791 config/tc-arm.c:28047
+#: config/tc-aarch64.c:8451 config/tc-arm.c:28125
msgid "GOT already in the symbol table"
msgstr "GOT уже Ñ” у таблиці Ñимволів"
-#: config/tc-aarch64.c:7954
+#: config/tc-aarch64.c:8614
msgid "immediate cannot be moved by a single instruction"
msgstr "безпоÑереднє Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð½Ðµ можна переÑувати одною інÑтрукцією"
-#: config/tc-aarch64.c:7998 config/tc-aarch64.c:8043 config/tc-aarch64.c:8069
-#: config/tc-arm.c:16445 config/tc-arm.c:18142 config/tc-arm.c:18722
-#: config/tc-arm.c:18749 config/tc-arm.c:19537 config/tc-arm.c:20372
-#: config/tc-arm.c:21389 config/tc-arm.c:21449 config/tc-metag.c:2443
+#: config/tc-aarch64.c:8658 config/tc-aarch64.c:8703 config/tc-aarch64.c:8729
+#: config/tc-arm.c:16473 config/tc-arm.c:18170 config/tc-arm.c:18750
+#: config/tc-arm.c:18777 config/tc-arm.c:19565 config/tc-arm.c:20400
+#: config/tc-arm.c:21423 config/tc-arm.c:21483 config/tc-metag.c:2443
#: config/tc-metag.c:2452 config/tc-metag.c:2491 config/tc-metag.c:2500
#: config/tc-metag.c:3019 config/tc-metag.c:3028
msgid "immediate out of range"
msgstr "конÑтанта поза межами припуÑтимого діапазону"
-#: config/tc-aarch64.c:8062 config/tc-metag.c:4654 config/tc-xtensa.c:4243
+#: config/tc-aarch64.c:8722 config/tc-metag.c:4654 config/tc-xtensa.c:4243
msgid "invalid immediate"
msgstr "некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¸ÑˆÐ²Ð¸Ð´ÑˆÐµÐ½Ð¾Ð³Ð¾ викориÑтаннÑ"
-#: config/tc-aarch64.c:8127 config/tc-tic6x.c:3855 config/tc-tic6x.c:3920
+#: config/tc-aarch64.c:8787 config/tc-tic6x.c:3855 config/tc-tic6x.c:3920
#: config/tc-tic6x.c:3947 config/tc-tic6x.c:3975
msgid "immediate offset out of range"
msgstr "відÑтуп безпоÑереднього Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÐµÐ±ÑƒÐ²Ð°Ñ” поза межами припуÑтимого діапазону"
-#: config/tc-aarch64.c:8201 config/tc-arm.c:28385 config/tc-arm.c:28453
-#: config/tc-arm.c:28735
+#: config/tc-aarch64.c:8861 config/tc-arm.c:28463 config/tc-arm.c:28531
+#: config/tc-arm.c:28813
#, c-format
msgid "undefined symbol %s used as an immediate value"
msgstr "невизначений Ñимвол %s викориÑтано Ñк Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¸ÑˆÐ²Ð¸Ð´ÑˆÐµÐ½Ð¾Ð³Ð¾ викориÑтаннÑ"
-#: config/tc-aarch64.c:8213
+#: config/tc-aarch64.c:8873
msgid "pc-relative load offset not word aligned"
msgstr "відÑтуп Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð²Ñ–Ð´Ð½Ð¾Ñно лічильника команд не вирівнÑно не межу Ñлова"
-#: config/tc-aarch64.c:8216
+#: config/tc-aarch64.c:8876
msgid "pc-relative load offset out of range"
msgstr "відÑтуп Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð²Ñ–Ð´Ð½Ð¾Ñно лічильника команд перебуває поза межами припуÑтимого діапазону"
-#: config/tc-aarch64.c:8228
+#: config/tc-aarch64.c:8888
msgid "pc-relative address offset out of range"
msgstr "відÑтуп адреÑи відноÑно лічильника команд перебуває поза межами припуÑтимого діапазону"
-#: config/tc-aarch64.c:8240 config/tc-aarch64.c:8255
+#: config/tc-aarch64.c:8900 config/tc-aarch64.c:8915
msgid "conditional branch target not word aligned"
msgstr "Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÑƒÐ¼Ð¾Ð²Ð½Ð¾Ñ— гілки не вирівнÑно не межу Ñлова"
-#: config/tc-aarch64.c:8243 config/tc-aarch64.c:8258 config/tc-arm.c:29030
+#: config/tc-aarch64.c:8903 config/tc-aarch64.c:8918 config/tc-arm.c:29108
msgid "conditional branch out of range"
msgstr "умовна гілка поза межами припуÑтимого діапазону"
-#: config/tc-aarch64.c:8271
+#: config/tc-aarch64.c:8931
msgid "branch target not word aligned"
msgstr "Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð³Ñ–Ð»ÐºÐ¸ не вирівнÑно на межу Ñлова"
-#: config/tc-aarch64.c:8274 config/tc-arm.c:925 config/tc-arm.c:29836
+#: config/tc-aarch64.c:8934 config/tc-arm.c:929 config/tc-arm.c:29914
#: config/tc-mips.c:16069 config/tc-mips.c:16085 config/tc-mips.c:16175
msgid "branch out of range"
msgstr "Ð²Ñ–Ð´Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ Ð¿Ð¾Ð·Ð° припуÑтимим діапазоном"
-#: config/tc-aarch64.c:8333 config/tc-arm.c:28626 config/tc-arm.c:28641
-#: config/tc-arm.c:28656 config/tc-arm.c:28667 config/tc-arm.c:28690
-#: config/tc-arm.c:29540 config/tc-moxie.c:714 config/tc-pj.c:449
-#: config/tc-sh.c:3728
-msgid "offset out of range"
-msgstr "Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÐµÐ½Ð½Ñ Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾Ð³Ð¾ зміщеннÑ"
-
-#: config/tc-aarch64.c:8348
+#: config/tc-aarch64.c:9008
msgid "unsigned value out of range"
msgstr "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð±ÐµÐ· знаку поза межами припуÑтимого діапазону"
-#: config/tc-aarch64.c:8359
+#: config/tc-aarch64.c:9019
msgid "signed value out of range"
msgstr "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð·Ñ– знаком поза межами припуÑтимого діапазону"
-#: config/tc-aarch64.c:8509
+#: config/tc-aarch64.c:9169
#, c-format
msgid "unexpected %s fixup"
msgstr "неочікуване ÐºÐ¾Ñ€Ð¸Ð³ÑƒÐ²Ð°Ð½Ð½Ñ %s"
-#: config/tc-aarch64.c:8574 config/tc-arm.c:30256 config/tc-arm.c:30277
-#: config/tc-mips.c:18436 config/tc-or1k.c:345 config/tc-score.c:7448
+#: config/tc-aarch64.c:9234 config/tc-arm.c:30334 config/tc-arm.c:30355
+#: config/tc-mips.c:18429 config/tc-or1k.c:345 config/tc-score.c:7448
#, c-format
msgid "cannot represent %s relocation in this object file format"
msgstr "предÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÐµÑÑƒÐ²Ð°Ð½Ð½Ñ %s у цьому форматі об’єктних файлів неможливе"
-#: config/tc-aarch64.c:8607
+#: config/tc-aarch64.c:9267
#, c-format
msgid "cannot do %u-byte relocation"
msgstr "Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ %u-байтового переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ðµ"
-#: config/tc-aarch64.c:9012 config/tc-arm.c:31091
+#: config/tc-aarch64.c:9672 config/tc-arm.c:31169
msgid "assemble for big-endian"
msgstr "зібрати Ð´Ð»Ñ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ зі зворотним порÑдком байтів"
-#: config/tc-aarch64.c:9013 config/tc-arm.c:31092
+#: config/tc-aarch64.c:9673 config/tc-arm.c:31170
msgid "assemble for little-endian"
msgstr "зібрати Ð´Ð»Ñ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ з прÑмим порÑдком байтів"
-#: config/tc-aarch64.c:9016
+#: config/tc-aarch64.c:9676
msgid "temporary switch for dumping"
msgstr "тимчаÑовий перемикач Ð´Ð»Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð´Ð°Ð¼Ð¿Ñƒ"
-#: config/tc-aarch64.c:9018
+#: config/tc-aarch64.c:9678
msgid "output verbose error messages"
msgstr "виводити докладні Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ помилки"
-#: config/tc-aarch64.c:9020
+#: config/tc-aarch64.c:9680
msgid "do not output verbose error messages"
msgstr "не виводити докладні Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ помилки"
-#: config/tc-aarch64.c:9358 config/tc-arm.c:32213
+#: config/tc-aarch64.c:10056 config/tc-arm.c:32328
msgid "invalid architectural extension"
msgstr "некоректне архітектурне розширеннÑ"
-#: config/tc-aarch64.c:9383 config/tc-arm.c:32245
+#: config/tc-aarch64.c:10081 config/tc-arm.c:32360
msgid "must specify extensions to add before specifying those to remove"
msgstr "Ñпочатку Ñлід вказати розширеннÑ, Ñкі Ñлід додати, а вже потім вказати Ñ‚Ñ–, Ñкі Ñлід вилучити"
-#: config/tc-aarch64.c:9391 config/tc-arm.c:32253
+#: config/tc-aarch64.c:10089 config/tc-arm.c:32368
msgid "missing architectural extension"
msgstr "не вказано архітектурного розширеннÑ"
-#: config/tc-aarch64.c:9418 config/tc-arm.c:32339
+#: config/tc-aarch64.c:10116 config/tc-arm.c:32454
#, c-format
msgid "unknown architectural extension `%s'"
msgstr "невідоме архітектурне розширеннÑ, «%s»"
-#: config/tc-aarch64.c:9442 config/tc-arm.c:32389 config/tc-metag.c:5832
+#: config/tc-aarch64.c:10140 config/tc-arm.c:32504 config/tc-metag.c:5832
#, c-format
msgid "missing cpu name `%s'"
msgstr "не вказано назви процеÑора, «%s»"
-#: config/tc-aarch64.c:9456 config/tc-aarch64.c:9672 config/tc-arm.c:32424
-#: config/tc-arm.c:33225 config/tc-csky.c:1218 config/tc-metag.c:5843
+#: config/tc-aarch64.c:10154 config/tc-aarch64.c:10370 config/tc-arm.c:32539
+#: config/tc-arm.c:33346 config/tc-csky.c:1218 config/tc-metag.c:5843
#, c-format
msgid "unknown cpu `%s'"
msgstr "невідомий процеÑор, «%s»"
-#: config/tc-aarch64.c:9474 config/tc-arm.c:32442
+#: config/tc-aarch64.c:10172 config/tc-arm.c:32557
#, c-format
msgid "missing architecture name `%s'"
msgstr "не виÑтачає назви архітектури «%s»"
-#: config/tc-aarch64.c:9488 config/tc-aarch64.c:9719 config/tc-arm.c:32464
-#: config/tc-arm.c:33260 config/tc-arm.c:33290 config/tc-score.c:7683
+#: config/tc-aarch64.c:10186 config/tc-aarch64.c:10417 config/tc-arm.c:32579
+#: config/tc-arm.c:33381 config/tc-arm.c:33411 config/tc-score.c:7683
#, c-format
msgid "unknown architecture `%s'\n"
msgstr "невідома архітектура «%s»\n"
-#: config/tc-aarch64.c:9511
+#: config/tc-aarch64.c:10209
#, c-format
msgid "missing abi name `%s'"
msgstr "не вказано назви ABI «%s»"
-#: config/tc-aarch64.c:9522
+#: config/tc-aarch64.c:10220
#, c-format
msgid "unknown abi `%s'\n"
msgstr "невідомий ABI «%s»\n"
-#: config/tc-aarch64.c:9528
+#: config/tc-aarch64.c:10226
msgid "<abi name>\t specify for ABI <abi name>"
msgstr "<назва abi>\t вказати Ð´Ð»Ñ ABI <назва abi>"
-#: config/tc-aarch64.c:9531 config/tc-arm.c:32551 config/tc-metag.c:5909
+#: config/tc-aarch64.c:10229 config/tc-arm.c:32666 config/tc-metag.c:5909
msgid "<cpu name>\t assemble for CPU <cpu name>"
msgstr "<назва процеÑора>\t зібрати Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑора <назва процеÑора>"
-#: config/tc-aarch64.c:9533 config/tc-arm.c:32553
+#: config/tc-aarch64.c:10231 config/tc-arm.c:32668
msgid "<arch name>\t assemble for architecture <arch name>"
msgstr "<назва архітектури>\t зібрати Ð´Ð»Ñ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ <назва архітектури>"
-#: config/tc-aarch64.c:9572 config/tc-aarch64.c:9591 config/tc-arm.c:32621
-#: config/tc-arm.c:32639 config/tc-arm.c:32659 config/tc-metag.c:5933
+#: config/tc-aarch64.c:10270 config/tc-aarch64.c:10289 config/tc-arm.c:32736
+#: config/tc-arm.c:32754 config/tc-arm.c:32774 config/tc-metag.c:5933
#, c-format
msgid "option `-%c%s' is deprecated: %s"
msgstr "параметр «-%c%s» вважаєтьÑÑ Ð·Ð°Ñтарілим: %s"
-#: config/tc-aarch64.c:9611
+#: config/tc-aarch64.c:10309
#, c-format
msgid " AArch64-specific assembler options:\n"
msgstr " Параметри, Ñпецифічні Ð´Ð»Ñ Ð°Ñемблера AArch64:\n"
-#: config/tc-aarch64.c:9622 config/tc-arc.c:3581 config/tc-arm.c:32690
+#: config/tc-aarch64.c:10320 config/tc-arc.c:3576 config/tc-arm.c:32805
#, c-format
msgid " -EB assemble code for a big-endian cpu\n"
msgstr " -EB зібрати код Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑора зі зворотним порÑдком байтів\n"
-#: config/tc-aarch64.c:9627 config/tc-arc.c:3583 config/tc-arm.c:32695
+#: config/tc-aarch64.c:10325 config/tc-arc.c:3578 config/tc-arm.c:32810
#, c-format
msgid " -EL assemble code for a little-endian cpu\n"
msgstr " -EL зібрати код Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑора з прÑмим порÑдком байтів\n"
@@ -2311,7 +2439,7 @@ msgstr "невідповідні аргументи Ð´Ð»Ñ ÐºÐ¾Ð´Ñƒ операц
msgid "opcode `%s' not supported for target %s"
msgstr "код операції «%s» не підтримуєтьÑÑ Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ %s"
-#: config/tc-alpha.c:1189 config/tc-alpha.c:3363 config/tc-avr.c:1905
+#: config/tc-alpha.c:1189 config/tc-alpha.c:3363 config/tc-avr.c:1915
#: config/tc-msp430.c:4361 config/tc-wasm32.c:753
#, c-format
msgid "unknown opcode `%s'"
@@ -2392,8 +2520,8 @@ msgstr "Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ !tlsldm!%ld"
msgid "sequence number in use for !tlsgd!%ld"
msgstr "номер у поÑлідовноÑÑ‚Ñ– вже викориÑтано Ð´Ð»Ñ !tlsgd!%ld"
-#: config/tc-alpha.c:1992 config/tc-arc.c:2848 config/tc-mn10200.c:854
-#: config/tc-mn10300.c:1150 config/tc-ppc.c:2019 config/tc-s390.c:668
+#: config/tc-alpha.c:1992 config/tc-arc.c:2848 config/tc-mn10200.c:847
+#: config/tc-mn10300.c:1150 config/tc-ppc.c:2028 config/tc-s390.c:668
#: config/tc-tilegx.c:422 config/tc-tilegx.c:472 config/tc-tilepro.c:375
msgid "operand"
msgstr "операнд"
@@ -2410,12 +2538,12 @@ msgstr "Ðекоректне переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ð¿Ð¾Ð»Ñ"
msgid "can not resolve expression"
msgstr "не вдалоÑÑ Ñ€Ð¾Ð·Ñ–Ð±Ñ€Ð°Ñ‚Ð¸ вираз"
-#: config/tc-alpha.c:3512 config/tc-microblaze.c:204 config/tc-ppc.c:2352
+#: config/tc-alpha.c:3512 config/tc-microblaze.c:204 config/tc-ppc.c:2365
#, c-format
msgid ".COMMon length (%ld.) <0! Ignored."
msgstr "Довжина .COMMon (%ld.) <0! Проігноровано."
-#: config/tc-alpha.c:3523 config/tc-ia64.c:1091 config/tc-sparc.c:4270
+#: config/tc-alpha.c:3523 config/tc-ia64.c:1092 config/tc-sparc.c:4270
#: config/tc-v850.c:306
msgid "Ignoring attempt to re-define symbol"
msgstr "Ігноруємо Ñпробу перевизначити Ñимвол"
@@ -2461,12 +2589,12 @@ msgstr "помилкова директива .fmask"
msgid "bad .mask directive"
msgstr "помилкова директива .mask"
-#: config/tc-alpha.c:3872 config/tc-mips.c:19918 config/tc-score.c:5736
+#: config/tc-alpha.c:3872 config/tc-mips.c:19911 config/tc-score.c:5736
#: ecoff.c:3161
msgid ".frame outside of .ent"
msgstr ".frame поза межами .ent"
-#: config/tc-alpha.c:3883 config/tc-mips.c:19929 ecoff.c:3172
+#: config/tc-alpha.c:3883 config/tc-mips.c:19922 ecoff.c:3172
msgid "bad .frame directive"
msgstr "помилкова директива .frame"
@@ -2623,19 +2751,19 @@ msgstr "помилкова директива .section: потрібне a,s,w,x
#: config/tc-alpha.c:5428 config/tc-alpha.c:5462 config/tc-arc.c:767
#: config/tc-arc.c:2552 config/tc-arc.c:2584 config/tc-arc.c:2689
-#: config/tc-cr16.c:813 config/tc-cr16.c:832 config/tc-cris.c:1223
-#: config/tc-crx.c:516 config/tc-crx.c:538 config/tc-crx.c:549
-#: config/tc-dlx.c:289 config/tc-hppa.c:8246 config/tc-i386.c:3071
-#: config/tc-i386.c:3123 config/tc-ia64.c:5380 config/tc-ia64.c:7418
-#: config/tc-ia64.c:7477 config/tc-m68k.c:4574 config/tc-m68k.c:4586
+#: config/tc-cr16.c:809 config/tc-cr16.c:828 config/tc-cris.c:1223
+#: config/tc-crx.c:512 config/tc-crx.c:534 config/tc-crx.c:545
+#: config/tc-dlx.c:289 config/tc-hppa.c:8246 config/tc-i386.c:3088
+#: config/tc-i386.c:3140 config/tc-ia64.c:5373 config/tc-ia64.c:7411
+#: config/tc-ia64.c:7470 config/tc-m68k.c:4574 config/tc-m68k.c:4586
#: config/tc-mips.c:3700 config/tc-mips.c:3733 config/tc-mips.c:3759
#: config/tc-nds32.c:3439 config/tc-nios2.c:3624 config/tc-nios2.c:3629
-#: config/tc-nios2.c:3635 config/tc-ns32k.c:1906 config/tc-ppc.c:1708
-#: config/tc-ppc.c:1746 config/tc-ppc.c:1785 config/tc-ppc.c:1824
-#: config/tc-ppc.c:1842 config/tc-pru.c:1569 config/tc-pru.c:1573
+#: config/tc-nios2.c:3635 config/tc-ns32k.c:1906 config/tc-ppc.c:1717
+#: config/tc-ppc.c:1755 config/tc-ppc.c:1794 config/tc-ppc.c:1833
+#: config/tc-ppc.c:1851 config/tc-pru.c:1568 config/tc-pru.c:1572
#: config/tc-s390.c:538 config/tc-s390.c:576 config/tc-sparc.c:961
#: config/tc-sparc.c:993 config/tc-tic30.c:121 config/tc-tic30.c:131
-#: config/tc-tic30.c:141 config/tc-tic30.c:151 config/tc-tic4x.c:1215
+#: config/tc-tic30.c:141 config/tc-tic30.c:151 config/tc-tic4x.c:1217
#: config/tc-tilegx.c:316 config/tc-tilepro.c:252 config/tc-vax.c:965
#: config/tc-vax.c:970 ecoff.c:1582
#, c-format
@@ -2643,7 +2771,7 @@ msgid "duplicate %s"
msgstr "Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ %s"
#: config/tc-alpha.c:5545 config/tc-arc.c:2520 config/tc-arc.c:2534
-#: config/tc-arm.c:897 config/tc-xtensa.c:5487 config/tc-xtensa.c:5563
+#: config/tc-arm.c:901 config/tc-xtensa.c:5487 config/tc-xtensa.c:5563
#: config/tc-xtensa.c:5680 config/tc-z80.c:3675
msgid "syntax error"
msgstr "ÑинтакÑична помилка"
@@ -2678,12 +2806,12 @@ msgstr ""
"-H\t\t\tпоказувати новий Ñимвол піÑÐ»Ñ Ð¾Ð±Ñ€Ñ–Ð·Ð°Ð½Ð½Ñ Ñ…ÐµÑˆÑƒ\n"
"-replace/-noreplace\tувімкнути або вимкнути оптимізацію викликів процедур\n"
-#: config/tc-alpha.c:5942 config/tc-arc.c:3128
+#: config/tc-alpha.c:5942 config/tc-arc.c:3123
#, c-format
msgid "unhandled relocation type %s"
msgstr "непридатний до обробки тип переÑÑƒÐ²Ð°Ð½Ð½Ñ %s"
-#: config/tc-alpha.c:5955 config/tc-arc.c:3136
+#: config/tc-alpha.c:5955 config/tc-arc.c:3131
msgid "non-absolute expression in constant field"
msgstr "неабÑолютний вираз у полі Ñталої"
@@ -2701,14 +2829,14 @@ msgstr "ВикориÑтано $at без «.set noat»"
msgid "!samegp reloc against symbol without .prologue: %s"
msgstr "переÑÑƒÐ²Ð°Ð½Ð½Ñ !samegp щодо Ñимволу без .prologue: %s"
-#: config/tc-alpha.c:6236 config/tc-arc.c:3259 config/tc-csky.c:5645
+#: config/tc-alpha.c:6236 config/tc-arc.c:3254 config/tc-csky.c:5646
#: config/tc-tilegx.c:1745 config/tc-tilepro.c:1522 config/tc-wasm32.c:813
#: config/tc-xtensa.c:6190
#, c-format
msgid "cannot represent `%s' relocation in object file"
msgstr "предÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÐµÑÑƒÐ²Ð°Ð½Ð½Ñ Â«%s» у об’єктному файлі неможливе"
-#: config/tc-alpha.c:6242 config/tc-arc.c:3265
+#: config/tc-alpha.c:6242 config/tc-arc.c:3260
#, c-format
msgid "internal error? cannot generate `%s' relocation"
msgstr "Ð’Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°? Ðе вдалоÑÑ Ñтворити переÑÑƒÐ²Ð°Ð½Ð½Ñ Â«%s»"
@@ -2740,7 +2868,7 @@ msgstr "Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð· командного Ñ€Ñдка перевизнач
msgid "unknown architecture: %s\n"
msgstr "невідома архітектура: %s\n"
-#: config/tc-arc.c:891 config/tc-ia64.c:7487 config/tc-tilegx.c:262
+#: config/tc-arc.c:891 config/tc-ia64.c:7480 config/tc-tilegx.c:262
msgid "Could not set architecture and machine"
msgstr "Ðе вдалоÑÑ Ð²Ñтановити архітектуру Ñ– тип комп’ютера"
@@ -2776,7 +2904,7 @@ msgstr "Помилкові дужки у полі операнда"
msgid "extra comma"
msgstr "зайва кома"
-#: config/tc-arc.c:1335 config/tc-pru.c:1450 config/tc-pru.c:1698
+#: config/tc-arc.c:1335 config/tc-pru.c:1449 config/tc-pru.c:1697
#: config/tc-xtensa.c:2090
msgid "missing argument"
msgstr "не виÑтачає аргументу"
@@ -2822,7 +2950,7 @@ msgid "flag mismatch"
msgstr "невідповідніÑÑ‚ÑŒ прапорців"
#: config/tc-arc.c:2083 config/tc-nios2.c:3103 config/tc-nios2.c:3130
-#: config/tc-pru.c:1413 config/tc-pru.c:1438 config/tc-xtensa.c:2156
+#: config/tc-pru.c:1412 config/tc-pru.c:1437 config/tc-xtensa.c:2156
msgid "too many arguments"
msgstr "забагато аргументів"
@@ -2846,14 +2974,14 @@ msgstr "код операції «%s» не підтримуєтьÑÑ Ð´Ð»Ñ Ð¿
msgid "unknown opcode '%s'"
msgstr "невідомий код операції «%s»"
-#: config/tc-arc.c:2602 config/tc-arc.c:5068 config/tc-h8300.c:78
+#: config/tc-arc.c:2602 config/tc-arc.c:5063 config/tc-h8300.c:78
#: config/tc-h8300.c:87 config/tc-h8300.c:97 config/tc-h8300.c:107
#: config/tc-h8300.c:117 config/tc-h8300.c:128 config/tc-h8300.c:242
#: config/tc-hppa.c:6820 config/tc-hppa.c:6826 config/tc-hppa.c:6832
#: config/tc-hppa.c:6838 config/tc-hppa.c:8225 config/tc-lm32.c:197
#: config/tc-mips.c:3690 config/tc-mips.c:4187 config/tc-mn10300.c:935
-#: config/tc-mn10300.c:940 config/tc-mn10300.c:2440 config/tc-riscv.c:1221
-#: config/tc-riscv.c:3878 config/tc-xc16x.c:79 config/tc-xc16x.c:86
+#: config/tc-mn10300.c:940 config/tc-mn10300.c:2440 config/tc-riscv.c:1263
+#: config/tc-riscv.c:4430 config/tc-xc16x.c:79 config/tc-xc16x.c:86
#: config/tc-xc16x.c:93
msgid "could not set architecture and machine"
msgstr "не вдалоÑÑ Ð²Ñтановити архітектуру Ñ– тип комп’ютера"
@@ -2871,13 +2999,7 @@ msgstr "ÐевирівнÑний операнд. Операнд має бути
msgid "Unaligned operand. Needs to be 16bit aligned"
msgstr "ÐевирівнÑний операнд. Операнд має бути вирівнÑно до 16 бітів"
-#: config/tc-arc.c:2940 config/tc-cr16.c:577 config/tc-crx.c:321
-#: config/tc-mn10200.c:766 write.c:1034
-#, c-format
-msgid "can't resolve `%s' {%s section} - `%s' {%s section}"
-msgstr "не вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ «%s» {розділ %s} - «%s» {розділ %s}"
-
-#: config/tc-arc.c:2999
+#: config/tc-arc.c:2994
#, c-format
msgid "PC relative relocation not allowed for (internal) type %d"
msgstr "Ðе можна викориÑтовувати переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ñ–Ð´Ð½Ð¾Ñно PC Ð´Ð»Ñ (внутрішнього) типу %d"
@@ -2886,35 +3008,35 @@ msgstr "Ðе можна викориÑтовувати переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð²
#. the insn.
#. FIXME! Check for the conditionality of
#. the insn.
-#: config/tc-arc.c:3044 config/tc-arc.c:4025
+#: config/tc-arc.c:3039 config/tc-arc.c:4020
msgid "TLS_*_S9 relocs are not supported yet"
msgstr "Підтримки переÑувань TLS_*_S9 ще не передбачено"
#. I cannot fix an GOTPC relocation because I need to relax it
#. from ld rx,[pcl,@sym@gotpc] to add rx,pcl,@sym@gotpc.
-#: config/tc-arc.c:3080
+#: config/tc-arc.c:3075
msgid "Unsupported operation on reloc"
msgstr "Ðепідтримувана дії при переÑуванні"
-#: config/tc-arc.c:3156 config/tc-arc.c:3172
+#: config/tc-arc.c:3151 config/tc-arc.c:3167
msgid "unknown fixup size"
msgstr "невідомий розмір виправленнÑ"
-#: config/tc-arc.c:3306
+#: config/tc-arc.c:3301
msgid "no relaxation found for this instruction."
msgstr "не знайдено оптимізації Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— інÑтрукції."
-#: config/tc-arc.c:3559
+#: config/tc-arc.c:3554
#, c-format
msgid "ARC-specific assembler options:\n"
msgstr " Параметри, Ñпецифічні Ð´Ð»Ñ Ð°Ñемблера ARC:\n"
-#: config/tc-arc.c:3585
+#: config/tc-arc.c:3580
#, c-format
msgid " -mrelax enable relaxation\n"
msgstr " -mrelax увімкнути оптимізацію\n"
-#: config/tc-arc.c:3588
+#: config/tc-arc.c:3583
#, c-format
msgid ""
"The following ARC-specific assembler options are deprecated and are accepted\n"
@@ -2923,7 +3045,7 @@ msgstr ""
"Вказані нижче Ñпецифічні Ð´Ð»Ñ ARC параметри аÑемблера Ñ” заÑтарілими Ñ– приймаютьÑÑ\n"
"лише з міркувань ÑуміÑноÑÑ‚Ñ–:\n"
-#: config/tc-arc.c:3591
+#: config/tc-arc.c:3586
#, c-format
msgid ""
" -mEA\n"
@@ -2978,679 +3100,687 @@ msgstr ""
" -muser-mode-only\n"
" -mxy\n"
-#: config/tc-arc.c:3681
+#: config/tc-arc.c:3676
#, c-format
msgid "Unable to find %s relocation for instruction %s"
msgstr "Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ переÑÑƒÐ²Ð°Ð½Ð½Ñ %s Ð´Ð»Ñ Ñ–Ð½Ñтрукції %s"
-#: config/tc-arc.c:3976
+#: config/tc-arc.c:3971
#, c-format
msgid "Unable to use @plt relocation for insn %s"
msgstr "Ðеможливо викориÑтати переÑÑƒÐ²Ð°Ð½Ð½Ñ @plt Ð´Ð»Ñ Ñ–Ð½Ñтрукції %s"
-#: config/tc-arc.c:3995
+#: config/tc-arc.c:3990
#, c-format
msgid "Unable to use @pcl relocation for insn %s"
msgstr "Ðеможливо викориÑтати переÑÑƒÐ²Ð°Ð½Ð½Ñ @pcl Ð´Ð»Ñ Ñ–Ð½Ñтрукції %s"
-#: config/tc-arc.c:4051
+#: config/tc-arc.c:4046
#, c-format
msgid "invalid relocation %s for field"
msgstr "Ðекоректне переÑуваннÑ, %s, Ð´Ð»Ñ Ð¿Ð¾Ð»Ñ"
-#: config/tc-arc.c:4161
+#: config/tc-arc.c:4156
#, c-format
msgid "Insn %s has a jump/branch instruction %s in its delay slot."
msgstr "ІнÑÑ‚Ñ€ÑƒÐºÑ†Ñ–Ñ %s міÑтить інÑтрукцію jump/branch %s у Ñвоєму Ñлоті затримки."
-#: config/tc-arc.c:4166
+#: config/tc-arc.c:4161
#, c-format
msgid "Insn %s has an instruction %s with limm in its delay slot."
msgstr "ІнÑÑ‚Ñ€ÑƒÐºÑ†Ñ–Ñ %s міÑтить інÑтрукцію %s із limm у Ñ—Ñ— Ñлоті затримки."
-#: config/tc-arc.c:4276 config/tc-microblaze.c:2567 config/tc-mn10300.c:1069
-#: config/tc-sh.c:418 config/tc-z80.c:1119 read.c:4701
+#: config/tc-arc.c:4271 config/tc-microblaze.c:2567 config/tc-mn10300.c:1069
+#: config/tc-sh.c:418 config/tc-z80.c:1119 read.c:4794
#, c-format
msgid "unsupported BFD relocation size %u"
msgstr "непідтримуваний розмір переÑÑƒÐ²Ð°Ð½Ð½Ñ BFD, %u"
-#: config/tc-arc.c:4296
+#: config/tc-arc.c:4291
#, c-format
msgid "Jump/Branch instruction detected at the end of the ZOL label @%s"
msgstr "ВиÑвлено інÑтрукцію переходу/Ñ€Ð¾Ð·Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ Ð½Ð°Ð¿Ñ€Ð¸ÐºÑ–Ð½Ñ†Ñ– мітки ZOL @%s"
-#: config/tc-arc.c:4303
+#: config/tc-arc.c:4298
#, c-format
msgid "Kernel instruction detected at the end of the ZOL label @%s"
msgstr "ВиÑвлено інÑтрукцію Ñдра наприкінці мітки ZOL @%s"
-#: config/tc-arc.c:4308
+#: config/tc-arc.c:4303
#, c-format
msgid "A jump instruction with long immediate detected at the end of the ZOL label @%s"
msgstr "ВиÑвлено інÑтрукцію переходу із довгою Ñталою наприкінці мітки ZOL @%s"
-#: config/tc-arc.c:4314
+#: config/tc-arc.c:4309
#, c-format
msgid "An illegal use of delay slot detected at the end of the ZOL label @%s"
msgstr "ВиÑвлено некоректне викориÑÑ‚Ð°Ð½Ð½Ñ Ñлота затримки наприкінці мітки ZOL @%s"
-#: config/tc-arc.c:4423
+#: config/tc-arc.c:4418
msgid "expected comma after instruction name"
msgstr "піÑÐ»Ñ Ð½Ð°Ð·Ð²Ð¸ інÑтрукції мало бути вказано кому"
-#: config/tc-arc.c:4435
+#: config/tc-arc.c:4430
msgid "expected comma after major opcode"
msgstr "піÑÐ»Ñ Ð¾Ñновного коду операції мало бути вказано кому"
-#: config/tc-arc.c:4620
+#: config/tc-arc.c:4615
#, c-format
msgid "Pseudocode already used %s"
msgstr "ПÑевдокод вже викориÑтав %s"
-#: config/tc-arc.c:4628
+#: config/tc-arc.c:4623
#, c-format
msgid "major opcode not in range [0x%02x - 0x%02x]"
msgstr "оÑновний код операції не потраплÑÑ” до діапазону [0x%02x - 0x%02x]"
-#: config/tc-arc.c:4632
+#: config/tc-arc.c:4627
msgid "minor opcode not in range [0x00 - 0x3f]"
msgstr "додатковий код операції не належить діапазону [0x00 - 0x3f]"
-#: config/tc-arc.c:4638
+#: config/tc-arc.c:4633
msgid "Improper use of OP1_IMM_IMPLIED"
msgstr "Ðеналежне викориÑÑ‚Ð°Ð½Ð½Ñ OP1_IMM_IMPLIED"
-#: config/tc-arc.c:4644
+#: config/tc-arc.c:4639
msgid "Improper use of OP1_MUST_BE_IMM"
msgstr "Ðеналежне викориÑÑ‚Ð°Ð½Ð½Ñ OP1_MUST_BE_IMM"
-#: config/tc-arc.c:4656
+#: config/tc-arc.c:4651
msgid "Couldn't generate extension instruction opcodes"
msgstr "Ðе вдалоÑÑ Ñтворити коди операцій інÑтрукції розширеннÑ"
-#: config/tc-arc.c:4691
+#: config/tc-arc.c:4686
msgid "expected comma after name"
msgstr "піÑÐ»Ñ Ð½Ð°Ð·Ð²Ð¸ мало бути вказано кому"
-#: config/tc-arc.c:4702
+#: config/tc-arc.c:4697
#, c-format
msgid "%s second argument cannot be a negative number %d"
msgstr "Другий аргумент %s не може бути від’ємним чиÑлом %d"
-#: config/tc-arc.c:4717
+#: config/tc-arc.c:4712
msgid "expected comma after register number"
msgstr "піÑÐ»Ñ Ð½Ð¾Ð¼ÐµÑ€Ð° регіÑтра мало бути вказано кому"
-#: config/tc-arc.c:4738
+#: config/tc-arc.c:4733
msgid "invalid mode"
msgstr "неправильний режим"
-#: config/tc-arc.c:4756
+#: config/tc-arc.c:4751
msgid "expected comma after register mode"
msgstr "піÑÐ»Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ñƒ регіÑтра мало бути вказано кому"
-#: config/tc-arc.c:4771
+#: config/tc-arc.c:4766
msgid "shortcut designator invalid"
msgstr "позначник ÑÐºÐ¾Ñ€Ð¾Ñ‡ÐµÐ½Ð½Ñ Ñ” некоректним"
-#: config/tc-arc.c:4869
+#: config/tc-arc.c:4864
#, c-format
msgid "core register %s value (%d) too large"
msgstr "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ€ÐµÐ³Ñ–Ñтра Ñдра %s (%d) Ñ” надто великим"
-#: config/tc-arc.c:4881
+#: config/tc-arc.c:4876
#, c-format
msgid "duplicate aux register %s"
msgstr "Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð´Ð¾Ð¿Ð¾Ð¼Ñ–Ð¶Ð½Ð¾Ð³Ð¾ регіÑтра %s"
-#: config/tc-arc.c:4886
+#: config/tc-arc.c:4881
#, c-format
msgid "condition code %s value (%d) too large"
msgstr "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÐºÐ¾Ð´Ñƒ умови %s (%d) Ñ” надто великим"
-#: config/tc-arc.c:4903
+#: config/tc-arc.c:4898
msgid "Unknown extension"
msgstr "Ðевідоме розширеннÑ"
-#: config/tc-arc.c:5006
+#: config/tc-arc.c:5001
msgid "Overwrite explicitly set Tag_ARC_CPU_base"
msgstr "ÐŸÐµÑ€ÐµÐ·Ð°Ð¿Ð¸Ñ Ñвним чином вÑтановлює Tag_ARC_CPU_base"
-#: config/tc-arc.c:5054
+#: config/tc-arc.c:5049
msgid "Overwrite explicitly set Tag_ARC_ABI_rf16 to full register file"
msgstr "ÐŸÐµÑ€ÐµÐ·Ð°Ð¿Ð¸Ñ Ñвним чином вÑтановлює Tag_ARC_ABI_rf16 до повного файла регіÑтру"
-#: config/tc-arm.c:708
+#: config/tc-arm.c:711
msgid "ARM register expected"
msgstr "мало бути вказано регіÑÑ‚Ñ€ ARM"
-#: config/tc-arm.c:709
+#: config/tc-arm.c:712
msgid "bad or missing co-processor number"
msgstr "помилковий номер ÑпівпроцеÑора або ÑпівпроцеÑор не вказано"
-#: config/tc-arm.c:710
+#: config/tc-arm.c:713
msgid "co-processor register expected"
msgstr "мало бути вказано регіÑÑ‚Ñ€ ÑпівпроцеÑора"
-#: config/tc-arm.c:711
+#: config/tc-arm.c:714
msgid "FPA register expected"
msgstr "мало бути викориÑтано регіÑÑ‚Ñ€ FPA"
-#: config/tc-arm.c:712
+#: config/tc-arm.c:715
msgid "VFP single precision register expected"
msgstr "мало бути викориÑтано регіÑÑ‚Ñ€ VFP одинарної точноÑÑ‚Ñ–"
-#: config/tc-arm.c:713
+#: config/tc-arm.c:716
msgid "VFP/Neon double precision register expected"
msgstr "мало бути викориÑтано регіÑÑ‚Ñ€ VFP/Neon подвійної точноÑÑ‚Ñ–"
-#: config/tc-arm.c:714
+#: config/tc-arm.c:717
msgid "Neon quad precision register expected"
msgstr "мало бути викориÑтано регіÑÑ‚Ñ€ Neon четверної точноÑÑ‚Ñ–"
-#: config/tc-arm.c:715
+#: config/tc-arm.c:718
msgid "VFP single or double precision register expected"
msgstr "мало бути викориÑтано регіÑÑ‚Ñ€ VFP одинарної або подвійної точноÑÑ‚Ñ–"
-#: config/tc-arm.c:716
+#: config/tc-arm.c:719
msgid "Neon double or quad precision register expected"
msgstr "мало бути викориÑтано регіÑÑ‚Ñ€ Neon подвійної або четверної точноÑÑ‚Ñ–"
-#: config/tc-arm.c:717
+#: config/tc-arm.c:720
msgid "Neon single or double precision register expected"
msgstr "мало бути викориÑтано регіÑÑ‚Ñ€ Neon одинарної або подвійної точноÑÑ‚Ñ–"
-#: config/tc-arm.c:718
+#: config/tc-arm.c:721
msgid "VFP single, double or Neon quad precision register expected"
msgstr "мало бути викориÑтано регіÑÑ‚Ñ€ VFP одинарної або подвійної точноÑÑ‚Ñ– або регіÑÑ‚Ñ€ Neon четверної точноÑÑ‚Ñ–"
-#: config/tc-arm.c:720
+#: config/tc-arm.c:723
msgid "VFP system register expected"
msgstr "мало бути викориÑтано ÑиÑтемний регіÑÑ‚Ñ€ VFP"
-#: config/tc-arm.c:721
+#: config/tc-arm.c:724
msgid "Maverick MVF register expected"
msgstr "мало бути викориÑтано регіÑÑ‚Ñ€ Maverick MVF"
-#: config/tc-arm.c:722
+#: config/tc-arm.c:725
msgid "Maverick MVD register expected"
msgstr "мало бути викориÑтано регіÑÑ‚Ñ€ Maverick MVD"
-#: config/tc-arm.c:723
+#: config/tc-arm.c:726
msgid "Maverick MVFX register expected"
msgstr "мало бути викориÑтано регіÑÑ‚Ñ€ Maverick MVFX"
-#: config/tc-arm.c:724
+#: config/tc-arm.c:727
msgid "Maverick MVDX register expected"
msgstr "мало бути викориÑтано регіÑÑ‚Ñ€ Maverick MVDX"
-#: config/tc-arm.c:725
+#: config/tc-arm.c:728
msgid "Maverick MVAX register expected"
msgstr "мало бути викориÑтано регіÑÑ‚Ñ€ Maverick MVAX"
-#: config/tc-arm.c:726
+#: config/tc-arm.c:729
msgid "Maverick DSPSC register expected"
msgstr "мало бути викориÑтано регіÑÑ‚Ñ€ Maverick DSPSC"
-#: config/tc-arm.c:727
+#: config/tc-arm.c:730
msgid "iWMMXt data register expected"
msgstr "мало бути викориÑтано регіÑÑ‚Ñ€ даних iWMMXt"
-#: config/tc-arm.c:728 config/tc-arm.c:7848
+#: config/tc-arm.c:731 config/tc-arm.c:7860
msgid "iWMMXt control register expected"
msgstr "мало бути викориÑтано регіÑÑ‚Ñ€ ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ iWMMXt"
-#: config/tc-arm.c:729
+#: config/tc-arm.c:732
msgid "iWMMXt scalar register expected"
msgstr "мало бути викориÑтано ÑкалÑрний регіÑÑ‚Ñ€ iWMMXt"
-#: config/tc-arm.c:730
+#: config/tc-arm.c:733
msgid "XScale accumulator register expected"
msgstr "мало бути вказано регіÑÑ‚Ñ€ акумулÑтора XScale"
-#: config/tc-arm.c:731
+#: config/tc-arm.c:734
msgid "MVE vector register expected"
msgstr "мало бути вказано векторний регіÑÑ‚Ñ€ MVE"
-#: config/tc-arm.c:733
+#: config/tc-arm.c:736
msgid "ZR register expected"
msgstr "мало бути вказано регіÑÑ‚Ñ€ ZR"
+#: config/tc-arm.c:737
+msgid "Pseudo register expected"
+msgstr "мало бути вказано пÑевдорегіÑÑ‚Ñ€"
+
#. For score5u : div/mul will pop warning message, mmu/alw/asw will pop error message.
-#: config/tc-arm.c:898 config/tc-score.c:259
+#: config/tc-arm.c:902 config/tc-score.c:259
msgid "bad arguments to instruction"
msgstr "помилкові аргументи інÑтрукції"
-#: config/tc-arm.c:899
+#: config/tc-arm.c:903
msgid "r13 not allowed here"
msgstr "тут не можна викориÑтовувати r13"
-#: config/tc-arm.c:900
+#: config/tc-arm.c:904
msgid "r15 not allowed here"
msgstr "тут не можна викориÑтовувати r15"
-#: config/tc-arm.c:901
+#: config/tc-arm.c:905
msgid "Odd register not allowed here"
msgstr "Тут не можна викориÑтовувати непарний регіÑÑ‚Ñ€"
-#: config/tc-arm.c:902
+#: config/tc-arm.c:906
msgid "Even register not allowed here"
msgstr "Тут не можна викориÑтовувати парний регіÑÑ‚Ñ€"
-#: config/tc-arm.c:903
+#: config/tc-arm.c:907
msgid "instruction cannot be conditional"
msgstr "інÑÑ‚Ñ€ÑƒÐºÑ†Ñ–Ñ Ð½Ðµ може бути умовною"
-#: config/tc-arm.c:904
+#: config/tc-arm.c:908
msgid "registers may not be the same"
msgstr "регіÑтри не можуть бути однаковими"
-#: config/tc-arm.c:905
+#: config/tc-arm.c:909
msgid "lo register required"
msgstr "мало бути вказано регіÑÑ‚Ñ€ lo"
-#: config/tc-arm.c:906
+#: config/tc-arm.c:910
msgid "instruction not supported in Thumb16 mode"
msgstr "підтримки інÑтрукції у режимі Thumb16 не передбачено"
-#: config/tc-arm.c:907
+#: config/tc-arm.c:911
msgid "instruction does not accept this addressing mode"
msgstr "у інÑтрукції не можна викориÑтовувати цей режим адреÑуваннÑ"
-#: config/tc-arm.c:908
+#: config/tc-arm.c:912
msgid "branch must be last instruction in IT block"
msgstr "Ð²Ñ–Ð´Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ Ð¼Ð°Ñ” бути оÑтанньою інÑтрукцією у блоці IT"
-#: config/tc-arm.c:909
+#: config/tc-arm.c:913
msgid "branch out of range or not a multiple of 2"
msgstr "Ð²Ñ–Ð´Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ Ð¿Ð¾Ð·Ð° припуÑтимим діапазоном або кількіÑÑ‚ÑŒ відгалужень не кратна 2"
-#: config/tc-arm.c:910
+#: config/tc-arm.c:914
msgid "instruction not allowed in VPT block"
msgstr "у блоці VPT інÑтрукцію заборонено"
-#: config/tc-arm.c:911
+#: config/tc-arm.c:915
msgid "instruction not allowed in IT block"
msgstr "у блоці IT інÑтрукцію заборонено"
-#: config/tc-arm.c:912
+#: config/tc-arm.c:916
msgid "instruction missing MVE vector predication code"
msgstr "у інÑтрукції не вказано коду векторного Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð½Ñ MVE"
-#: config/tc-arm.c:913
+#: config/tc-arm.c:917
msgid "selected FPU does not support instruction"
msgstr "у вибраному FPU не передбачено підтримки цієї інÑтрукції"
-#: config/tc-arm.c:914
+#: config/tc-arm.c:918
msgid "thumb conditional instruction should be in IT block"
msgstr "умовна інÑÑ‚Ñ€ÑƒÐºÑ†Ñ–Ñ thumb має перебувати у блоці IT"
-#: config/tc-arm.c:916
+#: config/tc-arm.c:920
msgid "vector predicated instruction should be in VPT/VPST block"
msgstr "інÑÑ‚Ñ€ÑƒÐºÑ†Ñ–Ñ Ð· предикатом вектора має розташовуватиÑÑ Ñƒ блоці VPT/VPST"
-#: config/tc-arm.c:917
+#: config/tc-arm.c:921
msgid "incorrect condition in IT block"
msgstr "некоректна умова у блоці IT"
-#: config/tc-arm.c:918
+#: config/tc-arm.c:922
msgid "incorrect condition in VPT/VPST block"
msgstr "некоректна умова у блоці VPT/VPST"
-#: config/tc-arm.c:919
+#: config/tc-arm.c:923
msgid "IT falling in the range of a previous IT block"
msgstr "IT потраплÑÑ” у діапазон попереднього блоку IT"
-#: config/tc-arm.c:920
+#: config/tc-arm.c:924
msgid "missing .fnstart before unwinding directive"
msgstr "пропущено .fnstart до директиви розгортаннÑ"
-#: config/tc-arm.c:922
+#: config/tc-arm.c:926
msgid "cannot use register index with PC-relative addressing"
msgstr "не можна викориÑтовувати Ñ–Ð½Ð´ÐµÐºÑ Ñ€ÐµÐ³Ñ–Ñтрів у режимі адреÑÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ñ–Ð´Ð½Ð¾Ñно PC"
-#: config/tc-arm.c:924
+#: config/tc-arm.c:928
msgid "cannot use writeback with PC-relative addressing"
msgstr "не можна викориÑтовувати зворотний Ð·Ð°Ð¿Ð¸Ñ Ð· адреÑуваннÑм відноÑно PC"
-#: config/tc-arm.c:926
+#: config/tc-arm.c:930
msgid "selected processor does not support fp16 instruction"
msgstr "у вибраному процеÑорі не передбачено підтримки fp16 інÑтрукції"
-#: config/tc-arm.c:927
+#: config/tc-arm.c:931
msgid "selected processor does not support bf16 instruction"
msgstr "у вибраному процеÑорі не передбачено підтримки інÑтрукції bf16"
-#: config/tc-arm.c:928
+#: config/tc-arm.c:932
msgid "selected processor does not support cde instruction"
msgstr "у вибраному процеÑорі не передбачено підтримки інÑтрукції cde"
-#: config/tc-arm.c:929
+#: config/tc-arm.c:933
msgid "coprocessor for insn is not enabled for cde"
msgstr "ÑпівпроцеÑор Ð´Ð»Ñ Ñ–Ð½Ñтрукції не увімкнено Ð´Ð»Ñ cde"
-#: config/tc-arm.c:930
+#: config/tc-arm.c:934
msgid "using "
msgstr "викориÑтовуєтьÑÑ "
-#: config/tc-arm.c:931
+#: config/tc-arm.c:935
msgid "relocation valid in thumb1 code only"
msgstr "переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ” коректним лише у коді thumb1"
-#: config/tc-arm.c:932
+#: config/tc-arm.c:936
msgid "Warning: instruction is UNPREDICTABLE in an IT block"
msgstr "ПопередженнÑ: у блоці IT поведінка інÑтрукції Ñ” непередбачуваною"
-#: config/tc-arm.c:934
+#: config/tc-arm.c:938
msgid "Warning: instruction is UNPREDICTABLE in a VPT block"
msgstr "ПопередженнÑ: у блоці VPT інÑÑ‚Ñ€ÑƒÐºÑ†Ñ–Ñ Ð¿Ð¾Ð²Ð¾Ð´Ð¸Ñ‚ÑŒ Ñебе непередбачувано"
-#: config/tc-arm.c:936
+#: config/tc-arm.c:940
msgid "Warning: instruction is UNPREDICTABLE with PC operand"
msgstr "ПопередженнÑ: із операндом PC поведінка інÑтрукції Ñ” непередбачуваною"
-#: config/tc-arm.c:938
+#: config/tc-arm.c:942
msgid "Warning: instruction is UNPREDICTABLE with SP operand"
msgstr "ПопередженнÑ: із операндом SP поведінка інÑтрукції Ñ” непередбачуваною"
-#: config/tc-arm.c:940
+#: config/tc-arm.c:944
msgid "bad type in SIMD instruction"
msgstr "помилковий тип у інÑтрукції SIMD"
-#: config/tc-arm.c:942
+#: config/tc-arm.c:946
msgid "GAS auto-detection mode and -march=all is deprecated for MVE, please use a valid -march or -mcpu option."
msgstr "режим автоматичного виÑÐ²Ð»ÐµÐ½Ð½Ñ GAS та -march=all Ñ” заÑтарілими Ð´Ð»Ñ MVE, будь лаÑка, ÑкориÑтайтеÑÑ ÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¼ параметром -march або -mcpu."
-#: config/tc-arm.c:944
+#: config/tc-arm.c:948
msgid "Warning: 32-bit element size and same destination and source operands makes instruction UNPREDICTABLE"
msgstr "ПопередженнÑ: 32-бітовий розмір елемента Ñ– однакові Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¾Ð¿ÐµÑ€Ð°Ð½Ð´Ñ–Ð² Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ– джерела роблÑÑ‚ÑŒ поведінку інÑтрукції непередбачуваною"
-#: config/tc-arm.c:946
+#: config/tc-arm.c:950
msgid "bad element type for instruction"
msgstr "помилковий тип елемента Ð´Ð»Ñ Ñ–Ð½Ñтрукції"
-#: config/tc-arm.c:947
+#: config/tc-arm.c:951
msgid "MVE vector register Q[0..7] expected"
msgstr "мало бути вказано векторний регіÑÑ‚Ñ€ MVE Q[0..7]"
-#: config/tc-arm.c:1167
+#: config/tc-arm.c:952
+msgid "selected processor does not support PACBTI extention"
+msgstr "у вибраному процеÑорі не передбачено підтримки Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ PACBTI"
+
+#: config/tc-arm.c:1172
msgid "immediate expression requires a # prefix"
msgstr "Ñталий вираз потребує префікÑа #"
-#: config/tc-arm.c:1196 read.c:3940
+#: config/tc-arm.c:1201 read.c:4028
msgid "missing expression"
msgstr "не виÑтачає виразу"
-#: config/tc-arm.c:1210 config/tc-arm.c:5674 config/tc-score.c:1209
+#: config/tc-arm.c:1215 config/tc-arm.c:5682 config/tc-score.c:1209
msgid "invalid constant"
msgstr "некоректна конÑтанта"
-#: config/tc-arm.c:1388
+#: config/tc-arm.c:1350
msgid "expected #constant"
msgstr "мало бути викориÑтано Ñталу #"
-#: config/tc-arm.c:1560 config/tc-arm.c:1591
+#: config/tc-arm.c:1522 config/tc-arm.c:1553
#, c-format
msgid "bad size %d in type specifier"
msgstr "помилковий розмір, %d, у Ñпецифікації типу"
-#: config/tc-arm.c:1567
+#: config/tc-arm.c:1529
msgid "unexpected type character `b' -- did you mean `bf'?"
msgstr "неÑподіваний тип Ñимволу, «b» — ви мали на увазі «bf»?"
-#: config/tc-arm.c:1574
+#: config/tc-arm.c:1536
#, c-format
msgid "unexpected character `%c' in type specifier"
msgstr "неочікуваний Ñимвол «%c» у Ñпецифікації типу"
-#: config/tc-arm.c:1641
+#: config/tc-arm.c:1603
msgid "only one type should be specified for operand"
msgstr "Ð´Ð»Ñ Ð¾Ð¿ÐµÑ€Ð°Ð½Ð´Ð° мало бути вказано лише один тип"
-#: config/tc-arm.c:1647
+#: config/tc-arm.c:1609
msgid "vector type expected"
msgstr "мало бути вказано векторний тип"
-#: config/tc-arm.c:1756
+#: config/tc-arm.c:1718
msgid "expected MVE register [q0..q7]"
msgstr "мало бути вказано регіÑÑ‚Ñ€ MVE [q0..q7]"
-#: config/tc-arm.c:1776
+#: config/tc-arm.c:1738
msgid "can't redefine type for operand"
msgstr "Ð¿ÐµÑ€ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ‚Ð¸Ð¿Ñƒ операнда неможливе"
-#: config/tc-arm.c:1792
+#: config/tc-arm.c:1754
msgid "only D and Q registers may be indexed"
msgstr "індекÑувати можна лише регіÑтри D Ñ– Q"
-#: config/tc-arm.c:1794
+#: config/tc-arm.c:1756
msgid "only D registers may be indexed"
msgstr "індекÑувати можна лише регіÑтри D"
-#: config/tc-arm.c:1800
+#: config/tc-arm.c:1762
msgid "can't change index for operand"
msgstr "неможливо змінити Ñ–Ð½Ð´ÐµÐºÑ Ð¾Ð¿ÐµÑ€Ð°Ð½Ð´Ð°"
-#: config/tc-arm.c:1863
+#: config/tc-arm.c:1825
msgid "register operand expected, but got scalar"
msgstr "мало бути вказано операнд регіÑтра, але вказано чиÑло"
-#: config/tc-arm.c:1914
+#: config/tc-arm.c:1876
msgid "scalar must have an index"
msgstr "ÑкалÑÑ€ повинен мати індекÑ"
-#: config/tc-arm.c:1919 config/tc-arm.c:20217 config/tc-arm.c:20300
-#: config/tc-arm.c:20967
+#: config/tc-arm.c:1881 config/tc-arm.c:20245 config/tc-arm.c:20328
+#: config/tc-arm.c:21001
msgid "scalar index out of range"
msgstr "Ñ–Ð½Ð´ÐµÐºÑ ÑкалÑра поза межами діапазону"
-#: config/tc-arm.c:1989
+#: config/tc-arm.c:1959
msgid "r0-r12, lr or APSR expected"
msgstr "мало бути вказано r0-r12, lr або APSR"
-#: config/tc-arm.c:2008
+#: config/tc-arm.c:1986
msgid "bad range in register list"
msgstr "помилковий діапазон у ÑпиÑку регіÑтрів"
-#: config/tc-arm.c:2016 config/tc-arm.c:2025 config/tc-arm.c:2066
+#: config/tc-arm.c:1994 config/tc-arm.c:2003 config/tc-arm.c:2044
#, c-format
msgid "Warning: duplicated register (r%d) in register list"
msgstr "ПопередженнÑ: Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ñ€ÐµÐ³Ñ–Ñтра (r%d) у ÑпиÑку регіÑтрів"
-#: config/tc-arm.c:2028
+#: config/tc-arm.c:2006
msgid "Warning: register range not in ascending order"
msgstr "ПопередженнÑ: діапазон регіÑтрів вказано не у порÑдку зроÑтаннÑ"
-#: config/tc-arm.c:2039
+#: config/tc-arm.c:2017
msgid "missing `}'"
msgstr "не виÑтачає «}»"
-#: config/tc-arm.c:2055
+#: config/tc-arm.c:2033
msgid "invalid register mask"
msgstr "некоректна маÑка регіÑтрів"
-#: config/tc-arm.c:2199 config/tc-arm.c:2307
+#: config/tc-arm.c:2177 config/tc-arm.c:2285
msgid "VPR expected last"
msgstr "VPR мало бути вказано оÑтаннім"
-#: config/tc-arm.c:2205
+#: config/tc-arm.c:2183
msgid "VFP single precision register or VPR expected"
msgstr "мало бути викориÑтано регіÑÑ‚Ñ€ VFP одинарної точноÑÑ‚Ñ– або VPR"
#. regtype == REG_TYPE_VFD.
-#: config/tc-arm.c:2208
+#: config/tc-arm.c:2186
msgid "VFP/Neon double precision register or VPR expected"
msgstr "мало бути викориÑтано регіÑÑ‚Ñ€ VFP/Neon подвійної точноÑÑ‚Ñ– або VPR"
-#: config/tc-arm.c:2225 config/tc-arm.c:2269
+#: config/tc-arm.c:2203 config/tc-arm.c:2247
msgid "register out of range in list"
msgstr "регіÑÑ‚Ñ€ поза межами припуÑтимого діапазону у ÑпиÑку"
-#: config/tc-arm.c:2247 config/tc-arm.c:4542 config/tc-arm.c:4676
+#: config/tc-arm.c:2225 config/tc-arm.c:4546 config/tc-arm.c:4680
msgid "register list not in ascending order"
msgstr "ÑпиÑок регіÑтрів вказано не у порÑдку зроÑтаннÑ"
-#: config/tc-arm.c:2278
+#: config/tc-arm.c:2256
msgid "register range not in ascending order"
msgstr "діапазон регіÑтрів вказано не за зроÑтаннÑм"
-#: config/tc-arm.c:2317
+#: config/tc-arm.c:2295
msgid "non-contiguous register range"
msgstr "діапазон регіÑтрів не Ñ” неперервним"
-#: config/tc-arm.c:2377
+#: config/tc-arm.c:2355
msgid "register stride must be 1"
msgstr "крок за індекÑом регіÑтрів має бути 1"
-#: config/tc-arm.c:2378
+#: config/tc-arm.c:2356
msgid "register stride must be 1 or 2"
msgstr "крок за індекÑом регіÑтрів має бути 1 або 2"
-#: config/tc-arm.c:2379
+#: config/tc-arm.c:2357
msgid "mismatched element/structure types in list"
msgstr "невідповідні типи елемент/Ñтруктура у ÑпиÑку"
-#: config/tc-arm.c:2449
+#: config/tc-arm.c:2427
msgid "don't use Rn-Rm syntax with non-unit stride"
msgstr "не викориÑтовуйте ÑинтакÑÐ¸Ñ Rn-Rm не неодиничним кроком за індекÑом"
-#: config/tc-arm.c:2504
+#: config/tc-arm.c:2482
msgid "error parsing element/structure list"
msgstr "помилка під Ñ‡Ð°Ñ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ ÑпиÑку елемент/Ñтруктура"
-#: config/tc-arm.c:2510
+#: config/tc-arm.c:2488
msgid "expected }"
msgstr "мало бути знайдено }"
-#: config/tc-arm.c:2600
+#: config/tc-arm.c:2578
msgid "attempt to redefine typed alias"
msgstr "Ñпроба перевизначити типізовану альтернативну назву"
-#: config/tc-arm.c:2735
+#: config/tc-arm.c:2713
msgid "bad type for register"
msgstr "помилковий тип регіÑтра"
-#: config/tc-arm.c:2746 config/tc-nios2.c:1797
+#: config/tc-arm.c:2724 config/tc-nios2.c:1797
msgid "expression must be constant"
msgstr "вираз має бути Ñталим"
-#: config/tc-arm.c:2763
+#: config/tc-arm.c:2741
msgid "can't redefine the type of a register alias"
msgstr "не можна перевизначати тип альтернативної назви регіÑтра"
-#: config/tc-arm.c:2770
+#: config/tc-arm.c:2748
msgid "you must specify a single type only"
msgstr "вам Ñлід вказати лише один тип"
-#: config/tc-arm.c:2783
+#: config/tc-arm.c:2761
msgid "can't redefine the index of a scalar alias"
msgstr "не можна перевизначати Ñ–Ð½Ð´ÐµÐºÑ ÑкалÑрного замінника"
-#: config/tc-arm.c:2791
+#: config/tc-arm.c:2769
msgid "scalar index must be constant"
msgstr "ÑкалÑрний Ñ–Ð½Ð´ÐµÐºÑ Ð¼Ð°Ñ” бути Ñталим"
-#: config/tc-arm.c:2800
+#: config/tc-arm.c:2778
msgid "expecting ]"
msgstr "мало бути знайдено ]"
-#: config/tc-arm.c:2852
+#: config/tc-arm.c:2830
msgid "invalid syntax for .dn directive"
msgstr "некоректний ÑинтакÑÐ¸Ñ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ð¸ .dn"
-#: config/tc-arm.c:2858
+#: config/tc-arm.c:2836
msgid "invalid syntax for .qn directive"
msgstr "некоректний ÑинтакÑÐ¸Ñ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ð¸ .qn"
-#: config/tc-arm.c:2893
+#: config/tc-arm.c:2871
#, c-format
msgid "ignoring attempt to use .unreq on fixed register name: '%s'"
msgstr "ігноруємо Ñпробу викориÑтати .unreq Ð´Ð»Ñ Ñ„Ñ–ÐºÑованої назви регіÑтра: «%s»"
-#: config/tc-arm.c:3155
+#: config/tc-arm.c:3133
#, c-format
msgid "Failed to find real start of function: %s\n"
msgstr "Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñправжній початок функції: %s\n"
-#: config/tc-arm.c:3172
+#: config/tc-arm.c:3150
msgid "selected processor does not support THUMB opcodes"
msgstr "у вибраному процеÑорі не передбачено підтримки кодів операцій THUMB"
-#: config/tc-arm.c:3185
+#: config/tc-arm.c:3163
msgid "selected processor does not support ARM opcodes"
msgstr "у вибраному процеÑорі не передбачено підтримки кодів операцій ARM"
-#: config/tc-arm.c:3197
+#: config/tc-arm.c:3175
#, c-format
msgid "invalid instruction size selected (%d)"
msgstr "вибрано некоректний розмір інÑтрукції (%d)"
-#: config/tc-arm.c:3229
+#: config/tc-arm.c:3207
#, c-format
msgid "invalid operand to .code directive (%d) (expecting 16 or 32)"
msgstr "некоректний операнд директиви .code (%d) (мало бути 16 або 32)"
-#: config/tc-arm.c:3284
+#: config/tc-arm.c:3262
#, c-format
msgid "expected comma after name \"%s\""
msgstr "піÑÐ»Ñ Ð½Ð°Ð·Ð²Ð¸ «%s» мало бути вказано кому"
-#: config/tc-arm.c:3334 config/tc-m32r.c:584
+#: config/tc-arm.c:3312 config/tc-m32r.c:584
#, c-format
msgid "symbol `%s' already defined"
msgstr "Ñимвол «%s» вже визначено"
-#: config/tc-arm.c:3367
+#: config/tc-arm.c:3345
#, c-format
msgid "unrecognized syntax mode \"%s\""
msgstr "нерозпізнаний режим ÑинтакÑиÑу, «%s»"
-#: config/tc-arm.c:3410
+#: config/tc-arm.c:3388
msgid ".ref pseudo-op only available with -mccs flag."
msgstr "пÑевдооператор .ref можна викориÑтовувати лише разом із прапорцем -mccs."
-#: config/tc-arm.c:3451
+#: config/tc-arm.c:3429
msgid ".asmfunc repeated."
msgstr "Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€ÐµÐ½Ð½Ñ .asmfunc."
-#: config/tc-arm.c:3455
+#: config/tc-arm.c:3433
msgid ".asmfunc without function."
msgstr ".asmfunc без функції."
-#: config/tc-arm.c:3461
+#: config/tc-arm.c:3439
msgid ".asmfunc pseudo-op only available with -mccs flag."
msgstr "пÑевдооператор .asmfunc можна викориÑтовувати лише разом із прапорцем -mccs."
-#: config/tc-arm.c:3472
+#: config/tc-arm.c:3450
msgid ".endasmfunc without a .asmfunc."
msgstr ".endasmfunc без .asmfunc."
-#: config/tc-arm.c:3476
+#: config/tc-arm.c:3454
msgid ".endasmfunc without function."
msgstr ".endasmfunc без функції."
-#: config/tc-arm.c:3487
+#: config/tc-arm.c:3465
msgid ".endasmfunc pseudo-op only available with -mccs flag."
msgstr "пÑевдооператор .endasmfunc можна викориÑтовувати лише разом із прапорцем -mccs."
-#: config/tc-arm.c:3496
+#: config/tc-arm.c:3474
msgid ".def pseudo-op only available with -mccs flag."
msgstr "пÑевдооператор .def можна викориÑтовувати лише разом із прапорцем -mccs."
-#: config/tc-arm.c:3654
+#: config/tc-arm.c:3632
msgid "invalid type for literal pool"
msgstr "некоректний тип буфера літералів"
-#: config/tc-arm.c:3734 config/tc-tic54x.c:5331
+#: config/tc-arm.c:3712 config/tc-tic54x.c:5331
#, c-format
msgid "Invalid label '%s'"
msgstr "Ðекоректна мітка «%s»"
-#: config/tc-arm.c:3910
+#: config/tc-arm.c:3888
msgid "(plt) is only valid on branch targets"
msgstr "(plt) Ñ” коректним лише Ð´Ð»Ñ Ð²Ñ–Ð´Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð¸Ñ… призначень"
-#: config/tc-arm.c:3916 config/tc-csky.c:7649 config/tc-s390.c:1202
+#: config/tc-arm.c:3894 config/tc-csky.c:7650 config/tc-s390.c:1202
#: config/tc-s390.c:1872 config/tc-xtensa.c:1712
#, c-format
msgid "%s relocations do not fit in %d byte"
@@ -3660,407 +3790,419 @@ msgstr[1] "переÑÑƒÐ²Ð°Ð½Ð½Ñ %s не відповідають на %d баÐ
msgstr[2] "переÑÑƒÐ²Ð°Ð½Ð½Ñ %s не відповідають на %d байтів"
msgstr[3] "переÑÑƒÐ²Ð°Ð½Ð½Ñ %s не відповідають на %d байт"
-#: config/tc-arm.c:3998
+#: config/tc-arm.c:3976
msgid ".inst.n operand too big. Use .inst.w instead"
msgstr "Операнд .inst.n Ñ” надто великим. СкориÑтайтеÑÑ ÐºÑ€Ð°Ñ‰Ðµ .inst.w"
-#: config/tc-arm.c:4018
+#: config/tc-arm.c:3996
msgid "cannot determine Thumb instruction size. Use .inst.n/.inst.w instead"
msgstr "не вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ розмір інÑтрукції Thumb. СкориÑтайтеÑÑ .inst.n/.inst.w"
-#: config/tc-arm.c:4048
+#: config/tc-arm.c:4026
msgid "width suffixes are invalid in ARM mode"
msgstr "ÑуфікÑи ширини Ñ” некоректними у режимі ARM"
-#: config/tc-arm.c:4090 dwarf2dbg.c:1345
+#: config/tc-arm.c:4068 dwarf2dbg.c:1429
msgid "expected 0 or 1"
msgstr "мало бути 0 або 1"
-#: config/tc-arm.c:4094
+#: config/tc-arm.c:4072
msgid "missing comma"
msgstr "пропущено кому"
-#: config/tc-arm.c:4127
+#: config/tc-arm.c:4105
msgid "duplicate .fnstart directive"
msgstr "Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ð¸ .fnstart"
-#: config/tc-arm.c:4158 config/tc-tic6x.c:410
+#: config/tc-arm.c:4136 config/tc-tic6x.c:410
msgid "duplicate .handlerdata directive"
msgstr "Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ð¸ .handlerdata"
-#: config/tc-arm.c:4177
+#: config/tc-arm.c:4155
msgid ".fnend directive without .fnstart"
msgstr "директива .fnend без директиви .fnstart"
-#: config/tc-arm.c:4244 config/tc-tic6x.c:391
+#: config/tc-arm.c:4222 config/tc-tic6x.c:391
msgid "personality routine specified for cantunwind frame"
msgstr "вказано підпрограму перÑоналізації Ð´Ð»Ñ ÐºÐ°Ð´Ñ€Ñƒ cantunwind"
-#: config/tc-arm.c:4261 config/tc-tic6x.c:452
+#: config/tc-arm.c:4239 config/tc-tic6x.c:452
msgid "duplicate .personalityindex directive"
msgstr "Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ð¸ .personalityindex"
-#: config/tc-arm.c:4268 config/tc-tic6x.c:459
+#: config/tc-arm.c:4246 config/tc-tic6x.c:459
msgid "bad personality routine number"
msgstr "помилковий номер підпрограми personality"
-#: config/tc-arm.c:4290 config/tc-tic6x.c:476
+#: config/tc-arm.c:4268 config/tc-tic6x.c:476
msgid "duplicate .personality directive"
msgstr "Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ð¸ .personality"
-#: config/tc-arm.c:4314 config/tc-arm.c:4444 config/tc-arm.c:4494
+#: config/tc-arm.c:4290
+msgid "expected pseudo register list"
+msgstr "мало бути вказано ÑпиÑок пÑевдорегіÑтрів"
+
+#: config/tc-arm.c:4318 config/tc-arm.c:4448 config/tc-arm.c:4498
msgid "expected register list"
msgstr "мало бути вказано ÑпиÑок регіÑтрів"
-#: config/tc-arm.c:4396
+#: config/tc-arm.c:4400
msgid "expected , <constant>"
msgstr "мало бути , <Ñтала>"
-#: config/tc-arm.c:4405
+#: config/tc-arm.c:4409
msgid "number of registers must be in the range [1:4]"
msgstr "кількіÑÑ‚ÑŒ регіÑтрів має належати діапазону [1:4]"
-#: config/tc-arm.c:4556 config/tc-arm.c:4690
+#: config/tc-arm.c:4560 config/tc-arm.c:4694
msgid "bad register range"
msgstr "помилковий діапазон регіÑтрів"
-#: config/tc-arm.c:4756
+#: config/tc-arm.c:4760
msgid "FPA .unwind_save does not take a register list"
msgstr ".unwind_save FPA не приймає ÑпиÑку регіÑтрів"
-#: config/tc-arm.c:4784
+#: config/tc-arm.c:4792
msgid ".unwind_save does not support this kind of register"
msgstr "у .unwind_save не передбачено підтримки цього типу регіÑтрів"
-#: config/tc-arm.c:4823
+#: config/tc-arm.c:4831
msgid "SP and PC not permitted in .unwind_movsp directive"
msgstr "SP Ñ– PC не Ñ” припуÑтимим у директиві .unwind_movsp"
-#: config/tc-arm.c:4828
+#: config/tc-arm.c:4836
msgid "unexpected .unwind_movsp directive"
msgstr "неочікувана директива .unwind_movsp"
-#: config/tc-arm.c:4855
+#: config/tc-arm.c:4863
msgid "stack increment must be multiple of 4"
msgstr "крок Ð·Ð±Ñ–Ð»ÑŒÑˆÐµÐ½Ð½Ñ Ñƒ Ñтеку має бути кратним 4"
-#: config/tc-arm.c:4887
+#: config/tc-arm.c:4895
msgid "expected <reg>, <reg>"
msgstr "мало бути <регіÑÑ‚Ñ€>, <регіÑÑ‚Ñ€>"
-#: config/tc-arm.c:4905
+#: config/tc-arm.c:4913
msgid "register must be either sp or set by a previousunwind_movsp directive"
msgstr "регіÑÑ‚Ñ€ має бути визначено sp або вÑтановлено директивою previousunwind_movsp"
-#: config/tc-arm.c:4944
+#: config/tc-arm.c:4952
msgid "expected <offset>, <opcode>"
msgstr "мало бути <зÑув>, <код операції>"
-#: config/tc-arm.c:4956
+#: config/tc-arm.c:4964
msgid "unwind opcode too long"
msgstr "код операції Ñ€Ð¾Ð·Ð³Ð¾Ñ€Ñ‚Ð°Ð½Ð½Ñ Ñ” надто довгим"
-#: config/tc-arm.c:4961
+#: config/tc-arm.c:4969
msgid "invalid unwind opcode"
msgstr "некоректний код операції розгортаннÑ"
-#: config/tc-arm.c:5076 config/tc-arm.c:32368
+#: config/tc-arm.c:5084 config/tc-arm.c:32483
#, c-format
msgid "unrecognised float16 format \"%s\""
msgstr "невідомий формат float16, «%s»"
-#: config/tc-arm.c:5087
+#: config/tc-arm.c:5095
msgid "float16 format cannot be set more than once, ignoring."
msgstr "формат float16 не можна вÑтановлювати декілька разів, ігноруємо."
-#: config/tc-arm.c:5202 config/tc-arm.c:6285 config/tc-arm.c:11658
-#: config/tc-arm.c:12191 config/tc-arm.c:14311 config/tc-arm.c:16262
-#: config/tc-arm.c:16297 config/tc-arm.c:17225 config/tc-arm.c:19148
-#: config/tc-arm.c:19156 config/tc-arm.c:19163 config/tc-arm.c:20808
-#: config/tc-arm.c:29417 config/tc-arm.c:29481 config/tc-arm.c:29489
+#: config/tc-arm.c:5210 config/tc-arm.c:6293 config/tc-arm.c:11686
+#: config/tc-arm.c:12219 config/tc-arm.c:14339 config/tc-arm.c:16290
+#: config/tc-arm.c:16325 config/tc-arm.c:17253 config/tc-arm.c:19176
+#: config/tc-arm.c:19184 config/tc-arm.c:19191 config/tc-arm.c:20842
+#: config/tc-arm.c:29495 config/tc-arm.c:29559 config/tc-arm.c:29567
#: config/tc-metag.c:5174 config/tc-z8k.c:1161 config/tc-z8k.c:1171
msgid "immediate value out of range"
msgstr "поточне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð¾Ð·Ð° межами діапазону"
-#: config/tc-arm.c:5372
+#: config/tc-arm.c:5380
msgid "invalid FPA immediate expression"
msgstr "некоректний Ñталий вираз FPA"
-#: config/tc-arm.c:5558
+#: config/tc-arm.c:5566
msgid "'UXTW' not allowed here"
msgstr "тут не можна викориÑтовувати «UXTW»"
-#: config/tc-arm.c:5566
+#: config/tc-arm.c:5574
msgid "'LSL' or 'ASR' required"
msgstr "мало бути вказано «LSL» або «ASR»"
-#: config/tc-arm.c:5574
+#: config/tc-arm.c:5582
msgid "'LSL' required"
msgstr "мало бути вказано «LSL»"
-#: config/tc-arm.c:5582
+#: config/tc-arm.c:5590
msgid "'ASR' required"
msgstr "мало бути вказано «ASR»"
-#: config/tc-arm.c:5589
+#: config/tc-arm.c:5597
msgid "'UXTW' required"
msgstr "Ñлід викориÑтати «UXTW»"
-#: config/tc-arm.c:5668
+#: config/tc-arm.c:5676
msgid "invalid rotation"
msgstr "некоректне циклічне переÑтавлÑннÑ"
-#: config/tc-arm.c:5850 config/tc-arm.c:6063
+#: config/tc-arm.c:5858 config/tc-arm.c:6071
msgid "unknown group relocation"
msgstr "невідоме переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð³Ñ€ÑƒÐ¿Ð¸"
-#: config/tc-arm.c:5886
+#: config/tc-arm.c:5894
msgid "alignment must be constant"
msgstr "Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ Ð¼Ð°Ñ” бути Ñталим"
-#: config/tc-arm.c:6097
+#: config/tc-arm.c:6105
msgid "this group relocation is not allowed on this instruction"
msgstr "це переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð³Ñ€ÑƒÐ¿Ð¸ заборонено у цій інÑтрукції"
-#: config/tc-arm.c:6153
+#: config/tc-arm.c:6161
msgid "'}' expected at end of 'option' field"
msgstr "наприкінці Ð¿Ð¾Ð»Ñ Â«option» мало бути вказано «}»"
-#: config/tc-arm.c:6158
+#: config/tc-arm.c:6166
msgid "cannot combine index with option"
msgstr "не можна поєднувати Ñ–Ð½Ð´ÐµÐºÑ Ð· параметром"
-#: config/tc-arm.c:6423
+#: config/tc-arm.c:6431
msgid "unexpected bit specified after APSR"
msgstr "піÑÐ»Ñ APSR вказано неочікуваний біт"
-#: config/tc-arm.c:6435
+#: config/tc-arm.c:6443
msgid "selected processor does not support DSP extension"
msgstr "у вибраному процеÑорі не передбачено підтримки Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ DSP"
-#: config/tc-arm.c:6447
+#: config/tc-arm.c:6455
msgid "bad bitmask specified after APSR"
msgstr "піÑÐ»Ñ APSR вказано помилкову бітову маÑку"
-#: config/tc-arm.c:6471
+#: config/tc-arm.c:6479
msgid "writing to APSR without specifying a bitmask is deprecated"
msgstr "запиÑÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð¾ APSR без Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð±Ñ–Ñ‚Ð¾Ð²Ð¾Ñ— маÑки вважаєтьÑÑ Ð·Ð°Ñтарілим"
-#: config/tc-arm.c:6483 config/tc-arm.c:13414 config/tc-arm.c:13459
-#: config/tc-arm.c:13463
+#: config/tc-arm.c:6491 config/tc-arm.c:13442 config/tc-arm.c:13487
+#: config/tc-arm.c:13491
msgid "selected processor does not support requested special purpose register"
msgstr "у вибраному процеÑорі не передбачено підтримки потрібного регіÑтра Ñпеціального призначеннÑ"
-#: config/tc-arm.c:6488
+#: config/tc-arm.c:6496
msgid "flag for {c}psr instruction expected"
msgstr "мало бути вказано прапорець Ð´Ð»Ñ Ñ–Ð½Ñтрукції {c}psr"
-#: config/tc-arm.c:6546
+#: config/tc-arm.c:6554
msgid "unrecognized CPS flag"
msgstr "нерозпізнаний прапорець CPS"
-#: config/tc-arm.c:6553
+#: config/tc-arm.c:6561
msgid "missing CPS flags"
msgstr "пропущено прапорці CPS"
-#: config/tc-arm.c:6576 config/tc-arm.c:6582
+#: config/tc-arm.c:6584 config/tc-arm.c:6590
msgid "valid endian specifiers are be or le"
msgstr "коректними Ñпецифікаторами порÑдку байтів мають бути be або le"
-#: config/tc-arm.c:6604
+#: config/tc-arm.c:6612
msgid "missing rotation field after comma"
msgstr "піÑÐ»Ñ ÐºÐ¾Ð¼Ð¸ пропущено поле обертаннÑ"
-#: config/tc-arm.c:6619
+#: config/tc-arm.c:6627
msgid "rotation can only be 0, 8, 16, or 24"
msgstr "значеннÑм Ð¾Ð±ÐµÑ€Ñ‚Ð°Ð½Ð½Ñ Ð¼Ð¾Ð¶Ðµ бути лише 0, 8, 16 або 24"
-#: config/tc-arm.c:6648
+#: config/tc-arm.c:6656
msgid "condition required"
msgstr "потрібна умова"
-#: config/tc-arm.c:6690 config/tc-arm.c:9827
+#: config/tc-arm.c:6698 config/tc-arm.c:9849
msgid "'[' expected"
msgstr "мало бути «[»"
-#: config/tc-arm.c:6703
+#: config/tc-arm.c:6711
msgid "',' expected"
msgstr "мало бути «,»"
-#: config/tc-arm.c:6720
+#: config/tc-arm.c:6728
msgid "invalid shift"
msgstr "некоректний зÑув"
-#: config/tc-arm.c:6800
+#: config/tc-arm.c:6808
msgid "expected ARM or MVE vector register"
msgstr "мало бути викориÑтано векторний регіÑÑ‚Ñ€ ARM або MVE"
-#: config/tc-arm.c:6849
+#: config/tc-arm.c:6857
msgid "can't use Neon quad register here"
msgstr "тут не можна викориÑтовувати четверні регіÑтри Neon"
-#: config/tc-arm.c:6918
+#: config/tc-arm.c:6926
msgid "expected <Rm> or <Dm> or <Qm> operand"
msgstr "мало бути вказано операнд <Rm>, <Dm> або <Qm>"
-#: config/tc-arm.c:7018
+#: config/tc-arm.c:7026
msgid "VFP single, double or MVE vector register expected"
msgstr "мало бути викориÑтано регіÑÑ‚Ñ€ VFP одинарної або подвійної точноÑÑ‚Ñ– або векторний регіÑÑ‚Ñ€ MVE"
-#: config/tc-arm.c:7038
+#: config/tc-arm.c:7046
msgid "parse error"
msgstr "помилка під Ñ‡Ð°Ñ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸"
-#: config/tc-arm.c:7340
+#: config/tc-arm.c:7350
msgid "immediate value 48 or 64 expected"
msgstr "мало бути викориÑтано Ñтале Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ 48 або 64"
#. ISB can only take SY as an option.
-#: config/tc-arm.c:7389
+#: config/tc-arm.c:7399
msgid "invalid barrier type"
msgstr "некоректний тип бар’єра"
-#: config/tc-arm.c:7563
+#: config/tc-arm.c:7575
msgid "only floating point zero is allowed as immediate value"
msgstr "Ñк Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¸ÑˆÐ²Ð¸Ð´ÑˆÐµÐ½Ð¾Ð³Ð¾ викориÑÑ‚Ð°Ð½Ð½Ñ Ð¼Ð¾Ð¶Ð½Ð° викориÑтовувати лише нуль із рухомою крапкою"
-#: config/tc-arm.c:7658
+#: config/tc-arm.c:7670
msgid "immediate value is out of range"
msgstr "поточне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð¾Ð·Ð° межами діапазону"
-#: config/tc-arm.c:7833
+#: config/tc-arm.c:7845
msgid "iWMMXt data or control register expected"
msgstr "мало бути викориÑтано регіÑÑ‚Ñ€ даних або ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ iWMMXt"
-#: config/tc-arm.c:7874
+#: config/tc-arm.c:7886
msgid "Banked registers are not available with this architecture."
msgstr "Груповані регіÑтри недоÑтупні на цій архітектурі."
-#: config/tc-arm.c:8122
+#: config/tc-arm.c:8134
msgid "operand must be LR register"
msgstr "операнд має бути регіÑтром LR"
-#: config/tc-arm.c:8193 config/tc-score.c:264
+#: config/tc-arm.c:8139
+msgid "operand must be SP register"
+msgstr "операнд має бути регіÑтром SP"
+
+#: config/tc-arm.c:8144
+msgid "operand must be r12"
+msgstr "операндом має бути r12"
+
+#: config/tc-arm.c:8215 config/tc-score.c:264
msgid "garbage following instruction"
msgstr "зайві дані піÑÐ»Ñ Ñ–Ð½Ñтрукції"
#. If REG is R13 (the stack pointer), warn that its use is
#. deprecated.
-#: config/tc-arm.c:8243
+#: config/tc-arm.c:8265
msgid "use of r13 is deprecated"
msgstr "викориÑÑ‚Ð°Ð½Ð½Ñ r13 вважаєтьÑÑ Ð·Ð°Ñтарілим"
-#: config/tc-arm.c:8261 config/tc-arm.c:20514
+#: config/tc-arm.c:8283 config/tc-arm.c:20542
msgid "ARMv8.2 scalar fp16 instruction cannot be conditional, the behaviour is UNPREDICTABLE"
msgstr "СкалÑрна інÑÑ‚Ñ€ÑƒÐºÑ†Ñ–Ñ fp16 ARMv8.2 не може бути умовною. Поведінка у відповідь Ñ” ÐЕПЕРЕДБÐЧУВÐÐОЮ"
-#: config/tc-arm.c:8336
+#: config/tc-arm.c:8358
msgid "D register out of range for selected VFP version"
msgstr "РегіÑÑ‚Ñ€ D поза припуÑтимим діапазоном Ð´Ð»Ñ Ð²Ð¸Ð±Ñ€Ð°Ð½Ð¾Ñ— верÑÑ–Ñ— VFP"
-#: config/tc-arm.c:8433 config/tc-arm.c:11353
+#: config/tc-arm.c:8455 config/tc-arm.c:11375
msgid "Instruction does not support =N addresses"
msgstr "У інÑтрукції не передбачено підтримки Ð°Ð´Ñ€ÐµÑ =N"
-#: config/tc-arm.c:8441
+#: config/tc-arm.c:8463
msgid "instruction does not accept preindexed addressing"
msgstr "інÑÑ‚Ñ€ÑƒÐºÑ†Ñ–Ñ Ð½Ðµ приймає адреÑÑƒÐ²Ð°Ð½Ð½Ñ Ð· попереднім індекÑуваннÑм"
#. unindexed - only for coprocessor
-#: config/tc-arm.c:8457 config/tc-arm.c:11416
+#: config/tc-arm.c:8479 config/tc-arm.c:11438
msgid "instruction does not accept unindexed addressing"
msgstr "у інÑтрукції не можна викориÑтовувати адреÑÑƒÐ²Ð°Ð½Ð½Ñ Ð±ÐµÐ· індекÑуваннÑ"
-#: config/tc-arm.c:8465
+#: config/tc-arm.c:8487
msgid "destination register same as write-back base"
msgstr "регіÑÑ‚Ñ€ Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð·Ð±Ñ–Ð³Ð°Ñ”Ñ‚ÑŒÑÑ Ð· оÑновою зворотного запиÑу"
-#: config/tc-arm.c:8466
+#: config/tc-arm.c:8488
msgid "source register same as write-back base"
msgstr "регіÑÑ‚Ñ€ джерела збігаєтьÑÑ Ð· оÑновою зворотного запиÑу"
-#: config/tc-arm.c:8516
+#: config/tc-arm.c:8538
msgid "use of PC in this instruction is deprecated"
msgstr "викориÑÑ‚Ð°Ð½Ð½Ñ PC у цій інÑтрукції вважаєтьÑÑ Ð·Ð°Ñтарілим"
-#: config/tc-arm.c:8539
+#: config/tc-arm.c:8561
msgid "instruction does not accept scaled register index"
msgstr "інÑÑ‚Ñ€ÑƒÐºÑ†Ñ–Ñ Ð½Ðµ приймає маÑштабованого індекÑу регіÑтрів"
-#: config/tc-arm.c:8844
+#: config/tc-arm.c:8866
msgid "invalid pseudo operation"
msgstr "некоректна пÑевдоопераціÑ"
-#: config/tc-arm.c:9084
+#: config/tc-arm.c:9106
msgid "invalid co-processor operand"
msgstr "некоректний операнд ÑпівпроцеÑора"
-#: config/tc-arm.c:9100
+#: config/tc-arm.c:9122
msgid "instruction does not support unindexed addressing"
msgstr "у інÑтрукції не передбачено підтримки адреÑÑƒÐ²Ð°Ð½Ð½Ñ Ð±ÐµÐ· індекÑуваннÑ"
-#: config/tc-arm.c:9115
+#: config/tc-arm.c:9137
msgid "pc may not be used with write-back"
msgstr "pc не можна викориÑтовувати зі зворотним запиÑом"
-#: config/tc-arm.c:9120
+#: config/tc-arm.c:9142
msgid "instruction does not support writeback"
msgstr "у інÑтрукції не передбачено підтримки зворотного запиÑу"
-#: config/tc-arm.c:9226
+#: config/tc-arm.c:9248
msgid "Rn must not overlap other operands"
msgstr "Rn не повинен перекриватиÑÑ Ð· іншими операндами"
-#: config/tc-arm.c:9231
+#: config/tc-arm.c:9253
msgid "swp{b} use is obsoleted for ARMv8 and later"
msgstr "викориÑÑ‚Ð°Ð½Ð½Ñ swp{b} вважаєтьÑÑ Ð·Ð°Ñтарілим Ð´Ð»Ñ ARMv8 або новіших верÑій"
-#: config/tc-arm.c:9234
+#: config/tc-arm.c:9256
msgid "swp{b} use is deprecated for ARMv6 and ARMv7"
msgstr "викориÑÑ‚Ð°Ð½Ð½Ñ swp{b} вважаєтьÑÑ Ð·Ð°Ñтарілим Ð´Ð»Ñ ARMv6 та ARMv7"
-#: config/tc-arm.c:9353 config/tc-arm.c:9372 config/tc-arm.c:9385
-#: config/tc-arm.c:12028 config/tc-arm.c:12059 config/tc-arm.c:12081
+#: config/tc-arm.c:9375 config/tc-arm.c:9394 config/tc-arm.c:9407
+#: config/tc-arm.c:12056 config/tc-arm.c:12087 config/tc-arm.c:12109
msgid "bit-field extends past end of register"
msgstr "бітове поле завершуєтьÑÑ Ð·Ð° межами регіÑтра"
-#: config/tc-arm.c:9415
+#: config/tc-arm.c:9437
msgid "the only valid suffixes here are '(plt)' and '(tlscall)'"
msgstr "єдиними коректними ÑуфікÑами Ñ” «(plt)» Ñ– «(tlscall)»"
-#: config/tc-arm.c:9468
+#: config/tc-arm.c:9490
msgid "use of r15 in blx in ARM mode is not really useful"
msgstr "викориÑÑ‚Ð°Ð½Ð½Ñ r15 у blx у режимі ARM не має ÑенÑу"
-#: config/tc-arm.c:9490
+#: config/tc-arm.c:9512
msgid "use of r15 in bx in ARM mode is not really useful"
msgstr "викориÑÑ‚Ð°Ð½Ð½Ñ r15 у bx у режимі ARM не має ÑенÑу"
-#: config/tc-arm.c:9516
+#: config/tc-arm.c:9538
msgid "use of r15 in bxj is not really useful"
msgstr "викориÑÑ‚Ð°Ð½Ð½Ñ r15 у bxj не має ÑенÑу"
-#: config/tc-arm.c:9564
+#: config/tc-arm.c:9586
msgid "This coprocessor register access is deprecated in ARMv8"
msgstr "Цей доÑтуп до регіÑтра ÑпівпроцеÑора вважаєтьÑÑ Ð·Ð°Ñтарілим у ARMv8"
-#: config/tc-arm.c:9772 config/tc-arm.c:9781
+#: config/tc-arm.c:9794 config/tc-arm.c:9803
msgid "writeback of base register is UNPREDICTABLE"
msgstr "зворотний Ð·Ð°Ð¿Ð¸Ñ Ð±Ð°Ð·Ð¾Ð²Ð¾Ð³Ð¾ регіÑтра Ñ” ÐЕПЕРЕДБÐЧУВÐÐИМ"
-#: config/tc-arm.c:9775
+#: config/tc-arm.c:9797
msgid "writeback of base register when in register list is UNPREDICTABLE"
msgstr "зворотний Ð·Ð°Ð¿Ð¸Ñ Ð±Ð°Ð·Ð¾Ð²Ð¾Ð³Ð¾ регіÑтра, Ñкщо він перебуває у ÑпиÑку регіÑтрів, Ñ” ÐЕПЕРЕДБÐЧУВÐÐИМ"
-#: config/tc-arm.c:9785
+#: config/tc-arm.c:9807
msgid "if writeback register is in list, it must be the lowest reg in the list"
msgstr "Ñкщо регіÑÑ‚Ñ€ зворотного запиÑу перебуває у ÑпиÑку, цей регіÑÑ‚Ñ€ має бути найнижчим регіÑтром у ÑпиÑку"
-#: config/tc-arm.c:9822
+#: config/tc-arm.c:9844
msgid "first transfer register must be even"
msgstr "перший регіÑÑ‚Ñ€ Ð¿ÐµÑ€ÐµÐ´Ð°Ð²Ð°Ð½Ð½Ñ Ð¼Ð°Ñ” бути парним"
-#: config/tc-arm.c:9825
+#: config/tc-arm.c:9847
msgid "can only transfer two consecutive registers"
msgstr "переноÑити можна лише два поÑлідовних регіÑтри"
@@ -4068,1396 +4210,1400 @@ msgstr "переноÑити можна лише два поÑлідовних Ñ
#. have been called in the first place.
#. If op 2 were present and equal to PC, this function wouldn't
#. have been called in the first place.
-#: config/tc-arm.c:9826 config/tc-arm.c:9896 config/tc-arm.c:10627
-#: config/tc-arm.c:12903
+#: config/tc-arm.c:9848 config/tc-arm.c:9918 config/tc-arm.c:10649
+#: config/tc-arm.c:12931
msgid "r14 not allowed here"
msgstr "тут не можна викориÑтовувати r14"
-#: config/tc-arm.c:9838
+#: config/tc-arm.c:9860
msgid "base register written back, and overlaps second transfer register"
msgstr "базовий регіÑÑ‚Ñ€ запиÑано назад, перекрито другий регіÑÑ‚Ñ€ передаваннÑ"
-#: config/tc-arm.c:9848
+#: config/tc-arm.c:9870
msgid "index register overlaps transfer register"
msgstr "регіÑÑ‚Ñ€ індекÑу перериває регіÑÑ‚Ñ€ перенеÑеннÑ"
-#: config/tc-arm.c:9877 config/tc-arm.c:10594
+#: config/tc-arm.c:9899 config/tc-arm.c:10616
msgid "offset must be zero in ARM encoding"
msgstr "у кодуванні ARM зÑув має бути нульовим"
-#: config/tc-arm.c:9890 config/tc-arm.c:10621
+#: config/tc-arm.c:9912 config/tc-arm.c:10643
msgid "even register required"
msgstr "Ñлід викориÑтовувати парний регіÑÑ‚Ñ€"
-#: config/tc-arm.c:9893
+#: config/tc-arm.c:9915
msgid "can only load two consecutive registers"
msgstr "завантажувати можна лише два поÑлідовних регіÑтри"
-#: config/tc-arm.c:9911
+#: config/tc-arm.c:9933
msgid "ldr to register 15 must be 4-byte aligned"
msgstr "ldr до регіÑтра 15 має бути вирівнÑно на 4-байтову межу"
-#: config/tc-arm.c:9934 config/tc-arm.c:9966
+#: config/tc-arm.c:9956 config/tc-arm.c:9988
msgid "this instruction requires a post-indexed address"
msgstr "Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— інÑтрукції потрібна адреÑа з поÑтіндекÑуваннÑм"
-#: config/tc-arm.c:9993
+#: config/tc-arm.c:10015
msgid "Rd and Rm should be different in mla"
msgstr "Rd і Rm мають бути різними у mla"
-#: config/tc-arm.c:10020 config/tc-arm.c:13278
+#: config/tc-arm.c:10042 config/tc-arm.c:13306
msgid ":lower16: not allowed in this instruction"
msgstr ":lower16: не можна викориÑтовувати у цій інÑтрукції"
-#: config/tc-arm.c:10022 config/tc-arm.c:13283
+#: config/tc-arm.c:10044 config/tc-arm.c:13311
msgid ":upper16: not allowed in this instruction"
msgstr ":upper16: не можна викориÑтовувати у цій інÑтрукції"
-#: config/tc-arm.c:10039
+#: config/tc-arm.c:10061
msgid "operand 1 must be FPSCR"
msgstr "перший операнд має бути FPSCR"
-#: config/tc-arm.c:10092 config/tc-arm.c:10101 config/tc-arm.c:10155
-#: config/tc-arm.c:10164
+#: config/tc-arm.c:10114 config/tc-arm.c:10123 config/tc-arm.c:10177
+#: config/tc-arm.c:10186
msgid "selected processor does not support instruction"
msgstr "у вибраному процеÑорі не передбачено підтримки інÑтрукції"
-#: config/tc-arm.c:10104 config/tc-arm.c:10167
+#: config/tc-arm.c:10126 config/tc-arm.c:10189
msgid "accessing MVE system register without MVE is UNPREDICTABLE"
msgstr "доÑтуп до ÑиÑтемного регіÑтру MVE без MVE може призвеÑти до непередбачуваних наÑлідків"
-#: config/tc-arm.c:10195 config/tc-arm.c:13397
+#: config/tc-arm.c:10217 config/tc-arm.c:13425
msgid "bad register for mrs"
msgstr "помилковий регіÑÑ‚Ñ€ Ð´Ð»Ñ mrs"
-#: config/tc-arm.c:10202 config/tc-arm.c:13421
+#: config/tc-arm.c:10224 config/tc-arm.c:13449
msgid "'APSR', 'CPSR' or 'SPSR' expected"
msgstr "мало бути викориÑтано «APSR», «CPSR» або «SPSR»"
-#: config/tc-arm.c:10243
+#: config/tc-arm.c:10265
msgid "Rd and Rm should be different in mul"
msgstr "Rd і Rm мають бути різними у mul"
-#: config/tc-arm.c:10262 config/tc-arm.c:10539 config/tc-arm.c:13560
+#: config/tc-arm.c:10284 config/tc-arm.c:10561 config/tc-arm.c:13588
msgid "rdhi and rdlo must be different"
msgstr "rdhi і rdlo мають бути різними"
-#: config/tc-arm.c:10268
+#: config/tc-arm.c:10290
msgid "rdhi, rdlo and rm must all be different"
msgstr "rdhi, rdlo Ñ– rm уÑÑ– мають бути різними"
-#: config/tc-arm.c:10334
+#: config/tc-arm.c:10356
msgid "'[' expected after PLD mnemonic"
msgstr "піÑÐ»Ñ Ð¼Ð½ÐµÐ¼Ð¾Ñхеми PLD мало бути вказано «[»"
-#: config/tc-arm.c:10336 config/tc-arm.c:10351
+#: config/tc-arm.c:10358 config/tc-arm.c:10373
msgid "post-indexed expression used in preload instruction"
msgstr "у інÑтрукції попереднього Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñтано вираз з поÑтіндекÑуваннÑм"
-#: config/tc-arm.c:10338 config/tc-arm.c:10353
+#: config/tc-arm.c:10360 config/tc-arm.c:10375
msgid "writeback used in preload instruction"
msgstr "у інÑтрукції попереднього Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñтано зворотний запиÑ"
-#: config/tc-arm.c:10340 config/tc-arm.c:10355
+#: config/tc-arm.c:10362 config/tc-arm.c:10377
msgid "unindexed addressing used in preload instruction"
msgstr "у інÑтрукції попереднього Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñтано адреÑÑƒÐ²Ð°Ð½Ð½Ñ Ð±ÐµÐ· індекÑуваннÑ"
-#: config/tc-arm.c:10349
+#: config/tc-arm.c:10371
msgid "'[' expected after PLI mnemonic"
msgstr "піÑÐ»Ñ Ð¼Ð½ÐµÐ¼Ð¾Ñхеми PLI мало бути викориÑтано «[»"
-#: config/tc-arm.c:10364 config/tc-arm.c:13729
+#: config/tc-arm.c:10386 config/tc-arm.c:13757
msgid "push/pop do not support {reglist}^"
msgstr "у push/pop не передбачено підтримки {reglist}^"
-#: config/tc-arm.c:10442 config/tc-arm.c:13906
+#: config/tc-arm.c:10464 config/tc-arm.c:13934
msgid "setend use is deprecated for ARMv8"
msgstr "викориÑÑ‚Ð°Ð½Ð½Ñ setend Ñ” заÑтарілим Ð´Ð»Ñ ARMv8"
-#: config/tc-arm.c:10463 config/tc-arm.c:13967 config/tc-arm.c:13999
-#: config/tc-arm.c:14042
+#: config/tc-arm.c:10485 config/tc-arm.c:13995 config/tc-arm.c:14027
+#: config/tc-arm.c:14070
msgid "extraneous shift as part of operand to shift insn"
msgstr "зайвий зÑув Ñ” чаÑтиною операнда інÑтрукції зÑуву (shift)"
-#: config/tc-arm.c:10473 config/tc-arm.c:14105
+#: config/tc-arm.c:10495 config/tc-arm.c:14133
msgid "immediate too large (bigger than 0xF)"
msgstr "надто велике Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¸ÑˆÐ²Ð¸Ð´ÑˆÐµÐ½Ð¾Ð³Ð¾ доÑтупу (більше за 0xF)"
-#: config/tc-arm.c:10497 config/tc-arm.c:10506
+#: config/tc-arm.c:10519 config/tc-arm.c:10528
msgid "selected processor does not support SETPAN instruction"
msgstr "у вибраному процеÑорі не передбачено підтримки SETPAN інÑтрукції"
-#: config/tc-arm.c:10565
+#: config/tc-arm.c:10587
msgid "SRS base register must be r13"
msgstr "базовим регіÑтром SRS має бути r13"
-#: config/tc-arm.c:10624
+#: config/tc-arm.c:10646
msgid "can only store two consecutive registers"
msgstr "зберігати можна лише два поÑлідовних регіÑтри"
-#: config/tc-arm.c:10746 config/tc-arm.c:10767
+#: config/tc-arm.c:10768 config/tc-arm.c:10789
msgid "only two consecutive VFP SP registers allowed here"
msgstr "тут можна викориÑтовувати лише два поÑлідовних регіÑтри SP VFP"
-#: config/tc-arm.c:10795 config/tc-arm.c:10810
+#: config/tc-arm.c:10817 config/tc-arm.c:10832
msgid "this addressing mode requires base-register writeback"
msgstr "Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ режиму адреÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ñ‚Ñ€Ñ–Ð±ÐµÐ½ зворотний Ð·Ð°Ð¿Ð¸Ñ Ð±Ð°Ð·Ð¾Ð²Ð¸Ñ… регіÑтрів"
#. If srcsize is 16, inst.operands[1].imm must be in the range 0-16.
#. i.e. immbits must be in range 0 - 16.
-#: config/tc-arm.c:10939
+#: config/tc-arm.c:10961
msgid "immediate value out of range, expected range [0, 16]"
msgstr "поточне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÐµÐ±ÑƒÐ²Ð°Ñ” поза межами доÑтупного діапазону, очікуваний діапазон: [0, 16]"
#. If srcsize is 32, inst.operands[1].imm must be in the range 1-32.
#. i.e. immbits must be in range 0 - 31.
-#: config/tc-arm.c:10946
+#: config/tc-arm.c:10968
msgid "immediate value out of range, expected range [1, 32]"
msgstr "поточне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÐµÐ±ÑƒÐ²Ð°Ñ” поза межами доÑтупного діапазону, очікуваний діапазон: [1, 32]"
-#: config/tc-arm.c:11012
+#: config/tc-arm.c:11034
msgid "this instruction does not support indexing"
msgstr "у цій інÑтрукції не передбачено підтримки індекÑуваннÑ"
-#: config/tc-arm.c:11035
+#: config/tc-arm.c:11057
msgid "only r15 allowed here"
msgstr "тут можна викориÑтовувати лише r15"
-#: config/tc-arm.c:11170
+#: config/tc-arm.c:11192
msgid "immediate operand requires iWMMXt2"
msgstr "безпоÑередній операнд потребує iWMMXt2"
-#: config/tc-arm.c:11314
+#: config/tc-arm.c:11336
msgid "shift by register not allowed in thumb mode"
msgstr "зÑув за регіÑтром у режимі thumb заборонено"
-#: config/tc-arm.c:11326 config/tc-arm.c:14151 config/tc-arm.c:28708
+#: config/tc-arm.c:11348 config/tc-arm.c:14179 config/tc-arm.c:28786
msgid "shift expression is too large"
msgstr "вираз зÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ” надто великим"
-#: config/tc-arm.c:11359
+#: config/tc-arm.c:11381
msgid "cannot use register index with this instruction"
msgstr "разом з цією інÑтрукцією не можна викориÑтовувати Ñ–Ð½Ð´ÐµÐºÑ Ñ€ÐµÐ³Ñ–Ñтра"
-#: config/tc-arm.c:11361
+#: config/tc-arm.c:11383
msgid "Thumb does not support negative register indexing"
msgstr "У Thumb не передбачено підтримки від’єдмного індекÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ€ÐµÐ³Ñ–Ñтрів"
-#: config/tc-arm.c:11363
+#: config/tc-arm.c:11385
msgid "Thumb does not support register post-indexing"
msgstr "У Thumb не передбачено підтримки поÑтіндекÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ€ÐµÐ³Ñ–Ñтрів"
-#: config/tc-arm.c:11365
+#: config/tc-arm.c:11387
msgid "Thumb does not support register indexing with writeback"
msgstr "У Thumb не передбачено підтримки індекÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ€ÐµÐ³Ñ–Ñтрів зі зворотним запиÑом"
-#: config/tc-arm.c:11367
+#: config/tc-arm.c:11389
msgid "Thumb supports only LSL in shifted register indexing"
msgstr "У Thumb передбачено лише LSL у зÑунутому індекÑуванні регіÑтра"
-#: config/tc-arm.c:11376 config/tc-arm.c:19882
+#: config/tc-arm.c:11398 config/tc-arm.c:19910
msgid "shift out of range"
msgstr "зÑув за межі припуÑтимого діапазону"
-#: config/tc-arm.c:11385
+#: config/tc-arm.c:11407
msgid "cannot use writeback with this instruction"
msgstr "разом з цією інÑтрукцією не можна викориÑтовувати зворотний запиÑ"
-#: config/tc-arm.c:11406
+#: config/tc-arm.c:11428
msgid "cannot use post-indexing with PC-relative addressing"
msgstr "не можна викориÑтовувати поÑтіндекÑÑƒÐ²Ð°Ð½Ð½Ñ Ð· адреÑуваннÑм відноÑно PC"
-#: config/tc-arm.c:11407
+#: config/tc-arm.c:11429
msgid "cannot use post-indexing with this instruction"
msgstr "разом з цією інÑтрукцією не можна викориÑтовувати поÑтіндекÑуваннÑ"
-#: config/tc-arm.c:11639
+#: config/tc-arm.c:11667
msgid "cannot honor width suffix"
msgstr "не можна викориÑтати ÑÑƒÑ„Ñ–ÐºÑ ÑˆÐ¸Ñ€Ð¸Ð½Ð¸"
-#: config/tc-arm.c:11653
+#: config/tc-arm.c:11681
msgid "only SUBS PC, LR, #const allowed"
msgstr "можна викориÑтовувати лише SUBS PC, LR, #const"
-#: config/tc-arm.c:11736 config/tc-arm.c:11896 config/tc-arm.c:11993
-#: config/tc-arm.c:13358 config/tc-arm.c:13666
+#: config/tc-arm.c:11764 config/tc-arm.c:11924 config/tc-arm.c:12021
+#: config/tc-arm.c:13386 config/tc-arm.c:13694
msgid "shift must be constant"
msgstr "зÑув має бути Ñталим"
-#: config/tc-arm.c:11741
+#: config/tc-arm.c:11769
msgid "shift value over 3 not allowed in thumb mode"
msgstr "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð·Ñуву, що перевищує 3, у режимі thumb заборонено"
-#: config/tc-arm.c:11743
+#: config/tc-arm.c:11771
msgid "only LSL shift allowed in thumb mode"
msgstr "у режимі thumb можна викориÑтовувати лише зÑув LSL"
-#: config/tc-arm.c:11767 config/tc-arm.c:11911 config/tc-arm.c:12008
-#: config/tc-arm.c:13371
+#: config/tc-arm.c:11795 config/tc-arm.c:11939 config/tc-arm.c:12036
+#: config/tc-arm.c:13399
msgid "unshifted register required"
msgstr "потрібен незÑунутий регіÑÑ‚Ñ€"
-#: config/tc-arm.c:11782 config/tc-arm.c:12019 config/tc-arm.c:13521
+#: config/tc-arm.c:11810 config/tc-arm.c:12047 config/tc-arm.c:13549
msgid "dest must overlap one source register"
msgstr "Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¼Ð°Ñ” перекривати один регіÑÑ‚Ñ€ джерела"
-#: config/tc-arm.c:11914 config/tc-csky.c:6003
+#: config/tc-arm.c:11942 config/tc-csky.c:6004
msgid "dest and source1 must be the same register"
msgstr "Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ– джерело1 мають бути одним регіÑтром"
-#: config/tc-arm.c:12154
+#: config/tc-arm.c:12182
msgid "selected architecture does not support wide conditional branch instruction"
msgstr "у вибраній архітектурі не передбачено підтримки інÑтрукції широкого умовного розгалуженнÑ"
-#: config/tc-arm.c:12187
+#: config/tc-arm.c:12215
msgid "instruction is always unconditional"
msgstr "інÑÑ‚Ñ€ÑƒÐºÑ†Ñ–Ñ Ð·Ð°Ð²Ð¶Ð´Ð¸ Ñ” безумовною"
-#: config/tc-arm.c:12362
+#: config/tc-arm.c:12390
msgid "selected processor does not support 'A' form of this instruction"
msgstr "у вибраному процеÑорі не передбачено підтримки форми «A» цієї інÑтрукції"
-#: config/tc-arm.c:12365
+#: config/tc-arm.c:12393
msgid "Thumb does not support the 2-argument form of this instruction"
msgstr "У Thumb не передбачено двоаргументової форми цієї інÑтрукції"
-#: config/tc-arm.c:12490
+#: config/tc-arm.c:12518
msgid "SP not allowed in register list"
msgstr "SP не можна викориÑтовувати у ÑпиÑку регіÑтра"
-#: config/tc-arm.c:12494 config/tc-arm.c:12601
+#: config/tc-arm.c:12522 config/tc-arm.c:12629
msgid "having the base register in the register list when using write back is UNPREDICTABLE"
msgstr "викориÑÑ‚Ð°Ð½Ð½Ñ Ð±Ð°Ð·Ð¾Ð²Ð¾Ð³Ð¾ регіÑтра у ÑпиÑку регіÑтрів разом з викориÑтаннÑм зворотного запиÑу Ñ” ÐЕПЕРЕДБÐЧУВÐÐИМ"
-#: config/tc-arm.c:12502
+#: config/tc-arm.c:12530
msgid "LR and PC should not both be in register list"
msgstr "LR Ñ– PC не повинні одночаÑно перебувати у ÑпиÑку регіÑтрів"
-#: config/tc-arm.c:12510
+#: config/tc-arm.c:12538
msgid "PC not allowed in register list"
msgstr "PC не можна викориÑтовувати у ÑпиÑку регіÑтра"
-#: config/tc-arm.c:12553
+#: config/tc-arm.c:12581
msgid "Thumb load/store multiple does not support {reglist}^"
msgstr "У механізмі Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñ‚Ð° Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð¼Ð½Ð¾Ð¶Ð½Ð¸ÐºÐ° Thumb не передбачено {reglist}^"
-#: config/tc-arm.c:12578 config/tc-arm.c:12656
+#: config/tc-arm.c:12606 config/tc-arm.c:12684
#, c-format
msgid "value stored for r%d is UNKNOWN"
msgstr "значеннÑ, збережене Ð´Ð»Ñ r%d Ñ” ÐЕВІДОМИМ"
-#: config/tc-arm.c:12649
+#: config/tc-arm.c:12677
msgid "Thumb-2 instruction only valid in unified syntax"
msgstr "інÑÑ‚Ñ€ÑƒÐºÑ†Ñ–Ñ Thumb-2 Ñ” чинною, лише Ñкщо викориÑтовуєтьÑÑ ÑƒÐ½Ñ–Ñ„Ñ–ÐºÐ¾Ð²Ð°Ð½Ð¸Ð¹ ÑинтакÑиÑ"
-#: config/tc-arm.c:12653 config/tc-arm.c:12663
+#: config/tc-arm.c:12681 config/tc-arm.c:12691
msgid "this instruction will write back the base register"
msgstr "Ñ†Ñ Ñ–Ð½ÑÑ‚Ñ€ÑƒÐºÑ†Ñ–Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ” зворотний Ð¿ÐµÑ€ÐµÐ·Ð°Ð¿Ð¸Ñ Ð±Ð°Ð·Ð¾Ð²Ð¾Ð³Ð¾ регіÑтра"
-#: config/tc-arm.c:12666
+#: config/tc-arm.c:12694
msgid "this instruction will not write back the base register"
msgstr "Ñ†Ñ Ñ–Ð½ÑÑ‚Ñ€ÑƒÐºÑ†Ñ–Ñ Ð½Ðµ виконає зворотний Ð¿ÐµÑ€ÐµÐ·Ð°Ð¿Ð¸Ñ Ð±Ð°Ð·Ð¾Ð²Ð¾Ð³Ð¾ регіÑтра"
-#: config/tc-arm.c:12697
+#: config/tc-arm.c:12725
msgid "r14 not allowed as first register when second register is omitted"
msgstr "r14 не можна викориÑтовувати Ñк перший регіÑÑ‚Ñ€, Ñкщо другий регіÑÑ‚Ñ€ пропущено"
-#: config/tc-arm.c:12797
+#: config/tc-arm.c:12825
msgid "This instruction may be unpredictable if executed on M-profile cores with interrupts enabled."
msgstr "Результати Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ñ†Ñ–Ñ”Ñ— інÑтрукції може бути непередбачуваними, Ñкщо Ñ—Ñ… виконувати на Ñдрах M-профілю з увімкненими перериваннÑми."
-#: config/tc-arm.c:12826 config/tc-arm.c:12839 config/tc-arm.c:12875
+#: config/tc-arm.c:12854 config/tc-arm.c:12867 config/tc-arm.c:12903
msgid "Thumb does not support this addressing mode"
msgstr "У Thumb не передбачено цього режиму адреÑуваннÑ"
-#: config/tc-arm.c:12843
+#: config/tc-arm.c:12871
msgid "byte or halfword not valid for base register"
msgstr "байт або напівÑлово Ñ” некоректним Ð´Ð»Ñ Ð±Ð°Ð·Ð¾Ð²Ð¾Ð³Ð¾ регіÑтра"
-#: config/tc-arm.c:12846
+#: config/tc-arm.c:12874
msgid "r15 based store not allowed"
msgstr "Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð½Ð° оÑнові r15 заборонено"
-#: config/tc-arm.c:12848
+#: config/tc-arm.c:12876
msgid "invalid base register for register offset"
msgstr "некоректний базовий регіÑÑ‚Ñ€ Ð´Ð»Ñ Ð·Ñуву регіÑтра"
-#: config/tc-arm.c:12905
+#: config/tc-arm.c:12933
msgid "r12 not allowed here"
msgstr "тут не можна викориÑтовувати r12"
-#: config/tc-arm.c:12911
+#: config/tc-arm.c:12939
msgid "base register written back, and overlaps one of transfer registers"
msgstr "базовий регіÑÑ‚Ñ€ запиÑано назад, він перекриває один з регіÑтрів передаваннÑ"
-#: config/tc-arm.c:13039
+#: config/tc-arm.c:13067
#, c-format
msgid "Use of r%u as a source register is deprecated when r%u is the destination register."
msgstr "ВикориÑÑ‚Ð°Ð½Ð½Ñ Ñ€ÐµÐ³Ñ–Ñтра джерела r%u вважаєтьÑÑ Ð·Ð°Ñтарілим, Ñкщо r%u Ñ” регіÑтром призначеннÑ."
-#: config/tc-arm.c:13234
+#: config/tc-arm.c:13262
msgid "shifts in CMP/MOV instructions are only supported in unified syntax"
msgstr "підтримку зÑувів у інÑтрукціÑÑ… CMP/MOV передбачено, лише Ñкщо викориÑтовуєтьÑÑ ÑƒÐ½Ñ–Ñ„Ñ–ÐºÐ¾Ð²Ð°Ð½Ð¸Ð¹ ÑинтакÑиÑ"
-#: config/tc-arm.c:13262
+#: config/tc-arm.c:13290
msgid "only lo regs allowed with immediate"
msgstr "з даними пришвидшеного доÑтупу можна викориÑтовувати лише регіÑтри lo"
-#: config/tc-arm.c:13439
+#: config/tc-arm.c:13467
msgid "Thumb encoding does not support an immediate here"
msgstr "ÐšÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ Thumb не передбачає підтримки безпоÑереднього Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ‚ÑƒÑ‚"
-#: config/tc-arm.c:13526
+#: config/tc-arm.c:13554
msgid "Thumb-2 MUL must not set flags"
msgstr "MUL Thumb-2 не повинні вÑтановлювати прапорці"
-#: config/tc-arm.c:13591
+#: config/tc-arm.c:13619
msgid "Thumb does not support NOP with hints"
msgstr "У Thumb не передбачено підтримки NOP з підказками"
-#: config/tc-arm.c:13751 config/tc-arm.c:13763
+#: config/tc-arm.c:13779 config/tc-arm.c:13791
msgid "invalid register list to push/pop instruction"
msgstr "некоректний ÑпиÑок регіÑтрів Ð´Ð»Ñ Ñ–Ð½Ñтрукції push/pop"
-#: config/tc-arm.c:14026
+#: config/tc-arm.c:14054
msgid "source1 and dest must be same register"
msgstr "джерело1 Ñ– Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¼Ð°ÑŽÑ‚ÑŒ бути тим Ñамим регіÑтром"
-#: config/tc-arm.c:14051
+#: config/tc-arm.c:14079
msgid "ror #imm not supported"
msgstr "підтримки ror #imm не передбачено"
-#: config/tc-arm.c:14102
+#: config/tc-arm.c:14130
msgid "SMC is not permitted on this architecture"
msgstr "SMC не можна викориÑтовувати на цій архітектурі"
-#: config/tc-arm.c:14268
+#: config/tc-arm.c:14296
msgid "Thumb encoding does not support rotation"
msgstr "У кодуванні Thumb не передбачено підтримки обертаннÑ"
-#: config/tc-arm.c:14288
+#: config/tc-arm.c:14316
msgid "instruction requires register index"
msgstr "інÑтрукції потрібне Ñ–Ð½Ð´ÐµÐºÑ Ñ€ÐµÐ³Ñ–Ñтра"
-#: config/tc-arm.c:14298
+#: config/tc-arm.c:14326
msgid "instruction does not allow shifted index"
msgstr "у інÑтрукції заборонено індекÑÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ñ– зÑувом"
-#: config/tc-arm.c:14454 config/tc-arm.c:29852
+#: config/tc-arm.c:14482 config/tc-arm.c:29930
msgid "out of range label-relative fixup value"
msgstr "вихід за межі діапазону Ð´Ð»Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð¸Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð½Ñ Ð²Ñ–Ð´Ð½Ð¾Ñно мітки"
-#: config/tc-arm.c:14778
+#: config/tc-arm.c:14806
msgid "invalid neon suffix for non neon instruction"
msgstr "некоректний ÑÑƒÑ„Ñ–ÐºÑ neon у інÑтрукції, Ñка не Ñ” інÑтрукцією neon"
-#: config/tc-arm.c:15173 config/tc-arm.c:15526 config/tc-arm.c:17011
-#: config/tc-arm.c:17091 config/tc-arm.c:17148 config/tc-arm.c:19029
-#: config/tc-arm.c:21212 config/tc-arm.c:21399
+#: config/tc-arm.c:15201 config/tc-arm.c:15554 config/tc-arm.c:17039
+#: config/tc-arm.c:17119 config/tc-arm.c:17176 config/tc-arm.c:19057
+#: config/tc-arm.c:21246 config/tc-arm.c:21433
msgid "invalid instruction shape"
msgstr "некоректна форма інÑтрукції"
-#: config/tc-arm.c:15425
+#: config/tc-arm.c:15453
msgid "types specified in both the mnemonic and operands"
msgstr "типи, вказані одразу у мнемоÑхемах Ñ– операндах"
-#: config/tc-arm.c:15462
+#: config/tc-arm.c:15490
msgid "operand types can't be inferred"
msgstr "типи операндів не може бути визначено"
-#: config/tc-arm.c:15468
+#: config/tc-arm.c:15496
msgid "type specifier has the wrong number of parts"
msgstr "Ñпецифікатор типу ÑкладаєтьÑÑ Ð· помилкової кількоÑÑ‚Ñ– чаÑтин"
-#: config/tc-arm.c:15554 config/tc-arm.c:19300 config/tc-arm.c:19307
+#: config/tc-arm.c:15582 config/tc-arm.c:19328 config/tc-arm.c:19335
msgid "operand size must match register width"
msgstr "розмір операнда має відповідати ширині регіÑтра"
-#: config/tc-arm.c:15576
+#: config/tc-arm.c:15604
msgid "inconsistent types in Neon instruction"
msgstr "непоÑлідовні типи у інÑтрукції Neon"
-#: config/tc-arm.c:15997
+#: config/tc-arm.c:16025
msgid "Type is not allowed for this instruction"
msgstr "Тип не можна викориÑтовувати Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— інÑтрукції"
-#: config/tc-arm.c:16072
+#: config/tc-arm.c:16100
msgid "MVE vector or ARM register expected"
msgstr "мало бути вказано векторний регіÑÑ‚Ñ€ MVE або регіÑÑ‚Ñ€ ARM"
-#: config/tc-arm.c:16189
+#: config/tc-arm.c:16217
msgid "immediate must be either 1, 2, 4 or 8"
msgstr "значеннÑм пришвидшеного доÑтупу має бути 1, 2, 4 або 8"
-#: config/tc-arm.c:16346
+#: config/tc-arm.c:16374
msgid "immediate operand expected in the range [1,8]"
msgstr "операнд із пришвидшеним доÑтупом має перебувати у діапазоні [1, 8]"
-#: config/tc-arm.c:16347
+#: config/tc-arm.c:16375
msgid "immediate operand expected in the range [1,16]"
msgstr "операнд із пришвидшеним доÑтупом має перебувати у діапазоні [1, 16]"
-#: config/tc-arm.c:16489
+#: config/tc-arm.c:16517
msgid "expected LR"
msgstr "мало бути викориÑтано LR"
-#: config/tc-arm.c:16988 config/tc-arm.c:17068 config/tc-arm.c:18665
-#: config/tc-arm.c:20499
+#: config/tc-arm.c:17016 config/tc-arm.c:17096 config/tc-arm.c:18693
+#: config/tc-arm.c:20527
msgid "immediate out of range for shift"
msgstr "дані пришвидшеного доÑтупу поза діапазоном Ð´Ð»Ñ Ð·ÑуваннÑ"
-#: config/tc-arm.c:17282
+#: config/tc-arm.c:17310
msgid "first and second operands shall be the same register"
msgstr "перший Ñ– другий операнди мають бути тим Ñамим регіÑтром"
-#: config/tc-arm.c:17396 config/tc-arm.c:17458
+#: config/tc-arm.c:17424 config/tc-arm.c:17486
msgid "destination register and offset register may not be the same"
msgstr "регіÑÑ‚Ñ€ Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ– регіÑÑ‚Ñ€ відÑтупу не можуть бути однаковими"
-#: config/tc-arm.c:17408 config/tc-arm.c:17527
+#: config/tc-arm.c:17436 config/tc-arm.c:17555
msgid "immediate must be a multiple of 4 in the range of +/-[0,508]"
msgstr "безпоÑереднє Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¼Ð°Ñ” бути кратним до 4 Ñ– належати до діапазону +/-[0,508]"
-#: config/tc-arm.c:17410
+#: config/tc-arm.c:17438
msgid "immediate must be a multiple of 8 in the range of +/-[0,1016]"
msgstr "безпоÑереднє Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¼Ð°Ñ” бути кратним до 8 Ñ– належати до діапазону +/-[0,1016]"
-#: config/tc-arm.c:17431
+#: config/tc-arm.c:17459
msgid "can not shift offsets when accessing less than half-word"
msgstr "не можна зÑувати відÑтупи при доÑтупу на менше ніж пів Ñлова"
-#: config/tc-arm.c:17433
+#: config/tc-arm.c:17461
msgid "shift immediate must be 1, 2 or 3 for half-word, word or double-word accesses respectively"
msgstr "зÑув Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¸ÑˆÐ²Ð¸Ð´ÑˆÐµÐ½Ð¾Ð³Ð¾ викориÑÑ‚Ð°Ð½Ð½Ñ Ð¼Ð°Ñ” бути 1, 2 або 3 Ð´Ð»Ñ Ð´Ð¾Ñтупу до пів Ñлова, Ñлова та подвійного Ñлова, відповідно"
-#: config/tc-arm.c:17520
+#: config/tc-arm.c:17548
msgid "immediate must be in the range of +/-[0,127]"
msgstr "безпоÑереднє Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¼Ð°Ñ” до діапазону +/-[0,127]"
-#: config/tc-arm.c:17523
+#: config/tc-arm.c:17551
msgid "immediate must be a multiple of 2 in the range of +/-[0,254]"
msgstr "безпоÑереднє Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¼Ð°Ñ” бути кратним до 2 Ñ– належати до діапазону +/-[0,254]"
-#: config/tc-arm.c:17537 config/tc-arm.c:18363
+#: config/tc-arm.c:17565 config/tc-arm.c:18391
msgid "MVE vector register in the range [Q0..Q7] expected"
msgstr "мало бути викориÑтано векторний регіÑÑ‚Ñ€ MVE у діапазоні [Q0..Q7]"
-#: config/tc-arm.c:17853 config/tc-arm.c:19721
+#: config/tc-arm.c:17881 config/tc-arm.c:19749
msgid "scalar out of range for multiply instruction"
msgstr "ÑкалÑÑ€ поза припуÑтимим діапазоном у інÑтрукції множеннÑ"
-#: config/tc-arm.c:17941
+#: config/tc-arm.c:17969
msgid "index must be in the range 0 to 3"
msgstr "Ñ–Ð½Ð´ÐµÐºÑ Ð¼Ð°Ñ” належати до діапазону від 0 до 3"
-#: config/tc-arm.c:17944
+#: config/tc-arm.c:17972
msgid "indexed register must be less than 8"
msgstr "індекÑований регіÑÑ‚Ñ€ повинен мати номер, Ñкий Ñ” меншим за 8"
-#: config/tc-arm.c:18145 config/tc-arm.c:21463
+#: config/tc-arm.c:18173 config/tc-arm.c:21497
msgid "Warning: 32-bit element size and same first and third operand makes instruction UNPREDICTABLE"
msgstr "ПопередженнÑ: 32-бітовий розмір елемента Ñ– однакові Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÑˆÐ¾Ð³Ð¾ Ñ– третього операндів роблÑÑ‚ÑŒ поведінку інÑтрукції непередбачуваною"
-#: config/tc-arm.c:18504
+#: config/tc-arm.c:18532
msgid "instruction form not available on this architecture."
msgstr "форма інÑтрукції на цій архітектурі недоÑтупна."
-#: config/tc-arm.c:18507
+#: config/tc-arm.c:18535
msgid "this instruction implies use of ARMv8.1 AdvSIMD."
msgstr "Ñ†Ñ Ñ–Ð½ÑÑ‚Ñ€ÑƒÐºÑ†Ñ–Ñ Ð²Ð¸Ð¼Ð°Ð³Ð°Ñ” викориÑÑ‚Ð°Ð½Ð½Ñ AdvSIMD ARMv8.1."
-#: config/tc-arm.c:18614 config/tc-arm.c:18639
+#: config/tc-arm.c:18642 config/tc-arm.c:18667
msgid "immediate out of range for insert"
msgstr "дані пришвидшеного доÑтупу поза діапазоном Ð´Ð»Ñ Ð²ÑтавленнÑ"
-#: config/tc-arm.c:18786
+#: config/tc-arm.c:18814
msgid "immediate out of range for narrowing operation"
msgstr "дані пришвидшеного доÑтупу поза діапазоном Ð´Ð»Ñ Ð´Ñ–Ñ— зі звуженнÑ"
-#: config/tc-arm.c:18933
+#: config/tc-arm.c:18961
msgid "operands 0 and 1 must be the same register"
msgstr "операнди 0 Ñ– 1 мають бути тим Ñамим регіÑтром"
-#: config/tc-arm.c:19039 config/tc-arm.c:21311
+#: config/tc-arm.c:19067 config/tc-arm.c:21345
msgid "invalid rounding mode"
msgstr "некоректний режим округленнÑ"
-#: config/tc-arm.c:19511
+#: config/tc-arm.c:19539
msgid "operand size must be specified for immediate VMOV"
msgstr "розмір операнда має бути вказано Ð´Ð»Ñ Ð±ÐµÐ·Ð¿Ð¾Ñереднього VMOV"
-#: config/tc-arm.c:19521
+#: config/tc-arm.c:19549
msgid "immediate has bits set outside the operand size"
msgstr "у безпоÑередньому значенні міÑÑ‚ÑÑ‚ÑŒÑÑ Ð±Ñ–Ñ‚Ð¸, вÑтановлені поза розміром операнда"
-#: config/tc-arm.c:19756
+#: config/tc-arm.c:19784
msgid "vfmal/vfmsl with FP16 type cannot be conditional, the behaviour is UNPREDICTABLE"
msgstr "vfmal/vfmsl з типом FP16 не може бути умовною. Поведінка у відповідь Ñ” ÐЕПЕРЕДБÐЧУВÐÐОЮ"
-#: config/tc-arm.c:19864
+#: config/tc-arm.c:19892
msgid "Instruction form not available on this architecture."
msgstr "Форма інÑтрукції на цій архітектурі недоÑтупна."
-#: config/tc-arm.c:19918
+#: config/tc-arm.c:19946
msgid "Warning: 64-bit element size and same destination and source operands makes instruction UNPREDICTABLE"
msgstr "ПопередженнÑ: 64-бітовий розмір елемента Ñ– однакові Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¾Ð¿ÐµÑ€Ð°Ð½Ð´Ñ–Ð² Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ– джерела роблÑÑ‚ÑŒ поведінку інÑтрукції непередбачуваною"
-#: config/tc-arm.c:19923
+#: config/tc-arm.c:19951
msgid "elements must be smaller than reversal region"
msgstr "елементи мають бути меншими за зворотну ділÑнку"
-#: config/tc-arm.c:20015
+#: config/tc-arm.c:20043
msgid "Index one must be [2,3] and index two must be two less than index one."
msgstr "ІндекÑом має бути чиÑло 2 або 3, а Ñ–Ð½Ð´ÐµÐºÑ 2 має бути на 2 меншим за Ñ–Ð½Ð´ÐµÐºÑ 1."
-#: config/tc-arm.c:20018
+#: config/tc-arm.c:20046
msgid "Destination registers may not be the same"
msgstr "РегіÑтри Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð½Ðµ можуть бути однаковими"
-#: config/tc-arm.c:20216 config/tc-arm.c:20299
+#: config/tc-arm.c:20244 config/tc-arm.c:20327
msgid "bad type for scalar"
msgstr "помилковий тип ÑкалÑра"
-#: config/tc-arm.c:20355
+#: config/tc-arm.c:20383
msgid "immediate constant is valid both as a bit-pattern and a floating point value (using the fp value)"
msgstr "Ñтала пришвидшеного доÑтупу Ñ” коректною Ñк бітовий зразок Ñ– Ñк дійÑне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ–Ð· рухомою крапкою (викориÑтовуємо Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð· рухомою крапкою)"
-#: config/tc-arm.c:20407 config/tc-arm.c:20418
+#: config/tc-arm.c:20435 config/tc-arm.c:20446
msgid "VFP registers must be adjacent"
msgstr "регіÑтри VFP мають бути ÑуÑідніми"
-#: config/tc-arm.c:20508
+#: config/tc-arm.c:20536
msgid "invalid suffix"
msgstr "некоректний ÑуфікÑ"
-#: config/tc-arm.c:20662
+#: config/tc-arm.c:20690
msgid "bad list length for table lookup"
msgstr "помилкова довжина ÑпиÑку Ð´Ð»Ñ Ñ„Ñ–Ð»ÑŒÑ‚Ñ€Ð° таблиці"
-#: config/tc-arm.c:20695
+#: config/tc-arm.c:20723
msgid "writeback (!) must be used for VLDMDB and VSTMDB"
msgstr "Ð´Ð»Ñ VLDMDB Ñ– VSTMDB Ñлід викориÑтовувати зворотний Ð·Ð°Ð¿Ð¸Ñ (!)"
-#: config/tc-arm.c:20698 config/tc-arm.c:20723 config/tc-arm.c:20744
+#: config/tc-arm.c:20726 config/tc-arm.c:20752
msgid "register list must contain at least 1 and at most 16 registers"
msgstr "ÑпиÑок регіÑтрів має міÑтити принаймні 1 Ñ– не більше 16 регіÑтрів"
-#: config/tc-arm.c:20766 config/tc-arm.c:20799
+#: config/tc-arm.c:20747
+msgid "register list must contain at least 1 and at most 32 registers"
+msgstr "ÑпиÑок регіÑтрів має міÑтити принаймні 1 Ñ– не більше 32 регіÑтрів"
+
+#: config/tc-arm.c:20800 config/tc-arm.c:20833
msgid "Use of PC here is UNPREDICTABLE"
msgstr "ВикориÑÑ‚Ð°Ð½Ð½Ñ PC тут Ñ” ÐЕПЕРЕДБÐЧУВÐÐИМ"
-#: config/tc-arm.c:20768
+#: config/tc-arm.c:20802
msgid "Use of PC here is deprecated"
msgstr "ВикориÑÑ‚Ð°Ð½Ð½Ñ PC тут вважаєтьÑÑ Ð·Ð°Ñтарілим"
-#: config/tc-arm.c:20802
+#: config/tc-arm.c:20836
msgid "instruction does not accept register index"
msgstr "інÑÑ‚Ñ€ÑƒÐºÑ†Ñ–Ñ Ð½Ðµ приймає індекÑу регіÑтрів"
-#: config/tc-arm.c:20805
+#: config/tc-arm.c:20839
msgid "instruction does not accept PC-relative addressing"
msgstr "інÑÑ‚Ñ€ÑƒÐºÑ†Ñ–Ñ Ð½Ðµ приймає адреÑÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ñ–Ð´Ð½Ð¾Ñно лічильника команд (PC)"
-#: config/tc-arm.c:20827 config/tc-arm.c:20836
+#: config/tc-arm.c:20861 config/tc-arm.c:20870
msgid "Instruction not permitted on this architecture"
msgstr "Цю інÑтрукцію не можна викориÑтовувати на цій архітектурі"
-#: config/tc-arm.c:20885
+#: config/tc-arm.c:20919
msgid "bad alignment"
msgstr "помилкове вирівнюваннÑ"
-#: config/tc-arm.c:20902
+#: config/tc-arm.c:20936
msgid "bad list type for instruction"
msgstr "помилковий тип ÑпиÑку Ð´Ð»Ñ Ñ–Ð½Ñтрукції"
-#: config/tc-arm.c:20946
+#: config/tc-arm.c:20980
msgid "unsupported alignment for instruction"
msgstr "непідтримуване Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ñ–Ð½Ñтрукції"
-#: config/tc-arm.c:20965 config/tc-arm.c:21059 config/tc-arm.c:21071
-#: config/tc-arm.c:21081 config/tc-arm.c:21095
+#: config/tc-arm.c:20999 config/tc-arm.c:21093 config/tc-arm.c:21105
+#: config/tc-arm.c:21115 config/tc-arm.c:21129
msgid "bad list length"
msgstr "помилкова довжина ÑпиÑку"
-#: config/tc-arm.c:20970
+#: config/tc-arm.c:21004
msgid "stride of 2 unavailable when element size is 8"
msgstr "крок (stride) у 2 Ñ” недоÑтупним, Ñкщо розміром елемента Ñ” 8"
-#: config/tc-arm.c:21003 config/tc-arm.c:21079
+#: config/tc-arm.c:21037 config/tc-arm.c:21113
msgid "can't use alignment with this instruction"
msgstr "не можна викориÑтовувати Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ Ð· цією інÑтрукцією"
-#: config/tc-arm.c:21151
+#: config/tc-arm.c:21185
msgid "post-index must be a register"
msgstr "поÑтіндекÑом має бути регіÑÑ‚Ñ€"
-#: config/tc-arm.c:21153
+#: config/tc-arm.c:21187
msgid "bad register for post-index"
msgstr "помилковий регіÑÑ‚Ñ€ Ð´Ð»Ñ Ð¿Ð¾ÑтіндекÑу"
-#: config/tc-arm.c:21375
+#: config/tc-arm.c:21409
msgid "scalar out of range"
msgstr "ÑкалÑÑ€ поза межами припуÑтимого діапазону"
-#: config/tc-arm.c:21508
+#: config/tc-arm.c:21542
msgid "Dot Product instructions cannot be conditional, the behaviour is UNPREDICTABLE"
msgstr "ІнÑтрукції ÑкалÑрного добутку не можуть бути умовними. Поведінка у відповідь Ñ” ÐЕПЕРЕДБÐЧУВÐÐОЮ"
-#: config/tc-arm.c:21583 config/tc-arm.c:21611 config/tc-arm.c:22293
+#: config/tc-arm.c:21617 config/tc-arm.c:21645 config/tc-arm.c:22327
msgid "index must be 0 or 1"
msgstr "індекÑом має бути 0 або 1"
-#: config/tc-arm.c:21586 config/tc-arm.c:21614 config/tc-arm.c:22296
+#: config/tc-arm.c:21620 config/tc-arm.c:21648 config/tc-arm.c:22330
msgid "indexed register must be less than 16"
msgstr "індекÑований регіÑÑ‚Ñ€ повинен мати номер, Ñкий Ñ” меншим за 16"
-#: config/tc-arm.c:21652
+#: config/tc-arm.c:21686
msgid "Register must be r0-r14 except r13, or APSR_nzcv."
msgstr "РегіÑтром має бути r0-r14, окрім r13, або APSR_nzcv."
-#: config/tc-arm.c:21655
+#: config/tc-arm.c:21689
msgid "Register must be an even register between r0-r10."
msgstr "РегіÑтром має бути парний регіÑÑ‚Ñ€ у діапазоні r0-r10."
-#: config/tc-arm.c:21680
+#: config/tc-arm.c:21714
msgid "CDE Coprocessor must be in range 0-7"
msgstr "СпівпроцеÑор CDE має належати діапазону 0-7"
-#: config/tc-arm.c:21714
+#: config/tc-arm.c:21748
msgid "cx1d requires consecutive destination registers."
msgstr "cx1d потребує наÑтупних регіÑтрів призначеннÑ."
-#: config/tc-arm.c:21744
+#: config/tc-arm.c:21778
msgid "cx2d requires consecutive destination registers."
msgstr "cx2d потребує наÑтупних регіÑтрів призначеннÑ."
-#: config/tc-arm.c:21783
+#: config/tc-arm.c:21817
msgid "cx3d requires consecutive destination registers."
msgstr "cx3d потребує наÑтупних регіÑтрів призначеннÑ."
-#: config/tc-arm.c:21975
+#: config/tc-arm.c:22009
msgid "'q' register must be in range 0-7"
msgstr "регіÑÑ‚Ñ€ «q» має належати діапазону 0-7"
-#: config/tc-arm.c:21978
+#: config/tc-arm.c:22012
msgid "'d' register must be in range 0-15"
msgstr "регіÑÑ‚Ñ€ «d» має належати діапазону 0-15"
-#: config/tc-arm.c:21980
+#: config/tc-arm.c:22014
msgid "'s' register must be in range 0-31"
msgstr "регіÑÑ‚Ñ€ «s» має належати діапазону 0-31"
-#: config/tc-arm.c:22035
+#: config/tc-arm.c:22069
msgid "vcx instructions with Q registers require MVE"
msgstr "інÑтрукції vcx з регіÑтрами Q потребують MVE"
-#: config/tc-arm.c:22040
+#: config/tc-arm.c:22074
msgid "vcx instructions with S or D registers require either MVE or Armv8-M floating point extension."
msgstr "викориÑÑ‚Ð°Ð½Ð½Ñ Ñ–Ð½Ñтрукцій vcx з регіÑтром S або D потребує або MVE, або Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Armv8-M Ð´Ð»Ñ Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸ з чиÑлами з рухомою крапкою."
-#: config/tc-arm.c:22056
+#: config/tc-arm.c:22090
msgid "vcx1 with S or D registers takes immediate within 0-2047"
msgstr "vcx1 із регіÑтром S або D приймає Ñтале Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñƒ діапазоні 0-2047"
-#: config/tc-arm.c:22072
+#: config/tc-arm.c:22106
msgid "vcx2 with S or D registers takes immediate within 0-63"
msgstr "vcx2 із регіÑтром S або D приймає Ñтале Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñƒ діапазоні 0-63"
-#: config/tc-arm.c:22087
+#: config/tc-arm.c:22121
msgid "vcx2 with S or D registers takes immediate within 0-7"
msgstr "vcx2 із регіÑтром S або D приймає Ñтале Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñƒ діапазоні 0-7"
-#: config/tc-arm.c:22647 config/tc-arm.c:22751
+#: config/tc-arm.c:22711 config/tc-arm.c:22815
msgid "conditional infixes are deprecated in unified syntax"
msgstr "умовні інфікÑи Ñ” заÑтарілими в уніфікованому ÑинтакÑиÑÑ–"
-#: config/tc-arm.c:22962
+#: config/tc-arm.c:23026
msgid "Warning: conditional outside an IT block for Thumb."
msgstr "ПопередженнÑ: умовні Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð¾Ð·Ð° блоком IT Ð´Ð»Ñ Thumb."
-#: config/tc-arm.c:23290
+#: config/tc-arm.c:23354
msgid "Short branches, Undefined, SVC, LDM/STM"
msgstr "Короткі гілки, не визначено, SVC, LDM/STM"
-#: config/tc-arm.c:23291
+#: config/tc-arm.c:23355
msgid "Miscellaneous 16-bit instructions"
msgstr "Різноманітні 16-бітові інÑтрукції"
-#: config/tc-arm.c:23292
+#: config/tc-arm.c:23356
msgid "ADR"
msgstr "ÐДР"
-#: config/tc-arm.c:23293
+#: config/tc-arm.c:23357
msgid "Literal loads"
msgstr "Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð»Ñ–Ñ‚ÐµÑ€Ð°Ð»Ñ–Ð²"
-#: config/tc-arm.c:23294
+#: config/tc-arm.c:23358
msgid "Hi-register ADD, MOV, CMP, BX, BLX using pc"
msgstr "ADD, MOV, CMP, BX, BLX за допомогою лічильника команд та регіÑтрів верхнього діапазону"
-#: config/tc-arm.c:23295
+#: config/tc-arm.c:23359
msgid "Hi-register ADD, MOV, CMP using pc"
msgstr "ADD, MOV, CMP за допомогою лічильника команд та регіÑтрів верхнього діапазону"
#. NOTE: 0x00dd is not the real encoding, instead, it is the 'tvalue'
#. field in asm_opcode. 'tvalue' is used at the stage this check happen.
-#: config/tc-arm.c:23298
+#: config/tc-arm.c:23362
msgid "ADD/SUB sp, sp #imm"
msgstr "ADD/SUB sp, sp #imm"
-#: config/tc-arm.c:23320
+#: config/tc-arm.c:23384
msgid "IT blocks containing 32-bit Thumb instructions are performance deprecated in ARMv8-A and ARMv8-R"
msgstr "Блоки IT, що міÑÑ‚ÑÑ‚ÑŒ 32-бітові інÑтрукції Thumb, вважаютьÑÑ Ð·Ð°Ñтарілими у ARMv8-A Ñ– ARMv8-R через швидкодію"
-#: config/tc-arm.c:23332
+#: config/tc-arm.c:23396
#, c-format
msgid "IT blocks containing 16-bit Thumb instructions of the following class are performance deprecated in ARMv8-A and ARMv8-R: %s"
msgstr "Блоки IT, що міÑÑ‚ÑÑ‚ÑŒ 16-бітові інÑтрукції Thumb вказаного далі клаÑу, вважаютьÑÑ Ð·Ð°Ñтарілими через швидкодію у ARMv8-A Ñ– ARMv8-R: %s"
-#: config/tc-arm.c:23346
+#: config/tc-arm.c:23410
msgid "IT blocks containing more than one conditional instruction are performance deprecated in ARMv8-A and ARMv8-R"
msgstr "Блоки IT, що міÑÑ‚ÑÑ‚ÑŒ понад одну умовну інÑтрукцію, вважаютьÑÑ Ð·Ð°Ñтарілими через швидкодію у ARMv8-A Ñ– ARMv8-R"
-#: config/tc-arm.c:23464
+#: config/tc-arm.c:23528
#, c-format
msgid "bad instruction `%s'"
msgstr "помилкова інÑÑ‚Ñ€ÑƒÐºÑ†Ñ–Ñ Â«%s»"
-#: config/tc-arm.c:23470
+#: config/tc-arm.c:23534
msgid "s suffix on comparison instruction is deprecated"
msgstr "ÑÑƒÑ„Ñ–ÐºÑ s у інÑтрукції порівнÑÐ½Ð½Ñ Ñ” заÑтарілим"
-#: config/tc-arm.c:23490
+#: config/tc-arm.c:23554
msgid "SVC is not permitted on this architecture"
msgstr "SVC не можна викориÑтовувати на цій архітектурі"
-#: config/tc-arm.c:23492
+#: config/tc-arm.c:23556
#, c-format
msgid "selected processor does not support `%s' in Thumb mode"
msgstr "у вибраному процеÑорі не передбачено підтримки «%s» у режимі Thumb"
-#: config/tc-arm.c:23498
+#: config/tc-arm.c:23562
msgid "Thumb does not support conditional execution"
msgstr "У Thumb не передбачено підтримки умовного виконаннÑ"
-#: config/tc-arm.c:23518
+#: config/tc-arm.c:23582
#, c-format
msgid "selected processor does not support 32bit wide variant of instruction `%s'"
msgstr "у вибраному процеÑорі не передбачено підтримки 32-бітового широкого варіанта інÑтрукції «%s»"
-#: config/tc-arm.c:23521
+#: config/tc-arm.c:23585
#, c-format
msgid "selected processor does not support `%s' in Thumb-2 mode"
msgstr "у вибраному процеÑорі не передбачено підтримки «%s» у режимі Thumb-2"
-#: config/tc-arm.c:23546
+#: config/tc-arm.c:23610
#, c-format
msgid "cannot honor width suffix -- `%s'"
msgstr "не можна викориÑтати ÑÑƒÑ„Ñ–ÐºÑ ÑˆÐ¸Ñ€Ð¸Ð½Ð¸ -- «%s»"
-#: config/tc-arm.c:23588
+#: config/tc-arm.c:23652
#, c-format
msgid "selected processor does not support `%s' in ARM mode"
msgstr "у вибраному процеÑорі не передбачено підтримки «%s» у режимі ARM"
-#: config/tc-arm.c:23593
+#: config/tc-arm.c:23657
#, c-format
msgid "width suffixes are invalid in ARM mode -- `%s'"
msgstr "ÑуфікÑи ширини Ñ” некоректними у режимі ARM -- «%s»"
-#: config/tc-arm.c:23626
+#: config/tc-arm.c:23690
#, c-format
msgid "attempt to use an ARM instruction on a Thumb-only processor -- `%s'"
msgstr "Ñпроба викориÑтати інÑтрукцію ARM на процеÑорі, де передбачено лише Thumb, -- «%s»"
-#: config/tc-arm.c:23644
+#: config/tc-arm.c:23708
#, c-format
msgid "section '%s' finished with an open IT block."
msgstr "розділ «%s» завершено на відкритому блоці IT."
-#: config/tc-arm.c:23647
+#: config/tc-arm.c:23711
#, c-format
msgid "section '%s' finished with an open VPT/VPST block."
msgstr "розділ «%s» завершено на відкритому блоці VPT/VPST."
-#: config/tc-arm.c:23654
+#: config/tc-arm.c:23718
msgid "file finished with an open IT block."
msgstr "файл завершено незавершеним блоком IT."
-#: config/tc-arm.c:23656
+#: config/tc-arm.c:23720
msgid "file finished with an open VPT/VPST block."
msgstr "файл завершено незавершеним блоком VPT/VPST."
-#: config/tc-arm.c:27353
+#: config/tc-arm.c:27431
#, c-format
msgid "alignments greater than %d bytes not supported in .text sections."
msgstr "підтримки Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ð½Ð°Ð´ %d байтів у розділах .text не передбачено."
-#: config/tc-arm.c:27619 config/tc-ia64.c:3590
+#: config/tc-arm.c:27697 config/tc-ia64.c:3591
#, c-format
msgid "Group section `%s' has no group signature"
msgstr "Розділ груп «%s» не має підпиÑу групи"
-#: config/tc-arm.c:27665
+#: config/tc-arm.c:27743
msgid "handlerdata in cantunwind frame"
msgstr "handlerdata у кадрі cantunwind"
-#: config/tc-arm.c:27682
+#: config/tc-arm.c:27760
msgid "too many unwind opcodes for personality routine 0"
msgstr "забагато кодів операцій Ñ€Ð¾Ð·Ð³Ð¾Ñ€Ñ‚Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ð¾ÑобиÑтої підпрограми 0"
-#: config/tc-arm.c:27713
+#: config/tc-arm.c:27791
msgid "attempt to recreate an unwind entry"
msgstr "Ñпроба повторного ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñу розгортаннÑ"
-#: config/tc-arm.c:27723
+#: config/tc-arm.c:27801
msgid "too many unwind opcodes"
msgstr "забагато кодів операцій розгортаннÑ"
-#: config/tc-arm.c:28023
+#: config/tc-arm.c:28101
#, c-format
msgid "[-mwarn-syms]: Assignment makes a symbol match an ARM instruction: %s"
msgstr "[-mwarn-syms]: Ð½Ð°Ð´Ð°Ð½Ð½Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ€Ð¾Ð±Ð¸Ñ‚ÑŒ Ñимвол відповідним інÑтрукції ARM: %s"
-#: config/tc-arm.c:28387 config/tc-arm.c:28455
+#: config/tc-arm.c:28465 config/tc-arm.c:28533
#, c-format
msgid "symbol %s is in a different section"
msgstr "Ñимвол %s перебуває у іншому розділі"
-#: config/tc-arm.c:28389 config/tc-arm.c:28457
+#: config/tc-arm.c:28467 config/tc-arm.c:28535
#, c-format
msgid "symbol %s is weak and may be overridden later"
msgstr "Ñимвол %s Ñ” Ñлабким Ñ– його може бути перевизначено пізніше"
-#: config/tc-arm.c:28434 config/tc-arm.c:28806
+#: config/tc-arm.c:28512 config/tc-arm.c:28884
#, c-format
msgid "invalid constant (%lx) after fixup"
msgstr "некоректна Ñтала (%lx) піÑÐ»Ñ Ð°Ð´Ñ€ÐµÑної прив’Ñзки"
-#: config/tc-arm.c:28490
+#: config/tc-arm.c:28568
#, c-format
msgid "unable to compute ADRL instructions for PC offset of 0x%lx"
msgstr "неможливо обчиÑлити інÑтрукції ADRL Ð´Ð»Ñ Ð·Ñуву PC 0x%lx"
-#: config/tc-arm.c:28526 config/tc-arm.c:28556
+#: config/tc-arm.c:28604 config/tc-arm.c:28634
msgid "invalid literal constant: pool needs to be closer"
msgstr "некоректна буквальна Ñтала: буфер має бути ближчим"
-#: config/tc-arm.c:28529 config/tc-arm.c:28578
+#: config/tc-arm.c:28607 config/tc-arm.c:28656
#, c-format
msgid "bad immediate value for offset (%ld)"
msgstr "помилкове Ñтале Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð·Ñуву (%ld)"
-#: config/tc-arm.c:28559
+#: config/tc-arm.c:28637
#, c-format
msgid "bad immediate value for 8-bit offset (%ld)"
msgstr "помилкове Ñтале Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ 8-бітового зÑуву (%ld)"
-#: config/tc-arm.c:28619
+#: config/tc-arm.c:28697
msgid "offset not a multiple of 4"
msgstr "зÑув не Ñ” кратним до 4"
-#: config/tc-arm.c:28822
+#: config/tc-arm.c:28900
msgid "invalid smc expression"
msgstr "некоректний вираз smc"
-#: config/tc-arm.c:28832
+#: config/tc-arm.c:28910
msgid "invalid hvc expression"
msgstr "некоректний вираз hvc"
-#: config/tc-arm.c:28843 config/tc-arm.c:28852
+#: config/tc-arm.c:28921 config/tc-arm.c:28930
msgid "invalid swi expression"
msgstr "некоректний вираз swi"
-#: config/tc-arm.c:28862
+#: config/tc-arm.c:28940
msgid "invalid expression in load/store multiple"
msgstr "некоректний вираз у кортежі load/store"
-#: config/tc-arm.c:28924
+#: config/tc-arm.c:29002
#, c-format
msgid "blx to '%s' an ARM ISA state function changed to bl"
msgstr "blx до «%s» функції Ñтану ISA ARM замінено на bl"
-#: config/tc-arm.c:28943
+#: config/tc-arm.c:29021
msgid "misaligned branch destination"
msgstr "невирівнÑне Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð³Ñ–Ð»ÐºÐ¸"
-#: config/tc-arm.c:29064
+#: config/tc-arm.c:29142
#, c-format
msgid "blx to Thumb func '%s' from Thumb ISA state changed to bl"
msgstr "blx до функції Thumb «%s» зі Ñтану ISA Thumb змінено на bl"
-#: config/tc-arm.c:29113
+#: config/tc-arm.c:29191
msgid "Thumb2 branch out of range"
msgstr "гілка Thumb2 поза межами припуÑтимого діапазону"
-#: config/tc-arm.c:29165 config/tc-arm.c:29198
+#: config/tc-arm.c:29243 config/tc-arm.c:29276
msgid "Relocation supported only in FDPIC mode"
msgstr "Підтримку переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ лише у режимі FDPIC"
-#: config/tc-arm.c:29228
+#: config/tc-arm.c:29306
msgid "rel31 relocation overflow"
msgstr "Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÐµÑÑƒÐ²Ð°Ð½Ð½Ñ rel31"
-#: config/tc-arm.c:29250 config/tc-arm.c:29256 config/tc-arm.c:29260
-#: config/tc-arm.c:29307
+#: config/tc-arm.c:29328 config/tc-arm.c:29334 config/tc-arm.c:29338
+#: config/tc-arm.c:29385
msgid "co-processor offset out of range"
msgstr "Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÐµÐ½Ð½Ñ Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾Ð³Ð¾ Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ ÑпівпроцеÑора"
-#: config/tc-arm.c:29324
+#: config/tc-arm.c:29402
#, c-format
msgid "invalid offset, target not word aligned (0x%08lX)"
msgstr "некоректний зÑув, Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð½Ðµ вирівнÑно на межу Ñлова (0x%08lX)"
-#: config/tc-arm.c:29330
+#: config/tc-arm.c:29408
msgid "section does not have enough alignment to ensure safe PC-relative loads"
msgstr "у розділі недоÑтатньо Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ð·Ð°Ð±ÐµÐ·Ð¿ÐµÑ‡ÐµÐ½Ð½Ñ Ð±ÐµÐ·Ð¿ÐµÑ‡Ð½Ð¸Ñ… завантажень відноÑно лічильника команд"
-#: config/tc-arm.c:29334 config/tc-arm.c:29343 config/tc-arm.c:29351
-#: config/tc-arm.c:29359 config/tc-arm.c:29367
+#: config/tc-arm.c:29412 config/tc-arm.c:29421 config/tc-arm.c:29429
+#: config/tc-arm.c:29437 config/tc-arm.c:29445
#, c-format
msgid "invalid offset, value too big (0x%08lX)"
msgstr "некоректний зÑув, Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ” надто великим (0x%08lX)"
-#: config/tc-arm.c:29408
+#: config/tc-arm.c:29486
msgid "invalid Hi register with immediate"
msgstr "некоректний регіÑÑ‚Ñ€ Hi Ð´Ð»Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¸ÑˆÐ²Ð¸Ð´ÑˆÐµÐ½Ð¾Ð³Ð¾ викориÑтаннÑ"
-#: config/tc-arm.c:29424
+#: config/tc-arm.c:29502
msgid "invalid immediate for stack address calculation"
msgstr "некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¸ÑˆÐ²Ð¸Ð´ÑˆÐµÐ½Ð¾Ð³Ð¾ викориÑÑ‚Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ð¾Ð±Ñ‡Ð¸ÑÐ»ÐµÐ½Ð½Ñ Ð°Ð´Ñ€ÐµÑи у Ñтеку"
-#: config/tc-arm.c:29443
+#: config/tc-arm.c:29521
msgid "address calculation needs a strongly defined nearby symbol"
msgstr "обчиÑÐ»ÐµÐ½Ð½Ñ Ð°Ð´Ñ€ÐµÑи потребує Ñтрого визначеного ÑуÑіднього Ñимволу"
-#: config/tc-arm.c:29459
+#: config/tc-arm.c:29537
msgid "symbol too far away"
msgstr "Ñимвол Ñ” надто далеким"
-#: config/tc-arm.c:29471
+#: config/tc-arm.c:29549
#, c-format
msgid "invalid immediate for address calculation (value = 0x%08lX)"
msgstr "некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¸ÑˆÐ²Ð¸Ð´ÑˆÐµÐ½Ð¾Ð³Ð¾ викориÑÑ‚Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ð¾Ð±Ñ‡Ð¸ÑÐ»ÐµÐ½Ð½Ñ Ð°Ð´Ñ€ÐµÑи (Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ = 0x%08lX)"
-#: config/tc-arm.c:29501
+#: config/tc-arm.c:29579
#, c-format
msgid "invalid immediate: %ld is out of range"
msgstr "некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¸ÑˆÐ²Ð¸Ð´ÑˆÐµÐ½Ð¾Ð³Ð¾ викориÑтаннÑ: %ld не належить припуÑтимому діапазону"
-#: config/tc-arm.c:29513
+#: config/tc-arm.c:29591
#, c-format
msgid "invalid shift value: %ld"
msgstr "некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð·Ñуву: %ld"
-#: config/tc-arm.c:29583 config/tc-arm.c:29654
+#: config/tc-arm.c:29661 config/tc-arm.c:29732
#, c-format
msgid "the offset 0x%08lX is not representable"
msgstr "зÑув 0x%08lX не Ñ” відтворюваним"
-#: config/tc-arm.c:29615
+#: config/tc-arm.c:29693
#, c-format
msgid "Unable to process relocation for thumb opcode: %lx"
msgstr "Ðе вдалоÑÑ Ð¾Ð±Ñ€Ð¾Ð±Ð¸ переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ ÐºÐ¾Ð´Ñƒ операції thumb: %lx"
-#: config/tc-arm.c:29694
+#: config/tc-arm.c:29772
#, c-format
msgid "bad offset 0x%08lX (only 12 bits available for the magnitude)"
msgstr "помилковий відÑтуп 0x%08lX (доÑтупно лише 12 бітів Ð´Ð»Ñ Ð°Ð¼Ð¿Ð»Ñ–Ñ‚ÑƒÐ´Ð¸)"
-#: config/tc-arm.c:29733
+#: config/tc-arm.c:29811
#, c-format
msgid "bad offset 0x%08lX (only 8 bits available for the magnitude)"
msgstr "помилковий відÑтуп 0x%08lX (доÑтупно лише 8 бітів Ð´Ð»Ñ Ð°Ð¼Ð¿Ð»Ñ–Ñ‚ÑƒÐ´Ð¸)"
-#: config/tc-arm.c:29773
+#: config/tc-arm.c:29851
#, c-format
msgid "bad offset 0x%08lX (must be word-aligned)"
msgstr "помилковий зÑув 0x%08lX (має бути вирівнÑно на межу Ñлова)"
-#: config/tc-arm.c:29778
+#: config/tc-arm.c:29856
#, c-format
msgid "bad offset 0x%08lX (must be an 8-bit number of words)"
msgstr "помилковий зÑув 0x%08lX (має бути виражено кількіÑÑ‚ÑŽ 8-бітових Ñлів)"
-#: config/tc-arm.c:29999 config/tc-score.c:7359
+#: config/tc-arm.c:30077 config/tc-score.c:7359
#, c-format
msgid "bad relocation fixup type (%d)"
msgstr "помилковий тип адреÑної прив’Ñзки переÑÑƒÐ²Ð°Ð½Ð½Ñ (%d)"
-#: config/tc-arm.c:30117
+#: config/tc-arm.c:30195
msgid "literal referenced across section boundary"
msgstr "поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° літерал, що виходить за межі розділу"
-#: config/tc-arm.c:30197
+#: config/tc-arm.c:30275
msgid "internal relocation (type: IMMEDIATE) not fixed up"
msgstr "внутрішнє переÑÑƒÐ²Ð°Ð½Ð½Ñ (тип: IMMEDIATE) не виправлено"
-#: config/tc-arm.c:30202
+#: config/tc-arm.c:30280
msgid "ADRL used for a symbol not defined in the same file"
msgstr "ADRL, викориÑтаної Ð´Ð»Ñ Ñимволу, не визначено у тому Ñамому файлі"
-#: config/tc-arm.c:30209
+#: config/tc-arm.c:30287
#, c-format
msgid "%s used for a symbol not defined in the same file"
msgstr "%s, викориÑтаної Ð´Ð»Ñ Ñимволу, не визначено у тому Ñамому файлі"
-#: config/tc-arm.c:30225
+#: config/tc-arm.c:30303
#, c-format
msgid "undefined local label `%s'"
msgstr "невизначена локальна мітка «%s»"
-#: config/tc-arm.c:30231
+#: config/tc-arm.c:30309
msgid "internal_relocation (type: OFFSET_IMM) not fixed up"
msgstr "internal_relocation (тип: OFFSET_IMM) не виправлено"
-#: config/tc-arm.c:30253 config/tc-cris.c:4000 config/tc-csky.c:1152
-#: config/tc-ft32.c:709 config/tc-mcore.c:1929 config/tc-microblaze.c:2007
+#: config/tc-arm.c:30331 config/tc-cris.c:4000 config/tc-csky.c:1152
+#: config/tc-ft32.c:708 config/tc-mcore.c:1932 config/tc-microblaze.c:2007
#: config/tc-mmix.c:2907 config/tc-moxie.c:823 config/tc-ns32k.c:2245
#: config/tc-score.c:7446
msgid "<unknown>"
msgstr "<невідома>"
-#: config/tc-arm.c:30652
+#: config/tc-arm.c:30730
#, c-format
msgid "%s: unexpected function type: %d"
msgstr "%s: неочікуваний тип функції: %d"
-#: config/tc-arm.c:30792
+#: config/tc-arm.c:30870
msgid "use of old and new-style options to set CPU type"
msgstr "викориÑÑ‚Ð°Ð½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ñ–Ð² у Ñтарому або новому Ñтилі Ð´Ð»Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñ‚Ð¸Ð¿Ñƒ процеÑора"
-#: config/tc-arm.c:30811
+#: config/tc-arm.c:30889
msgid "use of old and new-style options to set FPU type"
msgstr "викориÑÑ‚Ð°Ð½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ñ–Ð² у Ñтарому або новому Ñтилі Ð´Ð»Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñ‚Ð¸Ð¿Ñƒ процеÑора Ð´Ð»Ñ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ значень з рухомою крапкою (FPU)"
-#: config/tc-arm.c:30890
+#: config/tc-arm.c:30968
msgid "hard-float conflicts with specified fpu"
msgstr "апаратне Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ float конфліктує із вказаним fpu"
-#: config/tc-arm.c:31081
+#: config/tc-arm.c:31159
msgid "generate PIC code"
msgstr "Ñтворити код PIC"
-#: config/tc-arm.c:31082
+#: config/tc-arm.c:31160
msgid "assemble Thumb code"
msgstr "зібрати код Thumb"
-#: config/tc-arm.c:31083
+#: config/tc-arm.c:31161
msgid "support ARM/Thumb interworking"
msgstr "підтримка взаємодії ARM/Thumb"
-#: config/tc-arm.c:31085
+#: config/tc-arm.c:31163
msgid "code uses 32-bit program counter"
msgstr "код викориÑтовує 32-бітовий лічильник програми"
-#: config/tc-arm.c:31086
+#: config/tc-arm.c:31164
msgid "code uses 26-bit program counter"
msgstr "код викориÑтовує 26-бітовий лічильник програми"
-#: config/tc-arm.c:31087
+#: config/tc-arm.c:31165
msgid "floating point args are in fp regs"
msgstr "аргументи з рухомою крапкою зберігаютьÑÑ Ñƒ регіÑтрах fp"
-#: config/tc-arm.c:31089
+#: config/tc-arm.c:31167
msgid "re-entrant code"
msgstr "повторновхідний код"
-#: config/tc-arm.c:31090
+#: config/tc-arm.c:31168
msgid "code is ATPCS conformant"
msgstr "код Ñ” ÑуміÑним з ATPCS"
#. These are recognized by the assembler, but have no affect on code.
-#: config/tc-arm.c:31096
+#: config/tc-arm.c:31174
msgid "use frame pointer"
msgstr "викориÑтовувати вказівник кадру"
-#: config/tc-arm.c:31097
+#: config/tc-arm.c:31175
msgid "use stack size checking"
msgstr "викориÑтовувати перевірку розміру Ñтека"
-#: config/tc-arm.c:31100
+#: config/tc-arm.c:31178
msgid "do not warn on use of deprecated feature"
msgstr "не попереджати про викориÑÑ‚Ð°Ð½Ð½Ñ Ð·Ð°Ñтарілої можливоÑÑ‚Ñ–"
-#: config/tc-arm.c:31103
+#: config/tc-arm.c:31181
msgid "warn about performance deprecated IT instructions in ARMv8-A and ARMv8-R"
msgstr "попереджати про інÑтрукції IT, Ñкі погіршують швидкодію на ARMv8-A Ñ– ARMv8-R"
-#: config/tc-arm.c:31107
+#: config/tc-arm.c:31185
msgid "warn about symbols that match instruction names [default]"
msgstr "попереджати про Ñимволи, назви Ñких збігаютьÑÑ Ñ–Ð· назвою інÑтрукції [типово]"
-#: config/tc-arm.c:31108
+#: config/tc-arm.c:31186
msgid "disable warnings about symobls that match instructions"
msgstr "вимкнути Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ Ñимволів, назви Ñких збігаютьÑÑ Ð· інÑтрукціÑми"
#. DON'T add any new processors to this list -- we want the whole list
#. to go away... Add them to the processors table instead.
-#: config/tc-arm.c:31124 config/tc-arm.c:31125
+#: config/tc-arm.c:31202 config/tc-arm.c:31203
msgid "use -mcpu=arm1"
msgstr "викориÑтовувати -mcpu=arm1"
-#: config/tc-arm.c:31126 config/tc-arm.c:31127
+#: config/tc-arm.c:31204 config/tc-arm.c:31205
msgid "use -mcpu=arm2"
msgstr "викориÑтовувати -mcpu=arm2"
-#: config/tc-arm.c:31128 config/tc-arm.c:31129
+#: config/tc-arm.c:31206 config/tc-arm.c:31207
msgid "use -mcpu=arm250"
msgstr "викориÑтовувати -mcpu=arm250"
-#: config/tc-arm.c:31130 config/tc-arm.c:31131
+#: config/tc-arm.c:31208 config/tc-arm.c:31209
msgid "use -mcpu=arm3"
msgstr "викориÑтовувати -mcpu=arm3"
-#: config/tc-arm.c:31132 config/tc-arm.c:31133
+#: config/tc-arm.c:31210 config/tc-arm.c:31211
msgid "use -mcpu=arm6"
msgstr "викориÑтовувати -mcpu=arm6"
-#: config/tc-arm.c:31134 config/tc-arm.c:31135
+#: config/tc-arm.c:31212 config/tc-arm.c:31213
msgid "use -mcpu=arm600"
msgstr "викориÑтовувати -mcpu=arm600"
-#: config/tc-arm.c:31136 config/tc-arm.c:31137
+#: config/tc-arm.c:31214 config/tc-arm.c:31215
msgid "use -mcpu=arm610"
msgstr "викориÑтовувати -mcpu=arm610"
-#: config/tc-arm.c:31138 config/tc-arm.c:31139
+#: config/tc-arm.c:31216 config/tc-arm.c:31217
msgid "use -mcpu=arm620"
msgstr "викориÑтовувати -mcpu=arm620"
-#: config/tc-arm.c:31140 config/tc-arm.c:31141
+#: config/tc-arm.c:31218 config/tc-arm.c:31219
msgid "use -mcpu=arm7"
msgstr "викориÑтовувати -mcpu=arm7"
-#: config/tc-arm.c:31142 config/tc-arm.c:31143
+#: config/tc-arm.c:31220 config/tc-arm.c:31221
msgid "use -mcpu=arm70"
msgstr "викориÑтовувати -mcpu=arm70"
-#: config/tc-arm.c:31144 config/tc-arm.c:31145
+#: config/tc-arm.c:31222 config/tc-arm.c:31223
msgid "use -mcpu=arm700"
msgstr "викориÑтовувати -mcpu=arm700"
-#: config/tc-arm.c:31146 config/tc-arm.c:31147
+#: config/tc-arm.c:31224 config/tc-arm.c:31225
msgid "use -mcpu=arm700i"
msgstr "викориÑтовувати -mcpu=arm700i"
-#: config/tc-arm.c:31148 config/tc-arm.c:31149
+#: config/tc-arm.c:31226 config/tc-arm.c:31227
msgid "use -mcpu=arm710"
msgstr "викориÑтовувати -mcpu=arm710"
-#: config/tc-arm.c:31150 config/tc-arm.c:31151
+#: config/tc-arm.c:31228 config/tc-arm.c:31229
msgid "use -mcpu=arm710c"
msgstr "викориÑтовувати -mcpu=arm710c"
-#: config/tc-arm.c:31152 config/tc-arm.c:31153
+#: config/tc-arm.c:31230 config/tc-arm.c:31231
msgid "use -mcpu=arm720"
msgstr "викориÑтовувати -mcpu=arm720"
-#: config/tc-arm.c:31154 config/tc-arm.c:31155
+#: config/tc-arm.c:31232 config/tc-arm.c:31233
msgid "use -mcpu=arm7d"
msgstr "викориÑтовувати -mcpu=arm7d"
-#: config/tc-arm.c:31156 config/tc-arm.c:31157
+#: config/tc-arm.c:31234 config/tc-arm.c:31235
msgid "use -mcpu=arm7di"
msgstr "викориÑтовувати -mcpu=arm7di"
-#: config/tc-arm.c:31158 config/tc-arm.c:31159
+#: config/tc-arm.c:31236 config/tc-arm.c:31237
msgid "use -mcpu=arm7m"
msgstr "викориÑтовувати -mcpu=arm7m"
-#: config/tc-arm.c:31160 config/tc-arm.c:31161
+#: config/tc-arm.c:31238 config/tc-arm.c:31239
msgid "use -mcpu=arm7dm"
msgstr "викориÑтовувати -mcpu=arm7dm"
-#: config/tc-arm.c:31162 config/tc-arm.c:31163
+#: config/tc-arm.c:31240 config/tc-arm.c:31241
msgid "use -mcpu=arm7dmi"
msgstr "викориÑтовувати -mcpu=arm7dmi"
-#: config/tc-arm.c:31164 config/tc-arm.c:31165
+#: config/tc-arm.c:31242 config/tc-arm.c:31243
msgid "use -mcpu=arm7100"
msgstr "викориÑтовувати -mcpu=arm7100"
-#: config/tc-arm.c:31166 config/tc-arm.c:31167
+#: config/tc-arm.c:31244 config/tc-arm.c:31245
msgid "use -mcpu=arm7500"
msgstr "викориÑтовувати -mcpu=arm7500"
-#: config/tc-arm.c:31168 config/tc-arm.c:31169
+#: config/tc-arm.c:31246 config/tc-arm.c:31247
msgid "use -mcpu=arm7500fe"
msgstr "викориÑтовувати -mcpu=arm7500fe"
-#: config/tc-arm.c:31170 config/tc-arm.c:31171 config/tc-arm.c:31172
-#: config/tc-arm.c:31173
+#: config/tc-arm.c:31248 config/tc-arm.c:31249 config/tc-arm.c:31250
+#: config/tc-arm.c:31251
msgid "use -mcpu=arm7tdmi"
msgstr "викориÑтовувати -mcpu=arm7tdmi"
-#: config/tc-arm.c:31174 config/tc-arm.c:31175
+#: config/tc-arm.c:31252 config/tc-arm.c:31253
msgid "use -mcpu=arm710t"
msgstr "викориÑтовувати -mcpu=arm710t"
-#: config/tc-arm.c:31176 config/tc-arm.c:31177
+#: config/tc-arm.c:31254 config/tc-arm.c:31255
msgid "use -mcpu=arm720t"
msgstr "викориÑтовувати -mcpu=arm720t"
-#: config/tc-arm.c:31178 config/tc-arm.c:31179
+#: config/tc-arm.c:31256 config/tc-arm.c:31257
msgid "use -mcpu=arm740t"
msgstr "викориÑтовувати -mcpu=arm740t"
-#: config/tc-arm.c:31180 config/tc-arm.c:31181
+#: config/tc-arm.c:31258 config/tc-arm.c:31259
msgid "use -mcpu=arm8"
msgstr "викориÑтовувати -mcpu=arm8"
-#: config/tc-arm.c:31182 config/tc-arm.c:31183
+#: config/tc-arm.c:31260 config/tc-arm.c:31261
msgid "use -mcpu=arm810"
msgstr "викориÑтовувати -mcpu=arm810"
-#: config/tc-arm.c:31184 config/tc-arm.c:31185
+#: config/tc-arm.c:31262 config/tc-arm.c:31263
msgid "use -mcpu=arm9"
msgstr "викориÑтовувати -mcpu=arm9"
-#: config/tc-arm.c:31186 config/tc-arm.c:31187
+#: config/tc-arm.c:31264 config/tc-arm.c:31265
msgid "use -mcpu=arm9tdmi"
msgstr "викориÑтовувати -mcpu=arm9tdmi"
-#: config/tc-arm.c:31188 config/tc-arm.c:31189
+#: config/tc-arm.c:31266 config/tc-arm.c:31267
msgid "use -mcpu=arm920"
msgstr "викориÑтовувати -mcpu=arm920"
-#: config/tc-arm.c:31190 config/tc-arm.c:31191
+#: config/tc-arm.c:31268 config/tc-arm.c:31269
msgid "use -mcpu=arm940"
msgstr "викориÑтовувати -mcpu=arm940"
-#: config/tc-arm.c:31192
+#: config/tc-arm.c:31270
msgid "use -mcpu=strongarm"
msgstr "викориÑтовувати -mcpu=strongarm"
-#: config/tc-arm.c:31194
+#: config/tc-arm.c:31272
msgid "use -mcpu=strongarm110"
msgstr "викориÑтовувати -mcpu=strongarm110"
-#: config/tc-arm.c:31196
+#: config/tc-arm.c:31274
msgid "use -mcpu=strongarm1100"
msgstr "викориÑтовувати -mcpu=strongarm1100"
-#: config/tc-arm.c:31198
+#: config/tc-arm.c:31276
msgid "use -mcpu=strongarm1110"
msgstr "викориÑтовувати -mcpu=strongarm1110"
-#: config/tc-arm.c:31199
+#: config/tc-arm.c:31277
msgid "use -mcpu=xscale"
msgstr "викориÑтовувати -mcpu=xscale"
-#: config/tc-arm.c:31200
+#: config/tc-arm.c:31278
msgid "use -mcpu=iwmmxt"
msgstr "викориÑтовувати -mcpu=iwmmxt"
-#: config/tc-arm.c:31201
+#: config/tc-arm.c:31279
msgid "use -mcpu=all"
msgstr "викориÑтовувати -mcpu=all"
#. Architecture variants -- don't add any more to this list either.
-#: config/tc-arm.c:31204 config/tc-arm.c:31205
+#: config/tc-arm.c:31282 config/tc-arm.c:31283
msgid "use -march=armv2"
msgstr "викориÑтовувати -march=armv2"
-#: config/tc-arm.c:31206 config/tc-arm.c:31207
+#: config/tc-arm.c:31284 config/tc-arm.c:31285
msgid "use -march=armv2a"
msgstr "викориÑтовувати -march=armv2a"
-#: config/tc-arm.c:31208 config/tc-arm.c:31209
+#: config/tc-arm.c:31286 config/tc-arm.c:31287
msgid "use -march=armv3"
msgstr "викориÑтовувати -march=armv3"
-#: config/tc-arm.c:31210 config/tc-arm.c:31211
+#: config/tc-arm.c:31288 config/tc-arm.c:31289
msgid "use -march=armv3m"
msgstr "викориÑтовувати -march=armv3m"
-#: config/tc-arm.c:31212 config/tc-arm.c:31213
+#: config/tc-arm.c:31290 config/tc-arm.c:31291
msgid "use -march=armv4"
msgstr "викориÑтовувати -march=armv4"
-#: config/tc-arm.c:31214 config/tc-arm.c:31215
+#: config/tc-arm.c:31292 config/tc-arm.c:31293
msgid "use -march=armv4t"
msgstr "викориÑтовувати -march=armv4t"
-#: config/tc-arm.c:31216 config/tc-arm.c:31217
+#: config/tc-arm.c:31294 config/tc-arm.c:31295
msgid "use -march=armv5"
msgstr "викориÑтовувати -march=armv5"
-#: config/tc-arm.c:31218 config/tc-arm.c:31219
+#: config/tc-arm.c:31296 config/tc-arm.c:31297
msgid "use -march=armv5t"
msgstr "викориÑтовувати -march=armv5t"
-#: config/tc-arm.c:31220 config/tc-arm.c:31221
+#: config/tc-arm.c:31298 config/tc-arm.c:31299
msgid "use -march=armv5te"
msgstr "викориÑтовувати -march=armv5te"
#. Floating point variants -- don't add any more to this list either.
-#: config/tc-arm.c:31224
+#: config/tc-arm.c:31302
msgid "use -mfpu=fpe"
msgstr "викориÑтовувати -mfpu=fpe"
-#: config/tc-arm.c:31225
+#: config/tc-arm.c:31303
msgid "use -mfpu=fpa10"
msgstr "викориÑтовувати -mfpu=fpa10"
-#: config/tc-arm.c:31226
+#: config/tc-arm.c:31304
msgid "use -mfpu=fpa11"
msgstr "викориÑтовувати -mfpu=fpa11"
-#: config/tc-arm.c:31228
+#: config/tc-arm.c:31306
msgid "use either -mfpu=softfpa or -mfpu=softvfp"
msgstr "викориÑтовувати -mfpu=softfpa або -mfpu=softvfp"
-#: config/tc-arm.c:32312
+#: config/tc-arm.c:32427
msgid "extension does not apply to the base architecture"
msgstr "Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Ð½Ðµ заÑтоÑовне до базової архітектури"
-#: config/tc-arm.c:32341
+#: config/tc-arm.c:32456
msgid "architectural extensions must be specified in alphabetical order"
msgstr "архітектурні Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Ð¼Ð°Ñ” бути вказано у алфавітному порÑдку"
-#: config/tc-arm.c:32480 config/tc-arm.c:33423
+#: config/tc-arm.c:32595 config/tc-arm.c:33544
#, c-format
msgid "unknown floating point format `%s'\n"
msgstr "невідомий формат чиÑел з рухомою крапкою, «%s»\n"
-#: config/tc-arm.c:32496 config/tc-csky.c:1264
+#: config/tc-arm.c:32611 config/tc-csky.c:1264
#, c-format
msgid "unknown floating point abi `%s'\n"
msgstr "невідомий бінарний Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð´Ð»Ñ Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸ з чиÑлами з рухомою крапкою, «%s»\n"
-#: config/tc-arm.c:32512
+#: config/tc-arm.c:32627
#, c-format
msgid "unknown EABI `%s'\n"
msgstr "невідомий EABI, «%s»\n"
-#: config/tc-arm.c:32532
+#: config/tc-arm.c:32647
#, c-format
msgid "unknown implicit IT mode `%s', should be arm, thumb, always, or never."
msgstr "невідомий неÑвний режим IT «%s», режимом має бути arm, thumb, always або never."
-#: config/tc-arm.c:32555 config/tc-metag.c:5911
+#: config/tc-arm.c:32670 config/tc-metag.c:5911
msgid "<fpu name>\t assemble for FPU architecture <fpu name>"
msgstr "<назва fpu>\t зібрати Ð´Ð»Ñ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ FPU <назва fpu>"
-#: config/tc-arm.c:32557
+#: config/tc-arm.c:32672
msgid "<abi>\t assemble for floating point ABI <abi>"
msgstr "<abi>\t зібрати Ð´Ð»Ñ ABI чиÑел з рухомою комою <abi>"
-#: config/tc-arm.c:32560
+#: config/tc-arm.c:32675
msgid "<ver>\t\t assemble for eabi version <ver>"
msgstr "<верÑÑ–Ñ>\t\t зібрати Ð´Ð»Ñ Ð²ÐµÑ€ÑÑ–Ñ— eabi <верÑÑ–Ñ>"
-#: config/tc-arm.c:32563
+#: config/tc-arm.c:32678
msgid "<mode>\t controls implicit insertion of IT instructions"
msgstr "<режим>\t керує неÑвним вÑтавленнÑм інÑтрукцій IT"
-#: config/tc-arm.c:32565
+#: config/tc-arm.c:32680
msgid "\t\t\t TI CodeComposer Studio syntax compatibility mode"
msgstr "\t\t\t TI режим ÑуміÑноÑÑ‚Ñ– із ÑинтакÑиÑом CodeComposer Studio"
-#: config/tc-arm.c:32568
+#: config/tc-arm.c:32683
msgid ""
"[ieee|alternative]\n"
" set the encoding for half precision floating point numbers to IEEE\n"
@@ -5467,41 +5613,41 @@ msgstr ""
" вÑтановити ÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ IEEE Ð´Ð»Ñ Ñ‡Ð¸Ñел із рухомою крапкою та половинною точніÑÑ‚ÑŽ\n"
" або альтернативний формат ARM."
-#: config/tc-arm.c:32679
+#: config/tc-arm.c:32794
#, c-format
msgid " ARM-specific assembler options:\n"
msgstr " Параметри, Ñпецифічні Ð´Ð»Ñ Ð°Ñемблера ARM:\n"
-#: config/tc-arm.c:32699
+#: config/tc-arm.c:32814
#, c-format
msgid " --fix-v4bx Allow BX in ARMv4 code\n"
msgstr " --fix-v4bx дозволити BX у режимі ARMv4\n"
-#: config/tc-arm.c:32703
+#: config/tc-arm.c:32818
#, c-format
msgid " --fdpic generate an FDPIC object file\n"
msgstr " --fdpic Ñтворити об'єктний файл FDPIC\n"
-#: config/tc-arm.c:33011
+#: config/tc-arm.c:33132
msgid "no architecture contains all the instructions used\n"
msgstr "немає архітектури, що міÑтить уÑÑ– викориÑтані інÑтрукції\n"
-#: config/tc-arm.c:33363
+#: config/tc-arm.c:33484
#, c-format
msgid "architectural extension `%s' is not allowed for the current base architecture"
msgstr "архітектурне Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Â«%s» заборонено Ð´Ð»Ñ Ð¿Ð¾Ñ‚Ð¾Ñ‡Ð½Ð¾Ñ— базової архітектури"
-#: config/tc-arm.c:33386
+#: config/tc-arm.c:33507
#, c-format
msgid "unknown architecture extension `%s'\n"
msgstr "невідоме Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸, «%s»\n"
-#: config/tc-avr.c:593
+#: config/tc-avr.c:597
#, c-format
msgid "Known MCU names:"
msgstr "Відомі назви MCU:"
-#: config/tc-avr.c:658
+#: config/tc-avr.c:662
#, c-format
msgid ""
"AVR Assembler options:\n"
@@ -5550,7 +5696,7 @@ msgstr ""
" avrxmega7 - XMEGA, > 128 кБ, <= 256 кБ FLASH, > 64 кБ RAM\n"
" avrtiny - Ñдро AVR Tiny із 16 регіÑтрами\n"
-#: config/tc-avr.c:681
+#: config/tc-avr.c:685
#, c-format
msgid ""
" -mall-opcodes accept all AVR opcodes, even if not supported by MCU\n"
@@ -5562,6 +5708,8 @@ msgid ""
" -mlink-relax generate relocations for linker relaxation (default)\n"
" -mno-link-relax don't generate relocations for linker relaxation.\n"
" -mgcc-isr accept the __gcc_isr pseudo-instruction.\n"
+" -mno-dollar-line-separator\n"
+" do not treat the $ character as a line separator.\n"
msgstr ""
" -mall-opcodes прийнÑти уÑÑ– коди операцій AVR, навіть Ñкщо вони не підтримуютьÑÑ MCU\n"
" -mno-skip-bug вимкнути Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ пропуÑÐºÐ°Ð½Ð½Ñ Ð´Ð²Ð¾Ñлівних інÑтрукцій\n"
@@ -5572,204 +5720,206 @@ msgstr ""
" -mlink-relax Ñтворити переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ð¾Ð¿Ñ‚Ð¸Ð¼Ñ–Ð·Ð°Ñ†Ñ–Ð¹ компонувальника\n"
" -mno-link-relax не Ñтворювати переÑувань Ð´Ð»Ñ Ð¾Ð¿Ñ‚Ð¸Ð¼Ñ–Ð·Ð°Ñ†Ñ–Ñ— компонуваннÑ.\n"
" -mgcc-isr приймати пÑевдоінÑтрукцію __gcc_isr.\n"
+" -mno-dollar-line-separator\n"
+" не вважати Ñимвол $ роздільником Ñ€Ñдків.\n"
-#: config/tc-avr.c:720
+#: config/tc-avr.c:726
#, c-format
msgid "unknown MCU: %s\n"
msgstr "невідомий MCU: %s\n"
-#: config/tc-avr.c:734
+#: config/tc-avr.c:740
#, c-format
msgid "redefinition of mcu type `%s' to `%s'"
msgstr "Ð¿ÐµÑ€ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ‚Ð¸Ð¿Ñƒ mcu «%s» на «%s»"
-#: config/tc-avr.c:859
+#: config/tc-avr.c:869
msgid "constant value required"
msgstr "потрібне Ñтале значеннÑ"
-#: config/tc-avr.c:862
+#: config/tc-avr.c:872
#, c-format
msgid "number must be positive and less than %d"
msgstr "чиÑло має бути додатним або меншим за %d"
-#: config/tc-avr.c:888 config/tc-avr.c:1025
+#: config/tc-avr.c:898 config/tc-avr.c:1035
#, c-format
msgid "constant out of 8-bit range: %d"
msgstr "Ñтала поза межами 8-бітового діапазону: %d"
-#: config/tc-avr.c:956 config/tc-score.c:1198 read.c:3938
+#: config/tc-avr.c:966 config/tc-score.c:1198 read.c:4026
msgid "illegal expression"
msgstr "некоректний вираз"
-#: config/tc-avr.c:985 config/tc-avr.c:1995 config/tc-pru.c:1862
+#: config/tc-avr.c:995 config/tc-avr.c:2005 config/tc-pru.c:1861
msgid "`)' required"
msgstr "мало бути «)»"
-#: config/tc-avr.c:1095
+#: config/tc-avr.c:1105
msgid "register name or number from 16 to 31 required"
msgstr "мало бути вказано назву регіÑтра або номер від 16 до 31"
-#: config/tc-avr.c:1101
+#: config/tc-avr.c:1111
msgid "register name or number from 0 to 31 required"
msgstr "мало бути вказано назву регіÑтра або номер від 0 до 31"
-#: config/tc-avr.c:1109
+#: config/tc-avr.c:1119
msgid "register r16-r23 required"
msgstr "мало бути вказано регіÑтра у діапазоні r16-r23"
-#: config/tc-avr.c:1115
+#: config/tc-avr.c:1125
msgid "register number above 15 required"
msgstr "мало бути вказано номер регіÑтра, вищий за 15"
-#: config/tc-avr.c:1121 config/tc-csky.c:6394 config/tc-csky.c:6423
+#: config/tc-avr.c:1131 config/tc-csky.c:6395 config/tc-csky.c:6424
msgid "even register number required"
msgstr "мало бути вказано парний номер регіÑтра"
-#: config/tc-avr.c:1127
+#: config/tc-avr.c:1137
msgid "register r24, r26, r28 or r30 required"
msgstr "мало бути вказано регіÑÑ‚Ñ€ r24, r26, r28 або r30"
-#: config/tc-avr.c:1148
+#: config/tc-avr.c:1158
msgid "pointer register (X, Y or Z) required"
msgstr "Ñлід вказати регіÑÑ‚Ñ€ вказівника (X, Y або Z)"
-#: config/tc-avr.c:1155
+#: config/tc-avr.c:1165
msgid "cannot both predecrement and postincrement"
msgstr "не можна одночаÑно попередньо зменшувати Ñ– збільшувати опіÑлÑ"
-#: config/tc-avr.c:1163
+#: config/tc-avr.c:1173
msgid "addressing mode not supported"
msgstr "підтримки режиму адреÑÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ðµ передбачено"
-#: config/tc-avr.c:1169
+#: config/tc-avr.c:1179
msgid "can't predecrement"
msgstr "не можна викориÑтовувати попереднє зменшеннÑ"
-#: config/tc-avr.c:1172
+#: config/tc-avr.c:1182
msgid "pointer register Z required"
msgstr "мало бути вказано регіÑÑ‚Ñ€ вказівника Z"
-#: config/tc-avr.c:1191
+#: config/tc-avr.c:1201
msgid "postincrement not supported"
msgstr "підтримки поÑÑ‚Ð·Ð±Ñ–Ð»ÑŒÑˆÐµÐ½Ð½Ñ Ð½Ðµ передбачено"
-#: config/tc-avr.c:1201
+#: config/tc-avr.c:1211
msgid "pointer register (Y or Z) required"
msgstr "Ñлід вказати регіÑÑ‚Ñ€ вказівника (Y або Z)"
-#: config/tc-avr.c:1323 config/tc-xgate.c:1352
+#: config/tc-avr.c:1333 config/tc-xgate.c:1352
#, c-format
msgid "unknown constraint `%c'"
msgstr "невідоме Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Â«%c»"
-#: config/tc-avr.c:1386 config/tc-avr.c:2677
+#: config/tc-avr.c:1396 config/tc-avr.c:2687
msgid "`,' required"
msgstr "мало бути «,»"
-#: config/tc-avr.c:1407
+#: config/tc-avr.c:1417
msgid "undefined combination of operands"
msgstr "невизначене Ð¿Ð¾Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð¾Ð¿ÐµÑ€Ð°Ð½Ð´Ñ–Ð²"
-#: config/tc-avr.c:1416
+#: config/tc-avr.c:1426
msgid "skipping two-word instruction"
msgstr "пропуÑкаємо двоÑлівну інÑтрукцію"
-#: config/tc-avr.c:1604 config/tc-avr.c:1620 config/tc-avr.c:1751
+#: config/tc-avr.c:1614 config/tc-avr.c:1630 config/tc-avr.c:1761
#: config/tc-msp430.c:4498 config/tc-msp430.c:4517
#, c-format
msgid "odd address operand: %ld"
msgstr "дивний операнд адреÑи: %ld"
-#: config/tc-avr.c:1612 config/tc-avr.c:1631 config/tc-avr.c:1649
-#: config/tc-avr.c:1660 config/tc-avr.c:1676 config/tc-avr.c:1684
-#: config/tc-avr.c:1779 config/tc-avr.c:1786 config/tc-d10v.c:503
+#: config/tc-avr.c:1622 config/tc-avr.c:1641 config/tc-avr.c:1659
+#: config/tc-avr.c:1670 config/tc-avr.c:1686 config/tc-avr.c:1694
+#: config/tc-avr.c:1789 config/tc-avr.c:1796 config/tc-d10v.c:503
#: config/tc-d30v.c:550 config/tc-msp430.c:4506 config/tc-msp430.c:4524
#, c-format
msgid "operand out of range: %ld"
msgstr "операнд поза межами припуÑтимого діапазону: %ld"
-#: config/tc-avr.c:1667
+#: config/tc-avr.c:1677
#, c-format
msgid "operand out of range: 0x%lx"
msgstr "операнд поза межами припуÑтимого діапазону: 0x%lx"
-#: config/tc-avr.c:1772 config/tc-d10v.c:1592 config/tc-d30v.c:2011
+#: config/tc-avr.c:1782 config/tc-d10v.c:1592 config/tc-d30v.c:2011
#: config/tc-msp430.c:4595
#, c-format
msgid "line %d: unknown relocation type: 0x%x"
msgstr "Ñ€Ñдок %d: невідомий тип переÑуваннÑ: 0x%x"
-#: config/tc-avr.c:1800
+#: config/tc-avr.c:1810
msgid "only constant expression allowed"
msgstr "можна викориÑтовувати лише Ñталий вираз"
#. xgettext:c-format.
-#: config/tc-avr.c:1855 config/tc-bfin.c:824 config/tc-d10v.c:1461
-#: config/tc-d30v.c:1768 config/tc-metag.c:7016 config/tc-mn10200.c:779
-#: config/tc-mn10300.c:2177 config/tc-msp430.c:4643 config/tc-ppc.c:7473
-#: config/tc-ppc.c:7494 config/tc-spu.c:882 config/tc-spu.c:1093
-#: config/tc-v850.c:3367 config/tc-z80.c:3869
+#: config/tc-avr.c:1865 config/tc-bfin.c:824 config/tc-d10v.c:1461
+#: config/tc-d30v.c:1768 config/tc-metag.c:7016 config/tc-mn10200.c:772
+#: config/tc-mn10300.c:2177 config/tc-msp430.c:4643 config/tc-ppc.c:7746
+#: config/tc-spu.c:877 config/tc-spu.c:1090 config/tc-v850.c:3364
+#: config/tc-z80.c:3869
#, c-format
msgid "reloc %d not supported by object file format"
msgstr "підтримки переÑÑƒÐ²Ð°Ð½Ð½Ñ %d не передбачено форматом об’єктного файла"
-#: config/tc-avr.c:1877 config/tc-ft32.c:232 config/tc-h8300.c:1929
+#: config/tc-avr.c:1887 config/tc-ft32.c:232 config/tc-h8300.c:1929
#: config/tc-mcore.c:881 config/tc-microblaze.c:941 config/tc-moxie.c:180
#: config/tc-pj.c:253 config/tc-sh.c:2197 config/tc-wasm32.c:747
#: config/tc-z8k.c:1233
msgid "can't find opcode "
msgstr "не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ код операції "
-#: config/tc-avr.c:1896
+#: config/tc-avr.c:1906
#, c-format
msgid "illegal opcode %s for mcu %s"
msgstr "некоректний код операції %s Ð´Ð»Ñ mcu %s"
-#: config/tc-avr.c:1912
+#: config/tc-avr.c:1922
#, c-format
msgid "pseudo instruction `%s' not supported"
msgstr "підтримки пÑевдоінÑтрукції «%s» не передбачено"
-#: config/tc-avr.c:1934
+#: config/tc-avr.c:1944
msgid "garbage at end of line"
msgstr "зайві дані наприкінці Ñ€Ñдка"
-#: config/tc-avr.c:2044 config/tc-pru.c:1894
+#: config/tc-avr.c:2054 config/tc-pru.c:1893
#, c-format
msgid "illegal %s relocation size: %d"
msgstr "некоректний розмір переÑÑƒÐ²Ð°Ð½Ð½Ñ %s: %d"
-#: config/tc-avr.c:2157 config/tc-avr.c:2212
+#: config/tc-avr.c:2167 config/tc-avr.c:2222
#, c-format
msgid "unknown record type %d (in %s)"
msgstr "невідомий тип запиÑу %d (у %s)"
-#: config/tc-avr.c:2233
+#: config/tc-avr.c:2243
#, c-format
msgid "Failed to create property section `%s'\n"
msgstr "Ðе вдалоÑÑ Ñтворити розділ влаÑтивоÑтей «%s»\n"
-#: config/tc-avr.c:2669
+#: config/tc-avr.c:2679
#, c-format
msgid "%s requires value 0-2 as operand 1"
msgstr "%s потребує Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ 0-2 Ñк першого операнда"
-#: config/tc-avr.c:2694
+#: config/tc-avr.c:2704
#, c-format
msgid "`%s %d' after `%s %d' from %s:%u"
msgstr "«%s %d» піÑÐ»Ñ Â«%s %d» з %s:%u"
-#: config/tc-avr.c:2697
+#: config/tc-avr.c:2707
#, c-format
msgid "`%s %d' but no chunk open yet"
msgstr "«%s %d», але фрагмент ще не відкрито"
-#: config/tc-avr.c:2785
+#: config/tc-avr.c:2795
#, c-format
msgid "dangling `__gcc_isr %d'"
msgstr "зайвий «__gcc_isr %d»"
-#: config/tc-avr.c:2787
+#: config/tc-avr.c:2797
msgid "dangling `__gcc_isr'"
msgstr "зайвий «__gcc_isr»"
@@ -5889,189 +6039,189 @@ msgstr "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð¾Ð»Ñ Â«%s» Ñ” надто Ñкладним Ð´Ð»Ñ Ð
msgid "Unknown register pair - index relative mode: `%d'"
msgstr "Ðевідома пара регіÑтрів - режим відноÑного індекÑуваннÑ: «%d»"
-#: config/tc-cr16.c:607 config/tc-crx.c:337
+#: config/tc-cr16.c:603 config/tc-crx.c:333
#, c-format
msgid "internal error: reloc %d (`%s') not supported by object file format"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: підтримки переÑÑƒÐ²Ð°Ð½Ð½Ñ %d («%s») не передбачено форматом об’єктного файла"
-#: config/tc-cr16.c:700 config/tc-i386.c:14007 config/tc-s390.c:2113
+#: config/tc-cr16.c:696 config/tc-i386.c:14126 config/tc-s390.c:2113
msgid "GOT already in symbol table"
msgstr "GOT вже Ñ” у таблиці Ñимволів"
#. Missing or bad expr becomes absolute 0.
-#: config/tc-cr16.c:884 config/tc-crx.c:574
+#: config/tc-cr16.c:880 config/tc-crx.c:570
#, c-format
msgid "missing or invalid displacement expression `%s' taken as 0"
msgstr "пропущений або некоректний вираз Ð¿ÐµÑ€ÐµÐ¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Â«%s», вважаємо вираз нульовим"
-#: config/tc-cr16.c:934
+#: config/tc-cr16.c:930
#, c-format
msgid "GOT bad expression with %s."
msgstr "GOT, помилковий вираз з %s."
-#: config/tc-cr16.c:1045
+#: config/tc-cr16.c:1041
#, c-format
msgid "operand %d: illegal use expression: `%s`"
msgstr "операнд %d: некоректне викориÑÑ‚Ð°Ð½Ð½Ñ Ð²Ð¸Ñ€Ð°Ð·Ñƒ: «%s»"
-#: config/tc-cr16.c:1110 config/tc-crx.c:1084
+#: config/tc-cr16.c:1106 config/tc-crx.c:1080
#, c-format
msgid "Unknown register: `%d'"
msgstr "Ðевідомий регіÑÑ‚Ñ€: «%d»"
#. Issue a error message when register is illegal.
-#: config/tc-cr16.c:1118
+#: config/tc-cr16.c:1114
#, c-format
msgid "Illegal register (`%s') in Instruction: `%s'"
msgstr "Ðекоректний регіÑÑ‚Ñ€ («%s») у інÑтрукції: «%s»"
-#: config/tc-cr16.c:1192 config/tc-cr16.c:1267
+#: config/tc-cr16.c:1188 config/tc-cr16.c:1263
#, c-format
msgid "Illegal register `%s' in Instruction `%s'"
msgstr "Ðекоректний регіÑÑ‚Ñ€ «%s» у інÑтрукції «%s»"
-#: config/tc-cr16.c:1220 config/tc-cr16.c:1231
+#: config/tc-cr16.c:1216 config/tc-cr16.c:1227
#, c-format
msgid "Illegal register pair `%s' in Instruction `%s'"
msgstr "Ðекоректна пара регіÑтрів, «%s», у інÑтрукції «%s»"
-#: config/tc-cr16.c:1256
+#: config/tc-cr16.c:1252
msgid "unmatched '['"
msgstr "неврівноважена «[»"
-#: config/tc-cr16.c:1262
+#: config/tc-cr16.c:1258
msgid "garbage after index spec ignored"
msgstr "зайві дані піÑÐ»Ñ Ñпецифікації індекÑу проігноровано"
-#: config/tc-cr16.c:1410 config/tc-crx.c:893
+#: config/tc-cr16.c:1406 config/tc-crx.c:889
#, c-format
msgid "Illegal operands (whitespace): `%s'"
msgstr "Ðекоректні операнди (пробіл): «%s»"
-#: config/tc-cr16.c:1422 config/tc-cr16.c:1429 config/tc-cr16.c:1446
-#: config/tc-crx.c:905 config/tc-crx.c:912 config/tc-crx.c:929
-#: config/tc-crx.c:1720
+#: config/tc-cr16.c:1418 config/tc-cr16.c:1425 config/tc-cr16.c:1442
+#: config/tc-crx.c:901 config/tc-crx.c:908 config/tc-crx.c:925
+#: config/tc-crx.c:1716
#, c-format
msgid "Missing matching brackets : `%s'"
msgstr "Ðе виÑтачає відповідних дужок: «%s»"
-#: config/tc-cr16.c:1478 config/tc-crx.c:955
+#: config/tc-cr16.c:1474 config/tc-crx.c:951
#, c-format
msgid "Unknown exception: `%s'"
msgstr "Ðевідоме виключеннÑ: «%s»"
-#: config/tc-cr16.c:1560 config/tc-crx.c:1051
+#: config/tc-cr16.c:1556 config/tc-crx.c:1047
#, c-format
msgid "Illegal `cinv' parameter: `%c'"
msgstr "Ðекоректний параметр «cinv»: «%c»"
-#: config/tc-cr16.c:1581 config/tc-cr16.c:1620
+#: config/tc-cr16.c:1577 config/tc-cr16.c:1616
#, c-format
msgid "Unknown register pair: `%d'"
msgstr "Ðевідома пара регіÑтрів: «%d»"
#. Issue a error message when register pair is illegal.
-#: config/tc-cr16.c:1589
+#: config/tc-cr16.c:1585
#, c-format
msgid "Illegal register pair (`%s') in Instruction: `%s'"
msgstr "Ðекоректна пара регіÑтрів («%s») у інÑтрукції: «%s»"
#. Issue a error message when register pair is illegal.
-#: config/tc-cr16.c:1628
+#: config/tc-cr16.c:1624
#, c-format
msgid "Illegal index register pair (`%s') in Instruction: `%s'"
msgstr "Ðекоректна пара регіÑтрів індекÑÑƒÐ²Ð°Ð½Ð½Ñ («%s») у інÑтрукції: «%s»"
-#: config/tc-cr16.c:1667
+#: config/tc-cr16.c:1663
#, c-format
msgid "Unknown processor register : `%d'"
msgstr "Ðевідомий регіÑÑ‚Ñ€ процеÑора: «%d»"
#. Issue a error message when register pair is illegal.
-#: config/tc-cr16.c:1675
+#: config/tc-cr16.c:1671
#, c-format
msgid "Illegal processor register (`%s') in Instruction: `%s'"
msgstr "Ðекоректний регіÑÑ‚Ñ€ процеÑора («%s») у інÑтрукції: «%s»"
-#: config/tc-cr16.c:1723
+#: config/tc-cr16.c:1719
#, c-format
msgid "Unknown processor register (32 bit) : `%d'"
msgstr "Ðевідомий регіÑÑ‚Ñ€ процеÑора (32-бітовий): «%d»"
#. Issue a error message when register pair is illegal.
-#: config/tc-cr16.c:1731
+#: config/tc-cr16.c:1727
#, c-format
msgid "Illegal 32 bit - processor register (`%s') in Instruction: `%s'"
msgstr "Ðекоректний регіÑÑ‚Ñ€ 32-бітового процеÑора («%s») у інÑтрукції: «%s»"
-#: config/tc-cr16.c:2076 config/tc-crx.c:1618 config/tc-crx.c:1635
+#: config/tc-cr16.c:2072 config/tc-crx.c:1614 config/tc-crx.c:1631
#, c-format
msgid "Same src/dest register is used (`r%d'), result is undefined"
msgstr "ВикориÑтано той Ñамий регіÑÑ‚Ñ€ Ð´Ð»Ñ Ð´Ð¶ÐµÑ€ÐµÐ»Ð° Ñ– Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ («r%d»), результат Ñ” невизначеним"
-#: config/tc-cr16.c:2098
+#: config/tc-cr16.c:2094
msgid "RA register is saved twice."
msgstr "РегіÑÑ‚Ñ€ RA збережено двічі."
-#: config/tc-cr16.c:2102
+#: config/tc-cr16.c:2098
#, c-format
msgid "`%s' Illegal use of registers."
msgstr "«%s» Ðекоректне викориÑÑ‚Ð°Ð½Ð½Ñ Ñ€ÐµÐ³Ñ–Ñтрів."
-#: config/tc-cr16.c:2116
+#: config/tc-cr16.c:2112
#, c-format
msgid "`%s' Illegal count-register combination."
msgstr "«%s»: некоректна Ð¿Ð¾Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð»Ñ–Ñ‡Ð¸Ð»ÑŒÐ½Ð¸ÐºÐ° Ñ– регіÑтра."
-#: config/tc-cr16.c:2122
+#: config/tc-cr16.c:2118
#, c-format
msgid "`%s' Illegal use of register."
msgstr "«%s» Ðекоректне викориÑÑ‚Ð°Ð½Ð½Ñ Ñ€ÐµÐ³Ñ–Ñтра."
-#: config/tc-cr16.c:2131 config/tc-crx.c:1627
+#: config/tc-cr16.c:2127 config/tc-crx.c:1623
#, c-format
msgid "`%s' has undefined result"
msgstr "«%s» має невизначений результат"
-#: config/tc-cr16.c:2139
+#: config/tc-cr16.c:2135
#, c-format
msgid "Same src/dest register is used (`r%d'),result is undefined"
msgstr "ВикориÑтано той Ñамий регіÑÑ‚Ñ€ Ð´Ð»Ñ Ð´Ð¶ÐµÑ€ÐµÐ»Ð° Ñ– Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ («r%d»), результат Ñ” невизначеним"
-#: config/tc-cr16.c:2310 config/tc-crx.c:1533
+#: config/tc-cr16.c:2306 config/tc-crx.c:1529
msgid "Incorrect number of operands"
msgstr "Ðекоректна кількіÑÑ‚ÑŒ операндів"
-#: config/tc-cr16.c:2312 config/tc-crx.c:1535
+#: config/tc-cr16.c:2308 config/tc-crx.c:1531
#, c-format
msgid "Illegal type of operand (arg %d)"
msgstr "Ðекоректний тип операнда (аргумент %d)"
-#: config/tc-cr16.c:2318 config/tc-crx.c:1541
+#: config/tc-cr16.c:2314 config/tc-crx.c:1537
#, c-format
msgid "Operand out of range (arg %d)"
msgstr "Операнд поза діапазоном (аргумент %d)"
-#: config/tc-cr16.c:2321 config/tc-crx.c:1544
+#: config/tc-cr16.c:2317 config/tc-crx.c:1540
#, c-format
msgid "Operand has odd displacement (arg %d)"
msgstr "ÐŸÐµÑ€ÐµÐ¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð¾Ð¿ÐµÑ€Ð°Ð½Ð´Ð° Ñ” непарним (аргумент %d)"
-#: config/tc-cr16.c:2324 config/tc-cr16.c:2355 config/tc-crx.c:1559
-#: config/tc-crx.c:1587
+#: config/tc-cr16.c:2320 config/tc-cr16.c:2351 config/tc-crx.c:1555
+#: config/tc-crx.c:1583
#, c-format
msgid "Illegal operand (arg %d)"
msgstr "Ðекоректний операнд (аргумент %d)"
#. Give an error if a frag containing code is not aligned to a 2-byte
#. boundary.
-#: config/tc-cr16.c:2457 config/tc-cr16.h:74 config/tc-crx.c:1909
+#: config/tc-cr16.c:2453 config/tc-cr16.h:74 config/tc-crx.c:1905
#: config/tc-crx.h:77
msgid "instruction address is not a multiple of 2"
msgstr "адреÑа інÑтрукції не Ñ” кратною до 2"
-#: config/tc-cr16.c:2480 config/tc-cris.c:1550 config/tc-cris.c:1558
-#: config/tc-crx.c:1945 config/tc-dlx.c:680 config/tc-hppa.c:3212
+#: config/tc-cr16.c:2476 config/tc-cris.c:1550 config/tc-cris.c:1558
+#: config/tc-crx.c:1941 config/tc-dlx.c:680 config/tc-hppa.c:3212
#: config/tc-hppa.c:3219 config/tc-sparc.c:1749 config/tc-sparc.c:1757
#, c-format
msgid "Unknown opcode: `%s'"
@@ -6289,11 +6439,11 @@ msgstr "--pic Ñ” некоректним Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ формату об’
msgid "invalid <arch> in --march=<arch>: %s"
msgstr "некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ <архітектура> у --march=<архітектура>: %s"
-#: config/tc-cris.c:3952 config/tc-ft32.c:689 config/tc-moxie.c:776
+#: config/tc-cris.c:3952 config/tc-ft32.c:688 config/tc-moxie.c:776
msgid "Semantics error. This type of operand can not be relocated, it must be an assembly-time constant"
msgstr "Семантична помилка. Цей тип операнда не можна переÑувати, він має бути Ñталою, що викориÑтовуєтьÑÑ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ"
-#: config/tc-cris.c:4001 config/tc-ft32.c:710 config/tc-moxie.c:824
+#: config/tc-cris.c:4001 config/tc-ft32.c:709 config/tc-moxie.c:824
#, c-format
msgid "Cannot generate relocation type for symbol %s, code %s"
msgstr "Ðе вдалоÑÑ Ñтворити тип переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ñимволу %s, код %s"
@@ -6340,142 +6490,142 @@ msgstr ""
" --march=<арх>\t\tСтворити код Ð´Ð»Ñ <арх>. Можливі варіанти <арх>:\n"
"\t\t\t\tv0_v10, v10, v32 та common_v10_v32.\n"
-#: config/tc-cris.c:4082
+#: config/tc-cris.c:4081
msgid "Invalid pc-relative relocation"
msgstr "Ðекоректне переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ñ–Ð´Ð½Ð¾Ñно PC"
-#: config/tc-cris.c:4127
+#: config/tc-cris.c:4126
#, c-format
msgid "Adjusted signed .word (%ld) overflows: `switch'-statement too large."
msgstr "ÐŸÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ñкоригованого .word (%ld) зі знаком: інÑÑ‚Ñ€ÑƒÐºÑ†Ñ–Ñ Â«switch» Ñ” надто великою."
-#: config/tc-cris.c:4157
+#: config/tc-cris.c:4156
#, c-format
msgid ".syntax %s requires command-line option `--underscore'"
msgstr ".syntax %s потребує параметра командного Ñ€Ñдка «--underscore»"
-#: config/tc-cris.c:4166
+#: config/tc-cris.c:4165
#, c-format
msgid ".syntax %s requires command-line option `--no-underscore'"
msgstr ".syntax %s потребує параметра командного Ñ€Ñдка «--no-underscore»"
-#: config/tc-cris.c:4203
+#: config/tc-cris.c:4202
msgid "Unknown .syntax operand"
msgstr "Ðевідомий операнд .syntax"
-#: config/tc-cris.c:4213
+#: config/tc-cris.c:4212
msgid "Pseudodirective .file is only valid when generating ELF"
msgstr "ПÑевдодиректива .file Ñ” чинною лише під Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ ELF"
-#: config/tc-cris.c:4225
+#: config/tc-cris.c:4224
msgid "Pseudodirective .loc is only valid when generating ELF"
msgstr "ПÑевдодиректива .loc Ñ” чинною лише під Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ ELF"
-#: config/tc-cris.c:4240
+#: config/tc-cris.c:4239
#, c-format
msgid "internal inconsistency problem: %s called for %d bytes"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð° неÑуміÑноÑÑ‚Ñ–: %s викликано Ð´Ð»Ñ %d байтів"
-#: config/tc-cris.c:4392
+#: config/tc-cris.c:4391
msgid "unknown operand to .arch"
msgstr "невідомий операнд .arch"
-#: config/tc-cris.c:4401
+#: config/tc-cris.c:4400
msgid ".arch <arch> requires a matching --march=... option"
msgstr "Ð´Ð»Ñ .arch <арх> потрібен відповідний параметр --march=..."
-#: config/tc-crx.c:714 config/tc-crx.c:734 config/tc-crx.c:749
+#: config/tc-crx.c:710 config/tc-crx.c:730 config/tc-crx.c:745
#, c-format
msgid "Illegal register `%s' in instruction `%s'"
msgstr "Ðекоректний регіÑÑ‚Ñ€ («%s») у інÑтрукції: «%s»"
-#: config/tc-crx.c:777
+#: config/tc-crx.c:773
#, c-format
msgid "Illegal Scale - `%d'"
msgstr "Ðекоректний маÑштаб - «%d»"
#. Issue a error message when register is illegal.
-#: config/tc-crx.c:1092
+#: config/tc-crx.c:1088
#, c-format
msgid "Illegal register (`%s') in instruction: `%s'"
msgstr "Ðекоректний регіÑÑ‚Ñ€ («%s») у інÑтрукції: «%s»"
-#: config/tc-crx.c:1221
+#: config/tc-crx.c:1217
#, c-format
msgid "Illegal co-processor register in instruction `%s'"
msgstr "Ðекоректний регіÑÑ‚Ñ€ ÑпівпроцеÑора у інÑтрукції «%s» "
-#: config/tc-crx.c:1228
+#: config/tc-crx.c:1224
#, c-format
msgid "Illegal co-processor special register in instruction `%s'"
msgstr "Ðекоректний Ñпеціальний регіÑÑ‚Ñ€ ÑпівпроцеÑора у інÑтрукції «%s»"
-#: config/tc-crx.c:1548
+#: config/tc-crx.c:1544
#, c-format
msgid "Invalid DISPU4 operand value (arg %d)"
msgstr "Ðекоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¾Ð¿ÐµÑ€Ð°Ð½Ð´Ð° DISPU4 (аргумент %d)"
-#: config/tc-crx.c:1552
+#: config/tc-crx.c:1548
#, c-format
msgid "Invalid CST4 operand value (arg %d)"
msgstr "Ðекоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¾Ð¿ÐµÑ€Ð°Ð½Ð´Ð° CST4 (аргумент %d)"
-#: config/tc-crx.c:1555
+#: config/tc-crx.c:1551
#, c-format
msgid "Operand value is not within upper 64 KB (arg %d)"
msgstr "Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¾Ð¿ÐµÑ€Ð°Ð½Ð´Ð° не перебуває у верхніх 64 кБ (аргумент %d)"
-#: config/tc-crx.c:1689
+#: config/tc-crx.c:1685
msgid "Invalid register in register list"
msgstr "Ðекоректний регіÑÑ‚Ñ€ у ÑпиÑку регіÑтрів"
-#: config/tc-crx.c:1743
+#: config/tc-crx.c:1739
#, c-format
msgid "Illegal register `%s' in cop-register list"
msgstr "Ðекоректний регіÑÑ‚Ñ€ «%s» у ÑпиÑку регіÑтрів ÑпівпроцеÑора"
-#: config/tc-crx.c:1751
+#: config/tc-crx.c:1747
#, c-format
msgid "Illegal register `%s' in cop-special-register list"
msgstr "Ðекоректний регіÑÑ‚Ñ€ «%s» у ÑпиÑку Ñпеціальних регіÑтрів ÑпівпроцеÑора"
-#: config/tc-crx.c:1770
+#: config/tc-crx.c:1766
#, c-format
msgid "Illegal register `%s' in user register list"
msgstr "Ðекоректний регіÑÑ‚Ñ€ «%s» у ÑпиÑку регіÑтрів кориÑтувача"
-#: config/tc-crx.c:1789
+#: config/tc-crx.c:1785
#, c-format
msgid "Illegal register `%s' in register list"
msgstr "Ðекоректний регіÑÑ‚Ñ€ «%s» у ÑпиÑку регіÑтрів"
-#: config/tc-crx.c:1795
+#: config/tc-crx.c:1791
#, c-format
msgid "Maximum %d bits may be set in `mask16' operand"
msgstr "У операнді «mask16» може бути вÑтановлено не більше %d бітів"
-#: config/tc-crx.c:1804
+#: config/tc-crx.c:1800
#, c-format
msgid "rest of line ignored; first ignored character is `%c'"
msgstr "решту Ñ€Ñдка проігноровано; першим проігнорованим Ñимволом Ñ” «%c»"
-#: config/tc-crx.c:1812
+#: config/tc-crx.c:1808
#, c-format
msgid "Illegal `mask16' operand, operation is undefined - `%s'"
msgstr "Ðекоректний операнд «mask16», операцію не визначено - «%s»"
#. HI can't be specified without LO (and vise-versa).
-#: config/tc-crx.c:1818
+#: config/tc-crx.c:1814
msgid "HI/LO registers should be specified together"
msgstr "регіÑтри HI/LO має бути вказано разом"
-#: config/tc-crx.c:1824
+#: config/tc-crx.c:1820
msgid "HI/LO registers should be specified without additional registers"
msgstr "регіÑтри HI/LO має бути вказано разом без додаткових регіÑтрів"
#. Variable not in small data read only segment accessed
#. using small data read only anchor.
-#: config/tc-csky.c:1149 config/tc-mcore.c:1924 config/tc-microblaze.c:1999
+#: config/tc-csky.c:1149 config/tc-mcore.c:1927 config/tc-microblaze.c:1999
#: config/tc-microblaze.c:2301 config/tc-microblaze.c:2324
msgid "unknown"
msgstr "невідома"
@@ -6675,7 +6825,7 @@ msgstr "-mljump ігноруєтьÑÑ Ð´Ð»Ñ ck801/ck802"
msgid "more than 65K literal pools"
msgstr "маємо понад 65 тиÑÑч буферів літералів"
-#: config/tc-csky.c:2320 read.c:3655
+#: config/tc-csky.c:2320 read.c:3740
#, c-format
msgid "bad floating literal: %s"
msgstr "помилковий літерал з рухомою крапкою: %s"
@@ -6698,35 +6848,35 @@ msgstr "перетворюємо mgeni на movi"
msgid "unsupported BFD relocation size %d"
msgstr "непідтримуваний розмір переÑÑƒÐ²Ð°Ð½Ð½Ñ BFD, %d"
-#: config/tc-csky.c:5901
+#: config/tc-csky.c:5902
msgid "second operand must be 4"
msgstr "другим оператором має бути 4"
-#: config/tc-csky.c:5925 config/tc-mcore.c:1527
+#: config/tc-csky.c:5926 config/tc-mcore.c:1527
msgid "second operand must be 1"
msgstr "другим оператором має бути 1"
-#: config/tc-csky.c:5998 config/tc-xtensa.c:2002
+#: config/tc-csky.c:5999 config/tc-xtensa.c:2002
msgid "register number out of range"
msgstr "номер регіÑтра поза припуÑтимим діапазоном"
-#: config/tc-csky.c:6008
+#: config/tc-csky.c:6009
msgid "64-bit operator src/dst register must be less than 15"
msgstr "Ðомер 64-бітового регіÑтра оператора джерела/Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¼Ð°Ñ” бути меншим 15"
-#: config/tc-csky.c:7835
+#: config/tc-csky.c:7836
msgid "the first operand must be a symbol"
msgstr "першим операндом має бути Ñимвол"
-#: config/tc-csky.c:7844
+#: config/tc-csky.c:7845
msgid "missing stack size"
msgstr "не вказано розмір Ñтека"
-#: config/tc-csky.c:7857 config/tc-score.c:4244
+#: config/tc-csky.c:7858 config/tc-score.c:4244
msgid "value not in range [0, 0xffffffff]"
msgstr "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð½Ðµ належить до діапазону [0, 0xffffffff]"
-#: config/tc-csky.c:7867 config/tc-mcore.c:782
+#: config/tc-csky.c:7868 config/tc-mcore.c:782
msgid "operand must be a constant"
msgstr "операнд має бути Ñталою"
@@ -7027,7 +7177,7 @@ msgstr "Помилка у виразі Ð´Ð»Ñ Ð¼Ð¾Ð´Ð¸Ñ„Ñ–ÐºÐ°Ñ‚Ð¾Ñ€Ð° оперÐ
msgid "Invalid expression after %%%%\n"
msgstr "Ðекоректний вираз піÑÐ»Ñ %%%%\n"
-#: config/tc-dlx.c:691 config/tc-tic4x.c:2452
+#: config/tc-dlx.c:691 config/tc-tic4x.c:2454
#, c-format
msgid "Unknown opcode `%s'."
msgstr "Ðевідомий код операції «%s»."
@@ -7073,7 +7223,7 @@ msgstr "мітку «$%d» перевизначено"
msgid "Invalid expression after # number\n"
msgstr "Ðекоректний вираз піÑÐ»Ñ Â«# чиÑло»\n"
-#: config/tc-dlx.c:1177 config/tc-m32r.c:2275 config/tc-nds32.c:7881
+#: config/tc-dlx.c:1177 config/tc-m32r.c:2275 config/tc-nds32.c:7841
#: config/tc-sparc.c:4011
#, c-format
msgid "internal error: can't export reloc type %d (`%s')"
@@ -7503,7 +7653,7 @@ msgstr " -h-tick-hex підтримувати шіÑтнадцÑÑ‚
msgid "call to tc_aout_fix_to_chars \n"
msgstr "виклик tc_aout_fix_to_chars \n"
-#: config/tc-h8300.c:2220 config/tc-xc16x.c:349
+#: config/tc-h8300.c:2220 config/tc-xc16x.c:348
#, c-format
msgid "call to md_convert_frag \n"
msgstr "виклик md_convert_frag \n"
@@ -7517,13 +7667,9 @@ msgstr "виклик md_estimate_size_before_relax \n"
msgid "Unexpected reference to a symbol in a non-code section"
msgstr "Ðеочікуване поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° Ñимвол у розділі, Ñкий не призначено Ð´Ð»Ñ ÐºÐ¾Ð´Ñƒ"
-#: config/tc-h8300.c:2302 config/tc-xc16x.c:292
-msgid "Difference of symbols in different sections is not supported"
-msgstr "Підтримки Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ€Ñ–Ð·Ð½Ð¸Ñ… Ñимволів Ð´Ð»Ñ Ñ€Ñ–Ð·Ð½Ð¸Ñ… розділів не передбачено"
-
-#: config/tc-h8300.c:2324 config/tc-mcore.c:2205 config/tc-microblaze.c:2494
+#: config/tc-h8300.c:2323 config/tc-mcore.c:2208 config/tc-microblaze.c:2494
#: config/tc-pj.c:488 config/tc-sh.c:3901 config/tc-tic6x.c:4514
-#: config/tc-xc16x.c:315
+#: config/tc-xc16x.c:314
#, c-format
msgid "Cannot represent relocation type %s"
msgstr "Ðе вдалоÑÑ Ð¿Ñ€ÐµÐ´Ñтавити тип переÑÑƒÐ²Ð°Ð½Ð½Ñ %s"
@@ -7943,868 +8089,884 @@ msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: код операції з втрат
msgid "Broken assembler. No assembly attempted."
msgstr "Ðепрацездатний аÑемблер. Спробу Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ Ð¿ÐµÑ€ÐµÑ€Ð²Ð°Ð½Ð¾."
-#: config/tc-i386.c:1476
+#: config/tc-i386.c:1486
#, c-format
msgid "i386_output_nops called to generate nops of at most %d bytes!"
msgstr "i386_output_nops викликано Ð´Ð»Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ NOP Ð´Ð»Ñ Ð½Ðµ більше за %d байтів!"
-#: config/tc-i386.c:1685
+#: config/tc-i386.c:1695
#, c-format
msgid "invalid single nop size: %d (expect within [0, %d])"
msgstr "некоректний розмір одинарного nop: %d (мав бути у діапазоні [0, %d])"
-#: config/tc-i386.c:1726
+#: config/tc-i386.c:1736
msgid "jump over nop padding out of range"
msgstr "переÑÑ‚Ñ€Ð¸Ð±ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð°Ð¼Ð¸ nop за межі припуÑтимого діапазону"
-#: config/tc-i386.c:2564
-msgid "%"
-msgstr "%"
+#: config/tc-i386.c:2581
+#, c-format
+msgid "0x%s shortened to 0x%s"
+msgstr "0x%s Ñкорочено до 0x%s"
-#: config/tc-i386.c:2656 config/tc-i386.c:7983
+#: config/tc-i386.c:2673 config/tc-i386.c:8079
msgid "same type of prefix used twice"
msgstr "Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ Ñ‚Ð¾Ð³Ð¾ Ñамого типу викориÑтано двічі"
-#: config/tc-i386.c:2683
+#: config/tc-i386.c:2700
#, c-format
msgid "64bit mode not supported on `%s'."
msgstr "64-бітовий режим не підтримуєтьÑÑ Ñƒ «%s»."
-#: config/tc-i386.c:2692
+#: config/tc-i386.c:2709
#, c-format
msgid "32bit mode not supported on `%s'."
msgstr "32-бітовий режим не підтримуєтьÑÑ Ñƒ «%s»."
-#: config/tc-i386.c:2732
+#: config/tc-i386.c:2749
msgid "bad argument to syntax directive."
msgstr "помилковий аргумент директиви ÑинтакÑиÑу."
-#: config/tc-i386.c:2795
+#: config/tc-i386.c:2812
#, c-format
msgid "bad argument to %s_check directive."
msgstr "помилковий аргумент директиви %s_check."
-#: config/tc-i386.c:2799
+#: config/tc-i386.c:2816
#, c-format
msgid "missing argument for %s_check directive"
msgstr "пропущено аргумент директиви %s_check"
-#: config/tc-i386.c:2839
+#: config/tc-i386.c:2856
#, c-format
msgid "`%s' is not supported on `%s'"
msgstr "«%s» не підтримуєтьÑÑ Ð½Ð° «%s»"
-#: config/tc-i386.c:2945
+#: config/tc-i386.c:2962
#, c-format
msgid "no such architecture: `%s'"
msgstr "немає такої архітектури: «%s»"
-#: config/tc-i386.c:2950
+#: config/tc-i386.c:2967
msgid "missing cpu architecture"
msgstr "не вказано архітектуру процеÑора"
-#: config/tc-i386.c:2967
+#: config/tc-i386.c:2984
#, c-format
msgid "no such architecture modifier: `%s'"
msgstr "немає такого модифікатора архітектури: «%s»"
-#: config/tc-i386.c:2982 config/tc-i386.c:3012
+#: config/tc-i386.c:2999 config/tc-i386.c:3029
msgid "Intel L1OM is 64bit ELF only"
msgstr "Intel L1OM є лише 64-бітовим ELF"
-#: config/tc-i386.c:2989 config/tc-i386.c:3019
+#: config/tc-i386.c:3006 config/tc-i386.c:3036
msgid "Intel K1OM is 64bit ELF only"
msgstr "Intel K1OM є лише 64-бітовим ELF"
-#: config/tc-i386.c:2996 config/tc-i386.c:3033
+#: config/tc-i386.c:3013 config/tc-i386.c:3050
msgid "Intel MCU is 32bit ELF only"
msgstr "Intel MCU є лише 32-бітовим ELF"
-#: config/tc-i386.c:3040 config/tc-i386.c:13894
+#: config/tc-i386.c:3057 config/tc-i386.c:14013
msgid "unknown architecture"
msgstr "невідома архітектура"
-#: config/tc-i386.c:3427
+#: config/tc-i386.c:3444
msgid "there are no pc-relative size relocations"
msgstr "немає переÑувань за розміром відноÑно PC"
-#: config/tc-i386.c:3439
+#: config/tc-i386.c:3456
#, c-format
msgid "unknown relocation (%u)"
msgstr "невідоме переÑÑƒÐ²Ð°Ð½Ð½Ñ (%u)"
-#: config/tc-i386.c:3441
+#: config/tc-i386.c:3458
#, c-format
msgid "%u-byte relocation cannot be applied to %u-byte field"
msgstr "%u-байтове переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ðµ можна заÑтоÑовувати до %u-байтового полÑ"
-#: config/tc-i386.c:3445
+#: config/tc-i386.c:3462
msgid "non-pc-relative relocation for pc-relative field"
msgstr "переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ðµ відноÑно лічильника команди у полі, Ñке Ñ” відноÑним щодо лічильника команд"
-#: config/tc-i386.c:3450
+#: config/tc-i386.c:3467
msgid "relocated field and relocation type differ in signedness"
msgstr "поле переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ‚Ð° тип переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ñ–Ð´Ñ€Ñ–Ð·Ð½ÑÑŽÑ‚ÑŒÑÑ Ð·Ð° можливіÑÑ‚ÑŽ викориÑÑ‚Ð°Ð½Ð½Ñ Ð·Ð½Ð°ÐºÑƒ"
-#: config/tc-i386.c:3459
+#: config/tc-i386.c:3476
msgid "there are no unsigned pc-relative relocations"
msgstr "немає переÑувань без знаку відноÑно PC"
-#: config/tc-i386.c:3467
+#: config/tc-i386.c:3484
#, c-format
msgid "cannot do %u byte pc-relative relocation"
msgstr "не вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ñ–Ð´Ð½Ð¾Ñно лічильника команд на %u байт"
-#: config/tc-i386.c:3484
+#: config/tc-i386.c:3501
#, c-format
msgid "cannot do %s %u byte relocation"
msgstr "не вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ %s %u-байтове переÑуваннÑ"
-#: config/tc-i386.c:4035 config/tc-i386.c:4968
+#: config/tc-i386.c:4052 config/tc-i386.c:5019
#, c-format
msgid "invalid instruction `%s' after `%s'"
msgstr "некоректна інÑÑ‚Ñ€ÑƒÐºÑ†Ñ–Ñ Â«%s» піÑÐ»Ñ Â«%s»"
-#: config/tc-i386.c:4041
+#: config/tc-i386.c:4058
#, c-format
msgid "missing `lock' with `%s'"
msgstr "пропущено «lock» з «%s»"
-#: config/tc-i386.c:4048
+#: config/tc-i386.c:4065
#, c-format
msgid "instruction `%s' after `xacquire' not allowed"
msgstr "не можна викориÑтовувати інÑтрукцію «%s» піÑÐ»Ñ Â«xacquire»"
-#: config/tc-i386.c:4054
+#: config/tc-i386.c:4071
#, c-format
msgid "memory destination needed for instruction `%s' after `xrelease'"
msgstr "потрібне Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñƒ пам’ÑÑ‚Ñ– Ð´Ð»Ñ Ñ–Ð½Ñтрукції «%s» піÑÐ»Ñ Â«xrelease»"
-#: config/tc-i386.c:4700
+#: config/tc-i386.c:4743
#, c-format
msgid "`%s` changes flags which would affect control flow behavior"
msgstr "«%s» змінює прапорці, Ñкі можуть вплинути на поведінку ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ñ‚Ð¾ÐºÐ¾Ð¼ даних"
-#: config/tc-i386.c:4742
+#: config/tc-i386.c:4785
#, c-format
msgid "indirect `%s` with memory operand should be avoided"
msgstr "Ñлід уникати Ð¿Ð¾Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð¾Ð¿Ð¾Ñередкованого «%s» із операндами пам'ÑÑ‚Ñ–"
-#: config/tc-i386.c:4753
+#: config/tc-i386.c:4796
#, c-format
msgid "`%s` skips -mlfence-before-indirect-branch on `%s`"
msgstr "«%s» ÑкаÑовує -mlfence-before-indirect-branch на «%s»"
-#: config/tc-i386.c:4774
+#: config/tc-i386.c:4817
#, c-format
msgid "`%s` skips -mlfence-before-ret on `%s`"
msgstr "«%s» пропуÑкає -mlfence-before-ret у «%s»"
-#: config/tc-i386.c:4919
-msgid "0x%"
-msgstr "0x%"
+#: config/tc-i386.c:4966
+#, c-format
+msgid "0x%s out of range of signed 32bit displacement"
+msgstr "0x%s поза межами припуÑтимого діапазону 32-бітового Ð¿ÐµÑ€ÐµÐ¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð·Ñ– знаком"
-#: config/tc-i386.c:4958
+#: config/tc-i386.c:5009
#, c-format
msgid "SSE instruction `%s' is used"
msgstr "ВикориÑтано інÑтрукцію SSE «%s»"
-#: config/tc-i386.c:4981
+#: config/tc-i386.c:5032
msgid "expecting lockable instruction after `lock'"
msgstr "очікуємо на придатну до Ð±Ð»Ð¾ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ñ–Ð½Ñтрукцію піÑÐ»Ñ Â«lock»"
-#: config/tc-i386.c:4991
+#: config/tc-i386.c:5042
#, c-format
msgid "data size prefix invalid with `%s'"
msgstr "Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ даних Ñ” некоректним з «%s»"
-#: config/tc-i386.c:5001
+#: config/tc-i386.c:5052
msgid "expecting valid branch instruction after `bnd'"
msgstr "очікувалаÑÑ ÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð° інÑÑ‚Ñ€ÑƒÐºÑ†Ñ–Ñ Ð²Ñ–Ð´Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ Ð¿Ñ–ÑÐ»Ñ Â«bnd»"
-#: config/tc-i386.c:5005
+#: config/tc-i386.c:5056
msgid "expecting indirect branch instruction after `notrack'"
msgstr "очікувалаÑÑ ÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð° інÑÑ‚Ñ€ÑƒÐºÑ†Ñ–Ñ Ð¾Ð¿Ð¾Ñередкованого Ð²Ñ–Ð´Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ Ð¿Ñ–ÑÐ»Ñ Â«notrack»"
-#: config/tc-i386.c:5010
+#: config/tc-i386.c:5061
msgid "32-bit address isn't allowed in 64-bit MPX instructions."
msgstr "32-бітову адреÑу не можна викориÑтовувати у 64-бітових інÑтрукціÑÑ… MPX."
-#: config/tc-i386.c:5014
+#: config/tc-i386.c:5065
msgid "16-bit address isn't allowed in MPX instructions"
msgstr "16-бітову адреÑу не можна викориÑтовувати у інÑтрукціÑÑ… MPX"
-#: config/tc-i386.c:5024
+#: config/tc-i386.c:5075
msgid "replacing `rep'/`repe' prefix by `bnd'"
msgstr "замінюємо Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ Â«rep»/«repe» на «bnd»"
#. UnixWare fsub no args is alias for fsubp, fadd -> faddp, etc.
-#: config/tc-i386.c:5096
+#: config/tc-i386.c:5150
#, c-format
msgid "translating to `%sp'"
msgstr "переноÑимо до «%sp»"
-#: config/tc-i386.c:5103
+#: config/tc-i386.c:5157
#, c-format
msgid "instruction `%s' isn't supported outside of protected mode."
msgstr "підтримки інÑтрукції «%s» поза захищеним режимом не передбачено."
-#: config/tc-i386.c:5111
+#: config/tc-i386.c:5165
#, c-format
msgid "REX prefix invalid with `%s'"
msgstr "Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ REX Ñ” некоректним у поєднанні із «%s»"
-#: config/tc-i386.c:5172
+#: config/tc-i386.c:5226
#, c-format
msgid "can't encode register '%s%s' in an instruction requiring REX prefix."
msgstr "не можна закодувати регіÑÑ‚Ñ€ «%s%s» у інÑтрукції, що потребує префікÑа REX."
-#: config/tc-i386.c:5248 config/tc-i386.c:5452
+#: config/tc-i386.c:5302 config/tc-i386.c:5506
#, c-format
msgid "no such instruction: `%s'"
msgstr "немає такої інÑтрукції: «%s»"
-#: config/tc-i386.c:5259 config/tc-i386.c:5485
+#: config/tc-i386.c:5313 config/tc-i386.c:5539
#, c-format
msgid "invalid character %s in mnemonic"
msgstr "некоректний Ñимвол %s у мнемоÑхемі"
-#: config/tc-i386.c:5266
+#: config/tc-i386.c:5320
msgid "expecting prefix; got nothing"
msgstr "мало бути вказано префікÑ; втім, нічого не вказано"
-#: config/tc-i386.c:5268
+#: config/tc-i386.c:5322
msgid "expecting mnemonic; got nothing"
msgstr "мало бути вказано мнемоÑхему; втім, нічого не вказано"
-#: config/tc-i386.c:5283 config/tc-i386.c:5507
+#: config/tc-i386.c:5337 config/tc-i386.c:5561
#, c-format
msgid "`%s' is only supported in 64-bit mode"
msgstr "підтримку «%s» передбачено лише у 64-бітовому режимі"
-#: config/tc-i386.c:5284 config/tc-i386.c:5506
+#: config/tc-i386.c:5338 config/tc-i386.c:5560
#, c-format
msgid "`%s' is not supported in 64-bit mode"
msgstr "підтримки «%s» у 64-бітовому режимі не передбачено"
-#: config/tc-i386.c:5296
+#: config/tc-i386.c:5350
#, c-format
msgid "redundant %s prefix"
msgstr "зайвий Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ %s"
-#: config/tc-i386.c:5498
+#: config/tc-i386.c:5552
msgid "use .code16 to ensure correct addressing mode"
msgstr "викориÑтовуйте .code16 Ð´Ð»Ñ Ð·Ð°Ð±ÐµÐ·Ð¿ÐµÑ‡ÐµÐ½Ð½Ñ Ð½Ð°Ð»ÐµÐ¶Ð½Ð¾Ð³Ð¾ режиму адреÑуваннÑ"
-#: config/tc-i386.c:5510
+#: config/tc-i386.c:5564
#, c-format
msgid "`%s' is not supported on `%s%s'"
msgstr "підтримки «%s» у «%s%s» не передбачено"
-#: config/tc-i386.c:5538
+#: config/tc-i386.c:5592
#, c-format
msgid "invalid character %s before operand %d"
msgstr "некоректний Ñимвол %s перед операндом %d"
-#: config/tc-i386.c:5550
+#: config/tc-i386.c:5604
#, c-format
msgid "unbalanced double quotes in operand %d."
msgstr "незбаланÑовані подвійні лапки у операнді %d."
-#: config/tc-i386.c:5557
+#: config/tc-i386.c:5611
#, c-format
msgid "unbalanced parenthesis in operand %d."
msgstr "незбаланÑована дужка у операнді %d."
-#: config/tc-i386.c:5570
+#: config/tc-i386.c:5624
#, c-format
msgid "invalid character %s in operand %d"
msgstr "некоректний Ñимвол %s у операнді %d"
-#: config/tc-i386.c:5590
+#: config/tc-i386.c:5644
#, c-format
msgid "spurious operands; (%d operands/instruction max)"
msgstr "фальшиві операнди; (макÑ. кількіÑÑ‚ÑŒ — %d операндів/інÑтрукцію)"
-#: config/tc-i386.c:5600 config/tc-i386.c:11480
+#: config/tc-i386.c:5654 config/tc-i386.c:11589
#, c-format
msgid "too many memory references for `%s'"
msgstr "занадто багато поÑилань на пам’ÑÑ‚ÑŒ Ð´Ð»Ñ Â«%s»"
-#: config/tc-i386.c:5621
+#: config/tc-i386.c:5675
msgid "expecting operand after ','; got nothing"
msgstr "піÑÐ»Ñ Â«,» мало бути вказано операнд; втім, не вказано нічого"
-#: config/tc-i386.c:5626
+#: config/tc-i386.c:5680
msgid "expecting operand before ','; got nothing"
msgstr "перед «,» мало бути вказано операнд; втім, не вказано нічого"
-#: config/tc-i386.c:6046
+#: config/tc-i386.c:6100
msgid "mask, index, and destination registers should be distinct"
msgstr "регіÑтри маÑки, індекÑу Ñ– призначеннÑм мають бути Ñвними"
-#: config/tc-i386.c:6063
+#: config/tc-i386.c:6117
msgid "index and destination registers should be distinct"
msgstr "регіÑтри індекÑу Ñ– Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¼Ð°ÑŽÑ‚ÑŒ бути Ñвними"
-#: config/tc-i386.c:6806
+#: config/tc-i386.c:6891
msgid "operand size mismatch"
msgstr "невідповідніÑÑ‚ÑŒ розмірів операндів"
-#: config/tc-i386.c:6809
+#: config/tc-i386.c:6894
msgid "operand type mismatch"
msgstr "невідповідніÑÑ‚ÑŒ типів операндів"
-#: config/tc-i386.c:6812
+#: config/tc-i386.c:6897
msgid "register type mismatch"
msgstr "невідповідніÑÑ‚ÑŒ типів регіÑтрів"
-#: config/tc-i386.c:6815
+#: config/tc-i386.c:6900
msgid "number of operands mismatch"
msgstr "невідповідніÑÑ‚ÑŒ кількоÑтей операндів"
-#: config/tc-i386.c:6818
+#: config/tc-i386.c:6903
msgid "invalid instruction suffix"
msgstr "некоректний ÑÑƒÑ„Ñ–ÐºÑ Ñ–Ð½Ñтрукції"
-#: config/tc-i386.c:6821
+#: config/tc-i386.c:6906
msgid "constant doesn't fit in 4 bits"
msgstr "Ñтала не вміщаєтьÑÑ Ñƒ 4 біти"
-#: config/tc-i386.c:6824
+#: config/tc-i386.c:6909
msgid "unsupported with Intel mnemonic"
msgstr "не підтримуєтьÑÑ Ñƒ мнемоÑхемі Intel"
-#: config/tc-i386.c:6827
+#: config/tc-i386.c:6912
msgid "unsupported syntax"
msgstr "непідтримуваний ÑуфікÑ"
-#: config/tc-i386.c:6830
+#: config/tc-i386.c:6915
#, c-format
msgid "unsupported instruction `%s'"
msgstr "непідтримувана інÑÑ‚Ñ€ÑƒÐºÑ†Ñ–Ñ Â«%s»"
-#: config/tc-i386.c:6834
+#: config/tc-i386.c:6919
msgid "invalid SIB address"
msgstr "некоректна адреÑа SIB"
-#: config/tc-i386.c:6837
+#: config/tc-i386.c:6922
msgid "invalid VSIB address"
msgstr "некоректна адреÑа VSIB"
-#: config/tc-i386.c:6840
+#: config/tc-i386.c:6925
msgid "mask, index, and destination registers must be distinct"
msgstr "регіÑтри маÑки, індекÑу Ñ– призначеннÑм мають бути Ñвними"
-#: config/tc-i386.c:6843
+#: config/tc-i386.c:6928
msgid "all tmm registers must be distinct"
msgstr "уÑÑ– регіÑтри tmm мають бути Ñвними"
-#: config/tc-i386.c:6846
+#: config/tc-i386.c:6931
+msgid "destination and source registers must be distinct"
+msgstr "регіÑтри Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ– джерела мають бути різними"
+
+#: config/tc-i386.c:6934
msgid "unsupported vector index register"
msgstr "непідтримуваний регіÑÑ‚Ñ€ векторного індекÑу"
-#: config/tc-i386.c:6849
+#: config/tc-i386.c:6937
msgid "unsupported broadcast"
msgstr "непідтримувана транÑлÑціÑ"
-#: config/tc-i386.c:6852
+#: config/tc-i386.c:6940
msgid "broadcast is needed for operand of such type"
msgstr "Ð´Ð»Ñ Ð¾Ð¿ÐµÑ€Ð°Ð½Ð´Ð° такого типу потрібна транÑлÑціÑ"
-#: config/tc-i386.c:6855
+#: config/tc-i386.c:6943
msgid "unsupported masking"
msgstr "непідтримуване маÑкуваннÑ"
-#: config/tc-i386.c:6858
+#: config/tc-i386.c:6946
msgid "mask not on destination operand"
msgstr "маÑка не у операнді призначеннÑ"
-#: config/tc-i386.c:6861
+#: config/tc-i386.c:6949
msgid "default mask isn't allowed"
msgstr "не можна викориÑтовувати типову маÑку"
-#: config/tc-i386.c:6864
+#: config/tc-i386.c:6952
msgid "unsupported static rounding/sae"
msgstr "непідтримуване Ñтатичне округленнÑ/sae"
-#: config/tc-i386.c:6868
+#: config/tc-i386.c:6956
msgid "RC/SAE operand must precede immediate operands"
msgstr "операнд RC/SAE має передувати операндам пришвидшеного викориÑтаннÑ"
-#: config/tc-i386.c:6870
+#: config/tc-i386.c:6958
msgid "RC/SAE operand must follow immediate operands"
msgstr "операнд RC/SAE має бути вказано піÑÐ»Ñ Ð¾Ð¿ÐµÑ€Ð°Ð½Ð´Ñ–Ð² пришвидшеного викориÑтаннÑ"
-#: config/tc-i386.c:6873 config/tc-metag.c:4787 config/tc-metag.c:5528
+#: config/tc-i386.c:6961 config/tc-metag.c:4787 config/tc-metag.c:5528
#: config/tc-metag.c:5550
msgid "invalid register operand"
msgstr "некоректний операнд регіÑтра"
-#: config/tc-i386.c:6876
+#: config/tc-i386.c:6964
#, c-format
msgid "%s for `%s'"
msgstr "%s Ð´Ð»Ñ Â«%s»"
-#: config/tc-i386.c:6885
+#: config/tc-i386.c:6973
#, c-format
msgid "indirect %s without `*'"
msgstr "непрÑма команда %s без «*»"
#. Warn them that a data or address size prefix doesn't
#. affect assembly of the next line of code.
-#: config/tc-i386.c:6892
+#: config/tc-i386.c:6980
#, c-format
msgid "stand-alone `%s' prefix"
msgstr "непов’Ñзаний Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ Â«%s»"
-#: config/tc-i386.c:6934
+#: config/tc-i386.c:7022
#, c-format
msgid "`%s' operand %u must use `%ses' segment"
msgstr "операнд %2$u «%1$s» має викориÑтовувати Ñегмент «%3$s»"
-#: config/tc-i386.c:7089
+#: config/tc-i386.c:7177
msgid "generating 16-bit `iret' for .code16gcc directive"
msgstr "Ñтворюємо 16-бітовий «iret» Ð´Ð»Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ .code16gcc"
-#: config/tc-i386.c:7093
+#: config/tc-i386.c:7181
#, c-format
msgid "generating 32-bit `%s', unlike earlier gas versions"
msgstr "Ñтворюємо 32-бітовий «%s», на відміну від попередніх верÑій gas"
-#: config/tc-i386.c:7211
+#: config/tc-i386.c:7299
#, c-format
msgid "ambiguous operand size for `%s'"
msgstr "неоднозначний розмір операнда Ð´Ð»Ñ Â«%s»"
-#: config/tc-i386.c:7216
+#: config/tc-i386.c:7304
#, c-format
msgid "no instruction mnemonic suffix given and no register operands; can't size `%s'"
msgstr "не вказано ÑÑƒÑ„Ñ–ÐºÑ Ð¼Ð½ÐµÐ¼Ð¾Ð½Ñ–ÐºÐ¸ інÑтрукції та операнди регіÑтрів; Ð²Ð¸Ð¼Ñ–Ñ€ÑŽÐ²Ð°Ð½Ð½Ñ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ «%s» неможливе"
-#: config/tc-i386.c:7221
+#: config/tc-i386.c:7309
#, c-format
msgid "%s; using default for `%s'"
msgstr "%s; викориÑтовуємо типовий Ð´Ð»Ñ Â«%s»"
-#: config/tc-i386.c:7223
+#: config/tc-i386.c:7311
msgid "ambiguous operand size"
msgstr "неоднозначний розмір операнда"
-#: config/tc-i386.c:7224
+#: config/tc-i386.c:7312
msgid "no instruction mnemonic suffix given and no register operands"
msgstr "не вказано ÑÑƒÑ„Ñ–ÐºÑ Ð¼Ð½ÐµÐ¼Ð¾Ð½Ñ–ÐºÐ¸ інÑтрукції та операнди регіÑтрів"
-#: config/tc-i386.c:7364
+#: config/tc-i386.c:7452
#, c-format
msgid "16-bit addressing unavailable for `%s'"
msgstr "16-бітове адреÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ” недоÑтупним Ð´Ð»Ñ Â«%s»"
-#: config/tc-i386.c:7432
+#: config/tc-i386.c:7520
#, c-format
msgid "invalid register operand size for `%s'"
msgstr "некоректний розмір регіÑтрового операнда Ð´Ð»Ñ Â«%s»"
#. Any other register is bad.
-#: config/tc-i386.c:7472 config/tc-i386.c:7497 config/tc-i386.c:7556
-#: config/tc-i386.c:7606
+#: config/tc-i386.c:7560 config/tc-i386.c:7585 config/tc-i386.c:7644
+#: config/tc-i386.c:7694
#, c-format
msgid "`%s%s' not allowed with `%s%c'"
msgstr "«%s%s» не можна викориÑтовувати з «%s%c»"
-#: config/tc-i386.c:7510 config/tc-i386.c:7530 config/tc-i386.c:7581
-#: config/tc-i386.c:7620
+#: config/tc-i386.c:7598 config/tc-i386.c:7618 config/tc-i386.c:7669
+#: config/tc-i386.c:7708
#, c-format
msgid "incorrect register `%s%s' used with `%c' suffix"
msgstr "некоректний регіÑÑ‚Ñ€ «%s%s» викориÑтано з ÑуфікÑом «%c»"
-#: config/tc-i386.c:7687
+#: config/tc-i386.c:7783
msgid "no instruction mnemonic suffix given; can't determine immediate size"
msgstr "не вказано ÑуфікÑа мнемоÑхеми інÑтрукції; Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð±ÐµÐ·Ð¿Ð¾Ñереднього розміру неможливе"
-#: config/tc-i386.c:7851
+#: config/tc-i386.c:7947
#, c-format
msgid "source register `%s%s' implicitly denotes `%s%.3s%u' to `%s%.3s%u' source group in `%s'"
msgstr "регіÑÑ‚Ñ€ джерела, «%s%s», неÑвним чином призначає «%s%.3s%u» до групи джерел «%s%.3s%u» у «%s»"
-#: config/tc-i386.c:7895
+#: config/tc-i386.c:7991
#, c-format
msgid "you can't `%s %s%s'"
msgstr "не можна виконувати «%s %s%s»"
#. Reversed arguments on faddp, fsubp, etc.
-#: config/tc-i386.c:7935
+#: config/tc-i386.c:8031
#, c-format
msgid "translating to `%s %s%s,%s%s'"
msgstr "виконуємо перенеÑÐµÐ½Ð½Ñ Ð´Ð¾ «%s %s%s,%s%s»"
#. Extraneous `l' suffix on fp insn.
-#: config/tc-i386.c:7942
+#: config/tc-i386.c:8038
#, c-format
msgid "translating to `%s %s%s'"
msgstr "виконуємо перенеÑÐµÐ½Ð½Ñ Â«%s %s%s»"
-#: config/tc-i386.c:7954
+#: config/tc-i386.c:8050
#, c-format
msgid "segment override on `%s' is ineffectual"
msgstr "Ð¿ÐµÑ€ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñегментів у «%s» Ñ” безрезультатним"
-#: config/tc-i386.c:8693 config/tc-riscv.c:1296
+#: config/tc-i386.c:8789 config/tc-riscv.c:1340
msgid "relaxable branches not supported in absolute section"
msgstr "У абÑолютному розділі не передбачено підтримку придатних до оптимізації гілок"
-#: config/tc-i386.c:8728 config/tc-i386.c:8874 config/tc-i386.c:8956
+#: config/tc-i386.c:8824 config/tc-i386.c:8972 config/tc-i386.c:9054
#, c-format
msgid "skipping prefixes on `%s'"
msgstr "пропуÑкаємо префікÑи Ð´Ð»Ñ Â«%s»"
-#: config/tc-i386.c:8982
+#: config/tc-i386.c:9080
msgid "16-bit jump out of range"
msgstr "16-бітовий перехід за межі припуÑтимого діапазону"
-#: config/tc-i386.c:9236 config/tc-i386.c:9268 config/tc-i386.c:9357
+#: config/tc-i386.c:9334 config/tc-i386.c:9366 config/tc-i386.c:9455
#, c-format
msgid "`%s` skips -malign-branch-boundary on `%s`"
msgstr "«%s» пропуÑкає -malign-branch-boundary у «%s»"
-#: config/tc-i386.c:9633
+#: config/tc-i386.c:9646
+#, c-format
+msgid "Cannot convert `%s' in 16-bit mode"
+msgstr "Ðе можна перетворювати «%s» у 16-бітовому режимі"
+
+#: config/tc-i386.c:9648
+#, c-format
+msgid "Cannot convert `%s' with `-momit-lock-prefix=yes' in effect"
+msgstr "Ðеможливо перетворити «%s», Ñкщо викориÑтано «-momit-lock-prefix=yes»"
+
+#: config/tc-i386.c:9736
msgid "pseudo prefix without instruction"
msgstr "Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ pseudo без інÑтрукції"
-#: config/tc-i386.c:9779
+#: config/tc-i386.c:9882
#, c-format
msgid "instruction length of %u bytes exceeds the limit of 15"
msgstr "довжина інÑтрукції у %u байтів перевищує Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ñƒ 15 байтів"
-#: config/tc-i386.c:10365
+#: config/tc-i386.c:10468
#, c-format
msgid "@%s reloc is not supported with %d-bit output format"
msgstr "підтримки переÑÑƒÐ²Ð°Ð½Ð½Ñ @%s у %d-бітовому форматі Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð½Ðµ передбачено"
-#: config/tc-i386.c:10418
+#: config/tc-i386.c:10521
#, c-format
msgid "missing or invalid expression `%s'"
msgstr "не вказано вираз «%s» або вказано некоректний вираз"
-#: config/tc-i386.c:10427
+#: config/tc-i386.c:10530
#, c-format
msgid "invalid PLT expression `%s'"
msgstr "некоректне Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ PLT «%s»"
-#: config/tc-i386.c:10519
+#: config/tc-i386.c:10628
#, c-format
msgid "Unsupported broadcast: `%s'"
msgstr "Ðепідтримувана транÑлÑціÑ: «%s»"
-#: config/tc-i386.c:10536
+#: config/tc-i386.c:10645
#, c-format
msgid "`%s%s' can't be used for write mask"
msgstr "«%s%s» не можна викориÑтовувати Ñк маÑку запиÑу"
-#: config/tc-i386.c:10556
+#: config/tc-i386.c:10665
#, c-format
msgid "invalid write mask `%s'"
msgstr "некоректна маÑка запиÑу, «%s»"
-#: config/tc-i386.c:10577 config/tc-i386.c:11271
+#: config/tc-i386.c:10686 config/tc-i386.c:11380
#, c-format
msgid "duplicated `%s'"
msgstr "Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Â«%s»"
-#: config/tc-i386.c:10587
+#: config/tc-i386.c:10696
#, c-format
msgid "invalid zeroing-masking `%s'"
msgstr "некоректне зануленнÑ-маÑкуваннÑ, «%s»"
-#: config/tc-i386.c:10600
+#: config/tc-i386.c:10709
#, c-format
msgid "missing `}' in `%s'"
msgstr "пропущено «}» у «%s»"
#. We don't know this one.
-#: config/tc-i386.c:10614
+#: config/tc-i386.c:10723
#, c-format
msgid "unknown vector operation: `%s'"
msgstr "невідома векторна операціÑ: «%s»"
-#: config/tc-i386.c:10620
+#: config/tc-i386.c:10729
msgid "zeroing-masking only allowed with write mask"
msgstr "маÑÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð½ÑƒÐ»Ñми дозволено лише з маÑкою запиÑу"
-#: config/tc-i386.c:10640
+#: config/tc-i386.c:10749
#, c-format
msgid "at most %d immediate operands are allowed"
msgstr "можна викориÑтовувати не більше %d безпоÑередніх операндів"
-#: config/tc-i386.c:10662 config/tc-i386.c:10930
+#: config/tc-i386.c:10771 config/tc-i386.c:11039
#, c-format
msgid "junk `%s' after expression"
msgstr "зайві дані, «%s», піÑÐ»Ñ Ð²Ð¸Ñ€Ð°Ð·Ñƒ"
-#: config/tc-i386.c:10675
+#: config/tc-i386.c:10784
#, c-format
msgid "illegal immediate register operand %s"
msgstr "некоректний операнд регіÑтра пришвидшеного викориÑтаннÑ, %s"
-#: config/tc-i386.c:10689
+#: config/tc-i386.c:10798
#, c-format
msgid "missing or invalid immediate expression `%s'"
msgstr "не вказано вираз пришвидшеного викориÑÑ‚Ð°Ð½Ð½Ñ Â«%s» або вказано некоректний вираз"
-#: config/tc-i386.c:10712 config/tc-i386.c:11010
+#: config/tc-i386.c:10821 config/tc-i386.c:11119
#, c-format
msgid "unimplemented segment %s in operand"
msgstr "нереалізований Ñегмент, %s, у операнді"
-#: config/tc-i386.c:10761
+#: config/tc-i386.c:10870
#, c-format
msgid "expecting scale factor of 1, 2, 4, or 8: got `%s'"
msgstr "мало бути вказано коефіцієнт маÑштабуваннÑ, 1, 2, 4 або 8; втім, вказано «%s»"
-#: config/tc-i386.c:10770
+#: config/tc-i386.c:10879
#, c-format
msgid "scale factor of %d without an index register"
msgstr "маÑÑˆÑ‚Ð°Ð±ÑƒÐ²Ð°Ð½Ð½Ñ %d без регіÑтра індекÑів"
-#: config/tc-i386.c:10792
+#: config/tc-i386.c:10901
#, c-format
msgid "at most %d displacement operands are allowed"
msgstr "можна викориÑтовувати не більше %d операндів переÑуваннÑ"
-#: config/tc-i386.c:10986
+#: config/tc-i386.c:11095
#, c-format
msgid "missing or invalid displacement expression `%s'"
msgstr "пропущено вираз Ð¿ÐµÑ€ÐµÐ¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Â«%s» або некоректне переміщеннÑ"
-#: config/tc-i386.c:11160
+#: config/tc-i386.c:11269
#, c-format
msgid "`%s' is not valid here (expected `%c%s%s%c')"
msgstr "«%s» тут є некоректним (мало бути «%c%s%s%c»)"
-#: config/tc-i386.c:11172
+#: config/tc-i386.c:11281
#, c-format
msgid "`%s' is not a valid %s expression"
msgstr "«%s» не є коректним виразом %s"
-#: config/tc-i386.c:11184
+#: config/tc-i386.c:11293
#, c-format
msgid "invalid `%s' prefix"
msgstr "некоректний Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ Â«%s»"
-#: config/tc-i386.c:11217
+#: config/tc-i386.c:11326
#, c-format
msgid "`%s' cannot be used here"
msgstr "тут не можна викориÑтовувати «%s»"
-#: config/tc-i386.c:11226
+#: config/tc-i386.c:11335
msgid "register scaling is being ignored here"
msgstr "тут маÑÑˆÑ‚Ð°Ð±ÑƒÐ²Ð°Ð½Ð½Ñ Ñ€ÐµÐ³Ñ–Ñтрів буде проігноровано"
-#: config/tc-i386.c:11288
+#: config/tc-i386.c:11397
#, c-format
msgid "Missing '}': '%s'"
msgstr "Пропущено «}»: «%s»"
-#: config/tc-i386.c:11294
+#: config/tc-i386.c:11403
#, c-format
msgid "Junk after '}': '%s'"
msgstr "Зайві Ñимволи піÑÐ»Ñ Â«}»: «%s»"
-#: config/tc-i386.c:11416
+#: config/tc-i386.c:11525
#, c-format
msgid "bad memory operand `%s'"
msgstr "помилковий операнд пам’ÑÑ‚Ñ– «%s»"
-#: config/tc-i386.c:11432
+#: config/tc-i386.c:11541
#, c-format
msgid "junk `%s' after register"
msgstr "зайві дані «%s» піÑÐ»Ñ Ñ€ÐµÐ³Ñ–Ñтра"
-#: config/tc-i386.c:11445 config/tc-i386.c:11609 config/tc-i386.c:11653
+#: config/tc-i386.c:11554 config/tc-i386.c:11718 config/tc-i386.c:11762
#, c-format
msgid "bad register name `%s'"
msgstr "помилкова назва регіÑтра, «%s»"
-#: config/tc-i386.c:11453
+#: config/tc-i386.c:11562
msgid "immediate operand illegal with absolute jump"
msgstr "не можна викориÑтовувати операнд пришвидшеного викориÑÑ‚Ð°Ð½Ð½Ñ Ñƒ команді абÑолютного переходу"
-#: config/tc-i386.c:11521
+#: config/tc-i386.c:11630
msgid "unbalanced figure braces"
msgstr "неврівноважені фігурні дужки"
-#: config/tc-i386.c:11598
+#: config/tc-i386.c:11707
#, c-format
msgid "expecting `,' or `)' after index register in `%s'"
msgstr "мало бути вказано «,» або «)» піÑÐ»Ñ Ñ–Ð½Ð´ÐµÐºÑного регіÑтра у «%s»"
-#: config/tc-i386.c:11626
+#: config/tc-i386.c:11735
#, c-format
msgid "expecting `)' after scale factor in `%s'"
msgstr "мало бути вказано «)» піÑÐ»Ñ ÐºÐ¾ÐµÑ„Ñ–Ñ†Ñ–Ñ”Ð½Ñ‚Ð° маÑÑˆÑ‚Ð°Ð±ÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ «%s»"
-#: config/tc-i386.c:11634
+#: config/tc-i386.c:11743
#, c-format
msgid "expecting index register or scale factor after `,'; got '%c'"
msgstr "піÑÐ»Ñ Â«,» мало бути вказано індекÑний регіÑÑ‚Ñ€ або коефіцієнт маÑштабуваннÑ; маємо «%c»"
-#: config/tc-i386.c:11642
+#: config/tc-i386.c:11751
#, c-format
msgid "expecting `,' or `)' after base register in `%s'"
msgstr "піÑÐ»Ñ Ð±Ð°Ð·Ð¾Ð²Ð¾Ð³Ð¾ регіÑтра у «%s» мало бути вказано «,» або «)»"
#. It's not a memory operand; argh!
-#: config/tc-i386.c:11691
+#: config/tc-i386.c:11800
#, c-format
msgid "invalid char %s beginning operand %d `%s'"
msgstr "некоректний Ñимвол %s на початку операнда %d, «%s»"
-#: config/tc-i386.c:12350
+#: config/tc-i386.c:12460
#, c-format
msgid "%s:%u: add %d%s at 0x%llx to align %s within %d-byte boundary\n"
msgstr "%s:%u: додаємо %d%s у позиції 0x%llx Ð´Ð»Ñ Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ %s на %d-байтову межу\n"
-#: config/tc-i386.c:12353
+#: config/tc-i386.c:12463
#, c-format
msgid "%s:%u: add additional %d%s at 0x%llx to align %s within %d-byte boundary\n"
msgstr "%s:%u: додаємо додаткові %d%s у позиції 0x%llx Ð´Ð»Ñ Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ %s на %d-байтову межу\n"
-#: config/tc-i386.c:12359
+#: config/tc-i386.c:12469
#, c-format
msgid "%s:%u: add %d%s-byte nop at 0x%llx to align %s within %d-byte boundary\n"
msgstr "%s:%u: додаємо %d%s-байтові NOP у позиції 0x%llx Ð´Ð»Ñ Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ %s на %d-байтову межу\n"
-#: config/tc-i386.c:12426
+#: config/tc-i386.c:12536
msgid "long jump required"
msgstr "потрібен довгий перехід"
-#: config/tc-i386.c:12481
+#: config/tc-i386.c:12591
msgid "jump target out of range"
msgstr "Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÐµÑ…Ð¾Ð´Ñƒ поза межами припуÑтимого діапазону"
-#: config/tc-i386.c:12897
+#: config/tc-i386.c:13007
#, c-format
msgid "register '%s%s' cannot be used here"
msgstr "тут не можна викориÑтовувати регіÑÑ‚Ñ€ «%s%s»"
-#: config/tc-i386.c:13112
+#: config/tc-i386.c:13224
#, c-format
msgid "invalid -mx86-used-note= option: `%s'"
msgstr "некоректний параметр -mx86-used-note=: «%s»"
-#: config/tc-i386.c:13135
+#: config/tc-i386.c:13247
msgid "no compiled in support for x86_64"
msgstr "підтримку x86_64 не було зібрано"
-#: config/tc-i386.c:13155
+#: config/tc-i386.c:13267
msgid "no compiled in support for 32bit x86_64"
msgstr "підтримку 32b-бітової архітектури x86_64 не зібрано"
-#: config/tc-i386.c:13159
+#: config/tc-i386.c:13271
msgid "32bit x86_64 is only supported for ELF"
msgstr "підтримку 32-бітової архітектури x86_64 передбачено лише Ð´Ð»Ñ ELF"
-#: config/tc-i386.c:13193 config/tc-i386.c:13281
+#: config/tc-i386.c:13305 config/tc-i386.c:13393
#, c-format
msgid "invalid -march= option: `%s'"
msgstr "некоректний параметр -march=: «%s»"
-#: config/tc-i386.c:13291 config/tc-i386.c:13303
+#: config/tc-i386.c:13403 config/tc-i386.c:13415
#, c-format
msgid "invalid -mtune= option: `%s'"
msgstr "некоректний параметр -mtune=: «%s»"
-#: config/tc-i386.c:13312
+#: config/tc-i386.c:13424
#, c-format
msgid "invalid -mmnemonic= option: `%s'"
msgstr "некоректний параметр -mmnemonic=: «%s»"
-#: config/tc-i386.c:13321
+#: config/tc-i386.c:13433
#, c-format
msgid "invalid -msyntax= option: `%s'"
msgstr "некоректний параметр -msyntax=: «%s»"
-#: config/tc-i386.c:13344
+#: config/tc-i386.c:13460
#, c-format
msgid "invalid -msse-check= option: `%s'"
msgstr "некоректний параметр -msse-check=: «%s»"
-#: config/tc-i386.c:13355
+#: config/tc-i386.c:13471
#, c-format
msgid "invalid -moperand-check= option: `%s'"
msgstr "некоректний параметр -moperand-check=: «%s»"
-#: config/tc-i386.c:13364
+#: config/tc-i386.c:13480
#, c-format
msgid "invalid -mavxscalar= option: `%s'"
msgstr "некоректний параметр -mavxscalar=: «%s»"
-#: config/tc-i386.c:13373
+#: config/tc-i386.c:13489
#, c-format
msgid "invalid -mvexwig= option: `%s'"
msgstr "некоректний параметр -mvexwig=: «%s»"
-#: config/tc-i386.c:13388
+#: config/tc-i386.c:13504
#, c-format
msgid "invalid -mevexlig= option: `%s'"
msgstr "некоректний параметр -mevexlig=: «%s»"
-#: config/tc-i386.c:13401
+#: config/tc-i386.c:13517
#, c-format
msgid "invalid -mevexrcig= option: `%s'"
msgstr "некоректний параметр -mevexrcig=: «%s»"
-#: config/tc-i386.c:13410
+#: config/tc-i386.c:13526
#, c-format
msgid "invalid -mevexwig= option: `%s'"
msgstr "некоректний параметр -mevexwig=: «%s»"
-#: config/tc-i386.c:13425
+#: config/tc-i386.c:13541
#, c-format
msgid "invalid -momit-lock-prefix= option: `%s'"
msgstr "некоректний параметр -momit-lock-prefix=: «%s»"
-#: config/tc-i386.c:13434
+#: config/tc-i386.c:13550
#, c-format
msgid "invalid -mfence-as-lock-add= option: `%s'"
msgstr "некоректний параметр -mfence-as-lock-add=: «%s»"
-#: config/tc-i386.c:13443
+#: config/tc-i386.c:13559
#, c-format
msgid "invalid -mlfence-after-load= option: `%s'"
msgstr "некоректний параметр -mlfence-after-load: «%s»"
-#: config/tc-i386.c:13460
+#: config/tc-i386.c:13576
#, c-format
msgid "invalid -mlfence-before-indirect-branch= option: `%s'"
msgstr "некоректний параметр -mlfence-before-indirect-branch: «%s»"
-#: config/tc-i386.c:13474
+#: config/tc-i386.c:13590
#, c-format
msgid "invalid -mlfence-before-ret= option: `%s'"
msgstr "некоректний параметр -mlfence-before-ret: «%s»"
-#: config/tc-i386.c:13484
+#: config/tc-i386.c:13600
#, c-format
msgid "invalid -mrelax-relocations= option: `%s'"
msgstr "некоректний параметр -mrelax-relocations=: «%s»"
-#: config/tc-i386.c:13513
+#: config/tc-i386.c:13629
#, c-format
msgid "invalid -malign-branch-boundary= value: %s"
msgstr "некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ -malign-branch-boundary=: %s"
-#: config/tc-i386.c:13527
+#: config/tc-i386.c:13643
#, c-format
msgid "invalid -malign-branch-prefix-size= value: %s"
msgstr "некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ -malign-branch-prefix-size=: %s"
-#: config/tc-i386.c:13554
+#: config/tc-i386.c:13670
#, c-format
msgid "invalid -malign-branch= option: `%s'"
msgstr "некоректний параметр -malign-branch=: «%s»"
-#: config/tc-i386.c:13710
+#: config/tc-i386.c:13826
#, c-format
msgid ""
" -Qy, -Qn ignored\n"
@@ -8815,7 +8977,7 @@ msgstr ""
" -V вивеÑти номер верÑÑ–Ñ— аÑемблера\n"
" -k буде проігноровано\n"
-#: config/tc-i386.c:13715
+#: config/tc-i386.c:13831
#, c-format
msgid ""
" -n Do not optimize code alignment\n"
@@ -8824,32 +8986,32 @@ msgstr ""
" -n не оптимізувати Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ ÐºÐ¾Ð´Ñƒ\n"
" -q придушити деÑкі з попереджень\n"
-#: config/tc-i386.c:13719
+#: config/tc-i386.c:13835
#, c-format
msgid " -s ignored\n"
msgstr " -s ігноруєтьÑÑ\n"
-#: config/tc-i386.c:13724
+#: config/tc-i386.c:13840
#, c-format
msgid " --32/--64/--x32 generate 32bit/64bit/x32 object\n"
msgstr " --32/--64/--x32 Ñтворити 32-бітовий, 64-бітовий або x32-об'єкт\n"
-#: config/tc-i386.c:13727
+#: config/tc-i386.c:13843
#, c-format
msgid " --32/--64 generate 32bit/64bit object\n"
msgstr " --32/--64 Ñтворити 32-бітовий/64-бітовий об'єкт\n"
-#: config/tc-i386.c:13732
+#: config/tc-i386.c:13848
#, c-format
msgid " --divide do not treat `/' as a comment character\n"
msgstr " --divide не вважати «/» Ñимволом коментарÑ\n"
-#: config/tc-i386.c:13735
+#: config/tc-i386.c:13851
#, c-format
msgid " --divide ignored\n"
msgstr " --divide ігноруєтьÑÑ\n"
-#: config/tc-i386.c:13738
+#: config/tc-i386.c:13854
#, c-format
msgid ""
" -march=CPU[,+EXTENSION...]\n"
@@ -8858,22 +9020,31 @@ msgstr ""
" -march=ПРОЦЕСОР[,+РОЗШИРЕÐÐЯ...]\n"
" Ñтворити код Ð´Ð»Ñ ÐŸÐ ÐžÐ¦Ð•Ð¡ÐžÐ Ð Ñ‚Ð° РОЗШИРЕÐÐЯ. Можливі Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÐŸÐ ÐžÐ¦Ð•Ð¡ÐžÐ Ð:\n"
-#: config/tc-i386.c:13742
+#: config/tc-i386.c:13858
#, c-format
msgid " EXTENSION is combination of:\n"
msgstr " РОЗШИРЕÐÐЯ Ñ” комбінацією таких значень:\n"
-#: config/tc-i386.c:13745
+#: config/tc-i386.c:13861
#, c-format
msgid " -mtune=CPU optimize for CPU, CPU is one of:\n"
msgstr " -mtune=ПРОЦЕСОР оптимізувати Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑора ПРОЦЕСОР. Передбачені ПРОЦЕСОРИ:\n"
-#: config/tc-i386.c:13748
+#: config/tc-i386.c:13864
#, c-format
msgid " -msse2avx encode SSE instructions with VEX prefix\n"
msgstr " -msse2avx кодувати інÑтрукції SSE з префікÑом VEX\n"
-#: config/tc-i386.c:13750
+#: config/tc-i386.c:13866
+#, c-format
+msgid ""
+" -muse-unaligned-vector-move\n"
+" encode aligned vector move as unaligned vector move\n"
+msgstr ""
+" -muse-unaligned-vector-move\n"
+" кодувати вирівнÑне векторне переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñк невирівнÑне векторне переÑуваннÑ\n"
+
+#: config/tc-i386.c:13869
#, c-format
msgid ""
" -msse-check=[none|error|warning] (default: warning)\n"
@@ -8882,7 +9053,7 @@ msgstr ""
" -msse-check=[none|error|warning] (типове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ â€” warning)\n"
" перевірÑти інÑтрукції SSE\n"
-#: config/tc-i386.c:13753
+#: config/tc-i386.c:13872
#, c-format
msgid ""
" -moperand-check=[none|error|warning] (default: warning)\n"
@@ -8891,7 +9062,7 @@ msgstr ""
" -moperand-check=[none|error|warning] (типове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ â€” warning)\n"
" перевірити Ð¿Ð¾Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð¾Ð¿ÐµÑ€Ð°Ð½Ð´Ñ–Ð² на чинніÑÑ‚ÑŒ\n"
-#: config/tc-i386.c:13756
+#: config/tc-i386.c:13875
#, c-format
msgid ""
" -mavxscalar=[128|256] (default: 128)\n"
@@ -8901,7 +9072,7 @@ msgstr ""
" -mavxscalar=[128|256] (типове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ â€” 128) закодувати ÑкалÑрні інÑтрукції AVX на Ñпецифічну довжину\n"
" вектора\n"
-#: config/tc-i386.c:13760
+#: config/tc-i386.c:13879
#, c-format
msgid ""
" -mvexwig=[0|1] (default: 0)\n"
@@ -8911,7 +9082,7 @@ msgstr ""
" -mevexwig=[0|1] (типове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ â€” 0) закодувати інÑтрукції EVEX Ñпецифічним значеннÑм EVEX.W\n"
" Ð´Ð»Ñ Ñ–Ð½Ñтрукцій EVEX.W з ігноруваннÑм бітів\n"
-#: config/tc-i386.c:13764
+#: config/tc-i386.c:13883
#, c-format
msgid ""
" -mevexlig=[128|256|512] (default: 128)\n"
@@ -8922,7 +9093,7 @@ msgstr ""
" закодувати ÑкалÑрні інÑтрукції EVEX на Ñпецифічну\n"
" довжину вектора\n"
-#: config/tc-i386.c:13768
+#: config/tc-i386.c:13887
#, c-format
msgid ""
" -mevexwig=[0|1] (default: 0)\n"
@@ -8932,7 +9103,7 @@ msgstr ""
" -mevexwig=[0|1] (типове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ â€” 0) закодувати інÑтрукції EVEX Ñпецифічним значеннÑм EVEX.W\n"
" Ð´Ð»Ñ Ñ–Ð½Ñтрукцій EVEX.W з ігноруваннÑм бітів\n"
-#: config/tc-i386.c:13772
+#: config/tc-i386.c:13891
#, c-format
msgid ""
" -mevexrcig=[rne|rd|ru|rz] (default: rne)\n"
@@ -8943,69 +9114,69 @@ msgstr ""
" кодувати інÑтрукції EVEX за допомогою Ñпецифічного Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ EVEX.RC\n"
" Ð´Ð»Ñ Ñ–Ð³Ð½Ð¾Ñ€Ð¾Ð²Ð°Ð½Ð¸Ð¹ інÑтрукцій, придатних лише Ð´Ð»Ñ SAE\n"
-#: config/tc-i386.c:13776
+#: config/tc-i386.c:13895
#, c-format
msgid " -mmnemonic=[att|intel] "
msgstr " -mmnemonic=[att|intel] "
-#: config/tc-i386.c:13779
+#: config/tc-i386.c:13898
#, c-format
msgid "(default: att)\n"
msgstr "(типове значеннÑ: att)\n"
-#: config/tc-i386.c:13781
+#: config/tc-i386.c:13900
#, c-format
msgid "(default: intel)\n"
msgstr "(типове значеннÑ: intel)\n"
-#: config/tc-i386.c:13782
+#: config/tc-i386.c:13901
#, c-format
msgid " use AT&T/Intel mnemonic\n"
msgstr " викориÑтовувати мнемоніку AT&T/Intel\n"
-#: config/tc-i386.c:13784
+#: config/tc-i386.c:13903
#, c-format
msgid ""
" -msyntax=[att|intel] (default: att)\n"
" use AT&T/Intel syntax\n"
msgstr " -msyntax=[att|intel] (типове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ â€” att) викориÑтовувати ÑинтакÑÐ¸Ñ AT&T або Intel\n"
-#: config/tc-i386.c:13787
+#: config/tc-i386.c:13906
#, c-format
msgid " -mindex-reg support pseudo index registers\n"
msgstr " -mindex-reg підтримувати регіÑтри пÑевдоіндекÑу\n"
-#: config/tc-i386.c:13789
+#: config/tc-i386.c:13908
#, c-format
msgid " -mnaked-reg don't require `%%' prefix for registers\n"
msgstr " -mnaked-reg не вимагати префікÑа «%%» Ð´Ð»Ñ Ñ€ÐµÐ³Ñ–Ñтрів\n"
-#: config/tc-i386.c:13791
+#: config/tc-i386.c:13910
#, c-format
msgid " -madd-bnd-prefix add BND prefix for all valid branches\n"
msgstr " -madd-bnd-prefix додати Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ BND до вÑÑ–Ñ… коректних гілок\n"
-#: config/tc-i386.c:13794
+#: config/tc-i386.c:13913
#, c-format
msgid " -mshared disable branch optimization for shared code\n"
msgstr " -mshared вимкнути оптимізацію гілок Ð´Ð»Ñ ÐºÐ¾Ð´Ñƒ Ñпільного викориÑтаннÑ\n"
-#: config/tc-i386.c:13796
+#: config/tc-i386.c:13915
#, c-format
msgid " -mx86-used-note=[no|yes] "
msgstr " -mx86-used-note=[no|yes] "
-#: config/tc-i386.c:13802
+#: config/tc-i386.c:13921
#, c-format
msgid " generate x86 used ISA and feature properties\n"
msgstr " Ñтворити викориÑтане ISA x86 та влаÑтивоÑÑ‚Ñ– можливоÑтей\n"
-#: config/tc-i386.c:13806
+#: config/tc-i386.c:13925
#, c-format
msgid " -mbig-obj generate big object files\n"
msgstr " -mbig-obj Ñтворювати файли із великими об’єктами\n"
-#: config/tc-i386.c:13809
+#: config/tc-i386.c:13928
#, c-format
msgid ""
" -momit-lock-prefix=[no|yes] (default: no)\n"
@@ -9014,7 +9185,7 @@ msgstr ""
" -momit-lock-prefix=[no|yes] (типове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ â€” no)\n"
" вилучити уÑÑ– префікÑи блокуваннÑ\n"
-#: config/tc-i386.c:13812
+#: config/tc-i386.c:13931
#, c-format
msgid ""
" -mfence-as-lock-add=[no|yes] (default: no)\n"
@@ -9025,17 +9196,17 @@ msgstr ""
" кодувати lfence, mfence Ñ– sfence Ñк\n"
" lock addl $0x0, (%%{re}sp)\n"
-#: config/tc-i386.c:13816
+#: config/tc-i386.c:13935
#, c-format
msgid " -mrelax-relocations=[no|yes] "
msgstr " -mrelax-relocations=[no|yes] "
-#: config/tc-i386.c:13822
+#: config/tc-i386.c:13941
#, c-format
msgid " generate relax relocations\n"
msgstr " Ñтворити оптимізовані переÑуваннÑ\n"
-#: config/tc-i386.c:13824
+#: config/tc-i386.c:13943
#, c-format
msgid ""
" -malign-branch-boundary=NUM (default: 0)\n"
@@ -9044,7 +9215,7 @@ msgstr ""
" -malign-branch-boundary=ЧИСЛО (типове значеннÑ: 0)\n"
" вирівнÑти гілки на ЧИСЛО-байтову межу\n"
-#: config/tc-i386.c:13827
+#: config/tc-i386.c:13946
#, c-format
msgid ""
" -malign-branch=TYPE[+TYPE...] (default: jcc+fused+jmp)\n"
@@ -9057,7 +9228,7 @@ msgstr ""
" indirect\n"
" вказати типи гілок Ð´Ð»Ñ Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ\n"
-#: config/tc-i386.c:13832
+#: config/tc-i386.c:13951
#, c-format
msgid ""
" -malign-branch-prefix-size=NUM (default: 5)\n"
@@ -9066,7 +9237,7 @@ msgstr ""
" -malign-branch-prefix-size=ЧИСЛО (типове значеннÑ: 5)\n"
" вирівнÑти гілки за допомогою ЧИСЛО префікÑів на інÑтрукцію\n"
-#: config/tc-i386.c:13835
+#: config/tc-i386.c:13954
#, c-format
msgid ""
" -mbranches-within-32B-boundaries\n"
@@ -9075,7 +9246,7 @@ msgstr ""
" -mbranches-within-32B-boundaries\n"
" вирівнÑти гілки на 32-байтову межу\n"
-#: config/tc-i386.c:13838
+#: config/tc-i386.c:13957
#, c-format
msgid ""
" -mlfence-after-load=[no|yes] (default: no)\n"
@@ -9084,7 +9255,7 @@ msgstr ""
" -mlfence-after-load=[no|yes] (типове значеннÑ: no)\n"
" Ñтворювати lfence піÑÐ»Ñ load\n"
-#: config/tc-i386.c:13841
+#: config/tc-i386.c:13960
#, c-format
msgid ""
" -mlfence-before-indirect-branch=[none|all|register|memory] (default: none)\n"
@@ -9093,7 +9264,7 @@ msgstr ""
" -mlfence-before-indirect-branch=[none|all|register|memory] (типове значеннÑ: none)\n"
" Ñтворювати lfence до опоÑередкованого близького відгалуженнÑ\n"
-#: config/tc-i386.c:13844
+#: config/tc-i386.c:13963
#, c-format
msgid ""
" -mlfence-before-ret=[none|or|not|shl|yes] (default: none)\n"
@@ -9102,683 +9273,679 @@ msgstr ""
" -mlfence-before-ret=[none|or|not|shl|yes] (типове значеннÑ: none)\n"
" Ñтворювати lfence перед ret\n"
-#: config/tc-i386.c:13847
+#: config/tc-i386.c:13966
#, c-format
msgid " -mamd64 accept only AMD64 ISA [default]\n"
msgstr " -mamd64 приймати лише ISA AMD64 [типово]\n"
-#: config/tc-i386.c:13849
+#: config/tc-i386.c:13968
#, c-format
msgid " -mintel64 accept only Intel64 ISA\n"
msgstr " -mintel64 приймати лише ISA Intel64\n"
-#: config/tc-i386.c:13890
+#: config/tc-i386.c:14009
#, c-format
msgid "Intel MCU doesn't support `%s' architecture"
msgstr "У MCU Intel не передбачено підтримки архітектури «%s»"
-#: config/tc-i386.c:13958
+#: config/tc-i386.c:14077
msgid "Intel L1OM is 64bit only"
msgstr "Intel L1OM є лише 64-бітовим"
-#: config/tc-i386.c:13964
+#: config/tc-i386.c:14083
msgid "Intel K1OM is 64bit only"
msgstr "Intel K1OM є лише 64-бітовим"
-#: config/tc-i386.c:13970
+#: config/tc-i386.c:14089
msgid "Intel MCU is 32bit only"
msgstr "MCU Intel можуть бути лише 32-бітовими"
-#: config/tc-i386.c:14082
+#: config/tc-i386.c:14201
msgid "constant directive skips -mlfence-before-ret and -mlfence-before-indirect-branch"
msgstr "інÑÑ‚Ñ€ÑƒÐºÑ†Ñ–Ñ constant пропуÑкає -mlfence-before-ret Ñ– -mlfence-before-indirect-branch"
-#: config/tc-i386.c:14085
+#: config/tc-i386.c:14204
msgid "constant directive skips -mlfence-before-ret"
msgstr "інÑÑ‚Ñ€ÑƒÐºÑ†Ñ–Ñ constant пропуÑкає -mlfence-before-ret Ñ– -mlfence-before-indirect-branch"
-#: config/tc-i386.c:14088
+#: config/tc-i386.c:14207
msgid "constant directive skips -mlfence-before-indirect-branch"
msgstr "інÑÑ‚Ñ€ÑƒÐºÑ†Ñ–Ñ constant пропуÑкає -mlfence-before-indirect-branch"
-#: config/tc-i386.c:14199
+#: config/tc-i386.c:14318
msgid "symbol size computation overflow"
msgstr "Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ Ñпроби обчиÑÐ»ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ Ñимволу"
-#: config/tc-i386.c:14273 config/tc-sparc.c:3852
+#: config/tc-i386.c:14392 config/tc-sparc.c:3852
#, c-format
msgid "can not do %d byte pc-relative relocation"
msgstr "Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð¿ÐµÑ€ÐµÑÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð° %d байтів відноÑно PC неможливе"
-#: config/tc-i386.c:14291
+#: config/tc-i386.c:14410
#, c-format
msgid "can not do %d byte relocation"
msgstr "Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð¿ÐµÑ€ÐµÑÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð° %d байтів неможливе"
-#: config/tc-i386.c:14359
+#: config/tc-i386.c:14478
#, c-format
msgid "cannot represent relocation type %s in x32 mode"
msgstr "Ðе вдалоÑÑ Ð¿Ñ€ÐµÐ´Ñтавити тип переÑÑƒÐ²Ð°Ð½Ð½Ñ %s у режимі x32"
-#: config/tc-i386.c:14396 config/tc-s390.c:2605
+#: config/tc-i386.c:14515 config/tc-s390.c:2602
#, c-format
msgid "cannot represent relocation type %s"
msgstr "не вдалоÑÑ Ð¿Ñ€ÐµÐ´Ñтавити тип переÑÑƒÐ²Ð°Ð½Ð½Ñ %s"
-#: config/tc-i386.c:14513
+#: config/tc-i386.c:14632
msgid "bad .section directive: want a,l,w,x,M,S,G,T in string"
msgstr "помилкова директива .section: потрібне a,l,w,x,M,S,G,T у Ñ€Ñдку"
-#: config/tc-i386.c:14516
+#: config/tc-i386.c:14635
msgid "bad .section directive: want a,w,x,M,S,G,T in string"
msgstr "помилкова директива .section: потрібне a,w,x,M,S,G,T у Ñ€Ñдку"
-#: config/tc-i386.c:14535
+#: config/tc-i386.c:14654
msgid ".largecomm supported only in 64bit mode, producing .comm"
msgstr "підтримку .largecomm передбачено лише у 64-бітовому режимі, Ñтворюємо .comm"
-#: config/tc-ia64.c:869
+#: config/tc-ia64.c:870
msgid "bad .section directive: want a,o,s,w,x,M,S,G,T in string"
msgstr "помилкова директива .section: потрібне a,o,s,w,x,M,S,G,T у Ñ€Ñдку"
-#: config/tc-ia64.c:921
+#: config/tc-ia64.c:922
msgid "Size of frame exceeds maximum of 96 registers"
msgstr "Розмір кадру перевищує макÑимум у 96 регіÑтрів"
-#: config/tc-ia64.c:926
+#: config/tc-ia64.c:927
msgid "Size of rotating registers exceeds frame size"
msgstr "Розмір регіÑтрів Ð¾Ð±ÐµÑ€Ñ‚Ð°Ð½Ð½Ñ Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑ” розмір кадру"
-#: config/tc-ia64.c:1013
+#: config/tc-ia64.c:1014
msgid "Unwind directive not followed by an instruction."
msgstr "За директивою Ñ€Ð¾Ð·Ð³Ð¾Ñ€Ñ‚Ð°Ð½Ð½Ñ Ð½Ðµ вказано інÑтрукції."
-#: config/tc-ia64.c:1022 config/tc-ia64.c:7604
+#: config/tc-ia64.c:1023 config/tc-ia64.c:7597
msgid "qualifying predicate not followed by instruction"
msgstr "піÑÐ»Ñ Ð¿Ñ€ÐµÐ´Ð¸ÐºÐ°Ñ‚Ð° оцінки немає інÑтрукції"
-#: config/tc-ia64.c:1070
+#: config/tc-ia64.c:1071
msgid "expected ',' after section name"
msgstr "піÑÐ»Ñ Ð½Ð°Ð·Ð²Ð¸ розділу мало бути викориÑтано «,»"
-#: config/tc-ia64.c:1105
+#: config/tc-ia64.c:1106
msgid "expected ',' after symbol name"
msgstr "піÑÐ»Ñ Ð½Ð°Ð·Ð²Ð¸ Ñимволу мало бути «,»"
-#: config/tc-ia64.c:1129
+#: config/tc-ia64.c:1130
msgid "expected ',' after symbol size"
msgstr "піÑÐ»Ñ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ Ñимволу мало бути вказано «,»"
-#: config/tc-ia64.c:1212 config/tc-ia64.c:1246
+#: config/tc-ia64.c:1213 config/tc-ia64.c:1247
msgid "record type is not valid"
msgstr "тип запиÑу Ñ” некоректним"
-#: config/tc-ia64.c:1315
+#: config/tc-ia64.c:1316
msgid "Invalid record type for P3 format."
msgstr "Ðекоректний тип запиÑу Ð´Ð»Ñ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ñƒ P3."
-#: config/tc-ia64.c:1351
+#: config/tc-ia64.c:1352
msgid "Invalid record type for format P6"
msgstr "Ðекоректний тип запиÑу Ð´Ð»Ñ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ñƒ P6"
-#: config/tc-ia64.c:1531 config/tc-ia64.c:1583
+#: config/tc-ia64.c:1532 config/tc-ia64.c:1584
msgid "Invalid record type for format B1"
msgstr "Ðекоректний тип запиÑу Ð´Ð»Ñ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ñƒ B1"
-#: config/tc-ia64.c:1616
+#: config/tc-ia64.c:1617
msgid "Invalid record type for format X1"
msgstr "Ðекоректний тип запиÑу Ð´Ð»Ñ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ñƒ X1"
-#: config/tc-ia64.c:1658
+#: config/tc-ia64.c:1659
msgid "Invalid record type for format X3"
msgstr "Ðекоректний тип запиÑу Ð´Ð»Ñ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ñƒ X3"
-#: config/tc-ia64.c:1696
+#: config/tc-ia64.c:1697
msgid "Previous .save incomplete"
msgstr "ÐŸÐ¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ð° .save Ñ” неповною"
-#: config/tc-ia64.c:2521
+#: config/tc-ia64.c:2522
msgid "spill_mask record unimplemented."
msgstr "Ð—Ð°Ð¿Ð¸Ñ spill_mask Ñ” нереалізованим."
-#: config/tc-ia64.c:2578
+#: config/tc-ia64.c:2579
msgid "record_type_not_valid"
msgstr "record_type_not_valid"
-#: config/tc-ia64.c:2662
+#: config/tc-ia64.c:2663
msgid "Ignoring attempt to spill beyond end of region"
msgstr "Ігноруємо Ñпробу вийти за кінець діапазону"
-#: config/tc-ia64.c:2721
+#: config/tc-ia64.c:2722
msgid "Only constant space allocation is supported"
msgstr "Передбачено підтримку Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð»Ð¸ÑˆÐµ Ñталих об’ємів пам’ÑÑ‚Ñ–"
-#: config/tc-ia64.c:2735
+#: config/tc-ia64.c:2736
msgid "Only constant offsets are supported"
msgstr "Передбачено підтримку лише Ñталих відÑтупів"
-#: config/tc-ia64.c:2759
+#: config/tc-ia64.c:2760
msgid "Section switching in code is not supported."
msgstr "Підтримки Ð¿ÐµÑ€ÐµÐ¼Ð¸ÐºÐ°Ð½Ð½Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð² у коді не передбачено."
-#: config/tc-ia64.c:2801
+#: config/tc-ia64.c:2802
msgid "Insn slot not set in unwind record."
msgstr "У запиÑÑ– Ñ€Ð¾Ð·Ð³Ð¾Ñ€Ñ‚Ð°Ð½Ð½Ñ Ð½Ðµ вÑтановлено Ñлоту інÑтрукції."
-#: config/tc-ia64.c:2875
+#: config/tc-ia64.c:2876
msgid "frgr_mem record before region record!"
msgstr "Ð—Ð°Ð¿Ð¸Ñ frgr_mem перед запиÑом облаÑÑ‚Ñ–!"
-#: config/tc-ia64.c:2886
+#: config/tc-ia64.c:2887
msgid "fr_mem record before region record!"
msgstr "Ð—Ð°Ð¿Ð¸Ñ fr_mem перед запиÑом облаÑÑ‚Ñ–!"
-#: config/tc-ia64.c:2895
+#: config/tc-ia64.c:2896
msgid "gr_mem record before region record!"
msgstr "Ð—Ð°Ð¿Ð¸Ñ gr_mem перед запиÑом облаÑÑ‚Ñ–!"
-#: config/tc-ia64.c:2904
+#: config/tc-ia64.c:2905
msgid "br_mem record before region record!"
msgstr "Ð—Ð°Ð¿Ð¸Ñ br_mem перед запиÑом облаÑÑ‚Ñ–!"
-#: config/tc-ia64.c:2914
+#: config/tc-ia64.c:2915
msgid "gr_gr record before region record!"
msgstr "Ð—Ð°Ð¿Ð¸Ñ gr_gr перед запиÑом облаÑÑ‚Ñ–!"
-#: config/tc-ia64.c:2922
+#: config/tc-ia64.c:2923
msgid "br_gr record before region record!"
msgstr "Ð—Ð°Ð¿Ð¸Ñ br_gr перед запиÑом облаÑÑ‚Ñ–!"
-#: config/tc-ia64.c:3040
+#: config/tc-ia64.c:3041
#, c-format
msgid "First operand to .%s must be a predicate"
msgstr "Першим операндом .%s має бути предикатив"
-#: config/tc-ia64.c:3044
+#: config/tc-ia64.c:3045
#, c-format
msgid "Pointless use of p0 as first operand to .%s"
msgstr "Безглузде викориÑÑ‚Ð°Ð½Ð½Ñ p0 Ñк першого операнда .%s"
-#: config/tc-ia64.c:3100
+#: config/tc-ia64.c:3101
#, c-format
msgid "Operand %d to .%s must be a preserved register"
msgstr "Операндом %d .%s має бути зарезервований регіÑÑ‚Ñ€"
-#: config/tc-ia64.c:3136
+#: config/tc-ia64.c:3137
#, c-format
msgid "Operand %d to .%s must be a writable register"
msgstr "Операндом %d .%s має бути придатний до запиÑу регіÑÑ‚Ñ€"
-#: config/tc-ia64.c:3160
+#: config/tc-ia64.c:3161
#, c-format
msgid "Radix `%s' unsupported or invalid"
msgstr "Підтримки оÑнови «%s» не передбачено або оÑнова Ñ” некоректною"
-#: config/tc-ia64.c:3190 config/tc-ia64.c:3195
+#: config/tc-ia64.c:3191 config/tc-ia64.c:3196
#, c-format
msgid ".%s outside of %s"
msgstr ".%s поза межами %s"
-#: config/tc-ia64.c:3281
+#: config/tc-ia64.c:3282
msgid "Tags on unwind pseudo-ops aren't supported, yet"
msgstr "Підтримки теґів у пÑевдоопераціÑÑ… Ñ€Ð¾Ð·Ð³Ð¾Ñ€Ñ‚Ð°Ð½Ð½Ñ Ñ‰Ðµ не передбачено"
-#: config/tc-ia64.c:3303
+#: config/tc-ia64.c:3304
msgid "First operand to .fframe must be a constant"
msgstr "Перший операнд .fframe має бути Ñталим"
-#: config/tc-ia64.c:3323
+#: config/tc-ia64.c:3324
msgid "First operand to .vframe must be a general register"
msgstr "Перший операнд .vframe має бути регіÑтром загального кориÑтуваннÑ"
-#: config/tc-ia64.c:3331
+#: config/tc-ia64.c:3332
msgid "Operand of .vframe contradicts .prologue"
msgstr "Операнд .vframe Ñуперечить .prologue"
-#: config/tc-ia64.c:3341
+#: config/tc-ia64.c:3342
msgid ".vframepsp is meaningless, assuming .vframesp was meant"
msgstr ".vframepsp не має ÑенÑу, припуÑкаємо, що малоÑÑ Ð½Ð° увазі .vframesp"
-#: config/tc-ia64.c:3349
+#: config/tc-ia64.c:3350
msgid "Operand to .vframesp must be a constant (sp-relative offset)"
msgstr "Операнд .vframesp має бути Ñталим (зÑув має бути відноÑно sp)"
-#: config/tc-ia64.c:3376
+#: config/tc-ia64.c:3377
msgid "First operand to .save not a register"
msgstr "Перший операнд .save не Ñ” регіÑтром"
-#: config/tc-ia64.c:3382
+#: config/tc-ia64.c:3383
msgid "Second operand to .save not a valid register"
msgstr "Другий операнд .save не Ñ” коректним регіÑтром"
-#: config/tc-ia64.c:3413 config/tc-ia64.c:3424 config/tc-ia64.c:3432
+#: config/tc-ia64.c:3414 config/tc-ia64.c:3425 config/tc-ia64.c:3433
msgid "Second operand of .save contradicts .prologue"
msgstr "Другий операнд .save Ñуперечить .prologue"
-#: config/tc-ia64.c:3439
+#: config/tc-ia64.c:3440
msgid "First operand to .save not a valid register"
msgstr "Перший операнд .save не Ñ” коректним регіÑтром"
-#: config/tc-ia64.c:3457
+#: config/tc-ia64.c:3458
msgid "First operand to .restore must be stack pointer (sp)"
msgstr "Першим операндом .restore має бути вказівник Ñтека (sp)"
-#: config/tc-ia64.c:3466
+#: config/tc-ia64.c:3467
msgid "Second operand to .restore must be a constant >= 0"
msgstr "Другим операндом .restore має бути Ñтала >= 0"
-#: config/tc-ia64.c:3476
+#: config/tc-ia64.c:3477
#, c-format
msgid "Epilogue count of %lu exceeds number of nested prologues (%u)"
msgstr "КількіÑÑ‚ÑŒ епілогів, %lu, перевищує кількіÑÑ‚ÑŒ вкладених прологів (%u)"
-#: config/tc-ia64.c:3562
+#: config/tc-ia64.c:3563
#, c-format
msgid "Illegal section name `%s' (causes unwind section name clash)"
msgstr "Ðекоректна назва розділу «%s» (ÑпричинÑÑ” конфлікт розпакованих назв розділів)"
-#: config/tc-ia64.c:3737
+#: config/tc-ia64.c:3738
msgid "First operand to .altrp not a valid branch register"
msgstr "Перший операнд .altrp не Ñ” коректним регіÑтром гілок"
-#: config/tc-ia64.c:3766
+#: config/tc-ia64.c:3767
#, c-format
msgid "First operand to .%s not a register"
msgstr "Перший операнд .%s не Ñ” регіÑтром"
-#: config/tc-ia64.c:3771
+#: config/tc-ia64.c:3772
#, c-format
msgid "Second operand to .%s not a constant"
msgstr "Другий операнд .%s не Ñ” Ñталим"
-#: config/tc-ia64.c:3838
+#: config/tc-ia64.c:3839
#, c-format
msgid "First operand to .%s not a valid register"
msgstr "Перший операнд .%s не Ñ” коректним регіÑтром"
-#: config/tc-ia64.c:3861
+#: config/tc-ia64.c:3862
msgid "First operand to .save.g must be a positive 4-bit constant"
msgstr "Першим операндом .save.g має бути додатна 4-бітова Ñтала"
-#: config/tc-ia64.c:3874
+#: config/tc-ia64.c:3875
msgid "Second operand to .save.g must be a general register"
msgstr "Першим операндом .save.g має бути регіÑÑ‚Ñ€ загального кориÑтуваннÑ"
-#: config/tc-ia64.c:3879
+#: config/tc-ia64.c:3880
#, c-format
msgid "Second operand to .save.g must be the first of %d general registers"
msgstr "Другим операндом .save.g має бути перший із %d загальних регіÑтрів"
-#: config/tc-ia64.c:3902
+#: config/tc-ia64.c:3903
msgid "Operand to .save.f must be a positive 20-bit constant"
msgstr "Операндом .save.f має бути додатна 20-бітова Ñтала"
-#: config/tc-ia64.c:3925
+#: config/tc-ia64.c:3926
msgid "First operand to .save.b must be a positive 5-bit constant"
msgstr "Першим операндом .save.b має бути додатна 5-бітова Ñтала"
-#: config/tc-ia64.c:3938
+#: config/tc-ia64.c:3939
msgid "Second operand to .save.b must be a general register"
msgstr "Першим операндом .save.b має бути регіÑÑ‚Ñ€ загального кориÑтуваннÑ"
-#: config/tc-ia64.c:3943
+#: config/tc-ia64.c:3944
#, c-format
msgid "Second operand to .save.b must be the first of %d general registers"
msgstr "Другим операндом .save.b має бути перший із %d загальних регіÑтрів"
-#: config/tc-ia64.c:3969
+#: config/tc-ia64.c:3970
msgid "First operand to .save.gf must be a non-negative 4-bit constant"
msgstr "Першим операндом .save.gf має бути невід’ємна 4-бітова Ñтала"
-#: config/tc-ia64.c:3977
+#: config/tc-ia64.c:3978
msgid "Second operand to .save.gf must be a non-negative 20-bit constant"
msgstr "Другим операндом .save.gf має бути невід’ємна 20-бітова Ñтала"
-#: config/tc-ia64.c:3985
+#: config/tc-ia64.c:3986
msgid "Operands to .save.gf may not be both zero"
msgstr "Операнди .save.gf мають бути ненульовими"
-#: config/tc-ia64.c:4002
+#: config/tc-ia64.c:4003
msgid "Operand to .spill must be a constant"
msgstr "Операнд .spill має бути Ñталим"
-#: config/tc-ia64.c:4071
+#: config/tc-ia64.c:4072
#, c-format
msgid "Operand %d to .%s must be a constant"
msgstr "Операнд %d .%s має бути Ñталим"
-#: config/tc-ia64.c:4092
+#: config/tc-ia64.c:4093
#, c-format
msgid "Missing .label_state %ld"
msgstr "Ðе виÑтачає .label_state %ld"
-#: config/tc-ia64.c:4146
+#: config/tc-ia64.c:4147
msgid "Operand to .label_state must be a constant"
msgstr "Операнд .label_state має бути Ñталим"
-#: config/tc-ia64.c:4165
+#: config/tc-ia64.c:4166
msgid "Operand to .copy_state must be a constant"
msgstr "Операнд .copy_state має бути Ñталим"
-#: config/tc-ia64.c:4188
+#: config/tc-ia64.c:4189
msgid "First operand to .unwabi must be a constant"
msgstr "Перший операнд .unwabi має бути Ñталим"
-#: config/tc-ia64.c:4194
+#: config/tc-ia64.c:4195
msgid "Second operand to .unwabi must be a constant"
msgstr "Другий операнд .unwabi має бути Ñталим"
-#: config/tc-ia64.c:4229
+#: config/tc-ia64.c:4230
msgid "Missing .endp after previous .proc"
msgstr "Ðе виÑтачає .endp піÑÐ»Ñ Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½ÑŒÐ¾Ð³Ð¾ .proc"
-#: config/tc-ia64.c:4247
+#: config/tc-ia64.c:4248
msgid "Empty argument of .proc"
msgstr "Порожній аргумент .proc"
-#: config/tc-ia64.c:4252
+#: config/tc-ia64.c:4253
#, c-format
msgid "`%s' was already defined"
msgstr "«%s» уже визначено"
-#: config/tc-ia64.c:4295
+#: config/tc-ia64.c:4296
msgid "Initial .body should precede any instructions"
msgstr "Початкове .body має передувати будь-Ñким інÑтрукціÑм"
-#: config/tc-ia64.c:4314
+#: config/tc-ia64.c:4315
msgid ".prologue within prologue"
msgstr ".prologue у prologue"
-#: config/tc-ia64.c:4319
+#: config/tc-ia64.c:4320
msgid "Initial .prologue should precede any instructions"
msgstr "Початкове .prologue має передувати будь-Ñким інÑтрукціÑм"
-#: config/tc-ia64.c:4329
+#: config/tc-ia64.c:4330
msgid "First operand to .prologue must be a positive 4-bit constant"
msgstr "Першим операндом .prologue має бути додатна 4-бітова Ñтала"
-#: config/tc-ia64.c:4331
+#: config/tc-ia64.c:4332
msgid "Pointless use of zero first operand to .prologue"
msgstr "Безглузде викориÑÑ‚Ð°Ð½Ð½Ñ Ð½ÑƒÐ»ÑŒÐ¾Ð²Ð¾Ð³Ð¾ першого операнда .prologue"
-#: config/tc-ia64.c:4347
+#: config/tc-ia64.c:4348
msgid "Using a constant as second operand to .prologue is deprecated"
msgstr "ВикориÑÑ‚Ð°Ð½Ð½Ñ Ñталої Ñк другого операнда .prologue вважаєтьÑÑ Ð·Ð°Ñтарілим"
-#: config/tc-ia64.c:4353
+#: config/tc-ia64.c:4354
msgid "Second operand to .prologue must be a general register"
msgstr "Другим операндом .prologue має бути регіÑÑ‚Ñ€ загального кориÑтуваннÑ"
-#: config/tc-ia64.c:4358
+#: config/tc-ia64.c:4359
#, c-format
msgid "Second operand to .prologue must be the first of %d general registers"
msgstr "Другим операндом .prologue має бути перший із %d загальних регіÑтрів"
-#: config/tc-ia64.c:4471
+#: config/tc-ia64.c:4472
#, c-format
msgid "`%s' was not defined within procedure"
msgstr "«%s» не було визначено у процедурі"
-#: config/tc-ia64.c:4507
+#: config/tc-ia64.c:4508
msgid "Empty argument of .endp"
msgstr "Порожній аргумент .endp"
-#: config/tc-ia64.c:4521
+#: config/tc-ia64.c:4522
#, c-format
msgid "`%s' was not specified with previous .proc"
msgstr "«%s» не було визначено з попереднім .proc"
-#: config/tc-ia64.c:4536
+#: config/tc-ia64.c:4537
#, c-format
msgid "`%s' should be an operand to this .endp"
msgstr "«%s» має бути операндом до цього .endp"
-#: config/tc-ia64.c:4577 config/tc-ia64.c:4898 config/tc-ia64.c:5204
+#: config/tc-ia64.c:4578 config/tc-ia64.c:4891 config/tc-ia64.c:5197
msgid "Comma expected"
msgstr "Мало бути викориÑтано кому"
-#: config/tc-ia64.c:4617
+#: config/tc-ia64.c:4618
msgid "Expected '['"
msgstr "Мало бути «[»"
-#: config/tc-ia64.c:4626 config/tc-ia64.c:7738
+#: config/tc-ia64.c:4627 config/tc-ia64.c:7731
msgid "Expected ']'"
msgstr "Мало бути «]»"
-#: config/tc-ia64.c:4631
+#: config/tc-ia64.c:4632
msgid "Number of elements must be positive"
msgstr "КількіÑÑ‚ÑŒ елементів має бути додатною"
-#: config/tc-ia64.c:4642
+#: config/tc-ia64.c:4643
#, c-format
msgid "Used more than the declared %d rotating registers"
msgstr "ВикориÑтано понад %d оголошених регіÑтрів циклічного переÑтавлÑÐ½Ð½Ñ Ð±Ñ–Ñ‚Ñ–Ð²"
-#: config/tc-ia64.c:4650
+#: config/tc-ia64.c:4651
msgid "Used more than the available 96 rotating registers"
msgstr "ВикориÑтано понад 96 доÑтупних регіÑтрів циклічного переÑтавлÑÐ½Ð½Ñ Ð±Ñ–Ñ‚Ñ–Ð²"
-#: config/tc-ia64.c:4657
+#: config/tc-ia64.c:4658
msgid "Used more than the available 48 rotating registers"
msgstr "ВикориÑтано понад 48 доÑтупних регіÑтрів циклічного переÑтавлÑÐ½Ð½Ñ Ð±Ñ–Ñ‚Ñ–Ð²"
-#: config/tc-ia64.c:4685
+#: config/tc-ia64.c:4686
#, c-format
msgid "Attempt to redefine register set `%s'"
msgstr "Спроба перевизначити набір регіÑтрів «%s»"
-#: config/tc-ia64.c:4750
+#: config/tc-ia64.c:4751
#, c-format
msgid "Unknown psr option `%s'"
msgstr "Ðевідомий параметр psr, «%s»"
-#: config/tc-ia64.c:4784
-msgid "Missing section name"
-msgstr "Ðе вказано назви розділу"
-
-#: config/tc-ia64.c:4793
+#: config/tc-ia64.c:4786
msgid "Comma expected after section name"
msgstr "ПіÑÐ»Ñ Ð½Ð°Ð·Ð²Ð¸ розділу Ñлід було додати кому"
-#: config/tc-ia64.c:4804
+#: config/tc-ia64.c:4797
msgid "Creating sections with .xdataN/.xrealN/.xstringZ is deprecated."
msgstr "Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð² за допомогою .xdataN/.xrealN/.xstringZ вважаєтьÑÑ Ð·Ð°Ñтарілим."
-#: config/tc-ia64.c:4893
+#: config/tc-ia64.c:4886
msgid "Register name expected"
msgstr "Мало бути вказано назву регіÑтра"
-#: config/tc-ia64.c:4906
+#: config/tc-ia64.c:4899
msgid "Register value annotation ignored"
msgstr "Ðнотацію до Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ€ÐµÐ³Ñ–Ñтра проігноровано"
-#: config/tc-ia64.c:4945
+#: config/tc-ia64.c:4938
msgid "Directive invalid within a bundle"
msgstr "Ðекоректна директива у кортежі"
-#: config/tc-ia64.c:5039
+#: config/tc-ia64.c:5032
msgid "Missing predicate relation type"
msgstr "Пропущено предикативний тип ÑпіввідношеннÑ"
-#: config/tc-ia64.c:5045
+#: config/tc-ia64.c:5038
msgid "Unrecognized predicate relation type"
msgstr "Ðерозпізнаний тип предикативного ÑпіввідношеннÑ"
-#: config/tc-ia64.c:5091
+#: config/tc-ia64.c:5084
msgid "Bad register range"
msgstr "Помилковий діапазон регіÑтрів"
-#: config/tc-ia64.c:5100 config/tc-ia64.c:7684
+#: config/tc-ia64.c:5093 config/tc-ia64.c:7677
msgid "Predicate register expected"
msgstr "Мало бути вказано предикативний регіÑÑ‚Ñ€"
-#: config/tc-ia64.c:5105
+#: config/tc-ia64.c:5098
msgid "Duplicate predicate register ignored"
msgstr "Ð”ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð¿Ñ€ÐµÐ´Ð¸ÐºÐ°Ñ‚Ð¸Ð²Ð½Ð¾Ð³Ð¾ регіÑтра проігноровано"
-#: config/tc-ia64.c:5121
+#: config/tc-ia64.c:5114
msgid "Predicate source and target required"
msgstr "Слід вказати предикативне джерело Ñ– призначеннÑ"
-#: config/tc-ia64.c:5123 config/tc-ia64.c:5135
+#: config/tc-ia64.c:5116 config/tc-ia64.c:5128
msgid "Use of p0 is not valid in this context"
msgstr "У цьому контекÑÑ‚Ñ– не можна викориÑтовувати p0"
-#: config/tc-ia64.c:5130
+#: config/tc-ia64.c:5123
msgid "At least two PR arguments expected"
msgstr "Мало бути вказано принаймні два аргументи PR"
-#: config/tc-ia64.c:5144
+#: config/tc-ia64.c:5137
msgid "At least one PR argument expected"
msgstr "Мало бути вказано принаймні один аргумент PR"
-#: config/tc-ia64.c:5176
+#: config/tc-ia64.c:5169
#, c-format
msgid "duplicate entry hint %s"
msgstr "Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð¿Ñ–Ð´ÐºÐ°Ð·ÐºÐ¸ щодо запиÑу %s"
#. FIXME -- need 62-bit relocation type
-#: config/tc-ia64.c:5652
+#: config/tc-ia64.c:5645
msgid "62-bit relocation not yet implemented"
msgstr "62-бітове переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ‰Ðµ не реалізовано"
#. XXX technically, this is wrong: we should not be issuing warning
#. messages until we're sure this instruction pattern is going to
#. be used!
-#: config/tc-ia64.c:5738
+#: config/tc-ia64.c:5731
msgid "lower 16 bits of mask ignored"
msgstr "молодші 16 бітів у маÑці проігноровано"
-#: config/tc-ia64.c:5967
+#: config/tc-ia64.c:5960
msgid "stride must be a multiple of 64; lower 6 bits ignored"
msgstr "stride має бути кратним до 64; проігноровано нижні 6 бітів"
-#: config/tc-ia64.c:6085
+#: config/tc-ia64.c:6078
msgid "Expected separator `='"
msgstr "Мало бути викориÑтано роздільник «=»"
-#: config/tc-ia64.c:6121
+#: config/tc-ia64.c:6114
msgid "Duplicate equal sign (=) in instruction"
msgstr "Ð”ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð·Ð½Ð°ÐºÑƒ рівноÑÑ‚Ñ– (=) у інÑтрукції"
-#: config/tc-ia64.c:6128
+#: config/tc-ia64.c:6121
#, c-format
msgid "Illegal operand separator `%c'"
msgstr "Ðекоректний роздільник операндів, «%c»"
-#: config/tc-ia64.c:6243
+#: config/tc-ia64.c:6236
#, c-format
msgid "Operand %u of `%s' should be %s"
msgstr "Операндом %u «%s» має бути %s"
-#: config/tc-ia64.c:6247
+#: config/tc-ia64.c:6240
msgid "Wrong number of output operands"
msgstr "Помилкова кількіÑÑ‚ÑŒ операндів Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ…"
-#: config/tc-ia64.c:6249
+#: config/tc-ia64.c:6242
msgid "Wrong number of input operands"
msgstr "Помилкова кількіÑÑ‚ÑŒ операндів вхідних даних"
-#: config/tc-ia64.c:6251
+#: config/tc-ia64.c:6244
msgid "Operand mismatch"
msgstr "ÐевідповідніÑÑ‚ÑŒ операндів"
-#: config/tc-ia64.c:6333
+#: config/tc-ia64.c:6326
#, c-format
msgid "Invalid use of `%c%d' as output operand"
msgstr "Ðекоректне викориÑÑ‚Ð°Ð½Ð½Ñ Â«%c%d» Ñк операнда Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ…"
-#: config/tc-ia64.c:6336
+#: config/tc-ia64.c:6329
#, c-format
msgid "Invalid use of `r%d' as base update address operand"
msgstr "Ðекоректне викориÑÑ‚Ð°Ð½Ð½Ñ Â«r%d» Ñк операнда базової адреÑи оновленнÑ"
-#: config/tc-ia64.c:6360
+#: config/tc-ia64.c:6353
#, c-format
msgid "Invalid duplicate use of `%c%d'"
msgstr "Ðекоректне Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð²Ð¸ÐºÐ¾Ñ€Ð¸ÑÑ‚Ð°Ð½Ð½Ñ Â«%c%d»"
-#: config/tc-ia64.c:6367
+#: config/tc-ia64.c:6360
#, c-format
msgid "Invalid simultaneous use of `f%d' and `f%d'"
msgstr "Ðекоректне одночаÑне викориÑÑ‚Ð°Ð½Ð½Ñ Â«f%d» Ñ– «f%d»"
-#: config/tc-ia64.c:6373
+#: config/tc-ia64.c:6366
#, c-format
msgid "Dangerous simultaneous use of `f%d' and `f%d'"
msgstr "Ðебезпечне одночаÑне викориÑÑ‚Ð°Ð½Ð½Ñ Â«f%d» Ñ– «f%d»"
-#: config/tc-ia64.c:6417
+#: config/tc-ia64.c:6410
msgid "Value truncated to 62 bits"
msgstr "Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¾Ð±Ñ€Ñ–Ð·Ð°Ð½Ð¾ до 62 бітів"
-#: config/tc-ia64.c:6485
+#: config/tc-ia64.c:6478
#, c-format
msgid "Bad operand value: %s"
msgstr "Помилкове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¾Ð¿ÐµÑ€Ð°Ð½Ð´Ð°: %s"
#. Give an error if a frag containing code is not aligned to a 16 byte
#. boundary.
-#: config/tc-ia64.c:6560 config/tc-ia64.h:177
+#: config/tc-ia64.c:6553 config/tc-ia64.h:177
msgid "instruction address is not a multiple of 16"
msgstr "адреÑа інÑтрукції не Ñ” кратною до 16"
-#: config/tc-ia64.c:6628
+#: config/tc-ia64.c:6621
#, c-format
msgid "`%s' must be last in bundle"
msgstr "«%s» має бути оÑтаннім у кортежі"
-#: config/tc-ia64.c:6660
+#: config/tc-ia64.c:6653
#, c-format
msgid "Internal error: don't know how to force %s to end of instruction group"
msgstr "Ð’Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: невідомий ÑпоÑіб Ð¿Ñ€Ð¸Ð¼ÑƒÑˆÐµÐ½Ð½Ñ %s до Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ð³Ñ€ÑƒÐ¿Ð¸ інÑтрукцій"
-#: config/tc-ia64.c:6673
+#: config/tc-ia64.c:6666
#, c-format
msgid "`%s' must be last in instruction group"
msgstr "«%s» має бути оÑтанньою у групі інÑтрукцій"
-#: config/tc-ia64.c:6703
+#: config/tc-ia64.c:6696
msgid "Label must be first in a bundle"
msgstr "Мітка має бути першою у кортежі"
-#: config/tc-ia64.c:6780
+#: config/tc-ia64.c:6773
msgid "hint in B unit may be treated as nop"
msgstr "підказку у модулі B можна вважати nop"
-#: config/tc-ia64.c:6791
+#: config/tc-ia64.c:6784
msgid "hint in B unit can't be used"
msgstr "не можна викориÑтовувати підказку у модулі B"
-#: config/tc-ia64.c:6805
+#: config/tc-ia64.c:6798
msgid "emit_one_bundle: unexpected dynamic op"
msgstr "emit_one_bundle: неочікувана динамічна операціÑ"
-#: config/tc-ia64.c:6945
+#: config/tc-ia64.c:6938
#, c-format
msgid "`%s' does not fit into %s template"
msgstr "«%s» не відповідає шаблону %s"
-#: config/tc-ia64.c:6960
+#: config/tc-ia64.c:6953
#, c-format
msgid "`%s' does not fit into bundle"
msgstr "«%s» не вкладаєтьÑÑ Ñƒ кортеж"
-#: config/tc-ia64.c:6972
+#: config/tc-ia64.c:6965
#, c-format
msgid "`%s' can't go in %s of %s template"
msgstr "«%s» не може увійти до %s шаблону %s"
-#: config/tc-ia64.c:6978
+#: config/tc-ia64.c:6971
msgid "Missing '}' at end of file"
msgstr "Ðе виÑтачає «}» наприкінці файла"
-#: config/tc-ia64.c:7125
+#: config/tc-ia64.c:7118
#, c-format
msgid "Unrecognized option '-x%s'"
msgstr "Ðерозпізнаний параметр «-x%s»"
-#: config/tc-ia64.c:7152
+#: config/tc-ia64.c:7145
msgid ""
"IA-64 options:\n"
" --mconstant-gp\t mark output file as using the constant-GP model\n"
@@ -9813,7 +9980,7 @@ msgstr ""
" -x | -xexplicit\t увімкнути перевірку Ð¿Ð¾Ñ€ÑƒÑˆÐµÐ½Ð½Ñ Ð·Ð°Ð»ÐµÐ¶Ð½Ð¾Ñтей\n"
#. Note for translators: "automagically" can be translated as "automatically" here.
-#: config/tc-ia64.c:7169
+#: config/tc-ia64.c:7162
msgid ""
" -xauto\t\t automagically remove dependency violations (default)\n"
" -xnone\t\t turn off dependency violation checking\n"
@@ -9831,210 +9998,210 @@ msgstr ""
" -xdebugx\t\t діагноÑтувати перевірку Ð¿Ð¾Ñ€ÑƒÑˆÐµÐ½Ð½Ñ Ð·Ð°Ð»ÐµÐ¶Ð½Ð¾Ñтей Ñ–\n"
"\t\t\t увімкнути перевірку Ð¿Ð¾Ñ€ÑƒÑˆÐµÐ½Ð½Ñ Ð·Ð°Ð»ÐµÐ¶Ð½Ð¾Ñтей\n"
-#: config/tc-ia64.c:7184
+#: config/tc-ia64.c:7177
msgid "--gstabs is not supported for ia64"
msgstr "Підтримки --gstabs Ð´Ð»Ñ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ ia64 не передбачено"
-#: config/tc-ia64.c:7619
+#: config/tc-ia64.c:7612
msgid "Explicit stops are ignored in auto mode"
msgstr "У автоматичному режимі Ñвні зупинки ігноруютьÑÑ"
-#: config/tc-ia64.c:7628
+#: config/tc-ia64.c:7621
msgid "Found '{' when manual bundling is already turned on"
msgstr "Знайдено «{» вже піÑÐ»Ñ Ð²Ð¼Ð¸ÐºÐ°Ð½Ð½Ñ Ð¿Ð°ÐºÐµÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ñ€ÑƒÑ‡Ð½Ñƒ"
-#: config/tc-ia64.c:7641
+#: config/tc-ia64.c:7634
msgid "Found '{' after explicit switch to automatic mode"
msgstr "Знайдено «{» вже піÑÐ»Ñ Ñвного Ð¿ÐµÑ€ÐµÐ¼Ð¸ÐºÐ°Ð½Ð½Ñ Ñƒ автоматичний режим"
-#: config/tc-ia64.c:7647
+#: config/tc-ia64.c:7640
msgid "Found '}' when manual bundling is off"
msgstr "Знайдено «}» піÑÐ»Ñ Ð²Ð¸Ð¼Ð¸ÐºÐ°Ð½Ð½Ñ Ð¿Ð°ÐºÐµÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ñ€ÑƒÑ‡Ð½Ñƒ"
-#: config/tc-ia64.c:7674
+#: config/tc-ia64.c:7667
msgid "Expected ')'"
msgstr "Мало бути «)»"
-#: config/tc-ia64.c:7679
+#: config/tc-ia64.c:7672
msgid "Qualifying predicate expected"
msgstr "ОчікувавÑÑ Ð¿Ñ€ÐµÐ´Ð¸ÐºÐ°Ñ‚ оцінки"
-#: config/tc-ia64.c:7698
+#: config/tc-ia64.c:7691
msgid "Tag must come before qualifying predicate."
msgstr "Теґ має розташовуватиÑÑ Ð¿ÐµÑ€ÐµÐ´ предикатом оцінки."
-#: config/tc-ia64.c:7727
+#: config/tc-ia64.c:7720
msgid "Expected ':'"
msgstr "Мало бути «:»"
-#: config/tc-ia64.c:7743
+#: config/tc-ia64.c:7736
msgid "Tag name expected"
msgstr "Мало бути вказано назву теґу"
-#: config/tc-ia64.c:7844
+#: config/tc-ia64.c:7838
msgid "Rotating register index must be a non-negative constant"
msgstr "Ð†Ð½Ð´ÐµÐºÑ Ð¾Ð±ÐµÑ€Ñ‚Ð°Ð½Ð½Ñ Ñ€ÐµÐ³Ñ–Ñтрів має бути невід’ємною Ñталою"
-#: config/tc-ia64.c:7849
+#: config/tc-ia64.c:7843
#, c-format
msgid "Index out of range 0..%u"
msgstr "Ð†Ð½Ð´ÐµÐºÑ Ð¿Ð¾Ð·Ð° діапазоном від 0 до %u"
-#: config/tc-ia64.c:7861
+#: config/tc-ia64.c:7855
msgid "Indirect register index must be a general register"
msgstr "Ð†Ð½Ð´ÐµÐºÑ Ð¾Ð¿Ð¾Ñередкованих регіÑтрів має бути загальним регіÑтром"
-#: config/tc-ia64.c:7870
+#: config/tc-ia64.c:7864
msgid "Index can only be applied to rotating or indirect registers"
msgstr "Ð†Ð½Ð´ÐµÐºÑ Ð¼Ð¾Ð¶Ðµ заÑтоÑовуватиÑÑ Ð»Ð¸ÑˆÐµ до обертових або опоÑередкованих регіÑтрів"
-#: config/tc-ia64.c:7906 config/tc-xstormy16.c:145
+#: config/tc-ia64.c:7900 config/tc-xstormy16.c:145
msgid "Expected '('"
msgstr "Мало бути «(»"
-#: config/tc-ia64.c:7914 config/tc-pdp11.c:466 config/tc-pdp11.c:530
+#: config/tc-ia64.c:7908 config/tc-pdp11.c:466 config/tc-pdp11.c:530
#: config/tc-pdp11.c:564 config/tc-tilegx.c:1044 config/tc-tilepro.c:932
#: config/tc-xstormy16.c:154
msgid "Missing ')'"
msgstr "не виÑтачає «)»"
-#: config/tc-ia64.c:7932 config/tc-xstormy16.c:161
+#: config/tc-ia64.c:7926 config/tc-xstormy16.c:161
msgid "Not a symbolic expression"
msgstr "Ðе Ñимволічний вираз"
-#: config/tc-ia64.c:7937 config/tc-ia64.c:7951
+#: config/tc-ia64.c:7931 config/tc-ia64.c:7945
msgid "Illegal combination of relocation functions"
msgstr "Заборонене Ð¿Ð¾Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ñ„ÑƒÐ½ÐºÑ†Ñ–Ð¹ переÑуваннÑ"
-#: config/tc-ia64.c:8040
+#: config/tc-ia64.c:8034
msgid "No current frame"
msgstr "Ðе поточний кадр"
-#: config/tc-ia64.c:8042
+#: config/tc-ia64.c:8036
#, c-format
msgid "Register number out of range 0..%u"
msgstr "Ðомер регіÑтра поза діапазоном від 0 до %u"
-#: config/tc-ia64.c:8081
+#: config/tc-ia64.c:8075
msgid "Standalone `#' is illegal"
msgstr "Ðе можна викориÑтовувати окреме «#»"
-#: config/tc-ia64.c:8084
+#: config/tc-ia64.c:8078
msgid "Redundant `#' suffix operators"
msgstr "Зайві ÑуфікÑні оператори «#»"
-#: config/tc-ia64.c:8242
+#: config/tc-ia64.c:8236
#, c-format
msgid "Unhandled dependency %s for %s (%s), note %d"
msgstr "Ðепридатна до обробки залежніÑÑ‚ÑŒ %s Ð´Ð»Ñ %s (%s), нотатка %d"
-#: config/tc-ia64.c:9555
+#: config/tc-ia64.c:9549
#, c-format
msgid "Unrecognized dependency specifier %d\n"
msgstr "Ðерозпізнаний Ñпецифікатор залежноÑÑ‚Ñ– %d\n"
-#: config/tc-ia64.c:10425
+#: config/tc-ia64.c:10419
msgid "Only the first path encountering the conflict is reported"
msgstr "Повідомлено лише перший виÑвлений конфліктний шлÑÑ…"
-#: config/tc-ia64.c:10427
+#: config/tc-ia64.c:10421
msgid "This is the location of the conflicting usage"
msgstr "Це міÑце конфліктного викориÑтаннÑ"
-#: config/tc-ia64.c:10689
+#: config/tc-ia64.c:10683
#, c-format
msgid "Unknown opcode `%s'"
msgstr "Ðевідомий код операції «%s»"
-#: config/tc-ia64.c:10767
+#: config/tc-ia64.c:10761
#, c-format
msgid "AR %d can only be accessed by %c-unit"
msgstr "ДоÑтуп до AR %d можна отримати лише за %c-модулем"
-#: config/tc-ia64.c:10779
+#: config/tc-ia64.c:10773
msgid "hint.b may be treated as nop"
msgstr "hint.b може вважатиÑÑ nop"
-#: config/tc-ia64.c:10782
+#: config/tc-ia64.c:10776
msgid "hint.b shouldn't be used"
msgstr "hint.b не Ñлід викориÑтовувати"
-#: config/tc-ia64.c:10821
+#: config/tc-ia64.c:10815
#, c-format
msgid "`%s' cannot be predicated"
msgstr "«%s» не може бути передбачено"
-#: config/tc-ia64.c:10893
+#: config/tc-ia64.c:10888
msgid "Closing bracket missing"
msgstr "Пропущено завершальну дужку"
-#: config/tc-ia64.c:10902
+#: config/tc-ia64.c:10897
msgid "Index must be a general register"
msgstr "Ð”Ð»Ñ Ñ–Ð½Ð´ÐµÐºÑу має викориÑтовувати регіÑÑ‚Ñ€ загального призначеннÑ"
-#: config/tc-ia64.c:11067
+#: config/tc-ia64.c:11062
#, c-format
msgid "Unsupported fixup size %d"
msgstr "Ðепідтримуваний розмір адреÑної прив’Ñзки, %d"
#. This should be an error, but since previously there wasn't any
#. diagnostic here, don't make it fail because of this for now.
-#: config/tc-ia64.c:11339
+#: config/tc-ia64.c:11334
#, c-format
msgid "Cannot express %s%d%s relocation"
msgstr "Ðе вдалоÑÑ Ð²Ð¸Ñ€Ð°Ð·Ð¸Ñ‚Ð¸ переÑÑƒÐ²Ð°Ð½Ð½Ñ %s%d%s"
-#: config/tc-ia64.c:11358
+#: config/tc-ia64.c:11353
msgid "No addend allowed in @fptr() relocation"
msgstr "У переÑуваннÑÑ… @fptr() не можна викориÑтовувати доданки"
-#: config/tc-ia64.c:11397
+#: config/tc-ia64.c:11392
msgid "integer operand out of range"
msgstr "цілий оператор поза межами припуÑтимого діапазону"
-#: config/tc-ia64.c:11464
+#: config/tc-ia64.c:11459
#, c-format
msgid "%s must have a constant value"
msgstr "%s повинне мати Ñтале значеннÑ"
-#: config/tc-ia64.c:11484
+#: config/tc-ia64.c:11479
msgid "cannot resolve @slotcount parameter"
msgstr "не вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ параметр @slotcount"
-#: config/tc-ia64.c:11517
+#: config/tc-ia64.c:11512
msgid "invalid @slotcount value"
msgstr "некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ @slotcount"
-#: config/tc-ia64.c:11554 config/tc-z8k.c:1388
+#: config/tc-ia64.c:11549 config/tc-z8k.c:1388
#, c-format
msgid "Cannot represent %s relocation in object file"
msgstr "ПредÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÐµÑÑƒÐ²Ð°Ð½Ð½Ñ %s у об’єктному файлі неможливе"
-#: config/tc-ia64.c:11663
+#: config/tc-ia64.c:11658
msgid "Can't add stop bit to mark end of instruction group"
msgstr "Ðе вдалоÑÑ Ð´Ð¾Ð´Ð°Ñ‚Ð¸ біт зупинки Ð´Ð»Ñ Ð¿Ð¾Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÐºÑ–Ð½Ñ†Ñ Ð³Ñ€ÑƒÐ¿Ð¸ інÑтрукцій"
-#: config/tc-ia64.c:11771 read.c:2665 read.c:3304 read.c:3783 stabs.c:468
+#: config/tc-ia64.c:11766 read.c:2665 read.c:3304 read.c:3871 stabs.c:468
#, c-format
msgid "expected comma after \"%s\""
msgstr "піÑÐ»Ñ Â«%s» мала бути кома"
-#: config/tc-ia64.c:11814
+#: config/tc-ia64.c:11809
#, c-format
msgid "`%s' is already the alias of %s `%s'"
msgstr "«%s» вже Ñ” альтернативним запиÑом %s «%s»"
-#: config/tc-ia64.c:11826
+#: config/tc-ia64.c:11821
#, c-format
msgid "%s `%s' already has an alias `%s'"
msgstr "%s «%s» вже має альтернативний Ð·Ð°Ð¿Ð¸Ñ Â«%s»"
-#: config/tc-ia64.c:11860
+#: config/tc-ia64.c:11855
#, c-format
msgid "symbol `%s' aliased to `%s' is not used"
msgstr "Ñимвол «%s» з альтернативним запиÑом «%s» не викориÑтовуєтьÑÑ"
-#: config/tc-ia64.c:11886
+#: config/tc-ia64.c:11881
#, c-format
msgid "section `%s' aliased to `%s' is not used"
msgstr "розділ «%s» з альтернативним запиÑом «%s» не викориÑтовуєтьÑÑ"
@@ -10082,7 +10249,7 @@ msgstr "інÑÑ‚Ñ€ÑƒÐºÑ†Ñ–Ñ Ð½ÐµÑвним чином отримує доÑту
msgid "Unmatched high relocation"
msgstr "ПереÑÑƒÐ²Ð°Ð½Ð½Ñ high без відповідника"
-#: config/tc-iq2000.c:831 config/tc-mips.c:19783 config/tc-score.c:5804
+#: config/tc-iq2000.c:831 config/tc-mips.c:19776 config/tc-score.c:5804
msgid ".end not in text section"
msgstr ".end поза розділом text"
@@ -10094,7 +10261,7 @@ msgstr "Директива .end без попередньої директиві
msgid ".end symbol does not match .ent symbol."
msgstr "Символ .end не збігаєтьÑÑ Ð· Ñимволом .ent."
-#: config/tc-iq2000.c:847 config/tc-mips.c:19803 config/tc-score.c:5820
+#: config/tc-iq2000.c:847 config/tc-mips.c:19796 config/tc-score.c:5820
msgid ".end directive missing or unknown symbol"
msgstr "не виÑтачає директиви .end або невідомий Ñимвол"
@@ -10102,7 +10269,7 @@ msgstr "не виÑтачає директиви .end або невідомий
msgid "Expected simple number."
msgstr "Мало бути проÑте чиÑло."
-#: config/tc-iq2000.c:894 config/tc-mips.c:19708 config/tc-score.c:5670
+#: config/tc-iq2000.c:894 config/tc-mips.c:19701 config/tc-score.c:5670
#, c-format
msgid " *input_line_pointer == '%c' 0x%02x\n"
msgstr " *input_line_pointer == '%c' 0x%02x\n"
@@ -10119,6 +10286,131 @@ msgstr ".ent або .aent поза межами розділу text."
msgid "missing `.end'"
msgstr "не виÑтачає «.end»"
+#: config/tc-loongarch.c:345
+#, c-format
+msgid "insn name: %s\tformat: %s\tsyntax error"
+msgstr "інÑтрукц.: %s\tформат: %s\tÑинтакÑична помилка"
+
+#: config/tc-loongarch.c:348
+#, c-format
+msgid ""
+"insn name: %s\n"
+"format: %s\n"
+"we want macro but macro is NULL"
+msgstr ""
+"інÑтрукціÑ: %s\n"
+"формат: %s\n"
+"нам потрібен макроÑ, але Ð¼Ð°ÐºÑ€Ð¾Ñ Ð¿Ð¾Ñ€Ð¾Ð¶Ð½Ñ–Ð¹ (NULL)"
+
+#: config/tc-loongarch.c:353
+#, c-format
+msgid ""
+"insn name: %s\n"
+"format: %s\n"
+"macro: %s\tsyntax error"
+msgstr ""
+"інÑтрукціÑ: %s\n"
+"формат: %s\n"
+"макроÑ: %s\tÑинтакÑична помилка"
+
+#: config/tc-loongarch.c:402
+#, c-format
+msgid "Unsupported use of %s"
+msgstr "Ðепідтримуване викориÑÑ‚Ð°Ð½Ð½Ñ %s"
+
+#: config/tc-loongarch.c:475
+msgid "internal error: we have no internal label yet"
+msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: у Ð½Ð°Ñ Ñ‰Ðµ немає внутрішньої мітки"
+
+#: config/tc-loongarch.c:585
+msgid "This label shouldn't be with addend."
+msgstr "До цієї мітки не має щоÑÑŒ додаватиÑÑ."
+
+#: config/tc-loongarch.c:625
+msgid "expr too huge"
+msgstr "надто великий вираз"
+
+#: config/tc-loongarch.c:652
+#, c-format
+msgid ""
+"not support reloc bit-field\n"
+"fmt: %c%c %s\n"
+"args: %s"
+msgstr ""
+"непідтримуване бітове поле переÑуваннÑ\n"
+"формат: %c%c %s\n"
+"аргументи: %s"
+
+#: config/tc-loongarch.c:700
+msgid "unknown escape"
+msgstr "невідоме екрануваннÑ"
+
+#: config/tc-loongarch.c:727
+#, c-format
+msgid "require imm low %d bit is 0."
+msgstr "потрібний нижній %d біт imm дорівнює 0."
+
+#. How to do after we detect overflow.
+#: config/tc-loongarch.c:739
+#, c-format
+msgid ""
+"Immediate overflow.\n"
+"format: %c%c%s\n"
+"arg: %s"
+msgstr ""
+"ÐŸÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ñ€ÐµÐ³Ñ–Ñтра пришвидшеного викориÑтаннÑ.\n"
+"формат: %c%c%s\n"
+"аргумент: %s"
+
+#: config/tc-loongarch.c:819
+msgid "AMO insns require rd != base && rd != rt when rd isn't $r0"
+msgstr "ІнÑтрукції AMO потребують rd != base && rd != rt, Ñкщо rd не збігаєтьÑÑ Ð· $r0"
+
+#: config/tc-loongarch.c:831
+msgid "bstr(ins|pick).[wd] require msbd >= lsbd"
+msgstr "bstr(ins|pick).[wd] потребує msbd >= lsbd"
+
+#: config/tc-loongarch.c:836
+msgid "csrxchg require rj != $r0 && rj != $r1"
+msgstr "csrxchg потребує rj != $r0 && rj != $r1"
+
+#: config/tc-loongarch.c:883
+#, c-format
+msgid "no HOWTO loong relocation number %d"
+msgstr "немає ÑпоÑобу переÑÑƒÐ²Ð°Ð½Ð½Ñ loong Ð´Ð»Ñ Ñ‡Ð¸Ñла %d"
+
+#: config/tc-loongarch.c:891
+msgid "Internal error: not support relax now"
+msgstr "Ð’Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: підтримки оптимізації зараз не передбачено"
+
+#: config/tc-loongarch.c:920
+#, c-format
+msgid "li overflow: hi32:0x%x lo32:0x%x"
+msgstr "Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ li: hi32:0x%x lo32:0x%x"
+
+#: config/tc-loongarch.c:925
+msgid "we can't li.d on 32bit-arch"
+msgstr "неможливе li.d на 32-бітових архітектурах"
+
+#: config/tc-loongarch.c:1020
+#, c-format
+msgid "no match insn: %s\t%s"
+msgstr "невідповідна інÑтрукціÑ: %s\t%s"
+
+#: config/tc-loongarch.c:1090 config/tc-loongarch.c:1096
+msgid "Relocation against a constant"
+msgstr "ПереÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ Ñталої"
+
+#: config/tc-loongarch.c:1301 config/tc-riscv.c:4029
+#, c-format
+msgid "cannot represent %s relocation in object file"
+msgstr "предÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÐµÑÑƒÐ²Ð°Ð½Ð½Ñ %s у об’єктному файлі неможливе"
+
+#: config/tc-loongarch.c:1339
+#, c-format
+msgid "LARCH options:\n"
+msgstr "Параметри LARCH:\n"
+
#: config/tc-m32c.c:141
#, c-format
msgid " M32C specific command line options:\n"
@@ -10333,8 +10625,8 @@ msgstr "ПіÑÐ»Ñ Ð½Ð°Ð·Ð²Ð¸ Ñимволу мало бути вказано к
msgid ".SCOMMon length (%ld.) <0! Ignored."
msgstr "довжина .SCOMMon (%ld.) <0! Проігноровано."
-#: config/tc-m32r.c:1514 config/tc-microblaze.c:218 config/tc-ppc.c:2366
-#: config/tc-ppc.c:4332 config/tc-ppc.c:4374
+#: config/tc-m32r.c:1514 config/tc-microblaze.c:218 config/tc-ppc.c:2379
+#: config/tc-ppc.c:4417 config/tc-ppc.c:4472
msgid "ignoring bad alignment"
msgstr "ігноруємо помилкове вирівнюваннÑ"
@@ -10718,10 +11010,6 @@ msgstr "bra або bsr з невизначеним Ñимволом."
msgid "Subtype %d is not recognized."
msgstr "Підтип %d не розпізнано."
-#: config/tc-m68hc11.c:4337 config/tc-s12z.c:3936 config/tc-xgate.c:663
-msgid "Expression too complex."
-msgstr "Вираз Ñ” надто Ñкладним."
-
#: config/tc-m68hc11.c:4368 config/tc-s12z.c:3976 config/tc-xgate.c:708
#: config/tc-xgate.c:717
msgid "Value out of 16-bit range."
@@ -11209,7 +11497,7 @@ msgstr "Код операції(%d.%s): "
msgid "Not a defined coldfire architecture"
msgstr "Ðе Ñ” визначеною архітектурою coldfire"
-#: config/tc-m68k.c:7923 read.c:4673
+#: config/tc-m68k.c:7923 read.c:4766
#, c-format
msgid "%s relocations do not fit in %u byte"
msgid_plural "%s relocations do not fit in %u bytes"
@@ -11218,7 +11506,7 @@ msgstr[1] "переÑÑƒÐ²Ð°Ð½Ð½Ñ %s не відповідають на %u баÐ
msgstr[2] "переÑÑƒÐ²Ð°Ð½Ð½Ñ %s не відповідають на %u байтів"
msgstr[3] "переÑÑƒÐ²Ð°Ð½Ð½Ñ %s не відповідають на %u байт"
-#: config/tc-m68k.c:7965 config/tc-ppc.c:2539
+#: config/tc-m68k.c:7965 config/tc-ppc.c:2552
msgid "unknown .gnu_attribute value"
msgstr "невідоме Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ .gnu_attribute"
@@ -11356,12 +11644,12 @@ msgstr "нереалізований код операції «%s»"
msgid "ignoring operands: %s "
msgstr "ігноруємо операнди: %s "
-#: config/tc-mcore.c:1670
+#: config/tc-mcore.c:1673
#, c-format
msgid "unrecognised cpu type '%s'"
msgstr "нерозпізнаний тип процеÑора, «%s»"
-#: config/tc-mcore.c:1688
+#: config/tc-mcore.c:1691
#, c-format
msgid ""
"MCORE specific options:\n"
@@ -11378,20 +11666,20 @@ msgstr ""
" -EB зібрати Ð´Ð»Ñ ÑиÑтем зі зворотним порÑдком байтів (типово)\n"
" -EL зібрати Ð´Ð»Ñ ÑиÑтем із прÑмим порÑдком байтів\n"
-#: config/tc-mcore.c:1706 config/tc-microblaze.c:1871
+#: config/tc-mcore.c:1709 config/tc-microblaze.c:1871
msgid "failed sanity check: short_jump"
msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ð¹Ñ‚Ð¸ перевірку на коректніÑÑ‚ÑŒ: short_jump"
-#: config/tc-mcore.c:1716 config/tc-microblaze.c:1881
+#: config/tc-mcore.c:1719 config/tc-microblaze.c:1881
msgid "failed sanity check: long_jump"
msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ð¹Ñ‚Ð¸ перевірку на коректніÑÑ‚ÑŒ: long_jump"
-#: config/tc-mcore.c:1742
+#: config/tc-mcore.c:1745
#, c-format
msgid "odd displacement at %x"
msgstr "дивне Ð¿ÐµÑ€ÐµÐ¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð·Ð° адреÑою %x"
-#: config/tc-mcore.c:1951
+#: config/tc-mcore.c:1954
#, c-format
msgid "odd distance branch (0x%lx byte)"
msgid_plural "odd distance branch (0x%lx bytes)"
@@ -11400,27 +11688,27 @@ msgstr[1] "гілка непарної відÑтані (0x%lx байти)"
msgstr[2] "гілка непарної відÑтані (0x%lx байтів)"
msgstr[3] "гілка непарної відÑтані (0x%lx байт)"
-#: config/tc-mcore.c:1958
+#: config/tc-mcore.c:1961
#, c-format
msgid "pcrel for branch to %s too far (0x%lx)"
msgstr "pcrel Ð´Ð»Ñ Ð³Ñ–Ð»ÐºÐ¸ до %s Ñ” надто далеким (0x%lx)"
-#: config/tc-mcore.c:1978
+#: config/tc-mcore.c:1981
#, c-format
msgid "pcrel for lrw/jmpi/jsri to %s too far (0x%lx)"
msgstr "pcrel Ð´Ð»Ñ lrw/jmpi/jsri до %s Ñ” надто далеким (0x%lx)"
-#: config/tc-mcore.c:1990
+#: config/tc-mcore.c:1993
#, c-format
msgid "pcrel for loopt too far (0x%lx)"
msgstr "надто далекий перехід pcrel Ð´Ð»Ñ loopt (0x%lx)"
-#: config/tc-mcore.c:2186 config/tc-microblaze.c:2471 config/tc-tic30.c:1364
+#: config/tc-mcore.c:2189 config/tc-microblaze.c:2471 config/tc-tic30.c:1364
#, c-format
msgid "Can not do %d byte %srelocation"
msgstr "Ð’Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ %2$sпереÑÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð° %1$d байтів неможливе"
-#: config/tc-mcore.c:2188 config/tc-microblaze.c:2473 config/tc-tic30.c:1365
+#: config/tc-mcore.c:2191 config/tc-microblaze.c:2473 config/tc-tic30.c:1365
msgid "pc-relative "
msgstr "відноÑний щодо PC "
@@ -12082,7 +12370,7 @@ msgstr "Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Â«%s» було вилучено у %s%d, модиÑ
msgid "the `%s' extension requires 64-bit FPRs"
msgstr "Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Â«%s» потребує 64-бітового FPR"
-#: config/tc-mips.c:3048 config/tc-mips.c:16640
+#: config/tc-mips.c:3048 config/tc-mips.c:16633
#, c-format
msgid "unrecognized register name `%s'"
msgstr "нерозпізнана назва регіÑтра, «%s»"
@@ -12224,7 +12512,7 @@ msgstr "у «%s» не передбачено підтримки оптимізÐ
msgid "trap exception not supported at ISA 1"
msgstr "у ISA 1 не передбачено виключень паÑток"
-#: config/tc-mips.c:4167 config/tc-mips.c:17523
+#: config/tc-mips.c:4167 config/tc-mips.c:17516
#, c-format
msgid "`%s' does not support legacy NaN"
msgstr "у «%s» не передбачено підтримки заÑтарілого NaN"
@@ -12244,7 +12532,7 @@ msgstr "операнд %d перебуває поза межами припуÑÑ
msgid "operand %d must be constant"
msgstr "операнд %d має бути Ñталим"
-#: config/tc-mips.c:4970 read.c:4458 read.c:5254 write.c:263 write.c:1031
+#: config/tc-mips.c:4970 read.c:4546 read.c:5321 write.c:254 write.c:1031
msgid "register value used as expression"
msgstr "викориÑтано Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ€ÐµÐ³Ñ–Ñтра Ñк вираз"
@@ -12332,7 +12620,7 @@ msgstr "перехід до невирівнÑної адреÑи (0x%lx)"
#: config/tc-mips.c:7553 config/tc-mips.c:7573 config/tc-mips.c:7590
#: config/tc-mips.c:9140 config/tc-mips.c:15792 config/tc-mips.c:15799
-#: config/tc-mips.c:16192 config/tc-mips.c:19038
+#: config/tc-mips.c:16192 config/tc-mips.c:19031
#, c-format
msgid "branch to misaligned address (0x%lx)"
msgstr "Ð²Ñ–Ð´Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ Ð´Ð¾ невирівнÑної адреÑи (0x%lx)"
@@ -12359,7 +12647,7 @@ msgstr "має бути надано регіÑÑ‚Ñ€ призначеннÑ"
msgid "the source register must not be $31"
msgstr "регіÑтром джерела не повинен бути $31"
-#: config/tc-mips.c:8559 config/tc-mips.c:14532 config/tc-mips.c:19185
+#: config/tc-mips.c:8559 config/tc-mips.c:14532 config/tc-mips.c:19178
msgid "invalid unextended operand value"
msgstr "некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð½ÐµÑ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð¾Ð³Ð¾ операнда"
@@ -12385,11 +12673,11 @@ msgstr "нерозпізнана нерозширена верÑÑ–Ñ ÐºÐ¾Ð´Ñƒ о
msgid "unrecognized extended version of MIPS16 opcode"
msgstr "нерозпізнана розширена верÑÑ–Ñ ÐºÐ¾Ð´Ñƒ операції MIPS16"
-#: config/tc-mips.c:8868 config/tc-mips.c:19056
+#: config/tc-mips.c:8868 config/tc-mips.c:19049
msgid "macro instruction expanded into multiple instructions in a branch delay slot"
msgstr "інÑтрукцію макроÑу розгорнуто у декілька інÑтрукцій у Ñлоті затримки гілки"
-#: config/tc-mips.c:8871 config/tc-mips.c:19064
+#: config/tc-mips.c:8871 config/tc-mips.c:19057
msgid "macro instruction expanded into multiple instructions"
msgstr "інÑтрукцію макроÑу розгорнуто у декілька інÑтрукцій"
@@ -12447,7 +12735,7 @@ msgstr "dla викориÑтано Ð´Ð»Ñ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ 32-бітов
msgid "la used to load 64-bit address; recommend using dla instead"
msgstr "la викориÑтано Ð´Ð»Ñ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ 64-бітової адреÑи; рекомендуємо ÑкориÑтатиÑÑ dla"
-#: config/tc-mips.c:11105 config/tc-riscv.c:1601
+#: config/tc-mips.c:11105 config/tc-riscv.c:1768
msgid "offset too large"
msgstr "відÑтуп Ñ” надто великим"
@@ -12557,7 +12845,7 @@ msgstr "-%s конфліктує з іншими параметрами архі
msgid "-march=%s is not compatible with the selected ABI"
msgstr "-march=%s Ñ” неÑуміÑним з вибраним ABI"
-#: config/tc-mips.c:15796 config/tc-mips.c:16186 config/tc-mips.c:19035
+#: config/tc-mips.c:15796 config/tc-mips.c:16186 config/tc-mips.c:19028
msgid "branch to a symbol in another ISA mode"
msgstr "Ñ€Ð¾Ð·Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ Ð´Ð¾ Ñимволу у іншому режимі ISA"
@@ -12570,7 +12858,7 @@ msgstr "не вдалоÑÑ Ð·Ð°ÐºÐ¾Ð´ÑƒÐ²Ð°Ñ‚Ð¸ помилково вирівн
msgid "PC-relative reference to a different section"
msgstr "поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ лічильника команд (PC) на інший розділ"
-#: config/tc-mips.c:15912 config/tc-riscv.c:3023
+#: config/tc-mips.c:15912 config/tc-riscv.c:3498
msgid "TLS relocation against a constant"
msgstr "переÑÑƒÐ²Ð°Ð½Ð½Ñ TLS щодо Ñталої"
@@ -12614,161 +12902,161 @@ msgstr "надто велике вирівнюваннÑ; припуÑкаємо
msgid "alignment negative, 0 assumed"
msgstr "від’ємне вирівнюваннÑ; припуÑкаємо 0"
-#: config/tc-mips.c:16520
+#: config/tc-mips.c:16513
#, c-format
msgid "%s: no such section"
msgstr "%s: такого розділу немає"
-#: config/tc-mips.c:16576
+#: config/tc-mips.c:16569
#, c-format
msgid ".option pic%d not supported"
msgstr "Підтримки .option pic%d не передбачено"
-#: config/tc-mips.c:16578
+#: config/tc-mips.c:16571
#, c-format
msgid ".option pic%d not supported in VxWorks PIC mode"
msgstr "у режимі PIC VxWorks не передбачено підтримки .option pic%d"
-#: config/tc-mips.c:16590 config/tc-mips.c:16930
+#: config/tc-mips.c:16583 config/tc-mips.c:16923
msgid "-G may not be used with SVR4 PIC code"
msgstr "-G не можна викориÑтовувати разом з кодом SVR4 PIC"
-#: config/tc-mips.c:16596
+#: config/tc-mips.c:16589
#, c-format
msgid "unrecognized option \"%s\""
msgstr "невідомий параметр «%s»"
-#: config/tc-mips.c:16702
+#: config/tc-mips.c:16695
#, c-format
msgid "unknown architecture %s"
msgstr "невідома архітектура, %s"
-#: config/tc-mips.c:16717 config/tc-mips.c:16881
+#: config/tc-mips.c:16710 config/tc-mips.c:16874
#, c-format
msgid "unknown ISA level %s"
msgstr "невідомий рівень ISA %s"
-#: config/tc-mips.c:16727
+#: config/tc-mips.c:16720
#, c-format
msgid "unknown ISA or architecture %s"
msgstr "невідома ISA або архітектура, %s"
-#: config/tc-mips.c:16786
+#: config/tc-mips.c:16779
msgid "`noreorder' must be set before `nomacro'"
msgstr "«noreorder» Ñлід вÑтановити до «nomacro»"
-#: config/tc-mips.c:16816
+#: config/tc-mips.c:16809
msgid ".set pop with no .set push"
msgstr ".set pop без .set push"
-#: config/tc-mips.c:16835
+#: config/tc-mips.c:16828
#, c-format
msgid "tried to set unrecognized symbol: %s\n"
msgstr "Ñпроба вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð½ÐµÑ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ð¾Ð³Ð¾ Ñимволу: %s\n"
-#: config/tc-mips.c:16908
+#: config/tc-mips.c:16901
#, c-format
msgid ".module used with unrecognized symbol: %s\n"
msgstr ".module викориÑтано із невідомим Ñимволом: %s\n"
-#: config/tc-mips.c:16914
+#: config/tc-mips.c:16907
msgid ".module is not permitted after generating code"
msgstr ".module не можна викориÑтовувати піÑÐ»Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ ÐºÐ¾Ð´Ñƒ"
-#: config/tc-mips.c:16974 config/tc-mips.c:17053 config/tc-mips.c:17157
-#: config/tc-mips.c:17187 config/tc-mips.c:17236
+#: config/tc-mips.c:16967 config/tc-mips.c:17046 config/tc-mips.c:17150
+#: config/tc-mips.c:17180 config/tc-mips.c:17229
#, c-format
msgid "%s not supported in MIPS16 mode"
msgstr "у режимі MIPS16 не передбачено підтримки %s"
-#: config/tc-mips.c:16981
+#: config/tc-mips.c:16974
msgid ".cpload not in noreorder section"
msgstr ".cpload не у розділі noreorder"
-#: config/tc-mips.c:17062 config/tc-mips.c:17081
+#: config/tc-mips.c:17055 config/tc-mips.c:17074
msgid "missing argument separator ',' for .cpsetup"
msgstr "пропущено роздільник аргументів, «,», у .cpsetup"
-#: config/tc-mips.c:17279 config/tc-riscv.c:3344
+#: config/tc-mips.c:17272 config/tc-riscv.c:3833
#, c-format
msgid "unsupported use of %s"
msgstr "непідтримуване викориÑÑ‚Ð°Ð½Ð½Ñ %s"
-#: config/tc-mips.c:17370
+#: config/tc-mips.c:17363
msgid "unsupported use of .gpword"
msgstr "непідтримуване викориÑÑ‚Ð°Ð½Ð½Ñ .gpword"
-#: config/tc-mips.c:17408
+#: config/tc-mips.c:17401
msgid "unsupported use of .gpdword"
msgstr "непідтримуване викориÑÑ‚Ð°Ð½Ð½Ñ .gpdword"
-#: config/tc-mips.c:17440
+#: config/tc-mips.c:17433
msgid "unsupported use of .ehword"
msgstr "непідтримуване викориÑÑ‚Ð°Ð½Ð½Ñ .ehword"
-#: config/tc-mips.c:17527
+#: config/tc-mips.c:17520
msgid "bad .nan directive"
msgstr "помилкова директива .nan"
-#: config/tc-mips.c:17576
+#: config/tc-mips.c:17569
#, c-format
msgid "ignoring attempt to redefine symbol %s"
msgstr "ігноруємо Ñпробу повторно визначити Ñимвол %s"
-#: config/tc-mips.c:17591 ecoff.c:3359
+#: config/tc-mips.c:17584 ecoff.c:3359
msgid "bad .weakext directive"
msgstr "помилкова директива .weakext"
-#: config/tc-mips.c:18560 config/tc-mips.c:18837
+#: config/tc-mips.c:18553 config/tc-mips.c:18830
msgid "relaxed out-of-range branch into a jump"
msgstr "оптимізуємо Ð²Ñ–Ð´Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ Ð·Ð° межі діапазону у перехід (jump)"
-#: config/tc-mips.c:19060
+#: config/tc-mips.c:19053
msgid "extended instruction in a branch delay slot"
msgstr "розширена інÑÑ‚Ñ€ÑƒÐºÑ†Ñ–Ñ Ñƒ Ñлоті затримки відгалуженнÑ"
-#: config/tc-mips.c:19174 config/tc-xtensa.c:1704 config/tc-xtensa.c:1982
+#: config/tc-mips.c:19167 config/tc-xtensa.c:1704 config/tc-xtensa.c:1982
msgid "unsupported relocation"
msgstr "непідтримуване переÑуваннÑ"
-#: config/tc-mips.c:19682 config/tc-score.c:5644
+#: config/tc-mips.c:19675 config/tc-score.c:5644
msgid "expected simple number"
msgstr "мало бути проÑте чиÑло"
-#: config/tc-mips.c:19710 config/tc-score.c:5671
+#: config/tc-mips.c:19703 config/tc-score.c:5671
msgid "invalid number"
msgstr "некоректне чиÑло"
-#: config/tc-mips.c:19787 ecoff.c:2988
+#: config/tc-mips.c:19780 ecoff.c:2988
msgid ".end directive without a preceding .ent directive"
msgstr "Директива .end без попередньої директиві .ent"
-#: config/tc-mips.c:19796
+#: config/tc-mips.c:19789
msgid ".end symbol does not match .ent symbol"
msgstr "Символ .end не збігаєтьÑÑ Ð· Ñимволом .ent"
-#: config/tc-mips.c:19873
+#: config/tc-mips.c:19866
msgid ".ent or .aent not in text section"
msgstr ".ent або .aent поза межами розділу text"
-#: config/tc-mips.c:19876 config/tc-score.c:5703
+#: config/tc-mips.c:19869 config/tc-score.c:5703
msgid "missing .end"
msgstr "не виÑтачає .end"
-#: config/tc-mips.c:19959
+#: config/tc-mips.c:19952
msgid ".mask/.fmask outside of .ent"
msgstr ".mask/.fmask за межами блоку .ent"
-#: config/tc-mips.c:19966
+#: config/tc-mips.c:19959
msgid "bad .mask/.fmask directive"
msgstr "помилкова директива .mask/.fmask"
-#: config/tc-mips.c:20269
+#: config/tc-mips.c:20262
#, c-format
msgid "bad value (%s) for %s"
msgstr "помилкове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ (%s) %s"
-#: config/tc-mips.c:20333
+#: config/tc-mips.c:20326
#, c-format
msgid ""
"MIPS options:\n"
@@ -12785,7 +13073,7 @@ msgstr ""
"-G N\t\t\tдозволити поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° об’єкти до N байтів\n"
"\t\t\tнеÑвно за допомогою регіÑтра gp [типово 8]\n"
-#: config/tc-mips.c:20340
+#: config/tc-mips.c:20333
#, c-format
msgid ""
"-mips1\t\t\tgenerate MIPS ISA I instructions\n"
@@ -12822,7 +13110,7 @@ msgstr ""
"-mips64r6 викориÑтовувати інÑтрукції MIPS32 випуÑк 6 ISA\n"
"-march=CPU/-mtune=CPU\tÑтворити код/план Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑора CPU, де значеннÑм CPU може бути:\n"
-#: config/tc-mips.c:20365
+#: config/tc-mips.c:20358
#, c-format
msgid ""
"-mCPU\t\t\tequivalent to -march=CPU -mtune=CPU. Deprecated.\n"
@@ -12833,7 +13121,7 @@ msgstr ""
"-no-mCPU\t\tне Ñтворювати код, Ñпецифічний Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑора CPU.\n"
"\t\t\tÐ”Ð»Ñ -mCPU та -no-mCPU, CPU має бути одним зі значень:\n"
-#: config/tc-mips.c:20378
+#: config/tc-mips.c:20371
#, c-format
msgid ""
"-mips16\t\t\tgenerate mips16 instructions\n"
@@ -12842,7 +13130,7 @@ msgstr ""
"-mips16\t\t\tвикориÑтовувати інÑтрукції mips16\n"
"-no-mips16\t\tне викориÑтовувати інÑтрукції mips16\n"
-#: config/tc-mips.c:20381
+#: config/tc-mips.c:20374
#, c-format
msgid ""
"-mmips16e2\t\tgenerate MIPS16e2 instructions\n"
@@ -12851,7 +13139,7 @@ msgstr ""
"-mmips16e2\t\tвикориÑтовувати інÑтрукції MIPS16e2\n"
"-mno-mips16e2\t\tне викориÑтовувати інÑтрукції MIPS16e2\n"
-#: config/tc-mips.c:20384
+#: config/tc-mips.c:20377
#, c-format
msgid ""
"-mmicromips\t\tgenerate microMIPS instructions\n"
@@ -12860,7 +13148,7 @@ msgstr ""
"-mmicromips\t\tвикориÑтовувати інÑтрукції microMIPS\n"
"-mno-micromips\t\tне викориÑтовувати інÑтрукції microMIPS\n"
-#: config/tc-mips.c:20387
+#: config/tc-mips.c:20380
#, c-format
msgid ""
"-msmartmips\t\tgenerate smartmips instructions\n"
@@ -12869,7 +13157,7 @@ msgstr ""
"-msmartmips\t\tвикориÑтовувати інÑтрукції smartmips\n"
"-mno-smartmips\t\tне викориÑтовувати інÑтрукції smartmips\n"
-#: config/tc-mips.c:20390
+#: config/tc-mips.c:20383
#, c-format
msgid ""
"-mdsp\t\t\tgenerate DSP instructions\n"
@@ -12878,7 +13166,7 @@ msgstr ""
"-mdsp\t\t\tвикориÑтовувати інÑтрукції DSP\n"
"-mno-dsp\t\tне викориÑтовувати інÑтрукції DSP\n"
-#: config/tc-mips.c:20393
+#: config/tc-mips.c:20386
#, c-format
msgid ""
"-mdspr2\t\t\tgenerate DSP R2 instructions\n"
@@ -12887,7 +13175,7 @@ msgstr ""
"-mdspr2\t\t\tвикориÑтовувати інÑтрукції DSP R2\n"
"-mno-dspr2\t\tне викориÑтовувати інÑтрукції DSP R2\n"
-#: config/tc-mips.c:20396
+#: config/tc-mips.c:20389
#, c-format
msgid ""
"-mdspr3\t\t\tgenerate DSP R3 instructions\n"
@@ -12896,7 +13184,7 @@ msgstr ""
"-mdspr3\t\t\tвикориÑтовувати інÑтрукції DSP R3\n"
"-mno-dspr3\t\tне викориÑтовувати інÑтрукції DSP R3\n"
-#: config/tc-mips.c:20399
+#: config/tc-mips.c:20392
#, c-format
msgid ""
"-mmt\t\t\tgenerate MT instructions\n"
@@ -12905,7 +13193,7 @@ msgstr ""
"-mmt\t\t\tвикориÑтовувати інÑтрукції MT\n"
"-mno-mt\t\t\tне викориÑтовувати інÑтрукції MT\n"
-#: config/tc-mips.c:20402
+#: config/tc-mips.c:20395
#, c-format
msgid ""
"-mmcu\t\t\tgenerate MCU instructions\n"
@@ -12914,7 +13202,7 @@ msgstr ""
"-mmcu\t\t\tвикориÑтовувати інÑтрукції MCU\n"
"-mno-mcu\t\tне викориÑтовувати інÑтрукції MCU\n"
-#: config/tc-mips.c:20405
+#: config/tc-mips.c:20398
#, c-format
msgid ""
"-mmsa\t\t\tgenerate MSA instructions\n"
@@ -12923,7 +13211,7 @@ msgstr ""
"-mmsa\t\t\tвикориÑтовувати інÑтрукції MSA\n"
"-mno-msa\t\tне викориÑтовувати інÑтрукції MSA\n"
-#: config/tc-mips.c:20408
+#: config/tc-mips.c:20401
#, c-format
msgid ""
"-mxpa\t\t\tgenerate eXtended Physical Address (XPA) instructions\n"
@@ -12932,7 +13220,7 @@ msgstr ""
"-mxpa\t\t\tвикориÑтовувати інÑтрукції eXtended Physical Address (XPA)\n"
"-mno-xpa\t\tне викориÑтовувати інÑтрукції eXtended Physical Address (XPA)\n"
-#: config/tc-mips.c:20411
+#: config/tc-mips.c:20404
#, c-format
msgid ""
"-mvirt\t\t\tgenerate Virtualization instructions\n"
@@ -12941,7 +13229,7 @@ msgstr ""
"-mvirt\t\t\tвикориÑтовувати інÑтрукції Virtualization\n"
"-mno-virt\t\tне викориÑтовувати інÑтрукції Virtualization\n"
-#: config/tc-mips.c:20414
+#: config/tc-mips.c:20407
#, c-format
msgid ""
"-mcrc\t\t\tgenerate CRC instructions\n"
@@ -12950,7 +13238,7 @@ msgstr ""
"-mcrc\t\t\tвикориÑтовувати інÑтрукції CRC\n"
"-mno-crc\t\t\tне викориÑтовувати інÑтрукції CRC\n"
-#: config/tc-mips.c:20417
+#: config/tc-mips.c:20410
#, c-format
msgid ""
"-mginv\t\t\tgenerate Global INValidate (GINV) instructions\n"
@@ -12959,7 +13247,7 @@ msgstr ""
"-mginv\t\t\tвикориÑтовувати інÑтрукції Global INValidate (GINV)\n"
"-mno-ginvt\t\t\tне викориÑтовувати інÑтрукції Global INValidate\n"
-#: config/tc-mips.c:20420
+#: config/tc-mips.c:20413
#, c-format
msgid ""
"-mloongson-mmi\t\tgenerate Loongson MultiMedia extensions Instructions (MMI) instructions\n"
@@ -12968,7 +13256,7 @@ msgstr ""
"-mloongson-mmi\t\tÑтворити інÑтрукції мультимедійних розширень Loongson (MMI)\n"
"-mno-loongson-mmi\tне Ñтворювати інÑтрукції мультимедійних розширень Loongson\n"
-#: config/tc-mips.c:20423
+#: config/tc-mips.c:20416
#, c-format
msgid ""
"-mloongson-cam\t\tgenerate Loongson Content Address Memory (CAM) instructions\n"
@@ -12977,7 +13265,7 @@ msgstr ""
"-mloongson-cam\t\tÑтворити інÑтрукції Loongson Content Address Memory (CAM)\n"
"-mno-loongson-cam\tне Ñтворювати інÑтрукції Loongson Content Address Memory\n"
-#: config/tc-mips.c:20426
+#: config/tc-mips.c:20419
#, c-format
msgid ""
"-mloongson-ext\t\tgenerate Loongson EXTensions (EXT) instructions\n"
@@ -12986,7 +13274,7 @@ msgstr ""
"-mloongson-ext\t\tÑтворити інÑтрукції Loongson EXTensions (EXT)\n"
"-mno-loongson-ext\tне Ñтворювати інÑтрукції Loongson EXTensions\n"
-#: config/tc-mips.c:20429
+#: config/tc-mips.c:20422
#, c-format
msgid ""
"-mloongson-ext2\t\tgenerate Loongson EXTensions R2 (EXT2) instructions\n"
@@ -12995,7 +13283,7 @@ msgstr ""
"-mloongson-ext2\t\tÑтворити інÑтрукції Loongson EXTensions R2 (EXT2)\n"
"-mno-loongson-ext2\tне Ñтворювати інÑтрукції Loongson EXTensions R2\n"
-#: config/tc-mips.c:20432
+#: config/tc-mips.c:20425
#, c-format
msgid ""
"-minsn32\t\tonly generate 32-bit microMIPS instructions\n"
@@ -13004,7 +13292,7 @@ msgstr ""
"-minsn32\t\tвикориÑтовувати лише 32-бітові інÑтрукції microMIPS\n"
"-mno-insn32\t\tвикориÑтовувати уÑÑ– інÑтрукції microMIPS\n"
-#: config/tc-mips.c:20436
+#: config/tc-mips.c:20429
#, c-format
msgid ""
"-mfix-loongson3-llsc\twork around Loongson3 LL/SC errata, default\n"
@@ -13013,7 +13301,7 @@ msgstr ""
"-mfix-loongson3-llsc\tобійти помилки у Loongson3 LL/SC, типовий варіант\n"
"-mno-fix-loongson3-llsc\tвимкнути обхід помилок у Loongson3 LL/SC\n"
-#: config/tc-mips.c:20440
+#: config/tc-mips.c:20433
#, c-format
msgid ""
"-mfix-loongson3-llsc\twork around Loongson3 LL/SC errata\n"
@@ -13022,7 +13310,7 @@ msgstr ""
"-mfix-loongson3-llsc\tобійти помилки у Loongson3 LL/SC\n"
"-mno-fix-loongson3-llsc\tвимкнути обхід помилок у Loongson3 LL/SC, типовий варіант\n"
-#: config/tc-mips.c:20444
+#: config/tc-mips.c:20437
#, c-format
msgid ""
"-mfix-loongson2f-jump\twork around Loongson2F JUMP instructions\n"
@@ -13061,7 +13349,7 @@ msgstr ""
"--trap, --no-break\tловити Ð²Ð¸ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð´Ñ–Ð»ÐµÐ½Ð½Ñ Ð½Ð° 0 Ñ– Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ Ð¼Ð½Ð¾Ð¶ÐµÐ½Ð½Ñ\n"
"--break, --no-trap\tперериватиÑÑ Ð½Ð° виключеннÑÑ… Ð´Ñ–Ð»ÐµÐ½Ð½Ñ Ð½Ð° 0 Ñ– Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ Ð¼Ð½Ð¾Ð¶ÐµÐ½Ð½Ñ\n"
-#: config/tc-mips.c:20462
+#: config/tc-mips.c:20455
#, c-format
msgid ""
"-mhard-float\t\tallow floating-point instructions\n"
@@ -13084,7 +13372,7 @@ msgstr ""
"-mno-ignore-branch-isa\tвідкидати некоректні гілки із вимогою Ð¿ÐµÑ€ÐµÐ¼Ð¸ÐºÐ°Ð½Ð½Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ñƒ ISA\n"
"-mnan=КОДУВÐÐÐЯ\t\tвибрати угоду з ÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ NaN IEEE 754 з таких варіантів:\n"
-#: config/tc-mips.c:20480
+#: config/tc-mips.c:20473
#, c-format
msgid ""
"-KPIC, -call_shared\tgenerate SVR4 position independent code\n"
@@ -13108,26 +13396,26 @@ msgstr ""
" викориÑтаннÑ) коду\n"
"-mabi=ABI\t\tÑтворити ÑуміÑний з ABI об’єктний файл длÑ:\n"
-#: config/tc-mips.c:20501
+#: config/tc-mips.c:20494
#, c-format
msgid "-32\t\t\tcreate o32 ABI object file%s\n"
msgstr "-32\t\t\tÑтворити об'єктний файл ABI o32%s\n"
-#: config/tc-mips.c:20503 config/tc-mips.c:20506 config/tc-mips.c:20509
+#: config/tc-mips.c:20496 config/tc-mips.c:20499 config/tc-mips.c:20502
msgid " (default)"
msgstr " (типове значеннÑ)"
-#: config/tc-mips.c:20504
+#: config/tc-mips.c:20497
#, c-format
msgid "-n32\t\t\tcreate n32 ABI object file%s\n"
msgstr "-n32\t\t\tÑтворити об'єктний файл ABI n32%s\n"
-#: config/tc-mips.c:20507
+#: config/tc-mips.c:20500
#, c-format
msgid "-64\t\t\tcreate 64 ABI object file%s\n"
msgstr "-64\t\t\tÑтворити об'єктний файл ABI 64%s\n"
-#: config/tc-mips.c:20589
+#: config/tc-mips.c:20582
msgid "missing .end at end of assembly"
msgstr "пропущено .end наприкінці коду"
@@ -13210,8 +13498,8 @@ msgstr "невідомий код операції: «%s»"
msgid "specified location wasn't TETRA-aligned"
msgstr "вказане Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ðµ було вирівнÑно за TETRA"
-#: config/tc-mmix.c:973 config/tc-mmix.c:988 config/tc-mmix.c:4225
-#: config/tc-mmix.c:4241
+#: config/tc-mmix.c:973 config/tc-mmix.c:988 config/tc-mmix.c:4224
+#: config/tc-mmix.c:4240
msgid "unaligned data at an absolute location is not supported"
msgstr "підтримки невирівнÑних даних за абÑолютним розташуваннÑм не передбачено"
@@ -13333,52 +13621,48 @@ msgstr "BSPEC без ESPEC."
msgid "LOC to section unknown or indeterminable at first pass"
msgstr "LOC до розділу Ñ” невідомим або непридатним до Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð½Ð° першому проході"
-#: config/tc-mmix.c:3746
-msgid "GREG expression too complicated"
-msgstr "вираз GREG Ñ” надто Ñкладним"
-
-#: config/tc-mmix.c:3761
+#: config/tc-mmix.c:3760
msgid "internal: GREG expression not resolved to section"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: за виразом GREG не можна визначити розділ"
-#: config/tc-mmix.c:3810
+#: config/tc-mmix.c:3809
msgid "register section has contents\n"
msgstr "у розділі регіÑтрів міÑÑ‚ÑÑ‚ÑŒÑÑ Ð´Ð°Ð½Ñ–\n"
-#: config/tc-mmix.c:3936
+#: config/tc-mmix.c:3935
msgid "section change from within a BSPEC/ESPEC pair is not supported"
msgstr "підтримки зміни розділу з Ñередини пари BSPEC/ESPEC не передбачено"
-#: config/tc-mmix.c:3957
+#: config/tc-mmix.c:3956
msgid "directive LOC from within a BSPEC/ESPEC pair is not supported"
msgstr "підтримки директиви LOC з Ñередини пари BSPEC/ESPEC не передбачено"
-#: config/tc-mmix.c:3967
+#: config/tc-mmix.c:3966
msgid "invalid LOC expression"
msgstr "некоректний вираз LOC"
-#: config/tc-mmix.c:4012 config/tc-mmix.c:4039
+#: config/tc-mmix.c:4011 config/tc-mmix.c:4038
msgid "LOC expression stepping backwards is not supported"
msgstr "підтримки виразів LOC із відходом назад не передбачено"
#. We will only get here in rare cases involving #NO_APP,
#. where the unterminated string is not recognized by the
#. preformatting pass.
-#: config/tc-mmix.c:4148 config/tc-mmix.c:4306 config/tc-z80.c:3190
+#: config/tc-mmix.c:4147 config/tc-mmix.c:4305 config/tc-z80.c:3190
msgid "unterminated string"
msgstr "незавершений Ñ€Ñдок"
-#: config/tc-mmix.c:4165
+#: config/tc-mmix.c:4164
msgid "BYTE expression not a pure number"
msgstr "вираз BYTE не Ñ” Ñуто чиÑловим"
#. Note that mmixal does not allow negative numbers in
#. BYTE sequences, so neither should we.
-#: config/tc-mmix.c:4174
+#: config/tc-mmix.c:4173
msgid "BYTE expression not in the range 0..255"
msgstr "вираз BYTE не належить діапазону від 0 до 255"
-#: config/tc-mmix.c:4223 config/tc-mmix.c:4239
+#: config/tc-mmix.c:4222 config/tc-mmix.c:4238
msgid "data item with alignment larger than location"
msgstr "Ð·Ð°Ð¿Ð¸Ñ Ð´Ð°Ð½Ð¸Ñ… з вирівнюваннÑм, що перевищує розміри міÑÑ†Ñ Ñ—Ñ…Ð½ÑŒÐ¾Ð³Ð¾ перебуваннÑ"
@@ -13397,15 +13681,15 @@ msgstr ""
"Параметри MN10200:\n"
"ще немає\n"
-#: config/tc-mn10200.c:896 config/tc-mn10300.c:1253 config/tc-s390.c:1691
-#: config/tc-v850.c:2328
+#: config/tc-mn10200.c:889 config/tc-mn10300.c:1253 config/tc-s390.c:1691
+#: config/tc-v850.c:2325
#, c-format
msgid "Unrecognized opcode: `%s'"
msgstr "Ðерозпізнаний код операції: «%s»"
#. xgettext:c-format.
-#: config/tc-mn10200.c:1139 config/tc-mn10300.c:1821 config/tc-ppc.c:3969
-#: config/tc-s390.c:1604 config/tc-v850.c:3043
+#: config/tc-mn10200.c:1132 config/tc-mn10300.c:1821 config/tc-ppc.c:3988
+#: config/tc-s390.c:1604 config/tc-v850.c:3040
#, c-format
msgid "junk at end of line: `%s'"
msgstr "зайві Ñимволи наприкінці Ñ€Ñдка: «%s»"
@@ -14399,11 +14683,11 @@ msgid "Addend to unresolved symbol is not on word boundary."
msgstr "Доданок до невизначено Ñимволу не перебуває на межі Ñлова."
#. Should never here.
-#: config/tc-nds32.c:7656
+#: config/tc-nds32.c:7617
msgid "Used FPU instructions requires enabling FPU extension"
msgstr "ВикориÑтані інÑтрукції FPU потребують Ð²Ð¼Ð¸ÐºÐ°Ð½Ð½Ñ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ FPU"
-#: config/tc-nds32.c:7853
+#: config/tc-nds32.c:7813
#, c-format
msgid "Internal error: Unknown fixup type %d (`%s')"
msgstr "Ð’Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: невідомий тип ÐºÐ¾Ñ€Ð¸Ð³ÑƒÐ²Ð°Ð½Ð½Ñ %d («%s»)"
@@ -14432,7 +14716,7 @@ msgstr "помилка під Ñ‡Ð°Ñ Ñпроби перевірити на пе
#: config/tc-nios2.c:1156 config/tc-pru.c:572
#, c-format
msgid "immediate value 0x%x truncated to 0x%x"
-msgstr "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð½ÐµÐ³Ð°Ð¹Ð½Ð¾Ð³Ð¾ викориÑÑ‚Ð°Ð½Ð½Ñ 0x%x обрізано до 0x%x"
+msgstr "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¸ÑˆÐ²Ð¸Ð´ÑˆÐµÐ½Ð¾Ð³Ð¾ викориÑÑ‚Ð°Ð½Ð½Ñ 0x%x обрізано до 0x%x"
#: config/tc-nios2.c:1183 config/tc-pru.c:598
#, c-format
@@ -14488,12 +14772,12 @@ msgstr "не вдалоÑÑ Ñтворити 64-бітове переÑуванÐ
msgid "internal error: broken opcode descriptor for `%s %s'\n"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: пошкоджений деÑкриптор коду операції Ð´Ð»Ñ Â«%s %s»\n"
-#: config/tc-nios2.c:1480 config/tc-pru.c:863
+#: config/tc-nios2.c:1480 config/tc-pru.c:862
msgid "can't create relocation"
msgstr "не вдалоÑÑ Ñтворити переÑуваннÑ"
-#: config/tc-nios2.c:1511 config/tc-pru.c:997 config/tc-pru.c:1017
-#: config/tc-pru.c:1044 config/tc-pru.c:1063 config/tc-pru.c:1077
+#: config/tc-nios2.c:1511 config/tc-pru.c:996 config/tc-pru.c:1016
+#: config/tc-pru.c:1043 config/tc-pru.c:1062 config/tc-pru.c:1076
#, c-format
msgid "unknown register %s"
msgstr "невідомий регіÑÑ‚Ñ€, %s"
@@ -14555,13 +14839,13 @@ msgstr "r31 не можна викориÑтовувати разом із jmpr.
msgid "Invalid constant operand %s"
msgstr "Ðекоректний Ñталий операнд %s"
-#: config/tc-nios2.c:2990 config/tc-nios2.c:3014 config/tc-pru.c:1319
-#: config/tc-pru.c:1344 config/tc-pru.c:1364
+#: config/tc-nios2.c:2990 config/tc-nios2.c:3014 config/tc-pru.c:1318
+#: config/tc-pru.c:1343 config/tc-pru.c:1363
#, c-format
msgid "badly formed expression near %s"
msgstr "помилкове Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¸Ñ€Ð°Ð·Ñƒ поруч із %s"
-#: config/tc-nios2.c:3119 config/tc-pru.c:1390
+#: config/tc-nios2.c:3119 config/tc-pru.c:1389
#, c-format
msgid "expecting %c near %s"
msgstr "мало бути %c поруч із %s"
@@ -14582,12 +14866,12 @@ msgid "Big-endian R2 is not supported."
msgstr "Підтримки зворотного порÑдку байтів R2 не передбачено."
#. Unrecognised instruction - error.
-#: config/tc-nios2.c:3747 config/tc-pru.c:1717
+#: config/tc-nios2.c:3747 config/tc-pru.c:1716
#, c-format
msgid "unrecognised instruction %s"
msgstr "нерозпізнана інÑÑ‚Ñ€ÑƒÐºÑ†Ñ–Ñ %s"
-#: config/tc-nios2.c:3867 config/tc-pru.c:1773
+#: config/tc-nios2.c:3867 config/tc-pru.c:1772
#, c-format
msgid "can't represent relocation type %s"
msgstr "не вдалоÑÑ Ð¿Ñ€ÐµÐ´Ñтавити тип переÑÑƒÐ²Ð°Ð½Ð½Ñ %s"
@@ -14898,68 +15182,68 @@ msgstr ""
msgid "pcrel too far"
msgstr "pcrel надто далеко"
-#: config/tc-ppc.c:949 config/tc-ppc.c:957 config/tc-ppc.c:3456
+#: config/tc-ppc.c:961 config/tc-ppc.c:969 config/tc-ppc.c:3475
msgid "invalid register expression"
msgstr "некоректний регіÑÑ‚Ñ€ у виразі"
-#: config/tc-ppc.c:1122 config/tc-ppc.c:1180 config/tc-ppc.c:1228
+#: config/tc-ppc.c:1131 config/tc-ppc.c:1189 config/tc-ppc.c:1237
msgid "the use of -mvle requires big endian."
msgstr "викориÑÑ‚Ð°Ð½Ð½Ñ -mvle потребує зворотного порÑдку байтів."
-#: config/tc-ppc.c:1160 config/tc-ppc.c:1182
+#: config/tc-ppc.c:1169 config/tc-ppc.c:1191
msgid "the use of -mvle requires -a32."
msgstr "викориÑÑ‚Ð°Ð½Ð½Ñ -mvle потребує -a32."
-#: config/tc-ppc.c:1162
+#: config/tc-ppc.c:1171
#, c-format
msgid "%s unsupported"
msgstr "підтримки %s не передбачено"
-#: config/tc-ppc.c:1255 config/tc-s390.c:435 config/tc-s390.c:442
+#: config/tc-ppc.c:1264 config/tc-s390.c:435 config/tc-s390.c:442
#, c-format
msgid "invalid switch -m%s"
msgstr "некоректний перемикач -m%s"
-#: config/tc-ppc.c:1286
+#: config/tc-ppc.c:1295
msgid "--nops needs a numeric argument"
msgstr "--nops потребує чиÑлового аргументу"
-#: config/tc-ppc.c:1322
+#: config/tc-ppc.c:1331
#, c-format
msgid "PowerPC options:\n"
msgstr "Параметри PowerPC:\n"
-#: config/tc-ppc.c:1324
+#: config/tc-ppc.c:1333
#, c-format
msgid "-a32 generate ELF32/XCOFF32\n"
msgstr "-a32 Ñтворити ELF32/XCOFF32\n"
-#: config/tc-ppc.c:1327
+#: config/tc-ppc.c:1336
#, c-format
msgid "-a64 generate ELF64/XCOFF64\n"
msgstr "-a64 Ñтворити ELF64/XCOFF64\n"
-#: config/tc-ppc.c:1329
+#: config/tc-ppc.c:1338
#, c-format
msgid "-u ignored\n"
msgstr "-u цей параметр буде проігноровано\n"
-#: config/tc-ppc.c:1331
+#: config/tc-ppc.c:1340
#, c-format
msgid "-mpwrx, -mpwr2 generate code for POWER/2 (RIOS2)\n"
msgstr "-mpwrx, -mpwr2 Ñтворити код Ð´Ð»Ñ POWER/2 (RIOS2)\n"
-#: config/tc-ppc.c:1333
+#: config/tc-ppc.c:1342
#, c-format
msgid "-mpwr generate code for POWER (RIOS1)\n"
msgstr "-mpwr Ñтворити код Ð´Ð»Ñ POWER (RIOS1)\n"
-#: config/tc-ppc.c:1335
+#: config/tc-ppc.c:1344
#, c-format
msgid "-m601 generate code for PowerPC 601\n"
msgstr "-m601 Ñтворити код Ð´Ð»Ñ PowerPC 601\n"
-#: config/tc-ppc.c:1337
+#: config/tc-ppc.c:1346
#, c-format
msgid ""
"-mppc, -mppc32, -m603, -m604\n"
@@ -14968,32 +15252,32 @@ msgstr ""
"-mppc, -mppc32, -m603, -m604\n"
" Ñтворити код Ð´Ð»Ñ PowerPC 603/604\n"
-#: config/tc-ppc.c:1340
+#: config/tc-ppc.c:1349
#, c-format
msgid "-m403 generate code for PowerPC 403\n"
msgstr "-m403 Ñтворити код Ð´Ð»Ñ PowerPC 403\n"
-#: config/tc-ppc.c:1342
+#: config/tc-ppc.c:1351
#, c-format
msgid "-m405 generate code for PowerPC 405\n"
msgstr "-m405 Ñтворити код Ð´Ð»Ñ PowerPC 405\n"
-#: config/tc-ppc.c:1344
+#: config/tc-ppc.c:1353
#, c-format
msgid "-m440 generate code for PowerPC 440\n"
msgstr "-m440 Ñтворити код Ð´Ð»Ñ PowerPC 440\n"
-#: config/tc-ppc.c:1346
+#: config/tc-ppc.c:1355
#, c-format
msgid "-m464 generate code for PowerPC 464\n"
msgstr "-m464 Ñтворити код Ð´Ð»Ñ PowerPC 464\n"
-#: config/tc-ppc.c:1348
+#: config/tc-ppc.c:1357
#, c-format
msgid "-m476 generate code for PowerPC 476\n"
msgstr "-m476 Ñтворити код Ð´Ð»Ñ PowerPC 476\n"
-#: config/tc-ppc.c:1350
+#: config/tc-ppc.c:1359
#, c-format
msgid ""
"-m7400, -m7410, -m7450, -m7455\n"
@@ -15002,7 +15286,7 @@ msgstr ""
"-m7400, -m7410, -m7450, -m7455\n"
" Ñтворити код Ð´Ð»Ñ PowerPC 7400/7410/7450/7455\n"
-#: config/tc-ppc.c:1353
+#: config/tc-ppc.c:1362
#, c-format
msgid ""
"-m750cl, -mgekko, -mbroadway\n"
@@ -15011,37 +15295,37 @@ msgstr ""
"-m750cl, -mgekko, -mbroadway\n"
" Ñтворити код Ð´Ð»Ñ PowerPC 750cl/Gekko/Broadway\n"
-#: config/tc-ppc.c:1356
+#: config/tc-ppc.c:1365
#, c-format
msgid "-m821, -m850, -m860 generate code for PowerPC 821/850/860\n"
msgstr "-m821, -m850, -m860 Ñтворити код Ð´Ð»Ñ PowerPC 821/850/860\n"
-#: config/tc-ppc.c:1358
+#: config/tc-ppc.c:1367
#, c-format
msgid "-mppc64, -m620 generate code for PowerPC 620/625/630\n"
msgstr "-mppc64, -m620 Ñтворити код Ð´Ð»Ñ PowerPC 620/625/630\n"
-#: config/tc-ppc.c:1360
+#: config/tc-ppc.c:1369
#, c-format
msgid "-mppc64bridge generate code for PowerPC 64, including bridge insns\n"
msgstr "-mppc64bridge Ñтворити код Ð´Ð»Ñ PowerPC 64, включно із інÑтрукціÑми bridge\n"
-#: config/tc-ppc.c:1362
+#: config/tc-ppc.c:1371
#, c-format
msgid "-mbooke generate code for 32-bit PowerPC BookE\n"
msgstr "-mbooke Ñтворити код Ð´Ð»Ñ 32-бітового PowerPC BookE\n"
-#: config/tc-ppc.c:1364
+#: config/tc-ppc.c:1373
#, c-format
msgid "-ma2 generate code for A2 architecture\n"
msgstr "-ma2 Ñтворити код Ð´Ð»Ñ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ A2\n"
-#: config/tc-ppc.c:1366
+#: config/tc-ppc.c:1375
#, c-format
msgid "-mpower4, -mpwr4 generate code for Power4 architecture\n"
msgstr "-mpower4, -mpwr4 Ñтворити код Ð´Ð»Ñ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ Power4\n"
-#: config/tc-ppc.c:1368
+#: config/tc-ppc.c:1377
#, c-format
msgid ""
"-mpower5, -mpwr5, -mpwr5x\n"
@@ -15050,132 +15334,132 @@ msgstr ""
"-mpower5, -mpwr5, -mpwr5x\n"
" Ñтворити код Ð´Ð»Ñ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ Power5\n"
-#: config/tc-ppc.c:1371
+#: config/tc-ppc.c:1380
#, c-format
msgid "-mpower6, -mpwr6 generate code for Power6 architecture\n"
msgstr "-mpower6, -mpwr6 Ñтворити код Ð´Ð»Ñ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ Power6\n"
-#: config/tc-ppc.c:1373
+#: config/tc-ppc.c:1382
#, c-format
msgid "-mpower7, -mpwr7 generate code for Power7 architecture\n"
msgstr "-mpower7, -mpwr7 Ñтворити код Ð´Ð»Ñ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ Power7\n"
-#: config/tc-ppc.c:1375
+#: config/tc-ppc.c:1384
#, c-format
msgid "-mpower8, -mpwr8 generate code for Power8 architecture\n"
msgstr "-mpower8, -mpwr8 Ñтворити код Ð´Ð»Ñ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ Power8\n"
-#: config/tc-ppc.c:1377
+#: config/tc-ppc.c:1386
#, c-format
msgid "-mpower9, -mpwr9 generate code for Power9 architecture\n"
msgstr "-mpower9, -mpwr9 Ñтворити код Ð´Ð»Ñ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ Power9\n"
-#: config/tc-ppc.c:1379
+#: config/tc-ppc.c:1388
#, c-format
msgid "-mpower10, -mpwr10 generate code for Power10 architecture\n"
msgstr "-mpower10, -mpwr10 Ñтворити код Ð´Ð»Ñ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ Power10\n"
-#: config/tc-ppc.c:1381
+#: config/tc-ppc.c:1390
#, c-format
msgid "-mcell generate code for Cell Broadband Engine architecture\n"
msgstr "-mcell Ñтворити код Ð´Ð»Ñ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ Cell Broadband Engine\n"
-#: config/tc-ppc.c:1383
+#: config/tc-ppc.c:1392
#, c-format
msgid "-mcom generate code for Power/PowerPC common instructions\n"
msgstr "-mcom Ñтворити код Ð´Ð»Ñ Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¸Ñ… інÑтрукцій Power/PowerPC\n"
-#: config/tc-ppc.c:1385
+#: config/tc-ppc.c:1394
#, c-format
msgid "-many generate code for any architecture (PWR/PWRX/PPC)\n"
msgstr "-many Ñтворити код Ð´Ð»Ñ Ð±ÑƒÐ´ÑŒ-Ñкої архітектури (PWR/PWRX/PPC)\n"
-#: config/tc-ppc.c:1387
+#: config/tc-ppc.c:1396
#, c-format
msgid "-maltivec generate code for AltiVec\n"
msgstr "-maltivec Ñтворити код Ð´Ð»Ñ AltiVec\n"
-#: config/tc-ppc.c:1389
+#: config/tc-ppc.c:1398
#, c-format
msgid "-mvsx generate code for Vector-Scalar (VSX) instructions\n"
msgstr "-mvsx Ñтворити код Ð´Ð»Ñ Ð²ÐµÐºÑ‚Ð¾Ñ€-ÑкалÑрних інÑтрукцій (VSX)\n"
-#: config/tc-ppc.c:1391
+#: config/tc-ppc.c:1400
#, c-format
msgid "-me300 generate code for PowerPC e300 family\n"
msgstr "-me300 Ñтворити код Ð´Ð»Ñ ÑімейÑтва PowerPC e300\n"
-#: config/tc-ppc.c:1393
+#: config/tc-ppc.c:1402
#, c-format
msgid "-me500, -me500x2 generate code for Motorola e500 core complex\n"
msgstr "-me500, -me500x2 Ñтворити код Ð´Ð»Ñ ÐºÐ¾Ð¼Ð¿Ð»ÐµÐºÑу Ñдер Motorola e500\n"
-#: config/tc-ppc.c:1395
+#: config/tc-ppc.c:1404
#, c-format
msgid "-me500mc, generate code for Freescale e500mc core complex\n"
msgstr "-me500mc, Ñтворити код Ð´Ð»Ñ ÐºÐ¾Ð¼Ð¿Ð»ÐµÐºÑу Ñдер Freescale e500mc\n"
-#: config/tc-ppc.c:1397
+#: config/tc-ppc.c:1406
#, c-format
msgid "-me500mc64, generate code for Freescale e500mc64 core complex\n"
msgstr "-me500mc64 Ñтворити код Ð´Ð»Ñ ÐºÐ¾Ð¼Ð¿Ð»ÐµÐºÑу Ñдер Freescale e500mc64\n"
-#: config/tc-ppc.c:1399
+#: config/tc-ppc.c:1408
#, c-format
msgid "-me5500, generate code for Freescale e5500 core complex\n"
msgstr "-me5500, Ñтворити код Ð´Ð»Ñ ÐºÐ¾Ð¼Ð¿Ð»ÐµÐºÑу Ñдер Freescale e5500\n"
-#: config/tc-ppc.c:1401
+#: config/tc-ppc.c:1410
#, c-format
msgid "-me6500, generate code for Freescale e6500 core complex\n"
msgstr "-me6500, Ñтворити код Ð´Ð»Ñ ÐºÐ¾Ð¼Ð¿Ð»ÐµÐºÑу Ñдер Freescale e6500\n"
-#: config/tc-ppc.c:1403
+#: config/tc-ppc.c:1412
#, c-format
msgid "-mspe generate code for Motorola SPE instructions\n"
msgstr "-mspe Ñтворити код Ð´Ð»Ñ Ñ–Ð½Ñтрукцій Motorola SPE\n"
-#: config/tc-ppc.c:1405
+#: config/tc-ppc.c:1414
#, c-format
msgid "-mspe2 generate code for Freescale SPE2 instructions\n"
msgstr "-mspe2 Ñтворити код Ð´Ð»Ñ Ñ–Ð½Ñтрукцій Freescale SPE2\n"
-#: config/tc-ppc.c:1407
+#: config/tc-ppc.c:1416
#, c-format
msgid "-mvle generate code for Freescale VLE instructions\n"
msgstr "-mvle Ñтворити код Ð´Ð»Ñ Ñ–Ð½Ñтрукцій Freescale VLE\n"
-#: config/tc-ppc.c:1409
+#: config/tc-ppc.c:1418
#, c-format
msgid "-mtitan generate code for AppliedMicro Titan core complex\n"
msgstr "-mtitan Ñтворити код Ð´Ð»Ñ ÐºÐ¾Ð¼Ð¿Ð»ÐµÐºÑу Ñдер AppliedMicro Titan\n"
-#: config/tc-ppc.c:1411
+#: config/tc-ppc.c:1420
#, c-format
msgid "-mregnames Allow symbolic names for registers\n"
msgstr "-mregnames дозволити Ñимволічні назви Ð´Ð»Ñ Ñ€ÐµÐ³Ñ–Ñтрів\n"
-#: config/tc-ppc.c:1413
+#: config/tc-ppc.c:1422
#, c-format
msgid "-mno-regnames Do not allow symbolic names for registers\n"
msgstr "-mno-regnames не дозволÑти Ñимволічні назви Ð´Ð»Ñ Ñ€ÐµÐ³Ñ–Ñтрів\n"
-#: config/tc-ppc.c:1416
+#: config/tc-ppc.c:1425
#, c-format
msgid "-mrelocatable support for GCC's -mrelocatble option\n"
msgstr "-mrelocatable ÑкориÑтатиÑÑ Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¾ÑŽ параметра -mrelocatble GCC\n"
-#: config/tc-ppc.c:1418
+#: config/tc-ppc.c:1427
#, c-format
msgid "-mrelocatable-lib support for GCC's -mrelocatble-lib option\n"
msgstr "-mrelocatable-lib ÑкориÑтатиÑÑ Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¾ÑŽ параметра -mrelocatble-lib GCC\n"
-#: config/tc-ppc.c:1420
+#: config/tc-ppc.c:1429
#, c-format
msgid "-memb set PPC_EMB bit in ELF flags\n"
msgstr "-memb вÑтановити біт PPC_EMB у прапорцÑÑ… ELF\n"
-#: config/tc-ppc.c:1422
+#: config/tc-ppc.c:1431
#, c-format
msgid ""
"-mlittle, -mlittle-endian, -le\n"
@@ -15184,7 +15468,7 @@ msgstr ""
"-mlittle, -mlittle-endian, -le\n"
" Ñтворити код Ð´Ð»Ñ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ із прÑмим порÑдком байтів\n"
-#: config/tc-ppc.c:1425
+#: config/tc-ppc.c:1434
#, c-format
msgid ""
"-mbig, -mbig-endian, -be\n"
@@ -15193,363 +15477,379 @@ msgstr ""
"-mbig, -mbig-endian, -be\n"
" Ñтворити код Ð´Ð»Ñ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ із зворотним порÑдком байтів\n"
-#: config/tc-ppc.c:1428
+#: config/tc-ppc.c:1437
#, c-format
msgid "-msolaris generate code for Solaris\n"
msgstr "-msolaris Ñтворити код Ð´Ð»Ñ Solaris\n"
-#: config/tc-ppc.c:1430
+#: config/tc-ppc.c:1439
#, c-format
msgid "-mno-solaris do not generate code for Solaris\n"
msgstr "-mno-solaris не Ñтворювати код Ð´Ð»Ñ Solaris\n"
-#: config/tc-ppc.c:1432
+#: config/tc-ppc.c:1441
#, c-format
msgid "-K PIC set EF_PPC_RELOCATABLE_LIB in ELF flags\n"
msgstr "-K PIC вÑтановити EF_PPC_RELOCATABLE_LIB у прапорцÑÑ… ELF\n"
-#: config/tc-ppc.c:1434
+#: config/tc-ppc.c:1443
#, c-format
msgid "-V print assembler version number\n"
msgstr "-V вивеÑти дані щодо номера верÑÑ–Ñ— аÑемблера\n"
-#: config/tc-ppc.c:1436
+#: config/tc-ppc.c:1445
#, c-format
msgid "-Qy, -Qn ignored\n"
msgstr "-Qy, -Qn буде проігноровано\n"
-#: config/tc-ppc.c:1439
+#: config/tc-ppc.c:1448
#, c-format
msgid "-nops=count when aligning, more than COUNT nops uses a branch\n"
msgstr "-nops=кількіÑÑ‚ÑŒ під Ñ‡Ð°Ñ Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ ÐºÐ¾Ð´ із вказаної кількоÑÑ‚Ñ– nop викориÑтовує гілку\n"
-#: config/tc-ppc.c:1441
+#: config/tc-ppc.c:1450
#, c-format
msgid "-ppc476-workaround warn if emitting data to code sections\n"
msgstr "-ppc476-workaround попереджати про Ð²Ð¸Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… до розділів коду\n"
-#: config/tc-ppc.c:1471
+#: config/tc-ppc.c:1480
#, c-format
msgid "unknown default cpu = %s, os = %s"
msgstr "невідомі типові Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑора = %s, ОС = %s"
-#: config/tc-ppc.c:1499
+#: config/tc-ppc.c:1508
msgid "neither Power nor PowerPC opcodes were selected."
msgstr "не вибрано ні коди операцій Power, ні коди операцій PowerPC."
-#: config/tc-ppc.c:1557
+#: config/tc-ppc.c:1566
#, c-format
msgid "mask trims opcode bits for %s"
msgstr "маÑкувати Ð¾Ð±Ñ€Ñ–Ð·Ð°Ð½Ð½Ñ Ð±Ñ–Ñ‚Ñ–Ð² кодів операцій Ð´Ð»Ñ %s"
-#: config/tc-ppc.c:1567
+#: config/tc-ppc.c:1576
#, c-format
msgid "operand index error for %s"
msgstr "помилка індекÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¾Ð¿ÐµÑ€Ð°Ð½Ð´Ð° Ð´Ð»Ñ %s"
-#: config/tc-ppc.c:1593
+#: config/tc-ppc.c:1602
#, c-format
msgid "operand %d overlap in %s"
msgstr "операнд %d перекриваєтьÑÑ Ñƒ %s"
-#: config/tc-ppc.c:1602
+#: config/tc-ppc.c:1611
#, c-format
msgid "non-optional operand %d follows optional operand in %s"
msgstr "за необов'Ñзковим операндом %d Ñлідує необов'Ñзковий операнд у %s"
-#: config/tc-ppc.c:1652
+#: config/tc-ppc.c:1661
#, c-format
msgid "powerpc_operands[%d].bitm invalid"
msgstr "некоректне powerpc_operands[%d].bitm"
-#: config/tc-ppc.c:1659
+#: config/tc-ppc.c:1668
#, c-format
msgid "powerpc_operands[%d] duplicates powerpc_operands[%d]"
msgstr "powerpc_operands[%d] дублює powerpc_operands[%d]"
-#: config/tc-ppc.c:1685 config/tc-ppc.c:1736 config/tc-ppc.c:1774
-#: config/tc-ppc.c:1812
+#: config/tc-ppc.c:1694 config/tc-ppc.c:1745 config/tc-ppc.c:1783
+#: config/tc-ppc.c:1821
#, c-format
msgid "major opcode is not sorted for %s"
msgstr "оÑновний код операції не впорÑдковано Ð´Ð»Ñ %s"
-#: config/tc-ppc.c:1691
+#: config/tc-ppc.c:1700
#, c-format
msgid "%s is enabled by vle flag"
msgstr "%s увімкнено за допомогою Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ vle"
-#: config/tc-ppc.c:1698
+#: config/tc-ppc.c:1707
#, c-format
msgid "%s not disabled by vle flag"
msgstr "%s не вимкнено прапорцем vle"
-#: config/tc-ppc.c:2208
+#: config/tc-ppc.c:2217
#, c-format
msgid "symbol+offset@%s means symbol@%s+offset"
msgstr "Ñимвол+зÑув@%s означає Ñимвол@%s+зÑув"
-#: config/tc-ppc.c:2228
+#: config/tc-ppc.c:2237
#, c-format
msgid "symbol+offset@%s not supported"
msgstr "підтримки Ñимвол+зÑув@%s не передбачено"
-#: config/tc-ppc.c:2303 config/tc-ppc.c:4267 config/tc-ppc.c:7399
+#: config/tc-ppc.c:2316 config/tc-ppc.c:4286 config/tc-ppc.c:7669
msgid "data in executable section"
msgstr "дані у виконуваному розділі"
-#: config/tc-ppc.c:2344
+#: config/tc-ppc.c:2357
msgid "expected comma after symbol-name: rest of line ignored."
msgstr "піÑÐ»Ñ Ð½Ð°Ð·Ð²Ð¸ Ñимволу мало бути вказано кому. Решту Ñ€Ñдка проігноровано."
-#: config/tc-ppc.c:2377
+#: config/tc-ppc.c:2390
#, c-format
msgid "ignoring attempt to re-define symbol `%s'."
msgstr "ігноруємо Ñпробу Ð¿ÐµÑ€ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñимволу «%s»."
-#: config/tc-ppc.c:2385
+#: config/tc-ppc.c:2398
#, c-format
msgid "length of .lcomm \"%s\" is already %ld. Not changed to %ld."
msgstr "довжиною .lcomm «%s» вже Ñ” %ld. Ðе змінено на %ld."
-#: config/tc-ppc.c:2403
+#: config/tc-ppc.c:2416
msgid "common alignment not a power of 2"
msgstr "загальне Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ Ð½Ðµ Ñ” Ñтепенем 2"
-#: config/tc-ppc.c:2445
+#: config/tc-ppc.c:2458
#, c-format
msgid "expected comma after name `%s' in .localentry directive"
msgstr "у директиві .localentry мало бути викориÑтано кому піÑÐ»Ñ Ð½Ð°Ð·Ð²Ð¸ «%s»"
-#: config/tc-ppc.c:2455
+#: config/tc-ppc.c:2468
msgid "missing expression in .localentry directive"
msgstr "пропущено вираз у директиві .localentry"
-#: config/tc-ppc.c:2476
+#: config/tc-ppc.c:2489
#, c-format
msgid ".localentry expression for `%s' is not a valid power of 2"
msgstr "вираз .localentry Ð´Ð»Ñ Â«%s» не Ñ” коректним Ñтепенем 2"
-#: config/tc-ppc.c:2493
+#: config/tc-ppc.c:2506
#, c-format
msgid ".localentry expression for `%s' does not evaluate to a constant"
msgstr "вираз .localentry Ð´Ð»Ñ Â«%s» не дорівнює Ñталій величині"
-#: config/tc-ppc.c:2508
+#: config/tc-ppc.c:2521
msgid "missing expression in .abiversion directive"
msgstr "у директиві .abiversion не виÑтачає виразу"
-#: config/tc-ppc.c:2517
+#: config/tc-ppc.c:2530
msgid ".abiversion expression does not evaluate to a constant"
msgstr "обчиÑÐ»ÐµÐ½Ð½Ñ Ð²Ð¸Ñ€Ð°Ð·Ñƒ .abiversion не призводить до Ñталої"
-#: config/tc-ppc.c:2597
+#: config/tc-ppc.c:2610
msgid "relocation cannot be done when using -mrelocatable"
msgstr "переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ðµ можна виконувати, Ñкщо викориÑтовуєтьÑÑ -mrelocatable"
-#: config/tc-ppc.c:2643
+#: config/tc-ppc.c:2656
msgid "TOC section size exceeds 64k"
msgstr "розмір розділу TOC перевищує 64 кілобайтів"
-#: config/tc-ppc.c:3197
+#: config/tc-ppc.c:3216
#, c-format
msgid "%s howto doesn't match size/pcrel in gas"
msgstr "%s howto не відповідає розміру/pcrel у gas"
-#: config/tc-ppc.c:3281
+#: config/tc-ppc.c:3300
#, c-format
msgid "unrecognized opcode: `%s'"
msgstr "нерозпізнаний код операції: «%s»"
#. lmw, stmw, lswi, lswx, stswi, stswx
-#: config/tc-ppc.c:3295
+#: config/tc-ppc.c:3314
#, c-format
msgid "`%s' invalid when little-endian"
msgstr "«%s» є некоректним у режимі little-endian"
-#: config/tc-ppc.c:3656
+#: config/tc-ppc.c:3675
#, c-format
msgid "@tls may not be used with \"%s\" operands"
msgstr "@tls не можна викориÑтовувати з операндами «%s»"
-#: config/tc-ppc.c:3659
+#: config/tc-ppc.c:3678
msgid "@tls may only be used in last operand"
msgstr "@tls можна викориÑтовувати лише у оÑтанньому операнді"
-#: config/tc-ppc.c:3697 config/tc-ppc.c:3707 config/tc-ppc.c:3717
-#: config/tc-ppc.c:3732
+#: config/tc-ppc.c:3716 config/tc-ppc.c:3726 config/tc-ppc.c:3736
+#: config/tc-ppc.c:3751
#, c-format
msgid "%s unsupported on this instruction"
msgstr "%s не Ñ” підтримуваним на цій інÑтрукції"
-#: config/tc-ppc.c:3779
+#: config/tc-ppc.c:3798
#, c-format
msgid "assuming %s on symbol"
msgstr "вважаємо %s Ð´Ð»Ñ Ñимволу"
-#: config/tc-ppc.c:3902
+#: config/tc-ppc.c:3921
msgid "unsupported relocation for DS offset field"
msgstr "непідтримуване переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ð¿Ð¾Ð»Ñ Ð²Ñ–Ð´Ñтупу DS"
-#: config/tc-ppc.c:3955
+#: config/tc-ppc.c:3974
#, c-format
msgid "syntax error; found `%c', expected `%c'"
msgstr "ÑинтакÑична помилка; виÑвлено «%c», мало бути «%c»"
-#: config/tc-ppc.c:3960
+#: config/tc-ppc.c:3979
#, c-format
msgid "syntax error; end of line, expected `%c'"
msgstr "ÑинтакÑична помилка; кінець Ñ€Ñдка, мало бути «%c»"
-#: config/tc-ppc.c:4025 config/tc-ppc.c:6576
+#: config/tc-ppc.c:4044 config/tc-ppc.c:6843
#, c-format
msgid "instruction address is not a multiple of %d"
msgstr "адреÑа інÑтрукції не Ñ” кратною до %d"
-#: config/tc-ppc.c:4151
+#: config/tc-ppc.c:4170
msgid "wrong number of operands"
msgstr "помилкова кількіÑÑ‚ÑŒ операндів"
-#: config/tc-ppc.c:4224
+#: config/tc-ppc.c:4243
msgid "bad .section directive: want a,e,v,w,x,M,S,G,T in string"
msgstr "помилкова директива .section: потрібне a,e,v,w,x,M,S,G,T у Ñ€Ñдку"
-#: config/tc-ppc.c:4307
+#: config/tc-ppc.c:4392
msgid "missing size"
msgstr "пропущено розмір"
-#: config/tc-ppc.c:4316
+#: config/tc-ppc.c:4401
msgid "negative size"
msgstr "від’ємний розмір"
-#: config/tc-ppc.c:4348
+#: config/tc-ppc.c:4428
+msgid "Unknown visibility field in .comm"
+msgstr "Ðевідоме поле видимоÑÑ‚Ñ– у .comm"
+
+#: config/tc-ppc.c:4446
msgid "missing real symbol name"
msgstr "пропущено Ñправжню назву Ñимволу"
-#: config/tc-ppc.c:4387
+#: config/tc-ppc.c:4485
msgid "attempt to redefine symbol"
msgstr "Ñпроба Ð¿ÐµÑ€ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñимволу"
-#: config/tc-ppc.c:4691
+#: config/tc-ppc.c:4794
#, c-format
msgid "no known dwarf XCOFF section for flag 0x%08x\n"
msgstr "немає відомого розділу XCOFF dwarf Ð´Ð»Ñ Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ 0x%08x\n"
-#: config/tc-ppc.c:4704
+#: config/tc-ppc.c:4807
#, c-format
msgid "label %s was not defined in this dwarf section"
msgstr "мітку %s у цьому розділі dwarf не визначено"
-#: config/tc-ppc.c:4818
+#: config/tc-ppc.c:4921
msgid "the XCOFF file format does not support arbitrary sections"
msgstr "у форматі файлів XCOFF не передбачено підтримки довільних розділів"
-#: config/tc-ppc.c:4889
+#: config/tc-ppc.c:4958
+msgid "Unknown visibility field in .extern"
+msgstr "Ðевідоме поле видимоÑÑ‚Ñ– в .extern"
+
+#: config/tc-ppc.c:4994
+msgid "Unknown visibility field in .globl"
+msgstr "Ðевідоме поле видимоÑÑ‚Ñ– у .globl"
+
+#: config/tc-ppc.c:5030
+msgid "Unknown visibility field in .weak"
+msgstr "Ðевідоме поле видимоÑÑ‚Ñ– у .weak"
+
+#: config/tc-ppc.c:5081
msgid ".ref outside .csect"
msgstr ".ref поза .csect"
-#: config/tc-ppc.c:4910 config/tc-ppc.c:5110
+#: config/tc-ppc.c:5102 config/tc-ppc.c:5362
msgid "missing symbol name"
msgstr "пропущено назву Ñимволу"
-#: config/tc-ppc.c:4940
+#: config/tc-ppc.c:5132
msgid "missing rename string"
msgstr "пропущено Ñ€Ñдок перейменуваннÑ"
-#: config/tc-ppc.c:4970 config/tc-ppc.c:5512 read.c:3689
+#: config/tc-ppc.c:5162 config/tc-ppc.c:5764
msgid "missing value"
msgstr "не виÑтачає значеннÑ"
-#: config/tc-ppc.c:4988
+#: config/tc-ppc.c:5180
msgid "illegal .stabx expression; zero assumed"
msgstr "некоректний вираз .stabx; припуÑкаємо нульове значеннÑ"
-#: config/tc-ppc.c:5020
+#: config/tc-ppc.c:5212
msgid "missing class"
msgstr "пропущено клаÑ"
-#: config/tc-ppc.c:5029
+#: config/tc-ppc.c:5221
msgid "missing type"
msgstr "пропущено тип"
-#: config/tc-ppc.c:5056
+#: config/tc-ppc.c:5248
msgid ".stabx of storage class stsym must be within .bs/.es"
msgstr ".stabx клаÑу Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ stsym має розташовуватиÑÑ Ð¼Ñ–Ð¶ .bs Ñ– .es"
-#: config/tc-ppc.c:5300
+#: config/tc-ppc.c:5552
msgid "nested .bs blocks"
msgstr "вкладені блоки .bs"
-#: config/tc-ppc.c:5331
+#: config/tc-ppc.c:5583
msgid ".es without preceding .bs"
msgstr ".es без попереднього .bs"
-#: config/tc-ppc.c:5504
+#: config/tc-ppc.c:5756
msgid "non-constant byte count"
msgstr "неÑтала кількіÑÑ‚ÑŒ байтів"
-#: config/tc-ppc.c:5579
+#: config/tc-ppc.c:5831
msgid ".tc not in .toc section"
msgstr ".tc поза розділом .toc"
-#: config/tc-ppc.c:5597
+#: config/tc-ppc.c:5849
msgid ".tc with no label"
msgstr ".tc без мітки"
-#: config/tc-ppc.c:5625
+#: config/tc-ppc.c:5877
#, c-format
msgid ".tc with storage class %d not yet supported"
msgstr "підтримки .tc із клаÑом Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ %d ще не передбачено"
-#: config/tc-ppc.c:5695 config/tc-s390.c:1960
+#: config/tc-ppc.c:5946 config/tc-s390.c:1960
msgid ".machine stack overflow"
msgstr "Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ñтека .machine"
-#: config/tc-ppc.c:5702 config/tc-s390.c:1971
+#: config/tc-ppc.c:5953 config/tc-s390.c:1971
msgid ".machine stack underflow"
msgstr "Ð²Ð¸Ñ‡ÐµÑ€Ð¿Ð°Ð½Ð½Ñ Ñтека .machine"
-#: config/tc-ppc.c:5709 config/tc-s390.c:1983
+#: config/tc-ppc.c:5972 config/tc-s390.c:1983
#, c-format
msgid "invalid machine `%s'"
msgstr "некоректний тип комп’ютера, «%s»"
-#: config/tc-ppc.c:5752
+#: config/tc-ppc.c:6016
msgid "bad symbol suffix"
msgstr "помилковий ÑÑƒÑ„Ñ–ÐºÑ Ñимволу"
-#: config/tc-ppc.c:5851
+#: config/tc-ppc.c:6115
msgid "unrecognized symbol suffix"
msgstr "нерозпізнаний ÑÑƒÑ„Ñ–ÐºÑ Ñимволу"
-#: config/tc-ppc.c:5939
+#: config/tc-ppc.c:6203
msgid ".ef with no preceding .function"
msgstr ".ef без попереднього .function"
-#: config/tc-ppc.c:6074
+#: config/tc-ppc.c:6339
#, c-format
msgid "warning: symbol %s has no csect"
msgstr "попередженнÑ: Ñимвол %s не міÑтить csect"
-#: config/tc-ppc.c:6406
+#: config/tc-ppc.c:6671
msgid "symbol in .toc does not match any .tc"
msgstr "Ñимвол у .toc не відповідає жодному .tc"
-#: config/tc-ppc.c:7104
+#: config/tc-ppc.c:7371
#, c-format
msgid "%s unsupported as instruction fixup"
msgstr "Ðе передбачено підтримки %s Ñк Ð²Ð¸Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð½Ñ Ñ–Ð½Ñтрукції"
-#: config/tc-ppc.c:7203
+#: config/tc-ppc.c:7470
#, c-format
msgid "unsupported relocation against %s"
msgstr "непідтримуване переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ñ–Ð´Ð½Ð¾Ñно %s"
-#: config/tc-ppc.c:7361
+#: config/tc-ppc.c:7632
#, c-format
-msgid "R_TLSML relocation doesn't target a symbol named \"_$TLSML\". %s"
-msgstr "ціллю переÑÑƒÐ²Ð°Ð½Ð½Ñ R_TLSML не Ñ” Ñимвол із назвою «_$TLSML». %s"
+msgid "R_TLSML relocation doesn't target a TOC entry named \"_$TLSML\": %s"
+msgstr "ціллю переÑÑƒÐ²Ð°Ð½Ð½Ñ R_TLSML не Ñ” Ð·Ð°Ð¿Ð¸Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– зміÑту із назвою «_$TLSML». %s"
-#: config/tc-ppc.c:7382
+#: config/tc-ppc.c:7652
#, c-format
msgid "Gas failure, reloc value %d\n"
msgstr "Помилка gas, Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÐµÑÑƒÐ²Ð°Ð½Ð½Ñ %d\n"
@@ -15572,73 +15872,73 @@ msgstr "неочікуваний відноÑний вираз PC"
msgid "residual low bits in pmem diff relocation"
msgstr "залишкові нижні біти у переÑуванні diff pmem"
-#: config/tc-pru.c:939 config/tc-pru.c:972
+#: config/tc-pru.c:938 config/tc-pru.c:971
#, c-format
msgid "trailing garbage after expression: %s"
msgstr "залишкові зайві Ñимволи піÑÐ»Ñ Ð²Ð¸Ñ€Ð°Ð·Ñƒ: %s"
-#: config/tc-pru.c:944
+#: config/tc-pru.c:943
#, c-format
msgid "expected expression, got %s"
msgstr "мало бути вказано вираз, маємо %s"
-#: config/tc-pru.c:977
+#: config/tc-pru.c:976
#, c-format
msgid "expected constant expression, got %s"
msgstr "мало бути вказано Ñталий вираз, маємо %s"
-#: config/tc-pru.c:1030
+#: config/tc-pru.c:1029
msgid "data transfer register cannot be halfword"
msgstr "регіÑÑ‚Ñ€ Ð¿ÐµÑ€ÐµÐ´Ð°Ð²Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… не може бути регіÑтром міÑткоÑÑ‚Ñ– у півÑлова"
-#: config/tc-pru.c:1049
+#: config/tc-pru.c:1048
msgid "destination register must be full-word"
msgstr "регіÑтром Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… має бути регіÑÑ‚Ñ€, Ñкий може міÑтити повне Ñлово"
-#: config/tc-pru.c:1081
+#: config/tc-pru.c:1080
#, c-format
msgid "cannot use partial register %s for addressing"
msgstr "не можна викориÑтовувати чаÑтковий регіÑÑ‚Ñ€ %s Ð´Ð»Ñ Ð°Ð´Ñ€ÐµÑуваннÑ"
-#: config/tc-pru.c:1094
+#: config/tc-pru.c:1093
#, c-format
msgid "value %lu is too large for a byte operand"
msgstr "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ %lu Ñ” надто великим Ð´Ð»Ñ Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ð¾Ð³Ð¾ операнда"
-#: config/tc-pru.c:1116
+#: config/tc-pru.c:1115
#, c-format
msgid "loop count constant %ld is out of range [1..%d]"
msgstr "Ñтала циклу %ld лежить поза межами припуÑтимого діапазону [1..%d]"
-#: config/tc-pru.c:1216 config/tc-pru.c:1242
+#: config/tc-pru.c:1215 config/tc-pru.c:1241
#, c-format
msgid "byte count constant %ld is out of range [1..%d]"
msgstr "Ñтала байтів %ld лежить поза межами припуÑтимого діапазону [1..%d]"
-#: config/tc-pru.c:1223 config/tc-pru.c:1249
+#: config/tc-pru.c:1222 config/tc-pru.c:1248
msgid "only r0 can be used as byte count register"
msgstr "Ñк регіÑÑ‚Ñ€-лічильник байтів можна викориÑтовувати лише r0"
-#: config/tc-pru.c:1225 config/tc-pru.c:1251
+#: config/tc-pru.c:1224 config/tc-pru.c:1250
msgid "only r0.bX byte fields of r0 can be used as byte count"
msgstr "Ð´Ð»Ñ Ð¿Ñ–Ð´Ñ€Ð°Ñ…ÑƒÐ½ÐºÑƒ байтів можна викориÑтовувати лише байтові Ð¿Ð¾Ð»Ñ r0.bX r0"
-#: config/tc-pru.c:1264
+#: config/tc-pru.c:1263
#, c-format
msgid "invalid constant table offset %ld"
msgstr "некоректний зÑув у таблиці Ñталих, %ld"
-#: config/tc-pru.c:1275
+#: config/tc-pru.c:1274
#, c-format
msgid "invalid WakeOnStatus %ld"
msgstr "некоректне WakeOnStatus %ld"
-#: config/tc-pru.c:1286
+#: config/tc-pru.c:1285
#, c-format
msgid "invalid XFR WideBus Address %ld"
msgstr "некоректна адреÑа XFR WideBus, %ld"
-#: config/tc-pru.c:1546
+#: config/tc-pru.c:1545
#, c-format
msgid ""
"PRU options:\n"
@@ -15649,231 +15949,258 @@ msgstr ""
" -mlink-relax Ñтворювати переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ð¾Ð¿Ñ‚Ð¸Ð¼Ñ–Ð·Ð°Ñ†Ñ–Ñ— компонувальником (типово).\n"
" -mno-link-relax не Ñтворювати переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ð¾Ð¿Ñ‚Ð¸Ð¼Ñ–Ð·Ð°Ñ†Ñ–Ñ— компонувальником.\n"
-#: config/tc-pru.c:1819
+#: config/tc-pru.c:1818
#, c-format
msgid "Label \"%s\" matches a CPU register name"
msgstr "Мітка «%s» збігаєтьÑÑ Ñ–Ð· назвою регіÑтра процеÑора"
-#: config/tc-riscv.c:234
+#: config/tc-riscv.c:176
#, c-format
msgid "unknown default privileged spec `%s' set by -mpriv-spec or --with-priv-spec"
msgstr "невідома типова привілейована ÑÐ¿ÐµÑ†Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ Â«%s», Ñку вÑтановлено за допомогою -mpriv-spec або --with-priv-spec"
#. Still can not find the privileged spec class.
-#: config/tc-riscv.c:256
+#: config/tc-riscv.c:198
#, c-format
msgid "unknown default privileged spec `%d.%d.%d' set by privileged elf attributes"
msgstr "Ðевідома типова привілейована ÑÐ¿ÐµÑ†Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ Â«%d.%d.%d», Ñку вÑтановлено привілейованими атрибутами elf"
-#: config/tc-riscv.c:366 config/tc-riscv.c:745 config/tc-riscv.c:803
-#: config/tc-riscv.c:1188
+#: config/tc-riscv.c:266
+msgid "the architecture string of -march and elf architecture attributes cannot be empty"
+msgstr "Ñ€Ñдок архітектури -march Ñ– атрибути архітектури elf не можуть бути порожніми"
+
+#: config/tc-riscv.c:754 config/tc-riscv.c:815 config/tc-riscv.c:1230
#, c-format
msgid "internal: duplicate %s"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ %s"
-#: config/tc-riscv.c:892
+#: config/tc-riscv.c:912
#, c-format
msgid "internal: bad RISC-V CSR class (0x%x)"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: помилковий ÐºÐ»Ð°Ñ CSR RISC-V (0x%x)"
-#: config/tc-riscv.c:896
+#: config/tc-riscv.c:916
#, c-format
msgid "invalid CSR `%s' for the current ISA"
msgstr "некоректний CSR «%s» Ð´Ð»Ñ Ð¿Ð¾Ñ‚Ð¾Ñ‡Ð½Ð¾Ð³Ð¾ ISA"
-#: config/tc-riscv.c:917
+#: config/tc-riscv.c:937
#, c-format
msgid "invalid CSR `%s' for the privileged spec `%s'"
msgstr "некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ CSR «%s» Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð²Ñ–Ð»ÐµÐ¹Ð¾Ð²Ð°Ð½Ð¾Ñ— Ñпецифікації «%s»"
-#: config/tc-riscv.c:1027
+#: config/tc-riscv.c:1050
#, c-format
msgid "internal: bad RISC-V opcode (mask error): %s %s"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: помилковий код операції RISC-V (помилка маÑкуваннÑ): %s %s"
-#: config/tc-riscv.c:1077
+#: config/tc-riscv.c:1190
#, c-format
-msgid "internal: bad RISC-V opcode (unknown operand type `CF%c'): %s %s"
-msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: помилковий код операції RISC-V (невідомий тип операнда «CF%c»): %s %s"
+msgid "internal: bad RISC-V opcode (unknown operand type `%s'): %s %s"
+msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: помилковий код операції RISC-V (невідомий тип операнда «%s»): %s %s"
-#: config/tc-riscv.c:1084
-#, c-format
-msgid "internal: bad RISC-V opcode (unknown operand type `C%c'): %s %s"
-msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: помилковий код операції RISC-V (невідомий тип операнда «C%c»): %s %s"
-
-#: config/tc-riscv.c:1132 config/tc-riscv.c:1144
-#, c-format
-msgid "internal: bad RISC-V opcode (unknown operand type `F%c'): %s %s"
-msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: помилковий код операції RISC-V (невідомий тип операнда «F%c»): %s %s"
-
-#: config/tc-riscv.c:1151
-#, c-format
-msgid "internal: bad RISC-V opcode (unknown operand type `%c'): %s %s"
-msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: помилковий код операції RISC-V (невідомий тип операнда «%c»): %s %s"
-
-#: config/tc-riscv.c:1159
+#: config/tc-riscv.c:1199
#, c-format
msgid "internal: bad RISC-V opcode (bits 0x%lx undefined): %s %s"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: помилковий код операції RISC-V (не визначено біти 0x%lx): %s %s"
-#: config/tc-riscv.c:1199
+#: config/tc-riscv.c:1241
msgid "internal: broken assembler. No assembly attempted"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: непрацездатний аÑемблер. Спробу Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ Ð¿ÐµÑ€ÐµÑ€Ð²Ð°Ð½Ð¾"
-#: config/tc-riscv.c:1310
+#: config/tc-riscv.c:1354
#, c-format
-msgid "internal: usupported RISC-V relocation number %d"
+msgid "internal: unsupported RISC-V relocation number %d"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: непідтримуваний номер переÑÑƒÐ²Ð°Ð½Ð½Ñ RISC-V, %d"
-#: config/tc-riscv.c:1392
-msgid "internal: invalid macro"
-msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: некоректний макроÑ"
+#: config/tc-riscv.c:1470
+#, c-format
+msgid "internal: invalid macro argument `%s'"
+msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: некоректний аргумент макроÑа «%s»"
-#: config/tc-riscv.c:1417
+#: config/tc-riscv.c:1495
msgid "internal: vasprintf failed"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: помилка у vasprintf"
-#: config/tc-riscv.c:1447 config/tc-riscv.c:1525
+#: config/tc-riscv.c:1525 config/tc-riscv.c:1603
msgid "unsupported large constant"
msgstr "непідтримувана велика Ñтала"
-#: config/tc-riscv.c:1449
+#: config/tc-riscv.c:1527
#, c-format
msgid "unknown CSR `%s'"
msgstr "невідомий CSR «%s»"
-#: config/tc-riscv.c:1452
+#: config/tc-riscv.c:1530
#, c-format
msgid "instruction %s requires absolute expression"
msgstr "Ð´Ð»Ñ Ñ–Ð½Ñтрукції %s потрібен абÑолютний вираз"
-#: config/tc-riscv.c:1719
+#: config/tc-riscv.c:1704 config/tc-riscv.c:1739
+msgid "must provide temp if destination overlaps mask"
+msgstr "Ñкщо Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÐµÐºÑ€Ð¸Ð²Ð°Ñ” маÑку, Ñлід надати temp"
+
+#: config/tc-riscv.c:1891
#, c-format
msgid "internal: macro %s not implemented"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¼Ð°ÐºÑ€Ð¾Ñ %s не реалізовано"
-#: config/tc-riscv.c:2062
+#: config/tc-riscv.c:2077
+msgid "multiple vsew constants"
+msgstr "декілька Ñталих vsew"
+
+#: config/tc-riscv.c:2085
+msgid "multiple vlmul constants"
+msgstr "декілька Ñталих vlmul"
+
+#: config/tc-riscv.c:2093
+msgid "multiple vta constants"
+msgstr "декілька Ñталих vta"
+
+#: config/tc-riscv.c:2101
+msgid "multiple vma constants"
+msgstr "декілька Ñталих vma"
+
+#. Reset error message of the previous round.
+#: config/tc-riscv.c:2257
+msgid "illegal operands"
+msgstr "некоректний операнд"
+
+#: config/tc-riscv.c:2297
#, c-format
msgid "read-only CSR is written `%s'"
msgstr "запиÑано придатне лише Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ CSR «%s»"
-#: config/tc-riscv.c:2301
+#: config/tc-riscv.c:2307
+msgid "illegal opcode for zve32x"
+msgstr "некоректний код операції Ð´Ð»Ñ zve32x"
+
+#: config/tc-riscv.c:2546
msgid "bad value for compressed funct6 field, value must be 0...64"
msgstr "помилкове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ ÑтиÑненого Ð¿Ð¾Ð»Ñ funct6, Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¼Ð°Ñ” належати до діапазону 0...64"
-#: config/tc-riscv.c:2316
+#: config/tc-riscv.c:2561
msgid "bad value for compressed funct4 field, value must be 0...15"
msgstr "помилкове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ ÑтиÑненого Ð¿Ð¾Ð»Ñ funct4, Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¼Ð°Ñ” належати до діапазону 0...15"
-#: config/tc-riscv.c:2331
+#: config/tc-riscv.c:2576
msgid "bad value for compressed funct3 field, value must be 0...7"
msgstr "помилкове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ ÑтиÑненого Ð¿Ð¾Ð»Ñ funct3, Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¼Ð°Ñ” належати до діапазону 0...7"
-#: config/tc-riscv.c:2346
+#: config/tc-riscv.c:2591
msgid "bad value for compressed funct2 field, value must be 0...3"
msgstr "помилкове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ ÑтиÑненого Ð¿Ð¾Ð»Ñ funct2, Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¼Ð°Ñ” належати до діапазону 0...3"
-#: config/tc-riscv.c:2356
-#, c-format
-msgid "internal: unknown compressed funct field specifier `CF%c'"
-msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: невідомий Ñпецифікатор ÑтиÑненого Ð¿Ð¾Ð»Ñ Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ—, «CF%c»"
+#: config/tc-riscv.c:2684
+msgid "bad value for vsetivli immediate field, value must be 0..1023"
+msgstr "помилкове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð¿Ð¾Ð»Ñ Ð¿Ñ€Ð¸ÑˆÐ²Ð¸Ð´ÑˆÐµÐ½Ð¾Ð³Ð¾ викориÑÑ‚Ð°Ð½Ð½Ñ vsetivli, Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¼Ð°Ñ” належати до діапазону 0...2"
-#: config/tc-riscv.c:2362
-#, c-format
-msgid "internal: unknown compressed field specifier `C%c'"
-msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: невідомий Ñпецифікатор ÑтиÑненого полÑ, «C%c»"
+#: config/tc-riscv.c:2696
+msgid "bad value for vsetvli immediate field, value must be 0..2047"
+msgstr "помилкове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð¿Ð¾Ð»Ñ Ð¿Ñ€Ð¸ÑˆÐ²Ð¸Ð´ÑˆÐµÐ½Ð¾Ð³Ð¾ викориÑÑ‚Ð°Ð½Ð½Ñ vsetvli, Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¼Ð°Ñ” належати до діапазону 0...2047"
+
+#: config/tc-riscv.c:2709
+msgid "bad value for vector immediate field, value must be -16...15"
+msgstr "помилкове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð¿Ð¾Ð»Ñ Ð¿Ñ€Ð¸ÑˆÐ²Ð¸Ð´ÑˆÐµÐ½Ð¾Ð³Ð¾ викориÑÑ‚Ð°Ð½Ð½Ñ vector, Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¼Ð°Ñ” належати до діапазону -16...15"
-#: config/tc-riscv.c:2386 config/tc-riscv.c:2397
+#: config/tc-riscv.c:2721
+msgid "bad value for vector immediate field, value must be 0...31"
+msgstr "помилкове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð¿Ð¾Ð»Ñ Ð¿Ñ€Ð¸ÑˆÐ²Ð¸Ð´ÑˆÐµÐ½Ð¾Ð³Ð¾ викориÑÑ‚Ð°Ð½Ð½Ñ vector, Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¼Ð°Ñ” належати до діапазону 0...31"
+
+#: config/tc-riscv.c:2733
+msgid "bad value for vector immediate field, value must be -15...16"
+msgstr "помилкове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð¿Ð¾Ð»Ñ Ð¿Ñ€Ð¸ÑˆÐ²Ð¸Ð´ÑˆÐµÐ½Ð¾Ð³Ð¾ викориÑÑ‚Ð°Ð½Ð½Ñ vector, Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¼Ð°Ñ” належати до діапазону -15...16"
+
+#: config/tc-riscv.c:2795 config/tc-riscv.c:2806
#, c-format
msgid "improper shift amount (%lu)"
msgstr "невідповідна величина зÑуву (%lu)"
-#: config/tc-riscv.c:2408
+#: config/tc-riscv.c:2817
#, c-format
msgid "improper CSRxI immediate (%lu)"
msgstr "неналежне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¸ÑˆÐ²Ð¸Ð´ÑˆÐµÐ½Ð¾Ð³Ð¾ викориÑÑ‚Ð°Ð½Ð½Ñ CSRxI (%lu)"
-#: config/tc-riscv.c:2425
+#: config/tc-riscv.c:2834
#, c-format
msgid "improper CSR address (%lu)"
msgstr "неналежна адреÑа CSR (%lu)"
-#: config/tc-riscv.c:2603
+#: config/tc-riscv.c:3015
msgid "lui expression not in range 0..1048575"
msgstr "вираз lui не потраплÑÑ” до діапазону 0..1048575"
-#: config/tc-riscv.c:2640
+#: config/tc-riscv.c:3052
msgid "bad value for opcode field, value must be 0...127 and lower 2 bits must be 0x3"
msgstr "помилкове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð¾Ð»Ñ ÐºÐ¾Ð´Ñƒ операції, Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¼Ð°Ñ” належати до діапазону 0...127, а нижніми двома бітами мають бути 0x3"
-#: config/tc-riscv.c:2656
+#: config/tc-riscv.c:3068
msgid "bad value for opcode field, value must be 0...2"
msgstr "помилкове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð¿Ð¾Ð»Ñ ÐºÐ¾Ð´Ñƒ операції, Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¼Ð°Ñ” належати до діапазону 0...2"
-#: config/tc-riscv.c:2666
-#, c-format
-msgid "internal: unknown opcode field specifier `O%c'"
-msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: невідомий Ñпецифікатор Ð¿Ð¾Ð»Ñ ÐºÐ¾Ð´Ñƒ операції «O%c»"
-
-#: config/tc-riscv.c:2680
+#: config/tc-riscv.c:3091
msgid "bad value for funct7 field, value must be 0...127"
msgstr "помилкове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð¿Ð¾Ð»Ñ funct7, Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¼Ð°Ñ” належати до діапазону 0...127"
-#: config/tc-riscv.c:2695
+#: config/tc-riscv.c:3106
msgid "bad value for funct3 field, value must be 0...7"
msgstr "помилкове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð¿Ð¾Ð»Ñ funct3, Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¼Ð°Ñ” належати до діапазону 0...7"
-#: config/tc-riscv.c:2710
+#: config/tc-riscv.c:3121
msgid "bad value for funct2 field, value must be 0...3"
msgstr "помилкове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð¿Ð¾Ð»Ñ funct2, Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¼Ð°Ñ” належати до діапазону 0...3"
-#: config/tc-riscv.c:2720
+#: config/tc-riscv.c:3139
#, c-format
-msgid "internal: unknown funct field specifier `F%c'\n"
-msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: невідомий Ñпецифікатор Ð¿Ð¾Ð»Ñ Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ—, «F%c»\n"
+msgid "Improper bs immediate (%lu)"
+msgstr "Ðеналежне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¸ÑˆÐ²Ð¸Ð´ÑˆÐµÐ½Ð¾Ð³Ð¾ викориÑÑ‚Ð°Ð½Ð½Ñ bs (%lu)"
-#: config/tc-riscv.c:2735
+#: config/tc-riscv.c:3150
#, c-format
-msgid "internal: unknown argument type `%c'"
-msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: невідомий тип аргументу «%c»"
+msgid "Improper rnum immediate (%lu)"
+msgstr "Ðеналежне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¸ÑˆÐ²Ð¸Ð´ÑˆÐµÐ½Ð¾Ð³Ð¾ викориÑÑ‚Ð°Ð½Ð½Ñ rnum (%lu)"
-#: config/tc-riscv.c:2740
-msgid "illegal operands"
-msgstr "некоректний операнд"
+#: config/tc-riscv.c:3168
+#, c-format
+msgid "internal: unknown argument type `%s'"
+msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: невідомий тип аргументу «%s»"
+
+#: config/tc-riscv.c:3209
+msgid "values must be constant"
+msgstr "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¼Ð°ÑŽÑ‚ÑŒ бути Ñталими"
+
+#: config/tc-riscv.c:3217
+msgid "unrecognized values"
+msgstr "нерозпізнані значеннÑ"
-#: config/tc-riscv.c:3119
+#: config/tc-riscv.c:3225
+msgid "value conflicts with instruction length"
+msgstr "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÐºÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ÑƒÑ” із довжиною інÑтрукції"
+
+#: config/tc-riscv.c:3594
#, c-format
msgid "internal: bad CFA value #%d"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: помилкове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ CFA #%d"
-#: config/tc-riscv.c:3200
+#: config/tc-riscv.c:3675
#, c-format
msgid "internal: bad relocation #%d"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: помилкове переÑÑƒÐ²Ð°Ð½Ð½Ñ #%d"
-#: config/tc-riscv.c:3205
-msgid "unsupported symbol subtraction"
-msgstr "непідтримуване Ð²Ñ–Ð´Ð½Ñ–Ð¼Ð°Ð½Ð½Ñ Ñимволів"
-
-#: config/tc-riscv.c:3314
+#: config/tc-riscv.c:3799
msgid ".option pop with no .option push"
msgstr "pop Ð´Ð»Ñ .option без push Ð´Ð»Ñ .option"
-#: config/tc-riscv.c:3324
+#: config/tc-riscv.c:3813
#, c-format
msgid "unrecognized .option directive: %s\n"
msgstr "нерозпізнана директива .option: %s\n"
-#: config/tc-riscv.c:3499
-#, c-format
-msgid "cannot represent %s relocation in object file"
-msgstr "предÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÐµÑÑƒÐ²Ð°Ð½Ð½Ñ %s у об’єктному файлі неможливе"
-
-#: config/tc-riscv.c:3640
+#: config/tc-riscv.c:4170
#, c-format
msgid ""
"RISC-V options:\n"
-" -fpic generate position-independent code\n"
+" -fpic or -fPIC generate position-independent code\n"
" -fno-pic don't generate position-independent code (default)\n"
" -march=ISA set the RISC-V architecture\n"
" -misa-spec=ISAspec set the RISC-V ISA spec (2.2, 20190608, 20191213)\n"
@@ -15883,42 +16210,54 @@ msgid ""
" -mno-relax disable relax\n"
" -march-attr generate RISC-V arch attribute\n"
" -mno-arch-attr don't generate RISC-V arch attribute\n"
+" -mcsr-check enable the csr ISA and privilege spec version checks\n"
+" -mno-csr-check disable the csr ISA and privilege spec version checks (default)\n"
+" -mbig-endian assemble for big-endian\n"
+" -mlittle-endian assemble for little-endian\n"
msgstr ""
"Параметри RISC-V:\n"
-" -fpic Ñтворити позиційно незалежний код\n"
+" -fpic або -fPIC Ñтворити позиційно незалежний код\n"
" -fno-pic не Ñтворювати позиційно незалежного коду (типово)\n"
" -march=ISA вÑтановити архітектуру RISC-V\n"
" -misa-spec=ISAspec вÑтановити Ñпецифікацію ISA RISC-V (2.2, 20190608, 20191213)\n"
-" -mpriv-spec=PRIVspec вÑтановити Ñпецифікацію прав доÑтупу RISC-V (1.9.1, 1.10, 1.11, 1.12)\n"
+" -mpriv-spec=PRIVspec вÑтановити Ñпецифікацію прав доÑтупу RISC-V (1.9, 1.9.1, 1.10, 1.11)\n"
" -mabi=ABI вÑтановити ABI RISC-V\n"
" -mrelax увімкнути оптимізацію (типова поведінка)\n"
" -mno-relax вимкнути оптимізацію\n"
" -march-attr Ñтворити атрибут архітектури RISC-V\n"
" -mno-arch-attr не Ñтворювати атрибут архітектури RISC-V\n"
+" -mcsr-check увімкнути перевірки csr ISA та верÑÑ–Ñ— привілейованої Ñпецифікації\n"
+" -mno-csr-check вимкнути перевірки csr ISA та верÑÑ–Ñ— привілейованої Ñпецифікації (типове)\n"
+" -mbig-endian зібрати Ð´Ð»Ñ Ð·Ð²Ð¾Ñ€Ð¾Ñ‚Ð½Ð¾Ð³Ð¾ порÑдку байтів\n"
+" -mlittle-endian зібрати Ð´Ð»Ñ Ð¿Ñ€Ñмого порÑдку байтів\n"
-#: config/tc-riscv.c:3678
+#: config/tc-riscv.c:4212
#, c-format
msgid "unknown register `%s'"
msgstr "невідомий регіÑÑ‚Ñ€, «%s»"
-#: config/tc-riscv.c:3700
+#: config/tc-riscv.c:4234
#, c-format
msgid "non-constant .%cleb128 is not supported"
msgstr "підтримки не Ñталих .%cleb128 не передбачено"
-#: config/tc-riscv.c:3785
+#: config/tc-riscv.c:4328
#, c-format
msgid "internal: bad RISC-V privileged spec (%s)"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: помилкова привілейована ÑÐ¿ÐµÑ†Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ RISC-V (%s)"
-#: config/tc-riscv.c:3868
+#: config/tc-riscv.c:4420
msgid "architecture elf attributes must set before any instructions"
msgstr "атрибути архітектури elf Ñлід вÑтановлювати до будь-Ñких інÑтрукцій"
-#: config/tc-riscv.c:3886
+#: config/tc-riscv.c:4438
msgid "privileged elf attributes must set before any instructions"
msgstr "привілейовані атрибути elf Ñлід вÑтановлювати до будь-Ñких інÑтрукцій"
+#: config/tc-riscv.c:4460
+msgid "missing symbol name for .variant_cc directive"
+msgstr "пропущено назву Ñимволу Ð´Ð»Ñ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ð¸ .variant_cc"
+
#: config/tc-rl78.c:213
msgid "16-bit relocation used in 8-bit operand"
msgstr "викориÑтано 8-бітове переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ 16-бітовому операнді"
@@ -16425,26 +16764,21 @@ msgstr "ÑпуÑÑ‚Ð¾ÑˆÐµÐ½Ð½Ñ Ñтека .machinemode"
msgid "invalid machine mode `%s'"
msgstr "некоректний режим архітектури, «%s»"
-#: config/tc-s390.c:2258
-#, c-format
-msgid "cannot emit relocation %s against subsy symbol %s"
-msgstr "не можна Ñтворювати переÑÑƒÐ²Ð°Ð½Ð½Ñ %s щодо Ñимволу subsy %s"
-
-#: config/tc-s390.c:2375
+#: config/tc-s390.c:2372
msgid "unsupported relocation type"
msgstr "непідтримуваний тип переÑуваннÑ"
-#: config/tc-s390.c:2430
+#: config/tc-s390.c:2427
#, c-format
msgid "cannot emit PC relative %s relocation%s%s"
msgstr "не вдалоÑÑ Ð²Ð¸Ð´Ð°Ñ‚Ð¸ переÑÑƒÐ²Ð°Ð½Ð½Ñ %s відноÑно PC%s%s"
-#: config/tc-s390.c:2569
+#: config/tc-s390.c:2566
#, c-format
msgid "Gas failure, reloc type %s\n"
msgstr "Помилка gas, тип переÑÑƒÐ²Ð°Ð½Ð½Ñ %s\n"
-#: config/tc-s390.c:2571
+#: config/tc-s390.c:2568
#, c-format
msgid "Gas failure, reloc type #%i\n"
msgstr "Помилка gas, тип переÑÑƒÐ²Ð°Ð½Ð½Ñ #%i\n"
@@ -17412,7 +17746,7 @@ msgstr "Ðпаратну можливіÑÑ‚ÑŒ «%s» не увімкнено дÐ
#: config/tc-sparc.c:3646 config/tc-sparc.c:3653 config/tc-sparc.c:3660
#: config/tc-sparc.c:3667 config/tc-sparc.c:3674 config/tc-sparc.c:3683
#: config/tc-sparc.c:3695 config/tc-sparc.c:3706 config/tc-sparc.c:3728
-#: config/tc-sparc.c:3752 write.c:1189
+#: config/tc-sparc.c:3752 write.c:1184
msgid "relocation overflow"
msgstr "Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ Ð¿ÐµÑ€ÐµÑуваннÑ"
@@ -17577,7 +17911,7 @@ msgstr "некоректний lrlive, «%lu»"
msgid "Relaxation should never occur"
msgstr "ÐžÐ¿Ñ‚Ð¸Ð¼Ñ–Ð·Ð°Ñ†Ñ–Ñ Ð½Ðµ повинна траплÑтиÑÑ"
-#: config/tc-spu.c:1008
+#: config/tc-spu.c:1005
#, c-format
msgid "Relocation doesn't fit. (relocation value = 0x%lx)"
msgstr "Ðевідповідне переÑуваннÑ. (Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÐµÑÑƒÐ²Ð°Ð½Ð½Ñ = 0x%lx)"
@@ -17760,231 +18094,231 @@ msgstr "у інÑтрукції LDP має бути викориÑтано 24-б
msgid "first operand is too large for a 24-bit displacement"
msgstr "перший операнд Ñ” надто великим Ð´Ð»Ñ 24-бітового переміщеннÑ"
-#: config/tc-tic4x.c:389
+#: config/tc-tic4x.c:391
msgid "Nan, using zero."
msgstr "не Ñ” чиÑлом, викориÑтовуємо нуль."
-#: config/tc-tic4x.c:507
+#: config/tc-tic4x.c:509
#, c-format
msgid "Cannot represent exponent in %d bits"
msgstr "Ðеможливо предÑтавити Ñтепінь у %d бітах"
-#: config/tc-tic4x.c:590 config/tc-tic4x.c:600
+#: config/tc-tic4x.c:592 config/tc-tic4x.c:602
msgid "Invalid floating point number"
msgstr "Ðекоректне чиÑло з рухомою крапкою"
-#: config/tc-tic4x.c:719
+#: config/tc-tic4x.c:721
msgid "Comma expected\n"
msgstr "Мало бути викориÑтано кому\n"
-#: config/tc-tic4x.c:752 config/tc-tic54x.c:470
+#: config/tc-tic4x.c:754 config/tc-tic54x.c:470
msgid ".bss size argument missing\n"
msgstr "пропущено аргумент розміру .bss\n"
-#: config/tc-tic4x.c:760
+#: config/tc-tic4x.c:762
#, c-format
msgid ".bss size %ld < 0!"
msgstr "розмір .bss %ld < 0!"
-#: config/tc-tic4x.c:893
+#: config/tc-tic4x.c:895
msgid "Non-constant symbols not allowed\n"
msgstr "Ðе можна викориÑтовувати неÑталі Ñимволи\n"
-#: config/tc-tic4x.c:924
+#: config/tc-tic4x.c:926
msgid "Symbol missing\n"
msgstr "Пропущено Ñимвол\n"
#. Skip null symbol terminator.
-#: config/tc-tic4x.c:972
+#: config/tc-tic4x.c:974
msgid ".sect: subsection name ignored"
msgstr ".sect: назву підрозділу проігноровано"
-#: config/tc-tic4x.c:1000 config/tc-tic4x.c:1101 config/tc-tic54x.c:1427
+#: config/tc-tic4x.c:1002 config/tc-tic4x.c:1103 config/tc-tic54x.c:1427
#, c-format
msgid "Error setting flags for \"%s\": %s"
msgstr "Помилка під Ñ‡Ð°Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ–Ð² Ð´Ð»Ñ Â«%s»: %s"
-#: config/tc-tic4x.c:1032
+#: config/tc-tic4x.c:1034
msgid ".set syntax invalid\n"
msgstr "некоректний ÑинтакÑÐ¸Ñ .set\n"
-#: config/tc-tic4x.c:1090
+#: config/tc-tic4x.c:1092
msgid ".usect: non-zero alignment flag ignored"
msgstr ".usect: прапорець ненульового Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¾Ñ–Ð³Ð½Ð¾Ñ€Ð¾Ð²Ð°Ð½Ð¾"
-#: config/tc-tic4x.c:1121
+#: config/tc-tic4x.c:1123
#, c-format
msgid "This assembler does not support processor generation %ld"
msgstr "У цьому аÑемблері не передбачено підтримки Ð¿Ð¾ÐºÐ¾Ð»Ñ–Ð½Ð½Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑорів %ld"
-#: config/tc-tic4x.c:1125
+#: config/tc-tic4x.c:1127
msgid "Changing processor generation on fly not supported..."
msgstr "Підтримки зміни Ð¿Ð¾ÐºÐ¾Ð»Ñ–Ð½Ð½Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑорів на льоту не передбачено…"
-#: config/tc-tic4x.c:1412
+#: config/tc-tic4x.c:1414
msgid "Auxiliary register AR0--AR7 required for indirect"
msgstr "Ð”Ð»Ñ indirect потрібен допоміжний регіÑÑ‚Ñ€ AR0--AR7"
-#: config/tc-tic4x.c:1426
+#: config/tc-tic4x.c:1428
#, c-format
msgid "Bad displacement %d (require 0--255)\n"
msgstr "Помилкове Ð¿ÐµÑ€ÐµÐ¼Ñ–Ñ‰ÐµÐ½Ð½Ñ %d (мало бути у діапазоні від 0 до 255)\n"
-#: config/tc-tic4x.c:1444
+#: config/tc-tic4x.c:1446
msgid "Index register IR0,IR1 required for displacement"
msgstr "Ð”Ð»Ñ Ð¿ÐµÑ€ÐµÐ¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð¿Ð¾Ñ‚Ñ€Ñ–Ð±Ð½Ðµ регіÑÑ‚Ñ€ індекÑуваннÑ, IR0,IR1"
-#: config/tc-tic4x.c:1512
+#: config/tc-tic4x.c:1514
msgid "Expecting a register name"
msgstr "Мало бути викориÑтано назву регіÑтра"
-#: config/tc-tic4x.c:1524 config/tc-tic4x.c:1547 config/tc-tic4x.c:1613
+#: config/tc-tic4x.c:1526 config/tc-tic4x.c:1549 config/tc-tic4x.c:1615
msgid "Number too large"
msgstr "Ðадто велике чиÑло"
-#: config/tc-tic4x.c:1537 config/tc-tic4x.c:1560
+#: config/tc-tic4x.c:1539 config/tc-tic4x.c:1562
msgid "Expecting a constant value"
msgstr "Мало бути викориÑтано Ñтале значеннÑ"
-#: config/tc-tic4x.c:1568
+#: config/tc-tic4x.c:1570
#, c-format
msgid "Bad direct addressing construct %s"
msgstr "Помилкова конÑÑ‚Ñ€ÑƒÐºÑ†Ñ–Ñ Ð±ÐµÐ·Ð¿Ð¾Ñереднього адреÑуваннÑ, %s"
-#: config/tc-tic4x.c:1572
+#: config/tc-tic4x.c:1574
#, c-format
msgid "Direct value of %ld is not suitable"
msgstr "БезпоÑереднє Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ %ld Ñ” невідповідним"
-#: config/tc-tic4x.c:1596
+#: config/tc-tic4x.c:1598
msgid "Unknown indirect addressing mode"
msgstr "Ðевідомий режим опоÑередкованого адреÑуваннÑ"
-#: config/tc-tic4x.c:1693
+#: config/tc-tic4x.c:1695
#, c-format
msgid "Immediate value of %ld is too large for ldf"
msgstr "Стале Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ %ld Ñ” надто великим Ð´Ð»Ñ ldf"
-#: config/tc-tic4x.c:1733
+#: config/tc-tic4x.c:1735
msgid "Destination register must be ARn"
msgstr "РегіÑтром Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¼Ð°Ñ” бути ARn"
-#: config/tc-tic4x.c:1752 config/tc-tic4x.c:2125 config/tc-tic4x.c:2184
+#: config/tc-tic4x.c:1754 config/tc-tic4x.c:2127 config/tc-tic4x.c:2186
#, c-format
msgid "Immediate value of %ld is too large"
msgstr "Стале Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ %ld Ñ” надто великим"
-#: config/tc-tic4x.c:1781 config/tc-tic4x.c:1986
+#: config/tc-tic4x.c:1783 config/tc-tic4x.c:1988
msgid "Invalid indirect addressing mode"
msgstr "Ðекоректний режим опоÑередкованого адреÑуваннÑ"
-#: config/tc-tic4x.c:1805 config/tc-tic4x.c:1845 config/tc-tic4x.c:2036
-#: config/tc-tic4x.c:2058
+#: config/tc-tic4x.c:1807 config/tc-tic4x.c:1847 config/tc-tic4x.c:2038
+#: config/tc-tic4x.c:2060
msgid "Register must be Rn"
msgstr "РегіÑтром має бути Rn"
-#: config/tc-tic4x.c:1859 config/tc-tic4x.c:1929 config/tc-tic4x.c:1943
+#: config/tc-tic4x.c:1861 config/tc-tic4x.c:1931 config/tc-tic4x.c:1945
msgid "Register must be R0--R7"
msgstr "РегіÑтром має бути R0--R7"
-#: config/tc-tic4x.c:1883 config/tc-tic4x.c:1911
+#: config/tc-tic4x.c:1885 config/tc-tic4x.c:1913
#, c-format
msgid "Invalid indirect addressing mode displacement %d"
msgstr "Ðекоректне Ð¿ÐµÑ€ÐµÐ¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ñƒ опоÑередкованого адреÑуваннÑ, %d"
-#: config/tc-tic4x.c:1957
+#: config/tc-tic4x.c:1959
msgid "Destination register must be R2 or R3"
msgstr "РегіÑтром Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¼Ð°Ñ” бути R2 або R3"
-#: config/tc-tic4x.c:1971
+#: config/tc-tic4x.c:1973
msgid "Destination register must be R0 or R1"
msgstr "РегіÑтром Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¼Ð°Ñ” бути R0 або R1"
-#: config/tc-tic4x.c:2008
+#: config/tc-tic4x.c:2010
#, c-format
msgid "Displacement value of %ld is too large"
msgstr "Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÐµÐ¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ñƒ %ld Ñ” надто великим"
-#: config/tc-tic4x.c:2069 config/tc-tic4x.c:2200
+#: config/tc-tic4x.c:2071 config/tc-tic4x.c:2202
msgid "Floating point number not valid in expression"
msgstr "ЧиÑло з рухомою крапкою не можна викориÑтовувати у виразі"
-#: config/tc-tic4x.c:2083
+#: config/tc-tic4x.c:2085
#, c-format
msgid "Signed immediate value %ld too large"
msgstr "Стале Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð·Ñ– знаком, %ld, Ñ” надто великим"
-#: config/tc-tic4x.c:2146
+#: config/tc-tic4x.c:2148
#, c-format
msgid "Unsigned immediate value %ld too large"
msgstr "Стале Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð±ÐµÐ· знаку, %ld, Ñ” надто великим"
-#: config/tc-tic4x.c:2214
+#: config/tc-tic4x.c:2216
#, c-format
msgid "Immediate value %ld too large"
msgstr "Стале значеннÑ, %ld, Ñ” надто великим"
-#: config/tc-tic4x.c:2233 config/tc-tic4x.c:2261
+#: config/tc-tic4x.c:2235 config/tc-tic4x.c:2263
msgid "Register must be ivtp or tvtp"
msgstr "РегіÑтром має бути ivtp або tvtp"
-#: config/tc-tic4x.c:2247
+#: config/tc-tic4x.c:2249
msgid "Register must be address register"
msgstr "РегіÑÑ‚Ñ€ має бути регіÑтром адреÑи"
-#: config/tc-tic4x.c:2320
+#: config/tc-tic4x.c:2322
msgid "Source and destination register should not be equal"
msgstr "РегіÑтри джерела Ñ– Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð½Ðµ повинні збігатиÑÑ"
-#: config/tc-tic4x.c:2335
+#: config/tc-tic4x.c:2337
msgid "Equal parallel destination registers, one result will be discarded"
msgstr "Однакові паралельні регіÑтри призначеннÑ. Один результат буде відкинуто."
-#: config/tc-tic4x.c:2376
+#: config/tc-tic4x.c:2378
msgid "Too many operands scanned"
msgstr "Отримано надто багато операндів"
-#: config/tc-tic4x.c:2407
+#: config/tc-tic4x.c:2409
msgid "Parallel opcode cannot contain more than two instructions"
msgstr "Код паралельної операції не може міÑтити більше двох інÑтрукцій"
-#: config/tc-tic4x.c:2481
+#: config/tc-tic4x.c:2483
#, c-format
msgid "Invalid operands for %s"
msgstr "Ðекоректні операнди %s"
-#: config/tc-tic4x.c:2484
+#: config/tc-tic4x.c:2486
#, c-format
msgid "Invalid instruction %s"
msgstr "Ðекоректна інÑÑ‚Ñ€ÑƒÐºÑ†Ñ–Ñ %s"
-#: config/tc-tic4x.c:2636
+#: config/tc-tic4x.c:2638
#, c-format
msgid "Bad relocation type: 0x%02x"
msgstr "Помилковий тип переÑуваннÑ: 0x%02x"
-#: config/tc-tic4x.c:2694
+#: config/tc-tic4x.c:2696
#, c-format
msgid "Unsupported processor generation %d"
msgstr "Ðепідтримуване Ð¿Ð¾ÐºÐ¾Ð»Ñ–Ð½Ð½Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑорів, %d"
-#: config/tc-tic4x.c:2702
+#: config/tc-tic4x.c:2704
msgid "Option -b is depreciated, please use -mbig"
msgstr "Параметр -b вважаєтьÑÑ Ð·Ð°Ñтарілим, будь лаÑка, кориÑтуйтеÑÑ -mbig"
-#: config/tc-tic4x.c:2709
+#: config/tc-tic4x.c:2711
msgid "Option -p is depreciated, please use -mmemparm"
msgstr "Параметр -p вважаєтьÑÑ Ð·Ð°Ñтарілим, будь лаÑка, кориÑтуйтеÑÑ -mmemparm"
-#: config/tc-tic4x.c:2716
+#: config/tc-tic4x.c:2718
msgid "Option -r is depreciated, please use -mregparm"
msgstr "Параметр -r вважаєтьÑÑ Ð·Ð°Ñтарілим, будь лаÑка, кориÑтуйтеÑÑ -mregparm"
-#: config/tc-tic4x.c:2723
+#: config/tc-tic4x.c:2725
msgid "Option -s is depreciated, please use -msmall"
msgstr "Параметр -s вважаєтьÑÑ Ð·Ð°Ñтарілим, будь лаÑка, кориÑтуйтеÑÑ -msmall"
-#: config/tc-tic4x.c:2752
+#: config/tc-tic4x.c:2754
#, c-format
msgid ""
"\n"
@@ -18029,12 +18363,12 @@ msgstr ""
" -mlowpower увімкнути підтримку LOPOWER та MAXSPEED\n"
" -menhanced увімкнути розширену підтримку кодів операцій\n"
-#: config/tc-tic4x.c:2797
+#: config/tc-tic4x.c:2799
#, c-format
msgid "Label \"$%d\" redefined"
msgstr "Мітку «$%d» перевизначено"
-#: config/tc-tic4x.c:3007
+#: config/tc-tic4x.c:3009
#, c-format
msgid "Reloc %d not supported by object file format"
msgstr "Підтримки переÑÑƒÐ²Ð°Ð½Ð½Ñ %d не передбачено форматом об’єктного файла"
@@ -19286,140 +19620,140 @@ msgstr "переÑÑƒÐ²Ð°Ð½Ð½Ñ hi0() викориÑтано Ð´Ð»Ñ Ñ–Ð½ÑтруÐ
msgid "hi() relocation used on an instruction which does not support it"
msgstr "переÑÑƒÐ²Ð°Ð½Ð½Ñ hi() викориÑтано Ð´Ð»Ñ Ñ–Ð½Ñтрукції, у Ñкій не передбачено такого переÑуваннÑ"
-#: config/tc-v850.c:2036
+#: config/tc-v850.c:2032
msgid "lo() relocation used on an instruction which does not support it"
msgstr "переÑÑƒÐ²Ð°Ð½Ð½Ñ lo() викориÑтано Ð´Ð»Ñ Ñ–Ð½Ñтрукції, у Ñкій не передбачено такого переÑуваннÑ"
-#: config/tc-v850.c:2046
+#: config/tc-v850.c:2043
msgid "ctoff() is not supported by the rh850 ABI. Use -mgcc-abi instead"
msgstr "Підтримки ctoff() у ABI rh850 не передбачено. ЗаміÑÑ‚ÑŒ нього Ñлід викориÑтовувати -mgcc-abi"
-#: config/tc-v850.c:2062
+#: config/tc-v850.c:2059
msgid "ctoff() relocation used on an instruction which does not support it"
msgstr "переÑÑƒÐ²Ð°Ð½Ð½Ñ ctoff() викориÑтано Ð´Ð»Ñ Ñ–Ð½Ñтрукції, у Ñкій не передбачено такого переÑуваннÑ"
-#: config/tc-v850.c:2081
+#: config/tc-v850.c:2078
msgid "sdaoff() relocation used on an instruction which does not support it"
msgstr "переÑÑƒÐ²Ð°Ð½Ð½Ñ sdaoff() викориÑтано Ð´Ð»Ñ Ñ–Ð½Ñтрукції, у Ñкій не передбачено такого переÑуваннÑ"
-#: config/tc-v850.c:2100
+#: config/tc-v850.c:2097
msgid "zdaoff() relocation used on an instruction which does not support it"
msgstr "переÑÑƒÐ²Ð°Ð½Ð½Ñ zdaoff() викориÑтано Ð´Ð»Ñ Ñ–Ð½Ñтрукції, у Ñкій не передбачено такого переÑуваннÑ"
-#: config/tc-v850.c:2132
+#: config/tc-v850.c:2129
msgid "tdaoff() relocation used on an instruction which does not support it"
msgstr "переÑÑƒÐ²Ð°Ð½Ð½Ñ tdaoff() викориÑтано Ð´Ð»Ñ Ñ–Ð½Ñтрукції, у Ñкій не передбачено такого переÑуваннÑ"
-#: config/tc-v850.c:2273
+#: config/tc-v850.c:2270
#, c-format
msgid "operand out of range (%d is not between %d and %d)"
msgstr "операнд поза припуÑтимими межами (%d не належить діапазону від %d до %d)"
-#: config/tc-v850.c:2356
+#: config/tc-v850.c:2353
msgid "st/ld offset 23 instruction was disabled ."
msgstr "відÑтуп st/ld інÑтрукції 23 було вимкнено."
-#: config/tc-v850.c:2365
+#: config/tc-v850.c:2362
msgid "Target processor does not support this instruction."
msgstr "Ðа процеÑорі Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ†Ñ–Ñ”Ñ— інÑтрукції не передбачено."
-#: config/tc-v850.c:2477 config/tc-v850.c:2487 config/tc-v850.c:2508
-#: config/tc-v850.c:2522 config/tc-v850.c:2528 config/tc-v850.c:2552
-#: config/tc-v850.c:2558 config/tc-v850.c:2565 config/tc-v850.c:2579
-#: config/tc-v850.c:2593 config/tc-v850.c:2599 config/tc-v850.c:2936
+#: config/tc-v850.c:2474 config/tc-v850.c:2484 config/tc-v850.c:2505
+#: config/tc-v850.c:2519 config/tc-v850.c:2525 config/tc-v850.c:2549
+#: config/tc-v850.c:2555 config/tc-v850.c:2562 config/tc-v850.c:2576
+#: config/tc-v850.c:2590 config/tc-v850.c:2596 config/tc-v850.c:2933
msgid "immediate operand is too large"
msgstr "операнд пришвидшеного викориÑÑ‚Ð°Ð½Ð½Ñ Ñ” надто великим"
-#: config/tc-v850.c:2494
+#: config/tc-v850.c:2491
#, c-format
msgid "AAARG -> unhandled constant reloc: %d"
msgstr "AAARG -> непридатне до обробки Ñтале переÑуваннÑ: %d"
-#: config/tc-v850.c:2629 config/tc-v850.c:2640
+#: config/tc-v850.c:2626 config/tc-v850.c:2637
msgid "constant too big to fit into instruction"
msgstr "Ñтала Ñ” надто великою Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— інÑтрукції"
-#: config/tc-v850.c:2715
+#: config/tc-v850.c:2712
msgid "odd number cannot be used here"
msgstr "тут не можна викориÑтовувати непарні чиÑла"
-#: config/tc-v850.c:2760
+#: config/tc-v850.c:2757
msgid "invalid register name"
msgstr "некоректна назва регіÑтра"
-#: config/tc-v850.c:2766
+#: config/tc-v850.c:2763
msgid "register r0 cannot be used here"
msgstr "тут не можна викориÑтовувати регіÑÑ‚Ñ€ r0"
-#: config/tc-v850.c:2772
+#: config/tc-v850.c:2769
msgid "odd register cannot be used here"
msgstr "тут не можна викориÑтовувати непарний регіÑÑ‚Ñ€"
-#: config/tc-v850.c:2781
+#: config/tc-v850.c:2778
msgid "invalid system register name"
msgstr "некоректна назва ÑиÑтемного регіÑтра"
-#: config/tc-v850.c:2795
+#: config/tc-v850.c:2792
msgid "expected EP register"
msgstr "мало бути викориÑтано регіÑÑ‚Ñ€ EP"
-#: config/tc-v850.c:2812 config/tc-v850.c:2825
+#: config/tc-v850.c:2809 config/tc-v850.c:2822
msgid "invalid condition code name"
msgstr "некоректна назва коду умови"
-#: config/tc-v850.c:2818
+#: config/tc-v850.c:2815
msgid "condition sa cannot be used here"
msgstr "тут не можна викориÑтовувати умову sa"
-#: config/tc-v850.c:2831
+#: config/tc-v850.c:2828
msgid "invalid cache operation name"
msgstr "некоректна назва обробки кешу"
-#: config/tc-v850.c:2836
+#: config/tc-v850.c:2833
msgid "invalid pref operation name"
msgstr "некоректна назва дії з пріоритетизації"
-#: config/tc-v850.c:2841
+#: config/tc-v850.c:2838
msgid "invalid vector register name"
msgstr "некоректна назва векторного регіÑтра"
-#: config/tc-v850.c:2879
+#: config/tc-v850.c:2876
msgid "syntax error: value is missing before the register name"
msgstr "помилковий ÑинтакÑиÑ: перед назвою регіÑтра не вказано значеннÑ"
-#: config/tc-v850.c:2881
+#: config/tc-v850.c:2878
msgid "syntax error: register not expected"
msgstr "ÑинтакÑична помилка: регіÑÑ‚Ñ€ виÑвивÑÑ Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð¸Ð¼"
-#: config/tc-v850.c:2895
+#: config/tc-v850.c:2892
msgid "syntax error: system register not expected"
msgstr "ÑинтакÑична помилка: ÑиÑтемний регіÑÑ‚Ñ€ виÑвивÑÑ Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð¸Ð¼"
-#: config/tc-v850.c:2900 config/tc-v850.c:2905
+#: config/tc-v850.c:2897 config/tc-v850.c:2902
msgid "syntax error: condition code not expected"
msgstr "ÑинтакÑична помилка: код умови виÑвивÑÑ Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð¸Ð¼"
-#: config/tc-v850.c:2910
+#: config/tc-v850.c:2907
msgid "syntax error: vector register not expected"
msgstr "ÑинтакÑична помилка: векторний регіÑÑ‚Ñ€ виÑвивÑÑ Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð¸Ð¼"
-#: config/tc-v850.c:2920
+#: config/tc-v850.c:2917
msgid "immediate 0 cannot be used here"
msgstr "тут не можна викориÑтовувати Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ 0 пришвидшеного викориÑтаннÑ"
-#: config/tc-v850.c:2944
+#: config/tc-v850.c:2941
msgid "immediate operand is not match"
msgstr "операнд пришвидшеного викориÑÑ‚Ð°Ð½Ð½Ñ Ñ” невідповідним"
-#: config/tc-v850.c:2957
+#: config/tc-v850.c:2954
msgid "displacement is too large"
msgstr "надто велике зміщеннÑ"
-#: config/tc-v850.c:2975 config/tc-xtensa.c:13078
+#: config/tc-v850.c:2972 config/tc-xtensa.c:13078
msgid "invalid operand"
msgstr "некоректний операнд"
-#: config/tc-v850.c:3087
+#: config/tc-v850.c:3084
msgid "loop: 32-bit displacement not supported"
msgstr "loop: підтримки 32-бітового Ð¿ÐµÑ€ÐµÐ¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð½Ðµ передбачено"
@@ -19743,7 +20077,7 @@ msgstr "пропущено Ð¿Ñ–Ð´Ð¿Ð¸Ñ Ð²Ð¸ÐºÐ»Ð¸ÐºÑƒ"
msgid "missing table index"
msgstr "пропущено Ñ–Ð½Ð´ÐµÐºÑ Ñƒ таблиці"
-#: config/tc-wasm32.c:726 config/tc-z80.c:3695 read.c:3878
+#: config/tc-wasm32.c:726 config/tc-z80.c:3695 read.c:3966
#, c-format
msgid "junk at end of line, first unrecognized character is `%c'"
msgstr "зайві Ñимволи наприкінці Ñ€Ñдка, першим нерозпізнаним Ñимволом Ñ” «%c»"
@@ -21001,55 +21335,55 @@ msgstr "незавершена процедура CFI наприкінці фаÐ
msgid "CFI is not supported for this target"
msgstr "підтримки CFI на цьому призначенні не передбачено"
-#: dwarf2dbg.c:379 dwarf2dbg.c:2944
+#: dwarf2dbg.c:378 dwarf2dbg.c:3048
msgid "view number mismatch"
msgstr "невідповідніÑÑ‚ÑŒ номера переглÑду"
-#: dwarf2dbg.c:655 dwarf2dbg.c:1112
+#: dwarf2dbg.c:683 dwarf2dbg.c:1204
#, c-format
msgid "file number %lu is too big"
msgstr "номер файла, %lu, є надто великим"
-#: dwarf2dbg.c:821
+#: dwarf2dbg.c:896
#, c-format
msgid "file table slot %u is already occupied by a different file (%s%s%s vs %s%s%s)"
msgstr "Ñлот таблиці файлів %u вже зайнÑто іншим файлом (%s%s%s, а не %s%s%s)"
-#: dwarf2dbg.c:1062 dwarf2dbg.c:1164
+#: dwarf2dbg.c:1152 dwarf2dbg.c:1244
msgid "file number less than one"
msgstr "номер файла є меншим за одиницю"
-#: dwarf2dbg.c:1097
+#: dwarf2dbg.c:1187
msgid "md5 value too small or not a constant"
msgstr "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ md5 Ñ” надто малим або не Ñ” Ñталим"
-#: dwarf2dbg.c:1171 dwarf2dbg.c:2194
+#: dwarf2dbg.c:1251 dwarf2dbg.c:2289
#, c-format
msgid "unassigned file number %ld"
msgstr "непов’Ñзаний файл з номером %ld"
-#: dwarf2dbg.c:1240
+#: dwarf2dbg.c:1325
msgid "is_stmt value not 0 or 1"
msgstr "значеннÑм is_stmt не Ñ” 0 або 1"
-#: dwarf2dbg.c:1252
+#: dwarf2dbg.c:1337
msgid "isa number less than zero"
msgstr "номер isa є меншим за нуль"
-#: dwarf2dbg.c:1264
+#: dwarf2dbg.c:1349
msgid "discriminator less than zero"
msgstr "диÑкримінатор Ñ” меншим за нуль"
-#: dwarf2dbg.c:1283
+#: dwarf2dbg.c:1368
msgid "numeric view can only be asserted to zero"
msgstr "чиÑловий переглÑд можна порівнювати лише з нулем"
-#: dwarf2dbg.c:1321
+#: dwarf2dbg.c:1406
#, c-format
msgid "unknown .loc sub-directive `%s'"
msgstr "невідома піддиректива .loc «%s»"
-#: dwarf2dbg.c:2307
+#: dwarf2dbg.c:2402
msgid "internal error: unknown dwarf2 format"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: невідомий формат dwarf2"
@@ -21229,11 +21563,11 @@ msgstr "не виÑтачає .end або .bend наприкінці файла"
msgid "GP prologue size exceeds field size, using 0 instead"
msgstr "розмір вÑтупу GP перевищує розмір полÑ, викориÑтовуємо заміÑÑ‚ÑŒ нього 0"
-#: expr.c:73 read.c:3944
+#: expr.c:73 read.c:4032
msgid "bignum invalid"
msgstr "bignum є некоректним"
-#: expr.c:75 read.c:3946 read.c:4452 read.c:5248
+#: expr.c:75 read.c:4034 read.c:4540 read.c:5315
msgid "floating point number invalid"
msgstr "чиÑло з рухомою крапкою Ñ” некоректним"
@@ -21276,7 +21610,7 @@ msgstr "виÑвлено «%c», мало бути «%c»"
msgid "missing '%c'"
msgstr "пропущено «%c»"
-#: expr.c:1007 read.c:4732
+#: expr.c:1007 read.c:4825
msgid "EBCDIC constants are not supported"
msgstr "підтримки Ñталих EBCDIC не передбачено"
@@ -21314,22 +21648,27 @@ msgstr "правий операнд Ñ” великим чиÑлом (bignum); пÑ
msgid "right operand is a float; integer 0 assumed"
msgstr "правий операнд Ñ” чиÑлом з рухомою крапкою; припуÑкаємо, що на його міÑці мало бути ціле нульове чиÑло"
-#: expr.c:1948 symbols.c:1560
+#: expr.c:1948 symbols.c:1590
msgid "division by zero"
msgstr "Ð´Ñ–Ð»ÐµÐ½Ð½Ñ Ð½Ð° нуль"
-#: expr.c:1954 symbols.c:1571
+#: expr.c:1954 symbols.c:1601
msgid "shift count"
msgstr "кількіÑÑ‚ÑŒ зÑувів"
-#: expr.c:2084
+#: expr.c:2089
msgid "operation combines symbols in different segments"
msgstr "у операції поєднано Ñимволи з різних Ñегментів"
-#: expr.c:2409
+#: expr.c:2412
msgid "missing closing '\"'"
msgstr "не виÑтачає завершального Ñимволу «\"»"
+#: expr.c:2440
+#, c-format
+msgid "'\\%c' in quoted symbol name; behavior may change in the future"
+msgstr "«\\%c» у назві Ñимволу у лапках; поведінку може бути змінено у майбутніх верÑÑ–ÑÑ…"
+
#: frags.c:60
msgid "attempt to allocate data in absolute section"
msgstr "Ñпроба розміÑтити дані у абÑолютному розділі"
@@ -21338,7 +21677,7 @@ msgstr "Ñпроба розміÑтити дані у абÑолютному Ñ€Ð
msgid "attempt to allocate data in common section"
msgstr "Ñпроба розміÑтити дані у загальному розділі"
-#: frags.c:115 write.c:1480
+#: frags.c:115 write.c:1509
#, c-format
msgid "can't extend frag %lu char"
msgid_plural "can't extend frag %lu chars"
@@ -21628,18 +21967,19 @@ msgstr "Ð’Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° за адреÑою %s:%d.\n"
msgid "Please report this bug.\n"
msgstr "Будь лаÑка, повідомте про цю ваду.\n"
-#: messages.c:384
+#: messages.c:393
#, c-format
-msgid "%s out of domain (%"
-msgstr "%s поза доменом (%"
+msgid "%s out of domain (%s is not a multiple of %s)"
+msgstr "%s перебуває поза облаÑÑ‚ÑŽ (%s не Ñ” кратним до %s)"
-#: messages.c:401
+#. xgettext:c-format.
+#: messages.c:412
#, c-format
-msgid "%s out of range (%"
-msgstr "%s поза діапазоном (%"
+msgid "%s out of range (%s is not between %s and %s)"
+msgstr "%s перебуває поза припуÑтимими межами (%s не перебуває між %s Ñ– %s)"
#. xgettext:c-format.
-#: messages.c:423
+#: messages.c:426
#, c-format
msgid "%s out of range (0x%s is not between 0x%s and 0x%s)"
msgstr "%s перебуває поза припуÑтимими межами (0x%s не перебуває між 0x%s Ñ– 0x%s)"
@@ -21678,11 +22018,11 @@ msgstr "поÑлідовніÑÑ‚ÑŒ .bundle_lock на %u байтах, але оÐ
msgid "single instruction is %u bytes long, but .bundle_align_mode limit is %u bytes"
msgstr "одинарна інÑÑ‚Ñ€ÑƒÐºÑ†Ñ–Ñ Ð¼Ð°Ñ” довжину %u байтів, Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ .bundle_align_mode дорівнює %u байтів"
-#: read.c:823 read.c:2877 read.c:3448
+#: read.c:823 read.c:2877 read.c:3471
msgid "ignoring fill value in absolute section"
msgstr "ігноруємо Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð·Ð°Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ñƒ абÑолютному розділі"
-#: read.c:825 read.c:2892 read.c:3487
+#: read.c:825 read.c:2892 read.c:3510
#, c-format
msgid "ignoring fill value in section `%s'"
msgstr "ігноруємо Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð·Ð°Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ñƒ «%s»"
@@ -21858,97 +22198,103 @@ msgstr "від'ємне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð»Ñ–Ñ‡Ð¸Ð»ÑŒÐ½Ð¸ÐºÐ° Ð´Ð»Ñ %s - про
msgid "%s without %s"
msgstr "%s без %s"
-#: read.c:3401
+#: read.c:3424
msgid "unsupported variable size or fill value"
msgstr "непідтримуваний розмір змінної або Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð·Ð°Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ"
-#: read.c:3409
+#: read.c:3432
#, c-format
msgid "size value for space directive too large: %lx"
msgstr "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ Ð´Ð»Ñ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ð¸ space Ñ” надто великим: %lx"
-#: read.c:3438
+#: read.c:3461
msgid ".space repeat count is zero, ignored"
msgstr "лічильник повторів .space має нульове значеннÑ, проігноровано"
-#: read.c:3440
+#: read.c:3463
msgid ".space repeat count is negative, ignored"
msgstr "лічильник повторів .space має від’ємне значеннÑ, проігноровано"
-#: read.c:3471
+#: read.c:3494
msgid "space allocation too complex in absolute section"
msgstr "надто Ñкладний вираз Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð¿Ð°Ð¼â€™ÑÑ‚Ñ– у абÑолютному розділі"
-#: read.c:3477
+#: read.c:3500
msgid "space allocation too complex in common section"
msgstr "надто Ñкладний вираз Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð¿Ð°Ð¼â€™ÑÑ‚Ñ– у загальному розділі"
-#: read.c:3595
+#: read.c:3618
msgid "unsupported variable nop control in .nops directive"
msgstr "непідтримуване змінне ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ nop у команді .nops"
-#: read.c:3601
+#: read.c:3624
msgid "negative nop control byte, ignored"
msgstr "від'ємний контрольний байт nop, ігноруємо"
-#: read.c:3831
+#: read.c:3693
+#, c-format
+msgid "unknown floating type '%c'"
+msgstr "невідомий тип Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð· рухомою крапкою, «%c»"
+
+#: read.c:3919
#, c-format
msgid "%s: would close weakref loop: %s"
msgstr "%s: має завершити цикл weakref: %s"
-#: read.c:3881
+#: read.c:3969
#, c-format
msgid "junk at end of line, first unrecognized character valued 0x%x"
msgstr "зайві Ñимволи наприкінці Ñ€Ñдка, перший нерозпізнаний Ñимвол має Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ 0x%x"
-#: read.c:4010 write.c:2391
+#: read.c:4098 write.c:2422
#, c-format
msgid "`%s' can't be equated to common symbol `%s'"
msgstr "«%s» не можна прирівнювати до загального Ñимволу «%s»"
-#: read.c:4138
+#: read.c:4226
msgid "unexpected `\"' in expression"
msgstr "неочікуваний Ñимвол «\"» у виразі"
-#: read.c:4151
+#: read.c:4239
msgid "rva without symbol"
msgstr "rva без Ñимволу"
-#: read.c:4220
+#: read.c:4308
msgid "missing or bad offset expression"
msgstr "не вказано виразу відÑтупу або вказано помилковий вираз"
-#: read.c:4244
+#: read.c:4332
msgid "missing reloc type"
msgstr "не вказано тип переÑуваннÑ"
-#: read.c:4268
+#: read.c:4356
msgid "unrecognized reloc type"
msgstr "нерозпізнаний тип переÑуваннÑ"
-#: read.c:4284
+#: read.c:4372
msgid "bad reloc expression"
msgstr "помилковий вираз переÑуваннÑ"
-#: read.c:4446 read.c:5242
+#: read.c:4534 read.c:5309
msgid "zero assumed for missing expression"
msgstr "Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð¿ÑƒÑ‰ÐµÐ½Ð¾Ð³Ð¾ виразу викориÑтано нульове значеннÑ"
-#: read.c:4466 read.c:5271
+#: read.c:4554 read.c:5338
msgid "attempt to store value in absolute section"
msgstr "Ñпроба зберегти Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñƒ абÑолютному розділі"
-#: read.c:4473 read.c:5277
+#: read.c:4561 read.c:5344
#, c-format
msgid "attempt to store non-zero value in section `%s'"
msgstr "Ñпроба зберегти ненульове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñƒ розділі «%s»"
#. Leading bits contain both 0s & 1s.
-#: read.c:4550
-msgid "value 0x%"
-msgstr "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ 0x%"
+#: read.c:4644
+#, c-format
+msgid "value 0x%s truncated to 0x%s"
+msgstr "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ 0x%s обрізано до 0x%s"
-#: read.c:4594
+#: read.c:4687
#, c-format
msgid "bignum truncated to %d byte"
msgid_plural "bignum truncated to %d bytes"
@@ -21957,142 +22303,137 @@ msgstr[1] "велике чиÑло (bignum) обрізано до %d байтіÐ
msgstr[2] "велике чиÑло (bignum) обрізано до %d байтів"
msgstr[3] "велике чиÑло (bignum) обрізано до %d байта"
-#: read.c:4803 read.c:4980
+#: read.c:4896 read.c:5047
msgid "unresolvable or nonpositive repeat count; using 1"
msgstr "нерозв’Ñзна або недодатна кількіÑÑ‚ÑŒ повторень; викориÑтовуємо 1"
-#: read.c:4852
-#, c-format
-msgid "unknown floating type type '%c'"
-msgstr "невідомий тип Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð· рухомою крапкою, «%c»"
-
-#: read.c:4874
+#: read.c:4939
msgid "floating point constant too large"
msgstr "надто велика Ñтала з рухомою крапкою"
-#: read.c:4937
+#: read.c:5004
msgid "attempt to store float in absolute section"
msgstr "Ñпроба зберегти float у абÑолютному розділі"
-#: read.c:4944
+#: read.c:5011
#, c-format
msgid "attempt to store float in section `%s'"
msgstr "Ñпроба зберегти Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð· рухомою крапкою у розділі «%s»"
-#: read.c:5360
+#: read.c:5427
#, c-format
msgid "attempt to store non-empty string in section `%s'"
msgstr "Ñпроба зберегти непорожній Ñ€Ñдок у розділі «%s»"
-#: read.c:5422
+#: read.c:5489
msgid "strings must be placed into a section"
msgstr "Ñ€Ñдки має бути розташовано у розділі"
-#: read.c:5489
+#: read.c:5556
msgid "expected <nn>"
msgstr "мало бути <nn>"
#. To be compatible with BSD 4.2 as: give the luser a linefeed!!
-#: read.c:5530 read.c:5617
+#: read.c:5597 read.c:5684
msgid "unterminated string; newline inserted"
msgstr "незавершений Ñ€Ñдок; вÑтавлено Ñимвол розриву Ñ€Ñдка"
-#: read.c:5631
+#: read.c:5698
msgid "bad escaped character in string"
msgstr "помилковий екранований Ñимвол у Ñ€Ñдку"
-#: read.c:5655
+#: read.c:5722
msgid "expected address expression"
msgstr "мало бути вказано вираз Ð´Ð»Ñ Ð°Ð´Ñ€ÐµÑи"
-#: read.c:5674
+#: read.c:5741
#, c-format
msgid "symbol \"%s\" undefined; zero assumed"
msgstr "не визначено Ñимвол «%s»; припуÑкаємо нульове значеннÑ"
-#: read.c:5677
+#: read.c:5744
msgid "some symbol undefined; zero assumed"
msgstr "невизначений Ñимвол; припуÑкаємо нульове значеннÑ"
-#: read.c:5711
+#: read.c:5778
msgid "this string may not contain '\\0'"
msgstr "у цьому Ñ€Ñдку не повинно міÑтитиÑÑ Â«\\0»"
-#: read.c:5748
+#: read.c:5815
msgid "missing string"
msgstr "не виÑтачає Ñ€Ñдка"
-#: read.c:5839
+#: read.c:5906
#, c-format
msgid ".incbin count zero, ignoring `%s'"
msgstr "лічильник .incbin є нульовим, ігноруємо «%s»"
-#: read.c:5865
+#: read.c:5932
#, c-format
msgid "file not found: %s"
msgstr "файл не знайдено: %s"
-#: read.c:5879
+#: read.c:5946
#, c-format
msgid "unable to include `%s'"
msgstr "не вдалоÑÑ Ð²ÐºÐ»ÑŽÑ‡Ð¸Ñ‚Ð¸ «%s»"
-#: read.c:5888
+#: read.c:5955
#, c-format
msgid "seek to end of .incbin file failed `%s'"
msgstr "Ñпроба Ð¿Ð¾Ð·Ð¸Ñ†Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ Ð½Ð° кінець файла .incbin зазнала невдачі, «%s»"
-#: read.c:5899
+#: read.c:5966
#, c-format
msgid "skip (%ld) or count (%ld) invalid for file size (%ld)"
msgstr "пропуÑк (%ld) або кількіÑÑ‚ÑŒ (%ld) Ñ” некоректною Ð´Ð»Ñ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ файла (%ld)"
-#: read.c:5906
+#: read.c:5973
#, c-format
msgid "could not skip to %ld in file `%s'"
msgstr "не вдалоÑÑ Ð¿ÐµÑ€ÐµÐ¹Ñ‚Ð¸ до позиції %ld у файлі «%s»"
-#: read.c:5915
+#: read.c:5982
#, c-format
msgid "truncated file `%s', %ld of %ld bytes read"
msgstr "обрізаний файл «%s», прочитано %ld з %ld байтів"
-#: read.c:6072
+#: read.c:6139
msgid "missing .func"
msgstr "пропущено .func"
-#: read.c:6089
+#: read.c:6156
msgid ".endfunc missing for previous .func"
msgstr "пропущено .endfunc до попереднього .func"
-#: read.c:6148
+#: read.c:6215
#, c-format
msgid ".bundle_align_mode alignment too large (maximum %u)"
msgstr "Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ .bundle_align_mode Ñ” надто великим (макÑимальне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ %u)"
-#: read.c:6153
+#: read.c:6220
msgid "cannot change .bundle_align_mode inside .bundle_lock"
msgstr "не можна змінювати .bundle_align_mode у .bundle_lock"
-#: read.c:6167
+#: read.c:6234
msgid ".bundle_lock is meaningless without .bundle_align_mode"
msgstr ".bundle_lock не має ÑенÑу без .bundle_align_mode"
-#: read.c:6188
+#: read.c:6255
msgid ".bundle_unlock without preceding .bundle_lock"
msgstr ".bundle_unlock без попереднього .bundle_lock"
-#: read.c:6201
+#: read.c:6268
#, c-format
msgid ".bundle_lock sequence is %u bytes, but bundle size is only %u bytes"
msgstr "поÑлідовніÑÑ‚ÑŒ .bundle_lock ÑкладаєтьÑÑ Ñ–Ð· %u байтів, а розмір пакета лише %u байтів"
-#: read.c:6300
+#: read.c:6367
#, c-format
msgid "missing closing `%c'"
msgstr "пропущено завершальний «%c»"
-#: read.c:6302
+#: read.c:6369
msgid "stray `\\'"
msgstr "зайвий Ñимвол «\\»"
@@ -22123,114 +22464,124 @@ msgstr ".stab%c: поле опиÑу «%x» Ñ” надто великим, Ñпр
msgid "comma missing in .xstabs"
msgstr "пропущено кому у .xstabs"
-#: symbols.c:442
+#: symbols.c:324 symbols.c:2455
+#, c-format
+msgid "symbol '%s' contains multibyte characters"
+msgstr "Ñимвол «%s» міÑтить багатобайтову поÑлідовніÑÑ‚ÑŒ"
+
+#: symbols.c:462
#, c-format
msgid "cannot define symbol `%s' in absolute section"
msgstr "не можна визначати Ñимвол «%s» у абÑолютному розділі"
-#: symbols.c:575
+#: symbols.c:595
#, c-format
msgid "symbol `%s' is already defined as \"%s\"/%s%ld"
msgstr "Ñимвол «%s» вже визначено Ñк «%s»/%s%ld"
-#: symbols.c:1169
+#: symbols.c:1189
#, c-format
msgid "invalid operands (%s and %s sections) for `%s'"
msgstr "некоректні операнди (розділи %s і %s) «%s»"
-#: symbols.c:1173
+#: symbols.c:1193
#, c-format
msgid "invalid operand (%s section) for `%s'"
msgstr "некоректний операнд (розділ %s) «%s»"
-#: symbols.c:1181
+#: symbols.c:1201
#, c-format
msgid "invalid operands (%s and %s sections) for `%s' when setting `%s'"
msgstr "некоректні операнди (розділи %s Ñ– %s) «%s» під Ñ‡Ð°Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Â«%s»"
-#: symbols.c:1184
+#: symbols.c:1204
#, c-format
msgid "invalid operand (%s section) for `%s' when setting `%s'"
msgstr "некоректний операнд (розділ %s) «%s» під Ñ‡Ð°Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Â«%s»"
-#: symbols.c:1253
+#: symbols.c:1273
#, c-format
msgid "symbol definition loop encountered at `%s'"
msgstr "виÑвлено циклічне Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñимволу у «%s»"
-#: symbols.c:1280
+#: symbols.c:1300
#, c-format
msgid "cannot convert expression symbol %s to complex relocation"
msgstr "не вдалоÑÑ Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ñимвол виразу %s на Ñкладене переÑуваннÑ"
-#: symbols.c:1562
+#: symbols.c:1592
#, c-format
msgid "division by zero when setting `%s'"
msgstr "Ð´Ñ–Ð»ÐµÐ½Ð½Ñ Ð½Ð° нуль під Ñ‡Ð°Ñ Ñпроби вÑтановити «%s»"
#. See PR 20895 for a reproducer.
-#: symbols.c:1612
+#: symbols.c:1642
msgid "Invalid operation on symbol"
msgstr "Ðекоректна Ð¾Ð¿ÐµÑ€Ð°Ñ†Ñ–Ñ Ð½Ð°Ð´ Ñимволом"
-#: symbols.c:1662 write.c:2440
+#: symbols.c:1692 write.c:2471
#, c-format
msgid "can't resolve value for symbol `%s'"
msgstr "не вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñимволу «%s»"
-#: symbols.c:2123
+#: symbols.c:2153
#, c-format
msgid "\"%d\" (instance number %d of a %s label)"
msgstr "\"%d\" (екземплÑÑ€ із номером %d мітки %s)"
-#: symbols.c:2152
+#: symbols.c:2182
#, c-format
msgid "attempt to get value of unresolved symbol `%s'"
msgstr "Ñпроба Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñимволу невизначеною адреÑою «%s»"
#. Do not reassign section symbols.
-#: symbols.c:2432
+#: symbols.c:2476
msgid "can't make section symbol global"
msgstr "не можна робити Ñимвол розділу загальним"
-#: symbols.c:2438
+#: symbols.c:2482
msgid "can't make register symbol global"
msgstr "не можна робити Ñимвол регіÑтра загальним"
-#: symbols.c:2544
+#: symbols.c:2588
#, c-format
msgid "Accessing function `%s' as thread-local object"
msgstr "Отримуємо доÑтуп до функції «%s» Ñк до локального Ð´Ð»Ñ Ð¿Ð¾Ñ‚Ð¾ÐºÑƒ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð°"
-#: symbols.c:2548
+#: symbols.c:2592
#, c-format
msgid "Accessing `%s' as thread-local object"
msgstr "Отримуємо доÑтуп до «%s» Ñк до локального Ð´Ð»Ñ Ð¿Ð¾Ñ‚Ð¾ÐºÑƒ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð°"
-#: write.c:167
+#: write.c:158
#, c-format
msgid "field fx_size too small to hold %lu"
msgstr "поле fx_size Ñ” надто малим, щоб міÑтити %lu"
-#: write.c:454
+#: write.c:445
#, c-format
msgid "attempt to .org/.space/.nops backwards? (%ld)"
msgstr "Ñпроба Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ .org/.space/.nops назад? (%ld)"
-#: write.c:476
+#: write.c:467
#, c-format
msgid "leb128 operand is an undefined symbol: %s"
msgstr "операнд leb128 перебуває у невизначеному Ñимволі: %s"
-#: write.c:707
+#: write.c:698
msgid "invalid offset expression"
msgstr "некоректний вираз Ð´Ð»Ñ Ð²Ñ–Ð´Ñтупу"
-#: write.c:729
+#: write.c:720
msgid "invalid reloc expression"
msgstr "некоректний вираз переÑуваннÑ"
-#: write.c:1122
+#: write.c:906
+#, c-format
+msgid "can't resolve %s - %s"
+msgstr "не вдалоÑÑ Ñ€Ð¾Ð·Ð²'Ñзати залежніÑÑ‚ÑŒ %s - %s"
+
+#: write.c:1117
#, c-format
msgid "value of %s too large for field of %d byte at %s"
msgid_plural "value of %s too large for field of %d bytes at %s"
@@ -22239,41 +22590,41 @@ msgstr[1] "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ %s Ñ” надто великим Ð´Ð»Ñ Ð¿Ð¾Ð»Ñ Ñƒ %
msgstr[2] "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ %s Ñ” надто великим Ð´Ð»Ñ Ð¿Ð¾Ð»Ñ Ñƒ %d байтів за адреÑою %s"
msgstr[3] "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ %s Ñ” надто великим Ð´Ð»Ñ Ð¿Ð¾Ð»Ñ Ñƒ %d байт за адреÑою %s"
-#: write.c:1138
+#: write.c:1133
#, c-format
msgid "signed .word overflow; switch may be too large; %ld at 0x%lx"
msgstr "Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ .word із знаком; можливо, перемикач Ñ” надто великим; %ld у 0x%lx"
-#: write.c:1179
+#: write.c:1174
msgid "redefined symbol cannot be used on reloc"
msgstr "перевизначений Ñимвол не можна викориÑтовувати у переÑуванні"
-#: write.c:1192
+#: write.c:1187
msgid "relocation out of range"
msgstr "переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð° межі діапазону"
-#: write.c:1195
+#: write.c:1190
#, c-format
msgid "%s:%u: bad return from bfd_install_relocation: %x"
msgstr "%s:%u: помилкове Ð¿Ð¾Ð²ÐµÑ€Ð½ÐµÐ½Ð½Ñ Ð· bfd_install_relocation: %x"
-#: write.c:1223
+#: write.c:1218
msgid "reloc not within (fixed part of) section"
msgstr "переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ð·Ð° розділом (його фікÑованою чаÑтиною)"
-#: write.c:1295
+#: write.c:1290
msgid "internal error: fixup not contained within frag"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð²Ð¸Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð½Ñ Ð½Ðµ міÑтитьÑÑ Ñƒ фрагменті"
-#: write.c:1413 write.c:1550
+#: write.c:1442 write.c:1579
msgid "can't extend frag"
msgstr "неможливо розширити фрагмент"
-#: write.c:1598
+#: write.c:1627
msgid "unimplemented .nops directive"
msgstr "нереалізована директива .nops"
-#: write.c:1632
+#: write.c:1661
#, c-format
msgid "can't write %ld byte to section %s of %s: '%s'"
msgid_plural "can't write %ld bytes to section %s of %s: '%s'"
@@ -22282,7 +22633,7 @@ msgstr[1] "не вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати %ld байти до розділ
msgstr[2] "не вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати %ld байтів до розділу %s %s: «%s»"
msgstr[3] "не вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати %ld байт до розділу %s %s: «%s»"
-#: write.c:1658 write.c:1687 write.c:1724
+#: write.c:1687 write.c:1716 write.c:1753
#, c-format
msgid "can't fill %ld byte in section %s of %s: '%s'"
msgid_plural "can't fill %ld bytes in section %s of %s: '%s'"
@@ -22291,30 +22642,30 @@ msgstr[1] "не вдалоÑÑ Ð·Ð°Ð¿Ð¾Ð²Ð½Ð¸Ñ‚Ð¸ %ld байти у розділ
msgstr[2] "не вдалоÑÑ Ð·Ð°Ð¿Ð¾Ð²Ð½Ð¸Ñ‚Ð¸ %ld байтів у розділі %s %s: «%s»"
msgstr[3] "не вдалоÑÑ Ð·Ð°Ð¿Ð¾Ð²Ð½Ð¸Ñ‚Ð¸ %ld байт у розділі %s %s: «%s»"
-#: write.c:1939
+#: write.c:1970
msgid "unable to create reloc for build note"
msgstr "не вдалоÑÑ Ñтворити переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ð½Ð¾Ñ‚Ð°Ñ‚ÐºÐ¸ щодо збираннÑ"
-#: write.c:1943
+#: write.c:1974
msgid "<gnu build note>"
msgstr "<нотатка щодо Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ gnu>"
-#: write.c:2356
+#: write.c:2387
#, c-format
msgid "%s: global symbols not supported in common sections"
msgstr "%s: підтримки глобальних Ñимволів у загальних розділах не передбачено"
-#: write.c:2370
+#: write.c:2401
#, c-format
msgid "local label `%s' is not defined"
msgstr "локальну мітку «%s» не визначено"
-#: write.c:2398
+#: write.c:2429
#, c-format
msgid "can't make global register symbol `%s'"
msgstr "не вдалоÑÑ Ñтворити загальний регіÑтровий Ñимвол «%s»"
-#: write.c:2707
+#: write.c:2738
#, c-format
msgid "alignment padding (%lu byte) not a multiple of %ld"
msgid_plural "alignment padding (%lu bytes) not a multiple of %ld"
@@ -22323,44 +22674,98 @@ msgstr[1] "Ð·Ð°Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ (%lu байти) не Ñ
msgstr[2] "Ð·Ð°Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ (%lu байтів) не Ñ” кратним до %ld"
msgstr[3] "Ð·Ð°Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ (%lu байт) не Ñ” кратним до %ld"
-#: write.c:2876
+#: write.c:2907
#, c-format
msgid ".word %s-%s+%s didn't fit"
msgstr ".word %s-%s+%s не вкладаєтьÑÑ Ñƒ розмір"
-#: write.c:2970
+#: write.c:3001
msgid "padding added"
msgstr "додано заповненнÑ"
-#: write.c:3021
+#: write.c:3052
msgid "attempt to move .org backwards"
msgstr "Ñпроба переÑÑƒÐ²Ð°Ð½Ð½Ñ .org назад"
-#: write.c:3046
+#: write.c:3077
msgid ".space, .nops or .fill specifies non-absolute value"
msgstr ".space, .nops або .fill задає неабÑолютне значеннÑ"
-#: write.c:3061
+#: write.c:3092
msgid ".space, .nops or .fill with negative value, ignored"
msgstr ".space, .nops або .fill з від’ємним значеннÑм, проігноровано"
-#: write.c:3133
+#: write.c:3164
#, c-format
msgid "Infinite loop encountered whilst attempting to compute the addresses of symbols in section %s"
msgstr "Під Ñ‡Ð°Ñ Ñпроби обчиÑлити адреÑи Ñимволів у розділі %s ÑталоÑÑ Ð·Ð°Ñ†Ð¸ÐºÐ»ÑŽÐ²Ð°Ð½Ð½Ñ"
+#~ msgid "invalid floating point number"
+#~ msgstr "некоректне чиÑло з рухомою крапкою"
+
+#~ msgid "can't resolve `%s' {%s section} - `%s' {%s section}"
+#~ msgstr "не вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ «%s» {розділ %s} - «%s» {розділ %s}"
+
+#~ msgid "Difference of symbols in different sections is not supported"
+#~ msgstr "Підтримки Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ€Ñ–Ð·Ð½Ð¸Ñ… Ñимволів Ð´Ð»Ñ Ñ€Ñ–Ð·Ð½Ð¸Ñ… розділів не передбачено"
+
+#~ msgid "%"
+#~ msgstr "%"
+
+#~ msgid "0x%"
+#~ msgstr "0x%"
+
+#~ msgid "Missing section name"
+#~ msgstr "Ðе вказано назви розділу"
+
+#~ msgid "Expression too complex."
+#~ msgstr "Вираз Ñ” надто Ñкладним."
+
+#~ msgid "GREG expression too complicated"
+#~ msgstr "вираз GREG Ñ” надто Ñкладним"
+
+#~ msgid "internal: bad RISC-V opcode (unknown operand type `CF%c'): %s %s"
+#~ msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: помилковий код операції RISC-V (невідомий тип операнда «CF%c»): %s %s"
+
+#~ msgid "internal: bad RISC-V opcode (unknown operand type `C%c'): %s %s"
+#~ msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: помилковий код операції RISC-V (невідомий тип операнда «C%c»): %s %s"
+
+#~ msgid "internal: bad RISC-V opcode (unknown operand type `F%c'): %s %s"
+#~ msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: помилковий код операції RISC-V (невідомий тип операнда «F%c»): %s %s"
+
+#~ msgid "internal: unknown compressed funct field specifier `CF%c'"
+#~ msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: невідомий Ñпецифікатор ÑтиÑненого Ð¿Ð¾Ð»Ñ Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ—, «CF%c»"
+
+#~ msgid "internal: unknown compressed field specifier `C%c'"
+#~ msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: невідомий Ñпецифікатор ÑтиÑненого полÑ, «C%c»"
+
+#~ msgid "internal: unknown opcode field specifier `O%c'"
+#~ msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: невідомий Ñпецифікатор Ð¿Ð¾Ð»Ñ ÐºÐ¾Ð´Ñƒ операції «O%c»"
+
+#~ msgid "internal: unknown funct field specifier `F%c'\n"
+#~ msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: невідомий Ñпецифікатор Ð¿Ð¾Ð»Ñ Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ—, «F%c»\n"
+
+#~ msgid "unsupported symbol subtraction"
+#~ msgstr "непідтримуване Ð²Ñ–Ð´Ð½Ñ–Ð¼Ð°Ð½Ð½Ñ Ñимволів"
+
+#~ msgid "cannot emit relocation %s against subsy symbol %s"
+#~ msgstr "не можна Ñтворювати переÑÑƒÐ²Ð°Ð½Ð½Ñ %s щодо Ñимволу subsy %s"
+
+#~ msgid "%s out of domain (%"
+#~ msgstr "%s поза доменом (%"
+
+#~ msgid "%s out of range (%"
+#~ msgstr "%s поза діапазоном (%"
+
+#~ msgid "value 0x%"
+#~ msgstr "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ 0x%"
+
#~ msgid "CSR instruction accepts only PDEC"
#~ msgstr "ІнÑÑ‚Ñ€ÑƒÐºÑ†Ñ–Ñ CSR приймає лише PDEC"
#~ msgid "General purpose registers may not be the same"
#~ msgstr "РегіÑтри загального Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð½Ðµ можуть бути однаковими"
-#~ msgid "%s shortened to %s"
-#~ msgstr "%s Ñкорочено до %s"
-
-#~ msgid "0x%lx out range of signed 32bit displacement"
-#~ msgstr "0x%lx поза межами припуÑтимого діапазону 32-бітового Ð¿ÐµÑ€ÐµÐ¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð·Ñ– знаком"
-
#~ msgid "two .function pseudo-ops with no intervening .ef"
#~ msgstr "дві пÑевдооперації .function без проміжної .ef"
@@ -22370,9 +22775,6 @@ msgstr "Під Ñ‡Ð°Ñ Ñпроби обчиÑлити адреÑи ÑимволÑ
#~ msgid "bad FUNCT field specifier 'F%c'\n"
#~ msgstr "помилковий Ñпецифікатор Ð¿Ð¾Ð»Ñ FUNCT, «F%c»\n"
-#~ msgid "Unsupported use of %s"
-#~ msgstr "Ðепідтримуване викориÑÑ‚Ð°Ð½Ð½Ñ %s"
-
#~ msgid ".attribute priv spec must set before any instructions"
#~ msgstr ".attribute priv spec Ñлід вÑтановлювати до будь-Ñких інÑтрукцій"
@@ -22382,9 +22784,6 @@ msgstr "Під Ñ‡Ð°Ñ Ñпроби обчиÑлити адреÑи ÑимволÑ
#~ msgid "value 0x%I64x truncated to 0x%I64x"
#~ msgstr "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ 0x%I64x обрізано до 0x%I64x"
-#~ msgid "value 0x%lx truncated to 0x%lx"
-#~ msgstr "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ 0x%lx обрізано до 0x%lx"
-
#~ msgid " --hash-size=<value> set the hash table size close to <value>\n"
#~ msgstr " --hash-size=<значеннÑ> вÑтановити розмір таблиці хешів близьким до <значеннÑ>\n"
@@ -22439,9 +22838,6 @@ msgstr "Під Ñ‡Ð°Ñ Ñпроби обчиÑлити адреÑи ÑимволÑ
#~ msgid "(unknown reason)"
#~ msgstr "(невідома причина)"
-#~ msgid "Internal error: Can't hash %s: %s"
-#~ msgstr "Ð’Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: не вдалоÑÑ Ñтворити хеш %s: %s"
-
#~ msgid "-mcpu conflict with -march option, using -mcpu"
#~ msgstr "-mcpu конфліктує з параметром -march, викориÑтовуємо -mcpu"
@@ -22802,9 +23198,6 @@ msgstr "Під Ñ‡Ð°Ñ Ñпроби обчиÑлити адреÑи ÑимволÑ
#~ msgid "expecting a register for operand %d"
#~ msgstr "очікуємо на регіÑÑ‚Ñ€ Ð´Ð»Ñ Ð¾Ð¿ÐµÑ€Ð°Ð½Ð´Ð° %d"
-#~ msgid "Internal Error: bad instruction length"
-#~ msgstr "Ð’Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: помилкова довжина інÑтрукції"
-
#~ msgid "only supported with old gcc"
#~ msgstr "підтримуєтьÑÑ Ð»Ð¸ÑˆÐµ у заÑтарілих верÑÑ–ÑÑ… gcc"
@@ -23543,9 +23936,6 @@ msgstr "Під Ñ‡Ð°Ñ Ñпроби обчиÑлити адреÑи ÑимволÑ
#~ msgid "absolute expression required"
#~ msgstr "потрібен невід’ємний вираз"
-#~ msgid "Invalid register number (%d)"
-#~ msgstr "некоректний номер регіÑтра (%d)"
-
#~ msgid "Improper size (%lu)"
#~ msgstr "Ðеналежний розмір (%lu)"
diff --git a/gas/read.c b/gas/read.c
index 523708faa97..71bb664ada4 100644
--- a/gas/read.c
+++ b/gas/read.c
@@ -412,10 +412,8 @@ static const pseudo_typeS potable[] = {
{"exitm", s_mexit, 0},
/* extend */
{"extern", s_ignore, 0}, /* We treat all undef as ext. */
- {"appfile", s_app_file, 1},
- {"appline", s_app_line, 1},
{"fail", s_fail, 0},
- {"file", s_app_file, 0},
+ {"file", s_file, 0},
{"fill", s_fill, 0},
{"float", float_cons, 'f'},
{"format", s_ignore, 0},
@@ -448,7 +446,7 @@ static const pseudo_typeS potable[] = {
{"irepc", s_irp, 1},
{"lcomm", s_lcomm, 0},
{"lflags", s_ignore, 0}, /* Listing flags. */
- {"linefile", s_app_line, 0},
+ {"linefile", s_linefile, 0},
{"linkonce", s_linkonce, 0},
{"list", listing_list, 1}, /* Turn listing on. */
{"llen", listing_psize, 1},
@@ -658,7 +656,7 @@ try_macro (char term, const char *line)
as_bad ("%s", err);
*input_line_pointer++ = term;
input_scrub_include_sb (&out,
- input_line_pointer, 1);
+ input_line_pointer, expanding_macro);
sb_kill (&out);
buffer_limit =
input_scrub_next_buffer (&input_line_pointer);
@@ -1266,7 +1264,7 @@ read_a_source_file (const char *name)
while (ISDIGIT (*input_line_pointer))
{
const long digit = *input_line_pointer - '0';
- if (temp > (LONG_MAX - digit) / 10)
+ if (temp > (INT_MAX - digit) / 10)
{
as_bad (_("local label too large near %s"), backup);
temp = -1;
@@ -1391,6 +1389,7 @@ read_a_source_file (const char *name)
if (size < space)
{
new_tmp[size] = 0;
+ new_length = new_tmp + size - new_buf;
break;
}
@@ -1408,10 +1407,9 @@ read_a_source_file (const char *name)
actual macro expansion (possibly nested) and other
input expansion work. Beware that in messages, line
numbers and possibly file names will be incorrect. */
- new_length = strlen (new_buf);
sb_build (&sbuf, new_length);
sb_add_buffer (&sbuf, new_buf, new_length);
- input_scrub_include_sb (&sbuf, input_line_pointer, 0);
+ input_scrub_include_sb (&sbuf, input_line_pointer, expanding_none);
sb_kill (&sbuf);
buffer_limit = input_scrub_next_buffer (&input_line_pointer);
free (new_buf);
@@ -1940,7 +1938,6 @@ s_mri_common (int small ATTRIBUTE_UNUSED)
if (S_IS_DEFINED (sym) && !S_IS_COMMON (sym))
{
as_bad (_("symbol `%s' is already defined"), S_GET_NAME (sym));
- ignore_rest_of_line ();
mri_comment_end (stop, stopc);
return;
}
@@ -2001,15 +1998,11 @@ s_data (int ignore ATTRIBUTE_UNUSED)
demand_empty_rest_of_line ();
}
-/* Handle the .appfile pseudo-op. This is automatically generated by
- do_scrub_chars when a preprocessor # line comment is seen with a
- file name. This default definition may be overridden by the object
- or CPU specific pseudo-ops. This function is also the default
- definition for .file; the APPFILE argument is 1 for .appfile, 0 for
- .file. */
+/* Handle the .file pseudo-op. This default definition may be overridden by
+ the object or CPU specific pseudo-ops. */
void
-s_app_file_string (char *file, int appfile ATTRIBUTE_UNUSED)
+s_file_string (char *file)
{
#ifdef LISTING
if (listing)
@@ -2017,12 +2010,12 @@ s_app_file_string (char *file, int appfile ATTRIBUTE_UNUSED)
#endif
register_dependency (file);
#ifdef obj_app_file
- obj_app_file (file, appfile);
+ obj_app_file (file);
#endif
}
void
-s_app_file (int appfile)
+s_file (int ignore ATTRIBUTE_UNUSED)
{
char *s;
int length;
@@ -2030,8 +2023,7 @@ s_app_file (int appfile)
/* Some assemblers tolerate immediately following '"'. */
if ((s = demand_copy_string (&length)) != 0)
{
- int may_omit
- = (!new_logical_line_flags (s, -1, 1) && appfile);
+ new_logical_line_flags (s, -1, 1);
/* In MRI mode, the preprocessor may have inserted an extraneous
backquote. */
@@ -2041,8 +2033,7 @@ s_app_file (int appfile)
++input_line_pointer;
demand_empty_rest_of_line ();
- if (!may_omit)
- s_app_file_string (s, appfile);
+ s_file_string (s);
}
}
@@ -2059,29 +2050,25 @@ get_linefile_number (int *flag)
return 1;
}
-/* Handle the .appline pseudo-op. This is automatically generated by
+/* Handle the .linefile pseudo-op. This is automatically generated by
do_scrub_chars when a preprocessor # line comment is seen. This
default definition may be overridden by the object or CPU specific
pseudo-ops. */
void
-s_app_line (int appline)
+s_linefile (int ignore ATTRIBUTE_UNUSED)
{
char *file = NULL;
- int l;
+ int linenum, flags = 0;
/* The given number is that of the next line. */
- if (appline)
- l = get_absolute_expression ();
- else if (!get_linefile_number (&l))
+ if (!get_linefile_number (&linenum))
{
ignore_rest_of_line ();
return;
}
- l--;
-
- if (l < -1)
+ if (linenum < 0)
/* Some of the back ends can't deal with non-positive line numbers.
Besides, it's silly. GCC however will generate a line number of
zero when it is pre-processing builtins for assembler-with-cpp files:
@@ -2092,74 +2079,75 @@ s_app_line (int appline)
in the GCC and GDB testsuites. So we check for negative line numbers
rather than non-positive line numbers. */
as_warn (_("line numbers must be positive; line number %d rejected"),
- l + 1);
+ linenum);
else
{
- int flags = 0;
int length = 0;
- if (!appline)
+ SKIP_WHITESPACE ();
+
+ if (*input_line_pointer == '"')
+ file = demand_copy_string (&length);
+ else if (*input_line_pointer == '.')
{
- SKIP_WHITESPACE ();
+ /* buffer_and_nest() may insert this form. */
+ ++input_line_pointer;
+ flags = 1 << 3;
+ }
- if (*input_line_pointer == '"')
- file = demand_copy_string (&length);
+ if (file)
+ {
+ int this_flag;
- if (file)
- {
- int this_flag;
+ while (get_linefile_number (&this_flag))
+ switch (this_flag)
+ {
+ /* From GCC's cpp documentation:
+ 1: start of a new file.
+ 2: returning to a file after having included another file.
+ 3: following text comes from a system header file.
+ 4: following text should be treated as extern "C".
+
+ 4 is nonsensical for the assembler; 3, we don't care about,
+ so we ignore it just in case a system header file is
+ included while preprocessing assembly. So 1 and 2 are all
+ we care about, and they are mutually incompatible.
+ new_logical_line_flags() demands this. */
+ case 1:
+ case 2:
+ if (flags && flags != (1 << this_flag))
+ as_warn (_("incompatible flag %i in line directive"),
+ this_flag);
+ else
+ flags |= 1 << this_flag;
+ break;
- while (get_linefile_number (&this_flag))
- switch (this_flag)
- {
- /* From GCC's cpp documentation:
- 1: start of a new file.
- 2: returning to a file after having included
- another file.
- 3: following text comes from a system header file.
- 4: following text should be treated as extern "C".
-
- 4 is nonsensical for the assembler; 3, we don't
- care about, so we ignore it just in case a
- system header file is included while
- preprocessing assembly. So 1 and 2 are all we
- care about, and they are mutually incompatible.
- new_logical_line_flags() demands this. */
- case 1:
- case 2:
- if (flags && flags != (1 << this_flag))
- as_warn (_("incompatible flag %i in line directive"),
- this_flag);
- else
- flags |= 1 << this_flag;
- break;
-
- case 3:
- case 4:
- /* We ignore these. */
- break;
-
- default:
- as_warn (_("unsupported flag %i in line directive"),
- this_flag);
- break;
- }
+ case 3:
+ case 4:
+ /* We ignore these. */
+ break;
- if (!is_end_of_line[(unsigned char)*input_line_pointer])
- file = 0;
- }
- }
+ default:
+ as_warn (_("unsupported flag %i in line directive"),
+ this_flag);
+ break;
+ }
+
+ if (!is_end_of_line[(unsigned char)*input_line_pointer])
+ file = NULL;
+ }
- if (appline || file)
+ if (file || flags)
{
- new_logical_line_flags (file, l, flags);
+ linenum--;
+ new_logical_line_flags (file, linenum, flags);
#ifdef LISTING
if (listing)
- listing_source_line (l);
+ listing_source_line (linenum);
#endif
}
}
- if (appline || file)
+ if (file || flags)
demand_empty_rest_of_line ();
else
ignore_rest_of_line ();
@@ -2436,7 +2424,7 @@ s_irp (int irpc)
sb_kill (&s);
- input_scrub_include_sb (&out, input_line_pointer, 1);
+ input_scrub_include_sb (&out, input_line_pointer, expanding_repeat);
sb_kill (&out);
buffer_limit = input_scrub_next_buffer (&input_line_pointer);
}
@@ -3137,7 +3125,7 @@ do_repeat (size_t count, const char *start, const char *end)
sb_kill (&one);
- input_scrub_include_sb (&many, input_line_pointer, 1);
+ input_scrub_include_sb (&many, input_line_pointer, expanding_repeat);
sb_kill (&many);
buffer_limit = input_scrub_next_buffer (&input_line_pointer);
}
@@ -3195,7 +3183,7 @@ do_repeat_with_expander (size_t count,
sb_kill (&one);
- input_scrub_include_sb (&many, input_line_pointer, 1);
+ input_scrub_include_sb (&many, input_line_pointer, expanding_repeat);
sb_kill (&many);
buffer_limit = input_scrub_next_buffer (&input_line_pointer);
}
@@ -3952,12 +3940,19 @@ s_weakref (int ignore ATTRIBUTE_UNUSED)
/* Verify that we are at the end of a line. If not, issue an error and
- skip to EOL. */
+ skip to EOL. This function may leave input_line_pointer one past
+ buffer_limit, so should not be called from places that may
+ dereference input_line_pointer unconditionally. Note that when the
+ gas parser is switched to handling a string (where buffer_limit
+ should be the size of the string excluding the NUL terminator) this
+ will be one past the NUL; is_end_of_line(0) returns true. */
void
demand_empty_rest_of_line (void)
{
SKIP_WHITESPACE ();
+ if (input_line_pointer > buffer_limit)
+ return;
if (is_end_of_line[(unsigned char) *input_line_pointer])
input_line_pointer++;
else
@@ -3970,26 +3965,22 @@ demand_empty_rest_of_line (void)
*input_line_pointer);
ignore_rest_of_line ();
}
-
/* Return pointing just after end-of-line. */
- know (is_end_of_line[(unsigned char) input_line_pointer[-1]]);
}
/* Silently advance to the end of line. Use this after already having
- issued an error about something bad. */
+ issued an error about something bad. Like demand_empty_rest_of_line,
+ this function may leave input_line_pointer one after buffer_limit;
+ Don't call it from within expression parsing code in an attempt to
+ silence further errors. */
void
ignore_rest_of_line (void)
{
- while (input_line_pointer < buffer_limit
- && !is_end_of_line[(unsigned char) *input_line_pointer])
- input_line_pointer++;
-
- input_line_pointer++;
-
+ while (input_line_pointer <= buffer_limit)
+ if (is_end_of_line[(unsigned char) *input_line_pointer++])
+ break;
/* Return pointing just after end-of-line. */
- if (input_line_pointer <= buffer_limit)
- know (is_end_of_line[(unsigned char) input_line_pointer[-1]]);
}
/* Sets frag for given symbol to zero_address_frag, except when the
@@ -6305,7 +6296,7 @@ input_scrub_insert_line (const char *line)
size_t len = strlen (line);
sb_build (&newline, len);
sb_add_buffer (&newline, line, len);
- input_scrub_include_sb (&newline, input_line_pointer, 0);
+ input_scrub_include_sb (&newline, input_line_pointer, expanding_none);
sb_kill (&newline);
buffer_limit = input_scrub_next_buffer (&input_line_pointer);
}
diff --git a/gas/read.h b/gas/read.h
index 670991bb53b..0d2e0e33df4 100644
--- a/gas/read.h
+++ b/gas/read.h
@@ -164,9 +164,9 @@ extern void bss_alloc (symbolS *, addressT, unsigned);
extern offsetT parse_align (int);
extern symbolS *s_comm_internal (int, symbolS *(*) (int, symbolS *, addressT));
extern symbolS *s_lcomm_internal (int, symbolS *, addressT);
-extern void s_app_file_string (char *, int);
-extern void s_app_file (int);
-extern void s_app_line (int);
+extern void s_file_string (char *);
+extern void s_file (int);
+extern void s_linefile (int);
extern void s_bundle_align_mode (int);
extern void s_bundle_lock (int);
extern void s_bundle_unlock (int);
diff --git a/gas/sb.h b/gas/sb.h
index eee313aa08c..4f23b3a23a7 100644
--- a/gas/sb.h
+++ b/gas/sb.h
@@ -65,6 +65,13 @@ extern size_t sb_skip_white (size_t, sb *);
extern size_t sb_skip_comma (size_t, sb *);
/* Actually in input-scrub.c. */
-extern void input_scrub_include_sb (sb *, char *, int);
+enum expansion {
+ /* Note: Order matters! */
+ expanding_none,
+ expanding_repeat,
+ expanding_macro,
+ expanding_nested, /* Only for internal use of input-scrub.c. */
+};
+extern void input_scrub_include_sb (sb *, char *, enum expansion);
#endif /* SB_H */
diff --git a/gas/stamp-h.in b/gas/stamp-h.in
deleted file mode 100644
index 9788f70238c..00000000000
--- a/gas/stamp-h.in
+++ /dev/null
@@ -1 +0,0 @@
-timestamp
diff --git a/gas/symbols.c b/gas/symbols.c
index 8598792176a..fb480be6f21 100644
--- a/gas/symbols.c
+++ b/gas/symbols.c
@@ -61,8 +61,10 @@ struct symbol_flags
/* Whether the symbol can be re-defined. */
unsigned int volatil : 1;
- /* Whether the symbol is a forward reference. */
+ /* Whether the symbol is a forward reference, and whether such has
+ been determined. */
unsigned int forward_ref : 1;
+ unsigned int forward_resolved : 1;
/* This is set if the symbol is defined in an MRI common section.
We handle such sections as single common symbols, so symbols
@@ -202,7 +204,7 @@ static void *
symbol_entry_find (htab_t table, const char *name)
{
hashval_t hash = htab_hash_string (name);
- symbol_entry_t needle = { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ symbol_entry_t needle = { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
hash, name, 0, 0, 0 } };
return htab_find_with_hash (table, &needle, hash);
}
@@ -246,13 +248,6 @@ struct obstack notes;
const char * an_external_name;
#endif
-static const char *save_symbol_name (const char *);
-static void fb_label_init (void);
-static long dollar_label_instance (long);
-static long fb_label_instance (long);
-
-static void print_binary (FILE *, const char *, expressionS *);
-
/* Return a pointer to a new symbol. Die if we can't make a new
symbol. Fill in the symbol's values. Add symbol to end of symbol
chain.
@@ -784,7 +779,9 @@ symbol_clone (symbolS *orgsymP, int replace)
symbolS *
symbol_clone_if_forward_ref (symbolS *symbolP, int is_forward)
{
- if (symbolP && !symbolP->flags.local_symbol)
+ if (symbolP
+ && !symbolP->flags.local_symbol
+ && !symbolP->flags.forward_resolved)
{
symbolS *orig_add_symbol = symbolP->x->value.X_add_symbol;
symbolS *orig_op_symbol = symbolP->x->value.X_op_symbol;
@@ -837,6 +834,7 @@ symbol_clone_if_forward_ref (symbolS *symbolP, int is_forward)
symbolP->x->value.X_add_symbol = add_symbol;
symbolP->x->value.X_op_symbol = op_symbol;
+ symbolP->flags.forward_resolved = 1;
}
return symbolP;
@@ -1366,6 +1364,7 @@ resolve_symbol_value (symbolS *symp)
case O_symbol:
case O_symbol_rva:
+ case O_secidx:
left = resolve_symbol_value (add_symbol);
seg_left = S_GET_SEGMENT (add_symbol);
if (finalize_syms)
@@ -1446,6 +1445,13 @@ resolve_symbol_value (symbolS *symp)
final_val += symp->frag->fr_address + left;
resolved = symbol_resolved_p (add_symbol);
symp->flags.resolving = 0;
+
+ if (op == O_secidx && seg_left != undefined_section)
+ {
+ final_val = 0;
+ break;
+ }
+
goto exit_dont_set_value;
}
else
@@ -1804,16 +1810,17 @@ snapshot_symbol (symbolS **symbolPP, valueT *valueP, segT *segP, fragS **fragPP)
the instance number, keep a list of defined symbols separate from the real
symbol table, and we treat these buggers as a sparse array. */
-static long *dollar_labels;
-static long *dollar_label_instances;
+typedef unsigned int dollar_ent;
+static dollar_ent *dollar_labels;
+static dollar_ent *dollar_label_instances;
static char *dollar_label_defines;
static size_t dollar_label_count;
static size_t dollar_label_max;
int
-dollar_label_defined (long label)
+dollar_label_defined (unsigned int label)
{
- long *i;
+ dollar_ent *i;
know ((dollar_labels != NULL) || (dollar_label_count == 0));
@@ -1825,10 +1832,10 @@ dollar_label_defined (long label)
return 0;
}
-static long
-dollar_label_instance (long label)
+static unsigned int
+dollar_label_instance (unsigned int label)
{
- long *i;
+ dollar_ent *i;
know ((dollar_labels != NULL) || (dollar_label_count == 0));
@@ -1851,9 +1858,9 @@ dollar_label_clear (void)
#define DOLLAR_LABEL_BUMP_BY 10
void
-define_dollar_label (long label)
+define_dollar_label (unsigned int label)
{
- long *i;
+ dollar_ent *i;
for (i = dollar_labels; i < dollar_labels + dollar_label_count; ++i)
if (*i == label)
@@ -1867,8 +1874,8 @@ define_dollar_label (long label)
if (dollar_labels == NULL)
{
- dollar_labels = XNEWVEC (long, DOLLAR_LABEL_BUMP_BY);
- dollar_label_instances = XNEWVEC (long, DOLLAR_LABEL_BUMP_BY);
+ dollar_labels = XNEWVEC (dollar_ent, DOLLAR_LABEL_BUMP_BY);
+ dollar_label_instances = XNEWVEC (dollar_ent, DOLLAR_LABEL_BUMP_BY);
dollar_label_defines = XNEWVEC (char, DOLLAR_LABEL_BUMP_BY);
dollar_label_max = DOLLAR_LABEL_BUMP_BY;
dollar_label_count = 0;
@@ -1876,9 +1883,11 @@ define_dollar_label (long label)
else if (dollar_label_count == dollar_label_max)
{
dollar_label_max += DOLLAR_LABEL_BUMP_BY;
- dollar_labels = XRESIZEVEC (long, dollar_labels, dollar_label_max);
- dollar_label_instances = XRESIZEVEC (long, dollar_label_instances,
- dollar_label_max);
+ dollar_labels = XRESIZEVEC (dollar_ent, dollar_labels,
+ dollar_label_max);
+ dollar_label_instances = XRESIZEVEC (dollar_ent,
+ dollar_label_instances,
+ dollar_label_max);
dollar_label_defines = XRESIZEVEC (char, dollar_label_defines,
dollar_label_max);
} /* if we needed to grow */
@@ -1898,50 +1907,22 @@ define_dollar_label (long label)
symbol. The first "4:" is "L4^A1" - the m numbers begin at 1.
fb labels get the same treatment, except that ^B is used in place
- of ^A. */
+ of ^A.
+
+ AUGEND is 0 for current instance, 1 for new instance. */
-char * /* Return local label name. */
-dollar_label_name (long n, /* we just saw "n$:" : n a number. */
- int augend /* 0 for current instance, 1 for new instance. */)
+char *
+dollar_label_name (unsigned int n, unsigned int augend)
{
- long i;
/* Returned to caller, then copied. Used for created names ("4f"). */
static char symbol_name_build[24];
- char *p;
- char *q;
- char symbol_name_temporary[20]; /* Build up a number, BACKWARDS. */
+ char *p = symbol_name_build;
- know (n >= 0);
- know (augend == 0 || augend == 1);
- p = symbol_name_build;
#ifdef LOCAL_LABEL_PREFIX
*p++ = LOCAL_LABEL_PREFIX;
#endif
- *p++ = 'L';
-
- /* Next code just does sprintf( {}, "%d", n); */
- /* Label number. */
- q = symbol_name_temporary;
- for (*q++ = 0, i = n; i; ++q)
- {
- *q = i % 10 + '0';
- i /= 10;
- }
- while ((*p = *--q) != '\0')
- ++p;
-
- *p++ = DOLLAR_LABEL_CHAR; /* ^A */
-
- /* Instance number. */
- q = symbol_name_temporary;
- for (*q++ = 0, i = dollar_label_instance (n) + augend; i; ++q)
- {
- *q = i % 10 + '0';
- i /= 10;
- }
- while ((*p++ = *--q) != '\0');
-
- /* The label, as a '\0' ended string, starts at symbol_name_build. */
+ sprintf (p, "L%u%c%u",
+ n, DOLLAR_LABEL_CHAR, dollar_label_instance (n) + augend);
return symbol_name_build;
}
@@ -1964,11 +1945,12 @@ dollar_label_name (long n, /* we just saw "n$:" : n a number. */
#define FB_LABEL_SPECIAL (10)
-static long fb_low_counter[FB_LABEL_SPECIAL];
-static long *fb_labels;
-static long *fb_label_instances;
-static long fb_label_count;
-static long fb_label_max;
+typedef unsigned int fb_ent;
+static fb_ent fb_low_counter[FB_LABEL_SPECIAL];
+static fb_ent *fb_labels;
+static fb_ent *fb_label_instances;
+static size_t fb_label_count;
+static size_t fb_label_max;
/* This must be more than FB_LABEL_SPECIAL. */
#define FB_LABEL_BUMP_BY (FB_LABEL_SPECIAL + 6)
@@ -1982,11 +1964,11 @@ fb_label_init (void)
/* Add one to the instance number of this fb label. */
void
-fb_label_instance_inc (long label)
+fb_label_instance_inc (unsigned int label)
{
- long *i;
+ fb_ent *i;
- if ((unsigned long) label < FB_LABEL_SPECIAL)
+ if (label < FB_LABEL_SPECIAL)
{
++fb_low_counter[label];
return;
@@ -2009,8 +1991,8 @@ fb_label_instance_inc (long label)
if (fb_labels == NULL)
{
- fb_labels = XNEWVEC (long, FB_LABEL_BUMP_BY);
- fb_label_instances = XNEWVEC (long, FB_LABEL_BUMP_BY);
+ fb_labels = XNEWVEC (fb_ent, FB_LABEL_BUMP_BY);
+ fb_label_instances = XNEWVEC (fb_ent, FB_LABEL_BUMP_BY);
fb_label_max = FB_LABEL_BUMP_BY;
fb_label_count = FB_LABEL_SPECIAL;
@@ -2018,8 +2000,9 @@ fb_label_instance_inc (long label)
else if (fb_label_count == fb_label_max)
{
fb_label_max += FB_LABEL_BUMP_BY;
- fb_labels = XRESIZEVEC (long, fb_labels, fb_label_max);
- fb_label_instances = XRESIZEVEC (long, fb_label_instances, fb_label_max);
+ fb_labels = XRESIZEVEC (fb_ent, fb_labels, fb_label_max);
+ fb_label_instances = XRESIZEVEC (fb_ent, fb_label_instances,
+ fb_label_max);
} /* if we needed to grow */
fb_labels[fb_label_count] = label;
@@ -2027,15 +2010,13 @@ fb_label_instance_inc (long label)
++fb_label_count;
}
-static long
-fb_label_instance (long label)
+static unsigned int
+fb_label_instance (unsigned int label)
{
- long *i;
+ fb_ent *i;
- if ((unsigned long) label < FB_LABEL_SPECIAL)
- {
- return (fb_low_counter[label]);
- }
+ if (label < FB_LABEL_SPECIAL)
+ return (fb_low_counter[label]);
if (fb_labels != NULL)
{
@@ -2043,10 +2024,8 @@ fb_label_instance (long label)
i < fb_labels + fb_label_count; ++i)
{
if (*i == label)
- {
- return (fb_label_instances[i - fb_labels]);
- } /* if we find it */
- } /* for each existing label */
+ return (fb_label_instances[i - fb_labels]);
+ }
}
/* We didn't find the label, so this must be a reference to the
@@ -2063,55 +2042,29 @@ fb_label_instance (long label)
symbol. The first "4:" is "L4^B1" - the m numbers begin at 1.
dollar labels get the same treatment, except that ^A is used in
- place of ^B. */
+ place of ^B.
-char * /* Return local label name. */
-fb_label_name (long n, /* We just saw "n:", "nf" or "nb" : n a number. */
- long augend /* 0 for nb, 1 for n:, nf. */)
+ AUGEND is 0 for nb, 1 for n:, nf. */
+
+char *
+fb_label_name (unsigned int n, unsigned int augend)
{
- long i;
/* Returned to caller, then copied. Used for created names ("4f"). */
static char symbol_name_build[24];
- char *p;
- char *q;
- char symbol_name_temporary[20]; /* Build up a number, BACKWARDS. */
+ char *p = symbol_name_build;
- know (n >= 0);
#ifdef TC_MMIX
- know ((unsigned long) augend <= 2 /* See mmix_fb_label. */);
+ know (augend <= 2 /* See mmix_fb_label. */);
#else
- know ((unsigned long) augend <= 1);
+ know (augend <= 1);
#endif
- p = symbol_name_build;
+
#ifdef LOCAL_LABEL_PREFIX
*p++ = LOCAL_LABEL_PREFIX;
#endif
- *p++ = 'L';
-
- /* Next code just does sprintf( {}, "%d", n); */
- /* Label number. */
- q = symbol_name_temporary;
- for (*q++ = 0, i = n; i; ++q)
- {
- *q = i % 10 + '0';
- i /= 10;
- }
- while ((*p = *--q) != '\0')
- ++p;
-
- *p++ = LOCAL_LABEL_CHAR; /* ^B */
-
- /* Instance number. */
- q = symbol_name_temporary;
- for (*q++ = 0, i = fb_label_instance (n) + augend; i; ++q)
- {
- *q = i % 10 + '0';
- i /= 10;
- }
- while ((*p++ = *--q) != '\0');
-
- /* The label, as a '\0' ended string, starts at symbol_name_build. */
- return (symbol_name_build);
+ sprintf (p, "L%u%c%u",
+ n, LOCAL_LABEL_CHAR, fb_label_instance (n) + augend);
+ return symbol_name_build;
}
/* Decode name that may have been generated by foo_label_name() above.
diff --git a/gas/symbols.h b/gas/symbols.h
index a6068cba07d..19eb658ca68 100644
--- a/gas/symbols.h
+++ b/gas/symbols.h
@@ -72,13 +72,13 @@ void print_expr (expressionS *);
void print_expr_1 (FILE *, expressionS *);
void print_symbol_value_1 (FILE *, symbolS *);
-int dollar_label_defined (long l);
+int dollar_label_defined (unsigned int);
void dollar_label_clear (void);
-void define_dollar_label (long l);
-char *dollar_label_name (long l, int augend);
+void define_dollar_label (unsigned int);
+char *dollar_label_name (unsigned int, unsigned int);
-void fb_label_instance_inc (long label);
-char *fb_label_name (long n, long augend);
+void fb_label_instance_inc (unsigned int);
+char *fb_label_name (unsigned int, unsigned int);
extern void copy_symbol_attributes (symbolS *, symbolS *);
diff --git a/gas/testsuite/gas/aarch64/illegal-ldapr.l b/gas/testsuite/gas/aarch64/illegal-ldapr.l
index f5d85f0e7a0..5179cf5a477 100644
--- a/gas/testsuite/gas/aarch64/illegal-ldapr.l
+++ b/gas/testsuite/gas/aarch64/illegal-ldapr.l
@@ -2,15 +2,15 @@
[^:]+:18: Error: operand mismatch -- `ldaprb x0,\[x1\]'
[^:]+:19: Error: operand mismatch -- `ldaprh x0,\[x1\]'
[^:]+:20: Error: the optional immediate offset can only be 0 at operand 2 -- `ldapr x0,\[x1,#8\]'
-[^:]+:24: Error: 64-bit integer or SP register expected at operand 2 -- `ldaprb w1,\[xz\]'
-[^:]+:24: Error: the optional immediate offset can only be 0 at operand 2 -- `ldaprb w1,\[x7,#8\]'
-[^:]+:24: Error: invalid addressing mode at operand 2 -- `ldaprb w1,\[x7,#8\]!'
-[^:]+:24: Error: invalid addressing mode at operand 2 -- `ldaprb w1,\[x7\],#8'
-[^:]+:24: Error: 64-bit integer or SP register expected at operand 2 -- `ldaprh w1,\[xz\]'
-[^:]+:24: Error: the optional immediate offset can only be 0 at operand 2 -- `ldaprh w1,\[x7,#8\]'
-[^:]+:24: Error: invalid addressing mode at operand 2 -- `ldaprh w1,\[x7,#8\]!'
-[^:]+:24: Error: invalid addressing mode at operand 2 -- `ldaprh w1,\[x7\],#8'
-[^:]+:24: Error: 64-bit integer or SP register expected at operand 2 -- `ldapr w1,\[xz\]'
-[^:]+:24: Error: the optional immediate offset can only be 0 at operand 2 -- `ldapr w1,\[x7,#8\]'
-[^:]+:24: Error: invalid addressing mode at operand 2 -- `ldapr w1,\[x7,#8\]!'
-[^:]+:24: Error: invalid addressing mode at operand 2 -- `ldapr w1,\[x7\],#8'
+[^:]+:23: Error: 64-bit integer or SP register expected at operand 2 -- `ldaprb w1,\[xz\]'
+[^:]+:23: Error: the optional immediate offset can only be 0 at operand 2 -- `ldaprb w1,\[x7,#8\]'
+[^:]+:23: Error: invalid addressing mode at operand 2 -- `ldaprb w1,\[x7,#8\]!'
+[^:]+:23: Error: invalid addressing mode at operand 2 -- `ldaprb w1,\[x7\],#8'
+[^:]+:23: Error: 64-bit integer or SP register expected at operand 2 -- `ldaprh w1,\[xz\]'
+[^:]+:23: Error: the optional immediate offset can only be 0 at operand 2 -- `ldaprh w1,\[x7,#8\]'
+[^:]+:23: Error: invalid addressing mode at operand 2 -- `ldaprh w1,\[x7,#8\]!'
+[^:]+:23: Error: invalid addressing mode at operand 2 -- `ldaprh w1,\[x7\],#8'
+[^:]+:23: Error: 64-bit integer or SP register expected at operand 2 -- `ldapr w1,\[xz\]'
+[^:]+:23: Error: the optional immediate offset can only be 0 at operand 2 -- `ldapr w1,\[x7,#8\]'
+[^:]+:23: Error: invalid addressing mode at operand 2 -- `ldapr w1,\[x7,#8\]!'
+[^:]+:23: Error: invalid addressing mode at operand 2 -- `ldapr w1,\[x7\],#8'
diff --git a/gas/testsuite/gas/aarch64/illegal.l b/gas/testsuite/gas/aarch64/illegal.l
index 75ef830a8f1..599e1fd8d04 100644
--- a/gas/testsuite/gas/aarch64/illegal.l
+++ b/gas/testsuite/gas/aarch64/illegal.l
@@ -167,118 +167,118 @@
[^:]*:235: Error: .*`msr SPSel,#2'
[^:]*:237: Error: .*`tbl v0.16b,{v1.16b,v3.16b,v5.16b},v2.16b'
[^:]*:238: Error: .*`tbx v0.8b,{v1.16b,v3.16b,v5.16b,v7.16b},v2.8b'
-[^:]*:264: Error: .*`ld2 {v0.8b,v2.8b},\[x0\],#16'
-[^:]*:264: Error: .*`ld2 {v0.8b,v1.8b,v2.8b,v3.8b},\[x0\],#32'
-[^:]*:264: Error: .*`ld2 {v0.8b,v2.8b},\[x0\],x7'
-[^:]*:264: Error: .*`ld2 {v0.8b,v1.8b,v2.8b,v3.8b},\[x0\],x7'
-[^:]*:264: Error: .*`ld2 {v0.4h,v2.4h},\[x0\],#16'
-[^:]*:264: Error: .*`ld2 {v0.4h,v1.4h,v2.4h,v3.4h},\[x0\],#32'
-[^:]*:264: Error: .*`ld2 {v0.4h,v2.4h},\[x0\],x7'
-[^:]*:264: Error: .*`ld2 {v0.4h,v1.4h,v2.4h,v3.4h},\[x0\],x7'
-[^:]*:264: Error: .*`ld2 {v0.2s,v2.2s},\[x0\],#16'
-[^:]*:264: Error: .*`ld2 {v0.2s,v1.2s,v2.2s,v3.2s},\[x0\],#32'
-[^:]*:264: Error: .*`ld2 {v0.2s,v2.2s},\[x0\],x7'
-[^:]*:264: Error: .*`ld2 {v0.2s,v1.2s,v2.2s,v3.2s},\[x0\],x7'
-[^:]*:264: Error: .*`st2 {v0.8b,v2.8b},\[x0\],#16'
-[^:]*:264: Error: .*`st2 {v0.8b,v1.8b,v2.8b,v3.8b},\[x0\],#32'
-[^:]*:264: Error: .*`st2 {v0.8b,v2.8b},\[x0\],x7'
-[^:]*:264: Error: .*`st2 {v0.8b,v1.8b,v2.8b,v3.8b},\[x0\],x7'
-[^:]*:264: Error: .*`st2 {v0.4h,v2.4h},\[x0\],#16'
-[^:]*:264: Error: .*`st2 {v0.4h,v1.4h,v2.4h,v3.4h},\[x0\],#32'
-[^:]*:264: Error: .*`st2 {v0.4h,v2.4h},\[x0\],x7'
-[^:]*:264: Error: .*`st2 {v0.4h,v1.4h,v2.4h,v3.4h},\[x0\],x7'
-[^:]*:264: Error: .*`st2 {v0.2s,v2.2s},\[x0\],#16'
-[^:]*:264: Error: .*`st2 {v0.2s,v1.2s,v2.2s,v3.2s},\[x0\],#32'
-[^:]*:264: Error: .*`st2 {v0.2s,v2.2s},\[x0\],x7'
-[^:]*:264: Error: .*`st2 {v0.2s,v1.2s,v2.2s,v3.2s},\[x0\],x7'
-[^:]*:270: Error: .*`ld2 {v0.16b,v2.16b},\[x0\],#32'
-[^:]*:270: Error: .*`ld2 {v0.16b,v1.16b,v2.16b,v3.16b},\[x0\],#64'
-[^:]*:270: Error: .*`ld2 {v0.16b,v2.16b},\[x0\],x7'
-[^:]*:270: Error: .*`ld2 {v0.16b,v1.16b,v2.16b,v3.16b},\[x0\],x7'
-[^:]*:270: Error: .*`ld2 {v0.8h,v2.8h},\[x0\],#32'
-[^:]*:270: Error: .*`ld2 {v0.8h,v1.8h,v2.8h,v3.8h},\[x0\],#64'
-[^:]*:270: Error: .*`ld2 {v0.8h,v2.8h},\[x0\],x7'
-[^:]*:270: Error: .*`ld2 {v0.8h,v1.8h,v2.8h,v3.8h},\[x0\],x7'
-[^:]*:270: Error: .*`ld2 {v0.4s,v2.4s},\[x0\],#32'
-[^:]*:270: Error: .*`ld2 {v0.4s,v1.4s,v2.4s,v3.4s},\[x0\],#64'
-[^:]*:270: Error: .*`ld2 {v0.4s,v2.4s},\[x0\],x7'
-[^:]*:270: Error: .*`ld2 {v0.4s,v1.4s,v2.4s,v3.4s},\[x0\],x7'
-[^:]*:270: Error: .*`ld2 {v0.2d,v2.2d},\[x0\],#32'
-[^:]*:270: Error: .*`ld2 {v0.2d,v1.2d,v2.2d,v3.2d},\[x0\],#64'
-[^:]*:270: Error: .*`ld2 {v0.2d,v2.2d},\[x0\],x7'
-[^:]*:270: Error: .*`ld2 {v0.2d,v1.2d,v2.2d,v3.2d},\[x0\],x7'
-[^:]*:270: Error: .*`st2 {v0.16b,v2.16b},\[x0\],#32'
-[^:]*:270: Error: .*`st2 {v0.16b,v1.16b,v2.16b,v3.16b},\[x0\],#64'
-[^:]*:270: Error: .*`st2 {v0.16b,v2.16b},\[x0\],x7'
-[^:]*:270: Error: .*`st2 {v0.16b,v1.16b,v2.16b,v3.16b},\[x0\],x7'
-[^:]*:270: Error: .*`st2 {v0.8h,v2.8h},\[x0\],#32'
-[^:]*:270: Error: .*`st2 {v0.8h,v1.8h,v2.8h,v3.8h},\[x0\],#64'
-[^:]*:270: Error: .*`st2 {v0.8h,v2.8h},\[x0\],x7'
-[^:]*:270: Error: .*`st2 {v0.8h,v1.8h,v2.8h,v3.8h},\[x0\],x7'
-[^:]*:270: Error: .*`st2 {v0.4s,v2.4s},\[x0\],#32'
-[^:]*:270: Error: .*`st2 {v0.4s,v1.4s,v2.4s,v3.4s},\[x0\],#64'
-[^:]*:270: Error: .*`st2 {v0.4s,v2.4s},\[x0\],x7'
-[^:]*:270: Error: .*`st2 {v0.4s,v1.4s,v2.4s,v3.4s},\[x0\],x7'
-[^:]*:270: Error: .*`st2 {v0.2d,v2.2d},\[x0\],#32'
-[^:]*:270: Error: .*`st2 {v0.2d,v1.2d,v2.2d,v3.2d},\[x0\],#64'
-[^:]*:270: Error: .*`st2 {v0.2d,v2.2d},\[x0\],x7'
-[^:]*:270: Error: .*`st2 {v0.2d,v1.2d,v2.2d,v3.2d},\[x0\],x7'
-[^:]*:290: Error: .*`ld3 {v0.8b,v2.8b,v4.8b},\[x0\],#24'
-[^:]*:290: Error: .*`ld4 {v0.8b,v2.8b,v4.8b,v6.8b},\[x0\],#32'
-[^:]*:290: Error: .*`ld3 {v0.8b,v2.8b,v4.8b},\[x0\],x7'
-[^:]*:290: Error: .*`ld4 {v0.8b,v2.8b,v4.8b,v6.8b},\[x0\],x7'
-[^:]*:290: Error: .*`ld3 {v0.4h,v2.4h,v4.4h},\[x0\],#24'
-[^:]*:290: Error: .*`ld4 {v0.4h,v2.4h,v4.4h,v6.4h},\[x0\],#32'
-[^:]*:290: Error: .*`ld3 {v0.4h,v2.4h,v4.4h},\[x0\],x7'
-[^:]*:290: Error: .*`ld4 {v0.4h,v2.4h,v4.4h,v6.4h},\[x0\],x7'
-[^:]*:290: Error: .*`ld3 {v0.2s,v2.2s,v4.2s},\[x0\],#24'
-[^:]*:290: Error: .*`ld4 {v0.2s,v2.2s,v4.2s,v6.2s},\[x0\],#32'
-[^:]*:290: Error: .*`ld3 {v0.2s,v2.2s,v4.2s},\[x0\],x7'
-[^:]*:290: Error: .*`ld4 {v0.2s,v2.2s,v4.2s,v6.2s},\[x0\],x7'
-[^:]*:290: Error: .*`st3 {v0.8b,v2.8b,v4.8b},\[x0\],#24'
-[^:]*:290: Error: .*`st4 {v0.8b,v2.8b,v4.8b,v6.8b},\[x0\],#32'
-[^:]*:290: Error: .*`st3 {v0.8b,v2.8b,v4.8b},\[x0\],x7'
-[^:]*:290: Error: .*`st4 {v0.8b,v2.8b,v4.8b,v6.8b},\[x0\],x7'
-[^:]*:290: Error: .*`st3 {v0.4h,v2.4h,v4.4h},\[x0\],#24'
-[^:]*:290: Error: .*`st4 {v0.4h,v2.4h,v4.4h,v6.4h},\[x0\],#32'
-[^:]*:290: Error: .*`st3 {v0.4h,v2.4h,v4.4h},\[x0\],x7'
-[^:]*:290: Error: .*`st4 {v0.4h,v2.4h,v4.4h,v6.4h},\[x0\],x7'
-[^:]*:290: Error: .*`st3 {v0.2s,v2.2s,v4.2s},\[x0\],#24'
-[^:]*:290: Error: .*`st4 {v0.2s,v2.2s,v4.2s,v6.2s},\[x0\],#32'
-[^:]*:290: Error: .*`st3 {v0.2s,v2.2s,v4.2s},\[x0\],x7'
-[^:]*:290: Error: .*`st4 {v0.2s,v2.2s,v4.2s,v6.2s},\[x0\],x7'
-[^:]*:296: Error: .*`ld3 {v0.16b,v2.16b,v4.16b},\[x0\],#48'
-[^:]*:296: Error: .*`ld4 {v0.16b,v2.16b,v4.16b,v6.16b},\[x0\],#64'
-[^:]*:296: Error: .*`ld3 {v0.16b,v2.16b,v4.16b},\[x0\],x7'
-[^:]*:296: Error: .*`ld4 {v0.16b,v2.16b,v4.16b,v6.16b},\[x0\],x7'
-[^:]*:296: Error: .*`ld3 {v0.8h,v2.8h,v4.8h},\[x0\],#48'
-[^:]*:296: Error: .*`ld4 {v0.8h,v2.8h,v4.8h,v6.8h},\[x0\],#64'
-[^:]*:296: Error: .*`ld3 {v0.8h,v2.8h,v4.8h},\[x0\],x7'
-[^:]*:296: Error: .*`ld4 {v0.8h,v2.8h,v4.8h,v6.8h},\[x0\],x7'
-[^:]*:296: Error: .*`ld3 {v0.4s,v2.4s,v4.4s},\[x0\],#48'
-[^:]*:296: Error: .*`ld4 {v0.4s,v2.4s,v4.4s,v6.4s},\[x0\],#64'
-[^:]*:296: Error: .*`ld3 {v0.4s,v2.4s,v4.4s},\[x0\],x7'
-[^:]*:296: Error: .*`ld4 {v0.4s,v2.4s,v4.4s,v6.4s},\[x0\],x7'
-[^:]*:296: Error: .*`ld3 {v0.2d,v2.2d,v4.2d},\[x0\],#48'
-[^:]*:296: Error: .*`ld4 {v0.2d,v2.2d,v4.2d,v6.2d},\[x0\],#64'
-[^:]*:296: Error: .*`ld3 {v0.2d,v2.2d,v4.2d},\[x0\],x7'
-[^:]*:296: Error: .*`ld4 {v0.2d,v2.2d,v4.2d,v6.2d},\[x0\],x7'
-[^:]*:296: Error: .*`st3 {v0.16b,v2.16b,v4.16b},\[x0\],#48'
-[^:]*:296: Error: .*`st4 {v0.16b,v2.16b,v4.16b,v6.16b},\[x0\],#64'
-[^:]*:296: Error: .*`st3 {v0.16b,v2.16b,v4.16b},\[x0\],x7'
-[^:]*:296: Error: .*`st4 {v0.16b,v2.16b,v4.16b,v6.16b},\[x0\],x7'
-[^:]*:296: Error: .*`st3 {v0.8h,v2.8h,v4.8h},\[x0\],#48'
-[^:]*:296: Error: .*`st4 {v0.8h,v2.8h,v4.8h,v6.8h},\[x0\],#64'
-[^:]*:296: Error: .*`st3 {v0.8h,v2.8h,v4.8h},\[x0\],x7'
-[^:]*:296: Error: .*`st4 {v0.8h,v2.8h,v4.8h,v6.8h},\[x0\],x7'
-[^:]*:296: Error: .*`st3 {v0.4s,v2.4s,v4.4s},\[x0\],#48'
-[^:]*:296: Error: .*`st4 {v0.4s,v2.4s,v4.4s,v6.4s},\[x0\],#64'
-[^:]*:296: Error: .*`st3 {v0.4s,v2.4s,v4.4s},\[x0\],x7'
-[^:]*:296: Error: .*`st4 {v0.4s,v2.4s,v4.4s,v6.4s},\[x0\],x7'
-[^:]*:296: Error: .*`st3 {v0.2d,v2.2d,v4.2d},\[x0\],#48'
-[^:]*:296: Error: .*`st4 {v0.2d,v2.2d,v4.2d,v6.2d},\[x0\],#64'
-[^:]*:296: Error: .*`st3 {v0.2d,v2.2d,v4.2d},\[x0\],x7'
-[^:]*:296: Error: .*`st4 {v0.2d,v2.2d,v4.2d,v6.2d},\[x0\],x7'
+[^:]*:262: Error: .*`ld2 {v0.8b,v2.8b},\[x0\],#16'
+[^:]*:262: Error: .*`ld2 {v0.8b,v1.8b,v2.8b,v3.8b},\[x0\],#32'
+[^:]*:262: Error: .*`ld2 {v0.8b,v2.8b},\[x0\],x7'
+[^:]*:262: Error: .*`ld2 {v0.8b,v1.8b,v2.8b,v3.8b},\[x0\],x7'
+[^:]*:262: Error: .*`ld2 {v0.4h,v2.4h},\[x0\],#16'
+[^:]*:262: Error: .*`ld2 {v0.4h,v1.4h,v2.4h,v3.4h},\[x0\],#32'
+[^:]*:262: Error: .*`ld2 {v0.4h,v2.4h},\[x0\],x7'
+[^:]*:262: Error: .*`ld2 {v0.4h,v1.4h,v2.4h,v3.4h},\[x0\],x7'
+[^:]*:262: Error: .*`ld2 {v0.2s,v2.2s},\[x0\],#16'
+[^:]*:262: Error: .*`ld2 {v0.2s,v1.2s,v2.2s,v3.2s},\[x0\],#32'
+[^:]*:262: Error: .*`ld2 {v0.2s,v2.2s},\[x0\],x7'
+[^:]*:262: Error: .*`ld2 {v0.2s,v1.2s,v2.2s,v3.2s},\[x0\],x7'
+[^:]*:262: Error: .*`st2 {v0.8b,v2.8b},\[x0\],#16'
+[^:]*:262: Error: .*`st2 {v0.8b,v1.8b,v2.8b,v3.8b},\[x0\],#32'
+[^:]*:262: Error: .*`st2 {v0.8b,v2.8b},\[x0\],x7'
+[^:]*:262: Error: .*`st2 {v0.8b,v1.8b,v2.8b,v3.8b},\[x0\],x7'
+[^:]*:262: Error: .*`st2 {v0.4h,v2.4h},\[x0\],#16'
+[^:]*:262: Error: .*`st2 {v0.4h,v1.4h,v2.4h,v3.4h},\[x0\],#32'
+[^:]*:262: Error: .*`st2 {v0.4h,v2.4h},\[x0\],x7'
+[^:]*:262: Error: .*`st2 {v0.4h,v1.4h,v2.4h,v3.4h},\[x0\],x7'
+[^:]*:262: Error: .*`st2 {v0.2s,v2.2s},\[x0\],#16'
+[^:]*:262: Error: .*`st2 {v0.2s,v1.2s,v2.2s,v3.2s},\[x0\],#32'
+[^:]*:262: Error: .*`st2 {v0.2s,v2.2s},\[x0\],x7'
+[^:]*:262: Error: .*`st2 {v0.2s,v1.2s,v2.2s,v3.2s},\[x0\],x7'
+[^:]*:268: Error: .*`ld2 {v0.16b,v2.16b},\[x0\],#32'
+[^:]*:268: Error: .*`ld2 {v0.16b,v1.16b,v2.16b,v3.16b},\[x0\],#64'
+[^:]*:268: Error: .*`ld2 {v0.16b,v2.16b},\[x0\],x7'
+[^:]*:268: Error: .*`ld2 {v0.16b,v1.16b,v2.16b,v3.16b},\[x0\],x7'
+[^:]*:268: Error: .*`ld2 {v0.8h,v2.8h},\[x0\],#32'
+[^:]*:268: Error: .*`ld2 {v0.8h,v1.8h,v2.8h,v3.8h},\[x0\],#64'
+[^:]*:268: Error: .*`ld2 {v0.8h,v2.8h},\[x0\],x7'
+[^:]*:268: Error: .*`ld2 {v0.8h,v1.8h,v2.8h,v3.8h},\[x0\],x7'
+[^:]*:268: Error: .*`ld2 {v0.4s,v2.4s},\[x0\],#32'
+[^:]*:268: Error: .*`ld2 {v0.4s,v1.4s,v2.4s,v3.4s},\[x0\],#64'
+[^:]*:268: Error: .*`ld2 {v0.4s,v2.4s},\[x0\],x7'
+[^:]*:268: Error: .*`ld2 {v0.4s,v1.4s,v2.4s,v3.4s},\[x0\],x7'
+[^:]*:268: Error: .*`ld2 {v0.2d,v2.2d},\[x0\],#32'
+[^:]*:268: Error: .*`ld2 {v0.2d,v1.2d,v2.2d,v3.2d},\[x0\],#64'
+[^:]*:268: Error: .*`ld2 {v0.2d,v2.2d},\[x0\],x7'
+[^:]*:268: Error: .*`ld2 {v0.2d,v1.2d,v2.2d,v3.2d},\[x0\],x7'
+[^:]*:268: Error: .*`st2 {v0.16b,v2.16b},\[x0\],#32'
+[^:]*:268: Error: .*`st2 {v0.16b,v1.16b,v2.16b,v3.16b},\[x0\],#64'
+[^:]*:268: Error: .*`st2 {v0.16b,v2.16b},\[x0\],x7'
+[^:]*:268: Error: .*`st2 {v0.16b,v1.16b,v2.16b,v3.16b},\[x0\],x7'
+[^:]*:268: Error: .*`st2 {v0.8h,v2.8h},\[x0\],#32'
+[^:]*:268: Error: .*`st2 {v0.8h,v1.8h,v2.8h,v3.8h},\[x0\],#64'
+[^:]*:268: Error: .*`st2 {v0.8h,v2.8h},\[x0\],x7'
+[^:]*:268: Error: .*`st2 {v0.8h,v1.8h,v2.8h,v3.8h},\[x0\],x7'
+[^:]*:268: Error: .*`st2 {v0.4s,v2.4s},\[x0\],#32'
+[^:]*:268: Error: .*`st2 {v0.4s,v1.4s,v2.4s,v3.4s},\[x0\],#64'
+[^:]*:268: Error: .*`st2 {v0.4s,v2.4s},\[x0\],x7'
+[^:]*:268: Error: .*`st2 {v0.4s,v1.4s,v2.4s,v3.4s},\[x0\],x7'
+[^:]*:268: Error: .*`st2 {v0.2d,v2.2d},\[x0\],#32'
+[^:]*:268: Error: .*`st2 {v0.2d,v1.2d,v2.2d,v3.2d},\[x0\],#64'
+[^:]*:268: Error: .*`st2 {v0.2d,v2.2d},\[x0\],x7'
+[^:]*:268: Error: .*`st2 {v0.2d,v1.2d,v2.2d,v3.2d},\[x0\],x7'
+[^:]*:288: Error: .*`ld3 {v0.8b,v2.8b,v4.8b},\[x0\],#24'
+[^:]*:288: Error: .*`ld4 {v0.8b,v2.8b,v4.8b,v6.8b},\[x0\],#32'
+[^:]*:288: Error: .*`ld3 {v0.8b,v2.8b,v4.8b},\[x0\],x7'
+[^:]*:288: Error: .*`ld4 {v0.8b,v2.8b,v4.8b,v6.8b},\[x0\],x7'
+[^:]*:288: Error: .*`ld3 {v0.4h,v2.4h,v4.4h},\[x0\],#24'
+[^:]*:288: Error: .*`ld4 {v0.4h,v2.4h,v4.4h,v6.4h},\[x0\],#32'
+[^:]*:288: Error: .*`ld3 {v0.4h,v2.4h,v4.4h},\[x0\],x7'
+[^:]*:288: Error: .*`ld4 {v0.4h,v2.4h,v4.4h,v6.4h},\[x0\],x7'
+[^:]*:288: Error: .*`ld3 {v0.2s,v2.2s,v4.2s},\[x0\],#24'
+[^:]*:288: Error: .*`ld4 {v0.2s,v2.2s,v4.2s,v6.2s},\[x0\],#32'
+[^:]*:288: Error: .*`ld3 {v0.2s,v2.2s,v4.2s},\[x0\],x7'
+[^:]*:288: Error: .*`ld4 {v0.2s,v2.2s,v4.2s,v6.2s},\[x0\],x7'
+[^:]*:288: Error: .*`st3 {v0.8b,v2.8b,v4.8b},\[x0\],#24'
+[^:]*:288: Error: .*`st4 {v0.8b,v2.8b,v4.8b,v6.8b},\[x0\],#32'
+[^:]*:288: Error: .*`st3 {v0.8b,v2.8b,v4.8b},\[x0\],x7'
+[^:]*:288: Error: .*`st4 {v0.8b,v2.8b,v4.8b,v6.8b},\[x0\],x7'
+[^:]*:288: Error: .*`st3 {v0.4h,v2.4h,v4.4h},\[x0\],#24'
+[^:]*:288: Error: .*`st4 {v0.4h,v2.4h,v4.4h,v6.4h},\[x0\],#32'
+[^:]*:288: Error: .*`st3 {v0.4h,v2.4h,v4.4h},\[x0\],x7'
+[^:]*:288: Error: .*`st4 {v0.4h,v2.4h,v4.4h,v6.4h},\[x0\],x7'
+[^:]*:288: Error: .*`st3 {v0.2s,v2.2s,v4.2s},\[x0\],#24'
+[^:]*:288: Error: .*`st4 {v0.2s,v2.2s,v4.2s,v6.2s},\[x0\],#32'
+[^:]*:288: Error: .*`st3 {v0.2s,v2.2s,v4.2s},\[x0\],x7'
+[^:]*:288: Error: .*`st4 {v0.2s,v2.2s,v4.2s,v6.2s},\[x0\],x7'
+[^:]*:294: Error: .*`ld3 {v0.16b,v2.16b,v4.16b},\[x0\],#48'
+[^:]*:294: Error: .*`ld4 {v0.16b,v2.16b,v4.16b,v6.16b},\[x0\],#64'
+[^:]*:294: Error: .*`ld3 {v0.16b,v2.16b,v4.16b},\[x0\],x7'
+[^:]*:294: Error: .*`ld4 {v0.16b,v2.16b,v4.16b,v6.16b},\[x0\],x7'
+[^:]*:294: Error: .*`ld3 {v0.8h,v2.8h,v4.8h},\[x0\],#48'
+[^:]*:294: Error: .*`ld4 {v0.8h,v2.8h,v4.8h,v6.8h},\[x0\],#64'
+[^:]*:294: Error: .*`ld3 {v0.8h,v2.8h,v4.8h},\[x0\],x7'
+[^:]*:294: Error: .*`ld4 {v0.8h,v2.8h,v4.8h,v6.8h},\[x0\],x7'
+[^:]*:294: Error: .*`ld3 {v0.4s,v2.4s,v4.4s},\[x0\],#48'
+[^:]*:294: Error: .*`ld4 {v0.4s,v2.4s,v4.4s,v6.4s},\[x0\],#64'
+[^:]*:294: Error: .*`ld3 {v0.4s,v2.4s,v4.4s},\[x0\],x7'
+[^:]*:294: Error: .*`ld4 {v0.4s,v2.4s,v4.4s,v6.4s},\[x0\],x7'
+[^:]*:294: Error: .*`ld3 {v0.2d,v2.2d,v4.2d},\[x0\],#48'
+[^:]*:294: Error: .*`ld4 {v0.2d,v2.2d,v4.2d,v6.2d},\[x0\],#64'
+[^:]*:294: Error: .*`ld3 {v0.2d,v2.2d,v4.2d},\[x0\],x7'
+[^:]*:294: Error: .*`ld4 {v0.2d,v2.2d,v4.2d,v6.2d},\[x0\],x7'
+[^:]*:294: Error: .*`st3 {v0.16b,v2.16b,v4.16b},\[x0\],#48'
+[^:]*:294: Error: .*`st4 {v0.16b,v2.16b,v4.16b,v6.16b},\[x0\],#64'
+[^:]*:294: Error: .*`st3 {v0.16b,v2.16b,v4.16b},\[x0\],x7'
+[^:]*:294: Error: .*`st4 {v0.16b,v2.16b,v4.16b,v6.16b},\[x0\],x7'
+[^:]*:294: Error: .*`st3 {v0.8h,v2.8h,v4.8h},\[x0\],#48'
+[^:]*:294: Error: .*`st4 {v0.8h,v2.8h,v4.8h,v6.8h},\[x0\],#64'
+[^:]*:294: Error: .*`st3 {v0.8h,v2.8h,v4.8h},\[x0\],x7'
+[^:]*:294: Error: .*`st4 {v0.8h,v2.8h,v4.8h,v6.8h},\[x0\],x7'
+[^:]*:294: Error: .*`st3 {v0.4s,v2.4s,v4.4s},\[x0\],#48'
+[^:]*:294: Error: .*`st4 {v0.4s,v2.4s,v4.4s,v6.4s},\[x0\],#64'
+[^:]*:294: Error: .*`st3 {v0.4s,v2.4s,v4.4s},\[x0\],x7'
+[^:]*:294: Error: .*`st4 {v0.4s,v2.4s,v4.4s,v6.4s},\[x0\],x7'
+[^:]*:294: Error: .*`st3 {v0.2d,v2.2d,v4.2d},\[x0\],#48'
+[^:]*:294: Error: .*`st4 {v0.2d,v2.2d,v4.2d,v6.2d},\[x0\],#64'
+[^:]*:294: Error: .*`st3 {v0.2d,v2.2d,v4.2d},\[x0\],x7'
+[^:]*:294: Error: .*`st4 {v0.2d,v2.2d,v4.2d,v6.2d},\[x0\],x7'
[^:]*:300: Error: .*`ld1r {v0.8b,v1.8b},\[x0\],#1'
[^:]*:301: Error: .*`ld1r {v0.16b,v1.16b},\[x0\],#1'
[^:]*:302: Error: .*`ld1r {v0.4h,v1.4h},\[x0\],#2'
@@ -287,98 +287,98 @@
[^:]*:305: Error: .*`ld1r {v0.4s,v1.4s},\[x0\],#4'
[^:]*:306: Error: .*`ld1r {v0.1d,v1.1d},\[x0\],#8'
[^:]*:307: Error: .*`ld1r {v0.2d,v1.2d},\[x0\],#8'
-[^:]*:322: Error: .*`ld2 {v0.h,v2.h}\[1\],\[x0\],#4'
-[^:]*:322: Error: .*`ld3 {v0.h,v2.h,v4.h}\[1\],\[x0\],#6'
-[^:]*:322: Error: .*`ld4 {v0.h,v2.h,v4.h,v6.h}\[1\],\[x0\],#8'
-[^:]*:322: Error: .*`ld2r {v0.4h,v2.4h},\[x0\],#4'
-[^:]*:322: Error: .*`ld3r {v0.4h,v2.4h,v4.4h},\[x0\],#6'
-[^:]*:322: Error: .*`ld4r {v0.4h,v2.4h,v4.4h,v6.4h},\[x0\],#8'
-[^:]*:322: Error: .*`ld2r {v0.8h,v2.8h},\[x0\],#4'
-[^:]*:322: Error: .*`ld3r {v0.8h,v2.8h,v4.8h},\[x0\],#6'
-[^:]*:322: Error: .*`ld4r {v0.8h,v2.8h,v4.8h,v6.8h},\[x0\],#8'
-[^:]*:322: Error: .*`st2 {v0.h,v2.h}\[1\],\[x0\],#4'
-[^:]*:322: Error: .*`st3 {v0.h,v2.h,v4.h}\[1\],\[x0\],#6'
-[^:]*:322: Error: .*`st4 {v0.h,v2.h,v4.h,v6.h}\[1\],\[x0\],#8'
-[^:]*:337: Error: .*`ld2 {v0.s,v2.s}\[1\],\[x0\],#8'
-[^:]*:337: Error: .*`ld3 {v0.s,v2.s,v4.s}\[1\],\[x0\],#12'
-[^:]*:337: Error: .*`ld4 {v0.s,v2.s,v4.s,v6.s}\[1\],\[x0\],#16'
-[^:]*:337: Error: .*`ld2r {v0.2s,v2.2s},\[x0\],#8'
-[^:]*:337: Error: .*`ld3r {v0.2s,v2.2s,v4.2s},\[x0\],#12'
-[^:]*:337: Error: .*`ld4r {v0.2s,v2.2s,v4.2s,v6.2s},\[x0\],#16'
-[^:]*:337: Error: .*`ld2r {v0.4s,v2.4s},\[x0\],#8'
-[^:]*:337: Error: .*`ld3r {v0.4s,v2.4s,v4.4s},\[x0\],#12'
-[^:]*:337: Error: .*`ld4r {v0.4s,v2.4s,v4.4s,v6.4s},\[x0\],#16'
-[^:]*:337: Error: .*`st2 {v0.s,v2.s}\[1\],\[x0\],#8'
-[^:]*:337: Error: .*`st3 {v0.s,v2.s,v4.s}\[1\],\[x0\],#12'
-[^:]*:337: Error: .*`st4 {v0.s,v2.s,v4.s,v6.s}\[1\],\[x0\],#16'
-[^:]*:352: Error: .*`ld2 {v0.d,v2.d}\[1\],\[x0\],#16'
-[^:]*:352: Error: .*`ld3 {v0.d,v2.d,v4.d}\[1\],\[x0\],#24'
-[^:]*:352: Error: .*`ld4 {v0.d,v2.d,v4.d,v6.d}\[1\],\[x0\],#32'
-[^:]*:352: Error: .*`ld2r {v0.1d,v2.1d},\[x0\],#16'
-[^:]*:352: Error: .*`ld3r {v0.1d,v2.1d,v4.1d},\[x0\],#24'
-[^:]*:352: Error: .*`ld4r {v0.1d,v2.1d,v4.1d,v6.1d},\[x0\],#32'
-[^:]*:352: Error: .*`ld2r {v0.2d,v2.2d},\[x0\],#16'
-[^:]*:352: Error: .*`ld3r {v0.2d,v2.2d,v4.2d},\[x0\],#24'
-[^:]*:352: Error: .*`ld4r {v0.2d,v2.2d,v4.2d,v6.2d},\[x0\],#32'
-[^:]*:352: Error: .*`st2 {v0.d,v2.d}\[1\],\[x0\],#16'
-[^:]*:352: Error: .*`st3 {v0.d,v2.d,v4.d}\[1\],\[x0\],#24'
-[^:]*:352: Error: .*`st4 {v0.d,v2.d,v4.d,v6.d}\[1\],\[x0\],#32'
-[^:]*:356: Error: .*`ld1r {v0.8b,v1.8b},\[x0\],x7'
-[^:]*:356: Error: .*`ld1r {v0.16b,v1.16b},\[x0\],x7'
-[^:]*:356: Error: .*`ld1r {v0.4h,v1.4h},\[x0\],x7'
-[^:]*:356: Error: .*`ld1r {v0.8h,v1.8h},\[x0\],x7'
-[^:]*:356: Error: .*`ld1r {v0.2s,v1.2s},\[x0\],x7'
-[^:]*:356: Error: .*`ld1r {v0.4s,v1.4s},\[x0\],x7'
-[^:]*:356: Error: .*`ld1r {v0.1d,v1.1d},\[x0\],x7'
-[^:]*:356: Error: .*`ld1r {v0.2d,v1.2d},\[x0\],x7'
-[^:]*:373: Error: .*`ld2 {v0.b,v2.b}\[1\],\[x0\],x7'
-[^:]*:373: Error: .*`ld3 {v0.b,v2.b,v4.b}\[1\],\[x0\],x7'
-[^:]*:373: Error: .*`ld4 {v0.b,v2.b,v4.b,v6.b}\[1\],\[x0\],x7'
-[^:]*:373: Error: .*`ld2 {v0.h,v2.h}\[1\],\[x0\],x7'
-[^:]*:373: Error: .*`ld3 {v0.h,v2.h,v4.h}\[1\],\[x0\],x7'
-[^:]*:373: Error: .*`ld4 {v0.h,v2.h,v4.h,v6.h}\[1\],\[x0\],x7'
-[^:]*:373: Error: .*`ld2 {v0.s,v2.s}\[1\],\[x0\],x7'
-[^:]*:373: Error: .*`ld3 {v0.s,v2.s,v4.s}\[1\],\[x0\],x7'
-[^:]*:373: Error: .*`ld4 {v0.s,v2.s,v4.s,v6.s}\[1\],\[x0\],x7'
-[^:]*:373: Error: .*`ld2 {v0.d,v2.d}\[1\],\[x0\],x7'
-[^:]*:373: Error: .*`ld3 {v0.d,v2.d,v4.d}\[1\],\[x0\],x7'
-[^:]*:373: Error: .*`ld4 {v0.d,v2.d,v4.d,v6.d}\[1\],\[x0\],x7'
-[^:]*:373: Error: .*`ld2r {v0.8b,v2.8b},\[x0\],x7'
-[^:]*:373: Error: .*`ld3r {v0.8b,v2.8b,v4.8b},\[x0\],x7'
-[^:]*:373: Error: .*`ld4r {v0.8b,v2.8b,v4.8b,v6.8b},\[x0\],x7'
-[^:]*:373: Error: .*`ld2r {v0.16b,v2.16b},\[x0\],x7'
-[^:]*:373: Error: .*`ld3r {v0.16b,v2.16b,v4.16b},\[x0\],x7'
-[^:]*:373: Error: .*`ld4r {v0.16b,v2.16b,v4.16b,v6.16b},\[x0\],x7'
-[^:]*:373: Error: .*`ld2r {v0.4h,v2.4h},\[x0\],x7'
-[^:]*:373: Error: .*`ld3r {v0.4h,v2.4h,v4.4h},\[x0\],x7'
-[^:]*:373: Error: .*`ld4r {v0.4h,v2.4h,v4.4h,v6.4h},\[x0\],x7'
-[^:]*:373: Error: .*`ld2r {v0.8h,v2.8h},\[x0\],x7'
-[^:]*:373: Error: .*`ld3r {v0.8h,v2.8h,v4.8h},\[x0\],x7'
-[^:]*:373: Error: .*`ld4r {v0.8h,v2.8h,v4.8h,v6.8h},\[x0\],x7'
-[^:]*:373: Error: .*`ld2r {v0.2s,v2.2s},\[x0\],x7'
-[^:]*:373: Error: .*`ld3r {v0.2s,v2.2s,v4.2s},\[x0\],x7'
-[^:]*:373: Error: .*`ld4r {v0.2s,v2.2s,v4.2s,v6.2s},\[x0\],x7'
-[^:]*:373: Error: .*`ld2r {v0.4s,v2.4s},\[x0\],x7'
-[^:]*:373: Error: .*`ld3r {v0.4s,v2.4s,v4.4s},\[x0\],x7'
-[^:]*:373: Error: .*`ld4r {v0.4s,v2.4s,v4.4s,v6.4s},\[x0\],x7'
-[^:]*:373: Error: .*`ld2r {v0.1d,v2.1d},\[x0\],x7'
-[^:]*:373: Error: .*`ld3r {v0.1d,v2.1d,v4.1d},\[x0\],x7'
-[^:]*:373: Error: .*`ld4r {v0.1d,v2.1d,v4.1d,v6.1d},\[x0\],x7'
-[^:]*:373: Error: .*`ld2r {v0.2d,v2.2d},\[x0\],x7'
-[^:]*:373: Error: .*`ld3r {v0.2d,v2.2d,v4.2d},\[x0\],x7'
-[^:]*:373: Error: .*`ld4r {v0.2d,v2.2d,v4.2d,v6.2d},\[x0\],x7'
-[^:]*:373: Error: .*`st2 {v0.b,v2.b}\[1\],\[x0\],x7'
-[^:]*:373: Error: .*`st3 {v0.b,v2.b,v4.b}\[1\],\[x0\],x7'
-[^:]*:373: Error: .*`st4 {v0.b,v2.b,v4.b,v6.b}\[1\],\[x0\],x7'
-[^:]*:373: Error: .*`st2 {v0.h,v2.h}\[1\],\[x0\],x7'
-[^:]*:373: Error: .*`st3 {v0.h,v2.h,v4.h}\[1\],\[x0\],x7'
-[^:]*:373: Error: .*`st4 {v0.h,v2.h,v4.h,v6.h}\[1\],\[x0\],x7'
-[^:]*:373: Error: .*`st2 {v0.s,v2.s}\[1\],\[x0\],x7'
-[^:]*:373: Error: .*`st3 {v0.s,v2.s,v4.s}\[1\],\[x0\],x7'
-[^:]*:373: Error: .*`st4 {v0.s,v2.s,v4.s,v6.s}\[1\],\[x0\],x7'
-[^:]*:373: Error: .*`st2 {v0.d,v2.d}\[1\],\[x0\],x7'
-[^:]*:373: Error: .*`st3 {v0.d,v2.d,v4.d}\[1\],\[x0\],x7'
-[^:]*:373: Error: .*`st4 {v0.d,v2.d,v4.d,v6.d}\[1\],\[x0\],x7'
+[^:]*:316: Error: .*`ld2 {v0.h,v2.h}\[1\],\[x0\],#4'
+[^:]*:316: Error: .*`ld3 {v0.h,v2.h,v4.h}\[1\],\[x0\],#6'
+[^:]*:316: Error: .*`ld4 {v0.h,v2.h,v4.h,v6.h}\[1\],\[x0\],#8'
+[^:]*:319: Error: .*`ld2r {v0.4h,v2.4h},\[x0\],#4'
+[^:]*:319: Error: .*`ld3r {v0.4h,v2.4h,v4.4h},\[x0\],#6'
+[^:]*:319: Error: .*`ld4r {v0.4h,v2.4h,v4.4h,v6.4h},\[x0\],#8'
+[^:]*:319: Error: .*`ld2r {v0.8h,v2.8h},\[x0\],#4'
+[^:]*:319: Error: .*`ld3r {v0.8h,v2.8h,v4.8h},\[x0\],#6'
+[^:]*:319: Error: .*`ld4r {v0.8h,v2.8h,v4.8h,v6.8h},\[x0\],#8'
+[^:]*:316: Error: .*`st2 {v0.h,v2.h}\[1\],\[x0\],#4'
+[^:]*:316: Error: .*`st3 {v0.h,v2.h,v4.h}\[1\],\[x0\],#6'
+[^:]*:316: Error: .*`st4 {v0.h,v2.h,v4.h,v6.h}\[1\],\[x0\],#8'
+[^:]*:331: Error: .*`ld2 {v0.s,v2.s}\[1\],\[x0\],#8'
+[^:]*:331: Error: .*`ld3 {v0.s,v2.s,v4.s}\[1\],\[x0\],#12'
+[^:]*:331: Error: .*`ld4 {v0.s,v2.s,v4.s,v6.s}\[1\],\[x0\],#16'
+[^:]*:334: Error: .*`ld2r {v0.2s,v2.2s},\[x0\],#8'
+[^:]*:334: Error: .*`ld3r {v0.2s,v2.2s,v4.2s},\[x0\],#12'
+[^:]*:334: Error: .*`ld4r {v0.2s,v2.2s,v4.2s,v6.2s},\[x0\],#16'
+[^:]*:334: Error: .*`ld2r {v0.4s,v2.4s},\[x0\],#8'
+[^:]*:334: Error: .*`ld3r {v0.4s,v2.4s,v4.4s},\[x0\],#12'
+[^:]*:334: Error: .*`ld4r {v0.4s,v2.4s,v4.4s,v6.4s},\[x0\],#16'
+[^:]*:331: Error: .*`st2 {v0.s,v2.s}\[1\],\[x0\],#8'
+[^:]*:331: Error: .*`st3 {v0.s,v2.s,v4.s}\[1\],\[x0\],#12'
+[^:]*:331: Error: .*`st4 {v0.s,v2.s,v4.s,v6.s}\[1\],\[x0\],#16'
+[^:]*:346: Error: .*`ld2 {v0.d,v2.d}\[1\],\[x0\],#16'
+[^:]*:346: Error: .*`ld3 {v0.d,v2.d,v4.d}\[1\],\[x0\],#24'
+[^:]*:346: Error: .*`ld4 {v0.d,v2.d,v4.d,v6.d}\[1\],\[x0\],#32'
+[^:]*:349: Error: .*`ld2r {v0.1d,v2.1d},\[x0\],#16'
+[^:]*:349: Error: .*`ld3r {v0.1d,v2.1d,v4.1d},\[x0\],#24'
+[^:]*:349: Error: .*`ld4r {v0.1d,v2.1d,v4.1d,v6.1d},\[x0\],#32'
+[^:]*:349: Error: .*`ld2r {v0.2d,v2.2d},\[x0\],#16'
+[^:]*:349: Error: .*`ld3r {v0.2d,v2.2d,v4.2d},\[x0\],#24'
+[^:]*:349: Error: .*`ld4r {v0.2d,v2.2d,v4.2d,v6.2d},\[x0\],#32'
+[^:]*:346: Error: .*`st2 {v0.d,v2.d}\[1\],\[x0\],#16'
+[^:]*:346: Error: .*`st3 {v0.d,v2.d,v4.d}\[1\],\[x0\],#24'
+[^:]*:346: Error: .*`st4 {v0.d,v2.d,v4.d,v6.d}\[1\],\[x0\],#32'
+[^:]*:355: Error: .*`ld1r {v0.8b,v1.8b},\[x0\],x7'
+[^:]*:355: Error: .*`ld1r {v0.16b,v1.16b},\[x0\],x7'
+[^:]*:355: Error: .*`ld1r {v0.4h,v1.4h},\[x0\],x7'
+[^:]*:355: Error: .*`ld1r {v0.8h,v1.8h},\[x0\],x7'
+[^:]*:355: Error: .*`ld1r {v0.2s,v1.2s},\[x0\],x7'
+[^:]*:355: Error: .*`ld1r {v0.4s,v1.4s},\[x0\],x7'
+[^:]*:355: Error: .*`ld1r {v0.1d,v1.1d},\[x0\],x7'
+[^:]*:355: Error: .*`ld1r {v0.2d,v1.2d},\[x0\],x7'
+[^:]*:366: Error: .*`ld2 {v0.b,v2.b}\[1\],\[x0\],x7'
+[^:]*:366: Error: .*`ld3 {v0.b,v2.b,v4.b}\[1\],\[x0\],x7'
+[^:]*:366: Error: .*`ld4 {v0.b,v2.b,v4.b,v6.b}\[1\],\[x0\],x7'
+[^:]*:366: Error: .*`ld2 {v0.h,v2.h}\[1\],\[x0\],x7'
+[^:]*:366: Error: .*`ld3 {v0.h,v2.h,v4.h}\[1\],\[x0\],x7'
+[^:]*:366: Error: .*`ld4 {v0.h,v2.h,v4.h,v6.h}\[1\],\[x0\],x7'
+[^:]*:366: Error: .*`ld2 {v0.s,v2.s}\[1\],\[x0\],x7'
+[^:]*:366: Error: .*`ld3 {v0.s,v2.s,v4.s}\[1\],\[x0\],x7'
+[^:]*:366: Error: .*`ld4 {v0.s,v2.s,v4.s,v6.s}\[1\],\[x0\],x7'
+[^:]*:366: Error: .*`ld2 {v0.d,v2.d}\[1\],\[x0\],x7'
+[^:]*:366: Error: .*`ld3 {v0.d,v2.d,v4.d}\[1\],\[x0\],x7'
+[^:]*:366: Error: .*`ld4 {v0.d,v2.d,v4.d,v6.d}\[1\],\[x0\],x7'
+[^:]*:370: Error: .*`ld2r {v0.8b,v2.8b},\[x0\],x7'
+[^:]*:370: Error: .*`ld3r {v0.8b,v2.8b,v4.8b},\[x0\],x7'
+[^:]*:370: Error: .*`ld4r {v0.8b,v2.8b,v4.8b,v6.8b},\[x0\],x7'
+[^:]*:370: Error: .*`ld2r {v0.16b,v2.16b},\[x0\],x7'
+[^:]*:370: Error: .*`ld3r {v0.16b,v2.16b,v4.16b},\[x0\],x7'
+[^:]*:370: Error: .*`ld4r {v0.16b,v2.16b,v4.16b,v6.16b},\[x0\],x7'
+[^:]*:370: Error: .*`ld2r {v0.4h,v2.4h},\[x0\],x7'
+[^:]*:370: Error: .*`ld3r {v0.4h,v2.4h,v4.4h},\[x0\],x7'
+[^:]*:370: Error: .*`ld4r {v0.4h,v2.4h,v4.4h,v6.4h},\[x0\],x7'
+[^:]*:370: Error: .*`ld2r {v0.8h,v2.8h},\[x0\],x7'
+[^:]*:370: Error: .*`ld3r {v0.8h,v2.8h,v4.8h},\[x0\],x7'
+[^:]*:370: Error: .*`ld4r {v0.8h,v2.8h,v4.8h,v6.8h},\[x0\],x7'
+[^:]*:370: Error: .*`ld2r {v0.2s,v2.2s},\[x0\],x7'
+[^:]*:370: Error: .*`ld3r {v0.2s,v2.2s,v4.2s},\[x0\],x7'
+[^:]*:370: Error: .*`ld4r {v0.2s,v2.2s,v4.2s,v6.2s},\[x0\],x7'
+[^:]*:370: Error: .*`ld2r {v0.4s,v2.4s},\[x0\],x7'
+[^:]*:370: Error: .*`ld3r {v0.4s,v2.4s,v4.4s},\[x0\],x7'
+[^:]*:370: Error: .*`ld4r {v0.4s,v2.4s,v4.4s,v6.4s},\[x0\],x7'
+[^:]*:370: Error: .*`ld2r {v0.1d,v2.1d},\[x0\],x7'
+[^:]*:370: Error: .*`ld3r {v0.1d,v2.1d,v4.1d},\[x0\],x7'
+[^:]*:370: Error: .*`ld4r {v0.1d,v2.1d,v4.1d,v6.1d},\[x0\],x7'
+[^:]*:370: Error: .*`ld2r {v0.2d,v2.2d},\[x0\],x7'
+[^:]*:370: Error: .*`ld3r {v0.2d,v2.2d,v4.2d},\[x0\],x7'
+[^:]*:370: Error: .*`ld4r {v0.2d,v2.2d,v4.2d,v6.2d},\[x0\],x7'
+[^:]*:366: Error: .*`st2 {v0.b,v2.b}\[1\],\[x0\],x7'
+[^:]*:366: Error: .*`st3 {v0.b,v2.b,v4.b}\[1\],\[x0\],x7'
+[^:]*:366: Error: .*`st4 {v0.b,v2.b,v4.b,v6.b}\[1\],\[x0\],x7'
+[^:]*:366: Error: .*`st2 {v0.h,v2.h}\[1\],\[x0\],x7'
+[^:]*:366: Error: .*`st3 {v0.h,v2.h,v4.h}\[1\],\[x0\],x7'
+[^:]*:366: Error: .*`st4 {v0.h,v2.h,v4.h,v6.h}\[1\],\[x0\],x7'
+[^:]*:366: Error: .*`st2 {v0.s,v2.s}\[1\],\[x0\],x7'
+[^:]*:366: Error: .*`st3 {v0.s,v2.s,v4.s}\[1\],\[x0\],x7'
+[^:]*:366: Error: .*`st4 {v0.s,v2.s,v4.s,v6.s}\[1\],\[x0\],x7'
+[^:]*:366: Error: .*`st2 {v0.d,v2.d}\[1\],\[x0\],x7'
+[^:]*:366: Error: .*`st3 {v0.d,v2.d,v4.d}\[1\],\[x0\],x7'
+[^:]*:366: Error: .*`st4 {v0.d,v2.d,v4.d,v6.d}\[1\],\[x0\],x7'
[^:]*:396: Error: .*`ld2 {v0.8B,v2.8B},\[x0\]'
[^:]*:396: Error: .*`ld3 {v0.8B,v2.8B,v4.8B},\[x0\]'
[^:]*:396: Error: .*`ld4 {v0.8B,v2.8B,v4.8B,v6.8B},\[x0\]'
@@ -485,22 +485,22 @@
[^:]*:452: Error: .*`ld4r {v0.2D,v2.2D,v4.2D,v6.2D},\[x0\]'
[^:]*:454: Error: .*`pmull v0.1q,v1.1d,v2.1d'
[^:]*:455: Error: .*`pmull2 v0.1q,v1.2d,v2.2d'
-[^:]*:463: Error: .*`scvtf d0,w1,33'
-[^:]*:463: Error: .*`scvtf s0,w0,33'
-[^:]*:463: Error: .*`scvtf d0,x1,65'
-[^:]*:463: Error: .*`scvtf s0,x1,65'
-[^:]*:463: Error: .*`ucvtf d0,w1,33'
-[^:]*:463: Error: .*`ucvtf s0,w0,33'
-[^:]*:463: Error: .*`ucvtf d0,x1,65'
-[^:]*:463: Error: .*`ucvtf s0,x1,65'
-[^:]*:469: Error: .*`fcvtzs w1,d0,33'
-[^:]*:469: Error: .*`fcvtzs w0,s0,33'
-[^:]*:469: Error: .*`fcvtzs x1,d0,65'
-[^:]*:469: Error: .*`fcvtzs x1,s0,65'
-[^:]*:469: Error: .*`fcvtzu w1,d0,33'
-[^:]*:469: Error: .*`fcvtzu w0,s0,33'
-[^:]*:469: Error: .*`fcvtzu x1,d0,65'
-[^:]*:469: Error: .*`fcvtzu x1,s0,65'
+[^:]*:459: Error: .*`scvtf d0,w1,33'
+[^:]*:460: Error: .*`scvtf s0,w0,33'
+[^:]*:461: Error: .*`scvtf d0,x1,65'
+[^:]*:462: Error: .*`scvtf s0,x1,65'
+[^:]*:459: Error: .*`ucvtf d0,w1,33'
+[^:]*:460: Error: .*`ucvtf s0,w0,33'
+[^:]*:461: Error: .*`ucvtf d0,x1,65'
+[^:]*:462: Error: .*`ucvtf s0,x1,65'
+[^:]*:465: Error: .*`fcvtzs w1,d0,33'
+[^:]*:466: Error: .*`fcvtzs w0,s0,33'
+[^:]*:467: Error: .*`fcvtzs x1,d0,65'
+[^:]*:468: Error: .*`fcvtzs x1,s0,65'
+[^:]*:465: Error: .*`fcvtzu w1,d0,33'
+[^:]*:466: Error: .*`fcvtzu w0,s0,33'
+[^:]*:467: Error: .*`fcvtzu x1,d0,65'
+[^:]*:468: Error: .*`fcvtzu x1,s0,65'
[^:]*:472: Error: .*
[^:]*:475: Error: .*`ldrh w0,\[x1,x2,lsr#1\]'
[^:]*:477: Error: .*`add w0,w1,w2,ror#1'
diff --git a/gas/testsuite/gas/aarch64/inst-directive.d b/gas/testsuite/gas/aarch64/inst-directive.d
index fa64ce85964..36a135f29a4 100644
--- a/gas/testsuite/gas/aarch64/inst-directive.d
+++ b/gas/testsuite/gas/aarch64/inst-directive.d
@@ -6,3 +6,6 @@ Disassembly of section \.text:
0+ <.*>:
0: 3619194c tbz w12, #3, 2328 <\.text\+0x2328>
+ *[0-9a-f]*: d503201f nop
+ *[0-9a-f]*: d503201f nop
+ *[0-9a-f]*: d503201f nop
diff --git a/gas/testsuite/gas/aarch64/inst-directive.s b/gas/testsuite/gas/aarch64/inst-directive.s
index e928362efea..1c2e9bc591b 100644
--- a/gas/testsuite/gas/aarch64/inst-directive.s
+++ b/gas/testsuite/gas/aarch64/inst-directive.s
@@ -3,3 +3,4 @@
.text
.inst 0x3619194c
+ .inst 0xd503201f, 0xd503201f, 0xd503201f
diff --git a/gas/testsuite/gas/aarch64/inst-dwarf.d b/gas/testsuite/gas/aarch64/inst-dwarf.d
new file mode 100644
index 00000000000..f5c0d3503f0
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/inst-dwarf.d
@@ -0,0 +1,15 @@
+#as: -gdwarf-2
+#name: Dwarf line number info for .inst
+#objdump: -WL -w
+#source: inst-directive.s
+
+.*:[ ]+file format .*
+
+Contents of the .debug_line section:
+
+CU: .*/inst-directive.s:
+File name +Line number +Starting address.*
+inst-directive.s +5 +0.*
+inst-directive.s +6 +0x4.*
+inst-directive.s +- +0x10
+#pass
diff --git a/gas/testsuite/gas/aarch64/rng-1.d b/gas/testsuite/gas/aarch64/rng-1.d
new file mode 100644
index 00000000000..8c65cba1d04
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/rng-1.d
@@ -0,0 +1,10 @@
+#source: rng-1.s
+#objdump: -dr
+
+.*: file format .*
+
+Disassembly of section \.text:
+
+0+ <.*>:
+.*: d53b2405 mrs x5, rndr
+.*: d53b2426 mrs x6, rndrrs
diff --git a/gas/testsuite/gas/aarch64/rng-1.s b/gas/testsuite/gas/aarch64/rng-1.s
new file mode 100644
index 00000000000..3565897b291
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/rng-1.s
@@ -0,0 +1,3 @@
+ .arch armv8.4-a+rng
+ mrs x5, rndr
+ mrs x6, rndrrs
diff --git a/gas/testsuite/gas/all/cofftag.d b/gas/testsuite/gas/all/cofftag.d
index 88cf13c7d5f..2d2a4ccfdb8 100644
--- a/gas/testsuite/gas/all/cofftag.d
+++ b/gas/testsuite/gas/all/cofftag.d
@@ -4,22 +4,22 @@
.*: file format .*
SYMBOL TABLE:
-\[ 0\]\(sec -2\)\(fl 0x00\)\(ty 0\)\(scl 103\) \(nx 1\) 0x0+0000 foo.c
+\[ 0\]\(sec -2\)\(fl 0x00\)\(ty 0\)\(scl 103\) \(nx 1\) 0x0+0000 foo.c
File
-\[ 2\]\(sec 1\)\(fl 0x00\)\(ty 0\)\(scl 6\) \(nx 0\) 0x0+0000 gcc2_compiled.
-\[ 3\]\(sec 1\)\(fl 0x00\)\(ty 0\)\(scl 6\) \(nx 0\) 0x0+0000 ___gnu_compiled_c
-\[ 4\]\(sec -2\)\(fl 0x00\)\(ty a\)\(scl 15\) \(nx 1\) 0x0+0000 _token
+\[ 2\]\(sec 1\)\(fl 0x00\)\(ty 0\)\(scl 6\) \(nx 0\) 0x0+0000 gcc2_compiled.
+\[ 3\]\(sec 1\)\(fl 0x00\)\(ty 0\)\(scl 6\) \(nx 0\) 0x0+0000 ___gnu_compiled_c
+\[ 4\]\(sec -2\)\(fl 0x00\)\(ty a\)\(scl 15\) \(nx 1\) 0x0+0000 _token
AUX lnno 0 size 0x4 tagndx 0 endndx 10
-\[ 6\]\(sec -(1|2)\)\(fl 0x00\)\(ty b\)\(scl 16\) \(nx 0\) 0x0+0000 _operator
-\[ 7\]\(sec -(1|2)\)\(fl 0x00\)\(ty b\)\(scl 16\) \(nx 0\) 0x0+0001 _flags
-\[ 8\]\(sec -(1|2)\)\(fl 0x00\)\(ty 0\)\(scl 102\) \(nx 1\) 0x0+0004 .eos
+\[ 6\]\(sec -(1|2)\)\(fl 0x00\)\(ty b\)\(scl 16\) \(nx 0\) 0x0+0000 _operator
+\[ 7\]\(sec -(1|2)\)\(fl 0x00\)\(ty b\)\(scl 16\) \(nx 0\) 0x0+0001 _flags
+\[ 8\]\(sec -(1|2)\)\(fl 0x00\)\(ty 0\)\(scl 102\) \(nx 1\) 0x0+0004 .eos
AUX lnno 0 size 0x4 tagndx 4
-\[ 10\]\(sec 1\)\(fl 0x00\)\(ty 0\)\(scl 3\) \(nx 1\) 0x[0-9a-f]+ .text
+\[ 10\]\(sec 1\)\(fl 0x00\)\(ty 0\)\(scl 3\) \(nx 1\) 0x[0-9a-f]+ .text
AUX scnlen 0x[0-9a-f]+ nreloc 0 nlnno 0
-\[ 12\]\(sec 2\)\(fl 0x00\)\(ty 0\)\(scl 3\) \(nx 1\) 0x[0-9a-f]+ .data
+\[ 12\]\(sec 2\)\(fl 0x00\)\(ty 0\)\(scl 3\) \(nx 1\) 0x[0-9a-f]+ .data
AUX scnlen 0x[0-9a-f]+ nreloc 0 nlnno 0
-\[ 14\]\(sec 3\)\(fl 0x00\)\(ty 0\)\(scl 3\) \(nx 1\) 0x[0-9a-f]+ .bss
+\[ 14\]\(sec 3\)\(fl 0x00\)\(ty 0\)\(scl 3\) \(nx 1\) 0x[0-9a-f]+ .bss
AUX scnlen 0x[0-9a-f]+ nreloc 0 nlnno 0
-\[ 16\]\(sec 2\)\(fl 0x00\)\(ty 2\)\(scl 2\) \(nx 0\) 0x0+0000 _token
-\[ 17\]\(sec 2\)\(fl 0x00\)\(ty a\)\(scl 2\) \(nx 1\) 0x[0-9a-f]+ _what
+\[ 16\]\(sec 2\)\(fl 0x00\)\(ty 2\)\(scl 2\) \(nx 0\) 0x0+0000 _token
+\[ 17\]\(sec 2\)\(fl 0x00\)\(ty a\)\(scl 2\) \(nx 1\) 0x[0-9a-f]+ _what
AUX lnno 0 size 0x4 tagndx 4
diff --git a/gas/testsuite/gas/all/gas.exp b/gas/testsuite/gas/all/gas.exp
index a6c64407687..ae7957b2ee0 100644
--- a/gas/testsuite/gas/all/gas.exp
+++ b/gas/testsuite/gas/all/gas.exp
@@ -461,6 +461,8 @@ if [is_elf_format] {
run_dump_test quoted-sym-names
+run_list_test macro "-alm"
+
run_list_test pr20312
load_lib gas-dg.exp
diff --git a/gas/testsuite/gas/all/macro.l b/gas/testsuite/gas/all/macro.l
new file mode 100644
index 00000000000..75fe338f132
--- /dev/null
+++ b/gas/testsuite/gas/all/macro.l
@@ -0,0 +1,25 @@
+# This should match the output of gas -alm macro.s.
+
+.*: Assembler messages:
+.*:10: Error: too many positional arguments
+.*macro.s.*
+
+
+[ ]*[1-9][0-9]*[ ]+\.macro[ ]+m[ ]+arg1,[ ]*arg2[ ]*
+#...
+[ ]*[1-9][0-9]*[ ]+\.endm[ ]*
+[ ]*[1-9][0-9]*[ ]+
+[ ]*[1-9][0-9]*[ ]+m[ ]+1,[ ]*2
+[ ]*[1-9][0-9]*[ ]+.... 0+10*[ ]+> .byte 1
+[ ]*[1-9][0-9]*[ ]+.... 0+20*[ ]+> .byte 2
+[ ]*[1-9][0-9]*[ ]+m[ ]+3[ ]+4
+[ ]*[1-9][0-9]*[ ]+.... 0+30*[ ]+> .byte 3
+[ ]*[1-9][0-9]*[ ]+.... 0+40*[ ]+> .byte 4
+[ ]*[1-9][0-9]*[ ]+m[ ]+"5",[ ]*"6"
+[ ]*[1-9][0-9]*[ ]+.... 0+50*[ ]+> .byte 5
+[ ]*[1-9][0-9]*[ ]+.... 0+60*[ ]+> .byte 6
+[ ]*[1-9][0-9]*[ ]+m[ ]+"7"[ ]+"8"
+[ ]*[1-9][0-9]*[ ]+.... 0+70*[ ]+> .byte 7
+[ ]*[1-9][0-9]*[ ]+.... 0+80*[ ]+> .byte 8
+[ ]*[1-9][0-9]*[ ]+m[ ]+""[ ]+""[ ]+""
+#pass
diff --git a/gas/testsuite/gas/all/macro.s b/gas/testsuite/gas/all/macro.s
new file mode 100644
index 00000000000..9e70f3067b7
--- /dev/null
+++ b/gas/testsuite/gas/all/macro.s
@@ -0,0 +1,16 @@
+ .macro m arg1, arg2
+ .byte \arg1
+ .byte \arg2
+ .endm
+
+ m 1, 2
+ m 3 4
+ m "5", "6"
+ m "7" "8"
+ m "" "" ""
+
+ .if 0
+ m 1 +2
+ m (3) +4
+ m (5) (6)
+ .endif
diff --git a/gas/testsuite/gas/arm/inst-po-dwarf.d b/gas/testsuite/gas/arm/inst-po-dwarf.d
new file mode 100644
index 00000000000..800e12acf21
--- /dev/null
+++ b/gas/testsuite/gas/arm/inst-po-dwarf.d
@@ -0,0 +1,21 @@
+#as: -gdwarf-2
+#name: Dwarf line number info for .inst
+#objdump: -WL -w
+#source: inst-po.s
+#skip: *-*-pe *-*-wince
+
+.*:[ ]+file format .*
+
+Contents of the .debug_line section:
+
+CU: .*/inst-po.s:
+File name +Line number +Starting address.*
+inst-po.s +5 +0.*
+inst-po.s +12 +0x4.*
+inst-po.s +13 +0x8.*
+inst-po.s +20 +0xe.*
+inst-po.s +22 +0x14.*
+inst-po.s +26 +0x16.*
+inst-po.s +27 +0x1a.*
+inst-po.s +- +0x1e
+#pass
diff --git a/gas/testsuite/gas/arm/mve-vctp-bad.l b/gas/testsuite/gas/arm/mve-vctp-bad.l
index 70e99ddcc21..837d3f429f5 100644
--- a/gas/testsuite/gas/arm/mve-vctp-bad.l
+++ b/gas/testsuite/gas/arm/mve-vctp-bad.l
@@ -1,36 +1,36 @@
[^:]*: Assembler messages:
-[^:]*:8: Error: Type is not allowed for this instruction -- `vctp.s8 r13'
-[^:]*:8: Error: Type is not allowed for this instruction -- `vctp.u16 r13'
-[^:]*:8: Error: Type is not allowed for this instruction -- `vctp.f32 r13'
-[^:]*:8: Error: r15 not allowed here -- `vctp.8 r15'
-[^:]*:8: Error: r15 not allowed here -- `vctp.16 r15'
-[^:]*:8: Error: r15 not allowed here -- `vctp.32 r15'
-[^:]*:8: Error: r15 not allowed here -- `vctp.64 r15'
-[^:]*:8: Error: r15 not allowed here -- `vctp.s8 r15'
-[^:]*:8: Error: r15 not allowed here -- `vctp.u16 r15'
-[^:]*:8: Error: r15 not allowed here -- `vctp.f32 r15'
-[^:]*:14: Error: vector predicated instruction should be in VPT/VPST block -- `vctpt.8 r0'
-[^:]*:14: Error: vector predicated instruction should be in VPT/VPST block -- `vctpt.16 r0'
-[^:]*:14: Error: vector predicated instruction should be in VPT/VPST block -- `vctpt.32 r0'
-[^:]*:14: Error: vector predicated instruction should be in VPT/VPST block -- `vctpt.64 r0'
-[^:]*:14: Error: vector predicated instruction should be in VPT/VPST block -- `vctpt.f32 r0'
-[^:]*:14: Error: vector predicated instruction should be in VPT/VPST block -- `vctpt.8 r1'
-[^:]*:14: Error: vector predicated instruction should be in VPT/VPST block -- `vctpt.16 r1'
-[^:]*:14: Error: vector predicated instruction should be in VPT/VPST block -- `vctpt.32 r1'
-[^:]*:14: Error: vector predicated instruction should be in VPT/VPST block -- `vctpt.64 r1'
-[^:]*:14: Error: vector predicated instruction should be in VPT/VPST block -- `vctpt.f32 r1'
-[^:]*:14: Error: vector predicated instruction should be in VPT/VPST block -- `vctpt.8 r2'
-[^:]*:14: Error: vector predicated instruction should be in VPT/VPST block -- `vctpt.16 r2'
-[^:]*:14: Error: vector predicated instruction should be in VPT/VPST block -- `vctpt.32 r2'
-[^:]*:14: Error: vector predicated instruction should be in VPT/VPST block -- `vctpt.64 r2'
-[^:]*:14: Error: vector predicated instruction should be in VPT/VPST block -- `vctpt.f32 r2'
-[^:]*:14: Error: vector predicated instruction should be in VPT/VPST block -- `vctpt.8 r4'
-[^:]*:14: Error: vector predicated instruction should be in VPT/VPST block -- `vctpt.16 r4'
-[^:]*:14: Error: vector predicated instruction should be in VPT/VPST block -- `vctpt.32 r4'
-[^:]*:14: Error: vector predicated instruction should be in VPT/VPST block -- `vctpt.64 r4'
-[^:]*:14: Error: vector predicated instruction should be in VPT/VPST block -- `vctpt.f32 r4'
-[^:]*:14: Error: vector predicated instruction should be in VPT/VPST block -- `vctpt.8 r8'
-[^:]*:14: Error: vector predicated instruction should be in VPT/VPST block -- `vctpt.16 r8'
-[^:]*:14: Error: vector predicated instruction should be in VPT/VPST block -- `vctpt.32 r8'
-[^:]*:14: Error: vector predicated instruction should be in VPT/VPST block -- `vctpt.64 r8'
-[^:]*:14: Error: vector predicated instruction should be in VPT/VPST block -- `vctpt.f32 r8'
+[^:]*:6: Error: Type is not allowed for this instruction -- `vctp.s8 r13'
+[^:]*:6: Error: Type is not allowed for this instruction -- `vctp.u16 r13'
+[^:]*:6: Error: Type is not allowed for this instruction -- `vctp.f32 r13'
+[^:]*:6: Error: r15 not allowed here -- `vctp.8 r15'
+[^:]*:6: Error: r15 not allowed here -- `vctp.16 r15'
+[^:]*:6: Error: r15 not allowed here -- `vctp.32 r15'
+[^:]*:6: Error: r15 not allowed here -- `vctp.64 r15'
+[^:]*:6: Error: r15 not allowed here -- `vctp.s8 r15'
+[^:]*:6: Error: r15 not allowed here -- `vctp.u16 r15'
+[^:]*:6: Error: r15 not allowed here -- `vctp.f32 r15'
+[^:]*:12: Error: vector predicated instruction should be in VPT/VPST block -- `vctpt.8 r0'
+[^:]*:12: Error: vector predicated instruction should be in VPT/VPST block -- `vctpt.16 r0'
+[^:]*:12: Error: vector predicated instruction should be in VPT/VPST block -- `vctpt.32 r0'
+[^:]*:12: Error: vector predicated instruction should be in VPT/VPST block -- `vctpt.64 r0'
+[^:]*:12: Error: vector predicated instruction should be in VPT/VPST block -- `vctpt.f32 r0'
+[^:]*:12: Error: vector predicated instruction should be in VPT/VPST block -- `vctpt.8 r1'
+[^:]*:12: Error: vector predicated instruction should be in VPT/VPST block -- `vctpt.16 r1'
+[^:]*:12: Error: vector predicated instruction should be in VPT/VPST block -- `vctpt.32 r1'
+[^:]*:12: Error: vector predicated instruction should be in VPT/VPST block -- `vctpt.64 r1'
+[^:]*:12: Error: vector predicated instruction should be in VPT/VPST block -- `vctpt.f32 r1'
+[^:]*:12: Error: vector predicated instruction should be in VPT/VPST block -- `vctpt.8 r2'
+[^:]*:12: Error: vector predicated instruction should be in VPT/VPST block -- `vctpt.16 r2'
+[^:]*:12: Error: vector predicated instruction should be in VPT/VPST block -- `vctpt.32 r2'
+[^:]*:12: Error: vector predicated instruction should be in VPT/VPST block -- `vctpt.64 r2'
+[^:]*:12: Error: vector predicated instruction should be in VPT/VPST block -- `vctpt.f32 r2'
+[^:]*:12: Error: vector predicated instruction should be in VPT/VPST block -- `vctpt.8 r4'
+[^:]*:12: Error: vector predicated instruction should be in VPT/VPST block -- `vctpt.16 r4'
+[^:]*:12: Error: vector predicated instruction should be in VPT/VPST block -- `vctpt.32 r4'
+[^:]*:12: Error: vector predicated instruction should be in VPT/VPST block -- `vctpt.64 r4'
+[^:]*:12: Error: vector predicated instruction should be in VPT/VPST block -- `vctpt.f32 r4'
+[^:]*:12: Error: vector predicated instruction should be in VPT/VPST block -- `vctpt.8 r8'
+[^:]*:12: Error: vector predicated instruction should be in VPT/VPST block -- `vctpt.16 r8'
+[^:]*:12: Error: vector predicated instruction should be in VPT/VPST block -- `vctpt.32 r8'
+[^:]*:12: Error: vector predicated instruction should be in VPT/VPST block -- `vctpt.64 r8'
+[^:]*:12: Error: vector predicated instruction should be in VPT/VPST block -- `vctpt.f32 r8'
diff --git a/gas/testsuite/gas/arm/mve-vldr-bad-3.l b/gas/testsuite/gas/arm/mve-vldr-bad-3.l
index 4b773b109eb..78daa39ad04 100644
--- a/gas/testsuite/gas/arm/mve-vldr-bad-3.l
+++ b/gas/testsuite/gas/arm/mve-vldr-bad-3.l
@@ -133,37 +133,37 @@
[^:]*:134: Error: syntax error -- `vldrweq.32 q0,\[r0\]'
[^:]*:135: Error: vector predicated instruction should be in VPT/VPST block -- `vldrwt.32 q0,\[r0\]'
[^:]*:137: Error: instruction missing MVE vector predication code -- `vldrw.32 q0,\[r0\]'
-[^:]*:140: Error: bad element type for instruction -- `vldrb.16 q0,\[r2,q3\]'
-[^:]*:140: Error: bad element type for instruction -- `vldrb.32 q0,\[r2,q3\]'
-[^:]*:140: Error: bad element type for instruction -- `vldrb.64 q0,\[r2,q3\]'
-[^:]*:140: Error: bad element type for instruction -- `vldrb.f16 q0,\[r2,q3\]'
-[^:]*:140: Error: bad element type for instruction -- `vldrb.f32 q0,\[r2,q3\]'
-[^:]*:140: Error: bad element type for instruction -- `vldrb.f64 q0,\[r2,q3\]'
-[^:]*:140: Error: bad element type for instruction -- `vldrb.p16 q0,\[r2,q3\]'
-[^:]*:140: Error: bad element type for instruction -- `vldrb.p32 q0,\[r2,q3\]'
-[^:]*:140: Error: bad element type for instruction -- `vldrb.p64 q0,\[r2,q3\]'
-[^:]*:140: Error: bad element type for instruction -- `vldrb.s8 q0,\[r2,q3\]'
-[^:]*:143: Error: bad element type for instruction -- `vldrh.8 q0,\[r2,q3,uxtw#1\]'
-[^:]*:143: Error: bad element type for instruction -- `vldrh.32 q0,\[r2,q3,uxtw#1\]'
-[^:]*:143: Error: bad element type for instruction -- `vldrh.64 q0,\[r2,q3,uxtw#1\]'
-[^:]*:143: Error: bad element type for instruction -- `vldrh.f32 q0,\[r2,q3,uxtw#1\]'
-[^:]*:143: Error: bad element type for instruction -- `vldrh.f64 q0,\[r2,q3,uxtw#1\]'
-[^:]*:143: Error: bad element type for instruction -- `vldrh.p32 q0,\[r2,q3,uxtw#1\]'
-[^:]*:143: Error: bad element type for instruction -- `vldrh.p64 q0,\[r2,q3,uxtw#1\]'
-[^:]*:143: Error: bad element type for instruction -- `vldrh.s16 q0,\[r2,q3,uxtw#1\]'
-[^:]*:146: Error: bad element type for instruction -- `vldrw.8 q0,\[r2,q3,uxtw#2\]'
-[^:]*:146: Error: bad element type for instruction -- `vldrw.16 q0,\[r2,q3,uxtw#2\]'
-[^:]*:146: Error: bad element type for instruction -- `vldrw.64 q0,\[r2,q3,uxtw#2\]'
-[^:]*:146: Error: bad element type for instruction -- `vldrw.f16 q0,\[r2,q3,uxtw#2\]'
-[^:]*:146: Error: bad element type for instruction -- `vldrw.f64 q0,\[r2,q3,uxtw#2\]'
-[^:]*:146: Error: bad element type for instruction -- `vldrw.p16 q0,\[r2,q3,uxtw#2\]'
-[^:]*:146: Error: bad element type for instruction -- `vldrw.p64 q0,\[r2,q3,uxtw#2\]'
-[^:]*:146: Error: bad element type for instruction -- `vldrw.s32 q0,\[r2,q3,uxtw#2\]'
-[^:]*:149: Error: bad element type for instruction -- `vldrd.8 q0,\[r2,q3,uxtw#3\]'
-[^:]*:149: Error: bad element type for instruction -- `vldrd.16 q0,\[r2,q3,uxtw#3\]'
-[^:]*:149: Error: bad element type for instruction -- `vldrd.32 q0,\[r2,q3,uxtw#3\]'
-[^:]*:149: Error: bad element type for instruction -- `vldrd.f16 q0,\[r2,q3,uxtw#3\]'
-[^:]*:149: Error: bad element type for instruction -- `vldrd.f32 q0,\[r2,q3,uxtw#3\]'
-[^:]*:149: Error: bad element type for instruction -- `vldrd.p16 q0,\[r2,q3,uxtw#3\]'
-[^:]*:149: Error: bad element type for instruction -- `vldrd.p32 q0,\[r2,q3,uxtw#3\]'
-[^:]*:149: Error: bad element type for instruction -- `vldrd.s64 q0,\[r2,q3,uxtw#3\]'
+[^:]*:139: Error: bad element type for instruction -- `vldrb.16 q0,\[r2,q3\]'
+[^:]*:139: Error: bad element type for instruction -- `vldrb.32 q0,\[r2,q3\]'
+[^:]*:139: Error: bad element type for instruction -- `vldrb.64 q0,\[r2,q3\]'
+[^:]*:139: Error: bad element type for instruction -- `vldrb.f16 q0,\[r2,q3\]'
+[^:]*:139: Error: bad element type for instruction -- `vldrb.f32 q0,\[r2,q3\]'
+[^:]*:139: Error: bad element type for instruction -- `vldrb.f64 q0,\[r2,q3\]'
+[^:]*:139: Error: bad element type for instruction -- `vldrb.p16 q0,\[r2,q3\]'
+[^:]*:139: Error: bad element type for instruction -- `vldrb.p32 q0,\[r2,q3\]'
+[^:]*:139: Error: bad element type for instruction -- `vldrb.p64 q0,\[r2,q3\]'
+[^:]*:139: Error: bad element type for instruction -- `vldrb.s8 q0,\[r2,q3\]'
+[^:]*:142: Error: bad element type for instruction -- `vldrh.8 q0,\[r2,q3,uxtw#1\]'
+[^:]*:142: Error: bad element type for instruction -- `vldrh.32 q0,\[r2,q3,uxtw#1\]'
+[^:]*:142: Error: bad element type for instruction -- `vldrh.64 q0,\[r2,q3,uxtw#1\]'
+[^:]*:142: Error: bad element type for instruction -- `vldrh.f32 q0,\[r2,q3,uxtw#1\]'
+[^:]*:142: Error: bad element type for instruction -- `vldrh.f64 q0,\[r2,q3,uxtw#1\]'
+[^:]*:142: Error: bad element type for instruction -- `vldrh.p32 q0,\[r2,q3,uxtw#1\]'
+[^:]*:142: Error: bad element type for instruction -- `vldrh.p64 q0,\[r2,q3,uxtw#1\]'
+[^:]*:142: Error: bad element type for instruction -- `vldrh.s16 q0,\[r2,q3,uxtw#1\]'
+[^:]*:145: Error: bad element type for instruction -- `vldrw.8 q0,\[r2,q3,uxtw#2\]'
+[^:]*:145: Error: bad element type for instruction -- `vldrw.16 q0,\[r2,q3,uxtw#2\]'
+[^:]*:145: Error: bad element type for instruction -- `vldrw.64 q0,\[r2,q3,uxtw#2\]'
+[^:]*:145: Error: bad element type for instruction -- `vldrw.f16 q0,\[r2,q3,uxtw#2\]'
+[^:]*:145: Error: bad element type for instruction -- `vldrw.f64 q0,\[r2,q3,uxtw#2\]'
+[^:]*:145: Error: bad element type for instruction -- `vldrw.p16 q0,\[r2,q3,uxtw#2\]'
+[^:]*:145: Error: bad element type for instruction -- `vldrw.p64 q0,\[r2,q3,uxtw#2\]'
+[^:]*:145: Error: bad element type for instruction -- `vldrw.s32 q0,\[r2,q3,uxtw#2\]'
+[^:]*:148: Error: bad element type for instruction -- `vldrd.8 q0,\[r2,q3,uxtw#3\]'
+[^:]*:148: Error: bad element type for instruction -- `vldrd.16 q0,\[r2,q3,uxtw#3\]'
+[^:]*:148: Error: bad element type for instruction -- `vldrd.32 q0,\[r2,q3,uxtw#3\]'
+[^:]*:148: Error: bad element type for instruction -- `vldrd.f16 q0,\[r2,q3,uxtw#3\]'
+[^:]*:148: Error: bad element type for instruction -- `vldrd.f32 q0,\[r2,q3,uxtw#3\]'
+[^:]*:148: Error: bad element type for instruction -- `vldrd.p16 q0,\[r2,q3,uxtw#3\]'
+[^:]*:148: Error: bad element type for instruction -- `vldrd.p32 q0,\[r2,q3,uxtw#3\]'
+[^:]*:148: Error: bad element type for instruction -- `vldrd.s64 q0,\[r2,q3,uxtw#3\]'
diff --git a/gas/testsuite/gas/arm/mve-vldr-vstr-bad.l b/gas/testsuite/gas/arm/mve-vldr-vstr-bad.l
index 2df3a37ac02..84f5b6c05bd 100644
--- a/gas/testsuite/gas/arm/mve-vldr-vstr-bad.l
+++ b/gas/testsuite/gas/arm/mve-vldr-vstr-bad.l
@@ -1,811 +1,811 @@
[^:]*: Assembler messages:
-[^:]*:12: Error: syntax error -- `vldrb.s8 q0,r0'
-[^:]*:12: Error: syntax error -- `vldrb.u8 q0,r0'
-[^:]*:12: Error: syntax error -- `vstrb.8 q0,r0'
-[^:]*:12: Error: syntax error -- `vldrb.s8 q0,r1'
-[^:]*:12: Error: syntax error -- `vldrb.u8 q0,r1'
-[^:]*:12: Error: syntax error -- `vstrb.8 q0,r1'
-[^:]*:12: Error: syntax error -- `vldrb.s8 q0,r2'
-[^:]*:12: Error: syntax error -- `vldrb.u8 q0,r2'
-[^:]*:12: Error: syntax error -- `vstrb.8 q0,r2'
-[^:]*:12: Error: syntax error -- `vldrb.s8 q0,r4'
-[^:]*:12: Error: syntax error -- `vldrb.u8 q0,r4'
-[^:]*:12: Error: syntax error -- `vstrb.8 q0,r4'
-[^:]*:12: Error: syntax error -- `vldrb.s8 q0,r7'
-[^:]*:12: Error: syntax error -- `vldrb.u8 q0,r7'
-[^:]*:12: Error: syntax error -- `vstrb.8 q0,r7'
-[^:]*:12: Error: syntax error -- `vldrb.s8 q0,r8'
-[^:]*:12: Error: syntax error -- `vldrb.u8 q0,r8'
-[^:]*:12: Error: syntax error -- `vstrb.8 q0,r8'
-[^:]*:12: Error: syntax error -- `vldrb.s8 q0,r10'
-[^:]*:12: Error: syntax error -- `vldrb.u8 q0,r10'
-[^:]*:12: Error: syntax error -- `vstrb.8 q0,r10'
-[^:]*:12: Error: syntax error -- `vldrb.s8 q0,r12'
-[^:]*:12: Error: syntax error -- `vldrb.u8 q0,r12'
-[^:]*:12: Error: syntax error -- `vstrb.8 q0,r12'
-[^:]*:12: Error: syntax error -- `vldrb.s8 q0,r14'
-[^:]*:12: Error: syntax error -- `vldrb.u8 q0,r14'
-[^:]*:12: Error: syntax error -- `vstrb.8 q0,r14'
-[^:]*:12: Error: syntax error -- `vldrb.s8 q1,r0'
-[^:]*:12: Error: syntax error -- `vldrb.u8 q1,r0'
-[^:]*:12: Error: syntax error -- `vstrb.8 q1,r0'
-[^:]*:12: Error: syntax error -- `vldrb.s8 q1,r1'
-[^:]*:12: Error: syntax error -- `vldrb.u8 q1,r1'
-[^:]*:12: Error: syntax error -- `vstrb.8 q1,r1'
-[^:]*:12: Error: syntax error -- `vldrb.s8 q1,r2'
-[^:]*:12: Error: syntax error -- `vldrb.u8 q1,r2'
-[^:]*:12: Error: syntax error -- `vstrb.8 q1,r2'
-[^:]*:12: Error: syntax error -- `vldrb.s8 q1,r4'
-[^:]*:12: Error: syntax error -- `vldrb.u8 q1,r4'
-[^:]*:12: Error: syntax error -- `vstrb.8 q1,r4'
-[^:]*:12: Error: syntax error -- `vldrb.s8 q1,r7'
-[^:]*:12: Error: syntax error -- `vldrb.u8 q1,r7'
-[^:]*:12: Error: syntax error -- `vstrb.8 q1,r7'
-[^:]*:12: Error: syntax error -- `vldrb.s8 q1,r8'
-[^:]*:12: Error: syntax error -- `vldrb.u8 q1,r8'
-[^:]*:12: Error: syntax error -- `vstrb.8 q1,r8'
-[^:]*:12: Error: syntax error -- `vldrb.s8 q1,r10'
-[^:]*:12: Error: syntax error -- `vldrb.u8 q1,r10'
-[^:]*:12: Error: syntax error -- `vstrb.8 q1,r10'
-[^:]*:12: Error: syntax error -- `vldrb.s8 q1,r12'
-[^:]*:12: Error: syntax error -- `vldrb.u8 q1,r12'
-[^:]*:12: Error: syntax error -- `vstrb.8 q1,r12'
-[^:]*:12: Error: syntax error -- `vldrb.s8 q1,r14'
-[^:]*:12: Error: syntax error -- `vldrb.u8 q1,r14'
-[^:]*:12: Error: syntax error -- `vstrb.8 q1,r14'
-[^:]*:12: Error: syntax error -- `vldrb.s8 q2,r0'
-[^:]*:12: Error: syntax error -- `vldrb.u8 q2,r0'
-[^:]*:12: Error: syntax error -- `vstrb.8 q2,r0'
-[^:]*:12: Error: syntax error -- `vldrb.s8 q2,r1'
-[^:]*:12: Error: syntax error -- `vldrb.u8 q2,r1'
-[^:]*:12: Error: syntax error -- `vstrb.8 q2,r1'
-[^:]*:12: Error: syntax error -- `vldrb.s8 q2,r2'
-[^:]*:12: Error: syntax error -- `vldrb.u8 q2,r2'
-[^:]*:12: Error: syntax error -- `vstrb.8 q2,r2'
-[^:]*:12: Error: syntax error -- `vldrb.s8 q2,r4'
-[^:]*:12: Error: syntax error -- `vldrb.u8 q2,r4'
-[^:]*:12: Error: syntax error -- `vstrb.8 q2,r4'
-[^:]*:12: Error: syntax error -- `vldrb.s8 q2,r7'
-[^:]*:12: Error: syntax error -- `vldrb.u8 q2,r7'
-[^:]*:12: Error: syntax error -- `vstrb.8 q2,r7'
-[^:]*:12: Error: syntax error -- `vldrb.s8 q2,r8'
-[^:]*:12: Error: syntax error -- `vldrb.u8 q2,r8'
-[^:]*:12: Error: syntax error -- `vstrb.8 q2,r8'
-[^:]*:12: Error: syntax error -- `vldrb.s8 q2,r10'
-[^:]*:12: Error: syntax error -- `vldrb.u8 q2,r10'
-[^:]*:12: Error: syntax error -- `vstrb.8 q2,r10'
-[^:]*:12: Error: syntax error -- `vldrb.s8 q2,r12'
-[^:]*:12: Error: syntax error -- `vldrb.u8 q2,r12'
-[^:]*:12: Error: syntax error -- `vstrb.8 q2,r12'
-[^:]*:12: Error: syntax error -- `vldrb.s8 q2,r14'
-[^:]*:12: Error: syntax error -- `vldrb.u8 q2,r14'
-[^:]*:12: Error: syntax error -- `vstrb.8 q2,r14'
-[^:]*:12: Error: syntax error -- `vldrb.s8 q4,r0'
-[^:]*:12: Error: syntax error -- `vldrb.u8 q4,r0'
-[^:]*:12: Error: syntax error -- `vstrb.8 q4,r0'
-[^:]*:12: Error: syntax error -- `vldrb.s8 q4,r1'
-[^:]*:12: Error: syntax error -- `vldrb.u8 q4,r1'
-[^:]*:12: Error: syntax error -- `vstrb.8 q4,r1'
-[^:]*:12: Error: syntax error -- `vldrb.s8 q4,r2'
-[^:]*:12: Error: syntax error -- `vldrb.u8 q4,r2'
-[^:]*:12: Error: syntax error -- `vstrb.8 q4,r2'
-[^:]*:12: Error: syntax error -- `vldrb.s8 q4,r4'
-[^:]*:12: Error: syntax error -- `vldrb.u8 q4,r4'
-[^:]*:12: Error: syntax error -- `vstrb.8 q4,r4'
-[^:]*:12: Error: syntax error -- `vldrb.s8 q4,r7'
-[^:]*:12: Error: syntax error -- `vldrb.u8 q4,r7'
-[^:]*:12: Error: syntax error -- `vstrb.8 q4,r7'
-[^:]*:12: Error: syntax error -- `vldrb.s8 q4,r8'
-[^:]*:12: Error: syntax error -- `vldrb.u8 q4,r8'
-[^:]*:12: Error: syntax error -- `vstrb.8 q4,r8'
-[^:]*:12: Error: syntax error -- `vldrb.s8 q4,r10'
-[^:]*:12: Error: syntax error -- `vldrb.u8 q4,r10'
-[^:]*:12: Error: syntax error -- `vstrb.8 q4,r10'
-[^:]*:12: Error: syntax error -- `vldrb.s8 q4,r12'
-[^:]*:12: Error: syntax error -- `vldrb.u8 q4,r12'
-[^:]*:12: Error: syntax error -- `vstrb.8 q4,r12'
-[^:]*:12: Error: syntax error -- `vldrb.s8 q4,r14'
-[^:]*:12: Error: syntax error -- `vldrb.u8 q4,r14'
-[^:]*:12: Error: syntax error -- `vstrb.8 q4,r14'
-[^:]*:12: Error: syntax error -- `vldrb.s8 q7,r0'
-[^:]*:12: Error: syntax error -- `vldrb.u8 q7,r0'
-[^:]*:12: Error: syntax error -- `vstrb.8 q7,r0'
-[^:]*:12: Error: syntax error -- `vldrb.s8 q7,r1'
-[^:]*:12: Error: syntax error -- `vldrb.u8 q7,r1'
-[^:]*:12: Error: syntax error -- `vstrb.8 q7,r1'
-[^:]*:12: Error: syntax error -- `vldrb.s8 q7,r2'
-[^:]*:12: Error: syntax error -- `vldrb.u8 q7,r2'
-[^:]*:12: Error: syntax error -- `vstrb.8 q7,r2'
-[^:]*:12: Error: syntax error -- `vldrb.s8 q7,r4'
-[^:]*:12: Error: syntax error -- `vldrb.u8 q7,r4'
-[^:]*:12: Error: syntax error -- `vstrb.8 q7,r4'
-[^:]*:12: Error: syntax error -- `vldrb.s8 q7,r7'
-[^:]*:12: Error: syntax error -- `vldrb.u8 q7,r7'
-[^:]*:12: Error: syntax error -- `vstrb.8 q7,r7'
-[^:]*:12: Error: syntax error -- `vldrb.s8 q7,r8'
-[^:]*:12: Error: syntax error -- `vldrb.u8 q7,r8'
-[^:]*:12: Error: syntax error -- `vstrb.8 q7,r8'
-[^:]*:12: Error: syntax error -- `vldrb.s8 q7,r10'
-[^:]*:12: Error: syntax error -- `vldrb.u8 q7,r10'
-[^:]*:12: Error: syntax error -- `vstrb.8 q7,r10'
-[^:]*:12: Error: syntax error -- `vldrb.s8 q7,r12'
-[^:]*:12: Error: syntax error -- `vldrb.u8 q7,r12'
-[^:]*:12: Error: syntax error -- `vstrb.8 q7,r12'
-[^:]*:12: Error: syntax error -- `vldrb.s8 q7,r14'
-[^:]*:12: Error: syntax error -- `vldrb.u8 q7,r14'
-[^:]*:12: Error: syntax error -- `vstrb.8 q7,r14'
-[^:]*:12: Error: syntax error -- `vldrb.s16 q0,r0'
-[^:]*:12: Error: syntax error -- `vldrb.u16 q0,r0'
-[^:]*:12: Error: syntax error -- `vstrb.16 q0,r0'
-[^:]*:12: Error: syntax error -- `vldrb.s16 q0,r1'
-[^:]*:12: Error: syntax error -- `vldrb.u16 q0,r1'
-[^:]*:12: Error: syntax error -- `vstrb.16 q0,r1'
-[^:]*:12: Error: syntax error -- `vldrb.s16 q0,r2'
-[^:]*:12: Error: syntax error -- `vldrb.u16 q0,r2'
-[^:]*:12: Error: syntax error -- `vstrb.16 q0,r2'
-[^:]*:12: Error: syntax error -- `vldrb.s16 q0,r4'
-[^:]*:12: Error: syntax error -- `vldrb.u16 q0,r4'
-[^:]*:12: Error: syntax error -- `vstrb.16 q0,r4'
-[^:]*:12: Error: syntax error -- `vldrb.s16 q0,r7'
-[^:]*:12: Error: syntax error -- `vldrb.u16 q0,r7'
-[^:]*:12: Error: syntax error -- `vstrb.16 q0,r7'
-[^:]*:12: Error: syntax error -- `vldrb.s16 q0,r8'
-[^:]*:12: Error: syntax error -- `vldrb.u16 q0,r8'
-[^:]*:12: Error: syntax error -- `vstrb.16 q0,r8'
-[^:]*:12: Error: syntax error -- `vldrb.s16 q0,r10'
-[^:]*:12: Error: syntax error -- `vldrb.u16 q0,r10'
-[^:]*:12: Error: syntax error -- `vstrb.16 q0,r10'
-[^:]*:12: Error: syntax error -- `vldrb.s16 q0,r12'
-[^:]*:12: Error: syntax error -- `vldrb.u16 q0,r12'
-[^:]*:12: Error: syntax error -- `vstrb.16 q0,r12'
-[^:]*:12: Error: syntax error -- `vldrb.s16 q0,r14'
-[^:]*:12: Error: syntax error -- `vldrb.u16 q0,r14'
-[^:]*:12: Error: syntax error -- `vstrb.16 q0,r14'
-[^:]*:12: Error: syntax error -- `vldrb.s16 q1,r0'
-[^:]*:12: Error: syntax error -- `vldrb.u16 q1,r0'
-[^:]*:12: Error: syntax error -- `vstrb.16 q1,r0'
-[^:]*:12: Error: syntax error -- `vldrb.s16 q1,r1'
-[^:]*:12: Error: syntax error -- `vldrb.u16 q1,r1'
-[^:]*:12: Error: syntax error -- `vstrb.16 q1,r1'
-[^:]*:12: Error: syntax error -- `vldrb.s16 q1,r2'
-[^:]*:12: Error: syntax error -- `vldrb.u16 q1,r2'
-[^:]*:12: Error: syntax error -- `vstrb.16 q1,r2'
-[^:]*:12: Error: syntax error -- `vldrb.s16 q1,r4'
-[^:]*:12: Error: syntax error -- `vldrb.u16 q1,r4'
-[^:]*:12: Error: syntax error -- `vstrb.16 q1,r4'
-[^:]*:12: Error: syntax error -- `vldrb.s16 q1,r7'
-[^:]*:12: Error: syntax error -- `vldrb.u16 q1,r7'
-[^:]*:12: Error: syntax error -- `vstrb.16 q1,r7'
-[^:]*:12: Error: syntax error -- `vldrb.s16 q1,r8'
-[^:]*:12: Error: syntax error -- `vldrb.u16 q1,r8'
-[^:]*:12: Error: syntax error -- `vstrb.16 q1,r8'
-[^:]*:12: Error: syntax error -- `vldrb.s16 q1,r10'
-[^:]*:12: Error: syntax error -- `vldrb.u16 q1,r10'
-[^:]*:12: Error: syntax error -- `vstrb.16 q1,r10'
-[^:]*:12: Error: syntax error -- `vldrb.s16 q1,r12'
-[^:]*:12: Error: syntax error -- `vldrb.u16 q1,r12'
-[^:]*:12: Error: syntax error -- `vstrb.16 q1,r12'
-[^:]*:12: Error: syntax error -- `vldrb.s16 q1,r14'
-[^:]*:12: Error: syntax error -- `vldrb.u16 q1,r14'
-[^:]*:12: Error: syntax error -- `vstrb.16 q1,r14'
-[^:]*:12: Error: syntax error -- `vldrb.s16 q2,r0'
-[^:]*:12: Error: syntax error -- `vldrb.u16 q2,r0'
-[^:]*:12: Error: syntax error -- `vstrb.16 q2,r0'
-[^:]*:12: Error: syntax error -- `vldrb.s16 q2,r1'
-[^:]*:12: Error: syntax error -- `vldrb.u16 q2,r1'
-[^:]*:12: Error: syntax error -- `vstrb.16 q2,r1'
-[^:]*:12: Error: syntax error -- `vldrb.s16 q2,r2'
-[^:]*:12: Error: syntax error -- `vldrb.u16 q2,r2'
-[^:]*:12: Error: syntax error -- `vstrb.16 q2,r2'
-[^:]*:12: Error: syntax error -- `vldrb.s16 q2,r4'
-[^:]*:12: Error: syntax error -- `vldrb.u16 q2,r4'
-[^:]*:12: Error: syntax error -- `vstrb.16 q2,r4'
-[^:]*:12: Error: syntax error -- `vldrb.s16 q2,r7'
-[^:]*:12: Error: syntax error -- `vldrb.u16 q2,r7'
-[^:]*:12: Error: syntax error -- `vstrb.16 q2,r7'
-[^:]*:12: Error: syntax error -- `vldrb.s16 q2,r8'
-[^:]*:12: Error: syntax error -- `vldrb.u16 q2,r8'
-[^:]*:12: Error: syntax error -- `vstrb.16 q2,r8'
-[^:]*:12: Error: syntax error -- `vldrb.s16 q2,r10'
-[^:]*:12: Error: syntax error -- `vldrb.u16 q2,r10'
-[^:]*:12: Error: syntax error -- `vstrb.16 q2,r10'
-[^:]*:12: Error: syntax error -- `vldrb.s16 q2,r12'
-[^:]*:12: Error: syntax error -- `vldrb.u16 q2,r12'
-[^:]*:12: Error: syntax error -- `vstrb.16 q2,r12'
-[^:]*:12: Error: syntax error -- `vldrb.s16 q2,r14'
-[^:]*:12: Error: syntax error -- `vldrb.u16 q2,r14'
-[^:]*:12: Error: syntax error -- `vstrb.16 q2,r14'
-[^:]*:12: Error: syntax error -- `vldrb.s16 q4,r0'
-[^:]*:12: Error: syntax error -- `vldrb.u16 q4,r0'
-[^:]*:12: Error: syntax error -- `vstrb.16 q4,r0'
-[^:]*:12: Error: syntax error -- `vldrb.s16 q4,r1'
-[^:]*:12: Error: syntax error -- `vldrb.u16 q4,r1'
-[^:]*:12: Error: syntax error -- `vstrb.16 q4,r1'
-[^:]*:12: Error: syntax error -- `vldrb.s16 q4,r2'
-[^:]*:12: Error: syntax error -- `vldrb.u16 q4,r2'
-[^:]*:12: Error: syntax error -- `vstrb.16 q4,r2'
-[^:]*:12: Error: syntax error -- `vldrb.s16 q4,r4'
-[^:]*:12: Error: syntax error -- `vldrb.u16 q4,r4'
-[^:]*:12: Error: syntax error -- `vstrb.16 q4,r4'
-[^:]*:12: Error: syntax error -- `vldrb.s16 q4,r7'
-[^:]*:12: Error: syntax error -- `vldrb.u16 q4,r7'
-[^:]*:12: Error: syntax error -- `vstrb.16 q4,r7'
-[^:]*:12: Error: syntax error -- `vldrb.s16 q4,r8'
-[^:]*:12: Error: syntax error -- `vldrb.u16 q4,r8'
-[^:]*:12: Error: syntax error -- `vstrb.16 q4,r8'
-[^:]*:12: Error: syntax error -- `vldrb.s16 q4,r10'
-[^:]*:12: Error: syntax error -- `vldrb.u16 q4,r10'
-[^:]*:12: Error: syntax error -- `vstrb.16 q4,r10'
-[^:]*:12: Error: syntax error -- `vldrb.s16 q4,r12'
-[^:]*:12: Error: syntax error -- `vldrb.u16 q4,r12'
-[^:]*:12: Error: syntax error -- `vstrb.16 q4,r12'
-[^:]*:12: Error: syntax error -- `vldrb.s16 q4,r14'
-[^:]*:12: Error: syntax error -- `vldrb.u16 q4,r14'
-[^:]*:12: Error: syntax error -- `vstrb.16 q4,r14'
-[^:]*:12: Error: syntax error -- `vldrb.s16 q7,r0'
-[^:]*:12: Error: syntax error -- `vldrb.u16 q7,r0'
-[^:]*:12: Error: syntax error -- `vstrb.16 q7,r0'
-[^:]*:12: Error: syntax error -- `vldrb.s16 q7,r1'
-[^:]*:12: Error: syntax error -- `vldrb.u16 q7,r1'
-[^:]*:12: Error: syntax error -- `vstrb.16 q7,r1'
-[^:]*:12: Error: syntax error -- `vldrb.s16 q7,r2'
-[^:]*:12: Error: syntax error -- `vldrb.u16 q7,r2'
-[^:]*:12: Error: syntax error -- `vstrb.16 q7,r2'
-[^:]*:12: Error: syntax error -- `vldrb.s16 q7,r4'
-[^:]*:12: Error: syntax error -- `vldrb.u16 q7,r4'
-[^:]*:12: Error: syntax error -- `vstrb.16 q7,r4'
-[^:]*:12: Error: syntax error -- `vldrb.s16 q7,r7'
-[^:]*:12: Error: syntax error -- `vldrb.u16 q7,r7'
-[^:]*:12: Error: syntax error -- `vstrb.16 q7,r7'
-[^:]*:12: Error: syntax error -- `vldrb.s16 q7,r8'
-[^:]*:12: Error: syntax error -- `vldrb.u16 q7,r8'
-[^:]*:12: Error: syntax error -- `vstrb.16 q7,r8'
-[^:]*:12: Error: syntax error -- `vldrb.s16 q7,r10'
-[^:]*:12: Error: syntax error -- `vldrb.u16 q7,r10'
-[^:]*:12: Error: syntax error -- `vstrb.16 q7,r10'
-[^:]*:12: Error: syntax error -- `vldrb.s16 q7,r12'
-[^:]*:12: Error: syntax error -- `vldrb.u16 q7,r12'
-[^:]*:12: Error: syntax error -- `vstrb.16 q7,r12'
-[^:]*:12: Error: syntax error -- `vldrb.s16 q7,r14'
-[^:]*:12: Error: syntax error -- `vldrb.u16 q7,r14'
-[^:]*:12: Error: syntax error -- `vstrb.16 q7,r14'
-[^:]*:12: Error: syntax error -- `vldrb.s32 q0,r0'
-[^:]*:12: Error: syntax error -- `vldrb.u32 q0,r0'
-[^:]*:12: Error: syntax error -- `vstrb.32 q0,r0'
-[^:]*:12: Error: syntax error -- `vldrb.s32 q0,r1'
-[^:]*:12: Error: syntax error -- `vldrb.u32 q0,r1'
-[^:]*:12: Error: syntax error -- `vstrb.32 q0,r1'
-[^:]*:12: Error: syntax error -- `vldrb.s32 q0,r2'
-[^:]*:12: Error: syntax error -- `vldrb.u32 q0,r2'
-[^:]*:12: Error: syntax error -- `vstrb.32 q0,r2'
-[^:]*:12: Error: syntax error -- `vldrb.s32 q0,r4'
-[^:]*:12: Error: syntax error -- `vldrb.u32 q0,r4'
-[^:]*:12: Error: syntax error -- `vstrb.32 q0,r4'
-[^:]*:12: Error: syntax error -- `vldrb.s32 q0,r7'
-[^:]*:12: Error: syntax error -- `vldrb.u32 q0,r7'
-[^:]*:12: Error: syntax error -- `vstrb.32 q0,r7'
-[^:]*:12: Error: syntax error -- `vldrb.s32 q0,r8'
-[^:]*:12: Error: syntax error -- `vldrb.u32 q0,r8'
-[^:]*:12: Error: syntax error -- `vstrb.32 q0,r8'
-[^:]*:12: Error: syntax error -- `vldrb.s32 q0,r10'
-[^:]*:12: Error: syntax error -- `vldrb.u32 q0,r10'
-[^:]*:12: Error: syntax error -- `vstrb.32 q0,r10'
-[^:]*:12: Error: syntax error -- `vldrb.s32 q0,r12'
-[^:]*:12: Error: syntax error -- `vldrb.u32 q0,r12'
-[^:]*:12: Error: syntax error -- `vstrb.32 q0,r12'
-[^:]*:12: Error: syntax error -- `vldrb.s32 q0,r14'
-[^:]*:12: Error: syntax error -- `vldrb.u32 q0,r14'
-[^:]*:12: Error: syntax error -- `vstrb.32 q0,r14'
-[^:]*:12: Error: syntax error -- `vldrb.s32 q1,r0'
-[^:]*:12: Error: syntax error -- `vldrb.u32 q1,r0'
-[^:]*:12: Error: syntax error -- `vstrb.32 q1,r0'
-[^:]*:12: Error: syntax error -- `vldrb.s32 q1,r1'
-[^:]*:12: Error: syntax error -- `vldrb.u32 q1,r1'
-[^:]*:12: Error: syntax error -- `vstrb.32 q1,r1'
-[^:]*:12: Error: syntax error -- `vldrb.s32 q1,r2'
-[^:]*:12: Error: syntax error -- `vldrb.u32 q1,r2'
-[^:]*:12: Error: syntax error -- `vstrb.32 q1,r2'
-[^:]*:12: Error: syntax error -- `vldrb.s32 q1,r4'
-[^:]*:12: Error: syntax error -- `vldrb.u32 q1,r4'
-[^:]*:12: Error: syntax error -- `vstrb.32 q1,r4'
-[^:]*:12: Error: syntax error -- `vldrb.s32 q1,r7'
-[^:]*:12: Error: syntax error -- `vldrb.u32 q1,r7'
-[^:]*:12: Error: syntax error -- `vstrb.32 q1,r7'
-[^:]*:12: Error: syntax error -- `vldrb.s32 q1,r8'
-[^:]*:12: Error: syntax error -- `vldrb.u32 q1,r8'
-[^:]*:12: Error: syntax error -- `vstrb.32 q1,r8'
-[^:]*:12: Error: syntax error -- `vldrb.s32 q1,r10'
-[^:]*:12: Error: syntax error -- `vldrb.u32 q1,r10'
-[^:]*:12: Error: syntax error -- `vstrb.32 q1,r10'
-[^:]*:12: Error: syntax error -- `vldrb.s32 q1,r12'
-[^:]*:12: Error: syntax error -- `vldrb.u32 q1,r12'
-[^:]*:12: Error: syntax error -- `vstrb.32 q1,r12'
-[^:]*:12: Error: syntax error -- `vldrb.s32 q1,r14'
-[^:]*:12: Error: syntax error -- `vldrb.u32 q1,r14'
-[^:]*:12: Error: syntax error -- `vstrb.32 q1,r14'
-[^:]*:12: Error: syntax error -- `vldrb.s32 q2,r0'
-[^:]*:12: Error: syntax error -- `vldrb.u32 q2,r0'
-[^:]*:12: Error: syntax error -- `vstrb.32 q2,r0'
-[^:]*:12: Error: syntax error -- `vldrb.s32 q2,r1'
-[^:]*:12: Error: syntax error -- `vldrb.u32 q2,r1'
-[^:]*:12: Error: syntax error -- `vstrb.32 q2,r1'
-[^:]*:12: Error: syntax error -- `vldrb.s32 q2,r2'
-[^:]*:12: Error: syntax error -- `vldrb.u32 q2,r2'
-[^:]*:12: Error: syntax error -- `vstrb.32 q2,r2'
-[^:]*:12: Error: syntax error -- `vldrb.s32 q2,r4'
-[^:]*:12: Error: syntax error -- `vldrb.u32 q2,r4'
-[^:]*:12: Error: syntax error -- `vstrb.32 q2,r4'
-[^:]*:12: Error: syntax error -- `vldrb.s32 q2,r7'
-[^:]*:12: Error: syntax error -- `vldrb.u32 q2,r7'
-[^:]*:12: Error: syntax error -- `vstrb.32 q2,r7'
-[^:]*:12: Error: syntax error -- `vldrb.s32 q2,r8'
-[^:]*:12: Error: syntax error -- `vldrb.u32 q2,r8'
-[^:]*:12: Error: syntax error -- `vstrb.32 q2,r8'
-[^:]*:12: Error: syntax error -- `vldrb.s32 q2,r10'
-[^:]*:12: Error: syntax error -- `vldrb.u32 q2,r10'
-[^:]*:12: Error: syntax error -- `vstrb.32 q2,r10'
-[^:]*:12: Error: syntax error -- `vldrb.s32 q2,r12'
-[^:]*:12: Error: syntax error -- `vldrb.u32 q2,r12'
-[^:]*:12: Error: syntax error -- `vstrb.32 q2,r12'
-[^:]*:12: Error: syntax error -- `vldrb.s32 q2,r14'
-[^:]*:12: Error: syntax error -- `vldrb.u32 q2,r14'
-[^:]*:12: Error: syntax error -- `vstrb.32 q2,r14'
-[^:]*:12: Error: syntax error -- `vldrb.s32 q4,r0'
-[^:]*:12: Error: syntax error -- `vldrb.u32 q4,r0'
-[^:]*:12: Error: syntax error -- `vstrb.32 q4,r0'
-[^:]*:12: Error: syntax error -- `vldrb.s32 q4,r1'
-[^:]*:12: Error: syntax error -- `vldrb.u32 q4,r1'
-[^:]*:12: Error: syntax error -- `vstrb.32 q4,r1'
-[^:]*:12: Error: syntax error -- `vldrb.s32 q4,r2'
-[^:]*:12: Error: syntax error -- `vldrb.u32 q4,r2'
-[^:]*:12: Error: syntax error -- `vstrb.32 q4,r2'
-[^:]*:12: Error: syntax error -- `vldrb.s32 q4,r4'
-[^:]*:12: Error: syntax error -- `vldrb.u32 q4,r4'
-[^:]*:12: Error: syntax error -- `vstrb.32 q4,r4'
-[^:]*:12: Error: syntax error -- `vldrb.s32 q4,r7'
-[^:]*:12: Error: syntax error -- `vldrb.u32 q4,r7'
-[^:]*:12: Error: syntax error -- `vstrb.32 q4,r7'
-[^:]*:12: Error: syntax error -- `vldrb.s32 q4,r8'
-[^:]*:12: Error: syntax error -- `vldrb.u32 q4,r8'
-[^:]*:12: Error: syntax error -- `vstrb.32 q4,r8'
-[^:]*:12: Error: syntax error -- `vldrb.s32 q4,r10'
-[^:]*:12: Error: syntax error -- `vldrb.u32 q4,r10'
-[^:]*:12: Error: syntax error -- `vstrb.32 q4,r10'
-[^:]*:12: Error: syntax error -- `vldrb.s32 q4,r12'
-[^:]*:12: Error: syntax error -- `vldrb.u32 q4,r12'
-[^:]*:12: Error: syntax error -- `vstrb.32 q4,r12'
-[^:]*:12: Error: syntax error -- `vldrb.s32 q4,r14'
-[^:]*:12: Error: syntax error -- `vldrb.u32 q4,r14'
-[^:]*:12: Error: syntax error -- `vstrb.32 q4,r14'
-[^:]*:12: Error: syntax error -- `vldrb.s32 q7,r0'
-[^:]*:12: Error: syntax error -- `vldrb.u32 q7,r0'
-[^:]*:12: Error: syntax error -- `vstrb.32 q7,r0'
-[^:]*:12: Error: syntax error -- `vldrb.s32 q7,r1'
-[^:]*:12: Error: syntax error -- `vldrb.u32 q7,r1'
-[^:]*:12: Error: syntax error -- `vstrb.32 q7,r1'
-[^:]*:12: Error: syntax error -- `vldrb.s32 q7,r2'
-[^:]*:12: Error: syntax error -- `vldrb.u32 q7,r2'
-[^:]*:12: Error: syntax error -- `vstrb.32 q7,r2'
-[^:]*:12: Error: syntax error -- `vldrb.s32 q7,r4'
-[^:]*:12: Error: syntax error -- `vldrb.u32 q7,r4'
-[^:]*:12: Error: syntax error -- `vstrb.32 q7,r4'
-[^:]*:12: Error: syntax error -- `vldrb.s32 q7,r7'
-[^:]*:12: Error: syntax error -- `vldrb.u32 q7,r7'
-[^:]*:12: Error: syntax error -- `vstrb.32 q7,r7'
-[^:]*:12: Error: syntax error -- `vldrb.s32 q7,r8'
-[^:]*:12: Error: syntax error -- `vldrb.u32 q7,r8'
-[^:]*:12: Error: syntax error -- `vstrb.32 q7,r8'
-[^:]*:12: Error: syntax error -- `vldrb.s32 q7,r10'
-[^:]*:12: Error: syntax error -- `vldrb.u32 q7,r10'
-[^:]*:12: Error: syntax error -- `vstrb.32 q7,r10'
-[^:]*:12: Error: syntax error -- `vldrb.s32 q7,r12'
-[^:]*:12: Error: syntax error -- `vldrb.u32 q7,r12'
-[^:]*:12: Error: syntax error -- `vstrb.32 q7,r12'
-[^:]*:12: Error: syntax error -- `vldrb.s32 q7,r14'
-[^:]*:12: Error: syntax error -- `vldrb.u32 q7,r14'
-[^:]*:12: Error: syntax error -- `vstrb.32 q7,r14'
-[^:]*:22: Error: syntax error -- `vldrh.s16 q0,r0'
-[^:]*:22: Error: syntax error -- `vldrh.u16 q0,r0'
-[^:]*:22: Error: syntax error -- `vstrh.16 q0,r0'
-[^:]*:22: Error: syntax error -- `vldrh.s16 q0,r1'
-[^:]*:22: Error: syntax error -- `vldrh.u16 q0,r1'
-[^:]*:22: Error: syntax error -- `vstrh.16 q0,r1'
-[^:]*:22: Error: syntax error -- `vldrh.s16 q0,r2'
-[^:]*:22: Error: syntax error -- `vldrh.u16 q0,r2'
-[^:]*:22: Error: syntax error -- `vstrh.16 q0,r2'
-[^:]*:22: Error: syntax error -- `vldrh.s16 q0,r4'
-[^:]*:22: Error: syntax error -- `vldrh.u16 q0,r4'
-[^:]*:22: Error: syntax error -- `vstrh.16 q0,r4'
-[^:]*:22: Error: syntax error -- `vldrh.s16 q0,r7'
-[^:]*:22: Error: syntax error -- `vldrh.u16 q0,r7'
-[^:]*:22: Error: syntax error -- `vstrh.16 q0,r7'
-[^:]*:22: Error: syntax error -- `vldrh.s16 q0,r8'
-[^:]*:22: Error: syntax error -- `vldrh.u16 q0,r8'
-[^:]*:22: Error: syntax error -- `vstrh.16 q0,r8'
-[^:]*:22: Error: syntax error -- `vldrh.s16 q0,r10'
-[^:]*:22: Error: syntax error -- `vldrh.u16 q0,r10'
-[^:]*:22: Error: syntax error -- `vstrh.16 q0,r10'
-[^:]*:22: Error: syntax error -- `vldrh.s16 q0,r12'
-[^:]*:22: Error: syntax error -- `vldrh.u16 q0,r12'
-[^:]*:22: Error: syntax error -- `vstrh.16 q0,r12'
-[^:]*:22: Error: syntax error -- `vldrh.s16 q0,r14'
-[^:]*:22: Error: syntax error -- `vldrh.u16 q0,r14'
-[^:]*:22: Error: syntax error -- `vstrh.16 q0,r14'
-[^:]*:22: Error: syntax error -- `vldrh.s16 q1,r0'
-[^:]*:22: Error: syntax error -- `vldrh.u16 q1,r0'
-[^:]*:22: Error: syntax error -- `vstrh.16 q1,r0'
-[^:]*:22: Error: syntax error -- `vldrh.s16 q1,r1'
-[^:]*:22: Error: syntax error -- `vldrh.u16 q1,r1'
-[^:]*:22: Error: syntax error -- `vstrh.16 q1,r1'
-[^:]*:22: Error: syntax error -- `vldrh.s16 q1,r2'
-[^:]*:22: Error: syntax error -- `vldrh.u16 q1,r2'
-[^:]*:22: Error: syntax error -- `vstrh.16 q1,r2'
-[^:]*:22: Error: syntax error -- `vldrh.s16 q1,r4'
-[^:]*:22: Error: syntax error -- `vldrh.u16 q1,r4'
-[^:]*:22: Error: syntax error -- `vstrh.16 q1,r4'
-[^:]*:22: Error: syntax error -- `vldrh.s16 q1,r7'
-[^:]*:22: Error: syntax error -- `vldrh.u16 q1,r7'
-[^:]*:22: Error: syntax error -- `vstrh.16 q1,r7'
-[^:]*:22: Error: syntax error -- `vldrh.s16 q1,r8'
-[^:]*:22: Error: syntax error -- `vldrh.u16 q1,r8'
-[^:]*:22: Error: syntax error -- `vstrh.16 q1,r8'
-[^:]*:22: Error: syntax error -- `vldrh.s16 q1,r10'
-[^:]*:22: Error: syntax error -- `vldrh.u16 q1,r10'
-[^:]*:22: Error: syntax error -- `vstrh.16 q1,r10'
-[^:]*:22: Error: syntax error -- `vldrh.s16 q1,r12'
-[^:]*:22: Error: syntax error -- `vldrh.u16 q1,r12'
-[^:]*:22: Error: syntax error -- `vstrh.16 q1,r12'
-[^:]*:22: Error: syntax error -- `vldrh.s16 q1,r14'
-[^:]*:22: Error: syntax error -- `vldrh.u16 q1,r14'
-[^:]*:22: Error: syntax error -- `vstrh.16 q1,r14'
-[^:]*:22: Error: syntax error -- `vldrh.s16 q2,r0'
-[^:]*:22: Error: syntax error -- `vldrh.u16 q2,r0'
-[^:]*:22: Error: syntax error -- `vstrh.16 q2,r0'
-[^:]*:22: Error: syntax error -- `vldrh.s16 q2,r1'
-[^:]*:22: Error: syntax error -- `vldrh.u16 q2,r1'
-[^:]*:22: Error: syntax error -- `vstrh.16 q2,r1'
-[^:]*:22: Error: syntax error -- `vldrh.s16 q2,r2'
-[^:]*:22: Error: syntax error -- `vldrh.u16 q2,r2'
-[^:]*:22: Error: syntax error -- `vstrh.16 q2,r2'
-[^:]*:22: Error: syntax error -- `vldrh.s16 q2,r4'
-[^:]*:22: Error: syntax error -- `vldrh.u16 q2,r4'
-[^:]*:22: Error: syntax error -- `vstrh.16 q2,r4'
-[^:]*:22: Error: syntax error -- `vldrh.s16 q2,r7'
-[^:]*:22: Error: syntax error -- `vldrh.u16 q2,r7'
-[^:]*:22: Error: syntax error -- `vstrh.16 q2,r7'
-[^:]*:22: Error: syntax error -- `vldrh.s16 q2,r8'
-[^:]*:22: Error: syntax error -- `vldrh.u16 q2,r8'
-[^:]*:22: Error: syntax error -- `vstrh.16 q2,r8'
-[^:]*:22: Error: syntax error -- `vldrh.s16 q2,r10'
-[^:]*:22: Error: syntax error -- `vldrh.u16 q2,r10'
-[^:]*:22: Error: syntax error -- `vstrh.16 q2,r10'
-[^:]*:22: Error: syntax error -- `vldrh.s16 q2,r12'
-[^:]*:22: Error: syntax error -- `vldrh.u16 q2,r12'
-[^:]*:22: Error: syntax error -- `vstrh.16 q2,r12'
-[^:]*:22: Error: syntax error -- `vldrh.s16 q2,r14'
-[^:]*:22: Error: syntax error -- `vldrh.u16 q2,r14'
-[^:]*:22: Error: syntax error -- `vstrh.16 q2,r14'
-[^:]*:22: Error: syntax error -- `vldrh.s16 q4,r0'
-[^:]*:22: Error: syntax error -- `vldrh.u16 q4,r0'
-[^:]*:22: Error: syntax error -- `vstrh.16 q4,r0'
-[^:]*:22: Error: syntax error -- `vldrh.s16 q4,r1'
-[^:]*:22: Error: syntax error -- `vldrh.u16 q4,r1'
-[^:]*:22: Error: syntax error -- `vstrh.16 q4,r1'
-[^:]*:22: Error: syntax error -- `vldrh.s16 q4,r2'
-[^:]*:22: Error: syntax error -- `vldrh.u16 q4,r2'
-[^:]*:22: Error: syntax error -- `vstrh.16 q4,r2'
-[^:]*:22: Error: syntax error -- `vldrh.s16 q4,r4'
-[^:]*:22: Error: syntax error -- `vldrh.u16 q4,r4'
-[^:]*:22: Error: syntax error -- `vstrh.16 q4,r4'
-[^:]*:22: Error: syntax error -- `vldrh.s16 q4,r7'
-[^:]*:22: Error: syntax error -- `vldrh.u16 q4,r7'
-[^:]*:22: Error: syntax error -- `vstrh.16 q4,r7'
-[^:]*:22: Error: syntax error -- `vldrh.s16 q4,r8'
-[^:]*:22: Error: syntax error -- `vldrh.u16 q4,r8'
-[^:]*:22: Error: syntax error -- `vstrh.16 q4,r8'
-[^:]*:22: Error: syntax error -- `vldrh.s16 q4,r10'
-[^:]*:22: Error: syntax error -- `vldrh.u16 q4,r10'
-[^:]*:22: Error: syntax error -- `vstrh.16 q4,r10'
-[^:]*:22: Error: syntax error -- `vldrh.s16 q4,r12'
-[^:]*:22: Error: syntax error -- `vldrh.u16 q4,r12'
-[^:]*:22: Error: syntax error -- `vstrh.16 q4,r12'
-[^:]*:22: Error: syntax error -- `vldrh.s16 q4,r14'
-[^:]*:22: Error: syntax error -- `vldrh.u16 q4,r14'
-[^:]*:22: Error: syntax error -- `vstrh.16 q4,r14'
-[^:]*:22: Error: syntax error -- `vldrh.s16 q7,r0'
-[^:]*:22: Error: syntax error -- `vldrh.u16 q7,r0'
-[^:]*:22: Error: syntax error -- `vstrh.16 q7,r0'
-[^:]*:22: Error: syntax error -- `vldrh.s16 q7,r1'
-[^:]*:22: Error: syntax error -- `vldrh.u16 q7,r1'
-[^:]*:22: Error: syntax error -- `vstrh.16 q7,r1'
-[^:]*:22: Error: syntax error -- `vldrh.s16 q7,r2'
-[^:]*:22: Error: syntax error -- `vldrh.u16 q7,r2'
-[^:]*:22: Error: syntax error -- `vstrh.16 q7,r2'
-[^:]*:22: Error: syntax error -- `vldrh.s16 q7,r4'
-[^:]*:22: Error: syntax error -- `vldrh.u16 q7,r4'
-[^:]*:22: Error: syntax error -- `vstrh.16 q7,r4'
-[^:]*:22: Error: syntax error -- `vldrh.s16 q7,r7'
-[^:]*:22: Error: syntax error -- `vldrh.u16 q7,r7'
-[^:]*:22: Error: syntax error -- `vstrh.16 q7,r7'
-[^:]*:22: Error: syntax error -- `vldrh.s16 q7,r8'
-[^:]*:22: Error: syntax error -- `vldrh.u16 q7,r8'
-[^:]*:22: Error: syntax error -- `vstrh.16 q7,r8'
-[^:]*:22: Error: syntax error -- `vldrh.s16 q7,r10'
-[^:]*:22: Error: syntax error -- `vldrh.u16 q7,r10'
-[^:]*:22: Error: syntax error -- `vstrh.16 q7,r10'
-[^:]*:22: Error: syntax error -- `vldrh.s16 q7,r12'
-[^:]*:22: Error: syntax error -- `vldrh.u16 q7,r12'
-[^:]*:22: Error: syntax error -- `vstrh.16 q7,r12'
-[^:]*:22: Error: syntax error -- `vldrh.s16 q7,r14'
-[^:]*:22: Error: syntax error -- `vldrh.u16 q7,r14'
-[^:]*:22: Error: syntax error -- `vstrh.16 q7,r14'
-[^:]*:22: Error: syntax error -- `vldrh.s32 q0,r0'
-[^:]*:22: Error: syntax error -- `vldrh.u32 q0,r0'
-[^:]*:22: Error: syntax error -- `vstrh.32 q0,r0'
-[^:]*:22: Error: syntax error -- `vldrh.s32 q0,r1'
-[^:]*:22: Error: syntax error -- `vldrh.u32 q0,r1'
-[^:]*:22: Error: syntax error -- `vstrh.32 q0,r1'
-[^:]*:22: Error: syntax error -- `vldrh.s32 q0,r2'
-[^:]*:22: Error: syntax error -- `vldrh.u32 q0,r2'
-[^:]*:22: Error: syntax error -- `vstrh.32 q0,r2'
-[^:]*:22: Error: syntax error -- `vldrh.s32 q0,r4'
-[^:]*:22: Error: syntax error -- `vldrh.u32 q0,r4'
-[^:]*:22: Error: syntax error -- `vstrh.32 q0,r4'
-[^:]*:22: Error: syntax error -- `vldrh.s32 q0,r7'
-[^:]*:22: Error: syntax error -- `vldrh.u32 q0,r7'
-[^:]*:22: Error: syntax error -- `vstrh.32 q0,r7'
-[^:]*:22: Error: syntax error -- `vldrh.s32 q0,r8'
-[^:]*:22: Error: syntax error -- `vldrh.u32 q0,r8'
-[^:]*:22: Error: syntax error -- `vstrh.32 q0,r8'
-[^:]*:22: Error: syntax error -- `vldrh.s32 q0,r10'
-[^:]*:22: Error: syntax error -- `vldrh.u32 q0,r10'
-[^:]*:22: Error: syntax error -- `vstrh.32 q0,r10'
-[^:]*:22: Error: syntax error -- `vldrh.s32 q0,r12'
-[^:]*:22: Error: syntax error -- `vldrh.u32 q0,r12'
-[^:]*:22: Error: syntax error -- `vstrh.32 q0,r12'
-[^:]*:22: Error: syntax error -- `vldrh.s32 q0,r14'
-[^:]*:22: Error: syntax error -- `vldrh.u32 q0,r14'
-[^:]*:22: Error: syntax error -- `vstrh.32 q0,r14'
-[^:]*:22: Error: syntax error -- `vldrh.s32 q1,r0'
-[^:]*:22: Error: syntax error -- `vldrh.u32 q1,r0'
-[^:]*:22: Error: syntax error -- `vstrh.32 q1,r0'
-[^:]*:22: Error: syntax error -- `vldrh.s32 q1,r1'
-[^:]*:22: Error: syntax error -- `vldrh.u32 q1,r1'
-[^:]*:22: Error: syntax error -- `vstrh.32 q1,r1'
-[^:]*:22: Error: syntax error -- `vldrh.s32 q1,r2'
-[^:]*:22: Error: syntax error -- `vldrh.u32 q1,r2'
-[^:]*:22: Error: syntax error -- `vstrh.32 q1,r2'
-[^:]*:22: Error: syntax error -- `vldrh.s32 q1,r4'
-[^:]*:22: Error: syntax error -- `vldrh.u32 q1,r4'
-[^:]*:22: Error: syntax error -- `vstrh.32 q1,r4'
-[^:]*:22: Error: syntax error -- `vldrh.s32 q1,r7'
-[^:]*:22: Error: syntax error -- `vldrh.u32 q1,r7'
-[^:]*:22: Error: syntax error -- `vstrh.32 q1,r7'
-[^:]*:22: Error: syntax error -- `vldrh.s32 q1,r8'
-[^:]*:22: Error: syntax error -- `vldrh.u32 q1,r8'
-[^:]*:22: Error: syntax error -- `vstrh.32 q1,r8'
-[^:]*:22: Error: syntax error -- `vldrh.s32 q1,r10'
-[^:]*:22: Error: syntax error -- `vldrh.u32 q1,r10'
-[^:]*:22: Error: syntax error -- `vstrh.32 q1,r10'
-[^:]*:22: Error: syntax error -- `vldrh.s32 q1,r12'
-[^:]*:22: Error: syntax error -- `vldrh.u32 q1,r12'
-[^:]*:22: Error: syntax error -- `vstrh.32 q1,r12'
-[^:]*:22: Error: syntax error -- `vldrh.s32 q1,r14'
-[^:]*:22: Error: syntax error -- `vldrh.u32 q1,r14'
-[^:]*:22: Error: syntax error -- `vstrh.32 q1,r14'
-[^:]*:22: Error: syntax error -- `vldrh.s32 q2,r0'
-[^:]*:22: Error: syntax error -- `vldrh.u32 q2,r0'
-[^:]*:22: Error: syntax error -- `vstrh.32 q2,r0'
-[^:]*:22: Error: syntax error -- `vldrh.s32 q2,r1'
-[^:]*:22: Error: syntax error -- `vldrh.u32 q2,r1'
-[^:]*:22: Error: syntax error -- `vstrh.32 q2,r1'
-[^:]*:22: Error: syntax error -- `vldrh.s32 q2,r2'
-[^:]*:22: Error: syntax error -- `vldrh.u32 q2,r2'
-[^:]*:22: Error: syntax error -- `vstrh.32 q2,r2'
-[^:]*:22: Error: syntax error -- `vldrh.s32 q2,r4'
-[^:]*:22: Error: syntax error -- `vldrh.u32 q2,r4'
-[^:]*:22: Error: syntax error -- `vstrh.32 q2,r4'
-[^:]*:22: Error: syntax error -- `vldrh.s32 q2,r7'
-[^:]*:22: Error: syntax error -- `vldrh.u32 q2,r7'
-[^:]*:22: Error: syntax error -- `vstrh.32 q2,r7'
-[^:]*:22: Error: syntax error -- `vldrh.s32 q2,r8'
-[^:]*:22: Error: syntax error -- `vldrh.u32 q2,r8'
-[^:]*:22: Error: syntax error -- `vstrh.32 q2,r8'
-[^:]*:22: Error: syntax error -- `vldrh.s32 q2,r10'
-[^:]*:22: Error: syntax error -- `vldrh.u32 q2,r10'
-[^:]*:22: Error: syntax error -- `vstrh.32 q2,r10'
-[^:]*:22: Error: syntax error -- `vldrh.s32 q2,r12'
-[^:]*:22: Error: syntax error -- `vldrh.u32 q2,r12'
-[^:]*:22: Error: syntax error -- `vstrh.32 q2,r12'
-[^:]*:22: Error: syntax error -- `vldrh.s32 q2,r14'
-[^:]*:22: Error: syntax error -- `vldrh.u32 q2,r14'
-[^:]*:22: Error: syntax error -- `vstrh.32 q2,r14'
-[^:]*:22: Error: syntax error -- `vldrh.s32 q4,r0'
-[^:]*:22: Error: syntax error -- `vldrh.u32 q4,r0'
-[^:]*:22: Error: syntax error -- `vstrh.32 q4,r0'
-[^:]*:22: Error: syntax error -- `vldrh.s32 q4,r1'
-[^:]*:22: Error: syntax error -- `vldrh.u32 q4,r1'
-[^:]*:22: Error: syntax error -- `vstrh.32 q4,r1'
-[^:]*:22: Error: syntax error -- `vldrh.s32 q4,r2'
-[^:]*:22: Error: syntax error -- `vldrh.u32 q4,r2'
-[^:]*:22: Error: syntax error -- `vstrh.32 q4,r2'
-[^:]*:22: Error: syntax error -- `vldrh.s32 q4,r4'
-[^:]*:22: Error: syntax error -- `vldrh.u32 q4,r4'
-[^:]*:22: Error: syntax error -- `vstrh.32 q4,r4'
-[^:]*:22: Error: syntax error -- `vldrh.s32 q4,r7'
-[^:]*:22: Error: syntax error -- `vldrh.u32 q4,r7'
-[^:]*:22: Error: syntax error -- `vstrh.32 q4,r7'
-[^:]*:22: Error: syntax error -- `vldrh.s32 q4,r8'
-[^:]*:22: Error: syntax error -- `vldrh.u32 q4,r8'
-[^:]*:22: Error: syntax error -- `vstrh.32 q4,r8'
-[^:]*:22: Error: syntax error -- `vldrh.s32 q4,r10'
-[^:]*:22: Error: syntax error -- `vldrh.u32 q4,r10'
-[^:]*:22: Error: syntax error -- `vstrh.32 q4,r10'
-[^:]*:22: Error: syntax error -- `vldrh.s32 q4,r12'
-[^:]*:22: Error: syntax error -- `vldrh.u32 q4,r12'
-[^:]*:22: Error: syntax error -- `vstrh.32 q4,r12'
-[^:]*:22: Error: syntax error -- `vldrh.s32 q4,r14'
-[^:]*:22: Error: syntax error -- `vldrh.u32 q4,r14'
-[^:]*:22: Error: syntax error -- `vstrh.32 q4,r14'
-[^:]*:22: Error: syntax error -- `vldrh.s32 q7,r0'
-[^:]*:22: Error: syntax error -- `vldrh.u32 q7,r0'
-[^:]*:22: Error: syntax error -- `vstrh.32 q7,r0'
-[^:]*:22: Error: syntax error -- `vldrh.s32 q7,r1'
-[^:]*:22: Error: syntax error -- `vldrh.u32 q7,r1'
-[^:]*:22: Error: syntax error -- `vstrh.32 q7,r1'
-[^:]*:22: Error: syntax error -- `vldrh.s32 q7,r2'
-[^:]*:22: Error: syntax error -- `vldrh.u32 q7,r2'
-[^:]*:22: Error: syntax error -- `vstrh.32 q7,r2'
-[^:]*:22: Error: syntax error -- `vldrh.s32 q7,r4'
-[^:]*:22: Error: syntax error -- `vldrh.u32 q7,r4'
-[^:]*:22: Error: syntax error -- `vstrh.32 q7,r4'
-[^:]*:22: Error: syntax error -- `vldrh.s32 q7,r7'
-[^:]*:22: Error: syntax error -- `vldrh.u32 q7,r7'
-[^:]*:22: Error: syntax error -- `vstrh.32 q7,r7'
-[^:]*:22: Error: syntax error -- `vldrh.s32 q7,r8'
-[^:]*:22: Error: syntax error -- `vldrh.u32 q7,r8'
-[^:]*:22: Error: syntax error -- `vstrh.32 q7,r8'
-[^:]*:22: Error: syntax error -- `vldrh.s32 q7,r10'
-[^:]*:22: Error: syntax error -- `vldrh.u32 q7,r10'
-[^:]*:22: Error: syntax error -- `vstrh.32 q7,r10'
-[^:]*:22: Error: syntax error -- `vldrh.s32 q7,r12'
-[^:]*:22: Error: syntax error -- `vldrh.u32 q7,r12'
-[^:]*:22: Error: syntax error -- `vstrh.32 q7,r12'
-[^:]*:22: Error: syntax error -- `vldrh.s32 q7,r14'
-[^:]*:22: Error: syntax error -- `vldrh.u32 q7,r14'
-[^:]*:22: Error: syntax error -- `vstrh.32 q7,r14'
-[^:]*:30: Error: syntax error -- `vldrw.s32 q0,r0'
-[^:]*:30: Error: syntax error -- `vldrw.u32 q0,r0'
-[^:]*:30: Error: syntax error -- `vstrw.32 q0,r0'
-[^:]*:30: Error: syntax error -- `vldrw.s32 q0,r1'
-[^:]*:30: Error: syntax error -- `vldrw.u32 q0,r1'
-[^:]*:30: Error: syntax error -- `vstrw.32 q0,r1'
-[^:]*:30: Error: syntax error -- `vldrw.s32 q0,r2'
-[^:]*:30: Error: syntax error -- `vldrw.u32 q0,r2'
-[^:]*:30: Error: syntax error -- `vstrw.32 q0,r2'
-[^:]*:30: Error: syntax error -- `vldrw.s32 q0,r4'
-[^:]*:30: Error: syntax error -- `vldrw.u32 q0,r4'
-[^:]*:30: Error: syntax error -- `vstrw.32 q0,r4'
-[^:]*:30: Error: syntax error -- `vldrw.s32 q0,r7'
-[^:]*:30: Error: syntax error -- `vldrw.u32 q0,r7'
-[^:]*:30: Error: syntax error -- `vstrw.32 q0,r7'
-[^:]*:30: Error: syntax error -- `vldrw.s32 q0,r8'
-[^:]*:30: Error: syntax error -- `vldrw.u32 q0,r8'
-[^:]*:30: Error: syntax error -- `vstrw.32 q0,r8'
-[^:]*:30: Error: syntax error -- `vldrw.s32 q0,r10'
-[^:]*:30: Error: syntax error -- `vldrw.u32 q0,r10'
-[^:]*:30: Error: syntax error -- `vstrw.32 q0,r10'
-[^:]*:30: Error: syntax error -- `vldrw.s32 q0,r12'
-[^:]*:30: Error: syntax error -- `vldrw.u32 q0,r12'
-[^:]*:30: Error: syntax error -- `vstrw.32 q0,r12'
-[^:]*:30: Error: syntax error -- `vldrw.s32 q0,r14'
-[^:]*:30: Error: syntax error -- `vldrw.u32 q0,r14'
-[^:]*:30: Error: syntax error -- `vstrw.32 q0,r14'
-[^:]*:30: Error: syntax error -- `vldrw.s32 q1,r0'
-[^:]*:30: Error: syntax error -- `vldrw.u32 q1,r0'
-[^:]*:30: Error: syntax error -- `vstrw.32 q1,r0'
-[^:]*:30: Error: syntax error -- `vldrw.s32 q1,r1'
-[^:]*:30: Error: syntax error -- `vldrw.u32 q1,r1'
-[^:]*:30: Error: syntax error -- `vstrw.32 q1,r1'
-[^:]*:30: Error: syntax error -- `vldrw.s32 q1,r2'
-[^:]*:30: Error: syntax error -- `vldrw.u32 q1,r2'
-[^:]*:30: Error: syntax error -- `vstrw.32 q1,r2'
-[^:]*:30: Error: syntax error -- `vldrw.s32 q1,r4'
-[^:]*:30: Error: syntax error -- `vldrw.u32 q1,r4'
-[^:]*:30: Error: syntax error -- `vstrw.32 q1,r4'
-[^:]*:30: Error: syntax error -- `vldrw.s32 q1,r7'
-[^:]*:30: Error: syntax error -- `vldrw.u32 q1,r7'
-[^:]*:30: Error: syntax error -- `vstrw.32 q1,r7'
-[^:]*:30: Error: syntax error -- `vldrw.s32 q1,r8'
-[^:]*:30: Error: syntax error -- `vldrw.u32 q1,r8'
-[^:]*:30: Error: syntax error -- `vstrw.32 q1,r8'
-[^:]*:30: Error: syntax error -- `vldrw.s32 q1,r10'
-[^:]*:30: Error: syntax error -- `vldrw.u32 q1,r10'
-[^:]*:30: Error: syntax error -- `vstrw.32 q1,r10'
-[^:]*:30: Error: syntax error -- `vldrw.s32 q1,r12'
-[^:]*:30: Error: syntax error -- `vldrw.u32 q1,r12'
-[^:]*:30: Error: syntax error -- `vstrw.32 q1,r12'
-[^:]*:30: Error: syntax error -- `vldrw.s32 q1,r14'
-[^:]*:30: Error: syntax error -- `vldrw.u32 q1,r14'
-[^:]*:30: Error: syntax error -- `vstrw.32 q1,r14'
-[^:]*:30: Error: syntax error -- `vldrw.s32 q2,r0'
-[^:]*:30: Error: syntax error -- `vldrw.u32 q2,r0'
-[^:]*:30: Error: syntax error -- `vstrw.32 q2,r0'
-[^:]*:30: Error: syntax error -- `vldrw.s32 q2,r1'
-[^:]*:30: Error: syntax error -- `vldrw.u32 q2,r1'
-[^:]*:30: Error: syntax error -- `vstrw.32 q2,r1'
-[^:]*:30: Error: syntax error -- `vldrw.s32 q2,r2'
-[^:]*:30: Error: syntax error -- `vldrw.u32 q2,r2'
-[^:]*:30: Error: syntax error -- `vstrw.32 q2,r2'
-[^:]*:30: Error: syntax error -- `vldrw.s32 q2,r4'
-[^:]*:30: Error: syntax error -- `vldrw.u32 q2,r4'
-[^:]*:30: Error: syntax error -- `vstrw.32 q2,r4'
-[^:]*:30: Error: syntax error -- `vldrw.s32 q2,r7'
-[^:]*:30: Error: syntax error -- `vldrw.u32 q2,r7'
-[^:]*:30: Error: syntax error -- `vstrw.32 q2,r7'
-[^:]*:30: Error: syntax error -- `vldrw.s32 q2,r8'
-[^:]*:30: Error: syntax error -- `vldrw.u32 q2,r8'
-[^:]*:30: Error: syntax error -- `vstrw.32 q2,r8'
-[^:]*:30: Error: syntax error -- `vldrw.s32 q2,r10'
-[^:]*:30: Error: syntax error -- `vldrw.u32 q2,r10'
-[^:]*:30: Error: syntax error -- `vstrw.32 q2,r10'
-[^:]*:30: Error: syntax error -- `vldrw.s32 q2,r12'
-[^:]*:30: Error: syntax error -- `vldrw.u32 q2,r12'
-[^:]*:30: Error: syntax error -- `vstrw.32 q2,r12'
-[^:]*:30: Error: syntax error -- `vldrw.s32 q2,r14'
-[^:]*:30: Error: syntax error -- `vldrw.u32 q2,r14'
-[^:]*:30: Error: syntax error -- `vstrw.32 q2,r14'
-[^:]*:30: Error: syntax error -- `vldrw.s32 q4,r0'
-[^:]*:30: Error: syntax error -- `vldrw.u32 q4,r0'
-[^:]*:30: Error: syntax error -- `vstrw.32 q4,r0'
-[^:]*:30: Error: syntax error -- `vldrw.s32 q4,r1'
-[^:]*:30: Error: syntax error -- `vldrw.u32 q4,r1'
-[^:]*:30: Error: syntax error -- `vstrw.32 q4,r1'
-[^:]*:30: Error: syntax error -- `vldrw.s32 q4,r2'
-[^:]*:30: Error: syntax error -- `vldrw.u32 q4,r2'
-[^:]*:30: Error: syntax error -- `vstrw.32 q4,r2'
-[^:]*:30: Error: syntax error -- `vldrw.s32 q4,r4'
-[^:]*:30: Error: syntax error -- `vldrw.u32 q4,r4'
-[^:]*:30: Error: syntax error -- `vstrw.32 q4,r4'
-[^:]*:30: Error: syntax error -- `vldrw.s32 q4,r7'
-[^:]*:30: Error: syntax error -- `vldrw.u32 q4,r7'
-[^:]*:30: Error: syntax error -- `vstrw.32 q4,r7'
-[^:]*:30: Error: syntax error -- `vldrw.s32 q4,r8'
-[^:]*:30: Error: syntax error -- `vldrw.u32 q4,r8'
-[^:]*:30: Error: syntax error -- `vstrw.32 q4,r8'
-[^:]*:30: Error: syntax error -- `vldrw.s32 q4,r10'
-[^:]*:30: Error: syntax error -- `vldrw.u32 q4,r10'
-[^:]*:30: Error: syntax error -- `vstrw.32 q4,r10'
-[^:]*:30: Error: syntax error -- `vldrw.s32 q4,r12'
-[^:]*:30: Error: syntax error -- `vldrw.u32 q4,r12'
-[^:]*:30: Error: syntax error -- `vstrw.32 q4,r12'
-[^:]*:30: Error: syntax error -- `vldrw.s32 q4,r14'
-[^:]*:30: Error: syntax error -- `vldrw.u32 q4,r14'
-[^:]*:30: Error: syntax error -- `vstrw.32 q4,r14'
-[^:]*:30: Error: syntax error -- `vldrw.s32 q7,r0'
-[^:]*:30: Error: syntax error -- `vldrw.u32 q7,r0'
-[^:]*:30: Error: syntax error -- `vstrw.32 q7,r0'
-[^:]*:30: Error: syntax error -- `vldrw.s32 q7,r1'
-[^:]*:30: Error: syntax error -- `vldrw.u32 q7,r1'
-[^:]*:30: Error: syntax error -- `vstrw.32 q7,r1'
-[^:]*:30: Error: syntax error -- `vldrw.s32 q7,r2'
-[^:]*:30: Error: syntax error -- `vldrw.u32 q7,r2'
-[^:]*:30: Error: syntax error -- `vstrw.32 q7,r2'
-[^:]*:30: Error: syntax error -- `vldrw.s32 q7,r4'
-[^:]*:30: Error: syntax error -- `vldrw.u32 q7,r4'
-[^:]*:30: Error: syntax error -- `vstrw.32 q7,r4'
-[^:]*:30: Error: syntax error -- `vldrw.s32 q7,r7'
-[^:]*:30: Error: syntax error -- `vldrw.u32 q7,r7'
-[^:]*:30: Error: syntax error -- `vstrw.32 q7,r7'
-[^:]*:30: Error: syntax error -- `vldrw.s32 q7,r8'
-[^:]*:30: Error: syntax error -- `vldrw.u32 q7,r8'
-[^:]*:30: Error: syntax error -- `vstrw.32 q7,r8'
-[^:]*:30: Error: syntax error -- `vldrw.s32 q7,r10'
-[^:]*:30: Error: syntax error -- `vldrw.u32 q7,r10'
-[^:]*:30: Error: syntax error -- `vstrw.32 q7,r10'
-[^:]*:30: Error: syntax error -- `vldrw.s32 q7,r12'
-[^:]*:30: Error: syntax error -- `vldrw.u32 q7,r12'
-[^:]*:30: Error: syntax error -- `vstrw.32 q7,r12'
-[^:]*:30: Error: syntax error -- `vldrw.s32 q7,r14'
-[^:]*:30: Error: syntax error -- `vldrw.u32 q7,r14'
-[^:]*:30: Error: syntax error -- `vstrw.32 q7,r14'
+[^:]*:7: Error: syntax error -- `vldrb.s8 q0,r0'
+[^:]*:8: Error: syntax error -- `vldrb.u8 q0,r0'
+[^:]*:9: Error: syntax error -- `vstrb.8 q0,r0'
+[^:]*:7: Error: syntax error -- `vldrb.s8 q0,r1'
+[^:]*:8: Error: syntax error -- `vldrb.u8 q0,r1'
+[^:]*:9: Error: syntax error -- `vstrb.8 q0,r1'
+[^:]*:7: Error: syntax error -- `vldrb.s8 q0,r2'
+[^:]*:8: Error: syntax error -- `vldrb.u8 q0,r2'
+[^:]*:9: Error: syntax error -- `vstrb.8 q0,r2'
+[^:]*:7: Error: syntax error -- `vldrb.s8 q0,r4'
+[^:]*:8: Error: syntax error -- `vldrb.u8 q0,r4'
+[^:]*:9: Error: syntax error -- `vstrb.8 q0,r4'
+[^:]*:7: Error: syntax error -- `vldrb.s8 q0,r7'
+[^:]*:8: Error: syntax error -- `vldrb.u8 q0,r7'
+[^:]*:9: Error: syntax error -- `vstrb.8 q0,r7'
+[^:]*:7: Error: syntax error -- `vldrb.s8 q0,r8'
+[^:]*:8: Error: syntax error -- `vldrb.u8 q0,r8'
+[^:]*:9: Error: syntax error -- `vstrb.8 q0,r8'
+[^:]*:7: Error: syntax error -- `vldrb.s8 q0,r10'
+[^:]*:8: Error: syntax error -- `vldrb.u8 q0,r10'
+[^:]*:9: Error: syntax error -- `vstrb.8 q0,r10'
+[^:]*:7: Error: syntax error -- `vldrb.s8 q0,r12'
+[^:]*:8: Error: syntax error -- `vldrb.u8 q0,r12'
+[^:]*:9: Error: syntax error -- `vstrb.8 q0,r12'
+[^:]*:7: Error: syntax error -- `vldrb.s8 q0,r14'
+[^:]*:8: Error: syntax error -- `vldrb.u8 q0,r14'
+[^:]*:9: Error: syntax error -- `vstrb.8 q0,r14'
+[^:]*:7: Error: syntax error -- `vldrb.s8 q1,r0'
+[^:]*:8: Error: syntax error -- `vldrb.u8 q1,r0'
+[^:]*:9: Error: syntax error -- `vstrb.8 q1,r0'
+[^:]*:7: Error: syntax error -- `vldrb.s8 q1,r1'
+[^:]*:8: Error: syntax error -- `vldrb.u8 q1,r1'
+[^:]*:9: Error: syntax error -- `vstrb.8 q1,r1'
+[^:]*:7: Error: syntax error -- `vldrb.s8 q1,r2'
+[^:]*:8: Error: syntax error -- `vldrb.u8 q1,r2'
+[^:]*:9: Error: syntax error -- `vstrb.8 q1,r2'
+[^:]*:7: Error: syntax error -- `vldrb.s8 q1,r4'
+[^:]*:8: Error: syntax error -- `vldrb.u8 q1,r4'
+[^:]*:9: Error: syntax error -- `vstrb.8 q1,r4'
+[^:]*:7: Error: syntax error -- `vldrb.s8 q1,r7'
+[^:]*:8: Error: syntax error -- `vldrb.u8 q1,r7'
+[^:]*:9: Error: syntax error -- `vstrb.8 q1,r7'
+[^:]*:7: Error: syntax error -- `vldrb.s8 q1,r8'
+[^:]*:8: Error: syntax error -- `vldrb.u8 q1,r8'
+[^:]*:9: Error: syntax error -- `vstrb.8 q1,r8'
+[^:]*:7: Error: syntax error -- `vldrb.s8 q1,r10'
+[^:]*:8: Error: syntax error -- `vldrb.u8 q1,r10'
+[^:]*:9: Error: syntax error -- `vstrb.8 q1,r10'
+[^:]*:7: Error: syntax error -- `vldrb.s8 q1,r12'
+[^:]*:8: Error: syntax error -- `vldrb.u8 q1,r12'
+[^:]*:9: Error: syntax error -- `vstrb.8 q1,r12'
+[^:]*:7: Error: syntax error -- `vldrb.s8 q1,r14'
+[^:]*:8: Error: syntax error -- `vldrb.u8 q1,r14'
+[^:]*:9: Error: syntax error -- `vstrb.8 q1,r14'
+[^:]*:7: Error: syntax error -- `vldrb.s8 q2,r0'
+[^:]*:8: Error: syntax error -- `vldrb.u8 q2,r0'
+[^:]*:9: Error: syntax error -- `vstrb.8 q2,r0'
+[^:]*:7: Error: syntax error -- `vldrb.s8 q2,r1'
+[^:]*:8: Error: syntax error -- `vldrb.u8 q2,r1'
+[^:]*:9: Error: syntax error -- `vstrb.8 q2,r1'
+[^:]*:7: Error: syntax error -- `vldrb.s8 q2,r2'
+[^:]*:8: Error: syntax error -- `vldrb.u8 q2,r2'
+[^:]*:9: Error: syntax error -- `vstrb.8 q2,r2'
+[^:]*:7: Error: syntax error -- `vldrb.s8 q2,r4'
+[^:]*:8: Error: syntax error -- `vldrb.u8 q2,r4'
+[^:]*:9: Error: syntax error -- `vstrb.8 q2,r4'
+[^:]*:7: Error: syntax error -- `vldrb.s8 q2,r7'
+[^:]*:8: Error: syntax error -- `vldrb.u8 q2,r7'
+[^:]*:9: Error: syntax error -- `vstrb.8 q2,r7'
+[^:]*:7: Error: syntax error -- `vldrb.s8 q2,r8'
+[^:]*:8: Error: syntax error -- `vldrb.u8 q2,r8'
+[^:]*:9: Error: syntax error -- `vstrb.8 q2,r8'
+[^:]*:7: Error: syntax error -- `vldrb.s8 q2,r10'
+[^:]*:8: Error: syntax error -- `vldrb.u8 q2,r10'
+[^:]*:9: Error: syntax error -- `vstrb.8 q2,r10'
+[^:]*:7: Error: syntax error -- `vldrb.s8 q2,r12'
+[^:]*:8: Error: syntax error -- `vldrb.u8 q2,r12'
+[^:]*:9: Error: syntax error -- `vstrb.8 q2,r12'
+[^:]*:7: Error: syntax error -- `vldrb.s8 q2,r14'
+[^:]*:8: Error: syntax error -- `vldrb.u8 q2,r14'
+[^:]*:9: Error: syntax error -- `vstrb.8 q2,r14'
+[^:]*:7: Error: syntax error -- `vldrb.s8 q4,r0'
+[^:]*:8: Error: syntax error -- `vldrb.u8 q4,r0'
+[^:]*:9: Error: syntax error -- `vstrb.8 q4,r0'
+[^:]*:7: Error: syntax error -- `vldrb.s8 q4,r1'
+[^:]*:8: Error: syntax error -- `vldrb.u8 q4,r1'
+[^:]*:9: Error: syntax error -- `vstrb.8 q4,r1'
+[^:]*:7: Error: syntax error -- `vldrb.s8 q4,r2'
+[^:]*:8: Error: syntax error -- `vldrb.u8 q4,r2'
+[^:]*:9: Error: syntax error -- `vstrb.8 q4,r2'
+[^:]*:7: Error: syntax error -- `vldrb.s8 q4,r4'
+[^:]*:8: Error: syntax error -- `vldrb.u8 q4,r4'
+[^:]*:9: Error: syntax error -- `vstrb.8 q4,r4'
+[^:]*:7: Error: syntax error -- `vldrb.s8 q4,r7'
+[^:]*:8: Error: syntax error -- `vldrb.u8 q4,r7'
+[^:]*:9: Error: syntax error -- `vstrb.8 q4,r7'
+[^:]*:7: Error: syntax error -- `vldrb.s8 q4,r8'
+[^:]*:8: Error: syntax error -- `vldrb.u8 q4,r8'
+[^:]*:9: Error: syntax error -- `vstrb.8 q4,r8'
+[^:]*:7: Error: syntax error -- `vldrb.s8 q4,r10'
+[^:]*:8: Error: syntax error -- `vldrb.u8 q4,r10'
+[^:]*:9: Error: syntax error -- `vstrb.8 q4,r10'
+[^:]*:7: Error: syntax error -- `vldrb.s8 q4,r12'
+[^:]*:8: Error: syntax error -- `vldrb.u8 q4,r12'
+[^:]*:9: Error: syntax error -- `vstrb.8 q4,r12'
+[^:]*:7: Error: syntax error -- `vldrb.s8 q4,r14'
+[^:]*:8: Error: syntax error -- `vldrb.u8 q4,r14'
+[^:]*:9: Error: syntax error -- `vstrb.8 q4,r14'
+[^:]*:7: Error: syntax error -- `vldrb.s8 q7,r0'
+[^:]*:8: Error: syntax error -- `vldrb.u8 q7,r0'
+[^:]*:9: Error: syntax error -- `vstrb.8 q7,r0'
+[^:]*:7: Error: syntax error -- `vldrb.s8 q7,r1'
+[^:]*:8: Error: syntax error -- `vldrb.u8 q7,r1'
+[^:]*:9: Error: syntax error -- `vstrb.8 q7,r1'
+[^:]*:7: Error: syntax error -- `vldrb.s8 q7,r2'
+[^:]*:8: Error: syntax error -- `vldrb.u8 q7,r2'
+[^:]*:9: Error: syntax error -- `vstrb.8 q7,r2'
+[^:]*:7: Error: syntax error -- `vldrb.s8 q7,r4'
+[^:]*:8: Error: syntax error -- `vldrb.u8 q7,r4'
+[^:]*:9: Error: syntax error -- `vstrb.8 q7,r4'
+[^:]*:7: Error: syntax error -- `vldrb.s8 q7,r7'
+[^:]*:8: Error: syntax error -- `vldrb.u8 q7,r7'
+[^:]*:9: Error: syntax error -- `vstrb.8 q7,r7'
+[^:]*:7: Error: syntax error -- `vldrb.s8 q7,r8'
+[^:]*:8: Error: syntax error -- `vldrb.u8 q7,r8'
+[^:]*:9: Error: syntax error -- `vstrb.8 q7,r8'
+[^:]*:7: Error: syntax error -- `vldrb.s8 q7,r10'
+[^:]*:8: Error: syntax error -- `vldrb.u8 q7,r10'
+[^:]*:9: Error: syntax error -- `vstrb.8 q7,r10'
+[^:]*:7: Error: syntax error -- `vldrb.s8 q7,r12'
+[^:]*:8: Error: syntax error -- `vldrb.u8 q7,r12'
+[^:]*:9: Error: syntax error -- `vstrb.8 q7,r12'
+[^:]*:7: Error: syntax error -- `vldrb.s8 q7,r14'
+[^:]*:8: Error: syntax error -- `vldrb.u8 q7,r14'
+[^:]*:9: Error: syntax error -- `vstrb.8 q7,r14'
+[^:]*:7: Error: syntax error -- `vldrb.s16 q0,r0'
+[^:]*:8: Error: syntax error -- `vldrb.u16 q0,r0'
+[^:]*:9: Error: syntax error -- `vstrb.16 q0,r0'
+[^:]*:7: Error: syntax error -- `vldrb.s16 q0,r1'
+[^:]*:8: Error: syntax error -- `vldrb.u16 q0,r1'
+[^:]*:9: Error: syntax error -- `vstrb.16 q0,r1'
+[^:]*:7: Error: syntax error -- `vldrb.s16 q0,r2'
+[^:]*:8: Error: syntax error -- `vldrb.u16 q0,r2'
+[^:]*:9: Error: syntax error -- `vstrb.16 q0,r2'
+[^:]*:7: Error: syntax error -- `vldrb.s16 q0,r4'
+[^:]*:8: Error: syntax error -- `vldrb.u16 q0,r4'
+[^:]*:9: Error: syntax error -- `vstrb.16 q0,r4'
+[^:]*:7: Error: syntax error -- `vldrb.s16 q0,r7'
+[^:]*:8: Error: syntax error -- `vldrb.u16 q0,r7'
+[^:]*:9: Error: syntax error -- `vstrb.16 q0,r7'
+[^:]*:7: Error: syntax error -- `vldrb.s16 q0,r8'
+[^:]*:8: Error: syntax error -- `vldrb.u16 q0,r8'
+[^:]*:9: Error: syntax error -- `vstrb.16 q0,r8'
+[^:]*:7: Error: syntax error -- `vldrb.s16 q0,r10'
+[^:]*:8: Error: syntax error -- `vldrb.u16 q0,r10'
+[^:]*:9: Error: syntax error -- `vstrb.16 q0,r10'
+[^:]*:7: Error: syntax error -- `vldrb.s16 q0,r12'
+[^:]*:8: Error: syntax error -- `vldrb.u16 q0,r12'
+[^:]*:9: Error: syntax error -- `vstrb.16 q0,r12'
+[^:]*:7: Error: syntax error -- `vldrb.s16 q0,r14'
+[^:]*:8: Error: syntax error -- `vldrb.u16 q0,r14'
+[^:]*:9: Error: syntax error -- `vstrb.16 q0,r14'
+[^:]*:7: Error: syntax error -- `vldrb.s16 q1,r0'
+[^:]*:8: Error: syntax error -- `vldrb.u16 q1,r0'
+[^:]*:9: Error: syntax error -- `vstrb.16 q1,r0'
+[^:]*:7: Error: syntax error -- `vldrb.s16 q1,r1'
+[^:]*:8: Error: syntax error -- `vldrb.u16 q1,r1'
+[^:]*:9: Error: syntax error -- `vstrb.16 q1,r1'
+[^:]*:7: Error: syntax error -- `vldrb.s16 q1,r2'
+[^:]*:8: Error: syntax error -- `vldrb.u16 q1,r2'
+[^:]*:9: Error: syntax error -- `vstrb.16 q1,r2'
+[^:]*:7: Error: syntax error -- `vldrb.s16 q1,r4'
+[^:]*:8: Error: syntax error -- `vldrb.u16 q1,r4'
+[^:]*:9: Error: syntax error -- `vstrb.16 q1,r4'
+[^:]*:7: Error: syntax error -- `vldrb.s16 q1,r7'
+[^:]*:8: Error: syntax error -- `vldrb.u16 q1,r7'
+[^:]*:9: Error: syntax error -- `vstrb.16 q1,r7'
+[^:]*:7: Error: syntax error -- `vldrb.s16 q1,r8'
+[^:]*:8: Error: syntax error -- `vldrb.u16 q1,r8'
+[^:]*:9: Error: syntax error -- `vstrb.16 q1,r8'
+[^:]*:7: Error: syntax error -- `vldrb.s16 q1,r10'
+[^:]*:8: Error: syntax error -- `vldrb.u16 q1,r10'
+[^:]*:9: Error: syntax error -- `vstrb.16 q1,r10'
+[^:]*:7: Error: syntax error -- `vldrb.s16 q1,r12'
+[^:]*:8: Error: syntax error -- `vldrb.u16 q1,r12'
+[^:]*:9: Error: syntax error -- `vstrb.16 q1,r12'
+[^:]*:7: Error: syntax error -- `vldrb.s16 q1,r14'
+[^:]*:8: Error: syntax error -- `vldrb.u16 q1,r14'
+[^:]*:9: Error: syntax error -- `vstrb.16 q1,r14'
+[^:]*:7: Error: syntax error -- `vldrb.s16 q2,r0'
+[^:]*:8: Error: syntax error -- `vldrb.u16 q2,r0'
+[^:]*:9: Error: syntax error -- `vstrb.16 q2,r0'
+[^:]*:7: Error: syntax error -- `vldrb.s16 q2,r1'
+[^:]*:8: Error: syntax error -- `vldrb.u16 q2,r1'
+[^:]*:9: Error: syntax error -- `vstrb.16 q2,r1'
+[^:]*:7: Error: syntax error -- `vldrb.s16 q2,r2'
+[^:]*:8: Error: syntax error -- `vldrb.u16 q2,r2'
+[^:]*:9: Error: syntax error -- `vstrb.16 q2,r2'
+[^:]*:7: Error: syntax error -- `vldrb.s16 q2,r4'
+[^:]*:8: Error: syntax error -- `vldrb.u16 q2,r4'
+[^:]*:9: Error: syntax error -- `vstrb.16 q2,r4'
+[^:]*:7: Error: syntax error -- `vldrb.s16 q2,r7'
+[^:]*:8: Error: syntax error -- `vldrb.u16 q2,r7'
+[^:]*:9: Error: syntax error -- `vstrb.16 q2,r7'
+[^:]*:7: Error: syntax error -- `vldrb.s16 q2,r8'
+[^:]*:8: Error: syntax error -- `vldrb.u16 q2,r8'
+[^:]*:9: Error: syntax error -- `vstrb.16 q2,r8'
+[^:]*:7: Error: syntax error -- `vldrb.s16 q2,r10'
+[^:]*:8: Error: syntax error -- `vldrb.u16 q2,r10'
+[^:]*:9: Error: syntax error -- `vstrb.16 q2,r10'
+[^:]*:7: Error: syntax error -- `vldrb.s16 q2,r12'
+[^:]*:8: Error: syntax error -- `vldrb.u16 q2,r12'
+[^:]*:9: Error: syntax error -- `vstrb.16 q2,r12'
+[^:]*:7: Error: syntax error -- `vldrb.s16 q2,r14'
+[^:]*:8: Error: syntax error -- `vldrb.u16 q2,r14'
+[^:]*:9: Error: syntax error -- `vstrb.16 q2,r14'
+[^:]*:7: Error: syntax error -- `vldrb.s16 q4,r0'
+[^:]*:8: Error: syntax error -- `vldrb.u16 q4,r0'
+[^:]*:9: Error: syntax error -- `vstrb.16 q4,r0'
+[^:]*:7: Error: syntax error -- `vldrb.s16 q4,r1'
+[^:]*:8: Error: syntax error -- `vldrb.u16 q4,r1'
+[^:]*:9: Error: syntax error -- `vstrb.16 q4,r1'
+[^:]*:7: Error: syntax error -- `vldrb.s16 q4,r2'
+[^:]*:8: Error: syntax error -- `vldrb.u16 q4,r2'
+[^:]*:9: Error: syntax error -- `vstrb.16 q4,r2'
+[^:]*:7: Error: syntax error -- `vldrb.s16 q4,r4'
+[^:]*:8: Error: syntax error -- `vldrb.u16 q4,r4'
+[^:]*:9: Error: syntax error -- `vstrb.16 q4,r4'
+[^:]*:7: Error: syntax error -- `vldrb.s16 q4,r7'
+[^:]*:8: Error: syntax error -- `vldrb.u16 q4,r7'
+[^:]*:9: Error: syntax error -- `vstrb.16 q4,r7'
+[^:]*:7: Error: syntax error -- `vldrb.s16 q4,r8'
+[^:]*:8: Error: syntax error -- `vldrb.u16 q4,r8'
+[^:]*:9: Error: syntax error -- `vstrb.16 q4,r8'
+[^:]*:7: Error: syntax error -- `vldrb.s16 q4,r10'
+[^:]*:8: Error: syntax error -- `vldrb.u16 q4,r10'
+[^:]*:9: Error: syntax error -- `vstrb.16 q4,r10'
+[^:]*:7: Error: syntax error -- `vldrb.s16 q4,r12'
+[^:]*:8: Error: syntax error -- `vldrb.u16 q4,r12'
+[^:]*:9: Error: syntax error -- `vstrb.16 q4,r12'
+[^:]*:7: Error: syntax error -- `vldrb.s16 q4,r14'
+[^:]*:8: Error: syntax error -- `vldrb.u16 q4,r14'
+[^:]*:9: Error: syntax error -- `vstrb.16 q4,r14'
+[^:]*:7: Error: syntax error -- `vldrb.s16 q7,r0'
+[^:]*:8: Error: syntax error -- `vldrb.u16 q7,r0'
+[^:]*:9: Error: syntax error -- `vstrb.16 q7,r0'
+[^:]*:7: Error: syntax error -- `vldrb.s16 q7,r1'
+[^:]*:8: Error: syntax error -- `vldrb.u16 q7,r1'
+[^:]*:9: Error: syntax error -- `vstrb.16 q7,r1'
+[^:]*:7: Error: syntax error -- `vldrb.s16 q7,r2'
+[^:]*:8: Error: syntax error -- `vldrb.u16 q7,r2'
+[^:]*:9: Error: syntax error -- `vstrb.16 q7,r2'
+[^:]*:7: Error: syntax error -- `vldrb.s16 q7,r4'
+[^:]*:8: Error: syntax error -- `vldrb.u16 q7,r4'
+[^:]*:9: Error: syntax error -- `vstrb.16 q7,r4'
+[^:]*:7: Error: syntax error -- `vldrb.s16 q7,r7'
+[^:]*:8: Error: syntax error -- `vldrb.u16 q7,r7'
+[^:]*:9: Error: syntax error -- `vstrb.16 q7,r7'
+[^:]*:7: Error: syntax error -- `vldrb.s16 q7,r8'
+[^:]*:8: Error: syntax error -- `vldrb.u16 q7,r8'
+[^:]*:9: Error: syntax error -- `vstrb.16 q7,r8'
+[^:]*:7: Error: syntax error -- `vldrb.s16 q7,r10'
+[^:]*:8: Error: syntax error -- `vldrb.u16 q7,r10'
+[^:]*:9: Error: syntax error -- `vstrb.16 q7,r10'
+[^:]*:7: Error: syntax error -- `vldrb.s16 q7,r12'
+[^:]*:8: Error: syntax error -- `vldrb.u16 q7,r12'
+[^:]*:9: Error: syntax error -- `vstrb.16 q7,r12'
+[^:]*:7: Error: syntax error -- `vldrb.s16 q7,r14'
+[^:]*:8: Error: syntax error -- `vldrb.u16 q7,r14'
+[^:]*:9: Error: syntax error -- `vstrb.16 q7,r14'
+[^:]*:7: Error: syntax error -- `vldrb.s32 q0,r0'
+[^:]*:8: Error: syntax error -- `vldrb.u32 q0,r0'
+[^:]*:9: Error: syntax error -- `vstrb.32 q0,r0'
+[^:]*:7: Error: syntax error -- `vldrb.s32 q0,r1'
+[^:]*:8: Error: syntax error -- `vldrb.u32 q0,r1'
+[^:]*:9: Error: syntax error -- `vstrb.32 q0,r1'
+[^:]*:7: Error: syntax error -- `vldrb.s32 q0,r2'
+[^:]*:8: Error: syntax error -- `vldrb.u32 q0,r2'
+[^:]*:9: Error: syntax error -- `vstrb.32 q0,r2'
+[^:]*:7: Error: syntax error -- `vldrb.s32 q0,r4'
+[^:]*:8: Error: syntax error -- `vldrb.u32 q0,r4'
+[^:]*:9: Error: syntax error -- `vstrb.32 q0,r4'
+[^:]*:7: Error: syntax error -- `vldrb.s32 q0,r7'
+[^:]*:8: Error: syntax error -- `vldrb.u32 q0,r7'
+[^:]*:9: Error: syntax error -- `vstrb.32 q0,r7'
+[^:]*:7: Error: syntax error -- `vldrb.s32 q0,r8'
+[^:]*:8: Error: syntax error -- `vldrb.u32 q0,r8'
+[^:]*:9: Error: syntax error -- `vstrb.32 q0,r8'
+[^:]*:7: Error: syntax error -- `vldrb.s32 q0,r10'
+[^:]*:8: Error: syntax error -- `vldrb.u32 q0,r10'
+[^:]*:9: Error: syntax error -- `vstrb.32 q0,r10'
+[^:]*:7: Error: syntax error -- `vldrb.s32 q0,r12'
+[^:]*:8: Error: syntax error -- `vldrb.u32 q0,r12'
+[^:]*:9: Error: syntax error -- `vstrb.32 q0,r12'
+[^:]*:7: Error: syntax error -- `vldrb.s32 q0,r14'
+[^:]*:8: Error: syntax error -- `vldrb.u32 q0,r14'
+[^:]*:9: Error: syntax error -- `vstrb.32 q0,r14'
+[^:]*:7: Error: syntax error -- `vldrb.s32 q1,r0'
+[^:]*:8: Error: syntax error -- `vldrb.u32 q1,r0'
+[^:]*:9: Error: syntax error -- `vstrb.32 q1,r0'
+[^:]*:7: Error: syntax error -- `vldrb.s32 q1,r1'
+[^:]*:8: Error: syntax error -- `vldrb.u32 q1,r1'
+[^:]*:9: Error: syntax error -- `vstrb.32 q1,r1'
+[^:]*:7: Error: syntax error -- `vldrb.s32 q1,r2'
+[^:]*:8: Error: syntax error -- `vldrb.u32 q1,r2'
+[^:]*:9: Error: syntax error -- `vstrb.32 q1,r2'
+[^:]*:7: Error: syntax error -- `vldrb.s32 q1,r4'
+[^:]*:8: Error: syntax error -- `vldrb.u32 q1,r4'
+[^:]*:9: Error: syntax error -- `vstrb.32 q1,r4'
+[^:]*:7: Error: syntax error -- `vldrb.s32 q1,r7'
+[^:]*:8: Error: syntax error -- `vldrb.u32 q1,r7'
+[^:]*:9: Error: syntax error -- `vstrb.32 q1,r7'
+[^:]*:7: Error: syntax error -- `vldrb.s32 q1,r8'
+[^:]*:8: Error: syntax error -- `vldrb.u32 q1,r8'
+[^:]*:9: Error: syntax error -- `vstrb.32 q1,r8'
+[^:]*:7: Error: syntax error -- `vldrb.s32 q1,r10'
+[^:]*:8: Error: syntax error -- `vldrb.u32 q1,r10'
+[^:]*:9: Error: syntax error -- `vstrb.32 q1,r10'
+[^:]*:7: Error: syntax error -- `vldrb.s32 q1,r12'
+[^:]*:8: Error: syntax error -- `vldrb.u32 q1,r12'
+[^:]*:9: Error: syntax error -- `vstrb.32 q1,r12'
+[^:]*:7: Error: syntax error -- `vldrb.s32 q1,r14'
+[^:]*:8: Error: syntax error -- `vldrb.u32 q1,r14'
+[^:]*:9: Error: syntax error -- `vstrb.32 q1,r14'
+[^:]*:7: Error: syntax error -- `vldrb.s32 q2,r0'
+[^:]*:8: Error: syntax error -- `vldrb.u32 q2,r0'
+[^:]*:9: Error: syntax error -- `vstrb.32 q2,r0'
+[^:]*:7: Error: syntax error -- `vldrb.s32 q2,r1'
+[^:]*:8: Error: syntax error -- `vldrb.u32 q2,r1'
+[^:]*:9: Error: syntax error -- `vstrb.32 q2,r1'
+[^:]*:7: Error: syntax error -- `vldrb.s32 q2,r2'
+[^:]*:8: Error: syntax error -- `vldrb.u32 q2,r2'
+[^:]*:9: Error: syntax error -- `vstrb.32 q2,r2'
+[^:]*:7: Error: syntax error -- `vldrb.s32 q2,r4'
+[^:]*:8: Error: syntax error -- `vldrb.u32 q2,r4'
+[^:]*:9: Error: syntax error -- `vstrb.32 q2,r4'
+[^:]*:7: Error: syntax error -- `vldrb.s32 q2,r7'
+[^:]*:8: Error: syntax error -- `vldrb.u32 q2,r7'
+[^:]*:9: Error: syntax error -- `vstrb.32 q2,r7'
+[^:]*:7: Error: syntax error -- `vldrb.s32 q2,r8'
+[^:]*:8: Error: syntax error -- `vldrb.u32 q2,r8'
+[^:]*:9: Error: syntax error -- `vstrb.32 q2,r8'
+[^:]*:7: Error: syntax error -- `vldrb.s32 q2,r10'
+[^:]*:8: Error: syntax error -- `vldrb.u32 q2,r10'
+[^:]*:9: Error: syntax error -- `vstrb.32 q2,r10'
+[^:]*:7: Error: syntax error -- `vldrb.s32 q2,r12'
+[^:]*:8: Error: syntax error -- `vldrb.u32 q2,r12'
+[^:]*:9: Error: syntax error -- `vstrb.32 q2,r12'
+[^:]*:7: Error: syntax error -- `vldrb.s32 q2,r14'
+[^:]*:8: Error: syntax error -- `vldrb.u32 q2,r14'
+[^:]*:9: Error: syntax error -- `vstrb.32 q2,r14'
+[^:]*:7: Error: syntax error -- `vldrb.s32 q4,r0'
+[^:]*:8: Error: syntax error -- `vldrb.u32 q4,r0'
+[^:]*:9: Error: syntax error -- `vstrb.32 q4,r0'
+[^:]*:7: Error: syntax error -- `vldrb.s32 q4,r1'
+[^:]*:8: Error: syntax error -- `vldrb.u32 q4,r1'
+[^:]*:9: Error: syntax error -- `vstrb.32 q4,r1'
+[^:]*:7: Error: syntax error -- `vldrb.s32 q4,r2'
+[^:]*:8: Error: syntax error -- `vldrb.u32 q4,r2'
+[^:]*:9: Error: syntax error -- `vstrb.32 q4,r2'
+[^:]*:7: Error: syntax error -- `vldrb.s32 q4,r4'
+[^:]*:8: Error: syntax error -- `vldrb.u32 q4,r4'
+[^:]*:9: Error: syntax error -- `vstrb.32 q4,r4'
+[^:]*:7: Error: syntax error -- `vldrb.s32 q4,r7'
+[^:]*:8: Error: syntax error -- `vldrb.u32 q4,r7'
+[^:]*:9: Error: syntax error -- `vstrb.32 q4,r7'
+[^:]*:7: Error: syntax error -- `vldrb.s32 q4,r8'
+[^:]*:8: Error: syntax error -- `vldrb.u32 q4,r8'
+[^:]*:9: Error: syntax error -- `vstrb.32 q4,r8'
+[^:]*:7: Error: syntax error -- `vldrb.s32 q4,r10'
+[^:]*:8: Error: syntax error -- `vldrb.u32 q4,r10'
+[^:]*:9: Error: syntax error -- `vstrb.32 q4,r10'
+[^:]*:7: Error: syntax error -- `vldrb.s32 q4,r12'
+[^:]*:8: Error: syntax error -- `vldrb.u32 q4,r12'
+[^:]*:9: Error: syntax error -- `vstrb.32 q4,r12'
+[^:]*:7: Error: syntax error -- `vldrb.s32 q4,r14'
+[^:]*:8: Error: syntax error -- `vldrb.u32 q4,r14'
+[^:]*:9: Error: syntax error -- `vstrb.32 q4,r14'
+[^:]*:7: Error: syntax error -- `vldrb.s32 q7,r0'
+[^:]*:8: Error: syntax error -- `vldrb.u32 q7,r0'
+[^:]*:9: Error: syntax error -- `vstrb.32 q7,r0'
+[^:]*:7: Error: syntax error -- `vldrb.s32 q7,r1'
+[^:]*:8: Error: syntax error -- `vldrb.u32 q7,r1'
+[^:]*:9: Error: syntax error -- `vstrb.32 q7,r1'
+[^:]*:7: Error: syntax error -- `vldrb.s32 q7,r2'
+[^:]*:8: Error: syntax error -- `vldrb.u32 q7,r2'
+[^:]*:9: Error: syntax error -- `vstrb.32 q7,r2'
+[^:]*:7: Error: syntax error -- `vldrb.s32 q7,r4'
+[^:]*:8: Error: syntax error -- `vldrb.u32 q7,r4'
+[^:]*:9: Error: syntax error -- `vstrb.32 q7,r4'
+[^:]*:7: Error: syntax error -- `vldrb.s32 q7,r7'
+[^:]*:8: Error: syntax error -- `vldrb.u32 q7,r7'
+[^:]*:9: Error: syntax error -- `vstrb.32 q7,r7'
+[^:]*:7: Error: syntax error -- `vldrb.s32 q7,r8'
+[^:]*:8: Error: syntax error -- `vldrb.u32 q7,r8'
+[^:]*:9: Error: syntax error -- `vstrb.32 q7,r8'
+[^:]*:7: Error: syntax error -- `vldrb.s32 q7,r10'
+[^:]*:8: Error: syntax error -- `vldrb.u32 q7,r10'
+[^:]*:9: Error: syntax error -- `vstrb.32 q7,r10'
+[^:]*:7: Error: syntax error -- `vldrb.s32 q7,r12'
+[^:]*:8: Error: syntax error -- `vldrb.u32 q7,r12'
+[^:]*:9: Error: syntax error -- `vstrb.32 q7,r12'
+[^:]*:7: Error: syntax error -- `vldrb.s32 q7,r14'
+[^:]*:8: Error: syntax error -- `vldrb.u32 q7,r14'
+[^:]*:9: Error: syntax error -- `vstrb.32 q7,r14'
+[^:]*:17: Error: syntax error -- `vldrh.s16 q0,r0'
+[^:]*:18: Error: syntax error -- `vldrh.u16 q0,r0'
+[^:]*:19: Error: syntax error -- `vstrh.16 q0,r0'
+[^:]*:17: Error: syntax error -- `vldrh.s16 q0,r1'
+[^:]*:18: Error: syntax error -- `vldrh.u16 q0,r1'
+[^:]*:19: Error: syntax error -- `vstrh.16 q0,r1'
+[^:]*:17: Error: syntax error -- `vldrh.s16 q0,r2'
+[^:]*:18: Error: syntax error -- `vldrh.u16 q0,r2'
+[^:]*:19: Error: syntax error -- `vstrh.16 q0,r2'
+[^:]*:17: Error: syntax error -- `vldrh.s16 q0,r4'
+[^:]*:18: Error: syntax error -- `vldrh.u16 q0,r4'
+[^:]*:19: Error: syntax error -- `vstrh.16 q0,r4'
+[^:]*:17: Error: syntax error -- `vldrh.s16 q0,r7'
+[^:]*:18: Error: syntax error -- `vldrh.u16 q0,r7'
+[^:]*:19: Error: syntax error -- `vstrh.16 q0,r7'
+[^:]*:17: Error: syntax error -- `vldrh.s16 q0,r8'
+[^:]*:18: Error: syntax error -- `vldrh.u16 q0,r8'
+[^:]*:19: Error: syntax error -- `vstrh.16 q0,r8'
+[^:]*:17: Error: syntax error -- `vldrh.s16 q0,r10'
+[^:]*:18: Error: syntax error -- `vldrh.u16 q0,r10'
+[^:]*:19: Error: syntax error -- `vstrh.16 q0,r10'
+[^:]*:17: Error: syntax error -- `vldrh.s16 q0,r12'
+[^:]*:18: Error: syntax error -- `vldrh.u16 q0,r12'
+[^:]*:19: Error: syntax error -- `vstrh.16 q0,r12'
+[^:]*:17: Error: syntax error -- `vldrh.s16 q0,r14'
+[^:]*:18: Error: syntax error -- `vldrh.u16 q0,r14'
+[^:]*:19: Error: syntax error -- `vstrh.16 q0,r14'
+[^:]*:17: Error: syntax error -- `vldrh.s16 q1,r0'
+[^:]*:18: Error: syntax error -- `vldrh.u16 q1,r0'
+[^:]*:19: Error: syntax error -- `vstrh.16 q1,r0'
+[^:]*:17: Error: syntax error -- `vldrh.s16 q1,r1'
+[^:]*:18: Error: syntax error -- `vldrh.u16 q1,r1'
+[^:]*:19: Error: syntax error -- `vstrh.16 q1,r1'
+[^:]*:17: Error: syntax error -- `vldrh.s16 q1,r2'
+[^:]*:18: Error: syntax error -- `vldrh.u16 q1,r2'
+[^:]*:19: Error: syntax error -- `vstrh.16 q1,r2'
+[^:]*:17: Error: syntax error -- `vldrh.s16 q1,r4'
+[^:]*:18: Error: syntax error -- `vldrh.u16 q1,r4'
+[^:]*:19: Error: syntax error -- `vstrh.16 q1,r4'
+[^:]*:17: Error: syntax error -- `vldrh.s16 q1,r7'
+[^:]*:18: Error: syntax error -- `vldrh.u16 q1,r7'
+[^:]*:19: Error: syntax error -- `vstrh.16 q1,r7'
+[^:]*:17: Error: syntax error -- `vldrh.s16 q1,r8'
+[^:]*:18: Error: syntax error -- `vldrh.u16 q1,r8'
+[^:]*:19: Error: syntax error -- `vstrh.16 q1,r8'
+[^:]*:17: Error: syntax error -- `vldrh.s16 q1,r10'
+[^:]*:18: Error: syntax error -- `vldrh.u16 q1,r10'
+[^:]*:19: Error: syntax error -- `vstrh.16 q1,r10'
+[^:]*:17: Error: syntax error -- `vldrh.s16 q1,r12'
+[^:]*:18: Error: syntax error -- `vldrh.u16 q1,r12'
+[^:]*:19: Error: syntax error -- `vstrh.16 q1,r12'
+[^:]*:17: Error: syntax error -- `vldrh.s16 q1,r14'
+[^:]*:18: Error: syntax error -- `vldrh.u16 q1,r14'
+[^:]*:19: Error: syntax error -- `vstrh.16 q1,r14'
+[^:]*:17: Error: syntax error -- `vldrh.s16 q2,r0'
+[^:]*:18: Error: syntax error -- `vldrh.u16 q2,r0'
+[^:]*:19: Error: syntax error -- `vstrh.16 q2,r0'
+[^:]*:17: Error: syntax error -- `vldrh.s16 q2,r1'
+[^:]*:18: Error: syntax error -- `vldrh.u16 q2,r1'
+[^:]*:19: Error: syntax error -- `vstrh.16 q2,r1'
+[^:]*:17: Error: syntax error -- `vldrh.s16 q2,r2'
+[^:]*:18: Error: syntax error -- `vldrh.u16 q2,r2'
+[^:]*:19: Error: syntax error -- `vstrh.16 q2,r2'
+[^:]*:17: Error: syntax error -- `vldrh.s16 q2,r4'
+[^:]*:18: Error: syntax error -- `vldrh.u16 q2,r4'
+[^:]*:19: Error: syntax error -- `vstrh.16 q2,r4'
+[^:]*:17: Error: syntax error -- `vldrh.s16 q2,r7'
+[^:]*:18: Error: syntax error -- `vldrh.u16 q2,r7'
+[^:]*:19: Error: syntax error -- `vstrh.16 q2,r7'
+[^:]*:17: Error: syntax error -- `vldrh.s16 q2,r8'
+[^:]*:18: Error: syntax error -- `vldrh.u16 q2,r8'
+[^:]*:19: Error: syntax error -- `vstrh.16 q2,r8'
+[^:]*:17: Error: syntax error -- `vldrh.s16 q2,r10'
+[^:]*:18: Error: syntax error -- `vldrh.u16 q2,r10'
+[^:]*:19: Error: syntax error -- `vstrh.16 q2,r10'
+[^:]*:17: Error: syntax error -- `vldrh.s16 q2,r12'
+[^:]*:18: Error: syntax error -- `vldrh.u16 q2,r12'
+[^:]*:19: Error: syntax error -- `vstrh.16 q2,r12'
+[^:]*:17: Error: syntax error -- `vldrh.s16 q2,r14'
+[^:]*:18: Error: syntax error -- `vldrh.u16 q2,r14'
+[^:]*:19: Error: syntax error -- `vstrh.16 q2,r14'
+[^:]*:17: Error: syntax error -- `vldrh.s16 q4,r0'
+[^:]*:18: Error: syntax error -- `vldrh.u16 q4,r0'
+[^:]*:19: Error: syntax error -- `vstrh.16 q4,r0'
+[^:]*:17: Error: syntax error -- `vldrh.s16 q4,r1'
+[^:]*:18: Error: syntax error -- `vldrh.u16 q4,r1'
+[^:]*:19: Error: syntax error -- `vstrh.16 q4,r1'
+[^:]*:17: Error: syntax error -- `vldrh.s16 q4,r2'
+[^:]*:18: Error: syntax error -- `vldrh.u16 q4,r2'
+[^:]*:19: Error: syntax error -- `vstrh.16 q4,r2'
+[^:]*:17: Error: syntax error -- `vldrh.s16 q4,r4'
+[^:]*:18: Error: syntax error -- `vldrh.u16 q4,r4'
+[^:]*:19: Error: syntax error -- `vstrh.16 q4,r4'
+[^:]*:17: Error: syntax error -- `vldrh.s16 q4,r7'
+[^:]*:18: Error: syntax error -- `vldrh.u16 q4,r7'
+[^:]*:19: Error: syntax error -- `vstrh.16 q4,r7'
+[^:]*:17: Error: syntax error -- `vldrh.s16 q4,r8'
+[^:]*:18: Error: syntax error -- `vldrh.u16 q4,r8'
+[^:]*:19: Error: syntax error -- `vstrh.16 q4,r8'
+[^:]*:17: Error: syntax error -- `vldrh.s16 q4,r10'
+[^:]*:18: Error: syntax error -- `vldrh.u16 q4,r10'
+[^:]*:19: Error: syntax error -- `vstrh.16 q4,r10'
+[^:]*:17: Error: syntax error -- `vldrh.s16 q4,r12'
+[^:]*:18: Error: syntax error -- `vldrh.u16 q4,r12'
+[^:]*:19: Error: syntax error -- `vstrh.16 q4,r12'
+[^:]*:17: Error: syntax error -- `vldrh.s16 q4,r14'
+[^:]*:18: Error: syntax error -- `vldrh.u16 q4,r14'
+[^:]*:19: Error: syntax error -- `vstrh.16 q4,r14'
+[^:]*:17: Error: syntax error -- `vldrh.s16 q7,r0'
+[^:]*:18: Error: syntax error -- `vldrh.u16 q7,r0'
+[^:]*:19: Error: syntax error -- `vstrh.16 q7,r0'
+[^:]*:17: Error: syntax error -- `vldrh.s16 q7,r1'
+[^:]*:18: Error: syntax error -- `vldrh.u16 q7,r1'
+[^:]*:19: Error: syntax error -- `vstrh.16 q7,r1'
+[^:]*:17: Error: syntax error -- `vldrh.s16 q7,r2'
+[^:]*:18: Error: syntax error -- `vldrh.u16 q7,r2'
+[^:]*:19: Error: syntax error -- `vstrh.16 q7,r2'
+[^:]*:17: Error: syntax error -- `vldrh.s16 q7,r4'
+[^:]*:18: Error: syntax error -- `vldrh.u16 q7,r4'
+[^:]*:19: Error: syntax error -- `vstrh.16 q7,r4'
+[^:]*:17: Error: syntax error -- `vldrh.s16 q7,r7'
+[^:]*:18: Error: syntax error -- `vldrh.u16 q7,r7'
+[^:]*:19: Error: syntax error -- `vstrh.16 q7,r7'
+[^:]*:17: Error: syntax error -- `vldrh.s16 q7,r8'
+[^:]*:18: Error: syntax error -- `vldrh.u16 q7,r8'
+[^:]*:19: Error: syntax error -- `vstrh.16 q7,r8'
+[^:]*:17: Error: syntax error -- `vldrh.s16 q7,r10'
+[^:]*:18: Error: syntax error -- `vldrh.u16 q7,r10'
+[^:]*:19: Error: syntax error -- `vstrh.16 q7,r10'
+[^:]*:17: Error: syntax error -- `vldrh.s16 q7,r12'
+[^:]*:18: Error: syntax error -- `vldrh.u16 q7,r12'
+[^:]*:19: Error: syntax error -- `vstrh.16 q7,r12'
+[^:]*:17: Error: syntax error -- `vldrh.s16 q7,r14'
+[^:]*:18: Error: syntax error -- `vldrh.u16 q7,r14'
+[^:]*:19: Error: syntax error -- `vstrh.16 q7,r14'
+[^:]*:17: Error: syntax error -- `vldrh.s32 q0,r0'
+[^:]*:18: Error: syntax error -- `vldrh.u32 q0,r0'
+[^:]*:19: Error: syntax error -- `vstrh.32 q0,r0'
+[^:]*:17: Error: syntax error -- `vldrh.s32 q0,r1'
+[^:]*:18: Error: syntax error -- `vldrh.u32 q0,r1'
+[^:]*:19: Error: syntax error -- `vstrh.32 q0,r1'
+[^:]*:17: Error: syntax error -- `vldrh.s32 q0,r2'
+[^:]*:18: Error: syntax error -- `vldrh.u32 q0,r2'
+[^:]*:19: Error: syntax error -- `vstrh.32 q0,r2'
+[^:]*:17: Error: syntax error -- `vldrh.s32 q0,r4'
+[^:]*:18: Error: syntax error -- `vldrh.u32 q0,r4'
+[^:]*:19: Error: syntax error -- `vstrh.32 q0,r4'
+[^:]*:17: Error: syntax error -- `vldrh.s32 q0,r7'
+[^:]*:18: Error: syntax error -- `vldrh.u32 q0,r7'
+[^:]*:19: Error: syntax error -- `vstrh.32 q0,r7'
+[^:]*:17: Error: syntax error -- `vldrh.s32 q0,r8'
+[^:]*:18: Error: syntax error -- `vldrh.u32 q0,r8'
+[^:]*:19: Error: syntax error -- `vstrh.32 q0,r8'
+[^:]*:17: Error: syntax error -- `vldrh.s32 q0,r10'
+[^:]*:18: Error: syntax error -- `vldrh.u32 q0,r10'
+[^:]*:19: Error: syntax error -- `vstrh.32 q0,r10'
+[^:]*:17: Error: syntax error -- `vldrh.s32 q0,r12'
+[^:]*:18: Error: syntax error -- `vldrh.u32 q0,r12'
+[^:]*:19: Error: syntax error -- `vstrh.32 q0,r12'
+[^:]*:17: Error: syntax error -- `vldrh.s32 q0,r14'
+[^:]*:18: Error: syntax error -- `vldrh.u32 q0,r14'
+[^:]*:19: Error: syntax error -- `vstrh.32 q0,r14'
+[^:]*:17: Error: syntax error -- `vldrh.s32 q1,r0'
+[^:]*:18: Error: syntax error -- `vldrh.u32 q1,r0'
+[^:]*:19: Error: syntax error -- `vstrh.32 q1,r0'
+[^:]*:17: Error: syntax error -- `vldrh.s32 q1,r1'
+[^:]*:18: Error: syntax error -- `vldrh.u32 q1,r1'
+[^:]*:19: Error: syntax error -- `vstrh.32 q1,r1'
+[^:]*:17: Error: syntax error -- `vldrh.s32 q1,r2'
+[^:]*:18: Error: syntax error -- `vldrh.u32 q1,r2'
+[^:]*:19: Error: syntax error -- `vstrh.32 q1,r2'
+[^:]*:17: Error: syntax error -- `vldrh.s32 q1,r4'
+[^:]*:18: Error: syntax error -- `vldrh.u32 q1,r4'
+[^:]*:19: Error: syntax error -- `vstrh.32 q1,r4'
+[^:]*:17: Error: syntax error -- `vldrh.s32 q1,r7'
+[^:]*:18: Error: syntax error -- `vldrh.u32 q1,r7'
+[^:]*:19: Error: syntax error -- `vstrh.32 q1,r7'
+[^:]*:17: Error: syntax error -- `vldrh.s32 q1,r8'
+[^:]*:18: Error: syntax error -- `vldrh.u32 q1,r8'
+[^:]*:19: Error: syntax error -- `vstrh.32 q1,r8'
+[^:]*:17: Error: syntax error -- `vldrh.s32 q1,r10'
+[^:]*:18: Error: syntax error -- `vldrh.u32 q1,r10'
+[^:]*:19: Error: syntax error -- `vstrh.32 q1,r10'
+[^:]*:17: Error: syntax error -- `vldrh.s32 q1,r12'
+[^:]*:18: Error: syntax error -- `vldrh.u32 q1,r12'
+[^:]*:19: Error: syntax error -- `vstrh.32 q1,r12'
+[^:]*:17: Error: syntax error -- `vldrh.s32 q1,r14'
+[^:]*:18: Error: syntax error -- `vldrh.u32 q1,r14'
+[^:]*:19: Error: syntax error -- `vstrh.32 q1,r14'
+[^:]*:17: Error: syntax error -- `vldrh.s32 q2,r0'
+[^:]*:18: Error: syntax error -- `vldrh.u32 q2,r0'
+[^:]*:19: Error: syntax error -- `vstrh.32 q2,r0'
+[^:]*:17: Error: syntax error -- `vldrh.s32 q2,r1'
+[^:]*:18: Error: syntax error -- `vldrh.u32 q2,r1'
+[^:]*:19: Error: syntax error -- `vstrh.32 q2,r1'
+[^:]*:17: Error: syntax error -- `vldrh.s32 q2,r2'
+[^:]*:18: Error: syntax error -- `vldrh.u32 q2,r2'
+[^:]*:19: Error: syntax error -- `vstrh.32 q2,r2'
+[^:]*:17: Error: syntax error -- `vldrh.s32 q2,r4'
+[^:]*:18: Error: syntax error -- `vldrh.u32 q2,r4'
+[^:]*:19: Error: syntax error -- `vstrh.32 q2,r4'
+[^:]*:17: Error: syntax error -- `vldrh.s32 q2,r7'
+[^:]*:18: Error: syntax error -- `vldrh.u32 q2,r7'
+[^:]*:19: Error: syntax error -- `vstrh.32 q2,r7'
+[^:]*:17: Error: syntax error -- `vldrh.s32 q2,r8'
+[^:]*:18: Error: syntax error -- `vldrh.u32 q2,r8'
+[^:]*:19: Error: syntax error -- `vstrh.32 q2,r8'
+[^:]*:17: Error: syntax error -- `vldrh.s32 q2,r10'
+[^:]*:18: Error: syntax error -- `vldrh.u32 q2,r10'
+[^:]*:19: Error: syntax error -- `vstrh.32 q2,r10'
+[^:]*:17: Error: syntax error -- `vldrh.s32 q2,r12'
+[^:]*:18: Error: syntax error -- `vldrh.u32 q2,r12'
+[^:]*:19: Error: syntax error -- `vstrh.32 q2,r12'
+[^:]*:17: Error: syntax error -- `vldrh.s32 q2,r14'
+[^:]*:18: Error: syntax error -- `vldrh.u32 q2,r14'
+[^:]*:19: Error: syntax error -- `vstrh.32 q2,r14'
+[^:]*:17: Error: syntax error -- `vldrh.s32 q4,r0'
+[^:]*:18: Error: syntax error -- `vldrh.u32 q4,r0'
+[^:]*:19: Error: syntax error -- `vstrh.32 q4,r0'
+[^:]*:17: Error: syntax error -- `vldrh.s32 q4,r1'
+[^:]*:18: Error: syntax error -- `vldrh.u32 q4,r1'
+[^:]*:19: Error: syntax error -- `vstrh.32 q4,r1'
+[^:]*:17: Error: syntax error -- `vldrh.s32 q4,r2'
+[^:]*:18: Error: syntax error -- `vldrh.u32 q4,r2'
+[^:]*:19: Error: syntax error -- `vstrh.32 q4,r2'
+[^:]*:17: Error: syntax error -- `vldrh.s32 q4,r4'
+[^:]*:18: Error: syntax error -- `vldrh.u32 q4,r4'
+[^:]*:19: Error: syntax error -- `vstrh.32 q4,r4'
+[^:]*:17: Error: syntax error -- `vldrh.s32 q4,r7'
+[^:]*:18: Error: syntax error -- `vldrh.u32 q4,r7'
+[^:]*:19: Error: syntax error -- `vstrh.32 q4,r7'
+[^:]*:17: Error: syntax error -- `vldrh.s32 q4,r8'
+[^:]*:18: Error: syntax error -- `vldrh.u32 q4,r8'
+[^:]*:19: Error: syntax error -- `vstrh.32 q4,r8'
+[^:]*:17: Error: syntax error -- `vldrh.s32 q4,r10'
+[^:]*:18: Error: syntax error -- `vldrh.u32 q4,r10'
+[^:]*:19: Error: syntax error -- `vstrh.32 q4,r10'
+[^:]*:17: Error: syntax error -- `vldrh.s32 q4,r12'
+[^:]*:18: Error: syntax error -- `vldrh.u32 q4,r12'
+[^:]*:19: Error: syntax error -- `vstrh.32 q4,r12'
+[^:]*:17: Error: syntax error -- `vldrh.s32 q4,r14'
+[^:]*:18: Error: syntax error -- `vldrh.u32 q4,r14'
+[^:]*:19: Error: syntax error -- `vstrh.32 q4,r14'
+[^:]*:17: Error: syntax error -- `vldrh.s32 q7,r0'
+[^:]*:18: Error: syntax error -- `vldrh.u32 q7,r0'
+[^:]*:19: Error: syntax error -- `vstrh.32 q7,r0'
+[^:]*:17: Error: syntax error -- `vldrh.s32 q7,r1'
+[^:]*:18: Error: syntax error -- `vldrh.u32 q7,r1'
+[^:]*:19: Error: syntax error -- `vstrh.32 q7,r1'
+[^:]*:17: Error: syntax error -- `vldrh.s32 q7,r2'
+[^:]*:18: Error: syntax error -- `vldrh.u32 q7,r2'
+[^:]*:19: Error: syntax error -- `vstrh.32 q7,r2'
+[^:]*:17: Error: syntax error -- `vldrh.s32 q7,r4'
+[^:]*:18: Error: syntax error -- `vldrh.u32 q7,r4'
+[^:]*:19: Error: syntax error -- `vstrh.32 q7,r4'
+[^:]*:17: Error: syntax error -- `vldrh.s32 q7,r7'
+[^:]*:18: Error: syntax error -- `vldrh.u32 q7,r7'
+[^:]*:19: Error: syntax error -- `vstrh.32 q7,r7'
+[^:]*:17: Error: syntax error -- `vldrh.s32 q7,r8'
+[^:]*:18: Error: syntax error -- `vldrh.u32 q7,r8'
+[^:]*:19: Error: syntax error -- `vstrh.32 q7,r8'
+[^:]*:17: Error: syntax error -- `vldrh.s32 q7,r10'
+[^:]*:18: Error: syntax error -- `vldrh.u32 q7,r10'
+[^:]*:19: Error: syntax error -- `vstrh.32 q7,r10'
+[^:]*:17: Error: syntax error -- `vldrh.s32 q7,r12'
+[^:]*:18: Error: syntax error -- `vldrh.u32 q7,r12'
+[^:]*:19: Error: syntax error -- `vstrh.32 q7,r12'
+[^:]*:17: Error: syntax error -- `vldrh.s32 q7,r14'
+[^:]*:18: Error: syntax error -- `vldrh.u32 q7,r14'
+[^:]*:19: Error: syntax error -- `vstrh.32 q7,r14'
+[^:]*:26: Error: syntax error -- `vldrw.s32 q0,r0'
+[^:]*:27: Error: syntax error -- `vldrw.u32 q0,r0'
+[^:]*:28: Error: syntax error -- `vstrw.32 q0,r0'
+[^:]*:26: Error: syntax error -- `vldrw.s32 q0,r1'
+[^:]*:27: Error: syntax error -- `vldrw.u32 q0,r1'
+[^:]*:28: Error: syntax error -- `vstrw.32 q0,r1'
+[^:]*:26: Error: syntax error -- `vldrw.s32 q0,r2'
+[^:]*:27: Error: syntax error -- `vldrw.u32 q0,r2'
+[^:]*:28: Error: syntax error -- `vstrw.32 q0,r2'
+[^:]*:26: Error: syntax error -- `vldrw.s32 q0,r4'
+[^:]*:27: Error: syntax error -- `vldrw.u32 q0,r4'
+[^:]*:28: Error: syntax error -- `vstrw.32 q0,r4'
+[^:]*:26: Error: syntax error -- `vldrw.s32 q0,r7'
+[^:]*:27: Error: syntax error -- `vldrw.u32 q0,r7'
+[^:]*:28: Error: syntax error -- `vstrw.32 q0,r7'
+[^:]*:26: Error: syntax error -- `vldrw.s32 q0,r8'
+[^:]*:27: Error: syntax error -- `vldrw.u32 q0,r8'
+[^:]*:28: Error: syntax error -- `vstrw.32 q0,r8'
+[^:]*:26: Error: syntax error -- `vldrw.s32 q0,r10'
+[^:]*:27: Error: syntax error -- `vldrw.u32 q0,r10'
+[^:]*:28: Error: syntax error -- `vstrw.32 q0,r10'
+[^:]*:26: Error: syntax error -- `vldrw.s32 q0,r12'
+[^:]*:27: Error: syntax error -- `vldrw.u32 q0,r12'
+[^:]*:28: Error: syntax error -- `vstrw.32 q0,r12'
+[^:]*:26: Error: syntax error -- `vldrw.s32 q0,r14'
+[^:]*:27: Error: syntax error -- `vldrw.u32 q0,r14'
+[^:]*:28: Error: syntax error -- `vstrw.32 q0,r14'
+[^:]*:26: Error: syntax error -- `vldrw.s32 q1,r0'
+[^:]*:27: Error: syntax error -- `vldrw.u32 q1,r0'
+[^:]*:28: Error: syntax error -- `vstrw.32 q1,r0'
+[^:]*:26: Error: syntax error -- `vldrw.s32 q1,r1'
+[^:]*:27: Error: syntax error -- `vldrw.u32 q1,r1'
+[^:]*:28: Error: syntax error -- `vstrw.32 q1,r1'
+[^:]*:26: Error: syntax error -- `vldrw.s32 q1,r2'
+[^:]*:27: Error: syntax error -- `vldrw.u32 q1,r2'
+[^:]*:28: Error: syntax error -- `vstrw.32 q1,r2'
+[^:]*:26: Error: syntax error -- `vldrw.s32 q1,r4'
+[^:]*:27: Error: syntax error -- `vldrw.u32 q1,r4'
+[^:]*:28: Error: syntax error -- `vstrw.32 q1,r4'
+[^:]*:26: Error: syntax error -- `vldrw.s32 q1,r7'
+[^:]*:27: Error: syntax error -- `vldrw.u32 q1,r7'
+[^:]*:28: Error: syntax error -- `vstrw.32 q1,r7'
+[^:]*:26: Error: syntax error -- `vldrw.s32 q1,r8'
+[^:]*:27: Error: syntax error -- `vldrw.u32 q1,r8'
+[^:]*:28: Error: syntax error -- `vstrw.32 q1,r8'
+[^:]*:26: Error: syntax error -- `vldrw.s32 q1,r10'
+[^:]*:27: Error: syntax error -- `vldrw.u32 q1,r10'
+[^:]*:28: Error: syntax error -- `vstrw.32 q1,r10'
+[^:]*:26: Error: syntax error -- `vldrw.s32 q1,r12'
+[^:]*:27: Error: syntax error -- `vldrw.u32 q1,r12'
+[^:]*:28: Error: syntax error -- `vstrw.32 q1,r12'
+[^:]*:26: Error: syntax error -- `vldrw.s32 q1,r14'
+[^:]*:27: Error: syntax error -- `vldrw.u32 q1,r14'
+[^:]*:28: Error: syntax error -- `vstrw.32 q1,r14'
+[^:]*:26: Error: syntax error -- `vldrw.s32 q2,r0'
+[^:]*:27: Error: syntax error -- `vldrw.u32 q2,r0'
+[^:]*:28: Error: syntax error -- `vstrw.32 q2,r0'
+[^:]*:26: Error: syntax error -- `vldrw.s32 q2,r1'
+[^:]*:27: Error: syntax error -- `vldrw.u32 q2,r1'
+[^:]*:28: Error: syntax error -- `vstrw.32 q2,r1'
+[^:]*:26: Error: syntax error -- `vldrw.s32 q2,r2'
+[^:]*:27: Error: syntax error -- `vldrw.u32 q2,r2'
+[^:]*:28: Error: syntax error -- `vstrw.32 q2,r2'
+[^:]*:26: Error: syntax error -- `vldrw.s32 q2,r4'
+[^:]*:27: Error: syntax error -- `vldrw.u32 q2,r4'
+[^:]*:28: Error: syntax error -- `vstrw.32 q2,r4'
+[^:]*:26: Error: syntax error -- `vldrw.s32 q2,r7'
+[^:]*:27: Error: syntax error -- `vldrw.u32 q2,r7'
+[^:]*:28: Error: syntax error -- `vstrw.32 q2,r7'
+[^:]*:26: Error: syntax error -- `vldrw.s32 q2,r8'
+[^:]*:27: Error: syntax error -- `vldrw.u32 q2,r8'
+[^:]*:28: Error: syntax error -- `vstrw.32 q2,r8'
+[^:]*:26: Error: syntax error -- `vldrw.s32 q2,r10'
+[^:]*:27: Error: syntax error -- `vldrw.u32 q2,r10'
+[^:]*:28: Error: syntax error -- `vstrw.32 q2,r10'
+[^:]*:26: Error: syntax error -- `vldrw.s32 q2,r12'
+[^:]*:27: Error: syntax error -- `vldrw.u32 q2,r12'
+[^:]*:28: Error: syntax error -- `vstrw.32 q2,r12'
+[^:]*:26: Error: syntax error -- `vldrw.s32 q2,r14'
+[^:]*:27: Error: syntax error -- `vldrw.u32 q2,r14'
+[^:]*:28: Error: syntax error -- `vstrw.32 q2,r14'
+[^:]*:26: Error: syntax error -- `vldrw.s32 q4,r0'
+[^:]*:27: Error: syntax error -- `vldrw.u32 q4,r0'
+[^:]*:28: Error: syntax error -- `vstrw.32 q4,r0'
+[^:]*:26: Error: syntax error -- `vldrw.s32 q4,r1'
+[^:]*:27: Error: syntax error -- `vldrw.u32 q4,r1'
+[^:]*:28: Error: syntax error -- `vstrw.32 q4,r1'
+[^:]*:26: Error: syntax error -- `vldrw.s32 q4,r2'
+[^:]*:27: Error: syntax error -- `vldrw.u32 q4,r2'
+[^:]*:28: Error: syntax error -- `vstrw.32 q4,r2'
+[^:]*:26: Error: syntax error -- `vldrw.s32 q4,r4'
+[^:]*:27: Error: syntax error -- `vldrw.u32 q4,r4'
+[^:]*:28: Error: syntax error -- `vstrw.32 q4,r4'
+[^:]*:26: Error: syntax error -- `vldrw.s32 q4,r7'
+[^:]*:27: Error: syntax error -- `vldrw.u32 q4,r7'
+[^:]*:28: Error: syntax error -- `vstrw.32 q4,r7'
+[^:]*:26: Error: syntax error -- `vldrw.s32 q4,r8'
+[^:]*:27: Error: syntax error -- `vldrw.u32 q4,r8'
+[^:]*:28: Error: syntax error -- `vstrw.32 q4,r8'
+[^:]*:26: Error: syntax error -- `vldrw.s32 q4,r10'
+[^:]*:27: Error: syntax error -- `vldrw.u32 q4,r10'
+[^:]*:28: Error: syntax error -- `vstrw.32 q4,r10'
+[^:]*:26: Error: syntax error -- `vldrw.s32 q4,r12'
+[^:]*:27: Error: syntax error -- `vldrw.u32 q4,r12'
+[^:]*:28: Error: syntax error -- `vstrw.32 q4,r12'
+[^:]*:26: Error: syntax error -- `vldrw.s32 q4,r14'
+[^:]*:27: Error: syntax error -- `vldrw.u32 q4,r14'
+[^:]*:28: Error: syntax error -- `vstrw.32 q4,r14'
+[^:]*:26: Error: syntax error -- `vldrw.s32 q7,r0'
+[^:]*:27: Error: syntax error -- `vldrw.u32 q7,r0'
+[^:]*:28: Error: syntax error -- `vstrw.32 q7,r0'
+[^:]*:26: Error: syntax error -- `vldrw.s32 q7,r1'
+[^:]*:27: Error: syntax error -- `vldrw.u32 q7,r1'
+[^:]*:28: Error: syntax error -- `vstrw.32 q7,r1'
+[^:]*:26: Error: syntax error -- `vldrw.s32 q7,r2'
+[^:]*:27: Error: syntax error -- `vldrw.u32 q7,r2'
+[^:]*:28: Error: syntax error -- `vstrw.32 q7,r2'
+[^:]*:26: Error: syntax error -- `vldrw.s32 q7,r4'
+[^:]*:27: Error: syntax error -- `vldrw.u32 q7,r4'
+[^:]*:28: Error: syntax error -- `vstrw.32 q7,r4'
+[^:]*:26: Error: syntax error -- `vldrw.s32 q7,r7'
+[^:]*:27: Error: syntax error -- `vldrw.u32 q7,r7'
+[^:]*:28: Error: syntax error -- `vstrw.32 q7,r7'
+[^:]*:26: Error: syntax error -- `vldrw.s32 q7,r8'
+[^:]*:27: Error: syntax error -- `vldrw.u32 q7,r8'
+[^:]*:28: Error: syntax error -- `vstrw.32 q7,r8'
+[^:]*:26: Error: syntax error -- `vldrw.s32 q7,r10'
+[^:]*:27: Error: syntax error -- `vldrw.u32 q7,r10'
+[^:]*:28: Error: syntax error -- `vstrw.32 q7,r10'
+[^:]*:26: Error: syntax error -- `vldrw.s32 q7,r12'
+[^:]*:27: Error: syntax error -- `vldrw.u32 q7,r12'
+[^:]*:28: Error: syntax error -- `vstrw.32 q7,r12'
+[^:]*:26: Error: syntax error -- `vldrw.s32 q7,r14'
+[^:]*:27: Error: syntax error -- `vldrw.u32 q7,r14'
+[^:]*:28: Error: syntax error -- `vstrw.32 q7,r14'
diff --git a/gas/testsuite/gas/arm/mve-vqdmlah-bad.l b/gas/testsuite/gas/arm/mve-vqdmlah-bad.l
index d5631ef7699..acf555f7ebb 100644
--- a/gas/testsuite/gas/arm/mve-vqdmlah-bad.l
+++ b/gas/testsuite/gas/arm/mve-vqdmlah-bad.l
@@ -1,7 +1,7 @@
[^:]*: Assembler messages:
-[^:]*:4: Error: bad type in SIMD instruction -- `vqdmlah.u8 q1,q2,r0'
-[^:]*:4: Error: bad type in SIMD instruction -- `vqrdmlah.u8 q3,q4,r5'
-[^:]*:4: Error: bad type in SIMD instruction -- `vqdmlah.u16 q1,q2,r0'
-[^:]*:4: Error: bad type in SIMD instruction -- `vqrdmlah.u16 q3,q4,r5'
-[^:]*:4: Error: bad type in SIMD instruction -- `vqdmlah.u32 q1,q2,r0'
-[^:]*:4: Error: bad type in SIMD instruction -- `vqrdmlah.u32 q3,q4,r5'
+[^:]*:2: Error: bad type in SIMD instruction -- `vqdmlah.u8 q1,q2,r0'
+[^:]*:3: Error: bad type in SIMD instruction -- `vqrdmlah.u8 q3,q4,r5'
+[^:]*:2: Error: bad type in SIMD instruction -- `vqdmlah.u16 q1,q2,r0'
+[^:]*:3: Error: bad type in SIMD instruction -- `vqrdmlah.u16 q3,q4,r5'
+[^:]*:2: Error: bad type in SIMD instruction -- `vqdmlah.u32 q1,q2,r0'
+[^:]*:3: Error: bad type in SIMD instruction -- `vqrdmlah.u32 q3,q4,r5'
diff --git a/gas/testsuite/gas/arm/mve-vqdmlash-bad.l b/gas/testsuite/gas/arm/mve-vqdmlash-bad.l
index b4e6bfba935..6a14db0e0a8 100644
--- a/gas/testsuite/gas/arm/mve-vqdmlash-bad.l
+++ b/gas/testsuite/gas/arm/mve-vqdmlash-bad.l
@@ -1,7 +1,7 @@
[^:]*: Assembler messages:
-[^:]*:4: Error: bad type in SIMD instruction -- `vqdmlash.u8 q0,q2,r0'
-[^:]*:4: Error: bad type in SIMD instruction -- `vqrdmlash.u8 q1,q3,r1'
-[^:]*:4: Error: bad type in SIMD instruction -- `vqdmlash.u16 q0,q2,r0'
-[^:]*:4: Error: bad type in SIMD instruction -- `vqrdmlash.u16 q1,q3,r1'
-[^:]*:4: Error: bad type in SIMD instruction -- `vqdmlash.u32 q0,q2,r0'
-[^:]*:4: Error: bad type in SIMD instruction -- `vqrdmlash.u32 q1,q3,r1'
+[^:]*:2: Error: bad type in SIMD instruction -- `vqdmlash.u8 q0,q2,r0'
+[^:]*:3: Error: bad type in SIMD instruction -- `vqrdmlash.u8 q1,q3,r1'
+[^:]*:2: Error: bad type in SIMD instruction -- `vqdmlash.u16 q0,q2,r0'
+[^:]*:3: Error: bad type in SIMD instruction -- `vqrdmlash.u16 q1,q3,r1'
+[^:]*:2: Error: bad type in SIMD instruction -- `vqdmlash.u32 q0,q2,r0'
+[^:]*:3: Error: bad type in SIMD instruction -- `vqrdmlash.u32 q1,q3,r1'
diff --git a/gas/testsuite/gas/arm/mve-vrint-bad.l b/gas/testsuite/gas/arm/mve-vrint-bad.l
index 39fca355f6b..e1715abdee4 100644
--- a/gas/testsuite/gas/arm/mve-vrint-bad.l
+++ b/gas/testsuite/gas/arm/mve-vrint-bad.l
@@ -1,80 +1,80 @@
[^:]*: Assembler messages:
-[^:]*:13: Error: bad type in SIMD instruction -- `vrintn.i16 q0,q1'
-[^:]*:13: Error: bad type in SIMD instruction -- `vrintn.f64 q0,q1'
-[^:]*:13: Error: bad type in SIMD instruction -- `vrintx.i16 q0,q1'
-[^:]*:13: Error: bad type in SIMD instruction -- `vrintx.f64 q0,q1'
-[^:]*:13: Error: bad type in SIMD instruction -- `vrinta.i16 q0,q1'
-[^:]*:13: Error: bad type in SIMD instruction -- `vrinta.f64 q0,q1'
-[^:]*:13: Error: bad type in SIMD instruction -- `vrintz.i16 q0,q1'
-[^:]*:13: Error: bad type in SIMD instruction -- `vrintz.f64 q0,q1'
-[^:]*:13: Error: bad type in SIMD instruction -- `vrintm.i16 q0,q1'
-[^:]*:13: Error: bad type in SIMD instruction -- `vrintm.f64 q0,q1'
-[^:]*:13: Error: bad type in SIMD instruction -- `vrintp.i16 q0,q1'
-[^:]*:13: Error: bad type in SIMD instruction -- `vrintp.f64 q0,q1'
+[^:]*:11: Error: bad type in SIMD instruction -- `vrintn.i16 q0,q1'
+[^:]*:12: Error: bad type in SIMD instruction -- `vrintn.f64 q0,q1'
+[^:]*:11: Error: bad type in SIMD instruction -- `vrintx.i16 q0,q1'
+[^:]*:12: Error: bad type in SIMD instruction -- `vrintx.f64 q0,q1'
+[^:]*:11: Error: bad type in SIMD instruction -- `vrinta.i16 q0,q1'
+[^:]*:12: Error: bad type in SIMD instruction -- `vrinta.f64 q0,q1'
+[^:]*:11: Error: bad type in SIMD instruction -- `vrintz.i16 q0,q1'
+[^:]*:12: Error: bad type in SIMD instruction -- `vrintz.f64 q0,q1'
+[^:]*:11: Error: bad type in SIMD instruction -- `vrintm.i16 q0,q1'
+[^:]*:12: Error: bad type in SIMD instruction -- `vrintm.f64 q0,q1'
+[^:]*:11: Error: bad type in SIMD instruction -- `vrintp.i16 q0,q1'
+[^:]*:12: Error: bad type in SIMD instruction -- `vrintp.f64 q0,q1'
[^:]*:14: Error: VFP single, double or Neon quad precision register expected -- `vrintr.f16 q0,q1'
-[^:]*:25: Warning: instruction is UNPREDICTABLE in an IT block
-[^:]*:25: Warning: instruction is UNPREDICTABLE in an IT block
-[^:]*:25: Warning: instruction is UNPREDICTABLE in an IT block
-[^:]*:25: Warning: instruction is UNPREDICTABLE in an IT block
-[^:]*:25: Warning: instruction is UNPREDICTABLE in an IT block
-[^:]*:25: Warning: instruction is UNPREDICTABLE in an IT block
-[^:]*:25: Error: syntax error -- `vrintneq.f16 q0,q1'
-[^:]*:25: Error: syntax error -- `vrintneq.f16 q0,q1'
-[^:]*:25: Error: syntax error -- `vrintneq.f16 q0,q1'
-[^:]*:25: Error: vector predicated instruction should be in VPT/VPST block -- `vrintnt.f16 q0,q1'
-[^:]*:25: Error: instruction missing MVE vector predication code -- `vrintn.f16 q0,q1'
-[^:]*:25: Warning: instruction is UNPREDICTABLE in an IT block
-[^:]*:25: Warning: instruction is UNPREDICTABLE in an IT block
-[^:]*:25: Warning: instruction is UNPREDICTABLE in an IT block
-[^:]*:25: Warning: instruction is UNPREDICTABLE in an IT block
-[^:]*:25: Warning: instruction is UNPREDICTABLE in an IT block
-[^:]*:25: Warning: instruction is UNPREDICTABLE in an IT block
-[^:]*:25: Error: syntax error -- `vrintxeq.f16 q0,q1'
-[^:]*:25: Error: syntax error -- `vrintxeq.f16 q0,q1'
-[^:]*:25: Error: syntax error -- `vrintxeq.f16 q0,q1'
-[^:]*:25: Error: vector predicated instruction should be in VPT/VPST block -- `vrintxt.f16 q0,q1'
-[^:]*:25: Error: instruction missing MVE vector predication code -- `vrintx.f16 q0,q1'
-[^:]*:25: Warning: instruction is UNPREDICTABLE in an IT block
-[^:]*:25: Warning: instruction is UNPREDICTABLE in an IT block
-[^:]*:25: Warning: instruction is UNPREDICTABLE in an IT block
-[^:]*:25: Warning: instruction is UNPREDICTABLE in an IT block
-[^:]*:25: Warning: instruction is UNPREDICTABLE in an IT block
-[^:]*:25: Warning: instruction is UNPREDICTABLE in an IT block
-[^:]*:25: Error: syntax error -- `vrintaeq.f16 q0,q1'
-[^:]*:25: Error: syntax error -- `vrintaeq.f16 q0,q1'
-[^:]*:25: Error: syntax error -- `vrintaeq.f16 q0,q1'
-[^:]*:25: Error: vector predicated instruction should be in VPT/VPST block -- `vrintat.f16 q0,q1'
-[^:]*:25: Error: instruction missing MVE vector predication code -- `vrinta.f16 q0,q1'
-[^:]*:25: Warning: instruction is UNPREDICTABLE in an IT block
-[^:]*:25: Warning: instruction is UNPREDICTABLE in an IT block
-[^:]*:25: Warning: instruction is UNPREDICTABLE in an IT block
-[^:]*:25: Warning: instruction is UNPREDICTABLE in an IT block
-[^:]*:25: Warning: instruction is UNPREDICTABLE in an IT block
-[^:]*:25: Warning: instruction is UNPREDICTABLE in an IT block
-[^:]*:25: Error: syntax error -- `vrintzeq.f16 q0,q1'
-[^:]*:25: Error: syntax error -- `vrintzeq.f16 q0,q1'
-[^:]*:25: Error: syntax error -- `vrintzeq.f16 q0,q1'
-[^:]*:25: Error: vector predicated instruction should be in VPT/VPST block -- `vrintzt.f16 q0,q1'
-[^:]*:25: Error: instruction missing MVE vector predication code -- `vrintz.f16 q0,q1'
-[^:]*:25: Warning: instruction is UNPREDICTABLE in an IT block
-[^:]*:25: Warning: instruction is UNPREDICTABLE in an IT block
-[^:]*:25: Warning: instruction is UNPREDICTABLE in an IT block
-[^:]*:25: Warning: instruction is UNPREDICTABLE in an IT block
-[^:]*:25: Warning: instruction is UNPREDICTABLE in an IT block
-[^:]*:25: Warning: instruction is UNPREDICTABLE in an IT block
-[^:]*:25: Error: syntax error -- `vrintmeq.f16 q0,q1'
-[^:]*:25: Error: syntax error -- `vrintmeq.f16 q0,q1'
-[^:]*:25: Error: syntax error -- `vrintmeq.f16 q0,q1'
-[^:]*:25: Error: vector predicated instruction should be in VPT/VPST block -- `vrintmt.f16 q0,q1'
-[^:]*:25: Error: instruction missing MVE vector predication code -- `vrintm.f16 q0,q1'
-[^:]*:25: Warning: instruction is UNPREDICTABLE in an IT block
-[^:]*:25: Warning: instruction is UNPREDICTABLE in an IT block
-[^:]*:25: Warning: instruction is UNPREDICTABLE in an IT block
-[^:]*:25: Warning: instruction is UNPREDICTABLE in an IT block
-[^:]*:25: Warning: instruction is UNPREDICTABLE in an IT block
-[^:]*:25: Warning: instruction is UNPREDICTABLE in an IT block
-[^:]*:25: Error: syntax error -- `vrintpeq.f16 q0,q1'
-[^:]*:25: Error: syntax error -- `vrintpeq.f16 q0,q1'
-[^:]*:25: Error: syntax error -- `vrintpeq.f16 q0,q1'
-[^:]*:25: Error: vector predicated instruction should be in VPT/VPST block -- `vrintpt.f16 q0,q1'
-[^:]*:25: Error: instruction missing MVE vector predication code -- `vrintp.f16 q0,q1'
+[^:]*:16: Warning: instruction is UNPREDICTABLE in an IT block
+[^:]*:16: Warning: instruction is UNPREDICTABLE in an IT block
+[^:]*:16: Warning: instruction is UNPREDICTABLE in an IT block
+[^:]*:16: Warning: instruction is UNPREDICTABLE in an IT block
+[^:]*:16: Warning: instruction is UNPREDICTABLE in an IT block
+[^:]*:16: Warning: instruction is UNPREDICTABLE in an IT block
+[^:]*:18: Error: syntax error -- `vrintneq.f16 q0,q1'
+[^:]*:19: Error: syntax error -- `vrintneq.f16 q0,q1'
+[^:]*:21: Error: syntax error -- `vrintneq.f16 q0,q1'
+[^:]*:22: Error: vector predicated instruction should be in VPT/VPST block -- `vrintnt.f16 q0,q1'
+[^:]*:24: Error: instruction missing MVE vector predication code -- `vrintn.f16 q0,q1'
+[^:]*:16: Warning: instruction is UNPREDICTABLE in an IT block
+[^:]*:16: Warning: instruction is UNPREDICTABLE in an IT block
+[^:]*:16: Warning: instruction is UNPREDICTABLE in an IT block
+[^:]*:16: Warning: instruction is UNPREDICTABLE in an IT block
+[^:]*:16: Warning: instruction is UNPREDICTABLE in an IT block
+[^:]*:16: Warning: instruction is UNPREDICTABLE in an IT block
+[^:]*:18: Error: syntax error -- `vrintxeq.f16 q0,q1'
+[^:]*:19: Error: syntax error -- `vrintxeq.f16 q0,q1'
+[^:]*:21: Error: syntax error -- `vrintxeq.f16 q0,q1'
+[^:]*:22: Error: vector predicated instruction should be in VPT/VPST block -- `vrintxt.f16 q0,q1'
+[^:]*:24: Error: instruction missing MVE vector predication code -- `vrintx.f16 q0,q1'
+[^:]*:16: Warning: instruction is UNPREDICTABLE in an IT block
+[^:]*:16: Warning: instruction is UNPREDICTABLE in an IT block
+[^:]*:16: Warning: instruction is UNPREDICTABLE in an IT block
+[^:]*:16: Warning: instruction is UNPREDICTABLE in an IT block
+[^:]*:16: Warning: instruction is UNPREDICTABLE in an IT block
+[^:]*:16: Warning: instruction is UNPREDICTABLE in an IT block
+[^:]*:18: Error: syntax error -- `vrintaeq.f16 q0,q1'
+[^:]*:19: Error: syntax error -- `vrintaeq.f16 q0,q1'
+[^:]*:21: Error: syntax error -- `vrintaeq.f16 q0,q1'
+[^:]*:22: Error: vector predicated instruction should be in VPT/VPST block -- `vrintat.f16 q0,q1'
+[^:]*:24: Error: instruction missing MVE vector predication code -- `vrinta.f16 q0,q1'
+[^:]*:16: Warning: instruction is UNPREDICTABLE in an IT block
+[^:]*:16: Warning: instruction is UNPREDICTABLE in an IT block
+[^:]*:16: Warning: instruction is UNPREDICTABLE in an IT block
+[^:]*:16: Warning: instruction is UNPREDICTABLE in an IT block
+[^:]*:16: Warning: instruction is UNPREDICTABLE in an IT block
+[^:]*:16: Warning: instruction is UNPREDICTABLE in an IT block
+[^:]*:18: Error: syntax error -- `vrintzeq.f16 q0,q1'
+[^:]*:19: Error: syntax error -- `vrintzeq.f16 q0,q1'
+[^:]*:21: Error: syntax error -- `vrintzeq.f16 q0,q1'
+[^:]*:22: Error: vector predicated instruction should be in VPT/VPST block -- `vrintzt.f16 q0,q1'
+[^:]*:24: Error: instruction missing MVE vector predication code -- `vrintz.f16 q0,q1'
+[^:]*:16: Warning: instruction is UNPREDICTABLE in an IT block
+[^:]*:16: Warning: instruction is UNPREDICTABLE in an IT block
+[^:]*:16: Warning: instruction is UNPREDICTABLE in an IT block
+[^:]*:16: Warning: instruction is UNPREDICTABLE in an IT block
+[^:]*:16: Warning: instruction is UNPREDICTABLE in an IT block
+[^:]*:16: Warning: instruction is UNPREDICTABLE in an IT block
+[^:]*:18: Error: syntax error -- `vrintmeq.f16 q0,q1'
+[^:]*:19: Error: syntax error -- `vrintmeq.f16 q0,q1'
+[^:]*:21: Error: syntax error -- `vrintmeq.f16 q0,q1'
+[^:]*:22: Error: vector predicated instruction should be in VPT/VPST block -- `vrintmt.f16 q0,q1'
+[^:]*:24: Error: instruction missing MVE vector predication code -- `vrintm.f16 q0,q1'
+[^:]*:16: Warning: instruction is UNPREDICTABLE in an IT block
+[^:]*:16: Warning: instruction is UNPREDICTABLE in an IT block
+[^:]*:16: Warning: instruction is UNPREDICTABLE in an IT block
+[^:]*:16: Warning: instruction is UNPREDICTABLE in an IT block
+[^:]*:16: Warning: instruction is UNPREDICTABLE in an IT block
+[^:]*:16: Warning: instruction is UNPREDICTABLE in an IT block
+[^:]*:18: Error: syntax error -- `vrintpeq.f16 q0,q1'
+[^:]*:19: Error: syntax error -- `vrintpeq.f16 q0,q1'
+[^:]*:21: Error: syntax error -- `vrintpeq.f16 q0,q1'
+[^:]*:22: Error: vector predicated instruction should be in VPT/VPST block -- `vrintpt.f16 q0,q1'
+[^:]*:24: Error: instruction missing MVE vector predication code -- `vrintp.f16 q0,q1'
diff --git a/gas/testsuite/gas/elf/dwarf-3-func.d b/gas/testsuite/gas/elf/dwarf-3-func.d
new file mode 100644
index 00000000000..0196f69e2ed
--- /dev/null
+++ b/gas/testsuite/gas/elf/dwarf-3-func.d
@@ -0,0 +1,48 @@
+#as: --gdwarf-3
+#name: Dwarf3 function debug info
+#readelf: -W -wai
+#target: i?86-*-* x86_64-*-*
+
+Contents of the .debug_info section:
+
+ +Compilation Unit @ offset (0x)?0:
+ +Length: .*
+ +Version: +3
+ +Abbrev Offset: +(0x)?0
+ +Pointer Size: .*
+ <0><[0-9a-f]+>: Abbrev Number: 1 \(DW_TAG_compile_unit\)
+#...
+ <1><[0-9a-f]+>: Abbrev Number: 2 \(DW_TAG_subprogram\)
+ +<[0-9a-f]+> +DW_AT_name +: \(strp\) \(offset: (0x)?[0-9a-f]+\): efunc1
+ +<[0-9a-f]+> +DW_AT_external +: \(flag\) 1
+ +<[0-9a-f]+> +DW_AT_low_pc +: \(addr\) (0x)?0
+ +<[0-9a-f]+> +DW_AT_high_pc +: \(addr\) (0x)?2
+ <1><[0-9a-f]+>: Abbrev Number: 2 \(DW_TAG_subprogram\)
+ +<[0-9a-f]+> +DW_AT_name +: \(strp\) \(offset: (0x)?[0-9a-f]+\): lfunc1
+ +<[0-9a-f]+> +DW_AT_external +: \(flag\) 0
+ +<[0-9a-f]+> +DW_AT_low_pc +: \(addr\) (0x)?2
+ +<[0-9a-f]+> +DW_AT_high_pc +: \(addr\) (0x)?13
+ <1><[0-9a-f]+>: Abbrev Number: 2 \(DW_TAG_subprogram\)
+ +<[0-9a-f]+> +DW_AT_name +: \(strp\) \(offset: (0x)?[0-9a-f]+\): efunc2
+ +<[0-9a-f]+> +DW_AT_external +: \(flag\) 1
+ +<[0-9a-f]+> +DW_AT_low_pc +: \(addr\) (0x)?13
+ +<[0-9a-f]+> +DW_AT_high_pc +: \(addr\) (0x)?35
+ <1><[0-9a-f]+>: Abbrev Number: 2 \(DW_TAG_subprogram\)
+ +<[0-9a-f]+> +DW_AT_name +: \(strp\) \(offset: (0x)?[0-9a-f]+\): lfunc2
+ +<[0-9a-f]+> +DW_AT_external +: \(flag\) 0
+ +<[0-9a-f]+> +DW_AT_low_pc +: \(addr\) (0x)?35
+ +<[0-9a-f]+> +DW_AT_high_pc +: \(addr\) (0x)?38
+ <1><[0-9a-f]+>: Abbrev Number: 0
+
+Contents of the .debug_abbrev section:
+
+ +Number TAG \(0x0\)
+ +1 +DW_TAG_compile_unit +\[has children\]
+#...
+ +2 +DW_TAG_subprogram +\[no children\]
+ +DW_AT_name +DW_FORM_strp
+ +DW_AT_external +DW_FORM_flag
+ +DW_AT_low_pc +DW_FORM_addr
+ +DW_AT_high_pc +DW_FORM_addr
+ +DW_AT value: 0 +DW_FORM value: 0
+#pass
diff --git a/gas/testsuite/gas/elf/dwarf-3-func.s b/gas/testsuite/gas/elf/dwarf-3-func.s
new file mode 100644
index 00000000000..4610686afd2
--- /dev/null
+++ b/gas/testsuite/gas/elf/dwarf-3-func.s
@@ -0,0 +1,40 @@
+ .text
+
+ .ifndef LOCAL
+efunc1:
+ .nop
+ .nop
+ .global efunc1
+ .type efunc1, %function
+ .size efunc1, .-efunc1
+ .endif
+
+ .ifndef GLOBAL
+lfunc1:
+ .nops 16
+ .nop
+ .type lfunc1, %function
+ .size lfunc1, .-lfunc1
+ .endif
+
+ .ifndef LOCAL
+efunc2:
+ .nop
+ .nops 32
+ .nop
+ .global efunc2
+ .type efunc2, %function
+ .size efunc2, .-efunc2
+ .endif
+
+ .global efunc3
+ .type efunc3, %function
+
+ .ifndef GLOBAL
+lfunc2:
+ .nop
+ .nop
+ .nop
+ .type lfunc2, %function
+ .size lfunc2, .-lfunc2
+ .endif
diff --git a/gas/testsuite/gas/elf/dwarf-5-func-global.d b/gas/testsuite/gas/elf/dwarf-5-func-global.d
new file mode 100644
index 00000000000..09b10fdf744
--- /dev/null
+++ b/gas/testsuite/gas/elf/dwarf-5-func-global.d
@@ -0,0 +1,40 @@
+#as: --gdwarf-5 --defsym GLOBAL=1
+#name: Dwarf5 global function debug info
+#readelf: -W -wai
+#source: dwarf-3-func.s
+#target: i?86-*-* x86_64-*-*
+
+Contents of the .debug_info section:
+
+ +Compilation Unit @ offset (0x)?0:
+ +Length: .*
+ +Version: +5
+ +Unit Type: +DW_UT_compile \(1\)
+ +Abbrev Offset: +(0x)?0
+ +Pointer Size: .*
+ <0><[0-9a-f]+>: Abbrev Number: 1 \(DW_TAG_compile_unit\)
+#...
+ <1><[0-9a-f]+>: Abbrev Number: 2 \(DW_TAG_subprogram\)
+ +<[0-9a-f]+> +DW_AT_name +: \(strp\) \(offset: (0x)?[0-9a-f]+\): efunc1
+ +<[0-9a-f]+> +DW_AT_external +: \(flag_present\) 1
+ +<[0-9a-f]+> +DW_AT_low_pc +: \(addr\) (0x)?0
+ +<[0-9a-f]+> +DW_AT_high_pc +: \(udata\) 2
+ <1><[0-9a-f]+>: Abbrev Number: 2 \(DW_TAG_subprogram\)
+ +<[0-9a-f]+> +DW_AT_name +: \(strp\) \(offset: (0x)?[0-9a-f]+\): efunc2
+ +<[0-9a-f]+> +DW_AT_external +: \(flag_present\) 1
+ +<[0-9a-f]+> +DW_AT_low_pc +: \(addr\) (0x)?2
+ +<[0-9a-f]+> +DW_AT_high_pc +: \(udata\) 34
+ <1><[0-9a-f]+>: Abbrev Number: 0
+
+Contents of the .debug_abbrev section:
+
+ +Number TAG \(0x0\)
+ +1 +DW_TAG_compile_unit +\[has children\]
+#...
+ +2 +DW_TAG_subprogram +\[no children\]
+ +DW_AT_name +DW_FORM_strp
+ +DW_AT_external +DW_FORM_flag_present
+ +DW_AT_low_pc +DW_FORM_addr
+ +DW_AT_high_pc +DW_FORM_udata
+ +DW_AT value: 0 +DW_FORM value: 0
+#pass
diff --git a/gas/testsuite/gas/elf/dwarf-5-func-local.d b/gas/testsuite/gas/elf/dwarf-5-func-local.d
new file mode 100644
index 00000000000..fd97841c2b1
--- /dev/null
+++ b/gas/testsuite/gas/elf/dwarf-5-func-local.d
@@ -0,0 +1,37 @@
+#as: --gdwarf-5 --defsym LOCAL=1
+#name: Dwarf5 local function debug info
+#readelf: -W -wai
+#source: dwarf-3-func.s
+#target: i?86-*-* x86_64-*-*
+
+Contents of the .debug_info section:
+
+ +Compilation Unit @ offset (0x)?0:
+ +Length: .*
+ +Version: +5
+ +Unit Type: +DW_UT_compile \(1\)
+ +Abbrev Offset: +(0x)?0
+ +Pointer Size: .*
+ <0><[0-9a-f]+>: Abbrev Number: 1 \(DW_TAG_compile_unit\)
+#...
+ <1><[0-9a-f]+>: Abbrev Number: 2 \(DW_TAG_subprogram\)
+ +<[0-9a-f]+> +DW_AT_name +: \(strp\) \(offset: (0x)?[0-9a-f]+\): lfunc1
+ +<[0-9a-f]+> +DW_AT_low_pc +: \(addr\) (0x)?0
+ +<[0-9a-f]+> +DW_AT_high_pc +: \(udata\) 17
+ <1><[0-9a-f]+>: Abbrev Number: 2 \(DW_TAG_subprogram\)
+ +<[0-9a-f]+> +DW_AT_name +: \(strp\) \(offset: (0x)?[0-9a-f]+\): lfunc2
+ +<[0-9a-f]+> +DW_AT_low_pc +: \(addr\) (0x)?11
+ +<[0-9a-f]+> +DW_AT_high_pc +: \(udata\) 3
+ <1><[0-9a-f]+>: Abbrev Number: 0
+
+Contents of the .debug_abbrev section:
+
+ +Number TAG \(0x0\)
+ +1 +DW_TAG_compile_unit +\[has children\]
+#...
+ +2 +DW_TAG_subprogram +\[no children\]
+ +DW_AT_name +DW_FORM_strp
+ +DW_AT_low_pc +DW_FORM_addr
+ +DW_AT_high_pc +DW_FORM_udata
+ +DW_AT value: 0 +DW_FORM value: 0
+#pass
diff --git a/gas/testsuite/gas/elf/dwarf-5-func.d b/gas/testsuite/gas/elf/dwarf-5-func.d
new file mode 100644
index 00000000000..11a78b24dee
--- /dev/null
+++ b/gas/testsuite/gas/elf/dwarf-5-func.d
@@ -0,0 +1,50 @@
+#as: --gdwarf-5
+#name: Dwarf5 function debug info
+#readelf: -W -wai
+#source: dwarf-3-func.s
+#target: i?86-*-* x86_64-*-*
+
+Contents of the .debug_info section:
+
+ +Compilation Unit @ offset (0x)?0:
+ +Length: .*
+ +Version: +5
+ +Unit Type: +DW_UT_compile \(1\)
+ +Abbrev Offset: +(0x)?0
+ +Pointer Size: .*
+ <0><[0-9a-f]+>: Abbrev Number: 1 \(DW_TAG_compile_unit\)
+#...
+ <1><[0-9a-f]+>: Abbrev Number: 2 \(DW_TAG_subprogram\)
+ +<[0-9a-f]+> +DW_AT_name +: \(strp\) \(offset: (0x)?[0-9a-f]+\): efunc1
+ +<[0-9a-f]+> +DW_AT_external +: \(flag\) 1
+ +<[0-9a-f]+> +DW_AT_low_pc +: \(addr\) (0x)?0
+ +<[0-9a-f]+> +DW_AT_high_pc +: \(udata\) 2
+ <1><[0-9a-f]+>: Abbrev Number: 2 \(DW_TAG_subprogram\)
+ +<[0-9a-f]+> +DW_AT_name +: \(strp\) \(offset: (0x)?[0-9a-f]+\): lfunc1
+ +<[0-9a-f]+> +DW_AT_external +: \(flag\) 0
+ +<[0-9a-f]+> +DW_AT_low_pc +: \(addr\) (0x)?2
+ +<[0-9a-f]+> +DW_AT_high_pc +: \(udata\) 17
+ <1><[0-9a-f]+>: Abbrev Number: 2 \(DW_TAG_subprogram\)
+ +<[0-9a-f]+> +DW_AT_name +: \(strp\) \(offset: (0x)?[0-9a-f]+\): efunc2
+ +<[0-9a-f]+> +DW_AT_external +: \(flag\) 1
+ +<[0-9a-f]+> +DW_AT_low_pc +: \(addr\) (0x)?13
+ +<[0-9a-f]+> +DW_AT_high_pc +: \(udata\) 34
+ <1><[0-9a-f]+>: Abbrev Number: 2 \(DW_TAG_subprogram\)
+ +<[0-9a-f]+> +DW_AT_name +: \(strp\) \(offset: (0x)?[0-9a-f]+\): lfunc2
+ +<[0-9a-f]+> +DW_AT_external +: \(flag\) 0
+ +<[0-9a-f]+> +DW_AT_low_pc +: \(addr\) (0x)?35
+ +<[0-9a-f]+> +DW_AT_high_pc +: \(udata\) 3
+ <1><[0-9a-f]+>: Abbrev Number: 0
+
+Contents of the .debug_abbrev section:
+
+ +Number TAG \(0x0\)
+ +1 +DW_TAG_compile_unit +\[has children\]
+#...
+ +2 +DW_TAG_subprogram +\[no children\]
+ +DW_AT_name +DW_FORM_strp
+ +DW_AT_external +DW_FORM_flag
+ +DW_AT_low_pc +DW_FORM_addr
+ +DW_AT_high_pc +DW_FORM_udata
+ +DW_AT value: 0 +DW_FORM value: 0
+#pass
diff --git a/gas/testsuite/gas/elf/dwarf-5-irp.d b/gas/testsuite/gas/elf/dwarf-5-irp.d
new file mode 100644
index 00000000000..048a6d5a87a
--- /dev/null
+++ b/gas/testsuite/gas/elf/dwarf-5-irp.d
@@ -0,0 +1,118 @@
+#as: --gdwarf-5
+#name: line number entries for section changes inside .irp
+#readelf: -W -wlrR
+# The am33 cr16 crx ft32 mn10* msp430 nds32* and rl78 targets do not evaluate the subtraction of symbols at assembly time.
+# The bfin target does not allow .subsection with an equated symbol as operand.
+# The d30v target emits sufficiently different debug info, apparently also covering padding it inserts.
+# The riscv targets do not support the subtraction of symbols.
+#xfail: am33*-* bfin-* cr16-* crx-* d30v-* ft32-* mn10*-* msp430-* nds32*-* riscv*-* rl78-*
+
+Raw dump of debug contents .*
+#...
+ Line Number Statements:
+.*Extended opcode 2: .*
+.*Special opcode .* and Line by 2 to 3
+.*Set File Name to entry 2 .*
+.*Advance Line by 15 to 18
+.*Special opcode .* and Line by 0 to 18
+.*Special opcode .* and Line by 1 to 19
+.*Special opcode .* and Line by -1 to 18
+.*Special opcode .* and Line by 1 to 19
+.*Special opcode .* and Line by -1 to 18
+.*Special opcode .* and Line by 1 to 19
+.*Set File Name to entry 3 .*
+.*Advance Line by 9 to 28
+.*Special opcode .* and Line by 0 to 28
+.*Special opcode .* and Line by 1 to 29
+.*Special opcode .* and Line by -1 to 28
+.*Special opcode .* and Line by 1 to 29
+.*Special opcode .* and Line by -1 to 28
+.*Special opcode .* and Line by 1 to 29
+.*Advance PC by .*
+.*Extended opcode 1: End of Sequence
+
+.*Set File Name to entry 4 .*
+.*Extended opcode 2: .*
+.*Special opcode .* and Line by 8 to 9
+.*Special opcode .* and Line by 1 to 10
+.*Advance PC by .*
+.*Extended opcode 1: End of Sequence
+
+.*Set File Name to entry 4 .*
+.*Extended opcode 2: .*
+.*Special opcode .* and Line by 8 to 9
+.*Special opcode .* and Line by 1 to 10
+.*Advance PC by .*
+.*Extended opcode 1: End of Sequence
+
+.*Set File Name to entry 4 .*
+.*Extended opcode 2: .*
+.*Special opcode .* and Line by 8 to 9
+.*Special opcode .* and Line by 1 to 10
+.*Advance PC by .*
+.*Extended opcode 1: End of Sequence
+
+.*Set File Name to entry 4 .*
+.*Extended opcode 2: .*
+.*Advance Line by 35 to 36
+.*Copy
+.*Special opcode .* and Line by 1 to 37
+.*Advance PC by .*
+.*Extended opcode 1: End of Sequence
+
+.*Set File Name to entry 4 .*
+.*Extended opcode 2: .*
+.*Advance Line by 35 to 36
+.*Copy
+.*Special opcode .* and Line by 1 to 37
+.*Advance PC by .*
+.*Extended opcode 1: End of Sequence
+
+.*Extended opcode 2: .*
+.*Advance Line by 41 to 42
+.*Copy
+.*Special opcode .* and Line by 1 to 43
+.*Advance PC by .*
+.*Extended opcode 1: End of Sequence
+
+.*Extended opcode 2: .*
+.*Advance Line by 41 to 42
+.*Copy
+.*Special opcode .* and Line by 1 to 43
+.*Advance PC by .*
+.*Extended opcode 1: End of Sequence
+
+
+Contents of the \.debug_aranges section:
+
+ Length: .*
+ Version: +2
+ Offset into \.debug_info: .*
+ Pointer Size: +[248]
+ Segment Size: +0
+
+ Address +Length
+ 0+ [0-9a-f]+ ?
+ 0+ [0-9a-f]+ ?
+ 0+ [0-9a-f]+ ?
+ 0+ [0-9a-f]+ ?
+ 0+ [0-9a-f]+ ?
+ 0+ [0-9a-f]+ ?
+ 0+ [0-9a-f]+ ?
+ 0+ [0-9a-f]+ ?
+ 0+ 0+ ?
+
+Contents of the \.debug_rnglists section:
+#...
+ Offset +Begin +End
+ [0-9a-f]+ 0+ [0-9a-f]+ ?
+ [0-9a-f]+ 0+ [0-9a-f]+ ?
+ [0-9a-f]+ 0+ [0-9a-f]+ ?
+ [0-9a-f]+ 0+ [0-9a-f]+ ?
+ [0-9a-f]+ 0+ [0-9a-f]+ ?
+ [0-9a-f]+ 0+ [0-9a-f]+ ?
+ [0-9a-f]+ 0+ [0-9a-f]+ ?
+ [0-9a-f]+ 0+ [0-9a-f]+ ?
+ [0-9a-f]+ <End of list>
+
+#pass
diff --git a/gas/testsuite/gas/elf/dwarf-5-irp.s b/gas/testsuite/gas/elf/dwarf-5-irp.s
new file mode 100644
index 00000000000..d90146b384c
--- /dev/null
+++ b/gas/testsuite/gas/elf/dwarf-5-irp.s
@@ -0,0 +1,44 @@
+ .text
+_start:
+ .nop
+
+ .irp n, ab, ij, xy
+ .file "irp.s"
+ .line 7
+ .section .text.\n, "ax"
+ .nop
+ .nop
+ .endr
+
+ .text
+
+ .irpc n, 123
+ .file "irpc.s"
+ .line 16
+ .subsection \n
+ .nop
+ .nop
+ .endr
+
+ n = 9
+ .rept 3
+ .file "rept.s"
+ .line 26
+ .subsection n
+ .nop
+ .nop
+ n = n - 1
+ .endr
+
+ .irp n, cd, nm
+# 35 "irp.s"
+ .section .text.\n, "ax"
+ .nop
+ .nop
+ .endr
+
+ .irp n, ef, kl
+ .section .text.\n, "ax"
+ .nop
+ .nop
+ .endr
diff --git a/gas/testsuite/gas/elf/dwarf-5-loc0.d b/gas/testsuite/gas/elf/dwarf-5-loc0.d
index eb752c9caed..7e8473a486f 100644
--- a/gas/testsuite/gas/elf/dwarf-5-loc0.d
+++ b/gas/testsuite/gas/elf/dwarf-5-loc0.d
@@ -1,5 +1,5 @@
#as: -gdwarf-5
-#readelf: -wL
+#readelf: -W -wL
#name: DWARF5 .loc 0
# The am33 cr16 crx ft32 mn10 msp430 nds32 and rl78 targets do not evaluate the subtraction of symbols at assembly time.
# The riscv targets do not support the subtraction of symbols.
diff --git a/gas/testsuite/gas/elf/dwarf2-18.d b/gas/testsuite/gas/elf/dwarf2-18.d
index db7a4f9f20b..fbaebaa9019 100644
--- a/gas/testsuite/gas/elf/dwarf2-18.d
+++ b/gas/testsuite/gas/elf/dwarf2-18.d
@@ -2,9 +2,8 @@
#readelf: -x.rodata -wL
#name: DWARF2 18
# The am33 cr16 crx ft32 mn10 msp430 nds32 and rl78 targets do not evaluate the subtraction of symbols at assembly time.
-# The mep targets turns some view computations into complex relocations.
# The riscv targets do not support the subtraction of symbols.
-#xfail: am3*-* cr16-* crx-* ft32*-* mep-* mn10*-* msp430-* nds32*-* riscv*-* rl78-*
+#xfail: am3*-* cr16-* crx-* ft32*-* mn10*-* msp430-* nds32*-* riscv*-* rl78-*
Hex dump of section '\.rodata':
0x00000000 0100 *.*
diff --git a/gas/testsuite/gas/elf/elf.exp b/gas/testsuite/gas/elf/elf.exp
index aacecb79daf..07f08a00a28 100644
--- a/gas/testsuite/gas/elf/elf.exp
+++ b/gas/testsuite/gas/elf/elf.exp
@@ -277,6 +277,7 @@ if { [is_elf_format] } then {
run_dump_test "section28"
run_dump_test "section29"
run_dump_test "sh-link-zero"
+ run_dump_test "size"
run_dump_test "dwarf2-1" $dump_opts
run_dump_test "dwarf2-2" $dump_opts
run_dump_test "dwarf2-3" $dump_opts
@@ -306,6 +307,21 @@ if { [is_elf_format] } then {
run_dump_test "dwarf-4-cu" $dump_opts
run_dump_test "dwarf-5-cu" $dump_opts
run_dump_test "dwarf-5-nop-for-line-table" $dump_opts
+ run_dump_test "dwarf-5-irp" $dump_opts
+ run_dump_test "dwarf-3-func" $dump_opts
+ run_dump_test "dwarf-5-func" $dump_opts
+ run_dump_test "dwarf-5-func-global" $dump_opts
+ run_dump_test "dwarf-5-func-local" $dump_opts
+
+ # Exclude targets defining ONLY_STANDARD_ESCAPES. It's not clear how these
+ # are supposed to reference macro arguments in double-quoted strings.
+ if { ![istarget "avr-*-*"]
+ && ![istarget "cris*-*-*"]
+ && ![istarget "msp430-*-*"]
+ && ![istarget "z80-*-*"] } then {
+ run_list_test line
+ }
+
run_dump_test "pr25917"
run_dump_test "bss"
run_dump_test "bad-bss"
diff --git a/gas/testsuite/gas/elf/line.l b/gas/testsuite/gas/elf/line.l
new file mode 100644
index 00000000000..3229f870868
--- /dev/null
+++ b/gas/testsuite/gas/elf/line.l
@@ -0,0 +1,30 @@
+# This should match the warnings when assembling line.s.
+
+.*: Assembler messages:
+line\.s:[0-9]*18: Warning: \.warning .*
+line\.s:[0-9]*21: Warning: m1/1: 123
+line\.s:[0-9]*21: Warning: m1/2: 123
+line\.s:[0-9]*22: Warning: m1/1: abc
+line\.s:[0-9]*22: Warning: m1/2: abc
+line\.s:[0-9]*23: Warning: m1/1: XYZ
+line\.s:[0-9]*23: Warning: m1/2: XYZ
+line\.s:[0-9]*24: Warning: \.warning .*
+Line\.s:10: Warning: m2/1: 987
+Line\.s:12: Warning: m2/2: 987
+Line\.s:10: Warning: m2/1: zyx
+Line\.s:12: Warning: m2/2: zyx
+Line\.s:10: Warning: m2/1: CBA
+Line\.s:12: Warning: m2/2: CBA
+line\.s:[0-9]*29: Warning: \.warning .*
+line\.s:[0-9]*35: Warning: irp/1: 123
+line\.s:[0-9]*37: Warning: irp/2: 123
+line\.s:[0-9]*35: Warning: irp/1: 456
+line\.s:[0-9]*37: Warning: irp/2: 456
+line\.s:[0-9]*39: Warning: \.warning .*
+line\.s:[0-9]*45: Warning: rept/1
+line\.s:[0-9]*47: Warning: rept/2
+line\.s:[0-9]*45: Warning: rept/1
+line\.s:[0-9]*47: Warning: rept/2
+line\.s:[0-9]*45: Warning: rept/1
+line\.s:[0-9]*47: Warning: rept/2
+line\.s:[0-9]*49: Warning: \.warning .*
diff --git a/gas/testsuite/gas/elf/line.s b/gas/testsuite/gas/elf/line.s
new file mode 100644
index 00000000000..2190cc3c225
--- /dev/null
+++ b/gas/testsuite/gas/elf/line.s
@@ -0,0 +1,49 @@
+ .macro m1 args:vararg
+ .warning "m1/1: \args"
+ .nop
+ .warning "m1/2: \args"
+ .endm
+
+ .macro m2 args:vararg
+ .file "Line.s"
+ .line 9
+ .warning "m2/1: \args"
+ .nop
+ .warning "m2/2: \args"
+ .endm
+
+ .text
+
+# 10018 "line.s"
+ .warning
+
+macro:
+ m1 123
+ m1 abc
+ m1 XYZ
+ .warning
+
+ m2 987
+ m2 zyx
+ m2 CBA
+ .warning
+
+# 20032 "line.s"
+
+irp:
+ .irp arg, 123, 456
+ .warning "irp/1: \arg"
+ .nop
+ .warning "irp/2: \arg"
+ .endr
+ .warning
+
+# 30042 "line.s"
+
+rept:
+ .rept 3
+ .warning "rept/1"
+ .nop
+ .warning "rept/2"
+ .endr
+ .warning
diff --git a/gas/testsuite/gas/elf/pr27228.d b/gas/testsuite/gas/elf/pr27228.d
index da336ff2191..ecf2d1723bd 100644
--- a/gas/testsuite/gas/elf/pr27228.d
+++ b/gas/testsuite/gas/elf/pr27228.d
@@ -2,7 +2,7 @@
#name: .reloc against undefined local symbol (PR 27228)
#readelf: -sW
# hppa doesn't support use of any BFD_RELOC_*
-#xfail: hppa*-*-*
+#notarget: hppa*-*-*
Symbol table '\.symtab' contains [0-9]+ entries:
#...
diff --git a/gas/testsuite/gas/elf/size.d b/gas/testsuite/gas/elf/size.d
new file mode 100644
index 00000000000..5890386a14d
--- /dev/null
+++ b/gas/testsuite/gas/elf/size.d
@@ -0,0 +1,16 @@
+#readelf: -sW
+#name: ELF symbol size
+#notarget: alpha-*-* hppa*-*-hpux*
+# The Alpha target uses its own .set pseudo-insn.
+
+#...
+ +[0-9]+: 0+ +1 +NOTYPE +LOCAL +DEFAULT +[0-9]+ +foo1
+ +[0-9]+: 0+ +2 +NOTYPE +LOCAL +DEFAULT +[0-9]+ +bar1
+ +[0-9]+: 0+ +2 +NOTYPE +LOCAL +DEFAULT +[0-9]+ +bar2
+ +[0-9]+: 0+ +2 +NOTYPE +LOCAL +DEFAULT +[0-9]+ +bar3
+ +[0-9]+: 0+ +3 +NOTYPE +LOCAL +DEFAULT +[0-9]+ +foo2
+ +[0-9]+: 0+ +2 +NOTYPE +LOCAL +DEFAULT +[0-9]+ +bar4
+ +[0-9]+: 0+ +1 +NOTYPE +LOCAL +DEFAULT +[0-9]+ +bar5
+ +[0-9]+: 0+ +3 +NOTYPE +LOCAL +DEFAULT +[0-9]+ +bar6
+ +[0-9]+: 0+ +3 +NOTYPE +LOCAL +DEFAULT +[0-9]+ +bar7
+#pass
diff --git a/gas/testsuite/gas/elf/size.s b/gas/testsuite/gas/elf/size.s
new file mode 100644
index 00000000000..92865565d7a
--- /dev/null
+++ b/gas/testsuite/gas/elf/size.s
@@ -0,0 +1,23 @@
+.text
+
+.size foo1, 1
+foo1:
+
+.set bar1, foo1
+.size bar1, 2
+.size bar2, 2
+.set bar2, foo1
+
+.set bar3, foo2
+.size bar3, 2
+.size bar4, 2
+.set bar4, foo2
+
+.set bar5, foo1
+.set bar6, foo2
+
+.size foo2, 3
+foo2:
+
+.set bar7, foo1
+.set bar7, foo2
diff --git a/gas/testsuite/gas/i386/arch-10-5.l b/gas/testsuite/gas/i386/arch-10-5.l
new file mode 100644
index 00000000000..25dc404a0da
--- /dev/null
+++ b/gas/testsuite/gas/i386/arch-10-5.l
@@ -0,0 +1,2 @@
+Assembler messages:
+Fatal error: .*
diff --git a/gas/testsuite/gas/i386/k1om-inval.s b/gas/testsuite/gas/i386/arch-10-5.s
index 1ff7c295821..09cc1e1f7cd 100644
--- a/gas/testsuite/gas/i386/k1om-inval.s
+++ b/gas/testsuite/gas/i386/arch-10-5.s
@@ -1,2 +1 @@
.text
- nop
diff --git a/gas/testsuite/gas/i386/avx512_fp16.s b/gas/testsuite/gas/i386/avx512_fp16.s
index b4f99c7d07e..9e6af14da64 100644
--- a/gas/testsuite/gas/i386/avx512_fp16.s
+++ b/gas/testsuite/gas/i386/avx512_fp16.s
@@ -891,7 +891,7 @@ _start:
vcvtsh2usi edx, WORD PTR [ecx+254] #AVX512-FP16 Disp8(7f)
vcvtsh2usi edx, WORD PTR [edx-256] #AVX512-FP16 Disp8(80)
vcvtsi2sh xmm6, xmm5, edx #AVX512-FP16
- vcvtsi2sh xmm6, xmm5, {rn-sae}, edx #AVX512-FP16 HAS_SAE RC_CTRL
+ vcvtsi2sh xmm6, xmm5, edx, {rn-sae} #AVX512-FP16 HAS_SAE RC_CTRL
vcvtsi2sh xmm6, xmm5, DWORD PTR [esp+esi*8+0x10000000] #AVX512-FP16
vcvtsi2sh xmm6, xmm5, DWORD PTR [ecx] #AVX512-FP16
vcvtsi2sh xmm6, xmm5, DWORD PTR [ecx+508] #AVX512-FP16 Disp8(7f)
@@ -972,7 +972,7 @@ _start:
vcvtuqq2ph xmm6, ZMMWORD PTR [ecx+8128] #AVX512-FP16 Disp8(7f)
vcvtuqq2ph xmm6{k7}{z}, QWORD PTR [edx-1024]{1to8} #AVX512-FP16 BROADCAST_EN Disp8(80) MASK_ENABLING ZEROCTL
vcvtusi2sh xmm6, xmm5, edx #AVX512-FP16
- vcvtusi2sh xmm6, xmm5, {rn-sae}, edx #AVX512-FP16 HAS_SAE RC_CTRL
+ vcvtusi2sh xmm6, xmm5, edx, {rn-sae} #AVX512-FP16 HAS_SAE RC_CTRL
vcvtusi2sh xmm6, xmm5, DWORD PTR [esp+esi*8+0x10000000] #AVX512-FP16
vcvtusi2sh xmm6, xmm5, DWORD PTR [ecx] #AVX512-FP16
vcvtusi2sh xmm6, xmm5, DWORD PTR [ecx+508] #AVX512-FP16 Disp8(7f)
diff --git a/gas/testsuite/gas/i386/equ-2.l b/gas/testsuite/gas/i386/equ-2.l
new file mode 100644
index 00000000000..97a24b531b3
--- /dev/null
+++ b/gas/testsuite/gas/i386/equ-2.l
@@ -0,0 +1,17 @@
+.*: Assembler messages:
+.*:8: Error: .*
+#...
+GAS LISTING .*
+
+
+[ ]*[0-9]+[ ]+# .*
+[ ]*[0-9]+[ ]+equ:
+[ ]*[0-9]+[ ]+s = %edx % %ecx
+[ ]*[0-9]+[ ]+x = s
+[ ]*[0-9]+[ ]+y = s
+[ ]*[0-9]+[ ]+z = s
+[ ]*[0-9]+[ ]*
+[ ]*[0-9]+[ ]+t = %ymm5%%%!%%%%!%%%%%%%%!%ebp%%%%%%%%%%%%%%%%%%M
+[ ]*[0-9]+[ ]+a = t
+[ ]*[0-9]+[ ]+b = t
+[ ]*[0-9]+[ ]+c = t
diff --git a/gas/testsuite/gas/i386/equ-2.s b/gas/testsuite/gas/i386/equ-2.s
new file mode 100644
index 00000000000..87ec9a78d1d
--- /dev/null
+++ b/gas/testsuite/gas/i386/equ-2.s
@@ -0,0 +1,11 @@
+# PR gas/28977
+equ:
+ s = %edx % %ecx
+ x = s
+ y = s
+ z = s
+
+ t = %ymm5%%%!%%%%!%%%%%%%%!%ebp%%%%%%%%%%%%%%%%%%M
+ a = t
+ b = t
+ c = t
diff --git a/gas/testsuite/gas/i386/equ.d b/gas/testsuite/gas/i386/equ.d
index 0f270a6ccdf..d7c863f4560 100644
--- a/gas/testsuite/gas/i386/equ.d
+++ b/gas/testsuite/gas/i386/equ.d
@@ -13,6 +13,8 @@ Disassembly of section .text:
[ 0-9a-f]+:[ 0-9a-f]+test[ ]+%ecx,%ecx
[ 0-9a-f]+:[ 0-9a-f]+mov[ ]+%fs:\(%ecx,%ecx,4\),%ecx
[ 0-9a-f]+:[ 0-9a-f]+fadd[ ]+%st\(1\),%st
+[ 0-9a-f]+:[ 0-9a-f]+fmul[ ]+%st\(1\),%st
+[ 0-9a-f]+:[ 0-9a-f]+fsub[ ]+%st\(1\),%st
[ 0-9a-f]+:[ 0-9a-f]+mov[ ]+\$0xfffffffe,%eax
[ 0-9a-f]+:[ 0-9a-f]+mov[ ]+0xfffffffe,%eax
[ 0-9a-f]+:[ 0-9a-f]+mov[ ]+\$0x0,%eax[ 0-9a-f]+:[ a-zA-Z0-9_]+xtrn
@@ -21,7 +23,11 @@ Disassembly of section .text:
[ 0-9a-f]+:[ 0-9a-f]+mov[ ]+%gs:\(%edx,%edx,8\),%edx
[ 0-9a-f]+:[ 0-9a-f]+mov[ ]+%gs:\(%edx,%edx,8\),%edx
[ 0-9a-f]+:[ 0-9a-f]+fadd[ ]+%st\(1\),%st
+[ 0-9a-f]+:[ 0-9a-f]+fmul[ ]+%st\(1\),%st
+[ 0-9a-f]+:[ 0-9a-f]+fsub[ ]+%st\(1\),%st
[ 0-9a-f]+:[ 0-9a-f]+fadd[ ]+%st\(7\),%st
+[ 0-9a-f]+:[ 0-9a-f]+fmul[ ]+%st\(7\),%st
+[ 0-9a-f]+:[ 0-9a-f]+fsub[ ]+%st\(7\),%st
[ 0-9a-f]+:[ 0-9a-f]+mov[ ]+0x4\(%edx\),%eax
[ 0-9a-f]+:[ 0-9a-f]+mov[ ]+0x4\(%edx\),%eax
#pass
diff --git a/gas/testsuite/gas/i386/equ.s b/gas/testsuite/gas/i386/equ.s
index e15148a741d..c7c4e604f03 100644
--- a/gas/testsuite/gas/i386/equ.s
+++ b/gas/testsuite/gas/i386/equ.s
@@ -13,8 +13,12 @@ _start:
.equ s, %fs
testl r, r
movl s:(r,r,4), r
+ .equ z, y
+ .equ y, x
.equ x, %st(1)
fadd x
+ fmul y
+ fsub z
.if r <> %ecx
.err
@@ -37,8 +41,14 @@ _start:
mov r, s:[r+r*8]
mov r, s:[8*r+r]
fadd x
- .equ x, st(7)
- fadd x
+ fmul y
+ fsub z
+ .equ c, b
+ .equ b, a
+ .equ a, st(7)
+ fadd a
+ fmul b
+ fsub c
.equ r, edx + 4
mov eax, [r]
mov eax, [r]
diff --git a/gas/testsuite/gas/i386/evex-lig.s b/gas/testsuite/gas/i386/evex-lig.s
index a6e52fad3a7..db0891a12a0 100644
--- a/gas/testsuite/gas/i386/evex-lig.s
+++ b/gas/testsuite/gas/i386/evex-lig.s
@@ -1703,6 +1703,19 @@ _start:
vrndscaless $123, -512(%edx), %xmm5, %xmm6{%k7} # AVX512 Disp8
vrndscaless $123, -516(%edx), %xmm5, %xmm6{%k7} # AVX512
+ vcmpsh $123, %xmm4, %xmm5, %k5 # AVX512-FP16
+ vcmpsh $123, {sae}, %xmm4, %xmm5, %k5{%k7} # AVX512-FP16
+ vcmpsh $123, (%ecx), %xmm5, %k5 # AVX512-FP16
+ vcmpsh $123, -123456(%esp, %esi, 8), %xmm5, %k5{%k7} # AVX512-FP16
+ vcmpsh $123, 254(%ecx), %xmm5, %k5 # AVX512-FP16 Disp8
+ vcmpsh $123, -256(%edx), %xmm5, %k5{%k7} # AVX512-FP16 Disp8
+
+ vfpclasssh $123, %xmm4, %k5 # AVX512-FP16
+ vfpclasssh $123, (%ecx), %k5 # AVX512-FP16
+ vfpclasssh $123, -123456(%esp, %esi, 8), %k5{%k7} # AVX512-FP16
+ vfpclasssh $123, 254(%ecx), %k5 # AVX512-FP16 Disp8
+ vfpclasssh $123, -256(%edx), %k5{%k7} # AVX512-FP16 Disp8
+
.intel_syntax noprefix
vaddsd xmm6{k7}, xmm5, xmm4 # AVX512
vaddsd xmm6{k7}{z}, xmm5, xmm4 # AVX512
@@ -3403,3 +3416,15 @@ _start:
vrndscaless xmm6{k7}, xmm5, DWORD PTR [edx-512], 123 # AVX512 Disp8
vrndscaless xmm6{k7}, xmm5, DWORD PTR [edx-516], 123 # AVX512
+ vcmpsh k5, xmm5, xmm4, 123 # AVX512-FP16
+ vcmpsh k5{k7}, xmm5, xmm4, {sae}, 123 # AVX512-FP16
+ vcmpsh k5, xmm5, WORD PTR [ecx], 123 # AVX512-FP16
+ vcmpsh k5{k7}, xmm5, WORD PTR [esp+esi*8-123456], 123 # AVX512-FP16
+ vcmpsh k5, xmm5, WORD PTR [ecx+254], 123 # AVX512-FP16 Disp8
+ vcmpsh k5{k7}, xmm5, WORD PTR [edx-256], 123 # AVX512-FP16 Disp8
+
+ vfpclasssh k5, xmm4, 123 # AVX512-FP16
+ vfpclasssh k5, WORD PTR [ecx], 123 # AVX512-FP16
+ vfpclasssh k5{k7}, WORD PTR [esp+esi*8-123456], 123 # AVX512-FP16
+ vfpclasssh k5, WORD PTR [ecx+254], 123 # AVX512-FP16 Disp8
+ vfpclasssh k5{k7}, WORD PTR [edx-256], 123 # AVX512-FP16 Disp8
diff --git a/gas/testsuite/gas/i386/evex-lig256-intel.d b/gas/testsuite/gas/i386/evex-lig256-intel.d
index 33c88bcfee5..1622dc96d38 100644
--- a/gas/testsuite/gas/i386/evex-lig256-intel.d
+++ b/gas/testsuite/gas/i386/evex-lig256-intel.d
@@ -1536,6 +1536,17 @@ Disassembly of section .text:
[ ]*[a-f0-9]+: 62 f3 55 2f 0a b2 00 02 00 00 7b vrndscaless xmm6\{k7\},xmm5,DWORD PTR \[edx\+0x200\],0x7b
[ ]*[a-f0-9]+: 62 f3 55 2f 0a 72 80 7b vrndscaless xmm6\{k7\},xmm5,DWORD PTR \[edx-0x200\],0x7b
[ ]*[a-f0-9]+: 62 f3 55 2f 0a b2 fc fd ff ff 7b vrndscaless xmm6\{k7\},xmm5,DWORD PTR \[edx-0x204\],0x7b
+[ ]*[a-f0-9]+: 62 f3 56 28 c2 ec 7b vcmpsh k5,xmm5,xmm4,0x7b
+[ ]*[a-f0-9]+: 62 f3 56 1f c2 ec 7b vcmpsh k5\{k7\},xmm5,xmm4,\{sae\},0x7b
+[ ]*[a-f0-9]+: 62 f3 56 28 c2 29 7b vcmpsh k5,xmm5,WORD PTR \[ecx\],0x7b
+[ ]*[a-f0-9]+: 62 f3 56 2f c2 ac f4 c0 1d fe ff 7b vcmpsh k5\{k7\},xmm5,WORD PTR \[esp\+esi\*8-0x1e240\],0x7b
+[ ]*[a-f0-9]+: 62 f3 56 28 c2 69 7f 7b vcmpsh k5,xmm5,WORD PTR \[ecx\+0xfe\],0x7b
+[ ]*[a-f0-9]+: 62 f3 56 2f c2 6a 80 7b vcmpsh k5\{k7\},xmm5,WORD PTR \[edx-0x100\],0x7b
+[ ]*[a-f0-9]+: 62 f3 7c 28 67 ec 7b vfpclasssh k5,xmm4,0x7b
+[ ]*[a-f0-9]+: 62 f3 7c 28 67 29 7b vfpclasssh k5,WORD PTR \[ecx\],0x7b
+[ ]*[a-f0-9]+: 62 f3 7c 2f 67 ac f4 c0 1d fe ff 7b vfpclasssh k5\{k7\},WORD PTR \[esp\+esi\*8-0x1e240\],0x7b
+[ ]*[a-f0-9]+: 62 f3 7c 28 67 69 7f 7b vfpclasssh k5,WORD PTR \[ecx\+0xfe\],0x7b
+[ ]*[a-f0-9]+: 62 f3 7c 2f 67 6a 80 7b vfpclasssh k5\{k7\},WORD PTR \[edx-0x100\],0x7b
[ ]*[a-f0-9]+: 62 f1 d7 2f 58 f4 vaddsd xmm6\{k7\},xmm5,xmm4
[ ]*[a-f0-9]+: 62 f1 d7 af 58 f4 vaddsd xmm6\{k7\}\{z\},xmm5,xmm4
[ ]*[a-f0-9]+: 62 f1 d7 1f 58 f4 vaddsd xmm6\{k7\},xmm5,xmm4,\{rn-sae\}
@@ -3063,4 +3074,15 @@ Disassembly of section .text:
[ ]*[a-f0-9]+: 62 f3 55 2f 0a b2 00 02 00 00 7b vrndscaless xmm6\{k7\},xmm5,DWORD PTR \[edx\+0x200\],0x7b
[ ]*[a-f0-9]+: 62 f3 55 2f 0a 72 80 7b vrndscaless xmm6\{k7\},xmm5,DWORD PTR \[edx-0x200\],0x7b
[ ]*[a-f0-9]+: 62 f3 55 2f 0a b2 fc fd ff ff 7b vrndscaless xmm6\{k7\},xmm5,DWORD PTR \[edx-0x204\],0x7b
+[ ]*[a-f0-9]+: 62 f3 56 28 c2 ec 7b vcmpsh k5,xmm5,xmm4,0x7b
+[ ]*[a-f0-9]+: 62 f3 56 1f c2 ec 7b vcmpsh k5\{k7\},xmm5,xmm4,\{sae\},0x7b
+[ ]*[a-f0-9]+: 62 f3 56 28 c2 29 7b vcmpsh k5,xmm5,WORD PTR \[ecx\],0x7b
+[ ]*[a-f0-9]+: 62 f3 56 2f c2 ac f4 c0 1d fe ff 7b vcmpsh k5\{k7\},xmm5,WORD PTR \[esp\+esi\*8-0x1e240\],0x7b
+[ ]*[a-f0-9]+: 62 f3 56 28 c2 69 7f 7b vcmpsh k5,xmm5,WORD PTR \[ecx\+0xfe\],0x7b
+[ ]*[a-f0-9]+: 62 f3 56 2f c2 6a 80 7b vcmpsh k5\{k7\},xmm5,WORD PTR \[edx-0x100\],0x7b
+[ ]*[a-f0-9]+: 62 f3 7c 28 67 ec 7b vfpclasssh k5,xmm4,0x7b
+[ ]*[a-f0-9]+: 62 f3 7c 28 67 29 7b vfpclasssh k5,WORD PTR \[ecx\],0x7b
+[ ]*[a-f0-9]+: 62 f3 7c 2f 67 ac f4 c0 1d fe ff 7b vfpclasssh k5\{k7\},WORD PTR \[esp\+esi\*8-0x1e240\],0x7b
+[ ]*[a-f0-9]+: 62 f3 7c 28 67 69 7f 7b vfpclasssh k5,WORD PTR \[ecx\+0xfe\],0x7b
+[ ]*[a-f0-9]+: 62 f3 7c 2f 67 6a 80 7b vfpclasssh k5\{k7\},WORD PTR \[edx-0x100\],0x7b
#pass
diff --git a/gas/testsuite/gas/i386/evex-lig256.d b/gas/testsuite/gas/i386/evex-lig256.d
index 7e992586cab..8ce21d464c8 100644
--- a/gas/testsuite/gas/i386/evex-lig256.d
+++ b/gas/testsuite/gas/i386/evex-lig256.d
@@ -1536,6 +1536,17 @@ Disassembly of section .text:
[ ]*[a-f0-9]+: 62 f3 55 2f 0a b2 00 02 00 00 7b vrndscaless \$0x7b,0x200\(%edx\),%xmm5,%xmm6\{%k7\}
[ ]*[a-f0-9]+: 62 f3 55 2f 0a 72 80 7b vrndscaless \$0x7b,-0x200\(%edx\),%xmm5,%xmm6\{%k7\}
[ ]*[a-f0-9]+: 62 f3 55 2f 0a b2 fc fd ff ff 7b vrndscaless \$0x7b,-0x204\(%edx\),%xmm5,%xmm6\{%k7\}
+[ ]*[a-f0-9]+: 62 f3 56 28 c2 ec 7b vcmpsh \$0x7b,%xmm4,%xmm5,%k5
+[ ]*[a-f0-9]+: 62 f3 56 1f c2 ec 7b vcmpsh \$0x7b,\{sae\},%xmm4,%xmm5,%k5\{%k7\}
+[ ]*[a-f0-9]+: 62 f3 56 28 c2 29 7b vcmpsh \$0x7b,\(%ecx\),%xmm5,%k5
+[ ]*[a-f0-9]+: 62 f3 56 2f c2 ac f4 c0 1d fe ff 7b vcmpsh \$0x7b,-0x1e240\(%esp,%esi,8\),%xmm5,%k5\{%k7\}
+[ ]*[a-f0-9]+: 62 f3 56 28 c2 69 7f 7b vcmpsh \$0x7b,0xfe\(%ecx\),%xmm5,%k5
+[ ]*[a-f0-9]+: 62 f3 56 2f c2 6a 80 7b vcmpsh \$0x7b,-0x100\(%edx\),%xmm5,%k5\{%k7\}
+[ ]*[a-f0-9]+: 62 f3 7c 28 67 ec 7b vfpclasssh \$0x7b,%xmm4,%k5
+[ ]*[a-f0-9]+: 62 f3 7c 28 67 29 7b vfpclasssh \$0x7b,\(%ecx\),%k5
+[ ]*[a-f0-9]+: 62 f3 7c 2f 67 ac f4 c0 1d fe ff 7b vfpclasssh \$0x7b,-0x1e240\(%esp,%esi,8\),%k5\{%k7\}
+[ ]*[a-f0-9]+: 62 f3 7c 28 67 69 7f 7b vfpclasssh \$0x7b,0xfe\(%ecx\),%k5
+[ ]*[a-f0-9]+: 62 f3 7c 2f 67 6a 80 7b vfpclasssh \$0x7b,-0x100\(%edx\),%k5\{%k7\}
[ ]*[a-f0-9]+: 62 f1 d7 2f 58 f4 vaddsd %xmm4,%xmm5,%xmm6\{%k7\}
[ ]*[a-f0-9]+: 62 f1 d7 af 58 f4 vaddsd %xmm4,%xmm5,%xmm6\{%k7\}\{z\}
[ ]*[a-f0-9]+: 62 f1 d7 1f 58 f4 vaddsd \{rn-sae\},%xmm4,%xmm5,%xmm6\{%k7\}
@@ -3063,4 +3074,15 @@ Disassembly of section .text:
[ ]*[a-f0-9]+: 62 f3 55 2f 0a b2 00 02 00 00 7b vrndscaless \$0x7b,0x200\(%edx\),%xmm5,%xmm6\{%k7\}
[ ]*[a-f0-9]+: 62 f3 55 2f 0a 72 80 7b vrndscaless \$0x7b,-0x200\(%edx\),%xmm5,%xmm6\{%k7\}
[ ]*[a-f0-9]+: 62 f3 55 2f 0a b2 fc fd ff ff 7b vrndscaless \$0x7b,-0x204\(%edx\),%xmm5,%xmm6\{%k7\}
+[ ]*[a-f0-9]+: 62 f3 56 28 c2 ec 7b vcmpsh \$0x7b,%xmm4,%xmm5,%k5
+[ ]*[a-f0-9]+: 62 f3 56 1f c2 ec 7b vcmpsh \$0x7b,\{sae\},%xmm4,%xmm5,%k5\{%k7\}
+[ ]*[a-f0-9]+: 62 f3 56 28 c2 29 7b vcmpsh \$0x7b,\(%ecx\),%xmm5,%k5
+[ ]*[a-f0-9]+: 62 f3 56 2f c2 ac f4 c0 1d fe ff 7b vcmpsh \$0x7b,-0x1e240\(%esp,%esi,8\),%xmm5,%k5\{%k7\}
+[ ]*[a-f0-9]+: 62 f3 56 28 c2 69 7f 7b vcmpsh \$0x7b,0xfe\(%ecx\),%xmm5,%k5
+[ ]*[a-f0-9]+: 62 f3 56 2f c2 6a 80 7b vcmpsh \$0x7b,-0x100\(%edx\),%xmm5,%k5\{%k7\}
+[ ]*[a-f0-9]+: 62 f3 7c 28 67 ec 7b vfpclasssh \$0x7b,%xmm4,%k5
+[ ]*[a-f0-9]+: 62 f3 7c 28 67 29 7b vfpclasssh \$0x7b,\(%ecx\),%k5
+[ ]*[a-f0-9]+: 62 f3 7c 2f 67 ac f4 c0 1d fe ff 7b vfpclasssh \$0x7b,-0x1e240\(%esp,%esi,8\),%k5\{%k7\}
+[ ]*[a-f0-9]+: 62 f3 7c 28 67 69 7f 7b vfpclasssh \$0x7b,0xfe\(%ecx\),%k5
+[ ]*[a-f0-9]+: 62 f3 7c 2f 67 6a 80 7b vfpclasssh \$0x7b,-0x100\(%edx\),%k5\{%k7\}
#pass
diff --git a/gas/testsuite/gas/i386/evex-lig512-intel.d b/gas/testsuite/gas/i386/evex-lig512-intel.d
index 27ac7c460f3..cb44c2db985 100644
--- a/gas/testsuite/gas/i386/evex-lig512-intel.d
+++ b/gas/testsuite/gas/i386/evex-lig512-intel.d
@@ -1536,6 +1536,17 @@ Disassembly of section .text:
[ ]*[a-f0-9]+: 62 f3 55 4f 0a b2 00 02 00 00 7b vrndscaless xmm6\{k7\},xmm5,DWORD PTR \[edx\+0x200\],0x7b
[ ]*[a-f0-9]+: 62 f3 55 4f 0a 72 80 7b vrndscaless xmm6\{k7\},xmm5,DWORD PTR \[edx-0x200\],0x7b
[ ]*[a-f0-9]+: 62 f3 55 4f 0a b2 fc fd ff ff 7b vrndscaless xmm6\{k7\},xmm5,DWORD PTR \[edx-0x204\],0x7b
+[ ]*[a-f0-9]+: 62 f3 56 48 c2 ec 7b vcmpsh k5,xmm5,xmm4,0x7b
+[ ]*[a-f0-9]+: 62 f3 56 1f c2 ec 7b vcmpsh k5\{k7\},xmm5,xmm4,\{sae\},0x7b
+[ ]*[a-f0-9]+: 62 f3 56 48 c2 29 7b vcmpsh k5,xmm5,WORD PTR \[ecx\],0x7b
+[ ]*[a-f0-9]+: 62 f3 56 4f c2 ac f4 c0 1d fe ff 7b vcmpsh k5\{k7\},xmm5,WORD PTR \[esp\+esi\*8-0x1e240\],0x7b
+[ ]*[a-f0-9]+: 62 f3 56 48 c2 69 7f 7b vcmpsh k5,xmm5,WORD PTR \[ecx\+0xfe\],0x7b
+[ ]*[a-f0-9]+: 62 f3 56 4f c2 6a 80 7b vcmpsh k5\{k7\},xmm5,WORD PTR \[edx-0x100\],0x7b
+[ ]*[a-f0-9]+: 62 f3 7c 48 67 ec 7b vfpclasssh k5,xmm4,0x7b
+[ ]*[a-f0-9]+: 62 f3 7c 48 67 29 7b vfpclasssh k5,WORD PTR \[ecx\],0x7b
+[ ]*[a-f0-9]+: 62 f3 7c 4f 67 ac f4 c0 1d fe ff 7b vfpclasssh k5\{k7\},WORD PTR \[esp\+esi\*8-0x1e240\],0x7b
+[ ]*[a-f0-9]+: 62 f3 7c 48 67 69 7f 7b vfpclasssh k5,WORD PTR \[ecx\+0xfe\],0x7b
+[ ]*[a-f0-9]+: 62 f3 7c 4f 67 6a 80 7b vfpclasssh k5\{k7\},WORD PTR \[edx-0x100\],0x7b
[ ]*[a-f0-9]+: 62 f1 d7 4f 58 f4 vaddsd xmm6\{k7\},xmm5,xmm4
[ ]*[a-f0-9]+: 62 f1 d7 cf 58 f4 vaddsd xmm6\{k7\}\{z\},xmm5,xmm4
[ ]*[a-f0-9]+: 62 f1 d7 1f 58 f4 vaddsd xmm6\{k7\},xmm5,xmm4,\{rn-sae\}
@@ -3063,4 +3074,15 @@ Disassembly of section .text:
[ ]*[a-f0-9]+: 62 f3 55 4f 0a b2 00 02 00 00 7b vrndscaless xmm6\{k7\},xmm5,DWORD PTR \[edx\+0x200\],0x7b
[ ]*[a-f0-9]+: 62 f3 55 4f 0a 72 80 7b vrndscaless xmm6\{k7\},xmm5,DWORD PTR \[edx-0x200\],0x7b
[ ]*[a-f0-9]+: 62 f3 55 4f 0a b2 fc fd ff ff 7b vrndscaless xmm6\{k7\},xmm5,DWORD PTR \[edx-0x204\],0x7b
+[ ]*[a-f0-9]+: 62 f3 56 48 c2 ec 7b vcmpsh k5,xmm5,xmm4,0x7b
+[ ]*[a-f0-9]+: 62 f3 56 1f c2 ec 7b vcmpsh k5\{k7\},xmm5,xmm4,\{sae\},0x7b
+[ ]*[a-f0-9]+: 62 f3 56 48 c2 29 7b vcmpsh k5,xmm5,WORD PTR \[ecx\],0x7b
+[ ]*[a-f0-9]+: 62 f3 56 4f c2 ac f4 c0 1d fe ff 7b vcmpsh k5\{k7\},xmm5,WORD PTR \[esp\+esi\*8-0x1e240\],0x7b
+[ ]*[a-f0-9]+: 62 f3 56 48 c2 69 7f 7b vcmpsh k5,xmm5,WORD PTR \[ecx\+0xfe\],0x7b
+[ ]*[a-f0-9]+: 62 f3 56 4f c2 6a 80 7b vcmpsh k5\{k7\},xmm5,WORD PTR \[edx-0x100\],0x7b
+[ ]*[a-f0-9]+: 62 f3 7c 48 67 ec 7b vfpclasssh k5,xmm4,0x7b
+[ ]*[a-f0-9]+: 62 f3 7c 48 67 29 7b vfpclasssh k5,WORD PTR \[ecx\],0x7b
+[ ]*[a-f0-9]+: 62 f3 7c 4f 67 ac f4 c0 1d fe ff 7b vfpclasssh k5\{k7\},WORD PTR \[esp\+esi\*8-0x1e240\],0x7b
+[ ]*[a-f0-9]+: 62 f3 7c 48 67 69 7f 7b vfpclasssh k5,WORD PTR \[ecx\+0xfe\],0x7b
+[ ]*[a-f0-9]+: 62 f3 7c 4f 67 6a 80 7b vfpclasssh k5\{k7\},WORD PTR \[edx-0x100\],0x7b
#pass
diff --git a/gas/testsuite/gas/i386/evex-lig512.d b/gas/testsuite/gas/i386/evex-lig512.d
index a3c85b837a6..bea8f28be28 100644
--- a/gas/testsuite/gas/i386/evex-lig512.d
+++ b/gas/testsuite/gas/i386/evex-lig512.d
@@ -1536,6 +1536,17 @@ Disassembly of section .text:
[ ]*[a-f0-9]+: 62 f3 55 4f 0a b2 00 02 00 00 7b vrndscaless \$0x7b,0x200\(%edx\),%xmm5,%xmm6\{%k7\}
[ ]*[a-f0-9]+: 62 f3 55 4f 0a 72 80 7b vrndscaless \$0x7b,-0x200\(%edx\),%xmm5,%xmm6\{%k7\}
[ ]*[a-f0-9]+: 62 f3 55 4f 0a b2 fc fd ff ff 7b vrndscaless \$0x7b,-0x204\(%edx\),%xmm5,%xmm6\{%k7\}
+[ ]*[a-f0-9]+: 62 f3 56 48 c2 ec 7b vcmpsh \$0x7b,%xmm4,%xmm5,%k5
+[ ]*[a-f0-9]+: 62 f3 56 1f c2 ec 7b vcmpsh \$0x7b,\{sae\},%xmm4,%xmm5,%k5\{%k7\}
+[ ]*[a-f0-9]+: 62 f3 56 48 c2 29 7b vcmpsh \$0x7b,\(%ecx\),%xmm5,%k5
+[ ]*[a-f0-9]+: 62 f3 56 4f c2 ac f4 c0 1d fe ff 7b vcmpsh \$0x7b,-0x1e240\(%esp,%esi,8\),%xmm5,%k5\{%k7\}
+[ ]*[a-f0-9]+: 62 f3 56 48 c2 69 7f 7b vcmpsh \$0x7b,0xfe\(%ecx\),%xmm5,%k5
+[ ]*[a-f0-9]+: 62 f3 56 4f c2 6a 80 7b vcmpsh \$0x7b,-0x100\(%edx\),%xmm5,%k5\{%k7\}
+[ ]*[a-f0-9]+: 62 f3 7c 48 67 ec 7b vfpclasssh \$0x7b,%xmm4,%k5
+[ ]*[a-f0-9]+: 62 f3 7c 48 67 29 7b vfpclasssh \$0x7b,\(%ecx\),%k5
+[ ]*[a-f0-9]+: 62 f3 7c 4f 67 ac f4 c0 1d fe ff 7b vfpclasssh \$0x7b,-0x1e240\(%esp,%esi,8\),%k5\{%k7\}
+[ ]*[a-f0-9]+: 62 f3 7c 48 67 69 7f 7b vfpclasssh \$0x7b,0xfe\(%ecx\),%k5
+[ ]*[a-f0-9]+: 62 f3 7c 4f 67 6a 80 7b vfpclasssh \$0x7b,-0x100\(%edx\),%k5\{%k7\}
[ ]*[a-f0-9]+: 62 f1 d7 4f 58 f4 vaddsd %xmm4,%xmm5,%xmm6\{%k7\}
[ ]*[a-f0-9]+: 62 f1 d7 cf 58 f4 vaddsd %xmm4,%xmm5,%xmm6\{%k7\}\{z\}
[ ]*[a-f0-9]+: 62 f1 d7 1f 58 f4 vaddsd \{rn-sae\},%xmm4,%xmm5,%xmm6\{%k7\}
@@ -3063,4 +3074,15 @@ Disassembly of section .text:
[ ]*[a-f0-9]+: 62 f3 55 4f 0a b2 00 02 00 00 7b vrndscaless \$0x7b,0x200\(%edx\),%xmm5,%xmm6\{%k7\}
[ ]*[a-f0-9]+: 62 f3 55 4f 0a 72 80 7b vrndscaless \$0x7b,-0x200\(%edx\),%xmm5,%xmm6\{%k7\}
[ ]*[a-f0-9]+: 62 f3 55 4f 0a b2 fc fd ff ff 7b vrndscaless \$0x7b,-0x204\(%edx\),%xmm5,%xmm6\{%k7\}
+[ ]*[a-f0-9]+: 62 f3 56 48 c2 ec 7b vcmpsh \$0x7b,%xmm4,%xmm5,%k5
+[ ]*[a-f0-9]+: 62 f3 56 1f c2 ec 7b vcmpsh \$0x7b,\{sae\},%xmm4,%xmm5,%k5\{%k7\}
+[ ]*[a-f0-9]+: 62 f3 56 48 c2 29 7b vcmpsh \$0x7b,\(%ecx\),%xmm5,%k5
+[ ]*[a-f0-9]+: 62 f3 56 4f c2 ac f4 c0 1d fe ff 7b vcmpsh \$0x7b,-0x1e240\(%esp,%esi,8\),%xmm5,%k5\{%k7\}
+[ ]*[a-f0-9]+: 62 f3 56 48 c2 69 7f 7b vcmpsh \$0x7b,0xfe\(%ecx\),%xmm5,%k5
+[ ]*[a-f0-9]+: 62 f3 56 4f c2 6a 80 7b vcmpsh \$0x7b,-0x100\(%edx\),%xmm5,%k5\{%k7\}
+[ ]*[a-f0-9]+: 62 f3 7c 48 67 ec 7b vfpclasssh \$0x7b,%xmm4,%k5
+[ ]*[a-f0-9]+: 62 f3 7c 48 67 29 7b vfpclasssh \$0x7b,\(%ecx\),%k5
+[ ]*[a-f0-9]+: 62 f3 7c 4f 67 ac f4 c0 1d fe ff 7b vfpclasssh \$0x7b,-0x1e240\(%esp,%esi,8\),%k5\{%k7\}
+[ ]*[a-f0-9]+: 62 f3 7c 48 67 69 7f 7b vfpclasssh \$0x7b,0xfe\(%ecx\),%k5
+[ ]*[a-f0-9]+: 62 f3 7c 4f 67 6a 80 7b vfpclasssh \$0x7b,-0x100\(%edx\),%k5\{%k7\}
#pass
diff --git a/gas/testsuite/gas/i386/i386.exp b/gas/testsuite/gas/i386/i386.exp
index 813a5ba50da..1e10277da31 100644
--- a/gas/testsuite/gas/i386/i386.exp
+++ b/gas/testsuite/gas/i386/i386.exp
@@ -99,6 +99,7 @@ if [gas_32_check] then {
run_list_test "suffix-bad"
run_dump_test "immed32"
run_dump_test "equ"
+ run_list_test "equ-2" "-al"
run_list_test "equ-bad"
run_dump_test "divide"
run_dump_test "quoted"
@@ -199,6 +200,7 @@ if [gas_32_check] then {
run_list_test "arch-10-2" "-march=i686 -I${srcdir}/$subdir -al"
run_list_test "arch-10-3" "-march=i686+mmx+sse4.2 -I${srcdir}/$subdir -al"
run_list_test "arch-10-4" "-march=i686+mmx+sse4+vmx+smx -I${srcdir}/$subdir -al"
+ run_list_test "arch-10-5" "-march=generic32+i686 -al"
run_dump_test "arch-11"
run_dump_test "arch-12"
run_dump_test "arch-13"
@@ -630,8 +632,6 @@ if [gas_32_check] then {
run_dump_test "ifunc"
run_list_test "ifunc-2"
run_dump_test "ifunc-3"
- run_list_test "l1om-inval" "-march=l1om --32"
- run_list_test "k1om-inval" "-march=k1om --32"
run_dump_test "localpic"
run_dump_test "debug1"
@@ -698,15 +698,17 @@ if [gas_32_check] then {
run_dump_test "iamcu-3"
run_dump_test "iamcu-4"
run_dump_test "iamcu-5"
+ run_dump_test "iamcu-6"
run_list_test "iamcu-inval-1" "-march=iamcu -al"
}
}
- # This is a PE specific test.
+ # These are PE specific tests.
if { [istarget "*-*-cygwin*"] || [istarget "*-*-pe"]
|| [istarget "*-*-mingw*"]
} then {
run_dump_test "secrel"
+ run_dump_test "secidx"
}
# Miscellaneous tests.
@@ -724,7 +726,8 @@ run_list_test "string-bad" ""
run_list_test "reg-bad" ""
run_list_test "space1" "-al"
run_list_test "xmmword" ""
-run_dump_test rept
+# Disabled due to large memory requirement.
+# run_dump_test rept
run_dump_test pr19498
run_list_test "nop-bad-1" ""
run_list_test "unspec" ""
@@ -1284,8 +1287,6 @@ if [gas_64_check] then {
run_dump_test "x86-64-opcode-inval"
run_dump_test "x86-64-opcode-inval-intel"
run_dump_test "intel-got64"
- run_dump_test "l1om"
- run_dump_test "k1om"
run_dump_test "x86-64-localpic"
run_dump_test "debug1"
run_dump_test "x86-64-mpx-branch-1"
@@ -1331,7 +1332,6 @@ if [gas_64_check] then {
run_dump_test "x86-64-property-8"
run_dump_test "x86-64-property-9"
run_dump_test "x86-64-property-14"
- run_dump_test "x86-64-code16-2"
if {[istarget "*-*-linux*"]} then {
run_dump_test "x86-64-align-branch-3"
diff --git a/gas/testsuite/gas/i386/iamcu-6.d b/gas/testsuite/gas/i386/iamcu-6.d
new file mode 100644
index 00000000000..fd60f073915
--- /dev/null
+++ b/gas/testsuite/gas/i386/iamcu-6.d
@@ -0,0 +1,3 @@
+#as: -J -march=iamcu -I${srcdir}/$subdir
+#objdump: -dw
+#dump: iamcu-1.d
diff --git a/gas/testsuite/gas/i386/iamcu-6.s b/gas/testsuite/gas/i386/iamcu-6.s
new file mode 100644
index 00000000000..a6fc0f20f28
--- /dev/null
+++ b/gas/testsuite/gas/i386/iamcu-6.s
@@ -0,0 +1,2 @@
+ .arch iamcu
+ .include "iamcu-1.s"
diff --git a/gas/testsuite/gas/i386/iamcu-inval-1.l b/gas/testsuite/gas/i386/iamcu-inval-1.l
index 7bbbc2daf9a..b07058c9dd3 100644
--- a/gas/testsuite/gas/i386/iamcu-inval-1.l
+++ b/gas/testsuite/gas/i386/iamcu-inval-1.l
@@ -5,10 +5,11 @@
.*:8: Error: .*
.*:10: Error: .*
.*:11: Error: .*
+.*:13: Error: .*
GAS LISTING .*
-[ ]*1[ ]+\# Invalid Intel MCU instructions
+[ ]*1[ ]+\# Invalid Intel MCU instructions / directives
[ ]*2[ ]+\.text
[ ]*3[ ]+
[ ]*4[ ]+fnstsw
@@ -19,3 +20,5 @@ GAS LISTING .*
[ ]*9[ ]+
[ ]*10[ ]+movq %xmm1, \(%eax\)
[ ]*11[ ]+movnti %eax, \(%eax\)
+[ ]*12[ ]+
+[ ]*13[ ]+\.arch generic32
diff --git a/gas/testsuite/gas/i386/iamcu-inval-1.s b/gas/testsuite/gas/i386/iamcu-inval-1.s
index 4e2588037f9..c944836d165 100644
--- a/gas/testsuite/gas/i386/iamcu-inval-1.s
+++ b/gas/testsuite/gas/i386/iamcu-inval-1.s
@@ -1,4 +1,4 @@
-# Invalid Intel MCU instructions
+# Invalid Intel MCU instructions / directives
.text
fnstsw
@@ -9,3 +9,5 @@
movq %xmm1, (%eax)
movnti %eax, (%eax)
+
+ .arch generic32
diff --git a/gas/testsuite/gas/i386/ilp32/ilp32.exp b/gas/testsuite/gas/i386/ilp32/ilp32.exp
index d1bb96cc1a1..c2ff5e3e919 100644
--- a/gas/testsuite/gas/i386/ilp32/ilp32.exp
+++ b/gas/testsuite/gas/i386/ilp32/ilp32.exp
@@ -38,6 +38,7 @@ if [expr ([istarget "i*86-*-*"] || [istarget "x86_64-*-*"]) && [gas_x32_check] &
}
run_list_test "reloc64" "--defsym _bad_=1"
+ run_list_test "reloc-2"
set ASFLAGS "$old_ASFLAGS"
}
diff --git a/gas/testsuite/gas/i386/ilp32/reloc-2.l b/gas/testsuite/gas/i386/ilp32/reloc-2.l
new file mode 100644
index 00000000000..9e89145daef
--- /dev/null
+++ b/gas/testsuite/gas/i386/ilp32/reloc-2.l
@@ -0,0 +1,4 @@
+.*: \.text\+2:.*addend.*too large.*
+.*: \.text\+b:.*addend.*too large.*
+.*: Assembler messages:
+.*: Fatal error: .*
diff --git a/gas/testsuite/gas/i386/ilp32/reloc-2.s b/gas/testsuite/gas/i386/ilp32/reloc-2.s
new file mode 100644
index 00000000000..f9035a8ef2b
--- /dev/null
+++ b/gas/testsuite/gas/i386/ilp32/reloc-2.s
@@ -0,0 +1,7 @@
+ .text
+_start:
+ movabs $x+0x123456789, %rax
+ movabs x+0x123456789, %eax
+
+ .data
+ .quad x+0x123456789
diff --git a/gas/testsuite/gas/i386/ilp32/reloc64.d b/gas/testsuite/gas/i386/ilp32/reloc64.d
index 78ca3fd9e38..e2c461f24e8 100644
--- a/gas/testsuite/gas/i386/ilp32/reloc64.d
+++ b/gas/testsuite/gas/i386/ilp32/reloc64.d
@@ -61,7 +61,8 @@ Disassembly of section \.text:
.*[ ]+R_X86_64_TPOFF32[ ]+xtrn
.*[ ]+R_X86_64_TPOFF32[ ]+xtrn
.*[ ]+R_X86_64_TPOFF32[ ]+xtrn
-.*[ ]+R_X86_64_64[ ]+xtrn\+0x1
+.*[ ]+R_X86_64_64[ ]+xtrn\+0x7fffffff
+.*[ ]+R_X86_64_64[ ]+xtrn\-0x80000000
Disassembly of section \.data:
#...
.*[ ]+R_X86_64_32[ ]+xtrn
diff --git a/gas/testsuite/gas/i386/ilp32/reloc64.l b/gas/testsuite/gas/i386/ilp32/reloc64.l
index 7a1808e4e96..aad4c583c7b 100644
--- a/gas/testsuite/gas/i386/ilp32/reloc64.l
+++ b/gas/testsuite/gas/i386/ilp32/reloc64.l
@@ -51,4 +51,17 @@
.*:175: Error: .*
.*:176: Error: .*
.*:177: Error: .*
-.*:189: Error: .*
+.*:190: Error: .*
+.*:193: Error: .* too large for field of 4 bytes at .*
+.*:194: Error: .* too large for field of 4 bytes at .*
+.*:195: Error: .* too large for field of 4 bytes at .*
+.*:196: Error: .* too large for field of 4 bytes at .*
+.*:197: Error: .* too large for field of 2 bytes at .*
+.*:197: Error: .* too large for field of 1 byte at .*
+.*:198: Error: .* too large for field of 2 bytes at .*
+.*:198: Error: .* too large for field of 1 byte at .*
+.*:201: Error: .* too large for field of 4 bytes at .*
+.*:202: Error: .* too large for field of 2 bytes at .*
+.*:203: Error: .* too large for field of 2 bytes at .*
+.*:204: Error: .* too large for field of 1 byte at .*
+.*:205: Error: .* too large for field of 1 byte at .*
diff --git a/gas/testsuite/gas/i386/ilp32/reloc64.s b/gas/testsuite/gas/i386/ilp32/reloc64.s
index 3ab25eff6c0..db2d2acdf5d 100644
--- a/gas/testsuite/gas/i386/ilp32/reloc64.s
+++ b/gas/testsuite/gas/i386/ilp32/reloc64.s
@@ -178,7 +178,8 @@ bad .byte xtrn@tpoff
.text
mov xtrn@tpoff (%rbx), %eax
- movabsq $xtrn - 4294967295, %rbp
+ movabsq $xtrn + 0x7fffffff, %rbx
+ movabsq $xtrn - 0x80000000, %rbp
.data
.quad xtrn
@@ -187,3 +188,18 @@ bad .byte xtrn@tpoff
.long xtrn@got - 4
.long xtrn@got + 4
bad .long xtrn@plt - .
+
+ .text
+bad add $x+0x123456789, %rax
+bad add $x+0x123456789, %eax
+bad add x+0x123456789, %eax
+bad add x+0x123456789(%eax), %eax
+bad enter $x+0x123456789, $x+0x123456789
+bad enter $x+0x12345, $x+0x123
+
+ .data
+bad .long x+0x123456789
+bad .word x+0x123456789
+bad .word x+0x12345
+bad .byte x+0x123456789
+bad .byte x+0x123
diff --git a/gas/testsuite/gas/i386/ilp32/rex.d b/gas/testsuite/gas/i386/ilp32/rex.d
index d8bc1b528c3..63b696f22b8 100644
--- a/gas/testsuite/gas/i386/ilp32/rex.d
+++ b/gas/testsuite/gas/i386/ilp32/rex.d
@@ -2,46 +2,4 @@
#objdump: -dw
#name: x86-64 (ILP32) manual rex prefix use
#notarget: x86_64-*-elf*
-
-.*: +file format .*
-
-Disassembly of section .text:
-
-0+ <_start>:
-[ ]*[0-9a-f]+:[ ]+40 0f ae 00[ ]+rex fxsave[ ]+\(%rax\)
-[ ]*[0-9a-f]+:[ ]+48 0f ae 00[ ]+fxsave64[ ]+\(%rax\)
-[ ]*[0-9a-f]+:[ ]+41 0f ae 00[ ]+fxsave[ ]+\(%r8\)
-[ ]*[0-9a-f]+:[ ]+49 0f ae 00[ ]+fxsave64[ ]+\(%r8\)
-[ ]*[0-9a-f]+:[ ]+42 0f ae 04 05 00 00 00 00[ ]+fxsave[ ]+(0x0)?\(,%r8(,1)?\)
-[ ]*[0-9a-f]+:[ ]+4a 0f ae 04 05 00 00 00 00[ ]+fxsave64[ ]+(0x0)?\(,%r8(,1)?\)
-[ ]*[0-9a-f]+:[ ]+43 0f ae 04 00[ ]+fxsave[ ]+\(%r8,%r8(,1)?\)
-[ ]*[0-9a-f]+:[ ]+4b 0f ae 04 00[ ]+fxsave64[ ]+\(%r8,%r8(,1)?\)
-[ ]*[0-9a-f]+:[ ]+48 03 04 00[ ]+add[ ]+\(%rax,%rax(,1)?\),%rax
-[ ]*[0-9a-f]+:[ ]+44 03 04 00[ ]+add[ ]+\(%rax,%rax(,1)?\),%r8d
-[ ]*[0-9a-f]+:[ ]+41 03 04 00[ ]+add[ ]+\(%r8,%rax(,1)?\),%eax
-[ ]*[0-9a-f]+:[ ]+42 03 04 00[ ]+add[ ]+\(%rax,%r8(,1)?\),%eax
-[ ]*[0-9a-f]+:[ ]+49 03 04 00[ ]+add[ ]+\(%r8,%rax(,1)?\),%rax
-[ ]*[0-9a-f]+:[ ]+46 03 04 00[ ]+add[ ]+\(%rax,%r8(,1)?\),%r8d
-[ ]*[0-9a-f]+:[ ]+45 03 04 00[ ]+add[ ]+\(%r8,%rax(,1)?\),%r8d
-[ ]*[0-9a-f]+:[ ]+4a 03 04 00[ ]+add[ ]+\(%rax,%r8(,1)?\),%rax
-[ ]*[0-9a-f]+:[ ]+41\s+rex\.B
-[ ]*[0-9a-f]+:[ ]+9b dd 30\s+fsave\s+\(%rax\)
-[ ]*[0-9a-f]+:[ ]+9b 41 dd 30\s+fsave\s+\(%r8\)
-[ ]*[0-9a-f]+:[ ]+40 c5 f9 28 00[ ]+rex vmovapd \(%rax\),%xmm0
-[ ]*[0-9a-f]+:[ ]+40[ ]+rex
-[ ]*[0-9a-f]+:[ ]+41[ ]+rex.B
-[ ]*[0-9a-f]+:[ ]+42[ ]+rex.X
-[ ]*[0-9a-f]+:[ ]+43[ ]+rex.XB
-[ ]*[0-9a-f]+:[ ]+44[ ]+rex.R
-[ ]*[0-9a-f]+:[ ]+45[ ]+rex.RB
-[ ]*[0-9a-f]+:[ ]+46[ ]+rex.RX
-[ ]*[0-9a-f]+:[ ]+47[ ]+rex.RXB
-[ ]*[0-9a-f]+:[ ]+48[ ]+rex.W
-[ ]*[0-9a-f]+:[ ]+49[ ]+rex.WB
-[ ]*[0-9a-f]+:[ ]+4a[ ]+rex.WX
-[ ]*[0-9a-f]+:[ ]+4b[ ]+rex.WXB
-[ ]*[0-9a-f]+:[ ]+4c[ ]+rex.WR
-[ ]*[0-9a-f]+:[ ]+4d[ ]+rex.WRB
-[ ]*[0-9a-f]+:[ ]+4e[ ]+rex.WRX
-[ ]*[0-9a-f]+:[ ]+4f[ ]+rex.WRXB
-#pass
+#dump: ../rex.d
diff --git a/gas/testsuite/gas/i386/inval-avx512f.l b/gas/testsuite/gas/i386/inval-avx512f.l
index c47ac7db90c..d46e61a9a9a 100644
--- a/gas/testsuite/gas/i386/inval-avx512f.l
+++ b/gas/testsuite/gas/i386/inval-avx512f.l
@@ -218,6 +218,10 @@
.*:313: Error: .*unsupported broadcast for `vcvtneps2bf16'
.*:316: Error: .*unsupported broadcast for `vcvtneps2bf16'
.*:319: Error: .*unsupported broadcast for `vcvtneps2bf16'
+.*:321: Error: .*vaddps.*
+.*:322: Error: .*vcmpss.*
+.*:324: Error: .*vaddss.*
+.*:325: Error: .*vcmpps.*
GAS LISTING .*
@@ -569,6 +573,12 @@ GAS LISTING .*
[ ]*318 \?\?\?\? 62F27E38[ ]+vcvtneps2bf16 \(%eax\)\{1to8\}, %xmm1
[ ]*318[ ]+7208
[ ]*319[ ]+vcvtneps2bf16 \(%eax\)\{1to16\}, %xmm1
-[ ]*320[ ]+\?\?\?\? 8DB42600 \.p2align 4
-[ ]*320[ ]+0000008D
-[ ]*320[ ]+7600
+[ ]*320[ ]*
+[ ]*321[ ]+vaddps \$0xcc, %zmm0, %zmm0, %zmm0
+[ ]*322[ ]+vcmpss \$0, \$0xcc, %xmm0, %xmm0, %k0
+[ ]*323[ ]*
+ GAS LISTING .*
+#...
+[ ]*324[ ]+vaddss \{sae\}, %xmm0, %xmm0, %xmm0
+[ ]*325[ ]+vcmpps \$0, \{rn-sae\}, %zmm0, %zmm0, %k0
+#pass
diff --git a/gas/testsuite/gas/i386/inval-avx512f.s b/gas/testsuite/gas/i386/inval-avx512f.s
index 7cca7ef854c..d9a85e005b3 100644
--- a/gas/testsuite/gas/i386/inval-avx512f.s
+++ b/gas/testsuite/gas/i386/inval-avx512f.s
@@ -317,4 +317,11 @@ _start:
vcvtneps2bf16 (%eax){1to4}, %xmm1
vcvtneps2bf16 (%eax){1to8}, %xmm1
vcvtneps2bf16 (%eax){1to16}, %xmm1
+
+ vaddps $0xcc, %zmm0, %zmm0, %zmm0
+ vcmpss $0, $0xcc, %xmm0, %xmm0, %k0
+
+ vaddss {sae}, %xmm0, %xmm0, %xmm0
+ vcmpps $0, {rn-sae}, %zmm0, %zmm0, %k0
+
.p2align 4
diff --git a/gas/testsuite/gas/i386/inval-equ-2.l b/gas/testsuite/gas/i386/inval-equ-2.l
index 11f5e4ed3e9..839bc8d3523 100644
--- a/gas/testsuite/gas/i386/inval-equ-2.l
+++ b/gas/testsuite/gas/i386/inval-equ-2.l
@@ -1,4 +1,7 @@
.*: Assembler messages:
+.*:3: Error: .*
+.*:5: Error: .*
+.*:8: Error: .*
.*: Error: .*
.*: Error: .*
.*: Error: .*
@@ -15,6 +18,9 @@ GAS LISTING .*
[ ]*6[ ]+\.globl bar2
[ ]*7[ ]+\.set bar3,\(%eax\+1\)
[ ]*8[ ]+\?\?\?\? A1...... mov bar3,%eax
+.* Error: invalid .* relocation against register
+.* Error: invalid .* relocation against register
+.* Error: invalid .* relocation against register
.* Error: can't make global register symbol `bar1'
.* Error: can't make global register symbol `bar2'
.* Error: can't make global register symbol `bar3'
diff --git a/gas/testsuite/gas/i386/inval-pseudo.l b/gas/testsuite/gas/i386/inval-pseudo.l
index 9df0a9851fd..f3b027476f8 100644
--- a/gas/testsuite/gas/i386/inval-pseudo.l
+++ b/gas/testsuite/gas/i386/inval-pseudo.l
@@ -2,6 +2,8 @@
.*:3: Error: .*
.*:5: Error: .*
.*:6: Error: .*
+.*:7: Error: .*
+.*:9: Error: .*
GAS LISTING .*
@@ -11,5 +13,7 @@ GAS LISTING .*
[ ]*4[ ]+\?\?\?\? 90 nop
[ ]*5[ ]+\{disp32\} movb \(%bp\),%al
[ ]*6[ ]+\{disp16\} movb \(%ebp\),%al
-[ ]*7[ ]+\?\?\?\? 00000000 \.p2align 4,0
+[ ]*7[ ]+\{disp16\} jmp \.
+[ ]*8[ ]+\.code16
+[ ]*9[ ]+\{disp32\} jmp \.
#...
diff --git a/gas/testsuite/gas/i386/inval-pseudo.s b/gas/testsuite/gas/i386/inval-pseudo.s
index b5a6233eb1d..5184b67004a 100644
--- a/gas/testsuite/gas/i386/inval-pseudo.s
+++ b/gas/testsuite/gas/i386/inval-pseudo.s
@@ -4,4 +4,7 @@
nop
{disp32} movb (%bp),%al
{disp16} movb (%ebp),%al
+ {disp16} jmp .
+ .code16
+ {disp32} jmp .
.p2align 4,0
diff --git a/gas/testsuite/gas/i386/k1om-inval.l b/gas/testsuite/gas/i386/k1om-inval.l
deleted file mode 100644
index 607bc628d29..00000000000
--- a/gas/testsuite/gas/i386/k1om-inval.l
+++ /dev/null
@@ -1,2 +0,0 @@
-Assembler messages:
-Fatal error: Intel K1OM is 64bit only
diff --git a/gas/testsuite/gas/i386/k1om.d b/gas/testsuite/gas/i386/k1om.d
deleted file mode 100644
index 4eb13e3a258..00000000000
--- a/gas/testsuite/gas/i386/k1om.d
+++ /dev/null
@@ -1,260 +0,0 @@
-#source: x86_64.s
-#as: -J -march=k1om
-#objdump: -dw
-#name: k1om
-#warning_output: x86_64.e
-
-.*: +file format elf64-k1om.*
-
-Disassembly of section .text:
-
-0+ <.*>:
-[ ]*[a-f0-9]+: 01 ca add %ecx,%edx
-[ ]*[a-f0-9]+: 44 01 ca add %r9d,%edx
-[ ]*[a-f0-9]+: 41 01 ca add %ecx,%r10d
-[ ]*[a-f0-9]+: 48 01 ca add %rcx,%rdx
-[ ]*[a-f0-9]+: 4d 01 ca add %r9,%r10
-[ ]*[a-f0-9]+: 41 01 c0 add %eax,%r8d
-[ ]*[a-f0-9]+: 66 41 01 c0 add %ax,%r8w
-[ ]*[a-f0-9]+: 49 01 c0 add %rax,%r8
-[ ]*[a-f0-9]+: 05 11 22 33 44 add \$0x44332211,%eax
-[ ]*[a-f0-9]+: 48 05 11 22 33 f4 add \$0xfffffffff4332211,%rax
-[ ]*[a-f0-9]+: 66 05 33 44 add \$0x4433,%ax
-[ ]*[a-f0-9]+: 48 05 11 22 33 44 add \$0x44332211,%rax
-[ ]*[a-f0-9]+: 00 ca add %cl,%dl
-[ ]*[a-f0-9]+: 00 f7 add %dh,%bh
-[ ]*[a-f0-9]+: 40 00 f7 add %sil,%dil
-[ ]*[a-f0-9]+: 41 00 f7 add %sil,%r15b
-[ ]*[a-f0-9]+: 44 00 f7 add %r14b,%dil
-[ ]*[a-f0-9]+: 45 00 f7 add %r14b,%r15b
-[ ]*[a-f0-9]+: 50 push %rax
-[ ]*[a-f0-9]+: 41 50 push %r8
-[ ]*[a-f0-9]+: 41 59 pop %r9
-[ ]*[a-f0-9]+: 04 11 add \$0x11,%al
-[ ]*[a-f0-9]+: 80 c4 11 add \$0x11,%ah
-[ ]*[a-f0-9]+: 40 80 c4 11 add \$0x11,%spl
-[ ]*[a-f0-9]+: 41 80 c0 11 add \$0x11,%r8b
-[ ]*[a-f0-9]+: 41 80 c4 11 add \$0x11,%r12b
-[ ]*[a-f0-9]+: 0f 20 c0 mov %cr0,%rax
-[ ]*[a-f0-9]+: 41 0f 20 c0 mov %cr0,%r8
-[ ]*[a-f0-9]+: 44 0f 20 c0 mov %cr8,%rax
-[ ]*[a-f0-9]+: 44 0f 22 c0 mov %rax,%cr8
-[ ]*[a-f0-9]+: f3 48 a5 rep movsq %ds:\(%rsi\),%es:\(%rdi\)
-[ ]*[a-f0-9]+: 66 f3 a5 rep movsw %ds:\(%rsi\),%es:\(%rdi\)
-[ ]*[a-f0-9]+: f3 48 a5 rep movsq %ds:\(%rsi\),%es:\(%rdi\)
-[ ]*[a-f0-9]+: b0 11 mov \$0x11,%al
-[ ]*[a-f0-9]+: b4 11 mov \$0x11,%ah
-[ ]*[a-f0-9]+: 40 b4 11 mov \$0x11,%spl
-[ ]*[a-f0-9]+: 41 b4 11 mov \$0x11,%r12b
-[ ]*[a-f0-9]+: b8 44 33 22 11 mov \$0x11223344,%eax
-[ ]*[a-f0-9]+: 41 b8 44 33 22 11 mov \$0x11223344,%r8d
-[ ]*[a-f0-9]+: 48 b8 88 77 66 55 44 33 22 11 movabs \$0x1122334455667788,%rax
-[ ]*[a-f0-9]+: 49 b8 88 77 66 55 44 33 22 11 movabs \$0x1122334455667788,%r8
-[ ]*[a-f0-9]+: 03 00 add \(%rax\),%eax
-[ ]*[a-f0-9]+: 41 03 00 add \(%r8\),%eax
-[ ]*[a-f0-9]+: 45 03 00 add \(%r8\),%r8d
-[ ]*[a-f0-9]+: 49 03 00 add \(%r8\),%rax
-[ ]*[a-f0-9]+: 03 05 22 22 22 22 add 0x22222222\(%rip\),%eax # 2222[0-9a-f]* <foo\+0x2222[0-9a-f]*>
-[ ]*[a-f0-9]+: 03 45 00 add 0x0\(%rbp\),%eax
-[ ]*[a-f0-9]+: 03 04 25 22 22 22 22 add 0x22222222,%eax
-[ ]*[a-f0-9]+: 41 03 45 00 add 0x0\(%r13\),%eax
-[ ]*[a-f0-9]+: 03 04 80 add \(%rax,%rax,4\),%eax
-[ ]*[a-f0-9]+: 41 03 04 80 add \(%r8,%rax,4\),%eax
-[ ]*[a-f0-9]+: 45 03 04 80 add \(%r8,%rax,4\),%r8d
-[ ]*[a-f0-9]+: 43 03 04 80 add \(%r8,%r8,4\),%eax
-[ ]*[a-f0-9]+: 46 01 04 81 add %r8d,\(%rcx,%r8,4\)
-[ ]*[a-f0-9]+: 03 14 c0 add \(%rax,%rax,8\),%edx
-[ ]*[a-f0-9]+: 03 14 c8 add \(%rax,%rcx,8\),%edx
-[ ]*[a-f0-9]+: 03 14 d0 add \(%rax,%rdx,8\),%edx
-[ ]*[a-f0-9]+: 03 14 d8 add \(%rax,%rbx,8\),%edx
-[ ]*[a-f0-9]+: 03 10 add \(%rax\),%edx
-[ ]*[a-f0-9]+: 03 14 e8 add \(%rax,%rbp,8\),%edx
-[ ]*[a-f0-9]+: 03 14 f0 add \(%rax,%rsi,8\),%edx
-[ ]*[a-f0-9]+: 03 14 f8 add \(%rax,%rdi,8\),%edx
-[ ]*[a-f0-9]+: 42 03 14 c0 add \(%rax,%r8,8\),%edx
-[ ]*[a-f0-9]+: 42 03 14 c8 add \(%rax,%r9,8\),%edx
-[ ]*[a-f0-9]+: 42 03 14 d0 add \(%rax,%r10,8\),%edx
-[ ]*[a-f0-9]+: 42 03 14 d8 add \(%rax,%r11,8\),%edx
-[ ]*[a-f0-9]+: 42 03 14 e0 add \(%rax,%r12,8\),%edx
-[ ]*[a-f0-9]+: 42 03 14 e8 add \(%rax,%r13,8\),%edx
-[ ]*[a-f0-9]+: 42 03 14 f0 add \(%rax,%r14,8\),%edx
-[ ]*[a-f0-9]+: 42 03 14 f8 add \(%rax,%r15,8\),%edx
-[ ]*[a-f0-9]+: 83 c1 11 add \$0x11,%ecx
-[ ]*[a-f0-9]+: 83 00 11 addl \$0x11,\(%rax\)
-[ ]*[a-f0-9]+: 48 83 00 11 addq \$0x11,\(%rax\)
-[ ]*[a-f0-9]+: 41 83 00 11 addl \$0x11,\(%r8\)
-[ ]*[a-f0-9]+: 83 04 81 11 addl \$0x11,\(%rcx,%rax,4\)
-[ ]*[a-f0-9]+: 41 83 04 81 11 addl \$0x11,\(%r9,%rax,4\)
-[ ]*[a-f0-9]+: 42 83 04 81 11 addl \$0x11,\(%rcx,%r8,4\)
-[ ]*[a-f0-9]+: 83 05 22 22 22 22 33 addl \$0x33,0x22222222\(%rip\) # 2222[0-9a-f]* <foo\+0x2222[0-9a-f]*>
-[ ]*[a-f0-9]+: 48 83 05 22 22 22 22 33 addq \$0x33,0x22222222\(%rip\) # 2222[0-9a-f]* <foo\+0x2222[0-9a-f]*>
-[ ]*[a-f0-9]+: 81 05 22 22 22 22 33 33 33 33 addl \$0x33333333,0x22222222\(%rip\) # 2222[0-9a-f]* <foo\+0x2222[0-9a-f]*>
-[ ]*[a-f0-9]+: 48 81 05 22 22 22 22 33 33 33 33 addq \$0x33333333,0x22222222\(%rip\) # 2222[0-9a-f]* <foo\+0x2222[0-9a-f]*>
-[ ]*[a-f0-9]+: 83 04 c5 22 22 22 22 33 addl \$0x33,0x22222222\(,%rax,8\)
-[ ]*[a-f0-9]+: 83 80 22 22 22 22 33 addl \$0x33,0x22222222\(%rax\)
-[ ]*[a-f0-9]+: 83 80 22 22 22 22 33 addl \$0x33,0x22222222\(%rax\)
-[ ]*[a-f0-9]+: 41 83 04 e8 33 addl \$0x33,\(%r8,%rbp,8\)
-[ ]*[a-f0-9]+: 83 04 25 22 22 22 22 33 addl \$0x33,0x22222222
-[ ]*[a-f0-9]+: a0 11 22 33 44 55 66 77 88 movabs 0x8877665544332211,%al
-[ ]*[a-f0-9]+: a1 11 22 33 44 55 66 77 88 movabs 0x8877665544332211,%eax
-[ ]*[a-f0-9]+: a2 11 22 33 44 55 66 77 88 movabs %al,0x8877665544332211
-[ ]*[a-f0-9]+: a3 11 22 33 44 55 66 77 88 movabs %eax,0x8877665544332211
-[ ]*[a-f0-9]+: 48 a1 11 22 33 44 55 66 77 88 movabs 0x8877665544332211,%rax
-[ ]*[a-f0-9]+: 48 a3 11 22 33 44 55 66 77 88 movabs %rax,0x8877665544332211
-[ ]*[a-f0-9]+: 48 99 cqto
-[ ]*[a-f0-9]+: 48 98 cltq
-[ ]*[a-f0-9]+: 48 63 c0 movslq %eax,%rax
-[ ]*[a-f0-9]+: 48 0f bf c0 movswq %ax,%rax
-[ ]*[a-f0-9]+: 48 0f be c0 movsbq %al,%rax
-[ ]*[a-f0-9]+: cb lret *
-[ ]*[a-f0-9]+: ca 10 00 lret \$0x10
-[ ]*[a-f0-9]+: 66 cb lretw *
-[ ]*[a-f0-9]+: 66 ca 02 00 lretw \$0x2
-[ ]*[a-f0-9]+: cb lret *
-[ ]*[a-f0-9]+: ca 04 00 lret \$0x4
-[ ]*[a-f0-9]+: 48 cb lretq *
-[ ]*[a-f0-9]+: 48 ca 08 00 lretq \$0x8
-
-[0-9a-f]+ <bar>:
-[ ]*[a-f0-9]+: b0 00 mov \$0x0,%al
-[ ]*[a-f0-9]+: 66 b8 00 00 mov \$0x0,%ax
-[ ]*[a-f0-9]+: b8 00 00 00 00 mov \$0x0,%eax
-[ ]*[a-f0-9]+: 48 c7 c0 00 00 00 00 mov \$0x0,%rax
-[ ]*[a-f0-9]+: a1 00 00 00 00 00 00 00 00 movabs 0x0,%eax
-[ ]*[a-f0-9]+: 8b 04 25 00 00 00 00 mov 0x0,%eax
-[ ]*[a-f0-9]+: 8b 80 00 00 00 00 mov 0x0\(%rax\),%eax
-[ ]*[a-f0-9]+: 8b 05 00 00 00 00 mov 0x0\(%rip\),%eax # [0-9a-f]+ <bar\+0x[0-9a-f]+>
-[ ]*[a-f0-9]+: b0 00 mov \$0x0,%al
-[ ]*[a-f0-9]+: 66 b8 00 00 mov \$0x0,%ax
-[ ]*[a-f0-9]+: b8 00 00 00 00 mov \$0x0,%eax
-[ ]*[a-f0-9]+: 48 c7 c0 00 00 00 00 mov \$0x0,%rax
-[ ]*[a-f0-9]+: a1 00 00 00 00 00 00 00 00 movabs 0x0,%eax
-[ ]*[a-f0-9]+: 8b 04 25 00 00 00 00 mov 0x0,%eax
-[ ]*[a-f0-9]+: 8b 80 00 00 00 00 mov 0x0\(%rax\),%eax
-[ ]*[a-f0-9]+: 8b 05 00 00 00 00 mov 0x0\(%rip\),%eax # [0-9a-f]+ <foo>
-
-[0-9a-f]+ <foo>:
-[ ]*[a-f0-9]+: a0 11 22 33 44 55 66 77 88 movabs 0x8877665544332211,%al
-[ ]*[a-f0-9]+: 66 a1 11 22 33 44 55 66 77 88 movabs 0x8877665544332211,%ax
-[ ]*[a-f0-9]+: a1 11 22 33 44 55 66 77 88 movabs 0x8877665544332211,%eax
-[ ]*[a-f0-9]+: 48 a1 11 22 33 44 55 66 77 88 movabs 0x8877665544332211,%rax
-[ ]*[a-f0-9]+: a2 11 22 33 44 55 66 77 88 movabs %al,0x8877665544332211
-[ ]*[a-f0-9]+: 66 a3 11 22 33 44 55 66 77 88 movabs %ax,0x8877665544332211
-[ ]*[a-f0-9]+: a3 11 22 33 44 55 66 77 88 movabs %eax,0x8877665544332211
-[ ]*[a-f0-9]+: 48 a3 11 22 33 44 55 66 77 88 movabs %rax,0x8877665544332211
-[ ]*[a-f0-9]+: a0 11 22 33 44 55 66 77 88 movabs 0x8877665544332211,%al
-[ ]*[a-f0-9]+: 66 a1 11 22 33 44 55 66 77 88 movabs 0x8877665544332211,%ax
-[ ]*[a-f0-9]+: a1 11 22 33 44 55 66 77 88 movabs 0x8877665544332211,%eax
-[ ]*[a-f0-9]+: 48 a1 11 22 33 44 55 66 77 88 movabs 0x8877665544332211,%rax
-[ ]*[a-f0-9]+: a2 11 22 33 44 55 66 77 88 movabs %al,0x8877665544332211
-[ ]*[a-f0-9]+: 66 a3 11 22 33 44 55 66 77 88 movabs %ax,0x8877665544332211
-[ ]*[a-f0-9]+: a3 11 22 33 44 55 66 77 88 movabs %eax,0x8877665544332211
-[ ]*[a-f0-9]+: 48 a3 11 22 33 44 55 66 77 88 movabs %rax,0x8877665544332211
-[ ]*[a-f0-9]+: 8a 04 25 11 22 33 ff mov 0xffffffffff332211,%al
-[ ]*[a-f0-9]+: 66 8b 04 25 11 22 33 ff mov 0xffffffffff332211,%ax
-[ ]*[a-f0-9]+: 8b 04 25 11 22 33 ff mov 0xffffffffff332211,%eax
-[ ]*[a-f0-9]+: 48 8b 04 25 11 22 33 ff mov 0xffffffffff332211,%rax
-[ ]*[a-f0-9]+: 88 04 25 11 22 33 ff mov %al,0xffffffffff332211
-[ ]*[a-f0-9]+: 66 89 04 25 11 22 33 ff mov %ax,0xffffffffff332211
-[ ]*[a-f0-9]+: 89 04 25 11 22 33 ff mov %eax,0xffffffffff332211
-[ ]*[a-f0-9]+: 48 89 04 25 11 22 33 ff mov %rax,0xffffffffff332211
-[ ]*[a-f0-9]+: 8a 04 25 11 22 33 ff mov 0xffffffffff332211,%al
-[ ]*[a-f0-9]+: 66 8b 04 25 11 22 33 ff mov 0xffffffffff332211,%ax
-[ ]*[a-f0-9]+: 8b 04 25 11 22 33 ff mov 0xffffffffff332211,%eax
-[ ]*[a-f0-9]+: 48 8b 04 25 11 22 33 ff mov 0xffffffffff332211,%rax
-[ ]*[a-f0-9]+: 88 04 25 11 22 33 ff mov %al,0xffffffffff332211
-[ ]*[a-f0-9]+: 66 89 04 25 11 22 33 ff mov %ax,0xffffffffff332211
-[ ]*[a-f0-9]+: 89 04 25 11 22 33 ff mov %eax,0xffffffffff332211
-[ ]*[a-f0-9]+: 48 89 04 25 11 22 33 ff mov %rax,0xffffffffff332211
-[ ]*[a-f0-9]+: 48 0f c7 08 cmpxchg16b \(%rax\)
-[ ]*[a-f0-9]+: 48 0f c7 08 cmpxchg16b \(%rax\)
-[ ]*[a-f0-9]+: 66 0f be f0 movsbw %al,%si
-[ ]*[a-f0-9]+: 0f be f0 movsbl %al,%esi
-[ ]*[a-f0-9]+: 48 0f be f0 movsbq %al,%rsi
-[ ]*[a-f0-9]+: 0f bf f0 movswl %ax,%esi
-[ ]*[a-f0-9]+: 48 0f bf f0 movswq %ax,%rsi
-[ ]*[a-f0-9]+: 48 63 f0 movslq %eax,%rsi
-[ ]*[a-f0-9]+: 66 0f be 10 movsbw \(%rax\),%dx
-[ ]*[a-f0-9]+: 0f be 10 movsbl \(%rax\),%edx
-[ ]*[a-f0-9]+: 48 0f be 10 movsbq \(%rax\),%rdx
-[ ]*[a-f0-9]+: 66 0f be 10 movsbw \(%rax\),%dx
-[ ]*[a-f0-9]+: 0f bf 10 movswl \(%rax\),%edx
-[ ]*[a-f0-9]+: 48 0f bf 10 movswq \(%rax\),%rdx
-[ ]*[a-f0-9]+: 66 0f b6 f0 movzbw %al,%si
-[ ]*[a-f0-9]+: 0f b6 f0 movzbl %al,%esi
-[ ]*[a-f0-9]+: 48 0f b6 f0 movzbq %al,%rsi
-[ ]*[a-f0-9]+: 0f b7 f0 movzwl %ax,%esi
-[ ]*[a-f0-9]+: 48 0f b7 f0 movzwq %ax,%rsi
-[ ]*[a-f0-9]+: 66 0f b6 10 movzbw \(%rax\),%dx
-[ ]*[a-f0-9]+: 0f b6 10 movzbl \(%rax\),%edx
-[ ]*[a-f0-9]+: 48 0f b6 10 movzbq \(%rax\),%rdx
-[ ]*[a-f0-9]+: 66 0f b6 10 movzbw \(%rax\),%dx
-[ ]*[a-f0-9]+: 0f b6 10 movzbl \(%rax\),%edx
-[ ]*[a-f0-9]+: 48 0f b6 10 movzbq \(%rax\),%rdx
-[ ]*[a-f0-9]+: 66 0f b6 10 movzbw \(%rax\),%dx
-[ ]*[a-f0-9]+: 0f b7 10 movzwl \(%rax\),%edx
-[ ]*[a-f0-9]+: 48 0f b7 10 movzwq \(%rax\),%rdx
-[ ]*[a-f0-9]+: 66 0f be f0 movsbw %al,%si
-[ ]*[a-f0-9]+: 0f be f0 movsbl %al,%esi
-[ ]*[a-f0-9]+: 48 0f be f0 movsbq %al,%rsi
-[ ]*[a-f0-9]+: 0f bf f0 movswl %ax,%esi
-[ ]*[a-f0-9]+: 48 0f bf f0 movswq %ax,%rsi
-[ ]*[a-f0-9]+: 48 63 f0 movslq %eax,%rsi
-[ ]*[a-f0-9]+: 0f be 10 movsbl \(%rax\),%edx
-[ ]*[a-f0-9]+: 48 0f be 10 movsbq \(%rax\),%rdx
-[ ]*[a-f0-9]+: 66 0f be 10 movsbw \(%rax\),%dx
-[ ]*[a-f0-9]+: 0f bf 10 movswl \(%rax\),%edx
-[ ]*[a-f0-9]+: 48 0f bf 10 movswq \(%rax\),%rdx
-[ ]*[a-f0-9]+: 66 0f b6 f0 movzbw %al,%si
-[ ]*[a-f0-9]+: 0f b6 f0 movzbl %al,%esi
-[ ]*[a-f0-9]+: 48 0f b6 f0 movzbq %al,%rsi
-[ ]*[a-f0-9]+: 0f b7 f0 movzwl %ax,%esi
-[ ]*[a-f0-9]+: 48 0f b7 f0 movzwq %ax,%rsi
-[ ]*[a-f0-9]+: 0f b6 10 movzbl \(%rax\),%edx
-[ ]*[a-f0-9]+: 48 0f b6 10 movzbq \(%rax\),%rdx
-[ ]*[a-f0-9]+: 66 0f b6 10 movzbw \(%rax\),%dx
-[ ]*[a-f0-9]+: 0f b7 10 movzwl \(%rax\),%edx
-[ ]*[a-f0-9]+: 48 0f b7 10 movzwq \(%rax\),%rdx
-[ ]*[a-f0-9]+: f3 0f 7e 0c 24 movq \(%rsp\),%xmm1
-[ ]*[a-f0-9]+: f3 0f 7e 0c 24 movq \(%rsp\),%xmm1
-[ ]*[a-f0-9]+: 66 0f d6 0c 24 movq %xmm1,\(%rsp\)
-[ ]*[a-f0-9]+: 66 0f d6 0c 24 movq %xmm1,\(%rsp\)
-[ ]*[a-f0-9]+: df e0 fnstsw %ax
-[ ]*[a-f0-9]+: df e0 fnstsw %ax
-[ ]*[a-f0-9]+: 9b df e0 fstsw %ax
-[ ]*[a-f0-9]+: 9b df e0 fstsw %ax
-[ ]*[a-f0-9]+: df e0 fnstsw %ax
-[ ]*[a-f0-9]+: df e0 fnstsw %ax
-[ ]*[a-f0-9]+: 9b df e0 fstsw %ax
-[ ]*[a-f0-9]+: 9b df e0 fstsw %ax
-[ ]*[a-f0-9]+: 66 0f be 00 movsbw \(%rax\),%ax
-[ ]*[a-f0-9]+: 66 0f be 10 movsbw \(%rax\),%dx
-[ ]*[a-f0-9]+: 0f be 10 movsbl \(%rax\),%edx
-[ ]*[a-f0-9]+: 48 0f be 10 movsbq \(%rax\),%rdx
-[ ]*[a-f0-9]+: 0f bf 10 movswl \(%rax\),%edx
-[ ]*[a-f0-9]+: 48 0f bf 10 movswq \(%rax\),%rdx
-[ ]*[a-f0-9]+: 48 63 10 movslq \(%rax\),%rdx
-[ ]*[a-f0-9]+: 48 63 00 movslq \(%rax\),%rax
-[ ]*[a-f0-9]+: 66 0f b6 00 movzbw \(%rax\),%ax
-[ ]*[a-f0-9]+: 66 0f b6 10 movzbw \(%rax\),%dx
-[ ]*[a-f0-9]+: 0f b6 10 movzbl \(%rax\),%edx
-[ ]*[a-f0-9]+: 48 0f b6 10 movzbq \(%rax\),%rdx
-[ ]*[a-f0-9]+: 0f b7 10 movzwl \(%rax\),%edx
-[ ]*[a-f0-9]+: 48 0f b7 10 movzwq \(%rax\),%rdx
-[ ]*[a-f0-9]+: 0f c3 00 movnti %eax,\(%rax\)
-[ ]*[a-f0-9]+: 0f c3 00 movnti %eax,\(%rax\)
-[ ]*[a-f0-9]+: 48 0f c3 00 movnti %rax,\(%rax\)
-[ ]*[a-f0-9]+: 48 0f c3 00 movnti %rax,\(%rax\)
-[ ]*[a-f0-9]+: 66 0f be 00 movsbw \(%rax\),%ax
-[ ]*[a-f0-9]+: 0f be 00 movsbl \(%rax\),%eax
-[ ]*[a-f0-9]+: 0f bf 00 movswl \(%rax\),%eax
-[ ]*[a-f0-9]+: 48 0f bf 00 movswq \(%rax\),%rax
-[ ]*[a-f0-9]+: 48 63 00 movslq \(%rax\),%rax
-[ ]*[a-f0-9]+: 48 63 00 movslq \(%rax\),%rax
-[ ]*[a-f0-9]+: 66 0f b6 00 movzbw \(%rax\),%ax
-[ ]*[a-f0-9]+: 0f b6 00 movzbl \(%rax\),%eax
-[ ]*[a-f0-9]+: 0f b7 00 movzwl \(%rax\),%eax
-[ ]*[a-f0-9]+: 48 0f b7 00 movzwq \(%rax\),%rax
-[ ]*[a-f0-9]+: 0f c3 00 movnti %eax,\(%rax\)
-[ ]*[a-f0-9]+: 48 0f c3 00 movnti %rax,\(%rax\)
-#pass
diff --git a/gas/testsuite/gas/i386/l1om-inval.l b/gas/testsuite/gas/i386/l1om-inval.l
deleted file mode 100644
index 6ec82cf2e05..00000000000
--- a/gas/testsuite/gas/i386/l1om-inval.l
+++ /dev/null
@@ -1,2 +0,0 @@
-Assembler messages:
-Fatal error: Intel L1OM is 64bit only
diff --git a/gas/testsuite/gas/i386/l1om-inval.s b/gas/testsuite/gas/i386/l1om-inval.s
deleted file mode 100644
index 1ff7c295821..00000000000
--- a/gas/testsuite/gas/i386/l1om-inval.s
+++ /dev/null
@@ -1,2 +0,0 @@
- .text
- nop
diff --git a/gas/testsuite/gas/i386/l1om.d b/gas/testsuite/gas/i386/l1om.d
deleted file mode 100644
index e56f6a5c4b0..00000000000
--- a/gas/testsuite/gas/i386/l1om.d
+++ /dev/null
@@ -1,260 +0,0 @@
-#source: x86_64.s
-#as: -J -march=l1om
-#objdump: -dw --insn-width=7
-#name: l1om
-#warning_output: x86_64.e
-
-.*: +file format elf64-l1om.*
-
-Disassembly of section .text:
-
-0+ <.*>:
-[ ]*[a-f0-9]+: 01 ca add %ecx,%edx
-[ ]*[a-f0-9]+: 44 01 ca add %r9d,%edx
-[ ]*[a-f0-9]+: 41 01 ca add %ecx,%r10d
-[ ]*[a-f0-9]+: 48 01 ca add %rcx,%rdx
-[ ]*[a-f0-9]+: 4d 01 ca add %r9,%r10
-[ ]*[a-f0-9]+: 41 01 c0 add %eax,%r8d
-[ ]*[a-f0-9]+: 66 41 01 c0 add %ax,%r8w
-[ ]*[a-f0-9]+: 49 01 c0 add %rax,%r8
-[ ]*[a-f0-9]+: 05 11 22 33 44 add \$0x44332211,%eax
-[ ]*[a-f0-9]+: 48 05 11 22 33 f4 add \$0xfffffffff4332211,%rax
-[ ]*[a-f0-9]+: 66 05 33 44 add \$0x4433,%ax
-[ ]*[a-f0-9]+: 48 05 11 22 33 44 add \$0x44332211,%rax
-[ ]*[a-f0-9]+: 00 ca add %cl,%dl
-[ ]*[a-f0-9]+: 00 f7 add %dh,%bh
-[ ]*[a-f0-9]+: 40 00 f7 add %sil,%dil
-[ ]*[a-f0-9]+: 41 00 f7 add %sil,%r15b
-[ ]*[a-f0-9]+: 44 00 f7 add %r14b,%dil
-[ ]*[a-f0-9]+: 45 00 f7 add %r14b,%r15b
-[ ]*[a-f0-9]+: 50 push %rax
-[ ]*[a-f0-9]+: 41 50 push %r8
-[ ]*[a-f0-9]+: 41 59 pop %r9
-[ ]*[a-f0-9]+: 04 11 add \$0x11,%al
-[ ]*[a-f0-9]+: 80 c4 11 add \$0x11,%ah
-[ ]*[a-f0-9]+: 40 80 c4 11 add \$0x11,%spl
-[ ]*[a-f0-9]+: 41 80 c0 11 add \$0x11,%r8b
-[ ]*[a-f0-9]+: 41 80 c4 11 add \$0x11,%r12b
-[ ]*[a-f0-9]+: 0f 20 c0 mov %cr0,%rax
-[ ]*[a-f0-9]+: 41 0f 20 c0 mov %cr0,%r8
-[ ]*[a-f0-9]+: 44 0f 20 c0 mov %cr8,%rax
-[ ]*[a-f0-9]+: 44 0f 22 c0 mov %rax,%cr8
-[ ]*[a-f0-9]+: f3 48 a5 rep movsq %ds:\(%rsi\),%es:\(%rdi\)
-[ ]*[a-f0-9]+: 66 f3 a5 rep movsw %ds:\(%rsi\),%es:\(%rdi\)
-[ ]*[a-f0-9]+: f3 48 a5 rep movsq %ds:\(%rsi\),%es:\(%rdi\)
-[ ]*[a-f0-9]+: b0 11 mov \$0x11,%al
-[ ]*[a-f0-9]+: b4 11 mov \$0x11,%ah
-[ ]*[a-f0-9]+: 40 b4 11 mov \$0x11,%spl
-[ ]*[a-f0-9]+: 41 b4 11 mov \$0x11,%r12b
-[ ]*[a-f0-9]+: b8 44 33 22 11 mov \$0x11223344,%eax
-[ ]*[a-f0-9]+: 41 b8 44 33 22 11 mov \$0x11223344,%r8d
-[ ]*[a-f0-9]+: 48 b8 88 77 66 55 44 33 22 11 movabs \$0x1122334455667788,%rax
-[ ]*[a-f0-9]+: 49 b8 88 77 66 55 44 33 22 11 movabs \$0x1122334455667788,%r8
-[ ]*[a-f0-9]+: 03 00 add \(%rax\),%eax
-[ ]*[a-f0-9]+: 41 03 00 add \(%r8\),%eax
-[ ]*[a-f0-9]+: 45 03 00 add \(%r8\),%r8d
-[ ]*[a-f0-9]+: 49 03 00 add \(%r8\),%rax
-[ ]*[a-f0-9]+: 03 05 22 22 22 22 add 0x22222222\(%rip\),%eax # 2222[0-9a-f]* <foo\+0x2222[0-9a-f]*>
-[ ]*[a-f0-9]+: 03 45 00 add 0x0\(%rbp\),%eax
-[ ]*[a-f0-9]+: 03 04 25 22 22 22 22 add 0x22222222,%eax
-[ ]*[a-f0-9]+: 41 03 45 00 add 0x0\(%r13\),%eax
-[ ]*[a-f0-9]+: 03 04 80 add \(%rax,%rax,4\),%eax
-[ ]*[a-f0-9]+: 41 03 04 80 add \(%r8,%rax,4\),%eax
-[ ]*[a-f0-9]+: 45 03 04 80 add \(%r8,%rax,4\),%r8d
-[ ]*[a-f0-9]+: 43 03 04 80 add \(%r8,%r8,4\),%eax
-[ ]*[a-f0-9]+: 46 01 04 81 add %r8d,\(%rcx,%r8,4\)
-[ ]*[a-f0-9]+: 03 14 c0 add \(%rax,%rax,8\),%edx
-[ ]*[a-f0-9]+: 03 14 c8 add \(%rax,%rcx,8\),%edx
-[ ]*[a-f0-9]+: 03 14 d0 add \(%rax,%rdx,8\),%edx
-[ ]*[a-f0-9]+: 03 14 d8 add \(%rax,%rbx,8\),%edx
-[ ]*[a-f0-9]+: 03 10 add \(%rax\),%edx
-[ ]*[a-f0-9]+: 03 14 e8 add \(%rax,%rbp,8\),%edx
-[ ]*[a-f0-9]+: 03 14 f0 add \(%rax,%rsi,8\),%edx
-[ ]*[a-f0-9]+: 03 14 f8 add \(%rax,%rdi,8\),%edx
-[ ]*[a-f0-9]+: 42 03 14 c0 add \(%rax,%r8,8\),%edx
-[ ]*[a-f0-9]+: 42 03 14 c8 add \(%rax,%r9,8\),%edx
-[ ]*[a-f0-9]+: 42 03 14 d0 add \(%rax,%r10,8\),%edx
-[ ]*[a-f0-9]+: 42 03 14 d8 add \(%rax,%r11,8\),%edx
-[ ]*[a-f0-9]+: 42 03 14 e0 add \(%rax,%r12,8\),%edx
-[ ]*[a-f0-9]+: 42 03 14 e8 add \(%rax,%r13,8\),%edx
-[ ]*[a-f0-9]+: 42 03 14 f0 add \(%rax,%r14,8\),%edx
-[ ]*[a-f0-9]+: 42 03 14 f8 add \(%rax,%r15,8\),%edx
-[ ]*[a-f0-9]+: 83 c1 11 add \$0x11,%ecx
-[ ]*[a-f0-9]+: 83 00 11 addl \$0x11,\(%rax\)
-[ ]*[a-f0-9]+: 48 83 00 11 addq \$0x11,\(%rax\)
-[ ]*[a-f0-9]+: 41 83 00 11 addl \$0x11,\(%r8\)
-[ ]*[a-f0-9]+: 83 04 81 11 addl \$0x11,\(%rcx,%rax,4\)
-[ ]*[a-f0-9]+: 41 83 04 81 11 addl \$0x11,\(%r9,%rax,4\)
-[ ]*[a-f0-9]+: 42 83 04 81 11 addl \$0x11,\(%rcx,%r8,4\)
-[ ]*[a-f0-9]+: 83 05 22 22 22 22 33 addl \$0x33,0x22222222\(%rip\) # 2222[0-9a-f]* <foo\+0x2222[0-9a-f]*>
-[ ]*[a-f0-9]+: 48 83 05 22 22 22 22 33 addq \$0x33,0x22222222\(%rip\) # 2222[0-9a-f]* <foo\+0x2222[0-9a-f]*>
-[ ]*[a-f0-9]+: 81 05 22 22 22 22 33 33 33 33 addl \$0x33333333,0x22222222\(%rip\) # 2222[0-9a-f]* <foo\+0x2222[0-9a-f]*>
-[ ]*[a-f0-9]+: 48 81 05 22 22 22 22 33 33 33 33 addq \$0x33333333,0x22222222\(%rip\) # 2222[0-9a-f]* <foo\+0x2222[0-9a-f]*>
-[ ]*[a-f0-9]+: 83 04 c5 22 22 22 22 33 addl \$0x33,0x22222222\(,%rax,8\)
-[ ]*[a-f0-9]+: 83 80 22 22 22 22 33 addl \$0x33,0x22222222\(%rax\)
-[ ]*[a-f0-9]+: 83 80 22 22 22 22 33 addl \$0x33,0x22222222\(%rax\)
-[ ]*[a-f0-9]+: 41 83 04 e8 33 addl \$0x33,\(%r8,%rbp,8\)
-[ ]*[a-f0-9]+: 83 04 25 22 22 22 22 33 addl \$0x33,0x22222222
-[ ]*[a-f0-9]+: a0 11 22 33 44 55 66 77 88 movabs 0x8877665544332211,%al
-[ ]*[a-f0-9]+: a1 11 22 33 44 55 66 77 88 movabs 0x8877665544332211,%eax
-[ ]*[a-f0-9]+: a2 11 22 33 44 55 66 77 88 movabs %al,0x8877665544332211
-[ ]*[a-f0-9]+: a3 11 22 33 44 55 66 77 88 movabs %eax,0x8877665544332211
-[ ]*[a-f0-9]+: 48 a1 11 22 33 44 55 66 77 88 movabs 0x8877665544332211,%rax
-[ ]*[a-f0-9]+: 48 a3 11 22 33 44 55 66 77 88 movabs %rax,0x8877665544332211
-[ ]*[a-f0-9]+: 48 99 cqto
-[ ]*[a-f0-9]+: 48 98 cltq
-[ ]*[a-f0-9]+: 48 63 c0 movslq %eax,%rax
-[ ]*[a-f0-9]+: 48 0f bf c0 movswq %ax,%rax
-[ ]*[a-f0-9]+: 48 0f be c0 movsbq %al,%rax
-[ ]*[a-f0-9]+: cb lret *
-[ ]*[a-f0-9]+: ca 10 00 lret \$0x10
-[ ]*[a-f0-9]+: 66 cb lretw *
-[ ]*[a-f0-9]+: 66 ca 02 00 lretw \$0x2
-[ ]*[a-f0-9]+: cb lret *
-[ ]*[a-f0-9]+: ca 04 00 lret \$0x4
-[ ]*[a-f0-9]+: 48 cb lretq *
-[ ]*[a-f0-9]+: 48 ca 08 00 lretq \$0x8
-
-[0-9a-f]+ <bar>:
-[ ]*[a-f0-9]+: b0 00 mov \$0x0,%al
-[ ]*[a-f0-9]+: 66 b8 00 00 mov \$0x0,%ax
-[ ]*[a-f0-9]+: b8 00 00 00 00 mov \$0x0,%eax
-[ ]*[a-f0-9]+: 48 c7 c0 00 00 00 00 mov \$0x0,%rax
-[ ]*[a-f0-9]+: a1 00 00 00 00 00 00 00 00 movabs 0x0,%eax
-[ ]*[a-f0-9]+: 8b 04 25 00 00 00 00 mov 0x0,%eax
-[ ]*[a-f0-9]+: 8b 80 00 00 00 00 mov 0x0\(%rax\),%eax
-[ ]*[a-f0-9]+: 8b 05 00 00 00 00 mov 0x0\(%rip\),%eax # [0-9a-f]+ <bar\+0x[0-9a-f]+>
-[ ]*[a-f0-9]+: b0 00 mov \$0x0,%al
-[ ]*[a-f0-9]+: 66 b8 00 00 mov \$0x0,%ax
-[ ]*[a-f0-9]+: b8 00 00 00 00 mov \$0x0,%eax
-[ ]*[a-f0-9]+: 48 c7 c0 00 00 00 00 mov \$0x0,%rax
-[ ]*[a-f0-9]+: a1 00 00 00 00 00 00 00 00 movabs 0x0,%eax
-[ ]*[a-f0-9]+: 8b 04 25 00 00 00 00 mov 0x0,%eax
-[ ]*[a-f0-9]+: 8b 80 00 00 00 00 mov 0x0\(%rax\),%eax
-[ ]*[a-f0-9]+: 8b 05 00 00 00 00 mov 0x0\(%rip\),%eax # [0-9a-f]+ <foo>
-
-[0-9a-f]+ <foo>:
-[ ]*[a-f0-9]+: a0 11 22 33 44 55 66 77 88 movabs 0x8877665544332211,%al
-[ ]*[a-f0-9]+: 66 a1 11 22 33 44 55 66 77 88 movabs 0x8877665544332211,%ax
-[ ]*[a-f0-9]+: a1 11 22 33 44 55 66 77 88 movabs 0x8877665544332211,%eax
-[ ]*[a-f0-9]+: 48 a1 11 22 33 44 55 66 77 88 movabs 0x8877665544332211,%rax
-[ ]*[a-f0-9]+: a2 11 22 33 44 55 66 77 88 movabs %al,0x8877665544332211
-[ ]*[a-f0-9]+: 66 a3 11 22 33 44 55 66 77 88 movabs %ax,0x8877665544332211
-[ ]*[a-f0-9]+: a3 11 22 33 44 55 66 77 88 movabs %eax,0x8877665544332211
-[ ]*[a-f0-9]+: 48 a3 11 22 33 44 55 66 77 88 movabs %rax,0x8877665544332211
-[ ]*[a-f0-9]+: a0 11 22 33 44 55 66 77 88 movabs 0x8877665544332211,%al
-[ ]*[a-f0-9]+: 66 a1 11 22 33 44 55 66 77 88 movabs 0x8877665544332211,%ax
-[ ]*[a-f0-9]+: a1 11 22 33 44 55 66 77 88 movabs 0x8877665544332211,%eax
-[ ]*[a-f0-9]+: 48 a1 11 22 33 44 55 66 77 88 movabs 0x8877665544332211,%rax
-[ ]*[a-f0-9]+: a2 11 22 33 44 55 66 77 88 movabs %al,0x8877665544332211
-[ ]*[a-f0-9]+: 66 a3 11 22 33 44 55 66 77 88 movabs %ax,0x8877665544332211
-[ ]*[a-f0-9]+: a3 11 22 33 44 55 66 77 88 movabs %eax,0x8877665544332211
-[ ]*[a-f0-9]+: 48 a3 11 22 33 44 55 66 77 88 movabs %rax,0x8877665544332211
-[ ]*[a-f0-9]+: 8a 04 25 11 22 33 ff mov 0xffffffffff332211,%al
-[ ]*[a-f0-9]+: 66 8b 04 25 11 22 33 ff mov 0xffffffffff332211,%ax
-[ ]*[a-f0-9]+: 8b 04 25 11 22 33 ff mov 0xffffffffff332211,%eax
-[ ]*[a-f0-9]+: 48 8b 04 25 11 22 33 ff mov 0xffffffffff332211,%rax
-[ ]*[a-f0-9]+: 88 04 25 11 22 33 ff mov %al,0xffffffffff332211
-[ ]*[a-f0-9]+: 66 89 04 25 11 22 33 ff mov %ax,0xffffffffff332211
-[ ]*[a-f0-9]+: 89 04 25 11 22 33 ff mov %eax,0xffffffffff332211
-[ ]*[a-f0-9]+: 48 89 04 25 11 22 33 ff mov %rax,0xffffffffff332211
-[ ]*[a-f0-9]+: 8a 04 25 11 22 33 ff mov 0xffffffffff332211,%al
-[ ]*[a-f0-9]+: 66 8b 04 25 11 22 33 ff mov 0xffffffffff332211,%ax
-[ ]*[a-f0-9]+: 8b 04 25 11 22 33 ff mov 0xffffffffff332211,%eax
-[ ]*[a-f0-9]+: 48 8b 04 25 11 22 33 ff mov 0xffffffffff332211,%rax
-[ ]*[a-f0-9]+: 88 04 25 11 22 33 ff mov %al,0xffffffffff332211
-[ ]*[a-f0-9]+: 66 89 04 25 11 22 33 ff mov %ax,0xffffffffff332211
-[ ]*[a-f0-9]+: 89 04 25 11 22 33 ff mov %eax,0xffffffffff332211
-[ ]*[a-f0-9]+: 48 89 04 25 11 22 33 ff mov %rax,0xffffffffff332211
-[ ]*[a-f0-9]+: 48 0f c7 08 cmpxchg16b \(%rax\)
-[ ]*[a-f0-9]+: 48 0f c7 08 cmpxchg16b \(%rax\)
-[ ]*[a-f0-9]+: 66 0f be f0 movsbw %al,%si
-[ ]*[a-f0-9]+: 0f be f0 movsbl %al,%esi
-[ ]*[a-f0-9]+: 48 0f be f0 movsbq %al,%rsi
-[ ]*[a-f0-9]+: 0f bf f0 movswl %ax,%esi
-[ ]*[a-f0-9]+: 48 0f bf f0 movswq %ax,%rsi
-[ ]*[a-f0-9]+: 48 63 f0 movslq %eax,%rsi
-[ ]*[a-f0-9]+: 66 0f be 10 movsbw \(%rax\),%dx
-[ ]*[a-f0-9]+: 0f be 10 movsbl \(%rax\),%edx
-[ ]*[a-f0-9]+: 48 0f be 10 movsbq \(%rax\),%rdx
-[ ]*[a-f0-9]+: 66 0f be 10 movsbw \(%rax\),%dx
-[ ]*[a-f0-9]+: 0f bf 10 movswl \(%rax\),%edx
-[ ]*[a-f0-9]+: 48 0f bf 10 movswq \(%rax\),%rdx
-[ ]*[a-f0-9]+: 66 0f b6 f0 movzbw %al,%si
-[ ]*[a-f0-9]+: 0f b6 f0 movzbl %al,%esi
-[ ]*[a-f0-9]+: 48 0f b6 f0 movzbq %al,%rsi
-[ ]*[a-f0-9]+: 0f b7 f0 movzwl %ax,%esi
-[ ]*[a-f0-9]+: 48 0f b7 f0 movzwq %ax,%rsi
-[ ]*[a-f0-9]+: 66 0f b6 10 movzbw \(%rax\),%dx
-[ ]*[a-f0-9]+: 0f b6 10 movzbl \(%rax\),%edx
-[ ]*[a-f0-9]+: 48 0f b6 10 movzbq \(%rax\),%rdx
-[ ]*[a-f0-9]+: 66 0f b6 10 movzbw \(%rax\),%dx
-[ ]*[a-f0-9]+: 0f b6 10 movzbl \(%rax\),%edx
-[ ]*[a-f0-9]+: 48 0f b6 10 movzbq \(%rax\),%rdx
-[ ]*[a-f0-9]+: 66 0f b6 10 movzbw \(%rax\),%dx
-[ ]*[a-f0-9]+: 0f b7 10 movzwl \(%rax\),%edx
-[ ]*[a-f0-9]+: 48 0f b7 10 movzwq \(%rax\),%rdx
-[ ]*[a-f0-9]+: 66 0f be f0 movsbw %al,%si
-[ ]*[a-f0-9]+: 0f be f0 movsbl %al,%esi
-[ ]*[a-f0-9]+: 48 0f be f0 movsbq %al,%rsi
-[ ]*[a-f0-9]+: 0f bf f0 movswl %ax,%esi
-[ ]*[a-f0-9]+: 48 0f bf f0 movswq %ax,%rsi
-[ ]*[a-f0-9]+: 48 63 f0 movslq %eax,%rsi
-[ ]*[a-f0-9]+: 0f be 10 movsbl \(%rax\),%edx
-[ ]*[a-f0-9]+: 48 0f be 10 movsbq \(%rax\),%rdx
-[ ]*[a-f0-9]+: 66 0f be 10 movsbw \(%rax\),%dx
-[ ]*[a-f0-9]+: 0f bf 10 movswl \(%rax\),%edx
-[ ]*[a-f0-9]+: 48 0f bf 10 movswq \(%rax\),%rdx
-[ ]*[a-f0-9]+: 66 0f b6 f0 movzbw %al,%si
-[ ]*[a-f0-9]+: 0f b6 f0 movzbl %al,%esi
-[ ]*[a-f0-9]+: 48 0f b6 f0 movzbq %al,%rsi
-[ ]*[a-f0-9]+: 0f b7 f0 movzwl %ax,%esi
-[ ]*[a-f0-9]+: 48 0f b7 f0 movzwq %ax,%rsi
-[ ]*[a-f0-9]+: 0f b6 10 movzbl \(%rax\),%edx
-[ ]*[a-f0-9]+: 48 0f b6 10 movzbq \(%rax\),%rdx
-[ ]*[a-f0-9]+: 66 0f b6 10 movzbw \(%rax\),%dx
-[ ]*[a-f0-9]+: 0f b7 10 movzwl \(%rax\),%edx
-[ ]*[a-f0-9]+: 48 0f b7 10 movzwq \(%rax\),%rdx
-[ ]*[a-f0-9]+: f3 0f 7e 0c 24 movq \(%rsp\),%xmm1
-[ ]*[a-f0-9]+: f3 0f 7e 0c 24 movq \(%rsp\),%xmm1
-[ ]*[a-f0-9]+: 66 0f d6 0c 24 movq %xmm1,\(%rsp\)
-[ ]*[a-f0-9]+: 66 0f d6 0c 24 movq %xmm1,\(%rsp\)
-[ ]*[a-f0-9]+: df e0 fnstsw %ax
-[ ]*[a-f0-9]+: df e0 fnstsw %ax
-[ ]*[a-f0-9]+: 9b df e0 fstsw %ax
-[ ]*[a-f0-9]+: 9b df e0 fstsw %ax
-[ ]*[a-f0-9]+: df e0 fnstsw %ax
-[ ]*[a-f0-9]+: df e0 fnstsw %ax
-[ ]*[a-f0-9]+: 9b df e0 fstsw %ax
-[ ]*[a-f0-9]+: 9b df e0 fstsw %ax
-[ ]*[a-f0-9]+: 66 0f be 00 movsbw \(%rax\),%ax
-[ ]*[a-f0-9]+: 66 0f be 10 movsbw \(%rax\),%dx
-[ ]*[a-f0-9]+: 0f be 10 movsbl \(%rax\),%edx
-[ ]*[a-f0-9]+: 48 0f be 10 movsbq \(%rax\),%rdx
-[ ]*[a-f0-9]+: 0f bf 10 movswl \(%rax\),%edx
-[ ]*[a-f0-9]+: 48 0f bf 10 movswq \(%rax\),%rdx
-[ ]*[a-f0-9]+: 48 63 10 movslq \(%rax\),%rdx
-[ ]*[a-f0-9]+: 48 63 00 movslq \(%rax\),%rax
-[ ]*[a-f0-9]+: 66 0f b6 00 movzbw \(%rax\),%ax
-[ ]*[a-f0-9]+: 66 0f b6 10 movzbw \(%rax\),%dx
-[ ]*[a-f0-9]+: 0f b6 10 movzbl \(%rax\),%edx
-[ ]*[a-f0-9]+: 48 0f b6 10 movzbq \(%rax\),%rdx
-[ ]*[a-f0-9]+: 0f b7 10 movzwl \(%rax\),%edx
-[ ]*[a-f0-9]+: 48 0f b7 10 movzwq \(%rax\),%rdx
-[ ]*[a-f0-9]+: 0f c3 00 movnti %eax,\(%rax\)
-[ ]*[a-f0-9]+: 0f c3 00 movnti %eax,\(%rax\)
-[ ]*[a-f0-9]+: 48 0f c3 00 movnti %rax,\(%rax\)
-[ ]*[a-f0-9]+: 48 0f c3 00 movnti %rax,\(%rax\)
-[ ]*[a-f0-9]+: 66 0f be 00 movsbw \(%rax\),%ax
-[ ]*[a-f0-9]+: 0f be 00 movsbl \(%rax\),%eax
-[ ]*[a-f0-9]+: 0f bf 00 movswl \(%rax\),%eax
-[ ]*[a-f0-9]+: 48 0f bf 00 movswq \(%rax\),%rax
-[ ]*[a-f0-9]+: 48 63 00 movslq \(%rax\),%rax
-[ ]*[a-f0-9]+: 48 63 00 movslq \(%rax\),%rax
-[ ]*[a-f0-9]+: 66 0f b6 00 movzbw \(%rax\),%ax
-[ ]*[a-f0-9]+: 0f b6 00 movzbl \(%rax\),%eax
-[ ]*[a-f0-9]+: 0f b7 00 movzwl \(%rax\),%eax
-[ ]*[a-f0-9]+: 48 0f b7 00 movzwq \(%rax\),%rax
-[ ]*[a-f0-9]+: 0f c3 00 movnti %eax,\(%rax\)
-[ ]*[a-f0-9]+: 48 0f c3 00 movnti %rax,\(%rax\)
-#pass
diff --git a/gas/testsuite/gas/i386/pseudos.d b/gas/testsuite/gas/i386/pseudos.d
index 4f029f154b4..0772c636457 100644
--- a/gas/testsuite/gas/i386/pseudos.d
+++ b/gas/testsuite/gas/i386/pseudos.d
@@ -25,6 +25,7 @@ Disassembly of section .text:
+[a-f0-9]+: c5 f8 28 90 80 00 00 00 vmovaps 0x80\(%eax\),%xmm2
+[a-f0-9]+: c5 f8 28 90 80 00 00 00 vmovaps 0x80\(%eax\),%xmm2
+[a-f0-9]+: 62 f1 7c 08 28 50 08 vmovaps 0x80\(%eax\),%xmm2
+ +[a-f0-9]+: 67 62 f1 7c 08 28 97 80 00 vmovaps 0x80\(%bx\),%xmm2
+[a-f0-9]+: 62 f1 7c 08 28 90 80 00 00 00 vmovaps 0x80\(%eax\),%xmm2
+[a-f0-9]+: 89 c8 mov %ecx,%eax
+[a-f0-9]+: 8b c1 mov %ecx,%eax
@@ -324,6 +325,7 @@ Disassembly of section .text:
+[a-f0-9]+: c5 f8 28 90 80 00 00 00 vmovaps 0x80\(%eax\),%xmm2
+[a-f0-9]+: c5 f8 28 90 80 00 00 00 vmovaps 0x80\(%eax\),%xmm2
+[a-f0-9]+: 62 f1 7c 08 28 50 08 vmovaps 0x80\(%eax\),%xmm2
+ +[a-f0-9]+: 67 62 f1 7c 08 28 97 80 00 vmovaps 0x80\(%bx\),%xmm2
+[a-f0-9]+: 62 f1 7c 08 28 90 80 00 00 00 vmovaps 0x80\(%eax\),%xmm2
+[a-f0-9]+: 89 c8 mov %ecx,%eax
+[a-f0-9]+: 8b c1 mov %ecx,%eax
@@ -354,4 +356,6 @@ Disassembly of section .text:
+[a-f0-9]+: 67 8a 46 00 mov 0x0\(%bp\),%al
+[a-f0-9]+: 67 8a 46 00 mov 0x0\(%bp\),%al
+[a-f0-9]+: 67 8a 86 00 00 mov 0x0\(%bp\),%al
+ +[a-f0-9]+: e9 fb ff ff ff jmp [0-9a-f]* <.*>
+ +[a-f0-9]+: e9 fd ff ff ff jmp [0-9a-f]* <.*>
#pass
diff --git a/gas/testsuite/gas/i386/pseudos.s b/gas/testsuite/gas/i386/pseudos.s
index 603e112ac8e..34a461c262e 100644
--- a/gas/testsuite/gas/i386/pseudos.s
+++ b/gas/testsuite/gas/i386/pseudos.s
@@ -20,6 +20,7 @@ _start:
{vex} {disp8} vmovaps 128(%eax),%xmm2
{vex} {disp32} vmovaps 128(%eax),%xmm2
{evex} {disp8} vmovaps 128(%eax),%xmm2
+ {evex} {disp16} vmovaps 128(%bx),%xmm2
{evex} {disp32} vmovaps 128(%eax),%xmm2
mov %ecx, %eax
@@ -337,6 +338,7 @@ _start:
{vex} {disp8} vmovaps xmm2,XMMWORD PTR [eax+128]
{vex} {disp32} vmovaps xmm2,XMMWORD PTR [eax+128]
{evex} {disp8} vmovaps xmm2,XMMWORD PTR [eax+128]
+ {evex} {disp16} vmovaps xmm2,XMMWORD PTR [bx+128]
{evex} {disp32} vmovaps xmm2,XMMWORD PTR [eax+128]
mov eax,ecx
@@ -373,3 +375,8 @@ _start:
mov al, BYTE PTR [bp]
{disp8} mov al, BYTE PTR [bp]
{disp16} mov al, BYTE PTR [bp]
+
+ {disp32} jmp .
+ .code16
+ {disp16} jmp .
+ .byte -1, -1
diff --git a/gas/testsuite/gas/i386/rex.d b/gas/testsuite/gas/i386/rex.d
index 22c0c7f30a6..87856be1920 100644
--- a/gas/testsuite/gas/i386/rex.d
+++ b/gas/testsuite/gas/i386/rex.d
@@ -23,6 +23,11 @@ Disassembly of section .text:
[ ]*[0-9a-f]+:[ ]+46 03 04 00[ ]+add[ ]+\(%rax,%r8(,1)?\),%r8d
[ ]*[0-9a-f]+:[ ]+45 03 04 00[ ]+add[ ]+\(%r8,%rax(,1)?\),%r8d
[ ]*[0-9a-f]+:[ ]+4a 03 04 00[ ]+add[ ]+\(%rax,%r8(,1)?\),%rax
+[ ]*[0-9a-f]+:[ ]+40 90[ ]+rex nop
+[ ]*[0-9a-f]+:[ ]+48 90[ ]+rex\.W nop
+[ ]*[0-9a-f]+:[ ]+44 90[ ]+rex\.R nop
+[ ]*[0-9a-f]+:[ ]+42 90[ ]+rex\.X nop
+[ ]*[0-9a-f]+:[ ]+41 90[ ]+xchg[ ]+%eax,%r8d
[ ]*[0-9a-f]+:[ ]+41\s+rex\.B
[ ]*[0-9a-f]+:[ ]+9b dd 30\s+fsave\s+\(%rax\)
[ ]*[0-9a-f]+:[ ]+9b 41 dd 30\s+fsave\s+\(%r8\)
diff --git a/gas/testsuite/gas/i386/rex.s b/gas/testsuite/gas/i386/rex.s
index c1490ccdeef..2a861be1eae 100644
--- a/gas/testsuite/gas/i386/rex.s
+++ b/gas/testsuite/gas/i386/rex.s
@@ -20,6 +20,12 @@ _start:
rex.b add (%rax,%rax), %r8d
rex.x add (%rax,%rax), %rax
+ rex nop
+ rex.w nop
+ rex.r nop
+ rex.x nop
+ rex.b nop
+
.byte 0x41,0x9b,0xdd,0x30
fsave (%r8)
diff --git a/gas/testsuite/gas/i386/secidx.d b/gas/testsuite/gas/i386/secidx.d
new file mode 100644
index 00000000000..baf299fb7bd
--- /dev/null
+++ b/gas/testsuite/gas/i386/secidx.d
@@ -0,0 +1,40 @@
+#objdump: -rs
+#name: i386 secidx reloc
+
+.*: +file format pe-i386
+
+RELOCATION RECORDS FOR \[\.data\]:
+OFFSET[ ]+TYPE[ ]+VALUE
+0+24 secidx \.text
+0+27 secidx \.text
+0+2a secidx \.text
+0+2d secidx \.text
+0+3c secidx \.data
+0+3f secidx \.data
+0+42 secidx \.data
+0+45 secidx \.data
+0+54 secidx \.rdata
+0+57 secidx \.rdata
+0+5a secidx \.rdata
+0+5d secidx \.rdata
+0+6c secidx ext24
+0+6f secidx ext2d
+0+72 secidx ext36
+0+75 secidx ext3f
+
+Contents of section \.text:
+ 0000 3e3e3e3e 3c3c3c3c 3e3e3e3e 3e3c3c3c >>>><<<<>>>>><<<
+ 0010 3e3e3e3e 3e3e3c3c 3e3e3e3e 3e3e3e3c >>>>>><<>>>>>>><
+Contents of section \.data:
+ 0000 3e3e3e3e 3c3c3c3c 3e3e3e3e 3e3c3c3c >>>><<<<>>>>><<<
+ 0010 3e3e3e3e 3e3e3c3c 3e3e3e3e 3e3e3e3c >>>>>><<>>>>>>><
+ 0020 3e3e3e3e 00001100 00110000 11000011 >>>>............
+ 0030 3c3c3c3c 3c3c3c3c 3e3e3e3e 00001100 <<<<<<<<>>>>....
+ 0040 00110000 11000011 3c3c3c3c 3c3c3c3c ........<<<<<<<<
+ 0050 3e3e3e3e 00001100 00110000 11000011 >>>>............
+ 0060 3c3c3c3c 3c3c3c3c 3e3e3e3e 00001100 <<<<<<<<>>>>....
+ 0070 00110000 11000011 3c3c3c3c 3c3c3c3c ........<<<<<<<<
+Contents of section \.rdata:
+ 0000 3e3e3e3e 3c3c3c3c 3e3e3e3e 3e3c3c3c >>>><<<<>>>>><<<
+ 0010 3e3e3e3e 3e3e3c3c 3e3e3e3e 3e3e3e3c >>>>>><<>>>>>>><
+ 0020 3e3e3e3e 00000000 00000000 00000000 >>>>............
diff --git a/gas/testsuite/gas/i386/secidx.s b/gas/testsuite/gas/i386/secidx.s
new file mode 100644
index 00000000000..7ac1d2c7036
--- /dev/null
+++ b/gas/testsuite/gas/i386/secidx.s
@@ -0,0 +1,79 @@
+.text
+
+ .ascii ">>>>"
+pre04: .ascii "<<<<"
+ .ascii ">>>>>"
+pre0d: .ascii "<<<"
+ .ascii ">>>>>>"
+pre16: .ascii "<<"
+ .ascii ">>>>>>>"
+pre1f: .ascii "<"
+
+.data
+
+ .ascii ">>>>"
+sam04: .ascii "<<<<"
+ .ascii ">>>>>"
+sam0d: .ascii "<<<"
+ .ascii ">>>>>>"
+sam16: .ascii "<<"
+ .ascii ">>>>>>>"
+sam1f: .ascii "<"
+
+ .ascii ">>>>"
+ .secidx pre04
+ .byte 0x11
+ .secidx pre0d
+ .byte 0x11
+ .secidx pre16
+ .byte 0x11
+ .secidx pre1f
+ .byte 0x11
+ .ascii "<<<<<<<<"
+
+ .ascii ">>>>"
+ .secidx sam04
+ .byte 0x11
+ .secidx sam0d
+ .byte 0x11
+ .secidx sam16
+ .byte 0x11
+ .secidx sam1f
+ .byte 0x11
+ .ascii "<<<<<<<<"
+
+ .ascii ">>>>"
+ .secidx nex04
+ .byte 0x11
+ .secidx nex0d
+ .byte 0x11
+ .secidx nex16
+ .byte 0x11
+ .secidx nex1f
+ .byte 0x11
+ .ascii "<<<<<<<<"
+
+ .ascii ">>>>"
+ .secidx ext24
+ .byte 0x11
+ .secidx ext2d
+ .byte 0x11
+ .secidx ext36
+ .byte 0x11
+ .secidx ext3f
+ .byte 0x11
+ .ascii "<<<<<<<<"
+
+.section .rdata
+
+ .ascii ">>>>"
+nex04: .ascii "<<<<"
+ .ascii ">>>>>"
+nex0d: .ascii "<<<"
+ .ascii ">>>>>>"
+nex16: .ascii "<<"
+ .ascii ">>>>>>>"
+nex1f: .ascii "<"
+ .ascii ">>>>"
+
+ .p2align 4,0
diff --git a/gas/testsuite/gas/i386/x86-64-avx512_fp16.s b/gas/testsuite/gas/i386/x86-64-avx512_fp16.s
index f9120a2184d..171c49b1cbf 100644
--- a/gas/testsuite/gas/i386/x86-64-avx512_fp16.s
+++ b/gas/testsuite/gas/i386/x86-64-avx512_fp16.s
@@ -933,9 +933,9 @@ _start:
vcvtsh2usi r12, WORD PTR [rcx+254] #AVX512-FP16 Disp8(7f)
vcvtsh2usi r12, WORD PTR [rdx-256] #AVX512-FP16 Disp8(80)
vcvtsi2sh xmm30, xmm29, r12 #AVX512-FP16
- vcvtsi2sh xmm30, xmm29, {rn-sae}, r12 #AVX512-FP16 HAS_SAE RC_CTRL
+ vcvtsi2sh xmm30, xmm29, r12, {rn-sae} #AVX512-FP16 HAS_SAE RC_CTRL
vcvtsi2sh xmm30, xmm29, edx #AVX512-FP16
- vcvtsi2sh xmm30, xmm29, {rn-sae}, edx #AVX512-FP16 HAS_SAE RC_CTRL
+ vcvtsi2sh xmm30, xmm29, edx, {rn-sae} #AVX512-FP16 HAS_SAE RC_CTRL
vcvtsi2sh xmm30, xmm29, DWORD PTR [rbp+r14*8+0x10000000] #AVX512-FP16
vcvtsi2sh xmm30, xmm29, DWORD PTR [r9] #AVX512-FP16
vcvtsi2sh xmm30, xmm29, DWORD PTR [rcx+508] #AVX512-FP16 Disp8(7f)
@@ -1030,9 +1030,9 @@ _start:
vcvtuqq2ph xmm30, ZMMWORD PTR [rcx+8128] #AVX512-FP16 Disp8(7f)
vcvtuqq2ph xmm30{k7}{z}, QWORD PTR [rdx-1024]{1to8} #AVX512-FP16 BROADCAST_EN Disp8(80) MASK_ENABLING ZEROCTL
vcvtusi2sh xmm30, xmm29, r12 #AVX512-FP16
- vcvtusi2sh xmm30, xmm29, {rn-sae}, r12 #AVX512-FP16 HAS_SAE RC_CTRL
+ vcvtusi2sh xmm30, xmm29, r12, {rn-sae} #AVX512-FP16 HAS_SAE RC_CTRL
vcvtusi2sh xmm30, xmm29, edx #AVX512-FP16
- vcvtusi2sh xmm30, xmm29, {rn-sae}, edx #AVX512-FP16 HAS_SAE RC_CTRL
+ vcvtusi2sh xmm30, xmm29, edx, {rn-sae} #AVX512-FP16 HAS_SAE RC_CTRL
vcvtusi2sh xmm30, xmm29, DWORD PTR [rbp+r14*8+0x10000000] #AVX512-FP16
vcvtusi2sh xmm30, xmm29, DWORD PTR [r9] #AVX512-FP16
vcvtusi2sh xmm30, xmm29, DWORD PTR [rcx+508] #AVX512-FP16 Disp8(7f)
diff --git a/gas/testsuite/gas/i386/x86-64-code16-2.d b/gas/testsuite/gas/i386/x86-64-code16-2.d
deleted file mode 100644
index 5052353c00d..00000000000
--- a/gas/testsuite/gas/i386/x86-64-code16-2.d
+++ /dev/null
@@ -1,4 +0,0 @@
-#source: code16-2.s
-#name: x86-64 code16 2
-#as: -mx86-used-note=no --generate-missing-build-notes=no
-#readelf: -n
diff --git a/gas/testsuite/gas/mmix/err-greg1.s b/gas/testsuite/gas/mmix/err-greg1.s
index 8c6af661e35..be89c6c83f5 100644
--- a/gas/testsuite/gas/mmix/err-greg1.s
+++ b/gas/testsuite/gas/mmix/err-greg1.s
@@ -6,5 +6,5 @@
Main SWYM 0
.rept 223
- GREG
- .endr % { dg-error "too many GREG registers allocated" "" }
+ GREG % { dg-error "too many GREG registers allocated" "" }
+ .endr
diff --git a/gas/testsuite/gas/ppc/476.d b/gas/testsuite/gas/ppc/476.d
index 0b75d75ae2d..70ea88d001e 100644
--- a/gas/testsuite/gas/ppc/476.d
+++ b/gas/testsuite/gas/ppc/476.d
@@ -59,7 +59,7 @@ Disassembly of section \.text:
.*: (4c 86 00 21|21 00 86 4c) bnelrl cr1
.*: (48 00 00 00|00 00 00 48) b c8 <ppc476\+0xc8>
.*: (48 00 00 01|01 00 00 48) bl cc <ppc476\+0xcc>
-.*: (54 83 00 36|36 00 83 54) rlwinm r3,r4,0,0,27
+.*: (54 83 00 36|36 00 83 54) clrrwi r3,r4,4
.*: (7c 03 20 00|00 20 03 7c) cmpw r3,r4
.*: (7f 83 20 00|00 20 83 7f) cmpw cr7,r3,r4
.*: (7c 83 2b f8|f8 2b 83 7c) cmpb r3,r4,r5
@@ -401,10 +401,10 @@ Disassembly of section \.text:
.*: (4c 00 00 4c|4c 00 00 4c) rfmci
.*: (50 83 65 36|36 65 83 50) rlwimi r3,r4,12,20,27
.*: (50 83 65 37|37 65 83 50) rlwimi\. r3,r4,12,20,27
-.*: (54 83 00 36|36 00 83 54) rlwinm r3,r4,0,0,27
-.*: (54 83 d1 be|be d1 83 54) rlwinm r3,r4,26,6,31
+.*: (54 83 00 36|36 00 83 54) clrrwi r3,r4,4
+.*: (54 83 d1 be|be d1 83 54) srwi r3,r4,6
.*: (54 83 20 26|26 20 83 54) rlwinm r3,r4,4,0,19
-.*: (54 83 00 37|37 00 83 54) rlwinm\. r3,r4,0,0,27
+.*: (54 83 00 37|37 00 83 54) clrrwi\. r3,r4,4
.*: (5c 83 28 3e|3e 28 83 5c) rotlw r3,r4,r5
.*: (5c 83 28 3f|3f 28 83 5c) rotlw\. r3,r4,r5
.*: (5c 83 28 3e|3e 28 83 5c) rotlw r3,r4,r5
@@ -418,7 +418,7 @@ Disassembly of section \.text:
.*: (7c 83 86 71|71 86 83 7c) srawi\. r3,r4,16
.*: (7c 83 2c 30|30 2c 83 7c) srw r3,r4,r5
.*: (7c 83 2c 31|31 2c 83 7c) srw\. r3,r4,r5
-.*: (54 83 d1 be|be d1 83 54) rlwinm r3,r4,26,6,31
+.*: (54 83 d1 be|be d1 83 54) srwi r3,r4,6
.*: (99 61 00 02|02 00 61 99) stb r11,2\(r1\)
.*: (9d 81 00 03|03 00 81 9d) stbu r12,3\(r1\)
.*: (7d ae 79 ee|ee 79 ae 7d) stbux r13,r14,r15
diff --git a/gas/testsuite/gas/ppc/aix.exp b/gas/testsuite/gas/ppc/aix.exp
index 78f29f0674d..b2e84001211 100644
--- a/gas/testsuite/gas/ppc/aix.exp
+++ b/gas/testsuite/gas/ppc/aix.exp
@@ -87,4 +87,9 @@ if { [istarget "powerpc*-*-aix*"] || [istarget "rs6000-*-aix*"] } then {
run_dump_test "xcoff-file-32"
run_dump_test "xcoff-file-64"
+
+ run_dump_test "xcoff-visibility-1-32"
+ run_dump_test "xcoff-visibility-1-64"
+ run_dump_test "xcoff-visibility-2-32"
+ run_dump_test "xcoff-visibility-2-64"
}
diff --git a/gas/testsuite/gas/ppc/prefix-reloc.d b/gas/testsuite/gas/ppc/prefix-reloc.d
index b442419904f..e79f4aa07f5 100644
--- a/gas/testsuite/gas/ppc/prefix-reloc.d
+++ b/gas/testsuite/gas/ppc/prefix-reloc.d
@@ -10,7 +10,7 @@ Disassembly of section \.text:
0: (00 00 00 06|06 00 00 00) pli r9,0
4: (00 00 20 39|39 20 00 00)
0: R_PPC64_D34_HA30 ext
- 8: (46 17 29 79|79 29 17 46) rldicr r9,r9,34,29
+ 8: (46 17 29 79|79 29 17 46) sldi r9,r9,34
c: (00 00 00 06|06 00 00 00) paddi r9,r9,0
10: (00 00 29 39|39 29 00 00)
c: R_PPC64_D34_LO ext
diff --git a/gas/testsuite/gas/ppc/simpshft.d b/gas/testsuite/gas/ppc/simpshft.d
index b4cccd57920..70b8e02797f 100644
--- a/gas/testsuite/gas/ppc/simpshft.d
+++ b/gas/testsuite/gas/ppc/simpshft.d
@@ -7,19 +7,19 @@
Disassembly of section .text:
0+ <.text>:
- 0: (e0 0f 64 78|78 64 0f e0) rldicl r4,r3,1,63
+ 0: (e0 0f 64 78|78 64 0f e0) srdi r4,r3,63
4: (0e f8 83 78|78 83 f8 0e) rldimi r3,r4,63,0
- 8: (e4 45 a5 78|78 a5 45 e4) rldicr r5,r5,8,55
+ 8: (e4 45 a5 78|78 a5 45 e4) sldi r5,r5,8
c: (20 00 64 78|78 64 00 20) clrldi r4,r3,32
- 10: (fe 0f 64 54|54 64 0f fe) rlwinm r4,r3,1,31,31
+ 10: (fe 0f 64 54|54 64 0f fe) srwi r4,r3,31
14: (00 f8 83 50|50 83 f8 00) rlwimi r3,r4,31,0,0
- 18: (2e 40 a5 54|54 a5 40 2e) rlwinm r5,r5,8,0,23
+ 18: (2e 40 a5 54|54 a5 40 2e) slwi r5,r5,8
1c: (3e 04 64 54|54 64 04 3e) clrlwi r4,r3,16
- 20: (04 00 64 78|78 64 00 04) rldicr r4,r3,0,0
- 24: (e4 07 64 78|78 64 07 e4) rldicr r4,r3,0,63
- 28: (06 f8 64 78|78 64 f8 06) rldicr r4,r3,63,0
+ 20: (04 00 64 78|78 64 00 04) clrrdi r4,r3,63
+ 24: (e4 07 64 78|78 64 07 e4) clrrdi r4,r3,0
+ 28: (06 f8 64 78|78 64 f8 06) sldi r4,r3,63
2c: (e6 ff 64 78|78 64 ff e6) rldicr r4,r3,63,63
- 30: (42 f8 64 78|78 64 f8 42) rldicl r4,r3,63,1
+ 30: (42 f8 64 78|78 64 f8 42) srdi r4,r3,1
34: (e2 ff 64 78|78 64 ff e2) rldicl r4,r3,63,63
38: (0c 00 64 78|78 64 00 0c) rldimi r4,r3,0,0
3c: (0c 08 64 78|78 64 08 0c) rldimi r4,r3,1,0
@@ -32,27 +32,27 @@ Disassembly of section .text:
58: (02 f8 64 78|78 64 f8 02) rotldi r4,r3,63
5c: (00 08 64 78|78 64 08 00) rotldi r4,r3,1
60: (10 20 65 78|78 65 20 10) rotld r5,r3,r4
- 64: (e4 07 64 78|78 64 07 e4) rldicr r4,r3,0,63
- 68: (06 f8 64 78|78 64 f8 06) rldicr r4,r3,63,0
+ 64: (e4 07 64 78|78 64 07 e4) clrrdi r4,r3,0
+ 68: (06 f8 64 78|78 64 f8 06) sldi r4,r3,63
6c: (00 00 64 78|78 64 00 00) rotldi r4,r3,0
- 70: (42 f8 64 78|78 64 f8 42) rldicl r4,r3,63,1
- 74: (e0 0f 64 78|78 64 0f e0) rldicl r4,r3,1,63
+ 70: (42 f8 64 78|78 64 f8 42) srdi r4,r3,1
+ 74: (e0 0f 64 78|78 64 0f e0) srdi r4,r3,63
78: (00 00 64 78|78 64 00 00) rotldi r4,r3,0
7c: (40 00 64 78|78 64 00 40) clrldi r4,r3,1
80: (e0 07 64 78|78 64 07 e0) clrldi r4,r3,63
- 84: (e4 07 64 78|78 64 07 e4) rldicr r4,r3,0,63
- 88: (a4 07 64 78|78 64 07 a4) rldicr r4,r3,0,62
- 8c: (04 00 64 78|78 64 00 04) rldicr r4,r3,0,0
+ 84: (e4 07 64 78|78 64 07 e4) clrrdi r4,r3,0
+ 88: (a4 07 64 78|78 64 07 a4) clrrdi r4,r3,1
+ 8c: (04 00 64 78|78 64 00 04) clrrdi r4,r3,63
90: (08 00 64 78|78 64 00 08) rldic r4,r3,0,0
94: (48 00 64 78|78 64 00 48) rldic r4,r3,0,1
98: (e8 07 64 78|78 64 07 e8) rldic r4,r3,0,63
9c: (a8 0f 64 78|78 64 0f a8) rldic r4,r3,1,62
a0: (0a f8 64 78|78 64 f8 0a) rldic r4,r3,63,0
- a4: (00 00 64 54|54 64 00 00) rlwinm r4,r3,0,0,0
+ a4: (00 00 64 54|54 64 00 00) clrrwi r4,r3,31
a8: (3e 00 64 54|54 64 00 3e) rotlwi r4,r3,0
- ac: (00 f8 64 54|54 64 f8 00) rlwinm r4,r3,31,0,0
+ ac: (00 f8 64 54|54 64 f8 00) slwi r4,r3,31
b0: (3e f8 64 54|54 64 f8 3e) rotlwi r4,r3,31
- b4: (7e f8 64 54|54 64 f8 7e) rlwinm r4,r3,31,1,31
+ b4: (7e f8 64 54|54 64 f8 7e) srwi r4,r3,1
b8: (fe ff 64 54|54 64 ff fe) rlwinm r4,r3,31,31,31
bc: (00 00 64 50|50 64 00 00) rlwimi r4,r3,0,0,0
c0: (3e 00 64 50|50 64 00 3e) rlwimi r4,r3,0,0,31
@@ -68,20 +68,20 @@ Disassembly of section .text:
e8: (3e 08 64 54|54 64 08 3e) rotlwi r4,r3,1
ec: (3e 20 65 5c|5c 65 20 3e) rotlw r5,r3,r4
f0: (3e 00 64 54|54 64 00 3e) rotlwi r4,r3,0
- f4: (3c 08 64 54|54 64 08 3c) rlwinm r4,r3,1,0,30
- f8: (00 f8 64 54|54 64 f8 00) rlwinm r4,r3,31,0,0
+ f4: (3c 08 64 54|54 64 08 3c) slwi r4,r3,1
+ f8: (00 f8 64 54|54 64 f8 00) slwi r4,r3,31
fc: (3e 00 64 54|54 64 00 3e) rotlwi r4,r3,0
- 100: (7e f8 64 54|54 64 f8 7e) rlwinm r4,r3,31,1,31
- 104: (fe 0f 64 54|54 64 0f fe) rlwinm r4,r3,1,31,31
+ 100: (7e f8 64 54|54 64 f8 7e) srwi r4,r3,1
+ 104: (fe 0f 64 54|54 64 0f fe) srwi r4,r3,31
108: (3e 00 64 54|54 64 00 3e) rotlwi r4,r3,0
10c: (7e 00 64 54|54 64 00 7e) clrlwi r4,r3,1
110: (fe 07 64 54|54 64 07 fe) clrlwi r4,r3,31
114: (3e 00 64 54|54 64 00 3e) rotlwi r4,r3,0
- 118: (3c 00 64 54|54 64 00 3c) rlwinm r4,r3,0,0,30
- 11c: (00 00 64 54|54 64 00 00) rlwinm r4,r3,0,0,0
+ 118: (3c 00 64 54|54 64 00 3c) clrrwi r4,r3,1
+ 11c: (00 00 64 54|54 64 00 00) clrrwi r4,r3,31
120: (3e 00 64 54|54 64 00 3e) rotlwi r4,r3,0
124: (7e 00 64 54|54 64 00 7e) clrlwi r4,r3,1
128: (fe 07 64 54|54 64 07 fe) clrlwi r4,r3,31
12c: (bc 0f 64 54|54 64 0f bc) rlwinm r4,r3,1,30,30
- 130: (00 f8 64 54|54 64 f8 00) rlwinm r4,r3,31,0,0
+ 130: (00 f8 64 54|54 64 f8 00) slwi r4,r3,31
#pass
diff --git a/gas/testsuite/gas/ppc/test1xcoff32.d b/gas/testsuite/gas/ppc/test1xcoff32.d
index 2f8f502cfc7..a0e48dee5d0 100644
--- a/gas/testsuite/gas/ppc/test1xcoff32.d
+++ b/gas/testsuite/gas/ppc/test1xcoff32.d
@@ -17,45 +17,45 @@ Idx Name +Size +VMA +LMA +File off +Algn
2 \.bss +00000000 0+0090 0+0090 00000000 2\*\*3
+ALLOC
SYMBOL TABLE:
-\[ 0\]\(sec -2\)\(fl 0x00\)\(ty 0\)\(scl 103\) \(nx 1\) 0x00000000 fake
+\[ 0\]\(sec -2\)\(fl 0x00\)\(ty 0\)\(scl 103\) \(nx 1\) 0x00000000 fake
File
-\[ 2\]\(sec 1\)\(fl 0x00\)\(ty 0\)\(scl 107\) \(nx 1\) 0x00000000 \.crazy_table
+\[ 2\]\(sec 1\)\(fl 0x00\)\(ty 0\)\(scl 107\) \(nx 1\) 0x00000000 \.crazy_table
AUX val 8 prmhsh 0 snhsh 0 typ 1 algn 2 clss 1 stb 0 snstb 0
-\[ 4\]\(sec 1\)\(fl 0x00\)\(ty 0\)\(scl 107\) \(nx 1\) 0x00000008
+\[ 4\]\(sec 1\)\(fl 0x00\)\(ty 0\)\(scl 107\) \(nx 1\) 0x00000008
AUX val 96 prmhsh 0 snhsh 0 typ 1 algn 2 clss 0 stb 0 snstb 0
-\[ 6\]\(sec 1\)\(fl 0x00\)\(ty 0\)\(scl 107\) \(nx 1\) 0x00000008 reference_csect_relative_symbols
+\[ 6\]\(sec 1\)\(fl 0x00\)\(ty 0\)\(scl 107\) \(nx 1\) 0x00000008 reference_csect_relative_symbols
AUX indx 4 prmhsh 0 snhsh 0 typ 2 algn 0 clss 0 stb 0 snstb 0
-\[ 8\]\(sec 1\)\(fl 0x00\)\(ty 0\)\(scl 107\) \(nx 1\) 0x00000018 dubious_references_to_default_RW_csect
+\[ 8\]\(sec 1\)\(fl 0x00\)\(ty 0\)\(scl 107\) \(nx 1\) 0x00000018 dubious_references_to_default_RW_csect
AUX indx 4 prmhsh 0 snhsh 0 typ 2 algn 0 clss 0 stb 0 snstb 0
-\[ 10\]\(sec 1\)\(fl 0x00\)\(ty 0\)\(scl 107\) \(nx 1\) 0x00000028 reference_via_toc
+\[ 10\]\(sec 1\)\(fl 0x00\)\(ty 0\)\(scl 107\) \(nx 1\) 0x00000028 reference_via_toc
AUX indx 4 prmhsh 0 snhsh 0 typ 2 algn 0 clss 0 stb 0 snstb 0
-\[ 12\]\(sec 1\)\(fl 0x00\)\(ty 0\)\(scl 107\) \(nx 1\) 0x00000040 subtract_symbols
+\[ 12\]\(sec 1\)\(fl 0x00\)\(ty 0\)\(scl 107\) \(nx 1\) 0x00000040 subtract_symbols
AUX indx 4 prmhsh 0 snhsh 0 typ 2 algn 0 clss 0 stb 0 snstb 0
-\[ 14\]\(sec 1\)\(fl 0x00\)\(ty 0\)\(scl 107\) \(nx 1\) 0x0000005c load_addresses
+\[ 14\]\(sec 1\)\(fl 0x00\)\(ty 0\)\(scl 107\) \(nx 1\) 0x0000005c load_addresses
AUX indx 4 prmhsh 0 snhsh 0 typ 2 algn 0 clss 0 stb 0 snstb 0
-\[ 16\]\(sec 2\)\(fl 0x00\)\(ty 0\)\(scl 107\) \(nx 1\) 0x00000068
+\[ 16\]\(sec 2\)\(fl 0x00\)\(ty 0\)\(scl 107\) \(nx 1\) 0x00000068
AUX val 12 prmhsh 0 snhsh 0 typ 1 algn 2 clss 5 stb 0 snstb 0
-\[ 18\]\(sec 2\)\(fl 0x00\)\(ty 0\)\(scl 107\) \(nx 1\) 0x00000074 TOC
+\[ 18\]\(sec 2\)\(fl 0x00\)\(ty 0\)\(scl 107\) \(nx 1\) 0x00000074 TOC
AUX val 0 prmhsh 0 snhsh 0 typ 1 algn 2 clss 15 stb 0 snstb 0
-\[ 20\]\(sec 2\)\(fl 0x00\)\(ty 0\)\(scl 107\) \(nx 1\) 0x00000074 ignored0
+\[ 20\]\(sec 2\)\(fl 0x00\)\(ty 0\)\(scl 107\) \(nx 1\) 0x00000074 ignored0
AUX val 4 prmhsh 0 snhsh 0 typ 1 algn 2 clss 3 stb 0 snstb 0
-\[ 22\]\(sec 2\)\(fl 0x00\)\(ty 0\)\(scl 107\) \(nx 1\) 0x00000078 ignored1
+\[ 22\]\(sec 2\)\(fl 0x00\)\(ty 0\)\(scl 107\) \(nx 1\) 0x00000078 ignored1
AUX val 4 prmhsh 0 snhsh 0 typ 1 algn 2 clss 3 stb 0 snstb 0
-\[ 24\]\(sec 2\)\(fl 0x00\)\(ty 0\)\(scl 107\) \(nx 1\) 0x0000007c ignored2
+\[ 24\]\(sec 2\)\(fl 0x00\)\(ty 0\)\(scl 107\) \(nx 1\) 0x0000007c ignored2
AUX val 4 prmhsh 0 snhsh 0 typ 1 algn 2 clss 3 stb 0 snstb 0
-\[ 26\]\(sec 2\)\(fl 0x00\)\(ty 0\)\(scl 107\) \(nx 1\) 0x00000080 ignored3
+\[ 26\]\(sec 2\)\(fl 0x00\)\(ty 0\)\(scl 107\) \(nx 1\) 0x00000080 ignored3
AUX val 4 prmhsh 0 snhsh 0 typ 1 algn 2 clss 3 stb 0 snstb 0
-\[ 28\]\(sec 2\)\(fl 0x00\)\(ty 0\)\(scl 107\) \(nx 1\) 0x00000084 ignored4
+\[ 28\]\(sec 2\)\(fl 0x00\)\(ty 0\)\(scl 107\) \(nx 1\) 0x00000084 ignored4
AUX val 4 prmhsh 0 snhsh 0 typ 1 algn 2 clss 3 stb 0 snstb 0
-\[ 30\]\(sec 2\)\(fl 0x00\)\(ty 0\)\(scl 107\) \(nx 1\) 0x00000088 ignored5
+\[ 30\]\(sec 2\)\(fl 0x00\)\(ty 0\)\(scl 107\) \(nx 1\) 0x00000088 ignored5
AUX val 4 prmhsh 0 snhsh 0 typ 1 algn 2 clss 3 stb 0 snstb 0
-\[ 32\]\(sec 2\)\(fl 0x00\)\(ty 0\)\(scl 107\) \(nx 1\) 0x0000008c ignored6
+\[ 32\]\(sec 2\)\(fl 0x00\)\(ty 0\)\(scl 107\) \(nx 1\) 0x0000008c ignored6
AUX val 4 prmhsh 0 snhsh 0 typ 1 algn 2 clss 3 stb 0 snstb 0
-\[ 34\]\(sec 0\)\(fl 0x00\)\(ty 0\)\(scl 2\) \(nx 1\) 0x00000000 esym0
+\[ 34\]\(sec 0\)\(fl 0x00\)\(ty 0\)\(scl 2\) \(nx 1\) 0x00000000 esym0
AUX val 0 prmhsh 0 snhsh 0 typ 0 algn 0 clss 0 stb 0 snstb 0
-\[ 36\]\(sec 0\)\(fl 0x00\)\(ty 0\)\(scl 2\) \(nx 1\) 0x00000000 esym1
+\[ 36\]\(sec 0\)\(fl 0x00\)\(ty 0\)\(scl 2\) \(nx 1\) 0x00000000 esym1
AUX val 0 prmhsh 0 snhsh 0 typ 0 algn 0 clss 0 stb 0 snstb 0
-\[ 38\]\(sec 1\)\(fl 0x00\)\(ty 0\)\(scl 3\) \(nx 1\) 0x00000000 \.text
+\[ 38\]\(sec 1\)\(fl 0x00\)\(ty 0\)\(scl 3\) \(nx 1\) 0x00000000 \.text
AUX scnlen 0x68 nreloc 7 nlnno 0
diff --git a/gas/testsuite/gas/ppc/vle-simple-5.d b/gas/testsuite/gas/ppc/vle-simple-5.d
index 817df09d1cd..faae5f34abf 100644
--- a/gas/testsuite/gas/ppc/vle-simple-5.d
+++ b/gas/testsuite/gas/ppc/vle-simple-5.d
@@ -7,14 +7,14 @@
Disassembly of section .text:
0+0 <.text>:
- 0: 74 42 00 01 e_rlwinm r2,r2,0,0,0
+ 0: 74 42 00 01 e_clrrwi r2,r2,31
4: 74 62 7d bf e_rlwinm r2,r3,15,22,31
8: 74 a4 f8 48 e_rlwimi r4,r5,31,1,4
c: 74 e6 c9 4c e_rlwimi r6,r7,25,5,6
- 10: 74 41 50 3f e_rlwinm r1,r2,10,0,31
- 14: 74 83 c0 3f e_rlwinm r3,r4,24,0,31
+ 10: 74 41 50 3f e_rotlwi r1,r2,10
+ 14: 74 83 c0 3f e_rotlwi r3,r4,24
18: 7c 62 f8 70 e_slwi r2,r3,31
1c: 7c 25 f4 70 e_srwi r5,r1,30
- 20: 74 64 07 7f e_rlwinm r4,r3,0,29,31
- 24: 74 41 00 07 e_rlwinm r1,r2,0,0,3
+ 20: 74 64 07 7f e_clrlwi r4,r3,29
+ 24: 74 41 00 07 e_clrrwi r1,r2,28
28: 74 e6 d8 49 e_rlwinm r6,r7,27,1,4
diff --git a/gas/testsuite/gas/ppc/xcoff-visibility-1-32.d b/gas/testsuite/gas/ppc/xcoff-visibility-1-32.d
new file mode 100644
index 00000000000..f3d00eb6f24
--- /dev/null
+++ b/gas/testsuite/gas/ppc/xcoff-visibility-1-32.d
@@ -0,0 +1,70 @@
+#as: -a32
+#source: xcoff-visibility-1.s
+#objdump: -t
+#name: XCOFF Visibility 1 (32 bit)
+
+.*
+
+SYMBOL TABLE:
+.*
+.*
+.*
+.*
+\[ 4\].*\(ty 0\).*l_novisibility
+.*
+\[ 6\].*\(ty 1000\).*l_internal
+.*
+\[ 8\].*\(ty 2000\).*l_hidden
+.*
+\[ 10\].*\(ty 3000\).*l_protected
+.*
+\[ 12\].*\(ty 4000\).*l_exported
+.*
+\[ 14\].*\(ty 1000\).*l_dual
+.*
+\[ 16\].*\(ty 0\).*globl_novisibility
+.*
+\[ 18\].*\(ty 1000\).*globl_internal
+.*
+\[ 20\].*\(ty 2000\).*globl_hidden
+.*
+\[ 22\].*\(ty 3000\).*globl_protected
+.*
+\[ 24\].*\(ty 4000\).*globl_exported
+.*
+\[ 26\].*\(ty 1000\).*globl_dual
+.*
+\[ 28\].*\(ty 0\).*weak_novisibility
+.*
+\[ 30\].*\(ty 1000\).*weak_internal
+.*
+\[ 32\].*\(ty 2000\).*weak_hidden
+.*
+\[ 34\].*\(ty 3000\).*weak_protected
+.*
+\[ 36\].*\(ty 4000\).*weak_exported
+.*
+\[ 38\].*\(ty 1000\).*weak_dual
+.*
+\[ 40\].*\(ty 0\).*comm_novisibility
+.*
+\[ 42\].*\(ty 1000\).*comm_internal
+.*
+\[ 44\].*\(ty 2000\).*comm_hidden
+.*
+\[ 46\].*\(ty 3000\).*comm_protected
+.*
+\[ 48\].*\(ty 4000\).*comm_exported
+.*
+\[ 50\].*\(ty 0\).*extern_novisibility
+.*
+\[ 52\].*\(ty 1000\).*extern_internal
+.*
+\[ 54\].*\(ty 2000\).*extern_hidden
+.*
+\[ 56\].*\(ty 3000\).*extern_protected
+.*
+\[ 58\].*\(ty 4000\).*extern_exported
+.*
+\[ 60\].*\(ty 1000\).*extern_dual
+.*
diff --git a/gas/testsuite/gas/ppc/xcoff-visibility-1-64.d b/gas/testsuite/gas/ppc/xcoff-visibility-1-64.d
new file mode 100644
index 00000000000..fd686e10d93
--- /dev/null
+++ b/gas/testsuite/gas/ppc/xcoff-visibility-1-64.d
@@ -0,0 +1,70 @@
+#as: -a64
+#source: xcoff-visibility-1.s
+#objdump: -t
+#name: XCOFF Visibility 1 (64 bit)
+
+.*
+
+SYMBOL TABLE:
+.*
+.*
+.*
+.*
+\[ 4\].*\(ty 0\).*l_novisibility
+.*
+\[ 6\].*\(ty 1000\).*l_internal
+.*
+\[ 8\].*\(ty 2000\).*l_hidden
+.*
+\[ 10\].*\(ty 3000\).*l_protected
+.*
+\[ 12\].*\(ty 4000\).*l_exported
+.*
+\[ 14\].*\(ty 1000\).*l_dual
+.*
+\[ 16\].*\(ty 0\).*globl_novisibility
+.*
+\[ 18\].*\(ty 1000\).*globl_internal
+.*
+\[ 20\].*\(ty 2000\).*globl_hidden
+.*
+\[ 22\].*\(ty 3000\).*globl_protected
+.*
+\[ 24\].*\(ty 4000\).*globl_exported
+.*
+\[ 26\].*\(ty 1000\).*globl_dual
+.*
+\[ 28\].*\(ty 0\).*weak_novisibility
+.*
+\[ 30\].*\(ty 1000\).*weak_internal
+.*
+\[ 32\].*\(ty 2000\).*weak_hidden
+.*
+\[ 34\].*\(ty 3000\).*weak_protected
+.*
+\[ 36\].*\(ty 4000\).*weak_exported
+.*
+\[ 38\].*\(ty 1000\).*weak_dual
+.*
+\[ 40\].*\(ty 0\).*comm_novisibility
+.*
+\[ 42\].*\(ty 1000\).*comm_internal
+.*
+\[ 44\].*\(ty 2000\).*comm_hidden
+.*
+\[ 46\].*\(ty 3000\).*comm_protected
+.*
+\[ 48\].*\(ty 4000\).*comm_exported
+.*
+\[ 50\].*\(ty 0\).*extern_novisibility
+.*
+\[ 52\].*\(ty 1000\).*extern_internal
+.*
+\[ 54\].*\(ty 2000\).*extern_hidden
+.*
+\[ 56\].*\(ty 3000\).*extern_protected
+.*
+\[ 58\].*\(ty 4000\).*extern_exported
+.*
+\[ 60\].*\(ty 1000\).*extern_dual
+.*
diff --git a/gas/testsuite/gas/ppc/xcoff-visibility-1.s b/gas/testsuite/gas/ppc/xcoff-visibility-1.s
new file mode 100644
index 00000000000..995c5e51f3f
--- /dev/null
+++ b/gas/testsuite/gas/ppc/xcoff-visibility-1.s
@@ -0,0 +1,78 @@
+# Tests every possible visibility using XCOFF format.
+# Ensure that the visibility field is left empty if no
+# visibility is provided.
+# Ensure that only the last visibility is taken into
+# account when several are provided.
+
+# Csect visibility
+ .globl globl_novisibility[RW]
+ .csect globl_novisibility[RW]
+ .globl globl_internal[RW], internal
+ .csect globl_internal[RW]
+ .globl globl_hidden[RW], hidden
+ .csect globl_hidden[RW]
+ .globl globl_protected[RW], protected
+ .csect globl_protected[RW]
+ .globl globl_exported[RW], exported
+ .csect globl_exported[RW]
+ .globl globl_dual[RW], exported
+ .globl globl_dual[RW], internal
+ .csect globl_dual[RW]
+
+# Weak csect visibility
+ .weak weak_novisibility[RW]
+ .csect weak_novisibility[RW]
+ .weak weak_internal[RW], internal
+ .csect weak_internal[RW]
+ .weak weak_hidden[RW], hidden
+ .csect weak_hidden[RW]
+ .weak weak_protected[RW], protected
+ .csect weak_protected[RW]
+ .weak weak_exported[RW], exported
+ .csect weak_exported[RW]
+ .weak weak_dual[RW], exported
+ .weak weak_dual[RW], internal
+ .csect weak_dual[RW]
+
+# Comm visibility
+ .comm comm_novisibility[RW], 8, 4
+ .comm comm_internal[RW], 8, 4, internal
+ .comm comm_hidden[RW], 8, 4, hidden
+ .comm comm_protected[RW], 8, 4, protected
+ .comm comm_exported[RW], 8, 4, exported
+
+# Extern visibility
+ .extern extern_novisibility[RW]
+ .extern extern_internal[RW], internal
+ .extern extern_hidden[RW], hidden
+ .extern extern_protected[RW], protected
+ .extern extern_exported[RW], exported
+ .extern extern_dual[RW], exported
+ .extern extern_dual[RW], internal
+
+# Label visibility
+ .csect .text[PR]
+ .globl l_novisibility
+l_novisibility:
+ blr
+
+ .globl l_internal, internal
+l_internal:
+ blr
+
+ .globl l_hidden, hidden
+l_hidden:
+ blr
+
+ .globl l_protected, protected
+l_protected:
+ blr
+
+ .globl l_exported, exported
+l_exported:
+ blr
+
+ .globl l_dual, exported
+ .globl l_dual, internal
+l_dual:
+ blr
diff --git a/gas/testsuite/gas/ppc/xcoff-visibility-2-32.d b/gas/testsuite/gas/ppc/xcoff-visibility-2-32.d
new file mode 100644
index 00000000000..ec2befbd85e
--- /dev/null
+++ b/gas/testsuite/gas/ppc/xcoff-visibility-2-32.d
@@ -0,0 +1,18 @@
+#as: -a32
+#source: xcoff-visibility-2.s
+#objdump: -t
+#name: XCOFF Visibility 2 (32 bit)
+
+.*
+
+SYMBOL TABLE:
+.*
+.*
+\[ 2\].*\(ty 1000\).*internal
+.*
+\[ 4\].*\(ty 2000\).*hidden
+.*
+\[ 6\].*\(ty 3000\).*protected
+.*
+\[ 8\].*\(ty 1000\).*dual
+.*
diff --git a/gas/testsuite/gas/ppc/xcoff-visibility-2-64.d b/gas/testsuite/gas/ppc/xcoff-visibility-2-64.d
new file mode 100644
index 00000000000..48d50a54d21
--- /dev/null
+++ b/gas/testsuite/gas/ppc/xcoff-visibility-2-64.d
@@ -0,0 +1,18 @@
+#as: -a64
+#source: xcoff-visibility-2.s
+#objdump: -t
+#name: XCOFF Visibility 2 (64 bit)
+
+.*
+
+SYMBOL TABLE:
+.*
+.*
+\[ 2\].*\(ty 1000\).*internal
+.*
+\[ 4\].*\(ty 2000\).*hidden
+.*
+\[ 6\].*\(ty 3000\).*protected
+.*
+\[ 8\].*\(ty 1000\).*dual
+.*
diff --git a/gas/testsuite/gas/ppc/xcoff-visibility-2.s b/gas/testsuite/gas/ppc/xcoff-visibility-2.s
new file mode 100644
index 00000000000..c5f0f7fce98
--- /dev/null
+++ b/gas/testsuite/gas/ppc/xcoff-visibility-2.s
@@ -0,0 +1,9 @@
+# Ensure that GNU syntax is accepted even for XCOFF.
+ .internal internal
+ .hidden hidden
+ .protected protected
+
+# Ensure that only the last visibility is taken into
+# account, when several are provided.
+ .protected dual
+ .internal dual
diff --git a/gas/testsuite/gas/riscv/c-fld-fsd-fail.l b/gas/testsuite/gas/riscv/c-fld-fsd-fail.l
index 7d99abbaad8..b701fac14c0 100644
--- a/gas/testsuite/gas/riscv/c-fld-fsd-fail.l
+++ b/gas/testsuite/gas/riscv/c-fld-fsd-fail.l
@@ -1,3 +1,3 @@
.*: Assembler messages:
-.*: Error: unrecognized opcode `fld fa0,0\(a0\)'
-.*: Error: unrecognized opcode `fsd fa0,0\(a0\)'
+.*: Error: unrecognized opcode `fld fa0,0\(a0\)', extension `d' required
+.*: Error: unrecognized opcode `fsd fa0,0\(a0\)', extension `d' required
diff --git a/gas/testsuite/gas/riscv/csr-dw-regnums.d b/gas/testsuite/gas/riscv/csr-dw-regnums.d
index ea0a445c39c..23ceba193ca 100644
--- a/gas/testsuite/gas/riscv/csr-dw-regnums.d
+++ b/gas/testsuite/gas/riscv/csr-dw-regnums.d
@@ -1,4 +1,4 @@
-#as: -march=rv32if -mpriv-spec=1.11
+#as: -march=rv32if -mpriv-spec=1.12
#objdump: --dwarf=frames
@@ -17,14 +17,6 @@ Contents of the .* section:
#...
[a-zA-Z0-9]+ [a-zA-Z0-9]+ [a-zA-Z0-9]+ FDE cie=00000000 pc=[a-zA-Z0-9]+\.\.[a-zA-Z0-9]+
DW_CFA_advance_loc: 4 to 0+0000020
- DW_CFA_offset_extended: r4096 \(ustatus\) at cfa\+0
- DW_CFA_offset_extended_sf: r4100 \(uie\) at cfa\+16
- DW_CFA_offset_extended_sf: r4101 \(utvec\) at cfa\+20
- DW_CFA_offset_extended_sf: r4160 \(uscratch\) at cfa\+256
- DW_CFA_offset_extended_sf: r4161 \(uepc\) at cfa\+260
- DW_CFA_offset_extended_sf: r4162 \(ucause\) at cfa\+264
- DW_CFA_offset_extended_sf: r4163 \(utval\) at cfa\+268
- DW_CFA_offset_extended_sf: r4164 \(uip\) at cfa\+272
DW_CFA_offset_extended_sf: r7168 \(cycle\) at cfa\+12288
DW_CFA_offset_extended_sf: r7169 \(time\) at cfa\+12292
DW_CFA_offset_extended_sf: r7170 \(instret\) at cfa\+12296
@@ -90,11 +82,10 @@ Contents of the .* section:
DW_CFA_offset_extended_sf: r7326 \(hpmcounter30h\) at cfa\+12920
DW_CFA_offset_extended_sf: r7327 \(hpmcounter31h\) at cfa\+12924
DW_CFA_offset_extended_sf: r4352 \(sstatus\) at cfa\+1024
- DW_CFA_offset_extended_sf: r4354 \(sedeleg\) at cfa\+1032
- DW_CFA_offset_extended_sf: r4355 \(sideleg\) at cfa\+1036
DW_CFA_offset_extended_sf: r4356 \(sie\) at cfa\+1040
DW_CFA_offset_extended_sf: r4357 \(stvec\) at cfa\+1044
DW_CFA_offset_extended_sf: r4358 \(scounteren\) at cfa\+1048
+ DW_CFA_offset_extended_sf: r4362 \(senvcfg\) at cfa\+1064
DW_CFA_offset_extended_sf: r4416 \(sscratch\) at cfa\+1280
DW_CFA_offset_extended_sf: r4417 \(sepc\) at cfa\+1284
DW_CFA_offset_extended_sf: r4418 \(scause\) at cfa\+1288
@@ -105,6 +96,7 @@ Contents of the .* section:
DW_CFA_offset_extended_sf: r7954 \(marchid\) at cfa\+15432
DW_CFA_offset_extended_sf: r7955 \(mimpid\) at cfa\+15436
DW_CFA_offset_extended_sf: r7956 \(mhartid\) at cfa\+15440
+ DW_CFA_offset_extended_sf: r7957 \(mconfigptr\) at cfa\+15444
DW_CFA_offset_extended_sf: r4864 \(mstatus\) at cfa\+3072
DW_CFA_offset_extended_sf: r4865 \(misa\) at cfa\+3076
DW_CFA_offset_extended_sf: r4866 \(medeleg\) at cfa\+3080
@@ -112,15 +104,34 @@ Contents of the .* section:
DW_CFA_offset_extended_sf: r4868 \(mie\) at cfa\+3088
DW_CFA_offset_extended_sf: r4869 \(mtvec\) at cfa\+3092
DW_CFA_offset_extended_sf: r4870 \(mcounteren\) at cfa\+3096
+ DW_CFA_offset_extended_sf: r4880 \(mstatush\) at cfa\+3136
DW_CFA_offset_extended_sf: r4928 \(mscratch\) at cfa\+3328
DW_CFA_offset_extended_sf: r4929 \(mepc\) at cfa\+3332
DW_CFA_offset_extended_sf: r4930 \(mcause\) at cfa\+3336
DW_CFA_offset_extended_sf: r4931 \(mtval\) at cfa\+3340
DW_CFA_offset_extended_sf: r4932 \(mip\) at cfa\+3344
+ DW_CFA_offset_extended_sf: r4938 \(mtinst\) at cfa\+3368
+ DW_CFA_offset_extended_sf: r4939 \(mtval2\) at cfa\+3372
+ DW_CFA_offset_extended_sf: r4874 \(menvcfg\) at cfa\+3112
+ DW_CFA_offset_extended_sf: r4890 \(menvcfgh\) at cfa\+3176
+ DW_CFA_offset_extended_sf: r5959 \(mseccfg\) at cfa\+7452
+ DW_CFA_offset_extended_sf: r5975 \(mseccfgh\) at cfa\+7516
DW_CFA_offset_extended_sf: r5024 \(pmpcfg0\) at cfa\+3712
DW_CFA_offset_extended_sf: r5025 \(pmpcfg1\) at cfa\+3716
DW_CFA_offset_extended_sf: r5026 \(pmpcfg2\) at cfa\+3720
DW_CFA_offset_extended_sf: r5027 \(pmpcfg3\) at cfa\+3724
+ DW_CFA_offset_extended_sf: r5028 \(pmpcfg4\) at cfa\+3728
+ DW_CFA_offset_extended_sf: r5029 \(pmpcfg5\) at cfa\+3732
+ DW_CFA_offset_extended_sf: r5030 \(pmpcfg6\) at cfa\+3736
+ DW_CFA_offset_extended_sf: r5031 \(pmpcfg7\) at cfa\+3740
+ DW_CFA_offset_extended_sf: r5032 \(pmpcfg8\) at cfa\+3744
+ DW_CFA_offset_extended_sf: r5033 \(pmpcfg9\) at cfa\+3748
+ DW_CFA_offset_extended_sf: r5034 \(pmpcfg10\) at cfa\+3752
+ DW_CFA_offset_extended_sf: r5035 \(pmpcfg11\) at cfa\+3756
+ DW_CFA_offset_extended_sf: r5036 \(pmpcfg12\) at cfa\+3760
+ DW_CFA_offset_extended_sf: r5037 \(pmpcfg13\) at cfa\+3764
+ DW_CFA_offset_extended_sf: r5038 \(pmpcfg14\) at cfa\+3768
+ DW_CFA_offset_extended_sf: r5039 \(pmpcfg15\) at cfa\+3772
DW_CFA_offset_extended_sf: r5040 \(pmpaddr0\) at cfa\+3776
DW_CFA_offset_extended_sf: r5041 \(pmpaddr1\) at cfa\+3780
DW_CFA_offset_extended_sf: r5042 \(pmpaddr2\) at cfa\+3784
@@ -137,6 +148,54 @@ Contents of the .* section:
DW_CFA_offset_extended_sf: r5053 \(pmpaddr13\) at cfa\+3828
DW_CFA_offset_extended_sf: r5054 \(pmpaddr14\) at cfa\+3832
DW_CFA_offset_extended_sf: r5055 \(pmpaddr15\) at cfa\+3836
+ DW_CFA_offset_extended_sf: r5056 \(pmpaddr16\) at cfa\+3840
+ DW_CFA_offset_extended_sf: r5057 \(pmpaddr17\) at cfa\+3844
+ DW_CFA_offset_extended_sf: r5058 \(pmpaddr18\) at cfa\+3848
+ DW_CFA_offset_extended_sf: r5059 \(pmpaddr19\) at cfa\+3852
+ DW_CFA_offset_extended_sf: r5060 \(pmpaddr20\) at cfa\+3856
+ DW_CFA_offset_extended_sf: r5061 \(pmpaddr21\) at cfa\+3860
+ DW_CFA_offset_extended_sf: r5062 \(pmpaddr22\) at cfa\+3864
+ DW_CFA_offset_extended_sf: r5063 \(pmpaddr23\) at cfa\+3868
+ DW_CFA_offset_extended_sf: r5064 \(pmpaddr24\) at cfa\+3872
+ DW_CFA_offset_extended_sf: r5065 \(pmpaddr25\) at cfa\+3876
+ DW_CFA_offset_extended_sf: r5066 \(pmpaddr26\) at cfa\+3880
+ DW_CFA_offset_extended_sf: r5067 \(pmpaddr27\) at cfa\+3884
+ DW_CFA_offset_extended_sf: r5068 \(pmpaddr28\) at cfa\+3888
+ DW_CFA_offset_extended_sf: r5069 \(pmpaddr29\) at cfa\+3892
+ DW_CFA_offset_extended_sf: r5070 \(pmpaddr30\) at cfa\+3896
+ DW_CFA_offset_extended_sf: r5071 \(pmpaddr31\) at cfa\+3900
+ DW_CFA_offset_extended_sf: r5072 \(pmpaddr32\) at cfa\+3904
+ DW_CFA_offset_extended_sf: r5073 \(pmpaddr33\) at cfa\+3908
+ DW_CFA_offset_extended_sf: r5074 \(pmpaddr34\) at cfa\+3912
+ DW_CFA_offset_extended_sf: r5075 \(pmpaddr35\) at cfa\+3916
+ DW_CFA_offset_extended_sf: r5076 \(pmpaddr36\) at cfa\+3920
+ DW_CFA_offset_extended_sf: r5077 \(pmpaddr37\) at cfa\+3924
+ DW_CFA_offset_extended_sf: r5078 \(pmpaddr38\) at cfa\+3928
+ DW_CFA_offset_extended_sf: r5079 \(pmpaddr39\) at cfa\+3932
+ DW_CFA_offset_extended_sf: r5080 \(pmpaddr40\) at cfa\+3936
+ DW_CFA_offset_extended_sf: r5081 \(pmpaddr41\) at cfa\+3940
+ DW_CFA_offset_extended_sf: r5082 \(pmpaddr42\) at cfa\+3944
+ DW_CFA_offset_extended_sf: r5083 \(pmpaddr43\) at cfa\+3948
+ DW_CFA_offset_extended_sf: r5084 \(pmpaddr44\) at cfa\+3952
+ DW_CFA_offset_extended_sf: r5085 \(pmpaddr45\) at cfa\+3956
+ DW_CFA_offset_extended_sf: r5086 \(pmpaddr46\) at cfa\+3960
+ DW_CFA_offset_extended_sf: r5087 \(pmpaddr47\) at cfa\+3964
+ DW_CFA_offset_extended_sf: r5088 \(pmpaddr48\) at cfa\+3968
+ DW_CFA_offset_extended_sf: r5089 \(pmpaddr49\) at cfa\+3972
+ DW_CFA_offset_extended_sf: r5090 \(pmpaddr50\) at cfa\+3976
+ DW_CFA_offset_extended_sf: r5091 \(pmpaddr51\) at cfa\+3980
+ DW_CFA_offset_extended_sf: r5092 \(pmpaddr52\) at cfa\+3984
+ DW_CFA_offset_extended_sf: r5093 \(pmpaddr53\) at cfa\+3988
+ DW_CFA_offset_extended_sf: r5094 \(pmpaddr54\) at cfa\+3992
+ DW_CFA_offset_extended_sf: r5095 \(pmpaddr55\) at cfa\+3996
+ DW_CFA_offset_extended_sf: r5096 \(pmpaddr56\) at cfa\+4000
+ DW_CFA_offset_extended_sf: r5097 \(pmpaddr57\) at cfa\+4004
+ DW_CFA_offset_extended_sf: r5098 \(pmpaddr58\) at cfa\+4008
+ DW_CFA_offset_extended_sf: r5099 \(pmpaddr59\) at cfa\+4012
+ DW_CFA_offset_extended_sf: r5100 \(pmpaddr60\) at cfa\+4016
+ DW_CFA_offset_extended_sf: r5101 \(pmpaddr61\) at cfa\+4020
+ DW_CFA_offset_extended_sf: r5102 \(pmpaddr62\) at cfa\+4024
+ DW_CFA_offset_extended_sf: r5103 \(pmpaddr63\) at cfa\+4028
DW_CFA_offset_extended_sf: r6912 \(mcycle\) at cfa\+11264
DW_CFA_offset_extended_sf: r6914 \(minstret\) at cfa\+11272
DW_CFA_offset_extended_sf: r6915 \(mhpmcounter3\) at cfa\+11276
@@ -229,6 +288,36 @@ Contents of the .* section:
DW_CFA_offset_extended_sf: r4925 \(mhpmevent29\) at cfa\+3316
DW_CFA_offset_extended_sf: r4926 \(mhpmevent30\) at cfa\+3320
DW_CFA_offset_extended_sf: r4927 \(mhpmevent31\) at cfa\+3324
+ DW_CFA_offset_extended_sf: r5632 \(hstatus\) at cfa\+6144
+ DW_CFA_offset_extended_sf: r5634 \(hedeleg\) at cfa\+6152
+ DW_CFA_offset_extended_sf: r5635 \(hideleg\) at cfa\+6156
+ DW_CFA_offset_extended_sf: r5636 \(hie\) at cfa\+6160
+ DW_CFA_offset_extended_sf: r5638 \(hcounteren\) at cfa\+6168
+ DW_CFA_offset_extended_sf: r5639 \(hgeie\) at cfa\+6172
+ DW_CFA_offset_extended_sf: r5699 \(htval\) at cfa\+6412
+ DW_CFA_offset_extended_sf: r5700 \(hip\) at cfa\+6416
+ DW_CFA_offset_extended_sf: r5701 \(hvip\) at cfa\+6420
+ DW_CFA_offset_extended_sf: r5706 \(htinst\) at cfa\+6440
+ DW_CFA_offset_extended_sf: r7698 \(hgeip\) at cfa\+14408
+ DW_CFA_offset_extended_sf: r5642 \(henvcfg\) at cfa\+6184
+ DW_CFA_offset_extended_sf: r5658 \(henvcfgh\) at cfa\+6248
+ DW_CFA_offset_extended_sf: r5760 \(hgatp\) at cfa\+6656
+ DW_CFA_offset_extended_sf: r5637 \(htimedelta\) at cfa\+6164
+ DW_CFA_offset_extended_sf: r5653 \(htimedeltah\) at cfa\+6228
+ DW_CFA_offset_extended_sf: r4608 \(vsstatus\) at cfa\+2048
+ DW_CFA_offset_extended_sf: r4612 \(vsie\) at cfa\+2064
+ DW_CFA_offset_extended_sf: r4613 \(vstvec\) at cfa\+2068
+ DW_CFA_offset_extended_sf: r4672 \(vsscratch\) at cfa\+2304
+ DW_CFA_offset_extended_sf: r4673 \(vsepc\) at cfa\+2308
+ DW_CFA_offset_extended_sf: r4674 \(vscause\) at cfa\+2312
+ DW_CFA_offset_extended_sf: r4675 \(vstval\) at cfa\+2316
+ DW_CFA_offset_extended_sf: r4676 \(vsip\) at cfa\+2320
+ DW_CFA_offset_extended_sf: r4736 \(vsatp\) at cfa\+2560
+ DW_CFA_offset_extended_sf: r4163 \(utval\) at cfa\+268
+ DW_CFA_offset_extended_sf: r4419 \(stval\) at cfa\+1292
+ DW_CFA_offset_extended_sf: r4480 \(satp\) at cfa\+1536
+ DW_CFA_offset_extended_sf: r4931 \(mtval\) at cfa\+3340
+ DW_CFA_offset_extended_sf: r4896 \(mcountinhibit\) at cfa\+3200
DW_CFA_offset_extended_sf: r4992 \(mbase\) at cfa\+3584
DW_CFA_offset_extended_sf: r4993 \(mbound\) at cfa\+3588
DW_CFA_offset_extended_sf: r4994 \(mibase\) at cfa\+3592
@@ -237,6 +326,16 @@ Contents of the .* section:
DW_CFA_offset_extended_sf: r4997 \(mdbound\) at cfa\+3604
DW_CFA_offset_extended_sf: r4897 \(mscounteren\) at cfa\+3204
DW_CFA_offset_extended_sf: r4898 \(mhcounteren\) at cfa\+3208
+ DW_CFA_offset_extended: r4096 \(ustatus\) at cfa\+0
+ DW_CFA_offset_extended_sf: r4100 \(uie\) at cfa\+16
+ DW_CFA_offset_extended_sf: r4101 \(utvec\) at cfa\+20
+ DW_CFA_offset_extended_sf: r4160 \(uscratch\) at cfa\+256
+ DW_CFA_offset_extended_sf: r4161 \(uepc\) at cfa\+260
+ DW_CFA_offset_extended_sf: r4162 \(ucause\) at cfa\+264
+ DW_CFA_offset_extended_sf: r4163 \(utval\) at cfa\+268
+ DW_CFA_offset_extended_sf: r4164 \(uip\) at cfa\+272
+ DW_CFA_offset_extended_sf: r4354 \(sedeleg\) at cfa\+1032
+ DW_CFA_offset_extended_sf: r4355 \(sideleg\) at cfa\+1036
DW_CFA_offset_extended_sf: r4097 \(fflags\) at cfa\+4
DW_CFA_offset_extended_sf: r4098 \(frm\) at cfa\+8
DW_CFA_offset_extended_sf: r4099 \(fcsr\) at cfa\+12
@@ -244,24 +343,31 @@ Contents of the .* section:
DW_CFA_offset_extended_sf: r6065 \(dpc\) at cfa\+7876
DW_CFA_offset_extended_sf: r6066 \(dscratch0\) at cfa\+7880
DW_CFA_offset_extended_sf: r6067 \(dscratch1\) at cfa\+7884
+ DW_CFA_offset_extended_sf: r6066 \(dscratch0\) at cfa\+7880
DW_CFA_offset_extended_sf: r6048 \(tselect\) at cfa\+7808
DW_CFA_offset_extended_sf: r6049 \(tdata1\) at cfa\+7812
DW_CFA_offset_extended_sf: r6050 \(tdata2\) at cfa\+7816
DW_CFA_offset_extended_sf: r6051 \(tdata3\) at cfa\+7820
DW_CFA_offset_extended_sf: r6052 \(tinfo\) at cfa\+7824
DW_CFA_offset_extended_sf: r6053 \(tcontrol\) at cfa\+7828
+ DW_CFA_offset_extended_sf: r5800 \(hcontext\) at cfa\+6816
+ DW_CFA_offset_extended_sf: r5544 \(scontext\) at cfa\+5792
DW_CFA_offset_extended_sf: r6056 \(mcontext\) at cfa\+7840
- DW_CFA_offset_extended_sf: r6058 \(scontext\) at cfa\+7848
- DW_CFA_offset_extended_sf: r4163 \(utval\) at cfa\+268
- DW_CFA_offset_extended_sf: r4419 \(stval\) at cfa\+1292
- DW_CFA_offset_extended_sf: r4480 \(satp\) at cfa\+1536
- DW_CFA_offset_extended_sf: r4931 \(mtval\) at cfa\+3340
- DW_CFA_offset_extended_sf: r4896 \(mcountinhibit\) at cfa\+3200
- DW_CFA_offset_extended_sf: r6066 \(dscratch0\) at cfa\+7880
+ DW_CFA_offset_extended_sf: r6058 \(mscontext\) at cfa\+7848
+ DW_CFA_offset_extended_sf: r6049 \(tdata1\) at cfa\+7812
+ DW_CFA_offset_extended_sf: r6049 \(tdata1\) at cfa\+7812
DW_CFA_offset_extended_sf: r6049 \(tdata1\) at cfa\+7812
DW_CFA_offset_extended_sf: r6049 \(tdata1\) at cfa\+7812
DW_CFA_offset_extended_sf: r6049 \(tdata1\) at cfa\+7812
DW_CFA_offset_extended_sf: r6049 \(tdata1\) at cfa\+7812
DW_CFA_offset_extended_sf: r6051 \(tdata3\) at cfa\+7820
DW_CFA_offset_extended_sf: r6051 \(tdata3\) at cfa\+7820
+ DW_CFA_offset_extended_sf: r4117 \(seed\) at cfa\+84
+ DW_CFA_offset_extended_sf: r4104 \(vstart\) at cfa\+32
+ DW_CFA_offset_extended_sf: r4105 \(vxsat\) at cfa\+36
+ DW_CFA_offset_extended_sf: r4106 \(vxrm\) at cfa\+40
+ DW_CFA_offset_extended_sf: r4111 \(vcsr\) at cfa\+60
+ DW_CFA_offset_extended_sf: r7200 \(vl\) at cfa\+12416
+ DW_CFA_offset_extended_sf: r7201 \(vtype\) at cfa\+12420
+ DW_CFA_offset_extended_sf: r7202 \(vlenb\) at cfa\+12424
#...
diff --git a/gas/testsuite/gas/riscv/csr-dw-regnums.s b/gas/testsuite/gas/riscv/csr-dw-regnums.s
index 549475d650e..4a243ad7b0f 100644
--- a/gas/testsuite/gas/riscv/csr-dw-regnums.s
+++ b/gas/testsuite/gas/riscv/csr-dw-regnums.s
@@ -7,14 +7,7 @@
_start:
.cfi_startproc
nop
- .cfi_offset ustatus, 0
- .cfi_offset uie, 16
- .cfi_offset utvec, 20
- .cfi_offset uscratch, 256
- .cfi_offset uepc, 260
- .cfi_offset ucause, 264
- .cfi_offset utval, 268
- .cfi_offset uip, 272
+ # user counters/timers
.cfi_offset cycle, 12288
.cfi_offset time, 12292
.cfi_offset instret, 12296
@@ -79,22 +72,24 @@ _start:
.cfi_offset hpmcounter29h, 12916
.cfi_offset hpmcounter30h, 12920
.cfi_offset hpmcounter31h, 12924
+ # supervisor
.cfi_offset sstatus, 1024
- .cfi_offset sedeleg, 1032
- .cfi_offset sideleg, 1036
.cfi_offset sie, 1040
.cfi_offset stvec, 1044
.cfi_offset scounteren, 1048
+ .cfi_offset senvcfg, 1064
.cfi_offset sscratch, 1280
.cfi_offset sepc, 1284
.cfi_offset scause, 1288
.cfi_offset stval, 1292
.cfi_offset sip, 1296
.cfi_offset satp, 1536
+ # machine
.cfi_offset mvendorid, 15428
.cfi_offset marchid, 15432
.cfi_offset mimpid, 15436
.cfi_offset mhartid, 15440
+ .cfi_offset mconfigptr, 15444
.cfi_offset mstatus, 3072
.cfi_offset misa, 3076
.cfi_offset medeleg, 3080
@@ -102,15 +97,34 @@ _start:
.cfi_offset mie, 3088
.cfi_offset mtvec, 3092
.cfi_offset mcounteren, 3096
+ .cfi_offset mstatush, 3136
.cfi_offset mscratch, 3328
.cfi_offset mepc, 3332
.cfi_offset mcause, 3336
.cfi_offset mtval, 3340
.cfi_offset mip, 3344
+ .cfi_offset mtinst, 3368
+ .cfi_offset mtval2, 3372
+ .cfi_offset menvcfg, 3112
+ .cfi_offset menvcfgh, 3176
+ .cfi_offset mseccfg, 7452
+ .cfi_offset mseccfgh, 7516
.cfi_offset pmpcfg0, 3712
.cfi_offset pmpcfg1, 3716
.cfi_offset pmpcfg2, 3720
.cfi_offset pmpcfg3, 3724
+ .cfi_offset pmpcfg4, 3728
+ .cfi_offset pmpcfg5, 3732
+ .cfi_offset pmpcfg6, 3736
+ .cfi_offset pmpcfg7, 3740
+ .cfi_offset pmpcfg8, 3744
+ .cfi_offset pmpcfg9, 3748
+ .cfi_offset pmpcfg10, 3752
+ .cfi_offset pmpcfg11, 3756
+ .cfi_offset pmpcfg12, 3760
+ .cfi_offset pmpcfg13, 3764
+ .cfi_offset pmpcfg14, 3768
+ .cfi_offset pmpcfg15, 3772
.cfi_offset pmpaddr0, 3776
.cfi_offset pmpaddr1, 3780
.cfi_offset pmpaddr2, 3784
@@ -127,6 +141,54 @@ _start:
.cfi_offset pmpaddr13, 3828
.cfi_offset pmpaddr14, 3832
.cfi_offset pmpaddr15, 3836
+ .cfi_offset pmpaddr16, 3840
+ .cfi_offset pmpaddr17, 3844
+ .cfi_offset pmpaddr18, 3848
+ .cfi_offset pmpaddr19, 3852
+ .cfi_offset pmpaddr20, 3856
+ .cfi_offset pmpaddr21, 3860
+ .cfi_offset pmpaddr22, 3864
+ .cfi_offset pmpaddr23, 3868
+ .cfi_offset pmpaddr24, 3872
+ .cfi_offset pmpaddr25, 3876
+ .cfi_offset pmpaddr26, 3880
+ .cfi_offset pmpaddr27, 3884
+ .cfi_offset pmpaddr28, 3888
+ .cfi_offset pmpaddr29, 3892
+ .cfi_offset pmpaddr30, 3896
+ .cfi_offset pmpaddr31, 3900
+ .cfi_offset pmpaddr32, 3904
+ .cfi_offset pmpaddr33, 3908
+ .cfi_offset pmpaddr34, 3912
+ .cfi_offset pmpaddr35, 3916
+ .cfi_offset pmpaddr36, 3920
+ .cfi_offset pmpaddr37, 3924
+ .cfi_offset pmpaddr38, 3928
+ .cfi_offset pmpaddr39, 3932
+ .cfi_offset pmpaddr40, 3936
+ .cfi_offset pmpaddr41, 3940
+ .cfi_offset pmpaddr42, 3944
+ .cfi_offset pmpaddr43, 3948
+ .cfi_offset pmpaddr44, 3952
+ .cfi_offset pmpaddr45, 3956
+ .cfi_offset pmpaddr46, 3960
+ .cfi_offset pmpaddr47, 3964
+ .cfi_offset pmpaddr48, 3968
+ .cfi_offset pmpaddr49, 3972
+ .cfi_offset pmpaddr50, 3976
+ .cfi_offset pmpaddr51, 3980
+ .cfi_offset pmpaddr52, 3984
+ .cfi_offset pmpaddr53, 3988
+ .cfi_offset pmpaddr54, 3992
+ .cfi_offset pmpaddr55, 3996
+ .cfi_offset pmpaddr56, 4000
+ .cfi_offset pmpaddr57, 4004
+ .cfi_offset pmpaddr58, 4008
+ .cfi_offset pmpaddr59, 4012
+ .cfi_offset pmpaddr60, 4016
+ .cfi_offset pmpaddr61, 4020
+ .cfi_offset pmpaddr62, 4024
+ .cfi_offset pmpaddr63, 4028
.cfi_offset mcycle, 11264
.cfi_offset minstret, 11272
.cfi_offset mhpmcounter3, 11276
@@ -219,7 +281,38 @@ _start:
.cfi_offset mhpmevent29, 3316
.cfi_offset mhpmevent30, 3320
.cfi_offset mhpmevent31, 3324
+ # hypervisor
+ .cfi_offset hstatus, 6144
+ .cfi_offset hedeleg, 6152
+ .cfi_offset hideleg, 6156
+ .cfi_offset hie, 6160
+ .cfi_offset hcounteren, 6168
+ .cfi_offset hgeie, 6172
+ .cfi_offset htval, 6412
+ .cfi_offset hip, 6416
+ .cfi_offset hvip, 6420
+ .cfi_offset htinst, 6440
+ .cfi_offset hgeip, 14408
+ .cfi_offset henvcfg, 6184
+ .cfi_offset henvcfgh, 6248
+ .cfi_offset hgatp, 6656
+ .cfi_offset htimedelta, 6164
+ .cfi_offset htimedeltah, 6228
+ .cfi_offset vsstatus, 2048
+ .cfi_offset vsie, 2064
+ .cfi_offset vstvec, 2068
+ .cfi_offset vsscratch, 2304
+ .cfi_offset vsepc, 2308
+ .cfi_offset vscause, 2312
+ .cfi_offset vstval, 2316
+ .cfi_offset vsip, 2320
+ .cfi_offset vsatp, 2560
# dropped
+ .cfi_offset ubadaddr, 268 # aliases
+ .cfi_offset sbadaddr, 1292 # aliases
+ .cfi_offset sptbr, 1536 # aliases
+ .cfi_offset mbadaddr, 3340 # aliases
+ .cfi_offset mucounteren, 3200 # aliases
.cfi_offset mbase, 3584
.cfi_offset mbound, 3588
.cfi_offset mibase, 3592
@@ -228,6 +321,16 @@ _start:
.cfi_offset mdbound, 3604
.cfi_offset mscounteren, 3204
.cfi_offset mhcounteren, 3208
+ .cfi_offset ustatus, 0
+ .cfi_offset uie, 16
+ .cfi_offset utvec, 20
+ .cfi_offset uscratch, 256
+ .cfi_offset uepc, 260
+ .cfi_offset ucause, 264
+ .cfi_offset utval, 268
+ .cfi_offset uip, 272
+ .cfi_offset sedeleg, 1032
+ .cfi_offset sideleg, 1036
# unprivileged
.cfi_offset fflags, 4
.cfi_offset frm, 8
@@ -236,26 +339,32 @@ _start:
.cfi_offset dpc, 7876
.cfi_offset dscratch0, 7880
.cfi_offset dscratch1, 7884
+ .cfi_offset dscratch, 7880 # aliases
.cfi_offset tselect, 7808
.cfi_offset tdata1, 7812
.cfi_offset tdata2, 7816
.cfi_offset tdata3, 7820
.cfi_offset tinfo, 7824
.cfi_offset tcontrol, 7828
+ .cfi_offset hcontext, 6816
+ .cfi_offset scontext, 5792
.cfi_offset mcontext, 7840
- .cfi_offset scontext, 7848
- # aliases
- .cfi_offset ubadaddr, 268
- .cfi_offset sbadaddr, 1292
- .cfi_offset sptbr, 1536
- .cfi_offset mbadaddr, 3340
- .cfi_offset mucounteren, 3200
- .cfi_offset dscratch, 7880
- .cfi_offset mcontrol, 7812
- .cfi_offset icount, 7812
- .cfi_offset itrigger, 7812
- .cfi_offset etrigger, 7812
- .cfi_offset textra32, 7820
- .cfi_offset textra64, 7820
+ .cfi_offset mscontext, 7848
+ .cfi_offset mcontrol, 7812 # aliases
+ .cfi_offset mcontrol6, 7812 # aliases
+ .cfi_offset icount, 7812 # aliases
+ .cfi_offset itrigger, 7812 # aliases
+ .cfi_offset etrigger, 7812 # aliases
+ .cfi_offset tmexttrigger, 7812 # aliases
+ .cfi_offset textra32, 7820 # aliases
+ .cfi_offset textra64, 7820 # aliases
+ .cfi_offset seed, 84
+ .cfi_offset vstart, 32
+ .cfi_offset vxsat, 36
+ .cfi_offset vxrm, 40
+ .cfi_offset vcsr, 60
+ .cfi_offset vl, 12416
+ .cfi_offset vtype, 12420
+ .cfi_offset vlenb, 12424
nop
.cfi_endproc
diff --git a/gas/testsuite/gas/riscv/csr-version-1p10.d b/gas/testsuite/gas/riscv/csr-version-1p10.d
index 88da7240a78..6e0d1f6c66a 100644
--- a/gas/testsuite/gas/riscv/csr-version-1p10.d
+++ b/gas/testsuite/gas/riscv/csr-version-1p10.d
@@ -9,22 +9,6 @@
Disassembly of section .text:
0+000 <.text>:
-[ ]+[0-9a-f]+:[ ]+00002573[ ]+csrr[ ]+a0,ustatus
-[ ]+[0-9a-f]+:[ ]+00059073[ ]+csrw[ ]+ustatus,a1
-[ ]+[0-9a-f]+:[ ]+00402573[ ]+csrr[ ]+a0,uie
-[ ]+[0-9a-f]+:[ ]+00459073[ ]+csrw[ ]+uie,a1
-[ ]+[0-9a-f]+:[ ]+00502573[ ]+csrr[ ]+a0,utvec
-[ ]+[0-9a-f]+:[ ]+00559073[ ]+csrw[ ]+utvec,a1
-[ ]+[0-9a-f]+:[ ]+04002573[ ]+csrr[ ]+a0,uscratch
-[ ]+[0-9a-f]+:[ ]+04059073[ ]+csrw[ ]+uscratch,a1
-[ ]+[0-9a-f]+:[ ]+04102573[ ]+csrr[ ]+a0,uepc
-[ ]+[0-9a-f]+:[ ]+04159073[ ]+csrw[ ]+uepc,a1
-[ ]+[0-9a-f]+:[ ]+04202573[ ]+csrr[ ]+a0,ucause
-[ ]+[0-9a-f]+:[ ]+04259073[ ]+csrw[ ]+ucause,a1
-[ ]+[0-9a-f]+:[ ]+04302573[ ]+csrr[ ]+a0,utval
-[ ]+[0-9a-f]+:[ ]+04359073[ ]+csrw[ ]+utval,a1
-[ ]+[0-9a-f]+:[ ]+04402573[ ]+csrr[ ]+a0,uip
-[ ]+[0-9a-f]+:[ ]+04459073[ ]+csrw[ ]+uip,a1
[ ]+[0-9a-f]+:[ ]+c0002573[ ]+rdcycle[ ]+a0
[ ]+[0-9a-f]+:[ ]+c0059073[ ]+csrw[ ]+cycle,a1
[ ]+[0-9a-f]+:[ ]+c0102573[ ]+rdtime[ ]+a0
@@ -155,16 +139,14 @@ Disassembly of section .text:
[ ]+[0-9a-f]+:[ ]+c9f59073[ ]+csrw[ ]+hpmcounter31h,a1
[ ]+[0-9a-f]+:[ ]+10002573[ ]+csrr[ ]+a0,sstatus
[ ]+[0-9a-f]+:[ ]+10059073[ ]+csrw[ ]+sstatus,a1
-[ ]+[0-9a-f]+:[ ]+10202573[ ]+csrr[ ]+a0,sedeleg
-[ ]+[0-9a-f]+:[ ]+10259073[ ]+csrw[ ]+sedeleg,a1
-[ ]+[0-9a-f]+:[ ]+10302573[ ]+csrr[ ]+a0,sideleg
-[ ]+[0-9a-f]+:[ ]+10359073[ ]+csrw[ ]+sideleg,a1
[ ]+[0-9a-f]+:[ ]+10402573[ ]+csrr[ ]+a0,sie
[ ]+[0-9a-f]+:[ ]+10459073[ ]+csrw[ ]+sie,a1
[ ]+[0-9a-f]+:[ ]+10502573[ ]+csrr[ ]+a0,stvec
[ ]+[0-9a-f]+:[ ]+10559073[ ]+csrw[ ]+stvec,a1
[ ]+[0-9a-f]+:[ ]+10602573[ ]+csrr[ ]+a0,scounteren
[ ]+[0-9a-f]+:[ ]+10659073[ ]+csrw[ ]+scounteren,a1
+[ ]+[0-9a-f]+:[ ]+10a02573[ ]+csrr[ ]+a0,0x10a
+[ ]+[0-9a-f]+:[ ]+10a59073[ ]+csrw[ ]+0x10a,a1
[ ]+[0-9a-f]+:[ ]+14002573[ ]+csrr[ ]+a0,sscratch
[ ]+[0-9a-f]+:[ ]+14059073[ ]+csrw[ ]+sscratch,a1
[ ]+[0-9a-f]+:[ ]+14102573[ ]+csrr[ ]+a0,sepc
@@ -185,6 +167,8 @@ Disassembly of section .text:
[ ]+[0-9a-f]+:[ ]+f1359073[ ]+csrw[ ]+mimpid,a1
[ ]+[0-9a-f]+:[ ]+f1402573[ ]+csrr[ ]+a0,mhartid
[ ]+[0-9a-f]+:[ ]+f1459073[ ]+csrw[ ]+mhartid,a1
+[ ]+[0-9a-f]+:[ ]+f1502573[ ]+csrr[ ]+a0,0xf15
+[ ]+[0-9a-f]+:[ ]+f1559073[ ]+csrw[ ]+0xf15,a1
[ ]+[0-9a-f]+:[ ]+30002573[ ]+csrr[ ]+a0,mstatus
[ ]+[0-9a-f]+:[ ]+30059073[ ]+csrw[ ]+mstatus,a1
[ ]+[0-9a-f]+:[ ]+30102573[ ]+csrr[ ]+a0,misa
@@ -199,6 +183,8 @@ Disassembly of section .text:
[ ]+[0-9a-f]+:[ ]+30559073[ ]+csrw[ ]+mtvec,a1
[ ]+[0-9a-f]+:[ ]+30602573[ ]+csrr[ ]+a0,mcounteren
[ ]+[0-9a-f]+:[ ]+30659073[ ]+csrw[ ]+mcounteren,a1
+[ ]+[0-9a-f]+:[ ]+31002573[ ]+csrr[ ]+a0,0x310
+[ ]+[0-9a-f]+:[ ]+31059073[ ]+csrw[ ]+0x310,a1
[ ]+[0-9a-f]+:[ ]+34002573[ ]+csrr[ ]+a0,mscratch
[ ]+[0-9a-f]+:[ ]+34059073[ ]+csrw[ ]+mscratch,a1
[ ]+[0-9a-f]+:[ ]+34102573[ ]+csrr[ ]+a0,mepc
@@ -209,6 +195,18 @@ Disassembly of section .text:
[ ]+[0-9a-f]+:[ ]+34359073[ ]+csrw[ ]+mtval,a1
[ ]+[0-9a-f]+:[ ]+34402573[ ]+csrr[ ]+a0,mip
[ ]+[0-9a-f]+:[ ]+34459073[ ]+csrw[ ]+mip,a1
+[ ]+[0-9a-f]+:[ ]+34a02573[ ]+csrr[ ]+a0,0x34a
+[ ]+[0-9a-f]+:[ ]+34a59073[ ]+csrw[ ]+0x34a,a1
+[ ]+[0-9a-f]+:[ ]+34b02573[ ]+csrr[ ]+a0,0x34b
+[ ]+[0-9a-f]+:[ ]+34b59073[ ]+csrw[ ]+0x34b,a1
+[ ]+[0-9a-f]+:[ ]+30a02573[ ]+csrr[ ]+a0,0x30a
+[ ]+[0-9a-f]+:[ ]+30a59073[ ]+csrw[ ]+0x30a,a1
+[ ]+[0-9a-f]+:[ ]+31a02573[ ]+csrr[ ]+a0,0x31a
+[ ]+[0-9a-f]+:[ ]+31a59073[ ]+csrw[ ]+0x31a,a1
+[ ]+[0-9a-f]+:[ ]+74702573[ ]+csrr[ ]+a0,0x747
+[ ]+[0-9a-f]+:[ ]+74759073[ ]+csrw[ ]+0x747,a1
+[ ]+[0-9a-f]+:[ ]+75702573[ ]+csrr[ ]+a0,0x757
+[ ]+[0-9a-f]+:[ ]+75759073[ ]+csrw[ ]+0x757,a1
[ ]+[0-9a-f]+:[ ]+3a002573[ ]+csrr[ ]+a0,pmpcfg0
[ ]+[0-9a-f]+:[ ]+3a059073[ ]+csrw[ ]+pmpcfg0,a1
[ ]+[0-9a-f]+:[ ]+3a102573[ ]+csrr[ ]+a0,pmpcfg1
@@ -217,6 +215,30 @@ Disassembly of section .text:
[ ]+[0-9a-f]+:[ ]+3a259073[ ]+csrw[ ]+pmpcfg2,a1
[ ]+[0-9a-f]+:[ ]+3a302573[ ]+csrr[ ]+a0,pmpcfg3
[ ]+[0-9a-f]+:[ ]+3a359073[ ]+csrw[ ]+pmpcfg3,a1
+[ ]+[0-9a-f]+:[ ]+3a402573[ ]+csrr[ ]+a0,0x3a4
+[ ]+[0-9a-f]+:[ ]+3a459073[ ]+csrw[ ]+0x3a4,a1
+[ ]+[0-9a-f]+:[ ]+3a502573[ ]+csrr[ ]+a0,0x3a5
+[ ]+[0-9a-f]+:[ ]+3a559073[ ]+csrw[ ]+0x3a5,a1
+[ ]+[0-9a-f]+:[ ]+3a602573[ ]+csrr[ ]+a0,0x3a6
+[ ]+[0-9a-f]+:[ ]+3a659073[ ]+csrw[ ]+0x3a6,a1
+[ ]+[0-9a-f]+:[ ]+3a702573[ ]+csrr[ ]+a0,0x3a7
+[ ]+[0-9a-f]+:[ ]+3a759073[ ]+csrw[ ]+0x3a7,a1
+[ ]+[0-9a-f]+:[ ]+3a802573[ ]+csrr[ ]+a0,0x3a8
+[ ]+[0-9a-f]+:[ ]+3a859073[ ]+csrw[ ]+0x3a8,a1
+[ ]+[0-9a-f]+:[ ]+3a902573[ ]+csrr[ ]+a0,0x3a9
+[ ]+[0-9a-f]+:[ ]+3a959073[ ]+csrw[ ]+0x3a9,a1
+[ ]+[0-9a-f]+:[ ]+3aa02573[ ]+csrr[ ]+a0,0x3aa
+[ ]+[0-9a-f]+:[ ]+3aa59073[ ]+csrw[ ]+0x3aa,a1
+[ ]+[0-9a-f]+:[ ]+3ab02573[ ]+csrr[ ]+a0,0x3ab
+[ ]+[0-9a-f]+:[ ]+3ab59073[ ]+csrw[ ]+0x3ab,a1
+[ ]+[0-9a-f]+:[ ]+3ac02573[ ]+csrr[ ]+a0,0x3ac
+[ ]+[0-9a-f]+:[ ]+3ac59073[ ]+csrw[ ]+0x3ac,a1
+[ ]+[0-9a-f]+:[ ]+3ad02573[ ]+csrr[ ]+a0,0x3ad
+[ ]+[0-9a-f]+:[ ]+3ad59073[ ]+csrw[ ]+0x3ad,a1
+[ ]+[0-9a-f]+:[ ]+3ae02573[ ]+csrr[ ]+a0,0x3ae
+[ ]+[0-9a-f]+:[ ]+3ae59073[ ]+csrw[ ]+0x3ae,a1
+[ ]+[0-9a-f]+:[ ]+3af02573[ ]+csrr[ ]+a0,0x3af
+[ ]+[0-9a-f]+:[ ]+3af59073[ ]+csrw[ ]+0x3af,a1
[ ]+[0-9a-f]+:[ ]+3b002573[ ]+csrr[ ]+a0,pmpaddr0
[ ]+[0-9a-f]+:[ ]+3b059073[ ]+csrw[ ]+pmpaddr0,a1
[ ]+[0-9a-f]+:[ ]+3b102573[ ]+csrr[ ]+a0,pmpaddr1
@@ -249,6 +271,102 @@ Disassembly of section .text:
[ ]+[0-9a-f]+:[ ]+3be59073[ ]+csrw[ ]+pmpaddr14,a1
[ ]+[0-9a-f]+:[ ]+3bf02573[ ]+csrr[ ]+a0,pmpaddr15
[ ]+[0-9a-f]+:[ ]+3bf59073[ ]+csrw[ ]+pmpaddr15,a1
+[ ]+[0-9a-f]+:[ ]+3c002573[ ]+csrr[ ]+a0,0x3c0
+[ ]+[0-9a-f]+:[ ]+3c059073[ ]+csrw[ ]+0x3c0,a1
+[ ]+[0-9a-f]+:[ ]+3c102573[ ]+csrr[ ]+a0,0x3c1
+[ ]+[0-9a-f]+:[ ]+3c159073[ ]+csrw[ ]+0x3c1,a1
+[ ]+[0-9a-f]+:[ ]+3c202573[ ]+csrr[ ]+a0,0x3c2
+[ ]+[0-9a-f]+:[ ]+3c259073[ ]+csrw[ ]+0x3c2,a1
+[ ]+[0-9a-f]+:[ ]+3c302573[ ]+csrr[ ]+a0,0x3c3
+[ ]+[0-9a-f]+:[ ]+3c359073[ ]+csrw[ ]+0x3c3,a1
+[ ]+[0-9a-f]+:[ ]+3c402573[ ]+csrr[ ]+a0,0x3c4
+[ ]+[0-9a-f]+:[ ]+3c459073[ ]+csrw[ ]+0x3c4,a1
+[ ]+[0-9a-f]+:[ ]+3c502573[ ]+csrr[ ]+a0,0x3c5
+[ ]+[0-9a-f]+:[ ]+3c559073[ ]+csrw[ ]+0x3c5,a1
+[ ]+[0-9a-f]+:[ ]+3c602573[ ]+csrr[ ]+a0,0x3c6
+[ ]+[0-9a-f]+:[ ]+3c659073[ ]+csrw[ ]+0x3c6,a1
+[ ]+[0-9a-f]+:[ ]+3c702573[ ]+csrr[ ]+a0,0x3c7
+[ ]+[0-9a-f]+:[ ]+3c759073[ ]+csrw[ ]+0x3c7,a1
+[ ]+[0-9a-f]+:[ ]+3c802573[ ]+csrr[ ]+a0,0x3c8
+[ ]+[0-9a-f]+:[ ]+3c859073[ ]+csrw[ ]+0x3c8,a1
+[ ]+[0-9a-f]+:[ ]+3c902573[ ]+csrr[ ]+a0,0x3c9
+[ ]+[0-9a-f]+:[ ]+3c959073[ ]+csrw[ ]+0x3c9,a1
+[ ]+[0-9a-f]+:[ ]+3ca02573[ ]+csrr[ ]+a0,0x3ca
+[ ]+[0-9a-f]+:[ ]+3ca59073[ ]+csrw[ ]+0x3ca,a1
+[ ]+[0-9a-f]+:[ ]+3cb02573[ ]+csrr[ ]+a0,0x3cb
+[ ]+[0-9a-f]+:[ ]+3cb59073[ ]+csrw[ ]+0x3cb,a1
+[ ]+[0-9a-f]+:[ ]+3cc02573[ ]+csrr[ ]+a0,0x3cc
+[ ]+[0-9a-f]+:[ ]+3cc59073[ ]+csrw[ ]+0x3cc,a1
+[ ]+[0-9a-f]+:[ ]+3cd02573[ ]+csrr[ ]+a0,0x3cd
+[ ]+[0-9a-f]+:[ ]+3cd59073[ ]+csrw[ ]+0x3cd,a1
+[ ]+[0-9a-f]+:[ ]+3ce02573[ ]+csrr[ ]+a0,0x3ce
+[ ]+[0-9a-f]+:[ ]+3ce59073[ ]+csrw[ ]+0x3ce,a1
+[ ]+[0-9a-f]+:[ ]+3cf02573[ ]+csrr[ ]+a0,0x3cf
+[ ]+[0-9a-f]+:[ ]+3cf59073[ ]+csrw[ ]+0x3cf,a1
+[ ]+[0-9a-f]+:[ ]+3d002573[ ]+csrr[ ]+a0,0x3d0
+[ ]+[0-9a-f]+:[ ]+3d059073[ ]+csrw[ ]+0x3d0,a1
+[ ]+[0-9a-f]+:[ ]+3d102573[ ]+csrr[ ]+a0,0x3d1
+[ ]+[0-9a-f]+:[ ]+3d159073[ ]+csrw[ ]+0x3d1,a1
+[ ]+[0-9a-f]+:[ ]+3d202573[ ]+csrr[ ]+a0,0x3d2
+[ ]+[0-9a-f]+:[ ]+3d259073[ ]+csrw[ ]+0x3d2,a1
+[ ]+[0-9a-f]+:[ ]+3d302573[ ]+csrr[ ]+a0,0x3d3
+[ ]+[0-9a-f]+:[ ]+3d359073[ ]+csrw[ ]+0x3d3,a1
+[ ]+[0-9a-f]+:[ ]+3d402573[ ]+csrr[ ]+a0,0x3d4
+[ ]+[0-9a-f]+:[ ]+3d459073[ ]+csrw[ ]+0x3d4,a1
+[ ]+[0-9a-f]+:[ ]+3d502573[ ]+csrr[ ]+a0,0x3d5
+[ ]+[0-9a-f]+:[ ]+3d559073[ ]+csrw[ ]+0x3d5,a1
+[ ]+[0-9a-f]+:[ ]+3d602573[ ]+csrr[ ]+a0,0x3d6
+[ ]+[0-9a-f]+:[ ]+3d659073[ ]+csrw[ ]+0x3d6,a1
+[ ]+[0-9a-f]+:[ ]+3d702573[ ]+csrr[ ]+a0,0x3d7
+[ ]+[0-9a-f]+:[ ]+3d759073[ ]+csrw[ ]+0x3d7,a1
+[ ]+[0-9a-f]+:[ ]+3d802573[ ]+csrr[ ]+a0,0x3d8
+[ ]+[0-9a-f]+:[ ]+3d859073[ ]+csrw[ ]+0x3d8,a1
+[ ]+[0-9a-f]+:[ ]+3d902573[ ]+csrr[ ]+a0,0x3d9
+[ ]+[0-9a-f]+:[ ]+3d959073[ ]+csrw[ ]+0x3d9,a1
+[ ]+[0-9a-f]+:[ ]+3da02573[ ]+csrr[ ]+a0,0x3da
+[ ]+[0-9a-f]+:[ ]+3da59073[ ]+csrw[ ]+0x3da,a1
+[ ]+[0-9a-f]+:[ ]+3db02573[ ]+csrr[ ]+a0,0x3db
+[ ]+[0-9a-f]+:[ ]+3db59073[ ]+csrw[ ]+0x3db,a1
+[ ]+[0-9a-f]+:[ ]+3dc02573[ ]+csrr[ ]+a0,0x3dc
+[ ]+[0-9a-f]+:[ ]+3dc59073[ ]+csrw[ ]+0x3dc,a1
+[ ]+[0-9a-f]+:[ ]+3dd02573[ ]+csrr[ ]+a0,0x3dd
+[ ]+[0-9a-f]+:[ ]+3dd59073[ ]+csrw[ ]+0x3dd,a1
+[ ]+[0-9a-f]+:[ ]+3de02573[ ]+csrr[ ]+a0,0x3de
+[ ]+[0-9a-f]+:[ ]+3de59073[ ]+csrw[ ]+0x3de,a1
+[ ]+[0-9a-f]+:[ ]+3df02573[ ]+csrr[ ]+a0,0x3df
+[ ]+[0-9a-f]+:[ ]+3df59073[ ]+csrw[ ]+0x3df,a1
+[ ]+[0-9a-f]+:[ ]+3e002573[ ]+csrr[ ]+a0,0x3e0
+[ ]+[0-9a-f]+:[ ]+3e059073[ ]+csrw[ ]+0x3e0,a1
+[ ]+[0-9a-f]+:[ ]+3e102573[ ]+csrr[ ]+a0,0x3e1
+[ ]+[0-9a-f]+:[ ]+3e159073[ ]+csrw[ ]+0x3e1,a1
+[ ]+[0-9a-f]+:[ ]+3e202573[ ]+csrr[ ]+a0,0x3e2
+[ ]+[0-9a-f]+:[ ]+3e259073[ ]+csrw[ ]+0x3e2,a1
+[ ]+[0-9a-f]+:[ ]+3e302573[ ]+csrr[ ]+a0,0x3e3
+[ ]+[0-9a-f]+:[ ]+3e359073[ ]+csrw[ ]+0x3e3,a1
+[ ]+[0-9a-f]+:[ ]+3e402573[ ]+csrr[ ]+a0,0x3e4
+[ ]+[0-9a-f]+:[ ]+3e459073[ ]+csrw[ ]+0x3e4,a1
+[ ]+[0-9a-f]+:[ ]+3e502573[ ]+csrr[ ]+a0,0x3e5
+[ ]+[0-9a-f]+:[ ]+3e559073[ ]+csrw[ ]+0x3e5,a1
+[ ]+[0-9a-f]+:[ ]+3e602573[ ]+csrr[ ]+a0,0x3e6
+[ ]+[0-9a-f]+:[ ]+3e659073[ ]+csrw[ ]+0x3e6,a1
+[ ]+[0-9a-f]+:[ ]+3e702573[ ]+csrr[ ]+a0,0x3e7
+[ ]+[0-9a-f]+:[ ]+3e759073[ ]+csrw[ ]+0x3e7,a1
+[ ]+[0-9a-f]+:[ ]+3e802573[ ]+csrr[ ]+a0,0x3e8
+[ ]+[0-9a-f]+:[ ]+3e859073[ ]+csrw[ ]+0x3e8,a1
+[ ]+[0-9a-f]+:[ ]+3e902573[ ]+csrr[ ]+a0,0x3e9
+[ ]+[0-9a-f]+:[ ]+3e959073[ ]+csrw[ ]+0x3e9,a1
+[ ]+[0-9a-f]+:[ ]+3ea02573[ ]+csrr[ ]+a0,0x3ea
+[ ]+[0-9a-f]+:[ ]+3ea59073[ ]+csrw[ ]+0x3ea,a1
+[ ]+[0-9a-f]+:[ ]+3eb02573[ ]+csrr[ ]+a0,0x3eb
+[ ]+[0-9a-f]+:[ ]+3eb59073[ ]+csrw[ ]+0x3eb,a1
+[ ]+[0-9a-f]+:[ ]+3ec02573[ ]+csrr[ ]+a0,0x3ec
+[ ]+[0-9a-f]+:[ ]+3ec59073[ ]+csrw[ ]+0x3ec,a1
+[ ]+[0-9a-f]+:[ ]+3ed02573[ ]+csrr[ ]+a0,0x3ed
+[ ]+[0-9a-f]+:[ ]+3ed59073[ ]+csrw[ ]+0x3ed,a1
+[ ]+[0-9a-f]+:[ ]+3ee02573[ ]+csrr[ ]+a0,0x3ee
+[ ]+[0-9a-f]+:[ ]+3ee59073[ ]+csrw[ ]+0x3ee,a1
+[ ]+[0-9a-f]+:[ ]+3ef02573[ ]+csrr[ ]+a0,0x3ef
+[ ]+[0-9a-f]+:[ ]+3ef59073[ ]+csrw[ ]+0x3ef,a1
[ ]+[0-9a-f]+:[ ]+b0002573[ ]+csrr[ ]+a0,mcycle
[ ]+[0-9a-f]+:[ ]+b0059073[ ]+csrw[ ]+mcycle,a1
[ ]+[0-9a-f]+:[ ]+b0202573[ ]+csrr[ ]+a0,minstret
@@ -461,8 +579,6 @@ Disassembly of section .text:
[ ]+[0-9a-f]+:[ ]+61a59073[ ]+csrw[ ]+0x61a,a1
[ ]+[0-9a-f]+:[ ]+68002573[ ]+csrr[ ]+a0,0x680
[ ]+[0-9a-f]+:[ ]+68059073[ ]+csrw[ ]+0x680,a1
-[ ]+[0-9a-f]+:[ ]+6a802573[ ]+csrr[ ]+a0,0x6a8
-[ ]+[0-9a-f]+:[ ]+6a859073[ ]+csrw[ ]+0x6a8,a1
[ ]+[0-9a-f]+:[ ]+60502573[ ]+csrr[ ]+a0,0x605
[ ]+[0-9a-f]+:[ ]+60559073[ ]+csrw[ ]+0x605,a1
[ ]+[0-9a-f]+:[ ]+61502573[ ]+csrr[ ]+a0,0x615
@@ -511,6 +627,26 @@ Disassembly of section .text:
[ ]+[0-9a-f]+:[ ]+32159073[ ]+csrw[ ]+0x321,a1
[ ]+[0-9a-f]+:[ ]+32202573[ ]+csrr[ ]+a0,0x322
[ ]+[0-9a-f]+:[ ]+32259073[ ]+csrw[ ]+0x322,a1
+[ ]+[0-9a-f]+:[ ]+00002573[ ]+csrr[ ]+a0,ustatus
+[ ]+[0-9a-f]+:[ ]+00059073[ ]+csrw[ ]+ustatus,a1
+[ ]+[0-9a-f]+:[ ]+00402573[ ]+csrr[ ]+a0,uie
+[ ]+[0-9a-f]+:[ ]+00459073[ ]+csrw[ ]+uie,a1
+[ ]+[0-9a-f]+:[ ]+00502573[ ]+csrr[ ]+a0,utvec
+[ ]+[0-9a-f]+:[ ]+00559073[ ]+csrw[ ]+utvec,a1
+[ ]+[0-9a-f]+:[ ]+04002573[ ]+csrr[ ]+a0,uscratch
+[ ]+[0-9a-f]+:[ ]+04059073[ ]+csrw[ ]+uscratch,a1
+[ ]+[0-9a-f]+:[ ]+04102573[ ]+csrr[ ]+a0,uepc
+[ ]+[0-9a-f]+:[ ]+04159073[ ]+csrw[ ]+uepc,a1
+[ ]+[0-9a-f]+:[ ]+04202573[ ]+csrr[ ]+a0,ucause
+[ ]+[0-9a-f]+:[ ]+04259073[ ]+csrw[ ]+ucause,a1
+[ ]+[0-9a-f]+:[ ]+04302573[ ]+csrr[ ]+a0,utval
+[ ]+[0-9a-f]+:[ ]+04359073[ ]+csrw[ ]+utval,a1
+[ ]+[0-9a-f]+:[ ]+04402573[ ]+csrr[ ]+a0,uip
+[ ]+[0-9a-f]+:[ ]+04459073[ ]+csrw[ ]+uip,a1
+[ ]+[0-9a-f]+:[ ]+10202573[ ]+csrr[ ]+a0,sedeleg
+[ ]+[0-9a-f]+:[ ]+10259073[ ]+csrw[ ]+sedeleg,a1
+[ ]+[0-9a-f]+:[ ]+10302573[ ]+csrr[ ]+a0,sideleg
+[ ]+[0-9a-f]+:[ ]+10359073[ ]+csrw[ ]+sideleg,a1
[ ]+[0-9a-f]+:[ ]+00102573[ ]+csrr[ ]+a0,fflags
[ ]+[0-9a-f]+:[ ]+00159073[ ]+csrw[ ]+fflags,a1
[ ]+[0-9a-f]+:[ ]+00202573[ ]+csrr[ ]+a0,frm
@@ -539,10 +675,18 @@ Disassembly of section .text:
[ ]+[0-9a-f]+:[ ]+7a459073[ ]+csrw[ ]+tinfo,a1
[ ]+[0-9a-f]+:[ ]+7a502573[ ]+csrr[ ]+a0,tcontrol
[ ]+[0-9a-f]+:[ ]+7a559073[ ]+csrw[ ]+tcontrol,a1
+[ ]+[0-9a-f]+:[ ]+6a802573[ ]+csrr[ ]+a0,hcontext
+[ ]+[0-9a-f]+:[ ]+6a859073[ ]+csrw[ ]+hcontext,a1
+[ ]+[0-9a-f]+:[ ]+5a802573[ ]+csrr[ ]+a0,scontext
+[ ]+[0-9a-f]+:[ ]+5a859073[ ]+csrw[ ]+scontext,a1
[ ]+[0-9a-f]+:[ ]+7a802573[ ]+csrr[ ]+a0,mcontext
[ ]+[0-9a-f]+:[ ]+7a859073[ ]+csrw[ ]+mcontext,a1
-[ ]+[0-9a-f]+:[ ]+7aa02573[ ]+csrr[ ]+a0,scontext
-[ ]+[0-9a-f]+:[ ]+7aa59073[ ]+csrw[ ]+scontext,a1
+[ ]+[0-9a-f]+:[ ]+7aa02573[ ]+csrr[ ]+a0,mscontext
+[ ]+[0-9a-f]+:[ ]+7aa59073[ ]+csrw[ ]+mscontext,a1
+[ ]+[0-9a-f]+:[ ]+7a102573[ ]+csrr[ ]+a0,tdata1
+[ ]+[0-9a-f]+:[ ]+7a159073[ ]+csrw[ ]+tdata1,a1
+[ ]+[0-9a-f]+:[ ]+7a102573[ ]+csrr[ ]+a0,tdata1
+[ ]+[0-9a-f]+:[ ]+7a159073[ ]+csrw[ ]+tdata1,a1
[ ]+[0-9a-f]+:[ ]+7a102573[ ]+csrr[ ]+a0,tdata1
[ ]+[0-9a-f]+:[ ]+7a159073[ ]+csrw[ ]+tdata1,a1
[ ]+[0-9a-f]+:[ ]+7a102573[ ]+csrr[ ]+a0,tdata1
diff --git a/gas/testsuite/gas/riscv/csr-version-1p10.l b/gas/testsuite/gas/riscv/csr-version-1p10.l
index ed6773e637c..2511feeafc8 100644
--- a/gas/testsuite/gas/riscv/csr-version-1p10.l
+++ b/gas/testsuite/gas/riscv/csr-version-1p10.l
@@ -31,172 +31,329 @@
.*Warning: read-only CSR is written `csrw hpmcounter29,a1'
.*Warning: read-only CSR is written `csrw hpmcounter30,a1'
.*Warning: read-only CSR is written `csrw hpmcounter31,a1'
-.*Warning: invalid CSR `cycleh' for the current ISA
-.*Warning: invalid CSR `cycleh' for the current ISA
+.*Warning: invalid CSR `cycleh', needs rv32i extension
+.*Warning: invalid CSR `cycleh', needs rv32i extension
.*Warning: read-only CSR is written `csrw cycleh,a1'
-.*Warning: invalid CSR `timeh' for the current ISA
-.*Warning: invalid CSR `timeh' for the current ISA
+.*Warning: invalid CSR `timeh', needs rv32i extension
+.*Warning: invalid CSR `timeh', needs rv32i extension
.*Warning: read-only CSR is written `csrw timeh,a1'
-.*Warning: invalid CSR `instreth' for the current ISA
-.*Warning: invalid CSR `instreth' for the current ISA
+.*Warning: invalid CSR `instreth', needs rv32i extension
+.*Warning: invalid CSR `instreth', needs rv32i extension
.*Warning: read-only CSR is written `csrw instreth,a1'
-.*Warning: invalid CSR `hpmcounter3h' for the current ISA
-.*Warning: invalid CSR `hpmcounter3h' for the current ISA
+.*Warning: invalid CSR `hpmcounter3h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter3h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter3h,a1'
-.*Warning: invalid CSR `hpmcounter4h' for the current ISA
-.*Warning: invalid CSR `hpmcounter4h' for the current ISA
+.*Warning: invalid CSR `hpmcounter4h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter4h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter4h,a1'
-.*Warning: invalid CSR `hpmcounter5h' for the current ISA
-.*Warning: invalid CSR `hpmcounter5h' for the current ISA
+.*Warning: invalid CSR `hpmcounter5h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter5h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter5h,a1'
-.*Warning: invalid CSR `hpmcounter6h' for the current ISA
-.*Warning: invalid CSR `hpmcounter6h' for the current ISA
+.*Warning: invalid CSR `hpmcounter6h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter6h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter6h,a1'
-.*Warning: invalid CSR `hpmcounter7h' for the current ISA
-.*Warning: invalid CSR `hpmcounter7h' for the current ISA
+.*Warning: invalid CSR `hpmcounter7h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter7h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter7h,a1'
-.*Warning: invalid CSR `hpmcounter8h' for the current ISA
-.*Warning: invalid CSR `hpmcounter8h' for the current ISA
+.*Warning: invalid CSR `hpmcounter8h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter8h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter8h,a1'
-.*Warning: invalid CSR `hpmcounter9h' for the current ISA
-.*Warning: invalid CSR `hpmcounter9h' for the current ISA
+.*Warning: invalid CSR `hpmcounter9h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter9h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter9h,a1'
-.*Warning: invalid CSR `hpmcounter10h' for the current ISA
-.*Warning: invalid CSR `hpmcounter10h' for the current ISA
+.*Warning: invalid CSR `hpmcounter10h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter10h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter10h,a1'
-.*Warning: invalid CSR `hpmcounter11h' for the current ISA
-.*Warning: invalid CSR `hpmcounter11h' for the current ISA
+.*Warning: invalid CSR `hpmcounter11h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter11h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter11h,a1'
-.*Warning: invalid CSR `hpmcounter12h' for the current ISA
-.*Warning: invalid CSR `hpmcounter12h' for the current ISA
+.*Warning: invalid CSR `hpmcounter12h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter12h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter12h,a1'
-.*Warning: invalid CSR `hpmcounter13h' for the current ISA
-.*Warning: invalid CSR `hpmcounter13h' for the current ISA
+.*Warning: invalid CSR `hpmcounter13h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter13h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter13h,a1'
-.*Warning: invalid CSR `hpmcounter14h' for the current ISA
-.*Warning: invalid CSR `hpmcounter14h' for the current ISA
+.*Warning: invalid CSR `hpmcounter14h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter14h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter14h,a1'
-.*Warning: invalid CSR `hpmcounter15h' for the current ISA
-.*Warning: invalid CSR `hpmcounter15h' for the current ISA
+.*Warning: invalid CSR `hpmcounter15h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter15h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter15h,a1'
-.*Warning: invalid CSR `hpmcounter16h' for the current ISA
-.*Warning: invalid CSR `hpmcounter16h' for the current ISA
+.*Warning: invalid CSR `hpmcounter16h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter16h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter16h,a1'
-.*Warning: invalid CSR `hpmcounter17h' for the current ISA
-.*Warning: invalid CSR `hpmcounter17h' for the current ISA
+.*Warning: invalid CSR `hpmcounter17h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter17h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter17h,a1'
-.*Warning: invalid CSR `hpmcounter18h' for the current ISA
-.*Warning: invalid CSR `hpmcounter18h' for the current ISA
+.*Warning: invalid CSR `hpmcounter18h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter18h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter18h,a1'
-.*Warning: invalid CSR `hpmcounter19h' for the current ISA
-.*Warning: invalid CSR `hpmcounter19h' for the current ISA
+.*Warning: invalid CSR `hpmcounter19h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter19h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter19h,a1'
-.*Warning: invalid CSR `hpmcounter20h' for the current ISA
-.*Warning: invalid CSR `hpmcounter20h' for the current ISA
+.*Warning: invalid CSR `hpmcounter20h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter20h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter20h,a1'
-.*Warning: invalid CSR `hpmcounter21h' for the current ISA
-.*Warning: invalid CSR `hpmcounter21h' for the current ISA
+.*Warning: invalid CSR `hpmcounter21h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter21h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter21h,a1'
-.*Warning: invalid CSR `hpmcounter22h' for the current ISA
-.*Warning: invalid CSR `hpmcounter22h' for the current ISA
+.*Warning: invalid CSR `hpmcounter22h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter22h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter22h,a1'
-.*Warning: invalid CSR `hpmcounter23h' for the current ISA
-.*Warning: invalid CSR `hpmcounter23h' for the current ISA
+.*Warning: invalid CSR `hpmcounter23h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter23h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter23h,a1'
-.*Warning: invalid CSR `hpmcounter24h' for the current ISA
-.*Warning: invalid CSR `hpmcounter24h' for the current ISA
+.*Warning: invalid CSR `hpmcounter24h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter24h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter24h,a1'
-.*Warning: invalid CSR `hpmcounter25h' for the current ISA
-.*Warning: invalid CSR `hpmcounter25h' for the current ISA
+.*Warning: invalid CSR `hpmcounter25h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter25h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter25h,a1'
-.*Warning: invalid CSR `hpmcounter26h' for the current ISA
-.*Warning: invalid CSR `hpmcounter26h' for the current ISA
+.*Warning: invalid CSR `hpmcounter26h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter26h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter26h,a1'
-.*Warning: invalid CSR `hpmcounter27h' for the current ISA
-.*Warning: invalid CSR `hpmcounter27h' for the current ISA
+.*Warning: invalid CSR `hpmcounter27h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter27h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter27h,a1'
-.*Warning: invalid CSR `hpmcounter28h' for the current ISA
-.*Warning: invalid CSR `hpmcounter28h' for the current ISA
+.*Warning: invalid CSR `hpmcounter28h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter28h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter28h,a1'
-.*Warning: invalid CSR `hpmcounter29h' for the current ISA
-.*Warning: invalid CSR `hpmcounter29h' for the current ISA
+.*Warning: invalid CSR `hpmcounter29h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter29h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter29h,a1'
-.*Warning: invalid CSR `hpmcounter30h' for the current ISA
-.*Warning: invalid CSR `hpmcounter30h' for the current ISA
+.*Warning: invalid CSR `hpmcounter30h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter30h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter30h,a1'
-.*Warning: invalid CSR `hpmcounter31h' for the current ISA
-.*Warning: invalid CSR `hpmcounter31h' for the current ISA
+.*Warning: invalid CSR `hpmcounter31h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter31h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter31h,a1'
+.*Warning: invalid CSR `senvcfg' for the privileged spec `1.10'
+.*Warning: invalid CSR `senvcfg' for the privileged spec `1.10'
.*Warning: read-only CSR is written `csrw mvendorid,a1'
.*Warning: read-only CSR is written `csrw marchid,a1'
.*Warning: read-only CSR is written `csrw mimpid,a1'
.*Warning: read-only CSR is written `csrw mhartid,a1'
-.*Warning: invalid CSR `pmpcfg1' for the current ISA
-.*Warning: invalid CSR `pmpcfg1' for the current ISA
-.*Warning: invalid CSR `pmpcfg3' for the current ISA
-.*Warning: invalid CSR `pmpcfg3' for the current ISA
-.*Warning: invalid CSR `mcycleh' for the current ISA
-.*Warning: invalid CSR `mcycleh' for the current ISA
-.*Warning: invalid CSR `minstreth' for the current ISA
-.*Warning: invalid CSR `minstreth' for the current ISA
-.*Warning: invalid CSR `mhpmcounter3h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter3h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter4h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter4h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter5h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter5h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter6h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter6h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter7h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter7h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter8h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter8h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter9h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter9h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter10h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter10h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter11h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter11h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter12h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter12h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter13h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter13h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter14h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter14h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter15h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter15h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter16h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter16h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter17h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter17h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter18h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter18h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter19h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter19h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter20h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter20h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter21h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter21h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter22h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter22h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter23h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter23h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter24h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter24h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter25h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter25h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter26h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter26h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter27h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter27h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter28h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter28h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter29h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter29h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter30h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter30h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter31h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter31h' for the current ISA
+.*Warning: invalid CSR `mconfigptr' for the privileged spec `1.10'
+.*Warning: invalid CSR `mconfigptr' for the privileged spec `1.10'
+.*Warning: read-only CSR is written `csrw mconfigptr,a1'
+.*Warning: invalid CSR `mstatush', needs rv32i extension
+.*Warning: invalid CSR `mstatush' for the privileged spec `1.10'
+.*Warning: invalid CSR `mstatush', needs rv32i extension
+.*Warning: invalid CSR `mstatush' for the privileged spec `1.10'
+.*Warning: invalid CSR `mtinst' for the privileged spec `1.10'
+.*Warning: invalid CSR `mtinst' for the privileged spec `1.10'
+.*Warning: invalid CSR `mtval2' for the privileged spec `1.10'
+.*Warning: invalid CSR `mtval2' for the privileged spec `1.10'
+.*Warning: invalid CSR `menvcfg' for the privileged spec `1.10'
+.*Warning: invalid CSR `menvcfg' for the privileged spec `1.10'
+.*Warning: invalid CSR `menvcfgh', needs rv32i extension
+.*Warning: invalid CSR `menvcfgh' for the privileged spec `1.10'
+.*Warning: invalid CSR `menvcfgh', needs rv32i extension
+.*Warning: invalid CSR `menvcfgh' for the privileged spec `1.10'
+.*Warning: invalid CSR `mseccfg' for the privileged spec `1.10'
+.*Warning: invalid CSR `mseccfg' for the privileged spec `1.10'
+.*Warning: invalid CSR `mseccfgh', needs rv32i extension
+.*Warning: invalid CSR `mseccfgh' for the privileged spec `1.10'
+.*Warning: invalid CSR `mseccfgh', needs rv32i extension
+.*Warning: invalid CSR `mseccfgh' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpcfg1', needs rv32i extension
+.*Warning: invalid CSR `pmpcfg1', needs rv32i extension
+.*Warning: invalid CSR `pmpcfg3', needs rv32i extension
+.*Warning: invalid CSR `pmpcfg3', needs rv32i extension
+.*Warning: invalid CSR `pmpcfg4' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpcfg4' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpcfg5', needs rv32i extension
+.*Warning: invalid CSR `pmpcfg5' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpcfg5', needs rv32i extension
+.*Warning: invalid CSR `pmpcfg5' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpcfg6' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpcfg6' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpcfg7', needs rv32i extension
+.*Warning: invalid CSR `pmpcfg7' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpcfg7', needs rv32i extension
+.*Warning: invalid CSR `pmpcfg7' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpcfg8' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpcfg8' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpcfg9', needs rv32i extension
+.*Warning: invalid CSR `pmpcfg9' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpcfg9', needs rv32i extension
+.*Warning: invalid CSR `pmpcfg9' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpcfg10' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpcfg10' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpcfg11', needs rv32i extension
+.*Warning: invalid CSR `pmpcfg11' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpcfg11', needs rv32i extension
+.*Warning: invalid CSR `pmpcfg11' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpcfg12' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpcfg12' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpcfg13', needs rv32i extension
+.*Warning: invalid CSR `pmpcfg13' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpcfg13', needs rv32i extension
+.*Warning: invalid CSR `pmpcfg13' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpcfg14' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpcfg14' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpcfg15', needs rv32i extension
+.*Warning: invalid CSR `pmpcfg15' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpcfg15', needs rv32i extension
+.*Warning: invalid CSR `pmpcfg15' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr16' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr16' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr17' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr17' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr18' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr18' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr19' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr19' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr20' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr20' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr21' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr21' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr22' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr22' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr23' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr23' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr24' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr24' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr25' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr25' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr26' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr26' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr27' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr27' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr28' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr28' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr29' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr29' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr30' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr30' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr31' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr31' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr32' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr32' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr33' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr33' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr34' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr34' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr35' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr35' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr36' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr36' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr37' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr37' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr38' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr38' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr39' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr39' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr40' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr40' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr41' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr41' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr42' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr42' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr43' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr43' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr44' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr44' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr45' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr45' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr46' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr46' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr47' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr47' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr48' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr48' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr49' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr49' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr50' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr50' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr51' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr51' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr52' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr52' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr53' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr53' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr54' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr54' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr55' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr55' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr56' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr56' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr57' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr57' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr58' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr58' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr59' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr59' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr60' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr60' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr61' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr61' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr62' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr62' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr63' for the privileged spec `1.10'
+.*Warning: invalid CSR `pmpaddr63' for the privileged spec `1.10'
+.*Warning: invalid CSR `mcycleh', needs rv32i extension
+.*Warning: invalid CSR `mcycleh', needs rv32i extension
+.*Warning: invalid CSR `minstreth', needs rv32i extension
+.*Warning: invalid CSR `minstreth', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter3h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter3h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter4h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter4h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter5h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter5h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter6h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter6h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter7h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter7h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter8h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter8h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter9h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter9h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter10h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter10h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter11h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter11h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter12h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter12h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter13h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter13h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter14h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter14h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter15h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter15h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter16h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter16h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter17h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter17h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter18h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter18h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter19h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter19h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter20h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter20h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter21h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter21h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter22h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter22h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter23h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter23h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter24h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter24h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter25h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter25h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter26h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter26h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter27h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter27h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter28h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter28h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter29h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter29h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter30h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter30h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter31h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter31h', needs rv32i extension
.*Warning: invalid CSR `mcountinhibit' for the privileged spec `1.10'
.*Warning: invalid CSR `mcountinhibit' for the privileged spec `1.10'
.*Warning: invalid CSR `hstatus' for the privileged spec `1.10'
@@ -224,19 +381,17 @@
.*Warning: read-only CSR is written `csrw hgeip,a1'
.*Warning: invalid CSR `henvcfg' for the privileged spec `1.10'
.*Warning: invalid CSR `henvcfg' for the privileged spec `1.10'
-.*Warning: invalid CSR `henvcfgh' for the current ISA
+.*Warning: invalid CSR `henvcfgh', needs rv32i extension
.*Warning: invalid CSR `henvcfgh' for the privileged spec `1.10'
-.*Warning: invalid CSR `henvcfgh' for the current ISA
+.*Warning: invalid CSR `henvcfgh', needs rv32i extension
.*Warning: invalid CSR `henvcfgh' for the privileged spec `1.10'
.*Warning: invalid CSR `hgatp' for the privileged spec `1.10'
.*Warning: invalid CSR `hgatp' for the privileged spec `1.10'
-.*Warning: invalid CSR `hcontext' for the privileged spec `1.10'
-.*Warning: invalid CSR `hcontext' for the privileged spec `1.10'
.*Warning: invalid CSR `htimedelta' for the privileged spec `1.10'
.*Warning: invalid CSR `htimedelta' for the privileged spec `1.10'
-.*Warning: invalid CSR `htimedeltah' for the current ISA
+.*Warning: invalid CSR `htimedeltah', needs rv32i extension
.*Warning: invalid CSR `htimedeltah' for the privileged spec `1.10'
-.*Warning: invalid CSR `htimedeltah' for the current ISA
+.*Warning: invalid CSR `htimedeltah', needs rv32i extension
.*Warning: invalid CSR `htimedeltah' for the privileged spec `1.10'
.*Warning: invalid CSR `vsstatus' for the privileged spec `1.10'
.*Warning: invalid CSR `vsstatus' for the privileged spec `1.10'
@@ -282,28 +437,28 @@
.*Warning: invalid CSR `mscounteren' for the privileged spec `1.10'
.*Warning: invalid CSR `mhcounteren' for the privileged spec `1.10'
.*Warning: invalid CSR `mhcounteren' for the privileged spec `1.10'
-.*Warning: invalid CSR `fflags' for the current ISA
-.*Warning: invalid CSR `fflags' for the current ISA
-.*Warning: invalid CSR `frm' for the current ISA
-.*Warning: invalid CSR `frm' for the current ISA
-.*Warning: invalid CSR `fcsr' for the current ISA
-.*Warning: invalid CSR `fcsr' for the current ISA
-.*Warning: invalid CSR `seed' for the current ISA
-.*Warning: invalid CSR `seed' for the current ISA
-.*Warning: invalid CSR `vstart' for the current ISA
-.*Warning: invalid CSR `vstart' for the current ISA
-.*Warning: invalid CSR `vxsat' for the current ISA
-.*Warning: invalid CSR `vxsat' for the current ISA
-.*Warning: invalid CSR `vxrm' for the current ISA
-.*Warning: invalid CSR `vxrm' for the current ISA
-.*Warning: invalid CSR `vcsr' for the current ISA
-.*Warning: invalid CSR `vcsr' for the current ISA
-.*Warning: invalid CSR `vl' for the current ISA
-.*Warning: invalid CSR `vl' for the current ISA
+.*Warning: invalid CSR `fflags', needs `f' extension
+.*Warning: invalid CSR `fflags', needs `f' extension
+.*Warning: invalid CSR `frm', needs `f' extension
+.*Warning: invalid CSR `frm', needs `f' extension
+.*Warning: invalid CSR `fcsr', needs `f' extension
+.*Warning: invalid CSR `fcsr', needs `f' extension
+.*Warning: invalid CSR `seed', needs `zkr' extension
+.*Warning: invalid CSR `seed', needs `zkr' extension
+.*Warning: invalid CSR `vstart', needs `v' extension
+.*Warning: invalid CSR `vstart', needs `v' extension
+.*Warning: invalid CSR `vxsat', needs `v' extension
+.*Warning: invalid CSR `vxsat', needs `v' extension
+.*Warning: invalid CSR `vxrm', needs `v' extension
+.*Warning: invalid CSR `vxrm', needs `v' extension
+.*Warning: invalid CSR `vcsr', needs `v' extension
+.*Warning: invalid CSR `vcsr', needs `v' extension
+.*Warning: invalid CSR `vl', needs `v' extension
+.*Warning: invalid CSR `vl', needs `v' extension
.*Warning: read-only CSR is written `csrw vl,a1'
-.*Warning: invalid CSR `vtype' for the current ISA
-.*Warning: invalid CSR `vtype' for the current ISA
+.*Warning: invalid CSR `vtype', needs `v' extension
+.*Warning: invalid CSR `vtype', needs `v' extension
.*Warning: read-only CSR is written `csrw vtype,a1'
-.*Warning: invalid CSR `vlenb' for the current ISA
-.*Warning: invalid CSR `vlenb' for the current ISA
+.*Warning: invalid CSR `vlenb', needs `v' extension
+.*Warning: invalid CSR `vlenb', needs `v' extension
.*Warning: read-only CSR is written `csrw vlenb,a1'
diff --git a/gas/testsuite/gas/riscv/csr-version-1p11.d b/gas/testsuite/gas/riscv/csr-version-1p11.d
index b40c1d5d6b9..0c9166555a4 100644
--- a/gas/testsuite/gas/riscv/csr-version-1p11.d
+++ b/gas/testsuite/gas/riscv/csr-version-1p11.d
@@ -9,22 +9,6 @@
Disassembly of section .text:
0+000 <.text>:
-[ ]+[0-9a-f]+:[ ]+00002573[ ]+csrr[ ]+a0,ustatus
-[ ]+[0-9a-f]+:[ ]+00059073[ ]+csrw[ ]+ustatus,a1
-[ ]+[0-9a-f]+:[ ]+00402573[ ]+csrr[ ]+a0,uie
-[ ]+[0-9a-f]+:[ ]+00459073[ ]+csrw[ ]+uie,a1
-[ ]+[0-9a-f]+:[ ]+00502573[ ]+csrr[ ]+a0,utvec
-[ ]+[0-9a-f]+:[ ]+00559073[ ]+csrw[ ]+utvec,a1
-[ ]+[0-9a-f]+:[ ]+04002573[ ]+csrr[ ]+a0,uscratch
-[ ]+[0-9a-f]+:[ ]+04059073[ ]+csrw[ ]+uscratch,a1
-[ ]+[0-9a-f]+:[ ]+04102573[ ]+csrr[ ]+a0,uepc
-[ ]+[0-9a-f]+:[ ]+04159073[ ]+csrw[ ]+uepc,a1
-[ ]+[0-9a-f]+:[ ]+04202573[ ]+csrr[ ]+a0,ucause
-[ ]+[0-9a-f]+:[ ]+04259073[ ]+csrw[ ]+ucause,a1
-[ ]+[0-9a-f]+:[ ]+04302573[ ]+csrr[ ]+a0,utval
-[ ]+[0-9a-f]+:[ ]+04359073[ ]+csrw[ ]+utval,a1
-[ ]+[0-9a-f]+:[ ]+04402573[ ]+csrr[ ]+a0,uip
-[ ]+[0-9a-f]+:[ ]+04459073[ ]+csrw[ ]+uip,a1
[ ]+[0-9a-f]+:[ ]+c0002573[ ]+rdcycle[ ]+a0
[ ]+[0-9a-f]+:[ ]+c0059073[ ]+csrw[ ]+cycle,a1
[ ]+[0-9a-f]+:[ ]+c0102573[ ]+rdtime[ ]+a0
@@ -155,16 +139,14 @@ Disassembly of section .text:
[ ]+[0-9a-f]+:[ ]+c9f59073[ ]+csrw[ ]+hpmcounter31h,a1
[ ]+[0-9a-f]+:[ ]+10002573[ ]+csrr[ ]+a0,sstatus
[ ]+[0-9a-f]+:[ ]+10059073[ ]+csrw[ ]+sstatus,a1
-[ ]+[0-9a-f]+:[ ]+10202573[ ]+csrr[ ]+a0,sedeleg
-[ ]+[0-9a-f]+:[ ]+10259073[ ]+csrw[ ]+sedeleg,a1
-[ ]+[0-9a-f]+:[ ]+10302573[ ]+csrr[ ]+a0,sideleg
-[ ]+[0-9a-f]+:[ ]+10359073[ ]+csrw[ ]+sideleg,a1
[ ]+[0-9a-f]+:[ ]+10402573[ ]+csrr[ ]+a0,sie
[ ]+[0-9a-f]+:[ ]+10459073[ ]+csrw[ ]+sie,a1
[ ]+[0-9a-f]+:[ ]+10502573[ ]+csrr[ ]+a0,stvec
[ ]+[0-9a-f]+:[ ]+10559073[ ]+csrw[ ]+stvec,a1
[ ]+[0-9a-f]+:[ ]+10602573[ ]+csrr[ ]+a0,scounteren
[ ]+[0-9a-f]+:[ ]+10659073[ ]+csrw[ ]+scounteren,a1
+[ ]+[0-9a-f]+:[ ]+10a02573[ ]+csrr[ ]+a0,0x10a
+[ ]+[0-9a-f]+:[ ]+10a59073[ ]+csrw[ ]+0x10a,a1
[ ]+[0-9a-f]+:[ ]+14002573[ ]+csrr[ ]+a0,sscratch
[ ]+[0-9a-f]+:[ ]+14059073[ ]+csrw[ ]+sscratch,a1
[ ]+[0-9a-f]+:[ ]+14102573[ ]+csrr[ ]+a0,sepc
@@ -185,6 +167,8 @@ Disassembly of section .text:
[ ]+[0-9a-f]+:[ ]+f1359073[ ]+csrw[ ]+mimpid,a1
[ ]+[0-9a-f]+:[ ]+f1402573[ ]+csrr[ ]+a0,mhartid
[ ]+[0-9a-f]+:[ ]+f1459073[ ]+csrw[ ]+mhartid,a1
+[ ]+[0-9a-f]+:[ ]+f1502573[ ]+csrr[ ]+a0,0xf15
+[ ]+[0-9a-f]+:[ ]+f1559073[ ]+csrw[ ]+0xf15,a1
[ ]+[0-9a-f]+:[ ]+30002573[ ]+csrr[ ]+a0,mstatus
[ ]+[0-9a-f]+:[ ]+30059073[ ]+csrw[ ]+mstatus,a1
[ ]+[0-9a-f]+:[ ]+30102573[ ]+csrr[ ]+a0,misa
@@ -199,6 +183,8 @@ Disassembly of section .text:
[ ]+[0-9a-f]+:[ ]+30559073[ ]+csrw[ ]+mtvec,a1
[ ]+[0-9a-f]+:[ ]+30602573[ ]+csrr[ ]+a0,mcounteren
[ ]+[0-9a-f]+:[ ]+30659073[ ]+csrw[ ]+mcounteren,a1
+[ ]+[0-9a-f]+:[ ]+31002573[ ]+csrr[ ]+a0,0x310
+[ ]+[0-9a-f]+:[ ]+31059073[ ]+csrw[ ]+0x310,a1
[ ]+[0-9a-f]+:[ ]+34002573[ ]+csrr[ ]+a0,mscratch
[ ]+[0-9a-f]+:[ ]+34059073[ ]+csrw[ ]+mscratch,a1
[ ]+[0-9a-f]+:[ ]+34102573[ ]+csrr[ ]+a0,mepc
@@ -209,6 +195,18 @@ Disassembly of section .text:
[ ]+[0-9a-f]+:[ ]+34359073[ ]+csrw[ ]+mtval,a1
[ ]+[0-9a-f]+:[ ]+34402573[ ]+csrr[ ]+a0,mip
[ ]+[0-9a-f]+:[ ]+34459073[ ]+csrw[ ]+mip,a1
+[ ]+[0-9a-f]+:[ ]+34a02573[ ]+csrr[ ]+a0,0x34a
+[ ]+[0-9a-f]+:[ ]+34a59073[ ]+csrw[ ]+0x34a,a1
+[ ]+[0-9a-f]+:[ ]+34b02573[ ]+csrr[ ]+a0,0x34b
+[ ]+[0-9a-f]+:[ ]+34b59073[ ]+csrw[ ]+0x34b,a1
+[ ]+[0-9a-f]+:[ ]+30a02573[ ]+csrr[ ]+a0,0x30a
+[ ]+[0-9a-f]+:[ ]+30a59073[ ]+csrw[ ]+0x30a,a1
+[ ]+[0-9a-f]+:[ ]+31a02573[ ]+csrr[ ]+a0,0x31a
+[ ]+[0-9a-f]+:[ ]+31a59073[ ]+csrw[ ]+0x31a,a1
+[ ]+[0-9a-f]+:[ ]+74702573[ ]+csrr[ ]+a0,0x747
+[ ]+[0-9a-f]+:[ ]+74759073[ ]+csrw[ ]+0x747,a1
+[ ]+[0-9a-f]+:[ ]+75702573[ ]+csrr[ ]+a0,0x757
+[ ]+[0-9a-f]+:[ ]+75759073[ ]+csrw[ ]+0x757,a1
[ ]+[0-9a-f]+:[ ]+3a002573[ ]+csrr[ ]+a0,pmpcfg0
[ ]+[0-9a-f]+:[ ]+3a059073[ ]+csrw[ ]+pmpcfg0,a1
[ ]+[0-9a-f]+:[ ]+3a102573[ ]+csrr[ ]+a0,pmpcfg1
@@ -217,6 +215,30 @@ Disassembly of section .text:
[ ]+[0-9a-f]+:[ ]+3a259073[ ]+csrw[ ]+pmpcfg2,a1
[ ]+[0-9a-f]+:[ ]+3a302573[ ]+csrr[ ]+a0,pmpcfg3
[ ]+[0-9a-f]+:[ ]+3a359073[ ]+csrw[ ]+pmpcfg3,a1
+[ ]+[0-9a-f]+:[ ]+3a402573[ ]+csrr[ ]+a0,0x3a4
+[ ]+[0-9a-f]+:[ ]+3a459073[ ]+csrw[ ]+0x3a4,a1
+[ ]+[0-9a-f]+:[ ]+3a502573[ ]+csrr[ ]+a0,0x3a5
+[ ]+[0-9a-f]+:[ ]+3a559073[ ]+csrw[ ]+0x3a5,a1
+[ ]+[0-9a-f]+:[ ]+3a602573[ ]+csrr[ ]+a0,0x3a6
+[ ]+[0-9a-f]+:[ ]+3a659073[ ]+csrw[ ]+0x3a6,a1
+[ ]+[0-9a-f]+:[ ]+3a702573[ ]+csrr[ ]+a0,0x3a7
+[ ]+[0-9a-f]+:[ ]+3a759073[ ]+csrw[ ]+0x3a7,a1
+[ ]+[0-9a-f]+:[ ]+3a802573[ ]+csrr[ ]+a0,0x3a8
+[ ]+[0-9a-f]+:[ ]+3a859073[ ]+csrw[ ]+0x3a8,a1
+[ ]+[0-9a-f]+:[ ]+3a902573[ ]+csrr[ ]+a0,0x3a9
+[ ]+[0-9a-f]+:[ ]+3a959073[ ]+csrw[ ]+0x3a9,a1
+[ ]+[0-9a-f]+:[ ]+3aa02573[ ]+csrr[ ]+a0,0x3aa
+[ ]+[0-9a-f]+:[ ]+3aa59073[ ]+csrw[ ]+0x3aa,a1
+[ ]+[0-9a-f]+:[ ]+3ab02573[ ]+csrr[ ]+a0,0x3ab
+[ ]+[0-9a-f]+:[ ]+3ab59073[ ]+csrw[ ]+0x3ab,a1
+[ ]+[0-9a-f]+:[ ]+3ac02573[ ]+csrr[ ]+a0,0x3ac
+[ ]+[0-9a-f]+:[ ]+3ac59073[ ]+csrw[ ]+0x3ac,a1
+[ ]+[0-9a-f]+:[ ]+3ad02573[ ]+csrr[ ]+a0,0x3ad
+[ ]+[0-9a-f]+:[ ]+3ad59073[ ]+csrw[ ]+0x3ad,a1
+[ ]+[0-9a-f]+:[ ]+3ae02573[ ]+csrr[ ]+a0,0x3ae
+[ ]+[0-9a-f]+:[ ]+3ae59073[ ]+csrw[ ]+0x3ae,a1
+[ ]+[0-9a-f]+:[ ]+3af02573[ ]+csrr[ ]+a0,0x3af
+[ ]+[0-9a-f]+:[ ]+3af59073[ ]+csrw[ ]+0x3af,a1
[ ]+[0-9a-f]+:[ ]+3b002573[ ]+csrr[ ]+a0,pmpaddr0
[ ]+[0-9a-f]+:[ ]+3b059073[ ]+csrw[ ]+pmpaddr0,a1
[ ]+[0-9a-f]+:[ ]+3b102573[ ]+csrr[ ]+a0,pmpaddr1
@@ -249,6 +271,102 @@ Disassembly of section .text:
[ ]+[0-9a-f]+:[ ]+3be59073[ ]+csrw[ ]+pmpaddr14,a1
[ ]+[0-9a-f]+:[ ]+3bf02573[ ]+csrr[ ]+a0,pmpaddr15
[ ]+[0-9a-f]+:[ ]+3bf59073[ ]+csrw[ ]+pmpaddr15,a1
+[ ]+[0-9a-f]+:[ ]+3c002573[ ]+csrr[ ]+a0,0x3c0
+[ ]+[0-9a-f]+:[ ]+3c059073[ ]+csrw[ ]+0x3c0,a1
+[ ]+[0-9a-f]+:[ ]+3c102573[ ]+csrr[ ]+a0,0x3c1
+[ ]+[0-9a-f]+:[ ]+3c159073[ ]+csrw[ ]+0x3c1,a1
+[ ]+[0-9a-f]+:[ ]+3c202573[ ]+csrr[ ]+a0,0x3c2
+[ ]+[0-9a-f]+:[ ]+3c259073[ ]+csrw[ ]+0x3c2,a1
+[ ]+[0-9a-f]+:[ ]+3c302573[ ]+csrr[ ]+a0,0x3c3
+[ ]+[0-9a-f]+:[ ]+3c359073[ ]+csrw[ ]+0x3c3,a1
+[ ]+[0-9a-f]+:[ ]+3c402573[ ]+csrr[ ]+a0,0x3c4
+[ ]+[0-9a-f]+:[ ]+3c459073[ ]+csrw[ ]+0x3c4,a1
+[ ]+[0-9a-f]+:[ ]+3c502573[ ]+csrr[ ]+a0,0x3c5
+[ ]+[0-9a-f]+:[ ]+3c559073[ ]+csrw[ ]+0x3c5,a1
+[ ]+[0-9a-f]+:[ ]+3c602573[ ]+csrr[ ]+a0,0x3c6
+[ ]+[0-9a-f]+:[ ]+3c659073[ ]+csrw[ ]+0x3c6,a1
+[ ]+[0-9a-f]+:[ ]+3c702573[ ]+csrr[ ]+a0,0x3c7
+[ ]+[0-9a-f]+:[ ]+3c759073[ ]+csrw[ ]+0x3c7,a1
+[ ]+[0-9a-f]+:[ ]+3c802573[ ]+csrr[ ]+a0,0x3c8
+[ ]+[0-9a-f]+:[ ]+3c859073[ ]+csrw[ ]+0x3c8,a1
+[ ]+[0-9a-f]+:[ ]+3c902573[ ]+csrr[ ]+a0,0x3c9
+[ ]+[0-9a-f]+:[ ]+3c959073[ ]+csrw[ ]+0x3c9,a1
+[ ]+[0-9a-f]+:[ ]+3ca02573[ ]+csrr[ ]+a0,0x3ca
+[ ]+[0-9a-f]+:[ ]+3ca59073[ ]+csrw[ ]+0x3ca,a1
+[ ]+[0-9a-f]+:[ ]+3cb02573[ ]+csrr[ ]+a0,0x3cb
+[ ]+[0-9a-f]+:[ ]+3cb59073[ ]+csrw[ ]+0x3cb,a1
+[ ]+[0-9a-f]+:[ ]+3cc02573[ ]+csrr[ ]+a0,0x3cc
+[ ]+[0-9a-f]+:[ ]+3cc59073[ ]+csrw[ ]+0x3cc,a1
+[ ]+[0-9a-f]+:[ ]+3cd02573[ ]+csrr[ ]+a0,0x3cd
+[ ]+[0-9a-f]+:[ ]+3cd59073[ ]+csrw[ ]+0x3cd,a1
+[ ]+[0-9a-f]+:[ ]+3ce02573[ ]+csrr[ ]+a0,0x3ce
+[ ]+[0-9a-f]+:[ ]+3ce59073[ ]+csrw[ ]+0x3ce,a1
+[ ]+[0-9a-f]+:[ ]+3cf02573[ ]+csrr[ ]+a0,0x3cf
+[ ]+[0-9a-f]+:[ ]+3cf59073[ ]+csrw[ ]+0x3cf,a1
+[ ]+[0-9a-f]+:[ ]+3d002573[ ]+csrr[ ]+a0,0x3d0
+[ ]+[0-9a-f]+:[ ]+3d059073[ ]+csrw[ ]+0x3d0,a1
+[ ]+[0-9a-f]+:[ ]+3d102573[ ]+csrr[ ]+a0,0x3d1
+[ ]+[0-9a-f]+:[ ]+3d159073[ ]+csrw[ ]+0x3d1,a1
+[ ]+[0-9a-f]+:[ ]+3d202573[ ]+csrr[ ]+a0,0x3d2
+[ ]+[0-9a-f]+:[ ]+3d259073[ ]+csrw[ ]+0x3d2,a1
+[ ]+[0-9a-f]+:[ ]+3d302573[ ]+csrr[ ]+a0,0x3d3
+[ ]+[0-9a-f]+:[ ]+3d359073[ ]+csrw[ ]+0x3d3,a1
+[ ]+[0-9a-f]+:[ ]+3d402573[ ]+csrr[ ]+a0,0x3d4
+[ ]+[0-9a-f]+:[ ]+3d459073[ ]+csrw[ ]+0x3d4,a1
+[ ]+[0-9a-f]+:[ ]+3d502573[ ]+csrr[ ]+a0,0x3d5
+[ ]+[0-9a-f]+:[ ]+3d559073[ ]+csrw[ ]+0x3d5,a1
+[ ]+[0-9a-f]+:[ ]+3d602573[ ]+csrr[ ]+a0,0x3d6
+[ ]+[0-9a-f]+:[ ]+3d659073[ ]+csrw[ ]+0x3d6,a1
+[ ]+[0-9a-f]+:[ ]+3d702573[ ]+csrr[ ]+a0,0x3d7
+[ ]+[0-9a-f]+:[ ]+3d759073[ ]+csrw[ ]+0x3d7,a1
+[ ]+[0-9a-f]+:[ ]+3d802573[ ]+csrr[ ]+a0,0x3d8
+[ ]+[0-9a-f]+:[ ]+3d859073[ ]+csrw[ ]+0x3d8,a1
+[ ]+[0-9a-f]+:[ ]+3d902573[ ]+csrr[ ]+a0,0x3d9
+[ ]+[0-9a-f]+:[ ]+3d959073[ ]+csrw[ ]+0x3d9,a1
+[ ]+[0-9a-f]+:[ ]+3da02573[ ]+csrr[ ]+a0,0x3da
+[ ]+[0-9a-f]+:[ ]+3da59073[ ]+csrw[ ]+0x3da,a1
+[ ]+[0-9a-f]+:[ ]+3db02573[ ]+csrr[ ]+a0,0x3db
+[ ]+[0-9a-f]+:[ ]+3db59073[ ]+csrw[ ]+0x3db,a1
+[ ]+[0-9a-f]+:[ ]+3dc02573[ ]+csrr[ ]+a0,0x3dc
+[ ]+[0-9a-f]+:[ ]+3dc59073[ ]+csrw[ ]+0x3dc,a1
+[ ]+[0-9a-f]+:[ ]+3dd02573[ ]+csrr[ ]+a0,0x3dd
+[ ]+[0-9a-f]+:[ ]+3dd59073[ ]+csrw[ ]+0x3dd,a1
+[ ]+[0-9a-f]+:[ ]+3de02573[ ]+csrr[ ]+a0,0x3de
+[ ]+[0-9a-f]+:[ ]+3de59073[ ]+csrw[ ]+0x3de,a1
+[ ]+[0-9a-f]+:[ ]+3df02573[ ]+csrr[ ]+a0,0x3df
+[ ]+[0-9a-f]+:[ ]+3df59073[ ]+csrw[ ]+0x3df,a1
+[ ]+[0-9a-f]+:[ ]+3e002573[ ]+csrr[ ]+a0,0x3e0
+[ ]+[0-9a-f]+:[ ]+3e059073[ ]+csrw[ ]+0x3e0,a1
+[ ]+[0-9a-f]+:[ ]+3e102573[ ]+csrr[ ]+a0,0x3e1
+[ ]+[0-9a-f]+:[ ]+3e159073[ ]+csrw[ ]+0x3e1,a1
+[ ]+[0-9a-f]+:[ ]+3e202573[ ]+csrr[ ]+a0,0x3e2
+[ ]+[0-9a-f]+:[ ]+3e259073[ ]+csrw[ ]+0x3e2,a1
+[ ]+[0-9a-f]+:[ ]+3e302573[ ]+csrr[ ]+a0,0x3e3
+[ ]+[0-9a-f]+:[ ]+3e359073[ ]+csrw[ ]+0x3e3,a1
+[ ]+[0-9a-f]+:[ ]+3e402573[ ]+csrr[ ]+a0,0x3e4
+[ ]+[0-9a-f]+:[ ]+3e459073[ ]+csrw[ ]+0x3e4,a1
+[ ]+[0-9a-f]+:[ ]+3e502573[ ]+csrr[ ]+a0,0x3e5
+[ ]+[0-9a-f]+:[ ]+3e559073[ ]+csrw[ ]+0x3e5,a1
+[ ]+[0-9a-f]+:[ ]+3e602573[ ]+csrr[ ]+a0,0x3e6
+[ ]+[0-9a-f]+:[ ]+3e659073[ ]+csrw[ ]+0x3e6,a1
+[ ]+[0-9a-f]+:[ ]+3e702573[ ]+csrr[ ]+a0,0x3e7
+[ ]+[0-9a-f]+:[ ]+3e759073[ ]+csrw[ ]+0x3e7,a1
+[ ]+[0-9a-f]+:[ ]+3e802573[ ]+csrr[ ]+a0,0x3e8
+[ ]+[0-9a-f]+:[ ]+3e859073[ ]+csrw[ ]+0x3e8,a1
+[ ]+[0-9a-f]+:[ ]+3e902573[ ]+csrr[ ]+a0,0x3e9
+[ ]+[0-9a-f]+:[ ]+3e959073[ ]+csrw[ ]+0x3e9,a1
+[ ]+[0-9a-f]+:[ ]+3ea02573[ ]+csrr[ ]+a0,0x3ea
+[ ]+[0-9a-f]+:[ ]+3ea59073[ ]+csrw[ ]+0x3ea,a1
+[ ]+[0-9a-f]+:[ ]+3eb02573[ ]+csrr[ ]+a0,0x3eb
+[ ]+[0-9a-f]+:[ ]+3eb59073[ ]+csrw[ ]+0x3eb,a1
+[ ]+[0-9a-f]+:[ ]+3ec02573[ ]+csrr[ ]+a0,0x3ec
+[ ]+[0-9a-f]+:[ ]+3ec59073[ ]+csrw[ ]+0x3ec,a1
+[ ]+[0-9a-f]+:[ ]+3ed02573[ ]+csrr[ ]+a0,0x3ed
+[ ]+[0-9a-f]+:[ ]+3ed59073[ ]+csrw[ ]+0x3ed,a1
+[ ]+[0-9a-f]+:[ ]+3ee02573[ ]+csrr[ ]+a0,0x3ee
+[ ]+[0-9a-f]+:[ ]+3ee59073[ ]+csrw[ ]+0x3ee,a1
+[ ]+[0-9a-f]+:[ ]+3ef02573[ ]+csrr[ ]+a0,0x3ef
+[ ]+[0-9a-f]+:[ ]+3ef59073[ ]+csrw[ ]+0x3ef,a1
[ ]+[0-9a-f]+:[ ]+b0002573[ ]+csrr[ ]+a0,mcycle
[ ]+[0-9a-f]+:[ ]+b0059073[ ]+csrw[ ]+mcycle,a1
[ ]+[0-9a-f]+:[ ]+b0202573[ ]+csrr[ ]+a0,minstret
@@ -461,8 +579,6 @@ Disassembly of section .text:
[ ]+[0-9a-f]+:[ ]+61a59073[ ]+csrw[ ]+0x61a,a1
[ ]+[0-9a-f]+:[ ]+68002573[ ]+csrr[ ]+a0,0x680
[ ]+[0-9a-f]+:[ ]+68059073[ ]+csrw[ ]+0x680,a1
-[ ]+[0-9a-f]+:[ ]+6a802573[ ]+csrr[ ]+a0,0x6a8
-[ ]+[0-9a-f]+:[ ]+6a859073[ ]+csrw[ ]+0x6a8,a1
[ ]+[0-9a-f]+:[ ]+60502573[ ]+csrr[ ]+a0,0x605
[ ]+[0-9a-f]+:[ ]+60559073[ ]+csrw[ ]+0x605,a1
[ ]+[0-9a-f]+:[ ]+61502573[ ]+csrr[ ]+a0,0x615
@@ -511,6 +627,26 @@ Disassembly of section .text:
[ ]+[0-9a-f]+:[ ]+32159073[ ]+csrw[ ]+0x321,a1
[ ]+[0-9a-f]+:[ ]+32202573[ ]+csrr[ ]+a0,0x322
[ ]+[0-9a-f]+:[ ]+32259073[ ]+csrw[ ]+0x322,a1
+[ ]+[0-9a-f]+:[ ]+00002573[ ]+csrr[ ]+a0,ustatus
+[ ]+[0-9a-f]+:[ ]+00059073[ ]+csrw[ ]+ustatus,a1
+[ ]+[0-9a-f]+:[ ]+00402573[ ]+csrr[ ]+a0,uie
+[ ]+[0-9a-f]+:[ ]+00459073[ ]+csrw[ ]+uie,a1
+[ ]+[0-9a-f]+:[ ]+00502573[ ]+csrr[ ]+a0,utvec
+[ ]+[0-9a-f]+:[ ]+00559073[ ]+csrw[ ]+utvec,a1
+[ ]+[0-9a-f]+:[ ]+04002573[ ]+csrr[ ]+a0,uscratch
+[ ]+[0-9a-f]+:[ ]+04059073[ ]+csrw[ ]+uscratch,a1
+[ ]+[0-9a-f]+:[ ]+04102573[ ]+csrr[ ]+a0,uepc
+[ ]+[0-9a-f]+:[ ]+04159073[ ]+csrw[ ]+uepc,a1
+[ ]+[0-9a-f]+:[ ]+04202573[ ]+csrr[ ]+a0,ucause
+[ ]+[0-9a-f]+:[ ]+04259073[ ]+csrw[ ]+ucause,a1
+[ ]+[0-9a-f]+:[ ]+04302573[ ]+csrr[ ]+a0,utval
+[ ]+[0-9a-f]+:[ ]+04359073[ ]+csrw[ ]+utval,a1
+[ ]+[0-9a-f]+:[ ]+04402573[ ]+csrr[ ]+a0,uip
+[ ]+[0-9a-f]+:[ ]+04459073[ ]+csrw[ ]+uip,a1
+[ ]+[0-9a-f]+:[ ]+10202573[ ]+csrr[ ]+a0,sedeleg
+[ ]+[0-9a-f]+:[ ]+10259073[ ]+csrw[ ]+sedeleg,a1
+[ ]+[0-9a-f]+:[ ]+10302573[ ]+csrr[ ]+a0,sideleg
+[ ]+[0-9a-f]+:[ ]+10359073[ ]+csrw[ ]+sideleg,a1
[ ]+[0-9a-f]+:[ ]+00102573[ ]+csrr[ ]+a0,fflags
[ ]+[0-9a-f]+:[ ]+00159073[ ]+csrw[ ]+fflags,a1
[ ]+[0-9a-f]+:[ ]+00202573[ ]+csrr[ ]+a0,frm
@@ -539,10 +675,18 @@ Disassembly of section .text:
[ ]+[0-9a-f]+:[ ]+7a459073[ ]+csrw[ ]+tinfo,a1
[ ]+[0-9a-f]+:[ ]+7a502573[ ]+csrr[ ]+a0,tcontrol
[ ]+[0-9a-f]+:[ ]+7a559073[ ]+csrw[ ]+tcontrol,a1
+[ ]+[0-9a-f]+:[ ]+6a802573[ ]+csrr[ ]+a0,hcontext
+[ ]+[0-9a-f]+:[ ]+6a859073[ ]+csrw[ ]+hcontext,a1
+[ ]+[0-9a-f]+:[ ]+5a802573[ ]+csrr[ ]+a0,scontext
+[ ]+[0-9a-f]+:[ ]+5a859073[ ]+csrw[ ]+scontext,a1
[ ]+[0-9a-f]+:[ ]+7a802573[ ]+csrr[ ]+a0,mcontext
[ ]+[0-9a-f]+:[ ]+7a859073[ ]+csrw[ ]+mcontext,a1
-[ ]+[0-9a-f]+:[ ]+7aa02573[ ]+csrr[ ]+a0,scontext
-[ ]+[0-9a-f]+:[ ]+7aa59073[ ]+csrw[ ]+scontext,a1
+[ ]+[0-9a-f]+:[ ]+7aa02573[ ]+csrr[ ]+a0,mscontext
+[ ]+[0-9a-f]+:[ ]+7aa59073[ ]+csrw[ ]+mscontext,a1
+[ ]+[0-9a-f]+:[ ]+7a102573[ ]+csrr[ ]+a0,tdata1
+[ ]+[0-9a-f]+:[ ]+7a159073[ ]+csrw[ ]+tdata1,a1
+[ ]+[0-9a-f]+:[ ]+7a102573[ ]+csrr[ ]+a0,tdata1
+[ ]+[0-9a-f]+:[ ]+7a159073[ ]+csrw[ ]+tdata1,a1
[ ]+[0-9a-f]+:[ ]+7a102573[ ]+csrr[ ]+a0,tdata1
[ ]+[0-9a-f]+:[ ]+7a159073[ ]+csrw[ ]+tdata1,a1
[ ]+[0-9a-f]+:[ ]+7a102573[ ]+csrr[ ]+a0,tdata1
diff --git a/gas/testsuite/gas/riscv/csr-version-1p11.l b/gas/testsuite/gas/riscv/csr-version-1p11.l
index 44d9611fe49..570efe25cb7 100644
--- a/gas/testsuite/gas/riscv/csr-version-1p11.l
+++ b/gas/testsuite/gas/riscv/csr-version-1p11.l
@@ -31,172 +31,329 @@
.*Warning: read-only CSR is written `csrw hpmcounter29,a1'
.*Warning: read-only CSR is written `csrw hpmcounter30,a1'
.*Warning: read-only CSR is written `csrw hpmcounter31,a1'
-.*Warning: invalid CSR `cycleh' for the current ISA
-.*Warning: invalid CSR `cycleh' for the current ISA
+.*Warning: invalid CSR `cycleh', needs rv32i extension
+.*Warning: invalid CSR `cycleh', needs rv32i extension
.*Warning: read-only CSR is written `csrw cycleh,a1'
-.*Warning: invalid CSR `timeh' for the current ISA
-.*Warning: invalid CSR `timeh' for the current ISA
+.*Warning: invalid CSR `timeh', needs rv32i extension
+.*Warning: invalid CSR `timeh', needs rv32i extension
.*Warning: read-only CSR is written `csrw timeh,a1'
-.*Warning: invalid CSR `instreth' for the current ISA
-.*Warning: invalid CSR `instreth' for the current ISA
+.*Warning: invalid CSR `instreth', needs rv32i extension
+.*Warning: invalid CSR `instreth', needs rv32i extension
.*Warning: read-only CSR is written `csrw instreth,a1'
-.*Warning: invalid CSR `hpmcounter3h' for the current ISA
-.*Warning: invalid CSR `hpmcounter3h' for the current ISA
+.*Warning: invalid CSR `hpmcounter3h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter3h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter3h,a1'
-.*Warning: invalid CSR `hpmcounter4h' for the current ISA
-.*Warning: invalid CSR `hpmcounter4h' for the current ISA
+.*Warning: invalid CSR `hpmcounter4h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter4h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter4h,a1'
-.*Warning: invalid CSR `hpmcounter5h' for the current ISA
-.*Warning: invalid CSR `hpmcounter5h' for the current ISA
+.*Warning: invalid CSR `hpmcounter5h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter5h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter5h,a1'
-.*Warning: invalid CSR `hpmcounter6h' for the current ISA
-.*Warning: invalid CSR `hpmcounter6h' for the current ISA
+.*Warning: invalid CSR `hpmcounter6h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter6h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter6h,a1'
-.*Warning: invalid CSR `hpmcounter7h' for the current ISA
-.*Warning: invalid CSR `hpmcounter7h' for the current ISA
+.*Warning: invalid CSR `hpmcounter7h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter7h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter7h,a1'
-.*Warning: invalid CSR `hpmcounter8h' for the current ISA
-.*Warning: invalid CSR `hpmcounter8h' for the current ISA
+.*Warning: invalid CSR `hpmcounter8h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter8h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter8h,a1'
-.*Warning: invalid CSR `hpmcounter9h' for the current ISA
-.*Warning: invalid CSR `hpmcounter9h' for the current ISA
+.*Warning: invalid CSR `hpmcounter9h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter9h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter9h,a1'
-.*Warning: invalid CSR `hpmcounter10h' for the current ISA
-.*Warning: invalid CSR `hpmcounter10h' for the current ISA
+.*Warning: invalid CSR `hpmcounter10h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter10h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter10h,a1'
-.*Warning: invalid CSR `hpmcounter11h' for the current ISA
-.*Warning: invalid CSR `hpmcounter11h' for the current ISA
+.*Warning: invalid CSR `hpmcounter11h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter11h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter11h,a1'
-.*Warning: invalid CSR `hpmcounter12h' for the current ISA
-.*Warning: invalid CSR `hpmcounter12h' for the current ISA
+.*Warning: invalid CSR `hpmcounter12h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter12h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter12h,a1'
-.*Warning: invalid CSR `hpmcounter13h' for the current ISA
-.*Warning: invalid CSR `hpmcounter13h' for the current ISA
+.*Warning: invalid CSR `hpmcounter13h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter13h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter13h,a1'
-.*Warning: invalid CSR `hpmcounter14h' for the current ISA
-.*Warning: invalid CSR `hpmcounter14h' for the current ISA
+.*Warning: invalid CSR `hpmcounter14h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter14h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter14h,a1'
-.*Warning: invalid CSR `hpmcounter15h' for the current ISA
-.*Warning: invalid CSR `hpmcounter15h' for the current ISA
+.*Warning: invalid CSR `hpmcounter15h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter15h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter15h,a1'
-.*Warning: invalid CSR `hpmcounter16h' for the current ISA
-.*Warning: invalid CSR `hpmcounter16h' for the current ISA
+.*Warning: invalid CSR `hpmcounter16h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter16h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter16h,a1'
-.*Warning: invalid CSR `hpmcounter17h' for the current ISA
-.*Warning: invalid CSR `hpmcounter17h' for the current ISA
+.*Warning: invalid CSR `hpmcounter17h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter17h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter17h,a1'
-.*Warning: invalid CSR `hpmcounter18h' for the current ISA
-.*Warning: invalid CSR `hpmcounter18h' for the current ISA
+.*Warning: invalid CSR `hpmcounter18h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter18h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter18h,a1'
-.*Warning: invalid CSR `hpmcounter19h' for the current ISA
-.*Warning: invalid CSR `hpmcounter19h' for the current ISA
+.*Warning: invalid CSR `hpmcounter19h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter19h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter19h,a1'
-.*Warning: invalid CSR `hpmcounter20h' for the current ISA
-.*Warning: invalid CSR `hpmcounter20h' for the current ISA
+.*Warning: invalid CSR `hpmcounter20h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter20h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter20h,a1'
-.*Warning: invalid CSR `hpmcounter21h' for the current ISA
-.*Warning: invalid CSR `hpmcounter21h' for the current ISA
+.*Warning: invalid CSR `hpmcounter21h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter21h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter21h,a1'
-.*Warning: invalid CSR `hpmcounter22h' for the current ISA
-.*Warning: invalid CSR `hpmcounter22h' for the current ISA
+.*Warning: invalid CSR `hpmcounter22h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter22h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter22h,a1'
-.*Warning: invalid CSR `hpmcounter23h' for the current ISA
-.*Warning: invalid CSR `hpmcounter23h' for the current ISA
+.*Warning: invalid CSR `hpmcounter23h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter23h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter23h,a1'
-.*Warning: invalid CSR `hpmcounter24h' for the current ISA
-.*Warning: invalid CSR `hpmcounter24h' for the current ISA
+.*Warning: invalid CSR `hpmcounter24h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter24h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter24h,a1'
-.*Warning: invalid CSR `hpmcounter25h' for the current ISA
-.*Warning: invalid CSR `hpmcounter25h' for the current ISA
+.*Warning: invalid CSR `hpmcounter25h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter25h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter25h,a1'
-.*Warning: invalid CSR `hpmcounter26h' for the current ISA
-.*Warning: invalid CSR `hpmcounter26h' for the current ISA
+.*Warning: invalid CSR `hpmcounter26h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter26h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter26h,a1'
-.*Warning: invalid CSR `hpmcounter27h' for the current ISA
-.*Warning: invalid CSR `hpmcounter27h' for the current ISA
+.*Warning: invalid CSR `hpmcounter27h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter27h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter27h,a1'
-.*Warning: invalid CSR `hpmcounter28h' for the current ISA
-.*Warning: invalid CSR `hpmcounter28h' for the current ISA
+.*Warning: invalid CSR `hpmcounter28h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter28h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter28h,a1'
-.*Warning: invalid CSR `hpmcounter29h' for the current ISA
-.*Warning: invalid CSR `hpmcounter29h' for the current ISA
+.*Warning: invalid CSR `hpmcounter29h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter29h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter29h,a1'
-.*Warning: invalid CSR `hpmcounter30h' for the current ISA
-.*Warning: invalid CSR `hpmcounter30h' for the current ISA
+.*Warning: invalid CSR `hpmcounter30h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter30h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter30h,a1'
-.*Warning: invalid CSR `hpmcounter31h' for the current ISA
-.*Warning: invalid CSR `hpmcounter31h' for the current ISA
+.*Warning: invalid CSR `hpmcounter31h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter31h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter31h,a1'
+.*Warning: invalid CSR `senvcfg' for the privileged spec `1.11'
+.*Warning: invalid CSR `senvcfg' for the privileged spec `1.11'
.*Warning: read-only CSR is written `csrw mvendorid,a1'
.*Warning: read-only CSR is written `csrw marchid,a1'
.*Warning: read-only CSR is written `csrw mimpid,a1'
.*Warning: read-only CSR is written `csrw mhartid,a1'
-.*Warning: invalid CSR `pmpcfg1' for the current ISA
-.*Warning: invalid CSR `pmpcfg1' for the current ISA
-.*Warning: invalid CSR `pmpcfg3' for the current ISA
-.*Warning: invalid CSR `pmpcfg3' for the current ISA
-.*Warning: invalid CSR `mcycleh' for the current ISA
-.*Warning: invalid CSR `mcycleh' for the current ISA
-.*Warning: invalid CSR `minstreth' for the current ISA
-.*Warning: invalid CSR `minstreth' for the current ISA
-.*Warning: invalid CSR `mhpmcounter3h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter3h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter4h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter4h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter5h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter5h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter6h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter6h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter7h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter7h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter8h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter8h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter9h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter9h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter10h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter10h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter11h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter11h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter12h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter12h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter13h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter13h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter14h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter14h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter15h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter15h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter16h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter16h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter17h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter17h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter18h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter18h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter19h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter19h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter20h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter20h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter21h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter21h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter22h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter22h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter23h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter23h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter24h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter24h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter25h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter25h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter26h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter26h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter27h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter27h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter28h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter28h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter29h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter29h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter30h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter30h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter31h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter31h' for the current ISA
+.*Warning: invalid CSR `mconfigptr' for the privileged spec `1.11'
+.*Warning: invalid CSR `mconfigptr' for the privileged spec `1.11'
+.*Warning: read-only CSR is written `csrw mconfigptr,a1'
+.*Warning: invalid CSR `mstatush', needs rv32i extension
+.*Warning: invalid CSR `mstatush' for the privileged spec `1.11'
+.*Warning: invalid CSR `mstatush', needs rv32i extension
+.*Warning: invalid CSR `mstatush' for the privileged spec `1.11'
+.*Warning: invalid CSR `mtinst' for the privileged spec `1.11'
+.*Warning: invalid CSR `mtinst' for the privileged spec `1.11'
+.*Warning: invalid CSR `mtval2' for the privileged spec `1.11'
+.*Warning: invalid CSR `mtval2' for the privileged spec `1.11'
+.*Warning: invalid CSR `menvcfg' for the privileged spec `1.11'
+.*Warning: invalid CSR `menvcfg' for the privileged spec `1.11'
+.*Warning: invalid CSR `menvcfgh', needs rv32i extension
+.*Warning: invalid CSR `menvcfgh' for the privileged spec `1.11'
+.*Warning: invalid CSR `menvcfgh', needs rv32i extension
+.*Warning: invalid CSR `menvcfgh' for the privileged spec `1.11'
+.*Warning: invalid CSR `mseccfg' for the privileged spec `1.11'
+.*Warning: invalid CSR `mseccfg' for the privileged spec `1.11'
+.*Warning: invalid CSR `mseccfgh', needs rv32i extension
+.*Warning: invalid CSR `mseccfgh' for the privileged spec `1.11'
+.*Warning: invalid CSR `mseccfgh', needs rv32i extension
+.*Warning: invalid CSR `mseccfgh' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpcfg1', needs rv32i extension
+.*Warning: invalid CSR `pmpcfg1', needs rv32i extension
+.*Warning: invalid CSR `pmpcfg3', needs rv32i extension
+.*Warning: invalid CSR `pmpcfg3', needs rv32i extension
+.*Warning: invalid CSR `pmpcfg4' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpcfg4' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpcfg5', needs rv32i extension
+.*Warning: invalid CSR `pmpcfg5' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpcfg5', needs rv32i extension
+.*Warning: invalid CSR `pmpcfg5' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpcfg6' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpcfg6' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpcfg7', needs rv32i extension
+.*Warning: invalid CSR `pmpcfg7' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpcfg7', needs rv32i extension
+.*Warning: invalid CSR `pmpcfg7' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpcfg8' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpcfg8' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpcfg9', needs rv32i extension
+.*Warning: invalid CSR `pmpcfg9' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpcfg9', needs rv32i extension
+.*Warning: invalid CSR `pmpcfg9' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpcfg10' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpcfg10' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpcfg11', needs rv32i extension
+.*Warning: invalid CSR `pmpcfg11' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpcfg11', needs rv32i extension
+.*Warning: invalid CSR `pmpcfg11' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpcfg12' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpcfg12' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpcfg13', needs rv32i extension
+.*Warning: invalid CSR `pmpcfg13' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpcfg13', needs rv32i extension
+.*Warning: invalid CSR `pmpcfg13' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpcfg14' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpcfg14' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpcfg15', needs rv32i extension
+.*Warning: invalid CSR `pmpcfg15' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpcfg15', needs rv32i extension
+.*Warning: invalid CSR `pmpcfg15' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr16' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr16' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr17' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr17' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr18' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr18' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr19' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr19' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr20' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr20' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr21' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr21' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr22' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr22' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr23' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr23' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr24' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr24' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr25' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr25' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr26' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr26' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr27' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr27' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr28' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr28' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr29' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr29' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr30' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr30' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr31' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr31' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr32' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr32' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr33' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr33' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr34' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr34' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr35' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr35' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr36' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr36' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr37' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr37' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr38' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr38' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr39' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr39' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr40' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr40' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr41' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr41' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr42' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr42' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr43' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr43' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr44' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr44' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr45' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr45' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr46' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr46' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr47' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr47' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr48' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr48' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr49' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr49' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr50' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr50' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr51' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr51' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr52' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr52' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr53' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr53' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr54' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr54' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr55' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr55' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr56' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr56' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr57' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr57' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr58' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr58' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr59' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr59' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr60' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr60' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr61' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr61' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr62' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr62' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr63' for the privileged spec `1.11'
+.*Warning: invalid CSR `pmpaddr63' for the privileged spec `1.11'
+.*Warning: invalid CSR `mcycleh', needs rv32i extension
+.*Warning: invalid CSR `mcycleh', needs rv32i extension
+.*Warning: invalid CSR `minstreth', needs rv32i extension
+.*Warning: invalid CSR `minstreth', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter3h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter3h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter4h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter4h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter5h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter5h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter6h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter6h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter7h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter7h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter8h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter8h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter9h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter9h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter10h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter10h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter11h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter11h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter12h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter12h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter13h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter13h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter14h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter14h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter15h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter15h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter16h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter16h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter17h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter17h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter18h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter18h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter19h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter19h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter20h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter20h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter21h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter21h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter22h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter22h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter23h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter23h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter24h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter24h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter25h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter25h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter26h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter26h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter27h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter27h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter28h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter28h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter29h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter29h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter30h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter30h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter31h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter31h', needs rv32i extension
.*Warning: invalid CSR `hstatus' for the privileged spec `1.11'
.*Warning: invalid CSR `hstatus' for the privileged spec `1.11'
.*Warning: invalid CSR `hedeleg' for the privileged spec `1.11'
@@ -222,19 +379,17 @@
.*Warning: read-only CSR is written `csrw hgeip,a1'
.*Warning: invalid CSR `henvcfg' for the privileged spec `1.11'
.*Warning: invalid CSR `henvcfg' for the privileged spec `1.11'
-.*Warning: invalid CSR `henvcfgh' for the current ISA
+.*Warning: invalid CSR `henvcfgh', needs rv32i extension
.*Warning: invalid CSR `henvcfgh' for the privileged spec `1.11'
-.*Warning: invalid CSR `henvcfgh' for the current ISA
+.*Warning: invalid CSR `henvcfgh', needs rv32i extension
.*Warning: invalid CSR `henvcfgh' for the privileged spec `1.11'
.*Warning: invalid CSR `hgatp' for the privileged spec `1.11'
.*Warning: invalid CSR `hgatp' for the privileged spec `1.11'
-.*Warning: invalid CSR `hcontext' for the privileged spec `1.11'
-.*Warning: invalid CSR `hcontext' for the privileged spec `1.11'
.*Warning: invalid CSR `htimedelta' for the privileged spec `1.11'
.*Warning: invalid CSR `htimedelta' for the privileged spec `1.11'
-.*Warning: invalid CSR `htimedeltah' for the current ISA
+.*Warning: invalid CSR `htimedeltah', needs rv32i extension
.*Warning: invalid CSR `htimedeltah' for the privileged spec `1.11'
-.*Warning: invalid CSR `htimedeltah' for the current ISA
+.*Warning: invalid CSR `htimedeltah', needs rv32i extension
.*Warning: invalid CSR `htimedeltah' for the privileged spec `1.11'
.*Warning: invalid CSR `vsstatus' for the privileged spec `1.11'
.*Warning: invalid CSR `vsstatus' for the privileged spec `1.11'
@@ -280,28 +435,28 @@
.*Warning: invalid CSR `mscounteren' for the privileged spec `1.11'
.*Warning: invalid CSR `mhcounteren' for the privileged spec `1.11'
.*Warning: invalid CSR `mhcounteren' for the privileged spec `1.11'
-.*Warning: invalid CSR `fflags' for the current ISA
-.*Warning: invalid CSR `fflags' for the current ISA
-.*Warning: invalid CSR `frm' for the current ISA
-.*Warning: invalid CSR `frm' for the current ISA
-.*Warning: invalid CSR `fcsr' for the current ISA
-.*Warning: invalid CSR `fcsr' for the current ISA
-.*Warning: invalid CSR `seed' for the current ISA
-.*Warning: invalid CSR `seed' for the current ISA
-.*Warning: invalid CSR `vstart' for the current ISA
-.*Warning: invalid CSR `vstart' for the current ISA
-.*Warning: invalid CSR `vxsat' for the current ISA
-.*Warning: invalid CSR `vxsat' for the current ISA
-.*Warning: invalid CSR `vxrm' for the current ISA
-.*Warning: invalid CSR `vxrm' for the current ISA
-.*Warning: invalid CSR `vcsr' for the current ISA
-.*Warning: invalid CSR `vcsr' for the current ISA
-.*Warning: invalid CSR `vl' for the current ISA
-.*Warning: invalid CSR `vl' for the current ISA
+.*Warning: invalid CSR `fflags', needs `f' extension
+.*Warning: invalid CSR `fflags', needs `f' extension
+.*Warning: invalid CSR `frm', needs `f' extension
+.*Warning: invalid CSR `frm', needs `f' extension
+.*Warning: invalid CSR `fcsr', needs `f' extension
+.*Warning: invalid CSR `fcsr', needs `f' extension
+.*Warning: invalid CSR `seed', needs `zkr' extension
+.*Warning: invalid CSR `seed', needs `zkr' extension
+.*Warning: invalid CSR `vstart', needs `v' extension
+.*Warning: invalid CSR `vstart', needs `v' extension
+.*Warning: invalid CSR `vxsat', needs `v' extension
+.*Warning: invalid CSR `vxsat', needs `v' extension
+.*Warning: invalid CSR `vxrm', needs `v' extension
+.*Warning: invalid CSR `vxrm', needs `v' extension
+.*Warning: invalid CSR `vcsr', needs `v' extension
+.*Warning: invalid CSR `vcsr', needs `v' extension
+.*Warning: invalid CSR `vl', needs `v' extension
+.*Warning: invalid CSR `vl', needs `v' extension
.*Warning: read-only CSR is written `csrw vl,a1'
-.*Warning: invalid CSR `vtype' for the current ISA
-.*Warning: invalid CSR `vtype' for the current ISA
+.*Warning: invalid CSR `vtype', needs `v' extension
+.*Warning: invalid CSR `vtype', needs `v' extension
.*Warning: read-only CSR is written `csrw vtype,a1'
-.*Warning: invalid CSR `vlenb' for the current ISA
-.*Warning: invalid CSR `vlenb' for the current ISA
+.*Warning: invalid CSR `vlenb', needs `v' extension
+.*Warning: invalid CSR `vlenb', needs `v' extension
.*Warning: read-only CSR is written `csrw vlenb,a1'
diff --git a/gas/testsuite/gas/riscv/csr-version-1p12.d b/gas/testsuite/gas/riscv/csr-version-1p12.d
index fbc30ee2fcc..3c27ca2de20 100644
--- a/gas/testsuite/gas/riscv/csr-version-1p12.d
+++ b/gas/testsuite/gas/riscv/csr-version-1p12.d
@@ -9,22 +9,6 @@
Disassembly of section .text:
0+000 <.text>:
-[ ]+[0-9a-f]+:[ ]+00002573[ ]+csrr[ ]+a0,ustatus
-[ ]+[0-9a-f]+:[ ]+00059073[ ]+csrw[ ]+ustatus,a1
-[ ]+[0-9a-f]+:[ ]+00402573[ ]+csrr[ ]+a0,uie
-[ ]+[0-9a-f]+:[ ]+00459073[ ]+csrw[ ]+uie,a1
-[ ]+[0-9a-f]+:[ ]+00502573[ ]+csrr[ ]+a0,utvec
-[ ]+[0-9a-f]+:[ ]+00559073[ ]+csrw[ ]+utvec,a1
-[ ]+[0-9a-f]+:[ ]+04002573[ ]+csrr[ ]+a0,uscratch
-[ ]+[0-9a-f]+:[ ]+04059073[ ]+csrw[ ]+uscratch,a1
-[ ]+[0-9a-f]+:[ ]+04102573[ ]+csrr[ ]+a0,uepc
-[ ]+[0-9a-f]+:[ ]+04159073[ ]+csrw[ ]+uepc,a1
-[ ]+[0-9a-f]+:[ ]+04202573[ ]+csrr[ ]+a0,ucause
-[ ]+[0-9a-f]+:[ ]+04259073[ ]+csrw[ ]+ucause,a1
-[ ]+[0-9a-f]+:[ ]+04302573[ ]+csrr[ ]+a0,utval
-[ ]+[0-9a-f]+:[ ]+04359073[ ]+csrw[ ]+utval,a1
-[ ]+[0-9a-f]+:[ ]+04402573[ ]+csrr[ ]+a0,uip
-[ ]+[0-9a-f]+:[ ]+04459073[ ]+csrw[ ]+uip,a1
[ ]+[0-9a-f]+:[ ]+c0002573[ ]+rdcycle[ ]+a0
[ ]+[0-9a-f]+:[ ]+c0059073[ ]+csrw[ ]+cycle,a1
[ ]+[0-9a-f]+:[ ]+c0102573[ ]+rdtime[ ]+a0
@@ -155,16 +139,14 @@ Disassembly of section .text:
[ ]+[0-9a-f]+:[ ]+c9f59073[ ]+csrw[ ]+hpmcounter31h,a1
[ ]+[0-9a-f]+:[ ]+10002573[ ]+csrr[ ]+a0,sstatus
[ ]+[0-9a-f]+:[ ]+10059073[ ]+csrw[ ]+sstatus,a1
-[ ]+[0-9a-f]+:[ ]+10202573[ ]+csrr[ ]+a0,sedeleg
-[ ]+[0-9a-f]+:[ ]+10259073[ ]+csrw[ ]+sedeleg,a1
-[ ]+[0-9a-f]+:[ ]+10302573[ ]+csrr[ ]+a0,sideleg
-[ ]+[0-9a-f]+:[ ]+10359073[ ]+csrw[ ]+sideleg,a1
[ ]+[0-9a-f]+:[ ]+10402573[ ]+csrr[ ]+a0,sie
[ ]+[0-9a-f]+:[ ]+10459073[ ]+csrw[ ]+sie,a1
[ ]+[0-9a-f]+:[ ]+10502573[ ]+csrr[ ]+a0,stvec
[ ]+[0-9a-f]+:[ ]+10559073[ ]+csrw[ ]+stvec,a1
[ ]+[0-9a-f]+:[ ]+10602573[ ]+csrr[ ]+a0,scounteren
[ ]+[0-9a-f]+:[ ]+10659073[ ]+csrw[ ]+scounteren,a1
+[ ]+[0-9a-f]+:[ ]+10a02573[ ]+csrr[ ]+a0,senvcfg
+[ ]+[0-9a-f]+:[ ]+10a59073[ ]+csrw[ ]+senvcfg,a1
[ ]+[0-9a-f]+:[ ]+14002573[ ]+csrr[ ]+a0,sscratch
[ ]+[0-9a-f]+:[ ]+14059073[ ]+csrw[ ]+sscratch,a1
[ ]+[0-9a-f]+:[ ]+14102573[ ]+csrr[ ]+a0,sepc
@@ -185,6 +167,8 @@ Disassembly of section .text:
[ ]+[0-9a-f]+:[ ]+f1359073[ ]+csrw[ ]+mimpid,a1
[ ]+[0-9a-f]+:[ ]+f1402573[ ]+csrr[ ]+a0,mhartid
[ ]+[0-9a-f]+:[ ]+f1459073[ ]+csrw[ ]+mhartid,a1
+[ ]+[0-9a-f]+:[ ]+f1502573[ ]+csrr[ ]+a0,mconfigptr
+[ ]+[0-9a-f]+:[ ]+f1559073[ ]+csrw[ ]+mconfigptr,a1
[ ]+[0-9a-f]+:[ ]+30002573[ ]+csrr[ ]+a0,mstatus
[ ]+[0-9a-f]+:[ ]+30059073[ ]+csrw[ ]+mstatus,a1
[ ]+[0-9a-f]+:[ ]+30102573[ ]+csrr[ ]+a0,misa
@@ -199,6 +183,8 @@ Disassembly of section .text:
[ ]+[0-9a-f]+:[ ]+30559073[ ]+csrw[ ]+mtvec,a1
[ ]+[0-9a-f]+:[ ]+30602573[ ]+csrr[ ]+a0,mcounteren
[ ]+[0-9a-f]+:[ ]+30659073[ ]+csrw[ ]+mcounteren,a1
+[ ]+[0-9a-f]+:[ ]+31002573[ ]+csrr[ ]+a0,mstatush
+[ ]+[0-9a-f]+:[ ]+31059073[ ]+csrw[ ]+mstatush,a1
[ ]+[0-9a-f]+:[ ]+34002573[ ]+csrr[ ]+a0,mscratch
[ ]+[0-9a-f]+:[ ]+34059073[ ]+csrw[ ]+mscratch,a1
[ ]+[0-9a-f]+:[ ]+34102573[ ]+csrr[ ]+a0,mepc
@@ -209,6 +195,18 @@ Disassembly of section .text:
[ ]+[0-9a-f]+:[ ]+34359073[ ]+csrw[ ]+mtval,a1
[ ]+[0-9a-f]+:[ ]+34402573[ ]+csrr[ ]+a0,mip
[ ]+[0-9a-f]+:[ ]+34459073[ ]+csrw[ ]+mip,a1
+[ ]+[0-9a-f]+:[ ]+34a02573[ ]+csrr[ ]+a0,mtinst
+[ ]+[0-9a-f]+:[ ]+34a59073[ ]+csrw[ ]+mtinst,a1
+[ ]+[0-9a-f]+:[ ]+34b02573[ ]+csrr[ ]+a0,mtval2
+[ ]+[0-9a-f]+:[ ]+34b59073[ ]+csrw[ ]+mtval2,a1
+[ ]+[0-9a-f]+:[ ]+30a02573[ ]+csrr[ ]+a0,menvcfg
+[ ]+[0-9a-f]+:[ ]+30a59073[ ]+csrw[ ]+menvcfg,a1
+[ ]+[0-9a-f]+:[ ]+31a02573[ ]+csrr[ ]+a0,menvcfgh
+[ ]+[0-9a-f]+:[ ]+31a59073[ ]+csrw[ ]+menvcfgh,a1
+[ ]+[0-9a-f]+:[ ]+74702573[ ]+csrr[ ]+a0,mseccfg
+[ ]+[0-9a-f]+:[ ]+74759073[ ]+csrw[ ]+mseccfg,a1
+[ ]+[0-9a-f]+:[ ]+75702573[ ]+csrr[ ]+a0,mseccfgh
+[ ]+[0-9a-f]+:[ ]+75759073[ ]+csrw[ ]+mseccfgh,a1
[ ]+[0-9a-f]+:[ ]+3a002573[ ]+csrr[ ]+a0,pmpcfg0
[ ]+[0-9a-f]+:[ ]+3a059073[ ]+csrw[ ]+pmpcfg0,a1
[ ]+[0-9a-f]+:[ ]+3a102573[ ]+csrr[ ]+a0,pmpcfg1
@@ -217,6 +215,30 @@ Disassembly of section .text:
[ ]+[0-9a-f]+:[ ]+3a259073[ ]+csrw[ ]+pmpcfg2,a1
[ ]+[0-9a-f]+:[ ]+3a302573[ ]+csrr[ ]+a0,pmpcfg3
[ ]+[0-9a-f]+:[ ]+3a359073[ ]+csrw[ ]+pmpcfg3,a1
+[ ]+[0-9a-f]+:[ ]+3a402573[ ]+csrr[ ]+a0,pmpcfg4
+[ ]+[0-9a-f]+:[ ]+3a459073[ ]+csrw[ ]+pmpcfg4,a1
+[ ]+[0-9a-f]+:[ ]+3a502573[ ]+csrr[ ]+a0,pmpcfg5
+[ ]+[0-9a-f]+:[ ]+3a559073[ ]+csrw[ ]+pmpcfg5,a1
+[ ]+[0-9a-f]+:[ ]+3a602573[ ]+csrr[ ]+a0,pmpcfg6
+[ ]+[0-9a-f]+:[ ]+3a659073[ ]+csrw[ ]+pmpcfg6,a1
+[ ]+[0-9a-f]+:[ ]+3a702573[ ]+csrr[ ]+a0,pmpcfg7
+[ ]+[0-9a-f]+:[ ]+3a759073[ ]+csrw[ ]+pmpcfg7,a1
+[ ]+[0-9a-f]+:[ ]+3a802573[ ]+csrr[ ]+a0,pmpcfg8
+[ ]+[0-9a-f]+:[ ]+3a859073[ ]+csrw[ ]+pmpcfg8,a1
+[ ]+[0-9a-f]+:[ ]+3a902573[ ]+csrr[ ]+a0,pmpcfg9
+[ ]+[0-9a-f]+:[ ]+3a959073[ ]+csrw[ ]+pmpcfg9,a1
+[ ]+[0-9a-f]+:[ ]+3aa02573[ ]+csrr[ ]+a0,pmpcfg10
+[ ]+[0-9a-f]+:[ ]+3aa59073[ ]+csrw[ ]+pmpcfg10,a1
+[ ]+[0-9a-f]+:[ ]+3ab02573[ ]+csrr[ ]+a0,pmpcfg11
+[ ]+[0-9a-f]+:[ ]+3ab59073[ ]+csrw[ ]+pmpcfg11,a1
+[ ]+[0-9a-f]+:[ ]+3ac02573[ ]+csrr[ ]+a0,pmpcfg12
+[ ]+[0-9a-f]+:[ ]+3ac59073[ ]+csrw[ ]+pmpcfg12,a1
+[ ]+[0-9a-f]+:[ ]+3ad02573[ ]+csrr[ ]+a0,pmpcfg13
+[ ]+[0-9a-f]+:[ ]+3ad59073[ ]+csrw[ ]+pmpcfg13,a1
+[ ]+[0-9a-f]+:[ ]+3ae02573[ ]+csrr[ ]+a0,pmpcfg14
+[ ]+[0-9a-f]+:[ ]+3ae59073[ ]+csrw[ ]+pmpcfg14,a1
+[ ]+[0-9a-f]+:[ ]+3af02573[ ]+csrr[ ]+a0,pmpcfg15
+[ ]+[0-9a-f]+:[ ]+3af59073[ ]+csrw[ ]+pmpcfg15,a1
[ ]+[0-9a-f]+:[ ]+3b002573[ ]+csrr[ ]+a0,pmpaddr0
[ ]+[0-9a-f]+:[ ]+3b059073[ ]+csrw[ ]+pmpaddr0,a1
[ ]+[0-9a-f]+:[ ]+3b102573[ ]+csrr[ ]+a0,pmpaddr1
@@ -249,6 +271,102 @@ Disassembly of section .text:
[ ]+[0-9a-f]+:[ ]+3be59073[ ]+csrw[ ]+pmpaddr14,a1
[ ]+[0-9a-f]+:[ ]+3bf02573[ ]+csrr[ ]+a0,pmpaddr15
[ ]+[0-9a-f]+:[ ]+3bf59073[ ]+csrw[ ]+pmpaddr15,a1
+[ ]+[0-9a-f]+:[ ]+3c002573[ ]+csrr[ ]+a0,pmpaddr16
+[ ]+[0-9a-f]+:[ ]+3c059073[ ]+csrw[ ]+pmpaddr16,a1
+[ ]+[0-9a-f]+:[ ]+3c102573[ ]+csrr[ ]+a0,pmpaddr17
+[ ]+[0-9a-f]+:[ ]+3c159073[ ]+csrw[ ]+pmpaddr17,a1
+[ ]+[0-9a-f]+:[ ]+3c202573[ ]+csrr[ ]+a0,pmpaddr18
+[ ]+[0-9a-f]+:[ ]+3c259073[ ]+csrw[ ]+pmpaddr18,a1
+[ ]+[0-9a-f]+:[ ]+3c302573[ ]+csrr[ ]+a0,pmpaddr19
+[ ]+[0-9a-f]+:[ ]+3c359073[ ]+csrw[ ]+pmpaddr19,a1
+[ ]+[0-9a-f]+:[ ]+3c402573[ ]+csrr[ ]+a0,pmpaddr20
+[ ]+[0-9a-f]+:[ ]+3c459073[ ]+csrw[ ]+pmpaddr20,a1
+[ ]+[0-9a-f]+:[ ]+3c502573[ ]+csrr[ ]+a0,pmpaddr21
+[ ]+[0-9a-f]+:[ ]+3c559073[ ]+csrw[ ]+pmpaddr21,a1
+[ ]+[0-9a-f]+:[ ]+3c602573[ ]+csrr[ ]+a0,pmpaddr22
+[ ]+[0-9a-f]+:[ ]+3c659073[ ]+csrw[ ]+pmpaddr22,a1
+[ ]+[0-9a-f]+:[ ]+3c702573[ ]+csrr[ ]+a0,pmpaddr23
+[ ]+[0-9a-f]+:[ ]+3c759073[ ]+csrw[ ]+pmpaddr23,a1
+[ ]+[0-9a-f]+:[ ]+3c802573[ ]+csrr[ ]+a0,pmpaddr24
+[ ]+[0-9a-f]+:[ ]+3c859073[ ]+csrw[ ]+pmpaddr24,a1
+[ ]+[0-9a-f]+:[ ]+3c902573[ ]+csrr[ ]+a0,pmpaddr25
+[ ]+[0-9a-f]+:[ ]+3c959073[ ]+csrw[ ]+pmpaddr25,a1
+[ ]+[0-9a-f]+:[ ]+3ca02573[ ]+csrr[ ]+a0,pmpaddr26
+[ ]+[0-9a-f]+:[ ]+3ca59073[ ]+csrw[ ]+pmpaddr26,a1
+[ ]+[0-9a-f]+:[ ]+3cb02573[ ]+csrr[ ]+a0,pmpaddr27
+[ ]+[0-9a-f]+:[ ]+3cb59073[ ]+csrw[ ]+pmpaddr27,a1
+[ ]+[0-9a-f]+:[ ]+3cc02573[ ]+csrr[ ]+a0,pmpaddr28
+[ ]+[0-9a-f]+:[ ]+3cc59073[ ]+csrw[ ]+pmpaddr28,a1
+[ ]+[0-9a-f]+:[ ]+3cd02573[ ]+csrr[ ]+a0,pmpaddr29
+[ ]+[0-9a-f]+:[ ]+3cd59073[ ]+csrw[ ]+pmpaddr29,a1
+[ ]+[0-9a-f]+:[ ]+3ce02573[ ]+csrr[ ]+a0,pmpaddr30
+[ ]+[0-9a-f]+:[ ]+3ce59073[ ]+csrw[ ]+pmpaddr30,a1
+[ ]+[0-9a-f]+:[ ]+3cf02573[ ]+csrr[ ]+a0,pmpaddr31
+[ ]+[0-9a-f]+:[ ]+3cf59073[ ]+csrw[ ]+pmpaddr31,a1
+[ ]+[0-9a-f]+:[ ]+3d002573[ ]+csrr[ ]+a0,pmpaddr32
+[ ]+[0-9a-f]+:[ ]+3d059073[ ]+csrw[ ]+pmpaddr32,a1
+[ ]+[0-9a-f]+:[ ]+3d102573[ ]+csrr[ ]+a0,pmpaddr33
+[ ]+[0-9a-f]+:[ ]+3d159073[ ]+csrw[ ]+pmpaddr33,a1
+[ ]+[0-9a-f]+:[ ]+3d202573[ ]+csrr[ ]+a0,pmpaddr34
+[ ]+[0-9a-f]+:[ ]+3d259073[ ]+csrw[ ]+pmpaddr34,a1
+[ ]+[0-9a-f]+:[ ]+3d302573[ ]+csrr[ ]+a0,pmpaddr35
+[ ]+[0-9a-f]+:[ ]+3d359073[ ]+csrw[ ]+pmpaddr35,a1
+[ ]+[0-9a-f]+:[ ]+3d402573[ ]+csrr[ ]+a0,pmpaddr36
+[ ]+[0-9a-f]+:[ ]+3d459073[ ]+csrw[ ]+pmpaddr36,a1
+[ ]+[0-9a-f]+:[ ]+3d502573[ ]+csrr[ ]+a0,pmpaddr37
+[ ]+[0-9a-f]+:[ ]+3d559073[ ]+csrw[ ]+pmpaddr37,a1
+[ ]+[0-9a-f]+:[ ]+3d602573[ ]+csrr[ ]+a0,pmpaddr38
+[ ]+[0-9a-f]+:[ ]+3d659073[ ]+csrw[ ]+pmpaddr38,a1
+[ ]+[0-9a-f]+:[ ]+3d702573[ ]+csrr[ ]+a0,pmpaddr39
+[ ]+[0-9a-f]+:[ ]+3d759073[ ]+csrw[ ]+pmpaddr39,a1
+[ ]+[0-9a-f]+:[ ]+3d802573[ ]+csrr[ ]+a0,pmpaddr40
+[ ]+[0-9a-f]+:[ ]+3d859073[ ]+csrw[ ]+pmpaddr40,a1
+[ ]+[0-9a-f]+:[ ]+3d902573[ ]+csrr[ ]+a0,pmpaddr41
+[ ]+[0-9a-f]+:[ ]+3d959073[ ]+csrw[ ]+pmpaddr41,a1
+[ ]+[0-9a-f]+:[ ]+3da02573[ ]+csrr[ ]+a0,pmpaddr42
+[ ]+[0-9a-f]+:[ ]+3da59073[ ]+csrw[ ]+pmpaddr42,a1
+[ ]+[0-9a-f]+:[ ]+3db02573[ ]+csrr[ ]+a0,pmpaddr43
+[ ]+[0-9a-f]+:[ ]+3db59073[ ]+csrw[ ]+pmpaddr43,a1
+[ ]+[0-9a-f]+:[ ]+3dc02573[ ]+csrr[ ]+a0,pmpaddr44
+[ ]+[0-9a-f]+:[ ]+3dc59073[ ]+csrw[ ]+pmpaddr44,a1
+[ ]+[0-9a-f]+:[ ]+3dd02573[ ]+csrr[ ]+a0,pmpaddr45
+[ ]+[0-9a-f]+:[ ]+3dd59073[ ]+csrw[ ]+pmpaddr45,a1
+[ ]+[0-9a-f]+:[ ]+3de02573[ ]+csrr[ ]+a0,pmpaddr46
+[ ]+[0-9a-f]+:[ ]+3de59073[ ]+csrw[ ]+pmpaddr46,a1
+[ ]+[0-9a-f]+:[ ]+3df02573[ ]+csrr[ ]+a0,pmpaddr47
+[ ]+[0-9a-f]+:[ ]+3df59073[ ]+csrw[ ]+pmpaddr47,a1
+[ ]+[0-9a-f]+:[ ]+3e002573[ ]+csrr[ ]+a0,pmpaddr48
+[ ]+[0-9a-f]+:[ ]+3e059073[ ]+csrw[ ]+pmpaddr48,a1
+[ ]+[0-9a-f]+:[ ]+3e102573[ ]+csrr[ ]+a0,pmpaddr49
+[ ]+[0-9a-f]+:[ ]+3e159073[ ]+csrw[ ]+pmpaddr49,a1
+[ ]+[0-9a-f]+:[ ]+3e202573[ ]+csrr[ ]+a0,pmpaddr50
+[ ]+[0-9a-f]+:[ ]+3e259073[ ]+csrw[ ]+pmpaddr50,a1
+[ ]+[0-9a-f]+:[ ]+3e302573[ ]+csrr[ ]+a0,pmpaddr51
+[ ]+[0-9a-f]+:[ ]+3e359073[ ]+csrw[ ]+pmpaddr51,a1
+[ ]+[0-9a-f]+:[ ]+3e402573[ ]+csrr[ ]+a0,pmpaddr52
+[ ]+[0-9a-f]+:[ ]+3e459073[ ]+csrw[ ]+pmpaddr52,a1
+[ ]+[0-9a-f]+:[ ]+3e502573[ ]+csrr[ ]+a0,pmpaddr53
+[ ]+[0-9a-f]+:[ ]+3e559073[ ]+csrw[ ]+pmpaddr53,a1
+[ ]+[0-9a-f]+:[ ]+3e602573[ ]+csrr[ ]+a0,pmpaddr54
+[ ]+[0-9a-f]+:[ ]+3e659073[ ]+csrw[ ]+pmpaddr54,a1
+[ ]+[0-9a-f]+:[ ]+3e702573[ ]+csrr[ ]+a0,pmpaddr55
+[ ]+[0-9a-f]+:[ ]+3e759073[ ]+csrw[ ]+pmpaddr55,a1
+[ ]+[0-9a-f]+:[ ]+3e802573[ ]+csrr[ ]+a0,pmpaddr56
+[ ]+[0-9a-f]+:[ ]+3e859073[ ]+csrw[ ]+pmpaddr56,a1
+[ ]+[0-9a-f]+:[ ]+3e902573[ ]+csrr[ ]+a0,pmpaddr57
+[ ]+[0-9a-f]+:[ ]+3e959073[ ]+csrw[ ]+pmpaddr57,a1
+[ ]+[0-9a-f]+:[ ]+3ea02573[ ]+csrr[ ]+a0,pmpaddr58
+[ ]+[0-9a-f]+:[ ]+3ea59073[ ]+csrw[ ]+pmpaddr58,a1
+[ ]+[0-9a-f]+:[ ]+3eb02573[ ]+csrr[ ]+a0,pmpaddr59
+[ ]+[0-9a-f]+:[ ]+3eb59073[ ]+csrw[ ]+pmpaddr59,a1
+[ ]+[0-9a-f]+:[ ]+3ec02573[ ]+csrr[ ]+a0,pmpaddr60
+[ ]+[0-9a-f]+:[ ]+3ec59073[ ]+csrw[ ]+pmpaddr60,a1
+[ ]+[0-9a-f]+:[ ]+3ed02573[ ]+csrr[ ]+a0,pmpaddr61
+[ ]+[0-9a-f]+:[ ]+3ed59073[ ]+csrw[ ]+pmpaddr61,a1
+[ ]+[0-9a-f]+:[ ]+3ee02573[ ]+csrr[ ]+a0,pmpaddr62
+[ ]+[0-9a-f]+:[ ]+3ee59073[ ]+csrw[ ]+pmpaddr62,a1
+[ ]+[0-9a-f]+:[ ]+3ef02573[ ]+csrr[ ]+a0,pmpaddr63
+[ ]+[0-9a-f]+:[ ]+3ef59073[ ]+csrw[ ]+pmpaddr63,a1
[ ]+[0-9a-f]+:[ ]+b0002573[ ]+csrr[ ]+a0,mcycle
[ ]+[0-9a-f]+:[ ]+b0059073[ ]+csrw[ ]+mcycle,a1
[ ]+[0-9a-f]+:[ ]+b0202573[ ]+csrr[ ]+a0,minstret
@@ -461,8 +579,6 @@ Disassembly of section .text:
[ ]+[0-9a-f]+:[ ]+61a59073[ ]+csrw[ ]+henvcfgh,a1
[ ]+[0-9a-f]+:[ ]+68002573[ ]+csrr[ ]+a0,hgatp
[ ]+[0-9a-f]+:[ ]+68059073[ ]+csrw[ ]+hgatp,a1
-[ ]+[0-9a-f]+:[ ]+6a802573[ ]+csrr[ ]+a0,hcontext
-[ ]+[0-9a-f]+:[ ]+6a859073[ ]+csrw[ ]+hcontext,a1
[ ]+[0-9a-f]+:[ ]+60502573[ ]+csrr[ ]+a0,htimedelta
[ ]+[0-9a-f]+:[ ]+60559073[ ]+csrw[ ]+htimedelta,a1
[ ]+[0-9a-f]+:[ ]+61502573[ ]+csrr[ ]+a0,htimedeltah
@@ -485,8 +601,8 @@ Disassembly of section .text:
[ ]+[0-9a-f]+:[ ]+24459073[ ]+csrw[ ]+vsip,a1
[ ]+[0-9a-f]+:[ ]+28002573[ ]+csrr[ ]+a0,vsatp
[ ]+[0-9a-f]+:[ ]+28059073[ ]+csrw[ ]+vsatp,a1
-[ ]+[0-9a-f]+:[ ]+04302573[ ]+csrr[ ]+a0,utval
-[ ]+[0-9a-f]+:[ ]+04359073[ ]+csrw[ ]+utval,a1
+[ ]+[0-9a-f]+:[ ]+04302573[ ]+csrr[ ]+a0,0x43
+[ ]+[0-9a-f]+:[ ]+04359073[ ]+csrw[ ]+0x43,a1
[ ]+[0-9a-f]+:[ ]+14302573[ ]+csrr[ ]+a0,stval
[ ]+[0-9a-f]+:[ ]+14359073[ ]+csrw[ ]+stval,a1
[ ]+[0-9a-f]+:[ ]+18002573[ ]+csrr[ ]+a0,satp
@@ -511,6 +627,26 @@ Disassembly of section .text:
[ ]+[0-9a-f]+:[ ]+32159073[ ]+csrw[ ]+0x321,a1
[ ]+[0-9a-f]+:[ ]+32202573[ ]+csrr[ ]+a0,0x322
[ ]+[0-9a-f]+:[ ]+32259073[ ]+csrw[ ]+0x322,a1
+[ ]+[0-9a-f]+:[ ]+00002573[ ]+csrr[ ]+a0,0x0
+[ ]+[0-9a-f]+:[ ]+00059073[ ]+csrw[ ]+0x0,a1
+[ ]+[0-9a-f]+:[ ]+00402573[ ]+csrr[ ]+a0,0x4
+[ ]+[0-9a-f]+:[ ]+00459073[ ]+csrw[ ]+0x4,a1
+[ ]+[0-9a-f]+:[ ]+00502573[ ]+csrr[ ]+a0,0x5
+[ ]+[0-9a-f]+:[ ]+00559073[ ]+csrw[ ]+0x5,a1
+[ ]+[0-9a-f]+:[ ]+04002573[ ]+csrr[ ]+a0,0x40
+[ ]+[0-9a-f]+:[ ]+04059073[ ]+csrw[ ]+0x40,a1
+[ ]+[0-9a-f]+:[ ]+04102573[ ]+csrr[ ]+a0,0x41
+[ ]+[0-9a-f]+:[ ]+04159073[ ]+csrw[ ]+0x41,a1
+[ ]+[0-9a-f]+:[ ]+04202573[ ]+csrr[ ]+a0,0x42
+[ ]+[0-9a-f]+:[ ]+04259073[ ]+csrw[ ]+0x42,a1
+[ ]+[0-9a-f]+:[ ]+04302573[ ]+csrr[ ]+a0,0x43
+[ ]+[0-9a-f]+:[ ]+04359073[ ]+csrw[ ]+0x43,a1
+[ ]+[0-9a-f]+:[ ]+04402573[ ]+csrr[ ]+a0,0x44
+[ ]+[0-9a-f]+:[ ]+04459073[ ]+csrw[ ]+0x44,a1
+[ ]+[0-9a-f]+:[ ]+10202573[ ]+csrr[ ]+a0,0x102
+[ ]+[0-9a-f]+:[ ]+10259073[ ]+csrw[ ]+0x102,a1
+[ ]+[0-9a-f]+:[ ]+10302573[ ]+csrr[ ]+a0,0x103
+[ ]+[0-9a-f]+:[ ]+10359073[ ]+csrw[ ]+0x103,a1
[ ]+[0-9a-f]+:[ ]+00102573[ ]+csrr[ ]+a0,fflags
[ ]+[0-9a-f]+:[ ]+00159073[ ]+csrw[ ]+fflags,a1
[ ]+[0-9a-f]+:[ ]+00202573[ ]+csrr[ ]+a0,frm
@@ -539,10 +675,18 @@ Disassembly of section .text:
[ ]+[0-9a-f]+:[ ]+7a459073[ ]+csrw[ ]+tinfo,a1
[ ]+[0-9a-f]+:[ ]+7a502573[ ]+csrr[ ]+a0,tcontrol
[ ]+[0-9a-f]+:[ ]+7a559073[ ]+csrw[ ]+tcontrol,a1
+[ ]+[0-9a-f]+:[ ]+6a802573[ ]+csrr[ ]+a0,hcontext
+[ ]+[0-9a-f]+:[ ]+6a859073[ ]+csrw[ ]+hcontext,a1
+[ ]+[0-9a-f]+:[ ]+5a802573[ ]+csrr[ ]+a0,scontext
+[ ]+[0-9a-f]+:[ ]+5a859073[ ]+csrw[ ]+scontext,a1
[ ]+[0-9a-f]+:[ ]+7a802573[ ]+csrr[ ]+a0,mcontext
[ ]+[0-9a-f]+:[ ]+7a859073[ ]+csrw[ ]+mcontext,a1
-[ ]+[0-9a-f]+:[ ]+7aa02573[ ]+csrr[ ]+a0,scontext
-[ ]+[0-9a-f]+:[ ]+7aa59073[ ]+csrw[ ]+scontext,a1
+[ ]+[0-9a-f]+:[ ]+7aa02573[ ]+csrr[ ]+a0,mscontext
+[ ]+[0-9a-f]+:[ ]+7aa59073[ ]+csrw[ ]+mscontext,a1
+[ ]+[0-9a-f]+:[ ]+7a102573[ ]+csrr[ ]+a0,tdata1
+[ ]+[0-9a-f]+:[ ]+7a159073[ ]+csrw[ ]+tdata1,a1
+[ ]+[0-9a-f]+:[ ]+7a102573[ ]+csrr[ ]+a0,tdata1
+[ ]+[0-9a-f]+:[ ]+7a159073[ ]+csrw[ ]+tdata1,a1
[ ]+[0-9a-f]+:[ ]+7a102573[ ]+csrr[ ]+a0,tdata1
[ ]+[0-9a-f]+:[ ]+7a159073[ ]+csrw[ ]+tdata1,a1
[ ]+[0-9a-f]+:[ ]+7a102573[ ]+csrr[ ]+a0,tdata1
diff --git a/gas/testsuite/gas/riscv/csr-version-1p12.l b/gas/testsuite/gas/riscv/csr-version-1p12.l
index 237cb8a1699..03d193cd50e 100644
--- a/gas/testsuite/gas/riscv/csr-version-1p12.l
+++ b/gas/testsuite/gas/riscv/csr-version-1p12.l
@@ -31,177 +31,196 @@
.*Warning: read-only CSR is written `csrw hpmcounter29,a1'
.*Warning: read-only CSR is written `csrw hpmcounter30,a1'
.*Warning: read-only CSR is written `csrw hpmcounter31,a1'
-.*Warning: invalid CSR `cycleh' for the current ISA
-.*Warning: invalid CSR `cycleh' for the current ISA
+.*Warning: invalid CSR `cycleh', needs rv32i extension
+.*Warning: invalid CSR `cycleh', needs rv32i extension
.*Warning: read-only CSR is written `csrw cycleh,a1'
-.*Warning: invalid CSR `timeh' for the current ISA
-.*Warning: invalid CSR `timeh' for the current ISA
+.*Warning: invalid CSR `timeh', needs rv32i extension
+.*Warning: invalid CSR `timeh', needs rv32i extension
.*Warning: read-only CSR is written `csrw timeh,a1'
-.*Warning: invalid CSR `instreth' for the current ISA
-.*Warning: invalid CSR `instreth' for the current ISA
+.*Warning: invalid CSR `instreth', needs rv32i extension
+.*Warning: invalid CSR `instreth', needs rv32i extension
.*Warning: read-only CSR is written `csrw instreth,a1'
-.*Warning: invalid CSR `hpmcounter3h' for the current ISA
-.*Warning: invalid CSR `hpmcounter3h' for the current ISA
+.*Warning: invalid CSR `hpmcounter3h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter3h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter3h,a1'
-.*Warning: invalid CSR `hpmcounter4h' for the current ISA
-.*Warning: invalid CSR `hpmcounter4h' for the current ISA
+.*Warning: invalid CSR `hpmcounter4h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter4h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter4h,a1'
-.*Warning: invalid CSR `hpmcounter5h' for the current ISA
-.*Warning: invalid CSR `hpmcounter5h' for the current ISA
+.*Warning: invalid CSR `hpmcounter5h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter5h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter5h,a1'
-.*Warning: invalid CSR `hpmcounter6h' for the current ISA
-.*Warning: invalid CSR `hpmcounter6h' for the current ISA
+.*Warning: invalid CSR `hpmcounter6h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter6h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter6h,a1'
-.*Warning: invalid CSR `hpmcounter7h' for the current ISA
-.*Warning: invalid CSR `hpmcounter7h' for the current ISA
+.*Warning: invalid CSR `hpmcounter7h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter7h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter7h,a1'
-.*Warning: invalid CSR `hpmcounter8h' for the current ISA
-.*Warning: invalid CSR `hpmcounter8h' for the current ISA
+.*Warning: invalid CSR `hpmcounter8h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter8h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter8h,a1'
-.*Warning: invalid CSR `hpmcounter9h' for the current ISA
-.*Warning: invalid CSR `hpmcounter9h' for the current ISA
+.*Warning: invalid CSR `hpmcounter9h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter9h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter9h,a1'
-.*Warning: invalid CSR `hpmcounter10h' for the current ISA
-.*Warning: invalid CSR `hpmcounter10h' for the current ISA
+.*Warning: invalid CSR `hpmcounter10h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter10h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter10h,a1'
-.*Warning: invalid CSR `hpmcounter11h' for the current ISA
-.*Warning: invalid CSR `hpmcounter11h' for the current ISA
+.*Warning: invalid CSR `hpmcounter11h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter11h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter11h,a1'
-.*Warning: invalid CSR `hpmcounter12h' for the current ISA
-.*Warning: invalid CSR `hpmcounter12h' for the current ISA
+.*Warning: invalid CSR `hpmcounter12h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter12h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter12h,a1'
-.*Warning: invalid CSR `hpmcounter13h' for the current ISA
-.*Warning: invalid CSR `hpmcounter13h' for the current ISA
+.*Warning: invalid CSR `hpmcounter13h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter13h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter13h,a1'
-.*Warning: invalid CSR `hpmcounter14h' for the current ISA
-.*Warning: invalid CSR `hpmcounter14h' for the current ISA
+.*Warning: invalid CSR `hpmcounter14h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter14h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter14h,a1'
-.*Warning: invalid CSR `hpmcounter15h' for the current ISA
-.*Warning: invalid CSR `hpmcounter15h' for the current ISA
+.*Warning: invalid CSR `hpmcounter15h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter15h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter15h,a1'
-.*Warning: invalid CSR `hpmcounter16h' for the current ISA
-.*Warning: invalid CSR `hpmcounter16h' for the current ISA
+.*Warning: invalid CSR `hpmcounter16h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter16h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter16h,a1'
-.*Warning: invalid CSR `hpmcounter17h' for the current ISA
-.*Warning: invalid CSR `hpmcounter17h' for the current ISA
+.*Warning: invalid CSR `hpmcounter17h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter17h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter17h,a1'
-.*Warning: invalid CSR `hpmcounter18h' for the current ISA
-.*Warning: invalid CSR `hpmcounter18h' for the current ISA
+.*Warning: invalid CSR `hpmcounter18h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter18h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter18h,a1'
-.*Warning: invalid CSR `hpmcounter19h' for the current ISA
-.*Warning: invalid CSR `hpmcounter19h' for the current ISA
+.*Warning: invalid CSR `hpmcounter19h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter19h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter19h,a1'
-.*Warning: invalid CSR `hpmcounter20h' for the current ISA
-.*Warning: invalid CSR `hpmcounter20h' for the current ISA
+.*Warning: invalid CSR `hpmcounter20h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter20h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter20h,a1'
-.*Warning: invalid CSR `hpmcounter21h' for the current ISA
-.*Warning: invalid CSR `hpmcounter21h' for the current ISA
+.*Warning: invalid CSR `hpmcounter21h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter21h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter21h,a1'
-.*Warning: invalid CSR `hpmcounter22h' for the current ISA
-.*Warning: invalid CSR `hpmcounter22h' for the current ISA
+.*Warning: invalid CSR `hpmcounter22h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter22h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter22h,a1'
-.*Warning: invalid CSR `hpmcounter23h' for the current ISA
-.*Warning: invalid CSR `hpmcounter23h' for the current ISA
+.*Warning: invalid CSR `hpmcounter23h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter23h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter23h,a1'
-.*Warning: invalid CSR `hpmcounter24h' for the current ISA
-.*Warning: invalid CSR `hpmcounter24h' for the current ISA
+.*Warning: invalid CSR `hpmcounter24h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter24h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter24h,a1'
-.*Warning: invalid CSR `hpmcounter25h' for the current ISA
-.*Warning: invalid CSR `hpmcounter25h' for the current ISA
+.*Warning: invalid CSR `hpmcounter25h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter25h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter25h,a1'
-.*Warning: invalid CSR `hpmcounter26h' for the current ISA
-.*Warning: invalid CSR `hpmcounter26h' for the current ISA
+.*Warning: invalid CSR `hpmcounter26h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter26h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter26h,a1'
-.*Warning: invalid CSR `hpmcounter27h' for the current ISA
-.*Warning: invalid CSR `hpmcounter27h' for the current ISA
+.*Warning: invalid CSR `hpmcounter27h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter27h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter27h,a1'
-.*Warning: invalid CSR `hpmcounter28h' for the current ISA
-.*Warning: invalid CSR `hpmcounter28h' for the current ISA
+.*Warning: invalid CSR `hpmcounter28h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter28h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter28h,a1'
-.*Warning: invalid CSR `hpmcounter29h' for the current ISA
-.*Warning: invalid CSR `hpmcounter29h' for the current ISA
+.*Warning: invalid CSR `hpmcounter29h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter29h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter29h,a1'
-.*Warning: invalid CSR `hpmcounter30h' for the current ISA
-.*Warning: invalid CSR `hpmcounter30h' for the current ISA
+.*Warning: invalid CSR `hpmcounter30h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter30h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter30h,a1'
-.*Warning: invalid CSR `hpmcounter31h' for the current ISA
-.*Warning: invalid CSR `hpmcounter31h' for the current ISA
+.*Warning: invalid CSR `hpmcounter31h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter31h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter31h,a1'
.*Warning: read-only CSR is written `csrw mvendorid,a1'
.*Warning: read-only CSR is written `csrw marchid,a1'
.*Warning: read-only CSR is written `csrw mimpid,a1'
.*Warning: read-only CSR is written `csrw mhartid,a1'
-.*Warning: invalid CSR `pmpcfg1' for the current ISA
-.*Warning: invalid CSR `pmpcfg1' for the current ISA
-.*Warning: invalid CSR `pmpcfg3' for the current ISA
-.*Warning: invalid CSR `pmpcfg3' for the current ISA
-.*Warning: invalid CSR `mcycleh' for the current ISA
-.*Warning: invalid CSR `mcycleh' for the current ISA
-.*Warning: invalid CSR `minstreth' for the current ISA
-.*Warning: invalid CSR `minstreth' for the current ISA
-.*Warning: invalid CSR `mhpmcounter3h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter3h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter4h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter4h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter5h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter5h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter6h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter6h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter7h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter7h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter8h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter8h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter9h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter9h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter10h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter10h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter11h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter11h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter12h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter12h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter13h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter13h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter14h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter14h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter15h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter15h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter16h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter16h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter17h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter17h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter18h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter18h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter19h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter19h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter20h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter20h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter21h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter21h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter22h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter22h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter23h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter23h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter24h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter24h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter25h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter25h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter26h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter26h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter27h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter27h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter28h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter28h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter29h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter29h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter30h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter30h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter31h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter31h' for the current ISA
+.*Warning: read-only CSR is written `csrw mconfigptr,a1'
+.*Warning: invalid CSR `mstatush', needs rv32i extension
+.*Warning: invalid CSR `mstatush', needs rv32i extension
+.*Warning: invalid CSR `menvcfgh', needs rv32i extension
+.*Warning: invalid CSR `menvcfgh', needs rv32i extension
+.*Warning: invalid CSR `mseccfgh', needs rv32i extension
+.*Warning: invalid CSR `mseccfgh', needs rv32i extension
+.*Warning: invalid CSR `pmpcfg1', needs rv32i extension
+.*Warning: invalid CSR `pmpcfg1', needs rv32i extension
+.*Warning: invalid CSR `pmpcfg3', needs rv32i extension
+.*Warning: invalid CSR `pmpcfg3', needs rv32i extension
+.*Warning: invalid CSR `pmpcfg5', needs rv32i extension
+.*Warning: invalid CSR `pmpcfg5', needs rv32i extension
+.*Warning: invalid CSR `pmpcfg7', needs rv32i extension
+.*Warning: invalid CSR `pmpcfg7', needs rv32i extension
+.*Warning: invalid CSR `pmpcfg9', needs rv32i extension
+.*Warning: invalid CSR `pmpcfg9', needs rv32i extension
+.*Warning: invalid CSR `pmpcfg11', needs rv32i extension
+.*Warning: invalid CSR `pmpcfg11', needs rv32i extension
+.*Warning: invalid CSR `pmpcfg13', needs rv32i extension
+.*Warning: invalid CSR `pmpcfg13', needs rv32i extension
+.*Warning: invalid CSR `pmpcfg15', needs rv32i extension
+.*Warning: invalid CSR `pmpcfg15', needs rv32i extension
+.*Warning: invalid CSR `mcycleh', needs rv32i extension
+.*Warning: invalid CSR `mcycleh', needs rv32i extension
+.*Warning: invalid CSR `minstreth', needs rv32i extension
+.*Warning: invalid CSR `minstreth', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter3h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter3h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter4h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter4h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter5h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter5h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter6h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter6h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter7h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter7h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter8h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter8h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter9h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter9h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter10h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter10h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter11h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter11h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter12h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter12h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter13h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter13h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter14h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter14h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter15h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter15h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter16h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter16h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter17h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter17h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter18h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter18h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter19h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter19h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter20h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter20h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter21h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter21h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter22h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter22h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter23h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter23h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter24h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter24h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter25h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter25h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter26h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter26h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter27h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter27h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter28h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter28h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter29h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter29h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter30h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter30h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter31h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter31h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hgeip,a1'
-.*Warning: invalid CSR `henvcfgh' for the current ISA
-.*Warning: invalid CSR `henvcfgh' for the current ISA
-.*Warning: invalid CSR `htimedeltah' for the current ISA
-.*Warning: invalid CSR `htimedeltah' for the current ISA
+.*Warning: invalid CSR `henvcfgh', needs rv32i extension
+.*Warning: invalid CSR `henvcfgh', needs rv32i extension
+.*Warning: invalid CSR `htimedeltah', needs rv32i extension
+.*Warning: invalid CSR `htimedeltah', needs rv32i extension
.*Warning: invalid CSR `ubadaddr' for the privileged spec `1.12'
.*Warning: invalid CSR `ubadaddr' for the privileged spec `1.12'
.*Warning: invalid CSR `sbadaddr' for the privileged spec `1.12'
@@ -228,28 +247,48 @@
.*Warning: invalid CSR `mscounteren' for the privileged spec `1.12'
.*Warning: invalid CSR `mhcounteren' for the privileged spec `1.12'
.*Warning: invalid CSR `mhcounteren' for the privileged spec `1.12'
-.*Warning: invalid CSR `fflags' for the current ISA
-.*Warning: invalid CSR `fflags' for the current ISA
-.*Warning: invalid CSR `frm' for the current ISA
-.*Warning: invalid CSR `frm' for the current ISA
-.*Warning: invalid CSR `fcsr' for the current ISA
-.*Warning: invalid CSR `fcsr' for the current ISA
-.*Warning: invalid CSR `seed' for the current ISA
-.*Warning: invalid CSR `seed' for the current ISA
-.*Warning: invalid CSR `vstart' for the current ISA
-.*Warning: invalid CSR `vstart' for the current ISA
-.*Warning: invalid CSR `vxsat' for the current ISA
-.*Warning: invalid CSR `vxsat' for the current ISA
-.*Warning: invalid CSR `vxrm' for the current ISA
-.*Warning: invalid CSR `vxrm' for the current ISA
-.*Warning: invalid CSR `vcsr' for the current ISA
-.*Warning: invalid CSR `vcsr' for the current ISA
-.*Warning: invalid CSR `vl' for the current ISA
-.*Warning: invalid CSR `vl' for the current ISA
+.*Warning: invalid CSR `ustatus' for the privileged spec `1.12'
+.*Warning: invalid CSR `ustatus' for the privileged spec `1.12'
+.*Warning: invalid CSR `uie' for the privileged spec `1.12'
+.*Warning: invalid CSR `uie' for the privileged spec `1.12'
+.*Warning: invalid CSR `utvec' for the privileged spec `1.12'
+.*Warning: invalid CSR `utvec' for the privileged spec `1.12'
+.*Warning: invalid CSR `uscratch' for the privileged spec `1.12'
+.*Warning: invalid CSR `uscratch' for the privileged spec `1.12'
+.*Warning: invalid CSR `uepc' for the privileged spec `1.12'
+.*Warning: invalid CSR `uepc' for the privileged spec `1.12'
+.*Warning: invalid CSR `ucause' for the privileged spec `1.12'
+.*Warning: invalid CSR `ucause' for the privileged spec `1.12'
+.*Warning: invalid CSR `utval' for the privileged spec `1.12'
+.*Warning: invalid CSR `utval' for the privileged spec `1.12'
+.*Warning: invalid CSR `uip' for the privileged spec `1.12'
+.*Warning: invalid CSR `uip' for the privileged spec `1.12'
+.*Warning: invalid CSR `sedeleg' for the privileged spec `1.12'
+.*Warning: invalid CSR `sedeleg' for the privileged spec `1.12'
+.*Warning: invalid CSR `sideleg' for the privileged spec `1.12'
+.*Warning: invalid CSR `sideleg' for the privileged spec `1.12'
+.*Warning: invalid CSR `fflags', needs `f' extension
+.*Warning: invalid CSR `fflags', needs `f' extension
+.*Warning: invalid CSR `frm', needs `f' extension
+.*Warning: invalid CSR `frm', needs `f' extension
+.*Warning: invalid CSR `fcsr', needs `f' extension
+.*Warning: invalid CSR `fcsr', needs `f' extension
+.*Warning: invalid CSR `seed', needs `zkr' extension
+.*Warning: invalid CSR `seed', needs `zkr' extension
+.*Warning: invalid CSR `vstart', needs `v' extension
+.*Warning: invalid CSR `vstart', needs `v' extension
+.*Warning: invalid CSR `vxsat', needs `v' extension
+.*Warning: invalid CSR `vxsat', needs `v' extension
+.*Warning: invalid CSR `vxrm', needs `v' extension
+.*Warning: invalid CSR `vxrm', needs `v' extension
+.*Warning: invalid CSR `vcsr', needs `v' extension
+.*Warning: invalid CSR `vcsr', needs `v' extension
+.*Warning: invalid CSR `vl', needs `v' extension
+.*Warning: invalid CSR `vl', needs `v' extension
.*Warning: read-only CSR is written `csrw vl,a1'
-.*Warning: invalid CSR `vtype' for the current ISA
-.*Warning: invalid CSR `vtype' for the current ISA
+.*Warning: invalid CSR `vtype', needs `v' extension
+.*Warning: invalid CSR `vtype', needs `v' extension
.*Warning: read-only CSR is written `csrw vtype,a1'
-.*Warning: invalid CSR `vlenb' for the current ISA
-.*Warning: invalid CSR `vlenb' for the current ISA
+.*Warning: invalid CSR `vlenb', needs `v' extension
+.*Warning: invalid CSR `vlenb', needs `v' extension
.*Warning: read-only CSR is written `csrw vlenb,a1'
diff --git a/gas/testsuite/gas/riscv/csr-version-1p9p1.d b/gas/testsuite/gas/riscv/csr-version-1p9p1.d
index a96e8c9dbec..d0841df5aba 100644
--- a/gas/testsuite/gas/riscv/csr-version-1p9p1.d
+++ b/gas/testsuite/gas/riscv/csr-version-1p9p1.d
@@ -9,22 +9,6 @@
Disassembly of section .text:
0+000 <.text>:
-[ ]+[0-9a-f]+:[ ]+00002573[ ]+csrr[ ]+a0,ustatus
-[ ]+[0-9a-f]+:[ ]+00059073[ ]+csrw[ ]+ustatus,a1
-[ ]+[0-9a-f]+:[ ]+00402573[ ]+csrr[ ]+a0,uie
-[ ]+[0-9a-f]+:[ ]+00459073[ ]+csrw[ ]+uie,a1
-[ ]+[0-9a-f]+:[ ]+00502573[ ]+csrr[ ]+a0,utvec
-[ ]+[0-9a-f]+:[ ]+00559073[ ]+csrw[ ]+utvec,a1
-[ ]+[0-9a-f]+:[ ]+04002573[ ]+csrr[ ]+a0,uscratch
-[ ]+[0-9a-f]+:[ ]+04059073[ ]+csrw[ ]+uscratch,a1
-[ ]+[0-9a-f]+:[ ]+04102573[ ]+csrr[ ]+a0,uepc
-[ ]+[0-9a-f]+:[ ]+04159073[ ]+csrw[ ]+uepc,a1
-[ ]+[0-9a-f]+:[ ]+04202573[ ]+csrr[ ]+a0,ucause
-[ ]+[0-9a-f]+:[ ]+04259073[ ]+csrw[ ]+ucause,a1
-[ ]+[0-9a-f]+:[ ]+04302573[ ]+csrr[ ]+a0,ubadaddr
-[ ]+[0-9a-f]+:[ ]+04359073[ ]+csrw[ ]+ubadaddr,a1
-[ ]+[0-9a-f]+:[ ]+04402573[ ]+csrr[ ]+a0,uip
-[ ]+[0-9a-f]+:[ ]+04459073[ ]+csrw[ ]+uip,a1
[ ]+[0-9a-f]+:[ ]+c0002573[ ]+rdcycle[ ]+a0
[ ]+[0-9a-f]+:[ ]+c0059073[ ]+csrw[ ]+cycle,a1
[ ]+[0-9a-f]+:[ ]+c0102573[ ]+rdtime[ ]+a0
@@ -155,16 +139,14 @@ Disassembly of section .text:
[ ]+[0-9a-f]+:[ ]+c9f59073[ ]+csrw[ ]+hpmcounter31h,a1
[ ]+[0-9a-f]+:[ ]+10002573[ ]+csrr[ ]+a0,sstatus
[ ]+[0-9a-f]+:[ ]+10059073[ ]+csrw[ ]+sstatus,a1
-[ ]+[0-9a-f]+:[ ]+10202573[ ]+csrr[ ]+a0,sedeleg
-[ ]+[0-9a-f]+:[ ]+10259073[ ]+csrw[ ]+sedeleg,a1
-[ ]+[0-9a-f]+:[ ]+10302573[ ]+csrr[ ]+a0,sideleg
-[ ]+[0-9a-f]+:[ ]+10359073[ ]+csrw[ ]+sideleg,a1
[ ]+[0-9a-f]+:[ ]+10402573[ ]+csrr[ ]+a0,sie
[ ]+[0-9a-f]+:[ ]+10459073[ ]+csrw[ ]+sie,a1
[ ]+[0-9a-f]+:[ ]+10502573[ ]+csrr[ ]+a0,stvec
[ ]+[0-9a-f]+:[ ]+10559073[ ]+csrw[ ]+stvec,a1
[ ]+[0-9a-f]+:[ ]+10602573[ ]+csrr[ ]+a0,0x106
[ ]+[0-9a-f]+:[ ]+10659073[ ]+csrw[ ]+0x106,a1
+[ ]+[0-9a-f]+:[ ]+10a02573[ ]+csrr[ ]+a0,0x10a
+[ ]+[0-9a-f]+:[ ]+10a59073[ ]+csrw[ ]+0x10a,a1
[ ]+[0-9a-f]+:[ ]+14002573[ ]+csrr[ ]+a0,sscratch
[ ]+[0-9a-f]+:[ ]+14059073[ ]+csrw[ ]+sscratch,a1
[ ]+[0-9a-f]+:[ ]+14102573[ ]+csrr[ ]+a0,sepc
@@ -185,6 +167,8 @@ Disassembly of section .text:
[ ]+[0-9a-f]+:[ ]+f1359073[ ]+csrw[ ]+mimpid,a1
[ ]+[0-9a-f]+:[ ]+f1402573[ ]+csrr[ ]+a0,mhartid
[ ]+[0-9a-f]+:[ ]+f1459073[ ]+csrw[ ]+mhartid,a1
+[ ]+[0-9a-f]+:[ ]+f1502573[ ]+csrr[ ]+a0,0xf15
+[ ]+[0-9a-f]+:[ ]+f1559073[ ]+csrw[ ]+0xf15,a1
[ ]+[0-9a-f]+:[ ]+30002573[ ]+csrr[ ]+a0,mstatus
[ ]+[0-9a-f]+:[ ]+30059073[ ]+csrw[ ]+mstatus,a1
[ ]+[0-9a-f]+:[ ]+30102573[ ]+csrr[ ]+a0,misa
@@ -199,6 +183,8 @@ Disassembly of section .text:
[ ]+[0-9a-f]+:[ ]+30559073[ ]+csrw[ ]+mtvec,a1
[ ]+[0-9a-f]+:[ ]+30602573[ ]+csrr[ ]+a0,0x306
[ ]+[0-9a-f]+:[ ]+30659073[ ]+csrw[ ]+0x306,a1
+[ ]+[0-9a-f]+:[ ]+31002573[ ]+csrr[ ]+a0,0x310
+[ ]+[0-9a-f]+:[ ]+31059073[ ]+csrw[ ]+0x310,a1
[ ]+[0-9a-f]+:[ ]+34002573[ ]+csrr[ ]+a0,mscratch
[ ]+[0-9a-f]+:[ ]+34059073[ ]+csrw[ ]+mscratch,a1
[ ]+[0-9a-f]+:[ ]+34102573[ ]+csrr[ ]+a0,mepc
@@ -209,6 +195,18 @@ Disassembly of section .text:
[ ]+[0-9a-f]+:[ ]+34359073[ ]+csrw[ ]+mbadaddr,a1
[ ]+[0-9a-f]+:[ ]+34402573[ ]+csrr[ ]+a0,mip
[ ]+[0-9a-f]+:[ ]+34459073[ ]+csrw[ ]+mip,a1
+[ ]+[0-9a-f]+:[ ]+34a02573[ ]+csrr[ ]+a0,0x34a
+[ ]+[0-9a-f]+:[ ]+34a59073[ ]+csrw[ ]+0x34a,a1
+[ ]+[0-9a-f]+:[ ]+34b02573[ ]+csrr[ ]+a0,0x34b
+[ ]+[0-9a-f]+:[ ]+34b59073[ ]+csrw[ ]+0x34b,a1
+[ ]+[0-9a-f]+:[ ]+30a02573[ ]+csrr[ ]+a0,0x30a
+[ ]+[0-9a-f]+:[ ]+30a59073[ ]+csrw[ ]+0x30a,a1
+[ ]+[0-9a-f]+:[ ]+31a02573[ ]+csrr[ ]+a0,0x31a
+[ ]+[0-9a-f]+:[ ]+31a59073[ ]+csrw[ ]+0x31a,a1
+[ ]+[0-9a-f]+:[ ]+74702573[ ]+csrr[ ]+a0,0x747
+[ ]+[0-9a-f]+:[ ]+74759073[ ]+csrw[ ]+0x747,a1
+[ ]+[0-9a-f]+:[ ]+75702573[ ]+csrr[ ]+a0,0x757
+[ ]+[0-9a-f]+:[ ]+75759073[ ]+csrw[ ]+0x757,a1
[ ]+[0-9a-f]+:[ ]+3a002573[ ]+csrr[ ]+a0,0x3a0
[ ]+[0-9a-f]+:[ ]+3a059073[ ]+csrw[ ]+0x3a0,a1
[ ]+[0-9a-f]+:[ ]+3a102573[ ]+csrr[ ]+a0,0x3a1
@@ -217,6 +215,30 @@ Disassembly of section .text:
[ ]+[0-9a-f]+:[ ]+3a259073[ ]+csrw[ ]+0x3a2,a1
[ ]+[0-9a-f]+:[ ]+3a302573[ ]+csrr[ ]+a0,0x3a3
[ ]+[0-9a-f]+:[ ]+3a359073[ ]+csrw[ ]+0x3a3,a1
+[ ]+[0-9a-f]+:[ ]+3a402573[ ]+csrr[ ]+a0,0x3a4
+[ ]+[0-9a-f]+:[ ]+3a459073[ ]+csrw[ ]+0x3a4,a1
+[ ]+[0-9a-f]+:[ ]+3a502573[ ]+csrr[ ]+a0,0x3a5
+[ ]+[0-9a-f]+:[ ]+3a559073[ ]+csrw[ ]+0x3a5,a1
+[ ]+[0-9a-f]+:[ ]+3a602573[ ]+csrr[ ]+a0,0x3a6
+[ ]+[0-9a-f]+:[ ]+3a659073[ ]+csrw[ ]+0x3a6,a1
+[ ]+[0-9a-f]+:[ ]+3a702573[ ]+csrr[ ]+a0,0x3a7
+[ ]+[0-9a-f]+:[ ]+3a759073[ ]+csrw[ ]+0x3a7,a1
+[ ]+[0-9a-f]+:[ ]+3a802573[ ]+csrr[ ]+a0,0x3a8
+[ ]+[0-9a-f]+:[ ]+3a859073[ ]+csrw[ ]+0x3a8,a1
+[ ]+[0-9a-f]+:[ ]+3a902573[ ]+csrr[ ]+a0,0x3a9
+[ ]+[0-9a-f]+:[ ]+3a959073[ ]+csrw[ ]+0x3a9,a1
+[ ]+[0-9a-f]+:[ ]+3aa02573[ ]+csrr[ ]+a0,0x3aa
+[ ]+[0-9a-f]+:[ ]+3aa59073[ ]+csrw[ ]+0x3aa,a1
+[ ]+[0-9a-f]+:[ ]+3ab02573[ ]+csrr[ ]+a0,0x3ab
+[ ]+[0-9a-f]+:[ ]+3ab59073[ ]+csrw[ ]+0x3ab,a1
+[ ]+[0-9a-f]+:[ ]+3ac02573[ ]+csrr[ ]+a0,0x3ac
+[ ]+[0-9a-f]+:[ ]+3ac59073[ ]+csrw[ ]+0x3ac,a1
+[ ]+[0-9a-f]+:[ ]+3ad02573[ ]+csrr[ ]+a0,0x3ad
+[ ]+[0-9a-f]+:[ ]+3ad59073[ ]+csrw[ ]+0x3ad,a1
+[ ]+[0-9a-f]+:[ ]+3ae02573[ ]+csrr[ ]+a0,0x3ae
+[ ]+[0-9a-f]+:[ ]+3ae59073[ ]+csrw[ ]+0x3ae,a1
+[ ]+[0-9a-f]+:[ ]+3af02573[ ]+csrr[ ]+a0,0x3af
+[ ]+[0-9a-f]+:[ ]+3af59073[ ]+csrw[ ]+0x3af,a1
[ ]+[0-9a-f]+:[ ]+3b002573[ ]+csrr[ ]+a0,0x3b0
[ ]+[0-9a-f]+:[ ]+3b059073[ ]+csrw[ ]+0x3b0,a1
[ ]+[0-9a-f]+:[ ]+3b102573[ ]+csrr[ ]+a0,0x3b1
@@ -249,6 +271,102 @@ Disassembly of section .text:
[ ]+[0-9a-f]+:[ ]+3be59073[ ]+csrw[ ]+0x3be,a1
[ ]+[0-9a-f]+:[ ]+3bf02573[ ]+csrr[ ]+a0,0x3bf
[ ]+[0-9a-f]+:[ ]+3bf59073[ ]+csrw[ ]+0x3bf,a1
+[ ]+[0-9a-f]+:[ ]+3c002573[ ]+csrr[ ]+a0,0x3c0
+[ ]+[0-9a-f]+:[ ]+3c059073[ ]+csrw[ ]+0x3c0,a1
+[ ]+[0-9a-f]+:[ ]+3c102573[ ]+csrr[ ]+a0,0x3c1
+[ ]+[0-9a-f]+:[ ]+3c159073[ ]+csrw[ ]+0x3c1,a1
+[ ]+[0-9a-f]+:[ ]+3c202573[ ]+csrr[ ]+a0,0x3c2
+[ ]+[0-9a-f]+:[ ]+3c259073[ ]+csrw[ ]+0x3c2,a1
+[ ]+[0-9a-f]+:[ ]+3c302573[ ]+csrr[ ]+a0,0x3c3
+[ ]+[0-9a-f]+:[ ]+3c359073[ ]+csrw[ ]+0x3c3,a1
+[ ]+[0-9a-f]+:[ ]+3c402573[ ]+csrr[ ]+a0,0x3c4
+[ ]+[0-9a-f]+:[ ]+3c459073[ ]+csrw[ ]+0x3c4,a1
+[ ]+[0-9a-f]+:[ ]+3c502573[ ]+csrr[ ]+a0,0x3c5
+[ ]+[0-9a-f]+:[ ]+3c559073[ ]+csrw[ ]+0x3c5,a1
+[ ]+[0-9a-f]+:[ ]+3c602573[ ]+csrr[ ]+a0,0x3c6
+[ ]+[0-9a-f]+:[ ]+3c659073[ ]+csrw[ ]+0x3c6,a1
+[ ]+[0-9a-f]+:[ ]+3c702573[ ]+csrr[ ]+a0,0x3c7
+[ ]+[0-9a-f]+:[ ]+3c759073[ ]+csrw[ ]+0x3c7,a1
+[ ]+[0-9a-f]+:[ ]+3c802573[ ]+csrr[ ]+a0,0x3c8
+[ ]+[0-9a-f]+:[ ]+3c859073[ ]+csrw[ ]+0x3c8,a1
+[ ]+[0-9a-f]+:[ ]+3c902573[ ]+csrr[ ]+a0,0x3c9
+[ ]+[0-9a-f]+:[ ]+3c959073[ ]+csrw[ ]+0x3c9,a1
+[ ]+[0-9a-f]+:[ ]+3ca02573[ ]+csrr[ ]+a0,0x3ca
+[ ]+[0-9a-f]+:[ ]+3ca59073[ ]+csrw[ ]+0x3ca,a1
+[ ]+[0-9a-f]+:[ ]+3cb02573[ ]+csrr[ ]+a0,0x3cb
+[ ]+[0-9a-f]+:[ ]+3cb59073[ ]+csrw[ ]+0x3cb,a1
+[ ]+[0-9a-f]+:[ ]+3cc02573[ ]+csrr[ ]+a0,0x3cc
+[ ]+[0-9a-f]+:[ ]+3cc59073[ ]+csrw[ ]+0x3cc,a1
+[ ]+[0-9a-f]+:[ ]+3cd02573[ ]+csrr[ ]+a0,0x3cd
+[ ]+[0-9a-f]+:[ ]+3cd59073[ ]+csrw[ ]+0x3cd,a1
+[ ]+[0-9a-f]+:[ ]+3ce02573[ ]+csrr[ ]+a0,0x3ce
+[ ]+[0-9a-f]+:[ ]+3ce59073[ ]+csrw[ ]+0x3ce,a1
+[ ]+[0-9a-f]+:[ ]+3cf02573[ ]+csrr[ ]+a0,0x3cf
+[ ]+[0-9a-f]+:[ ]+3cf59073[ ]+csrw[ ]+0x3cf,a1
+[ ]+[0-9a-f]+:[ ]+3d002573[ ]+csrr[ ]+a0,0x3d0
+[ ]+[0-9a-f]+:[ ]+3d059073[ ]+csrw[ ]+0x3d0,a1
+[ ]+[0-9a-f]+:[ ]+3d102573[ ]+csrr[ ]+a0,0x3d1
+[ ]+[0-9a-f]+:[ ]+3d159073[ ]+csrw[ ]+0x3d1,a1
+[ ]+[0-9a-f]+:[ ]+3d202573[ ]+csrr[ ]+a0,0x3d2
+[ ]+[0-9a-f]+:[ ]+3d259073[ ]+csrw[ ]+0x3d2,a1
+[ ]+[0-9a-f]+:[ ]+3d302573[ ]+csrr[ ]+a0,0x3d3
+[ ]+[0-9a-f]+:[ ]+3d359073[ ]+csrw[ ]+0x3d3,a1
+[ ]+[0-9a-f]+:[ ]+3d402573[ ]+csrr[ ]+a0,0x3d4
+[ ]+[0-9a-f]+:[ ]+3d459073[ ]+csrw[ ]+0x3d4,a1
+[ ]+[0-9a-f]+:[ ]+3d502573[ ]+csrr[ ]+a0,0x3d5
+[ ]+[0-9a-f]+:[ ]+3d559073[ ]+csrw[ ]+0x3d5,a1
+[ ]+[0-9a-f]+:[ ]+3d602573[ ]+csrr[ ]+a0,0x3d6
+[ ]+[0-9a-f]+:[ ]+3d659073[ ]+csrw[ ]+0x3d6,a1
+[ ]+[0-9a-f]+:[ ]+3d702573[ ]+csrr[ ]+a0,0x3d7
+[ ]+[0-9a-f]+:[ ]+3d759073[ ]+csrw[ ]+0x3d7,a1
+[ ]+[0-9a-f]+:[ ]+3d802573[ ]+csrr[ ]+a0,0x3d8
+[ ]+[0-9a-f]+:[ ]+3d859073[ ]+csrw[ ]+0x3d8,a1
+[ ]+[0-9a-f]+:[ ]+3d902573[ ]+csrr[ ]+a0,0x3d9
+[ ]+[0-9a-f]+:[ ]+3d959073[ ]+csrw[ ]+0x3d9,a1
+[ ]+[0-9a-f]+:[ ]+3da02573[ ]+csrr[ ]+a0,0x3da
+[ ]+[0-9a-f]+:[ ]+3da59073[ ]+csrw[ ]+0x3da,a1
+[ ]+[0-9a-f]+:[ ]+3db02573[ ]+csrr[ ]+a0,0x3db
+[ ]+[0-9a-f]+:[ ]+3db59073[ ]+csrw[ ]+0x3db,a1
+[ ]+[0-9a-f]+:[ ]+3dc02573[ ]+csrr[ ]+a0,0x3dc
+[ ]+[0-9a-f]+:[ ]+3dc59073[ ]+csrw[ ]+0x3dc,a1
+[ ]+[0-9a-f]+:[ ]+3dd02573[ ]+csrr[ ]+a0,0x3dd
+[ ]+[0-9a-f]+:[ ]+3dd59073[ ]+csrw[ ]+0x3dd,a1
+[ ]+[0-9a-f]+:[ ]+3de02573[ ]+csrr[ ]+a0,0x3de
+[ ]+[0-9a-f]+:[ ]+3de59073[ ]+csrw[ ]+0x3de,a1
+[ ]+[0-9a-f]+:[ ]+3df02573[ ]+csrr[ ]+a0,0x3df
+[ ]+[0-9a-f]+:[ ]+3df59073[ ]+csrw[ ]+0x3df,a1
+[ ]+[0-9a-f]+:[ ]+3e002573[ ]+csrr[ ]+a0,0x3e0
+[ ]+[0-9a-f]+:[ ]+3e059073[ ]+csrw[ ]+0x3e0,a1
+[ ]+[0-9a-f]+:[ ]+3e102573[ ]+csrr[ ]+a0,0x3e1
+[ ]+[0-9a-f]+:[ ]+3e159073[ ]+csrw[ ]+0x3e1,a1
+[ ]+[0-9a-f]+:[ ]+3e202573[ ]+csrr[ ]+a0,0x3e2
+[ ]+[0-9a-f]+:[ ]+3e259073[ ]+csrw[ ]+0x3e2,a1
+[ ]+[0-9a-f]+:[ ]+3e302573[ ]+csrr[ ]+a0,0x3e3
+[ ]+[0-9a-f]+:[ ]+3e359073[ ]+csrw[ ]+0x3e3,a1
+[ ]+[0-9a-f]+:[ ]+3e402573[ ]+csrr[ ]+a0,0x3e4
+[ ]+[0-9a-f]+:[ ]+3e459073[ ]+csrw[ ]+0x3e4,a1
+[ ]+[0-9a-f]+:[ ]+3e502573[ ]+csrr[ ]+a0,0x3e5
+[ ]+[0-9a-f]+:[ ]+3e559073[ ]+csrw[ ]+0x3e5,a1
+[ ]+[0-9a-f]+:[ ]+3e602573[ ]+csrr[ ]+a0,0x3e6
+[ ]+[0-9a-f]+:[ ]+3e659073[ ]+csrw[ ]+0x3e6,a1
+[ ]+[0-9a-f]+:[ ]+3e702573[ ]+csrr[ ]+a0,0x3e7
+[ ]+[0-9a-f]+:[ ]+3e759073[ ]+csrw[ ]+0x3e7,a1
+[ ]+[0-9a-f]+:[ ]+3e802573[ ]+csrr[ ]+a0,0x3e8
+[ ]+[0-9a-f]+:[ ]+3e859073[ ]+csrw[ ]+0x3e8,a1
+[ ]+[0-9a-f]+:[ ]+3e902573[ ]+csrr[ ]+a0,0x3e9
+[ ]+[0-9a-f]+:[ ]+3e959073[ ]+csrw[ ]+0x3e9,a1
+[ ]+[0-9a-f]+:[ ]+3ea02573[ ]+csrr[ ]+a0,0x3ea
+[ ]+[0-9a-f]+:[ ]+3ea59073[ ]+csrw[ ]+0x3ea,a1
+[ ]+[0-9a-f]+:[ ]+3eb02573[ ]+csrr[ ]+a0,0x3eb
+[ ]+[0-9a-f]+:[ ]+3eb59073[ ]+csrw[ ]+0x3eb,a1
+[ ]+[0-9a-f]+:[ ]+3ec02573[ ]+csrr[ ]+a0,0x3ec
+[ ]+[0-9a-f]+:[ ]+3ec59073[ ]+csrw[ ]+0x3ec,a1
+[ ]+[0-9a-f]+:[ ]+3ed02573[ ]+csrr[ ]+a0,0x3ed
+[ ]+[0-9a-f]+:[ ]+3ed59073[ ]+csrw[ ]+0x3ed,a1
+[ ]+[0-9a-f]+:[ ]+3ee02573[ ]+csrr[ ]+a0,0x3ee
+[ ]+[0-9a-f]+:[ ]+3ee59073[ ]+csrw[ ]+0x3ee,a1
+[ ]+[0-9a-f]+:[ ]+3ef02573[ ]+csrr[ ]+a0,0x3ef
+[ ]+[0-9a-f]+:[ ]+3ef59073[ ]+csrw[ ]+0x3ef,a1
[ ]+[0-9a-f]+:[ ]+b0002573[ ]+csrr[ ]+a0,mcycle
[ ]+[0-9a-f]+:[ ]+b0059073[ ]+csrw[ ]+mcycle,a1
[ ]+[0-9a-f]+:[ ]+b0202573[ ]+csrr[ ]+a0,minstret
@@ -461,8 +579,6 @@ Disassembly of section .text:
[ ]+[0-9a-f]+:[ ]+61a59073[ ]+csrw[ ]+0x61a,a1
[ ]+[0-9a-f]+:[ ]+68002573[ ]+csrr[ ]+a0,0x680
[ ]+[0-9a-f]+:[ ]+68059073[ ]+csrw[ ]+0x680,a1
-[ ]+[0-9a-f]+:[ ]+6a802573[ ]+csrr[ ]+a0,0x6a8
-[ ]+[0-9a-f]+:[ ]+6a859073[ ]+csrw[ ]+0x6a8,a1
[ ]+[0-9a-f]+:[ ]+60502573[ ]+csrr[ ]+a0,0x605
[ ]+[0-9a-f]+:[ ]+60559073[ ]+csrw[ ]+0x605,a1
[ ]+[0-9a-f]+:[ ]+61502573[ ]+csrr[ ]+a0,0x615
@@ -511,6 +627,26 @@ Disassembly of section .text:
[ ]+[0-9a-f]+:[ ]+32159073[ ]+csrw[ ]+mscounteren,a1
[ ]+[0-9a-f]+:[ ]+32202573[ ]+csrr[ ]+a0,mhcounteren
[ ]+[0-9a-f]+:[ ]+32259073[ ]+csrw[ ]+mhcounteren,a1
+[ ]+[0-9a-f]+:[ ]+00002573[ ]+csrr[ ]+a0,ustatus
+[ ]+[0-9a-f]+:[ ]+00059073[ ]+csrw[ ]+ustatus,a1
+[ ]+[0-9a-f]+:[ ]+00402573[ ]+csrr[ ]+a0,uie
+[ ]+[0-9a-f]+:[ ]+00459073[ ]+csrw[ ]+uie,a1
+[ ]+[0-9a-f]+:[ ]+00502573[ ]+csrr[ ]+a0,utvec
+[ ]+[0-9a-f]+:[ ]+00559073[ ]+csrw[ ]+utvec,a1
+[ ]+[0-9a-f]+:[ ]+04002573[ ]+csrr[ ]+a0,uscratch
+[ ]+[0-9a-f]+:[ ]+04059073[ ]+csrw[ ]+uscratch,a1
+[ ]+[0-9a-f]+:[ ]+04102573[ ]+csrr[ ]+a0,uepc
+[ ]+[0-9a-f]+:[ ]+04159073[ ]+csrw[ ]+uepc,a1
+[ ]+[0-9a-f]+:[ ]+04202573[ ]+csrr[ ]+a0,ucause
+[ ]+[0-9a-f]+:[ ]+04259073[ ]+csrw[ ]+ucause,a1
+[ ]+[0-9a-f]+:[ ]+04302573[ ]+csrr[ ]+a0,ubadaddr
+[ ]+[0-9a-f]+:[ ]+04359073[ ]+csrw[ ]+ubadaddr,a1
+[ ]+[0-9a-f]+:[ ]+04402573[ ]+csrr[ ]+a0,uip
+[ ]+[0-9a-f]+:[ ]+04459073[ ]+csrw[ ]+uip,a1
+[ ]+[0-9a-f]+:[ ]+10202573[ ]+csrr[ ]+a0,sedeleg
+[ ]+[0-9a-f]+:[ ]+10259073[ ]+csrw[ ]+sedeleg,a1
+[ ]+[0-9a-f]+:[ ]+10302573[ ]+csrr[ ]+a0,sideleg
+[ ]+[0-9a-f]+:[ ]+10359073[ ]+csrw[ ]+sideleg,a1
[ ]+[0-9a-f]+:[ ]+00102573[ ]+csrr[ ]+a0,fflags
[ ]+[0-9a-f]+:[ ]+00159073[ ]+csrw[ ]+fflags,a1
[ ]+[0-9a-f]+:[ ]+00202573[ ]+csrr[ ]+a0,frm
@@ -539,10 +675,18 @@ Disassembly of section .text:
[ ]+[0-9a-f]+:[ ]+7a459073[ ]+csrw[ ]+tinfo,a1
[ ]+[0-9a-f]+:[ ]+7a502573[ ]+csrr[ ]+a0,tcontrol
[ ]+[0-9a-f]+:[ ]+7a559073[ ]+csrw[ ]+tcontrol,a1
+[ ]+[0-9a-f]+:[ ]+6a802573[ ]+csrr[ ]+a0,hcontext
+[ ]+[0-9a-f]+:[ ]+6a859073[ ]+csrw[ ]+hcontext,a1
+[ ]+[0-9a-f]+:[ ]+5a802573[ ]+csrr[ ]+a0,scontext
+[ ]+[0-9a-f]+:[ ]+5a859073[ ]+csrw[ ]+scontext,a1
[ ]+[0-9a-f]+:[ ]+7a802573[ ]+csrr[ ]+a0,mcontext
[ ]+[0-9a-f]+:[ ]+7a859073[ ]+csrw[ ]+mcontext,a1
-[ ]+[0-9a-f]+:[ ]+7aa02573[ ]+csrr[ ]+a0,scontext
-[ ]+[0-9a-f]+:[ ]+7aa59073[ ]+csrw[ ]+scontext,a1
+[ ]+[0-9a-f]+:[ ]+7aa02573[ ]+csrr[ ]+a0,mscontext
+[ ]+[0-9a-f]+:[ ]+7aa59073[ ]+csrw[ ]+mscontext,a1
+[ ]+[0-9a-f]+:[ ]+7a102573[ ]+csrr[ ]+a0,tdata1
+[ ]+[0-9a-f]+:[ ]+7a159073[ ]+csrw[ ]+tdata1,a1
+[ ]+[0-9a-f]+:[ ]+7a102573[ ]+csrr[ ]+a0,tdata1
+[ ]+[0-9a-f]+:[ ]+7a159073[ ]+csrw[ ]+tdata1,a1
[ ]+[0-9a-f]+:[ ]+7a102573[ ]+csrr[ ]+a0,tdata1
[ ]+[0-9a-f]+:[ ]+7a159073[ ]+csrw[ ]+tdata1,a1
[ ]+[0-9a-f]+:[ ]+7a102573[ ]+csrr[ ]+a0,tdata1
diff --git a/gas/testsuite/gas/riscv/csr-version-1p9p1.l b/gas/testsuite/gas/riscv/csr-version-1p9p1.l
index 00d46f509de..340216e5ca7 100644
--- a/gas/testsuite/gas/riscv/csr-version-1p9p1.l
+++ b/gas/testsuite/gas/riscv/csr-version-1p9p1.l
@@ -1,6 +1,4 @@
.*Assembler messages:
-.*Warning: invalid CSR `utval' for the privileged spec `1.9.1'
-.*Warning: invalid CSR `utval' for the privileged spec `1.9.1'
.*Warning: read-only CSR is written `csrw cycle,a1'
.*Warning: read-only CSR is written `csrw time,a1'
.*Warning: read-only CSR is written `csrw instret,a1'
@@ -33,104 +31,106 @@
.*Warning: read-only CSR is written `csrw hpmcounter29,a1'
.*Warning: read-only CSR is written `csrw hpmcounter30,a1'
.*Warning: read-only CSR is written `csrw hpmcounter31,a1'
-.*Warning: invalid CSR `cycleh' for the current ISA
-.*Warning: invalid CSR `cycleh' for the current ISA
+.*Warning: invalid CSR `cycleh', needs rv32i extension
+.*Warning: invalid CSR `cycleh', needs rv32i extension
.*Warning: read-only CSR is written `csrw cycleh,a1'
-.*Warning: invalid CSR `timeh' for the current ISA
-.*Warning: invalid CSR `timeh' for the current ISA
+.*Warning: invalid CSR `timeh', needs rv32i extension
+.*Warning: invalid CSR `timeh', needs rv32i extension
.*Warning: read-only CSR is written `csrw timeh,a1'
-.*Warning: invalid CSR `instreth' for the current ISA
-.*Warning: invalid CSR `instreth' for the current ISA
+.*Warning: invalid CSR `instreth', needs rv32i extension
+.*Warning: invalid CSR `instreth', needs rv32i extension
.*Warning: read-only CSR is written `csrw instreth,a1'
-.*Warning: invalid CSR `hpmcounter3h' for the current ISA
-.*Warning: invalid CSR `hpmcounter3h' for the current ISA
+.*Warning: invalid CSR `hpmcounter3h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter3h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter3h,a1'
-.*Warning: invalid CSR `hpmcounter4h' for the current ISA
-.*Warning: invalid CSR `hpmcounter4h' for the current ISA
+.*Warning: invalid CSR `hpmcounter4h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter4h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter4h,a1'
-.*Warning: invalid CSR `hpmcounter5h' for the current ISA
-.*Warning: invalid CSR `hpmcounter5h' for the current ISA
+.*Warning: invalid CSR `hpmcounter5h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter5h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter5h,a1'
-.*Warning: invalid CSR `hpmcounter6h' for the current ISA
-.*Warning: invalid CSR `hpmcounter6h' for the current ISA
+.*Warning: invalid CSR `hpmcounter6h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter6h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter6h,a1'
-.*Warning: invalid CSR `hpmcounter7h' for the current ISA
-.*Warning: invalid CSR `hpmcounter7h' for the current ISA
+.*Warning: invalid CSR `hpmcounter7h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter7h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter7h,a1'
-.*Warning: invalid CSR `hpmcounter8h' for the current ISA
-.*Warning: invalid CSR `hpmcounter8h' for the current ISA
+.*Warning: invalid CSR `hpmcounter8h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter8h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter8h,a1'
-.*Warning: invalid CSR `hpmcounter9h' for the current ISA
-.*Warning: invalid CSR `hpmcounter9h' for the current ISA
+.*Warning: invalid CSR `hpmcounter9h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter9h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter9h,a1'
-.*Warning: invalid CSR `hpmcounter10h' for the current ISA
-.*Warning: invalid CSR `hpmcounter10h' for the current ISA
+.*Warning: invalid CSR `hpmcounter10h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter10h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter10h,a1'
-.*Warning: invalid CSR `hpmcounter11h' for the current ISA
-.*Warning: invalid CSR `hpmcounter11h' for the current ISA
+.*Warning: invalid CSR `hpmcounter11h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter11h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter11h,a1'
-.*Warning: invalid CSR `hpmcounter12h' for the current ISA
-.*Warning: invalid CSR `hpmcounter12h' for the current ISA
+.*Warning: invalid CSR `hpmcounter12h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter12h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter12h,a1'
-.*Warning: invalid CSR `hpmcounter13h' for the current ISA
-.*Warning: invalid CSR `hpmcounter13h' for the current ISA
+.*Warning: invalid CSR `hpmcounter13h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter13h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter13h,a1'
-.*Warning: invalid CSR `hpmcounter14h' for the current ISA
-.*Warning: invalid CSR `hpmcounter14h' for the current ISA
+.*Warning: invalid CSR `hpmcounter14h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter14h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter14h,a1'
-.*Warning: invalid CSR `hpmcounter15h' for the current ISA
-.*Warning: invalid CSR `hpmcounter15h' for the current ISA
+.*Warning: invalid CSR `hpmcounter15h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter15h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter15h,a1'
-.*Warning: invalid CSR `hpmcounter16h' for the current ISA
-.*Warning: invalid CSR `hpmcounter16h' for the current ISA
+.*Warning: invalid CSR `hpmcounter16h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter16h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter16h,a1'
-.*Warning: invalid CSR `hpmcounter17h' for the current ISA
-.*Warning: invalid CSR `hpmcounter17h' for the current ISA
+.*Warning: invalid CSR `hpmcounter17h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter17h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter17h,a1'
-.*Warning: invalid CSR `hpmcounter18h' for the current ISA
-.*Warning: invalid CSR `hpmcounter18h' for the current ISA
+.*Warning: invalid CSR `hpmcounter18h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter18h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter18h,a1'
-.*Warning: invalid CSR `hpmcounter19h' for the current ISA
-.*Warning: invalid CSR `hpmcounter19h' for the current ISA
+.*Warning: invalid CSR `hpmcounter19h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter19h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter19h,a1'
-.*Warning: invalid CSR `hpmcounter20h' for the current ISA
-.*Warning: invalid CSR `hpmcounter20h' for the current ISA
+.*Warning: invalid CSR `hpmcounter20h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter20h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter20h,a1'
-.*Warning: invalid CSR `hpmcounter21h' for the current ISA
-.*Warning: invalid CSR `hpmcounter21h' for the current ISA
+.*Warning: invalid CSR `hpmcounter21h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter21h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter21h,a1'
-.*Warning: invalid CSR `hpmcounter22h' for the current ISA
-.*Warning: invalid CSR `hpmcounter22h' for the current ISA
+.*Warning: invalid CSR `hpmcounter22h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter22h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter22h,a1'
-.*Warning: invalid CSR `hpmcounter23h' for the current ISA
-.*Warning: invalid CSR `hpmcounter23h' for the current ISA
+.*Warning: invalid CSR `hpmcounter23h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter23h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter23h,a1'
-.*Warning: invalid CSR `hpmcounter24h' for the current ISA
-.*Warning: invalid CSR `hpmcounter24h' for the current ISA
+.*Warning: invalid CSR `hpmcounter24h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter24h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter24h,a1'
-.*Warning: invalid CSR `hpmcounter25h' for the current ISA
-.*Warning: invalid CSR `hpmcounter25h' for the current ISA
+.*Warning: invalid CSR `hpmcounter25h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter25h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter25h,a1'
-.*Warning: invalid CSR `hpmcounter26h' for the current ISA
-.*Warning: invalid CSR `hpmcounter26h' for the current ISA
+.*Warning: invalid CSR `hpmcounter26h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter26h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter26h,a1'
-.*Warning: invalid CSR `hpmcounter27h' for the current ISA
-.*Warning: invalid CSR `hpmcounter27h' for the current ISA
+.*Warning: invalid CSR `hpmcounter27h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter27h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter27h,a1'
-.*Warning: invalid CSR `hpmcounter28h' for the current ISA
-.*Warning: invalid CSR `hpmcounter28h' for the current ISA
+.*Warning: invalid CSR `hpmcounter28h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter28h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter28h,a1'
-.*Warning: invalid CSR `hpmcounter29h' for the current ISA
-.*Warning: invalid CSR `hpmcounter29h' for the current ISA
+.*Warning: invalid CSR `hpmcounter29h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter29h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter29h,a1'
-.*Warning: invalid CSR `hpmcounter30h' for the current ISA
-.*Warning: invalid CSR `hpmcounter30h' for the current ISA
+.*Warning: invalid CSR `hpmcounter30h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter30h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter30h,a1'
-.*Warning: invalid CSR `hpmcounter31h' for the current ISA
-.*Warning: invalid CSR `hpmcounter31h' for the current ISA
+.*Warning: invalid CSR `hpmcounter31h', needs rv32i extension
+.*Warning: invalid CSR `hpmcounter31h', needs rv32i extension
.*Warning: read-only CSR is written `csrw hpmcounter31h,a1'
.*Warning: invalid CSR `scounteren' for the privileged spec `1.9.1'
.*Warning: invalid CSR `scounteren' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `senvcfg' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `senvcfg' for the privileged spec `1.9.1'
.*Warning: invalid CSR `stval' for the privileged spec `1.9.1'
.*Warning: invalid CSR `stval' for the privileged spec `1.9.1'
.*Warning: invalid CSR `satp' for the privileged spec `1.9.1'
@@ -139,22 +139,81 @@
.*Warning: read-only CSR is written `csrw marchid,a1'
.*Warning: read-only CSR is written `csrw mimpid,a1'
.*Warning: read-only CSR is written `csrw mhartid,a1'
+.*Warning: invalid CSR `mconfigptr' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `mconfigptr' for the privileged spec `1.9.1'
+.*Warning: read-only CSR is written `csrw mconfigptr,a1'
.*Warning: invalid CSR `mcounteren' for the privileged spec `1.9.1'
.*Warning: invalid CSR `mcounteren' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `mstatush', needs rv32i extension
+.*Warning: invalid CSR `mstatush' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `mstatush', needs rv32i extension
+.*Warning: invalid CSR `mstatush' for the privileged spec `1.9.1'
.*Warning: invalid CSR `mtval' for the privileged spec `1.9.1'
.*Warning: invalid CSR `mtval' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `mtinst' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `mtinst' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `mtval2' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `mtval2' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `menvcfg' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `menvcfg' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `menvcfgh', needs rv32i extension
+.*Warning: invalid CSR `menvcfgh' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `menvcfgh', needs rv32i extension
+.*Warning: invalid CSR `menvcfgh' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `mseccfg' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `mseccfg' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `mseccfgh', needs rv32i extension
+.*Warning: invalid CSR `mseccfgh' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `mseccfgh', needs rv32i extension
+.*Warning: invalid CSR `mseccfgh' for the privileged spec `1.9.1'
.*Warning: invalid CSR `pmpcfg0' for the privileged spec `1.9.1'
.*Warning: invalid CSR `pmpcfg0' for the privileged spec `1.9.1'
-.*Warning: invalid CSR `pmpcfg1' for the current ISA
+.*Warning: invalid CSR `pmpcfg1', needs rv32i extension
.*Warning: invalid CSR `pmpcfg1' for the privileged spec `1.9.1'
-.*Warning: invalid CSR `pmpcfg1' for the current ISA
+.*Warning: invalid CSR `pmpcfg1', needs rv32i extension
.*Warning: invalid CSR `pmpcfg1' for the privileged spec `1.9.1'
.*Warning: invalid CSR `pmpcfg2' for the privileged spec `1.9.1'
.*Warning: invalid CSR `pmpcfg2' for the privileged spec `1.9.1'
-.*Warning: invalid CSR `pmpcfg3' for the current ISA
+.*Warning: invalid CSR `pmpcfg3', needs rv32i extension
.*Warning: invalid CSR `pmpcfg3' for the privileged spec `1.9.1'
-.*Warning: invalid CSR `pmpcfg3' for the current ISA
+.*Warning: invalid CSR `pmpcfg3', needs rv32i extension
.*Warning: invalid CSR `pmpcfg3' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpcfg4' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpcfg4' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpcfg5', needs rv32i extension
+.*Warning: invalid CSR `pmpcfg5' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpcfg5', needs rv32i extension
+.*Warning: invalid CSR `pmpcfg5' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpcfg6' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpcfg6' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpcfg7', needs rv32i extension
+.*Warning: invalid CSR `pmpcfg7' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpcfg7', needs rv32i extension
+.*Warning: invalid CSR `pmpcfg7' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpcfg8' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpcfg8' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpcfg9', needs rv32i extension
+.*Warning: invalid CSR `pmpcfg9' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpcfg9', needs rv32i extension
+.*Warning: invalid CSR `pmpcfg9' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpcfg10' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpcfg10' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpcfg11', needs rv32i extension
+.*Warning: invalid CSR `pmpcfg11' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpcfg11', needs rv32i extension
+.*Warning: invalid CSR `pmpcfg11' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpcfg12' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpcfg12' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpcfg13', needs rv32i extension
+.*Warning: invalid CSR `pmpcfg13' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpcfg13', needs rv32i extension
+.*Warning: invalid CSR `pmpcfg13' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpcfg14' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpcfg14' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpcfg15', needs rv32i extension
+.*Warning: invalid CSR `pmpcfg15' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpcfg15', needs rv32i extension
+.*Warning: invalid CSR `pmpcfg15' for the privileged spec `1.9.1'
.*Warning: invalid CSR `pmpaddr0' for the privileged spec `1.9.1'
.*Warning: invalid CSR `pmpaddr0' for the privileged spec `1.9.1'
.*Warning: invalid CSR `pmpaddr1' for the privileged spec `1.9.1'
@@ -187,68 +246,164 @@
.*Warning: invalid CSR `pmpaddr14' for the privileged spec `1.9.1'
.*Warning: invalid CSR `pmpaddr15' for the privileged spec `1.9.1'
.*Warning: invalid CSR `pmpaddr15' for the privileged spec `1.9.1'
-.*Warning: invalid CSR `mcycleh' for the current ISA
-.*Warning: invalid CSR `mcycleh' for the current ISA
-.*Warning: invalid CSR `minstreth' for the current ISA
-.*Warning: invalid CSR `minstreth' for the current ISA
-.*Warning: invalid CSR `mhpmcounter3h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter3h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter4h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter4h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter5h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter5h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter6h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter6h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter7h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter7h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter8h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter8h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter9h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter9h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter10h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter10h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter11h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter11h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter12h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter12h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter13h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter13h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter14h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter14h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter15h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter15h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter16h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter16h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter17h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter17h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter18h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter18h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter19h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter19h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter20h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter20h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter21h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter21h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter22h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter22h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter23h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter23h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter24h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter24h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter25h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter25h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter26h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter26h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter27h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter27h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter28h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter28h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter29h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter29h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter30h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter30h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter31h' for the current ISA
-.*Warning: invalid CSR `mhpmcounter31h' for the current ISA
+.*Warning: invalid CSR `pmpaddr16' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr16' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr17' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr17' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr18' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr18' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr19' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr19' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr20' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr20' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr21' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr21' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr22' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr22' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr23' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr23' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr24' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr24' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr25' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr25' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr26' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr26' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr27' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr27' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr28' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr28' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr29' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr29' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr30' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr30' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr31' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr31' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr32' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr32' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr33' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr33' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr34' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr34' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr35' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr35' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr36' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr36' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr37' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr37' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr38' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr38' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr39' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr39' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr40' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr40' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr41' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr41' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr42' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr42' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr43' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr43' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr44' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr44' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr45' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr45' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr46' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr46' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr47' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr47' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr48' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr48' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr49' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr49' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr50' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr50' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr51' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr51' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr52' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr52' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr53' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr53' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr54' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr54' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr55' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr55' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr56' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr56' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr57' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr57' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr58' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr58' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr59' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr59' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr60' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr60' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr61' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr61' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr62' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr62' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr63' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `pmpaddr63' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `mcycleh', needs rv32i extension
+.*Warning: invalid CSR `mcycleh', needs rv32i extension
+.*Warning: invalid CSR `minstreth', needs rv32i extension
+.*Warning: invalid CSR `minstreth', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter3h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter3h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter4h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter4h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter5h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter5h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter6h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter6h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter7h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter7h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter8h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter8h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter9h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter9h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter10h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter10h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter11h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter11h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter12h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter12h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter13h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter13h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter14h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter14h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter15h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter15h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter16h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter16h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter17h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter17h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter18h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter18h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter19h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter19h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter20h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter20h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter21h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter21h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter22h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter22h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter23h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter23h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter24h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter24h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter25h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter25h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter26h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter26h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter27h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter27h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter28h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter28h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter29h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter29h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter30h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter30h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter31h', needs rv32i extension
+.*Warning: invalid CSR `mhpmcounter31h', needs rv32i extension
.*Warning: invalid CSR `mcountinhibit' for the privileged spec `1.9.1'
.*Warning: invalid CSR `mcountinhibit' for the privileged spec `1.9.1'
.*Warning: invalid CSR `hstatus' for the privileged spec `1.9.1'
@@ -276,19 +431,17 @@
.*Warning: read-only CSR is written `csrw hgeip,a1'
.*Warning: invalid CSR `henvcfg' for the privileged spec `1.9.1'
.*Warning: invalid CSR `henvcfg' for the privileged spec `1.9.1'
-.*Warning: invalid CSR `henvcfgh' for the current ISA
+.*Warning: invalid CSR `henvcfgh', needs rv32i extension
.*Warning: invalid CSR `henvcfgh' for the privileged spec `1.9.1'
-.*Warning: invalid CSR `henvcfgh' for the current ISA
+.*Warning: invalid CSR `henvcfgh', needs rv32i extension
.*Warning: invalid CSR `henvcfgh' for the privileged spec `1.9.1'
.*Warning: invalid CSR `hgatp' for the privileged spec `1.9.1'
.*Warning: invalid CSR `hgatp' for the privileged spec `1.9.1'
-.*Warning: invalid CSR `hcontext' for the privileged spec `1.9.1'
-.*Warning: invalid CSR `hcontext' for the privileged spec `1.9.1'
.*Warning: invalid CSR `htimedelta' for the privileged spec `1.9.1'
.*Warning: invalid CSR `htimedelta' for the privileged spec `1.9.1'
-.*Warning: invalid CSR `htimedeltah' for the current ISA
+.*Warning: invalid CSR `htimedeltah', needs rv32i extension
.*Warning: invalid CSR `htimedeltah' for the privileged spec `1.9.1'
-.*Warning: invalid CSR `htimedeltah' for the current ISA
+.*Warning: invalid CSR `htimedeltah', needs rv32i extension
.*Warning: invalid CSR `htimedeltah' for the privileged spec `1.9.1'
.*Warning: invalid CSR `vsstatus' for the privileged spec `1.9.1'
.*Warning: invalid CSR `vsstatus' for the privileged spec `1.9.1'
@@ -308,28 +461,30 @@
.*Warning: invalid CSR `vsip' for the privileged spec `1.9.1'
.*Warning: invalid CSR `vsatp' for the privileged spec `1.9.1'
.*Warning: invalid CSR `vsatp' for the privileged spec `1.9.1'
-.*Warning: invalid CSR `fflags' for the current ISA
-.*Warning: invalid CSR `fflags' for the current ISA
-.*Warning: invalid CSR `frm' for the current ISA
-.*Warning: invalid CSR `frm' for the current ISA
-.*Warning: invalid CSR `fcsr' for the current ISA
-.*Warning: invalid CSR `fcsr' for the current ISA
-.*Warning: invalid CSR `seed' for the current ISA
-.*Warning: invalid CSR `seed' for the current ISA
-.*Warning: invalid CSR `vstart' for the current ISA
-.*Warning: invalid CSR `vstart' for the current ISA
-.*Warning: invalid CSR `vxsat' for the current ISA
-.*Warning: invalid CSR `vxsat' for the current ISA
-.*Warning: invalid CSR `vxrm' for the current ISA
-.*Warning: invalid CSR `vxrm' for the current ISA
-.*Warning: invalid CSR `vcsr' for the current ISA
-.*Warning: invalid CSR `vcsr' for the current ISA
-.*Warning: invalid CSR `vl' for the current ISA
-.*Warning: invalid CSR `vl' for the current ISA
+.*Warning: invalid CSR `utval' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `utval' for the privileged spec `1.9.1'
+.*Warning: invalid CSR `fflags', needs `f' extension
+.*Warning: invalid CSR `fflags', needs `f' extension
+.*Warning: invalid CSR `frm', needs `f' extension
+.*Warning: invalid CSR `frm', needs `f' extension
+.*Warning: invalid CSR `fcsr', needs `f' extension
+.*Warning: invalid CSR `fcsr', needs `f' extension
+.*Warning: invalid CSR `seed', needs `zkr' extension
+.*Warning: invalid CSR `seed', needs `zkr' extension
+.*Warning: invalid CSR `vstart', needs `v' extension
+.*Warning: invalid CSR `vstart', needs `v' extension
+.*Warning: invalid CSR `vxsat', needs `v' extension
+.*Warning: invalid CSR `vxsat', needs `v' extension
+.*Warning: invalid CSR `vxrm', needs `v' extension
+.*Warning: invalid CSR `vxrm', needs `v' extension
+.*Warning: invalid CSR `vcsr', needs `v' extension
+.*Warning: invalid CSR `vcsr', needs `v' extension
+.*Warning: invalid CSR `vl', needs `v' extension
+.*Warning: invalid CSR `vl', needs `v' extension
.*Warning: read-only CSR is written `csrw vl,a1'
-.*Warning: invalid CSR `vtype' for the current ISA
-.*Warning: invalid CSR `vtype' for the current ISA
+.*Warning: invalid CSR `vtype', needs `v' extension
+.*Warning: invalid CSR `vtype', needs `v' extension
.*Warning: read-only CSR is written `csrw vtype,a1'
-.*Warning: invalid CSR `vlenb' for the current ISA
-.*Warning: invalid CSR `vlenb' for the current ISA
+.*Warning: invalid CSR `vlenb', needs `v' extension
+.*Warning: invalid CSR `vlenb', needs `v' extension
.*Warning: read-only CSR is written `csrw vlenb,a1'
diff --git a/gas/testsuite/gas/riscv/csr.s b/gas/testsuite/gas/riscv/csr.s
index 568328d70d9..0d0ec712c15 100644
--- a/gas/testsuite/gas/riscv/csr.s
+++ b/gas/testsuite/gas/riscv/csr.s
@@ -3,19 +3,7 @@
csrw \val, a1
.endm
- # Supported privileged specs from 1.9.1 to 1.11
-
- # User Trap Setup
- csr ustatus
- csr uie
- csr utvec
-
- # User Trap Handling
- csr uscratch
- csr uepc
- csr ucause
- csr utval # Added in 1.10
- csr uip
+ # Supported privileged specs, 1.9.1, 1.10, 1.11 and 1.12.
# User Counter/Timers
csr cycle
@@ -85,12 +73,13 @@
# Supervisor Trap Setup
csr sstatus
- csr sedeleg
- csr sideleg
csr sie
csr stvec
csr scounteren # Added in 1.10
+ # Supervisor Configuration
+ csr senvcfg # Added in 1.12
+
# Supervisor Trap Handling
csr sscratch
csr sepc
@@ -106,6 +95,7 @@
csr marchid
csr mimpid
csr mhartid
+ csr mconfigptr # Added in 1.12
# Machine Trap Setup
csr mstatus
@@ -115,6 +105,7 @@
csr mie
csr mtvec
csr mcounteren # Added in 1.10
+ csr mstatush # Added in 1.12
# Machine Trap Handling
csr mscratch
@@ -122,12 +113,32 @@
csr mcause
csr mtval # Added in 1.10
csr mip
+ csr mtinst # Added in 1.12
+ csr mtval2 # Added in 1.12
+
+ # Machine Configuration
+ csr menvcfg # Added in 1.12
+ csr menvcfgh # Added in 1.12
+ csr mseccfg # Added in 1.12
+ csr mseccfgh # Added in 1.12
# Machine Memory Protection
csr pmpcfg0 # Added in 1.10
csr pmpcfg1 # Added in 1.10
csr pmpcfg2 # Added in 1.10
csr pmpcfg3 # Added in 1.10
+ csr pmpcfg4 # Added in 1.12
+ csr pmpcfg5 # Added in 1.12
+ csr pmpcfg6 # Added in 1.12
+ csr pmpcfg7 # Added in 1.12
+ csr pmpcfg8 # Added in 1.12
+ csr pmpcfg9 # Added in 1.12
+ csr pmpcfg10 # Added in 1.12
+ csr pmpcfg11 # Added in 1.12
+ csr pmpcfg12 # Added in 1.12
+ csr pmpcfg13 # Added in 1.12
+ csr pmpcfg14 # Added in 1.12
+ csr pmpcfg15 # Added in 1.12
csr pmpaddr0 # Added in 1.10
csr pmpaddr1 # Added in 1.10
csr pmpaddr2 # Added in 1.10
@@ -144,6 +155,54 @@
csr pmpaddr13 # Added in 1.10
csr pmpaddr14 # Added in 1.10
csr pmpaddr15 # Added in 1.10
+ csr pmpaddr16 # Added in 1.12
+ csr pmpaddr17 # Added in 1.12
+ csr pmpaddr18 # Added in 1.12
+ csr pmpaddr19 # Added in 1.12
+ csr pmpaddr20 # Added in 1.12
+ csr pmpaddr21 # Added in 1.12
+ csr pmpaddr22 # Added in 1.12
+ csr pmpaddr23 # Added in 1.12
+ csr pmpaddr24 # Added in 1.12
+ csr pmpaddr25 # Added in 1.12
+ csr pmpaddr26 # Added in 1.12
+ csr pmpaddr27 # Added in 1.12
+ csr pmpaddr28 # Added in 1.12
+ csr pmpaddr29 # Added in 1.12
+ csr pmpaddr30 # Added in 1.12
+ csr pmpaddr31 # Added in 1.12
+ csr pmpaddr32 # Added in 1.12
+ csr pmpaddr33 # Added in 1.12
+ csr pmpaddr34 # Added in 1.12
+ csr pmpaddr35 # Added in 1.12
+ csr pmpaddr36 # Added in 1.12
+ csr pmpaddr37 # Added in 1.12
+ csr pmpaddr38 # Added in 1.12
+ csr pmpaddr39 # Added in 1.12
+ csr pmpaddr40 # Added in 1.12
+ csr pmpaddr41 # Added in 1.12
+ csr pmpaddr42 # Added in 1.12
+ csr pmpaddr43 # Added in 1.12
+ csr pmpaddr44 # Added in 1.12
+ csr pmpaddr45 # Added in 1.12
+ csr pmpaddr46 # Added in 1.12
+ csr pmpaddr47 # Added in 1.12
+ csr pmpaddr48 # Added in 1.12
+ csr pmpaddr49 # Added in 1.12
+ csr pmpaddr50 # Added in 1.12
+ csr pmpaddr51 # Added in 1.12
+ csr pmpaddr52 # Added in 1.12
+ csr pmpaddr53 # Added in 1.12
+ csr pmpaddr54 # Added in 1.12
+ csr pmpaddr55 # Added in 1.12
+ csr pmpaddr56 # Added in 1.12
+ csr pmpaddr57 # Added in 1.12
+ csr pmpaddr58 # Added in 1.12
+ csr pmpaddr59 # Added in 1.12
+ csr pmpaddr60 # Added in 1.12
+ csr pmpaddr61 # Added in 1.12
+ csr pmpaddr62 # Added in 1.12
+ csr pmpaddr63 # Added in 1.12
# Machine Counter/Timer
csr mcycle
@@ -241,7 +300,7 @@
csr mhpmevent30
csr mhpmevent31
- # Hypervisor Trap Setup (1.12)
+ # Hypervisor Trap Setup
csr hstatus
csr hedeleg
csr hideleg
@@ -249,28 +308,25 @@
csr hcounteren
csr hgeie
- # Hypervisor Trap Handling (1.12)
+ # Hypervisor Trap Handling
csr htval
csr hip
csr hvip
csr htinst
csr hgeip
- # Hypervisor Configuration (1.12)
+ # Hypervisor Configuration
csr henvcfg
csr henvcfgh
- # Hypervisor Protection and Translation (1.12)
+ # Hypervisor Protection and Translation
csr hgatp
- # Debug/Trace Registers
- csr hcontext
-
- # Hypervisor Counter/Timer Virtualization Registers (1.12)
+ # Hypervisor Counter/Timer Virtualization Registers
csr htimedelta
csr htimedeltah
- # Virtual Supervisor Registers (1.12)
+ # Virtual Supervisor Registers
csr vsstatus
csr vsie
csr vstvec
@@ -288,14 +344,24 @@
csr sptbr # 0x180 in 1.9.1, but the value is satp since 1.10
csr mbadaddr # 0x343 in 1.9.1, but the value is mtval since 1.10
csr mucounteren # 0x320 in 1.9.1, dropped in 1.10, but the value is mcountinhibit since 1.11
- csr mbase # 0x380, dropped in 1.10
- csr mbound # 0x381, dropped in 1.10
- csr mibase # 0x382, dropped in 1.10
- csr mibound # 0x383, dropped in 1.10
- csr mdbase # 0x384, dropped in 1.10
- csr mdbound # 0x385, dropped in 1.10
- csr mscounteren # 0x321, dropped in 1.10
- csr mhcounteren # 0x322, dropped in 1.10
+ csr mbase # 0x380 in 1.9.1, dropped in 1.10
+ csr mbound # 0x381 in 1.9.1, dropped in 1.10
+ csr mibase # 0x382 in 1.9.1, dropped in 1.10
+ csr mibound # 0x383 in 1.9.1, dropped in 1.10
+ csr mdbase # 0x384 in 1.9.1, dropped in 1.10
+ csr mdbound # 0x385 in 1.9.1, dropped in 1.10
+ csr mscounteren # 0x321 in 1.9.1, dropped in 1.10
+ csr mhcounteren # 0x322 in 1.9.1, dropped in 1.10
+ csr ustatus # 0x0 in 1.9.1, dropped in 1.12
+ csr uie # 0x4 in 1.9.1, dropped in 1.12
+ csr utvec # 0x5 in 1.9.1, dropped in 1.12
+ csr uscratch # 0x40 in 1.9.1, dropped in 1.12
+ csr uepc # 0x41 in 1.9.1, dropped in 1.12
+ csr ucause # 0x42 in 1.9.1, dropped in 1.12
+ csr utval # 0x43 in 1.10, dropped in 1.12
+ csr uip # 0x44 in 1.9.1, dropped in 1.12
+ csr sedeleg # 0x102 in 1.9.1, dropped in 1.12
+ csr sideleg # 0x103 in 1.9.1, dropped in 1.12
# Unprivileged CSR which are not controlled by privilege spec
@@ -318,12 +384,16 @@
csr tdata3
csr tinfo
csr tcontrol
- csr mcontext
+ csr hcontext
csr scontext
+ csr mcontext
+ csr mscontext
csr mcontrol # 0x7a1, alias to tdata1
+ csr mcontrol6 # 0x7a1, alias to tdata1
csr icount # 0x7a1, alias to tdata1
csr itrigger # 0x7a1, alias to tdata1
csr etrigger # 0x7a1, alias to tdata1
+ csr tmexttrigger # 0x7a1, alias to tdata1
csr textra32 # 0x7a3, alias to tdata3
csr textra64 # 0x7a3, alias to tdata3
diff --git a/gas/testsuite/gas/riscv/insn-dwarf.d b/gas/testsuite/gas/riscv/insn-dwarf.d
new file mode 100644
index 00000000000..72d54d47acf
--- /dev/null
+++ b/gas/testsuite/gas/riscv/insn-dwarf.d
@@ -0,0 +1,71 @@
+#as: -march=rv64ifc -gdwarf-2
+#name: Dwarf line number info for .insn
+#objdump: -WL -w
+#source: insn.s
+
+.*:[ ]+file format .*
+
+Contents of the .debug_line section:
+
+CU: .*/insn.s:
+File name +Line number +Starting address.*
+insn.s +2 +0.*
+insn.s +3 +0x4.*
+insn.s +4 +0x8.*
+insn.s +5 +0xc.*
+insn.s +6 +0x10.*
+insn.s +7 +0x14.*
+insn.s +8 +0x18.*
+insn.s +9 +0x1c.*
+insn.s +10 +0x20.*
+insn.s +11 +0x24.*
+insn.s +13 +0x28.*
+insn.s +14 +0x2a.*
+insn.s +15 +0x2c.*
+insn.s +16 +0x2e.*
+insn.s +17 +0x30.*
+insn.s +18 +0x32.*
+insn.s +19 +0x34.*
+insn.s +20 +0x36.*
+insn.s +22 +0x38.*
+insn.s +23 +0x3c.*
+insn.s +24 +0x40.*
+insn.s +25 +0x44.*
+insn.s +26 +0x48.*
+insn.s +27 +0x4c.*
+insn.s +28 +0x50.*
+insn.s +29 +0x54.*
+insn.s +30 +0x58.*
+insn.s +31 +0x5c.*
+insn.s +33 +0x60.*
+insn.s +34 +0x62.*
+insn.s +35 +0x64.*
+insn.s +36 +0x66.*
+insn.s +37 +0x68.*
+insn.s +38 +0x6a.*
+insn.s +39 +0x6c.*
+insn.s +40 +0x6e.*
+insn.s +41 +0x70.*
+insn.s +43 +0x72.*
+insn.s +44 +0x76.*
+insn.s +45 +0x7a.*
+insn.s +46 +0x7e.*
+insn.s +47 +0x82.*
+insn.s +48 +0x86.*
+insn.s +49 +0x8a.*
+insn.s +50 +0x8e.*
+insn.s +51 +0x92.*
+insn.s +52 +0x96.*
+insn.s +53 +0x9a.*
+insn.s +54 +0x9e.*
+insn.s +55 +0xa2.*
+insn.s +57 +0xa6.*
+insn.s +58 +0xa8.*
+insn.s +59 +0xac.*
+insn.s +60 +0xb2.*
+insn.s +61 +0xba.*
+insn.s +62 +0xbc.*
+insn.s +63 +0xc0.*
+insn.s +64 +0xc6.*
+insn.s +- +0xce
+#pass
diff --git a/gas/testsuite/gas/riscv/insn.d b/gas/testsuite/gas/riscv/insn.d
index e55030ea460..b5780f42861 100644
--- a/gas/testsuite/gas/riscv/insn.d
+++ b/gas/testsuite/gas/riscv/insn.d
@@ -71,5 +71,9 @@ Disassembly of section .text:
[^:]+:[ ]+00c58533[ ]+add[ ]+a0,a1,a2
[^:]+:[ ]+0001[ ]+nop
[^:]+:[ ]+00000013[ ]+nop
+[^:]+:[ ]+001f 0000 0000[ ].*
+[^:]+:[ ]+0000003f 00000000[ ].*
[^:]+:[ ]+0001[ ]+nop
[^:]+:[ ]+00000013[ ]+nop
+[^:]+:[ ]+001f 0000 0000[ ].*
+[^:]+:[ ]+0000003f 00000000[ ].*
diff --git a/gas/testsuite/gas/riscv/insn.s b/gas/testsuite/gas/riscv/insn.s
index e47f529040d..ec41acb30bd 100644
--- a/gas/testsuite/gas/riscv/insn.s
+++ b/gas/testsuite/gas/riscv/insn.s
@@ -56,5 +56,9 @@ target:
.insn 0x0001
.insn 0x00000013
+ .insn 0x0000001f
+ .insn 0x0000003f
.insn 0x2, 0x0001
.insn 0x4, 0x00000013
+ .insn 6, 0x0000001f
+ .insn 8, 0x0000003f
diff --git a/gas/testsuite/gas/riscv/march-imply-i2p1-01.l b/gas/testsuite/gas/riscv/march-imply-i2p1-01.l
index b54d4ae9acd..7fbee14fe83 100644
--- a/gas/testsuite/gas/riscv/march-imply-i2p1-01.l
+++ b/gas/testsuite/gas/riscv/march-imply-i2p1-01.l
@@ -1,21 +1,21 @@
.*Assembler messages:
-.*Error: unrecognized opcode `csrr t0,ustatus'
-.*Error: unrecognized opcode `csrwi ustatus,0x0'
-.*Error: unrecognized opcode `csrsi ustatus,0x0'
-.*Error: unrecognized opcode `csrci ustatus,0x0'
-.*Error: unrecognized opcode `csrw ustatus,t0'
-.*Error: unrecognized opcode `csrw ustatus,0x0'
-.*Error: unrecognized opcode `csrs ustatus,t0'
-.*Error: unrecognized opcode `csrs ustatus,0x0'
-.*Error: unrecognized opcode `csrc ustatus,t0'
-.*Error: unrecognized opcode `csrc ustatus,0x0'
-.*Error: unrecognized opcode `csrrwi t0,ustatus,0x0'
-.*Error: unrecognized opcode `csrrsi t0,ustatus,0x0'
-.*Error: unrecognized opcode `csrrci t0,ustatus,0x0'
-.*Error: unrecognized opcode `csrrw t0,ustatus,t0'
-.*Error: unrecognized opcode `csrrw t0,ustatus,0x0'
-.*Error: unrecognized opcode `csrrs t0,ustatus,t0'
-.*Error: unrecognized opcode `csrrs t0,ustatus,0x0'
-.*Error: unrecognized opcode `csrrc t0,ustatus,t0'
-.*Error: unrecognized opcode `csrrc t0,ustatus,0x0'
-.*Error: unrecognized opcode `fence.i'
+.*Error: unrecognized opcode `csrr t0,ustatus', extension `zicsr' required
+.*Error: unrecognized opcode `csrwi ustatus,0x0', extension `zicsr' required
+.*Error: unrecognized opcode `csrsi ustatus,0x0', extension `zicsr' required
+.*Error: unrecognized opcode `csrci ustatus,0x0', extension `zicsr' required
+.*Error: unrecognized opcode `csrw ustatus,t0', extension `zicsr' required
+.*Error: unrecognized opcode `csrw ustatus,0x0', extension `zicsr' required
+.*Error: unrecognized opcode `csrs ustatus,t0', extension `zicsr' required
+.*Error: unrecognized opcode `csrs ustatus,0x0', extension `zicsr' required
+.*Error: unrecognized opcode `csrc ustatus,t0', extension `zicsr' required
+.*Error: unrecognized opcode `csrc ustatus,0x0', extension `zicsr' required
+.*Error: unrecognized opcode `csrrwi t0,ustatus,0x0', extension `zicsr' required
+.*Error: unrecognized opcode `csrrsi t0,ustatus,0x0', extension `zicsr' required
+.*Error: unrecognized opcode `csrrci t0,ustatus,0x0', extension `zicsr' required
+.*Error: unrecognized opcode `csrrw t0,ustatus,t0', extension `zicsr' required
+.*Error: unrecognized opcode `csrrw t0,ustatus,0x0', extension `zicsr' required
+.*Error: unrecognized opcode `csrrs t0,ustatus,t0', extension `zicsr' required
+.*Error: unrecognized opcode `csrrs t0,ustatus,0x0', extension `zicsr' required
+.*Error: unrecognized opcode `csrrc t0,ustatus,t0', extension `zicsr' required
+.*Error: unrecognized opcode `csrrc t0,ustatus,0x0', extension `zicsr' required
+.*Error: unrecognized opcode `fence.i', extension `zifencei' required
diff --git a/gas/testsuite/gas/riscv/zicbom-fail.d b/gas/testsuite/gas/riscv/zicbom-fail.d
new file mode 100644
index 00000000000..a6a61dfd37e
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zicbom-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv64g_zicbom
+#source: zicbom-fail.s
+#error_output: zicbom-fail.l
diff --git a/gas/testsuite/gas/riscv/zicbom-fail.l b/gas/testsuite/gas/riscv/zicbom-fail.l
new file mode 100644
index 00000000000..2cf76356d2b
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zicbom-fail.l
@@ -0,0 +1,7 @@
+.*: Assembler messages:
+.*: Error: illegal operands `cbo.clean 1\(x1\)'
+.*: Error: illegal operands `cbo.clean x30'
+.*: Error: illegal operands `cbo.flush \(0\+1\)\(x1\)'
+.*: Error: illegal operands `cbo.flush x30'
+.*: Error: illegal operands `cbo.inval 3\*2\+5\(x1\)'
+.*: Error: illegal operands `cbo.inval x30'
diff --git a/gas/testsuite/gas/riscv/zicbom-fail.s b/gas/testsuite/gas/riscv/zicbom-fail.s
new file mode 100644
index 00000000000..5fa22749b3a
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zicbom-fail.s
@@ -0,0 +1,7 @@
+target:
+ cbo.clean 1(x1)
+ cbo.clean x30
+ cbo.flush (0+1)(x1)
+ cbo.flush x30
+ cbo.inval 3*2+5(x1)
+ cbo.inval x30
diff --git a/gas/testsuite/gas/riscv/zicbom.d b/gas/testsuite/gas/riscv/zicbom.d
new file mode 100644
index 00000000000..edd8a7079f4
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zicbom.d
@@ -0,0 +1,15 @@
+#as: -march=rv64g_zicbom
+#source: zicbom.s
+#objdump: -dr
+
+.*:[ ]+file format .*
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ ]+[0-9a-f]+:[ ]+0010a00f[ ]+cbo\.clean[ ]+\(ra\)
+[ ]+[0-9a-f]+:[ ]+001f200f[ ]+cbo\.clean[ ]+\(t5\)
+[ ]+[0-9a-f]+:[ ]+0020a00f[ ]+cbo\.flush[ ]+\(ra\)
+[ ]+[0-9a-f]+:[ ]+002f200f[ ]+cbo\.flush[ ]+\(t5\)
+[ ]+[0-9a-f]+:[ ]+0000a00f[ ]+cbo\.inval[ ]+\(ra\)
+[ ]+[0-9a-f]+:[ ]+000f200f[ ]+cbo\.inval[ ]+\(t5\)
diff --git a/gas/testsuite/gas/riscv/zicbom.s b/gas/testsuite/gas/riscv/zicbom.s
new file mode 100644
index 00000000000..6a306b931ed
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zicbom.s
@@ -0,0 +1,7 @@
+target:
+ cbo.clean (x1)
+ cbo.clean 0(x30)
+ cbo.flush (x1)
+ cbo.flush (2-2)(x30)
+ cbo.inval (x1)
+ cbo.inval 3*4-12(x30)
diff --git a/gas/testsuite/gas/riscv/zicbop-fail.d b/gas/testsuite/gas/riscv/zicbop-fail.d
new file mode 100644
index 00000000000..d734c7d4d15
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zicbop-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv64g_zicbop
+#source: zicbop-fail.s
+#error_output: zicbop-fail.l
diff --git a/gas/testsuite/gas/riscv/zicbop-fail.l b/gas/testsuite/gas/riscv/zicbop-fail.l
new file mode 100644
index 00000000000..4b5d5fc84fa
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zicbop-fail.l
@@ -0,0 +1,4 @@
+.*: Assembler messages:
+.*: Error: improper prefetch offset \(2048\)
+.*: Error: improper prefetch offset \(-2080\)
+.*: Error: improper prefetch offset \(255\)
diff --git a/gas/testsuite/gas/riscv/zicbop-fail.s b/gas/testsuite/gas/riscv/zicbop-fail.s
new file mode 100644
index 00000000000..0353c5ff80a
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zicbop-fail.s
@@ -0,0 +1,4 @@
+target:
+ prefetch.i 2048(x1)
+ prefetch.r -0x820(x16)
+ prefetch.w +0xff(x31)
diff --git a/gas/testsuite/gas/riscv/zicbop.d b/gas/testsuite/gas/riscv/zicbop.d
new file mode 100644
index 00000000000..056a8a501ff
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zicbop.d
@@ -0,0 +1,12 @@
+#as: -march=rv64g_zicbop
+#source: zicbop.s
+#objdump: -dr
+
+.*:[ ]+file format .*
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ ]+[0-9a-f]+:[ ]+0200e013[ ]+prefetch\.i[ ]+32\(ra\)
+[ ]+[0-9a-f]+:[ ]+80186013[ ]+prefetch\.r[ ]+-2048\(a6\)
+[ ]+[0-9a-f]+:[ ]+7e3fe013[ ]+prefetch\.w[ ]+2016\(t6\)
diff --git a/gas/testsuite/gas/riscv/zicbop.s b/gas/testsuite/gas/riscv/zicbop.s
new file mode 100644
index 00000000000..ffe2014be6f
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zicbop.s
@@ -0,0 +1,4 @@
+target:
+ prefetch.i 0x20(x1)
+ prefetch.r -2048(x16)
+ prefetch.w +0x7e0(x31)
diff --git a/gas/testsuite/gas/riscv/zicboz-fail.d b/gas/testsuite/gas/riscv/zicboz-fail.d
new file mode 100644
index 00000000000..74cfd2fc911
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zicboz-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv64g_zicboz
+#source: zicboz-fail.s
+#error_output: zicboz-fail.l
diff --git a/gas/testsuite/gas/riscv/zicboz-fail.l b/gas/testsuite/gas/riscv/zicboz-fail.l
new file mode 100644
index 00000000000..ad8dcf54e00
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zicboz-fail.l
@@ -0,0 +1,5 @@
+.*: Assembler messages:
+.*: Error: illegal operands `cbo.zero x1'
+.*: Error: illegal operands `cbo.zero 1\(x30\)'
+.*: Error: illegal operands `cbo.zero 3\+5\(x1\)'
+.*: Error: illegal operands `cbo.zero \(2\*4\)\(x30\)'
diff --git a/gas/testsuite/gas/riscv/zicboz-fail.s b/gas/testsuite/gas/riscv/zicboz-fail.s
new file mode 100644
index 00000000000..0856ea85ab1
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zicboz-fail.s
@@ -0,0 +1,5 @@
+target:
+ cbo.zero x1
+ cbo.zero 1(x30)
+ cbo.zero 3+5(x1)
+ cbo.zero (2*4)(x30)
diff --git a/gas/testsuite/gas/riscv/zicboz.d b/gas/testsuite/gas/riscv/zicboz.d
new file mode 100644
index 00000000000..e04ab3491db
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zicboz.d
@@ -0,0 +1,13 @@
+#as: -march=rv64g_zicboz
+#source: zicboz.s
+#objdump: -dr
+
+.*:[ ]+file format .*
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ ]+[0-9a-f]+:[ ]+0040a00f[ ]+cbo\.zero[ ]+\(ra\)
+[ ]+[0-9a-f]+:[ ]+004f200f[ ]+cbo\.zero[ ]+\(t5\)
+[ ]+[0-9a-f]+:[ ]+0040a00f[ ]+cbo\.zero[ ]+\(ra\)
+[ ]+[0-9a-f]+:[ ]+004f200f[ ]+cbo\.zero[ ]+\(t5\)
diff --git a/gas/testsuite/gas/riscv/zicboz.s b/gas/testsuite/gas/riscv/zicboz.s
new file mode 100644
index 00000000000..3830362c376
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zicboz.s
@@ -0,0 +1,5 @@
+target:
+ cbo.zero 0(x1)
+ cbo.zero (x30)
+ cbo.zero 2-2(x1)
+ cbo.zero (3*5-15)(x30)
diff --git a/gas/testsuite/gas/riscv/zqinx.d b/gas/testsuite/gas/riscv/zqinx.d
index 5c2202d21b6..c1a09201206 100644
--- a/gas/testsuite/gas/riscv/zqinx.d
+++ b/gas/testsuite/gas/riscv/zqinx.d
@@ -28,8 +28,8 @@ Disassembly of section .text:
[ ]+[0-9a-f]+:[ ]+46158553[ ]+fcvt.q.d[ ]+a0,a1
[ ]+[0-9a-f]+:[ ]+d6058553[ ]+fcvt.q.w[ ]+a0,a1
[ ]+[0-9a-f]+:[ ]+d6158553[ ]+fcvt.q.wu[ ]+a0,a1
-[ ]+[0-9a-f]+:[ ]+d625f553[ ]+fcvt.q.l[ ]+a0,a1
-[ ]+[0-9a-f]+:[ ]+d635f553[ ]+fcvt.q.lu[ ]+a0,a1
+[ ]+[0-9a-f]+:[ ]+d6258553[ ]+fcvt.q.l[ ]+a0,a1
+[ ]+[0-9a-f]+:[ ]+d6358553[ ]+fcvt.q.lu[ ]+a0,a1
[ ]+[0-9a-f]+:[ ]+26c58553[ ]+fsgnj.q[ ]+a0,a1,a2
[ ]+[0-9a-f]+:[ ]+26c59553[ ]+fsgnjn.q[ ]+a0,a1,a2
[ ]+[0-9a-f]+:[ ]+26c5a553[ ]+fsgnjx.q[ ]+a0,a1,a2
diff --git a/gas/testsuite/gas/z80/pr28791.d b/gas/testsuite/gas/z80/pr28791.d
new file mode 100644
index 00000000000..4351f1a753c
--- /dev/null
+++ b/gas/testsuite/gas/z80/pr28791.d
@@ -0,0 +1,16 @@
+#as: -march=ez80
+#objdump: -d
+#name: PR 28791: Do not complain about overlarge bit manipulated constants
+
+.*:.*
+
+Disassembly of section .text:
+
+0+ <.text>:
+\s+0:\s+1e 19\s+ld e,0x19
+\s+2:\s+1e 1a\s+ld e,0x1a
+\s+4:\s+1e e6\s+ld e,0xe6
+\s+6:\s+1e ff\s+ld e,0xff
+\s+8:\s+1e 00\s+ld e,0x00
+\s+a:\s+1e f9\s+ld e,0xf9
+\s+c:\s+1e cb\s+ld e,0xcb
diff --git a/gas/testsuite/gas/z80/pr28791.s b/gas/testsuite/gas/z80/pr28791.s
new file mode 100644
index 00000000000..bcfdbe5012a
--- /dev/null
+++ b/gas/testsuite/gas/z80/pr28791.s
@@ -0,0 +1,7 @@
+ld e, ~0xe6
+ld e, -0xe6
+ld e, 0xe6
+ld e, ~0
+ld e, !0xe6
+ld e, -7
+ld e, ~0x1234
diff --git a/gdb/MAINTAINERS b/gdb/MAINTAINERS
index 22107759967..225c4b24722 100644
--- a/gdb/MAINTAINERS
+++ b/gdb/MAINTAINERS
@@ -239,7 +239,7 @@ the native maintainer when resolving ABI issues.
aarch64 --target=aarch64-elf ,-Werror
Alan Hayward alan.hayward@arm.com
- Luis Machado luis.machado@linaro.org
+ Luis Machado luis.machado@arm.com
alpha --target=alpha-elf ,-Werror
@@ -248,7 +248,7 @@ the native maintainer when resolving ABI issues.
arm --target=arm-elf ,-Werror
Alan Hayward alan.hayward@arm.com
- Luis Machado luis.machado@linaro.org
+ Luis Machado luis.machado@arm.com
avr --target=avr ,-Werror
@@ -269,6 +269,10 @@ the native maintainer when resolving ABI issues.
lm32 --target=lm32-elf ,-Werror
+ loongarch --target=loongarch32-elf ,-Werror
+ --target=loongarch64-elf ,-Werror
+ Tiezhu Yang yangtiezhu@loongson.cn
+
m32c --target=m32c-elf ,-Werror
m32r --target=m32r-elf ,-Werror
@@ -554,6 +558,7 @@ Janis Johnson janisjo@codesourcery.com
Jeff Johnston jjohnstn@redhat.com
Ruslan Kabatsayev b7.10110111@gmail.com
Geoff Keating geoffk@redhat.com
+Nils-Christian Kempke nils-christian.kempke@intel.com
Mark Kettenis kettenis@gnu.org
Marc Khouzam marc.khouzam@ericsson.com
Toshihito Kikuchi k.toshihito@yahoo.de
@@ -565,6 +570,7 @@ Jan Kratochvil jan.kratochvil@redhat.com
Maxim Kuvyrkov maxim@kugelworks.com
Pierre Langlois pierre.langlois@arm.com
Jonathan Larmour jifl@ecoscentric.com
+Bruno Larsen blarsen@redhat.com
Jeff Law law@redhat.com
Justin Lebar justin.lebar@gmail.com
David Lecomber david@streamline-computing.com
@@ -578,7 +584,7 @@ Carl Love cel@us.ibm.com
H.J. Lu hjl.tools@gmail.com
Michal Ludvig mludvig@suse.cz
Edjunior B. Machado emachado@linux.vnet.ibm.com
-Luis Machado luis.machado@linaro.org
+Luis Machado luis.machado@arm.com
Jose E. Marchesi jose.marchesi@oracle.com
Glen McCready gkm@redhat.com
Greg McGary greg@mcgary.org
diff --git a/gdb/Makefile.in b/gdb/Makefile.in
index d0db5fbdee1..418094775a5 100644
--- a/gdb/Makefile.in
+++ b/gdb/Makefile.in
@@ -409,6 +409,7 @@ SUBDIR_PYTHON_SRCS = \
python/py-lazy-string.c \
python/py-linetable.c \
python/py-membuf.c \
+ python/py-micmd.c \
python/py-newobjfileevent.c \
python/py-objfile.c \
python/py-param.c \
@@ -464,6 +465,7 @@ SELFTESTS_SRCS = \
unittests/optional-selftests.c \
unittests/parallel-for-selftests.c \
unittests/parse-connection-spec-selftests.c \
+ unittests/path-join-selftests.c \
unittests/ptid-selftests.c \
unittests/main-thread-selftests.c \
unittests/mkdir-recursive-selftests.c \
@@ -478,6 +480,7 @@ SELFTESTS_SRCS = \
unittests/tracepoint-selftests.c \
unittests/tui-selftests.c \
unittests/ui-file-selftests.c \
+ unittests/unique_xmalloc_ptr_char.c \
unittests/unpack-selftests.c \
unittests/utils-selftests.c \
unittests/vec-utils-selftests.c \
@@ -485,7 +488,7 @@ SELFTESTS_SRCS = \
SELFTESTS_OBS = $(patsubst %.c,%.o,$(SELFTESTS_SRCS))
-SUBDIR_TARGET_SRCS = target/waitstatus.c
+SUBDIR_TARGET_SRCS = target/target.c target/waitstatus.c
SUBDIR_TARGET_OBS = $(patsubst %.c,%.o,$(SUBDIR_TARGET_SRCS))
@@ -745,6 +748,7 @@ ALL_TARGET_OBS = \
arch/arm-get-next-pcs.o \
arch/arm-linux.o \
arch/i386.o \
+ arch/loongarch.o \
arch/ppc-linux-common.o \
arm-bsd-tdep.o \
arm-fbsd-tdep.o \
@@ -794,6 +798,8 @@ ALL_TARGET_OBS = \
linux-record.o \
linux-tdep.o \
lm32-tdep.o \
+ loongarch-linux-tdep.o \
+ loongarch-tdep.o \
m32c-tdep.o \
m32r-linux-tdep.o \
m32r-tdep.o \
@@ -832,7 +838,6 @@ ALL_TARGET_OBS = \
s12z-tdep.o \
s390-linux-tdep.o \
s390-tdep.o \
- score-tdep.o \
sh-linux-tdep.o \
sh-netbsd-tdep.o \
sh-tdep.o \
@@ -999,6 +1004,9 @@ COMMON_SFILES = \
bfd-target.c \
block.c \
blockframe.c \
+ break-catch-exec.c \
+ break-catch-fork.c \
+ break-catch-load.c \
break-catch-sig.c \
break-catch-syscall.c \
break-catch-throw.c \
@@ -1038,8 +1046,10 @@ COMMON_SFILES = \
displaced-stepping.c \
dummy-frame.c \
dwarf2/abbrev.c \
+ dwarf2/abbrev-cache.c \
dwarf2/attribute.c \
dwarf2/comp-unit-head.c \
+ dwarf2/cooked-index.c \
dwarf2/cu.c \
dwarf2/dwz.c \
dwarf2/expr.c \
@@ -1074,8 +1084,6 @@ COMMON_SFILES = \
gcore.c \
gdb-demangle.c \
gdb_bfd.c \
- gdb_obstack.c \
- gdb_regex.c \
gdbtypes.c \
gmp-utils.c \
gnu-v2-abi.c \
@@ -1156,6 +1164,7 @@ COMMON_SFILES = \
solib-target.c \
source.c \
source-cache.c \
+ split-name.c \
stabsread.c \
stack.c \
std-regs.c \
@@ -1285,8 +1294,10 @@ HFILES_NO_SRCDIR = \
defs.h \
dicos-tdep.h \
dictionary.h \
+ disasm-flags.h \
disasm.h \
dummy-frame.h \
+ dwarf2/cooked-index.h \
dwarf2/cu.h \
dwarf2/frame-tailcall.h \
dwarf2/frame.h \
@@ -1316,10 +1327,7 @@ HFILES_NO_SRCDIR = \
gdb_bfd.h \
gdb_curses.h \
gdb_expat.h \
- gdb_obstack.h \
gdb_proc_service.h \
- gdb_regex.h \
- gdb_select.h \
gdb-stabs.h \
gdb_vfork.h \
gdb_wchar.h \
@@ -1359,6 +1367,7 @@ HFILES_NO_SRCDIR = \
linux-record.h \
linux-tdep.h \
location.h \
+ loongarch-tdep.h \
m2-lang.h \
m32r-tdep.h \
m68k-tdep.h \
@@ -1422,7 +1431,6 @@ HFILES_NO_SRCDIR = \
run-on-main-thread.h \
s390-linux-tdep.h \
s390-tdep.h \
- score-tdep.h \
selftest-arch.h \
sentinel-frame.h \
ser-base.h \
@@ -1446,6 +1454,7 @@ HFILES_NO_SRCDIR = \
sparc-ravenscar-thread.h \
sparc-tdep.h \
sparc64-tdep.h \
+ split-name.h \
stabsread.h \
stack.h \
stap-probe.h \
@@ -1493,6 +1502,7 @@ HFILES_NO_SRCDIR = \
arch/arc.h \
arch/arm.h \
arch/i386.h \
+ arch/loongarch.h \
arch/ppc-linux-common.h \
arch/ppc-linux-tdesc.h \
arch/riscv.h \
@@ -1587,7 +1597,235 @@ HFILES_WITH_SRCDIR = \
DEPFILES = $(TARGET_OBS) $(SER_HARDWIRE) $(NATDEPFILES) $(SIM_OBS)
-SOURCES = $(SFILES) $(ALLDEPFILES) $(YYFILES) $(CONFIG_SRCS)
+ALLDEPFILES = \
+ arch/aarch32.c \
+ arch/aarch64.c \
+ arch/aarch64-insn.c \
+ arch/aarch64-mte-linux.c \
+ arch/amd64.c \
+ arch/arc.c \
+ arch/arm.c \
+ arch/arm-get-next-pcs.c \
+ arch/arm-linux.c \
+ arch/i386.c \
+ arch/loongarch.c \
+ arch/ppc-linux-common.c \
+ arch/riscv.c \
+ arch/tic6x.c \
+ aarch32-tdep.c \
+ aarch64-fbsd-nat.c \
+ aarch64-fbsd-tdep.c \
+ aarch64-linux-nat.c \
+ aarch64-linux-tdep.c \
+ aarch64-newlib-tdep.c \
+ aarch64-ravenscar-thread.c \
+ aarch64-tdep.c \
+ aix-thread.c \
+ alpha-bsd-nat.c \
+ alpha-bsd-tdep.c \
+ alpha-linux-nat.c \
+ alpha-linux-tdep.c \
+ alpha-mdebug-tdep.c \
+ alpha-netbsd-tdep.c \
+ alpha-obsd-tdep.c \
+ alpha-tdep.c \
+ amd64-bsd-nat.c \
+ amd64-darwin-tdep.c \
+ amd64-dicos-tdep.c \
+ amd64-fbsd-nat.c \
+ amd64-fbsd-tdep.c \
+ amd64-linux-nat.c \
+ amd64-linux-tdep.c \
+ amd64-nat.c \
+ amd64-netbsd-nat.c \
+ amd64-netbsd-tdep.c \
+ amd64-obsd-nat.c \
+ amd64-obsd-tdep.c \
+ amd64-ravenscar-thread.c \
+ amd64-sol2-tdep.c \
+ amd64-tdep.c \
+ arc-linux-nat.c \
+ arc-tdep.c \
+ arm-bsd-tdep.c \
+ arm-fbsd-nat.c \
+ arm-fbsd-tdep.c \
+ arm-linux-nat.c \
+ arm-linux-tdep.c \
+ arm-netbsd-nat.c \
+ arm-netbsd-tdep.c \
+ arm-none-tdep.c \
+ arm-obsd-tdep.c \
+ arm-tdep.c \
+ avr-tdep.c \
+ bfin-linux-tdep.c \
+ bfin-tdep.c \
+ bpf-tdep.c \
+ bsd-kvm.c \
+ bsd-uthread.c \
+ csky-linux-tdep.c \
+ csky-tdep.c \
+ darwin-nat.c \
+ dicos-tdep.c \
+ fbsd-nat.c \
+ fbsd-tdep.c \
+ fork-child.c \
+ ft32-tdep.c \
+ glibc-tdep.c \
+ go32-nat.c \
+ h8300-tdep.c \
+ hppa-bsd-tdep.c \
+ hppa-linux-nat.c \
+ hppa-linux-tdep.c \
+ hppa-netbsd-nat.c \
+ hppa-netbsd-tdep.c \
+ hppa-obsd-nat.c \
+ hppa-obsd-tdep.c \
+ hppa-tdep.c \
+ i386-bsd-nat.c \
+ i386-bsd-tdep.c \
+ i386-darwin-nat.c \
+ i386-darwin-tdep.c \
+ i386-dicos-tdep.c \
+ i386-fbsd-nat.c \
+ i386-fbsd-tdep.c \
+ i386-gnu-nat.c \
+ i386-gnu-tdep.c \
+ i386-linux-nat.c \
+ i386-linux-tdep.c \
+ i386-netbsd-nat.c \
+ i386-netbsd-tdep.c \
+ i386-obsd-nat.c \
+ i386-obsd-tdep.c \
+ i386-sol2-nat.c \
+ i386-sol2-tdep.c \
+ i386-tdep.c \
+ i386-windows-tdep.c \
+ i387-tdep.c \
+ ia64-libunwind-tdep.c \
+ ia64-linux-nat.c \
+ ia64-linux-tdep.c \
+ ia64-tdep.c \
+ ia64-vms-tdep.c \
+ inf-ptrace.c \
+ linux-fork.c \
+ linux-record.c \
+ linux-tdep.c \
+ lm32-tdep.c \
+ loongarch-linux-nat.c \
+ loongarch-linux-tdep.c \
+ loongarch-tdep.c \
+ m32r-linux-nat.c \
+ m32r-linux-tdep.c \
+ m32r-tdep.c \
+ m68hc11-tdep.c \
+ m68k-bsd-nat.c \
+ m68k-bsd-tdep.c \
+ m68k-linux-nat.c \
+ m68k-linux-tdep.c \
+ m68k-tdep.c \
+ microblaze-linux-tdep.c \
+ microblaze-tdep.c \
+ mingw-hdep.c \
+ mips-fbsd-nat.c \
+ mips-fbsd-tdep.c \
+ mips-linux-nat.c \
+ mips-linux-tdep.c \
+ mips-netbsd-nat.c \
+ mips-netbsd-tdep.c \
+ mips-sde-tdep.c \
+ mips-tdep.c \
+ mips64-obsd-nat.c \
+ mips64-obsd-tdep.c \
+ msp430-tdep.c \
+ netbsd-nat.c \
+ netbsd-tdep.c \
+ nds32-tdep.c \
+ nios2-linux-tdep.c \
+ nios2-tdep.c \
+ obsd-nat.c \
+ obsd-tdep.c \
+ or1k-linux-nat.c \
+ posix-hdep.c \
+ ppc-fbsd-nat.c \
+ ppc-fbsd-tdep.c \
+ ppc-linux-nat.c \
+ ppc-linux-tdep.c \
+ ppc-netbsd-nat.c \
+ ppc-netbsd-tdep.c \
+ ppc-obsd-nat.c \
+ ppc-obsd-tdep.c \
+ ppc-ravenscar-thread.c \
+ ppc-sysv-tdep.c \
+ ppc64-tdep.c \
+ procfs.c \
+ ravenscar-thread.c \
+ remote-sim.c \
+ riscv-fbsd-nat.c \
+ riscv-fbsd-tdep.c \
+ riscv-linux-nat.c \
+ riscv-linux-tdep.c \
+ riscv-none-tdep.c \
+ riscv-ravenscar-thread.c \
+ riscv-tdep.c \
+ rl78-tdep.c \
+ rs6000-aix-nat.c \
+ rs6000-lynx178-tdep.c \
+ rs6000-tdep.c \
+ rx-tdep.c \
+ s390-linux-nat.c \
+ s390-linux-tdep.c \
+ s390-tdep.c \
+ ser-go32.c \
+ ser-mingw.c \
+ ser-pipe.c \
+ ser-tcp.c \
+ ser-uds.c \
+ sh-netbsd-nat.c \
+ sh-netbsd-tdep.c \
+ sh-tdep.c \
+ sol2-tdep.c \
+ solib-aix.c \
+ solib-svr4.c \
+ sparc-linux-nat.c \
+ sparc-linux-tdep.c \
+ sparc-nat.c \
+ sparc-netbsd-nat.c \
+ sparc-netbsd-tdep.c \
+ sparc-obsd-tdep.c \
+ sparc-ravenscar-thread.c \
+ sparc-sol2-nat.c \
+ sparc-sol2-tdep.c \
+ sparc-tdep.c \
+ sparc64-fbsd-nat.c \
+ sparc64-fbsd-tdep.c \
+ sparc64-linux-nat.c \
+ sparc64-linux-tdep.c \
+ sparc64-nat.c \
+ sparc64-netbsd-nat.c \
+ sparc64-netbsd-tdep.c \
+ sparc64-obsd-nat.c \
+ sparc64-obsd-tdep.c \
+ sparc64-sol2-tdep.c \
+ sparc64-tdep.c \
+ tilegx-linux-nat.c \
+ tilegx-linux-tdep.c \
+ tilegx-tdep.c \
+ v850-tdep.c \
+ vax-bsd-nat.c \
+ vax-netbsd-tdep.c \
+ vax-tdep.c \
+ windows-nat.c \
+ windows-tdep.c \
+ x86-nat.c \
+ x86-tdep.c \
+ xcoffread.c \
+ xstormy16-tdep.c \
+ xtensa-config.c \
+ xtensa-linux-nat.c \
+ xtensa-linux-tdep.c \
+ xtensa-tdep.c \
+ xtensa-xtregs.c
+
# Don't include YYFILES (*.c) because we already include *.y in SFILES,
# and it's more useful to see it in the .y file.
TAGFILES_NO_SRCDIR = $(SFILES) $(HFILES_NO_SRCDIR) $(ALLDEPFILES) \
@@ -1955,7 +2193,7 @@ clean mostlyclean: $(CONFIG_CLEAN)
# functionality described is if the distributed files are unmodified.
distclean: clean
@$(MAKE) $(FLAGS_TO_PASS) DO=distclean "DODIRS=$(CLEANDIRS)" subdir_do
- rm -f nm.h config.status config.h stamp-h b jit-reader.h
+ rm -f nm.h config.status config.h stamp-h b jit-reader.h gcore stamp-nmh
rm -f gdb-gdb.py gdb-gdb.gdb
rm -f y.output yacc.acts yacc.tmp y.tab.h
rm -f config.log config.cache
@@ -2131,222 +2369,6 @@ force_update:
# will remove them.
MAKEOVERRIDES =
-ALLDEPFILES = \
- aarch32-tdep.c \
- aarch64-fbsd-nat.c \
- aarch64-fbsd-tdep.c \
- aarch64-linux-nat.c \
- aarch64-linux-tdep.c \
- aarch64-newlib-tdep.c \
- aarch64-ravenscar-thread.c \
- aarch64-tdep.c \
- aix-thread.c \
- alpha-bsd-nat.c \
- alpha-bsd-tdep.c \
- alpha-linux-nat.c \
- alpha-linux-tdep.c \
- alpha-mdebug-tdep.c \
- alpha-netbsd-tdep.c \
- alpha-obsd-tdep.c \
- alpha-tdep.c \
- amd64-bsd-nat.c \
- amd64-darwin-tdep.c \
- amd64-dicos-tdep.c \
- amd64-fbsd-nat.c \
- amd64-fbsd-tdep.c \
- amd64-linux-nat.c \
- amd64-linux-tdep.c \
- amd64-nat.c \
- amd64-netbsd-nat.c \
- amd64-netbsd-tdep.c \
- amd64-obsd-nat.c \
- amd64-obsd-tdep.c \
- amd64-ravenscar-thread.c \
- amd64-sol2-tdep.c \
- amd64-tdep.c \
- arc-linux-nat.c \
- arc-tdep.c \
- arm.c \
- arm-bsd-tdep.c \
- arm-fbsd-nat.c \
- arm-fbsd-tdep.c \
- arm-get-next-pcs.c \
- arm-linux.c \
- arm-linux-nat.c \
- arm-linux-tdep.c \
- arm-netbsd-nat.c \
- arm-netbsd-tdep.c \
- arm-none-tdep.c \
- arm-obsd-tdep.c \
- arm-tdep.c \
- avr-tdep.c \
- bfin-linux-tdep.c \
- bfin-tdep.c \
- bpf-tdep.c \
- bsd-kvm.c \
- bsd-uthread.c \
- csky-linux-tdep.c \
- csky-tdep.c \
- darwin-nat.c \
- dicos-tdep.c \
- fbsd-nat.c \
- fbsd-tdep.c \
- fork-child.c \
- ft32-tdep.c \
- glibc-tdep.c \
- go32-nat.c \
- h8300-tdep.c \
- hppa-bsd-tdep.c \
- hppa-linux-nat.c \
- hppa-linux-tdep.c \
- hppa-netbsd-nat.c \
- hppa-netbsd-tdep.c \
- hppa-obsd-nat.c \
- hppa-obsd-tdep.c \
- hppa-tdep.c \
- i386-bsd-nat.c \
- i386-bsd-tdep.c \
- i386-darwin-nat.c \
- i386-darwin-tdep.c \
- i386-dicos-tdep.c \
- i386-fbsd-nat.c \
- i386-fbsd-tdep.c \
- i386-gnu-nat.c \
- i386-gnu-tdep.c \
- i386-linux-nat.c \
- i386-linux-tdep.c \
- i386-netbsd-nat.c \
- i386-netbsd-tdep.c \
- i386-obsd-nat.c \
- i386-obsd-tdep.c \
- i386-sol2-nat.c \
- i386-sol2-tdep.c \
- i386-tdep.c \
- i386-windows-tdep.c \
- i387-tdep.c \
- ia64-libunwind-tdep.c \
- ia64-linux-nat.c \
- ia64-linux-tdep.c \
- ia64-tdep.c \
- ia64-vms-tdep.c \
- inf-ptrace.c \
- linux-fork.c \
- linux-record.c \
- linux-tdep.c \
- lm32-tdep.c \
- m32r-linux-nat.c \
- m32r-linux-tdep.c \
- m32r-tdep.c \
- m68hc11-tdep.c \
- m68k-bsd-nat.c \
- m68k-bsd-tdep.c \
- m68k-linux-nat.c \
- m68k-linux-tdep.c \
- m68k-tdep.c \
- microblaze-linux-tdep.c \
- microblaze-tdep.c \
- mingw-hdep.c \
- mips-fbsd-nat.c \
- mips-fbsd-tdep.c \
- mips-linux-nat.c \
- mips-linux-tdep.c \
- mips-netbsd-nat.c \
- mips-netbsd-tdep.c \
- mips-sde-tdep.c \
- mips-tdep.c \
- mips64-obsd-nat.c \
- mips64-obsd-tdep.c \
- msp430-tdep.c \
- netbsd-nat.c \
- netbsd-tdep.c \
- nds32-tdep.c \
- nios2-linux-tdep.c \
- nios2-tdep.c \
- obsd-nat.c \
- obsd-tdep.c \
- or1k-linux-nat.c \
- posix-hdep.c \
- ppc-fbsd-nat.c \
- ppc-fbsd-tdep.c \
- ppc-linux-nat.c \
- ppc-linux-tdep.c \
- ppc-netbsd-nat.c \
- ppc-netbsd-tdep.c \
- ppc-obsd-nat.c \
- ppc-obsd-tdep.c \
- ppc-ravenscar-thread.c \
- ppc-sysv-tdep.c \
- ppc64-tdep.c \
- procfs.c \
- ravenscar-thread.c \
- remote-sim.c \
- riscv-fbsd-nat.c \
- riscv-fbsd-tdep.c \
- riscv-linux-nat.c \
- riscv-linux-tdep.c \
- riscv-none-tdep.c \
- riscv-ravenscar-thread.c \
- riscv-tdep.c \
- rl78-tdep.c \
- rs6000-aix-nat.c \
- rs6000-lynx178-tdep.c \
- rs6000-tdep.c \
- rx-tdep.c \
- s390-linux-nat.c \
- s390-linux-tdep.c \
- s390-tdep.c \
- score-tdep.c \
- ser-go32.c \
- ser-mingw.c \
- ser-pipe.c \
- ser-tcp.c \
- ser-uds.c \
- sh-netbsd-nat.c \
- sh-netbsd-tdep.c \
- sh-tdep.c \
- sol2-tdep.c \
- solib-aix.c \
- solib-svr4.c \
- sparc-linux-nat.c \
- sparc-linux-tdep.c \
- sparc-nat.c \
- sparc-netbsd-nat.c \
- sparc-netbsd-tdep.c \
- sparc-obsd-tdep.c \
- sparc-ravenscar-thread.c \
- sparc-sol2-nat.c \
- sparc-sol2-tdep.c \
- sparc-tdep.c \
- sparc64-fbsd-nat.c \
- sparc64-fbsd-tdep.c \
- sparc64-linux-nat.c \
- sparc64-linux-tdep.c \
- sparc64-nat.c \
- sparc64-netbsd-nat.c \
- sparc64-netbsd-tdep.c \
- sparc64-obsd-nat.c \
- sparc64-obsd-tdep.c \
- sparc64-sol2-tdep.c \
- sparc64-tdep.c \
- tilegx-linux-nat.c \
- tilegx-linux-tdep.c \
- tilegx-tdep.c \
- v850-tdep.c \
- vax-bsd-nat.c \
- vax-netbsd-tdep.c \
- vax-tdep.c \
- windows-nat.c \
- windows-tdep.c \
- x86-nat.c \
- x86-tdep.c \
- xcoffread.c \
- xstormy16-tdep.c \
- xtensa-config.c \
- xtensa-linux-nat.c \
- xtensa-linux-tdep.c \
- xtensa-tdep.c \
- xtensa-xtregs.c
-
# Some files need explicit build rules (due to -Werror problems) or due
# to sub-directory fun 'n' games.
@@ -2458,20 +2480,19 @@ po/$(PACKAGE).pot: force
rm -f $@.tmp && \
mv $@.new $@
%.c: %.l
- $(ECHO_LEX) $(FLEX) -t $< \
- | sed -e '/extern.*malloc/d' \
- -e '/extern.*realloc/d' \
- -e '/extern.*free/d' \
- -e '/include.*malloc.h/d' \
- -e 's/\([^x]\)malloc/\1xmalloc/g' \
- -e 's/\([^x]\)realloc/\1xrealloc/g' \
- -e 's/\([ \t;,(]\)free\([ \t]*[&(),]\)/\1xfree\2/g' \
- -e 's/\([ \t;,(]\)free$$/\1xfree/g' \
- -e 's/yy_flex_xrealloc/yyxrealloc/g' \
- > $@.new && \
- mv $@.new $@
-
-.PRECIOUS: ada-lex.c
+ $(ECHO_LEX) $(FLEX) -t $< > $@.tmp || (rm -f $@.tmp; false)
+ @sed -e '/extern.*malloc/d' \
+ -e '/extern.*realloc/d' \
+ -e '/extern.*free/d' \
+ -e '/include.*malloc.h/d' \
+ -e 's/\([^x]\)malloc/\1xmalloc/g' \
+ -e 's/\([^x]\)realloc/\1xrealloc/g' \
+ -e 's/\([ \t;,(]\)free\([ \t]*[&(),]\)/\1xfree\2/g' \
+ -e 's/\([ \t;,(]\)free$$/\1xfree/g' \
+ -e 's/yy_flex_xrealloc/yyxrealloc/g' \
+ < $@.tmp > $@.new && \
+ rm -f $@.tmp && \
+ mv $@.new $@
# XML rules
diff --git a/gdb/NEWS b/gdb/NEWS
index c26e15b530a..a72fee81550 100644
--- a/gdb/NEWS
+++ b/gdb/NEWS
@@ -1,7 +1,69 @@
What has changed in GDB?
(Organized release by release)
-*** Changes since GDB 11
+*** Changes since GDB 12
+
+* Support for Thread Local Storage (TLS) variables on FreeBSD arm and
+ aarch64 architectures.
+
+* GDB now supports hardware watchpoints on FreeBSD/Aarch64.
+
+* Remove support for building against Python 2, it is now only possible to
+ build GDB against Python 3.
+
+* DBX mode has been removed.
+
+* GDB now honours the DWARF prologue_end line-table entry flag the compiler can
+ emit to indicate where a breakpoint should be placed to break in a function
+ past its prologue.
+
+* New commands
+
+maintenance set ignore-prologue-end-flag on|off
+maintenance show ignore-prologue-end-flag
+ This setting, which is off by default, controls whether GDB ignores the
+ PROLOGUE-END flag from the line-table when skipping prologue. This can be
+ used to force GDB to use prologue analyzers if the line-table is constructed
+ from erroneous debug information.
+
+* Changed commands
+
+maintenance info line-table
+ Add a PROLOGUE-END column to the output which indicates that an
+ entry corresponds to an address where a breakpoint should be placed
+ to be at the first instruction past a function's prologue.
+
+* Python API
+
+ ** New function gdb.format_address(ADDRESS, PROGSPACE, ARCHITECTURE),
+ that formats ADDRESS as 'address <symbol+offset>', where symbol is
+ looked up in PROGSPACE, and ARCHITECTURE is used to format address.
+ This is the same format that GDB uses when printing address, symbol,
+ and offset information from the disassembler.
+
+*** Changes in GDB 12
+
+* DBX mode is deprecated, and will be removed in GDB 13
+
+* GDB 12 is the last release of GDB that will support building against
+ Python 2. From GDB 13, it will only be possible to build GDB itself
+ with Python 3 support.
+
+* Improved C++ template support
+
+ GDB now treats functions/types involving C++ templates like it does function
+ overloads. Users may omit parameter lists to set breakpoints on families of
+ template functions, including types/functions composed of multiple template types:
+
+ (gdb) break template_func(template_1, int)
+
+ The above will set breakpoints at every function `template_func' where
+ the first function parameter is any template type named `template_1' and
+ the second function parameter is `int'.
+
+ TAB completion also gains similar improvements.
+
+* The FreeBSD native target now supports async mode.
* Configure changes
@@ -64,8 +126,69 @@ set debug threads on|off
show debug threads
Print additional debug messages about thread creation and deletion.
+set debug linux-nat on|off
+show debug linux-nat
+ These new commands replaced the old 'set debug lin-lwp' and 'show
+ debug lin-lwp' respectively. Turning this setting on prints debug
+ messages relating to GDB's handling of native Linux inferiors.
+
+maint flush source-cache
+ Flush the contents of the source code cache.
+
+maint set gnu-source-highlight enabled on|off
+maint show gnu-source-highlight enabled
+ Whether GDB should use the GNU Source Highlight library for adding
+ styling to source code. When off, the library will not be used, even
+ when available. When GNU Source Highlight isn't used, or can't add
+ styling to a particular source file, then the Python Pygments
+ library will be used instead.
+
+set suppress-cli-notifications (on|off)
+show suppress-cli-notifications
+ This controls whether printing the notifications is suppressed for CLI.
+ CLI notifications occur when you change the selected context
+ (i.e., the current inferior, thread and/or the frame), or when
+ the program being debugged stops (e.g., because of hitting a
+ breakpoint, completing source-stepping, an interrupt, etc.).
+
+set style disassembler enabled on|off
+show style disassembler enabled
+ If GDB is compiled with Python support, and the Python Pygments
+ package is available, then, when this setting is on, disassembler
+ output will have styling applied.
+
+set ada source-charset
+show ada source-charset
+ Set the character set encoding that is assumed for Ada symbols. Valid
+ values for this follow the values that can be passed to the GNAT
+ compiler via the '-gnati' option. The default is ISO-8859-1.
+
+tui layout
+tui focus
+tui refresh
+tui window height
+ These are the new names for the old 'layout', 'focus', 'refresh',
+ and 'winheight' tui commands respectively. The old names still
+ exist as aliases to these new commands.
+
+tui window width
+winwidth
+ The new command 'tui window width', and the alias 'winwidth' allow
+ the width of a tui window to be adjusted when windows are laid out
+ in horizontal mode.
+
+set debug tui on|off
+show debug tui
+ Control the display of debug output about GDB's tui.
+
* Changed commands
+print
+ Printing of floating-point values with base-modifying formats like
+ /x has been changed to display the underlying bytes of the value in
+ the desired base. This was GDB's documented behavior, but was never
+ implemented correctly.
+
maint packet
This command can now print a reply, if the reply includes
non-printable characters. Any non-printable characters are printed
@@ -79,6 +202,49 @@ clone-inferior
environment' or 'unset environment' commands are also copied to the new
inferior.
+set debug lin-lwp on|off
+show debug lin-lwp
+ These commands have been removed from GDB. The new command 'set
+ debug linux-nat' and 'show debug linux-nat' should be used
+ instead.
+
+info win
+ This command now includes information about the width of the tui
+ windows in its output.
+
+layout
+focus
+refresh
+winheight
+ These commands are now aliases for the 'tui layout', 'tui focus',
+ 'tui refresh', and 'tui window height' commands respectively.
+
+* GDB's Ada parser now supports an extension for specifying the exact
+ byte contents of a floating-point literal. This can be useful for
+ setting floating-point registers to a precise value without loss of
+ precision. The syntax is an extension of the based literal syntax.
+ Use, e.g., "16lf#0123abcd#" -- the number of "l"s controls the width
+ of the floating-point type, and the "f" is the marker for floating
+ point.
+
+* MI changes
+
+ ** The '-add-inferior' with no option flags now inherits the
+ connection of the current inferior, this restores the behaviour of
+ GDB as it was prior to GDB 10.
+
+ ** The '-add-inferior' command now accepts a '--no-connection'
+ option, which causes the new inferior to start without a
+ connection.
+
+* New targets
+
+GNU/Linux/LoongArch loongarch*-*-linux*
+
+* Removed targets
+
+S+core score-*-*
+
* Python API
** New function gdb.add_history(), which takes a gdb.Value object
@@ -86,6 +252,9 @@ clone-inferior
integer, the index of the new item in the history list, is
returned.
+ ** New function gdb.history_count(), which returns the number of
+ values in GDB's value history.
+
** New gdb.events.gdb_exiting event. This event is called with a
gdb.GdbExitingEvent object which has the read-only attribute
'exit_code', which contains the value of the GDB exit code. This
@@ -120,6 +289,38 @@ clone-inferior
is equivalent to the existing 'maint packet' CLI command; it
allows a user specified packet to be sent to the remote target.
+ ** New function gdb.host_charset(), returns a string, which is the
+ name of the current host charset.
+
+ ** New gdb.set_parameter(NAME, VALUE). This sets the gdb parameter
+ NAME to VALUE.
+
+ ** New gdb.with_parameter(NAME, VALUE). This returns a context
+ manager that temporarily sets the gdb parameter NAME to VALUE,
+ then resets it when the context is exited.
+
+ ** The gdb.Value.format_string method now takes a 'styling'
+ argument, which is a boolean. When true, the returned string can
+ include escape sequences to apply styling. The styling will only
+ be present if styling is otherwise turned on in GDB (see 'help
+ set styling'). When false, which is the default if the argument
+ is not given, then no styling is applied to the returned string.
+
+ ** New read-only attribute gdb.InferiorThread.details, which is
+ either a string, containing additional, target specific thread
+ state information, or None, if there is no such additional
+ information.
+
+ ** New read-only attribute gdb.Type.is_scalar, which is True for
+ scalar types, and False for all other types.
+
+ ** New read-only attribute gdb.Type.is_signed. This attribute
+ should only be read when Type.is_scalar is True, and will be True
+ for signed types, and False for all other types. Attempting to
+ read this attribute for non-scalar types will raise a ValueError.
+
+ ** It is now possible to add GDB/MI commands implemented in Python.
+
* New features in the GDB remote stub, GDBserver
** GDBserver is now supported on OpenRISC GNU/Linux.
@@ -5016,6 +5217,11 @@ show arm force-mode
the current CPSR value for instructions without symbols; previous
versions of GDB behaved as if "set arm fallback-mode arm".
+set arm unwind-secure-frames
+ Enable unwinding from Non-secure to Secure mode on Cortex-M with
+ Security extension.
+ This can trigger security exceptions when unwinding exception stacks.
+
set disable-randomization
show disable-randomization
Standalone programs run with the virtual address space randomization enabled
diff --git a/gdb/README b/gdb/README
index e65c5ea7ffa..bd5a88f348c 100644
--- a/gdb/README
+++ b/gdb/README
@@ -506,7 +506,7 @@ more obscure GDB `configure' options are not listed here.
GDB scripting much more powerful than the restricted CLI
scripting language. If your host does not have Python installed,
you can find it on `http://www.python.org/download/'. The oldest
- version of Python supported by GDB is 2.6. The optional argument
+ version of Python supported by GDB is 3.2. The optional argument
PYTHON is used to find the Python headers and libraries. It can
be either the name of a Python executable, or the name of the
directory in which Python is installed.
diff --git a/gdb/aarch64-fbsd-nat.c b/gdb/aarch64-fbsd-nat.c
index e6ca1196139..910bf5bb190 100644
--- a/gdb/aarch64-fbsd-nat.c
+++ b/gdb/aarch64-fbsd-nat.c
@@ -18,24 +18,65 @@
along with this program. If not, see <http://www.gnu.org/licenses/>. */
#include "defs.h"
+#include "arch-utils.h"
+#include "inferior.h"
#include "regcache.h"
#include "target.h"
+#include "nat/aarch64-hw-point.h"
-#include <sys/types.h>
+#include "elf/common.h"
+
+#include <sys/param.h>
#include <sys/ptrace.h>
+#include <machine/armreg.h>
#include <machine/reg.h>
#include "fbsd-nat.h"
+#include "aarch64-tdep.h"
#include "aarch64-fbsd-tdep.h"
+#include "aarch64-nat.h"
#include "inf-ptrace.h"
+#if __FreeBSD_version >= 1400005
+#define HAVE_DBREG
+
+#include <unordered_set>
+#endif
+
+#ifdef HAVE_DBREG
+struct aarch64_fbsd_nat_target final
+ : public aarch64_nat_target<fbsd_nat_target>
+#else
struct aarch64_fbsd_nat_target final : public fbsd_nat_target
+#endif
{
void fetch_registers (struct regcache *, int) override;
void store_registers (struct regcache *, int) override;
+
+ const struct target_desc *read_description () override;
+
+#ifdef HAVE_DBREG
+ /* Hardware breakpoints and watchpoints. */
+ bool stopped_by_watchpoint () override;
+ bool stopped_data_address (CORE_ADDR *) override;
+ bool stopped_by_hw_breakpoint () override;
+ bool supports_stopped_by_hw_breakpoint () override;
+
+ void post_startup_inferior (ptid_t) override;
+ void post_attach (int pid) override;
+
+ void low_new_fork (ptid_t parent, pid_t child) override;
+ void low_delete_thread (thread_info *) override;
+ void low_prepare_to_resume (thread_info *) override;
+
+private:
+ void probe_debug_regs (int pid);
+ static bool debug_regs_probed;
+#endif
};
static aarch64_fbsd_nat_target the_aarch64_fbsd_nat_target;
+bool aarch64_fbsd_nat_target::debug_regs_probed;
/* Fetch register REGNUM from the inferior. If REGNUM is -1, do this
for all registers. */
@@ -48,6 +89,26 @@ aarch64_fbsd_nat_target::fetch_registers (struct regcache *regcache,
&aarch64_fbsd_gregset);
fetch_register_set<struct fpreg> (regcache, regnum, PT_GETFPREGS,
&aarch64_fbsd_fpregset);
+
+ gdbarch *gdbarch = regcache->arch ();
+ aarch64_gdbarch_tdep *tdep = (aarch64_gdbarch_tdep *) gdbarch_tdep (gdbarch);
+ if (tdep->has_tls ())
+ {
+ const struct regcache_map_entry aarch64_fbsd_tls_regmap[] =
+ {
+ { 1, tdep->tls_regnum, 8 },
+ { 0 }
+ };
+
+ const struct regset aarch64_fbsd_tls_regset =
+ {
+ aarch64_fbsd_tls_regmap,
+ regcache_supply_regset, regcache_collect_regset
+ };
+
+ fetch_regset<uint64_t> (regcache, regnum, NT_ARM_TLS,
+ &aarch64_fbsd_tls_regset);
+ }
}
/* Store register REGNUM back into the inferior. If REGNUM is -1, do
@@ -61,11 +122,262 @@ aarch64_fbsd_nat_target::store_registers (struct regcache *regcache,
&aarch64_fbsd_gregset);
store_register_set<struct fpreg> (regcache, regnum, PT_GETFPREGS,
PT_SETFPREGS, &aarch64_fbsd_fpregset);
+
+ gdbarch *gdbarch = regcache->arch ();
+ aarch64_gdbarch_tdep *tdep = (aarch64_gdbarch_tdep *) gdbarch_tdep (gdbarch);
+ if (tdep->has_tls ())
+ {
+ const struct regcache_map_entry aarch64_fbsd_tls_regmap[] =
+ {
+ { 1, tdep->tls_regnum, 8 },
+ { 0 }
+ };
+
+ const struct regset aarch64_fbsd_tls_regset =
+ {
+ aarch64_fbsd_tls_regmap,
+ regcache_supply_regset, regcache_collect_regset
+ };
+
+ store_regset<uint64_t> (regcache, regnum, NT_ARM_TLS,
+ &aarch64_fbsd_tls_regset);
+ }
+}
+
+/* Implement the target read_description method. */
+
+const struct target_desc *
+aarch64_fbsd_nat_target::read_description ()
+{
+ bool tls = have_regset (inferior_ptid, NT_ARM_TLS) != 0;
+ return aarch64_read_description (0, false, false, tls);
+}
+
+#ifdef HAVE_DBREG
+/* Set of threads which need to update debug registers on next resume. */
+
+static std::unordered_set<lwpid_t> aarch64_debug_pending_threads;
+
+/* Implement the "stopped_data_address" target_ops method. */
+
+bool
+aarch64_fbsd_nat_target::stopped_data_address (CORE_ADDR *addr_p)
+{
+ siginfo_t siginfo;
+ struct aarch64_debug_reg_state *state;
+
+ if (!fbsd_nat_get_siginfo (inferior_ptid, &siginfo))
+ return false;
+
+ /* This must be a hardware breakpoint. */
+ if (siginfo.si_signo != SIGTRAP
+ || siginfo.si_code != TRAP_TRACE
+ || siginfo.si_trapno != EXCP_WATCHPT_EL0)
+ return false;
+
+ const CORE_ADDR addr_trap = (CORE_ADDR) siginfo.si_addr;
+
+ /* Check if the address matches any watched address. */
+ state = aarch64_get_debug_reg_state (inferior_ptid.pid ());
+ return aarch64_stopped_data_address (state, addr_trap, addr_p);
+}
+
+/* Implement the "stopped_by_watchpoint" target_ops method. */
+
+bool
+aarch64_fbsd_nat_target::stopped_by_watchpoint ()
+{
+ CORE_ADDR addr;
+
+ return stopped_data_address (&addr);
+}
+
+/* Implement the "stopped_by_hw_breakpoint" target_ops method. */
+
+bool
+aarch64_fbsd_nat_target::stopped_by_hw_breakpoint ()
+{
+ siginfo_t siginfo;
+ struct aarch64_debug_reg_state *state;
+
+ if (!fbsd_nat_get_siginfo (inferior_ptid, &siginfo))
+ return false;
+
+ /* This must be a hardware breakpoint. */
+ if (siginfo.si_signo != SIGTRAP
+ || siginfo.si_code != TRAP_TRACE
+ || siginfo.si_trapno != EXCP_WATCHPT_EL0)
+ return false;
+
+ return !stopped_by_watchpoint();
+}
+
+/* Implement the "supports_stopped_by_hw_breakpoint" target_ops method. */
+
+bool
+aarch64_fbsd_nat_target::supports_stopped_by_hw_breakpoint ()
+{
+ return true;
+}
+
+/* Fetch the hardware debug register capability information. */
+
+void
+aarch64_fbsd_nat_target::probe_debug_regs (int pid)
+{
+ if (!debug_regs_probed)
+ {
+ struct dbreg reg;
+
+ debug_regs_probed = true;
+ aarch64_num_bp_regs = 0;
+ aarch64_num_wp_regs = 0;
+
+ if (ptrace(PT_GETDBREGS, pid, (PTRACE_TYPE_ARG3) &reg, 0) == 0)
+ {
+ switch (reg.db_debug_ver)
+ {
+ case AARCH64_DEBUG_ARCH_V8:
+ case AARCH64_DEBUG_ARCH_V8_1:
+ case AARCH64_DEBUG_ARCH_V8_2:
+ case AARCH64_DEBUG_ARCH_V8_4:
+ break;
+ default:
+ return;
+ }
+
+ aarch64_num_bp_regs = reg.db_nbkpts;
+ if (aarch64_num_bp_regs > AARCH64_HBP_MAX_NUM)
+ {
+ warning (_("Unexpected number of hardware breakpoint registers"
+ " reported by ptrace, got %d, expected %d."),
+ aarch64_num_bp_regs, AARCH64_HBP_MAX_NUM);
+ aarch64_num_bp_regs = AARCH64_HBP_MAX_NUM;
+ }
+ aarch64_num_wp_regs = reg.db_nwtpts;
+ if (aarch64_num_wp_regs > AARCH64_HWP_MAX_NUM)
+ {
+ warning (_("Unexpected number of hardware watchpoint registers"
+ " reported by ptrace, got %d, expected %d."),
+ aarch64_num_wp_regs, AARCH64_HWP_MAX_NUM);
+ aarch64_num_wp_regs = AARCH64_HWP_MAX_NUM;
+ }
+ }
+ }
+}
+
+/* Implement the virtual inf_ptrace_target::post_startup_inferior method. */
+
+void
+aarch64_fbsd_nat_target::post_startup_inferior (ptid_t ptid)
+{
+ aarch64_remove_debug_reg_state (ptid.pid ());
+ probe_debug_regs (ptid.pid ());
+ fbsd_nat_target::post_startup_inferior (ptid);
+}
+
+/* Implement the "post_attach" target_ops method. */
+
+void
+aarch64_fbsd_nat_target::post_attach (int pid)
+{
+ aarch64_remove_debug_reg_state (pid);
+ probe_debug_regs (pid);
+ fbsd_nat_target::post_attach (pid);
+}
+
+/* Implement the virtual fbsd_nat_target::low_new_fork method. */
+
+void
+aarch64_fbsd_nat_target::low_new_fork (ptid_t parent, pid_t child)
+{
+ struct aarch64_debug_reg_state *parent_state, *child_state;
+
+ /* If there is no parent state, no watchpoints nor breakpoints have
+ been set, so there is nothing to do. */
+ parent_state = aarch64_lookup_debug_reg_state (parent.pid ());
+ if (parent_state == nullptr)
+ return;
+
+ /* The kernel clears debug registers in the new child process after
+ fork, but GDB core assumes the child inherits the watchpoints/hw
+ breakpoints of the parent, and will remove them all from the
+ forked off process. Copy the debug registers mirrors into the
+ new process so that all breakpoints and watchpoints can be
+ removed together. */
+
+ child_state = aarch64_get_debug_reg_state (child);
+ *child_state = *parent_state;
+}
+
+/* Mark debug register state "dirty" for all threads belonging to the
+ current inferior. */
+
+void
+aarch64_notify_debug_reg_change (ptid_t ptid,
+ int is_watchpoint, unsigned int idx)
+{
+ for (thread_info *tp : current_inferior ()->non_exited_threads ())
+ {
+ if (tp->ptid.lwp_p ())
+ aarch64_debug_pending_threads.emplace (tp->ptid.lwp ());
+ }
+}
+
+/* Implement the virtual fbsd_nat_target::low_delete_thread method. */
+
+void
+aarch64_fbsd_nat_target::low_delete_thread (thread_info *tp)
+{
+ gdb_assert(tp->ptid.lwp_p ());
+ aarch64_debug_pending_threads.erase (tp->ptid.lwp ());
+}
+
+/* Implement the virtual fbsd_nat_target::low_prepare_to_resume method. */
+
+void
+aarch64_fbsd_nat_target::low_prepare_to_resume (thread_info *tp)
+{
+ gdb_assert(tp->ptid.lwp_p ());
+
+ if (aarch64_debug_pending_threads.erase (tp->ptid.lwp ()) == 0)
+ return;
+
+ struct aarch64_debug_reg_state *state =
+ aarch64_lookup_debug_reg_state (tp->ptid.pid ());
+ gdb_assert(state != nullptr);
+
+ struct dbreg reg;
+ memset (&reg, 0, sizeof(reg));
+ for (int i = 0; i < aarch64_num_bp_regs; i++)
+ {
+ reg.db_breakregs[i].dbr_addr = state->dr_addr_bp[i];
+ reg.db_breakregs[i].dbr_ctrl = state->dr_ctrl_bp[i];
+ }
+ for (int i = 0; i < aarch64_num_wp_regs; i++)
+ {
+ reg.db_watchregs[i].dbw_addr = state->dr_addr_wp[i];
+ reg.db_watchregs[i].dbw_ctrl = state->dr_ctrl_wp[i];
+ }
+ if (ptrace(PT_SETDBREGS, tp->ptid.lwp (), (PTRACE_TYPE_ARG3) &reg, 0) != 0)
+ error (_("Failed to set hardware debug registers"));
+}
+#else
+/* A stub that should never be called. */
+void
+aarch64_notify_debug_reg_change (ptid_t ptid,
+ int is_watchpoint, unsigned int idx)
+{
+ gdb_assert (true);
}
+#endif
void _initialize_aarch64_fbsd_nat ();
void
_initialize_aarch64_fbsd_nat ()
{
+#ifdef HAVE_DBREG
+ aarch64_initialize_hw_point ();
+#endif
add_inf_child_target (&the_aarch64_fbsd_nat_target);
}
diff --git a/gdb/aarch64-fbsd-tdep.c b/gdb/aarch64-fbsd-tdep.c
index 32f441892a8..fdf0795b9bf 100644
--- a/gdb/aarch64-fbsd-tdep.c
+++ b/gdb/aarch64-fbsd-tdep.c
@@ -23,6 +23,7 @@
#include "fbsd-tdep.h"
#include "aarch64-tdep.h"
#include "aarch64-fbsd-tdep.h"
+#include "inferior.h"
#include "osabi.h"
#include "solib-svr4.h"
#include "target.h"
@@ -142,10 +143,66 @@ aarch64_fbsd_iterate_over_regset_sections (struct gdbarch *gdbarch,
void *cb_data,
const struct regcache *regcache)
{
+ aarch64_gdbarch_tdep *tdep = (aarch64_gdbarch_tdep *) gdbarch_tdep (gdbarch);
+
cb (".reg", AARCH64_FBSD_SIZEOF_GREGSET, AARCH64_FBSD_SIZEOF_GREGSET,
&aarch64_fbsd_gregset, NULL, cb_data);
cb (".reg2", AARCH64_FBSD_SIZEOF_FPREGSET, AARCH64_FBSD_SIZEOF_FPREGSET,
&aarch64_fbsd_fpregset, NULL, cb_data);
+
+ if (tdep->has_tls ())
+ {
+ const struct regcache_map_entry aarch64_fbsd_tls_regmap[] =
+ {
+ { 1, tdep->tls_regnum, 8 },
+ { 0 }
+ };
+
+ const struct regset aarch64_fbsd_tls_regset =
+ {
+ aarch64_fbsd_tls_regmap,
+ regcache_supply_regset, regcache_collect_regset
+ };
+
+ cb (".reg-aarch-tls", AARCH64_FBSD_SIZEOF_TLSREGSET,
+ AARCH64_FBSD_SIZEOF_TLSREGSET, &aarch64_fbsd_tls_regset,
+ "TLS register", cb_data);
+ }
+}
+
+/* Implement the "core_read_description" gdbarch method. */
+
+static const struct target_desc *
+aarch64_fbsd_core_read_description (struct gdbarch *gdbarch,
+ struct target_ops *target, bfd *abfd)
+{
+ asection *tls = bfd_get_section_by_name (abfd, ".reg-aarch-tls");
+
+ return aarch64_read_description (0, false, false, tls != nullptr);
+}
+
+/* Implement the get_thread_local_address gdbarch method. */
+
+static CORE_ADDR
+aarch64_fbsd_get_thread_local_address (struct gdbarch *gdbarch, ptid_t ptid,
+ CORE_ADDR lm_addr, CORE_ADDR offset)
+{
+ aarch64_gdbarch_tdep *tdep = (aarch64_gdbarch_tdep *) gdbarch_tdep (gdbarch);
+ struct regcache *regcache;
+
+ regcache = get_thread_arch_regcache (current_inferior ()->process_target (),
+ ptid, gdbarch);
+
+ target_fetch_registers (regcache, tdep->tls_regnum);
+
+ ULONGEST tpidr;
+ if (regcache->cooked_read (tdep->tls_regnum, &tpidr) != REG_VALID)
+ error (_("Unable to fetch %%tpidr"));
+
+ /* %tpidr points to the TCB whose first member is the dtv
+ pointer. */
+ CORE_ADDR dtv_addr = tpidr;
+ return fbsd_get_thread_local_address (gdbarch, dtv_addr, lm_addr, offset);
}
/* Implement the 'init_osabi' method of struct gdb_osabi_handler. */
@@ -168,6 +225,16 @@ aarch64_fbsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
set_gdbarch_iterate_over_regset_sections
(gdbarch, aarch64_fbsd_iterate_over_regset_sections);
+ set_gdbarch_core_read_description (gdbarch,
+ aarch64_fbsd_core_read_description);
+
+ if (tdep->has_tls ())
+ {
+ set_gdbarch_fetch_tls_load_module_address (gdbarch,
+ svr4_fetch_objfile_link_map);
+ set_gdbarch_get_thread_local_address
+ (gdbarch, aarch64_fbsd_get_thread_local_address);
+ }
}
void _initialize_aarch64_fbsd_tdep ();
diff --git a/gdb/aarch64-fbsd-tdep.h b/gdb/aarch64-fbsd-tdep.h
index fc8fbee8843..7419ea6be03 100644
--- a/gdb/aarch64-fbsd-tdep.h
+++ b/gdb/aarch64-fbsd-tdep.h
@@ -32,6 +32,9 @@
alignment. */
#define AARCH64_FBSD_SIZEOF_FPREGSET (33 * V_REGISTER_SIZE)
+/* The TLS regset consists of a single register. */
+#define AARCH64_FBSD_SIZEOF_TLSREGSET (X_REGISTER_SIZE)
+
extern const struct regset aarch64_fbsd_gregset;
extern const struct regset aarch64_fbsd_fpregset;
diff --git a/gdb/aarch64-linux-nat.c b/gdb/aarch64-linux-nat.c
index db764975207..10b0ca10984 100644
--- a/gdb/aarch64-linux-nat.c
+++ b/gdb/aarch64-linux-nat.c
@@ -27,6 +27,7 @@
#include "target-descriptions.h"
#include "auxv.h"
#include "gdbcmd.h"
+#include "aarch64-nat.h"
#include "aarch64-tdep.h"
#include "aarch64-linux-tdep.h"
#include "aarch32-linux-nat.h"
@@ -58,7 +59,8 @@
#define TRAP_HWBKPT 0x0004
#endif
-class aarch64_linux_nat_target final : public linux_nat_target
+class aarch64_linux_nat_target final
+ : public aarch64_nat_target<linux_nat_target>
{
public:
/* Add our register access methods. */
@@ -68,17 +70,8 @@ public:
const struct target_desc *read_description () override;
/* Add our hardware breakpoint and watchpoint implementation. */
- int can_use_hw_breakpoint (enum bptype, int, int) override;
- int insert_hw_breakpoint (struct gdbarch *, struct bp_target_info *) override;
- int remove_hw_breakpoint (struct gdbarch *, struct bp_target_info *) override;
- int region_ok_for_hw_watchpoint (CORE_ADDR, int) override;
- int insert_watchpoint (CORE_ADDR, int, enum target_hw_bp_type,
- struct expression *) override;
- int remove_watchpoint (CORE_ADDR, int, enum target_hw_bp_type,
- struct expression *) override;
bool stopped_by_watchpoint () override;
bool stopped_data_address (CORE_ADDR *) override;
- bool watchpoint_addr_within_range (CORE_ADDR, CORE_ADDR, int) override;
int can_do_single_step () override;
@@ -118,103 +111,13 @@ public:
static aarch64_linux_nat_target the_aarch64_linux_nat_target;
-/* Per-process data. We don't bind this to a per-inferior registry
- because of targets like x86 GNU/Linux that need to keep track of
- processes that aren't bound to any inferior (e.g., fork children,
- checkpoints). */
-
-struct aarch64_process_info
-{
- /* Linked list. */
- struct aarch64_process_info *next;
-
- /* The process identifier. */
- pid_t pid;
-
- /* Copy of aarch64 hardware debug registers. */
- struct aarch64_debug_reg_state state;
-};
-
-static struct aarch64_process_info *aarch64_process_list = NULL;
-
-/* Find process data for process PID. */
-
-static struct aarch64_process_info *
-aarch64_find_process_pid (pid_t pid)
-{
- struct aarch64_process_info *proc;
-
- for (proc = aarch64_process_list; proc; proc = proc->next)
- if (proc->pid == pid)
- return proc;
-
- return NULL;
-}
-
-/* Add process data for process PID. Returns newly allocated info
- object. */
-
-static struct aarch64_process_info *
-aarch64_add_process (pid_t pid)
-{
- struct aarch64_process_info *proc;
-
- proc = XCNEW (struct aarch64_process_info);
- proc->pid = pid;
-
- proc->next = aarch64_process_list;
- aarch64_process_list = proc;
-
- return proc;
-}
-
-/* Get data specific info for process PID, creating it if necessary.
- Never returns NULL. */
-
-static struct aarch64_process_info *
-aarch64_process_info_get (pid_t pid)
-{
- struct aarch64_process_info *proc;
-
- proc = aarch64_find_process_pid (pid);
- if (proc == NULL)
- proc = aarch64_add_process (pid);
-
- return proc;
-}
-
/* Called whenever GDB is no longer debugging process PID. It deletes
data structures that keep track of debug register state. */
void
aarch64_linux_nat_target::low_forget_process (pid_t pid)
{
- struct aarch64_process_info *proc, **proc_link;
-
- proc = aarch64_process_list;
- proc_link = &aarch64_process_list;
-
- while (proc != NULL)
- {
- if (proc->pid == pid)
- {
- *proc_link = proc->next;
-
- xfree (proc);
- return;
- }
-
- proc_link = &proc->next;
- proc = *proc_link;
- }
-}
-
-/* Get debug registers state for process PID. */
-
-struct aarch64_debug_reg_state *
-aarch64_get_debug_reg_state (pid_t pid)
-{
- return &aarch64_process_info_get (pid)->state;
+ aarch64_remove_debug_reg_state (pid);
}
/* Fill GDB's register array with the general-purpose register values
@@ -528,6 +431,60 @@ store_mteregs_to_thread (struct regcache *regcache)
perror_with_name (_("unable to store MTE registers."));
}
+/* Fill GDB's register array with the TLS register values from
+ the current thread. */
+
+static void
+fetch_tlsregs_from_thread (struct regcache *regcache)
+{
+ aarch64_gdbarch_tdep *tdep
+ = (aarch64_gdbarch_tdep *) gdbarch_tdep (regcache->arch ());
+ int regno = tdep->tls_regnum;
+
+ gdb_assert (regno != -1);
+
+ uint64_t tpidr = 0;
+ struct iovec iovec;
+
+ iovec.iov_base = &tpidr;
+ iovec.iov_len = sizeof (tpidr);
+
+ int tid = get_ptrace_pid (regcache->ptid ());
+ if (ptrace (PTRACE_GETREGSET, tid, NT_ARM_TLS, &iovec) != 0)
+ perror_with_name (_("unable to fetch TLS register."));
+
+ regcache->raw_supply (regno, &tpidr);
+}
+
+/* Store to the current thread the valid TLS register set in GDB's
+ register array. */
+
+static void
+store_tlsregs_to_thread (struct regcache *regcache)
+{
+ aarch64_gdbarch_tdep *tdep
+ = (aarch64_gdbarch_tdep *) gdbarch_tdep (regcache->arch ());
+ int regno = tdep->tls_regnum;
+
+ gdb_assert (regno != -1);
+
+ uint64_t tpidr = 0;
+
+ if (REG_VALID != regcache->get_register_status (regno))
+ return;
+
+ regcache->raw_collect (regno, (char *) &tpidr);
+
+ struct iovec iovec;
+
+ iovec.iov_base = &tpidr;
+ iovec.iov_len = sizeof (tpidr);
+
+ int tid = get_ptrace_pid (regcache->ptid ());
+ if (ptrace (PTRACE_SETREGSET, tid, NT_ARM_TLS, &iovec) != 0)
+ perror_with_name (_("unable to store TLS register."));
+}
+
/* Implement the "fetch_registers" target_ops method. */
void
@@ -550,6 +507,9 @@ aarch64_linux_nat_target::fetch_registers (struct regcache *regcache,
if (tdep->has_mte ())
fetch_mteregs_from_thread (regcache);
+
+ if (tdep->has_tls ())
+ fetch_tlsregs_from_thread (regcache);
}
else if (regno < AARCH64_V0_REGNUM)
fetch_gregs_from_thread (regcache);
@@ -569,6 +529,9 @@ aarch64_linux_nat_target::fetch_registers (struct regcache *regcache,
if (tdep->has_mte ()
&& (regno == tdep->mte_reg_base))
fetch_mteregs_from_thread (regcache);
+
+ if (tdep->has_tls () && regno == tdep->tls_regnum)
+ fetch_tlsregs_from_thread (regcache);
}
/* Implement the "store_registers" target_ops method. */
@@ -590,6 +553,9 @@ aarch64_linux_nat_target::store_registers (struct regcache *regcache,
if (tdep->has_mte ())
store_mteregs_to_thread (regcache);
+
+ if (tdep->has_tls ())
+ store_tlsregs_to_thread (regcache);
}
else if (regno < AARCH64_V0_REGNUM)
store_gregs_to_thread (regcache);
@@ -602,6 +568,9 @@ aarch64_linux_nat_target::store_registers (struct regcache *regcache,
if (tdep->has_mte ()
&& (regno == tdep->mte_reg_base))
store_mteregs_to_thread (regcache);
+
+ if (tdep->has_tls () && regno == tdep->tls_regnum)
+ store_tlsregs_to_thread (regcache);
}
/* Fill register REGNO (if it is a general-purpose register) in
@@ -743,7 +712,8 @@ aarch64_linux_nat_target::read_description ()
bool pauth_p = hwcap & AARCH64_HWCAP_PACA;
bool mte_p = hwcap2 & HWCAP2_MTE;
- return aarch64_read_description (aarch64_sve_get_vq (tid), pauth_p, mte_p);
+ return aarch64_read_description (aarch64_sve_get_vq (tid), pauth_p, mte_p,
+ true);
}
/* Convert a native/host siginfo object, into/from the siginfo in the
@@ -775,188 +745,12 @@ aarch64_linux_nat_target::low_siginfo_fixup (siginfo_t *native, gdb_byte *inf,
return false;
}
-/* Returns the number of hardware watchpoints of type TYPE that we can
- set. Value is positive if we can set CNT watchpoints, zero if
- setting watchpoints of type TYPE is not supported, and negative if
- CNT is more than the maximum number of watchpoints of type TYPE
- that we can support. TYPE is one of bp_hardware_watchpoint,
- bp_read_watchpoint, bp_write_watchpoint, or bp_hardware_breakpoint.
- CNT is the number of such watchpoints used so far (including this
- one). OTHERTYPE is non-zero if other types of watchpoints are
- currently enabled. */
-
-int
-aarch64_linux_nat_target::can_use_hw_breakpoint (enum bptype type,
- int cnt, int othertype)
-{
- if (type == bp_hardware_watchpoint || type == bp_read_watchpoint
- || type == bp_access_watchpoint || type == bp_watchpoint)
- {
- if (aarch64_num_wp_regs == 0)
- return 0;
- }
- else if (type == bp_hardware_breakpoint)
- {
- if (aarch64_num_bp_regs == 0)
- return 0;
- }
- else
- gdb_assert_not_reached ("unexpected breakpoint type");
-
- /* We always return 1 here because we don't have enough information
- about possible overlap of addresses that they want to watch. As an
- extreme example, consider the case where all the watchpoints watch
- the same address and the same region length: then we can handle a
- virtually unlimited number of watchpoints, due to debug register
- sharing implemented via reference counts. */
- return 1;
-}
-
-/* Insert a hardware-assisted breakpoint at BP_TGT->reqstd_address.
- Return 0 on success, -1 on failure. */
-
-int
-aarch64_linux_nat_target::insert_hw_breakpoint (struct gdbarch *gdbarch,
- struct bp_target_info *bp_tgt)
-{
- int ret;
- CORE_ADDR addr = bp_tgt->placed_address = bp_tgt->reqstd_address;
- int len;
- const enum target_hw_bp_type type = hw_execute;
- struct aarch64_debug_reg_state *state
- = aarch64_get_debug_reg_state (inferior_ptid.pid ());
-
- gdbarch_breakpoint_from_pc (gdbarch, &addr, &len);
-
- if (show_debug_regs)
- fprintf_unfiltered
- (gdb_stdlog,
- "insert_hw_breakpoint on entry (addr=0x%08lx, len=%d))\n",
- (unsigned long) addr, len);
-
- ret = aarch64_handle_breakpoint (type, addr, len, 1 /* is_insert */, state);
-
- if (show_debug_regs)
- {
- aarch64_show_debug_reg_state (state,
- "insert_hw_breakpoint", addr, len, type);
- }
-
- return ret;
-}
-
-/* Remove a hardware-assisted breakpoint at BP_TGT->placed_address.
- Return 0 on success, -1 on failure. */
-
-int
-aarch64_linux_nat_target::remove_hw_breakpoint (struct gdbarch *gdbarch,
- struct bp_target_info *bp_tgt)
-{
- int ret;
- CORE_ADDR addr = bp_tgt->placed_address;
- int len = 4;
- const enum target_hw_bp_type type = hw_execute;
- struct aarch64_debug_reg_state *state
- = aarch64_get_debug_reg_state (inferior_ptid.pid ());
-
- gdbarch_breakpoint_from_pc (gdbarch, &addr, &len);
-
- if (show_debug_regs)
- fprintf_unfiltered
- (gdb_stdlog, "remove_hw_breakpoint on entry (addr=0x%08lx, len=%d))\n",
- (unsigned long) addr, len);
-
- ret = aarch64_handle_breakpoint (type, addr, len, 0 /* is_insert */, state);
-
- if (show_debug_regs)
- {
- aarch64_show_debug_reg_state (state,
- "remove_hw_watchpoint", addr, len, type);
- }
-
- return ret;
-}
-
-/* Implement the "insert_watchpoint" target_ops method.
-
- Insert a watchpoint to watch a memory region which starts at
- address ADDR and whose length is LEN bytes. Watch memory accesses
- of the type TYPE. Return 0 on success, -1 on failure. */
-
-int
-aarch64_linux_nat_target::insert_watchpoint (CORE_ADDR addr, int len,
- enum target_hw_bp_type type,
- struct expression *cond)
-{
- int ret;
- struct aarch64_debug_reg_state *state
- = aarch64_get_debug_reg_state (inferior_ptid.pid ());
-
- if (show_debug_regs)
- fprintf_unfiltered (gdb_stdlog,
- "insert_watchpoint on entry (addr=0x%08lx, len=%d)\n",
- (unsigned long) addr, len);
-
- gdb_assert (type != hw_execute);
-
- ret = aarch64_handle_watchpoint (type, addr, len, 1 /* is_insert */, state);
-
- if (show_debug_regs)
- {
- aarch64_show_debug_reg_state (state,
- "insert_watchpoint", addr, len, type);
- }
-
- return ret;
-}
-
-/* Implement the "remove_watchpoint" target_ops method.
- Remove a watchpoint that watched the memory region which starts at
- address ADDR, whose length is LEN bytes, and for accesses of the
- type TYPE. Return 0 on success, -1 on failure. */
-
-int
-aarch64_linux_nat_target::remove_watchpoint (CORE_ADDR addr, int len,
- enum target_hw_bp_type type,
- struct expression *cond)
-{
- int ret;
- struct aarch64_debug_reg_state *state
- = aarch64_get_debug_reg_state (inferior_ptid.pid ());
-
- if (show_debug_regs)
- fprintf_unfiltered (gdb_stdlog,
- "remove_watchpoint on entry (addr=0x%08lx, len=%d)\n",
- (unsigned long) addr, len);
-
- gdb_assert (type != hw_execute);
-
- ret = aarch64_handle_watchpoint (type, addr, len, 0 /* is_insert */, state);
-
- if (show_debug_regs)
- {
- aarch64_show_debug_reg_state (state,
- "remove_watchpoint", addr, len, type);
- }
-
- return ret;
-}
-
-/* Implement the "region_ok_for_hw_watchpoint" target_ops method. */
-
-int
-aarch64_linux_nat_target::region_ok_for_hw_watchpoint (CORE_ADDR addr, int len)
-{
- return aarch64_linux_region_ok_for_watchpoint (addr, len);
-}
-
/* Implement the "stopped_data_address" target_ops method. */
bool
aarch64_linux_nat_target::stopped_data_address (CORE_ADDR *addr_p)
{
siginfo_t siginfo;
- int i;
struct aarch64_debug_reg_state *state;
if (!linux_nat_get_siginfo (inferior_ptid, &siginfo))
@@ -976,44 +770,7 @@ aarch64_linux_nat_target::stopped_data_address (CORE_ADDR *addr_p)
/* Check if the address matches any watched address. */
state = aarch64_get_debug_reg_state (inferior_ptid.pid ());
- for (i = aarch64_num_wp_regs - 1; i >= 0; --i)
- {
- const unsigned int offset
- = aarch64_watchpoint_offset (state->dr_ctrl_wp[i]);
- const unsigned int len = aarch64_watchpoint_length (state->dr_ctrl_wp[i]);
- const CORE_ADDR addr_watch = state->dr_addr_wp[i] + offset;
- const CORE_ADDR addr_watch_aligned = align_down (state->dr_addr_wp[i], 8);
- const CORE_ADDR addr_orig = state->dr_addr_orig_wp[i];
-
- if (state->dr_ref_count_wp[i]
- && DR_CONTROL_ENABLED (state->dr_ctrl_wp[i])
- && addr_trap >= addr_watch_aligned
- && addr_trap < addr_watch + len)
- {
- /* ADDR_TRAP reports the first address of the memory range
- accessed by the CPU, regardless of what was the memory
- range watched. Thus, a large CPU access that straddles
- the ADDR_WATCH..ADDR_WATCH+LEN range may result in an
- ADDR_TRAP that is lower than the
- ADDR_WATCH..ADDR_WATCH+LEN range. E.g.:
-
- addr: | 4 | 5 | 6 | 7 | 8 |
- |---- range watched ----|
- |----------- range accessed ------------|
-
- In this case, ADDR_TRAP will be 4.
-
- To match a watchpoint known to GDB core, we must never
- report *ADDR_P outside of any ADDR_WATCH..ADDR_WATCH+LEN
- range. ADDR_WATCH <= ADDR_TRAP < ADDR_ORIG is a false
- positive on kernels older than 4.10. See PR
- external/20207. */
- *addr_p = addr_orig;
- return true;
- }
- }
-
- return false;
+ return aarch64_stopped_data_address (state, addr_trap, addr_p);
}
/* Implement the "stopped_by_watchpoint" target_ops method. */
@@ -1026,15 +783,6 @@ aarch64_linux_nat_target::stopped_by_watchpoint ()
return stopped_data_address (&addr);
}
-/* Implement the "watchpoint_addr_within_range" target_ops method. */
-
-bool
-aarch64_linux_nat_target::watchpoint_addr_within_range (CORE_ADDR addr,
- CORE_ADDR start, int length)
-{
- return start <= addr && start + length - 1 >= addr;
-}
-
/* Implement the "can_do_single_step" target_ops method. */
int
@@ -1110,32 +858,11 @@ aarch64_linux_nat_target::store_memtags (CORE_ADDR address, size_t len,
return false;
}
-/* Define AArch64 maintenance commands. */
-
-static void
-add_show_debug_regs_command (void)
-{
- /* A maintenance command to enable printing the internal DRi mirror
- variables. */
- add_setshow_boolean_cmd ("show-debug-regs", class_maintenance,
- &show_debug_regs, _("\
-Set whether to show variables that mirror the AArch64 debug registers."), _("\
-Show whether to show variables that mirror the AArch64 debug registers."), _("\
-Use \"on\" to enable, \"off\" to disable.\n\
-If enabled, the debug registers values are shown when GDB inserts\n\
-or removes a hardware breakpoint or watchpoint, and when the inferior\n\
-triggers a breakpoint or watchpoint."),
- NULL,
- NULL,
- &maintenance_set_cmdlist,
- &maintenance_show_cmdlist);
-}
-
void _initialize_aarch64_linux_nat ();
void
_initialize_aarch64_linux_nat ()
{
- add_show_debug_regs_command ();
+ aarch64_initialize_hw_point ();
/* Register the target. */
linux_target = &the_aarch64_linux_nat_target;
diff --git a/gdb/aarch64-linux-tdep.c b/gdb/aarch64-linux-tdep.c
index cb132d5a540..dbebcd4f0e0 100644
--- a/gdb/aarch64-linux-tdep.c
+++ b/gdb/aarch64-linux-tdep.c
@@ -749,6 +749,24 @@ aarch64_linux_iterate_over_regset_sections (struct gdbarch *gdbarch,
AARCH64_LINUX_SIZEOF_MTE_REGSET, &aarch64_linux_mte_regset,
"MTE registers", cb_data);
}
+
+ if (tdep->has_tls ())
+ {
+ const struct regcache_map_entry tls_regmap[] =
+ {
+ { 1, tdep->tls_regnum, 8 },
+ { 0 }
+ };
+
+ const struct regset aarch64_linux_tls_regset =
+ {
+ tls_regmap, regcache_supply_regset, regcache_collect_regset
+ };
+
+ cb (".reg-aarch-tls", AARCH64_LINUX_SIZEOF_TLSREGSET,
+ AARCH64_LINUX_SIZEOF_TLSREGSET, &aarch64_linux_tls_regset,
+ "TLS register", cb_data);
+ }
}
/* Implement the "core_read_description" gdbarch method. */
@@ -757,13 +775,14 @@ static const struct target_desc *
aarch64_linux_core_read_description (struct gdbarch *gdbarch,
struct target_ops *target, bfd *abfd)
{
+ asection *tls = bfd_get_section_by_name (abfd, ".reg-aarch-tls");
CORE_ADDR hwcap = linux_get_hwcap (target);
CORE_ADDR hwcap2 = linux_get_hwcap2 (target);
bool pauth_p = hwcap & AARCH64_HWCAP_PACA;
bool mte_p = hwcap2 & HWCAP2_MTE;
return aarch64_read_description (aarch64_linux_core_read_vq (gdbarch, abfd),
- pauth_p, mte_p);
+ pauth_p, mte_p, tls != nullptr);
}
/* Implementation of `gdbarch_stap_is_single_operand', as defined in
@@ -1489,10 +1508,10 @@ aarch64_linux_syscall_record (struct regcache *regcache,
if (syscall_gdb < 0)
{
- fprintf_unfiltered (gdb_stderr,
- _("Process record and replay target doesn't "
- "support syscall number %s\n"),
- plongest (svc_number));
+ gdb_printf (gdb_stderr,
+ _("Process record and replay target doesn't "
+ "support syscall number %s\n"),
+ plongest (svc_number));
return -1;
}
diff --git a/gdb/aarch64-linux-tdep.h b/gdb/aarch64-linux-tdep.h
index 8ae33efc605..9a7e4339dba 100644
--- a/gdb/aarch64-linux-tdep.h
+++ b/gdb/aarch64-linux-tdep.h
@@ -39,6 +39,9 @@
/* The MTE regset consists of a 64-bit register. */
#define AARCH64_LINUX_SIZEOF_MTE_REGSET (8)
+/* The TLS regset consists of a single register. */
+#define AARCH64_LINUX_SIZEOF_TLSREGSET (X_REGISTER_SIZE)
+
extern const struct regset aarch64_linux_gregset;
extern const struct regset aarch64_linux_fpregset;
diff --git a/gdb/aarch64-nat.c b/gdb/aarch64-nat.c
new file mode 100644
index 00000000000..cd86c384a0e
--- /dev/null
+++ b/gdb/aarch64-nat.c
@@ -0,0 +1,301 @@
+/* Native-dependent code for AArch64.
+
+ Copyright (C) 2011-2022 Free Software Foundation, Inc.
+
+ This file is part of GDB.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#include "defs.h"
+#include "gdbarch.h"
+#include "inferior.h"
+#include "cli/cli-cmds.h"
+#include "aarch64-nat.h"
+
+#include <unordered_map>
+
+/* Hash table storing per-process data. We don't bind this to a
+ per-inferior registry because of targets like x86 GNU/Linux that
+ need to keep track of processes that aren't bound to any inferior
+ (e.g., fork children, checkpoints). */
+
+static std::unordered_map<pid_t, aarch64_debug_reg_state>
+aarch64_debug_process_state;
+
+/* See aarch64-nat.h. */
+
+struct aarch64_debug_reg_state *
+aarch64_lookup_debug_reg_state (pid_t pid)
+{
+ auto it = aarch64_debug_process_state.find (pid);
+ if (it != aarch64_debug_process_state.end ())
+ return &it->second;
+
+ return nullptr;
+}
+
+/* See aarch64-nat.h. */
+
+struct aarch64_debug_reg_state *
+aarch64_get_debug_reg_state (pid_t pid)
+{
+ return &aarch64_debug_process_state[pid];
+}
+
+/* See aarch64-nat.h. */
+
+void
+aarch64_remove_debug_reg_state (pid_t pid)
+{
+ aarch64_debug_process_state.erase (pid);
+}
+
+/* Returns the number of hardware watchpoints of type TYPE that we can
+ set. Value is positive if we can set CNT watchpoints, zero if
+ setting watchpoints of type TYPE is not supported, and negative if
+ CNT is more than the maximum number of watchpoints of type TYPE
+ that we can support. TYPE is one of bp_hardware_watchpoint,
+ bp_read_watchpoint, bp_write_watchpoint, or bp_hardware_breakpoint.
+ CNT is the number of such watchpoints used so far (including this
+ one). OTHERTYPE is non-zero if other types of watchpoints are
+ currently enabled. */
+
+int
+aarch64_can_use_hw_breakpoint (enum bptype type, int cnt, int othertype)
+{
+ if (type == bp_hardware_watchpoint || type == bp_read_watchpoint
+ || type == bp_access_watchpoint || type == bp_watchpoint)
+ {
+ if (aarch64_num_wp_regs == 0)
+ return 0;
+ }
+ else if (type == bp_hardware_breakpoint)
+ {
+ if (aarch64_num_bp_regs == 0)
+ return 0;
+ }
+ else
+ gdb_assert_not_reached ("unexpected breakpoint type");
+
+ /* We always return 1 here because we don't have enough information
+ about possible overlap of addresses that they want to watch. As an
+ extreme example, consider the case where all the watchpoints watch
+ the same address and the same region length: then we can handle a
+ virtually unlimited number of watchpoints, due to debug register
+ sharing implemented via reference counts. */
+ return 1;
+}
+
+/* Insert a hardware-assisted breakpoint at BP_TGT->reqstd_address.
+ Return 0 on success, -1 on failure. */
+
+int
+aarch64_insert_hw_breakpoint (struct gdbarch *gdbarch,
+ struct bp_target_info *bp_tgt)
+{
+ int ret;
+ CORE_ADDR addr = bp_tgt->placed_address = bp_tgt->reqstd_address;
+ int len;
+ const enum target_hw_bp_type type = hw_execute;
+ struct aarch64_debug_reg_state *state
+ = aarch64_get_debug_reg_state (inferior_ptid.pid ());
+
+ gdbarch_breakpoint_from_pc (gdbarch, &addr, &len);
+
+ if (show_debug_regs)
+ gdb_printf (gdb_stdlog,
+ "insert_hw_breakpoint on entry (addr=0x%08lx, len=%d))\n",
+ (unsigned long) addr, len);
+
+ ret = aarch64_handle_breakpoint (type, addr, len, 1 /* is_insert */,
+ inferior_ptid, state);
+
+ if (show_debug_regs)
+ {
+ aarch64_show_debug_reg_state (state,
+ "insert_hw_breakpoint", addr, len, type);
+ }
+
+ return ret;
+}
+
+/* Remove a hardware-assisted breakpoint at BP_TGT->placed_address.
+ Return 0 on success, -1 on failure. */
+
+int
+aarch64_remove_hw_breakpoint (struct gdbarch *gdbarch,
+ struct bp_target_info *bp_tgt)
+{
+ int ret;
+ CORE_ADDR addr = bp_tgt->placed_address;
+ int len = 4;
+ const enum target_hw_bp_type type = hw_execute;
+ struct aarch64_debug_reg_state *state
+ = aarch64_get_debug_reg_state (inferior_ptid.pid ());
+
+ gdbarch_breakpoint_from_pc (gdbarch, &addr, &len);
+
+ if (show_debug_regs)
+ gdb_printf (gdb_stdlog,
+ "remove_hw_breakpoint on entry (addr=0x%08lx, len=%d))\n",
+ (unsigned long) addr, len);
+
+ ret = aarch64_handle_breakpoint (type, addr, len, 0 /* is_insert */,
+ inferior_ptid, state);
+
+ if (show_debug_regs)
+ {
+ aarch64_show_debug_reg_state (state,
+ "remove_hw_watchpoint", addr, len, type);
+ }
+
+ return ret;
+}
+
+/* Insert a watchpoint to watch a memory region which starts at
+ address ADDR and whose length is LEN bytes. Watch memory accesses
+ of the type TYPE. Return 0 on success, -1 on failure. */
+
+int
+aarch64_insert_watchpoint (CORE_ADDR addr, int len, enum target_hw_bp_type type,
+ struct expression *cond)
+{
+ int ret;
+ struct aarch64_debug_reg_state *state
+ = aarch64_get_debug_reg_state (inferior_ptid.pid ());
+
+ if (show_debug_regs)
+ gdb_printf (gdb_stdlog,
+ "insert_watchpoint on entry (addr=0x%08lx, len=%d)\n",
+ (unsigned long) addr, len);
+
+ gdb_assert (type != hw_execute);
+
+ ret = aarch64_handle_watchpoint (type, addr, len, 1 /* is_insert */,
+ inferior_ptid, state);
+
+ if (show_debug_regs)
+ {
+ aarch64_show_debug_reg_state (state,
+ "insert_watchpoint", addr, len, type);
+ }
+
+ return ret;
+}
+
+/* Remove a watchpoint that watched the memory region which starts at
+ address ADDR, whose length is LEN bytes, and for accesses of the
+ type TYPE. Return 0 on success, -1 on failure. */
+
+int
+aarch64_remove_watchpoint (CORE_ADDR addr, int len, enum target_hw_bp_type type,
+ struct expression *cond)
+{
+ int ret;
+ struct aarch64_debug_reg_state *state
+ = aarch64_get_debug_reg_state (inferior_ptid.pid ());
+
+ if (show_debug_regs)
+ gdb_printf (gdb_stdlog,
+ "remove_watchpoint on entry (addr=0x%08lx, len=%d)\n",
+ (unsigned long) addr, len);
+
+ gdb_assert (type != hw_execute);
+
+ ret = aarch64_handle_watchpoint (type, addr, len, 0 /* is_insert */,
+ inferior_ptid, state);
+
+ if (show_debug_regs)
+ {
+ aarch64_show_debug_reg_state (state,
+ "remove_watchpoint", addr, len, type);
+ }
+
+ return ret;
+}
+
+/* See aarch64-nat.h. */
+
+bool
+aarch64_stopped_data_address (const struct aarch64_debug_reg_state *state,
+ CORE_ADDR addr_trap, CORE_ADDR *addr_p)
+{
+ int i;
+
+ for (i = aarch64_num_wp_regs - 1; i >= 0; --i)
+ {
+ const unsigned int offset
+ = aarch64_watchpoint_offset (state->dr_ctrl_wp[i]);
+ const unsigned int len = aarch64_watchpoint_length (state->dr_ctrl_wp[i]);
+ const CORE_ADDR addr_watch = state->dr_addr_wp[i] + offset;
+ const CORE_ADDR addr_watch_aligned = align_down (state->dr_addr_wp[i], 8);
+ const CORE_ADDR addr_orig = state->dr_addr_orig_wp[i];
+
+ if (state->dr_ref_count_wp[i]
+ && DR_CONTROL_ENABLED (state->dr_ctrl_wp[i])
+ && addr_trap >= addr_watch_aligned
+ && addr_trap < addr_watch + len)
+ {
+ /* ADDR_TRAP reports the first address of the memory range
+ accessed by the CPU, regardless of what was the memory
+ range watched. Thus, a large CPU access that straddles
+ the ADDR_WATCH..ADDR_WATCH+LEN range may result in an
+ ADDR_TRAP that is lower than the
+ ADDR_WATCH..ADDR_WATCH+LEN range. E.g.:
+
+ addr: | 4 | 5 | 6 | 7 | 8 |
+ |---- range watched ----|
+ |----------- range accessed ------------|
+
+ In this case, ADDR_TRAP will be 4.
+
+ To match a watchpoint known to GDB core, we must never
+ report *ADDR_P outside of any ADDR_WATCH..ADDR_WATCH+LEN
+ range. ADDR_WATCH <= ADDR_TRAP < ADDR_ORIG is a false
+ positive on kernels older than 4.10. See PR
+ external/20207. */
+ *addr_p = addr_orig;
+ return true;
+ }
+ }
+
+ return false;
+}
+
+/* Define AArch64 maintenance commands. */
+
+static void
+add_show_debug_regs_command (void)
+{
+ /* A maintenance command to enable printing the internal DRi mirror
+ variables. */
+ add_setshow_boolean_cmd ("show-debug-regs", class_maintenance,
+ &show_debug_regs, _("\
+Set whether to show variables that mirror the AArch64 debug registers."), _("\
+Show whether to show variables that mirror the AArch64 debug registers."), _("\
+Use \"on\" to enable, \"off\" to disable.\n\
+If enabled, the debug registers values are shown when GDB inserts\n\
+or removes a hardware breakpoint or watchpoint, and when the inferior\n\
+triggers a breakpoint or watchpoint."),
+ NULL,
+ NULL,
+ &maintenance_set_cmdlist,
+ &maintenance_show_cmdlist);
+}
+
+void
+aarch64_initialize_hw_point ()
+{
+ add_show_debug_regs_command ();
+}
diff --git a/gdb/aarch64-nat.h b/gdb/aarch64-nat.h
new file mode 100644
index 00000000000..56e720f02ee
--- /dev/null
+++ b/gdb/aarch64-nat.h
@@ -0,0 +1,109 @@
+/* Native-dependent code for AArch64.
+
+ Copyright (C) 2011-2022 Free Software Foundation, Inc.
+
+ This file is part of GDB.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#ifndef AARCH64_NAT_H
+#define AARCH64_NAT_H
+
+#include "breakpoint.h"
+#include "nat/aarch64-hw-point.h"
+#include "target.h"
+
+/* Hardware-assisted breakpoints and watchpoints. */
+
+/* Initialize platform-independent state for hardware-assisted
+ breakpoints and watchpoints. */
+
+void aarch64_initialize_hw_point ();
+
+/* Return the debug register state for process PID. If no existing
+ state is found for this process, return nullptr. */
+
+struct aarch64_debug_reg_state *aarch64_lookup_debug_reg_state (pid_t pid);
+
+/* Return the debug register state for process PID. If no existing
+ state is found for this process, create new state. */
+
+struct aarch64_debug_reg_state *aarch64_get_debug_reg_state (pid_t pid);
+
+/* Remove any existing per-process debug state for process PID. */
+
+void aarch64_remove_debug_reg_state (pid_t pid);
+
+/* Helper for the "stopped_data_address" target method. Returns TRUE
+ if a hardware watchpoint trap at ADDR_TRAP matches a set
+ watchpoint. The address of the matched watchpoint is returned in
+ *ADDR_P. */
+
+bool aarch64_stopped_data_address (const struct aarch64_debug_reg_state *state,
+ CORE_ADDR addr_trap, CORE_ADDR *addr_p);
+
+/* Helper functions used by aarch64_nat_target below. See their
+ definitions. */
+
+int aarch64_can_use_hw_breakpoint (enum bptype type, int cnt, int othertype);
+int aarch64_insert_watchpoint (CORE_ADDR addr, int len,
+ enum target_hw_bp_type type,
+ struct expression *cond);
+int aarch64_remove_watchpoint (CORE_ADDR addr, int len,
+ enum target_hw_bp_type type,
+ struct expression *cond);
+int aarch64_insert_hw_breakpoint (struct gdbarch *gdbarch,
+ struct bp_target_info *bp_tgt);
+int aarch64_remove_hw_breakpoint (struct gdbarch *gdbarch,
+ struct bp_target_info *bp_tgt);
+int aarch64_stopped_by_hw_breakpoint ();
+
+/* Convenience template mixin used to add aarch64 watchpoints support to a
+ target. */
+
+template <typename BaseTarget>
+struct aarch64_nat_target : public BaseTarget
+{
+ /* Hook in common aarch64 hardware watchpoints/breakpoints support. */
+
+ int can_use_hw_breakpoint (enum bptype type, int cnt, int othertype) override
+ { return aarch64_can_use_hw_breakpoint (type, cnt, othertype); }
+
+ int region_ok_for_hw_watchpoint (CORE_ADDR addr, int len) override
+ { return aarch64_region_ok_for_watchpoint (addr, len); }
+
+ int insert_watchpoint (CORE_ADDR addr, int len,
+ enum target_hw_bp_type type,
+ struct expression *cond) override
+ { return aarch64_insert_watchpoint (addr, len, type, cond); }
+
+ int remove_watchpoint (CORE_ADDR addr, int len,
+ enum target_hw_bp_type type,
+ struct expression *cond) override
+ { return aarch64_remove_watchpoint (addr, len, type, cond); }
+
+ int insert_hw_breakpoint (struct gdbarch *gdbarch,
+ struct bp_target_info *bp_tgt) override
+ { return aarch64_insert_hw_breakpoint (gdbarch, bp_tgt); }
+
+ int remove_hw_breakpoint (struct gdbarch *gdbarch,
+ struct bp_target_info *bp_tgt) override
+ { return aarch64_remove_hw_breakpoint (gdbarch, bp_tgt); }
+
+ bool watchpoint_addr_within_range (CORE_ADDR addr, CORE_ADDR start,
+ int length) override
+ { return start <= addr && start + length - 1 >= addr; }
+};
+
+#endif /* AARCH64_NAT_H */
diff --git a/gdb/aarch64-tdep.c b/gdb/aarch64-tdep.c
index 63d626f90ac..9d06ebfe27c 100644
--- a/gdb/aarch64-tdep.c
+++ b/gdb/aarch64-tdep.c
@@ -58,7 +58,7 @@
#define HA_MAX_NUM_FLDS 4
/* All possible aarch64 target descriptors. */
-static target_desc *tdesc_aarch64_list[AARCH64_MAX_SVE_VQ + 1][2/*pauth*/][2 /* mte */];
+static target_desc *tdesc_aarch64_list[AARCH64_MAX_SVE_VQ + 1][2/*pauth*/][2 /* mte */][2 /* tls */];
/* The standard register names, and all the valid aliases for them. */
static const struct
@@ -214,7 +214,7 @@ static void
show_aarch64_debug (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("AArch64 debugging is %s.\n"), value);
+ gdb_printf (file, _("AArch64 debugging is %s.\n"), value);
}
namespace {
@@ -2362,7 +2362,8 @@ aarch64_return_in_memory (struct gdbarch *gdbarch, struct type *type)
return 0;
}
- if (TYPE_LENGTH (type) > 16)
+ if (TYPE_LENGTH (type) > 16
+ || !language_pass_by_reference (type).trivially_copyable)
{
/* PCS B.6 Aggregates larger than 16 bytes are passed by
invisible reference. */
@@ -2474,8 +2475,24 @@ aarch64_return_value (struct gdbarch *gdbarch, struct value *func_value,
{
if (aarch64_return_in_memory (gdbarch, valtype))
{
+ /* From the AAPCS64's Result Return section:
+
+ "Otherwise, the caller shall reserve a block of memory of
+ sufficient size and alignment to hold the result. The address
+ of the memory block shall be passed as an additional argument to
+ the function in x8. */
+
aarch64_debug_printf ("return value in memory");
- return RETURN_VALUE_STRUCT_CONVENTION;
+
+ if (readbuf)
+ {
+ CORE_ADDR addr;
+
+ regcache->cooked_read (AARCH64_STRUCT_RETURN_REGNUM, &addr);
+ read_memory (addr, readbuf, TYPE_LENGTH (valtype));
+ }
+
+ return RETURN_VALUE_ABI_RETURNS_ADDRESS;
}
}
@@ -2678,7 +2695,7 @@ aarch64_pseudo_register_type (struct gdbarch *gdbarch, int regnum)
static int
aarch64_pseudo_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
- struct reggroup *group)
+ const struct reggroup *group)
{
aarch64_gdbarch_tdep *tdep = (aarch64_gdbarch_tdep *) gdbarch_tdep (gdbarch);
@@ -3310,21 +3327,23 @@ aarch64_displaced_step_hw_singlestep (struct gdbarch *gdbarch)
If VQ is zero then it is assumed SVE is not supported.
(It is not possible to set VQ to zero on an SVE system).
- MTE_P indicates the presence of the Memory Tagging Extension feature. */
+ MTE_P indicates the presence of the Memory Tagging Extension feature.
+
+ TLS_P indicates the presence of the Thread Local Storage feature. */
const target_desc *
-aarch64_read_description (uint64_t vq, bool pauth_p, bool mte_p)
+aarch64_read_description (uint64_t vq, bool pauth_p, bool mte_p, bool tls_p)
{
if (vq > AARCH64_MAX_SVE_VQ)
error (_("VQ is %" PRIu64 ", maximum supported value is %d"), vq,
AARCH64_MAX_SVE_VQ);
- struct target_desc *tdesc = tdesc_aarch64_list[vq][pauth_p][mte_p];
+ struct target_desc *tdesc = tdesc_aarch64_list[vq][pauth_p][mte_p][tls_p];
if (tdesc == NULL)
{
- tdesc = aarch64_create_target_description (vq, pauth_p, mte_p);
- tdesc_aarch64_list[vq][pauth_p][mte_p] = tdesc;
+ tdesc = aarch64_create_target_description (vq, pauth_p, mte_p, tls_p);
+ tdesc_aarch64_list[vq][pauth_p][mte_p][tls_p] = tdesc;
}
return tdesc;
@@ -3350,20 +3369,6 @@ aarch64_get_tdesc_vq (const struct target_desc *tdesc)
return sve_vq_from_vl (vl);
}
-/* Add all the expected register sets into GDBARCH. */
-
-static void
-aarch64_add_reggroups (struct gdbarch *gdbarch)
-{
- reggroup_add (gdbarch, general_reggroup);
- reggroup_add (gdbarch, float_reggroup);
- reggroup_add (gdbarch, system_reggroup);
- reggroup_add (gdbarch, vector_reggroup);
- reggroup_add (gdbarch, all_reggroup);
- reggroup_add (gdbarch, save_reggroup);
- reggroup_add (gdbarch, restore_reggroup);
-}
-
/* Implement the "cannot_store_register" gdbarch method. */
static int
@@ -3379,6 +3384,25 @@ aarch64_cannot_store_register (struct gdbarch *gdbarch, int regnum)
|| regnum == AARCH64_PAUTH_CMASK_REGNUM (tdep->pauth_reg_base));
}
+/* Implement the stack_frame_destroyed_p gdbarch method. */
+
+static int
+aarch64_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc)
+{
+ CORE_ADDR func_start, func_end;
+ if (!find_pc_partial_function (pc, NULL, &func_start, &func_end))
+ return 0;
+
+ enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
+ uint32_t insn = read_memory_unsigned_integer (pc, 4, byte_order_for_code);
+
+ aarch64_inst inst;
+ if (aarch64_decode_insn (insn, &inst, 1, nullptr) != 0)
+ return 0;
+
+ return streq (inst.opcode->name, "ret");
+}
+
/* Initialize the current architecture based on INFO. If possible,
re-use an architecture from ARCHES, which is a list of
architectures already created during this debugging session.
@@ -3394,7 +3418,7 @@ aarch64_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
bool valid_p = true;
int i, num_regs = 0, num_pseudo_regs = 0;
int first_pauth_regnum = -1, pauth_ra_state_offset = -1;
- int first_mte_regnum = -1;
+ int first_mte_regnum = -1, tls_regnum = -1;
/* Use the vector length passed via the target info. Here -1 is used for no
SVE, and 0 is unset. If unset then use the vector length from the existing
@@ -3426,7 +3450,7 @@ aarch64_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
value. */
const struct target_desc *tdesc = info.target_desc;
if (!tdesc_has_registers (tdesc) || vq != aarch64_get_tdesc_vq (tdesc))
- tdesc = aarch64_read_description (vq, false, false);
+ tdesc = aarch64_read_description (vq, false, false, false);
gdb_assert (tdesc);
feature_core = tdesc_find_feature (tdesc,"org.gnu.gdb.aarch64.core");
@@ -3435,6 +3459,8 @@ aarch64_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
feature_pauth = tdesc_find_feature (tdesc, "org.gnu.gdb.aarch64.pauth");
const struct tdesc_feature *feature_mte
= tdesc_find_feature (tdesc, "org.gnu.gdb.aarch64.mte");
+ const struct tdesc_feature *feature_tls
+ = tdesc_find_feature (tdesc, "org.gnu.gdb.aarch64.tls");
if (feature_core == nullptr)
return nullptr;
@@ -3489,6 +3515,18 @@ aarch64_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
num_pseudo_regs += 32; /* add the Bn scalar register pseudos */
}
+ /* Add the TLS register. */
+ if (feature_tls != nullptr)
+ {
+ tls_regnum = num_regs;
+ /* Validate the descriptor provides the mandatory TLS register
+ and allocate its number. */
+ valid_p = tdesc_numbered_register (feature_tls, tdesc_data.get (),
+ tls_regnum, "tpidr");
+
+ num_regs++;
+ }
+
/* Add the pauth registers. */
if (feature_pauth != NULL)
{
@@ -3537,6 +3575,7 @@ aarch64_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
tdep->pauth_ra_state_regnum = (feature_pauth == NULL) ? -1
: pauth_ra_state_offset + num_regs;
tdep->mte_reg_base = first_mte_regnum;
+ tdep->tls_regnum = tls_regnum;
set_gdbarch_push_dummy_call (gdbarch, aarch64_push_dummy_call);
set_gdbarch_frame_align (gdbarch, aarch64_frame_align);
@@ -3582,9 +3621,12 @@ aarch64_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
set_gdbarch_wchar_signed (gdbarch, 0);
set_gdbarch_float_format (gdbarch, floatformats_ieee_single);
set_gdbarch_double_format (gdbarch, floatformats_ieee_double);
- set_gdbarch_long_double_format (gdbarch, floatformats_ia64_quad);
+ set_gdbarch_long_double_format (gdbarch, floatformats_ieee_quad);
set_gdbarch_type_align (gdbarch, aarch64_type_align);
+ /* Detect whether PC is at a point where the stack has been destroyed. */
+ set_gdbarch_stack_frame_destroyed_p (gdbarch, aarch64_stack_frame_destroyed_p);
+
/* Internal <-> external register number maps. */
set_gdbarch_dwarf2_reg_to_regnum (gdbarch, aarch64_dwarf_reg_to_regnum);
@@ -3597,9 +3639,6 @@ aarch64_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
/* Virtual tables. */
set_gdbarch_vbit_in_delta (gdbarch, 1);
- /* Register architecture. */
- aarch64_add_reggroups (gdbarch);
-
/* Hook in the ABI-specific overrides, if they have been registered. */
info.target_desc = tdesc;
info.tdesc_data = tdesc_data.get ();
@@ -3652,8 +3691,8 @@ aarch64_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
if (tdep == NULL)
return;
- fprintf_filtered (file, _("aarch64_dump_tdep: Lowest pc = 0x%s"),
- paddress (gdbarch, tdep->lowest_pc));
+ gdb_printf (file, _("aarch64_dump_tdep: Lowest pc = 0x%s"),
+ paddress (gdbarch, tdep->lowest_pc));
}
#if GDB_SELF_TEST
@@ -3708,7 +3747,7 @@ When on, AArch64 specific debugging is enabled."),
if (mem_len) \
{ \
MEMS = XNEWVEC (struct aarch64_mem_r, mem_len); \
- memcpy(&MEMS->len, &RECORD_BUF[0], \
+ memcpy(MEMS, &RECORD_BUF[0], \
sizeof(struct aarch64_mem_r) * LENGTH); \
} \
} \
@@ -4657,11 +4696,11 @@ aarch64_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
ret = aarch64_record_decode_insn_handler (&aarch64_record);
if (ret == AARCH64_RECORD_UNSUPPORTED)
{
- fprintf_unfiltered (gdb_stderr,
- _("Process record does not support instruction "
- "0x%0x at address %s.\n"),
- aarch64_record.aarch64_insn,
- paddress (gdbarch, insn_addr));
+ gdb_printf (gdb_stderr,
+ _("Process record does not support instruction "
+ "0x%0x at address %s.\n"),
+ aarch64_record.aarch64_insn,
+ paddress (gdbarch, insn_addr));
ret = -1;
}
diff --git a/gdb/aarch64-tdep.h b/gdb/aarch64-tdep.h
index 60a9d5a29c2..e4cdebb6311 100644
--- a/gdb/aarch64-tdep.h
+++ b/gdb/aarch64-tdep.h
@@ -111,10 +111,18 @@ struct aarch64_gdbarch_tdep : gdbarch_tdep
{
return mte_reg_base != -1;
}
+
+ /* TLS register. This is -1 if the TLS register is not available. */
+ int tls_regnum = 0;
+
+ bool has_tls() const
+ {
+ return tls_regnum != -1;
+ }
};
const target_desc *aarch64_read_description (uint64_t vq, bool pauth_p,
- bool mte_p);
+ bool mte_p, bool tls_p);
extern int aarch64_process_record (struct gdbarch *gdbarch,
struct regcache *regcache, CORE_ADDR addr);
diff --git a/gdb/acinclude.m4 b/gdb/acinclude.m4
index 2bdc1cedc26..95ff2b6f35e 100644
--- a/gdb/acinclude.m4
+++ b/gdb/acinclude.m4
@@ -15,6 +15,9 @@ m4_include(acx_configure_dir.m4)
# This gets GDB_AC_TRANSFORM.
m4_include(transform.m4)
+# This get AM_GDB_COMPILER_TYPE.
+m4_include(../gdbsupport/compiler-type.m4)
+
# This gets AM_GDB_WARNINGS.
m4_include(../gdbsupport/warning.m4)
diff --git a/gdb/ada-casefold.h b/gdb/ada-casefold.h
new file mode 100644
index 00000000000..f790f37e671
--- /dev/null
+++ b/gdb/ada-casefold.h
@@ -0,0 +1,1345 @@
+/* *INDENT-OFF* */ /* THIS FILE IS GENERATED -*- buffer-read-only: t -*- */
+/* vi:set ro: */
+
+/* UTF-32 case-folding for GDB
+
+ Copyright (C) 2022 Free Software Foundation, Inc.
+
+ This file is part of GDB.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+/* To regenerate this file, run:
+ ./ada-unicode.py
+*/
+
+ {65, 90, 0, 32},
+ {97, 122, -32, 0},
+ {181, 181, 743, 0},
+ {192, 214, 0, 32},
+ {216, 222, 0, 32},
+ {224, 246, -32, 0},
+ {248, 254, -32, 0},
+ {255, 255, 121, 0},
+ {256, 256, 0, 1},
+ {257, 257, -1, 0},
+ {258, 258, 0, 1},
+ {259, 259, -1, 0},
+ {260, 260, 0, 1},
+ {261, 261, -1, 0},
+ {262, 262, 0, 1},
+ {263, 263, -1, 0},
+ {264, 264, 0, 1},
+ {265, 265, -1, 0},
+ {266, 266, 0, 1},
+ {267, 267, -1, 0},
+ {268, 268, 0, 1},
+ {269, 269, -1, 0},
+ {270, 270, 0, 1},
+ {271, 271, -1, 0},
+ {272, 272, 0, 1},
+ {273, 273, -1, 0},
+ {274, 274, 0, 1},
+ {275, 275, -1, 0},
+ {276, 276, 0, 1},
+ {277, 277, -1, 0},
+ {278, 278, 0, 1},
+ {279, 279, -1, 0},
+ {280, 280, 0, 1},
+ {281, 281, -1, 0},
+ {282, 282, 0, 1},
+ {283, 283, -1, 0},
+ {284, 284, 0, 1},
+ {285, 285, -1, 0},
+ {286, 286, 0, 1},
+ {287, 287, -1, 0},
+ {288, 288, 0, 1},
+ {289, 289, -1, 0},
+ {290, 290, 0, 1},
+ {291, 291, -1, 0},
+ {292, 292, 0, 1},
+ {293, 293, -1, 0},
+ {294, 294, 0, 1},
+ {295, 295, -1, 0},
+ {296, 296, 0, 1},
+ {297, 297, -1, 0},
+ {298, 298, 0, 1},
+ {299, 299, -1, 0},
+ {300, 300, 0, 1},
+ {301, 301, -1, 0},
+ {302, 302, 0, 1},
+ {303, 303, -1, 0},
+ {305, 305, -232, 0},
+ {306, 306, 0, 1},
+ {307, 307, -1, 0},
+ {308, 308, 0, 1},
+ {309, 309, -1, 0},
+ {310, 310, 0, 1},
+ {311, 311, -1, 0},
+ {313, 313, 0, 1},
+ {314, 314, -1, 0},
+ {315, 315, 0, 1},
+ {316, 316, -1, 0},
+ {317, 317, 0, 1},
+ {318, 318, -1, 0},
+ {319, 319, 0, 1},
+ {320, 320, -1, 0},
+ {321, 321, 0, 1},
+ {322, 322, -1, 0},
+ {323, 323, 0, 1},
+ {324, 324, -1, 0},
+ {325, 325, 0, 1},
+ {326, 326, -1, 0},
+ {327, 327, 0, 1},
+ {328, 328, -1, 0},
+ {330, 330, 0, 1},
+ {331, 331, -1, 0},
+ {332, 332, 0, 1},
+ {333, 333, -1, 0},
+ {334, 334, 0, 1},
+ {335, 335, -1, 0},
+ {336, 336, 0, 1},
+ {337, 337, -1, 0},
+ {338, 338, 0, 1},
+ {339, 339, -1, 0},
+ {340, 340, 0, 1},
+ {341, 341, -1, 0},
+ {342, 342, 0, 1},
+ {343, 343, -1, 0},
+ {344, 344, 0, 1},
+ {345, 345, -1, 0},
+ {346, 346, 0, 1},
+ {347, 347, -1, 0},
+ {348, 348, 0, 1},
+ {349, 349, -1, 0},
+ {350, 350, 0, 1},
+ {351, 351, -1, 0},
+ {352, 352, 0, 1},
+ {353, 353, -1, 0},
+ {354, 354, 0, 1},
+ {355, 355, -1, 0},
+ {356, 356, 0, 1},
+ {357, 357, -1, 0},
+ {358, 358, 0, 1},
+ {359, 359, -1, 0},
+ {360, 360, 0, 1},
+ {361, 361, -1, 0},
+ {362, 362, 0, 1},
+ {363, 363, -1, 0},
+ {364, 364, 0, 1},
+ {365, 365, -1, 0},
+ {366, 366, 0, 1},
+ {367, 367, -1, 0},
+ {368, 368, 0, 1},
+ {369, 369, -1, 0},
+ {370, 370, 0, 1},
+ {371, 371, -1, 0},
+ {372, 372, 0, 1},
+ {373, 373, -1, 0},
+ {374, 374, 0, 1},
+ {375, 375, -1, 0},
+ {376, 376, 0, -121},
+ {377, 377, 0, 1},
+ {378, 378, -1, 0},
+ {379, 379, 0, 1},
+ {380, 380, -1, 0},
+ {381, 381, 0, 1},
+ {382, 382, -1, 0},
+ {383, 383, -300, 0},
+ {384, 384, 195, 0},
+ {385, 385, 0, 210},
+ {386, 386, 0, 1},
+ {387, 387, -1, 0},
+ {388, 388, 0, 1},
+ {389, 389, -1, 0},
+ {390, 390, 0, 206},
+ {391, 391, 0, 1},
+ {392, 392, -1, 0},
+ {393, 394, 0, 205},
+ {395, 395, 0, 1},
+ {396, 396, -1, 0},
+ {398, 398, 0, 79},
+ {399, 399, 0, 202},
+ {400, 400, 0, 203},
+ {401, 401, 0, 1},
+ {402, 402, -1, 0},
+ {403, 403, 0, 205},
+ {404, 404, 0, 207},
+ {405, 405, 97, 0},
+ {406, 406, 0, 211},
+ {407, 407, 0, 209},
+ {408, 408, 0, 1},
+ {409, 409, -1, 0},
+ {410, 410, 163, 0},
+ {412, 412, 0, 211},
+ {413, 413, 0, 213},
+ {414, 414, 130, 0},
+ {415, 415, 0, 214},
+ {416, 416, 0, 1},
+ {417, 417, -1, 0},
+ {418, 418, 0, 1},
+ {419, 419, -1, 0},
+ {420, 420, 0, 1},
+ {421, 421, -1, 0},
+ {422, 422, 0, 218},
+ {423, 423, 0, 1},
+ {424, 424, -1, 0},
+ {425, 425, 0, 218},
+ {428, 428, 0, 1},
+ {429, 429, -1, 0},
+ {430, 430, 0, 218},
+ {431, 431, 0, 1},
+ {432, 432, -1, 0},
+ {433, 434, 0, 217},
+ {435, 435, 0, 1},
+ {436, 436, -1, 0},
+ {437, 437, 0, 1},
+ {438, 438, -1, 0},
+ {439, 439, 0, 219},
+ {440, 440, 0, 1},
+ {441, 441, -1, 0},
+ {444, 444, 0, 1},
+ {445, 445, -1, 0},
+ {447, 447, 56, 0},
+ {452, 452, 0, 2},
+ {453, 453, -1, 1},
+ {454, 454, -2, 0},
+ {455, 455, 0, 2},
+ {456, 456, -1, 1},
+ {457, 457, -2, 0},
+ {458, 458, 0, 2},
+ {459, 459, -1, 1},
+ {460, 460, -2, 0},
+ {461, 461, 0, 1},
+ {462, 462, -1, 0},
+ {463, 463, 0, 1},
+ {464, 464, -1, 0},
+ {465, 465, 0, 1},
+ {466, 466, -1, 0},
+ {467, 467, 0, 1},
+ {468, 468, -1, 0},
+ {469, 469, 0, 1},
+ {470, 470, -1, 0},
+ {471, 471, 0, 1},
+ {472, 472, -1, 0},
+ {473, 473, 0, 1},
+ {474, 474, -1, 0},
+ {475, 475, 0, 1},
+ {476, 476, -1, 0},
+ {477, 477, -79, 0},
+ {478, 478, 0, 1},
+ {479, 479, -1, 0},
+ {480, 480, 0, 1},
+ {481, 481, -1, 0},
+ {482, 482, 0, 1},
+ {483, 483, -1, 0},
+ {484, 484, 0, 1},
+ {485, 485, -1, 0},
+ {486, 486, 0, 1},
+ {487, 487, -1, 0},
+ {488, 488, 0, 1},
+ {489, 489, -1, 0},
+ {490, 490, 0, 1},
+ {491, 491, -1, 0},
+ {492, 492, 0, 1},
+ {493, 493, -1, 0},
+ {494, 494, 0, 1},
+ {495, 495, -1, 0},
+ {497, 497, 0, 2},
+ {498, 498, -1, 1},
+ {499, 499, -2, 0},
+ {500, 500, 0, 1},
+ {501, 501, -1, 0},
+ {502, 502, 0, -97},
+ {503, 503, 0, -56},
+ {504, 504, 0, 1},
+ {505, 505, -1, 0},
+ {506, 506, 0, 1},
+ {507, 507, -1, 0},
+ {508, 508, 0, 1},
+ {509, 509, -1, 0},
+ {510, 510, 0, 1},
+ {511, 511, -1, 0},
+ {512, 512, 0, 1},
+ {513, 513, -1, 0},
+ {514, 514, 0, 1},
+ {515, 515, -1, 0},
+ {516, 516, 0, 1},
+ {517, 517, -1, 0},
+ {518, 518, 0, 1},
+ {519, 519, -1, 0},
+ {520, 520, 0, 1},
+ {521, 521, -1, 0},
+ {522, 522, 0, 1},
+ {523, 523, -1, 0},
+ {524, 524, 0, 1},
+ {525, 525, -1, 0},
+ {526, 526, 0, 1},
+ {527, 527, -1, 0},
+ {528, 528, 0, 1},
+ {529, 529, -1, 0},
+ {530, 530, 0, 1},
+ {531, 531, -1, 0},
+ {532, 532, 0, 1},
+ {533, 533, -1, 0},
+ {534, 534, 0, 1},
+ {535, 535, -1, 0},
+ {536, 536, 0, 1},
+ {537, 537, -1, 0},
+ {538, 538, 0, 1},
+ {539, 539, -1, 0},
+ {540, 540, 0, 1},
+ {541, 541, -1, 0},
+ {542, 542, 0, 1},
+ {543, 543, -1, 0},
+ {544, 544, 0, -130},
+ {546, 546, 0, 1},
+ {547, 547, -1, 0},
+ {548, 548, 0, 1},
+ {549, 549, -1, 0},
+ {550, 550, 0, 1},
+ {551, 551, -1, 0},
+ {552, 552, 0, 1},
+ {553, 553, -1, 0},
+ {554, 554, 0, 1},
+ {555, 555, -1, 0},
+ {556, 556, 0, 1},
+ {557, 557, -1, 0},
+ {558, 558, 0, 1},
+ {559, 559, -1, 0},
+ {560, 560, 0, 1},
+ {561, 561, -1, 0},
+ {562, 562, 0, 1},
+ {563, 563, -1, 0},
+ {570, 570, 0, 10795},
+ {571, 571, 0, 1},
+ {572, 572, -1, 0},
+ {573, 573, 0, -163},
+ {574, 574, 0, 10792},
+ {575, 576, 10815, 0},
+ {577, 577, 0, 1},
+ {578, 578, -1, 0},
+ {579, 579, 0, -195},
+ {580, 580, 0, 69},
+ {581, 581, 0, 71},
+ {582, 582, 0, 1},
+ {583, 583, -1, 0},
+ {584, 584, 0, 1},
+ {585, 585, -1, 0},
+ {586, 586, 0, 1},
+ {587, 587, -1, 0},
+ {588, 588, 0, 1},
+ {589, 589, -1, 0},
+ {590, 590, 0, 1},
+ {591, 591, -1, 0},
+ {592, 592, 10783, 0},
+ {593, 593, 10780, 0},
+ {594, 594, 10782, 0},
+ {595, 595, -210, 0},
+ {596, 596, -206, 0},
+ {598, 599, -205, 0},
+ {601, 601, -202, 0},
+ {603, 603, -203, 0},
+ {604, 604, 42319, 0},
+ {608, 608, -205, 0},
+ {609, 609, 42315, 0},
+ {611, 611, -207, 0},
+ {613, 613, 42280, 0},
+ {614, 614, 42308, 0},
+ {616, 616, -209, 0},
+ {617, 617, -211, 0},
+ {618, 618, 42308, 0},
+ {619, 619, 10743, 0},
+ {620, 620, 42305, 0},
+ {623, 623, -211, 0},
+ {625, 625, 10749, 0},
+ {626, 626, -213, 0},
+ {629, 629, -214, 0},
+ {637, 637, 10727, 0},
+ {640, 640, -218, 0},
+ {642, 642, 42307, 0},
+ {643, 643, -218, 0},
+ {647, 647, 42282, 0},
+ {648, 648, -218, 0},
+ {649, 649, -69, 0},
+ {650, 651, -217, 0},
+ {652, 652, -71, 0},
+ {658, 658, -219, 0},
+ {669, 669, 42261, 0},
+ {670, 670, 42258, 0},
+ {837, 837, 84, 0},
+ {880, 880, 0, 1},
+ {881, 881, -1, 0},
+ {882, 882, 0, 1},
+ {883, 883, -1, 0},
+ {886, 886, 0, 1},
+ {887, 887, -1, 0},
+ {891, 893, 130, 0},
+ {895, 895, 0, 116},
+ {902, 902, 0, 38},
+ {904, 906, 0, 37},
+ {908, 908, 0, 64},
+ {910, 911, 0, 63},
+ {913, 929, 0, 32},
+ {931, 939, 0, 32},
+ {940, 940, -38, 0},
+ {941, 943, -37, 0},
+ {945, 961, -32, 0},
+ {962, 962, -31, 0},
+ {963, 971, -32, 0},
+ {972, 972, -64, 0},
+ {973, 974, -63, 0},
+ {975, 975, 0, 8},
+ {976, 976, -62, 0},
+ {977, 977, -57, 0},
+ {981, 981, -47, 0},
+ {982, 982, -54, 0},
+ {983, 983, -8, 0},
+ {984, 984, 0, 1},
+ {985, 985, -1, 0},
+ {986, 986, 0, 1},
+ {987, 987, -1, 0},
+ {988, 988, 0, 1},
+ {989, 989, -1, 0},
+ {990, 990, 0, 1},
+ {991, 991, -1, 0},
+ {992, 992, 0, 1},
+ {993, 993, -1, 0},
+ {994, 994, 0, 1},
+ {995, 995, -1, 0},
+ {996, 996, 0, 1},
+ {997, 997, -1, 0},
+ {998, 998, 0, 1},
+ {999, 999, -1, 0},
+ {1000, 1000, 0, 1},
+ {1001, 1001, -1, 0},
+ {1002, 1002, 0, 1},
+ {1003, 1003, -1, 0},
+ {1004, 1004, 0, 1},
+ {1005, 1005, -1, 0},
+ {1006, 1006, 0, 1},
+ {1007, 1007, -1, 0},
+ {1008, 1008, -86, 0},
+ {1009, 1009, -80, 0},
+ {1010, 1010, 7, 0},
+ {1011, 1011, -116, 0},
+ {1012, 1012, 0, -60},
+ {1013, 1013, -96, 0},
+ {1015, 1015, 0, 1},
+ {1016, 1016, -1, 0},
+ {1017, 1017, 0, -7},
+ {1018, 1018, 0, 1},
+ {1019, 1019, -1, 0},
+ {1021, 1023, 0, -130},
+ {1024, 1039, 0, 80},
+ {1040, 1071, 0, 32},
+ {1072, 1103, -32, 0},
+ {1104, 1119, -80, 0},
+ {1120, 1120, 0, 1},
+ {1121, 1121, -1, 0},
+ {1122, 1122, 0, 1},
+ {1123, 1123, -1, 0},
+ {1124, 1124, 0, 1},
+ {1125, 1125, -1, 0},
+ {1126, 1126, 0, 1},
+ {1127, 1127, -1, 0},
+ {1128, 1128, 0, 1},
+ {1129, 1129, -1, 0},
+ {1130, 1130, 0, 1},
+ {1131, 1131, -1, 0},
+ {1132, 1132, 0, 1},
+ {1133, 1133, -1, 0},
+ {1134, 1134, 0, 1},
+ {1135, 1135, -1, 0},
+ {1136, 1136, 0, 1},
+ {1137, 1137, -1, 0},
+ {1138, 1138, 0, 1},
+ {1139, 1139, -1, 0},
+ {1140, 1140, 0, 1},
+ {1141, 1141, -1, 0},
+ {1142, 1142, 0, 1},
+ {1143, 1143, -1, 0},
+ {1144, 1144, 0, 1},
+ {1145, 1145, -1, 0},
+ {1146, 1146, 0, 1},
+ {1147, 1147, -1, 0},
+ {1148, 1148, 0, 1},
+ {1149, 1149, -1, 0},
+ {1150, 1150, 0, 1},
+ {1151, 1151, -1, 0},
+ {1152, 1152, 0, 1},
+ {1153, 1153, -1, 0},
+ {1162, 1162, 0, 1},
+ {1163, 1163, -1, 0},
+ {1164, 1164, 0, 1},
+ {1165, 1165, -1, 0},
+ {1166, 1166, 0, 1},
+ {1167, 1167, -1, 0},
+ {1168, 1168, 0, 1},
+ {1169, 1169, -1, 0},
+ {1170, 1170, 0, 1},
+ {1171, 1171, -1, 0},
+ {1172, 1172, 0, 1},
+ {1173, 1173, -1, 0},
+ {1174, 1174, 0, 1},
+ {1175, 1175, -1, 0},
+ {1176, 1176, 0, 1},
+ {1177, 1177, -1, 0},
+ {1178, 1178, 0, 1},
+ {1179, 1179, -1, 0},
+ {1180, 1180, 0, 1},
+ {1181, 1181, -1, 0},
+ {1182, 1182, 0, 1},
+ {1183, 1183, -1, 0},
+ {1184, 1184, 0, 1},
+ {1185, 1185, -1, 0},
+ {1186, 1186, 0, 1},
+ {1187, 1187, -1, 0},
+ {1188, 1188, 0, 1},
+ {1189, 1189, -1, 0},
+ {1190, 1190, 0, 1},
+ {1191, 1191, -1, 0},
+ {1192, 1192, 0, 1},
+ {1193, 1193, -1, 0},
+ {1194, 1194, 0, 1},
+ {1195, 1195, -1, 0},
+ {1196, 1196, 0, 1},
+ {1197, 1197, -1, 0},
+ {1198, 1198, 0, 1},
+ {1199, 1199, -1, 0},
+ {1200, 1200, 0, 1},
+ {1201, 1201, -1, 0},
+ {1202, 1202, 0, 1},
+ {1203, 1203, -1, 0},
+ {1204, 1204, 0, 1},
+ {1205, 1205, -1, 0},
+ {1206, 1206, 0, 1},
+ {1207, 1207, -1, 0},
+ {1208, 1208, 0, 1},
+ {1209, 1209, -1, 0},
+ {1210, 1210, 0, 1},
+ {1211, 1211, -1, 0},
+ {1212, 1212, 0, 1},
+ {1213, 1213, -1, 0},
+ {1214, 1214, 0, 1},
+ {1215, 1215, -1, 0},
+ {1216, 1216, 0, 15},
+ {1217, 1217, 0, 1},
+ {1218, 1218, -1, 0},
+ {1219, 1219, 0, 1},
+ {1220, 1220, -1, 0},
+ {1221, 1221, 0, 1},
+ {1222, 1222, -1, 0},
+ {1223, 1223, 0, 1},
+ {1224, 1224, -1, 0},
+ {1225, 1225, 0, 1},
+ {1226, 1226, -1, 0},
+ {1227, 1227, 0, 1},
+ {1228, 1228, -1, 0},
+ {1229, 1229, 0, 1},
+ {1230, 1230, -1, 0},
+ {1231, 1231, -15, 0},
+ {1232, 1232, 0, 1},
+ {1233, 1233, -1, 0},
+ {1234, 1234, 0, 1},
+ {1235, 1235, -1, 0},
+ {1236, 1236, 0, 1},
+ {1237, 1237, -1, 0},
+ {1238, 1238, 0, 1},
+ {1239, 1239, -1, 0},
+ {1240, 1240, 0, 1},
+ {1241, 1241, -1, 0},
+ {1242, 1242, 0, 1},
+ {1243, 1243, -1, 0},
+ {1244, 1244, 0, 1},
+ {1245, 1245, -1, 0},
+ {1246, 1246, 0, 1},
+ {1247, 1247, -1, 0},
+ {1248, 1248, 0, 1},
+ {1249, 1249, -1, 0},
+ {1250, 1250, 0, 1},
+ {1251, 1251, -1, 0},
+ {1252, 1252, 0, 1},
+ {1253, 1253, -1, 0},
+ {1254, 1254, 0, 1},
+ {1255, 1255, -1, 0},
+ {1256, 1256, 0, 1},
+ {1257, 1257, -1, 0},
+ {1258, 1258, 0, 1},
+ {1259, 1259, -1, 0},
+ {1260, 1260, 0, 1},
+ {1261, 1261, -1, 0},
+ {1262, 1262, 0, 1},
+ {1263, 1263, -1, 0},
+ {1264, 1264, 0, 1},
+ {1265, 1265, -1, 0},
+ {1266, 1266, 0, 1},
+ {1267, 1267, -1, 0},
+ {1268, 1268, 0, 1},
+ {1269, 1269, -1, 0},
+ {1270, 1270, 0, 1},
+ {1271, 1271, -1, 0},
+ {1272, 1272, 0, 1},
+ {1273, 1273, -1, 0},
+ {1274, 1274, 0, 1},
+ {1275, 1275, -1, 0},
+ {1276, 1276, 0, 1},
+ {1277, 1277, -1, 0},
+ {1278, 1278, 0, 1},
+ {1279, 1279, -1, 0},
+ {1280, 1280, 0, 1},
+ {1281, 1281, -1, 0},
+ {1282, 1282, 0, 1},
+ {1283, 1283, -1, 0},
+ {1284, 1284, 0, 1},
+ {1285, 1285, -1, 0},
+ {1286, 1286, 0, 1},
+ {1287, 1287, -1, 0},
+ {1288, 1288, 0, 1},
+ {1289, 1289, -1, 0},
+ {1290, 1290, 0, 1},
+ {1291, 1291, -1, 0},
+ {1292, 1292, 0, 1},
+ {1293, 1293, -1, 0},
+ {1294, 1294, 0, 1},
+ {1295, 1295, -1, 0},
+ {1296, 1296, 0, 1},
+ {1297, 1297, -1, 0},
+ {1298, 1298, 0, 1},
+ {1299, 1299, -1, 0},
+ {1300, 1300, 0, 1},
+ {1301, 1301, -1, 0},
+ {1302, 1302, 0, 1},
+ {1303, 1303, -1, 0},
+ {1304, 1304, 0, 1},
+ {1305, 1305, -1, 0},
+ {1306, 1306, 0, 1},
+ {1307, 1307, -1, 0},
+ {1308, 1308, 0, 1},
+ {1309, 1309, -1, 0},
+ {1310, 1310, 0, 1},
+ {1311, 1311, -1, 0},
+ {1312, 1312, 0, 1},
+ {1313, 1313, -1, 0},
+ {1314, 1314, 0, 1},
+ {1315, 1315, -1, 0},
+ {1316, 1316, 0, 1},
+ {1317, 1317, -1, 0},
+ {1318, 1318, 0, 1},
+ {1319, 1319, -1, 0},
+ {1320, 1320, 0, 1},
+ {1321, 1321, -1, 0},
+ {1322, 1322, 0, 1},
+ {1323, 1323, -1, 0},
+ {1324, 1324, 0, 1},
+ {1325, 1325, -1, 0},
+ {1326, 1326, 0, 1},
+ {1327, 1327, -1, 0},
+ {1329, 1366, 0, 48},
+ {1377, 1414, -48, 0},
+ {4256, 4293, 0, 7264},
+ {4295, 4295, 0, 7264},
+ {4301, 4301, 0, 7264},
+ {4304, 4346, 3008, 0},
+ {4349, 4351, 3008, 0},
+ {5024, 5103, 0, 38864},
+ {5104, 5109, 0, 8},
+ {5112, 5117, -8, 0},
+ {7296, 7296, -6254, 0},
+ {7297, 7297, -6253, 0},
+ {7298, 7298, -6244, 0},
+ {7299, 7300, -6242, 0},
+ {7301, 7301, -6243, 0},
+ {7302, 7302, -6236, 0},
+ {7303, 7303, -6181, 0},
+ {7304, 7304, 35266, 0},
+ {7312, 7354, 0, -3008},
+ {7357, 7359, 0, -3008},
+ {7545, 7545, 35332, 0},
+ {7549, 7549, 3814, 0},
+ {7566, 7566, 35384, 0},
+ {7680, 7680, 0, 1},
+ {7681, 7681, -1, 0},
+ {7682, 7682, 0, 1},
+ {7683, 7683, -1, 0},
+ {7684, 7684, 0, 1},
+ {7685, 7685, -1, 0},
+ {7686, 7686, 0, 1},
+ {7687, 7687, -1, 0},
+ {7688, 7688, 0, 1},
+ {7689, 7689, -1, 0},
+ {7690, 7690, 0, 1},
+ {7691, 7691, -1, 0},
+ {7692, 7692, 0, 1},
+ {7693, 7693, -1, 0},
+ {7694, 7694, 0, 1},
+ {7695, 7695, -1, 0},
+ {7696, 7696, 0, 1},
+ {7697, 7697, -1, 0},
+ {7698, 7698, 0, 1},
+ {7699, 7699, -1, 0},
+ {7700, 7700, 0, 1},
+ {7701, 7701, -1, 0},
+ {7702, 7702, 0, 1},
+ {7703, 7703, -1, 0},
+ {7704, 7704, 0, 1},
+ {7705, 7705, -1, 0},
+ {7706, 7706, 0, 1},
+ {7707, 7707, -1, 0},
+ {7708, 7708, 0, 1},
+ {7709, 7709, -1, 0},
+ {7710, 7710, 0, 1},
+ {7711, 7711, -1, 0},
+ {7712, 7712, 0, 1},
+ {7713, 7713, -1, 0},
+ {7714, 7714, 0, 1},
+ {7715, 7715, -1, 0},
+ {7716, 7716, 0, 1},
+ {7717, 7717, -1, 0},
+ {7718, 7718, 0, 1},
+ {7719, 7719, -1, 0},
+ {7720, 7720, 0, 1},
+ {7721, 7721, -1, 0},
+ {7722, 7722, 0, 1},
+ {7723, 7723, -1, 0},
+ {7724, 7724, 0, 1},
+ {7725, 7725, -1, 0},
+ {7726, 7726, 0, 1},
+ {7727, 7727, -1, 0},
+ {7728, 7728, 0, 1},
+ {7729, 7729, -1, 0},
+ {7730, 7730, 0, 1},
+ {7731, 7731, -1, 0},
+ {7732, 7732, 0, 1},
+ {7733, 7733, -1, 0},
+ {7734, 7734, 0, 1},
+ {7735, 7735, -1, 0},
+ {7736, 7736, 0, 1},
+ {7737, 7737, -1, 0},
+ {7738, 7738, 0, 1},
+ {7739, 7739, -1, 0},
+ {7740, 7740, 0, 1},
+ {7741, 7741, -1, 0},
+ {7742, 7742, 0, 1},
+ {7743, 7743, -1, 0},
+ {7744, 7744, 0, 1},
+ {7745, 7745, -1, 0},
+ {7746, 7746, 0, 1},
+ {7747, 7747, -1, 0},
+ {7748, 7748, 0, 1},
+ {7749, 7749, -1, 0},
+ {7750, 7750, 0, 1},
+ {7751, 7751, -1, 0},
+ {7752, 7752, 0, 1},
+ {7753, 7753, -1, 0},
+ {7754, 7754, 0, 1},
+ {7755, 7755, -1, 0},
+ {7756, 7756, 0, 1},
+ {7757, 7757, -1, 0},
+ {7758, 7758, 0, 1},
+ {7759, 7759, -1, 0},
+ {7760, 7760, 0, 1},
+ {7761, 7761, -1, 0},
+ {7762, 7762, 0, 1},
+ {7763, 7763, -1, 0},
+ {7764, 7764, 0, 1},
+ {7765, 7765, -1, 0},
+ {7766, 7766, 0, 1},
+ {7767, 7767, -1, 0},
+ {7768, 7768, 0, 1},
+ {7769, 7769, -1, 0},
+ {7770, 7770, 0, 1},
+ {7771, 7771, -1, 0},
+ {7772, 7772, 0, 1},
+ {7773, 7773, -1, 0},
+ {7774, 7774, 0, 1},
+ {7775, 7775, -1, 0},
+ {7776, 7776, 0, 1},
+ {7777, 7777, -1, 0},
+ {7778, 7778, 0, 1},
+ {7779, 7779, -1, 0},
+ {7780, 7780, 0, 1},
+ {7781, 7781, -1, 0},
+ {7782, 7782, 0, 1},
+ {7783, 7783, -1, 0},
+ {7784, 7784, 0, 1},
+ {7785, 7785, -1, 0},
+ {7786, 7786, 0, 1},
+ {7787, 7787, -1, 0},
+ {7788, 7788, 0, 1},
+ {7789, 7789, -1, 0},
+ {7790, 7790, 0, 1},
+ {7791, 7791, -1, 0},
+ {7792, 7792, 0, 1},
+ {7793, 7793, -1, 0},
+ {7794, 7794, 0, 1},
+ {7795, 7795, -1, 0},
+ {7796, 7796, 0, 1},
+ {7797, 7797, -1, 0},
+ {7798, 7798, 0, 1},
+ {7799, 7799, -1, 0},
+ {7800, 7800, 0, 1},
+ {7801, 7801, -1, 0},
+ {7802, 7802, 0, 1},
+ {7803, 7803, -1, 0},
+ {7804, 7804, 0, 1},
+ {7805, 7805, -1, 0},
+ {7806, 7806, 0, 1},
+ {7807, 7807, -1, 0},
+ {7808, 7808, 0, 1},
+ {7809, 7809, -1, 0},
+ {7810, 7810, 0, 1},
+ {7811, 7811, -1, 0},
+ {7812, 7812, 0, 1},
+ {7813, 7813, -1, 0},
+ {7814, 7814, 0, 1},
+ {7815, 7815, -1, 0},
+ {7816, 7816, 0, 1},
+ {7817, 7817, -1, 0},
+ {7818, 7818, 0, 1},
+ {7819, 7819, -1, 0},
+ {7820, 7820, 0, 1},
+ {7821, 7821, -1, 0},
+ {7822, 7822, 0, 1},
+ {7823, 7823, -1, 0},
+ {7824, 7824, 0, 1},
+ {7825, 7825, -1, 0},
+ {7826, 7826, 0, 1},
+ {7827, 7827, -1, 0},
+ {7828, 7828, 0, 1},
+ {7829, 7829, -1, 0},
+ {7835, 7835, -59, 0},
+ {7838, 7838, 0, -7615},
+ {7840, 7840, 0, 1},
+ {7841, 7841, -1, 0},
+ {7842, 7842, 0, 1},
+ {7843, 7843, -1, 0},
+ {7844, 7844, 0, 1},
+ {7845, 7845, -1, 0},
+ {7846, 7846, 0, 1},
+ {7847, 7847, -1, 0},
+ {7848, 7848, 0, 1},
+ {7849, 7849, -1, 0},
+ {7850, 7850, 0, 1},
+ {7851, 7851, -1, 0},
+ {7852, 7852, 0, 1},
+ {7853, 7853, -1, 0},
+ {7854, 7854, 0, 1},
+ {7855, 7855, -1, 0},
+ {7856, 7856, 0, 1},
+ {7857, 7857, -1, 0},
+ {7858, 7858, 0, 1},
+ {7859, 7859, -1, 0},
+ {7860, 7860, 0, 1},
+ {7861, 7861, -1, 0},
+ {7862, 7862, 0, 1},
+ {7863, 7863, -1, 0},
+ {7864, 7864, 0, 1},
+ {7865, 7865, -1, 0},
+ {7866, 7866, 0, 1},
+ {7867, 7867, -1, 0},
+ {7868, 7868, 0, 1},
+ {7869, 7869, -1, 0},
+ {7870, 7870, 0, 1},
+ {7871, 7871, -1, 0},
+ {7872, 7872, 0, 1},
+ {7873, 7873, -1, 0},
+ {7874, 7874, 0, 1},
+ {7875, 7875, -1, 0},
+ {7876, 7876, 0, 1},
+ {7877, 7877, -1, 0},
+ {7878, 7878, 0, 1},
+ {7879, 7879, -1, 0},
+ {7880, 7880, 0, 1},
+ {7881, 7881, -1, 0},
+ {7882, 7882, 0, 1},
+ {7883, 7883, -1, 0},
+ {7884, 7884, 0, 1},
+ {7885, 7885, -1, 0},
+ {7886, 7886, 0, 1},
+ {7887, 7887, -1, 0},
+ {7888, 7888, 0, 1},
+ {7889, 7889, -1, 0},
+ {7890, 7890, 0, 1},
+ {7891, 7891, -1, 0},
+ {7892, 7892, 0, 1},
+ {7893, 7893, -1, 0},
+ {7894, 7894, 0, 1},
+ {7895, 7895, -1, 0},
+ {7896, 7896, 0, 1},
+ {7897, 7897, -1, 0},
+ {7898, 7898, 0, 1},
+ {7899, 7899, -1, 0},
+ {7900, 7900, 0, 1},
+ {7901, 7901, -1, 0},
+ {7902, 7902, 0, 1},
+ {7903, 7903, -1, 0},
+ {7904, 7904, 0, 1},
+ {7905, 7905, -1, 0},
+ {7906, 7906, 0, 1},
+ {7907, 7907, -1, 0},
+ {7908, 7908, 0, 1},
+ {7909, 7909, -1, 0},
+ {7910, 7910, 0, 1},
+ {7911, 7911, -1, 0},
+ {7912, 7912, 0, 1},
+ {7913, 7913, -1, 0},
+ {7914, 7914, 0, 1},
+ {7915, 7915, -1, 0},
+ {7916, 7916, 0, 1},
+ {7917, 7917, -1, 0},
+ {7918, 7918, 0, 1},
+ {7919, 7919, -1, 0},
+ {7920, 7920, 0, 1},
+ {7921, 7921, -1, 0},
+ {7922, 7922, 0, 1},
+ {7923, 7923, -1, 0},
+ {7924, 7924, 0, 1},
+ {7925, 7925, -1, 0},
+ {7926, 7926, 0, 1},
+ {7927, 7927, -1, 0},
+ {7928, 7928, 0, 1},
+ {7929, 7929, -1, 0},
+ {7930, 7930, 0, 1},
+ {7931, 7931, -1, 0},
+ {7932, 7932, 0, 1},
+ {7933, 7933, -1, 0},
+ {7934, 7934, 0, 1},
+ {7935, 7935, -1, 0},
+ {7936, 7943, 8, 0},
+ {7944, 7951, 0, -8},
+ {7952, 7957, 8, 0},
+ {7960, 7965, 0, -8},
+ {7968, 7975, 8, 0},
+ {7976, 7983, 0, -8},
+ {7984, 7991, 8, 0},
+ {7992, 7999, 0, -8},
+ {8000, 8005, 8, 0},
+ {8008, 8013, 0, -8},
+ {8017, 8017, 8, 0},
+ {8019, 8019, 8, 0},
+ {8021, 8021, 8, 0},
+ {8023, 8023, 8, 0},
+ {8025, 8025, 0, -8},
+ {8027, 8027, 0, -8},
+ {8029, 8029, 0, -8},
+ {8031, 8031, 0, -8},
+ {8032, 8039, 8, 0},
+ {8040, 8047, 0, -8},
+ {8048, 8049, 74, 0},
+ {8050, 8053, 86, 0},
+ {8054, 8055, 100, 0},
+ {8056, 8057, 128, 0},
+ {8058, 8059, 112, 0},
+ {8060, 8061, 126, 0},
+ {8112, 8113, 8, 0},
+ {8120, 8121, 0, -8},
+ {8122, 8123, 0, -74},
+ {8126, 8126, -7205, 0},
+ {8136, 8139, 0, -86},
+ {8144, 8145, 8, 0},
+ {8152, 8153, 0, -8},
+ {8154, 8155, 0, -100},
+ {8160, 8161, 8, 0},
+ {8165, 8165, 7, 0},
+ {8168, 8169, 0, -8},
+ {8170, 8171, 0, -112},
+ {8172, 8172, 0, -7},
+ {8184, 8185, 0, -128},
+ {8186, 8187, 0, -126},
+ {8486, 8486, 0, -7517},
+ {8490, 8490, 0, -8383},
+ {8491, 8491, 0, -8262},
+ {8498, 8498, 0, 28},
+ {8526, 8526, -28, 0},
+ {8544, 8559, 0, 16},
+ {8560, 8575, -16, 0},
+ {8579, 8579, 0, 1},
+ {8580, 8580, -1, 0},
+ {9398, 9423, 0, 26},
+ {9424, 9449, -26, 0},
+ {11264, 11310, 0, 48},
+ {11312, 11358, -48, 0},
+ {11360, 11360, 0, 1},
+ {11361, 11361, -1, 0},
+ {11362, 11362, 0, -10743},
+ {11363, 11363, 0, -3814},
+ {11364, 11364, 0, -10727},
+ {11365, 11365, -10795, 0},
+ {11366, 11366, -10792, 0},
+ {11367, 11367, 0, 1},
+ {11368, 11368, -1, 0},
+ {11369, 11369, 0, 1},
+ {11370, 11370, -1, 0},
+ {11371, 11371, 0, 1},
+ {11372, 11372, -1, 0},
+ {11373, 11373, 0, -10780},
+ {11374, 11374, 0, -10749},
+ {11375, 11375, 0, -10783},
+ {11376, 11376, 0, -10782},
+ {11378, 11378, 0, 1},
+ {11379, 11379, -1, 0},
+ {11381, 11381, 0, 1},
+ {11382, 11382, -1, 0},
+ {11390, 11391, 0, -10815},
+ {11392, 11392, 0, 1},
+ {11393, 11393, -1, 0},
+ {11394, 11394, 0, 1},
+ {11395, 11395, -1, 0},
+ {11396, 11396, 0, 1},
+ {11397, 11397, -1, 0},
+ {11398, 11398, 0, 1},
+ {11399, 11399, -1, 0},
+ {11400, 11400, 0, 1},
+ {11401, 11401, -1, 0},
+ {11402, 11402, 0, 1},
+ {11403, 11403, -1, 0},
+ {11404, 11404, 0, 1},
+ {11405, 11405, -1, 0},
+ {11406, 11406, 0, 1},
+ {11407, 11407, -1, 0},
+ {11408, 11408, 0, 1},
+ {11409, 11409, -1, 0},
+ {11410, 11410, 0, 1},
+ {11411, 11411, -1, 0},
+ {11412, 11412, 0, 1},
+ {11413, 11413, -1, 0},
+ {11414, 11414, 0, 1},
+ {11415, 11415, -1, 0},
+ {11416, 11416, 0, 1},
+ {11417, 11417, -1, 0},
+ {11418, 11418, 0, 1},
+ {11419, 11419, -1, 0},
+ {11420, 11420, 0, 1},
+ {11421, 11421, -1, 0},
+ {11422, 11422, 0, 1},
+ {11423, 11423, -1, 0},
+ {11424, 11424, 0, 1},
+ {11425, 11425, -1, 0},
+ {11426, 11426, 0, 1},
+ {11427, 11427, -1, 0},
+ {11428, 11428, 0, 1},
+ {11429, 11429, -1, 0},
+ {11430, 11430, 0, 1},
+ {11431, 11431, -1, 0},
+ {11432, 11432, 0, 1},
+ {11433, 11433, -1, 0},
+ {11434, 11434, 0, 1},
+ {11435, 11435, -1, 0},
+ {11436, 11436, 0, 1},
+ {11437, 11437, -1, 0},
+ {11438, 11438, 0, 1},
+ {11439, 11439, -1, 0},
+ {11440, 11440, 0, 1},
+ {11441, 11441, -1, 0},
+ {11442, 11442, 0, 1},
+ {11443, 11443, -1, 0},
+ {11444, 11444, 0, 1},
+ {11445, 11445, -1, 0},
+ {11446, 11446, 0, 1},
+ {11447, 11447, -1, 0},
+ {11448, 11448, 0, 1},
+ {11449, 11449, -1, 0},
+ {11450, 11450, 0, 1},
+ {11451, 11451, -1, 0},
+ {11452, 11452, 0, 1},
+ {11453, 11453, -1, 0},
+ {11454, 11454, 0, 1},
+ {11455, 11455, -1, 0},
+ {11456, 11456, 0, 1},
+ {11457, 11457, -1, 0},
+ {11458, 11458, 0, 1},
+ {11459, 11459, -1, 0},
+ {11460, 11460, 0, 1},
+ {11461, 11461, -1, 0},
+ {11462, 11462, 0, 1},
+ {11463, 11463, -1, 0},
+ {11464, 11464, 0, 1},
+ {11465, 11465, -1, 0},
+ {11466, 11466, 0, 1},
+ {11467, 11467, -1, 0},
+ {11468, 11468, 0, 1},
+ {11469, 11469, -1, 0},
+ {11470, 11470, 0, 1},
+ {11471, 11471, -1, 0},
+ {11472, 11472, 0, 1},
+ {11473, 11473, -1, 0},
+ {11474, 11474, 0, 1},
+ {11475, 11475, -1, 0},
+ {11476, 11476, 0, 1},
+ {11477, 11477, -1, 0},
+ {11478, 11478, 0, 1},
+ {11479, 11479, -1, 0},
+ {11480, 11480, 0, 1},
+ {11481, 11481, -1, 0},
+ {11482, 11482, 0, 1},
+ {11483, 11483, -1, 0},
+ {11484, 11484, 0, 1},
+ {11485, 11485, -1, 0},
+ {11486, 11486, 0, 1},
+ {11487, 11487, -1, 0},
+ {11488, 11488, 0, 1},
+ {11489, 11489, -1, 0},
+ {11490, 11490, 0, 1},
+ {11491, 11491, -1, 0},
+ {11499, 11499, 0, 1},
+ {11500, 11500, -1, 0},
+ {11501, 11501, 0, 1},
+ {11502, 11502, -1, 0},
+ {11506, 11506, 0, 1},
+ {11507, 11507, -1, 0},
+ {11520, 11557, -7264, 0},
+ {11559, 11559, -7264, 0},
+ {11565, 11565, -7264, 0},
+ {42560, 42560, 0, 1},
+ {42561, 42561, -1, 0},
+ {42562, 42562, 0, 1},
+ {42563, 42563, -1, 0},
+ {42564, 42564, 0, 1},
+ {42565, 42565, -1, 0},
+ {42566, 42566, 0, 1},
+ {42567, 42567, -1, 0},
+ {42568, 42568, 0, 1},
+ {42569, 42569, -1, 0},
+ {42570, 42570, 0, 1},
+ {42571, 42571, -1, 0},
+ {42572, 42572, 0, 1},
+ {42573, 42573, -1, 0},
+ {42574, 42574, 0, 1},
+ {42575, 42575, -1, 0},
+ {42576, 42576, 0, 1},
+ {42577, 42577, -1, 0},
+ {42578, 42578, 0, 1},
+ {42579, 42579, -1, 0},
+ {42580, 42580, 0, 1},
+ {42581, 42581, -1, 0},
+ {42582, 42582, 0, 1},
+ {42583, 42583, -1, 0},
+ {42584, 42584, 0, 1},
+ {42585, 42585, -1, 0},
+ {42586, 42586, 0, 1},
+ {42587, 42587, -1, 0},
+ {42588, 42588, 0, 1},
+ {42589, 42589, -1, 0},
+ {42590, 42590, 0, 1},
+ {42591, 42591, -1, 0},
+ {42592, 42592, 0, 1},
+ {42593, 42593, -1, 0},
+ {42594, 42594, 0, 1},
+ {42595, 42595, -1, 0},
+ {42596, 42596, 0, 1},
+ {42597, 42597, -1, 0},
+ {42598, 42598, 0, 1},
+ {42599, 42599, -1, 0},
+ {42600, 42600, 0, 1},
+ {42601, 42601, -1, 0},
+ {42602, 42602, 0, 1},
+ {42603, 42603, -1, 0},
+ {42604, 42604, 0, 1},
+ {42605, 42605, -1, 0},
+ {42624, 42624, 0, 1},
+ {42625, 42625, -1, 0},
+ {42626, 42626, 0, 1},
+ {42627, 42627, -1, 0},
+ {42628, 42628, 0, 1},
+ {42629, 42629, -1, 0},
+ {42630, 42630, 0, 1},
+ {42631, 42631, -1, 0},
+ {42632, 42632, 0, 1},
+ {42633, 42633, -1, 0},
+ {42634, 42634, 0, 1},
+ {42635, 42635, -1, 0},
+ {42636, 42636, 0, 1},
+ {42637, 42637, -1, 0},
+ {42638, 42638, 0, 1},
+ {42639, 42639, -1, 0},
+ {42640, 42640, 0, 1},
+ {42641, 42641, -1, 0},
+ {42642, 42642, 0, 1},
+ {42643, 42643, -1, 0},
+ {42644, 42644, 0, 1},
+ {42645, 42645, -1, 0},
+ {42646, 42646, 0, 1},
+ {42647, 42647, -1, 0},
+ {42648, 42648, 0, 1},
+ {42649, 42649, -1, 0},
+ {42650, 42650, 0, 1},
+ {42651, 42651, -1, 0},
+ {42786, 42786, 0, 1},
+ {42787, 42787, -1, 0},
+ {42788, 42788, 0, 1},
+ {42789, 42789, -1, 0},
+ {42790, 42790, 0, 1},
+ {42791, 42791, -1, 0},
+ {42792, 42792, 0, 1},
+ {42793, 42793, -1, 0},
+ {42794, 42794, 0, 1},
+ {42795, 42795, -1, 0},
+ {42796, 42796, 0, 1},
+ {42797, 42797, -1, 0},
+ {42798, 42798, 0, 1},
+ {42799, 42799, -1, 0},
+ {42802, 42802, 0, 1},
+ {42803, 42803, -1, 0},
+ {42804, 42804, 0, 1},
+ {42805, 42805, -1, 0},
+ {42806, 42806, 0, 1},
+ {42807, 42807, -1, 0},
+ {42808, 42808, 0, 1},
+ {42809, 42809, -1, 0},
+ {42810, 42810, 0, 1},
+ {42811, 42811, -1, 0},
+ {42812, 42812, 0, 1},
+ {42813, 42813, -1, 0},
+ {42814, 42814, 0, 1},
+ {42815, 42815, -1, 0},
+ {42816, 42816, 0, 1},
+ {42817, 42817, -1, 0},
+ {42818, 42818, 0, 1},
+ {42819, 42819, -1, 0},
+ {42820, 42820, 0, 1},
+ {42821, 42821, -1, 0},
+ {42822, 42822, 0, 1},
+ {42823, 42823, -1, 0},
+ {42824, 42824, 0, 1},
+ {42825, 42825, -1, 0},
+ {42826, 42826, 0, 1},
+ {42827, 42827, -1, 0},
+ {42828, 42828, 0, 1},
+ {42829, 42829, -1, 0},
+ {42830, 42830, 0, 1},
+ {42831, 42831, -1, 0},
+ {42832, 42832, 0, 1},
+ {42833, 42833, -1, 0},
+ {42834, 42834, 0, 1},
+ {42835, 42835, -1, 0},
+ {42836, 42836, 0, 1},
+ {42837, 42837, -1, 0},
+ {42838, 42838, 0, 1},
+ {42839, 42839, -1, 0},
+ {42840, 42840, 0, 1},
+ {42841, 42841, -1, 0},
+ {42842, 42842, 0, 1},
+ {42843, 42843, -1, 0},
+ {42844, 42844, 0, 1},
+ {42845, 42845, -1, 0},
+ {42846, 42846, 0, 1},
+ {42847, 42847, -1, 0},
+ {42848, 42848, 0, 1},
+ {42849, 42849, -1, 0},
+ {42850, 42850, 0, 1},
+ {42851, 42851, -1, 0},
+ {42852, 42852, 0, 1},
+ {42853, 42853, -1, 0},
+ {42854, 42854, 0, 1},
+ {42855, 42855, -1, 0},
+ {42856, 42856, 0, 1},
+ {42857, 42857, -1, 0},
+ {42858, 42858, 0, 1},
+ {42859, 42859, -1, 0},
+ {42860, 42860, 0, 1},
+ {42861, 42861, -1, 0},
+ {42862, 42862, 0, 1},
+ {42863, 42863, -1, 0},
+ {42873, 42873, 0, 1},
+ {42874, 42874, -1, 0},
+ {42875, 42875, 0, 1},
+ {42876, 42876, -1, 0},
+ {42877, 42877, 0, -35332},
+ {42878, 42878, 0, 1},
+ {42879, 42879, -1, 0},
+ {42880, 42880, 0, 1},
+ {42881, 42881, -1, 0},
+ {42882, 42882, 0, 1},
+ {42883, 42883, -1, 0},
+ {42884, 42884, 0, 1},
+ {42885, 42885, -1, 0},
+ {42886, 42886, 0, 1},
+ {42887, 42887, -1, 0},
+ {42891, 42891, 0, 1},
+ {42892, 42892, -1, 0},
+ {42893, 42893, 0, -42280},
+ {42896, 42896, 0, 1},
+ {42897, 42897, -1, 0},
+ {42898, 42898, 0, 1},
+ {42899, 42899, -1, 0},
+ {42900, 42900, 48, 0},
+ {42902, 42902, 0, 1},
+ {42903, 42903, -1, 0},
+ {42904, 42904, 0, 1},
+ {42905, 42905, -1, 0},
+ {42906, 42906, 0, 1},
+ {42907, 42907, -1, 0},
+ {42908, 42908, 0, 1},
+ {42909, 42909, -1, 0},
+ {42910, 42910, 0, 1},
+ {42911, 42911, -1, 0},
+ {42912, 42912, 0, 1},
+ {42913, 42913, -1, 0},
+ {42914, 42914, 0, 1},
+ {42915, 42915, -1, 0},
+ {42916, 42916, 0, 1},
+ {42917, 42917, -1, 0},
+ {42918, 42918, 0, 1},
+ {42919, 42919, -1, 0},
+ {42920, 42920, 0, 1},
+ {42921, 42921, -1, 0},
+ {42922, 42922, 0, -42308},
+ {42923, 42923, 0, -42319},
+ {42924, 42924, 0, -42315},
+ {42925, 42925, 0, -42305},
+ {42926, 42926, 0, -42308},
+ {42928, 42928, 0, -42258},
+ {42929, 42929, 0, -42282},
+ {42930, 42930, 0, -42261},
+ {42931, 42931, 0, 928},
+ {42932, 42932, 0, 1},
+ {42933, 42933, -1, 0},
+ {42934, 42934, 0, 1},
+ {42935, 42935, -1, 0},
+ {42936, 42936, 0, 1},
+ {42937, 42937, -1, 0},
+ {42938, 42938, 0, 1},
+ {42939, 42939, -1, 0},
+ {42940, 42940, 0, 1},
+ {42941, 42941, -1, 0},
+ {42942, 42942, 0, 1},
+ {42943, 42943, -1, 0},
+ {42946, 42946, 0, 1},
+ {42947, 42947, -1, 0},
+ {42948, 42948, 0, -48},
+ {42949, 42949, 0, -42307},
+ {42950, 42950, 0, -35384},
+ {42951, 42951, 0, 1},
+ {42952, 42952, -1, 0},
+ {42953, 42953, 0, 1},
+ {42954, 42954, -1, 0},
+ {42997, 42997, 0, 1},
+ {42998, 42998, -1, 0},
+ {43859, 43859, -928, 0},
+ {43888, 43967, -38864, 0},
+ {65313, 65338, 0, 32},
+ {65345, 65370, -32, 0},
+ {66560, 66599, 0, 40},
+ {66600, 66639, -40, 0},
+ {66736, 66771, 0, 40},
+ {66776, 66811, -40, 0},
+ {68736, 68786, 0, 64},
+ {68800, 68850, -64, 0},
+ {71840, 71871, 0, 32},
+ {71872, 71903, -32, 0},
+ {93760, 93791, 0, 32},
+ {93792, 93823, -32, 0},
+ {125184, 125217, 0, 34},
+ {125218, 125251, -34, 0},
diff --git a/gdb/ada-exp.h b/gdb/ada-exp.h
index 765f0dca3c5..d85349c7fcc 100644
--- a/gdb/ada-exp.h
+++ b/gdb/ada-exp.h
@@ -443,6 +443,29 @@ public:
enum exp_opcode opcode () const override
{ return STRUCTOP_STRUCT; }
+
+ /* Set the completion prefix. */
+ void set_prefix (std::string &&prefix)
+ {
+ m_prefix = std::move (prefix);
+ }
+
+ bool complete (struct expression *exp, completion_tracker &tracker) override
+ {
+ return structop_base_operation::complete (exp, tracker, m_prefix.c_str ());
+ }
+
+ void dump (struct ui_file *stream, int depth) const override
+ {
+ structop_base_operation::dump (stream, depth);
+ dump_for_expression (stream, depth + 1, m_prefix);
+ }
+
+private:
+
+ /* We may need to provide a prefix to field name completion. See
+ ada-exp.y:find_completion_bounds for details. */
+ std::string m_prefix;
};
/* Function calls for Ada. */
@@ -769,6 +792,21 @@ public:
bool parse_completion,
innermost_block_tracker *tracker,
struct type *context_type) override;
+
+ value *evaluate (struct type *expect_type,
+ struct expression *exp,
+ enum noside noside) override;
+};
+
+class ada_concat_operation : public concat_operation
+{
+public:
+
+ using concat_operation::concat_operation;
+
+ value *evaluate (struct type *expect_type,
+ struct expression *exp,
+ enum noside noside) override;
};
} /* namespace expr */
diff --git a/gdb/ada-exp.y b/gdb/ada-exp.y
index 16ba336df4a..8660205809a 100644
--- a/gdb/ada-exp.y
+++ b/gdb/ada-exp.y
@@ -68,6 +68,9 @@ struct name_info {
static struct parser_state *pstate = NULL;
+/* The original expression string. */
+static const char *original_expr;
+
int yyparse (void);
static int yylex (void);
@@ -82,6 +85,9 @@ static void write_object_renaming (struct parser_state *,
static struct type* write_var_or_type (struct parser_state *,
const struct block *, struct stoken);
+static struct type *write_var_or_type_completion (struct parser_state *,
+ const struct block *,
+ struct stoken);
static void write_name_assoc (struct parser_state *, struct stoken);
@@ -98,12 +104,14 @@ static struct type *type_long_long (struct parser_state *);
static struct type *type_long_double (struct parser_state *);
-static struct type *type_char (struct parser_state *);
+static struct type *type_for_char (struct parser_state *, ULONGEST);
static struct type *type_boolean (struct parser_state *);
static struct type *type_system_address (struct parser_state *);
+static std::string find_completion_bounds (struct parser_state *);
+
using namespace expr;
/* Handle Ada type resolution for OP. DEPROCEDURE_P and CONTEXT_TYPE
@@ -290,7 +298,7 @@ ada_funcall (int nargs)
int array_arity = 0;
struct type *callee_t = nullptr;
if (vvo == nullptr
- || SYMBOL_DOMAIN (vvo->get_symbol ()) != UNDEF_DOMAIN)
+ || vvo->get_symbol ()->domain () != UNDEF_DOMAIN)
{
struct value *callee_v = callee->evaluate (nullptr,
pstate->expout.get (),
@@ -393,6 +401,30 @@ pop_associations (int n)
return result;
}
+/* Expression completer for attributes. */
+struct ada_tick_completer : public expr_completion_base
+{
+ explicit ada_tick_completer (std::string &&name)
+ : m_name (std::move (name))
+ {
+ }
+
+ bool complete (struct expression *exp,
+ completion_tracker &tracker) override;
+
+private:
+
+ std::string m_name;
+};
+
+/* Make a new ada_tick_completer and wrap it in a unique pointer. */
+static std::unique_ptr<expr_completion_base>
+make_tick_completer (struct stoken tok)
+{
+ return (std::unique_ptr<expr_completion_base>
+ (new ada_tick_completer (std::string (tok.ptr, tok.length))));
+}
+
%}
%union
@@ -420,12 +452,10 @@ pop_associations (int n)
%token <typed_val_float> FLOAT
%token TRUEKEYWORD FALSEKEYWORD
%token COLONCOLON
-%token <sval> STRING NAME DOT_ID
+%token <sval> STRING NAME DOT_ID TICK_COMPLETE DOT_COMPLETE NAME_COMPLETE
%type <bval> block
%type <lval> arglist tick_arglist
-%token DOT_ALL
-
/* Special type cases, put in to allow the parser to distinguish different
legal basetypes. */
%token <sval> DOLLAR_VARIABLE
@@ -449,10 +479,11 @@ pop_associations (int n)
%right TICK_ACCESS TICK_ADDRESS TICK_FIRST TICK_LAST TICK_LENGTH
%right TICK_MAX TICK_MIN TICK_MODULUS
%right TICK_POS TICK_RANGE TICK_SIZE TICK_TAG TICK_VAL
+%right TICK_COMPLETE
/* The following are right-associative only so that reductions at this
precedence have lower precedence than '.' and '('. The syntax still
forces a.b.c, e.g., to be LEFT-associated. */
-%right '.' '(' '[' DOT_ID DOT_ALL
+%right '.' '(' '[' DOT_ID DOT_COMPLETE
%token NEW OTHERS
@@ -481,15 +512,31 @@ exp1 : exp
;
/* Expressions, not including the sequencing operator. */
-primary : primary DOT_ALL
- { ada_wrap<ada_unop_ind_operation> (); }
- ;
primary : primary DOT_ID
{
+ if (strcmp ($2.ptr, "all") == 0)
+ ada_wrap<ada_unop_ind_operation> ();
+ else
+ {
+ operation_up arg = ada_pop ();
+ pstate->push_new<ada_structop_operation>
+ (std::move (arg), copy_name ($2));
+ }
+ }
+ ;
+
+primary : primary DOT_COMPLETE
+ {
+ /* This is done even for ".all", because
+ that might be a prefix. */
operation_up arg = ada_pop ();
- pstate->push_new<ada_structop_operation>
- (std::move (arg), copy_name ($2));
+ ada_structop_operation *str_op
+ = (new ada_structop_operation
+ (std::move (arg), copy_name ($2)));
+ str_op->set_prefix (find_completion_bounds (pstate));
+ pstate->push (operation_up (str_op));
+ pstate->mark_struct_expression (str_op);
}
;
@@ -649,7 +696,7 @@ simple_exp : simple_exp '+' simple_exp
;
simple_exp : simple_exp '&' simple_exp
- { ada_wrap2<concat_operation> (BINOP_CONCAT); }
+ { ada_wrap2<ada_concat_operation> (BINOP_CONCAT); }
;
simple_exp : simple_exp '-' simple_exp
@@ -784,6 +831,10 @@ primary : primary TICK_ACCESS
{ ada_addrof (); }
| primary TICK_ADDRESS
{ ada_addrof (type_system_address (pstate)); }
+ | primary TICK_COMPLETE
+ {
+ pstate->mark_completion (make_tick_completer ($2));
+ }
| primary TICK_FIRST tick_arglist
{
operation_up arg = ada_pop ();
@@ -899,8 +950,20 @@ primary : NEW NAME
var_or_type: NAME %prec VAR
{ $$ = write_var_or_type (pstate, NULL, $1); }
+ | NAME_COMPLETE %prec VAR
+ {
+ $$ = write_var_or_type_completion (pstate,
+ NULL,
+ $1);
+ }
| block NAME %prec VAR
{ $$ = write_var_or_type (pstate, $1, $2); }
+ | block NAME_COMPLETE %prec VAR
+ {
+ $$ = write_var_or_type_completion (pstate,
+ $1,
+ $2);
+ }
| NAME TICK_ACCESS
{
$$ = write_var_or_type (pstate, NULL, $1);
@@ -1080,6 +1143,10 @@ ada_parse (struct parser_state *par_state)
scoped_restore pstate_restore = make_scoped_restore (&pstate);
gdb_assert (par_state != NULL);
pstate = par_state;
+ original_expr = par_state->lexptr;
+
+ scoped_restore restore_yydebug = make_scoped_restore (&yydebug,
+ parser_debug);
lexer_init (yyin); /* (Re-)initialize lexer. */
obstack_free (&temp_parse_space, NULL);
@@ -1157,7 +1224,7 @@ write_object_renaming (struct parser_state *par_state,
ada_lookup_encoded_symbol (name, orig_left_context, VAR_DOMAIN, &sym_info);
if (sym_info.symbol == NULL)
error (_("Could not find renamed variable: %s"), ada_decode (name).c_str ());
- else if (SYMBOL_CLASS (sym_info.symbol) == LOC_TYPEDEF)
+ else if (sym_info.symbol->aclass () == LOC_TYPEDEF)
/* We have a renaming of an old-style renaming symbol. Don't
trust the block information. */
sym_info.block = orig_left_context;
@@ -1226,7 +1293,7 @@ write_object_renaming (struct parser_state *par_state,
VAR_DOMAIN, &index_sym_info);
if (index_sym_info.symbol == NULL)
error (_("Could not find %s"), index_name);
- else if (SYMBOL_CLASS (index_sym_info.symbol) == LOC_TYPEDEF)
+ else if (index_sym_info.symbol->aclass () == LOC_TYPEDEF)
/* Index is an old-style renaming symbol. */
index_sym_info.block = orig_left_context;
write_var_from_sym (par_state, index_sym_info);
@@ -1296,14 +1363,14 @@ block_lookup (const struct block *context, const char *raw_name)
= ada_lookup_symbol_list (name, context, VAR_DOMAIN);
if (context == NULL
- && (syms.empty () || SYMBOL_CLASS (syms[0].symbol) != LOC_BLOCK))
+ && (syms.empty () || syms[0].symbol->aclass () != LOC_BLOCK))
symtab = lookup_symtab (name);
else
symtab = NULL;
if (symtab != NULL)
- result = BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symtab), STATIC_BLOCK);
- else if (syms.empty () || SYMBOL_CLASS (syms[0].symbol) != LOC_BLOCK)
+ result = symtab->compunit ()->blockvector ()->static_block ();
+ else if (syms.empty () || syms[0].symbol->aclass () != LOC_BLOCK)
{
if (context == NULL)
error (_("No file or function \"%s\"."), raw_name);
@@ -1314,7 +1381,7 @@ block_lookup (const struct block *context, const char *raw_name)
{
if (syms.size () > 1)
warning (_("Function name \"%s\" ambiguous here"), raw_name);
- result = SYMBOL_BLOCK_VALUE (syms[0].symbol);
+ result = syms[0].symbol->value_block ();
}
return result;
@@ -1329,13 +1396,13 @@ select_possible_type_sym (const std::vector<struct block_symbol> &syms)
preferred_index = -1; preferred_type = NULL;
for (i = 0; i < syms.size (); i += 1)
- switch (SYMBOL_CLASS (syms[i].symbol))
+ switch (syms[i].symbol->aclass ())
{
case LOC_TYPEDEF:
- if (ada_prefer_type (SYMBOL_TYPE (syms[i].symbol), preferred_type))
+ if (ada_prefer_type (syms[i].symbol->type (), preferred_type))
{
preferred_index = i;
- preferred_type = SYMBOL_TYPE (syms[i].symbol);
+ preferred_type = syms[i].symbol->type ();
}
break;
case LOC_REGISTER:
@@ -1373,8 +1440,8 @@ find_primitive_type (struct parser_state *par_state, const char *name)
strcpy (expanded_name, "standard__");
strcat (expanded_name, name);
sym = ada_lookup_symbol (expanded_name, NULL, VAR_DOMAIN).symbol;
- if (sym != NULL && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
- type = SYMBOL_TYPE (sym);
+ if (sym != NULL && sym->aclass () == LOC_TYPEDEF)
+ type = sym->type ();
}
return type;
@@ -1408,10 +1475,12 @@ chop_separator (const char *name)
/* Given that SELS is a string of the form (<sep><identifier>)*, where
<sep> is '__' or '.', write the indicated sequence of
- STRUCTOP_STRUCT expression operators. */
-static void
+ STRUCTOP_STRUCT expression operators. Returns a pointer to the
+ last operation that was pushed. */
+static ada_structop_operation *
write_selectors (struct parser_state *par_state, const char *sels)
{
+ ada_structop_operation *result = nullptr;
while (*sels != '\0')
{
const char *p = chop_separator (sels);
@@ -1420,9 +1489,11 @@ write_selectors (struct parser_state *par_state, const char *sels)
&& (sels[0] != '_' || sels[1] != '_'))
sels += 1;
operation_up arg = ada_pop ();
- pstate->push_new<ada_structop_operation>
- (std::move (arg), std::string (p, sels - p));
+ result = new ada_structop_operation (std::move (arg),
+ std::string (p, sels - p));
+ pstate->push (operation_up (result));
}
+ return result;
}
/* Write a variable access (OP_VAR_VALUE) to ambiguous encoded name
@@ -1435,7 +1506,7 @@ write_ambiguous_var (struct parser_state *par_state,
{
struct symbol *sym = new (&temp_parse_space) symbol ();
- SYMBOL_DOMAIN (sym) = UNDEF_DOMAIN;
+ sym->set_domain (UNDEF_DOMAIN);
sym->set_linkage_name (obstack_strndup (&temp_parse_space, name, len));
sym->set_language (language_ada, nullptr);
@@ -1474,7 +1545,7 @@ get_symbol_field_type (struct symbol *sym, const char *encoded_field_name)
{
const char *field_name = encoded_field_name;
const char *subfield_name;
- struct type *type = SYMBOL_TYPE (sym);
+ struct type *type = sym->type ();
int fieldno;
if (type == NULL || field_name == NULL)
@@ -1549,10 +1620,14 @@ write_var_or_type (struct parser_state *par_state,
int terminator = encoded_name[tail_index];
encoded_name[tail_index] = '\0';
- std::vector<struct block_symbol> syms
- = ada_lookup_symbol_list (encoded_name, block, VAR_DOMAIN);
+ /* In order to avoid double-encoding, we want to only pass
+ the decoded form to lookup functions. */
+ std::string decoded_name = ada_decode (encoded_name);
encoded_name[tail_index] = terminator;
+ std::vector<struct block_symbol> syms
+ = ada_lookup_symbol_list (decoded_name.c_str (), block, VAR_DOMAIN);
+
type_sym = select_possible_type_sym (syms);
if (type_sym != NULL)
@@ -1595,7 +1670,7 @@ write_var_or_type (struct parser_state *par_state,
struct type *field_type;
if (tail_index == name_len)
- return SYMBOL_TYPE (type_sym);
+ return type_sym->type ();
/* We have some extraneous characters after the type name.
If this is an expression "TYPE_NAME.FIELD0.[...].FIELDN",
@@ -1626,7 +1701,7 @@ write_var_or_type (struct parser_state *par_state,
else if (syms.empty ())
{
struct bound_minimal_symbol msym
- = ada_lookup_simple_minsym (encoded_name);
+ = ada_lookup_simple_minsym (decoded_name.c_str ());
if (msym.minsym != NULL)
{
par_state->push_new<ada_var_msym_value_operation> (msym);
@@ -1665,6 +1740,72 @@ write_var_or_type (struct parser_state *par_state,
}
+/* Because ada_completer_word_break_characters does not contain '.' --
+ and it cannot easily be added, this breaks other completions -- we
+ have to recreate the completion word-splitting here, so that we can
+ provide a prefix that is then used when completing field names.
+ Without this, an attempt like "complete print abc.d" will give a
+ result like "print def" rather than "print abc.def". */
+
+static std::string
+find_completion_bounds (struct parser_state *par_state)
+{
+ const char *end = pstate->lexptr;
+ /* First the end of the prefix. Here we stop at the token start or
+ at '.' or space. */
+ for (; end > original_expr && end[-1] != '.' && !isspace (end[-1]); --end)
+ {
+ /* Nothing. */
+ }
+ /* Now find the start of the prefix. */
+ const char *ptr = end;
+ /* Here we allow '.'. */
+ for (;
+ ptr > original_expr && (ptr[-1] == '.'
+ || ptr[-1] == '_'
+ || (ptr[-1] >= 'a' && ptr[-1] <= 'z')
+ || (ptr[-1] >= 'A' && ptr[-1] <= 'Z')
+ || (ptr[-1] & 0xff) >= 0x80);
+ --ptr)
+ {
+ /* Nothing. */
+ }
+ /* ... except, skip leading spaces. */
+ ptr = skip_spaces (ptr);
+
+ return std::string (ptr, end);
+}
+
+/* A wrapper for write_var_or_type that is used specifically when
+ completion is requested for the last of a sequence of
+ identifiers. */
+
+static struct type *
+write_var_or_type_completion (struct parser_state *par_state,
+ const struct block *block, struct stoken name0)
+{
+ int tail_index = chop_selector (name0.ptr, name0.length);
+ /* If there's no separator, just defer to ordinary symbol
+ completion. */
+ if (tail_index == -1)
+ return write_var_or_type (par_state, block, name0);
+
+ std::string copy (name0.ptr, tail_index);
+ struct type *type = write_var_or_type (par_state, block,
+ { copy.c_str (),
+ (int) copy.length () });
+ /* For completion purposes, it's enough that we return a type
+ here. */
+ if (type != nullptr)
+ return type;
+
+ ada_structop_operation *op = write_selectors (par_state,
+ name0.ptr + tail_index);
+ op->set_prefix (find_completion_bounds (par_state));
+ par_state->mark_struct_expression (op);
+ return nullptr;
+}
+
/* Write a left side of a component association (e.g., NAME in NAME =>
exp). If NAME has the form of a selected component, write it as an
ordinary expression. If it is a simple variable that unambiguously
@@ -1690,7 +1831,7 @@ write_name_assoc (struct parser_state *par_state, struct stoken name)
par_state->expression_context_block,
VAR_DOMAIN);
- if (syms.size () != 1 || SYMBOL_CLASS (syms[0].symbol) == LOC_TYPEDEF)
+ if (syms.size () != 1 || syms[0].symbol->aclass () == LOC_TYPEDEF)
pstate->push_new<ada_string_operation> (copy_name (name));
else
write_var_from_sym (par_state, syms[0]);
@@ -1727,10 +1868,18 @@ type_long_double (struct parser_state *par_state)
}
static struct type *
-type_char (struct parser_state *par_state)
+type_for_char (struct parser_state *par_state, ULONGEST value)
{
- return language_string_char_type (par_state->language (),
- par_state->gdbarch ());
+ if (value <= 0xff)
+ return language_string_char_type (par_state->language (),
+ par_state->gdbarch ());
+ else if (value <= 0xffff)
+ return language_lookup_primitive_type (par_state->language (),
+ par_state->gdbarch (),
+ "wide_character");
+ return language_lookup_primitive_type (par_state->language (),
+ par_state->gdbarch (),
+ "wide_wide_character");
}
static struct type *
diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c
index f2f8617cc1e..54bcd86ee7f 100644
--- a/gdb/ada-lang.c
+++ b/gdb/ada-lang.c
@@ -20,7 +20,7 @@
#include "defs.h"
#include <ctype.h>
-#include "gdb_regex.h"
+#include "gdbsupport/gdb_regex.h"
#include "frame.h"
#include "symtab.h"
#include "gdbtypes.h"
@@ -35,7 +35,7 @@
#include "breakpoint.h"
#include "gdbcore.h"
#include "hashtab.h"
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
#include "ada-lang.h"
#include "completer.h"
#include "ui-out.h"
@@ -59,6 +59,7 @@
#include "gdbsupport/byte-vector.h"
#include <algorithm>
#include "ada-exp.h"
+#include "charset.h"
/* Define whether or not the C operator '/' truncates towards zero for
differently signed operands (truncation direction is undefined in C).
@@ -209,6 +210,38 @@ static symbol_name_matcher_ftype *ada_get_symbol_name_matcher
+/* The character set used for source files. */
+static const char *ada_source_charset;
+
+/* The string "UTF-8". This is here so we can check for the UTF-8
+ charset using == rather than strcmp. */
+static const char ada_utf8[] = "UTF-8";
+
+/* Each entry in the UTF-32 case-folding table is of this form. */
+struct utf8_entry
+{
+ /* The start and end, inclusive, of this range of codepoints. */
+ uint32_t start, end;
+ /* The delta to apply to get the upper-case form. 0 if this is
+ already upper-case. */
+ int upper_delta;
+ /* The delta to apply to get the lower-case form. 0 if this is
+ already lower-case. */
+ int lower_delta;
+
+ bool operator< (uint32_t val) const
+ {
+ return end < val;
+ }
+};
+
+static const utf8_entry ada_case_fold[] =
+{
+#include "ada-casefold.h"
+};
+
+
+
/* The result of a symbol lookup to be stored in our symbol cache. */
struct cache_entry
@@ -786,7 +819,7 @@ ada_main_name (void)
if (msym.minsym != NULL)
{
- CORE_ADDR main_program_name_addr = BMSYMBOL_VALUE_ADDRESS (msym);
+ CORE_ADDR main_program_name_addr = msym.value_address ();
if (main_program_name_addr == 0)
error (_("Invalid address for Ada main program name."));
@@ -843,6 +876,52 @@ is_compiler_suffix (const char *str)
return *str == '\0' || (str[0] == ']' && str[1] == '\0');
}
+/* Append a non-ASCII character to RESULT. */
+static void
+append_hex_encoded (std::string &result, uint32_t one_char)
+{
+ if (one_char <= 0xff)
+ {
+ result.append ("U");
+ result.append (phex (one_char, 1));
+ }
+ else if (one_char <= 0xffff)
+ {
+ result.append ("W");
+ result.append (phex (one_char, 2));
+ }
+ else
+ {
+ result.append ("WW");
+ result.append (phex (one_char, 4));
+ }
+}
+
+/* Return a string that is a copy of the data in STORAGE, with
+ non-ASCII characters replaced by the appropriate hex encoding. A
+ template is used because, for UTF-8, we actually want to work with
+ UTF-32 codepoints. */
+template<typename T>
+std::string
+copy_and_hex_encode (struct obstack *storage)
+{
+ const T *chars = (T *) obstack_base (storage);
+ int num_chars = obstack_object_size (storage) / sizeof (T);
+ std::string result;
+ for (int i = 0; i < num_chars; ++i)
+ {
+ if (chars[i] <= 0x7f)
+ {
+ /* The host character set has to be a superset of ASCII, as
+ are all the other character sets we can use. */
+ result.push_back (chars[i]);
+ }
+ else
+ append_hex_encoded (result, chars[i]);
+ }
+ return result;
+}
+
/* The "encoded" form of DECODED, according to GNAT conventions. If
THROW_ERRORS, throw an error if invalid operator name is found.
Otherwise, return the empty string in that case. */
@@ -854,8 +933,12 @@ ada_encode_1 (const char *decoded, bool throw_errors)
return {};
std::string encoding_buffer;
+ bool saw_non_ascii = false;
for (const char *p = decoded; *p != '\0'; p += 1)
{
+ if ((*p & 0x80) != 0)
+ saw_non_ascii = true;
+
if (*p == '.')
encoding_buffer.append ("__");
else if (*p == '[' && is_compiler_suffix (p))
@@ -887,23 +970,70 @@ ada_encode_1 (const char *decoded, bool throw_errors)
encoding_buffer.push_back (*p);
}
+ /* If a non-ASCII character is seen, we must convert it to the
+ appropriate hex form. As this is more expensive, we keep track
+ of whether it is even necessary. */
+ if (saw_non_ascii)
+ {
+ auto_obstack storage;
+ bool is_utf8 = ada_source_charset == ada_utf8;
+ try
+ {
+ convert_between_encodings
+ (host_charset (),
+ is_utf8 ? HOST_UTF32 : ada_source_charset,
+ (const gdb_byte *) encoding_buffer.c_str (),
+ encoding_buffer.length (), 1,
+ &storage, translit_none);
+ }
+ catch (const gdb_exception &)
+ {
+ static bool warned = false;
+
+ /* Converting to UTF-32 shouldn't fail, so if it doesn't, we
+ might like to know why. */
+ if (!warned)
+ {
+ warned = true;
+ warning (_("charset conversion failure for '%s'.\n"
+ "You may have the wrong value for 'set ada source-charset'."),
+ encoding_buffer.c_str ());
+ }
+
+ /* We don't try to recover from errors. */
+ return encoding_buffer;
+ }
+
+ if (is_utf8)
+ return copy_and_hex_encode<uint32_t> (&storage);
+ return copy_and_hex_encode<gdb_byte> (&storage);
+ }
+
return encoding_buffer;
}
-/* The "encoded" form of DECODED, according to GNAT conventions. */
-
-std::string
-ada_encode (const char *decoded)
+/* Find the entry for C in the case-folding table. Return nullptr if
+ the entry does not cover C. */
+static const utf8_entry *
+find_case_fold_entry (uint32_t c)
{
- return ada_encode_1 (decoded, true);
+ auto iter = std::lower_bound (std::begin (ada_case_fold),
+ std::end (ada_case_fold),
+ c);
+ if (iter == std::end (ada_case_fold)
+ || c < iter->start
+ || c > iter->end)
+ return nullptr;
+ return &*iter;
}
/* Return NAME folded to lower case, or, if surrounded by single
- quotes, unfolded, but with the quotes stripped away. Result good
- to next call. */
+ quotes, unfolded, but with the quotes stripped away. If
+ THROW_ON_ERROR is true, encoding failures will throw an exception
+ rather than emitting a warning. Result good to next call. */
static const char *
-ada_fold_name (gdb::string_view name)
+ada_fold_name (gdb::string_view name, bool throw_on_error = false)
{
static std::string fold_storage;
@@ -911,14 +1041,120 @@ ada_fold_name (gdb::string_view name)
fold_storage = gdb::to_string (name.substr (1, name.size () - 2));
else
{
- fold_storage = gdb::to_string (name);
- for (int i = 0; i < name.size (); i += 1)
- fold_storage[i] = tolower (fold_storage[i]);
+ /* Why convert to UTF-32 and implement our own case-folding,
+ rather than convert to wchar_t and use the platform's
+ functions? I'm glad you asked.
+
+ The main problem is that GNAT implements an unusual rule for
+ case folding. For ASCII letters, letters in single-byte
+ encodings (such as ISO-8859-*), and Unicode letters that fit
+ in a single byte (i.e., code point is <= 0xff), the letter is
+ folded to lower case. Other Unicode letters are folded to
+ upper case.
+
+ This rule means that the code must be able to examine the
+ value of the character. And, some hosts do not use Unicode
+ for wchar_t, so examining the value of such characters is
+ forbidden. */
+ auto_obstack storage;
+ try
+ {
+ convert_between_encodings
+ (host_charset (), HOST_UTF32,
+ (const gdb_byte *) name.data (),
+ name.length (), 1,
+ &storage, translit_none);
+ }
+ catch (const gdb_exception &)
+ {
+ if (throw_on_error)
+ throw;
+
+ static bool warned = false;
+
+ /* Converting to UTF-32 shouldn't fail, so if it doesn't, we
+ might like to know why. */
+ if (!warned)
+ {
+ warned = true;
+ warning (_("could not convert '%s' from the host encoding (%s) to UTF-32.\n"
+ "This normally should not happen, please file a bug report."),
+ gdb::to_string (name).c_str (), host_charset ());
+ }
+
+ /* We don't try to recover from errors; just return the
+ original string. */
+ fold_storage = gdb::to_string (name);
+ return fold_storage.c_str ();
+ }
+
+ bool is_utf8 = ada_source_charset == ada_utf8;
+ uint32_t *chars = (uint32_t *) obstack_base (&storage);
+ int num_chars = obstack_object_size (&storage) / sizeof (uint32_t);
+ for (int i = 0; i < num_chars; ++i)
+ {
+ const struct utf8_entry *entry = find_case_fold_entry (chars[i]);
+ if (entry != nullptr)
+ {
+ uint32_t low = chars[i] + entry->lower_delta;
+ if (!is_utf8 || low <= 0xff)
+ chars[i] = low;
+ else
+ chars[i] = chars[i] + entry->upper_delta;
+ }
+ }
+
+ /* Now convert back to ordinary characters. */
+ auto_obstack reconverted;
+ try
+ {
+ convert_between_encodings (HOST_UTF32,
+ host_charset (),
+ (const gdb_byte *) chars,
+ num_chars * sizeof (uint32_t),
+ sizeof (uint32_t),
+ &reconverted,
+ translit_none);
+ obstack_1grow (&reconverted, '\0');
+ fold_storage = std::string ((const char *) obstack_base (&reconverted));
+ }
+ catch (const gdb_exception &)
+ {
+ if (throw_on_error)
+ throw;
+
+ static bool warned = false;
+
+ /* Converting back from UTF-32 shouldn't normally fail, but
+ there are some host encodings without upper/lower
+ equivalence. */
+ if (!warned)
+ {
+ warned = true;
+ warning (_("could not convert the lower-cased variant of '%s'\n"
+ "from UTF-32 to the host encoding (%s)."),
+ gdb::to_string (name).c_str (), host_charset ());
+ }
+
+ /* We don't try to recover from errors; just return the
+ original string. */
+ fold_storage = gdb::to_string (name);
+ }
}
return fold_storage.c_str ();
}
+/* The "encoded" form of DECODED, according to GNAT conventions. */
+
+std::string
+ada_encode (const char *decoded)
+{
+ if (decoded[0] != '<')
+ decoded = ada_fold_name (decoded);
+ return ada_encode_1 (decoded, true);
+}
+
/* Return nonzero if C is either a digit or a lowercase alphabet character. */
static int
@@ -999,12 +1235,78 @@ remove_compiler_suffix (const char *encoded, int *len)
return -1;
}
+/* Convert an ASCII hex string to a number. Reads exactly N
+ characters from STR. Returns true on success, false if one of the
+ digits was not a hex digit. */
+static bool
+convert_hex (const char *str, int n, uint32_t *out)
+{
+ uint32_t result = 0;
+
+ for (int i = 0; i < n; ++i)
+ {
+ if (!isxdigit (str[i]))
+ return false;
+ result <<= 4;
+ result |= fromhex (str[i]);
+ }
+
+ *out = result;
+ return true;
+}
+
+/* Convert a wide character from its ASCII hex representation in STR
+ (consisting of exactly N characters) to the host encoding,
+ appending the resulting bytes to OUT. If N==2 and the Ada source
+ charset is not UTF-8, then hex refers to an encoding in the
+ ADA_SOURCE_CHARSET; otherwise, use UTF-32. Return true on success.
+ Return false and do not modify OUT on conversion failure. */
+static bool
+convert_from_hex_encoded (std::string &out, const char *str, int n)
+{
+ uint32_t value;
+
+ if (!convert_hex (str, n, &value))
+ return false;
+ try
+ {
+ auto_obstack bytes;
+ /* In the 'U' case, the hex digits encode the character in the
+ Ada source charset. However, if the source charset is UTF-8,
+ this really means it is a single-byte UTF-32 character. */
+ if (n == 2 && ada_source_charset != ada_utf8)
+ {
+ gdb_byte one_char = (gdb_byte) value;
+
+ convert_between_encodings (ada_source_charset, host_charset (),
+ &one_char,
+ sizeof (one_char), sizeof (one_char),
+ &bytes, translit_none);
+ }
+ else
+ convert_between_encodings (HOST_UTF32, host_charset (),
+ (const gdb_byte *) &value,
+ sizeof (value), sizeof (value),
+ &bytes, translit_none);
+ obstack_1grow (&bytes, '\0');
+ out.append ((const char *) obstack_base (&bytes));
+ }
+ catch (const gdb_exception &)
+ {
+ /* On failure, the caller will just let the encoded form
+ through, which seems basically reasonable. */
+ return false;
+ }
+
+ return true;
+}
+
/* See ada-lang.h. */
std::string
-ada_decode (const char *encoded, bool wrap)
+ada_decode (const char *encoded, bool wrap, bool operators)
{
- int i, j;
+ int i;
int len0;
const char *p;
int at_start_name;
@@ -1021,6 +1323,11 @@ ada_decode (const char *encoded, bool wrap)
if we see this prefix. */
if (startswith (encoded, "_ada_"))
encoded += 5;
+ /* The "___ghost_" prefix is used for ghost entities. Normally
+ these aren't preserved but when they are, it's useful to see
+ them. */
+ if (startswith (encoded, "___ghost_"))
+ encoded += 9;
/* If the name starts with '_', then it is not a properly encoded
name, so do not attempt to decode it. Similarly, if the name
@@ -1068,10 +1375,6 @@ ada_decode (const char *encoded, bool wrap)
if (len0 > 1 && startswith (encoded + len0 - 1, "B"))
len0 -= 1;
- /* Make decoded big enough for possible expansion by operator name. */
-
- decoded.resize (2 * len0 + 1, 'X');
-
/* Remove trailing __{digit}+ or trailing ${digit}+. */
if (len0 > 1 && isdigit (encoded[len0 - 1]))
@@ -1089,14 +1392,14 @@ ada_decode (const char *encoded, bool wrap)
/* The first few characters that are not alphabetic are not part
of any encoding we use, so we can copy them over verbatim. */
- for (i = 0, j = 0; i < len0 && !isalpha (encoded[i]); i += 1, j += 1)
- decoded[j] = encoded[i];
+ for (i = 0; i < len0 && !isalpha (encoded[i]); i += 1)
+ decoded.push_back (encoded[i]);
at_start_name = 1;
while (i < len0)
{
/* Is this a symbol function? */
- if (at_start_name && encoded[i] == 'O')
+ if (operators && at_start_name && encoded[i] == 'O')
{
int k;
@@ -1107,10 +1410,9 @@ ada_decode (const char *encoded, bool wrap)
op_len - 1) == 0)
&& !isalnum (encoded[i + op_len]))
{
- strcpy (&decoded.front() + j, ada_opname_table[k].decoded);
+ decoded.append (ada_opname_table[k].decoded);
at_start_name = 0;
i += op_len;
- j += strlen (ada_opname_table[k].decoded);
break;
}
}
@@ -1196,6 +1498,32 @@ ada_decode (const char *encoded, bool wrap)
i++;
}
+ if (i < len0 + 3 && encoded[i] == 'U' && isxdigit (encoded[i + 1]))
+ {
+ if (convert_from_hex_encoded (decoded, &encoded[i + 1], 2))
+ {
+ i += 3;
+ continue;
+ }
+ }
+ else if (i < len0 + 5 && encoded[i] == 'W' && isxdigit (encoded[i + 1]))
+ {
+ if (convert_from_hex_encoded (decoded, &encoded[i + 1], 4))
+ {
+ i += 5;
+ continue;
+ }
+ }
+ else if (i < len0 + 10 && encoded[i] == 'W' && encoded[i + 1] == 'W'
+ && isxdigit (encoded[i + 2]))
+ {
+ if (convert_from_hex_encoded (decoded, &encoded[i + 2], 8))
+ {
+ i += 10;
+ continue;
+ }
+ }
+
if (encoded[i] == 'X' && i != 0 && isalnum (encoded[i - 1]))
{
/* This is a X[bn]* sequence not separated from the previous
@@ -1214,28 +1542,28 @@ ada_decode (const char *encoded, bool wrap)
else if (i < len0 - 2 && encoded[i] == '_' && encoded[i + 1] == '_')
{
/* Replace '__' by '.'. */
- decoded[j] = '.';
+ decoded.push_back ('.');
at_start_name = 1;
i += 2;
- j += 1;
}
else
{
/* It's a character part of the decoded name, so just copy it
over. */
- decoded[j] = encoded[i];
+ decoded.push_back (encoded[i]);
i += 1;
- j += 1;
}
}
- decoded.resize (j);
/* Decoded names should never contain any uppercase character.
Double-check this, and abort the decoding if we find one. */
- for (i = 0; i < decoded.length(); ++i)
- if (isupper (decoded[i]) || decoded[i] == ' ')
- goto Suppress;
+ if (operators)
+ {
+ for (i = 0; i < decoded.length(); ++i)
+ if (isupper (decoded[i]) || decoded[i] == ' ')
+ goto Suppress;
+ }
/* If the compiler added a suffix, append it now. */
if (suffix >= 0)
@@ -3163,9 +3491,9 @@ static void
ada_print_symbol_signature (struct ui_file *stream, struct symbol *sym,
const struct type_print_options *flags)
{
- struct type *type = SYMBOL_TYPE (sym);
+ struct type *type = sym->type ();
- fprintf_filtered (stream, "%s", sym->print_name ());
+ gdb_printf (stream, "%s", sym->print_name ());
if (!print_signatures
|| type == NULL
|| type->code () != TYPE_CODE_FUNC)
@@ -3175,20 +3503,20 @@ ada_print_symbol_signature (struct ui_file *stream, struct symbol *sym,
{
int i;
- fprintf_filtered (stream, " (");
+ gdb_printf (stream, " (");
for (i = 0; i < type->num_fields (); ++i)
{
if (i > 0)
- fprintf_filtered (stream, "; ");
+ gdb_printf (stream, "; ");
ada_print_type (type->field (i).type (), NULL, stream, -1, 0,
flags);
}
- fprintf_filtered (stream, ")");
+ gdb_printf (stream, ")");
}
if (TYPE_TARGET_TYPE (type) != NULL
&& TYPE_TARGET_TYPE (type)->code () != TYPE_CODE_VOID)
{
- fprintf_filtered (stream, " return ");
+ gdb_printf (stream, " return ");
ada_print_type (TYPE_TARGET_TYPE (type), NULL, stream, -1, 0, flags);
}
}
@@ -3314,9 +3642,9 @@ See set/show multiple-symbol."));
if (select_mode == multiple_symbols_all && max_results > 1)
return nsyms;
- printf_filtered (_("[0] cancel\n"));
+ gdb_printf (_("[0] cancel\n"));
if (max_results > 1)
- printf_filtered (_("[1] all\n"));
+ gdb_printf (_("[1] all\n"));
sort_choices (syms, nsyms);
@@ -3325,19 +3653,19 @@ See set/show multiple-symbol."));
if (syms[i].symbol == NULL)
continue;
- if (SYMBOL_CLASS (syms[i].symbol) == LOC_BLOCK)
+ if (syms[i].symbol->aclass () == LOC_BLOCK)
{
struct symtab_and_line sal =
find_function_start_sal (syms[i].symbol, 1);
- printf_filtered ("[%d] ", i + first_choice);
+ gdb_printf ("[%d] ", i + first_choice);
ada_print_symbol_signature (gdb_stdout, syms[i].symbol,
&type_print_raw_options);
if (sal.symtab == NULL)
- printf_filtered (_(" at %p[<no source file available>%p]:%d\n"),
- metadata_style.style ().ptr (), nullptr, sal.line);
+ gdb_printf (_(" at %p[<no source file available>%p]:%d\n"),
+ metadata_style.style ().ptr (), nullptr, sal.line);
else
- printf_filtered
+ gdb_printf
(_(" at %ps:%d\n"),
styled_string (file_name_style.style (),
symtab_to_filename_for_display (sal.symtab)),
@@ -3347,47 +3675,47 @@ See set/show multiple-symbol."));
else
{
int is_enumeral =
- (SYMBOL_CLASS (syms[i].symbol) == LOC_CONST
- && SYMBOL_TYPE (syms[i].symbol) != NULL
- && SYMBOL_TYPE (syms[i].symbol)->code () == TYPE_CODE_ENUM);
+ (syms[i].symbol->aclass () == LOC_CONST
+ && syms[i].symbol->type () != NULL
+ && syms[i].symbol->type ()->code () == TYPE_CODE_ENUM);
struct symtab *symtab = NULL;
- if (SYMBOL_OBJFILE_OWNED (syms[i].symbol))
- symtab = symbol_symtab (syms[i].symbol);
+ if (syms[i].symbol->is_objfile_owned ())
+ symtab = syms[i].symbol->symtab ();
- if (SYMBOL_LINE (syms[i].symbol) != 0 && symtab != NULL)
+ if (syms[i].symbol->line () != 0 && symtab != NULL)
{
- printf_filtered ("[%d] ", i + first_choice);
+ gdb_printf ("[%d] ", i + first_choice);
ada_print_symbol_signature (gdb_stdout, syms[i].symbol,
&type_print_raw_options);
- printf_filtered (_(" at %s:%d\n"),
- symtab_to_filename_for_display (symtab),
- SYMBOL_LINE (syms[i].symbol));
+ gdb_printf (_(" at %s:%d\n"),
+ symtab_to_filename_for_display (symtab),
+ syms[i].symbol->line ());
}
else if (is_enumeral
- && SYMBOL_TYPE (syms[i].symbol)->name () != NULL)
+ && syms[i].symbol->type ()->name () != NULL)
{
- printf_filtered (("[%d] "), i + first_choice);
- ada_print_type (SYMBOL_TYPE (syms[i].symbol), NULL,
+ gdb_printf (("[%d] "), i + first_choice);
+ ada_print_type (syms[i].symbol->type (), NULL,
gdb_stdout, -1, 0, &type_print_raw_options);
- printf_filtered (_("'(%s) (enumeral)\n"),
- syms[i].symbol->print_name ());
+ gdb_printf (_("'(%s) (enumeral)\n"),
+ syms[i].symbol->print_name ());
}
else
{
- printf_filtered ("[%d] ", i + first_choice);
+ gdb_printf ("[%d] ", i + first_choice);
ada_print_symbol_signature (gdb_stdout, syms[i].symbol,
&type_print_raw_options);
if (symtab != NULL)
- printf_filtered (is_enumeral
- ? _(" in %s (enumeral)\n")
- : _(" at %s:?\n"),
- symtab_to_filename_for_display (symtab));
+ gdb_printf (is_enumeral
+ ? _(" in %s (enumeral)\n")
+ : _(" at %s:?\n"),
+ symtab_to_filename_for_display (symtab));
else
- printf_filtered (is_enumeral
- ? _(" (enumeral)\n")
- : _(" at ?\n"));
+ gdb_printf (is_enumeral
+ ? _(" (enumeral)\n")
+ : _(" at ?\n"));
}
}
}
@@ -3467,7 +3795,7 @@ ada_resolve_enum (std::vector<struct block_symbol> &syms,
{
/* We already know the name matches, so we're just looking for
an element of the correct enum type. */
- if (ada_check_typedef (SYMBOL_TYPE (syms[i].symbol)) == context_type)
+ if (ada_check_typedef (syms[i].symbol->type ()) == context_type)
return i;
}
@@ -3491,7 +3819,7 @@ ada_resolve_variable (struct symbol *sym, const struct block *block,
candidates.end (),
[] (block_symbol &bsym)
{
- switch (SYMBOL_CLASS (bsym.symbol))
+ switch (bsym.symbol->aclass ())
{
case LOC_REGISTER:
case LOC_ARG:
@@ -3514,7 +3842,7 @@ ada_resolve_variable (struct symbol *sym, const struct block *block,
candidates.end (),
[] (block_symbol &bsym)
{
- return SYMBOL_CLASS (bsym.symbol) == LOC_TYPEDEF;
+ return bsym.symbol->aclass () == LOC_TYPEDEF;
}),
candidates.end ());
}
@@ -3526,7 +3854,7 @@ ada_resolve_variable (struct symbol *sym, const struct block *block,
candidates.end (),
[] (block_symbol &bsym)
{
- return bsym.symbol->artificial;
+ return bsym.symbol->is_artificial ();
}),
candidates.end ());
@@ -3550,7 +3878,7 @@ ada_resolve_variable (struct symbol *sym, const struct block *block,
}
else
{
- printf_filtered (_("Multiple matches for %s\n"), sym->print_name ());
+ gdb_printf (_("Multiple matches for %s\n"), sym->print_name ());
user_select_syms (candidates.data (), candidates.size (), 1);
i = 0;
}
@@ -3626,9 +3954,9 @@ static int
ada_args_match (struct symbol *func, struct value **actuals, int n_actuals)
{
int i;
- struct type *func_type = SYMBOL_TYPE (func);
+ struct type *func_type = func->type ();
- if (SYMBOL_CLASS (func) == LOC_CONST
+ if (func->aclass () == LOC_CONST
&& func_type->code () == TYPE_CODE_ENUM)
return (n_actuals == 0);
else if (func_type == NULL || func_type->code () != TYPE_CODE_FUNC)
@@ -3714,7 +4042,7 @@ ada_resolve_function (std::vector<struct block_symbol> &syms,
{
for (k = 0; k < syms.size (); k += 1)
{
- struct type *type = ada_check_typedef (SYMBOL_TYPE (syms[k].symbol));
+ struct type *type = ada_check_typedef (syms[k].symbol->type ());
if (ada_args_match (syms[k].symbol, args, nargs)
&& (fallback || return_match (type, context_type)))
@@ -3733,7 +4061,7 @@ ada_resolve_function (std::vector<struct block_symbol> &syms,
return -1;
else if (m > 1 && !parse_completion)
{
- printf_filtered (_("Multiple matches for %s\n"), name);
+ gdb_printf (_("Multiple matches for %s\n"), name);
user_select_syms (syms.data (), m, 1);
return 0;
}
@@ -3934,7 +4262,7 @@ ada_parse_renaming (struct symbol *sym,
if (sym == NULL)
return ADA_NOT_RENAMING;
- switch (SYMBOL_CLASS (sym))
+ switch (sym->aclass ())
{
default:
return ADA_NOT_RENAMING;
@@ -4376,19 +4704,20 @@ cache_symbol (const char *name, domain_enum domain, struct symbol *sym,
/* Symbols for builtin types don't have a block.
For now don't cache such symbols. */
- if (sym != NULL && !SYMBOL_OBJFILE_OWNED (sym))
+ if (sym != NULL && !sym->is_objfile_owned ())
return;
/* If the symbol is a local symbol, then do not cache it, as a search
for that symbol depends on the context. To determine whether
the symbol is local or not, we check the block where we found it
against the global and static blocks of its associated symtab. */
- if (sym
- && BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symbol_symtab (sym)),
- GLOBAL_BLOCK) != block
- && BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symbol_symtab (sym)),
- STATIC_BLOCK) != block)
- return;
+ if (sym != nullptr)
+ {
+ const blockvector &bv = *sym->symtab ()->compunit ()->blockvector ();
+
+ if (bv.global_block () != block && bv.static_block () != block)
+ return;
+ }
h = msymbol_hash (name) % HASH_SIZE;
e = XOBNEW (&sym_cache->cache_space, cache_entry);
@@ -4441,9 +4770,9 @@ static int
is_nonfunction (const std::vector<struct block_symbol> &syms)
{
for (const block_symbol &sym : syms)
- if (SYMBOL_TYPE (sym.symbol)->code () != TYPE_CODE_FUNC
- && (SYMBOL_TYPE (sym.symbol)->code () != TYPE_CODE_ENUM
- || SYMBOL_CLASS (sym.symbol) != LOC_CONST))
+ if (sym.symbol->type ()->code () != TYPE_CODE_FUNC
+ && (sym.symbol->type ()->code () != TYPE_CODE_ENUM
+ || sym.symbol->aclass () != LOC_CONST))
return 1;
return 0;
@@ -4477,18 +4806,18 @@ lesseq_defined_than (struct symbol *sym0, struct symbol *sym1)
{
if (sym0 == sym1)
return 1;
- if (SYMBOL_DOMAIN (sym0) != SYMBOL_DOMAIN (sym1)
- || SYMBOL_CLASS (sym0) != SYMBOL_CLASS (sym1))
+ if (sym0->domain () != sym1->domain ()
+ || sym0->aclass () != sym1->aclass ())
return 0;
- switch (SYMBOL_CLASS (sym0))
+ switch (sym0->aclass ())
{
case LOC_UNDEF:
return 1;
case LOC_TYPEDEF:
{
- struct type *type0 = SYMBOL_TYPE (sym0);
- struct type *type1 = SYMBOL_TYPE (sym1);
+ struct type *type0 = sym0->type ();
+ struct type *type1 = sym1->type ();
const char *name0 = sym0->linkage_name ();
const char *name1 = sym1->linkage_name ();
int len0 = strlen (name0);
@@ -4500,15 +4829,15 @@ lesseq_defined_than (struct symbol *sym0, struct symbol *sym1)
&& startswith (name1 + len0, "___XV")));
}
case LOC_CONST:
- return SYMBOL_VALUE (sym0) == SYMBOL_VALUE (sym1)
- && equiv_types (SYMBOL_TYPE (sym0), SYMBOL_TYPE (sym1));
+ return sym0->value_longest () == sym1->value_longest ()
+ && equiv_types (sym0->type (), sym1->type ());
case LOC_STATIC:
{
const char *name0 = sym0->linkage_name ();
const char *name1 = sym1->linkage_name ();
return (strcmp (name0, name1) == 0
- && SYMBOL_VALUE_ADDRESS (sym0) == SYMBOL_VALUE_ADDRESS (sym1));
+ && sym0->value_address () == sym1->value_address ());
}
default:
@@ -4562,8 +4891,6 @@ ada_lookup_simple_minsym (const char *name)
{
struct bound_minimal_symbol result;
- memset (&result, 0, sizeof (result));
-
symbol_name_match_type match_type = name_match_type_from_name (name);
lookup_name_info lookup_name (name, match_type);
@@ -4575,7 +4902,7 @@ ada_lookup_simple_minsym (const char *name)
for (minimal_symbol *msymbol : objfile->msymbols ())
{
if (match_name (msymbol->linkage_name (), lookup_name, NULL)
- && MSYMBOL_TYPE (msymbol) != mst_solib_trampoline)
+ && msymbol->type () != mst_solib_trampoline)
{
result.minsym = msymbol;
result.objfile = objfile;
@@ -4675,26 +5002,26 @@ symbols_are_identical_enums (const std::vector<struct block_symbol> &syms)
/* Quick check: All symbols should have an enum type. */
for (i = 0; i < syms.size (); i++)
- if (SYMBOL_TYPE (syms[i].symbol)->code () != TYPE_CODE_ENUM)
+ if (syms[i].symbol->type ()->code () != TYPE_CODE_ENUM)
return 0;
/* Quick check: They should all have the same value. */
for (i = 1; i < syms.size (); i++)
- if (SYMBOL_VALUE (syms[i].symbol) != SYMBOL_VALUE (syms[0].symbol))
+ if (syms[i].symbol->value_longest () != syms[0].symbol->value_longest ())
return 0;
/* Quick check: They should all have the same number of enumerals. */
for (i = 1; i < syms.size (); i++)
- if (SYMBOL_TYPE (syms[i].symbol)->num_fields ()
- != SYMBOL_TYPE (syms[0].symbol)->num_fields ())
+ if (syms[i].symbol->type ()->num_fields ()
+ != syms[0].symbol->type ()->num_fields ())
return 0;
/* All the sanity checks passed, so we might have a set of
identical enumeration types. Perform a more complete
comparison of the type of each symbol. */
for (i = 1; i < syms.size (); i++)
- if (!ada_identical_enum_types_p (SYMBOL_TYPE (syms[i].symbol),
- SYMBOL_TYPE (syms[0].symbol)))
+ if (!ada_identical_enum_types_p (syms[i].symbol->type (),
+ syms[0].symbol->type ()))
return 0;
return 1;
@@ -4725,13 +5052,13 @@ remove_extra_symbols (std::vector<struct block_symbol> *syms)
/* If two symbols have the same name and one of them is a stub type,
the get rid of the stub. */
- if (SYMBOL_TYPE ((*syms)[i].symbol)->is_stub ()
+ if ((*syms)[i].symbol->type ()->is_stub ()
&& (*syms)[i].symbol->linkage_name () != NULL)
{
for (j = 0; j < syms->size (); j++)
{
if (j != i
- && !SYMBOL_TYPE ((*syms)[j].symbol)->is_stub ()
+ && !(*syms)[j].symbol->type ()->is_stub ()
&& (*syms)[j].symbol->linkage_name () != NULL
&& strcmp ((*syms)[i].symbol->linkage_name (),
(*syms)[j].symbol->linkage_name ()) == 0)
@@ -4743,8 +5070,8 @@ remove_extra_symbols (std::vector<struct block_symbol> *syms)
should be identical. */
else if ((*syms)[i].symbol->linkage_name () != NULL
- && SYMBOL_CLASS ((*syms)[i].symbol) == LOC_STATIC
- && is_nondebugging_type (SYMBOL_TYPE ((*syms)[i].symbol)))
+ && (*syms)[i].symbol->aclass () == LOC_STATIC
+ && is_nondebugging_type ((*syms)[i].symbol->type ()))
{
for (j = 0; j < syms->size (); j += 1)
{
@@ -4752,10 +5079,10 @@ remove_extra_symbols (std::vector<struct block_symbol> *syms)
&& (*syms)[j].symbol->linkage_name () != NULL
&& strcmp ((*syms)[i].symbol->linkage_name (),
(*syms)[j].symbol->linkage_name ()) == 0
- && SYMBOL_CLASS ((*syms)[i].symbol)
- == SYMBOL_CLASS ((*syms)[j].symbol)
- && SYMBOL_VALUE_ADDRESS ((*syms)[i].symbol)
- == SYMBOL_VALUE_ADDRESS ((*syms)[j].symbol))
+ && ((*syms)[i].symbol->aclass ()
+ == (*syms)[j].symbol->aclass ())
+ && (*syms)[i].symbol->value_address ()
+ == (*syms)[j].symbol->value_address ())
remove_p = 1;
}
}
@@ -4845,10 +5172,10 @@ is_package_name (const char *name)
static int
old_renaming_is_invisible (const struct symbol *sym, const char *function_name)
{
- if (SYMBOL_CLASS (sym) != LOC_TYPEDEF)
+ if (sym->aclass () != LOC_TYPEDEF)
return 0;
- std::string scope = xget_renaming_scope (SYMBOL_TYPE (sym));
+ std::string scope = xget_renaming_scope (sym->type ());
/* If the rename has been defined in a package, then it is visible. */
if (is_package_name (scope.c_str ()))
@@ -4924,7 +5251,7 @@ remove_irrelevant_renamings (std::vector<struct block_symbol> *syms,
const char *name;
const char *suffix;
- if (sym == NULL || SYMBOL_CLASS (sym) == LOC_TYPEDEF)
+ if (sym == NULL || sym->aclass () == LOC_TYPEDEF)
continue;
name = sym->linkage_name ();
suffix = strstr (name, "___XR");
@@ -5005,10 +5332,10 @@ ada_add_local_symbols (std::vector<struct block_symbol> &result,
/* If we found a non-function match, assume that's the one. We
only check this when finding a function boundary, so that we
can accumulate all results from intervening blocks first. */
- if (BLOCK_FUNCTION (block) != nullptr && is_nonfunction (result))
+ if (block->function () != nullptr && is_nonfunction (result))
return;
- block = BLOCK_SUPERBLOCK (block);
+ block = block->superblock ();
}
}
@@ -5051,9 +5378,9 @@ match_data::operator() (struct block_symbol *bsym)
}
else
{
- if (SYMBOL_CLASS (sym) == LOC_UNRESOLVED)
+ if (sym->aclass () == LOC_UNRESOLVED)
return true;
- else if (SYMBOL_IS_ARGUMENT (sym))
+ else if (sym->is_argument ())
arg_sym = sym;
else
{
@@ -5237,7 +5564,7 @@ map_matching_symbols (struct objfile *objfile,
for (compunit_symtab *symtab : objfile->compunits ())
{
const struct block *block
- = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (symtab), block_kind);
+ = symtab->blockvector ()->block (block_kind);
if (!iterate_over_symbols_terminated (block, lookup_name,
domain, data))
break;
@@ -5266,7 +5593,7 @@ add_nonlocal_symbols (std::vector<struct block_symbol> &result,
for (compunit_symtab *cu : objfile->compunits ())
{
const struct block *global_block
- = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (cu), GLOBAL_BLOCK);
+ = cu->blockvector ()->global_block ();
if (ada_add_block_renamings (result, global_block, lookup_name,
domain))
@@ -5698,6 +6025,9 @@ wild_match (const char *name, const char *patn)
const char *p;
const char *name0 = name;
+ if (startswith (name, "___ghost_"))
+ name += 9;
+
while (1)
{
const char *match = name;
@@ -5740,11 +6070,11 @@ ada_add_block_symbols (std::vector<struct block_symbol> &result,
sym != NULL;
sym = block_iter_match_next (lookup_name, &iter))
{
- if (symbol_matches_domain (sym->language (), SYMBOL_DOMAIN (sym), domain))
+ if (symbol_matches_domain (sym->language (), sym->domain (), domain))
{
- if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
+ if (sym->aclass () != LOC_UNRESOLVED)
{
- if (SYMBOL_IS_ARGUMENT (sym))
+ if (sym->is_argument ())
arg_sym = sym;
else
{
@@ -5780,7 +6110,7 @@ ada_add_block_symbols (std::vector<struct block_symbol> &result,
ALL_BLOCK_SYMBOLS (block, iter, sym)
{
if (symbol_matches_domain (sym->language (),
- SYMBOL_DOMAIN (sym), domain))
+ sym->domain (), domain))
{
int cmp;
@@ -5796,9 +6126,9 @@ ada_add_block_symbols (std::vector<struct block_symbol> &result,
if (cmp == 0
&& is_name_suffix (sym->linkage_name () + name_len + 5))
{
- if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
+ if (sym->aclass () != LOC_UNRESOLVED)
{
- if (SYMBOL_IS_ARGUMENT (sym))
+ if (sym->is_argument ())
arg_sym = sym;
else
{
@@ -5969,6 +6299,18 @@ ada_is_ignored_field (struct type *type, int field_num)
should not be ignored either. */
if (name[0] == '_' && !startswith (name, "_parent"))
return 1;
+
+ /* The compiler doesn't document this, but sometimes it emits
+ a field whose name starts with a capital letter, like 'V148s'.
+ These aren't marked as artificial in any way, but we know they
+ should be ignored. However, wrapper fields should not be
+ ignored. */
+ if (name[0] == 'S' || name[0] == 'R' || name[0] == 'O')
+ {
+ /* Wrapper field. */
+ }
+ else if (isupper (name[0]))
+ return 1;
}
/* If this is the dispatch table of a tagged type or an interface tag,
@@ -6104,9 +6446,10 @@ ada_tag_value_at_base_address (struct value *obj)
if (is_ada95_tag (tag))
return obj;
- ptr_type = language_lookup_primitive_type
- (language_def (language_ada), target_gdbarch(), "storage_offset");
- ptr_type = lookup_pointer_type (ptr_type);
+ struct type *offset_type
+ = language_lookup_primitive_type (language_def (language_ada),
+ target_gdbarch(), "storage_offset");
+ ptr_type = lookup_pointer_type (offset_type);
val = value_cast (ptr_type, tag);
if (!val)
return obj;
@@ -6138,16 +6481,28 @@ ada_tag_value_at_base_address (struct value *obj)
if (offset_to_top == -1)
return obj;
- /* OFFSET_TO_TOP used to be a positive value to be subtracted
- from the base address. This was however incompatible with
- C++ dispatch table: C++ uses a *negative* value to *add*
- to the base address. Ada's convention has therefore been
- changed in GNAT 19.0w 20171023: since then, C++ and Ada
- use the same convention. Here, we support both cases by
- checking the sign of OFFSET_TO_TOP. */
-
- if (offset_to_top > 0)
- offset_to_top = -offset_to_top;
+ /* Storage_Offset'Last is used to indicate that a dynamic offset to
+ top is used. In this situation the offset is stored just after
+ the tag, in the object itself. */
+ ULONGEST last = (((ULONGEST) 1) << (8 * TYPE_LENGTH (offset_type) - 1)) - 1;
+ if (offset_to_top == last)
+ {
+ struct value *tem = value_addr (tag);
+ tem = value_ptradd (tem, 1);
+ tem = value_cast (ptr_type, tem);
+ offset_to_top = value_as_long (value_ind (tem));
+ }
+ else if (offset_to_top > 0)
+ {
+ /* OFFSET_TO_TOP used to be a positive value to be subtracted
+ from the base address. This was however incompatible with
+ C++ dispatch table: C++ uses a *negative* value to *add*
+ to the base address. Ada's convention has therefore been
+ changed in GNAT 19.0w 20171023: since then, C++ and Ada
+ use the same convention. Here, we support both cases by
+ checking the sign of OFFSET_TO_TOP. */
+ offset_to_top = -offset_to_top;
+ }
base_address = value_address (obj) + offset_to_top;
tag = value_tag_from_contents_and_address (obj_type, NULL, base_address);
@@ -6222,7 +6577,6 @@ ada_get_tsd_from_tag (struct value *tag)
static gdb::unique_xmalloc_ptr<char>
ada_tag_name_from_tsd (struct value *tsd)
{
- char *p;
struct value *val;
val = ada_value_struct_elt (tsd, "expanded_name", 1);
@@ -6233,13 +6587,18 @@ ada_tag_name_from_tsd (struct value *tsd)
if (buffer == nullptr)
return nullptr;
- for (p = buffer.get (); *p != '\0'; ++p)
+ try
{
- if (isalpha (*p))
- *p = tolower (*p);
+ /* Let this throw an exception on error. If the data is
+ uninitialized, we'd rather not have the user see a
+ warning. */
+ const char *folded = ada_fold_name (buffer.get (), true);
+ return make_unique_xstrdup (folded);
+ }
+ catch (const gdb_exception &)
+ {
+ return nullptr;
}
-
- return buffer;
}
/* The type name of the dynamic type denoted by the 'tag value TAG, as
@@ -6915,7 +7274,7 @@ type_as_string (struct type *type)
type_print (type, "", &tmp_stream, -1);
- return std::move (tmp_stream.string ());
+ return tmp_stream.release ();
}
/* Given a type TYPE, look up the type of the component of type named NAME.
@@ -7214,7 +7573,7 @@ ada_find_any_type_symbol (const char *name)
struct symbol *sym;
sym = standard_lookup (name, get_selected_block (NULL), VAR_DOMAIN);
- if (sym != NULL && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
+ if (sym != NULL && sym->aclass () == LOC_TYPEDEF)
return sym;
sym = standard_lookup (name, NULL, STRUCT_DOMAIN);
@@ -7231,7 +7590,7 @@ ada_find_any_type (const char *name)
struct symbol *sym = ada_find_any_type_symbol (name);
if (sym != NULL)
- return SYMBOL_TYPE (sym);
+ return sym->type ();
return NULL;
}
@@ -8788,7 +9147,13 @@ ada_enum_name (const char *name)
if (name[1] == 'U' || name[1] == 'W')
{
- if (sscanf (name + 2, "%x", &v) != 1)
+ int offset = 2;
+ if (name[1] == 'W' && name[2] == 'W')
+ {
+ /* Also handle the QWW case. */
+ ++offset;
+ }
+ if (sscanf (name + offset, "%x", &v) != 1)
return name;
}
else if (((name[1] >= '0' && name[1] <= '9')
@@ -8804,9 +9169,11 @@ ada_enum_name (const char *name)
if (isascii (v) && isprint (v))
storage = string_printf ("'%c'", v);
else if (name[1] == 'U')
- storage = string_printf ("[\"%02x\"]", v);
+ storage = string_printf ("'[\"%02x\"]'", v);
+ else if (name[2] != 'W')
+ storage = string_printf ("'[\"%04x\"]'", v);
else
- storage = string_printf ("[\"%04x\"]", v);
+ storage = string_printf ("'[\"%06x\"]'", v);
return storage.c_str ();
}
@@ -9136,7 +9503,7 @@ ada_aggregate_component::uses_objfile (struct objfile *objfile)
void
ada_aggregate_component::dump (ui_file *stream, int depth)
{
- fprintf_filtered (stream, _("%*sAggregate\n"), depth, "");
+ gdb_printf (stream, _("%*sAggregate\n"), depth, "");
for (const auto &item : m_components)
item->dump (stream, depth + 1);
}
@@ -9203,8 +9570,8 @@ ada_positional_component::uses_objfile (struct objfile *objfile)
void
ada_positional_component::dump (ui_file *stream, int depth)
{
- fprintf_filtered (stream, _("%*sPositional, index = %d\n"),
- depth, "", m_index);
+ gdb_printf (stream, _("%*sPositional, index = %d\n"),
+ depth, "", m_index);
m_op->dump (stream, depth + 1);
}
@@ -9238,7 +9605,7 @@ ada_discrete_range_association::uses_objfile (struct objfile *objfile)
void
ada_discrete_range_association::dump (ui_file *stream, int depth)
{
- fprintf_filtered (stream, _("%*sDiscrete range:\n"), depth, "");
+ gdb_printf (stream, _("%*sDiscrete range:\n"), depth, "");
m_low->dump (stream, depth + 1);
m_high->dump (stream, depth + 1);
}
@@ -9274,7 +9641,7 @@ ada_name_association::uses_objfile (struct objfile *objfile)
void
ada_name_association::dump (ui_file *stream, int depth)
{
- fprintf_filtered (stream, _("%*sName:\n"), depth, "");
+ gdb_printf (stream, _("%*sName:\n"), depth, "");
m_val->dump (stream, depth + 1);
}
@@ -9332,7 +9699,7 @@ ada_choices_component::uses_objfile (struct objfile *objfile)
void
ada_choices_component::dump (ui_file *stream, int depth)
{
- fprintf_filtered (stream, _("%*sChoices:\n"), depth, "");
+ gdb_printf (stream, _("%*sChoices:\n"), depth, "");
m_op->dump (stream, depth + 1);
for (const auto &item : m_assocs)
item->dump (stream, depth + 1);
@@ -9361,7 +9728,7 @@ ada_others_component::uses_objfile (struct objfile *objfile)
void
ada_others_component::dump (ui_file *stream, int depth)
{
- fprintf_filtered (stream, _("%*sOthers:\n"), depth, "");
+ gdb_printf (stream, _("%*sOthers:\n"), depth, "");
m_op->dump (stream, depth + 1);
}
@@ -10181,7 +10548,7 @@ ada_resolvable::replace (operation_up &&owner,
return std::move (owner);
}
-/* Convert the character literal whose ASCII value would be VAL to the
+/* Convert the character literal whose value would be VAL to the
appropriate value of type TYPE, if there is a translation.
Otherwise return VAL. Hence, in an enumeration type ('A', 'B'),
the literal 'A' (VAL == 65), returns 0. */
@@ -10189,7 +10556,7 @@ ada_resolvable::replace (operation_up &&owner,
static LONGEST
convert_char_literal (struct type *type, LONGEST val)
{
- char name[7];
+ char name[12];
int f;
if (type == NULL)
@@ -10200,8 +10567,12 @@ convert_char_literal (struct type *type, LONGEST val)
if ((val >= 'a' && val <= 'z') || (val >= '0' && val <= '9'))
xsnprintf (name, sizeof (name), "Q%c", (int) val);
+ else if (val >= 0 && val < 256)
+ xsnprintf (name, sizeof (name), "QU%02x", (unsigned) val);
+ else if (val >= 0 && val < 0x10000)
+ xsnprintf (name, sizeof (name), "QW%04x", (unsigned) val);
else
- xsnprintf (name, sizeof (name), "QU%02x", (int) val);
+ xsnprintf (name, sizeof (name), "QWW%08lx", (unsigned long) val);
size_t len = strlen (name);
for (f = 0; f < type->num_fields (); f += 1)
{
@@ -10218,6 +10589,17 @@ convert_char_literal (struct type *type, LONGEST val)
return val;
}
+value *
+ada_char_operation::evaluate (struct type *expect_type,
+ struct expression *exp,
+ enum noside noside)
+{
+ value *result = long_const_operation::evaluate (expect_type, exp, noside);
+ if (expect_type != nullptr)
+ result = ada_value_cast (expect_type, result);
+ return result;
+}
+
/* See ada-exp.h. */
operation_up
@@ -10238,7 +10620,7 @@ ada_char_operation::replace (operation_up &&owner,
= convert_char_literal (context_type, std::get<1> (m_storage));
}
- return make_operation<ada_wrapped_operation> (std::move (result));
+ return result;
}
value *
@@ -10269,12 +10651,108 @@ ada_string_operation::evaluate (struct type *expect_type,
struct expression *exp,
enum noside noside)
{
- value *result = string_operation::evaluate (expect_type, exp, noside);
- /* The result type will have code OP_STRING, bashed there from
- OP_ARRAY. Bash it back. */
- if (value_type (result)->code () == TYPE_CODE_STRING)
- value_type (result)->set_code (TYPE_CODE_ARRAY);
- return result;
+ struct type *char_type;
+ if (expect_type != nullptr && ada_is_string_type (expect_type))
+ char_type = ada_array_element_type (expect_type, 1);
+ else
+ char_type = language_string_char_type (exp->language_defn, exp->gdbarch);
+
+ const std::string &str = std::get<0> (m_storage);
+ const char *encoding;
+ switch (TYPE_LENGTH (char_type))
+ {
+ case 1:
+ {
+ /* Simply copy over the data -- this isn't perhaps strictly
+ correct according to the encodings, but it is gdb's
+ historical behavior. */
+ struct type *stringtype
+ = lookup_array_range_type (char_type, 1, str.length ());
+ struct value *val = allocate_value (stringtype);
+ memcpy (value_contents_raw (val).data (), str.c_str (),
+ str.length ());
+ return val;
+ }
+
+ case 2:
+ if (gdbarch_byte_order (exp->gdbarch) == BFD_ENDIAN_BIG)
+ encoding = "UTF-16BE";
+ else
+ encoding = "UTF-16LE";
+ break;
+
+ case 4:
+ if (gdbarch_byte_order (exp->gdbarch) == BFD_ENDIAN_BIG)
+ encoding = "UTF-32BE";
+ else
+ encoding = "UTF-32LE";
+ break;
+
+ default:
+ error (_("unexpected character type size %s"),
+ pulongest (TYPE_LENGTH (char_type)));
+ }
+
+ auto_obstack converted;
+ convert_between_encodings (host_charset (), encoding,
+ (const gdb_byte *) str.c_str (),
+ str.length (), 1,
+ &converted, translit_none);
+
+ struct type *stringtype
+ = lookup_array_range_type (char_type, 1,
+ obstack_object_size (&converted)
+ / TYPE_LENGTH (char_type));
+ struct value *val = allocate_value (stringtype);
+ memcpy (value_contents_raw (val).data (),
+ obstack_base (&converted),
+ obstack_object_size (&converted));
+ return val;
+}
+
+value *
+ada_concat_operation::evaluate (struct type *expect_type,
+ struct expression *exp,
+ enum noside noside)
+{
+ /* If one side is a literal, evaluate the other side first so that
+ the expected type can be set properly. */
+ const operation_up &lhs_expr = std::get<0> (m_storage);
+ const operation_up &rhs_expr = std::get<1> (m_storage);
+
+ value *lhs, *rhs;
+ if (dynamic_cast<ada_string_operation *> (lhs_expr.get ()) != nullptr)
+ {
+ rhs = rhs_expr->evaluate (nullptr, exp, noside);
+ lhs = lhs_expr->evaluate (value_type (rhs), exp, noside);
+ }
+ else if (dynamic_cast<ada_char_operation *> (lhs_expr.get ()) != nullptr)
+ {
+ rhs = rhs_expr->evaluate (nullptr, exp, noside);
+ struct type *rhs_type = check_typedef (value_type (rhs));
+ struct type *elt_type = nullptr;
+ if (rhs_type->code () == TYPE_CODE_ARRAY)
+ elt_type = TYPE_TARGET_TYPE (rhs_type);
+ lhs = lhs_expr->evaluate (elt_type, exp, noside);
+ }
+ else if (dynamic_cast<ada_string_operation *> (rhs_expr.get ()) != nullptr)
+ {
+ lhs = lhs_expr->evaluate (nullptr, exp, noside);
+ rhs = rhs_expr->evaluate (value_type (lhs), exp, noside);
+ }
+ else if (dynamic_cast<ada_char_operation *> (rhs_expr.get ()) != nullptr)
+ {
+ lhs = lhs_expr->evaluate (nullptr, exp, noside);
+ struct type *lhs_type = check_typedef (value_type (lhs));
+ struct type *elt_type = nullptr;
+ if (lhs_type->code () == TYPE_CODE_ARRAY)
+ elt_type = TYPE_TARGET_TYPE (lhs_type);
+ rhs = rhs_expr->evaluate (elt_type, exp, noside);
+ }
+ else
+ return concat_operation::evaluate (expect_type, exp, noside);
+
+ return value_concat (lhs, rhs);
}
value *
@@ -10411,7 +10889,7 @@ ada_var_value_operation::evaluate (struct type *expect_type,
{
symbol *sym = std::get<0> (m_storage).symbol;
- if (SYMBOL_DOMAIN (sym) == UNDEF_DOMAIN)
+ if (sym->domain () == UNDEF_DOMAIN)
/* Only encountered when an unresolved symbol occurs in a
context other than a function call, in which case, it is
invalid. */
@@ -10420,7 +10898,7 @@ ada_var_value_operation::evaluate (struct type *expect_type,
if (noside == EVAL_AVOID_SIDE_EFFECTS)
{
- struct type *type = static_unwrap_type (SYMBOL_TYPE (sym));
+ struct type *type = static_unwrap_type (sym->type ());
/* Check to see if this is a tagged type. We also need to handle
the case where the type is a reference to a tagged type, but
we have to be careful to exclude pointers to tagged types.
@@ -10501,7 +10979,7 @@ ada_var_value_operation::resolve (struct expression *exp,
struct type *context_type)
{
symbol *sym = std::get<0> (m_storage).symbol;
- if (SYMBOL_DOMAIN (sym) == UNDEF_DOMAIN)
+ if (sym->domain () == UNDEF_DOMAIN)
{
block_symbol resolved
= ada_resolve_variable (sym, std::get<0> (m_storage).block,
@@ -10511,7 +10989,7 @@ ada_var_value_operation::resolve (struct expression *exp,
}
if (deprocedure_p
- && (SYMBOL_TYPE (std::get<0> (m_storage).symbol)->code ()
+ && (std::get<0> (m_storage).symbol->type ()->code ()
== TYPE_CODE_FUNC))
return true;
@@ -10666,7 +11144,7 @@ ada_funcall_operation::evaluate (struct type *expect_type,
ada_var_value_operation *avv
= dynamic_cast<ada_var_value_operation *> (callee_op.get ());
if (avv != nullptr
- && SYMBOL_DOMAIN (avv->get_symbol ()) == UNDEF_DOMAIN)
+ && avv->get_symbol ()->domain () == UNDEF_DOMAIN)
error (_("Unexpected unresolved symbol, %s, during evaluation"),
avv->get_symbol ()->print_name ());
@@ -10810,7 +11288,7 @@ ada_funcall_operation::resolve (struct expression *exp,
return false;
symbol *sym = avv->get_symbol ();
- if (SYMBOL_DOMAIN (sym) != UNDEF_DOMAIN)
+ if (sym->domain () != UNDEF_DOMAIN)
return false;
const std::vector<operation_up> &args_up = std::get<1> (m_storage);
@@ -11243,7 +11721,7 @@ ada_has_this_exception_support (const struct exception_support_info *einfo)
struct bound_minimal_symbol msym
= lookup_minimal_symbol (einfo->catch_exception_sym, NULL, NULL);
- if (msym.minsym && MSYMBOL_TYPE (msym.minsym) != mst_solib_trampoline)
+ if (msym.minsym && msym.minsym->type () != mst_solib_trampoline)
error (_("Your Ada runtime appears to be missing some debugging "
"information.\nCannot insert Ada exception catchpoint "
"in this configuration."));
@@ -11253,10 +11731,10 @@ ada_has_this_exception_support (const struct exception_support_info *einfo)
/* Make sure that the symbol we found corresponds to a function. */
- if (SYMBOL_CLASS (sym) != LOC_BLOCK)
+ if (sym->aclass () != LOC_BLOCK)
{
error (_("Symbol \"%s\" is not a function (class = %d)"),
- sym->linkage_name (), SYMBOL_CLASS (sym));
+ sym->linkage_name (), sym->aclass ());
return 0;
}
@@ -11266,7 +11744,7 @@ ada_has_this_exception_support (const struct exception_support_info *einfo)
struct bound_minimal_symbol msym
= lookup_minimal_symbol (einfo->catch_handlers_sym, NULL, NULL);
- if (msym.minsym && MSYMBOL_TYPE (msym.minsym) != mst_solib_trampoline)
+ if (msym.minsym && msym.minsym->type () != mst_solib_trampoline)
error (_("Your Ada runtime appears to be missing some debugging "
"information.\nCannot insert Ada exception catchpoint "
"in this configuration."));
@@ -11276,10 +11754,10 @@ ada_has_this_exception_support (const struct exception_support_info *einfo)
/* Make sure that the symbol we found corresponds to a function. */
- if (SYMBOL_CLASS (sym) != LOC_BLOCK)
+ if (sym->aclass () != LOC_BLOCK)
{
error (_("Symbol \"%s\" is not a function (class = %d)"),
- sym->linkage_name (), SYMBOL_CLASS (sym));
+ sym->linkage_name (), sym->aclass ());
return 0;
}
@@ -11388,8 +11866,8 @@ is_known_support_routine (struct frame_info *frame)
re_comp (known_runtime_file_name_patterns[i]);
if (re_exec (lbasename (sal.symtab->filename)))
return 1;
- if (SYMTAB_OBJFILE (sal.symtab) != NULL
- && re_exec (objfile_name (SYMTAB_OBJFILE (sal.symtab))))
+ if (sal.symtab->compunit ()->objfile () != NULL
+ && re_exec (objfile_name (sal.symtab->compunit ()->objfile ())))
return 1;
}
@@ -11644,13 +12122,21 @@ public:
/* An instance of this type is used to represent an Ada catchpoint. */
-struct ada_catchpoint : public breakpoint
+struct ada_catchpoint : public base_breakpoint
{
explicit ada_catchpoint (enum ada_exception_catchpoint_kind kind)
: m_kind (kind)
{
}
+ struct bp_location *allocate_location () override;
+ void re_set () override;
+ void check_status (struct bpstat *bs) override;
+ enum print_stop_action print_it (struct bpstat *bs) override;
+ bool print_one (struct bp_location **) override;
+ void print_mention () override;
+ void print_recreate (struct ui_file *fp) override;
+
/* The name of the specific exception the user specified. */
std::string excep_string;
@@ -11709,30 +12195,28 @@ create_excep_cond_exprs (struct ada_catchpoint *c,
}
}
-/* Implement the ALLOCATE_LOCATION method in the breakpoint_ops
- structure for all exception catchpoint kinds. */
+/* Implement the ALLOCATE_LOCATION method in the structure for all
+ exception catchpoint kinds. */
-static struct bp_location *
-allocate_location_exception (struct breakpoint *self)
+struct bp_location *
+ada_catchpoint::allocate_location ()
{
- return new ada_catchpoint_location (self);
+ return new ada_catchpoint_location (this);
}
-/* Implement the RE_SET method in the breakpoint_ops structure for all
- exception catchpoint kinds. */
+/* Implement the RE_SET method in the structure for all exception
+ catchpoint kinds. */
-static void
-re_set_exception (struct breakpoint *b)
+void
+ada_catchpoint::re_set ()
{
- struct ada_catchpoint *c = (struct ada_catchpoint *) b;
-
/* Call the base class's method. This updates the catchpoint's
locations. */
- bkpt_breakpoint_ops.re_set (b);
+ this->breakpoint::re_set ();
/* Reparse the exception conditional expressions. One for each
location. */
- create_excep_cond_exprs (c, c->m_kind);
+ create_excep_cond_exprs (this, m_kind);
}
/* Returns true if we should stop for this breakpoint hit. If the
@@ -11800,36 +12284,35 @@ should_stop_exception (const struct bp_location *bl)
return stop;
}
-/* Implement the CHECK_STATUS method in the breakpoint_ops structure
- for all exception catchpoint kinds. */
+/* Implement the CHECK_STATUS method in the structure for all
+ exception catchpoint kinds. */
-static void
-check_status_exception (bpstat *bs)
+void
+ada_catchpoint::check_status (bpstat *bs)
{
bs->stop = should_stop_exception (bs->bp_location_at.get ());
}
-/* Implement the PRINT_IT method in the breakpoint_ops structure
- for all exception catchpoint kinds. */
+/* Implement the PRINT_IT method in the structure for all exception
+ catchpoint kinds. */
-static enum print_stop_action
-print_it_exception (bpstat *bs)
+enum print_stop_action
+ada_catchpoint::print_it (bpstat *bs)
{
struct ui_out *uiout = current_uiout;
- struct breakpoint *b = bs->breakpoint_at;
- annotate_catchpoint (b->number);
+ annotate_catchpoint (number);
if (uiout->is_mi_like_p ())
{
uiout->field_string ("reason",
async_reason_lookup (EXEC_ASYNC_BREAKPOINT_HIT));
- uiout->field_string ("disp", bpdisp_text (b->disposition));
+ uiout->field_string ("disp", bpdisp_text (disposition));
}
- uiout->text (b->disposition == disp_del
+ uiout->text (disposition == disp_del
? "\nTemporary catchpoint " : "\nCatchpoint ");
- uiout->field_signed ("bkptno", b->number);
+ uiout->field_signed ("bkptno", number);
uiout->text (", ");
/* ada_exception_name_addr relies on the selected frame being the
@@ -11839,14 +12322,13 @@ print_it_exception (bpstat *bs)
ada_find_printable_frame). */
select_frame (get_current_frame ());
- struct ada_catchpoint *c = (struct ada_catchpoint *) b;
- switch (c->m_kind)
+ switch (m_kind)
{
case ada_catch_exception:
case ada_catch_exception_unhandled:
case ada_catch_handlers:
{
- const CORE_ADDR addr = ada_exception_name_addr (c->m_kind, b);
+ const CORE_ADDR addr = ada_exception_name_addr (m_kind, this);
char exception_name[256];
if (addr != 0)
@@ -11870,7 +12352,7 @@ print_it_exception (bpstat *bs)
it clearer to the user which kind of catchpoint just got
hit. We used ui_out_text to make sure that this extra
info does not pollute the exception name in the MI case. */
- if (c->m_kind == ada_catch_exception_unhandled)
+ if (m_kind == ada_catch_exception_unhandled)
uiout->text ("unhandled ");
uiout->field_string ("exception-name", exception_name);
}
@@ -11899,14 +12381,13 @@ print_it_exception (bpstat *bs)
return PRINT_SRC_AND_LOC;
}
-/* Implement the PRINT_ONE method in the breakpoint_ops structure
- for all exception catchpoint kinds. */
+/* Implement the PRINT_ONE method in the structure for all exception
+ catchpoint kinds. */
-static void
-print_one_exception (struct breakpoint *b, struct bp_location **last_loc)
+bool
+ada_catchpoint::print_one (struct bp_location **last_loc)
{
struct ui_out *uiout = current_uiout;
- struct ada_catchpoint *c = (struct ada_catchpoint *) b;
struct value_print_options opts;
get_user_print_options (&opts);
@@ -11915,13 +12396,13 @@ print_one_exception (struct breakpoint *b, struct bp_location **last_loc)
uiout->field_skip ("addr");
annotate_field (5);
- switch (c->m_kind)
+ switch (m_kind)
{
case ada_catch_exception:
- if (!c->excep_string.empty ())
+ if (!excep_string.empty ())
{
std::string msg = string_printf (_("`%s' Ada exception"),
- c->excep_string.c_str ());
+ excep_string.c_str ());
uiout->field_string ("what", msg);
}
@@ -11935,11 +12416,11 @@ print_one_exception (struct breakpoint *b, struct bp_location **last_loc)
break;
case ada_catch_handlers:
- if (!c->excep_string.empty ())
+ if (!excep_string.empty ())
{
uiout->field_fmt ("what",
_("`%s' Ada exception handlers"),
- c->excep_string.c_str ());
+ excep_string.c_str ());
}
else
uiout->field_string ("what", "all Ada exceptions handlers");
@@ -11953,29 +12434,30 @@ print_one_exception (struct breakpoint *b, struct bp_location **last_loc)
internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
break;
}
+
+ return true;
}
/* Implement the PRINT_MENTION method in the breakpoint_ops structure
for all exception catchpoint kinds. */
-static void
-print_mention_exception (struct breakpoint *b)
+void
+ada_catchpoint::print_mention ()
{
- struct ada_catchpoint *c = (struct ada_catchpoint *) b;
struct ui_out *uiout = current_uiout;
- uiout->text (b->disposition == disp_del ? _("Temporary catchpoint ")
+ uiout->text (disposition == disp_del ? _("Temporary catchpoint ")
: _("Catchpoint "));
- uiout->field_signed ("bkptno", b->number);
+ uiout->field_signed ("bkptno", number);
uiout->text (": ");
- switch (c->m_kind)
+ switch (m_kind)
{
case ada_catch_exception:
- if (!c->excep_string.empty ())
+ if (!excep_string.empty ())
{
std::string info = string_printf (_("`%s' Ada exception"),
- c->excep_string.c_str ());
+ excep_string.c_str ());
uiout->text (info);
}
else
@@ -11987,11 +12469,11 @@ print_mention_exception (struct breakpoint *b)
break;
case ada_catch_handlers:
- if (!c->excep_string.empty ())
+ if (!excep_string.empty ())
{
std::string info
= string_printf (_("`%s' Ada exception handlers"),
- c->excep_string.c_str ());
+ excep_string.c_str ());
uiout->text (info);
}
else
@@ -12008,55 +12490,44 @@ print_mention_exception (struct breakpoint *b)
}
}
-/* Implement the PRINT_RECREATE method in the breakpoint_ops structure
- for all exception catchpoint kinds. */
+/* Implement the PRINT_RECREATE method in the structure for all
+ exception catchpoint kinds. */
-static void
-print_recreate_exception (struct breakpoint *b, struct ui_file *fp)
+void
+ada_catchpoint::print_recreate (struct ui_file *fp)
{
- struct ada_catchpoint *c = (struct ada_catchpoint *) b;
-
- switch (c->m_kind)
+ switch (m_kind)
{
case ada_catch_exception:
- fprintf_filtered (fp, "catch exception");
- if (!c->excep_string.empty ())
- fprintf_filtered (fp, " %s", c->excep_string.c_str ());
+ gdb_printf (fp, "catch exception");
+ if (!excep_string.empty ())
+ gdb_printf (fp, " %s", excep_string.c_str ());
break;
case ada_catch_exception_unhandled:
- fprintf_filtered (fp, "catch exception unhandled");
+ gdb_printf (fp, "catch exception unhandled");
break;
case ada_catch_handlers:
- fprintf_filtered (fp, "catch handlers");
+ gdb_printf (fp, "catch handlers");
break;
case ada_catch_assert:
- fprintf_filtered (fp, "catch assert");
+ gdb_printf (fp, "catch assert");
break;
default:
internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
}
- print_recreate_thread (b, fp);
+ print_recreate_thread (this, fp);
}
-/* Virtual tables for various breakpoint types. */
-static struct breakpoint_ops catch_exception_breakpoint_ops;
-static struct breakpoint_ops catch_exception_unhandled_breakpoint_ops;
-static struct breakpoint_ops catch_assert_breakpoint_ops;
-static struct breakpoint_ops catch_handlers_breakpoint_ops;
-
/* See ada-lang.h. */
bool
is_ada_exception_catchpoint (breakpoint *bp)
{
- return (bp->ops == &catch_exception_breakpoint_ops
- || bp->ops == &catch_exception_unhandled_breakpoint_ops
- || bp->ops == &catch_assert_breakpoint_ops
- || bp->ops == &catch_handlers_breakpoint_ops);
+ return dynamic_cast<ada_catchpoint *> (bp) != nullptr;
}
/* Split the arguments specified in a "catch exception" command.
@@ -12166,32 +12637,6 @@ ada_exception_sym_name (enum ada_exception_catchpoint_kind ex)
}
}
-/* Return the breakpoint ops "virtual table" used for catchpoints
- of the EX kind. */
-
-static const struct breakpoint_ops *
-ada_exception_breakpoint_ops (enum ada_exception_catchpoint_kind ex)
-{
- switch (ex)
- {
- case ada_catch_exception:
- return (&catch_exception_breakpoint_ops);
- break;
- case ada_catch_exception_unhandled:
- return (&catch_exception_unhandled_breakpoint_ops);
- break;
- case ada_catch_assert:
- return (&catch_assert_breakpoint_ops);
- break;
- case ada_catch_handlers:
- return (&catch_handlers_breakpoint_ops);
- break;
- default:
- internal_error (__FILE__, __LINE__,
- _("unexpected catchpoint kind (%d)"), ex);
- }
-}
-
/* Return the condition that will be used to match the current exception
being raised with the exception that the user wants to catch. This
assumes that this condition is used when the inferior just triggered
@@ -12262,7 +12707,7 @@ ada_exception_catchpoint_cond_string (const char *excep_string,
static struct symtab_and_line
ada_exception_sal (enum ada_exception_catchpoint_kind ex,
- std::string *addr_string, const struct breakpoint_ops **ops)
+ std::string *addr_string)
{
const char *sym_name;
struct symbol *sym;
@@ -12278,15 +12723,12 @@ ada_exception_sal (enum ada_exception_catchpoint_kind ex,
if (sym == NULL)
error (_("Catchpoint symbol not found: %s"), sym_name);
- if (SYMBOL_CLASS (sym) != LOC_BLOCK)
+ if (sym->aclass () != LOC_BLOCK)
error (_("Unable to insert catchpoint. %s is not a function."), sym_name);
/* Set ADDR_STRING. */
*addr_string = sym_name;
- /* Set OPS. */
- *ops = ada_exception_breakpoint_ops (ex);
-
return find_function_start_sal (sym, 1);
}
@@ -12315,12 +12757,11 @@ create_ada_exception_catchpoint (struct gdbarch *gdbarch,
int from_tty)
{
std::string addr_string;
- const struct breakpoint_ops *ops = NULL;
- struct symtab_and_line sal = ada_exception_sal (ex_kind, &addr_string, &ops);
+ struct symtab_and_line sal = ada_exception_sal (ex_kind, &addr_string);
std::unique_ptr<ada_catchpoint> c (new ada_catchpoint (ex_kind));
init_ada_exception_breakpoint (c.get (), gdbarch, sal, addr_string.c_str (),
- ops, tempflag, disabled, from_tty);
+ tempflag, disabled, from_tty);
c->excep_string = excep_string;
create_excep_cond_exprs (c.get (), ex_kind);
if (!cond_string.empty ())
@@ -12450,12 +12891,12 @@ catch_assert_command (const char *arg_entry, int from_tty,
static int
ada_is_exception_sym (struct symbol *sym)
{
- const char *type_name = SYMBOL_TYPE (sym)->name ();
+ const char *type_name = sym->type ()->name ();
- return (SYMBOL_CLASS (sym) != LOC_TYPEDEF
- && SYMBOL_CLASS (sym) != LOC_BLOCK
- && SYMBOL_CLASS (sym) != LOC_CONST
- && SYMBOL_CLASS (sym) != LOC_UNRESOLVED
+ return (sym->aclass () != LOC_TYPEDEF
+ && sym->aclass () != LOC_BLOCK
+ && sym->aclass () != LOC_CONST
+ && sym->aclass () != LOC_UNRESOLVED
&& type_name != NULL && strcmp (type_name, "exception") == 0);
}
@@ -12545,7 +12986,7 @@ ada_add_standard_exceptions (compiled_regex *preg,
if (msymbol.minsym != NULL)
{
struct ada_exc_info info
- = {name, BMSYMBOL_VALUE_ADDRESS (msymbol)};
+ = {name, msymbol.value_address ()};
exceptions->push_back (info);
}
@@ -12577,7 +13018,7 @@ ada_add_exceptions_from_frame (compiled_regex *preg,
ALL_BLOCK_SYMBOLS (block, iter, sym)
{
- switch (SYMBOL_CLASS (sym))
+ switch (sym->aclass ())
{
case LOC_TYPEDEF:
case LOC_BLOCK:
@@ -12587,15 +13028,15 @@ ada_add_exceptions_from_frame (compiled_regex *preg,
if (ada_is_exception_sym (sym))
{
struct ada_exc_info info = {sym->print_name (),
- SYMBOL_VALUE_ADDRESS (sym)};
+ sym->value_address ()};
exceptions->push_back (info);
}
}
}
- if (BLOCK_FUNCTION (block) != NULL)
+ if (block->function () != NULL)
break;
- block = BLOCK_SUPERBLOCK (block);
+ block = block->superblock ();
}
}
@@ -12649,12 +13090,12 @@ ada_add_global_exceptions (compiled_regex *preg,
{
for (compunit_symtab *s : objfile->compunits ())
{
- const struct blockvector *bv = COMPUNIT_BLOCKVECTOR (s);
+ const struct blockvector *bv = s->blockvector ();
int i;
for (i = GLOBAL_BLOCK; i <= STATIC_BLOCK; i++)
{
- const struct block *b = BLOCKVECTOR_BLOCK (bv, i);
+ const struct block *b = bv->block (i);
struct block_iterator iter;
struct symbol *sym;
@@ -12663,7 +13104,7 @@ ada_add_global_exceptions (compiled_regex *preg,
&& name_matches_regex (sym->natural_name (), preg))
{
struct ada_exc_info info
- = {sym->print_name (), SYMBOL_VALUE_ADDRESS (sym)};
+ = {sym->print_name (), sym->value_address ()};
exceptions->push_back (info);
}
@@ -12746,13 +13187,13 @@ info_exceptions_command (const char *regexp, int from_tty)
std::vector<ada_exc_info> exceptions = ada_exceptions_list (regexp);
if (regexp != NULL)
- printf_filtered
+ gdb_printf
(_("All Ada exceptions matching regular expression \"%s\":\n"), regexp);
else
- printf_filtered (_("All defined Ada exceptions:\n"));
+ gdb_printf (_("All defined Ada exceptions:\n"));
for (const ada_exc_info &info : exceptions)
- printf_filtered ("%s: %s\n", info.name, paddress (gdbarch, info.addr));
+ gdb_printf ("%s: %s\n", info.name, paddress (gdbarch, info.addr));
}
@@ -12784,6 +13225,10 @@ do_full_match (const char *symbol_search_name,
if (startswith (symbol_search_name, "_ada_")
&& !startswith (lname, "_ada"))
symbol_search_name += 5;
+ /* Likewise for ghost entities. */
+ if (startswith (symbol_search_name, "___ghost_")
+ && !startswith (lname, "___ghost_"))
+ symbol_search_name += 9;
int uscore_count = 0;
while (*lname != '\0')
@@ -12983,7 +13428,7 @@ public:
struct value *index_value = val_atr (index_type, index);
value_print (index_value, stream, options);
- fprintf_filtered (stream, " => ");
+ gdb_printf (stream, " => ");
}
/* Implement the "read_var_value" language_defn method for Ada. */
@@ -13007,9 +13452,9 @@ public:
}
/* See language.h. */
- virtual bool symbol_printing_suppressed (struct symbol *symbol) const override
+ bool symbol_printing_suppressed (struct symbol *symbol) const override
{
- return symbol->artificial;
+ return symbol->is_artificial ();
}
/* See language.h. */
@@ -13031,9 +13476,11 @@ public:
add (arch_integer_type (gdbarch, gdbarch_short_bit (gdbarch),
0, "short_integer"));
struct type *char_type = arch_character_type (gdbarch, TARGET_CHAR_BIT,
- 0, "character");
+ 1, "character");
lai->set_string_char_type (char_type);
add (char_type);
+ add (arch_character_type (gdbarch, 16, 1, "wide_character"));
+ add (arch_character_type (gdbarch, 32, 1, "wide_wide_character"));
add (arch_float_type (gdbarch, gdbarch_float_bit (gdbarch),
"float", gdbarch_float_format (gdbarch)));
add (arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
@@ -13211,9 +13658,9 @@ public:
/* Search upwards from currently selected frame (so that we can
complete on local vars. */
- for (b = get_selected_block (0); b != NULL; b = BLOCK_SUPERBLOCK (b))
+ for (b = get_selected_block (0); b != NULL; b = b->superblock ())
{
- if (!BLOCK_SUPERBLOCK (b))
+ if (!b->superblock ())
surrounding_static_block = b; /* For elmin of dups */
ALL_BLOCK_SYMBOLS (b, iter, sym)
@@ -13236,7 +13683,7 @@ public:
for (compunit_symtab *s : objfile->compunits ())
{
QUIT;
- b = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (s), GLOBAL_BLOCK);
+ b = s->blockvector ()->global_block ();
ALL_BLOCK_SYMBOLS (b, iter, sym)
{
if (completion_skip_symbol (mode, sym))
@@ -13255,7 +13702,7 @@ public:
for (compunit_symtab *s : objfile->compunits ())
{
QUIT;
- b = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (s), STATIC_BLOCK);
+ b = s->blockvector ()->static_block ();
/* Don't do this block twice. */
if (b == surrounding_static_block)
continue;
@@ -13429,54 +13876,6 @@ static ada_language ada_language_defn;
static struct cmd_list_element *set_ada_list;
static struct cmd_list_element *show_ada_list;
-static void
-initialize_ada_catchpoint_ops (void)
-{
- struct breakpoint_ops *ops;
-
- initialize_breakpoint_ops ();
-
- ops = &catch_exception_breakpoint_ops;
- *ops = bkpt_breakpoint_ops;
- ops->allocate_location = allocate_location_exception;
- ops->re_set = re_set_exception;
- ops->check_status = check_status_exception;
- ops->print_it = print_it_exception;
- ops->print_one = print_one_exception;
- ops->print_mention = print_mention_exception;
- ops->print_recreate = print_recreate_exception;
-
- ops = &catch_exception_unhandled_breakpoint_ops;
- *ops = bkpt_breakpoint_ops;
- ops->allocate_location = allocate_location_exception;
- ops->re_set = re_set_exception;
- ops->check_status = check_status_exception;
- ops->print_it = print_it_exception;
- ops->print_one = print_one_exception;
- ops->print_mention = print_mention_exception;
- ops->print_recreate = print_recreate_exception;
-
- ops = &catch_assert_breakpoint_ops;
- *ops = bkpt_breakpoint_ops;
- ops->allocate_location = allocate_location_exception;
- ops->re_set = re_set_exception;
- ops->check_status = check_status_exception;
- ops->print_it = print_it_exception;
- ops->print_one = print_one_exception;
- ops->print_mention = print_mention_exception;
- ops->print_recreate = print_recreate_exception;
-
- ops = &catch_handlers_breakpoint_ops;
- *ops = bkpt_breakpoint_ops;
- ops->allocate_location = allocate_location_exception;
- ops->re_set = re_set_exception;
- ops->check_status = check_status_exception;
- ops->print_it = print_it_exception;
- ops->print_one = print_one_exception;
- ops->print_mention = print_mention_exception;
- ops->print_recreate = print_recreate_exception;
-}
-
/* This module's 'new_objfile' observer. */
static void
@@ -13493,12 +13892,30 @@ ada_free_objfile_observer (struct objfile *objfile)
ada_clear_symbol_cache ();
}
+/* Charsets known to GNAT. */
+static const char * const gnat_source_charsets[] =
+{
+ /* Note that code below assumes that the default comes first.
+ Latin-1 is the default here, because that is also GNAT's
+ default. */
+ "ISO-8859-1",
+ "ISO-8859-2",
+ "ISO-8859-3",
+ "ISO-8859-4",
+ "ISO-8859-5",
+ "ISO-8859-15",
+ "CP437",
+ "CP850",
+ /* Note that this value is special-cased in the encoder and
+ decoder. */
+ ada_utf8,
+ nullptr
+};
+
void _initialize_ada_language ();
void
_initialize_ada_language ()
{
- initialize_ada_catchpoint_ops ();
-
add_setshow_prefix_cmd
("ada", no_class,
_("Prefix command for changing Ada-specific settings."),
@@ -13528,6 +13945,17 @@ Show whether the output of formal and return types for functions in the \
overloads selection menu is activated."),
NULL, NULL, NULL, &set_ada_list, &show_ada_list);
+ ada_source_charset = gnat_source_charsets[0];
+ add_setshow_enum_cmd ("source-charset", class_files,
+ gnat_source_charsets,
+ &ada_source_charset, _("\
+Set the Ada source character set."), _("\
+Show the Ada source character set."), _("\
+The character set used for Ada source files.\n\
+This must correspond to the '-gnati' or '-gnatW' option passed to GNAT."),
+ nullptr, nullptr,
+ &set_ada_list, &show_ada_list);
+
add_catch_command ("exception", _("\
Catch Ada exceptions, when raised.\n\
Usage: catch exception [ARG] [if CONDITION]\n\
diff --git a/gdb/ada-lang.h b/gdb/ada-lang.h
index a6caf35b826..0dcdb56c198 100644
--- a/gdb/ada-lang.h
+++ b/gdb/ada-lang.h
@@ -218,8 +218,10 @@ extern const char *ada_decode_symbol (const struct general_symbol_info *);
the name does not appear to be GNAT-encoded, then the result
depends on WRAP. If WRAP is true (the default), then the result is
simply wrapped in <...>. If WRAP is false, then the empty string
- will be returned. */
-extern std::string ada_decode (const char *name, bool wrap = true);
+ will be returned. Also, when OPERATORS is false, operator names
+ will not be decoded. */
+extern std::string ada_decode (const char *name, bool wrap = true,
+ bool operators = true);
extern std::vector<struct block_symbol> ada_lookup_symbol_list
(const char *, const struct block *, domain_enum);
diff --git a/gdb/ada-lex.l b/gdb/ada-lex.l
index d64496a3775..33a08eaa93b 100644
--- a/gdb/ada-lex.l
+++ b/gdb/ada-lex.l
@@ -1,4 +1,4 @@
-/* FLEX lexer for Ada expressions, for GDB.
+/* FLEX lexer for Ada expressions, for GDB. -*- c++ -*-
Copyright (C) 1994-2022 Free Software Foundation, Inc.
This file is part of GDB.
@@ -30,7 +30,7 @@ HEXDIG [0-9a-f]
NUM16 ({HEXDIG}({HEXDIG}|_)*)
OCTDIG [0-7]
LETTER [a-z_]
-ID ({LETTER}({LETTER}|{DIG})*|"<"{LETTER}({LETTER}|{DIG})*">")
+ID ({LETTER}({LETTER}|{DIG}|[\x80-\xff])*|"<"{LETTER}({LETTER}|{DIG})*">")
WHITE [ \t\n]
TICK ("'"{WHITE}*)
GRAPHIC [a-z0-9 #&'()*+,-./:;<>=_|!$%?@\[\]\\^`{}~]
@@ -39,6 +39,11 @@ OPER ([-+*/=<>&]|"<="|">="|"**"|"/="|"and"|"or"|"xor"|"not"|"mod"|"rem"|"abs"
EXP (e[+-]{NUM10})
POSEXP (e"+"?{NUM10})
+/* This must agree with COMPLETION_CHAR below. See the comment there
+ for the explanation. */
+COMPLETE "\001"
+NOT_COMPLETE [^\001]
+
%{
#include "diagnostics.h"
@@ -73,18 +78,35 @@ static void rewind_to_char (int);
Defining YY_NO_INPUT comments it out. */
#define YY_NO_INPUT
-#undef YY_INPUT
-#define YY_INPUT(BUF, RESULT, MAX_SIZE) \
- if ( *pstate->lexptr == '\000' ) \
- (RESULT) = YY_NULL; \
- else \
- { \
- *(BUF) = *pstate->lexptr; \
- (RESULT) = 1; \
- pstate->lexptr += 1; \
- }
+/* When completing, we'll return a special character at the end of the
+ input, to signal the completion position to the lexer. This is
+ done because flex does not have a generally useful way to detect
+ EOF in a pattern. This variable records whether the special
+ character has been emitted. */
+static bool returned_complete = false;
-static int find_dot_all (const char *);
+/* The character we use to represent the completion point. */
+#define COMPLETE_CHAR '\001'
+
+#undef YY_INPUT
+#define YY_INPUT(BUF, RESULT, MAX_SIZE) \
+ if ( *pstate->lexptr == '\000' ) \
+ { \
+ if (pstate->parse_completion && !returned_complete) \
+ { \
+ returned_complete = true; \
+ *(BUF) = COMPLETE_CHAR; \
+ (RESULT) = 1; \
+ } \
+ else \
+ (RESULT) = YY_NULL; \
+ } \
+ else \
+ { \
+ *(BUF) = *pstate->lexptr == COMPLETE_CHAR ? ' ' : *pstate->lexptr; \
+ (RESULT) = 1; \
+ pstate->lexptr += 1; \
+ }
/* Depth of parentheses. */
static int paren_depth;
@@ -103,8 +125,9 @@ static int paren_depth;
{NUM10}{POSEXP} {
canonicalizeNumeral (numbuf, yytext);
- return processInt (pstate, NULL, numbuf,
- strrchr (numbuf, 'e') + 1);
+ char *e_ptr = strrchr (numbuf, 'e');
+ *e_ptr = '\0';
+ return processInt (pstate, nullptr, numbuf, e_ptr + 1);
}
{NUM10} {
@@ -114,12 +137,18 @@ static int paren_depth;
{NUM10}"#"{HEXDIG}({HEXDIG}|_)*"#"{POSEXP} {
canonicalizeNumeral (numbuf, yytext);
+ char *e_ptr = strrchr (numbuf, 'e');
+ *e_ptr = '\0';
return processInt (pstate, numbuf,
strchr (numbuf, '#') + 1,
- strrchr(numbuf, '#') + 1);
+ e_ptr + 1);
}
-{NUM10}"#"{HEXDIG}({HEXDIG}|_)*"#" {
+ /* The "llf" is a gdb extension to allow a floating-point
+ constant to be written in some other base. The
+ floating-point number is formed by reinterpreting the
+ bytes, allowing direct control over the bits. */
+{NUM10}(l{0,2}f)?"#"{HEXDIG}({HEXDIG}|_)*"#" {
canonicalizeNumeral (numbuf, yytext);
return processInt (pstate, numbuf, strchr (numbuf, '#') + 1,
NULL);
@@ -150,20 +179,22 @@ static int paren_depth;
}
<INITIAL>"'"({GRAPHIC}|\")"'" {
- yylval.typed_val.type = type_char (pstate);
yylval.typed_val.val = yytext[1];
+ yylval.typed_val.type = type_for_char (pstate, yytext[1]);
return CHARLIT;
}
-<INITIAL>"'[\""{HEXDIG}{2}"\"]'" {
- int v;
- yylval.typed_val.type = type_char (pstate);
- sscanf (yytext+3, "%2x", &v);
+<INITIAL>"'[\""{HEXDIG}{2,}"\"]'" {
+ ULONGEST v = strtoulst (yytext+3, nullptr, 16);
yylval.typed_val.val = v;
+ yylval.typed_val.type = type_for_char (pstate, v);
return CHARLIT;
}
-\"({GRAPHIC}|"[\""({HEXDIG}{2}|\")"\"]")*\" {
+ /* Note that we don't handle bracket sequences of more than 2
+ digits here. Currently there's no support for wide or
+ wide-wide strings. */
+\"({GRAPHIC}|"[\""({HEXDIG}{2,}|\")"\"]")*\" {
yylval.sval = processString (yytext+1, yyleng-2);
return STRING;
}
@@ -218,7 +249,7 @@ false { return FALSEKEYWORD; }
/* ATTRIBUTES */
-{TICK}[a-zA-Z][a-zA-Z_]+ { BEGIN INITIAL; return processAttribute (yytext+1); }
+{TICK}([a-z][a-z_]*)?{COMPLETE}? { BEGIN INITIAL; return processAttribute (yytext); }
/* PUNCTUATION */
@@ -230,9 +261,9 @@ false { return FALSEKEYWORD; }
"<=" { return LEQ; }
">=" { return GEQ; }
-<BEFORE_QUAL_QUOTE>"'" { BEGIN INITIAL; return '\''; }
+<BEFORE_QUAL_QUOTE>"'"/{NOT_COMPLETE} { BEGIN INITIAL; return '\''; }
-[-&*+./:<>=|;\[\]] { return yytext[0]; }
+[-&*+{}@/:<>=|;\[\]] { return yytext[0]; }
"," { if (paren_depth == 0 && pstate->comma_terminates)
{
@@ -256,14 +287,20 @@ false { return FALSEKEYWORD; }
}
}
-"."{WHITE}*all { return DOT_ALL; }
-
-"."{WHITE}*{ID} {
+"."{WHITE}*{ID}{COMPLETE}? {
yylval.sval = processId (yytext+1, yyleng-1);
+ if (yytext[yyleng - 1] == COMPLETE_CHAR)
+ return DOT_COMPLETE;
return DOT_ID;
}
-{ID}({WHITE}*"."{WHITE}*({ID}|\"{OPER}\"))*(" "*"'")? {
+"."{WHITE}*{COMPLETE} {
+ yylval.sval.ptr = "";
+ yylval.sval.length = 0;
+ return DOT_COMPLETE;
+ }
+
+{ID}({WHITE}*"."{WHITE}*({ID}|\"{OPER}\"))*(" "*"'"|{COMPLETE})? {
int all_posn = find_dot_all (yytext);
if (all_posn == -1 && yytext[yyleng-1] == '\'')
@@ -273,8 +310,9 @@ false { return FALSEKEYWORD; }
}
else if (all_posn >= 0)
yyless (all_posn);
+ bool is_completion = yytext[yyleng - 1] == COMPLETE_CHAR;
yylval.sval = processId (yytext, yyleng);
- return NAME;
+ return is_completion ? NAME_COMPLETE : NAME;
}
@@ -288,8 +326,6 @@ false { return FALSEKEYWORD; }
"::" { return COLONCOLON; }
-[{}@] { return yytext[0]; }
-
/* REGISTERS AND GDB CONVENIENCE VARIABLES */
"$"({LETTER}|{DIG}|"$")* {
@@ -311,6 +347,7 @@ lexer_init (FILE *inp)
{
BEGIN INITIAL;
paren_depth = 0;
+ returned_complete = false;
yyrestart (inp);
}
@@ -342,18 +379,36 @@ static int
processInt (struct parser_state *par_state, const char *base0,
const char *num0, const char *exp0)
{
- ULONGEST result;
long exp;
int base;
- const char *trailer;
+ /* For the based literal with an "f" prefix, we'll return a
+ floating-point number. This counts the the number of "l"s seen,
+ to decide the width of the floating-point number to return. -1
+ means no "f". */
+ int floating_point_l_count = -1;
if (base0 == NULL)
base = 10;
else
{
- base = strtol (base0, (char **) NULL, 10);
+ char *end_of_base;
+ base = strtol (base0, &end_of_base, 10);
if (base < 2 || base > 16)
error (_("Invalid base: %d."), base);
+ while (*end_of_base == 'l')
+ {
+ ++floating_point_l_count;
+ ++end_of_base;
+ }
+ /* This assertion is ensured by the pattern. */
+ gdb_assert (floating_point_l_count == -1 || *end_of_base == 'f');
+ if (*end_of_base == 'f')
+ {
+ ++end_of_base;
+ ++floating_point_l_count;
+ }
+ /* This assertion is ensured by the pattern. */
+ gdb_assert (*end_of_base == '#');
}
if (exp0 == NULL)
@@ -361,26 +416,62 @@ processInt (struct parser_state *par_state, const char *base0,
else
exp = strtol(exp0, (char **) NULL, 10);
- errno = 0;
- result = strtoulst (num0, &trailer, base);
- if (errno == ERANGE)
- error (_("Integer literal out of range"));
- if (isxdigit(*trailer))
- error (_("Invalid digit `%c' in based literal"), *trailer);
+ gdb_mpz result;
+ while (isxdigit (*num0))
+ {
+ int dig = fromhex (*num0);
+ if (dig >= base)
+ error (_("Invalid digit `%c' in based literal"), *num0);
+ mpz_mul_ui (result.val, result.val, base);
+ mpz_add_ui (result.val, result.val, dig);
+ ++num0;
+ }
while (exp > 0)
{
- if (result > (ULONG_MAX / base))
- error (_("Integer literal out of range"));
- result *= base;
+ mpz_mul_ui (result.val, result.val, base);
exp -= 1;
}
- if ((result >> (gdbarch_int_bit (par_state->gdbarch ())-1)) == 0)
+ if (floating_point_l_count > -1)
+ {
+ struct type *fp_type;
+ if (floating_point_l_count == 0)
+ fp_type = language_lookup_primitive_type (par_state->language (),
+ par_state->gdbarch (),
+ "float");
+ else if (floating_point_l_count == 1)
+ fp_type = language_lookup_primitive_type (par_state->language (),
+ par_state->gdbarch (),
+ "long_float");
+ else
+ {
+ /* This assertion is ensured by the pattern. */
+ gdb_assert (floating_point_l_count == 2);
+ fp_type = language_lookup_primitive_type (par_state->language (),
+ par_state->gdbarch (),
+ "long_long_float");
+ }
+
+ yylval.typed_val_float.type = fp_type;
+ result.write (gdb::make_array_view (yylval.typed_val_float.val,
+ TYPE_LENGTH (fp_type)),
+ type_byte_order (fp_type),
+ true);
+
+ return FLOAT;
+ }
+
+ gdb_mpz maxval (ULONGEST_MAX);
+ if (mpz_cmp (result.val, maxval.val) > 0)
+ error (_("Integer literal out of range"));
+
+ ULONGEST value = result.as_integer<ULONGEST> ();
+ if ((value >> (gdbarch_int_bit (par_state->gdbarch ())-1)) == 0)
yylval.typed_val.type = type_int (par_state);
- else if ((result >> (gdbarch_long_bit (par_state->gdbarch ())-1)) == 0)
+ else if ((value >> (gdbarch_long_bit (par_state->gdbarch ())-1)) == 0)
yylval.typed_val.type = type_long (par_state);
- else if (((result >> (gdbarch_long_bit (par_state->gdbarch ())-1)) >> 1) == 0)
+ else if (((value >> (gdbarch_long_bit (par_state->gdbarch ())-1)) >> 1) == 0)
{
/* We have a number representable as an unsigned integer quantity.
For consistency with the C treatment, we will treat it as an
@@ -391,18 +482,18 @@ processInt (struct parser_state *par_state, const char *base0,
*/
yylval.typed_val.type
= builtin_type (par_state->gdbarch ())->builtin_unsigned_long;
- if (result & LONGEST_SIGN)
+ if (value & LONGEST_SIGN)
yylval.typed_val.val =
- (LONGEST) (result & ~LONGEST_SIGN)
+ (LONGEST) (value & ~LONGEST_SIGN)
- (LONGEST_SIGN>>1) - (LONGEST_SIGN>>1);
else
- yylval.typed_val.val = (LONGEST) result;
+ yylval.typed_val.val = (LONGEST) value;
return INT;
}
else
yylval.typed_val.type = type_long_long (par_state);
- yylval.typed_val.val = (LONGEST) result;
+ yylval.typed_val.val = value;
return INT;
}
@@ -453,33 +544,33 @@ processId (const char *name0, int len)
return result;
}
+ bool in_quotes = false;
i = i0 = 0;
while (i0 < len)
{
- if (isalnum (name0[i0]))
+ if (name0[i0] == COMPLETE_CHAR)
+ {
+ /* Just ignore. */
+ ++i0;
+ }
+ else if (in_quotes)
+ name[i++] = name0[i0++];
+ else if (isalnum (name0[i0]))
{
name[i] = tolower (name0[i0]);
i += 1; i0 += 1;
}
- else switch (name0[i0])
+ else if (isspace (name0[i0]))
+ i0 += 1;
+ else if (name0[i0] == '\'')
{
- default:
- name[i] = name0[i0];
- i += 1; i0 += 1;
- break;
- case ' ': case '\t':
- i0 += 1;
- break;
- case '\'':
- do
- {
- name[i] = name0[i0];
- i += 1; i0 += 1;
- }
- while (i0 < len && name0[i0] != '\'');
- i0 += 1;
- break;
+ /* Copy the starting quote, but not the ending quote. */
+ if (!in_quotes)
+ name[i++] = name0[i0++];
+ in_quotes = !in_quotes;
}
+ else
+ name[i++] = name0[i0++];
}
name[i] = '\000';
@@ -513,10 +604,12 @@ processString (const char *text, int len)
}
else
{
- int chr;
- sscanf (p+2, "%2x", &chr);
+ const char *end;
+ ULONGEST chr = strtoulst (p + 2, &end, 16);
+ if (chr > 0xff)
+ error (_("wide strings are not yet supported"));
*q = (char) chr;
- p += 5;
+ p = end + 1;
}
}
else
@@ -590,7 +683,6 @@ attributes[] = {
{ "size", TICK_SIZE },
{ "tag", TICK_TAG },
{ "val", TICK_VAL },
- { NULL, -1 }
};
/* Return the syntactic code corresponding to the attribute name or
@@ -599,24 +691,52 @@ attributes[] = {
static int
processAttribute (const char *str)
{
- int i, k;
+ gdb_assert (*str == '\'');
+ ++str;
+ while (isspace (*str))
+ ++str;
+
+ int len = strlen (str);
+ if (len > 0 && str[len - 1] == COMPLETE_CHAR)
+ {
+ /* This is enforced by YY_INPUT. */
+ gdb_assert (pstate->parse_completion);
+ yylval.sval.ptr = obstack_strndup (&temp_parse_space, str, len - 1);
+ yylval.sval.length = len - 1;
+ return TICK_COMPLETE;
+ }
- for (i = 0; attributes[i].code != -1; i += 1)
- if (strcasecmp (str, attributes[i].name) == 0)
- return attributes[i].code;
+ for (const auto &item : attributes)
+ if (strcasecmp (str, item.name) == 0)
+ return item.code;
- for (i = 0, k = -1; attributes[i].code != -1; i += 1)
- if (subseqMatch (str, attributes[i].name))
+ gdb::optional<int> found;
+ for (const auto &item : attributes)
+ if (subseqMatch (str, item.name))
{
- if (k == -1)
- k = i;
+ if (!found.has_value ())
+ found = item.code;
else
error (_("ambiguous attribute name: `%s'"), str);
}
- if (k == -1)
+ if (!found.has_value ())
error (_("unrecognized attribute: `%s'"), str);
- return attributes[k].code;
+ return *found;
+}
+
+bool
+ada_tick_completer::complete (struct expression *exp,
+ completion_tracker &tracker)
+{
+ completion_list output;
+ for (const auto &item : attributes)
+ {
+ if (strncasecmp (item.name, m_name.c_str (), m_name.length ()) == 0)
+ output.emplace_back (xstrdup (item.name));
+ }
+ tracker.add_completions (std::move (output));
+ return true;
}
/* Back up lexptr by yyleng and then to the rightmost occurrence of
diff --git a/gdb/ada-tasks.c b/gdb/ada-tasks.c
index 5b602c4d36f..0043f2999d9 100644
--- a/gdb/ada-tasks.c
+++ b/gdb/ada-tasks.c
@@ -503,7 +503,7 @@ ada_get_tcb_types_info (void)
lookup_symbol_in_language (entry_call_record_name, NULL, STRUCT_DOMAIN,
language_c, NULL).symbol;
- if (atcb_sym == NULL || atcb_sym->type == NULL)
+ if (atcb_sym == NULL || atcb_sym->type () == NULL)
{
/* In Ravenscar run-time libs, the ATCB does not have a dynamic
size, so the symbol name differs. */
@@ -511,34 +511,34 @@ ada_get_tcb_types_info (void)
STRUCT_DOMAIN, language_c,
NULL).symbol;
- if (atcb_sym == NULL || atcb_sym->type == NULL)
+ if (atcb_sym == NULL || atcb_sym->type () == NULL)
return _("Cannot find Ada_Task_Control_Block type");
- type = atcb_sym->type;
+ type = atcb_sym->type ();
}
else
{
/* Get a static representation of the type record
Ada_Task_Control_Block. */
- type = atcb_sym->type;
+ type = atcb_sym->type ();
type = ada_template_to_fixed_record_type_1 (type, NULL, 0, NULL, 0);
}
- if (common_atcb_sym == NULL || common_atcb_sym->type == NULL)
+ if (common_atcb_sym == NULL || common_atcb_sym->type () == NULL)
return _("Cannot find Common_ATCB type");
- if (private_data_sym == NULL || private_data_sym->type == NULL)
+ if (private_data_sym == NULL || private_data_sym->type ()== NULL)
return _("Cannot find Private_Data type");
- if (entry_call_record_sym == NULL || entry_call_record_sym->type == NULL)
+ if (entry_call_record_sym == NULL || entry_call_record_sym->type () == NULL)
return _("Cannot find Entry_Call_Record type");
/* Get the type for Ada_Task_Control_Block.Common. */
- common_type = common_atcb_sym->type;
+ common_type = common_atcb_sym->type ();
/* Get the type for Ada_Task_Control_Bloc.Common.Call.LL. */
- ll_type = private_data_sym->type;
+ ll_type = private_data_sym->type ();
/* Get the type for Common_ATCB.Call.all. */
- call_type = entry_call_record_sym->type;
+ call_type = entry_call_record_sym->type ();
/* Get the field indices. */
fieldnos.common = ada_get_field_index (type, "common", 0);
@@ -574,7 +574,7 @@ ada_get_tcb_types_info (void)
unsigned int first_id = 0;
if (first_id_sym.minsym != nullptr)
{
- CORE_ADDR addr = BMSYMBOL_VALUE_ADDRESS (first_id_sym);
+ CORE_ADDR addr = first_id_sym.value_address ();
/* This symbol always has type uint32_t. */
struct type *u32type = builtin_type (target_gdbarch ())->builtin_uint32;
first_id = value_as_long (value_at (u32type, addr));
@@ -896,7 +896,7 @@ ada_tasks_inferior_data_sniffer (struct ada_tasks_inferior_data *data)
if (msym.minsym != NULL)
{
data->known_tasks_kind = ADA_TASKS_ARRAY;
- data->known_tasks_addr = BMSYMBOL_VALUE_ADDRESS (msym);
+ data->known_tasks_addr = msym.value_address ();
/* Try to get pointer type and array length from the symtab. */
sym = lookup_symbol_in_language (KNOWN_TASKS_NAME, NULL, VAR_DOMAIN,
@@ -904,7 +904,7 @@ ada_tasks_inferior_data_sniffer (struct ada_tasks_inferior_data *data)
if (sym != NULL)
{
/* Validate. */
- struct type *type = check_typedef (SYMBOL_TYPE (sym));
+ struct type *type = check_typedef (sym->type ());
struct type *eltype = NULL;
struct type *idxtype = NULL;
@@ -942,15 +942,15 @@ ada_tasks_inferior_data_sniffer (struct ada_tasks_inferior_data *data)
if (msym.minsym != NULL)
{
data->known_tasks_kind = ADA_TASKS_LIST;
- data->known_tasks_addr = BMSYMBOL_VALUE_ADDRESS (msym);
+ data->known_tasks_addr = msym.value_address ();
data->known_tasks_length = 1;
sym = lookup_symbol_in_language (KNOWN_TASKS_LIST, NULL, VAR_DOMAIN,
language_c, NULL).symbol;
- if (sym != NULL && SYMBOL_VALUE_ADDRESS (sym) != 0)
+ if (sym != NULL && sym->value_address () != 0)
{
/* Validate. */
- struct type *type = check_typedef (SYMBOL_TYPE (sym));
+ struct type *type = check_typedef (sym->type ());
if (type->code () == TYPE_CODE_PTR)
{
@@ -1223,23 +1223,23 @@ info_task (struct ui_out *uiout, const char *taskno_str, struct inferior *inf)
task_info = &data->task_list[taskno - 1];
/* Print the Ada task ID. */
- printf_filtered (_("Ada Task: %s\n"),
- paddress (target_gdbarch (), task_info->task_id));
+ gdb_printf (_("Ada Task: %s\n"),
+ paddress (target_gdbarch (), task_info->task_id));
/* Print the name of the task. */
if (task_info->name[0] != '\0')
- printf_filtered (_("Name: %s\n"), task_info->name);
+ gdb_printf (_("Name: %s\n"), task_info->name);
else
fprintf_styled (gdb_stdout, metadata_style.style (), _("<no name>\n"));
/* Print the TID and LWP. */
- printf_filtered (_("Thread: 0x%s\n"), phex_nz (task_info->ptid.tid (),
- sizeof (ULONGEST)));
- printf_filtered (_("LWP: %#lx\n"), task_info->ptid.lwp ());
+ gdb_printf (_("Thread: 0x%s\n"), phex_nz (task_info->ptid.tid (),
+ sizeof (ULONGEST)));
+ gdb_printf (_("LWP: %#lx\n"), task_info->ptid.lwp ());
/* If set, print the base CPU. */
if (task_info->base_cpu != 0)
- printf_filtered (_("Base CPU: %d\n"), task_info->base_cpu);
+ gdb_printf (_("Base CPU: %d\n"), task_info->base_cpu);
/* Print who is the parent (if any). */
if (task_info->parent != 0)
@@ -1248,16 +1248,16 @@ info_task (struct ui_out *uiout, const char *taskno_str, struct inferior *inf)
{
struct ada_task_info *parent = &data->task_list[parent_taskno - 1];
- printf_filtered (_("Parent: %d"), parent_taskno);
+ gdb_printf (_("Parent: %d"), parent_taskno);
if (parent->name[0] != '\0')
- printf_filtered (" (%s)", parent->name);
- printf_filtered ("\n");
+ gdb_printf (" (%s)", parent->name);
+ gdb_printf ("\n");
}
else
- printf_filtered (_("No parent\n"));
+ gdb_printf (_("No parent\n"));
/* Print the base priority. */
- printf_filtered (_("Base Priority: %d\n"), task_info->priority);
+ gdb_printf (_("Base Priority: %d\n"), task_info->priority);
/* print the task current state. */
{
@@ -1266,27 +1266,27 @@ info_task (struct ui_out *uiout, const char *taskno_str, struct inferior *inf)
if (task_info->caller_task)
{
target_taskno = get_task_number_from_id (task_info->caller_task, inf);
- printf_filtered (_("State: Accepting rendezvous with %d"),
- target_taskno);
+ gdb_printf (_("State: Accepting rendezvous with %d"),
+ target_taskno);
}
else if (task_info->called_task)
{
target_taskno = get_task_number_from_id (task_info->called_task, inf);
- printf_filtered (_("State: Waiting on task %d's entry"),
- target_taskno);
+ gdb_printf (_("State: Waiting on task %d's entry"),
+ target_taskno);
}
else
- printf_filtered (_("State: %s"), _(long_task_states[task_info->state]));
+ gdb_printf (_("State: %s"), _(long_task_states[task_info->state]));
if (target_taskno)
{
ada_task_info *target_task_info = &data->task_list[target_taskno - 1];
if (target_task_info->name[0] != '\0')
- printf_filtered (" (%s)", target_task_info->name);
+ gdb_printf (" (%s)", target_task_info->name);
}
- printf_filtered ("\n");
+ gdb_printf ("\n");
}
}
@@ -1316,15 +1316,15 @@ display_current_task_id (void)
const int current_task = ada_get_task_number (inferior_thread ());
if (current_task == 0)
- printf_filtered (_("[Current task is unknown]\n"));
+ gdb_printf (_("[Current task is unknown]\n"));
else
{
struct ada_tasks_inferior_data *data
= get_ada_tasks_inferior_data (current_inferior ());
struct ada_task_info *task_info = &data->task_list[current_task - 1];
- printf_filtered (_("[Current task is %s]\n"),
- task_to_str (current_task, task_info).c_str ());
+ gdb_printf (_("[Current task is %s]\n"),
+ task_to_str (current_task, task_info).c_str ());
}
}
@@ -1372,8 +1372,8 @@ task_command_1 (const char *taskno_str, int from_tty, struct inferior *inf)
switch_to_thread (tp);
ada_find_printable_frame (get_selected_frame (NULL));
- printf_filtered (_("[Switching to task %s]\n"),
- task_to_str (taskno, task_info).c_str ());
+ gdb_printf (_("[Switching to task %s]\n"),
+ task_to_str (taskno, task_info).c_str ());
print_stack_frame (get_selected_frame (NULL),
frame_relative_level (get_selected_frame (NULL)),
SRC_AND_LOC, 1);
diff --git a/gdb/ada-typeprint.c b/gdb/ada-typeprint.c
index 30fe1072cf7..0eb95cb0a73 100644
--- a/gdb/ada-typeprint.c
+++ b/gdb/ada-typeprint.c
@@ -166,22 +166,22 @@ print_range (struct type *type, struct ui_file *stream,
access to an actual object, which is not available
when the user is using the "ptype" command on a type.
Print the range as an unbounded range. */
- fprintf_filtered (stream, "<>");
+ gdb_printf (stream, "<>");
got_error = 1;
}
if (!got_error)
{
ada_print_scalar (type, lo, stream);
- fprintf_filtered (stream, " .. ");
+ gdb_printf (stream, " .. ");
ada_print_scalar (type, hi, stream);
}
}
break;
default:
- fprintf_filtered (stream, "%.*s",
- ada_name_prefix_len (type->name ()),
- type->name ());
+ gdb_printf (stream, "%.*s",
+ ada_name_prefix_len (type->name ()),
+ type->name ());
break;
}
}
@@ -228,7 +228,7 @@ print_range_bound (struct type *type, const char *bounds, int *n,
bound_len = pend - bound;
*n += bound_len + 2;
}
- fprintf_filtered (stream, "%.*s", bound_len, bound);
+ gdb_printf (stream, "%.*s", bound_len, bound);
}
}
@@ -247,7 +247,7 @@ print_dynamic_range_bound (struct type *type, const char *name, int name_len,
if (get_int_var_value (name_buf.c_str (), B))
ada_print_scalar (type, B, stream);
else
- fprintf_filtered (stream, "?");
+ gdb_printf (stream, "?");
}
/* Print RAW_TYPE as a range type, using any bound information
@@ -297,7 +297,7 @@ print_range_type (struct type *raw_type, struct ui_file *stream,
print_dynamic_range_bound (base_type, name, prefix_len, "___L",
stream);
- fprintf_filtered (stream, " .. ");
+ gdb_printf (stream, " .. ");
if (*subtype_info == 'U')
print_range_bound (base_type, bounds_str, &n, stream);
@@ -316,27 +316,27 @@ print_enum_type (struct type *type, struct ui_file *stream)
int i;
LONGEST lastval;
- fprintf_filtered (stream, "(");
- wrap_here (" ");
+ gdb_printf (stream, "(");
+ stream->wrap_here (1);
lastval = 0;
for (i = 0; i < len; i++)
{
QUIT;
if (i)
- fprintf_filtered (stream, ", ");
- wrap_here (" ");
+ gdb_printf (stream, ", ");
+ stream->wrap_here (4);
fputs_styled (ada_enum_name (type->field (i).name ()),
variable_name_style.style (), stream);
if (lastval != type->field (i).loc_enumval ())
{
- fprintf_filtered (stream, " => %s",
- plongest (type->field (i).loc_enumval ()));
+ gdb_printf (stream, " => %s",
+ plongest (type->field (i).loc_enumval ()));
lastval = type->field (i).loc_enumval ();
}
lastval += 1;
}
- fprintf_filtered (stream, ")");
+ gdb_printf (stream, ")");
}
/* Print simple (constrained) array type TYPE on STREAM. LEVEL is the
@@ -356,7 +356,7 @@ print_array_type (struct type *type, struct ui_file *stream, int show,
type = ada_coerce_to_simple_array_type (type);
bitsize = 0;
- fprintf_filtered (stream, "array (");
+ gdb_printf (stream, "array (");
if (type == NULL)
{
@@ -381,7 +381,7 @@ print_array_type (struct type *type, struct ui_file *stream, int show,
arr_type = TYPE_TARGET_TYPE (arr_type))
{
if (arr_type != type)
- fprintf_filtered (stream, ", ");
+ gdb_printf (stream, ", ");
print_range (arr_type->index_type (), stream,
0 /* bounds_prefered_p */);
if (TYPE_FIELD_BITSIZE (arr_type, 0) > 0)
@@ -398,7 +398,7 @@ print_array_type (struct type *type, struct ui_file *stream, int show,
k += 1, arr_type = TYPE_TARGET_TYPE (arr_type))
{
if (k > 0)
- fprintf_filtered (stream, ", ");
+ gdb_printf (stream, ", ");
print_range_type (range_desc_type->field (k).type (),
stream, 0 /* bounds_prefered_p */);
if (TYPE_FIELD_BITSIZE (arr_type, 0) > 0)
@@ -411,19 +411,19 @@ print_array_type (struct type *type, struct ui_file *stream, int show,
int i, i0;
for (i = i0 = ada_array_arity (type); i > 0; i -= 1)
- fprintf_filtered (stream, "%s<>", i == i0 ? "" : ", ");
+ gdb_printf (stream, "%s<>", i == i0 ? "" : ", ");
}
elt_type = ada_array_element_type (type, n_indices);
- fprintf_filtered (stream, ") of ");
- wrap_here ("");
+ gdb_printf (stream, ") of ");
+ stream->wrap_here (0);
ada_print_type (elt_type, "", stream, show == 0 ? 0 : show - 1, level + 1,
flags);
/* Arrays with variable-length elements are never bit-packed in practice but
compilers have to describe their stride so that we can properly fetch
individual elements. Do not say the array is packed in this case. */
if (bitsize > 0 && !is_dynamic_type (elt_type))
- fprintf_filtered (stream, " <packed: %d-bit elements>", bitsize);
+ gdb_printf (stream, " <packed: %d-bit elements>", bitsize);
}
/* Print the choices encoded by field FIELD_NUM of variant-part TYPE on
@@ -460,13 +460,13 @@ print_choices (struct type *type, int field_num, struct ui_file *stream,
goto Huh;
case '_':
case '\0':
- fprintf_filtered (stream, " =>");
+ gdb_printf (stream, " =>");
return 1;
case 'S':
case 'R':
case 'O':
if (have_output)
- fprintf_filtered (stream, " | ");
+ gdb_printf (stream, " | ");
have_output = 1;
break;
}
@@ -490,22 +490,51 @@ print_choices (struct type *type, int field_num, struct ui_file *stream,
|| name[p] != 'T' || !ada_scan_number (name, p + 1, &U, &p))
goto Huh;
ada_print_scalar (val_type, L, stream);
- fprintf_filtered (stream, " .. ");
+ gdb_printf (stream, " .. ");
ada_print_scalar (val_type, U, stream);
break;
}
case 'O':
- fprintf_filtered (stream, "others");
+ gdb_printf (stream, "others");
p += 1;
break;
}
}
Huh:
- fprintf_filtered (stream, "? =>");
+ gdb_printf (stream, "? =>");
return 0;
}
+/* A helper for print_variant_clauses that prints the members of
+ VAR_TYPE. DISCR_TYPE is the type of the discriminant (or nullptr
+ if not available). The discriminant is contained in OUTER_TYPE.
+ STREAM, LEVEL, SHOW, and FLAGS are the same as for
+ ada_print_type. */
+
+static void
+print_variant_clauses (struct type *var_type, struct type *discr_type,
+ struct type *outer_type, struct ui_file *stream,
+ int show, int level,
+ const struct type_print_options *flags)
+{
+ for (int i = 0; i < var_type->num_fields (); i += 1)
+ {
+ gdb_printf (stream, "\n%*swhen ", level, "");
+ if (print_choices (var_type, i, stream, discr_type))
+ {
+ if (print_record_field_types (var_type->field (i).type (),
+ outer_type, stream, show, level,
+ flags)
+ <= 0)
+ gdb_printf (stream, " null;");
+ }
+ else
+ print_selected_record_field_types (var_type, outer_type, i, i,
+ stream, show, level, flags);
+ }
+}
+
/* Assuming that field FIELD_NUM of TYPE represents variants whose
discriminant is contained in OUTER_TYPE, print its components on STREAM.
LEVEL is the recursion (indentation) level, in case any of the fields
@@ -520,7 +549,6 @@ print_variant_clauses (struct type *type, int field_num,
int show, int level,
const struct type_print_options *flags)
{
- int i;
struct type *var_type, *par_type;
struct type *discr_type;
@@ -538,21 +566,8 @@ print_variant_clauses (struct type *type, int field_num,
if (par_type != NULL)
var_type = par_type;
- for (i = 0; i < var_type->num_fields (); i += 1)
- {
- fprintf_filtered (stream, "\n%*swhen ", level + 4, "");
- if (print_choices (var_type, i, stream, discr_type))
- {
- if (print_record_field_types (var_type->field (i).type (),
- outer_type, stream, show, level + 4,
- flags)
- <= 0)
- fprintf_filtered (stream, " null;");
- }
- else
- print_selected_record_field_types (var_type, outer_type, i, i,
- stream, show, level + 4, flags);
- }
+ print_variant_clauses (var_type, discr_type, outer_type, stream, show,
+ level + 4, flags);
}
/* Assuming that field FIELD_NUM of TYPE is a variant part whose
@@ -573,10 +588,10 @@ print_variant_part (struct type *type, int field_num, struct type *outer_type,
if (*variant == '\0')
variant = "?";
- fprintf_filtered (stream, "\n%*scase %s is", level + 4, "", variant);
+ gdb_printf (stream, "\n%*scase %s is", level + 4, "", variant);
print_variant_clauses (type, field_num, outer_type, stream, show,
level + 4, flags);
- fprintf_filtered (stream, "\n%*send case;", level + 4, "");
+ gdb_printf (stream, "\n%*send case;", level + 4, "");
}
/* Print a description on STREAM of the fields FLD0 through FLD1 in
@@ -618,11 +633,11 @@ print_selected_record_field_types (struct type *type, struct type *outer_type,
else
{
flds += 1;
- fprintf_filtered (stream, "\n%*s", level + 4, "");
+ gdb_printf (stream, "\n%*s", level + 4, "");
ada_print_type (type->field (i).type (),
type->field (i).name (),
stream, show - 1, level + 4, flags);
- fprintf_filtered (stream, ";");
+ gdb_printf (stream, ";");
}
}
@@ -642,16 +657,16 @@ static void
print_choices (struct type *discr_type, const variant &variant,
struct ui_file *stream, int level)
{
- fprintf_filtered (stream, "\n%*swhen ", level, "");
+ gdb_printf (stream, "\n%*swhen ", level, "");
if (variant.is_default ())
- fprintf_filtered (stream, "others");
+ gdb_printf (stream, "others");
else
{
bool first = true;
for (const discriminant_range &range : variant.discriminants)
{
if (!first)
- fprintf_filtered (stream, " | ");
+ gdb_printf (stream, " | ");
first = false;
ada_print_scalar (discr_type, range.low, stream);
@@ -660,7 +675,7 @@ print_choices (struct type *discr_type, const variant &variant,
}
}
- fprintf_filtered (stream, " =>");
+ gdb_printf (stream, " =>");
}
/* Print a single variant part, PART, on STREAM. TYPE is the
@@ -686,7 +701,7 @@ print_variant_part (const variant_part &part,
discr_type = type->field (part.discriminant_index).type ();
}
- fprintf_filtered (stream, "\n%*scase %s is", level + 4, "", name);
+ gdb_printf (stream, "\n%*scase %s is", level + 4, "", name);
int last_field = -1;
for (const variant &variant : part.variants)
@@ -694,7 +709,7 @@ print_variant_part (const variant_part &part,
print_choices (discr_type, variant, stream, level + 8);
if (variant.first_field == variant.last_field)
- fprintf_filtered (stream, " null;");
+ gdb_printf (stream, " null;");
else
{
print_record_field_types_dynamic (variant.parts,
@@ -705,7 +720,7 @@ print_variant_part (const variant_part &part,
}
}
- fprintf_filtered (stream, "\n%*send case;", level + 4, "");
+ gdb_printf (stream, "\n%*send case;", level + 4, "");
return last_field;
}
@@ -798,15 +813,15 @@ print_record_type (struct type *type0, struct ui_file *stream, int show,
prevents a crash trying to print a NULL pointer. */
if (parent_name == NULL)
parent_name = ada_type_name (parent_type);
- fprintf_filtered (stream, "new %s with record", parent_name);
+ gdb_printf (stream, "new %s with record", parent_name);
}
else if (parent_type == NULL && ada_is_tagged_type (type, 0))
- fprintf_filtered (stream, "tagged record");
+ gdb_printf (stream, "tagged record");
else
- fprintf_filtered (stream, "record");
+ gdb_printf (stream, "record");
if (show < 0)
- fprintf_filtered (stream, " ... end record");
+ gdb_printf (stream, " ... end record");
else
{
int flds;
@@ -819,11 +834,11 @@ print_record_type (struct type *type0, struct ui_file *stream, int show,
flags);
if (flds > 0)
- fprintf_filtered (stream, "\n%*send record", level, "");
+ gdb_printf (stream, "\n%*send record", level, "");
else if (flds < 0)
- fprintf_filtered (stream, _(" <incomplete type> end record"));
+ gdb_printf (stream, _(" <incomplete type> end record"));
else
- fprintf_filtered (stream, " null; end record");
+ gdb_printf (stream, " null; end record");
}
}
@@ -837,27 +852,17 @@ print_unchecked_union_type (struct type *type, struct ui_file *stream,
const struct type_print_options *flags)
{
if (show < 0)
- fprintf_filtered (stream, "record (?) is ... end record");
+ gdb_printf (stream, "record (?) is ... end record");
else if (type->num_fields () == 0)
- fprintf_filtered (stream, "record (?) is null; end record");
+ gdb_printf (stream, "record (?) is null; end record");
else
{
- int i;
-
- fprintf_filtered (stream, "record (?) is\n%*scase ? is", level + 4, "");
+ gdb_printf (stream, "record (?) is\n%*scase ? is", level + 4, "");
- for (i = 0; i < type->num_fields (); i += 1)
- {
- fprintf_filtered (stream, "\n%*swhen ? =>\n%*s", level + 8, "",
- level + 12, "");
- ada_print_type (type->field (i).type (),
- type->field (i).name (),
- stream, show - 1, level + 12, flags);
- fprintf_filtered (stream, ";");
- }
+ print_variant_clauses (type, nullptr, type, stream, show, level + 8, flags);
- fprintf_filtered (stream, "\n%*send case;\n%*send record",
- level + 4, "", level, "");
+ gdb_printf (stream, "\n%*send case;\n%*send record",
+ level + 4, "", level, "");
}
}
@@ -874,38 +879,38 @@ print_func_type (struct type *type, struct ui_file *stream, const char *name,
if (TYPE_TARGET_TYPE (type) != NULL
&& TYPE_TARGET_TYPE (type)->code () == TYPE_CODE_VOID)
- fprintf_filtered (stream, "procedure");
+ gdb_printf (stream, "procedure");
else
- fprintf_filtered (stream, "function");
+ gdb_printf (stream, "function");
if (name != NULL && name[0] != '\0')
{
- fputs_filtered (" ", stream);
+ gdb_puts (" ", stream);
fputs_styled (name, function_name_style.style (), stream);
}
if (len > 0)
{
- fprintf_filtered (stream, " (");
+ gdb_printf (stream, " (");
for (i = 0; i < len; i += 1)
{
if (i > 0)
{
- fputs_filtered ("; ", stream);
- wrap_here (" ");
+ gdb_puts ("; ", stream);
+ stream->wrap_here (4);
}
- fprintf_filtered (stream, "a%d: ", i + 1);
+ gdb_printf (stream, "a%d: ", i + 1);
ada_print_type (type->field (i).type (), "", stream, -1, 0,
flags);
}
- fprintf_filtered (stream, ")");
+ gdb_printf (stream, ")");
}
if (TYPE_TARGET_TYPE (type) == NULL)
- fprintf_filtered (stream, " return <unknown return type>");
+ gdb_printf (stream, " return <unknown return type>");
else if (TYPE_TARGET_TYPE (type)->code () != TYPE_CODE_VOID)
{
- fprintf_filtered (stream, " return ");
+ gdb_printf (stream, " return ");
ada_print_type (TYPE_TARGET_TYPE (type), "", stream, 0, 0, flags);
}
}
@@ -949,20 +954,20 @@ ada_print_type (struct type *type0, const char *varstring,
if (type == NULL)
{
if (is_var_decl)
- fprintf_filtered (stream, "%.*s: ",
- ada_name_prefix_len (varstring), varstring);
+ gdb_printf (stream, "%.*s: ",
+ ada_name_prefix_len (varstring), varstring);
fprintf_styled (stream, metadata_style.style (), "<null type?>");
return;
}
if (is_var_decl && type->code () != TYPE_CODE_FUNC)
- fprintf_filtered (stream, "%.*s: ",
- ada_name_prefix_len (varstring), varstring);
+ gdb_printf (stream, "%.*s: ",
+ ada_name_prefix_len (varstring), varstring);
if (type_name != NULL && show <= 0 && !ada_is_aligner_type (type))
{
- fprintf_filtered (stream, "%.*s",
- ada_name_prefix_len (type_name), type_name);
+ gdb_printf (stream, "%.*s",
+ ada_name_prefix_len (type_name), type_name);
return;
}
@@ -975,9 +980,9 @@ ada_print_type (struct type *type0, const char *varstring,
switch (type->code ())
{
default:
- fprintf_filtered (stream, "<");
+ gdb_printf (stream, "<");
c_print_type (type, "", stream, show, level, flags);
- fprintf_filtered (stream, ">");
+ gdb_printf (stream, ">");
break;
case TYPE_CODE_PTR:
case TYPE_CODE_TYPEDEF:
@@ -985,12 +990,12 @@ ada_print_type (struct type *type0, const char *varstring,
"access" in this case. */
if (type->code () != TYPE_CODE_PTR
|| strstr (varstring, "___XVL") == nullptr)
- fprintf_filtered (stream, "access ");
+ gdb_printf (stream, "access ");
ada_print_type (TYPE_TARGET_TYPE (type), "", stream, show, level,
flags);
break;
case TYPE_CODE_REF:
- fprintf_filtered (stream, "<ref> ");
+ gdb_printf (stream, "<ref> ");
ada_print_type (TYPE_TARGET_TYPE (type), "", stream, show, level,
flags);
break;
@@ -998,7 +1003,7 @@ ada_print_type (struct type *type0, const char *varstring,
print_array_type (type, stream, show, level, flags);
break;
case TYPE_CODE_BOOL:
- fprintf_filtered (stream, "(false, true)");
+ gdb_printf (stream, "(false, true)");
break;
case TYPE_CODE_INT:
{
@@ -1010,7 +1015,7 @@ ada_print_type (struct type *type0, const char *varstring,
pulongest (TYPE_LENGTH (type)));
else
{
- fprintf_filtered (stream, "range ");
+ gdb_printf (stream, "range ");
print_range_type (type, stream, 1 /* bounds_prefered_p */);
}
}
@@ -1018,16 +1023,16 @@ ada_print_type (struct type *type0, const char *varstring,
case TYPE_CODE_RANGE:
if (is_fixed_point_type (type))
{
- fprintf_filtered (stream, "<");
+ gdb_printf (stream, "<");
print_type_fixed_point (type, stream);
- fprintf_filtered (stream, ">");
+ gdb_printf (stream, ">");
}
else if (ada_is_modular_type (type))
- fprintf_filtered (stream, "mod %s",
- int_string (ada_modulus (type), 10, 0, 0, 1));
+ gdb_printf (stream, "mod %s",
+ int_string (ada_modulus (type), 10, 0, 0, 1));
else
{
- fprintf_filtered (stream, "range ");
+ gdb_printf (stream, "range ");
print_range (type, stream, 1 /* bounds_prefered_p */);
}
break;
@@ -1038,7 +1043,7 @@ ada_print_type (struct type *type0, const char *varstring,
break;
case TYPE_CODE_ENUM:
if (show < 0)
- fprintf_filtered (stream, "(...)");
+ gdb_printf (stream, "(...)");
else
print_enum_type (type, stream);
break;
@@ -1046,8 +1051,8 @@ ada_print_type (struct type *type0, const char *varstring,
if (ada_is_array_descriptor_type (type))
print_array_type (type, stream, show, level, flags);
else if (ada_is_bogus_array_descriptor (type))
- fprintf_filtered (stream,
- _("array (?) of ? (<mal-formed descriptor>)"));
+ gdb_printf (stream,
+ _("array (?) of ? (<mal-formed descriptor>)"));
else
print_record_type (type, stream, show, level, flags);
break;
diff --git a/gdb/ada-unicode.py b/gdb/ada-unicode.py
new file mode 100755
index 00000000000..4c4986b84cb
--- /dev/null
+++ b/gdb/ada-unicode.py
@@ -0,0 +1,95 @@
+#!/usr/bin/env python3
+
+# Generate Unicode case-folding table for Ada.
+
+# Copyright (C) 2022 Free Software Foundation, Inc.
+
+# This file is part of GDB.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# This generates the ada-casefold.h header.
+# Usage:
+# python ada-unicode.py
+
+import gdbcopyright
+
+# The start of the current range of case-conversions we are
+# processing. If RANGE_START is None, then we're outside of a range.
+range_start = None
+# End of the current range.
+range_end = None
+# The delta between RANGE_START and the upper-case variant of that
+# character.
+upper_delta = None
+# The delta between RANGE_START and the lower-case variant of that
+# character.
+lower_delta = None
+
+# All the ranges found and completed so far.
+# Each entry is a tuple of the form (START, END, UPPER_DELTA, LOWER_DELTA).
+all_ranges = []
+
+
+def finish_range():
+ global range_start
+ global range_end
+ global upper_delta
+ global lower_delta
+ if range_start is not None:
+ all_ranges.append((range_start, range_end, upper_delta, lower_delta))
+ range_start = None
+ range_end = None
+ upper_delta = None
+ lower_delta = None
+
+
+def process_codepoint(val):
+ global range_start
+ global range_end
+ global upper_delta
+ global lower_delta
+ c = chr(val)
+ low = c.lower()
+ up = c.upper()
+ # U+00DF ("LATIN SMALL LETTER SHARP S", aka eszsett) traditionally
+ # upper-cases to the two-character string "SS" (the capital form
+ # is a relatively recent addition -- 2017). Our simple scheme
+ # can't handle this, so we skip it. Also, because our approach
+ # just represents runs of characters with identical folding
+ # deltas, this change must terminate the current run.
+ if (c == low and c == up) or len(low) != 1 or len(up) != 1:
+ finish_range()
+ return
+ updelta = ord(up) - val
+ lowdelta = ord(low) - val
+ if range_start is not None and (updelta != upper_delta or lowdelta != lower_delta):
+ finish_range()
+ if range_start is None:
+ range_start = val
+ upper_delta = updelta
+ lower_delta = lowdelta
+ range_end = val
+
+
+for c in range(0, 0x10FFFF):
+ process_codepoint(c)
+
+with open("ada-casefold.h", "w") as f:
+ print(
+ gdbcopyright.copyright("ada-unicode.py", "UTF-32 case-folding for GDB"),
+ file=f,
+ )
+ for r in all_ranges:
+ print(f" {{{r[0]}, {r[1]}, {r[2]}, {r[3]}}},", file=f)
diff --git a/gdb/ada-valprint.c b/gdb/ada-valprint.c
index 269de259332..ed0ce56bca5 100644
--- a/gdb/ada-valprint.c
+++ b/gdb/ada-valprint.c
@@ -106,7 +106,7 @@ print_optional_low_bound (struct ui_file *stream, struct type *type,
}
ada_print_scalar (index_type, low_bound, stream);
- fprintf_filtered (stream, " => ");
+ gdb_printf (stream, " => ");
return 1;
}
@@ -165,20 +165,20 @@ val_print_packed_array_elements (struct type *type, const gdb_byte *valaddr,
{
if (options->prettyformat_arrays)
{
- fprintf_filtered (stream, ",\n");
- print_spaces_filtered (2 + 2 * recurse, stream);
+ gdb_printf (stream, ",\n");
+ print_spaces (2 + 2 * recurse, stream);
}
else
{
- fprintf_filtered (stream, ", ");
+ gdb_printf (stream, ", ");
}
}
else if (options->prettyformat_arrays)
{
- fprintf_filtered (stream, "\n");
- print_spaces_filtered (2 + 2 * recurse, stream);
+ gdb_printf (stream, "\n");
+ print_spaces (2 + 2 * recurse, stream);
}
- wrap_here (n_spaces (2 + 2 * recurse));
+ stream->wrap_here (2 + 2 * recurse);
maybe_print_array_index (index_type, i + low, stream, options);
i0 = i;
@@ -211,8 +211,8 @@ val_print_packed_array_elements (struct type *type, const gdb_byte *valaddr,
opts.deref_ref = 0;
common_val_print (v0, stream, recurse + 1, &opts, current_language);
annotate_elt_rep (i - i0);
- fprintf_filtered (stream, _(" %p[<repeats %u times>%p]"),
- metadata_style.style ().ptr (), i - i0, nullptr);
+ gdb_printf (stream, _(" %p[<repeats %u times>%p]"),
+ metadata_style.style ().ptr (), i - i0, nullptr);
annotate_elt_rep_end ();
}
@@ -228,14 +228,14 @@ val_print_packed_array_elements (struct type *type, const gdb_byte *valaddr,
{
if (options->prettyformat_arrays)
{
- fprintf_filtered (stream, ",\n");
- print_spaces_filtered (2 + 2 * recurse, stream);
+ gdb_printf (stream, ",\n");
+ print_spaces (2 + 2 * recurse, stream);
}
else
{
- fprintf_filtered (stream, ", ");
+ gdb_printf (stream, ", ");
}
- wrap_here (n_spaces (2 + 2 * recurse));
+ stream->wrap_here (2 + 2 * recurse);
maybe_print_array_index (index_type, j + low,
stream, options);
}
@@ -249,7 +249,7 @@ val_print_packed_array_elements (struct type *type, const gdb_byte *valaddr,
annotate_array_section_end ();
if (i < len)
{
- fprintf_filtered (stream, "...");
+ gdb_printf (stream, "...");
}
value_free_to_mark (mark);
@@ -272,12 +272,16 @@ ada_emit_char (int c, struct type *type, struct ui_file *stream,
if (c <= UCHAR_MAX && isascii (c) && isprint (c))
{
if (c == quoter && c == '"')
- fprintf_filtered (stream, "\"\"");
+ gdb_printf (stream, "\"\"");
else
- fprintf_filtered (stream, "%c", c);
+ gdb_printf (stream, "%c", c);
}
else
- fprintf_filtered (stream, "[\"%0*x\"]", type_len * 2, c);
+ {
+ /* Follow GNAT's lead here and only use 6 digits for
+ wide_wide_character. */
+ gdb_printf (stream, "[\"%0*x\"]", std::min (6, type_len * 2), c);
+ }
}
/* Character #I of STRING, given that TYPE_LEN is the size in bytes
@@ -307,9 +311,16 @@ ada_print_floating (const gdb_byte *valaddr, struct type *type,
print_floating (valaddr, type, &tmp_stream);
- std::string &s = tmp_stream.string ();
+ std::string s = tmp_stream.release ();
size_t skip_count = 0;
+ /* Don't try to modify a result representing an error. */
+ if (s[0] == '<')
+ {
+ gdb_puts (s.c_str (), stream);
+ return;
+ }
+
/* Modify for Ada rules. */
size_t pos = s.find ("inf");
@@ -340,20 +351,20 @@ ada_print_floating (const gdb_byte *valaddr, struct type *type,
{
pos = s.find ('e');
if (pos == std::string::npos)
- fprintf_filtered (stream, "%s.0", s.c_str ());
+ gdb_printf (stream, "%s.0", s.c_str ());
else
- fprintf_filtered (stream, "%.*s.0%s", (int) pos, s.c_str (), &s[pos]);
+ gdb_printf (stream, "%.*s.0%s", (int) pos, s.c_str (), &s[pos]);
}
else
- fprintf_filtered (stream, "%s", &s[skip_count]);
+ gdb_printf (stream, "%s", &s[skip_count]);
}
void
ada_printchar (int c, struct type *type, struct ui_file *stream)
{
- fputs_filtered ("'", stream);
+ gdb_puts ("'", stream);
ada_emit_char (c, type, stream, '\'', TYPE_LENGTH (type));
- fputs_filtered ("'", stream);
+ gdb_puts ("'", stream);
}
/* [From print_type_scalar in typeprint.c]. Print VAL on STREAM in a
@@ -402,11 +413,11 @@ ada_print_scalar (struct type *type, LONGEST val, struct ui_file *stream)
break;
case TYPE_CODE_CHAR:
- LA_PRINT_CHAR (val, type, stream);
+ current_language->printchar (val, type, stream);
break;
case TYPE_CODE_BOOL:
- fprintf_filtered (stream, val ? "true" : "false");
+ gdb_printf (stream, val ? "true" : "false");
break;
case TYPE_CODE_RANGE:
@@ -455,7 +466,7 @@ printstr (struct ui_file *stream, struct type *elttype, const gdb_byte *string,
if (length == 0)
{
- fputs_filtered ("\"\"", stream);
+ gdb_puts ("\"\"", stream);
return;
}
@@ -471,7 +482,7 @@ printstr (struct ui_file *stream, struct type *elttype, const gdb_byte *string,
if (need_comma)
{
- fputs_filtered (", ", stream);
+ gdb_puts (", ", stream);
need_comma = 0;
}
@@ -489,15 +500,15 @@ printstr (struct ui_file *stream, struct type *elttype, const gdb_byte *string,
{
if (in_quotes)
{
- fputs_filtered ("\", ", stream);
+ gdb_puts ("\", ", stream);
in_quotes = 0;
}
- fputs_filtered ("'", stream);
+ gdb_puts ("'", stream);
ada_emit_char (char_at (string, i, type_len, byte_order),
elttype, stream, '\'', type_len);
- fputs_filtered ("'", stream);
- fprintf_filtered (stream, _(" %p[<repeats %u times>%p]"),
- metadata_style.style ().ptr (), reps, nullptr);
+ gdb_puts ("'", stream);
+ gdb_printf (stream, _(" %p[<repeats %u times>%p]"),
+ metadata_style.style ().ptr (), reps, nullptr);
i = rep1 - 1;
things_printed += options->repeat_count_threshold;
need_comma = 1;
@@ -506,7 +517,7 @@ printstr (struct ui_file *stream, struct type *elttype, const gdb_byte *string,
{
if (!in_quotes)
{
- fputs_filtered ("\"", stream);
+ gdb_puts ("\"", stream);
in_quotes = 1;
}
ada_emit_char (char_at (string, i, type_len, byte_order),
@@ -517,10 +528,10 @@ printstr (struct ui_file *stream, struct type *elttype, const gdb_byte *string,
/* Terminate the quotes if necessary. */
if (in_quotes)
- fputs_filtered ("\"", stream);
+ gdb_puts ("\"", stream);
if (force_ellipses || i < length)
- fputs_filtered ("...", stream);
+ gdb_puts ("...", stream);
}
void
@@ -604,25 +615,25 @@ print_field_values (struct value *value, struct value *outer_value,
}
if (comma_needed)
- fprintf_filtered (stream, ", ");
+ gdb_printf (stream, ", ");
comma_needed = 1;
if (options->prettyformat)
{
- fprintf_filtered (stream, "\n");
- print_spaces_filtered (2 + 2 * recurse, stream);
+ gdb_printf (stream, "\n");
+ print_spaces (2 + 2 * recurse, stream);
}
else
{
- wrap_here (n_spaces (2 + 2 * recurse));
+ stream->wrap_here (2 + 2 * recurse);
}
annotate_field_begin (type->field (i).type ());
- fprintf_filtered (stream, "%.*s",
- ada_name_prefix_len (type->field (i).name ()),
- type->field (i).name ());
+ gdb_printf (stream, "%.*s",
+ ada_name_prefix_len (type->field (i).name ()),
+ type->field (i).name ());
annotate_field_name_end ();
- fputs_filtered (" => ", stream);
+ gdb_puts (" => ", stream);
annotate_field_value ();
if (TYPE_FIELD_PACKED (type, i))
@@ -723,7 +734,7 @@ ada_value_print_ptr (struct value *val,
&& TYPE_TARGET_TYPE (value_type (val))->code () == TYPE_CODE_INT
&& TYPE_LENGTH (TYPE_TARGET_TYPE (value_type (val))) == 0)
{
- fputs_filtered ("null", stream);
+ gdb_puts ("null", stream);
return;
}
@@ -735,7 +746,7 @@ ada_value_print_ptr (struct value *val,
gdb::unique_xmalloc_ptr<char> name = ada_tag_name (val);
if (name != NULL)
- fprintf_filtered (stream, " (%s)", name.get ());
+ gdb_printf (stream, " (%s)", name.get ());
}
}
@@ -788,10 +799,10 @@ ada_value_print_num (struct value *val, struct ui_file *stream, int recurse,
struct type *ptr_type = builtin_type (gdbarch)->builtin_data_ptr;
CORE_ADDR addr = extract_typed_address (valaddr, ptr_type);
- fprintf_filtered (stream, "(");
+ gdb_printf (stream, "(");
type_print (type, "", stream, -1);
- fprintf_filtered (stream, ") ");
- fputs_filtered (paddress (gdbarch, addr), stream);
+ gdb_printf (stream, ") ");
+ gdb_puts (paddress (gdbarch, addr), stream);
}
else
{
@@ -800,7 +811,7 @@ ada_value_print_num (struct value *val, struct ui_file *stream, int recurse,
{
LONGEST c;
- fputs_filtered (" ", stream);
+ gdb_puts (" ", stream);
c = unpack_long (type, valaddr);
ada_printchar (c, type, stream);
}
@@ -844,9 +855,9 @@ ada_val_print_enum (struct value *value, struct ui_file *stream, int recurse,
const char *name = ada_enum_name (type->field (i).name ());
if (name[0] == '\'')
- fprintf_filtered (stream, "%ld %ps", (long) val,
- styled_string (variable_name_style.style (),
- name));
+ gdb_printf (stream, "%ld %ps", (long) val,
+ styled_string (variable_name_style.style (),
+ name));
else
fputs_styled (name, variable_name_style.style (), stream);
}
@@ -865,21 +876,21 @@ ada_val_print_struct_union (struct value *value,
{
if (ada_is_bogus_array_descriptor (value_type (value)))
{
- fprintf_filtered (stream, "(...?)");
+ gdb_printf (stream, "(...?)");
return;
}
- fprintf_filtered (stream, "(");
+ gdb_printf (stream, "(");
if (print_field_values (value, value, stream, recurse, options,
0, language_def (language_ada)) != 0
&& options->prettyformat)
{
- fprintf_filtered (stream, "\n");
- print_spaces_filtered (2 * recurse, stream);
+ gdb_printf (stream, "\n");
+ print_spaces (2 * recurse, stream);
}
- fprintf_filtered (stream, ")");
+ gdb_printf (stream, ")");
}
/* Implement Ada value_print'ing for the case where TYPE is a
@@ -903,7 +914,7 @@ ada_value_print_array (struct value *val, struct ui_file *stream, int recurse,
return;
}
- fprintf_filtered (stream, "(");
+ gdb_printf (stream, "(");
print_optional_low_bound (stream, type, options);
if (value_entirely_optimized_out (val))
@@ -917,7 +928,7 @@ ada_value_print_array (struct value *val, struct ui_file *stream, int recurse,
}
else
value_print_array_elements (val, stream, recurse, options, 0);
- fprintf_filtered (stream, ")");
+ gdb_printf (stream, ")");
}
/* Implement Ada val_print'ing for the case where TYPE is
@@ -960,7 +971,7 @@ ada_val_print_ref (struct type *type, const gdb_byte *valaddr,
deref_val_int = unpack_pointer (type, valaddr + offset_aligned);
if (deref_val_int == 0)
{
- fputs_filtered ("(null)", stream);
+ gdb_puts ("(null)", stream);
return;
}
@@ -999,7 +1010,7 @@ ada_value_print_inner (struct value *val, struct ui_file *stream, int recurse,
if (val == nullptr)
{
gdb_assert (type->code () == TYPE_CODE_TYPEDEF);
- fprintf_filtered (stream, "0x0");
+ gdb_printf (stream, "0x0");
return;
}
}
@@ -1091,9 +1102,9 @@ ada_value_print (struct value *val0, struct ui_file *stream,
|| TYPE_TARGET_TYPE (type)->code () != TYPE_CODE_INT
|| TYPE_TARGET_TYPE (type)->is_unsigned ())
{
- fprintf_filtered (stream, "(");
+ gdb_printf (stream, "(");
type_print (type, "", stream, -1);
- fprintf_filtered (stream, ") ");
+ gdb_printf (stream, ") ");
}
}
else if (ada_is_array_descriptor_type (type))
@@ -1103,16 +1114,16 @@ ada_value_print (struct value *val0, struct ui_file *stream,
a fat pointer - hence the check against TYPE_CODE_TYPEDEF). */
if (type->code () == TYPE_CODE_TYPEDEF)
{
- fprintf_filtered (stream, "(");
+ gdb_printf (stream, "(");
type_print (type, "", stream, -1);
- fprintf_filtered (stream, ") ");
+ gdb_printf (stream, ") ");
}
}
else if (ada_is_bogus_array_descriptor (type))
{
- fprintf_filtered (stream, "(");
+ gdb_printf (stream, "(");
type_print (type, "", stream, -1);
- fprintf_filtered (stream, ") (...?)");
+ gdb_printf (stream, ") (...?)");
return;
}
diff --git a/gdb/ada-varobj.c b/gdb/ada-varobj.c
index fae4f872e17..3c664687572 100644
--- a/gdb/ada-varobj.c
+++ b/gdb/ada-varobj.c
@@ -82,7 +82,7 @@ ada_varobj_scalar_image (struct type *type, LONGEST val)
string_file buf;
ada_print_scalar (type, val, &buf);
- return std::move (buf.string ());
+ return buf.release ();
}
/* Assuming that the (PARENT_VALUE, PARENT_TYPE) pair designates
@@ -817,7 +817,7 @@ ada_varobj_get_value_image (struct value *value,
string_file buffer;
common_val_print (value, &buffer, 0, opts, current_language);
- return std::move (buffer.string ());
+ return buffer.release ();
}
/* Assuming that the (VALUE, TYPE) pair designates an array varobj,
diff --git a/gdb/addrmap.c b/gdb/addrmap.c
index a35eeed100e..8141337e484 100644
--- a/gdb/addrmap.c
+++ b/gdb/addrmap.c
@@ -19,7 +19,7 @@
#include "defs.h"
#include "splay-tree.h"
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
#include "addrmap.h"
#include "gdbsupport/selftest.h"
@@ -38,7 +38,7 @@ struct addrmap_funcs
void (*set_empty) (struct addrmap *self,
CORE_ADDR start, CORE_ADDR end_inclusive,
void *obj);
- void *(*find) (struct addrmap *self, CORE_ADDR addr);
+ void *(*find) (const addrmap *self, CORE_ADDR addr);
struct addrmap *(*create_fixed) (struct addrmap *self,
struct obstack *obstack);
void (*relocate) (struct addrmap *self, CORE_ADDR offset);
@@ -62,7 +62,7 @@ addrmap_set_empty (struct addrmap *map,
void *
-addrmap_find (struct addrmap *map, CORE_ADDR addr)
+addrmap_find (const addrmap *map, CORE_ADDR addr)
{
return map->funcs->find (map, addr);
}
@@ -130,11 +130,11 @@ addrmap_fixed_set_empty (struct addrmap *self,
static void *
-addrmap_fixed_find (struct addrmap *self, CORE_ADDR addr)
+addrmap_fixed_find (const addrmap *self, CORE_ADDR addr)
{
- struct addrmap_fixed *map = (struct addrmap_fixed *) self;
- struct addrmap_transition *bottom = &map->transitions[0];
- struct addrmap_transition *top = &map->transitions[map->num_transitions - 1];
+ const addrmap_fixed *map = (const addrmap_fixed *) self;
+ const addrmap_transition *bottom = &map->transitions[0];
+ const addrmap_transition *top = &map->transitions[map->num_transitions - 1];
while (bottom < top)
{
@@ -142,7 +142,7 @@ addrmap_fixed_find (struct addrmap *self, CORE_ADDR addr)
1 (i.e., two entries are under consideration), then mid ==
bottom, and then we may not narrow the range when (mid->addr
< addr). */
- struct addrmap_transition *mid = top - (top - bottom) / 2;
+ const addrmap_transition *mid = top - (top - bottom) / 2;
if (mid->addr == addr)
{
@@ -389,7 +389,7 @@ addrmap_mutable_set_empty (struct addrmap *self,
static void *
-addrmap_mutable_find (struct addrmap *self, CORE_ADDR addr)
+addrmap_mutable_find (const addrmap *self, CORE_ADDR addr)
{
struct addrmap_mutable *map = (struct addrmap_mutable *) self;
splay_tree_node n = addrmap_splay_tree_lookup (map, addr);
@@ -612,10 +612,10 @@ addrmap_dump (struct addrmap *map, struct ui_file *outfile, void *payload)
addr_str = "<ends here>";
if (matches || previous_matched)
- fprintf_filtered (outfile, " %s%s %s\n",
- payload != nullptr ? " " : "",
- core_addr_to_string (start_addr),
- addr_str);
+ gdb_printf (outfile, " %s%s %s\n",
+ payload != nullptr ? " " : "",
+ core_addr_to_string (start_addr),
+ addr_str);
previous_matched = matches;
diff --git a/gdb/addrmap.h b/gdb/addrmap.h
index 54567fa0d9d..412e4288897 100644
--- a/gdb/addrmap.h
+++ b/gdb/addrmap.h
@@ -82,7 +82,7 @@ void addrmap_set_empty (struct addrmap *map,
void *obj);
/* Return the object associated with ADDR in MAP. */
-void *addrmap_find (struct addrmap *map, CORE_ADDR addr);
+void *addrmap_find (const addrmap *map, CORE_ADDR addr);
/* Create a fixed address map which is a copy of the mutable address
map ORIGINAL. Allocate entries in OBSTACK. */
diff --git a/gdb/agent.c b/gdb/agent.c
index 5a6eac9ed08..28c1340f79d 100644
--- a/gdb/agent.c
+++ b/gdb/agent.c
@@ -40,9 +40,9 @@ static void
show_can_use_agent (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file,
- _("Debugger's willingness to use agent in inferior "
- "as a helper is %s.\n"), value);
+ gdb_printf (file,
+ _("Debugger's willingness to use agent in inferior "
+ "as a helper is %s.\n"), value);
}
static void
diff --git a/gdb/aix-thread.c b/gdb/aix-thread.c
index 6a4b469788a..4e41cde6694 100644
--- a/gdb/aix-thread.c
+++ b/gdb/aix-thread.c
@@ -266,9 +266,9 @@ ptrace_check (int req, int id, int ret)
if (ret == -1 && errno == EPERM)
{
if (debug_aix_thread)
- fprintf_unfiltered (gdb_stdlog,
- "ptrace (%d, %d) = %d (errno = %d)\n",
- req, id, ret, errno);
+ gdb_printf (gdb_stdlog,
+ "ptrace (%d, %d) = %d (errno = %d)\n",
+ req, id, ret, errno);
return ret == -1 ? 0 : 1;
}
break;
@@ -338,16 +338,16 @@ pdc_symbol_addrs (pthdb_user_t user, pthdb_symbol_t *symbols, int count)
char *name;
if (debug_aix_thread)
- fprintf_unfiltered (gdb_stdlog,
- "pdc_symbol_addrs (user = %ld, symbols = 0x%lx, count = %d)\n",
- user, (long) symbols, count);
+ gdb_printf (gdb_stdlog,
+ "pdc_symbol_addrs (user = %ld, symbols = 0x%lx, count = %d)\n",
+ user, (long) symbols, count);
for (i = 0; i < count; i++)
{
name = symbols[i].name;
if (debug_aix_thread)
- fprintf_unfiltered (gdb_stdlog,
- " symbols[%d].name = \"%s\"\n", i, name);
+ gdb_printf (gdb_stdlog,
+ " symbols[%d].name = \"%s\"\n", i, name);
if (!*name)
symbols[i].addr = 0;
@@ -357,17 +357,17 @@ pdc_symbol_addrs (pthdb_user_t user, pthdb_symbol_t *symbols, int count)
if (ms.minsym == NULL)
{
if (debug_aix_thread)
- fprintf_unfiltered (gdb_stdlog, " returning PDC_FAILURE\n");
+ gdb_printf (gdb_stdlog, " returning PDC_FAILURE\n");
return PDC_FAILURE;
}
- symbols[i].addr = BMSYMBOL_VALUE_ADDRESS (ms);
+ symbols[i].addr = ms->value_address ();
}
if (debug_aix_thread)
- fprintf_unfiltered (gdb_stdlog, " symbols[%d].addr = %s\n",
- i, hex_string (symbols[i].addr));
+ gdb_printf (gdb_stdlog, " symbols[%d].addr = %s\n",
+ i, hex_string (symbols[i].addr));
}
if (debug_aix_thread)
- fprintf_unfiltered (gdb_stdlog, " returning PDC_SUCCESS\n");
+ gdb_printf (gdb_stdlog, " returning PDC_SUCCESS\n");
return PDC_SUCCESS;
}
@@ -396,8 +396,8 @@ pdc_read_regs (pthdb_user_t user,
struct ptsprs sprs32;
if (debug_aix_thread)
- fprintf_unfiltered (gdb_stdlog, "pdc_read_regs tid=%d flags=%s\n",
- (int) tid, hex_string (flags));
+ gdb_printf (gdb_stdlog, "pdc_read_regs tid=%d flags=%s\n",
+ (int) tid, hex_string (flags));
/* General-purpose registers. */
if (flags & PTHDB_FLAG_GPRS)
@@ -462,8 +462,8 @@ pdc_write_regs (pthdb_user_t user,
however this code is untested. */
if (debug_aix_thread)
- fprintf_unfiltered (gdb_stdlog, "pdc_write_regs tid=%d flags=%s\n",
- (int) tid, hex_string (flags));
+ gdb_printf (gdb_stdlog, "pdc_write_regs tid=%d flags=%s\n",
+ (int) tid, hex_string (flags));
/* General-purpose registers. */
if (flags & PTHDB_FLAG_GPRS)
@@ -506,16 +506,16 @@ pdc_read_data (pthdb_user_t user, void *buf,
int status, ret;
if (debug_aix_thread)
- fprintf_unfiltered (gdb_stdlog,
- "pdc_read_data (user = %ld, buf = 0x%lx, addr = %s, len = %ld)\n",
- user, (long) buf, hex_string (addr), len);
+ gdb_printf (gdb_stdlog,
+ "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, (gdb_byte *) buf, len);
ret = status == 0 ? PDC_SUCCESS : PDC_FAILURE;
if (debug_aix_thread)
- fprintf_unfiltered (gdb_stdlog, " status=%d, returning %s\n",
- status, pd_status2str (ret));
+ gdb_printf (gdb_stdlog, " status=%d, returning %s\n",
+ status, pd_status2str (ret));
return ret;
}
@@ -528,16 +528,16 @@ pdc_write_data (pthdb_user_t user, void *buf,
int status, ret;
if (debug_aix_thread)
- fprintf_unfiltered (gdb_stdlog,
- "pdc_write_data (user = %ld, buf = 0x%lx, addr = %s, len = %ld)\n",
- user, (long) buf, hex_string (addr), len);
+ gdb_printf (gdb_stdlog,
+ "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, (gdb_byte *) buf, len);
ret = status == 0 ? PDC_SUCCESS : PDC_FAILURE;
if (debug_aix_thread)
- fprintf_unfiltered (gdb_stdlog, " status=%d, returning %s\n", status,
- pd_status2str (ret));
+ gdb_printf (gdb_stdlog, " status=%d, returning %s\n", status,
+ pd_status2str (ret));
return ret;
}
@@ -548,13 +548,13 @@ static int
pdc_alloc (pthdb_user_t user, size_t len, void **bufp)
{
if (debug_aix_thread)
- fprintf_unfiltered (gdb_stdlog,
- "pdc_alloc (user = %ld, len = %ld, bufp = 0x%lx)\n",
- user, len, (long) bufp);
+ gdb_printf (gdb_stdlog,
+ "pdc_alloc (user = %ld, len = %ld, bufp = 0x%lx)\n",
+ user, len, (long) bufp);
*bufp = xmalloc (len);
if (debug_aix_thread)
- fprintf_unfiltered (gdb_stdlog,
- " malloc returned 0x%lx\n", (long) *bufp);
+ gdb_printf (gdb_stdlog,
+ " malloc returned 0x%lx\n", (long) *bufp);
/* Note: xmalloc() can't return 0; therefore PDC_FAILURE will never
be returned. */
@@ -570,13 +570,13 @@ static int
pdc_realloc (pthdb_user_t user, void *buf, size_t len, void **bufp)
{
if (debug_aix_thread)
- fprintf_unfiltered (gdb_stdlog,
- "pdc_realloc (user = %ld, buf = 0x%lx, len = %ld, bufp = 0x%lx)\n",
- user, (long) buf, len, (long) bufp);
+ gdb_printf (gdb_stdlog,
+ "pdc_realloc (user = %ld, buf = 0x%lx, len = %ld, bufp = 0x%lx)\n",
+ user, (long) buf, len, (long) bufp);
*bufp = xrealloc (buf, len);
if (debug_aix_thread)
- fprintf_unfiltered (gdb_stdlog,
- " realloc returned 0x%lx\n", (long) *bufp);
+ gdb_printf (gdb_stdlog,
+ " realloc returned 0x%lx\n", (long) *bufp);
return *bufp ? PDC_SUCCESS : PDC_FAILURE;
}
@@ -587,9 +587,9 @@ static int
pdc_dealloc (pthdb_user_t user, void *buf)
{
if (debug_aix_thread)
- fprintf_unfiltered (gdb_stdlog,
- "pdc_free (user = %ld, buf = 0x%lx)\n", user,
- (long) buf);
+ gdb_printf (gdb_stdlog,
+ "pdc_free (user = %ld, buf = 0x%lx)\n", user,
+ (long) buf);
xfree (buf);
return PDC_SUCCESS;
}
@@ -969,7 +969,7 @@ pd_enable (void)
ms = lookup_minimal_symbol (stub_name, NULL, NULL);
if (ms.minsym == NULL)
return;
- pd_brk_addr = BMSYMBOL_VALUE_ADDRESS (ms);
+ pd_brk_addr = ms->value_address ();
if (!create_thread_event_breakpoint (target_gdbarch (), pd_brk_addr))
return;
@@ -1227,8 +1227,8 @@ fetch_regs_user_thread (struct regcache *regcache, pthdb_pthread_t pdtid)
pthdb_context_t ctx;
if (debug_aix_thread)
- fprintf_unfiltered (gdb_stdlog,
- "fetch_regs_user_thread %lx\n", (long) pdtid);
+ gdb_printf (gdb_stdlog,
+ "fetch_regs_user_thread %lx\n", (long) pdtid);
status = pthdb_pthread_context (pd_session, pdtid, &ctx);
if (status != PTHDB_SUCCESS)
error (_("aix-thread: fetch_registers: pthdb_pthread_context returned %s"),
@@ -1286,9 +1286,9 @@ fetch_regs_kernel_thread (struct regcache *regcache, int regno,
int i;
if (debug_aix_thread)
- fprintf_unfiltered (gdb_stdlog,
- "fetch_regs_kernel_thread tid=%lx regno=%d arch64=%d\n",
- (long) tid, regno, arch64);
+ gdb_printf (gdb_stdlog,
+ "fetch_regs_kernel_thread tid=%lx regno=%d arch64=%d\n",
+ (long) tid, regno, arch64);
/* General-purpose registers. */
if (regno == -1
@@ -1509,8 +1509,8 @@ store_regs_user_thread (const struct regcache *regcache, pthdb_pthread_t pdtid)
uint64_t int64;
if (debug_aix_thread)
- fprintf_unfiltered (gdb_stdlog,
- "store_regs_user_thread %lx\n", (long) pdtid);
+ gdb_printf (gdb_stdlog,
+ "store_regs_user_thread %lx\n", (long) pdtid);
/* Retrieve the thread's current context for its non-register
values. */
@@ -1600,9 +1600,9 @@ store_regs_kernel_thread (const struct regcache *regcache, int regno,
struct ptsprs sprs32;
if (debug_aix_thread)
- fprintf_unfiltered (gdb_stdlog,
- "store_regs_kernel_thread tid=%lx regno=%d\n",
- (long) tid, regno);
+ gdb_printf (gdb_stdlog,
+ "store_regs_kernel_thread tid=%lx regno=%d\n",
+ (long) tid, regno);
/* General-purpose registers. */
if (regno == -1
diff --git a/gdb/alpha-mdebug-tdep.c b/gdb/alpha-mdebug-tdep.c
index ec11bc45423..10169c76c37 100644
--- a/gdb/alpha-mdebug-tdep.c
+++ b/gdb/alpha-mdebug-tdep.c
@@ -102,7 +102,7 @@ find_proc_desc (CORE_ADDR pc)
CORE_ADDR startaddr;
find_pc_partial_function (pc, &sh_name, &startaddr, NULL);
- if (startaddr > BLOCK_START (b))
+ if (startaddr > b->start ())
/* This is the "pathological" case referred to in a comment in
print_frame_info. It might be better to move this check into
symbol reading. */
@@ -114,7 +114,7 @@ find_proc_desc (CORE_ADDR pc)
if (sym)
{
- proc_desc = (struct mdebug_extra_func_info *) SYMBOL_VALUE_BYTES (sym);
+ proc_desc = (struct mdebug_extra_func_info *) sym->value_bytes ();
/* Correct incorrect setjmp procedure descriptor from the library
to make backtrace through setjmp work. */
diff --git a/gdb/alpha-tdep.c b/gdb/alpha-tdep.c
index d0df72be356..f04bad6bed8 100644
--- a/gdb/alpha-tdep.c
+++ b/gdb/alpha-tdep.c
@@ -139,7 +139,7 @@ alpha_register_type (struct gdbarch *gdbarch, int regno)
static int
alpha_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
- struct reggroup *group)
+ const struct reggroup *group)
{
/* Filter out any registers eliminated, but whose regnum is
reserved for backward compatibility, e.g. the vfp. */
@@ -1102,7 +1102,7 @@ enclosing function for address %s"), paddress (gdbarch, orig_pc));
if (!blurb_printed)
{
- printf_filtered (_("\
+ gdb_printf (_("\
This warning occurs if you are debugging a function without any symbols\n\
(for example, in a stripped executable). In that case, you may wish to\n\
increase the size of the search with the `set heuristic-fence-post' command.\n\
diff --git a/gdb/amd64-bsd-nat.c b/gdb/amd64-bsd-nat.c
index 52730ba276e..77dc4c935ca 100644
--- a/gdb/amd64-bsd-nat.c
+++ b/gdb/amd64-bsd-nat.c
@@ -59,9 +59,6 @@ amd64bsd_fetch_inferior_registers (struct regcache *regcache, int regnum)
{
struct gdbarch *gdbarch = regcache->arch ();
ptid_t ptid = regcache->ptid ();
-#if defined(PT_GETFSBASE) || defined(PT_GETGSBASE)
- i386_gdbarch_tdep *tdep = (i386_gdbarch_tdep *) gdbarch_tdep (gdbarch);
-#endif
if (regnum == -1 || amd64_native_gregset_supplies_p (gdbarch, regnum))
{
@@ -75,50 +72,9 @@ amd64bsd_fetch_inferior_registers (struct regcache *regcache, int regnum)
return;
}
-#ifdef PT_GETFSBASE
- if (regnum == -1 || regnum == tdep->fsbase_regnum)
- {
- register_t base;
-
- if (gdb_ptrace (PT_GETFSBASE, ptid, (PTRACE_TYPE_ARG3) &base, 0) == -1)
- perror_with_name (_("Couldn't get segment register fs_base"));
-
- regcache->raw_supply (tdep->fsbase_regnum, &base);
- if (regnum != -1)
- return;
- }
-#endif
-#ifdef PT_GETGSBASE
- if (regnum == -1 || regnum == tdep->fsbase_regnum + 1)
- {
- register_t base;
-
- if (gdb_ptrace (PT_GETGSBASE, ptid, (PTRACE_TYPE_ARG3) &base, 0) == -1)
- perror_with_name (_("Couldn't get segment register gs_base"));
-
- regcache->raw_supply (tdep->fsbase_regnum + 1, &base);
- if (regnum != -1)
- return;
- }
-#endif
-
if (regnum == -1 || !amd64_native_gregset_supplies_p (gdbarch, regnum))
{
struct fpreg fpregs;
-#ifdef PT_GETXSTATE_INFO
- void *xstateregs;
-
- if (x86bsd_xsave_len != 0)
- {
- xstateregs = alloca (x86bsd_xsave_len);
- if (gdb_ptrace (PT_GETXSTATE, ptid, (PTRACE_TYPE_ARG3) xstateregs, 0)
- == -1)
- perror_with_name (_("Couldn't get extended state status"));
-
- amd64_supply_xsave (regcache, -1, xstateregs);
- return;
- }
-#endif
if (gdb_ptrace (PT_GETFPREGS, ptid, (PTRACE_TYPE_ARG3) &fpregs, 0) == -1)
perror_with_name (_("Couldn't get floating point status"));
@@ -135,9 +91,6 @@ amd64bsd_store_inferior_registers (struct regcache *regcache, int regnum)
{
struct gdbarch *gdbarch = regcache->arch ();
ptid_t ptid = regcache->ptid ();
-#if defined(PT_SETFSBASE) || defined(PT_SETGSBASE)
- i386_gdbarch_tdep *tdep = (i386_gdbarch_tdep *) gdbarch_tdep (gdbarch);
-#endif
if (regnum == -1 || amd64_native_gregset_supplies_p (gdbarch, regnum))
{
@@ -155,58 +108,9 @@ amd64bsd_store_inferior_registers (struct regcache *regcache, int regnum)
return;
}
-#ifdef PT_SETFSBASE
- if (regnum == -1 || regnum == tdep->fsbase_regnum)
- {
- register_t base;
-
- /* Clear the full base value to support 32-bit targets. */
- base = 0;
- regcache->raw_collect (tdep->fsbase_regnum, &base);
-
- if (gdb_ptrace (PT_SETFSBASE, ptid, (PTRACE_TYPE_ARG3) &base, 0) == -1)
- perror_with_name (_("Couldn't write segment register fs_base"));
- if (regnum != -1)
- return;
- }
-#endif
-#ifdef PT_SETGSBASE
- if (regnum == -1 || regnum == tdep->fsbase_regnum + 1)
- {
- register_t base;
-
- /* Clear the full base value to support 32-bit targets. */
- base = 0;
- regcache->raw_collect (tdep->fsbase_regnum + 1, &base);
-
- if (gdb_ptrace (PT_SETGSBASE, ptid, (PTRACE_TYPE_ARG3) &base, 0) == -1)
- perror_with_name (_("Couldn't write segment register gs_base"));
- if (regnum != -1)
- return;
- }
-#endif
-
if (regnum == -1 || !amd64_native_gregset_supplies_p (gdbarch, regnum))
{
struct fpreg fpregs;
-#ifdef PT_GETXSTATE_INFO
- void *xstateregs;
-
- if (x86bsd_xsave_len != 0)
- {
- xstateregs = alloca (x86bsd_xsave_len);
- if (gdb_ptrace (PT_GETXSTATE, ptid, (PTRACE_TYPE_ARG3) xstateregs, 0)
- == -1)
- perror_with_name (_("Couldn't get extended state status"));
-
- amd64_collect_xsave (regcache, regnum, xstateregs, 0);
-
- if (gdb_ptrace (PT_SETXSTATE, ptid, (PTRACE_TYPE_ARG3) xstateregs,
- x86bsd_xsave_len) == -1)
- perror_with_name (_("Couldn't write extended state status"));
- return;
- }
-#endif
if (gdb_ptrace (PT_GETFPREGS, ptid, (PTRACE_TYPE_ARG3) &fpregs, 0) == -1)
perror_with_name (_("Couldn't get floating point status"));
diff --git a/gdb/amd64-fbsd-nat.c b/gdb/amd64-fbsd-nat.c
index 376e1ff77c8..d125d582a21 100644
--- a/gdb/amd64-fbsd-nat.c
+++ b/gdb/amd64-fbsd-nat.c
@@ -29,83 +29,226 @@
#include <sys/user.h>
#include <machine/reg.h>
-#include "fbsd-nat.h"
#include "amd64-tdep.h"
+#include "amd64-fbsd-tdep.h"
#include "amd64-nat.h"
-#include "amd64-bsd-nat.h"
#include "x86-nat.h"
#include "gdbsupport/x86-xstate.h"
-
+#include "x86-fbsd-nat.h"
-class amd64_fbsd_nat_target final
- : public amd64_bsd_nat_target<fbsd_nat_target>
+class amd64_fbsd_nat_target final : public x86_fbsd_nat_target
{
public:
- /* Add some extra features to the common *BSD/amd64 target. */
- const struct target_desc *read_description () override;
+ void fetch_registers (struct regcache *, int) override;
+ void store_registers (struct regcache *, int) override;
-#if defined(HAVE_PT_GETDBREGS) && defined(USE_SIGTRAP_SIGINFO)
- bool supports_stopped_by_hw_breakpoint () override;
-#endif
+ const struct target_desc *read_description () override;
};
static amd64_fbsd_nat_target the_amd64_fbsd_nat_target;
-/* Offset in `struct reg' where MEMBER is stored. */
-#define REG_OFFSET(member) offsetof (struct reg, member)
+#ifdef PT_GETXSTATE_INFO
+static size_t xsave_len;
+#endif
+
+/* This is a layout of the amd64 'struct reg' but with i386
+ registers. */
-/* At amd64fbsd64_r_reg_offset[REGNUM] you'll find the offset in
- `struct reg' location where the GDB register REGNUM is stored.
- Unsupported registers are marked with `-1'. */
-static int amd64fbsd64_r_reg_offset[] =
+static const struct regcache_map_entry amd64_fbsd32_gregmap[] =
{
- REG_OFFSET (r_rax),
- REG_OFFSET (r_rbx),
- REG_OFFSET (r_rcx),
- REG_OFFSET (r_rdx),
- REG_OFFSET (r_rsi),
- REG_OFFSET (r_rdi),
- REG_OFFSET (r_rbp),
- REG_OFFSET (r_rsp),
- REG_OFFSET (r_r8),
- REG_OFFSET (r_r9),
- REG_OFFSET (r_r10),
- REG_OFFSET (r_r11),
- REG_OFFSET (r_r12),
- REG_OFFSET (r_r13),
- REG_OFFSET (r_r14),
- REG_OFFSET (r_r15),
- REG_OFFSET (r_rip),
- REG_OFFSET (r_rflags),
- REG_OFFSET (r_cs),
- REG_OFFSET (r_ss),
- -1,
- -1,
- -1,
- -1
+ { 8, REGCACHE_MAP_SKIP, 8 },
+ { 1, I386_EDI_REGNUM, 8 },
+ { 1, I386_ESI_REGNUM, 8 },
+ { 1, I386_EBP_REGNUM, 8 },
+ { 1, I386_EBX_REGNUM, 8 },
+ { 1, I386_EDX_REGNUM, 8 },
+ { 1, I386_ECX_REGNUM, 8 },
+ { 1, I386_EAX_REGNUM, 8 },
+ { 1, REGCACHE_MAP_SKIP, 4 }, /* trapno */
+ { 1, I386_FS_REGNUM, 2 },
+ { 1, I386_GS_REGNUM, 2 },
+ { 1, REGCACHE_MAP_SKIP, 4 }, /* err */
+ { 1, I386_ES_REGNUM, 2 },
+ { 1, I386_DS_REGNUM, 2 },
+ { 1, I386_EIP_REGNUM, 8 },
+ { 1, I386_CS_REGNUM, 8 },
+ { 1, I386_EFLAGS_REGNUM, 8 },
+ { 1, I386_ESP_REGNUM, 0 },
+ { 1, I386_SS_REGNUM, 8 },
+ { 0 }
};
-
-/* Mapping between the general-purpose registers in FreeBSD/amd64
- `struct reg' format and GDB's register cache layout for
- FreeBSD/i386.
+static const struct regset amd64_fbsd32_gregset =
+{
+ amd64_fbsd32_gregmap, regcache_supply_regset, regcache_collect_regset
+};
- Note that most FreeBSD/amd64 registers are 64-bit, while the
- FreeBSD/i386 registers are all 32-bit, but since we're
- little-endian we get away with that. */
+/* Return the regset to use for 'struct reg' for the GDBARCH. */
-/* From <machine/reg.h>. */
-static int amd64fbsd32_r_reg_offset[I386_NUM_GREGS] =
+static const struct regset *
+find_gregset (struct gdbarch *gdbarch)
{
- 14 * 8, 13 * 8, /* %eax, %ecx */
- 12 * 8, 11 * 8, /* %edx, %ebx */
- 20 * 8, 10 * 8, /* %esp, %ebp */
- 9 * 8, 8 * 8, /* %esi, %edi */
- 17 * 8, 19 * 8, /* %eip, %eflags */
- 18 * 8, 21 * 8, /* %cs, %ss */
- -1, -1, -1, -1 /* %ds, %es, %fs, %gs */
-};
-
+ if (gdbarch_bfd_arch_info (gdbarch)->bits_per_word == 32)
+ return &amd64_fbsd32_gregset;
+ else
+ return &amd64_fbsd_gregset;
+}
+
+/* Fetch register REGNUM from the inferior. If REGNUM is -1, do this
+ for all registers. */
+
+void
+amd64_fbsd_nat_target::fetch_registers (struct regcache *regcache, int regnum)
+{
+ struct gdbarch *gdbarch = regcache->arch ();
+#if defined(PT_GETFSBASE) || defined(PT_GETGSBASE)
+ const i386_gdbarch_tdep *tdep = (i386_gdbarch_tdep *) gdbarch_tdep (gdbarch);
+#endif
+ pid_t pid = get_ptrace_pid (regcache->ptid ());
+ const struct regset *gregset = find_gregset (gdbarch);
+
+ if (fetch_register_set<struct reg> (regcache, regnum, PT_GETREGS, gregset))
+ {
+ if (regnum != -1)
+ return;
+ }
+
+#ifdef PT_GETFSBASE
+ if (regnum == -1 || regnum == tdep->fsbase_regnum)
+ {
+ register_t base;
+
+ if (ptrace (PT_GETFSBASE, pid, (PTRACE_TYPE_ARG3) &base, 0) == -1)
+ perror_with_name (_("Couldn't get segment register fs_base"));
+
+ regcache->raw_supply (tdep->fsbase_regnum, &base);
+ if (regnum != -1)
+ return;
+ }
+#endif
+#ifdef PT_GETGSBASE
+ if (regnum == -1 || regnum == tdep->fsbase_regnum + 1)
+ {
+ register_t base;
+
+ if (ptrace (PT_GETGSBASE, pid, (PTRACE_TYPE_ARG3) &base, 0) == -1)
+ perror_with_name (_("Couldn't get segment register gs_base"));
+
+ regcache->raw_supply (tdep->fsbase_regnum + 1, &base);
+ if (regnum != -1)
+ return;
+ }
+#endif
+
+ /* There is no amd64_fxsave_supplies or amd64_xsave_supplies.
+ Instead, the earlier register sets return early if the request
+ was for a specific register that was already satisified to avoid
+ fetching the FPU/XSAVE state unnecessarily. */
+
+#ifdef PT_GETXSTATE_INFO
+ if (xsave_len != 0)
+ {
+ void *xstateregs = alloca (xsave_len);
+
+ if (ptrace (PT_GETXSTATE, pid, (PTRACE_TYPE_ARG3) xstateregs, 0) == -1)
+ perror_with_name (_("Couldn't get extended state status"));
+
+ amd64_supply_xsave (regcache, regnum, xstateregs);
+ return;
+ }
+#endif
+
+ struct fpreg fpregs;
+
+ if (ptrace (PT_GETFPREGS, pid, (PTRACE_TYPE_ARG3) &fpregs, 0) == -1)
+ perror_with_name (_("Couldn't get floating point status"));
+
+ amd64_supply_fxsave (regcache, regnum, &fpregs);
+}
+
+/* Store register REGNUM back into the inferior. If REGNUM is -1, do
+ this for all registers. */
+
+void
+amd64_fbsd_nat_target::store_registers (struct regcache *regcache, int regnum)
+{
+ struct gdbarch *gdbarch = regcache->arch ();
+#if defined(PT_GETFSBASE) || defined(PT_GETGSBASE)
+ const i386_gdbarch_tdep *tdep = (i386_gdbarch_tdep *) gdbarch_tdep (gdbarch);
+#endif
+ pid_t pid = get_ptrace_pid (regcache->ptid ());
+ const struct regset *gregset = find_gregset (gdbarch);
+
+ if (store_register_set<struct reg> (regcache, regnum, PT_GETREGS, PT_SETREGS,
+ gregset))
+ {
+ if (regnum != -1)
+ return;
+ }
+
+#ifdef PT_SETFSBASE
+ if (regnum == -1 || regnum == tdep->fsbase_regnum)
+ {
+ register_t base;
+
+ /* Clear the full base value to support 32-bit targets. */
+ base = 0;
+ regcache->raw_collect (tdep->fsbase_regnum, &base);
+
+ if (ptrace (PT_SETFSBASE, pid, (PTRACE_TYPE_ARG3) &base, 0) == -1)
+ perror_with_name (_("Couldn't write segment register fs_base"));
+ if (regnum != -1)
+ return;
+ }
+#endif
+#ifdef PT_SETGSBASE
+ if (regnum == -1 || regnum == tdep->fsbase_regnum + 1)
+ {
+ register_t base;
+
+ /* Clear the full base value to support 32-bit targets. */
+ base = 0;
+ regcache->raw_collect (tdep->fsbase_regnum + 1, &base);
+
+ if (ptrace (PT_SETGSBASE, pid, (PTRACE_TYPE_ARG3) &base, 0) == -1)
+ perror_with_name (_("Couldn't write segment register gs_base"));
+ if (regnum != -1)
+ return;
+ }
+#endif
+
+ /* There is no amd64_fxsave_supplies or amd64_xsave_supplies.
+ Instead, the earlier register sets return early if the request
+ was for a specific register that was already satisified to avoid
+ fetching the FPU/XSAVE state unnecessarily. */
+
+#ifdef PT_GETXSTATE_INFO
+ if (xsave_len != 0)
+ {
+ void *xstateregs = alloca (xsave_len);
+
+ if (ptrace (PT_GETXSTATE, pid, (PTRACE_TYPE_ARG3) xstateregs, 0) == -1)
+ perror_with_name (_("Couldn't get extended state status"));
+
+ amd64_collect_xsave (regcache, regnum, xstateregs, 0);
+
+ if (ptrace (PT_SETXSTATE, pid, (PTRACE_TYPE_ARG3) xstateregs,
+ xsave_len) == -1)
+ perror_with_name (_("Couldn't write extended state status"));
+ return;
+ }
+#endif
+
+ struct fpreg fpregs;
+
+ if (ptrace (PT_GETFPREGS, pid, (PTRACE_TYPE_ARG3) &fpregs, 0) == -1)
+ perror_with_name (_("Couldn't get floating point status"));
+
+ amd64_collect_fxsave (regcache, regnum, &fpregs);
+
+ if (ptrace (PT_SETFPREGS, pid, (PTRACE_TYPE_ARG3) &fpregs, 0) == -1)
+ perror_with_name (_("Couldn't write floating point status"));
+}
/* Support for debugging kernel virtual memory images. */
@@ -179,13 +322,13 @@ amd64_fbsd_nat_target::read_description ()
if (ptrace (PT_GETXSTATE_INFO, inferior_ptid.pid (),
(PTRACE_TYPE_ARG3) &info, sizeof (info)) == 0)
{
- x86bsd_xsave_len = info.xsave_len;
+ xsave_len = info.xsave_len;
xcr0 = info.xsave_mask;
}
xsave_probed = 1;
}
- if (x86bsd_xsave_len != 0)
+ if (xsave_len != 0)
{
if (is64)
return amd64_target_description (xcr0, true);
@@ -199,111 +342,12 @@ amd64_fbsd_nat_target::read_description ()
return i386_target_description (X86_XSTATE_SSE_MASK, true);
}
-#if defined(HAVE_PT_GETDBREGS) && defined(USE_SIGTRAP_SIGINFO)
-/* Implement the supports_stopped_by_hw_breakpoints method. */
-
-bool
-amd64_fbsd_nat_target::supports_stopped_by_hw_breakpoint ()
-{
- return true;
-}
-#endif
-
void _initialize_amd64fbsd_nat ();
void
_initialize_amd64fbsd_nat ()
{
- int offset;
-
- amd64_native_gregset32_reg_offset = amd64fbsd32_r_reg_offset;
- amd64_native_gregset64_reg_offset = amd64fbsd64_r_reg_offset;
-
add_inf_child_target (&the_amd64_fbsd_nat_target);
/* Support debugging kernel virtual memory images. */
bsd_kvm_add_target (amd64fbsd_supply_pcb);
-
- /* To support the recognition of signal handlers, i386-bsd-tdep.c
- hardcodes some constants. Inclusion of this file means that we
- are compiling a native debugger, which means that we can use the
- system header files and sysctl(3) to get at the relevant
- information. */
-
-#define SC_REG_OFFSET amd64fbsd_sc_reg_offset
-
- /* We only check the program counter, stack pointer and frame
- pointer since these members of `struct sigcontext' are essential
- for providing backtraces. */
-
-#define SC_RIP_OFFSET SC_REG_OFFSET[AMD64_RIP_REGNUM]
-#define SC_RSP_OFFSET SC_REG_OFFSET[AMD64_RSP_REGNUM]
-#define SC_RBP_OFFSET SC_REG_OFFSET[AMD64_RBP_REGNUM]
-
- /* Override the default value for the offset of the program counter
- in the sigcontext structure. */
- offset = offsetof (struct sigcontext, sc_rip);
-
- if (SC_RIP_OFFSET != offset)
- {
- warning (_("\
-offsetof (struct sigcontext, sc_rip) yields %d instead of %d.\n\
-Please report this to <bug-gdb@gnu.org>."),
- offset, SC_RIP_OFFSET);
- }
-
- SC_RIP_OFFSET = offset;
-
- /* Likewise for the stack pointer. */
- offset = offsetof (struct sigcontext, sc_rsp);
-
- if (SC_RSP_OFFSET != offset)
- {
- warning (_("\
-offsetof (struct sigcontext, sc_rsp) yields %d instead of %d.\n\
-Please report this to <bug-gdb@gnu.org>."),
- offset, SC_RSP_OFFSET);
- }
-
- SC_RSP_OFFSET = offset;
-
- /* And the frame pointer. */
- offset = offsetof (struct sigcontext, sc_rbp);
-
- if (SC_RBP_OFFSET != offset)
- {
- warning (_("\
-offsetof (struct sigcontext, sc_rbp) yields %d instead of %d.\n\
-Please report this to <bug-gdb@gnu.org>."),
- offset, SC_RBP_OFFSET);
- }
-
- SC_RBP_OFFSET = offset;
-
-#ifdef KERN_PROC_SIGTRAMP
- /* Normally signal frames are detected via amd64fbsd_sigtramp_p.
- However, FreeBSD 9.2 through 10.1 do not include the page holding
- the signal code in core dumps. These releases do provide a
- kern.proc.sigtramp.<pid> sysctl that returns the location of the
- signal trampoline for a running process. We fetch the location
- of the current (gdb) process and use this to identify signal
- frames in core dumps from these releases. Note that this only
- works for core dumps of 64-bit (FreeBSD/amd64) processes and does
- not handle core dumps of 32-bit (FreeBSD/i386) processes. */
- {
- int mib[4];
- struct kinfo_sigtramp kst;
- size_t len;
-
- mib[0] = CTL_KERN;
- mib[1] = KERN_PROC;
- mib[2] = KERN_PROC_SIGTRAMP;
- mib[3] = getpid ();
- len = sizeof (kst);
- if (sysctl (mib, 4, &kst, &len, NULL, 0) == 0)
- {
- amd64fbsd_sigtramp_start_addr = (uintptr_t) kst.ksigtramp_start;
- amd64fbsd_sigtramp_end_addr = (uintptr_t) kst.ksigtramp_end;
- }
- }
-#endif
}
diff --git a/gdb/amd64-fbsd-tdep.c b/gdb/amd64-fbsd-tdep.c
index 93edbc4f861..55764beaad2 100644
--- a/gdb/amd64-fbsd-tdep.c
+++ b/gdb/amd64-fbsd-tdep.c
@@ -18,136 +18,203 @@
along with this program. If not, see <http://www.gnu.org/licenses/>. */
#include "defs.h"
-#include "arch-utils.h"
-#include "frame.h"
-#include "gdbcore.h"
-#include "regcache.h"
#include "osabi.h"
#include "regset.h"
+#include "target.h"
+#include "trad-frame.h"
+#include "tramp-frame.h"
#include "i386-fbsd-tdep.h"
#include "gdbsupport/x86-xstate.h"
#include "amd64-tdep.h"
+#include "amd64-fbsd-tdep.h"
#include "fbsd-tdep.h"
#include "solib-svr4.h"
#include "inferior.h"
-/* Support for signal handlers. */
+/* The general-purpose regset consists of 22 64-bit slots, most of
+ which contain individual registers, but a few contain multiple
+ 16-bit segment registers. */
+#define AMD64_FBSD_SIZEOF_GREGSET (22 * 8)
+
+/* The segment base register set consists of 2 64-bit registers. */
+#define AMD64_FBSD_SIZEOF_SEGBASES_REGSET (2 * 8)
-/* Return whether THIS_FRAME corresponds to a FreeBSD sigtramp
- routine. */
+/* Register maps. */
-static const gdb_byte amd64fbsd_sigtramp_code[] =
+static const struct regcache_map_entry amd64_fbsd_gregmap[] =
{
- 0x48, 0x8d, 0x7c, 0x24, 0x10, /* lea SIGF_UC(%rsp),%rdi */
- 0x6a, 0x00, /* pushq $0 */
- 0x48, 0xc7, 0xc0, 0xa1, 0x01, 0x00, 0x00,
- /* movq $SYS_sigreturn,%rax */
- 0x0f, 0x05 /* syscall */
+ { 1, AMD64_R15_REGNUM, 0 },
+ { 1, AMD64_R14_REGNUM, 0 },
+ { 1, AMD64_R13_REGNUM, 0 },
+ { 1, AMD64_R12_REGNUM, 0 },
+ { 1, AMD64_R11_REGNUM, 0 },
+ { 1, AMD64_R10_REGNUM, 0 },
+ { 1, AMD64_R9_REGNUM, 0 },
+ { 1, AMD64_R8_REGNUM, 0 },
+ { 1, AMD64_RDI_REGNUM, 0 },
+ { 1, AMD64_RSI_REGNUM, 0 },
+ { 1, AMD64_RBP_REGNUM, 0 },
+ { 1, AMD64_RBX_REGNUM, 0 },
+ { 1, AMD64_RDX_REGNUM, 0 },
+ { 1, AMD64_RCX_REGNUM, 0 },
+ { 1, AMD64_RAX_REGNUM, 0 },
+ { 1, REGCACHE_MAP_SKIP, 4 }, /* trapno */
+ { 1, AMD64_FS_REGNUM, 2 },
+ { 1, AMD64_GS_REGNUM, 2 },
+ { 1, REGCACHE_MAP_SKIP, 4 }, /* err */
+ { 1, AMD64_ES_REGNUM, 2 },
+ { 1, AMD64_DS_REGNUM, 2 },
+ { 1, AMD64_RIP_REGNUM, 0 },
+ { 1, AMD64_CS_REGNUM, 8 },
+ { 1, AMD64_EFLAGS_REGNUM, 8 },
+ { 1, AMD64_RSP_REGNUM, 0 },
+ { 1, AMD64_SS_REGNUM, 8 },
+ { 0 }
};
-static int
-amd64fbsd_sigtramp_p (struct frame_info *this_frame)
+static const struct regcache_map_entry amd64_fbsd_segbases_regmap[] =
{
- CORE_ADDR pc = get_frame_pc (this_frame);
- gdb_byte buf[sizeof amd64fbsd_sigtramp_code];
-
- if (!safe_frame_unwind_memory (this_frame, pc, buf))
- return 0;
- if (memcmp (buf, amd64fbsd_sigtramp_code, sizeof amd64fbsd_sigtramp_code)
- != 0)
- return 0;
-
- return 1;
-}
+ { 1, AMD64_FSBASE_REGNUM, 0 },
+ { 1, AMD64_GSBASE_REGNUM, 0 },
+ { 0 }
+};
-/* Assuming THIS_FRAME is for a BSD sigtramp routine, return the
- address of the associated sigcontext structure. */
+/* This layout including fsbase and gsbase was adopted in FreeBSD
+ 8.0. */
-static CORE_ADDR
-amd64fbsd_sigcontext_addr (struct frame_info *this_frame)
+static const struct regcache_map_entry amd64_fbsd_mcregmap[] =
{
- struct gdbarch *gdbarch = get_frame_arch (this_frame);
- enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
- CORE_ADDR sp;
- gdb_byte buf[8];
-
- /* The `struct sigcontext' (which really is an `ucontext_t' on
- FreeBSD/amd64) lives at a fixed offset in the signal frame. See
- <machine/sigframe.h>. */
- get_frame_register (this_frame, AMD64_RSP_REGNUM, buf);
- sp = extract_unsigned_integer (buf, 8, byte_order);
- return sp + 16;
-}
-
-/* FreeBSD 5.1-RELEASE or later. */
+ { 1, REGCACHE_MAP_SKIP, 8 }, /* mc_onstack */
+ { 1, AMD64_RDI_REGNUM, 0 },
+ { 1, AMD64_RSI_REGNUM, 0 },
+ { 1, AMD64_RDX_REGNUM, 0 },
+ { 1, AMD64_RCX_REGNUM, 0 },
+ { 1, AMD64_R8_REGNUM, 0 },
+ { 1, AMD64_R9_REGNUM, 0 },
+ { 1, AMD64_RAX_REGNUM, 0 },
+ { 1, AMD64_RBX_REGNUM, 0 },
+ { 1, AMD64_RBP_REGNUM, 0 },
+ { 1, AMD64_R10_REGNUM, 0 },
+ { 1, AMD64_R11_REGNUM, 0 },
+ { 1, AMD64_R12_REGNUM, 0 },
+ { 1, AMD64_R13_REGNUM, 0 },
+ { 1, AMD64_R14_REGNUM, 0 },
+ { 1, AMD64_R15_REGNUM, 0 },
+ { 1, REGCACHE_MAP_SKIP, 4 }, /* mc_trapno */
+ { 1, AMD64_FS_REGNUM, 2 },
+ { 1, AMD64_GS_REGNUM, 2 },
+ { 1, REGCACHE_MAP_SKIP, 8 }, /* mc_addr */
+ { 1, REGCACHE_MAP_SKIP, 4 }, /* mc_flags */
+ { 1, AMD64_ES_REGNUM, 2 },
+ { 1, AMD64_DS_REGNUM, 2 },
+ { 1, REGCACHE_MAP_SKIP, 8 }, /* mc_err */
+ { 1, AMD64_RIP_REGNUM, 0 },
+ { 1, AMD64_CS_REGNUM, 8 },
+ { 1, AMD64_EFLAGS_REGNUM, 8 },
+ { 1, AMD64_RSP_REGNUM, 0 },
+ { 1, AMD64_SS_REGNUM, 8 },
+ { 1, REGCACHE_MAP_SKIP, 8 }, /* mc_len */
+ { 1, REGCACHE_MAP_SKIP, 8 }, /* mc_fpformat */
+ { 1, REGCACHE_MAP_SKIP, 8 }, /* mc_ownedfp */
+ { 64, REGCACHE_MAP_SKIP, 8 }, /* mc_fpstate */
+ { 1, AMD64_FSBASE_REGNUM, 0 },
+ { 1, AMD64_GSBASE_REGNUM, 0 },
+ { 0 }
+};
-/* Mapping between the general-purpose registers in `struct reg'
- format and GDB's register cache layout.
+/* Register set definitions. */
- Note that some registers are 32-bit, but since we're little-endian
- we get away with that. */
+const struct regset amd64_fbsd_gregset =
+{
+ amd64_fbsd_gregmap, regcache_supply_regset, regcache_collect_regset
+};
-/* From <machine/reg.h>. */
-static int amd64fbsd_r_reg_offset[] =
+const struct regset amd64_fbsd_segbases_regset =
{
- 14 * 8, /* %rax */
- 11 * 8, /* %rbx */
- 13 * 8, /* %rcx */
- 12 * 8, /* %rdx */
- 9 * 8, /* %rsi */
- 8 * 8, /* %rdi */
- 10 * 8, /* %rbp */
- 20 * 8, /* %rsp */
- 7 * 8, /* %r8 ... */
- 6 * 8,
- 5 * 8,
- 4 * 8,
- 3 * 8,
- 2 * 8,
- 1 * 8,
- 0 * 8, /* ... %r15 */
- 17 * 8, /* %rip */
- 19 * 8, /* %eflags */
- 18 * 8, /* %cs */
- 21 * 8, /* %ss */
- -1, /* %ds */
- -1, /* %es */
- -1, /* %fs */
- -1 /* %gs */
+ amd64_fbsd_segbases_regmap, regcache_supply_regset, regcache_collect_regset
};
-/* Location of the signal trampoline. */
-CORE_ADDR amd64fbsd_sigtramp_start_addr;
-CORE_ADDR amd64fbsd_sigtramp_end_addr;
+/* Support for signal handlers. */
+
+/* In a signal frame, rsp points to a 'struct sigframe' which is
+ defined as:
-/* From <machine/signal.h>. */
-int amd64fbsd_sc_reg_offset[] =
+ struct sigframe {
+ union {
+ __siginfohandler_t *sf_action;
+ __sighandler_t *sf_handler;
+ } sf_ahu;
+ ucontext_t sf_uc;
+ ...
+ }
+
+ ucontext_t is defined as:
+
+ struct __ucontext {
+ sigset_t uc_sigmask;
+ mcontext_t uc_mcontext;
+ ...
+ };
+
+ The mcontext_t contains the general purpose register set as well
+ as the floating point or XSAVE state. */
+
+/* NB: There is an 8 byte padding hole between sf_ahu and sf_uc. */
+#define AMD64_SIGFRAME_UCONTEXT_OFFSET 16
+#define AMD64_UCONTEXT_MCONTEXT_OFFSET 16
+#define AMD64_SIZEOF_MCONTEXT_T 800
+
+/* Implement the "init" method of struct tramp_frame. */
+
+static void
+amd64_fbsd_sigframe_init (const struct tramp_frame *self,
+ struct frame_info *this_frame,
+ struct trad_frame_cache *this_cache,
+ CORE_ADDR func)
+{
+ CORE_ADDR sp = get_frame_register_unsigned (this_frame, AMD64_RSP_REGNUM);
+ CORE_ADDR mcontext_addr
+ = (sp
+ + AMD64_SIGFRAME_UCONTEXT_OFFSET
+ + AMD64_UCONTEXT_MCONTEXT_OFFSET);
+
+ trad_frame_set_reg_regmap (this_cache, amd64_fbsd_mcregmap, mcontext_addr,
+ AMD64_SIZEOF_MCONTEXT_T);
+
+ /* Don't bother with floating point or XSAVE state for now. The
+ current helper routines for parsing FXSAVE and XSAVE state only
+ work with regcaches. This could perhaps create a temporary
+ regcache, collect the register values from mc_fpstate and
+ mc_xfpustate, and then set register values in the trad_frame. */
+
+ trad_frame_set_id (this_cache, frame_id_build (sp, func));
+}
+
+static const struct tramp_frame amd64_fbsd_sigframe =
{
- 24 + 6 * 8, /* %rax */
- 24 + 7 * 8, /* %rbx */
- 24 + 3 * 8, /* %rcx */
- 24 + 2 * 8, /* %rdx */
- 24 + 1 * 8, /* %rsi */
- 24 + 0 * 8, /* %rdi */
- 24 + 8 * 8, /* %rbp */
- 24 + 22 * 8, /* %rsp */
- 24 + 4 * 8, /* %r8 ... */
- 24 + 5 * 8,
- 24 + 9 * 8,
- 24 + 10 * 8,
- 24 + 11 * 8,
- 24 + 12 * 8,
- 24 + 13 * 8,
- 24 + 14 * 8, /* ... %r15 */
- 24 + 19 * 8, /* %rip */
- 24 + 21 * 8, /* %eflags */
- 24 + 20 * 8, /* %cs */
- 24 + 23 * 8, /* %ss */
- -1, /* %ds */
- -1, /* %es */
- -1, /* %fs */
- -1 /* %gs */
+ SIGTRAMP_FRAME,
+ 1,
+ {
+ {0x48, ULONGEST_MAX}, /* lea SIGF_UC(%rsp),%rdi */
+ {0x8d, ULONGEST_MAX},
+ {0x7c, ULONGEST_MAX},
+ {0x24, ULONGEST_MAX},
+ {0x10, ULONGEST_MAX},
+ {0x6a, ULONGEST_MAX}, /* pushq $0 */
+ {0x00, ULONGEST_MAX},
+ {0x48, ULONGEST_MAX}, /* movq $SYS_sigreturn,%rax */
+ {0xc7, ULONGEST_MAX},
+ {0xc0, ULONGEST_MAX},
+ {0xa1, ULONGEST_MAX},
+ {0x01, ULONGEST_MAX},
+ {0x00, ULONGEST_MAX},
+ {0x00, ULONGEST_MAX},
+ {0x0f, ULONGEST_MAX}, /* syscall */
+ {0x05, ULONGEST_MAX},
+ {TRAMP_SENTINEL_INSN, ULONGEST_MAX}
+ },
+ amd64_fbsd_sigframe_init
};
/* Implement the core_read_description gdbarch method. */
@@ -197,10 +264,13 @@ amd64fbsd_iterate_over_regset_sections (struct gdbarch *gdbarch,
{
i386_gdbarch_tdep *tdep = (i386_gdbarch_tdep *) gdbarch_tdep (gdbarch);
- cb (".reg", tdep->sizeof_gregset, tdep->sizeof_gregset, &i386_gregset, NULL,
- cb_data);
+ cb (".reg", AMD64_FBSD_SIZEOF_GREGSET, AMD64_FBSD_SIZEOF_GREGSET,
+ &amd64_fbsd_gregset, NULL, cb_data);
cb (".reg2", tdep->sizeof_fpregset, tdep->sizeof_fpregset, &amd64_fpregset,
NULL, cb_data);
+ cb (".reg-x86-segbases", AMD64_FBSD_SIZEOF_SEGBASES_REGSET,
+ AMD64_FBSD_SIZEOF_SEGBASES_REGSET, &amd64_fbsd_segbases_regset,
+ "segment bases", cb_data);
cb (".reg-xstate", X86_XSTATE_SIZE (tdep->xcr0), X86_XSTATE_SIZE (tdep->xcr0),
&amd64fbsd_xstateregset, "XSAVE extended state", cb_data);
}
@@ -237,19 +307,10 @@ amd64fbsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
/* Obviously FreeBSD is BSD-based. */
i386bsd_init_abi (info, gdbarch);
- tdep->gregset_reg_offset = amd64fbsd_r_reg_offset;
- tdep->gregset_num_regs = ARRAY_SIZE (amd64fbsd_r_reg_offset);
- tdep->sizeof_gregset = 22 * 8;
-
amd64_init_abi (info, gdbarch,
amd64_target_description (X86_XSTATE_SSE_MASK, true));
- tdep->sigtramp_p = amd64fbsd_sigtramp_p;
- tdep->sigtramp_start = amd64fbsd_sigtramp_start_addr;
- tdep->sigtramp_end = amd64fbsd_sigtramp_end_addr;
- tdep->sigcontext_addr = amd64fbsd_sigcontext_addr;
- tdep->sc_reg_offset = amd64fbsd_sc_reg_offset;
- tdep->sc_num_regs = ARRAY_SIZE (amd64fbsd_sc_reg_offset);
+ tramp_frame_prepend_unwinder (gdbarch, &amd64_fbsd_sigframe);
tdep->xsave_xcr0_offset = I386_FBSD_XSAVE_XCR0_OFFSET;
diff --git a/gdb/amd64-fbsd-tdep.h b/gdb/amd64-fbsd-tdep.h
new file mode 100644
index 00000000000..0a18dbcbfd7
--- /dev/null
+++ b/gdb/amd64-fbsd-tdep.h
@@ -0,0 +1,27 @@
+/* FreeBSD/amd64 target support, prototypes.
+
+ Copyright (C) 2021 Free Software Foundation, Inc.
+
+ This file is part of GDB.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#ifndef AMD64_FBSD_TDEP_H
+#define AMD64_FBSD_TDEP_H
+
+#include "regset.h"
+
+extern const struct regset amd64_fbsd_gregset;
+
+#endif /* AMD64_FBSD_TDEP_H */
diff --git a/gdb/amd64-linux-tdep.c b/gdb/amd64-linux-tdep.c
index 2416204310f..0e5194fbeee 100644
--- a/gdb/amd64-linux-tdep.c
+++ b/gdb/amd64-linux-tdep.c
@@ -279,7 +279,7 @@ static int amd64_linux_sc_reg_offset[] =
static int
amd64_linux_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
- struct reggroup *group)
+ const struct reggroup *group)
{
if (regnum == AMD64_LINUX_ORIG_RAX_REGNUM
|| regnum == AMD64_FSBASE_REGNUM
@@ -1496,10 +1496,10 @@ amd64_linux_syscall_record_common (struct regcache *regcache,
if (syscall_gdb == gdb_sys_no_syscall)
{
- fprintf_unfiltered (gdb_stderr,
- _("Process record and replay target doesn't "
- "support syscall number %s\n"),
- pulongest (syscall_native));
+ gdb_printf (gdb_stderr,
+ _("Process record and replay target doesn't "
+ "support syscall number %s\n"),
+ pulongest (syscall_native));
return -1;
}
else
@@ -1578,14 +1578,16 @@ amd64_linux_read_description (uint64_t xcr0_features_bit, bool is_x32)
{
static target_desc *amd64_linux_tdescs \
[2/*AVX*/][2/*MPX*/][2/*AVX512*/][2/*PKRU*/] = {};
- static target_desc *x32_linux_tdescs[2/*AVX*/][2/*AVX512*/] = {};
+ static target_desc *x32_linux_tdescs \
+ [2/*AVX*/][2/*AVX512*/][2/*PKRU*/] = {};
target_desc **tdesc;
if (is_x32)
{
tdesc = &x32_linux_tdescs[(xcr0_features_bit & X86_XSTATE_AVX) ? 1 : 0 ]
- [(xcr0_features_bit & X86_XSTATE_AVX512) ? 1 : 0];
+ [(xcr0_features_bit & X86_XSTATE_AVX512) ? 1 : 0]
+ [(xcr0_features_bit & X86_XSTATE_PKRU) ? 1 : 0];
}
else
{
diff --git a/gdb/amd64-tdep.c b/gdb/amd64-tdep.c
index e67aea8e66d..b95ab1e87b8 100644
--- a/gdb/amd64-tdep.c
+++ b/gdb/amd64-tdep.c
@@ -2474,8 +2474,8 @@ amd64_skip_xmm_prologue (CORE_ADDR pc, CORE_ADDR start_pc)
start_pc_sal = find_pc_sect_line (start_pc, NULL, 0);
if (start_pc_sal.symtab == NULL
- || producer_is_gcc_ge_4 (COMPUNIT_PRODUCER
- (SYMTAB_COMPUNIT (start_pc_sal.symtab))) < 6
+ || producer_is_gcc_ge_4 (start_pc_sal.symtab->compunit ()
+ ->producer ()) < 6
|| start_pc_sal.pc != start_pc || pc >= start_pc_sal.end)
return pc;
@@ -2545,9 +2545,9 @@ amd64_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc)
compilers to emit usable line notes. */
if (post_prologue_pc
&& (cust != NULL
- && COMPUNIT_PRODUCER (cust) != NULL
- && (producer_is_llvm (COMPUNIT_PRODUCER (cust))
- || producer_is_icc_ge_19 (COMPUNIT_PRODUCER (cust)))))
+ && cust->producer () != nullptr
+ && (producer_is_llvm (cust->producer ())
+ || producer_is_icc_ge_19 (cust->producer ()))))
return std::max (start_pc, post_prologue_pc);
}
@@ -2901,7 +2901,7 @@ amd64_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc)
struct compunit_symtab *cust;
cust = find_pc_compunit_symtab (pc);
- if (cust != NULL && COMPUNIT_EPILOGUE_UNWIND_VALID (cust))
+ if (cust != NULL && cust->epilogue_unwind_valid ())
return 0;
if (target_read_memory (pc, &insn, 1))
diff --git a/gdb/amd64-tdep.h b/gdb/amd64-tdep.h
index 0ffa7422f7f..c18766e71c4 100644
--- a/gdb/amd64-tdep.h
+++ b/gdb/amd64-tdep.h
@@ -144,9 +144,4 @@ extern int amd64nbsd_r_reg_offset[];
/* Variables exported from amd64-obsd-tdep.c. */
extern int amd64obsd_r_reg_offset[];
-/* Variables exported from amd64-fbsd-tdep.c. */
-extern CORE_ADDR amd64fbsd_sigtramp_start_addr;
-extern CORE_ADDR amd64fbsd_sigtramp_end_addr;
-extern int amd64fbsd_sc_reg_offset[];
-
#endif /* amd64-tdep.h */
diff --git a/gdb/annotate.c b/gdb/annotate.c
index 4ac1b63b66b..33805dcdb30 100644
--- a/gdb/annotate.c
+++ b/gdb/annotate.c
@@ -52,9 +52,9 @@ static void
print_value_flags (struct type *t)
{
if (can_dereference (t))
- printf_filtered (("*"));
+ printf_unfiltered (("*"));
else
- printf_filtered (("-"));
+ printf_unfiltered (("-"));
}
static void
@@ -76,42 +76,42 @@ void
annotate_breakpoint (int num)
{
if (annotation_level > 1)
- printf_filtered (("\n\032\032breakpoint %d\n"), num);
+ printf_unfiltered (("\n\032\032breakpoint %d\n"), num);
}
void
annotate_catchpoint (int num)
{
if (annotation_level > 1)
- printf_filtered (("\n\032\032catchpoint %d\n"), num);
+ printf_unfiltered (("\n\032\032catchpoint %d\n"), num);
}
void
annotate_watchpoint (int num)
{
if (annotation_level > 1)
- printf_filtered (("\n\032\032watchpoint %d\n"), num);
+ printf_unfiltered (("\n\032\032watchpoint %d\n"), num);
}
void
annotate_starting (void)
{
if (annotation_level > 1)
- printf_filtered (("\n\032\032starting\n"));
+ printf_unfiltered (("\n\032\032starting\n"));
}
void
annotate_stopped (void)
{
if (annotation_level > 1)
- printf_filtered (("\n\032\032stopped\n"));
+ printf_unfiltered (("\n\032\032stopped\n"));
}
void
annotate_exited (int exitstatus)
{
if (annotation_level > 1)
- printf_filtered (("\n\032\032exited %d\n"), exitstatus);
+ printf_unfiltered (("\n\032\032exited %d\n"), exitstatus);
}
void
@@ -121,35 +121,35 @@ annotate_signalled (void)
deprecated_annotate_signalled_hook ();
if (annotation_level > 1)
- printf_filtered (("\n\032\032signalled\n"));
+ printf_unfiltered (("\n\032\032signalled\n"));
}
void
annotate_signal_name (void)
{
if (annotation_level == 2)
- printf_filtered (("\n\032\032signal-name\n"));
+ printf_unfiltered (("\n\032\032signal-name\n"));
}
void
annotate_signal_name_end (void)
{
if (annotation_level == 2)
- printf_filtered (("\n\032\032signal-name-end\n"));
+ printf_unfiltered (("\n\032\032signal-name-end\n"));
}
void
annotate_signal_string (void)
{
if (annotation_level == 2)
- printf_filtered (("\n\032\032signal-string\n"));
+ printf_unfiltered (("\n\032\032signal-string\n"));
}
void
annotate_signal_string_end (void)
{
if (annotation_level == 2)
- printf_filtered (("\n\032\032signal-string-end\n"));
+ printf_unfiltered (("\n\032\032signal-string-end\n"));
}
void
@@ -159,42 +159,42 @@ annotate_signal (void)
deprecated_annotate_signal_hook ();
if (annotation_level > 1)
- printf_filtered (("\n\032\032signal\n"));
+ printf_unfiltered (("\n\032\032signal\n"));
}
void
annotate_breakpoints_headers (void)
{
if (annotation_level == 2)
- printf_filtered (("\n\032\032breakpoints-headers\n"));
+ printf_unfiltered (("\n\032\032breakpoints-headers\n"));
}
void
annotate_field (int num)
{
if (annotation_level == 2)
- printf_filtered (("\n\032\032field %d\n"), num);
+ printf_unfiltered (("\n\032\032field %d\n"), num);
}
void
annotate_breakpoints_table (void)
{
if (annotation_level == 2)
- printf_filtered (("\n\032\032breakpoints-table\n"));
+ printf_unfiltered (("\n\032\032breakpoints-table\n"));
}
void
annotate_record (void)
{
if (annotation_level == 2)
- printf_filtered (("\n\032\032record\n"));
+ printf_unfiltered (("\n\032\032record\n"));
}
void
annotate_breakpoints_table_end (void)
{
if (annotation_level == 2)
- printf_filtered (("\n\032\032breakpoints-table-end\n"));
+ printf_unfiltered (("\n\032\032breakpoints-table-end\n"));
}
void
@@ -237,9 +237,9 @@ annotate_thread_exited (struct thread_info *t, int silent)
{
if (annotation_level > 1)
{
- printf_filtered(("\n\032\032thread-exited,"
- "id=\"%d\",group-id=\"i%d\"\n"),
- t->global_num, t->inf->num);
+ printf_unfiltered (("\n\032\032thread-exited,"
+ "id=\"%d\",group-id=\"i%d\"\n"),
+ t->global_num, t->inf->num);
}
}
@@ -248,9 +248,9 @@ annotate_field_begin (struct type *type)
{
if (annotation_level == 2)
{
- printf_filtered (("\n\032\032field-begin "));
+ printf_unfiltered (("\n\032\032field-begin "));
print_value_flags (type);
- printf_filtered (("\n"));
+ printf_unfiltered (("\n"));
}
}
@@ -258,42 +258,42 @@ void
annotate_field_name_end (void)
{
if (annotation_level == 2)
- printf_filtered (("\n\032\032field-name-end\n"));
+ printf_unfiltered (("\n\032\032field-name-end\n"));
}
void
annotate_field_value (void)
{
if (annotation_level == 2)
- printf_filtered (("\n\032\032field-value\n"));
+ printf_unfiltered (("\n\032\032field-value\n"));
}
void
annotate_field_end (void)
{
if (annotation_level == 2)
- printf_filtered (("\n\032\032field-end\n"));
+ printf_unfiltered (("\n\032\032field-end\n"));
}
void
annotate_quit (void)
{
if (annotation_level > 1)
- printf_filtered (("\n\032\032quit\n"));
+ printf_unfiltered (("\n\032\032quit\n"));
}
void
annotate_error (void)
{
if (annotation_level > 1)
- printf_filtered (("\n\032\032error\n"));
+ printf_unfiltered (("\n\032\032error\n"));
}
void
annotate_error_begin (void)
{
if (annotation_level > 1)
- fprintf_filtered (gdb_stderr, "\n\032\032error-begin\n");
+ gdb_printf (gdb_stderr, "\n\032\032error-begin\n");
}
void
@@ -301,9 +301,9 @@ annotate_value_history_begin (int histindex, struct type *type)
{
if (annotation_level == 2)
{
- printf_filtered (("\n\032\032value-history-begin %d "), histindex);
+ printf_unfiltered (("\n\032\032value-history-begin %d "), histindex);
print_value_flags (type);
- printf_filtered (("\n"));
+ printf_unfiltered (("\n"));
}
}
@@ -312,9 +312,9 @@ annotate_value_begin (struct type *type)
{
if (annotation_level == 2)
{
- printf_filtered (("\n\032\032value-begin "));
+ printf_unfiltered (("\n\032\032value-begin "));
print_value_flags (type);
- printf_filtered (("\n"));
+ printf_unfiltered (("\n"));
}
}
@@ -322,84 +322,84 @@ void
annotate_value_history_value (void)
{
if (annotation_level == 2)
- printf_filtered (("\n\032\032value-history-value\n"));
+ printf_unfiltered (("\n\032\032value-history-value\n"));
}
void
annotate_value_history_end (void)
{
if (annotation_level == 2)
- printf_filtered (("\n\032\032value-history-end\n"));
+ printf_unfiltered (("\n\032\032value-history-end\n"));
}
void
annotate_value_end (void)
{
if (annotation_level == 2)
- printf_filtered (("\n\032\032value-end\n"));
+ printf_unfiltered (("\n\032\032value-end\n"));
}
void
annotate_display_begin (void)
{
if (annotation_level == 2)
- printf_filtered (("\n\032\032display-begin\n"));
+ printf_unfiltered (("\n\032\032display-begin\n"));
}
void
annotate_display_number_end (void)
{
if (annotation_level == 2)
- printf_filtered (("\n\032\032display-number-end\n"));
+ printf_unfiltered (("\n\032\032display-number-end\n"));
}
void
annotate_display_format (void)
{
if (annotation_level == 2)
- printf_filtered (("\n\032\032display-format\n"));
+ printf_unfiltered (("\n\032\032display-format\n"));
}
void
annotate_display_expression (void)
{
if (annotation_level == 2)
- printf_filtered (("\n\032\032display-expression\n"));
+ printf_unfiltered (("\n\032\032display-expression\n"));
}
void
annotate_display_expression_end (void)
{
if (annotation_level == 2)
- printf_filtered (("\n\032\032display-expression-end\n"));
+ printf_unfiltered (("\n\032\032display-expression-end\n"));
}
void
annotate_display_value (void)
{
if (annotation_level == 2)
- printf_filtered (("\n\032\032display-value\n"));
+ printf_unfiltered (("\n\032\032display-value\n"));
}
void
annotate_display_end (void)
{
if (annotation_level == 2)
- printf_filtered (("\n\032\032display-end\n"));
+ printf_unfiltered (("\n\032\032display-end\n"));
}
void
annotate_arg_begin (void)
{
if (annotation_level == 2)
- printf_filtered (("\n\032\032arg-begin\n"));
+ printf_unfiltered (("\n\032\032arg-begin\n"));
}
void
annotate_arg_name_end (void)
{
if (annotation_level == 2)
- printf_filtered (("\n\032\032arg-name-end\n"));
+ printf_unfiltered (("\n\032\032arg-name-end\n"));
}
void
@@ -407,9 +407,9 @@ annotate_arg_value (struct type *type)
{
if (annotation_level == 2)
{
- printf_filtered (("\n\032\032arg-value "));
+ printf_unfiltered (("\n\032\032arg-value "));
print_value_flags (type);
- printf_filtered (("\n"));
+ printf_unfiltered (("\n"));
}
}
@@ -417,7 +417,7 @@ void
annotate_arg_end (void)
{
if (annotation_level == 2)
- printf_filtered (("\n\032\032arg-end\n"));
+ printf_unfiltered (("\n\032\032arg-end\n"));
}
static void
@@ -425,12 +425,12 @@ annotate_source (const char *filename, int line, int character, int mid,
struct gdbarch *gdbarch, CORE_ADDR pc)
{
if (annotation_level > 1)
- printf_filtered (("\n\032\032source "));
+ printf_unfiltered (("\n\032\032source "));
else
- printf_filtered (("\032\032"));
+ printf_unfiltered (("\032\032"));
- printf_filtered (("%s:%d:%d:%s:%s\n"), filename, line, character,
- mid ? "middle" : "beg", paddress (gdbarch, pc));
+ printf_unfiltered (("%s:%d:%d:%s:%s\n"), filename, line, character,
+ mid ? "middle" : "beg", paddress (gdbarch, pc));
}
/* See annotate.h. */
@@ -448,12 +448,12 @@ annotate_source_line (struct symtab *s, int line, int mid_statement,
return false;
annotate_source (s->fullname, line, (int) (*offsets)[line - 1],
- mid_statement, SYMTAB_OBJFILE (s)->arch (),
+ mid_statement, s->compunit ()->objfile ()->arch (),
pc);
/* Update the current symtab and line. */
symtab_and_line sal;
- sal.pspace = SYMTAB_PSPACE (s);
+ sal.pspace = s->compunit ()->objfile ()->pspace;
sal.symtab = s;
sal.line = line;
set_current_source_symtab_and_line (sal);
@@ -469,99 +469,99 @@ void
annotate_frame_begin (int level, struct gdbarch *gdbarch, CORE_ADDR pc)
{
if (annotation_level > 1)
- printf_filtered (("\n\032\032frame-begin %d %s\n"),
- level, paddress (gdbarch, pc));
+ printf_unfiltered (("\n\032\032frame-begin %d %s\n"),
+ level, paddress (gdbarch, pc));
}
void
annotate_function_call (void)
{
if (annotation_level == 2)
- printf_filtered (("\n\032\032function-call\n"));
+ printf_unfiltered (("\n\032\032function-call\n"));
}
void
annotate_signal_handler_caller (void)
{
if (annotation_level == 2)
- printf_filtered (("\n\032\032signal-handler-caller\n"));
+ printf_unfiltered (("\n\032\032signal-handler-caller\n"));
}
void
annotate_frame_address (void)
{
if (annotation_level == 2)
- printf_filtered (("\n\032\032frame-address\n"));
+ printf_unfiltered (("\n\032\032frame-address\n"));
}
void
annotate_frame_address_end (void)
{
if (annotation_level == 2)
- printf_filtered (("\n\032\032frame-address-end\n"));
+ printf_unfiltered (("\n\032\032frame-address-end\n"));
}
void
annotate_frame_function_name (void)
{
if (annotation_level == 2)
- printf_filtered (("\n\032\032frame-function-name\n"));
+ printf_unfiltered (("\n\032\032frame-function-name\n"));
}
void
annotate_frame_args (void)
{
if (annotation_level == 2)
- printf_filtered (("\n\032\032frame-args\n"));
+ printf_unfiltered (("\n\032\032frame-args\n"));
}
void
annotate_frame_source_begin (void)
{
if (annotation_level == 2)
- printf_filtered (("\n\032\032frame-source-begin\n"));
+ printf_unfiltered (("\n\032\032frame-source-begin\n"));
}
void
annotate_frame_source_file (void)
{
if (annotation_level == 2)
- printf_filtered (("\n\032\032frame-source-file\n"));
+ printf_unfiltered (("\n\032\032frame-source-file\n"));
}
void
annotate_frame_source_file_end (void)
{
if (annotation_level == 2)
- printf_filtered (("\n\032\032frame-source-file-end\n"));
+ printf_unfiltered (("\n\032\032frame-source-file-end\n"));
}
void
annotate_frame_source_line (void)
{
if (annotation_level == 2)
- printf_filtered (("\n\032\032frame-source-line\n"));
+ printf_unfiltered (("\n\032\032frame-source-line\n"));
}
void
annotate_frame_source_end (void)
{
if (annotation_level == 2)
- printf_filtered (("\n\032\032frame-source-end\n"));
+ printf_unfiltered (("\n\032\032frame-source-end\n"));
}
void
annotate_frame_where (void)
{
if (annotation_level == 2)
- printf_filtered (("\n\032\032frame-where\n"));
+ printf_unfiltered (("\n\032\032frame-where\n"));
}
void
annotate_frame_end (void)
{
if (annotation_level == 2)
- printf_filtered (("\n\032\032frame-end\n"));
+ printf_unfiltered (("\n\032\032frame-end\n"));
}
void
@@ -569,9 +569,9 @@ annotate_array_section_begin (int idx, struct type *elttype)
{
if (annotation_level == 2)
{
- printf_filtered (("\n\032\032array-section-begin %d "), idx);
+ printf_unfiltered (("\n\032\032array-section-begin %d "), idx);
print_value_flags (elttype);
- printf_filtered (("\n"));
+ printf_unfiltered (("\n"));
}
}
@@ -579,28 +579,28 @@ void
annotate_elt_rep (unsigned int repcount)
{
if (annotation_level == 2)
- printf_filtered (("\n\032\032elt-rep %u\n"), repcount);
+ printf_unfiltered (("\n\032\032elt-rep %u\n"), repcount);
}
void
annotate_elt_rep_end (void)
{
if (annotation_level == 2)
- printf_filtered (("\n\032\032elt-rep-end\n"));
+ printf_unfiltered (("\n\032\032elt-rep-end\n"));
}
void
annotate_elt (void)
{
if (annotation_level == 2)
- printf_filtered (("\n\032\032elt\n"));
+ printf_unfiltered (("\n\032\032elt\n"));
}
void
annotate_array_section_end (void)
{
if (annotation_level == 2)
- printf_filtered (("\n\032\032array-section-end\n"));
+ printf_unfiltered (("\n\032\032array-section-end\n"));
}
/* Called when GDB is about to display the prompt. Used to reset
diff --git a/gdb/arc-linux-tdep.c b/gdb/arc-linux-tdep.c
index e895b72ce71..13595f2e8e9 100644
--- a/gdb/arc-linux-tdep.c
+++ b/gdb/arc-linux-tdep.c
@@ -24,6 +24,7 @@
#include "opcode/arc.h"
#include "osabi.h"
#include "solib-svr4.h"
+#include "disasm.h"
/* ARC header files. */
#include "opcodes/arc-dis.h"
@@ -508,7 +509,7 @@ arc_linux_skip_solib_resolver (struct gdbarch *gdbarch, CORE_ADDR pc)
{
if (resolver.minsym != nullptr)
{
- CORE_ADDR res_addr = BMSYMBOL_VALUE_ADDRESS (resolver);
+ CORE_ADDR res_addr = resolver.value_address ();
arc_linux_debug_printf ("pc = %s, resolver at %s",
print_core_address (gdbarch, pc),
print_core_address (gdbarch, res_addr));
@@ -518,7 +519,7 @@ arc_linux_skip_solib_resolver (struct gdbarch *gdbarch, CORE_ADDR pc)
print_core_address (gdbarch, pc));
}
- if (resolver.minsym != nullptr && BMSYMBOL_VALUE_ADDRESS (resolver) == pc)
+ if (resolver.minsym != nullptr && resolver.value_address () == pc)
{
/* Find the return address. */
return frame_unwind_caller_pc (get_current_frame ());
diff --git a/gdb/arc-tdep.c b/gdb/arc-tdep.c
index 90ec323d05e..98bd1c4bc0a 100644
--- a/gdb/arc-tdep.c
+++ b/gdb/arc-tdep.c
@@ -435,14 +435,14 @@ arc_insn_get_branch_target (const struct arc_instruction &insn)
/* JLI and EI depend on optional AUX registers. Not supported right now. */
else if (insn.insn_class == JLI)
{
- fprintf_unfiltered (gdb_stderr,
- "JLI_S instruction is not supported by the GDB.");
+ gdb_printf (gdb_stderr,
+ "JLI_S instruction is not supported by the GDB.");
return 0;
}
else if (insn.insn_class == EI)
{
- fprintf_unfiltered (gdb_stderr,
- "EI_S instruction is not supported by the GDB.");
+ gdb_printf (gdb_stderr,
+ "EI_S instruction is not supported by the GDB.");
return 0;
}
/* LEAVE_S: PC = BLINK. */
@@ -1306,19 +1306,13 @@ arc_is_in_prologue (struct gdbarch *gdbarch, const struct arc_instruction &insn,
return false;
}
-/* Copy of gdb_buffered_insn_length_fprintf from disasm.c. */
-
-static int ATTRIBUTE_PRINTF (2, 3)
-arc_fprintf_disasm (void *stream, const char *format, ...)
-{
- return 0;
-}
+/* See arc-tdep.h. */
struct disassemble_info
arc_disassemble_info (struct gdbarch *gdbarch)
{
struct disassemble_info di;
- init_disassemble_info (&di, &null_stream, arc_fprintf_disasm);
+ init_disassemble_info_for_no_printing (&di);
di.arch = gdbarch_bfd_arch_info (gdbarch)->arch;
di.mach = gdbarch_bfd_arch_info (gdbarch)->mach;
di.endian = gdbarch_byte_order (gdbarch);
@@ -1958,20 +1952,6 @@ static const struct frame_base arc_normal_base = {
arc_frame_base_address
};
-/* Add all the expected register sets into GDBARCH. */
-
-static void
-arc_add_reggroups (struct gdbarch *gdbarch)
-{
- reggroup_add (gdbarch, general_reggroup);
- reggroup_add (gdbarch, float_reggroup);
- reggroup_add (gdbarch, system_reggroup);
- reggroup_add (gdbarch, vector_reggroup);
- reggroup_add (gdbarch, all_reggroup);
- reggroup_add (gdbarch, save_reggroup);
- reggroup_add (gdbarch, restore_reggroup);
-}
-
static enum arc_isa
mach_type_to_arc_isa (const unsigned long mach)
{
@@ -2370,9 +2350,6 @@ arc_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
/* This doesn't include possible long-immediate value. */
set_gdbarch_max_insn_length (gdbarch, 4);
- /* Add default register groups. */
- arc_add_reggroups (gdbarch);
-
/* Frame unwinders and sniffers. */
dwarf2_frame_set_init_reg (gdbarch, arc_dwarf2_frame_init_reg);
dwarf2_append_unwinders (gdbarch);
@@ -2456,16 +2433,16 @@ arc_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
{
arc_gdbarch_tdep *tdep = (arc_gdbarch_tdep *) gdbarch_tdep (gdbarch);
- fprintf_filtered (file, "arc_dump_tdep: jb_pc = %i\n", tdep->jb_pc);
+ gdb_printf (file, "arc_dump_tdep: jb_pc = %i\n", tdep->jb_pc);
- fprintf_filtered (file, "arc_dump_tdep: is_sigtramp = <%s>\n",
- host_address_to_string (tdep->is_sigtramp));
- fprintf_filtered (file, "arc_dump_tdep: sigcontext_addr = <%s>\n",
- host_address_to_string (tdep->sigcontext_addr));
- fprintf_filtered (file, "arc_dump_tdep: sc_reg_offset = <%s>\n",
- host_address_to_string (tdep->sc_reg_offset));
- fprintf_filtered (file, "arc_dump_tdep: sc_num_regs = %d\n",
- tdep->sc_num_regs);
+ gdb_printf (file, "arc_dump_tdep: is_sigtramp = <%s>\n",
+ host_address_to_string (tdep->is_sigtramp));
+ gdb_printf (file, "arc_dump_tdep: sigcontext_addr = <%s>\n",
+ host_address_to_string (tdep->sigcontext_addr));
+ gdb_printf (file, "arc_dump_tdep: sc_reg_offset = <%s>\n",
+ host_address_to_string (tdep->sc_reg_offset));
+ gdb_printf (file, "arc_dump_tdep: sc_num_regs = %d\n",
+ tdep->sc_num_regs);
}
/* This command accepts single argument - address of instruction to
diff --git a/gdb/arc-tdep.h b/gdb/arc-tdep.h
index 0a8d1dc5646..ceca003204f 100644
--- a/gdb/arc-tdep.h
+++ b/gdb/arc-tdep.h
@@ -110,7 +110,7 @@ enum arc_regnum
/* Special value for register offset arrays. */
#define ARC_OFFSET_NO_REGISTER (-1)
-#define arc_print(fmt, args...) fprintf_unfiltered (gdb_stdlog, fmt, ##args)
+#define arc_print(fmt, args...) gdb_printf (gdb_stdlog, fmt, ##args)
extern bool arc_debug;
diff --git a/gdb/arch-utils.c b/gdb/arch-utils.c
index 38e3132668d..ff946ee3767 100644
--- a/gdb/arch-utils.c
+++ b/gdb/arch-utils.c
@@ -359,7 +359,7 @@ static const char *const endian_enum[] =
endian_auto,
NULL,
};
-static const char *set_endian_string;
+static const char *set_endian_string = endian_auto;
enum bfd_endian
selected_byte_order (void)
@@ -375,18 +375,18 @@ show_endian (struct ui_file *file, int from_tty, struct cmd_list_element *c,
{
if (target_byte_order_user == BFD_ENDIAN_UNKNOWN)
if (gdbarch_byte_order (get_current_arch ()) == BFD_ENDIAN_BIG)
- fprintf_filtered (file, _("The target endianness is set automatically "
- "(currently big endian).\n"));
+ gdb_printf (file, _("The target endianness is set automatically "
+ "(currently big endian).\n"));
else
- fprintf_filtered (file, _("The target endianness is set automatically "
- "(currently little endian).\n"));
+ gdb_printf (file, _("The target endianness is set automatically "
+ "(currently little endian).\n"));
else
if (target_byte_order_user == BFD_ENDIAN_BIG)
- fprintf_filtered (file,
- _("The target is set to big endian.\n"));
+ gdb_printf (file,
+ _("The target is set to big endian.\n"));
else
- fprintf_filtered (file,
- _("The target is set to little endian.\n"));
+ gdb_printf (file,
+ _("The target is set to little endian.\n"));
}
static void
@@ -405,8 +405,8 @@ set_endian (const char *ignore_args, int from_tty, struct cmd_list_element *c)
{
info.byte_order = BFD_ENDIAN_LITTLE;
if (! gdbarch_update_p (info))
- fprintf_unfiltered (gdb_stderr,
- _("Little endian target not supported by GDB\n"));
+ gdb_printf (gdb_stderr,
+ _("Little endian target not supported by GDB\n"));
else
target_byte_order_user = BFD_ENDIAN_LITTLE;
}
@@ -414,8 +414,8 @@ set_endian (const char *ignore_args, int from_tty, struct cmd_list_element *c)
{
info.byte_order = BFD_ENDIAN_BIG;
if (! gdbarch_update_p (info))
- fprintf_unfiltered (gdb_stderr,
- _("Big endian target not supported by GDB\n"));
+ gdb_printf (gdb_stderr,
+ _("Big endian target not supported by GDB\n"));
else
target_byte_order_user = BFD_ENDIAN_BIG;
}
@@ -535,12 +535,12 @@ show_architecture (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
if (target_architecture_user == NULL)
- fprintf_filtered (file, _("The target architecture is set to "
- "\"auto\" (currently \"%s\").\n"),
- gdbarch_bfd_arch_info (get_current_arch ())->printable_name);
+ gdb_printf (file, _("The target architecture is set to "
+ "\"auto\" (currently \"%s\").\n"),
+ gdbarch_bfd_arch_info (get_current_arch ())->printable_name);
else
- fprintf_filtered (file, _("The target architecture is set to \"%s\".\n"),
- set_architecture_string);
+ gdb_printf (file, _("The target architecture is set to \"%s\".\n"),
+ set_architecture_string);
}
@@ -569,9 +569,9 @@ set_architecture (const char *ignore_args,
if (gdbarch_update_p (info))
target_architecture_user = info.bfd_arch_info;
else
- fprintf_unfiltered (gdb_stderr,
- _("Architecture `%s' not recognized.\n"),
- set_architecture_string);
+ gdb_printf (gdb_stderr,
+ _("Architecture `%s' not recognized.\n"),
+ set_architecture_string);
}
show_architecture (gdb_stdout, from_tty, NULL, NULL);
}
@@ -599,8 +599,8 @@ gdbarch_update_p (struct gdbarch_info info)
if (new_gdbarch == NULL)
{
if (gdbarch_debug)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_update_p: "
- "Architecture not found\n");
+ gdb_printf (gdb_stdlog, "gdbarch_update_p: "
+ "Architecture not found\n");
return 0;
}
@@ -609,19 +609,19 @@ gdbarch_update_p (struct gdbarch_info info)
if (new_gdbarch == target_gdbarch ())
{
if (gdbarch_debug)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_update_p: "
- "Architecture %s (%s) unchanged\n",
- host_address_to_string (new_gdbarch),
- gdbarch_bfd_arch_info (new_gdbarch)->printable_name);
+ gdb_printf (gdb_stdlog, "gdbarch_update_p: "
+ "Architecture %s (%s) unchanged\n",
+ host_address_to_string (new_gdbarch),
+ gdbarch_bfd_arch_info (new_gdbarch)->printable_name);
return 1;
}
/* It's a new architecture, swap it in. */
if (gdbarch_debug)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_update_p: "
- "New architecture %s (%s) selected\n",
- host_address_to_string (new_gdbarch),
- gdbarch_bfd_arch_info (new_gdbarch)->printable_name);
+ gdb_printf (gdb_stdlog, "gdbarch_update_p: "
+ "New architecture %s (%s) selected\n",
+ host_address_to_string (new_gdbarch),
+ gdbarch_bfd_arch_info (new_gdbarch)->printable_name);
set_target_gdbarch (new_gdbarch);
return 1;
@@ -757,7 +757,8 @@ initialize_current_architecture (void)
list of architectures. */
{
/* Append ``auto''. */
- arches.push_back ("auto");
+ set_architecture_string = "auto";
+ arches.push_back (set_architecture_string);
arches.push_back (nullptr);
set_show_commands architecture_cmds
= add_setshow_enum_cmd ("architecture", class_support,
@@ -1105,7 +1106,7 @@ static void
show_gdbarch_debug (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Architecture debugging is %s.\n"), value);
+ gdb_printf (file, _("Architecture debugging is %s.\n"), value);
}
static const char *
@@ -1201,7 +1202,7 @@ struct gdbarch_tdep *
gdbarch_tdep (struct gdbarch *gdbarch)
{
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_tdep called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_tdep called\n");
return gdbarch->tdep;
}
@@ -1384,9 +1385,9 @@ gdbarch_register (enum bfd_architecture bfd_architecture,
}
/* log it */
if (gdbarch_debug)
- fprintf_unfiltered (gdb_stdlog, "register_gdbarch_init (%s, %s)\n",
- bfd_arch_info->printable_name,
- host_address_to_string (init));
+ gdb_printf (gdb_stdlog, "register_gdbarch_init (%s, %s)\n",
+ bfd_arch_info->printable_name,
+ host_address_to_string (init));
/* Append it */
(*curr) = XNEW (struct gdbarch_registration);
(*curr)->bfd_architecture = bfd_architecture;
@@ -1445,23 +1446,23 @@ gdbarch_find_by_info (struct gdbarch_info info)
if (gdbarch_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "gdbarch_find_by_info: info.bfd_arch_info %s\n",
- (info.bfd_arch_info != NULL
- ? info.bfd_arch_info->printable_name
- : "(null)"));
- fprintf_unfiltered (gdb_stdlog,
- "gdbarch_find_by_info: info.byte_order %d (%s)\n",
- info.byte_order,
- (info.byte_order == BFD_ENDIAN_BIG ? "big"
- : info.byte_order == BFD_ENDIAN_LITTLE ? "little"
- : "default"));
- fprintf_unfiltered (gdb_stdlog,
- "gdbarch_find_by_info: info.osabi %d (%s)\n",
- info.osabi, gdbarch_osabi_name (info.osabi));
- fprintf_unfiltered (gdb_stdlog,
- "gdbarch_find_by_info: info.abfd %s\n",
- host_address_to_string (info.abfd));
+ gdb_printf (gdb_stdlog,
+ "gdbarch_find_by_info: info.bfd_arch_info %s\n",
+ (info.bfd_arch_info != NULL
+ ? info.bfd_arch_info->printable_name
+ : "(null)"));
+ gdb_printf (gdb_stdlog,
+ "gdbarch_find_by_info: info.byte_order %d (%s)\n",
+ info.byte_order,
+ (info.byte_order == BFD_ENDIAN_BIG ? "big"
+ : info.byte_order == BFD_ENDIAN_LITTLE ? "little"
+ : "default"));
+ gdb_printf (gdb_stdlog,
+ "gdbarch_find_by_info: info.osabi %d (%s)\n",
+ info.osabi, gdbarch_osabi_name (info.osabi));
+ gdb_printf (gdb_stdlog,
+ "gdbarch_find_by_info: info.abfd %s\n",
+ host_address_to_string (info.abfd));
}
/* Find the tdep code that knows about this architecture. */
@@ -1473,8 +1474,8 @@ gdbarch_find_by_info (struct gdbarch_info info)
if (rego == NULL)
{
if (gdbarch_debug)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_find_by_info: "
- "No matching architecture\n");
+ gdb_printf (gdb_stdlog, "gdbarch_find_by_info: "
+ "No matching architecture\n");
return 0;
}
@@ -1486,8 +1487,8 @@ gdbarch_find_by_info (struct gdbarch_info info)
if (new_gdbarch == NULL)
{
if (gdbarch_debug)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_find_by_info: "
- "Target rejected architecture\n");
+ gdb_printf (gdb_stdlog, "gdbarch_find_by_info: "
+ "Target rejected architecture\n");
return NULL;
}
@@ -1499,10 +1500,10 @@ gdbarch_find_by_info (struct gdbarch_info info)
struct gdbarch_list **list;
struct gdbarch_list *self;
if (gdbarch_debug)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_find_by_info: "
- "Previous architecture %s (%s) selected\n",
- host_address_to_string (new_gdbarch),
- new_gdbarch->bfd_arch_info->printable_name);
+ gdb_printf (gdb_stdlog, "gdbarch_find_by_info: "
+ "Previous architecture %s (%s) selected\n",
+ host_address_to_string (new_gdbarch),
+ new_gdbarch->bfd_arch_info->printable_name);
/* Find the existing arch in the list. */
for (list = &rego->arches;
(*list) != NULL && (*list)->gdbarch != new_gdbarch;
@@ -1521,10 +1522,10 @@ gdbarch_find_by_info (struct gdbarch_info info)
/* It's a new architecture. */
if (gdbarch_debug)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_find_by_info: "
- "New architecture %s (%s) selected\n",
- host_address_to_string (new_gdbarch),
- new_gdbarch->bfd_arch_info->printable_name);
+ gdb_printf (gdb_stdlog, "gdbarch_find_by_info: "
+ "New architecture %s (%s) selected\n",
+ host_address_to_string (new_gdbarch),
+ new_gdbarch->bfd_arch_info->printable_name);
/* Insert the new architecture into the front of the architecture
list (keep the list sorted Most Recently Used). */
diff --git a/gdb/arch/aarch32.c b/gdb/arch/aarch32.c
index 0c544d381f1..4d6ffb44a15 100644
--- a/gdb/arch/aarch32.c
+++ b/gdb/arch/aarch32.c
@@ -19,6 +19,7 @@
#include "aarch32.h"
#include "../features/arm/arm-core.c"
+#include "../features/arm/arm-tls.c"
#include "../features/arm/arm-vfpv3.c"
/* See aarch32.h. */
@@ -38,6 +39,7 @@ aarch32_create_target_description ()
/* Create a vfpv3 feature, then a blank NEON feature. */
regnum = create_feature_arm_arm_vfpv3 (tdesc.get (), regnum);
tdesc_create_feature (tdesc.get (), "org.gnu.gdb.arm.neon");
+ regnum = create_feature_arm_arm_tls (tdesc.get (), regnum);
return tdesc.release ();
}
diff --git a/gdb/arch/aarch64.c b/gdb/arch/aarch64.c
index 485d667ccde..733a3fd6d2a 100644
--- a/gdb/arch/aarch64.c
+++ b/gdb/arch/aarch64.c
@@ -24,11 +24,13 @@
#include "../features/aarch64-sve.c"
#include "../features/aarch64-pauth.c"
#include "../features/aarch64-mte.c"
+#include "../features/aarch64-tls.c"
/* See arch/aarch64.h. */
target_desc *
-aarch64_create_target_description (uint64_t vq, bool pauth_p, bool mte_p)
+aarch64_create_target_description (uint64_t vq, bool pauth_p, bool mte_p,
+ bool tls_p)
{
target_desc_up tdesc = allocate_target_description ();
@@ -52,5 +54,8 @@ aarch64_create_target_description (uint64_t vq, bool pauth_p, bool mte_p)
if (mte_p)
regnum = create_feature_aarch64_mte (tdesc.get (), regnum);
+ if (tls_p)
+ regnum = create_feature_aarch64_tls (tdesc.get (), regnum);
+
return tdesc.release ();
}
diff --git a/gdb/arch/aarch64.h b/gdb/arch/aarch64.h
index e416e346e9a..8496a0341f7 100644
--- a/gdb/arch/aarch64.h
+++ b/gdb/arch/aarch64.h
@@ -29,6 +29,7 @@ struct aarch64_features
bool sve = false;
bool pauth = false;
bool mte = false;
+ bool tls = false;
};
/* Create the aarch64 target description. A non zero VQ value indicates both
@@ -36,10 +37,12 @@ struct aarch64_features
an SVE Z register. HAS_PAUTH_P indicates the presence of the PAUTH
feature.
- MTE_P indicates the presence of the Memory Tagging Extension feature. */
+ MTE_P indicates the presence of the Memory Tagging Extension feature.
+
+ TLS_P indicates the presence of the Thread Local Storage feature. */
target_desc *aarch64_create_target_description (uint64_t vq, bool has_pauth_p,
- bool mte_p);
+ bool mte_p, bool tls_p);
/* Register numbers of various important registers.
Note that on SVE, the Z registers reuse the V register numbers and the V
@@ -91,6 +94,7 @@ enum aarch64_regnum
#define AARCH64_NUM_REGS AARCH64_FPCR_REGNUM + 1
#define AARCH64_SVE_NUM_REGS AARCH64_SVE_VG_REGNUM + 1
+#define AARCH64_TLS_REGS_SIZE (8)
/* There are a number of ways of expressing the current SVE vector size:
diff --git a/gdb/arch/amd64.c b/gdb/arch/amd64.c
index 20716524e62..559f678d356 100644
--- a/gdb/arch/amd64.c
+++ b/gdb/arch/amd64.c
@@ -25,9 +25,9 @@
#include "../features/i386/64bit-core.c"
#include "../features/i386/64bit-linux.c"
#include "../features/i386/64bit-mpx.c"
-#include "../features/i386/64bit-pkeys.c"
#include "../features/i386/64bit-segments.c"
#include "../features/i386/64bit-sse.c"
+#include "../features/i386/pkeys.c"
#include "../features/i386/x32-core.c"
@@ -72,8 +72,8 @@ amd64_create_target_description (uint64_t xcr0, bool is_x32, bool is_linux,
if (xcr0 & X86_XSTATE_AVX512)
regnum = create_feature_i386_64bit_avx512 (tdesc.get (), regnum);
- if ((xcr0 & X86_XSTATE_PKRU) && !is_x32)
- regnum = create_feature_i386_64bit_pkeys (tdesc.get (), regnum);
+ if (xcr0 & X86_XSTATE_PKRU)
+ regnum = create_feature_i386_pkeys (tdesc.get (), regnum);
return tdesc.release ();
}
diff --git a/gdb/arch/arm.c b/gdb/arch/arm.c
index 126e46a950a..14f0a7a7f6c 100644
--- a/gdb/arch/arm.c
+++ b/gdb/arch/arm.c
@@ -22,12 +22,14 @@
#include "arm.h"
#include "../features/arm/arm-core.c"
+#include "../features/arm/arm-tls.c"
#include "../features/arm/arm-vfpv2.c"
#include "../features/arm/arm-vfpv3.c"
#include "../features/arm/xscale-iwmmxt.c"
#include "../features/arm/arm-m-profile.c"
#include "../features/arm/arm-m-profile-with-fpa.c"
#include "../features/arm/arm-m-profile-mve.c"
+#include "../features/arm/arm-m-system.c"
/* See arm.h. */
@@ -373,7 +375,7 @@ shifted_reg_val (struct regcache *regcache, unsigned long inst,
/* See arch/arm.h. */
target_desc *
-arm_create_target_description (arm_fp_type fp_type)
+arm_create_target_description (arm_fp_type fp_type, bool tls)
{
target_desc_up tdesc = allocate_target_description ();
@@ -409,6 +411,9 @@ arm_create_target_description (arm_fp_type fp_type)
error (_("Invalid Arm FP type: %d"), fp_type);
}
+ if (tls)
+ regnum = create_feature_arm_arm_tls (tdesc.get (), regnum);
+
return tdesc.release ();
}
@@ -446,6 +451,11 @@ arm_create_mprofile_target_description (arm_m_profile_type m_type)
regnum = create_feature_arm_arm_m_profile_mve (tdesc, regnum);
break;
+ case ARM_M_TYPE_SYSTEM:
+ regnum = create_feature_arm_arm_m_profile (tdesc, regnum);
+ regnum = create_feature_arm_arm_m_system (tdesc, regnum);
+ break;
+
default:
error (_("Invalid Arm M type: %d"), m_type);
}
diff --git a/gdb/arch/arm.h b/gdb/arch/arm.h
index f75470e7572..4ad329f6f1f 100644
--- a/gdb/arch/arm.h
+++ b/gdb/arch/arm.h
@@ -21,6 +21,19 @@
#include "gdbsupport/tdesc.h"
+/* Prologue helper macros for ARMv8.1-m PACBTI. */
+#define IS_PAC(instruction) (instruction == 0xf3af801d)
+#define IS_PACBTI(instruction) (instruction == 0xf3af800d)
+#define IS_BTI(instruction) (instruction == 0xf3af800f)
+#define IS_PACG(instruction) ((instruction & 0xfff0f0f0) == 0xfb60f000)
+#define IS_AUT(instruction) (instruction == 0xf3af802d)
+#define IS_AUTG(instruction) ((instruction & 0xfff00ff0) == 0xfb500f00)
+
+/* DWARF register numbers according to the AADWARF32 document. */
+enum arm_dwarf_regnum {
+ ARM_DWARF_RA_AUTH_CODE = 143
+};
+
/* Register numbers of various important registers. */
enum gdb_regnum {
@@ -92,6 +105,7 @@ enum arm_m_profile_type {
ARM_M_TYPE_VFP_D16,
ARM_M_TYPE_WITH_FPA,
ARM_M_TYPE_MVE,
+ ARM_M_TYPE_SYSTEM,
ARM_M_TYPE_INVALID
};
@@ -193,7 +207,7 @@ unsigned long shifted_reg_val (struct regcache *regcache,
/* Create an Arm target description with the given FP hardware type. */
-target_desc *arm_create_target_description (arm_fp_type fp_type);
+target_desc *arm_create_target_description (arm_fp_type fp_type, bool tls);
/* Create an Arm M-profile target description with the given hardware type. */
diff --git a/gdb/arch/i386.c b/gdb/arch/i386.c
index 6241053783b..f5b33a800ad 100644
--- a/gdb/arch/i386.c
+++ b/gdb/arch/i386.c
@@ -27,8 +27,8 @@
#include "../features/i386/32bit-avx.c"
#include "../features/i386/32bit-avx512.c"
#include "../features/i386/32bit-mpx.c"
-#include "../features/i386/32bit-pkeys.c"
#include "../features/i386/32bit-segments.c"
+#include "../features/i386/pkeys.c"
/* Create i386 target descriptions according to XCR0. */
@@ -67,7 +67,7 @@ i386_create_target_description (uint64_t xcr0, bool is_linux, bool segments)
regnum = create_feature_i386_32bit_avx512 (tdesc.get (), regnum);
if (xcr0 & X86_XSTATE_PKRU)
- regnum = create_feature_i386_32bit_pkeys (tdesc.get (), regnum);
+ regnum = create_feature_i386_pkeys (tdesc.get (), regnum);
return tdesc.release ();
}
diff --git a/gdb/arch/loongarch.c b/gdb/arch/loongarch.c
new file mode 100644
index 00000000000..934f6e489c5
--- /dev/null
+++ b/gdb/arch/loongarch.c
@@ -0,0 +1,88 @@
+/* Copyright (C) 2022 Free Software Foundation, Inc.
+
+ This file is part of GDB.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#include "gdbsupport/common-defs.h"
+#include "loongarch.h"
+#include <stdlib.h>
+#include <unordered_map>
+
+/* Target description features. */
+
+#include "../features/loongarch/base32.c"
+#include "../features/loongarch/base64.c"
+
+static target_desc_up
+loongarch_create_target_description (const struct loongarch_gdbarch_features features)
+{
+ /* Now we should create a new target description. */
+ target_desc_up tdesc = allocate_target_description ();
+
+ std::string arch_name = "loongarch";
+
+ if (features.xlen == 4)
+ arch_name.append ("32");
+ else if (features.xlen == 8)
+ arch_name.append ("64");
+
+ set_tdesc_architecture (tdesc.get (), arch_name.c_str ());
+
+ long regnum = 0;
+
+ /* For now we only support creating 32-bit or 64-bit x-registers. */
+ if (features.xlen == 4)
+ regnum = create_feature_loongarch_base32 (tdesc.get (), regnum);
+ else if (features.xlen == 8)
+ regnum = create_feature_loongarch_base64 (tdesc.get (), regnum);
+
+ return tdesc;
+}
+
+/* Wrapper used by std::unordered_map to generate hash for feature set. */
+struct loongarch_gdbarch_features_hasher
+{
+ std::size_t
+ operator() (const loongarch_gdbarch_features &features) const noexcept
+ {
+ return features.hash ();
+ }
+};
+
+/* Cache of previously seen target descriptions, indexed by the feature set
+ that created them. */
+static std::unordered_map<loongarch_gdbarch_features,
+ const target_desc_up,
+ loongarch_gdbarch_features_hasher> loongarch_tdesc_cache;
+
+const target_desc *
+loongarch_lookup_target_description (const struct loongarch_gdbarch_features features)
+{
+ /* Lookup in the cache. If we find it then return the pointer out of
+ the target_desc_up (which is a unique_ptr). This is safe as the
+ loongarch_tdesc_cache will exist until GDB exits. */
+ const auto it = loongarch_tdesc_cache.find (features);
+ if (it != loongarch_tdesc_cache.end ())
+ return it->second.get ();
+
+ target_desc_up tdesc (loongarch_create_target_description (features));
+
+ /* Add to the cache, and return a pointer borrowed from the
+ target_desc_up. This is safe as the cache (and the pointers
+ contained within it) are not deleted until GDB exits. */
+ target_desc *ptr = tdesc.get ();
+ loongarch_tdesc_cache.emplace (features, std::move (tdesc));
+ return ptr;
+}
diff --git a/gdb/arch/loongarch.h b/gdb/arch/loongarch.h
new file mode 100644
index 00000000000..9e10df967d1
--- /dev/null
+++ b/gdb/arch/loongarch.h
@@ -0,0 +1,73 @@
+/* Common target-dependent functionality for LoongArch
+
+ Copyright (C) 2022 Free Software Foundation, Inc.
+
+ This file is part of GDB.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#ifndef ARCH_LOONGARCH_H
+#define ARCH_LOONGARCH_H
+
+#include "gdbsupport/tdesc.h"
+
+/* The set of LoongArch architectural features that we track that impact how
+ we configure the actual gdbarch instance. We hold one of these in the
+ gdbarch_tdep structure, and use it to distinguish between different
+ LoongArch gdbarch instances.
+
+ The information in here ideally comes from the target description,
+ however, if the target doesn't provide a target description then we will
+ create a default target description by first populating one of these
+ based on what we know about the binary being executed, and using that to
+ drive default target description creation. */
+
+struct loongarch_gdbarch_features
+{
+ /* The size of the x-registers in bytes. This is either 4 (loongarch32)
+ or 8 (loongarch64). No other value is valid. Initialise to the invalid
+ 0 value so we can spot if one of these is used uninitialised. */
+ int xlen = 0;
+
+ /* Equality operator. */
+ bool operator== (const struct loongarch_gdbarch_features &rhs) const
+ {
+ return (xlen == rhs.xlen);
+ }
+
+ /* Inequality operator. */
+ bool operator!= (const struct loongarch_gdbarch_features &rhs) const
+ {
+ return !((*this) == rhs);
+ }
+
+ /* Used by std::unordered_map to hash feature sets. */
+ std::size_t hash () const noexcept
+ {
+ std::size_t val = (xlen & 0x1f) << 5;
+ return val;
+ }
+};
+
+/* Lookup an already existing target description matching FEATURES, or
+ create a new target description if this is the first time we have seen
+ FEATURES. For the same FEATURES the same target_desc is always
+ returned. This is important when trying to lookup gdbarch objects as
+ GDBARCH_LIST_LOOKUP_BY_INFO performs a pointer comparison on target
+ descriptions to find candidate gdbarch objects. */
+
+const target_desc *loongarch_lookup_target_description
+ (const struct loongarch_gdbarch_features features);
+
+#endif /* ARCH_LOONGARCH_H */
diff --git a/gdb/arm-fbsd-nat.c b/gdb/arm-fbsd-nat.c
index 3106d73cc3a..a306e1e2ee0 100644
--- a/gdb/arm-fbsd-nat.c
+++ b/gdb/arm-fbsd-nat.c
@@ -18,13 +18,17 @@
along with this program. If not, see <http://www.gnu.org/licenses/>. */
#include "defs.h"
+#include "inferior.h"
#include "target.h"
+#include "elf/common.h"
+
#include <sys/types.h>
#include <sys/ptrace.h>
#include <machine/reg.h>
#include "fbsd-nat.h"
+#include "arm-tdep.h"
#include "arm-fbsd-tdep.h"
#include "inf-ptrace.h"
@@ -49,6 +53,27 @@ arm_fbsd_nat_target::fetch_registers (struct regcache *regcache, int regnum)
fetch_register_set<struct vfpreg> (regcache, regnum, PT_GETVFPREGS,
&arm_fbsd_vfpregset);
#endif
+#ifdef PT_GETREGSET
+ gdbarch *gdbarch = regcache->arch ();
+ arm_gdbarch_tdep *tdep = (arm_gdbarch_tdep *) gdbarch_tdep (gdbarch);
+
+ if (tdep->tls_regnum > 0)
+ {
+ const struct regcache_map_entry arm_fbsd_tlsregmap[] =
+ {
+ { 1, tdep->tls_regnum, 4 },
+ { 0 }
+ };
+
+ const struct regset arm_fbsd_tlsregset =
+ {
+ arm_fbsd_tlsregmap,
+ regcache_supply_regset, regcache_collect_regset
+ };
+
+ fetch_regset<uint32_t> (regcache, regnum, NT_ARM_TLS, &arm_fbsd_tlsregset);
+ }
+#endif
}
/* Store register REGNUM back into the inferior. If REGNUM is -1, do
@@ -63,6 +88,27 @@ arm_fbsd_nat_target::store_registers (struct regcache *regcache, int regnum)
store_register_set<struct vfpreg> (regcache, regnum, PT_GETVFPREGS,
PT_SETVFPREGS, &arm_fbsd_vfpregset);
#endif
+#ifdef PT_GETREGSET
+ gdbarch *gdbarch = regcache->arch ();
+ arm_gdbarch_tdep *tdep = (arm_gdbarch_tdep *) gdbarch_tdep (gdbarch);
+
+ if (tdep->tls_regnum > 0)
+ {
+ const struct regcache_map_entry arm_fbsd_tlsregmap[] =
+ {
+ { 1, tdep->tls_regnum, 4 },
+ { 0 }
+ };
+
+ const struct regset arm_fbsd_tlsregset =
+ {
+ arm_fbsd_tlsregmap,
+ regcache_supply_regset, regcache_collect_regset
+ };
+
+ store_regset<uint32_t> (regcache, regnum, NT_ARM_TLS, &arm_fbsd_tlsregset);
+ }
+#endif
}
/* Implement the to_read_description method. */
@@ -71,8 +117,12 @@ const struct target_desc *
arm_fbsd_nat_target::read_description ()
{
const struct target_desc *desc;
+ bool tls = false;
- desc = arm_fbsd_read_description_auxv (this);
+#ifdef PT_GETREGSET
+ tls = have_regset (inferior_ptid, NT_ARM_TLS) != 0;
+#endif
+ desc = arm_fbsd_read_description_auxv (this, tls);
if (desc == NULL)
desc = this->beneath ()->read_description ();
return desc;
diff --git a/gdb/arm-fbsd-tdep.c b/gdb/arm-fbsd-tdep.c
index bf337b13f98..483820c1092 100644
--- a/gdb/arm-fbsd-tdep.c
+++ b/gdb/arm-fbsd-tdep.c
@@ -27,6 +27,7 @@
#include "auxv.h"
#include "fbsd-tdep.h"
#include "gdbcore.h"
+#include "inferior.h"
#include "osabi.h"
#include "solib-svr4.h"
#include "trad-frame.h"
@@ -163,6 +164,24 @@ arm_fbsd_iterate_over_regset_sections (struct gdbarch *gdbarch,
cb (".reg", ARM_FBSD_SIZEOF_GREGSET, ARM_FBSD_SIZEOF_GREGSET,
&arm_fbsd_gregset, NULL, cb_data);
+ if (tdep->tls_regnum > 0)
+ {
+ const struct regcache_map_entry arm_fbsd_tlsregmap[] =
+ {
+ { 1, tdep->tls_regnum, 4 },
+ { 0 }
+ };
+
+ const struct regset arm_fbsd_tlsregset =
+ {
+ arm_fbsd_tlsregmap,
+ regcache_supply_regset, regcache_collect_regset
+ };
+
+ cb (".reg-aarch-tls", ARM_FBSD_SIZEOF_TLSREGSET, ARM_FBSD_SIZEOF_TLSREGSET,
+ &arm_fbsd_tlsregset, NULL, cb_data);
+ }
+
/* While FreeBSD/arm cores do contain a NT_FPREGSET / ".reg2"
register set, it is not populated with register values by the
kernel but just contains all zeroes. */
@@ -175,12 +194,12 @@ arm_fbsd_iterate_over_regset_sections (struct gdbarch *gdbarch,
vector. */
const struct target_desc *
-arm_fbsd_read_description_auxv (struct target_ops *target)
+arm_fbsd_read_description_auxv (struct target_ops *target, bool tls)
{
CORE_ADDR arm_hwcap = 0;
if (target_auxv_search (target, AT_FREEBSD_HWCAP, &arm_hwcap) != 1)
- return nullptr;
+ return arm_read_description (ARM_FP_TYPE_NONE, tls);
if (arm_hwcap & HWCAP_VFP)
{
@@ -188,12 +207,12 @@ arm_fbsd_read_description_auxv (struct target_ops *target)
return aarch32_read_description ();
else if ((arm_hwcap & (HWCAP_VFPv3 | HWCAP_VFPD32))
== (HWCAP_VFPv3 | HWCAP_VFPD32))
- return arm_read_description (ARM_FP_TYPE_VFPV3);
+ return arm_read_description (ARM_FP_TYPE_VFPV3, tls);
else
- return arm_read_description (ARM_FP_TYPE_VFPV2);
+ return arm_read_description (ARM_FP_TYPE_VFPV2, tls);
}
- return nullptr;
+ return arm_read_description (ARM_FP_TYPE_NONE, tls);
}
/* Implement the "core_read_description" gdbarch method. */
@@ -203,7 +222,33 @@ arm_fbsd_core_read_description (struct gdbarch *gdbarch,
struct target_ops *target,
bfd *abfd)
{
- return arm_fbsd_read_description_auxv (target);
+ asection *tls = bfd_get_section_by_name (abfd, ".reg-aarch-tls");
+
+ return arm_fbsd_read_description_auxv (target, tls != nullptr);
+}
+
+/* Implement the get_thread_local_address gdbarch method. */
+
+static CORE_ADDR
+arm_fbsd_get_thread_local_address (struct gdbarch *gdbarch, ptid_t ptid,
+ CORE_ADDR lm_addr, CORE_ADDR offset)
+{
+ arm_gdbarch_tdep *tdep = (arm_gdbarch_tdep *) gdbarch_tdep (gdbarch);
+ struct regcache *regcache;
+
+ regcache = get_thread_arch_regcache (current_inferior ()->process_target (),
+ ptid, gdbarch);
+
+ target_fetch_registers (regcache, tdep->tls_regnum);
+
+ ULONGEST tpidruro;
+ if (regcache->cooked_read (tdep->tls_regnum, &tpidruro) != REG_VALID)
+ error (_("Unable to fetch %%tpidruro"));
+
+ /* %tpidruro points to the TCB whose first member is the dtv
+ pointer. */
+ CORE_ADDR dtv_addr = tpidruro;
+ return fbsd_get_thread_local_address (gdbarch, dtv_addr, lm_addr, offset);
}
/* Implement the 'init_osabi' method of struct gdb_osabi_handler. */
@@ -231,6 +276,14 @@ arm_fbsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
(gdbarch, arm_fbsd_iterate_over_regset_sections);
set_gdbarch_core_read_description (gdbarch, arm_fbsd_core_read_description);
+ if (tdep->tls_regnum > 0)
+ {
+ set_gdbarch_fetch_tls_load_module_address (gdbarch,
+ svr4_fetch_objfile_link_map);
+ set_gdbarch_get_thread_local_address (gdbarch,
+ arm_fbsd_get_thread_local_address);
+ }
+
/* Single stepping. */
set_gdbarch_software_single_step (gdbarch, arm_software_single_step);
}
diff --git a/gdb/arm-fbsd-tdep.h b/gdb/arm-fbsd-tdep.h
index 633dafad75d..193eb76df3c 100644
--- a/gdb/arm-fbsd-tdep.h
+++ b/gdb/arm-fbsd-tdep.h
@@ -26,6 +26,9 @@
PC, and CPSR registers. */
#define ARM_FBSD_SIZEOF_GREGSET (17 * 4)
+/* The TLS regset consists of a single register. */
+#define ARM_FBSD_SIZEOF_TLSREGSET (4)
+
/* The VFP regset consists of 32 D registers plus FPSCR, and the whole
structure is padded to 64-bit alignment. */
#define ARM_FBSD_SIZEOF_VFPREGSET (33 * 8)
@@ -40,6 +43,6 @@ extern const struct regset arm_fbsd_vfpregset;
#define HWCAP_VFPD32 0x00080000
extern const struct target_desc *
-arm_fbsd_read_description_auxv (struct target_ops *target);
+arm_fbsd_read_description_auxv (struct target_ops *target, bool tls);
#endif /* ARM_FBSD_TDEP_H */
diff --git a/gdb/arm-linux-nat.c b/gdb/arm-linux-nat.c
index f0f09acf2f9..2abaf5a675d 100644
--- a/gdb/arm-linux-nat.c
+++ b/gdb/arm-linux-nat.c
@@ -550,7 +550,7 @@ arm_linux_nat_target::read_description ()
}
if (arm_hwcap & HWCAP_IWMMXT)
- return arm_read_description (ARM_FP_TYPE_IWMMXT);
+ return arm_read_description (ARM_FP_TYPE_IWMMXT, false);
if (arm_hwcap & HWCAP_VFP)
{
@@ -567,9 +567,9 @@ arm_linux_nat_target::read_description ()
if (arm_hwcap & HWCAP_NEON)
return aarch32_read_description ();
else if ((arm_hwcap & (HWCAP_VFPv3 | HWCAP_VFPv3D16)) == HWCAP_VFPv3)
- return arm_read_description (ARM_FP_TYPE_VFPV3);
+ return arm_read_description (ARM_FP_TYPE_VFPV3, false);
- return arm_read_description (ARM_FP_TYPE_VFPV2);
+ return arm_read_description (ARM_FP_TYPE_VFPV2, false);
}
return this->beneath ()->read_description ();
diff --git a/gdb/arm-linux-tdep.c b/gdb/arm-linux-tdep.c
index 6aac016afb9..f299e9665d5 100644
--- a/gdb/arm-linux-tdep.c
+++ b/gdb/arm-linux-tdep.c
@@ -741,9 +741,9 @@ arm_linux_core_read_description (struct gdbarch *gdbarch,
if (arm_hwcap & HWCAP_NEON)
return aarch32_read_description ();
else if ((arm_hwcap & (HWCAP_VFPv3 | HWCAP_VFPv3D16)) == HWCAP_VFPv3)
- return arm_read_description (ARM_FP_TYPE_VFPV3);
+ return arm_read_description (ARM_FP_TYPE_VFPV3, false);
- return arm_read_description (ARM_FP_TYPE_VFPV2);
+ return arm_read_description (ARM_FP_TYPE_VFPV2, false);
}
return nullptr;
@@ -1650,10 +1650,10 @@ arm_linux_syscall_record (struct regcache *regcache, unsigned long svc_number)
if (syscall_gdb == gdb_sys_no_syscall)
{
- fprintf_unfiltered (gdb_stderr,
- _("Process record and replay target doesn't "
- "support syscall number %s\n"),
- plongest (svc_number));
+ gdb_printf (gdb_stderr,
+ _("Process record and replay target doesn't "
+ "support syscall number %s\n"),
+ plongest (svc_number));
return -1;
}
diff --git a/gdb/arm-netbsd-nat.c b/gdb/arm-netbsd-nat.c
index 591a0ab1d54..764bbe8cd3d 100644
--- a/gdb/arm-netbsd-nat.c
+++ b/gdb/arm-netbsd-nat.c
@@ -346,13 +346,13 @@ arm_netbsd_nat_target::read_description ()
if (sysctlbyname("machdep.fpu_present", &flag, &len, NULL, 0) != 0
|| !flag)
- return arm_read_description (ARM_FP_TYPE_NONE);
+ return arm_read_description (ARM_FP_TYPE_NONE, false);
len = sizeof(flag);
if (sysctlbyname("machdep.neon_present", &flag, &len, NULL, 0) == 0 && flag)
return aarch32_read_description ();
- return arm_read_description (ARM_FP_TYPE_VFPV3);
+ return arm_read_description (ARM_FP_TYPE_VFPV3, false);
}
void _initialize_arm_netbsd_nat ();
diff --git a/gdb/arm-tdep.c b/gdb/arm-tdep.c
index f6bd76a354d..49664093f00 100644
--- a/gdb/arm-tdep.c
+++ b/gdb/arm-tdep.c
@@ -38,6 +38,7 @@
#include "frame-base.h"
#include "trad-frame.h"
#include "objfiles.h"
+#include "dwarf2.h"
#include "dwarf2/frame.h"
#include "gdbtypes.h"
#include "prologue-value.h"
@@ -81,10 +82,10 @@ static bool arm_debug;
MSYMBOL_IS_SPECIAL Tests the "special" bit in a minimal symbol. */
#define MSYMBOL_SET_SPECIAL(msym) \
- MSYMBOL_TARGET_FLAG_1 (msym) = 1
+ (msym)->set_target_flag_1 (true)
#define MSYMBOL_IS_SPECIAL(msym) \
- MSYMBOL_TARGET_FLAG_1 (msym)
+ (msym)->target_flag_1 ()
struct arm_mapping_symbol
{
@@ -239,7 +240,7 @@ static const char **valid_disassembly_styles;
static const char *disassembly_style;
/* All possible arm target descriptors. */
-static struct target_desc *tdesc_arm_list[ARM_FP_TYPE_INVALID];
+static struct target_desc *tdesc_arm_list[ARM_FP_TYPE_INVALID][2];
static struct target_desc *tdesc_arm_mprofile_list[ARM_M_TYPE_INVALID];
/* This is used to keep the bfd arch_info in sync with the disassembly
@@ -275,7 +276,18 @@ struct arm_prologue_cache
/* The stack pointer at the time this frame was created; i.e. the
caller's stack pointer when this function was called. It is used
to identify this frame. */
- CORE_ADDR prev_sp;
+ CORE_ADDR sp;
+
+ /* Additional stack pointers used by M-profile with Security extension. */
+ /* Use msp_s / psp_s to hold the values of msp / psp when there is
+ no Security extension. */
+ CORE_ADDR msp_s;
+ CORE_ADDR msp_ns;
+ CORE_ADDR psp_s;
+ CORE_ADDR psp_ns;
+
+ /* Active stack pointer. */
+ int active_sp_regnum;
/* The frame base for this frame is just prev_sp - frame size.
FRAMESIZE is the distance from the frame pointer to the
@@ -286,10 +298,185 @@ struct arm_prologue_cache
/* The register used to hold the frame pointer for this frame. */
int framereg;
+ /* True if the return address is signed, false otherwise. */
+ gdb::optional<bool> ra_signed_state;
+
/* Saved register offsets. */
trad_frame_saved_reg *saved_regs;
+
+ arm_prologue_cache() = default;
};
+/* Initialize stack pointers, and flag the active one. */
+
+static inline void
+arm_cache_init_sp (int regnum, CORE_ADDR* member,
+ struct arm_prologue_cache *cache,
+ struct frame_info *frame)
+{
+ CORE_ADDR val = get_frame_register_unsigned (frame, regnum);
+ if (val == cache->sp)
+ cache->active_sp_regnum = regnum;
+
+ *member = val;
+}
+
+/* Initialize CACHE fields for which zero is not adequate (CACHE is
+ expected to have been ZALLOC'ed before calling this function). */
+
+static void
+arm_cache_init (struct arm_prologue_cache *cache, struct gdbarch *gdbarch)
+{
+ cache->active_sp_regnum = ARM_SP_REGNUM;
+
+ cache->saved_regs = trad_frame_alloc_saved_regs (gdbarch);
+}
+
+/* Similar to the previous function, but extracts GDBARCH from FRAME. */
+
+static void
+arm_cache_init (struct arm_prologue_cache *cache, struct frame_info *frame)
+{
+ struct gdbarch *gdbarch = get_frame_arch (frame);
+ arm_gdbarch_tdep *tdep = (arm_gdbarch_tdep *) gdbarch_tdep (gdbarch);
+
+ arm_cache_init (cache, gdbarch);
+
+ if (tdep->have_sec_ext)
+ {
+ arm_cache_init_sp (tdep->m_profile_msp_s_regnum, &cache->msp_s, cache, frame);
+ arm_cache_init_sp (tdep->m_profile_psp_s_regnum, &cache->psp_s, cache, frame);
+ arm_cache_init_sp (tdep->m_profile_msp_ns_regnum, &cache->msp_ns, cache, frame);
+ arm_cache_init_sp (tdep->m_profile_psp_ns_regnum, &cache->psp_ns, cache, frame);
+
+ /* Use MSP_S as default stack pointer. */
+ if (cache->active_sp_regnum == ARM_SP_REGNUM)
+ cache->active_sp_regnum = tdep->m_profile_msp_s_regnum;
+ }
+ else if (tdep->is_m)
+ {
+ arm_cache_init_sp (tdep->m_profile_msp_regnum, &cache->msp_s, cache, frame);
+ arm_cache_init_sp (tdep->m_profile_psp_regnum, &cache->psp_s, cache, frame);
+ }
+ else
+ arm_cache_init_sp (ARM_SP_REGNUM, &cache->msp_s, cache, frame);
+}
+
+/* Return the requested stack pointer value (in REGNUM), taking into
+ account whether we have a Security extension or an M-profile
+ CPU. */
+
+static CORE_ADDR
+arm_cache_get_sp_register (struct arm_prologue_cache *cache,
+ arm_gdbarch_tdep *tdep, int regnum)
+{
+ if (regnum == ARM_SP_REGNUM)
+ return cache->sp;
+
+ if (tdep->have_sec_ext)
+ {
+ if (regnum == tdep->m_profile_msp_s_regnum)
+ return cache->msp_s;
+ if (regnum == tdep->m_profile_msp_ns_regnum)
+ return cache->msp_ns;
+ if (regnum == tdep->m_profile_psp_s_regnum)
+ return cache->psp_s;
+ if (regnum == tdep->m_profile_psp_ns_regnum)
+ return cache->psp_ns;
+ }
+ else if (tdep->is_m)
+ {
+ if (regnum == tdep->m_profile_msp_regnum)
+ return cache->msp_s;
+ if (regnum == tdep->m_profile_psp_regnum)
+ return cache->psp_s;
+ }
+
+ gdb_assert_not_reached ("Invalid SP selection");
+}
+
+/* Return the previous stack address, depending on which SP register
+ is active. */
+
+static CORE_ADDR
+arm_cache_get_prev_sp_value (struct arm_prologue_cache *cache, arm_gdbarch_tdep *tdep)
+{
+ CORE_ADDR val = arm_cache_get_sp_register (cache, tdep, cache->active_sp_regnum);
+ return val;
+}
+
+/* Set the active stack pointer to VAL. */
+
+static void
+arm_cache_set_active_sp_value (struct arm_prologue_cache *cache,
+ arm_gdbarch_tdep *tdep, CORE_ADDR val)
+{
+ if (cache->active_sp_regnum == ARM_SP_REGNUM)
+ {
+ cache->sp = val;
+ return;
+ }
+
+ if (tdep->have_sec_ext)
+ {
+ if (cache->active_sp_regnum == tdep->m_profile_msp_s_regnum)
+ cache->msp_s = val;
+ else if (cache->active_sp_regnum == tdep->m_profile_msp_ns_regnum)
+ cache->msp_ns = val;
+ else if (cache->active_sp_regnum == tdep->m_profile_psp_s_regnum)
+ cache->psp_s = val;
+ else if (cache->active_sp_regnum == tdep->m_profile_psp_ns_regnum)
+ cache->psp_ns = val;
+
+ return;
+ }
+ else if (tdep->is_m)
+ {
+ if (cache->active_sp_regnum == tdep->m_profile_msp_regnum)
+ cache->msp_s = val;
+ else if (cache->active_sp_regnum == tdep->m_profile_psp_regnum)
+ cache->psp_s = val;
+
+ return;
+ }
+
+ gdb_assert_not_reached ("Invalid SP selection");
+}
+
+/* Return true if REGNUM is one of the stack pointers. */
+
+static bool
+arm_cache_is_sp_register (struct arm_prologue_cache *cache,
+ arm_gdbarch_tdep *tdep, int regnum)
+{
+ if ((regnum == ARM_SP_REGNUM)
+ || (regnum == tdep->m_profile_msp_regnum)
+ || (regnum == tdep->m_profile_msp_s_regnum)
+ || (regnum == tdep->m_profile_msp_ns_regnum)
+ || (regnum == tdep->m_profile_psp_regnum)
+ || (regnum == tdep->m_profile_psp_s_regnum)
+ || (regnum == tdep->m_profile_psp_ns_regnum))
+ return true;
+ else
+ return false;
+}
+
+/* Set the active stack pointer to SP_REGNUM. */
+
+static void
+arm_cache_switch_prev_sp (struct arm_prologue_cache *cache,
+ arm_gdbarch_tdep *tdep, int sp_regnum)
+{
+ gdb_assert (sp_regnum != ARM_SP_REGNUM);
+ gdb_assert (arm_cache_is_sp_register (cache, tdep, sp_regnum));
+
+ if (tdep->have_sec_ext)
+ gdb_assert (sp_regnum != tdep->m_profile_msp_regnum
+ && sp_regnum != tdep->m_profile_psp_regnum);
+
+ cache->active_sp_regnum = sp_regnum;
+}
+
namespace {
/* Abstract class to read ARM instructions from memory. */
@@ -326,6 +513,7 @@ static CORE_ADDR arm_analyze_prologue
/* See arm-tdep.h. */
bool arm_apcs_32 = true;
+bool arm_unwind_secure_frames = true;
/* Return the bit mask in ARM_PS_REGNUM that indicates Thumb mode. */
@@ -542,28 +730,43 @@ arm_pc_is_thumb (struct gdbarch *gdbarch, CORE_ADDR memaddr)
0xFFFFFFBC Return to Thread mode using the process stack. */
static int
-arm_m_addr_is_magic (CORE_ADDR addr)
-{
- switch (addr)
- {
- /* Values from ARMv8-M Architecture Technical Reference. */
- case 0xffffffb0:
- case 0xffffffb8:
- case 0xffffffbc:
- /* Values from Tables in B1.5.8 the EXC_RETURN definitions of
- the exception return behavior. */
- case 0xffffffe1:
- case 0xffffffe9:
- case 0xffffffed:
- case 0xfffffff1:
- case 0xfffffff9:
- case 0xfffffffd:
- /* Address is magic. */
- return 1;
+arm_m_addr_is_magic (struct gdbarch *gdbarch, CORE_ADDR addr)
+{
+ arm_gdbarch_tdep *tdep = (arm_gdbarch_tdep *) gdbarch_tdep (gdbarch);
+ if (tdep->have_sec_ext)
+ {
+ switch ((addr & 0xff000000))
+ {
+ case 0xff000000: /* EXC_RETURN pattern. */
+ case 0xfe000000: /* FNC_RETURN pattern. */
+ return 1;
+ default:
+ return 0;
+ }
+ }
+ else
+ {
+ switch (addr)
+ {
+ /* Values from ARMv8-M Architecture Technical Reference. */
+ case 0xffffffb0:
+ case 0xffffffb8:
+ case 0xffffffbc:
+ /* Values from Tables in B1.5.8 the EXC_RETURN definitions of
+ the exception return behavior. */
+ case 0xffffffe1:
+ case 0xffffffe9:
+ case 0xffffffed:
+ case 0xfffffff1:
+ case 0xfffffff9:
+ case 0xfffffffd:
+ /* Address is magic. */
+ return 1;
- default:
- /* Address is not magic. */
- return 0;
+ default:
+ /* Address is not magic. */
+ return 0;
+ }
}
}
@@ -575,7 +778,7 @@ arm_addr_bits_remove (struct gdbarch *gdbarch, CORE_ADDR val)
/* On M-profile devices, do not strip the low bit from EXC_RETURN
(the magic exception return address). */
- if (tdep->is_m && arm_m_addr_is_magic (val))
+ if (tdep->is_m && arm_m_addr_is_magic (gdbarch, val))
return val;
if (arm_apcs_32)
@@ -596,7 +799,7 @@ skip_prologue_function (struct gdbarch *gdbarch, CORE_ADDR pc, int is_thumb)
msym = lookup_minimal_symbol_by_pc (pc);
if (msym.minsym != NULL
- && BMSYMBOL_VALUE_ADDRESS (msym) == pc
+ && msym.value_address () == pc
&& msym.minsym->linkage_name () != NULL)
{
const char *name = msym.minsym->linkage_name ();
@@ -713,6 +916,7 @@ thumb_analyze_prologue (struct gdbarch *gdbarch,
while (start < limit)
{
unsigned short insn;
+ gdb::optional<bool> ra_signed_state;
insn = read_code_unsigned_integer (start, 2, byte_order_for_code);
@@ -847,6 +1051,7 @@ thumb_analyze_prologue (struct gdbarch *gdbarch,
inst2 = read_code_unsigned_integer (start + 2, 2,
byte_order_for_code);
+ uint32_t whole_insn = (insn << 16) | inst2;
if ((insn & 0xf800) == 0xf000 && (inst2 & 0xe800) == 0xe800)
{
@@ -896,6 +1101,35 @@ thumb_analyze_prologue (struct gdbarch *gdbarch,
regs[bits (insn, 0, 3)] = addr;
}
+ /* vstmdb Rn{!}, { D-registers } (aka vpush). */
+ else if ((insn & 0xff20) == 0xed20
+ && (inst2 & 0x0f00) == 0x0b00
+ && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
+ {
+ /* Address SP points to. */
+ pv_t addr = regs[bits (insn, 0, 3)];
+
+ /* Number of registers saved. */
+ unsigned int number = bits (inst2, 0, 7) >> 1;
+
+ /* First register to save. */
+ int vd = bits (inst2, 12, 15) | (bits (insn, 6, 6) << 4);
+
+ if (stack.store_would_trash (addr))
+ break;
+
+ /* Calculate offsets of saved registers. */
+ for (; number > 0; number--)
+ {
+ addr = pv_add_constant (addr, -8);
+ stack.store (addr, 8, pv_register (ARM_D0_REGNUM
+ + vd + number, 0));
+ }
+
+ /* Writeback SP to account for the saved registers. */
+ regs[bits (insn, 0, 3)] = addr;
+ }
+
else if ((insn & 0xff50) == 0xe940 /* strd Rt, Rt2,
[Rn, #+/-imm]{!} */
&& pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
@@ -1100,7 +1334,37 @@ thumb_analyze_prologue (struct gdbarch *gdbarch,
constant = read_memory_unsigned_integer (loc + 4, 4, byte_order);
regs[bits (inst2, 8, 11)] = pv_constant (constant);
}
-
+ /* Start of ARMv8.1-m PACBTI extension instructions. */
+ else if (IS_PAC (whole_insn))
+ {
+ /* LR and SP are input registers. PAC is in R12. LR is
+ signed from this point onwards. NOP space. */
+ ra_signed_state = true;
+ }
+ else if (IS_PACBTI (whole_insn))
+ {
+ /* LR and SP are input registers. PAC is in R12 and PC is a
+ valid BTI landing pad. LR is signed from this point onwards.
+ NOP space. */
+ ra_signed_state = true;
+ }
+ else if (IS_BTI (whole_insn))
+ {
+ /* Valid BTI landing pad. NOP space. */
+ }
+ else if (IS_PACG (whole_insn))
+ {
+ /* Sign Rn using Rm and store the PAC in Rd. Rd is signed from
+ this point onwards. */
+ ra_signed_state = true;
+ }
+ else if (IS_AUT (whole_insn) || IS_AUTG (whole_insn))
+ {
+ /* These instructions appear close to the epilogue, when signed
+ pointers are getting authenticated. */
+ ra_signed_state = false;
+ }
+ /* End of ARMv8.1-m PACBTI extension instructions */
else if (thumb2_instruction_changes_pc (insn, inst2))
{
/* Don't scan past anything that might change control flow. */
@@ -1113,6 +1377,21 @@ thumb_analyze_prologue (struct gdbarch *gdbarch,
unrecognized_pc = start;
}
+ arm_gdbarch_tdep *tdep
+ = (arm_gdbarch_tdep *) gdbarch_tdep (gdbarch);
+
+ /* Make sure we are dealing with a target that supports ARMv8.1-m
+ PACBTI. */
+ if (cache != nullptr && tdep->have_pacbti
+ && ra_signed_state.has_value ())
+ {
+ arm_debug_printf ("Found pacbti instruction at %s",
+ paddress (gdbarch, start));
+ arm_debug_printf ("RA is %s",
+ *ra_signed_state? "signed" : "not signed");
+ cache->ra_signed_state = ra_signed_state;
+ }
+
start += 2;
}
else if (thumb_instruction_changes_pc (insn))
@@ -1394,9 +1673,9 @@ arm_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
missing (e.g. for -gstabs), assuming the GNU tools. */
if (post_prologue_pc
&& (cust == NULL
- || COMPUNIT_PRODUCER (cust) == NULL
- || startswith (COMPUNIT_PRODUCER (cust), "GNU ")
- || producer_is_llvm (COMPUNIT_PRODUCER (cust))))
+ || cust->producer () == NULL
+ || startswith (cust->producer (), "GNU ")
+ || producer_is_llvm (cust->producer ())))
return post_prologue_pc;
if (post_prologue_pc != 0)
@@ -1901,7 +2180,7 @@ arm_make_prologue_cache (struct frame_info *this_frame)
CORE_ADDR unwound_fp;
cache = FRAME_OBSTACK_ZALLOC (struct arm_prologue_cache);
- cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
+ arm_cache_init (cache, this_frame);
arm_scan_prologue (this_frame, cache);
@@ -1909,14 +2188,17 @@ arm_make_prologue_cache (struct frame_info *this_frame)
if (unwound_fp == 0)
return cache;
- cache->prev_sp = unwound_fp + cache->framesize;
+ arm_gdbarch_tdep *tdep =
+ (arm_gdbarch_tdep *) gdbarch_tdep (get_frame_arch (this_frame));
+
+ arm_cache_set_active_sp_value (cache, tdep, unwound_fp + cache->framesize);
/* Calculate actual addresses of saved registers using offsets
determined by arm_scan_prologue. */
for (reg = 0; reg < gdbarch_num_regs (get_frame_arch (this_frame)); reg++)
if (cache->saved_regs[reg].is_addr ())
cache->saved_regs[reg].set_addr (cache->saved_regs[reg].addr ()
- + cache->prev_sp);
+ + arm_cache_get_prev_sp_value (cache, tdep));
return cache;
}
@@ -1942,7 +2224,7 @@ arm_prologue_unwind_stop_reason (struct frame_info *this_frame,
return UNWIND_OUTERMOST;
/* If we've hit a wall, stop. */
- if (cache->prev_sp == 0)
+ if (arm_cache_get_prev_sp_value (cache, tdep) == 0)
return UNWIND_OUTERMOST;
return UNWIND_NO_REASON;
@@ -1964,6 +2246,9 @@ arm_prologue_this_id (struct frame_info *this_frame,
*this_cache = arm_make_prologue_cache (this_frame);
cache = (struct arm_prologue_cache *) *this_cache;
+ arm_gdbarch_tdep *tdep
+ = (arm_gdbarch_tdep *) gdbarch_tdep (get_frame_arch (this_frame));
+
/* Use function start address as part of the frame ID. If we cannot
identify the start address (due to missing symbol information),
fall back to just using the current PC. */
@@ -1972,7 +2257,7 @@ arm_prologue_this_id (struct frame_info *this_frame,
if (!func)
func = pc;
- id = frame_id_build (cache->prev_sp, func);
+ id = frame_id_build (arm_cache_get_prev_sp_value (cache, tdep), func);
*this_id = id;
}
@@ -1983,11 +2268,19 @@ arm_prologue_prev_register (struct frame_info *this_frame,
{
struct gdbarch *gdbarch = get_frame_arch (this_frame);
struct arm_prologue_cache *cache;
+ CORE_ADDR sp_value;
if (*this_cache == NULL)
*this_cache = arm_make_prologue_cache (this_frame);
cache = (struct arm_prologue_cache *) *this_cache;
+ arm_gdbarch_tdep *tdep = (arm_gdbarch_tdep *) gdbarch_tdep (gdbarch);
+
+ /* If this frame has signed the return address, mark it as so. */
+ if (tdep->have_pacbti && cache->ra_signed_state.has_value ()
+ && *cache->ra_signed_state)
+ set_frame_previous_pc_masked (this_frame);
+
/* If we are asked to unwind the PC, then we need to return the LR
instead. The prologue may save PC, but it will point into this
frame's prologue, not the next frame's resume location. Also
@@ -2006,7 +2299,16 @@ arm_prologue_prev_register (struct frame_info *this_frame,
identified by the next frame's stack pointer at the time of the call.
The value was already reconstructed into PREV_SP. */
if (prev_regnum == ARM_SP_REGNUM)
- return frame_unwind_got_constant (this_frame, prev_regnum, cache->prev_sp);
+ return frame_unwind_got_constant (this_frame, prev_regnum,
+ arm_cache_get_prev_sp_value (cache, tdep));
+
+ /* The value might be one of the alternative SP, if so, use the
+ value already constructed. */
+ if (arm_cache_is_sp_register (cache, tdep, prev_regnum))
+ {
+ sp_value = arm_cache_get_sp_register (cache, tdep, prev_regnum);
+ return frame_unwind_got_constant (this_frame, prev_regnum, sp_value);
+ }
/* The CPSR may have been changed by the call instruction and by the
called function. The only bit we can reconstruct is the T bit,
@@ -2367,7 +2669,7 @@ arm_exidx_fill_cache (struct frame_info *this_frame, gdb_byte *entry)
struct arm_prologue_cache *cache;
cache = FRAME_OBSTACK_ZALLOC (struct arm_prologue_cache);
- cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
+ arm_cache_init (cache, this_frame);
for (;;)
{
@@ -2644,7 +2946,9 @@ arm_exidx_fill_cache (struct frame_info *this_frame, gdb_byte *entry)
= vsp - get_frame_register_unsigned (this_frame, cache->framereg);
/* We already got the previous SP. */
- cache->prev_sp = vsp;
+ arm_gdbarch_tdep *tdep
+ = (arm_gdbarch_tdep *) gdbarch_tdep (get_frame_arch (this_frame));
+ arm_cache_set_active_sp_value (cache, tdep, vsp);
return cache;
}
@@ -2761,20 +3065,24 @@ arm_make_epilogue_frame_cache (struct frame_info *this_frame)
int reg;
cache = FRAME_OBSTACK_ZALLOC (struct arm_prologue_cache);
- cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
+ arm_cache_init (cache, this_frame);
/* Still rely on the offset calculated from prologue. */
arm_scan_prologue (this_frame, cache);
/* Since we are in epilogue, the SP has been restored. */
- cache->prev_sp = get_frame_register_unsigned (this_frame, ARM_SP_REGNUM);
+ arm_gdbarch_tdep *tdep
+ = (arm_gdbarch_tdep *) gdbarch_tdep (get_frame_arch (this_frame));
+ arm_cache_set_active_sp_value (cache, tdep,
+ get_frame_register_unsigned (this_frame,
+ ARM_SP_REGNUM));
/* Calculate actual addresses of saved registers using offsets
determined by arm_scan_prologue. */
for (reg = 0; reg < gdbarch_num_regs (get_frame_arch (this_frame)); reg++)
if (cache->saved_regs[reg].is_addr ())
cache->saved_regs[reg].set_addr (cache->saved_regs[reg].addr ()
- + cache->prev_sp);
+ + arm_cache_get_prev_sp_value (cache, tdep));
return cache;
}
@@ -2802,7 +3110,9 @@ arm_epilogue_frame_this_id (struct frame_info *this_frame,
if (func == 0)
func = pc;
- (*this_id) = frame_id_build (cache->prev_sp, pc);
+ arm_gdbarch_tdep *tdep
+ = (arm_gdbarch_tdep *) gdbarch_tdep (get_frame_arch (this_frame));
+ *this_id = frame_id_build (arm_cache_get_prev_sp_value (cache, tdep), pc);
}
/* Implementation of function hook 'prev_register' in
@@ -2922,9 +3232,13 @@ arm_make_stub_cache (struct frame_info *this_frame)
struct arm_prologue_cache *cache;
cache = FRAME_OBSTACK_ZALLOC (struct arm_prologue_cache);
- cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
+ arm_cache_init (cache, this_frame);
- cache->prev_sp = get_frame_register_unsigned (this_frame, ARM_SP_REGNUM);
+ arm_gdbarch_tdep *tdep
+ = (arm_gdbarch_tdep *) gdbarch_tdep (get_frame_arch (this_frame));
+ arm_cache_set_active_sp_value (cache, tdep,
+ get_frame_register_unsigned (this_frame,
+ ARM_SP_REGNUM));
return cache;
}
@@ -2942,7 +3256,10 @@ arm_stub_this_id (struct frame_info *this_frame,
*this_cache = arm_make_stub_cache (this_frame);
cache = (struct arm_prologue_cache *) *this_cache;
- *this_id = frame_id_build (cache->prev_sp, get_frame_pc (this_frame));
+ arm_gdbarch_tdep *tdep
+ = (arm_gdbarch_tdep *) gdbarch_tdep (get_frame_arch (this_frame));
+ *this_id = frame_id_build (arm_cache_get_prev_sp_value (cache, tdep),
+ get_frame_pc (this_frame));
}
static int
@@ -2988,19 +3305,23 @@ static struct arm_prologue_cache *
arm_m_exception_cache (struct frame_info *this_frame)
{
struct gdbarch *gdbarch = get_frame_arch (this_frame);
+ arm_gdbarch_tdep *tdep = (arm_gdbarch_tdep *) gdbarch_tdep (gdbarch);
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
struct arm_prologue_cache *cache;
CORE_ADDR lr;
CORE_ADDR sp;
CORE_ADDR unwound_sp;
+ uint32_t sp_r0_offset = 0;
LONGEST xpsr;
uint32_t exc_return;
- uint32_t process_stack_used;
+ bool fnc_return;
uint32_t extended_frame_used;
- uint32_t secure_stack_used;
+ bool secure_stack_used = false;
+ bool default_callee_register_stacking = false;
+ bool exception_domain_is_secure = false;
cache = FRAME_OBSTACK_ZALLOC (struct arm_prologue_cache);
- cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
+ arm_cache_init (cache, this_frame);
/* ARMv7-M Architecture Reference "B1.5.6 Exception entry behavior"
describes which bits in LR that define which stack was used prior
@@ -3009,58 +3330,121 @@ arm_m_exception_cache (struct frame_info *this_frame)
lr = get_frame_register_unsigned (this_frame, ARM_LR_REGNUM);
sp = get_frame_register_unsigned (this_frame, ARM_SP_REGNUM);
- /* Check EXC_RETURN indicator bits. */
- exc_return = (((lr >> 28) & 0xf) == 0xf);
+ fnc_return = ((lr & 0xfffffffe) == 0xfefffffe);
+ if (tdep->have_sec_ext && fnc_return)
+ {
+ int actual_sp;
+
+ arm_cache_switch_prev_sp (cache, tdep, tdep->m_profile_msp_ns_regnum);
+ arm_cache_set_active_sp_value (cache, tdep, sp);
+ if (lr & 1)
+ actual_sp = tdep->m_profile_msp_s_regnum;
+ else
+ actual_sp = tdep->m_profile_msp_ns_regnum;
+
+ arm_cache_switch_prev_sp (cache, tdep, actual_sp);
+ sp = get_frame_register_unsigned (this_frame, actual_sp);
+
+ cache->saved_regs[ARM_LR_REGNUM].set_addr (sp);
+
+ arm_cache_set_active_sp_value (cache, tdep, sp + 8);
+
+ return cache;
+ }
- /* Check EXC_RETURN bit SPSEL if Main or Thread (process) stack used. */
- process_stack_used = ((lr & (1 << 2)) != 0);
- if (exc_return && process_stack_used)
+ /* Check EXC_RETURN indicator bits (24-31). */
+ exc_return = (((lr >> 24) & 0xff) == 0xff);
+ if (exc_return)
{
- /* Thread (process) stack used.
- Potentially this could be other register defined by target, but PSP
- can be considered a standard name for the "Process Stack Pointer".
- To be fully aware of system registers like MSP and PSP, these could
- be added to a separate XML arm-m-system-profile that is valid for
- ARMv6-M and ARMv7-M architectures. Also to be able to debug eg a
- corefile off-line, then these registers must be defined by GDB,
- and also be included in the corefile regsets. */
+ /* Check EXC_RETURN bit SPSEL if Main or Thread (process) stack used. */
+ bool process_stack_used = ((lr & (1 << 2)) != 0);
- int psp_regnum = user_reg_map_name_to_regnum (gdbarch, "psp", -1);
- if (psp_regnum == -1)
+ if (tdep->have_sec_ext)
{
- /* Thread (process) stack could not be fetched,
- give warning and exit. */
+ secure_stack_used = ((lr & (1 << 6)) != 0);
+ default_callee_register_stacking = ((lr & (1 << 5)) != 0);
+ exception_domain_is_secure = ((lr & (1 << 0)) == 0);
- warning (_("no PSP thread stack unwinding supported."));
+ /* Unwinding from non-secure to secure can trip security
+ measures. In order to avoid the debugger being
+ intrusive, rely on the user to configure the requested
+ mode. */
+ if (secure_stack_used && !exception_domain_is_secure
+ && !arm_unwind_secure_frames)
+ {
+ warning (_("Non-secure to secure stack unwinding disabled."));
+
+ /* Terminate any further stack unwinding by referring to self. */
+ arm_cache_set_active_sp_value (cache, tdep, sp);
+ return cache;
+ }
- /* Terminate any further stack unwinding by refer to self. */
- cache->prev_sp = sp;
- return cache;
+ if (process_stack_used)
+ {
+ if (secure_stack_used)
+ /* Secure thread (process) stack used, use PSP_S as SP. */
+ arm_cache_switch_prev_sp (cache, tdep, tdep->m_profile_psp_s_regnum);
+ else
+ /* Non-secure thread (process) stack used, use PSP_NS as SP. */
+ arm_cache_switch_prev_sp (cache, tdep, tdep->m_profile_psp_ns_regnum);
+ }
+ else
+ {
+ if (secure_stack_used)
+ /* Secure main stack used, use MSP_S as SP. */
+ arm_cache_switch_prev_sp (cache, tdep, tdep->m_profile_msp_s_regnum);
+ else
+ /* Non-secure main stack used, use MSP_NS as SP. */
+ arm_cache_switch_prev_sp (cache, tdep, tdep->m_profile_msp_ns_regnum);
+ }
}
else
{
- /* Thread (process) stack used, use PSP as SP. */
- unwound_sp = get_frame_register_unsigned (this_frame, psp_regnum);
+ if (process_stack_used)
+ /* Thread (process) stack used, use PSP as SP. */
+ arm_cache_switch_prev_sp (cache, tdep, tdep->m_profile_psp_regnum);
+ else
+ /* Main stack used, use MSP as SP. */
+ arm_cache_switch_prev_sp (cache, tdep, tdep->m_profile_msp_regnum);
}
}
else
{
/* Main stack used, use MSP as SP. */
- unwound_sp = sp;
+ arm_cache_switch_prev_sp (cache, tdep, tdep->m_profile_msp_regnum);
+ }
+
+ /* Fetch the SP to use for this frame. */
+ unwound_sp = arm_cache_get_prev_sp_value (cache, tdep);
+
+ /* With the Security extension, the hardware saves R4..R11 too. */
+ if (exc_return && tdep->have_sec_ext && secure_stack_used
+ && (!default_callee_register_stacking || exception_domain_is_secure))
+ {
+ /* Read R4..R11 from the integer callee registers. */
+ cache->saved_regs[4].set_addr (unwound_sp + 0x08);
+ cache->saved_regs[5].set_addr (unwound_sp + 0x0C);
+ cache->saved_regs[6].set_addr (unwound_sp + 0x10);
+ cache->saved_regs[7].set_addr (unwound_sp + 0x14);
+ cache->saved_regs[8].set_addr (unwound_sp + 0x18);
+ cache->saved_regs[9].set_addr (unwound_sp + 0x1C);
+ cache->saved_regs[10].set_addr (unwound_sp + 0x20);
+ cache->saved_regs[11].set_addr (unwound_sp + 0x24);
+ sp_r0_offset = 0x28;
}
/* The hardware saves eight 32-bit words, comprising xPSR,
ReturnAddress, LR (R14), R12, R3, R2, R1, R0. See details in
"B1.5.6 Exception entry behavior" in
"ARMv7-M Architecture Reference Manual". */
- cache->saved_regs[0].set_addr (unwound_sp);
- cache->saved_regs[1].set_addr (unwound_sp + 4);
- cache->saved_regs[2].set_addr (unwound_sp + 8);
- cache->saved_regs[3].set_addr (unwound_sp + 12);
- cache->saved_regs[ARM_IP_REGNUM].set_addr (unwound_sp + 16);
- cache->saved_regs[ARM_LR_REGNUM].set_addr (unwound_sp + 20);
- cache->saved_regs[ARM_PC_REGNUM].set_addr (unwound_sp + 24);
- cache->saved_regs[ARM_PS_REGNUM].set_addr (unwound_sp + 28);
+ cache->saved_regs[0].set_addr (unwound_sp + sp_r0_offset);
+ cache->saved_regs[1].set_addr (unwound_sp + sp_r0_offset + 4);
+ cache->saved_regs[2].set_addr (unwound_sp + sp_r0_offset + 8);
+ cache->saved_regs[3].set_addr (unwound_sp + sp_r0_offset + 12);
+ cache->saved_regs[ARM_IP_REGNUM].set_addr (unwound_sp + sp_r0_offset + 16);
+ cache->saved_regs[ARM_LR_REGNUM].set_addr (unwound_sp + sp_r0_offset + 20);
+ cache->saved_regs[ARM_PC_REGNUM].set_addr (unwound_sp + sp_r0_offset + 24);
+ cache->saved_regs[ARM_PS_REGNUM].set_addr (unwound_sp + sp_r0_offset + 28);
/* Check EXC_RETURN bit FTYPE if extended stack frame (FPU regs stored)
type used. */
@@ -3079,43 +3463,46 @@ arm_m_exception_cache (struct frame_info *this_frame)
This register is located at address 0xE000EF34. */
/* Extended stack frame type used. */
- fpu_regs_stack_offset = unwound_sp + 0x20;
+ fpu_regs_stack_offset = unwound_sp + sp_r0_offset + 0x20;
for (i = 0; i < 16; i++)
{
cache->saved_regs[ARM_D0_REGNUM + i].set_addr (fpu_regs_stack_offset);
fpu_regs_stack_offset += 4;
}
- cache->saved_regs[ARM_FPSCR_REGNUM].set_addr (unwound_sp + 0x60);
+ cache->saved_regs[ARM_FPSCR_REGNUM].set_addr (unwound_sp + sp_r0_offset + 0x60);
+ fpu_regs_stack_offset += 4;
+
+ if (tdep->have_sec_ext && !default_callee_register_stacking)
+ {
+ /* Handle floating-point callee saved registers. */
+ fpu_regs_stack_offset = 0x90;
+ for (i = 16; i < 32; i++)
+ {
+ cache->saved_regs[ARM_D0_REGNUM + i].set_addr (fpu_regs_stack_offset);
+ fpu_regs_stack_offset += 4;
+ }
- /* Offset 0x64 is reserved. */
- cache->prev_sp = unwound_sp + 0x68;
+ arm_cache_set_active_sp_value (cache, tdep, unwound_sp + sp_r0_offset + 0xD0);
+ }
+ else
+ {
+ /* Offset 0x64 is reserved. */
+ arm_cache_set_active_sp_value (cache, tdep, unwound_sp + sp_r0_offset + 0x68);
+ }
}
else
{
/* Standard stack frame type used. */
- cache->prev_sp = unwound_sp + 0x20;
- }
-
- /* Check EXC_RETURN bit S if Secure or Non-secure stack used. */
- secure_stack_used = ((lr & (1 << 6)) != 0);
- if (exc_return && secure_stack_used)
- {
- /* ARMv8-M Exception and interrupt handling is not considered here.
- In the ARMv8-M architecture also EXC_RETURN bit S is controlling if
- the Secure or Non-secure stack was used. To separate Secure and
- Non-secure stacks, processors that are based on the ARMv8-M
- architecture support 4 stack pointers: MSP_S, PSP_S, MSP_NS, PSP_NS.
- In addition, a stack limit feature is provided using stack limit
- registers (accessible using MSR and MRS instructions) in Privileged
- level. */
+ arm_cache_set_active_sp_value (cache, tdep, unwound_sp + sp_r0_offset + 0x20);
}
/* If bit 9 of the saved xPSR is set, then there is a four-byte
aligner between the top of the 32-byte stack frame and the
previous context's stack pointer. */
- if (safe_read_memory_integer (unwound_sp + 28, 4, byte_order, &xpsr)
+ if (safe_read_memory_integer (unwound_sp + sp_r0_offset + 28, 4, byte_order, &xpsr)
&& (xpsr & (1 << 9)) != 0)
- cache->prev_sp += 4;
+ arm_cache_set_active_sp_value (cache, tdep,
+ arm_cache_get_prev_sp_value (cache, tdep) + 4);
return cache;
}
@@ -3135,7 +3522,9 @@ arm_m_exception_this_id (struct frame_info *this_frame,
cache = (struct arm_prologue_cache *) *this_cache;
/* Our frame ID for a stub frame is the current SP and LR. */
- *this_id = frame_id_build (cache->prev_sp,
+ arm_gdbarch_tdep *tdep
+ = (arm_gdbarch_tdep *) gdbarch_tdep (get_frame_arch (this_frame));
+ *this_id = frame_id_build (arm_cache_get_prev_sp_value (cache, tdep),
get_frame_pc (this_frame));
}
@@ -3148,15 +3537,35 @@ arm_m_exception_prev_register (struct frame_info *this_frame,
int prev_regnum)
{
struct arm_prologue_cache *cache;
+ CORE_ADDR sp_value;
if (*this_cache == NULL)
*this_cache = arm_m_exception_cache (this_frame);
cache = (struct arm_prologue_cache *) *this_cache;
/* The value was already reconstructed into PREV_SP. */
+ arm_gdbarch_tdep *tdep
+ = (arm_gdbarch_tdep *) gdbarch_tdep (get_frame_arch (this_frame));
if (prev_regnum == ARM_SP_REGNUM)
return frame_unwind_got_constant (this_frame, prev_regnum,
- cache->prev_sp);
+ arm_cache_get_prev_sp_value (cache, tdep));
+
+ /* The value might be one of the alternative SP, if so, use the
+ value already constructed. */
+ if (arm_cache_is_sp_register (cache, tdep, prev_regnum))
+ {
+ sp_value = arm_cache_get_sp_register (cache, tdep, prev_regnum);
+ return frame_unwind_got_constant (this_frame, prev_regnum, sp_value);
+ }
+
+ if (prev_regnum == ARM_PC_REGNUM)
+ {
+ CORE_ADDR lr = frame_unwind_register_unsigned (this_frame, ARM_LR_REGNUM);
+ struct gdbarch *gdbarch = get_frame_arch (this_frame);
+
+ return frame_unwind_got_constant (this_frame, prev_regnum,
+ arm_addr_bits_remove (gdbarch, lr));
+ }
return trad_frame_get_prev_register (this_frame, cache->saved_regs,
prev_regnum);
@@ -3170,13 +3579,14 @@ arm_m_exception_unwind_sniffer (const struct frame_unwind *self,
struct frame_info *this_frame,
void **this_prologue_cache)
{
+ struct gdbarch *gdbarch = get_frame_arch (this_frame);
CORE_ADDR this_pc = get_frame_pc (this_frame);
/* No need to check is_m; this sniffer is only registered for
M-profile architectures. */
/* Check if exception frame returns to a magic PC value. */
- return arm_m_addr_is_magic (this_pc);
+ return arm_m_addr_is_magic (gdbarch, this_pc);
}
/* Frame unwinder for M-profile exceptions. */
@@ -3201,7 +3611,9 @@ arm_normal_frame_base (struct frame_info *this_frame, void **this_cache)
*this_cache = arm_make_prologue_cache (this_frame);
cache = (struct arm_prologue_cache *) *this_cache;
- return cache->prev_sp - cache->framesize;
+ arm_gdbarch_tdep *tdep
+ = (arm_gdbarch_tdep *) gdbarch_tdep (get_frame_arch (this_frame));
+ return arm_cache_get_prev_sp_value (cache, tdep) - cache->framesize;
}
struct frame_base arm_normal_base = {
@@ -3216,6 +3628,7 @@ arm_dwarf2_prev_register (struct frame_info *this_frame, void **this_cache,
int regnum)
{
struct gdbarch * gdbarch = get_frame_arch (this_frame);
+ arm_gdbarch_tdep *tdep = (arm_gdbarch_tdep *) gdbarch_tdep (gdbarch);
CORE_ADDR lr, cpsr;
ULONGEST t_bit = arm_psr_thumb_bit (gdbarch);
@@ -3226,6 +3639,18 @@ arm_dwarf2_prev_register (struct frame_info *this_frame, void **this_cache,
describes saves of LR. However, that version may have an
extra bit set to indicate Thumb state. The bit is not
part of the PC. */
+
+ /* Record in the frame whether the return address was signed. */
+ if (tdep->have_pacbti)
+ {
+ CORE_ADDR ra_auth_code
+ = frame_unwind_register_unsigned (this_frame,
+ tdep->pacbti_pseudo_base);
+
+ if (ra_auth_code != 0)
+ set_frame_previous_pc_masked (this_frame);
+ }
+
lr = frame_unwind_register_unsigned (this_frame, ARM_LR_REGNUM);
return frame_unwind_got_constant (this_frame, regnum,
arm_addr_bits_remove (gdbarch, lr));
@@ -3246,24 +3671,6 @@ arm_dwarf2_prev_register (struct frame_info *this_frame, void **this_cache,
}
}
-static void
-arm_dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum,
- struct dwarf2_frame_state_reg *reg,
- struct frame_info *this_frame)
-{
- switch (regnum)
- {
- case ARM_PC_REGNUM:
- case ARM_PS_REGNUM:
- reg->how = DWARF2_FRAME_REG_FN;
- reg->loc.fn = arm_dwarf2_prev_register;
- break;
- case ARM_SP_REGNUM:
- reg->how = DWARF2_FRAME_REG_CFA;
- break;
- }
-}
-
/* Implement the stack_frame_destroyed_p gdbarch method. */
static int
@@ -4015,16 +4422,16 @@ static void
print_fpu_flags (struct ui_file *file, int flags)
{
if (flags & (1 << 0))
- fputs_filtered ("IVO ", file);
+ gdb_puts ("IVO ", file);
if (flags & (1 << 1))
- fputs_filtered ("DVZ ", file);
+ gdb_puts ("DVZ ", file);
if (flags & (1 << 2))
- fputs_filtered ("OFL ", file);
+ gdb_puts ("OFL ", file);
if (flags & (1 << 3))
- fputs_filtered ("UFL ", file);
+ gdb_puts ("UFL ", file);
if (flags & (1 << 4))
- fputs_filtered ("INX ", file);
- fputc_filtered ('\n', file);
+ gdb_puts ("INX ", file);
+ gdb_putc ('\n', file);
}
/* Print interesting information about the floating point processor
@@ -4038,14 +4445,14 @@ arm_print_float_info (struct gdbarch *gdbarch, struct ui_file *file,
type = (status >> 24) & 127;
if (status & (1 << 31))
- fprintf_filtered (file, _("Hardware FPU type %d\n"), type);
+ gdb_printf (file, _("Hardware FPU type %d\n"), type);
else
- fprintf_filtered (file, _("Software FPU type %d\n"), type);
+ gdb_printf (file, _("Software FPU type %d\n"), type);
/* i18n: [floating point unit] mask */
- fputs_filtered (_("mask: "), file);
+ gdb_puts (_("mask: "), file);
print_fpu_flags (file, status >> 16);
/* i18n: [floating point unit] flags */
- fputs_filtered (_("flags: "), file);
+ gdb_puts (_("flags: "), file);
print_fpu_flags (file, status);
}
@@ -4193,6 +4600,25 @@ is_mve_pseudo (struct gdbarch *gdbarch, int regnum)
return false;
}
+/* Return true if REGNUM is a PACBTI pseudo register (ra_auth_code). Return
+ false otherwise.
+
+ REGNUM is the raw register number and not a pseudo-relative register
+ number. */
+
+static bool
+is_pacbti_pseudo (struct gdbarch *gdbarch, int regnum)
+{
+ arm_gdbarch_tdep *tdep = (arm_gdbarch_tdep *) gdbarch_tdep (gdbarch);
+
+ if (tdep->have_pacbti
+ && regnum >= tdep->pacbti_pseudo_base
+ && regnum < tdep->pacbti_pseudo_base + tdep->pacbti_pseudo_count)
+ return true;
+
+ return false;
+}
+
/* Return the GDB type object for the "standard" data type of data in
register N. */
@@ -4210,6 +4636,9 @@ arm_register_type (struct gdbarch *gdbarch, int regnum)
if (is_mve_pseudo (gdbarch, regnum))
return builtin_type (gdbarch)->builtin_int16;
+ if (is_pacbti_pseudo (gdbarch, regnum))
+ return builtin_type (gdbarch)->builtin_uint32;
+
/* If the target description has register information, we are only
in this function so that we can override the types of
double-precision registers for NEON. */
@@ -4272,6 +4701,17 @@ arm_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int reg)
if (reg >= 112 && reg <= 127)
return ARM_WR0_REGNUM + reg - 112;
+ /* PACBTI register containing the Pointer Authentication Code. */
+ if (reg == ARM_DWARF_RA_AUTH_CODE)
+ {
+ arm_gdbarch_tdep *tdep = (arm_gdbarch_tdep *) gdbarch_tdep (gdbarch);
+
+ if (tdep->have_pacbti)
+ return tdep->pacbti_pseudo_base;
+
+ return -1;
+ }
+
if (reg >= 192 && reg <= 199)
return ARM_WC0_REGNUM + reg - 192;
@@ -4337,6 +4777,35 @@ arm_register_sim_regno (struct gdbarch *gdbarch, int regnum)
internal_error (__FILE__, __LINE__, _("Bad REGNUM %d"), regnum);
}
+static const unsigned char op_lit0 = DW_OP_lit0;
+
+static void
+arm_dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum,
+ struct dwarf2_frame_state_reg *reg,
+ struct frame_info *this_frame)
+{
+ if (is_pacbti_pseudo (gdbarch, regnum))
+ {
+ /* Initialize RA_AUTH_CODE to zero. */
+ reg->how = DWARF2_FRAME_REG_SAVED_VAL_EXP;
+ reg->loc.exp.start = &op_lit0;
+ reg->loc.exp.len = 1;
+ return;
+ }
+
+ switch (regnum)
+ {
+ case ARM_PC_REGNUM:
+ case ARM_PS_REGNUM:
+ reg->how = DWARF2_FRAME_REG_FN;
+ reg->loc.fn = arm_dwarf2_prev_register;
+ break;
+ case ARM_SP_REGNUM:
+ reg->how = DWARF2_FRAME_REG_CFA;
+ break;
+ }
+}
+
/* Given BUF, which is OLD_LEN bytes ending at ENDADDR, expand
the buffer to be NEW_LEN bytes ending at ENDADDR. Return
NULL if an error occurs. BUF is freed. */
@@ -8075,7 +8544,8 @@ arm_return_in_memory (struct gdbarch *gdbarch, struct type *type)
{
/* The AAPCS says all aggregates not larger than a word are returned
in a register. */
- if (TYPE_LENGTH (type) <= ARM_INT_REGISTER_SIZE)
+ if (TYPE_LENGTH (type) <= ARM_INT_REGISTER_SIZE
+ && language_pass_by_reference (type).trivially_copyable)
return 0;
return 1;
@@ -8086,7 +8556,8 @@ arm_return_in_memory (struct gdbarch *gdbarch, struct type *type)
/* All aggregate types that won't fit in a register must be returned
in memory. */
- if (TYPE_LENGTH (type) > ARM_INT_REGISTER_SIZE)
+ if (TYPE_LENGTH (type) > ARM_INT_REGISTER_SIZE
+ || !language_pass_by_reference (type).trivially_copyable)
return 1;
/* In the ARM ABI, "integer" like aggregate types are returned in
@@ -8307,9 +8778,33 @@ arm_return_value (struct gdbarch *gdbarch, struct value *function,
|| valtype->code () == TYPE_CODE_UNION
|| valtype->code () == TYPE_CODE_ARRAY)
{
+ /* From the AAPCS document:
+
+ Result return:
+
+ A Composite Type larger than 4 bytes, or whose size cannot be
+ determined statically by both caller and callee, is stored in memory
+ at an address passed as an extra argument when the function was
+ called (Parameter Passing, rule A.4). The memory to be used for the
+ result may be modified at any point during the function call.
+
+ Parameter Passing:
+
+ A.4: If the subroutine is a function that returns a result in memory,
+ then the address for the result is placed in r0 and the NCRN is set
+ to r1. */
if (tdep->struct_return == pcc_struct_return
|| arm_return_in_memory (gdbarch, valtype))
- return RETURN_VALUE_STRUCT_CONVENTION;
+ {
+ if (readbuf)
+ {
+ CORE_ADDR addr;
+
+ regcache->cooked_read (ARM_A1_REGNUM, &addr);
+ read_memory (addr, readbuf, TYPE_LENGTH (valtype));
+ }
+ return RETURN_VALUE_ABI_RETURNS_ADDRESS;
+ }
}
else if (valtype->code () == TYPE_CODE_COMPLEX)
{
@@ -8380,7 +8875,7 @@ arm_skip_cmse_entry (CORE_ADDR pc, const char *name, struct objfile *objfile)
= lookup_minimal_symbol (target_name, NULL, objfile);
if (minsym.minsym != nullptr)
- return BMSYMBOL_VALUE_ADDRESS (minsym);
+ return minsym.value_address ();
return 0;
}
@@ -8469,7 +8964,7 @@ arm_skip_stub (struct frame_info *frame, CORE_ADDR pc)
objfile = (sec == NULL) ? NULL : sec->objfile;
minsym = lookup_minimal_symbol (target_name, NULL, objfile);
if (minsym.minsym != NULL)
- return BMSYMBOL_VALUE_ADDRESS (minsym);
+ return minsym.value_address ();
else
return 0;
}
@@ -8525,13 +9020,13 @@ show_fp_model (struct ui_file *file, int from_tty,
if (arm_fp_model == ARM_FLOAT_AUTO
&& gdbarch_bfd_arch_info (target_gdbarch ())->arch == bfd_arch_arm)
- fprintf_filtered (file, _("\
+ gdb_printf (file, _("\
The current ARM floating point model is \"auto\" (currently \"%s\").\n"),
- fp_model_strings[tdep->fp_model]);
+ fp_model_strings[tdep->fp_model]);
else
- fprintf_filtered (file, _("\
+ gdb_printf (file, _("\
The current ARM floating point model is \"%s\".\n"),
- fp_model_strings[arm_fp_model]);
+ fp_model_strings[arm_fp_model]);
}
static void
@@ -8563,32 +9058,41 @@ arm_show_abi (struct ui_file *file, int from_tty,
if (arm_abi_global == ARM_ABI_AUTO
&& gdbarch_bfd_arch_info (target_gdbarch ())->arch == bfd_arch_arm)
- fprintf_filtered (file, _("\
+ gdb_printf (file, _("\
The current ARM ABI is \"auto\" (currently \"%s\").\n"),
- arm_abi_strings[tdep->arm_abi]);
+ arm_abi_strings[tdep->arm_abi]);
else
- fprintf_filtered (file, _("The current ARM ABI is \"%s\".\n"),
- arm_abi_string);
+ gdb_printf (file, _("The current ARM ABI is \"%s\".\n"),
+ arm_abi_string);
}
static void
arm_show_fallback_mode (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file,
- _("The current execution mode assumed "
- "(when symbols are unavailable) is \"%s\".\n"),
- arm_fallback_mode_string);
+ gdb_printf (file,
+ _("The current execution mode assumed "
+ "(when symbols are unavailable) is \"%s\".\n"),
+ arm_fallback_mode_string);
}
static void
arm_show_force_mode (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file,
- _("The current execution mode assumed "
- "(even when symbols are available) is \"%s\".\n"),
- arm_force_mode_string);
+ gdb_printf (file,
+ _("The current execution mode assumed "
+ "(even when symbols are available) is \"%s\".\n"),
+ arm_force_mode_string);
+}
+
+static void
+arm_show_unwind_secure_frames (struct ui_file *file, int from_tty,
+ struct cmd_list_element *c, const char *value)
+{
+ gdb_printf (file,
+ _("Usage of non-secure to secure exception stack unwinding is %s.\n"),
+ arm_unwind_secure_frames ? "on" : "off");
}
/* If the user changes the register disassembly style used for info
@@ -8623,7 +9127,7 @@ show_disassembly_style_sfunc (struct ui_file *file, int from_tty,
len = strcspn (style, ",");
}
- fprintf_filtered (file, "The disassembly style is \"%.*s\".\n", len, style);
+ gdb_printf (file, "The disassembly style is \"%.*s\".\n", len, style);
}
/* Return the ARM register name corresponding to register I. */
@@ -8657,6 +9161,10 @@ arm_register_name (struct gdbarch *gdbarch, int i)
if (is_mve_pseudo (gdbarch, i))
return "p0";
+ /* RA_AUTH_CODE is used for unwinding only. Do not assign it a name. */
+ if (is_pacbti_pseudo (gdbarch, i))
+ return "";
+
if (i >= ARRAY_SIZE (arm_register_names))
/* These registers are only supported on targets which supply
an XML description. */
@@ -8960,7 +9468,7 @@ arm_elf_osabi_sniffer (bfd *abfd)
static int
arm_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
- struct reggroup *group)
+ const struct reggroup *group)
{
/* FPS register's type is INT, but belongs to float_reggroup. Beside
this, FPS register belongs to save_regroup, restore_reggroup, and
@@ -9014,6 +9522,10 @@ arm_register_g_packet_guesses (struct gdbarch *gdbarch)
register_remote_g_packet_guess (gdbarch, ARM_CORE_REGS_SIZE
+ ARM_VFP2_REGS_SIZE
+ ARM_INT_REGISTER_SIZE, tdesc);
+
+ /* M-profile system (stack pointers). */
+ tdesc = arm_read_mprofile_description (ARM_M_TYPE_SYSTEM);
+ register_remote_g_packet_guess (gdbarch, 2 * ARM_INT_REGISTER_SIZE, tdesc);
}
/* Otherwise we don't have a useful guess. */
@@ -9047,6 +9559,17 @@ arm_gnu_triplet_regexp (struct gdbarch *gdbarch)
return gdbarch_bfd_arch_info (gdbarch)->arch_name;
}
+/* Implement the "get_pc_address_flags" gdbarch method. */
+
+static std::string
+arm_get_pc_address_flags (frame_info *frame, CORE_ADDR pc)
+{
+ if (get_frame_pc_masked (frame))
+ return "PAC";
+
+ return "";
+}
+
/* Initialize the current architecture based on INFO. If possible,
re-use an architecture from ARCHES, which is a list of
architectures already created during this debugging session.
@@ -9064,6 +9587,7 @@ arm_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
tdesc_arch_data_up tdesc_data;
int i;
bool is_m = false;
+ bool have_sec_ext = false;
int vfp_register_count = 0;
bool have_s_pseudos = false, have_q_pseudos = false;
bool have_wmmx_registers = false;
@@ -9072,8 +9596,17 @@ arm_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
const struct target_desc *tdesc = info.target_desc;
bool have_vfp = false;
bool have_mve = false;
+ bool have_pacbti = false;
int mve_vpr_regnum = -1;
int register_count = ARM_NUM_REGS;
+ bool have_m_profile_msp = false;
+ int m_profile_msp_regnum = -1;
+ int m_profile_psp_regnum = -1;
+ int m_profile_msp_ns_regnum = -1;
+ int m_profile_psp_ns_regnum = -1;
+ int m_profile_msp_s_regnum = -1;
+ int m_profile_psp_s_regnum = -1;
+ int tls_regnum = 0;
/* If we have an object to base this architecture on, try to determine
its ABI. */
@@ -9188,9 +9721,37 @@ arm_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
if (!tdesc_has_registers (tdesc)
&& (attr_arch == TAG_CPU_ARCH_V6_M
|| attr_arch == TAG_CPU_ARCH_V6S_M
+ || attr_arch == TAG_CPU_ARCH_V7E_M
+ || attr_arch == TAG_CPU_ARCH_V8M_BASE
+ || attr_arch == TAG_CPU_ARCH_V8M_MAIN
|| attr_arch == TAG_CPU_ARCH_V8_1M_MAIN
|| attr_profile == 'M'))
is_m = true;
+
+ /* Look for attributes that indicate support for ARMv8.1-m
+ PACBTI. */
+ if (!tdesc_has_registers (tdesc) && is_m)
+ {
+ int attr_pac_extension
+ = bfd_elf_get_obj_attr_int (info.abfd, OBJ_ATTR_PROC,
+ Tag_PAC_extension);
+
+ int attr_bti_extension
+ = bfd_elf_get_obj_attr_int (info.abfd, OBJ_ATTR_PROC,
+ Tag_BTI_extension);
+
+ int attr_pacret_use
+ = bfd_elf_get_obj_attr_int (info.abfd, OBJ_ATTR_PROC,
+ Tag_PACRET_use);
+
+ int attr_bti_use
+ = bfd_elf_get_obj_attr_int (info.abfd, OBJ_ATTR_PROC,
+ Tag_BTI_use);
+
+ if (attr_pac_extension != 0 || attr_bti_extension != 0
+ || attr_pacret_use != 0 || attr_bti_use != 0)
+ have_pacbti = true;
+ }
#endif
}
@@ -9276,6 +9837,35 @@ arm_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
if (!valid_p)
return NULL;
+ if (is_m)
+ {
+ feature = tdesc_find_feature (tdesc,
+ "org.gnu.gdb.arm.m-system");
+ if (feature != nullptr)
+ {
+ /* MSP */
+ valid_p &= tdesc_numbered_register (feature, tdesc_data.get (),
+ register_count, "msp");
+ if (!valid_p)
+ {
+ warning (_("M-profile m-system feature is missing required register msp."));
+ return nullptr;
+ }
+ have_m_profile_msp = true;
+ m_profile_msp_regnum = register_count++;
+
+ /* PSP */
+ valid_p &= tdesc_numbered_register (feature, tdesc_data.get (),
+ register_count, "psp");
+ if (!valid_p)
+ {
+ warning (_("M-profile m-system feature is missing required register psp."));
+ return nullptr;
+ }
+ m_profile_psp_regnum = register_count++;
+ }
+ }
+
feature = tdesc_find_feature (tdesc,
"org.gnu.gdb.arm.fpa");
if (feature != NULL)
@@ -9384,6 +9974,19 @@ arm_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
}
}
+ /* Check for the TLS register feature. */
+ feature = tdesc_find_feature (tdesc, "org.gnu.gdb.arm.tls");
+ if (feature != nullptr)
+ {
+ valid_p &= tdesc_numbered_register (feature, tdesc_data.get (),
+ register_count, "tpidruro");
+ if (!valid_p)
+ return nullptr;
+
+ tls_regnum = register_count;
+ register_count++;
+ }
+
/* Check for MVE after all the checks for GPR's, VFP and Neon.
MVE (Helium) is an M-profile extension. */
if (is_m)
@@ -9417,6 +10020,72 @@ arm_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
if (have_vfp)
have_q_pseudos = true;
}
+
+ /* Do we have the ARMv8.1-m PACBTI feature? */
+ feature = tdesc_find_feature (tdesc,
+ "org.gnu.gdb.arm.m-profile-pacbti");
+ if (feature != nullptr)
+ {
+ /* By advertising this feature, the target acknowledges the
+ presence of the ARMv8.1-m PACBTI extensions.
+
+ We don't care for any particular registers in this group, so
+ the target is free to include whatever it deems appropriate.
+
+ The expectation is for this feature to include the PAC
+ keys. */
+ have_pacbti = true;
+ }
+
+ /* Do we have the Security extension? */
+ feature = tdesc_find_feature (tdesc,
+ "org.gnu.gdb.arm.secext");
+ if (feature != nullptr)
+ {
+ /* Secure/Non-secure stack pointers. */
+ /* MSP_NS */
+ valid_p &= tdesc_numbered_register (feature, tdesc_data.get (),
+ register_count, "msp_ns");
+ if (!valid_p)
+ {
+ warning (_("M-profile secext feature is missing required register msp_ns."));
+ return nullptr;
+ }
+ m_profile_msp_ns_regnum = register_count++;
+
+ /* PSP_NS */
+ valid_p &= tdesc_numbered_register (feature, tdesc_data.get (),
+ register_count, "psp_ns");
+ if (!valid_p)
+ {
+ warning (_("M-profile secext feature is missing required register psp_ns."));
+ return nullptr;
+ }
+ m_profile_psp_ns_regnum = register_count++;
+
+ /* MSP_S */
+ valid_p &= tdesc_numbered_register (feature, tdesc_data.get (),
+ register_count, "msp_s");
+ if (!valid_p)
+ {
+ warning (_("M-profile secext feature is missing required register msp_s."));
+ return nullptr;
+ }
+ m_profile_msp_s_regnum = register_count++;
+
+ /* PSP_S */
+ valid_p &= tdesc_numbered_register (feature, tdesc_data.get (),
+ register_count, "psp_s");
+ if (!valid_p)
+ {
+ warning (_("M-profile secext feature is missing required register psp_s."));
+ return nullptr;
+ }
+ m_profile_psp_s_regnum = register_count++;
+
+ have_sec_ext = true;
+ }
+
}
}
@@ -9443,6 +10112,11 @@ arm_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
if (is_m != tdep->is_m)
continue;
+ /* Also check for ARMv8.1-m PACBTI support, since it might come from
+ the binary. */
+ if (have_pacbti != tdep->have_pacbti)
+ continue;
+
/* Found a match. */
break;
}
@@ -9458,6 +10132,7 @@ arm_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
tdep->arm_abi = arm_abi;
tdep->fp_model = fp_model;
tdep->is_m = is_m;
+ tdep->have_sec_ext = have_sec_ext;
tdep->have_fpa_registers = have_fpa_registers;
tdep->have_wmmx_registers = have_wmmx_registers;
gdb_assert (vfp_register_count == 0
@@ -9467,6 +10142,7 @@ arm_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
tdep->have_s_pseudos = have_s_pseudos;
tdep->have_q_pseudos = have_q_pseudos;
tdep->have_neon = have_neon;
+ tdep->tls_regnum = tls_regnum;
/* Adjust the MVE feature settings. */
if (have_mve)
@@ -9475,6 +10151,20 @@ arm_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
tdep->mve_vpr_regnum = mve_vpr_regnum;
}
+ /* Adjust the PACBTI feature settings. */
+ tdep->have_pacbti = have_pacbti;
+
+ /* Adjust the M-profile stack pointers settings. */
+ if (have_m_profile_msp)
+ {
+ tdep->m_profile_msp_regnum = m_profile_msp_regnum;
+ tdep->m_profile_psp_regnum = m_profile_psp_regnum;
+ tdep->m_profile_msp_ns_regnum = m_profile_msp_ns_regnum;
+ tdep->m_profile_psp_ns_regnum = m_profile_psp_ns_regnum;
+ tdep->m_profile_msp_s_regnum = m_profile_msp_s_regnum;
+ tdep->m_profile_psp_s_regnum = m_profile_psp_s_regnum;
+ }
+
arm_register_g_packet_guesses (gdbarch);
/* Breakpoints. */
@@ -9643,6 +10333,11 @@ arm_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
set_gdbarch_long_double_format (gdbarch, floatformats_ieee_double);
}
+ /* Hook used to decorate frames with signed return addresses, only available
+ for ARMv8.1-m PACBTI. */
+ if (is_m && have_pacbti)
+ set_gdbarch_get_pc_address_flags (gdbarch, arm_get_pc_address_flags);
+
if (tdesc_data != nullptr)
{
set_tdesc_pseudo_register_name (gdbarch, arm_register_name);
@@ -9686,8 +10381,16 @@ arm_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
num_pseudos += tdep->mve_pseudo_count;
}
+ /* Do we have any ARMv8.1-m PACBTI pseudo registers. */
+ if (have_pacbti)
+ {
+ tdep->pacbti_pseudo_base = register_count + num_pseudos;
+ tdep->pacbti_pseudo_count = 1;
+ num_pseudos += tdep->pacbti_pseudo_count;
+ }
+
/* Set some pseudo register hooks, if we have pseudo registers. */
- if (tdep->have_s_pseudos || have_mve)
+ if (tdep->have_s_pseudos || have_mve || have_pacbti)
{
set_gdbarch_num_pseudo_regs (gdbarch, num_pseudos);
set_gdbarch_pseudo_register_read (gdbarch, arm_pseudo_read);
@@ -9717,38 +10420,58 @@ arm_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
if (tdep == NULL)
return;
- fprintf_filtered (file, _("arm_dump_tdep: fp_model = %i\n"),
- (int) tdep->fp_model);
- fprintf_filtered (file, _("arm_dump_tdep: have_fpa_registers = %i\n"),
- (int) tdep->have_fpa_registers);
- fprintf_filtered (file, _("arm_dump_tdep: have_wmmx_registers = %i\n"),
- (int) tdep->have_wmmx_registers);
- fprintf_filtered (file, _("arm_dump_tdep: vfp_register_count = %i\n"),
- (int) tdep->vfp_register_count);
- fprintf_filtered (file, _("arm_dump_tdep: have_s_pseudos = %s\n"),
- tdep->have_s_pseudos? "true" : "false");
- fprintf_filtered (file, _("arm_dump_tdep: s_pseudo_base = %i\n"),
- (int) tdep->s_pseudo_base);
- fprintf_filtered (file, _("arm_dump_tdep: s_pseudo_count = %i\n"),
- (int) tdep->s_pseudo_count);
- fprintf_filtered (file, _("arm_dump_tdep: have_q_pseudos = %s\n"),
- tdep->have_q_pseudos? "true" : "false");
- fprintf_filtered (file, _("arm_dump_tdep: q_pseudo_base = %i\n"),
- (int) tdep->q_pseudo_base);
- fprintf_filtered (file, _("arm_dump_tdep: q_pseudo_count = %i\n"),
- (int) tdep->q_pseudo_count);
- fprintf_filtered (file, _("arm_dump_tdep: have_neon = %i\n"),
- (int) tdep->have_neon);
- fprintf_filtered (file, _("arm_dump_tdep: have_mve = %s\n"),
- tdep->have_mve? "yes" : "no");
- fprintf_filtered (file, _("arm_dump_tdep: mve_vpr_regnum = %i\n"),
- tdep->mve_vpr_regnum);
- fprintf_filtered (file, _("arm_dump_tdep: mve_pseudo_base = %i\n"),
- tdep->mve_pseudo_base);
- fprintf_filtered (file, _("arm_dump_tdep: mve_pseudo_count = %i\n"),
- tdep->mve_pseudo_count);
- fprintf_filtered (file, _("arm_dump_tdep: Lowest pc = 0x%lx\n"),
- (unsigned long) tdep->lowest_pc);
+ gdb_printf (file, _("arm_dump_tdep: fp_model = %i\n"),
+ (int) tdep->fp_model);
+ gdb_printf (file, _("arm_dump_tdep: have_fpa_registers = %i\n"),
+ (int) tdep->have_fpa_registers);
+ gdb_printf (file, _("arm_dump_tdep: have_wmmx_registers = %i\n"),
+ (int) tdep->have_wmmx_registers);
+ gdb_printf (file, _("arm_dump_tdep: vfp_register_count = %i\n"),
+ (int) tdep->vfp_register_count);
+ gdb_printf (file, _("arm_dump_tdep: have_s_pseudos = %s\n"),
+ tdep->have_s_pseudos? "true" : "false");
+ gdb_printf (file, _("arm_dump_tdep: s_pseudo_base = %i\n"),
+ (int) tdep->s_pseudo_base);
+ gdb_printf (file, _("arm_dump_tdep: s_pseudo_count = %i\n"),
+ (int) tdep->s_pseudo_count);
+ gdb_printf (file, _("arm_dump_tdep: have_q_pseudos = %s\n"),
+ tdep->have_q_pseudos? "true" : "false");
+ gdb_printf (file, _("arm_dump_tdep: q_pseudo_base = %i\n"),
+ (int) tdep->q_pseudo_base);
+ gdb_printf (file, _("arm_dump_tdep: q_pseudo_count = %i\n"),
+ (int) tdep->q_pseudo_count);
+ gdb_printf (file, _("arm_dump_tdep: have_neon = %i\n"),
+ (int) tdep->have_neon);
+ gdb_printf (file, _("arm_dump_tdep: have_mve = %s\n"),
+ tdep->have_mve? "yes" : "no");
+ gdb_printf (file, _("arm_dump_tdep: mve_vpr_regnum = %i\n"),
+ tdep->mve_vpr_regnum);
+ gdb_printf (file, _("arm_dump_tdep: mve_pseudo_base = %i\n"),
+ tdep->mve_pseudo_base);
+ gdb_printf (file, _("arm_dump_tdep: mve_pseudo_count = %i\n"),
+ tdep->mve_pseudo_count);
+ gdb_printf (file, _("arm_dump_tdep: m_profile_msp_regnum = %i\n"),
+ tdep->m_profile_msp_regnum);
+ gdb_printf (file, _("arm_dump_tdep: m_profile_psp_regnum = %i\n"),
+ tdep->m_profile_psp_regnum);
+ gdb_printf (file, _("arm_dump_tdep: m_profile_msp_ns_regnum = %i\n"),
+ tdep->m_profile_msp_ns_regnum);
+ gdb_printf (file, _("arm_dump_tdep: m_profile_psp_ns_regnum = %i\n"),
+ tdep->m_profile_psp_ns_regnum);
+ gdb_printf (file, _("arm_dump_tdep: m_profile_msp_s_regnum = %i\n"),
+ tdep->m_profile_msp_s_regnum);
+ gdb_printf (file, _("arm_dump_tdep: m_profile_psp_s_regnum = %i\n"),
+ tdep->m_profile_psp_s_regnum);
+ gdb_printf (file, _("arm_dump_tdep: Lowest pc = 0x%lx\n"),
+ (unsigned long) tdep->lowest_pc);
+ gdb_printf (file, _("arm_dump_tdep: have_pacbti = %s\n"),
+ tdep->have_pacbti? "yes" : "no");
+ gdb_printf (file, _("arm_dump_tdep: pacbti_pseudo_base = %i\n"),
+ tdep->pacbti_pseudo_base);
+ gdb_printf (file, _("arm_dump_tdep: pacbti_pseudo_count = %i\n"),
+ tdep->pacbti_pseudo_count);
+ gdb_printf (file, _("arm_dump_tdep: is_m = %s\n"),
+ tdep->is_m? "yes" : "no");
}
#if GDB_SELF_TEST
@@ -9802,6 +10525,8 @@ _initialize_arm_tdep ()
size_t offset = strlen ("reg-names-");
const char *style = disasm_options->name[i];
valid_disassembly_styles[j++] = &style[offset];
+ if (strcmp (&style[offset], "std") == 0)
+ disassembly_style = &style[offset];
length = snprintf (rdptr, rest, "%s - %s\n", &style[offset],
disasm_options->description[i]);
rdptr += length;
@@ -9868,6 +10593,15 @@ vfp - VFP co-processor."),
NULL, NULL, arm_show_force_mode,
&setarmcmdlist, &showarmcmdlist);
+ /* Add a command to stop triggering security exceptions when
+ unwinding exception stacks. */
+ add_setshow_boolean_cmd ("unwind-secure-frames", no_class, &arm_unwind_secure_frames,
+ _("Set usage of non-secure to secure exception stack unwinding."),
+ _("Show usage of non-secure to secure exception stack unwinding."),
+ _("When on, the debugger can trigger memory access traps."),
+ NULL, arm_show_unwind_secure_frames,
+ &setarmcmdlist, &showarmcmdlist);
+
/* Debugging flag. */
add_setshow_boolean_cmd ("arm", class_maintenance, &arm_debug,
_("Set ARM debugging."),
@@ -9982,18 +10716,18 @@ enum arm_record_result
ARM_RECORD_FAILURE = 1
};
-typedef enum
+enum arm_record_strx_t
{
ARM_RECORD_STRH=1,
ARM_RECORD_STRD
-} arm_record_strx_t;
+};
-typedef enum
+enum record_type_t
{
ARM_RECORD=1,
THUMB_RECORD,
THUMB2_RECORD
-} record_type_t;
+};
static int
@@ -11328,10 +12062,10 @@ arm_record_b_bl (insn_decode_record *arm_insn_r)
static int
arm_record_unsupported_insn (insn_decode_record *arm_insn_r)
{
- fprintf_unfiltered (gdb_stderr,
- _("Process record does not support instruction "
- "0x%0x at address %s.\n"),arm_insn_r->arm_insn,
- paddress (arm_insn_r->gdbarch, arm_insn_r->this_addr));
+ gdb_printf (gdb_stderr,
+ _("Process record does not support instruction "
+ "0x%0x at address %s.\n"),arm_insn_r->arm_insn,
+ paddress (arm_insn_r->gdbarch, arm_insn_r->this_addr));
return -1;
}
@@ -11917,7 +12651,7 @@ arm_record_coproc_data_proc (insn_decode_record *arm_insn_r)
}
else
{
- fprintf_unfiltered (gdb_stderr, _("no syscall record support\n"));
+ gdb_printf (gdb_stderr, _("no syscall record support\n"));
return -1;
}
}
@@ -12349,12 +13083,12 @@ thumb_record_misc (insn_decode_record *thumb_insn_r)
record_buf[1] = ARM_LR_REGNUM;
thumb_insn_r->reg_rec_count = 2;
/* We need to save SPSR value, which is not yet done. */
- fprintf_unfiltered (gdb_stderr,
- _("Process record does not support instruction "
- "0x%0x at address %s.\n"),
- thumb_insn_r->arm_insn,
- paddress (thumb_insn_r->gdbarch,
- thumb_insn_r->this_addr));
+ gdb_printf (gdb_stderr,
+ _("Process record does not support instruction "
+ "0x%0x at address %s.\n"),
+ thumb_insn_r->arm_insn,
+ paddress (thumb_insn_r->gdbarch,
+ thumb_insn_r->this_addr));
return -1;
case 0xf:
@@ -12442,7 +13176,7 @@ thumb_record_ldm_stm_swi (insn_decode_record *thumb_insn_r)
}
else
{
- fprintf_unfiltered (gdb_stderr, _("no syscall record support\n"));
+ gdb_printf (gdb_stderr, _("no syscall record support\n"));
return -1;
}
}
@@ -13353,11 +14087,11 @@ decode_insn (abstract_memory_reader &reader, insn_decode_record *arm_record,
{
if (record_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- _("Process record: error reading memory at "
- "addr %s len = %d.\n"),
- paddress (arm_record->gdbarch,
- arm_record->this_addr), insn_size);
+ gdb_printf (gdb_stdlog,
+ _("Process record: error reading memory at "
+ "addr %s len = %d.\n"),
+ paddress (arm_record->gdbarch,
+ arm_record->this_addr), insn_size);
}
return -1;
}
@@ -13568,7 +14302,7 @@ arm_analyze_prologue_test ()
test_arm_instruction_reader mem_reader (insns);
arm_prologue_cache cache;
- cache.saved_regs = trad_frame_alloc_saved_regs (gdbarch);
+ arm_cache_init (&cache, gdbarch);
arm_analyze_prologue (gdbarch, 0, sizeof (insns) - 1, &cache, mem_reader);
}
@@ -13612,9 +14346,9 @@ arm_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
if (record_debug > 1)
{
- fprintf_unfiltered (gdb_stdlog, "Process record: arm_process_record "
- "addr = %s\n",
- paddress (gdbarch, arm_record.this_addr));
+ gdb_printf (gdb_stdlog, "Process record: arm_process_record "
+ "addr = %s\n",
+ paddress (gdbarch, arm_record.this_addr));
}
instruction_reader reader;
@@ -13622,11 +14356,11 @@ arm_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
{
if (record_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- _("Process record: error reading memory at "
- "addr %s len = %d.\n"),
- paddress (arm_record.gdbarch,
- arm_record.this_addr), 2);
+ gdb_printf (gdb_stdlog,
+ _("Process record: error reading memory at "
+ "addr %s len = %d.\n"),
+ paddress (arm_record.gdbarch,
+ arm_record.this_addr), 2);
}
return -1;
}
@@ -13697,14 +14431,14 @@ arm_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
/* See arm-tdep.h. */
const target_desc *
-arm_read_description (arm_fp_type fp_type)
+arm_read_description (arm_fp_type fp_type, bool tls)
{
- struct target_desc *tdesc = tdesc_arm_list[fp_type];
+ struct target_desc *tdesc = tdesc_arm_list[fp_type][tls];
if (tdesc == nullptr)
{
- tdesc = arm_create_target_description (fp_type);
- tdesc_arm_list[fp_type] = tdesc;
+ tdesc = arm_create_target_description (fp_type, tls);
+ tdesc_arm_list[fp_type][tls] = tdesc;
}
return tdesc;
diff --git a/gdb/arm-tdep.h b/gdb/arm-tdep.h
index 8a9f618539f..0fc4774a20c 100644
--- a/gdb/arm-tdep.h
+++ b/gdb/arm-tdep.h
@@ -119,7 +119,25 @@ struct arm_gdbarch_tdep : gdbarch_tdep
int mve_pseudo_base = 0; /* Number of the first MVE pseudo register. */
int mve_pseudo_count = 0; /* Total number of MVE pseudo registers. */
+ bool have_pacbti = false; /* True if we have the ARMv8.1-m PACBTI
+ extensions. */
+ int pacbti_pseudo_base = 0; /* Number of the first PACBTI pseudo
+ register. */
+ int pacbti_pseudo_count = 0; /* Total number of PACBTI pseudo registers. */
+
+ int m_profile_msp_regnum = ARM_SP_REGNUM; /* M-profile MSP register number. */
+ int m_profile_psp_regnum = ARM_SP_REGNUM; /* M-profile PSP register number. */
+
+ /* Secure and Non-secure stack pointers with security extension. */
+ int m_profile_msp_ns_regnum = ARM_SP_REGNUM; /* M-profile MSP_NS register number. */
+ int m_profile_psp_ns_regnum = ARM_SP_REGNUM; /* M-profile PSP_NS register number. */
+ int m_profile_msp_s_regnum = ARM_SP_REGNUM; /* M-profile MSP_S register number. */
+ int m_profile_psp_s_regnum = ARM_SP_REGNUM; /* M-profile PSP_S register number. */
+
+ int tls_regnum = 0; /* Number of the tpidruro register. */
+
bool is_m = false; /* Does the target follow the "M" profile. */
+ bool have_sec_ext = false; /* Do we have security extensions? */
CORE_ADDR lowest_pc = 0; /* Lowest address at which instructions
will appear. */
@@ -301,7 +319,7 @@ extern void
const struct regcache *regcache);
/* Get the correct Arm target description with given FP hardware type. */
-const target_desc *arm_read_description (arm_fp_type fp_type);
+const target_desc *arm_read_description (arm_fp_type fp_type, bool tls);
/* Get the correct Arm M-Profile target description with given hardware
type. */
diff --git a/gdb/auto-load.c b/gdb/auto-load.c
index 98b1373d57f..b6056f5d60a 100644
--- a/gdb/auto-load.c
+++ b/gdb/auto-load.c
@@ -21,7 +21,7 @@
#include <ctype.h>
#include "auto-load.h"
#include "progspace.h"
-#include "gdb_regex.h"
+#include "gdbsupport/gdb_regex.h"
#include "ui-out.h"
#include "filenames.h"
#include "command.h"
@@ -51,6 +51,9 @@
followed by the path of a python script to load. */
#define AUTO_SECTION_NAME ".debug_gdb_scripts"
+/* The section to look in for the name of a separate debug file. */
+#define DEBUGLINK_SECTION_NAME ".gnu_debuglink"
+
static void maybe_print_unsupported_script_warning
(struct auto_load_pspace_info *, struct objfile *objfile,
const struct extension_language_defn *language,
@@ -71,9 +74,9 @@ static void
show_debug_auto_load (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Debugging output for files "
- "of 'set auto-load ...' is %s.\n"),
- value);
+ gdb_printf (file, _("Debugging output for files "
+ "of 'set auto-load ...' is %s.\n"),
+ value);
}
/* User-settable option to enable/disable auto-loading of GDB_AUTO_FILE_NAME
@@ -89,9 +92,9 @@ static void
show_auto_load_gdb_scripts (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Auto-loading of canned sequences of commands "
- "scripts is %s.\n"),
- value);
+ gdb_printf (file, _("Auto-loading of canned sequences of commands "
+ "scripts is %s.\n"),
+ value);
}
/* See auto-load.h. */
@@ -129,9 +132,9 @@ static void
show_auto_load_local_gdbinit (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Auto-loading of .gdbinit script from current "
- "directory is %s.\n"),
- value);
+ gdb_printf (file, _("Auto-loading of .gdbinit script from current "
+ "directory is %s.\n"),
+ value);
}
/* Directory list from which to load auto-loaded scripts. It is not checked
@@ -155,9 +158,9 @@ static void
show_auto_load_dir (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("List of directories from which to load "
- "auto-loaded scripts is %s.\n"),
- value);
+ gdb_printf (file, _("List of directories from which to load "
+ "auto-loaded scripts is %s.\n"),
+ value);
}
/* Directory list safe to hold auto-loaded files. It is not checked for
@@ -272,12 +275,12 @@ show_auto_load_safe_path (struct ui_file *file, int from_tty,
for (cs = value; *cs && (*cs == DIRNAME_SEPARATOR || IS_DIR_SEPARATOR (*cs));
cs++);
if (*cs == 0)
- fprintf_filtered (file, _("Auto-load files are safe to load from any "
- "directory.\n"));
+ gdb_printf (file, _("Auto-load files are safe to load from any "
+ "directory.\n"));
else
- fprintf_filtered (file, _("List of directories from which it is safe to "
- "auto-load files is %s.\n"),
- value);
+ gdb_printf (file, _("List of directories from which it is safe to "
+ "auto-load files is %s.\n"),
+ value);
}
/* "add-auto-load-safe-path" command for the auto_load_safe_path configuration
@@ -473,18 +476,21 @@ file_is_auto_load_safe (const char *filename)
}
}
- printf_filtered (_("\
+ gdb_printf (_("\
To enable execution of this file add\n\
\tadd-auto-load-safe-path %s\n\
-line to your configuration file \"%s\".\n\
+line to your configuration file \"%ps\".\n\
To completely disable this security protection add\n\
\tset auto-load safe-path /\n\
-line to your configuration file \"%s\".\n\
+line to your configuration file \"%ps\".\n\
For more information about this security protection see the\n\
\"Auto-loading safe path\" section in the GDB manual. E.g., run from the shell:\n\
\tinfo \"(gdb)Auto-loading safe path\"\n"),
filename_real.get (),
- home_config.c_str (), home_config.c_str ());
+ styled_string (file_name_style.style (),
+ home_config.c_str ()),
+ styled_string (file_name_style.style (),
+ home_config.c_str ()));
advice_printed = true;
}
@@ -727,8 +733,8 @@ auto_load_objfile_script_1 (struct objfile *objfile, const char *realname,
gdb_file_up input = gdb_fopen_cloexec (filename.c_str (), "r");
debugfile = filename.c_str ();
- auto_load_debug_printf ("Attempted file \"%s\" %s.",
- debugfile,
+ auto_load_debug_printf ("Attempted file \"%ps\" %s.",
+ styled_string (file_name_style.style (), debugfile),
input != nullptr ? "exists" : "does not exist");
std::string debugfile_holder;
@@ -757,8 +763,9 @@ auto_load_objfile_script_1 (struct objfile *objfile, const char *realname,
input = gdb_fopen_cloexec (debugfile, "r");
- auto_load_debug_printf ("Attempted file \"%s\" %s.",
- debugfile,
+ auto_load_debug_printf ("Attempted file \"%ps\" %s.",
+ styled_string (file_name_style.style (),
+ debugfile),
(input != nullptr
? "exists"
: "does not exist"));
@@ -820,24 +827,60 @@ auto_load_objfile_script (struct objfile *objfile,
gdb::unique_xmalloc_ptr<char> realname
= gdb_realpath (objfile_name (objfile));
- if (!auto_load_objfile_script_1 (objfile, realname.get (), language))
+ if (auto_load_objfile_script_1 (objfile, realname.get (), language))
+ return;
+
+ /* For Windows/DOS .exe executables, strip the .exe suffix, so that
+ FOO-gdb.gdb could be used for FOO.exe, and try again. */
+
+ size_t len = strlen (realname.get ());
+ const size_t lexe = sizeof (".exe") - 1;
+
+ if (len > lexe && strcasecmp (realname.get () + len - lexe, ".exe") == 0)
{
- /* For Windows/DOS .exe executables, strip the .exe suffix, so that
- FOO-gdb.gdb could be used for FOO.exe, and try again. */
+ len -= lexe;
+ realname.get ()[len] = '\0';
+
+ auto_load_debug_printf
+ ("Stripped .exe suffix, retrying with \"%s\".", realname.get ());
+
+ auto_load_objfile_script_1 (objfile, realname.get (), language);
+ return;
+ }
- size_t len = strlen (realname.get ());
- const size_t lexe = sizeof (".exe") - 1;
+ /* If OBJFILE is a separate debug file and its name does not match
+ the name given in the parent's .gnu_debuglink section, try to
+ find the auto-load script using the parent's path and the
+ debuglink name. */
+
+ struct objfile *parent = objfile->separate_debug_objfile_backlink;
+ if (parent != nullptr)
+ {
+ unsigned long crc32;
+ gdb::unique_xmalloc_ptr<char> debuglink
+ (bfd_get_debug_link_info (parent->obfd, &crc32));
- if (len > lexe && strcasecmp (realname.get () + len - lexe, ".exe") == 0)
+ if (debuglink.get () != nullptr
+ && strcmp (debuglink.get (), lbasename (realname.get ())) != 0)
{
- len -= lexe;
- realname.get ()[len] = '\0';
+ /* Replace the last component of the parent's path with the
+ debuglink name. */
- auto_load_debug_printf
- ("auto-load: Stripped .exe suffix, retrying with \"%s\".",
- realname.get ());
+ std::string p_realname = gdb_realpath (objfile_name (parent)).get ();
+ size_t last = p_realname.find_last_of ('/');
- auto_load_objfile_script_1 (objfile, realname.get (), language);
+ if (last != std::string::npos)
+ {
+ p_realname.replace (last + 1, std::string::npos,
+ debuglink.get ());
+
+ auto_load_debug_printf
+ ("Debug filename mismatch, retrying with \"%s\".",
+ p_realname.c_str ());
+
+ auto_load_objfile_script_1 (objfile,
+ p_realname.c_str (), language);
+ }
}
}
}
@@ -1315,15 +1358,15 @@ static void
info_auto_load_local_gdbinit (const char *args, int from_tty)
{
if (auto_load_local_gdbinit_pathname == NULL)
- printf_filtered (_("Local .gdbinit file was not found.\n"));
+ gdb_printf (_("Local .gdbinit file was not found.\n"));
else if (auto_load_local_gdbinit_loaded)
- printf_filtered (_("Local .gdbinit file \"%ps\" has been loaded.\n"),
- styled_string (file_name_style.style (),
- auto_load_local_gdbinit_pathname));
+ gdb_printf (_("Local .gdbinit file \"%ps\" has been loaded.\n"),
+ styled_string (file_name_style.style (),
+ auto_load_local_gdbinit_pathname));
else
- printf_filtered (_("Local .gdbinit file \"%ps\" has not been loaded.\n"),
- styled_string (file_name_style.style (),
- auto_load_local_gdbinit_pathname));
+ gdb_printf (_("Local .gdbinit file \"%ps\" has not been loaded.\n"),
+ styled_string (file_name_style.style (),
+ auto_load_local_gdbinit_pathname));
}
/* Print an "unsupported script" warning if it has not already been printed.
diff --git a/gdb/auxv.c b/gdb/auxv.c
index 36ef51f3aed..8e175138f5d 100644
--- a/gdb/auxv.c
+++ b/gdb/auxv.c
@@ -94,14 +94,14 @@ ld_so_xfer_auxv (gdb_byte *readbuf,
if (msym.minsym == NULL)
return TARGET_XFER_E_IO;
- if (MSYMBOL_SIZE (msym.minsym) != ptr_size)
+ if (msym.minsym->size () != ptr_size)
return TARGET_XFER_E_IO;
/* POINTER_ADDRESS is a location where the `_dl_auxv' variable
resides. DATA_ADDRESS is the inferior value present in
`_dl_auxv', therefore the real inferior AUXV address. */
- pointer_address = BMSYMBOL_VALUE_ADDRESS (msym);
+ pointer_address = msym.value_address ();
/* The location of the _dl_auxv symbol may no longer be correct if
ld.so runs at a different address than the one present in the
@@ -414,15 +414,15 @@ fprint_auxv_entry (struct ui_file *file, const char *name,
const char *description, enum auxv_format format,
CORE_ADDR type, CORE_ADDR val)
{
- fprintf_filtered (file, ("%-4s %-20s %-30s "),
- plongest (type), name, description);
+ gdb_printf (file, ("%-4s %-20s %-30s "),
+ plongest (type), name, description);
switch (format)
{
case AUXV_FORMAT_DEC:
- fprintf_filtered (file, ("%s\n"), plongest (val));
+ gdb_printf (file, ("%s\n"), plongest (val));
break;
case AUXV_FORMAT_HEX:
- fprintf_filtered (file, ("%s\n"), paddress (target_gdbarch (), val));
+ gdb_printf (file, ("%s\n"), paddress (target_gdbarch (), val));
break;
case AUXV_FORMAT_STR:
{
@@ -430,10 +430,10 @@ fprint_auxv_entry (struct ui_file *file, const char *name,
get_user_print_options (&opts);
if (opts.addressprint)
- fprintf_filtered (file, ("%s "), paddress (target_gdbarch (), val));
+ gdb_printf (file, ("%s "), paddress (target_gdbarch (), val));
val_print_string (builtin_type (target_gdbarch ())->builtin_char,
NULL, val, -1, file, &opts);
- fprintf_filtered (file, ("\n"));
+ gdb_printf (file, ("\n"));
}
break;
}
diff --git a/gdb/avr-tdep.c b/gdb/avr-tdep.c
index 7f79ef94bdf..9e73c507b2e 100644
--- a/gdb/avr-tdep.c
+++ b/gdb/avr-tdep.c
@@ -664,12 +664,12 @@ avr_scan_prologue (struct gdbarch *gdbarch, CORE_ADDR pc_beg, CORE_ADDR pc_end,
/* Resolve offset (in words) from __prologue_saves__ symbol.
Which is a pushes count in `-mcall-prologues' mode */
- num_pushes = AVR_MAX_PUSHES - (i - BMSYMBOL_VALUE_ADDRESS (msymbol)) / 2;
+ num_pushes = AVR_MAX_PUSHES - (i - msymbol.value_address ()) / 2;
if (num_pushes > AVR_MAX_PUSHES)
{
- fprintf_unfiltered (gdb_stderr, _("Num pushes too large: %d\n"),
- num_pushes);
+ gdb_printf (gdb_stderr, _("Num pushes too large: %d\n"),
+ num_pushes);
num_pushes = 0;
}
@@ -1574,9 +1574,9 @@ avr_io_reg_read_command (const char *args, int from_tty)
if (!buf)
{
- fprintf_unfiltered (gdb_stderr,
- _("ERR: info io_registers NOT supported "
- "by current target\n"));
+ gdb_printf (gdb_stderr,
+ _("ERR: info io_registers NOT supported "
+ "by current target\n"));
return;
}
@@ -1584,12 +1584,12 @@ avr_io_reg_read_command (const char *args, int from_tty)
if (sscanf (bufstr, "%x", &nreg) != 1)
{
- fprintf_unfiltered (gdb_stderr,
- _("Error fetching number of io registers\n"));
+ gdb_printf (gdb_stderr,
+ _("Error fetching number of io registers\n"));
return;
}
- printf_filtered (_("Target has %u io registers:\n\n"), nreg);
+ gdb_printf (_("Target has %u io registers:\n\n"), nreg);
/* only fetch up to 8 registers at a time to keep the buffer small */
int step = 8;
@@ -1607,9 +1607,9 @@ avr_io_reg_read_command (const char *args, int from_tty)
if (!buf)
{
- fprintf_unfiltered (gdb_stderr,
- _("ERR: error reading avr.io_reg:%x,%x\n"),
- i, j);
+ gdb_printf (gdb_stderr,
+ _("ERR: error reading avr.io_reg:%x,%x\n"),
+ i, j);
return;
}
@@ -1618,7 +1618,7 @@ avr_io_reg_read_command (const char *args, int from_tty)
{
if (sscanf (p, "%[^,],%x;", query, &val) == 2)
{
- printf_filtered ("[%02x] %-15s : %02x\n", k, query, val);
+ gdb_printf ("[%02x] %-15s : %02x\n", k, query, val);
while ((*p != ';') && (*p != '\0'))
p++;
p++; /* skip over ';' */
diff --git a/gdb/ax-gdb.c b/gdb/ax-gdb.c
index 0383ec6c1a7..f8ea8adc626 100644
--- a/gdb/ax-gdb.c
+++ b/gdb/ax-gdb.c
@@ -499,7 +499,7 @@ gen_offset (struct agent_expr *ax, int offset)
static void
gen_sym_offset (struct agent_expr *ax, struct symbol *var)
{
- gen_offset (ax, SYMBOL_VALUE (var));
+ gen_offset (ax, var->value_longest ());
}
@@ -510,7 +510,7 @@ static void
gen_var_ref (struct agent_expr *ax, struct axs_value *value, struct symbol *var)
{
/* Dereference any typedefs. */
- value->type = check_typedef (SYMBOL_TYPE (var));
+ value->type = check_typedef (var->type ());
value->optimized_out = 0;
if (SYMBOL_COMPUTED_OPS (var) != NULL)
@@ -520,15 +520,15 @@ gen_var_ref (struct agent_expr *ax, struct axs_value *value, struct symbol *var)
}
/* I'm imitating the code in read_var_value. */
- switch (SYMBOL_CLASS (var))
+ switch (var->aclass ())
{
case LOC_CONST: /* A constant, like an enum value. */
- ax_const_l (ax, (LONGEST) SYMBOL_VALUE (var));
+ ax_const_l (ax, (LONGEST) var->value_longest ());
value->kind = axs_rvalue;
break;
case LOC_LABEL: /* A goto label, being used as a value. */
- ax_const_l (ax, (LONGEST) SYMBOL_VALUE_ADDRESS (var));
+ ax_const_l (ax, (LONGEST) var->value_address ());
value->kind = axs_rvalue;
break;
@@ -540,7 +540,7 @@ gen_var_ref (struct agent_expr *ax, struct axs_value *value, struct symbol *var)
/* Variable at a fixed location in memory. Easy. */
case LOC_STATIC:
/* Push the address of the variable. */
- ax_const_l (ax, SYMBOL_VALUE_ADDRESS (var));
+ ax_const_l (ax, var->value_address ());
value->kind = axs_lvalue_memory;
break;
@@ -571,7 +571,7 @@ gen_var_ref (struct agent_expr *ax, struct axs_value *value, struct symbol *var)
break;
case LOC_BLOCK:
- ax_const_l (ax, BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (var)));
+ ax_const_l (ax, var->value_block ()->entry_pc ());
value->kind = axs_rvalue;
break;
@@ -603,7 +603,7 @@ gen_var_ref (struct agent_expr *ax, struct axs_value *value, struct symbol *var)
error (_("Couldn't resolve symbol `%s'."), var->print_name ());
/* Push the address of the variable. */
- ax_const_l (ax, BMSYMBOL_VALUE_ADDRESS (msym));
+ ax_const_l (ax, msym.value_address ());
value->kind = axs_lvalue_memory;
}
break;
@@ -1826,6 +1826,25 @@ unop_cast_operation::do_generate_ax (struct expression *exp,
}
void
+unop_extract_operation::do_generate_ax (struct expression *exp,
+ struct agent_expr *ax,
+ struct axs_value *value,
+ struct type *cast_type)
+{
+ std::get<0> (m_storage)->generate_ax (exp, ax, value);
+
+ struct type *to_type = get_type ();
+
+ if (!is_scalar_type (to_type))
+ error (_("can't generate agent expression to extract non-scalar type"));
+
+ if (to_type->is_unsigned ())
+ gen_extend (ax, to_type);
+ else
+ gen_sign_extend (ax, to_type);
+}
+
+void
unop_memval_operation::do_generate_ax (struct expression *exp,
struct agent_expr *ax,
struct axs_value *value,
diff --git a/gdb/ax-general.c b/gdb/ax-general.c
index f85301db4fd..c025aa214b4 100644
--- a/gdb/ax-general.c
+++ b/gdb/ax-general.c
@@ -365,11 +365,11 @@ ax_print (struct ui_file *f, struct agent_expr *x)
{
int i;
- fprintf_filtered (f, _("Scope: %s\n"), paddress (x->gdbarch, x->scope));
- fprintf_filtered (f, _("Reg mask:"));
+ gdb_printf (f, _("Scope: %s\n"), paddress (x->gdbarch, x->scope));
+ gdb_printf (f, _("Reg mask:"));
for (i = 0; i < x->reg_mask_len; ++i)
- fprintf_filtered (f, _(" %02x"), x->reg_mask[i]);
- fprintf_filtered (f, _("\n"));
+ gdb_printf (f, _(" %02x"), x->reg_mask[i]);
+ gdb_printf (f, _("\n"));
/* Check the size of the name array against the number of entries in
the enum, to catch additions that people didn't sync. */
@@ -384,21 +384,21 @@ ax_print (struct ui_file *f, struct agent_expr *x)
if (op >= (sizeof (aop_map) / sizeof (aop_map[0]))
|| !aop_map[op].name)
{
- fprintf_filtered (f, _("%3d <bad opcode %02x>\n"), i, op);
+ gdb_printf (f, _("%3d <bad opcode %02x>\n"), i, op);
i++;
continue;
}
if (i + 1 + aop_map[op].op_size > x->len)
{
- fprintf_filtered (f, _("%3d <incomplete opcode %s>\n"),
- i, aop_map[op].name);
+ gdb_printf (f, _("%3d <incomplete opcode %s>\n"),
+ i, aop_map[op].name);
break;
}
- fprintf_filtered (f, "%3d %s", i, aop_map[op].name);
+ gdb_printf (f, "%3d %s", i, aop_map[op].name);
if (aop_map[op].op_size > 0)
{
- fputs_filtered (" ", f);
+ gdb_puts (" ", f);
print_longest (f, 'd', 0,
read_const (x, i + 1, aop_map[op].op_size));
@@ -412,11 +412,11 @@ ax_print (struct ui_file *f, struct agent_expr *x)
nargs = x->buf[i++];
slen = x->buf[i++];
slen = slen * 256 + x->buf[i++];
- fprintf_filtered (f, _(" \"%s\", %d args"),
- &(x->buf[i]), nargs);
+ gdb_printf (f, _(" \"%s\", %d args"),
+ &(x->buf[i]), nargs);
i += slen - 1;
}
- fprintf_filtered (f, "\n");
+ gdb_printf (f, "\n");
i += 1 + aop_map[op].op_size;
}
}
diff --git a/gdb/bcache.c b/gdb/bcache.c
index c8a5b011598..80ba1f6b6ec 100644
--- a/gdb/bcache.c
+++ b/gdb/bcache.c
@@ -20,7 +20,7 @@
along with this program. If not, see <http://www.gnu.org/licenses/>. */
#include "defs.h"
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
#include "bcache.h"
#include <algorithm>
@@ -245,15 +245,15 @@ print_percentage (int portion, int total)
{
if (total == 0)
/* i18n: Like "Percentage of duplicates, by count: (not applicable)". */
- printf_filtered (_("(not applicable)\n"));
+ gdb_printf (_("(not applicable)\n"));
else
- printf_filtered ("%3d%%\n", (int) (portion * 100.0 / total));
+ gdb_printf ("%3d%%\n", (int) (portion * 100.0 / total));
}
/* Print statistics on BCACHE's memory usage and efficacity at
eliminating duplication. NAME should describe the kind of data
- BCACHE holds. Statistics are printed using `printf_filtered' and
+ BCACHE holds. Statistics are printed using `gdb_printf' and
its ilk. */
void
bcache::print_statistics (const char *type)
@@ -325,59 +325,59 @@ bcache::print_statistics (const char *type)
xfree (entry_size);
}
- printf_filtered (_(" M_Cached '%s' statistics:\n"), type);
- printf_filtered (_(" Total object count: %ld\n"), m_total_count);
- printf_filtered (_(" Unique object count: %lu\n"), m_unique_count);
- printf_filtered (_(" Percentage of duplicates, by count: "));
+ gdb_printf (_(" M_Cached '%s' statistics:\n"), type);
+ gdb_printf (_(" Total object count: %ld\n"), m_total_count);
+ gdb_printf (_(" Unique object count: %lu\n"), m_unique_count);
+ gdb_printf (_(" Percentage of duplicates, by count: "));
print_percentage (m_total_count - m_unique_count, m_total_count);
- printf_filtered ("\n");
+ gdb_printf ("\n");
- printf_filtered (_(" Total object size: %ld\n"), m_total_size);
- printf_filtered (_(" Unique object size: %ld\n"), m_unique_size);
- printf_filtered (_(" Percentage of duplicates, by size: "));
+ gdb_printf (_(" Total object size: %ld\n"), m_total_size);
+ gdb_printf (_(" Unique object size: %ld\n"), m_unique_size);
+ gdb_printf (_(" Percentage of duplicates, by size: "));
print_percentage (m_total_size - m_unique_size, m_total_size);
- printf_filtered ("\n");
+ gdb_printf ("\n");
- printf_filtered (_(" Max entry size: %d\n"), max_entry_size);
- printf_filtered (_(" Average entry size: "));
+ gdb_printf (_(" Max entry size: %d\n"), max_entry_size);
+ gdb_printf (_(" Average entry size: "));
if (m_unique_count > 0)
- printf_filtered ("%ld\n", m_unique_size / m_unique_count);
+ gdb_printf ("%ld\n", m_unique_size / m_unique_count);
else
/* i18n: "Average entry size: (not applicable)". */
- printf_filtered (_("(not applicable)\n"));
- printf_filtered (_(" Median entry size: %d\n"), median_entry_size);
- printf_filtered ("\n");
+ gdb_printf (_("(not applicable)\n"));
+ gdb_printf (_(" Median entry size: %d\n"), median_entry_size);
+ gdb_printf ("\n");
- printf_filtered (_(" \
+ gdb_printf (_(" \
Total memory used by bcache, including overhead: %ld\n"),
- m_structure_size);
- printf_filtered (_(" Percentage memory overhead: "));
+ m_structure_size);
+ gdb_printf (_(" Percentage memory overhead: "));
print_percentage (m_structure_size - m_unique_size, m_unique_size);
- printf_filtered (_(" Net memory savings: "));
+ gdb_printf (_(" Net memory savings: "));
print_percentage (m_total_size - m_structure_size, m_total_size);
- printf_filtered ("\n");
-
- printf_filtered (_(" Hash table size: %3d\n"),
- m_num_buckets);
- printf_filtered (_(" Hash table expands: %lu\n"),
- m_expand_count);
- printf_filtered (_(" Hash table hashes: %lu\n"),
- m_total_count + m_expand_hash_count);
- printf_filtered (_(" Half hash misses: %lu\n"),
- m_half_hash_miss_count);
- printf_filtered (_(" Hash table population: "));
+ gdb_printf ("\n");
+
+ gdb_printf (_(" Hash table size: %3d\n"),
+ m_num_buckets);
+ gdb_printf (_(" Hash table expands: %lu\n"),
+ m_expand_count);
+ gdb_printf (_(" Hash table hashes: %lu\n"),
+ m_total_count + m_expand_hash_count);
+ gdb_printf (_(" Half hash misses: %lu\n"),
+ m_half_hash_miss_count);
+ gdb_printf (_(" Hash table population: "));
print_percentage (occupied_buckets, m_num_buckets);
- printf_filtered (_(" Median hash chain length: %3d\n"),
- median_chain_length);
- printf_filtered (_(" Average hash chain length: "));
+ gdb_printf (_(" Median hash chain length: %3d\n"),
+ median_chain_length);
+ gdb_printf (_(" Average hash chain length: "));
if (m_num_buckets > 0)
- printf_filtered ("%3lu\n", m_unique_count / m_num_buckets);
+ gdb_printf ("%3lu\n", m_unique_count / m_num_buckets);
else
/* i18n: "Average hash chain length: (not applicable)". */
- printf_filtered (_("(not applicable)\n"));
- printf_filtered (_(" Maximum hash chain length: %3d\n"),
- max_chain_length);
- printf_filtered ("\n");
+ gdb_printf (_("(not applicable)\n"));
+ gdb_printf (_(" Maximum hash chain length: %3d\n"),
+ max_chain_length);
+ gdb_printf ("\n");
}
int
diff --git a/gdb/bcache.h b/gdb/bcache.h
index 8b05eada23e..3d41ece8478 100644
--- a/gdb/bcache.h
+++ b/gdb/bcache.h
@@ -157,7 +157,7 @@ struct bcache
/* Print statistics on this bcache's memory usage and efficacity at
eliminating duplication. TYPE should be a string describing the
kind of data this bcache holds. Statistics are printed using
- `printf_filtered' and its ilk. */
+ `gdb_printf' and its ilk. */
void print_statistics (const char *type);
int memory_used ();
diff --git a/gdb/block.c b/gdb/block.c
index b590697a491..39a39df9454 100644
--- a/gdb/block.c
+++ b/gdb/block.c
@@ -21,7 +21,7 @@
#include "block.h"
#include "symtab.h"
#include "symfile.h"
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
#include "cp-support.h"
#include "addrmap.h"
#include "gdbtypes.h"
@@ -47,11 +47,11 @@ block_objfile (const struct block *block)
{
const struct global_block *global_block;
- if (BLOCK_FUNCTION (block) != NULL)
- return symbol_objfile (BLOCK_FUNCTION (block));
+ if (block->function () != nullptr)
+ return block->function ()->objfile ();
global_block = (struct global_block *) block_global_block (block);
- return COMPUNIT_OBJFILE (global_block->compunit_symtab);
+ return global_block->compunit_symtab->objfile ();
}
/* See block. */
@@ -59,8 +59,8 @@ block_objfile (const struct block *block)
struct gdbarch *
block_gdbarch (const struct block *block)
{
- if (BLOCK_FUNCTION (block) != NULL)
- return symbol_arch (BLOCK_FUNCTION (block));
+ if (block->function () != nullptr)
+ return block->function ()->arch ();
return block_objfile (block)->arch ();
}
@@ -80,9 +80,9 @@ contained_in (const struct block *a, const struct block *b,
return true;
/* If A is a function block, then A cannot be contained in B,
except if A was inlined. */
- if (!allow_nested && BLOCK_FUNCTION (a) != NULL && !block_inlined_p (a))
+ if (!allow_nested && a->function () != NULL && !block_inlined_p (a))
return false;
- a = BLOCK_SUPERBLOCK (a);
+ a = a->superblock ();
}
while (a != NULL);
@@ -98,11 +98,11 @@ contained_in (const struct block *a, const struct block *b,
struct symbol *
block_linkage_function (const struct block *bl)
{
- while ((BLOCK_FUNCTION (bl) == NULL || block_inlined_p (bl))
- && BLOCK_SUPERBLOCK (bl) != NULL)
- bl = BLOCK_SUPERBLOCK (bl);
+ while ((bl->function () == NULL || block_inlined_p (bl))
+ && bl->superblock () != NULL)
+ bl = bl->superblock ();
- return BLOCK_FUNCTION (bl);
+ return bl->function ();
}
/* Return the symbol for the function which contains a specified
@@ -113,10 +113,10 @@ block_linkage_function (const struct block *bl)
struct symbol *
block_containing_function (const struct block *bl)
{
- while (BLOCK_FUNCTION (bl) == NULL && BLOCK_SUPERBLOCK (bl) != NULL)
- bl = BLOCK_SUPERBLOCK (bl);
+ while (bl->function () == NULL && bl->superblock () != NULL)
+ bl = bl->superblock ();
- return BLOCK_FUNCTION (bl);
+ return bl->function ();
}
/* Return one if BL represents an inlined function. */
@@ -124,7 +124,7 @@ block_containing_function (const struct block *bl)
int
block_inlined_p (const struct block *bl)
{
- return BLOCK_FUNCTION (bl) != NULL && SYMBOL_INLINED (BLOCK_FUNCTION (bl));
+ return bl->function () != NULL && bl->function ()->is_inlined ();
}
/* A helper function that checks whether PC is in the blockvector BL.
@@ -138,8 +138,8 @@ find_block_in_blockvector (const struct blockvector *bl, CORE_ADDR pc)
/* If we have an addrmap mapping code addresses to blocks, then use
that. */
- if (BLOCKVECTOR_MAP (bl))
- return (const struct block *) addrmap_find (BLOCKVECTOR_MAP (bl), pc);
+ if (bl->map () != nullptr)
+ return (const struct block *) addrmap_find (bl->map (), pc);
/* Otherwise, use binary search to find the last block that starts
before PC.
@@ -147,15 +147,15 @@ find_block_in_blockvector (const struct blockvector *bl, CORE_ADDR pc)
They both have the same START,END values.
Historically this code would choose STATIC_BLOCK over GLOBAL_BLOCK but the
fact that this choice was made was subtle, now we make it explicit. */
- gdb_assert (BLOCKVECTOR_NBLOCKS (bl) >= 2);
+ gdb_assert (bl->blocks ().size () >= 2);
bot = STATIC_BLOCK;
- top = BLOCKVECTOR_NBLOCKS (bl);
+ top = bl->blocks ().size ();
while (top - bot > 1)
{
half = (top - bot + 1) >> 1;
- b = BLOCKVECTOR_BLOCK (bl, bot + half);
- if (BLOCK_START (b) <= pc)
+ b = bl->block (bot + half);
+ if (b->start () <= pc)
bot += half;
else
top = bot + half;
@@ -165,10 +165,10 @@ find_block_in_blockvector (const struct blockvector *bl, CORE_ADDR pc)
while (bot >= STATIC_BLOCK)
{
- b = BLOCKVECTOR_BLOCK (bl, bot);
- if (!(BLOCK_START (b) <= pc))
+ b = bl->block (bot);
+ if (!(b->start () <= pc))
return NULL;
- if (BLOCK_END (b) > pc)
+ if (b->end () > pc)
return b;
bot--;
}
@@ -197,7 +197,7 @@ blockvector_for_pc_sect (CORE_ADDR pc, struct obj_section *section,
return 0;
}
- bl = COMPUNIT_BLOCKVECTOR (cust);
+ bl = cust->blockvector ();
/* Then search that symtab for the smallest block that wins. */
b = find_block_in_blockvector (bl, pc);
@@ -295,11 +295,11 @@ block_for_pc (CORE_ADDR pc)
const char *
block_scope (const struct block *block)
{
- for (; block != NULL; block = BLOCK_SUPERBLOCK (block))
+ for (; block != NULL; block = block->superblock ())
{
- if (BLOCK_NAMESPACE (block) != NULL
- && BLOCK_NAMESPACE (block)->scope != NULL)
- return BLOCK_NAMESPACE (block)->scope;
+ if (block->namespace_info () != NULL
+ && block->namespace_info ()->scope != NULL)
+ return block->namespace_info ()->scope;
}
return "";
@@ -315,7 +315,7 @@ block_set_scope (struct block *block, const char *scope,
{
block_initialize_namespace (block, obstack);
- BLOCK_NAMESPACE (block)->scope = scope;
+ block->namespace_info ()->scope = scope;
}
/* This returns the using directives list associated with BLOCK, if
@@ -324,10 +324,10 @@ block_set_scope (struct block *block, const char *scope,
struct using_direct *
block_using (const struct block *block)
{
- if (block == NULL || BLOCK_NAMESPACE (block) == NULL)
+ if (block == NULL || block->namespace_info () == NULL)
return NULL;
else
- return BLOCK_NAMESPACE (block)->using_decl;
+ return block->namespace_info ()->using_decl;
}
/* Set BLOCK's using member to USING; if needed, allocate memory via
@@ -341,17 +341,17 @@ block_set_using (struct block *block,
{
block_initialize_namespace (block, obstack);
- BLOCK_NAMESPACE (block)->using_decl = using_decl;
+ block->namespace_info ()->using_decl = using_decl;
}
-/* If BLOCK_NAMESPACE (block) is NULL, allocate it via OBSTACK and
+/* If block->namespace_info () is NULL, allocate it via OBSTACK and
initialize its members to zero. */
static void
block_initialize_namespace (struct block *block, struct obstack *obstack)
{
- if (BLOCK_NAMESPACE (block) == NULL)
- BLOCK_NAMESPACE (block) = new (obstack) struct block_namespace_info ();
+ if (block->namespace_info () == NULL)
+ block->set_namespace_info (new (obstack) struct block_namespace_info ());
}
/* Return the static block associated to BLOCK. Return NULL if block
@@ -360,11 +360,11 @@ block_initialize_namespace (struct block *block, struct obstack *obstack)
const struct block *
block_static_block (const struct block *block)
{
- if (block == NULL || BLOCK_SUPERBLOCK (block) == NULL)
+ if (block == NULL || block->superblock () == NULL)
return NULL;
- while (BLOCK_SUPERBLOCK (BLOCK_SUPERBLOCK (block)) != NULL)
- block = BLOCK_SUPERBLOCK (block);
+ while (block->superblock ()->superblock () != NULL)
+ block = block->superblock ();
return block;
}
@@ -378,8 +378,8 @@ block_global_block (const struct block *block)
if (block == NULL)
return NULL;
- while (BLOCK_SUPERBLOCK (block) != NULL)
- block = BLOCK_SUPERBLOCK (block);
+ while (block->superblock () != NULL)
+ block = block->superblock ();
return block;
}
@@ -418,7 +418,7 @@ set_block_compunit_symtab (struct block *block, struct compunit_symtab *cu)
{
struct global_block *gb;
- gdb_assert (BLOCK_SUPERBLOCK (block) == NULL);
+ gdb_assert (block->superblock () == NULL);
gb = (struct global_block *) block;
gdb_assert (gb->compunit_symtab == NULL);
gb->compunit_symtab = cu;
@@ -433,7 +433,7 @@ block_static_link (const struct block *block)
/* Only objfile-owned blocks that materialize top function scopes can have
static links. */
- if (objfile == NULL || BLOCK_FUNCTION (block) == NULL)
+ if (objfile == NULL || block->function () == NULL)
return NULL;
return (struct dynamic_prop *) objfile_lookup_static_link (objfile, block);
@@ -446,7 +446,7 @@ get_block_compunit_symtab (const struct block *block)
{
struct global_block *gb;
- gdb_assert (BLOCK_SUPERBLOCK (block) == NULL);
+ gdb_assert (block->superblock () == NULL);
gb = (struct global_block *) block;
gdb_assert (gb->compunit_symtab != NULL);
return gb->compunit_symtab;
@@ -467,15 +467,15 @@ initialize_block_iterator (const struct block *block,
iter->idx = -1;
- if (BLOCK_SUPERBLOCK (block) == NULL)
+ if (block->superblock () == NULL)
{
which = GLOBAL_BLOCK;
cu = get_block_compunit_symtab (block);
}
- else if (BLOCK_SUPERBLOCK (BLOCK_SUPERBLOCK (block)) == NULL)
+ else if (block->superblock ()->superblock () == NULL)
{
which = STATIC_BLOCK;
- cu = get_block_compunit_symtab (BLOCK_SUPERBLOCK (block));
+ cu = get_block_compunit_symtab (block->superblock ());
}
else
{
@@ -543,9 +543,8 @@ block_iterator_step (struct block_iterator *iterator, int first)
if (cust == NULL)
return NULL;
- block = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (cust),
- iterator->which);
- sym = mdict_iterator_first (BLOCK_MULTIDICT (block),
+ block = cust->blockvector ()->block (iterator->which);
+ sym = mdict_iterator_first (block->multidict (),
&iterator->mdict_iter);
}
else
@@ -571,7 +570,7 @@ block_iterator_first (const struct block *block,
initialize_block_iterator (block, iterator);
if (iterator->which == FIRST_LOCAL_BLOCK)
- return mdict_iterator_first (block->multidict, &iterator->mdict_iter);
+ return mdict_iterator_first (block->multidict (), &iterator->mdict_iter);
return block_iterator_step (iterator, 1);
}
@@ -612,9 +611,8 @@ block_iter_match_step (struct block_iterator *iterator,
if (cust == NULL)
return NULL;
- block = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (cust),
- iterator->which);
- sym = mdict_iter_match_first (BLOCK_MULTIDICT (block), name,
+ block = cust->blockvector ()->block (iterator->which);
+ sym = mdict_iter_match_first (block->multidict (), name,
&iterator->mdict_iter);
}
else
@@ -641,7 +639,7 @@ block_iter_match_first (const struct block *block,
initialize_block_iterator (block, iterator);
if (iterator->which == FIRST_LOCAL_BLOCK)
- return mdict_iter_match_first (block->multidict, name,
+ return mdict_iter_match_first (block->multidict (), name,
&iterator->mdict_iter);
return block_iter_match_step (iterator, name, 1);
@@ -664,8 +662,8 @@ block_iter_match_next (const lookup_name_info &name,
bool
best_symbol (struct symbol *a, const domain_enum domain)
{
- return (SYMBOL_DOMAIN (a) == domain
- && SYMBOL_CLASS (a) != LOC_UNRESOLVED);
+ return (a->domain () == domain
+ && a->aclass () != LOC_UNRESOLVED);
}
/* See block.h. */
@@ -678,18 +676,16 @@ better_symbol (struct symbol *a, struct symbol *b, const domain_enum domain)
if (b == NULL)
return a;
- if (SYMBOL_DOMAIN (a) == domain
- && SYMBOL_DOMAIN (b) != domain)
+ if (a->domain () == domain && b->domain () != domain)
return a;
- if (SYMBOL_DOMAIN (b) == domain
- && SYMBOL_DOMAIN (a) != domain)
+
+ if (b->domain () == domain && a->domain () != domain)
return b;
- if (SYMBOL_CLASS (a) != LOC_UNRESOLVED
- && SYMBOL_CLASS (b) == LOC_UNRESOLVED)
+ if (a->aclass () != LOC_UNRESOLVED && b->aclass () == LOC_UNRESOLVED)
return a;
- if (SYMBOL_CLASS (b) != LOC_UNRESOLVED
- && SYMBOL_CLASS (a) == LOC_UNRESOLVED)
+
+ if (b->aclass () != LOC_UNRESOLVED && a->aclass () == LOC_UNRESOLVED)
return b;
return a;
@@ -716,7 +712,7 @@ block_lookup_symbol (const struct block *block, const char *name,
lookup_name_info lookup_name (name, match_type);
- if (!BLOCK_FUNCTION (block))
+ if (!block->function ())
{
struct symbol *other = NULL;
@@ -731,7 +727,7 @@ block_lookup_symbol (const struct block *block, const char *name,
make sure there is no "better" matching symbol, i.e., one with
exactly the same domain. PR 16253. */
if (symbol_matches_domain (sym->language (),
- SYMBOL_DOMAIN (sym), domain))
+ sym->domain (), domain))
other = better_symbol (other, sym, domain);
}
return other;
@@ -752,10 +748,10 @@ block_lookup_symbol (const struct block *block, const char *name,
ALL_BLOCK_SYMBOLS_WITH_NAME (block, lookup_name, iter, sym)
{
if (symbol_matches_domain (sym->language (),
- SYMBOL_DOMAIN (sym), domain))
+ sym->domain (), domain))
{
sym_found = sym;
- if (!SYMBOL_IS_ARGUMENT (sym))
+ if (!sym->is_argument ())
{
break;
}
@@ -777,12 +773,12 @@ block_lookup_symbol_primary (const struct block *block, const char *name,
lookup_name_info lookup_name (name, symbol_name_match_type::FULL);
/* Verify BLOCK is STATIC_BLOCK or GLOBAL_BLOCK. */
- gdb_assert (BLOCK_SUPERBLOCK (block) == NULL
- || BLOCK_SUPERBLOCK (BLOCK_SUPERBLOCK (block)) == NULL);
+ gdb_assert (block->superblock () == NULL
+ || block->superblock ()->superblock () == NULL);
other = NULL;
- for (sym
- = mdict_iter_match_first (block->multidict, lookup_name, &mdict_iter);
+ for (sym = mdict_iter_match_first (block->multidict (), lookup_name,
+ &mdict_iter);
sym != NULL;
sym = mdict_iter_match_next (lookup_name, &mdict_iter))
{
@@ -820,7 +816,7 @@ block_lookup_symbol_primary (const struct block *block, const char *name,
STRUCT vs VAR domain symbols. So if a matching symbol is found,
make sure there is no "better" matching symbol, i.e., one with
exactly the same domain. PR 16253. */
- if (symbol_matches_domain (sym->language (), SYMBOL_DOMAIN (sym), domain))
+ if (symbol_matches_domain (sym->language (), sym->domain (), domain))
other = better_symbol (other, sym, domain);
}
@@ -840,14 +836,14 @@ block_find_symbol (const struct block *block, const char *name,
lookup_name_info lookup_name (name, symbol_name_match_type::FULL);
/* Verify BLOCK is STATIC_BLOCK or GLOBAL_BLOCK. */
- gdb_assert (BLOCK_SUPERBLOCK (block) == NULL
- || BLOCK_SUPERBLOCK (BLOCK_SUPERBLOCK (block)) == NULL);
+ gdb_assert (block->superblock () == NULL
+ || block->superblock ()->superblock () == NULL);
ALL_BLOCK_SYMBOLS_WITH_NAME (block, lookup_name, iter, sym)
{
/* MATCHER is deliberately called second here so that it never sees
a non-domain-matching symbol. */
- if (symbol_matches_domain (sym->language (), SYMBOL_DOMAIN (sym), domain)
+ if (symbol_matches_domain (sym->language (), sym->domain (), domain)
&& matcher (sym, data))
return sym;
}
@@ -859,7 +855,7 @@ block_find_symbol (const struct block *block, const char *name,
int
block_find_non_opaque_type (struct symbol *sym, void *data)
{
- return !TYPE_IS_OPAQUE (SYMBOL_TYPE (sym));
+ return !TYPE_IS_OPAQUE (sym->type ());
}
/* See block.h. */
@@ -869,7 +865,7 @@ block_find_non_opaque_type_preferred (struct symbol *sym, void *data)
{
struct symbol **best = (struct symbol **) data;
- if (!TYPE_IS_OPAQUE (SYMBOL_TYPE (sym)))
+ if (!TYPE_IS_OPAQUE (sym->type ()))
return 1;
*best = sym;
return 0;
diff --git a/gdb/block.h b/gdb/block.h
index eedba91ac89..038ce7bd2f3 100644
--- a/gdb/block.h
+++ b/gdb/block.h
@@ -21,6 +21,7 @@
#define BLOCK_H
#include "dictionary.h"
+#include "gdbsupport/array-view.h"
/* Opaque declarations. */
@@ -38,19 +39,35 @@ struct addrmap;
struct blockrange
{
- blockrange (CORE_ADDR startaddr_, CORE_ADDR endaddr_)
- : startaddr (startaddr_),
- endaddr (endaddr_)
+ blockrange (CORE_ADDR start, CORE_ADDR end)
+ : m_start (start),
+ m_end (end)
{
}
+ /* Return this blockrange's start address. */
+ CORE_ADDR start () const
+ { return m_start; }
+
+ /* Set this blockrange's start address. */
+ void set_start (CORE_ADDR start)
+ { m_start = start; }
+
+ /* Return this blockrange's end address. */
+ CORE_ADDR end () const
+ { return m_end; }
+
+ /* Set this blockrange's end address. */
+ void set_end (CORE_ADDR end)
+ { m_end = end; }
+
/* Lowest address in this range. */
- CORE_ADDR startaddr;
+ CORE_ADDR m_start;
/* One past the highest address in the range. */
- CORE_ADDR endaddr;
+ CORE_ADDR m_end;
};
/* Two or more non-contiguous ranges in the same order as that provided
@@ -90,16 +107,112 @@ struct blockranges
struct block
{
+ /* Return this block's start address. */
+ CORE_ADDR start () const
+ { return m_start; }
+
+ /* Set this block's start address. */
+ void set_start (CORE_ADDR start)
+ { m_start = start; }
+
+ /* Return this block's end address. */
+ CORE_ADDR end () const
+ { return m_end; }
+
+ /* Set this block's end address. */
+ void set_end (CORE_ADDR end)
+ { m_end = end; }
+
+ /* Return this block's function symbol. */
+ symbol *function () const
+ { return m_function; }
+
+ /* Set this block's function symbol. */
+ void set_function (symbol *function)
+ { m_function = function; }
+
+ /* Return this block's superblock. */
+ const block *superblock () const
+ { return m_superblock; }
+
+ /* Set this block's superblock. */
+ void set_superblock (const block *superblock)
+ { m_superblock = superblock; }
+
+ /* Return this block's multidict. */
+ multidictionary *multidict () const
+ { return m_multidict; }
+
+ /* Set this block's multidict. */
+ void set_multidict (multidictionary *multidict)
+ { m_multidict = multidict; }
+
+ /* Return this block's namespace info. */
+ block_namespace_info *namespace_info () const
+ { return m_namespace_info; }
+
+ /* Set this block's namespace info. */
+ void set_namespace_info (block_namespace_info *namespace_info)
+ { m_namespace_info = namespace_info; }
+
+ /* Return a view on this block's ranges. */
+ gdb::array_view<blockrange> ranges ()
+ {
+ if (m_ranges == nullptr)
+ return {};
+ else
+ return gdb::make_array_view (m_ranges->range, m_ranges->nranges);
+ }
+
+ /* Const version of the above. */
+ gdb::array_view<const blockrange> ranges () const
+ {
+ if (m_ranges == nullptr)
+ return {};
+ else
+ return gdb::make_array_view (m_ranges->range, m_ranges->nranges);
+ }
+
+ /* Set this block's ranges array. */
+ void set_ranges (blockranges *ranges)
+ { m_ranges = ranges; }
+
+ /* Return true if all addresses within this block are contiguous. */
+ bool is_contiguous () const
+ { return this->ranges ().size () <= 1; }
+
+ /* Return the "entry PC" of this block.
+
+ The entry PC is the lowest (start) address for the block when all addresses
+ within the block are contiguous. If non-contiguous, then use the start
+ address for the first range in the block.
+
+ At the moment, this almost matches what DWARF specifies as the entry
+ pc. (The missing bit is support for DW_AT_entry_pc which should be
+ preferred over range data and the low_pc.)
+
+ Once support for DW_AT_entry_pc is added, I expect that an entry_pc
+ field will be added to one of these data structures. Once that's done,
+ the entry_pc field can be set from the dwarf reader (and other readers
+ too). ENTRY_PC can then be redefined to be less DWARF-centric. */
+
+ CORE_ADDR entry_pc () const
+ {
+ if (this->is_contiguous ())
+ return this->start ();
+ else
+ return this->ranges ()[0].start ();
+ }
/* Addresses in the executable code that are in this block. */
- CORE_ADDR startaddr;
- CORE_ADDR endaddr;
+ CORE_ADDR m_start;
+ CORE_ADDR m_end;
/* The symbol that names this block, if the block is the body of a
function (real or inlined); otherwise, zero. */
- struct symbol *function;
+ struct symbol *m_function;
/* The `struct block' for the containing block, or 0 if none.
@@ -107,22 +220,22 @@ struct block
case of C) is the STATIC_BLOCK. The superblock of the
STATIC_BLOCK is the GLOBAL_BLOCK. */
- const struct block *superblock;
+ const struct block *m_superblock;
/* This is used to store the symbols in the block. */
- struct multidictionary *multidict;
+ struct multidictionary *m_multidict;
/* Contains information about namespace-related info relevant to this block:
using directives and the current namespace scope. */
- struct block_namespace_info *namespace_info;
+ struct block_namespace_info *m_namespace_info;
/* Address ranges for blocks with non-contiguous ranges. If this
is NULL, then there is only one range which is specified by
startaddr and endaddr above. */
- struct blockranges *ranges;
+ struct blockranges *m_ranges;
};
/* The global block is singled out so that we can provide a back-link
@@ -139,72 +252,85 @@ struct global_block
struct compunit_symtab *compunit_symtab;
};
-#define BLOCK_START(bl) (bl)->startaddr
-#define BLOCK_END(bl) (bl)->endaddr
-#define BLOCK_FUNCTION(bl) (bl)->function
-#define BLOCK_SUPERBLOCK(bl) (bl)->superblock
-#define BLOCK_MULTIDICT(bl) (bl)->multidict
-#define BLOCK_NAMESPACE(bl) (bl)->namespace_info
-
-/* Accessor for ranges field within block BL. */
-
-#define BLOCK_RANGES(bl) (bl)->ranges
+struct blockvector
+{
+ /* Return a view on the blocks of this blockvector. */
+ gdb::array_view<struct block *> blocks ()
+ {
+ return gdb::array_view<struct block *> (m_blocks, m_num_blocks);
+ }
-/* Number of ranges within a block. */
+ /* Const version of the above. */
+ gdb::array_view<const struct block *const> blocks () const
+ {
+ const struct block **blocks = (const struct block **) m_blocks;
+ return gdb::array_view<const struct block *const> (blocks, m_num_blocks);
+ }
-#define BLOCK_NRANGES(bl) (bl)->ranges->nranges
+ /* Return the block at index I. */
+ struct block *block (size_t i)
+ { return this->blocks ()[i]; }
-/* Access range array for block BL. */
+ /* Const version of the above. */
+ const struct block *block (size_t i) const
+ { return this->blocks ()[i]; }
-#define BLOCK_RANGE(bl) (bl)->ranges->range
+ /* Set the block at index I. */
+ void set_block (int i, struct block *block)
+ { m_blocks[i] = block; }
-/* Are all addresses within a block contiguous? */
+ /* Set the number of blocks of this blockvector.
-#define BLOCK_CONTIGUOUS_P(bl) (BLOCK_RANGES (bl) == nullptr \
- || BLOCK_NRANGES (bl) <= 1)
+ The storage of blocks is done using a flexible array member, so the number
+ of blocks set here must agree with what was effectively allocated. */
+ void set_num_blocks (int num_blocks)
+ { m_num_blocks = num_blocks; }
-/* Obtain the start address of the Nth range for block BL. */
+ /* Return the number of blocks in this blockvector. */
+ int num_blocks () const
+ { return m_num_blocks; }
-#define BLOCK_RANGE_START(bl,n) (BLOCK_RANGE (bl)[n].startaddr)
+ /* Return the global block of this blockvector. */
+ struct block *global_block ()
+ { return this->block (GLOBAL_BLOCK); }
-/* Obtain the end address of the Nth range for block BL. */
+ /* Const version of the above. */
+ const struct block *global_block () const
+ { return this->block (GLOBAL_BLOCK); }
-#define BLOCK_RANGE_END(bl,n) (BLOCK_RANGE (bl)[n].endaddr)
+ /* Return the static block of this blockvector. */
+ struct block *static_block ()
+ { return this->block (STATIC_BLOCK); }
-/* Define the "entry pc" for a block BL to be the lowest (start) address
- for the block when all addresses within the block are contiguous. If
- non-contiguous, then use the start address for the first range in the
- block.
+ /* Const version of the above. */
+ const struct block *static_block () const
+ { return this->block (STATIC_BLOCK); }
- At the moment, this almost matches what DWARF specifies as the entry
- pc. (The missing bit is support for DW_AT_entry_pc which should be
- preferred over range data and the low_pc.)
+ /* Return the address -> block map of this blockvector. */
+ addrmap *map ()
+ { return m_map; }
- Once support for DW_AT_entry_pc is added, I expect that an entry_pc
- field will be added to one of these data structures. Once that's done,
- the entry_pc field can be set from the dwarf reader (and other readers
- too). BLOCK_ENTRY_PC can then be redefined to be less DWARF-centric. */
+ /* Const version of the above. */
+ const addrmap *map () const
+ { return m_map; }
-#define BLOCK_ENTRY_PC(bl) (BLOCK_CONTIGUOUS_P (bl) \
- ? BLOCK_START (bl) \
- : BLOCK_RANGE_START (bl,0))
+ /* Set this blockvector's address -> block map. */
+ void set_map (addrmap *map)
+ { m_map = map; }
-struct blockvector
-{
- /* Number of blocks in the list. */
- int nblocks;
+private:
/* An address map mapping addresses to blocks in this blockvector.
This pointer is zero if the blocks' start and end addresses are
enough. */
- struct addrmap *map;
+ struct addrmap *m_map;
+
+ /* Number of blocks in the list. */
+ int m_num_blocks;
+
/* The blocks themselves. */
- struct block *block[1];
+ struct block *m_blocks[1];
};
-#define BLOCKVECTOR_NBLOCKS(blocklist) (blocklist)->nblocks
-#define BLOCKVECTOR_BLOCK(blocklist,n) (blocklist)->block[n]
-#define BLOCKVECTOR_MAP(blocklist) ((blocklist)->map)
-
/* Return the objfile of BLOCK, which must be non-NULL. */
extern struct objfile *block_objfile (const struct block *block);
diff --git a/gdb/blockframe.c b/gdb/blockframe.c
index 88595d4fcb0..47772f3b1a6 100644
--- a/gdb/blockframe.c
+++ b/gdb/blockframe.c
@@ -75,7 +75,7 @@ get_frame_block (struct frame_info *frame, CORE_ADDR *addr_in_block)
if (block_inlined_p (bl))
inline_count--;
- bl = BLOCK_SUPERBLOCK (bl);
+ bl = bl->superblock ();
gdb_assert (bl != NULL);
}
@@ -95,15 +95,15 @@ get_pc_function_start (CORE_ADDR pc)
if (symbol)
{
- bl = SYMBOL_BLOCK_VALUE (symbol);
- return BLOCK_ENTRY_PC (bl);
+ bl = symbol->value_block ();
+ return bl->entry_pc ();
}
}
msymbol = lookup_minimal_symbol_by_pc (pc);
if (msymbol.minsym)
{
- CORE_ADDR fstart = BMSYMBOL_VALUE_ADDRESS (msymbol);
+ CORE_ADDR fstart = msymbol.value_address ();
if (find_pc_section (fstart))
return fstart;
@@ -122,10 +122,10 @@ get_frame_function (struct frame_info *frame)
if (bl == NULL)
return NULL;
- while (BLOCK_FUNCTION (bl) == NULL && BLOCK_SUPERBLOCK (bl) != NULL)
- bl = BLOCK_SUPERBLOCK (bl);
+ while (bl->function () == NULL && bl->superblock () != NULL)
+ bl = bl->superblock ();
- return BLOCK_FUNCTION (bl);
+ return bl->function ();
}
@@ -254,10 +254,10 @@ find_pc_partial_function_sym (CORE_ADDR pc,
f = find_pc_sect_function (mapped_pc, section);
if (f != NULL
&& (msymbol.minsym == NULL
- || (BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (f))
- >= BMSYMBOL_VALUE_ADDRESS (msymbol))))
+ || (f->value_block ()->entry_pc ()
+ >= msymbol.value_address ())))
{
- const struct block *b = SYMBOL_BLOCK_VALUE (f);
+ const struct block *b = f->value_block ();
cache_pc_function_sym = f;
cache_pc_function_section = section;
@@ -276,26 +276,26 @@ find_pc_partial_function_sym (CORE_ADDR pc,
comment preceding declaration of find_pc_partial_function
in symtab.h for more information. */
- if (BLOCK_CONTIGUOUS_P (b))
+ if (b->is_contiguous ())
{
- cache_pc_function_low = BLOCK_START (b);
- cache_pc_function_high = BLOCK_END (b);
+ cache_pc_function_low = b->start ();
+ cache_pc_function_high = b->end ();
}
else
{
- int i;
- for (i = 0; i < BLOCK_NRANGES (b); i++)
+ bool found = false;
+ for (const blockrange &range : b->ranges ())
{
- if (BLOCK_RANGE_START (b, i) <= mapped_pc
- && mapped_pc < BLOCK_RANGE_END (b, i))
+ if (range.start () <= mapped_pc && mapped_pc < range.end ())
{
- cache_pc_function_low = BLOCK_RANGE_START (b, i);
- cache_pc_function_high = BLOCK_RANGE_END (b, i);
+ cache_pc_function_low = range.start ();
+ cache_pc_function_high = range.end ();
+ found = true;
break;
}
}
/* Above loop should exit via the break. */
- gdb_assert (i < BLOCK_NRANGES (b));
+ gdb_assert (found);
}
@@ -326,7 +326,7 @@ find_pc_partial_function_sym (CORE_ADDR pc,
return false;
}
- cache_pc_function_low = BMSYMBOL_VALUE_ADDRESS (msymbol);
+ cache_pc_function_low = msymbol.value_address ();
cache_pc_function_sym = msymbol.minsym;
cache_pc_function_section = section;
cache_pc_function_high = minimal_symbol_upper_bound (msymbol);
@@ -390,20 +390,19 @@ find_function_entry_range_from_pc (CORE_ADDR pc, const char **name,
const struct block *block;
bool status = find_pc_partial_function (pc, name, address, endaddr, &block);
- if (status && block != nullptr && !BLOCK_CONTIGUOUS_P (block))
+ if (status && block != nullptr && !block->is_contiguous ())
{
- CORE_ADDR entry_pc = BLOCK_ENTRY_PC (block);
+ CORE_ADDR entry_pc = block->entry_pc ();
- for (int i = 0; i < BLOCK_NRANGES (block); i++)
+ for (const blockrange &range : block->ranges ())
{
- if (BLOCK_RANGE_START (block, i) <= entry_pc
- && entry_pc < BLOCK_RANGE_END (block, i))
+ if (range.start () <= entry_pc && entry_pc < range.end ())
{
if (address != nullptr)
- *address = BLOCK_RANGE_START (block, i);
+ *address = range.start ();
if (endaddr != nullptr)
- *endaddr = BLOCK_RANGE_END (block, i);
+ *endaddr = range.end ();
return status;
}
@@ -425,8 +424,8 @@ find_function_type (CORE_ADDR pc)
{
struct symbol *sym = find_pc_function (pc);
- if (sym != NULL && BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (sym)) == pc)
- return SYMBOL_TYPE (sym);
+ if (sym != NULL && sym->value_block ()->entry_pc () == pc)
+ return sym->type ();
return NULL;
}
diff --git a/gdb/bpf-tdep.c b/gdb/bpf-tdep.c
index 6a7d9acbea2..09030cf8fa1 100644
--- a/gdb/bpf-tdep.c
+++ b/gdb/bpf-tdep.c
@@ -76,7 +76,7 @@ static void
show_bpf_debug (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Debugging of BPF is %s.\n"), value);
+ gdb_printf (file, _("Debugging of BPF is %s.\n"), value);
}
@@ -136,9 +136,9 @@ bpf_gdb_print_insn (bfd_vma memaddr, disassemble_info *info)
static CORE_ADDR
bpf_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc)
{
- fprintf_unfiltered (gdb_stdlog,
- "Skipping prologue: start_pc=%s\n",
- paddress (gdbarch, start_pc));
+ gdb_printf (gdb_stdlog,
+ "Skipping prologue: start_pc=%s\n",
+ paddress (gdbarch, start_pc));
/* XXX: to be completed. */
return start_pc + 0;
}
@@ -252,8 +252,8 @@ bpf_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
function_call_return_method return_method,
CORE_ADDR struct_addr)
{
- fprintf_unfiltered (gdb_stdlog, "Pushing dummy call: sp=%s\n",
- paddress (gdbarch, sp));
+ gdb_printf (gdb_stdlog, "Pushing dummy call: sp=%s\n",
+ paddress (gdbarch, sp));
/* XXX writeme */
return sp;
}
diff --git a/gdb/break-catch-exec.c b/gdb/break-catch-exec.c
new file mode 100644
index 00000000000..ac4ea18ee65
--- /dev/null
+++ b/gdb/break-catch-exec.c
@@ -0,0 +1,222 @@
+/* Everything about exec catchpoints, for GDB.
+
+ Copyright (C) 1986-2022 Free Software Foundation, Inc.
+
+ This file is part of GDB.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#include "defs.h"
+
+#include "annotate.h"
+#include "arch-utils.h"
+#include "breakpoint.h"
+#include "cli/cli-decode.h"
+#include "inferior.h"
+#include "mi/mi-common.h"
+#include "target.h"
+#include "valprint.h"
+
+/* Exec catchpoints. */
+
+/* An instance of this type is used to represent an exec catchpoint.
+ A breakpoint is really of this type iff its ops pointer points to
+ CATCH_EXEC_BREAKPOINT_OPS. */
+
+struct exec_catchpoint : public breakpoint
+{
+ int insert_location (struct bp_location *) override;
+ int remove_location (struct bp_location *,
+ enum remove_bp_reason reason) override;
+ int breakpoint_hit (const struct bp_location *bl,
+ const address_space *aspace,
+ CORE_ADDR bp_addr,
+ const target_waitstatus &ws) override;
+ enum print_stop_action print_it (struct bpstat *bs) override;
+ bool print_one (struct bp_location **) override;
+ void print_mention () override;
+ void print_recreate (struct ui_file *fp) override;
+
+ /* Filename of a program whose exec triggered this catchpoint.
+ This field is only valid immediately after this catchpoint has
+ triggered. */
+ gdb::unique_xmalloc_ptr<char> exec_pathname;
+};
+
+int
+exec_catchpoint::insert_location (struct bp_location *bl)
+{
+ return target_insert_exec_catchpoint (inferior_ptid.pid ());
+}
+
+int
+exec_catchpoint::remove_location (struct bp_location *bl,
+ enum remove_bp_reason reason)
+{
+ return target_remove_exec_catchpoint (inferior_ptid.pid ());
+}
+
+int
+exec_catchpoint::breakpoint_hit (const struct bp_location *bl,
+ const address_space *aspace,
+ CORE_ADDR bp_addr,
+ const target_waitstatus &ws)
+{
+ if (ws.kind () != TARGET_WAITKIND_EXECD)
+ return 0;
+
+ exec_pathname = make_unique_xstrdup (ws.execd_pathname ());
+ return 1;
+}
+
+enum print_stop_action
+exec_catchpoint::print_it (bpstat *bs)
+{
+ struct ui_out *uiout = current_uiout;
+
+ annotate_catchpoint (number);
+ maybe_print_thread_hit_breakpoint (uiout);
+ if (disposition == disp_del)
+ uiout->text ("Temporary catchpoint ");
+ else
+ uiout->text ("Catchpoint ");
+ if (uiout->is_mi_like_p ())
+ {
+ uiout->field_string ("reason", async_reason_lookup (EXEC_ASYNC_EXEC));
+ uiout->field_string ("disp", bpdisp_text (disposition));
+ }
+ uiout->field_signed ("bkptno", number);
+ uiout->text (" (exec'd ");
+ uiout->field_string ("new-exec", exec_pathname.get ());
+ uiout->text ("), ");
+
+ return PRINT_SRC_AND_LOC;
+}
+
+bool
+exec_catchpoint::print_one (struct bp_location **last_loc)
+{
+ struct value_print_options opts;
+ struct ui_out *uiout = current_uiout;
+
+ get_user_print_options (&opts);
+
+ /* Field 4, the address, is omitted (which makes the columns
+ not line up too nicely with the headers, but the effect
+ is relatively readable). */
+ if (opts.addressprint)
+ uiout->field_skip ("addr");
+ annotate_field (5);
+ uiout->text ("exec");
+ if (exec_pathname != NULL)
+ {
+ uiout->text (", program \"");
+ uiout->field_string ("what", exec_pathname.get ());
+ uiout->text ("\" ");
+ }
+
+ if (uiout->is_mi_like_p ())
+ uiout->field_string ("catch-type", "exec");
+
+ return true;
+}
+
+void
+exec_catchpoint::print_mention ()
+{
+ gdb_printf (_("Catchpoint %d (exec)"), number);
+}
+
+/* Implement the "print_recreate" method for exec catchpoints. */
+
+void
+exec_catchpoint::print_recreate (struct ui_file *fp)
+{
+ gdb_printf (fp, "catch exec");
+ print_recreate_thread (this, fp);
+}
+
+/* This function attempts to parse an optional "if <cond>" clause
+ from the arg string. If one is not found, it returns NULL.
+
+ Else, it returns a pointer to the condition string. (It does not
+ attempt to evaluate the string against a particular block.) And,
+ it updates arg to point to the first character following the parsed
+ if clause in the arg string. */
+
+const char *
+ep_parse_optional_if_clause (const char **arg)
+{
+ const char *cond_string;
+
+ if (((*arg)[0] != 'i') || ((*arg)[1] != 'f') || !isspace ((*arg)[2]))
+ return NULL;
+
+ /* Skip the "if" keyword. */
+ (*arg) += 2;
+
+ /* Skip any extra leading whitespace, and record the start of the
+ condition string. */
+ *arg = skip_spaces (*arg);
+ cond_string = *arg;
+
+ /* Assume that the condition occupies the remainder of the arg
+ string. */
+ (*arg) += strlen (cond_string);
+
+ return cond_string;
+}
+
+/* Commands to deal with catching events, such as signals, exceptions,
+ process start/exit, etc. */
+
+static void
+catch_exec_command_1 (const char *arg, int from_tty,
+ struct cmd_list_element *command)
+{
+ struct gdbarch *gdbarch = get_current_arch ();
+ const char *cond_string = NULL;
+ bool temp = command->context () == CATCH_TEMPORARY;
+
+ if (!arg)
+ arg = "";
+ arg = skip_spaces (arg);
+
+ /* The allowed syntax is:
+ catch exec
+ catch exec if <cond>
+
+ First, check if there's an if clause. */
+ cond_string = ep_parse_optional_if_clause (&arg);
+
+ if ((*arg != '\0') && !isspace (*arg))
+ error (_("Junk at end of arguments."));
+
+ std::unique_ptr<exec_catchpoint> c (new exec_catchpoint ());
+ init_catchpoint (c.get (), gdbarch, temp, cond_string);
+ c->exec_pathname.reset ();
+
+ install_breakpoint (0, std::move (c), 1);
+}
+
+void _initialize_break_catch_exec ();
+void
+_initialize_break_catch_exec ()
+{
+ add_catch_command ("exec", _("Catch calls to exec."),
+ catch_exec_command_1,
+ NULL,
+ CATCH_PERMANENT,
+ CATCH_TEMPORARY);
+}
diff --git a/gdb/break-catch-fork.c b/gdb/break-catch-fork.c
new file mode 100644
index 00000000000..eb88e78ed3a
--- /dev/null
+++ b/gdb/break-catch-fork.c
@@ -0,0 +1,256 @@
+/* Everything about vfork catchpoints, for GDB.
+
+ Copyright (C) 1986-2022 Free Software Foundation, Inc.
+
+ This file is part of GDB.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#include "defs.h"
+
+#include "annotate.h"
+#include "arch-utils.h"
+#include "breakpoint.h"
+#include "cli/cli-decode.h"
+#include "inferior.h"
+#include "mi/mi-common.h"
+#include "target.h"
+#include "valprint.h"
+
+/* An instance of this type is used to represent a fork or vfork
+ catchpoint. A breakpoint is really of this type iff its ops pointer points
+ to CATCH_FORK_BREAKPOINT_OPS. */
+
+struct fork_catchpoint : public breakpoint
+{
+ int insert_location (struct bp_location *) override;
+ int remove_location (struct bp_location *,
+ enum remove_bp_reason reason) override;
+ int breakpoint_hit (const struct bp_location *bl,
+ const address_space *aspace,
+ CORE_ADDR bp_addr,
+ const target_waitstatus &ws) override;
+ enum print_stop_action print_it (struct bpstat *bs) override;
+ bool print_one (struct bp_location **) override;
+ void print_mention () override;
+ void print_recreate (struct ui_file *fp) override;
+
+ /* True if the breakpoint is for vfork, false for fork. */
+ bool is_vfork;
+
+ /* Process id of a child process whose forking triggered this
+ catchpoint. This field is only valid immediately after this
+ catchpoint has triggered. */
+ ptid_t forked_inferior_pid;
+};
+
+/* Implement the "insert" method for fork catchpoints. */
+
+int
+fork_catchpoint::insert_location (struct bp_location *bl)
+{
+ if (is_vfork)
+ return target_insert_vfork_catchpoint (inferior_ptid.pid ());
+ else
+ return target_insert_fork_catchpoint (inferior_ptid.pid ());
+}
+
+/* Implement the "remove" method for fork catchpoints. */
+
+int
+fork_catchpoint::remove_location (struct bp_location *bl,
+ enum remove_bp_reason reason)
+{
+ if (is_vfork)
+ return target_remove_vfork_catchpoint (inferior_ptid.pid ());
+ else
+ return target_remove_fork_catchpoint (inferior_ptid.pid ());
+}
+
+/* Implement the "breakpoint_hit" method for fork catchpoints. */
+
+int
+fork_catchpoint::breakpoint_hit (const struct bp_location *bl,
+ const address_space *aspace,
+ CORE_ADDR bp_addr,
+ const target_waitstatus &ws)
+{
+ if (ws.kind () != (is_vfork
+ ? TARGET_WAITKIND_VFORKED
+ : TARGET_WAITKIND_FORKED))
+ return 0;
+
+ forked_inferior_pid = ws.child_ptid ();
+ return 1;
+}
+
+/* Implement the "print_it" method for fork catchpoints. */
+
+enum print_stop_action
+fork_catchpoint::print_it (bpstat *bs)
+{
+ struct ui_out *uiout = current_uiout;
+
+ annotate_catchpoint (number);
+ maybe_print_thread_hit_breakpoint (uiout);
+ if (disposition == disp_del)
+ uiout->text ("Temporary catchpoint ");
+ else
+ uiout->text ("Catchpoint ");
+ if (uiout->is_mi_like_p ())
+ {
+ uiout->field_string ("reason",
+ async_reason_lookup (is_vfork
+ ? EXEC_ASYNC_VFORK
+ : EXEC_ASYNC_FORK));
+ uiout->field_string ("disp", bpdisp_text (disposition));
+ }
+ uiout->field_signed ("bkptno", number);
+ if (is_vfork)
+ uiout->text (" (vforked process ");
+ else
+ uiout->text (" (forked process ");
+ uiout->field_signed ("newpid", forked_inferior_pid.pid ());
+ uiout->text ("), ");
+ return PRINT_SRC_AND_LOC;
+}
+
+/* Implement the "print_one" method for fork catchpoints. */
+
+bool
+fork_catchpoint::print_one (struct bp_location **last_loc)
+{
+ struct value_print_options opts;
+ struct ui_out *uiout = current_uiout;
+
+ get_user_print_options (&opts);
+
+ /* Field 4, the address, is omitted (which makes the columns not
+ line up too nicely with the headers, but the effect is relatively
+ readable). */
+ if (opts.addressprint)
+ uiout->field_skip ("addr");
+ annotate_field (5);
+ const char *name = is_vfork ? "vfork" : "fork";
+ uiout->text (name);
+ if (forked_inferior_pid != null_ptid)
+ {
+ uiout->text (", process ");
+ uiout->field_signed ("what", forked_inferior_pid.pid ());
+ uiout->spaces (1);
+ }
+
+ if (uiout->is_mi_like_p ())
+ uiout->field_string ("catch-type", name);
+
+ return true;
+}
+
+/* Implement the "print_mention" method for fork catchpoints. */
+
+void
+fork_catchpoint::print_mention ()
+{
+ gdb_printf (_("Catchpoint %d (%s)"), number,
+ is_vfork ? "vfork" : "fork");
+}
+
+/* Implement the "print_recreate" method for fork catchpoints. */
+
+void
+fork_catchpoint::print_recreate (struct ui_file *fp)
+{
+ gdb_printf (fp, "catch %s", is_vfork ? "vfork" : "fork");
+ print_recreate_thread (this, fp);
+}
+
+static void
+create_fork_vfork_event_catchpoint (struct gdbarch *gdbarch,
+ bool temp, const char *cond_string,
+ bool is_vfork)
+{
+ std::unique_ptr<fork_catchpoint> c (new fork_catchpoint ());
+
+ init_catchpoint (c.get (), gdbarch, temp, cond_string);
+ c->is_vfork = is_vfork;
+ c->forked_inferior_pid = null_ptid;
+
+ install_breakpoint (0, std::move (c), 1);
+}
+
+enum catch_fork_kind
+{
+ catch_fork_temporary, catch_vfork_temporary,
+ catch_fork_permanent, catch_vfork_permanent
+};
+
+static void
+catch_fork_command_1 (const char *arg, int from_tty,
+ struct cmd_list_element *command)
+{
+ struct gdbarch *gdbarch = get_current_arch ();
+ const char *cond_string = NULL;
+ catch_fork_kind fork_kind;
+
+ fork_kind = (catch_fork_kind) (uintptr_t) command->context ();
+ bool temp = (fork_kind == catch_fork_temporary
+ || fork_kind == catch_vfork_temporary);
+
+ if (!arg)
+ arg = "";
+ arg = skip_spaces (arg);
+
+ /* The allowed syntax is:
+ catch [v]fork
+ catch [v]fork if <cond>
+
+ First, check if there's an if clause. */
+ cond_string = ep_parse_optional_if_clause (&arg);
+
+ if ((*arg != '\0') && !isspace (*arg))
+ error (_("Junk at end of arguments."));
+
+ /* If this target supports it, create a fork or vfork catchpoint
+ and enable reporting of such events. */
+ switch (fork_kind)
+ {
+ case catch_fork_temporary:
+ case catch_fork_permanent:
+ create_fork_vfork_event_catchpoint (gdbarch, temp, cond_string, false);
+ break;
+ case catch_vfork_temporary:
+ case catch_vfork_permanent:
+ create_fork_vfork_event_catchpoint (gdbarch, temp, cond_string, true);
+ break;
+ default:
+ error (_("unsupported or unknown fork kind; cannot catch it"));
+ break;
+ }
+}
+
+void _initialize_break_catch_fork ();
+void
+_initialize_break_catch_fork ()
+{
+ add_catch_command ("fork", _("Catch calls to fork."),
+ catch_fork_command_1,
+ NULL,
+ (void *) (uintptr_t) catch_fork_permanent,
+ (void *) (uintptr_t) catch_fork_temporary);
+ add_catch_command ("vfork", _("Catch calls to vfork."),
+ catch_fork_command_1,
+ NULL,
+ (void *) (uintptr_t) catch_vfork_permanent,
+ (void *) (uintptr_t) catch_vfork_temporary);
+}
diff --git a/gdb/break-catch-load.c b/gdb/break-catch-load.c
new file mode 100644
index 00000000000..7c927396e3a
--- /dev/null
+++ b/gdb/break-catch-load.c
@@ -0,0 +1,282 @@
+/* Everything about load/unload catchpoints, for GDB.
+
+ Copyright (C) 1986-2022 Free Software Foundation, Inc.
+
+ This file is part of GDB.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#include "defs.h"
+
+#include "annotate.h"
+#include "arch-utils.h"
+#include "breakpoint.h"
+#include "cli/cli-decode.h"
+#include "mi/mi-common.h"
+#include "progspace.h"
+#include "solist.h"
+#include "target.h"
+#include "valprint.h"
+
+/* An instance of this type is used to represent an solib catchpoint.
+ A breakpoint is really of this type iff its ops pointer points to
+ CATCH_SOLIB_BREAKPOINT_OPS. */
+
+struct solib_catchpoint : public breakpoint
+{
+ int insert_location (struct bp_location *) override;
+ int remove_location (struct bp_location *,
+ enum remove_bp_reason reason) override;
+ int breakpoint_hit (const struct bp_location *bl,
+ const address_space *aspace,
+ CORE_ADDR bp_addr,
+ const target_waitstatus &ws) override;
+ void check_status (struct bpstat *bs) override;
+ enum print_stop_action print_it (struct bpstat *bs) override;
+ bool print_one (struct bp_location **) override;
+ void print_mention () override;
+ void print_recreate (struct ui_file *fp) override;
+
+ /* True for "catch load", false for "catch unload". */
+ bool is_load;
+
+ /* Regular expression to match, if any. COMPILED is only valid when
+ REGEX is non-NULL. */
+ gdb::unique_xmalloc_ptr<char> regex;
+ std::unique_ptr<compiled_regex> compiled;
+};
+
+int
+solib_catchpoint::insert_location (struct bp_location *ignore)
+{
+ return 0;
+}
+
+int
+solib_catchpoint::remove_location (struct bp_location *ignore,
+ enum remove_bp_reason reason)
+{
+ return 0;
+}
+
+int
+solib_catchpoint::breakpoint_hit (const struct bp_location *bl,
+ const address_space *aspace,
+ CORE_ADDR bp_addr,
+ const target_waitstatus &ws)
+{
+ if (ws.kind () == TARGET_WAITKIND_LOADED)
+ return 1;
+
+ for (breakpoint *other : all_breakpoints ())
+ {
+ if (other == bl->owner)
+ continue;
+
+ if (other->type != bp_shlib_event)
+ continue;
+
+ if (pspace != NULL && other->pspace != pspace)
+ continue;
+
+ for (bp_location *other_bl : other->locations ())
+ {
+ if (other->breakpoint_hit (other_bl, aspace, bp_addr, ws))
+ return 1;
+ }
+ }
+
+ return 0;
+}
+
+void
+solib_catchpoint::check_status (struct bpstat *bs)
+{
+ if (is_load)
+ {
+ for (so_list *iter : current_program_space->added_solibs)
+ {
+ if (!regex
+ || compiled->exec (iter->so_name, 0, NULL, 0) == 0)
+ return;
+ }
+ }
+ else
+ {
+ for (const std::string &iter : current_program_space->deleted_solibs)
+ {
+ if (!regex
+ || compiled->exec (iter.c_str (), 0, NULL, 0) == 0)
+ return;
+ }
+ }
+
+ bs->stop = 0;
+ bs->print_it = print_it_noop;
+}
+
+enum print_stop_action
+solib_catchpoint::print_it (bpstat *bs)
+{
+ struct breakpoint *b = bs->breakpoint_at;
+ struct ui_out *uiout = current_uiout;
+
+ annotate_catchpoint (b->number);
+ maybe_print_thread_hit_breakpoint (uiout);
+ if (b->disposition == disp_del)
+ uiout->text ("Temporary catchpoint ");
+ else
+ uiout->text ("Catchpoint ");
+ uiout->field_signed ("bkptno", b->number);
+ uiout->text ("\n");
+ if (uiout->is_mi_like_p ())
+ uiout->field_string ("disp", bpdisp_text (b->disposition));
+ print_solib_event (true);
+ return PRINT_SRC_AND_LOC;
+}
+
+bool
+solib_catchpoint::print_one (struct bp_location **locs)
+{
+ struct value_print_options opts;
+ struct ui_out *uiout = current_uiout;
+
+ get_user_print_options (&opts);
+ /* Field 4, the address, is omitted (which makes the columns not
+ line up too nicely with the headers, but the effect is relatively
+ readable). */
+ if (opts.addressprint)
+ {
+ annotate_field (4);
+ uiout->field_skip ("addr");
+ }
+
+ std::string msg;
+ annotate_field (5);
+ if (is_load)
+ {
+ if (regex)
+ msg = string_printf (_("load of library matching %s"),
+ regex.get ());
+ else
+ msg = _("load of library");
+ }
+ else
+ {
+ if (regex)
+ msg = string_printf (_("unload of library matching %s"),
+ regex.get ());
+ else
+ msg = _("unload of library");
+ }
+ uiout->field_string ("what", msg);
+
+ if (uiout->is_mi_like_p ())
+ uiout->field_string ("catch-type", is_load ? "load" : "unload");
+
+ return true;
+}
+
+void
+solib_catchpoint::print_mention ()
+{
+ gdb_printf (_("Catchpoint %d (%s)"), number,
+ is_load ? "load" : "unload");
+}
+
+void
+solib_catchpoint::print_recreate (struct ui_file *fp)
+{
+ gdb_printf (fp, "%s %s",
+ disposition == disp_del ? "tcatch" : "catch",
+ is_load ? "load" : "unload");
+ if (regex)
+ gdb_printf (fp, " %s", regex.get ());
+ gdb_printf (fp, "\n");
+}
+
+/* See breakpoint.h. */
+
+void
+add_solib_catchpoint (const char *arg, bool is_load, bool is_temp, bool enabled)
+{
+ struct gdbarch *gdbarch = get_current_arch ();
+
+ if (!arg)
+ arg = "";
+ arg = skip_spaces (arg);
+
+ std::unique_ptr<solib_catchpoint> c (new solib_catchpoint ());
+
+ if (*arg != '\0')
+ {
+ c->compiled.reset (new compiled_regex (arg, REG_NOSUB,
+ _("Invalid regexp")));
+ c->regex = make_unique_xstrdup (arg);
+ }
+
+ c->is_load = is_load;
+ init_catchpoint (c.get (), gdbarch, is_temp, NULL);
+
+ c->enable_state = enabled ? bp_enabled : bp_disabled;
+
+ install_breakpoint (0, std::move (c), 1);
+}
+
+/* A helper function that does all the work for "catch load" and
+ "catch unload". */
+
+static void
+catch_load_or_unload (const char *arg, int from_tty, int is_load,
+ struct cmd_list_element *command)
+{
+ const int enabled = 1;
+ bool temp = command->context () == CATCH_TEMPORARY;
+
+ add_solib_catchpoint (arg, is_load, temp, enabled);
+}
+
+static void
+catch_load_command_1 (const char *arg, int from_tty,
+ struct cmd_list_element *command)
+{
+ catch_load_or_unload (arg, from_tty, 1, command);
+}
+
+static void
+catch_unload_command_1 (const char *arg, int from_tty,
+ struct cmd_list_element *command)
+{
+ catch_load_or_unload (arg, from_tty, 0, command);
+}
+
+void _initialize_break_catch_load ();
+void
+_initialize_break_catch_load ()
+{
+ add_catch_command ("load", _("Catch loads of shared libraries.\n\
+Usage: catch load [REGEX]\n\
+If REGEX is given, only stop for libraries matching the regular expression."),
+ catch_load_command_1,
+ NULL,
+ CATCH_PERMANENT,
+ CATCH_TEMPORARY);
+ add_catch_command ("unload", _("Catch unloads of shared libraries.\n\
+Usage: catch unload [REGEX]\n\
+If REGEX is given, only stop for libraries matching the regular expression."),
+ catch_unload_command_1,
+ NULL,
+ CATCH_PERMANENT,
+ CATCH_TEMPORARY);
+}
diff --git a/gdb/break-catch-sig.c b/gdb/break-catch-sig.c
index e268a102891..8f6d3967718 100644
--- a/gdb/break-catch-sig.c
+++ b/gdb/break-catch-sig.c
@@ -35,12 +35,24 @@
#define INTERNAL_SIGNAL(x) ((x) == GDB_SIGNAL_TRAP || (x) == GDB_SIGNAL_INT)
-/* An instance of this type is used to represent a signal catchpoint.
- A breakpoint is really of this type iff its ops pointer points to
- SIGNAL_CATCHPOINT_OPS. */
+/* An instance of this type is used to represent a signal
+ catchpoint. */
struct signal_catchpoint : public breakpoint
{
+ int insert_location (struct bp_location *) override;
+ int remove_location (struct bp_location *,
+ enum remove_bp_reason reason) override;
+ int breakpoint_hit (const struct bp_location *bl,
+ const address_space *aspace,
+ CORE_ADDR bp_addr,
+ const target_waitstatus &ws) override;
+ enum print_stop_action print_it (struct bpstat *bs) override;
+ bool print_one (struct bp_location **) override;
+ void print_mention () override;
+ void print_recreate (struct ui_file *fp) override;
+ int explains_signal (enum gdb_signal) override;
+
/* Signal numbers used for the 'catch signal' feature. If no signal
has been specified for filtering, it is empty. Otherwise,
it holds a list of all signals to be caught. */
@@ -55,10 +67,6 @@ struct signal_catchpoint : public breakpoint
bool catch_all;
};
-/* The breakpoint_ops structure to be used in signal catchpoints. */
-
-static struct breakpoint_ops signal_catchpoint_ops;
-
/* Count of each signal. */
static unsigned int signal_catch_counts[GDB_SIGNAL_LAST];
@@ -81,11 +89,10 @@ signal_to_name_or_int (enum gdb_signal sig)
-/* Implement the "insert_location" breakpoint_ops method for signal
- catchpoints. */
+/* Implement the "insert_location" method for signal catchpoints. */
-static int
-signal_catchpoint_insert_location (struct bp_location *bl)
+int
+signal_catchpoint::insert_location (struct bp_location *bl)
{
struct signal_catchpoint *c = (struct signal_catchpoint *) bl->owner;
@@ -108,12 +115,11 @@ signal_catchpoint_insert_location (struct bp_location *bl)
return 0;
}
-/* Implement the "remove_location" breakpoint_ops method for signal
- catchpoints. */
+/* Implement the "remove_location" method for signal catchpoints. */
-static int
-signal_catchpoint_remove_location (struct bp_location *bl,
- enum remove_bp_reason reason)
+int
+signal_catchpoint::remove_location (struct bp_location *bl,
+ enum remove_bp_reason reason)
{
struct signal_catchpoint *c = (struct signal_catchpoint *) bl->owner;
@@ -142,14 +148,13 @@ signal_catchpoint_remove_location (struct bp_location *bl,
return 0;
}
-/* Implement the "breakpoint_hit" breakpoint_ops method for signal
- catchpoints. */
+/* Implement the "breakpoint_hit" method for signal catchpoints. */
-static int
-signal_catchpoint_breakpoint_hit (const struct bp_location *bl,
- const address_space *aspace,
- CORE_ADDR bp_addr,
- const target_waitstatus &ws)
+int
+signal_catchpoint::breakpoint_hit (const struct bp_location *bl,
+ const address_space *aspace,
+ CORE_ADDR bp_addr,
+ const target_waitstatus &ws)
{
const struct signal_catchpoint *c
= (const struct signal_catchpoint *) bl->owner;
@@ -175,13 +180,11 @@ signal_catchpoint_breakpoint_hit (const struct bp_location *bl,
return c->catch_all || !INTERNAL_SIGNAL (signal_number);
}
-/* Implement the "print_it" breakpoint_ops method for signal
- catchpoints. */
+/* Implement the "print_it" method for signal catchpoints. */
-static enum print_stop_action
-signal_catchpoint_print_it (bpstat *bs)
+enum print_stop_action
+signal_catchpoint::print_it (bpstat *bs)
{
- struct breakpoint *b = bs->breakpoint_at;
struct target_waitstatus last;
const char *signal_name;
struct ui_out *uiout = current_uiout;
@@ -190,22 +193,19 @@ signal_catchpoint_print_it (bpstat *bs)
signal_name = signal_to_name_or_int (last.sig ());
- annotate_catchpoint (b->number);
+ annotate_catchpoint (number);
maybe_print_thread_hit_breakpoint (uiout);
- printf_filtered (_("Catchpoint %d (signal %s), "), b->number, signal_name);
+ gdb_printf (_("Catchpoint %d (signal %s), "), number, signal_name);
return PRINT_SRC_AND_LOC;
}
-/* Implement the "print_one" breakpoint_ops method for signal
- catchpoints. */
+/* Implement the "print_one" method for signal catchpoints. */
-static void
-signal_catchpoint_print_one (struct breakpoint *b,
- struct bp_location **last_loc)
+bool
+signal_catchpoint::print_one (struct bp_location **last_loc)
{
- struct signal_catchpoint *c = (struct signal_catchpoint *) b;
struct value_print_options opts;
struct ui_out *uiout = current_uiout;
@@ -218,17 +218,17 @@ signal_catchpoint_print_one (struct breakpoint *b,
uiout->field_skip ("addr");
annotate_field (5);
- if (c->signals_to_be_caught.size () > 1)
+ if (signals_to_be_caught.size () > 1)
uiout->text ("signals \"");
else
uiout->text ("signal \"");
- if (!c->signals_to_be_caught.empty ())
+ if (!signals_to_be_caught.empty ())
{
std::string text;
bool first = true;
- for (gdb_signal iter : c->signals_to_be_caught)
+ for (gdb_signal iter : signals_to_be_caught)
{
const char *name = signal_to_name_or_int (iter);
@@ -242,68 +242,63 @@ signal_catchpoint_print_one (struct breakpoint *b,
}
else
uiout->field_string ("what",
- c->catch_all ? "<any signal>" : "<standard signals>",
+ catch_all ? "<any signal>" : "<standard signals>",
metadata_style.style ());
uiout->text ("\" ");
if (uiout->is_mi_like_p ())
uiout->field_string ("catch-type", "signal");
+
+ return true;
}
-/* Implement the "print_mention" breakpoint_ops method for signal
- catchpoints. */
+/* Implement the "print_mention" method for signal catchpoints. */
-static void
-signal_catchpoint_print_mention (struct breakpoint *b)
+void
+signal_catchpoint::print_mention ()
{
- struct signal_catchpoint *c = (struct signal_catchpoint *) b;
-
- if (!c->signals_to_be_caught.empty ())
+ if (!signals_to_be_caught.empty ())
{
- if (c->signals_to_be_caught.size () > 1)
- printf_filtered (_("Catchpoint %d (signals"), b->number);
+ if (signals_to_be_caught.size () > 1)
+ gdb_printf (_("Catchpoint %d (signals"), number);
else
- printf_filtered (_("Catchpoint %d (signal"), b->number);
+ gdb_printf (_("Catchpoint %d (signal"), number);
- for (gdb_signal iter : c->signals_to_be_caught)
+ for (gdb_signal iter : signals_to_be_caught)
{
const char *name = signal_to_name_or_int (iter);
- printf_filtered (" %s", name);
+ gdb_printf (" %s", name);
}
- printf_filtered (")");
+ gdb_printf (")");
}
- else if (c->catch_all)
- printf_filtered (_("Catchpoint %d (any signal)"), b->number);
+ else if (catch_all)
+ gdb_printf (_("Catchpoint %d (any signal)"), number);
else
- printf_filtered (_("Catchpoint %d (standard signals)"), b->number);
+ gdb_printf (_("Catchpoint %d (standard signals)"), number);
}
-/* Implement the "print_recreate" breakpoint_ops method for signal
- catchpoints. */
+/* Implement the "print_recreate" method for signal catchpoints. */
-static void
-signal_catchpoint_print_recreate (struct breakpoint *b, struct ui_file *fp)
+void
+signal_catchpoint::print_recreate (struct ui_file *fp)
{
- struct signal_catchpoint *c = (struct signal_catchpoint *) b;
+ gdb_printf (fp, "catch signal");
- fprintf_unfiltered (fp, "catch signal");
-
- if (!c->signals_to_be_caught.empty ())
+ if (!signals_to_be_caught.empty ())
{
- for (gdb_signal iter : c->signals_to_be_caught)
- fprintf_unfiltered (fp, " %s", signal_to_name_or_int (iter));
+ for (gdb_signal iter : signals_to_be_caught)
+ gdb_printf (fp, " %s", signal_to_name_or_int (iter));
}
- else if (c->catch_all)
- fprintf_unfiltered (fp, " all");
- fputc_unfiltered ('\n', fp);
+ else if (catch_all)
+ gdb_printf (fp, " all");
+ gdb_putc ('\n', fp);
}
-/* Implement the "explains_signal" breakpoint_ops method for signal
- catchpoints. */
+/* Implement the "explains_signal" method for signal catchpoints. */
-static int
-signal_catchpoint_explains_signal (struct breakpoint *b, enum gdb_signal sig)
+int
+signal_catchpoint::explains_signal (enum gdb_signal sig)
{
return 1;
}
@@ -322,7 +317,7 @@ create_signal_catchpoint (int tempflag, std::vector<gdb_signal> &&filter,
struct gdbarch *gdbarch = get_current_arch ();
std::unique_ptr<signal_catchpoint> c (new signal_catchpoint ());
- init_catchpoint (c.get (), gdbarch, tempflag, NULL, &signal_catchpoint_ops);
+ init_catchpoint (c.get (), gdbarch, tempflag, nullptr);
c->signals_to_be_caught = std::move (filter);
c->catch_all = catch_all;
@@ -406,31 +401,10 @@ catch_signal_command (const char *arg, int from_tty,
create_signal_catchpoint (tempflag, std::move (filter), catch_all);
}
-static void
-initialize_signal_catchpoint_ops (void)
-{
- struct breakpoint_ops *ops;
-
- initialize_breakpoint_ops ();
-
- ops = &signal_catchpoint_ops;
- *ops = base_breakpoint_ops;
- ops->insert_location = signal_catchpoint_insert_location;
- ops->remove_location = signal_catchpoint_remove_location;
- ops->breakpoint_hit = signal_catchpoint_breakpoint_hit;
- ops->print_it = signal_catchpoint_print_it;
- ops->print_one = signal_catchpoint_print_one;
- ops->print_mention = signal_catchpoint_print_mention;
- ops->print_recreate = signal_catchpoint_print_recreate;
- ops->explains_signal = signal_catchpoint_explains_signal;
-}
-
void _initialize_break_catch_sig ();
void
_initialize_break_catch_sig ()
{
- initialize_signal_catchpoint_ops ();
-
add_catch_command ("signal", _("\
Catch signals by their names and/or numbers.\n\
Usage: catch signal [[NAME|NUMBER] [NAME|NUMBER]...|all]\n\
diff --git a/gdb/break-catch-syscall.c b/gdb/break-catch-syscall.c
index 9ad8aaa06c8..3b160bf9a04 100644
--- a/gdb/break-catch-syscall.c
+++ b/gdb/break-catch-syscall.c
@@ -32,12 +32,23 @@
#include "cli/cli-style.h"
#include "cli/cli-decode.h"
-/* An instance of this type is used to represent a syscall catchpoint.
- A breakpoint is really of this type iff its ops pointer points to
- CATCH_SYSCALL_BREAKPOINT_OPS. */
+/* An instance of this type is used to represent a syscall
+ catchpoint. */
struct syscall_catchpoint : public breakpoint
{
+ int insert_location (struct bp_location *) override;
+ int remove_location (struct bp_location *,
+ enum remove_bp_reason reason) override;
+ int breakpoint_hit (const struct bp_location *bl,
+ const address_space *aspace,
+ CORE_ADDR bp_addr,
+ const target_waitstatus &ws) override;
+ enum print_stop_action print_it (struct bpstat *bs) override;
+ bool print_one (struct bp_location **) override;
+ void print_mention () override;
+ void print_recreate (struct ui_file *fp) override;
+
/* Syscall numbers used for the 'catch syscall' feature. If no
syscall has been specified for filtering, it is empty.
Otherwise, it holds a list of all syscalls to be caught. */
@@ -76,23 +87,21 @@ get_catch_syscall_inferior_data (struct inferior *inf)
return inf_data;
}
-/* Implement the "insert" breakpoint_ops method for syscall
- catchpoints. */
+/* Implement the "insert" method for syscall catchpoints. */
-static int
-insert_catch_syscall (struct bp_location *bl)
+int
+syscall_catchpoint::insert_location (struct bp_location *bl)
{
- struct syscall_catchpoint *c = (struct syscall_catchpoint *) bl->owner;
struct inferior *inf = current_inferior ();
struct catch_syscall_inferior_data *inf_data
= get_catch_syscall_inferior_data (inf);
++inf_data->total_syscalls_count;
- if (c->syscalls_to_be_caught.empty ())
+ if (syscalls_to_be_caught.empty ())
++inf_data->any_syscall_count;
else
{
- for (int iter : c->syscalls_to_be_caught)
+ for (int iter : syscalls_to_be_caught)
{
if (iter >= inf_data->syscalls_counts.size ())
inf_data->syscalls_counts.resize (iter + 1);
@@ -106,23 +115,22 @@ insert_catch_syscall (struct bp_location *bl)
inf_data->syscalls_counts);
}
-/* Implement the "remove" breakpoint_ops method for syscall
- catchpoints. */
+/* Implement the "remove" method for syscall catchpoints. */
-static int
-remove_catch_syscall (struct bp_location *bl, enum remove_bp_reason reason)
+int
+syscall_catchpoint::remove_location (struct bp_location *bl,
+ enum remove_bp_reason reason)
{
- struct syscall_catchpoint *c = (struct syscall_catchpoint *) bl->owner;
struct inferior *inf = current_inferior ();
struct catch_syscall_inferior_data *inf_data
= get_catch_syscall_inferior_data (inf);
--inf_data->total_syscalls_count;
- if (c->syscalls_to_be_caught.empty ())
+ if (syscalls_to_be_caught.empty ())
--inf_data->any_syscall_count;
else
{
- for (int iter : c->syscalls_to_be_caught)
+ for (int iter : syscalls_to_be_caught)
{
if (iter >= inf_data->syscalls_counts.size ())
/* Shouldn't happen. */
@@ -137,20 +145,18 @@ remove_catch_syscall (struct bp_location *bl, enum remove_bp_reason reason)
inf_data->syscalls_counts);
}
-/* Implement the "breakpoint_hit" breakpoint_ops method for syscall
- catchpoints. */
+/* Implement the "breakpoint_hit" method for syscall catchpoints. */
-static int
-breakpoint_hit_catch_syscall (const struct bp_location *bl,
- const address_space *aspace, CORE_ADDR bp_addr,
- const target_waitstatus &ws)
+int
+syscall_catchpoint::breakpoint_hit (const struct bp_location *bl,
+ const address_space *aspace,
+ CORE_ADDR bp_addr,
+ const target_waitstatus &ws)
{
/* We must check if we are catching specific syscalls in this
breakpoint. If we are, then we must guarantee that the called
syscall is the same syscall we are catching. */
int syscall_number = 0;
- const struct syscall_catchpoint *c
- = (const struct syscall_catchpoint *) bl->owner;
if (ws.kind () != TARGET_WAITKIND_SYSCALL_ENTRY
&& ws.kind () != TARGET_WAITKIND_SYSCALL_RETURN)
@@ -159,9 +165,9 @@ breakpoint_hit_catch_syscall (const struct bp_location *bl,
syscall_number = ws.syscall_number ();
/* Now, checking if the syscall is the same. */
- if (!c->syscalls_to_be_caught.empty ())
+ if (!syscalls_to_be_caught.empty ())
{
- for (int iter : c->syscalls_to_be_caught)
+ for (int iter : syscalls_to_be_caught)
if (syscall_number == iter)
return 1;
@@ -171,11 +177,10 @@ breakpoint_hit_catch_syscall (const struct bp_location *bl,
return 1;
}
-/* Implement the "print_it" breakpoint_ops method for syscall
- catchpoints. */
+/* Implement the "print_it" method for syscall catchpoints. */
-static enum print_stop_action
-print_it_catch_syscall (bpstat *bs)
+enum print_stop_action
+syscall_catchpoint::print_it (bpstat *bs)
{
struct ui_out *uiout = current_uiout;
struct breakpoint *b = bs->breakpoint_at;
@@ -223,17 +228,14 @@ print_it_catch_syscall (bpstat *bs)
return PRINT_SRC_AND_LOC;
}
-/* Implement the "print_one" breakpoint_ops method for syscall
- catchpoints. */
+/* Implement the "print_one" method for syscall catchpoints. */
-static void
-print_one_catch_syscall (struct breakpoint *b,
- struct bp_location **last_loc)
+bool
+syscall_catchpoint::print_one (struct bp_location **last_loc)
{
- struct syscall_catchpoint *c = (struct syscall_catchpoint *) b;
struct value_print_options opts;
struct ui_out *uiout = current_uiout;
- struct gdbarch *gdbarch = b->loc->gdbarch;
+ struct gdbarch *gdbarch = loc->gdbarch;
get_user_print_options (&opts);
/* Field 4, the address, is omitted (which makes the columns not
@@ -243,17 +245,17 @@ print_one_catch_syscall (struct breakpoint *b,
uiout->field_skip ("addr");
annotate_field (5);
- if (c->syscalls_to_be_caught.size () > 1)
+ if (syscalls_to_be_caught.size () > 1)
uiout->text ("syscalls \"");
else
uiout->text ("syscall \"");
- if (!c->syscalls_to_be_caught.empty ())
+ if (!syscalls_to_be_caught.empty ())
{
std::string text;
bool first = true;
- for (int iter : c->syscalls_to_be_caught)
+ for (int iter : syscalls_to_be_caught)
{
struct syscall s;
get_syscall_by_number (gdbarch, iter, &s);
@@ -275,86 +277,78 @@ print_one_catch_syscall (struct breakpoint *b,
if (uiout->is_mi_like_p ())
uiout->field_string ("catch-type", "syscall");
+
+ return true;
}
-/* Implement the "print_mention" breakpoint_ops method for syscall
- catchpoints. */
+/* Implement the "print_mention" method for syscall catchpoints. */
-static void
-print_mention_catch_syscall (struct breakpoint *b)
+void
+syscall_catchpoint::print_mention ()
{
- struct syscall_catchpoint *c = (struct syscall_catchpoint *) b;
- struct gdbarch *gdbarch = b->loc->gdbarch;
+ struct gdbarch *gdbarch = loc->gdbarch;
- if (!c->syscalls_to_be_caught.empty ())
+ if (!syscalls_to_be_caught.empty ())
{
- if (c->syscalls_to_be_caught.size () > 1)
- printf_filtered (_("Catchpoint %d (syscalls"), b->number);
+ if (syscalls_to_be_caught.size () > 1)
+ gdb_printf (_("Catchpoint %d (syscalls"), number);
else
- printf_filtered (_("Catchpoint %d (syscall"), b->number);
+ gdb_printf (_("Catchpoint %d (syscall"), number);
- for (int iter : c->syscalls_to_be_caught)
+ for (int iter : syscalls_to_be_caught)
{
struct syscall s;
get_syscall_by_number (gdbarch, iter, &s);
if (s.name != NULL)
- printf_filtered (" '%s' [%d]", s.name, s.number);
+ gdb_printf (" '%s' [%d]", s.name, s.number);
else
- printf_filtered (" %d", s.number);
+ gdb_printf (" %d", s.number);
}
- printf_filtered (")");
+ gdb_printf (")");
}
else
- printf_filtered (_("Catchpoint %d (any syscall)"),
- b->number);
+ gdb_printf (_("Catchpoint %d (any syscall)"), number);
}
-/* Implement the "print_recreate" breakpoint_ops method for syscall
- catchpoints. */
+/* Implement the "print_recreate" method for syscall catchpoints. */
-static void
-print_recreate_catch_syscall (struct breakpoint *b, struct ui_file *fp)
+void
+syscall_catchpoint::print_recreate (struct ui_file *fp)
{
- struct syscall_catchpoint *c = (struct syscall_catchpoint *) b;
- struct gdbarch *gdbarch = b->loc->gdbarch;
+ struct gdbarch *gdbarch = loc->gdbarch;
- fprintf_unfiltered (fp, "catch syscall");
+ gdb_printf (fp, "catch syscall");
- for (int iter : c->syscalls_to_be_caught)
+ for (int iter : syscalls_to_be_caught)
{
struct syscall s;
get_syscall_by_number (gdbarch, iter, &s);
if (s.name != NULL)
- fprintf_unfiltered (fp, " %s", s.name);
+ gdb_printf (fp, " %s", s.name);
else
- fprintf_unfiltered (fp, " %d", s.number);
+ gdb_printf (fp, " %d", s.number);
}
- print_recreate_thread (b, fp);
+ print_recreate_thread (this, fp);
}
-/* The breakpoint_ops structure to be used in syscall catchpoints. */
-
-static struct breakpoint_ops catch_syscall_breakpoint_ops;
-
/* Returns non-zero if 'b' is a syscall catchpoint. */
static int
syscall_catchpoint_p (struct breakpoint *b)
{
- return (b->ops == &catch_syscall_breakpoint_ops);
+ return dynamic_cast<syscall_catchpoint *> (b) != nullptr;
}
static void
-create_syscall_event_catchpoint (int tempflag, std::vector<int> &&filter,
- const struct breakpoint_ops *ops)
+create_syscall_event_catchpoint (int tempflag, std::vector<int> &&filter)
{
struct gdbarch *gdbarch = get_current_arch ();
std::unique_ptr<syscall_catchpoint> c (new syscall_catchpoint ());
- init_catchpoint (c.get (), gdbarch, tempflag, NULL, ops);
+ init_catchpoint (c.get (), gdbarch, tempflag, nullptr);
c->syscalls_to_be_caught = std::move (filter);
install_breakpoint (0, std::move (c), 1);
@@ -455,8 +449,7 @@ this architecture yet."));
if (arg != NULL)
filter = catch_syscall_split_args (arg);
- create_syscall_event_catchpoint (tempflag, std::move (filter),
- &catch_syscall_breakpoint_ops);
+ create_syscall_event_catchpoint (tempflag, std::move (filter));
}
@@ -577,31 +570,10 @@ clear_syscall_counts (struct inferior *inf)
inf_data->syscalls_counts.clear ();
}
-static void
-initialize_syscall_catchpoint_ops (void)
-{
- struct breakpoint_ops *ops;
-
- initialize_breakpoint_ops ();
-
- /* Syscall catchpoints. */
- ops = &catch_syscall_breakpoint_ops;
- *ops = base_breakpoint_ops;
- ops->insert_location = insert_catch_syscall;
- ops->remove_location = remove_catch_syscall;
- ops->breakpoint_hit = breakpoint_hit_catch_syscall;
- ops->print_it = print_it_catch_syscall;
- ops->print_one = print_one_catch_syscall;
- ops->print_mention = print_mention_catch_syscall;
- ops->print_recreate = print_recreate_catch_syscall;
-}
-
void _initialize_break_catch_syscall ();
void
_initialize_break_catch_syscall ()
{
- initialize_syscall_catchpoint_ops ();
-
gdb::observers::inferior_exit.attach (clear_syscall_counts,
"break-catch-syscall");
diff --git a/gdb/break-catch-throw.c b/gdb/break-catch-throw.c
index 15c290b0ad1..4b79e0ffcba 100644
--- a/gdb/break-catch-throw.c
+++ b/gdb/break-catch-throw.c
@@ -27,13 +27,13 @@
#include "valprint.h"
#include "cli/cli-utils.h"
#include "completer.h"
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
#include "mi/mi-common.h"
#include "linespec.h"
#include "probe.h"
#include "objfiles.h"
#include "cp-abi.h"
-#include "gdb_regex.h"
+#include "gdbsupport/gdb_regex.h"
#include "cp-support.h"
#include "location.h"
#include "cli/cli-decode.h"
@@ -63,12 +63,26 @@ static const struct exception_names exception_functions[] =
{ "-probe-stap libstdcxx:catch", "__cxa_begin_catch" }
};
-static struct breakpoint_ops gnu_v3_exception_catchpoint_ops;
-
/* The type of an exception catchpoint. */
-struct exception_catchpoint : public breakpoint
+struct exception_catchpoint : public base_breakpoint
{
+ void re_set () override;
+ enum print_stop_action print_it (struct bpstat *bs) override;
+ bool print_one (struct bp_location **) override;
+ void print_mention () override;
+ void print_recreate (struct ui_file *fp) override;
+ void print_one_detail (struct ui_out *) const override;
+ void check_status (struct bpstat *bs) override;
+ struct bp_location *allocate_location () override;
+
+ /* FIXME this is temporary - until ordinary breakpoints have been
+ converted. */
+ int resources_needed (const struct bp_location *) override
+ {
+ return 1;
+ }
+
/* The kind of exception catchpoint. */
enum exception_event_kind kind;
@@ -89,7 +103,7 @@ struct exception_catchpoint : public breakpoint
bool
is_exception_catchpoint (breakpoint *bp)
{
- return bp->ops == &gnu_v3_exception_catchpoint_ops;
+ return dynamic_cast<exception_catchpoint *> (bp) != nullptr;
}
@@ -130,27 +144,16 @@ fetch_probe_arguments (struct value **arg0, struct value **arg1)
-/* A helper function that returns a value indicating the kind of the
- exception catchpoint B. */
-
-static enum exception_event_kind
-classify_exception_breakpoint (struct breakpoint *b)
-{
- struct exception_catchpoint *cp = (struct exception_catchpoint *) b;
-
- return cp->kind;
-}
-
/* Implement the 'check_status' method. */
-static void
-check_status_exception_catchpoint (struct bpstat *bs)
+void
+exception_catchpoint::check_status (struct bpstat *bs)
{
struct exception_catchpoint *self
= (struct exception_catchpoint *) bs->breakpoint_at;
std::string type_name;
- bkpt_breakpoint_ops.check_status (bs);
+ this->breakpoint::check_status (bs);
if (bs->stop == 0)
return;
@@ -185,11 +188,10 @@ check_status_exception_catchpoint (struct bpstat *bs)
/* Implement the 're_set' method. */
-static void
-re_set_exception_catchpoint (struct breakpoint *self)
+void
+exception_catchpoint::re_set ()
{
std::vector<symtab_and_line> sals;
- enum exception_event_kind kind = classify_exception_breakpoint (self);
struct program_space *filter_pspace = current_program_space;
/* We first try to use the probe interface. */
@@ -211,8 +213,7 @@ re_set_exception_catchpoint (struct breakpoint *self)
explicit_loc.function_name
= ASTRDUP (exception_functions[kind].function);
event_location_up location = new_explicit_location (&explicit_loc);
- sals = self->ops->decode_location (self, location.get (),
- filter_pspace);
+ sals = this->decode_location (location.get (), filter_pspace);
}
catch (const gdb_exception_error &ex)
{
@@ -223,24 +224,22 @@ re_set_exception_catchpoint (struct breakpoint *self)
}
}
- update_breakpoint_locations (self, filter_pspace, sals, {});
+ update_breakpoint_locations (this, filter_pspace, sals, {});
}
-static enum print_stop_action
-print_it_exception_catchpoint (bpstat *bs)
+enum print_stop_action
+exception_catchpoint::print_it (bpstat *bs)
{
struct ui_out *uiout = current_uiout;
- struct breakpoint *b = bs->breakpoint_at;
int bp_temp;
- enum exception_event_kind kind = classify_exception_breakpoint (b);
- annotate_catchpoint (b->number);
+ annotate_catchpoint (number);
maybe_print_thread_hit_breakpoint (uiout);
- bp_temp = b->disposition == disp_del;
+ bp_temp = disposition == disp_del;
uiout->text (bp_temp ? "Temporary catchpoint "
: "Catchpoint ");
- uiout->field_signed ("bkptno", b->number);
+ uiout->field_signed ("bkptno", number);
uiout->text ((kind == EX_EVENT_THROW ? " (exception thrown), "
: (kind == EX_EVENT_CATCH ? " (exception caught), "
: " (exception rethrown), ")));
@@ -248,18 +247,16 @@ print_it_exception_catchpoint (bpstat *bs)
{
uiout->field_string ("reason",
async_reason_lookup (EXEC_ASYNC_BREAKPOINT_HIT));
- uiout->field_string ("disp", bpdisp_text (b->disposition));
+ uiout->field_string ("disp", bpdisp_text (disposition));
}
return PRINT_SRC_AND_LOC;
}
-static void
-print_one_exception_catchpoint (struct breakpoint *b,
- struct bp_location **last_loc)
+bool
+exception_catchpoint::print_one (struct bp_location **last_loc)
{
struct value_print_options opts;
struct ui_out *uiout = current_uiout;
- enum exception_event_kind kind = classify_exception_breakpoint (b);
get_user_print_options (&opts);
@@ -287,75 +284,70 @@ print_one_exception_catchpoint (struct breakpoint *b,
uiout->field_string ("catch-type", "catch");
break;
}
+
+ return true;
}
/* Implement the 'print_one_detail' method. */
-static void
-print_one_detail_exception_catchpoint (const struct breakpoint *b,
- struct ui_out *uiout)
+void
+exception_catchpoint::print_one_detail (struct ui_out *uiout) const
{
- const struct exception_catchpoint *cp
- = (const struct exception_catchpoint *) b;
-
- if (!cp->exception_rx.empty ())
+ if (!exception_rx.empty ())
{
uiout->text (_("\tmatching: "));
- uiout->field_string ("regexp", cp->exception_rx);
+ uiout->field_string ("regexp", exception_rx);
uiout->text ("\n");
}
}
-static void
-print_mention_exception_catchpoint (struct breakpoint *b)
+void
+exception_catchpoint::print_mention ()
{
struct ui_out *uiout = current_uiout;
int bp_temp;
- enum exception_event_kind kind = classify_exception_breakpoint (b);
- bp_temp = b->disposition == disp_del;
+ bp_temp = disposition == disp_del;
uiout->message ("%s %d %s",
(bp_temp ? _("Temporary catchpoint ") : _("Catchpoint")),
- b->number,
+ number,
(kind == EX_EVENT_THROW
? _("(throw)") : (kind == EX_EVENT_CATCH
? _("(catch)") : _("(rethrow)"))));
}
-/* Implement the "print_recreate" breakpoint_ops method for throw and
- catch catchpoints. */
+/* Implement the "print_recreate" method for throw and catch
+ catchpoints. */
-static void
-print_recreate_exception_catchpoint (struct breakpoint *b,
- struct ui_file *fp)
+void
+exception_catchpoint::print_recreate (struct ui_file *fp)
{
int bp_temp;
- enum exception_event_kind kind = classify_exception_breakpoint (b);
- bp_temp = b->disposition == disp_del;
- fprintf_unfiltered (fp, bp_temp ? "tcatch " : "catch ");
+ bp_temp = disposition == disp_del;
+ gdb_printf (fp, bp_temp ? "tcatch " : "catch ");
switch (kind)
{
case EX_EVENT_THROW:
- fprintf_unfiltered (fp, "throw");
+ gdb_printf (fp, "throw");
break;
case EX_EVENT_CATCH:
- fprintf_unfiltered (fp, "catch");
+ gdb_printf (fp, "catch");
break;
case EX_EVENT_RETHROW:
- fprintf_unfiltered (fp, "rethrow");
+ gdb_printf (fp, "rethrow");
break;
}
- print_recreate_thread (b, fp);
+ print_recreate_thread (this, fp);
}
-/* Implement the "allocate_location" breakpoint_ops method for throw
- and catch catchpoints. */
+/* Implement the "allocate_location" method for throw and catch
+ catchpoints. */
-static bp_location *
-allocate_location_exception_catchpoint (breakpoint *self)
+bp_location *
+exception_catchpoint::allocate_location ()
{
- return new bp_location (self, bp_loc_software_breakpoint);
+ return new bp_location (this, bp_loc_software_breakpoint);
}
static void
@@ -373,13 +365,12 @@ handle_gnu_v3_exceptions (int tempflag, std::string &&except_rx,
std::unique_ptr<exception_catchpoint> cp (new exception_catchpoint ());
- init_catchpoint (cp.get (), get_current_arch (), tempflag, cond_string,
- &gnu_v3_exception_catchpoint_ops);
+ init_catchpoint (cp.get (), get_current_arch (), tempflag, cond_string);
cp->kind = ex_event;
cp->exception_rx = std::move (except_rx);
cp->pattern = std::move (pattern);
- re_set_exception_catchpoint (cp.get ());
+ cp->re_set ();
install_breakpoint (0, std::move (cp), 1);
}
@@ -510,37 +501,14 @@ static const struct internalvar_funcs exception_funcs =
{
compute_exception,
NULL,
- NULL
};
-static void
-initialize_throw_catchpoint_ops (void)
-{
- struct breakpoint_ops *ops;
-
- initialize_breakpoint_ops ();
-
- /* GNU v3 exception catchpoints. */
- ops = &gnu_v3_exception_catchpoint_ops;
- *ops = bkpt_breakpoint_ops;
- ops->re_set = re_set_exception_catchpoint;
- ops->print_it = print_it_exception_catchpoint;
- ops->print_one = print_one_exception_catchpoint;
- ops->print_mention = print_mention_exception_catchpoint;
- ops->print_recreate = print_recreate_exception_catchpoint;
- ops->print_one_detail = print_one_detail_exception_catchpoint;
- ops->check_status = check_status_exception_catchpoint;
- ops->allocate_location = allocate_location_exception_catchpoint;
-}
-
void _initialize_break_catch_throw ();
void
_initialize_break_catch_throw ()
{
- initialize_throw_catchpoint_ops ();
-
/* Add catch and tcatch sub-commands. */
add_catch_command ("catch", _("\
Catch an exception, when caught."),
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
index c7d75731621..7241b7b6985 100644
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -56,7 +56,7 @@
#include "valprint.h"
#include "jit.h"
#include "parser-defs.h"
-#include "gdb_regex.h"
+#include "gdbsupport/gdb_regex.h"
#include "probe.h"
#include "cli/cli-utils.h"
#include "stack.h"
@@ -91,18 +91,17 @@ static void breakpoint_re_set_default (struct breakpoint *);
static void
create_sals_from_location_default (struct event_location *location,
- struct linespec_result *canonical,
- enum bptype type_wanted);
-
-static void create_breakpoints_sal_default (struct gdbarch *,
- struct linespec_result *,
- gdb::unique_xmalloc_ptr<char>,
- gdb::unique_xmalloc_ptr<char>,
- enum bptype,
- enum bpdisp, int, int,
- int,
- const struct breakpoint_ops *,
- int, int, int, unsigned);
+ struct linespec_result *canonical);
+
+static void create_breakpoints_sal (struct gdbarch *,
+ struct linespec_result *,
+ gdb::unique_xmalloc_ptr<char>,
+ gdb::unique_xmalloc_ptr<char>,
+ enum bptype,
+ enum bpdisp, int, int,
+ int,
+ const struct breakpoint_ops *,
+ int, int, int, unsigned);
static std::vector<symtab_and_line> decode_location_default
(struct breakpoint *b, struct event_location *location,
@@ -175,7 +174,10 @@ static void enable_breakpoint_disp (struct breakpoint *, enum bpdisp,
static void decref_bp_location (struct bp_location **loc);
-static struct bp_location *allocate_bp_location (struct breakpoint *bpt);
+static std::vector<symtab_and_line> bkpt_probe_decode_location
+ (struct breakpoint *b,
+ struct event_location *location,
+ struct program_space *search_pspace);
/* update_global_location_list's modes of operation wrt to whether to
insert locations now. */
@@ -229,29 +231,94 @@ static bool is_masked_watchpoint (const struct breakpoint *b);
static int strace_marker_p (struct breakpoint *b);
-/* The breakpoint_ops structure to be inherited by all breakpoint_ops
- that are implemented on top of software or hardware breakpoints
- (user breakpoints, internal and momentary breakpoints, etc.). */
-static struct breakpoint_ops bkpt_base_breakpoint_ops;
+static void bkpt_probe_create_sals_from_location
+ (struct event_location *location,
+ struct linespec_result *canonical);
+static void tracepoint_probe_create_sals_from_location
+ (struct event_location *location,
+ struct linespec_result *canonical);
-/* Internal breakpoints class type. */
-static struct breakpoint_ops internal_breakpoint_ops;
-
-/* Momentary breakpoints class type. */
-static struct breakpoint_ops momentary_breakpoint_ops;
-
-/* The breakpoint_ops structure to be used in regular user created
- breakpoints. */
-struct breakpoint_ops bkpt_breakpoint_ops;
+const struct breakpoint_ops base_breakpoint_ops =
+{
+ create_sals_from_location_default,
+ create_breakpoints_sal,
+};
/* Breakpoints set on probes. */
-static struct breakpoint_ops bkpt_probe_breakpoint_ops;
+static const struct breakpoint_ops bkpt_probe_breakpoint_ops =
+{
+ bkpt_probe_create_sals_from_location,
+ create_breakpoints_sal,
+};
/* Tracepoints set on probes. */
-static struct breakpoint_ops tracepoint_probe_breakpoint_ops;
+static const struct breakpoint_ops tracepoint_probe_breakpoint_ops =
+{
+ tracepoint_probe_create_sals_from_location,
+ create_breakpoints_sal,
+};
-/* Dynamic printf class type. */
-struct breakpoint_ops dprintf_breakpoint_ops;
+/* The structure to be used in regular breakpoints. */
+struct ordinary_breakpoint : public base_breakpoint
+{
+ int resources_needed (const struct bp_location *) override;
+ enum print_stop_action print_it (struct bpstat *bs) override;
+ void print_mention () override;
+ void print_recreate (struct ui_file *fp) override;
+};
+
+/* Internal breakpoints. */
+struct internal_breakpoint : public base_breakpoint
+{
+ void re_set () override;
+ void check_status (struct bpstat *bs) override;
+ enum print_stop_action print_it (struct bpstat *bs) override;
+ void print_mention () override;
+};
+
+/* Momentary breakpoints. */
+struct momentary_breakpoint : public base_breakpoint
+{
+ void re_set () override;
+ void check_status (struct bpstat *bs) override;
+ enum print_stop_action print_it (struct bpstat *bs) override;
+ void print_mention () override;
+};
+
+/* DPrintf breakpoints. */
+struct dprintf_breakpoint : public ordinary_breakpoint
+{
+ void re_set () override;
+ int breakpoint_hit (const struct bp_location *bl,
+ const address_space *aspace,
+ CORE_ADDR bp_addr,
+ const target_waitstatus &ws) override;
+ void print_recreate (struct ui_file *fp) override;
+ void after_condition_true (struct bpstat *bs) override;
+};
+
+/* Ranged breakpoints. */
+struct ranged_breakpoint : public ordinary_breakpoint
+{
+ int breakpoint_hit (const struct bp_location *bl,
+ const address_space *aspace,
+ CORE_ADDR bp_addr,
+ const target_waitstatus &ws) override;
+ int resources_needed (const struct bp_location *) override;
+ enum print_stop_action print_it (struct bpstat *bs) override;
+ bool print_one (struct bp_location **) override;
+ void print_one_detail (struct ui_out *) const override;
+ void print_mention () override;
+ void print_recreate (struct ui_file *fp) override;
+};
+
+/* Static tracepoints with marker (`-m'). */
+struct static_marker_tracepoint : public tracepoint
+{
+ std::vector<symtab_and_line> decode_location
+ (struct event_location *location,
+ struct program_space *search_pspace) override;
+};
/* The style in which to perform a dynamic printf. This is a user
option because different output options have different tradeoffs;
@@ -324,10 +391,10 @@ show_can_use_hw_watchpoints (struct ui_file *file, int from_tty,
struct cmd_list_element *c,
const char *value)
{
- fprintf_filtered (file,
- _("Debugger's willingness to use "
- "watchpoint hardware is %s.\n"),
- value);
+ gdb_printf (file,
+ _("Debugger's willingness to use "
+ "watchpoint hardware is %s.\n"),
+ value);
}
/* If AUTO_BOOLEAN_FALSE, gdb will not attempt to create pending breakpoints.
@@ -340,10 +407,10 @@ show_pending_break_support (struct ui_file *file, int from_tty,
struct cmd_list_element *c,
const char *value)
{
- fprintf_filtered (file,
- _("Debugger's behavior regarding "
- "pending breakpoints is %s.\n"),
- value);
+ gdb_printf (file,
+ _("Debugger's behavior regarding "
+ "pending breakpoints is %s.\n"),
+ value);
}
/* If true, gdb will automatically use hardware breakpoints for breakpoints
@@ -356,9 +423,9 @@ show_automatic_hardware_breakpoints (struct ui_file *file, int from_tty,
struct cmd_list_element *c,
const char *value)
{
- fprintf_filtered (file,
- _("Automatic usage of hardware breakpoints is %s.\n"),
- value);
+ gdb_printf (file,
+ _("Automatic usage of hardware breakpoints is %s.\n"),
+ value);
}
/* If on, GDB keeps breakpoints inserted even if the inferior is
@@ -374,8 +441,8 @@ static void
show_always_inserted_mode (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Always inserted breakpoint mode is %s.\n"),
- value);
+ gdb_printf (file, _("Always inserted breakpoint mode is %s.\n"),
+ value);
}
/* See breakpoint.h. */
@@ -798,14 +865,14 @@ show_condition_evaluation_mode (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
if (condition_evaluation_mode == condition_evaluation_auto)
- fprintf_filtered (file,
- _("Breakpoint condition evaluation "
- "mode is %s (currently %s).\n"),
- value,
- breakpoint_condition_evaluation_mode ());
+ gdb_printf (file,
+ _("Breakpoint condition evaluation "
+ "mode is %s (currently %s).\n"),
+ value,
+ breakpoint_condition_evaluation_mode ());
else
- fprintf_filtered (file, _("Breakpoint condition evaluation mode is %s.\n"),
- value);
+ gdb_printf (file, _("Breakpoint condition evaluation mode is %s.\n"),
+ value);
}
/* Parse COND_STRING in the context of LOC and set as the condition
@@ -828,9 +895,9 @@ set_breakpoint_location_condition (const char *cond_string, bp_location *loc,
{
loc->cond = std::move (new_exp);
if (loc->disabled_by_cond && loc->enabled)
- printf_filtered (_("Breakpoint %d's condition is now valid at "
- "location %d, enabling.\n"),
- bp_num, loc_num);
+ gdb_printf (_("Breakpoint %d's condition is now valid at "
+ "location %d, enabling.\n"),
+ bp_num, loc_num);
loc->disabled_by_cond = false;
}
@@ -875,9 +942,9 @@ set_breakpoint_condition (struct breakpoint *b, const char *exp,
{
loc->cond.reset ();
if (loc->disabled_by_cond && loc->enabled)
- printf_filtered (_("Breakpoint %d's condition is now valid at "
- "location %d, enabling.\n"),
- b->number, loc_num);
+ gdb_printf (_("Breakpoint %d's condition is now valid at "
+ "location %d, enabling.\n"),
+ b->number, loc_num);
loc->disabled_by_cond = false;
loc_num++;
@@ -888,7 +955,7 @@ set_breakpoint_condition (struct breakpoint *b, const char *exp,
}
if (from_tty)
- printf_filtered (_("Breakpoint %d now unconditional.\n"), b->number);
+ gdb_printf (_("Breakpoint %d now unconditional.\n"), b->number);
}
else
{
@@ -1127,7 +1194,7 @@ check_no_tracepoint_commands (struct command_line *commands)
}
}
-struct longjmp_breakpoint : public breakpoint
+struct longjmp_breakpoint : public momentary_breakpoint
{
~longjmp_breakpoint () override;
};
@@ -1139,13 +1206,8 @@ is_tracepoint_type (bptype type)
{
return (type == bp_tracepoint
|| type == bp_fast_tracepoint
- || type == bp_static_tracepoint);
-}
-
-static bool
-is_longjmp_type (bptype type)
-{
- return type == bp_longjmp || type == bp_exception;
+ || type == bp_static_tracepoint
+ || type == bp_static_marker_tracepoint);
}
/* See breakpoint.h. */
@@ -1164,12 +1226,59 @@ new_breakpoint_from_type (bptype type)
{
breakpoint *b;
- if (is_tracepoint_type (type))
- b = new tracepoint ();
- else if (is_longjmp_type (type))
- b = new longjmp_breakpoint ();
- else
- b = new breakpoint ();
+ switch (type)
+ {
+ case bp_breakpoint:
+ case bp_hardware_breakpoint:
+ b = new ordinary_breakpoint ();
+ break;
+
+ case bp_fast_tracepoint:
+ case bp_static_tracepoint:
+ case bp_tracepoint:
+ b = new tracepoint ();
+ break;
+
+ case bp_static_marker_tracepoint:
+ b = new static_marker_tracepoint ();
+ break;
+
+ case bp_dprintf:
+ b = new dprintf_breakpoint ();
+ break;
+
+ case bp_overlay_event:
+ case bp_longjmp_master:
+ case bp_std_terminate_master:
+ case bp_exception_master:
+ case bp_thread_event:
+ case bp_jit_event:
+ case bp_shlib_event:
+ b = new internal_breakpoint ();
+ break;
+
+ case bp_longjmp:
+ case bp_exception:
+ b = new longjmp_breakpoint ();
+ break;
+
+ case bp_watchpoint_scope:
+ case bp_finish:
+ case bp_gnu_ifunc_resolver_return:
+ case bp_step_resume:
+ case bp_hp_step_resume:
+ case bp_longjmp_resume:
+ case bp_longjmp_call_dummy:
+ case bp_exception_resume:
+ case bp_call_dummy:
+ case bp_until:
+ case bp_std_terminate:
+ b = new momentary_breakpoint ();
+ break;
+
+ default:
+ gdb_assert_not_reached ("invalid type");
+ }
return std::unique_ptr<breakpoint> (b);
}
@@ -1210,7 +1319,8 @@ validate_commands_for_breakpoint (struct breakpoint *b,
if (b->type == bp_fast_tracepoint)
error (_("The 'while-stepping' command "
"cannot be used for fast tracepoint"));
- else if (b->type == bp_static_tracepoint)
+ else if (b->type == bp_static_tracepoint
+ || b->type == bp_static_marker_tracepoint)
error (_("The 'while-stepping' command "
"cannot be used for static tracepoint"));
@@ -1251,7 +1361,8 @@ static_tracepoints_here (CORE_ADDR addr)
std::vector<breakpoint *> found;
for (breakpoint *b : all_breakpoints ())
- if (b->type == bp_static_tracepoint)
+ if (b->type == bp_static_tracepoint
+ || b->type == bp_static_marker_tracepoint)
{
for (bp_location *loc : b->locations ())
if (loc->address == addr)
@@ -1713,7 +1824,7 @@ software_watchpoint_add_no_memory_location (struct breakpoint *b,
{
gdb_assert (b->type == bp_watchpoint && b->loc == NULL);
- b->loc = allocate_bp_location (b);
+ b->loc = b->allocate_location ();
b->loc->pspace = pspace;
b->loc->address = -1;
b->loc->length = -1;
@@ -1877,7 +1988,7 @@ update_watchpoint (struct watchpoint *b, int reparse)
the target gains execution, through breakpoint_re_set. */
if (!can_use_hw_watchpoints)
{
- if (b->ops->works_in_software_mode (b))
+ if (b->works_in_software_mode ())
b->type = bp_watchpoint;
else
error (_("Can't set read/access watchpoint when "
@@ -1966,7 +2077,7 @@ update_watchpoint (struct watchpoint *b, int reparse)
else if (b->type == bp_access_watchpoint)
type = hw_access;
- loc = allocate_bp_location (b);
+ loc = b->allocate_location ();
for (tmp = &(b->loc); *tmp != NULL; tmp = &((*tmp)->next))
;
*tmp = loc;
@@ -2036,7 +2147,7 @@ update_watchpoint (struct watchpoint *b, int reparse)
= target_can_use_hardware_watchpoint (type, i, other_type_used);
if (target_resources_ok <= 0)
{
- int sw_mode = b->ops->works_in_software_mode (b);
+ int sw_mode = b->works_in_software_mode ();
if (target_resources_ok == 0 && !sw_mode)
error (_("Target does not support this type of "
@@ -2057,7 +2168,7 @@ update_watchpoint (struct watchpoint *b, int reparse)
b->type = type;
}
}
- else if (!b->ops->works_in_software_mode (b))
+ else if (!b->works_in_software_mode ())
{
if (!can_use_hw_watchpoints)
error (_("Can't set read/access watchpoint when "
@@ -2084,10 +2195,10 @@ update_watchpoint (struct watchpoint *b, int reparse)
}
else if (!within_current_scope)
{
- printf_filtered (_("\
+ gdb_printf (_("\
Watchpoint %d deleted because the program has left the block\n\
in which its expression is valid.\n"),
- b->number);
+ b->number);
watchpoint_del_at_next_stop (b);
}
@@ -2578,12 +2689,12 @@ insert_bp_location (struct bp_location *bl,
if (mr != nullptr && mr->attrib.mode != MEM_RW)
{
- fprintf_unfiltered (tmp_error_stream,
- _("Cannot insert breakpoint %d.\n"
- "Cannot set software breakpoint "
- "at read-only address %s\n"),
- bl->owner->number,
- paddress (bl->gdbarch, bl->address));
+ gdb_printf (tmp_error_stream,
+ _("Cannot insert breakpoint %d.\n"
+ "Cannot set software breakpoint "
+ "at read-only address %s\n"),
+ bl->owner->number,
+ paddress (bl->gdbarch, bl->address));
return 1;
}
}
@@ -2601,7 +2712,7 @@ insert_bp_location (struct bp_location *bl,
{
int val;
- val = bl->owner->ops->insert_location (bl);
+ val = bl->owner->insert_location (bl);
if (val)
bp_excpt = gdb_exception {RETURN_ERROR, GENERIC_ERROR};
}
@@ -2650,10 +2761,10 @@ insert_bp_location (struct bp_location *bl,
}
if (bp_excpt.reason != 0)
- fprintf_unfiltered (tmp_error_stream,
- "Overlay breakpoint %d "
- "failed: in ROM?\n",
- bl->owner->number);
+ gdb_printf (tmp_error_stream,
+ "Overlay breakpoint %d "
+ "failed: in ROM?\n",
+ bl->owner->number);
}
}
/* Shall we set a breakpoint at the VMA? */
@@ -2664,7 +2775,7 @@ insert_bp_location (struct bp_location *bl,
{
int val;
- val = bl->owner->ops->insert_location (bl);
+ val = bl->owner->insert_location (bl);
if (val)
bp_excpt = gdb_exception {RETURN_ERROR, GENERIC_ERROR};
}
@@ -2714,16 +2825,16 @@ insert_bp_location (struct bp_location *bl,
gdb::observers::breakpoint_modified.notify (bl->owner);
if (!*disabled_breaks)
{
- fprintf_unfiltered (tmp_error_stream,
- "Cannot insert breakpoint %d.\n",
- bl->owner->number);
- fprintf_unfiltered (tmp_error_stream,
- "Temporarily disabling shared "
- "library breakpoints:\n");
+ gdb_printf (tmp_error_stream,
+ "Cannot insert breakpoint %d.\n",
+ bl->owner->number);
+ gdb_printf (tmp_error_stream,
+ "Temporarily disabling shared "
+ "library breakpoints:\n");
}
*disabled_breaks = 1;
- fprintf_unfiltered (tmp_error_stream,
- "breakpoint #%d\n", bl->owner->number);
+ gdb_printf (tmp_error_stream,
+ "breakpoint #%d\n", bl->owner->number);
return 0;
}
else
@@ -2732,13 +2843,13 @@ insert_bp_location (struct bp_location *bl,
{
*hw_breakpoint_error = 1;
*hw_bp_error_explained_already = bp_excpt.message != NULL;
- fprintf_unfiltered (tmp_error_stream,
- "Cannot insert hardware breakpoint %d%s",
- bl->owner->number,
- bp_excpt.message ? ":" : ".\n");
+ gdb_printf (tmp_error_stream,
+ "Cannot insert hardware breakpoint %d%s",
+ bl->owner->number,
+ bp_excpt.message ? ":" : ".\n");
if (bp_excpt.message != NULL)
- fprintf_unfiltered (tmp_error_stream, "%s.\n",
- bp_excpt.what ());
+ gdb_printf (tmp_error_stream, "%s.\n",
+ bp_excpt.what ());
}
else
{
@@ -2748,17 +2859,17 @@ insert_bp_location (struct bp_location *bl,
= memory_error_message (TARGET_XFER_E_IO,
bl->gdbarch, bl->address);
- fprintf_unfiltered (tmp_error_stream,
- "Cannot insert breakpoint %d.\n"
- "%s\n",
- bl->owner->number, message.c_str ());
+ gdb_printf (tmp_error_stream,
+ "Cannot insert breakpoint %d.\n"
+ "%s\n",
+ bl->owner->number, message.c_str ());
}
else
{
- fprintf_unfiltered (tmp_error_stream,
- "Cannot insert breakpoint %d: %s\n",
- bl->owner->number,
- bp_excpt.what ());
+ gdb_printf (tmp_error_stream,
+ "Cannot insert breakpoint %d: %s\n",
+ bl->owner->number,
+ bp_excpt.what ());
}
}
return 1;
@@ -2778,10 +2889,7 @@ insert_bp_location (struct bp_location *bl,
{
int val;
- gdb_assert (bl->owner->ops != NULL
- && bl->owner->ops->insert_location != NULL);
-
- val = bl->owner->ops->insert_location (bl);
+ val = bl->owner->insert_location (bl);
/* If trying to set a read-watchpoint, and it turns out it's not
supported, try emulating one with an access watchpoint. */
@@ -2806,7 +2914,7 @@ insert_bp_location (struct bp_location *bl,
if (val == 1)
{
bl->watchpoint_type = hw_access;
- val = bl->owner->ops->insert_location (bl);
+ val = bl->owner->insert_location (bl);
if (val)
/* Back to the original value. */
@@ -2821,10 +2929,7 @@ insert_bp_location (struct bp_location *bl,
{
int val;
- gdb_assert (bl->owner->ops != NULL
- && bl->owner->ops->insert_location != NULL);
-
- val = bl->owner->ops->insert_location (bl);
+ val = bl->owner->insert_location (bl);
if (val)
{
bl->owner->enable_state = bp_disabled;
@@ -3093,9 +3198,9 @@ remove_threaded_breakpoints (struct thread_info *tp, int silent)
{
b->disposition = disp_del_at_next_stop;
- printf_filtered (_("\
+ gdb_printf (_("\
Thread-specific breakpoint %d deleted - thread %s no longer in the thread list.\n"),
- b->number, print_thread_id (tp));
+ b->number, print_thread_id (tp));
/* Hide it from the user. */
b->number = 0;
@@ -3171,10 +3276,10 @@ static const char *const longjmp_names[] =
struct breakpoint_objfile_data
{
/* Minimal symbol for "_ovly_debug_event" (if any). */
- struct bound_minimal_symbol overlay_msym {};
+ struct bound_minimal_symbol overlay_msym;
/* Minimal symbol(s) for "longjmp", "siglongjmp", etc. (if any). */
- struct bound_minimal_symbol longjmp_msym[NUM_LONGJMP_NAMES] {};
+ struct bound_minimal_symbol longjmp_msym[NUM_LONGJMP_NAMES];
/* True if we have looked for longjmp probes. */
int longjmp_searched = 0;
@@ -3184,10 +3289,10 @@ struct breakpoint_objfile_data
std::vector<probe *> longjmp_probes;
/* Minimal symbol for "std::terminate()" (if any). */
- struct bound_minimal_symbol terminate_msym {};
+ struct bound_minimal_symbol terminate_msym;
/* Minimal symbol for "_Unwind_DebugHook" (if any). */
- struct bound_minimal_symbol exception_msym {};
+ struct bound_minimal_symbol exception_msym;
/* True if we have looked for exception probes. */
int exception_searched = 0;
@@ -3256,10 +3361,10 @@ create_overlay_event_breakpoint (void)
bp_objfile_data->overlay_msym = m;
}
- addr = BMSYMBOL_VALUE_ADDRESS (bp_objfile_data->overlay_msym);
+ addr = bp_objfile_data->overlay_msym.value_address ();
b = create_internal_breakpoint (objfile->arch (), addr,
bp_overlay_event,
- &internal_breakpoint_ops);
+ &base_breakpoint_ops);
initialize_explicit_location (&explicit_loc);
explicit_loc.function_name = ASTRDUP (func_name);
b->location = new_explicit_location (&explicit_loc);
@@ -3319,7 +3424,7 @@ create_longjmp_master_breakpoint_probe (objfile *objfile)
b = create_internal_breakpoint (gdbarch,
p->get_relocated_address (objfile),
bp_longjmp_master,
- &internal_breakpoint_ops);
+ &base_breakpoint_ops);
b->location = new_probe_location ("-probe-stap libc:longjmp");
b->enable_state = bp_disabled;
}
@@ -3366,9 +3471,9 @@ create_longjmp_master_breakpoint_names (objfile *objfile)
bp_objfile_data->longjmp_msym[i] = m;
}
- addr = BMSYMBOL_VALUE_ADDRESS (bp_objfile_data->longjmp_msym[i]);
+ addr = bp_objfile_data->longjmp_msym[i].value_address ();
b = create_internal_breakpoint (gdbarch, addr, bp_longjmp_master,
- &internal_breakpoint_ops);
+ &base_breakpoint_ops);
initialize_explicit_location (&explicit_loc);
explicit_loc.function_name = ASTRDUP (func_name);
b->location = new_explicit_location (&explicit_loc);
@@ -3439,8 +3544,8 @@ create_std_terminate_master_breakpoint (void)
struct bound_minimal_symbol m;
m = lookup_minimal_symbol (func_name, NULL, objfile);
- if (m.minsym == NULL || (MSYMBOL_TYPE (m.minsym) != mst_text
- && MSYMBOL_TYPE (m.minsym) != mst_file_text))
+ if (m.minsym == NULL || (m.minsym->type () != mst_text
+ && m.minsym->type () != mst_file_text))
{
/* Prevent future lookups in this objfile. */
bp_objfile_data->terminate_msym.minsym = &msym_not_found;
@@ -3449,10 +3554,10 @@ create_std_terminate_master_breakpoint (void)
bp_objfile_data->terminate_msym = m;
}
- addr = BMSYMBOL_VALUE_ADDRESS (bp_objfile_data->terminate_msym);
+ addr = bp_objfile_data->terminate_msym.value_address ();
b = create_internal_breakpoint (objfile->arch (), addr,
bp_std_terminate_master,
- &internal_breakpoint_ops);
+ &base_breakpoint_ops);
initialize_explicit_location (&explicit_loc);
explicit_loc.function_name = ASTRDUP (func_name);
b->location = new_explicit_location (&explicit_loc);
@@ -3505,7 +3610,7 @@ create_exception_master_breakpoint_probe (objfile *objfile)
b = create_internal_breakpoint (gdbarch,
p->get_relocated_address (objfile),
bp_exception_master,
- &internal_breakpoint_ops);
+ &base_breakpoint_ops);
b->location = new_probe_location ("-probe-stap libgcc:unwind");
b->enable_state = bp_disabled;
}
@@ -3547,11 +3652,11 @@ create_exception_master_breakpoint_hook (objfile *objfile)
bp_objfile_data->exception_msym = debug_hook;
}
- addr = BMSYMBOL_VALUE_ADDRESS (bp_objfile_data->exception_msym);
+ addr = bp_objfile_data->exception_msym.value_address ();
addr = gdbarch_convert_from_func_ptr_addr
(gdbarch, addr, current_inferior ()->top_target ());
b = create_internal_breakpoint (gdbarch, addr, bp_exception_master,
- &internal_breakpoint_ops);
+ &base_breakpoint_ops);
initialize_explicit_location (&explicit_loc);
explicit_loc.function_name = ASTRDUP (func_name);
b->location = new_explicit_location (&explicit_loc);
@@ -3798,7 +3903,7 @@ remove_breakpoint_1 (struct bp_location *bl, enum remove_bp_reason reason)
&& !memory_validate_breakpoint (bl->gdbarch, &bl->target_info))
val = 0;
else
- val = bl->owner->ops->remove_location (bl, reason);
+ val = bl->owner->remove_location (bl, reason);
}
else
{
@@ -3833,7 +3938,7 @@ remove_breakpoint_1 (struct bp_location *bl, enum remove_bp_reason reason)
wrong code with the saved shadow contents. */
if (bl->loc_type == bp_loc_hardware_breakpoint
|| section_is_mapped (bl->section))
- val = bl->owner->ops->remove_location (bl, reason);
+ val = bl->owner->remove_location (bl, reason);
else
val = 0;
}
@@ -3867,11 +3972,8 @@ remove_breakpoint_1 (struct bp_location *bl, enum remove_bp_reason reason)
}
else if (bl->loc_type == bp_loc_hardware_watchpoint)
{
- gdb_assert (bl->owner->ops != NULL
- && bl->owner->ops->remove_location != NULL);
-
bl->inserted = (reason == DETACH_BREAKPOINT);
- bl->owner->ops->remove_location (bl, reason);
+ bl->owner->remove_location (bl, reason);
/* Failure to remove any of the hardware watchpoints comes here. */
if (reason == REMOVE_BREAKPOINT && bl->inserted)
@@ -3882,10 +3984,7 @@ remove_breakpoint_1 (struct bp_location *bl, enum remove_bp_reason reason)
&& breakpoint_enabled (bl->owner)
&& !bl->duplicate)
{
- gdb_assert (bl->owner->ops != NULL
- && bl->owner->ops->remove_location != NULL);
-
- val = bl->owner->ops->remove_location (bl, reason);
+ val = bl->owner->remove_location (bl, reason);
if (val)
return val;
@@ -4325,8 +4424,7 @@ bpstat_explains_signal (bpstat *bsp, enum gdb_signal sig)
}
else
{
- if (bsp->breakpoint_at->ops->explains_signal (bsp->breakpoint_at,
- sig))
+ if (bsp->breakpoint_at->explains_signal (sig))
return true;
}
}
@@ -4614,7 +4712,7 @@ print_bp_stop_message (bpstat *bs)
return PRINT_UNKNOWN;
/* Normal case. Call the breakpoint's print_it method. */
- return b->ops->print_it (bs);
+ return b->print_it (bs);
}
break;
@@ -4625,10 +4723,10 @@ print_bp_stop_message (bpstat *bs)
}
}
-/* A helper function that prints a shared library stopped event. */
+/* See breakpoint.h. */
-static void
-print_solib_event (int is_catchpoint)
+void
+print_solib_event (bool is_catchpoint)
{
bool any_deleted = !current_program_space->deleted_solibs.empty ();
bool any_added = !current_program_space->added_solibs.empty ();
@@ -4721,7 +4819,7 @@ bpstat_print (bpstat *bs, int kind)
OS-level shared library event, do the same thing. */
if (kind == TARGET_WAITKIND_LOADED)
{
- print_solib_event (0);
+ print_solib_event (false);
return PRINT_NOTHING;
}
@@ -4913,8 +5011,7 @@ watchpoint_check (bpstat *bs)
function = get_frame_function (fr);
if (function == NULL
- || !contained_in (b->exp_valid_block,
- SYMBOL_BLOCK_VALUE (function)))
+ || !contained_in (b->exp_valid_block, function->value_block ()))
within_current_scope = 0;
}
@@ -4981,8 +5078,8 @@ watchpoint_check (bpstat *bs)
watch after that (since the garbage may or may not equal
the first value assigned). */
/* We print all the stop information in
- breakpoint_ops->print_it, but in this case, by the time we
- call breakpoint_ops->print_it this bp will be deleted
+ breakpointprint_it, but in this case, by the time we
+ call breakpoint->print_it this bp will be deleted
already. So we have no choice but print the information
here. */
@@ -5021,7 +5118,7 @@ bpstat_check_location (const struct bp_location *bl,
/* BL is from an existing breakpoint. */
gdb_assert (b != NULL);
- return b->ops->breakpoint_hit (bl, aspace, bp_addr, ws);
+ return b->breakpoint_hit (bl, aspace, bp_addr, ws);
}
/* Determine if the watched values have actually changed, and we
@@ -5076,8 +5173,8 @@ bpstat_check_watchpoint (bpstat *bs)
SWITCH_THRU_ALL_UIS ()
{
- printf_filtered (_("Watchpoint %d deleted.\n"),
- b->number);
+ gdb_printf (_("Watchpoint %d deleted.\n"),
+ b->number);
}
watchpoint_del_at_next_stop (b);
e = WP_DELETED;
@@ -5469,7 +5566,7 @@ bpstat_stop_status (const address_space *aspace,
continue;
b = bs->breakpoint_at;
- b->ops->check_status (bs);
+ b->check_status (bs);
if (bs->stop)
{
bpstat_check_breakpoint_conditions (bs, thread);
@@ -5494,7 +5591,7 @@ bpstat_stop_status (const address_space *aspace,
? bs->commands.get () : NULL))
bs->print = 0;
- b->ops->after_condition_true (bs);
+ b->after_condition_true (bs);
}
}
@@ -5530,6 +5627,21 @@ bpstat_stop_status (const address_space *aspace,
return bs_head;
}
+/* See breakpoint.h. */
+
+bpstat *
+bpstat_stop_status_nowatch (const address_space *aspace, CORE_ADDR bp_addr,
+ thread_info *thread, const target_waitstatus &ws)
+{
+ gdb_assert (!target_stopped_by_watchpoint ());
+
+ /* Clear all watchpoints' 'watchpoint_triggered' value from a
+ previous stop to avoid confusing bpstat_stop_status. */
+ watchpoints_triggered (ws);
+
+ return bpstat_stop_status (aspace, bp_addr, thread, ws);
+}
+
static void
handle_jit_event (CORE_ADDR address)
{
@@ -5702,6 +5814,7 @@ bpstat_what (bpstat *bs_head)
case bp_tracepoint:
case bp_fast_tracepoint:
case bp_static_tracepoint:
+ case bp_static_marker_tracepoint:
/* Tracepoint hits should not be reported back to GDB, and
if one got through somehow, it should have been filtered
out already. */
@@ -5788,14 +5901,13 @@ bpstat_causes_stop (bpstat *bs)
-/* Compute a string of spaces suitable to indent the next line
+/* Compute a number of spaces suitable to indent the next line
so it starts at the position corresponding to the table column
named COL_NAME in the currently active table of UIOUT. */
-static char *
+static int
wrap_indent_at_field (struct ui_out *uiout, const char *col_name)
{
- static char wrap_indent[80];
int i, total_width, width, align;
const char *text;
@@ -5803,18 +5915,12 @@ wrap_indent_at_field (struct ui_out *uiout, const char *col_name)
for (i = 1; uiout->query_table_field (i, &width, &align, &text); i++)
{
if (strcmp (text, col_name) == 0)
- {
- gdb_assert (total_width < sizeof wrap_indent);
- memset (wrap_indent, ' ', total_width);
- wrap_indent[total_width] = 0;
-
- return wrap_indent;
- }
+ return total_width;
total_width += width + 1;
}
- return NULL;
+ return 0;
}
/* Determine if the locations of this breakpoint will have their conditions
@@ -5993,6 +6099,7 @@ bptype_string (enum bptype type)
{bp_tracepoint, "tracepoint"},
{bp_fast_tracepoint, "fast tracepoint"},
{bp_static_tracepoint, "static tracepoint"},
+ {bp_static_marker_tracepoint, "static marker tracepoint"},
{bp_dprintf, "dprintf"},
{bp_jit_event, "jit events"},
{bp_gnu_ifunc_resolver, "STT_GNU_IFUNC resolver"},
@@ -6051,9 +6158,10 @@ output_thread_groups (struct ui_out *uiout,
instead of going via breakpoint_ops::print_one. This makes "maint
info breakpoints" show the software breakpoint locations of
catchpoints, which are considered internal implementation
- detail. */
+ detail. Returns true if RAW_LOC is false and if the breakpoint's
+ print_one method did something; false otherwise. */
-static void
+static bool
print_one_breakpoint_location (struct breakpoint *b,
struct bp_location *loc,
int loc_number,
@@ -6117,8 +6225,9 @@ print_one_breakpoint_location (struct breakpoint *b,
uiout->field_fmt ("enabled", "%c", bpenables[(int) b->enable_state]);
/* 5 and 6 */
- if (!raw_loc && b->ops != NULL && b->ops->print_one != NULL)
- b->ops->print_one (b, last_loc);
+ bool result = false;
+ if (!raw_loc && b->print_one (last_loc))
+ result = true;
else
{
if (is_watchpoint (b))
@@ -6200,7 +6309,7 @@ print_one_breakpoint_location (struct breakpoint *b,
uiout->text ("\n");
if (!part_of_multiple)
- b->ops->print_one_detail (b, uiout);
+ b->print_one_detail (uiout);
if (part_of_multiple && frame_id_p (b->frame_id))
{
@@ -6365,6 +6474,8 @@ print_one_breakpoint_location (struct breakpoint *b,
uiout->field_string ("original-location",
event_location_to_string (b->location.get ()));
}
+
+ return result;
}
/* See breakpoint.h. */
@@ -6382,7 +6493,8 @@ print_one_breakpoint (struct breakpoint *b,
|| fix_multi_location_breakpoint_output_globally);
gdb::optional<ui_out_emit_tuple> bkpt_tuple_emitter (gdb::in_place, uiout, "bkpt");
- print_one_breakpoint_location (b, NULL, 0, last_loc, allflag, false);
+ bool printed = print_one_breakpoint_location (b, NULL, 0, last_loc,
+ allflag, false);
/* The mi2 broken format: the main breakpoint tuple ends here, the locations
are outside. */
@@ -6392,9 +6504,7 @@ print_one_breakpoint (struct breakpoint *b,
/* If this breakpoint has custom print function,
it's already printed. Otherwise, print individual
locations, if any. */
- if (b->ops == NULL
- || b->ops->print_one == NULL
- || allflag)
+ if (!printed || allflag)
{
/* If breakpoint has a single location that is disabled, we
print it as if it had several locations, since otherwise it's
@@ -6732,25 +6842,25 @@ describe_other_breakpoints (struct gdbarch *gdbarch,
if (others > 0)
{
if (others == 1)
- printf_filtered (_("Note: breakpoint "));
+ gdb_printf (_("Note: breakpoint "));
else /* if (others == ???) */
- printf_filtered (_("Note: breakpoints "));
+ gdb_printf (_("Note: breakpoints "));
for (breakpoint *b : all_breakpoints ())
if (user_breakpoint_p (b) && breakpoint_has_pc (b, pspace, pc, section))
{
others--;
- printf_filtered ("%d", b->number);
+ gdb_printf ("%d", b->number);
if (b->thread == -1 && thread != -1)
- printf_filtered (" (all threads)");
+ gdb_printf (" (all threads)");
else if (b->thread != -1)
- printf_filtered (" (thread %d)", b->thread);
- printf_filtered ("%s%s ",
- ((b->enable_state == bp_disabled
- || b->enable_state == bp_call_disabled)
- ? " (disabled)"
- : ""),
- (others > 1) ? ","
- : ((others == 1) ? " and" : ""));
+ gdb_printf (" (thread %d)", b->thread);
+ gdb_printf ("%s%s ",
+ ((b->enable_state == bp_disabled
+ || b->enable_state == bp_call_disabled)
+ ? " (disabled)"
+ : ""),
+ (others > 1) ? ","
+ : ((others == 1) ? " and" : ""));
}
current_uiout->message (_("also set at pc %ps.\n"),
styled_string (address_style.style (),
@@ -7051,6 +7161,7 @@ bp_location_from_bp_type (bptype type)
case bp_tracepoint:
case bp_fast_tracepoint:
case bp_static_tracepoint:
+ case bp_static_marker_tracepoint:
return bp_loc_other;
default:
internal_error (__FILE__, __LINE__, _("unknown breakpoint type"));
@@ -7080,14 +7191,6 @@ bp_location::bp_location (breakpoint *owner)
{
}
-/* Allocate a struct bp_location. */
-
-static struct bp_location *
-allocate_bp_location (struct breakpoint *bpt)
-{
- return bpt->ops->allocate_location (bpt);
-}
-
/* Decrement reference count. If the reference count reaches 0,
destroy the bp_location. Sets *BLP to NULL. */
@@ -7168,8 +7271,8 @@ set_breakpoint_location_function (struct bp_location *loc)
const char *function_name;
if (loc->msymbol != NULL
- && (MSYMBOL_TYPE (loc->msymbol) == mst_text_gnu_ifunc
- || MSYMBOL_TYPE (loc->msymbol) == mst_data_gnu_ifunc))
+ && (loc->msymbol->type () == mst_text_gnu_ifunc
+ || loc->msymbol->type () == mst_data_gnu_ifunc))
{
struct breakpoint *b = loc->owner;
@@ -7201,7 +7304,7 @@ get_sal_arch (struct symtab_and_line sal)
if (sal.section)
return sal.section->objfile->arch ();
if (sal.symtab)
- return SYMTAB_OBJFILE (sal.symtab)->arch ();
+ return sal.symtab->compunit ()->objfile ()->arch ();
return NULL;
}
@@ -7283,7 +7386,7 @@ set_longjmp_breakpoint (struct thread_info *tp, struct frame_id frame)
/* longjmp_breakpoint_ops ensures INITIATING_FRAME is cleared again
after their removal. */
clone = momentary_breakpoint_from_master (b, type,
- &momentary_breakpoint_ops, 1);
+ &base_breakpoint_ops, 1);
clone->thread = thread;
}
@@ -7329,7 +7432,7 @@ set_longjmp_breakpoint_for_call_dummy (void)
struct breakpoint *new_b;
new_b = momentary_breakpoint_from_master (b, bp_longjmp_call_dummy,
- &momentary_breakpoint_ops,
+ &base_breakpoint_ops,
1);
new_b->thread = inferior_thread ()->global_num;
@@ -7461,7 +7564,7 @@ set_std_terminate_breakpoint (void)
&& b->type == bp_std_terminate_master)
{
momentary_breakpoint_from_master (b, bp_std_terminate,
- &momentary_breakpoint_ops, 1);
+ &base_breakpoint_ops, 1);
}
}
@@ -7480,7 +7583,7 @@ create_thread_event_breakpoint (struct gdbarch *gdbarch, CORE_ADDR address)
struct breakpoint *b;
b = create_internal_breakpoint (gdbarch, address, bp_thread_event,
- &internal_breakpoint_ops);
+ &base_breakpoint_ops);
b->enable_state = bp_enabled;
/* location has to be used or breakpoint_re_set will delete me. */
@@ -7503,7 +7606,7 @@ struct breakpoint *
create_jit_event_breakpoint (struct gdbarch *gdbarch, CORE_ADDR address)
{
return create_internal_breakpoint (gdbarch, address, bp_jit_event,
- &internal_breakpoint_ops);
+ &base_breakpoint_ops);
}
/* Remove JIT code registration and unregistration breakpoint(s). */
@@ -7548,7 +7651,7 @@ create_solib_event_breakpoint_1 (struct gdbarch *gdbarch, CORE_ADDR address,
struct breakpoint *b;
b = create_internal_breakpoint (gdbarch, address, bp_shlib_event,
- &internal_breakpoint_ops);
+ &base_breakpoint_ops);
update_global_location_list_nothrow (insert_mode);
return b;
}
@@ -7722,492 +7825,18 @@ disable_breakpoints_in_freed_objfile (struct objfile *objfile)
}
}
-/* FORK & VFORK catchpoints. */
-
-/* An instance of this type is used to represent a fork or vfork
- catchpoint. A breakpoint is really of this type iff its ops pointer points
- to CATCH_FORK_BREAKPOINT_OPS. */
-
-struct fork_catchpoint : public breakpoint
-{
- /* Process id of a child process whose forking triggered this
- catchpoint. This field is only valid immediately after this
- catchpoint has triggered. */
- ptid_t forked_inferior_pid;
-};
-
-/* Implement the "insert" breakpoint_ops method for fork
- catchpoints. */
-
-static int
-insert_catch_fork (struct bp_location *bl)
-{
- return target_insert_fork_catchpoint (inferior_ptid.pid ());
-}
-
-/* Implement the "remove" breakpoint_ops method for fork
- catchpoints. */
-
-static int
-remove_catch_fork (struct bp_location *bl, enum remove_bp_reason reason)
-{
- return target_remove_fork_catchpoint (inferior_ptid.pid ());
-}
-
-/* Implement the "breakpoint_hit" breakpoint_ops method for fork
- catchpoints. */
-
-static int
-breakpoint_hit_catch_fork (const struct bp_location *bl,
- const address_space *aspace, CORE_ADDR bp_addr,
- const target_waitstatus &ws)
-{
- struct fork_catchpoint *c = (struct fork_catchpoint *) bl->owner;
-
- if (ws.kind () != TARGET_WAITKIND_FORKED)
- return 0;
-
- c->forked_inferior_pid = ws.child_ptid ();
- return 1;
-}
-
-/* Implement the "print_it" breakpoint_ops method for fork
- catchpoints. */
-
-static enum print_stop_action
-print_it_catch_fork (bpstat *bs)
-{
- struct ui_out *uiout = current_uiout;
- struct breakpoint *b = bs->breakpoint_at;
- struct fork_catchpoint *c = (struct fork_catchpoint *) bs->breakpoint_at;
-
- annotate_catchpoint (b->number);
- maybe_print_thread_hit_breakpoint (uiout);
- if (b->disposition == disp_del)
- uiout->text ("Temporary catchpoint ");
- else
- uiout->text ("Catchpoint ");
- if (uiout->is_mi_like_p ())
- {
- uiout->field_string ("reason", async_reason_lookup (EXEC_ASYNC_FORK));
- uiout->field_string ("disp", bpdisp_text (b->disposition));
- }
- uiout->field_signed ("bkptno", b->number);
- uiout->text (" (forked process ");
- uiout->field_signed ("newpid", c->forked_inferior_pid.pid ());
- uiout->text ("), ");
- return PRINT_SRC_AND_LOC;
-}
-
-/* Implement the "print_one" breakpoint_ops method for fork
- catchpoints. */
-
-static void
-print_one_catch_fork (struct breakpoint *b, struct bp_location **last_loc)
-{
- struct fork_catchpoint *c = (struct fork_catchpoint *) b;
- struct value_print_options opts;
- struct ui_out *uiout = current_uiout;
-
- get_user_print_options (&opts);
-
- /* Field 4, the address, is omitted (which makes the columns not
- line up too nicely with the headers, but the effect is relatively
- readable). */
- if (opts.addressprint)
- uiout->field_skip ("addr");
- annotate_field (5);
- uiout->text ("fork");
- if (c->forked_inferior_pid != null_ptid)
- {
- uiout->text (", process ");
- uiout->field_signed ("what", c->forked_inferior_pid.pid ());
- uiout->spaces (1);
- }
-
- if (uiout->is_mi_like_p ())
- uiout->field_string ("catch-type", "fork");
-}
-
-/* Implement the "print_mention" breakpoint_ops method for fork
- catchpoints. */
-
-static void
-print_mention_catch_fork (struct breakpoint *b)
-{
- printf_filtered (_("Catchpoint %d (fork)"), b->number);
-}
-
-/* Implement the "print_recreate" breakpoint_ops method for fork
- catchpoints. */
-
-static void
-print_recreate_catch_fork (struct breakpoint *b, struct ui_file *fp)
-{
- fprintf_unfiltered (fp, "catch fork");
- print_recreate_thread (b, fp);
-}
-
-/* The breakpoint_ops structure to be used in fork catchpoints. */
-
-static struct breakpoint_ops catch_fork_breakpoint_ops;
-
-/* Implement the "insert" breakpoint_ops method for vfork
- catchpoints. */
-
-static int
-insert_catch_vfork (struct bp_location *bl)
-{
- return target_insert_vfork_catchpoint (inferior_ptid.pid ());
-}
-
-/* Implement the "remove" breakpoint_ops method for vfork
- catchpoints. */
-
-static int
-remove_catch_vfork (struct bp_location *bl, enum remove_bp_reason reason)
-{
- return target_remove_vfork_catchpoint (inferior_ptid.pid ());
-}
-
-/* Implement the "breakpoint_hit" breakpoint_ops method for vfork
- catchpoints. */
-
-static int
-breakpoint_hit_catch_vfork (const struct bp_location *bl,
- const address_space *aspace, CORE_ADDR bp_addr,
- const target_waitstatus &ws)
-{
- struct fork_catchpoint *c = (struct fork_catchpoint *) bl->owner;
-
- if (ws.kind () != TARGET_WAITKIND_VFORKED)
- return 0;
-
- c->forked_inferior_pid = ws.child_ptid ();
- return 1;
-}
-
-/* Implement the "print_it" breakpoint_ops method for vfork
- catchpoints. */
-
-static enum print_stop_action
-print_it_catch_vfork (bpstat *bs)
-{
- struct ui_out *uiout = current_uiout;
- struct breakpoint *b = bs->breakpoint_at;
- struct fork_catchpoint *c = (struct fork_catchpoint *) b;
-
- annotate_catchpoint (b->number);
- maybe_print_thread_hit_breakpoint (uiout);
- if (b->disposition == disp_del)
- uiout->text ("Temporary catchpoint ");
- else
- uiout->text ("Catchpoint ");
- if (uiout->is_mi_like_p ())
- {
- uiout->field_string ("reason", async_reason_lookup (EXEC_ASYNC_VFORK));
- uiout->field_string ("disp", bpdisp_text (b->disposition));
- }
- uiout->field_signed ("bkptno", b->number);
- uiout->text (" (vforked process ");
- uiout->field_signed ("newpid", c->forked_inferior_pid.pid ());
- uiout->text ("), ");
- return PRINT_SRC_AND_LOC;
-}
-
-/* Implement the "print_one" breakpoint_ops method for vfork
- catchpoints. */
-
-static void
-print_one_catch_vfork (struct breakpoint *b, struct bp_location **last_loc)
-{
- struct fork_catchpoint *c = (struct fork_catchpoint *) b;
- struct value_print_options opts;
- struct ui_out *uiout = current_uiout;
-
- get_user_print_options (&opts);
- /* Field 4, the address, is omitted (which makes the columns not
- line up too nicely with the headers, but the effect is relatively
- readable). */
- if (opts.addressprint)
- uiout->field_skip ("addr");
- annotate_field (5);
- uiout->text ("vfork");
- if (c->forked_inferior_pid != null_ptid)
- {
- uiout->text (", process ");
- uiout->field_signed ("what", c->forked_inferior_pid.pid ());
- uiout->spaces (1);
- }
-
- if (uiout->is_mi_like_p ())
- uiout->field_string ("catch-type", "vfork");
-}
-
-/* Implement the "print_mention" breakpoint_ops method for vfork
- catchpoints. */
-
-static void
-print_mention_catch_vfork (struct breakpoint *b)
-{
- printf_filtered (_("Catchpoint %d (vfork)"), b->number);
-}
-
-/* Implement the "print_recreate" breakpoint_ops method for vfork
- catchpoints. */
-
-static void
-print_recreate_catch_vfork (struct breakpoint *b, struct ui_file *fp)
-{
- fprintf_unfiltered (fp, "catch vfork");
- print_recreate_thread (b, fp);
-}
-
-/* The breakpoint_ops structure to be used in vfork catchpoints. */
-
-static struct breakpoint_ops catch_vfork_breakpoint_ops;
-
-/* An instance of this type is used to represent an solib catchpoint.
- A breakpoint is really of this type iff its ops pointer points to
- CATCH_SOLIB_BREAKPOINT_OPS. */
-
-struct solib_catchpoint : public breakpoint
-{
- /* True for "catch load", false for "catch unload". */
- bool is_load;
-
- /* Regular expression to match, if any. COMPILED is only valid when
- REGEX is non-NULL. */
- gdb::unique_xmalloc_ptr<char> regex;
- std::unique_ptr<compiled_regex> compiled;
-};
-
-static int
-insert_catch_solib (struct bp_location *ignore)
-{
- return 0;
-}
-
-static int
-remove_catch_solib (struct bp_location *ignore, enum remove_bp_reason reason)
-{
- return 0;
-}
-
-static int
-breakpoint_hit_catch_solib (const struct bp_location *bl,
- const address_space *aspace,
- CORE_ADDR bp_addr,
- const target_waitstatus &ws)
-{
- struct solib_catchpoint *self = (struct solib_catchpoint *) bl->owner;
-
- if (ws.kind () == TARGET_WAITKIND_LOADED)
- return 1;
-
- for (breakpoint *other : all_breakpoints ())
- {
- if (other == bl->owner)
- continue;
-
- if (other->type != bp_shlib_event)
- continue;
-
- if (self->pspace != NULL && other->pspace != self->pspace)
- continue;
-
- for (bp_location *other_bl : other->locations ())
- {
- if (other->ops->breakpoint_hit (other_bl, aspace, bp_addr, ws))
- return 1;
- }
- }
-
- return 0;
-}
-
-static void
-check_status_catch_solib (struct bpstat *bs)
-{
- struct solib_catchpoint *self
- = (struct solib_catchpoint *) bs->breakpoint_at;
-
- if (self->is_load)
- {
- for (so_list *iter : current_program_space->added_solibs)
- {
- if (!self->regex
- || self->compiled->exec (iter->so_name, 0, NULL, 0) == 0)
- return;
- }
- }
- else
- {
- for (const std::string &iter : current_program_space->deleted_solibs)
- {
- if (!self->regex
- || self->compiled->exec (iter.c_str (), 0, NULL, 0) == 0)
- return;
- }
- }
-
- bs->stop = 0;
- bs->print_it = print_it_noop;
-}
-
-static enum print_stop_action
-print_it_catch_solib (bpstat *bs)
-{
- struct breakpoint *b = bs->breakpoint_at;
- struct ui_out *uiout = current_uiout;
-
- annotate_catchpoint (b->number);
- maybe_print_thread_hit_breakpoint (uiout);
- if (b->disposition == disp_del)
- uiout->text ("Temporary catchpoint ");
- else
- uiout->text ("Catchpoint ");
- uiout->field_signed ("bkptno", b->number);
- uiout->text ("\n");
- if (uiout->is_mi_like_p ())
- uiout->field_string ("disp", bpdisp_text (b->disposition));
- print_solib_event (1);
- return PRINT_SRC_AND_LOC;
-}
-
-static void
-print_one_catch_solib (struct breakpoint *b, struct bp_location **locs)
-{
- struct solib_catchpoint *self = (struct solib_catchpoint *) b;
- struct value_print_options opts;
- struct ui_out *uiout = current_uiout;
-
- get_user_print_options (&opts);
- /* Field 4, the address, is omitted (which makes the columns not
- line up too nicely with the headers, but the effect is relatively
- readable). */
- if (opts.addressprint)
- {
- annotate_field (4);
- uiout->field_skip ("addr");
- }
-
- std::string msg;
- annotate_field (5);
- if (self->is_load)
- {
- if (self->regex)
- msg = string_printf (_("load of library matching %s"),
- self->regex.get ());
- else
- msg = _("load of library");
- }
- else
- {
- if (self->regex)
- msg = string_printf (_("unload of library matching %s"),
- self->regex.get ());
- else
- msg = _("unload of library");
- }
- uiout->field_string ("what", msg);
-
- if (uiout->is_mi_like_p ())
- uiout->field_string ("catch-type", self->is_load ? "load" : "unload");
-}
-
-static void
-print_mention_catch_solib (struct breakpoint *b)
-{
- struct solib_catchpoint *self = (struct solib_catchpoint *) b;
-
- printf_filtered (_("Catchpoint %d (%s)"), b->number,
- self->is_load ? "load" : "unload");
-}
-
-static void
-print_recreate_catch_solib (struct breakpoint *b, struct ui_file *fp)
-{
- struct solib_catchpoint *self = (struct solib_catchpoint *) b;
-
- fprintf_unfiltered (fp, "%s %s",
- b->disposition == disp_del ? "tcatch" : "catch",
- self->is_load ? "load" : "unload");
- if (self->regex)
- fprintf_unfiltered (fp, " %s", self->regex.get ());
- fprintf_unfiltered (fp, "\n");
-}
-
-static struct breakpoint_ops catch_solib_breakpoint_ops;
-
-/* See breakpoint.h. */
-
-void
-add_solib_catchpoint (const char *arg, bool is_load, bool is_temp, bool enabled)
-{
- struct gdbarch *gdbarch = get_current_arch ();
-
- if (!arg)
- arg = "";
- arg = skip_spaces (arg);
-
- std::unique_ptr<solib_catchpoint> c (new solib_catchpoint ());
-
- if (*arg != '\0')
- {
- c->compiled.reset (new compiled_regex (arg, REG_NOSUB,
- _("Invalid regexp")));
- c->regex = make_unique_xstrdup (arg);
- }
-
- c->is_load = is_load;
- init_catchpoint (c.get (), gdbarch, is_temp, NULL,
- &catch_solib_breakpoint_ops);
-
- c->enable_state = enabled ? bp_enabled : bp_disabled;
-
- install_breakpoint (0, std::move (c), 1);
-}
-
-/* A helper function that does all the work for "catch load" and
- "catch unload". */
-
-static void
-catch_load_or_unload (const char *arg, int from_tty, int is_load,
- struct cmd_list_element *command)
-{
- const int enabled = 1;
- bool temp = command->context () == CATCH_TEMPORARY;
-
- add_solib_catchpoint (arg, is_load, temp, enabled);
-}
-
-static void
-catch_load_command_1 (const char *arg, int from_tty,
- struct cmd_list_element *command)
-{
- catch_load_or_unload (arg, from_tty, 1, command);
-}
-
-static void
-catch_unload_command_1 (const char *arg, int from_tty,
- struct cmd_list_element *command)
-{
- catch_load_or_unload (arg, from_tty, 0, command);
-}
-
/* See breakpoint.h. */
void
init_catchpoint (struct breakpoint *b,
struct gdbarch *gdbarch, bool temp,
- const char *cond_string,
- const struct breakpoint_ops *ops)
+ const char *cond_string)
{
symtab_and_line sal;
sal.pspace = current_program_space;
- init_raw_breakpoint (b, gdbarch, sal, bp_catchpoint, ops);
+ init_raw_breakpoint (b, gdbarch, sal, bp_catchpoint,
+ &base_breakpoint_ops);
if (cond_string == nullptr)
b->cond_string.reset ();
@@ -8231,131 +7860,6 @@ install_breakpoint (int internal, std::unique_ptr<breakpoint> &&arg, int update_
update_global_location_list (UGLL_MAY_INSERT);
}
-static void
-create_fork_vfork_event_catchpoint (struct gdbarch *gdbarch,
- bool temp, const char *cond_string,
- const struct breakpoint_ops *ops)
-{
- std::unique_ptr<fork_catchpoint> c (new fork_catchpoint ());
-
- init_catchpoint (c.get (), gdbarch, temp, cond_string, ops);
-
- c->forked_inferior_pid = null_ptid;
-
- install_breakpoint (0, std::move (c), 1);
-}
-
-/* Exec catchpoints. */
-
-/* An instance of this type is used to represent an exec catchpoint.
- A breakpoint is really of this type iff its ops pointer points to
- CATCH_EXEC_BREAKPOINT_OPS. */
-
-struct exec_catchpoint : public breakpoint
-{
- /* Filename of a program whose exec triggered this catchpoint.
- This field is only valid immediately after this catchpoint has
- triggered. */
- gdb::unique_xmalloc_ptr<char> exec_pathname;
-};
-
-static int
-insert_catch_exec (struct bp_location *bl)
-{
- return target_insert_exec_catchpoint (inferior_ptid.pid ());
-}
-
-static int
-remove_catch_exec (struct bp_location *bl, enum remove_bp_reason reason)
-{
- return target_remove_exec_catchpoint (inferior_ptid.pid ());
-}
-
-static int
-breakpoint_hit_catch_exec (const struct bp_location *bl,
- const address_space *aspace, CORE_ADDR bp_addr,
- const target_waitstatus &ws)
-{
- struct exec_catchpoint *c = (struct exec_catchpoint *) bl->owner;
-
- if (ws.kind () != TARGET_WAITKIND_EXECD)
- return 0;
-
- c->exec_pathname = make_unique_xstrdup (ws.execd_pathname ());
- return 1;
-}
-
-static enum print_stop_action
-print_it_catch_exec (bpstat *bs)
-{
- struct ui_out *uiout = current_uiout;
- struct breakpoint *b = bs->breakpoint_at;
- struct exec_catchpoint *c = (struct exec_catchpoint *) b;
-
- annotate_catchpoint (b->number);
- maybe_print_thread_hit_breakpoint (uiout);
- if (b->disposition == disp_del)
- uiout->text ("Temporary catchpoint ");
- else
- uiout->text ("Catchpoint ");
- if (uiout->is_mi_like_p ())
- {
- uiout->field_string ("reason", async_reason_lookup (EXEC_ASYNC_EXEC));
- uiout->field_string ("disp", bpdisp_text (b->disposition));
- }
- uiout->field_signed ("bkptno", b->number);
- uiout->text (" (exec'd ");
- uiout->field_string ("new-exec", c->exec_pathname.get ());
- uiout->text ("), ");
-
- return PRINT_SRC_AND_LOC;
-}
-
-static void
-print_one_catch_exec (struct breakpoint *b, struct bp_location **last_loc)
-{
- struct exec_catchpoint *c = (struct exec_catchpoint *) b;
- struct value_print_options opts;
- struct ui_out *uiout = current_uiout;
-
- get_user_print_options (&opts);
-
- /* Field 4, the address, is omitted (which makes the columns
- not line up too nicely with the headers, but the effect
- is relatively readable). */
- if (opts.addressprint)
- uiout->field_skip ("addr");
- annotate_field (5);
- uiout->text ("exec");
- if (c->exec_pathname != NULL)
- {
- uiout->text (", program \"");
- uiout->field_string ("what", c->exec_pathname.get ());
- uiout->text ("\" ");
- }
-
- if (uiout->is_mi_like_p ())
- uiout->field_string ("catch-type", "exec");
-}
-
-static void
-print_mention_catch_exec (struct breakpoint *b)
-{
- printf_filtered (_("Catchpoint %d (exec)"), b->number);
-}
-
-/* Implement the "print_recreate" breakpoint_ops method for exec
- catchpoints. */
-
-static void
-print_recreate_catch_exec (struct breakpoint *b, struct ui_file *fp)
-{
- fprintf_unfiltered (fp, "catch exec");
- print_recreate_thread (b, fp);
-}
-
-static struct breakpoint_ops catch_exec_breakpoint_ops;
-
static int
hw_breakpoint_used_count (void)
{
@@ -8367,7 +7871,7 @@ hw_breakpoint_used_count (void)
{
/* Special types of hardware breakpoints may use more than
one register. */
- i += b->ops->resources_needed (bl);
+ i += b->resources_needed (bl);
}
return i;
@@ -8388,7 +7892,7 @@ hw_watchpoint_use_count (struct breakpoint *b)
{
/* Special types of hardware watchpoints may use more than
one register. */
- i += b->ops->resources_needed (bl);
+ i += b->resources_needed (bl);
}
return i;
@@ -8464,10 +7968,10 @@ enable_breakpoints_after_startup (void)
static struct breakpoint *
new_single_step_breakpoint (int thread, struct gdbarch *gdbarch)
{
- std::unique_ptr<breakpoint> b (new breakpoint ());
+ std::unique_ptr<breakpoint> b (new momentary_breakpoint ());
init_raw_breakpoint_without_location (b.get (), gdbarch, bp_single_step,
- &momentary_breakpoint_ops);
+ &base_breakpoint_ops);
b->disposition = disp_donttouch;
b->frame_id = null_frame_id;
@@ -8492,7 +7996,7 @@ set_momentary_breakpoint (struct gdbarch *gdbarch, struct symtab_and_line sal,
tail-called one. */
gdb_assert (!frame_id_artificial_p (frame_id));
- b = set_raw_breakpoint (gdbarch, sal, type, &momentary_breakpoint_ops);
+ b = set_raw_breakpoint (gdbarch, sal, type, &base_breakpoint_ops);
b->enable_state = bp_enabled;
b->disposition = disp_donttouch;
b->frame_id = frame_id;
@@ -8517,7 +8021,7 @@ momentary_breakpoint_from_master (struct breakpoint *orig,
struct breakpoint *copy;
copy = set_raw_breakpoint_without_location (orig->gdbarch, type, ops);
- copy->loc = allocate_bp_location (copy);
+ copy->loc = copy->allocate_location ();
set_breakpoint_location_function (copy->loc);
copy->loc->gdbarch = orig->loc->gdbarch;
@@ -8551,6 +8055,7 @@ clone_momentary_breakpoint (struct breakpoint *orig)
if (orig == NULL)
return NULL;
+ gdb_assert (orig->ops == &base_breakpoint_ops);
return momentary_breakpoint_from_master (orig, orig->type, orig->ops, 0);
}
@@ -8574,7 +8079,7 @@ set_momentary_breakpoint_at_pc (struct gdbarch *gdbarch, CORE_ADDR pc,
static void
mention (struct breakpoint *b)
{
- b->ops->print_mention (b);
+ b->print_mention ();
current_uiout->text ("\n");
}
@@ -8625,10 +8130,9 @@ handle_automatic_hardware_breakpoints (bp_location *bl)
bl->loc_type = new_type;
if (!said)
{
- fprintf_filtered (gdb_stdout,
- _("Note: automatically using "
- "hardware breakpoints for "
- "read-only addresses.\n"));
+ gdb_printf (_("Note: automatically using "
+ "hardware breakpoints for "
+ "read-only addresses.\n"));
said = true;
}
}
@@ -8648,7 +8152,7 @@ add_location_to_breakpoint (struct breakpoint *b,
loc_gdbarch = b->gdbarch;
/* Adjust the breakpoint's address prior to allocating a location.
- Once we call allocate_bp_location(), that mostly uninitialized
+ Once we call allocate_location(), that mostly uninitialized
location will be placed on the location chain. Adjustment of the
breakpoint may cause target_read_memory() to be called and we do
not want its scan of the location chain to find a breakpoint and
@@ -8657,7 +8161,7 @@ add_location_to_breakpoint (struct breakpoint *b,
sal->pc, b->type);
/* Sort the locations by their ADDRESS. */
- loc = allocate_bp_location (b);
+ loc = b->allocate_location ();
for (tmp = &(b->loc); *tmp != NULL && (*tmp)->address <= adjusted_address;
tmp = &((*tmp)->next))
;
@@ -8861,7 +8365,8 @@ init_breakpoint_sal (struct breakpoint *b, struct gdbarch *gdbarch,
if ((flags & CREATE_BREAKPOINT_FLAGS_INSERTED) != 0)
b->loc->inserted = 1;
- if (type == bp_static_tracepoint)
+ if (type == bp_static_tracepoint
+ || type == bp_static_marker_tracepoint)
{
struct tracepoint *t = (struct tracepoint *) b;
struct static_tracepoint_marker marker;
@@ -8880,17 +8385,17 @@ init_breakpoint_sal (struct breakpoint *b, struct gdbarch *gdbarch,
t->static_trace_marker_id.assign (p, endp - p);
- printf_filtered (_("Probed static tracepoint "
- "marker \"%s\"\n"),
- t->static_trace_marker_id.c_str ());
+ gdb_printf (_("Probed static tracepoint "
+ "marker \"%s\"\n"),
+ t->static_trace_marker_id.c_str ());
}
else if (target_static_tracepoint_marker_at (sal.pc, &marker))
{
t->static_trace_marker_id = std::move (marker.str_id);
- printf_filtered (_("Probed static tracepoint "
- "marker \"%s\"\n"),
- t->static_trace_marker_id.c_str ());
+ gdb_printf (_("Probed static tracepoint "
+ "marker \"%s\"\n"),
+ t->static_trace_marker_id.c_str ());
}
else
warning (_("Couldn't determine the static "
@@ -9333,14 +8838,14 @@ breakpoint_ops_for_event_location_type (enum event_location_type location_type,
if (location_type == PROBE_LOCATION)
return &tracepoint_probe_breakpoint_ops;
else
- return &tracepoint_breakpoint_ops;
+ return &base_breakpoint_ops;
}
else
{
if (location_type == PROBE_LOCATION)
return &bkpt_probe_breakpoint_ops;
else
- return &bkpt_breakpoint_ops;
+ return &base_breakpoint_ops;
}
}
@@ -9353,7 +8858,7 @@ breakpoint_ops_for_event_location (const struct event_location *location,
if (location != nullptr)
return breakpoint_ops_for_event_location_type
(event_location_type (location), is_tracepoint);
- return is_tracepoint ? &tracepoint_breakpoint_ops : &bkpt_breakpoint_ops;
+ return &base_breakpoint_ops;
}
/* See breakpoint.h. */
@@ -9384,7 +8889,7 @@ create_breakpoint (struct gdbarch *gdbarch,
try
{
- ops->create_sals_from_location (location, &canonical, type_wanted);
+ ops->create_sals_from_location (location, &canonical);
}
catch (const gdb_exception_error &e)
{
@@ -9608,14 +9113,15 @@ resolve_sal_pc (struct symtab_and_line *sal)
struct symbol *sym;
bv = blockvector_for_pc_sect (sal->pc, 0, &b,
- SYMTAB_COMPUNIT (sal->symtab));
+ sal->symtab->compunit ());
if (bv != NULL)
{
sym = block_linkage_function (b);
if (sym != NULL)
{
- fixup_symbol_section (sym, SYMTAB_OBJFILE (sal->symtab));
- sal->section = sym->obj_section (SYMTAB_OBJFILE (sal->symtab));
+ fixup_symbol_section (sym, sal->symtab->compunit ()->objfile ());
+ sal->section
+ = sym->obj_section (sal->symtab->compunit ()->objfile ());
}
else
{
@@ -9659,79 +9165,6 @@ thbreak_command (const char *arg, int from_tty)
break_command_1 (arg, (BP_TEMPFLAG | BP_HARDWAREFLAG), from_tty);
}
-static void
-stop_command (const char *arg, int from_tty)
-{
- printf_filtered (_("Specify the type of breakpoint to set.\n\
-Usage: stop in <function | address>\n\
- stop at <line>\n"));
-}
-
-static void
-stopin_command (const char *arg, int from_tty)
-{
- int badInput = 0;
-
- if (arg == NULL)
- badInput = 1;
- else if (*arg != '*')
- {
- const char *argptr = arg;
- int hasColon = 0;
-
- /* Look for a ':'. If this is a line number specification, then
- say it is bad, otherwise, it should be an address or
- function/method name. */
- while (*argptr && !hasColon)
- {
- hasColon = (*argptr == ':');
- argptr++;
- }
-
- if (hasColon)
- badInput = (*argptr != ':'); /* Not a class::method */
- else
- badInput = isdigit (*arg); /* a simple line number */
- }
-
- if (badInput)
- printf_filtered (_("Usage: stop in <function | address>\n"));
- else
- break_command_1 (arg, 0, from_tty);
-}
-
-static void
-stopat_command (const char *arg, int from_tty)
-{
- int badInput = 0;
-
- if (arg == NULL || *arg == '*') /* no line number */
- badInput = 1;
- else
- {
- const char *argptr = arg;
- int hasColon = 0;
-
- /* Look for a ':'. If there is a '::' then get out, otherwise
- it is probably a line number. */
- while (*argptr && !hasColon)
- {
- hasColon = (*argptr == ':');
- argptr++;
- }
-
- if (hasColon)
- badInput = (*argptr == ':'); /* we have class::method */
- else
- badInput = !isdigit (*arg); /* not a line number */
- }
-
- if (badInput)
- printf_filtered (_("Usage: stop at LINE\n"));
- else
- break_command_1 (arg, 0, from_tty);
-}
-
/* The dynamic printf command is mostly like a regular breakpoint, but
with a prewired command list consisting of a single output command,
built from extra arguments supplied on the dprintf command
@@ -9761,7 +9194,7 @@ dprintf_command (const char *arg, int from_tty)
0, bp_dprintf,
0 /* Ignore count */,
pending_break_support,
- &dprintf_breakpoint_ops,
+ &base_breakpoint_ops,
from_tty,
1 /* enabled */,
0 /* internal */,
@@ -9774,14 +9207,13 @@ agent_printf_command (const char *arg, int from_tty)
error (_("May only run agent-printf on the target"));
}
-/* Implement the "breakpoint_hit" breakpoint_ops method for
- ranged breakpoints. */
+/* Implement the "breakpoint_hit" method for ranged breakpoints. */
-static int
-breakpoint_hit_ranged_breakpoint (const struct bp_location *bl,
- const address_space *aspace,
- CORE_ADDR bp_addr,
- const target_waitstatus &ws)
+int
+ranged_breakpoint::breakpoint_hit (const struct bp_location *bl,
+ const address_space *aspace,
+ CORE_ADDR bp_addr,
+ const target_waitstatus &ws)
{
if (ws.kind () != TARGET_WAITKIND_STOPPED
|| ws.sig () != GDB_SIGNAL_TRAP)
@@ -9791,35 +9223,32 @@ breakpoint_hit_ranged_breakpoint (const struct bp_location *bl,
bl->length, aspace, bp_addr);
}
-/* Implement the "resources_needed" breakpoint_ops method for
- ranged breakpoints. */
+/* Implement the "resources_needed" method for ranged breakpoints. */
-static int
-resources_needed_ranged_breakpoint (const struct bp_location *bl)
+int
+ranged_breakpoint::resources_needed (const struct bp_location *bl)
{
return target_ranged_break_num_registers ();
}
-/* Implement the "print_it" breakpoint_ops method for
- ranged breakpoints. */
+/* Implement the "print_it" method for ranged breakpoints. */
-static enum print_stop_action
-print_it_ranged_breakpoint (bpstat *bs)
+enum print_stop_action
+ranged_breakpoint::print_it (bpstat *bs)
{
- struct breakpoint *b = bs->breakpoint_at;
- struct bp_location *bl = b->loc;
+ struct bp_location *bl = loc;
struct ui_out *uiout = current_uiout;
- gdb_assert (b->type == bp_hardware_breakpoint);
+ gdb_assert (type == bp_hardware_breakpoint);
/* Ranged breakpoints have only one location. */
gdb_assert (bl && bl->next == NULL);
- annotate_breakpoint (b->number);
+ annotate_breakpoint (number);
maybe_print_thread_hit_breakpoint (uiout);
- if (b->disposition == disp_del)
+ if (disposition == disp_del)
uiout->text ("Temporary ranged breakpoint ");
else
uiout->text ("Ranged breakpoint ");
@@ -9827,22 +9256,20 @@ print_it_ranged_breakpoint (bpstat *bs)
{
uiout->field_string ("reason",
async_reason_lookup (EXEC_ASYNC_BREAKPOINT_HIT));
- uiout->field_string ("disp", bpdisp_text (b->disposition));
+ uiout->field_string ("disp", bpdisp_text (disposition));
}
- uiout->field_signed ("bkptno", b->number);
+ uiout->field_signed ("bkptno", number);
uiout->text (", ");
return PRINT_SRC_AND_LOC;
}
-/* Implement the "print_one" breakpoint_ops method for
- ranged breakpoints. */
+/* Implement the "print_one" method for ranged breakpoints. */
-static void
-print_one_ranged_breakpoint (struct breakpoint *b,
- struct bp_location **last_loc)
+bool
+ranged_breakpoint::print_one (struct bp_location **last_loc)
{
- struct bp_location *bl = b->loc;
+ struct bp_location *bl = loc;
struct value_print_options opts;
struct ui_out *uiout = current_uiout;
@@ -9856,19 +9283,19 @@ print_one_ranged_breakpoint (struct breakpoint *b,
by print_one_detail_ranged_breakpoint. */
uiout->field_skip ("addr");
annotate_field (5);
- print_breakpoint_location (b, bl);
+ print_breakpoint_location (this, bl);
*last_loc = bl;
+
+ return true;
}
-/* Implement the "print_one_detail" breakpoint_ops method for
- ranged breakpoints. */
+/* Implement the "print_one_detail" method for ranged breakpoints. */
-static void
-print_one_detail_ranged_breakpoint (const struct breakpoint *b,
- struct ui_out *uiout)
+void
+ranged_breakpoint::print_one_detail (struct ui_out *uiout) const
{
CORE_ADDR address_start, address_end;
- struct bp_location *bl = b->loc;
+ struct bp_location *bl = loc;
string_file stb;
gdb_assert (bl);
@@ -9884,39 +9311,33 @@ print_one_detail_ranged_breakpoint (const struct breakpoint *b,
uiout->text ("\n");
}
-/* Implement the "print_mention" breakpoint_ops method for
- ranged breakpoints. */
+/* Implement the "print_mention" method for ranged breakpoints. */
-static void
-print_mention_ranged_breakpoint (struct breakpoint *b)
+void
+ranged_breakpoint::print_mention ()
{
- struct bp_location *bl = b->loc;
+ struct bp_location *bl = loc;
struct ui_out *uiout = current_uiout;
gdb_assert (bl);
- gdb_assert (b->type == bp_hardware_breakpoint);
+ gdb_assert (type == bp_hardware_breakpoint);
uiout->message (_("Hardware assisted ranged breakpoint %d from %s to %s."),
- b->number, paddress (bl->gdbarch, bl->address),
+ number, paddress (bl->gdbarch, bl->address),
paddress (bl->gdbarch, bl->address + bl->length - 1));
}
-/* Implement the "print_recreate" breakpoint_ops method for
- ranged breakpoints. */
+/* Implement the "print_recreate" method for ranged breakpoints. */
-static void
-print_recreate_ranged_breakpoint (struct breakpoint *b, struct ui_file *fp)
+void
+ranged_breakpoint::print_recreate (struct ui_file *fp)
{
- fprintf_unfiltered (fp, "break-range %s, %s",
- event_location_to_string (b->location.get ()),
- event_location_to_string (b->location_range_end.get ()));
- print_recreate_thread (b, fp);
+ gdb_printf (fp, "break-range %s, %s",
+ event_location_to_string (location.get ()),
+ event_location_to_string (location_range_end.get ()));
+ print_recreate_thread (this, fp);
}
-/* The breakpoint_ops structure to be used in ranged breakpoints. */
-
-static struct breakpoint_ops ranged_breakpoint_ops;
-
/* Find the address where the end of the breakpoint range should be
placed, given the SAL of the end of the range. This is so that if
the user provides a line number, the end of the range is set to the
@@ -10038,8 +9459,12 @@ break_range_command (const char *arg, int from_tty)
}
/* Now set up the breakpoint. */
- b = set_raw_breakpoint (get_current_arch (), sal_start,
- bp_hardware_breakpoint, &ranged_breakpoint_ops);
+ std::unique_ptr<breakpoint> br (new ranged_breakpoint ());
+ init_raw_breakpoint (br.get (), get_current_arch (),
+ sal_start, bp_hardware_breakpoint,
+ &base_breakpoint_ops);
+ b = add_to_breakpoint_chain (std::move (br));
+
set_breakpoint_count (breakpoint_count + 1);
b->number = breakpoint_count;
b->disposition = disp_donttouch;
@@ -10063,13 +9488,11 @@ watchpoint_exp_is_const (const struct expression *exp)
return exp->op->constant_p ();
}
-/* Implement the "re_set" breakpoint_ops method for watchpoints. */
+/* Implement the "re_set" method for watchpoints. */
-static void
-re_set_watchpoint (struct breakpoint *b)
+void
+watchpoint::re_set ()
{
- struct watchpoint *w = (struct watchpoint *) b;
-
/* Watchpoint can be either on expression using entirely global
variables, or it can be on local variables.
@@ -10091,44 +9514,42 @@ re_set_watchpoint (struct breakpoint *b)
I'm not sure we'll ever be called in this case.
If a local watchpoint's frame id is still valid, then
- w->exp_valid_block is likewise valid, and we can safely use it.
+ exp_valid_block is likewise valid, and we can safely use it.
Don't do anything about disabled watchpoints, since they will be
reevaluated again when enabled. */
- update_watchpoint (w, 1 /* reparse */);
+ update_watchpoint (this, 1 /* reparse */);
}
-/* Implement the "insert" breakpoint_ops method for hardware watchpoints. */
+/* Implement the "insert" method for hardware watchpoints. */
-static int
-insert_watchpoint (struct bp_location *bl)
+int
+watchpoint::insert_location (struct bp_location *bl)
{
- struct watchpoint *w = (struct watchpoint *) bl->owner;
- int length = w->exact ? 1 : bl->length;
+ int length = exact ? 1 : bl->length;
return target_insert_watchpoint (bl->address, length, bl->watchpoint_type,
- w->cond_exp.get ());
+ cond_exp.get ());
}
-/* Implement the "remove" breakpoint_ops method for hardware watchpoints. */
+/* Implement the "remove" method for hardware watchpoints. */
-static int
-remove_watchpoint (struct bp_location *bl, enum remove_bp_reason reason)
+int
+watchpoint::remove_location (struct bp_location *bl,
+ enum remove_bp_reason reason)
{
- struct watchpoint *w = (struct watchpoint *) bl->owner;
- int length = w->exact ? 1 : bl->length;
+ int length = exact ? 1 : bl->length;
return target_remove_watchpoint (bl->address, length, bl->watchpoint_type,
- w->cond_exp.get ());
+ cond_exp.get ());
}
-static int
-breakpoint_hit_watchpoint (const struct bp_location *bl,
- const address_space *aspace, CORE_ADDR bp_addr,
- const target_waitstatus &ws)
+int
+watchpoint::breakpoint_hit (const struct bp_location *bl,
+ const address_space *aspace, CORE_ADDR bp_addr,
+ const target_waitstatus &ws)
{
struct breakpoint *b = bl->owner;
- struct watchpoint *w = (struct watchpoint *) b;
/* Continuable hardware watchpoints are treated as non-existent if the
reason we stopped wasn't a hardware watchpoint (we didn't stop on
@@ -10137,54 +9558,51 @@ breakpoint_hit_watchpoint (const struct bp_location *bl,
been defined. Also skip watchpoints which we know did not trigger
(did not match the data address). */
if (is_hardware_watchpoint (b)
- && w->watchpoint_triggered == watch_triggered_no)
+ && watchpoint_triggered == watch_triggered_no)
return 0;
return 1;
}
-static void
-check_status_watchpoint (bpstat *bs)
+void
+watchpoint::check_status (bpstat *bs)
{
gdb_assert (is_watchpoint (bs->breakpoint_at));
bpstat_check_watchpoint (bs);
}
-/* Implement the "resources_needed" breakpoint_ops method for
- hardware watchpoints. */
+/* Implement the "resources_needed" method for hardware
+ watchpoints. */
-static int
-resources_needed_watchpoint (const struct bp_location *bl)
+int
+watchpoint::resources_needed (const struct bp_location *bl)
{
- struct watchpoint *w = (struct watchpoint *) bl->owner;
- int length = w->exact? 1 : bl->length;
+ int length = exact? 1 : bl->length;
return target_region_ok_for_hw_watchpoint (bl->address, length);
}
-/* Implement the "works_in_software_mode" breakpoint_ops method for
- hardware watchpoints. */
+/* Implement the "works_in_software_mode" method for hardware
+ watchpoints. */
-static int
-works_in_software_mode_watchpoint (const struct breakpoint *b)
+int
+watchpoint::works_in_software_mode () const
{
/* Read and access watchpoints only work with hardware support. */
- return b->type == bp_watchpoint || b->type == bp_hardware_watchpoint;
+ return type == bp_watchpoint || type == bp_hardware_watchpoint;
}
-static enum print_stop_action
-print_it_watchpoint (bpstat *bs)
+enum print_stop_action
+watchpoint::print_it (bpstat *bs)
{
struct breakpoint *b;
enum print_stop_action result;
- struct watchpoint *w;
struct ui_out *uiout = current_uiout;
gdb_assert (bs->bp_location_at != NULL);
b = bs->breakpoint_at;
- w = (struct watchpoint *) b;
annotate_watchpoint (b->number);
maybe_print_thread_hit_breakpoint (uiout);
@@ -10205,7 +9623,7 @@ print_it_watchpoint (bpstat *bs)
watchpoint_value_print (bs->old_val.get (), &stb);
uiout->field_stream ("old", stb);
uiout->text ("\nNew value = ");
- watchpoint_value_print (w->val.get (), &stb);
+ watchpoint_value_print (val.get (), &stb);
uiout->field_stream ("new", stb);
uiout->text ("\n");
/* More than one watchpoint may have been triggered. */
@@ -10219,7 +9637,7 @@ print_it_watchpoint (bpstat *bs)
mention (b);
tuple_emitter.emplace (uiout, "value");
uiout->text ("\nValue = ");
- watchpoint_value_print (w->val.get (), &stb);
+ watchpoint_value_print (val.get (), &stb);
uiout->field_stream ("value", stb);
uiout->text ("\n");
result = PRINT_UNKNOWN;
@@ -10249,7 +9667,7 @@ print_it_watchpoint (bpstat *bs)
tuple_emitter.emplace (uiout, "value");
uiout->text ("\nValue = ");
}
- watchpoint_value_print (w->val.get (), &stb);
+ watchpoint_value_print (val.get (), &stb);
uiout->field_stream ("new", stb);
uiout->text ("\n");
result = PRINT_UNKNOWN;
@@ -10261,17 +9679,15 @@ print_it_watchpoint (bpstat *bs)
return result;
}
-/* Implement the "print_mention" breakpoint_ops method for hardware
- watchpoints. */
+/* Implement the "print_mention" method for hardware watchpoints. */
-static void
-print_mention_watchpoint (struct breakpoint *b)
+void
+watchpoint::print_mention ()
{
- struct watchpoint *w = (struct watchpoint *) b;
struct ui_out *uiout = current_uiout;
const char *tuple_name;
- switch (b->type)
+ switch (type)
{
case bp_watchpoint:
uiout->text ("Watchpoint ");
@@ -10295,107 +9711,105 @@ print_mention_watchpoint (struct breakpoint *b)
}
ui_out_emit_tuple tuple_emitter (uiout, tuple_name);
- uiout->field_signed ("number", b->number);
+ uiout->field_signed ("number", number);
uiout->text (": ");
- uiout->field_string ("exp", w->exp_string.get ());
+ uiout->field_string ("exp", exp_string.get ());
}
-/* Implement the "print_recreate" breakpoint_ops method for
- watchpoints. */
+/* Implement the "print_recreate" method for watchpoints. */
-static void
-print_recreate_watchpoint (struct breakpoint *b, struct ui_file *fp)
+void
+watchpoint::print_recreate (struct ui_file *fp)
{
- struct watchpoint *w = (struct watchpoint *) b;
-
- switch (b->type)
+ switch (type)
{
case bp_watchpoint:
case bp_hardware_watchpoint:
- fprintf_unfiltered (fp, "watch");
+ gdb_printf (fp, "watch");
break;
case bp_read_watchpoint:
- fprintf_unfiltered (fp, "rwatch");
+ gdb_printf (fp, "rwatch");
break;
case bp_access_watchpoint:
- fprintf_unfiltered (fp, "awatch");
+ gdb_printf (fp, "awatch");
break;
default:
internal_error (__FILE__, __LINE__,
_("Invalid watchpoint type."));
}
- fprintf_unfiltered (fp, " %s", w->exp_string.get ());
- print_recreate_thread (b, fp);
+ gdb_printf (fp, " %s", exp_string.get ());
+ print_recreate_thread (this, fp);
}
-/* Implement the "explains_signal" breakpoint_ops method for
- watchpoints. */
+/* Implement the "explains_signal" method for watchpoints. */
-static int
-explains_signal_watchpoint (struct breakpoint *b, enum gdb_signal sig)
+int
+watchpoint::explains_signal (enum gdb_signal sig)
{
/* A software watchpoint cannot cause a signal other than
GDB_SIGNAL_TRAP. */
- if (b->type == bp_watchpoint && sig != GDB_SIGNAL_TRAP)
+ if (type == bp_watchpoint && sig != GDB_SIGNAL_TRAP)
return 0;
return 1;
}
-/* The breakpoint_ops structure to be used in hardware watchpoints. */
-
-static struct breakpoint_ops watchpoint_breakpoint_ops;
+struct masked_watchpoint : public watchpoint
+{
+ int insert_location (struct bp_location *) override;
+ int remove_location (struct bp_location *,
+ enum remove_bp_reason reason) override;
+ int resources_needed (const struct bp_location *) override;
+ int works_in_software_mode () const override;
+ enum print_stop_action print_it (struct bpstat *bs) override;
+ void print_one_detail (struct ui_out *) const override;
+ void print_mention () override;
+ void print_recreate (struct ui_file *fp) override;
+};
-/* Implement the "insert" breakpoint_ops method for
- masked hardware watchpoints. */
+/* Implement the "insert" method for masked hardware watchpoints. */
-static int
-insert_masked_watchpoint (struct bp_location *bl)
+int
+masked_watchpoint::insert_location (struct bp_location *bl)
{
- struct watchpoint *w = (struct watchpoint *) bl->owner;
-
- return target_insert_mask_watchpoint (bl->address, w->hw_wp_mask,
+ return target_insert_mask_watchpoint (bl->address, hw_wp_mask,
bl->watchpoint_type);
}
-/* Implement the "remove" breakpoint_ops method for
- masked hardware watchpoints. */
+/* Implement the "remove" method for masked hardware watchpoints. */
-static int
-remove_masked_watchpoint (struct bp_location *bl, enum remove_bp_reason reason)
+int
+masked_watchpoint::remove_location (struct bp_location *bl,
+ enum remove_bp_reason reason)
{
- struct watchpoint *w = (struct watchpoint *) bl->owner;
-
- return target_remove_mask_watchpoint (bl->address, w->hw_wp_mask,
+ return target_remove_mask_watchpoint (bl->address, hw_wp_mask,
bl->watchpoint_type);
}
-/* Implement the "resources_needed" breakpoint_ops method for
- masked hardware watchpoints. */
+/* Implement the "resources_needed" method for masked hardware
+ watchpoints. */
-static int
-resources_needed_masked_watchpoint (const struct bp_location *bl)
+int
+masked_watchpoint::resources_needed (const struct bp_location *bl)
{
- struct watchpoint *w = (struct watchpoint *) bl->owner;
-
- return target_masked_watch_num_registers (bl->address, w->hw_wp_mask);
+ return target_masked_watch_num_registers (bl->address, hw_wp_mask);
}
-/* Implement the "works_in_software_mode" breakpoint_ops method for
- masked hardware watchpoints. */
+/* Implement the "works_in_software_mode" method for masked hardware
+ watchpoints. */
-static int
-works_in_software_mode_masked_watchpoint (const struct breakpoint *b)
+int
+masked_watchpoint::works_in_software_mode () const
{
return 0;
}
-/* Implement the "print_it" breakpoint_ops method for
- masked hardware watchpoints. */
+/* Implement the "print_it" method for masked hardware
+ watchpoints. */
-static enum print_stop_action
-print_it_masked_watchpoint (bpstat *bs)
+enum print_stop_action
+masked_watchpoint::print_it (bpstat *bs)
{
struct breakpoint *b = bs->breakpoint_at;
struct ui_out *uiout = current_uiout;
@@ -10441,34 +9855,30 @@ address and value which triggered this watchpoint.\n"));
return PRINT_UNKNOWN;
}
-/* Implement the "print_one_detail" breakpoint_ops method for
- masked hardware watchpoints. */
+/* Implement the "print_one_detail" method for masked hardware
+ watchpoints. */
-static void
-print_one_detail_masked_watchpoint (const struct breakpoint *b,
- struct ui_out *uiout)
+void
+masked_watchpoint::print_one_detail (struct ui_out *uiout) const
{
- struct watchpoint *w = (struct watchpoint *) b;
-
/* Masked watchpoints have only one location. */
- gdb_assert (b->loc && b->loc->next == NULL);
+ gdb_assert (loc && loc->next == NULL);
uiout->text ("\tmask ");
- uiout->field_core_addr ("mask", b->loc->gdbarch, w->hw_wp_mask);
+ uiout->field_core_addr ("mask", loc->gdbarch, hw_wp_mask);
uiout->text ("\n");
}
-/* Implement the "print_mention" breakpoint_ops method for
- masked hardware watchpoints. */
+/* Implement the "print_mention" method for masked hardware
+ watchpoints. */
-static void
-print_mention_masked_watchpoint (struct breakpoint *b)
+void
+masked_watchpoint::print_mention ()
{
- struct watchpoint *w = (struct watchpoint *) b;
struct ui_out *uiout = current_uiout;
const char *tuple_name;
- switch (b->type)
+ switch (type)
{
case bp_hardware_watchpoint:
uiout->text ("Masked hardware watchpoint ");
@@ -10488,50 +9898,44 @@ print_mention_masked_watchpoint (struct breakpoint *b)
}
ui_out_emit_tuple tuple_emitter (uiout, tuple_name);
- uiout->field_signed ("number", b->number);
+ uiout->field_signed ("number", number);
uiout->text (": ");
- uiout->field_string ("exp", w->exp_string.get ());
+ uiout->field_string ("exp", exp_string.get ());
}
-/* Implement the "print_recreate" breakpoint_ops method for
- masked hardware watchpoints. */
+/* Implement the "print_recreate" method for masked hardware
+ watchpoints. */
-static void
-print_recreate_masked_watchpoint (struct breakpoint *b, struct ui_file *fp)
+void
+masked_watchpoint::print_recreate (struct ui_file *fp)
{
- struct watchpoint *w = (struct watchpoint *) b;
-
- switch (b->type)
+ switch (type)
{
case bp_hardware_watchpoint:
- fprintf_unfiltered (fp, "watch");
+ gdb_printf (fp, "watch");
break;
case bp_read_watchpoint:
- fprintf_unfiltered (fp, "rwatch");
+ gdb_printf (fp, "rwatch");
break;
case bp_access_watchpoint:
- fprintf_unfiltered (fp, "awatch");
+ gdb_printf (fp, "awatch");
break;
default:
internal_error (__FILE__, __LINE__,
_("Invalid hardware watchpoint type."));
}
- fprintf_unfiltered (fp, " %s mask 0x%s", w->exp_string.get (),
- phex (w->hw_wp_mask, sizeof (CORE_ADDR)));
- print_recreate_thread (b, fp);
+ gdb_printf (fp, " %s mask 0x%s", exp_string.get (),
+ phex (hw_wp_mask, sizeof (CORE_ADDR)));
+ print_recreate_thread (this, fp);
}
-/* The breakpoint_ops structure to be used in masked hardware watchpoints. */
-
-static struct breakpoint_ops masked_watchpoint_breakpoint_ops;
-
/* Tell whether the given watchpoint is a masked hardware watchpoint. */
static bool
is_masked_watchpoint (const struct breakpoint *b)
{
- return b->ops == &masked_watchpoint_breakpoint_ops;
+ return dynamic_cast<const masked_watchpoint *> (b) != nullptr;
}
/* accessflag: hw_write: watch write,
@@ -10752,7 +10156,7 @@ watch_command_1 (const char *arg, int accessflag, int from_tty,
scope_breakpoint
= create_internal_breakpoint (caller_arch, caller_pc,
bp_watchpoint_scope,
- &momentary_breakpoint_ops);
+ &base_breakpoint_ops);
/* create_internal_breakpoint could invalidate WP_FRAME. */
wp_frame = NULL;
@@ -10787,14 +10191,14 @@ watch_command_1 (const char *arg, int accessflag, int from_tty,
else
bp_type = bp_hardware_watchpoint;
- std::unique_ptr<watchpoint> w (new watchpoint ());
-
+ std::unique_ptr<watchpoint> w;
if (use_mask)
- init_raw_breakpoint_without_location (w.get (), NULL, bp_type,
- &masked_watchpoint_breakpoint_ops);
+ w.reset (new masked_watchpoint ());
else
- init_raw_breakpoint_without_location (w.get (), NULL, bp_type,
- &watchpoint_breakpoint_ops);
+ w.reset (new watchpoint ());
+ init_raw_breakpoint_without_location (w.get (), nullptr, bp_type,
+ &base_breakpoint_ops);
+
w->thread = thread;
w->task = task;
w->disposition = disp_donttouch;
@@ -11208,8 +10612,10 @@ until_break_command (const char *arg, int from_tty, int anywhere)
breakpoints.emplace_back (std::move (location_breakpoint));
}
- tp->thread_fsm = new until_break_fsm (command_interp (), tp->global_num,
- std::move (breakpoints));
+ tp->set_thread_fsm
+ (std::unique_ptr<thread_fsm>
+ (new until_break_fsm (command_interp (), tp->global_num,
+ std::move (breakpoints))));
if (lj_deleter)
lj_deleter->release ();
@@ -11217,129 +10623,11 @@ until_break_command (const char *arg, int from_tty, int anywhere)
proceed (-1, GDB_SIGNAL_DEFAULT);
}
-/* This function attempts to parse an optional "if <cond>" clause
- from the arg string. If one is not found, it returns NULL.
-
- Else, it returns a pointer to the condition string. (It does not
- attempt to evaluate the string against a particular block.) And,
- it updates arg to point to the first character following the parsed
- if clause in the arg string. */
-
-const char *
-ep_parse_optional_if_clause (const char **arg)
-{
- const char *cond_string;
-
- if (((*arg)[0] != 'i') || ((*arg)[1] != 'f') || !isspace ((*arg)[2]))
- return NULL;
-
- /* Skip the "if" keyword. */
- (*arg) += 2;
-
- /* Skip any extra leading whitespace, and record the start of the
- condition string. */
- *arg = skip_spaces (*arg);
- cond_string = *arg;
-
- /* Assume that the condition occupies the remainder of the arg
- string. */
- (*arg) += strlen (cond_string);
-
- return cond_string;
-}
-
-/* Commands to deal with catching events, such as signals, exceptions,
- process start/exit, etc. */
-
-typedef enum
-{
- catch_fork_temporary, catch_vfork_temporary,
- catch_fork_permanent, catch_vfork_permanent
-}
-catch_fork_kind;
-
-static void
-catch_fork_command_1 (const char *arg, int from_tty,
- struct cmd_list_element *command)
-{
- struct gdbarch *gdbarch = get_current_arch ();
- const char *cond_string = NULL;
- catch_fork_kind fork_kind;
-
- fork_kind = (catch_fork_kind) (uintptr_t) command->context ();
- bool temp = (fork_kind == catch_fork_temporary
- || fork_kind == catch_vfork_temporary);
-
- if (!arg)
- arg = "";
- arg = skip_spaces (arg);
-
- /* The allowed syntax is:
- catch [v]fork
- catch [v]fork if <cond>
-
- First, check if there's an if clause. */
- cond_string = ep_parse_optional_if_clause (&arg);
-
- if ((*arg != '\0') && !isspace (*arg))
- error (_("Junk at end of arguments."));
-
- /* If this target supports it, create a fork or vfork catchpoint
- and enable reporting of such events. */
- switch (fork_kind)
- {
- case catch_fork_temporary:
- case catch_fork_permanent:
- create_fork_vfork_event_catchpoint (gdbarch, temp, cond_string,
- &catch_fork_breakpoint_ops);
- break;
- case catch_vfork_temporary:
- case catch_vfork_permanent:
- create_fork_vfork_event_catchpoint (gdbarch, temp, cond_string,
- &catch_vfork_breakpoint_ops);
- break;
- default:
- error (_("unsupported or unknown fork kind; cannot catch it"));
- break;
- }
-}
-
-static void
-catch_exec_command_1 (const char *arg, int from_tty,
- struct cmd_list_element *command)
-{
- struct gdbarch *gdbarch = get_current_arch ();
- const char *cond_string = NULL;
- bool temp = command->context () == CATCH_TEMPORARY;
-
- if (!arg)
- arg = "";
- arg = skip_spaces (arg);
-
- /* The allowed syntax is:
- catch exec
- catch exec if <cond>
-
- First, check if there's an if clause. */
- cond_string = ep_parse_optional_if_clause (&arg);
-
- if ((*arg != '\0') && !isspace (*arg))
- error (_("Junk at end of arguments."));
-
- std::unique_ptr<exec_catchpoint> c (new exec_catchpoint ());
- init_catchpoint (c.get (), gdbarch, temp, cond_string,
- &catch_exec_breakpoint_ops);
- c->exec_pathname.reset ();
-
- install_breakpoint (0, std::move (c), 1);
-}
-
void
init_ada_exception_breakpoint (struct breakpoint *b,
struct gdbarch *gdbarch,
struct symtab_and_line sal,
const char *addr_string,
- const struct breakpoint_ops *ops,
int tempflag,
int enabled,
int from_tty)
@@ -11362,7 +10650,8 @@ init_ada_exception_breakpoint (struct breakpoint *b,
enough for now, though. */
}
- init_raw_breakpoint (b, gdbarch, sal, bp_catchpoint, ops);
+ init_raw_breakpoint (b, gdbarch, sal, bp_catchpoint,
+ &base_breakpoint_ops);
b->enable_state = enabled ? bp_enabled : bp_disabled;
b->disposition = tempflag ? disp_del : disp_donttouch;
@@ -11472,7 +10761,8 @@ clear_command (const char *arg, int from_tty)
{
int match = 0;
/* Are we going to delete b? */
- if (b->type != bp_none && !is_watchpoint (b))
+ if (b->type != bp_none && !is_watchpoint (b)
+ && user_breakpoint_p (b))
{
for (bp_location *loc : b->locations ())
{
@@ -11535,19 +10825,19 @@ clear_command (const char *arg, int from_tty)
if (from_tty)
{
if (found.size () == 1)
- printf_filtered (_("Deleted breakpoint "));
+ gdb_printf (_("Deleted breakpoint "));
else
- printf_filtered (_("Deleted breakpoints "));
+ gdb_printf (_("Deleted breakpoints "));
}
for (breakpoint *iter : found)
{
if (from_tty)
- printf_filtered ("%d ", iter->number);
+ gdb_printf ("%d ", iter->number);
delete_breakpoint (iter);
}
if (from_tty)
- putchar_filtered ('\n');
+ gdb_putc ('\n');
}
/* Delete breakpoint in BS if they are `delete' breakpoints and
@@ -11952,9 +11242,9 @@ update_global_location_list (enum ugll_insert_mode insert_mode)
Note that at this point, old_loc->owner is still
valid, as delete_breakpoint frees the breakpoint
only after calling us. */
- printf_filtered (_("warning: Error removing "
- "breakpoint %d\n"),
- old_loc->owner->number);
+ gdb_printf (_("warning: Error removing "
+ "breakpoint %d\n"),
+ old_loc->owner->number);
}
removed = 1;
}
@@ -12179,7 +11469,7 @@ bpstat_remove_breakpoint_callback (struct thread_info *th, void *data)
return 0;
}
-/* Helper for breakpoint and tracepoint breakpoint_ops->mention
+/* Helper for breakpoint and tracepoint breakpoint->mention
callbacks. */
static void
@@ -12198,29 +11488,29 @@ say_where (struct breakpoint *b)
a condition or dprintf arguments. */
if (b->extra_string == NULL)
{
- printf_filtered (_(" (%s) pending."),
- event_location_to_string (b->location.get ()));
+ gdb_printf (_(" (%s) pending."),
+ event_location_to_string (b->location.get ()));
}
else if (b->type == bp_dprintf)
{
- printf_filtered (_(" (%s,%s) pending."),
- event_location_to_string (b->location.get ()),
- b->extra_string.get ());
+ gdb_printf (_(" (%s,%s) pending."),
+ event_location_to_string (b->location.get ()),
+ b->extra_string.get ());
}
else
{
- printf_filtered (_(" (%s %s) pending."),
- event_location_to_string (b->location.get ()),
- b->extra_string.get ());
+ gdb_printf (_(" (%s %s) pending."),
+ event_location_to_string (b->location.get ()),
+ b->extra_string.get ());
}
}
else
{
if (opts.addressprint || b->loc->symtab == NULL)
- printf_filtered (" at %ps",
- styled_string (address_style.style (),
- paddress (b->loc->gdbarch,
- b->loc->address)));
+ gdb_printf (" at %ps",
+ styled_string (address_style.style (),
+ paddress (b->loc->gdbarch,
+ b->loc->address)));
if (b->loc->symtab != NULL)
{
/* If there is a single location, we can print the location
@@ -12229,17 +11519,17 @@ say_where (struct breakpoint *b)
{
const char *filename
= symtab_to_filename_for_display (b->loc->symtab);
- printf_filtered (": file %ps, line %d.",
- styled_string (file_name_style.style (),
- filename),
- b->loc->line_number);
+ gdb_printf (": file %ps, line %d.",
+ styled_string (file_name_style.style (),
+ filename),
+ b->loc->line_number);
}
else
/* This is not ideal, but each location may have a
different file name, and this at least reflects the
real situation somewhat. */
- printf_filtered (": %s.",
- event_location_to_string (b->location.get ()));
+ gdb_printf (": %s.",
+ event_location_to_string (b->location.get ()));
}
if (b->loc->next)
@@ -12248,7 +11538,7 @@ say_where (struct breakpoint *b)
int n = 0;
for (; loc; loc = loc->next)
++n;
- printf_filtered (" (%d locations)", n);
+ gdb_printf (" (%d locations)", n);
}
}
}
@@ -12260,206 +11550,135 @@ bp_location_range breakpoint::locations ()
return bp_location_range (this->loc);
}
-static struct bp_location *
-base_breakpoint_allocate_location (struct breakpoint *self)
+struct bp_location *
+breakpoint::allocate_location ()
{
- return new bp_location (self);
-}
-
-static void
-base_breakpoint_re_set (struct breakpoint *b)
-{
- /* Nothing to re-set. */
+ return new bp_location (this);
}
#define internal_error_pure_virtual_called() \
gdb_assert_not_reached ("pure virtual function called")
-static int
-base_breakpoint_insert_location (struct bp_location *bl)
-{
- internal_error_pure_virtual_called ();
-}
-
-static int
-base_breakpoint_remove_location (struct bp_location *bl,
- enum remove_bp_reason reason)
-{
- internal_error_pure_virtual_called ();
-}
-
-static int
-base_breakpoint_breakpoint_hit (const struct bp_location *bl,
- const address_space *aspace,
- CORE_ADDR bp_addr,
- const target_waitstatus &ws)
+int
+breakpoint::insert_location (struct bp_location *bl)
{
internal_error_pure_virtual_called ();
}
-static void
-base_breakpoint_check_status (bpstat *bs)
-{
- /* Always stop. */
-}
-
-/* A "works_in_software_mode" breakpoint_ops method that just internal
- errors. */
-
-static int
-base_breakpoint_works_in_software_mode (const struct breakpoint *b)
+int
+breakpoint::remove_location (struct bp_location *bl,
+ enum remove_bp_reason reason)
{
internal_error_pure_virtual_called ();
}
-/* A "resources_needed" breakpoint_ops method that just internal
- errors. */
-
-static int
-base_breakpoint_resources_needed (const struct bp_location *bl)
+int
+breakpoint::breakpoint_hit (const struct bp_location *bl,
+ const address_space *aspace,
+ CORE_ADDR bp_addr,
+ const target_waitstatus &ws)
{
internal_error_pure_virtual_called ();
}
-static enum print_stop_action
-base_breakpoint_print_it (bpstat *bs)
+int
+breakpoint::works_in_software_mode () const
{
internal_error_pure_virtual_called ();
}
-static void
-base_breakpoint_print_one_detail (const struct breakpoint *self,
- struct ui_out *uiout)
-{
- /* nothing */
-}
-
-static void
-base_breakpoint_print_mention (struct breakpoint *b)
+int
+breakpoint::resources_needed (const struct bp_location *bl)
{
internal_error_pure_virtual_called ();
}
-static void
-base_breakpoint_print_recreate (struct breakpoint *b, struct ui_file *fp)
+enum print_stop_action
+breakpoint::print_it (bpstat *bs)
{
internal_error_pure_virtual_called ();
}
-static void
-base_breakpoint_create_sals_from_location
- (struct event_location *location,
- struct linespec_result *canonical,
- enum bptype type_wanted)
+void
+breakpoint::print_mention ()
{
internal_error_pure_virtual_called ();
}
-static void
-base_breakpoint_create_breakpoints_sal (struct gdbarch *gdbarch,
- struct linespec_result *c,
- gdb::unique_xmalloc_ptr<char> cond_string,
- gdb::unique_xmalloc_ptr<char> extra_string,
- enum bptype type_wanted,
- enum bpdisp disposition,
- int thread,
- int task, int ignore_count,
- const struct breakpoint_ops *o,
- int from_tty, int enabled,
- int internal, unsigned flags)
+void
+breakpoint::print_recreate (struct ui_file *fp)
{
internal_error_pure_virtual_called ();
}
-static std::vector<symtab_and_line>
-base_breakpoint_decode_location (struct breakpoint *b,
- struct event_location *location,
- struct program_space *search_pspace)
+std::vector<symtab_and_line>
+breakpoint::decode_location (struct event_location *location,
+ struct program_space *search_pspace)
{
internal_error_pure_virtual_called ();
}
-/* The default 'explains_signal' method. */
-
-static int
-base_breakpoint_explains_signal (struct breakpoint *b, enum gdb_signal sig)
-{
- return 1;
-}
-
-/* The default "after_condition_true" method. */
-
-static void
-base_breakpoint_after_condition_true (struct bpstat *bs)
-{
- /* Nothing to do. */
-}
-
-struct breakpoint_ops base_breakpoint_ops =
-{
- base_breakpoint_allocate_location,
- base_breakpoint_re_set,
- base_breakpoint_insert_location,
- base_breakpoint_remove_location,
- base_breakpoint_breakpoint_hit,
- base_breakpoint_check_status,
- base_breakpoint_resources_needed,
- base_breakpoint_works_in_software_mode,
- base_breakpoint_print_it,
- NULL,
- base_breakpoint_print_one_detail,
- base_breakpoint_print_mention,
- base_breakpoint_print_recreate,
- base_breakpoint_create_sals_from_location,
- base_breakpoint_create_breakpoints_sal,
- base_breakpoint_decode_location,
- base_breakpoint_explains_signal,
- base_breakpoint_after_condition_true,
-};
-
/* Default breakpoint_ops methods. */
-static void
-bkpt_re_set (struct breakpoint *b)
+void
+base_breakpoint::re_set ()
{
/* FIXME: is this still reachable? */
- if (breakpoint_event_location_empty_p (b))
+ if (breakpoint_event_location_empty_p (this))
{
/* Anything without a location can't be re-set. */
- delete_breakpoint (b);
+ delete_breakpoint (this);
return;
}
- breakpoint_re_set_default (b);
+ breakpoint_re_set_default (this);
}
-static int
-bkpt_insert_location (struct bp_location *bl)
+int
+base_breakpoint::insert_location (struct bp_location *bl)
{
CORE_ADDR addr = bl->target_info.reqstd_address;
bl->target_info.kind = breakpoint_kind (bl, &addr);
bl->target_info.placed_address = addr;
+ int result;
if (bl->loc_type == bp_loc_hardware_breakpoint)
- return target_insert_hw_breakpoint (bl->gdbarch, &bl->target_info);
+ result = target_insert_hw_breakpoint (bl->gdbarch, &bl->target_info);
else
- return target_insert_breakpoint (bl->gdbarch, &bl->target_info);
+ result = target_insert_breakpoint (bl->gdbarch, &bl->target_info);
+
+ if (result == 0 && bl->probe.prob != nullptr)
+ {
+ /* The insertion was successful, now let's set the probe's semaphore
+ if needed. */
+ bl->probe.prob->set_semaphore (bl->probe.objfile, bl->gdbarch);
+ }
+
+ return result;
}
-static int
-bkpt_remove_location (struct bp_location *bl, enum remove_bp_reason reason)
+int
+base_breakpoint::remove_location (struct bp_location *bl,
+ enum remove_bp_reason reason)
{
+ if (bl->probe.prob != nullptr)
+ {
+ /* Let's clear the semaphore before removing the location. */
+ bl->probe.prob->clear_semaphore (bl->probe.objfile, bl->gdbarch);
+ }
+
if (bl->loc_type == bp_loc_hardware_breakpoint)
return target_remove_hw_breakpoint (bl->gdbarch, &bl->target_info);
else
return target_remove_breakpoint (bl->gdbarch, &bl->target_info, reason);
}
-static int
-bkpt_breakpoint_hit (const struct bp_location *bl,
- const address_space *aspace, CORE_ADDR bp_addr,
- const target_waitstatus &ws)
+int
+base_breakpoint::breakpoint_hit (const struct bp_location *bl,
+ const address_space *aspace,
+ CORE_ADDR bp_addr,
+ const target_waitstatus &ws)
{
if (ws.kind () != TARGET_WAITKIND_STOPPED
|| ws.sig () != GDB_SIGNAL_TRAP)
@@ -12477,10 +11696,11 @@ bkpt_breakpoint_hit (const struct bp_location *bl,
return 1;
}
-static int
-dprintf_breakpoint_hit (const struct bp_location *bl,
- const address_space *aspace, CORE_ADDR bp_addr,
- const target_waitstatus &ws)
+int
+dprintf_breakpoint::breakpoint_hit (const struct bp_location *bl,
+ const address_space *aspace,
+ CORE_ADDR bp_addr,
+ const target_waitstatus &ws)
{
if (dprintf_style == dprintf_style_agent
&& target_can_run_breakpoint_commands ())
@@ -12491,154 +11711,121 @@ dprintf_breakpoint_hit (const struct bp_location *bl,
return 0;
}
- return bkpt_breakpoint_hit (bl, aspace, bp_addr, ws);
+ return this->ordinary_breakpoint::breakpoint_hit (bl, aspace, bp_addr, ws);
}
-static int
-bkpt_resources_needed (const struct bp_location *bl)
+int
+ordinary_breakpoint::resources_needed (const struct bp_location *bl)
{
- gdb_assert (bl->owner->type == bp_hardware_breakpoint);
+ gdb_assert (type == bp_hardware_breakpoint);
return 1;
}
-static enum print_stop_action
-bkpt_print_it (bpstat *bs)
+enum print_stop_action
+ordinary_breakpoint::print_it (bpstat *bs)
{
- struct breakpoint *b;
const struct bp_location *bl;
int bp_temp;
struct ui_out *uiout = current_uiout;
- gdb_assert (bs->bp_location_at != NULL);
-
bl = bs->bp_location_at.get ();
- b = bs->breakpoint_at;
- bp_temp = b->disposition == disp_del;
+ bp_temp = disposition == disp_del;
if (bl->address != bl->requested_address)
breakpoint_adjustment_warning (bl->requested_address,
bl->address,
- b->number, 1);
- annotate_breakpoint (b->number);
+ number, 1);
+ annotate_breakpoint (number);
maybe_print_thread_hit_breakpoint (uiout);
if (uiout->is_mi_like_p ())
{
uiout->field_string ("reason",
async_reason_lookup (EXEC_ASYNC_BREAKPOINT_HIT));
- uiout->field_string ("disp", bpdisp_text (b->disposition));
+ uiout->field_string ("disp", bpdisp_text (disposition));
}
if (bp_temp)
uiout->message ("Temporary breakpoint %pF, ",
- signed_field ("bkptno", b->number));
+ signed_field ("bkptno", number));
else
uiout->message ("Breakpoint %pF, ",
- signed_field ("bkptno", b->number));
+ signed_field ("bkptno", number));
return PRINT_SRC_AND_LOC;
}
-static void
-bkpt_print_mention (struct breakpoint *b)
+void
+ordinary_breakpoint::print_mention ()
{
if (current_uiout->is_mi_like_p ())
return;
- switch (b->type)
+ switch (type)
{
case bp_breakpoint:
case bp_gnu_ifunc_resolver:
- if (b->disposition == disp_del)
- printf_filtered (_("Temporary breakpoint"));
+ if (disposition == disp_del)
+ gdb_printf (_("Temporary breakpoint"));
else
- printf_filtered (_("Breakpoint"));
- printf_filtered (_(" %d"), b->number);
- if (b->type == bp_gnu_ifunc_resolver)
- printf_filtered (_(" at gnu-indirect-function resolver"));
+ gdb_printf (_("Breakpoint"));
+ gdb_printf (_(" %d"), number);
+ if (type == bp_gnu_ifunc_resolver)
+ gdb_printf (_(" at gnu-indirect-function resolver"));
break;
case bp_hardware_breakpoint:
- printf_filtered (_("Hardware assisted breakpoint %d"), b->number);
+ gdb_printf (_("Hardware assisted breakpoint %d"), number);
break;
case bp_dprintf:
- printf_filtered (_("Dprintf %d"), b->number);
+ gdb_printf (_("Dprintf %d"), number);
break;
}
- say_where (b);
+ say_where (this);
}
-static void
-bkpt_print_recreate (struct breakpoint *tp, struct ui_file *fp)
-{
- if (tp->type == bp_breakpoint && tp->disposition == disp_del)
- fprintf_unfiltered (fp, "tbreak");
- else if (tp->type == bp_breakpoint)
- fprintf_unfiltered (fp, "break");
- else if (tp->type == bp_hardware_breakpoint
- && tp->disposition == disp_del)
- fprintf_unfiltered (fp, "thbreak");
- else if (tp->type == bp_hardware_breakpoint)
- fprintf_unfiltered (fp, "hbreak");
+void
+ordinary_breakpoint::print_recreate (struct ui_file *fp)
+{
+ if (type == bp_breakpoint && disposition == disp_del)
+ gdb_printf (fp, "tbreak");
+ else if (type == bp_breakpoint)
+ gdb_printf (fp, "break");
+ else if (type == bp_hardware_breakpoint
+ && disposition == disp_del)
+ gdb_printf (fp, "thbreak");
+ else if (type == bp_hardware_breakpoint)
+ gdb_printf (fp, "hbreak");
else
internal_error (__FILE__, __LINE__,
- _("unhandled breakpoint type %d"), (int) tp->type);
+ _("unhandled breakpoint type %d"), (int) type);
- fprintf_unfiltered (fp, " %s",
- event_location_to_string (tp->location.get ()));
+ gdb_printf (fp, " %s", event_location_to_string (location.get ()));
/* Print out extra_string if this breakpoint is pending. It might
contain, for example, conditions that were set by the user. */
- if (tp->loc == NULL && tp->extra_string != NULL)
- fprintf_unfiltered (fp, " %s", tp->extra_string.get ());
+ if (loc == NULL && extra_string != NULL)
+ gdb_printf (fp, " %s", extra_string.get ());
- print_recreate_thread (tp, fp);
+ print_recreate_thread (this, fp);
}
-static void
-bkpt_create_sals_from_location (struct event_location *location,
- struct linespec_result *canonical,
- enum bptype type_wanted)
+std::vector<symtab_and_line>
+base_breakpoint::decode_location (struct event_location *location,
+ struct program_space *search_pspace)
{
- create_sals_from_location_default (location, canonical, type_wanted);
-}
-
-static void
-bkpt_create_breakpoints_sal (struct gdbarch *gdbarch,
- struct linespec_result *canonical,
- gdb::unique_xmalloc_ptr<char> cond_string,
- gdb::unique_xmalloc_ptr<char> extra_string,
- enum bptype type_wanted,
- enum bpdisp disposition,
- int thread,
- int task, int ignore_count,
- const struct breakpoint_ops *ops,
- int from_tty, int enabled,
- int internal, unsigned flags)
-{
- create_breakpoints_sal_default (gdbarch, canonical,
- std::move (cond_string),
- std::move (extra_string),
- type_wanted,
- disposition, thread, task,
- ignore_count, ops, from_tty,
- enabled, internal, flags);
-}
+ if (event_location_type (location) == PROBE_LOCATION)
+ return bkpt_probe_decode_location (this, location, search_pspace);
-static std::vector<symtab_and_line>
-bkpt_decode_location (struct breakpoint *b,
- struct event_location *location,
- struct program_space *search_pspace)
-{
- return decode_location_default (b, location, search_pspace);
+ return decode_location_default (this, location, search_pspace);
}
/* Virtual table for internal breakpoints. */
-static void
-internal_bkpt_re_set (struct breakpoint *b)
+void
+internal_breakpoint::re_set ()
{
- switch (b->type)
+ switch (type)
{
/* Delete overlay event and longjmp master breakpoints; they
will be reset later by breakpoint_re_set. */
@@ -12646,7 +11833,7 @@ internal_bkpt_re_set (struct breakpoint *b)
case bp_longjmp_master:
case bp_std_terminate_master:
case bp_exception_master:
- delete_breakpoint (b);
+ delete_breakpoint (this);
break;
/* This breakpoint is special, it's set up when the inferior
@@ -12660,10 +11847,10 @@ internal_bkpt_re_set (struct breakpoint *b)
}
}
-static void
-internal_bkpt_check_status (bpstat *bs)
+void
+internal_breakpoint::check_status (bpstat *bs)
{
- if (bs->breakpoint_at->type == bp_shlib_event)
+ if (type == bp_shlib_event)
{
/* If requested, stop when the dynamic linker notifies GDB of
events. This allows the user to get control and place
@@ -12676,64 +11863,60 @@ internal_bkpt_check_status (bpstat *bs)
bs->stop = 0;
}
-static enum print_stop_action
-internal_bkpt_print_it (bpstat *bs)
+enum print_stop_action
+internal_breakpoint::print_it (bpstat *bs)
{
- struct breakpoint *b;
-
- b = bs->breakpoint_at;
-
- switch (b->type)
+ switch (type)
{
case bp_shlib_event:
/* Did we stop because the user set the stop_on_solib_events
variable? (If so, we report this as a generic, "Stopped due
to shlib event" message.) */
- print_solib_event (0);
+ print_solib_event (false);
break;
case bp_thread_event:
/* Not sure how we will get here.
GDB should not stop for these breakpoints. */
- printf_filtered (_("Thread Event Breakpoint: gdb should not stop!\n"));
+ gdb_printf (_("Thread Event Breakpoint: gdb should not stop!\n"));
break;
case bp_overlay_event:
/* By analogy with the thread event, GDB should not stop for these. */
- printf_filtered (_("Overlay Event Breakpoint: gdb should not stop!\n"));
+ gdb_printf (_("Overlay Event Breakpoint: gdb should not stop!\n"));
break;
case bp_longjmp_master:
/* These should never be enabled. */
- printf_filtered (_("Longjmp Master Breakpoint: gdb should not stop!\n"));
+ gdb_printf (_("Longjmp Master Breakpoint: gdb should not stop!\n"));
break;
case bp_std_terminate_master:
/* These should never be enabled. */
- printf_filtered (_("std::terminate Master Breakpoint: "
- "gdb should not stop!\n"));
+ gdb_printf (_("std::terminate Master Breakpoint: "
+ "gdb should not stop!\n"));
break;
case bp_exception_master:
/* These should never be enabled. */
- printf_filtered (_("Exception Master Breakpoint: "
- "gdb should not stop!\n"));
+ gdb_printf (_("Exception Master Breakpoint: "
+ "gdb should not stop!\n"));
break;
}
return PRINT_NOTHING;
}
-static void
-internal_bkpt_print_mention (struct breakpoint *b)
+void
+internal_breakpoint::print_mention ()
{
/* Nothing to mention. These breakpoints are internal. */
}
/* Virtual table for momentary breakpoints */
-static void
-momentary_bkpt_re_set (struct breakpoint *b)
+void
+momentary_breakpoint::re_set ()
{
/* Keep temporary breakpoints, which can be encountered when we step
over a dlopen call and solib_add is resetting the breakpoints.
@@ -12741,20 +11924,20 @@ momentary_bkpt_re_set (struct breakpoint *b)
or by breakpoint_init_inferior when we rerun the executable. */
}
-static void
-momentary_bkpt_check_status (bpstat *bs)
+void
+momentary_breakpoint::check_status (bpstat *bs)
{
/* Nothing. The point of these breakpoints is causing a stop. */
}
-static enum print_stop_action
-momentary_bkpt_print_it (bpstat *bs)
+enum print_stop_action
+momentary_breakpoint::print_it (bpstat *bs)
{
return PRINT_UNKNOWN;
}
-static void
-momentary_bkpt_print_mention (struct breakpoint *b)
+void
+momentary_breakpoint::print_mention ()
{
/* Nothing to mention. These breakpoints are internal. */
}
@@ -12772,37 +11955,10 @@ longjmp_breakpoint::~longjmp_breakpoint ()
tp->initiating_frame = null_frame_id;
}
-/* Specific methods for probe breakpoints. */
-
-static int
-bkpt_probe_insert_location (struct bp_location *bl)
-{
- int v = bkpt_insert_location (bl);
-
- if (v == 0)
- {
- /* The insertion was successful, now let's set the probe's semaphore
- if needed. */
- bl->probe.prob->set_semaphore (bl->probe.objfile, bl->gdbarch);
- }
-
- return v;
-}
-
-static int
-bkpt_probe_remove_location (struct bp_location *bl,
- enum remove_bp_reason reason)
-{
- /* Let's clear the semaphore before removing the location. */
- bl->probe.prob->clear_semaphore (bl->probe.objfile, bl->gdbarch);
-
- return bkpt_remove_location (bl, reason);
-}
-
static void
bkpt_probe_create_sals_from_location (struct event_location *location,
- struct linespec_result *canonical,
- enum bptype type_wanted)
+ struct linespec_result *canonical)
+
{
struct linespec_sals lsal;
@@ -12825,158 +11981,114 @@ bkpt_probe_decode_location (struct breakpoint *b,
/* The breakpoint_ops structure to be used in tracepoints. */
-static void
-tracepoint_re_set (struct breakpoint *b)
+void
+tracepoint::re_set ()
{
- breakpoint_re_set_default (b);
+ breakpoint_re_set_default (this);
}
-static int
-tracepoint_breakpoint_hit (const struct bp_location *bl,
- const address_space *aspace, CORE_ADDR bp_addr,
- const target_waitstatus &ws)
+int
+tracepoint::breakpoint_hit (const struct bp_location *bl,
+ const address_space *aspace, CORE_ADDR bp_addr,
+ const target_waitstatus &ws)
{
/* By definition, the inferior does not report stops at
tracepoints. */
return 0;
}
-static void
-tracepoint_print_one_detail (const struct breakpoint *self,
- struct ui_out *uiout)
+void
+tracepoint::print_one_detail (struct ui_out *uiout) const
{
- struct tracepoint *tp = (struct tracepoint *) self;
- if (!tp->static_trace_marker_id.empty ())
+ if (!static_trace_marker_id.empty ())
{
- gdb_assert (self->type == bp_static_tracepoint);
+ gdb_assert (type == bp_static_tracepoint
+ || type == bp_static_marker_tracepoint);
uiout->message ("\tmarker id is %pF\n",
string_field ("static-tracepoint-marker-string-id",
- tp->static_trace_marker_id.c_str ()));
+ static_trace_marker_id.c_str ()));
}
}
-static void
-tracepoint_print_mention (struct breakpoint *b)
+void
+tracepoint::print_mention ()
{
if (current_uiout->is_mi_like_p ())
return;
- switch (b->type)
+ switch (type)
{
case bp_tracepoint:
- printf_filtered (_("Tracepoint"));
- printf_filtered (_(" %d"), b->number);
+ gdb_printf (_("Tracepoint"));
+ gdb_printf (_(" %d"), number);
break;
case bp_fast_tracepoint:
- printf_filtered (_("Fast tracepoint"));
- printf_filtered (_(" %d"), b->number);
+ gdb_printf (_("Fast tracepoint"));
+ gdb_printf (_(" %d"), number);
break;
case bp_static_tracepoint:
- printf_filtered (_("Static tracepoint"));
- printf_filtered (_(" %d"), b->number);
+ case bp_static_marker_tracepoint:
+ gdb_printf (_("Static tracepoint"));
+ gdb_printf (_(" %d"), number);
break;
default:
internal_error (__FILE__, __LINE__,
- _("unhandled tracepoint type %d"), (int) b->type);
+ _("unhandled tracepoint type %d"), (int) type);
}
- say_where (b);
+ say_where (this);
}
-static void
-tracepoint_print_recreate (struct breakpoint *self, struct ui_file *fp)
-{
- struct tracepoint *tp = (struct tracepoint *) self;
-
- if (self->type == bp_fast_tracepoint)
- fprintf_unfiltered (fp, "ftrace");
- else if (self->type == bp_static_tracepoint)
- fprintf_unfiltered (fp, "strace");
- else if (self->type == bp_tracepoint)
- fprintf_unfiltered (fp, "trace");
+void
+tracepoint::print_recreate (struct ui_file *fp)
+{
+ if (type == bp_fast_tracepoint)
+ gdb_printf (fp, "ftrace");
+ else if (type == bp_static_tracepoint
+ || type == bp_static_marker_tracepoint)
+ gdb_printf (fp, "strace");
+ else if (type == bp_tracepoint)
+ gdb_printf (fp, "trace");
else
internal_error (__FILE__, __LINE__,
- _("unhandled tracepoint type %d"), (int) self->type);
+ _("unhandled tracepoint type %d"), (int) type);
- fprintf_unfiltered (fp, " %s",
- event_location_to_string (self->location.get ()));
- print_recreate_thread (self, fp);
+ gdb_printf (fp, " %s", event_location_to_string (location.get ()));
+ print_recreate_thread (this, fp);
- if (tp->pass_count)
- fprintf_unfiltered (fp, " passcount %d\n", tp->pass_count);
+ if (pass_count)
+ gdb_printf (fp, " passcount %d\n", pass_count);
}
-static void
-tracepoint_create_sals_from_location (struct event_location *location,
- struct linespec_result *canonical,
- enum bptype type_wanted)
+std::vector<symtab_and_line>
+tracepoint::decode_location (struct event_location *location,
+ struct program_space *search_pspace)
{
- create_sals_from_location_default (location, canonical, type_wanted);
-}
+ if (event_location_type (location) == PROBE_LOCATION)
+ return bkpt_probe_decode_location (this, location, search_pspace);
-static void
-tracepoint_create_breakpoints_sal (struct gdbarch *gdbarch,
- struct linespec_result *canonical,
- gdb::unique_xmalloc_ptr<char> cond_string,
- gdb::unique_xmalloc_ptr<char> extra_string,
- enum bptype type_wanted,
- enum bpdisp disposition,
- int thread,
- int task, int ignore_count,
- const struct breakpoint_ops *ops,
- int from_tty, int enabled,
- int internal, unsigned flags)
-{
- create_breakpoints_sal_default (gdbarch, canonical,
- std::move (cond_string),
- std::move (extra_string),
- type_wanted,
- disposition, thread, task,
- ignore_count, ops, from_tty,
- enabled, internal, flags);
+ return decode_location_default (this, location, search_pspace);
}
-static std::vector<symtab_and_line>
-tracepoint_decode_location (struct breakpoint *b,
- struct event_location *location,
- struct program_space *search_pspace)
-{
- return decode_location_default (b, location, search_pspace);
-}
-
-struct breakpoint_ops tracepoint_breakpoint_ops;
-
/* Virtual table for tracepoints on static probes. */
static void
tracepoint_probe_create_sals_from_location
(struct event_location *location,
- struct linespec_result *canonical,
- enum bptype type_wanted)
-{
- /* We use the same method for breakpoint on probes. */
- bkpt_probe_create_sals_from_location (location, canonical, type_wanted);
-}
-
-static std::vector<symtab_and_line>
-tracepoint_probe_decode_location (struct breakpoint *b,
- struct event_location *location,
- struct program_space *search_pspace)
+ struct linespec_result *canonical)
{
/* We use the same method for breakpoint on probes. */
- return bkpt_probe_decode_location (b, location, search_pspace);
+ bkpt_probe_create_sals_from_location (location, canonical);
}
-/* Dprintf breakpoint_ops methods. */
-
-static void
-dprintf_re_set (struct breakpoint *b)
+void
+dprintf_breakpoint::re_set ()
{
- breakpoint_re_set_default (b);
+ breakpoint_re_set_default (this);
/* extra_string should never be non-NULL for dprintf. */
- gdb_assert (b->extra_string != NULL);
+ gdb_assert (extra_string != NULL);
/* 1 - connect to target 1, that can run breakpoint commands.
2 - create a dprintf, which resolves fine.
@@ -12988,23 +12100,22 @@ dprintf_re_set (struct breakpoint *b)
answers for target_can_run_breakpoint_commands().
Given absence of finer grained resetting, we get to do
it all the time. */
- if (b->extra_string != NULL)
- update_dprintf_command_list (b);
+ if (extra_string != NULL)
+ update_dprintf_command_list (this);
}
-/* Implement the "print_recreate" breakpoint_ops method for dprintf. */
+/* Implement the "print_recreate" method for dprintf. */
-static void
-dprintf_print_recreate (struct breakpoint *tp, struct ui_file *fp)
+void
+dprintf_breakpoint::print_recreate (struct ui_file *fp)
{
- fprintf_unfiltered (fp, "dprintf %s,%s",
- event_location_to_string (tp->location.get ()),
- tp->extra_string.get ());
- print_recreate_thread (tp, fp);
+ gdb_printf (fp, "dprintf %s,%s",
+ event_location_to_string (location.get ()),
+ extra_string.get ());
+ print_recreate_thread (this, fp);
}
-/* Implement the "after_condition_true" breakpoint_ops method for
- dprintf.
+/* Implement the "after_condition_true" method for dprintf.
dprintf's are implemented with regular commands in their command
list, but we run the commands here instead of before presenting the
@@ -13012,8 +12123,8 @@ dprintf_print_recreate (struct breakpoint *tp, struct ui_file *fp)
also makes it so that the commands of multiple dprintfs at the same
address are all handled. */
-static void
-dprintf_after_condition_true (struct bpstat *bs)
+void
+dprintf_breakpoint::after_condition_true (struct bpstat *bs)
{
/* dprintf's never cause a stop. This wasn't set in the
check_status hook instead because that would make the dprintf's
@@ -13035,8 +12146,7 @@ dprintf_after_condition_true (struct bpstat *bs)
static void
strace_marker_create_sals_from_location (struct event_location *location,
- struct linespec_result *canonical,
- enum bptype type_wanted)
+ struct linespec_result *canonical)
{
struct linespec_sals lsal;
const char *arg_start, *arg;
@@ -13102,31 +12212,34 @@ strace_marker_create_breakpoints_sal (struct gdbarch *gdbarch,
}
}
-static std::vector<symtab_and_line>
-strace_marker_decode_location (struct breakpoint *b,
- struct event_location *location,
- struct program_space *search_pspace)
+std::vector<symtab_and_line>
+static_marker_tracepoint::decode_location (struct event_location *location,
+ struct program_space *search_pspace)
{
- struct tracepoint *tp = (struct tracepoint *) b;
const char *s = get_linespec_location (location)->spec_string;
std::vector<symtab_and_line> sals = decode_static_tracepoint_spec (&s);
- if (sals.size () > tp->static_trace_marker_id_idx)
+ if (sals.size () > static_trace_marker_id_idx)
{
- sals[0] = sals[tp->static_trace_marker_id_idx];
+ sals[0] = sals[static_trace_marker_id_idx];
sals.resize (1);
return sals;
}
else
- error (_("marker %s not found"), tp->static_trace_marker_id.c_str ());
+ error (_("marker %s not found"), static_trace_marker_id.c_str ());
}
-static struct breakpoint_ops strace_marker_breakpoint_ops;
+/* Static tracepoints with marker (`-m'). */
+static struct breakpoint_ops strace_marker_breakpoint_ops =
+{
+ strace_marker_create_sals_from_location,
+ strace_marker_create_breakpoints_sal,
+};
static int
strace_marker_p (struct breakpoint *b)
{
- return b->ops == &strace_marker_breakpoint_ops;
+ return b->type == bp_static_marker_tracepoint;
}
/* Delete a breakpoint and clean up all traces of it in the data
@@ -13550,9 +12663,10 @@ update_breakpoint_locations (struct breakpoint *b,
/* Ranged breakpoints have only one start location and one end
location. */
b->enable_state = bp_disabled;
- printf_unfiltered (_("Could not reset ranged breakpoint %d: "
- "multiple locations found\n"),
- b->number);
+ gdb_printf (gdb_stderr,
+ _("Could not reset ranged breakpoint %d: "
+ "multiple locations found\n"),
+ b->number);
return;
}
@@ -13671,7 +12785,7 @@ location_to_sals (struct breakpoint *b, struct event_location *location,
try
{
- sals = b->ops->decode_location (b, location, search_pspace);
+ sals = b->decode_location (location, search_pspace);
}
catch (gdb_exception_error &e)
{
@@ -13731,7 +12845,7 @@ location_to_sals (struct breakpoint *b, struct event_location *location,
b->condition_not_parsed = 0;
}
- if (b->type == bp_static_tracepoint && !strace_marker_p (b))
+ if (b->type == bp_static_tracepoint)
sals[0] = update_static_tracepoint (b, sals[0]);
*found = 1;
@@ -13775,37 +12889,11 @@ breakpoint_re_set_default (struct breakpoint *b)
static void
create_sals_from_location_default (struct event_location *location,
- struct linespec_result *canonical,
- enum bptype type_wanted)
+ struct linespec_result *canonical)
{
parse_breakpoint_sals (location, canonical);
}
-/* Call create_breakpoints_sal for the given arguments. This is the default
- function for the `create_breakpoints_sal' method of
- breakpoint_ops. */
-
-static void
-create_breakpoints_sal_default (struct gdbarch *gdbarch,
- struct linespec_result *canonical,
- gdb::unique_xmalloc_ptr<char> cond_string,
- gdb::unique_xmalloc_ptr<char> extra_string,
- enum bptype type_wanted,
- enum bpdisp disposition,
- int thread,
- int task, int ignore_count,
- const struct breakpoint_ops *ops,
- int from_tty, int enabled,
- int internal, unsigned flags)
-{
- create_breakpoints_sal (gdbarch, canonical,
- std::move (cond_string),
- std::move (extra_string),
- type_wanted, disposition,
- thread, task, ignore_count, ops, from_tty,
- enabled, internal, flags);
-}
-
/* Decode the line represented by S by calling decode_line_full. This is the
default function for the `decode_location' method of breakpoint_ops. */
@@ -13839,7 +12927,7 @@ breakpoint_re_set_one (breakpoint *b)
input_radix = b->input_radix;
set_language (b->language);
- b->ops->re_set (b);
+ b->re_set ();
}
/* Re-set breakpoint locations for the current program space.
@@ -13932,8 +13020,8 @@ set_ignore_count (int bptnum, int count, int from_tty)
if (is_tracepoint (b))
{
if (from_tty && count != 0)
- printf_filtered (_("Ignore count ignored for tracepoint %d."),
- bptnum);
+ gdb_printf (_("Ignore count ignored for tracepoint %d."),
+ bptnum);
return;
}
@@ -13941,16 +13029,16 @@ set_ignore_count (int bptnum, int count, int from_tty)
if (from_tty)
{
if (count == 0)
- printf_filtered (_("Will stop next time "
- "breakpoint %d is reached."),
- bptnum);
+ gdb_printf (_("Will stop next time "
+ "breakpoint %d is reached."),
+ bptnum);
else if (count == 1)
- printf_filtered (_("Will ignore next crossing of breakpoint %d."),
- bptnum);
+ gdb_printf (_("Will ignore next crossing of breakpoint %d."),
+ bptnum);
else
- printf_filtered (_("Will ignore next %d "
- "crossings of breakpoint %d."),
- count, bptnum);
+ gdb_printf (_("Will ignore next %d "
+ "crossings of breakpoint %d."),
+ count, bptnum);
}
gdb::observers::breakpoint_modified.notify (b);
return;
@@ -13980,7 +13068,7 @@ ignore_command (const char *args, int from_tty)
longest_to_int (value_as_long (parse_and_eval (p))),
from_tty);
if (from_tty)
- printf_filtered ("\n");
+ gdb_printf ("\n");
}
@@ -14010,7 +13098,7 @@ map_breakpoint_number_range (std::pair<int, int> bp_num_range,
break;
}
if (!match)
- printf_filtered (_("No breakpoint number %d.\n"), i);
+ gdb_printf (_("No breakpoint number %d.\n"), i);
}
}
}
@@ -14595,7 +13683,7 @@ ftrace_command (const char *arg, int from_tty)
bp_fast_tracepoint /* type_wanted */,
0 /* Ignore count */,
pending_break_support,
- &tracepoint_breakpoint_ops,
+ &base_breakpoint_ops,
from_tty,
1 /* enabled */,
0 /* internal */, 0);
@@ -14606,8 +13694,9 @@ ftrace_command (const char *arg, int from_tty)
static void
strace_command (const char *arg, int from_tty)
{
- struct breakpoint_ops *ops;
+ const struct breakpoint_ops *ops;
event_location_up location;
+ enum bptype type;
/* Decide if we are dealing with a static tracepoint marker (`-m'),
or with a normal static tracepoint. */
@@ -14615,18 +13704,20 @@ strace_command (const char *arg, int from_tty)
{
ops = &strace_marker_breakpoint_ops;
location = new_linespec_location (&arg, symbol_name_match_type::FULL);
+ type = bp_static_marker_tracepoint;
}
else
{
- ops = &tracepoint_breakpoint_ops;
+ ops = &base_breakpoint_ops;
location = string_to_event_location (&arg, current_language);
+ type = bp_static_tracepoint;
}
create_breakpoint (get_current_arch (),
location.get (),
NULL, 0, arg, false, 1 /* parse arg */,
0 /* tempflag */,
- bp_static_tracepoint /* type_wanted */,
+ type /* type_wanted */,
0 /* Ignore count */,
pending_break_support,
ops,
@@ -14700,7 +13791,7 @@ create_tracepoint_from_upload (struct uploaded_tp *utp)
utp->type /* type_wanted */,
0 /* Ignore count */,
pending_break_support,
- &tracepoint_breakpoint_ops,
+ &base_breakpoint_ops,
0 /* from_tty */,
utp->enabled /* enabled */,
0 /* internal */,
@@ -14831,8 +13922,8 @@ trace_pass_set_count (struct tracepoint *tp, int count, int from_tty)
tp->pass_count = count;
gdb::observers::breakpoint_modified.notify (tp);
if (from_tty)
- printf_filtered (_("Setting tracepoint %d's passcount to %d\n"),
- tp->number, count);
+ gdb_printf (_("Setting tracepoint %d's passcount to %d\n"),
+ tp->number, count);
}
/* Set passcount for tracepoint.
@@ -14937,10 +14028,10 @@ get_tracepoint_by_number (const char **arg,
if (tpnum <= 0)
{
if (instring && *instring)
- printf_filtered (_("bad tracepoint number at or near '%s'\n"),
- instring);
+ gdb_printf (_("bad tracepoint number at or near '%s'\n"),
+ instring);
else
- printf_filtered (_("No previous tracepoint\n"));
+ gdb_printf (_("No previous tracepoint\n"));
return NULL;
}
@@ -14948,7 +14039,7 @@ get_tracepoint_by_number (const char **arg,
if (t->number == tpnum)
return (struct tracepoint *) t;
- printf_filtered ("No tracepoint number %d.\n", tpnum);
+ gdb_printf ("No tracepoint number %d.\n", tpnum);
return NULL;
}
@@ -14956,12 +14047,12 @@ void
print_recreate_thread (struct breakpoint *b, struct ui_file *fp)
{
if (b->thread != -1)
- fprintf_unfiltered (fp, " thread %d", b->thread);
+ gdb_printf (fp, " thread %d", b->thread);
if (b->task != 0)
- fprintf_unfiltered (fp, " task %d", b->task);
+ gdb_printf (fp, " task %d", b->task);
- fprintf_unfiltered (fp, "\n");
+ gdb_printf (fp, "\n");
}
/* Save information on user settable breakpoints (watchpoints, etc) to
@@ -15028,7 +14119,7 @@ save_breakpoints (const char *filename, int from_tty,
if (filter && !filter (tp))
continue;
- tp->ops->print_recreate (tp, &fp);
+ tp->print_recreate (&fp);
/* Note, we can't rely on tp->number for anything, as we can't
assume the recreated breakpoint numbers will match. Use $bpnum
@@ -15083,7 +14174,7 @@ save_breakpoints (const char *filename, int from_tty,
fp.printf ("set default-collect %s\n", default_collect.c_str ());
if (from_tty)
- printf_filtered (_("Saved to file '%s'.\n"), expanded_filename.get ());
+ gdb_printf (_("Saved to file '%s'.\n"), expanded_filename.get ());
}
/* The `save breakpoints' command. */
@@ -15230,186 +14321,10 @@ void
breakpoint_free_objfile (struct objfile *objfile)
{
for (bp_location *loc : all_bp_locations ())
- if (loc->symtab != NULL && SYMTAB_OBJFILE (loc->symtab) == objfile)
+ if (loc->symtab != NULL && loc->symtab->compunit ()->objfile () == objfile)
loc->symtab = NULL;
}
-void
-initialize_breakpoint_ops (void)
-{
- static int initialized = 0;
-
- struct breakpoint_ops *ops;
-
- if (initialized)
- return;
- initialized = 1;
-
- /* The breakpoint_ops structure to be inherit by all kinds of
- breakpoints (real breakpoints, i.e., user "break" breakpoints,
- internal and momentary breakpoints, etc.). */
- ops = &bkpt_base_breakpoint_ops;
- *ops = base_breakpoint_ops;
- ops->re_set = bkpt_re_set;
- ops->insert_location = bkpt_insert_location;
- ops->remove_location = bkpt_remove_location;
- ops->breakpoint_hit = bkpt_breakpoint_hit;
- ops->create_sals_from_location = bkpt_create_sals_from_location;
- ops->create_breakpoints_sal = bkpt_create_breakpoints_sal;
- ops->decode_location = bkpt_decode_location;
-
- /* The breakpoint_ops structure to be used in regular breakpoints. */
- ops = &bkpt_breakpoint_ops;
- *ops = bkpt_base_breakpoint_ops;
- ops->re_set = bkpt_re_set;
- ops->resources_needed = bkpt_resources_needed;
- ops->print_it = bkpt_print_it;
- ops->print_mention = bkpt_print_mention;
- ops->print_recreate = bkpt_print_recreate;
-
- /* Ranged breakpoints. */
- ops = &ranged_breakpoint_ops;
- *ops = bkpt_breakpoint_ops;
- ops->breakpoint_hit = breakpoint_hit_ranged_breakpoint;
- ops->resources_needed = resources_needed_ranged_breakpoint;
- ops->print_it = print_it_ranged_breakpoint;
- ops->print_one = print_one_ranged_breakpoint;
- ops->print_one_detail = print_one_detail_ranged_breakpoint;
- ops->print_mention = print_mention_ranged_breakpoint;
- ops->print_recreate = print_recreate_ranged_breakpoint;
-
- /* Internal breakpoints. */
- ops = &internal_breakpoint_ops;
- *ops = bkpt_base_breakpoint_ops;
- ops->re_set = internal_bkpt_re_set;
- ops->check_status = internal_bkpt_check_status;
- ops->print_it = internal_bkpt_print_it;
- ops->print_mention = internal_bkpt_print_mention;
-
- /* Momentary breakpoints. */
- ops = &momentary_breakpoint_ops;
- *ops = bkpt_base_breakpoint_ops;
- ops->re_set = momentary_bkpt_re_set;
- ops->check_status = momentary_bkpt_check_status;
- ops->print_it = momentary_bkpt_print_it;
- ops->print_mention = momentary_bkpt_print_mention;
-
- /* Probe breakpoints. */
- ops = &bkpt_probe_breakpoint_ops;
- *ops = bkpt_breakpoint_ops;
- ops->insert_location = bkpt_probe_insert_location;
- ops->remove_location = bkpt_probe_remove_location;
- ops->create_sals_from_location = bkpt_probe_create_sals_from_location;
- ops->decode_location = bkpt_probe_decode_location;
-
- /* Watchpoints. */
- ops = &watchpoint_breakpoint_ops;
- *ops = base_breakpoint_ops;
- ops->re_set = re_set_watchpoint;
- ops->insert_location = insert_watchpoint;
- ops->remove_location = remove_watchpoint;
- ops->breakpoint_hit = breakpoint_hit_watchpoint;
- ops->check_status = check_status_watchpoint;
- ops->resources_needed = resources_needed_watchpoint;
- ops->works_in_software_mode = works_in_software_mode_watchpoint;
- ops->print_it = print_it_watchpoint;
- ops->print_mention = print_mention_watchpoint;
- ops->print_recreate = print_recreate_watchpoint;
- ops->explains_signal = explains_signal_watchpoint;
-
- /* Masked watchpoints. */
- ops = &masked_watchpoint_breakpoint_ops;
- *ops = watchpoint_breakpoint_ops;
- ops->insert_location = insert_masked_watchpoint;
- ops->remove_location = remove_masked_watchpoint;
- ops->resources_needed = resources_needed_masked_watchpoint;
- ops->works_in_software_mode = works_in_software_mode_masked_watchpoint;
- ops->print_it = print_it_masked_watchpoint;
- ops->print_one_detail = print_one_detail_masked_watchpoint;
- ops->print_mention = print_mention_masked_watchpoint;
- ops->print_recreate = print_recreate_masked_watchpoint;
-
- /* Tracepoints. */
- ops = &tracepoint_breakpoint_ops;
- *ops = base_breakpoint_ops;
- ops->re_set = tracepoint_re_set;
- ops->breakpoint_hit = tracepoint_breakpoint_hit;
- ops->print_one_detail = tracepoint_print_one_detail;
- ops->print_mention = tracepoint_print_mention;
- ops->print_recreate = tracepoint_print_recreate;
- ops->create_sals_from_location = tracepoint_create_sals_from_location;
- ops->create_breakpoints_sal = tracepoint_create_breakpoints_sal;
- ops->decode_location = tracepoint_decode_location;
-
- /* Probe tracepoints. */
- ops = &tracepoint_probe_breakpoint_ops;
- *ops = tracepoint_breakpoint_ops;
- ops->create_sals_from_location = tracepoint_probe_create_sals_from_location;
- ops->decode_location = tracepoint_probe_decode_location;
-
- /* Static tracepoints with marker (`-m'). */
- ops = &strace_marker_breakpoint_ops;
- *ops = tracepoint_breakpoint_ops;
- ops->create_sals_from_location = strace_marker_create_sals_from_location;
- ops->create_breakpoints_sal = strace_marker_create_breakpoints_sal;
- ops->decode_location = strace_marker_decode_location;
-
- /* Fork catchpoints. */
- ops = &catch_fork_breakpoint_ops;
- *ops = base_breakpoint_ops;
- ops->insert_location = insert_catch_fork;
- ops->remove_location = remove_catch_fork;
- ops->breakpoint_hit = breakpoint_hit_catch_fork;
- ops->print_it = print_it_catch_fork;
- ops->print_one = print_one_catch_fork;
- ops->print_mention = print_mention_catch_fork;
- ops->print_recreate = print_recreate_catch_fork;
-
- /* Vfork catchpoints. */
- ops = &catch_vfork_breakpoint_ops;
- *ops = base_breakpoint_ops;
- ops->insert_location = insert_catch_vfork;
- ops->remove_location = remove_catch_vfork;
- ops->breakpoint_hit = breakpoint_hit_catch_vfork;
- ops->print_it = print_it_catch_vfork;
- ops->print_one = print_one_catch_vfork;
- ops->print_mention = print_mention_catch_vfork;
- ops->print_recreate = print_recreate_catch_vfork;
-
- /* Exec catchpoints. */
- ops = &catch_exec_breakpoint_ops;
- *ops = base_breakpoint_ops;
- ops->insert_location = insert_catch_exec;
- ops->remove_location = remove_catch_exec;
- ops->breakpoint_hit = breakpoint_hit_catch_exec;
- ops->print_it = print_it_catch_exec;
- ops->print_one = print_one_catch_exec;
- ops->print_mention = print_mention_catch_exec;
- ops->print_recreate = print_recreate_catch_exec;
-
- /* Solib-related catchpoints. */
- ops = &catch_solib_breakpoint_ops;
- *ops = base_breakpoint_ops;
- ops->insert_location = insert_catch_solib;
- ops->remove_location = remove_catch_solib;
- ops->breakpoint_hit = breakpoint_hit_catch_solib;
- ops->check_status = check_status_catch_solib;
- ops->print_it = print_it_catch_solib;
- ops->print_one = print_one_catch_solib;
- ops->print_mention = print_mention_catch_solib;
- ops->print_recreate = print_recreate_catch_solib;
-
- ops = &dprintf_breakpoint_ops;
- *ops = bkpt_base_breakpoint_ops;
- ops->re_set = dprintf_re_set;
- ops->resources_needed = bkpt_resources_needed;
- ops->print_it = bkpt_print_it;
- ops->print_mention = bkpt_print_mention;
- ops->print_recreate = dprintf_print_recreate;
- ops->after_condition_true = dprintf_after_condition_true;
- ops->breakpoint_hit = dprintf_breakpoint_hit;
-}
-
/* Chain containing all defined "enable breakpoint" subcommands. */
static struct cmd_list_element *enablebreaklist = NULL;
@@ -15424,8 +14339,6 @@ _initialize_breakpoint ()
{
struct cmd_list_element *c;
- initialize_breakpoint_ops ();
-
gdb::observers::solib_unloaded.attach (disable_breakpoints_in_unloaded_shlib,
"breakpoint");
gdb::observers::free_objfile.attach (disable_breakpoints_in_freed_objfile,
@@ -15615,32 +14528,6 @@ BREAK_ARGS_HELP ("break")));
add_com_alias ("bre", break_cmd, class_run, 1);
add_com_alias ("brea", break_cmd, class_run, 1);
- if (dbx_commands)
- {
- add_abbrev_prefix_cmd ("stop", class_breakpoint, stop_command, _("\
-Break in function/address or break at a line in the current file."),
- &stoplist, 1, &cmdlist);
- add_cmd ("in", class_breakpoint, stopin_command,
- _("Break in function or address."), &stoplist);
- add_cmd ("at", class_breakpoint, stopat_command,
- _("Break at a line in the current file."), &stoplist);
- add_com ("status", class_info, info_breakpoints_command, _("\
-Status of user-settable breakpoints, or breakpoint number NUMBER.\n\
-The \"Type\" column indicates one of:\n\
-\tbreakpoint - normal breakpoint\n\
-\twatchpoint - watchpoint\n\
-The \"Disp\" column contains one of \"keep\", \"del\", or \"dis\" to indicate\n\
-the disposition of the breakpoint after it gets hit. \"dis\" means that the\n\
-breakpoint will be disabled. The \"Address\" and \"What\" columns indicate the\n\
-address and file/line number respectively.\n\
-\n\
-Convenience variable \"$_\" and default examine address for \"x\"\n\
-are set to the address of the last breakpoint listed unless the command\n\
-is prefixed with \"server \".\n\n\
-Convenience variable \"$bpnum\" contains the number of the last\n\
-breakpoint set."));
- }
-
cmd_list_element *info_breakpoints_cmd
= add_info ("breakpoints", info_breakpoints_command, _("\
Status of specified breakpoints (all user-settable breakpoints if no argument).\n\
@@ -15691,36 +14578,6 @@ Set temporary catchpoints to catch events."),
&tcatch_cmdlist,
0/*allow-unknown*/, &cmdlist);
- add_catch_command ("fork", _("Catch calls to fork."),
- catch_fork_command_1,
- NULL,
- (void *) (uintptr_t) catch_fork_permanent,
- (void *) (uintptr_t) catch_fork_temporary);
- add_catch_command ("vfork", _("Catch calls to vfork."),
- catch_fork_command_1,
- NULL,
- (void *) (uintptr_t) catch_vfork_permanent,
- (void *) (uintptr_t) catch_vfork_temporary);
- add_catch_command ("exec", _("Catch calls to exec."),
- catch_exec_command_1,
- NULL,
- CATCH_PERMANENT,
- CATCH_TEMPORARY);
- add_catch_command ("load", _("Catch loads of shared libraries.\n\
-Usage: catch load [REGEX]\n\
-If REGEX is given, only stop for libraries matching the regular expression."),
- catch_load_command_1,
- NULL,
- CATCH_PERMANENT,
- CATCH_TEMPORARY);
- add_catch_command ("unload", _("Catch unloads of shared libraries.\n\
-Usage: catch unload [REGEX]\n\
-If REGEX is given, only stop for libraries matching the regular expression."),
- catch_unload_command_1,
- NULL,
- CATCH_PERMANENT,
- CATCH_TEMPORARY);
-
const auto opts = make_watch_options_def_group (nullptr);
static const std::string watch_help = gdb::option::build_help (_("\
diff --git a/gdb/breakpoint.h b/gdb/breakpoint.h
index ba28219c236..1322bc1b9b9 100644
--- a/gdb/breakpoint.h
+++ b/gdb/breakpoint.h
@@ -183,6 +183,8 @@ enum bptype
bp_tracepoint,
bp_fast_tracepoint,
bp_static_tracepoint,
+ /* Like bp_static_tracepoint but for static markers. */
+ bp_static_marker_tracepoint,
/* A dynamic printf stops at the given location, does a formatted
print, then automatically continues. (Although this is sort of
@@ -559,24 +561,98 @@ enum print_stop_action
struct breakpoint_ops
{
+ /* Create SALs from location, storing the result in linespec_result.
+
+ For an explanation about the arguments, see the function
+ `create_sals_from_location_default'.
+
+ This function is called inside `create_breakpoint'. */
+ void (*create_sals_from_location) (struct event_location *location,
+ struct linespec_result *canonical);
+
+ /* This method will be responsible for creating a breakpoint given its SALs.
+ Usually, it just calls `create_breakpoints_sal' (for ordinary
+ breakpoints). However, there may be some special cases where we might
+ need to do some tweaks, e.g., see
+ `strace_marker_create_breakpoints_sal'.
+
+ This function is called inside `create_breakpoint'. */
+ void (*create_breakpoints_sal) (struct gdbarch *,
+ struct linespec_result *,
+ gdb::unique_xmalloc_ptr<char>,
+ gdb::unique_xmalloc_ptr<char>,
+ enum bptype, enum bpdisp, int, int,
+ int, const struct breakpoint_ops *,
+ int, int, int, unsigned);
+};
+
+/* Helper for breakpoint_ops->print_recreate implementations. Prints
+ the "thread" or "task" condition of B, and then a newline.
+
+ Necessary because most breakpoint implementations accept
+ thread/task conditions at the end of the spec line, like "break foo
+ thread 1", which needs outputting before any breakpoint-type
+ specific extra command necessary for B's recreation. */
+extern void print_recreate_thread (struct breakpoint *b, struct ui_file *fp);
+
+enum watchpoint_triggered
+{
+ /* This watchpoint definitely did not trigger. */
+ watch_triggered_no = 0,
+
+ /* Some hardware watchpoint triggered, and it might have been this
+ one, but we do not know which it was. */
+ watch_triggered_unknown,
+
+ /* This hardware watchpoint definitely did trigger. */
+ watch_triggered_yes
+};
+
+/* Some targets (e.g., embedded PowerPC) need two debug registers to set
+ a watchpoint over a memory region. If this flag is true, GDB will use
+ only one register per watchpoint, thus assuming that all accesses that
+ modify a memory location happen at its starting address. */
+
+extern bool target_exact_watchpoints;
+
+/* bp_location linked list range. */
+
+using bp_location_range = next_range<bp_location>;
+
+/* Note that the ->silent field is not currently used by any commands
+ (though the code is in there if it was to be, and set_raw_breakpoint
+ does set it to 0). I implemented it because I thought it would be
+ useful for a hack I had to put in; I'm going to leave it in because
+ I can see how there might be times when it would indeed be useful */
+
+/* This is for all kinds of breakpoints. */
+
+struct breakpoint
+{
+ virtual ~breakpoint () = default;
+
/* Allocate a location for this breakpoint. */
- struct bp_location * (*allocate_location) (struct breakpoint *);
+ virtual struct bp_location *allocate_location ();
/* Reevaluate a breakpoint. This is necessary after symbols change
(e.g., an executable or DSO was loaded, or the inferior just
started). */
- void (*re_set) (struct breakpoint *self);
+ virtual void re_set ()
+ {
+ /* Nothing to re-set. */
+ }
/* Insert the breakpoint or watchpoint or activate the catchpoint.
Return 0 for success, 1 if the breakpoint, watchpoint or
catchpoint type is not supported, -1 for failure. */
- int (*insert_location) (struct bp_location *);
+ virtual int insert_location (struct bp_location *);
/* Remove the breakpoint/catchpoint that was previously inserted
with the "insert" method above. Return 0 for success, 1 if the
breakpoint, watchpoint or catchpoint type is not supported,
-1 for failure. */
- int (*remove_location) (struct bp_location *, enum remove_bp_reason reason);
+ virtual int remove_location (struct bp_location *,
+ enum remove_bp_reason reason);
/* Return true if it the target has stopped due to hitting
breakpoint location BL. This function does not check if we
@@ -584,32 +660,39 @@ struct breakpoint_ops
space in which the event occurred, BP_ADDR is the address at
which the inferior stopped, and WS is the target_waitstatus
describing the event. */
- int (*breakpoint_hit) (const struct bp_location *bl,
- const address_space *aspace,
- CORE_ADDR bp_addr,
- const target_waitstatus &ws);
+ virtual int breakpoint_hit (const struct bp_location *bl,
+ const address_space *aspace,
+ CORE_ADDR bp_addr,
+ const target_waitstatus &ws);
/* Check internal conditions of the breakpoint referred to by BS.
If we should not stop for this breakpoint, set BS->stop to 0. */
- void (*check_status) (struct bpstat *bs);
+ virtual void check_status (struct bpstat *bs)
+ {
+ /* Always stop. */
+ }
/* Tell how many hardware resources (debug registers) are needed
for this breakpoint. If this function is not provided, then
the breakpoint or watchpoint needs one debug register. */
- int (*resources_needed) (const struct bp_location *);
+ virtual int resources_needed (const struct bp_location *);
/* Tell whether we can downgrade from a hardware watchpoint to a software
one. If not, the user will not be able to enable the watchpoint when
there are not enough hardware resources available. */
- int (*works_in_software_mode) (const struct breakpoint *);
+ virtual int works_in_software_mode () const;
/* The normal print routine for this breakpoint, called when we
hit it. */
- enum print_stop_action (*print_it) (struct bpstat *bs);
+ virtual enum print_stop_action print_it (struct bpstat *bs);
/* Display information about this breakpoint, for "info
- breakpoints". */
- void (*print_one) (struct breakpoint *, struct bp_location **);
+ breakpoints". Returns false if this method should use the
+ default behavior. */
+ virtual bool print_one (struct bp_location **)
+ {
+ return false;
+ }
/* Display extra information about this breakpoint, below the normal
breakpoint description in "info breakpoints".
@@ -623,39 +706,17 @@ struct breakpoint_ops
address range: [0x10000458, 0x100004c7]
*/
- void (*print_one_detail) (const struct breakpoint *, struct ui_out *);
+ virtual void print_one_detail (struct ui_out *) const
+ {
+ /* Nothing. */
+ }
/* Display information about this breakpoint after setting it
(roughly speaking; this is called from "mention"). */
- void (*print_mention) (struct breakpoint *);
+ virtual void print_mention ();
/* Print to FP the CLI command that recreates this breakpoint. */
- void (*print_recreate) (struct breakpoint *, struct ui_file *fp);
-
- /* Create SALs from location, storing the result in linespec_result.
-
- For an explanation about the arguments, see the function
- `create_sals_from_location_default'.
-
- This function is called inside `create_breakpoint'. */
- void (*create_sals_from_location) (struct event_location *location,
- struct linespec_result *canonical,
- enum bptype type_wanted);
-
- /* This method will be responsible for creating a breakpoint given its SALs.
- Usually, it just calls `create_breakpoints_sal' (for ordinary
- breakpoints). However, there may be some special cases where we might
- need to do some tweaks, e.g., see
- `strace_marker_create_breakpoints_sal'.
-
- This function is called inside `create_breakpoint'. */
- void (*create_breakpoints_sal) (struct gdbarch *,
- struct linespec_result *,
- gdb::unique_xmalloc_ptr<char>,
- gdb::unique_xmalloc_ptr<char>,
- enum bptype, enum bpdisp, int, int,
- int, const struct breakpoint_ops *,
- int, int, int, unsigned);
+ virtual void print_recreate (struct ui_file *fp);
/* Given the location (second parameter), this method decodes it and
returns the SAL locations related to it. For ordinary
@@ -663,64 +724,24 @@ struct breakpoint_ops
not NULL, symbol search is restricted to just that program space.
This function is called inside `location_to_sals'. */
- std::vector<symtab_and_line> (*decode_location)
- (struct breakpoint *b,
- struct event_location *location,
+ virtual std::vector<symtab_and_line> decode_location
+ (struct event_location *location,
struct program_space *search_pspace);
/* Return true if this breakpoint explains a signal. See
bpstat_explains_signal. */
- int (*explains_signal) (struct breakpoint *, enum gdb_signal);
+ virtual int explains_signal (enum gdb_signal)
+ {
+ return 1;
+ }
/* Called after evaluating the breakpoint's condition,
and only if it evaluated true. */
- void (*after_condition_true) (struct bpstat *bs);
-};
-
-/* Helper for breakpoint_ops->print_recreate implementations. Prints
- the "thread" or "task" condition of B, and then a newline.
-
- Necessary because most breakpoint implementations accept
- thread/task conditions at the end of the spec line, like "break foo
- thread 1", which needs outputting before any breakpoint-type
- specific extra command necessary for B's recreation. */
-extern void print_recreate_thread (struct breakpoint *b, struct ui_file *fp);
-
-enum watchpoint_triggered
-{
- /* This watchpoint definitely did not trigger. */
- watch_triggered_no = 0,
-
- /* Some hardware watchpoint triggered, and it might have been this
- one, but we do not know which it was. */
- watch_triggered_unknown,
-
- /* This hardware watchpoint definitely did trigger. */
- watch_triggered_yes
-};
-
-/* Some targets (e.g., embedded PowerPC) need two debug registers to set
- a watchpoint over a memory region. If this flag is true, GDB will use
- only one register per watchpoint, thus assuming that all accesses that
- modify a memory location happen at its starting address. */
-
-extern bool target_exact_watchpoints;
-
-/* bp_location linked list range. */
-
-using bp_location_range = next_range<bp_location>;
-
-/* Note that the ->silent field is not currently used by any commands
- (though the code is in there if it was to be, and set_raw_breakpoint
- does set it to 0). I implemented it because I thought it would be
- useful for a hack I had to put in; I'm going to leave it in because
- I can see how there might be times when it would indeed be useful */
-
-/* This is for all kinds of breakpoints. */
+ virtual void after_condition_true (struct bpstat *bs)
+ {
+ /* Nothing to do. */
+ }
-struct breakpoint
-{
- virtual ~breakpoint () = default;
/* Return a range of this breakpoint's locations. */
bp_location_range locations ();
@@ -827,10 +848,44 @@ struct breakpoint
gdbscm_breakpoint_object *scm_bp_object = NULL;
};
+/* The structure to be inherit by all kinds of breakpoints (real
+ breakpoints, i.e., user "break" breakpoints, internal and momentary
+ breakpoints, etc.). */
+struct base_breakpoint : public breakpoint
+{
+ void re_set () override;
+ int insert_location (struct bp_location *) override;
+ int remove_location (struct bp_location *,
+ enum remove_bp_reason reason) override;
+ int breakpoint_hit (const struct bp_location *bl,
+ const address_space *aspace,
+ CORE_ADDR bp_addr,
+ const target_waitstatus &ws) override;
+ std::vector<symtab_and_line> decode_location
+ (struct event_location *location,
+ struct program_space *search_pspace) override;
+};
+
/* An instance of this type is used to represent a watchpoint. */
struct watchpoint : public breakpoint
{
+ void re_set () override;
+ int insert_location (struct bp_location *) override;
+ int remove_location (struct bp_location *,
+ enum remove_bp_reason reason) override;
+ int breakpoint_hit (const struct bp_location *bl,
+ const address_space *aspace,
+ CORE_ADDR bp_addr,
+ const target_waitstatus &ws) override;
+ void check_status (struct bpstat *bs) override;
+ int resources_needed (const struct bp_location *) override;
+ int works_in_software_mode () const override;
+ enum print_stop_action print_it (struct bpstat *bs) override;
+ void print_mention () override;
+ void print_recreate (struct ui_file *fp) override;
+ int explains_signal (enum gdb_signal) override;
+
/* String form of exp to use for displaying to the user (malloc'd),
or NULL if none. */
gdb::unique_xmalloc_ptr<char> exp_string;
@@ -903,6 +958,18 @@ extern bool is_exception_catchpoint (breakpoint *bp);
struct tracepoint : public breakpoint
{
+ void re_set () override;
+ int breakpoint_hit (const struct bp_location *bl,
+ const address_space *aspace, CORE_ADDR bp_addr,
+ const target_waitstatus &ws) override;
+ void print_one_detail (struct ui_out *uiout) const override;
+ void print_mention () override;
+ void print_recreate (struct ui_file *fp) override;
+ std::vector<symtab_and_line> decode_location
+ (struct event_location *location,
+ struct program_space *search_pspace) override;
+
+
/* Number of times this tracepoint should single-step and collect
additional data. */
long step_count;
@@ -968,13 +1035,31 @@ extern bpstat *build_bpstat_chain (const address_space *aspace,
several reasons concurrently.)
Each element of the chain has valid next, breakpoint_at,
- commands, FIXME??? fields. */
+ commands, FIXME??? fields.
+
+ watchpoints_triggered must be called beforehand to set up each
+ watchpoint's watchpoint_triggered value.
+
+*/
extern bpstat *bpstat_stop_status (const address_space *aspace,
CORE_ADDR pc, thread_info *thread,
const target_waitstatus &ws,
bpstat *stop_chain = nullptr);
+
+/* Like bpstat_stop_status, but clears all watchpoints'
+ watchpoint_triggered flag. Unlike with bpstat_stop_status, there's
+ no need to call watchpoint_triggered beforehand. You'll typically
+ use this variant when handling a known-non-watchpoint event, like a
+ fork or exec event. */
+
+extern bpstat *bpstat_stop_status_nowatch (const address_space *aspace,
+ CORE_ADDR bp_addr,
+ thread_info *thread,
+ const target_waitstatus &ws);
+
+
/* This bpstat_what stuff tells wait_for_inferior what to do with a
breakpoint (a challenging task).
@@ -1312,12 +1397,7 @@ extern void awatch_command_wrapper (const char *, int, bool);
extern void rwatch_command_wrapper (const char *, int, bool);
extern void tbreak_command (const char *, int);
-extern struct breakpoint_ops base_breakpoint_ops;
-extern struct breakpoint_ops bkpt_breakpoint_ops;
-extern struct breakpoint_ops tracepoint_breakpoint_ops;
-extern struct breakpoint_ops dprintf_breakpoint_ops;
-
-extern void initialize_breakpoint_ops (void);
+extern const struct breakpoint_ops base_breakpoint_ops;
/* Arguments to pass as context to some catch command handlers. */
#define CATCH_PERMANENT ((void *) (uintptr_t) 0)
@@ -1341,20 +1421,17 @@ extern void
struct gdbarch *gdbarch,
struct symtab_and_line sal,
const char *addr_string,
- const struct breakpoint_ops *ops,
int tempflag,
int enabled,
int from_tty);
/* Initialize a new breakpoint of the bp_catchpoint kind. If TEMP
is true, then make the breakpoint temporary. If COND_STRING is
- not NULL, then store it in the breakpoint. OPS, if not NULL, is
- the breakpoint_ops structure associated to the catchpoint. */
+ not NULL, then store it in the breakpoint. */
extern void init_catchpoint (struct breakpoint *b,
struct gdbarch *gdbarch, bool temp,
- const char *cond_string,
- const struct breakpoint_ops *ops);
+ const char *cond_string);
/* Add breakpoint B on the breakpoint list, and notify the user, the
target and breakpoint_created observers of its existence. If
@@ -1368,8 +1445,7 @@ extern void install_breakpoint (int internal, std::unique_ptr<breakpoint> &&b,
/* Returns the breakpoint ops appropriate for use with with LOCATION and
according to IS_TRACEPOINT. Use this to ensure, for example, that you pass
the correct ops to create_breakpoint for probe locations. If LOCATION is
- NULL, returns bkpt_breakpoint_ops (or tracepoint_breakpoint_ops, if
- IS_TRACEPOINT is true). */
+ NULL, returns base_breakpoint_ops. */
extern const struct breakpoint_ops *breakpoint_ops_for_event_location
(const struct event_location *location, bool is_tracepoint);
@@ -1607,8 +1683,9 @@ extern void insert_single_step_breakpoint (struct gdbarch *,
otherwise, return false. */
extern int insert_single_step_breakpoints (struct gdbarch *);
-/* Check if any hardware watchpoints have triggered, according to the
- target. */
+/* Check whether any hardware watchpoints have triggered or not,
+ according to the target, and record it in each watchpoint's
+ 'watchpoint_triggered' field. */
int watchpoints_triggered (const target_waitstatus &);
/* Helper for transparent breakpoint hiding for memory read and write
@@ -1784,4 +1861,10 @@ extern void catch_exception_event (enum exception_event_kind ex_event,
const char *regex, bool tempflag,
int from_tty);
+/* A helper function that prints a shared library stopped event.
+ IS_CATCHPOINT is true if the event is due to a "catch load"
+ catchpoint, false otherwise. */
+
+extern void print_solib_event (bool is_catchpoint);
+
#endif /* !defined (BREAKPOINT_H) */
diff --git a/gdb/bsd-kvm.c b/gdb/bsd-kvm.c
index 354df04ec0e..e9e41df1bec 100644
--- a/gdb/bsd-kvm.c
+++ b/gdb/bsd-kvm.c
@@ -21,6 +21,7 @@
#include "defs.h"
#include "cli/cli-cmds.h"
#include "command.h"
+#include "filenames.h"
#include "frame.h"
#include "regcache.h"
#include "target.h"
@@ -30,6 +31,7 @@
#include "inferior.h" /* for get_exec_file */
#include "gdbthread.h"
#include "gdbsupport/pathstuff.h"
+#include "gdbsupport/gdb_tilde_expand.h"
#include <fcntl.h>
#include <kvm.h>
@@ -47,7 +49,7 @@
#include "bsd-kvm.h"
/* Kernel memory device file. */
-static const char *bsd_kvm_corefile;
+static std::string bsd_kvm_corefile;
/* Kernel memory interface descriptor. */
static kvm_t *core_kd;
@@ -109,24 +111,19 @@ bsd_kvm_target_open (const char *arg, int from_tty)
char errbuf[_POSIX2_LINE_MAX];
const char *execfile = NULL;
kvm_t *temp_kd;
- char *filename = NULL;
+ std::string filename;
target_preopen (from_tty);
if (arg)
{
- filename = tilde_expand (arg);
- if (filename[0] != '/')
- {
- gdb::unique_xmalloc_ptr<char> temp (gdb_abspath (filename));
-
- xfree (filename);
- filename = temp.release ();
- }
+ filename = gdb_tilde_expand (arg);
+ if (!IS_ABSOLUTE_PATH (filename))
+ filename = gdb_abspath (filename.c_str ());
}
execfile = get_exec_file (0);
- temp_kd = kvm_openfiles (execfile, filename, NULL,
+ temp_kd = kvm_openfiles (execfile, filename.c_str (), NULL,
write_files ? O_RDWR : O_RDONLY, errbuf);
if (temp_kd == NULL)
error (("%s"), errbuf);
@@ -155,6 +152,7 @@ bsd_kvm_target::close ()
core_kd = NULL;
}
+ bsd_kvm_corefile.clear ();
switch_to_no_thread ();
exit_inferior_silent (current_inferior ());
}
@@ -203,11 +201,11 @@ bsd_kvm_target::xfer_partial (enum target_object object,
void
bsd_kvm_target::files_info ()
{
- if (bsd_kvm_corefile && strcmp (bsd_kvm_corefile, _PATH_MEM) != 0)
- printf_filtered (_("\tUsing the kernel crash dump %s.\n"),
- bsd_kvm_corefile);
+ if (bsd_kvm_corefile != _PATH_MEM)
+ gdb_printf (_("\tUsing the kernel crash dump %s.\n"),
+ bsd_kvm_corefile.c_str ());
else
- printf_filtered (_("\tUsing the currently running kernel.\n"));
+ gdb_printf (_("\tUsing the currently running kernel.\n"));
}
/* Fetch process control block at address PADDR. */
diff --git a/gdb/bsd-uthread.c b/gdb/bsd-uthread.c
index 5d5978d66ac..759b562cdd0 100644
--- a/gdb/bsd-uthread.c
+++ b/gdb/bsd-uthread.c
@@ -29,7 +29,7 @@
#include "symfile.h"
#include "target.h"
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
#include "bsd-uthread.h"
@@ -163,7 +163,7 @@ bsd_uthread_lookup_address (const char *name, struct objfile *objfile)
sym = lookup_minimal_symbol (name, NULL, objfile);
if (sym.minsym)
- return BMSYMBOL_VALUE_ADDRESS (sym);
+ return sym.value_address ();
return 0;
}
diff --git a/gdb/btrace.c b/gdb/btrace.c
index ba10f78e7bf..c4f0d4911ab 100644
--- a/gdb/btrace.c
+++ b/gdb/btrace.c
@@ -62,8 +62,8 @@ static void btrace_add_pc (struct thread_info *tp);
do \
{ \
if (record_debug != 0) \
- fprintf_unfiltered (gdb_stdlog, \
- "[btrace] " msg "\n", ##args); \
+ gdb_printf (gdb_stdlog, \
+ "[btrace] " msg "\n", ##args); \
} \
while (0)
@@ -102,7 +102,7 @@ ftrace_print_filename (const struct btrace_function *bfun)
sym = bfun->sym;
if (sym != NULL)
- filename = symtab_to_filename_for_display (symbol_symtab (sym));
+ filename = symtab_to_filename_for_display (sym->symtab ());
else
filename = "<unknown>";
@@ -210,8 +210,8 @@ ftrace_function_switched (const struct btrace_function *bfun,
return 1;
/* Check the location of those functions, as well. */
- bfname = symtab_to_fullname (symbol_symtab (sym));
- fname = symtab_to_fullname (symbol_symtab (fun));
+ bfname = symtab_to_fullname (sym->symtab ());
+ fname = symtab_to_fullname (fun->symtab ());
if (filename_cmp (fname, bfname) != 0)
return 1;
}
@@ -1616,9 +1616,9 @@ btrace_enable (struct thread_info *tp, const struct btrace_config *conf)
#endif /* !defined (HAVE_LIBIPT) */
DEBUG ("enable thread %s (%s)", print_thread_id (tp),
- target_pid_to_str (tp->ptid).c_str ());
+ tp->ptid.to_string ().c_str ());
- tp->btrace.target = target_enable_btrace (tp->ptid, conf);
+ tp->btrace.target = target_enable_btrace (tp, conf);
if (tp->btrace.target == NULL)
error (_("Failed to enable recording on thread %s (%s)."),
@@ -1671,7 +1671,7 @@ btrace_disable (struct thread_info *tp)
print_thread_id (tp), target_pid_to_str (tp->ptid).c_str ());
DEBUG ("disable thread %s (%s)", print_thread_id (tp),
- target_pid_to_str (tp->ptid).c_str ());
+ tp->ptid.to_string ().c_str ());
target_disable_btrace (btp->target);
btp->target = NULL;
@@ -1690,7 +1690,7 @@ btrace_teardown (struct thread_info *tp)
return;
DEBUG ("teardown thread %s (%s)", print_thread_id (tp),
- target_pid_to_str (tp->ptid).c_str ());
+ tp->ptid.to_string ().c_str ());
target_teardown_btrace (btp->target);
btp->target = NULL;
@@ -1912,7 +1912,7 @@ btrace_fetch (struct thread_info *tp, const struct btrace_cpu *cpu)
int errcode;
DEBUG ("fetch thread %s (%s)", print_thread_id (tp),
- target_pid_to_str (tp->ptid).c_str ());
+ tp->ptid.to_string ().c_str ());
btinfo = &tp->btrace;
tinfo = btinfo->target;
@@ -1989,7 +1989,7 @@ btrace_clear (struct thread_info *tp)
struct btrace_thread_info *btinfo;
DEBUG ("clear thread %s (%s)", print_thread_id (tp),
- target_pid_to_str (tp->ptid).c_str ());
+ tp->ptid.to_string ().c_str ());
/* Make sure btrace frames that may hold a pointer into the branch
trace data are destroyed. */
@@ -2852,122 +2852,122 @@ pt_print_packet (const struct pt_packet *packet)
switch (packet->type)
{
default:
- printf_filtered (("[??: %x]"), packet->type);
+ gdb_printf (("[??: %x]"), packet->type);
break;
case ppt_psb:
- printf_filtered (("psb"));
+ gdb_printf (("psb"));
break;
case ppt_psbend:
- printf_filtered (("psbend"));
+ gdb_printf (("psbend"));
break;
case ppt_pad:
- printf_filtered (("pad"));
+ gdb_printf (("pad"));
break;
case ppt_tip:
- printf_filtered (("tip %u: 0x%" PRIx64 ""),
- packet->payload.ip.ipc,
- packet->payload.ip.ip);
+ gdb_printf (("tip %u: 0x%" PRIx64 ""),
+ packet->payload.ip.ipc,
+ packet->payload.ip.ip);
break;
case ppt_tip_pge:
- printf_filtered (("tip.pge %u: 0x%" PRIx64 ""),
- packet->payload.ip.ipc,
- packet->payload.ip.ip);
+ gdb_printf (("tip.pge %u: 0x%" PRIx64 ""),
+ packet->payload.ip.ipc,
+ packet->payload.ip.ip);
break;
case ppt_tip_pgd:
- printf_filtered (("tip.pgd %u: 0x%" PRIx64 ""),
- packet->payload.ip.ipc,
- packet->payload.ip.ip);
+ gdb_printf (("tip.pgd %u: 0x%" PRIx64 ""),
+ packet->payload.ip.ipc,
+ packet->payload.ip.ip);
break;
case ppt_fup:
- printf_filtered (("fup %u: 0x%" PRIx64 ""),
- packet->payload.ip.ipc,
- packet->payload.ip.ip);
+ gdb_printf (("fup %u: 0x%" PRIx64 ""),
+ packet->payload.ip.ipc,
+ packet->payload.ip.ip);
break;
case ppt_tnt_8:
- printf_filtered (("tnt-8 %u: 0x%" PRIx64 ""),
- packet->payload.tnt.bit_size,
- packet->payload.tnt.payload);
+ gdb_printf (("tnt-8 %u: 0x%" PRIx64 ""),
+ packet->payload.tnt.bit_size,
+ packet->payload.tnt.payload);
break;
case ppt_tnt_64:
- printf_filtered (("tnt-64 %u: 0x%" PRIx64 ""),
- packet->payload.tnt.bit_size,
- packet->payload.tnt.payload);
+ gdb_printf (("tnt-64 %u: 0x%" PRIx64 ""),
+ packet->payload.tnt.bit_size,
+ packet->payload.tnt.payload);
break;
case ppt_pip:
- printf_filtered (("pip %" PRIx64 "%s"), packet->payload.pip.cr3,
- packet->payload.pip.nr ? (" nr") : (""));
+ gdb_printf (("pip %" PRIx64 "%s"), packet->payload.pip.cr3,
+ packet->payload.pip.nr ? (" nr") : (""));
break;
case ppt_tsc:
- printf_filtered (("tsc %" PRIx64 ""), packet->payload.tsc.tsc);
+ gdb_printf (("tsc %" PRIx64 ""), packet->payload.tsc.tsc);
break;
case ppt_cbr:
- printf_filtered (("cbr %u"), packet->payload.cbr.ratio);
+ gdb_printf (("cbr %u"), packet->payload.cbr.ratio);
break;
case ppt_mode:
switch (packet->payload.mode.leaf)
{
default:
- printf_filtered (("mode %u"), packet->payload.mode.leaf);
+ gdb_printf (("mode %u"), packet->payload.mode.leaf);
break;
case pt_mol_exec:
- printf_filtered (("mode.exec%s%s"),
- packet->payload.mode.bits.exec.csl
- ? (" cs.l") : (""),
- packet->payload.mode.bits.exec.csd
- ? (" cs.d") : (""));
+ gdb_printf (("mode.exec%s%s"),
+ packet->payload.mode.bits.exec.csl
+ ? (" cs.l") : (""),
+ packet->payload.mode.bits.exec.csd
+ ? (" cs.d") : (""));
break;
case pt_mol_tsx:
- printf_filtered (("mode.tsx%s%s"),
- packet->payload.mode.bits.tsx.intx
- ? (" intx") : (""),
- packet->payload.mode.bits.tsx.abrt
- ? (" abrt") : (""));
+ gdb_printf (("mode.tsx%s%s"),
+ packet->payload.mode.bits.tsx.intx
+ ? (" intx") : (""),
+ packet->payload.mode.bits.tsx.abrt
+ ? (" abrt") : (""));
break;
}
break;
case ppt_ovf:
- printf_filtered (("ovf"));
+ gdb_printf (("ovf"));
break;
case ppt_stop:
- printf_filtered (("stop"));
+ gdb_printf (("stop"));
break;
case ppt_vmcs:
- printf_filtered (("vmcs %" PRIx64 ""), packet->payload.vmcs.base);
+ gdb_printf (("vmcs %" PRIx64 ""), packet->payload.vmcs.base);
break;
case ppt_tma:
- printf_filtered (("tma %x %x"), packet->payload.tma.ctc,
- packet->payload.tma.fc);
+ gdb_printf (("tma %x %x"), packet->payload.tma.ctc,
+ packet->payload.tma.fc);
break;
case ppt_mtc:
- printf_filtered (("mtc %x"), packet->payload.mtc.ctc);
+ gdb_printf (("mtc %x"), packet->payload.mtc.ctc);
break;
case ppt_cyc:
- printf_filtered (("cyc %" PRIx64 ""), packet->payload.cyc.value);
+ gdb_printf (("cyc %" PRIx64 ""), packet->payload.cyc.value);
break;
case ppt_mnt:
- printf_filtered (("mnt %" PRIx64 ""), packet->payload.mnt.payload);
+ gdb_printf (("mnt %" PRIx64 ""), packet->payload.mnt.payload);
break;
}
}
@@ -3149,9 +3149,9 @@ btrace_maint_print_packets (struct btrace_thread_info *btinfo,
{
const btrace_block &block = blocks.at (blk);
- printf_filtered ("%u\tbegin: %s, end: %s\n", blk,
- core_addr_to_string_nz (block.begin),
- core_addr_to_string_nz (block.end));
+ gdb_printf ("%u\tbegin: %s, end: %s\n", blk,
+ core_addr_to_string_nz (block.begin),
+ core_addr_to_string_nz (block.end));
}
btinfo->maint.variant.bts.packet_history.begin = begin;
@@ -3170,15 +3170,15 @@ btrace_maint_print_packets (struct btrace_thread_info *btinfo,
{
const struct btrace_pt_packet &packet = packets.at (pkt);
- printf_filtered ("%u\t", pkt);
- printf_filtered ("0x%" PRIx64 "\t", packet.offset);
+ gdb_printf ("%u\t", pkt);
+ gdb_printf ("0x%" PRIx64 "\t", packet.offset);
if (packet.errcode == pte_ok)
pt_print_packet (&packet.packet);
else
- printf_filtered ("[error: %s]", pt_errstr (packet.errcode));
+ gdb_printf ("[error: %s]", pt_errstr (packet.errcode));
- printf_filtered ("\n");
+ gdb_printf ("\n");
}
btinfo->maint.variant.pt.packet_history.begin = begin;
@@ -3256,7 +3256,7 @@ maint_btrace_packet_history_cmd (const char *arg, int from_tty)
btrace_maint_update_packets (btinfo, &begin, &end, &from, &to);
if (begin == end)
{
- printf_filtered (_("No trace.\n"));
+ gdb_printf (_("No trace.\n"));
return;
}
@@ -3398,8 +3398,8 @@ maint_info_btrace_cmd (const char *args, int from_tty)
if (conf == NULL)
error (_("No btrace configuration."));
- printf_filtered (_("Format: %s.\n"),
- btrace_format_string (conf->format));
+ gdb_printf (_("Format: %s.\n"),
+ btrace_format_string (conf->format));
switch (conf->format)
{
@@ -3407,8 +3407,8 @@ maint_info_btrace_cmd (const char *args, int from_tty)
break;
case BTRACE_FORMAT_BTS:
- printf_filtered (_("Number of packets: %zu.\n"),
- btinfo->data.variant.bts.blocks->size ());
+ gdb_printf (_("Number of packets: %zu.\n"),
+ btinfo->data.variant.bts.blocks->size ());
break;
#if defined (HAVE_LIBIPT)
@@ -3417,14 +3417,14 @@ maint_info_btrace_cmd (const char *args, int from_tty)
struct pt_version version;
version = pt_library_version ();
- printf_filtered (_("Version: %u.%u.%u%s.\n"), version.major,
- version.minor, version.build,
- version.ext != NULL ? version.ext : "");
+ gdb_printf (_("Version: %u.%u.%u%s.\n"), version.major,
+ version.minor, version.build,
+ version.ext != NULL ? version.ext : "");
btrace_maint_update_pt_packets (btinfo);
- printf_filtered (_("Number of packets: %zu.\n"),
- ((btinfo->maint.variant.pt.packets == nullptr)
- ? 0 : btinfo->maint.variant.pt.packets->size ()));
+ gdb_printf (_("Number of packets: %zu.\n"),
+ ((btinfo->maint.variant.pt.packets == nullptr)
+ ? 0 : btinfo->maint.variant.pt.packets->size ()));
}
break;
#endif /* defined (HAVE_LIBIPT) */
@@ -3438,7 +3438,7 @@ show_maint_btrace_pt_skip_pad (struct ui_file *file, int from_tty,
struct cmd_list_element *c,
const char *value)
{
- fprintf_filtered (file, _("Skip PAD packets is %s.\n"), value);
+ gdb_printf (file, _("Skip PAD packets is %s.\n"), value);
}
diff --git a/gdb/build-id.c b/gdb/build-id.c
index 8a2d5b4b7a3..345ed0e196e 100644
--- a/gdb/build-id.c
+++ b/gdb/build-id.c
@@ -76,7 +76,7 @@ build_id_to_debug_bfd_1 (const std::string &link, size_t build_id_len,
{
if (separate_debug_file_debug)
{
- fprintf_unfiltered (gdb_stdlog, _(" Trying %s..."), link.c_str ());
+ gdb_printf (gdb_stdlog, _(" Trying %s..."), link.c_str ());
gdb_flush (gdb_stdlog);
}
@@ -94,8 +94,8 @@ build_id_to_debug_bfd_1 (const std::string &link, size_t build_id_len,
if (filename == NULL)
{
if (separate_debug_file_debug)
- fprintf_unfiltered (gdb_stdlog,
- _(" no, unable to compute real path\n"));
+ gdb_printf (gdb_stdlog,
+ _(" no, unable to compute real path\n"));
return {};
}
@@ -106,7 +106,7 @@ build_id_to_debug_bfd_1 (const std::string &link, size_t build_id_len,
if (debug_bfd == NULL)
{
if (separate_debug_file_debug)
- fprintf_unfiltered (gdb_stdlog, _(" no, unable to open.\n"));
+ gdb_printf (gdb_stdlog, _(" no, unable to open.\n"));
return {};
}
@@ -114,13 +114,13 @@ build_id_to_debug_bfd_1 (const std::string &link, size_t build_id_len,
if (!build_id_verify (debug_bfd.get(), build_id_len, build_id))
{
if (separate_debug_file_debug)
- fprintf_unfiltered (gdb_stdlog, _(" no, build-id does not match.\n"));
+ gdb_printf (gdb_stdlog, _(" no, build-id does not match.\n"));
return {};
}
if (separate_debug_file_debug)
- fprintf_unfiltered (gdb_stdlog, _(" yes!\n"));
+ gdb_printf (gdb_stdlog, _(" yes!\n"));
return debug_bfd;
}
@@ -210,9 +210,9 @@ find_separate_debug_file_by_buildid (struct objfile *objfile)
if (build_id != NULL)
{
if (separate_debug_file_debug)
- fprintf_unfiltered (gdb_stdlog,
- _("\nLooking for separate debug info (build-id) for "
- "%s\n"), objfile_name (objfile));
+ gdb_printf (gdb_stdlog,
+ _("\nLooking for separate debug info (build-id) for "
+ "%s\n"), objfile_name (objfile));
gdb_bfd_ref_ptr abfd (build_id_to_debug_bfd (build_id->size,
build_id->data));
diff --git a/gdb/buildsym-legacy.c b/gdb/buildsym-legacy.c
index 8f00902f490..490eef965d0 100644
--- a/gdb/buildsym-legacy.c
+++ b/gdb/buildsym-legacy.c
@@ -21,7 +21,7 @@
#include "symtab.h"
/* The work-in-progress of the compunit we are building.
- This is created first, before any subfiles by start_symtab. */
+ This is created first, before any subfiles by start_compunit_symtab. */
static struct buildsym_compunit *buildsym_compunit;
@@ -79,33 +79,6 @@ get_last_source_start_addr ()
/* See buildsym.h. */
-struct using_direct **
-get_local_using_directives ()
-{
- gdb_assert (buildsym_compunit != nullptr);
- return buildsym_compunit->get_local_using_directives ();
-}
-
-/* See buildsym.h. */
-
-void
-set_local_using_directives (struct using_direct *new_local)
-{
- gdb_assert (buildsym_compunit != nullptr);
- buildsym_compunit->set_local_using_directives (new_local);
-}
-
-/* See buildsym.h. */
-
-struct using_direct **
-get_global_using_directives ()
-{
- gdb_assert (buildsym_compunit != nullptr);
- return buildsym_compunit->get_global_using_directives ();
-}
-
-/* See buildsym.h. */
-
bool
outermost_context_p ()
{
@@ -115,15 +88,6 @@ outermost_context_p ()
/* See buildsym.h. */
-struct context_stack *
-get_current_context_stack ()
-{
- gdb_assert (buildsym_compunit != nullptr);
- return buildsym_compunit->get_current_context_stack ();
-}
-
-/* See buildsym.h. */
-
int
get_context_stack_depth ()
{
@@ -207,11 +171,11 @@ free_buildsym_compunit (void)
}
struct compunit_symtab *
-end_symtab (CORE_ADDR end_addr, int section)
+end_compunit_symtab (CORE_ADDR end_addr, int section)
{
gdb_assert (buildsym_compunit != nullptr);
struct compunit_symtab *result
- = buildsym_compunit->end_symtab (end_addr, section);
+ = buildsym_compunit->end_compunit_symtab (end_addr, section);
free_buildsym_compunit ();
return result;
}
@@ -241,26 +205,18 @@ finish_block (struct symbol *symbol, struct pending_block *old_blocks,
}
void
-record_block_range (struct block *block, CORE_ADDR start,
- CORE_ADDR end_inclusive)
-{
- gdb_assert (buildsym_compunit != nullptr);
- buildsym_compunit->record_block_range (block, start, end_inclusive);
-}
-
-void
record_line (struct subfile *subfile, int line, CORE_ADDR pc)
{
gdb_assert (buildsym_compunit != nullptr);
/* Assume every line entry is a statement start, that is a good place to
put a breakpoint for that line number. */
- buildsym_compunit->record_line (subfile, line, pc, true);
+ buildsym_compunit->record_line (subfile, line, pc, LEF_IS_STMT);
}
-/* Start a new symtab for a new source file in OBJFILE. Called, for example,
- when a stabs symbol of type N_SO is seen, or when a DWARF
- TAG_compile_unit DIE is seen. It indicates the start of data for
- one original source file.
+/* Start a new compunit_symtab for a new source file in OBJFILE. Called, for
+ example, when a stabs symbol of type N_SO is seen, or when a DWARF
+ DW_TAG_compile_unit DIE is seen. It indicates the start of data for one
+ original source file.
NAME is the name of the file (cannot be NULL). COMP_DIR is the
directory in which the file was compiled (or NULL if not known).
@@ -270,8 +226,9 @@ record_line (struct subfile *subfile, int line, CORE_ADDR pc)
the filename. */
struct compunit_symtab *
-start_symtab (struct objfile *objfile, const char *name, const char *comp_dir,
- CORE_ADDR start_addr, enum language language)
+start_compunit_symtab (struct objfile *objfile, const char *name,
+ const char *comp_dir, CORE_ADDR start_addr,
+ enum language language)
{
/* These should have been reset either by successful completion of building
a symtab, or by the scoped_free_pendings destructor. */
@@ -283,51 +240,6 @@ start_symtab (struct objfile *objfile, const char *name, const char *comp_dir,
return buildsym_compunit->get_compunit_symtab ();
}
-/* Restart compilation for a symtab.
- CUST is the result of end_expandable_symtab.
- NAME, START_ADDR are the source file we are resuming with.
-
- This is used when a symtab is built from multiple sources.
- The symtab is first built with start_symtab/end_expandable_symtab
- and then for each additional piece call restart_symtab/augment_*_symtab.
- Note: At the moment there is only augment_type_symtab. */
-
-void
-restart_symtab (struct compunit_symtab *cust,
- const char *name, CORE_ADDR start_addr)
-{
- /* These should have been reset either by successful completion of building
- a symtab, or by the scoped_free_pendings destructor. */
- gdb_assert (buildsym_compunit == nullptr);
-
- buildsym_compunit
- = new struct buildsym_compunit (COMPUNIT_OBJFILE (cust),
- name,
- COMPUNIT_DIRNAME (cust),
- compunit_language (cust),
- start_addr,
- cust);
-}
-
-/* See buildsym.h. */
-
-struct compunit_symtab *
-buildsym_compunit_symtab (void)
-{
- gdb_assert (buildsym_compunit != NULL);
-
- return buildsym_compunit->get_compunit_symtab ();
-}
-
-/* See buildsym.h. */
-
-struct macro_table *
-get_macro_table (void)
-{
- gdb_assert (buildsym_compunit != NULL);
- return buildsym_compunit->get_macro_table ();
-}
-
/* At end of reading syms, or in case of quit, ensure everything
associated with building symtabs is freed.
diff --git a/gdb/buildsym-legacy.h b/gdb/buildsym-legacy.h
index 9393aff4cee..86e1e1c9b2c 100644
--- a/gdb/buildsym-legacy.h
+++ b/gdb/buildsym-legacy.h
@@ -30,20 +30,20 @@
The basic way this module is used is as follows:
scoped_free_pendings free_pending;
- cust = start_symtab (...);
+ cust = start_compunit_symtab (...);
... read debug info ...
- cust = end_symtab (...);
+ cust = end_compunit_symtab (...);
- The compunit symtab pointer ("cust") is returned from both start_symtab
- and end_symtab to simplify the debug info readers.
+ The compunit symtab pointer ("cust") is returned from both
+ start_compunit_symtab and end_compunit_symtab to simplify the debug info readers.
dbxread.c and xcoffread.c use another variation:
scoped_free_pendings free_pending;
- cust = start_symtab (...);
+ cust = start_compunit_symtab (...);
... read debug info ...
- cust = end_symtab (...);
- ... start_symtab + read + end_symtab repeated ...
+ cust = end_compunit_symtab (...);
+ ... start_compunit_symtab + read + end_compunit_symtab repeated ...
*/
class scoped_free_pendings
@@ -62,9 +62,6 @@ extern struct block *finish_block (struct symbol *symbol,
CORE_ADDR start,
CORE_ADDR end);
-extern void record_block_range (struct block *,
- CORE_ADDR start, CORE_ADDR end_inclusive);
-
extern void start_subfile (const char *name);
extern void patch_subfile_names (struct subfile *subfile, const char *name);
@@ -73,7 +70,8 @@ extern void push_subfile ();
extern const char *pop_subfile ();
-extern struct compunit_symtab *end_symtab (CORE_ADDR end_addr, int section);
+extern struct compunit_symtab *end_compunit_symtab (CORE_ADDR end_addr,
+ int section);
extern struct context_stack *push_context (int desc, CORE_ADDR valu);
@@ -81,14 +79,11 @@ extern struct context_stack pop_context ();
extern void record_line (struct subfile *subfile, int line, CORE_ADDR pc);
-extern struct compunit_symtab *start_symtab (struct objfile *objfile,
- const char *name,
- const char *comp_dir,
- CORE_ADDR start_addr,
- enum language language);
-
-extern void restart_symtab (struct compunit_symtab *cust,
- const char *name, CORE_ADDR start_addr);
+extern struct compunit_symtab *start_compunit_symtab (struct objfile *objfile,
+ const char *name,
+ const char *comp_dir,
+ CORE_ADDR start_addr,
+ enum language language);
/* Record the name of the debug format in the current pending symbol
table. FORMAT must be a string with a lifetime at least as long as
@@ -111,50 +106,20 @@ extern void set_last_source_file (const char *name);
extern const char *get_last_source_file (void);
-/* Return the compunit symtab object.
- It is only valid to call this between calls to start_symtab and the
- end_symtab* functions. */
-
-extern struct compunit_symtab *buildsym_compunit_symtab (void);
-
-/* Return the macro table.
- Initialize it if this is the first use.
- It is only valid to call this between calls to start_symtab and the
- end_symtab* functions. */
-
-extern struct macro_table *get_macro_table (void);
-
/* Set the last source start address. Can only be used between
- start_symtab and end_symtab* calls. */
+ start_compunit_symtab and end_compunit_symtab* calls. */
extern void set_last_source_start_addr (CORE_ADDR addr);
/* Get the last source start address. Can only be used between
- start_symtab and end_symtab* calls. */
+ start_compunit_symtab and end_compunit_symtab* calls. */
extern CORE_ADDR get_last_source_start_addr ();
-/* Return the local using directives. */
-
-extern struct using_direct **get_local_using_directives ();
-
-/* Set the list of local using directives. */
-
-extern void set_local_using_directives (struct using_direct *new_local);
-
-/* Return the global using directives. */
-
-extern struct using_direct **get_global_using_directives ();
-
/* True if the context stack is empty. */
extern bool outermost_context_p ();
-/* Return the top of the context stack, or nullptr if there is an
- entry. */
-
-extern struct context_stack *get_current_context_stack ();
-
/* Return the context stack depth. */
extern int get_context_stack_depth ();
diff --git a/gdb/buildsym.c b/gdb/buildsym.c
index 8827ddf1a11..c54e6586ced 100644
--- a/gdb/buildsym.c
+++ b/gdb/buildsym.c
@@ -19,7 +19,8 @@
#include "defs.h"
#include "buildsym-legacy.h"
#include "bfd.h"
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
+#include "gdbsupport/pathstuff.h"
#include "symtab.h"
#include "symfile.h"
#include "objfiles.h"
@@ -49,13 +50,6 @@ struct pending_block
struct block *block;
};
-/* Initial sizes of data structures. These are realloc'd larger if
- needed, and realloc'd down to the size actually used, when
- completed. */
-
-#define INITIAL_LINE_VECTOR_LENGTH 1000
-
-
buildsym_compunit::buildsym_compunit (struct objfile *objfile_,
const char *name,
const char *comp_dir_,
@@ -63,7 +57,7 @@ buildsym_compunit::buildsym_compunit (struct objfile *objfile_,
CORE_ADDR last_addr)
: m_objfile (objfile_),
m_last_source_file (name == nullptr ? nullptr : xstrdup (name)),
- m_comp_dir (comp_dir_ == nullptr ? nullptr : xstrdup (comp_dir_)),
+ m_comp_dir (comp_dir_ == nullptr ? "" : comp_dir_),
m_language (language_),
m_last_source_start_addr (last_addr)
{
@@ -95,9 +89,7 @@ buildsym_compunit::~buildsym_compunit ()
subfile = nextsub)
{
nextsub = subfile->next;
- xfree (subfile->name);
- xfree (subfile->line_vector);
- xfree (subfile);
+ delete subfile;
}
struct pending *next, *next1;
@@ -225,34 +217,35 @@ buildsym_compunit::finish_block_internal
if (symbol)
{
- BLOCK_MULTIDICT (block)
- = mdict_create_linear (&m_objfile->objfile_obstack, *listhead);
+ block->set_multidict
+ (mdict_create_linear (&m_objfile->objfile_obstack, *listhead));
}
else
{
if (expandable)
{
- BLOCK_MULTIDICT (block) = mdict_create_hashed_expandable (m_language);
- mdict_add_pending (BLOCK_MULTIDICT (block), *listhead);
+ block->set_multidict
+ (mdict_create_hashed_expandable (m_language));
+ mdict_add_pending (block->multidict (), *listhead);
}
else
{
- BLOCK_MULTIDICT (block) =
- mdict_create_hashed (&m_objfile->objfile_obstack, *listhead);
+ block->set_multidict
+ (mdict_create_hashed (&m_objfile->objfile_obstack, *listhead));
}
}
- BLOCK_START (block) = start;
- BLOCK_END (block) = end;
+ block->set_start (start);
+ block->set_end (end);
/* Put the block in as the value of the symbol that names it. */
if (symbol)
{
- struct type *ftype = SYMBOL_TYPE (symbol);
+ struct type *ftype = symbol->type ();
struct mdict_iterator miter;
- SYMBOL_BLOCK_VALUE (symbol) = block;
- BLOCK_FUNCTION (block) = symbol;
+ symbol->set_value_block (block);
+ block->set_function (symbol);
if (ftype->num_fields () <= 0)
{
@@ -264,9 +257,9 @@ buildsym_compunit::finish_block_internal
/* Here we want to directly access the dictionary, because
we haven't fully initialized the block yet. */
- ALL_DICT_SYMBOLS (BLOCK_MULTIDICT (block), miter, sym)
+ ALL_DICT_SYMBOLS (block->multidict (), miter, sym)
{
- if (SYMBOL_IS_ARGUMENT (sym))
+ if (sym->is_argument ())
nparams++;
}
if (nparams > 0)
@@ -279,14 +272,14 @@ buildsym_compunit::finish_block_internal
iparams = 0;
/* Here we want to directly access the dictionary, because
we haven't fully initialized the block yet. */
- ALL_DICT_SYMBOLS (BLOCK_MULTIDICT (block), miter, sym)
+ ALL_DICT_SYMBOLS (block->multidict (), miter, sym)
{
if (iparams == nparams)
break;
- if (SYMBOL_IS_ARGUMENT (sym))
+ if (sym->is_argument ())
{
- ftype->field (iparams).set_type (SYMBOL_TYPE (sym));
+ ftype->field (iparams).set_type (sym->type ());
TYPE_FIELD_ARTIFICIAL (ftype, iparams) = 0;
iparams++;
}
@@ -295,9 +288,7 @@ buildsym_compunit::finish_block_internal
}
}
else
- {
- BLOCK_FUNCTION (block) = NULL;
- }
+ block->set_function (nullptr);
if (static_link != NULL)
objfile_register_static_link (m_objfile, block, static_link);
@@ -314,7 +305,7 @@ buildsym_compunit::finish_block_internal
/* Check to be sure that the blocks have an end address that is
greater than starting address. */
- if (BLOCK_END (block) < BLOCK_START (block))
+ if (block->end () < block->start ())
{
if (symbol)
{
@@ -326,11 +317,11 @@ buildsym_compunit::finish_block_internal
{
complaint (_("block end address %s less than block "
"start address %s (patched it)"),
- paddress (gdbarch, BLOCK_END (block)),
- paddress (gdbarch, BLOCK_START (block)));
+ paddress (gdbarch, block->end ()),
+ paddress (gdbarch, block->start ()));
}
/* Better than nothing. */
- BLOCK_END (block) = BLOCK_START (block);
+ block->set_end (block->start ());
}
/* Install this block as the superblock of all blocks made since the
@@ -341,7 +332,7 @@ buildsym_compunit::finish_block_internal
pblock && pblock != old_blocks;
pblock = pblock->next)
{
- if (BLOCK_SUPERBLOCK (pblock->block) == NULL)
+ if (pblock->block->superblock () == NULL)
{
/* Check to be sure the blocks are nested as we receive
them. If the compiler/assembler/linker work, this just
@@ -350,9 +341,9 @@ buildsym_compunit::finish_block_internal
Skip blocks which correspond to a function; they're not
physically nested inside this other blocks, only
lexically nested. */
- if (BLOCK_FUNCTION (pblock->block) == NULL
- && (BLOCK_START (pblock->block) < BLOCK_START (block)
- || BLOCK_END (pblock->block) > BLOCK_END (block)))
+ if (pblock->block->function () == NULL
+ && (pblock->block->start () < block->start ()
+ || pblock->block->end () > block->end ()))
{
if (symbol)
{
@@ -363,17 +354,19 @@ buildsym_compunit::finish_block_internal
{
complaint (_("inner block (%s-%s) not "
"inside outer block (%s-%s)"),
- paddress (gdbarch, BLOCK_START (pblock->block)),
- paddress (gdbarch, BLOCK_END (pblock->block)),
- paddress (gdbarch, BLOCK_START (block)),
- paddress (gdbarch, BLOCK_END (block)));
+ paddress (gdbarch, pblock->block->start ()),
+ paddress (gdbarch, pblock->block->end ()),
+ paddress (gdbarch, block->start ()),
+ paddress (gdbarch, block->end ()));
}
- if (BLOCK_START (pblock->block) < BLOCK_START (block))
- BLOCK_START (pblock->block) = BLOCK_START (block);
- if (BLOCK_END (pblock->block) > BLOCK_END (block))
- BLOCK_END (pblock->block) = BLOCK_END (block);
+
+ if (pblock->block->start () < block->start ())
+ pblock->block->set_start (block->start ());
+
+ if (pblock->block->end () > block->end ())
+ pblock->block->set_end (block->end ());
}
- BLOCK_SUPERBLOCK (pblock->block) = block;
+ pblock->block->set_superblock (block);
}
opblock = pblock;
}
@@ -421,8 +414,8 @@ buildsym_compunit::record_block_range (struct block *block,
become interesting. Note that even if this block doesn't have
any "interesting" ranges, some later block might, so we still
need to record this block in the addrmap. */
- if (start != BLOCK_START (block)
- || end_inclusive + 1 != BLOCK_END (block))
+ if (start != block->start ()
+ || end_inclusive + 1 != block->end ())
m_pending_addrmap_interesting = true;
if (m_pending_addrmap == nullptr)
@@ -455,21 +448,19 @@ buildsym_compunit::make_blockvector ()
each block into the list after its subblocks in order to make
sure this is true. */
- BLOCKVECTOR_NBLOCKS (blockvector) = i;
+ blockvector->set_num_blocks (i);
for (next = m_pending_blocks; next; next = next->next)
- {
- BLOCKVECTOR_BLOCK (blockvector, --i) = next->block;
- }
+ blockvector->set_block (--i, next->block);
free_pending_blocks ();
/* If we needed an address map for this symtab, record it in the
blockvector. */
if (m_pending_addrmap != nullptr && m_pending_addrmap_interesting)
- BLOCKVECTOR_MAP (blockvector)
- = addrmap_create_fixed (m_pending_addrmap, &m_objfile->objfile_obstack);
+ blockvector->set_map
+ (addrmap_create_fixed (m_pending_addrmap, &m_objfile->objfile_obstack));
else
- BLOCKVECTOR_MAP (blockvector) = 0;
+ blockvector->set_map (nullptr);
/* Some compilers output blocks in the wrong order, but we depend on
their being in the right order so we can binary search. Check the
@@ -477,15 +468,15 @@ buildsym_compunit::make_blockvector ()
Note: Remember that the first two blocks are the global and static
blocks. We could special case that fact and begin checking at block 2.
To avoid making that assumption we do not. */
- if (BLOCKVECTOR_NBLOCKS (blockvector) > 1)
+ if (blockvector->num_blocks () > 1)
{
- for (i = 1; i < BLOCKVECTOR_NBLOCKS (blockvector); i++)
+ for (i = 1; i < blockvector->num_blocks (); i++)
{
- if (BLOCK_START (BLOCKVECTOR_BLOCK (blockvector, i - 1))
- > BLOCK_START (BLOCKVECTOR_BLOCK (blockvector, i)))
+ if (blockvector->block (i - 1)->start ()
+ > blockvector->block (i)->start ())
{
CORE_ADDR start
- = BLOCK_START (BLOCKVECTOR_BLOCK (blockvector, i));
+ = blockvector->block (i)->start ();
complaint (_("block at %s out of order"),
hex_string ((LONGEST) start));
@@ -503,53 +494,39 @@ buildsym_compunit::make_blockvector ()
void
buildsym_compunit::start_subfile (const char *name)
{
- const char *subfile_dirname;
- struct subfile *subfile;
-
- subfile_dirname = m_comp_dir.get ();
-
/* See if this subfile is already registered. */
- for (subfile = m_subfiles; subfile; subfile = subfile->next)
+ for (subfile *subfile = m_subfiles; subfile; subfile = subfile->next)
{
- char *subfile_name;
+ std::string subfile_name_holder;
+ const char *subfile_name;
/* If NAME is an absolute path, and this subfile is not, then
attempt to create an absolute path to compare. */
if (IS_ABSOLUTE_PATH (name)
&& !IS_ABSOLUTE_PATH (subfile->name)
- && subfile_dirname != NULL)
- subfile_name = concat (subfile_dirname, SLASH_STRING,
- subfile->name, (char *) NULL);
+ && !m_comp_dir.empty ())
+ {
+ subfile_name_holder = path_join (m_comp_dir.c_str (),
+ subfile->name.c_str ());
+ subfile_name = subfile_name_holder.c_str ();
+ }
else
- subfile_name = subfile->name;
+ subfile_name = subfile->name.c_str ();
if (FILENAME_CMP (subfile_name, name) == 0)
{
m_current_subfile = subfile;
- if (subfile_name != subfile->name)
- xfree (subfile_name);
return;
}
- if (subfile_name != subfile->name)
- xfree (subfile_name);
}
/* This subfile is not known. Add an entry for it. */
- subfile = XNEW (struct subfile);
- memset (subfile, 0, sizeof (struct subfile));
- subfile->buildsym_compunit = this;
-
- subfile->next = m_subfiles;
- m_subfiles = subfile;
-
- m_current_subfile = subfile;
-
- subfile->name = xstrdup (name);
+ subfile_up subfile (new struct subfile);
+ subfile->name = name;
- /* Initialize line-number recording for this subfile. */
- subfile->line_vector = NULL;
+ m_current_subfile = subfile.get ();
/* Default the source language to whatever can be deduced from the
filename. If nothing can be deduced (such as for a C/C++ include
@@ -562,22 +539,19 @@ buildsym_compunit::start_subfile (const char *name)
until after all the symbols have been processed for a given
source file. */
- subfile->language = deduce_language_from_filename (subfile->name);
- if (subfile->language == language_unknown
- && subfile->next != NULL)
- {
- subfile->language = subfile->next->language;
- }
+ subfile->language = deduce_language_from_filename (subfile->name.c_str ());
+ if (subfile->language == language_unknown && m_subfiles != nullptr)
+ subfile->language = m_subfiles->language;
/* If the filename of this subfile ends in .C, then change the
language of any pending subfiles from C to C++. We also accept
any other C++ suffixes accepted by deduce_language_from_filename. */
/* Likewise for f2c. */
- if (subfile->name)
+ if (!subfile->name.empty ())
{
struct subfile *s;
- enum language sublang = deduce_language_from_filename (subfile->name);
+ language sublang = deduce_language_from_filename (subfile->name.c_str ());
if (sublang == language_cplus || sublang == language_fortran)
for (s = m_subfiles; s != NULL; s = s->next)
@@ -587,12 +561,14 @@ buildsym_compunit::start_subfile (const char *name)
/* And patch up this file if necessary. */
if (subfile->language == language_c
- && subfile->next != NULL
- && (subfile->next->language == language_cplus
- || subfile->next->language == language_fortran))
- {
- subfile->language = subfile->next->language;
- }
+ && m_subfiles != nullptr
+ && (m_subfiles->language == language_cplus
+ || m_subfiles->language == language_fortran))
+ subfile->language = m_subfiles->language;
+
+ /* Link this subfile at the front of the subfile list. */
+ subfile->next = m_subfiles;
+ m_subfiles = subfile.release ();
}
/* For stabs readers, the first N_SO symbol is assumed to be the
@@ -612,12 +588,12 @@ buildsym_compunit::patch_subfile_names (struct subfile *subfile,
const char *name)
{
if (subfile != NULL
- && m_comp_dir == NULL
- && subfile->name != NULL
- && IS_DIR_SEPARATOR (subfile->name[strlen (subfile->name) - 1]))
+ && m_comp_dir.empty ()
+ && !subfile->name.empty ()
+ && IS_DIR_SEPARATOR (subfile->name.back ()))
{
- m_comp_dir.reset (subfile->name);
- subfile->name = xstrdup (name);
+ m_comp_dir = std::move (subfile->name);
+ subfile->name = name;
set_last_source_file (name);
/* Default the source language to whatever can be deduced from
@@ -631,7 +607,8 @@ buildsym_compunit::patch_subfile_names (struct subfile *subfile,
symbols, since symtabs aren't allocated until after all the
symbols have been processed for a given source file. */
- subfile->language = deduce_language_from_filename (subfile->name);
+ subfile->language
+ = deduce_language_from_filename (subfile->name.c_str ());
if (subfile->language == language_unknown
&& subfile->next != NULL)
{
@@ -649,8 +626,8 @@ void
buildsym_compunit::push_subfile ()
{
gdb_assert (m_current_subfile != NULL);
- gdb_assert (m_current_subfile->name != NULL);
- m_subfile_stack.push_back (m_current_subfile->name);
+ gdb_assert (!m_current_subfile->name.empty ());
+ m_subfile_stack.push_back (m_current_subfile->name.c_str ());
}
const char *
@@ -667,30 +644,9 @@ buildsym_compunit::pop_subfile ()
void
buildsym_compunit::record_line (struct subfile *subfile, int line,
- CORE_ADDR pc, bool is_stmt)
+ CORE_ADDR pc, linetable_entry_flags flags)
{
- struct linetable_entry *e;
-
- /* Make sure line vector exists and is big enough. */
- if (!subfile->line_vector)
- {
- subfile->line_vector_length = INITIAL_LINE_VECTOR_LENGTH;
- subfile->line_vector = (struct linetable *)
- xmalloc (sizeof (struct linetable)
- + subfile->line_vector_length * sizeof (struct linetable_entry));
- subfile->line_vector->nitems = 0;
- m_have_line_numbers = true;
- }
-
- if (subfile->line_vector->nitems >= subfile->line_vector_length)
- {
- subfile->line_vector_length *= 2;
- subfile->line_vector = (struct linetable *)
- xrealloc ((char *) subfile->line_vector,
- (sizeof (struct linetable)
- + (subfile->line_vector_length
- * sizeof (struct linetable_entry))));
- }
+ m_have_line_numbers = true;
/* Normally, we treat lines as unsorted. But the end of sequence
marker is special. We sort line markers at the same PC by line
@@ -707,28 +663,34 @@ buildsym_compunit::record_line (struct subfile *subfile, int line,
anyway. */
if (line == 0)
{
- struct linetable_entry *last = nullptr;
- while (subfile->line_vector->nitems > 0)
+ gdb::optional<int> last_line;
+
+ while (!subfile->line_vector_entries.empty ())
{
- last = subfile->line_vector->item + subfile->line_vector->nitems - 1;
+ linetable_entry *last = &subfile->line_vector_entries.back ();
+ last_line = last->line;
+
if (last->pc != pc)
break;
- subfile->line_vector->nitems--;
+
+ subfile->line_vector_entries.pop_back ();
}
/* Ignore an end-of-sequence marker marking an empty sequence. */
- if (last == nullptr || last->line == 0)
+ if (!last_line.has_value () || *last_line == 0)
return;
}
- e = subfile->line_vector->item + subfile->line_vector->nitems++;
- e->line = line;
- e->is_stmt = is_stmt ? 1 : 0;
- e->pc = pc;
+ subfile->line_vector_entries.emplace_back ();
+ linetable_entry &e = subfile->line_vector_entries.back ();
+ e.line = line;
+ e.is_stmt = (flags & LEF_IS_STMT) != 0;
+ e.pc = pc;
+ e.prologue_end = (flags & LEF_PROLOGUE_END) != 0;
}
-/* Subroutine of end_symtab to simplify it. Look for a subfile that
+/* Subroutine of end_compunit_symtab to simplify it. Look for a subfile that
matches the main source file's basename. If there is only one, and
if the main source file doesn't have any symbol or line number
information, then copy this file's symtab and line_vector to the
@@ -749,10 +711,10 @@ buildsym_compunit::watch_main_source_file_lossage ()
/* If the main source file doesn't have any line number or symbol
info, look for an alias in another subfile. */
- if (mainsub->line_vector == NULL
+ if (mainsub->line_vector_entries.empty ()
&& mainsub->symtab == NULL)
{
- const char *mainbase = lbasename (mainsub->name);
+ const char *mainbase = lbasename (mainsub->name.c_str ());
int nr_matches = 0;
struct subfile *prevsub;
struct subfile *mainsub_alias = NULL;
@@ -765,7 +727,7 @@ buildsym_compunit::watch_main_source_file_lossage ()
{
if (subfile == mainsub)
continue;
- if (filename_cmp (lbasename (subfile->name), mainbase) == 0)
+ if (filename_cmp (lbasename (subfile->name.c_str ()), mainbase) == 0)
{
++nr_matches;
mainsub_alias = subfile;
@@ -782,27 +744,28 @@ buildsym_compunit::watch_main_source_file_lossage ()
Copy its line_vector and symtab to the main subfile
and then discard it. */
- mainsub->line_vector = mainsub_alias->line_vector;
- mainsub->line_vector_length = mainsub_alias->line_vector_length;
+ mainsub->line_vector_entries
+ = std::move (mainsub_alias->line_vector_entries);
mainsub->symtab = mainsub_alias->symtab;
if (prev_mainsub_alias == NULL)
m_subfiles = mainsub_alias->next;
else
prev_mainsub_alias->next = mainsub_alias->next;
- xfree (mainsub_alias->name);
- xfree (mainsub_alias);
+
+ delete mainsub_alias;
}
}
}
-/* Implementation of the first part of end_symtab. It allows modifying
- STATIC_BLOCK before it gets finalized by end_symtab_from_static_block.
- If the returned value is NULL there is no blockvector created for
- this symtab (you still must call end_symtab_from_static_block).
+/* Implementation of the first part of end_compunit_symtab. It allows modifying
+ STATIC_BLOCK before it gets finalized by
+ end_compunit_symtab_from_static_block. If the returned value is NULL there
+ is no blockvector created for this symtab (you still must call
+ end_compunit_symtab_from_static_block).
- END_ADDR is the same as for end_symtab: the address of the end of the
- file's text.
+ END_ADDR is the same as for end_compunit_symtab: the address of the end of
+ the file's text.
If EXPANDABLE is non-zero the STATIC_BLOCK dictionary is made
expandable.
@@ -811,8 +774,9 @@ buildsym_compunit::watch_main_source_file_lossage ()
not contain any symbols. */
struct block *
-buildsym_compunit::end_symtab_get_static_block (CORE_ADDR end_addr,
- int expandable, int required)
+buildsym_compunit::end_compunit_symtab_get_static_block (CORE_ADDR end_addr,
+ int expandable,
+ int required)
{
/* Finish the lexical context of the last function in the file; pop
the context stack. */
@@ -832,7 +796,7 @@ buildsym_compunit::end_symtab_get_static_block (CORE_ADDR end_addr,
same. FIXME: Find out why it is happening. This is not
believed to happen in most cases (even for coffread.c);
it used to be an abort(). */
- complaint (_("Context stack not empty in end_symtab"));
+ complaint (_("Context stack not empty in end_compunit_symtab"));
m_context_stack.clear ();
}
}
@@ -855,7 +819,7 @@ buildsym_compunit::end_symtab_get_static_block (CORE_ADDR end_addr,
std::stable_sort (barray.begin (), barray.end (),
[] (const block *a, const block *b)
{
- return BLOCK_START (a) > BLOCK_START (b);
+ return a->start () > b->start ();
});
int i = 0;
@@ -896,13 +860,14 @@ buildsym_compunit::end_symtab_get_static_block (CORE_ADDR end_addr,
}
}
-/* Subroutine of end_symtab_from_static_block to simplify it.
+/* Subroutine of end_compunit_symtab_from_static_block to simplify it.
Handle the "have blockvector" case.
- See end_symtab_from_static_block for a description of the arguments. */
+ See end_compunit_symtab_from_static_block for a description of the
+ arguments. */
struct compunit_symtab *
-buildsym_compunit::end_symtab_with_blockvector (struct block *static_block,
- int section, int expandable)
+buildsym_compunit::end_compunit_symtab_with_blockvector
+ (struct block *static_block, int section, int expandable)
{
struct compunit_symtab *cu = m_compunit_symtab;
struct blockvector *blockvector;
@@ -912,7 +877,7 @@ buildsym_compunit::end_symtab_with_blockvector (struct block *static_block,
gdb_assert (static_block != NULL);
gdb_assert (m_subfiles != NULL);
- end_addr = BLOCK_END (static_block);
+ end_addr = static_block->end ();
/* Create the GLOBAL_BLOCK and build the blockvector. */
finish_block_internal (NULL, get_global_symbols (), NULL, NULL,
@@ -937,13 +902,8 @@ buildsym_compunit::end_symtab_with_blockvector (struct block *static_block,
subfile != NULL;
subfile = subfile->next)
{
- int linetablesize = 0;
-
- if (subfile->line_vector)
+ if (!subfile->line_vector_entries.empty ())
{
- linetablesize = sizeof (struct linetable) +
- subfile->line_vector->nitems * sizeof (struct linetable_entry);
-
const auto lte_is_less_than
= [] (const linetable_entry &ln1,
const linetable_entry &ln2) -> bool
@@ -961,31 +921,36 @@ buildsym_compunit::end_symtab_with_blockvector (struct block *static_block,
address, as this maintains the inline function caller/callee
relationships, this is why std::stable_sort is used. */
if (m_objfile->flags & OBJF_REORDERED)
- std::stable_sort (subfile->line_vector->item,
- subfile->line_vector->item
- + subfile->line_vector->nitems,
+ std::stable_sort (subfile->line_vector_entries.begin (),
+ subfile->line_vector_entries.end (),
lte_is_less_than);
}
/* Allocate a symbol table if necessary. */
if (subfile->symtab == NULL)
- subfile->symtab = allocate_symtab (cu, subfile->name);
+ subfile->symtab = allocate_symtab (cu, subfile->name.c_str ());
+
struct symtab *symtab = subfile->symtab;
/* Fill in its components. */
- if (subfile->line_vector)
+ if (!subfile->line_vector_entries.empty ())
{
- /* Reallocate the line table on the symbol obstack. */
- SYMTAB_LINETABLE (symtab) = (struct linetable *)
- obstack_alloc (&m_objfile->objfile_obstack, linetablesize);
- memcpy (SYMTAB_LINETABLE (symtab), subfile->line_vector,
- linetablesize);
+ /* Reallocate the line table on the objfile obstack. */
+ size_t n_entries = subfile->line_vector_entries.size ();
+ size_t entry_array_size = n_entries * sizeof (struct linetable_entry);
+ int linetablesize = sizeof (struct linetable) + entry_array_size;
+
+ symtab->set_linetable
+ (XOBNEWVAR (&m_objfile->objfile_obstack, struct linetable,
+ linetablesize));
+
+ symtab->linetable ()->nitems = n_entries;
+ memcpy (symtab->linetable ()->item,
+ subfile->line_vector_entries.data (), entry_array_size);
}
else
- {
- SYMTAB_LINETABLE (symtab) = NULL;
- }
+ symtab->set_linetable (nullptr);
/* Use whatever language we have been using for this
subfile, not the one that was deduced in allocate_symtab
@@ -993,84 +958,63 @@ buildsym_compunit::end_symtab_with_blockvector (struct block *static_block,
we created the subfile, and we may have altered our
opinion of what language it is from things we found in
the symbols. */
- symtab->language = subfile->language;
+ symtab->set_language (subfile->language);
}
- /* Make sure the symtab of main_subfile is the first in its list. */
- {
- struct symtab *main_symtab, *prev_symtab;
-
- main_symtab = m_main_subfile->symtab;
- prev_symtab = NULL;
- for (symtab *symtab : compunit_filetabs (cu))
- {
- if (symtab == main_symtab)
- {
- if (prev_symtab != NULL)
- {
- prev_symtab->next = main_symtab->next;
- main_symtab->next = COMPUNIT_FILETABS (cu);
- COMPUNIT_FILETABS (cu) = main_symtab;
- }
- break;
- }
- prev_symtab = symtab;
- }
- gdb_assert (main_symtab == COMPUNIT_FILETABS (cu));
- }
+ /* Make sure the filetab of main_subfile is the primary filetab of the CU. */
+ cu->set_primary_filetab (m_main_subfile->symtab);
/* Fill out the compunit symtab. */
- if (m_comp_dir != NULL)
+ if (!m_comp_dir.empty ())
{
/* Reallocate the dirname on the symbol obstack. */
- const char *comp_dir = m_comp_dir.get ();
- COMPUNIT_DIRNAME (cu) = obstack_strdup (&m_objfile->objfile_obstack,
- comp_dir);
+ cu->set_dirname (obstack_strdup (&m_objfile->objfile_obstack,
+ m_comp_dir.c_str ()));
}
/* Save the debug format string (if any) in the symtab. */
- COMPUNIT_DEBUGFORMAT (cu) = m_debugformat;
+ cu->set_debugformat (m_debugformat);
/* Similarly for the producer. */
- COMPUNIT_PRODUCER (cu) = m_producer;
+ cu->set_producer (m_producer);
- COMPUNIT_BLOCKVECTOR (cu) = blockvector;
+ cu->set_blockvector (blockvector);
{
- struct block *b = BLOCKVECTOR_BLOCK (blockvector, GLOBAL_BLOCK);
+ struct block *b = blockvector->global_block ();
set_block_compunit_symtab (b, cu);
}
- COMPUNIT_BLOCK_LINE_SECTION (cu) = section;
+ cu->set_block_line_section (section);
- COMPUNIT_MACRO_TABLE (cu) = release_macros ();
+ cu->set_macro_table (release_macros ());
/* Default any symbols without a specified symtab to the primary symtab. */
{
int block_i;
/* The main source file's symtab. */
- struct symtab *symtab = COMPUNIT_FILETABS (cu);
+ struct symtab *symtab = cu->primary_filetab ();
- for (block_i = 0; block_i < BLOCKVECTOR_NBLOCKS (blockvector); block_i++)
+ for (block_i = 0; block_i < blockvector->num_blocks (); block_i++)
{
- struct block *block = BLOCKVECTOR_BLOCK (blockvector, block_i);
+ struct block *block = blockvector->block (block_i);
struct symbol *sym;
struct mdict_iterator miter;
/* Inlined functions may have symbols not in the global or
static symbol lists. */
- if (BLOCK_FUNCTION (block) != NULL)
- if (symbol_symtab (BLOCK_FUNCTION (block)) == NULL)
- symbol_set_symtab (BLOCK_FUNCTION (block), symtab);
+ if (block->function () != nullptr
+ && block->function ()->symtab () == nullptr)
+ block->function ()->set_symtab (symtab);
/* Note that we only want to fix up symbols from the local
blocks, not blocks coming from included symtabs. That is why
we use ALL_DICT_SYMBOLS here and not ALL_BLOCK_SYMBOLS. */
- ALL_DICT_SYMBOLS (BLOCK_MULTIDICT (block), miter, sym)
- if (symbol_symtab (sym) == NULL)
- symbol_set_symtab (sym, symtab);
+ ALL_DICT_SYMBOLS (block->multidict (), miter, sym)
+ if (sym->symtab () == NULL)
+ sym->set_symtab (symtab);
}
}
@@ -1079,18 +1023,18 @@ buildsym_compunit::end_symtab_with_blockvector (struct block *static_block,
return cu;
}
-/* Implementation of the second part of end_symtab. Pass STATIC_BLOCK
- as value returned by end_symtab_get_static_block.
+/* Implementation of the second part of end_compunit_symtab. Pass STATIC_BLOCK
+ as value returned by end_compunit_symtab_get_static_block.
- SECTION is the same as for end_symtab: the section number
+ SECTION is the same as for end_compunit_symtab: the section number
(in objfile->section_offsets) of the blockvector and linetable.
If EXPANDABLE is non-zero the GLOBAL_BLOCK dictionary is made
expandable. */
struct compunit_symtab *
-buildsym_compunit::end_symtab_from_static_block (struct block *static_block,
- int section, int expandable)
+buildsym_compunit::end_compunit_symtab_from_static_block
+ (struct block *static_block, int section, int expandable)
{
struct compunit_symtab *cu;
@@ -1108,7 +1052,7 @@ buildsym_compunit::end_symtab_from_static_block (struct block *static_block,
cu = NULL;
}
else
- cu = end_symtab_with_blockvector (static_block, section, expandable);
+ cu = end_compunit_symtab_with_blockvector (static_block, section, expandable);
return cu;
}
@@ -1122,7 +1066,7 @@ buildsym_compunit::end_symtab_from_static_block (struct block *static_block,
the section number (in objfile->section_offsets) of the blockvector
and linetable.
- Note that it is possible for end_symtab() to return NULL. In
+ Note that it is possible for end_compunit_symtab() to return NULL. In
particular, for the DWARF case at least, it will return NULL when
it finds a compilation unit that has exactly one DIE, a
TAG_compile_unit DIE. This can happen when we link in an object
@@ -1131,27 +1075,28 @@ buildsym_compunit::end_symtab_from_static_block (struct block *static_block,
never know about this empty file (FIXME).
If you need to modify STATIC_BLOCK before it is finalized you should
- call end_symtab_get_static_block and end_symtab_from_static_block
- yourself. */
+ call end_compunit_symtab_get_static_block and
+ end_compunit_symtab_from_static_block yourself. */
struct compunit_symtab *
-buildsym_compunit::end_symtab (CORE_ADDR end_addr, int section)
+buildsym_compunit::end_compunit_symtab (CORE_ADDR end_addr, int section)
{
struct block *static_block;
- static_block = end_symtab_get_static_block (end_addr, 0, 0);
- return end_symtab_from_static_block (static_block, section, 0);
+ static_block = end_compunit_symtab_get_static_block (end_addr, 0, 0);
+ return end_compunit_symtab_from_static_block (static_block, section, 0);
}
-/* Same as end_symtab except create a symtab that can be later added to. */
+/* Same as end_compunit_symtab except create a symtab that can be later added
+ to. */
struct compunit_symtab *
buildsym_compunit::end_expandable_symtab (CORE_ADDR end_addr, int section)
{
struct block *static_block;
- static_block = end_symtab_get_static_block (end_addr, 1, 0);
- return end_symtab_from_static_block (static_block, section, 1);
+ static_block = end_compunit_symtab_get_static_block (end_addr, 1, 0);
+ return end_compunit_symtab_from_static_block (static_block, section, 1);
}
/* Subroutine of augment_type_symtab to simplify it.
@@ -1169,13 +1114,13 @@ set_missing_symtab (struct pending *pending_list,
{
for (i = 0; i < pending->nsyms; ++i)
{
- if (symbol_symtab (pending->symbol[i]) == NULL)
- symbol_set_symtab (pending->symbol[i], COMPUNIT_FILETABS (cu));
+ if (pending->symbol[i]->symtab () == NULL)
+ pending->symbol[i]->set_symtab (cu->primary_filetab ());
}
}
}
-/* Same as end_symtab, but for the case where we're adding more symbols
+/* Same as end_compunit_symtab, but for the case where we're adding more symbols
to an existing symtab that is known to contain only type information.
This is the case for DWARF4 Type Units. */
@@ -1183,7 +1128,7 @@ void
buildsym_compunit::augment_type_symtab ()
{
struct compunit_symtab *cust = m_compunit_symtab;
- const struct blockvector *blockvector = COMPUNIT_BLOCKVECTOR (cust);
+ struct blockvector *blockvector = cust->blockvector ();
if (!m_context_stack.empty ())
complaint (_("Context stack not empty in augment_type_symtab"));
@@ -1196,25 +1141,24 @@ buildsym_compunit::augment_type_symtab ()
if (m_file_symbols != NULL)
{
- struct block *block = BLOCKVECTOR_BLOCK (blockvector, STATIC_BLOCK);
+ struct block *block = blockvector->static_block ();
/* First mark any symbols without a specified symtab as belonging
to the primary symtab. */
set_missing_symtab (m_file_symbols, cust);
- mdict_add_pending (BLOCK_MULTIDICT (block), m_file_symbols);
+ mdict_add_pending (block->multidict (), m_file_symbols);
}
if (m_global_symbols != NULL)
{
- struct block *block = BLOCKVECTOR_BLOCK (blockvector, GLOBAL_BLOCK);
+ struct block *block = blockvector->global_block ();
/* First mark any symbols without a specified symtab as belonging
to the primary symtab. */
set_missing_symtab (m_global_symbols, cust);
- mdict_add_pending (BLOCK_MULTIDICT (block),
- m_global_symbols);
+ mdict_add_pending (block->multidict (), m_global_symbols);
}
}
diff --git a/gdb/buildsym.h b/gdb/buildsym.h
index 4ca8e0528f4..ee75e6fd95d 100644
--- a/gdb/buildsym.h
+++ b/gdb/buildsym.h
@@ -19,7 +19,8 @@
#if !defined (BUILDSYM_H)
#define BUILDSYM_H 1
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
+#include "symtab.h"
struct objfile;
struct symbol;
@@ -45,18 +46,21 @@ struct dynamic_prop;
struct subfile
{
- struct subfile *next;
- /* Space for this is malloc'd. */
- char *name;
- /* Space for this is malloc'd. */
- struct linetable *line_vector;
- int line_vector_length;
- /* The "containing" compunit. */
- struct buildsym_compunit *buildsym_compunit;
- enum language language;
- struct symtab *symtab;
+ subfile () = default;
+
+ /* There's nothing wrong with copying a subfile, but we don't need to, so use
+ this to avoid copying one by mistake. */
+ DISABLE_COPY_AND_ASSIGN (subfile);
+
+ struct subfile *next = nullptr;
+ std::string name;
+ std::vector<linetable_entry> line_vector_entries;
+ enum language language = language_unknown;
+ struct symtab *symtab = nullptr;
};
+using subfile_up = std::unique_ptr<subfile>;
+
/* Record the symbols defined for each context in a list. We don't
create a struct block for the context until we know how long to
make it. */
@@ -110,6 +114,20 @@ struct context_stack
};
+/* Flags associated with a linetable entry. */
+
+enum linetable_entry_flag : unsigned
+{
+ /* Indicates this PC is a good location to place a breakpoint at LINE. */
+ LEF_IS_STMT = 1 << 1,
+
+ /* Indicates this PC is a good location to place a breakpoint at the first
+ instruction past a function prologue. */
+ LEF_PROLOGUE_END = 1 << 2,
+};
+DEF_ENUM_FLAGS_TYPE (enum linetable_entry_flag, linetable_entry_flags);
+
+
/* Buildsym's counterpart to struct compunit_symtab. */
struct buildsym_compunit
@@ -132,7 +150,7 @@ struct buildsym_compunit
CORE_ADDR last_addr, struct compunit_symtab *cust)
: m_objfile (objfile_),
m_last_source_file (name == nullptr ? nullptr : xstrdup (name)),
- m_comp_dir (comp_dir_ == nullptr ? nullptr : xstrdup (comp_dir_)),
+ m_comp_dir (comp_dir_ == nullptr ? "" : comp_dir_),
m_compunit_symtab (cust),
m_language (language_),
m_last_source_start_addr (last_addr)
@@ -188,7 +206,7 @@ struct buildsym_compunit
const char *pop_subfile ();
void record_line (struct subfile *subfile, int line, CORE_ADDR pc,
- bool is_stmt);
+ linetable_entry_flags flags);
struct compunit_symtab *get_compunit_symtab ()
{
@@ -271,13 +289,13 @@ struct buildsym_compunit
struct context_stack pop_context ();
- struct block *end_symtab_get_static_block (CORE_ADDR end_addr,
- int expandable, int required);
+ struct block *end_compunit_symtab_get_static_block
+ (CORE_ADDR end_addr, int expandable, int required);
- struct compunit_symtab *end_symtab_from_static_block
- (struct block *static_block, int section, int expandable);
+ struct compunit_symtab *end_compunit_symtab_from_static_block
+ (struct block *static_block, int section, int expandable);
- struct compunit_symtab *end_symtab (CORE_ADDR end_addr, int section);
+ struct compunit_symtab *end_compunit_symtab (CORE_ADDR end_addr, int section);
struct compunit_symtab *end_expandable_symtab (CORE_ADDR end_addr,
int section);
@@ -299,8 +317,8 @@ private:
void watch_main_source_file_lossage ();
- struct compunit_symtab *end_symtab_with_blockvector
- (struct block *static_block, int section, int expandable);
+ struct compunit_symtab *end_compunit_symtab_with_blockvector
+ (struct block *static_block, int section, int expandable);
/* The objfile we're reading debug info from. */
struct objfile *m_objfile;
@@ -320,7 +338,7 @@ private:
gdb::unique_xmalloc_ptr<char> m_last_source_file;
/* E.g., DW_AT_comp_dir if DWARF. Space for this is malloc'd. */
- gdb::unique_xmalloc_ptr<char> m_comp_dir;
+ std::string m_comp_dir;
/* Space for this is not malloc'd, and is assumed to have at least
the same lifetime as objfile. */
diff --git a/gdb/c-exp.y b/gdb/c-exp.y
index 85499de0640..517ab42b229 100644
--- a/gdb/c-exp.y
+++ b/gdb/c-exp.y
@@ -1075,7 +1075,7 @@ exp : FALSEKEYWORD
block : BLOCKNAME
{
if ($1.sym.symbol)
- $$ = SYMBOL_BLOCK_VALUE ($1.sym.symbol);
+ $$ = $1.sym.symbol->value_block ();
else
error (_("No file or function \"%s\"."),
copy_name ($1.stoken).c_str ());
@@ -1093,16 +1093,16 @@ block : block COLONCOLON name
= lookup_symbol (copy.c_str (), $1,
VAR_DOMAIN, NULL).symbol;
- if (!tem || SYMBOL_CLASS (tem) != LOC_BLOCK)
+ if (!tem || tem->aclass () != LOC_BLOCK)
error (_("No function \"%s\" in specified context."),
copy.c_str ());
- $$ = SYMBOL_BLOCK_VALUE (tem); }
+ $$ = tem->value_block (); }
;
variable: name_not_typename ENTRY
{ struct symbol *sym = $1.sym.symbol;
- if (sym == NULL || !SYMBOL_IS_ARGUMENT (sym)
+ if (sym == NULL || !sym->is_argument ()
|| !symbol_read_needs_frame (sym))
error (_("@entry can be used only for function "
"parameters, not for \"%s\""),
@@ -1232,14 +1232,14 @@ variable: name_not_typename
is important for example for "p
*__errno_location()". */
symbol *alias_target
- = ((msymbol.minsym->type != mst_text_gnu_ifunc
- && msymbol.minsym->type != mst_data_gnu_ifunc)
+ = ((msymbol.minsym->type () != mst_text_gnu_ifunc
+ && msymbol.minsym->type () != mst_data_gnu_ifunc)
? find_function_alias_target (msymbol)
: NULL);
if (alias_target != NULL)
{
block_symbol bsym { alias_target,
- SYMBOL_BLOCK_VALUE (alias_target) };
+ alias_target->value_block () };
pstate->push_new<var_value_operation> (bsym);
}
else
@@ -1780,11 +1780,11 @@ oper: OPERATOR NEW
| OPERATOR OBJC_LBRAC ']'
{ $$ = operator_stoken ("[]"); }
| OPERATOR conversion_type_id
- { string_file buf;
-
+ {
+ string_file buf;
c_print_type ($2, NULL, &buf, -1, 0,
&type_print_raw_options);
- std::string name = std::move (buf.string ());
+ std::string name = buf.release ();
/* This also needs canonicalization. */
gdb::unique_xmalloc_ptr<char> canon
@@ -3067,7 +3067,7 @@ classify_name (struct parser_state *par_state, const struct block *block,
par_state->language ()->name_of_this ()
? &is_a_field_of_this : NULL);
- if (bsym.symbol && SYMBOL_CLASS (bsym.symbol) == LOC_BLOCK)
+ if (bsym.symbol && bsym.symbol->aclass () == LOC_BLOCK)
{
yylval.ssym.sym = bsym;
yylval.ssym.is_a_field_of_this = is_a_field_of_this.type != NULL;
@@ -3090,7 +3090,7 @@ classify_name (struct parser_state *par_state, const struct block *block,
&inner_is_a_field_of_this);
if (bsym.symbol != NULL)
{
- yylval.tsym.type = SYMBOL_TYPE (bsym.symbol);
+ yylval.tsym.type = bsym.symbol->type ();
return TYPENAME;
}
}
@@ -3109,16 +3109,17 @@ classify_name (struct parser_state *par_state, const struct block *block,
symtab = lookup_symtab (copy.c_str ());
if (symtab)
{
- yylval.bval = BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symtab),
- STATIC_BLOCK);
+ yylval.bval
+ = symtab->compunit ()->blockvector ()->static_block ();
+
return FILENAME;
}
}
}
- if (bsym.symbol && SYMBOL_CLASS (bsym.symbol) == LOC_TYPEDEF)
+ if (bsym.symbol && bsym.symbol->aclass () == LOC_TYPEDEF)
{
- yylval.tsym.type = SYMBOL_TYPE (bsym.symbol);
+ yylval.tsym.type = bsym.symbol->type ();
return TYPENAME;
}
@@ -3135,7 +3136,7 @@ classify_name (struct parser_state *par_state, const struct block *block,
sym = lookup_struct_typedef (copy.c_str (),
par_state->expression_context_block, 1);
if (sym)
- yylval.theclass.type = SYMBOL_TYPE (sym);
+ yylval.theclass.type = sym->type ();
return CLASSNAME;
}
}
@@ -3211,7 +3212,7 @@ classify_inner_name (struct parser_state *par_state,
return ERROR;
}
- switch (SYMBOL_CLASS (yylval.ssym.sym.symbol))
+ switch (yylval.ssym.sym.symbol->aclass ())
{
case LOC_BLOCK:
case LOC_LABEL:
@@ -3231,7 +3232,7 @@ classify_inner_name (struct parser_state *par_state,
return ERROR;
case LOC_TYPEDEF:
- yylval.tsym.type = SYMBOL_TYPE (yylval.ssym.sym.symbol);
+ yylval.tsym.type = yylval.ssym.sym.symbol->type ();
return TYPENAME;
default:
diff --git a/gdb/c-lang.c b/gdb/c-lang.c
index 4c9f8a741df..be9ee073f58 100644
--- a/gdb/c-lang.c
+++ b/gdb/c-lang.c
@@ -32,7 +32,7 @@
#include "demangle.h"
#include "cp-abi.h"
#include "cp-support.h"
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
#include <ctype.h>
#include "gdbcore.h"
#include "gdbarch.h"
@@ -167,19 +167,19 @@ language_defn::printchar (int c, struct type *type,
case C_CHAR:
break;
case C_WIDE_CHAR:
- fputc_filtered ('L', stream);
+ gdb_putc ('L', stream);
break;
case C_CHAR_16:
- fputc_filtered ('u', stream);
+ gdb_putc ('u', stream);
break;
case C_CHAR_32:
- fputc_filtered ('U', stream);
+ gdb_putc ('U', stream);
break;
}
- fputc_filtered ('\'', stream);
+ gdb_putc ('\'', stream);
emitchar (c, type, stream, '\'');
- fputc_filtered ('\'', stream);
+ gdb_putc ('\'', stream);
}
/* Print the character string STRING, printing at most LENGTH
@@ -206,13 +206,13 @@ c_printstr (struct ui_file *stream, struct type *type,
case C_STRING:
break;
case C_WIDE_STRING:
- fputs_filtered ("L", stream);
+ gdb_puts ("L", stream);
break;
case C_STRING_16:
- fputs_filtered ("u", stream);
+ gdb_puts ("u", stream);
break;
case C_STRING_32:
- fputs_filtered ("U", stream);
+ gdb_puts ("U", stream);
break;
}
@@ -352,8 +352,8 @@ c_get_string (struct value *value, gdb::unique_xmalloc_ptr<gdb_byte> *buffer,
if (*length > 0)
fetchlimit = UINT_MAX;
- err = read_string (addr, *length, width, fetchlimit,
- byte_order, buffer, length);
+ err = target_read_string (addr, *length, width, fetchlimit,
+ buffer, length);
if (err != 0)
memory_error (TARGET_XFER_E_IO, addr);
}
@@ -410,7 +410,7 @@ convert_ucn (const char *p, const char *limit, const char *dest_charset,
int i;
for (i = 0; i < length && p < limit && ISXDIGIT (*p); ++i, ++p)
- result = (result << 4) + host_hex_value (*p);
+ result = (result << 4) + fromhex (*p);
for (i = 3; i >= 0; --i)
{
@@ -454,7 +454,7 @@ convert_octal (struct type *type, const char *p,
i < 3 && p < limit && ISDIGIT (*p) && *p != '8' && *p != '9';
++i)
{
- value = 8 * value + host_hex_value (*p);
+ value = 8 * value + fromhex (*p);
++p;
}
@@ -476,7 +476,7 @@ convert_hex (struct type *type, const char *p,
while (p < limit && ISXDIGIT (*p))
{
- value = 16 * value + host_hex_value (*p);
+ value = 16 * value + fromhex (*p);
++p;
}
diff --git a/gdb/c-typeprint.c b/gdb/c-typeprint.c
index 71d8797e84c..3425c829e3f 100644
--- a/gdb/c-typeprint.c
+++ b/gdb/c-typeprint.c
@@ -17,7 +17,7 @@
along with this program. If not, see <http://www.gnu.org/licenses/>. */
#include "defs.h"
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
#include "bfd.h" /* Binary File Description. */
#include "symtab.h"
#include "gdbtypes.h"
@@ -91,7 +91,7 @@ print_name_maybe_canonical (const char *name,
find_typedef_for_canonicalize,
(void *) flags);
- fputs_filtered (s != nullptr ? s.get () : name, stream);
+ gdb_puts (s != nullptr ? s.get () : name, stream);
}
@@ -120,9 +120,9 @@ c_print_type_1 (struct type *type,
if (local_name != NULL)
{
c_type_print_modifier (type, stream, 0, 1, language);
- fputs_filtered (local_name, stream);
+ gdb_puts (local_name, stream);
if (varstring != NULL && *varstring != '\0')
- fputs_filtered (" ", stream);
+ gdb_puts (" ", stream);
}
else
{
@@ -138,7 +138,7 @@ c_print_type_1 (struct type *type,
|| code == TYPE_CODE_MEMBERPTR
|| code == TYPE_CODE_METHODPTR
|| TYPE_IS_REFERENCE (type))))
- fputs_filtered (" ", stream);
+ gdb_puts (" ", stream);
need_post_space = (varstring != NULL && strcmp (varstring, "") != 0);
c_type_print_varspec_prefix (type, stream, show, 0, need_post_space,
language, flags, podata);
@@ -205,14 +205,14 @@ c_print_typedef (struct type *type,
struct ui_file *stream)
{
type = check_typedef (type);
- fprintf_filtered (stream, "typedef ");
+ gdb_printf (stream, "typedef ");
type_print (type, "", stream, -1);
- if ((SYMBOL_TYPE (new_symbol))->name () == 0
- || strcmp ((SYMBOL_TYPE (new_symbol))->name (),
+ if ((new_symbol->type ())->name () == 0
+ || strcmp ((new_symbol->type ())->name (),
new_symbol->linkage_name ()) != 0
- || SYMBOL_TYPE (new_symbol)->code () == TYPE_CODE_TYPEDEF)
- fprintf_filtered (stream, " %s", new_symbol->print_name ());
- fprintf_filtered (stream, ";");
+ || new_symbol->type ()->code () == TYPE_CODE_TYPEDEF)
+ gdb_printf (stream, " %s", new_symbol->print_name ());
+ gdb_printf (stream, ";");
}
/* If TYPE is a derived type, then print out derivation information.
@@ -250,22 +250,22 @@ cp_type_print_derivation_info (struct ui_file *stream,
for (i = 0; i < TYPE_N_BASECLASSES (type); i++)
{
- wrap_here (" ");
- fputs_filtered (i == 0 ? ": " : ", ", stream);
- fprintf_filtered (stream, "%s%s ",
- BASETYPE_VIA_PUBLIC (type, i)
- ? "public" : (TYPE_FIELD_PROTECTED (type, i)
- ? "protected" : "private"),
- BASETYPE_VIA_VIRTUAL (type, i) ? " virtual" : "");
+ stream->wrap_here (8);
+ gdb_puts (i == 0 ? ": " : ", ", stream);
+ gdb_printf (stream, "%s%s ",
+ BASETYPE_VIA_PUBLIC (type, i)
+ ? "public" : (TYPE_FIELD_PROTECTED (type, i)
+ ? "protected" : "private"),
+ BASETYPE_VIA_VIRTUAL (type, i) ? " virtual" : "");
name = TYPE_BASECLASS (type, i)->name ();
if (name)
print_name_maybe_canonical (name, flags, stream);
else
- fprintf_filtered (stream, "(null)");
+ gdb_printf (stream, "(null)");
}
if (i > 0)
{
- fputs_filtered (" ", stream);
+ gdb_puts (" ", stream);
}
}
@@ -283,11 +283,11 @@ cp_type_print_method_args (struct type *mtype, const char *prefix,
int varargs = mtype->has_varargs ();
int i;
- fprintf_symbol_filtered (stream, prefix,
- language_cplus, DMGL_ANSI);
- fprintf_symbol_filtered (stream, varstring,
- language_cplus, DMGL_ANSI);
- fputs_filtered ("(", stream);
+ fprintf_symbol (stream, prefix,
+ language_cplus, DMGL_ANSI);
+ fprintf_symbol (stream, varstring,
+ language_cplus, DMGL_ANSI);
+ gdb_puts ("(", stream);
/* Skip the class variable. We keep this here to accommodate older
compilers and debug formats which may not support artificial
@@ -306,20 +306,20 @@ cp_type_print_method_args (struct type *mtype, const char *prefix,
c_print_type (arg.type (), "", stream, 0, 0, flags);
if (i == nargs && varargs)
- fprintf_filtered (stream, ", ...");
+ gdb_printf (stream, ", ...");
else if (i < nargs)
{
- fprintf_filtered (stream, ", ");
- wrap_here (" ");
+ gdb_printf (stream, ", ");
+ stream->wrap_here (8);
}
}
}
else if (varargs)
- fprintf_filtered (stream, "...");
+ gdb_printf (stream, "...");
else if (language == language_cplus)
- fprintf_filtered (stream, "void");
+ gdb_printf (stream, "void");
- fprintf_filtered (stream, ")");
+ gdb_printf (stream, ")");
/* For non-static methods, read qualifiers from the type of
THIS. */
@@ -332,18 +332,18 @@ cp_type_print_method_args (struct type *mtype, const char *prefix,
domain = TYPE_TARGET_TYPE (args[0].type ());
if (TYPE_CONST (domain))
- fprintf_filtered (stream, " const");
+ gdb_printf (stream, " const");
if (TYPE_VOLATILE (domain))
- fprintf_filtered (stream, " volatile");
+ gdb_printf (stream, " volatile");
if (TYPE_RESTRICT (domain))
- fprintf_filtered (stream, (language == language_cplus
- ? " __restrict__"
- : " restrict"));
+ gdb_printf (stream, (language == language_cplus
+ ? " __restrict__"
+ : " restrict"));
if (TYPE_ATOMIC (domain))
- fprintf_filtered (stream, " _Atomic");
+ gdb_printf (stream, " _Atomic");
}
}
@@ -385,7 +385,7 @@ c_type_print_varspec_prefix (struct type *type,
c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type),
stream, show, 1, 1, language, flags,
podata);
- fprintf_filtered (stream, "*");
+ gdb_printf (stream, "*");
c_type_print_modifier (type, stream, 1, need_post_space, language);
break;
@@ -399,14 +399,14 @@ c_type_print_varspec_prefix (struct type *type,
c_type_print_base_1 (TYPE_SELF_TYPE (type),
stream, -1, passed_a_ptr, language, flags,
podata);
- fprintf_filtered (stream, "::*");
+ gdb_printf (stream, "::*");
break;
case TYPE_CODE_METHODPTR:
c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type),
stream, show, 0, 0, language, flags,
podata);
- fprintf_filtered (stream, "(");
+ gdb_printf (stream, "(");
name = TYPE_SELF_TYPE (type)->name ();
if (name)
print_name_maybe_canonical (name, flags, stream);
@@ -414,7 +414,7 @@ c_type_print_varspec_prefix (struct type *type,
c_type_print_base_1 (TYPE_SELF_TYPE (type),
stream, -1, passed_a_ptr, language, flags,
podata);
- fprintf_filtered (stream, "::*");
+ gdb_printf (stream, "::*");
break;
case TYPE_CODE_REF:
@@ -422,7 +422,7 @@ c_type_print_varspec_prefix (struct type *type,
c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type),
stream, show, 1, 0, language, flags,
podata);
- fprintf_filtered (stream, type->code () == TYPE_CODE_REF ? "&" : "&&");
+ gdb_printf (stream, type->code () == TYPE_CODE_REF ? "&" : "&&");
c_type_print_modifier (type, stream, 1, need_post_space, language);
break;
@@ -432,7 +432,7 @@ c_type_print_varspec_prefix (struct type *type,
stream, show, 0, 0, language, flags,
podata);
if (passed_a_ptr)
- fprintf_filtered (stream, "(");
+ gdb_printf (stream, "(");
break;
case TYPE_CODE_ARRAY:
@@ -440,7 +440,7 @@ c_type_print_varspec_prefix (struct type *type,
stream, show, 0, need_post_space,
language, flags, podata);
if (passed_a_ptr)
- fprintf_filtered (stream, "(");
+ gdb_printf (stream, "(");
break;
case TYPE_CODE_TYPEDEF:
@@ -497,34 +497,34 @@ c_type_print_modifier (struct type *type, struct ui_file *stream,
if (TYPE_CONST (type) && !TYPE_IS_REFERENCE (type))
{
if (need_pre_space)
- fprintf_filtered (stream, " ");
- fprintf_filtered (stream, "const");
+ gdb_printf (stream, " ");
+ gdb_printf (stream, "const");
did_print_modifier = 1;
}
if (TYPE_VOLATILE (type))
{
if (did_print_modifier || need_pre_space)
- fprintf_filtered (stream, " ");
- fprintf_filtered (stream, "volatile");
+ gdb_printf (stream, " ");
+ gdb_printf (stream, "volatile");
did_print_modifier = 1;
}
if (TYPE_RESTRICT (type))
{
if (did_print_modifier || need_pre_space)
- fprintf_filtered (stream, " ");
- fprintf_filtered (stream, (language == language_cplus
- ? "__restrict__"
- : "restrict"));
+ gdb_printf (stream, " ");
+ gdb_printf (stream, (language == language_cplus
+ ? "__restrict__"
+ : "restrict"));
did_print_modifier = 1;
}
if (TYPE_ATOMIC (type))
{
if (did_print_modifier || need_pre_space)
- fprintf_filtered (stream, " ");
- fprintf_filtered (stream, "_Atomic");
+ gdb_printf (stream, " ");
+ gdb_printf (stream, "_Atomic");
did_print_modifier = 1;
}
@@ -534,13 +534,13 @@ c_type_print_modifier (struct type *type, struct ui_file *stream,
if (address_space_id)
{
if (did_print_modifier || need_pre_space)
- fprintf_filtered (stream, " ");
- fprintf_filtered (stream, "@%s", address_space_id);
+ gdb_printf (stream, " ");
+ gdb_printf (stream, "@%s", address_space_id);
did_print_modifier = 1;
}
if (did_print_modifier && need_post_space)
- fprintf_filtered (stream, " ");
+ gdb_printf (stream, " ");
}
@@ -561,7 +561,7 @@ c_type_print_args (struct type *type, struct ui_file *stream,
int i;
int printed_any = 0;
- fprintf_filtered (stream, "(");
+ gdb_printf (stream, "(");
for (i = 0; i < type->num_fields (); i++)
{
@@ -572,8 +572,8 @@ c_type_print_args (struct type *type, struct ui_file *stream,
if (printed_any)
{
- fprintf_filtered (stream, ", ");
- wrap_here (" ");
+ gdb_printf (stream, ", ");
+ stream->wrap_here (4);
}
param_type = type->field (i).type ();
@@ -601,16 +601,16 @@ c_type_print_args (struct type *type, struct ui_file *stream,
represents unprototyped (K&R style) C functions. */
if (printed_any && type->has_varargs ())
{
- fprintf_filtered (stream, ", ");
- wrap_here (" ");
- fprintf_filtered (stream, "...");
+ gdb_printf (stream, ", ");
+ stream->wrap_here (4);
+ gdb_printf (stream, "...");
}
}
else if (!printed_any
&& (type->is_prototyped () || language == language_cplus))
- fprintf_filtered (stream, "void");
+ gdb_printf (stream, "void");
- fprintf_filtered (stream, ")");
+ gdb_printf (stream, ")");
}
/* Return true iff the j'th overloading of the i'th method of TYPE
@@ -778,18 +778,18 @@ c_type_print_varspec_suffix (struct type *type,
int is_vector = type->is_vector ();
if (passed_a_ptr)
- fprintf_filtered (stream, ")");
+ gdb_printf (stream, ")");
- fprintf_filtered (stream, (is_vector ?
- " __attribute__ ((vector_size(" : "["));
+ gdb_printf (stream, (is_vector ?
+ " __attribute__ ((vector_size(" : "["));
/* Bounds are not yet resolved, print a bounds placeholder instead. */
if (type->bounds ()->high.kind () == PROP_LOCEXPR
|| type->bounds ()->high.kind () == PROP_LOCLIST)
- fprintf_filtered (stream, "variable length");
+ gdb_printf (stream, "variable length");
else if (get_array_bounds (type, &low_bound, &high_bound))
- fprintf_filtered (stream, "%s",
- plongest (high_bound - low_bound + 1));
- fprintf_filtered (stream, (is_vector ? ")))" : "]"));
+ gdb_printf (stream, "%s",
+ plongest (high_bound - low_bound + 1));
+ gdb_printf (stream, (is_vector ? ")))" : "]"));
c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream,
show, 0, 0, language, flags);
@@ -802,7 +802,7 @@ c_type_print_varspec_suffix (struct type *type,
break;
case TYPE_CODE_METHODPTR:
- fprintf_filtered (stream, ")");
+ gdb_printf (stream, ")");
c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream,
show, 0, 0, language, flags);
break;
@@ -817,7 +817,7 @@ c_type_print_varspec_suffix (struct type *type,
case TYPE_CODE_METHOD:
case TYPE_CODE_FUNC:
if (passed_a_ptr)
- fprintf_filtered (stream, ")");
+ gdb_printf (stream, ")");
if (!demangled_args)
c_type_print_args (type, stream, 0, language, flags);
c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream,
@@ -883,30 +883,30 @@ c_type_print_template_args (const struct type_print_options *flags,
{
struct symbol *sym = TYPE_TEMPLATE_ARGUMENT (type, i);
- if (SYMBOL_CLASS (sym) != LOC_TYPEDEF)
+ if (sym->aclass () != LOC_TYPEDEF)
continue;
if (first)
{
- wrap_here (" ");
- fprintf_filtered (stream, _("[with %s = "), sym->linkage_name ());
+ stream->wrap_here (4);
+ gdb_printf (stream, _("[with %s = "), sym->linkage_name ());
first = 0;
}
else
{
- fputs_filtered (", ", stream);
- wrap_here (" ");
- fprintf_filtered (stream, "%s = ", sym->linkage_name ());
+ gdb_puts (", ", stream);
+ stream->wrap_here (9);
+ gdb_printf (stream, "%s = ", sym->linkage_name ());
}
- c_print_type (SYMBOL_TYPE (sym), "", stream, -1, 0, flags);
+ c_print_type (sym->type (), "", stream, -1, 0, flags);
}
if (!first)
- fputs_filtered (_("] "), stream);
+ gdb_puts (_("] "), stream);
}
-/* Use 'print_spaces_filtered', but take into consideration the
+/* Use 'print_spaces', but take into consideration the
type_print_options FLAGS in order to determine how many whitespaces
will be printed. */
@@ -915,9 +915,9 @@ print_spaces_filtered_with_print_options
(int level, struct ui_file *stream, const struct type_print_options *flags)
{
if (!flags->print_offsets)
- print_spaces_filtered (level, stream);
+ print_spaces (level, stream);
else
- print_spaces_filtered (level + print_offset_data::indentation, stream);
+ print_spaces (level + print_offset_data::indentation, stream);
}
/* Output an access specifier to STREAM, if needed. LAST_ACCESS is the
@@ -935,7 +935,7 @@ output_access_specifier (struct ui_file *stream,
{
last_access = s_protected;
print_spaces_filtered_with_print_options (level + 2, stream, flags);
- fprintf_filtered (stream, "protected:\n");
+ gdb_printf (stream, "protected:\n");
}
}
else if (is_private)
@@ -944,7 +944,7 @@ output_access_specifier (struct ui_file *stream,
{
last_access = s_private;
print_spaces_filtered_with_print_options (level + 2, stream, flags);
- fprintf_filtered (stream, "private:\n");
+ gdb_printf (stream, "private:\n");
}
}
else
@@ -953,7 +953,7 @@ output_access_specifier (struct ui_file *stream,
{
last_access = s_public;
print_spaces_filtered_with_print_options (level + 2, stream, flags);
- fprintf_filtered (stream, "public:\n");
+ gdb_printf (stream, "public:\n");
}
}
@@ -1061,11 +1061,11 @@ c_type_print_base_struct_union (struct type *type, struct ui_file *stream,
c_type_print_modifier (type, stream, 0, 1, language);
if (type->code () == TYPE_CODE_UNION)
- fprintf_filtered (stream, "union ");
+ gdb_printf (stream, "union ");
else if (type->is_declared_class ())
- fprintf_filtered (stream, "class ");
+ gdb_printf (stream, "class ");
else
- fprintf_filtered (stream, "struct ");
+ gdb_printf (stream, "struct ");
/* Print the tag if it exists. The HP aCC compiler emits a
spurious "{unnamed struct}"/"{unnamed union}"/"{unnamed
@@ -1079,7 +1079,7 @@ c_type_print_base_struct_union (struct type *type, struct ui_file *stream,
here. */
print_name_maybe_canonical (type->name (), flags, stream);
if (show > 0)
- fputs_filtered (" ", stream);
+ gdb_puts (" ", stream);
}
if (show < 0)
@@ -1087,7 +1087,7 @@ c_type_print_base_struct_union (struct type *type, struct ui_file *stream,
/* If we just printed a tag name, no need to print anything
else. */
if (type->name () == NULL)
- fprintf_filtered (stream, "{...}");
+ gdb_printf (stream, "{...}");
}
else if (show > 0 || type->name () == NULL)
{
@@ -1117,18 +1117,18 @@ c_type_print_base_struct_union (struct type *type, struct ui_file *stream,
local_flags.local_typedefs->recursively_update (type);
}
- fprintf_filtered (stream, "{\n");
+ gdb_printf (stream, "{\n");
if (type->num_fields () == 0 && TYPE_NFN_FIELDS (type) == 0
&& TYPE_TYPEDEF_FIELD_COUNT (type) == 0)
{
print_spaces_filtered_with_print_options (level + 4, stream, flags);
if (type->is_stub ())
- fprintf_filtered (stream, _("%p[<incomplete type>%p]\n"),
- metadata_style.style ().ptr (), nullptr);
+ gdb_printf (stream, _("%p[<incomplete type>%p]\n"),
+ metadata_style.style ().ptr (), nullptr);
else
- fprintf_filtered (stream, _("%p[<no data fields>%p]\n"),
- metadata_style.style ().ptr (), nullptr);
+ gdb_printf (stream, _("%p[<no data fields>%p]\n"),
+ metadata_style.style ().ptr (), nullptr);
}
/* Start off with no specific section type, so we can print
@@ -1175,9 +1175,9 @@ c_type_print_base_struct_union (struct type *type, struct ui_file *stream,
if (flags->print_offsets)
podata->update (type, i, stream);
- print_spaces_filtered (level + 4, stream);
+ print_spaces (level + 4, stream);
if (is_static)
- fprintf_filtered (stream, "static ");
+ gdb_printf (stream, "static ");
int newshow = show - 1;
@@ -1218,10 +1218,10 @@ c_type_print_base_struct_union (struct type *type, struct ui_file *stream,
unnamed fields. This would lead to misleading
results if the compiler does not put out fields
for such things (I don't know what it does). */
- fprintf_filtered (stream, " : %d",
- TYPE_FIELD_BITSIZE (type, i));
+ gdb_printf (stream, " : %d",
+ TYPE_FIELD_BITSIZE (type, i));
}
- fprintf_filtered (stream, ";\n");
+ gdb_printf (stream, ";\n");
}
/* If there are both fields and methods, put a blank line
@@ -1242,7 +1242,7 @@ c_type_print_base_struct_union (struct type *type, struct ui_file *stream,
real_len++;
}
if (real_len > 0 && section_type != s_none)
- fprintf_filtered (stream, "\n");
+ gdb_printf (stream, "\n");
/* C++: print out the methods. */
for (int i = 0; i < len; i++)
@@ -1278,16 +1278,16 @@ c_type_print_base_struct_union (struct type *type, struct ui_file *stream,
print_spaces_filtered_with_print_options (level + 4, stream,
flags);
if (TYPE_FN_FIELD_VIRTUAL_P (f, j))
- fprintf_filtered (stream, "virtual ");
+ gdb_printf (stream, "virtual ");
else if (TYPE_FN_FIELD_STATIC_P (f, j))
- fprintf_filtered (stream, "static ");
+ gdb_printf (stream, "static ");
if (TYPE_TARGET_TYPE (TYPE_FN_FIELD_TYPE (f, j)) == 0)
{
/* Keep GDB from crashing here. */
- fprintf_filtered (stream,
- _("%p[<undefined type>%p] %s;\n"),
- metadata_style.style ().ptr (), nullptr,
- TYPE_FN_FIELD_PHYSNAME (f, j));
+ gdb_printf (stream,
+ _("%p[<undefined type>%p] %s;\n"),
+ metadata_style.style ().ptr (), nullptr,
+ TYPE_FN_FIELD_PHYSNAME (f, j));
break;
}
else if (!is_constructor /* Constructors don't
@@ -1300,7 +1300,7 @@ c_type_print_base_struct_union (struct type *type, struct ui_file *stream,
(TYPE_TARGET_TYPE (TYPE_FN_FIELD_TYPE (f, j)),
"", stream, -1, 0, language, &local_flags, podata);
- fputs_filtered (" ", stream);
+ gdb_puts (" ", stream);
}
if (TYPE_FN_FIELD_STUB (f, j))
{
@@ -1352,13 +1352,13 @@ c_type_print_base_struct_union (struct type *type, struct ui_file *stream,
int length = p - demangled_no_class;
std::string demangled_no_static (demangled_no_class,
length);
- fputs_filtered (demangled_no_static.c_str (), stream);
+ gdb_puts (demangled_no_static.c_str (), stream);
}
else
- fputs_filtered (demangled_no_class, stream);
+ gdb_puts (demangled_no_class, stream);
}
- fprintf_filtered (stream, ";\n");
+ gdb_printf (stream, ";\n");
}
}
@@ -1370,7 +1370,7 @@ c_type_print_base_struct_union (struct type *type, struct ui_file *stream,
--semi_local_flags.print_nested_type_limit;
if (type->num_fields () != 0 || TYPE_NFN_FIELDS (type) != 0)
- fprintf_filtered (stream, "\n");
+ gdb_printf (stream, "\n");
for (int i = 0; i < TYPE_NESTED_TYPES_COUNT (type); ++i)
{
@@ -1379,7 +1379,7 @@ c_type_print_base_struct_union (struct type *type, struct ui_file *stream,
c_print_type_no_offsets (TYPE_NESTED_TYPES_FIELD_TYPE (type, i),
"", stream, show, level + 4,
language, &semi_local_flags, podata);
- fprintf_filtered (stream, ";\n");
+ gdb_printf (stream, ";\n");
}
}
@@ -1389,7 +1389,7 @@ c_type_print_base_struct_union (struct type *type, struct ui_file *stream,
{
if (type->num_fields () != 0 || TYPE_NFN_FIELDS (type) != 0
|| TYPE_NESTED_TYPES_COUNT (type) != 0)
- fprintf_filtered (stream, "\n");
+ gdb_printf (stream, "\n");
for (int i = 0; i < TYPE_TYPEDEF_FIELD_COUNT (type); i++)
{
@@ -1408,7 +1408,7 @@ c_type_print_base_struct_union (struct type *type, struct ui_file *stream,
}
print_spaces_filtered_with_print_options (level + 4, stream,
flags);
- fprintf_filtered (stream, "typedef ");
+ gdb_printf (stream, "typedef ");
/* We want to print typedefs with substitutions
from the template parameters or globally-known
@@ -1417,7 +1417,7 @@ c_type_print_base_struct_union (struct type *type, struct ui_file *stream,
TYPE_TYPEDEF_FIELD_NAME (type, i),
stream, show - 1, level + 4,
language, &semi_local_flags, podata);
- fprintf_filtered (stream, ";\n");
+ gdb_printf (stream, ";\n");
}
}
@@ -1426,12 +1426,12 @@ c_type_print_base_struct_union (struct type *type, struct ui_file *stream,
if (show > 0)
podata->finish (type, level, stream);
- print_spaces_filtered (print_offset_data::indentation, stream);
+ print_spaces (print_offset_data::indentation, stream);
if (level == 0)
- print_spaces_filtered (2, stream);
+ print_spaces (2, stream);
}
- fprintf_filtered (stream, "%*s}", level, "");
+ gdb_printf (stream, "%*s}", level, "");
}
}
@@ -1488,16 +1488,16 @@ c_type_print_base_1 (struct type *type, struct ui_file *stream,
if (language == language_c || language == language_minimal)
{
if (type->code () == TYPE_CODE_UNION)
- fprintf_filtered (stream, "union ");
+ gdb_printf (stream, "union ");
else if (type->code () == TYPE_CODE_STRUCT)
{
if (type->is_declared_class ())
- fprintf_filtered (stream, "class ");
+ gdb_printf (stream, "class ");
else
- fprintf_filtered (stream, "struct ");
+ gdb_printf (stream, "struct ");
}
else if (type->code () == TYPE_CODE_ENUM)
- fprintf_filtered (stream, "enum ");
+ gdb_printf (stream, "enum ");
}
print_name_maybe_canonical (type->name (), flags, stream);
@@ -1543,9 +1543,9 @@ c_type_print_base_1 (struct type *type, struct ui_file *stream,
case TYPE_CODE_ENUM:
c_type_print_modifier (type, stream, 0, 1, language);
- fprintf_filtered (stream, "enum ");
+ gdb_printf (stream, "enum ");
if (type->is_declared_class ())
- fprintf_filtered (stream, "class ");
+ gdb_printf (stream, "class ");
/* Print the tag name if it exists.
The aCC compiler emits a spurious
"{unnamed struct}"/"{unnamed union}"/"{unnamed enum}"
@@ -1556,16 +1556,16 @@ c_type_print_base_1 (struct type *type, struct ui_file *stream,
{
print_name_maybe_canonical (type->name (), flags, stream);
if (show > 0)
- fputs_filtered (" ", stream);
+ gdb_puts (" ", stream);
}
- wrap_here (" ");
+ stream->wrap_here (4);
if (show < 0)
{
/* If we just printed a tag name, no need to print anything
else. */
if (type->name () == NULL)
- fprintf_filtered (stream, "{...}");
+ gdb_printf (stream, "{...}");
}
else if (show > 0 || type->name () == NULL)
{
@@ -1584,28 +1584,28 @@ c_type_print_base_1 (struct type *type, struct ui_file *stream,
struct type *underlying = check_typedef (TYPE_TARGET_TYPE (type));
if (underlying->name () != NULL)
- fprintf_filtered (stream, ": %s ", underlying->name ());
+ gdb_printf (stream, ": %s ", underlying->name ());
}
- fprintf_filtered (stream, "{");
+ gdb_printf (stream, "{");
len = type->num_fields ();
for (i = 0; i < len; i++)
{
QUIT;
if (i)
- fprintf_filtered (stream, ", ");
- wrap_here (" ");
+ gdb_printf (stream, ", ");
+ stream->wrap_here (4);
fputs_styled (type->field (i).name (),
variable_name_style.style (), stream);
if (lastval != type->field (i).loc_enumval ())
{
- fprintf_filtered (stream, " = %s",
- plongest (type->field (i).loc_enumval ()));
+ gdb_printf (stream, " = %s",
+ plongest (type->field (i).loc_enumval ()));
lastval = type->field (i).loc_enumval ();
}
lastval++;
}
- fprintf_filtered (stream, "}");
+ gdb_printf (stream, "}");
}
break;
@@ -1616,62 +1616,62 @@ c_type_print_base_1 (struct type *type, struct ui_file *stream,
local_flags.local_typedefs = NULL;
c_type_print_modifier (type, stream, 0, 1, language);
- fprintf_filtered (stream, "flag ");
+ gdb_printf (stream, "flag ");
print_name_maybe_canonical (type->name (), flags, stream);
if (show > 0)
{
- fputs_filtered (" ", stream);
- fprintf_filtered (stream, "{\n");
+ gdb_puts (" ", stream);
+ gdb_printf (stream, "{\n");
if (type->num_fields () == 0)
{
if (type->is_stub ())
- fprintf_filtered (stream,
- _("%*s%p[<incomplete type>%p]\n"),
- level + 4, "",
- metadata_style.style ().ptr (), nullptr);
+ gdb_printf (stream,
+ _("%*s%p[<incomplete type>%p]\n"),
+ level + 4, "",
+ metadata_style.style ().ptr (), nullptr);
else
- fprintf_filtered (stream,
- _("%*s%p[<no data fields>%p]\n"),
- level + 4, "",
- metadata_style.style ().ptr (), nullptr);
+ gdb_printf (stream,
+ _("%*s%p[<no data fields>%p]\n"),
+ level + 4, "",
+ metadata_style.style ().ptr (), nullptr);
}
len = type->num_fields ();
for (i = 0; i < len; i++)
{
QUIT;
- print_spaces_filtered (level + 4, stream);
+ print_spaces (level + 4, stream);
/* We pass "show" here and not "show - 1" to get enum types
printed. There's no other way to see them. */
c_print_type_1 (type->field (i).type (),
type->field (i).name (),
stream, show, level + 4,
language, &local_flags, podata);
- fprintf_filtered (stream, " @%s",
- plongest (type->field (i).loc_bitpos ()));
+ gdb_printf (stream, " @%s",
+ plongest (type->field (i).loc_bitpos ()));
if (TYPE_FIELD_BITSIZE (type, i) > 1)
{
- fprintf_filtered (stream, "-%s",
- plongest (type->field (i).loc_bitpos ()
- + TYPE_FIELD_BITSIZE (type, i)
- - 1));
+ gdb_printf (stream, "-%s",
+ plongest (type->field (i).loc_bitpos ()
+ + TYPE_FIELD_BITSIZE (type, i)
+ - 1));
}
- fprintf_filtered (stream, ";\n");
+ gdb_printf (stream, ";\n");
}
- fprintf_filtered (stream, "%*s}", level, "");
+ gdb_printf (stream, "%*s}", level, "");
}
}
break;
case TYPE_CODE_VOID:
- fprintf_filtered (stream, "void");
+ gdb_printf (stream, "void");
break;
case TYPE_CODE_UNDEF:
- fprintf_filtered (stream, _("struct <unknown>"));
+ gdb_printf (stream, _("struct <unknown>"));
break;
case TYPE_CODE_ERROR:
- fprintf_filtered (stream, "%s", TYPE_ERROR_NAME (type));
+ gdb_printf (stream, "%s", TYPE_ERROR_NAME (type));
break;
case TYPE_CODE_RANGE:
@@ -1684,8 +1684,8 @@ c_type_print_base_1 (struct type *type, struct ui_file *stream,
break;
case TYPE_CODE_NAMESPACE:
- fputs_filtered ("namespace ", stream);
- fputs_filtered (type->name (), stream);
+ gdb_puts ("namespace ", stream);
+ gdb_puts (type->name (), stream);
break;
default:
diff --git a/gdb/c-valprint.c b/gdb/c-valprint.c
index 461763075e8..bd445588ca0 100644
--- a/gdb/c-valprint.c
+++ b/gdb/c-valprint.c
@@ -158,7 +158,7 @@ print_unpacked_pointer (struct type *type, struct type *elttype,
demangle);
else if (options->addressprint)
{
- fputs_filtered (paddress (gdbarch, address), stream);
+ gdb_puts (paddress (gdbarch, address), stream);
want_space = 1;
}
@@ -169,7 +169,7 @@ print_unpacked_pointer (struct type *type, struct type *elttype,
&& address != 0)
{
if (want_space)
- fputs_filtered (" ", stream);
+ gdb_puts (" ", stream);
val_print_string (unresolved_elttype, NULL, address, -1, stream, options);
}
else if (cp_is_vtbl_member (type))
@@ -182,13 +182,13 @@ print_unpacked_pointer (struct type *type, struct type *elttype,
/* If 'symbol_print' is set, we did the work above. */
if (!options->symbol_print
&& (msymbol.minsym != NULL)
- && (vt_address == BMSYMBOL_VALUE_ADDRESS (msymbol)))
+ && (vt_address == msymbol.value_address ()))
{
if (want_space)
- fputs_filtered (" ", stream);
- fputs_filtered (" <", stream);
- fputs_filtered (msymbol.minsym->print_name (), stream);
- fputs_filtered (">", stream);
+ gdb_puts (" ", stream);
+ gdb_puts (" <", stream);
+ gdb_puts (msymbol.minsym->print_name (), stream);
+ gdb_puts (">", stream);
want_space = 1;
}
@@ -199,7 +199,7 @@ print_unpacked_pointer (struct type *type, struct type *elttype,
struct type *wtype;
if (want_space)
- fputs_filtered (" ", stream);
+ gdb_puts (" ", stream);
if (msymbol.minsym != NULL)
{
@@ -210,7 +210,7 @@ print_unpacked_pointer (struct type *type, struct type *elttype,
if (wsym)
{
- wtype = SYMBOL_TYPE (wsym);
+ wtype = wsym->type ();
}
else
{
@@ -221,8 +221,8 @@ print_unpacked_pointer (struct type *type, struct type *elttype,
current_language);
if (options->prettyformat)
{
- fprintf_filtered (stream, "\n");
- print_spaces_filtered (2 + 2 * recurse, stream);
+ gdb_printf (stream, "\n");
+ print_spaces (2 + 2 * recurse, stream);
}
}
}
@@ -277,7 +277,7 @@ c_value_print_array (struct value *val,
++temp_len)
;
- /* Force LA_PRINT_STRING to print ellipses if
+ /* Force printstr to print ellipses if
we've printed the maximum characters and
the next character is not \000. */
if (temp_len == options->print_max && temp_len < len)
@@ -292,24 +292,24 @@ c_value_print_array (struct value *val,
len = temp_len;
}
- LA_PRINT_STRING (stream, unresolved_elttype, valaddr, len,
- NULL, force_ellipses, options);
+ current_language->printstr (stream, unresolved_elttype, valaddr, len,
+ NULL, force_ellipses, options);
}
else
{
unsigned int i = 0;
- fprintf_filtered (stream, "{");
+ gdb_printf (stream, "{");
/* If this is a virtual function table, print the 0th
entry specially, and the rest of the members
normally. */
if (cp_is_vtbl_ptr_type (elttype))
{
i = 1;
- fprintf_filtered (stream, _("%d vtable entries"),
- len - 1);
+ gdb_printf (stream, _("%d vtable entries"),
+ len - 1);
}
value_print_array_elements (val, stream, recurse, options, i);
- fprintf_filtered (stream, "}");
+ gdb_printf (stream, "}");
}
}
else
@@ -365,7 +365,7 @@ c_value_print_struct (struct value *val, struct ui_file *stream, int recurse,
struct type *type = check_typedef (value_type (val));
if (type->code () == TYPE_CODE_UNION && recurse && !options->unionprint)
- fprintf_filtered (stream, "{...}");
+ gdb_printf (stream, "{...}");
else if (options->vtblprint && cp_is_vtbl_ptr_type (type))
{
/* Print the unmangled name if desired. */
@@ -408,8 +408,9 @@ c_value_print_int (struct value *val, struct ui_file *stream,
const gdb_byte *valaddr = value_contents_for_printing (val).data ();
if (c_textual_element_type (type, options->format))
{
- fputs_filtered (" ", stream);
- LA_PRINT_CHAR (unpack_long (type, valaddr), type, stream);
+ gdb_puts (" ", stream);
+ current_language->printchar (unpack_long (type, valaddr), type,
+ stream);
}
}
}
@@ -516,7 +517,7 @@ c_value_print (struct value *val, struct ui_file *stream,
}
/* Pointer to class, check real type of object. */
- fprintf_filtered (stream, "(");
+ gdb_printf (stream, "(");
if (value_entirely_available (val))
{
@@ -541,19 +542,19 @@ c_value_print (struct value *val, struct ui_file *stream,
type = value_type (val);
type_print (type, "", stream, -1);
- fprintf_filtered (stream, ") ");
+ gdb_printf (stream, ") ");
}
else
{
/* normal case */
- fprintf_filtered (stream, "(");
+ gdb_printf (stream, "(");
type_print (value_type (val), "", stream, -1);
- fprintf_filtered (stream, ") ");
+ gdb_printf (stream, ") ");
}
}
if (!value_initialized (val))
- fprintf_filtered (stream, " [uninitialized] ");
+ gdb_printf (stream, " [uninitialized] ");
if (options->objectprint && (type->code () == TYPE_CODE_STRUCT))
{
@@ -571,15 +572,15 @@ c_value_print (struct value *val, struct ui_file *stream,
&& (TYPE_LENGTH (real_type)
< TYPE_LENGTH (value_enclosing_type (val)))))
val = value_cast (real_type, val);
- fprintf_filtered (stream, "(%s%s) ",
- real_type->name (),
- full ? "" : _(" [incomplete object]"));
+ gdb_printf (stream, "(%s%s) ",
+ real_type->name (),
+ full ? "" : _(" [incomplete object]"));
}
else if (type != check_typedef (value_enclosing_type (val)))
{
/* No RTTI information, so let's do our best. */
- fprintf_filtered (stream, "(%s ?) ",
- value_enclosing_type (val)->name ());
+ gdb_printf (stream, "(%s ?) ",
+ value_enclosing_type (val)->name ());
val = value_cast (value_enclosing_type (val), val);
}
}
diff --git a/gdb/charset.c b/gdb/charset.c
index 0b3ef26f1d6..74f742e0aa7 100644
--- a/gdb/charset.c
+++ b/gdb/charset.c
@@ -20,7 +20,7 @@
#include "defs.h"
#include "charset.h"
#include "gdbcmd.h"
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
#include "gdbsupport/gdb_wait.h"
#include "charset-list.h"
#include "gdbsupport/environ.h"
@@ -232,11 +232,11 @@ show_host_charset_name (struct ui_file *file, int from_tty,
const char *value)
{
if (!strcmp (value, "auto"))
- fprintf_filtered (file,
- _("The host character set is \"auto; currently %s\".\n"),
- auto_host_charset_name);
+ gdb_printf (file,
+ _("The host character set is \"auto; currently %s\".\n"),
+ auto_host_charset_name);
else
- fprintf_filtered (file, _("The host character set is \"%s\".\n"), value);
+ gdb_printf (file, _("The host character set is \"%s\".\n"), value);
}
static const char *target_charset_name = "auto";
@@ -245,13 +245,13 @@ show_target_charset_name (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
if (!strcmp (value, "auto"))
- fprintf_filtered (file,
- _("The target character set is \"auto; "
- "currently %s\".\n"),
- gdbarch_auto_charset (get_current_arch ()));
+ gdb_printf (file,
+ _("The target character set is \"auto; "
+ "currently %s\".\n"),
+ gdbarch_auto_charset (get_current_arch ()));
else
- fprintf_filtered (file, _("The target character set is \"%s\".\n"),
- value);
+ gdb_printf (file, _("The target character set is \"%s\".\n"),
+ value);
}
static const char *target_wide_charset_name = "auto";
@@ -262,13 +262,13 @@ show_target_wide_charset_name (struct ui_file *file,
const char *value)
{
if (!strcmp (value, "auto"))
- fprintf_filtered (file,
- _("The target wide character set is \"auto; "
- "currently %s\".\n"),
- gdbarch_auto_wide_charset (get_current_arch ()));
+ gdb_printf (file,
+ _("The target wide character set is \"auto; "
+ "currently %s\".\n"),
+ gdbarch_auto_wide_charset (get_current_arch ()));
else
- fprintf_filtered (file, _("The target wide character set is \"%s\".\n"),
- value);
+ gdb_printf (file, _("The target wide character set is \"%s\".\n"),
+ value);
}
static const char * const default_charset_names[] =
@@ -463,20 +463,6 @@ host_letter_to_control_character (char c)
return c & 0237;
}
-/* Convert a host character, C, to its hex value. C must already have
- been validated using isxdigit. */
-
-int
-host_hex_value (char c)
-{
- if (isdigit (c))
- return c - '0';
- if (c >= 'a' && c <= 'f')
- return 10 + c - 'a';
- gdb_assert (c >= 'A' && c <= 'F');
- return 10 + c - 'A';
-}
-
/* Public character management functions. */
@@ -1029,6 +1015,9 @@ _initialize_charset ()
#endif
#endif
+ /* Recall that the first element is always "auto". */
+ host_charset_name = charset_enum[0];
+ gdb_assert (strcmp (host_charset_name, "auto") == 0);
add_setshow_enum_cmd ("charset", class_support,
charset_enum, &host_charset_name, _("\
Set the host and target character sets."), _("\
@@ -1057,6 +1046,9 @@ To see a list of the character sets GDB supports, type `set host-charset <TAB>'.
show_host_charset_name,
&setlist, &showlist);
+ /* Recall that the first element is always "auto". */
+ target_charset_name = charset_enum[0];
+ gdb_assert (strcmp (target_charset_name, "auto") == 0);
add_setshow_enum_cmd ("target-charset", class_support,
charset_enum, &target_charset_name, _("\
Set the target character set."), _("\
@@ -1069,6 +1061,9 @@ To see a list of the character sets GDB supports, type `set target-charset'<TAB>
show_target_charset_name,
&setlist, &showlist);
+ /* Recall that the first element is always "auto". */
+ target_wide_charset_name = charset_enum[0];
+ gdb_assert (strcmp (target_wide_charset_name, "auto") == 0);
add_setshow_enum_cmd ("target-wide-charset", class_support,
charset_enum, &target_wide_charset_name,
_("\
diff --git a/gdb/charset.h b/gdb/charset.h
index 871f0d856ac..2daa9a25060 100644
--- a/gdb/charset.h
+++ b/gdb/charset.h
@@ -159,9 +159,10 @@ class wchar_iterator
character. */
char host_letter_to_control_character (char c);
-/* Convert a hex digit character to its numeric value. E.g., 'f' is
- converted to 15. This function assumes that C is a valid hex
- digit. Both upper- and lower-case letters are recognized. */
-int host_hex_value (char c);
+#if WORDS_BIGENDIAN
+#define HOST_UTF32 "UTF-32BE"
+#else
+#define HOST_UTF32 "UTF-32LE"
+#endif
#endif /* CHARSET_H */
diff --git a/gdb/cli-out.c b/gdb/cli-out.c
index ca1071ac31a..51531d9eda2 100644
--- a/gdb/cli-out.c
+++ b/gdb/cli-out.c
@@ -171,10 +171,10 @@ cli_ui_out::do_field_string (int fldno, int width, ui_align align,
if (string)
{
- if (test_flags (unfiltered_output))
- fputs_styled_unfiltered (string, style, m_streams.back ());
- else
- fputs_styled (string, style, m_streams.back ());
+ ui_file *stream = m_streams.back ();
+ stream->emit_style_escape (style);
+ stream->puts (string);
+ stream->emit_style_escape (ui_file_style ());
}
if (after)
@@ -205,10 +205,7 @@ cli_ui_out::do_spaces (int numspaces)
if (m_suppress_output)
return;
- if (test_flags (unfiltered_output))
- fprintf_unfiltered (m_streams.back (), "%*s", numspaces, "");
- else
- print_spaces_filtered (numspaces, m_streams.back ());
+ print_spaces (numspaces, m_streams.back ());
}
void
@@ -217,10 +214,7 @@ cli_ui_out::do_text (const char *string)
if (m_suppress_output)
return;
- if (test_flags (unfiltered_output))
- fputs_unfiltered (string, m_streams.back ());
- else
- fputs_filtered (string, m_streams.back ());
+ gdb_puts (string, m_streams.back ());
}
void
@@ -230,20 +224,23 @@ cli_ui_out::do_message (const ui_file_style &style,
if (m_suppress_output)
return;
- /* Use the "no_gdbfmt" variant here to avoid recursion.
- vfprintf_styled calls into cli_ui_out::message to handle the
- gdb-specific printf formats. */
- vfprintf_styled_no_gdbfmt (m_streams.back (), style,
- !test_flags (unfiltered_output), format, args);
+ std::string str = string_vprintf (format, args);
+ if (!str.empty ())
+ {
+ ui_file *stream = m_streams.back ();
+ stream->emit_style_escape (style);
+ stream->puts (str.c_str ());
+ stream->emit_style_escape (ui_file_style ());
+ }
}
void
-cli_ui_out::do_wrap_hint (const char *identstring)
+cli_ui_out::do_wrap_hint (int indent)
{
if (m_suppress_output)
return;
- wrap_here (identstring);
+ m_streams.back ()->wrap_here (indent);
}
void
@@ -305,12 +302,12 @@ cli_ui_out::do_progress_notify (const std::string &msg, double howmuch)
{
if (!stream->isatty ())
{
- fprintf_unfiltered (stream, "%s...\n", msg.c_str ());
+ gdb_printf (stream, "%s...\n", msg.c_str ());
info.state = progress_update::WORKING;
}
else
{
- fprintf_unfiltered (stream, "%s\n", msg.c_str ());
+ gdb_printf (stream, "%s\n", msg.c_str ());
info.state = progress_update::BAR;
}
}
@@ -323,16 +320,16 @@ cli_ui_out::do_progress_notify (const std::string &msg, double howmuch)
|| info.state == progress_update::WORKING
|| !stream->isatty ())
return;
-/*
+
if (howmuch >= 0)
{
int width = chars_per_line - 3;
int max = width * howmuch;
- fprintf_unfiltered (stream, "\r[");
+ gdb_printf (stream, "\r[");
for (int i = 0; i < width; ++i)
- fprintf_unfiltered (stream, i < max ? "#" : " ");
- fprintf_unfiltered (stream, "]");
+ gdb_printf (stream, i < max ? "#" : " ");
+ gdb_printf (stream, "]");
gdb_flush (stream);
}
else
@@ -341,30 +338,30 @@ cli_ui_out::do_progress_notify (const std::string &msg, double howmuch)
milliseconds diff = duration_cast<milliseconds>
(steady_clock::now () - info.last_update);
- * Advance the progress indicator at a rate of 1 tick every
- every 0.5 seconds. *
+ /* Advance the progress indicator at a rate of 1 tick every
+ every 0.5 seconds. */
if (diff.count () >= 500)
{
int width = chars_per_line - 3;
- fprintf_unfiltered (stream, "\r[");
+ gdb_printf (stream, "\r[");
for (int i = 0; i < width; ++i)
{
if (i >= info.pos % width
&& i < (info.pos + 3) % width)
- fprintf_unfiltered (stream, "#");
+ gdb_printf (stream, "#");
else
- fprintf_unfiltered (stream, " ");
+ gdb_printf (stream, " ");
}
- fprintf_unfiltered (stream, "]");
+ gdb_printf (stream, "]");
gdb_flush (stream);
info.last_update = steady_clock::now ();
info.pos++;
}
}
-*/
+
return;
}
@@ -383,10 +380,10 @@ cli_ui_out::clear_current_line ()
int width = chars_per_line;
- fprintf_unfiltered (stream, "\r");
+ gdb_printf (stream, "\r");
for (int i = 0; i < width; ++i)
- fprintf_unfiltered (stream, " ");
- fprintf_unfiltered (stream, "\r");
+ gdb_printf (stream, " ");
+ gdb_printf (stream, "\r");
gdb_flush (stream);
}
@@ -409,10 +406,7 @@ cli_ui_out::do_progress_end ()
void
cli_ui_out::field_separator ()
{
- if (test_flags (unfiltered_output))
- fputc_unfiltered (' ', m_streams.back ());
- else
- fputc_filtered (' ', m_streams.back ());
+ gdb_putc (' ', m_streams.back ());
}
/* Constructor for cli_ui_out. */
diff --git a/gdb/cli-out.h b/gdb/cli-out.h
index ae42ff03cf0..62531ce818d 100644
--- a/gdb/cli-out.h
+++ b/gdb/cli-out.h
@@ -68,7 +68,7 @@ protected:
virtual void do_message (const ui_file_style &style,
const char *format, va_list args) override
ATTRIBUTE_PRINTF (3,0);
- virtual void do_wrap_hint (const char *identstring) override;
+ virtual void do_wrap_hint (int indent) override;
virtual void do_flush () override;
virtual void do_redirect (struct ui_file *outstream) override;
diff --git a/gdb/cli/cli-cmds.c b/gdb/cli/cli-cmds.c
index e62e7a9331f..31911ebe61f 100644
--- a/gdb/cli/cli-cmds.c
+++ b/gdb/cli/cli-cmds.c
@@ -24,7 +24,7 @@
#include "target.h" /* For baud_rate, remote_debug and remote_timeout. */
#include "gdbsupport/gdb_wait.h" /* For shell escape implementation. */
#include "gdbcmd.h"
-#include "gdb_regex.h" /* Used by apropos_command. */
+#include "gdbsupport/gdb_regex.h" /* Used by apropos_command. */
#include "gdb_vfork.h"
#include "linespec.h"
#include "expression.h"
@@ -192,6 +192,11 @@ static const char *const script_ext_enums[] = {
static const char *script_ext_mode = script_ext_soft;
+
+/* User-controllable flag to suppress event notification on CLI. */
+
+static bool user_wants_cli_suppress_notification = false;
+
/* Utility used everywhere when at least one argument is needed and
none is supplied. */
@@ -455,7 +460,7 @@ static void
show_version (const char *args, int from_tty)
{
print_gdb_version (gdb_stdout, true);
- printf_filtered ("\n");
+ gdb_printf ("\n");
}
static void
@@ -501,14 +506,14 @@ pwd_command (const char *args, int from_tty)
safe_strerror (errno));
if (strcmp (cwd.get (), current_directory) != 0)
- printf_filtered (_("Working directory %ps\n (canonically %ps).\n"),
- styled_string (file_name_style.style (),
- current_directory),
- styled_string (file_name_style.style (), cwd.get ()));
+ gdb_printf (_("Working directory %ps\n (canonically %ps).\n"),
+ styled_string (file_name_style.style (),
+ current_directory),
+ styled_string (file_name_style.style (), cwd.get ()));
else
- printf_filtered (_("Working directory %ps.\n"),
- styled_string (file_name_style.style (),
- current_directory));
+ gdb_printf (_("Working directory %ps.\n"),
+ styled_string (file_name_style.style (),
+ current_directory));
}
void
@@ -621,9 +626,9 @@ static void
show_script_ext_mode (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file,
- _("Script filename extension recognition is \"%s\".\n"),
- value);
+ gdb_printf (file,
+ _("Script filename extension recognition is \"%s\".\n"),
+ value);
}
/* Try to open SCRIPT_FILE.
@@ -744,13 +749,13 @@ source_script_with_search (const char *file, int from_tty, int search_path)
this if we (may have) used search_path, as printing the full path in
errors for the non-search case can be more noise than signal. */
const char *file_to_open;
- gdb::unique_xmalloc_ptr<char> tilde_expanded_file;
+ std::string tilde_expanded_file;
if (search_path)
file_to_open = opened->full_path.get ();
else
{
- tilde_expanded_file = gdb_tilde_expand_up (file);
- file_to_open = tilde_expanded_file.get ();
+ tilde_expanded_file = gdb_tilde_expand (file);
+ file_to_open = tilde_expanded_file.c_str ();
}
source_script_from_stream (opened->stream.get (), file, file_to_open);
}
@@ -832,16 +837,15 @@ echo_command (const char *text, int from_tty)
c = parse_escape (get_current_arch (), &p);
if (c >= 0)
- printf_filtered ("%c", c);
+ gdb_printf ("%c", c);
}
else
- printf_filtered ("%c", c);
+ gdb_printf ("%c", c);
}
- reset_terminal_style (gdb_stdout);
+ gdb_stdout->reset_style ();
/* Force this output to appear now. */
- wrap_here ("");
gdb_flush (gdb_stdout);
}
@@ -889,10 +893,10 @@ shell_escape (const char *arg, int from_tty)
arg = "inferior shell";
if (rc == -1)
- fprintf_unfiltered (gdb_stderr, "Cannot execute %s: %s\n", arg,
- safe_strerror (errno));
+ gdb_printf (gdb_stderr, "Cannot execute %s: %s\n", arg,
+ safe_strerror (errno));
else if (rc)
- fprintf_unfiltered (gdb_stderr, "%s exited with status %d\n", arg, rc);
+ gdb_printf (gdb_stderr, "%s exited with status %d\n", arg, rc);
#ifdef GLOBAL_CURDIR
/* Make sure to return to the directory GDB thinks it is, in case
the shell command we just ran changed it. */
@@ -916,8 +920,8 @@ shell_escape (const char *arg, int from_tty)
else
execl (user_shell, p, "-c", arg, (char *) 0);
- fprintf_unfiltered (gdb_stderr, "Cannot execute %s: %s\n", user_shell,
- safe_strerror (errno));
+ gdb_printf (gdb_stderr, "Cannot execute %s: %s\n", user_shell,
+ safe_strerror (errno));
_exit (0177);
}
@@ -968,6 +972,10 @@ edit_command (const char *arg, int from_tty)
arg1 = arg;
event_location_up location = string_to_event_location (&arg1,
current_language);
+
+ if (*arg1)
+ error (_("Junk at end of line specification."));
+
std::vector<symtab_and_line> sals = decode_line_1 (location.get (),
DECODE_LINE_LIST_MODE,
NULL, NULL, 0);
@@ -987,9 +995,6 @@ edit_command (const char *arg, int from_tty)
sal = sals[0];
- if (*arg1)
- error (_("Junk at end of line specification."));
-
/* If line was specified by address, first print exactly which
line, and which file. In this case, sal.symtab == 0 means
address is outside of all known source files, not that user
@@ -1002,19 +1007,19 @@ edit_command (const char *arg, int from_tty)
error (_("No source file for address %s."),
paddress (get_current_arch (), sal.pc));
- gdbarch = SYMTAB_OBJFILE (sal.symtab)->arch ();
+ gdbarch = sal.symtab->compunit ()->objfile ()->arch ();
sym = find_pc_function (sal.pc);
if (sym)
- printf_filtered ("%s is in %s (%s:%d).\n",
- paddress (gdbarch, sal.pc),
- sym->print_name (),
- symtab_to_filename_for_display (sal.symtab),
- sal.line);
+ gdb_printf ("%s is in %s (%s:%d).\n",
+ paddress (gdbarch, sal.pc),
+ sym->print_name (),
+ symtab_to_filename_for_display (sal.symtab),
+ sal.line);
else
- printf_filtered ("%s is at %s:%d.\n",
- paddress (gdbarch, sal.pc),
- symtab_to_filename_for_display (sal.symtab),
- sal.line);
+ gdb_printf ("%s is at %s:%d.\n",
+ paddress (gdbarch, sal.pc),
+ symtab_to_filename_for_display (sal.symtab),
+ sal.line);
}
/* If what was given does not imply a symtab, it must be an
@@ -1238,6 +1243,15 @@ list_command (const char *arg, int from_tty)
{
event_location_up location = string_to_event_location (&arg1,
current_language);
+
+ /* We know that the ARG string is not empty, yet the attempt to parse
+ a location from the string consumed no characters. This most
+ likely means that the first thing in ARG looks like a location
+ condition, and so the string_to_event_location call stopped
+ parsing. */
+ if (arg1 == arg)
+ error (_("Junk at end of line specification."));
+
sals = decode_line_1 (location.get (), DECODE_LINE_LIST_MODE,
NULL, NULL, 0);
filter_sals (sals);
@@ -1286,6 +1300,9 @@ list_command (const char *arg, int from_tty)
event_location_up location
= string_to_event_location (&arg1, current_language);
+ if (*arg1)
+ error (_("Junk at end of line specification."));
+
std::vector<symtab_and_line> sals_end
= (dummy_beg
? decode_line_1 (location.get (), DECODE_LINE_LIST_MODE,
@@ -1329,17 +1346,17 @@ list_command (const char *arg, int from_tty)
error (_("No source file for address %s."),
paddress (get_current_arch (), sal.pc));
- gdbarch = SYMTAB_OBJFILE (sal.symtab)->arch ();
+ gdbarch = sal.symtab->compunit ()->objfile ()->arch ();
sym = find_pc_function (sal.pc);
if (sym)
- printf_filtered ("%s is in %s (%s:%d).\n",
- paddress (gdbarch, sal.pc),
- sym->print_name (),
- symtab_to_filename_for_display (sal.symtab), sal.line);
+ gdb_printf ("%s is in %s (%s:%d).\n",
+ paddress (gdbarch, sal.pc),
+ sym->print_name (),
+ symtab_to_filename_for_display (sal.symtab), sal.line);
else
- printf_filtered ("%s is at %s:%d.\n",
- paddress (gdbarch, sal.pc),
- symtab_to_filename_for_display (sal.symtab), sal.line);
+ gdb_printf ("%s is at %s:%d.\n",
+ paddress (gdbarch, sal.pc),
+ symtab_to_filename_for_display (sal.symtab), sal.line);
}
/* If line was not specified by just a line number, and it does not
@@ -1407,38 +1424,39 @@ print_disassembly (struct gdbarch *gdbarch, const char *name,
else
#endif
{
- printf_filtered (_("Dump of assembler code "));
+ gdb_printf (_("Dump of assembler code "));
if (name != NULL)
- printf_filtered (_("for function %ps:\n"),
- styled_string (function_name_style.style (), name));
- if (block == nullptr || BLOCK_CONTIGUOUS_P (block))
+ gdb_printf (_("for function %ps:\n"),
+ styled_string (function_name_style.style (), name));
+ if (block == nullptr || block->is_contiguous ())
{
if (name == NULL)
- printf_filtered (_("from %ps to %ps:\n"),
- styled_string (address_style.style (),
- paddress (gdbarch, low)),
- styled_string (address_style.style (),
- paddress (gdbarch, high)));
+ gdb_printf (_("from %ps to %ps:\n"),
+ styled_string (address_style.style (),
+ paddress (gdbarch, low)),
+ styled_string (address_style.style (),
+ paddress (gdbarch, high)));
/* Dump the specified range. */
gdb_disassembly (gdbarch, current_uiout, flags, -1, low, high);
}
else
{
- for (int i = 0; i < BLOCK_NRANGES (block); i++)
+ for (const blockrange &range : block->ranges ())
{
- CORE_ADDR range_low = BLOCK_RANGE_START (block, i);
- CORE_ADDR range_high = BLOCK_RANGE_END (block, i);
- printf_filtered (_("Address range %ps to %ps:\n"),
- styled_string (address_style.style (),
- paddress (gdbarch, range_low)),
- styled_string (address_style.style (),
- paddress (gdbarch, range_high)));
+ CORE_ADDR range_low = range.start ();
+ CORE_ADDR range_high = range.end ();
+
+ gdb_printf (_("Address range %ps to %ps:\n"),
+ styled_string (address_style.style (),
+ paddress (gdbarch, range_low)),
+ styled_string (address_style.style (),
+ paddress (gdbarch, range_high)));
gdb_disassembly (gdbarch, current_uiout, flags, -1,
range_low, range_high);
}
}
- printf_filtered (_("End of assembler dump.\n"));
+ gdb_printf (_("End of assembler dump.\n"));
}
}
@@ -2002,9 +2020,9 @@ print_sal_location (const symtab_and_line &sal)
const char *sym_name = NULL;
if (sal.symbol != NULL)
sym_name = sal.symbol->print_name ();
- printf_filtered (_("file: \"%s\", line number: %d, symbol: \"%s\"\n"),
- symtab_to_filename_for_display (sal.symtab),
- sal.line, sym_name != NULL ? sym_name : "???");
+ gdb_printf (_("file: \"%s\", line number: %d, symbol: \"%s\"\n"),
+ symtab_to_filename_for_display (sal.symtab),
+ sal.line, sym_name != NULL ? sym_name : "???");
}
/* Print a list of files and line numbers which a user may choose from
@@ -2020,7 +2038,7 @@ ambiguous_line_spec (gdb::array_view<const symtab_and_line> sals,
{
va_list ap;
va_start (ap, format);
- vprintf_filtered (format, ap);
+ gdb_vprintf (format, ap);
va_end (ap);
for (const auto &sal : sals)
@@ -2033,8 +2051,8 @@ ambiguous_line_spec (gdb::array_view<const symtab_and_line> sals,
static int
cmp_symtabs (const symtab_and_line &sala, const symtab_and_line &salb)
{
- const char *dira = SYMTAB_DIRNAME (sala.symtab);
- const char *dirb = SYMTAB_DIRNAME (salb.symtab);
+ const char *dira = sala.symtab->compunit ()->dirname ();
+ const char *dirb = salb.symtab->compunit ()->dirname ();
int r;
if (dira == NULL)
@@ -2099,28 +2117,50 @@ show_info_verbose (struct ui_file *file, int from_tty,
const char *value)
{
if (info_verbose)
- fprintf_filtered (file,
- _("Verbose printing of informational messages is %s.\n"),
- value);
+ gdb_printf (file,
+ _("Verbose printing of informational messages is %s.\n"),
+ value);
else
- fprintf_filtered (file, _("Verbosity is %s.\n"), value);
+ gdb_printf (file, _("Verbosity is %s.\n"), value);
}
static void
show_history_expansion_p (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("History expansion on command input is %s.\n"),
- value);
+ gdb_printf (file, _("History expansion on command input is %s.\n"),
+ value);
}
static void
show_max_user_call_depth (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file,
- _("The max call depth for user-defined commands is %s.\n"),
- value);
+ gdb_printf (file,
+ _("The max call depth for user-defined commands is %s.\n"),
+ value);
+}
+
+/* Implement 'show suppress-cli-notifications'. */
+
+static void
+show_suppress_cli_notifications (ui_file *file, int from_tty,
+ cmd_list_element *c, const char *value)
+{
+ gdb_printf (file, _("Suppression of printing CLI notifications "
+ "is %s.\n"), value);
+}
+
+/* Implement 'set suppress-cli-notifications'. */
+
+static void
+set_suppress_cli_notifications (const char *args, int from_tty,
+ cmd_list_element *c)
+{
+ cli_suppress_notification.user_selected_context
+ = user_wants_cli_suppress_notification;
+ cli_suppress_notification.normal_stop
+ = user_wants_cli_suppress_notification;
}
/* Returns the cmd_list_element in SHOWLIST corresponding to the first
@@ -2382,8 +2422,7 @@ User-defined commands.\n\
The commands in this class are those defined by the user.\n\
Use the \"define\" command to define a command."), &cmdlist);
add_cmd ("support", class_support, _("Support facilities."), &cmdlist);
- if (!dbx_commands)
- add_cmd ("status", class_info, _("Status inquiries."), &cmdlist);
+ add_cmd ("status", class_info, _("Status inquiries."), &cmdlist);
add_cmd ("files", class_files, _("Specifying and examining files."),
&cmdlist);
add_cmd ("breakpoints", class_breakpoint,
@@ -2628,9 +2667,6 @@ can be shown using \"show listsize\"."));
add_com_alias ("l", list_cmd, class_files, 1);
- if (dbx_commands)
- add_com_alias ("file", list_cmd, class_files, 1);
-
c = add_com ("disassemble", class_vars, disassemble_command, _("\
Disassemble a specified section of memory.\n\
Usage: disassemble[/m|/r|/s] START [, END]\n\
@@ -2721,6 +2757,18 @@ Make \"wLapPeu\" an alias of 2 nested \"with\":\n\
set_cmd_completer_handle_brkchars (c, alias_command_completer);
+ add_setshow_boolean_cmd ("suppress-cli-notifications", no_class,
+ &user_wants_cli_suppress_notification,
+ _("\
+Set whether printing notifications on CLI is suppressed."), _("\
+Show whether printing notifications on CLI is suppressed."), _("\
+When on, printing notifications (such as inferior/thread switch)\n\
+on CLI is suppressed."),
+ set_suppress_cli_notifications,
+ show_suppress_cli_notifications,
+ &setlist,
+ &showlist);
+
const char *source_help_text = xstrprintf (_("\
Read commands from a file named FILE.\n\
\n\
diff --git a/gdb/cli/cli-decode.c b/gdb/cli/cli-decode.c
index 7266fb36d0d..a15283421fe 100644
--- a/gdb/cli/cli-decode.c
+++ b/gdb/cli/cli-decode.c
@@ -18,7 +18,7 @@
#include "defs.h"
#include "symtab.h"
#include <ctype.h>
-#include "gdb_regex.h"
+#include "gdbsupport/gdb_regex.h"
#include "completer.h"
#include "ui-out.h"
#include "cli/cli-cmds.h"
@@ -145,6 +145,20 @@ cmd_list_element::prefixname () const
return prefixname;
}
+/* See cli/cli-decode.h. */
+
+std::vector<std::string>
+cmd_list_element::command_components () const
+{
+ std::vector<std::string> result;
+
+ if (this->prefix != nullptr)
+ result = this->prefix->command_components ();
+
+ result.emplace_back (std::string (this->name));
+ return result;
+}
+
/* Add element named NAME.
Space for NAME and DOC must be allocated by the caller.
CLASS is the top level category into which commands are broken down
@@ -241,7 +255,7 @@ struct cmd_list_element *
add_cmd_suppress_notification (const char *name, enum command_class theclass,
cmd_simple_func_ftype *fun, const char *doc,
struct cmd_list_element **list,
- int *suppress_notification)
+ bool *suppress_notification)
{
struct cmd_list_element *element;
@@ -439,7 +453,7 @@ add_prefix_cmd_suppress_notification
cmd_simple_func_ftype *fun,
const char *doc, struct cmd_list_element **subcommands,
int allow_unknown, struct cmd_list_element **list,
- int *suppress_notification)
+ bool *suppress_notification)
{
struct cmd_list_element *element
= add_prefix_cmd (name, theclass, fun, doc, subcommands,
@@ -613,6 +627,16 @@ add_setshow_enum_cmd (const char *name,
struct cmd_list_element **set_list,
struct cmd_list_element **show_list)
{
+ /* We require *VAR to be initialized before this call, and
+ furthermore it must be == to one of the values in ENUMLIST. */
+ gdb_assert (var != nullptr && *var != nullptr);
+ for (int i = 0; ; ++i)
+ {
+ gdb_assert (enumlist[i] != nullptr);
+ if (*var == enumlist[i])
+ break;
+ }
+
set_show_commands commands
= add_setshow_cmd_full<const char *> (name, theclass, var_enum, var,
set_doc, show_doc, help_doc,
@@ -1305,7 +1329,7 @@ add_com_alias (const char *name, cmd_list_element *target,
struct cmd_list_element *
add_com_suppress_notification (const char *name, enum command_class theclass,
cmd_simple_func_ftype *fun, const char *doc,
- int *suppress_notification)
+ bool *suppress_notification)
{
return add_cmd_suppress_notification (name, theclass, fun, doc,
&cmdlist, suppress_notification);
@@ -1331,11 +1355,11 @@ fput_alias_definition_styled (const cmd_list_element &c,
struct ui_file *stream)
{
gdb_assert (c.is_alias ());
- fputs_filtered (" alias ", stream);
+ gdb_puts (" alias ", stream);
fput_command_name_styled (c, stream);
- fprintf_filtered (stream, " = ");
+ gdb_printf (stream, " = ");
fput_command_name_styled (*c.alias_target, stream);
- fprintf_filtered (stream, " %s\n", c.default_args.c_str ());
+ gdb_printf (stream, " %s\n", c.default_args.c_str ());
}
/* Print the definition of the aliases of CMD that have default args. */
@@ -1389,13 +1413,13 @@ fput_command_names_styled (const cmd_list_element &c,
if (!print_alias (alias))
continue;
- fputs_filtered (", ", stream);
- wrap_here (" ");
+ gdb_puts (", ", stream);
+ stream->wrap_here (3);
fput_command_name_styled (alias, stream);
}
if (print_something)
- fputs_filtered (postfix, stream);
+ gdb_puts (postfix, stream);
}
/* If VERBOSE, print the full help for command C and highlight the
@@ -1411,21 +1435,21 @@ print_doc_of_command (const cmd_list_element &c, const char *prefix,
this documentation from the previous command help, in the likely
case that apropos finds several commands. */
if (verbose)
- fputs_filtered ("\n", stream);
+ gdb_puts ("\n", stream);
fput_command_names_styled (c, true,
verbose ? "" : " -- ", stream);
if (verbose)
{
- fputs_filtered ("\n", stream);
+ gdb_puts ("\n", stream);
fput_aliases_definition_styled (c, stream);
fputs_highlighted (c.doc, highlight, stream);
- fputs_filtered ("\n", stream);
+ gdb_puts ("\n", stream);
}
else
{
print_doc_line (stream, c.doc, false);
- fputs_filtered ("\n", stream);
+ gdb_puts ("\n", stream);
fput_aliases_definition_styled (c, stream);
}
}
@@ -1549,13 +1573,13 @@ help_cmd (const char *command, struct ui_file *stream)
the false indicates to not output the (single) command name. */
fput_command_names_styled (*c, false, "\n", stream);
fput_aliases_definition_styled (*c, stream);
- fputs_filtered (c->doc, stream);
- fputs_filtered ("\n", stream);
+ gdb_puts (c->doc, stream);
+ gdb_puts ("\n", stream);
if (!c->is_prefix () && !c->is_command_class_help ())
return;
- fprintf_filtered (stream, "\n");
+ gdb_printf (stream, "\n");
/* If this is a prefix command, print it's subcommands. */
if (c->is_prefix ())
@@ -1567,17 +1591,17 @@ help_cmd (const char *command, struct ui_file *stream)
help_list (cmdlist, "", c->theclass, stream);
if (c->hook_pre || c->hook_post)
- fprintf_filtered (stream,
- "\nThis command has a hook (or hooks) defined:\n");
+ gdb_printf (stream,
+ "\nThis command has a hook (or hooks) defined:\n");
if (c->hook_pre)
- fprintf_filtered (stream,
- "\tThis command is run after : %s (pre hook)\n",
- c->hook_pre->name);
+ gdb_printf (stream,
+ "\tThis command is run after : %s (pre hook)\n",
+ c->hook_pre->name);
if (c->hook_post)
- fprintf_filtered (stream,
- "\tThis command is run before : %s (post hook)\n",
- c->hook_post->name);
+ gdb_printf (stream,
+ "\tThis command is run before : %s (post hook)\n",
+ c->hook_post->name);
}
/*
@@ -1616,39 +1640,39 @@ help_list (struct cmd_list_element *list, const char *cmdtype,
}
if (theclass == all_classes)
- fprintf_filtered (stream, "List of classes of %scommands:\n\n", cmdtype2);
+ gdb_printf (stream, "List of classes of %scommands:\n\n", cmdtype2);
else
- fprintf_filtered (stream, "List of %scommands:\n\n", cmdtype2);
+ gdb_printf (stream, "List of %scommands:\n\n", cmdtype2);
help_cmd_list (list, theclass, theclass >= 0, stream);
if (theclass == all_classes)
{
- fprintf_filtered (stream, "\n\
+ gdb_printf (stream, "\n\
Type \"help%s\" followed by a class name for a list of commands in ",
- cmdtype1);
- wrap_here ("");
- fprintf_filtered (stream, "that class.");
+ cmdtype1);
+ stream->wrap_here (0);
+ gdb_printf (stream, "that class.");
- fprintf_filtered (stream, "\n\
+ gdb_printf (stream, "\n\
Type \"help all\" for the list of all commands.");
}
- fprintf_filtered (stream, "\nType \"help%s\" followed by %scommand name ",
- cmdtype1, cmdtype2);
- wrap_here ("");
- fputs_filtered ("for ", stream);
- wrap_here ("");
- fputs_filtered ("full ", stream);
- wrap_here ("");
- fputs_filtered ("documentation.\n", stream);
- fputs_filtered ("Type \"apropos word\" to search "
- "for commands related to \"word\".\n", stream);
- fputs_filtered ("Type \"apropos -v word\" for full documentation", stream);
- wrap_here ("");
- fputs_filtered (" of commands related to \"word\".\n", stream);
- fputs_filtered ("Command name abbreviations are allowed if unambiguous.\n",
- stream);
+ gdb_printf (stream, "\nType \"help%s\" followed by %scommand name ",
+ cmdtype1, cmdtype2);
+ stream->wrap_here (0);
+ gdb_puts ("for ", stream);
+ stream->wrap_here (0);
+ gdb_puts ("full ", stream);
+ stream->wrap_here (0);
+ gdb_puts ("documentation.\n", stream);
+ gdb_puts ("Type \"apropos word\" to search "
+ "for commands related to \"word\".\n", stream);
+ gdb_puts ("Type \"apropos -v word\" for full documentation", stream);
+ stream->wrap_here (0);
+ gdb_puts (" of commands related to \"word\".\n", stream);
+ gdb_puts ("Command name abbreviations are allowed if unambiguous.\n",
+ stream);
}
static void
@@ -1666,7 +1690,7 @@ help_all (struct ui_file *stream)
if (c->is_command_class_help ())
{
- fprintf_filtered (stream, "\nCommand class: %s\n\n", c->name);
+ gdb_printf (stream, "\nCommand class: %s\n\n", c->name);
help_cmd_list (cmdlist, c->theclass, true, stream);
}
}
@@ -1684,7 +1708,7 @@ help_all (struct ui_file *stream)
{
if (!seen_unclassified)
{
- fprintf_filtered (stream, "\nUnclassified commands\n\n");
+ gdb_printf (stream, "\nUnclassified commands\n\n");
seen_unclassified = 1;
}
print_help_for_command (*c, true, stream);
@@ -1732,7 +1756,7 @@ print_doc_line (struct ui_file *stream, const char *str,
}
else
line_buffer[p - str] = '\0';
- fputs_filtered (line_buffer, stream);
+ gdb_puts (line_buffer, stream);
}
/* Print one-line help for command C.
@@ -1744,7 +1768,7 @@ print_help_for_command (const cmd_list_element &c,
{
fput_command_names_styled (c, true, " -- ", stream);
print_doc_line (stream, c.doc, false);
- fputs_filtered ("\n", stream);
+ gdb_puts ("\n", stream);
if (!c.default_args.empty ())
fput_alias_definition_styled (c, stream);
fput_aliases_definition_styled (c, stream);
@@ -2257,23 +2281,23 @@ deprecated_cmd_warning (const char *text, struct cmd_list_element *list)
tmp_alias_str += std::string (alias->name);
if (cmd->cmd_deprecated)
- printf_filtered (_("Warning: command '%ps' (%ps) is deprecated.\n"),
- styled_string (title_style.style (),
- tmp_cmd_str.c_str ()),
- styled_string (title_style.style (),
- tmp_alias_str.c_str ()));
+ gdb_printf (_("Warning: command '%ps' (%ps) is deprecated.\n"),
+ styled_string (title_style.style (),
+ tmp_cmd_str.c_str ()),
+ styled_string (title_style.style (),
+ tmp_alias_str.c_str ()));
else
- printf_filtered (_("Warning: '%ps', an alias for the command '%ps', "
- "is deprecated.\n"),
- styled_string (title_style.style (),
- tmp_alias_str.c_str ()),
- styled_string (title_style.style (),
- tmp_cmd_str.c_str ()));
+ gdb_printf (_("Warning: '%ps', an alias for the command '%ps', "
+ "is deprecated.\n"),
+ styled_string (title_style.style (),
+ tmp_alias_str.c_str ()),
+ styled_string (title_style.style (),
+ tmp_cmd_str.c_str ()));
}
else
- printf_filtered (_("Warning: command '%ps' is deprecated.\n"),
- styled_string (title_style.style (),
- tmp_cmd_str.c_str ()));
+ gdb_printf (_("Warning: command '%ps' is deprecated.\n"),
+ styled_string (title_style.style (),
+ tmp_cmd_str.c_str ()));
/* Now display a second line indicating what the user should use instead.
If it is only the alias that is deprecated, we want to indicate the
@@ -2284,11 +2308,11 @@ deprecated_cmd_warning (const char *text, struct cmd_list_element *list)
else
replacement = cmd->replacement;
if (replacement != nullptr)
- printf_filtered (_("Use '%ps'.\n\n"),
- styled_string (title_style.style (),
- replacement));
+ gdb_printf (_("Use '%ps'.\n\n"),
+ styled_string (title_style.style (),
+ replacement));
else
- printf_filtered (_("No alternative known.\n\n"));
+ gdb_printf (_("No alternative known.\n\n"));
/* We've warned you, now we'll keep quiet. */
if (alias != nullptr)
@@ -2482,10 +2506,10 @@ cmd_func (struct cmd_list_element *cmd, const char *args, int from_tty)
{
if (!cmd->is_command_class_help ())
{
- gdb::optional<scoped_restore_tmpl<int>> restore_suppress;
+ gdb::optional<scoped_restore_tmpl<bool>> restore_suppress;
if (cmd->suppress_notification != NULL)
- restore_suppress.emplace (cmd->suppress_notification, 1);
+ restore_suppress.emplace (cmd->suppress_notification, true);
cmd->func (args, from_tty, cmd);
}
diff --git a/gdb/cli/cli-decode.h b/gdb/cli/cli-decode.h
index 8f367bf4634..18db8822af3 100644
--- a/gdb/cli/cli-decode.h
+++ b/gdb/cli/cli-decode.h
@@ -23,10 +23,11 @@
/* Include the public interfaces. */
#include "command.h"
-#include "gdb_regex.h"
+#include "gdbsupport/gdb_regex.h"
#include "cli-script.h"
#include "completer.h"
#include "gdbsupport/intrusive_list.h"
+#include "gdbsupport/buildargv.h"
/* Not a set/show command. Note that some commands which begin with
"set" or "show" might be in this category, if their syntax does
@@ -79,6 +80,12 @@ struct cmd_list_element
For non-prefix commands, return an empty string. */
std::string prefixname () const;
+ /* Return a vector of strings describing the components of the full name
+ of this command. For example, if this command is 'set AA BB CC',
+ then the vector will contain 4 elements 'set', 'AA', 'BB', and 'CC'
+ in that order. */
+ std::vector<std::string> command_components () const;
+
/* Return true if this command is an alias of another command. */
bool is_alias () const
{ return this->alias_target != nullptr; }
@@ -264,7 +271,7 @@ struct cmd_list_element
cli_suppress_notification', which will be set to true in cmd_func
when this command is being executed. It will be set back to false
when the command has been executed. */
- int *suppress_notification = nullptr;
+ bool *suppress_notification = nullptr;
private:
/* Local state (context) for this command. This can be anything. */
diff --git a/gdb/cli/cli-dump.c b/gdb/cli/cli-dump.c
index 5324f647d80..33c162b9f11 100644
--- a/gdb/cli/cli-dump.c
+++ b/gdb/cli/cli-dump.c
@@ -398,8 +398,8 @@ restore_one_section (bfd *ibfd, asection *isec,
|| (load_end > 0 && sec_start >= load_end))
{
/* No, no useable data in this section. */
- printf_filtered (_("skipping section %s...\n"),
- bfd_section_name (isec));
+ gdb_printf (_("skipping section %s...\n"),
+ bfd_section_name (isec));
return;
}
@@ -419,21 +419,21 @@ restore_one_section (bfd *ibfd, asection *isec,
error (_("Failed to read bfd file %s: '%s'."), bfd_get_filename (ibfd),
bfd_errmsg (bfd_get_error ()));
- printf_filtered ("Restoring section %s (0x%lx to 0x%lx)",
- bfd_section_name (isec),
- (unsigned long) sec_start,
- (unsigned long) sec_end);
+ gdb_printf ("Restoring section %s (0x%lx to 0x%lx)",
+ bfd_section_name (isec),
+ (unsigned long) sec_start,
+ (unsigned long) sec_end);
if (load_offset != 0 || load_start != 0 || load_end != 0)
- printf_filtered (" into memory (%s to %s)\n",
- paddress (target_gdbarch (),
- (unsigned long) sec_start
- + sec_offset + load_offset),
- paddress (target_gdbarch (),
- (unsigned long) sec_start + sec_offset
- + load_offset + sec_load_count));
+ gdb_printf (" into memory (%s to %s)\n",
+ paddress (target_gdbarch (),
+ (unsigned long) sec_start
+ + sec_offset + load_offset),
+ paddress (target_gdbarch (),
+ (unsigned long) sec_start + sec_offset
+ + load_offset + sec_load_count));
else
- puts_filtered ("\n");
+ gdb_puts ("\n");
/* Write the data. */
ret = target_write_memory (sec_start + sec_offset + load_offset,
@@ -474,7 +474,7 @@ restore_binary_file (const char *filename, CORE_ADDR load_offset,
if (load_start > 0)
len -= load_start;
- printf_filtered
+ gdb_printf
("Restoring binary file %s into memory (0x%lx to 0x%lx)\n",
filename,
(unsigned long) (load_start + load_offset),
@@ -542,10 +542,10 @@ restore_command (const char *args, int from_tty)
}
if (info_verbose)
- printf_filtered ("Restore file %s offset 0x%lx start 0x%lx end 0x%lx\n",
- filename.get (), (unsigned long) load_offset,
- (unsigned long) load_start,
- (unsigned long) load_end);
+ gdb_printf ("Restore file %s offset 0x%lx start 0x%lx end 0x%lx\n",
+ filename.get (), (unsigned long) load_offset,
+ (unsigned long) load_start,
+ (unsigned long) load_end);
if (binary_flag)
{
diff --git a/gdb/cli/cli-interp.c b/gdb/cli/cli-interp.c
index 6dc3e6ae2fa..fe9e4b43f14 100644
--- a/gdb/cli/cli-interp.c
+++ b/gdb/cli/cli-interp.c
@@ -68,10 +68,7 @@ cli_interp::~cli_interp ()
}
/* Suppress notification struct. */
-struct cli_suppress_notification cli_suppress_notification =
- {
- 0 /* user_selected_context_changed */
- };
+struct cli_suppress_notification cli_suppress_notification;
/* Returns the INTERP's data cast as cli_interp if INTERP is a CLI,
and returns NULL otherwise. */
@@ -111,9 +108,9 @@ should_print_stop_to_console (struct interp *console_interp,
{
if ((bpstat_what (tp->control.stop_bpstat).main_action
== BPSTAT_WHAT_STOP_NOISY)
- || tp->thread_fsm == NULL
- || tp->thread_fsm->command_interp == console_interp
- || !tp->thread_fsm->finished_p ())
+ || tp->thread_fsm () == nullptr
+ || tp->thread_fsm ()->command_interp == console_interp
+ || !tp->thread_fsm ()->finished_p ())
return 1;
return 0;
}
@@ -130,6 +127,10 @@ cli_on_normal_stop (struct bpstat *bs, int print_frame)
if (!print_frame)
return;
+ /* This event is suppressed. */
+ if (cli_suppress_notification.normal_stop)
+ return;
+
SWITCH_THRU_ALL_UIS ()
{
struct interp *interp = top_level_interpreter ();
@@ -395,9 +396,10 @@ struct saved_output_files
ui_file *log;
ui_file *targ;
ui_file *targerr;
- ui_file *file_to_delete;
+ ui_file_up file_to_delete;
+ ui_file_up log_to_delete;
};
-static saved_output_files saved_output;
+static std::unique_ptr<saved_output_files> saved_output;
/* See cli-interp.h. */
@@ -407,61 +409,43 @@ cli_interp_base::set_logging (ui_file_up logfile, bool logging_redirect,
{
if (logfile != nullptr)
{
- saved_output.out = gdb_stdout;
- saved_output.err = gdb_stderr;
- saved_output.log = gdb_stdlog;
- saved_output.targ = gdb_stdtarg;
- saved_output.targerr = gdb_stdtargerr;
-
- /* If something is being redirected, then grab logfile. */
- ui_file *logfile_p = nullptr;
- if (logging_redirect || debug_redirect)
- {
- logfile_p = logfile.get ();
- saved_output.file_to_delete = logfile_p;
- }
+ saved_output.reset (new saved_output_files);
+ saved_output->out = gdb_stdout;
+ saved_output->err = gdb_stderr;
+ saved_output->log = gdb_stdlog;
+ saved_output->targ = gdb_stdtarg;
+ saved_output->targerr = gdb_stdtargerr;
/* If something is not being redirected, then a tee containing both the
logfile and stdout. */
+ ui_file *logfile_p = logfile.get ();
ui_file *tee = nullptr;
if (!logging_redirect || !debug_redirect)
{
tee = new tee_file (gdb_stdout, std::move (logfile));
- saved_output.file_to_delete = tee;
+ saved_output->file_to_delete.reset (tee);
}
+ else
+ saved_output->file_to_delete = std::move (logfile);
- /* Make sure that the call to logfile's dtor does not delete the
- underlying pointer if we still keep a reference to it. If
- logfile_p is not referenced as the file_to_delete, then either
- the logfile is not used (no redirection) and it should be
- deleted, or a tee took ownership of the pointer. */
- if (logfile_p != nullptr && saved_output.file_to_delete == logfile_p)
- logfile.release ();
+ saved_output->log_to_delete.reset
+ (new timestamped_file (debug_redirect ? logfile_p : tee));
gdb_stdout = logging_redirect ? logfile_p : tee;
- gdb_stdlog = debug_redirect ? logfile_p : tee;
+ gdb_stdlog = saved_output->log_to_delete.get ();
gdb_stderr = logging_redirect ? logfile_p : tee;
gdb_stdtarg = logging_redirect ? logfile_p : tee;
gdb_stdtargerr = logging_redirect ? logfile_p : tee;
}
else
{
- /* Delete the correct file. If it's the tee then the logfile will also
- be deleted. */
- delete saved_output.file_to_delete;
-
- gdb_stdout = saved_output.out;
- gdb_stderr = saved_output.err;
- gdb_stdlog = saved_output.log;
- gdb_stdtarg = saved_output.targ;
- gdb_stdtargerr = saved_output.targerr;
-
- saved_output.out = nullptr;
- saved_output.err = nullptr;
- saved_output.log = nullptr;
- saved_output.targ = nullptr;
- saved_output.targerr = nullptr;
- saved_output.file_to_delete = nullptr;
+ gdb_stdout = saved_output->out;
+ gdb_stderr = saved_output->err;
+ gdb_stdlog = saved_output->log;
+ gdb_stdtarg = saved_output->targ;
+ gdb_stdtargerr = saved_output->targerr;
+
+ saved_output.reset (nullptr);
}
}
diff --git a/gdb/cli/cli-logging.c b/gdb/cli/cli-logging.c
index bf12b1aa1f2..93f50a660cb 100644
--- a/gdb/cli/cli-logging.c
+++ b/gdb/cli/cli-logging.c
@@ -31,8 +31,8 @@ static void
show_logging_filename (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("The current logfile is \"%ps\".\n"),
- styled_string (file_name_style.style (), value));
+ gdb_printf (file, _("The current logfile is \"%ps\".\n"),
+ styled_string (file_name_style.style (), value));
}
static bool logging_overwrite;
@@ -57,9 +57,9 @@ show_logging_overwrite (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
if (logging_overwrite)
- fprintf_filtered (file, _("on: Logging overwrites the log file.\n"));
+ gdb_printf (file, _("on: Logging overwrites the log file.\n"));
else
- fprintf_filtered (file, _("off: Logging appends to the log file.\n"));
+ gdb_printf (file, _("off: Logging appends to the log file.\n"));
}
/* Value as configured by the user. */
@@ -78,9 +78,9 @@ show_logging_redirect (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
if (logging_redirect)
- fprintf_filtered(file, _("on: Output will go only to the log file.\n"));
+ gdb_printf (file, _("on: Output will go only to the log file.\n"));
else
- fprintf_filtered
+ gdb_printf
(file,
_("off: Output will go to both the screen and the log file.\n"));
}
@@ -90,10 +90,9 @@ show_logging_debug_redirect (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
if (debug_redirect)
- fprintf_filtered(file,
- _("on: Debug output will go only to the log file.\n"));
+ gdb_printf (file, _("on: Debug output will go only to the log file.\n"));
else
- fprintf_filtered
+ gdb_printf
(file,
_("off: Debug output will go to both the screen and the log file.\n"));
}
@@ -115,8 +114,8 @@ handle_redirections (int from_tty)
{
if (!saved_filename.empty ())
{
- printf_filtered ("Already logging to %s.\n",
- saved_filename.c_str ());
+ gdb_printf ("Already logging to %s.\n",
+ saved_filename.c_str ());
return;
}
@@ -128,18 +127,18 @@ handle_redirections (int from_tty)
if (from_tty)
{
if (!logging_redirect)
- printf_filtered ("Copying output to %s.\n",
- logging_filename.c_str ());
+ gdb_printf ("Copying output to %s.\n",
+ logging_filename.c_str ());
else
- printf_filtered ("Redirecting output to %s.\n",
- logging_filename.c_str ());
+ gdb_printf ("Redirecting output to %s.\n",
+ logging_filename.c_str ());
if (!debug_redirect)
- printf_filtered ("Copying debug output to %s.\n",
- logging_filename.c_str ());
+ gdb_printf ("Copying debug output to %s.\n",
+ logging_filename.c_str ());
else
- printf_filtered ("Redirecting debug output to %s.\n",
- logging_filename.c_str ());
+ gdb_printf ("Redirecting debug output to %s.\n",
+ logging_filename.c_str ());
}
saved_filename = logging_filename;
@@ -177,8 +176,8 @@ set_logging_off (const char *args, int from_tty)
pop_output_files ();
if (from_tty)
- printf_filtered ("Done logging to %s.\n",
- saved_filename.c_str ());
+ gdb_printf ("Done logging to %s.\n",
+ saved_filename.c_str ());
saved_filename.clear ();
}
@@ -199,9 +198,9 @@ show_logging_enabled (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
if (logging_enabled)
- fprintf_unfiltered (file, _("on: Logging is enabled.\n"));
+ gdb_printf (file, _("on: Logging is enabled.\n"));
else
- fprintf_unfiltered (file, _("off: Logging is disabled.\n"));
+ gdb_printf (file, _("off: Logging is disabled.\n"));
}
void _initialize_cli_logging ();
diff --git a/gdb/cli/cli-script.c b/gdb/cli/cli-script.c
index 55248de649b..aa73d5307b3 100644
--- a/gdb/cli/cli-script.c
+++ b/gdb/cli/cli-script.c
@@ -496,14 +496,14 @@ print_command_trace (const char *fmt, ...)
return;
for (i=0; i < command_nest_depth; i++)
- printf_filtered ("+");
+ gdb_printf ("+");
va_list args;
va_start (args, fmt);
- vprintf_filtered (fmt, args);
+ gdb_vprintf (fmt, args);
va_end (args);
- puts_filtered ("\n");
+ gdb_puts ("\n");
}
/* Helper for execute_control_command. */
@@ -1647,15 +1647,15 @@ show_user_1 (struct cmd_list_element *c, const char *prefix, const char *name,
{
struct command_line *cmdlines = c->user_commands.get ();
- fprintf_filtered (stream, "User %scommand \"",
- c->is_prefix () ? "prefix" : "");
+ gdb_printf (stream, "User %scommand \"",
+ c->is_prefix () ? "prefix" : "");
fprintf_styled (stream, title_style.style (), "%s%s",
prefix, name);
- fprintf_filtered (stream, "\":\n");
+ gdb_printf (stream, "\":\n");
if (cmdlines)
{
print_command_lines (current_uiout, cmdlines, 1);
- fputs_filtered ("\n", stream);
+ gdb_puts ("\n", stream);
}
}
diff --git a/gdb/cli/cli-setshow.c b/gdb/cli/cli-setshow.c
index 4f563d9e0e1..213573e443e 100644
--- a/gdb/cli/cli-setshow.c
+++ b/gdb/cli/cli-setshow.c
@@ -140,11 +140,11 @@ deprecated_show_value_hack (struct ui_file *ignore_file,
case var_optional_filename:
case var_filename:
case var_enum:
- printf_filtered ((" is \"%s\".\n"), value);
+ gdb_printf ((" is \"%s\".\n"), value);
break;
default:
- printf_filtered ((" is %s.\n"), value);
+ gdb_printf ((" is %s.\n"), value);
break;
}
}
@@ -659,7 +659,7 @@ get_setshow_command_value_string (const setting &var)
gdb_assert_not_reached ("bad var_type");
}
- return std::move (stb.string ());
+ return stb.release ();
}
diff --git a/gdb/cli/cli-style.c b/gdb/cli/cli-style.c
index 2fd00e9cc3e..3fd85f4aa86 100644
--- a/gdb/cli/cli-style.c
+++ b/gdb/cli/cli-style.c
@@ -38,6 +38,11 @@ bool cli_styling = true;
bool source_styling = true;
+/* True if disassembler styling is enabled. Note that this is only
+ consulted when cli_styling is true. */
+
+bool disassembler_styling = true;
+
/* Name of colors; must correspond to ui_file_style::basic_color. */
static const char * const cli_colors[] = {
"none",
@@ -182,9 +187,9 @@ do_show (const char *what, struct ui_file *file,
const char *value)
{
cli_style_option *cso = (cli_style_option *) cmd->context ();
- fputs_filtered (_("The "), file);
+ gdb_puts (_("The "), file);
fprintf_styled (file, cso->style (), _("\"%s\" style"), cso->name ());
- fprintf_filtered (file, _(" %s is: %s\n"), what, value);
+ gdb_printf (file, _(" %s is: %s\n"), what, value);
}
/* See cli-style.h. */
@@ -274,6 +279,14 @@ cli_style_option::add_setshow_commands (enum command_class theclass,
static cmd_list_element *style_set_list;
static cmd_list_element *style_show_list;
+/* The command list for 'set style disassembler'. */
+
+static cmd_list_element *style_disasm_set_list;
+
+/* The command list for 'show style disassembler'. */
+
+static cmd_list_element *style_disasm_show_list;
+
static void
set_style_enabled (const char *args, int from_tty, struct cmd_list_element *c)
{
@@ -286,9 +299,9 @@ show_style_enabled (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
if (cli_styling)
- fprintf_filtered (file, _("CLI output styling is enabled.\n"));
+ gdb_printf (file, _("CLI output styling is enabled.\n"));
else
- fprintf_filtered (file, _("CLI output styling is disabled.\n"));
+ gdb_printf (file, _("CLI output styling is disabled.\n"));
}
static void
@@ -296,9 +309,21 @@ show_style_sources (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
if (source_styling)
- fprintf_filtered (file, _("Source code styling is enabled.\n"));
+ gdb_printf (file, _("Source code styling is enabled.\n"));
+ else
+ gdb_printf (file, _("Source code styling is disabled.\n"));
+}
+
+/* Implement 'show style disassembler'. */
+
+static void
+show_style_disassembler (struct ui_file *file, int from_tty,
+ struct cmd_list_element *c, const char *value)
+{
+ if (disassembler_styling)
+ gdb_printf (file, _("Disassembler output styling is enabled.\n"));
else
- fprintf_filtered (file, _("Source code styling is disabled.\n"));
+ gdb_printf (file, _("Disassembler output styling is disabled.\n"));
}
void _initialize_cli_style ();
@@ -337,6 +362,25 @@ available if the appropriate extension is available at runtime."
), set_style_enabled, show_style_sources,
&style_set_list, &style_show_list);
+ add_setshow_prefix_cmd ("disassembler", no_class,
+ _("\
+Style-specific settings for the disassembler.\n\
+Configure various disassembler style-related variables."),
+ _("\
+Style-specific settings for the disassembler.\n\
+Configure various disassembler style-related variables."),
+ &style_disasm_set_list, &style_disasm_show_list,
+ &style_set_list, &style_show_list);
+
+ add_setshow_boolean_cmd ("enabled", no_class, &disassembler_styling, _("\
+Set whether disassembler output styling is enabled."), _("\
+Show whether disassembler output styling is enabled."), _("\
+If enabled, disassembler output is styled. Disassembler highlighting\n\
+requires the Python Pygments library, if this library is not available\n\
+then disassembler highlighting will not be possible."
+ ), set_style_enabled, show_style_disassembler,
+ &style_disasm_set_list, &style_disasm_show_list);
+
file_name_style.add_setshow_commands (no_class, _("\
Filename display styling.\n\
Configure filename colors and display intensity."),
diff --git a/gdb/cli/cli-style.h b/gdb/cli/cli-style.h
index 3333c72f65a..f69df47098c 100644
--- a/gdb/cli/cli-style.h
+++ b/gdb/cli/cli-style.h
@@ -128,6 +128,9 @@ extern cli_style_option version_style;
/* True if source styling is enabled. */
extern bool source_styling;
+/* True if disassembler styling is enabled. */
+extern bool disassembler_styling;
+
/* True if styling is enabled. */
extern bool cli_styling;
diff --git a/gdb/cli/cli-utils.c b/gdb/cli/cli-utils.c
index d612b155e11..3d9311557a8 100644
--- a/gdb/cli/cli-utils.c
+++ b/gdb/cli/cli-utils.c
@@ -100,7 +100,7 @@ get_number_trailer (const char **pp, int trailer)
retval = value_as_long (val);
else
{
- printf_filtered (_("History value must have integer type.\n"));
+ gdb_printf (_("History value must have integer type.\n"));
retval = 0;
}
}
@@ -122,8 +122,8 @@ get_number_trailer (const char **pp, int trailer)
retval = (int) longest_val;
else
{
- printf_filtered (_("Convenience variable must "
- "have integer value.\n"));
+ gdb_printf (_("Convenience variable must "
+ "have integer value.\n"));
retval = 0;
}
}
diff --git a/gdb/coff-pe-read.c b/gdb/coff-pe-read.c
index c2dc3cd6391..72bd43b23d8 100644
--- a/gdb/coff-pe-read.c
+++ b/gdb/coff-pe-read.c
@@ -100,45 +100,14 @@ read_pe_section_index (const char *section_name)
static int
get_pe_section_index (const char *section_name,
- struct read_pe_section_data *sections,
- int nb_sections)
+ const std::vector<read_pe_section_data> &sections)
{
- int i;
-
- for (i = 0; i < nb_sections; i++)
+ for (int i = 0; i < sections.size (); i++)
if (sections[i].section_name == section_name)
return i;
return PE_SECTION_INDEX_INVALID;
}
-/* Structure used by get_section_vmas function below
- to access section_data array and the size of the array
- stored in nb_sections field. */
-struct pe_sections_info
-{
- int nb_sections;
- struct read_pe_section_data *sections;
-};
-
-/* Record the virtual memory address of a section. */
-
-static void
-get_section_vmas (bfd *abfd, asection *sectp, void *context)
-{
- struct pe_sections_info *data = (struct pe_sections_info *) context;
- struct read_pe_section_data *sections = data->sections;
- int sectix = get_pe_section_index (sectp->name, sections,
- data->nb_sections);
-
- if (sectix != PE_SECTION_INDEX_INVALID)
- {
- /* Data within the section start at rva_start in the pe and at
- bfd_get_section_vma() within memory. Store the offset. */
-
- sections[sectix].vma_offset
- = bfd_section_vma (sectp) - sections[sectix].rva_start;
- }
-}
/* Create a minimal symbol entry for an exported symbol.
SYM_NAME contains the exported name or NULL if exported by ordinal,
@@ -174,10 +143,10 @@ add_pe_exported_sym (minimal_symbol_reader &reader,
= string_printf ("%s!%s", dll_name, bare_name.c_str ());
if ((section_data->ms_type == mst_unknown) && debug_coff_pe_read)
- fprintf_unfiltered (gdb_stdlog , _("Unknown section type for \"%s\""
- " for entry \"%s\" in dll \"%s\"\n"),
- section_data->section_name.c_str (), sym_name,
- dll_name);
+ gdb_printf (gdb_stdlog , _("Unknown section type for \"%s\""
+ " for entry \"%s\" in dll \"%s\"\n"),
+ section_data->section_name.c_str (), sym_name,
+ dll_name);
reader.record_with_info (qualified_name.c_str (), vma, section_data->ms_type,
section_data->index);
@@ -186,8 +155,8 @@ add_pe_exported_sym (minimal_symbol_reader &reader,
reader.record_with_info (bare_name.c_str (), vma, section_data->ms_type,
section_data->index);
if (debug_coff_pe_read > 1)
- fprintf_unfiltered (gdb_stdlog, _("Adding exported symbol \"%s\""
- " in dll \"%s\"\n"), sym_name, dll_name);
+ gdb_printf (gdb_stdlog, _("Adding exported symbol \"%s\""
+ " in dll \"%s\"\n"), sym_name, dll_name);
}
/* Create a minimal symbol entry for an exported forward symbol.
@@ -209,16 +178,13 @@ add_pe_forwarded_sym (minimal_symbol_reader &reader,
struct bound_minimal_symbol msymbol;
enum minimal_symbol_type msymtype;
int forward_dll_name_len = strlen (forward_dll_name);
- int forward_func_name_len = strlen (forward_func_name);
- int forward_len = forward_dll_name_len + forward_func_name_len + 2;
- char *forward_qualified_name = (char *) alloca (forward_len);
short section;
- xsnprintf (forward_qualified_name, forward_len, "%s!%s", forward_dll_name,
- forward_func_name);
-
+ std::string forward_qualified_name = string_printf ("%s!%s",
+ forward_dll_name,
+ forward_func_name);
- msymbol = lookup_bound_minimal_symbol (forward_qualified_name);
+ msymbol = lookup_bound_minimal_symbol (forward_qualified_name.c_str ());
if (!msymbol.minsym)
{
@@ -226,26 +192,26 @@ add_pe_forwarded_sym (minimal_symbol_reader &reader,
for (i = 0; i < forward_dll_name_len; i++)
forward_qualified_name[i] = tolower (forward_qualified_name[i]);
- msymbol = lookup_bound_minimal_symbol (forward_qualified_name);
+ msymbol = lookup_bound_minimal_symbol (forward_qualified_name.c_str ());
}
if (!msymbol.minsym)
{
if (debug_coff_pe_read)
- fprintf_unfiltered (gdb_stdlog, _("Unable to find function \"%s\" in"
- " dll \"%s\", forward of \"%s\" in dll \"%s\"\n"),
- forward_func_name, forward_dll_name, sym_name,
- dll_name);
+ gdb_printf (gdb_stdlog, _("Unable to find function \"%s\" in"
+ " dll \"%s\", forward of \"%s\" in dll \"%s\"\n"),
+ forward_func_name, forward_dll_name, sym_name,
+ dll_name);
return 0;
}
if (debug_coff_pe_read > 1)
- fprintf_unfiltered (gdb_stdlog, _("Adding forwarded exported symbol"
- " \"%s\" in dll \"%s\", pointing to \"%s\"\n"),
- sym_name, dll_name, forward_qualified_name);
+ gdb_printf (gdb_stdlog, _("Adding forwarded exported symbol"
+ " \"%s\" in dll \"%s\", pointing to \"%s\"\n"),
+ sym_name, dll_name, forward_qualified_name.c_str ());
- vma = BMSYMBOL_VALUE_ADDRESS (msymbol);
- msymtype = MSYMBOL_TYPE (msymbol.minsym);
+ vma = msymbol.value_address ();
+ msymtype = msymbol.minsym->type ();
section = msymbol.minsym->section_index ();
/* Generate a (hopefully unique) qualified name using the first part
@@ -342,16 +308,10 @@ read_pe_exported_syms (minimal_symbol_reader &reader,
unsigned long exp_funcbase;
unsigned char *expdata, *erva;
unsigned long name_rvas, ordinals, nexp, ordbase;
- char *dll_name = (char *) bfd_get_filename (dll);
int otherix = PE_SECTION_TABLE_SIZE;
int is_pe64 = 0;
int is_pe32 = 0;
- /* Array elements are for text, data and bss in that order
- Initialization with RVA_START > RVA_END guarantees that
- unused sections won't be matched. */
- struct pe_sections_info pe_sections_info;
-
char const *target = bfd_get_target (objfile->obfd);
std::vector<struct read_pe_section_data> section_data
@@ -428,14 +388,14 @@ read_pe_exported_syms (minimal_symbol_reader &reader,
if (strcmp (sname, ".edata") != 0)
{
if (debug_coff_pe_read)
- fprintf_unfiltered (gdb_stdlog, _("Export RVA for dll "
- "\"%s\" is in section \"%s\"\n"),
- dll_name, sname);
+ gdb_printf (gdb_stdlog, _("Export RVA for dll "
+ "\"%s\" is in section \"%s\"\n"),
+ bfd_get_filename (dll), sname);
}
else if (export_opthdrrva != vaddr && debug_coff_pe_read)
- fprintf_unfiltered (gdb_stdlog, _("Wrong value of export RVA"
- " for dll \"%s\": 0x%lx instead of 0x%lx\n"),
- dll_name, export_opthdrrva, vaddr);
+ gdb_printf (gdb_stdlog, _("Wrong value of export RVA"
+ " for dll \"%s\": 0x%lx instead of 0x%lx\n"),
+ bfd_get_filename (dll), export_opthdrrva, vaddr);
expptr = fptr + (export_opthdrrva - vaddr);
break;
}
@@ -520,20 +480,27 @@ read_pe_exported_syms (minimal_symbol_reader &reader,
exp_funcbase = pe_as32 (expdata + 28);
/* Use internal dll name instead of full pathname. */
- dll_name = (char *) (pe_as32 (expdata + 12) + erva);
+ char *dll_name = (char *) (pe_as32 (expdata + 12) + erva);
- pe_sections_info.nb_sections = otherix;
- pe_sections_info.sections = section_data.data ();
-
- bfd_map_over_sections (dll, get_section_vmas, &pe_sections_info);
+ for (asection *sectp : gdb_bfd_sections (dll))
+ {
+ int sectix = get_pe_section_index (sectp->name, section_data);
+ if (sectix != PE_SECTION_INDEX_INVALID)
+ {
+ /* Data within the section start at rva_start in the pe and at
+ bfd_get_section_vma() within memory. Store the offset. */
+ section_data[sectix].vma_offset
+ = bfd_section_vma (sectp) - section_data[sectix].rva_start;
+ }
+ }
/* Truncate name at first dot. Should maybe also convert to all
lower case for convenience on Windows. */
read_pe_truncate_name (dll_name);
if (debug_coff_pe_read)
- fprintf_unfiltered (gdb_stdlog, _("DLL \"%s\" has %ld export entries,"
- " base=%ld\n"), dll_name, nexp, ordbase);
+ gdb_printf (gdb_stdlog, _("DLL \"%s\" has %ld export entries,"
+ " base=%ld\n"), dll_name, nexp, ordbase);
nbforward = 0;
nbnormal = 0;
/* Iterate through the list of symbols. */
@@ -558,20 +525,20 @@ read_pe_exported_syms (minimal_symbol_reader &reader,
/* First handle forward cases. */
if (func_rva >= export_rva && func_rva < export_rva + export_size)
{
- char *forward_name = (char *) (erva + func_rva);
- char *funcname = (char *) (erva + name_rva);
- char *forward_dll_name = forward_name;
- char *forward_func_name = forward_name;
- char *sep = strrchr (forward_name, '.');
-
- if (sep)
+ const char *forward_name = (const char *) (erva + func_rva);
+ const char *funcname = (const char *) (erva + name_rva);
+ const char *forward_dll_name = forward_name;
+ const char *forward_func_name = forward_name;
+ const char *sep = strrchr (forward_name, '.');
+
+ std::string name_storage;
+ if (sep != nullptr)
{
int len = (int) (sep - forward_name);
- forward_dll_name = (char *) alloca (len + 1);
- strncpy (forward_dll_name, forward_name, len);
- forward_dll_name[len] = '\0';
- forward_func_name = ++sep;
+ name_storage = std::string (forward_name, len);
+ forward_dll_name = name_storage.c_str ();
+ forward_func_name = sep + 1;
}
if (add_pe_forwarded_sym (reader, funcname, forward_dll_name,
forward_func_name, ordinal,
@@ -585,7 +552,7 @@ read_pe_exported_syms (minimal_symbol_reader &reader,
if ((func_rva >= section_data[sectix].rva_start)
&& (func_rva < section_data[sectix].rva_end))
{
- char *sym_name = (char *) (erva + name_rva);
+ const char *sym_name = (const char *) (erva + name_rva);
section_found = 1;
add_pe_exported_sym (reader, sym_name, func_rva, ordinal,
@@ -596,7 +563,7 @@ read_pe_exported_syms (minimal_symbol_reader &reader,
}
if (!section_found)
{
- char *funcname = (char *) (erva + name_rva);
+ const char *funcname = (const char *) (erva + name_rva);
if (name_rva == 0)
{
@@ -605,16 +572,16 @@ read_pe_exported_syms (minimal_symbol_reader &reader,
++nbnormal;
}
else if (debug_coff_pe_read)
- fprintf_unfiltered (gdb_stdlog, _("Export name \"%s\" ord. %lu,"
- " RVA 0x%lx in dll \"%s\" not handled\n"),
- funcname, ordinal, func_rva, dll_name);
+ gdb_printf (gdb_stdlog, _("Export name \"%s\" ord. %lu,"
+ " RVA 0x%lx in dll \"%s\" not handled\n"),
+ funcname, ordinal, func_rva, dll_name);
}
}
if (debug_coff_pe_read)
- fprintf_unfiltered (gdb_stdlog, _("Finished reading \"%s\", exports %ld,"
- " forwards %ld, total %ld/%ld.\n"), dll_name, nbnormal,
- nbforward, nbnormal + nbforward, nexp);
+ gdb_printf (gdb_stdlog, _("Finished reading \"%s\", exports %ld,"
+ " forwards %ld, total %ld/%ld.\n"), dll_name, nbnormal,
+ nbforward, nbnormal + nbforward, nexp);
}
/* Extract from ABFD the offset of the .text section.
@@ -686,7 +653,7 @@ static void
show_debug_coff_pe_read (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Coff PE read debugging is %s.\n"), value);
+ gdb_printf (file, _("Coff PE read debugging is %s.\n"), value);
}
/* Adds "Set/show debug coff_pe_read" commands. */
diff --git a/gdb/coffread.c b/gdb/coffread.c
index e264918fb3a..c5e977330be 100644
--- a/gdb/coffread.c
+++ b/gdb/coffread.c
@@ -24,7 +24,7 @@
#include "breakpoint.h"
#include "bfd.h"
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
#include <ctype.h>
#include "coff/internal.h" /* Internal format of COFF symbols in BFD */
@@ -365,18 +365,18 @@ coff_alloc_type (int index)
it indicates the start of data for one original source file. */
static void
-coff_start_symtab (struct objfile *objfile, const char *name)
+coff_start_compunit_symtab (struct objfile *objfile, const char *name)
{
within_function = 0;
- start_symtab (objfile,
- name,
+ start_compunit_symtab (objfile,
+ name,
/* We never know the directory name for COFF. */
- NULL,
+ NULL,
/* The start address is irrelevant, since we call
- set_last_source_start_addr in coff_end_symtab. */
- 0,
+ set_last_source_start_addr in coff_end_compunit_symtab. */
+ 0,
/* Let buildsym.c deduce the language for this symtab. */
- language_unknown);
+ language_unknown);
record_debugformat ("COFF");
}
@@ -400,11 +400,11 @@ complete_symtab (const char *name, CORE_ADDR start_addr, unsigned int size)
list of all such. */
static void
-coff_end_symtab (struct objfile *objfile)
+coff_end_compunit_symtab (struct objfile *objfile)
{
set_last_source_start_addr (current_source_start_addr);
- end_symtab (current_source_end_addr, SECT_OFF_TEXT (objfile));
+ end_compunit_symtab (current_source_end_addr, SECT_OFF_TEXT (objfile));
/* Reinitialize for beginning of new file. */
set_last_source_file (NULL);
@@ -647,7 +647,7 @@ coff_symfile_read (struct objfile *objfile, symfile_add_flags symfile_flags)
or "_imp_", get rid of the prefix, and search the minimal
symbol in OBJFILE. Note that 'maintenance print msymbols'
shows that type of these "_imp_XXXX" symbols is mst_data. */
- if (MSYMBOL_TYPE (msym) == mst_data)
+ if (msym->type () == mst_data)
{
const char *name1 = NULL;
@@ -669,8 +669,8 @@ coff_symfile_read (struct objfile *objfile, symfile_add_flags symfile_flags)
respectively in OBJFILE. Set the type of symbol "foo"
as 'mst_solib_trampoline'. */
if (found.minsym != NULL
- && MSYMBOL_TYPE (found.minsym) == mst_text)
- MSYMBOL_TYPE (found.minsym) = mst_solib_trampoline;
+ && found.minsym->type () == mst_text)
+ found.minsym->set_type (mst_solib_trampoline);
}
}
}
@@ -702,11 +702,9 @@ coff_symfile_read (struct objfile *objfile, symfile_add_flags symfile_flags)
if (dwarf2_has_info (objfile, NULL))
{
/* DWARF2 sections. */
- dwarf2_build_psymtabs (objfile);
+ dwarf2_initialize_objfile (objfile);
}
- dwarf2_build_frame_info (objfile);
-
/* Try to add separate debug file if no symbols table found. */
if (!objfile->has_partial_symbols ())
{
@@ -812,7 +810,7 @@ coff_symtab_read (minimal_symbol_reader &reader,
type_vector_length = INITIAL_TYPE_VECTOR_LENGTH;
type_vector = XCNEWVEC (struct type *, type_vector_length);
- coff_start_symtab (objfile, "");
+ coff_start_compunit_symtab (objfile, "");
symnum = 0;
while (symnum < nsyms)
@@ -824,10 +822,10 @@ coff_symtab_read (minimal_symbol_reader &reader,
if (cs->c_symnum == next_file_symnum && cs->c_sclass != C_FILE)
{
if (get_last_source_file ())
- coff_end_symtab (objfile);
+ coff_end_compunit_symtab (objfile);
- coff_start_symtab (objfile, "_globals_");
- /* coff_start_symtab will set the language of this symtab to
+ coff_start_compunit_symtab (objfile, "_globals_");
+ /* coff_start_compunit_symtab will set the language of this symtab to
language_unknown, since such a ``file name'' is not
recognized. Override that with the minimal language to
allow printing values in this symtab. */
@@ -890,8 +888,8 @@ coff_symtab_read (minimal_symbol_reader &reader,
containing debugging information. */
if (get_last_source_file ())
{
- coff_end_symtab (objfile);
- coff_start_symtab (objfile, filestring);
+ coff_end_compunit_symtab (objfile);
+ coff_start_compunit_symtab (objfile, filestring);
}
in_source_file = 1;
break;
@@ -1026,7 +1024,7 @@ coff_symtab_read (minimal_symbol_reader &reader,
sym = process_coff_symbol
(cs, &main_aux, objfile);
- SYMBOL_VALUE (sym) = tmpaddr + offset;
+ sym->set_value_longest (tmpaddr + offset);
sym->set_section_index (sec);
}
}
@@ -1170,14 +1168,14 @@ coff_symtab_read (minimal_symbol_reader &reader,
}
if (get_last_source_file ())
- coff_end_symtab (objfile);
+ coff_end_compunit_symtab (objfile);
/* Patch up any opaque types (references to types that are not defined
in the file where they are referenced, e.g. "struct foo *bar"). */
{
for (compunit_symtab *cu : objfile->compunits ())
{
- for (symtab *s : compunit_filetabs (cu))
+ for (symtab *s : cu->filetabs ())
patch_opaque_types (s);
}
}
@@ -1478,22 +1476,21 @@ patch_type (struct type *type, struct type *real_type)
static void
patch_opaque_types (struct symtab *s)
{
- const struct block *b;
struct block_iterator iter;
struct symbol *real_sym;
/* Go through the per-file symbols only. */
- b = BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (s), STATIC_BLOCK);
+ const struct block *b = s->compunit ()->blockvector ()->static_block ();
ALL_BLOCK_SYMBOLS (b, iter, real_sym)
{
/* Find completed typedefs to use to fix opaque ones.
Remove syms from the chain when their types are stored,
but search the whole chain, as there may be several syms
from different files with the same name. */
- if (SYMBOL_CLASS (real_sym) == LOC_TYPEDEF
- && SYMBOL_DOMAIN (real_sym) == VAR_DOMAIN
- && SYMBOL_TYPE (real_sym)->code () == TYPE_CODE_PTR
- && TYPE_LENGTH (TYPE_TARGET_TYPE (SYMBOL_TYPE (real_sym))) != 0)
+ if (real_sym->aclass () == LOC_TYPEDEF
+ && real_sym->domain () == VAR_DOMAIN
+ && real_sym->type ()->code () == TYPE_CODE_PTR
+ && TYPE_LENGTH (TYPE_TARGET_TYPE (real_sym->type ())) != 0)
{
const char *name = real_sym->linkage_name ();
int hash = hashname (name);
@@ -1506,29 +1503,21 @@ patch_opaque_types (struct symtab *s)
&& strcmp (name + 1, sym->linkage_name () + 1) == 0)
{
if (prev)
- {
- SYMBOL_VALUE_CHAIN (prev) = SYMBOL_VALUE_CHAIN (sym);
- }
+ prev->set_value_chain (sym->value_chain ());
else
- {
- opaque_type_chain[hash] = SYMBOL_VALUE_CHAIN (sym);
- }
+ opaque_type_chain[hash] = sym->value_chain ();
- patch_type (SYMBOL_TYPE (sym), SYMBOL_TYPE (real_sym));
+ patch_type (sym->type (), real_sym->type ());
if (prev)
- {
- sym = SYMBOL_VALUE_CHAIN (prev);
- }
+ sym = prev->value_chain ();
else
- {
- sym = opaque_type_chain[hash];
- }
+ sym = opaque_type_chain[hash];
}
else
{
prev = sym;
- sym = SYMBOL_VALUE_CHAIN (sym);
+ sym->set_value_chain (sym);
}
}
}
@@ -1538,7 +1527,7 @@ patch_opaque_types (struct symtab *s)
static int
coff_reg_to_regnum (struct symbol *sym, struct gdbarch *gdbarch)
{
- return gdbarch_sdb_reg_to_regnum (gdbarch, SYMBOL_VALUE (sym));
+ return gdbarch_sdb_reg_to_regnum (gdbarch, sym->value_longest ());
}
static const struct symbol_register_ops coff_register_funcs = {
@@ -1564,18 +1553,19 @@ process_coff_symbol (struct coff_symbol *cs,
sym->compute_and_set_names (name, true, objfile->per_bfd);
/* default assumptions */
- SYMBOL_VALUE (sym) = cs->c_value;
- SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
+ sym->set_value_longest (cs->c_value);
+ sym->set_domain (VAR_DOMAIN);
sym->set_section_index (cs_to_section (cs, objfile));
if (ISFCN (cs->c_type))
{
- SYMBOL_VALUE (sym) += objfile->text_section_offset ();
- SYMBOL_TYPE (sym) =
- lookup_function_type (decode_function_type (cs, cs->c_type,
- aux, objfile));
+ sym->set_value_longest
+ (sym->value_longest () + objfile->text_section_offset ());
+ sym->set_type
+ (lookup_function_type (decode_function_type (cs, cs->c_type,
+ aux, objfile)));
- SYMBOL_ACLASS_INDEX (sym) = LOC_BLOCK;
+ sym->set_aclass_index (LOC_BLOCK);
if (cs->c_sclass == C_STAT || cs->c_sclass == C_THUMBSTAT
|| cs->c_sclass == C_THUMBSTATFUNC)
add_symbol_to_list (sym, get_file_symbols ());
@@ -1585,34 +1575,32 @@ process_coff_symbol (struct coff_symbol *cs,
}
else
{
- SYMBOL_TYPE (sym) = decode_type (cs, cs->c_type, aux, objfile);
+ sym->set_type (decode_type (cs, cs->c_type, aux, objfile));
switch (cs->c_sclass)
{
case C_NULL:
break;
case C_AUTO:
- SYMBOL_ACLASS_INDEX (sym) = LOC_LOCAL;
+ sym->set_aclass_index (LOC_LOCAL);
add_symbol_to_list (sym, get_local_symbols ());
break;
case C_THUMBEXT:
case C_THUMBEXTFUNC:
case C_EXT:
- SYMBOL_ACLASS_INDEX (sym) = LOC_STATIC;
- SET_SYMBOL_VALUE_ADDRESS (sym,
- (CORE_ADDR) cs->c_value
- + objfile->section_offsets[SECT_OFF_TEXT (objfile)]);
+ sym->set_aclass_index (LOC_STATIC);
+ sym->set_value_address ((CORE_ADDR) cs->c_value
+ + objfile->section_offsets[SECT_OFF_TEXT (objfile)]);
add_symbol_to_list (sym, get_global_symbols ());
break;
case C_THUMBSTAT:
case C_THUMBSTATFUNC:
case C_STAT:
- SYMBOL_ACLASS_INDEX (sym) = LOC_STATIC;
- SET_SYMBOL_VALUE_ADDRESS (sym,
- (CORE_ADDR) cs->c_value
- + objfile->section_offsets[SECT_OFF_TEXT (objfile)]);
+ sym->set_aclass_index (LOC_STATIC);
+ sym->set_value_address ((CORE_ADDR) cs->c_value
+ + objfile->section_offsets[SECT_OFF_TEXT (objfile)]);
if (within_function)
{
/* Static symbol of local scope. */
@@ -1629,8 +1617,8 @@ process_coff_symbol (struct coff_symbol *cs,
case C_GLBLREG:
#endif
case C_REG:
- SYMBOL_ACLASS_INDEX (sym) = coff_register_index;
- SYMBOL_VALUE (sym) = cs->c_value;
+ sym->set_aclass_index (coff_register_index);
+ sym->set_value_longest (cs->c_value);
add_symbol_to_list (sym, get_local_symbols ());
break;
@@ -1639,27 +1627,27 @@ process_coff_symbol (struct coff_symbol *cs,
break;
case C_ARG:
- SYMBOL_ACLASS_INDEX (sym) = LOC_ARG;
- SYMBOL_IS_ARGUMENT (sym) = 1;
+ sym->set_aclass_index (LOC_ARG);
+ sym->set_is_argument (1);
add_symbol_to_list (sym, get_local_symbols ());
break;
case C_REGPARM:
- SYMBOL_ACLASS_INDEX (sym) = coff_register_index;
- SYMBOL_IS_ARGUMENT (sym) = 1;
- SYMBOL_VALUE (sym) = cs->c_value;
+ sym->set_aclass_index (coff_register_index);
+ sym->set_is_argument (1);
+ sym->set_value_longest (cs->c_value);
add_symbol_to_list (sym, get_local_symbols ());
break;
case C_TPDEF:
- SYMBOL_ACLASS_INDEX (sym) = LOC_TYPEDEF;
- SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
+ sym->set_aclass_index (LOC_TYPEDEF);
+ sym->set_domain (VAR_DOMAIN);
/* If type has no name, give it one. */
- if (SYMBOL_TYPE (sym)->name () == 0)
+ if (sym->type ()->name () == 0)
{
- if (SYMBOL_TYPE (sym)->code () == TYPE_CODE_PTR
- || SYMBOL_TYPE (sym)->code () == TYPE_CODE_FUNC)
+ if (sym->type ()->code () == TYPE_CODE_PTR
+ || sym->type ()->code () == TYPE_CODE_FUNC)
{
/* If we are giving a name to a type such as
"pointer to foo" or "function returning foo", we
@@ -1682,7 +1670,7 @@ process_coff_symbol (struct coff_symbol *cs,
;
}
else
- SYMBOL_TYPE (sym)->set_name (xstrdup (sym->linkage_name ()));
+ sym->type ()->set_name (xstrdup (sym->linkage_name ()));
}
/* Keep track of any type which points to empty structured
@@ -1691,14 +1679,14 @@ process_coff_symbol (struct coff_symbol *cs,
not an empty structured type, though; the forward
references work themselves out via the magic of
coff_lookup_type. */
- if (SYMBOL_TYPE (sym)->code () == TYPE_CODE_PTR
- && TYPE_LENGTH (TYPE_TARGET_TYPE (SYMBOL_TYPE (sym))) == 0
- && TYPE_TARGET_TYPE (SYMBOL_TYPE (sym))->code ()
+ if (sym->type ()->code () == TYPE_CODE_PTR
+ && TYPE_LENGTH (TYPE_TARGET_TYPE (sym->type ())) == 0
+ && TYPE_TARGET_TYPE (sym->type ())->code ()
!= TYPE_CODE_UNDEF)
{
int i = hashname (sym->linkage_name ());
- SYMBOL_VALUE_CHAIN (sym) = opaque_type_chain[i];
+ sym->set_value_chain (opaque_type_chain[i]);
opaque_type_chain[i] = sym;
}
add_symbol_to_list (sym, get_file_symbols ());
@@ -1707,17 +1695,17 @@ process_coff_symbol (struct coff_symbol *cs,
case C_STRTAG:
case C_UNTAG:
case C_ENTAG:
- SYMBOL_ACLASS_INDEX (sym) = LOC_TYPEDEF;
- SYMBOL_DOMAIN (sym) = STRUCT_DOMAIN;
+ sym->set_aclass_index (LOC_TYPEDEF);
+ sym->set_domain (STRUCT_DOMAIN);
/* Some compilers try to be helpful by inventing "fake"
names for anonymous enums, structures, and unions, like
"~0fake" or ".0fake". Thanks, but no thanks... */
- if (SYMBOL_TYPE (sym)->name () == 0)
+ if (sym->type ()->name () == 0)
if (sym->linkage_name () != NULL
&& *sym->linkage_name () != '~'
&& *sym->linkage_name () != '.')
- SYMBOL_TYPE (sym)->set_name (xstrdup (sym->linkage_name ()));
+ sym->type ()->set_name (xstrdup (sym->linkage_name ()));
add_symbol_to_list (sym, get_file_symbols ());
break;
@@ -2098,9 +2086,9 @@ coff_read_enum_type (int index, int length, int lastsym,
name = obstack_strdup (&objfile->objfile_obstack, name);
sym->set_linkage_name (name);
- SYMBOL_ACLASS_INDEX (sym) = LOC_CONST;
- SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
- SYMBOL_VALUE (sym) = ms->c_value;
+ sym->set_aclass_index (LOC_CONST);
+ sym->set_domain (VAR_DOMAIN);
+ sym->set_value_longest (ms->c_value);
add_symbol_to_list (sym, symlist);
nsyms++;
break;
@@ -2143,10 +2131,10 @@ coff_read_enum_type (int index, int length, int lastsym,
{
struct symbol *xsym = syms->symbol[j];
- SYMBOL_TYPE (xsym) = type;
+ xsym->set_type (type);
type->field (n).set_name (xsym->linkage_name ());
- type->field (n).set_loc_enumval (SYMBOL_VALUE (xsym));
- if (SYMBOL_VALUE (xsym) < 0)
+ type->field (n).set_loc_enumval (xsym->value_longest ());
+ if (xsym->value_longest () < 0)
unsigned_enum = 0;
TYPE_FIELD_BITSIZE (type, n) = 0;
}
diff --git a/gdb/command.h b/gdb/command.h
index 1746fb4d581..d901da3c8cb 100644
--- a/gdb/command.h
+++ b/gdb/command.h
@@ -71,7 +71,7 @@ enum command_class
};
/* Types of "set" or "show" command. */
-typedef enum var_types
+enum var_types
{
/* "on" or "off". *VAR is a bool which is true for on,
false for off. */
@@ -120,8 +120,7 @@ typedef enum var_types
*VAR is a char pointer to the name of the element that we
find. */
var_enum
- }
-var_types;
+ };
/* Return true if a setting of type VAR_TYPE is backed with type T.
@@ -378,7 +377,10 @@ typedef void cmd_simple_func_ftype (const char *args, int from_tty);
struct cli_suppress_notification
{
/* Inferior, thread, frame selected notification suppressed? */
- int user_selected_context;
+ bool user_selected_context = false;
+
+ /* Normal stop event suppressed? */
+ bool normal_stop = false;
};
extern struct cli_suppress_notification cli_suppress_notification;
@@ -421,7 +423,7 @@ extern struct cmd_list_element *add_cmd_suppress_notification
(const char *name, enum command_class theclass,
cmd_simple_func_ftype *fun, const char *doc,
struct cmd_list_element **list,
- int *suppress_notification);
+ bool *suppress_notification);
extern struct cmd_list_element *add_alias_cmd (const char *,
cmd_list_element *,
@@ -467,7 +469,7 @@ extern struct cmd_list_element *add_prefix_cmd_suppress_notification
const char *doc, struct cmd_list_element **subcommands,
int allow_unknown,
struct cmd_list_element **list,
- int *suppress_notification);
+ bool *suppress_notification);
extern struct cmd_list_element *add_abbrev_prefix_cmd (const char *,
enum command_class,
@@ -615,7 +617,7 @@ extern cmd_list_element *add_com_alias (const char *name,
extern struct cmd_list_element *add_com_suppress_notification
(const char *name, enum command_class theclass,
cmd_simple_func_ftype *fun, const char *doc,
- int *supress_notification);
+ bool *supress_notification);
extern struct cmd_list_element *add_info (const char *,
cmd_simple_func_ftype *fun,
diff --git a/gdb/compile/compile-c-support.c b/gdb/compile/compile-c-support.c
index dd0dc914d97..81356f048be 100644
--- a/gdb/compile/compile-c-support.c
+++ b/gdb/compile/compile-c-support.c
@@ -161,23 +161,23 @@ print_one_macro (const char *name, const struct macro_definition *macro,
/* None of -Wno-builtin-macro-redefined, #undef first
or plain #define of the same value would avoid a warning. */
- fprintf_filtered (file, "#ifndef %s\n# define %s", name, name);
+ gdb_printf (file, "#ifndef %s\n# define %s", name, name);
if (macro->kind == macro_function_like)
{
int i;
- fputs_filtered ("(", file);
+ gdb_puts ("(", file);
for (i = 0; i < macro->argc; i++)
{
- fputs_filtered (macro->argv[i], file);
+ gdb_puts (macro->argv[i], file);
if (i + 1 < macro->argc)
- fputs_filtered (", ", file);
+ gdb_puts (", ", file);
}
- fputs_filtered (")", file);
+ gdb_puts (")", file);
}
- fprintf_filtered (file, " %s\n#endif\n", macro->replacement);
+ gdb_printf (file, " %s\n#endif\n", macro->replacement);
}
/* Write macro definitions at PC to FILE. */
@@ -218,8 +218,8 @@ generate_register_struct (struct ui_file *stream, struct gdbarch *gdbarch,
int i;
int seen = 0;
- fputs_unfiltered ("struct " COMPILE_I_SIMPLE_REGISTER_STRUCT_TAG " {\n",
- stream);
+ gdb_puts ("struct " COMPILE_I_SIMPLE_REGISTER_STRUCT_TAG " {\n",
+ stream);
if (!registers_used.empty ())
for (i = 0; i < gdbarch_num_regs (gdbarch); ++i)
@@ -241,12 +241,12 @@ generate_register_struct (struct ui_file *stream, struct gdbarch *gdbarch,
register types (typically flags or vectors), emit a
maximally-aligned array of the correct size. */
- fputs_unfiltered (" ", stream);
+ gdb_puts (" ", stream);
switch (regtype->code ())
{
case TYPE_CODE_PTR:
- fprintf_filtered (stream, "__gdb_uintptr %s",
- regname.c_str ());
+ gdb_printf (stream, "__gdb_uintptr %s",
+ regname.c_str ());
break;
case TYPE_CODE_INT:
@@ -257,12 +257,12 @@ generate_register_struct (struct ui_file *stream, struct gdbarch *gdbarch,
if (mode != NULL)
{
if (regtype->is_unsigned ())
- fputs_unfiltered ("unsigned ", stream);
- fprintf_unfiltered (stream,
- "int %s"
- " __attribute__ ((__mode__(__%s__)))",
- regname.c_str (),
- mode);
+ gdb_puts ("unsigned ", stream);
+ gdb_printf (stream,
+ "int %s"
+ " __attribute__ ((__mode__(__%s__)))",
+ regname.c_str (),
+ mode);
break;
}
}
@@ -270,22 +270,22 @@ generate_register_struct (struct ui_file *stream, struct gdbarch *gdbarch,
/* Fall through. */
default:
- fprintf_unfiltered (stream,
- " unsigned char %s[%s]"
- " __attribute__((__aligned__("
- "__BIGGEST_ALIGNMENT__)))",
- regname.c_str (),
- pulongest (TYPE_LENGTH (regtype)));
+ gdb_printf (stream,
+ " unsigned char %s[%s]"
+ " __attribute__((__aligned__("
+ "__BIGGEST_ALIGNMENT__)))",
+ regname.c_str (),
+ pulongest (TYPE_LENGTH (regtype)));
}
- fputs_unfiltered (";\n", stream);
+ gdb_puts (";\n", stream);
}
}
if (!seen)
- fputs_unfiltered (" char " COMPILE_I_SIMPLE_REGISTER_DUMMY ";\n",
- stream);
+ gdb_puts (" char " COMPILE_I_SIMPLE_REGISTER_DUMMY ";\n",
+ stream);
- fputs_unfiltered ("};\n\n", stream);
+ gdb_puts ("};\n\n", stream);
}
/* C-language policy to emit a push user expression pragma into BUF. */
@@ -294,7 +294,7 @@ struct c_push_user_expression
{
void push_user_expression (struct ui_file *buf)
{
- fputs_unfiltered ("#pragma GCC user_expression\n", buf);
+ gdb_puts ("#pragma GCC user_expression\n", buf);
}
};
@@ -320,32 +320,32 @@ struct c_add_code_header
switch (type)
{
case COMPILE_I_SIMPLE_SCOPE:
- fputs_unfiltered ("void "
- GCC_FE_WRAPPER_FUNCTION
- " (struct "
- COMPILE_I_SIMPLE_REGISTER_STRUCT_TAG
- " *"
- COMPILE_I_SIMPLE_REGISTER_ARG_NAME
- ") {\n",
- buf);
+ gdb_puts ("void "
+ GCC_FE_WRAPPER_FUNCTION
+ " (struct "
+ COMPILE_I_SIMPLE_REGISTER_STRUCT_TAG
+ " *"
+ COMPILE_I_SIMPLE_REGISTER_ARG_NAME
+ ") {\n",
+ buf);
break;
case COMPILE_I_PRINT_ADDRESS_SCOPE:
case COMPILE_I_PRINT_VALUE_SCOPE:
/* <string.h> is needed for a memcpy call below. */
- fputs_unfiltered ("#include <string.h>\n"
- "void "
- GCC_FE_WRAPPER_FUNCTION
- " (struct "
- COMPILE_I_SIMPLE_REGISTER_STRUCT_TAG
- " *"
- COMPILE_I_SIMPLE_REGISTER_ARG_NAME
- ", "
- COMPILE_I_PRINT_OUT_ARG_TYPE
- " "
- COMPILE_I_PRINT_OUT_ARG
- ") {\n",
- buf);
+ gdb_puts ("#include <string.h>\n"
+ "void "
+ GCC_FE_WRAPPER_FUNCTION
+ " (struct "
+ COMPILE_I_SIMPLE_REGISTER_STRUCT_TAG
+ " *"
+ COMPILE_I_SIMPLE_REGISTER_ARG_NAME
+ ", "
+ COMPILE_I_PRINT_OUT_ARG_TYPE
+ " "
+ COMPILE_I_PRINT_OUT_ARG
+ ") {\n",
+ buf);
break;
case COMPILE_I_RAW_SCOPE:
@@ -369,7 +369,7 @@ struct c_add_code_footer
case COMPILE_I_SIMPLE_SCOPE:
case COMPILE_I_PRINT_ADDRESS_SCOPE:
case COMPILE_I_PRINT_VALUE_SCOPE:
- fputs_unfiltered ("}\n", buf);
+ gdb_puts ("}\n", buf);
break;
case COMPILE_I_RAW_SCOPE:
@@ -393,22 +393,22 @@ struct c_add_input
{
case COMPILE_I_PRINT_ADDRESS_SCOPE:
case COMPILE_I_PRINT_VALUE_SCOPE:
- fprintf_unfiltered (buf,
- "__auto_type " COMPILE_I_EXPR_VAL " = %s;\n"
- "typeof (%s) *" COMPILE_I_EXPR_PTR_TYPE ";\n"
- "memcpy (" COMPILE_I_PRINT_OUT_ARG ", %s"
- COMPILE_I_EXPR_VAL ",\n"
- "sizeof (*" COMPILE_I_EXPR_PTR_TYPE "));\n"
- , input, input,
- (type == COMPILE_I_PRINT_ADDRESS_SCOPE
- ? "&" : ""));
+ gdb_printf (buf,
+ "__auto_type " COMPILE_I_EXPR_VAL " = %s;\n"
+ "typeof (%s) *" COMPILE_I_EXPR_PTR_TYPE ";\n"
+ "memcpy (" COMPILE_I_PRINT_OUT_ARG ", %s"
+ COMPILE_I_EXPR_VAL ",\n"
+ "sizeof (*" COMPILE_I_EXPR_PTR_TYPE "));\n"
+ , input, input,
+ (type == COMPILE_I_PRINT_ADDRESS_SCOPE
+ ? "&" : ""));
break;
default:
- fputs_unfiltered (input, buf);
+ gdb_puts (input, buf);
break;
}
- fputs_unfiltered ("\n", buf);
+ gdb_puts ("\n", buf);
}
};
@@ -419,7 +419,7 @@ struct cplus_push_user_expression
{
void push_user_expression (struct ui_file *buf)
{
- fputs_unfiltered ("#pragma GCC push_user_expression\n", buf);
+ gdb_puts ("#pragma GCC push_user_expression\n", buf);
}
};
@@ -429,7 +429,7 @@ struct cplus_pop_user_expression
{
void pop_user_expression (struct ui_file *buf)
{
- fputs_unfiltered ("#pragma GCC pop_user_expression\n", buf);
+ gdb_puts ("#pragma GCC pop_user_expression\n", buf);
}
};
@@ -444,33 +444,33 @@ struct cplus_add_code_header
switch (type)
{
case COMPILE_I_SIMPLE_SCOPE:
- fputs_unfiltered ("void "
- GCC_FE_WRAPPER_FUNCTION
- " (struct "
- COMPILE_I_SIMPLE_REGISTER_STRUCT_TAG
- " *"
- COMPILE_I_SIMPLE_REGISTER_ARG_NAME
- ") {\n",
- buf);
+ gdb_puts ("void "
+ GCC_FE_WRAPPER_FUNCTION
+ " (struct "
+ COMPILE_I_SIMPLE_REGISTER_STRUCT_TAG
+ " *"
+ COMPILE_I_SIMPLE_REGISTER_ARG_NAME
+ ") {\n",
+ buf);
break;
case COMPILE_I_PRINT_ADDRESS_SCOPE:
case COMPILE_I_PRINT_VALUE_SCOPE:
- fputs_unfiltered (
- "#include <cstring>\n"
- "#include <bits/move.h>\n"
- "void "
- GCC_FE_WRAPPER_FUNCTION
- " (struct "
- COMPILE_I_SIMPLE_REGISTER_STRUCT_TAG
- " *"
- COMPILE_I_SIMPLE_REGISTER_ARG_NAME
- ", "
- COMPILE_I_PRINT_OUT_ARG_TYPE
- " "
- COMPILE_I_PRINT_OUT_ARG
- ") {\n",
- buf);
+ gdb_puts (
+ "#include <cstring>\n"
+ "#include <bits/move.h>\n"
+ "void "
+ GCC_FE_WRAPPER_FUNCTION
+ " (struct "
+ COMPILE_I_SIMPLE_REGISTER_STRUCT_TAG
+ " *"
+ COMPILE_I_SIMPLE_REGISTER_ARG_NAME
+ ", "
+ COMPILE_I_PRINT_OUT_ARG_TYPE
+ " "
+ COMPILE_I_PRINT_OUT_ARG
+ ") {\n",
+ buf);
break;
case COMPILE_I_RAW_SCOPE:
@@ -494,7 +494,7 @@ struct cplus_add_input
{
case COMPILE_I_PRINT_VALUE_SCOPE:
case COMPILE_I_PRINT_ADDRESS_SCOPE:
- fprintf_unfiltered
+ gdb_printf
(buf,
/* "auto" strips ref- and cv- qualifiers, so we need to also strip
those from COMPILE_I_EXPR_PTR_TYPE. */
@@ -512,10 +512,10 @@ struct cplus_add_input
break;
default:
- fputs_unfiltered (input, buf);
+ gdb_puts (input, buf);
break;
}
- fputs_unfiltered ("\n", buf);
+ gdb_puts ("\n", buf);
}
};
@@ -635,7 +635,7 @@ public:
PopUserExpressionPolicy::pop_user_expression (&buf);
AddCodeFooterPolicy::add_code_footer (m_instance->scope (), &buf);
- return buf.string ();
+ return buf.release ();
}
private:
diff --git a/gdb/compile/compile-c-symbols.c b/gdb/compile/compile-c-symbols.c
index 96a7b786b39..e1f94ec2907 100644
--- a/gdb/compile/compile-c-symbols.c
+++ b/gdb/compile/compile-c-symbols.c
@@ -57,17 +57,17 @@ convert_one_symbol (compile_c_instance *context,
int is_local)
{
gcc_type sym_type;
- const char *filename = symbol_symtab (sym.symbol)->filename;
- unsigned short line = SYMBOL_LINE (sym.symbol);
+ const char *filename = sym.symbol->symtab ()->filename;
+ unsigned short line = sym.symbol->line ();
context->error_symbol_once (sym.symbol);
- if (SYMBOL_CLASS (sym.symbol) == LOC_LABEL)
+ if (sym.symbol->aclass () == LOC_LABEL)
sym_type = 0;
else
- sym_type = context->convert_type (SYMBOL_TYPE (sym.symbol));
+ sym_type = context->convert_type (sym.symbol->type ());
- if (SYMBOL_DOMAIN (sym.symbol) == STRUCT_DOMAIN)
+ if (sym.symbol->domain () == STRUCT_DOMAIN)
{
/* Binding a tag, so we don't need to build a decl. */
context->plugin ().tagbind (sym.symbol->natural_name (),
@@ -80,7 +80,7 @@ convert_one_symbol (compile_c_instance *context,
CORE_ADDR addr = 0;
gdb::unique_xmalloc_ptr<char> symbol_name;
- switch (SYMBOL_CLASS (sym.symbol))
+ switch (sym.symbol->aclass ())
{
case LOC_TYPEDEF:
kind = GCC_C_SYMBOL_TYPEDEF;
@@ -88,25 +88,25 @@ convert_one_symbol (compile_c_instance *context,
case LOC_LABEL:
kind = GCC_C_SYMBOL_LABEL;
- addr = SYMBOL_VALUE_ADDRESS (sym.symbol);
+ addr = sym.symbol->value_address ();
break;
case LOC_BLOCK:
kind = GCC_C_SYMBOL_FUNCTION;
- addr = BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (sym.symbol));
- if (is_global && SYMBOL_TYPE (sym.symbol)->is_gnu_ifunc ())
+ addr = sym.symbol->value_block ()->entry_pc ();
+ if (is_global && sym.symbol->type ()->is_gnu_ifunc ())
addr = gnu_ifunc_resolve_addr (target_gdbarch (), addr);
break;
case LOC_CONST:
- if (SYMBOL_TYPE (sym.symbol)->code () == TYPE_CODE_ENUM)
+ if (sym.symbol->type ()->code () == TYPE_CODE_ENUM)
{
/* Already handled by convert_enum. */
return;
}
context->plugin ().build_constant
(sym_type, sym.symbol->natural_name (),
- SYMBOL_VALUE (sym.symbol),
+ sym.symbol->value_longest (),
filename, line);
return;
@@ -179,7 +179,7 @@ convert_one_symbol (compile_c_instance *context,
case LOC_STATIC:
kind = GCC_C_SYMBOL_VARIABLE;
- addr = SYMBOL_VALUE_ADDRESS (sym.symbol);
+ addr = sym.symbol->value_address ();
break;
case LOC_FINAL_VALUE:
@@ -241,17 +241,17 @@ convert_symbol_sym (compile_c_instance *context, const char *identifier,
&& global_sym.block != block_static_block (global_sym.block))
{
if (compile_debug)
- fprintf_unfiltered (gdb_stdlog,
- "gcc_convert_symbol \"%s\": global symbol\n",
- identifier);
+ gdb_printf (gdb_stdlog,
+ "gcc_convert_symbol \"%s\": global symbol\n",
+ identifier);
convert_one_symbol (context, global_sym, 1, 0);
}
}
if (compile_debug)
- fprintf_unfiltered (gdb_stdlog,
- "gcc_convert_symbol \"%s\": local symbol\n",
- identifier);
+ gdb_printf (gdb_stdlog,
+ "gcc_convert_symbol \"%s\": local symbol\n",
+ identifier);
convert_one_symbol (context, sym, 0, is_local_symbol);
}
@@ -270,10 +270,10 @@ convert_symbol_bmsym (compile_c_instance *context,
gcc_decl decl;
CORE_ADDR addr;
- addr = MSYMBOL_VALUE_ADDRESS (objfile, msym);
+ addr = msym->value_address (objfile);
/* Conversion copied from write_exp_msymbol. */
- switch (MSYMBOL_TYPE (msym))
+ switch (msym->type ())
{
case mst_text:
case mst_file_text:
@@ -373,9 +373,9 @@ gcc_convert_symbol (void *datum,
}
if (compile_debug && !found)
- fprintf_unfiltered (gdb_stdlog,
- "gcc_convert_symbol \"%s\": lookup_symbol failed\n",
- identifier);
+ gdb_printf (gdb_stdlog,
+ "gcc_convert_symbol \"%s\": lookup_symbol failed\n",
+ identifier);
return;
}
@@ -398,14 +398,14 @@ gcc_symbol_address (void *datum, struct gcc_c_context *gcc_context,
/* We only need global functions here. */
sym = lookup_symbol (identifier, NULL, VAR_DOMAIN, NULL).symbol;
- if (sym != NULL && SYMBOL_CLASS (sym) == LOC_BLOCK)
+ if (sym != NULL && sym->aclass () == LOC_BLOCK)
{
if (compile_debug)
- fprintf_unfiltered (gdb_stdlog,
- "gcc_symbol_address \"%s\": full symbol\n",
- identifier);
- result = BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (sym));
- if (SYMBOL_TYPE (sym)->is_gnu_ifunc ())
+ gdb_printf (gdb_stdlog,
+ "gcc_symbol_address \"%s\": full symbol\n",
+ identifier);
+ result = sym->value_block ()->entry_pc ();
+ if (sym->type ()->is_gnu_ifunc ())
result = gnu_ifunc_resolve_addr (target_gdbarch (), result);
found = 1;
}
@@ -417,12 +417,12 @@ gcc_symbol_address (void *datum, struct gcc_c_context *gcc_context,
if (msym.minsym != NULL)
{
if (compile_debug)
- fprintf_unfiltered (gdb_stdlog,
- "gcc_symbol_address \"%s\": minimal "
- "symbol\n",
- identifier);
- result = BMSYMBOL_VALUE_ADDRESS (msym);
- if (MSYMBOL_TYPE (msym.minsym) == mst_text_gnu_ifunc)
+ gdb_printf (gdb_stdlog,
+ "gcc_symbol_address \"%s\": minimal "
+ "symbol\n",
+ identifier);
+ result = msym.value_address ();
+ if (msym.minsym->type () == mst_text_gnu_ifunc)
result = gnu_ifunc_resolve_addr (target_gdbarch (), result);
found = 1;
}
@@ -435,9 +435,9 @@ gcc_symbol_address (void *datum, struct gcc_c_context *gcc_context,
}
if (compile_debug && !found)
- fprintf_unfiltered (gdb_stdlog,
- "gcc_symbol_address \"%s\": failed\n",
- identifier);
+ gdb_printf (gdb_stdlog,
+ "gcc_symbol_address \"%s\": failed\n",
+ identifier);
return result;
}
@@ -548,14 +548,14 @@ generate_c_for_for_one_variable (compile_instance *compiler,
try
{
- if (is_dynamic_type (SYMBOL_TYPE (sym)))
+ if (is_dynamic_type (sym->type ()))
{
/* We need to emit to a temporary buffer in case an error
occurs in the middle. */
string_file local_file;
generate_vla_size (compiler, &local_file, gdbarch, registers_used, pc,
- SYMBOL_TYPE (sym), sym);
+ sym->type (), sym);
stream->write (local_file.c_str (), local_file.size ());
}
@@ -577,7 +577,7 @@ generate_c_for_for_one_variable (compile_instance *compiler,
}
else
{
- switch (SYMBOL_CLASS (sym))
+ switch (sym->aclass ())
{
case LOC_REGISTER:
case LOC_ARG:
@@ -645,9 +645,9 @@ generate_c_for_variable_locations (compile_instance *compiler,
/* If we just finished the outermost block of a function, we're
done. */
- if (BLOCK_FUNCTION (block) != NULL)
+ if (block->function () != NULL)
break;
- block = BLOCK_SUPERBLOCK (block);
+ block = block->superblock ();
}
return registers_used;
diff --git a/gdb/compile/compile-cplus-symbols.c b/gdb/compile/compile-cplus-symbols.c
index 7d265357a2e..ef2a1f57603 100644
--- a/gdb/compile/compile-cplus-symbols.c
+++ b/gdb/compile/compile-cplus-symbols.c
@@ -48,17 +48,17 @@ convert_one_symbol (compile_cplus_instance *instance,
{
/* Squash compiler warning. */
gcc_type sym_type = 0;
- const char *filename = symbol_symtab (sym.symbol)->filename;
- unsigned short line = SYMBOL_LINE (sym.symbol);
+ const char *filename = sym.symbol->symtab ()->filename;
+ unsigned short line = sym.symbol->line ();
instance->error_symbol_once (sym.symbol);
- if (SYMBOL_CLASS (sym.symbol) == LOC_LABEL)
+ if (sym.symbol->aclass () == LOC_LABEL)
sym_type = 0;
else
- sym_type = instance->convert_type (SYMBOL_TYPE (sym.symbol));
+ sym_type = instance->convert_type (sym.symbol->type ());
- if (SYMBOL_DOMAIN (sym.symbol) == STRUCT_DOMAIN)
+ if (sym.symbol->domain () == STRUCT_DOMAIN)
{
/* Nothing to do. */
}
@@ -70,38 +70,38 @@ convert_one_symbol (compile_cplus_instance *instance,
std::string name;
gdb::unique_xmalloc_ptr<char> symbol_name;
- switch (SYMBOL_CLASS (sym.symbol))
+ switch (sym.symbol->aclass ())
{
case LOC_TYPEDEF:
- if (SYMBOL_TYPE (sym.symbol)->code () == TYPE_CODE_TYPEDEF)
+ if (sym.symbol->type ()->code () == TYPE_CODE_TYPEDEF)
kind = GCC_CP_SYMBOL_TYPEDEF;
- else if (SYMBOL_TYPE (sym.symbol)->code () == TYPE_CODE_NAMESPACE)
+ else if (sym.symbol->type ()->code () == TYPE_CODE_NAMESPACE)
return;
break;
case LOC_LABEL:
kind = GCC_CP_SYMBOL_LABEL;
- addr = SYMBOL_VALUE_ADDRESS (sym.symbol);
+ addr = sym.symbol->value_address ();
break;
case LOC_BLOCK:
{
kind = GCC_CP_SYMBOL_FUNCTION;
- addr = BLOCK_START (SYMBOL_BLOCK_VALUE (sym.symbol));
- if (is_global && SYMBOL_TYPE (sym.symbol)->is_gnu_ifunc ())
+ addr = sym.symbol->value_block()->start ();
+ if (is_global && sym.symbol->type ()->is_gnu_ifunc ())
addr = gnu_ifunc_resolve_addr (target_gdbarch (), addr);
}
break;
case LOC_CONST:
- if (SYMBOL_TYPE (sym.symbol)->code () == TYPE_CODE_ENUM)
+ if (sym.symbol->type ()->code () == TYPE_CODE_ENUM)
{
/* Already handled by convert_enum. */
return;
}
instance->plugin ().build_constant
(sym_type, sym.symbol->natural_name (),
- SYMBOL_VALUE (sym.symbol), filename, line);
+ sym.symbol->value_longest (), filename, line);
return;
case LOC_CONST_BYTES:
@@ -173,7 +173,7 @@ convert_one_symbol (compile_cplus_instance *instance,
case LOC_STATIC:
kind = GCC_CP_SYMBOL_VARIABLE;
- addr = SYMBOL_VALUE_ADDRESS (sym.symbol);
+ addr = sym.symbol->value_address ();
break;
case LOC_FINAL_VALUE:
@@ -190,7 +190,7 @@ convert_one_symbol (compile_cplus_instance *instance,
{
compile_scope scope
= instance->new_scope (sym.symbol->natural_name (),
- SYMBOL_TYPE (sym.symbol));
+ sym.symbol->type ());
if (scope.nested_type () != GCC_TYPE_NONE)
{
/* We found a symbol for this type that was defined inside
@@ -253,17 +253,17 @@ convert_symbol_sym (compile_cplus_instance *instance,
&& global_sym.block != block_static_block (global_sym.block))
{
if (compile_debug)
- fprintf_unfiltered (gdb_stdlog,
- "gcc_convert_symbol \"%s\": global symbol\n",
- identifier);
+ gdb_printf (gdb_stdlog,
+ "gcc_convert_symbol \"%s\": global symbol\n",
+ identifier);
convert_one_symbol (instance, global_sym, true, false);
}
}
if (compile_debug)
- fprintf_unfiltered (gdb_stdlog,
- "gcc_convert_symbol \"%s\": local symbol\n",
- identifier);
+ gdb_printf (gdb_stdlog,
+ "gcc_convert_symbol \"%s\": local symbol\n",
+ identifier);
convert_one_symbol (instance, sym, false, is_local_symbol);
}
@@ -281,10 +281,10 @@ convert_symbol_bmsym (compile_cplus_instance *instance,
gcc_type sym_type;
CORE_ADDR addr;
- addr = MSYMBOL_VALUE_ADDRESS (objfile, msym);
+ addr = msym->value_address (objfile);
/* Conversion copied from write_exp_msymbol. */
- switch (MSYMBOL_TYPE (msym))
+ switch (msym->type ())
{
case mst_text:
case mst_file_text:
@@ -337,8 +337,8 @@ gcc_cplus_convert_symbol (void *datum,
const char *identifier)
{
if (compile_debug)
- fprintf_unfiltered (gdb_stdlog,
- "got oracle request for \"%s\"\n", identifier);
+ gdb_printf (gdb_stdlog,
+ "got oracle request for \"%s\"\n", identifier);
bool found = false;
compile_cplus_instance *instance = (compile_cplus_instance *) datum;
@@ -374,7 +374,7 @@ gcc_cplus_convert_symbol (void *datum,
{
found = true;
convert_symbol_sym (instance, identifier, it,
- SYMBOL_DOMAIN (it.symbol));
+ it.symbol->domain ());
}
}
@@ -396,18 +396,18 @@ gcc_cplus_convert_symbol (void *datum,
}
if (compile_debug && !found)
- fprintf_unfiltered (gdb_stdlog,
- "gcc_convert_symbol \"%s\": lookup_symbol failed\n",
- identifier);
+ gdb_printf (gdb_stdlog,
+ "gcc_convert_symbol \"%s\": lookup_symbol failed\n",
+ identifier);
if (compile_debug)
{
if (found)
- fprintf_unfiltered (gdb_stdlog, "found type for %s\n", identifier);
+ gdb_printf (gdb_stdlog, "found type for %s\n", identifier);
else
{
- fprintf_unfiltered (gdb_stdlog, "did not find type for %s\n",
- identifier);
+ gdb_printf (gdb_stdlog, "did not find type for %s\n",
+ identifier);
}
}
@@ -425,8 +425,8 @@ gcc_cplus_symbol_address (void *datum, struct gcc_cp_context *gcc_context,
int found = 0;
if (compile_debug)
- fprintf_unfiltered (gdb_stdlog,
- "got oracle request for address of %s\n", identifier);
+ gdb_printf (gdb_stdlog,
+ "got oracle request for address of %s\n", identifier);
/* We can't allow exceptions to escape out of this callback. Safest
is to simply emit a gcc error. */
@@ -435,14 +435,14 @@ gcc_cplus_symbol_address (void *datum, struct gcc_cp_context *gcc_context,
struct symbol *sym
= lookup_symbol (identifier, nullptr, VAR_DOMAIN, nullptr).symbol;
- if (sym != nullptr && SYMBOL_CLASS (sym) == LOC_BLOCK)
+ if (sym != nullptr && sym->aclass () == LOC_BLOCK)
{
if (compile_debug)
- fprintf_unfiltered (gdb_stdlog,
- "gcc_symbol_address \"%s\": full symbol\n",
- identifier);
- result = BLOCK_START (SYMBOL_BLOCK_VALUE (sym));
- if (SYMBOL_TYPE (sym)->is_gnu_ifunc ())
+ gdb_printf (gdb_stdlog,
+ "gcc_symbol_address \"%s\": full symbol\n",
+ identifier);
+ result = sym->value_block ()->start ();
+ if (sym->type ()->is_gnu_ifunc ())
result = gnu_ifunc_resolve_addr (target_gdbarch (), result);
found = 1;
}
@@ -454,12 +454,12 @@ gcc_cplus_symbol_address (void *datum, struct gcc_cp_context *gcc_context,
if (msym.minsym != nullptr)
{
if (compile_debug)
- fprintf_unfiltered (gdb_stdlog,
- "gcc_symbol_address \"%s\": minimal "
- "symbol\n",
- identifier);
- result = BMSYMBOL_VALUE_ADDRESS (msym);
- if (MSYMBOL_TYPE (msym.minsym) == mst_text_gnu_ifunc)
+ gdb_printf (gdb_stdlog,
+ "gcc_symbol_address \"%s\": minimal "
+ "symbol\n",
+ identifier);
+ result = msym.value_address ();
+ if (msym.minsym->type () == mst_text_gnu_ifunc)
result = gnu_ifunc_resolve_addr (target_gdbarch (), result);
found = 1;
}
@@ -472,17 +472,17 @@ gcc_cplus_symbol_address (void *datum, struct gcc_cp_context *gcc_context,
}
if (compile_debug && !found)
- fprintf_unfiltered (gdb_stdlog,
- "gcc_symbol_address \"%s\": failed\n",
- identifier);
+ gdb_printf (gdb_stdlog,
+ "gcc_symbol_address \"%s\": failed\n",
+ identifier);
if (compile_debug)
{
if (found)
- fprintf_unfiltered (gdb_stdlog, "found address for %s!\n", identifier);
+ gdb_printf (gdb_stdlog, "found address for %s!\n", identifier);
else
- fprintf_unfiltered (gdb_stdlog,
- "did not find address for %s\n", identifier);
+ gdb_printf (gdb_stdlog,
+ "did not find address for %s\n", identifier);
}
return result;
diff --git a/gdb/compile/compile-cplus-types.c b/gdb/compile/compile-cplus-types.c
index ce8b9452685..e7c940b1355 100644
--- a/gdb/compile/compile-cplus-types.c
+++ b/gdb/compile/compile-cplus-types.c
@@ -161,7 +161,7 @@ type_name_to_scope (const char *type_name, const struct block *block)
scope.push_back (comp);
- if (SYMBOL_TYPE (bsymbol.symbol)->code () != TYPE_CODE_NAMESPACE)
+ if (bsymbol.symbol->type ()->code () != TYPE_CODE_NAMESPACE)
{
/* We're done. */
break;
@@ -258,8 +258,8 @@ compile_cplus_instance::enter_scope (compile_scope &&new_scope)
{
if (debug_compile_cplus_scopes)
{
- fprintf_unfiltered (gdb_stdlog, "entering new scope %s\n",
- host_address_to_string (&m_scopes.back ()));
+ gdb_printf (gdb_stdlog, "entering new scope %s\n",
+ host_address_to_string (&m_scopes.back ()));
}
/* Push the global namespace. */
@@ -271,7 +271,7 @@ compile_cplus_instance::enter_scope (compile_scope &&new_scope)
(m_scopes.back ().begin (), m_scopes.back ().end () - 1,
[this] (const scope_component &comp)
{
- gdb_assert (SYMBOL_TYPE (comp.bsymbol.symbol)->code ()
+ gdb_assert (comp.bsymbol.symbol->type ()->code ()
== TYPE_CODE_NAMESPACE);
const char *ns = (comp.name == CP_ANONYMOUS_NAMESPACE_STR ? nullptr
@@ -284,8 +284,8 @@ compile_cplus_instance::enter_scope (compile_scope &&new_scope)
{
if (debug_compile_cplus_scopes)
{
- fprintf_unfiltered (gdb_stdlog, "staying in current scope -- "
- "scopes are identical\n");
+ gdb_printf (gdb_stdlog, "staying in current scope -- "
+ "scopes are identical\n");
}
}
}
@@ -305,15 +305,15 @@ compile_cplus_instance::leave_scope ()
{
if (debug_compile_cplus_scopes)
{
- fprintf_unfiltered (gdb_stdlog, "leaving scope %s\n",
- host_address_to_string (&current));
+ gdb_printf (gdb_stdlog, "leaving scope %s\n",
+ host_address_to_string (&current));
}
/* Pop namespaces. */
std::for_each
(current.begin (),current.end () - 1,
[this] (const scope_component &comp) {
- gdb_assert (SYMBOL_TYPE (comp.bsymbol.symbol)->code ()
+ gdb_assert (comp.bsymbol.symbol->type ()->code ()
== TYPE_CODE_NAMESPACE);
this->plugin ().pop_binding_level (comp.name.c_str ());
});
@@ -324,8 +324,8 @@ compile_cplus_instance::leave_scope ()
else
{
if (debug_compile_cplus_scopes)
- fprintf_unfiltered (gdb_stdlog,
- "identical scopes -- not leaving scope\n");
+ gdb_printf (gdb_stdlog,
+ "identical scopes -- not leaving scope\n");
}
}
@@ -345,14 +345,14 @@ compile_cplus_instance::new_scope (const char *type_name, struct type *type)
unqualified name of the type to process. */
scope_component &comp = scope.back ();
- if (!types_equal (type, SYMBOL_TYPE (comp.bsymbol.symbol))
+ if (!types_equal (type, comp.bsymbol.symbol->type ())
&& (m_scopes.empty ()
|| (m_scopes.back ().back ().bsymbol.symbol
!= comp.bsymbol.symbol)))
{
/* The type is defined inside another class(es). Convert that
type instead of defining this type. */
- convert_type (SYMBOL_TYPE (comp.bsymbol.symbol));
+ convert_type (comp.bsymbol.symbol->type ());
/* If the original type (passed in to us) is defined in a nested
class, the previous call will give us that type's gcc_type.
@@ -625,10 +625,10 @@ compile_cplus_convert_struct_or_union_members
we can do but ignore this member. */
continue;
}
- const char *filename = symbol_symtab (sym.symbol)->filename;
- unsigned int line = SYMBOL_LINE (sym.symbol);
+ const char *filename = sym.symbol->symtab ()->filename;
+ unsigned int line = sym.symbol->line ();
- physaddr = SYMBOL_VALUE_ADDRESS (sym.symbol);
+ physaddr = sym.symbol->value_address ();
instance->plugin ().build_decl
("field physname", field_name,
(GCC_CP_SYMBOL_VARIABLE| get_field_access_flag (type, i)),
@@ -764,9 +764,9 @@ compile_cplus_convert_struct_or_union_methods (compile_cplus_instance *instance,
continue;
}
- const char *filename = symbol_symtab (sym.symbol)->filename;
- unsigned int line = SYMBOL_LINE (sym.symbol);
- CORE_ADDR address = BLOCK_START (SYMBOL_BLOCK_VALUE (sym.symbol));
+ const char *filename = sym.symbol->symtab ()->filename;
+ unsigned int line = sym.symbol->line ();
+ CORE_ADDR address = sym.symbol->value_block()->start ();
const char *kind;
if (TYPE_FN_FIELD_STATIC_P (methods, j))
@@ -1239,16 +1239,16 @@ compile_cplus_instance::gcc_cplus_leave_scope
static void
compile_cplus_debug_output_1 (ULONGEST arg)
{
- fprintf_unfiltered (gdb_stdlog, "%s", pulongest (arg));
+ gdb_printf (gdb_stdlog, "%s", pulongest (arg));
}
static void
compile_cplus_debug_output_1 (const char *arg)
{
if (arg == nullptr)
- fputs_unfiltered ("NULL", gdb_stdlog);
+ gdb_puts ("NULL", gdb_stdlog);
else
- fputs_unfiltered (arg, gdb_stdlog);
+ gdb_puts (arg, gdb_stdlog);
}
static void
@@ -1267,7 +1267,7 @@ static void
compile_cplus_debug_output (T arg, Targs... Args)
{
compile_cplus_debug_output_1 (arg);
- fputc_unfiltered (' ', gdb_stdlog);
+ gdb_putc (' ', gdb_stdlog);
compile_cplus_debug_output (Args...);
}
@@ -1275,9 +1275,9 @@ compile_cplus_debug_output (T arg, Targs... Args)
#define OUTPUT_DEBUG_RESULT(R) \
if (debug_compile_cplus_types) \
{ \
- fputs_unfiltered (": ", gdb_stdlog); \
+ gdb_puts (": ", gdb_stdlog); \
compile_cplus_debug_output (R); \
- fputc_unfiltered ('\n', gdb_stdlog); \
+ gdb_putc ('\n', gdb_stdlog); \
} \
#define GCC_METHOD0(R, N) \
@@ -1363,7 +1363,7 @@ gcc_cp_plugin::build_decl (const char *debug_decltype, const char *name,
const char *filename, unsigned int line_number)
{
if (debug_compile_cplus_types)
- fprintf_unfiltered (gdb_stdlog, "<%s> ", debug_decltype);
+ gdb_printf (gdb_stdlog, "<%s> ", debug_decltype);
return build_decl (name, sym_kind, sym_type, substitution_name,
address, filename, line_number);
@@ -1375,7 +1375,7 @@ gcc_cp_plugin::start_class_type (const char *debug_name, gcc_decl typedecl,
const char *filename, unsigned int line_number)
{
if (debug_compile_cplus_types)
- fprintf_unfiltered (gdb_stdlog, "<%s> ", debug_name);
+ gdb_printf (gdb_stdlog, "<%s> ", debug_name);
return start_class_type (typedecl, base_classes, filename, line_number);
}
@@ -1385,7 +1385,7 @@ gcc_cp_plugin::finish_class_type (const char *debug_name,
unsigned long size_in_bytes)
{
if (debug_compile_cplus_types)
- fprintf_unfiltered (gdb_stdlog, "<%s> ", debug_name);
+ gdb_printf (gdb_stdlog, "<%s> ", debug_name);
return finish_class_type (size_in_bytes);
}
@@ -1394,7 +1394,7 @@ int
gcc_cp_plugin::pop_binding_level (const char *debug_name)
{
if (debug_compile_cplus_types)
- fprintf_unfiltered (gdb_stdlog, "<%s> ", debug_name);
+ gdb_printf (gdb_stdlog, "<%s> ", debug_name);
return pop_binding_level ();
}
diff --git a/gdb/compile/compile-internal.h b/gdb/compile/compile-internal.h
index 92efd511075..042ddf9c5f9 100644
--- a/gdb/compile/compile-internal.h
+++ b/gdb/compile/compile-internal.h
@@ -18,6 +18,7 @@
#define COMPILE_COMPILE_INTERNAL_H
#include "gcc-c-interface.h"
+#include "gdbsupport/gdb-hashtab.h"
/* Debugging flag for the "compile" family of commands. */
diff --git a/gdb/compile/compile-loc2c.c b/gdb/compile/compile-loc2c.c
index ba29d027bb3..3ce0bfab45f 100644
--- a/gdb/compile/compile-loc2c.c
+++ b/gdb/compile/compile-loc2c.c
@@ -435,9 +435,9 @@ compute_stack_depth (enum bfd_endian byte_order, unsigned int addr_size,
static void
push (int indent, string_file *stream, ULONGEST l)
{
- fprintf_filtered (stream,
- "%*s__gdb_stack[++__gdb_tos] = (" GCC_UINTPTR ") %s;\n",
- indent, "", hex_string (l));
+ gdb_printf (stream,
+ "%*s__gdb_stack[++__gdb_tos] = (" GCC_UINTPTR ") %s;\n",
+ indent, "", hex_string (l));
}
/* Emit code to push an arbitrary expression. This works like
@@ -451,13 +451,13 @@ pushf (int indent, string_file *stream, const char *format, ...)
{
va_list args;
- fprintf_filtered (stream, "%*s__gdb_stack[__gdb_tos + 1] = ", indent, "");
+ gdb_printf (stream, "%*s__gdb_stack[__gdb_tos + 1] = ", indent, "");
va_start (args, format);
stream->vprintf (format, args);
va_end (args);
stream->puts (";\n");
- fprintf_filtered (stream, "%*s++__gdb_tos;\n", indent, "");
+ gdb_printf (stream, "%*s++__gdb_tos;\n", indent, "");
}
/* Emit code for a unary expression -- one which operates in-place on
@@ -471,7 +471,7 @@ unary (int indent, string_file *stream, const char *format, ...)
{
va_list args;
- fprintf_filtered (stream, "%*s__gdb_stack[__gdb_tos] = ", indent, "");
+ gdb_printf (stream, "%*s__gdb_stack[__gdb_tos] = ", indent, "");
va_start (args, format);
stream->vprintf (format, args);
va_end (args);
@@ -488,12 +488,12 @@ binary (int indent, string_file *stream, const char *format, ...)
{
va_list args;
- fprintf_filtered (stream, "%*s__gdb_stack[__gdb_tos - 1] = ", indent, "");
+ gdb_printf (stream, "%*s__gdb_stack[__gdb_tos - 1] = ", indent, "");
va_start (args, format);
stream->vprintf (format, args);
va_end (args);
stream->puts (";\n");
- fprintf_filtered (stream, "%*s--__gdb_tos;\n", indent, "");
+ gdb_printf (stream, "%*s--__gdb_tos;\n", indent, "");
}
/* Print the name of a label given its "SCOPE", an arbitrary integer
@@ -614,9 +614,9 @@ do_compile_dwarf_expr_to_c (int indent, string_file *stream,
++scope;
- fprintf_filtered (stream, "%*s__attribute__ ((unused)) %s %s;\n",
- indent, "", type_name, result_name);
- fprintf_filtered (stream, "%*s{\n", indent, "");
+ gdb_printf (stream, "%*s__attribute__ ((unused)) %s %s;\n",
+ indent, "", type_name, result_name);
+ gdb_printf (stream, "%*s{\n", indent, "");
indent += 2;
stack_depth = compute_stack_depth (byte_order, addr_size,
@@ -652,19 +652,19 @@ do_compile_dwarf_expr_to_c (int indent, string_file *stream,
"compiled code."),
sym->print_name ());
- fprintf_filtered (stream, "%*s%s = %s;\n",
- indent, "", result_name,
- core_addr_to_string (value_address (val)));
- fprintf_filtered (stream, "%*s}\n", indent - 2, "");
+ gdb_printf (stream, "%*s%s = %s;\n",
+ indent, "", result_name,
+ core_addr_to_string (value_address (val)));
+ gdb_printf (stream, "%*s}\n", indent - 2, "");
return;
}
- fprintf_filtered (stream, "%*s" GCC_UINTPTR " __gdb_stack[%d];\n",
- indent, "", stack_depth);
+ gdb_printf (stream, "%*s" GCC_UINTPTR " __gdb_stack[%d];\n",
+ indent, "", stack_depth);
if (need_tempvar)
- fprintf_filtered (stream, "%*s" GCC_UINTPTR " __gdb_tmp;\n", indent, "");
- fprintf_filtered (stream, "%*sint __gdb_tos = -1;\n", indent, "");
+ gdb_printf (stream, "%*s" GCC_UINTPTR " __gdb_tmp;\n", indent, "");
+ gdb_printf (stream, "%*sint __gdb_tos = -1;\n", indent, "");
if (initial != NULL)
pushf (indent, stream, "%s", core_addr_to_string (*initial));
@@ -684,8 +684,8 @@ do_compile_dwarf_expr_to_c (int indent, string_file *stream,
stream->printf ("/* %s */\n", get_DW_OP_name (op));
/* This is handy for debugging the generated code:
- fprintf_filtered (stream, "if (__gdb_tos != %d) abort ();\n",
- (int) info[op_ptr - base].depth - 1);
+ gdb_printf (stream, "if (__gdb_tos != %d) abort ();\n",
+ (int) info[op_ptr - base].depth - 1);
*/
++op_ptr;
@@ -923,7 +923,7 @@ do_compile_dwarf_expr_to_c (int indent, string_file *stream,
break;
case DW_OP_drop:
- fprintf_filtered (stream, "%*s--__gdb_tos;\n", indent, "");
+ gdb_printf (stream, "%*s--__gdb_tos;\n", indent, "");
break;
case DW_OP_pick:
@@ -933,16 +933,16 @@ do_compile_dwarf_expr_to_c (int indent, string_file *stream,
break;
case DW_OP_swap:
- fprintf_filtered (stream,
- "%*s__gdb_tmp = __gdb_stack[__gdb_tos - 1];\n",
- indent, "");
- fprintf_filtered (stream,
- "%*s__gdb_stack[__gdb_tos - 1] = "
- "__gdb_stack[__gdb_tos];\n",
- indent, "");
- fprintf_filtered (stream, ("%*s__gdb_stack[__gdb_tos] = "
- "__gdb_tmp;\n"),
- indent, "");
+ gdb_printf (stream,
+ "%*s__gdb_tmp = __gdb_stack[__gdb_tos - 1];\n",
+ indent, "");
+ gdb_printf (stream,
+ "%*s__gdb_stack[__gdb_tos - 1] = "
+ "__gdb_stack[__gdb_tos];\n",
+ indent, "");
+ gdb_printf (stream, ("%*s__gdb_stack[__gdb_tos] = "
+ "__gdb_tmp;\n"),
+ indent, "");
break;
case DW_OP_over:
@@ -950,20 +950,20 @@ do_compile_dwarf_expr_to_c (int indent, string_file *stream,
break;
case DW_OP_rot:
- fprintf_filtered (stream, ("%*s__gdb_tmp = "
- "__gdb_stack[__gdb_tos];\n"),
- indent, "");
- fprintf_filtered (stream,
- "%*s__gdb_stack[__gdb_tos] = "
- "__gdb_stack[__gdb_tos - 1];\n",
- indent, "");
- fprintf_filtered (stream,
- "%*s__gdb_stack[__gdb_tos - 1] = "
- "__gdb_stack[__gdb_tos -2];\n",
- indent, "");
- fprintf_filtered (stream, "%*s__gdb_stack[__gdb_tos - 2] = "
- "__gdb_tmp;\n",
- indent, "");
+ gdb_printf (stream, ("%*s__gdb_tmp = "
+ "__gdb_stack[__gdb_tos];\n"),
+ indent, "");
+ gdb_printf (stream,
+ "%*s__gdb_stack[__gdb_tos] = "
+ "__gdb_stack[__gdb_tos - 1];\n",
+ indent, "");
+ gdb_printf (stream,
+ "%*s__gdb_stack[__gdb_tos - 1] = "
+ "__gdb_stack[__gdb_tos -2];\n",
+ indent, "");
+ gdb_printf (stream, "%*s__gdb_stack[__gdb_tos - 2] = "
+ "__gdb_tmp;\n",
+ indent, "");
break;
case DW_OP_deref:
@@ -984,11 +984,11 @@ do_compile_dwarf_expr_to_c (int indent, string_file *stream,
/* Cast to a pointer of the desired type, then
dereference. */
- fprintf_filtered (stream,
- "%*s__gdb_stack[__gdb_tos] = "
- "*((__gdb_int_%s *) "
- "__gdb_stack[__gdb_tos]);\n",
- indent, "", mode);
+ gdb_printf (stream,
+ "%*s__gdb_stack[__gdb_tos] = "
+ "*((__gdb_int_%s *) "
+ "__gdb_stack[__gdb_tos]);\n",
+ indent, "", mode);
}
break;
@@ -1110,7 +1110,7 @@ do_compile_dwarf_expr_to_c (int indent, string_file *stream,
case DW_OP_skip:
offset = extract_signed_integer (op_ptr, 2, byte_order);
op_ptr += 2;
- fprintf_filtered (stream, "%*sgoto ", indent, "");
+ gdb_printf (stream, "%*sgoto ", indent, "");
print_label (stream, scope, op_ptr + offset - base);
stream->puts (";\n");
break;
@@ -1118,10 +1118,10 @@ do_compile_dwarf_expr_to_c (int indent, string_file *stream,
case DW_OP_bra:
offset = extract_signed_integer (op_ptr, 2, byte_order);
op_ptr += 2;
- fprintf_filtered (stream,
- "%*sif ((( " GCC_INTPTR
- ") __gdb_stack[__gdb_tos--]) != 0) goto ",
- indent, "");
+ gdb_printf (stream,
+ "%*sif ((( " GCC_INTPTR
+ ") __gdb_stack[__gdb_tos--]) != 0) goto ",
+ indent, "");
print_label (stream, scope, op_ptr + offset - base);
stream->puts (";\n");
break;
@@ -1134,9 +1134,9 @@ do_compile_dwarf_expr_to_c (int indent, string_file *stream,
}
}
- fprintf_filtered (stream, "%*s%s = __gdb_stack[__gdb_tos];\n",
- indent, "", result_name);
- fprintf_filtered (stream, "%*s}\n", indent - 2, "");
+ gdb_printf (stream, "%*s%s = __gdb_stack[__gdb_tos];\n",
+ indent, "", result_name);
+ gdb_printf (stream, "%*s}\n", indent - 2, "");
}
/* See compile.h. */
diff --git a/gdb/compile/compile-object-load.c b/gdb/compile/compile-object-load.c
index 336e8d3d435..d393091966c 100644
--- a/gdb/compile/compile-object-load.c
+++ b/gdb/compile/compile-object-load.c
@@ -126,13 +126,13 @@ setup_sections_data::setup_one_section (asection *sect)
prot |= GDB_MMAP_PROT_EXEC;
if (compile_debug)
- fprintf_unfiltered (gdb_stdlog,
- "module \"%s\" section \"%s\" size %s prot %u\n",
- bfd_get_filename (m_bfd),
- bfd_section_name (sect),
- paddress (target_gdbarch (),
- bfd_section_size (sect)),
- prot);
+ gdb_printf (gdb_stdlog,
+ "module \"%s\" section \"%s\" size %s prot %u\n",
+ bfd_get_filename (m_bfd),
+ bfd_section_name (sect),
+ paddress (target_gdbarch (),
+ bfd_section_size (sect)),
+ prot);
}
else
prot = -1;
@@ -149,11 +149,11 @@ setup_sections_data::setup_one_section (asection *sect)
m_last_prot);
munmap_list.add (addr, m_last_size);
if (compile_debug)
- fprintf_unfiltered (gdb_stdlog,
- "allocated %s bytes at %s prot %u\n",
- paddress (target_gdbarch (), m_last_size),
- paddress (target_gdbarch (), addr),
- m_last_prot);
+ gdb_printf (gdb_stdlog,
+ "allocated %s bytes at %s prot %u\n",
+ paddress (target_gdbarch (), m_last_size),
+ paddress (target_gdbarch (), addr),
+ m_last_prot);
}
else
addr = 0;
@@ -421,8 +421,8 @@ get_out_value_type (struct symbol *func_sym, struct objfile *objfile,
lookup_name_info func_matcher (GCC_FE_WRAPPER_FUNCTION,
symbol_name_match_type::SEARCH_NAME);
- bv = SYMTAB_BLOCKVECTOR (func_sym->owner.symtab);
- nblocks = BLOCKVECTOR_NBLOCKS (bv);
+ bv = func_sym->symtab ()->compunit ()->blockvector ();
+ nblocks = bv->num_blocks ();
gdb_ptr_type_sym = NULL;
for (block_loop = 0; block_loop < nblocks; block_loop++)
@@ -430,8 +430,8 @@ get_out_value_type (struct symbol *func_sym, struct objfile *objfile,
struct symbol *function = NULL;
const struct block *function_block;
- block = BLOCKVECTOR_BLOCK (bv, block_loop);
- if (BLOCK_FUNCTION (block) != NULL)
+ block = bv->block (block_loop);
+ if (block->function () != NULL)
continue;
gdb_val_sym = block_lookup_symbol (block,
COMPILE_I_EXPR_VAL,
@@ -441,24 +441,23 @@ get_out_value_type (struct symbol *func_sym, struct objfile *objfile,
continue;
function_block = block;
- while (function_block != BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK)
- && function_block != BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK))
+ while (function_block != bv->static_block ()
+ && function_block != bv->global_block ())
{
- function_block = BLOCK_SUPERBLOCK (function_block);
- function = BLOCK_FUNCTION (function_block);
+ function_block = function_block->superblock ();
+ function = function_block->function ();
if (function != NULL)
break;
}
if (function != NULL
- && (BLOCK_SUPERBLOCK (function_block)
- == BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK))
+ && function_block->superblock () == bv->static_block ()
&& symbol_matches_search_name (function, func_matcher))
break;
}
if (block_loop == nblocks)
error (_("No \"%s\" symbol found"), COMPILE_I_EXPR_VAL);
- gdb_type = SYMBOL_TYPE (gdb_val_sym);
+ gdb_type = gdb_val_sym->type ();
gdb_type = check_typedef (gdb_type);
gdb_ptr_type_sym = block_lookup_symbol (block, COMPILE_I_EXPR_PTR_TYPE,
@@ -466,7 +465,7 @@ get_out_value_type (struct symbol *func_sym, struct objfile *objfile,
VAR_DOMAIN);
if (gdb_ptr_type_sym == NULL)
error (_("No \"%s\" symbol found"), COMPILE_I_EXPR_PTR_TYPE);
- gdb_ptr_type = SYMBOL_TYPE (gdb_ptr_type_sym);
+ gdb_ptr_type = gdb_ptr_type_sym->type ();
gdb_ptr_type = check_typedef (gdb_ptr_type);
if (gdb_ptr_type->code () != TYPE_CODE_PTR)
error (_("Type of \"%s\" is not a pointer"), COMPILE_I_EXPR_PTR_TYPE);
@@ -517,7 +516,7 @@ get_out_value_type (struct symbol *func_sym, struct objfile *objfile,
static struct type *
get_regs_type (struct symbol *func_sym, struct objfile *objfile)
{
- struct type *func_type = SYMBOL_TYPE (func_sym);
+ struct type *func_type = func_sym->type ();
struct type *regsp_type, *regs_type;
/* No register parameter present. */
@@ -656,7 +655,7 @@ compile_object_load (const compile_file_names &file_names,
if (func_sym == NULL)
error (_("Cannot find function \"%s\" in compiled module \"%s\"."),
GCC_FE_WRAPPER_FUNCTION, objfile_name (objfile));
- func_type = SYMBOL_TYPE (func_sym);
+ func_type = func_sym->type ();
if (func_type->code () != TYPE_CODE_FUNC)
error (_("Invalid type code %d of function \"%s\" in compiled "
"module \"%s\"."),
@@ -713,9 +712,9 @@ compile_object_load (const compile_file_names &file_names,
if (strcmp (sym->name, "_GLOBAL_OFFSET_TABLE_") == 0)
{
if (compile_debug)
- fprintf_unfiltered (gdb_stdlog,
- "ELF symbol \"%s\" relocated to zero\n",
- sym->name);
+ gdb_printf (gdb_stdlog,
+ "ELF symbol \"%s\" relocated to zero\n",
+ sym->name);
/* It seems to be a GCC bug, with -mcmodel=large there should be no
need for _GLOBAL_OFFSET_TABLE_. Together with -fPIE the data
@@ -757,36 +756,36 @@ compile_object_load (const compile_file_names &file_names,
sym->value = 0x8000;
bfd_set_gp_value(abfd.get(), toc_fallback->vma);
if (compile_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Connectiong ELF symbol \"%s\" to the .toc section (%s)\n",
- sym->name,
- paddress (target_gdbarch (), sym->value));
+ gdb_printf (gdb_stdlog,
+ "Connectiong ELF symbol \"%s\" to the .toc section (%s)\n",
+ sym->name,
+ paddress (target_gdbarch (), sym->value));
continue;
}
bmsym = lookup_minimal_symbol (sym->name, NULL, NULL);
switch (bmsym.minsym == NULL
- ? mst_unknown : MSYMBOL_TYPE (bmsym.minsym))
+ ? mst_unknown : bmsym.minsym->type ())
{
case mst_text:
case mst_bss:
case mst_data:
- sym->value = BMSYMBOL_VALUE_ADDRESS (bmsym);
+ sym->value = bmsym.value_address ();
if (compile_debug)
- fprintf_unfiltered (gdb_stdlog,
- "ELF mst_text symbol \"%s\" relocated to %s\n",
- sym->name,
- paddress (target_gdbarch (), sym->value));
+ gdb_printf (gdb_stdlog,
+ "ELF mst_text symbol \"%s\" relocated to %s\n",
+ sym->name,
+ paddress (target_gdbarch (), sym->value));
break;
case mst_text_gnu_ifunc:
sym->value = gnu_ifunc_resolve_addr (target_gdbarch (),
- BMSYMBOL_VALUE_ADDRESS (bmsym));
+ bmsym.value_address ());
if (compile_debug)
- fprintf_unfiltered (gdb_stdlog,
- "ELF mst_text_gnu_ifunc symbol \"%s\" "
- "relocated to %s\n",
- sym->name,
- paddress (target_gdbarch (), sym->value));
+ gdb_printf (gdb_stdlog,
+ "ELF mst_text_gnu_ifunc symbol \"%s\" "
+ "relocated to %s\n",
+ sym->name,
+ paddress (target_gdbarch (), sym->value));
break;
default:
warning (_("Could not find symbol \"%s\" "
@@ -812,11 +811,11 @@ compile_object_load (const compile_file_names &file_names,
gdb_assert (regs_addr != 0);
setup_sections_data.munmap_list.add (regs_addr, TYPE_LENGTH (regs_type));
if (compile_debug)
- fprintf_unfiltered (gdb_stdlog,
- "allocated %s bytes at %s for registers\n",
- paddress (target_gdbarch (),
- TYPE_LENGTH (regs_type)),
- paddress (target_gdbarch (), regs_addr));
+ gdb_printf (gdb_stdlog,
+ "allocated %s bytes at %s for registers\n",
+ paddress (target_gdbarch (),
+ TYPE_LENGTH (regs_type)),
+ paddress (target_gdbarch (), regs_addr));
store_regs (regs_type, regs_addr);
}
@@ -835,11 +834,11 @@ compile_object_load (const compile_file_names &file_names,
setup_sections_data.munmap_list.add (out_value_addr,
TYPE_LENGTH (out_value_type));
if (compile_debug)
- fprintf_unfiltered (gdb_stdlog,
- "allocated %s bytes at %s for printed value\n",
- paddress (target_gdbarch (),
- TYPE_LENGTH (out_value_type)),
- paddress (target_gdbarch (), out_value_addr));
+ gdb_printf (gdb_stdlog,
+ "allocated %s bytes at %s for printed value\n",
+ paddress (target_gdbarch (),
+ TYPE_LENGTH (out_value_type)),
+ paddress (target_gdbarch (), out_value_addr));
}
compile_module_up retval (new struct compile_module);
diff --git a/gdb/compile/compile-object-run.c b/gdb/compile/compile-object-run.c
index b2e09cab071..331ae35c5e9 100644
--- a/gdb/compile/compile-object-run.c
+++ b/gdb/compile/compile-object-run.c
@@ -134,7 +134,7 @@ compile_object_run (compile_module_up &&module)
try
{
- struct type *func_type = SYMBOL_TYPE (func_sym);
+ struct type *func_type = func_sym->type ();
int current_arg = 0;
struct value **vargs;
@@ -145,7 +145,7 @@ compile_object_run (compile_module_up &&module)
gdb_assert (func_type->code () == TYPE_CODE_FUNC);
func_val = value_from_pointer (lookup_pointer_type (func_type),
- BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (func_sym)));
+ func_sym->value_block ()->entry_pc ());
vargs = XALLOCAVEC (struct value *, func_type->num_fields ());
if (func_type->num_fields () >= 1)
diff --git a/gdb/compile/compile.c b/gdb/compile/compile.c
index 3b76e102257..2843f05fdd7 100644
--- a/gdb/compile/compile.c
+++ b/gdb/compile/compile.c
@@ -44,6 +44,7 @@
#include "gdbsupport/gdb_unlinker.h"
#include "gdbsupport/pathstuff.h"
#include "gdbsupport/scoped_ignore_signal.h"
+#include "gdbsupport/buildargv.h"
@@ -232,7 +233,7 @@ static void
show_compile_debug (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Compile debugging is %s.\n"), value);
+ gdb_printf (file, _("Compile debugging is %s.\n"), value);
}
@@ -296,8 +297,8 @@ compile_file_command (const char *args, int from_tty)
error (_("You must provide a filename for this command."));
args = skip_spaces (args);
- gdb::unique_xmalloc_ptr<char> abspath = gdb_abspath (args);
- std::string buffer = string_printf ("#include \"%s\"\n", abspath.get ());
+ std::string abspath = gdb_abspath (args);
+ std::string buffer = string_printf ("#include \"%s\"\n", abspath.c_str ());
eval_compile_command (NULL, buffer.c_str (), scope, NULL);
}
@@ -483,13 +484,13 @@ get_expr_block_and_pc (CORE_ADDR *pc)
struct symtab_and_line cursal = get_current_source_symtab_and_line ();
if (cursal.symtab)
- block = BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (cursal.symtab),
- STATIC_BLOCK);
+ block = cursal.symtab->compunit ()->blockvector ()->static_block ();
+
if (block != NULL)
- *pc = BLOCK_ENTRY_PC (block);
+ *pc = block->entry_pc ();
}
else
- *pc = BLOCK_ENTRY_PC (block);
+ *pc = block->entry_pc ();
return block;
}
@@ -529,9 +530,9 @@ static void
show_compile_args (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Compile command command-line arguments "
- "are \"%s\".\n"),
- value);
+ gdb_printf (file, _("Compile command command-line arguments "
+ "are \"%s\".\n"),
+ value);
}
/* String for 'set compile-gcc' and 'show compile-gcc'. */
@@ -543,8 +544,8 @@ static void
show_compile_gcc (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Compile command GCC driver filename is \"%s\".\n"),
- value);
+ gdb_printf (file, _("Compile command GCC driver filename is \"%s\".\n"),
+ value);
}
/* Return DW_AT_producer parsed for get_selected_frame () (if any).
@@ -560,11 +561,11 @@ get_selected_pc_producer_options (void)
struct compunit_symtab *symtab = find_pc_compunit_symtab (pc);
const char *cs;
- if (symtab == NULL || symtab->producer == NULL
- || !startswith (symtab->producer, "GNU "))
+ if (symtab == NULL || symtab->producer () == NULL
+ || !startswith (symtab->producer (), "GNU "))
return NULL;
- cs = symtab->producer;
+ cs = symtab->producer ();
while (*cs != 0 && *cs != '-')
cs = skip_spaces (skip_to_space (cs));
if (*cs != '-')
@@ -646,7 +647,7 @@ get_args (const compile_instance *compiler, struct gdbarch *gdbarch)
static void
print_callback (void *ignore, const char *message)
{
- fputs_filtered (message, gdb_stderr);
+ gdb_puts (message, gdb_stderr);
}
/* Process the compilation request. On success it returns the object
@@ -707,7 +708,7 @@ compile_to_object (struct command_line *cmd, const char *cmd_string,
= current_language->compute_program (compiler.get (), input, gdbarch,
expr_block, expr_pc);
if (compile_debug)
- fprintf_unfiltered (gdb_stdlog, "debug output:\n\n%s", code.c_str ());
+ gdb_printf (gdb_stdlog, "debug output:\n\n%s", code.c_str ());
compiler->set_verbose (compile_debug);
@@ -746,10 +747,10 @@ compile_to_object (struct command_line *cmd, const char *cmd_string,
{
int argi;
- fprintf_unfiltered (gdb_stdlog, "Passing %d compiler options:\n", argc);
+ gdb_printf (gdb_stdlog, "Passing %d compiler options:\n", argc);
for (argi = 0; argi < argc; argi++)
- fprintf_unfiltered (gdb_stdlog, "Compiler option %d: <%s>\n",
- argi, argv[argi]);
+ gdb_printf (gdb_stdlog, "Compiler option %d: <%s>\n",
+ argi, argv[argi]);
}
compile_file_names fnames = get_new_file_names ();
@@ -768,8 +769,8 @@ compile_to_object (struct command_line *cmd, const char *cmd_string,
}
if (compile_debug)
- fprintf_unfiltered (gdb_stdlog, "source file produced: %s\n\n",
- fnames.source_file ());
+ gdb_printf (gdb_stdlog, "source file produced: %s\n\n",
+ fnames.source_file ());
/* If we don't do this, then GDB simply exits
when the compiler dies. */
@@ -782,8 +783,8 @@ compile_to_object (struct command_line *cmd, const char *cmd_string,
error (_("Compilation failed."));
if (compile_debug)
- fprintf_unfiltered (gdb_stdlog, "object file produced: %s\n\n",
- fnames.object_file ());
+ gdb_printf (gdb_stdlog, "object file produced: %s\n\n",
+ fnames.object_file ());
/* Keep the source file. */
source_remover->keep ();
diff --git a/gdb/complaints.c b/gdb/complaints.c
index 2c2d90a39d2..7e39f241938 100644
--- a/gdb/complaints.c
+++ b/gdb/complaints.c
@@ -23,6 +23,7 @@
#include "gdbcmd.h"
#include "gdbsupport/selftest.h"
#include <unordered_map>
+#include <mutex>
/* Map format strings to counters. */
@@ -34,6 +35,10 @@ static std::unordered_map<const char *, int> counters;
int stop_whining = 0;
+#if CXX_STD_THREAD
+static std::mutex complaint_mutex;
+#endif /* CXX_STD_THREAD */
+
/* See complaints.h. */
void
@@ -41,8 +46,13 @@ complaint_internal (const char *fmt, ...)
{
va_list args;
- if (++counters[fmt] > stop_whining)
- return;
+ {
+#if CXX_STD_THREAD
+ std::lock_guard<std::mutex> guard (complaint_mutex);
+#endif
+ if (++counters[fmt] > stop_whining)
+ return;
+ }
va_start (args, fmt);
@@ -50,9 +60,9 @@ complaint_internal (const char *fmt, ...)
(*deprecated_warning_hook) (fmt, args);
else
{
- fputs_filtered (_("During symbol reading: "), gdb_stderr);
- vfprintf_filtered (gdb_stderr, fmt, args);
- fputs_filtered ("\n", gdb_stderr);
+ gdb_puts (_("During symbol reading: "), gdb_stderr);
+ gdb_vprintf (gdb_stderr, fmt, args);
+ gdb_puts ("\n", gdb_stderr);
}
va_end (args);
@@ -66,13 +76,67 @@ clear_complaints ()
counters.clear ();
}
+/* See complaints.h. */
+
+complaint_interceptor *complaint_interceptor::g_complaint_interceptor;
+
+/* See complaints.h. */
+
+complaint_interceptor::complaint_interceptor ()
+ : m_saved_warning_hook (deprecated_warning_hook)
+{
+ /* These cannot be stacked. */
+ gdb_assert (g_complaint_interceptor == nullptr);
+ g_complaint_interceptor = this;
+ deprecated_warning_hook = issue_complaint;
+}
+
+/* A helper that wraps a warning hook. */
+
+static void
+wrap_warning_hook (void (*hook) (const char *, va_list), ...)
+{
+ va_list args;
+ va_start (args, hook);
+ hook ("%s", args);
+ va_end (args);
+}
+
+/* See complaints.h. */
+
+complaint_interceptor::~complaint_interceptor ()
+{
+ for (const std::string &str : m_complaints)
+ {
+ if (m_saved_warning_hook)
+ wrap_warning_hook (m_saved_warning_hook, str.c_str ());
+ else
+ gdb_printf (gdb_stderr, _("During symbol reading: %s\n"),
+ str.c_str ());
+ }
+
+ g_complaint_interceptor = nullptr;
+ deprecated_warning_hook = m_saved_warning_hook;
+}
+
+/* See complaints.h. */
+
+void
+complaint_interceptor::issue_complaint (const char *fmt, va_list args)
+{
+#if CXX_STD_THREAD
+ std::lock_guard<std::mutex> guard (complaint_mutex);
+#endif
+ g_complaint_interceptor->m_complaints.insert (string_vprintf (fmt, args));
+}
+
static void
complaints_show_value (struct ui_file *file, int from_tty,
struct cmd_list_element *cmd, const char *value)
{
- fprintf_filtered (file, _("Max number of complaints about incorrect"
- " symbols is %s.\n"),
- value);
+ gdb_printf (file, _("Max number of complaints about incorrect"
+ " symbols is %s.\n"),
+ value);
}
#if GDB_SELF_TEST
diff --git a/gdb/complaints.h b/gdb/complaints.h
index e3d5d4474e7..68c79bd6d0a 100644
--- a/gdb/complaints.h
+++ b/gdb/complaints.h
@@ -21,6 +21,8 @@
#if !defined (COMPLAINTS_H)
#define COMPLAINTS_H
+#include <unordered_set>
+
/* Helper for complaint. */
extern void complaint_internal (const char *fmt, ...)
ATTRIBUTE_PRINTF (1, 2);
@@ -46,5 +48,37 @@ extern int stop_whining;
extern void clear_complaints ();
+/* A class that can handle calls to complaint from multiple threads.
+ When this is instantiated, it hooks into the complaint mechanism,
+ so the 'complaint' macro can continue to be used. When it is
+ destroyed, it issues all the complaints that have been stored. It
+ should only be instantiated in the main thread. */
+
+class complaint_interceptor
+{
+public:
+
+ complaint_interceptor ();
+ ~complaint_interceptor ();
+
+ DISABLE_COPY_AND_ASSIGN (complaint_interceptor);
+
+private:
+
+ /* The issued complaints. */
+ std::unordered_set<std::string> m_complaints;
+
+ /* The saved value of deprecated_warning_hook. */
+ void (*m_saved_warning_hook) (const char *, va_list)
+ ATTRIBUTE_FPTR_PRINTF (1,0);
+
+ /* A helper function that is used by the 'complaint' implementation
+ to issue a complaint. */
+ static void issue_complaint (const char *, va_list)
+ ATTRIBUTE_PRINTF (1, 0);
+
+ /* This object. Used by the static callback function. */
+ static complaint_interceptor *g_complaint_interceptor;
+};
#endif /* !defined (COMPLAINTS_H) */
diff --git a/gdb/completer.c b/gdb/completer.c
index d3900ae2014..fea3eb9329d 100644
--- a/gdb/completer.c
+++ b/gdb/completer.c
@@ -36,7 +36,7 @@
calling a hook instead so we eliminate the CLI dependency. */
#include "gdbcmd.h"
-/* Needed for rl_completer_word_break_characters() and for
+/* Needed for rl_completer_word_break_characters and for
rl_filename_completion_function. */
#include "readline/readline.h"
@@ -1055,107 +1055,31 @@ location_completer_handle_brkchars (struct cmd_list_element *ignore,
location_completer (ignore, tracker, text, NULL);
}
-/* Helper for expression_completer which recursively adds field and
- method names from TYPE, a struct or union type, to the OUTPUT
- list. */
-
-static void
-add_struct_fields (struct type *type, completion_list &output,
- const char *fieldname, int namelen)
-{
- int i;
- int computed_type_name = 0;
- const char *type_name = NULL;
-
- type = check_typedef (type);
- for (i = 0; i < type->num_fields (); ++i)
- {
- if (i < TYPE_N_BASECLASSES (type))
- add_struct_fields (TYPE_BASECLASS (type, i),
- output, fieldname, namelen);
- else if (type->field (i).name ())
- {
- if (type->field (i).name ()[0] != '\0')
- {
- if (! strncmp (type->field (i).name (),
- fieldname, namelen))
- output.emplace_back (xstrdup (type->field (i).name ()));
- }
- else if (type->field (i).type ()->code () == TYPE_CODE_UNION)
- {
- /* Recurse into anonymous unions. */
- add_struct_fields (type->field (i).type (),
- output, fieldname, namelen);
- }
- }
- }
-
- for (i = TYPE_NFN_FIELDS (type) - 1; i >= 0; --i)
- {
- const char *name = TYPE_FN_FIELDLIST_NAME (type, i);
-
- if (name && ! strncmp (name, fieldname, namelen))
- {
- if (!computed_type_name)
- {
- type_name = type->name ();
- computed_type_name = 1;
- }
- /* Omit constructors from the completion list. */
- if (!type_name || strcmp (type_name, name))
- output.emplace_back (xstrdup (name));
- }
- }
-}
-
/* See completer.h. */
void
complete_expression (completion_tracker &tracker,
const char *text, const char *word)
{
- struct type *type = NULL;
- gdb::unique_xmalloc_ptr<char> fieldname;
- enum type_code code = TYPE_CODE_UNDEF;
+ expression_up exp;
+ std::unique_ptr<expr_completion_base> expr_completer;
/* Perform a tentative parse of the expression, to see whether a
field completion is required. */
try
{
- type = parse_expression_for_completion (text, &fieldname, &code);
+ exp = parse_expression_for_completion (text, &expr_completer);
}
catch (const gdb_exception_error &except)
{
return;
}
- if (fieldname != nullptr && type)
- {
- for (;;)
- {
- type = check_typedef (type);
- if (!type->is_pointer_or_reference ())
- break;
- type = TYPE_TARGET_TYPE (type);
- }
-
- if (type->code () == TYPE_CODE_UNION
- || type->code () == TYPE_CODE_STRUCT)
- {
- completion_list result;
-
- add_struct_fields (type, result, fieldname.get (),
- strlen (fieldname.get ()));
- tracker.add_completions (std::move (result));
- return;
- }
- }
- else if (fieldname != nullptr && code != TYPE_CODE_UNDEF)
- {
- collect_symbol_completion_matches_type (tracker, fieldname.get (),
- fieldname.get (), code);
- return;
- }
+ /* Part of the parse_expression_for_completion contract. */
+ gdb_assert ((exp == nullptr) == (expr_completer == nullptr));
+ if (expr_completer != nullptr
+ && expr_completer->complete (exp.get (), tracker))
+ return;
complete_files_symbols (tracker, text, word);
}
@@ -1895,13 +1819,9 @@ reg_or_group_completer_1 (completion_tracker &tracker,
if ((targets & complete_reggroup_names) != 0)
{
- struct reggroup *group;
-
- for (group = reggroup_next (gdbarch, NULL);
- group != NULL;
- group = reggroup_next (gdbarch, group))
+ for (const struct reggroup *group : gdbarch_reggroups (gdbarch))
{
- name = reggroup_name (group);
+ name = group->name ();
if (strncmp (word, name, len) == 0)
tracker.add_completion (make_unique_xstrdup (name));
}
@@ -2011,7 +1931,7 @@ gdb_completion_word_break_characters_throw ()
rl_basic_quote_characters = NULL;
}
- return rl_completer_word_break_characters;
+ return (char *) rl_completer_word_break_characters;
}
char *
diff --git a/gdb/completer.h b/gdb/completer.h
index 93125e4c54c..78e5240a95e 100644
--- a/gdb/completer.h
+++ b/gdb/completer.h
@@ -17,6 +17,7 @@
#if !defined (COMPLETER_H)
#define COMPLETER_H 1
+#include "gdbsupport/gdb-hashtab.h"
#include "gdbsupport/gdb_vecs.h"
#include "command.h"
diff --git a/gdb/config.in b/gdb/config.in
index cd9f252eba1..a4975c68aad 100644
--- a/gdb/config.in
+++ b/gdb/config.in
@@ -370,9 +370,6 @@
/* Define if sys/ptrace.h defines the PT_GETDBREGS request. */
#undef HAVE_PT_GETDBREGS
-/* Define if sys/ptrace.h defines the PT_GETXMMREGS request. */
-#undef HAVE_PT_GETXMMREGS
-
/* Define to 1 if you have the `pt_insn_event' function. */
#undef HAVE_PT_INSN_EVENT
@@ -778,9 +775,6 @@
python-config.py --exec-prefix. */
#undef WITH_PYTHON_PATH
-/* Define if the simulator is being linked in. */
-#undef WITH_SIM
-
/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
significant byte first (like Motorola and SPARC, unlike Intel). */
#if defined AC_APPLE_UNIVERSAL_BUILD
diff --git a/gdb/configure b/gdb/configure
index 429eaebe568..1008cbef28b 100755
--- a/gdb/configure
+++ b/gdb/configure
@@ -11262,44 +11262,12 @@ $as_echo_n "checking for python... " >&6; }
int
main ()
{
-Py_Initialize ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- have_libpython=yes
- found_usable_python=yes
- PYTHON_CPPFLAGS=$new_CPPFLAGS
- PYTHON_LIBS=$new_LIBS
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- CPPFLAGS=$save_CPPFLAGS
- LIBS=$save_LIBS
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${found_usable_python}" >&5
-$as_echo "${found_usable_python}" >&6; }
- elif test "${have_python_config}" != failed; then
- if test "${have_libpython}" = no; then
+ #if PY_MAJOR_VERSION != 3
+ # error "We only support Python 3"
+ #endif
+ Py_Initialize ();
-
- new_CPPFLAGS=${python_includes}
- new_LIBS="-lpython2.7 ${python_libs}"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for python" >&5
-$as_echo_n "checking for python... " >&6; }
- save_CPPFLAGS=$CPPFLAGS
- save_LIBS=$LIBS
- CPPFLAGS="$CPPFLAGS $new_CPPFLAGS"
- LIBS="$new_LIBS $LIBS"
- found_usable_python=no
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include "Python.h"
-int
-main ()
-{
-Py_Initialize ();
;
return 0;
}
@@ -11317,44 +11285,6 @@ rm -f core conftest.err conftest.$ac_objext \
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ${found_usable_python}" >&5
$as_echo "${found_usable_python}" >&6; }
- fi
- if test "${have_libpython}" = no; then
-
-
- new_CPPFLAGS=${python_includes}
- new_LIBS="-lpython2.6 ${python_libs}"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for python" >&5
-$as_echo_n "checking for python... " >&6; }
- save_CPPFLAGS=$CPPFLAGS
- save_LIBS=$LIBS
- CPPFLAGS="$CPPFLAGS $new_CPPFLAGS"
- LIBS="$new_LIBS $LIBS"
- found_usable_python=no
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include "Python.h"
-int
-main ()
-{
-Py_Initialize ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- have_libpython=yes
- found_usable_python=yes
- PYTHON_CPPFLAGS=$new_CPPFLAGS
- PYTHON_LIBS=$new_LIBS
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- CPPFLAGS=$save_CPPFLAGS
- LIBS=$save_LIBS
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${found_usable_python}" >&5
-$as_echo "${found_usable_python}" >&6; }
-
- fi
fi
if test "${have_libpython}" = no; then
@@ -12148,10 +12078,10 @@ ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
- save_CFLAGS="$CFLAGS"
- save_LDFLAGS="$LDFLAGS"
- CFLAGS="$CFLAGS $srchigh_pkg_cflags"
- LDFLAGS="$LDFLAGS $srchigh_pkg_libs"
+ save_CXXFLAGS="$CXXFLAGS"
+ save_LIBS="$LIBS"
+ CXXFLAGS="$CXXFLAGS $srchigh_pkg_cflags"
+ LIBS="$LIBS $srchigh_pkg_libs"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <srchilite/sourcehighlight.h>
@@ -12173,8 +12103,8 @@ else
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
- CFLAGS="$save_CFLAGS"
- LDFLAGS="$save_LDFLAGS"
+ CXXFLAGS="$save_CXXFLAGS"
+ LIBS="$save_LIBS"
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -14738,12 +14668,11 @@ ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ex
ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
- if test "$threads" = "yes"; then
- save_LIBS="$LIBS"
- LIBS="$PTHREAD_LIBS $LIBS"
- save_CXXFLAGS="$CXXFLAGS"
- CXXFLAGS="$PTHREAD_CFLAGS $save_CXXFLAGS"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for std::thread" >&5
+ save_LIBS="$LIBS"
+ LIBS="$PTHREAD_LIBS $LIBS"
+ save_CXXFLAGS="$CXXFLAGS"
+ CXXFLAGS="$PTHREAD_CFLAGS $save_CXXFLAGS"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for std::thread" >&5
$as_echo_n "checking for std::thread... " >&6; }
if ${gdb_cv_cxx_std_thread+:} false; then :
$as_echo_n "(cached) " >&6
@@ -14751,7 +14680,7 @@ else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <thread>
- void callback() { }
+ void callback() { }
int
main ()
{
@@ -14770,6 +14699,7 @@ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_cxx_std_thread" >&5
$as_echo "$gdb_cv_cxx_std_thread" >&6; }
+ if test "$threads" = "yes"; then
# This check must be here, while LIBS includes any necessary
# threading library.
for ac_func in pthread_sigmask pthread_setname_np
@@ -14784,10 +14714,9 @@ _ACEOF
fi
done
-
- LIBS="$save_LIBS"
- CXXFLAGS="$save_CXXFLAGS"
fi
+ LIBS="$save_LIBS"
+ CXXFLAGS="$save_CXXFLAGS"
if test "$want_threading" = "yes"; then
if test "$gdb_cv_cxx_std_thread" = "yes"; then
@@ -16245,43 +16174,6 @@ $as_echo "#define HAVE_PT_GETDBREGS 1" >>confdefs.h
fi
-# See if <sys/ptrace.h> provides the PT_GETXMMREGS request.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for PT_GETXMMREGS" >&5
-$as_echo_n "checking for PT_GETXMMREGS... " >&6; }
-if ${gdb_cv_have_pt_getxmmregs+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <sys/types.h>
- #include <sys/ptrace.h>
-int
-main ()
-{
-PT_GETXMMREGS;
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- gdb_cv_have_pt_getxmmregs=yes
-else
- gdb_cv_have_pt_getxmmregs=no
-
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_have_pt_getxmmregs" >&5
-$as_echo "$gdb_cv_have_pt_getxmmregs" >&6; }
-if test "$gdb_cv_have_pt_getxmmregs" = yes; then
-
-$as_echo "#define HAVE_PT_GETXMMREGS 1" >>confdefs.h
-
-fi
-
# See if <sys/ptrace.h> supports LWP names on FreeBSD
# Older FreeBSD versions don't have the pl_tdname member of
# `struct ptrace_lwpinfo'.
@@ -17000,6 +16892,64 @@ _ACEOF
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking the compiler type" >&5
+$as_echo_n "checking the compiler type... " >&6; }
+if ${gdb_cv_compiler_type+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ gdb_cv_compiler_type=unknown
+ if test "$gdb_cv_compiler_type" = unknown; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ #if !defined __GNUC__ || defined __clang__
+ #error not gcc
+ #endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ gdb_cv_compiler_type=gcc
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+
+ if test "$gdb_cv_compiler_type" = unknown; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ #ifndef __clang__
+ #error not clang
+ #endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ gdb_cv_compiler_type=clang
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_compiler_type" >&5
+$as_echo "$gdb_cv_compiler_type" >&6; }
+
+ GDB_COMPILER_TYPE="$gdb_cv_compiler_type"
+
+
# Check whether --enable-werror was given.
if test "${enable_werror+set}" = set; then :
enableval=$enable_werror; case "${enableval}" in
@@ -17036,10 +16986,16 @@ build_warnings="-Wall -Wpointer-arith \
-Wdeprecated-copy-dtor \
-Wredundant-move \
-Wmissing-declarations \
--Wmissing-prototypes \
-Wstrict-null-sentinel \
"
+# The -Wmissing-prototypes flag will be accepted by GCC, but results
+# in a warning being printed about the flag not being valid for C++,
+# this is something to do with using ccache, and argument ordering.
+if test "$GDB_COMPILER_TYPE" != gcc; then
+ build_warnings="$build_warnings -Wmissing-prototypes"
+fi
+
case "${host}" in
*-*-mingw32*)
# Enable -Wno-format by default when using gcc on mingw since many
@@ -18717,9 +18673,6 @@ if test "${ignore_sim}" = "false"; then
SIM="${gdb_sim}"
SIM_OBS="remote-sim.o"
-$as_echo "#define WITH_SIM 1" >>confdefs.h
-
-
# Some tdep code should only be compiled in when the ppc sim is
# built. PR sim/13418.
case $target in
diff --git a/gdb/configure.ac b/gdb/configure.ac
index 13e880d59a9..e3c19bc8859 100644
--- a/gdb/configure.ac
+++ b/gdb/configure.ac
@@ -717,7 +717,12 @@ AC_DEFUN([AC_TRY_LIBPYTHON],
LIBS="$new_LIBS $LIBS"
found_usable_python=no
AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include "Python.h"]],
- [[Py_Initialize ();]])],
+ [[
+ #if PY_MAJOR_VERSION != 3
+ # error "We only support Python 3"
+ #endif
+ Py_Initialize ();
+ ]])],
[have_libpython_var=yes
found_usable_python=yes
PYTHON_CPPFLAGS=$new_CPPFLAGS
@@ -733,7 +738,6 @@ dnl no - Don't include python support.
dnl yes - Include python support, error if it's missing.
dnl If we find python in $PATH, use it to fetch configure options,
dnl otherwise assume the compiler can find it with no help from us.
-dnl Python 2.7 and 2.6 are tried in turn.
dnl auto - Same as "yes", but if python is missing from the system,
dnl fall back to "no".
dnl /path/to/python/exec-prefix -
@@ -742,7 +746,6 @@ dnl If /path/to/python/exec-prefix/bin/python exists, use it to find
dnl the compilation parameters. Otherwise use
dnl -I/path/to/python/exec-prefix/include,
dnl -L/path/to/python/exec-prefix/lib.
-dnl Python 2.7 and 2.6 are tried in turn.
dnl NOTE: This case is historical. It is what was done for 7.0/7.1
dnl but is deprecated.
dnl /path/to/python/executable -
@@ -877,15 +880,6 @@ else
if test "${have_python_config}" = yes; then
AC_TRY_LIBPYTHON(have_libpython,
${python_includes}, ${python_libs})
- elif test "${have_python_config}" != failed; then
- if test "${have_libpython}" = no; then
- AC_TRY_LIBPYTHON(have_libpython,
- ${python_includes}, "-lpython2.7 ${python_libs}")
- fi
- if test "${have_libpython}" = no; then
- AC_TRY_LIBPYTHON(have_libpython,
- ${python_includes}, "-lpython2.6 ${python_libs}")
- fi
fi
if test "${have_libpython}" = no; then
@@ -1242,10 +1236,10 @@ either use --disable-source-highlight or dnl
# This situation can occur for instance when using a source highlight
# library compiled with g++ 7.5.0 while building gdb with g++ 4.8.5.
AC_LANG_PUSH(C++)
- save_CFLAGS="$CFLAGS"
- save_LDFLAGS="$LDFLAGS"
- CFLAGS="$CFLAGS $srchigh_pkg_cflags"
- LDFLAGS="$LDFLAGS $srchigh_pkg_libs"
+ save_CXXFLAGS="$CXXFLAGS"
+ save_LIBS="$LIBS"
+ CXXFLAGS="$CXXFLAGS $srchigh_pkg_cflags"
+ LIBS="$LIBS $srchigh_pkg_libs"
AC_LINK_IFELSE(
[AC_LANG_PROGRAM(
[#include <srchilite/sourcehighlight.h>],
@@ -1255,8 +1249,8 @@ either use --disable-source-highlight or dnl
[have_usable_source_highlight=yes],
[have_usable_source_highlight=no]
)
- CFLAGS="$save_CFLAGS"
- LDFLAGS="$save_LDFLAGS"
+ CXXFLAGS="$save_CXXFLAGS"
+ LIBS="$save_LIBS"
AC_LANG_POP(C++)
if test "${have_usable_source_highlight}" = "yes"; then
@@ -1486,26 +1480,6 @@ if test "$gdb_cv_have_pt_getdbregs" = yes; then
[Define if sys/ptrace.h defines the PT_GETDBREGS request.])
fi
-# See if <sys/ptrace.h> provides the PT_GETXMMREGS request.
-AC_MSG_CHECKING(for PT_GETXMMREGS)
-AC_CACHE_VAL(
- [gdb_cv_have_pt_getxmmregs],
- [AC_COMPILE_IFELSE(
- [AC_LANG_PROGRAM(
- [#include <sys/types.h>
- #include <sys/ptrace.h>],
- [PT_GETXMMREGS;]
- )],
- [gdb_cv_have_pt_getxmmregs=yes],
- [gdb_cv_have_pt_getxmmregs=no]
- )]
-)
-AC_MSG_RESULT($gdb_cv_have_pt_getxmmregs)
-if test "$gdb_cv_have_pt_getxmmregs" = yes; then
- AC_DEFINE(HAVE_PT_GETXMMREGS, 1,
- [Define if sys/ptrace.h defines the PT_GETXMMREGS request.])
-fi
-
# See if <sys/ptrace.h> supports LWP names on FreeBSD
# Older FreeBSD versions don't have the pl_tdname member of
# `struct ptrace_lwpinfo'.
@@ -1833,6 +1807,7 @@ GDB_AC_WITH_DIR(SYSTEM_GDBINIT_DIR, system-gdbinit-dir,
[automatically load system-wide gdbinit files from this directory],
[])
+AM_GDB_COMPILER_TYPE
AM_GDB_WARNINGS
AM_GDB_UBSAN
@@ -2069,7 +2044,6 @@ if test "${ignore_sim}" = "false"; then
if test x"${gdb_sim}" != x ; then
SIM="${gdb_sim}"
SIM_OBS="remote-sim.o"
- AC_DEFINE(WITH_SIM, 1, [Define if the simulator is being linked in.])
# Some tdep code should only be compiled in when the ppc sim is
# built. PR sim/13418.
diff --git a/gdb/configure.host b/gdb/configure.host
index be40cc814fc..da71675b201 100644
--- a/gdb/configure.host
+++ b/gdb/configure.host
@@ -58,6 +58,7 @@ arc*) gdb_host_cpu=arc ;;
arm*) gdb_host_cpu=arm ;;
hppa*) gdb_host_cpu=pa ;;
i[34567]86*) gdb_host_cpu=i386 ;;
+loongarch*) gdb_host_cpu=loongarch ;;
m68*) gdb_host_cpu=m68k ;;
mips*) gdb_host_cpu=mips ;;
powerpc* | rs6000) gdb_host_cpu=powerpc ;;
@@ -117,6 +118,8 @@ i[34567]86-*-cygwin*) gdb_host=cygwin ;;
ia64-*-linux*) gdb_host=linux ;;
+loongarch*-linux*) gdb_host=linux ;;
+
m68*-*-linux*) gdb_host=linux ;;
m68*-*-netbsd* | m68*-*-knetbsd*-gnu)
gdb_host=nbsdelf ;;
diff --git a/gdb/configure.nat b/gdb/configure.nat
index 6fc3978a77e..d219d6a960c 100644
--- a/gdb/configure.nat
+++ b/gdb/configure.nat
@@ -154,7 +154,8 @@ case ${gdb_host} in
case ${gdb_host_cpu} in
aarch64)
# Host: FreeBSD/aarch64
- NATDEPFILES="${NATDEPFILES} aarch64-fbsd-nat.o"
+ NATDEPFILES="${NATDEPFILES} aarch64-nat.o \
+ nat/aarch64-hw-point.o aarch64-fbsd-nat.o"
LOADLIBES=
;;
arm)
@@ -165,7 +166,7 @@ case ${gdb_host} in
i386)
# Host: FreeBSD/i386
NATDEPFILES="${NATDEPFILES} x86-nat.o nat/x86-dregs.o \
- x86-bsd-nat.o i386-bsd-nat.o i386-fbsd-nat.o bsd-kvm.o"
+ x86-bsd-nat.o x86-fbsd-nat.o i386-fbsd-nat.o bsd-kvm.o"
;;
mips)
# Host: FreeBSD/mips
@@ -192,9 +193,9 @@ case ${gdb_host} in
case ${gdb_host_cpu} in
i386)
# Host: FreeBSD/amd64
- NATDEPFILES="${NATDEPFILES} amd64-nat.o amd64-bsd-nat.o \
+ NATDEPFILES="${NATDEPFILES} amd64-nat.o \
amd64-fbsd-nat.o bsd-kvm.o x86-nat.o nat/x86-dregs.o \
- x86-bsd-nat.o"
+ x86-bsd-nat.o x86-fbsd-nat.o"
;;
esac
;;
@@ -233,8 +234,9 @@ case ${gdb_host} in
case ${gdb_host_cpu} in
aarch64)
# Host: AArch64 based machine running GNU/Linux
- NATDEPFILES="${NATDEPFILES} aarch64-linux-nat.o \
- aarch32-linux-nat.o nat/aarch64-linux-hw-point.o \
+ NATDEPFILES="${NATDEPFILES} aarch64-nat.o aarch64-linux-nat.o \
+ aarch32-linux-nat.o nat/aarch64-hw-point.o \
+ nat/aarch64-linux-hw-point.o \
nat/aarch64-linux.o \
nat/aarch64-sve-linux-ptrace.o \
nat/aarch64-mte-linux-ptrace.o"
@@ -258,6 +260,10 @@ case ${gdb_host} in
# Host: Intel IA-64 running GNU/Linux
NATDEPFILES="${NATDEPFILES} ia64-linux-nat.o"
;;
+ loongarch)
+ # Host: LoongArch, running GNU/Linux.
+ NATDEPFILES="${NATDEPFILES} loongarch-linux-nat.o linux-nat-trad.o"
+ ;;
m32r)
# Host: M32R based machine running GNU/Linux
NATDEPFILES="${NATDEPFILES} m32r-linux-nat.o"
diff --git a/gdb/configure.tgt b/gdb/configure.tgt
index 56cdfef937b..0705ccf32b8 100644
--- a/gdb/configure.tgt
+++ b/gdb/configure.tgt
@@ -91,6 +91,11 @@ ia64*-*-*)
cpu_obs="ia64-tdep.o"
;;
+loongarch*-*-*)
+ # Target: LoongArch baremetal
+ cpu_obs="loongarch-tdep.o arch/loongarch.o"
+ ;;
+
riscv*-*-*)
cpu_obs="riscv-tdep.o riscv-none-tdep.o arch/riscv.o \
ravenscar-thread.o riscv-ravenscar-thread.o";;
@@ -341,6 +346,12 @@ lm32-*-*)
gdb_target_obs="lm32-tdep.o"
;;
+loongarch*-*-linux*)
+ # Target: LoongArch running Linux
+ gdb_target_obs="loongarch-linux-tdep.o glibc-tdep.o \
+ linux-tdep.o solib-svr4.o"
+ ;;
+
m32c-*-*)
# Target: Renesas M32C family
gdb_target_obs="m32c-tdep.o"
@@ -539,11 +550,6 @@ rx-*-*)
gdb_target_obs="rx-tdep.o"
;;
-score-*-*)
- # Target: S+core embedded system
- gdb_target_obs="score-tdep.o"
- ;;
-
sh*-*-linux*)
# Target: GNU/Linux Super-H
gdb_target_obs="sh-tdep.o sh-linux-tdep.o \
diff --git a/gdb/contrib/gdb-add-index.sh b/gdb/contrib/gdb-add-index.sh
index 0ff943d506e..591f32bbbbe 100755
--- a/gdb/contrib/gdb-add-index.sh
+++ b/gdb/contrib/gdb-add-index.sh
@@ -112,6 +112,7 @@ rm -f $tmp_files
trap "rm -f $tmp_files" 0
$GDB --batch -nx -iex 'set auto-load no' \
+ -iex 'set debuginfod enabled off' \
-ex "file $file" -ex "save gdb-index $dwarf5 $dir" || {
# Just in case.
status=$?
diff --git a/gdb/contrib/test_pubnames_and_indexes.py b/gdb/contrib/test_pubnames_and_indexes.py
index b87d2e16806..8e89a59263c 100644
--- a/gdb/contrib/test_pubnames_and_indexes.py
+++ b/gdb/contrib/test_pubnames_and_indexes.py
@@ -1,4 +1,4 @@
-#! /usr/bin/env python
+#! /usr/bin/env python3
# Copyright (C) 2011-2022 Free Software Foundation, Inc.
#
@@ -102,24 +102,24 @@ def CheckSets(list0, list1, name0, name1):
difference0 = set(list0) - set(list1)
if len(difference0) != 0:
- print "Elements in " + name0 + " but not " + name1 + ": (",
- print len(difference0),
- print ")"
+ print("Elements in " + name0 + " but not " + name1 + ": (", end=" ")
+ print(len(difference0), end=" ")
+ print(")")
for element in difference0:
- print " " + element
+ print(" " + element)
difference1 = set(list1) - set(list0)
if len(difference1) != 0:
- print "Elements in " + name1 + " but not " + name0 + ": (",
- print len(difference1),
- print ")"
+ print("Elements in " + name1 + " but not " + name0 + ": (", end=" ")
+ print(len(difference1), end=" ")
+ print(")")
for element in difference1:
- print " " + element
+ print(" " + element)
if len(difference0) != 0 or len(difference1) != 0:
return True
- print name0 + " and " + name1 + " are identical."
+ print(name0 + " and " + name1 + " are identical.")
return False
@@ -152,7 +152,7 @@ def find_executables():
def main(argv):
"""The main subprogram."""
if len(argv) != 2:
- print "Usage: test_pubnames_and_indexes.py <filename>"
+ print("Usage: test_pubnames_and_indexes.py <filename>")
sys.exit(2)
find_executables()
@@ -200,15 +200,15 @@ def main(argv):
# Find the differences between the various indices.
if len(gold_index) == 0:
- print "Gold index is empty"
+ print("Gold index is empty")
failed |= True
if len(gdb_index) == 0:
- print "Gdb index is empty"
+ print("Gdb index is empty")
failed |= True
if len(pubs_list) == 0:
- print "Pubs list is empty"
+ print("Pubs list is empty")
failed |= True
failed |= CheckSets(gdb_index, gold_index, "gdb index", "gold index")
@@ -216,7 +216,7 @@ def main(argv):
failed |= CheckSets(pubs_list, gdb_index, "pubs list", "gdb index")
if failed:
- print "Test failed"
+ print("Test failed")
sys.exit(1)
diff --git a/gdb/copying.awk b/gdb/copying.awk
index 702a6b4338a..bbeb2664f4c 100644
--- a/gdb/copying.awk
+++ b/gdb/copying.awk
@@ -21,11 +21,11 @@ BEGIN {
NR == 1,/^[ ]*15\. Disclaimer of Warranty\.[ ]*$/ {
if ($0 ~ / /)
{
- printf " printf_filtered (\"\\n\");\n";
+ printf " gdb_printf (\"\\n\");\n";
}
else if ($0 !~ /^[ ]*15\. Disclaimer of Warranty\.[ ]*$/)
{
- printf " printf_filtered (\"";
+ printf " gdb_printf (\"";
for (i = 1; i < NF; i++)
printf "%s\\\"", $i;
printf "%s\\n\");\n", $NF;
@@ -41,7 +41,7 @@ NR == 1,/^[ ]*15\. Disclaimer of Warranty\.[ ]*$/ {
/^[ ]*15\. Disclaimer of Warranty\.[ ]*$/, /^[ ]*END OF TERMS AND CONDITIONS[ ]*$/{
if (! ($0 ~ /^[ ]*END OF TERMS AND CONDITIONS[ ]*$/))
{
- printf " printf_filtered (\"";
+ printf " gdb_printf (\"";
for (i = 1; i < NF; i++)
printf "%s\\\"", $i;
printf "%s\\n\");\n", $NF;
diff --git a/gdb/copying.c b/gdb/copying.c
index 63183450a0e..a66a55b73ea 100644
--- a/gdb/copying.c
+++ b/gdb/copying.c
@@ -13,631 +13,631 @@ static void show_warranty_command (const char *, int);
static void
show_copying_command (const char *ignore, int from_tty)
{
- printf_filtered (" GNU GENERAL PUBLIC LICENSE\n");
- printf_filtered (" Version 3, 29 June 2007\n");
- printf_filtered ("\n");
- printf_filtered (" Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>\n");
- printf_filtered (" Everyone is permitted to copy and distribute verbatim copies\n");
- printf_filtered (" of this license document, but changing it is not allowed.\n");
- printf_filtered ("\n");
- printf_filtered (" Preamble\n");
- printf_filtered ("\n");
- printf_filtered (" The GNU General Public License is a free, copyleft license for\n");
- printf_filtered ("software and other kinds of works.\n");
- printf_filtered ("\n");
- printf_filtered (" The licenses for most software and other practical works are designed\n");
- printf_filtered ("to take away your freedom to share and change the works. By contrast,\n");
- printf_filtered ("the GNU General Public License is intended to guarantee your freedom to\n");
- printf_filtered ("share and change all versions of a program--to make sure it remains free\n");
- printf_filtered ("software for all its users. We, the Free Software Foundation, use the\n");
- printf_filtered ("GNU General Public License for most of our software; it applies also to\n");
- printf_filtered ("any other work released this way by its authors. You can apply it to\n");
- printf_filtered ("your programs, too.\n");
- printf_filtered ("\n");
- printf_filtered (" When we speak of free software, we are referring to freedom, not\n");
- printf_filtered ("price. Our General Public Licenses are designed to make sure that you\n");
- printf_filtered ("have the freedom to distribute copies of free software (and charge for\n");
- printf_filtered ("them if you wish), that you receive source code or can get it if you\n");
- printf_filtered ("want it, that you can change the software or use pieces of it in new\n");
- printf_filtered ("free programs, and that you know you can do these things.\n");
- printf_filtered ("\n");
- printf_filtered (" To protect your rights, we need to prevent others from denying you\n");
- printf_filtered ("these rights or asking you to surrender the rights. Therefore, you have\n");
- printf_filtered ("certain responsibilities if you distribute copies of the software, or if\n");
- printf_filtered ("you modify it: responsibilities to respect the freedom of others.\n");
- printf_filtered ("\n");
- printf_filtered (" For example, if you distribute copies of such a program, whether\n");
- printf_filtered ("gratis or for a fee, you must pass on to the recipients the same\n");
- printf_filtered ("freedoms that you received. You must make sure that they, too, receive\n");
- printf_filtered ("or can get the source code. And you must show them these terms so they\n");
- printf_filtered ("know their rights.\n");
- printf_filtered ("\n");
- printf_filtered (" Developers that use the GNU GPL protect your rights with two steps:\n");
- printf_filtered ("(1) assert copyright on the software, and (2) offer you this License\n");
- printf_filtered ("giving you legal permission to copy, distribute and/or modify it.\n");
- printf_filtered ("\n");
- printf_filtered (" For the developers' and authors' protection, the GPL clearly explains\n");
- printf_filtered ("that there is no warranty for this free software. For both users' and\n");
- printf_filtered ("authors' sake, the GPL requires that modified versions be marked as\n");
- printf_filtered ("changed, so that their problems will not be attributed erroneously to\n");
- printf_filtered ("authors of previous versions.\n");
- printf_filtered ("\n");
- printf_filtered (" Some devices are designed to deny users access to install or run\n");
- printf_filtered ("modified versions of the software inside them, although the manufacturer\n");
- printf_filtered ("can do so. This is fundamentally incompatible with the aim of\n");
- printf_filtered ("protecting users' freedom to change the software. The systematic\n");
- printf_filtered ("pattern of such abuse occurs in the area of products for individuals to\n");
- printf_filtered ("use, which is precisely where it is most unacceptable. Therefore, we\n");
- printf_filtered ("have designed this version of the GPL to prohibit the practice for those\n");
- printf_filtered ("products. If such problems arise substantially in other domains, we\n");
- printf_filtered ("stand ready to extend this provision to those domains in future versions\n");
- printf_filtered ("of the GPL, as needed to protect the freedom of users.\n");
- printf_filtered ("\n");
- printf_filtered (" Finally, every program is threatened constantly by software patents.\n");
- printf_filtered ("States should not allow patents to restrict development and use of\n");
- printf_filtered ("software on general-purpose computers, but in those that do, we wish to\n");
- printf_filtered ("avoid the special danger that patents applied to a free program could\n");
- printf_filtered ("make it effectively proprietary. To prevent this, the GPL assures that\n");
- printf_filtered ("patents cannot be used to render the program non-free.\n");
- printf_filtered ("\n");
- printf_filtered (" The precise terms and conditions for copying, distribution and\n");
- printf_filtered ("modification follow.\n");
- printf_filtered ("\n");
- printf_filtered (" TERMS AND CONDITIONS\n");
- printf_filtered ("\n");
- printf_filtered (" 0. Definitions.\n");
- printf_filtered ("\n");
- printf_filtered (" \"This License\" refers to version 3 of the GNU General Public License.\n");
- printf_filtered ("\n");
- printf_filtered (" \"Copyright\" also means copyright-like laws that apply to other kinds of\n");
- printf_filtered ("works, such as semiconductor masks.\n");
- printf_filtered ("\n");
- printf_filtered (" \"The Program\" refers to any copyrightable work licensed under this\n");
- printf_filtered ("License. Each licensee is addressed as \"you\". \"Licensees\" and\n");
- printf_filtered ("\"recipients\" may be individuals or organizations.\n");
- printf_filtered ("\n");
- printf_filtered (" To \"modify\" a work means to copy from or adapt all or part of the work\n");
- printf_filtered ("in a fashion requiring copyright permission, other than the making of an\n");
- printf_filtered ("exact copy. The resulting work is called a \"modified version\" of the\n");
- printf_filtered ("earlier work or a work \"based on\" the earlier work.\n");
- printf_filtered ("\n");
- printf_filtered (" A \"covered work\" means either the unmodified Program or a work based\n");
- printf_filtered ("on the Program.\n");
- printf_filtered ("\n");
- printf_filtered (" To \"propagate\" a work means to do anything with it that, without\n");
- printf_filtered ("permission, would make you directly or secondarily liable for\n");
- printf_filtered ("infringement under applicable copyright law, except executing it on a\n");
- printf_filtered ("computer or modifying a private copy. Propagation includes copying,\n");
- printf_filtered ("distribution (with or without modification), making available to the\n");
- printf_filtered ("public, and in some countries other activities as well.\n");
- printf_filtered ("\n");
- printf_filtered (" To \"convey\" a work means any kind of propagation that enables other\n");
- printf_filtered ("parties to make or receive copies. Mere interaction with a user through\n");
- printf_filtered ("a computer network, with no transfer of a copy, is not conveying.\n");
- printf_filtered ("\n");
- printf_filtered (" An interactive user interface displays \"Appropriate Legal Notices\"\n");
- printf_filtered ("to the extent that it includes a convenient and prominently visible\n");
- printf_filtered ("feature that (1) displays an appropriate copyright notice, and (2)\n");
- printf_filtered ("tells the user that there is no warranty for the work (except to the\n");
- printf_filtered ("extent that warranties are provided), that licensees may convey the\n");
- printf_filtered ("work under this License, and how to view a copy of this License. If\n");
- printf_filtered ("the interface presents a list of user commands or options, such as a\n");
- printf_filtered ("menu, a prominent item in the list meets this criterion.\n");
- printf_filtered ("\n");
- printf_filtered (" 1. Source Code.\n");
- printf_filtered ("\n");
- printf_filtered (" The \"source code\" for a work means the preferred form of the work\n");
- printf_filtered ("for making modifications to it. \"Object code\" means any non-source\n");
- printf_filtered ("form of a work.\n");
- printf_filtered ("\n");
- printf_filtered (" A \"Standard Interface\" means an interface that either is an official\n");
- printf_filtered ("standard defined by a recognized standards body, or, in the case of\n");
- printf_filtered ("interfaces specified for a particular programming language, one that\n");
- printf_filtered ("is widely used among developers working in that language.\n");
- printf_filtered ("\n");
- printf_filtered (" The \"System Libraries\" of an executable work include anything, other\n");
- printf_filtered ("than the work as a whole, that (a) is included in the normal form of\n");
- printf_filtered ("packaging a Major Component, but which is not part of that Major\n");
- printf_filtered ("Component, and (b) serves only to enable use of the work with that\n");
- printf_filtered ("Major Component, or to implement a Standard Interface for which an\n");
- printf_filtered ("implementation is available to the public in source code form. A\n");
- printf_filtered ("\"Major Component\", in this context, means a major essential component\n");
- printf_filtered ("(kernel, window system, and so on) of the specific operating system\n");
- printf_filtered ("(if any) on which the executable work runs, or a compiler used to\n");
- printf_filtered ("produce the work, or an object code interpreter used to run it.\n");
- printf_filtered ("\n");
- printf_filtered (" The \"Corresponding Source\" for a work in object code form means all\n");
- printf_filtered ("the source code needed to generate, install, and (for an executable\n");
- printf_filtered ("work) run the object code and to modify the work, including scripts to\n");
- printf_filtered ("control those activities. However, it does not include the work's\n");
- printf_filtered ("System Libraries, or general-purpose tools or generally available free\n");
- printf_filtered ("programs which are used unmodified in performing those activities but\n");
- printf_filtered ("which are not part of the work. For example, Corresponding Source\n");
- printf_filtered ("includes interface definition files associated with source files for\n");
- printf_filtered ("the work, and the source code for shared libraries and dynamically\n");
- printf_filtered ("linked subprograms that the work is specifically designed to require,\n");
- printf_filtered ("such as by intimate data communication or control flow between those\n");
- printf_filtered ("subprograms and other parts of the work.\n");
- printf_filtered ("\n");
- printf_filtered (" The Corresponding Source need not include anything that users\n");
- printf_filtered ("can regenerate automatically from other parts of the Corresponding\n");
- printf_filtered ("Source.\n");
- printf_filtered ("\n");
- printf_filtered (" The Corresponding Source for a work in source code form is that\n");
- printf_filtered ("same work.\n");
- printf_filtered ("\n");
- printf_filtered (" 2. Basic Permissions.\n");
- printf_filtered ("\n");
- printf_filtered (" All rights granted under this License are granted for the term of\n");
- printf_filtered ("copyright on the Program, and are irrevocable provided the stated\n");
- printf_filtered ("conditions are met. This License explicitly affirms your unlimited\n");
- printf_filtered ("permission to run the unmodified Program. The output from running a\n");
- printf_filtered ("covered work is covered by this License only if the output, given its\n");
- printf_filtered ("content, constitutes a covered work. This License acknowledges your\n");
- printf_filtered ("rights of fair use or other equivalent, as provided by copyright law.\n");
- printf_filtered ("\n");
- printf_filtered (" You may make, run and propagate covered works that you do not\n");
- printf_filtered ("convey, without conditions so long as your license otherwise remains\n");
- printf_filtered ("in force. You may convey covered works to others for the sole purpose\n");
- printf_filtered ("of having them make modifications exclusively for you, or provide you\n");
- printf_filtered ("with facilities for running those works, provided that you comply with\n");
- printf_filtered ("the terms of this License in conveying all material for which you do\n");
- printf_filtered ("not control copyright. Those thus making or running the covered works\n");
- printf_filtered ("for you must do so exclusively on your behalf, under your direction\n");
- printf_filtered ("and control, on terms that prohibit them from making any copies of\n");
- printf_filtered ("your copyrighted material outside their relationship with you.\n");
- printf_filtered ("\n");
- printf_filtered (" Conveying under any other circumstances is permitted solely under\n");
- printf_filtered ("the conditions stated below. Sublicensing is not allowed; section 10\n");
- printf_filtered ("makes it unnecessary.\n");
- printf_filtered ("\n");
- printf_filtered (" 3. Protecting Users' Legal Rights From Anti-Circumvention Law.\n");
- printf_filtered ("\n");
- printf_filtered (" No covered work shall be deemed part of an effective technological\n");
- printf_filtered ("measure under any applicable law fulfilling obligations under article\n");
- printf_filtered ("11 of the WIPO copyright treaty adopted on 20 December 1996, or\n");
- printf_filtered ("similar laws prohibiting or restricting circumvention of such\n");
- printf_filtered ("measures.\n");
- printf_filtered ("\n");
- printf_filtered (" When you convey a covered work, you waive any legal power to forbid\n");
- printf_filtered ("circumvention of technological measures to the extent such circumvention\n");
- printf_filtered ("is effected by exercising rights under this License with respect to\n");
- printf_filtered ("the covered work, and you disclaim any intention to limit operation or\n");
- printf_filtered ("modification of the work as a means of enforcing, against the work's\n");
- printf_filtered ("users, your or third parties' legal rights to forbid circumvention of\n");
- printf_filtered ("technological measures.\n");
- printf_filtered ("\n");
- printf_filtered (" 4. Conveying Verbatim Copies.\n");
- printf_filtered ("\n");
- printf_filtered (" You may convey verbatim copies of the Program's source code as you\n");
- printf_filtered ("receive it, in any medium, provided that you conspicuously and\n");
- printf_filtered ("appropriately publish on each copy an appropriate copyright notice;\n");
- printf_filtered ("keep intact all notices stating that this License and any\n");
- printf_filtered ("non-permissive terms added in accord with section 7 apply to the code;\n");
- printf_filtered ("keep intact all notices of the absence of any warranty; and give all\n");
- printf_filtered ("recipients a copy of this License along with the Program.\n");
- printf_filtered ("\n");
- printf_filtered (" You may charge any price or no price for each copy that you convey,\n");
- printf_filtered ("and you may offer support or warranty protection for a fee.\n");
- printf_filtered ("\n");
- printf_filtered (" 5. Conveying Modified Source Versions.\n");
- printf_filtered ("\n");
- printf_filtered (" You may convey a work based on the Program, or the modifications to\n");
- printf_filtered ("produce it from the Program, in the form of source code under the\n");
- printf_filtered ("terms of section 4, provided that you also meet all of these conditions:\n");
- printf_filtered ("\n");
- printf_filtered (" a) The work must carry prominent notices stating that you modified\n");
- printf_filtered (" it, and giving a relevant date.\n");
- printf_filtered ("\n");
- printf_filtered (" b) The work must carry prominent notices stating that it is\n");
- printf_filtered (" released under this License and any conditions added under section\n");
- printf_filtered (" 7. This requirement modifies the requirement in section 4 to\n");
- printf_filtered (" \"keep intact all notices\".\n");
- printf_filtered ("\n");
- printf_filtered (" c) You must license the entire work, as a whole, under this\n");
- printf_filtered (" License to anyone who comes into possession of a copy. This\n");
- printf_filtered (" License will therefore apply, along with any applicable section 7\n");
- printf_filtered (" additional terms, to the whole of the work, and all its parts,\n");
- printf_filtered (" regardless of how they are packaged. This License gives no\n");
- printf_filtered (" permission to license the work in any other way, but it does not\n");
- printf_filtered (" invalidate such permission if you have separately received it.\n");
- printf_filtered ("\n");
- printf_filtered (" d) If the work has interactive user interfaces, each must display\n");
- printf_filtered (" Appropriate Legal Notices; however, if the Program has interactive\n");
- printf_filtered (" interfaces that do not display Appropriate Legal Notices, your\n");
- printf_filtered (" work need not make them do so.\n");
- printf_filtered ("\n");
- printf_filtered (" A compilation of a covered work with other separate and independent\n");
- printf_filtered ("works, which are not by their nature extensions of the covered work,\n");
- printf_filtered ("and which are not combined with it such as to form a larger program,\n");
- printf_filtered ("in or on a volume of a storage or distribution medium, is called an\n");
- printf_filtered ("\"aggregate\" if the compilation and its resulting copyright are not\n");
- printf_filtered ("used to limit the access or legal rights of the compilation's users\n");
- printf_filtered ("beyond what the individual works permit. Inclusion of a covered work\n");
- printf_filtered ("in an aggregate does not cause this License to apply to the other\n");
- printf_filtered ("parts of the aggregate.\n");
- printf_filtered ("\n");
- printf_filtered (" 6. Conveying Non-Source Forms.\n");
- printf_filtered ("\n");
- printf_filtered (" You may convey a covered work in object code form under the terms\n");
- printf_filtered ("of sections 4 and 5, provided that you also convey the\n");
- printf_filtered ("machine-readable Corresponding Source under the terms of this License,\n");
- printf_filtered ("in one of these ways:\n");
- printf_filtered ("\n");
- printf_filtered (" a) Convey the object code in, or embodied in, a physical product\n");
- printf_filtered (" (including a physical distribution medium), accompanied by the\n");
- printf_filtered (" Corresponding Source fixed on a durable physical medium\n");
- printf_filtered (" customarily used for software interchange.\n");
- printf_filtered ("\n");
- printf_filtered (" b) Convey the object code in, or embodied in, a physical product\n");
- printf_filtered (" (including a physical distribution medium), accompanied by a\n");
- printf_filtered (" written offer, valid for at least three years and valid for as\n");
- printf_filtered (" long as you offer spare parts or customer support for that product\n");
- printf_filtered (" model, to give anyone who possesses the object code either (1) a\n");
- printf_filtered (" copy of the Corresponding Source for all the software in the\n");
- printf_filtered (" product that is covered by this License, on a durable physical\n");
- printf_filtered (" medium customarily used for software interchange, for a price no\n");
- printf_filtered (" more than your reasonable cost of physically performing this\n");
- printf_filtered (" conveying of source, or (2) access to copy the\n");
- printf_filtered (" Corresponding Source from a network server at no charge.\n");
- printf_filtered ("\n");
- printf_filtered (" c) Convey individual copies of the object code with a copy of the\n");
- printf_filtered (" written offer to provide the Corresponding Source. This\n");
- printf_filtered (" alternative is allowed only occasionally and noncommercially, and\n");
- printf_filtered (" only if you received the object code with such an offer, in accord\n");
- printf_filtered (" with subsection 6b.\n");
- printf_filtered ("\n");
- printf_filtered (" d) Convey the object code by offering access from a designated\n");
- printf_filtered (" place (gratis or for a charge), and offer equivalent access to the\n");
- printf_filtered (" Corresponding Source in the same way through the same place at no\n");
- printf_filtered (" further charge. You need not require recipients to copy the\n");
- printf_filtered (" Corresponding Source along with the object code. If the place to\n");
- printf_filtered (" copy the object code is a network server, the Corresponding Source\n");
- printf_filtered (" may be on a different server (operated by you or a third party)\n");
- printf_filtered (" that supports equivalent copying facilities, provided you maintain\n");
- printf_filtered (" clear directions next to the object code saying where to find the\n");
- printf_filtered (" Corresponding Source. Regardless of what server hosts the\n");
- printf_filtered (" Corresponding Source, you remain obligated to ensure that it is\n");
- printf_filtered (" available for as long as needed to satisfy these requirements.\n");
- printf_filtered ("\n");
- printf_filtered (" e) Convey the object code using peer-to-peer transmission, provided\n");
- printf_filtered (" you inform other peers where the object code and Corresponding\n");
- printf_filtered (" Source of the work are being offered to the general public at no\n");
- printf_filtered (" charge under subsection 6d.\n");
- printf_filtered ("\n");
- printf_filtered (" A separable portion of the object code, whose source code is excluded\n");
- printf_filtered ("from the Corresponding Source as a System Library, need not be\n");
- printf_filtered ("included in conveying the object code work.\n");
- printf_filtered ("\n");
- printf_filtered (" A \"User Product\" is either (1) a \"consumer product\", which means any\n");
- printf_filtered ("tangible personal property which is normally used for personal, family,\n");
- printf_filtered ("or household purposes, or (2) anything designed or sold for incorporation\n");
- printf_filtered ("into a dwelling. In determining whether a product is a consumer product,\n");
- printf_filtered ("doubtful cases shall be resolved in favor of coverage. For a particular\n");
- printf_filtered ("product received by a particular user, \"normally used\" refers to a\n");
- printf_filtered ("typical or common use of that class of product, regardless of the status\n");
- printf_filtered ("of the particular user or of the way in which the particular user\n");
- printf_filtered ("actually uses, or expects or is expected to use, the product. A product\n");
- printf_filtered ("is a consumer product regardless of whether the product has substantial\n");
- printf_filtered ("commercial, industrial or non-consumer uses, unless such uses represent\n");
- printf_filtered ("the only significant mode of use of the product.\n");
- printf_filtered ("\n");
- printf_filtered (" \"Installation Information\" for a User Product means any methods,\n");
- printf_filtered ("procedures, authorization keys, or other information required to install\n");
- printf_filtered ("and execute modified versions of a covered work in that User Product from\n");
- printf_filtered ("a modified version of its Corresponding Source. The information must\n");
- printf_filtered ("suffice to ensure that the continued functioning of the modified object\n");
- printf_filtered ("code is in no case prevented or interfered with solely because\n");
- printf_filtered ("modification has been made.\n");
- printf_filtered ("\n");
- printf_filtered (" If you convey an object code work under this section in, or with, or\n");
- printf_filtered ("specifically for use in, a User Product, and the conveying occurs as\n");
- printf_filtered ("part of a transaction in which the right of possession and use of the\n");
- printf_filtered ("User Product is transferred to the recipient in perpetuity or for a\n");
- printf_filtered ("fixed term (regardless of how the transaction is characterized), the\n");
- printf_filtered ("Corresponding Source conveyed under this section must be accompanied\n");
- printf_filtered ("by the Installation Information. But this requirement does not apply\n");
- printf_filtered ("if neither you nor any third party retains the ability to install\n");
- printf_filtered ("modified object code on the User Product (for example, the work has\n");
- printf_filtered ("been installed in ROM).\n");
- printf_filtered ("\n");
- printf_filtered (" The requirement to provide Installation Information does not include a\n");
- printf_filtered ("requirement to continue to provide support service, warranty, or updates\n");
- printf_filtered ("for a work that has been modified or installed by the recipient, or for\n");
- printf_filtered ("the User Product in which it has been modified or installed. Access to a\n");
- printf_filtered ("network may be denied when the modification itself materially and\n");
- printf_filtered ("adversely affects the operation of the network or violates the rules and\n");
- printf_filtered ("protocols for communication across the network.\n");
- printf_filtered ("\n");
- printf_filtered (" Corresponding Source conveyed, and Installation Information provided,\n");
- printf_filtered ("in accord with this section must be in a format that is publicly\n");
- printf_filtered ("documented (and with an implementation available to the public in\n");
- printf_filtered ("source code form), and must require no special password or key for\n");
- printf_filtered ("unpacking, reading or copying.\n");
- printf_filtered ("\n");
- printf_filtered (" 7. Additional Terms.\n");
- printf_filtered ("\n");
- printf_filtered (" \"Additional permissions\" are terms that supplement the terms of this\n");
- printf_filtered ("License by making exceptions from one or more of its conditions.\n");
- printf_filtered ("Additional permissions that are applicable to the entire Program shall\n");
- printf_filtered ("be treated as though they were included in this License, to the extent\n");
- printf_filtered ("that they are valid under applicable law. If additional permissions\n");
- printf_filtered ("apply only to part of the Program, that part may be used separately\n");
- printf_filtered ("under those permissions, but the entire Program remains governed by\n");
- printf_filtered ("this License without regard to the additional permissions.\n");
- printf_filtered ("\n");
- printf_filtered (" When you convey a copy of a covered work, you may at your option\n");
- printf_filtered ("remove any additional permissions from that copy, or from any part of\n");
- printf_filtered ("it. (Additional permissions may be written to require their own\n");
- printf_filtered ("removal in certain cases when you modify the work.) You may place\n");
- printf_filtered ("additional permissions on material, added by you to a covered work,\n");
- printf_filtered ("for which you have or can give appropriate copyright permission.\n");
- printf_filtered ("\n");
- printf_filtered (" Notwithstanding any other provision of this License, for material you\n");
- printf_filtered ("add to a covered work, you may (if authorized by the copyright holders of\n");
- printf_filtered ("that material) supplement the terms of this License with terms:\n");
- printf_filtered ("\n");
- printf_filtered (" a) Disclaiming warranty or limiting liability differently from the\n");
- printf_filtered (" terms of sections 15 and 16 of this License; or\n");
- printf_filtered ("\n");
- printf_filtered (" b) Requiring preservation of specified reasonable legal notices or\n");
- printf_filtered (" author attributions in that material or in the Appropriate Legal\n");
- printf_filtered (" Notices displayed by works containing it; or\n");
- printf_filtered ("\n");
- printf_filtered (" c) Prohibiting misrepresentation of the origin of that material, or\n");
- printf_filtered (" requiring that modified versions of such material be marked in\n");
- printf_filtered (" reasonable ways as different from the original version; or\n");
- printf_filtered ("\n");
- printf_filtered (" d) Limiting the use for publicity purposes of names of licensors or\n");
- printf_filtered (" authors of the material; or\n");
- printf_filtered ("\n");
- printf_filtered (" e) Declining to grant rights under trademark law for use of some\n");
- printf_filtered (" trade names, trademarks, or service marks; or\n");
- printf_filtered ("\n");
- printf_filtered (" f) Requiring indemnification of licensors and authors of that\n");
- printf_filtered (" material by anyone who conveys the material (or modified versions of\n");
- printf_filtered (" it) with contractual assumptions of liability to the recipient, for\n");
- printf_filtered (" any liability that these contractual assumptions directly impose on\n");
- printf_filtered (" those licensors and authors.\n");
- printf_filtered ("\n");
- printf_filtered (" All other non-permissive additional terms are considered \"further\n");
- printf_filtered ("restrictions\" within the meaning of section 10. If the Program as you\n");
- printf_filtered ("received it, or any part of it, contains a notice stating that it is\n");
- printf_filtered ("governed by this License along with a term that is a further\n");
- printf_filtered ("restriction, you may remove that term. If a license document contains\n");
- printf_filtered ("a further restriction but permits relicensing or conveying under this\n");
- printf_filtered ("License, you may add to a covered work material governed by the terms\n");
- printf_filtered ("of that license document, provided that the further restriction does\n");
- printf_filtered ("not survive such relicensing or conveying.\n");
- printf_filtered ("\n");
- printf_filtered (" If you add terms to a covered work in accord with this section, you\n");
- printf_filtered ("must place, in the relevant source files, a statement of the\n");
- printf_filtered ("additional terms that apply to those files, or a notice indicating\n");
- printf_filtered ("where to find the applicable terms.\n");
- printf_filtered ("\n");
- printf_filtered (" Additional terms, permissive or non-permissive, may be stated in the\n");
- printf_filtered ("form of a separately written license, or stated as exceptions;\n");
- printf_filtered ("the above requirements apply either way.\n");
- printf_filtered ("\n");
- printf_filtered (" 8. Termination.\n");
- printf_filtered ("\n");
- printf_filtered (" You may not propagate or modify a covered work except as expressly\n");
- printf_filtered ("provided under this License. Any attempt otherwise to propagate or\n");
- printf_filtered ("modify it is void, and will automatically terminate your rights under\n");
- printf_filtered ("this License (including any patent licenses granted under the third\n");
- printf_filtered ("paragraph of section 11).\n");
- printf_filtered ("\n");
- printf_filtered (" However, if you cease all violation of this License, then your\n");
- printf_filtered ("license from a particular copyright holder is reinstated (a)\n");
- printf_filtered ("provisionally, unless and until the copyright holder explicitly and\n");
- printf_filtered ("finally terminates your license, and (b) permanently, if the copyright\n");
- printf_filtered ("holder fails to notify you of the violation by some reasonable means\n");
- printf_filtered ("prior to 60 days after the cessation.\n");
- printf_filtered ("\n");
- printf_filtered (" Moreover, your license from a particular copyright holder is\n");
- printf_filtered ("reinstated permanently if the copyright holder notifies you of the\n");
- printf_filtered ("violation by some reasonable means, this is the first time you have\n");
- printf_filtered ("received notice of violation of this License (for any work) from that\n");
- printf_filtered ("copyright holder, and you cure the violation prior to 30 days after\n");
- printf_filtered ("your receipt of the notice.\n");
- printf_filtered ("\n");
- printf_filtered (" Termination of your rights under this section does not terminate the\n");
- printf_filtered ("licenses of parties who have received copies or rights from you under\n");
- printf_filtered ("this License. If your rights have been terminated and not permanently\n");
- printf_filtered ("reinstated, you do not qualify to receive new licenses for the same\n");
- printf_filtered ("material under section 10.\n");
- printf_filtered ("\n");
- printf_filtered (" 9. Acceptance Not Required for Having Copies.\n");
- printf_filtered ("\n");
- printf_filtered (" You are not required to accept this License in order to receive or\n");
- printf_filtered ("run a copy of the Program. Ancillary propagation of a covered work\n");
- printf_filtered ("occurring solely as a consequence of using peer-to-peer transmission\n");
- printf_filtered ("to receive a copy likewise does not require acceptance. However,\n");
- printf_filtered ("nothing other than this License grants you permission to propagate or\n");
- printf_filtered ("modify any covered work. These actions infringe copyright if you do\n");
- printf_filtered ("not accept this License. Therefore, by modifying or propagating a\n");
- printf_filtered ("covered work, you indicate your acceptance of this License to do so.\n");
- printf_filtered ("\n");
- printf_filtered (" 10. Automatic Licensing of Downstream Recipients.\n");
- printf_filtered ("\n");
- printf_filtered (" Each time you convey a covered work, the recipient automatically\n");
- printf_filtered ("receives a license from the original licensors, to run, modify and\n");
- printf_filtered ("propagate that work, subject to this License. You are not responsible\n");
- printf_filtered ("for enforcing compliance by third parties with this License.\n");
- printf_filtered ("\n");
- printf_filtered (" An \"entity transaction\" is a transaction transferring control of an\n");
- printf_filtered ("organization, or substantially all assets of one, or subdividing an\n");
- printf_filtered ("organization, or merging organizations. If propagation of a covered\n");
- printf_filtered ("work results from an entity transaction, each party to that\n");
- printf_filtered ("transaction who receives a copy of the work also receives whatever\n");
- printf_filtered ("licenses to the work the party's predecessor in interest had or could\n");
- printf_filtered ("give under the previous paragraph, plus a right to possession of the\n");
- printf_filtered ("Corresponding Source of the work from the predecessor in interest, if\n");
- printf_filtered ("the predecessor has it or can get it with reasonable efforts.\n");
- printf_filtered ("\n");
- printf_filtered (" You may not impose any further restrictions on the exercise of the\n");
- printf_filtered ("rights granted or affirmed under this License. For example, you may\n");
- printf_filtered ("not impose a license fee, royalty, or other charge for exercise of\n");
- printf_filtered ("rights granted under this License, and you may not initiate litigation\n");
- printf_filtered ("(including a cross-claim or counterclaim in a lawsuit) alleging that\n");
- printf_filtered ("any patent claim is infringed by making, using, selling, offering for\n");
- printf_filtered ("sale, or importing the Program or any portion of it.\n");
- printf_filtered ("\n");
- printf_filtered (" 11. Patents.\n");
- printf_filtered ("\n");
- printf_filtered (" A \"contributor\" is a copyright holder who authorizes use under this\n");
- printf_filtered ("License of the Program or a work on which the Program is based. The\n");
- printf_filtered ("work thus licensed is called the contributor's \"contributor version\".\n");
- printf_filtered ("\n");
- printf_filtered (" A contributor's \"essential patent claims\" are all patent claims\n");
- printf_filtered ("owned or controlled by the contributor, whether already acquired or\n");
- printf_filtered ("hereafter acquired, that would be infringed by some manner, permitted\n");
- printf_filtered ("by this License, of making, using, or selling its contributor version,\n");
- printf_filtered ("but do not include claims that would be infringed only as a\n");
- printf_filtered ("consequence of further modification of the contributor version. For\n");
- printf_filtered ("purposes of this definition, \"control\" includes the right to grant\n");
- printf_filtered ("patent sublicenses in a manner consistent with the requirements of\n");
- printf_filtered ("this License.\n");
- printf_filtered ("\n");
- printf_filtered (" Each contributor grants you a non-exclusive, worldwide, royalty-free\n");
- printf_filtered ("patent license under the contributor's essential patent claims, to\n");
- printf_filtered ("make, use, sell, offer for sale, import and otherwise run, modify and\n");
- printf_filtered ("propagate the contents of its contributor version.\n");
- printf_filtered ("\n");
- printf_filtered (" In the following three paragraphs, a \"patent license\" is any express\n");
- printf_filtered ("agreement or commitment, however denominated, not to enforce a patent\n");
- printf_filtered ("(such as an express permission to practice a patent or covenant not to\n");
- printf_filtered ("sue for patent infringement). To \"grant\" such a patent license to a\n");
- printf_filtered ("party means to make such an agreement or commitment not to enforce a\n");
- printf_filtered ("patent against the party.\n");
- printf_filtered ("\n");
- printf_filtered (" If you convey a covered work, knowingly relying on a patent license,\n");
- printf_filtered ("and the Corresponding Source of the work is not available for anyone\n");
- printf_filtered ("to copy, free of charge and under the terms of this License, through a\n");
- printf_filtered ("publicly available network server or other readily accessible means,\n");
- printf_filtered ("then you must either (1) cause the Corresponding Source to be so\n");
- printf_filtered ("available, or (2) arrange to deprive yourself of the benefit of the\n");
- printf_filtered ("patent license for this particular work, or (3) arrange, in a manner\n");
- printf_filtered ("consistent with the requirements of this License, to extend the patent\n");
- printf_filtered ("license to downstream recipients. \"Knowingly relying\" means you have\n");
- printf_filtered ("actual knowledge that, but for the patent license, your conveying the\n");
- printf_filtered ("covered work in a country, or your recipient's use of the covered work\n");
- printf_filtered ("in a country, would infringe one or more identifiable patents in that\n");
- printf_filtered ("country that you have reason to believe are valid.\n");
- printf_filtered ("\n");
- printf_filtered (" If, pursuant to or in connection with a single transaction or\n");
- printf_filtered ("arrangement, you convey, or propagate by procuring conveyance of, a\n");
- printf_filtered ("covered work, and grant a patent license to some of the parties\n");
- printf_filtered ("receiving the covered work authorizing them to use, propagate, modify\n");
- printf_filtered ("or convey a specific copy of the covered work, then the patent license\n");
- printf_filtered ("you grant is automatically extended to all recipients of the covered\n");
- printf_filtered ("work and works based on it.\n");
- printf_filtered ("\n");
- printf_filtered (" A patent license is \"discriminatory\" if it does not include within\n");
- printf_filtered ("the scope of its coverage, prohibits the exercise of, or is\n");
- printf_filtered ("conditioned on the non-exercise of one or more of the rights that are\n");
- printf_filtered ("specifically granted under this License. You may not convey a covered\n");
- printf_filtered ("work if you are a party to an arrangement with a third party that is\n");
- printf_filtered ("in the business of distributing software, under which you make payment\n");
- printf_filtered ("to the third party based on the extent of your activity of conveying\n");
- printf_filtered ("the work, and under which the third party grants, to any of the\n");
- printf_filtered ("parties who would receive the covered work from you, a discriminatory\n");
- printf_filtered ("patent license (a) in connection with copies of the covered work\n");
- printf_filtered ("conveyed by you (or copies made from those copies), or (b) primarily\n");
- printf_filtered ("for and in connection with specific products or compilations that\n");
- printf_filtered ("contain the covered work, unless you entered into that arrangement,\n");
- printf_filtered ("or that patent license was granted, prior to 28 March 2007.\n");
- printf_filtered ("\n");
- printf_filtered (" Nothing in this License shall be construed as excluding or limiting\n");
- printf_filtered ("any implied license or other defenses to infringement that may\n");
- printf_filtered ("otherwise be available to you under applicable patent law.\n");
- printf_filtered ("\n");
- printf_filtered (" 12. No Surrender of Others' Freedom.\n");
- printf_filtered ("\n");
- printf_filtered (" If conditions are imposed on you (whether by court order, agreement or\n");
- printf_filtered ("otherwise) that contradict the conditions of this License, they do not\n");
- printf_filtered ("excuse you from the conditions of this License. If you cannot convey a\n");
- printf_filtered ("covered work so as to satisfy simultaneously your obligations under this\n");
- printf_filtered ("License and any other pertinent obligations, then as a consequence you may\n");
- printf_filtered ("not convey it at all. For example, if you agree to terms that obligate you\n");
- printf_filtered ("to collect a royalty for further conveying from those to whom you convey\n");
- printf_filtered ("the Program, the only way you could satisfy both those terms and this\n");
- printf_filtered ("License would be to refrain entirely from conveying the Program.\n");
- printf_filtered ("\n");
- printf_filtered (" 13. Use with the GNU Affero General Public License.\n");
- printf_filtered ("\n");
- printf_filtered (" Notwithstanding any other provision of this License, you have\n");
- printf_filtered ("permission to link or combine any covered work with a work licensed\n");
- printf_filtered ("under version 3 of the GNU Affero General Public License into a single\n");
- printf_filtered ("combined work, and to convey the resulting work. The terms of this\n");
- printf_filtered ("License will continue to apply to the part which is the covered work,\n");
- printf_filtered ("but the special requirements of the GNU Affero General Public License,\n");
- printf_filtered ("section 13, concerning interaction through a network will apply to the\n");
- printf_filtered ("combination as such.\n");
- printf_filtered ("\n");
- printf_filtered (" 14. Revised Versions of this License.\n");
- printf_filtered ("\n");
- printf_filtered (" The Free Software Foundation may publish revised and/or new versions of\n");
- printf_filtered ("the GNU General Public License from time to time. Such new versions will\n");
- printf_filtered ("be similar in spirit to the present version, but may differ in detail to\n");
- printf_filtered ("address new problems or concerns.\n");
- printf_filtered ("\n");
- printf_filtered (" Each version is given a distinguishing version number. If the\n");
- printf_filtered ("Program specifies that a certain numbered version of the GNU General\n");
- printf_filtered ("Public License \"or any later version\" applies to it, you have the\n");
- printf_filtered ("option of following the terms and conditions either of that numbered\n");
- printf_filtered ("version or of any later version published by the Free Software\n");
- printf_filtered ("Foundation. If the Program does not specify a version number of the\n");
- printf_filtered ("GNU General Public License, you may choose any version ever published\n");
- printf_filtered ("by the Free Software Foundation.\n");
- printf_filtered ("\n");
- printf_filtered (" If the Program specifies that a proxy can decide which future\n");
- printf_filtered ("versions of the GNU General Public License can be used, that proxy's\n");
- printf_filtered ("public statement of acceptance of a version permanently authorizes you\n");
- printf_filtered ("to choose that version for the Program.\n");
- printf_filtered ("\n");
- printf_filtered (" Later license versions may give you additional or different\n");
- printf_filtered ("permissions. However, no additional obligations are imposed on any\n");
- printf_filtered ("author or copyright holder as a result of your choosing to follow a\n");
- printf_filtered ("later version.\n");
- printf_filtered ("\n");
+ gdb_printf (" GNU GENERAL PUBLIC LICENSE\n");
+ gdb_printf (" Version 3, 29 June 2007\n");
+ gdb_printf ("\n");
+ gdb_printf (" Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>\n");
+ gdb_printf (" Everyone is permitted to copy and distribute verbatim copies\n");
+ gdb_printf (" of this license document, but changing it is not allowed.\n");
+ gdb_printf ("\n");
+ gdb_printf (" Preamble\n");
+ gdb_printf ("\n");
+ gdb_printf (" The GNU General Public License is a free, copyleft license for\n");
+ gdb_printf ("software and other kinds of works.\n");
+ gdb_printf ("\n");
+ gdb_printf (" The licenses for most software and other practical works are designed\n");
+ gdb_printf ("to take away your freedom to share and change the works. By contrast,\n");
+ gdb_printf ("the GNU General Public License is intended to guarantee your freedom to\n");
+ gdb_printf ("share and change all versions of a program--to make sure it remains free\n");
+ gdb_printf ("software for all its users. We, the Free Software Foundation, use the\n");
+ gdb_printf ("GNU General Public License for most of our software; it applies also to\n");
+ gdb_printf ("any other work released this way by its authors. You can apply it to\n");
+ gdb_printf ("your programs, too.\n");
+ gdb_printf ("\n");
+ gdb_printf (" When we speak of free software, we are referring to freedom, not\n");
+ gdb_printf ("price. Our General Public Licenses are designed to make sure that you\n");
+ gdb_printf ("have the freedom to distribute copies of free software (and charge for\n");
+ gdb_printf ("them if you wish), that you receive source code or can get it if you\n");
+ gdb_printf ("want it, that you can change the software or use pieces of it in new\n");
+ gdb_printf ("free programs, and that you know you can do these things.\n");
+ gdb_printf ("\n");
+ gdb_printf (" To protect your rights, we need to prevent others from denying you\n");
+ gdb_printf ("these rights or asking you to surrender the rights. Therefore, you have\n");
+ gdb_printf ("certain responsibilities if you distribute copies of the software, or if\n");
+ gdb_printf ("you modify it: responsibilities to respect the freedom of others.\n");
+ gdb_printf ("\n");
+ gdb_printf (" For example, if you distribute copies of such a program, whether\n");
+ gdb_printf ("gratis or for a fee, you must pass on to the recipients the same\n");
+ gdb_printf ("freedoms that you received. You must make sure that they, too, receive\n");
+ gdb_printf ("or can get the source code. And you must show them these terms so they\n");
+ gdb_printf ("know their rights.\n");
+ gdb_printf ("\n");
+ gdb_printf (" Developers that use the GNU GPL protect your rights with two steps:\n");
+ gdb_printf ("(1) assert copyright on the software, and (2) offer you this License\n");
+ gdb_printf ("giving you legal permission to copy, distribute and/or modify it.\n");
+ gdb_printf ("\n");
+ gdb_printf (" For the developers' and authors' protection, the GPL clearly explains\n");
+ gdb_printf ("that there is no warranty for this free software. For both users' and\n");
+ gdb_printf ("authors' sake, the GPL requires that modified versions be marked as\n");
+ gdb_printf ("changed, so that their problems will not be attributed erroneously to\n");
+ gdb_printf ("authors of previous versions.\n");
+ gdb_printf ("\n");
+ gdb_printf (" Some devices are designed to deny users access to install or run\n");
+ gdb_printf ("modified versions of the software inside them, although the manufacturer\n");
+ gdb_printf ("can do so. This is fundamentally incompatible with the aim of\n");
+ gdb_printf ("protecting users' freedom to change the software. The systematic\n");
+ gdb_printf ("pattern of such abuse occurs in the area of products for individuals to\n");
+ gdb_printf ("use, which is precisely where it is most unacceptable. Therefore, we\n");
+ gdb_printf ("have designed this version of the GPL to prohibit the practice for those\n");
+ gdb_printf ("products. If such problems arise substantially in other domains, we\n");
+ gdb_printf ("stand ready to extend this provision to those domains in future versions\n");
+ gdb_printf ("of the GPL, as needed to protect the freedom of users.\n");
+ gdb_printf ("\n");
+ gdb_printf (" Finally, every program is threatened constantly by software patents.\n");
+ gdb_printf ("States should not allow patents to restrict development and use of\n");
+ gdb_printf ("software on general-purpose computers, but in those that do, we wish to\n");
+ gdb_printf ("avoid the special danger that patents applied to a free program could\n");
+ gdb_printf ("make it effectively proprietary. To prevent this, the GPL assures that\n");
+ gdb_printf ("patents cannot be used to render the program non-free.\n");
+ gdb_printf ("\n");
+ gdb_printf (" The precise terms and conditions for copying, distribution and\n");
+ gdb_printf ("modification follow.\n");
+ gdb_printf ("\n");
+ gdb_printf (" TERMS AND CONDITIONS\n");
+ gdb_printf ("\n");
+ gdb_printf (" 0. Definitions.\n");
+ gdb_printf ("\n");
+ gdb_printf (" \"This License\" refers to version 3 of the GNU General Public License.\n");
+ gdb_printf ("\n");
+ gdb_printf (" \"Copyright\" also means copyright-like laws that apply to other kinds of\n");
+ gdb_printf ("works, such as semiconductor masks.\n");
+ gdb_printf ("\n");
+ gdb_printf (" \"The Program\" refers to any copyrightable work licensed under this\n");
+ gdb_printf ("License. Each licensee is addressed as \"you\". \"Licensees\" and\n");
+ gdb_printf ("\"recipients\" may be individuals or organizations.\n");
+ gdb_printf ("\n");
+ gdb_printf (" To \"modify\" a work means to copy from or adapt all or part of the work\n");
+ gdb_printf ("in a fashion requiring copyright permission, other than the making of an\n");
+ gdb_printf ("exact copy. The resulting work is called a \"modified version\" of the\n");
+ gdb_printf ("earlier work or a work \"based on\" the earlier work.\n");
+ gdb_printf ("\n");
+ gdb_printf (" A \"covered work\" means either the unmodified Program or a work based\n");
+ gdb_printf ("on the Program.\n");
+ gdb_printf ("\n");
+ gdb_printf (" To \"propagate\" a work means to do anything with it that, without\n");
+ gdb_printf ("permission, would make you directly or secondarily liable for\n");
+ gdb_printf ("infringement under applicable copyright law, except executing it on a\n");
+ gdb_printf ("computer or modifying a private copy. Propagation includes copying,\n");
+ gdb_printf ("distribution (with or without modification), making available to the\n");
+ gdb_printf ("public, and in some countries other activities as well.\n");
+ gdb_printf ("\n");
+ gdb_printf (" To \"convey\" a work means any kind of propagation that enables other\n");
+ gdb_printf ("parties to make or receive copies. Mere interaction with a user through\n");
+ gdb_printf ("a computer network, with no transfer of a copy, is not conveying.\n");
+ gdb_printf ("\n");
+ gdb_printf (" An interactive user interface displays \"Appropriate Legal Notices\"\n");
+ gdb_printf ("to the extent that it includes a convenient and prominently visible\n");
+ gdb_printf ("feature that (1) displays an appropriate copyright notice, and (2)\n");
+ gdb_printf ("tells the user that there is no warranty for the work (except to the\n");
+ gdb_printf ("extent that warranties are provided), that licensees may convey the\n");
+ gdb_printf ("work under this License, and how to view a copy of this License. If\n");
+ gdb_printf ("the interface presents a list of user commands or options, such as a\n");
+ gdb_printf ("menu, a prominent item in the list meets this criterion.\n");
+ gdb_printf ("\n");
+ gdb_printf (" 1. Source Code.\n");
+ gdb_printf ("\n");
+ gdb_printf (" The \"source code\" for a work means the preferred form of the work\n");
+ gdb_printf ("for making modifications to it. \"Object code\" means any non-source\n");
+ gdb_printf ("form of a work.\n");
+ gdb_printf ("\n");
+ gdb_printf (" A \"Standard Interface\" means an interface that either is an official\n");
+ gdb_printf ("standard defined by a recognized standards body, or, in the case of\n");
+ gdb_printf ("interfaces specified for a particular programming language, one that\n");
+ gdb_printf ("is widely used among developers working in that language.\n");
+ gdb_printf ("\n");
+ gdb_printf (" The \"System Libraries\" of an executable work include anything, other\n");
+ gdb_printf ("than the work as a whole, that (a) is included in the normal form of\n");
+ gdb_printf ("packaging a Major Component, but which is not part of that Major\n");
+ gdb_printf ("Component, and (b) serves only to enable use of the work with that\n");
+ gdb_printf ("Major Component, or to implement a Standard Interface for which an\n");
+ gdb_printf ("implementation is available to the public in source code form. A\n");
+ gdb_printf ("\"Major Component\", in this context, means a major essential component\n");
+ gdb_printf ("(kernel, window system, and so on) of the specific operating system\n");
+ gdb_printf ("(if any) on which the executable work runs, or a compiler used to\n");
+ gdb_printf ("produce the work, or an object code interpreter used to run it.\n");
+ gdb_printf ("\n");
+ gdb_printf (" The \"Corresponding Source\" for a work in object code form means all\n");
+ gdb_printf ("the source code needed to generate, install, and (for an executable\n");
+ gdb_printf ("work) run the object code and to modify the work, including scripts to\n");
+ gdb_printf ("control those activities. However, it does not include the work's\n");
+ gdb_printf ("System Libraries, or general-purpose tools or generally available free\n");
+ gdb_printf ("programs which are used unmodified in performing those activities but\n");
+ gdb_printf ("which are not part of the work. For example, Corresponding Source\n");
+ gdb_printf ("includes interface definition files associated with source files for\n");
+ gdb_printf ("the work, and the source code for shared libraries and dynamically\n");
+ gdb_printf ("linked subprograms that the work is specifically designed to require,\n");
+ gdb_printf ("such as by intimate data communication or control flow between those\n");
+ gdb_printf ("subprograms and other parts of the work.\n");
+ gdb_printf ("\n");
+ gdb_printf (" The Corresponding Source need not include anything that users\n");
+ gdb_printf ("can regenerate automatically from other parts of the Corresponding\n");
+ gdb_printf ("Source.\n");
+ gdb_printf ("\n");
+ gdb_printf (" The Corresponding Source for a work in source code form is that\n");
+ gdb_printf ("same work.\n");
+ gdb_printf ("\n");
+ gdb_printf (" 2. Basic Permissions.\n");
+ gdb_printf ("\n");
+ gdb_printf (" All rights granted under this License are granted for the term of\n");
+ gdb_printf ("copyright on the Program, and are irrevocable provided the stated\n");
+ gdb_printf ("conditions are met. This License explicitly affirms your unlimited\n");
+ gdb_printf ("permission to run the unmodified Program. The output from running a\n");
+ gdb_printf ("covered work is covered by this License only if the output, given its\n");
+ gdb_printf ("content, constitutes a covered work. This License acknowledges your\n");
+ gdb_printf ("rights of fair use or other equivalent, as provided by copyright law.\n");
+ gdb_printf ("\n");
+ gdb_printf (" You may make, run and propagate covered works that you do not\n");
+ gdb_printf ("convey, without conditions so long as your license otherwise remains\n");
+ gdb_printf ("in force. You may convey covered works to others for the sole purpose\n");
+ gdb_printf ("of having them make modifications exclusively for you, or provide you\n");
+ gdb_printf ("with facilities for running those works, provided that you comply with\n");
+ gdb_printf ("the terms of this License in conveying all material for which you do\n");
+ gdb_printf ("not control copyright. Those thus making or running the covered works\n");
+ gdb_printf ("for you must do so exclusively on your behalf, under your direction\n");
+ gdb_printf ("and control, on terms that prohibit them from making any copies of\n");
+ gdb_printf ("your copyrighted material outside their relationship with you.\n");
+ gdb_printf ("\n");
+ gdb_printf (" Conveying under any other circumstances is permitted solely under\n");
+ gdb_printf ("the conditions stated below. Sublicensing is not allowed; section 10\n");
+ gdb_printf ("makes it unnecessary.\n");
+ gdb_printf ("\n");
+ gdb_printf (" 3. Protecting Users' Legal Rights From Anti-Circumvention Law.\n");
+ gdb_printf ("\n");
+ gdb_printf (" No covered work shall be deemed part of an effective technological\n");
+ gdb_printf ("measure under any applicable law fulfilling obligations under article\n");
+ gdb_printf ("11 of the WIPO copyright treaty adopted on 20 December 1996, or\n");
+ gdb_printf ("similar laws prohibiting or restricting circumvention of such\n");
+ gdb_printf ("measures.\n");
+ gdb_printf ("\n");
+ gdb_printf (" When you convey a covered work, you waive any legal power to forbid\n");
+ gdb_printf ("circumvention of technological measures to the extent such circumvention\n");
+ gdb_printf ("is effected by exercising rights under this License with respect to\n");
+ gdb_printf ("the covered work, and you disclaim any intention to limit operation or\n");
+ gdb_printf ("modification of the work as a means of enforcing, against the work's\n");
+ gdb_printf ("users, your or third parties' legal rights to forbid circumvention of\n");
+ gdb_printf ("technological measures.\n");
+ gdb_printf ("\n");
+ gdb_printf (" 4. Conveying Verbatim Copies.\n");
+ gdb_printf ("\n");
+ gdb_printf (" You may convey verbatim copies of the Program's source code as you\n");
+ gdb_printf ("receive it, in any medium, provided that you conspicuously and\n");
+ gdb_printf ("appropriately publish on each copy an appropriate copyright notice;\n");
+ gdb_printf ("keep intact all notices stating that this License and any\n");
+ gdb_printf ("non-permissive terms added in accord with section 7 apply to the code;\n");
+ gdb_printf ("keep intact all notices of the absence of any warranty; and give all\n");
+ gdb_printf ("recipients a copy of this License along with the Program.\n");
+ gdb_printf ("\n");
+ gdb_printf (" You may charge any price or no price for each copy that you convey,\n");
+ gdb_printf ("and you may offer support or warranty protection for a fee.\n");
+ gdb_printf ("\n");
+ gdb_printf (" 5. Conveying Modified Source Versions.\n");
+ gdb_printf ("\n");
+ gdb_printf (" You may convey a work based on the Program, or the modifications to\n");
+ gdb_printf ("produce it from the Program, in the form of source code under the\n");
+ gdb_printf ("terms of section 4, provided that you also meet all of these conditions:\n");
+ gdb_printf ("\n");
+ gdb_printf (" a) The work must carry prominent notices stating that you modified\n");
+ gdb_printf (" it, and giving a relevant date.\n");
+ gdb_printf ("\n");
+ gdb_printf (" b) The work must carry prominent notices stating that it is\n");
+ gdb_printf (" released under this License and any conditions added under section\n");
+ gdb_printf (" 7. This requirement modifies the requirement in section 4 to\n");
+ gdb_printf (" \"keep intact all notices\".\n");
+ gdb_printf ("\n");
+ gdb_printf (" c) You must license the entire work, as a whole, under this\n");
+ gdb_printf (" License to anyone who comes into possession of a copy. This\n");
+ gdb_printf (" License will therefore apply, along with any applicable section 7\n");
+ gdb_printf (" additional terms, to the whole of the work, and all its parts,\n");
+ gdb_printf (" regardless of how they are packaged. This License gives no\n");
+ gdb_printf (" permission to license the work in any other way, but it does not\n");
+ gdb_printf (" invalidate such permission if you have separately received it.\n");
+ gdb_printf ("\n");
+ gdb_printf (" d) If the work has interactive user interfaces, each must display\n");
+ gdb_printf (" Appropriate Legal Notices; however, if the Program has interactive\n");
+ gdb_printf (" interfaces that do not display Appropriate Legal Notices, your\n");
+ gdb_printf (" work need not make them do so.\n");
+ gdb_printf ("\n");
+ gdb_printf (" A compilation of a covered work with other separate and independent\n");
+ gdb_printf ("works, which are not by their nature extensions of the covered work,\n");
+ gdb_printf ("and which are not combined with it such as to form a larger program,\n");
+ gdb_printf ("in or on a volume of a storage or distribution medium, is called an\n");
+ gdb_printf ("\"aggregate\" if the compilation and its resulting copyright are not\n");
+ gdb_printf ("used to limit the access or legal rights of the compilation's users\n");
+ gdb_printf ("beyond what the individual works permit. Inclusion of a covered work\n");
+ gdb_printf ("in an aggregate does not cause this License to apply to the other\n");
+ gdb_printf ("parts of the aggregate.\n");
+ gdb_printf ("\n");
+ gdb_printf (" 6. Conveying Non-Source Forms.\n");
+ gdb_printf ("\n");
+ gdb_printf (" You may convey a covered work in object code form under the terms\n");
+ gdb_printf ("of sections 4 and 5, provided that you also convey the\n");
+ gdb_printf ("machine-readable Corresponding Source under the terms of this License,\n");
+ gdb_printf ("in one of these ways:\n");
+ gdb_printf ("\n");
+ gdb_printf (" a) Convey the object code in, or embodied in, a physical product\n");
+ gdb_printf (" (including a physical distribution medium), accompanied by the\n");
+ gdb_printf (" Corresponding Source fixed on a durable physical medium\n");
+ gdb_printf (" customarily used for software interchange.\n");
+ gdb_printf ("\n");
+ gdb_printf (" b) Convey the object code in, or embodied in, a physical product\n");
+ gdb_printf (" (including a physical distribution medium), accompanied by a\n");
+ gdb_printf (" written offer, valid for at least three years and valid for as\n");
+ gdb_printf (" long as you offer spare parts or customer support for that product\n");
+ gdb_printf (" model, to give anyone who possesses the object code either (1) a\n");
+ gdb_printf (" copy of the Corresponding Source for all the software in the\n");
+ gdb_printf (" product that is covered by this License, on a durable physical\n");
+ gdb_printf (" medium customarily used for software interchange, for a price no\n");
+ gdb_printf (" more than your reasonable cost of physically performing this\n");
+ gdb_printf (" conveying of source, or (2) access to copy the\n");
+ gdb_printf (" Corresponding Source from a network server at no charge.\n");
+ gdb_printf ("\n");
+ gdb_printf (" c) Convey individual copies of the object code with a copy of the\n");
+ gdb_printf (" written offer to provide the Corresponding Source. This\n");
+ gdb_printf (" alternative is allowed only occasionally and noncommercially, and\n");
+ gdb_printf (" only if you received the object code with such an offer, in accord\n");
+ gdb_printf (" with subsection 6b.\n");
+ gdb_printf ("\n");
+ gdb_printf (" d) Convey the object code by offering access from a designated\n");
+ gdb_printf (" place (gratis or for a charge), and offer equivalent access to the\n");
+ gdb_printf (" Corresponding Source in the same way through the same place at no\n");
+ gdb_printf (" further charge. You need not require recipients to copy the\n");
+ gdb_printf (" Corresponding Source along with the object code. If the place to\n");
+ gdb_printf (" copy the object code is a network server, the Corresponding Source\n");
+ gdb_printf (" may be on a different server (operated by you or a third party)\n");
+ gdb_printf (" that supports equivalent copying facilities, provided you maintain\n");
+ gdb_printf (" clear directions next to the object code saying where to find the\n");
+ gdb_printf (" Corresponding Source. Regardless of what server hosts the\n");
+ gdb_printf (" Corresponding Source, you remain obligated to ensure that it is\n");
+ gdb_printf (" available for as long as needed to satisfy these requirements.\n");
+ gdb_printf ("\n");
+ gdb_printf (" e) Convey the object code using peer-to-peer transmission, provided\n");
+ gdb_printf (" you inform other peers where the object code and Corresponding\n");
+ gdb_printf (" Source of the work are being offered to the general public at no\n");
+ gdb_printf (" charge under subsection 6d.\n");
+ gdb_printf ("\n");
+ gdb_printf (" A separable portion of the object code, whose source code is excluded\n");
+ gdb_printf ("from the Corresponding Source as a System Library, need not be\n");
+ gdb_printf ("included in conveying the object code work.\n");
+ gdb_printf ("\n");
+ gdb_printf (" A \"User Product\" is either (1) a \"consumer product\", which means any\n");
+ gdb_printf ("tangible personal property which is normally used for personal, family,\n");
+ gdb_printf ("or household purposes, or (2) anything designed or sold for incorporation\n");
+ gdb_printf ("into a dwelling. In determining whether a product is a consumer product,\n");
+ gdb_printf ("doubtful cases shall be resolved in favor of coverage. For a particular\n");
+ gdb_printf ("product received by a particular user, \"normally used\" refers to a\n");
+ gdb_printf ("typical or common use of that class of product, regardless of the status\n");
+ gdb_printf ("of the particular user or of the way in which the particular user\n");
+ gdb_printf ("actually uses, or expects or is expected to use, the product. A product\n");
+ gdb_printf ("is a consumer product regardless of whether the product has substantial\n");
+ gdb_printf ("commercial, industrial or non-consumer uses, unless such uses represent\n");
+ gdb_printf ("the only significant mode of use of the product.\n");
+ gdb_printf ("\n");
+ gdb_printf (" \"Installation Information\" for a User Product means any methods,\n");
+ gdb_printf ("procedures, authorization keys, or other information required to install\n");
+ gdb_printf ("and execute modified versions of a covered work in that User Product from\n");
+ gdb_printf ("a modified version of its Corresponding Source. The information must\n");
+ gdb_printf ("suffice to ensure that the continued functioning of the modified object\n");
+ gdb_printf ("code is in no case prevented or interfered with solely because\n");
+ gdb_printf ("modification has been made.\n");
+ gdb_printf ("\n");
+ gdb_printf (" If you convey an object code work under this section in, or with, or\n");
+ gdb_printf ("specifically for use in, a User Product, and the conveying occurs as\n");
+ gdb_printf ("part of a transaction in which the right of possession and use of the\n");
+ gdb_printf ("User Product is transferred to the recipient in perpetuity or for a\n");
+ gdb_printf ("fixed term (regardless of how the transaction is characterized), the\n");
+ gdb_printf ("Corresponding Source conveyed under this section must be accompanied\n");
+ gdb_printf ("by the Installation Information. But this requirement does not apply\n");
+ gdb_printf ("if neither you nor any third party retains the ability to install\n");
+ gdb_printf ("modified object code on the User Product (for example, the work has\n");
+ gdb_printf ("been installed in ROM).\n");
+ gdb_printf ("\n");
+ gdb_printf (" The requirement to provide Installation Information does not include a\n");
+ gdb_printf ("requirement to continue to provide support service, warranty, or updates\n");
+ gdb_printf ("for a work that has been modified or installed by the recipient, or for\n");
+ gdb_printf ("the User Product in which it has been modified or installed. Access to a\n");
+ gdb_printf ("network may be denied when the modification itself materially and\n");
+ gdb_printf ("adversely affects the operation of the network or violates the rules and\n");
+ gdb_printf ("protocols for communication across the network.\n");
+ gdb_printf ("\n");
+ gdb_printf (" Corresponding Source conveyed, and Installation Information provided,\n");
+ gdb_printf ("in accord with this section must be in a format that is publicly\n");
+ gdb_printf ("documented (and with an implementation available to the public in\n");
+ gdb_printf ("source code form), and must require no special password or key for\n");
+ gdb_printf ("unpacking, reading or copying.\n");
+ gdb_printf ("\n");
+ gdb_printf (" 7. Additional Terms.\n");
+ gdb_printf ("\n");
+ gdb_printf (" \"Additional permissions\" are terms that supplement the terms of this\n");
+ gdb_printf ("License by making exceptions from one or more of its conditions.\n");
+ gdb_printf ("Additional permissions that are applicable to the entire Program shall\n");
+ gdb_printf ("be treated as though they were included in this License, to the extent\n");
+ gdb_printf ("that they are valid under applicable law. If additional permissions\n");
+ gdb_printf ("apply only to part of the Program, that part may be used separately\n");
+ gdb_printf ("under those permissions, but the entire Program remains governed by\n");
+ gdb_printf ("this License without regard to the additional permissions.\n");
+ gdb_printf ("\n");
+ gdb_printf (" When you convey a copy of a covered work, you may at your option\n");
+ gdb_printf ("remove any additional permissions from that copy, or from any part of\n");
+ gdb_printf ("it. (Additional permissions may be written to require their own\n");
+ gdb_printf ("removal in certain cases when you modify the work.) You may place\n");
+ gdb_printf ("additional permissions on material, added by you to a covered work,\n");
+ gdb_printf ("for which you have or can give appropriate copyright permission.\n");
+ gdb_printf ("\n");
+ gdb_printf (" Notwithstanding any other provision of this License, for material you\n");
+ gdb_printf ("add to a covered work, you may (if authorized by the copyright holders of\n");
+ gdb_printf ("that material) supplement the terms of this License with terms:\n");
+ gdb_printf ("\n");
+ gdb_printf (" a) Disclaiming warranty or limiting liability differently from the\n");
+ gdb_printf (" terms of sections 15 and 16 of this License; or\n");
+ gdb_printf ("\n");
+ gdb_printf (" b) Requiring preservation of specified reasonable legal notices or\n");
+ gdb_printf (" author attributions in that material or in the Appropriate Legal\n");
+ gdb_printf (" Notices displayed by works containing it; or\n");
+ gdb_printf ("\n");
+ gdb_printf (" c) Prohibiting misrepresentation of the origin of that material, or\n");
+ gdb_printf (" requiring that modified versions of such material be marked in\n");
+ gdb_printf (" reasonable ways as different from the original version; or\n");
+ gdb_printf ("\n");
+ gdb_printf (" d) Limiting the use for publicity purposes of names of licensors or\n");
+ gdb_printf (" authors of the material; or\n");
+ gdb_printf ("\n");
+ gdb_printf (" e) Declining to grant rights under trademark law for use of some\n");
+ gdb_printf (" trade names, trademarks, or service marks; or\n");
+ gdb_printf ("\n");
+ gdb_printf (" f) Requiring indemnification of licensors and authors of that\n");
+ gdb_printf (" material by anyone who conveys the material (or modified versions of\n");
+ gdb_printf (" it) with contractual assumptions of liability to the recipient, for\n");
+ gdb_printf (" any liability that these contractual assumptions directly impose on\n");
+ gdb_printf (" those licensors and authors.\n");
+ gdb_printf ("\n");
+ gdb_printf (" All other non-permissive additional terms are considered \"further\n");
+ gdb_printf ("restrictions\" within the meaning of section 10. If the Program as you\n");
+ gdb_printf ("received it, or any part of it, contains a notice stating that it is\n");
+ gdb_printf ("governed by this License along with a term that is a further\n");
+ gdb_printf ("restriction, you may remove that term. If a license document contains\n");
+ gdb_printf ("a further restriction but permits relicensing or conveying under this\n");
+ gdb_printf ("License, you may add to a covered work material governed by the terms\n");
+ gdb_printf ("of that license document, provided that the further restriction does\n");
+ gdb_printf ("not survive such relicensing or conveying.\n");
+ gdb_printf ("\n");
+ gdb_printf (" If you add terms to a covered work in accord with this section, you\n");
+ gdb_printf ("must place, in the relevant source files, a statement of the\n");
+ gdb_printf ("additional terms that apply to those files, or a notice indicating\n");
+ gdb_printf ("where to find the applicable terms.\n");
+ gdb_printf ("\n");
+ gdb_printf (" Additional terms, permissive or non-permissive, may be stated in the\n");
+ gdb_printf ("form of a separately written license, or stated as exceptions;\n");
+ gdb_printf ("the above requirements apply either way.\n");
+ gdb_printf ("\n");
+ gdb_printf (" 8. Termination.\n");
+ gdb_printf ("\n");
+ gdb_printf (" You may not propagate or modify a covered work except as expressly\n");
+ gdb_printf ("provided under this License. Any attempt otherwise to propagate or\n");
+ gdb_printf ("modify it is void, and will automatically terminate your rights under\n");
+ gdb_printf ("this License (including any patent licenses granted under the third\n");
+ gdb_printf ("paragraph of section 11).\n");
+ gdb_printf ("\n");
+ gdb_printf (" However, if you cease all violation of this License, then your\n");
+ gdb_printf ("license from a particular copyright holder is reinstated (a)\n");
+ gdb_printf ("provisionally, unless and until the copyright holder explicitly and\n");
+ gdb_printf ("finally terminates your license, and (b) permanently, if the copyright\n");
+ gdb_printf ("holder fails to notify you of the violation by some reasonable means\n");
+ gdb_printf ("prior to 60 days after the cessation.\n");
+ gdb_printf ("\n");
+ gdb_printf (" Moreover, your license from a particular copyright holder is\n");
+ gdb_printf ("reinstated permanently if the copyright holder notifies you of the\n");
+ gdb_printf ("violation by some reasonable means, this is the first time you have\n");
+ gdb_printf ("received notice of violation of this License (for any work) from that\n");
+ gdb_printf ("copyright holder, and you cure the violation prior to 30 days after\n");
+ gdb_printf ("your receipt of the notice.\n");
+ gdb_printf ("\n");
+ gdb_printf (" Termination of your rights under this section does not terminate the\n");
+ gdb_printf ("licenses of parties who have received copies or rights from you under\n");
+ gdb_printf ("this License. If your rights have been terminated and not permanently\n");
+ gdb_printf ("reinstated, you do not qualify to receive new licenses for the same\n");
+ gdb_printf ("material under section 10.\n");
+ gdb_printf ("\n");
+ gdb_printf (" 9. Acceptance Not Required for Having Copies.\n");
+ gdb_printf ("\n");
+ gdb_printf (" You are not required to accept this License in order to receive or\n");
+ gdb_printf ("run a copy of the Program. Ancillary propagation of a covered work\n");
+ gdb_printf ("occurring solely as a consequence of using peer-to-peer transmission\n");
+ gdb_printf ("to receive a copy likewise does not require acceptance. However,\n");
+ gdb_printf ("nothing other than this License grants you permission to propagate or\n");
+ gdb_printf ("modify any covered work. These actions infringe copyright if you do\n");
+ gdb_printf ("not accept this License. Therefore, by modifying or propagating a\n");
+ gdb_printf ("covered work, you indicate your acceptance of this License to do so.\n");
+ gdb_printf ("\n");
+ gdb_printf (" 10. Automatic Licensing of Downstream Recipients.\n");
+ gdb_printf ("\n");
+ gdb_printf (" Each time you convey a covered work, the recipient automatically\n");
+ gdb_printf ("receives a license from the original licensors, to run, modify and\n");
+ gdb_printf ("propagate that work, subject to this License. You are not responsible\n");
+ gdb_printf ("for enforcing compliance by third parties with this License.\n");
+ gdb_printf ("\n");
+ gdb_printf (" An \"entity transaction\" is a transaction transferring control of an\n");
+ gdb_printf ("organization, or substantially all assets of one, or subdividing an\n");
+ gdb_printf ("organization, or merging organizations. If propagation of a covered\n");
+ gdb_printf ("work results from an entity transaction, each party to that\n");
+ gdb_printf ("transaction who receives a copy of the work also receives whatever\n");
+ gdb_printf ("licenses to the work the party's predecessor in interest had or could\n");
+ gdb_printf ("give under the previous paragraph, plus a right to possession of the\n");
+ gdb_printf ("Corresponding Source of the work from the predecessor in interest, if\n");
+ gdb_printf ("the predecessor has it or can get it with reasonable efforts.\n");
+ gdb_printf ("\n");
+ gdb_printf (" You may not impose any further restrictions on the exercise of the\n");
+ gdb_printf ("rights granted or affirmed under this License. For example, you may\n");
+ gdb_printf ("not impose a license fee, royalty, or other charge for exercise of\n");
+ gdb_printf ("rights granted under this License, and you may not initiate litigation\n");
+ gdb_printf ("(including a cross-claim or counterclaim in a lawsuit) alleging that\n");
+ gdb_printf ("any patent claim is infringed by making, using, selling, offering for\n");
+ gdb_printf ("sale, or importing the Program or any portion of it.\n");
+ gdb_printf ("\n");
+ gdb_printf (" 11. Patents.\n");
+ gdb_printf ("\n");
+ gdb_printf (" A \"contributor\" is a copyright holder who authorizes use under this\n");
+ gdb_printf ("License of the Program or a work on which the Program is based. The\n");
+ gdb_printf ("work thus licensed is called the contributor's \"contributor version\".\n");
+ gdb_printf ("\n");
+ gdb_printf (" A contributor's \"essential patent claims\" are all patent claims\n");
+ gdb_printf ("owned or controlled by the contributor, whether already acquired or\n");
+ gdb_printf ("hereafter acquired, that would be infringed by some manner, permitted\n");
+ gdb_printf ("by this License, of making, using, or selling its contributor version,\n");
+ gdb_printf ("but do not include claims that would be infringed only as a\n");
+ gdb_printf ("consequence of further modification of the contributor version. For\n");
+ gdb_printf ("purposes of this definition, \"control\" includes the right to grant\n");
+ gdb_printf ("patent sublicenses in a manner consistent with the requirements of\n");
+ gdb_printf ("this License.\n");
+ gdb_printf ("\n");
+ gdb_printf (" Each contributor grants you a non-exclusive, worldwide, royalty-free\n");
+ gdb_printf ("patent license under the contributor's essential patent claims, to\n");
+ gdb_printf ("make, use, sell, offer for sale, import and otherwise run, modify and\n");
+ gdb_printf ("propagate the contents of its contributor version.\n");
+ gdb_printf ("\n");
+ gdb_printf (" In the following three paragraphs, a \"patent license\" is any express\n");
+ gdb_printf ("agreement or commitment, however denominated, not to enforce a patent\n");
+ gdb_printf ("(such as an express permission to practice a patent or covenant not to\n");
+ gdb_printf ("sue for patent infringement). To \"grant\" such a patent license to a\n");
+ gdb_printf ("party means to make such an agreement or commitment not to enforce a\n");
+ gdb_printf ("patent against the party.\n");
+ gdb_printf ("\n");
+ gdb_printf (" If you convey a covered work, knowingly relying on a patent license,\n");
+ gdb_printf ("and the Corresponding Source of the work is not available for anyone\n");
+ gdb_printf ("to copy, free of charge and under the terms of this License, through a\n");
+ gdb_printf ("publicly available network server or other readily accessible means,\n");
+ gdb_printf ("then you must either (1) cause the Corresponding Source to be so\n");
+ gdb_printf ("available, or (2) arrange to deprive yourself of the benefit of the\n");
+ gdb_printf ("patent license for this particular work, or (3) arrange, in a manner\n");
+ gdb_printf ("consistent with the requirements of this License, to extend the patent\n");
+ gdb_printf ("license to downstream recipients. \"Knowingly relying\" means you have\n");
+ gdb_printf ("actual knowledge that, but for the patent license, your conveying the\n");
+ gdb_printf ("covered work in a country, or your recipient's use of the covered work\n");
+ gdb_printf ("in a country, would infringe one or more identifiable patents in that\n");
+ gdb_printf ("country that you have reason to believe are valid.\n");
+ gdb_printf ("\n");
+ gdb_printf (" If, pursuant to or in connection with a single transaction or\n");
+ gdb_printf ("arrangement, you convey, or propagate by procuring conveyance of, a\n");
+ gdb_printf ("covered work, and grant a patent license to some of the parties\n");
+ gdb_printf ("receiving the covered work authorizing them to use, propagate, modify\n");
+ gdb_printf ("or convey a specific copy of the covered work, then the patent license\n");
+ gdb_printf ("you grant is automatically extended to all recipients of the covered\n");
+ gdb_printf ("work and works based on it.\n");
+ gdb_printf ("\n");
+ gdb_printf (" A patent license is \"discriminatory\" if it does not include within\n");
+ gdb_printf ("the scope of its coverage, prohibits the exercise of, or is\n");
+ gdb_printf ("conditioned on the non-exercise of one or more of the rights that are\n");
+ gdb_printf ("specifically granted under this License. You may not convey a covered\n");
+ gdb_printf ("work if you are a party to an arrangement with a third party that is\n");
+ gdb_printf ("in the business of distributing software, under which you make payment\n");
+ gdb_printf ("to the third party based on the extent of your activity of conveying\n");
+ gdb_printf ("the work, and under which the third party grants, to any of the\n");
+ gdb_printf ("parties who would receive the covered work from you, a discriminatory\n");
+ gdb_printf ("patent license (a) in connection with copies of the covered work\n");
+ gdb_printf ("conveyed by you (or copies made from those copies), or (b) primarily\n");
+ gdb_printf ("for and in connection with specific products or compilations that\n");
+ gdb_printf ("contain the covered work, unless you entered into that arrangement,\n");
+ gdb_printf ("or that patent license was granted, prior to 28 March 2007.\n");
+ gdb_printf ("\n");
+ gdb_printf (" Nothing in this License shall be construed as excluding or limiting\n");
+ gdb_printf ("any implied license or other defenses to infringement that may\n");
+ gdb_printf ("otherwise be available to you under applicable patent law.\n");
+ gdb_printf ("\n");
+ gdb_printf (" 12. No Surrender of Others' Freedom.\n");
+ gdb_printf ("\n");
+ gdb_printf (" If conditions are imposed on you (whether by court order, agreement or\n");
+ gdb_printf ("otherwise) that contradict the conditions of this License, they do not\n");
+ gdb_printf ("excuse you from the conditions of this License. If you cannot convey a\n");
+ gdb_printf ("covered work so as to satisfy simultaneously your obligations under this\n");
+ gdb_printf ("License and any other pertinent obligations, then as a consequence you may\n");
+ gdb_printf ("not convey it at all. For example, if you agree to terms that obligate you\n");
+ gdb_printf ("to collect a royalty for further conveying from those to whom you convey\n");
+ gdb_printf ("the Program, the only way you could satisfy both those terms and this\n");
+ gdb_printf ("License would be to refrain entirely from conveying the Program.\n");
+ gdb_printf ("\n");
+ gdb_printf (" 13. Use with the GNU Affero General Public License.\n");
+ gdb_printf ("\n");
+ gdb_printf (" Notwithstanding any other provision of this License, you have\n");
+ gdb_printf ("permission to link or combine any covered work with a work licensed\n");
+ gdb_printf ("under version 3 of the GNU Affero General Public License into a single\n");
+ gdb_printf ("combined work, and to convey the resulting work. The terms of this\n");
+ gdb_printf ("License will continue to apply to the part which is the covered work,\n");
+ gdb_printf ("but the special requirements of the GNU Affero General Public License,\n");
+ gdb_printf ("section 13, concerning interaction through a network will apply to the\n");
+ gdb_printf ("combination as such.\n");
+ gdb_printf ("\n");
+ gdb_printf (" 14. Revised Versions of this License.\n");
+ gdb_printf ("\n");
+ gdb_printf (" The Free Software Foundation may publish revised and/or new versions of\n");
+ gdb_printf ("the GNU General Public License from time to time. Such new versions will\n");
+ gdb_printf ("be similar in spirit to the present version, but may differ in detail to\n");
+ gdb_printf ("address new problems or concerns.\n");
+ gdb_printf ("\n");
+ gdb_printf (" Each version is given a distinguishing version number. If the\n");
+ gdb_printf ("Program specifies that a certain numbered version of the GNU General\n");
+ gdb_printf ("Public License \"or any later version\" applies to it, you have the\n");
+ gdb_printf ("option of following the terms and conditions either of that numbered\n");
+ gdb_printf ("version or of any later version published by the Free Software\n");
+ gdb_printf ("Foundation. If the Program does not specify a version number of the\n");
+ gdb_printf ("GNU General Public License, you may choose any version ever published\n");
+ gdb_printf ("by the Free Software Foundation.\n");
+ gdb_printf ("\n");
+ gdb_printf (" If the Program specifies that a proxy can decide which future\n");
+ gdb_printf ("versions of the GNU General Public License can be used, that proxy's\n");
+ gdb_printf ("public statement of acceptance of a version permanently authorizes you\n");
+ gdb_printf ("to choose that version for the Program.\n");
+ gdb_printf ("\n");
+ gdb_printf (" Later license versions may give you additional or different\n");
+ gdb_printf ("permissions. However, no additional obligations are imposed on any\n");
+ gdb_printf ("author or copyright holder as a result of your choosing to follow a\n");
+ gdb_printf ("later version.\n");
+ gdb_printf ("\n");
}
static void
show_warranty_command (const char *ignore, int from_tty)
{
- printf_filtered (" 15. Disclaimer of Warranty.\n");
- printf_filtered ("\n");
- printf_filtered (" THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\n");
- printf_filtered ("APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\n");
- printf_filtered ("HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY\n");
- printf_filtered ("OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\n");
- printf_filtered ("THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n");
- printf_filtered ("PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\n");
- printf_filtered ("IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\n");
- printf_filtered ("ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n");
- printf_filtered ("\n");
- printf_filtered (" 16. Limitation of Liability.\n");
- printf_filtered ("\n");
- printf_filtered (" IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\n");
- printf_filtered ("WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\n");
- printf_filtered ("THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\n");
- printf_filtered ("GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\n");
- printf_filtered ("USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\n");
- printf_filtered ("DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\n");
- printf_filtered ("PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\n");
- printf_filtered ("EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\n");
- printf_filtered ("SUCH DAMAGES.\n");
- printf_filtered ("\n");
- printf_filtered (" 17. Interpretation of Sections 15 and 16.\n");
- printf_filtered ("\n");
- printf_filtered (" If the disclaimer of warranty and limitation of liability provided\n");
- printf_filtered ("above cannot be given local legal effect according to their terms,\n");
- printf_filtered ("reviewing courts shall apply local law that most closely approximates\n");
- printf_filtered ("an absolute waiver of all civil liability in connection with the\n");
- printf_filtered ("Program, unless a warranty or assumption of liability accompanies a\n");
- printf_filtered ("copy of the Program in return for a fee.\n");
- printf_filtered ("\n");
+ gdb_printf (" 15. Disclaimer of Warranty.\n");
+ gdb_printf ("\n");
+ gdb_printf (" THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\n");
+ gdb_printf ("APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\n");
+ gdb_printf ("HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY\n");
+ gdb_printf ("OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\n");
+ gdb_printf ("THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n");
+ gdb_printf ("PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\n");
+ gdb_printf ("IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\n");
+ gdb_printf ("ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n");
+ gdb_printf ("\n");
+ gdb_printf (" 16. Limitation of Liability.\n");
+ gdb_printf ("\n");
+ gdb_printf (" IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\n");
+ gdb_printf ("WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\n");
+ gdb_printf ("THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\n");
+ gdb_printf ("GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\n");
+ gdb_printf ("USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\n");
+ gdb_printf ("DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\n");
+ gdb_printf ("PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\n");
+ gdb_printf ("EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\n");
+ gdb_printf ("SUCH DAMAGES.\n");
+ gdb_printf ("\n");
+ gdb_printf (" 17. Interpretation of Sections 15 and 16.\n");
+ gdb_printf ("\n");
+ gdb_printf (" If the disclaimer of warranty and limitation of liability provided\n");
+ gdb_printf ("above cannot be given local legal effect according to their terms,\n");
+ gdb_printf ("reviewing courts shall apply local law that most closely approximates\n");
+ gdb_printf ("an absolute waiver of all civil liability in connection with the\n");
+ gdb_printf ("Program, unless a warranty or assumption of liability accompanies a\n");
+ gdb_printf ("copy of the Program in return for a fee.\n");
+ gdb_printf ("\n");
}
void _initialize_copying ();
diff --git a/gdb/copyright.py b/gdb/copyright.py
index 3c44ae2d689..48192e80560 100644
--- a/gdb/copyright.py
+++ b/gdb/copyright.py
@@ -209,6 +209,7 @@ def main():
EXCLUDE_LIST = (
"gdb/nat/glibc_thread_db.h",
"gdb/CONTRIBUTE",
+ "gdbsupport/Makefile.in",
"gnulib/import",
"gnulib/config.in",
"gnulib/Makefile.in",
@@ -244,7 +245,6 @@ BY_HAND = (
MULTIPLE_COPYRIGHT_HEADERS = (
"gdb/doc/gdb.texinfo",
"gdb/doc/refcard.tex",
- "gdb/gdbarch.sh",
"gdb/syscalls/update-netbsd.sh",
)
diff --git a/gdb/corefile.c b/gdb/corefile.c
index 61f60bbb07f..71f81571342 100644
--- a/gdb/corefile.c
+++ b/gdb/corefile.c
@@ -401,8 +401,8 @@ show_gnutarget_string (struct ui_file *file, int from_tty,
struct cmd_list_element *c,
const char *value)
{
- fprintf_filtered (file,
- _("The current BFD target is \"%s\".\n"), value);
+ gdb_printf (file,
+ _("The current BFD target is \"%s\".\n"), value);
}
static void
diff --git a/gdb/corelow.c b/gdb/corelow.c
index 1579e6bc2b8..8c33fb7ebb2 100644
--- a/gdb/corelow.c
+++ b/gdb/corelow.c
@@ -46,6 +46,8 @@
#include "gdbsupport/filestuff.h"
#include "build-id.h"
#include "gdbsupport/pathstuff.h"
+#include "gdbsupport/scoped_fd.h"
+#include "debuginfod-support.h"
#include <unordered_map>
#include <unordered_set>
#include "gdbcmd.h"
@@ -229,6 +231,11 @@ core_target::build_file_mappings ()
canonical) pathname will be provided. */
gdb::unique_xmalloc_ptr<char> expanded_fname
= exec_file_find (filename, NULL);
+
+ if (expanded_fname == nullptr && build_id != nullptr)
+ debuginfod_exec_query (build_id->data, build_id->size,
+ filename, &expanded_fname);
+
if (expanded_fname == nullptr)
{
m_core_unavailable_mappings.emplace_back (start, end - start);
@@ -282,6 +289,17 @@ core_target::build_file_mappings ()
/* Set target_section fields. */
m_core_file_mappings.emplace_back (start, end, sec);
+
+ /* If this is a bfd of a shared library, record its soname
+ and build id. */
+ if (build_id != nullptr)
+ {
+ gdb::unique_xmalloc_ptr<char> soname
+ = gdb_bfd_read_elf_soname (bfd->filename);
+ if (soname != nullptr)
+ set_cbfd_soname_build_id (current_program_space->cbfd,
+ soname.get (), build_id);
+ }
});
normalize_mem_ranges (&m_core_unavailable_mappings);
@@ -362,7 +380,7 @@ static void
maybe_say_no_core_file_now (int from_tty)
{
if (from_tty)
- printf_filtered (_("No core file now.\n"));
+ gdb_printf (_("No core file now.\n"));
}
/* Backward compatibility with old way of specifying core files. */
@@ -399,6 +417,27 @@ locate_exec_from_corefile_build_id (bfd *abfd, int from_tty)
gdb_bfd_ref_ptr execbfd
= build_id_to_exec_bfd (build_id->size, build_id->data);
+ if (execbfd == nullptr)
+ {
+ /* Attempt to query debuginfod for the executable. */
+ gdb::unique_xmalloc_ptr<char> execpath;
+ scoped_fd fd = debuginfod_exec_query (build_id->data, build_id->size,
+ abfd->filename, &execpath);
+
+ if (fd.get () >= 0)
+ {
+ execbfd = gdb_bfd_open (execpath.get (), gnutarget);
+
+ if (execbfd == nullptr)
+ warning (_("\"%s\" from debuginfod cannot be opened as bfd: %s"),
+ execpath.get (),
+ gdb_bfd_errmsg (bfd_get_error (), nullptr).c_str ());
+ else if (!build_id_verify (execbfd.get (), build_id->size,
+ build_id->data))
+ execbfd.reset (nullptr);
+ }
+ }
+
if (execbfd != nullptr)
{
exec_file_attach (bfd_get_filename (execbfd.get ()), from_tty);
@@ -430,7 +469,7 @@ core_target_open (const char *arg, int from_tty)
gdb::unique_xmalloc_ptr<char> filename (tilde_expand (arg));
if (strlen (filename.get ()) != 0
&& !IS_ABSOLUTE_PATH (filename.get ()))
- filename = gdb_abspath (filename.get ());
+ filename = make_unique_xstrdup (gdb_abspath (filename.get ()).c_str ());
flags = O_BINARY | O_LARGEFILE;
if (write_files)
@@ -532,7 +571,7 @@ core_target_open (const char *arg, int from_tty)
p = bfd_core_file_failing_command (core_bfd);
if (p)
- printf_filtered (_("Core was generated by `%s'.\n"), p);
+ gdb_printf (_("Core was generated by `%s'.\n"), p);
/* Clearing any previous state of convenience variables. */
clear_exit_convenience_vars ();
@@ -554,11 +593,11 @@ core_target_open (const char *arg, int from_tty)
siggy)
: gdb_signal_from_host (siggy));
- printf_filtered (_("Program terminated with signal %s, %s"),
- gdb_signal_to_name (sig), gdb_signal_to_string (sig));
+ gdb_printf (_("Program terminated with signal %s, %s"),
+ gdb_signal_to_name (sig), gdb_signal_to_string (sig));
if (gdbarch_report_signal_info_p (core_gdbarch))
gdbarch_report_signal_info (core_gdbarch, current_uiout, sig);
- printf_filtered (_(".\n"));
+ gdb_printf (_(".\n"));
/* Set the value of the internal variable $_exitsignal,
which holds the signal uncaught by the inferior. */
@@ -721,8 +760,8 @@ core_target::fetch_registers (struct regcache *regcache, int regno)
if (!(m_core_gdbarch != nullptr
&& gdbarch_iterate_over_regset_sections_p (m_core_gdbarch)))
{
- fprintf_filtered (gdb_stderr,
- "Can't fetch registers from this type of core file\n");
+ gdb_printf (gdb_stderr,
+ "Can't fetch registers from this type of core file\n");
return;
}
@@ -943,7 +982,7 @@ core_target::xfer_partial (enum target_object object, const char *annex,
return TARGET_XFER_OK;
}
}
- /* FALL THROUGH */
+ return TARGET_XFER_E_IO;
case TARGET_OBJECT_LIBRARIES_AIX:
if (m_core_gdbarch != nullptr
@@ -964,7 +1003,7 @@ core_target::xfer_partial (enum target_object object, const char *annex,
return TARGET_XFER_OK;
}
}
- /* FALL THROUGH */
+ return TARGET_XFER_E_IO;
case TARGET_OBJECT_SIGNAL_INFO:
if (readbuf)
@@ -1140,20 +1179,20 @@ core_target::info_proc_mappings (struct gdbarch *gdbarch)
{
if (!m_core_file_mappings.empty ())
{
- printf_filtered (_("Mapped address spaces:\n\n"));
+ gdb_printf (_("Mapped address spaces:\n\n"));
if (gdbarch_addr_bit (gdbarch) == 32)
{
- printf_filtered ("\t%10s %10s %10s %10s %s\n",
- "Start Addr",
- " End Addr",
- " Size", " Offset", "objfile");
+ gdb_printf ("\t%10s %10s %10s %10s %s\n",
+ "Start Addr",
+ " End Addr",
+ " Size", " Offset", "objfile");
}
else
{
- printf_filtered (" %18s %18s %10s %10s %s\n",
- "Start Addr",
- " End Addr",
- " Size", " Offset", "objfile");
+ gdb_printf (" %18s %18s %10s %10s %s\n",
+ "Start Addr",
+ " End Addr",
+ " Size", " Offset", "objfile");
}
}
@@ -1165,19 +1204,19 @@ core_target::info_proc_mappings (struct gdbarch *gdbarch)
const char *filename = bfd_get_filename (tsp.the_bfd_section->owner);
if (gdbarch_addr_bit (gdbarch) == 32)
- printf_filtered ("\t%10s %10s %10s %10s %s\n",
- paddress (gdbarch, start),
- paddress (gdbarch, end),
- hex_string (end - start),
- hex_string (file_ofs),
- filename);
+ gdb_printf ("\t%10s %10s %10s %10s %s\n",
+ paddress (gdbarch, start),
+ paddress (gdbarch, end),
+ hex_string (end - start),
+ hex_string (file_ofs),
+ filename);
else
- printf_filtered (" %18s %18s %10s %10s %s\n",
- paddress (gdbarch, start),
- paddress (gdbarch, end),
- hex_string (end - start),
- hex_string (file_ofs),
- filename);
+ gdb_printf (" %18s %18s %10s %10s %s\n",
+ paddress (gdbarch, start),
+ paddress (gdbarch, end),
+ hex_string (end - start),
+ hex_string (file_ofs),
+ filename);
}
}
diff --git a/gdb/cp-namespace.c b/gdb/cp-namespace.c
index e6176719677..e734effe7f0 100644
--- a/gdb/cp-namespace.c
+++ b/gdb/cp-namespace.c
@@ -20,7 +20,7 @@
#include "defs.h"
#include "cp-support.h"
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
#include "symtab.h"
#include "symfile.h"
#include "block.h"
@@ -220,7 +220,7 @@ cp_lookup_bare_symbol (const struct language_defn *langdef,
return {};
- type = check_typedef (TYPE_TARGET_TYPE (SYMBOL_TYPE (lang_this.symbol)));
+ type = check_typedef (TYPE_TARGET_TYPE (lang_this.symbol->type ()));
/* If TYPE_NAME is NULL, abandon trying to find this symbol.
This can happen for lambda functions compiled with clang++,
which outputs no name for the container class. */
@@ -274,14 +274,14 @@ cp_search_static_and_baseclasses (const char *name,
if (scope_sym.symbol == NULL)
return {};
- struct type *scope_type = SYMBOL_TYPE (scope_sym.symbol);
+ struct type *scope_type = scope_sym.symbol->type ();
/* If the scope is a function/method, then look up NESTED as a local
static variable. E.g., "print 'function()::static_var'". */
if ((scope_type->code () == TYPE_CODE_FUNC
|| scope_type->code () == TYPE_CODE_METHOD)
&& domain == VAR_DOMAIN)
- return lookup_symbol (nested, SYMBOL_BLOCK_VALUE (scope_sym.symbol),
+ return lookup_symbol (nested, scope_sym.symbol->value_block (),
VAR_DOMAIN, NULL);
/* Look for a symbol named NESTED in this class/namespace.
@@ -504,22 +504,22 @@ cp_lookup_symbol_imports_or_template (const char *scope,
const struct block *block,
const domain_enum domain)
{
- struct symbol *function = BLOCK_FUNCTION (block);
+ struct symbol *function = block->function ();
struct block_symbol result;
if (symbol_lookup_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "cp_lookup_symbol_imports_or_template"
- " (%s, %s, %s, %s)\n",
- scope, name, host_address_to_string (block),
- domain_name (domain));
+ gdb_printf (gdb_stdlog,
+ "cp_lookup_symbol_imports_or_template"
+ " (%s, %s, %s, %s)\n",
+ scope, name, host_address_to_string (block),
+ domain_name (domain));
}
if (function != NULL && function->language () == language_cplus)
{
/* Search the function's template parameters. */
- if (SYMBOL_IS_CPLUS_TEMPLATE_FUNCTION (function))
+ if (function->is_cplus_template_function ())
{
struct template_symbol *templ
= (struct template_symbol *) function;
@@ -531,10 +531,10 @@ cp_lookup_symbol_imports_or_template (const char *scope,
{
if (symbol_lookup_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "cp_lookup_symbol_imports_or_template"
- " (...) = %s\n",
- host_address_to_string (sym));
+ gdb_printf (gdb_stdlog,
+ "cp_lookup_symbol_imports_or_template"
+ " (...) = %s\n",
+ host_address_to_string (sym));
}
return (struct block_symbol) {sym, block};
}
@@ -547,7 +547,7 @@ cp_lookup_symbol_imports_or_template (const char *scope,
struct type *context;
std::string name_copy (function->natural_name ());
const struct language_defn *lang = language_def (language_cplus);
- const struct block *parent = BLOCK_SUPERBLOCK (block);
+ const struct block *parent = block->superblock ();
struct symbol *sym;
while (1)
@@ -576,7 +576,7 @@ cp_lookup_symbol_imports_or_template (const char *scope,
{
if (symbol_lookup_debug)
{
- fprintf_unfiltered
+ gdb_printf
(gdb_stdlog,
"cp_lookup_symbol_imports_or_template (...) = %s\n",
host_address_to_string (sym));
@@ -590,10 +590,10 @@ cp_lookup_symbol_imports_or_template (const char *scope,
result = cp_lookup_symbol_via_imports (scope, name, block, domain, 0, 1, 1);
if (symbol_lookup_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "cp_lookup_symbol_imports_or_template (...) = %s\n",
- result.symbol != NULL
- ? host_address_to_string (result.symbol) : "NULL");
+ gdb_printf (gdb_stdlog,
+ "cp_lookup_symbol_imports_or_template (...) = %s\n",
+ result.symbol != NULL
+ ? host_address_to_string (result.symbol) : "NULL");
}
return result;
}
@@ -615,7 +615,7 @@ cp_lookup_symbol_via_all_imports (const char *scope, const char *name,
if (sym.symbol)
return sym;
- block = BLOCK_SUPERBLOCK (block);
+ block = block->superblock ();
}
return {};
@@ -636,10 +636,10 @@ cp_lookup_symbol_namespace (const char *scope,
if (symbol_lookup_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "cp_lookup_symbol_namespace (%s, %s, %s, %s)\n",
- scope, name, host_address_to_string (block),
- domain_name (domain));
+ gdb_printf (gdb_stdlog,
+ "cp_lookup_symbol_namespace (%s, %s, %s, %s)\n",
+ scope, name, host_address_to_string (block),
+ domain_name (domain));
}
/* First, try to find the symbol in the given namespace. */
@@ -651,10 +651,10 @@ cp_lookup_symbol_namespace (const char *scope,
if (symbol_lookup_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "cp_lookup_symbol_namespace (...) = %s\n",
- sym.symbol != NULL
- ? host_address_to_string (sym.symbol) : "NULL");
+ gdb_printf (gdb_stdlog,
+ "cp_lookup_symbol_namespace (...) = %s\n",
+ sym.symbol != NULL
+ ? host_address_to_string (sym.symbol) : "NULL");
}
return sym;
}
@@ -742,11 +742,11 @@ cp_lookup_symbol_nonlocal (const struct language_defn *langdef,
if (symbol_lookup_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "cp_lookup_symbol_non_local"
- " (%s, %s (scope %s), %s)\n",
- name, host_address_to_string (block), scope,
- domain_name (domain));
+ gdb_printf (gdb_stdlog,
+ "cp_lookup_symbol_non_local"
+ " (%s, %s (scope %s), %s)\n",
+ name, host_address_to_string (block), scope,
+ domain_name (domain));
}
/* First, try to find the symbol in the given namespace, and all
@@ -759,11 +759,11 @@ cp_lookup_symbol_nonlocal (const struct language_defn *langdef,
if (symbol_lookup_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "cp_lookup_symbol_nonlocal (...) = %s\n",
- (sym.symbol != NULL
- ? host_address_to_string (sym.symbol)
- : "NULL"));
+ gdb_printf (gdb_stdlog,
+ "cp_lookup_symbol_nonlocal (...) = %s\n",
+ (sym.symbol != NULL
+ ? host_address_to_string (sym.symbol)
+ : "NULL"));
}
return sym;
}
@@ -920,11 +920,11 @@ cp_lookup_nested_symbol (struct type *parent_type,
{
const char *type_name = saved_parent_type->name ();
- fprintf_unfiltered (gdb_stdlog,
- "cp_lookup_nested_symbol (%s, %s, %s, %s)\n",
- type_name != NULL ? type_name : "unnamed",
- nested_name, host_address_to_string (block),
- domain_name (domain));
+ gdb_printf (gdb_stdlog,
+ "cp_lookup_nested_symbol (%s, %s, %s, %s)\n",
+ type_name != NULL ? type_name : "unnamed",
+ nested_name, host_address_to_string (block),
+ domain_name (domain));
}
switch (parent_type->code ())
@@ -956,11 +956,11 @@ cp_lookup_nested_symbol (struct type *parent_type,
if (symbol_lookup_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "cp_lookup_nested_symbol (...) = %s\n",
- (sym.symbol != NULL
- ? host_address_to_string (sym.symbol)
- : "NULL"));
+ gdb_printf (gdb_stdlog,
+ "cp_lookup_nested_symbol (...) = %s\n",
+ (sym.symbol != NULL
+ ? host_address_to_string (sym.symbol)
+ : "NULL"));
}
return sym;
}
@@ -969,9 +969,9 @@ cp_lookup_nested_symbol (struct type *parent_type,
case TYPE_CODE_METHOD:
if (symbol_lookup_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "cp_lookup_nested_symbol (...) = NULL"
- " (func/method)\n");
+ gdb_printf (gdb_stdlog,
+ "cp_lookup_nested_symbol (...) = NULL"
+ " (func/method)\n");
}
return {};
@@ -1058,7 +1058,7 @@ cp_lookup_transparent_type_loop (const char *name,
static void
maintenance_cplus_namespace (const char *args, int from_tty)
{
- printf_filtered (_("The `maint namespace' command was removed.\n"));
+ gdb_printf (_("The `maint namespace' command was removed.\n"));
}
void _initialize_cp_namespace ();
diff --git a/gdb/cp-support.c b/gdb/cp-support.c
index de83eb5d957..f52055893d2 100644
--- a/gdb/cp-support.c
+++ b/gdb/cp-support.c
@@ -166,7 +166,7 @@ inspect_type (struct demangle_parse_info *info,
if (sym != NULL)
{
- struct type *otype = SYMBOL_TYPE (sym);
+ struct type *otype = sym->type ();
if (finder != NULL)
{
@@ -512,7 +512,7 @@ replace_typedefs (struct demangle_parse_info *info,
if (sym != NULL)
{
- struct type *otype = SYMBOL_TYPE (sym);
+ struct type *otype = sym->type ();
const char *new_name = (*finder) (otype, data);
if (new_name != NULL)
@@ -1215,7 +1215,7 @@ overload_list_add_symbol (struct symbol *sym,
{
/* If there is no type information, we can't do anything, so
skip. */
- if (SYMBOL_TYPE (sym) == NULL)
+ if (sym->type () == NULL)
return;
/* skip any symbols that we've already considered. */
@@ -1400,7 +1400,7 @@ add_symbol_overload_list_using (const char *func_name,
for (block = get_selected_block (0);
block != NULL;
- block = BLOCK_SUPERBLOCK (block))
+ block = block->superblock ())
for (current = block_using (block);
current != NULL;
current = current->next)
@@ -1440,7 +1440,7 @@ static void
add_symbol_overload_list_qualified (const char *func_name,
std::vector<symbol *> *overload_list)
{
- const struct block *b, *surrounding_static_block = 0;
+ const struct block *surrounding_static_block = 0;
/* Look through the partial symtabs for all symbols which begin by
matching FUNC_NAME. Make sure we read that symbol table in. */
@@ -1451,7 +1451,9 @@ add_symbol_overload_list_qualified (const char *func_name,
/* Search upwards from currently selected frame (so that we can
complete on local vars. */
- for (b = get_selected_block (0); b != NULL; b = BLOCK_SUPERBLOCK (b))
+ for (const block *b = get_selected_block (0);
+ b != nullptr;
+ b = b->superblock ())
add_symbol_overload_list_block (func_name, b, overload_list);
surrounding_static_block = block_static_block (get_selected_block (0));
@@ -1464,7 +1466,7 @@ add_symbol_overload_list_qualified (const char *func_name,
for (compunit_symtab *cust : objfile->compunits ())
{
QUIT;
- b = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (cust), GLOBAL_BLOCK);
+ const block *b = cust->blockvector ()->global_block ();
add_symbol_overload_list_block (func_name, b, overload_list);
}
}
@@ -1474,10 +1476,12 @@ add_symbol_overload_list_qualified (const char *func_name,
for (compunit_symtab *cust : objfile->compunits ())
{
QUIT;
- b = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (cust), STATIC_BLOCK);
+ const block *b = cust->blockvector ()->static_block ();
+
/* Don't do this block twice. */
if (b == surrounding_static_block)
continue;
+
add_symbol_overload_list_block (func_name, b, overload_list);
}
}
@@ -1501,13 +1505,13 @@ cp_lookup_rtti_type (const char *name, const struct block *block)
return NULL;
}
- if (SYMBOL_CLASS (rtti_sym) != LOC_TYPEDEF)
+ if (rtti_sym->aclass () != LOC_TYPEDEF)
{
warning (_("RTTI symbol for class '%s' is not a type"), name);
return NULL;
}
- rtti_type = check_typedef (SYMBOL_TYPE (rtti_sym));
+ rtti_type = check_typedef (rtti_sym->type ());
switch (rtti_type->code ())
{
@@ -1583,9 +1587,9 @@ report_failed_demangle (const char *name, bool core_dump_allowed,
begin_line ();
if (core_dump_allowed)
- fprintf_unfiltered (gdb_stderr,
- _("%s\nAttempting to dump core.\n"),
- long_msg.c_str ());
+ gdb_printf (gdb_stderr,
+ _("%s\nAttempting to dump core.\n"),
+ long_msg.c_str ());
else
warn_cant_dump_core (long_msg.c_str ());
@@ -1692,6 +1696,12 @@ cp_search_name_hash (const char *search_name)
&& string[5] != ':')
break;
+ /* Ignore template parameter lists. */
+ if (string[0] == '<'
+ && string[1] != '(' && string[1] != '<' && string[1] != '='
+ && string[1] != ' ' && string[1] != '\0')
+ break;
+
hash = SYMBOL_HASH_NEXT (hash, *string);
}
return hash;
@@ -1745,7 +1755,7 @@ cp_symbol_name_matches_1 (const char *symbol_search_name,
while (true)
{
if (strncmp_iw_with_mode (sname, lookup_name, lookup_name_len,
- mode, language_cplus, match_for_lcd) == 0)
+ mode, language_cplus, match_for_lcd, true) == 0)
{
if (comp_match_res != NULL)
{
@@ -2185,7 +2195,7 @@ first_component_command (const char *arg, int from_tty)
memcpy (prefix, arg, len);
prefix[len] = '\0';
- printf_filtered ("%s\n", prefix);
+ gdb_printf ("%s\n", prefix);
}
/* Implement "info vtbl". */
@@ -2199,6 +2209,80 @@ info_vtbl_command (const char *arg, int from_tty)
cplus_print_vtable (value);
}
+/* See description in cp-support.h. */
+
+const char *
+find_toplevel_char (const char *s, char c)
+{
+ int quoted = 0; /* zero if we're not in quotes;
+ '"' if we're in a double-quoted string;
+ '\'' if we're in a single-quoted string. */
+ int depth = 0; /* Number of unclosed parens we've seen. */
+ const char *scan;
+
+ for (scan = s; *scan; scan++)
+ {
+ if (quoted)
+ {
+ if (*scan == quoted)
+ quoted = 0;
+ else if (*scan == '\\' && *(scan + 1))
+ scan++;
+ }
+ else if (*scan == c && ! quoted && depth == 0)
+ return scan;
+ else if (*scan == '"' || *scan == '\'')
+ quoted = *scan;
+ else if (*scan == '(' || *scan == '<')
+ depth++;
+ else if ((*scan == ')' || *scan == '>') && depth > 0)
+ depth--;
+ else if (*scan == 'o' && !quoted && depth == 0)
+ {
+ /* Handle C++ operator names. */
+ if (strncmp (scan, CP_OPERATOR_STR, CP_OPERATOR_LEN) == 0)
+ {
+ scan += CP_OPERATOR_LEN;
+ if (*scan == c)
+ return scan;
+ while (ISSPACE (*scan))
+ {
+ ++scan;
+ if (*scan == c)
+ return scan;
+ }
+ if (*scan == '\0')
+ break;
+
+ switch (*scan)
+ {
+ /* Skip over one less than the appropriate number of
+ characters: the for loop will skip over the last
+ one. */
+ case '<':
+ if (scan[1] == '<')
+ {
+ scan++;
+ if (*scan == c)
+ return scan;
+ }
+ break;
+ case '>':
+ if (scan[1] == '>')
+ {
+ scan++;
+ if (*scan == c)
+ return scan;
+ }
+ break;
+ }
+ }
+ }
+ }
+
+ return 0;
+}
+
void _initialize_cp_support ();
void
_initialize_cp_support ()
diff --git a/gdb/cp-support.h b/gdb/cp-support.h
index 832155bff42..4fbd53c8923 100644
--- a/gdb/cp-support.h
+++ b/gdb/cp-support.h
@@ -26,7 +26,7 @@
#include "symtab.h"
#include "gdbsupport/gdb_vecs.h"
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
#include "gdbsupport/array-view.h"
#include <vector>
@@ -190,4 +190,11 @@ extern struct cmd_list_element *maint_cplus_cmd_list;
gdb::unique_xmalloc_ptr<char> gdb_demangle (const char *name, int options);
+/* Find an instance of the character C in the string S that is outside
+ of all parenthesis pairs, single-quoted strings, and double-quoted
+ strings. Also, ignore the char within a template name, like a ','
+ within foo<int, int>. */
+
+extern const char *find_toplevel_char (const char *s, char c);
+
#endif /* CP_SUPPORT_H */
diff --git a/gdb/cp-valprint.c b/gdb/cp-valprint.c
index 98ac636a21c..43a52698b71 100644
--- a/gdb/cp-valprint.c
+++ b/gdb/cp-valprint.c
@@ -18,7 +18,7 @@
along with this program. If not, see <http://www.gnu.org/licenses/>. */
#include "defs.h"
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
#include "symtab.h"
#include "gdbtypes.h"
#include "expression.h"
@@ -150,7 +150,7 @@ cp_print_value_fields (struct value *val, struct ui_file *stream,
}
}
- fprintf_filtered (stream, "{");
+ gdb_printf (stream, "{");
len = type->num_fields ();
n_baseclasses = TYPE_N_BASECLASSES (type);
@@ -198,42 +198,42 @@ cp_print_value_fields (struct value *val, struct ui_file *stream,
if (fields_seen)
{
- fputs_filtered (",", stream);
+ gdb_puts (",", stream);
if (!options->prettyformat)
- fputs_filtered (" ", stream);
+ gdb_puts (" ", stream);
}
else if (n_baseclasses > 0)
{
if (options->prettyformat)
{
- fprintf_filtered (stream, "\n");
- print_spaces_filtered (2 + 2 * recurse, stream);
- fputs_filtered ("members of ", stream);
- fputs_filtered (type->name (), stream);
- fputs_filtered (":", stream);
+ gdb_printf (stream, "\n");
+ print_spaces (2 + 2 * recurse, stream);
+ gdb_puts ("members of ", stream);
+ gdb_puts (type->name (), stream);
+ gdb_puts (":", stream);
}
}
fields_seen = 1;
if (options->prettyformat)
{
- fprintf_filtered (stream, "\n");
- print_spaces_filtered (2 + 2 * recurse, stream);
+ gdb_printf (stream, "\n");
+ print_spaces (2 + 2 * recurse, stream);
}
else
{
- wrap_here (n_spaces (2 + 2 * recurse));
+ stream->wrap_here (2 + 2 * recurse);
}
annotate_field_begin (type->field (i).type ());
if (field_is_static (&type->field (i)))
{
- fputs_filtered ("static ", stream);
- fprintf_symbol_filtered (stream,
- type->field (i).name (),
- current_language->la_language,
- DMGL_PARAMS | DMGL_ANSI);
+ gdb_puts ("static ", stream);
+ fprintf_symbol (stream,
+ type->field (i).name (),
+ current_language->la_language,
+ DMGL_PARAMS | DMGL_ANSI);
}
else
fputs_styled (type->field (i).name (),
@@ -247,7 +247,7 @@ cp_print_value_fields (struct value *val, struct ui_file *stream,
/* Do not print leading '=' in case of anonymous
unions. */
if (strcmp (type->field (i).name (), ""))
- fputs_filtered (" = ", stream);
+ gdb_puts (" = ", stream);
else
{
/* If this is an anonymous field then we want to consider it
@@ -373,12 +373,12 @@ cp_print_value_fields (struct value *val, struct ui_file *stream,
if (options->prettyformat)
{
- fprintf_filtered (stream, "\n");
- print_spaces_filtered (2 * recurse, stream);
+ gdb_printf (stream, "\n");
+ print_spaces (2 * recurse, stream);
}
} /* if there are data fields */
- fprintf_filtered (stream, "}");
+ gdb_printf (stream, "}");
}
/* Special val_print routine to avoid printing multiple copies of
@@ -478,14 +478,14 @@ cp_print_value (struct value *val, struct ui_file *stream,
/* Now do the printing. */
if (options->prettyformat)
{
- fprintf_filtered (stream, "\n");
- print_spaces_filtered (2 * recurse, stream);
+ gdb_printf (stream, "\n");
+ print_spaces (2 * recurse, stream);
}
- fputs_filtered ("<", stream);
+ gdb_puts ("<", stream);
/* Not sure what the best notation is in the case where there is
no baseclass name. */
- fputs_filtered (basename ? basename : "", stream);
- fputs_filtered ("> = ", stream);
+ gdb_puts (basename ? basename : "", stream);
+ gdb_puts ("> = ", stream);
if (skip < 0)
val_print_unavailable (stream);
@@ -516,7 +516,7 @@ cp_print_value (struct value *val, struct ui_file *stream,
0);
}
}
- fputs_filtered (", ", stream);
+ gdb_puts (", ", stream);
flush_it:
;
@@ -691,7 +691,7 @@ cp_print_class_member (const gdb_byte *valaddr, struct type *type,
if (val == -1)
{
- fprintf_filtered (stream, "NULL");
+ gdb_printf (stream, "NULL");
return;
}
@@ -701,18 +701,18 @@ cp_print_class_member (const gdb_byte *valaddr, struct type *type,
{
const char *name;
- fputs_filtered (prefix, stream);
+ gdb_puts (prefix, stream);
name = self_type->name ();
if (name)
- fputs_filtered (name, stream);
+ gdb_puts (name, stream);
else
c_type_print_base (self_type, stream, 0, 0, &type_print_raw_options);
- fprintf_filtered (stream, "::");
+ gdb_printf (stream, "::");
fputs_styled (self_type->field (fieldno).name (),
variable_name_style.style (), stream);
}
else
- fprintf_filtered (stream, "%ld", (long) val);
+ gdb_printf (stream, "%ld", (long) val);
}
#if GDB_SELF_TEST
diff --git a/gdb/cris-tdep.c b/gdb/cris-tdep.c
index 9698d32069d..898d277b3fe 100644
--- a/gdb/cris-tdep.c
+++ b/gdb/cris-tdep.c
@@ -3792,7 +3792,7 @@ cris_supply_gregset (const struct regset *regset, struct regcache *regcache,
(char *)&regp[ERP_REGNUM]);
if (*(char *)&regp[ERP_REGNUM] & 0x1)
- fprintf_unfiltered (gdb_stderr, "Warning: PC in delay slot\n");
+ gdb_printf (gdb_stderr, "Warning: PC in delay slot\n");
}
}
@@ -3863,12 +3863,12 @@ cris_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
cris_gdbarch_tdep *tdep = (cris_gdbarch_tdep *) gdbarch_tdep (gdbarch);
if (tdep != NULL)
{
- fprintf_filtered (file, "cris_dump_tdep: tdep->cris_version = %i\n",
- tdep->cris_version);
- fprintf_filtered (file, "cris_dump_tdep: tdep->cris_mode = %s\n",
- tdep->cris_mode);
- fprintf_filtered (file, "cris_dump_tdep: tdep->cris_dwarf2_cfi = %i\n",
- tdep->cris_dwarf2_cfi);
+ gdb_printf (file, "cris_dump_tdep: tdep->cris_version = %i\n",
+ tdep->cris_version);
+ gdb_printf (file, "cris_dump_tdep: tdep->cris_mode = %s\n",
+ tdep->cris_mode);
+ gdb_printf (file, "cris_dump_tdep: tdep->cris_dwarf2_cfi = %i\n",
+ tdep->cris_dwarf2_cfi);
}
}
diff --git a/gdb/csky-tdep.c b/gdb/csky-tdep.c
index cba0065fa53..a9b53916561 100644
--- a/gdb/csky-tdep.c
+++ b/gdb/csky-tdep.c
@@ -61,21 +61,21 @@
/* Control debugging information emitted in this file. */
static bool csky_debug = false;
-static struct reggroup *cr_reggroup;
-static struct reggroup *fr_reggroup;
-static struct reggroup *vr_reggroup;
-static struct reggroup *mmu_reggroup;
-static struct reggroup *prof_reggroup;
+static const reggroup *cr_reggroup;
+static const reggroup *fr_reggroup;
+static const reggroup *vr_reggroup;
+static const reggroup *mmu_reggroup;
+static const reggroup *prof_reggroup;
/* Convenience function to print debug messages in prologue analysis. */
static void
print_savedreg_msg (int regno, int offsets[], bool print_continuing)
{
- fprintf_unfiltered (gdb_stdlog, "csky: r%d saved at offset 0x%x\n",
- regno, offsets[regno]);
+ gdb_printf (gdb_stdlog, "csky: r%d saved at offset 0x%x\n",
+ regno, offsets[regno]);
if (print_continuing)
- fprintf_unfiltered (gdb_stdlog, "csky: continuing\n");
+ gdb_printf (gdb_stdlog, "csky: continuing\n");
}
/* Check whether the instruction at ADDR is 16-bit or not. */
@@ -342,10 +342,10 @@ csky_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
{
if (csky_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "csky: struct return in %s = %s\n",
- gdbarch_register_name (gdbarch, argreg),
- paddress (gdbarch, struct_addr));
+ gdb_printf (gdb_stdlog,
+ "csky: struct return in %s = %s\n",
+ gdbarch_register_name (gdbarch, argreg),
+ paddress (gdbarch, struct_addr));
}
regcache_cooked_write_unsigned (regcache, argreg, struct_addr);
argreg++;
@@ -533,10 +533,10 @@ csky_analyze_prologue (struct gdbarch *gdbarch,
saved (and where). */
if (csky_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "csky: Scanning prologue: start_pc = 0x%x,"
- "limit_pc = 0x%x\n", (unsigned int) start_pc,
- (unsigned int) limit_pc);
+ gdb_printf (gdb_stdlog,
+ "csky: Scanning prologue: start_pc = 0x%x,"
+ "limit_pc = 0x%x\n", (unsigned int) start_pc,
+ (unsigned int) limit_pc);
}
/* Default to 16 bit instruction. */
@@ -557,9 +557,9 @@ csky_analyze_prologue (struct gdbarch *gdbarch,
int offset = CSKY_32_SUBI_IMM (insn);
if (csky_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "csky: got subi sp,%d; continuing\n",
- offset);
+ gdb_printf (gdb_stdlog,
+ "csky: got subi sp,%d; continuing\n",
+ offset);
}
stacksize += offset;
continue;
@@ -583,10 +583,10 @@ csky_analyze_prologue (struct gdbarch *gdbarch,
reg_count = CSKY_32_STM_SIZE (insn);
if (csky_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "csky: got stm r%d-r%d,(sp)\n",
- start_register,
- start_register + reg_count);
+ gdb_printf (gdb_stdlog,
+ "csky: got stm r%d-r%d,(sp)\n",
+ start_register,
+ start_register + reg_count);
}
for (rn = start_register, offset = 0;
@@ -596,15 +596,15 @@ csky_analyze_prologue (struct gdbarch *gdbarch,
register_offsets[rn] = stacksize - offset;
if (csky_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "csky: r%d saved at 0x%x"
- " (offset %d)\n",
- rn, register_offsets[rn],
- offset);
+ gdb_printf (gdb_stdlog,
+ "csky: r%d saved at 0x%x"
+ " (offset %d)\n",
+ rn, register_offsets[rn],
+ offset);
}
}
if (csky_debug)
- fprintf_unfiltered (gdb_stdlog, "csky: continuing\n");
+ gdb_printf (gdb_stdlog, "csky: continuing\n");
continue;
}
/* stw ry,(sp,disp). */
@@ -814,19 +814,19 @@ csky_analyze_prologue (struct gdbarch *gdbarch,
stacksize += num * 4;
if (csky_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "csky: push regs_array: r16-r%d\n",
- 16 + num - 1);
+ gdb_printf (gdb_stdlog,
+ "csky: push regs_array: r16-r%d\n",
+ 16 + num - 1);
}
for (rn = 16; rn <= 16 + num - 1; rn++)
{
register_offsets[rn] = stacksize - tmp;
if (csky_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "csky: r%d saved at 0x%x"
- " (offset %d)\n", rn,
- register_offsets[rn], tmp);
+ gdb_printf (gdb_stdlog,
+ "csky: r%d saved at 0x%x"
+ " (offset %d)\n", rn,
+ register_offsets[rn], tmp);
}
tmp += 4;
}
@@ -845,19 +845,19 @@ csky_analyze_prologue (struct gdbarch *gdbarch,
stacksize += num * 4;
if (csky_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "csky: push regs_array: r4-r%d\n",
- 4 + num - 1);
+ gdb_printf (gdb_stdlog,
+ "csky: push regs_array: r4-r%d\n",
+ 4 + num - 1);
}
for (rn = 4; rn <= 4 + num - 1; rn++)
{
register_offsets[rn] = stacksize - tmp;
if (csky_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "csky: r%d saved at 0x%x"
- " (offset %d)\n", rn,
- register_offsets[rn], tmp);
+ gdb_printf (gdb_stdlog,
+ "csky: r%d saved at 0x%x"
+ " (offset %d)\n", rn,
+ register_offsets[rn], tmp);
}
tmp += 4;
}
@@ -865,7 +865,7 @@ csky_analyze_prologue (struct gdbarch *gdbarch,
framesize = stacksize;
if (csky_debug)
- fprintf_unfiltered (gdb_stdlog, "csky: continuing\n");
+ gdb_printf (gdb_stdlog, "csky: continuing\n");
continue;
}
else if (CSKY_32_IS_LRW4 (insn) || CSKY_32_IS_MOVI4 (insn)
@@ -877,8 +877,8 @@ csky_analyze_prologue (struct gdbarch *gdbarch,
if (csky_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "csky: looking at large frame\n");
+ gdb_printf (gdb_stdlog,
+ "csky: looking at large frame\n");
}
if (CSKY_32_IS_LRW4 (insn))
{
@@ -900,12 +900,12 @@ csky_analyze_prologue (struct gdbarch *gdbarch,
if (csky_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "csky: base stacksize=0x%x\n", adjust);
+ gdb_printf (gdb_stdlog,
+ "csky: base stacksize=0x%x\n", adjust);
/* May have zero or more insns which modify r4. */
- fprintf_unfiltered (gdb_stdlog,
- "csky: looking for r4 adjusters...\n");
+ gdb_printf (gdb_stdlog,
+ "csky: looking for r4 adjusters...\n");
}
offset = 4;
@@ -918,8 +918,8 @@ csky_analyze_prologue (struct gdbarch *gdbarch,
adjust += imm;
if (csky_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "csky: addi r4,%d\n", imm);
+ gdb_printf (gdb_stdlog,
+ "csky: addi r4,%d\n", imm);
}
}
else if (CSKY_32_IS_SUBI4 (insn2))
@@ -928,8 +928,8 @@ csky_analyze_prologue (struct gdbarch *gdbarch,
adjust -= imm;
if (csky_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "csky: subi r4,%d\n", imm);
+ gdb_printf (gdb_stdlog,
+ "csky: subi r4,%d\n", imm);
}
}
else if (CSKY_32_IS_NOR4 (insn2))
@@ -937,8 +937,8 @@ csky_analyze_prologue (struct gdbarch *gdbarch,
adjust = ~adjust;
if (csky_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "csky: nor r4,r4,r4\n");
+ gdb_printf (gdb_stdlog,
+ "csky: nor r4,r4,r4\n");
}
}
else if (CSKY_32_IS_ROTLI4 (insn2))
@@ -949,8 +949,8 @@ csky_analyze_prologue (struct gdbarch *gdbarch,
adjust |= temp;
if (csky_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "csky: rotli r4,r4,%d\n", imm);
+ gdb_printf (gdb_stdlog,
+ "csky: rotli r4,r4,%d\n", imm);
}
}
else if (CSKY_32_IS_LISI4 (insn2))
@@ -959,8 +959,8 @@ csky_analyze_prologue (struct gdbarch *gdbarch,
adjust <<= imm;
if (csky_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "csky: lsli r4,r4,%d\n", imm);
+ gdb_printf (gdb_stdlog,
+ "csky: lsli r4,r4,%d\n", imm);
}
}
else if (CSKY_32_IS_BSETI4 (insn2))
@@ -969,8 +969,8 @@ csky_analyze_prologue (struct gdbarch *gdbarch,
adjust |= (1 << imm);
if (csky_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "csky: bseti r4,r4 %d\n", imm);
+ gdb_printf (gdb_stdlog,
+ "csky: bseti r4,r4 %d\n", imm);
}
}
else if (CSKY_32_IS_BCLRI4 (insn2))
@@ -979,8 +979,8 @@ csky_analyze_prologue (struct gdbarch *gdbarch,
adjust &= ~(1 << imm);
if (csky_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "csky: bclri r4,r4 %d\n", imm);
+ gdb_printf (gdb_stdlog,
+ "csky: bclri r4,r4 %d\n", imm);
}
}
else if (CSKY_32_IS_IXH4 (insn2))
@@ -988,8 +988,8 @@ csky_analyze_prologue (struct gdbarch *gdbarch,
adjust *= 3;
if (csky_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "csky: ixh r4,r4,r4\n");
+ gdb_printf (gdb_stdlog,
+ "csky: ixh r4,r4,r4\n");
}
}
else if (CSKY_32_IS_IXW4 (insn2))
@@ -997,8 +997,8 @@ csky_analyze_prologue (struct gdbarch *gdbarch,
adjust *= 5;
if (csky_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "csky: ixw r4,r4,r4\n");
+ gdb_printf (gdb_stdlog,
+ "csky: ixw r4,r4,r4\n");
}
}
else if (CSKY_16_IS_ADDI4 (insn2))
@@ -1007,8 +1007,8 @@ csky_analyze_prologue (struct gdbarch *gdbarch,
adjust += imm;
if (csky_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "csky: addi r4,%d\n", imm);
+ gdb_printf (gdb_stdlog,
+ "csky: addi r4,%d\n", imm);
}
}
else if (CSKY_16_IS_SUBI4 (insn2))
@@ -1017,8 +1017,8 @@ csky_analyze_prologue (struct gdbarch *gdbarch,
adjust -= imm;
if (csky_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "csky: subi r4,%d\n", imm);
+ gdb_printf (gdb_stdlog,
+ "csky: subi r4,%d\n", imm);
}
}
else if (CSKY_16_IS_NOR4 (insn2))
@@ -1026,8 +1026,8 @@ csky_analyze_prologue (struct gdbarch *gdbarch,
adjust = ~adjust;
if (csky_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "csky: nor r4,r4\n");
+ gdb_printf (gdb_stdlog,
+ "csky: nor r4,r4\n");
}
}
else if (CSKY_16_IS_BSETI4 (insn2))
@@ -1036,8 +1036,8 @@ csky_analyze_prologue (struct gdbarch *gdbarch,
adjust |= (1 << imm);
if (csky_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "csky: bseti r4, %d\n", imm);
+ gdb_printf (gdb_stdlog,
+ "csky: bseti r4, %d\n", imm);
}
}
else if (CSKY_16_IS_BCLRI4 (insn2))
@@ -1046,8 +1046,8 @@ csky_analyze_prologue (struct gdbarch *gdbarch,
adjust &= ~(1 << imm);
if (csky_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "csky: bclri r4, %d\n", imm);
+ gdb_printf (gdb_stdlog,
+ "csky: bclri r4, %d\n", imm);
}
}
else if (CSKY_16_IS_LSLI4 (insn2))
@@ -1056,8 +1056,8 @@ csky_analyze_prologue (struct gdbarch *gdbarch,
adjust <<= imm;
if (csky_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "csky: lsli r4,r4, %d\n", imm);
+ gdb_printf (gdb_stdlog,
+ "csky: lsli r4,r4, %d\n", imm);
}
}
@@ -1067,8 +1067,8 @@ csky_analyze_prologue (struct gdbarch *gdbarch,
if (csky_debug)
{
- fprintf_unfiltered (gdb_stdlog, "csky: done looking for"
- " r4 adjusters\n");
+ gdb_printf (gdb_stdlog, "csky: done looking for"
+ " r4 adjusters\n");
}
/* If the next insn adjusts the stack pointer, we keep
@@ -1080,14 +1080,14 @@ csky_analyze_prologue (struct gdbarch *gdbarch,
stacksize += adjust;
if (csky_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "csky: found stack adjustment of"
- " 0x%x bytes.\n", adjust);
- fprintf_unfiltered (gdb_stdlog,
- "csky: skipping to new address %s\n",
- core_addr_to_string_nz (addr));
- fprintf_unfiltered (gdb_stdlog,
- "csky: continuing\n");
+ gdb_printf (gdb_stdlog,
+ "csky: found stack adjustment of"
+ " 0x%x bytes.\n", adjust);
+ gdb_printf (gdb_stdlog,
+ "csky: skipping to new address %s\n",
+ core_addr_to_string_nz (addr));
+ gdb_printf (gdb_stdlog,
+ "csky: continuing\n");
}
continue;
}
@@ -1096,9 +1096,9 @@ csky_analyze_prologue (struct gdbarch *gdbarch,
anything. */
if (csky_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "csky: no subu sp,sp,r4; NOT altering"
- " stacksize.\n");
+ gdb_printf (gdb_stdlog,
+ "csky: no subu sp,sp,r4; NOT altering"
+ " stacksize.\n");
}
break;
}
@@ -1113,9 +1113,9 @@ csky_analyze_prologue (struct gdbarch *gdbarch,
int offset = CSKY_16_SUBI_IMM (insn);
if (csky_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "csky: got subi r0,%d; continuing\n",
- offset);
+ gdb_printf (gdb_stdlog,
+ "csky: got subi r0,%d; continuing\n",
+ offset);
}
stacksize += offset;
continue;
@@ -1160,19 +1160,19 @@ csky_analyze_prologue (struct gdbarch *gdbarch,
offset += num * 4;
if (csky_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "csky: push regs_array: r4-r%d\n",
- 4 + num - 1);
+ gdb_printf (gdb_stdlog,
+ "csky: push regs_array: r4-r%d\n",
+ 4 + num - 1);
}
for (rn = 4; rn <= 4 + num - 1; rn++)
{
register_offsets[rn] = stacksize - tmp;
if (csky_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "csky: r%d saved at 0x%x"
- " (offset %d)\n", rn,
- register_offsets[rn], offset);
+ gdb_printf (gdb_stdlog,
+ "csky: r%d saved at 0x%x"
+ " (offset %d)\n", rn,
+ register_offsets[rn], offset);
}
tmp += 4;
}
@@ -1180,7 +1180,7 @@ csky_analyze_prologue (struct gdbarch *gdbarch,
framesize = stacksize;
if (csky_debug)
- fprintf_unfiltered (gdb_stdlog, "csky: continuing\n");
+ gdb_printf (gdb_stdlog, "csky: continuing\n");
continue;
}
else if (CSKY_16_IS_LRW4 (insn) || CSKY_16_IS_MOVI4 (insn))
@@ -1190,8 +1190,8 @@ csky_analyze_prologue (struct gdbarch *gdbarch,
if (csky_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "csky: looking at large frame\n");
+ gdb_printf (gdb_stdlog,
+ "csky: looking at large frame\n");
}
if (CSKY_16_IS_LRW4 (insn))
{
@@ -1209,15 +1209,15 @@ csky_analyze_prologue (struct gdbarch *gdbarch,
if (csky_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "csky: base stacksize=0x%x\n", adjust);
+ gdb_printf (gdb_stdlog,
+ "csky: base stacksize=0x%x\n", adjust);
}
/* May have zero or more instructions which modify r4. */
if (csky_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "csky: looking for r4 adjusters...\n");
+ gdb_printf (gdb_stdlog,
+ "csky: looking for r4 adjusters...\n");
}
int offset = 2;
insn_len = csky_get_insn (gdbarch, addr + offset, &insn2);
@@ -1229,8 +1229,8 @@ csky_analyze_prologue (struct gdbarch *gdbarch,
adjust += imm;
if (csky_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "csky: addi r4,%d\n", imm);
+ gdb_printf (gdb_stdlog,
+ "csky: addi r4,%d\n", imm);
}
}
else if (CSKY_32_IS_SUBI4 (insn2))
@@ -1239,8 +1239,8 @@ csky_analyze_prologue (struct gdbarch *gdbarch,
adjust -= imm;
if (csky_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "csky: subi r4,%d\n", imm);
+ gdb_printf (gdb_stdlog,
+ "csky: subi r4,%d\n", imm);
}
}
else if (CSKY_32_IS_NOR4 (insn2))
@@ -1248,8 +1248,8 @@ csky_analyze_prologue (struct gdbarch *gdbarch,
adjust = ~adjust;
if (csky_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "csky: nor r4,r4,r4\n");
+ gdb_printf (gdb_stdlog,
+ "csky: nor r4,r4,r4\n");
}
}
else if (CSKY_32_IS_ROTLI4 (insn2))
@@ -1260,8 +1260,8 @@ csky_analyze_prologue (struct gdbarch *gdbarch,
adjust |= temp;
if (csky_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "csky: rotli r4,r4,%d\n", imm);
+ gdb_printf (gdb_stdlog,
+ "csky: rotli r4,r4,%d\n", imm);
}
}
else if (CSKY_32_IS_LISI4 (insn2))
@@ -1270,8 +1270,8 @@ csky_analyze_prologue (struct gdbarch *gdbarch,
adjust <<= imm;
if (csky_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "csky: lsli r4,r4,%d\n", imm);
+ gdb_printf (gdb_stdlog,
+ "csky: lsli r4,r4,%d\n", imm);
}
}
else if (CSKY_32_IS_BSETI4 (insn2))
@@ -1280,8 +1280,8 @@ csky_analyze_prologue (struct gdbarch *gdbarch,
adjust |= (1 << imm);
if (csky_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "csky: bseti r4,r4 %d\n", imm);
+ gdb_printf (gdb_stdlog,
+ "csky: bseti r4,r4 %d\n", imm);
}
}
else if (CSKY_32_IS_BCLRI4 (insn2))
@@ -1290,8 +1290,8 @@ csky_analyze_prologue (struct gdbarch *gdbarch,
adjust &= ~(1 << imm);
if (csky_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "csky: bclri r4,r4 %d\n", imm);
+ gdb_printf (gdb_stdlog,
+ "csky: bclri r4,r4 %d\n", imm);
}
}
else if (CSKY_32_IS_IXH4 (insn2))
@@ -1299,8 +1299,8 @@ csky_analyze_prologue (struct gdbarch *gdbarch,
adjust *= 3;
if (csky_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "csky: ixh r4,r4,r4\n");
+ gdb_printf (gdb_stdlog,
+ "csky: ixh r4,r4,r4\n");
}
}
else if (CSKY_32_IS_IXW4 (insn2))
@@ -1308,8 +1308,8 @@ csky_analyze_prologue (struct gdbarch *gdbarch,
adjust *= 5;
if (csky_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "csky: ixw r4,r4,r4\n");
+ gdb_printf (gdb_stdlog,
+ "csky: ixw r4,r4,r4\n");
}
}
else if (CSKY_16_IS_ADDI4 (insn2))
@@ -1318,8 +1318,8 @@ csky_analyze_prologue (struct gdbarch *gdbarch,
adjust += imm;
if (csky_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "csky: addi r4,%d\n", imm);
+ gdb_printf (gdb_stdlog,
+ "csky: addi r4,%d\n", imm);
}
}
else if (CSKY_16_IS_SUBI4 (insn2))
@@ -1328,8 +1328,8 @@ csky_analyze_prologue (struct gdbarch *gdbarch,
adjust -= imm;
if (csky_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "csky: subi r4,%d\n", imm);
+ gdb_printf (gdb_stdlog,
+ "csky: subi r4,%d\n", imm);
}
}
else if (CSKY_16_IS_NOR4 (insn2))
@@ -1337,8 +1337,8 @@ csky_analyze_prologue (struct gdbarch *gdbarch,
adjust = ~adjust;
if (csky_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "csky: nor r4,r4\n");
+ gdb_printf (gdb_stdlog,
+ "csky: nor r4,r4\n");
}
}
else if (CSKY_16_IS_BSETI4 (insn2))
@@ -1347,8 +1347,8 @@ csky_analyze_prologue (struct gdbarch *gdbarch,
adjust |= (1 << imm);
if (csky_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "csky: bseti r4, %d\n", imm);
+ gdb_printf (gdb_stdlog,
+ "csky: bseti r4, %d\n", imm);
}
}
else if (CSKY_16_IS_BCLRI4 (insn2))
@@ -1357,8 +1357,8 @@ csky_analyze_prologue (struct gdbarch *gdbarch,
adjust &= ~(1 << imm);
if (csky_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "csky: bclri r4, %d\n", imm);
+ gdb_printf (gdb_stdlog,
+ "csky: bclri r4, %d\n", imm);
}
}
else if (CSKY_16_IS_LSLI4 (insn2))
@@ -1367,8 +1367,8 @@ csky_analyze_prologue (struct gdbarch *gdbarch,
adjust <<= imm;
if (csky_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "csky: lsli r4,r4, %d\n", imm);
+ gdb_printf (gdb_stdlog,
+ "csky: lsli r4,r4, %d\n", imm);
}
}
@@ -1378,8 +1378,8 @@ csky_analyze_prologue (struct gdbarch *gdbarch,
if (csky_debug)
{
- fprintf_unfiltered (gdb_stdlog, "csky: "
- "done looking for r4 adjusters\n");
+ gdb_printf (gdb_stdlog, "csky: "
+ "done looking for r4 adjusters\n");
}
/* If the next instruction adjusts the stack pointer, we keep
@@ -1391,13 +1391,13 @@ csky_analyze_prologue (struct gdbarch *gdbarch,
stacksize += adjust;
if (csky_debug)
{
- fprintf_unfiltered (gdb_stdlog, "csky: "
- "found stack adjustment of 0x%x"
- " bytes.\n", adjust);
- fprintf_unfiltered (gdb_stdlog, "csky: "
- "skipping to new address %s\n",
- core_addr_to_string_nz (addr));
- fprintf_unfiltered (gdb_stdlog, "csky: continuing\n");
+ gdb_printf (gdb_stdlog, "csky: "
+ "found stack adjustment of 0x%x"
+ " bytes.\n", adjust);
+ gdb_printf (gdb_stdlog, "csky: "
+ "skipping to new address %s\n",
+ core_addr_to_string_nz (addr));
+ gdb_printf (gdb_stdlog, "csky: continuing\n");
}
continue;
}
@@ -1406,8 +1406,8 @@ csky_analyze_prologue (struct gdbarch *gdbarch,
anything. */
if (csky_debug)
{
- fprintf_unfiltered (gdb_stdlog, "csky: no subu sp,r4; "
- "NOT altering stacksize.\n");
+ gdb_printf (gdb_stdlog, "csky: no subu sp,r4; "
+ "NOT altering stacksize.\n");
}
break;
}
@@ -1416,8 +1416,8 @@ csky_analyze_prologue (struct gdbarch *gdbarch,
/* This is not a prologue instruction, so stop here. */
if (csky_debug)
{
- fprintf_unfiltered (gdb_stdlog, "csky: insn is not a prologue"
- " insn -- ending scan\n");
+ gdb_printf (gdb_stdlog, "csky: insn is not a prologue"
+ " insn -- ending scan\n");
}
break;
}
@@ -1455,12 +1455,12 @@ csky_analyze_prologue (struct gdbarch *gdbarch,
{
CORE_ADDR rn_value = read_memory_unsigned_integer (
this_cache->saved_regs[rn].addr (), 4, byte_order);
- fprintf_unfiltered (gdb_stdlog, "Saved register %s "
- "stored at 0x%08lx, value=0x%08lx\n",
- csky_register_names[rn],
- (unsigned long)
- this_cache->saved_regs[rn].addr (),
- (unsigned long) rn_value);
+ gdb_printf (gdb_stdlog, "Saved register %s "
+ "stored at 0x%08lx, value=0x%08lx\n",
+ csky_register_names[rn],
+ (unsigned long)
+ this_cache->saved_regs[rn].addr (),
+ (unsigned long) rn_value);
}
}
}
@@ -1526,7 +1526,6 @@ static CORE_ADDR
csky_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
{
CORE_ADDR func_addr, func_end;
- struct symtab_and_line sal;
const int default_search_limit = 128;
/* See if we can find the end of the prologue using the symbol table. */
@@ -1840,13 +1839,13 @@ csky_frame_unwind_cache (struct frame_info *this_frame)
/* Get the (function) symbol matching prologue_start. */
bl = block_for_pc (prologue_start);
if (bl != NULL)
- func_size = bl->endaddr - bl->startaddr;
+ func_size = bl->end () - bl->start ();
else
{
struct bound_minimal_symbol msymbol
= lookup_minimal_symbol_by_pc (prologue_start);
if (msymbol.minsym != NULL)
- func_size = MSYMBOL_SIZE (msymbol.minsym);
+ func_size = msymbol.minsym->size ();
}
/* If FUNC_SIZE is 0 we may have a special-case use of lr
@@ -2051,8 +2050,6 @@ csky_init_reggroup ()
static void
csky_add_reggroups (struct gdbarch *gdbarch)
{
- reggroup_add (gdbarch, all_reggroup);
- reggroup_add (gdbarch, general_reggroup);
reggroup_add (gdbarch, cr_reggroup);
reggroup_add (gdbarch, fr_reggroup);
reggroup_add (gdbarch, vr_reggroup);
@@ -2064,7 +2061,7 @@ csky_add_reggroups (struct gdbarch *gdbarch)
static int
csky_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
- struct reggroup *reggroup)
+ const struct reggroup *reggroup)
{
int raw_p;
diff --git a/gdb/ctfread.c b/gdb/ctfread.c
index 0a96520411f..828f300d29d 100644
--- a/gdb/ctfread.c
+++ b/gdb/ctfread.c
@@ -329,8 +329,8 @@ set_symbol_address (struct objfile *of, struct symbol *sym, const char *name)
msym = lookup_minimal_symbol (name, nullptr, of);
if (msym.minsym != NULL)
{
- SET_SYMBOL_VALUE_ADDRESS (sym, BMSYMBOL_VALUE_ADDRESS (msym));
- SYMBOL_ACLASS_INDEX (sym) = LOC_STATIC;
+ sym->set_value_address (msym.value_address ());
+ sym->set_aclass_index (LOC_STATIC);
sym->set_section_index (msym.minsym->section_index ());
}
}
@@ -450,9 +450,9 @@ ctf_add_enum_member_cb (const char *name, int enum_value, void *arg)
sym->set_language (language_c, &ccp->of->objfile_obstack);
sym->compute_and_set_names (name, false, ccp->of->per_bfd);
- SYMBOL_ACLASS_INDEX (sym) = LOC_CONST;
- SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
- SYMBOL_TYPE (sym) = fip->ptype;
+ sym->set_aclass_index (LOC_CONST);
+ sym->set_domain (VAR_DOMAIN);
+ sym->set_type (fip->ptype);
add_symbol_to_list (sym, ccp->builder->get_global_symbols ());
}
@@ -479,11 +479,11 @@ new_symbol (struct ctf_context *ccp, struct type *type, ctf_id_t tid)
sym->set_language (language_c, &objfile->objfile_obstack);
sym->compute_and_set_names (name, false, objfile->per_bfd);
- SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
- SYMBOL_ACLASS_INDEX (sym) = LOC_OPTIMIZED_OUT;
+ sym->set_domain (VAR_DOMAIN);
+ sym->set_aclass_index (LOC_OPTIMIZED_OUT);
if (type != nullptr)
- SYMBOL_TYPE (sym) = type;
+ sym->set_type (type);
uint32_t kind = ctf_type_kind (fp, tid);
switch (kind)
@@ -491,22 +491,22 @@ new_symbol (struct ctf_context *ccp, struct type *type, ctf_id_t tid)
case CTF_K_STRUCT:
case CTF_K_UNION:
case CTF_K_ENUM:
- SYMBOL_ACLASS_INDEX (sym) = LOC_TYPEDEF;
- SYMBOL_DOMAIN (sym) = STRUCT_DOMAIN;
+ sym->set_aclass_index (LOC_TYPEDEF);
+ sym->set_domain (STRUCT_DOMAIN);
break;
case CTF_K_FUNCTION:
- SYMBOL_ACLASS_INDEX (sym) = LOC_STATIC;
+ sym->set_aclass_index (LOC_STATIC);
set_symbol_address (objfile, sym, sym->linkage_name ());
break;
case CTF_K_CONST:
- if (SYMBOL_TYPE (sym)->code () == TYPE_CODE_VOID)
- SYMBOL_TYPE (sym) = objfile_type (objfile)->builtin_int;
+ if (sym->type ()->code () == TYPE_CODE_VOID)
+ sym->set_type (objfile_type (objfile)->builtin_int);
break;
case CTF_K_TYPEDEF:
case CTF_K_INTEGER:
case CTF_K_FLOAT:
- SYMBOL_ACLASS_INDEX (sym) = LOC_TYPEDEF;
- SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
+ sym->set_aclass_index (LOC_TYPEDEF);
+ sym->set_domain (VAR_DOMAIN);
break;
case CTF_K_POINTER:
break;
@@ -1169,9 +1169,9 @@ ctf_add_var_cb (const char *name, ctf_id_t id, void *arg)
}
sym = new (&ccp->of->objfile_obstack) symbol;
OBJSTAT (ccp->of, n_syms++);
- SYMBOL_TYPE (sym) = type;
- SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
- SYMBOL_ACLASS_INDEX (sym) = LOC_OPTIMIZED_OUT;
+ sym->set_type (type);
+ sym->set_domain (VAR_DOMAIN);
+ sym->set_aclass_index (LOC_OPTIMIZED_OUT);
sym->compute_and_set_names (name, false, ccp->of->per_bfd);
add_symbol_to_list (sym, ccp->builder->get_file_symbols ());
break;
@@ -1205,9 +1205,9 @@ add_stt_entries (struct ctf_context *ccp, int functions)
continue;
sym = new (&ccp->of->objfile_obstack) symbol;
OBJSTAT (ccp->of, n_syms++);
- SYMBOL_TYPE (sym) = type;
- SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
- SYMBOL_ACLASS_INDEX (sym) = LOC_STATIC;
+ sym->set_type (type);
+ sym->set_domain (VAR_DOMAIN);
+ sym->set_aclass_index (LOC_STATIC);
sym->compute_and_set_names (tname, false, ccp->of->per_bfd);
add_symbol_to_list (sym, ccp->builder->get_global_symbols ());
set_symbol_address (ccp->of, sym, tname);
@@ -1246,14 +1246,14 @@ get_objfile_text_range (struct objfile *of, int *tsize)
/* Start a symtab for OBJFILE in CTF format. */
static void
-ctf_start_symtab (ctf_psymtab *pst,
- struct objfile *of, CORE_ADDR text_offset)
+ctf_start_compunit_symtab (ctf_psymtab *pst,
+ struct objfile *of, CORE_ADDR text_offset)
{
struct ctf_context *ccp;
ccp = &pst->context;
ccp->builder = new buildsym_compunit
- (of, of->original_name, nullptr,
+ (of, pst->filename, nullptr,
language_c, text_offset);
ccp->builder->record_debugformat ("ctf");
}
@@ -1263,14 +1263,14 @@ ctf_start_symtab (ctf_psymtab *pst,
the .text section number. */
static struct compunit_symtab *
-ctf_end_symtab (ctf_psymtab *pst,
- CORE_ADDR end_addr, int section)
+ctf_end_compunit_symtab (ctf_psymtab *pst,
+ CORE_ADDR end_addr, int section)
{
struct ctf_context *ccp;
ccp = &pst->context;
struct compunit_symtab *result
- = ccp->builder->end_symtab (end_addr, section);
+ = ccp->builder->end_compunit_symtab (end_addr, section);
delete ccp->builder;
ccp->builder = nullptr;
return result;
@@ -1398,7 +1398,7 @@ ctf_psymtab::read_symtab (struct objfile *objfile)
{
if (info_verbose)
{
- printf_filtered (_("Reading in CTF data for %s..."), filename);
+ gdb_printf (_("Reading in CTF data for %s..."), filename);
gdb_flush (gdb_stdout);
}
@@ -1407,17 +1407,17 @@ ctf_psymtab::read_symtab (struct objfile *objfile)
int tsize;
offset = get_objfile_text_range (objfile, &tsize);
- ctf_start_symtab (this, objfile, offset);
+ ctf_start_compunit_symtab (this, objfile, offset);
expand_psymtab (objfile);
set_text_low (offset);
set_text_high (offset + tsize);
- compunit_symtab = ctf_end_symtab (this, offset + tsize,
- SECT_OFF_TEXT (objfile));
+ compunit_symtab = ctf_end_compunit_symtab (this, offset + tsize,
+ SECT_OFF_TEXT (objfile));
/* Finish up the debug error message. */
if (info_verbose)
- printf_filtered (_("done.\n"));
+ gdb_printf (_("done.\n"));
}
}
@@ -1449,6 +1449,7 @@ create_partial_symtab (const char *name,
pst->context.of = objfile;
pst->context.partial_symtabs = partial_symtabs;
pst->context.pst = pst;
+ pst->context.builder = nullptr;
return pst;
}
@@ -1530,21 +1531,6 @@ ctf_psymtab_var_cb (const char *name, ctf_id_t id, void *arg)
return 0;
}
-/* Start a subfile for CTF. FNAME is the name of the archive. */
-
-static void
-ctf_start_archive (struct ctf_context *ccx, struct objfile *of,
- const char *fname)
-{
- if (ccx->builder == nullptr)
- {
- ccx->builder = new buildsym_compunit (of,
- of->original_name, nullptr, language_c, 0);
- ccx->builder->record_debugformat ("ctf");
- }
- ccx->builder->start_subfile (fname);
-}
-
/* Setup partial_symtab's describing each source file for which
debugging information is available. */
@@ -1566,10 +1552,7 @@ scan_partial_symbols (ctf_dict_t *cfp, psymtab_storage *partial_symtabs,
struct ctf_context *ccx = &pst->context;
if (isparent == false)
- {
- ctf_start_archive (ccx, of, fname);
- ccx->pst = pst;
- }
+ ccx->pst = pst;
if (ctf_type_iter (cfp, ctf_psymtab_type_cb, ccx) == CTF_ERR)
complaint (_("ctf_type_iter scan_partial_symbols failed - %s"),
@@ -1601,7 +1584,7 @@ build_ctf_archive_member (ctf_dict_t *ctf, const char *name, void *arg)
if (info_verbose)
{
- printf_filtered (_("Scanning archive member %s..."), name);
+ gdb_printf (_("Scanning archive member %s..."), name);
gdb_flush (gdb_stdout);
}
diff --git a/gdb/d-exp.y b/gdb/d-exp.y
index ef858ecbd4b..027a8fa206d 100644
--- a/gdb/d-exp.y
+++ b/gdb/d-exp.y
@@ -448,7 +448,7 @@ PrimaryExpression:
sym = lookup_symbol (copy.c_str (),
pstate->expression_context_block,
VAR_DOMAIN, &is_a_field_of_this);
- if (sym.symbol && SYMBOL_CLASS (sym.symbol) != LOC_TYPEDEF)
+ if (sym.symbol && sym.symbol->aclass () != LOC_TYPEDEF)
{
if (symbol_read_needs_frame (sym.symbol))
pstate->block_tracker->update (sym);
@@ -1341,9 +1341,9 @@ classify_name (struct parser_state *par_state, const struct block *block)
std::string copy = copy_name (yylval.sval);
sym = lookup_symbol (copy.c_str (), block, VAR_DOMAIN, &is_a_field_of_this);
- if (sym.symbol && SYMBOL_CLASS (sym.symbol) == LOC_TYPEDEF)
+ if (sym.symbol && sym.symbol->aclass () == LOC_TYPEDEF)
{
- yylval.tsym.type = SYMBOL_TYPE (sym.symbol);
+ yylval.tsym.type = sym.symbol->type ();
return TYPENAME;
}
else if (sym.symbol == NULL)
@@ -1355,7 +1355,7 @@ classify_name (struct parser_state *par_state, const struct block *block)
if (sym.symbol != NULL)
{
- yylval.tsym.type = SYMBOL_TYPE (sym.symbol);
+ yylval.tsym.type = sym.symbol->type ();
return TYPENAME;
}
@@ -1388,9 +1388,9 @@ classify_inner_name (struct parser_state *par_state,
if (yylval.ssym.sym.symbol == NULL)
return ERROR;
- if (SYMBOL_CLASS (yylval.ssym.sym.symbol) == LOC_TYPEDEF)
+ if (yylval.ssym.sym.symbol->aclass () == LOC_TYPEDEF)
{
- yylval.tsym.type = SYMBOL_TYPE (yylval.ssym.sym.symbol);
+ yylval.tsym.type = yylval.ssym.sym.symbol->type ();
return TYPENAME;
}
diff --git a/gdb/d-namespace.c b/gdb/d-namespace.c
index 39097e8055c..5af042abb11 100644
--- a/gdb/d-namespace.c
+++ b/gdb/d-namespace.c
@@ -23,7 +23,7 @@
#include "language.h"
#include "namespace.h"
#include "d-lang.h"
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
#include "gdbarch.h"
/* This returns the length of first component of NAME, which should be
@@ -130,7 +130,7 @@ d_lookup_symbol (const struct language_defn *langdef,
if (lang_this.symbol == NULL)
return {};
- type = check_typedef (TYPE_TARGET_TYPE (SYMBOL_TYPE (lang_this.symbol)));
+ type = check_typedef (TYPE_TARGET_TYPE (lang_this.symbol->type ()));
classname = type->name ();
nested = name;
}
@@ -151,7 +151,7 @@ d_lookup_symbol (const struct language_defn *langdef,
return {};
/* Look for a symbol named NESTED in this class. */
- sym = d_lookup_nested_symbol (SYMBOL_TYPE (class_sym.symbol),
+ sym = d_lookup_nested_symbol (class_sym.symbol->type (),
nested.c_str (), block);
}
@@ -491,7 +491,7 @@ d_lookup_symbol_module (const char *scope, const char *name,
if (sym.symbol != NULL)
return sym;
- block = BLOCK_SUPERBLOCK (block);
+ block = block->superblock ();
}
return {};
diff --git a/gdb/darwin-nat-info.c b/gdb/darwin-nat-info.c
index 8d00d6618ca..15a34a9bb50 100644
--- a/gdb/darwin-nat-info.c
+++ b/gdb/darwin-nat-info.c
@@ -54,12 +54,12 @@
} while (0)
#define PRINT_FIELD(structure, field) \
- printf_filtered(_(#field":\t%#lx\n"), (unsigned long) (structure)->field)
+ gdb_printf(_(#field":\t%#lx\n"), (unsigned long) (structure)->field)
#define PRINT_TV_FIELD(structure, field) \
- printf_filtered(_(#field":\t%u.%06u sec\n"), \
- (unsigned) (structure)->field.seconds, \
- (unsigned) (structure)->field.microseconds)
+ gdb_printf(_(#field":\t%u.%06u sec\n"), \
+ (unsigned) (structure)->field.seconds, \
+ (unsigned) (structure)->field.microseconds)
#define task_self mach_task_self
#define task_by_unix_pid task_for_pid
@@ -83,7 +83,7 @@ info_mach_tasks_command (const char *args, int from_tty)
sysctl (sysControl, 3, procInfo, &length, NULL, 0);
count = (length / sizeof (struct kinfo_proc));
- printf_filtered (_("%d processes:\n"), count);
+ gdb_printf (_("%d processes:\n"), count);
for (index = 0; index < count; ++index)
{
kern_return_t result;
@@ -94,15 +94,15 @@ info_mach_tasks_command (const char *args, int from_tty)
&taskPort);
if (KERN_SUCCESS == result)
{
- printf_filtered (_(" %s is %d has task %#x\n"),
- procInfo[index].kp_proc.p_comm,
- procInfo[index].kp_proc.p_pid, taskPort);
+ gdb_printf (_(" %s is %d has task %#x\n"),
+ procInfo[index].kp_proc.p_comm,
+ procInfo[index].kp_proc.p_pid, taskPort);
}
else
{
- printf_filtered (_(" %s is %d unknown task port\n"),
- procInfo[index].kp_proc.p_comm,
- procInfo[index].kp_proc.p_pid);
+ gdb_printf (_(" %s is %d unknown task port\n"),
+ procInfo[index].kp_proc.p_comm,
+ procInfo[index].kp_proc.p_pid);
}
}
@@ -118,7 +118,7 @@ get_task_from_args (const char *args)
if (args == NULL || *args == 0)
{
if (inferior_ptid == null_ptid)
- printf_filtered (_("No inferior running\n"));
+ gdb_printf (_("No inferior running\n"));
darwin_inferior *priv = get_darwin_inferior (current_inferior ());
@@ -129,7 +129,7 @@ get_task_from_args (const char *args)
task = strtoul (args, &eptr, 0);
if (*eptr)
{
- printf_filtered (_("cannot parse task id '%s'\n"), args);
+ gdb_printf (_("cannot parse task id '%s'\n"), args);
return TASK_NULL;
}
return task;
@@ -153,7 +153,7 @@ info_mach_task_command (const char *args, int from_tty)
if (task == TASK_NULL)
return;
- printf_filtered (_("TASK_BASIC_INFO for 0x%x:\n"), task);
+ gdb_printf (_("TASK_BASIC_INFO for 0x%x:\n"), task);
info_count = TASK_BASIC_INFO_COUNT;
result = task_info (task,
TASK_BASIC_INFO,
@@ -165,7 +165,7 @@ info_mach_task_command (const char *args, int from_tty)
PRINT_FIELD (&task_info_data.basic, resident_size);
PRINT_TV_FIELD (&task_info_data.basic, user_time);
PRINT_TV_FIELD (&task_info_data.basic, system_time);
- printf_filtered (_("\nTASK_EVENTS_INFO:\n"));
+ gdb_printf (_("\nTASK_EVENTS_INFO:\n"));
info_count = TASK_EVENTS_INFO_COUNT;
result = task_info (task,
TASK_EVENTS_INFO,
@@ -181,7 +181,7 @@ info_mach_task_command (const char *args, int from_tty)
PRINT_FIELD (&task_info_data.events, cow_faults);
PRINT_FIELD (&task_info_data.events, messages_sent);
PRINT_FIELD (&task_info_data.events, messages_received);
- printf_filtered (_("\nTASK_THREAD_TIMES_INFO:\n"));
+ gdb_printf (_("\nTASK_THREAD_TIMES_INFO:\n"));
info_count = TASK_THREAD_TIMES_INFO_COUNT;
result = task_info (task,
TASK_THREAD_TIMES_INFO,
@@ -211,8 +211,8 @@ info_mach_ports_command (const char *args, int from_tty)
gdb_assert (name_count == type_count);
- printf_filtered (_("Ports for task 0x%x:\n"), task);
- printf_filtered (_("port type\n"));
+ gdb_printf (_("Ports for task 0x%x:\n"), task);
+ gdb_printf (_("port type\n"));
for (index = 0; index < name_count; ++index)
{
mach_port_t port = names[index];
@@ -232,47 +232,47 @@ info_mach_ports_command (const char *args, int from_tty)
{MACH_PORT_TYPE_DEAD_NAME, "dead", MACH_PORT_RIGHT_DEAD_NAME}
};
- printf_filtered (_("%04x: %08x "), port, types[index]);
+ gdb_printf (_("%04x: %08x "), port, types[index]);
for (j = 0; j < sizeof(descrs) / sizeof(*descrs); j++)
if (types[index] & descrs[j].type)
{
mach_port_urefs_t ref;
kern_return_t ret;
- printf_filtered (_(" %s("), descrs[j].name);
+ gdb_printf (_(" %s("), descrs[j].name);
ret = mach_port_get_refs (task, port, descrs[j].right, &ref);
if (ret != KERN_SUCCESS)
- printf_filtered (_("??"));
+ gdb_printf (_("??"));
else
- printf_filtered (_("%u"), ref);
- printf_filtered (_(" refs)"));
+ gdb_printf (_("%u"), ref);
+ gdb_printf (_(" refs)"));
}
if (task == task_self ())
{
if (port == task_self())
- printf_filtered (_(" gdb-task"));
+ gdb_printf (_(" gdb-task"));
else if (port == darwin_host_self)
- printf_filtered (_(" host-self"));
+ gdb_printf (_(" host-self"));
else if (port == darwin_ex_port)
- printf_filtered (_(" gdb-exception"));
+ gdb_printf (_(" gdb-exception"));
else if (port == darwin_port_set)
- printf_filtered (_(" gdb-port_set"));
+ gdb_printf (_(" gdb-port_set"));
else if (inferior_ptid != null_ptid)
{
struct inferior *inf = current_inferior ();
darwin_inferior *priv = get_darwin_inferior (inf);
if (port == priv->task)
- printf_filtered (_(" inferior-task"));
+ gdb_printf (_(" inferior-task"));
else if (port == priv->notify_port)
- printf_filtered (_(" inferior-notify"));
+ gdb_printf (_(" inferior-notify"));
else
{
for (int k = 0; k < priv->exception_info.count; k++)
if (port == priv->exception_info.ports[k])
{
- printf_filtered (_(" inferior-excp-port"));
+ gdb_printf (_(" inferior-excp-port"));
break;
}
@@ -280,8 +280,8 @@ info_mach_ports_command (const char *args, int from_tty)
{
if (port == t->gdb_port)
{
- printf_filtered (_(" inferior-thread for 0x%x"),
- priv->task);
+ gdb_printf (_(" inferior-thread for 0x%x"),
+ priv->task);
break;
}
}
@@ -289,7 +289,7 @@ info_mach_ports_command (const char *args, int from_tty)
}
}
}
- printf_filtered (_("\n"));
+ gdb_printf (_("\n"));
}
vm_deallocate (task_self (), (vm_address_t) names,
@@ -310,18 +310,18 @@ darwin_debug_port_info (task_t task, mach_port_t port)
(task, port, MACH_PORT_RECEIVE_STATUS, (mach_port_info_t)&status, &len);
MACH_CHECK_ERROR (kret);
- printf_filtered (_("Port 0x%lx in task 0x%lx:\n"), (unsigned long) port,
- (unsigned long) task);
- printf_filtered (_(" port set: 0x%x\n"), status.mps_pset);
- printf_filtered (_(" seqno: 0x%x\n"), status.mps_seqno);
- printf_filtered (_(" mscount: 0x%x\n"), status.mps_mscount);
- printf_filtered (_(" qlimit: 0x%x\n"), status.mps_qlimit);
- printf_filtered (_(" msgcount: 0x%x\n"), status.mps_msgcount);
- printf_filtered (_(" sorights: 0x%x\n"), status.mps_sorights);
- printf_filtered (_(" srights: 0x%x\n"), status.mps_srights);
- printf_filtered (_(" pdrequest: 0x%x\n"), status.mps_pdrequest);
- printf_filtered (_(" nsrequest: 0x%x\n"), status.mps_nsrequest);
- printf_filtered (_(" flags: 0x%x\n"), status.mps_flags);
+ gdb_printf (_("Port 0x%lx in task 0x%lx:\n"), (unsigned long) port,
+ (unsigned long) task);
+ gdb_printf (_(" port set: 0x%x\n"), status.mps_pset);
+ gdb_printf (_(" seqno: 0x%x\n"), status.mps_seqno);
+ gdb_printf (_(" mscount: 0x%x\n"), status.mps_mscount);
+ gdb_printf (_(" qlimit: 0x%x\n"), status.mps_qlimit);
+ gdb_printf (_(" msgcount: 0x%x\n"), status.mps_msgcount);
+ gdb_printf (_(" sorights: 0x%x\n"), status.mps_sorights);
+ gdb_printf (_(" srights: 0x%x\n"), status.mps_srights);
+ gdb_printf (_(" pdrequest: 0x%x\n"), status.mps_pdrequest);
+ gdb_printf (_(" nsrequest: 0x%x\n"), status.mps_nsrequest);
+ gdb_printf (_(" flags: 0x%x\n"), status.mps_flags);
}
static void
@@ -352,10 +352,10 @@ info_mach_threads_command (const char *args, int from_tty)
result = task_threads (task, &threads, &thread_count);
MACH_CHECK_ERROR (result);
- printf_filtered (_("Threads in task %#x:\n"), task);
+ gdb_printf (_("Threads in task %#x:\n"), task);
for (i = 0; i < thread_count; ++i)
{
- printf_filtered (_(" %#x\n"), threads[i]);
+ gdb_printf (_(" %#x\n"), threads[i]);
mach_port_deallocate (task_self (), threads[i]);
}
@@ -378,7 +378,7 @@ info_mach_thread_command (const char *args, int from_tty)
CHECK_ARGS (_("Thread"), args);
sscanf (args, "0x%x", &thread);
- printf_filtered (_("THREAD_BASIC_INFO\n"));
+ gdb_printf (_("THREAD_BASIC_INFO\n"));
info_count = THREAD_BASIC_INFO_COUNT;
result = thread_info (thread,
THREAD_BASIC_INFO,
@@ -526,7 +526,7 @@ darwin_debug_regions (task_t task, mach_vm_address_t address, int max)
(vm_region_info_t) &info, &count, &object_name);
if (kret != KERN_SUCCESS)
{
- printf_filtered (_("No memory regions."));
+ gdb_printf (_("No memory regions."));
return;
}
memcpy (&prev_info, &info, sizeof (vm_region_basic_info_data_64_t));
@@ -570,19 +570,19 @@ darwin_debug_regions (task_t task, mach_vm_address_t address, int max)
if (print)
{
- printf_filtered (_("%s-%s %s/%s %s %s %s"),
- paddress (target_gdbarch (), prev_address),
- paddress (target_gdbarch (), prev_address + prev_size),
- unparse_protection (prev_info.protection),
- unparse_protection (prev_info.max_protection),
- unparse_inheritance (prev_info.inheritance),
- prev_info.shared ? _("shrd") : _("priv"),
- prev_info.reserved ? _("reserved") : _("not-rsvd"));
+ gdb_printf (_("%s-%s %s/%s %s %s %s"),
+ paddress (target_gdbarch (), prev_address),
+ paddress (target_gdbarch (), prev_address + prev_size),
+ unparse_protection (prev_info.protection),
+ unparse_protection (prev_info.max_protection),
+ unparse_inheritance (prev_info.inheritance),
+ prev_info.shared ? _("shrd") : _("priv"),
+ prev_info.reserved ? _("reserved") : _("not-rsvd"));
if (nsubregions > 1)
- printf_filtered (_(" (%d sub-rgn)"), nsubregions);
+ gdb_printf (_(" (%d sub-rgn)"), nsubregions);
- printf_filtered (_("\n"));
+ gdb_printf (_("\n"));
prev_address = address;
prev_size = size;
@@ -743,48 +743,48 @@ disp_exception (const darwin_exception_info *info)
{
int i;
- printf_filtered (_("%d exceptions:\n"), info->count);
+ gdb_printf (_("%d exceptions:\n"), info->count);
for (i = 0; i < info->count; i++)
{
exception_mask_t mask = info->masks[i];
- printf_filtered (_("port 0x%04x, behavior: "), info->ports[i]);
+ gdb_printf (_("port 0x%04x, behavior: "), info->ports[i]);
switch (info->behaviors[i])
{
case EXCEPTION_DEFAULT:
- printf_filtered (_("default"));
+ gdb_printf (_("default"));
break;
case EXCEPTION_STATE:
- printf_filtered (_("state"));
+ gdb_printf (_("state"));
break;
case EXCEPTION_STATE_IDENTITY:
- printf_filtered (_("state-identity"));
+ gdb_printf (_("state-identity"));
break;
default:
- printf_filtered (_("0x%x"), info->behaviors[i]);
+ gdb_printf (_("0x%x"), info->behaviors[i]);
}
- printf_filtered (_(", masks:"));
+ gdb_printf (_(", masks:"));
if (mask & EXC_MASK_BAD_ACCESS)
- printf_filtered (_(" BAD_ACCESS"));
+ gdb_printf (_(" BAD_ACCESS"));
if (mask & EXC_MASK_BAD_INSTRUCTION)
- printf_filtered (_(" BAD_INSTRUCTION"));
+ gdb_printf (_(" BAD_INSTRUCTION"));
if (mask & EXC_MASK_ARITHMETIC)
- printf_filtered (_(" ARITHMETIC"));
+ gdb_printf (_(" ARITHMETIC"));
if (mask & EXC_MASK_EMULATION)
- printf_filtered (_(" EMULATION"));
+ gdb_printf (_(" EMULATION"));
if (mask & EXC_MASK_SOFTWARE)
- printf_filtered (_(" SOFTWARE"));
+ gdb_printf (_(" SOFTWARE"));
if (mask & EXC_MASK_BREAKPOINT)
- printf_filtered (_(" BREAKPOINT"));
+ gdb_printf (_(" BREAKPOINT"));
if (mask & EXC_MASK_SYSCALL)
- printf_filtered (_(" SYSCALL"));
+ gdb_printf (_(" SYSCALL"));
if (mask & EXC_MASK_MACH_SYSCALL)
- printf_filtered (_(" MACH_SYSCALL"));
+ gdb_printf (_(" MACH_SYSCALL"));
if (mask & EXC_MASK_RPC_ALERT)
- printf_filtered (_(" RPC_ALERT"));
+ gdb_printf (_(" RPC_ALERT"));
if (mask & EXC_MASK_CRASH)
- printf_filtered (_(" CRASH"));
- printf_filtered (_("\n"));
+ gdb_printf (_(" CRASH"));
+ gdb_printf (_("\n"));
}
}
@@ -801,7 +801,7 @@ info_mach_exceptions_command (const char *args, int from_tty)
if (strcmp (args, "saved") == 0)
{
if (inferior_ptid == null_ptid)
- printf_filtered (_("No inferior running\n"));
+ gdb_printf (_("No inferior running\n"));
darwin_inferior *priv = get_darwin_inferior (current_inferior ());
@@ -825,7 +825,7 @@ info_mach_exceptions_command (const char *args, int from_tty)
struct inferior *inf;
if (inferior_ptid == null_ptid)
- printf_filtered (_("No inferior running\n"));
+ gdb_printf (_("No inferior running\n"));
inf = current_inferior ();
darwin_inferior *priv = get_darwin_inferior (inf);
diff --git a/gdb/darwin-nat.c b/gdb/darwin-nat.c
index d96ce1a6c65..17723656930 100644
--- a/gdb/darwin-nat.c
+++ b/gdb/darwin-nat.c
@@ -169,8 +169,8 @@ inferior_debug (int level, const char *fmt, ...)
return;
va_start (ap, fmt);
- fprintf_unfiltered (gdb_stdlog, _("[%d inferior]: "), getpid ());
- vfprintf_unfiltered (gdb_stdlog, fmt, ap);
+ gdb_printf (gdb_stdlog, _("[%d inferior]: "), getpid ());
+ gdb_vprintf (gdb_stdlog, fmt, ap);
va_end (ap);
}
@@ -459,20 +459,20 @@ darwin_resume_inferior (struct inferior *inf)
static void
darwin_dump_message (mach_msg_header_t *hdr, int disp_body)
{
- fprintf_unfiltered (gdb_stdlog,
- _("message header:\n"));
- fprintf_unfiltered (gdb_stdlog,
- _(" bits: 0x%x\n"), hdr->msgh_bits);
- fprintf_unfiltered (gdb_stdlog,
- _(" size: 0x%x\n"), hdr->msgh_size);
- fprintf_unfiltered (gdb_stdlog,
- _(" remote-port: 0x%x\n"), hdr->msgh_remote_port);
- fprintf_unfiltered (gdb_stdlog,
- _(" local-port: 0x%x\n"), hdr->msgh_local_port);
- fprintf_unfiltered (gdb_stdlog,
- _(" reserved: 0x%x\n"), hdr->msgh_reserved);
- fprintf_unfiltered (gdb_stdlog,
- _(" id: 0x%x\n"), hdr->msgh_id);
+ gdb_printf (gdb_stdlog,
+ _("message header:\n"));
+ gdb_printf (gdb_stdlog,
+ _(" bits: 0x%x\n"), hdr->msgh_bits);
+ gdb_printf (gdb_stdlog,
+ _(" size: 0x%x\n"), hdr->msgh_size);
+ gdb_printf (gdb_stdlog,
+ _(" remote-port: 0x%x\n"), hdr->msgh_remote_port);
+ gdb_printf (gdb_stdlog,
+ _(" local-port: 0x%x\n"), hdr->msgh_local_port);
+ gdb_printf (gdb_stdlog,
+ _(" reserved: 0x%x\n"), hdr->msgh_reserved);
+ gdb_printf (gdb_stdlog,
+ _(" id: 0x%x\n"), hdr->msgh_id);
if (disp_body)
{
@@ -491,24 +491,24 @@ darwin_dump_message (mach_msg_header_t *hdr, int disp_body)
(mach_msg_port_descriptor_t *)(bod + 1);
int k;
NDR_record_t *ndr;
- fprintf_unfiltered (gdb_stdlog,
- _("body: descriptor_count=%u\n"),
- bod->msgh_descriptor_count);
+ gdb_printf (gdb_stdlog,
+ _("body: descriptor_count=%u\n"),
+ bod->msgh_descriptor_count);
data += sizeof (mach_msg_body_t);
size -= sizeof (mach_msg_body_t);
for (k = 0; k < bod->msgh_descriptor_count; k++)
switch (desc[k].type)
{
case MACH_MSG_PORT_DESCRIPTOR:
- fprintf_unfiltered
+ gdb_printf
(gdb_stdlog,
_(" descr %d: type=%u (port) name=0x%x, dispo=%d\n"),
k, desc[k].type, desc[k].name, desc[k].disposition);
break;
default:
- fprintf_unfiltered (gdb_stdlog,
- _(" descr %d: type=%u\n"),
- k, desc[k].type);
+ gdb_printf (gdb_stdlog,
+ _(" descr %d: type=%u\n"),
+ k, desc[k].type);
break;
}
data += bod->msgh_descriptor_count
@@ -516,7 +516,7 @@ darwin_dump_message (mach_msg_header_t *hdr, int disp_body)
size -= bod->msgh_descriptor_count
* sizeof (mach_msg_port_descriptor_t);
ndr = (NDR_record_t *)(desc + bod->msgh_descriptor_count);
- fprintf_unfiltered
+ gdb_printf
(gdb_stdlog,
_("NDR: mig=%02x if=%02x encod=%02x "
"int=%02x char=%02x float=%02x\n"),
@@ -526,11 +526,11 @@ darwin_dump_message (mach_msg_header_t *hdr, int disp_body)
size -= sizeof (NDR_record_t);
}
- fprintf_unfiltered (gdb_stdlog, _(" data:"));
+ gdb_printf (gdb_stdlog, _(" data:"));
ldata = (const unsigned int *)data;
for (i = 0; i < size / sizeof (unsigned int); i++)
- fprintf_unfiltered (gdb_stdlog, " %08x", ldata[i]);
- fprintf_unfiltered (gdb_stdlog, _("\n"));
+ gdb_printf (gdb_stdlog, " %08x", ldata[i]);
+ gdb_printf (gdb_stdlog, _("\n"));
}
}
@@ -1063,7 +1063,7 @@ darwin_nat_target::decode_message (mach_msg_header_t *hdr,
}
else if (hdr->msgh_id == 0x48)
{
- /* MACH_NOTIFY_DEAD_NAME: notification for exit. */
+ /* MACH_NOTIFY_DEAD_NAME: notification for exit *or* WIFSTOPPED. */
int res;
res = darwin_decode_notify_message (hdr, &inf);
@@ -1103,18 +1103,34 @@ darwin_nat_target::decode_message (mach_msg_header_t *hdr,
return minus_one_ptid;
}
if (WIFEXITED (wstatus))
- status->set_exited (WEXITSTATUS (wstatus));
- else
+ {
+ status->set_exited (WEXITSTATUS (wstatus));
+ inferior_debug (4, _("darwin_wait: pid=%d exit, status=0x%x\n"),
+ res_pid, wstatus);
+ }
+ else if (WIFSTOPPED (wstatus))
+ {
+ /* Ignore stopped state, it will be handled by the next
+ exception. */
+ status->set_ignore ();
+ inferior_debug (4, _("darwin_wait: pid %d received WIFSTOPPED\n"),
+ res_pid);
+ return minus_one_ptid;
+ }
+ else if (WIFSIGNALED (wstatus))
{
status->set_signalled
(gdb_signal_from_host (WTERMSIG (wstatus)));
+ inferior_debug (4, _("darwin_wait: pid=%d received signal %d\n"),
+ res_pid, status->sig());
+ }
+ else
+ {
+ status->set_ignore ();
+ warning (_("Unexpected wait status after MACH_NOTIFY_DEAD_NAME "
+ "notification: 0x%x"), wstatus);
+ return minus_one_ptid;
}
-
- inferior_debug (4, _("darwin_wait: pid=%d exit, status=0x%x\n"),
- res_pid, wstatus);
-
- /* Looks necessary on Leopard and harmless... */
- wait4 (inf->pid, &wstatus, 0, NULL);
return ptid_t (inf->pid);
}
@@ -1777,7 +1793,7 @@ darwin_execvp (const char *file, char * const argv[], char * const env[])
res = posix_spawnattr_init (&attr);
if (res != 0)
{
- fprintf_unfiltered
+ gdb_printf
(gdb_stderr, "Cannot initialize attribute for posix_spawn\n");
return;
}
@@ -1794,7 +1810,7 @@ darwin_execvp (const char *file, char * const argv[], char * const env[])
res = posix_spawnattr_setflags (&attr, ps_flags);
if (res != 0)
{
- fprintf_unfiltered (gdb_stderr, "Cannot set posix_spawn flags\n");
+ gdb_printf (gdb_stderr, "Cannot set posix_spawn flags\n");
return;
}
@@ -1929,11 +1945,11 @@ you \"run\". To prevent these attempts, you can use:\n\
return false;
}
- printf_filtered (_("Note: this version of macOS has System Integrity Protection.\n\
+ gdb_printf (_("Note: this version of macOS has System Integrity Protection.\n\
Because `startup-with-shell' is enabled, gdb has worked around this by\n\
caching a copy of your shell. The shell used by \"run\" is now:\n\
%s\n"),
- new_name.c_str ());
+ new_name.c_str ());
}
/* We need to make sure that the new name has the correct lifetime. */
diff --git a/gdb/data-directory/Makefile.in b/gdb/data-directory/Makefile.in
index 6e219e09efc..b606fc654b5 100644
--- a/gdb/data-directory/Makefile.in
+++ b/gdb/data-directory/Makefile.in
@@ -74,6 +74,7 @@ PYTHON_FILE_LIST = \
gdb/frames.py \
gdb/printing.py \
gdb/prompt.py \
+ gdb/styling.py \
gdb/types.py \
gdb/unwinder.py \
gdb/xmethod.py \
diff --git a/gdb/dbxread.c b/gdb/dbxread.c
index 849ae0133f7..bcf519000bc 100644
--- a/gdb/dbxread.c
+++ b/gdb/dbxread.c
@@ -32,7 +32,7 @@
#include "defs.h"
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
#include <sys/stat.h>
#include "symtab.h"
#include "breakpoint.h"
@@ -1461,23 +1461,33 @@ read_dbx_symtab (minimal_symbol_reader &reader,
switch (p[1])
{
case 'S':
- pst->add_psymbol (gdb::string_view (sym_name, sym_len), true,
- VAR_DOMAIN, LOC_STATIC,
- data_sect_index,
- psymbol_placement::STATIC,
- nlist.n_value, psymtab_language,
- partial_symtabs, objfile);
+ if (pst != nullptr)
+ pst->add_psymbol (gdb::string_view (sym_name, sym_len), true,
+ VAR_DOMAIN, LOC_STATIC,
+ data_sect_index,
+ psymbol_placement::STATIC,
+ nlist.n_value, psymtab_language,
+ partial_symtabs, objfile);
+ else
+ complaint (_("static `%*s' appears to be defined "
+ "outside of all compilation units"),
+ sym_len, sym_name);
continue;
case 'G':
/* The addresses in these entries are reported to be
wrong. See the code that reads 'G's for symtabs. */
- pst->add_psymbol (gdb::string_view (sym_name, sym_len), true,
- VAR_DOMAIN, LOC_STATIC,
- data_sect_index,
- psymbol_placement::GLOBAL,
- nlist.n_value, psymtab_language,
- partial_symtabs, objfile);
+ if (pst != nullptr)
+ pst->add_psymbol (gdb::string_view (sym_name, sym_len), true,
+ VAR_DOMAIN, LOC_STATIC,
+ data_sect_index,
+ psymbol_placement::GLOBAL,
+ nlist.n_value, psymtab_language,
+ partial_symtabs, objfile);
+ else
+ complaint (_("global `%*s' appears to be defined "
+ "outside of all compilation units"),
+ sym_len, sym_name);
continue;
case 'T':
@@ -1491,19 +1501,30 @@ read_dbx_symtab (minimal_symbol_reader &reader,
|| (p == namestring + 1
&& namestring[0] != ' '))
{
- pst->add_psymbol (gdb::string_view (sym_name, sym_len),
- true, STRUCT_DOMAIN, LOC_TYPEDEF, -1,
- psymbol_placement::STATIC,
- 0, psymtab_language,
- partial_symtabs, objfile);
+ if (pst != nullptr)
+ pst->add_psymbol (gdb::string_view (sym_name, sym_len),
+ true, STRUCT_DOMAIN, LOC_TYPEDEF, -1,
+ psymbol_placement::STATIC,
+ 0, psymtab_language,
+ partial_symtabs, objfile);
+ else
+ complaint (_("enum, struct, or union `%*s' appears "
+ "to be defined outside of all "
+ "compilation units"),
+ sym_len, sym_name);
if (p[2] == 't')
{
/* Also a typedef with the same name. */
- pst->add_psymbol (gdb::string_view (sym_name, sym_len),
- true, VAR_DOMAIN, LOC_TYPEDEF, -1,
- psymbol_placement::STATIC,
- 0, psymtab_language,
- partial_symtabs, objfile);
+ if (pst != nullptr)
+ pst->add_psymbol (gdb::string_view (sym_name, sym_len),
+ true, VAR_DOMAIN, LOC_TYPEDEF, -1,
+ psymbol_placement::STATIC,
+ 0, psymtab_language,
+ partial_symtabs, objfile);
+ else
+ complaint (_("typedef `%*s' appears to be defined "
+ "outside of all compilation units"),
+ sym_len, sym_name);
p += 1;
}
}
@@ -1512,11 +1533,16 @@ read_dbx_symtab (minimal_symbol_reader &reader,
case 't':
if (p != namestring) /* a name is there, not just :T... */
{
- pst->add_psymbol (gdb::string_view (sym_name, sym_len),
- true, VAR_DOMAIN, LOC_TYPEDEF, -1,
- psymbol_placement::STATIC,
- 0, psymtab_language,
- partial_symtabs, objfile);
+ if (pst != nullptr)
+ pst->add_psymbol (gdb::string_view (sym_name, sym_len),
+ true, VAR_DOMAIN, LOC_TYPEDEF, -1,
+ psymbol_placement::STATIC,
+ 0, psymtab_language,
+ partial_symtabs, objfile);
+ else
+ complaint (_("typename `%*s' appears to be defined "
+ "outside of all compilation units"),
+ sym_len, sym_name);
}
check_enum:
/* If this is an enumerated type, we need to
@@ -1574,11 +1600,16 @@ read_dbx_symtab (minimal_symbol_reader &reader,
;
/* Note that the value doesn't matter for
enum constants in psymtabs, just in symtabs. */
- pst->add_psymbol (gdb::string_view (p, q - p), true,
- VAR_DOMAIN, LOC_CONST, -1,
- psymbol_placement::STATIC, 0,
- psymtab_language,
- partial_symtabs, objfile);
+ if (pst != nullptr)
+ pst->add_psymbol (gdb::string_view (p, q - p), true,
+ VAR_DOMAIN, LOC_CONST, -1,
+ psymbol_placement::STATIC, 0,
+ psymtab_language,
+ partial_symtabs, objfile);
+ else
+ complaint (_("enum constant `%*s' appears to be defined "
+ "outside of all compilation units"),
+ ((int) (q - p)), p);
/* Point past the name. */
p = q;
/* Skip over the value. */
@@ -1593,23 +1624,24 @@ read_dbx_symtab (minimal_symbol_reader &reader,
case 'c':
/* Constant, e.g. from "const" in Pascal. */
- pst->add_psymbol (gdb::string_view (sym_name, sym_len), true,
- VAR_DOMAIN, LOC_CONST, -1,
- psymbol_placement::STATIC, 0,
- psymtab_language,
- partial_symtabs, objfile);
+ if (pst != nullptr)
+ pst->add_psymbol (gdb::string_view (sym_name, sym_len), true,
+ VAR_DOMAIN, LOC_CONST, -1,
+ psymbol_placement::STATIC, 0,
+ psymtab_language,
+ partial_symtabs, objfile);
+ else
+ complaint (_("constant `%*s' appears to be defined "
+ "outside of all compilation units"),
+ sym_len, sym_name);
+
continue;
case 'f':
if (! pst)
{
- int name_len = p - namestring;
- char *name = (char *) xmalloc (name_len + 1);
-
- memcpy (name, namestring, name_len);
- name[name_len] = '\0';
- function_outside_compilation_unit_complaint (name);
- xfree (name);
+ std::string name (namestring, (p - namestring));
+ function_outside_compilation_unit_complaint (name.c_str ());
}
/* Kludges for ELF/STABS with Sun ACC. */
last_function_name = namestring;
@@ -1623,7 +1655,7 @@ read_dbx_symtab (minimal_symbol_reader &reader,
pst ? pst->filename : NULL,
objfile);
if (minsym.minsym != NULL)
- nlist.n_value = MSYMBOL_VALUE_RAW_ADDRESS (minsym.minsym);
+ nlist.n_value = minsym.minsym->value_raw_address ();
}
if (pst && textlow_not_set
&& gdbarch_sofun_address_maybe_missing (gdbarch))
@@ -1649,12 +1681,13 @@ read_dbx_symtab (minimal_symbol_reader &reader,
pst->set_text_low (nlist.n_value);
textlow_not_set = 0;
}
- pst->add_psymbol (gdb::string_view (sym_name, sym_len), true,
- VAR_DOMAIN, LOC_BLOCK,
- SECT_OFF_TEXT (objfile),
- psymbol_placement::STATIC,
- nlist.n_value, psymtab_language,
- partial_symtabs, objfile);
+ if (pst != nullptr)
+ pst->add_psymbol (gdb::string_view (sym_name, sym_len), true,
+ VAR_DOMAIN, LOC_BLOCK,
+ SECT_OFF_TEXT (objfile),
+ psymbol_placement::STATIC,
+ nlist.n_value, psymtab_language,
+ partial_symtabs, objfile);
continue;
/* Global functions were ignored here, but now they
@@ -1663,13 +1696,8 @@ read_dbx_symtab (minimal_symbol_reader &reader,
case 'F':
if (! pst)
{
- int name_len = p - namestring;
- char *name = (char *) xmalloc (name_len + 1);
-
- memcpy (name, namestring, name_len);
- name[name_len] = '\0';
- function_outside_compilation_unit_complaint (name);
- xfree (name);
+ std::string name (namestring, (p - namestring));
+ function_outside_compilation_unit_complaint (name.c_str ());
}
/* Kludges for ELF/STABS with Sun ACC. */
last_function_name = namestring;
@@ -1683,7 +1711,7 @@ read_dbx_symtab (minimal_symbol_reader &reader,
pst ? pst->filename : NULL,
objfile);
if (minsym.minsym != NULL)
- nlist.n_value = MSYMBOL_VALUE_RAW_ADDRESS (minsym.minsym);
+ nlist.n_value = minsym.minsym->value_raw_address ();
}
if (pst && textlow_not_set
&& gdbarch_sofun_address_maybe_missing (gdbarch))
@@ -1709,12 +1737,13 @@ read_dbx_symtab (minimal_symbol_reader &reader,
pst->set_text_low (nlist.n_value);
textlow_not_set = 0;
}
- pst->add_psymbol (gdb::string_view (sym_name, sym_len), true,
- VAR_DOMAIN, LOC_BLOCK,
- SECT_OFF_TEXT (objfile),
- psymbol_placement::GLOBAL,
- nlist.n_value, psymtab_language,
- partial_symtabs, objfile);
+ if (pst != nullptr)
+ pst->add_psymbol (gdb::string_view (sym_name, sym_len), true,
+ VAR_DOMAIN, LOC_BLOCK,
+ SECT_OFF_TEXT (objfile),
+ psymbol_placement::GLOBAL,
+ nlist.n_value, psymtab_language,
+ partial_symtabs, objfile);
continue;
/* Two things show up here (hopefully); static symbols of
@@ -1807,12 +1836,12 @@ read_dbx_symtab (minimal_symbol_reader &reader,
(dependencies_used
* sizeof (legacy_psymtab *)));
#ifdef DEBUG_INFO
- fprintf_unfiltered (gdb_stderr,
- "Had to reallocate "
- "dependency list.\n");
- fprintf_unfiltered (gdb_stderr,
- "New dependencies allocated: %d\n",
- dependencies_allocated);
+ gdb_printf (gdb_stderr,
+ "Had to reallocate "
+ "dependency list.\n");
+ gdb_printf (gdb_stderr,
+ "New dependencies allocated: %d\n",
+ dependencies_allocated);
#endif
}
}
@@ -1995,8 +2024,8 @@ dbx_end_psymtab (struct objfile *objfile, psymtab_storage *partial_symtabs,
}
if (minsym.minsym)
- pst->set_text_high (MSYMBOL_VALUE_RAW_ADDRESS (minsym.minsym)
- + MSYMBOL_SIZE (minsym.minsym));
+ pst->set_text_high (minsym.minsym->value_raw_address ()
+ + minsym.minsym->size ());
last_function_name = NULL;
}
@@ -2289,8 +2318,8 @@ read_ofile_symtab (struct objfile *objfile, legacy_psymtab *pst)
if (get_last_source_start_addr () > text_offset)
set_last_source_start_addr (text_offset);
- pst->compunit_symtab = end_symtab (text_offset + text_size,
- SECT_OFF_TEXT (objfile));
+ pst->compunit_symtab = end_compunit_symtab (text_offset + text_size,
+ SECT_OFF_TEXT (objfile));
end_stabs ();
@@ -2338,7 +2367,7 @@ cp_set_block_scope (const struct symbol *symbol,
the pst->section_offsets. All symbols that refer to memory
locations need to be offset by these amounts.
OBJFILE is the object file from which we are reading symbols. It
- is used in end_symtab.
+ is used in end_compunit_symtab.
LANGUAGE is the language of the symtab.
*/
@@ -2546,7 +2575,7 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, const char *name,
patch_subfile_names (get_current_subfile (), name);
break; /* Ignore repeated SOs. */
}
- end_symtab (valu, SECT_OFF_TEXT (objfile));
+ end_compunit_symtab (valu, SECT_OFF_TEXT (objfile));
end_stabs ();
}
@@ -2558,7 +2587,7 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, const char *name,
function_start_offset = 0;
start_stabs ();
- start_symtab (objfile, name, NULL, valu, language);
+ start_compunit_symtab (objfile, name, NULL, valu, language);
record_debugformat ("stabs");
break;
@@ -2762,7 +2791,7 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, const char *name,
= find_stab_function (name, get_last_source_file (),
objfile);
if (minsym.minsym != NULL)
- valu = BMSYMBOL_VALUE_ADDRESS (minsym);
+ valu = minsym.value_address ();
}
/* These addresses are absolute. */
diff --git a/gdb/dcache.c b/gdb/dcache.c
index 13c3e50413b..751c24fca0b 100644
--- a/gdb/dcache.c
+++ b/gdb/dcache.c
@@ -136,7 +136,7 @@ static void
show_dcache_enabled_p (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Deprecated remotecache flag is %s.\n"), value);
+ gdb_printf (file, _("Deprecated remotecache flag is %s.\n"), value);
}
/* Add BLOCK to circular block list BLIST, behind the block at *BLIST.
@@ -554,7 +554,7 @@ dcache_print_line (DCACHE *dcache, int index)
if (dcache == NULL)
{
- printf_filtered (_("No data cache available.\n"));
+ gdb_printf (_("No data cache available.\n"));
return;
}
@@ -569,24 +569,24 @@ dcache_print_line (DCACHE *dcache, int index)
if (!n)
{
- printf_filtered (_("No such cache line exists.\n"));
+ gdb_printf (_("No such cache line exists.\n"));
return;
}
db = (struct dcache_block *) n->value;
- printf_filtered (_("Line %d: address %s [%d hits]\n"),
- index, paddress (target_gdbarch (), db->addr), db->refs);
+ gdb_printf (_("Line %d: address %s [%d hits]\n"),
+ index, paddress (target_gdbarch (), db->addr), db->refs);
for (j = 0; j < dcache->line_size; j++)
{
- printf_filtered ("%02x ", db->data[j]);
+ gdb_printf ("%02x ", db->data[j]);
/* Print a newline every 16 bytes (48 characters). */
if ((j % 16 == 15) && (j != dcache->line_size - 1))
- printf_filtered ("\n");
+ gdb_printf ("\n");
}
- printf_filtered ("\n");
+ gdb_printf ("\n");
}
/* Parse EXP and show the info about DCACHE. */
@@ -604,7 +604,7 @@ dcache_info_1 (DCACHE *dcache, const char *exp)
i = strtol (exp, &linestart, 10);
if (linestart == exp || i < 0)
{
- printf_filtered (_("Usage: info dcache [LINENUMBER]\n"));
+ gdb_printf (_("Usage: info dcache [LINENUMBER]\n"));
return;
}
@@ -612,19 +612,19 @@ dcache_info_1 (DCACHE *dcache, const char *exp)
return;
}
- printf_filtered (_("Dcache %u lines of %u bytes each.\n"),
- dcache_size,
- dcache ? (unsigned) dcache->line_size
- : dcache_line_size);
+ gdb_printf (_("Dcache %u lines of %u bytes each.\n"),
+ dcache_size,
+ dcache ? (unsigned) dcache->line_size
+ : dcache_line_size);
if (dcache == NULL || dcache->ptid == null_ptid)
{
- printf_filtered (_("No data cache available.\n"));
+ gdb_printf (_("No data cache available.\n"));
return;
}
- printf_filtered (_("Contains data for %s\n"),
- target_pid_to_str (dcache->ptid).c_str ());
+ gdb_printf (_("Contains data for %s\n"),
+ target_pid_to_str (dcache->ptid).c_str ());
refcount = 0;
@@ -635,15 +635,15 @@ dcache_info_1 (DCACHE *dcache, const char *exp)
{
struct dcache_block *db = (struct dcache_block *) n->value;
- printf_filtered (_("Line %d: address %s [%d hits]\n"),
- i, paddress (target_gdbarch (), db->addr), db->refs);
+ gdb_printf (_("Line %d: address %s [%d hits]\n"),
+ i, paddress (target_gdbarch (), db->addr), db->refs);
i++;
refcount += db->refs;
n = splay_tree_successor (dcache->tree, n->key);
}
- printf_filtered (_("Cache state: %d active lines, %d hits\n"), i, refcount);
+ gdb_printf (_("Cache state: %d active lines, %d hits\n"), i, refcount);
}
static void
diff --git a/gdb/debug.c b/gdb/debug.c
index 6f9cad0ddd0..b29a6620afe 100644
--- a/gdb/debug.c
+++ b/gdb/debug.c
@@ -30,5 +30,5 @@ int debug_print_depth = 0;
void
debug_vprintf (const char *fmt, va_list ap)
{
- vfprintf_unfiltered (gdb_stdlog, fmt, ap);
+ gdb_vprintf (gdb_stdlog, fmt, ap);
}
diff --git a/gdb/debuginfod-support.c b/gdb/debuginfod-support.c
index 2d227ba4350..92aca018954 100644
--- a/gdb/debuginfod-support.c
+++ b/gdb/debuginfod-support.c
@@ -17,6 +17,7 @@
along with this program. If not, see <http://www.gnu.org/licenses/>. */
#include "defs.h"
+#include "diagnostics.h"
#include <errno.h>
#include "gdbsupport/scoped_fd.h"
#include "debuginfod-support.h"
@@ -71,6 +72,15 @@ debuginfod_debuginfo_query (const unsigned char *build_id,
return scoped_fd (-ENOSYS);
}
+scoped_fd
+debuginfod_exec_query (const unsigned char *build_id,
+ int build_id_len,
+ const char *filename,
+ gdb::unique_xmalloc_ptr<char> *destname)
+{
+ return scoped_fd (-ENOSYS);
+}
+
#define NO_IMPL _("Support for debuginfod is not compiled into GDB.")
#else
@@ -78,12 +88,12 @@ debuginfod_debuginfo_query (const unsigned char *build_id,
struct user_data
{
- user_data (const char *desc, std::string &fname)
+ user_data (const char *desc, const char *fname)
: desc (desc), fname (fname)
{ }
const char * const desc;
- std::string & fname;
+ const char * fname;
ui_out::progress_update progress;
};
@@ -127,14 +137,14 @@ progressfn (debuginfod_client *c, long cur, long total)
string_file styled_fname (current_uiout->can_emit_style_escape ());
fprintf_styled (&styled_fname, file_name_style.style (), "%s",
- data->fname.c_str ());
+ data->fname);
if (check_quit_flag ())
{
current_uiout->do_progress_end (); ///?
- printf_filtered ("Cancelled download of %s %s\n",
- data->desc, styled_fname.c_str ());
+ gdb_printf ("Cancelling download of %s %ps...\n",
+ data->desc, styled_fname.c_str ());
return 1;
}
@@ -189,30 +199,59 @@ get_debuginfod_client ()
static bool
debuginfod_is_enabled ()
{
- const char *urls = getenv (DEBUGINFOD_URLS_ENV_VAR);
+ const char *urls = skip_spaces (getenv (DEBUGINFOD_URLS_ENV_VAR));
- if (urls == nullptr || urls[0] == '\0'
- || debuginfod_enabled == debuginfod_off)
+ if (debuginfod_enabled == debuginfod_off
+ || urls == nullptr
+ || *urls == '\0')
return false;
if (debuginfod_enabled == debuginfod_ask)
{
- int resp = nquery (_("\nThis GDB supports auto-downloading debuginfo " \
- "from the following URLs:\n%s\nEnable debuginfod " \
- "for this session? "),
- urls);
+ gdb_printf (_("\nThis GDB supports auto-downloading debuginfo " \
+ "from the following URLs:\n"));
+
+ gdb::string_view url_view (urls);
+ while (true)
+ {
+ size_t off = url_view.find_first_not_of (' ');
+ if (off == gdb::string_view::npos)
+ break;
+ url_view = url_view.substr (off);
+#if defined (__s390x__)
+ /* g++ 11.2.1 on s390x seems convinced url_view might be of
+ SIZE_MAX length. And so complains because the length of
+ an array can only be PTRDIFF_MAX. */
+ DIAGNOSTIC_PUSH
+ DIAGNOSTIC_IGNORE_STRINGOP_OVERREAD
+#endif
+ off = url_view.find_first_of (' ');
+#if defined (__s390x__)
+ DIAGNOSTIC_POP
+#endif
+ gdb_printf
+ (_(" <%ps>\n"),
+ styled_string (file_name_style.style (),
+ gdb::to_string (url_view.substr (0,
+ off)).c_str ()));
+ if (off == gdb::string_view::npos)
+ break;
+ url_view = url_view.substr (off);
+ }
+
+ int resp = nquery (_("Enable debuginfod for this session? "));
if (!resp)
{
- printf_filtered (_("Debuginfod has been disabled.\nTo make this " \
- "setting permanent, add \'set debuginfod " \
- "enabled off\' to .gdbinit.\n"));
+ gdb_printf (_("Debuginfod has been disabled.\nTo make this " \
+ "setting permanent, add \'set debuginfod " \
+ "enabled off\' to .gdbinit.\n"));
debuginfod_enabled = debuginfod_off;
return false;
}
- printf_filtered (_("Debuginfod has been enabled.\nTo make this " \
- "setting permanent, add \'set debuginfod enabled " \
- "on\' to .gdbinit.\n"));
+ gdb_printf (_("Debuginfod has been enabled.\nTo make this " \
+ "setting permanent, add \'set debuginfod enabled " \
+ "on\' to .gdbinit.\n"));
debuginfod_enabled = debuginfod_on;
}
@@ -229,7 +268,7 @@ print_outcome (user_data &data, int fd)
string_file styled_fname (current_uiout->can_emit_style_escape ());
fprintf_styled (&styled_fname, file_name_style.style (), "%s",
- data.fname.c_str ());
+ data.fname);
if (debuginfod_verbose > 1 && fd >= 0)
{
@@ -241,19 +280,19 @@ print_outcome (user_data &data, int fd)
const char *unit = "";
get_size_and_unit (&size, &unit);
- printf_filtered (_("Retrieved %.02f %s %s %s\n"), size, unit,
- data.desc, styled_fname.c_str ());
+ gdb_printf (_("Retrieved %.02f %s %s %s\n"), size, unit,
+ data.desc, styled_fname.c_str ());
}
else
warning (_("Retrieved %s %s but size cannot be read: %s\n"),
data.desc, styled_fname.c_str (),
safe_strerror (errno));
}
- else if (debuginfod_verbose > 0 && fd < 0 && fd != -ENOENT)
- printf_filtered (_("Download failed: %s. " \
- "Continuing without %s %s.\n"),
- safe_strerror (-fd), data.desc,
- styled_fname.c_str ());
+ else if (fd < 0 && fd != -ENOENT)
+ gdb_printf (_("Download failed: %s. " \
+ "Continuing without %s %s.\n"),
+ safe_strerror (-fd), data.desc,
+ styled_fname.c_str ());
}
/* See debuginfod-support.h */
@@ -273,8 +312,7 @@ debuginfod_source_query (const unsigned char *build_id,
return scoped_fd (-ENOMEM);
char *dname = nullptr;
- std::string fname = srcpath;
- user_data data ("source file", fname);
+ user_data data ("source file", srcpath);
debuginfod_set_user_data (c, &data);
gdb::optional<target_terminal::scoped_restore_terminal_state> term_state;
@@ -315,8 +353,7 @@ debuginfod_debuginfo_query (const unsigned char *build_id,
return scoped_fd (-ENOMEM);
char *dname = nullptr;
- std::string fname = filename;
- user_data data ("separate debug info for", fname);
+ user_data data ("separate debug info for", filename);
debuginfod_set_user_data (c, &data);
gdb::optional<target_terminal::scoped_restore_terminal_state> term_state;
@@ -336,6 +373,48 @@ debuginfod_debuginfo_query (const unsigned char *build_id,
return fd;
}
+
+/* See debuginfod-support.h */
+
+scoped_fd
+debuginfod_exec_query (const unsigned char *build_id,
+ int build_id_len,
+ const char *filename,
+ gdb::unique_xmalloc_ptr<char> *destname)
+{
+ if (!debuginfod_is_enabled ())
+ return scoped_fd (-ENOSYS);
+
+ debuginfod_client *c = get_debuginfod_client ();
+
+ if (c == nullptr)
+ return scoped_fd (-ENOMEM);
+
+ char *dname = nullptr;
+ user_data data ("executable for", filename);
+
+ debuginfod_set_user_data (c, &data);
+ gdb::optional<target_terminal::scoped_restore_terminal_state> term_state;
+ if (target_supports_terminal_ours ())
+ {
+ term_state.emplace ();
+ target_terminal::ours ();
+ }
+
+ scoped_fd fd (debuginfod_find_executable (c, build_id, build_id_len, &dname));
+ debuginfod_set_user_data (c, nullptr);
+
+ if (fd.get () < 0 && fd.get () != -ENOENT)
+ gdb_printf (_("Download failed: %s. " \
+ "Continuing without executable for %ps.\n"),
+ safe_strerror (-fd.get ()),
+ styled_string (file_name_style.style (), filename));
+
+ if (fd.get () >= 0)
+ destname->reset (dname);
+
+ return fd;
+}
#endif
/* Set callback for "set debuginfod enabled". */
@@ -364,9 +443,9 @@ static void
show_debuginfod_enabled (ui_file *file, int from_tty, cmd_list_element *cmd,
const char *value)
{
- fprintf_filtered (file,
- _("Debuginfod functionality is currently set to "
- "\"%s\".\n"), debuginfod_enabled);
+ gdb_printf (file,
+ _("Debuginfod functionality is currently set to "
+ "\"%s\".\n"), debuginfod_enabled);
}
/* Set callback for "set debuginfod urls". */
@@ -407,10 +486,10 @@ show_debuginfod_urls (ui_file *file, int from_tty, cmd_list_element *cmd,
const char *value)
{
if (value[0] == '\0')
- fprintf_filtered (file, _("Debuginfod URLs have not been set.\n"));
+ gdb_printf (file, _("Debuginfod URLs have not been set.\n"));
else
- fprintf_filtered (file, _("Debuginfod URLs are currently set to:\n%s\n"),
- value);
+ gdb_printf (file, _("Debuginfod URLs are currently set to:\n%s\n"),
+ value);
}
/* Show callback for "set debuginfod verbose". */
@@ -419,8 +498,8 @@ static void
show_debuginfod_verbose_command (ui_file *file, int from_tty,
cmd_list_element *cmd, const char *value)
{
- fprintf_filtered (file, _("Debuginfod verbose output is set to %s.\n"),
- value);
+ gdb_printf (file, _("Debuginfod verbose output is set to %s.\n"),
+ value);
}
/* Register debuginfod commands. */
diff --git a/gdb/debuginfod-support.h b/gdb/debuginfod-support.h
index 29e361bb76f..5b1c1cb91f4 100644
--- a/gdb/debuginfod-support.h
+++ b/gdb/debuginfod-support.h
@@ -61,4 +61,21 @@ debuginfod_debuginfo_query (const unsigned char *build_id,
const char *filename,
gdb::unique_xmalloc_ptr<char> *destname);
+/* Query debuginfod servers for an executable file with BUILD_ID.
+ BUILD_ID can be given as a binary blob or a null-terminated string.
+ If given as a binary blob, BUILD_ID_LEN should be the number of bytes.
+ If given as a null-terminated string, BUILD_ID_LEN should be 0.
+
+ FILENAME should be the name or path associated with the executable.
+ It is used for printing messages to the user.
+
+ If the file is successfully retrieved, its path on the local machine
+ is stored in DESTNAME. If GDB is not built with debuginfod, this
+ function returns -ENOSYS. */
+
+extern scoped_fd debuginfod_exec_query (const unsigned char *build_id,
+ int build_id_len,
+ const char *filename,
+ gdb::unique_xmalloc_ptr<char>
+ *destname);
#endif /* DEBUGINFOD_SUPPORT_H */
diff --git a/gdb/defs.h b/gdb/defs.h
index 3fddbe29a6d..99bfdd526ff 100644
--- a/gdb/defs.h
+++ b/gdb/defs.h
@@ -118,9 +118,6 @@ using RequireLongest = gdb::Requires<gdb::Or<std::is_same<T, LONGEST>,
#include "hashtab.h"
-/* * Enable dbx commands if set. */
-extern int dbx_commands;
-
/* * System root path, used to find libraries etc. */
extern std::string gdb_sysroot;
diff --git a/gdb/dictionary.c b/gdb/dictionary.c
index 7a686281475..849d07469cf 100644
--- a/gdb/dictionary.c
+++ b/gdb/dictionary.c
@@ -22,7 +22,7 @@
#include "defs.h"
#include <ctype.h>
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
#include "symtab.h"
#include "buildsym.h"
#include "dictionary.h"
diff --git a/gdb/disasm-flags.h b/gdb/disasm-flags.h
new file mode 100644
index 00000000000..025b6893941
--- /dev/null
+++ b/gdb/disasm-flags.h
@@ -0,0 +1,40 @@
+/* Disassemble flags for GDB.
+
+ Copyright (C) 2002-2022 Free Software Foundation, Inc.
+
+ This file is part of GDB.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#ifndef DISASM_FLAGS_H
+#define DISASM_FLAGS_H
+
+#include "gdbsupport/enum-flags.h"
+
+/* Flags used to control how GDB's disassembler behaves. */
+
+enum gdb_disassembly_flag
+ {
+ DISASSEMBLY_SOURCE_DEPRECATED = (0x1 << 0),
+ DISASSEMBLY_RAW_INSN = (0x1 << 1),
+ DISASSEMBLY_OMIT_FNAME = (0x1 << 2),
+ DISASSEMBLY_FILENAME = (0x1 << 3),
+ DISASSEMBLY_OMIT_PC = (0x1 << 4),
+ DISASSEMBLY_SOURCE = (0x1 << 5),
+ DISASSEMBLY_SPECULATIVE = (0x1 << 6),
+ };
+DEF_ENUM_FLAGS_TYPE (enum gdb_disassembly_flag, gdb_disassembly_flags);
+
+#endif /* DISASM_FLAGS_H */
+
diff --git a/gdb/disasm-selftests.c b/gdb/disasm-selftests.c
index a8943fb3d3a..928d26f7018 100644
--- a/gdb/disasm-selftests.c
+++ b/gdb/disasm-selftests.c
@@ -135,14 +135,14 @@ print_one_insn_test (struct gdbarch *gdbarch)
{
if (run_verbose ())
{
- fprintf_unfiltered (stream (), "%s ",
- gdbarch_bfd_arch_info (arch ())->arch_name);
+ gdb_printf (stream (), "%s ",
+ gdbarch_bfd_arch_info (arch ())->arch_name);
}
int len = gdb_disassembler::print_insn (memaddr);
if (run_verbose ())
- fprintf_unfiltered (stream (), "\n");
+ gdb_printf (stream (), "\n");
return len;
}
diff --git a/gdb/disasm.c b/gdb/disasm.c
index 724040faa92..f2df5ef7bc5 100644
--- a/gdb/disasm.c
+++ b/gdb/disasm.c
@@ -171,7 +171,23 @@ gdb_disassembler::dis_asm_fprintf (void *stream, const char *format, ...)
va_list args;
va_start (args, format);
- vfprintf_filtered ((struct ui_file *) stream, format, args);
+ gdb_vprintf ((struct ui_file *) stream, format, args);
+ va_end (args);
+ /* Something non -ve. */
+ return 0;
+}
+
+/* See disasm.h. */
+
+int
+gdb_disassembler::dis_asm_styled_fprintf (void *stream,
+ enum disassembler_style style,
+ const char *format, ...)
+{
+ va_list args;
+
+ va_start (args, format);
+ gdb_vprintf ((struct ui_file *) stream, format, args);
va_end (args);
/* Something non -ve. */
return 0;
@@ -189,7 +205,7 @@ line_is_less_than (const deprecated_dis_line_entry &mle1,
{
if (mle1.start_pc != mle2.start_pc)
val = mle1.start_pc < mle2.start_pc;
- else
+ else
val = mle1.line < mle2.line;
}
else
@@ -393,10 +409,10 @@ do_mixed_source_and_assembly_deprecated
int num_displayed = 0;
print_source_lines_flags psl_flags = 0;
- gdb_assert (symtab != NULL && SYMTAB_LINETABLE (symtab) != NULL);
+ gdb_assert (symtab != nullptr && symtab->linetable () != nullptr);
- nlines = SYMTAB_LINETABLE (symtab)->nitems;
- le = SYMTAB_LINETABLE (symtab)->item;
+ nlines = symtab->linetable ()->nitems;
+ le = symtab->linetable ()->item;
if (flags & DISASSEMBLY_FILENAME)
psl_flags |= PRINT_SOURCE_LINES_FILENAME;
@@ -535,7 +551,7 @@ do_mixed_source_and_assembly (struct gdbarch *gdbarch,
struct symtab *last_symtab;
int last_line;
- gdb_assert (main_symtab != NULL && SYMTAB_LINETABLE (main_symtab) != NULL);
+ gdb_assert (main_symtab != NULL && main_symtab->linetable () != NULL);
/* First pass: collect the list of all source files and lines.
We do this so that we can only print lines containing code once.
@@ -553,8 +569,8 @@ do_mixed_source_and_assembly (struct gdbarch *gdbarch,
line after the opening brace. We still want to print this opening brace.
first_le is used to implement this. */
- nlines = SYMTAB_LINETABLE (main_symtab)->nitems;
- le = SYMTAB_LINETABLE (main_symtab)->item;
+ nlines = main_symtab->linetable ()->nitems;
+ le = main_symtab->linetable ()->item;
first_le = NULL;
/* Skip all the preceding functions. */
@@ -782,9 +798,13 @@ get_all_disassembler_options (struct gdbarch *gdbarch)
gdb_disassembler::gdb_disassembler (struct gdbarch *gdbarch,
struct ui_file *file,
di_read_memory_ftype read_memory_func)
- : m_gdbarch (gdbarch)
+ : m_gdbarch (gdbarch),
+ m_buffer (!use_ext_lang_colorization_p && disassembler_styling
+ && file->can_emit_style_escape ()),
+ m_dest (file)
{
- init_disassemble_info (&m_di, file, dis_asm_fprintf);
+ init_disassemble_info (&m_di, &m_buffer, dis_asm_fprintf,
+ dis_asm_styled_fprintf);
m_di.flavour = bfd_target_unknown_flavour;
m_di.memory_error_func = dis_asm_memory_error;
m_di.print_address_func = dis_asm_print_address;
@@ -813,14 +833,65 @@ gdb_disassembler::~gdb_disassembler ()
disassemble_free_target (&m_di);
}
+/* See disasm.h. */
+
+bool gdb_disassembler::use_ext_lang_colorization_p = true;
+
+/* See disasm.h. */
+
int
gdb_disassembler::print_insn (CORE_ADDR memaddr,
int *branch_delay_insns)
{
m_err_memaddr.reset ();
+ m_buffer.clear ();
int length = gdbarch_print_insn (arch (), memaddr, &m_di);
+ /* If we have successfully disassembled an instruction, styling is on, we
+ think that the extension language might be able to perform styling for
+ us, and the destination can support styling, then lets call into the
+ extension languages in order to style this output. */
+ if (length > 0 && disassembler_styling
+ && use_ext_lang_colorization_p
+ && m_dest->can_emit_style_escape ())
+ {
+ gdb::optional<std::string> ext_contents;
+ ext_contents = ext_lang_colorize_disasm (m_buffer.string (), arch ());
+ if (ext_contents.has_value ())
+ m_buffer = std::move (*ext_contents);
+ else
+ {
+ /* The extension language failed to add styling to the
+ disassembly output. Set the static flag so that next time we
+ disassemble we don't even bother attempting to use the
+ extension language for styling. */
+ use_ext_lang_colorization_p = false;
+
+ /* The instruction we just disassembled, and the extension
+ languages failed to style, might have otherwise had some
+ minimal styling applied by GDB. To regain that styling we
+ need to recreate m_buffer, but this time with styling support.
+
+ To do this we perform an in-place new, but this time turn on
+ the styling support, then we can re-disassembly the
+ instruction, and gain any minimal styling GDB might add. */
+ gdb_static_assert ((std::is_same<decltype (m_buffer),
+ string_file>::value));
+ gdb_assert (!m_buffer.term_out ());
+ m_buffer.~string_file ();
+ new (&m_buffer) string_file (true);
+ length = gdbarch_print_insn (arch (), memaddr, &m_di);
+ gdb_assert (length > 0);
+ }
+ }
+
+ /* Push any disassemble output to the real destination stream. We do
+ this even if the disassembler reported failure (-1) as the
+ disassembler may have printed something to its output stream. */
+ m_di.fprintf_func (m_dest, "%s", m_buffer.c_str ());
+
+ /* If the disassembler failed then report an appropriate error. */
if (length < 0)
{
if (m_err_memaddr.has_value ())
@@ -850,8 +921,8 @@ gdb_disassembly (struct gdbarch *gdbarch, struct ui_out *uiout,
/* Assume symtab is valid for whole PC range. */
symtab = find_pc_line_symtab (low);
- if (symtab != NULL && SYMTAB_LINETABLE (symtab) != NULL)
- nlines = SYMTAB_LINETABLE (symtab)->nitems;
+ if (symtab != NULL && symtab->linetable () != NULL)
+ nlines = symtab->linetable ()->nitems;
if (!(flags & (DISASSEMBLY_SOURCE_DEPRECATED | DISASSEMBLY_SOURCE))
|| nlines <= 0)
@@ -891,16 +962,36 @@ gdb_insn_length (struct gdbarch *gdbarch, CORE_ADDR addr)
return gdb_print_insn (gdbarch, addr, &null_stream, NULL);
}
-/* fprintf-function for gdb_buffered_insn_length. This function is a
- nop, we don't want to print anything, we just want to compute the
- length of the insn. */
+/* An fprintf-function for use by the disassembler when we know we don't
+ want to print anything. Always returns success. */
static int ATTRIBUTE_PRINTF (2, 3)
-gdb_buffered_insn_length_fprintf (void *stream, const char *format, ...)
+gdb_disasm_null_printf (void *stream, const char *format, ...)
+{
+ return 0;
+}
+
+/* An fprintf-function for use by the disassembler when we know we don't
+ want to print anything, and the disassembler is using style. Always
+ returns success. */
+
+static int ATTRIBUTE_PRINTF (3, 4)
+gdb_disasm_null_styled_printf (void *stream,
+ enum disassembler_style style,
+ const char *format, ...)
{
return 0;
}
+/* See disasm.h. */
+
+void
+init_disassemble_info_for_no_printing (struct disassemble_info *dinfo)
+{
+ init_disassemble_info (dinfo, nullptr, gdb_disasm_null_printf,
+ gdb_disasm_null_styled_printf);
+}
+
/* Initialize a struct disassemble_info for gdb_buffered_insn_length.
Upon return, *DISASSEMBLER_OPTIONS_HOLDER owns the string pointed
to by DI.DISASSEMBLER_OPTIONS. */
@@ -912,7 +1003,7 @@ gdb_buffered_insn_length_init_dis (struct gdbarch *gdbarch,
CORE_ADDR addr,
std::string *disassembler_options_holder)
{
- init_disassemble_info (di, NULL, gdb_buffered_insn_length_fprintf);
+ init_disassemble_info_for_no_printing (di);
/* init_disassemble_info installs buffer_read_memory, etc.
so we don't need to do that here.
@@ -987,7 +1078,7 @@ set_disassembler_options (const char *prospective_options)
valid_options_and_args = gdbarch_valid_disassembler_options (gdbarch);
if (valid_options_and_args == NULL)
{
- fprintf_filtered (gdb_stderr, _("\
+ gdb_printf (gdb_stderr, _("\
'set disassembler-options ...' is not supported on this architecture.\n"));
return;
}
@@ -1023,9 +1114,9 @@ set_disassembler_options (const char *prospective_options)
break;
if (valid_options->name[i] == NULL)
{
- fprintf_filtered (gdb_stderr,
- _("Invalid disassembler option value: '%s'.\n"),
- opt);
+ gdb_printf (gdb_stderr,
+ _("Invalid disassembler option value: '%s'.\n"),
+ opt);
return;
}
}
@@ -1054,22 +1145,22 @@ show_disassembler_options_sfunc (struct ui_file *file, int from_tty,
if (options == NULL)
options = "";
- fprintf_filtered (file, _("The current disassembler options are '%s'\n\n"),
- options);
+ gdb_printf (file, _("The current disassembler options are '%s'\n\n"),
+ options);
valid_options_and_args = gdbarch_valid_disassembler_options (gdbarch);
if (valid_options_and_args == NULL)
{
- fputs_filtered (_("There are no disassembler options available "
- "for this architecture.\n"),
- file);
+ gdb_puts (_("There are no disassembler options available "
+ "for this architecture.\n"),
+ file);
return;
}
valid_options = &valid_options_and_args->options;
- fprintf_filtered (file, _("\
+ gdb_printf (file, _("\
The following disassembler options are supported for use with the\n\
'set disassembler-options OPTION [,OPTION]...' command:\n"));
@@ -1077,7 +1168,7 @@ The following disassembler options are supported for use with the\n\
{
size_t i, max_len = 0;
- fprintf_filtered (file, "\n");
+ gdb_printf (file, "\n");
/* Compute the length of the longest option name. */
for (i = 0; valid_options->name[i] != NULL; i++)
@@ -1092,35 +1183,35 @@ The following disassembler options are supported for use with the\n\
for (i = 0, max_len++; valid_options->name[i] != NULL; i++)
{
- fprintf_filtered (file, " %s", valid_options->name[i]);
+ gdb_printf (file, " %s", valid_options->name[i]);
if (valid_options->arg != NULL && valid_options->arg[i] != NULL)
- fprintf_filtered (file, "%s", valid_options->arg[i]->name);
+ gdb_printf (file, "%s", valid_options->arg[i]->name);
if (valid_options->description[i] != NULL)
{
size_t len = strlen (valid_options->name[i]);
if (valid_options->arg != NULL && valid_options->arg[i] != NULL)
len += strlen (valid_options->arg[i]->name);
- fprintf_filtered (file, "%*c %s", (int) (max_len - len), ' ',
- valid_options->description[i]);
+ gdb_printf (file, "%*c %s", (int) (max_len - len), ' ',
+ valid_options->description[i]);
}
- fprintf_filtered (file, "\n");
+ gdb_printf (file, "\n");
}
}
else
{
size_t i;
- fprintf_filtered (file, " ");
+ gdb_printf (file, " ");
for (i = 0; valid_options->name[i] != NULL; i++)
{
- fprintf_filtered (file, "%s", valid_options->name[i]);
+ gdb_printf (file, "%s", valid_options->name[i]);
if (valid_options->arg != NULL && valid_options->arg[i] != NULL)
- fprintf_filtered (file, "%s", valid_options->arg[i]->name);
+ gdb_printf (file, "%s", valid_options->arg[i]->name);
if (valid_options->name[i + 1] != NULL)
- fprintf_filtered (file, ", ");
- wrap_here (" ");
+ gdb_printf (file, ", ");
+ file->wrap_here (2);
}
- fprintf_filtered (file, "\n");
+ gdb_printf (file, "\n");
}
valid_args = valid_options_and_args->args;
@@ -1130,15 +1221,15 @@ The following disassembler options are supported for use with the\n\
for (i = 0; valid_args[i].name != NULL; i++)
{
- fprintf_filtered (file, _("\n\
+ gdb_printf (file, _("\n\
For the options above, the following values are supported for \"%s\":\n "),
- valid_args[i].name);
+ valid_args[i].name);
for (j = 0; valid_args[i].values[j] != NULL; j++)
{
- fprintf_filtered (file, " %s", valid_args[i].values[j]);
- wrap_here (" ");
+ gdb_printf (file, " %s", valid_args[i].values[j]);
+ file->wrap_here (3);
}
- fprintf_filtered (file, "\n");
+ gdb_printf (file, "\n");
}
}
}
diff --git a/gdb/disasm.h b/gdb/disasm.h
index d739b57d898..7efab7db46c 100644
--- a/gdb/disasm.h
+++ b/gdb/disasm.h
@@ -20,19 +20,7 @@
#define DISASM_H
#include "dis-asm.h"
-#include "gdbsupport/enum-flags.h"
-
-enum gdb_disassembly_flag
- {
- DISASSEMBLY_SOURCE_DEPRECATED = (0x1 << 0),
- DISASSEMBLY_RAW_INSN = (0x1 << 1),
- DISASSEMBLY_OMIT_FNAME = (0x1 << 2),
- DISASSEMBLY_FILENAME = (0x1 << 3),
- DISASSEMBLY_OMIT_PC = (0x1 << 4),
- DISASSEMBLY_SOURCE = (0x1 << 5),
- DISASSEMBLY_SPECULATIVE = (0x1 << 6),
- };
-DEF_ENUM_FLAGS_TYPE (enum gdb_disassembly_flag, gdb_disassembly_flags);
+#include "disasm-flags.h"
struct gdbarch;
struct ui_out;
@@ -82,9 +70,41 @@ private:
non-memory error. */
gdb::optional<CORE_ADDR> m_err_memaddr;
+ /* Disassembler output is built up into this buffer. Whether this
+ string_file is created with styling support or not depends on the
+ value of use_ext_lang_colorization_p, as well as whether disassembler
+ styling in general is turned on, and also, whether *m_dest supports
+ styling or not. */
+ string_file m_buffer;
+
+ /* The stream to which disassembler output will be written. */
+ ui_file *m_dest;
+
+ /* When true, m_buffer will be created without styling support,
+ otherwise, m_buffer will be created with styling support.
+
+ This field will initially be true, but will be set to false if
+ ext_lang_colorize_disasm fails to add styling at any time.
+
+ If the extension language is going to add the styling then m_buffer
+ should be created without styling support, the extension language will
+ then add styling at the end of the disassembly process.
+
+ If the extension language is not going to add the styling, then we
+ create m_buffer with styling support, and GDB will add minimal styling
+ (currently just to addresses and symbols) as it goes. */
+ static bool use_ext_lang_colorization_p;
+
static int dis_asm_fprintf (void *stream, const char *format, ...)
ATTRIBUTE_PRINTF(2,3);
+ /* Print formatted message to STREAM, the content can be styled based on
+ STYLE if desired. */
+ static int dis_asm_styled_fprintf (void *stream,
+ enum disassembler_style style,
+ const char *format, ...)
+ ATTRIBUTE_PRINTF(3,4);
+
static int dis_asm_read_memory (bfd_vma memaddr, gdb_byte *myaddr,
unsigned int len,
struct disassemble_info *info);
@@ -174,4 +194,10 @@ extern char *get_disassembler_options (struct gdbarch *gdbarch);
extern void set_disassembler_options (const char *options);
+/* Setup DINFO with its output function and output stream setup so that
+ nothing is printed while disassembling. */
+
+extern void init_disassemble_info_for_no_printing
+ (struct disassemble_info *dinfo);
+
#endif
diff --git a/gdb/displaced-stepping.c b/gdb/displaced-stepping.c
index 43fc435305e..eac2c5dab94 100644
--- a/gdb/displaced-stepping.c
+++ b/gdb/displaced-stepping.c
@@ -40,7 +40,7 @@ static void
show_debug_displaced (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Displace stepping debugging is %s.\n"), value);
+ gdb_printf (file, _("Displace stepping debugging is %s.\n"), value);
}
displaced_step_prepare_status
@@ -232,7 +232,7 @@ displaced_step_buffers::finish (gdbarch *arch, thread_info *thread,
buffer->saved_copy.data (), len);
displaced_debug_printf ("restored %s %s",
- target_pid_to_str (thread->ptid).c_str (),
+ thread->ptid.to_string ().c_str (),
paddress (arch, buffer->addr));
regcache *rc = get_thread_regcache (thread);
@@ -285,7 +285,7 @@ displaced_step_buffers::restore_in_ptid (ptid_t ptid)
write_memory_ptid (ptid, buffer.addr, buffer.saved_copy.data (), len);
displaced_debug_printf ("restored in ptid %s %s",
- target_pid_to_str (ptid).c_str (),
+ ptid.to_string ().c_str (),
paddress (arch, buffer.addr));
}
}
diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
index 48873aa34fe..38ad2ac32b0 100644
--- a/gdb/doc/gdb.texinfo
+++ b/gdb/doc/gdb.texinfo
@@ -3310,6 +3310,7 @@ remove inferiors from the debugging session use the
@w{@code{remove-inferiors}} command.
@table @code
+@anchor{add_inferior_cli}
@kindex add-inferior
@item add-inferior [ -copies @var{n} ] [ -exec @var{executable} ] [-no-connection ]
Adds @var{n} inferiors to be run using @var{executable} as the
@@ -3629,6 +3630,7 @@ Thread 1 "main" received signal SIGINT, Interrupt.
@end smallexample
@table @code
+@anchor{info_threads}
@kindex info threads
@item info threads @r{[}@var{thread-id-list}@r{]}
@@ -10754,23 +10756,24 @@ letters supported are:
@table @code
@item x
-Regard the bits of the value as an integer, and print the integer in
-hexadecimal.
+Print the binary representation of the value in hexadecimal.
@item d
-Print as integer in signed decimal.
+Print the binary representation of the value in decimal.
@item u
-Print as integer in unsigned decimal.
+Print the binary representation of the value as an decimal, as if it
+were unsigned.
@item o
-Print as integer in octal.
+Print the binary representation of the value in octal.
@item t
-Print as integer in binary. The letter @samp{t} stands for ``two''.
-@footnote{@samp{b} cannot be used because these format letters are also
-used with the @code{x} command, where @samp{b} stands for ``byte'';
-see @ref{Memory,,Examining Memory}.}
+Print the binary representation of the value in binary. The letter
+@samp{t} stands for ``two''. @footnote{@samp{b} cannot be used
+because these format letters are also used with the @code{x} command,
+where @samp{b} stands for ``byte''; see @ref{Memory,,Examining
+Memory}.}
@item a
@cindex unknown address, locating
@@ -10789,10 +10792,11 @@ The command @code{info symbol 0x54320} yields similar results.
@xref{Symbols, info symbol}.
@item c
-Regard as an integer and print it as a character constant. This
-prints both the numerical value and its character representation. The
-character representation is replaced with the octal escape @samp{\nnn}
-for characters outside the 7-bit @sc{ascii} range.
+Cast the value to an integer (unlike other formats, this does not just
+reinterpret the underlying bits) and print it as a character constant.
+This prints both the numerical value and its character representation.
+The character representation is replaced with the octal escape
+@samp{\nnn} for characters outside the 7-bit @sc{ascii} range.
Without this format, @value{GDBN} displays @code{char},
@w{@code{unsigned char}}, and @w{@code{signed char}} data as character
@@ -16888,6 +16892,21 @@ also use the @value{GDBN} command-line word completion facilities to list the
available choices, or to finish the type list for you.
@xref{Completion,, Command Completion}, for details on how to do this.
+@item @r{Breakpoints in template functions}
+
+Similar to how overloaded symbols are handled, @value{GDBN} will ignore
+template parameter lists when it encounters a symbol which includes a
+C@t{++} template. This permits setting breakpoints on families of template functions
+or functions whose parameters include template types.
+
+The @kbd{-qualified} flag may be used to override this behavior, causing
+@value{GDBN} to search for a specific function or type.
+
+The @value{GDBN} command-line word completion facility also understands
+template parameters and may be used to list available choices or finish
+template parameter lists for you. @xref{Completion,, Command Completion}, for
+details on how to do this.
+
@item @r{Breakpoints in functions with ABI tags}
The GNU C@t{++} compiler introduced the notion of ABI ``tags'', which
@@ -17157,8 +17176,8 @@ vector data types.
@subsection Fortran
@cindex Fortran-specific support in @value{GDBN}
-@value{GDBN} can be used to debug programs written in Fortran, but it
-currently supports only the features of Fortran 77 language.
+@value{GDBN} can be used to debug programs written in Fortran. Note, that not
+all Fortran language features are available yet.
@cindex trailing underscore, in Fortran symbols
Some Fortran compilers (@sc{gnu} Fortran 77 and Fortran 95 compilers
@@ -17167,12 +17186,71 @@ functions. When you debug programs compiled by those compilers, you
will need to refer to variables and functions with a trailing
underscore.
+@cindex Fortran Defaults
+Fortran symbols are usually case-insensitive, so @value{GDBN} by
+default uses case-insensitive matching for Fortran symbols. You can
+change that with the @samp{set case-insensitive} command, see
+@ref{Symbols}, for the details.
+
@menu
+* Fortran Types:: Fortran builtin types
* Fortran Operators:: Fortran operators and expressions
-* Fortran Defaults:: Default settings for Fortran
+* Fortran Intrinsics:: Fortran intrinsic functions
* Special Fortran Commands:: Special @value{GDBN} commands for Fortran
@end menu
+@node Fortran Types
+@subsubsection Fortran Types
+
+@cindex Fortran Types
+
+In Fortran the primitive data-types have an associated @code{KIND} type
+parameter, written as @samp{@var{type}*@var{kindparam}},
+@samp{@var{type}*@var{kindparam}}, or in the @value{GDBN}-only dialect
+@samp{@var{type}_@var{kindparam}}. A concrete example would be
+@samp{@code{Real*4}}, @samp{@code{Real(kind=4)}}, and @samp{@code{Real_4}}.
+The kind of a type can be retrieved by using the intrinsic function
+@code{KIND}, see @ref{Fortran Intrinsics}.
+
+Generally, the actual implementation of the @code{KIND} type parameter is
+compiler specific. In @value{GDBN} the kind parameter is implemented in
+accordance with its use in the @sc{gnu} @command{gfortran} compiler. Here, the
+kind parameter for a given @var{type} specifies its size in memory --- a
+Fortran @code{Integer*4} or @code{Integer(kind=4)} would be an integer type
+occupying 4 bytes of memory. An exception to this rule is the @code{Complex}
+type for which the kind of the type does not specify its entire size, but
+the size of each of the two @code{Real}'s it is composed of. A
+@code{Complex*4} would thus consist of two @code{Real*4}s and occupy 8 bytes
+of memory.
+
+For every type there is also a default kind associated with it, e.g.@
+@code{Integer} in @value{GDBN} will internally be an @code{Integer*4} (see the
+table below for default types). The default types are the same as in @sc{gnu}
+compilers but note, that the @sc{gnu} default types can actually be changed by
+compiler flags such as @option{-fdefault-integer-8} and
+@option{-fdefault-real-8}.
+
+Not every kind parameter is valid for every type and in @value{GDBN} the
+following type kinds are available.
+
+@table @code
+@item Integer
+@code{Integer*1}, @code{Integer*2}, @code{Integer*4}, @code{Integer*8}, and
+@code{Integer} = @code{Integer*4}.
+
+@item Logical
+@code{Logical*1}, @code{Logical*2}, @code{Logical*4}, @code{Logical*8}, and
+@code{Logical} = @code{Logical*4}.
+
+@item Real
+@code{Real*4}, @code{Real*8}, @code{Real*16}, and @code{Real} = @code{Real*4}.
+
+@item Complex
+@code{Complex*4}, @code{Complex*8}, @code{Complex*16}, and @code{Complex} =
+@code{Complex*4}.
+
+@end table
+
@node Fortran Operators
@subsubsection Fortran Operators and Expressions
@@ -17202,15 +17280,79 @@ to set breakpoints on subroutines nested in modules or in other
subroutines (internal subroutines).
@end table
-@node Fortran Defaults
-@subsubsection Fortran Defaults
+@node Fortran Intrinsics
+@subsubsection Fortran Intrinsics
-@cindex Fortran Defaults
+@cindex Fortran Intrinsics
-Fortran symbols are usually case-insensitive, so @value{GDBN} by
-default uses case-insensitive matches for Fortran symbols. You can
-change that with the @samp{set case-insensitive} command, see
-@ref{Symbols}, for the details.
+Fortran provides a large set of intrinsic procedures. @value{GDBN} implements
+an incomplete subset of those procedures and their overloads. Some of these
+procedures take an optional @code{KIND} parameter, see @ref{Fortran Types}.
+
+@table @code
+@item ABS(@var{a})
+Computes the absolute value of its argument @var{a}. Currently not supported
+for @code{Complex} arguments.
+
+@item ALLOCATE(@var{array})
+Returns whether @var{array} is allocated or not.
+
+@item ASSOCIATED(@var{pointer} [, @var{target}])
+Returns the association status of the pointer @var{pointer} or, if @var{target}
+is present, whether @var{pointer} is associated with the target @var{target}.
+
+@item CEILING(@var{a} [, @var{kind}])
+Computes the least integer greater than or equal to @var{a}. The optional
+parameter @var{kind} specifies the kind of the return type
+@code{Integer(@var{kind})}.
+
+@item CMPLX(@var{x} [, @var{y} [, @var{kind}]])
+Returns a complex number where @var{x} is converted to the real component. If
+@var{y} is present it is converted to the imaginary component. If @var{y} is
+not present then the imaginary component is set to @code{0.0} except if @var{x}
+itself is of @code{Complex} type. The optional parameter @var{kind} specifies
+the kind of the return type @code{Complex(@var{kind})}.
+
+@item FLOOR(@var{a} [, @var{kind}])
+Computes the greatest integer less than or equal to @var{a}. The optional
+parameter @var{kind} specifies the kind of the return type
+@code{Integer(@var{kind})}.
+
+@item KIND(@var{a})
+Returns the kind value of the argument @var{a}, see @ref{Fortran Types}.
+
+@item LBOUND(@var{array} [, @var{dim} [, @var{kind}]])
+Returns the lower bounds of an @var{array}, or a single lower bound along the
+@var{dim} dimension if present. The optional parameter @var{kind} specifies
+the kind of the return type @code{Integer(@var{kind})}.
+
+@item LOC(@var{x})
+Returns the address of @var{x} as an @code{Integer}.
+
+@item MOD(@var{a}, @var{p})
+Computes the remainder of the division of @var{a} by @var{p}.
+
+@item MODULO(@var{a}, @var{p})
+Computes the @var{a} modulo @var{p}.
+
+@item RANK(@var{a})
+Returns the rank of a scalar or array (scalars have rank @code{0}).
+
+@item SHAPE(@var{a})
+Returns the shape of a scalar or array (scalars have shape @samp{()}).
+
+@item SIZE(@var{array}[, @var{dim} [, @var{kind}]])
+Returns the extent of @var{array} along a specified dimension @var{dim}, or the
+total number of elements in @var{array} if @var{dim} is absent. The optional
+parameter @var{kind} specifies the kind of the return type
+@code{Integer(@var{kind})}.
+
+@item UBOUND(@var{array} [, @var{dim} [, @var{kind}]])
+Returns the upper bounds of an @var{array}, or a single upper bound along the
+@var{dim} dimension if present. The optional parameter @var{kind} specifies
+the kind of the return type @code{Integer(@var{kind})}.
+
+@end table
@node Special Fortran Commands
@subsubsection Special Fortran Commands
@@ -17995,7 +18137,7 @@ to be difficult.
* Ada Tasks and Core Files:: Tasking Support when Debugging Core Files
* Ravenscar Profile:: Tasking Support when using the Ravenscar
Profile
-* Ada Settings:: New settable GDB parameters for Ada.
+* Ada Source Character Set:: Character set of Ada source files.
* Ada Glitches:: Known peculiarities of Ada mode.
@end menu
@@ -18074,10 +18216,7 @@ operand of the membership (@code{in}) operator.
@end itemize
@item
-The names in
-@code{Characters.Latin_1} are not available and
-concatenation is not implemented. Thus, escape characters in strings are
-not currently available.
+The names in @code{Characters.Latin_1} are not available.
@item
Equality tests (@samp{=} and @samp{/=}) on arrays test for bitwise
@@ -18173,6 +18312,9 @@ context.
Should your program
redefine these names in a package or procedure (at best a dubious practice),
you will have to use fully qualified names to access their new definitions.
+
+@item
+Based real literals are not implemented.
@end itemize
@node Additions to Ada
@@ -18231,6 +18373,19 @@ complex conditional breaks:
(@value{GDBP}) condition 1 (report(i); k += 1; A(k) > 100)
@end smallexample
+@item
+An extension to based literals can be used to specify the exact byte
+contents of a floating-point literal. After the base, you can use
+from zero to two @samp{l} characters, followed by an @samp{f}. The
+number of @samp{l} characters controls the width of the resulting real
+constant: zero means @code{Float} is used, one means
+@code{Long_Float}, and two means @code{Long_Long_Float}.
+
+@smallexample
+(@value{GDBP}) print 16f#41b80000#
+$1 = 23.0
+@end smallexample
+
@item
Rather than use catenation and symbolic character names to introduce special
characters into strings, one may instead use a special bracket notation,
@@ -18715,35 +18870,26 @@ it isn't currently possible to single-step through the runtime
initialization sequence. If you need to debug this code, you should
use @code{set ravenscar task-switching off}.
-@node Ada Settings
-@subsubsection Ada Settings
-@cindex Ada settings
-
-@table @code
-@kindex set varsize-limit
-@item set varsize-limit @var{size}
-Prevent @value{GDBN} from attempting to evaluate objects whose size
-is above the given limit (@var{size}) when those sizes are computed
-from run-time quantities. This is typically the case when the object
-has a variable size, such as an array whose bounds are not known at
-compile time for example. Setting @var{size} to @code{unlimited}
-removes the size limitation. By default, the limit is about 65KB.
-
-The purpose of having such a limit is to prevent @value{GDBN} from
-trying to grab enormous chunks of virtual memory when asked to evaluate
-a quantity whose bounds have been corrupted or have not yet been fully
-initialized. The limit applies to the results of some subexpressions
-as well as to complete expressions. For example, an expression denoting
-a simple integer component, such as @code{x.y.z}, may fail if the size of
-@code{x.y} is variable and exceeds @code{size}. On the other hand,
-@value{GDBN} is sometimes clever; the expression @code{A(i)}, where
-@code{A} is an array variable with non-constant size, will generally
-succeed regardless of the bounds on @code{A}, as long as the component
-size is less than @var{size}.
-
-@kindex show varsize-limit
-@item show varsize-limit
-Show the limit on types whose size is determined by run-time quantities.
+@node Ada Source Character Set
+@subsubsection Ada Source Character Set
+@cindex Ada, source character set
+
+The GNAT compiler supports a number of character sets for source
+files. @xref{Character Set Control, , Character Set Control,
+gnat_ugn}. @value{GDBN} includes support for this as well.
+
+@table @code
+@item set ada source-charset @var{charset}
+@kindex set ada source-charset
+Set the source character set for Ada. The character set must be
+supported by GNAT. Because this setting affects the decoding of
+symbols coming from the debug information in your program, the setting
+should be set as early as possible. The default is @code{ISO-8859-1},
+because that is also GNAT's default.
+
+@item show ada source-charset
+@kindex show ada source-charset
+Show the current source character set for Ada.
@end table
@node Ada Glitches
@@ -19739,6 +19885,33 @@ line 1574.
List the @code{struct linetable} from all @code{struct symtab}
instances whose name matches @var{regexp}. If @var{regexp} is not
given, list the @code{struct linetable} from all @code{struct symtab}.
+For example:
+
+@smallexample
+(@value{GDBP}) maint info line-table
+objfile: /home/gnu/build/a.out ((struct objfile *) 0x6120000e0d40)
+compunit_symtab: simple.cpp ((struct compunit_symtab *) 0x6210000ff450)
+symtab: /home/gnu/src/simple.cpp ((struct symtab *) 0x6210000ff4d0)
+linetable: ((struct linetable *) 0x62100012b760):
+INDEX LINE ADDRESS IS-STMT PROLOGUE-END
+0 3 0x0000000000401110 Y
+1 4 0x0000000000401114 Y Y
+2 9 0x0000000000401120 Y
+3 10 0x0000000000401124 Y Y
+4 10 0x0000000000401129
+5 15 0x0000000000401130 Y
+6 16 0x0000000000401134 Y Y
+7 16 0x0000000000401139
+8 21 0x0000000000401140 Y
+9 22 0x000000000040114f Y Y
+10 22 0x0000000000401154
+11 END 0x000000000040115a Y
+@end smallexample
+@noindent
+The @samp{IS-STMT} column indicates if the address is a recommended breakpoint
+location to represent a line or a statement. The @samp{PROLOGUE-END} column
+indicates that a given address is an adequate place to set a breakpoint at the
+first instruction following a function prologue.
@kindex maint set symbol-cache-size
@cindex symbol cache size
@@ -19775,6 +19948,19 @@ when collecting performance data. The command @code{maint
flush-symbol-cache} is deprecated in favor of @code{maint flush
symbol-cache}..
+@kindex maint set ignore-prologue-end-flag
+@cindex prologue-end
+@item maint set ignore-prologue-end-flag [on|off]
+Enable or disable the use of the @samp{PROLOGUE-END} flag from the line-table.
+When @samp{off} (the default), @value{GDBN} uses the @samp{PROLOGUE-END} flag
+to place breakpoints past the end of a function prologue. When @samp{on},
+@value{GDBN} ignores the flag and relies on prologue analyzers to skip function
+prologues.
+
+@kindex maint show ignore-prologue-end-flag
+@item maint show ignore-prologue-end-flag
+Show whether @value{GDBN} will ignore the @samp{PROLOGUE-END} flag.
+
@end table
@node Altering
@@ -24947,6 +25133,16 @@ of @samp{set arm fallback-mode}.
@item show arm force-mode
Show the current forced instruction mode.
+@item set arm unwind-secure-frames
+This command enables unwinding from Non-secure to Secure mode on
+Cortex-M with Security extension.
+This can trigger security exceptions when unwinding the exception
+stack.
+It is enabled by default.
+
+@item show arm unwind-secure-frames
+Show whether unwinding from Non-secure to Secure mode is enabled.
+
@item set debug arm
Toggle whether to display ARM-specific debugging messages from the ARM
target support subsystem.
@@ -25314,6 +25510,7 @@ target process.
@subsubsection AArch64 Pointer Authentication.
@cindex AArch64 Pointer Authentication.
+@anchor{AArch64 PAC}
When @value{GDBN} is debugging the AArch64 architecture, and the program is
using the v8.3-A feature Pointer Authentication (PAC), then whenever the link
@@ -26132,6 +26329,21 @@ then it will be used.
@item show style sources
Show the current state of source code styling.
+
+@item set style disassembler enabled @samp{on|off}
+Enable or disable disassembler styling. This affects whether
+disassembler output, such as the output of the @code{disassemble}
+command, is styled. Disassembler styling only works if styling in
+general is enabled (with @code{set style enabled on}), and if a source
+highlighting library is available to @value{GDBN}.
+
+To highlight disassembler output, @value{GDBN} must be compiled with
+Python support, and the Python Pygments package must be available. If
+these requirements are not met then @value{GDBN} will not highlight
+disassembler output, even when this option is @samp{on}.
+
+@item show style disassembler enabled
+Show the current state of disassembler styling.
@end table
Subcommands of @code{set style} control specific forms of styling.
@@ -26168,7 +26380,7 @@ their characteristics and the visual aspect of each style.
The style-able objects are:
@table @code
@item filename
-Control the styling of file names. By default, this style's
+Control the styling of file names and URLs. By default, this style's
foreground color is green.
@item function
@@ -27028,12 +27240,12 @@ Turn on or off debugging messages from JIT debug support.
@item show debug jit
Displays the current state of @value{GDBN} JIT debugging.
-@item set debug lin-lwp
-@cindex @sc{gnu}/Linux LWP debug messages
-@cindex Linux lightweight processes
-Turn on or off debugging messages from the Linux LWP debug support.
-@item show debug lin-lwp
-Show the current state of Linux LWP debugging messages.
+@item set debug linux-nat @r{[}on@r{|}off@r{]}
+@cindex @sc{gnu}/Linux native target debug messages
+@cindex Linux native targets
+Turn on or off debugging messages from the Linux native target debug support.
+@item show debug linux-nat
+Show the current state of Linux native target debugging messages.
@item set debug linux-namespaces
@cindex @sc{gnu}/Linux namespaces debug messages
@@ -27211,6 +27423,75 @@ inside a cygwin window.
Displays whether the debugger is operating in interactive mode or not.
@end table
+@table @code
+@kindex set suppress-cli-notifications
+@item set suppress-cli-notifications
+If @code{on}, command-line-interface (CLI) notifications that are
+printed by @value{GDBN} are suppressed. If @code{off}, the
+notifications are printed as usual. The default value is @code{off}.
+CLI notifications occur when you change the selected context or when
+the program being debugged stops, as detailed below.
+
+@table @emph
+@item User-selected context changes:
+When you change the selected context (i.e.@: the current inferior,
+thread and/or the frame), @value{GDBN} prints information about the
+new context. For example, the default behavior is below:
+
+@smallexample
+(gdb) inferior 1
+[Switching to inferior 1 [process 634] (/tmp/test)]
+[Switching to thread 1 (process 634)]
+#0 main () at test.c:3
+3 return 0;
+(gdb)
+@end smallexample
+
+When the notifications are suppressed, the new context is not printed:
+
+@smallexample
+(gdb) set suppress-cli-notifications on
+(gdb) inferior 1
+(gdb)
+@end smallexample
+
+@item The program being debugged stops:
+When the program you are debugging stops (e.g.@: because of hitting a
+breakpoint, completing source-stepping, an interrupt, etc.),
+@value{GDBN} prints information about the stop event. For example,
+below is a breakpoint hit:
+
+@smallexample
+(gdb) break test.c:3
+Breakpoint 2 at 0x555555555155: file test.c, line 3.
+(gdb) continue
+Continuing.
+
+Breakpoint 2, main () at test.c:3
+3 return 0;
+(gdb)
+@end smallexample
+
+When the notifications are suppressed, the output becomes:
+
+@smallexample
+(gdb) break test.c:3
+Breakpoint 2 at 0x555555555155: file test.c, line 3.
+(gdb) set suppress-cli-notifications on
+(gdb) continue
+Continuing.
+(gdb)
+@end smallexample
+
+Suppressing CLI notifications may be useful in scripts to obtain a
+reduced output from a list of commands.
+@end table
+
+@kindex show suppress-cli-notifications
+@item show suppress-cli-notifications
+Displays whether printing CLI notifications is suppressed or not.
+@end table
+
@node Extending GDB
@chapter Extending @value{GDBN}
@cindex extending GDB
@@ -27937,7 +28218,7 @@ of a command.
@smallexample
(gdb) alias -a set print elms = set print elements
(gdb) alias -a show print elms = show print elements
-(gdb) set p elms 20
+(gdb) set p elms 200
(gdb) show p elms
Limit on string chars or array elements to print is 200.
@end smallexample
@@ -28812,9 +29093,10 @@ otherwise a default layout is used.
@kindex tui disable
Disable TUI mode, returning to the console interpreter.
+@anchor{info_win_command}
@item info win
@kindex info win
-List and give the size of all displayed windows.
+List the names and sizes of all currently displayed windows.
@item tui new-layout @var{name} @var{window} @var{weight} @r{[}@var{window} @var{weight}@dots{}@r{]}
@kindex tui new-layout
@@ -28865,8 +29147,10 @@ status and command window being beneath these, filling the entire
width of the terminal. Because they have weight 2, the source and
assembly windows will be twice the height of the command window.
-@item layout @var{name}
+@kindex tui layout
@kindex layout
+@item tui layout @var{name}
+@itemx layout @var{name}
Changes which TUI windows are displayed. The @var{name} parameter
controls which layout is shown. It can be either one of the built-in
layout names, or the name of a layout defined by the user using
@@ -28896,8 +29180,9 @@ windows. When in @code{asm} or @code{split} layout display the
register, assembler, and command windows.
@end table
-@item focus @var{name}
@kindex focus
+@item tui focus @var{name}
+@itemx focus @var{name}
Changes which TUI window is currently active for scrolling. The
@var{name} parameter can be any of the following:
@@ -28921,8 +29206,10 @@ Make the register window active for scrolling.
Make the command window active for scrolling.
@end table
-@item refresh
+@kindex tui refresh
@kindex refresh
+@item tui refresh
+@itemx refresh
Refresh the screen. This is similar to typing @kbd{C-L}.
@item tui reg @var{group}
@@ -28958,14 +29245,39 @@ Display all registers.
@kindex update
Update the source window and the current execution point.
-@item winheight @var{name} +@var{count}
-@itemx winheight @var{name} -@var{count}
+@kindex tui window height
@kindex winheight
-Change the height of the window @var{name} by @var{count}
-lines. Positive counts increase the height, while negative counts
-decrease it. The @var{name} parameter can be one of @code{src} (the
-source window), @code{cmd} (the command window), @code{asm} (the
-disassembly window), or @code{regs} (the register display window).
+@item tui window height @var{name} +@var{count}
+@itemx tui window height @var{name} -@var{count}
+@itemx winheight @var{name} +@var{count}
+@itemx winheight @var{name} -@var{count}
+Change the height of the window @var{name} by @var{count} lines.
+Positive counts increase the height, while negative counts decrease
+it. The @var{name} parameter can be the name of any currently visible
+window. The names of the currently visible windows can be discovered
+using @kbd{info win} (@pxref{info_win_command,,info win}).
+
+The set of currently visible windows must always fill the terminal,
+and so, it is only possible to resize on window if there are other
+visible windows that can either give or receive the extra terminal
+space.
+
+@kindex tui window width
+@kindex winwidth
+@item tui window width @var{name} +@var{count}
+@itemx tui window width @var{name} -@var{count}
+@itemx winwidth @var{name} +@var{count}
+@itemx winwidth @var{name} -@var{count}
+Change the width of the window @var{name} by @var{count} columns.
+Positive counts increase the width, while negative counts decrease it.
+The @var{name} parameter can be the name of any currently visible
+window. The names of the currently visible windows can be discovered
+using @code{info win} (@pxref{info_win_command,,info win}).
+
+The set of currently visible windows must always fill the terminal,
+and so, it is only possible to resize on window if there are other
+visible windows that can either give or receive the extra terminal
+space.
@end table
@node TUI Configuration
@@ -29034,6 +29346,17 @@ The default display uses more space for line numbers and starts the
source text at the next tab stop; the compact display uses only as
much space as is needed for the line numbers in the current file, and
only a single space to separate the line numbers from the source.
+
+@kindex set debug tui
+@item set debug tui @r{[}on|off@r{]}
+Turn on or off display of @value{GDBN} internal debug messages relating
+to the TUI.
+
+@kindex show debug tui
+@item show debug tui
+Show the current status of displaying @value{GDBN} internal debug
+messages relating to the TUI.
+
@end table
Note that the colors of the TUI borders can be controlled using the
@@ -37001,15 +37324,45 @@ popup menu, but is needless clutter on the command line, and
@subheading Synopsis
@smallexample
--add-inferior
+-add-inferior [ --no-connection ]
@end smallexample
Creates a new inferior (@pxref{Inferiors Connections and Programs}). The created
inferior is not associated with any executable. Such association may
be established with the @samp{-file-exec-and-symbols} command
-(@pxref{GDB/MI File Commands}). The command response has a single
-field, @samp{inferior}, whose value is the identifier of the
-thread group corresponding to the new inferior.
+(@pxref{GDB/MI File Commands}).
+
+By default, the new inferior begins connected to the same target
+connection as the current inferior. For example, if the current
+inferior was connected to @code{gdbserver} with @code{target remote},
+then the new inferior will be connected to the same @code{gdbserver}
+instance. The @samp{--no-connection} option starts the new inferior
+with no connection yet. You can then for example use the
+@code{-target-select remote} command to connect to some other
+@code{gdbserver} instance, use @code{-exec-run} to spawn a local
+program, etc.
+
+The command response always has a field, @var{inferior}, whose value
+is the identifier of the thread group corresponding to the new
+inferior.
+
+An additional section field, @var{connection}, is optional. This
+field will only exist if the new inferior has a target connection. If
+this field exists, then its value will be a tuple containing the
+following fields:
+
+@table @samp
+@item number
+The number of the connection used for the new inferior.
+
+@item name
+The name of the connection type used for the new inferior.
+@end table
+
+@subheading @value{GDBN} Command
+
+The corresponding @value{GDBN} command is @samp{add-inferior}
+(@pxref{add_inferior_cli,,@samp{add-inferior}}).
@subheading Example
@@ -38480,7 +38833,7 @@ included with your operating system, you can find it in the xz package
at @url{http://tukaani.org/xz/}. If the LZMA library is available in
the usual place, then the @file{configure} script will use it
automatically. If it is installed in an unusual path, you can use the
-@option{--with-lzma-prefix} option to specify its location.
+@option{--with-liblzma-prefix} option to specify its location.
@item MPFR
@anchor{MPFR}
@@ -39473,6 +39826,19 @@ frame cache. This command is useful when debugging issues related to
register fetching, or frame unwinding. The command @code{flushregs}
is deprecated in favor of @code{maint flush register-cache}.
+@kindex maint flush source-cache
+@cindex source code, caching
+@item maint flush source-cache
+Flush @value{GDBN}'s cache of source code file contents. After
+@value{GDBN} reads a source file, and optionally applies styling
+(@pxref{Output Styling}), the file contents are cached. This command
+clears that cache. The next time @value{GDBN} wants to show lines
+from a source file, the content will be re-read.
+
+This command is useful when debugging issues related to source code
+styling. After flushing the cache any source code displayed by
+@value{GDBN} will be re-read and re-styled.
+
@kindex maint print objfiles
@cindex info for known object files
@item maint print objfiles @r{[}@var{regexp}@r{]}
@@ -39784,6 +40150,25 @@ unload the library and continue searching for a suitable candidate as
described in @ref{set libthread-db-search-path}. For more information
about the tests, see @ref{maint check libthread-db}.
+@kindex maint set gnu-source-highlight enabled
+@kindex maint show gnu-source-highlight enabled
+@item maint set gnu-source-highlight enabled @r{[}on|off@r{]}
+@itemx maint show gnu-source-highlight enabled
+Control whether @value{GDBN} should use the GNU Source Highlight
+library for applying styling to source code (@pxref{Output Styling}).
+This will be @samp{on} by default if the GNU Source Highlight library
+is available. If the GNU Source Highlight library is not available,
+then this will be @samp{off} by default, and attempting to change this
+value to @samp{on} will give an error.
+
+If the GNU Source Highlight library is not being used, then
+@value{GDBN} will use the Python Pygments package for source code
+styling, if it is available.
+
+This option is useful for debugging @value{GDBN}'s use of the Pygments
+library when @value{GDBN} is linked against the GNU Source Highlight
+library.
+
@kindex maint space
@cindex memory used by commands
@item maint space @var{value}
@@ -41874,7 +42259,8 @@ A command response with no output.
@item @var{OUTPUT}
A command response with the hex encoded output string @var{OUTPUT}.
@item E @var{NN}
-Indicate a badly formed request.
+Indicate a badly formed request. The error number @var{NN} is given as
+hex digits.
@item @w{}
An empty reply indicates that @samp{qRcmd} is not recognized.
@end table
@@ -42587,6 +42973,7 @@ encoded). @value{GDBN} will continue to supply the values of symbols
@xref{Tracepoint Packets}.
+@anchor{qThreadExtraInfo}
@item qThreadExtraInfo,@var{thread-id}
@cindex thread attributes info, remote request
@cindex @samp{qThreadExtraInfo} packet
@@ -46191,6 +46578,7 @@ registers using the capitalization used in the description.
* ARC Features::
* ARM Features::
* i386 Features::
+* LoongArch Features::
* MicroBlaze Features::
* MIPS Features::
* M68K Features::
@@ -46318,6 +46706,12 @@ quad-precision registers from pairs of double-precision registers.
If this feature is present, @samp{org.gnu.gdb.arm.vfp} must also
be present and include 32 double-precision registers.
+The @samp{org.gnu.gdb.arm.m-profile-pacbti} feature is optional, and
+acknowledges support for the ARMv8.1-m PACBTI extensions. @value{GDBN}
+will track return address signing states and will decorate backtraces using
+the [PAC] marker, similar to AArch64's PAC extension.
+@xref{AArch64 PAC}.
+
@node i386 Features
@subsection i386 Features
@cindex target descriptions, i386 features
@@ -46419,6 +46813,15 @@ The @samp{org.gnu.gdb.i386.pkeys} feature is optional. It should
describe a single register, @samp{pkru}. It is a 32-bit register
valid for i386 and amd64.
+@node LoongArch Features
+@subsection LoongArch Features
+@cindex target descriptions, LoongArch Features
+
+The @samp{org.gnu.gdb.loongarch.base} feature is required for LoongArch
+targets. It should contain the registers @samp{r0} through @samp{r31},
+@samp{pc}, and @samp{badv}. Either the architectural names (@samp{r0},
+@samp{r1}, etc) can be used, or the ABI names (@samp{zero}, @samp{ra}, etc).
+
@node MicroBlaze Features
@subsection MicroBlaze Features
@cindex target descriptions, MicroBlaze features
@@ -47500,9 +47903,6 @@ Read all symbols from the given symfile on the first access.
@item --readnever
Do not read symbol files.
-@item --dbx
-Run in DBX compatibility mode.
-
@item --return-child-result
@value{GDBN}'s exit code will be the same as the child's exit code.
diff --git a/gdb/doc/python.texi b/gdb/doc/python.texi
index 6bd5f6b90ac..cb5283e03c0 100644
--- a/gdb/doc/python.texi
+++ b/gdb/doc/python.texi
@@ -18,8 +18,6 @@
You can extend @value{GDBN} using the @uref{http://www.python.org/,
Python programming language}. This feature is available only if
@value{GDBN} was configured using @option{--with-python}.
-@value{GDBN} can be built against either Python 2 or Python 3; which
-one you have depends on this configure-time option.
@cindex python directory
Python scripts used by @value{GDBN} should be installed in
@@ -95,6 +93,7 @@ containing @code{end}. For example:
23
@end smallexample
+@anchor{set_python_print_stack}
@kindex set python print-stack
@item set python print-stack
By default, @value{GDBN} will print only the message component of a
@@ -204,7 +203,8 @@ optional arguments while skipping others. Example:
* Events In Python:: Listening for events from @value{GDBN}.
* Threads In Python:: Accessing inferior threads from Python.
* Recordings In Python:: Accessing recordings from Python.
-* Commands In Python:: Implementing new commands in Python.
+* CLI Commands In Python:: Implementing new CLI commands in Python.
+* GDB/MI Commands In Python:: Implementing new @sc{GDB/MI} commands in Python.
* Parameters In Python:: Adding new @value{GDBN} parameters.
* Functions In Python:: Writing new convenience functions.
* Progspaces In Python:: Program spaces.
@@ -332,6 +332,32 @@ parameter's value is converted to a Python value of the appropriate
type, and returned.
@end defun
+@findex gdb.set_parameter
+@defun gdb.set_parameter (name, value)
+Sets the gdb parameter @var{name} to @var{value}. As with
+@code{gdb.parameter}, the parameter name string may contain spaces if
+the parameter has a multi-part name.
+@end defun
+
+@findex gdb.with_parameter
+@defun gdb.with_parameter (name, value)
+Create a Python context manager (for use with the Python
+@command{with} statement) that temporarily sets the gdb parameter
+@var{name} to @var{value}. On exit from the context, the previous
+value will be restored.
+
+This uses @code{gdb.parameter} in its implementation, so it can throw
+the same exceptions as that function.
+
+For example, it's sometimes useful to evaluate some Python code with a
+particular gdb language:
+
+@smallexample
+with gdb.with_parameter('language', 'pascal'):
+ ... language-specific operations
+@end smallexample
+@end defun
+
@findex gdb.history
@defun gdb.history (number)
Return a value from @value{GDBN}'s value history (@pxref{Value
@@ -361,6 +387,11 @@ as its result, then placing the value into the history will allow the
user convenient access to those values via CLI history facilities.
@end defun
+@defun gdb.history_count ()
+Return an integer indicating the number of values in @value{GDBN}'s
+value history (@pxref{Value History}).
+@end defun
+
@findex gdb.convenience_variable
@defun gdb.convenience_variable (name)
Return the value of the convenience variable (@pxref{Convenience
@@ -388,7 +419,8 @@ the current language, evaluate it, and return the result as a
@code{gdb.Value}.
This function can be useful when implementing a new command
-(@pxref{Commands In Python}), as it provides a way to parse the
+(@pxref{CLI Commands In Python}, @pxref{GDB/MI Commands In Python}),
+as it provides a way to parse the
command's argument as an expression. It is also useful simply to
compute values.
@end defun
@@ -444,7 +476,7 @@ this. For example:
@end defun
@findex gdb.write
-@defun gdb.write (string @r{[}, stream{]})
+@defun gdb.write (string @r{[}, stream@r{]})
Print a string to @value{GDBN}'s paginated output stream. The
optional @var{stream} determines the stream to print to. The default
stream is @value{GDBN}'s standard output stream. Possible stream
@@ -518,6 +550,14 @@ Return the name of the current target wide character set
never returned.
@end defun
+@findex gdb.host_charset
+@defun gdb.host_charset ()
+Return a string, the name of the current host character set
+(@pxref{Character Sets}). This differs from
+@code{gdb.parameter('host-charset')} in that @samp{auto} is never
+returned.
+@end defun
+
@findex gdb.solib_name
@defun gdb.solib_name (address)
Return the name of the shared library holding the given @var{address}
@@ -573,6 +613,60 @@ currently active connection (@pxref{Connections In Python}). The
connection objects are in no particular order in the returned list.
@end defun
+@defun gdb.format_address (@var{address} @r{[}, @var{progspace}, @var{architecture}@r{]})
+Return a string in the format @samp{@var{addr}
+<@var{symbol}+@var{offset}>}, where @var{addr} is @var{address}
+formatted in hexadecimal, @var{symbol} is the symbol whose address is
+the nearest to @var{address} and below it in memory, and @var{offset}
+is the offset from @var{symbol} to @var{address} in decimal.
+
+If no suitable @var{symbol} was found, then the
+<@var{symbol}+@var{offset}> part is not included in the returned
+string, instead the returned string will just contain the
+@var{address} formatted as hexadecimal. How far @value{GDBN} looks
+back for a suitable symbol can be controlled with @kbd{set print
+max-symbolic-offset} (@pxref{Print Settings}).
+
+Additionally, the returned string can include file name and line
+number information when @kbd{set print symbol-filename on}
+(@pxref{Print Settings}), in this case the format of the returned
+string is @samp{@var{addr} <@var{symbol}+@var{offset}> at
+@var{filename}:@var{line-number}}.
+
+
+The @var{progspace} is the gdb.Progspace in which @var{symbol} is
+looked up, and @var{architecture} is used when formatting @var{addr},
+e.g.@: in order to determine the size of an address in bytes.
+
+If neither @var{progspace} or @var{architecture} are passed, then by
+default @value{GDBN} will use the program space and architecture of
+the currently selected inferior, thus, the following two calls are
+equivalent:
+
+@smallexample
+gdb.format_address(address)
+gdb.format_address(address,
+ gdb.selected_inferior().progspace,
+ gdb.selected_inferior().architecture())
+@end smallexample
+
+It is not valid to only pass one of @var{progspace} or
+@var{architecture}, either they must both be provided, or neither must
+be provided (and the defaults will be used).
+
+This method uses the same mechanism for formatting address, symbol,
+and offset information as core @value{GDBN} does in commands such as
+@kbd{disassemble}.
+
+Here are some examples of the possible string formats:
+
+@smallexample
+0x00001042
+0x00001042 <symbol+16>
+0x00001042 <symbol+16 at file.c:123>
+@end smallexample
+@end defun
+
@node Exception Handling
@subsubsection Exception Handling
@cindex python exceptions
@@ -1040,6 +1134,16 @@ A string containing a single character representing the format to use for
the returned string. For instance, @code{'x'} is equivalent to using the
@value{GDBN} command @code{print} with the @code{/x} option and formats
the value as a hexadecimal number.
+
+@item styling
+@code{True} if @value{GDBN} should apply styling to the returned
+string. When styling is applied, the returned string might contain
+ANSI terminal escape sequences. Escape sequences will only be
+included if styling is turned on, see @ref{Output Styling}.
+Additionally, @value{GDBN} only styles some value contents, so not
+every output string will contain escape sequences.
+
+When @code{False}, which is the default, no output styling is applied.
@end table
@end defun
@@ -1214,6 +1318,22 @@ The @code{gdb.Objfile} that this type was defined in, or @code{None} if
there is no associated objfile.
@end defvar
+@defvar Type.is_scalar
+This property is @code{True} if the type is a scalar type, otherwise,
+this property is @code{False}. Examples of non-scalar types include
+structures, unions, and classes.
+@end defvar
+
+@defvar Type.is_signed
+For scalar types (those for which @code{Type.is_scalar} is
+@code{True}), this property is @code{True} if the type is signed,
+otherwise this property is @code{False}.
+
+Attempting to read this property for a non-scalar type (a type for
+which @code{Type.is_scalar} is @code{False}), will raise a
+@code{ValueError}.
+@end defvar
+
The following methods are provided:
@defun Type.fields ()
@@ -2097,7 +2217,7 @@ must contain the frames that are being elided wrapped in a suitable
frame decorator. If no frames are being elided this function may
return an empty iterable, or @code{None}. Elided frames are indented
from normal frames in a @code{CLI} backtrace, or in the case of
-@code{GDB/MI}, are placed in the @code{children} field of the eliding
+@sc{GDB/MI}, are placed in the @code{children} field of the eliding
frame.
It is the frame filter's task to also filter out the elided frames from
@@ -3247,56 +3367,58 @@ of type @code{gdb.ExitedEvent}. As you can see in the example the
@code{ExitedEvent} object has an attribute which indicates the exit code of
the inferior.
-The following is a listing of the event registries that are available and
-details of the events they emit:
-
-@table @code
-
-@item events.cont
-Emits @code{gdb.ThreadEvent}.
-
-Some events can be thread specific when @value{GDBN} is running in non-stop
-mode. When represented in Python, these events all extend
-@code{gdb.ThreadEvent}. Note, this event is not emitted directly; instead,
-events which are emitted by this or other modules might extend this event.
-Examples of these events are @code{gdb.BreakpointEvent} and
-@code{gdb.ContinueEvent}.
+Some events can be thread specific when @value{GDBN} is running in
+non-stop mode. When represented in Python, these events all extend
+@code{gdb.ThreadEvent}. This event is a base class and is never
+emitted directly; instead, events which are emitted by this or other
+modules might extend this event. Examples of these events are
+@code{gdb.BreakpointEvent} and @code{gdb.ContinueEvent}.
+@code{gdb.ThreadEvent} holds the following attributes:
@defvar ThreadEvent.inferior_thread
In non-stop mode this attribute will be set to the specific thread which was
involved in the emitted event. Otherwise, it will be set to @code{None}.
@end defvar
-Emits @code{gdb.ContinueEvent} which extends @code{gdb.ThreadEvent}.
+The following is a listing of the event registries that are available and
+details of the events they emit:
+
+@table @code
-This event indicates that the inferior has been continued after a stop. For
-inherited attribute refer to @code{gdb.ThreadEvent} above.
+@item events.cont
+Emits @code{gdb.ContinueEvent}, which extends @code{gdb.ThreadEvent}.
+This event indicates that the inferior has been continued after a
+stop. For inherited attribute refer to @code{gdb.ThreadEvent} above.
@item events.exited
-Emits @code{events.ExitedEvent} which indicates that the inferior has exited.
-@code{events.ExitedEvent} has two attributes:
+Emits @code{events.ExitedEvent}, which indicates that the inferior has
+exited. @code{events.ExitedEvent} has two attributes:
+
@defvar ExitedEvent.exit_code
An integer representing the exit code, if available, which the inferior
has returned. (The exit code could be unavailable if, for example,
@value{GDBN} detaches from the inferior.) If the exit code is unavailable,
the attribute does not exist.
@end defvar
+
@defvar ExitedEvent.inferior
A reference to the inferior which triggered the @code{exited} event.
@end defvar
@item events.stop
-Emits @code{gdb.StopEvent} which extends @code{gdb.ThreadEvent}.
+Emits @code{gdb.StopEvent}, which extends @code{gdb.ThreadEvent}.
-Indicates that the inferior has stopped. All events emitted by this registry
-extend StopEvent. As a child of @code{gdb.ThreadEvent}, @code{gdb.StopEvent}
-will indicate the stopped thread when @value{GDBN} is running in non-stop
-mode. Refer to @code{gdb.ThreadEvent} above for more details.
+Indicates that the inferior has stopped. All events emitted by this
+registry extend @code{gdb.StopEvent}. As a child of
+@code{gdb.ThreadEvent}, @code{gdb.StopEvent} will indicate the stopped
+thread when @value{GDBN} is running in non-stop mode. Refer to
+@code{gdb.ThreadEvent} above for more details.
-Emits @code{gdb.SignalEvent} which extends @code{gdb.StopEvent}.
+Emits @code{gdb.SignalEvent}, which extends @code{gdb.StopEvent}.
-This event indicates that the inferior or one of its threads has received as
-signal. @code{gdb.SignalEvent} has the following attributes:
+This event indicates that the inferior or one of its threads has
+received a signal. @code{gdb.SignalEvent} has the following
+attributes:
@defvar SignalEvent.stop_signal
A string representing the signal received by the inferior. A list of possible
@@ -3304,7 +3426,8 @@ signal values can be obtained by running the command @code{info signals} in
the @value{GDBN} command prompt.
@end defvar
-Also emits @code{gdb.BreakpointEvent} which extends @code{gdb.StopEvent}.
+Also emits @code{gdb.BreakpointEvent}, which extends
+@code{gdb.StopEvent}.
@code{gdb.BreakpointEvent} event indicates that one or more breakpoints have
been hit, and has the following attributes:
@@ -3314,6 +3437,7 @@ A sequence containing references to all the breakpoints (type
@code{gdb.Breakpoint}) that were hit.
@xref{Breakpoints In Python}, for details of the @code{gdb.Breakpoint} object.
@end defvar
+
@defvar BreakpointEvent.breakpoint
A reference to the first breakpoint that was hit.
This function is maintained for backward compatibility and is now deprecated
@@ -3435,7 +3559,7 @@ is removed, say via @code{remove-inferiors}.
The event is of type @code{gdb.InferiorDeletedEvent}. This has a single
attribute:
-@defvar NewInferiorEvent.inferior
+@defvar InferiorDeletedEvent.inferior
The inferior that is being removed, a @code{gdb.Inferior} object.
@end defvar
@@ -3525,6 +3649,23 @@ The inferior this thread belongs to. This attribute is represented as
a @code{gdb.Inferior} object. This attribute is not writable.
@end defvar
+@defvar InferiorThread.details
+A string containing target specific thread state information. The
+format of this string varies by target. If there is no additional
+state information for this thread, then this attribute contains
+@code{None}.
+
+For example, on a @sc{gnu}/Linux system, a thread that is in the
+process of exiting will return the string @samp{Exiting}. For remote
+targets the @code{details} string will be obtained with the
+@samp{qThreadExtraInfo} remote packet, if the target supports it
+(@pxref{qThreadExtraInfo,,@samp{qThreadExtraInfo}}).
+
+@value{GDBN} displays the @code{details} string as part of the
+@samp{Target Id} column, in the @code{info threads} output
+(@pxref{info_threads,,@samp{info threads}}).
+@end defvar
+
A @code{gdb.InferiorThread} object has the following methods:
@defun InferiorThread.is_valid ()
@@ -3801,11 +3942,12 @@ def countrange (filename, linerange):
return count
@end smallexample
-@node Commands In Python
-@subsubsection Commands In Python
+@node CLI Commands In Python
+@subsubsection CLI Commands In Python
-@cindex commands in python
-@cindex python commands
+@cindex CLI commands in python
+@cindex commands in python, CLI
+@cindex python commands, CLI
You can implement new @value{GDBN} CLI commands in Python. A CLI
command is implemented using an instance of the @code{gdb.Command}
class, most commonly using a subclass.
@@ -4084,6 +4226,154 @@ registration of the command with @value{GDBN}. Depending on how the
Python code is read into @value{GDBN}, you may need to import the
@code{gdb} module explicitly.
+@node GDB/MI Commands In Python
+@subsubsection @sc{GDB/MI} Commands In Python
+
+@cindex MI commands in python
+@cindex commands in python, GDB/MI
+@cindex python commands, GDB/MI
+It is possible to add @sc{GDB/MI} (@pxref{GDB/MI}) commands
+implemented in Python. A @sc{GDB/MI} command is implemented using an
+instance of the @code{gdb.MICommand} class, most commonly using a
+subclass.
+
+@defun MICommand.__init__ (name)
+The object initializer for @code{MICommand} registers the new command
+with @value{GDBN}. This initializer is normally invoked from the
+subclass' own @code{__init__} method.
+
+@var{name} is the name of the command. It must be a valid name of a
+@sc{GDB/MI} command, and in particular must start with a hyphen
+(@code{-}). Reusing the name of a built-in @sc{GDB/MI} is not
+allowed, and a @code{RuntimeError} will be raised. Using the name
+of an @sc{GDB/MI} command previously defined in Python is allowed, the
+previous command will be replaced with the new command.
+@end defun
+
+@defun MICommand.invoke (arguments)
+This method is called by @value{GDBN} when the new MI command is
+invoked.
+
+@var{arguments} is a list of strings. Note, that @code{--thread}
+and @code{--frame} arguments are handled by @value{GDBN} itself therefore
+they do not show up in @code{arguments}.
+
+If this method raises an exception, then it is turned into a
+@sc{GDB/MI} @code{^error} response. Only @code{gdb.GdbError}
+exceptions (or its sub-classes) should be used for reporting errors to
+users, any other exception type is treated as a failure of the
+@code{invoke} method, and the exception will be printed to the error
+stream according to the @kbd{set python print-stack} setting
+(@pxref{set_python_print_stack,,@kbd{set python print-stack}}).
+
+If this method returns @code{None}, then the @sc{GDB/MI} command will
+return a @code{^done} response with no additional values.
+
+Otherwise, the return value must be a dictionary, which is converted
+to a @sc{GDB/MI} @var{result-record} (@pxref{GDB/MI Output Syntax}).
+The keys of this dictionary must be strings, and are used as
+@var{variable} names in the @var{result-record}, these strings must
+comply with the naming rules detailed below. The values of this
+dictionary are recursively handled as follows:
+
+@itemize
+@item
+If the value is Python sequence or iterator, it is converted to
+@sc{GDB/MI} @var{list} with elements converted recursively.
+
+@item
+If the value is Python dictionary, it is converted to
+@sc{GDB/MI} @var{tuple}. Keys in that dictionary must be strings,
+which comply with the @var{variable} naming rules detailed below.
+Values are converted recursively.
+
+@item
+Otherwise, value is first converted to a Python string using
+@code{str ()} and then converted to @sc{GDB/MI} @var{const}.
+@end itemize
+
+The strings used for @var{variable} names in the @sc{GDB/MI} output
+must follow the following rules; the string must be at least one
+character long, the first character must be in the set
+@code{[a-zA-Z]}, while every subsequent character must be in the set
+@code{[-_a-zA-Z0-9]}.
+@end defun
+
+An instance of @code{MICommand} has the following attributes:
+
+@defvar MICommand.name
+A string, the name of this @sc{GDB/MI} command, as was passed to the
+@code{__init__} method. This attribute is read-only.
+@end defvar
+
+@defvar MICommand.installed
+A boolean value indicating if this command is installed ready for a
+user to call from the command line. Commands are automatically
+installed when they are instantiated, after which this attribute will
+be @code{True}.
+
+If later, a new command is created with the same name, then the
+original command will become uninstalled, and this attribute will be
+@code{False}.
+
+This attribute is read-write, setting this attribute to @code{False}
+will uninstall the command, removing it from the set of available
+commands. Setting this attribute to @code{True} will install the
+command for use. If there is already a Python command with this name
+installed, the currently installed command will be uninstalled, and
+this command installed in its place.
+@end defvar
+
+The following code snippet shows how a two trivial MI command can be
+implemented in Python:
+
+@smallexample
+class MIEcho(gdb.MICommand):
+ """Echo arguments passed to the command."""
+
+ def __init__(self, name, mode):
+ self._mode = mode
+ super(MIEcho, self).__init__(name)
+
+ def invoke(self, argv):
+ if self._mode == 'dict':
+ return @{ 'dict': @{ 'argv' : argv @} @}
+ elif self._mode == 'list':
+ return @{ 'list': argv @}
+ else:
+ return @{ 'string': ", ".join(argv) @}
+
+
+MIEcho("-echo-dict", "dict")
+MIEcho("-echo-list", "list")
+MIEcho("-echo-string", "string")
+@end smallexample
+
+The last three lines instantiate the class three times, creating three
+new @sc{GDB/MI} commands @code{-echo-dict}, @code{-echo-list}, and
+@code{-echo-string}. Each time a subclass of @code{gdb.MICommand} is
+instantiated, the new command is automatically registered with
+@value{GDBN}.
+
+Depending on how the Python code is read into @value{GDBN}, you may
+need to import the @code{gdb} module explicitly.
+
+The following example shows a @value{GDBN} session in which the above
+commands have been added:
+
+@smallexample
+(@value{GDBP})
+-echo-dict abc def ghi
+^done,dict=@{argv=["abc","def","ghi"]@}
+(@value{GDBP})
+-echo-list abc def ghi
+^done,list=["abc","def","ghi"]
+(@value{GDBP})
+-echo-string abc def ghi
+^done,string="abc, def, ghi"
+(@value{GDBP})
+@end smallexample
+
@node Parameters In Python
@subsubsection Parameters In Python
@@ -4121,7 +4411,7 @@ If @var{name} consists of multiple words, and no prefix parameter group
can be found, an exception is raised.
@var{command-class} should be one of the @samp{COMMAND_} constants
-(@pxref{Commands In Python}). This argument tells @value{GDBN} how to
+(@pxref{CLI Commands In Python}). This argument tells @value{GDBN} how to
categorize the new parameter in the help system.
@var{parameter-class} should be one of the @samp{PARAM_} constants
@@ -4136,23 +4426,46 @@ represent the possible values for the parameter.
If @var{parameter-class} is not @code{PARAM_ENUM}, then the presence
of a fourth argument will cause an exception to be thrown.
-The help text for the new parameter is taken from the Python
-documentation string for the parameter's class, if there is one. If
-there is no documentation string, a default value is used.
+The help text for the new parameter includes the Python documentation
+string from the parameter's class, if there is one. If there is no
+documentation string, a default value is used. The documentation
+string is included in the output of the parameters @code{help set} and
+@code{help show} commands, and should be written taking this into
+account.
@end defun
@defvar Parameter.set_doc
If this attribute exists, and is a string, then its value is used as
-the help text for this parameter's @code{set} command. The value is
-examined when @code{Parameter.__init__} is invoked; subsequent changes
-have no effect.
+the first part of the help text for this parameter's @code{set}
+command. The second part of the help text is taken from the
+documentation string for the parameter's class, if there is one.
+
+The value of @code{set_doc} should give a brief summary specific to
+the set action, this text is only displayed when the user runs the
+@code{help set} command for this parameter. The class documentation
+should be used to give a fuller description of what the parameter
+does, this text is displayed for both the @code{help set} and
+@code{help show} commands.
+
+The @code{set_doc} value is examined when @code{Parameter.__init__} is
+invoked; subsequent changes have no effect.
@end defvar
@defvar Parameter.show_doc
If this attribute exists, and is a string, then its value is used as
-the help text for this parameter's @code{show} command. The value is
-examined when @code{Parameter.__init__} is invoked; subsequent changes
-have no effect.
+the first part of the help text for this parameter's @code{show}
+command. The second part of the help text is taken from the
+documentation string for the parameter's class, if there is one.
+
+The value of @code{show_doc} should give a brief summary specific to
+the show action, this text is only displayed when the user runs the
+@code{help show} command for this parameter. The class documentation
+should be used to give a fuller description of what the parameter
+does, this text is displayed for both the @code{help set} and
+@code{help show} commands.
+
+The @code{show_doc} value is examined when @code{Parameter.__init__}
+is invoked; subsequent changes have no effect.
@end defvar
@defvar Parameter.value
@@ -4522,7 +4835,7 @@ historical compatibility.
@end defun
@findex gdb.lookup_objfile
-@defun gdb.lookup_objfile (name @r{[}, by_build_id{]})
+@defun gdb.lookup_objfile (name @r{[}, by_build_id@r{]})
Look up @var{name}, a file name or build ID, in the list of objfiles
for the current program space (@pxref{Progspaces In Python}).
If the objfile is not found throw the Python @code{ValueError} exception.
@@ -6244,9 +6557,9 @@ and so the content should appear to move up.
@defun Window.click (@var{x}, @var{y}, @var{button})
This is called on a mouse click in this window. @var{x} and @var{y} are
-the mouse coordinates inside the window (0-based), and @var{button}
-specifies which mouse button was used, whose values can be 1 (left),
-2 (middle), or 3 (right).
+the mouse coordinates inside the window (0-based, from the top left
+corner), and @var{button} specifies which mouse button was used, whose
+values can be 1 (left), 2 (middle), or 3 (right).
@end defun
@node Python Auto-loading
diff --git a/gdb/dtrace-probe.c b/gdb/dtrace-probe.c
index ea4999ccebe..6f01edf3924 100644
--- a/gdb/dtrace-probe.c
+++ b/gdb/dtrace-probe.c
@@ -684,7 +684,7 @@ dtrace_probe::is_enabled () const
CORE_ADDR
dtrace_probe::get_relocated_address (struct objfile *objfile)
{
- return this->get_address () + objfile->data_section_offset ();
+ return this->get_address () + objfile->text_section_offset ();
}
/* Implementation of the get_argument_count method. */
@@ -851,7 +851,7 @@ dtrace_static_probe_ops::get_probes
if (bfd_malloc_and_get_section (abfd, sect, &dof) && dof != NULL)
dtrace_process_dof (sect, objfile, probesp,
(struct dtrace_dof_hdr *) dof);
- else
+ else
complaint (_("could not obtain the contents of"
"section '%s' in objfile `%s'."),
bfd_section_name (sect), bfd_get_filename (abfd));
diff --git a/gdb/dummy-frame.c b/gdb/dummy-frame.c
index 41c0bdeb945..40b455c7e4a 100644
--- a/gdb/dummy-frame.c
+++ b/gdb/dummy-frame.c
@@ -405,10 +405,10 @@ fprint_dummy_frames (struct ui_file *file)
struct dummy_frame *s;
for (s = dummy_frame_stack; s != NULL; s = s->next)
- fprintf_filtered (file, "%s: id=%s, ptid=%s\n",
- host_address_to_string (s),
- s->id.id.to_string ().c_str (),
- target_pid_to_str (s->id.thread->ptid).c_str ());
+ gdb_printf (file, "%s: id=%s, ptid=%s\n",
+ host_address_to_string (s),
+ s->id.id.to_string ().c_str (),
+ s->id.thread->ptid.to_string ().c_str ());
}
static void
diff --git a/gdb/dwarf2/abbrev-cache.c b/gdb/dwarf2/abbrev-cache.c
new file mode 100644
index 00000000000..2168f92dd9d
--- /dev/null
+++ b/gdb/dwarf2/abbrev-cache.c
@@ -0,0 +1,65 @@
+/* DWARF 2 abbrev table cache
+
+ Copyright (C) 2022 Free Software Foundation, Inc.
+
+ This file is part of GDB.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#include "defs.h"
+#include "dwarf2/read.h"
+#include "dwarf2/abbrev-cache.h"
+
+/* Hash function for an abbrev table. */
+
+hashval_t
+abbrev_cache::hash_table (const void *item)
+{
+ const struct abbrev_table *table = (const struct abbrev_table *) item;
+ return to_underlying (table->sect_off);
+}
+
+/* Comparison function for abbrev table. */
+
+int
+abbrev_cache::eq_table (const void *lhs, const void *rhs)
+{
+ const struct abbrev_table *l_table = (const struct abbrev_table *) lhs;
+ const search_key *key = (const search_key *) rhs;
+ return (l_table->section == key->section
+ && l_table->sect_off == key->offset);
+}
+
+abbrev_cache::abbrev_cache ()
+ : m_tables (htab_create_alloc (20, hash_table, eq_table,
+ htab_delete_entry<abbrev_table>,
+ xcalloc, xfree))
+{
+}
+
+void
+abbrev_cache::add (abbrev_table_up table)
+{
+ /* We allow this as a convenience to the caller. */
+ if (table == nullptr)
+ return;
+
+ search_key key = { table->section, table->sect_off };
+ void **slot = htab_find_slot_with_hash (m_tables.get (), &key,
+ to_underlying (table->sect_off),
+ INSERT);
+ /* If this one already existed, then it should have been reused. */
+ gdb_assert (*slot == nullptr);
+ *slot = (void *) table.release ();
+}
diff --git a/gdb/dwarf2/abbrev-cache.h b/gdb/dwarf2/abbrev-cache.h
new file mode 100644
index 00000000000..d729eb9dd1b
--- /dev/null
+++ b/gdb/dwarf2/abbrev-cache.h
@@ -0,0 +1,66 @@
+/* DWARF abbrev table cache
+
+ Copyright (C) 2022 Free Software Foundation, Inc.
+
+ This file is part of GDB.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#ifndef GDB_DWARF2_ABBREV_CACHE_H
+#define GDB_DWARF2_ABBREV_CACHE_H
+
+#include "dwarf2/abbrev.h"
+#include "gdbtypes.h"
+
+/* An abbrev cache holds abbrev tables for easier reuse. */
+class abbrev_cache
+{
+public:
+ abbrev_cache ();
+ DISABLE_COPY_AND_ASSIGN (abbrev_cache);
+
+ /* Find an abbrev table coming from the abbrev section SECTION at
+ offset OFFSET. Return the table, or nullptr if it has not yet
+ been registered. */
+ abbrev_table *find (struct dwarf2_section_info *section, sect_offset offset)
+ {
+ search_key key = { section, offset };
+
+ return (abbrev_table *) htab_find_with_hash (m_tables.get (), &key,
+ to_underlying (offset));
+ }
+
+ /* Add TABLE to this cache. Ownership of TABLE is transferred to
+ the cache. Note that a table at a given section+offset may only
+ be registered once -- a violation of this will cause an assert.
+ To avoid this, call the 'find' method first, to see if the table
+ has already been read. */
+ void add (abbrev_table_up table);
+
+private:
+
+ static hashval_t hash_table (const void *item);
+ static int eq_table (const void *lhs, const void *rhs);
+
+ struct search_key
+ {
+ struct dwarf2_section_info *section;
+ sect_offset offset;
+ };
+
+ /* Hash table of abbrev tables. */
+ htab_up m_tables;
+};
+
+#endif /* GDB_DWARF2_ABBREV_CACHE_H */
diff --git a/gdb/dwarf2/abbrev.c b/gdb/dwarf2/abbrev.c
index 1dd0818c382..4ca27eaa7e0 100644
--- a/gdb/dwarf2/abbrev.c
+++ b/gdb/dwarf2/abbrev.c
@@ -58,8 +58,9 @@ eq_abbrev (const void *lhs, const void *rhs)
dies from a section we read in all abbreviations and install them
in a hash table. */
-abbrev_table::abbrev_table (sect_offset off)
+abbrev_table::abbrev_table (sect_offset off, struct dwarf2_section_info *sect)
: sect_off (off),
+ section (sect),
m_abbrevs (htab_create_alloc (20, hash_abbrev, eq_abbrev,
nullptr, xcalloc, xfree))
{
@@ -75,6 +76,44 @@ abbrev_table::add_abbrev (struct abbrev_info *abbrev)
*slot = abbrev;
}
+/* Helper function that returns true if a DIE with the given tag might
+ plausibly be indexed. */
+
+static bool
+tag_interesting_for_index (dwarf_tag tag)
+{
+ switch (tag)
+ {
+ case DW_TAG_array_type:
+ case DW_TAG_base_type:
+ case DW_TAG_class_type:
+ case DW_TAG_constant:
+ case DW_TAG_enumeration_type:
+ case DW_TAG_enumerator:
+ case DW_TAG_imported_declaration:
+ case DW_TAG_imported_unit:
+ case DW_TAG_inlined_subroutine:
+ case DW_TAG_interface_type:
+ case DW_TAG_module:
+ case DW_TAG_namespace:
+ case DW_TAG_ptr_to_member_type:
+ case DW_TAG_set_type:
+ case DW_TAG_string_type:
+ case DW_TAG_structure_type:
+ case DW_TAG_subprogram:
+ case DW_TAG_subrange_type:
+ case DW_TAG_generic_subrange:
+ case DW_TAG_subroutine_type:
+ case DW_TAG_typedef:
+ case DW_TAG_union_type:
+ case DW_TAG_unspecified_type:
+ case DW_TAG_variable:
+ return true;
+ }
+
+ return false;
+}
+
/* Read in an abbrev table. */
abbrev_table_up
@@ -85,7 +124,7 @@ abbrev_table::read (struct dwarf2_section_info *section,
const gdb_byte *abbrev_ptr;
struct abbrev_info *cur_abbrev;
- abbrev_table_up abbrev_table (new struct abbrev_table (sect_off));
+ abbrev_table_up abbrev_table (new struct abbrev_table (sect_off, section));
struct obstack *obstack = &abbrev_table->m_abbrev_obstack;
/* Caller must ensure this. */
@@ -115,6 +154,17 @@ abbrev_table::read (struct dwarf2_section_info *section,
cur_abbrev->has_children = read_1_byte (abfd, abbrev_ptr);
abbrev_ptr += 1;
+ unsigned int size = 0;
+ unsigned int sibling_offset = -1;
+ bool is_csize = true;
+
+ bool has_hardcoded_declaration = false;
+ bool has_specification_or_origin = false;
+ bool has_name = false;
+ bool has_linkage_name = false;
+ bool has_location = false;
+ bool has_external = false;
+
/* Now read in declarations. */
int num_attrs = 0;
for (;;)
@@ -141,12 +191,128 @@ abbrev_table::read (struct dwarf2_section_info *section,
if (cur_attr.name == 0)
break;
+ switch (cur_attr.name)
+ {
+ case DW_AT_declaration:
+ if (cur_attr.form == DW_FORM_flag_present)
+ has_hardcoded_declaration = true;
+ break;
+
+ case DW_AT_external:
+ has_external = true;
+ break;
+
+ case DW_AT_specification:
+ case DW_AT_abstract_origin:
+ case DW_AT_extension:
+ has_specification_or_origin = true;
+ break;
+
+ case DW_AT_name:
+ has_name = true;
+ break;
+
+ case DW_AT_MIPS_linkage_name:
+ case DW_AT_linkage_name:
+ has_linkage_name = true;
+ break;
+
+ case DW_AT_const_value:
+ case DW_AT_location:
+ has_location = true;
+ break;
+
+ case DW_AT_sibling:
+ if (is_csize && cur_attr.form == DW_FORM_ref4)
+ sibling_offset = size;
+ break;
+ }
+
+ switch (cur_attr.form)
+ {
+ case DW_FORM_data1:
+ case DW_FORM_ref1:
+ case DW_FORM_flag:
+ case DW_FORM_strx1:
+ size += 1;
+ break;
+ case DW_FORM_flag_present:
+ case DW_FORM_implicit_const:
+ break;
+ case DW_FORM_data2:
+ case DW_FORM_ref2:
+ case DW_FORM_strx2:
+ size += 2;
+ break;
+ case DW_FORM_strx3:
+ size += 3;
+ break;
+ case DW_FORM_data4:
+ case DW_FORM_ref4:
+ case DW_FORM_strx4:
+ size += 4;
+ break;
+ case DW_FORM_data8:
+ case DW_FORM_ref8:
+ case DW_FORM_ref_sig8:
+ size += 8;
+ break;
+ case DW_FORM_data16:
+ size += 16;
+ break;
+
+ default:
+ is_csize = false;
+ break;
+ }
+
++num_attrs;
obstack_grow (obstack, &cur_attr, sizeof (cur_attr));
}
cur_abbrev = (struct abbrev_info *) obstack_finish (obstack);
cur_abbrev->num_attrs = num_attrs;
+
+ if (!has_name && !has_linkage_name && !has_specification_or_origin)
+ {
+ /* Some anonymous DIEs are worth examining. */
+ cur_abbrev->interesting
+ = (cur_abbrev->tag == DW_TAG_namespace
+ || cur_abbrev->tag == DW_TAG_enumeration_type);
+ }
+ else if ((cur_abbrev->tag == DW_TAG_structure_type
+ || cur_abbrev->tag == DW_TAG_class_type
+ || cur_abbrev->tag == DW_TAG_union_type)
+ && cur_abbrev->has_children)
+ {
+ /* We have to record this as interesting, regardless of how
+ DW_AT_declaration is set, so that any subsequent
+ DW_AT_specification pointing at a child of this will get
+ the correct scope. */
+ cur_abbrev->interesting = true;
+ }
+ else if (has_hardcoded_declaration
+ && (cur_abbrev->tag != DW_TAG_variable || !has_external))
+ cur_abbrev->interesting = false;
+ else if (!tag_interesting_for_index (cur_abbrev->tag))
+ cur_abbrev->interesting = false;
+ else if (!has_location && !has_specification_or_origin && !has_external
+ && cur_abbrev->tag == DW_TAG_variable)
+ cur_abbrev->interesting = false;
+ else
+ cur_abbrev->interesting = true;
+
+ /* If there are no children, and the abbrev has a constant size,
+ then we don't care about the sibling offset, because it's
+ simple to just skip the entire DIE without reading a sibling
+ offset. */
+ if ((!cur_abbrev->has_children && is_csize)
+ /* Overflow. */
+ || sibling_offset != (unsigned short) sibling_offset)
+ sibling_offset = -1;
+ cur_abbrev->size_if_constant = is_csize ? size : 0;
+ cur_abbrev->sibling_offset = sibling_offset;
+
abbrev_table->add_abbrev (cur_abbrev);
}
diff --git a/gdb/dwarf2/abbrev.h b/gdb/dwarf2/abbrev.h
index 414296796e3..a3c7c637743 100644
--- a/gdb/dwarf2/abbrev.h
+++ b/gdb/dwarf2/abbrev.h
@@ -44,9 +44,12 @@ struct abbrev_info
/* Number identifying abbrev. */
unsigned int number;
/* DWARF tag. */
- enum dwarf_tag tag;
+ ENUM_BITFIELD (dwarf_tag) tag : 16;
/* True if the DIE has children. */
- unsigned short has_children;
+ bool has_children;
+ bool interesting;
+ unsigned short size_if_constant;
+ unsigned short sibling_offset;
/* Number of attributes. */
unsigned short num_attrs;
/* An array of attribute descriptions, allocated using the struct
@@ -85,9 +88,11 @@ struct abbrev_table
This is used as a sanity check when the table is used. */
const sect_offset sect_off;
+ struct dwarf2_section_info *section;
+
private:
- explicit abbrev_table (sect_offset off);
+ abbrev_table (sect_offset off, struct dwarf2_section_info *sect);
DISABLE_COPY_AND_ASSIGN (abbrev_table);
diff --git a/gdb/dwarf2/cooked-index.c b/gdb/dwarf2/cooked-index.c
new file mode 100644
index 00000000000..d8a1ab8d30e
--- /dev/null
+++ b/gdb/dwarf2/cooked-index.c
@@ -0,0 +1,341 @@
+/* DIE indexing
+
+ Copyright (C) 2022 Free Software Foundation, Inc.
+
+ This file is part of GDB.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#include "defs.h"
+#include "dwarf2/cooked-index.h"
+#include "dwarf2/read.h"
+#include "cp-support.h"
+#include "ada-lang.h"
+#include "split-name.h"
+#include <algorithm>
+
+/* Hash function for cooked_index_entry. */
+
+static hashval_t
+hash_entry (const void *e)
+{
+ const cooked_index_entry *entry = (const cooked_index_entry *) e;
+ return dwarf5_djb_hash (entry->canonical);
+}
+
+/* Equality function for cooked_index_entry. */
+
+static int
+eq_entry (const void *a, const void *b)
+{
+ const cooked_index_entry *ae = (const cooked_index_entry *) a;
+ const gdb::string_view *sv = (const gdb::string_view *) b;
+ return (strlen (ae->canonical) == sv->length ()
+ && strncasecmp (ae->canonical, sv->data (), sv->length ()) == 0);
+}
+
+/* See cooked-index.h. */
+
+const char *
+cooked_index_entry::full_name (struct obstack *storage) const
+{
+ if ((flags & IS_LINKAGE) != 0 || parent_entry == nullptr)
+ return canonical;
+
+ const char *sep = nullptr;
+ switch (per_cu->lang)
+ {
+ case language_cplus:
+ case language_rust:
+ sep = "::";
+ break;
+
+ case language_go:
+ case language_d:
+ case language_ada:
+ sep = ".";
+ break;
+
+ default:
+ return canonical;
+ }
+
+ parent_entry->write_scope (storage, sep);
+ obstack_grow0 (storage, canonical, strlen (canonical));
+ return (const char *) obstack_finish (storage);
+}
+
+/* See cooked-index.h. */
+
+void
+cooked_index_entry::write_scope (struct obstack *storage,
+ const char *sep) const
+{
+ if (parent_entry != nullptr)
+ parent_entry->write_scope (storage, sep);
+ obstack_grow (storage, canonical, strlen (canonical));
+ obstack_grow (storage, sep, strlen (sep));
+}
+
+/* See cooked-index.h. */
+
+const cooked_index_entry *
+cooked_index::add (sect_offset die_offset, enum dwarf_tag tag,
+ cooked_index_flag flags, const char *name,
+ const cooked_index_entry *parent_entry,
+ dwarf2_per_cu_data *per_cu)
+{
+ cooked_index_entry *result = create (die_offset, tag, flags, name,
+ parent_entry, per_cu);
+ m_entries.push_back (result);
+
+ /* An explicitly-tagged main program should always override the
+ implicit "main" discovery. */
+ if ((flags & IS_MAIN) != 0)
+ m_main = result;
+ else if (per_cu->lang != language_ada
+ && m_main == nullptr
+ && strcmp (name, "main") == 0)
+ m_main = result;
+
+ return result;
+}
+
+cooked_index_vector::cooked_index_vector (vec_type &&vec)
+ : m_vector (std::move (vec)),
+ m_future (gdb::thread_pool::g_thread_pool->post_task
+ ([this] ()
+ {
+ finalize ();
+ }))
+{
+}
+
+/* See cooked-index.h. */
+
+dwarf2_per_cu_data *
+cooked_index_vector::lookup (CORE_ADDR addr)
+{
+ for (const auto &index : m_vector)
+ {
+ dwarf2_per_cu_data *result = index->lookup (addr);
+ if (result != nullptr)
+ return result;
+ }
+ return nullptr;
+}
+
+/* See cooked-index.h. */
+
+std::vector<addrmap *>
+cooked_index_vector::get_addrmaps ()
+{
+ std::vector<addrmap *> result;
+ for (const auto &index : m_vector)
+ result.push_back (index->m_addrmap);
+ return result;
+}
+
+/* See cooked-index.h. */
+
+cooked_index_vector::range
+cooked_index_vector::find (gdb::string_view name, bool completing)
+{
+ m_future.wait ();
+
+ auto lower = std::lower_bound (m_entries.begin (), m_entries.end (),
+ name,
+ [=] (const cooked_index_entry *entry,
+ const gdb::string_view &n)
+ {
+ int cmp = strncasecmp (entry->canonical, n.data (), n.length ());
+ if (cmp != 0 || completing)
+ return cmp < 0;
+ return strlen (entry->canonical) < n.length ();
+ });
+
+ auto upper = std::upper_bound (m_entries.begin (), m_entries.end (),
+ name,
+ [=] (const gdb::string_view &n,
+ const cooked_index_entry *entry)
+ {
+ int cmp = strncasecmp (n.data (), entry->canonical, n.length ());
+ if (cmp != 0 || completing)
+ return cmp < 0;
+ return n.length () < strlen (entry->canonical);
+ });
+
+ return range (lower, upper);
+}
+
+/* See cooked-index.h. */
+
+gdb::unique_xmalloc_ptr<char>
+cooked_index_vector::handle_gnat_encoded_entry (cooked_index_entry *entry,
+ htab_t gnat_entries)
+{
+ std::string canonical = ada_decode (entry->name, false, false);
+ if (canonical.empty ())
+ return {};
+ std::vector<gdb::string_view> names = split_name (canonical.c_str (),
+ split_style::DOT);
+ gdb::string_view tail = names.back ();
+ names.pop_back ();
+
+ const cooked_index_entry *parent = nullptr;
+ for (const auto &name : names)
+ {
+ uint32_t hashval = dwarf5_djb_hash (name);
+ void **slot = htab_find_slot_with_hash (gnat_entries, &name,
+ hashval, INSERT);
+ /* CUs are processed in order, so we only need to check the most
+ recent entry. */
+ cooked_index_entry *last = (cooked_index_entry *) *slot;
+ if (last == nullptr || last->per_cu != entry->per_cu)
+ {
+ gdb::unique_xmalloc_ptr<char> new_name
+ = make_unique_xstrndup (name.data (), name.length ());
+ /* It doesn't matter which obstack we allocate this on, so
+ we pick the most convenient one. */
+ last = m_vector[0]->create (entry->die_offset, DW_TAG_namespace,
+ 0, new_name.get (), parent,
+ entry->per_cu);
+ last->canonical = last->name;
+ m_names.push_back (std::move (new_name));
+ *slot = last;
+ }
+
+ parent = last;
+ }
+
+ entry->parent_entry = parent;
+ return make_unique_xstrndup (tail.data (), tail.length ());
+}
+
+/* See cooked-index.h. */
+
+const cooked_index_entry *
+cooked_index_vector::get_main () const
+{
+ const cooked_index_entry *result = nullptr;
+
+ for (const auto &index : m_vector)
+ {
+ const cooked_index_entry *entry = index->get_main ();
+ if (result == nullptr
+ || ((result->flags & IS_MAIN) == 0
+ && entry != nullptr
+ && (entry->flags & IS_MAIN) != 0))
+ result = entry;
+ }
+
+ return result;
+}
+
+/* See cooked-index.h. */
+
+void
+cooked_index_vector::finalize ()
+{
+ auto hash_name_ptr = [] (const void *p)
+ {
+ const cooked_index_entry *entry = (const cooked_index_entry *) p;
+ return htab_hash_pointer (entry->name);
+ };
+
+ auto eq_name_ptr = [] (const void *a, const void *b) -> int
+ {
+ const cooked_index_entry *ea = (const cooked_index_entry *) a;
+ const cooked_index_entry *eb = (const cooked_index_entry *) b;
+ return ea->name == eb->name;
+ };
+
+ /* We can use pointer equality here because names come from
+ .debug_str, which will normally be unique-ified by the linker.
+ Also, duplicates are relatively harmless -- they just mean a bit
+ of extra memory is used. */
+ htab_up seen_names (htab_create_alloc (10, hash_name_ptr, eq_name_ptr,
+ nullptr, xcalloc, xfree));
+
+ for (auto &index : m_vector)
+ {
+ htab_up gnat_entries (htab_create_alloc (10, hash_entry, eq_entry,
+ nullptr, xcalloc, xfree));
+
+ std::vector<cooked_index_entry *> entries
+ = std::move (index->m_entries);
+ for (cooked_index_entry *entry : entries)
+ {
+ gdb_assert (entry->canonical == nullptr);
+ if ((entry->per_cu->lang != language_cplus
+ && entry->per_cu->lang != language_ada)
+ || (entry->flags & IS_LINKAGE) != 0)
+ entry->canonical = entry->name;
+ else
+ {
+ if (entry->per_cu->lang == language_ada)
+ {
+ gdb::unique_xmalloc_ptr<char> canon_name
+ = handle_gnat_encoded_entry (entry, gnat_entries.get ());
+ if (canon_name == nullptr)
+ entry->canonical = entry->name;
+ else
+ {
+ entry->canonical = canon_name.get ();
+ m_names.push_back (std::move (canon_name));
+ }
+ }
+ else
+ {
+ void **slot = htab_find_slot (seen_names.get (), entry,
+ INSERT);
+ if (*slot == nullptr)
+ {
+ gdb::unique_xmalloc_ptr<char> canon_name
+ = cp_canonicalize_string (entry->name);
+ if (canon_name == nullptr)
+ entry->canonical = entry->name;
+ else
+ {
+ entry->canonical = canon_name.get ();
+ m_names.push_back (std::move (canon_name));
+ }
+ }
+ else
+ {
+ const cooked_index_entry *other
+ = (const cooked_index_entry *) *slot;
+ entry->canonical = other->canonical;
+ }
+ }
+ }
+ }
+
+ if (m_entries.empty ())
+ m_entries = std::move (entries);
+ else
+ {
+ m_entries.reserve (m_entries.size () + entries.size ());
+ m_entries.insert (m_entries.end (), entries.begin (), entries.end ());
+ }
+ }
+
+ m_names.shrink_to_fit ();
+ m_entries.shrink_to_fit ();
+ std::sort (m_entries.begin (), m_entries.end (),
+ [] (const cooked_index_entry *a, const cooked_index_entry *b)
+ {
+ return *a < *b;
+ });
+}
diff --git a/gdb/dwarf2/cooked-index.h b/gdb/dwarf2/cooked-index.h
new file mode 100644
index 00000000000..a460351612f
--- /dev/null
+++ b/gdb/dwarf2/cooked-index.h
@@ -0,0 +1,336 @@
+/* DIE indexing
+
+ Copyright (C) 2022 Free Software Foundation, Inc.
+
+ This file is part of GDB.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#ifndef GDB_DWARF2_COOKED_INDEX_H
+#define GDB_DWARF2_COOKED_INDEX_H
+
+#include "dwarf2.h"
+#include "gdbtypes.h"
+#include "symtab.h"
+#include "hashtab.h"
+#include "dwarf2/index-common.h"
+#include "gdbsupport/gdb_string_view.h"
+#include "quick-symbol.h"
+#include "gdbsupport/gdb_obstack.h"
+#include "addrmap.h"
+#include "gdbsupport/iterator-range.h"
+#include "gdbsupport/thread-pool.h"
+#include "dwarf2/mapped-index.h"
+#include "dwarf2/tag.h"
+
+struct dwarf2_per_cu_data;
+
+/* Flags that describe an entry in the index. */
+enum cooked_index_flag_enum : unsigned char
+{
+ /* True if this entry is the program's "main". */
+ IS_MAIN = 1,
+ /* True if this entry represents a "static" object. */
+ IS_STATIC = 2,
+ /* True if this entry is an "enum class". */
+ IS_ENUM_CLASS = 4,
+ /* True if this entry uses the linkage name. */
+ IS_LINKAGE = 8,
+};
+DEF_ENUM_FLAGS_TYPE (enum cooked_index_flag_enum, cooked_index_flag);
+
+/* A cooked_index_entry represents a single item in the index. Note
+ that two entries can be created for the same DIE -- one using the
+ name, and another one using the linkage name, if any.
+
+ This is an "open" class and the members are all directly
+ accessible. It is read-only after the index has been fully read
+ and processed. */
+struct cooked_index_entry : public allocate_on_obstack
+{
+ cooked_index_entry (sect_offset die_offset_, enum dwarf_tag tag_,
+ cooked_index_flag flags_, const char *name_,
+ const cooked_index_entry *parent_entry_,
+ dwarf2_per_cu_data *per_cu_)
+ : name (name_),
+ tag (tag_),
+ flags (flags_),
+ die_offset (die_offset_),
+ parent_entry (parent_entry_),
+ per_cu (per_cu_)
+ {
+ }
+
+ /* Return true if this entry matches SEARCH_FLAGS. */
+ bool matches (block_search_flags search_flags) const
+ {
+ if ((search_flags & SEARCH_STATIC_BLOCK) != 0
+ && (flags & IS_STATIC) != 0)
+ return true;
+ if ((search_flags & SEARCH_GLOBAL_BLOCK) != 0
+ && (flags & IS_STATIC) == 0)
+ return true;
+ return false;
+ }
+
+ /* Return true if this entry matches DOMAIN. */
+ bool matches (domain_enum domain) const
+ {
+ switch (domain)
+ {
+ case LABEL_DOMAIN:
+ return false;
+
+ case MODULE_DOMAIN:
+ return tag == DW_TAG_module;
+
+ case COMMON_BLOCK_DOMAIN:
+ return tag == DW_TAG_common_block;
+ }
+
+ return true;
+ }
+
+ /* Return true if this entry matches KIND. */
+ bool matches (enum search_domain kind) const
+ {
+ switch (kind)
+ {
+ case VARIABLES_DOMAIN:
+ return (tag == DW_TAG_variable
+ || tag == DW_TAG_constant
+ || tag == DW_TAG_enumerator);
+ case FUNCTIONS_DOMAIN:
+ return tag == DW_TAG_subprogram;
+ case TYPES_DOMAIN:
+ return tag_is_type (tag);
+ case MODULES_DOMAIN:
+ return tag == DW_TAG_module;
+ }
+
+ return true;
+ }
+
+ /* Construct the fully-qualified name of this entry and return a
+ pointer to it. If allocation is needed, it will be done on
+ STORAGE. */
+ const char *full_name (struct obstack *storage) const;
+
+ /* Entries must be sorted case-insensitively; this compares two
+ entries. */
+ bool operator< (const cooked_index_entry &other) const
+ {
+ return strcasecmp (canonical, other.canonical) < 0;
+ }
+
+ /* The name as it appears in DWARF. This always points into one of
+ the mapped DWARF sections. Note that this may be the name or the
+ linkage name -- two entries are created for DIEs which have both
+ attributes. */
+ const char *name;
+ /* The canonical name. For C++ names, this may differ from NAME.
+ In all other cases, this is equal to NAME. */
+ const char *canonical = nullptr;
+ /* The DWARF tag. */
+ enum dwarf_tag tag;
+ /* Any flags attached to this entry. */
+ cooked_index_flag flags;
+ /* The offset of this DIE. */
+ sect_offset die_offset;
+ /* The parent entry. This is NULL for top-level entries.
+ Otherwise, it points to the parent entry, such as a namespace or
+ class. */
+ const cooked_index_entry *parent_entry;
+ /* The CU from which this entry originates. */
+ dwarf2_per_cu_data *per_cu;
+
+private:
+
+ void write_scope (struct obstack *storage, const char *sep) const;
+};
+
+class cooked_index_vector;
+
+/* An index of interesting DIEs. This is "cooked", in contrast to a
+ mapped .debug_names or .gdb_index, which are "raw". An entry in
+ the index is of type cooked_index_entry.
+
+ Operations on the index are described below. They are chosen to
+ make it relatively simple to implement the symtab "quick"
+ methods. */
+class cooked_index
+{
+public:
+ cooked_index () = default;
+ DISABLE_COPY_AND_ASSIGN (cooked_index);
+
+ /* Create a new cooked_index_entry and register it with this object.
+ Entries are owned by this object. The new item is returned. */
+ const cooked_index_entry *add (sect_offset die_offset, enum dwarf_tag tag,
+ cooked_index_flag flags,
+ const char *name,
+ const cooked_index_entry *parent_entry,
+ dwarf2_per_cu_data *per_cu);
+
+ /* Install a new fixed addrmap from the given mutable addrmap. */
+ void install_addrmap (addrmap *map)
+ {
+ gdb_assert (m_addrmap == nullptr);
+ m_addrmap = addrmap_create_fixed (map, &m_storage);
+ }
+
+ friend class cooked_index_vector;
+
+private:
+
+ /* Return the entry that is believed to represent the program's
+ "main". This will return NULL if no such entry is available. */
+ const cooked_index_entry *get_main () const
+ {
+ return m_main;
+ }
+
+ /* Look up ADDR in the address map, and return either the
+ corresponding CU, or nullptr if the address could not be
+ found. */
+ dwarf2_per_cu_data *lookup (CORE_ADDR addr)
+ {
+ return (dwarf2_per_cu_data *) addrmap_find (m_addrmap, addr);
+ }
+
+ /* Create a new cooked_index_entry and register it with this object.
+ Entries are owned by this object. The new item is returned. */
+ cooked_index_entry *create (sect_offset die_offset,
+ enum dwarf_tag tag,
+ cooked_index_flag flags,
+ const char *name,
+ const cooked_index_entry *parent_entry,
+ dwarf2_per_cu_data *per_cu)
+ {
+ return new (&m_storage) cooked_index_entry (die_offset, tag, flags,
+ name, parent_entry,
+ per_cu);
+ }
+
+ /* Storage for the entries. */
+ auto_obstack m_storage;
+ /* List of all entries. */
+ std::vector<cooked_index_entry *> m_entries;
+ /* If we found "main" or an entry with 'is_main' set, store it
+ here. */
+ cooked_index_entry *m_main = nullptr;
+ /* When constructing the index, entries are stored on a linked list.
+ This member points to the head of that list. Later, they are
+ entered into the hash table, at which point this is no longer
+ used. */
+ cooked_index_entry *m_start = nullptr;
+ /* The addrmap. This maps address ranges to dwarf2_per_cu_data
+ objects. */
+ addrmap *m_addrmap = nullptr;
+};
+
+/* The main index of DIEs. The parallel DIE indexers create
+ cooked_index objects. Then, these are all handled to a
+ cooked_index_vector for storage and final indexing. The index is
+ made by iterating over the entries previously created. */
+
+class cooked_index_vector : public dwarf_scanner_base
+{
+public:
+
+ /* A convenience typedef for the vector that is contained in this
+ object. */
+ typedef std::vector<std::unique_ptr<cooked_index>> vec_type;
+
+ explicit cooked_index_vector (vec_type &&vec);
+ DISABLE_COPY_AND_ASSIGN (cooked_index_vector);
+
+ ~cooked_index_vector ()
+ {
+ /* The 'finalize' method may be run in a different thread. If
+ this object is destroyed before this completes, then the method
+ will end up writing to freed memory. Waiting for this to
+ complete avoids this problem; and the cost seems ignorable
+ because creating and immediately destroying the debug info is a
+ relatively rare thing to do. */
+ m_future.wait ();
+ }
+
+ /* A simple range over part of m_entries. */
+ typedef iterator_range<std::vector<cooked_index_entry *>::iterator> range;
+
+ /* Look up an entry by name. Returns a range of all matching
+ results. If COMPLETING is true, then a larger range, suitable
+ for completion, will be returned. */
+ range find (gdb::string_view name, bool completing);
+
+ /* Return a range of all the entries. */
+ range all_entries ()
+ {
+ m_future.wait ();
+ return { m_entries.begin (), m_entries.end () };
+ }
+
+ /* Look up ADDR in the address map, and return either the
+ corresponding CU, or nullptr if the address could not be
+ found. */
+ dwarf2_per_cu_data *lookup (CORE_ADDR addr);
+
+ /* Return a new vector of all the addrmaps used by all the indexes
+ held by this object. */
+ std::vector<addrmap *> get_addrmaps ();
+
+ /* Return the entry that is believed to represent the program's
+ "main". This will return NULL if no such entry is available. */
+ const cooked_index_entry *get_main () const;
+
+ cooked_index_vector *index_for_writing () override
+ {
+ return this;
+ }
+
+ quick_symbol_functions_up make_quick_functions () const override;
+
+private:
+
+ /* GNAT only emits mangled ("encoded") names in the DWARF, and does
+ not emit the module structure. However, we need this structure
+ to do lookups. This function recreates that structure for an
+ existing entry. It returns the base name (last element) of the
+ full decoded name. */
+ gdb::unique_xmalloc_ptr<char> handle_gnat_encoded_entry
+ (cooked_index_entry *entry, htab_t gnat_entries);
+
+ /* Finalize the index. This should be called a single time, when
+ the index has been fully populated. It enters all the entries
+ into the internal hash table. */
+ void finalize ();
+
+ /* The vector of cooked_index objects. This is stored because the
+ entries are stored on the obstacks in those objects. */
+ vec_type m_vector;
+
+ /* List of all entries. This is sorted during finalization. */
+ std::vector<cooked_index_entry *> m_entries;
+
+ /* Storage for canonical names. */
+ std::vector<gdb::unique_xmalloc_ptr<char>> m_names;
+
+ /* A future that tracks when the 'finalize' method is done. Note
+ that the 'get' method is never called on this future, only
+ 'wait'. */
+ std::future<void> m_future;
+};
+
+#endif /* GDB_DWARF2_COOKED_INDEX_H */
diff --git a/gdb/dwarf2/cu.c b/gdb/dwarf2/cu.c
index 019165f6e6c..fcb0d77623b 100644
--- a/gdb/dwarf2/cu.c
+++ b/gdb/dwarf2/cu.c
@@ -20,6 +20,7 @@
#include "defs.h"
#include "dwarf2/cu.h"
#include "dwarf2/read.h"
+#include "objfiles.h"
/* Initialize dwarf2_cu to read PER_CU, in the context of PER_OBJFILE. */
@@ -32,6 +33,7 @@ dwarf2_cu::dwarf2_cu (dwarf2_per_cu_data *per_cu,
checked_producer (false),
producer_is_gxx_lt_4_6 (false),
producer_is_gcc_lt_4_3 (false),
+ producer_is_gcc_11 (false),
producer_is_icc (false),
producer_is_icc_lt_14 (false),
producer_is_codewarrior (false),
@@ -53,8 +55,8 @@ dwarf2_cu::addr_sized_int_type (bool unsigned_p) const
buildsym_compunit constructor. */
struct compunit_symtab *
-dwarf2_cu::start_symtab (const char *name, const char *comp_dir,
- CORE_ADDR low_pc)
+dwarf2_cu::start_compunit_symtab (const char *name, const char *comp_dir,
+ CORE_ADDR low_pc)
{
gdb_assert (m_builder == nullptr);
diff --git a/gdb/dwarf2/cu.h b/gdb/dwarf2/cu.h
index 078479a5698..6b72ec234bf 100644
--- a/gdb/dwarf2/cu.h
+++ b/gdb/dwarf2/cu.h
@@ -59,11 +59,11 @@ struct dwarf2_cu
We don't need the pc/line-number mapping for type units. */
void setup_type_unit_groups (struct die_info *die);
- /* Start a symtab for DWARF. NAME, COMP_DIR, LOW_PC are passed to the
- buildsym_compunit constructor. */
- struct compunit_symtab *start_symtab (const char *name,
- const char *comp_dir,
- CORE_ADDR low_pc);
+ /* Start a compunit_symtab for DWARF. NAME, COMP_DIR, LOW_PC are passed to
+ the buildsym_compunit constructor. */
+ struct compunit_symtab *start_compunit_symtab (const char *name,
+ const char *comp_dir,
+ CORE_ADDR low_pc);
/* Reset the builder. */
void reset_builder () { m_builder.reset (); }
@@ -253,6 +253,7 @@ public:
bool checked_producer : 1;
bool producer_is_gxx_lt_4_6 : 1;
bool producer_is_gcc_lt_4_3 : 1;
+ bool producer_is_gcc_11 : 1;
bool producer_is_icc : 1;
bool producer_is_icc_lt_14 : 1;
bool producer_is_codewarrior : 1;
diff --git a/gdb/dwarf2/expr.h b/gdb/dwarf2/expr.h
index f76257fd220..4ce9b734f77 100644
--- a/gdb/dwarf2/expr.h
+++ b/gdb/dwarf2/expr.h
@@ -320,4 +320,4 @@ extern const gdb_byte *safe_read_sleb128 (const gdb_byte *buf,
extern const gdb_byte *safe_skip_leb128 (const gdb_byte *buf,
const gdb_byte *buf_end);
-#endif /* dwarf2expr.h */
+#endif /* DWARF2EXPR_H */
diff --git a/gdb/dwarf2/file-and-dir.h b/gdb/dwarf2/file-and-dir.h
index a392636830d..1113fe09623 100644
--- a/gdb/dwarf2/file-and-dir.h
+++ b/gdb/dwarf2/file-and-dir.h
@@ -28,6 +28,7 @@
#define GDB_DWARF2_FILE_AND_DIR_H
#include "objfiles.h"
+#include "source.h"
#include <string>
/* The return type of find_file_and_directory. Note, the enclosed
@@ -90,6 +91,20 @@ struct file_and_directory
m_name = m_name_storage.get ();
}
+ /* Return the full name, computing it if necessary. */
+ const char *get_fullname ()
+ {
+ if (m_fullname == nullptr)
+ m_fullname = find_source_or_rewrite (get_name (), get_comp_dir ());
+ return m_fullname.get ();
+ }
+
+ /* Forget the full name. */
+ void forget_fullname ()
+ {
+ m_fullname.reset ();
+ }
+
private:
/* The filename. */
@@ -106,6 +121,9 @@ private:
/* The compilation directory, if it needed to be allocated. */
std::string m_comp_dir_storage;
+
+ /* The full name. */
+ gdb::unique_xmalloc_ptr<char> m_fullname;
};
#endif /* GDB_DWARF2_FILE_AND_DIR_H */
diff --git a/gdb/dwarf2/frame.c b/gdb/dwarf2/frame.c
index b4e699c37e1..5878d72f922 100644
--- a/gdb/dwarf2/frame.c
+++ b/gdb/dwarf2/frame.c
@@ -179,7 +179,7 @@ static CORE_ADDR read_encoded_value (struct comp_unit *unit, gdb_byte encoding,
CORE_ADDR func_base);
-/* See dwarf2-frame.h. */
+/* See dwarf2/frame.h. */
bool dwarf2_frame_unwinders_enabled_p = true;
/* Store the length the expression for the CFA in the `cfa_reg' field,
@@ -745,7 +745,7 @@ dwarf2_frame_find_quirks (struct dwarf2_frame_state *fs,
if (cust == NULL)
return;
- if (producer_is_realview (COMPUNIT_PRODUCER (cust)))
+ if (producer_is_realview (cust->producer ()))
{
if (fde->cie->version == 1)
fs->armcc_cfa_offsets_sf = 1;
@@ -769,7 +769,7 @@ dwarf2_frame_find_quirks (struct dwarf2_frame_state *fs,
}
-/* See dwarf2-frame.h. */
+/* See dwarf2/frame.h. */
int
dwarf2_fetch_cfa_info (struct gdbarch *gdbarch, CORE_ADDR pc,
@@ -2192,9 +2192,9 @@ show_dwarf_unwinders_enabled_p (struct ui_file *file, int from_tty,
struct cmd_list_element *c,
const char *value)
{
- fprintf_filtered (file,
- _("The DWARF stack unwinders are currently %s.\n"),
- value);
+ gdb_printf (file,
+ _("The DWARF stack unwinders are currently %s.\n"),
+ value);
}
void _initialize_dwarf2_frame ();
diff --git a/gdb/dwarf2/index-cache.c b/gdb/dwarf2/index-cache.c
index fa6b7abccd5..a1f6ff59634 100644
--- a/gdb/dwarf2/index-cache.c
+++ b/gdb/dwarf2/index-cache.c
@@ -63,7 +63,7 @@ index_cache::set_directory (std::string dir)
m_dir = std::move (dir);
- index_cache_debug ("now using directory %s\n", m_dir.c_str ());
+ index_cache_debug ("now using directory %s", m_dir.c_str ());
}
/* See dwarf-index-cache.h. */
@@ -71,7 +71,7 @@ index_cache::set_directory (std::string dir)
void
index_cache::enable ()
{
- index_cache_debug ("enabling (%s)\n", m_dir.c_str ());
+ index_cache_debug ("enabling (%s)", m_dir.c_str ());
m_enabled = true;
}
@@ -81,7 +81,7 @@ index_cache::enable ()
void
index_cache::disable ()
{
- index_cache_debug ("disabling\n");
+ index_cache_debug ("disabling");
m_enabled = false;
}
@@ -96,11 +96,15 @@ index_cache::store (dwarf2_per_objfile *per_objfile)
if (!enabled ())
return;
+ /* If the objfile does not correspond to an actual file, skip it. */
+ if ((obj->flags & OBJF_NOT_FILENAME) != 0)
+ return;
+
/* Get build id of objfile. */
const bfd_build_id *build_id = build_id_bfd_get (obj->obfd);
if (build_id == nullptr)
{
- index_cache_debug ("objfile %s has no build id\n",
+ index_cache_debug ("objfile %s has no build id",
objfile_name (obj));
return;
}
@@ -118,7 +122,7 @@ index_cache::store (dwarf2_per_objfile *per_objfile)
if (dwz_build_id == nullptr)
{
- index_cache_debug ("dwz objfile %s has no build id\n",
+ index_cache_debug ("dwz objfile %s has no build id",
dwz->filename ());
return;
}
@@ -143,19 +147,19 @@ index_cache::store (dwarf2_per_objfile *per_objfile)
return;
}
- index_cache_debug ("writing index cache for objfile %s\n",
+ index_cache_debug ("writing index cache for objfile %s",
objfile_name (obj));
/* Write the index itself to the directory, using the build id as the
filename. */
- write_psymtabs_to_index (per_objfile, m_dir.c_str (),
- build_id_str.c_str (), dwz_build_id_ptr,
- dw_index_kind::GDB_INDEX);
+ write_dwarf_index (per_objfile, m_dir.c_str (),
+ build_id_str.c_str (), dwz_build_id_ptr,
+ dw_index_kind::GDB_INDEX);
}
catch (const gdb_exception_error &except)
{
- index_cache_debug ("couldn't store index cache for objfile "
- "%s: %s", objfile_name (obj), except.what ());
+ index_cache_debug ("couldn't store index cache for objfile %s: %s",
+ objfile_name (obj), except.what ());
}
}
@@ -195,7 +199,7 @@ index_cache::lookup_gdb_index (const bfd_build_id *build_id,
try
{
- index_cache_debug ("trying to read %s\n",
+ index_cache_debug ("trying to read %s",
filename.c_str ());
/* Try to map that file. */
@@ -211,7 +215,7 @@ index_cache::lookup_gdb_index (const bfd_build_id *build_id,
}
catch (const gdb_exception_error &except)
{
- index_cache_debug ("couldn't read %s: %s\n",
+ index_cache_debug ("couldn't read %s: %s",
filename.c_str (), except.what ());
}
@@ -257,8 +261,8 @@ show_index_cache_command (const char *arg, int from_tty)
/* Call all "show index-cache" subcommands. */
cmd_show_list (show_index_cache_prefix_list, from_tty);
- printf_filtered ("\n");
- printf_filtered
+ gdb_printf ("\n");
+ gdb_printf
(_("The index cache is currently %s.\n"),
global_index_cache.enabled () ? _("enabled") : _("disabled"));
}
@@ -288,7 +292,7 @@ static void
show_index_cache_enabled_command (ui_file *stream, int from_tty,
cmd_list_element *cmd, const char *value)
{
- fprintf_filtered (stream, _("The index cache is %s.\n"), value);
+ gdb_printf (stream, _("The index cache is %s.\n"), value);
}
/* "set index-cache directory" handler. */
@@ -298,9 +302,7 @@ set_index_cache_directory_command (const char *arg, int from_tty,
cmd_list_element *element)
{
/* Make sure the index cache directory is absolute and tilde-expanded. */
- gdb::unique_xmalloc_ptr<char> abs
- = gdb_abspath (index_cache_directory.c_str ());
- index_cache_directory = abs.get ();
+ index_cache_directory = gdb_abspath (index_cache_directory.c_str ());
global_index_cache.set_directory (index_cache_directory);
}
@@ -316,13 +318,13 @@ show_index_cache_stats_command (const char *arg, int from_tty)
if (in_show_index_cache_command)
{
indent = " ";
- printf_filtered ("\n");
+ gdb_printf ("\n");
}
- printf_filtered (_("%s Cache hits (this session): %u\n"),
- indent, global_index_cache.n_hits ());
- printf_filtered (_("%sCache misses (this session): %u\n"),
- indent, global_index_cache.n_misses ());
+ gdb_printf (_("%s Cache hits (this session): %u\n"),
+ indent, global_index_cache.n_hits ());
+ gdb_printf (_("%sCache misses (this session): %u\n"),
+ indent, global_index_cache.n_misses ());
}
void _initialize_index_cache ();
diff --git a/gdb/dwarf2/index-common.c b/gdb/dwarf2/index-common.c
index c2bb1c6f78e..d8f9973d6cc 100644
--- a/gdb/dwarf2/index-common.c
+++ b/gdb/dwarf2/index-common.c
@@ -54,3 +54,17 @@ dwarf5_djb_hash (const char *str_)
hash = hash * 33 + tolower (c);
return hash;
}
+
+/* See dwarf-index-common.h. */
+
+uint32_t
+dwarf5_djb_hash (gdb::string_view str)
+{
+ /* Note: tolower here ignores UTF-8, which isn't fully compliant.
+ See http://dwarfstd.org/ShowIssue.php?issue=161027.1. */
+
+ uint32_t hash = 5381;
+ for (char c : str)
+ hash = hash * 33 + tolower (c & 0xff);
+ return hash;
+}
diff --git a/gdb/dwarf2/index-common.h b/gdb/dwarf2/index-common.h
index 049e1d894f1..cbfb88a4e98 100644
--- a/gdb/dwarf2/index-common.h
+++ b/gdb/dwarf2/index-common.h
@@ -52,4 +52,8 @@ hashval_t mapped_index_string_hash (int index_version, const void *p);
uint32_t dwarf5_djb_hash (const char *str_);
+/* Symbol name hashing function as specified by DWARF-5. */
+
+uint32_t dwarf5_djb_hash (gdb::string_view str_);
+
#endif /* DWARF_INDEX_COMMON_H */
diff --git a/gdb/dwarf2/index-write.c b/gdb/dwarf2/index-write.c
index 7a6bc24a3e6..dfa74ddad8e 100644
--- a/gdb/dwarf2/index-write.c
+++ b/gdb/dwarf2/index-write.c
@@ -36,8 +36,8 @@
#include "gdb/gdb-index.h"
#include "gdbcmd.h"
#include "objfiles.h"
-#include "psympriv.h"
#include "ada-lang.h"
+#include "dwarf2/tag.h"
#include <algorithm>
#include <cmath>
@@ -189,7 +189,7 @@ struct mapped_symtab
offset_type n_elements = 0;
std::vector<symtab_index_entry> data;
- /* Temporary storage for Ada names. */
+ /* Temporary storage for names. */
auto_obstack m_string_obstack;
};
@@ -407,17 +407,18 @@ write_hash_table (mapped_symtab *symtab, data_buf &output, data_buf &cpool)
}
}
-typedef std::unordered_map<partial_symtab *, unsigned int> psym_index_map;
+typedef std::unordered_map<dwarf2_per_cu_data *, unsigned int> cu_index_map;
/* Helper struct for building the address table. */
struct addrmap_index_data
{
- addrmap_index_data (data_buf &addr_vec_, psym_index_map &cu_index_htab_)
- : addr_vec (addr_vec_), cu_index_htab (cu_index_htab_)
+ addrmap_index_data (data_buf &addr_vec_, cu_index_map &cu_index_htab_)
+ : addr_vec (addr_vec_),
+ cu_index_htab (cu_index_htab_)
{}
data_buf &addr_vec;
- psym_index_map &cu_index_htab;
+ cu_index_map &cu_index_htab;
int operator() (CORE_ADDR start_addr, void *obj);
@@ -447,7 +448,7 @@ add_address_entry (data_buf &addr_vec,
int
addrmap_index_data::operator() (CORE_ADDR start_addr, void *obj)
{
- partial_symtab *pst = (partial_symtab *) obj;
+ dwarf2_per_cu_data *per_cu = (dwarf2_per_cu_data *) obj;
if (previous_valid)
add_address_entry (addr_vec,
@@ -455,9 +456,9 @@ addrmap_index_data::operator() (CORE_ADDR start_addr, void *obj)
previous_cu_index);
previous_cu_start = start_addr;
- if (pst != NULL)
+ if (per_cu != NULL)
{
- const auto it = cu_index_htab.find (pst);
+ const auto it = cu_index_htab.find (per_cu);
gdb_assert (it != cu_index_htab.cend ());
previous_cu_index = it->second;
previous_valid = true;
@@ -473,13 +474,12 @@ addrmap_index_data::operator() (CORE_ADDR start_addr, void *obj)
in the index file. */
static void
-write_address_map (dwarf2_per_bfd *per_bfd, data_buf &addr_vec,
- psym_index_map &cu_index_htab)
+write_address_map (struct addrmap *addrmap, data_buf &addr_vec,
+ cu_index_map &cu_index_htab)
{
struct addrmap_index_data addrmap_index_data (addr_vec, cu_index_htab);
- addrmap_foreach (per_bfd->partial_symtabs->psymtabs_addrmap,
- addrmap_index_data);
+ addrmap_foreach (addrmap, addrmap_index_data);
/* It's highly unlikely the last entry (end address = 0xff...ff)
is valid, but we should still handle it.
@@ -492,142 +492,6 @@ write_address_map (dwarf2_per_bfd *per_bfd, data_buf &addr_vec,
addrmap_index_data.previous_cu_index);
}
-/* Return the symbol kind of PSYM. */
-
-static gdb_index_symbol_kind
-symbol_kind (struct partial_symbol *psym)
-{
- domain_enum domain = psym->domain;
- enum address_class aclass = psym->aclass;
-
- switch (domain)
- {
- case VAR_DOMAIN:
- switch (aclass)
- {
- case LOC_BLOCK:
- return GDB_INDEX_SYMBOL_KIND_FUNCTION;
- case LOC_TYPEDEF:
- return GDB_INDEX_SYMBOL_KIND_TYPE;
- case LOC_COMPUTED:
- case LOC_CONST_BYTES:
- case LOC_OPTIMIZED_OUT:
- case LOC_STATIC:
- return GDB_INDEX_SYMBOL_KIND_VARIABLE;
- case LOC_CONST:
- /* Note: It's currently impossible to recognize psyms as enum values
- short of reading the type info. For now punt. */
- return GDB_INDEX_SYMBOL_KIND_VARIABLE;
- default:
- /* There are other LOC_FOO values that one might want to classify
- as variables, but dwarf2read.c doesn't currently use them. */
- return GDB_INDEX_SYMBOL_KIND_OTHER;
- }
- case STRUCT_DOMAIN:
- return GDB_INDEX_SYMBOL_KIND_TYPE;
- default:
- return GDB_INDEX_SYMBOL_KIND_OTHER;
- }
-}
-
-/* Add a list of partial symbols to SYMTAB. */
-
-static void
-write_psymbols (struct mapped_symtab *symtab,
- std::unordered_set<partial_symbol *> &psyms_seen,
- const std::vector<partial_symbol *> &symbols,
- offset_type cu_index,
- int is_static)
-{
- for (partial_symbol *psym : symbols)
- {
- const char *name = psym->ginfo.search_name ();
-
- if (psym->ginfo.language () == language_ada)
- {
- /* We want to ensure that the Ada main function's name appears
- verbatim in the index. However, this name will be of the
- form "_ada_mumble", and will be rewritten by ada_decode.
- So, recognize it specially here and add it to the index by
- hand. */
- if (strcmp (main_name (), name) == 0)
- {
- gdb_index_symbol_kind kind = symbol_kind (psym);
-
- add_index_entry (symtab, name, is_static, kind, cu_index);
- }
-
- /* In order for the index to work when read back into gdb, it
- has to supply a funny form of the name: it should be the
- encoded name, with any suffixes stripped. Using the
- ordinary encoded name will not work properly with the
- searching logic in find_name_components_bounds; nor will
- using the decoded name. Furthermore, an Ada "verbatim"
- name (of the form "<MumBle>") must be entered without the
- angle brackets. Note that the current index is unusual,
- see PR symtab/24820 for details. */
- std::string decoded = ada_decode (name);
- if (decoded[0] == '<')
- name = (char *) obstack_copy0 (&symtab->m_string_obstack,
- decoded.c_str () + 1,
- decoded.length () - 2);
- else
- name = obstack_strdup (&symtab->m_string_obstack,
- ada_encode (decoded.c_str ()));
- }
-
- /* Only add a given psymbol once. */
- if (psyms_seen.insert (psym).second)
- {
- gdb_index_symbol_kind kind = symbol_kind (psym);
-
- add_index_entry (symtab, name, is_static, kind, cu_index);
- }
- }
-}
-
-/* Recurse into all "included" dependencies and count their symbols as
- if they appeared in this psymtab. */
-
-static void
-recursively_count_psymbols (partial_symtab *psymtab,
- size_t &psyms_seen)
-{
- for (int i = 0; i < psymtab->number_of_dependencies; ++i)
- if (psymtab->dependencies[i]->user != NULL)
- recursively_count_psymbols (psymtab->dependencies[i],
- psyms_seen);
-
- psyms_seen += psymtab->global_psymbols.size ();
- psyms_seen += psymtab->static_psymbols.size ();
-}
-
-/* Recurse into all "included" dependencies and write their symbols as
- if they appeared in this psymtab. */
-
-static void
-recursively_write_psymbols (struct objfile *objfile,
- partial_symtab *psymtab,
- struct mapped_symtab *symtab,
- std::unordered_set<partial_symbol *> &psyms_seen,
- offset_type cu_index)
-{
- int i;
-
- for (i = 0; i < psymtab->number_of_dependencies; ++i)
- if (psymtab->dependencies[i]->user != NULL)
- recursively_write_psymbols (objfile,
- psymtab->dependencies[i],
- symtab, psyms_seen, cu_index);
-
- write_psymbols (symtab, psyms_seen,
- psymtab->global_psymbols, cu_index,
- 0);
- write_psymbols (symtab, psyms_seen,
- psymtab->static_psymbols, cu_index,
- 1);
-}
-
/* DWARF-5 .debug_names builder. */
class debug_names
{
@@ -655,15 +519,10 @@ public:
enum class unit_kind { cu, tu };
/* Insert one symbol. */
- void insert (const partial_symbol *psym, int cu_index, bool is_static,
- unit_kind kind)
+ void insert (int dwarf_tag, const char *name, int cu_index, bool is_static,
+ unit_kind kind, enum language lang)
{
- const int dwarf_tag = psymbol_tag (psym);
- if (dwarf_tag == 0)
- return;
- const char *name = psym->ginfo.search_name ();
-
- if (psym->ginfo.language () == language_ada)
+ if (lang == language_ada)
{
/* We want to ensure that the Ada main function's name appears
verbatim in the index. However, this name will be of the
@@ -706,6 +565,27 @@ public:
value_set.emplace (symbol_value (dwarf_tag, cu_index, is_static, kind));
}
+ void insert (const cooked_index_entry *entry)
+ {
+ const auto it = m_cu_index_htab.find (entry->per_cu);
+ gdb_assert (it != m_cu_index_htab.cend ());
+ const char *name = entry->full_name (&m_string_obstack);
+
+ /* This is incorrect but it mirrors gdb's historical behavior; and
+ because the current .debug_names generation is also incorrect,
+ it seems better to follow what was done before, rather than
+ introduce a mismatch between the newer and older gdb. */
+ dwarf_tag tag = entry->tag;
+ if (tag != DW_TAG_typedef && tag_is_type (tag))
+ tag = DW_TAG_structure_type;
+ else if (tag == DW_TAG_enumerator || tag == DW_TAG_constant)
+ tag = DW_TAG_variable;
+
+ insert (tag, name, it->second, (entry->flags & IS_STATIC) != 0,
+ entry->per_cu->is_debug_types ? unit_kind::tu : unit_kind::cu,
+ entry->per_cu->lang);
+ }
+
/* Build all the tables. All symbols must be already inserted.
This function does not call file_write, caller has to do it
afterwards. */
@@ -837,25 +717,6 @@ public:
return m_abbrev_table.size ();
}
- /* Recurse into all "included" dependencies and store their symbols
- as if they appeared in this psymtab. */
- void recursively_write_psymbols
- (struct objfile *objfile,
- partial_symtab *psymtab,
- std::unordered_set<partial_symbol *> &psyms_seen,
- int cu_index)
- {
- for (int i = 0; i < psymtab->number_of_dependencies; ++i)
- if (psymtab->dependencies[i]->user != NULL)
- recursively_write_psymbols
- (objfile, psymtab->dependencies[i], psyms_seen, cu_index);
-
- write_psymbols (psyms_seen, psymtab->global_psymbols,
- cu_index, false, unit_kind::cu);
- write_psymbols (psyms_seen, psymtab->static_psymbols,
- cu_index, true, unit_kind::cu);
- }
-
/* Return number of bytes the .debug_names section will have. This
must be called only after calling the build method. */
size_t bytes () const
@@ -888,6 +749,11 @@ public:
m_debugstrlookup.file_write (file_str);
}
+ void add_cu (dwarf2_per_cu_data *per_cu, offset_type index)
+ {
+ m_cu_index_htab.emplace (per_cu, index);
+ }
+
private:
/* Storage for symbol names mapping them to their .debug_str section
@@ -1117,59 +983,6 @@ private:
offset_vec_tmpl<OffsetSize> m_name_table_entry_offs;
};
- /* Try to reconstruct original DWARF tag for given partial_symbol.
- This function is not DWARF-5 compliant but it is sufficient for
- GDB as a DWARF-5 index consumer. */
- static int psymbol_tag (const struct partial_symbol *psym)
- {
- domain_enum domain = psym->domain;
- enum address_class aclass = psym->aclass;
-
- switch (domain)
- {
- case VAR_DOMAIN:
- switch (aclass)
- {
- case LOC_BLOCK:
- return DW_TAG_subprogram;
- case LOC_TYPEDEF:
- return DW_TAG_typedef;
- case LOC_COMPUTED:
- case LOC_CONST_BYTES:
- case LOC_OPTIMIZED_OUT:
- case LOC_STATIC:
- return DW_TAG_variable;
- case LOC_CONST:
- /* Note: It's currently impossible to recognize psyms as enum values
- short of reading the type info. For now punt. */
- return DW_TAG_variable;
- default:
- /* There are other LOC_FOO values that one might want to classify
- as variables, but dwarf2read.c doesn't currently use them. */
- return DW_TAG_variable;
- }
- case STRUCT_DOMAIN:
- return DW_TAG_structure_type;
- case MODULE_DOMAIN:
- return DW_TAG_module;
- default:
- return 0;
- }
- }
-
- /* Call insert for all partial symbols and mark them in PSYMS_SEEN. */
- void write_psymbols (std::unordered_set<partial_symbol *> &psyms_seen,
- const std::vector<partial_symbol *> &symbols,
- int cu_index, bool is_static, unit_kind kind)
- {
- for (partial_symbol *psym : symbols)
- {
- /* Only add a given psymbol once. */
- if (psyms_seen.insert (psym).second)
- insert (psym, cu_index, is_static, kind);
- }
- }
-
/* Store value of each symbol. */
std::unordered_map<c_str_view, std::set<symbol_value>, c_str_view_hasher>
m_name_to_value_set;
@@ -1202,6 +1015,8 @@ private:
/* Temporary storage for Ada names. */
auto_obstack m_string_obstack;
+
+ cu_index_map m_cu_index_htab;
};
/* Return iff any of the needed offsets does not fit into 32-bit
@@ -1219,28 +1034,6 @@ check_dwarf64_offsets (dwarf2_per_objfile *per_objfile)
return false;
}
-/* The psyms_seen set is potentially going to be largish (~40k
- elements when indexing a -g3 build of GDB itself). Estimate the
- number of elements in order to avoid too many rehashes, which
- require rebuilding buckets and thus many trips to
- malloc/free. */
-
-static size_t
-psyms_seen_size (dwarf2_per_objfile *per_objfile)
-{
- size_t psyms_count = 0;
- for (const auto &per_cu : per_objfile->per_bfd->all_comp_units)
- {
- partial_symtab *psymtab = per_cu->v.psymtab;
-
- if (psymtab != NULL && psymtab->user == NULL)
- recursively_count_psymbols (psymtab, psyms_count);
- }
- /* Generating an index for gdb itself shows a ratio of
- TOTAL_SEEN_SYMS/UNIQUE_SYMS or ~5. 4 seems like a good bet. */
- return psyms_count / 4;
-}
-
/* Assert that FILE's size is EXPECTED_SIZE. Assumes file's seek
position is at the end of the file. */
@@ -1303,25 +1096,86 @@ write_gdbindex_1 (FILE *out_file,
assert_file_size (out_file, total_len);
}
+/* Write the contents of the internal "cooked" index. */
+
+static void
+write_cooked_index (cooked_index_vector *table,
+ const cu_index_map &cu_index_htab,
+ struct mapped_symtab *symtab)
+{
+ /* We track type names and only enter a given type once. */
+ htab_up type_names (htab_create_alloc (10, htab_hash_string, htab_eq_string,
+ nullptr, xcalloc, xfree));
+ /* Same with variable names. However, if a type and variable share
+ a name, we want both, which is why there are two hash tables
+ here. */
+ htab_up var_names (htab_create_alloc (10, htab_hash_string, htab_eq_string,
+ nullptr, xcalloc, xfree));
+
+ for (const cooked_index_entry *entry : table->all_entries ())
+ {
+ /* GDB never put linkage names into .gdb_index. The theory here
+ is that a linkage name will normally be in the minimal
+ symbols anyway, so including it in the index is usually
+ redundant -- and the cases where it would not be redundant
+ are rare and not worth supporting. */
+ if ((entry->flags & IS_LINKAGE) != 0)
+ continue;
+
+ const auto it = cu_index_htab.find (entry->per_cu);
+ gdb_assert (it != cu_index_htab.cend ());
+
+ const char *name = entry->full_name (&symtab->m_string_obstack);
+
+ gdb_index_symbol_kind kind;
+ if (entry->tag == DW_TAG_subprogram)
+ kind = GDB_INDEX_SYMBOL_KIND_FUNCTION;
+ else if (entry->tag == DW_TAG_variable
+ || entry->tag == DW_TAG_constant
+ || entry->tag == DW_TAG_enumerator)
+ {
+ kind = GDB_INDEX_SYMBOL_KIND_VARIABLE;
+ void **slot = htab_find_slot (var_names.get (), name, INSERT);
+ if (*slot != nullptr)
+ continue;
+ *slot = (void *) name;
+ }
+ else if (entry->tag == DW_TAG_module
+ || entry->tag == DW_TAG_common_block)
+ kind = GDB_INDEX_SYMBOL_KIND_OTHER;
+ else
+ {
+ kind = GDB_INDEX_SYMBOL_KIND_TYPE;
+ void **slot = htab_find_slot (type_names.get (), name, INSERT);
+ if (*slot != nullptr)
+ continue;
+ *slot = (void *) name;
+ }
+
+ add_index_entry (symtab, name, (entry->flags & IS_STATIC) != 0,
+ kind, it->second);
+ }
+}
+
/* Write contents of a .gdb_index section for OBJFILE into OUT_FILE.
If OBJFILE has an associated dwz file, write contents of a .gdb_index
section for that dwz file into DWZ_OUT_FILE. If OBJFILE does not have an
associated dwz file, DWZ_OUT_FILE must be NULL. */
static void
-write_gdbindex (dwarf2_per_objfile *per_objfile, FILE *out_file,
- FILE *dwz_out_file)
+write_gdbindex (dwarf2_per_objfile *per_objfile,
+ cooked_index_vector *table,
+ FILE *out_file, FILE *dwz_out_file)
{
- struct objfile *objfile = per_objfile->objfile;
mapped_symtab symtab;
data_buf objfile_cu_list;
data_buf dwz_cu_list;
- /* While we're scanning CU's create a table that maps a psymtab pointer
+ /* While we're scanning CU's create a table that maps a dwarf2_per_cu_data
(which is what addrmap records) to its index (which is what is recorded
in the index file). This will later be needed to write the address
table. */
- psym_index_map cu_index_htab;
+ cu_index_map cu_index_htab;
cu_index_htab.reserve (per_objfile->per_bfd->all_comp_units.size ());
/* Store out the .debug_type CUs, if any. */
@@ -1331,28 +1185,17 @@ write_gdbindex (dwarf2_per_objfile *per_objfile, FILE *out_file,
work here. Also, the debug_types entries do not appear in
all_comp_units, but only in their own hash table. */
- std::unordered_set<partial_symbol *> psyms_seen
- (psyms_seen_size (per_objfile));
int counter = 0;
int types_counter = 0;
for (int i = 0; i < per_objfile->per_bfd->all_comp_units.size (); ++i)
{
dwarf2_per_cu_data *per_cu
= per_objfile->per_bfd->all_comp_units[i].get ();
- partial_symtab *psymtab = per_cu->v.psymtab;
int &this_counter = per_cu->is_debug_types ? types_counter : counter;
- if (psymtab != NULL)
- {
- if (psymtab->user == NULL)
- recursively_write_psymbols (objfile, psymtab, &symtab,
- psyms_seen, this_counter);
-
- const auto insertpair = cu_index_htab.emplace (psymtab,
- this_counter);
- gdb_assert (insertpair.second);
- }
+ const auto insertpair = cu_index_htab.emplace (per_cu, this_counter);
+ gdb_assert (insertpair.second);
/* The all_comp_units list contains CUs read from the objfile as well as
from the eventual dwz file. We need to place the entry in the
@@ -1376,9 +1219,12 @@ write_gdbindex (dwarf2_per_objfile *per_objfile, FILE *out_file,
++this_counter;
}
+ write_cooked_index (table, cu_index_htab, &symtab);
+
/* Dump the address map. */
data_buf addr_vec;
- write_address_map (per_objfile->per_bfd, addr_vec, cu_index_htab);
+ for (auto map : table->get_addrmaps ())
+ write_address_map (map, addr_vec, cu_index_htab);
/* Now that we've processed all symbols we can shrink their cu_indices
lists. */
@@ -1408,6 +1254,7 @@ static const gdb_byte dwarf5_gdb_augmentation[] = { 'G', 'D', 'B', 0 };
static void
write_debug_names (dwarf2_per_objfile *per_objfile,
+ cooked_index_vector *table,
FILE *out_file, FILE *out_file_str)
{
const bool dwarf5_is_dwarf64 = check_dwarf64_offsets (per_objfile);
@@ -1421,23 +1268,17 @@ write_debug_names (dwarf2_per_objfile *per_objfile,
data_buf cu_list;
data_buf types_cu_list;
debug_names nametable (per_objfile, dwarf5_is_dwarf64, dwarf5_byte_order);
- std::unordered_set<partial_symbol *>
- psyms_seen (psyms_seen_size (per_objfile));
int counter = 0;
int types_counter = 0;
for (int i = 0; i < per_objfile->per_bfd->all_comp_units.size (); ++i)
{
- const dwarf2_per_cu_data *per_cu
+ dwarf2_per_cu_data *per_cu
= per_objfile->per_bfd->all_comp_units[i].get ();
- partial_symtab *psymtab = per_cu->v.psymtab;
int &this_counter = per_cu->is_debug_types ? types_counter : counter;
data_buf &this_list = per_cu->is_debug_types ? types_cu_list : cu_list;
- if (psymtab != nullptr && psymtab->user == nullptr)
- nametable.recursively_write_psymbols (objfile, psymtab, psyms_seen,
- this_counter);
-
+ nametable.add_cu (per_cu, this_counter);
this_list.append_uint (nametable.dwarf5_offset_size (),
dwarf5_byte_order,
to_underlying (per_cu->sect_off));
@@ -1449,6 +1290,9 @@ write_debug_names (dwarf2_per_objfile *per_objfile,
- per_objfile->per_bfd->tu_stats.nr_tus));
gdb_assert (types_counter == per_objfile->per_bfd->tu_stats.nr_tus);
+ for (const cooked_index_entry *entry : table->all_entries ())
+ nametable.insert (entry);
+
nametable.build ();
/* No addr_vec - DWARF-5 uses .debug_aranges generated by GCC. */
@@ -1577,27 +1421,22 @@ struct index_wip_file
/* See dwarf-index-write.h. */
void
-write_psymtabs_to_index (dwarf2_per_objfile *per_objfile, const char *dir,
- const char *basename, const char *dwz_basename,
- dw_index_kind index_kind)
+write_dwarf_index (dwarf2_per_objfile *per_objfile, const char *dir,
+ const char *basename, const char *dwz_basename,
+ dw_index_kind index_kind)
{
- dwarf2_per_bfd *per_bfd = per_objfile->per_bfd;
struct objfile *objfile = per_objfile->objfile;
- if (per_objfile->per_bfd->using_index)
- error (_("Cannot use an index to create the index"));
+ if (per_objfile->per_bfd->index_table == nullptr)
+ error (_("No debugging symbols"));
+ cooked_index_vector *table
+ = per_objfile->per_bfd->index_table->index_for_writing ();
if (per_objfile->per_bfd->types.size () > 1)
error (_("Cannot make an index when the file has multiple .debug_types sections"));
- if (per_bfd->partial_symtabs == nullptr
- || !per_bfd->partial_symtabs->psymtabs
- || !per_bfd->partial_symtabs->psymtabs_addrmap)
- return;
- struct stat st;
- if (stat (objfile_name (objfile), &st) < 0)
- perror_with_name (objfile_name (objfile));
+ gdb_assert ((objfile->flags & OBJF_NOT_FILENAME) == 0);
const char *index_suffix = (index_kind == dw_index_kind::DEBUG_NAMES
? INDEX5_SUFFIX : INDEX4_SUFFIX);
@@ -1612,13 +1451,13 @@ write_psymtabs_to_index (dwarf2_per_objfile *per_objfile, const char *dir,
{
index_wip_file str_wip_file (dir, basename, DEBUG_STR_SUFFIX);
- write_debug_names (per_objfile, objfile_index_wip.out_file.get (),
+ write_debug_names (per_objfile, table, objfile_index_wip.out_file.get (),
str_wip_file.out_file.get ());
str_wip_file.finalize ();
}
else
- write_gdbindex (per_objfile, objfile_index_wip.out_file.get (),
+ write_gdbindex (per_objfile, table, objfile_index_wip.out_file.get (),
(dwz_index_wip.has_value ()
? dwz_index_wip->out_file.get () : NULL));
@@ -1656,10 +1495,8 @@ save_gdb_index_command (const char *arg, int from_tty)
for (objfile *objfile : current_program_space->objfiles ())
{
- struct stat st;
-
/* If the objfile does not correspond to an actual file, skip it. */
- if (stat (objfile_name (objfile), &st) < 0)
+ if ((objfile->flags & OBJF_NOT_FILENAME) != 0)
continue;
dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile);
@@ -1675,8 +1512,8 @@ save_gdb_index_command (const char *arg, int from_tty)
if (dwz != NULL)
dwz_basename = lbasename (dwz->filename ());
- write_psymtabs_to_index (per_objfile, arg, basename, dwz_basename,
- index_kind);
+ write_dwarf_index (per_objfile, arg, basename, dwz_basename,
+ index_kind);
}
catch (const gdb_exception_error &except)
{
diff --git a/gdb/dwarf2/index-write.h b/gdb/dwarf2/index-write.h
index 0fbae38f530..b8855dcae7c 100644
--- a/gdb/dwarf2/index-write.h
+++ b/gdb/dwarf2/index-write.h
@@ -32,7 +32,7 @@
derived from INDEX_KIND is added to this base name. DWZ_BASENAME is the
same, but for the dwz file's index. */
-extern void write_psymtabs_to_index
+extern void write_dwarf_index
(dwarf2_per_objfile *per_objfile, const char *dir, const char *basename,
const char *dwz_basename, dw_index_kind index_kind);
diff --git a/gdb/dwarf2/line-header.c b/gdb/dwarf2/line-header.c
index 938e9fd55d4..63230847568 100644
--- a/gdb/dwarf2/line-header.c
+++ b/gdb/dwarf2/line-header.c
@@ -24,6 +24,7 @@
#include "dwarf2/read.h"
#include "complaints.h"
#include "filenames.h"
+#include "gdbsupport/pathstuff.h"
void
line_header::add_include_dir (const char *include_dir)
@@ -35,8 +36,8 @@ line_header::add_include_dir (const char *include_dir)
new_size = m_include_dirs.size ();
else
new_size = m_include_dirs.size () + 1;
- fprintf_unfiltered (gdb_stdlog, "Adding dir %zu: %s\n",
- new_size, include_dir);
+ gdb_printf (gdb_stdlog, "Adding dir %zu: %s\n",
+ new_size, include_dir);
}
m_include_dirs.push_back (include_dir);
}
@@ -54,13 +55,13 @@ line_header::add_file_name (const char *name,
new_size = file_names_size ();
else
new_size = file_names_size () + 1;
- fprintf_unfiltered (gdb_stdlog, "Adding file %zu: %s\n",
- new_size, name);
+ gdb_printf (gdb_stdlog, "Adding file %zu: %s\n",
+ new_size, name);
}
m_file_names.emplace_back (name, d_index, mod_time, length);
}
-gdb::unique_xmalloc_ptr<char>
+std::string
line_header::file_file_name (int file) const
{
/* Is the file number a valid index into the line header's file name
@@ -73,26 +74,20 @@ line_header::file_file_name (int file) const
{
const char *dir = fe->include_dir (this);
if (dir != NULL)
- return gdb::unique_xmalloc_ptr<char> (concat (dir, SLASH_STRING,
- fe->name,
- (char *) NULL));
+ return path_join (dir, fe->name);
}
- return make_unique_xstrdup (fe->name);
+
+ return fe->name;
}
else
{
/* The compiler produced a bogus file number. We can at least
record the macro definitions made in the file, even if we
won't be able to find the file by name. */
- char fake_name[80];
-
- xsnprintf (fake_name, sizeof (fake_name),
- "<bad macro file number %d>", file);
-
complaint (_("bad file number in macro information (%d)"),
file);
- return make_unique_xstrdup (fake_name);
+ return string_printf ("<bad macro file number %d>", file);
}
}
@@ -294,19 +289,19 @@ dwarf_decode_line_header (sect_offset sect_off, bool is_dwz,
line_ptr = section->buffer + to_underlying (sect_off);
/* Read in the header. */
- lh->total_length =
- read_checked_initial_length_and_offset (abfd, line_ptr, cu_header,
- &bytes_read, &offset_size);
+ LONGEST unit_length
+ = read_checked_initial_length_and_offset (abfd, line_ptr, cu_header,
+ &bytes_read, &offset_size);
line_ptr += bytes_read;
const gdb_byte *start_here = line_ptr;
- if (line_ptr + lh->total_length > (section->buffer + section->size))
+ if (line_ptr + unit_length > (section->buffer + section->size))
{
dwarf2_statement_list_fits_in_line_number_section_complaint ();
return 0;
}
- lh->statement_program_end = start_here + lh->total_length;
+ lh->statement_program_end = start_here + unit_length;
lh->version = read_2_bytes (abfd, line_ptr);
line_ptr += 2;
if (lh->version > 5)
@@ -334,11 +329,13 @@ dwarf_decode_line_header (sect_offset sect_off, bool is_dwz,
return NULL;
}
}
- lh->header_length = read_offset (abfd, line_ptr, offset_size);
+
+ LONGEST header_length = read_offset (abfd, line_ptr, offset_size);
line_ptr += offset_size;
- lh->statement_program_start = line_ptr + lh->header_length;
+ lh->statement_program_start = line_ptr + header_length;
lh->minimum_instruction_length = read_1_byte (abfd, line_ptr);
line_ptr += 1;
+
if (lh->version >= 4)
{
lh->maximum_ops_per_instruction = read_1_byte (abfd, line_ptr);
diff --git a/gdb/dwarf2/line-header.h b/gdb/dwarf2/line-header.h
index 8fb44be56b2..59b317d0d72 100644
--- a/gdb/dwarf2/line-header.h
+++ b/gdb/dwarf2/line-header.h
@@ -59,9 +59,6 @@ struct file_entry
unsigned int length {};
- /* True if referenced by the Line Number Program. */
- bool included_p {};
-
/* The associated symbol table, if any. */
struct symtab *symtab {};
};
@@ -139,9 +136,7 @@ struct line_header
/* OFFSET is for struct dwz_file associated with dwarf2_per_objfile. */
unsigned offset_in_dwz : 1; /* Can't initialize bitfields in-class. */
- unsigned int total_length {};
unsigned short version {};
- unsigned int header_length {};
unsigned char minimum_instruction_length {};
unsigned char maximum_ops_per_instruction {};
unsigned char default_is_stmt {};
@@ -163,10 +158,8 @@ struct line_header
const gdb_byte *statement_program_start {}, *statement_program_end {};
/* Return file name relative to the compilation directory of file
- number I in this object's file name table. The result is
- allocated using xmalloc; the caller is responsible for freeing
- it. */
- gdb::unique_xmalloc_ptr<char> file_file_name (int file) const;
+ number FILE in this object's file name table. */
+ std::string file_file_name (int file) const;
private:
/* The include_directories table. Note these are observing
diff --git a/gdb/dwarf2/loc.c b/gdb/dwarf2/loc.c
index 69b480e6e86..f490b68adc3 100644
--- a/gdb/dwarf2/loc.c
+++ b/gdb/dwarf2/loc.c
@@ -453,7 +453,7 @@ dwarf2_find_location_expression (struct dwarf2_loclist_baton *baton,
if (pc_block)
pc_func = block_linkage_function (pc_block);
- if (pc_func && pc == BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (pc_func)))
+ if (pc_func && pc == pc_func->value_block ()->entry_pc ())
{
*locexpr_length = length;
return loc_ptr;
@@ -585,7 +585,7 @@ const struct symbol_block_ops dwarf2_block_frame_base_loclist_funcs =
loclist_get_frame_base
};
-/* See dwarf2loc.h. */
+/* See dwarf2/loc.h. */
void
func_get_frame_base_dwarf_block (struct symbol *framefunc, CORE_ADDR pc,
@@ -617,7 +617,7 @@ compute_var_value (const char *name)
return nullptr;
}
-/* See dwarf2loc.h. */
+/* See dwarf2/loc.h. */
unsigned int entry_values_debug = 0;
@@ -627,30 +627,30 @@ static void
show_entry_values_debug (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file,
- _("Entry values and tail call frames debugging is %s.\n"),
- value);
+ gdb_printf (file,
+ _("Entry values and tail call frames debugging is %s.\n"),
+ value);
}
-/* Find DW_TAG_call_site's DW_AT_call_target address.
- CALLER_FRAME (for registers) can be NULL if it is not known. This function
- always returns valid address or it throws NO_ENTRY_VALUE_ERROR. */
+/* See gdbtypes.h. */
-static CORE_ADDR
-call_site_to_target_addr (struct gdbarch *call_site_gdbarch,
- struct call_site *call_site,
- struct frame_info *caller_frame)
+void
+call_site_target::iterate_over_addresses
+ (struct gdbarch *call_site_gdbarch,
+ const struct call_site *call_site,
+ struct frame_info *caller_frame,
+ iterate_ftype callback) const
{
- switch (call_site->target.loc_kind ())
+ switch (m_loc_kind)
{
- case FIELD_LOC_KIND_DWARF_BLOCK:
+ case call_site_target::DWARF_BLOCK:
{
struct dwarf2_locexpr_baton *dwarf_block;
struct value *val;
struct type *caller_core_addr_type;
struct gdbarch *caller_arch;
- dwarf_block = call_site->target.loc_dwarf_block ();
+ dwarf_block = m_loc.dwarf_block;
if (dwarf_block == NULL)
{
struct bound_minimal_symbol msym;
@@ -685,17 +685,18 @@ call_site_to_target_addr (struct gdbarch *call_site_gdbarch,
dwarf_block->per_objfile);
/* DW_AT_call_target is a DWARF expression, not a DWARF location. */
if (VALUE_LVAL (val) == lval_memory)
- return value_address (val);
+ callback (value_address (val));
else
- return value_as_address (val);
+ callback (value_as_address (val));
}
+ break;
- case FIELD_LOC_KIND_PHYSNAME:
+ case call_site_target::PHYSNAME:
{
const char *physname;
struct bound_minimal_symbol msym;
- physname = call_site->target.loc_physname ();
+ physname = m_loc.physname;
/* Handle both the mangled and demangled PHYSNAME. */
msym = lookup_minimal_symbol (physname, NULL, NULL);
@@ -710,18 +711,32 @@ call_site_to_target_addr (struct gdbarch *call_site_gdbarch,
: msym.minsym->print_name ()));
}
- return BMSYMBOL_VALUE_ADDRESS (msym);
+ callback (msym.value_address ());
+ }
+ break;
+
+ case call_site_target::PHYSADDR:
+ {
+ dwarf2_per_objfile *per_objfile = call_site->per_objfile;
+ compunit_symtab *cust = per_objfile->get_symtab (call_site->per_cu);
+ int sect_idx = cust->block_line_section ();
+ CORE_ADDR delta = per_objfile->objfile->section_offsets[sect_idx];
+
+ callback (m_loc.physaddr + delta);
}
+ break;
- case FIELD_LOC_KIND_PHYSADDR:
+ case call_site_target::ADDRESSES:
{
dwarf2_per_objfile *per_objfile = call_site->per_objfile;
compunit_symtab *cust = per_objfile->get_symtab (call_site->per_cu);
- int sect_idx = COMPUNIT_BLOCK_LINE_SECTION (cust);
+ int sect_idx = cust->block_line_section ();
CORE_ADDR delta = per_objfile->objfile->section_offsets[sect_idx];
- return call_site->target.loc_physaddr () + delta;
+ for (unsigned i = 0; i < m_loc.addresses.length; ++i)
+ callback (m_loc.addresses.values[i] + delta);
}
+ break;
default:
internal_error (__FILE__, __LINE__, _("invalid call site target kind"));
@@ -738,13 +753,13 @@ func_addr_to_tail_call_list (struct gdbarch *gdbarch, CORE_ADDR addr)
struct symbol *sym = find_pc_function (addr);
struct type *type;
- if (sym == NULL || BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (sym)) != addr)
+ if (sym == NULL || sym->value_block ()->entry_pc () != addr)
throw_error (NO_ENTRY_VALUE_ERROR,
_("DW_TAG_call_site resolving failed to find function "
"name for address %s"),
paddress (gdbarch, addr));
- type = SYMBOL_TYPE (sym);
+ type = sym->type ();
gdb_assert (type->code () == TYPE_CODE_FUNC);
gdb_assert (TYPE_SPECIFIC_FIELD (type) == TYPE_SPECIFIC_FUNC);
@@ -783,31 +798,31 @@ func_verify_no_selftailcall (struct gdbarch *gdbarch, CORE_ADDR verify_addr)
func_sym = func_addr_to_tail_call_list (gdbarch, addr);
- for (call_site = TYPE_TAIL_CALL_LIST (SYMBOL_TYPE (func_sym));
+ for (call_site = TYPE_TAIL_CALL_LIST (func_sym->type ());
call_site; call_site = call_site->tail_call_next)
{
- CORE_ADDR target_addr;
-
/* CALLER_FRAME with registers is not available for tail-call jumped
frames. */
- target_addr = call_site_to_target_addr (gdbarch, call_site, NULL);
-
- if (target_addr == verify_addr)
+ call_site->iterate_over_addresses (gdbarch, nullptr,
+ [&] (CORE_ADDR target_addr)
{
- struct bound_minimal_symbol msym;
-
- msym = lookup_minimal_symbol_by_pc (verify_addr);
- throw_error (NO_ENTRY_VALUE_ERROR,
- _("DW_OP_entry_value resolving has found "
- "function \"%s\" at %s can call itself via tail "
- "calls"),
- (msym.minsym == NULL ? "???"
- : msym.minsym->print_name ()),
- paddress (gdbarch, verify_addr));
- }
+ if (target_addr == verify_addr)
+ {
+ struct bound_minimal_symbol msym;
+
+ msym = lookup_minimal_symbol_by_pc (verify_addr);
+ throw_error (NO_ENTRY_VALUE_ERROR,
+ _("DW_OP_entry_value resolving has found "
+ "function \"%s\" at %s can call itself via tail "
+ "calls"),
+ (msym.minsym == NULL ? "???"
+ : msym.minsym->print_name ()),
+ paddress (gdbarch, verify_addr));
+ }
- if (addr_hash.insert (target_addr).second)
- todo.push_back (target_addr);
+ if (addr_hash.insert (target_addr).second)
+ todo.push_back (target_addr);
+ });
}
}
}
@@ -821,9 +836,9 @@ tailcall_dump (struct gdbarch *gdbarch, const struct call_site *call_site)
CORE_ADDR addr = call_site->pc ();
struct bound_minimal_symbol msym = lookup_minimal_symbol_by_pc (addr - 1);
- fprintf_unfiltered (gdb_stdlog, " %s(%s)", paddress (gdbarch, addr),
- (msym.minsym == NULL ? "???"
- : msym.minsym->print_name ()));
+ gdb_printf (gdb_stdlog, " %s(%s)", paddress (gdbarch, addr),
+ (msym.minsym == NULL ? "???"
+ : msym.minsym->print_name ()));
}
@@ -837,9 +852,9 @@ tailcall_dump (struct gdbarch *gdbarch, const struct call_site *call_site)
static void
chain_candidate (struct gdbarch *gdbarch,
gdb::unique_xmalloc_ptr<struct call_site_chain> *resultp,
- std::vector<struct call_site *> *chain)
+ const std::vector<struct call_site *> &chain)
{
- long length = chain->size ();
+ long length = chain.size ();
int callers, callees, idx;
if (*resultp == NULL)
@@ -852,17 +867,17 @@ chain_candidate (struct gdbarch *gdbarch,
+ sizeof (*result->call_site) * (length - 1)));
result->length = length;
result->callers = result->callees = length;
- if (!chain->empty ())
- memcpy (result->call_site, chain->data (),
+ if (!chain.empty ())
+ memcpy (result->call_site, chain.data (),
sizeof (*result->call_site) * length);
resultp->reset (result);
if (entry_values_debug)
{
- fprintf_unfiltered (gdb_stdlog, "tailcall: initial:");
+ gdb_printf (gdb_stdlog, "tailcall: initial:");
for (idx = 0; idx < length; idx++)
tailcall_dump (gdbarch, result->call_site[idx]);
- fputc_unfiltered ('\n', gdb_stdlog);
+ gdb_putc ('\n', gdb_stdlog);
}
return;
@@ -870,17 +885,17 @@ chain_candidate (struct gdbarch *gdbarch,
if (entry_values_debug)
{
- fprintf_unfiltered (gdb_stdlog, "tailcall: compare:");
+ gdb_printf (gdb_stdlog, "tailcall: compare:");
for (idx = 0; idx < length; idx++)
- tailcall_dump (gdbarch, chain->at (idx));
- fputc_unfiltered ('\n', gdb_stdlog);
+ tailcall_dump (gdbarch, chain[idx]);
+ gdb_putc ('\n', gdb_stdlog);
}
/* Intersect callers. */
callers = std::min ((long) (*resultp)->callers, length);
for (idx = 0; idx < callers; idx++)
- if ((*resultp)->call_site[idx] != chain->at (idx))
+ if ((*resultp)->call_site[idx] != chain[idx])
{
(*resultp)->callers = idx;
break;
@@ -891,7 +906,7 @@ chain_candidate (struct gdbarch *gdbarch,
callees = std::min ((long) (*resultp)->callees, length);
for (idx = 0; idx < callees; idx++)
if ((*resultp)->call_site[(*resultp)->length - 1 - idx]
- != chain->at (length - 1 - idx))
+ != chain[length - 1 - idx])
{
(*resultp)->callees = idx;
break;
@@ -899,15 +914,15 @@ chain_candidate (struct gdbarch *gdbarch,
if (entry_values_debug)
{
- fprintf_unfiltered (gdb_stdlog, "tailcall: reduced:");
+ gdb_printf (gdb_stdlog, "tailcall: reduced:");
for (idx = 0; idx < (*resultp)->callers; idx++)
tailcall_dump (gdbarch, (*resultp)->call_site[idx]);
- fputs_unfiltered (" |", gdb_stdlog);
+ gdb_puts (" |", gdb_stdlog);
for (idx = 0; idx < (*resultp)->callees; idx++)
tailcall_dump (gdbarch,
(*resultp)->call_site[(*resultp)->length
- (*resultp)->callees + idx]);
- fputc_unfiltered ('\n', gdb_stdlog);
+ gdb_putc ('\n', gdb_stdlog);
}
if ((*resultp)->callers == 0 && (*resultp)->callees == 0)
@@ -926,11 +941,75 @@ chain_candidate (struct gdbarch *gdbarch,
gdb_assert ((*resultp)->callers + (*resultp)->callees <= (*resultp)->length);
}
-/* Create and return call_site_chain for CALLER_PC and CALLEE_PC. All the
- assumed frames between them use GDBARCH. Use depth first search so we can
- keep single CHAIN of call_site's back to CALLER_PC. Function recursion
- would have needless GDB stack overhead. Any unreliability results
- in thrown NO_ENTRY_VALUE_ERROR. */
+/* Recursively try to construct the call chain. GDBARCH, RESULTP, and
+ CHAIN are passed to chain_candidate. ADDR_HASH tracks which
+ addresses have already been seen along the current chain.
+ CALL_SITE is the call site to visit, and CALLEE_PC is the PC we're
+ trying to "reach". Returns false if an error has already been
+ detected and so an early return can be done. If it makes sense to
+ keep trying (even if no answer has yet been found), returns
+ true. */
+
+static bool
+call_site_find_chain_2
+ (struct gdbarch *gdbarch,
+ gdb::unique_xmalloc_ptr<struct call_site_chain> *resultp,
+ std::vector<struct call_site *> &chain,
+ std::unordered_set<CORE_ADDR> &addr_hash,
+ struct call_site *call_site,
+ CORE_ADDR callee_pc)
+{
+ std::vector<CORE_ADDR> addresses;
+ bool found_exact = false;
+ call_site->iterate_over_addresses (gdbarch, nullptr,
+ [&] (CORE_ADDR addr)
+ {
+ if (addr == callee_pc)
+ found_exact = true;
+ else
+ addresses.push_back (addr);
+ });
+
+ if (found_exact)
+ {
+ chain_candidate (gdbarch, resultp, chain);
+ /* If RESULTP was reset, then chain_candidate failed, and so we
+ can tell our callers to early-return. */
+ return *resultp != nullptr;
+ }
+
+ for (CORE_ADDR target_func_addr : addresses)
+ {
+ struct symbol *target_func
+ = func_addr_to_tail_call_list (gdbarch, target_func_addr);
+ for (struct call_site *target_call_site
+ = TYPE_TAIL_CALL_LIST (target_func->type ());
+ target_call_site != nullptr;
+ target_call_site = target_call_site->tail_call_next)
+ {
+ if (addr_hash.insert (target_call_site->pc ()).second)
+ {
+ /* Successfully entered TARGET_CALL_SITE. */
+ chain.push_back (target_call_site);
+
+ if (!call_site_find_chain_2 (gdbarch, resultp, chain,
+ addr_hash, target_call_site,
+ callee_pc))
+ return false;
+
+ size_t removed = addr_hash.erase (target_call_site->pc ());
+ gdb_assert (removed == 1);
+ chain.pop_back ();
+ }
+ }
+ }
+
+ return true;
+}
+
+/* Create and return call_site_chain for CALLER_PC and CALLEE_PC. All
+ the assumed frames between them use GDBARCH. Any unreliability
+ results in thrown NO_ENTRY_VALUE_ERROR. */
static gdb::unique_xmalloc_ptr<call_site_chain>
call_site_find_chain_1 (struct gdbarch *gdbarch, CORE_ADDR caller_pc,
@@ -946,6 +1025,12 @@ call_site_find_chain_1 (struct gdbarch *gdbarch, CORE_ADDR caller_pc,
TAIL_CALL_NEXT. This is inappropriate for CALLER_PC's call_site. */
std::vector<struct call_site *> chain;
+ /* A given call site may have multiple associated addresses. This
+ can happen if, e.g., the caller is split by hot/cold
+ partitioning. This vector tracks the ones we haven't visited
+ yet. */
+ std::vector<std::vector<CORE_ADDR>> unvisited_addresses;
+
/* We are not interested in the specific PC inside the callee function. */
callee_pc = get_pc_function_start (callee_pc);
if (callee_pc == 0)
@@ -960,74 +1045,10 @@ call_site_find_chain_1 (struct gdbarch *gdbarch, CORE_ADDR caller_pc,
target's function will get iterated as already pushed into CHAIN via their
TAIL_CALL_NEXT. */
call_site = call_site_for_pc (gdbarch, caller_pc);
-
- while (call_site)
- {
- CORE_ADDR target_func_addr;
- struct call_site *target_call_site;
-
- /* CALLER_FRAME with registers is not available for tail-call jumped
- frames. */
- target_func_addr = call_site_to_target_addr (gdbarch, call_site, NULL);
-
- if (target_func_addr == callee_pc)
- {
- chain_candidate (gdbarch, &retval, &chain);
- if (retval == NULL)
- break;
-
- /* There is no way to reach CALLEE_PC again as we would prevent
- entering it twice as being already marked in ADDR_HASH. */
- target_call_site = NULL;
- }
- else
- {
- struct symbol *target_func;
-
- target_func = func_addr_to_tail_call_list (gdbarch, target_func_addr);
- target_call_site = TYPE_TAIL_CALL_LIST (SYMBOL_TYPE (target_func));
- }
-
- do
- {
- /* Attempt to visit TARGET_CALL_SITE. */
-
- if (target_call_site)
- {
- if (addr_hash.insert (target_call_site->pc ()).second)
- {
- /* Successfully entered TARGET_CALL_SITE. */
-
- chain.push_back (target_call_site);
- break;
- }
- }
-
- /* Backtrack (without revisiting the originating call_site). Try the
- callers's sibling; if there isn't any try the callers's callers's
- sibling etc. */
-
- target_call_site = NULL;
- while (!chain.empty ())
- {
- call_site = chain.back ();
- chain.pop_back ();
-
- size_t removed = addr_hash.erase (call_site->pc ());
- gdb_assert (removed == 1);
-
- target_call_site = call_site->tail_call_next;
- if (target_call_site)
- break;
- }
- }
- while (target_call_site);
-
- if (chain.empty ())
- call_site = NULL;
- else
- call_site = chain.back ();
- }
+ /* No need to check the return value here, because we no longer care
+ about possible early returns. */
+ call_site_find_chain_2 (gdbarch, &retval, chain, addr_hash, call_site,
+ callee_pc);
if (retval == NULL)
{
@@ -1159,19 +1180,32 @@ dwarf_expr_reg_to_entry_parameter (struct frame_info *frame,
caller_pc = get_frame_pc (caller_frame);
call_site = call_site_for_pc (gdbarch, caller_pc);
- target_addr = call_site_to_target_addr (gdbarch, call_site, caller_frame);
- if (target_addr != func_addr)
+ bool found = false;
+ unsigned count = 0;
+ call_site->iterate_over_addresses (gdbarch, caller_frame,
+ [&] (CORE_ADDR addr)
+ {
+ /* Preserve any address. */
+ target_addr = addr;
+ ++count;
+ if (addr == func_addr)
+ found = true;
+ });
+ if (!found)
{
struct minimal_symbol *target_msym, *func_msym;
target_msym = lookup_minimal_symbol_by_pc (target_addr).minsym;
func_msym = lookup_minimal_symbol_by_pc (func_addr).minsym;
throw_error (NO_ENTRY_VALUE_ERROR,
- _("DW_OP_entry_value resolving expects callee %s at %s "
+ _("DW_OP_entry_value resolving expects callee %s at %s %s"
"but the called frame is for %s at %s"),
(target_msym == NULL ? "???"
: target_msym->print_name ()),
paddress (gdbarch, target_addr),
+ (count > 0
+ ? _("(but note there are multiple addresses not listed)")
+ : ""),
func_msym == NULL ? "???" : func_msym->print_name (),
paddress (gdbarch, func_addr));
}
@@ -1535,18 +1569,19 @@ dwarf2_evaluate_loc_desc (struct type *type, struct frame_info *frame,
CORE_ADDR. FRAME is the frame in which the expression is
evaluated. ADDR_STACK is a context (location of a variable) and
might be needed to evaluate the location expression.
- PUSH_INITIAL_VALUE is true if the address (either from ADDR_STACK,
- or the default of 0) should be pushed on the DWARF expression
- evaluation stack before evaluating the expression; this is required
- by certain forms of DWARF expression. Returns 1 on success, 0
- otherwise. */
+
+ PUSH_VALUES is an array of values to be pushed to the expression stack
+ before evaluation starts. PUSH_VALUES[0] is pushed first, then
+ PUSH_VALUES[1], and so on.
+
+ Returns 1 on success, 0 otherwise. */
static int
dwarf2_locexpr_baton_eval (const struct dwarf2_locexpr_baton *dlbaton,
struct frame_info *frame,
const struct property_addr_info *addr_stack,
CORE_ADDR *valp,
- bool push_initial_value,
+ gdb::array_view<CORE_ADDR> push_values,
bool *is_reference)
{
if (dlbaton == NULL || dlbaton->size == 0)
@@ -1559,13 +1594,9 @@ dwarf2_locexpr_baton_eval (const struct dwarf2_locexpr_baton *dlbaton,
value *result;
scoped_value_mark free_values;
- if (push_initial_value)
- {
- if (addr_stack != nullptr)
- ctx.push_address (addr_stack->addr, false);
- else
- ctx.push_address (0, false);
- }
+ /* Place any initial values onto the expression stack. */
+ for (const auto &val : push_values)
+ ctx.push_address (val, false);
try
{
@@ -1604,14 +1635,14 @@ dwarf2_locexpr_baton_eval (const struct dwarf2_locexpr_baton *dlbaton,
return 1;
}
-/* See dwarf2loc.h. */
+/* See dwarf2/loc.h. */
bool
dwarf2_evaluate_property (const struct dynamic_prop *prop,
struct frame_info *frame,
const struct property_addr_info *addr_stack,
CORE_ADDR *value,
- bool push_initial_value)
+ gdb::array_view<CORE_ADDR> push_values)
{
if (prop == NULL)
return false;
@@ -1629,7 +1660,7 @@ dwarf2_evaluate_property (const struct dynamic_prop *prop,
bool is_reference = baton->locexpr.is_reference;
if (dwarf2_locexpr_baton_eval (&baton->locexpr, frame, addr_stack,
- value, push_initial_value, &is_reference))
+ value, push_values, &is_reference))
{
if (is_reference)
{
@@ -1738,7 +1769,7 @@ dwarf2_evaluate_property (const struct dynamic_prop *prop,
return false;
}
-/* See dwarf2loc.h. */
+/* See dwarf2/loc.h. */
void
dwarf2_compile_property_to_c (string_file *stream,
@@ -2227,7 +2258,7 @@ unimplemented (unsigned int op)
op);
}
-/* See dwarf2loc.h.
+/* See dwarf2/loc.h.
This is basically a wrapper on gdbarch_dwarf2_reg_to_regnum so that we
can issue a complaint, which is better than having every target's
@@ -2260,7 +2291,7 @@ throw_bad_regnum_error (ULONGEST dwarf_reg)
pulongest (dwarf_reg));
}
-/* See dwarf2loc.h. */
+/* See dwarf2/loc.h. */
int
dwarf_reg_to_regnum_or_error (struct gdbarch *arch, ULONGEST dwarf_reg)
@@ -3019,7 +3050,7 @@ locexpr_read_variable (struct symbol *symbol, struct frame_info *frame)
= (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (symbol);
struct value *val;
- val = dwarf2_evaluate_loc_desc (SYMBOL_TYPE (symbol), frame, dlbaton->data,
+ val = dwarf2_evaluate_loc_desc (symbol->type (), frame, dlbaton->data,
dlbaton->size, dlbaton->per_cu,
dlbaton->per_objfile);
@@ -3036,7 +3067,7 @@ locexpr_read_variable_at_entry (struct symbol *symbol, struct frame_info *frame)
struct dwarf2_locexpr_baton *dlbaton
= (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (symbol);
- return value_of_dwarf_block_entry (SYMBOL_TYPE (symbol), frame, dlbaton->data,
+ return value_of_dwarf_block_entry (symbol->type (), frame, dlbaton->data,
dlbaton->size);
}
@@ -3110,8 +3141,8 @@ locexpr_describe_location_piece (struct symbol *symbol, struct ui_file *stream,
if (data[0] >= DW_OP_reg0 && data[0] <= DW_OP_reg31)
{
- fprintf_filtered (stream, _("a variable in $%s"),
- locexpr_regname (gdbarch, data[0] - DW_OP_reg0));
+ gdb_printf (stream, _("a variable in $%s"),
+ locexpr_regname (gdbarch, data[0] - DW_OP_reg0));
data += 1;
}
else if (data[0] == DW_OP_regx)
@@ -3119,8 +3150,8 @@ locexpr_describe_location_piece (struct symbol *symbol, struct ui_file *stream,
uint64_t reg;
data = safe_read_uleb128 (data + 1, end, &reg);
- fprintf_filtered (stream, _("a variable in $%s"),
- locexpr_regname (gdbarch, reg));
+ gdb_printf (stream, _("a variable in $%s"),
+ locexpr_regname (gdbarch, reg));
}
else if (data[0] == DW_OP_fbreg)
{
@@ -3176,10 +3207,10 @@ locexpr_describe_location_piece (struct symbol *symbol, struct ui_file *stream,
return save_data;
}
- fprintf_filtered (stream,
- _("a variable at frame base reg $%s offset %s+%s"),
- locexpr_regname (gdbarch, frame_reg),
- plongest (base_offset), plongest (frame_offset));
+ gdb_printf (stream,
+ _("a variable at frame base reg $%s offset %s+%s"),
+ locexpr_regname (gdbarch, frame_reg),
+ plongest (base_offset), plongest (frame_offset));
}
else if (data[0] >= DW_OP_breg0 && data[0] <= DW_OP_breg31
&& piece_end_p (data, end))
@@ -3188,10 +3219,10 @@ locexpr_describe_location_piece (struct symbol *symbol, struct ui_file *stream,
data = safe_read_sleb128 (data + 1, end, &offset);
- fprintf_filtered (stream,
- _("a variable at offset %s from base reg $%s"),
- plongest (offset),
- locexpr_regname (gdbarch, data[0] - DW_OP_breg0));
+ gdb_printf (stream,
+ _("a variable at offset %s from base reg $%s"),
+ plongest (offset),
+ locexpr_regname (gdbarch, data[0] - DW_OP_breg0));
}
/* The location expression for a TLS variable looks like this (on a
@@ -3220,10 +3251,10 @@ locexpr_describe_location_piece (struct symbol *symbol, struct ui_file *stream,
offset = extract_unsigned_integer (data + 1, addr_size,
gdbarch_byte_order (gdbarch));
- fprintf_filtered (stream,
- _("a thread-local variable at offset 0x%s "
- "in the thread-local storage for `%s'"),
- phex_nz (offset, addr_size), objfile_name (objfile));
+ gdb_printf (stream,
+ _("a thread-local variable at offset 0x%s "
+ "in the thread-local storage for `%s'"),
+ phex_nz (offset, addr_size), objfile_name (objfile));
data += 1 + addr_size + 1;
}
@@ -3244,10 +3275,10 @@ locexpr_describe_location_piece (struct symbol *symbol, struct ui_file *stream,
data = safe_read_uleb128 (data + 1, end, &offset);
offset = dwarf2_read_addr_index (per_cu, per_objfile, offset);
- fprintf_filtered (stream,
- _("a thread-local variable at offset 0x%s "
- "in the thread-local storage for `%s'"),
- phex_nz (offset, addr_size), objfile_name (objfile));
+ gdb_printf (stream,
+ _("a thread-local variable at offset 0x%s "
+ "in the thread-local storage for `%s'"),
+ phex_nz (offset, addr_size), objfile_name (objfile));
++data;
}
@@ -3256,7 +3287,7 @@ locexpr_describe_location_piece (struct symbol *symbol, struct ui_file *stream,
&& data + 1 < end
&& data[1] == DW_OP_stack_value)
{
- fprintf_filtered (stream, _("the constant %d"), data[0] - DW_OP_lit0);
+ gdb_printf (stream, _("the constant %d"), data[0] - DW_OP_lit0);
data += 2;
}
@@ -3293,8 +3324,8 @@ disassemble_dwarf_expression (struct ui_file *stream,
if (!name)
error (_("Unrecognized DWARF opcode 0x%02x at %ld"),
op, (long) (data - 1 - start));
- fprintf_filtered (stream, " %*ld: %s", indent + 4,
- (long) (data - 1 - start), name);
+ gdb_printf (stream, " %*ld: %s", indent + 4,
+ (long) (data - 1 - start), name);
switch (op)
{
@@ -3302,65 +3333,65 @@ disassemble_dwarf_expression (struct ui_file *stream,
ul = extract_unsigned_integer (data, addr_size,
gdbarch_byte_order (arch));
data += addr_size;
- fprintf_filtered (stream, " 0x%s", phex_nz (ul, addr_size));
+ gdb_printf (stream, " 0x%s", phex_nz (ul, addr_size));
break;
case DW_OP_const1u:
ul = extract_unsigned_integer (data, 1, gdbarch_byte_order (arch));
data += 1;
- fprintf_filtered (stream, " %s", pulongest (ul));
+ gdb_printf (stream, " %s", pulongest (ul));
break;
case DW_OP_const1s:
l = extract_signed_integer (data, 1, gdbarch_byte_order (arch));
data += 1;
- fprintf_filtered (stream, " %s", plongest (l));
+ gdb_printf (stream, " %s", plongest (l));
break;
case DW_OP_const2u:
ul = extract_unsigned_integer (data, 2, gdbarch_byte_order (arch));
data += 2;
- fprintf_filtered (stream, " %s", pulongest (ul));
+ gdb_printf (stream, " %s", pulongest (ul));
break;
case DW_OP_const2s:
l = extract_signed_integer (data, 2, gdbarch_byte_order (arch));
data += 2;
- fprintf_filtered (stream, " %s", plongest (l));
+ gdb_printf (stream, " %s", plongest (l));
break;
case DW_OP_const4u:
ul = extract_unsigned_integer (data, 4, gdbarch_byte_order (arch));
data += 4;
- fprintf_filtered (stream, " %s", pulongest (ul));
+ gdb_printf (stream, " %s", pulongest (ul));
break;
case DW_OP_const4s:
l = extract_signed_integer (data, 4, gdbarch_byte_order (arch));
data += 4;
- fprintf_filtered (stream, " %s", plongest (l));
+ gdb_printf (stream, " %s", plongest (l));
break;
case DW_OP_const8u:
ul = extract_unsigned_integer (data, 8, gdbarch_byte_order (arch));
data += 8;
- fprintf_filtered (stream, " %s", pulongest (ul));
+ gdb_printf (stream, " %s", pulongest (ul));
break;
case DW_OP_const8s:
l = extract_signed_integer (data, 8, gdbarch_byte_order (arch));
data += 8;
- fprintf_filtered (stream, " %s", plongest (l));
+ gdb_printf (stream, " %s", plongest (l));
break;
case DW_OP_constu:
data = safe_read_uleb128 (data, end, &ul);
- fprintf_filtered (stream, " %s", pulongest (ul));
+ gdb_printf (stream, " %s", pulongest (ul));
break;
case DW_OP_consts:
data = safe_read_sleb128 (data, end, &l);
- fprintf_filtered (stream, " %s", plongest (l));
+ gdb_printf (stream, " %s", plongest (l));
break;
case DW_OP_reg0:
@@ -3395,20 +3426,20 @@ disassemble_dwarf_expression (struct ui_file *stream,
case DW_OP_reg29:
case DW_OP_reg30:
case DW_OP_reg31:
- fprintf_filtered (stream, " [$%s]",
- locexpr_regname (arch, op - DW_OP_reg0));
+ gdb_printf (stream, " [$%s]",
+ locexpr_regname (arch, op - DW_OP_reg0));
break;
case DW_OP_regx:
data = safe_read_uleb128 (data, end, &ul);
- fprintf_filtered (stream, " %s [$%s]", pulongest (ul),
- locexpr_regname (arch, (int) ul));
+ gdb_printf (stream, " %s [$%s]", pulongest (ul),
+ locexpr_regname (arch, (int) ul));
break;
case DW_OP_implicit_value:
data = safe_read_uleb128 (data, end, &ul);
data += ul;
- fprintf_filtered (stream, " %s", pulongest (ul));
+ gdb_printf (stream, " %s", pulongest (ul));
break;
case DW_OP_breg0:
@@ -3444,72 +3475,72 @@ disassemble_dwarf_expression (struct ui_file *stream,
case DW_OP_breg30:
case DW_OP_breg31:
data = safe_read_sleb128 (data, end, &l);
- fprintf_filtered (stream, " %s [$%s]", plongest (l),
- locexpr_regname (arch, op - DW_OP_breg0));
+ gdb_printf (stream, " %s [$%s]", plongest (l),
+ locexpr_regname (arch, op - DW_OP_breg0));
break;
case DW_OP_bregx:
data = safe_read_uleb128 (data, end, &ul);
data = safe_read_sleb128 (data, end, &l);
- fprintf_filtered (stream, " register %s [$%s] offset %s",
- pulongest (ul),
- locexpr_regname (arch, (int) ul),
- plongest (l));
+ gdb_printf (stream, " register %s [$%s] offset %s",
+ pulongest (ul),
+ locexpr_regname (arch, (int) ul),
+ plongest (l));
break;
case DW_OP_fbreg:
data = safe_read_sleb128 (data, end, &l);
- fprintf_filtered (stream, " %s", plongest (l));
+ gdb_printf (stream, " %s", plongest (l));
break;
case DW_OP_xderef_size:
case DW_OP_deref_size:
case DW_OP_pick:
- fprintf_filtered (stream, " %d", *data);
+ gdb_printf (stream, " %d", *data);
++data;
break;
case DW_OP_plus_uconst:
data = safe_read_uleb128 (data, end, &ul);
- fprintf_filtered (stream, " %s", pulongest (ul));
+ gdb_printf (stream, " %s", pulongest (ul));
break;
case DW_OP_skip:
l = extract_signed_integer (data, 2, gdbarch_byte_order (arch));
data += 2;
- fprintf_filtered (stream, " to %ld",
- (long) (data + l - start));
+ gdb_printf (stream, " to %ld",
+ (long) (data + l - start));
break;
case DW_OP_bra:
l = extract_signed_integer (data, 2, gdbarch_byte_order (arch));
data += 2;
- fprintf_filtered (stream, " %ld",
- (long) (data + l - start));
+ gdb_printf (stream, " %ld",
+ (long) (data + l - start));
break;
case DW_OP_call2:
ul = extract_unsigned_integer (data, 2, gdbarch_byte_order (arch));
data += 2;
- fprintf_filtered (stream, " offset %s", phex_nz (ul, 2));
+ gdb_printf (stream, " offset %s", phex_nz (ul, 2));
break;
case DW_OP_call4:
ul = extract_unsigned_integer (data, 4, gdbarch_byte_order (arch));
data += 4;
- fprintf_filtered (stream, " offset %s", phex_nz (ul, 4));
+ gdb_printf (stream, " offset %s", phex_nz (ul, 4));
break;
case DW_OP_call_ref:
ul = extract_unsigned_integer (data, offset_size,
gdbarch_byte_order (arch));
data += offset_size;
- fprintf_filtered (stream, " offset %s", phex_nz (ul, offset_size));
+ gdb_printf (stream, " offset %s", phex_nz (ul, offset_size));
break;
case DW_OP_piece:
data = safe_read_uleb128 (data, end, &ul);
- fprintf_filtered (stream, " %s (bytes)", pulongest (ul));
+ gdb_printf (stream, " %s (bytes)", pulongest (ul));
break;
case DW_OP_bit_piece:
@@ -3518,8 +3549,8 @@ disassemble_dwarf_expression (struct ui_file *stream,
data = safe_read_uleb128 (data, end, &ul);
data = safe_read_uleb128 (data, end, &offset);
- fprintf_filtered (stream, " size %s offset %s (bits)",
- pulongest (ul), pulongest (offset));
+ gdb_printf (stream, " size %s offset %s (bits)",
+ pulongest (ul), pulongest (offset));
}
break;
@@ -3532,9 +3563,9 @@ disassemble_dwarf_expression (struct ui_file *stream,
data = safe_read_sleb128 (data, end, &l);
- fprintf_filtered (stream, " DIE %s offset %s",
- phex_nz (ul, offset_size),
- plongest (l));
+ gdb_printf (stream, " DIE %s offset %s",
+ phex_nz (ul, offset_size),
+ plongest (l));
}
break;
@@ -3547,11 +3578,11 @@ disassemble_dwarf_expression (struct ui_file *stream,
data = safe_read_uleb128 (data, end, &ul);
cu_offset offset = (cu_offset) ul;
type = dwarf2_get_die_type (offset, per_cu, per_objfile);
- fprintf_filtered (stream, "<");
+ gdb_printf (stream, "<");
type_print (type, "", stream, -1);
- fprintf_filtered (stream, " [0x%s]> %d",
- phex_nz (to_underlying (offset), 0),
- deref_addr_size);
+ gdb_printf (stream, " [0x%s]> %d",
+ phex_nz (to_underlying (offset), 0),
+ deref_addr_size);
}
break;
@@ -3563,15 +3594,15 @@ disassemble_dwarf_expression (struct ui_file *stream,
data = safe_read_uleb128 (data, end, &ul);
cu_offset type_die = (cu_offset) ul;
type = dwarf2_get_die_type (type_die, per_cu, per_objfile);
- fprintf_filtered (stream, "<");
+ gdb_printf (stream, "<");
type_print (type, "", stream, -1);
- fprintf_filtered (stream, " [0x%s]>",
- phex_nz (to_underlying (type_die), 0));
+ gdb_printf (stream, " [0x%s]>",
+ phex_nz (to_underlying (type_die), 0));
int n = *data++;
- fprintf_filtered (stream, " %d byte block:", n);
+ gdb_printf (stream, " %d byte block:", n);
for (int i = 0; i < n; ++i)
- fprintf_filtered (stream, " %02x", data[i]);
+ gdb_printf (stream, " %02x", data[i]);
data += n;
}
break;
@@ -3587,11 +3618,11 @@ disassemble_dwarf_expression (struct ui_file *stream,
cu_offset type_die = (cu_offset) ul;
type = dwarf2_get_die_type (type_die, per_cu, per_objfile);
- fprintf_filtered (stream, "<");
+ gdb_printf (stream, "<");
type_print (type, "", stream, -1);
- fprintf_filtered (stream, " [0x%s]> [$%s]",
- phex_nz (to_underlying (type_die), 0),
- locexpr_regname (arch, reg));
+ gdb_printf (stream, " [0x%s]> [$%s]",
+ phex_nz (to_underlying (type_die), 0),
+ locexpr_regname (arch, reg));
}
break;
@@ -3604,16 +3635,16 @@ disassemble_dwarf_expression (struct ui_file *stream,
cu_offset type_die = (cu_offset) ul;
if (to_underlying (type_die) == 0)
- fprintf_filtered (stream, "<0>");
+ gdb_printf (stream, "<0>");
else
{
struct type *type;
type = dwarf2_get_die_type (type_die, per_cu, per_objfile);
- fprintf_filtered (stream, "<");
+ gdb_printf (stream, "<");
type_print (type, "", stream, -1);
- fprintf_filtered (stream, " [0x%s]>",
- phex_nz (to_underlying (type_die), 0));
+ gdb_printf (stream, " [0x%s]>",
+ phex_nz (to_underlying (type_die), 0));
}
}
break;
@@ -3621,7 +3652,7 @@ disassemble_dwarf_expression (struct ui_file *stream,
case DW_OP_entry_value:
case DW_OP_GNU_entry_value:
data = safe_read_uleb128 (data, end, &ul);
- fputc_filtered ('\n', stream);
+ gdb_putc ('\n', stream);
disassemble_dwarf_expression (stream, arch, addr_size, offset_size,
start, data, data + ul, indent + 2,
all, per_cu, per_objfile);
@@ -3631,31 +3662,31 @@ disassemble_dwarf_expression (struct ui_file *stream,
case DW_OP_GNU_parameter_ref:
ul = extract_unsigned_integer (data, 4, gdbarch_byte_order (arch));
data += 4;
- fprintf_filtered (stream, " offset %s", phex_nz (ul, 4));
+ gdb_printf (stream, " offset %s", phex_nz (ul, 4));
break;
case DW_OP_addrx:
case DW_OP_GNU_addr_index:
data = safe_read_uleb128 (data, end, &ul);
ul = dwarf2_read_addr_index (per_cu, per_objfile, ul);
- fprintf_filtered (stream, " 0x%s", phex_nz (ul, addr_size));
+ gdb_printf (stream, " 0x%s", phex_nz (ul, addr_size));
break;
case DW_OP_GNU_const_index:
data = safe_read_uleb128 (data, end, &ul);
ul = dwarf2_read_addr_index (per_cu, per_objfile, ul);
- fprintf_filtered (stream, " %s", pulongest (ul));
+ gdb_printf (stream, " %s", pulongest (ul));
break;
case DW_OP_GNU_variable_value:
ul = extract_unsigned_integer (data, offset_size,
gdbarch_byte_order (arch));
data += offset_size;
- fprintf_filtered (stream, " offset %s", phex_nz (ul, offset_size));
+ gdb_printf (stream, " offset %s", phex_nz (ul, offset_size));
break;
}
- fprintf_filtered (stream, "\n");
+ gdb_printf (stream, "\n");
}
return data;
@@ -3667,10 +3698,10 @@ static void
show_dwarf_always_disassemble (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file,
- _("Whether to always disassemble "
- "DWARF expressions is %s.\n"),
- value);
+ gdb_printf (file,
+ _("Whether to always disassemble "
+ "DWARF expressions is %s.\n"),
+ value);
}
/* Describe a single location, which may in turn consist of multiple
@@ -3696,7 +3727,7 @@ locexpr_describe_location_1 (struct symbol *symbol, CORE_ADDR addr,
if (first_piece)
first_piece = 0;
else
- fprintf_filtered (stream, _(", and "));
+ gdb_printf (stream, _(", and "));
if (!dwarf_always_disassemble)
{
@@ -3712,7 +3743,7 @@ locexpr_describe_location_1 (struct symbol *symbol, CORE_ADDR addr,
}
if (disassemble)
{
- fprintf_filtered (stream, _("a complex DWARF expression:\n"));
+ gdb_printf (stream, _("a complex DWARF expression:\n"));
data = disassemble_dwarf_expression (stream,
objfile->arch (),
addr_size, offset_size, data,
@@ -3726,7 +3757,7 @@ locexpr_describe_location_1 (struct symbol *symbol, CORE_ADDR addr,
int empty = data == here;
if (disassemble)
- fprintf_filtered (stream, " ");
+ gdb_printf (stream, " ");
if (data[0] == DW_OP_piece)
{
uint64_t bytes;
@@ -3734,11 +3765,11 @@ locexpr_describe_location_1 (struct symbol *symbol, CORE_ADDR addr,
data = safe_read_uleb128 (data + 1, end, &bytes);
if (empty)
- fprintf_filtered (stream, _("an empty %s-byte piece"),
- pulongest (bytes));
+ gdb_printf (stream, _("an empty %s-byte piece"),
+ pulongest (bytes));
else
- fprintf_filtered (stream, _(" [%s-byte piece]"),
- pulongest (bytes));
+ gdb_printf (stream, _(" [%s-byte piece]"),
+ pulongest (bytes));
}
else if (data[0] == DW_OP_bit_piece)
{
@@ -3748,13 +3779,13 @@ locexpr_describe_location_1 (struct symbol *symbol, CORE_ADDR addr,
data = safe_read_uleb128 (data, end, &offset);
if (empty)
- fprintf_filtered (stream,
- _("an empty %s-bit piece"),
- pulongest (bits));
+ gdb_printf (stream,
+ _("an empty %s-bit piece"),
+ pulongest (bits));
else
- fprintf_filtered (stream,
- _(" [%s-bit piece, offset %s bits]"),
- pulongest (bits), pulongest (offset));
+ gdb_printf (stream,
+ _(" [%s-bit piece, offset %s bits]"),
+ pulongest (bits), pulongest (offset));
}
else
{
@@ -3856,7 +3887,7 @@ loclist_read_variable (struct symbol *symbol, struct frame_info *frame)
CORE_ADDR pc = frame ? get_frame_address_in_block (frame) : 0;
data = dwarf2_find_location_expression (dlbaton, &size, pc);
- val = dwarf2_evaluate_loc_desc (SYMBOL_TYPE (symbol), frame, data, size,
+ val = dwarf2_evaluate_loc_desc (symbol->type (), frame, data, size,
dlbaton->per_cu, dlbaton->per_objfile);
return val;
@@ -3880,13 +3911,13 @@ loclist_read_variable_at_entry (struct symbol *symbol, struct frame_info *frame)
CORE_ADDR pc;
if (frame == NULL || !get_frame_func_if_available (frame, &pc))
- return allocate_optimized_out_value (SYMBOL_TYPE (symbol));
+ return allocate_optimized_out_value (symbol->type ());
data = dwarf2_find_location_expression (dlbaton, &size, pc);
if (data == NULL)
- return allocate_optimized_out_value (SYMBOL_TYPE (symbol));
+ return allocate_optimized_out_value (symbol->type ());
- return value_of_dwarf_block_entry (SYMBOL_TYPE (symbol), frame, data, size);
+ return value_of_dwarf_block_entry (symbol->type (), frame, data, size);
}
/* Implementation of get_symbol_read_needs from
@@ -3930,7 +3961,7 @@ loclist_describe_location (struct symbol *symbol, CORE_ADDR addr,
loc_ptr = dlbaton->data;
buf_end = dlbaton->data + dlbaton->size;
- fprintf_filtered (stream, _("multi-location:\n"));
+ gdb_printf (stream, _("multi-location:\n"));
/* Iterate through locations until we run out. */
while (!done)
@@ -3965,8 +3996,8 @@ loclist_describe_location (struct symbol *symbol, CORE_ADDR addr,
case DEBUG_LOC_BASE_ADDRESS:
base_address = high;
- fprintf_filtered (stream, _(" Base address %s"),
- paddress (gdbarch, base_address));
+ gdb_printf (stream, _(" Base address %s"),
+ paddress (gdbarch, base_address));
continue;
case DEBUG_LOC_START_END:
@@ -4009,15 +4040,15 @@ loclist_describe_location (struct symbol *symbol, CORE_ADDR addr,
/* (It would improve readability to print only the minimum
necessary digits of the second number of the range.) */
- fprintf_filtered (stream, _(" Range %s-%s: "),
- paddress (gdbarch, low), paddress (gdbarch, high));
+ gdb_printf (stream, _(" Range %s-%s: "),
+ paddress (gdbarch, low), paddress (gdbarch, high));
/* Now describe this particular location. */
locexpr_describe_location_1 (symbol, low, stream, loc_ptr, length,
addr_size, offset_size,
dlbaton->per_cu, dlbaton->per_objfile);
- fprintf_filtered (stream, "\n");
+ gdb_printf (stream, "\n");
loc_ptr += length;
}
diff --git a/gdb/dwarf2/loc.h b/gdb/dwarf2/loc.h
index 3a1aae2e9ec..a9834d32066 100644
--- a/gdb/dwarf2/loc.h
+++ b/gdb/dwarf2/loc.h
@@ -114,14 +114,16 @@ struct property_addr_info
Returns true if PROP could be converted and the static value is passed
back into VALUE, otherwise returns false.
- If PUSH_INITIAL_VALUE is true, then the top value of ADDR_STACK
- will be pushed before evaluating a location expression. */
+ Any values in PUSH_VALUES will be pushed before evaluating the location
+ expression, PUSH_VALUES[0] will be pushed first, then PUSH_VALUES[1],
+ etc. This means the during evaluation PUSH_VALUES[0] will be at the
+ bottom of the stack. */
bool dwarf2_evaluate_property (const struct dynamic_prop *prop,
struct frame_info *frame,
const struct property_addr_info *addr_stack,
CORE_ADDR *value,
- bool push_initial_value = false);
+ gdb::array_view<CORE_ADDR> push_values = {});
/* A helper for the compiler interface that compiles a single dynamic
property to C code.
@@ -294,4 +296,4 @@ extern struct value *indirect_synthetic_pointer
dwarf2_per_objfile *per_objfile, struct frame_info *frame,
struct type *type, bool resolve_abstract_p = false);
-#endif /* dwarf2loc.h */
+#endif /* DWARF2LOC_H */
diff --git a/gdb/dwarf2/macro.c b/gdb/dwarf2/macro.c
index b378d797479..99c3653a2c3 100644
--- a/gdb/dwarf2/macro.c
+++ b/gdb/dwarf2/macro.c
@@ -52,7 +52,7 @@ macro_start_file (buildsym_compunit *builder,
const struct line_header *lh)
{
/* File name relative to the compilation directory of this source file. */
- gdb::unique_xmalloc_ptr<char> file_name = lh->file_file_name (file);
+ std::string file_name = lh->file_file_name (file);
if (! current_file)
{
@@ -62,11 +62,11 @@ macro_start_file (buildsym_compunit *builder,
/* If we have no current file, then this must be the start_file
directive for the compilation unit's main source file. */
- current_file = macro_set_main (macro_table, file_name.get ());
+ current_file = macro_set_main (macro_table, file_name.c_str ());
macro_define_special (macro_table);
}
else
- current_file = macro_include (current_file, line, file_name.get ());
+ current_file = macro_include (current_file, line, file_name.c_str ());
return current_file;
}
diff --git a/gdb/dwarf2/mapped-index.h b/gdb/dwarf2/mapped-index.h
new file mode 100644
index 00000000000..7d71347f9f4
--- /dev/null
+++ b/gdb/dwarf2/mapped-index.h
@@ -0,0 +1,126 @@
+/* Base class for mapped indices
+
+ Copyright (C) 2021, 2022 Free Software Foundation, Inc.
+
+ This file is part of GDB.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#ifndef GDB_DWARF2_MAPPED_INDEX_H
+#define GDB_DWARF2_MAPPED_INDEX_H
+
+#include "language.h"
+
+/* An index into a (C++) symbol name component in a symbol name as
+ recorded in the mapped_index's symbol table. For each C++ symbol
+ in the symbol table, we record one entry for the start of each
+ component in the symbol in a table of name components, and then
+ sort the table, in order to be able to binary search symbol names,
+ ignoring leading namespaces, both completion and regular look up.
+ For example, for symbol "A::B::C", we'll have an entry that points
+ to "A::B::C", another that points to "B::C", and another for "C".
+ Note that function symbols in GDB index have no parameter
+ information, just the function/method names. You can convert a
+ name_component to a "const char *" using the
+ 'mapped_index::symbol_name_at(offset_type)' method. */
+
+struct name_component
+{
+ /* Offset in the symbol name where the component starts. Stored as
+ a (32-bit) offset instead of a pointer to save memory and improve
+ locality on 64-bit architectures. */
+ offset_type name_offset;
+
+ /* The symbol's index in the symbol and constant pool tables of a
+ mapped_index. */
+ offset_type idx;
+};
+
+class cooked_index_vector;
+
+/* Base class of all DWARF scanner types. */
+
+struct dwarf_scanner_base
+{
+ dwarf_scanner_base () = default;
+ virtual ~dwarf_scanner_base () = default;
+ DISABLE_COPY_AND_ASSIGN (dwarf_scanner_base);
+
+ /* Return a quick_symbol_functions instance that refers back to this
+ dwarf_scanner_base. */
+ virtual quick_symbol_functions_up make_quick_functions () const = 0;
+
+ /* An ad hoc version check. This is needed for .gdb_index to check
+ whether a version 8 or above index is in use. Returns true if
+ the index is usable, false otherwise. */
+ virtual bool version_check () const
+ {
+ return true;
+ }
+
+ /* This is called when writing an index. For a cooked index, it
+ will return 'this' as a cooked index. For other forms, it will
+ throw an exception with an appropriate error message. */
+ virtual cooked_index_vector *index_for_writing () = 0;
+};
+
+/* Base class containing bits shared by both .gdb_index and
+ .debug_name indexes. */
+
+struct mapped_index_base : public dwarf_scanner_base
+{
+ mapped_index_base () = default;
+ DISABLE_COPY_AND_ASSIGN (mapped_index_base);
+
+ /* The name_component table (a sorted vector). See name_component's
+ description above. */
+ std::vector<name_component> name_components;
+
+ /* How NAME_COMPONENTS is sorted. */
+ enum case_sensitivity name_components_casing;
+
+ /* Return the number of names in the symbol table. */
+ virtual size_t symbol_name_count () const = 0;
+
+ /* Get the name of the symbol at IDX in the symbol table. */
+ virtual const char *symbol_name_at
+ (offset_type idx, dwarf2_per_objfile *per_objfile) const = 0;
+
+ /* Return whether the name at IDX in the symbol table should be
+ ignored. */
+ virtual bool symbol_name_slot_invalid (offset_type idx) const
+ {
+ return false;
+ }
+
+ /* Build the symbol name component sorted vector, if we haven't
+ yet. */
+ void build_name_components (dwarf2_per_objfile *per_objfile);
+
+ /* Returns the lower (inclusive) and upper (exclusive) bounds of the
+ possible matches for LN_NO_PARAMS in the name component
+ vector. */
+ std::pair<std::vector<name_component>::const_iterator,
+ std::vector<name_component>::const_iterator>
+ find_name_components_bounds (const lookup_name_info &ln_no_params,
+ enum language lang,
+ dwarf2_per_objfile *per_objfile) const;
+
+ cooked_index_vector *index_for_writing () override
+ {
+ error (_("Cannot use an index to create the index"));
+ }
+};
+
+#endif /* GDB_DWARF2_MAPPED_INDEX_H */
diff --git a/gdb/dwarf2/public.h b/gdb/dwarf2/public.h
index 1723060a2e8..a9d4682c856 100644
--- a/gdb/dwarf2/public.h
+++ b/gdb/dwarf2/public.h
@@ -38,9 +38,6 @@ enum class dw_index_kind
entry on the objfile's "qf" list. */
extern void dwarf2_initialize_objfile (struct objfile *objfile);
-struct psymbol_functions;
-extern void dwarf2_build_psymtabs (struct objfile *,
- psymbol_functions *psf = nullptr);
extern void dwarf2_build_frame_info (struct objfile *);
#endif /* DWARF2_PUBLIC_H */
diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c
index 3fe6c3ab90c..d146d525066 100644
--- a/gdb/dwarf2/read.c
+++ b/gdb/dwarf2/read.c
@@ -64,7 +64,6 @@
#include "block.h"
#include "addrmap.h"
#include "typeprint.h"
-#include "psympriv.h"
#include "c-lang.h"
#include "go-lang.h"
#include "valprint.h"
@@ -89,6 +88,11 @@
#include "gdbsupport/pathstuff.h"
#include "count-one-bits.h"
#include <unordered_set>
+#include "dwarf2/abbrev-cache.h"
+#include "cooked-index.h"
+#include "split-name.h"
+#include "gdbsupport/parallel-for.h"
+#include "gdbsupport/thread-pool.h"
/* When == 1, print basic high level tracing messages.
When > 1, be more verbose.
@@ -152,78 +156,6 @@ static int dwarf2_loclist_block_index;
/* Size of .debug_rnglists section header for 64-bit DWARF format. */
#define RNGLIST_HEADER_SIZE64 20
-/* An index into a (C++) symbol name component in a symbol name as
- recorded in the mapped_index's symbol table. For each C++ symbol
- in the symbol table, we record one entry for the start of each
- component in the symbol in a table of name components, and then
- sort the table, in order to be able to binary search symbol names,
- ignoring leading namespaces, both completion and regular look up.
- For example, for symbol "A::B::C", we'll have an entry that points
- to "A::B::C", another that points to "B::C", and another for "C".
- Note that function symbols in GDB index have no parameter
- information, just the function/method names. You can convert a
- name_component to a "const char *" using the
- 'mapped_index::symbol_name_at(offset_type)' method. */
-
-struct name_component
-{
- /* Offset in the symbol name where the component starts. Stored as
- a (32-bit) offset instead of a pointer to save memory and improve
- locality on 64-bit architectures. */
- offset_type name_offset;
-
- /* The symbol's index in the symbol and constant pool tables of a
- mapped_index. */
- offset_type idx;
-};
-
-/* Base class containing bits shared by both .gdb_index and
- .debug_name indexes. */
-
-struct mapped_index_base
-{
- mapped_index_base () = default;
- DISABLE_COPY_AND_ASSIGN (mapped_index_base);
-
- /* The name_component table (a sorted vector). See name_component's
- description above. */
- std::vector<name_component> name_components;
-
- /* How NAME_COMPONENTS is sorted. */
- enum case_sensitivity name_components_casing;
-
- /* Return the number of names in the symbol table. */
- virtual size_t symbol_name_count () const = 0;
-
- /* Get the name of the symbol at IDX in the symbol table. */
- virtual const char *symbol_name_at
- (offset_type idx, dwarf2_per_objfile *per_objfile) const = 0;
-
- /* Return whether the name at IDX in the symbol table should be
- ignored. */
- virtual bool symbol_name_slot_invalid (offset_type idx) const
- {
- return false;
- }
-
- /* Build the symbol name component sorted vector, if we haven't
- yet. */
- void build_name_components (dwarf2_per_objfile *per_objfile);
-
- /* Returns the lower (inclusive) and upper (exclusive) bounds of the
- possible matches for LN_NO_PARAMS in the name component
- vector. */
- std::pair<std::vector<name_component>::const_iterator,
- std::vector<name_component>::const_iterator>
- find_name_components_bounds (const lookup_name_info &ln_no_params,
- enum language lang,
- dwarf2_per_objfile *per_objfile) const;
-
- /* Prevent deleting/destroying via a base class pointer. */
-protected:
- ~mapped_index_base() = default;
-};
-
/* This is a view into the index that converts from bytes to an
offset_type, and allows indexing. Unaligned bytes are specifically
allowed here, and handled via unpacking. */
@@ -311,6 +243,13 @@ struct mapped_index final : public mapped_index_base
size_t symbol_name_count () const override
{ return this->symbol_table.size () / 2; }
+
+ quick_symbol_functions_up make_quick_functions () const override;
+
+ bool version_check () const override
+ {
+ return version >= 8;
+ }
};
/* A description of the mapped .debug_names.
@@ -360,9 +299,11 @@ struct mapped_debug_names final : public mapped_index_base
size_t symbol_name_count () const override
{ return this->name_count; }
+
+ quick_symbol_functions_up make_quick_functions () const override;
};
-/* See dwarf2read.h. */
+/* See dwarf2/read.h. */
dwarf2_per_objfile *
get_dwarf2_per_objfile (struct objfile *objfile)
@@ -477,13 +418,8 @@ struct stmt_list_hash
that can be shared across objfiles. The non-shareable parts are in
type_unit_group_unshareable. */
-struct type_unit_group : public dwarf2_per_cu_data
+struct type_unit_group
{
- /* The TUs that share this DW_AT_stmt_list entry.
- This is added to while parsing type units to build partial symtabs,
- and is deleted afterwards and not used again. */
- std::vector<signatured_type *> *tus = nullptr;
-
/* The data used to construct the hash key. */
struct stmt_list_hash hash {};
};
@@ -791,7 +727,8 @@ public:
dwarf2_per_objfile *per_objfile,
struct abbrev_table *abbrev_table,
dwarf2_cu *existing_cu,
- bool skip_partial);
+ bool skip_partial,
+ abbrev_cache *cache = nullptr);
explicit cutu_reader (struct dwarf2_per_cu_data *this_cu,
dwarf2_per_objfile *per_objfile,
@@ -800,6 +737,8 @@ public:
DISABLE_COPY_AND_ASSIGN (cutu_reader);
+ cutu_reader (cutu_reader &&) = default;
+
const gdb_byte *info_ptr = nullptr;
struct die_info *comp_unit_die = nullptr;
bool dummy_p = false;
@@ -808,6 +747,13 @@ public:
for dummy CUs. */
void keep ();
+ /* Release the abbrev table, transferring ownership to the
+ caller. */
+ abbrev_table_up release_abbrev_table ()
+ {
+ return std::move (m_abbrev_table_holder);
+ }
+
private:
void init_tu_and_read_dwo_dies (dwarf2_per_cu_data *this_cu,
dwarf2_per_objfile *per_objfile,
@@ -823,164 +769,6 @@ private:
abbrev_table_up m_dwo_abbrev_table;
};
-/* When we construct a partial symbol table entry we only
- need this much information. */
-struct partial_die_info : public allocate_on_obstack
- {
- partial_die_info (sect_offset sect_off, const struct abbrev_info *abbrev);
-
- /* Disable assign but still keep copy ctor, which is needed
- load_partial_dies. */
- partial_die_info& operator=(const partial_die_info& rhs) = delete;
- partial_die_info (const partial_die_info &) = default;
-
- /* Adjust the partial die before generating a symbol for it. This
- function may set the is_external flag or change the DIE's
- name. */
- void fixup (struct dwarf2_cu *cu);
-
- /* Read a minimal amount of information into the minimal die
- structure. */
- const gdb_byte *read (const struct die_reader_specs *reader,
- const struct abbrev_info &abbrev,
- const gdb_byte *info_ptr);
-
- /* Compute the name of this partial DIE. This memoizes the
- result, so it is safe to call multiple times. */
- const char *name (dwarf2_cu *cu);
-
- /* Offset of this DIE. */
- const sect_offset sect_off;
-
- /* DWARF-2 tag for this DIE. */
- const ENUM_BITFIELD(dwarf_tag) tag : 16;
-
- /* Assorted flags describing the data found in this DIE. */
- const unsigned int has_children : 1;
-
- unsigned int is_external : 1;
- unsigned int is_declaration : 1;
- unsigned int has_type : 1;
- unsigned int has_specification : 1;
- unsigned int has_pc_info : 1;
- unsigned int has_range_info : 1;
- unsigned int may_be_inlined : 1;
-
- /* This DIE has been marked DW_AT_main_subprogram. */
- unsigned int main_subprogram : 1;
-
- /* Flag set if the SCOPE field of this structure has been
- computed. */
- unsigned int scope_set : 1;
-
- /* Flag set if the DIE has a byte_size attribute. */
- unsigned int has_byte_size : 1;
-
- /* Flag set if the DIE has a DW_AT_const_value attribute. */
- unsigned int has_const_value : 1;
-
- /* Flag set if any of the DIE's children are template arguments. */
- unsigned int has_template_arguments : 1;
-
- /* Flag set if fixup has been called on this die. */
- unsigned int fixup_called : 1;
-
- /* Flag set if DW_TAG_imported_unit uses DW_FORM_GNU_ref_alt. */
- unsigned int is_dwz : 1;
-
- /* Flag set if spec_offset uses DW_FORM_GNU_ref_alt. */
- unsigned int spec_is_dwz : 1;
-
- unsigned int canonical_name : 1;
-
- /* The name of this DIE. Normally the value of DW_AT_name, but
- sometimes a default name for unnamed DIEs. */
- const char *raw_name = nullptr;
-
- /* The linkage name, if present. */
- const char *linkage_name = nullptr;
-
- /* The scope to prepend to our children. This is generally
- allocated on the comp_unit_obstack, so will disappear
- when this compilation unit leaves the cache. */
- const char *scope = nullptr;
-
- /* Some data associated with the partial DIE. The tag determines
- which field is live. */
- union
- {
- /* The location description associated with this DIE, if any. */
- struct dwarf_block *locdesc;
- /* The offset of an import, for DW_TAG_imported_unit. */
- sect_offset sect_off;
- } d {};
-
- union
- {
- /* If HAS_PC_INFO, the PC range associated with this DIE. */
- struct
- {
- CORE_ADDR lowpc;
- CORE_ADDR highpc;
- };
- /* If HAS_RANGE_INFO, the ranges offset associated with this DIE. */
- ULONGEST ranges_offset;
- };
-
- /* Pointer into the info_buffer (or types_buffer) pointing at the target of
- DW_AT_sibling, if any. */
- /* NOTE: This member isn't strictly necessary, partial_die_info::read
- could return DW_AT_sibling values to its caller load_partial_dies. */
- const gdb_byte *sibling = nullptr;
-
- /* If HAS_SPECIFICATION, the offset of the DIE referred to by
- DW_AT_specification (or DW_AT_abstract_origin or
- DW_AT_extension). */
- sect_offset spec_offset {};
-
- /* Pointers to this DIE's parent, first child, and next sibling,
- if any. */
- struct partial_die_info *die_parent = nullptr;
- struct partial_die_info *die_child = nullptr;
- struct partial_die_info *die_sibling = nullptr;
-
- friend struct partial_die_info *
- dwarf2_cu::find_partial_die (sect_offset sect_off);
-
- private:
- /* Only need to do look up in dwarf2_cu::find_partial_die. */
- partial_die_info (sect_offset sect_off)
- : partial_die_info (sect_off, DW_TAG_padding, 0)
- {
- }
-
- partial_die_info (sect_offset sect_off_, enum dwarf_tag tag_,
- int has_children_)
- : sect_off (sect_off_), tag (tag_), has_children (has_children_)
- {
- is_external = 0;
- is_declaration = 0;
- has_type = 0;
- has_specification = 0;
- has_pc_info = 0;
- has_range_info = 0;
- may_be_inlined = 0;
- main_subprogram = 0;
- scope_set = 0;
- has_byte_size = 0;
- has_const_value = 0;
- has_template_arguments = 0;
- fixup_called = 0;
- is_dwz = 0;
- spec_is_dwz = 0;
- canonical_name = 0;
- /* Don't set these using NSDMI (Non-static data member initialisation),
- because g++-4.8 will error out. */
- lowpc = 0;
- highpc = 0;
- }
- };
-
/* FIXME: We might want to set this from BFD via bfd_arch_bits_per_byte,
but this would require a corresponding change in unpack_field_as_long
and friends. */
@@ -1090,9 +878,9 @@ static void
show_dwarf_max_cache_age (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("The upper bound on the age of cached "
- "DWARF compilation units is %s.\n"),
- value);
+ gdb_printf (file, _("The upper bound on the age of cached "
+ "DWARF compilation units is %s.\n"),
+ value);
}
/* local function prototypes */
@@ -1100,63 +888,14 @@ show_dwarf_max_cache_age (struct ui_file *file, int from_tty,
static void dwarf2_find_base_address (struct die_info *die,
struct dwarf2_cu *cu);
-static dwarf2_psymtab *create_partial_symtab
- (dwarf2_per_cu_data *per_cu, dwarf2_per_objfile *per_objfile,
- const char *name);
-
-static void build_type_psymtabs_reader (const struct die_reader_specs *reader,
- const gdb_byte *info_ptr,
- struct die_info *type_unit_die);
+class cooked_index_storage;
+static void build_type_psymtabs_reader (cutu_reader *reader,
+ cooked_index_storage *storage);
static void dwarf2_build_psymtabs_hard (dwarf2_per_objfile *per_objfile);
-static void scan_partial_symbols (struct partial_die_info *,
- CORE_ADDR *, CORE_ADDR *,
- int, struct dwarf2_cu *);
-
-static void add_partial_symbol (struct partial_die_info *,
- struct dwarf2_cu *);
-
-static void add_partial_namespace (struct partial_die_info *pdi,
- CORE_ADDR *lowpc, CORE_ADDR *highpc,
- int set_addrmap, struct dwarf2_cu *cu);
-
-static void add_partial_module (struct partial_die_info *pdi, CORE_ADDR *lowpc,
- CORE_ADDR *highpc, int set_addrmap,
- struct dwarf2_cu *cu);
-
-static void add_partial_enumeration (struct partial_die_info *enum_pdi,
- struct dwarf2_cu *cu);
-
-static void add_partial_subprogram (struct partial_die_info *pdi,
- CORE_ADDR *lowpc, CORE_ADDR *highpc,
- int need_pc, struct dwarf2_cu *cu);
-
static unsigned int peek_abbrev_code (bfd *, const gdb_byte *);
-static struct partial_die_info *load_partial_dies
- (const struct die_reader_specs *, const gdb_byte *, int);
-
-/* A pair of partial_die_info and compilation unit. */
-struct cu_partial_die_info
-{
- /* The compilation unit of the partial_die_info. */
- struct dwarf2_cu *cu;
- /* A partial_die_info. */
- struct partial_die_info *pdi;
-
- cu_partial_die_info (struct dwarf2_cu *cu, struct partial_die_info *pdi)
- : cu (cu),
- pdi (pdi)
- { /* Nothing. */ }
-
-private:
- cu_partial_die_info () = delete;
-};
-
-static const struct cu_partial_die_info find_partial_die (sect_offset, int,
- struct dwarf2_cu *);
-
static const gdb_byte *read_attribute (const struct die_reader_specs *,
struct attribute *,
const struct attr_abbrev *,
@@ -1207,8 +946,7 @@ static line_header_up dwarf_decode_line_header (sect_offset sect_off,
struct dwarf2_cu *cu);
static void dwarf_decode_lines (struct line_header *,
- const file_and_directory &,
- struct dwarf2_cu *, dwarf2_psymtab *,
+ struct dwarf2_cu *,
CORE_ADDR, int decode_mapping);
static void dwarf2_start_subfile (struct dwarf2_cu *, const char *,
@@ -1297,7 +1035,8 @@ enum pc_bounds_kind
static enum pc_bounds_kind dwarf2_get_pc_bounds (struct die_info *,
CORE_ADDR *, CORE_ADDR *,
struct dwarf2_cu *,
- dwarf2_psymtab *);
+ addrmap *,
+ void *);
static void get_scope_pc_bounds (struct die_info *,
CORE_ADDR *, CORE_ADDR *,
@@ -1441,11 +1180,8 @@ static void dwarf2_symbol_mark_computed (const struct attribute *attr,
static const gdb_byte *skip_one_die (const struct die_reader_specs *reader,
const gdb_byte *info_ptr,
- const struct abbrev_info *abbrev);
-
-static hashval_t partial_die_hash (const void *item);
-
-static int partial_die_eq (const void *item_lhs, const void *item_rhs);
+ const struct abbrev_info *abbrev,
+ bool do_skip_children = true);
static struct dwarf2_per_cu_data *dwarf2_find_containing_comp_unit
(sect_offset sect_off, unsigned int offset_in_dwz,
@@ -1544,7 +1280,7 @@ static const char *compute_include_file_name
(const struct line_header *lh,
const file_entry &fe,
const file_and_directory &cu_info,
- gdb::unique_xmalloc_ptr<char> *name_holder);
+ std::string &name_holder);
static htab_up allocate_signatured_type_table ();
@@ -2024,6 +1760,25 @@ dwarf2_get_section_info (struct objfile *objfile,
*sizep = info->size;
}
+/* See dwarf2/read.h. */
+
+void
+dwarf2_per_bfd::map_info_sections (struct objfile *objfile)
+{
+ info.read (objfile);
+ abbrev.read (objfile);
+ line.read (objfile);
+ str.read (objfile);
+ str_offsets.read (objfile);
+ line_str.read (objfile);
+ ranges.read (objfile);
+ rnglists.read (objfile);
+ addr.read (objfile);
+
+ for (auto &section : types)
+ section.read (objfile);
+}
+
/* DWARF quick_symbol_functions support. */
@@ -2053,49 +1808,6 @@ struct quick_file_names
const char **real_names;
};
-/* When using the index (and thus not using psymtabs), each CU has an
- object of this type. This is used to hold information needed by
- the various "quick" methods. */
-struct dwarf2_per_cu_quick_data
-{
- /* The file table. This can be NULL if there was no file table
- or it's currently not read in.
- NOTE: This points into dwarf2_per_objfile->per_bfd->quick_file_names_table. */
- struct quick_file_names *file_names;
-
- /* A temporary mark bit used when iterating over all CUs in
- expand_symtabs_matching. */
- unsigned int mark : 1;
-
- /* True if we've tried to read the file table. There will be no
- point in trying to read it again next time. */
- bool files_read : 1;
-};
-
-/* A subclass of psymbol_functions that arranges to read the DWARF
- partial symbols when needed. */
-struct lazy_dwarf_reader : public psymbol_functions
-{
- using psymbol_functions::psymbol_functions;
-
- bool can_lazily_read_symbols () override
- {
- return true;
- }
-
- void read_partial_symbols (struct objfile *objfile) override
- {
- if (dwarf2_has_info (objfile, nullptr))
- dwarf2_build_psymtabs (objfile, this);
- }
-};
-
-static quick_symbol_functions_up
-make_lazy_dwarf_reader ()
-{
- return quick_symbol_functions_up (new lazy_dwarf_reader);
-}
-
struct dwarf2_base_index_functions : public quick_symbol_functions
{
bool has_symbols (struct objfile *objfile) override;
@@ -2134,6 +1846,40 @@ struct dwarf2_base_index_functions : public quick_symbol_functions
bool need_fullname) override;
};
+/* With OBJF_READNOW, the DWARF reader expands all CUs immediately.
+ It's handy in this case to have an empty implementation of the
+ quick symbol functions, to avoid special cases in the rest of the
+ code. */
+
+struct readnow_functions : public dwarf2_base_index_functions
+{
+ void dump (struct objfile *objfile) override
+ {
+ }
+
+ void expand_matching_symbols
+ (struct objfile *,
+ const lookup_name_info &lookup_name,
+ domain_enum domain,
+ int global,
+ symbol_compare_ftype *ordered_compare) override
+ {
+ }
+
+ bool expand_symtabs_matching
+ (struct objfile *objfile,
+ gdb::function_view<expand_symtabs_file_matcher_ftype> file_matcher,
+ const lookup_name_info *lookup_name,
+ gdb::function_view<expand_symtabs_symbol_matcher_ftype> symbol_matcher,
+ gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify,
+ block_search_flags search_flags,
+ domain_enum domain,
+ enum search_domain kind) override
+ {
+ return true;
+ }
+};
+
struct dwarf2_gdb_index : public dwarf2_base_index_functions
{
void dump (struct objfile *objfile) override;
@@ -2178,14 +1924,14 @@ struct dwarf2_debug_names_index : public dwarf2_base_index_functions
enum search_domain kind) override;
};
-static quick_symbol_functions_up
-make_dwarf_gdb_index ()
+quick_symbol_functions_up
+mapped_index::make_quick_functions () const
{
return quick_symbol_functions_up (new dwarf2_gdb_index);
}
-static quick_symbol_functions_up
-make_dwarf_debug_names ()
+quick_symbol_functions_up
+mapped_debug_names::make_quick_functions () const
{
return quick_symbol_functions_up (new dwarf2_debug_names_index);
}
@@ -2279,11 +2025,6 @@ static void
dw2_do_instantiate_symtab (dwarf2_per_cu_data *per_cu,
dwarf2_per_objfile *per_objfile, bool skip_partial)
{
- /* Skip type_unit_groups, reading the type units they contain
- is handled elsewhere. */
- if (per_cu->type_unit_group_p ())
- return;
-
{
/* The destructor of dwarf2_queue_guard frees any entries left on
the queue. After this point we're guaranteed to leave this function
@@ -2302,7 +2043,7 @@ dw2_do_instantiate_symtab (dwarf2_per_cu_data *per_cu,
&& cu != NULL
&& cu->dwo_unit != NULL
&& per_objfile->per_bfd->index_table != NULL
- && per_objfile->per_bfd->index_table->version <= 7
+ && !per_objfile->per_bfd->index_table->version_check ()
/* DWP files aren't supported yet. */
&& get_dwp_file (per_objfile) == NULL)
queue_and_load_all_dwo_tus (cu);
@@ -2326,8 +2067,6 @@ dw2_instantiate_symtab (dwarf2_per_cu_data *per_cu,
dwarf2_per_objfile *per_objfile,
bool skip_partial)
{
- gdb_assert (per_objfile->per_bfd->using_index);
-
if (!per_objfile->symtab_set_p (per_cu))
{
free_cached_comp_units freer (per_objfile);
@@ -2376,8 +2115,6 @@ create_cu_from_index_list (dwarf2_per_bfd *per_bfd,
the_cu->sect_off = sect_off;
the_cu->length = length;
the_cu->section = section;
- the_cu->v.quick = OBSTACK_ZALLOC (&per_bfd->obstack,
- struct dwarf2_per_cu_quick_data);
the_cu->is_dwz = is_dwz;
return the_cu;
}
@@ -2458,9 +2195,6 @@ create_signatured_type_table_from_index
sig_type->type_offset_in_tu = type_offset_in_tu;
sig_type->section = section;
sig_type->sect_off = sect_off;
- sig_type->v.quick
- = OBSTACK_ZALLOC (&per_bfd->obstack,
- struct dwarf2_per_cu_quick_data);
slot = htab_find_slot (sig_types_hash.get (), sig_type.get (), INSERT);
*slot = sig_type.get ();
@@ -2509,9 +2243,6 @@ create_signatured_type_table_from_debug_names
sig_type->type_offset_in_tu = cu_header.type_cu_offset_in_tu;
sig_type->section = section;
sig_type->sect_off = sect_off;
- sig_type->v.quick
- = OBSTACK_ZALLOC (&per_objfile->per_bfd->obstack,
- struct dwarf2_per_cu_quick_data);
slot = htab_find_slot (sig_types_hash.get (), sig_type.get (), INSERT);
*slot = sig_type.get ();
@@ -2579,12 +2310,14 @@ create_addrmap_from_index (dwarf2_per_objfile *per_objfile,
&per_bfd->obstack);
}
-/* Read the address map data from DWARF-5 .debug_aranges, and use it to
- populate the psymtabs_addrmap. */
+/* Read the address map data from DWARF-5 .debug_aranges, and use it
+ to populate given addrmap. Returns true on success, false on
+ failure. */
-static void
-create_addrmap_from_aranges (dwarf2_per_objfile *per_objfile,
- struct dwarf2_section_info *section)
+static bool
+read_addrmap_from_aranges (dwarf2_per_objfile *per_objfile,
+ struct dwarf2_section_info *section,
+ addrmap *mutable_map)
{
struct objfile *objfile = per_objfile->objfile;
bfd *abfd = objfile->obfd;
@@ -2592,9 +2325,6 @@ create_addrmap_from_aranges (dwarf2_per_objfile *per_objfile,
const CORE_ADDR baseaddr = objfile->text_section_offset ();
dwarf2_per_bfd *per_bfd = per_objfile->per_bfd;
- auto_obstack temp_obstack;
- addrmap *mutable_map = addrmap_create_mutable (&temp_obstack);
-
std::unordered_map<sect_offset,
dwarf2_per_cu_data *,
gdb::hash_enum<sect_offset>>
@@ -2603,8 +2333,9 @@ create_addrmap_from_aranges (dwarf2_per_objfile *per_objfile,
{
/* A TU will not need aranges, and skipping them here is an easy
way of ignoring .debug_types -- and possibly seeing a
- duplicate section offset -- entirely. */
- if (per_cu->is_debug_types)
+ duplicate section offset -- entirely. The same applies to
+ units coming from a dwz file. */
+ if (per_cu->is_debug_types || per_cu->is_dwz)
continue;
const auto insertpair
@@ -2615,7 +2346,7 @@ create_addrmap_from_aranges (dwarf2_per_objfile *per_objfile,
warning (_("Section .debug_aranges in %s has duplicate "
"debug_info_offset %s, ignoring .debug_aranges."),
objfile_name (objfile), sect_offset_str (per_cu->sect_off));
- return;
+ return false;
}
}
@@ -2646,7 +2377,7 @@ create_addrmap_from_aranges (dwarf2_per_objfile *per_objfile,
plongest (entry_addr - section->buffer),
plongest (bytes_read + entry_length),
pulongest (section->size));
- return;
+ return false;
}
/* The version number. */
@@ -2658,7 +2389,7 @@ create_addrmap_from_aranges (dwarf2_per_objfile *per_objfile,
"has unsupported version %d, ignoring .debug_aranges."),
objfile_name (objfile),
plongest (entry_addr - section->buffer), version);
- return;
+ return false;
}
const uint64_t debug_info_offset
@@ -2674,7 +2405,7 @@ create_addrmap_from_aranges (dwarf2_per_objfile *per_objfile,
objfile_name (objfile),
plongest (entry_addr - section->buffer),
pulongest (debug_info_offset));
- return;
+ return false;
}
dwarf2_per_cu_data *const per_cu = per_cu_it->second;
@@ -2685,7 +2416,7 @@ create_addrmap_from_aranges (dwarf2_per_objfile *per_objfile,
"address_size %u is invalid, ignoring .debug_aranges."),
objfile_name (objfile),
plongest (entry_addr - section->buffer), address_size);
- return;
+ return false;
}
const uint8_t segment_selector_size = *addr++;
@@ -2697,7 +2428,7 @@ create_addrmap_from_aranges (dwarf2_per_objfile *per_objfile,
objfile_name (objfile),
plongest (entry_addr - section->buffer),
segment_selector_size);
- return;
+ return false;
}
/* Must pad to an alignment boundary that is twice the address
@@ -2709,7 +2440,7 @@ create_addrmap_from_aranges (dwarf2_per_objfile *per_objfile,
bytes. */
addr += (entry_end - addr) % (2 * address_size);
- for (;;)
+ while (addr < entry_end)
{
if (addr + 2 * address_size > entry_end)
{
@@ -2718,7 +2449,7 @@ create_addrmap_from_aranges (dwarf2_per_objfile *per_objfile,
"ignoring .debug_aranges."),
objfile_name (objfile),
plongest (entry_addr - section->buffer));
- return;
+ return false;
}
ULONGEST start = extract_unsigned_integer (addr, address_size,
dwarf5_byte_order);
@@ -2727,7 +2458,14 @@ create_addrmap_from_aranges (dwarf2_per_objfile *per_objfile,
dwarf5_byte_order);
addr += address_size;
if (start == 0 && length == 0)
- break;
+ {
+ /* This can happen on some targets with --gc-sections.
+ This pair of values is also used to mark the end of
+ the entries for a given CU, but we ignore it and
+ instead handle termination using the check at the top
+ of the loop. */
+ continue;
+ }
if (start == 0 && !per_bfd->has_section_at_zero)
{
/* Symbol was eliminated due to a COMDAT group. */
@@ -2740,10 +2478,28 @@ create_addrmap_from_aranges (dwarf2_per_objfile *per_objfile,
- baseaddr);
addrmap_set_empty (mutable_map, start, end - 1, per_cu);
}
+
+ per_cu->addresses_seen = true;
}
- per_bfd->index_addrmap = addrmap_create_fixed (mutable_map,
- &per_bfd->obstack);
+ return true;
+}
+
+/* Read the address map data from DWARF-5 .debug_aranges, and use it to
+ populate the psymtabs_addrmap. */
+
+static void
+create_addrmap_from_aranges (dwarf2_per_objfile *per_objfile,
+ struct dwarf2_section_info *section)
+{
+ dwarf2_per_bfd *per_bfd = per_objfile->per_bfd;
+
+ auto_obstack temp_obstack;
+ addrmap *mutable_map = addrmap_create_mutable (&temp_obstack);
+
+ if (read_addrmap_from_aranges (per_objfile, section, mutable_map))
+ per_bfd->index_addrmap = addrmap_create_fixed (mutable_map,
+ &per_bfd->obstack);
}
/* A helper function that reads the .gdb_index from BUFFER and fills
@@ -2948,7 +2704,6 @@ dwarf2_read_gdb_index
create_addrmap_from_index (per_objfile, map.get ());
per_bfd->index_table = std::move (map);
- per_bfd->using_index = 1;
per_bfd->quick_file_names_table =
create_quick_file_names_table (per_bfd->all_comp_units.size ());
@@ -2971,7 +2726,7 @@ dw2_get_file_names_reader (const struct die_reader_specs *reader,
gdb_assert (! this_cu->is_debug_types);
- this_cu->v.quick->files_read = true;
+ this_cu->files_read = true;
/* Our callers never want to match partial units -- instead they
will match the enclosing full CU. */
if (comp_unit_die->tag == DW_TAG_partial_unit)
@@ -2998,7 +2753,7 @@ dw2_get_file_names_reader (const struct die_reader_specs *reader,
&find_entry, INSERT);
if (*slot != NULL)
{
- lh_cu->v.quick->file_names = (struct quick_file_names *) *slot;
+ lh_cu->file_names = (struct quick_file_names *) *slot;
return;
}
@@ -3025,9 +2780,9 @@ dw2_get_file_names_reader (const struct die_reader_specs *reader,
{
for (const auto &entry : lh->file_names ())
{
- gdb::unique_xmalloc_ptr<char> name_holder;
+ std::string name_holder;
const char *include_name =
- compute_include_file_name (lh.get (), entry, fnd, &name_holder);
+ compute_include_file_name (lh.get (), entry, fnd, name_holder);
if (include_name != nullptr)
{
include_name = per_objfile->objfile->intern (include_name);
@@ -3050,7 +2805,7 @@ dw2_get_file_names_reader (const struct die_reader_specs *reader,
qfn->real_names = NULL;
- lh_cu->v.quick->file_names = qfn;
+ lh_cu->file_names = qfn;
}
/* A helper for the "quick" functions which attempts to read the line
@@ -3062,17 +2817,15 @@ dw2_get_file_names (dwarf2_per_cu_data *this_cu,
{
/* This should never be called for TUs. */
gdb_assert (! this_cu->is_debug_types);
- /* Nor type unit groups. */
- gdb_assert (! this_cu->type_unit_group_p ());
- if (this_cu->v.quick->files_read)
- return this_cu->v.quick->file_names;
+ if (this_cu->files_read)
+ return this_cu->file_names;
cutu_reader reader (this_cu, per_objfile);
if (!reader.dummy_p)
dw2_get_file_names_reader (&reader, reader.comp_unit_die);
- return this_cu->v.quick->file_names;
+ return this_cu->file_names;
}
/* A helper for the "quick" functions which computes and caches the
@@ -3113,7 +2866,7 @@ dwarf2_base_index_functions::find_last_source_symtab (struct objfile *objfile)
if (cust == NULL)
return NULL;
- return compunit_primary_filetab (cust);
+ return cust->primary_filetab ();
}
/* See read.h. */
@@ -3121,10 +2874,13 @@ dwarf2_base_index_functions::find_last_source_symtab (struct objfile *objfile)
void
dwarf2_per_cu_data::free_cached_file_names ()
{
- if (per_bfd == nullptr || !per_bfd->using_index || v.quick == nullptr)
+ if (fnd != nullptr)
+ fnd->forget_fullname ();
+
+ if (per_bfd == nullptr)
return;
- struct quick_file_names *file_data = v.quick->file_names;
+ struct quick_file_names *file_data = file_names;
if (file_data != nullptr && file_data->real_names != nullptr)
{
for (int i = 0; i < file_data->num_file_names; ++i)
@@ -3176,7 +2932,8 @@ static void
dw2_symtab_iter_init (struct dw2_symtab_iterator *iter,
dwarf2_per_objfile *per_objfile,
gdb::optional<block_enum> block_index,
- domain_enum domain, offset_type namei)
+ domain_enum domain, offset_type namei,
+ mapped_index &index)
{
iter->per_objfile = per_objfile;
iter->block_index = block_index;
@@ -3186,22 +2943,18 @@ dw2_symtab_iter_init (struct dw2_symtab_iterator *iter,
iter->vec = {};
iter->length = 0;
- mapped_index *index = per_objfile->per_bfd->index_table.get ();
- /* index is NULL if OBJF_READNOW. */
- if (index == NULL)
- return;
-
- gdb_assert (!index->symbol_name_slot_invalid (namei));
- offset_type vec_idx = index->symbol_vec_index (namei);
+ gdb_assert (!index.symbol_name_slot_invalid (namei));
+ offset_type vec_idx = index.symbol_vec_index (namei);
- iter->vec = offset_view (index->constant_pool.slice (vec_idx));
+ iter->vec = offset_view (index.constant_pool.slice (vec_idx));
iter->length = iter->vec[0];
}
/* Return the next matching CU or NULL if there are no more. */
static struct dwarf2_per_cu_data *
-dw2_symtab_iter_next (struct dw2_symtab_iterator *iter)
+dw2_symtab_iter_next (struct dw2_symtab_iterator *iter,
+ mapped_index &index)
{
dwarf2_per_objfile *per_objfile = iter->per_objfile;
@@ -3215,9 +2968,8 @@ dw2_symtab_iter_next (struct dw2_symtab_iterator *iter)
Indices prior to version 7 don't record them,
and indices >= 7 may elide them for certain symbols
(gold does this). */
- int attrs_valid =
- (per_objfile->per_bfd->index_table->version >= 7
- && symbol_kind != GDB_INDEX_SYMBOL_KIND_NONE);
+ int attrs_valid = (index.version >= 7
+ && symbol_kind != GDB_INDEX_SYMBOL_KIND_NONE);
/* Don't crash on bad data. */
if (cu_index >= per_objfile->per_bfd->all_comp_units.size ())
@@ -3311,8 +3063,8 @@ dwarf2_base_index_functions::print_stats (struct objfile *objfile,
if (!per_objfile->symtab_set_p (per_cu))
++count;
}
- printf_filtered (_(" Number of read CUs: %d\n"), total - count);
- printf_filtered (_(" Number of unread CUs: %d\n"), count);
+ gdb_printf (_(" Number of read CUs: %d\n"), total - count);
+ gdb_printf (_(" Number of unread CUs: %d\n"), count);
}
/* This dumps minimal information about the index.
@@ -3325,16 +3077,10 @@ dwarf2_gdb_index::dump (struct objfile *objfile)
{
dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile);
- gdb_assert (per_objfile->per_bfd->using_index);
- printf_filtered (".gdb_index:");
- if (per_objfile->per_bfd->index_table != NULL)
- {
- printf_filtered (" version %d\n",
- per_objfile->per_bfd->index_table->version);
- }
- else
- printf_filtered (" faked for \"readnow\"\n");
- printf_filtered ("\n");
+ mapped_index *index = (static_cast<mapped_index *>
+ (per_objfile->per_bfd->index_table.get ()));
+ gdb_printf (".gdb_index: version %d\n", index->version);
+ gdb_printf ("\n");
}
void
@@ -3383,37 +3129,31 @@ dwarf2_gdb_index::expand_matching_symbols
const block_enum block_kind = global ? GLOBAL_BLOCK : STATIC_BLOCK;
- if (per_objfile->per_bfd->index_table != nullptr)
- {
- mapped_index &index = *per_objfile->per_bfd->index_table;
+ mapped_index &index
+ = (static_cast<mapped_index &>
+ (*per_objfile->per_bfd->index_table.get ()));
- const char *match_name = name.ada ().lookup_name ().c_str ();
- auto matcher = [&] (const char *symname)
- {
- if (ordered_compare == nullptr)
- return true;
- return ordered_compare (symname, match_name) == 0;
- };
+ const char *match_name = name.ada ().lookup_name ().c_str ();
+ auto matcher = [&] (const char *symname)
+ {
+ if (ordered_compare == nullptr)
+ return true;
+ return ordered_compare (symname, match_name) == 0;
+ };
- dw2_expand_symtabs_matching_symbol (index, name, matcher,
- [&] (offset_type namei)
- {
- struct dw2_symtab_iterator iter;
- struct dwarf2_per_cu_data *per_cu;
-
- dw2_symtab_iter_init (&iter, per_objfile, block_kind, domain,
- namei);
- while ((per_cu = dw2_symtab_iter_next (&iter)) != NULL)
- dw2_expand_symtabs_matching_one (per_cu, per_objfile, nullptr,
- nullptr);
- return true;
- }, per_objfile);
- }
- else
+ dw2_expand_symtabs_matching_symbol (index, name, matcher,
+ [&] (offset_type namei)
{
- /* We have -readnow: no .gdb_index, but no partial symtabs either. So,
- proceed assuming all symtabs have been read in. */
- }
+ struct dw2_symtab_iterator iter;
+ struct dwarf2_per_cu_data *per_cu;
+
+ dw2_symtab_iter_init (&iter, per_objfile, block_kind, domain, namei,
+ index);
+ while ((per_cu = dw2_symtab_iter_next (&iter, index)) != NULL)
+ dw2_expand_symtabs_matching_one (per_cu, per_objfile, nullptr,
+ nullptr);
+ return true;
+ }, per_objfile);
}
/* Starting from a search name, return the string that finds the upper
@@ -3782,6 +3522,11 @@ public:
return m_symbol_table[idx];
}
+ quick_symbol_functions_up make_quick_functions () const override
+ {
+ return nullptr;
+ }
+
private:
gdb::array_view<const char *> m_symbol_table;
};
@@ -4197,7 +3942,7 @@ dw2_expand_symtabs_matching_one
gdb::function_view<expand_symtabs_file_matcher_ftype> file_matcher,
gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify)
{
- if (file_matcher == NULL || per_cu->v.quick->mark)
+ if (file_matcher == NULL || per_cu->mark)
{
bool symtab_was_null = !per_objfile->symtab_set_p (per_cu);
@@ -4225,7 +3970,9 @@ dw2_expand_marked_cus
{
offset_type vec_len, vec_idx;
bool global_seen = false;
- mapped_index &index = *per_objfile->per_bfd->index_table;
+ mapped_index &index
+ = (static_cast<mapped_index &>
+ (*per_objfile->per_bfd->index_table.get ()));
offset_view vec (index.constant_pool.slice (index.symbol_vec_index (idx)));
vec_len = vec[0];
@@ -4338,12 +4085,33 @@ dw_expand_symtabs_matching_file_matcher
if (per_cu->is_debug_types)
continue;
- per_cu->v.quick->mark = 0;
+ per_cu->mark = 0;
/* We only need to look at symtabs not already expanded. */
if (per_objfile->symtab_set_p (per_cu.get ()))
continue;
+ if (per_cu->fnd != nullptr)
+ {
+ file_and_directory *fnd = per_cu->fnd.get ();
+
+ if (file_matcher (fnd->get_name (), false))
+ {
+ per_cu->mark = 1;
+ continue;
+ }
+
+ /* Before we invoke realpath, which can get expensive when many
+ files are involved, do a quick comparison of the basenames. */
+ if ((basenames_may_differ
+ || file_matcher (lbasename (fnd->get_name ()), true))
+ && file_matcher (fnd->get_fullname (), false))
+ {
+ per_cu->mark = 1;
+ continue;
+ }
+ }
+
quick_file_names *file_data = dw2_get_file_names (per_cu.get (),
per_objfile);
if (file_data == NULL)
@@ -4353,7 +4121,7 @@ dw_expand_symtabs_matching_file_matcher
continue;
else if (htab_find (visited_found.get (), file_data) != NULL)
{
- per_cu->v.quick->mark = 1;
+ per_cu->mark = 1;
continue;
}
@@ -4363,7 +4131,7 @@ dw_expand_symtabs_matching_file_matcher
if (file_matcher (file_data->file_names[j], false))
{
- per_cu->v.quick->mark = 1;
+ per_cu->mark = 1;
break;
}
@@ -4377,12 +4145,12 @@ dw_expand_symtabs_matching_file_matcher
this_real_name = dw2_get_real_path (per_objfile, file_data, j);
if (file_matcher (this_real_name, false))
{
- per_cu->v.quick->mark = 1;
+ per_cu->mark = 1;
break;
}
}
- void **slot = htab_find_slot (per_cu->v.quick->mark
+ void **slot = htab_find_slot (per_cu->mark
? visited_found.get ()
: visited_not_found.get (),
file_data, INSERT);
@@ -4403,10 +4171,6 @@ dwarf2_gdb_index::expand_symtabs_matching
{
dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile);
- /* index_table is NULL if OBJF_READNOW. */
- if (!per_objfile->per_bfd->index_table)
- return true;
-
dw_expand_symtabs_matching_file_matcher (per_objfile, file_matcher);
/* This invariant is documented in quick-functions.h. */
@@ -4426,7 +4190,9 @@ dwarf2_gdb_index::expand_symtabs_matching
return true;
}
- mapped_index &index = *per_objfile->per_bfd->index_table;
+ mapped_index &index
+ = (static_cast<mapped_index &>
+ (*per_objfile->per_bfd->index_table.get ()));
bool result
= dw2_expand_symtabs_matching_symbol (index, *lookup_name,
@@ -4451,8 +4217,8 @@ recursively_find_pc_sect_compunit_symtab (struct compunit_symtab *cust,
{
int i;
- if (COMPUNIT_BLOCKVECTOR (cust) != NULL
- && blockvector_contains_pc (COMPUNIT_BLOCKVECTOR (cust), pc))
+ if (cust->blockvector () != nullptr
+ && blockvector_contains_pc (cust->blockvector (), pc))
return cust;
if (cust->includes == NULL)
@@ -4526,8 +4292,8 @@ dwarf2_base_index_functions::map_symbol_filenames
if (!per_cu->is_debug_types
&& per_objfile->symtab_set_p (per_cu.get ()))
{
- if (per_cu->v.quick->file_names != nullptr)
- qfn_cache.insert (per_cu->v.quick->file_names);
+ if (per_cu->file_names != nullptr)
+ qfn_cache.insert (per_cu->file_names);
}
}
@@ -4538,6 +4304,24 @@ dwarf2_base_index_functions::map_symbol_filenames
if (per_cu->is_debug_types || per_objfile->symtab_set_p (per_cu))
continue;
+ if (per_cu->fnd != nullptr)
+ {
+ file_and_directory *fnd = per_cu->fnd.get ();
+
+ const char *filename = fnd->get_name ();
+ const char *key = filename;
+ const char *fullname = nullptr;
+
+ if (need_fullname)
+ {
+ fullname = fnd->get_fullname ();
+ key = fullname;
+ }
+
+ if (!filenames_cache.seen (key))
+ fun (filename, fullname);
+ }
+
quick_file_names *file_data = dw2_get_file_names (per_cu, per_objfile);
if (file_data == nullptr
|| qfn_cache.find (file_data) != qfn_cache.end ())
@@ -4906,8 +4690,7 @@ dwarf2_read_debug_names (dwarf2_per_objfile *per_objfile)
create_addrmap_from_aranges (per_objfile, &per_bfd->debug_aranges);
- per_bfd->debug_names_table = std::move (map);
- per_bfd->using_index = 1;
+ per_bfd->index_table = std::move (map);
per_bfd->quick_file_names_table =
create_quick_file_names_table (per_bfd->all_comp_units.size ());
@@ -5331,15 +5114,7 @@ dw2_debug_names_iterator::next ()
void
dwarf2_debug_names_index::dump (struct objfile *objfile)
{
- dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile);
-
- gdb_assert (per_objfile->per_bfd->using_index);
- printf_filtered (".debug_names:");
- if (per_objfile->per_bfd->debug_names_table)
- printf_filtered (" exists\n");
- else
- printf_filtered (" faked for \"readnow\"\n");
- printf_filtered ("\n");
+ gdb_printf (".debug_names: exists\n");
}
void
@@ -5351,11 +5126,9 @@ dwarf2_debug_names_index::expand_matching_symbols
{
dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile);
- /* debug_names_table is NULL if OBJF_READNOW. */
- if (!per_objfile->per_bfd->debug_names_table)
- return;
-
- mapped_debug_names &map = *per_objfile->per_bfd->debug_names_table;
+ mapped_debug_names &map
+ = (static_cast<mapped_debug_names &>
+ (*per_objfile->per_bfd->index_table.get ()));
const block_search_flags block_flags
= global ? SEARCH_GLOBAL_BLOCK : SEARCH_STATIC_BLOCK;
@@ -5396,10 +5169,6 @@ dwarf2_debug_names_index::expand_symtabs_matching
{
dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile);
- /* debug_names_table is NULL if OBJF_READNOW. */
- if (!per_objfile->per_bfd->debug_names_table)
- return true;
-
dw_expand_symtabs_matching_file_matcher (per_objfile, file_matcher);
/* This invariant is documented in quick-functions.h. */
@@ -5419,7 +5188,9 @@ dwarf2_debug_names_index::expand_symtabs_matching
return true;
}
- mapped_debug_names &map = *per_objfile->per_bfd->debug_names_table;
+ mapped_debug_names &map
+ = (static_cast<mapped_debug_names &>
+ (*per_objfile->per_bfd->index_table.get ()));
bool result
= dw2_expand_symtabs_matching_symbol (map, *lookup_name,
@@ -5496,6 +5267,8 @@ get_gdb_index_contents_from_cache_dwz (objfile *obj, dwz_file *dwz)
return global_index_cache.lookup_gdb_index (build_id, &dwz->index_cache_res);
}
+static quick_symbol_functions_up make_cooked_index_funcs ();
+
/* See dwarf2/public.h. */
void
@@ -5514,41 +5287,11 @@ dwarf2_initialize_objfile (struct objfile *objfile)
{
dwarf_read_debug_printf ("readnow requested");
- /* When using READNOW, the using_index flag (set below) indicates that
- PER_BFD was already initialized, when we loaded some other objfile. */
- if (per_bfd->using_index)
- {
- dwarf_read_debug_printf ("using_index already set");
- objfile->qf.push_front (make_dwarf_gdb_index ());
- return;
- }
-
- per_bfd->using_index = 1;
create_all_comp_units (per_objfile);
per_bfd->quick_file_names_table
= create_quick_file_names_table (per_bfd->all_comp_units.size ());
- for (int i = 0; i < per_bfd->all_comp_units.size (); ++i)
- {
- dwarf2_per_cu_data *per_cu = per_bfd->get_cu (i);
-
- per_cu->v.quick = OBSTACK_ZALLOC (&per_bfd->obstack,
- struct dwarf2_per_cu_quick_data);
- }
-
- /* Arrange for gdb to see the "quick" functions. However, these
- functions will be no-ops because we will have expanded all
- symtabs. */
- objfile->qf.push_front (make_dwarf_gdb_index ());
- return;
- }
-
- /* Was a debug names index already read when we processed an objfile sharing
- PER_BFD? */
- if (per_bfd->debug_names_table != nullptr)
- {
- dwarf_read_debug_printf ("re-using shared debug names table");
- objfile->qf.push_front (make_dwarf_debug_names ());
+ objfile->qf.emplace_front (new readnow_functions);
return;
}
@@ -5556,27 +5299,16 @@ dwarf2_initialize_objfile (struct objfile *objfile)
PER_BFD? */
if (per_bfd->index_table != nullptr)
{
- dwarf_read_debug_printf ("re-using shared index table");
- objfile->qf.push_front (make_dwarf_gdb_index ());
- return;
- }
-
- /* There might already be partial symtabs built for this BFD. This happens
- when loading the same binary twice with the index-cache enabled. If so,
- don't try to read an index. The objfile / per_objfile initialization will
- be completed in dwarf2_build_psymtabs, in the standard partial symtabs
- code path. */
- if (per_bfd->partial_symtabs != nullptr)
- {
- dwarf_read_debug_printf ("re-using shared partial symtabs");
- objfile->qf.push_front (make_lazy_dwarf_reader ());
+ dwarf_read_debug_printf ("re-using symbols");
+ objfile->qf.push_front (per_bfd->index_table->make_quick_functions ());
return;
}
if (dwarf2_read_debug_names (per_objfile))
{
dwarf_read_debug_printf ("found debug names");
- objfile->qf.push_front (make_dwarf_debug_names ());
+ objfile->qf.push_front
+ (per_bfd->index_table->make_quick_functions ());
return;
}
@@ -5585,7 +5317,7 @@ dwarf2_initialize_objfile (struct objfile *objfile)
get_gdb_index_contents_from_section<dwz_file>))
{
dwarf_read_debug_printf ("found gdb index from file");
- objfile->qf.push_front (make_dwarf_gdb_index ());
+ objfile->qf.push_front (per_bfd->index_table->make_quick_functions ());
return;
}
@@ -5596,60 +5328,29 @@ dwarf2_initialize_objfile (struct objfile *objfile)
{
dwarf_read_debug_printf ("found gdb index from cache");
global_index_cache.hit ();
- objfile->qf.push_front (make_dwarf_gdb_index ());
+ objfile->qf.push_front (per_bfd->index_table->make_quick_functions ());
return;
}
global_index_cache.miss ();
- objfile->qf.push_front (make_lazy_dwarf_reader ());
+ objfile->qf.push_front (make_cooked_index_funcs ());
}
/* Build a partial symbol table. */
-void
-dwarf2_build_psymtabs (struct objfile *objfile, psymbol_functions *psf)
+static void
+dwarf2_build_psymtabs (struct objfile *objfile)
{
dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile);
- dwarf2_per_bfd *per_bfd = per_objfile->per_bfd;
-
- if (per_bfd->partial_symtabs != nullptr)
- {
- /* Partial symbols were already read, so now we can simply
- attach them. */
- if (psf == nullptr)
- {
- psf = new psymbol_functions (per_bfd->partial_symtabs);
- objfile->qf.emplace_front (psf);
- }
- else
- psf->set_partial_symtabs (per_bfd->partial_symtabs);
- return;
- }
- if (psf == nullptr)
- {
- psf = new psymbol_functions;
- objfile->qf.emplace_front (psf);
- }
- const std::shared_ptr<psymtab_storage> &partial_symtabs
- = psf->get_partial_symtabs ();
-
- /* Set the local reference to partial symtabs, so that we don't try
- to read them again if reading another objfile with the same BFD.
- If we can't in fact share, this won't make a difference anyway as
- the dwarf2_per_bfd object won't be shared. */
- per_bfd->partial_symtabs = partial_symtabs;
+ if (per_objfile->per_bfd->index_table != nullptr)
+ return;
try
{
- /* This isn't really ideal: all the data we allocate on the
- objfile's obstack is still uselessly kept around. However,
- freeing it seems unsafe. */
- psymtab_discarder psymtabs (partial_symtabs.get ());
dwarf2_build_psymtabs_hard (per_objfile);
- psymtabs.keep ();
/* (maybe) store an index in the cache. */
global_index_cache.store (per_objfile);
@@ -5730,111 +5431,6 @@ read_abbrev_offset (dwarf2_per_objfile *per_objfile,
return (sect_offset) read_offset (abfd, info_ptr, offset_size);
}
-/* A partial symtab that is used only for include files. */
-struct dwarf2_include_psymtab : public partial_symtab
-{
- dwarf2_include_psymtab (const char *filename,
- psymtab_storage *partial_symtabs,
- objfile_per_bfd_storage *objfile_per_bfd)
- : partial_symtab (filename, partial_symtabs, objfile_per_bfd)
- {
- }
-
- void read_symtab (struct objfile *objfile) override
- {
- /* It's an include file, no symbols to read for it.
- Everything is in the includer symtab. */
-
- /* The expansion of a dwarf2_include_psymtab is just a trigger for
- expansion of the includer psymtab. We use the dependencies[0] field to
- model the includer. But if we go the regular route of calling
- expand_psymtab here, and having expand_psymtab call expand_dependencies
- to expand the includer, we'll only use expand_psymtab on the includer
- (making it a non-toplevel psymtab), while if we expand the includer via
- another path, we'll use read_symtab (making it a toplevel psymtab).
- So, don't pretend a dwarf2_include_psymtab is an actual toplevel
- psymtab, and trigger read_symtab on the includer here directly. */
- includer ()->read_symtab (objfile);
- }
-
- void expand_psymtab (struct objfile *objfile) override
- {
- /* This is not called by read_symtab, and should not be called by any
- expand_dependencies. */
- gdb_assert (false);
- }
-
- bool readin_p (struct objfile *objfile) const override
- {
- return includer ()->readin_p (objfile);
- }
-
- compunit_symtab *get_compunit_symtab (struct objfile *objfile) const override
- {
- compunit_symtab *cust = includer ()->get_compunit_symtab (objfile);
- while (cust != nullptr && cust->user != nullptr)
- cust = cust->user;
- return cust;
- }
-
-private:
- partial_symtab *includer () const
- {
- /* An include psymtab has exactly one dependency: the psymtab that
- includes it. */
- gdb_assert (this->number_of_dependencies == 1);
- return this->dependencies[0];
- }
-};
-
-/* Allocate a new partial symtab for file named NAME and mark this new
- partial symtab as being an include of PST. */
-
-static void
-dwarf2_create_include_psymtab (dwarf2_per_bfd *per_bfd,
- const char *name,
- dwarf2_psymtab *pst,
- psymtab_storage *partial_symtabs,
- objfile_per_bfd_storage *objfile_per_bfd)
-{
- dwarf2_include_psymtab *subpst
- = new dwarf2_include_psymtab (name, partial_symtabs, objfile_per_bfd);
-
- if (!IS_ABSOLUTE_PATH (subpst->filename))
- subpst->dirname = pst->dirname;
-
- subpst->dependencies = per_bfd->partial_symtabs->allocate_dependencies (1);
- subpst->dependencies[0] = pst;
- subpst->number_of_dependencies = 1;
-}
-
-/* Read the Line Number Program data and extract the list of files
- included by the source file represented by PST. Build an include
- partial symtab for each of these included files. */
-
-static void
-dwarf2_build_include_psymtabs (struct dwarf2_cu *cu,
- struct die_info *die,
- const file_and_directory &fnd,
- dwarf2_psymtab *pst)
-{
- line_header_up lh;
- struct attribute *attr;
-
- attr = dwarf2_attr (die, DW_AT_stmt_list, cu);
- if (attr != nullptr && attr->form_is_unsigned ())
- lh = dwarf_decode_line_header ((sect_offset) attr->as_unsigned (), cu);
- if (lh == NULL)
- return; /* No linetable, so no includes. */
-
- /* NOTE: pst->dirname is DW_AT_comp_dir (if present). Also note
- that we pass in the raw text_low here; that is ok because we're
- only decoding the line table to make include partial symtabs, and
- so the addresses aren't really used. */
- dwarf_decode_lines (lh.get (), fnd, cu, pst,
- pst->raw_text_low (), 1);
-}
-
static hashval_t
hash_signatured_type (const void *item)
{
@@ -5998,12 +5594,6 @@ add_type_unit (dwarf2_per_objfile *per_objfile, ULONGEST sig, void **slot)
per_objfile->per_bfd->all_comp_units.emplace_back
(sig_type_holder.release ());
- if (per_objfile->per_bfd->using_index)
- {
- sig_type->v.quick =
- OBSTACK_ZALLOC (&per_objfile->per_bfd->obstack,
- struct dwarf2_per_cu_quick_data);
- }
if (slot == NULL)
{
@@ -6029,17 +5619,14 @@ fill_in_sig_entry_from_dwo_entry (dwarf2_per_objfile *per_objfile,
/* Make sure we're not clobbering something we don't expect to. */
gdb_assert (! sig_entry->queued);
gdb_assert (per_objfile->get_cu (sig_entry) == NULL);
- if (per_bfd->using_index)
- {
- gdb_assert (sig_entry->v.quick != NULL);
- gdb_assert (!per_objfile->symtab_set_p (sig_entry));
- }
- else
- gdb_assert (sig_entry->v.psymtab == NULL);
+ gdb_assert (!per_objfile->symtab_set_p (sig_entry));
gdb_assert (sig_entry->signature == dwo_entry->signature);
- gdb_assert (to_underlying (sig_entry->type_offset_in_section) == 0);
+ gdb_assert (to_underlying (sig_entry->type_offset_in_section) == 0
+ || (to_underlying (sig_entry->type_offset_in_section)
+ == to_underlying (dwo_entry->type_offset_in_tu)));
gdb_assert (sig_entry->type_unit_group == NULL);
- gdb_assert (sig_entry->dwo_unit == NULL);
+ gdb_assert (sig_entry->dwo_unit == NULL
+ || sig_entry->dwo_unit == dwo_entry);
sig_entry->section = dwo_entry->section;
sig_entry->sect_off = dwo_entry->sect_off;
@@ -6070,7 +5657,7 @@ lookup_dwo_signatured_type (struct dwarf2_cu *cu, ULONGEST sig)
struct dwo_unit find_dwo_entry, *dwo_entry;
void **slot;
- gdb_assert (cu->dwo_unit && per_objfile->per_bfd->using_index);
+ gdb_assert (cu->dwo_unit);
/* If TU skeletons have been removed then we may not have read in any
TUs yet. */
@@ -6117,7 +5704,8 @@ lookup_dwo_signatured_type (struct dwarf2_cu *cu, ULONGEST sig)
if (sig_entry == NULL)
sig_entry = add_type_unit (per_objfile, sig, slot);
- fill_in_sig_entry_from_dwo_entry (per_objfile, sig_entry, dwo_entry);
+ if (sig_entry->dwo_unit == nullptr)
+ fill_in_sig_entry_from_dwo_entry (per_objfile, sig_entry, dwo_entry);
sig_entry->tu_read = 1;
return sig_entry;
}
@@ -6135,7 +5723,7 @@ lookup_dwp_signatured_type (struct dwarf2_cu *cu, ULONGEST sig)
struct dwo_unit *dwo_entry;
void **slot;
- gdb_assert (cu->dwo_unit && per_objfile->per_bfd->using_index);
+ gdb_assert (cu->dwo_unit);
gdb_assert (dwp_file != NULL);
/* If TU skeletons have been removed then we may not have read in any
@@ -6176,7 +5764,7 @@ lookup_signatured_type (struct dwarf2_cu *cu, ULONGEST sig)
{
dwarf2_per_objfile *per_objfile = cu->per_objfile;
- if (cu->dwo_unit && per_objfile->per_bfd->using_index)
+ if (cu->dwo_unit)
{
/* We're in a DWO/DWP file, and we're using .gdb_index.
These cases require special processing. */
@@ -6390,11 +5978,11 @@ read_cutu_die_from_dwo (dwarf2_cu *cu,
if (dwarf_die_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "Read die from %s@0x%x of %s:\n",
- section->get_name (),
- (unsigned) (begin_info_ptr - section->buffer),
- bfd_get_filename (abfd));
+ gdb_printf (gdb_stdlog,
+ "Read die from %s@0x%x of %s:\n",
+ section->get_name (),
+ (unsigned) (begin_info_ptr - section->buffer),
+ bfd_get_filename (abfd));
dump_die (comp_unit_die, dwarf_die_debug);
}
@@ -6429,6 +6017,14 @@ lookup_dwo_id (struct dwarf2_cu *cu, struct die_info* comp_unit_die)
static struct dwo_unit *
lookup_dwo_unit (dwarf2_cu *cu, die_info *comp_unit_die, const char *dwo_name)
{
+#if CXX_STD_THREAD
+ /* We need a lock here both to handle the DWO hash table, and BFD,
+ which is not thread-safe. */
+ static std::mutex dwo_lock;
+
+ std::lock_guard<std::mutex> guard (dwo_lock);
+#endif
+
dwarf2_per_cu_data *per_cu = cu->per_cu;
struct dwo_unit *dwo_unit;
const char *comp_dir;
@@ -6521,7 +6117,8 @@ cutu_reader::cutu_reader (dwarf2_per_cu_data *this_cu,
dwarf2_per_objfile *per_objfile,
struct abbrev_table *abbrev_table,
dwarf2_cu *existing_cu,
- bool skip_partial)
+ bool skip_partial,
+ abbrev_cache *cache)
: die_reader_specs {},
m_this_cu (this_cu)
{
@@ -6537,9 +6134,9 @@ cutu_reader::cutu_reader (dwarf2_per_cu_data *this_cu,
int rereading_dwo_cu = 0;
if (dwarf_die_debug)
- fprintf_unfiltered (gdb_stdlog, "Reading %s unit at offset %s\n",
- this_cu->is_debug_types ? "type" : "comp",
- sect_offset_str (this_cu->sect_off));
+ gdb_printf (gdb_stdlog, "Reading %s unit at offset %s\n",
+ this_cu->is_debug_types ? "type" : "comp",
+ sect_offset_str (this_cu->sect_off));
/* If we're reading a TU directly from a DWO file, including a virtual DWO
file (instead of going through the stub), short-circuit all of this. */
@@ -6575,9 +6172,14 @@ cutu_reader::cutu_reader (dwarf2_per_cu_data *this_cu,
}
else
{
- /* If an existing_cu is provided, a dwarf2_cu must not exist for this_cu
- in per_objfile yet. */
- gdb_assert (per_objfile->get_cu (this_cu) == nullptr);
+ /* If an existing_cu is provided, a dwarf2_cu must not exist for
+ this_cu in per_objfile yet. Here, CACHE doubles as a flag to
+ let us know that the CU is being scanned using the parallel
+ indexer. This assert is avoided in this case because (1) it
+ is irrelevant, and (2) the get_cu method is not
+ thread-safe. */
+ gdb_assert (cache != nullptr
+ || per_objfile->get_cu (this_cu) == nullptr);
m_new_cu.reset (new dwarf2_cu (this_cu, per_objfile));
cu = m_new_cu.get ();
}
@@ -6645,10 +6247,16 @@ cutu_reader::cutu_reader (dwarf2_per_cu_data *this_cu,
gdb_assert (cu->header.abbrev_sect_off == abbrev_table->sect_off);
else
{
- abbrev_section->read (objfile);
- m_abbrev_table_holder
- = abbrev_table::read (abbrev_section, cu->header.abbrev_sect_off);
- abbrev_table = m_abbrev_table_holder.get ();
+ if (cache != nullptr)
+ abbrev_table = cache->find (abbrev_section,
+ cu->header.abbrev_sect_off);
+ if (abbrev_table == nullptr)
+ {
+ abbrev_section->read (objfile);
+ m_abbrev_table_holder
+ = abbrev_table::read (abbrev_section, cu->header.abbrev_sect_off);
+ abbrev_table = m_abbrev_table_holder.get ();
+ }
}
/* Read the top level CU/TU die. */
@@ -6752,9 +6360,9 @@ cutu_reader::cutu_reader (dwarf2_per_cu_data *this_cu,
const gdb_byte *begin_info_ptr, *info_ptr;
if (dwarf_die_debug)
- fprintf_unfiltered (gdb_stdlog, "Reading %s unit at offset %s\n",
- this_cu->is_debug_types ? "type" : "comp",
- sect_offset_str (this_cu->sect_off));
+ gdb_printf (gdb_stdlog, "Reading %s unit at offset %s\n",
+ this_cu->is_debug_types ? "type" : "comp",
+ sect_offset_str (this_cu->sect_off));
gdb_assert (per_objfile->get_cu (this_cu) == nullptr);
@@ -6849,34 +6457,7 @@ allocate_type_unit_groups_table ()
static std::unique_ptr<type_unit_group>
create_type_unit_group (struct dwarf2_cu *cu, sect_offset line_offset_struct)
{
- dwarf2_per_objfile *per_objfile = cu->per_objfile;
- dwarf2_per_bfd *per_bfd = per_objfile->per_bfd;
-
std::unique_ptr<type_unit_group> tu_group (new type_unit_group);
- tu_group->per_bfd = per_bfd;
-
- if (per_bfd->using_index)
- {
- tu_group->v.quick = OBSTACK_ZALLOC (&per_bfd->obstack,
- struct dwarf2_per_cu_quick_data);
- }
- else
- {
- unsigned int line_offset = to_underlying (line_offset_struct);
- dwarf2_psymtab *pst;
- std::string name;
-
- /* Give the symtab a useful name for debug purposes. */
- if ((line_offset & NO_STMT_LIST_TYPE_UNIT_PSYMTAB) != 0)
- name = string_printf ("<type_units_%d>",
- (line_offset & ~NO_STMT_LIST_TYPE_UNIT_PSYMTAB));
- else
- name = string_printf ("<type_units_at_0x%x>", line_offset);
-
- pst = create_partial_symtab (tu_group.get (), per_objfile,
- name.c_str ());
- pst->anonymous = true;
- }
tu_group->hash.dwo_unit = cu->dwo_unit;
tu_group->hash.line_sect_off = line_offset_struct;
@@ -6938,162 +6519,235 @@ get_type_unit_group (struct dwarf2_cu *cu, const struct attribute *stmt_list)
return tu_group;
}
-/* Partial symbol tables. */
-/* Create a psymtab named NAME and assign it to PER_CU.
+/* An instance of this is created when scanning DWARF to create a
+ cooked index. */
- The caller must fill in the following details:
- dirname, textlow, texthigh. */
-
-static dwarf2_psymtab *
-create_partial_symtab (dwarf2_per_cu_data *per_cu,
- dwarf2_per_objfile *per_objfile,
- const char *name)
+class cooked_index_storage
{
- dwarf2_psymtab *pst
- = new dwarf2_psymtab (name, per_objfile->per_bfd->partial_symtabs.get (),
- per_objfile->objfile->per_bfd, per_cu);
-
- pst->psymtabs_addrmap_supported = true;
-
- /* This is the glue that links PST into GDB's symbol API. */
- per_cu->v.psymtab = pst;
-
- return pst;
-}
+public:
-/* DIE reader function for process_psymtab_comp_unit. */
+ cooked_index_storage ()
+ : m_reader_hash (htab_create_alloc (10, hash_cutu_reader,
+ eq_cutu_reader,
+ htab_delete_entry<cutu_reader>,
+ xcalloc, xfree)),
+ m_index (new cooked_index),
+ m_addrmap_storage (),
+ m_addrmap (addrmap_create_mutable (&m_addrmap_storage))
+ {
+ }
-static void
-process_psymtab_comp_unit_reader (const struct die_reader_specs *reader,
- const gdb_byte *info_ptr,
- struct die_info *comp_unit_die,
- enum language pretend_language)
-{
- struct dwarf2_cu *cu = reader->cu;
- dwarf2_per_objfile *per_objfile = cu->per_objfile;
- dwarf2_per_bfd *per_bfd = per_objfile->per_bfd;
- struct objfile *objfile = per_objfile->objfile;
- struct gdbarch *gdbarch = objfile->arch ();
- struct dwarf2_per_cu_data *per_cu = cu->per_cu;
- CORE_ADDR baseaddr;
- CORE_ADDR best_lowpc = 0, best_highpc = 0;
- dwarf2_psymtab *pst;
- enum pc_bounds_kind cu_bounds_kind;
+ DISABLE_COPY_AND_ASSIGN (cooked_index_storage);
- gdb_assert (! per_cu->is_debug_types);
+ /* Return the current abbrev cache. */
+ abbrev_cache *get_abbrev_cache ()
+ {
+ return &m_abbrev_cache;
+ }
- prepare_one_comp_unit (cu, comp_unit_die, pretend_language);
+ /* Return the DIE reader corresponding to PER_CU. If no such reader
+ has been registered, return NULL. */
+ cutu_reader *get_reader (dwarf2_per_cu_data *per_cu)
+ {
+ int index = per_cu->index;
+ return (cutu_reader *) htab_find_with_hash (m_reader_hash.get (),
+ &index, index);
+ }
- /* Allocate a new partial symbol table structure. */
- static const char artificial[] = "<artificial>";
- file_and_directory &fnd = find_file_and_directory (comp_unit_die, cu);
- if (strcmp (fnd.get_name (), artificial) == 0)
- {
- gdb::unique_xmalloc_ptr<char> debug_filename
- (concat (artificial, "@",
- sect_offset_str (per_cu->sect_off),
- (char *) NULL));
- fnd.set_name (std::move (debug_filename));
- }
+ /* Preserve READER by storing it in the local hash table. */
+ cutu_reader *preserve (std::unique_ptr<cutu_reader> reader)
+ {
+ m_abbrev_cache.add (reader->release_abbrev_table ());
+
+ int index = reader->cu->per_cu->index;
+ void **slot = htab_find_slot_with_hash (m_reader_hash.get (), &index,
+ index, INSERT);
+ gdb_assert (*slot == nullptr);
+ cutu_reader *result = reader.get ();
+ *slot = reader.release ();
+ return result;
+ }
- pst = create_partial_symtab (per_cu, per_objfile, fnd.get_name ());
+ /* Add an entry to the index. The arguments describe the entry; see
+ cooked-index.h. The new entry is returned. */
+ const cooked_index_entry *add (sect_offset die_offset, enum dwarf_tag tag,
+ cooked_index_flag flags,
+ const char *name,
+ const cooked_index_entry *parent_entry,
+ dwarf2_per_cu_data *per_cu)
+ {
+ return m_index->add (die_offset, tag, flags, name, parent_entry, per_cu);
+ }
- /* This must be done before calling dwarf2_build_include_psymtabs. */
- pst->dirname = dwarf2_string_attr (comp_unit_die, DW_AT_comp_dir, cu);
+ /* Install the current addrmap into the index being constructed,
+ then transfer ownership of the index to the caller. */
+ std::unique_ptr<cooked_index> release ()
+ {
+ m_index->install_addrmap (m_addrmap);
+ return std::move (m_index);
+ }
- baseaddr = objfile->text_section_offset ();
+ /* Return the mutable addrmap that is currently being created. */
+ addrmap *get_addrmap ()
+ {
+ return m_addrmap;
+ }
- dwarf2_find_base_address (comp_unit_die, cu);
+private:
- /* Possibly set the default values of LOWPC and HIGHPC from
- `DW_AT_ranges'. */
- cu_bounds_kind = dwarf2_get_pc_bounds (comp_unit_die, &best_lowpc,
- &best_highpc, cu, pst);
- if (cu_bounds_kind == PC_BOUNDS_HIGH_LOW && best_lowpc < best_highpc)
- {
- CORE_ADDR low
- = (gdbarch_adjust_dwarf2_addr (gdbarch, best_lowpc + baseaddr)
- - baseaddr);
- CORE_ADDR high
- = (gdbarch_adjust_dwarf2_addr (gdbarch, best_highpc + baseaddr)
- - baseaddr - 1);
- /* Store the contiguous range if it is not empty; it can be
- empty for CUs with no code. */
- addrmap_set_empty (per_bfd->partial_symtabs->psymtabs_addrmap,
- low, high, pst);
- }
+ /* Hash function for a cutu_reader. */
+ static hashval_t hash_cutu_reader (const void *a)
+ {
+ const cutu_reader *reader = (const cutu_reader *) a;
+ return reader->cu->per_cu->index;
+ }
- /* Check if comp unit has_children.
- If so, read the rest of the partial symbols from this comp unit.
- If not, there's no more debug_info for this comp unit. */
- if (comp_unit_die->has_children)
- {
- struct partial_die_info *first_die;
- CORE_ADDR lowpc, highpc;
+ /* Equality function for cutu_reader. */
+ static int eq_cutu_reader (const void *a, const void *b)
+ {
+ const cutu_reader *ra = (const cutu_reader *) a;
+ const int *rb = (const int *) b;
+ return ra->cu->per_cu->index == *rb;
+ }
- lowpc = ((CORE_ADDR) -1);
- highpc = ((CORE_ADDR) 0);
+ /* The abbrev cache used by this indexer. */
+ abbrev_cache m_abbrev_cache;
+ /* A hash table of cutu_reader objects. */
+ htab_up m_reader_hash;
+ /* The index that is being constructed. */
+ std::unique_ptr<cooked_index> m_index;
+
+ /* Storage for the writeable addrmap. */
+ auto_obstack m_addrmap_storage;
+ /* A writeable addrmap being constructed by this scanner. */
+ addrmap *m_addrmap;
+};
- first_die = load_partial_dies (reader, info_ptr, 1);
+/* An instance of this is created to index a CU. */
- scan_partial_symbols (first_die, &lowpc, &highpc,
- cu_bounds_kind <= PC_BOUNDS_INVALID, cu);
+class cooked_indexer
+{
+public:
- /* If we didn't find a lowpc, set it to highpc to avoid
- complaints from `maint check'. */
- if (lowpc == ((CORE_ADDR) -1))
- lowpc = highpc;
+ cooked_indexer (cooked_index_storage *storage,
+ dwarf2_per_cu_data *per_cu,
+ enum language language)
+ : m_index_storage (storage),
+ m_per_cu (per_cu),
+ m_language (language),
+ m_obstack (),
+ m_die_range_map (addrmap_create_mutable (&m_obstack))
+ {
+ }
- /* If the compilation unit didn't have an explicit address range,
- then use the information extracted from its child dies. */
- if (cu_bounds_kind <= PC_BOUNDS_INVALID)
- {
- best_lowpc = lowpc;
- best_highpc = highpc;
- }
- }
- pst->set_text_low (gdbarch_adjust_dwarf2_addr (gdbarch,
- best_lowpc + baseaddr)
- - baseaddr);
- pst->set_text_high (gdbarch_adjust_dwarf2_addr (gdbarch,
- best_highpc + baseaddr)
- - baseaddr);
+ DISABLE_COPY_AND_ASSIGN (cooked_indexer);
- pst->end ();
+ /* Index the given CU. */
+ void make_index (cutu_reader *reader);
- if (!cu->per_cu->imported_symtabs_empty ())
- {
- int i;
- int len = cu->per_cu->imported_symtabs_size ();
+private:
- /* Fill in 'dependencies' here; we fill in 'users' in a
- post-pass. */
- pst->number_of_dependencies = len;
- pst->dependencies
- = per_bfd->partial_symtabs->allocate_dependencies (len);
- for (i = 0; i < len; ++i)
- {
- pst->dependencies[i]
- = cu->per_cu->imported_symtabs->at (i)->v.psymtab;
- }
+ /* A helper function to turn a section offset into an address that
+ can be used in an addrmap. */
+ CORE_ADDR form_addr (sect_offset offset, bool is_dwz)
+ {
+ CORE_ADDR value = to_underlying (offset);
+ if (is_dwz)
+ value |= ((CORE_ADDR) 1) << (8 * sizeof (CORE_ADDR) - 1);
+ return value;
+ }
- cu->per_cu->imported_symtabs_free ();
- }
+ /* A helper function to scan the PC bounds of READER and record them
+ in the storage's addrmap. */
+ void check_bounds (cutu_reader *reader);
- /* Get the list of files included in the current compilation unit,
- and build a psymtab for each of them. */
- dwarf2_build_include_psymtabs (cu, comp_unit_die, fnd, pst);
+ /* Ensure that the indicated CU exists. The cutu_reader for it is
+ returned. FOR_SCANNING is true if the caller intends to scan all
+ the DIEs in the CU; when false, this use is assumed to be to look
+ up just a single DIE. */
+ cutu_reader *ensure_cu_exists (cutu_reader *reader,
+ dwarf2_per_objfile *per_objfile,
+ sect_offset sect_off,
+ bool is_dwz,
+ bool for_scanning);
+
+ /* Index DIEs in the READER starting at INFO_PTR. PARENT_ENTRY is
+ the entry for the enclosing scope (nullptr at top level). FULLY
+ is true when a full scan must be done -- in some languages,
+ function scopes must be fully explored in order to find nested
+ functions. This returns a pointer to just after the spot where
+ reading stopped. */
+ const gdb_byte *index_dies (cutu_reader *reader,
+ const gdb_byte *info_ptr,
+ const cooked_index_entry *parent_entry,
+ bool fully);
+
+ /* Scan the attributes for a given DIE and update the out
+ parameters. Returns a pointer to the byte after the DIE. */
+ const gdb_byte *scan_attributes (dwarf2_per_cu_data *scanning_per_cu,
+ cutu_reader *reader,
+ const gdb_byte *watermark_ptr,
+ const gdb_byte *info_ptr,
+ const abbrev_info *abbrev,
+ const char **name,
+ const char **linkage_name,
+ cooked_index_flag *flags,
+ sect_offset *sibling_offset,
+ const cooked_index_entry **parent_entry,
+ CORE_ADDR *maybe_defer,
+ bool for_specification);
+
+ /* Handle DW_TAG_imported_unit, by scanning the DIE to find
+ DW_AT_import, and then scanning the referenced CU. Returns a
+ pointer to the byte after the DIE. */
+ const gdb_byte *index_imported_unit (cutu_reader *reader,
+ const gdb_byte *info_ptr,
+ const abbrev_info *abbrev);
+
+ /* Recursively read DIEs, recording the section offsets in
+ m_die_range_map and then calling index_dies. */
+ const gdb_byte *recurse (cutu_reader *reader,
+ const gdb_byte *info_ptr,
+ const cooked_index_entry *parent_entry,
+ bool fully);
+
+ /* The storage object, where the results are kept. */
+ cooked_index_storage *m_index_storage;
+ /* The CU that we are reading on behalf of. This object might be
+ asked to index one CU but to treat the results as if they come
+ from some including CU; in this case the including CU would be
+ recorded here. */
+ dwarf2_per_cu_data *m_per_cu;
+ /* The language that we're assuming when reading. */
+ enum language m_language;
+
+ /* Temporary storage. */
+ auto_obstack m_obstack;
+ /* An addrmap that maps from section offsets (see the form_addr
+ method) to newly-created entries. See m_deferred_entries to
+ understand this. */
+ addrmap *m_die_range_map;
+
+ /* A single deferred entry. */
+ struct deferred_entry
+ {
+ sect_offset die_offset;
+ const char *name;
+ CORE_ADDR spec_offset;
+ dwarf_tag tag;
+ cooked_index_flag flags;
+ };
- dwarf_read_debug_printf ("Psymtab for %s unit @%s: %s - %s"
- ", %d global, %d static syms",
- per_cu->is_debug_types ? "type" : "comp",
- sect_offset_str (per_cu->sect_off),
- paddress (gdbarch, pst->text_low (objfile)),
- paddress (gdbarch, pst->text_high (objfile)),
- (int) pst->global_psymbols.size (),
- (int) pst->static_psymbols.size ());
-}
+ /* The generated DWARF can sometimes have the declaration for a
+ method in a class (or perhaps namespace) scope, with the
+ definition appearing outside this scope... just one of the many
+ bad things about DWARF. In order to handle this situation, we
+ defer certain entries until the end of scanning, at which point
+ we'll know the containing context of all the DIEs that we might
+ have scanned. This vector stores these deferred entries. */
+ std::vector<deferred_entry> m_deferred_entries;
+};
/* Subroutine of dwarf2_build_psymtabs_hard to simplify it.
Process compilation unit THIS_CU for a psymtab. */
@@ -7101,17 +6755,10 @@ process_psymtab_comp_unit_reader (const struct die_reader_specs *reader,
static void
process_psymtab_comp_unit (dwarf2_per_cu_data *this_cu,
dwarf2_per_objfile *per_objfile,
- bool want_partial_unit,
- enum language pretend_language)
+ cooked_index_storage *storage)
{
- /* If this compilation unit was already read in, free the
- cached copy in order to read it in again. This is
- necessary because we skipped some symbols when we first
- read in the compilation unit (see load_partial_dies).
- This problem could be avoided, but the benefit is unclear. */
- per_objfile->remove_cu (this_cu);
-
- cutu_reader reader (this_cu, per_objfile, nullptr, nullptr, false);
+ cutu_reader reader (this_cu, per_objfile, nullptr, nullptr, false,
+ storage->get_abbrev_cache ());
if (reader.comp_unit_die == nullptr)
return;
@@ -7139,59 +6786,41 @@ process_psymtab_comp_unit (dwarf2_per_cu_data *this_cu,
/* Nothing. */
}
else if (this_cu->is_debug_types)
- build_type_psymtabs_reader (&reader, reader.info_ptr,
- reader.comp_unit_die);
- else if (want_partial_unit
- || reader.comp_unit_die->tag != DW_TAG_partial_unit)
- process_psymtab_comp_unit_reader (&reader, reader.info_ptr,
- reader.comp_unit_die,
- pretend_language);
-
- /* Age out any secondary CUs. */
- per_objfile->age_comp_units ();
+ build_type_psymtabs_reader (&reader, storage);
+ else if (reader.comp_unit_die->tag != DW_TAG_partial_unit)
+ {
+ bool nope = false;
+ if (this_cu->scanned.compare_exchange_strong (nope, true))
+ {
+ prepare_one_comp_unit (reader.cu, reader.comp_unit_die,
+ language_minimal);
+ gdb_assert (storage != nullptr);
+ cooked_indexer indexer (storage, this_cu, reader.cu->per_cu->lang);
+ indexer.make_index (&reader);
+ }
+ }
}
/* Reader function for build_type_psymtabs. */
static void
-build_type_psymtabs_reader (const struct die_reader_specs *reader,
- const gdb_byte *info_ptr,
- struct die_info *type_unit_die)
+build_type_psymtabs_reader (cutu_reader *reader,
+ cooked_index_storage *storage)
{
- dwarf2_per_objfile *per_objfile = reader->cu->per_objfile;
struct dwarf2_cu *cu = reader->cu;
struct dwarf2_per_cu_data *per_cu = cu->per_cu;
- struct signatured_type *sig_type;
- struct type_unit_group *tu_group;
- struct attribute *attr;
- struct partial_die_info *first_die;
- CORE_ADDR lowpc, highpc;
- dwarf2_psymtab *pst;
+ struct die_info *type_unit_die = reader->comp_unit_die;
gdb_assert (per_cu->is_debug_types);
- sig_type = (struct signatured_type *) per_cu;
if (! type_unit_die->has_children)
return;
- attr = type_unit_die->attr (DW_AT_stmt_list);
- tu_group = get_type_unit_group (cu, attr);
-
- if (tu_group->tus == nullptr)
- tu_group->tus = new std::vector<signatured_type *>;
- tu_group->tus->push_back (sig_type);
-
prepare_one_comp_unit (cu, type_unit_die, language_minimal);
- pst = create_partial_symtab (per_cu, per_objfile, "");
- pst->anonymous = true;
-
- first_die = load_partial_dies (reader, info_ptr, 1);
- lowpc = (CORE_ADDR) -1;
- highpc = (CORE_ADDR) 0;
- scan_partial_symbols (first_die, &lowpc, &highpc, 0, cu);
-
- pst->end ();
+ gdb_assert (storage != nullptr);
+ cooked_indexer indexer (storage, per_cu, cu->per_cu->lang);
+ indexer.make_index (reader);
}
/* Struct used to sort TUs by their abbreviation table offset. */
@@ -7230,7 +6859,8 @@ struct tu_abbrev_offset
dwarf2_per_objfile->per_bfd->type_unit_groups. */
static void
-build_type_psymtabs (dwarf2_per_objfile *per_objfile)
+build_type_psymtabs (dwarf2_per_objfile *per_objfile,
+ cooked_index_storage *storage)
{
struct tu_stats *tu_stats = &per_objfile->per_bfd->tu_stats;
abbrev_table_up abbrev_table;
@@ -7299,8 +6929,7 @@ build_type_psymtabs (dwarf2_per_objfile *per_objfile)
cutu_reader reader (tu.sig_type, per_objfile,
abbrev_table.get (), nullptr, false);
if (!reader.dummy_p)
- build_type_psymtabs_reader (&reader, reader.info_ptr,
- reader.comp_unit_die);
+ build_type_psymtabs_reader (&reader, storage);
}
}
@@ -7325,36 +6954,11 @@ print_tu_stats (dwarf2_per_objfile *per_objfile)
tu_stats->nr_all_type_units_reallocs);
}
-/* Traversal function for build_type_psymtabs. */
-
-static int
-build_type_psymtab_dependencies (void **slot, void *info)
+struct skeleton_data
{
- dwarf2_per_objfile *per_objfile = (dwarf2_per_objfile *) info;
- dwarf2_per_bfd *per_bfd = per_objfile->per_bfd;
- struct type_unit_group *tu_group = (struct type_unit_group *) *slot;
- dwarf2_psymtab *pst = tu_group->v.psymtab;
- int len = (tu_group->tus == nullptr) ? 0 : tu_group->tus->size ();
- int i;
-
- gdb_assert (len > 0);
- gdb_assert (tu_group->type_unit_group_p ());
-
- pst->number_of_dependencies = len;
- pst->dependencies = per_bfd->partial_symtabs->allocate_dependencies (len);
- for (i = 0; i < len; ++i)
- {
- struct signatured_type *iter = tu_group->tus->at (i);
- gdb_assert (iter->is_debug_types);
- pst->dependencies[i] = iter->v.psymtab;
- iter->type_unit_group = tu_group;
- }
-
- delete tu_group->tus;
- tu_group->tus = nullptr;
-
- return 1;
-}
+ dwarf2_per_objfile *per_objfile;
+ cooked_index_storage *storage;
+};
/* Traversal function for process_skeletonless_type_unit.
Read a TU in a DWO file and build partial symbols for it. */
@@ -7363,15 +6967,16 @@ static int
process_skeletonless_type_unit (void **slot, void *info)
{
struct dwo_unit *dwo_unit = (struct dwo_unit *) *slot;
- dwarf2_per_objfile *per_objfile = (dwarf2_per_objfile *) info;
+ skeleton_data *data = (skeleton_data *) info;
/* If this TU doesn't exist in the global table, add it and read it in. */
- if (per_objfile->per_bfd->signatured_types == NULL)
- per_objfile->per_bfd->signatured_types = allocate_signatured_type_table ();
+ if (data->per_objfile->per_bfd->signatured_types == NULL)
+ data->per_objfile->per_bfd->signatured_types
+ = allocate_signatured_type_table ();
signatured_type find_entry (dwo_unit->signature);
- slot = htab_find_slot (per_objfile->per_bfd->signatured_types.get (),
+ slot = htab_find_slot (data->per_objfile->per_bfd->signatured_types.get (),
&find_entry, INSERT);
/* If we've already seen this type there's nothing to do. What's happening
is we're doing our own version of comdat-folding here. */
@@ -7381,15 +6986,14 @@ process_skeletonless_type_unit (void **slot, void *info)
/* This does the job that create_all_comp_units would have done for
this TU. */
signatured_type *entry
- = add_type_unit (per_objfile, dwo_unit->signature, slot);
- fill_in_sig_entry_from_dwo_entry (per_objfile, entry, dwo_unit);
+ = add_type_unit (data->per_objfile, dwo_unit->signature, slot);
+ fill_in_sig_entry_from_dwo_entry (data->per_objfile, entry, dwo_unit);
*slot = entry;
/* This does the job that build_type_psymtabs would have done. */
- cutu_reader reader (entry, per_objfile, nullptr, nullptr, false);
+ cutu_reader reader (entry, data->per_objfile, nullptr, nullptr, false);
if (!reader.dummy_p)
- build_type_psymtabs_reader (&reader, reader.info_ptr,
- reader.comp_unit_die);
+ build_type_psymtabs_reader (&reader, data->storage);
return 1;
}
@@ -7413,36 +7017,18 @@ process_dwo_file_for_skeletonless_type_units (void **slot, void *info)
Note: This can't be done until we know what all the DWO files are. */
static void
-process_skeletonless_type_units (dwarf2_per_objfile *per_objfile)
+process_skeletonless_type_units (dwarf2_per_objfile *per_objfile,
+ cooked_index_storage *storage)
{
+ skeleton_data data { per_objfile, storage };
+
/* Skeletonless TUs in DWP files without .gdb_index is not supported yet. */
if (get_dwp_file (per_objfile) == NULL
&& per_objfile->per_bfd->dwo_files != NULL)
{
htab_traverse_noresize (per_objfile->per_bfd->dwo_files.get (),
process_dwo_file_for_skeletonless_type_units,
- per_objfile);
- }
-}
-
-/* Compute the 'user' field for each psymtab in DWARF2_PER_OBJFILE. */
-
-static void
-set_partial_user (dwarf2_per_objfile *per_objfile)
-{
- for (const auto &per_cu : per_objfile->per_bfd->all_comp_units)
- {
- dwarf2_psymtab *pst = per_cu->v.psymtab;
-
- if (pst == NULL)
- continue;
-
- for (int j = 0; j < pst->number_of_dependencies; ++j)
- {
- /* Set the 'user' field only if it is not already set. */
- if (pst->dependencies[j]->user == NULL)
- pst->dependencies[j]->user = pst;
- }
+ &data);
}
}
@@ -7458,85 +7044,97 @@ dwarf2_build_psymtabs_hard (dwarf2_per_objfile *per_objfile)
dwarf_read_debug_printf ("Building psymtabs of objfile %s ...",
objfile_name (objfile));
- scoped_restore restore_reading_psyms
- = make_scoped_restore (&per_bfd->reading_partial_symbols, true);
-
- per_bfd->info.read (objfile);
-
- /* Any cached compilation units will be linked by the per-objfile
- read_in_chain. Make sure to free them when we're done. */
- free_cached_comp_units freer (per_objfile);
+ per_bfd->map_info_sections (objfile);
+ cooked_index_storage index_storage;
create_all_comp_units (per_objfile);
- build_type_psymtabs (per_objfile);
+ build_type_psymtabs (per_objfile, &index_storage);
+ std::vector<std::unique_ptr<cooked_index>> indexes;
- /* Create a temporary address map on a temporary obstack. We later
- copy this to the final obstack. */
- auto_obstack temp_obstack;
+ per_bfd->quick_file_names_table
+ = create_quick_file_names_table (per_bfd->all_comp_units.size ());
+ if (!per_bfd->debug_aranges.empty ())
+ read_addrmap_from_aranges (per_objfile, &per_bfd->debug_aranges,
+ index_storage.get_addrmap ());
- scoped_restore save_psymtabs_addrmap
- = make_scoped_restore (&per_bfd->partial_symtabs->psymtabs_addrmap,
- addrmap_create_mutable (&temp_obstack));
+ {
+ /* Ensure that complaints are handled correctly. */
+ complaint_interceptor complaint_handler;
+
+ using iter_type = decltype (per_bfd->all_comp_units.begin ());
+
+ /* Each thread returns a pair holding a cooked index, and a vector
+ of errors that should be printed. The latter is done because
+ GDB's I/O system is not thread-safe. run_on_main_thread could be
+ used, but that would mean the messages are printed after the
+ prompt, which looks weird. */
+ using result_type = std::pair<std::unique_ptr<cooked_index>,
+ std::vector<gdb_exception>>;
+ std::vector<result_type> results
+ = gdb::parallel_for_each (1, per_bfd->all_comp_units.begin (),
+ per_bfd->all_comp_units.end (),
+ [=] (iter_type iter, iter_type end)
+ {
+ std::vector<gdb_exception> errors;
+ cooked_index_storage thread_storage;
+ for (; iter != end; ++iter)
+ {
+ dwarf2_per_cu_data *per_cu = iter->get ();
+ try
+ {
+ process_psymtab_comp_unit (per_cu, per_objfile,
+ &thread_storage);
+ }
+ catch (gdb_exception &except)
+ {
+ errors.push_back (std::move (except));
+ }
+ }
+ return result_type (thread_storage.release (), std::move (errors));
+ });
- for (const auto &per_cu : per_bfd->all_comp_units)
- {
- if (per_cu->v.psymtab != NULL)
- /* In case a forward DW_TAG_imported_unit has read the CU already. */
- continue;
- process_psymtab_comp_unit (per_cu.get (), per_objfile, false,
- language_minimal);
- }
+ /* Only show a given exception a single time. */
+ std::unordered_set<gdb_exception> seen_exceptions;
+ for (auto &one_result : results)
+ {
+ indexes.push_back (std::move (one_result.first));
+ for (auto &one_exc : one_result.second)
+ if (seen_exceptions.insert (one_exc).second)
+ exception_print (gdb_stderr, one_exc);
+ }
+ }
/* This has to wait until we read the CUs, we need the list of DWOs. */
- process_skeletonless_type_units (per_objfile);
-
- /* Now that all TUs have been processed we can fill in the dependencies. */
- if (per_bfd->type_unit_groups != NULL)
- {
- htab_traverse_noresize (per_bfd->type_unit_groups.get (),
- build_type_psymtab_dependencies, per_objfile);
- }
+ process_skeletonless_type_units (per_objfile, &index_storage);
if (dwarf_read_debug > 0)
print_tu_stats (per_objfile);
- set_partial_user (per_objfile);
-
- per_bfd->partial_symtabs->psymtabs_addrmap
- = addrmap_create_fixed (per_bfd->partial_symtabs->psymtabs_addrmap,
- per_bfd->partial_symtabs->obstack ());
- /* At this point we want to keep the address map. */
- save_psymtabs_addrmap.release ();
+ indexes.push_back (index_storage.release ());
+ /* Remove any NULL entries. This might happen if parallel-for
+ decides to throttle the number of threads that were used. */
+ indexes.erase
+ (std::remove_if (indexes.begin (),
+ indexes.end (),
+ [] (const std::unique_ptr<cooked_index> &entry)
+ {
+ return entry == nullptr;
+ }),
+ indexes.end ());
+ indexes.shrink_to_fit ();
+
+ cooked_index_vector *vec = new cooked_index_vector (std::move (indexes));
+ per_bfd->index_table.reset (vec);
+
+ const cooked_index_entry *main_entry = vec->get_main ();
+ if (main_entry != nullptr)
+ set_objfile_main_name (objfile, main_entry->name,
+ main_entry->per_cu->lang);
dwarf_read_debug_printf ("Done building psymtabs of %s",
objfile_name (objfile));
}
-/* Load the partial DIEs for a secondary CU into memory.
- This is also used when rereading a primary CU with load_all_dies. */
-
-static void
-load_partial_comp_unit (dwarf2_per_cu_data *this_cu,
- dwarf2_per_objfile *per_objfile,
- dwarf2_cu *existing_cu)
-{
- cutu_reader reader (this_cu, per_objfile, nullptr, existing_cu, false);
-
- if (!reader.dummy_p)
- {
- prepare_one_comp_unit (reader.cu, reader.comp_unit_die,
- language_minimal);
-
- /* Check if comp unit has_children.
- If so, read the rest of the partial symbols from this comp unit.
- If not, there's no more debug_info for this comp unit. */
- if (reader.comp_unit_die->has_children)
- load_partial_dies (&reader, reader.info_ptr, 0);
-
- reader.keep ();
- }
-}
-
static void
read_comp_units_from_section (dwarf2_per_objfile *per_objfile,
struct dwarf2_section_info *section,
@@ -7619,630 +7217,18 @@ create_all_comp_units (dwarf2_per_objfile *per_objfile)
dwz_file *dwz = dwarf2_get_dwz_file (per_objfile->per_bfd);
if (dwz != NULL)
- read_comp_units_from_section (per_objfile, &dwz->info, &dwz->abbrev, 1,
- types_htab, rcuh_kind::COMPILE);
-
- per_objfile->per_bfd->signatured_types = std::move (types_htab);
-}
-
-/* Process all loaded DIEs for compilation unit CU, starting at
- FIRST_DIE. The caller should pass SET_ADDRMAP == 1 if the compilation
- unit DIE did not have PC info (DW_AT_low_pc and DW_AT_high_pc, or
- DW_AT_ranges). See the comments of add_partial_subprogram on how
- SET_ADDRMAP is used and how *LOWPC and *HIGHPC are updated. */
-
-static void
-scan_partial_symbols (struct partial_die_info *first_die, CORE_ADDR *lowpc,
- CORE_ADDR *highpc, int set_addrmap,
- struct dwarf2_cu *cu)
-{
- struct partial_die_info *pdi;
-
- /* Now, march along the PDI's, descending into ones which have
- interesting children but skipping the children of the other ones,
- until we reach the end of the compilation unit. */
-
- pdi = first_die;
-
- while (pdi != NULL)
- {
- pdi->fixup (cu);
-
- /* Anonymous namespaces or modules have no name but have interesting
- children, so we need to look at them. Ditto for anonymous
- enums. */
-
- if (pdi->raw_name != NULL || pdi->tag == DW_TAG_namespace
- || pdi->tag == DW_TAG_module || pdi->tag == DW_TAG_enumeration_type
- || pdi->tag == DW_TAG_imported_unit
- || pdi->tag == DW_TAG_inlined_subroutine)
- {
- switch (pdi->tag)
- {
- case DW_TAG_subprogram:
- case DW_TAG_inlined_subroutine:
- add_partial_subprogram (pdi, lowpc, highpc, set_addrmap, cu);
- if (cu->per_cu->lang == language_cplus)
- scan_partial_symbols (pdi->die_child, lowpc, highpc,
- set_addrmap, cu);
- break;
- case DW_TAG_constant:
- case DW_TAG_variable:
- case DW_TAG_typedef:
- case DW_TAG_union_type:
- if (!pdi->is_declaration
- || (pdi->tag == DW_TAG_variable && pdi->is_external))
- {
- add_partial_symbol (pdi, cu);
- }
- break;
- case DW_TAG_class_type:
- case DW_TAG_interface_type:
- case DW_TAG_structure_type:
- if (!pdi->is_declaration)
- {
- add_partial_symbol (pdi, cu);
- }
- if ((cu->per_cu->lang == language_rust
- || cu->per_cu->lang == language_cplus)
- && pdi->has_children)
- scan_partial_symbols (pdi->die_child, lowpc, highpc,
- set_addrmap, cu);
- break;
- case DW_TAG_enumeration_type:
- if (!pdi->is_declaration)
- add_partial_enumeration (pdi, cu);
- break;
- case DW_TAG_base_type:
- case DW_TAG_subrange_type:
- /* File scope base type definitions are added to the partial
- symbol table. */
- add_partial_symbol (pdi, cu);
- break;
- case DW_TAG_namespace:
- add_partial_namespace (pdi, lowpc, highpc, set_addrmap, cu);
- break;
- case DW_TAG_module:
- if (!pdi->is_declaration)
- add_partial_module (pdi, lowpc, highpc, set_addrmap, cu);
- break;
- case DW_TAG_imported_unit:
- {
- struct dwarf2_per_cu_data *per_cu;
-
- /* For now we don't handle imported units in type units. */
- if (cu->per_cu->is_debug_types)
- {
- error (_("Dwarf Error: DW_TAG_imported_unit is not"
- " supported in type units [in module %s]"),
- objfile_name (cu->per_objfile->objfile));
- }
-
- per_cu = dwarf2_find_containing_comp_unit
- (pdi->d.sect_off, pdi->is_dwz,
- cu->per_objfile->per_bfd);
-
- /* Go read the partial unit, if needed. */
- if (per_cu->v.psymtab == NULL)
- process_psymtab_comp_unit (per_cu, cu->per_objfile, true,
- cu->per_cu->lang);
-
- if (pdi->die_parent == nullptr
- && per_cu->unit_type == DW_UT_compile
- && per_cu->lang == language_cplus)
- /* Regard import as hint. See corresponding code in
- process_imported_unit_die. */
- break;
-
- cu->per_cu->imported_symtabs_push (per_cu);
- }
- break;
- case DW_TAG_imported_declaration:
- add_partial_symbol (pdi, cu);
- break;
- default:
- break;
- }
- }
-
- /* If the die has a sibling, skip to the sibling. */
-
- pdi = pdi->die_sibling;
- }
-}
-
-/* Functions used to compute the fully scoped name of a partial DIE.
-
- Normally, this is simple. For C++, the parent DIE's fully scoped
- name is concatenated with "::" and the partial DIE's name.
- Enumerators are an exception; they use the scope of their parent
- enumeration type, i.e. the name of the enumeration type is not
- prepended to the enumerator.
-
- There are two complexities. One is DW_AT_specification; in this
- case "parent" means the parent of the target of the specification,
- instead of the direct parent of the DIE. The other is compilers
- which do not emit DW_TAG_namespace; in this case we try to guess
- the fully qualified name of structure types from their members'
- linkage names. This must be done using the DIE's children rather
- than the children of any DW_AT_specification target. We only need
- to do this for structures at the top level, i.e. if the target of
- any DW_AT_specification (if any; otherwise the DIE itself) does not
- have a parent. */
-
-/* Compute the scope prefix associated with PDI's parent, in
- compilation unit CU. The result will be allocated on CU's
- comp_unit_obstack, or a copy of the already allocated PDI->NAME
- field. NULL is returned if no prefix is necessary. */
-static const char *
-partial_die_parent_scope (struct partial_die_info *pdi,
- struct dwarf2_cu *cu)
-{
- const char *grandparent_scope;
- struct partial_die_info *parent, *real_pdi;
-
- /* We need to look at our parent DIE; if we have a DW_AT_specification,
- then this means the parent of the specification DIE. */
-
- real_pdi = pdi;
- while (real_pdi->has_specification)
- {
- auto res = find_partial_die (real_pdi->spec_offset,
- real_pdi->spec_is_dwz, cu);
- real_pdi = res.pdi;
- cu = res.cu;
- }
-
- parent = real_pdi->die_parent;
- if (parent == NULL)
- return NULL;
-
- if (parent->scope_set)
- return parent->scope;
-
- parent->fixup (cu);
-
- grandparent_scope = partial_die_parent_scope (parent, cu);
-
- /* GCC 4.0 and 4.1 had a bug (PR c++/28460) where they generated bogus
- DW_TAG_namespace DIEs with a name of "::" for the global namespace.
- Work around this problem here. */
- if (cu->per_cu->lang == language_cplus
- && parent->tag == DW_TAG_namespace
- && strcmp (parent->name (cu), "::") == 0
- && grandparent_scope == NULL)
- {
- parent->scope = NULL;
- parent->scope_set = 1;
- return NULL;
- }
-
- /* Nested subroutines in Fortran get a prefix. */
- if (pdi->tag == DW_TAG_enumerator)
- /* Enumerators should not get the name of the enumeration as a prefix. */
- parent->scope = grandparent_scope;
- else if (parent->tag == DW_TAG_namespace
- || parent->tag == DW_TAG_module
- || parent->tag == DW_TAG_structure_type
- || parent->tag == DW_TAG_class_type
- || parent->tag == DW_TAG_interface_type
- || parent->tag == DW_TAG_union_type
- || parent->tag == DW_TAG_enumeration_type
- || (cu->per_cu->lang == language_fortran
- && parent->tag == DW_TAG_subprogram
- && pdi->tag == DW_TAG_subprogram))
- {
- if (grandparent_scope == NULL)
- parent->scope = parent->name (cu);
- else
- parent->scope = typename_concat (&cu->comp_unit_obstack,
- grandparent_scope,
- parent->name (cu), 0, cu);
- }
- else
- {
- /* FIXME drow/2004-04-01: What should we be doing with
- function-local names? For partial symbols, we should probably be
- ignoring them. */
- complaint (_("unhandled containing DIE tag %s for DIE at %s"),
- dwarf_tag_name (parent->tag),
- sect_offset_str (pdi->sect_off));
- parent->scope = grandparent_scope;
- }
-
- parent->scope_set = 1;
- return parent->scope;
-}
-
-/* Return the fully scoped name associated with PDI, from compilation unit
- CU. The result will be allocated with malloc. */
-
-static gdb::unique_xmalloc_ptr<char>
-partial_die_full_name (struct partial_die_info *pdi,
- struct dwarf2_cu *cu)
-{
- const char *parent_scope;
-
- /* If this is a template instantiation, we can not work out the
- template arguments from partial DIEs. So, unfortunately, we have
- to go through the full DIEs. At least any work we do building
- types here will be reused if full symbols are loaded later. */
- if (pdi->has_template_arguments)
{
- pdi->fixup (cu);
-
- if (pdi->name (cu) != NULL && strchr (pdi->name (cu), '<') == NULL)
- {
- struct die_info *die;
- struct attribute attr;
- struct dwarf2_cu *ref_cu = cu;
-
- /* DW_FORM_ref_addr is using section offset. */
- attr.name = (enum dwarf_attribute) 0;
- attr.form = DW_FORM_ref_addr;
- attr.u.unsnd = to_underlying (pdi->sect_off);
- die = follow_die_ref (NULL, &attr, &ref_cu);
-
- return make_unique_xstrdup (dwarf2_full_name (NULL, die, ref_cu));
- }
+ /* Pre-read the sections we'll need to construct an index. */
+ struct objfile *objfile = per_objfile->objfile;
+ dwz->abbrev.read (objfile);
+ dwz->info.read (objfile);
+ dwz->str.read (objfile);
+ dwz->line.read (objfile);
+ read_comp_units_from_section (per_objfile, &dwz->info, &dwz->abbrev, 1,
+ types_htab, rcuh_kind::COMPILE);
}
- parent_scope = partial_die_parent_scope (pdi, cu);
- if (parent_scope == NULL)
- return NULL;
- else
- return gdb::unique_xmalloc_ptr<char> (typename_concat (NULL, parent_scope,
- pdi->name (cu),
- 0, cu));
-}
-
-static void
-add_partial_symbol (struct partial_die_info *pdi, struct dwarf2_cu *cu)
-{
- dwarf2_per_objfile *per_objfile = cu->per_objfile;
- struct objfile *objfile = per_objfile->objfile;
- struct gdbarch *gdbarch = objfile->arch ();
- CORE_ADDR addr = 0;
- const char *actual_name = NULL;
- CORE_ADDR baseaddr;
-
- baseaddr = objfile->text_section_offset ();
-
- gdb::unique_xmalloc_ptr<char> built_actual_name
- = partial_die_full_name (pdi, cu);
- if (built_actual_name != NULL)
- actual_name = built_actual_name.get ();
-
- if (actual_name == NULL)
- actual_name = pdi->name (cu);
-
- partial_symbol psymbol;
- memset (&psymbol, 0, sizeof (psymbol));
- psymbol.ginfo.set_language (cu->per_cu->lang,
- &objfile->objfile_obstack);
- psymbol.ginfo.set_section_index (-1);
-
- /* The code below indicates that the psymbol should be installed by
- setting this. */
- gdb::optional<psymbol_placement> where;
-
- switch (pdi->tag)
- {
- case DW_TAG_inlined_subroutine:
- case DW_TAG_subprogram:
- addr = (gdbarch_adjust_dwarf2_addr (gdbarch, pdi->lowpc + baseaddr)
- - baseaddr);
- if (pdi->is_external
- || cu->per_cu->lang == language_ada
- || (cu->per_cu->lang == language_fortran
- && pdi->die_parent != NULL
- && pdi->die_parent->tag == DW_TAG_subprogram))
- {
- /* Normally, only "external" DIEs are part of the global scope.
- But in Ada and Fortran, we want to be able to access nested
- procedures globally. So all Ada and Fortran subprograms are
- stored in the global scope. */
- where = psymbol_placement::GLOBAL;
- }
- else
- where = psymbol_placement::STATIC;
-
- psymbol.domain = VAR_DOMAIN;
- psymbol.aclass = LOC_BLOCK;
- psymbol.ginfo.set_section_index (SECT_OFF_TEXT (objfile));
- psymbol.ginfo.value.address = addr;
-
- if (pdi->main_subprogram && actual_name != NULL)
- set_objfile_main_name (objfile, actual_name, cu->per_cu->lang);
- break;
- case DW_TAG_constant:
- psymbol.domain = VAR_DOMAIN;
- psymbol.aclass = LOC_STATIC;
- where = (pdi->is_external
- ? psymbol_placement::GLOBAL
- : psymbol_placement::STATIC);
- break;
- case DW_TAG_variable:
- if (pdi->d.locdesc)
- addr = decode_locdesc (pdi->d.locdesc, cu);
-
- if (pdi->d.locdesc
- && addr == 0
- && !per_objfile->per_bfd->has_section_at_zero)
- {
- /* A global or static variable may also have been stripped
- out by the linker if unused, in which case its address
- will be nullified; do not add such variables into partial
- symbol table then. */
- }
- else if (pdi->is_external)
- {
- /* Global Variable.
- Don't enter into the minimal symbol tables as there is
- a minimal symbol table entry from the ELF symbols already.
- Enter into partial symbol table if it has a location
- descriptor or a type.
- If the location descriptor is missing, new_symbol will create
- a LOC_UNRESOLVED symbol, the address of the variable will then
- be determined from the minimal symbol table whenever the variable
- is referenced.
- The address for the partial symbol table entry is not
- used by GDB, but it comes in handy for debugging partial symbol
- table building. */
-
- if (pdi->d.locdesc || pdi->has_type)
- {
- psymbol.domain = VAR_DOMAIN;
- psymbol.aclass = LOC_STATIC;
- psymbol.ginfo.set_section_index (SECT_OFF_TEXT (objfile));
- psymbol.ginfo.value.address = addr;
- where = psymbol_placement::GLOBAL;
- }
- }
- else
- {
- int has_loc = pdi->d.locdesc != NULL;
-
- /* Static Variable. Skip symbols whose value we cannot know (those
- without location descriptors or constant values). */
- if (!has_loc && !pdi->has_const_value)
- return;
-
- psymbol.domain = VAR_DOMAIN;
- psymbol.aclass = LOC_STATIC;
- psymbol.ginfo.set_section_index (SECT_OFF_TEXT (objfile));
- if (has_loc)
- psymbol.ginfo.value.address = addr;
- where = psymbol_placement::STATIC;
- }
- break;
- case DW_TAG_array_type:
- case DW_TAG_typedef:
- case DW_TAG_base_type:
- case DW_TAG_subrange_type:
- psymbol.domain = VAR_DOMAIN;
- psymbol.aclass = LOC_TYPEDEF;
- where = psymbol_placement::STATIC;
- break;
- case DW_TAG_imported_declaration:
- case DW_TAG_namespace:
- psymbol.domain = VAR_DOMAIN;
- psymbol.aclass = LOC_TYPEDEF;
- where = psymbol_placement::GLOBAL;
- break;
- case DW_TAG_module:
- /* With Fortran 77 there might be a "BLOCK DATA" module
- available without any name. If so, we skip the module as it
- doesn't bring any value. */
- if (actual_name != nullptr)
- {
- psymbol.domain = MODULE_DOMAIN;
- psymbol.aclass = LOC_TYPEDEF;
- where = psymbol_placement::GLOBAL;
- }
- break;
- case DW_TAG_class_type:
- case DW_TAG_interface_type:
- case DW_TAG_structure_type:
- case DW_TAG_union_type:
- case DW_TAG_enumeration_type:
- /* Skip external references. The DWARF standard says in the section
- about "Structure, Union, and Class Type Entries": "An incomplete
- structure, union or class type is represented by a structure,
- union or class entry that does not have a byte size attribute
- and that has a DW_AT_declaration attribute." */
- if (!pdi->has_byte_size && pdi->is_declaration)
- return;
-
- /* NOTE: carlton/2003-10-07: See comment in new_symbol about
- static vs. global. */
- psymbol.domain = STRUCT_DOMAIN;
- psymbol.aclass = LOC_TYPEDEF;
- where = (cu->per_cu->lang == language_cplus
- ? psymbol_placement::GLOBAL
- : psymbol_placement::STATIC);
- break;
- case DW_TAG_enumerator:
- psymbol.domain = VAR_DOMAIN;
- psymbol.aclass = LOC_CONST;
- where = (cu->per_cu->lang == language_cplus
- ? psymbol_placement::GLOBAL
- : psymbol_placement::STATIC);
- break;
- default:
- break;
- }
-
- if (where.has_value ())
- {
- if (built_actual_name != nullptr)
- actual_name = objfile->intern (actual_name);
- if (pdi->linkage_name == nullptr
- || cu->per_cu->lang == language_ada)
- psymbol.ginfo.set_linkage_name (actual_name);
- else
- {
- psymbol.ginfo.set_demangled_name (actual_name,
- &objfile->objfile_obstack);
- psymbol.ginfo.set_linkage_name (pdi->linkage_name);
- }
- cu->per_cu->v.psymtab->add_psymbol
- (psymbol, *where, per_objfile->per_bfd->partial_symtabs.get (),
- objfile);
- }
-}
-
-/* Read a partial die corresponding to a namespace; also, add a symbol
- corresponding to that namespace to the symbol table. NAMESPACE is
- the name of the enclosing namespace. */
-
-static void
-add_partial_namespace (struct partial_die_info *pdi,
- CORE_ADDR *lowpc, CORE_ADDR *highpc,
- int set_addrmap, struct dwarf2_cu *cu)
-{
- /* Add a symbol for the namespace. */
-
- add_partial_symbol (pdi, cu);
-
- /* Now scan partial symbols in that namespace. */
-
- if (pdi->has_children)
- scan_partial_symbols (pdi->die_child, lowpc, highpc, set_addrmap, cu);
-}
-
-/* Read a partial die corresponding to a Fortran module. */
-
-static void
-add_partial_module (struct partial_die_info *pdi, CORE_ADDR *lowpc,
- CORE_ADDR *highpc, int set_addrmap, struct dwarf2_cu *cu)
-{
- /* Add a symbol for the namespace. */
-
- add_partial_symbol (pdi, cu);
-
- /* Now scan partial symbols in that module. */
-
- if (pdi->has_children)
- scan_partial_symbols (pdi->die_child, lowpc, highpc, set_addrmap, cu);
-}
-
-static int
-dwarf2_ranges_read (unsigned, CORE_ADDR *, CORE_ADDR *, struct dwarf2_cu *,
- dwarf2_psymtab *, dwarf_tag);
-
-/* Read a partial die corresponding to a subprogram or an inlined
- subprogram and create a partial symbol for that subprogram.
- When the CU language allows it, this routine also defines a partial
- symbol for each nested subprogram that this subprogram contains.
- If SET_ADDRMAP is true, record the covered ranges in the addrmap.
- Set *LOWPC and *HIGHPC to the lowest and highest PC values found in PDI.
-
- PDI may also be a lexical block, in which case we simply search
- recursively for subprograms defined inside that lexical block.
- Again, this is only performed when the CU language allows this
- type of definitions. */
-
-static void
-add_partial_subprogram (struct partial_die_info *pdi,
- CORE_ADDR *lowpc, CORE_ADDR *highpc,
- int set_addrmap, struct dwarf2_cu *cu)
-{
- if (pdi->tag == DW_TAG_subprogram || pdi->tag == DW_TAG_inlined_subroutine)
- {
- if (pdi->has_pc_info)
- {
- if (pdi->lowpc < *lowpc)
- *lowpc = pdi->lowpc;
- if (pdi->highpc > *highpc)
- *highpc = pdi->highpc;
- if (set_addrmap)
- {
- struct objfile *objfile = cu->per_objfile->objfile;
- dwarf2_per_bfd *per_bfd = cu->per_objfile->per_bfd;
- struct gdbarch *gdbarch = objfile->arch ();
- CORE_ADDR baseaddr;
- CORE_ADDR this_highpc;
- CORE_ADDR this_lowpc;
-
- baseaddr = objfile->text_section_offset ();
- this_lowpc
- = (gdbarch_adjust_dwarf2_addr (gdbarch,
- pdi->lowpc + baseaddr)
- - baseaddr);
- this_highpc
- = (gdbarch_adjust_dwarf2_addr (gdbarch,
- pdi->highpc + baseaddr)
- - baseaddr);
- addrmap_set_empty (per_bfd->partial_symtabs->psymtabs_addrmap,
- this_lowpc, this_highpc - 1,
- cu->per_cu->v.psymtab);
- }
- }
-
- if (pdi->has_range_info
- && dwarf2_ranges_read (pdi->ranges_offset, &pdi->lowpc, &pdi->highpc,
- cu,
- set_addrmap ? cu->per_cu->v.psymtab : nullptr,
- pdi->tag))
- {
- if (pdi->lowpc < *lowpc)
- *lowpc = pdi->lowpc;
- if (pdi->highpc > *highpc)
- *highpc = pdi->highpc;
- }
-
- if (pdi->has_pc_info || pdi->has_range_info
- || (!pdi->is_external && pdi->may_be_inlined))
- {
- if (!pdi->is_declaration)
- /* Ignore subprogram DIEs that do not have a name, they are
- illegal. Do not emit a complaint at this point, we will
- do so when we convert this psymtab into a symtab. */
- if (pdi->name (cu))
- add_partial_symbol (pdi, cu);
- }
- }
-
- if (! pdi->has_children)
- return;
-
- if (cu->per_cu->lang == language_ada
- || cu->per_cu->lang == language_fortran)
- {
- pdi = pdi->die_child;
- while (pdi != NULL)
- {
- pdi->fixup (cu);
- if (pdi->tag == DW_TAG_subprogram
- || pdi->tag == DW_TAG_inlined_subroutine
- || pdi->tag == DW_TAG_lexical_block)
- add_partial_subprogram (pdi, lowpc, highpc, set_addrmap, cu);
- pdi = pdi->die_sibling;
- }
- }
-}
-
-/* Read a partial die corresponding to an enumeration type. */
-
-static void
-add_partial_enumeration (struct partial_die_info *enum_pdi,
- struct dwarf2_cu *cu)
-{
- struct partial_die_info *pdi;
-
- if (enum_pdi->name (cu) != NULL)
- add_partial_symbol (enum_pdi, cu);
-
- pdi = enum_pdi->die_child;
- while (pdi)
- {
- if (pdi->tag != DW_TAG_enumerator || pdi->raw_name == NULL)
- complaint (_("malformed enumerator DIE ignored"));
- else
- add_partial_symbol (pdi, cu);
- pdi = pdi->die_sibling;
- }
+ per_objfile->per_bfd->signatured_types = std::move (types_htab);
}
/* Return the initial uleb128 in the die at INFO_PTR. */
@@ -8310,12 +7296,15 @@ skip_children (const struct die_reader_specs *reader, const gdb_byte *info_ptr)
/* Scan the debug information for CU starting at INFO_PTR in buffer BUFFER.
INFO_PTR should point just after the initial uleb128 of a DIE, and the
abbrev corresponding to that skipped uleb128 should be passed in
- ABBREV. Returns a pointer to this DIE's sibling, skipping any
- children. */
+ ABBREV.
+
+ If DO_SKIP_CHILDREN is true, or if the DIE has no children, this
+ returns a pointer to this DIE's sibling, skipping any children.
+ Otherwise, returns a pointer to the DIE's first child. */
static const gdb_byte *
skip_one_die (const struct die_reader_specs *reader, const gdb_byte *info_ptr,
- const struct abbrev_info *abbrev)
+ const struct abbrev_info *abbrev, bool do_skip_children)
{
unsigned int bytes_read;
struct attribute attr;
@@ -8325,10 +7314,29 @@ skip_one_die (const struct die_reader_specs *reader, const gdb_byte *info_ptr,
const gdb_byte *buffer_end = reader->buffer_end;
unsigned int form, i;
+ if (do_skip_children && abbrev->sibling_offset != (unsigned short) -1)
+ {
+ /* We only handle DW_FORM_ref4 here. */
+ const gdb_byte *sibling_data = info_ptr + abbrev->sibling_offset;
+ unsigned int offset = read_4_bytes (abfd, sibling_data);
+ const gdb_byte *sibling_ptr
+ = buffer + to_underlying (cu->header.sect_off) + offset;
+ if (sibling_ptr >= info_ptr && sibling_ptr < reader->buffer_end)
+ return sibling_ptr;
+ /* Fall through to the slow way. */
+ }
+ else if (abbrev->size_if_constant != 0)
+ {
+ info_ptr += abbrev->size_if_constant;
+ if (do_skip_children && abbrev->has_children)
+ return skip_children (reader, info_ptr);
+ return info_ptr;
+ }
+
for (i = 0; i < abbrev->num_attrs; i++)
{
/* The only abbrev we care about is DW_AT_sibling. */
- if (abbrev->attrs[i].name == DW_AT_sibling)
+ if (do_skip_children && abbrev->attrs[i].name == DW_AT_sibling)
{
read_attribute (reader, &attr, &abbrev->attrs[i], info_ptr);
if (attr.form == DW_FORM_ref_addr)
@@ -8445,62 +7453,11 @@ skip_one_die (const struct die_reader_specs *reader, const gdb_byte *info_ptr,
}
}
- if (abbrev->has_children)
+ if (do_skip_children && abbrev->has_children)
return skip_children (reader, info_ptr);
else
return info_ptr;
}
-
-/* Locate ORIG_PDI's sibling.
- INFO_PTR should point to the start of the next DIE after ORIG_PDI. */
-
-static const gdb_byte *
-locate_pdi_sibling (const struct die_reader_specs *reader,
- struct partial_die_info *orig_pdi,
- const gdb_byte *info_ptr)
-{
- /* Do we know the sibling already? */
-
- if (orig_pdi->sibling)
- return orig_pdi->sibling;
-
- /* Are there any children to deal with? */
-
- if (!orig_pdi->has_children)
- return info_ptr;
-
- /* Skip the children the long way. */
-
- return skip_children (reader, info_ptr);
-}
-
-/* Expand this partial symbol table into a full symbol table. SELF is
- not NULL. */
-
-void
-dwarf2_psymtab::read_symtab (struct objfile *objfile)
-{
- dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile);
-
- gdb_assert (!per_objfile->symtab_set_p (per_cu_data));
-
- /* If this psymtab is constructed from a debug-only objfile, the
- has_section_at_zero flag will not necessarily be correct. We
- can get the correct value for this flag by looking at the data
- associated with the (presumably stripped) associated objfile. */
- if (objfile->separate_debug_objfile_backlink)
- {
- dwarf2_per_objfile *per_objfile_backlink
- = get_dwarf2_per_objfile (objfile->separate_debug_objfile_backlink);
-
- per_objfile->per_bfd->has_section_at_zero
- = per_objfile_backlink->per_bfd->has_section_at_zero;
- }
-
- expand_psymtab (objfile);
-
- process_cu_includes (per_objfile);
-}
/* Reading in full CUs. */
@@ -8548,18 +7505,6 @@ maybe_queue_comp_unit (struct dwarf2_cu *dependent_cu,
dwarf2_per_objfile *per_objfile,
enum language pretend_language)
{
- /* We may arrive here during partial symbol reading, if we need full
- DIEs to process an unusual case (e.g. template arguments). Do
- not queue PER_CU, just tell our caller to load its DIEs. */
- if (per_cu->per_bfd->reading_partial_symbols)
- {
- dwarf2_cu *cu = per_objfile->get_cu (per_cu);
-
- if (cu == NULL || cu->dies == NULL)
- return 1;
- return 0;
- }
-
/* Mark the dependence relation so that we don't flush PER_CU
too early. */
if (dependent_cu != NULL)
@@ -8664,39 +7609,6 @@ process_queue (dwarf2_per_objfile *per_objfile)
objfile_name (per_objfile->objfile));
}
-/* Read in full symbols for PST, and anything it depends on. */
-
-void
-dwarf2_psymtab::expand_psymtab (struct objfile *objfile)
-{
- gdb_assert (!readin_p (objfile));
-
- dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile);
- free_cached_comp_units freer (per_objfile);
- expand_dependencies (objfile);
-
- dw2_do_instantiate_symtab (per_cu_data, per_objfile, false);
- gdb_assert (get_compunit_symtab (objfile) != nullptr);
-}
-
-/* See psympriv.h. */
-
-bool
-dwarf2_psymtab::readin_p (struct objfile *objfile) const
-{
- dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile);
- return per_objfile->symtab_set_p (per_cu_data);
-}
-
-/* See psympriv.h. */
-
-compunit_symtab *
-dwarf2_psymtab::get_compunit_symtab (struct objfile *objfile) const
-{
- dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile);
- return per_objfile->get_symtab (per_cu_data);
-}
-
/* Trivial hash function for die_info: the hash value of a DIE
is its offset in .debug_info for this objfile. */
@@ -8879,7 +7791,7 @@ fixup_go_packaging (struct dwarf2_cu *cu)
struct symbol *sym = list->symbol[i];
if (sym->language () == language_go
- && SYMBOL_CLASS (sym) == LOC_BLOCK)
+ && sym->aclass () == LOC_BLOCK)
{
gdb::unique_xmalloc_ptr<char> this_package_name
(go_symbol_package_name (sym));
@@ -8893,9 +7805,9 @@ fixup_go_packaging (struct dwarf2_cu *cu)
struct objfile *objfile = cu->per_objfile->objfile;
if (strcmp (package_name.get (), this_package_name.get ()) != 0)
complaint (_("Symtab %s has objects from two different Go packages: %s and %s"),
- (symbol_symtab (sym) != NULL
+ (sym->symtab () != NULL
? symtab_to_filename_for_display
- (symbol_symtab (sym))
+ (sym->symtab ())
: objfile_name (objfile)),
this_package_name.get (), package_name.get ());
}
@@ -8916,9 +7828,9 @@ fixup_go_packaging (struct dwarf2_cu *cu)
sym->compute_and_set_names (saved_package_name, false, objfile->per_bfd);
/* This is not VAR_DOMAIN because we want a way to ensure a lookup of,
e.g., "main" finds the "main" module and not C's main(). */
- SYMBOL_DOMAIN (sym) = STRUCT_DOMAIN;
- SYMBOL_ACLASS_INDEX (sym) = LOC_TYPEDEF;
- SYMBOL_TYPE (sym) = type;
+ sym->set_domain (STRUCT_DOMAIN);
+ sym->set_aclass_index (LOC_TYPEDEF);
+ sym->set_type (type);
add_symbol_to_list (sym, cu->get_builder ()->get_global_symbols ());
}
@@ -9456,7 +8368,8 @@ process_full_comp_unit (dwarf2_cu *cu, enum language pretend_language)
get_scope_pc_bounds (cu->dies, &lowpc, &highpc, cu);
addr = gdbarch_adjust_dwarf2_addr (gdbarch, highpc + baseaddr);
- static_block = cu->get_builder ()->end_symtab_get_static_block (addr, 0, 1);
+ static_block
+ = cu->get_builder ()->end_compunit_symtab_get_static_block (addr, 0, 1);
/* If the comp unit has DW_AT_ranges, it may have discontiguous ranges.
Also, DW_AT_ranges may record ranges not belonging to any child DIEs
@@ -9465,9 +8378,8 @@ process_full_comp_unit (dwarf2_cu *cu, enum language pretend_language)
this comp unit. */
dwarf2_record_block_ranges (cu->dies, static_block, baseaddr, cu);
- cust = cu->get_builder ()->end_symtab_from_static_block (static_block,
- SECT_OFF_TEXT (objfile),
- 0);
+ cust = cu->get_builder ()->end_compunit_symtab_from_static_block
+ (static_block, SECT_OFF_TEXT (objfile), 0);
if (cust != NULL)
{
@@ -9477,8 +8389,8 @@ process_full_comp_unit (dwarf2_cu *cu, enum language pretend_language)
compilation is from a C file generated by language preprocessors, do
not set the language if it was already deduced by start_subfile. */
if (!(cu->per_cu->lang == language_c
- && COMPUNIT_FILETABS (cust)->language != language_unknown))
- COMPUNIT_FILETABS (cust)->language = cu->per_cu->lang;
+ && cust->primary_filetab ()->language () != language_unknown))
+ cust->primary_filetab ()->set_language (cu->per_cu->lang);
/* GCC-4.0 has started to support -fvar-tracking. GCC-3.x still can
produce DW_AT_location with location lists but it can be possibly
@@ -9493,10 +8405,10 @@ process_full_comp_unit (dwarf2_cu *cu, enum language pretend_language)
options - this waits on GCC PR other/32998 (-frecord-gcc-switches).
*/
if (cu->has_loclist && gcc_4_minor >= 5)
- cust->locations_valid = 1;
+ cust->set_locations_valid (true);
if (gcc_4_minor >= 5)
- cust->epilogue_unwind_valid = 1;
+ cust->set_epilogue_unwind_valid (true);
cust->set_call_site_htab (cu->call_site_htab);
}
@@ -9562,8 +8474,8 @@ process_full_type_unit (dwarf2_cu *cu,
do not set the language if it was already deduced by
start_subfile. */
if (!(cu->per_cu->lang == language_c
- && COMPUNIT_FILETABS (cust)->language != language_c))
- COMPUNIT_FILETABS (cust)->language = cu->per_cu->lang;
+ && cust->primary_filetab ()->language () != language_c))
+ cust->primary_filetab ()->set_language (cu->per_cu->lang);
}
}
else
@@ -9694,6 +8606,7 @@ process_die (struct die_info *die, struct dwarf2_cu *cu)
case DW_TAG_interface_type:
case DW_TAG_structure_type:
case DW_TAG_union_type:
+ case DW_TAG_namelist:
process_structure_scope (die, cu);
break;
case DW_TAG_enumeration_type:
@@ -9721,6 +8634,7 @@ process_die (struct die_info *die, struct dwarf2_cu *cu)
/* FALLTHROUGH */
case DW_TAG_base_type:
case DW_TAG_subrange_type:
+ case DW_TAG_generic_subrange:
case DW_TAG_typedef:
/* Add a typedef symbol for the type definition, if it has a
DW_AT_name. */
@@ -10502,7 +9416,7 @@ find_file_and_directory (struct die_info *die, struct dwarf2_cu *cu)
static void
handle_DW_AT_stmt_list (struct die_info *die, struct dwarf2_cu *cu,
- const file_and_directory &fnd, CORE_ADDR lowpc) /* ARI: editCase function */
+ CORE_ADDR lowpc) /* ARI: editCase function */
{
dwarf2_per_objfile *per_objfile = cu->per_objfile;
struct attribute *attr;
@@ -10590,9 +9504,7 @@ handle_DW_AT_stmt_list (struct die_info *die, struct dwarf2_cu *cu,
gdb_assert (die->tag != DW_TAG_partial_unit);
}
decode_mapping = (die->tag != DW_TAG_partial_unit);
- dwarf_decode_lines (cu->line_header, fnd, cu, nullptr, lowpc,
- decode_mapping);
-
+ dwarf_decode_lines (cu->line_header, cu, lowpc, decode_mapping);
}
/* Process DW_TAG_compile_unit or DW_TAG_partial_unit. */
@@ -10622,7 +9534,8 @@ read_file_scope (struct die_info *die, struct dwarf2_cu *cu)
file_and_directory &fnd = find_file_and_directory (die, cu);
- cu->start_symtab (fnd.get_name (), fnd.intern_comp_dir (objfile), lowpc);
+ cu->start_compunit_symtab (fnd.get_name (), fnd.intern_comp_dir (objfile),
+ lowpc);
gdb_assert (per_objfile->sym_cu == nullptr);
scoped_restore restore_sym_cu
@@ -10630,8 +9543,13 @@ read_file_scope (struct die_info *die, struct dwarf2_cu *cu)
/* Decode line number information if present. We do this before
processing child DIEs, so that the line header table is available
- for DW_AT_decl_file. */
- handle_DW_AT_stmt_list (die, cu, fnd, lowpc);
+ for DW_AT_decl_file. The PC check is here because, if LOWPC and
+ HIGHPC are both 0x0, then there won't be any interesting code in
+ the CU, but a check later on (in
+ lnp_state_machine::check_line_address) will fail to properly
+ exclude an entry that was removed via --gc-sections. */
+ if (lowpc != highpc)
+ handle_DW_AT_stmt_list (die, cu, lowpc);
/* Process all dies in compilation unit. */
if (die->child != NULL)
@@ -10710,15 +9628,15 @@ dwarf2_cu::setup_type_unit_groups (struct die_info *die)
if (lh == NULL)
{
if (first_time)
- start_symtab ("", NULL, 0);
+ start_compunit_symtab ("", NULL, 0);
else
{
gdb_assert (tug_unshare->symtabs == NULL);
gdb_assert (m_builder == nullptr);
struct compunit_symtab *cust = tug_unshare->compunit_symtab;
m_builder.reset (new struct buildsym_compunit
- (COMPUNIT_OBJFILE (cust), "",
- COMPUNIT_DIRNAME (cust),
+ (cust->objfile (), "",
+ cust->dirname (),
compunit_language (cust),
0, cust));
list_in_scope = get_builder ()->get_file_symbols ();
@@ -10731,7 +9649,7 @@ dwarf2_cu::setup_type_unit_groups (struct die_info *die)
if (first_time)
{
- struct compunit_symtab *cust = start_symtab ("", NULL, 0);
+ struct compunit_symtab *cust = start_compunit_symtab ("", NULL, 0);
/* Note: We don't assign tu_group->compunit_symtab yet because we're
still initializing it, and our caller (a few levels up)
@@ -10739,7 +9657,7 @@ dwarf2_cu::setup_type_unit_groups (struct die_info *die)
time. */
tug_unshare->symtabs
- = XOBNEWVEC (&COMPUNIT_OBJFILE (cust)->objfile_obstack,
+ = XOBNEWVEC (&cust->objfile ()->objfile_obstack,
struct symtab *, line_header->file_names_size ());
auto &file_names = line_header->file_names ();
@@ -10756,8 +9674,8 @@ dwarf2_cu::setup_type_unit_groups (struct die_info *die)
assume there's a simple mapping from
cu->line_header->file_names to subfiles, plus
cu->line_header->file_names may contain dups. */
- b->get_current_subfile ()->symtab
- = allocate_symtab (cust, b->get_current_subfile ()->name);
+ const char *name = b->get_current_subfile ()->name.c_str ();
+ b->get_current_subfile ()->symtab = allocate_symtab (cust, name);
}
fe.symtab = b->get_current_subfile ()->symtab;
@@ -10769,8 +9687,8 @@ dwarf2_cu::setup_type_unit_groups (struct die_info *die)
gdb_assert (m_builder == nullptr);
struct compunit_symtab *cust = tug_unshare->compunit_symtab;
m_builder.reset (new struct buildsym_compunit
- (COMPUNIT_OBJFILE (cust), "",
- COMPUNIT_DIRNAME (cust),
+ (cust->objfile (), "",
+ cust->dirname (),
compunit_language (cust),
0, cust));
list_in_scope = get_builder ()->get_file_symbols ();
@@ -12175,14 +11093,13 @@ open_dwo_file (dwarf2_per_objfile *per_objfile,
if (comp_dir != NULL)
{
- gdb::unique_xmalloc_ptr<char> path_to_try
- (concat (comp_dir, SLASH_STRING, file_name, (char *) NULL));
+ std::string path_to_try = path_join (comp_dir, file_name);
/* NOTE: If comp_dir is a relative path, this will also try the
search path, which seems useful. */
- gdb_bfd_ref_ptr abfd (try_open_dwop_file (per_objfile, path_to_try.get (),
- 0 /*is_dwp*/,
- 1 /*search_cwd*/));
+ gdb_bfd_ref_ptr abfd (try_open_dwop_file
+ (per_objfile, path_to_try.c_str (), 0 /*is_dwp*/, 1 /*search_cwd*/));
+
if (abfd != NULL)
return abfd;
}
@@ -12201,69 +11118,47 @@ open_dwo_file (dwarf2_per_objfile *per_objfile,
size of each of the DWO debugging sections we are interested in. */
static void
-dwarf2_locate_dwo_sections (bfd *abfd, asection *sectp,
- dwo_sections *dwo_sections)
+dwarf2_locate_dwo_sections (struct objfile *objfile, bfd *abfd,
+ asection *sectp, dwo_sections *dwo_sections)
{
const struct dwop_section_names *names = &dwop_section_names;
+ struct dwarf2_section_info *dw_sect = nullptr;
+
if (names->abbrev_dwo.matches (sectp->name))
- {
- dwo_sections->abbrev.s.section = sectp;
- dwo_sections->abbrev.size = bfd_section_size (sectp);
- }
+ dw_sect = &dwo_sections->abbrev;
else if (names->info_dwo.matches (sectp->name))
- {
- dwo_sections->info.s.section = sectp;
- dwo_sections->info.size = bfd_section_size (sectp);
- }
+ dw_sect = &dwo_sections->info;
else if (names->line_dwo.matches (sectp->name))
- {
- dwo_sections->line.s.section = sectp;
- dwo_sections->line.size = bfd_section_size (sectp);
- }
+ dw_sect = &dwo_sections->line;
else if (names->loc_dwo.matches (sectp->name))
- {
- dwo_sections->loc.s.section = sectp;
- dwo_sections->loc.size = bfd_section_size (sectp);
- }
+ dw_sect = &dwo_sections->loc;
else if (names->loclists_dwo.matches (sectp->name))
- {
- dwo_sections->loclists.s.section = sectp;
- dwo_sections->loclists.size = bfd_section_size (sectp);
- }
+ dw_sect = &dwo_sections->loclists;
else if (names->macinfo_dwo.matches (sectp->name))
- {
- dwo_sections->macinfo.s.section = sectp;
- dwo_sections->macinfo.size = bfd_section_size (sectp);
- }
+ dw_sect = &dwo_sections->macinfo;
else if (names->macro_dwo.matches (sectp->name))
- {
- dwo_sections->macro.s.section = sectp;
- dwo_sections->macro.size = bfd_section_size (sectp);
- }
+ dw_sect = &dwo_sections->macro;
else if (names->rnglists_dwo.matches (sectp->name))
- {
- dwo_sections->rnglists.s.section = sectp;
- dwo_sections->rnglists.size = bfd_section_size (sectp);
- }
+ dw_sect = &dwo_sections->rnglists;
else if (names->str_dwo.matches (sectp->name))
- {
- dwo_sections->str.s.section = sectp;
- dwo_sections->str.size = bfd_section_size (sectp);
- }
+ dw_sect = &dwo_sections->str;
else if (names->str_offsets_dwo.matches (sectp->name))
- {
- dwo_sections->str_offsets.s.section = sectp;
- dwo_sections->str_offsets.size = bfd_section_size (sectp);
- }
+ dw_sect = &dwo_sections->str_offsets;
else if (names->types_dwo.matches (sectp->name))
{
struct dwarf2_section_info type_section;
memset (&type_section, 0, sizeof (type_section));
- type_section.s.section = sectp;
- type_section.size = bfd_section_size (sectp);
dwo_sections->types.push_back (type_section);
+ dw_sect = &dwo_sections->types.back ();
+ }
+
+ if (dw_sect != nullptr)
+ {
+ dw_sect->s.section = sectp;
+ dw_sect->size = bfd_section_size (sectp);
+ dw_sect->read (objfile);
}
}
@@ -12291,8 +11186,8 @@ open_and_init_dwo_file (dwarf2_cu *cu, const char *dwo_name,
dwo_file->dbfd = std::move (dbfd);
for (asection *sec : gdb_bfd_sections (dwo_file->dbfd))
- dwarf2_locate_dwo_sections (dwo_file->dbfd.get (), sec,
- &dwo_file->sections);
+ dwarf2_locate_dwo_sections (per_objfile->objfile, dwo_file->dbfd.get (),
+ sec, &dwo_file->sections);
create_cus_hash_table (per_objfile, cu, *dwo_file, dwo_file->sections.info,
dwo_file->cus);
@@ -12319,8 +11214,8 @@ open_and_init_dwo_file (dwarf2_cu *cu, const char *dwo_name,
we are interested in. */
static void
-dwarf2_locate_common_dwp_sections (bfd *abfd, asection *sectp,
- dwp_file *dwp_file)
+dwarf2_locate_common_dwp_sections (struct objfile *objfile, bfd *abfd,
+ asection *sectp, dwp_file *dwp_file)
{
const struct dwop_section_names *names = &dwop_section_names;
unsigned int elf_section_nr = elf_section_data (sectp)->this_idx;
@@ -12331,20 +11226,19 @@ dwarf2_locate_common_dwp_sections (bfd *abfd, asection *sectp,
dwp_file->elf_sections[elf_section_nr] = sectp;
/* Look for specific sections that we need. */
+ struct dwarf2_section_info *dw_sect = nullptr;
if (names->str_dwo.matches (sectp->name))
- {
- dwp_file->sections.str.s.section = sectp;
- dwp_file->sections.str.size = bfd_section_size (sectp);
- }
+ dw_sect = &dwp_file->sections.str;
else if (names->cu_index.matches (sectp->name))
- {
- dwp_file->sections.cu_index.s.section = sectp;
- dwp_file->sections.cu_index.size = bfd_section_size (sectp);
- }
+ dw_sect = &dwp_file->sections.cu_index;
else if (names->tu_index.matches (sectp->name))
+ dw_sect = &dwp_file->sections.tu_index;
+
+ if (dw_sect != nullptr)
{
- dwp_file->sections.tu_index.s.section = sectp;
- dwp_file->sections.tu_index.size = bfd_section_size (sectp);
+ dw_sect->s.section = sectp;
+ dw_sect->size = bfd_section_size (sectp);
+ dw_sect->read (objfile);
}
}
@@ -12354,7 +11248,8 @@ dwarf2_locate_common_dwp_sections (bfd *abfd, asection *sectp,
have version 1 or 2 or 5 until we parse the cu_index/tu_index sections. */
static void
-dwarf2_locate_v2_dwp_sections (bfd *abfd, asection *sectp, void *dwp_file_ptr)
+dwarf2_locate_v2_dwp_sections (struct objfile *objfile, bfd *abfd,
+ asection *sectp, void *dwp_file_ptr)
{
struct dwp_file *dwp_file = (struct dwp_file *) dwp_file_ptr;
const struct dwop_section_names *names = &dwop_section_names;
@@ -12366,45 +11261,29 @@ dwarf2_locate_v2_dwp_sections (bfd *abfd, asection *sectp, void *dwp_file_ptr)
dwp_file->elf_sections[elf_section_nr] = sectp;
/* Look for specific sections that we need. */
+ struct dwarf2_section_info *dw_sect = nullptr;
if (names->abbrev_dwo.matches (sectp->name))
- {
- dwp_file->sections.abbrev.s.section = sectp;
- dwp_file->sections.abbrev.size = bfd_section_size (sectp);
- }
+ dw_sect = &dwp_file->sections.abbrev;
else if (names->info_dwo.matches (sectp->name))
- {
- dwp_file->sections.info.s.section = sectp;
- dwp_file->sections.info.size = bfd_section_size (sectp);
- }
+ dw_sect = &dwp_file->sections.info;
else if (names->line_dwo.matches (sectp->name))
- {
- dwp_file->sections.line.s.section = sectp;
- dwp_file->sections.line.size = bfd_section_size (sectp);
- }
+ dw_sect = &dwp_file->sections.line;
else if (names->loc_dwo.matches (sectp->name))
- {
- dwp_file->sections.loc.s.section = sectp;
- dwp_file->sections.loc.size = bfd_section_size (sectp);
- }
+ dw_sect = &dwp_file->sections.loc;
else if (names->macinfo_dwo.matches (sectp->name))
- {
- dwp_file->sections.macinfo.s.section = sectp;
- dwp_file->sections.macinfo.size = bfd_section_size (sectp);
- }
+ dw_sect = &dwp_file->sections.macinfo;
else if (names->macro_dwo.matches (sectp->name))
- {
- dwp_file->sections.macro.s.section = sectp;
- dwp_file->sections.macro.size = bfd_section_size (sectp);
- }
+ dw_sect = &dwp_file->sections.macro;
else if (names->str_offsets_dwo.matches (sectp->name))
- {
- dwp_file->sections.str_offsets.s.section = sectp;
- dwp_file->sections.str_offsets.size = bfd_section_size (sectp);
- }
+ dw_sect = &dwp_file->sections.str_offsets;
else if (names->types_dwo.matches (sectp->name))
+ dw_sect = &dwp_file->sections.types;
+
+ if (dw_sect != nullptr)
{
- dwp_file->sections.types.s.section = sectp;
- dwp_file->sections.types.size = bfd_section_size (sectp);
+ dw_sect->s.section = sectp;
+ dw_sect->size = bfd_section_size (sectp);
+ dw_sect->read (objfile);
}
}
@@ -12414,7 +11293,8 @@ dwarf2_locate_v2_dwp_sections (bfd *abfd, asection *sectp, void *dwp_file_ptr)
have version 1 or 2 or 5 until we parse the cu_index/tu_index sections. */
static void
-dwarf2_locate_v5_dwp_sections (bfd *abfd, asection *sectp, void *dwp_file_ptr)
+dwarf2_locate_v5_dwp_sections (struct objfile *objfile, bfd *abfd,
+ asection *sectp, void *dwp_file_ptr)
{
struct dwp_file *dwp_file = (struct dwp_file *) dwp_file_ptr;
const struct dwop_section_names *names = &dwop_section_names;
@@ -12426,40 +11306,27 @@ dwarf2_locate_v5_dwp_sections (bfd *abfd, asection *sectp, void *dwp_file_ptr)
dwp_file->elf_sections[elf_section_nr] = sectp;
/* Look for specific sections that we need. */
+ struct dwarf2_section_info *dw_sect = nullptr;
if (names->abbrev_dwo.matches (sectp->name))
- {
- dwp_file->sections.abbrev.s.section = sectp;
- dwp_file->sections.abbrev.size = bfd_section_size (sectp);
- }
+ dw_sect = &dwp_file->sections.abbrev;
else if (names->info_dwo.matches (sectp->name))
- {
- dwp_file->sections.info.s.section = sectp;
- dwp_file->sections.info.size = bfd_section_size (sectp);
- }
+ dw_sect = &dwp_file->sections.info;
else if (names->line_dwo.matches (sectp->name))
- {
- dwp_file->sections.line.s.section = sectp;
- dwp_file->sections.line.size = bfd_section_size (sectp);
- }
+ dw_sect = &dwp_file->sections.line;
else if (names->loclists_dwo.matches (sectp->name))
- {
- dwp_file->sections.loclists.s.section = sectp;
- dwp_file->sections.loclists.size = bfd_section_size (sectp);
- }
+ dw_sect = &dwp_file->sections.loclists;
else if (names->macro_dwo.matches (sectp->name))
- {
- dwp_file->sections.macro.s.section = sectp;
- dwp_file->sections.macro.size = bfd_section_size (sectp);
- }
+ dw_sect = &dwp_file->sections.macro;
else if (names->rnglists_dwo.matches (sectp->name))
- {
- dwp_file->sections.rnglists.s.section = sectp;
- dwp_file->sections.rnglists.size = bfd_section_size (sectp);
- }
+ dw_sect = &dwp_file->sections.rnglists;
else if (names->str_offsets_dwo.matches (sectp->name))
+ dw_sect = &dwp_file->sections.str_offsets;
+
+ if (dw_sect != nullptr)
{
- dwp_file->sections.str_offsets.s.section = sectp;
- dwp_file->sections.str_offsets.size = bfd_section_size (sectp);
+ dw_sect->s.section = sectp;
+ dw_sect->size = bfd_section_size (sectp);
+ dw_sect->read (objfile);
}
}
@@ -12586,7 +11453,7 @@ open_and_init_dwp_file (dwarf2_per_objfile *per_objfile)
dwp_file->num_sections, asection *);
for (asection *sec : gdb_bfd_sections (dwp_file->dbfd))
- dwarf2_locate_common_dwp_sections (dwp_file->dbfd.get (), sec,
+ dwarf2_locate_common_dwp_sections (objfile, dwp_file->dbfd.get (), sec,
dwp_file.get ());
dwp_file->cus = create_dwp_hash_table (per_objfile, dwp_file.get (), 0);
@@ -12616,10 +11483,10 @@ open_and_init_dwp_file (dwarf2_per_objfile *per_objfile)
for (asection *sec : gdb_bfd_sections (dwp_file->dbfd))
{
if (dwp_file->version == 2)
- dwarf2_locate_v2_dwp_sections (dwp_file->dbfd.get (), sec,
+ dwarf2_locate_v2_dwp_sections (objfile, dwp_file->dbfd.get (), sec,
dwp_file.get ());
else
- dwarf2_locate_v5_dwp_sections (dwp_file->dbfd.get (), sec,
+ dwarf2_locate_v5_dwp_sections (objfile, dwp_file->dbfd.get (), sec,
dwp_file.get ());
}
@@ -13070,7 +11937,7 @@ read_func_scope (struct die_info *die, struct dwarf2_cu *cu)
}
/* Ignore functions with missing or invalid low and high pc attributes. */
- if (dwarf2_get_pc_bounds (die, &lowpc, &highpc, cu, NULL)
+ if (dwarf2_get_pc_bounds (die, &lowpc, &highpc, cu, nullptr, nullptr)
<= PC_BOUNDS_INVALID)
{
attr = dwarf2_attr (die, DW_AT_external, cu);
@@ -13208,7 +12075,7 @@ read_func_scope (struct die_info *die, struct dwarf2_cu *cu)
of gdb assume that symbols do, and this is reasonably
true. */
for (symbol *sym : template_args)
- symbol_set_symtab (sym, symbol_symtab (templ_func));
+ sym->set_symtab (templ_func->symtab ());
}
/* In C++, we can have functions nested inside functions (e.g., when
@@ -13243,7 +12110,7 @@ read_lexical_block_scope (struct die_info *die, struct dwarf2_cu *cu)
as multiple lexical blocks? Handling children in a sane way would
be nasty. Might be easier to properly extend generic blocks to
describe ranges. */
- switch (dwarf2_get_pc_bounds (die, &lowpc, &highpc, cu, NULL))
+ switch (dwarf2_get_pc_bounds (die, &lowpc, &highpc, cu, nullptr, nullptr))
{
case PC_BOUNDS_NOT_PRESENT:
/* DW_TAG_lexical_block has no attributes, process its children as if
@@ -13305,6 +12172,11 @@ read_lexical_block_scope (struct die_info *die, struct dwarf2_cu *cu)
cu->get_builder ()->set_local_using_directives (cstk.local_using_directives);
}
+static void dwarf2_ranges_read_low_addrs (unsigned offset,
+ struct dwarf2_cu *cu,
+ dwarf_tag tag,
+ std::vector<CORE_ADDR> &result);
+
/* Read in DW_TAG_call_site and insert it to CU->call_site_htab. */
static void
@@ -13468,6 +12340,10 @@ read_call_site_scope (struct die_info *die, struct dwarf2_cu *cu)
target_die = follow_die_ref (die, attr, &target_cu);
gdb_assert (target_cu->per_objfile->objfile == objfile);
+
+ struct attribute *ranges_attr
+ = dwarf2_attr (target_die, DW_AT_ranges, target_cu);
+
if (die_is_declaration (target_die, target_cu))
{
const char *target_physname;
@@ -13483,12 +12359,25 @@ read_call_site_scope (struct die_info *die, struct dwarf2_cu *cu)
else
call_site->target.set_loc_physname (target_physname);
}
+ else if (ranges_attr != nullptr && ranges_attr->form_is_unsigned ())
+ {
+ ULONGEST ranges_offset = (ranges_attr->as_unsigned ()
+ + target_cu->gnu_ranges_base);
+ std::vector<CORE_ADDR> addresses;
+ dwarf2_ranges_read_low_addrs (ranges_offset, target_cu,
+ target_die->tag, addresses);
+ CORE_ADDR *saved = XOBNEWVAR (&objfile->objfile_obstack, CORE_ADDR,
+ addresses.size ());
+ std::copy (addresses.begin (), addresses.end (), saved);
+ call_site->target.set_loc_array (addresses.size (), saved);
+ }
else
{
CORE_ADDR lowpc;
/* DW_AT_entry_pc should be preferred. */
- if (dwarf2_get_pc_bounds (target_die, &lowpc, NULL, target_cu, NULL)
+ if (dwarf2_get_pc_bounds (target_die, &lowpc, NULL, target_cu,
+ nullptr, nullptr)
<= PC_BOUNDS_INVALID)
complaint (_("DW_AT_call_target target DIE has invalid "
"low pc, for referencing DIE %s [in module %s]"),
@@ -13989,15 +12878,15 @@ dwarf2_ranges_process (unsigned offset, struct dwarf2_cu *cu, dwarf_tag tag,
/* Get low and high pc attributes from DW_AT_ranges attribute value OFFSET.
Return 1 if the attributes are present and valid, otherwise, return 0.
- If RANGES_PST is not NULL we should set up the `psymtabs_addrmap'. */
+ TAG is passed to dwarf2_ranges_process. If MAP is not NULL, then
+ ranges in MAP are set, using DATUM as the value. */
static int
dwarf2_ranges_read (unsigned offset, CORE_ADDR *low_return,
CORE_ADDR *high_return, struct dwarf2_cu *cu,
- dwarf2_psymtab *ranges_pst, dwarf_tag tag)
+ addrmap *map, void *datum, dwarf_tag tag)
{
struct objfile *objfile = cu->per_objfile->objfile;
- dwarf2_per_bfd *per_bfd = cu->per_objfile->per_bfd;
struct gdbarch *gdbarch = objfile->arch ();
const CORE_ADDR baseaddr = objfile->text_section_offset ();
int low_set = 0;
@@ -14008,7 +12897,7 @@ dwarf2_ranges_read (unsigned offset, CORE_ADDR *low_return,
retval = dwarf2_ranges_process (offset, cu, tag,
[&] (CORE_ADDR range_beginning, CORE_ADDR range_end)
{
- if (ranges_pst != NULL)
+ if (map != nullptr)
{
CORE_ADDR lowpc;
CORE_ADDR highpc;
@@ -14019,8 +12908,7 @@ dwarf2_ranges_read (unsigned offset, CORE_ADDR *low_return,
highpc = (gdbarch_adjust_dwarf2_addr (gdbarch,
range_end + baseaddr)
- baseaddr);
- addrmap_set_empty (per_bfd->partial_symtabs->psymtabs_addrmap,
- lowpc, highpc - 1, ranges_pst);
+ addrmap_set_empty (map, lowpc, highpc - 1, datum);
}
/* FIXME: This is recording everything as a low-high
@@ -14056,6 +12944,20 @@ dwarf2_ranges_read (unsigned offset, CORE_ADDR *low_return,
return 1;
}
+/* Process ranges and fill in a vector of the low PC values only. */
+
+static void
+dwarf2_ranges_read_low_addrs (unsigned offset, struct dwarf2_cu *cu,
+ dwarf_tag tag,
+ std::vector<CORE_ADDR> &result)
+{
+ dwarf2_ranges_process (offset, cu, tag,
+ [&] (CORE_ADDR start, CORE_ADDR end)
+ {
+ result.push_back (start);
+ });
+}
+
/* Get low and high pc attributes from a die. See enum pc_bounds_kind
definition for the return value. *LOWPC and *HIGHPC are set iff
neither PC_BOUNDS_NOT_PRESENT nor PC_BOUNDS_INVALID are returned. */
@@ -14063,7 +12965,7 @@ dwarf2_ranges_read (unsigned offset, CORE_ADDR *low_return,
static enum pc_bounds_kind
dwarf2_get_pc_bounds (struct die_info *die, CORE_ADDR *lowpc,
CORE_ADDR *highpc, struct dwarf2_cu *cu,
- dwarf2_psymtab *pst)
+ addrmap *map, void *datum)
{
dwarf2_per_objfile *per_objfile = cu->per_objfile;
struct attribute *attr;
@@ -14106,8 +13008,8 @@ dwarf2_get_pc_bounds (struct die_info *die, CORE_ADDR *lowpc,
/* Value of the DW_AT_ranges attribute is the offset in the
.debug_ranges section. */
- if (!dwarf2_ranges_read (ranges_offset, &low, &high, cu, pst,
- die->tag))
+ if (!dwarf2_ranges_read (ranges_offset, &low, &high, cu,
+ map, datum, die->tag))
return PC_BOUNDS_INVALID;
/* Found discontinuous range of addresses. */
ret = PC_BOUNDS_RANGES;
@@ -14150,7 +13052,8 @@ dwarf2_get_subprogram_pc_bounds (struct die_info *die,
CORE_ADDR low, high;
struct die_info *child = die->child;
- if (dwarf2_get_pc_bounds (die, &low, &high, cu, NULL) >= PC_BOUNDS_RANGES)
+ if (dwarf2_get_pc_bounds (die, &low, &high, cu, nullptr, nullptr)
+ >= PC_BOUNDS_RANGES)
{
*lowpc = std::min (*lowpc, low);
*highpc = std::max (*highpc, high);
@@ -14187,7 +13090,8 @@ get_scope_pc_bounds (struct die_info *die,
CORE_ADDR best_high = (CORE_ADDR) 0;
CORE_ADDR current_low, current_high;
- if (dwarf2_get_pc_bounds (die, &current_low, &current_high, cu, NULL)
+ if (dwarf2_get_pc_bounds (die, &current_low, &current_high, cu,
+ nullptr, nullptr)
>= PC_BOUNDS_RANGES)
{
best_low = current_low;
@@ -14288,7 +13192,7 @@ dwarf2_record_block_ranges (struct die_info *die, struct block *block,
blockvec.emplace_back (start, end);
});
- BLOCK_RANGES(block) = make_blockranges (objfile, blockvec);
+ block->set_ranges (make_blockranges (objfile, blockvec));
}
}
@@ -14315,6 +13219,7 @@ check_producer (struct dwarf2_cu *cu)
{
cu->producer_is_gxx_lt_4_6 = major < 4 || (major == 4 && minor < 6);
cu->producer_is_gcc_lt_4_3 = major < 4 || (major == 4 && minor < 3);
+ cu->producer_is_gcc_11 = major == 11;
}
else if (producer_is_icc (cu->producer, &major, &minor))
{
@@ -14459,6 +13364,19 @@ handle_member_location (struct die_info *die, struct dwarf2_cu *cu,
if (attr->form_is_constant ())
{
LONGEST offset = attr->constant_value (0);
+
+ /* Work around this GCC 11 bug, where it would erroneously use -1
+ data member locations, instead of 0:
+
+ Negative DW_AT_data_member_location
+ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101378
+ */
+ if (offset == -1 && cu->producer_is_gcc_11)
+ {
+ complaint (_("DW_AT_data_member_location value of -1, assuming 0"));
+ offset = 0;
+ }
+
field->set_loc_bitpos (offset * bits_per_byte);
}
else if (attr->form_is_section_offset ())
@@ -14537,8 +13455,21 @@ dwarf2_add_field (struct field_info *fip, struct die_info *die,
fp = &new_field->field;
- if (die->tag == DW_TAG_member && ! die_is_declaration (die, cu))
- {
+ if ((die->tag == DW_TAG_member || die->tag == DW_TAG_namelist_item)
+ && !die_is_declaration (die, cu))
+ {
+ if (die->tag == DW_TAG_namelist_item)
+ {
+ /* Typically, DW_TAG_namelist_item are references to namelist items.
+ If so, follow that reference. */
+ struct attribute *attr1 = dwarf2_attr (die, DW_AT_namelist_item, cu);
+ struct die_info *item_die = nullptr;
+ struct dwarf2_cu *item_cu = cu;
+ if (attr1->form_is_ref ())
+ item_die = follow_die_ref (die, attr1, &item_cu);
+ if (item_die != nullptr)
+ die = item_die;
+ }
/* Data member other than a C++ static data member. */
/* Get type of field. */
@@ -15596,6 +14527,10 @@ read_structure_type (struct die_info *die, struct dwarf2_cu *cu)
{
type->set_code (TYPE_CODE_UNION);
}
+ else if (die->tag == DW_TAG_namelist)
+ {
+ type->set_code (TYPE_CODE_NAMELIST);
+ }
else
{
type->set_code (TYPE_CODE_STRUCT);
@@ -15798,7 +14733,8 @@ handle_struct_member_die (struct die_info *child_die, struct type *type,
struct dwarf2_cu *cu)
{
if (child_die->tag == DW_TAG_member
- || child_die->tag == DW_TAG_variable)
+ || child_die->tag == DW_TAG_variable
+ || child_die->tag == DW_TAG_namelist_item)
{
/* NOTE: carlton/2002-11-05: A C++ static data member
should be a DW_TAG_member that is a declaration, but
@@ -15841,8 +14777,10 @@ handle_struct_member_die (struct die_info *child_die, struct type *type,
handle_variant (child_die, type, fi, template_args, cu);
}
-/* Finish creating a structure or union type, including filling in
- its members and creating a symbol for it. */
+/* Finish creating a structure or union type, including filling in its
+ members and creating a symbol for it. This function also handles Fortran
+ namelist variables, their items or members and creating a symbol for
+ them. */
static void
process_structure_scope (struct die_info *die, struct dwarf2_cu *cu)
@@ -16033,7 +14971,7 @@ process_structure_scope (struct die_info *die, struct dwarf2_cu *cu)
{
struct symtab *symtab;
if (sym != nullptr)
- symtab = symbol_symtab (sym);
+ symtab = sym->symtab ();
else if (cu->line_header != nullptr)
{
/* Any related symtab will do. */
@@ -16057,7 +14995,7 @@ process_structure_scope (struct die_info *die, struct dwarf2_cu *cu)
other parts of gdb assume that symbols do, and this is
reasonably true. */
for (int i = 0; i < TYPE_N_TEMPLATE_ARGUMENTS (type); ++i)
- symbol_set_symtab (TYPE_TEMPLATE_ARGUMENT (type, i), symtab);
+ TYPE_TEMPLATE_ARGUMENT (type, i)->set_symtab (symtab);
}
}
}
@@ -16612,7 +15550,8 @@ read_array_type (struct die_info *die, struct dwarf2_cu *cu)
child_die = die->child;
while (child_die && child_die->tag)
{
- if (child_die->tag == DW_TAG_subrange_type)
+ if (child_die->tag == DW_TAG_subrange_type
+ || child_die->tag == DW_TAG_generic_subrange)
{
struct type *child_type = read_type_die (child_die, cu);
@@ -16846,7 +15785,7 @@ mark_common_block_symbol_computed (struct symbol *sym,
gdb_assert (ptr - baton->data == baton->size);
SYMBOL_LOCATION_BATON (sym) = baton;
- SYMBOL_ACLASS_INDEX (sym) = dwarf2_locexpr_index;
+ sym->set_aclass_index (dwarf2_locexpr_index);
}
/* Create appropriate locally-scoped variables for all the
@@ -16945,7 +15884,7 @@ read_common_block (struct die_info *die, struct dwarf2_cu *cu)
}
sym = new_symbol (die, objfile_type (objfile)->builtin_void, cu);
- SYMBOL_VALUE_COMMON_BLOCK (sym) = common_block;
+ sym->set_value_common_block (common_block);
}
}
@@ -18785,11 +17724,11 @@ read_die_and_siblings (const struct die_reader_specs *reader,
if (dwarf_die_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "Read die from %s@0x%x of %s:\n",
- reader->die_section->get_name (),
- (unsigned) (info_ptr - reader->die_section->buffer),
- bfd_get_filename (reader->abfd));
+ gdb_printf (gdb_stdlog,
+ "Read die from %s@0x%x of %s:\n",
+ reader->die_section->get_name (),
+ (unsigned) (info_ptr - reader->die_section->buffer),
+ bfd_get_filename (reader->abfd));
dump_die (die, dwarf_die_debug);
}
@@ -18891,11 +17830,11 @@ read_full_die (const struct die_reader_specs *reader,
if (dwarf_die_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "Read die from %s@0x%x of %s:\n",
- reader->die_section->get_name (),
- (unsigned) (info_ptr - reader->die_section->buffer),
- bfd_get_filename (reader->abfd));
+ gdb_printf (gdb_stdlog,
+ "Read die from %s@0x%x of %s:\n",
+ reader->die_section->get_name (),
+ (unsigned) (info_ptr - reader->die_section->buffer),
+ bfd_get_filename (reader->abfd));
dump_die (*diep, dwarf_die_debug);
}
@@ -18903,825 +17842,858 @@ read_full_die (const struct die_reader_specs *reader,
}
-/* Returns nonzero if TAG represents a type that we might generate a partial
- symbol for. */
-
-static int
-is_type_tag_for_partial (int tag, enum language lang)
+void
+cooked_indexer::check_bounds (cutu_reader *reader)
{
- switch (tag)
+ if (reader->cu->per_cu->addresses_seen)
+ return;
+
+ dwarf2_cu *cu = reader->cu;
+
+ CORE_ADDR best_lowpc = 0, best_highpc = 0;
+ /* Possibly set the default values of LOWPC and HIGHPC from
+ `DW_AT_ranges'. */
+ dwarf2_find_base_address (reader->comp_unit_die, cu);
+ enum pc_bounds_kind cu_bounds_kind
+ = dwarf2_get_pc_bounds (reader->comp_unit_die, &best_lowpc, &best_highpc,
+ cu, m_index_storage->get_addrmap (), cu->per_cu);
+ if (cu_bounds_kind == PC_BOUNDS_HIGH_LOW && best_lowpc < best_highpc)
{
-#if 0
- /* Some types that would be reasonable to generate partial symbols for,
- that we don't at present. Note that normally this does not
- matter, mainly because C compilers don't give names to these
- types, but instead emit DW_TAG_typedef. */
- case DW_TAG_file_type:
- case DW_TAG_ptr_to_member_type:
- case DW_TAG_set_type:
- case DW_TAG_string_type:
- case DW_TAG_subroutine_type:
-#endif
+ struct objfile *objfile = cu->per_objfile->objfile;
+ CORE_ADDR baseaddr = objfile->text_section_offset ();
+ struct gdbarch *gdbarch = objfile->arch ();
+ CORE_ADDR low
+ = (gdbarch_adjust_dwarf2_addr (gdbarch, best_lowpc + baseaddr)
+ - baseaddr);
+ CORE_ADDR high
+ = (gdbarch_adjust_dwarf2_addr (gdbarch, best_highpc + baseaddr)
+ - baseaddr - 1);
+ /* Store the contiguous range if it is not empty; it can be
+ empty for CUs with no code. */
+ addrmap_set_empty (m_index_storage->get_addrmap (), low, high,
+ cu->per_cu);
- /* GNAT may emit an array with a name, but no typedef, so we
- need to make a symbol in this case. */
- case DW_TAG_array_type:
- return lang == language_ada;
+ cu->per_cu->addresses_seen = true;
+ }
+}
- case DW_TAG_base_type:
+/* Helper function that returns true if TAG can have a linkage
+ name. */
+
+static bool
+tag_can_have_linkage_name (enum dwarf_tag tag)
+{
+ switch (tag)
+ {
+ /* We include types here because an anonymous C++ type might
+ have a name for linkage purposes. */
case DW_TAG_class_type:
- case DW_TAG_interface_type:
- case DW_TAG_enumeration_type:
case DW_TAG_structure_type:
- case DW_TAG_subrange_type:
- case DW_TAG_typedef:
case DW_TAG_union_type:
- return 1;
+ case DW_TAG_variable:
+ case DW_TAG_subprogram:
+ return true;
+
default:
- return 0;
+ return false;
}
}
-/* Load all DIEs that are interesting for partial symbols into memory. */
-
-static struct partial_die_info *
-load_partial_dies (const struct die_reader_specs *reader,
- const gdb_byte *info_ptr, int building_psymtab)
+cutu_reader *
+cooked_indexer::ensure_cu_exists (cutu_reader *reader,
+ dwarf2_per_objfile *per_objfile,
+ sect_offset sect_off, bool is_dwz,
+ bool for_scanning)
{
- struct dwarf2_cu *cu = reader->cu;
- struct objfile *objfile = cu->per_objfile->objfile;
- struct partial_die_info *parent_die, *last_die, *first_die = NULL;
- unsigned int bytes_read;
- unsigned int load_all = 0;
- int nesting_level = 1;
-
- parent_die = NULL;
- last_die = NULL;
+ /* Lookups for type unit references are always in the CU, and
+ cross-CU references will crash. */
+ if (reader->cu->per_cu->is_dwz == is_dwz
+ && reader->cu->header.offset_in_cu_p (sect_off))
+ return reader;
- gdb_assert (cu->per_cu != NULL);
- if (cu->load_all_dies)
- load_all = 1;
+ dwarf2_per_cu_data *per_cu
+ = dwarf2_find_containing_comp_unit (sect_off, is_dwz,
+ per_objfile->per_bfd);
- cu->partial_dies
- = htab_create_alloc_ex (cu->header.length / 12,
- partial_die_hash,
- partial_die_eq,
- NULL,
- &cu->comp_unit_obstack,
- hashtab_obstack_allocate,
- dummy_obstack_deallocate);
-
- while (1)
+ /* When scanning, we only want to visit a given CU a single time.
+ Doing this check here avoids self-imports as well. */
+ if (for_scanning)
{
- const abbrev_info *abbrev = peek_die_abbrev (*reader, info_ptr,
- &bytes_read);
-
- /* A NULL abbrev means the end of a series of children. */
- if (abbrev == NULL)
- {
- if (--nesting_level == 0)
- return first_die;
-
- info_ptr += bytes_read;
- last_die = parent_die;
- parent_die = parent_die->die_parent;
- continue;
- }
-
- /* Check for template arguments. We never save these; if
- they're seen, we just mark the parent, and go on our way. */
- if (parent_die != NULL
- && cu->per_cu->lang == language_cplus
- && (abbrev->tag == DW_TAG_template_type_param
- || abbrev->tag == DW_TAG_template_value_param))
- {
- parent_die->has_template_arguments = 1;
-
- if (!load_all)
- {
- /* We don't need a partial DIE for the template argument. */
- info_ptr = skip_one_die (reader, info_ptr + bytes_read, abbrev);
- continue;
- }
- }
-
- /* We only recurse into c++ subprograms looking for template arguments.
- Skip their other children. */
- if (!load_all
- && cu->per_cu->lang == language_cplus
- && parent_die != NULL
- && parent_die->tag == DW_TAG_subprogram
- && abbrev->tag != DW_TAG_inlined_subroutine)
- {
- info_ptr = skip_one_die (reader, info_ptr + bytes_read, abbrev);
- continue;
- }
-
- /* Check whether this DIE is interesting enough to save. Normally
- we would not be interested in members here, but there may be
- later variables referencing them via DW_AT_specification (for
- static members). */
- if (!load_all
- && !is_type_tag_for_partial (abbrev->tag, cu->per_cu->lang)
- && abbrev->tag != DW_TAG_constant
- && abbrev->tag != DW_TAG_enumerator
- && abbrev->tag != DW_TAG_subprogram
- && abbrev->tag != DW_TAG_inlined_subroutine
- && abbrev->tag != DW_TAG_lexical_block
- && abbrev->tag != DW_TAG_variable
- && abbrev->tag != DW_TAG_namespace
- && abbrev->tag != DW_TAG_module
- && abbrev->tag != DW_TAG_member
- && abbrev->tag != DW_TAG_imported_unit
- && abbrev->tag != DW_TAG_imported_declaration)
- {
- /* Otherwise we skip to the next sibling, if any. */
- info_ptr = skip_one_die (reader, info_ptr + bytes_read, abbrev);
- continue;
- }
-
- struct partial_die_info pdi ((sect_offset) (info_ptr - reader->buffer),
- abbrev);
-
- info_ptr = pdi.read (reader, *abbrev, info_ptr + bytes_read);
-
- /* This two-pass algorithm for processing partial symbols has a
- high cost in cache pressure. Thus, handle some simple cases
- here which cover the majority of C partial symbols. DIEs
- which neither have specification tags in them, nor could have
- specification tags elsewhere pointing at them, can simply be
- processed and discarded.
-
- This segment is also optional; scan_partial_symbols and
- add_partial_symbol will handle these DIEs if we chain
- them in normally. When compilers which do not emit large
- quantities of duplicate debug information are more common,
- this code can probably be removed. */
-
- /* Any complete simple types at the top level (pretty much all
- of them, for a language without namespaces), can be processed
- directly. */
- if (parent_die == NULL
- && pdi.has_specification == 0
- && pdi.is_declaration == 0
- && ((pdi.tag == DW_TAG_typedef && !pdi.has_children)
- || pdi.tag == DW_TAG_base_type
- || pdi.tag == DW_TAG_array_type
- || pdi.tag == DW_TAG_subrange_type))
- {
- if (building_psymtab && pdi.raw_name != NULL)
- add_partial_symbol (&pdi, cu);
-
- info_ptr = locate_pdi_sibling (reader, &pdi, info_ptr);
- continue;
- }
-
- /* The exception for DW_TAG_typedef with has_children above is
- a workaround of GCC PR debug/47510. In the case of this complaint
- type_name_or_error will error on such types later.
-
- GDB skipped children of DW_TAG_typedef by the shortcut above and then
- it could not find the child DIEs referenced later, this is checked
- above. In correct DWARF DW_TAG_typedef should have no children. */
-
- if (pdi.tag == DW_TAG_typedef && pdi.has_children)
- complaint (_("DW_TAG_typedef has childen - GCC PR debug/47510 bug "
- "- DIE at %s [in module %s]"),
- sect_offset_str (pdi.sect_off), objfile_name (objfile));
-
- /* If we're at the second level, and we're an enumerator, and
- our parent has no specification (meaning possibly lives in a
- namespace elsewhere), then we can add the partial symbol now
- instead of queueing it. */
- if (pdi.tag == DW_TAG_enumerator
- && parent_die != NULL
- && parent_die->die_parent == NULL
- && parent_die->tag == DW_TAG_enumeration_type
- && parent_die->has_specification == 0)
- {
- if (pdi.raw_name == NULL)
- complaint (_("malformed enumerator DIE ignored"));
- else if (building_psymtab)
- add_partial_symbol (&pdi, cu);
-
- info_ptr = locate_pdi_sibling (reader, &pdi, info_ptr);
- continue;
- }
-
- struct partial_die_info *part_die
- = new (&cu->comp_unit_obstack) partial_die_info (pdi);
-
- /* We'll save this DIE so link it in. */
- part_die->die_parent = parent_die;
- part_die->die_sibling = NULL;
- part_die->die_child = NULL;
-
- if (last_die && last_die == parent_die)
- last_die->die_child = part_die;
- else if (last_die)
- last_die->die_sibling = part_die;
-
- last_die = part_die;
-
- if (first_die == NULL)
- first_die = part_die;
-
- /* Maybe add the DIE to the hash table. Not all DIEs that we
- find interesting need to be in the hash table, because we
- also have the parent/sibling/child chains; only those that we
- might refer to by offset later during partial symbol reading.
-
- For now this means things that might have be the target of a
- DW_AT_specification, DW_AT_abstract_origin, or
- DW_AT_extension. DW_AT_extension will refer only to
- namespaces; DW_AT_abstract_origin refers to functions (and
- many things under the function DIE, but we do not recurse
- into function DIEs during partial symbol reading) and
- possibly variables as well; DW_AT_specification refers to
- declarations. Declarations ought to have the DW_AT_declaration
- flag. It happens that GCC forgets to put it in sometimes, but
- only for functions, not for types.
-
- Adding more things than necessary to the hash table is harmless
- except for the performance cost. Adding too few will result in
- wasted time in find_partial_die, when we reread the compilation
- unit with load_all_dies set. */
-
- if (load_all
- || abbrev->tag == DW_TAG_constant
- || abbrev->tag == DW_TAG_subprogram
- || abbrev->tag == DW_TAG_variable
- || abbrev->tag == DW_TAG_namespace
- || part_die->is_declaration)
- {
- void **slot;
-
- slot = htab_find_slot_with_hash (cu->partial_dies, part_die,
- to_underlying (part_die->sect_off),
- INSERT);
- *slot = part_die;
- }
-
- /* For some DIEs we want to follow their children (if any). For C
- we have no reason to follow the children of structures; for other
- languages we have to, so that we can get at method physnames
- to infer fully qualified class names, for DW_AT_specification,
- and for C++ template arguments. For C++, we also look one level
- inside functions to find template arguments (if the name of the
- function does not already contain the template arguments).
-
- For Ada and Fortran, we need to scan the children of subprograms
- and lexical blocks as well because these languages allow the
- definition of nested entities that could be interesting for the
- debugger, such as nested subprograms for instance. */
- if (last_die->has_children
- && (load_all
- || last_die->tag == DW_TAG_namespace
- || last_die->tag == DW_TAG_module
- || last_die->tag == DW_TAG_enumeration_type
- || (cu->per_cu->lang == language_cplus
- && last_die->tag == DW_TAG_subprogram
- && (last_die->raw_name == NULL
- || strchr (last_die->raw_name, '<') == NULL))
- || (cu->per_cu->lang != language_c
- && (last_die->tag == DW_TAG_class_type
- || last_die->tag == DW_TAG_interface_type
- || last_die->tag == DW_TAG_structure_type
- || last_die->tag == DW_TAG_union_type))
- || ((cu->per_cu->lang == language_ada
- || cu->per_cu->lang == language_fortran)
- && (last_die->tag == DW_TAG_subprogram
- || last_die->tag == DW_TAG_lexical_block))))
- {
- nesting_level++;
- parent_die = last_die;
- continue;
- }
+ bool nope = false;
+ if (!per_cu->scanned.compare_exchange_strong (nope, true))
+ return nullptr;
+ }
+ if (per_cu == m_per_cu)
+ return reader;
- /* Otherwise we skip to the next sibling, if any. */
- info_ptr = locate_pdi_sibling (reader, last_die, info_ptr);
+ cutu_reader *result = m_index_storage->get_reader (per_cu);
+ if (result == nullptr)
+ {
+ cutu_reader new_reader (per_cu, per_objfile, nullptr, nullptr, false,
+ m_index_storage->get_abbrev_cache ());
- /* Back to the top, do it again. */
+ prepare_one_comp_unit (new_reader.cu, new_reader.comp_unit_die,
+ language_minimal);
+ std::unique_ptr<cutu_reader> copy
+ (new cutu_reader (std::move (new_reader)));
+ result = m_index_storage->preserve (std::move (copy));
}
-}
-partial_die_info::partial_die_info (sect_offset sect_off_,
- const struct abbrev_info *abbrev)
- : partial_die_info (sect_off_, abbrev->tag, abbrev->has_children)
-{
-}
+ if (result->dummy_p || !result->comp_unit_die->has_children)
+ return nullptr;
-/* See class definition. */
+ if (for_scanning)
+ check_bounds (result);
-const char *
-partial_die_info::name (dwarf2_cu *cu)
-{
- if (!canonical_name && raw_name != nullptr)
- {
- struct objfile *objfile = cu->per_objfile->objfile;
- raw_name = dwarf2_canonicalize_name (raw_name, cu, objfile);
- canonical_name = 1;
- }
-
- return raw_name;
+ return result;
}
-/* Read a minimal amount of information into the minimal die structure.
- INFO_PTR should point just after the initial uleb128 of a DIE. */
-
const gdb_byte *
-partial_die_info::read (const struct die_reader_specs *reader,
- const struct abbrev_info &abbrev, const gdb_byte *info_ptr)
-{
- struct dwarf2_cu *cu = reader->cu;
- dwarf2_per_objfile *per_objfile = cu->per_objfile;
- unsigned int i;
- int has_low_pc_attr = 0;
- int has_high_pc_attr = 0;
- int high_pc_relative = 0;
-
- for (i = 0; i < abbrev.num_attrs; ++i)
+cooked_indexer::scan_attributes (dwarf2_per_cu_data *scanning_per_cu,
+ cutu_reader *reader,
+ const gdb_byte *watermark_ptr,
+ const gdb_byte *info_ptr,
+ const abbrev_info *abbrev,
+ const char **name,
+ const char **linkage_name,
+ cooked_index_flag *flags,
+ sect_offset *sibling_offset,
+ const cooked_index_entry **parent_entry,
+ CORE_ADDR *maybe_defer,
+ bool for_specification)
+{
+ bool origin_is_dwz = false;
+ bool is_declaration = false;
+ sect_offset origin_offset {};
+
+ gdb::optional<CORE_ADDR> low_pc;
+ gdb::optional<CORE_ADDR> high_pc;
+ bool high_pc_relative = false;
+
+ for (int i = 0; i < abbrev->num_attrs; ++i)
{
attribute attr;
- info_ptr = read_attribute (reader, &attr, &abbrev.attrs[i], info_ptr);
- /* String and address offsets that need to do the reprocessing have
- already been read at this point, so there is no need to wait until
- the loop terminates to do the reprocessing. */
+ info_ptr = read_attribute (reader, &attr, &abbrev->attrs[i], info_ptr);
if (attr.requires_reprocessing_p ())
- read_attribute_reprocess (reader, &attr, tag);
+ read_attribute_reprocess (reader, &attr, abbrev->tag);
+
/* Store the data if it is of an attribute we want to keep in a
partial symbol table. */
switch (attr.name)
{
case DW_AT_name:
- switch (tag)
+ switch (abbrev->tag)
{
case DW_TAG_compile_unit:
case DW_TAG_partial_unit:
case DW_TAG_type_unit:
/* Compilation units have a DW_AT_name that is a filename, not
a source language identifier. */
- case DW_TAG_enumeration_type:
- case DW_TAG_enumerator:
- /* These tags always have simple identifiers already; no need
- to canonicalize them. */
- canonical_name = 1;
- raw_name = attr.as_string ();
break;
+
default:
- canonical_name = 0;
- raw_name = attr.as_string ();
+ if (*name == nullptr)
+ *name = attr.as_string ();
break;
}
break;
+
case DW_AT_linkage_name:
case DW_AT_MIPS_linkage_name:
/* Note that both forms of linkage name might appear. We
assume they will be the same, and we only store the last
one we see. */
- linkage_name = attr.as_string ();
- break;
- case DW_AT_low_pc:
- has_low_pc_attr = 1;
- lowpc = attr.as_address ();
+ if (*linkage_name == nullptr)
+ *linkage_name = attr.as_string ();
break;
- case DW_AT_high_pc:
- has_high_pc_attr = 1;
- highpc = attr.as_address ();
- if (cu->header.version >= 4 && attr.form_is_constant ())
- high_pc_relative = 1;
- break;
- case DW_AT_location:
- /* Support the .debug_loc offsets. */
- if (attr.form_is_block ())
- {
- d.locdesc = attr.as_block ();
- }
- else if (attr.form_is_section_offset ())
- {
- dwarf2_complex_location_expr_complaint ();
- }
- else
- {
- dwarf2_invalid_attrib_class_complaint ("DW_AT_location",
- "partial symbol information");
- }
- break;
- case DW_AT_external:
- is_external = attr.as_boolean ();
+
+ case DW_AT_main_subprogram:
+ if (attr.as_boolean ())
+ *flags |= IS_MAIN;
break;
+
case DW_AT_declaration:
is_declaration = attr.as_boolean ();
break;
- case DW_AT_type:
- has_type = 1;
+
+ case DW_AT_sibling:
+ if (sibling_offset != nullptr)
+ *sibling_offset = attr.get_ref_die_offset ();
break;
- case DW_AT_abstract_origin:
+
case DW_AT_specification:
+ case DW_AT_abstract_origin:
case DW_AT_extension:
- has_specification = 1;
- spec_offset = attr.get_ref_die_offset ();
- spec_is_dwz = (attr.form == DW_FORM_GNU_ref_alt
- || cu->per_cu->is_dwz);
+ origin_offset = attr.get_ref_die_offset ();
+ origin_is_dwz = attr.form == DW_FORM_GNU_ref_alt;
break;
- case DW_AT_sibling:
- /* Ignore absolute siblings, they might point outside of
- the current compile unit. */
- if (attr.form == DW_FORM_ref_addr)
- complaint (_("ignoring absolute DW_AT_sibling"));
- else
- {
- const gdb_byte *buffer = reader->buffer;
- sect_offset off = attr.get_ref_die_offset ();
- const gdb_byte *sibling_ptr = buffer + to_underlying (off);
- if (sibling_ptr < info_ptr)
- complaint (_("DW_AT_sibling points backwards"));
- else if (sibling_ptr > reader->buffer_end)
- reader->die_section->overflow_complaint ();
- else
- sibling = sibling_ptr;
- }
- break;
- case DW_AT_byte_size:
- has_byte_size = 1;
+ case DW_AT_external:
+ if (attr.as_boolean ())
+ *flags &= ~IS_STATIC;
break;
- case DW_AT_const_value:
- has_const_value = 1;
+
+ case DW_AT_enum_class:
+ if (attr.as_boolean ())
+ *flags |= IS_ENUM_CLASS;
break;
- case DW_AT_calling_convention:
- /* DWARF doesn't provide a way to identify a program's source-level
- entry point. DW_AT_calling_convention attributes are only meant
- to describe functions' calling conventions.
-
- However, because it's a necessary piece of information in
- Fortran, and before DWARF 4 DW_CC_program was the only
- piece of debugging information whose definition refers to
- a 'main program' at all, several compilers marked Fortran
- main programs with DW_CC_program --- even when those
- functions use the standard calling conventions.
-
- Although DWARF now specifies a way to provide this
- information, we support this practice for backward
- compatibility. */
- if (attr.constant_value (0) == DW_CC_program
- && cu->per_cu->lang == language_fortran)
- main_subprogram = 1;
+
+ case DW_AT_low_pc:
+ low_pc = attr.as_address ();
break;
- case DW_AT_inline:
- {
- LONGEST value = attr.constant_value (-1);
- if (value == DW_INL_inlined
- || value == DW_INL_declared_inlined)
- may_be_inlined = 1;
- }
+
+ case DW_AT_high_pc:
+ high_pc = attr.as_address ();
+ if (reader->cu->header.version >= 4 && attr.form_is_constant ())
+ high_pc_relative = true;
break;
- case DW_AT_import:
- if (tag == DW_TAG_imported_unit)
+ case DW_AT_location:
+ if (!scanning_per_cu->addresses_seen && attr.form_is_block ())
{
- d.sect_off = attr.get_ref_die_offset ();
- is_dwz = (attr.form == DW_FORM_GNU_ref_alt
- || cu->per_cu->is_dwz);
+ struct dwarf_block *locdesc = attr.as_block ();
+ CORE_ADDR addr = decode_locdesc (locdesc, reader->cu);
+ if (addr != 0
+ || reader->cu->per_objfile->per_bfd->has_section_at_zero)
+ {
+ low_pc = addr;
+ /* For variables, we don't want to try decoding the
+ type just to find the size -- for gdb's purposes
+ we only need the address of a variable. */
+ high_pc = addr + 1;
+ high_pc_relative = false;
+ }
}
break;
- case DW_AT_main_subprogram:
- main_subprogram = attr.as_boolean ();
- break;
-
case DW_AT_ranges:
- {
- /* Offset in the .debug_ranges or .debug_rnglist section (depending
- on DWARF version). */
- ranges_offset = attr.as_unsigned ();
-
- /* See dwarf2_cu::gnu_ranges_base's doc for why we might want to add
- this value. */
- if (tag != DW_TAG_compile_unit)
- ranges_offset += cu->gnu_ranges_base;
-
- has_range_info = 1;
- }
- break;
-
- default:
+ if (!scanning_per_cu->addresses_seen)
+ {
+ /* Offset in the .debug_ranges or .debug_rnglist section
+ (depending on DWARF version). */
+ ULONGEST ranges_offset = attr.as_unsigned ();
+
+ /* See dwarf2_cu::gnu_ranges_base's doc for why we might
+ want to add this value. */
+ ranges_offset += reader->cu->gnu_ranges_base;
+
+ CORE_ADDR lowpc, highpc;
+ dwarf2_ranges_read (ranges_offset, &lowpc, &highpc, reader->cu,
+ m_index_storage->get_addrmap (),
+ scanning_per_cu, abbrev->tag);
+ }
break;
}
}
- /* For Ada, if both the name and the linkage name appear, we prefer
- the latter. This lets "catch exception" work better, regardless
- of the order in which the name and linkage name were emitted.
- Really, though, this is just a workaround for the fact that gdb
- doesn't store both the name and the linkage name. */
- if (cu->per_cu->lang == language_ada && linkage_name != nullptr)
- raw_name = linkage_name;
+ /* We don't want to examine declarations, but if we found a
+ declaration when handling DW_AT_specification or the like, then
+ that is ok. Similarly, we allow an external variable without a
+ location; those are resolved via minimal symbols. */
+ if (is_declaration && !for_specification
+ && !(abbrev->tag == DW_TAG_variable && (*flags & IS_STATIC) == 0)
+ && !((abbrev->tag == DW_TAG_class_type
+ || abbrev->tag == DW_TAG_structure_type
+ || abbrev->tag == DW_TAG_union_type)
+ && abbrev->has_children))
+ {
+ *linkage_name = nullptr;
+ *name = nullptr;
+ }
+ else if ((*name == nullptr
+ || (*linkage_name == nullptr
+ && tag_can_have_linkage_name (abbrev->tag))
+ || (*parent_entry == nullptr && m_language != language_c))
+ && origin_offset != sect_offset (0))
+ {
+ cutu_reader *new_reader
+ = ensure_cu_exists (reader, reader->cu->per_objfile, origin_offset,
+ origin_is_dwz, false);
+ if (new_reader != nullptr)
+ {
+ const gdb_byte *new_info_ptr = (new_reader->buffer
+ + to_underlying (origin_offset));
+
+ if (new_reader->cu == reader->cu
+ && new_info_ptr > watermark_ptr
+ && maybe_defer != nullptr
+ && *parent_entry == nullptr)
+ *maybe_defer = form_addr (origin_offset, origin_is_dwz);
+ else if (*parent_entry == nullptr)
+ {
+ CORE_ADDR lookup = form_addr (origin_offset, origin_is_dwz);
+ *parent_entry
+ = (cooked_index_entry *) addrmap_find (m_die_range_map,
+ lookup);
+ }
- if (high_pc_relative)
- highpc += lowpc;
+ unsigned int bytes_read;
+ const abbrev_info *new_abbrev = peek_die_abbrev (*new_reader,
+ new_info_ptr,
+ &bytes_read);
+ new_info_ptr += bytes_read;
+ scan_attributes (scanning_per_cu, new_reader, new_info_ptr, new_info_ptr,
+ new_abbrev, name, linkage_name, flags, nullptr,
+ parent_entry, maybe_defer, true);
+ }
+ }
- if (has_low_pc_attr && has_high_pc_attr)
+ if (!for_specification)
{
- /* When using the GNU linker, .gnu.linkonce. sections are used to
- eliminate duplicate copies of functions and vtables and such.
- The linker will arbitrarily choose one and discard the others.
- The AT_*_pc values for such functions refer to local labels in
- these sections. If the section from that file was discarded, the
- labels are not in the output, so the relocs get a value of 0.
- If this is a discarded function, mark the pc bounds as invalid,
- so that GDB will ignore it. */
- if (lowpc == 0 && !per_objfile->per_bfd->has_section_at_zero)
- {
- struct objfile *objfile = per_objfile->objfile;
- struct gdbarch *gdbarch = objfile->arch ();
+ if (m_language == language_ada
+ && *linkage_name == nullptr)
+ *linkage_name = *name;
- complaint (_("DW_AT_low_pc %s is zero "
- "for DIE at %s [in module %s]"),
- paddress (gdbarch, lowpc),
- sect_offset_str (sect_off),
- objfile_name (objfile));
- }
- /* dwarf2_get_pc_bounds has also the strict low < high requirement. */
- else if (lowpc >= highpc)
+ if (!scanning_per_cu->addresses_seen
+ && low_pc.has_value ()
+ && (reader->cu->per_objfile->per_bfd->has_section_at_zero
+ || *low_pc != 0)
+ && high_pc.has_value ())
{
- struct objfile *objfile = per_objfile->objfile;
- struct gdbarch *gdbarch = objfile->arch ();
+ if (high_pc_relative)
+ high_pc = *high_pc + *low_pc;
- complaint (_("DW_AT_low_pc %s is not < DW_AT_high_pc %s "
- "for DIE at %s [in module %s]"),
- paddress (gdbarch, lowpc),
- paddress (gdbarch, highpc),
- sect_offset_str (sect_off),
- objfile_name (objfile));
+ if (*high_pc > *low_pc)
+ {
+ struct objfile *objfile = reader->cu->per_objfile->objfile;
+ CORE_ADDR baseaddr = objfile->text_section_offset ();
+ struct gdbarch *gdbarch = objfile->arch ();
+ CORE_ADDR lo
+ = (gdbarch_adjust_dwarf2_addr (gdbarch, *low_pc + baseaddr)
+ - baseaddr);
+ CORE_ADDR hi
+ = (gdbarch_adjust_dwarf2_addr (gdbarch, *high_pc + baseaddr)
+ - baseaddr);
+ addrmap_set_empty (m_index_storage->get_addrmap (), lo, hi - 1,
+ scanning_per_cu);
+ }
}
- else
- has_pc_info = 1;
- }
- return info_ptr;
-}
-
-/* Find a cached partial DIE at OFFSET in CU. */
+ if (abbrev->tag == DW_TAG_module || abbrev->tag == DW_TAG_namespace)
+ *flags &= ~IS_STATIC;
-struct partial_die_info *
-dwarf2_cu::find_partial_die (sect_offset sect_off)
-{
- struct partial_die_info *lookup_die = NULL;
- struct partial_die_info part_die (sect_off);
+ if (abbrev->tag == DW_TAG_namespace && *name == nullptr)
+ *name = "(anonymous namespace)";
- lookup_die = ((struct partial_die_info *)
- htab_find_with_hash (partial_dies, &part_die,
- to_underlying (sect_off)));
+ if (m_language == language_cplus
+ && (abbrev->tag == DW_TAG_class_type
+ || abbrev->tag == DW_TAG_interface_type
+ || abbrev->tag == DW_TAG_structure_type
+ || abbrev->tag == DW_TAG_union_type
+ || abbrev->tag == DW_TAG_enumeration_type
+ || abbrev->tag == DW_TAG_enumerator))
+ *flags &= ~IS_STATIC;
+ }
- return lookup_die;
+ return info_ptr;
}
-/* Find a partial DIE at OFFSET, which may or may not be in CU,
- except in the case of .debug_types DIEs which do not reference
- outside their CU (they do however referencing other types via
- DW_FORM_ref_sig8). */
-
-static const struct cu_partial_die_info
-find_partial_die (sect_offset sect_off, int offset_in_dwz, struct dwarf2_cu *cu)
+const gdb_byte *
+cooked_indexer::index_imported_unit (cutu_reader *reader,
+ const gdb_byte *info_ptr,
+ const abbrev_info *abbrev)
{
- dwarf2_per_objfile *per_objfile = cu->per_objfile;
- struct objfile *objfile = per_objfile->objfile;
- struct partial_die_info *pd = NULL;
+ sect_offset sect_off {};
+ bool is_dwz = false;
- if (offset_in_dwz == cu->per_cu->is_dwz
- && cu->header.offset_in_cu_p (sect_off))
+ for (int i = 0; i < abbrev->num_attrs; ++i)
{
- pd = cu->find_partial_die (sect_off);
- if (pd != NULL)
- return { cu, pd };
- /* We missed recording what we needed.
- Load all dies and try again. */
- }
- else
- {
- /* TUs don't reference other CUs/TUs (except via type signatures). */
- if (cu->per_cu->is_debug_types)
+ /* Note that we never need to reprocess attributes here. */
+ attribute attr;
+ info_ptr = read_attribute (reader, &attr, &abbrev->attrs[i], info_ptr);
+
+ if (attr.name == DW_AT_import)
{
- error (_("Dwarf Error: Type Unit at offset %s contains"
- " external reference to offset %s [in module %s].\n"),
- sect_offset_str (cu->header.sect_off), sect_offset_str (sect_off),
- bfd_get_filename (objfile->obfd));
+ sect_off = attr.get_ref_die_offset ();
+ is_dwz = (attr.form == DW_FORM_GNU_ref_alt
+ || reader->cu->per_cu->is_dwz);
}
- dwarf2_per_cu_data *per_cu
- = dwarf2_find_containing_comp_unit (sect_off, offset_in_dwz,
- per_objfile->per_bfd);
+ }
- cu = per_objfile->get_cu (per_cu);
- if (cu == NULL || cu->partial_dies == NULL)
- load_partial_comp_unit (per_cu, per_objfile, nullptr);
+ /* Did not find DW_AT_import. */
+ if (sect_off == sect_offset (0))
+ return info_ptr;
- cu = per_objfile->get_cu (per_cu);
+ dwarf2_per_objfile *per_objfile = reader->cu->per_objfile;
+ cutu_reader *new_reader = ensure_cu_exists (reader, per_objfile, sect_off,
+ is_dwz, true);
+ if (new_reader != nullptr)
+ {
+ index_dies (new_reader, new_reader->info_ptr, nullptr, false);
- cu->last_used = 0;
- pd = cu->find_partial_die (sect_off);
+ reader->cu->add_dependence (new_reader->cu->per_cu);
}
- /* If we didn't find it, and not all dies have been loaded,
- load them all and try again. */
-
- if (pd == NULL && cu->load_all_dies == 0)
- {
- cu->load_all_dies = 1;
+ return info_ptr;
+}
- /* This is nasty. When we reread the DIEs, somewhere up the call chain
- THIS_CU->cu may already be in use. So we can't just free it and
- replace its DIEs with the ones we read in. Instead, we leave those
- DIEs alone (which can still be in use, e.g. in scan_partial_symbols),
- and clobber THIS_CU->cu->partial_dies with the hash table for the new
- set. */
- load_partial_comp_unit (cu->per_cu, per_objfile, cu);
+const gdb_byte *
+cooked_indexer::recurse (cutu_reader *reader,
+ const gdb_byte *info_ptr,
+ const cooked_index_entry *parent_entry,
+ bool fully)
+{
+ info_ptr = index_dies (reader, info_ptr, parent_entry, fully);
- pd = cu->find_partial_die (sect_off);
+ if (parent_entry != nullptr)
+ {
+ CORE_ADDR start = form_addr (parent_entry->die_offset,
+ reader->cu->per_cu->is_dwz);
+ CORE_ADDR end = form_addr (sect_offset (info_ptr - 1 - reader->buffer),
+ reader->cu->per_cu->is_dwz);
+ addrmap_set_empty (m_die_range_map, start, end, (void *) parent_entry);
}
- if (pd == NULL)
- error (_("Dwarf Error: Cannot find DIE at %s [from module %s]\n"),
- sect_offset_str (sect_off), bfd_get_filename (objfile->obfd));
- return { cu, pd };
+ return info_ptr;
}
-/* See if we can figure out if the class lives in a namespace. We do
- this by looking for a member function; its demangled name will
- contain namespace info, if there is any. */
-
-static void
-guess_partial_die_structure_name (struct partial_die_info *struct_pdi,
- struct dwarf2_cu *cu)
+const gdb_byte *
+cooked_indexer::index_dies (cutu_reader *reader,
+ const gdb_byte *info_ptr,
+ const cooked_index_entry *parent_entry,
+ bool fully)
{
- /* NOTE: carlton/2003-10-07: Getting the info this way changes
- what template types look like, because the demangler
- frequently doesn't give the same name as the debug info. We
- could fix this by only using the demangled name to get the
- prefix (but see comment in read_structure_type). */
+ const gdb_byte *end_ptr = info_ptr + reader->cu->header.get_length ();
+
+ while (info_ptr < end_ptr)
+ {
+ sect_offset this_die = (sect_offset) (info_ptr - reader->buffer);
+ unsigned int bytes_read;
+ const abbrev_info *abbrev = peek_die_abbrev (*reader, info_ptr,
+ &bytes_read);
+ info_ptr += bytes_read;
+ if (abbrev == nullptr)
+ break;
- struct partial_die_info *real_pdi;
- struct partial_die_info *child_pdi;
+ if (abbrev->tag == DW_TAG_imported_unit)
+ {
+ info_ptr = index_imported_unit (reader, info_ptr, abbrev);
+ continue;
+ }
- /* If this DIE (this DIE's specification, if any) has a parent, then
- we should not do this. We'll prepend the parent's fully qualified
- name when we create the partial symbol. */
+ if (!abbrev->interesting)
+ {
+ info_ptr = skip_one_die (reader, info_ptr, abbrev, !fully);
+ if (fully && abbrev->has_children)
+ info_ptr = index_dies (reader, info_ptr, parent_entry, fully);
+ continue;
+ }
- real_pdi = struct_pdi;
- while (real_pdi->has_specification)
- {
- auto res = find_partial_die (real_pdi->spec_offset,
- real_pdi->spec_is_dwz, cu);
- real_pdi = res.pdi;
- cu = res.cu;
- }
+ const char *name = nullptr;
+ const char *linkage_name = nullptr;
+ CORE_ADDR defer = 0;
+ cooked_index_flag flags = IS_STATIC;
+ sect_offset sibling {};
+ const cooked_index_entry *this_parent_entry = parent_entry;
+ info_ptr = scan_attributes (reader->cu->per_cu, reader, info_ptr,
+ info_ptr, abbrev, &name, &linkage_name,
+ &flags, &sibling, &this_parent_entry,
+ &defer, false);
- if (real_pdi->die_parent != NULL)
- return;
+ if (abbrev->tag == DW_TAG_namespace
+ && m_language == language_cplus
+ && strcmp (name, "::") == 0)
+ {
+ /* GCC 4.0 and 4.1 had a bug (PR c++/28460) where they
+ generated bogus DW_TAG_namespace DIEs with a name of "::"
+ for the global namespace. Work around this problem
+ here. */
+ name = nullptr;
+ }
- for (child_pdi = struct_pdi->die_child;
- child_pdi != NULL;
- child_pdi = child_pdi->die_sibling)
- {
- if (child_pdi->tag == DW_TAG_subprogram
- && child_pdi->linkage_name != NULL)
+ const cooked_index_entry *this_entry = nullptr;
+ if (name != nullptr)
+ {
+ if (defer != 0)
+ m_deferred_entries.push_back ({
+ this_die, name, defer, abbrev->tag, flags
+ });
+ else
+ this_entry = m_index_storage->add (this_die, abbrev->tag, flags,
+ name, this_parent_entry,
+ m_per_cu);
+ }
+
+ if (linkage_name != nullptr)
+ {
+ /* We only want this to be "main" if it has a linkage name
+ but not an ordinary name. */
+ if (name != nullptr)
+ flags = flags & ~IS_MAIN;
+ m_index_storage->add (this_die, abbrev->tag, flags | IS_LINKAGE,
+ linkage_name, nullptr, m_per_cu);
+ }
+
+ if (abbrev->has_children)
{
- gdb::unique_xmalloc_ptr<char> actual_class_name
- (cu->language_defn->class_name_from_physname
- (child_pdi->linkage_name));
- if (actual_class_name != NULL)
+ switch (abbrev->tag)
{
- struct objfile *objfile = cu->per_objfile->objfile;
- struct_pdi->raw_name = objfile->intern (actual_class_name.get ());
- struct_pdi->canonical_name = 1;
+ case DW_TAG_class_type:
+ case DW_TAG_interface_type:
+ case DW_TAG_structure_type:
+ case DW_TAG_union_type:
+ if (m_language != language_c && this_entry != nullptr)
+ {
+ info_ptr = recurse (reader, info_ptr, this_entry, fully);
+ continue;
+ }
+ break;
+
+ case DW_TAG_enumeration_type:
+ /* We need to recurse even for an anonymous enumeration.
+ Which scope we record as the parent scope depends on
+ whether we're reading an "enum class". If so, we use
+ the enum itself as the parent, yielding names like
+ "enum_class::enumerator"; otherwise we inject the
+ names into our own parent scope. */
+ info_ptr = recurse (reader, info_ptr,
+ ((flags & IS_ENUM_CLASS) == 0)
+ ? parent_entry
+ : this_entry,
+ fully);
+ continue;
+
+ case DW_TAG_module:
+ if (this_entry == nullptr)
+ break;
+ /* FALLTHROUGH */
+ case DW_TAG_namespace:
+ /* We don't check THIS_ENTRY for a namespace, to handle
+ the ancient G++ workaround pointed out above. */
+ info_ptr = recurse (reader, info_ptr, this_entry, fully);
+ continue;
+
+ case DW_TAG_subprogram:
+ if ((m_language == language_fortran
+ || m_language == language_ada)
+ && this_entry != nullptr)
+ {
+ info_ptr = recurse (reader, info_ptr, this_entry, true);
+ continue;
+ }
+ break;
}
- break;
+
+ if (sibling != sect_offset (0))
+ {
+ const gdb_byte *sibling_ptr
+ = reader->buffer + to_underlying (sibling);
+
+ if (sibling_ptr < info_ptr)
+ complaint (_("DW_AT_sibling points backwards"));
+ else if (sibling_ptr > reader->buffer_end)
+ reader->die_section->overflow_complaint ();
+ else
+ info_ptr = sibling_ptr;
+ }
+ else
+ info_ptr = skip_children (reader, info_ptr);
}
}
-}
-/* Return true if a DIE with TAG may have the DW_AT_const_value
- attribute. */
+ return info_ptr;
+}
-static bool
-can_have_DW_AT_const_value_p (enum dwarf_tag tag)
+void
+cooked_indexer::make_index (cutu_reader *reader)
{
- switch (tag)
+ check_bounds (reader);
+ find_file_and_directory (reader->comp_unit_die, reader->cu);
+ if (!reader->comp_unit_die->has_children)
+ return;
+ index_dies (reader, reader->info_ptr, nullptr, false);
+
+ for (const auto &entry : m_deferred_entries)
{
- case DW_TAG_constant:
- case DW_TAG_enumerator:
- case DW_TAG_formal_parameter:
- case DW_TAG_template_value_param:
- case DW_TAG_variable:
- return true;
+ CORE_ADDR key = form_addr (entry.die_offset, m_per_cu->is_dwz);
+ cooked_index_entry *parent
+ = (cooked_index_entry *) addrmap_find (m_die_range_map, key);
+ m_index_storage->add (entry.die_offset, entry.tag, entry.flags,
+ entry.name, parent, m_per_cu);
}
+}
- return false;
+/* An implementation of quick_symbol_functions for the cooked DWARF
+ index. */
+
+struct cooked_index_functions : public dwarf2_base_index_functions
+{
+ struct compunit_symtab *find_pc_sect_compunit_symtab
+ (struct objfile *objfile, struct bound_minimal_symbol msymbol,
+ CORE_ADDR pc, struct obj_section *section, int warn_if_readin) override;
+
+ struct compunit_symtab *find_compunit_symtab_by_address
+ (struct objfile *objfile, CORE_ADDR address) override;
+
+ void dump (struct objfile *objfile) override
+ {
+ gdb_printf ("Cooked index in use\n");
+ }
+
+ void expand_matching_symbols
+ (struct objfile *,
+ const lookup_name_info &lookup_name,
+ domain_enum domain,
+ int global,
+ symbol_compare_ftype *ordered_compare) override;
+
+ bool expand_symtabs_matching
+ (struct objfile *objfile,
+ gdb::function_view<expand_symtabs_file_matcher_ftype> file_matcher,
+ const lookup_name_info *lookup_name,
+ gdb::function_view<expand_symtabs_symbol_matcher_ftype> symbol_matcher,
+ gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify,
+ block_search_flags search_flags,
+ domain_enum domain,
+ enum search_domain kind) override;
+
+ bool can_lazily_read_symbols () override
+ {
+ return true;
+ }
+
+ void read_partial_symbols (struct objfile *objfile) override
+ {
+ if (dwarf2_has_info (objfile, nullptr))
+ dwarf2_build_psymtabs (objfile);
+ }
+};
+
+struct compunit_symtab *
+cooked_index_functions::find_pc_sect_compunit_symtab
+ (struct objfile *objfile,
+ struct bound_minimal_symbol msymbol,
+ CORE_ADDR pc,
+ struct obj_section *section,
+ int warn_if_readin)
+{
+ dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile);
+ if (per_objfile->per_bfd->index_table == nullptr)
+ return nullptr;
+
+ CORE_ADDR baseaddr = objfile->text_section_offset ();
+ cooked_index_vector *table
+ = (static_cast<cooked_index_vector *>
+ (per_objfile->per_bfd->index_table.get ()));
+ dwarf2_per_cu_data *per_cu = table->lookup (pc - baseaddr);
+ if (per_cu == nullptr)
+ return nullptr;
+
+ if (warn_if_readin && per_objfile->symtab_set_p (per_cu))
+ warning (_("(Internal error: pc %s in read in CU, but not in symtab.)"),
+ paddress (objfile->arch (), pc));
+
+ compunit_symtab *result = (recursively_find_pc_sect_compunit_symtab
+ (dw2_instantiate_symtab (per_cu, per_objfile,
+ false),
+ pc));
+ gdb_assert (result != nullptr);
+ return result;
+}
+
+struct compunit_symtab *
+cooked_index_functions::find_compunit_symtab_by_address
+ (struct objfile *objfile, CORE_ADDR address)
+{
+ if (objfile->sect_index_data == -1)
+ return nullptr;
+
+ dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile);
+ if (per_objfile->per_bfd->index_table == nullptr)
+ return nullptr;
+
+ CORE_ADDR baseaddr = objfile->data_section_offset ();
+ cooked_index_vector *table
+ = (static_cast<cooked_index_vector *>
+ (per_objfile->per_bfd->index_table.get ()));
+ dwarf2_per_cu_data *per_cu = table->lookup (address - baseaddr);
+ if (per_cu == nullptr)
+ return nullptr;
+
+ return dw2_instantiate_symtab (per_cu, per_objfile, false);
}
void
-partial_die_info::fixup (struct dwarf2_cu *cu)
+cooked_index_functions::expand_matching_symbols
+ (struct objfile *objfile,
+ const lookup_name_info &lookup_name,
+ domain_enum domain,
+ int global,
+ symbol_compare_ftype *ordered_compare)
{
- /* Once we've fixed up a die, there's no point in doing so again.
- This also avoids a memory leak if we were to call
- guess_partial_die_structure_name multiple times. */
- if (fixup_called)
+ dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile);
+ if (per_objfile->per_bfd->index_table == nullptr)
return;
+ const block_search_flags search_flags = (global
+ ? SEARCH_GLOBAL_BLOCK
+ : SEARCH_STATIC_BLOCK);
+ const language_defn *lang = language_def (language_ada);
+ symbol_name_matcher_ftype *name_match
+ = lang->get_symbol_name_matcher (lookup_name);
+
+ cooked_index_vector *table
+ = (static_cast<cooked_index_vector *>
+ (per_objfile->per_bfd->index_table.get ()));
+ for (const cooked_index_entry *entry : table->all_entries ())
+ {
+ if (entry->parent_entry != nullptr)
+ continue;
- /* If we found a reference attribute and the DIE has no name, try
- to find a name in the referred to DIE. */
+ if (!entry->matches (search_flags)
+ || !entry->matches (domain))
+ continue;
- if (raw_name == NULL && has_specification)
- {
- struct partial_die_info *spec_die;
+ if (name_match (entry->canonical, lookup_name, nullptr))
+ dw2_instantiate_symtab (entry->per_cu, per_objfile, false);
+ }
+}
- auto res = find_partial_die (spec_offset, spec_is_dwz, cu);
- spec_die = res.pdi;
- cu = res.cu;
+bool
+cooked_index_functions::expand_symtabs_matching
+ (struct objfile *objfile,
+ gdb::function_view<expand_symtabs_file_matcher_ftype> file_matcher,
+ const lookup_name_info *lookup_name,
+ gdb::function_view<expand_symtabs_symbol_matcher_ftype> symbol_matcher,
+ gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify,
+ block_search_flags search_flags,
+ domain_enum domain,
+ enum search_domain kind)
+{
+ dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile);
+ if (per_objfile->per_bfd->index_table == nullptr)
+ return true;
- spec_die->fixup (cu);
+ dw_expand_symtabs_matching_file_matcher (per_objfile, file_matcher);
- if (spec_die->raw_name)
+ /* This invariant is documented in quick-functions.h. */
+ gdb_assert (lookup_name != nullptr || symbol_matcher == nullptr);
+ if (lookup_name == nullptr)
+ {
+ for (dwarf2_per_cu_data *per_cu
+ : all_comp_units_range (per_objfile->per_bfd))
{
- raw_name = spec_die->raw_name;
- canonical_name = spec_die->canonical_name;
+ QUIT;
- /* Copy DW_AT_external attribute if it is set. */
- if (spec_die->is_external)
- is_external = spec_die->is_external;
+ if (!dw2_expand_symtabs_matching_one (per_cu, per_objfile,
+ file_matcher,
+ expansion_notify))
+ return false;
}
+ return true;
}
- if (!has_const_value && has_specification
- && can_have_DW_AT_const_value_p (tag))
- {
- struct partial_die_info *spec_die;
+ lookup_name_info lookup_name_without_params
+ = lookup_name->make_ignore_params ();
+ bool completing = lookup_name->completion_mode ();
- auto res = find_partial_die (spec_offset, spec_is_dwz, cu);
- spec_die = res.pdi;
- cu = res.cu;
+ /* Unique styles of language splitting. */
+ static const enum language unique_styles[] =
+ {
+ /* No splitting is also a style. */
+ language_c,
+ /* This includes Rust. */
+ language_cplus,
+ /* This includes Go. */
+ language_d,
+ language_ada
+ };
- spec_die->fixup (cu);
+ cooked_index_vector *table
+ = (static_cast<cooked_index_vector *>
+ (per_objfile->per_bfd->index_table.get ()));
+ for (enum language lang : unique_styles)
+ {
+ std::vector<gdb::string_view> name_vec
+ = lookup_name_without_params.split_name (lang);
- if (spec_die->has_const_value)
+ for (const cooked_index_entry *entry : table->find (name_vec.back (),
+ completing))
{
- /* Copy DW_AT_const_value attribute if it is set. */
- has_const_value = spec_die->has_const_value;
- }
- }
+ /* No need to consider symbols from expanded CUs. */
+ if (per_objfile->symtab_set_p (entry->per_cu))
+ continue;
- /* Set default names for some unnamed DIEs. */
+ /* If file-matching was done, we don't need to consider
+ symbols from unmarked CUs. */
+ if (file_matcher != nullptr && !entry->per_cu->mark)
+ continue;
- if (raw_name == NULL && tag == DW_TAG_namespace)
- {
- raw_name = CP_ANONYMOUS_NAMESPACE_STR;
- canonical_name = 1;
- }
+ /* See if the symbol matches the type filter. */
+ if (!entry->matches (search_flags)
+ || !entry->matches (domain)
+ || !entry->matches (kind))
+ continue;
- /* If there is no parent die to provide a namespace, and there are
- children, see if we can determine the namespace from their linkage
- name. */
- if (cu->per_cu->lang == language_cplus
- && !cu->per_objfile->per_bfd->types.empty ()
- && die_parent == NULL
- && has_children
- && (tag == DW_TAG_class_type
- || tag == DW_TAG_structure_type
- || tag == DW_TAG_union_type))
- guess_partial_die_structure_name (this, cu);
-
- /* GCC might emit a nameless struct or union that has a linkage
- name. See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47510. */
- if (raw_name == NULL
- && (tag == DW_TAG_class_type
- || tag == DW_TAG_interface_type
- || tag == DW_TAG_structure_type
- || tag == DW_TAG_union_type)
- && linkage_name != NULL)
- {
- gdb::unique_xmalloc_ptr<char> demangled
- (gdb_demangle (linkage_name, DMGL_TYPES));
- if (demangled != nullptr)
- {
- const char *base;
-
- /* Strip any leading namespaces/classes, keep only the base name.
- DW_AT_name for named DIEs does not contain the prefixes. */
- base = strrchr (demangled.get (), ':');
- if (base && base > demangled.get () && base[-1] == ':')
- base++;
+ /* We've found the base name of the symbol; now walk its
+ parentage chain, ensuring that each component
+ matches. */
+ bool found = true;
+
+ const cooked_index_entry *parent = entry->parent_entry;
+ for (int i = name_vec.size () - 1; i > 0; --i)
+ {
+ /* If we ran out of entries, or if this segment doesn't
+ match, this did not match. */
+ if (parent == nullptr
+ || strncmp (parent->name, name_vec[i - 1].data (),
+ name_vec[i - 1].length ()) != 0)
+ {
+ found = false;
+ break;
+ }
+
+ parent = parent->parent_entry;
+ }
+
+ if (!found)
+ continue;
+
+ /* Might have been looking for "a::b" and found
+ "x::a::b". */
+ if (symbol_matcher == nullptr)
+ {
+ symbol_name_match_type match_type
+ = lookup_name_without_params.match_type ();
+ if ((match_type == symbol_name_match_type::FULL
+ || (lang != language_ada
+ && match_type == symbol_name_match_type::EXPRESSION))
+ && parent != nullptr)
+ continue;
+ }
else
- base = demangled.get ();
+ {
+ auto_obstack temp_storage;
+ const char *full_name = entry->full_name (&temp_storage);
+ if (!symbol_matcher (full_name))
+ continue;
+ }
- struct objfile *objfile = cu->per_objfile->objfile;
- raw_name = objfile->intern (base);
- canonical_name = 1;
+ if (!dw2_expand_symtabs_matching_one (entry->per_cu, per_objfile,
+ file_matcher,
+ expansion_notify))
+ return false;
}
}
- fixup_called = 1;
+ return true;
}
+/* Return a new cooked_index_functions object. */
+
+static quick_symbol_functions_up
+make_cooked_index_funcs ()
+{
+ return quick_symbol_functions_up (new cooked_index_functions);
+}
+
+quick_symbol_functions_up
+cooked_index_vector::make_quick_functions () const
+{
+ return make_cooked_index_funcs ();
+}
+
+
+
/* Read the .debug_loclists or .debug_rnglists header (they are the same format)
contents from the given SECTION in the HEADER.
@@ -20722,14 +19694,14 @@ dwarf_decode_line_header (sect_offset sect_off, struct dwarf2_cu *cu)
static const char *
compute_include_file_name (const struct line_header *lh, const file_entry &fe,
const file_and_directory &cu_info,
- gdb::unique_xmalloc_ptr<char> *name_holder)
+ std::string &name_holder)
{
const char *include_name = fe.name;
const char *include_name_to_compare = include_name;
const char *dir_name = fe.include_dir (lh);
- gdb::unique_xmalloc_ptr<char> hold_compare;
+ std::string hold_compare;
if (!IS_ABSOLUTE_PATH (include_name)
&& (dir_name != nullptr || cu_info.get_comp_dir () != nullptr))
{
@@ -20756,27 +19728,24 @@ compute_include_file_name (const struct line_header *lh, const file_entry &fe,
if (dir_name != NULL)
{
- name_holder->reset (concat (dir_name, SLASH_STRING,
- include_name, (char *) NULL));
- include_name = name_holder->get ();
+ name_holder = path_join (dir_name, include_name);
+ include_name = name_holder.c_str ();
include_name_to_compare = include_name;
}
if (!IS_ABSOLUTE_PATH (include_name)
&& cu_info.get_comp_dir () != nullptr)
{
- hold_compare.reset (concat (cu_info.get_comp_dir (), SLASH_STRING,
- include_name, (char *) NULL));
- include_name_to_compare = hold_compare.get ();
+ hold_compare = path_join (cu_info.get_comp_dir (), include_name);
+ include_name_to_compare = hold_compare.c_str ();
}
}
- gdb::unique_xmalloc_ptr<char> copied_name;
+ std::string copied_name;
const char *cu_filename = cu_info.get_name ();
if (!IS_ABSOLUTE_PATH (cu_filename) && cu_info.get_comp_dir () != nullptr)
{
- copied_name.reset (concat (cu_info.get_comp_dir (), SLASH_STRING,
- cu_filename, (char *) NULL));
- cu_filename = copied_name.get ();
+ copied_name = path_join (cu_info.get_comp_dir (), cu_filename);
+ cu_filename = copied_name.c_str ();
}
if (FILENAME_CMP (include_name_to_compare, cu_filename) == 0)
@@ -20791,8 +19760,7 @@ class lnp_state_machine
public:
/* Initialize a machine state for the start of a line number
program. */
- lnp_state_machine (struct dwarf2_cu *cu, gdbarch *arch, line_header *lh,
- bool record_lines_p);
+ lnp_state_machine (struct dwarf2_cu *cu, gdbarch *arch, line_header *lh);
file_entry *current_file ()
{
@@ -20843,7 +19811,7 @@ public:
/* Handle DW_LNS_negate_stmt. */
void handle_negate_stmt ()
{
- m_is_stmt = !m_is_stmt;
+ m_flags ^= LEF_IS_STMT;
}
/* Handle DW_LNS_const_add_pc. */
@@ -20861,6 +19829,7 @@ public:
{
record_line (false);
m_discriminator = 0;
+ m_flags &= ~LEF_PROLOGUE_END;
}
/* Handle DW_LNE_end_sequence. */
@@ -20869,6 +19838,12 @@ public:
m_currently_recording_lines = true;
}
+ /* Handle DW_LNS_set_prologue_end. */
+ void handle_set_prologue_end ()
+ {
+ m_flags |= LEF_PROLOGUE_END;
+ }
+
private:
/* Advance the line by LINE_DELTA. */
void advance_line (int line_delta)
@@ -20883,11 +19858,6 @@ private:
gdbarch *m_gdbarch;
- /* True if we're recording lines.
- Otherwise we're building partial symtabs and are just interested in
- finding include files mentioned by the line number program. */
- bool m_record_lines_p;
-
/* The line number header. */
line_header *m_line_header;
@@ -20902,7 +19872,7 @@ private:
/* These are initialized in the constructor. */
CORE_ADDR m_address;
- bool m_is_stmt;
+ linetable_entry_flags m_flags;
unsigned int m_discriminator;
/* Additional bits of state we need to track. */
@@ -20917,9 +19887,9 @@ private:
CORE_ADDR m_last_address;
/* Set to true when a previous line at the same address (using
- m_last_address) had m_is_stmt true. This is reset to false when a
- line entry at a new address (m_address different to m_last_address) is
- processed. */
+ m_last_address) had LEF_IS_STMT set in m_flags. This is reset to false
+ when a line entry at a new address (m_address different to
+ m_last_address) is processed. */
bool m_stmt_at_address = false;
/* When true, record the lines we decode. */
@@ -20960,6 +19930,7 @@ lnp_state_machine::handle_special_opcode (unsigned char op_code)
advance_line (line_delta);
record_line (false);
m_discriminator = 0;
+ m_flags &= ~LEF_PROLOGUE_END;
}
void
@@ -20970,7 +19941,7 @@ lnp_state_machine::handle_set_file (file_name_index file)
const file_entry *fe = current_file ();
if (fe == NULL)
dwarf2_debug_line_missing_file_complaint ();
- else if (m_record_lines_p)
+ else
{
const char *dir = fe->include_dir (m_line_header);
@@ -21049,21 +20020,22 @@ dwarf_record_line_p (struct dwarf2_cu *cu,
static void
dwarf_record_line_1 (struct gdbarch *gdbarch, struct subfile *subfile,
- unsigned int line, CORE_ADDR address, bool is_stmt,
+ unsigned int line, CORE_ADDR address,
+ linetable_entry_flags flags,
struct dwarf2_cu *cu)
{
CORE_ADDR addr = gdbarch_addr_bits_remove (gdbarch, address);
if (dwarf_line_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "Recording line %u, file %s, address %s\n",
- line, lbasename (subfile->name),
- paddress (gdbarch, address));
+ gdb_printf (gdb_stdlog,
+ "Recording line %u, file %s, address %s\n",
+ line, lbasename (subfile->name.c_str ()),
+ paddress (gdbarch, address));
}
if (cu != nullptr)
- cu->get_builder ()->record_line (subfile, line, addr, is_stmt);
+ cu->get_builder ()->record_line (subfile, line, addr, flags);
}
/* Subroutine of dwarf_decode_lines_1 to simplify it.
@@ -21080,13 +20052,13 @@ dwarf_finish_line (struct gdbarch *gdbarch, struct subfile *subfile,
if (dwarf_line_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "Finishing current line, file %s, address %s\n",
- lbasename (subfile->name),
- paddress (gdbarch, address));
+ gdb_printf (gdb_stdlog,
+ "Finishing current line, file %s, address %s\n",
+ lbasename (subfile->name.c_str ()),
+ paddress (gdbarch, address));
}
- dwarf_record_line_1 (gdbarch, subfile, 0, address, true, cu);
+ dwarf_record_line_1 (gdbarch, subfile, 0, address, LEF_IS_STMT, cu);
}
void
@@ -21094,13 +20066,15 @@ lnp_state_machine::record_line (bool end_sequence)
{
if (dwarf_line_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "Processing actual line %u: file %u,"
- " address %s, is_stmt %u, discrim %u%s\n",
- m_line, m_file,
- paddress (m_gdbarch, m_address),
- m_is_stmt, m_discriminator,
- (end_sequence ? "\t(end sequence)" : ""));
+ gdb_printf (gdb_stdlog,
+ "Processing actual line %u: file %u,"
+ " address %s, is_stmt %u, prologue_end %u, discrim %u%s\n",
+ m_line, m_file,
+ paddress (m_gdbarch, m_address),
+ (m_flags & LEF_IS_STMT) != 0,
+ (m_flags & LEF_PROLOGUE_END) != 0,
+ m_discriminator,
+ (end_sequence ? "\t(end sequence)" : ""));
}
file_entry *fe = current_file ();
@@ -21112,73 +20086,71 @@ lnp_state_machine::record_line (bool end_sequence)
previous version of the code. */
else if (m_op_index == 0 || end_sequence)
{
- fe->included_p = true;
- if (m_record_lines_p)
- {
- /* When we switch files we insert an end maker in the first file,
- switch to the second file and add a new line entry. The
- problem is that the end marker inserted in the first file will
- discard any previous line entries at the same address. If the
- line entries in the first file are marked as is-stmt, while
- the new line in the second file is non-stmt, then this means
- the end marker will discard is-stmt lines so we can have a
- non-stmt line. This means that there are less addresses at
- which the user can insert a breakpoint.
-
- To improve this we track the last address in m_last_address,
- and whether we have seen an is-stmt at this address. Then
- when switching files, if we have seen a stmt at the current
- address, and we are switching to create a non-stmt line, then
- discard the new line. */
- bool file_changed
- = m_last_subfile != m_cu->get_builder ()->get_current_subfile ();
- bool ignore_this_line
- = ((file_changed && !end_sequence && m_last_address == m_address
- && !m_is_stmt && m_stmt_at_address)
- || (!end_sequence && m_line == 0));
-
- if ((file_changed && !ignore_this_line) || end_sequence)
+ /* When we switch files we insert an end maker in the first file,
+ switch to the second file and add a new line entry. The
+ problem is that the end marker inserted in the first file will
+ discard any previous line entries at the same address. If the
+ line entries in the first file are marked as is-stmt, while
+ the new line in the second file is non-stmt, then this means
+ the end marker will discard is-stmt lines so we can have a
+ non-stmt line. This means that there are less addresses at
+ which the user can insert a breakpoint.
+
+ To improve this we track the last address in m_last_address,
+ and whether we have seen an is-stmt at this address. Then
+ when switching files, if we have seen a stmt at the current
+ address, and we are switching to create a non-stmt line, then
+ discard the new line. */
+ bool file_changed
+ = m_last_subfile != m_cu->get_builder ()->get_current_subfile ();
+ bool ignore_this_line
+ = ((file_changed && !end_sequence && m_last_address == m_address
+ && ((m_flags & LEF_IS_STMT) == 0)
+ && m_stmt_at_address)
+ || (!end_sequence && m_line == 0));
+
+ if ((file_changed && !ignore_this_line) || end_sequence)
+ {
+ dwarf_finish_line (m_gdbarch, m_last_subfile, m_address,
+ m_currently_recording_lines ? m_cu : nullptr);
+ }
+
+ if (!end_sequence && !ignore_this_line)
+ {
+ linetable_entry_flags lte_flags = m_flags;
+ if (producer_is_codewarrior (m_cu))
+ lte_flags |= LEF_IS_STMT;
+
+ if (dwarf_record_line_p (m_cu, m_line, m_last_line,
+ m_line_has_non_zero_discriminator,
+ m_last_subfile))
{
- dwarf_finish_line (m_gdbarch, m_last_subfile, m_address,
- m_currently_recording_lines ? m_cu : nullptr);
- }
-
- if (!end_sequence && !ignore_this_line)
- {
- bool is_stmt = producer_is_codewarrior (m_cu) || m_is_stmt;
-
- if (dwarf_record_line_p (m_cu, m_line, m_last_line,
- m_line_has_non_zero_discriminator,
- m_last_subfile))
- {
- buildsym_compunit *builder = m_cu->get_builder ();
- dwarf_record_line_1 (m_gdbarch,
- builder->get_current_subfile (),
- m_line, m_address, is_stmt,
- m_currently_recording_lines ? m_cu : nullptr);
- }
- m_last_subfile = m_cu->get_builder ()->get_current_subfile ();
- m_last_line = m_line;
+ buildsym_compunit *builder = m_cu->get_builder ();
+ dwarf_record_line_1 (m_gdbarch,
+ builder->get_current_subfile (),
+ m_line, m_address, lte_flags,
+ m_currently_recording_lines ? m_cu : nullptr);
}
+ m_last_subfile = m_cu->get_builder ()->get_current_subfile ();
+ m_last_line = m_line;
}
}
- /* Track whether we have seen any m_is_stmt true at m_address in case we
+ /* Track whether we have seen any IS_STMT true at m_address in case we
have multiple line table entries all at m_address. */
if (m_last_address != m_address)
{
m_stmt_at_address = false;
m_last_address = m_address;
}
- m_stmt_at_address |= m_is_stmt;
+ m_stmt_at_address |= (m_flags & LEF_IS_STMT) != 0;
}
lnp_state_machine::lnp_state_machine (struct dwarf2_cu *cu, gdbarch *arch,
- line_header *lh, bool record_lines_p)
+ line_header *lh)
{
m_cu = cu;
m_gdbarch = arch;
- m_record_lines_p = record_lines_p;
m_line_header = lh;
m_currently_recording_lines = true;
@@ -21188,7 +20160,9 @@ lnp_state_machine::lnp_state_machine (struct dwarf2_cu *cu, gdbarch *arch,
and also record it in case it needs it. This is currently used by MIPS
code, cf. `mips_adjust_dwarf2_line'. */
m_address = gdbarch_adjust_dwarf2_line (arch, 0, 0);
- m_is_stmt = lh->default_is_stmt;
+ m_flags = 0;
+ if (lh->default_is_stmt)
+ m_flags |= LEF_IS_STMT;
m_discriminator = 0;
m_last_address = m_address;
@@ -21223,13 +20197,11 @@ lnp_state_machine::check_line_address (struct dwarf2_cu *cu,
}
/* Subroutine of dwarf_decode_lines to simplify it.
- Process the line number information in LH.
- If DECODE_FOR_PST_P is non-zero, all we do is process the line number
- program in order to set included_p for every referenced header. */
+ Process the line number information in LH. */
static void
dwarf_decode_lines_1 (struct line_header *lh, struct dwarf2_cu *cu,
- const int decode_for_pst_p, CORE_ADDR lowpc)
+ CORE_ADDR lowpc)
{
const gdb_byte *line_ptr, *extended_end;
const gdb_byte *line_end;
@@ -21239,10 +20211,6 @@ dwarf_decode_lines_1 (struct line_header *lh, struct dwarf2_cu *cu,
struct objfile *objfile = cu->per_objfile->objfile;
bfd *abfd = objfile->obfd;
struct gdbarch *gdbarch = objfile->arch ();
- /* True if we're recording line info (as opposed to building partial
- symtabs and just interested in finding include files mentioned by
- the line number program). */
- bool record_lines_p = !decode_for_pst_p;
baseaddr = objfile->text_section_offset ();
@@ -21254,18 +20222,15 @@ dwarf_decode_lines_1 (struct line_header *lh, struct dwarf2_cu *cu,
{
/* The DWARF line number program state machine. Reset the state
machine at the start of each sequence. */
- lnp_state_machine state_machine (cu, gdbarch, lh, record_lines_p);
+ lnp_state_machine state_machine (cu, gdbarch, lh);
bool end_sequence = false;
- if (record_lines_p)
- {
- /* Start a subfile for the current file of the state
- machine. */
- const file_entry *fe = state_machine.current_file ();
+ /* Start a subfile for the current file of the state
+ machine. */
+ const file_entry *fe = state_machine.current_file ();
- if (fe != NULL)
- dwarf2_start_subfile (cu, fe->name, fe->include_dir (lh));
- }
+ if (fe != NULL)
+ dwarf2_start_subfile (cu, fe->name, fe->include_dir (lh));
/* Decode the table. */
while (line_ptr < line_end && !end_sequence)
@@ -21416,6 +20381,9 @@ dwarf_decode_lines_1 (struct line_header *lh, struct dwarf2_cu *cu,
state_machine.handle_fixed_advance_pc (addr_adj);
}
break;
+ case DW_LNS_set_prologue_end:
+ state_machine.handle_set_prologue_end ();
+ break;
default:
{
/* Unknown standard opcode, ignore it. */
@@ -21443,13 +20411,6 @@ dwarf_decode_lines_1 (struct line_header *lh, struct dwarf2_cu *cu,
structure and CU. The actual information extracted and the type
of structures created from the LNP depends on the value of PST.
- 1. If PST is NULL, then this procedure uses the data from the program
- to create all necessary symbol tables, and their linetables.
-
- 2. If PST is not NULL, this procedure reads the program to determine
- the list of files included by the unit represented by PST, and
- builds all the associated partial symbol tables.
-
FND holds the CU file name and directory, if known.
It is used for relative paths in the line table.
@@ -21467,52 +20428,28 @@ dwarf_decode_lines_1 (struct line_header *lh, struct dwarf2_cu *cu,
table is read in. */
static void
-dwarf_decode_lines (struct line_header *lh, const file_and_directory &fnd,
- struct dwarf2_cu *cu, dwarf2_psymtab *pst,
+dwarf_decode_lines (struct line_header *lh, struct dwarf2_cu *cu,
CORE_ADDR lowpc, int decode_mapping)
{
- struct objfile *objfile = cu->per_objfile->objfile;
- const int decode_for_pst_p = (pst != NULL);
-
if (decode_mapping)
- dwarf_decode_lines_1 (lh, cu, decode_for_pst_p, lowpc);
+ dwarf_decode_lines_1 (lh, cu, lowpc);
- if (decode_for_pst_p)
- {
- /* Now that we're done scanning the Line Header Program, we can
- create the psymtab of each included file. */
- for (auto &file_entry : lh->file_names ())
- if (file_entry.included_p)
- {
- gdb::unique_xmalloc_ptr<char> name_holder;
- const char *include_name =
- compute_include_file_name (lh, file_entry, fnd, &name_holder);
- if (include_name != NULL)
- dwarf2_create_include_psymtab
- (cu->per_objfile->per_bfd, include_name, pst,
- cu->per_objfile->per_bfd->partial_symtabs.get (),
- objfile->per_bfd);
- }
- }
- else
- {
- /* Make sure a symtab is created for every file, even files
- which contain only variables (i.e. no code with associated
- line numbers). */
- buildsym_compunit *builder = cu->get_builder ();
- struct compunit_symtab *cust = builder->get_compunit_symtab ();
+ /* Make sure a symtab is created for every file, even files
+ which contain only variables (i.e. no code with associated
+ line numbers). */
+ buildsym_compunit *builder = cu->get_builder ();
+ struct compunit_symtab *cust = builder->get_compunit_symtab ();
- for (auto &fe : lh->file_names ())
+ for (auto &fe : lh->file_names ())
+ {
+ dwarf2_start_subfile (cu, fe.name, fe.include_dir (lh));
+ if (builder->get_current_subfile ()->symtab == NULL)
{
- dwarf2_start_subfile (cu, fe.name, fe.include_dir (lh));
- if (builder->get_current_subfile ()->symtab == NULL)
- {
- builder->get_current_subfile ()->symtab
- = allocate_symtab (cust,
- builder->get_current_subfile ()->name);
- }
- fe.symtab = builder->get_current_subfile ()->symtab;
+ builder->get_current_subfile ()->symtab
+ = allocate_symtab (cust,
+ builder->get_current_subfile ()->name.c_str ());
}
+ fe.symtab = builder->get_current_subfile ()->symtab;
}
}
@@ -21543,7 +20480,7 @@ static void
dwarf2_start_subfile (struct dwarf2_cu *cu, const char *filename,
const char *dirname)
{
- gdb::unique_xmalloc_ptr<char> copy;
+ std::string copy;
/* In order not to lose the line information directory,
we concatenate it to the filename when it makes sense.
@@ -21554,8 +20491,8 @@ dwarf2_start_subfile (struct dwarf2_cu *cu, const char *filename,
if (!IS_ABSOLUTE_PATH (filename) && dirname != NULL)
{
- copy.reset (concat (dirname, SLASH_STRING, filename, (char *) NULL));
- filename = copy.get ();
+ copy = path_join (dirname, filename);
+ filename = copy.c_str ();
}
cu->get_builder ()->start_subfile (filename);
@@ -21582,7 +20519,7 @@ var_decode_location (struct attribute *attr, struct symbol *sym,
variable has been optimized away. */
if (attr->form_is_block () && attr->as_block ()->size == 0)
{
- SYMBOL_ACLASS_INDEX (sym) = LOC_OPTIMIZED_OUT;
+ sym->set_aclass_index (LOC_OPTIMIZED_OUT);
return;
}
@@ -21605,19 +20542,16 @@ var_decode_location (struct attribute *attr, struct symbol *sym,
unsigned int dummy;
if (block->data[0] == DW_OP_addr)
- SET_SYMBOL_VALUE_ADDRESS
- (sym, cu->header.read_address (objfile->obfd,
- block->data + 1,
- &dummy));
+ sym->set_value_address
+ (cu->header.read_address (objfile->obfd, block->data + 1,
+ &dummy));
else
- SET_SYMBOL_VALUE_ADDRESS
- (sym, read_addr_index_from_leb128 (cu, block->data + 1,
- &dummy));
- SYMBOL_ACLASS_INDEX (sym) = LOC_STATIC;
+ sym->set_value_address
+ (read_addr_index_from_leb128 (cu, block->data + 1, &dummy));
+ sym->set_aclass_index (LOC_STATIC);
fixup_symbol_section (sym, objfile);
- SET_SYMBOL_VALUE_ADDRESS
- (sym,
- SYMBOL_VALUE_ADDRESS (sym)
+ sym->set_value_address
+ (sym->value_address ()
+ objfile->section_offsets[sym->section_index ()]);
return;
}
@@ -21694,21 +20628,21 @@ new_symbol (struct die_info *die, struct type *type, struct dwarf2_cu *cu,
/* Handle DW_AT_artificial. */
attr = dwarf2_attr (die, DW_AT_artificial, cu);
if (attr != nullptr)
- sym->artificial = attr->as_boolean ();
+ sym->set_is_artificial (attr->as_boolean ());
/* Default assumptions.
Use the passed type or decode it from the die. */
- SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
- SYMBOL_ACLASS_INDEX (sym) = LOC_OPTIMIZED_OUT;
+ sym->set_domain (VAR_DOMAIN);
+ sym->set_aclass_index (LOC_OPTIMIZED_OUT);
if (type != NULL)
- SYMBOL_TYPE (sym) = type;
+ sym->set_type (type);
else
- SYMBOL_TYPE (sym) = die_type (die, cu);
+ sym->set_type (die_type (die, cu));
attr = dwarf2_attr (die,
inlined_func ? DW_AT_call_line : DW_AT_decl_line,
cu);
if (attr != nullptr)
- SYMBOL_LINE (sym) = attr->constant_value (0);
+ sym->set_line (attr->constant_value (0));
attr = dwarf2_attr (die,
inlined_func ? DW_AT_call_file : DW_AT_decl_file,
@@ -21727,7 +20661,7 @@ new_symbol (struct die_info *die, struct type *type, struct dwarf2_cu *cu,
if (fe == NULL)
complaint (_("file index out of range"));
else
- symbol_set_symtab (sym, fe->symtab);
+ sym->set_symtab (fe->symtab);
}
switch (die->tag)
@@ -21740,19 +20674,19 @@ new_symbol (struct die_info *die, struct type *type, struct dwarf2_cu *cu,
addr = attr->as_address ();
addr = gdbarch_adjust_dwarf2_addr (gdbarch, addr + baseaddr);
- SET_SYMBOL_VALUE_ADDRESS (sym, addr);
- SYMBOL_ACLASS_INDEX (sym) = LOC_LABEL;
+ sym->set_value_address (addr);
+ sym->set_aclass_index (LOC_LABEL);
}
else
- SYMBOL_ACLASS_INDEX (sym) = LOC_OPTIMIZED_OUT;
- SYMBOL_TYPE (sym) = objfile_type (objfile)->builtin_core_addr;
- SYMBOL_DOMAIN (sym) = LABEL_DOMAIN;
+ sym->set_aclass_index (LOC_OPTIMIZED_OUT);
+ sym->set_type (objfile_type (objfile)->builtin_core_addr);
+ sym->set_domain (LABEL_DOMAIN);
add_symbol_to_list (sym, cu->list_in_scope);
break;
case DW_TAG_subprogram:
/* SYMBOL_BLOCK_VALUE (sym) will be filled in later by
finish_block. */
- SYMBOL_ACLASS_INDEX (sym) = LOC_BLOCK;
+ sym->set_aclass_index (LOC_BLOCK);
attr2 = dwarf2_attr (die, DW_AT_external, cu);
if ((attr2 != nullptr && attr2->as_boolean ())
|| cu->per_cu->lang == language_ada
@@ -21774,8 +20708,8 @@ new_symbol (struct die_info *die, struct type *type, struct dwarf2_cu *cu,
case DW_TAG_inlined_subroutine:
/* SYMBOL_BLOCK_VALUE (sym) will be filled in later by
finish_block. */
- SYMBOL_ACLASS_INDEX (sym) = LOC_BLOCK;
- SYMBOL_INLINED (sym) = 1;
+ sym->set_aclass_index (LOC_BLOCK);
+ sym->set_is_inlined (1);
list_to_add = cu->list_in_scope;
break;
case DW_TAG_template_value_param:
@@ -21787,8 +20721,8 @@ new_symbol (struct die_info *die, struct type *type, struct dwarf2_cu *cu,
/* Compilation with minimal debug info may result in
variables with missing type entries. Change the
misleading `void' type to something sensible. */
- if (SYMBOL_TYPE (sym)->code () == TYPE_CODE_VOID)
- SYMBOL_TYPE (sym) = objfile_type (objfile)->builtin_int;
+ if (sym->type ()->code () == TYPE_CODE_VOID)
+ sym->set_type (objfile_type (objfile)->builtin_int);
attr = dwarf2_attr (die, DW_AT_const_value, cu);
/* In the case of DW_TAG_member, we should only be called for
@@ -21825,8 +20759,8 @@ new_symbol (struct die_info *die, struct type *type, struct dwarf2_cu *cu,
&& die->parent->tag == DW_TAG_common_block)
attr2 = NULL;
- if (SYMBOL_CLASS (sym) == LOC_STATIC
- && SYMBOL_VALUE_ADDRESS (sym) == 0
+ if (sym->aclass () == LOC_STATIC
+ && sym->value_address () == 0
&& !per_objfile->per_bfd->has_section_at_zero)
{
/* When a static variable is eliminated by the linker,
@@ -21836,7 +20770,7 @@ new_symbol (struct die_info *die, struct type *type, struct dwarf2_cu *cu,
}
else if (attr2 != nullptr && attr2->as_boolean ())
{
- if (SYMBOL_CLASS (sym) == LOC_STATIC
+ if (sym->aclass () == LOC_STATIC
&& (objfile->flags & OBJF_MAINLINE) == 0
&& per_objfile->per_bfd->can_copy)
{
@@ -21894,12 +20828,12 @@ new_symbol (struct die_info *die, struct type *type, struct dwarf2_cu *cu,
? cu->get_builder ()->get_global_symbols ()
: cu->list_in_scope);
- SYMBOL_ACLASS_INDEX (sym) = LOC_UNRESOLVED;
+ sym->set_aclass_index (LOC_UNRESOLVED);
}
else if (!die_is_declaration (die, cu))
{
/* Use the default LOC_OPTIMIZED_OUT class. */
- gdb_assert (SYMBOL_CLASS (sym) == LOC_OPTIMIZED_OUT);
+ gdb_assert (sym->aclass () == LOC_OPTIMIZED_OUT);
if (!suppress_add)
list_to_add = cu->list_in_scope;
}
@@ -21915,7 +20849,7 @@ new_symbol (struct die_info *die, struct type *type, struct dwarf2_cu *cu,
struct context_stack *curr
= cu->get_builder ()->get_current_context_stack ();
if (curr != nullptr && curr->name != nullptr)
- SYMBOL_IS_ARGUMENT (sym) = 1;
+ sym->set_is_argument (1);
attr = dwarf2_attr (die, DW_AT_location, cu);
if (attr != nullptr)
{
@@ -21944,9 +20878,17 @@ new_symbol (struct die_info *die, struct type *type, struct dwarf2_cu *cu,
case DW_TAG_union_type:
case DW_TAG_set_type:
case DW_TAG_enumeration_type:
- SYMBOL_ACLASS_INDEX (sym) = LOC_TYPEDEF;
- SYMBOL_DOMAIN (sym) = STRUCT_DOMAIN;
-
+ case DW_TAG_namelist:
+ if (die->tag == DW_TAG_namelist)
+ {
+ sym->set_aclass_index (LOC_STATIC);
+ sym->set_domain (VAR_DOMAIN);
+ }
+ else
+ {
+ sym->set_aclass_index (LOC_TYPEDEF);
+ sym->set_domain (STRUCT_DOMAIN);
+ }
{
/* NOTE: carlton/2003-11-10: C++ class symbols shouldn't
really ever be static objects: otherwise, if you try
@@ -21975,22 +20917,23 @@ new_symbol (struct die_info *die, struct type *type, struct dwarf2_cu *cu,
/* The symbol's name is already allocated along
with this objfile, so we don't need to
duplicate it for the type. */
- if (SYMBOL_TYPE (sym)->name () == 0)
- SYMBOL_TYPE (sym)->set_name (sym->search_name ());
+ if (sym->type ()->name () == 0)
+ sym->type ()->set_name (sym->search_name ());
}
}
}
break;
case DW_TAG_typedef:
- SYMBOL_ACLASS_INDEX (sym) = LOC_TYPEDEF;
- SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
+ sym->set_aclass_index (LOC_TYPEDEF);
+ sym->set_domain (VAR_DOMAIN);
list_to_add = cu->list_in_scope;
break;
case DW_TAG_array_type:
case DW_TAG_base_type:
case DW_TAG_subrange_type:
- SYMBOL_ACLASS_INDEX (sym) = LOC_TYPEDEF;
- SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
+ case DW_TAG_generic_subrange:
+ sym->set_aclass_index (LOC_TYPEDEF);
+ sym->set_domain (VAR_DOMAIN);
list_to_add = cu->list_in_scope;
break;
case DW_TAG_enumerator:
@@ -22012,17 +20955,17 @@ new_symbol (struct die_info *die, struct type *type, struct dwarf2_cu *cu,
break;
case DW_TAG_imported_declaration:
case DW_TAG_namespace:
- SYMBOL_ACLASS_INDEX (sym) = LOC_TYPEDEF;
+ sym->set_aclass_index (LOC_TYPEDEF);
list_to_add = cu->get_builder ()->get_global_symbols ();
break;
case DW_TAG_module:
- SYMBOL_ACLASS_INDEX (sym) = LOC_TYPEDEF;
- SYMBOL_DOMAIN (sym) = MODULE_DOMAIN;
+ sym->set_aclass_index (LOC_TYPEDEF);
+ sym->set_domain (MODULE_DOMAIN);
list_to_add = cu->get_builder ()->get_global_symbols ();
break;
case DW_TAG_common_block:
- SYMBOL_ACLASS_INDEX (sym) = LOC_COMMON_BLOCK;
- SYMBOL_DOMAIN (sym) = COMMON_BLOCK_DOMAIN;
+ sym->set_aclass_index (LOC_COMMON_BLOCK);
+ sym->set_domain (COMMON_BLOCK_DOMAIN);
add_symbol_to_list (sym, cu->list_in_scope);
break;
default:
@@ -22211,7 +21154,7 @@ dwarf2_const_value (const struct attribute *attr, struct symbol *sym,
const gdb_byte *bytes;
struct dwarf2_locexpr_baton *baton;
- dwarf2_const_value_attr (attr, SYMBOL_TYPE (sym),
+ dwarf2_const_value_attr (attr, sym->type (),
sym->print_name (),
&objfile->objfile_obstack, cu,
&value, &bytes, &baton);
@@ -22219,17 +21162,17 @@ dwarf2_const_value (const struct attribute *attr, struct symbol *sym,
if (baton != NULL)
{
SYMBOL_LOCATION_BATON (sym) = baton;
- SYMBOL_ACLASS_INDEX (sym) = dwarf2_locexpr_index;
+ sym->set_aclass_index (dwarf2_locexpr_index);
}
else if (bytes != NULL)
- {
- SYMBOL_VALUE_BYTES (sym) = bytes;
- SYMBOL_ACLASS_INDEX (sym) = LOC_CONST_BYTES;
+ {
+ sym->set_value_bytes (bytes);
+ sym->set_aclass_index (LOC_CONST_BYTES);
}
else
{
- SYMBOL_VALUE (sym) = value;
- SYMBOL_ACLASS_INDEX (sym) = LOC_CONST;
+ sym->set_value_longest (value);
+ sym->set_aclass_index (LOC_CONST);
}
}
@@ -22482,6 +21425,7 @@ read_type_die_1 (struct die_info *die, struct dwarf2_cu *cu)
case DW_TAG_typedef:
this_type = read_typedef (die, cu);
break;
+ case DW_TAG_generic_subrange:
case DW_TAG_subrange_type:
this_type = read_subrange_type (die, cu);
break;
@@ -22883,6 +21827,7 @@ dwarf2_name (struct die_info *die, struct dwarf2_cu *cu)
&& die->tag != DW_TAG_class_type
&& die->tag != DW_TAG_interface_type
&& die->tag != DW_TAG_structure_type
+ && die->tag != DW_TAG_namelist
&& die->tag != DW_TAG_union_type)
return NULL;
@@ -22907,6 +21852,7 @@ dwarf2_name (struct die_info *die, struct dwarf2_cu *cu)
case DW_TAG_interface_type:
case DW_TAG_structure_type:
case DW_TAG_union_type:
+ case DW_TAG_namelist:
/* Some GCC versions emit spurious DW_AT_name attributes for unnamed
structures or unions. These were of the form "._%d" in GCC 4.1,
or simply "<anonymous struct>" or "<anonymous union>" in GCC 4.3
@@ -22980,82 +21926,82 @@ dump_die_shallow (struct ui_file *f, int indent, struct die_info *die)
{
unsigned int i;
- fprintf_unfiltered (f, "%*sDie: %s (abbrev %d, offset %s)\n",
- indent, "",
- dwarf_tag_name (die->tag), die->abbrev,
- sect_offset_str (die->sect_off));
+ gdb_printf (f, "%*sDie: %s (abbrev %d, offset %s)\n",
+ indent, "",
+ dwarf_tag_name (die->tag), die->abbrev,
+ sect_offset_str (die->sect_off));
if (die->parent != NULL)
- fprintf_unfiltered (f, "%*s parent at offset: %s\n",
- indent, "",
- sect_offset_str (die->parent->sect_off));
+ gdb_printf (f, "%*s parent at offset: %s\n",
+ indent, "",
+ sect_offset_str (die->parent->sect_off));
- fprintf_unfiltered (f, "%*s has children: %s\n",
- indent, "",
- dwarf_bool_name (die->child != NULL));
+ gdb_printf (f, "%*s has children: %s\n",
+ indent, "",
+ dwarf_bool_name (die->child != NULL));
- fprintf_unfiltered (f, "%*s attributes:\n", indent, "");
+ gdb_printf (f, "%*s attributes:\n", indent, "");
for (i = 0; i < die->num_attrs; ++i)
{
- fprintf_unfiltered (f, "%*s %s (%s) ",
- indent, "",
- dwarf_attr_name (die->attrs[i].name),
- dwarf_form_name (die->attrs[i].form));
+ gdb_printf (f, "%*s %s (%s) ",
+ indent, "",
+ dwarf_attr_name (die->attrs[i].name),
+ dwarf_form_name (die->attrs[i].form));
switch (die->attrs[i].form)
{
case DW_FORM_addr:
case DW_FORM_addrx:
case DW_FORM_GNU_addr_index:
- fprintf_unfiltered (f, "address: ");
- fputs_filtered (hex_string (die->attrs[i].as_address ()), f);
+ gdb_printf (f, "address: ");
+ gdb_puts (hex_string (die->attrs[i].as_address ()), f);
break;
case DW_FORM_block2:
case DW_FORM_block4:
case DW_FORM_block:
case DW_FORM_block1:
- fprintf_unfiltered (f, "block: size %s",
- pulongest (die->attrs[i].as_block ()->size));
+ gdb_printf (f, "block: size %s",
+ pulongest (die->attrs[i].as_block ()->size));
break;
case DW_FORM_exprloc:
- fprintf_unfiltered (f, "expression: size %s",
- pulongest (die->attrs[i].as_block ()->size));
+ gdb_printf (f, "expression: size %s",
+ pulongest (die->attrs[i].as_block ()->size));
break;
case DW_FORM_data16:
- fprintf_unfiltered (f, "constant of 16 bytes");
+ gdb_printf (f, "constant of 16 bytes");
break;
case DW_FORM_ref_addr:
- fprintf_unfiltered (f, "ref address: ");
- fputs_filtered (hex_string (die->attrs[i].as_unsigned ()), f);
+ gdb_printf (f, "ref address: ");
+ gdb_puts (hex_string (die->attrs[i].as_unsigned ()), f);
break;
case DW_FORM_GNU_ref_alt:
- fprintf_unfiltered (f, "alt ref address: ");
- fputs_filtered (hex_string (die->attrs[i].as_unsigned ()), f);
+ gdb_printf (f, "alt ref address: ");
+ gdb_puts (hex_string (die->attrs[i].as_unsigned ()), f);
break;
case DW_FORM_ref1:
case DW_FORM_ref2:
case DW_FORM_ref4:
case DW_FORM_ref8:
case DW_FORM_ref_udata:
- fprintf_unfiltered (f, "constant ref: 0x%lx (adjusted)",
- (long) (die->attrs[i].as_unsigned ()));
+ gdb_printf (f, "constant ref: 0x%lx (adjusted)",
+ (long) (die->attrs[i].as_unsigned ()));
break;
case DW_FORM_data1:
case DW_FORM_data2:
case DW_FORM_data4:
case DW_FORM_data8:
case DW_FORM_udata:
- fprintf_unfiltered (f, "constant: %s",
- pulongest (die->attrs[i].as_unsigned ()));
+ gdb_printf (f, "constant: %s",
+ pulongest (die->attrs[i].as_unsigned ()));
break;
case DW_FORM_sec_offset:
- fprintf_unfiltered (f, "section offset: %s",
- pulongest (die->attrs[i].as_unsigned ()));
+ gdb_printf (f, "section offset: %s",
+ pulongest (die->attrs[i].as_unsigned ()));
break;
case DW_FORM_ref_sig8:
- fprintf_unfiltered (f, "signature: %s",
- hex_string (die->attrs[i].as_signature ()));
+ gdb_printf (f, "signature: %s",
+ hex_string (die->attrs[i].as_signature ()));
break;
case DW_FORM_string:
case DW_FORM_strp:
@@ -23063,37 +22009,37 @@ dump_die_shallow (struct ui_file *f, int indent, struct die_info *die)
case DW_FORM_strx:
case DW_FORM_GNU_str_index:
case DW_FORM_GNU_strp_alt:
- fprintf_unfiltered (f, "string: \"%s\" (%s canonicalized)",
- die->attrs[i].as_string ()
- ? die->attrs[i].as_string () : "",
- die->attrs[i].canonical_string_p () ? "is" : "not");
+ gdb_printf (f, "string: \"%s\" (%s canonicalized)",
+ die->attrs[i].as_string ()
+ ? die->attrs[i].as_string () : "",
+ die->attrs[i].canonical_string_p () ? "is" : "not");
break;
case DW_FORM_flag:
if (die->attrs[i].as_boolean ())
- fprintf_unfiltered (f, "flag: TRUE");
+ gdb_printf (f, "flag: TRUE");
else
- fprintf_unfiltered (f, "flag: FALSE");
+ gdb_printf (f, "flag: FALSE");
break;
case DW_FORM_flag_present:
- fprintf_unfiltered (f, "flag: TRUE");
+ gdb_printf (f, "flag: TRUE");
break;
case DW_FORM_indirect:
/* The reader will have reduced the indirect form to
the "base form" so this form should not occur. */
- fprintf_unfiltered (f,
- "unexpected attribute form: DW_FORM_indirect");
+ gdb_printf (f,
+ "unexpected attribute form: DW_FORM_indirect");
break;
case DW_FORM_sdata:
case DW_FORM_implicit_const:
- fprintf_unfiltered (f, "constant: %s",
- plongest (die->attrs[i].as_signed ()));
+ gdb_printf (f, "constant: %s",
+ plongest (die->attrs[i].as_signed ()));
break;
default:
- fprintf_unfiltered (f, "unsupported attribute form: %d.",
- die->attrs[i].form);
+ gdb_printf (f, "unsupported attribute form: %d.",
+ die->attrs[i].form);
break;
}
- fprintf_unfiltered (f, "\n");
+ gdb_printf (f, "\n");
}
}
@@ -23117,16 +22063,16 @@ dump_die_1 (struct ui_file *f, int level, int max_level, struct die_info *die)
if (die->child != NULL)
{
- fprintf_unfiltered (f, "%*s Children:", indent, "");
+ gdb_printf (f, "%*s Children:", indent, "");
if (level + 1 < max_level)
{
- fprintf_unfiltered (f, "\n");
+ gdb_printf (f, "\n");
dump_die_1 (f, level + 1, max_level, die->child);
}
else
{
- fprintf_unfiltered (f,
- " [not printed, max nesting level reached]\n");
+ gdb_printf (f,
+ " [not printed, max nesting level reached]\n");
}
}
@@ -23241,7 +22187,6 @@ follow_die_offset (sect_offset sect_off, int offset_in_dwz,
else if (cu->dies == NULL)
{
/* We're loading full DIEs during partial symbol reading. */
- gdb_assert (per_objfile->per_bfd->reading_partial_symbols);
load_full_comp_unit (cu->per_cu, per_objfile, cu, false,
language_minimal);
}
@@ -23631,7 +22576,7 @@ follow_die_sig_1 (struct die_info *src_die, struct signatured_type *sig_type,
/* For .gdb_index version 7 keep track of included TUs.
http://sourceware.org/bugzilla/show_bug.cgi?id=15021. */
if (per_objfile->per_bfd->index_table != NULL
- && per_objfile->per_bfd->index_table->version <= 7)
+ && !per_objfile->per_bfd->index_table->version_check ())
{
(*ref_cu)->per_cu->imported_symtabs_push (sig_cu->per_cu);
}
@@ -23783,9 +22728,6 @@ load_full_type_unit (dwarf2_per_cu_data *per_cu,
{
struct signatured_type *sig_type;
- /* Caller is responsible for ensuring type_unit_groups don't get here. */
- gdb_assert (! per_cu->type_unit_group_p ());
-
/* We have the per_cu, but we need the signatured_type.
Fortunately this is an easy translation. */
gdb_assert (per_cu->is_debug_types);
@@ -24322,9 +23264,9 @@ dwarf2_symbol_mark_computed (const struct attribute *attr, struct symbol *sym,
complaint (_("Location list used without "
"specifying the CU base address."));
- SYMBOL_ACLASS_INDEX (sym) = (is_block
- ? dwarf2_loclist_block_index
- : dwarf2_loclist_index);
+ sym->set_aclass_index ((is_block
+ ? dwarf2_loclist_block_index
+ : dwarf2_loclist_index));
SYMBOL_LOCATION_BATON (sym) = baton;
}
else
@@ -24354,9 +23296,9 @@ dwarf2_symbol_mark_computed (const struct attribute *attr, struct symbol *sym,
baton->size = 0;
}
- SYMBOL_ACLASS_INDEX (sym) = (is_block
- ? dwarf2_locexpr_block_index
- : dwarf2_locexpr_index);
+ sym->set_aclass_index ((is_block
+ ? dwarf2_locexpr_block_index
+ : dwarf2_locexpr_index));
SYMBOL_LOCATION_BATON (sym) = baton;
}
}
@@ -24763,6 +23705,15 @@ set_die_type (struct die_info *die, struct type *type, struct dwarf2_cu *cu,
type->add_dyn_prop (DYN_PROP_ASSOCIATED, prop);
}
+ /* Read DW_AT_rank and set in type. */
+ attr = dwarf2_attr (die, DW_AT_rank, cu);
+ if (attr != NULL)
+ {
+ struct type *prop_type = cu->addr_sized_int_type (false);
+ if (attr_to_dynamic_prop (attr, die, cu, &prop, prop_type))
+ type->add_dyn_prop (DYN_PROP_RANK, prop);
+ }
+
/* Read DW_AT_data_location and set in type. */
if (!skip_data_location)
{
@@ -24824,32 +23775,6 @@ get_die_type (struct die_info *die, struct dwarf2_cu *cu)
return get_die_type_at_offset (die->sect_off, cu->per_cu, cu->per_objfile);
}
-/* Trivial hash function for partial_die_info: the hash value of a DIE
- is its offset in .debug_info for this objfile. */
-
-static hashval_t
-partial_die_hash (const void *item)
-{
- const struct partial_die_info *part_die
- = (const struct partial_die_info *) item;
-
- return to_underlying (part_die->sect_off);
-}
-
-/* Trivial comparison function for partial_die_info structures: two DIEs
- are equal if they have the same offset. */
-
-static int
-partial_die_eq (const void *item_lhs, const void *item_rhs)
-{
- const struct partial_die_info *part_die_lhs
- = (const struct partial_die_info *) item_lhs;
- const struct partial_die_info *part_die_rhs
- = (const struct partial_die_info *) item_rhs;
-
- return part_die_lhs->sect_off == part_die_rhs->sect_off;
-}
-
struct cmd_list_element *set_dwarf_cmdlist;
struct cmd_list_element *show_dwarf_cmdlist;
@@ -24857,9 +23782,9 @@ static void
show_check_physname (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file,
- _("Whether to check \"physname\" is %s.\n"),
- value);
+ gdb_printf (file,
+ _("Whether to check \"physname\" is %s.\n"),
+ value);
}
void _initialize_dwarf2_read ();
diff --git a/gdb/dwarf2/read.h b/gdb/dwarf2/read.h
index 0071c385bfa..b58c574c2be 100644
--- a/gdb/dwarf2/read.h
+++ b/gdb/dwarf2/read.h
@@ -23,14 +23,15 @@
#include <queue>
#include <unordered_map>
#include "dwarf2/comp-unit-head.h"
+#include "dwarf2/cooked-index.h"
#include "dwarf2/file-and-dir.h"
#include "dwarf2/index-cache.h"
+#include "dwarf2/mapped-index.h"
#include "dwarf2/section.h"
#include "filename-seen-cache.h"
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
#include "gdbsupport/hash_enum.h"
#include "gdbsupport/function-view.h"
-#include "psympriv.h"
/* Hold 'maintenance (set|show) dwarf' commands. */
extern struct cmd_list_element *set_dwarf_cmdlist;
@@ -50,7 +51,6 @@ struct dwarf2_cu;
struct dwarf2_debug_sections;
struct dwarf2_per_bfd;
struct dwarf2_per_cu_data;
-struct dwarf2_psymtab;
struct mapped_index;
struct mapped_debug_names;
struct signatured_type;
@@ -104,8 +104,12 @@ struct dwarf2_per_cu_data
reading_dwo_directly (false),
tu_read (false),
m_header_read_in (false),
+ addresses_seen (false),
+ mark (false),
+ files_read (false),
unit_type {},
- lang (language_unknown)
+ lang (language_unknown),
+ scanned (false)
{
}
@@ -154,12 +158,28 @@ struct dwarf2_per_cu_data
it private at the moment. */
mutable bool m_header_read_in : 1;
+ /* If addresses have been read for this CU (usually from
+ .debug_aranges), then this flag is set. */
+ bool addresses_seen : 1;
+
+ /* A temporary mark bit used when iterating over all CUs in
+ expand_symtabs_matching. */
+ unsigned int mark : 1;
+
+ /* True if we've tried to read the file table. There will be no
+ point in trying to read it again next time. */
+ bool files_read : 1;
+
/* The unit type of this CU. */
ENUM_BITFIELD (dwarf_unit_type) unit_type : 8;
/* The language of this CU. */
ENUM_BITFIELD (language) lang : LANGUAGE_BITS;
+ /* True if this CU has been scanned by the indexer; false if
+ not. */
+ std::atomic<bool> scanned;
+
/* Our index in the unshared "symtabs" vector. */
unsigned index = 0;
@@ -186,17 +206,10 @@ struct dwarf2_per_cu_data
have one. */
std::unique_ptr<file_and_directory> fnd;
- /* When dwarf2_per_bfd::using_index is true, the 'quick' field
- is active. Otherwise, the 'psymtab' field is active. */
- union
- {
- /* The partial symbol table associated with this compilation unit,
- or NULL for unread partial units. */
- dwarf2_psymtab *psymtab;
-
- /* Data needed by the "quick" functions. */
- struct dwarf2_per_cu_quick_data *quick;
- } v {};
+ /* The file table. This can be NULL if there was no file table
+ or it's currently not read in.
+ NOTE: This points into dwarf2_per_objfile->per_bfd->quick_file_names_table. */
+ struct quick_file_names *file_names = nullptr;
/* The CUs we import using DW_TAG_imported_unit. This is filled in
while reading psymtabs, used to compute the psymtab dependencies,
@@ -276,13 +289,6 @@ struct dwarf2_per_cu_data
return dwarf_version;
}
- /* A type unit group has a per_cu object that is recognized by
- having no section. */
- bool type_unit_group_p () const
- {
- return section == nullptr;
- }
-
/* Free any cached file names. */
void free_cached_file_names ();
};
@@ -357,6 +363,10 @@ struct dwarf2_per_bfd
is allocated on the dwarf2_per_bfd obstack. */
signatured_type_up allocate_signatured_type (ULONGEST signature);
+ /* Map all the DWARF section data needed when scanning
+ .debug_info. */
+ void map_info_sections (struct objfile *objfile);
+
private:
/* This function is mapped across the sections and remembers the
offset and size of each of the debugging sections we are
@@ -368,9 +378,9 @@ public:
/* The corresponding BFD. */
bfd *obfd;
- /* Objects that can be shared across objfiles are stored in this
- obstack or on the psymtab obstack, while objects that are
- objfile-specific are stored on the objfile obstack. */
+ /* Objects that can be shared across objfiles may be stored in this
+ obstack, while objects that are objfile-specific are stored on
+ the objfile obstack. */
auto_obstack obstack;
dwarf2_section_info info {};
@@ -431,15 +441,8 @@ public:
VMA of 0. */
bool has_section_at_zero = false;
- /* True if we are using the mapped index,
- or we are faking it for OBJF_READNOW's sake. */
- bool using_index = false;
-
- /* The mapped index, or NULL if .gdb_index is missing or not being used. */
- std::unique_ptr<mapped_index> index_table;
-
- /* The mapped index, or NULL if .debug_names is missing or not being used. */
- std::unique_ptr<mapped_debug_names> debug_names_table;
+ /* The mapped index, or NULL in the readnow case. */
+ std::unique_ptr<dwarf_scanner_base> index_table;
/* When using index_table, this keeps track of all quick_file_names entries.
TUs typically share line table entries with a CU, so we maintain a
@@ -450,10 +453,6 @@ public:
CU and its associated TU group if there is one. */
htab_up quick_file_names_table;
- /* Set during partial symbol reading, to prevent queueing of full
- symbols. */
- bool reading_partial_symbols = false;
-
/* The CUs we recently read. */
std::vector<dwarf2_per_cu_data *> just_read_cus;
@@ -470,11 +469,6 @@ public:
/* CUs that are queued to be read. */
gdb::optional<std::queue<dwarf2_queue_item>> queue;
- /* We keep a separate reference to the partial symtabs, in case we
- are sharing them between objfiles. This is only set after
- partial symbols have been read the first time. */
- std::shared_ptr<psymtab_storage> partial_symtabs;
-
/* The address map that is used by the DWARF index code. */
struct addrmap *index_addrmap = nullptr;
};
@@ -609,26 +603,6 @@ private:
dwarf2_per_objfile *get_dwarf2_per_objfile (struct objfile *objfile);
-/* A partial symtab specialized for DWARF. */
-struct dwarf2_psymtab : public partial_symtab
-{
- dwarf2_psymtab (const char *filename,
- psymtab_storage *partial_symtabs,
- objfile_per_bfd_storage *objfile_per_bfd,
- dwarf2_per_cu_data *per_cu)
- : partial_symtab (filename, partial_symtabs, objfile_per_bfd, 0),
- per_cu_data (per_cu)
- {
- }
-
- void read_symtab (struct objfile *) override;
- void expand_psymtab (struct objfile *) override;
- bool readin_p (struct objfile *) const override;
- compunit_symtab *get_compunit_symtab (struct objfile *) const override;
-
- struct dwarf2_per_cu_data *per_cu_data;
-};
-
/* Return the type of the DIE at DIE_OFFSET in the CU named by
PER_CU. */
diff --git a/gdb/dwarf2/tag.h b/gdb/dwarf2/tag.h
new file mode 100644
index 00000000000..735a6d581be
--- /dev/null
+++ b/gdb/dwarf2/tag.h
@@ -0,0 +1,67 @@
+/* Tag attributes
+
+ Copyright (C) 2022 Free Software Foundation, Inc.
+
+ This file is part of GDB.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#ifndef GDB_DWARF2_TAG_H
+#define GDB_DWARF2_TAG_H
+
+#include "dwarf2.h"
+
+/* Return true if TAG represents a type, false otherwise. */
+
+static inline bool
+tag_is_type (dwarf_tag tag)
+{
+ switch (tag)
+ {
+ case DW_TAG_padding:
+ case DW_TAG_array_type:
+ case DW_TAG_class_type:
+ case DW_TAG_enumeration_type:
+ case DW_TAG_pointer_type:
+ case DW_TAG_reference_type:
+ case DW_TAG_string_type:
+ case DW_TAG_structure_type:
+ case DW_TAG_subroutine_type:
+ case DW_TAG_typedef:
+ case DW_TAG_union_type:
+ case DW_TAG_ptr_to_member_type:
+ case DW_TAG_set_type:
+ case DW_TAG_subrange_type:
+ case DW_TAG_base_type:
+ case DW_TAG_const_type:
+ case DW_TAG_packed_type:
+ case DW_TAG_template_type_param:
+ case DW_TAG_volatile_type:
+ case DW_TAG_restrict_type:
+ case DW_TAG_interface_type:
+ case DW_TAG_namespace:
+ case DW_TAG_unspecified_type:
+ case DW_TAG_shared_type:
+ case DW_TAG_rvalue_reference_type:
+ case DW_TAG_coarray_type:
+ case DW_TAG_dynamic_type:
+ case DW_TAG_atomic_type:
+ case DW_TAG_immutable_type:
+ return true;
+ default:
+ return false;
+ }
+}
+
+#endif /* GDB_DWARF2_TAG_H */
diff --git a/gdb/elfread.c b/gdb/elfread.c
index 3f2d8b4e233..b136c605b1a 100644
--- a/gdb/elfread.c
+++ b/gdb/elfread.c
@@ -483,7 +483,7 @@ elf_symtab_read (minimal_symbol_reader &reader,
if (type != ST_SYNTHETIC)
{
/* Pass symbol size field in via BFD. FIXME!!! */
- SET_MSYMBOL_SIZE (msym, elf_sym->internal_elf_sym.st_size);
+ msym->set_size (elf_sym->internal_elf_sym.st_size);
}
msym->filename = filesymname;
@@ -522,7 +522,7 @@ elf_symtab_read (minimal_symbol_reader &reader,
symaddr, mst_solib_trampoline, sym->section, objfile);
if (mtramp)
{
- SET_MSYMBOL_SIZE (mtramp, MSYMBOL_SIZE (msym));
+ mtramp->set_size (msym->size());
mtramp->created_by_gdb = 1;
mtramp->filename = filesymname;
if (elf_make_msymbol_special_p)
@@ -640,7 +640,7 @@ elf_rel_plt_read (minimal_symbol_reader &reader,
true, address, mst_slot_got_plt,
msym_section, objfile);
if (msym)
- SET_MSYMBOL_SIZE (msym, ptr_size);
+ msym->set_size (ptr_size);
}
}
@@ -703,7 +703,7 @@ elf_gnu_ifunc_record_cache (const char *name, CORE_ADDR addr)
msym = lookup_minimal_symbol_by_pc (addr);
if (msym.minsym == NULL)
return 0;
- if (BMSYMBOL_VALUE_ADDRESS (msym) != addr)
+ if (msym.value_address () != addr)
return 0;
objfile = msym.objfile;
@@ -828,15 +828,15 @@ elf_gnu_ifunc_resolve_by_got (const char *name, CORE_ADDR *addr_p)
msym = lookup_minimal_symbol (name_got_plt, NULL, objfile);
if (msym.minsym == NULL)
continue;
- if (MSYMBOL_TYPE (msym.minsym) != mst_slot_got_plt)
+ if (msym.minsym->type () != mst_slot_got_plt)
continue;
- pointer_address = BMSYMBOL_VALUE_ADDRESS (msym);
+ pointer_address = msym.value_address ();
plt = bfd_get_section_by_name (obfd, ".plt");
if (plt == NULL)
continue;
- if (MSYMBOL_SIZE (msym.minsym) != ptr_size)
+ if (msym.minsym->size () != ptr_size)
continue;
if (target_read_memory (pointer_address, buf, ptr_size) != 0)
continue;
@@ -1049,9 +1049,9 @@ elf_read_minimal_symbols (struct objfile *objfile, int symfile_flags,
if (symtab_create_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "Reading minimal symbols of objfile %s ...\n",
- objfile_name (objfile));
+ gdb_printf (gdb_stdlog,
+ "Reading minimal symbols of objfile %s ...\n",
+ objfile_name (objfile));
}
/* If we already have minsyms, then we can skip some work here.
@@ -1065,8 +1065,8 @@ elf_read_minimal_symbols (struct objfile *objfile, int symfile_flags,
&& ei->ctfsect == NULL)
{
if (symtab_create_debug)
- fprintf_unfiltered (gdb_stdlog,
- "... minimal symbols previously read\n");
+ gdb_printf (gdb_stdlog,
+ "... minimal symbols previously read\n");
return;
}
@@ -1171,7 +1171,7 @@ elf_read_minimal_symbols (struct objfile *objfile, int symfile_flags,
reader.install ();
if (symtab_create_debug)
- fprintf_unfiltered (gdb_stdlog, "Done reading minimal symbols.\n");
+ gdb_printf (gdb_stdlog, "Done reading minimal symbols.\n");
}
/* Scan and build partial symbols for a symbol file.
diff --git a/gdb/eval.c b/gdb/eval.c
index acac28e5c2d..ce1d883aa86 100644
--- a/gdb/eval.c
+++ b/gdb/eval.c
@@ -36,7 +36,7 @@
#include "regcache.h"
#include "user-regs.h"
#include "valprint.h"
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
#include "objfiles.h"
#include "typeprint.h"
#include <ctype.h>
@@ -564,7 +564,7 @@ evaluate_var_value (enum noside noside, const block *blk, symbol *var)
if (noside != EVAL_AVOID_SIDE_EFFECTS)
throw;
- ret = value_zero (SYMBOL_TYPE (var), not_lval);
+ ret = value_zero (var->type (), not_lval);
}
return ret;
@@ -580,7 +580,7 @@ var_value_operation::evaluate (struct type *expect_type,
enum noside noside)
{
symbol *var = std::get<0> (m_storage).symbol;
- if (SYMBOL_TYPE (var)->code () == TYPE_CODE_ERROR)
+ if (var->type ()->code () == TYPE_CODE_ERROR)
error_unknown_type (var->print_name ());
return evaluate_var_value (noside, std::get<0> (m_storage).block, var);
}
@@ -722,7 +722,7 @@ var_value_operation::evaluate_funcall (struct type *expect_type,
NULL, std::get<0> (m_storage).symbol,
NULL, &symp, NULL, 0, noside);
- if (SYMBOL_TYPE (symp)->code () == TYPE_CODE_ERROR)
+ if (symp->type ()->code () == TYPE_CODE_ERROR)
error_unknown_type (symp->print_name ());
value *callee = evaluate_var_value (noside, std::get<0> (m_storage).block,
symp);
@@ -967,6 +967,93 @@ structop_base_operation::evaluate_funcall
nullptr, expect_type);
}
+/* Helper for structop_base_operation::complete which recursively adds
+ field and method names from TYPE, a struct or union type, to the
+ OUTPUT list. PREFIX is prepended to each result. */
+
+static void
+add_struct_fields (struct type *type, completion_list &output,
+ const char *fieldname, int namelen, const char *prefix)
+{
+ int i;
+ int computed_type_name = 0;
+ const char *type_name = NULL;
+
+ type = check_typedef (type);
+ for (i = 0; i < type->num_fields (); ++i)
+ {
+ if (i < TYPE_N_BASECLASSES (type))
+ add_struct_fields (TYPE_BASECLASS (type, i),
+ output, fieldname, namelen, prefix);
+ else if (type->field (i).name ())
+ {
+ if (type->field (i).name ()[0] != '\0')
+ {
+ if (! strncmp (type->field (i).name (),
+ fieldname, namelen))
+ output.emplace_back (concat (prefix, type->field (i).name (),
+ nullptr));
+ }
+ else if (type->field (i).type ()->code () == TYPE_CODE_UNION)
+ {
+ /* Recurse into anonymous unions. */
+ add_struct_fields (type->field (i).type (),
+ output, fieldname, namelen, prefix);
+ }
+ }
+ }
+
+ for (i = TYPE_NFN_FIELDS (type) - 1; i >= 0; --i)
+ {
+ const char *name = TYPE_FN_FIELDLIST_NAME (type, i);
+
+ if (name && ! strncmp (name, fieldname, namelen))
+ {
+ if (!computed_type_name)
+ {
+ type_name = type->name ();
+ computed_type_name = 1;
+ }
+ /* Omit constructors from the completion list. */
+ if (!type_name || strcmp (type_name, name))
+ output.emplace_back (concat (prefix, name, nullptr));
+ }
+ }
+}
+
+/* See expop.h. */
+
+bool
+structop_base_operation::complete (struct expression *exp,
+ completion_tracker &tracker,
+ const char *prefix)
+{
+ const std::string &fieldname = std::get<1> (m_storage);
+
+ value *lhs = std::get<0> (m_storage)->evaluate (nullptr, exp,
+ EVAL_AVOID_SIDE_EFFECTS);
+ struct type *type = value_type (lhs);
+ for (;;)
+ {
+ type = check_typedef (type);
+ if (!type->is_pointer_or_reference ())
+ break;
+ type = TYPE_TARGET_TYPE (type);
+ }
+
+ if (type->code () == TYPE_CODE_UNION
+ || type->code () == TYPE_CODE_STRUCT)
+ {
+ completion_list result;
+
+ add_struct_fields (type, result, fieldname.c_str (),
+ fieldname.length (), prefix);
+ tracker.add_completions (std::move (result));
+ return true;
+ }
+
+ return false;
+}
} /* namespace expr */
@@ -1005,7 +1092,7 @@ eval_op_var_entry_value (struct type *expect_type, struct expression *exp,
enum noside noside, symbol *sym)
{
if (noside == EVAL_AVOID_SIDE_EFFECTS)
- return value_zero (SYMBOL_TYPE (sym), not_lval);
+ return value_zero (sym->type (), not_lval);
if (SYMBOL_COMPUTED_OPS (sym) == NULL
|| SYMBOL_COMPUTED_OPS (sym)->read_variable_at_entry == NULL)
@@ -1078,17 +1165,22 @@ eval_op_register (struct type *expect_type, struct expression *exp,
return val;
}
-/* Helper function that implements the body of OP_STRING. */
+namespace expr
+{
-struct value *
-eval_op_string (struct type *expect_type, struct expression *exp,
- enum noside noside, int len, const char *string)
+value *
+string_operation::evaluate (struct type *expect_type,
+ struct expression *exp,
+ enum noside noside)
{
+ const std::string &str = std::get<0> (m_storage);
struct type *type = language_string_char_type (exp->language_defn,
exp->gdbarch);
- return value_string (string, len, type);
+ return value_string (str.c_str (), str.size (), type);
}
+} /* namespace expr */
+
/* Helper function that implements the body of OP_OBJC_SELECTOR. */
struct value *
@@ -1101,18 +1193,6 @@ eval_op_objc_selector (struct type *expect_type, struct expression *exp,
lookup_child_selector (exp->gdbarch, sel));
}
-/* Helper function that implements the body of BINOP_CONCAT. */
-
-struct value *
-eval_op_concat (struct type *expect_type, struct expression *exp,
- enum noside noside, struct value *arg1, struct value *arg2)
-{
- if (binop_user_defined_p (BINOP_CONCAT, arg1, arg2))
- return value_x_binop (arg1, arg2, BINOP_CONCAT, OP_NULL, noside);
- else
- return value_concat (arg1, arg2);
-}
-
/* A helper function for TERNOP_SLICE. */
struct value *
@@ -2261,7 +2341,7 @@ adl_func_operation::evaluate (struct type *expect_type,
NON_METHOD,
nullptr, nullptr,
nullptr, &symp, nullptr, 0, noside);
- if (SYMBOL_TYPE (symp)->code () == TYPE_CODE_ERROR)
+ if (symp->type ()->code () == TYPE_CODE_ERROR)
error_unknown_type (symp->print_name ());
value *callee = evaluate_var_value (noside, std::get<1> (m_storage), symp);
return evaluate_subexp_do_call (exp, noside, callee, args,
@@ -2467,6 +2547,22 @@ array_operation::evaluate (struct type *expect_type,
return value_array (tem2, tem3, argvec);
}
+value *
+unop_extract_operation::evaluate (struct type *expect_type,
+ struct expression *exp,
+ enum noside noside)
+{
+ value *old_value = std::get<0> (m_storage)->evaluate (nullptr, exp, noside);
+ struct type *type = get_type ();
+
+ if (TYPE_LENGTH (type) > TYPE_LENGTH (value_type (old_value)))
+ error (_("length type is larger than the value type"));
+
+ struct value *result = allocate_value (type);
+ value_contents_copy (result, 0, old_value, 0, TYPE_LENGTH (type));
+ return result;
+}
+
}
@@ -2582,13 +2678,13 @@ var_value_operation::evaluate_for_address (struct expression *exp,
/* C++: The "address" of a reference should yield the address
* of the object pointed to. Let value_addr() deal with it. */
- if (TYPE_IS_REFERENCE (SYMBOL_TYPE (var)))
+ if (TYPE_IS_REFERENCE (var->type ()))
return operation::evaluate_for_address (exp, noside);
if (noside == EVAL_AVOID_SIDE_EFFECTS)
{
- struct type *type = lookup_pointer_type (SYMBOL_TYPE (var));
- enum address_class sym_class = SYMBOL_CLASS (var);
+ struct type *type = lookup_pointer_type (var->type ());
+ enum address_class sym_class = var->aclass ();
if (sym_class == LOC_CONST
|| sym_class == LOC_CONST_BYTES
@@ -2606,7 +2702,7 @@ var_value_operation::evaluate_with_coercion (struct expression *exp,
enum noside noside)
{
struct symbol *var = std::get<0> (m_storage).symbol;
- struct type *type = check_typedef (SYMBOL_TYPE (var));
+ struct type *type = check_typedef (var->type ());
if (type->code () == TYPE_CODE_ARRAY
&& !type->is_vector ()
&& CAST_IS_CONVERSION (exp->language_defn))
@@ -2735,7 +2831,7 @@ value *
var_value_operation::evaluate_for_sizeof (struct expression *exp,
enum noside noside)
{
- struct type *type = SYMBOL_TYPE (std::get<0> (m_storage).symbol);
+ struct type *type = std::get<0> (m_storage).symbol->type ();
if (is_dynamic_type (type))
{
value *val = evaluate (nullptr, exp, EVAL_NORMAL);
diff --git a/gdb/event-top.c b/gdb/event-top.c
index 51c6ee803cd..74960c8ed3c 100644
--- a/gdb/event-top.c
+++ b/gdb/event-top.c
@@ -42,6 +42,7 @@
#include "gdbsupport/gdb-sigmask.h"
#include "async-event.h"
#include "bt-utils.h"
+#include "pager.h"
/* readline include files. */
#include "readline/readline.h"
@@ -107,7 +108,7 @@ static void
show_bt_on_fatal_signal (struct ui_file *file, int from_tty,
struct cmd_list_element *cmd, const char *value)
{
- fprintf_filtered (file, _("Backtrace on a fatal signal is %s.\n"), value);
+ gdb_printf (file, _("Backtrace on a fatal signal is %s.\n"), value);
}
/* Signal handling variables. */
@@ -301,7 +302,7 @@ change_line_handler (int editing)
is typing would lose input. */
/* Whether we've registered a callback handler with readline. */
-static int callback_handler_installed;
+static bool callback_handler_installed;
/* See event-top.h, and above. */
@@ -311,7 +312,7 @@ gdb_rl_callback_handler_remove (void)
gdb_assert (current_ui == main_ui);
rl_callback_handler_remove ();
- callback_handler_installed = 0;
+ callback_handler_installed = false;
}
/* See event-top.h, and above. Note this wrapper doesn't have an
@@ -329,7 +330,7 @@ gdb_rl_callback_handler_install (const char *prompt)
gdb_assert (!callback_handler_installed);
rl_callback_handler_install (prompt, gdb_rl_callback_handler);
- callback_handler_installed = 1;
+ callback_handler_installed = true;
}
/* See event-top.h, and above. */
@@ -427,7 +428,7 @@ display_gdb_prompt (const char *new_prompt)
/* Don't use a _filtered function here. It causes the assumed
character position to be off, since the newline we read from
the user is not accounted for. */
- fprintf_unfiltered (gdb_stdout, "%s", actual_gdb_prompt.c_str ());
+ printf_unfiltered ("%s", actual_gdb_prompt.c_str ());
gdb_flush (gdb_stdout);
}
}
@@ -494,7 +495,7 @@ stdin_event_handler (int error, gdb_client_data client_data)
if (main_ui == ui)
{
/* If stdin died, we may as well kill gdb. */
- printf_unfiltered (_("error detected on stdin\n"));
+ gdb_printf (gdb_stderr, _("error detected on stdin\n"));
quit_command ((char *) 0, 0);
}
else
@@ -673,11 +674,7 @@ handle_line_of_input (struct buffer *cmd_line_buffer,
cmd_line_buffer->used_size = 0;
if (from_tty && annotation_level > 1)
- {
- printf_unfiltered (("\n\032\032post-"));
- puts_unfiltered (annotation_suffix);
- printf_unfiltered (("\n"));
- }
+ printf_unfiltered (("\n\032\032post-%s\n"), annotation_suffix);
#define SERVER_COMMAND_PREFIX "server "
server_command = startswith (cmd, SERVER_COMMAND_PREFIX);
@@ -745,6 +742,25 @@ handle_line_of_input (struct buffer *cmd_line_buffer,
return cmd;
}
+/* See event-top.h. */
+
+void
+gdb_rl_deprep_term_function (void)
+{
+#ifdef RL_STATE_EOF
+ gdb::optional<scoped_restore_tmpl<int>> restore_eof_found;
+
+ if (RL_ISSTATE (RL_STATE_EOF))
+ {
+ printf_unfiltered ("quit\n");
+ restore_eof_found.emplace (&rl_eof_found, 0);
+ }
+
+#endif /* RL_STATE_EOF */
+
+ rl_deprep_terminal ();
+}
+
/* Handle a complete line of input. This is called by the callback
mechanism within the readline library. Deal with incomplete
commands as well, by saving the partial input in a global
@@ -766,8 +782,52 @@ command_line_handler (gdb::unique_xmalloc_ptr<char> &&rl)
/* stdin closed. The connection with the terminal is gone.
This happens at the end of a testsuite run, after Expect has
hung up but GDB is still alive. In such a case, we just quit
- gdb killing the inferior program too. */
+ gdb killing the inferior program too. This also happens if the
+ user sends EOF, which is usually bound to ctrl+d. */
+
+#ifndef RL_STATE_EOF
+ /* When readline is using bracketed paste mode, then, when eof is
+ received, readline will emit the control sequence to leave
+ bracketed paste mode.
+
+ This control sequence ends with \r, which means that the "quit" we
+ are about to print will overwrite the prompt on this line.
+
+ The solution to this problem is to actually print the "quit"
+ message from gdb_rl_deprep_term_function (see above), however, we
+ can only do that if we can know, in that function, when eof was
+ received.
+
+ Unfortunately, with older versions of readline, it is not possible
+ in the gdb_rl_deprep_term_function to know if eof was received or
+ not, and, as GDB can be built against the system readline, which
+ could be older than the readline in GDB's repository, then we
+ can't be sure that we can work around this prompt corruption in
+ the gdb_rl_deprep_term_function function.
+
+ If we get here, RL_STATE_EOF is not defined. This indicates that
+ we are using an older readline, and couldn't print the quit
+ message in gdb_rl_deprep_term_function. So, what we do here is
+ check to see if bracketed paste mode is on or not. If it's on
+ then we print a \n and then the quit, this means the user will
+ see:
+
+ (gdb)
+ quit
+
+ Rather than the usual:
+
+ (gdb) quit
+
+ Which we will get with a newer readline, but this really is the
+ best we can do with older versions of readline. */
+ const char *value = rl_variable_value ("enable-bracketed-paste");
+ if (value != nullptr && strcmp (value, "on") == 0
+ && ((rl_readline_version >> 8) & 0xff) > 0x07)
+ printf_unfiltered ("\n");
printf_unfiltered ("quit\n");
+#endif
+
execute_command ("quit", 1);
}
else if (cmd == NULL)
@@ -796,22 +856,12 @@ gdb_readline_no_editing_callback (gdb_client_data client_data)
int c;
char *result;
struct buffer line_buffer;
- static int done_once = 0;
struct ui *ui = current_ui;
buffer_init (&line_buffer);
- /* Unbuffer the input stream, so that, later on, the calls to fgetc
- fetch only one char at the time from the stream. The fgetc's will
- get up to the first newline, but there may be more chars in the
- stream after '\n'. If we buffer the input and fgetc drains the
- stream, getting stuff beyond the newline as well, a select, done
- afterwards will not trigger. */
- if (!done_once && !ISATTY (ui->instream))
- {
- setbuf (ui->instream, NULL);
- done_once = 1;
- }
+ FILE *stream = ui->instream != nullptr ? ui->instream : ui->stdin_stream;
+ gdb_assert (stream != nullptr);
/* We still need the while loop here, even though it would seem
obvious to invoke gdb_readline_no_editing_callback at every
@@ -825,7 +875,7 @@ gdb_readline_no_editing_callback (gdb_client_data client_data)
{
/* Read from stdin if we are executing a user defined command.
This is the right thing for prompt_for_continue, at least. */
- c = fgetc (ui->instream != NULL ? ui->instream : ui->stdin_stream);
+ c = fgetc (stream);
if (c == EOF)
{
@@ -1218,8 +1268,8 @@ async_disconnect (gdb_client_data arg)
catch (const gdb_exception &exception)
{
- fputs_filtered ("Could not kill the program being debugged",
- gdb_stderr);
+ gdb_puts ("Could not kill the program being debugged",
+ gdb_stderr);
exception_print (gdb_stderr, exception);
}
@@ -1283,9 +1333,9 @@ gdb_setup_readline (int editing)
mess it up here. The sync stuff should really go away over
time. */
if (!batch_silent)
- gdb_stdout = new stdio_file (ui->outstream);
+ gdb_stdout = new pager_file (new stdio_file (ui->outstream));
gdb_stderr = new stderr_file (ui->errstream);
- gdb_stdlog = gdb_stderr; /* for moment */
+ gdb_stdlog = new timestamped_file (gdb_stderr);
gdb_stdtarg = gdb_stderr; /* for moment */
gdb_stdtargerr = gdb_stderr; /* for moment */
@@ -1388,7 +1438,7 @@ static void
show_debug_event_loop_command (struct ui_file *file, int from_tty,
struct cmd_list_element *cmd, const char *value)
{
- fprintf_filtered (file, _("Event loop debugging is %s.\n"), value);
+ gdb_printf (file, _("Event loop debugging is %s.\n"), value);
}
void _initialize_event_top ();
diff --git a/gdb/event-top.h b/gdb/event-top.h
index 078482b79aa..722e636a110 100644
--- a/gdb/event-top.h
+++ b/gdb/event-top.h
@@ -70,6 +70,12 @@ extern void gdb_rl_callback_handler_install (const char *prompt);
currently installed. */
extern void gdb_rl_callback_handler_reinstall (void);
+/* Called by readline after a complete line has been gathered from the
+ user, but before the line is dispatched to back to GDB. This function
+ is a wrapper around readline's builtin rl_deprep_terminal function, and
+ handles the case where readline received EOF. */
+extern void gdb_rl_deprep_term_function (void);
+
typedef void (*segv_handler_t) (int);
/* On construction, replaces the current thread's SIGSEGV handler with
diff --git a/gdb/exceptions.c b/gdb/exceptions.c
index 87a8dc26a51..fdb65b3dc4b 100644
--- a/gdb/exceptions.c
+++ b/gdb/exceptions.c
@@ -46,19 +46,15 @@ print_flush (void)
}
/* We want all output to appear now, before we print the error. We
- have 3 levels of buffering we have to flush (it's possible that
+ have 2 levels of buffering we have to flush (it's possible that
some of these should be changed to flush the lower-level ones
too): */
- /* 1. The _filtered buffer. */
- if (filtered_printing_initialized ())
- wrap_here ("");
-
- /* 2. The stdio buffer. */
+ /* 1. The stdio buffer. */
gdb_flush (gdb_stdout);
gdb_flush (gdb_stderr);
- /* 3. The system-level buffer. */
+ /* 2. The system-level buffer. */
gdb_stdout_serial = serial_fdopen (fileno (ui->outstream));
if (gdb_stdout_serial)
{
@@ -81,14 +77,14 @@ print_exception (struct ui_file *file, const struct gdb_exception &e)
{
end = strchr (start, '\n');
if (end == NULL)
- fputs_filtered (start, file);
+ gdb_puts (start, file);
else
{
end++;
file->write (start, end - start);
}
}
- fprintf_filtered (file, "\n");
+ gdb_printf (file, "\n");
/* Now append the annotation. */
switch (e.reason)
@@ -127,7 +123,7 @@ exception_fprintf (struct ui_file *file, const struct gdb_exception &e,
/* Print the prefix. */
va_start (args, prefix);
- vfprintf_filtered (file, prefix, args);
+ gdb_vprintf (file, prefix, args);
va_end (args);
print_exception (file, e);
diff --git a/gdb/exec.c b/gdb/exec.c
index f42862b2159..38540c0840b 100644
--- a/gdb/exec.c
+++ b/gdb/exec.c
@@ -49,6 +49,7 @@
#include <algorithm>
#include "gdbsupport/pathstuff.h"
#include "cli/cli-style.h"
+#include "gdbsupport/buildargv.h"
void (*deprecated_file_changed_hook) (const char *);
@@ -102,9 +103,9 @@ static void
show_exec_file_mismatch_command (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file,
- _("exec-file-mismatch handling is currently \"%s\".\n"),
- exec_file_mismatch_names[exec_file_mismatch_mode]);
+ gdb_printf (file,
+ _("exec-file-mismatch handling is currently \"%s\".\n"),
+ exec_file_mismatch_names[exec_file_mismatch_mode]);
}
/* Set command. Change the setting for range checking. */
@@ -135,8 +136,8 @@ static void
show_write_files (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Writing into executable and core files is %s.\n"),
- value);
+ gdb_printf (file, _("Writing into executable and core files is %s.\n"),
+ value);
}
@@ -378,7 +379,7 @@ exec_file_attach (const char *filename, int from_tty)
if (!filename)
{
if (from_tty)
- printf_filtered (_("No executable file now.\n"));
+ gdb_printf (_("No executable file now.\n"));
set_gdbarch_from_file (NULL);
}
@@ -466,7 +467,8 @@ exec_file_attach (const char *filename, int from_tty)
(bfd_get_filename (current_program_space->exec_bfd ())));
else
current_program_space->exec_filename
- = gdb_realpath_keepfile (scratch_pathname);
+ = make_unique_xstrdup (gdb_realpath_keepfile
+ (scratch_pathname).c_str ());
if (!bfd_check_format_matches (current_program_space->exec_bfd (),
bfd_object, &matching))
@@ -905,11 +907,11 @@ print_section_info (const target_section_table *t, bfd *abfd)
/* FIXME: 16 is not wide enough when gdbarch_addr_bit > 64. */
int wid = gdbarch_addr_bit (gdbarch) <= 32 ? 8 : 16;
- printf_filtered ("\t`%ps', ",
- styled_string (file_name_style.style (),
- bfd_get_filename (abfd)));
- wrap_here (" ");
- printf_filtered (_("file type %s.\n"), bfd_get_target (abfd));
+ gdb_printf ("\t`%ps', ",
+ styled_string (file_name_style.style (),
+ bfd_get_filename (abfd)));
+ gdb_stdout->wrap_here (8);
+ gdb_printf (_("file type %s.\n"), bfd_get_target (abfd));
if (abfd == current_program_space->exec_bfd ())
{
/* gcc-3.4 does not like the initialization in
@@ -943,16 +945,16 @@ print_section_info (const target_section_table *t, bfd *abfd)
entry_point = gdbarch_addr_bits_remove (gdbarch,
bfd_get_start_address (abfd)
+ displacement);
- printf_filtered (_("\tEntry point: %s\n"),
- paddress (gdbarch, entry_point));
+ gdb_printf (_("\tEntry point: %s\n"),
+ paddress (gdbarch, entry_point));
}
for (const target_section &p : *t)
{
struct bfd_section *psect = p.the_bfd_section;
bfd *pbfd = psect->owner;
- printf_filtered ("\t%s", hex_string_custom (p.addr, wid));
- printf_filtered (" - %s", hex_string_custom (p.endaddr, wid));
+ gdb_printf ("\t%s", hex_string_custom (p.addr, wid));
+ gdb_printf (" - %s", hex_string_custom (p.endaddr, wid));
/* FIXME: A format of "08l" is not wide enough for file offsets
larger than 4GB. OTOH, making it "016l" isn't desirable either
@@ -961,14 +963,14 @@ print_section_info (const target_section_table *t, bfd *abfd)
format string accordingly. */
/* FIXME: i18n: Need to rewrite this sentence. */
if (info_verbose)
- printf_filtered (" @ %s",
- hex_string_custom (psect->filepos, 8));
- printf_filtered (" is %s", bfd_section_name (psect));
+ gdb_printf (" @ %s",
+ hex_string_custom (psect->filepos, 8));
+ gdb_printf (" is %s", bfd_section_name (psect));
if (pbfd != abfd)
- printf_filtered (" in %ps",
- styled_string (file_name_style.style (),
- bfd_get_filename (pbfd)));
- printf_filtered ("\n");
+ gdb_printf (" in %ps",
+ styled_string (file_name_style.style (),
+ bfd_get_filename (pbfd)));
+ gdb_printf ("\n");
}
}
@@ -979,7 +981,7 @@ exec_target::files_info ()
print_section_info (&current_program_space->target_sections (),
current_program_space->exec_bfd ());
else
- puts_filtered (_("\t<no file loaded>\n"));
+ gdb_puts (_("\t<no file loaded>\n"));
}
static void
@@ -1059,17 +1061,14 @@ _initialize_exec ()
{
struct cmd_list_element *c;
- if (!dbx_commands)
- {
- c = add_cmd ("file", class_files, file_command, _("\
+ c = add_cmd ("file", class_files, file_command, _("\
Use FILE as program to be debugged.\n\
It is read for its symbols, for getting the contents of pure memory,\n\
and it is the program executed when you use the `run' command.\n\
If FILE cannot be found as specified, your execution directory path\n\
($PATH) is searched for a command of that name.\n\
No arg means to have no executable file and no symbols."), &cmdlist);
- set_cmd_completer (c, filename_completer);
- }
+ set_cmd_completer (c, filename_completer);
c = add_cmd ("exec-file", class_files, exec_file_command, _("\
Use FILE as program for getting contents of pure memory.\n\
diff --git a/gdb/expop.h b/gdb/expop.h
index 279774ca3af..cfe96cbe589 100644
--- a/gdb/expop.h
+++ b/gdb/expop.h
@@ -64,10 +64,6 @@ extern struct value *eval_op_func_static_var (struct type *expect_type,
extern struct value *eval_op_register (struct type *expect_type,
struct expression *exp,
enum noside noside, const char *name);
-extern struct value *eval_op_string (struct type *expect_type,
- struct expression *exp,
- enum noside noside, int len,
- const char *string);
extern struct value *eval_op_ternop (struct type *expect_type,
struct expression *exp,
enum noside noside,
@@ -87,10 +83,6 @@ extern struct value *eval_op_member (struct type *expect_type,
struct expression *exp,
enum noside noside,
struct value *arg1, struct value *arg2);
-extern struct value *eval_op_concat (struct type *expect_type,
- struct expression *exp,
- enum noside noside,
- struct value *arg1, struct value *arg2);
extern struct value *eval_op_add (struct type *expect_type,
struct expression *exp,
enum noside noside,
@@ -233,7 +225,7 @@ check_objfile (struct type *type, struct objfile *objfile)
static inline bool
check_objfile (struct symbol *sym, struct objfile *objfile)
{
- return check_objfile (symbol_objfile (sym), objfile);
+ return check_objfile (sym->objfile (), objfile);
}
static inline bool
@@ -354,7 +346,7 @@ void
dump_for_expression (struct ui_file *stream, int depth,
const std::vector<T> &vals)
{
- fprintf_filtered (stream, _("%*sVector:\n"), depth, "");
+ gdb_printf (stream, _("%*sVector:\n"), depth, "");
for (auto &item : vals)
dump_for_expression (stream, depth + 1, item);
}
@@ -482,7 +474,7 @@ check_constant (ULONGEST cst)
static inline bool
check_constant (struct symbol *sym)
{
- enum address_class sc = SYMBOL_CLASS (sym);
+ enum address_class sc = sym->aclass ();
return (sc == LOC_BLOCK
|| sc == LOC_CONST
|| sc == LOC_CONST_BYTES
@@ -912,12 +904,7 @@ public:
value *evaluate (struct type *expect_type,
struct expression *exp,
- enum noside noside) override
- {
- const std::string &str = std::get<0> (m_storage);
- return eval_op_string (expect_type, exp, noside,
- str.size (), str.c_str ());
- }
+ enum noside noside) override;
enum exp_opcode opcode () const override
{ return OP_STRING; }
@@ -1010,20 +997,26 @@ public:
return std::get<1> (m_storage);
}
- /* Used for completion. Evaluate the LHS for type. */
- value *evaluate_lhs (struct expression *exp)
- {
- return std::get<0> (m_storage)->evaluate (nullptr, exp,
- EVAL_AVOID_SIDE_EFFECTS);
- }
-
value *evaluate_funcall (struct type *expect_type,
struct expression *exp,
enum noside noside,
const std::vector<operation_up> &args) override;
+ /* Try to complete this operation in the context of EXP. TRACKER is
+ the completion tracker to update. Return true if completion was
+ possible, false otherwise. */
+ virtual bool complete (struct expression *exp, completion_tracker &tracker)
+ {
+ return complete (exp, tracker, "");
+ }
+
protected:
+ /* Do the work of the public 'complete' method. PREFIX is prepended
+ to each result. */
+ bool complete (struct expression *exp, completion_tracker &tracker,
+ const char *prefix);
+
using tuple_holding_operation::tuple_holding_operation;
};
@@ -1167,7 +1160,7 @@ public:
= std::get<0> (m_storage)->evaluate_with_coercion (exp, noside);
value *rhs
= std::get<1> (m_storage)->evaluate_with_coercion (exp, noside);
- return eval_op_concat (expect_type, exp, noside, lhs, rhs);
+ return value_concat (lhs, rhs);
}
enum exp_opcode opcode () const override
@@ -1960,6 +1953,37 @@ protected:
override;
};
+/* Not a cast! Extract a value of a given type from the contents of a
+ value. The new value is extracted from the least significant bytes
+ of the old value. The new value's type must be no bigger than the
+ old values type. */
+class unop_extract_operation
+ : public maybe_constant_operation<operation_up, struct type *>
+{
+public:
+
+ using maybe_constant_operation::maybe_constant_operation;
+
+ value *evaluate (struct type *expect_type, struct expression *exp,
+ enum noside noside) override;
+
+ enum exp_opcode opcode () const override
+ { return UNOP_EXTRACT; }
+
+ /* Return the type referenced by this object. */
+ struct type *get_type () const
+ {
+ return std::get<1> (m_storage);
+ }
+
+protected:
+
+ void do_generate_ax (struct expression *exp,
+ struct agent_expr *ax,
+ struct axs_value *value,
+ struct type *cast_type) override;
+};
+
/* A type cast. */
class unop_cast_operation
: public maybe_constant_operation<operation_up, struct type *>
diff --git a/gdb/expprint.c b/gdb/expprint.c
index 381a10d85be..cef6ffb3566 100644
--- a/gdb/expprint.c
+++ b/gdb/expprint.c
@@ -71,63 +71,63 @@ namespace expr
void
dump_for_expression (struct ui_file *stream, int depth, enum exp_opcode op)
{
- fprintf_filtered (stream, _("%*sOperation: %s\n"), depth, "", op_name (op));
+ gdb_printf (stream, _("%*sOperation: %s\n"), depth, "", op_name (op));
}
void
dump_for_expression (struct ui_file *stream, int depth, const std::string &str)
{
- fprintf_filtered (stream, _("%*sString: %s\n"), depth, "", str.c_str ());
+ gdb_printf (stream, _("%*sString: %s\n"), depth, "", str.c_str ());
}
void
dump_for_expression (struct ui_file *stream, int depth, struct type *type)
{
- fprintf_filtered (stream, _("%*sType: "), depth, "");
+ gdb_printf (stream, _("%*sType: "), depth, "");
type_print (type, nullptr, stream, 0);
- fprintf_filtered (stream, "\n");
+ gdb_printf (stream, "\n");
}
void
dump_for_expression (struct ui_file *stream, int depth, CORE_ADDR addr)
{
- fprintf_filtered (stream, _("%*sConstant: %s\n"), depth, "",
- core_addr_to_string (addr));
+ gdb_printf (stream, _("%*sConstant: %s\n"), depth, "",
+ core_addr_to_string (addr));
}
void
dump_for_expression (struct ui_file *stream, int depth, internalvar *ivar)
{
- fprintf_filtered (stream, _("%*sInternalvar: $%s\n"), depth, "",
- internalvar_name (ivar));
+ gdb_printf (stream, _("%*sInternalvar: $%s\n"), depth, "",
+ internalvar_name (ivar));
}
void
dump_for_expression (struct ui_file *stream, int depth, symbol *sym)
{
- fprintf_filtered (stream, _("%*sSymbol: %s\n"), depth, "",
- sym->print_name ());
+ gdb_printf (stream, _("%*sSymbol: %s\n"), depth, "",
+ sym->print_name ());
}
void
dump_for_expression (struct ui_file *stream, int depth,
bound_minimal_symbol msym)
{
- fprintf_filtered (stream, _("%*sMinsym %s in objfile %s\n"), depth, "",
- msym.minsym->print_name (), objfile_name (msym.objfile));
+ gdb_printf (stream, _("%*sMinsym %s in objfile %s\n"), depth, "",
+ msym.minsym->print_name (), objfile_name (msym.objfile));
}
void
dump_for_expression (struct ui_file *stream, int depth, const block *bl)
{
- fprintf_filtered (stream, _("%*sBlock: %p\n"), depth, "", bl);
+ gdb_printf (stream, _("%*sBlock: %p\n"), depth, "", bl);
}
void
dump_for_expression (struct ui_file *stream, int depth,
const block_symbol &sym)
{
- fprintf_filtered (stream, _("%*sBlock symbol:\n"), depth, "");
+ gdb_printf (stream, _("%*sBlock symbol:\n"), depth, "");
dump_for_expression (stream, depth + 1, sym.symbol);
dump_for_expression (stream, depth + 1, sym.block);
}
@@ -136,56 +136,56 @@ void
dump_for_expression (struct ui_file *stream, int depth,
type_instance_flags flags)
{
- fprintf_filtered (stream, _("%*sType flags: "), depth, "");
+ gdb_printf (stream, _("%*sType flags: "), depth, "");
if (flags & TYPE_INSTANCE_FLAG_CONST)
- fputs_filtered ("const ", stream);
+ gdb_puts ("const ", stream);
if (flags & TYPE_INSTANCE_FLAG_VOLATILE)
- fputs_filtered ("volatile", stream);
- fprintf_filtered (stream, "\n");
+ gdb_puts ("volatile", stream);
+ gdb_printf (stream, "\n");
}
void
dump_for_expression (struct ui_file *stream, int depth,
enum c_string_type_values flags)
{
- fprintf_filtered (stream, _("%*sC string flags: "), depth, "");
+ gdb_printf (stream, _("%*sC string flags: "), depth, "");
switch (flags & ~C_CHAR)
{
case C_WIDE_STRING:
- fputs_filtered (_("wide "), stream);
+ gdb_puts (_("wide "), stream);
break;
case C_STRING_16:
- fputs_filtered (_("u16 "), stream);
+ gdb_puts (_("u16 "), stream);
break;
case C_STRING_32:
- fputs_filtered (_("u32 "), stream);
+ gdb_puts (_("u32 "), stream);
break;
default:
- fputs_filtered (_("ordinary "), stream);
+ gdb_puts (_("ordinary "), stream);
break;
}
if ((flags & C_CHAR) != 0)
- fputs_filtered (_("char"), stream);
+ gdb_puts (_("char"), stream);
else
- fputs_filtered (_("string"), stream);
- fputs_filtered ("\n", stream);
+ gdb_puts (_("string"), stream);
+ gdb_puts ("\n", stream);
}
void
dump_for_expression (struct ui_file *stream, int depth,
enum range_flag flags)
{
- fprintf_filtered (stream, _("%*sRange:"), depth, "");
+ gdb_printf (stream, _("%*sRange:"), depth, "");
if ((flags & RANGE_LOW_BOUND_DEFAULT) != 0)
- fputs_filtered (_("low-default "), stream);
+ gdb_puts (_("low-default "), stream);
if ((flags & RANGE_HIGH_BOUND_DEFAULT) != 0)
- fputs_filtered (_("high-default "), stream);
+ gdb_puts (_("high-default "), stream);
if ((flags & RANGE_HIGH_BOUND_EXCLUSIVE) != 0)
- fputs_filtered (_("high-exclusive "), stream);
+ gdb_puts (_("high-exclusive "), stream);
if ((flags & RANGE_HAS_STRIDE) != 0)
- fputs_filtered (_("has-stride"), stream);
- fprintf_filtered (stream, "\n");
+ gdb_puts (_("has-stride"), stream);
+ gdb_printf (stream, "\n");
}
void
@@ -198,9 +198,9 @@ dump_for_expression (struct ui_file *stream, int depth,
void
float_const_operation::dump (struct ui_file *stream, int depth) const
{
- fprintf_filtered (stream, _("%*sFloat: "), depth, "");
+ gdb_printf (stream, _("%*sFloat: "), depth, "");
print_floating (m_data.data (), m_type, stream);
- fprintf_filtered (stream, "\n");
+ gdb_printf (stream, "\n");
}
} /* namespace expr */
diff --git a/gdb/expression.h b/gdb/expression.h
index ff3990e979c..3ba68a2db93 100644
--- a/gdb/expression.h
+++ b/gdb/expression.h
@@ -232,8 +232,26 @@ extern expression_up parse_expression (const char *,
extern expression_up parse_expression_with_language (const char *string,
enum language lang);
-extern struct type *parse_expression_for_completion
- (const char *, gdb::unique_xmalloc_ptr<char> *, enum type_code *);
+
+class completion_tracker;
+
+/* Base class for expression completion. An instance of this
+ represents a completion request from the parser. */
+struct expr_completion_base
+{
+ /* Perform this object's completion. EXP is the expression in which
+ the completion occurs. TRACKER is the tracker to update with the
+ results. Return true if completion was possible (even if no
+ completions were found), false to fall back to ordinary
+ expression completion (i.e., symbol names). */
+ virtual bool complete (struct expression *exp,
+ completion_tracker &tracker) = 0;
+
+ virtual ~expr_completion_base () = default;
+};
+
+extern expression_up parse_expression_for_completion
+ (const char *, std::unique_ptr<expr_completion_base> *completer);
class innermost_block_tracker;
extern expression_up parse_exp_1 (const char **, CORE_ADDR pc,
diff --git a/gdb/extension-priv.h b/gdb/extension-priv.h
index ed2121a127b..d9450b51231 100644
--- a/gdb/extension-priv.h
+++ b/gdb/extension-priv.h
@@ -257,6 +257,12 @@ struct extension_language_ops
or an empty option. */
gdb::optional<std::string> (*colorize) (const std::string &name,
const std::string &contents);
+
+ /* Colorize a single line of disassembler output, CONTENT. This should
+ either return colorized (using ANSI terminal escapes) version of the
+ contents, or an empty optional. */
+ gdb::optional<std::string> (*colorize_disasm) (const std::string &content,
+ gdbarch *gdbarch);
};
/* State necessary to restore a signal handler to its previous value. */
diff --git a/gdb/extension.c b/gdb/extension.c
index f04e928d33d..8f39b86e952 100644
--- a/gdb/extension.c
+++ b/gdb/extension.c
@@ -904,6 +904,26 @@ ext_lang_colorize (const std::string &filename, const std::string &contents)
return result;
}
+/* See extension.h. */
+
+gdb::optional<std::string>
+ext_lang_colorize_disasm (const std::string &content, gdbarch *gdbarch)
+{
+ gdb::optional<std::string> result;
+
+ for (const struct extension_language_defn *extlang : extension_languages)
+ {
+ if (extlang->ops == nullptr
+ || extlang->ops->colorize_disasm == nullptr)
+ continue;
+ result = extlang->ops->colorize_disasm (content, gdbarch);
+ if (result.has_value ())
+ return result;
+ }
+
+ return result;
+}
+
/* Called via an observer before gdb prints its prompt.
Iterate over the extension languages giving them a chance to
change the prompt. The first one to change the prompt wins,
diff --git a/gdb/extension.h b/gdb/extension.h
index 64d7396f5b7..7eb89530c44 100644
--- a/gdb/extension.h
+++ b/gdb/extension.h
@@ -319,6 +319,14 @@ extern void get_matching_xmethod_workers
extern gdb::optional<std::string> ext_lang_colorize
(const std::string &filename, const std::string &contents);
+/* Try to colorize a single line of disassembler output, CONTENT for
+ GDBARCH. This will return either a colorized (using ANSI terminal
+ escapes) version of CONTENT, or an empty value if colorizing could not
+ be done. */
+
+extern gdb::optional<std::string> ext_lang_colorize_disasm
+ (const std::string &content, gdbarch *gdbarch);
+
#if GDB_SELF_TEST
namespace selftests {
extern void (*hook_set_active_ext_lang) ();
diff --git a/gdb/f-array-walker.h b/gdb/f-array-walker.h
index 24b53ff7697..ad97dd51cd3 100644
--- a/gdb/f-array-walker.h
+++ b/gdb/f-array-walker.h
@@ -115,11 +115,13 @@ struct fortran_array_walker_base_impl
{ return should_continue; }
/* Called when GDB starts iterating over a dimension of the array. The
- argument INNER_P is true for the inner most dimension (the dimension
- containing the actual elements of the array), and false for more outer
- dimensions. For a concrete example of how this function is called
- see the comment on process_element below. */
- void start_dimension (bool inner_p)
+ argument INDEX_TYPE is the type of the index used to address elements
+ in the dimension, NELTS holds the number of the elements there, and
+ INNER_P is true for the inner most dimension (the dimension containing
+ the actual elements of the array), and false for more outer dimensions.
+ For a concrete example of how this function is called see the comment
+ on process_element below. */
+ void start_dimension (struct type *index_type, LONGEST nelts, bool inner_p)
{ /* Nothing. */ }
/* Called when GDB finishes iterating over a dimension of the array. The
@@ -131,26 +133,47 @@ struct fortran_array_walker_base_impl
void finish_dimension (bool inner_p, bool last_p)
{ /* Nothing. */ }
+ /* Called when processing dimensions of the array other than the
+ innermost one. WALK_1 is the walker to normally call, ELT_TYPE is
+ the type of the element being extracted, and ELT_OFF is the offset
+ of the element from the start of array being walked. INDEX is the
+ value of the index the current element is at in the upper dimension.
+ Finally LAST_P is true only when this is the last element that will
+ be processed in this dimension. */
+ void process_dimension (gdb::function_view<void (struct type *,
+ int, bool)> walk_1,
+ struct type *elt_type, LONGEST elt_off,
+ LONGEST index, bool last_p)
+ {
+ walk_1 (elt_type, elt_off, last_p);
+ }
+
/* Called when processing the inner most dimension of the array, for
every element in the array. ELT_TYPE is the type of the element being
extracted, and ELT_OFF is the offset of the element from the start of
- array being walked, and LAST_P is true only when this is the last
- element that will be processed in this dimension.
+ array being walked. INDEX is the value of the index the current
+ element is at in the upper dimension. Finally LAST_P is true only
+ when this is the last element that will be processed in this dimension.
- Given this two dimensional array ((1, 2) (3, 4)), the calls to
+ Given this two dimensional array ((1, 2) (3, 4) (5, 6)), the calls to
start_dimension, process_element, and finish_dimension look like this:
- start_dimension (false);
- start_dimension (true);
+ start_dimension (INDEX_TYPE, 3, false);
+ start_dimension (INDEX_TYPE, 2, true);
process_element (TYPE, OFFSET, false);
process_element (TYPE, OFFSET, true);
finish_dimension (true, false);
- start_dimension (true);
+ start_dimension (INDEX_TYPE, 2, true);
+ process_element (TYPE, OFFSET, false);
+ process_element (TYPE, OFFSET, true);
+ finish_dimension (true, true);
+ start_dimension (INDEX_TYPE, 2, true);
process_element (TYPE, OFFSET, false);
process_element (TYPE, OFFSET, true);
finish_dimension (true, true);
finish_dimension (false, true); */
- void process_element (struct type *elt_type, LONGEST elt_off, bool last_p)
+ void process_element (struct type *elt_type, LONGEST elt_off,
+ LONGEST index, bool last_p)
{ /* Nothing. */ }
};
@@ -177,22 +200,23 @@ public:
: m_type (type),
m_address (address),
m_impl (type, address, args...),
- m_ndimensions (calc_f77_array_dims (m_type))
+ m_ndimensions (calc_f77_array_dims (m_type)),
+ m_nss (0)
{ /* Nothing. */ }
/* Walk the array. */
void
walk ()
{
- walk_1 (1, m_type, 0, false);
+ walk_1 (m_type, 0, false);
}
private:
- /* The core of the array walking algorithm. NSS is the current
- dimension number being processed, TYPE is the type of this dimension,
- and OFFSET is the offset (in bytes) for the start of this dimension. */
+ /* The core of the array walking algorithm. TYPE is the type of
+ the current dimension being processed and OFFSET is the offset
+ (in bytes) for the start of this dimension. */
void
- walk_1 (int nss, struct type *type, int offset, bool last_p)
+ walk_1 (struct type *type, int offset, bool last_p)
{
/* Extract the range, and get lower and upper bounds. */
struct type *range_type = check_typedef (type)->index_type ();
@@ -204,9 +228,13 @@ private:
dimension. */
fortran_array_offset_calculator calc (type);
- m_impl.start_dimension (nss == m_ndimensions);
+ m_nss++;
+ gdb_assert (range_type->code () == TYPE_CODE_RANGE);
+ m_impl.start_dimension (TYPE_TARGET_TYPE (range_type),
+ upperbound - lowerbound + 1,
+ m_nss == m_ndimensions);
- if (nss != m_ndimensions)
+ if (m_nss != m_ndimensions)
{
struct type *subarray_type = TYPE_TARGET_TYPE (check_typedef (type));
@@ -220,7 +248,12 @@ private:
LONGEST new_offset = offset + calc.index_offset (i);
/* Now print the lower dimension. */
- walk_1 (nss + 1, subarray_type, new_offset, (i == upperbound));
+ m_impl.process_dimension
+ ([this] (struct type *w_type, int w_offset, bool w_last_p) -> void
+ {
+ this->walk_1 (w_type, w_offset, w_last_p);
+ },
+ subarray_type, new_offset, i, i == upperbound);
}
}
else
@@ -241,11 +274,12 @@ private:
elt_type = resolve_dynamic_type (elt_type, {}, e_address);
}
- m_impl.process_element (elt_type, elt_off, (i == upperbound));
+ m_impl.process_element (elt_type, elt_off, i, i == upperbound);
}
}
- m_impl.finish_dimension (nss == m_ndimensions, last_p || nss == 1);
+ m_impl.finish_dimension (m_nss == m_ndimensions, last_p || m_nss == 1);
+ m_nss--;
}
/* The array type being processed. */
@@ -260,6 +294,9 @@ private:
/* The total number of dimensions in M_TYPE. */
int m_ndimensions;
+
+ /* The current dimension number being processed. */
+ int m_nss;
};
#endif /* F_ARRAY_WALKER_H */
diff --git a/gdb/f-exp.h b/gdb/f-exp.h
index d5d267e7784..6b6bf617223 100644
--- a/gdb/f-exp.h
+++ b/gdb/f-exp.h
@@ -32,26 +32,85 @@ extern struct value *eval_op_f_mod (struct type *expect_type,
enum noside noside,
enum exp_opcode opcode,
struct value *arg1, struct value *arg2);
+
+/* Implement expression evaluation for Fortran's CEILING intrinsic function
+ called with one argument. For EXPECT_TYPE, EXP, and NOSIDE see
+ expression::evaluate (in expression.h). OPCODE will always be
+ FORTRAN_CEILING and ARG1 is the argument passed to CEILING. */
+
extern struct value *eval_op_f_ceil (struct type *expect_type,
struct expression *exp,
enum noside noside,
enum exp_opcode opcode,
struct value *arg1);
+
+/* Implement expression evaluation for Fortran's CEILING intrinsic function
+ called with two arguments. For EXPECT_TYPE, EXP, and NOSIDE see
+ expression::evaluate (in expression.h). OPCODE will always be
+ FORTRAN_CEILING, ARG1 is the first argument passed to CEILING, and KIND_ARG
+ is the type corresponding to the KIND parameter passed to CEILING. */
+
+extern value *eval_op_f_ceil (type *expect_type, expression *exp,
+ noside noside, exp_opcode opcode, value *arg1,
+ type *kind_arg);
+
+/* Implement expression evaluation for Fortran's FLOOR intrinsic function
+ called with one argument. For EXPECT_TYPE, EXP, and NOSIDE see
+ expression::evaluate (in expression.h). OPCODE will always be FORTRAN_FLOOR
+ and ARG1 is the argument passed to FLOOR. */
+
extern struct value *eval_op_f_floor (struct type *expect_type,
struct expression *exp,
enum noside noside,
enum exp_opcode opcode,
struct value *arg1);
+
+/* Implement expression evaluation for Fortran's FLOOR intrinsic function
+ called with two arguments. For EXPECT_TYPE, EXP, and NOSIDE see
+ expression::evaluate (in expression.h). OPCODE will always be
+ FORTRAN_FLOOR, ARG1 is the first argument passed to FLOOR, and KIND_ARG is
+ the type corresponding to the KIND parameter passed to FLOOR. */
+
+extern value *eval_op_f_floor (type *expect_type, expression *exp,
+ noside noside, exp_opcode opcode, value *arg1,
+ type *kind_arg);
+
extern struct value *eval_op_f_modulo (struct type *expect_type,
struct expression *exp,
enum noside noside,
enum exp_opcode opcode,
struct value *arg1, struct value *arg2);
+
+/* Implement expression evaluation for Fortran's CMPLX intrinsic function
+ called with one argument. For EXPECT_TYPE, EXP, and NOSIDE see
+ expression::evaluate (in expression.h). OPCODE will always be
+ FORTRAN_CMPLX and ARG1 is the argument passed to CMPLX if. */
+
+extern value *eval_op_f_cmplx (type *expect_type, expression *exp,
+ noside noside, exp_opcode opcode, value *arg1);
+
+/* Implement expression evaluation for Fortran's CMPLX intrinsic function
+ called with two arguments. For EXPECT_TYPE, EXP, and NOSIDE see
+ expression::evaluate (in expression.h). OPCODE will always be
+ FORTRAN_CMPLX, ARG1 and ARG2 are the arguments passed to CMPLX. */
+
extern struct value *eval_op_f_cmplx (struct type *expect_type,
struct expression *exp,
enum noside noside,
enum exp_opcode opcode,
struct value *arg1, struct value *arg2);
+
+/* Implement expression evaluation for Fortran's CMPLX intrinsic function
+ called with three arguments. For EXPECT_TYPE, EXP, and NOSIDE see
+ expression::evaluate (in expression.h). OPCODE will always be
+ FORTRAN_CMPLX, ARG1 and ARG2 are real and imaginary part passed to CMPLX,
+ and KIND_ARG is the type corresponding to the KIND parameter passed to
+ CMPLX. */
+
+extern value *eval_op_f_cmplx (type *expect_type, expression *exp,
+ noside noside, exp_opcode opcode, value *arg1,
+ value *arg2, type *kind_arg);
+
extern struct value *eval_op_f_kind (struct type *expect_type,
struct expression *exp,
enum noside noside,
@@ -92,7 +151,7 @@ extern struct value *eval_op_f_rank (struct type *expect_type,
/* Implement expression evaluation for Fortran's SIZE keyword. For
EXPECT_TYPE, EXP, and NOSIDE see expression::evaluate (in
- expression.h). OP will always for FORTRAN_ARRAY_SIZE. ARG1 is the
+ expression.h). OPCODE will always for FORTRAN_ARRAY_SIZE. ARG1 is the
value passed to SIZE if it is only passed a single argument. For the
two argument form see the overload of this function below. */
@@ -113,6 +172,16 @@ extern struct value *eval_op_f_array_size (struct type *expect_type,
struct value *arg1,
struct value *arg2);
+/* Implement expression evaluation for Fortran's SIZE intrinsic function called
+ with three arguments. For EXPECT_TYPE, EXP, and NOSIDE see
+ expression::evaluate (in expression.h). OPCODE will always be
+ FORTRAN_ARRAY_SIZE, ARG1 and ARG2 the first two values passed to SIZE, and
+ KIND_ARG is the type corresponding to the KIND parameter passed to SIZE. */
+
+extern value *eval_op_f_array_size (type *expect_type, expression *exp,
+ noside noside, exp_opcode opcode,
+ value *arg1, value *arg2, type *kind_arg);
+
/* Implement the evaluation of Fortran's SHAPE keyword. EXPECTED_TYPE,
EXP, and NOSIDE are as for expression::evaluate (see expression.h). OP
will always be UNOP_FORTRAN_SHAPE, and ARG1 is the argument being passed
@@ -127,11 +196,68 @@ extern struct value *eval_op_f_array_shape (struct type *expect_type,
namespace expr
{
+/* Function prototype for Fortran intrinsic functions taking one argument and
+ one kind argument. */
+typedef value *binary_kind_ftype (type *expect_type, expression *exp,
+ noside noside, exp_opcode op, value *arg1,
+ type *kind_arg);
+
+/* Two-argument operation with the second argument being a kind argument. */
+template<exp_opcode OP, binary_kind_ftype FUNC>
+class fortran_kind_2arg
+ : public tuple_holding_operation<operation_up, type*>
+{
+public:
+
+ using tuple_holding_operation::tuple_holding_operation;
+
+ value *evaluate (type *expect_type, expression *exp, noside noside) override
+ {
+ value *arg1 = std::get<0> (m_storage)->evaluate (nullptr, exp, noside);
+ type *kind_arg = std::get<1> (m_storage);
+ return FUNC (expect_type, exp, noside, OP, arg1, kind_arg);
+ }
+
+ exp_opcode opcode () const override
+ { return OP; }
+};
+
+/* Function prototype for Fortran intrinsic functions taking two arguments and
+ one kind argument. */
+typedef value *ternary_kind_ftype (type *expect_type, expression *exp,
+ noside noside, exp_opcode op, value *arg1,
+ value *arg2, type *kind_arg);
+
+/* Three-argument operation with the third argument being a kind argument. */
+template<exp_opcode OP, ternary_kind_ftype FUNC>
+class fortran_kind_3arg
+ : public tuple_holding_operation<operation_up, operation_up, type *>
+{
+public:
+
+ using tuple_holding_operation::tuple_holding_operation;
+
+ value *evaluate (type *expect_type, expression *exp, noside noside) override
+ {
+ value *arg1 = std::get<0> (m_storage)->evaluate (nullptr, exp, noside);
+ value *arg2 = std::get<1> (m_storage)->evaluate (nullptr, exp, noside);
+ type *kind_arg = std::get<2> (m_storage);
+ return FUNC (expect_type, exp, noside, OP, arg1, arg2, kind_arg);
+ }
+
+ exp_opcode opcode () const override
+ { return OP; }
+};
+
using fortran_abs_operation = unop_operation<UNOP_ABS, eval_op_f_abs>;
-using fortran_ceil_operation = unop_operation<UNOP_FORTRAN_CEILING,
- eval_op_f_ceil>;
-using fortran_floor_operation = unop_operation<UNOP_FORTRAN_FLOOR,
- eval_op_f_floor>;
+using fortran_ceil_operation_1arg = unop_operation<FORTRAN_CEILING,
+ eval_op_f_ceil>;
+using fortran_ceil_operation_2arg = fortran_kind_2arg<FORTRAN_CEILING,
+ eval_op_f_ceil>;
+using fortran_floor_operation_1arg = unop_operation<FORTRAN_FLOOR,
+ eval_op_f_floor>;
+using fortran_floor_operation_2arg = fortran_kind_2arg<FORTRAN_FLOOR,
+ eval_op_f_floor>;
using fortran_kind_operation = unop_operation<UNOP_FORTRAN_KIND,
eval_op_f_kind>;
using fortran_allocated_operation = unop_operation<UNOP_FORTRAN_ALLOCATED,
@@ -152,31 +278,16 @@ using fortran_array_size_1arg = unop_operation<FORTRAN_ARRAY_SIZE,
eval_op_f_array_size>;
using fortran_array_size_2arg = binop_operation<FORTRAN_ARRAY_SIZE,
eval_op_f_array_size>;
+using fortran_array_size_3arg = fortran_kind_3arg<FORTRAN_ARRAY_SIZE,
+ eval_op_f_array_size>;
using fortran_array_shape_operation = unop_operation<UNOP_FORTRAN_SHAPE,
eval_op_f_array_shape>;
-
-/* The Fortran "complex" operation. */
-class fortran_cmplx_operation
- : public tuple_holding_operation<operation_up, operation_up>
-{
-public:
-
- using tuple_holding_operation::tuple_holding_operation;
-
- value *evaluate (struct type *expect_type,
- struct expression *exp,
- enum noside noside) override
- {
- value *arg1 = std::get<0> (m_storage)->evaluate (nullptr, exp, noside);
- value *arg2 = std::get<1> (m_storage)->evaluate (value_type (arg1),
- exp, noside);
- return eval_op_f_cmplx (expect_type, exp, noside, BINOP_FORTRAN_CMPLX,
- arg1, arg2);
- }
-
- enum exp_opcode opcode () const override
- { return BINOP_FORTRAN_CMPLX; }
-};
+using fortran_cmplx_operation_1arg = unop_operation<FORTRAN_CMPLX,
+ eval_op_f_cmplx>;
+using fortran_cmplx_operation_2arg = binop_operation<FORTRAN_CMPLX,
+ eval_op_f_cmplx>;
+using fortran_cmplx_operation_3arg = fortran_kind_3arg<FORTRAN_CMPLX,
+ eval_op_f_cmplx>;
/* OP_RANGE for Fortran. */
class fortran_range_operation
@@ -273,6 +384,21 @@ public:
{ return std::get<0> (m_storage); }
};
+/* Three-argument form of Fortran ubound/lbound intrinsics. */
+class fortran_bound_3arg
+ : public tuple_holding_operation<exp_opcode, operation_up, operation_up,
+ type *>
+{
+public:
+
+ using tuple_holding_operation::tuple_holding_operation;
+
+ value *evaluate (type *expect_type, expression *exp, noside noside) override;
+
+ exp_opcode opcode () const override
+ { return std::get<0> (m_storage); }
+};
+
/* Implement STRUCTOP_STRUCT for Fortran. */
class fortran_structop_operation
: public structop_base_operation
diff --git a/gdb/f-exp.y b/gdb/f-exp.y
index 42d3130bf8a..90cc2c65c7b 100644
--- a/gdb/f-exp.y
+++ b/gdb/f-exp.y
@@ -90,6 +90,18 @@ static void push_kind_type (LONGEST val, struct type *type);
static struct type *convert_to_kind_type (struct type *basetype, int kind);
+static void wrap_unop_intrinsic (exp_opcode opcode);
+
+static void wrap_binop_intrinsic (exp_opcode opcode);
+
+static void wrap_ternop_intrinsic (exp_opcode opcode);
+
+template<typename T>
+static void fortran_wrap2_kind (type *base_type);
+
+template<typename T>
+static void fortran_wrap3_kind (type *base_type);
+
using namespace expr;
%}
@@ -167,11 +179,12 @@ static int parse_number (struct parser_state *, const char *, int,
/* Special type cases, put in to allow the parser to distinguish different
legal basetypes. */
-%token INT_KEYWORD INT_S2_KEYWORD LOGICAL_S1_KEYWORD LOGICAL_S2_KEYWORD
+%token INT_S1_KEYWORD INT_S2_KEYWORD INT_KEYWORD INT_S4_KEYWORD INT_S8_KEYWORD
+%token LOGICAL_S1_KEYWORD LOGICAL_S2_KEYWORD LOGICAL_KEYWORD LOGICAL_S4_KEYWORD
%token LOGICAL_S8_KEYWORD
-%token LOGICAL_KEYWORD REAL_KEYWORD REAL_S8_KEYWORD REAL_S16_KEYWORD
-%token COMPLEX_KEYWORD
-%token COMPLEX_S8_KEYWORD COMPLEX_S16_KEYWORD COMPLEX_S32_KEYWORD
+%token REAL_KEYWORD REAL_S4_KEYWORD REAL_S8_KEYWORD REAL_S16_KEYWORD
+%token COMPLEX_KEYWORD COMPLEX_S4_KEYWORD COMPLEX_S8_KEYWORD
+%token COMPLEX_S16_KEYWORD
%token BOOL_AND BOOL_OR BOOL_NOT
%token SINGLE DOUBLE PRECISION
%token <lval> CHARACTER
@@ -180,7 +193,7 @@ static int parse_number (struct parser_state *, const char *, int,
%token <opcode> ASSIGN_MODIFY
%token <opcode> UNOP_INTRINSIC BINOP_INTRINSIC
-%token <opcode> UNOP_OR_BINOP_INTRINSIC
+%token <opcode> UNOP_OR_BINOP_INTRINSIC UNOP_OR_BINOP_OR_TERNOP_INTRINSIC
%left ','
%left ABOVE_COMMA
@@ -247,54 +260,6 @@ exp : KIND '(' exp ')' %prec UNARY
{ pstate->wrap<fortran_kind_operation> (); }
;
-exp : UNOP_OR_BINOP_INTRINSIC '('
- { pstate->start_arglist (); }
- one_or_two_args ')'
- {
- int n = pstate->end_arglist ();
- gdb_assert (n == 1 || n == 2);
- if ($1 == FORTRAN_ASSOCIATED)
- {
- if (n == 1)
- pstate->wrap<fortran_associated_1arg> ();
- else
- pstate->wrap2<fortran_associated_2arg> ();
- }
- else if ($1 == FORTRAN_ARRAY_SIZE)
- {
- if (n == 1)
- pstate->wrap<fortran_array_size_1arg> ();
- else
- pstate->wrap2<fortran_array_size_2arg> ();
- }
- else
- {
- std::vector<operation_up> args
- = pstate->pop_vector (n);
- gdb_assert ($1 == FORTRAN_LBOUND
- || $1 == FORTRAN_UBOUND);
- operation_up op;
- if (n == 1)
- op.reset
- (new fortran_bound_1arg ($1,
- std::move (args[0])));
- else
- op.reset
- (new fortran_bound_2arg ($1,
- std::move (args[0]),
- std::move (args[1])));
- pstate->push (std::move (op));
- }
- }
- ;
-
-one_or_two_args
- : exp
- { pstate->arglist_len = 1; }
- | exp ',' exp
- { pstate->arglist_len = 2; }
- ;
-
/* No more explicit array operators, we treat everything in F77 as
a function call. The disambiguation as to whether we are
doing a subscript operation or a function call is done
@@ -313,50 +278,56 @@ exp : exp '('
exp : UNOP_INTRINSIC '(' exp ')'
{
- switch ($1)
+ wrap_unop_intrinsic ($1);
+ }
+ ;
+
+exp : BINOP_INTRINSIC '(' exp ',' exp ')'
+ {
+ wrap_binop_intrinsic ($1);
+ }
+ ;
+
+exp : UNOP_OR_BINOP_INTRINSIC '('
+ { pstate->start_arglist (); }
+ arglist ')'
+ {
+ const int n = pstate->end_arglist ();
+
+ switch (n)
{
- case UNOP_ABS:
- pstate->wrap<fortran_abs_operation> ();
- break;
- case UNOP_FORTRAN_FLOOR:
- pstate->wrap<fortran_floor_operation> ();
- break;
- case UNOP_FORTRAN_CEILING:
- pstate->wrap<fortran_ceil_operation> ();
- break;
- case UNOP_FORTRAN_ALLOCATED:
- pstate->wrap<fortran_allocated_operation> ();
- break;
- case UNOP_FORTRAN_RANK:
- pstate->wrap<fortran_rank_operation> ();
- break;
- case UNOP_FORTRAN_SHAPE:
- pstate->wrap<fortran_array_shape_operation> ();
+ case 1:
+ wrap_unop_intrinsic ($1);
break;
- case UNOP_FORTRAN_LOC:
- pstate->wrap<fortran_loc_operation> ();
+ case 2:
+ wrap_binop_intrinsic ($1);
break;
default:
- gdb_assert_not_reached ("unhandled intrinsic");
+ gdb_assert_not_reached
+ ("wrong number of arguments for intrinsics");
}
}
- ;
-exp : BINOP_INTRINSIC '(' exp ',' exp ')'
+exp : UNOP_OR_BINOP_OR_TERNOP_INTRINSIC '('
+ { pstate->start_arglist (); }
+ arglist ')'
{
- switch ($1)
+ const int n = pstate->end_arglist ();
+
+ switch (n)
{
- case BINOP_MOD:
- pstate->wrap2<fortran_mod_operation> ();
+ case 1:
+ wrap_unop_intrinsic ($1);
break;
- case BINOP_FORTRAN_MODULO:
- pstate->wrap2<fortran_modulo_operation> ();
+ case 2:
+ wrap_binop_intrinsic ($1);
break;
- case BINOP_FORTRAN_CMPLX:
- pstate->wrap2<fortran_cmplx_operation> ();
+ case 3:
+ wrap_ternop_intrinsic ($1);
break;
default:
- gdb_assert_not_reached ("unhandled intrinsic");
+ gdb_assert_not_reached
+ ("wrong number of arguments for intrinsics");
}
}
;
@@ -757,42 +728,52 @@ func_mod: '(' ')'
typebase /* Implements (approximately): (type-qualifier)* type-specifier */
: TYPENAME
{ $$ = $1.type; }
+ | INT_S1_KEYWORD
+ { $$ = parse_f_type (pstate)->builtin_integer_s1; }
+ | INT_S2_KEYWORD
+ { $$ = parse_f_type (pstate)->builtin_integer_s2; }
| INT_KEYWORD
{ $$ = parse_f_type (pstate)->builtin_integer; }
- | INT_S2_KEYWORD
- { $$ = parse_f_type (pstate)->builtin_integer_s2; }
+ | INT_S4_KEYWORD
+ { $$ = parse_f_type (pstate)->builtin_integer; }
+ | INT_S8_KEYWORD
+ { $$ = parse_f_type (pstate)->builtin_integer_s8; }
| CHARACTER
{ $$ = parse_f_type (pstate)->builtin_character; }
- | LOGICAL_S8_KEYWORD
- { $$ = parse_f_type (pstate)->builtin_logical_s8; }
- | LOGICAL_KEYWORD
- { $$ = parse_f_type (pstate)->builtin_logical; }
- | LOGICAL_S2_KEYWORD
- { $$ = parse_f_type (pstate)->builtin_logical_s2; }
| LOGICAL_S1_KEYWORD
{ $$ = parse_f_type (pstate)->builtin_logical_s1; }
+ | LOGICAL_S2_KEYWORD
+ { $$ = parse_f_type (pstate)->builtin_logical_s2; }
+ | LOGICAL_KEYWORD
+ { $$ = parse_f_type (pstate)->builtin_logical; }
+ | LOGICAL_S4_KEYWORD
+ { $$ = parse_f_type (pstate)->builtin_logical; }
+ | LOGICAL_S8_KEYWORD
+ { $$ = parse_f_type (pstate)->builtin_logical_s8; }
| REAL_KEYWORD
{ $$ = parse_f_type (pstate)->builtin_real; }
+ | REAL_S4_KEYWORD
+ { $$ = parse_f_type (pstate)->builtin_real; }
| REAL_S8_KEYWORD
{ $$ = parse_f_type (pstate)->builtin_real_s8; }
| REAL_S16_KEYWORD
{ $$ = parse_f_type (pstate)->builtin_real_s16; }
| COMPLEX_KEYWORD
- { $$ = parse_f_type (pstate)->builtin_complex_s8; }
+ { $$ = parse_f_type (pstate)->builtin_complex; }
+ | COMPLEX_S4_KEYWORD
+ { $$ = parse_f_type (pstate)->builtin_complex; }
| COMPLEX_S8_KEYWORD
{ $$ = parse_f_type (pstate)->builtin_complex_s8; }
| COMPLEX_S16_KEYWORD
{ $$ = parse_f_type (pstate)->builtin_complex_s16; }
- | COMPLEX_S32_KEYWORD
- { $$ = parse_f_type (pstate)->builtin_complex_s32; }
| SINGLE PRECISION
{ $$ = parse_f_type (pstate)->builtin_real;}
| DOUBLE PRECISION
{ $$ = parse_f_type (pstate)->builtin_real_s8;}
| SINGLE COMPLEX_KEYWORD
- { $$ = parse_f_type (pstate)->builtin_complex_s8;}
+ { $$ = parse_f_type (pstate)->builtin_complex;}
| DOUBLE COMPLEX_KEYWORD
- { $$ = parse_f_type (pstate)->builtin_complex_s16;}
+ { $$ = parse_f_type (pstate)->builtin_complex_s8;}
;
nonempty_typelist
@@ -808,8 +789,11 @@ nonempty_typelist
}
;
-name : NAME
- { $$ = $1.stoken; }
+name
+ : NAME
+ { $$ = $1.stoken; }
+ | TYPENAME
+ { $$ = $1.stoken; }
;
name_not_typename : NAME
@@ -824,6 +808,179 @@ name_not_typename : NAME
%%
+/* Called to match intrinsic function calls with one argument to their
+ respective implementation and push the operation. */
+
+static void
+wrap_unop_intrinsic (exp_opcode code)
+{
+ switch (code)
+ {
+ case UNOP_ABS:
+ pstate->wrap<fortran_abs_operation> ();
+ break;
+ case FORTRAN_FLOOR:
+ pstate->wrap<fortran_floor_operation_1arg> ();
+ break;
+ case FORTRAN_CEILING:
+ pstate->wrap<fortran_ceil_operation_1arg> ();
+ break;
+ case UNOP_FORTRAN_ALLOCATED:
+ pstate->wrap<fortran_allocated_operation> ();
+ break;
+ case UNOP_FORTRAN_RANK:
+ pstate->wrap<fortran_rank_operation> ();
+ break;
+ case UNOP_FORTRAN_SHAPE:
+ pstate->wrap<fortran_array_shape_operation> ();
+ break;
+ case UNOP_FORTRAN_LOC:
+ pstate->wrap<fortran_loc_operation> ();
+ break;
+ case FORTRAN_ASSOCIATED:
+ pstate->wrap<fortran_associated_1arg> ();
+ break;
+ case FORTRAN_ARRAY_SIZE:
+ pstate->wrap<fortran_array_size_1arg> ();
+ break;
+ case FORTRAN_CMPLX:
+ pstate->wrap<fortran_cmplx_operation_1arg> ();
+ break;
+ case FORTRAN_LBOUND:
+ case FORTRAN_UBOUND:
+ pstate->push_new<fortran_bound_1arg> (code, pstate->pop ());
+ break;
+ default:
+ gdb_assert_not_reached ("unhandled intrinsic");
+ }
+}
+
+/* Called to match intrinsic function calls with two arguments to their
+ respective implementation and push the operation. */
+
+static void
+wrap_binop_intrinsic (exp_opcode code)
+{
+ switch (code)
+ {
+ case FORTRAN_FLOOR:
+ fortran_wrap2_kind<fortran_floor_operation_2arg>
+ (parse_f_type (pstate)->builtin_integer);
+ break;
+ case FORTRAN_CEILING:
+ fortran_wrap2_kind<fortran_ceil_operation_2arg>
+ (parse_f_type (pstate)->builtin_integer);
+ break;
+ case BINOP_MOD:
+ pstate->wrap2<fortran_mod_operation> ();
+ break;
+ case BINOP_FORTRAN_MODULO:
+ pstate->wrap2<fortran_modulo_operation> ();
+ break;
+ case FORTRAN_CMPLX:
+ pstate->wrap2<fortran_cmplx_operation_2arg> ();
+ break;
+ case FORTRAN_ASSOCIATED:
+ pstate->wrap2<fortran_associated_2arg> ();
+ break;
+ case FORTRAN_ARRAY_SIZE:
+ pstate->wrap2<fortran_array_size_2arg> ();
+ break;
+ case FORTRAN_LBOUND:
+ case FORTRAN_UBOUND:
+ {
+ operation_up arg2 = pstate->pop ();
+ operation_up arg1 = pstate->pop ();
+ pstate->push_new<fortran_bound_2arg> (code, std::move (arg1),
+ std::move (arg2));
+ }
+ break;
+ default:
+ gdb_assert_not_reached ("unhandled intrinsic");
+ }
+}
+
+/* Called to match intrinsic function calls with three arguments to their
+ respective implementation and push the operation. */
+
+static void
+wrap_ternop_intrinsic (exp_opcode code)
+{
+ switch (code)
+ {
+ case FORTRAN_LBOUND:
+ case FORTRAN_UBOUND:
+ {
+ operation_up kind_arg = pstate->pop ();
+ operation_up arg2 = pstate->pop ();
+ operation_up arg1 = pstate->pop ();
+
+ value *val = kind_arg->evaluate (nullptr, pstate->expout.get (),
+ EVAL_AVOID_SIDE_EFFECTS);
+ gdb_assert (val != nullptr);
+
+ type *follow_type
+ = convert_to_kind_type (parse_f_type (pstate)->builtin_integer,
+ value_as_long (val));
+
+ pstate->push_new<fortran_bound_3arg> (code, std::move (arg1),
+ std::move (arg2), follow_type);
+ }
+ break;
+ case FORTRAN_ARRAY_SIZE:
+ fortran_wrap3_kind<fortran_array_size_3arg>
+ (parse_f_type (pstate)->builtin_integer);
+ break;
+ case FORTRAN_CMPLX:
+ fortran_wrap3_kind<fortran_cmplx_operation_3arg>
+ (parse_f_type (pstate)->builtin_complex);
+ break;
+ default:
+ gdb_assert_not_reached ("unhandled intrinsic");
+ }
+}
+
+/* A helper that pops two operations (similar to wrap2), evaluates the last one
+ assuming it is a kind parameter, and wraps them in some other operation
+ pushing it to the stack. */
+
+template<typename T>
+static void
+fortran_wrap2_kind (type *base_type)
+{
+ operation_up kind_arg = pstate->pop ();
+ operation_up arg = pstate->pop ();
+
+ value *val = kind_arg->evaluate (nullptr, pstate->expout.get (),
+ EVAL_AVOID_SIDE_EFFECTS);
+ gdb_assert (val != nullptr);
+
+ type *follow_type = convert_to_kind_type (base_type, value_as_long (val));
+
+ pstate->push_new<T> (std::move (arg), follow_type);
+}
+
+/* A helper that pops three operations, evaluates the last one assuming it is a
+ kind parameter, and wraps them in some other operation pushing it to the
+ stack. */
+
+template<typename T>
+static void
+fortran_wrap3_kind (type *base_type)
+{
+ operation_up kind_arg = pstate->pop ();
+ operation_up arg2 = pstate->pop ();
+ operation_up arg1 = pstate->pop ();
+
+ value *val = kind_arg->evaluate (nullptr, pstate->expout.get (),
+ EVAL_AVOID_SIDE_EFFECTS);
+ gdb_assert (val != nullptr);
+
+ type *follow_type = convert_to_kind_type (base_type, value_as_long (val));
+
+ pstate->push_new<T> (std::move (arg1), std::move (arg2), follow_type);
+}
+
/* Take care of parsing a number (anything that starts with a digit).
Set yylval and return the token type; update lexptr.
LEN is the number of characters in it. */
@@ -834,8 +991,8 @@ static int
parse_number (struct parser_state *par_state,
const char *p, int len, int parsed_float, YYSTYPE *putithere)
{
- LONGEST n = 0;
- LONGEST prevn = 0;
+ ULONGEST n = 0;
+ ULONGEST prevn = 0;
int c;
int base = input_radix;
int unsigned_p = 0;
@@ -866,7 +1023,7 @@ parse_number (struct parser_state *par_state,
}
/* Handle base-switching prefixes 0x, 0t, 0d, 0 */
- if (p[0] == '0')
+ if (p[0] == '0' && len > 1)
switch (p[1])
{
case 'x':
@@ -926,7 +1083,7 @@ parse_number (struct parser_state *par_state,
/* If range checking enabled, portably test for unsigned overflow. */
if (RANGE_CHECK && n != 0)
{
- if ((unsigned_p && (unsigned)prevn >= (unsigned)n))
+ if ((unsigned_p && prevn >= n))
range_error (_("Overflow on numeric constant."));
}
prevn = n;
@@ -1017,14 +1174,14 @@ convert_to_kind_type (struct type *basetype, int kind)
if (kind == 1)
return parse_f_type (pstate)->builtin_character;
}
- else if (basetype == parse_f_type (pstate)->builtin_complex_s8)
+ else if (basetype == parse_f_type (pstate)->builtin_complex)
{
if (kind == 4)
- return parse_f_type (pstate)->builtin_complex_s8;
+ return parse_f_type (pstate)->builtin_complex;
else if (kind == 8)
- return parse_f_type (pstate)->builtin_complex_s16;
+ return parse_f_type (pstate)->builtin_complex_s8;
else if (kind == 16)
- return parse_f_type (pstate)->builtin_complex_s32;
+ return parse_f_type (pstate)->builtin_complex_s16;
}
else if (basetype == parse_f_type (pstate)->builtin_real)
{
@@ -1048,7 +1205,9 @@ convert_to_kind_type (struct type *basetype, int kind)
}
else if (basetype == parse_f_type (pstate)->builtin_integer)
{
- if (kind == 2)
+ if (kind == 1)
+ return parse_f_type (pstate)->builtin_integer_s1;
+ else if (kind == 2)
return parse_f_type (pstate)->builtin_integer_s2;
else if (kind == 4)
return parse_f_type (pstate)->builtin_integer;
@@ -1122,24 +1281,29 @@ static const struct f77_boolean_val boolean_values[] =
{ ".false.", 0 }
};
-static const struct token f77_keywords[] =
+static const token f_keywords[] =
{
/* Historically these have always been lowercase only in GDB. */
- { "complex_16", COMPLEX_S16_KEYWORD, OP_NULL, true },
- { "complex_32", COMPLEX_S32_KEYWORD, OP_NULL, true },
{ "character", CHARACTER, OP_NULL, true },
+ { "complex", COMPLEX_KEYWORD, OP_NULL, true },
+ { "complex_4", COMPLEX_S4_KEYWORD, OP_NULL, true },
+ { "complex_8", COMPLEX_S8_KEYWORD, OP_NULL, true },
+ { "complex_16", COMPLEX_S16_KEYWORD, OP_NULL, true },
+ { "integer_1", INT_S1_KEYWORD, OP_NULL, true },
{ "integer_2", INT_S2_KEYWORD, OP_NULL, true },
+ { "integer_4", INT_S4_KEYWORD, OP_NULL, true },
+ { "integer", INT_KEYWORD, OP_NULL, true },
+ { "integer_8", INT_S8_KEYWORD, OP_NULL, true },
{ "logical_1", LOGICAL_S1_KEYWORD, OP_NULL, true },
{ "logical_2", LOGICAL_S2_KEYWORD, OP_NULL, true },
- { "logical_8", LOGICAL_S8_KEYWORD, OP_NULL, true },
- { "complex_8", COMPLEX_S8_KEYWORD, OP_NULL, true },
- { "integer", INT_KEYWORD, OP_NULL, true },
{ "logical", LOGICAL_KEYWORD, OP_NULL, true },
+ { "logical_4", LOGICAL_S4_KEYWORD, OP_NULL, true },
+ { "logical_8", LOGICAL_S8_KEYWORD, OP_NULL, true },
+ { "real", REAL_KEYWORD, OP_NULL, true },
+ { "real_4", REAL_S4_KEYWORD, OP_NULL, true },
+ { "real_8", REAL_S8_KEYWORD, OP_NULL, true },
{ "real_16", REAL_S16_KEYWORD, OP_NULL, true },
- { "complex", COMPLEX_KEYWORD, OP_NULL, true },
{ "sizeof", SIZEOF, OP_NULL, true },
- { "real_8", REAL_S8_KEYWORD, OP_NULL, true },
- { "real", REAL_KEYWORD, OP_NULL, true },
{ "single", SINGLE, OP_NULL, true },
{ "double", DOUBLE, OP_NULL, true },
{ "precision", PRECISION, OP_NULL, true },
@@ -1148,16 +1312,16 @@ static const struct token f77_keywords[] =
{ "kind", KIND, OP_NULL, false },
{ "abs", UNOP_INTRINSIC, UNOP_ABS, false },
{ "mod", BINOP_INTRINSIC, BINOP_MOD, false },
- { "floor", UNOP_INTRINSIC, UNOP_FORTRAN_FLOOR, false },
- { "ceiling", UNOP_INTRINSIC, UNOP_FORTRAN_CEILING, false },
+ { "floor", UNOP_OR_BINOP_INTRINSIC, FORTRAN_FLOOR, false },
+ { "ceiling", UNOP_OR_BINOP_INTRINSIC, FORTRAN_CEILING, false },
{ "modulo", BINOP_INTRINSIC, BINOP_FORTRAN_MODULO, false },
- { "cmplx", BINOP_INTRINSIC, BINOP_FORTRAN_CMPLX, false },
- { "lbound", UNOP_OR_BINOP_INTRINSIC, FORTRAN_LBOUND, false },
- { "ubound", UNOP_OR_BINOP_INTRINSIC, FORTRAN_UBOUND, false },
+ { "cmplx", UNOP_OR_BINOP_OR_TERNOP_INTRINSIC, FORTRAN_CMPLX, false },
+ { "lbound", UNOP_OR_BINOP_OR_TERNOP_INTRINSIC, FORTRAN_LBOUND, false },
+ { "ubound", UNOP_OR_BINOP_OR_TERNOP_INTRINSIC, FORTRAN_UBOUND, false },
{ "allocated", UNOP_INTRINSIC, UNOP_FORTRAN_ALLOCATED, false },
{ "associated", UNOP_OR_BINOP_INTRINSIC, FORTRAN_ASSOCIATED, false },
{ "rank", UNOP_INTRINSIC, UNOP_FORTRAN_RANK, false },
- { "size", UNOP_OR_BINOP_INTRINSIC, FORTRAN_ARRAY_SIZE, false },
+ { "size", UNOP_OR_BINOP_OR_TERNOP_INTRINSIC, FORTRAN_ARRAY_SIZE, false },
{ "shape", UNOP_INTRINSIC, UNOP_FORTRAN_SHAPE, false },
{ "loc", UNOP_INTRINSIC, UNOP_FORTRAN_LOC, false },
};
@@ -1452,7 +1616,7 @@ yylex (void)
/* Catch specific keywords. */
- for (const auto &keyword : f77_keywords)
+ for (const auto &keyword : f_keywords)
if (strlen (keyword.oper) == namelen
&& ((!keyword.case_sensitive
&& strncasecmp (tokstart, keyword.oper, namelen) == 0)
@@ -1475,7 +1639,7 @@ yylex (void)
{
std::string tmp = copy_name (yylval.sval);
struct block_symbol result;
- const enum domain_enum_tag lookup_domains[] =
+ const domain_enum lookup_domains[] =
{
STRUCT_DOMAIN,
VAR_DOMAIN,
@@ -1487,9 +1651,9 @@ yylex (void)
{
result = lookup_symbol (tmp.c_str (), pstate->expression_context_block,
domain, NULL);
- if (result.symbol && SYMBOL_CLASS (result.symbol) == LOC_TYPEDEF)
+ if (result.symbol && result.symbol->aclass () == LOC_TYPEDEF)
{
- yylval.tsym.type = SYMBOL_TYPE (result.symbol);
+ yylval.tsym.type = result.symbol->type ();
return TYPENAME;
}
diff --git a/gdb/f-lang.c b/gdb/f-lang.c
index 3ef7597e52a..0f3de163c90 100644
--- a/gdb/f-lang.c
+++ b/gdb/f-lang.c
@@ -50,8 +50,8 @@ static void
show_repack_array_slices (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Repacking of Fortran array slices is %s.\n"),
- value);
+ gdb_printf (file, _("Repacking of Fortran array slices is %s.\n"),
+ value);
}
/* Debugging of Fortran's array slicing. */
@@ -63,8 +63,8 @@ show_fortran_array_slicing_debug (struct ui_file *file, int from_tty,
struct cmd_list_element *c,
const char *value)
{
- fprintf_filtered (file, _("Debugging of Fortran array slicing is %s.\n"),
- value);
+ gdb_printf (file, _("Debugging of Fortran array slicing is %s.\n"),
+ value);
}
/* Local functions */
@@ -101,8 +101,6 @@ f_language::get_encoding (struct type *type)
return encoding;
}
-
-
/* A helper function for the "bound" intrinsics that checks that TYPE
is an array. LBOUND_P is true for lower bound; this is used for
the error message, if any. */
@@ -135,9 +133,9 @@ fortran_bounds_all_dims (bool lbound_p,
/* Allocate a result value of the correct type. */
struct type *range
= create_static_range_type (nullptr,
- builtin_type (gdbarch)->builtin_int,
+ builtin_f_type (gdbarch)->builtin_integer,
1, ndimensions);
- struct type *elm_type = builtin_type (gdbarch)->builtin_long_long;
+ struct type *elm_type = builtin_f_type (gdbarch)->builtin_integer;
struct type *result_type = create_array_type (nullptr, elm_type, range);
struct value *result = allocate_value (result_type);
@@ -172,13 +170,12 @@ fortran_bounds_all_dims (bool lbound_p,
/* Return the lower bound (when LBOUND_P is true) or the upper bound (when
LBOUND_P is false) for dimension DIM_VAL (which must be an integer) of
- ARRAY (which must be an array). GDBARCH is the current architecture. */
+ ARRAY (which must be an array). RESULT_TYPE corresponds to the type kind
+ the function should be evaluated in. */
-static struct value *
-fortran_bounds_for_dimension (bool lbound_p,
- struct gdbarch *gdbarch,
- struct value *array,
- struct value *dim_val)
+static value *
+fortran_bounds_for_dimension (bool lbound_p, value *array, value *dim_val,
+ type* result_type)
{
/* Check the requested dimension is valid for this array. */
type *array_type = check_typedef (value_type (array));
@@ -192,9 +189,6 @@ fortran_bounds_for_dimension (bool lbound_p,
error (_("UBOUND dimension must be from 1 to %d"), ndimensions);
}
- /* The type for the result. */
- struct type *bound_type = builtin_type (gdbarch)->builtin_long_long;
-
/* Walk the dimensions backwards, due to the ordering in which arrays are
laid out the first dimension is the most inner. */
for (int i = ndimensions - 1; i >= 0; --i)
@@ -210,7 +204,7 @@ fortran_bounds_for_dimension (bool lbound_p,
else
b = f77_get_upperbound (array_type);
- return value_from_longest (bound_type, b);
+ return value_from_longest (result_type, b);
}
/* Peel off another dimension of the array. */
@@ -219,7 +213,6 @@ fortran_bounds_for_dimension (bool lbound_p,
gdb_assert_not_reached ("failed to find matching dimension");
}
-
/* Return the number of dimensions for a Fortran array or string. */
@@ -263,7 +256,7 @@ public:
will be creating values for each element as we load them and then copy
them into the M_DEST value. Set a value mark so we can free these
temporary values. */
- void start_dimension (bool inner_p)
+ void start_dimension (struct type *index_type, LONGEST nelts, bool inner_p)
{
if (inner_p)
{
@@ -330,7 +323,8 @@ public:
/* Create a lazy value in target memory representing a single element,
then load the element into GDB's memory and copy the contents into the
destination value. */
- void process_element (struct type *elt_type, LONGEST elt_off, bool last_p)
+ void process_element (struct type *elt_type, LONGEST elt_off,
+ LONGEST index, bool last_p)
{
copy_element_to_dest (value_at_lazy (elt_type, m_addr + elt_off));
}
@@ -368,7 +362,8 @@ public:
/* Extract an element of ELT_TYPE at offset (M_BASE_OFFSET + ELT_OFF)
from the content buffer of M_VAL then copy this extracted value into
the repacked destination value. */
- void process_element (struct type *elt_type, LONGEST elt_off, bool last_p)
+ void process_element (struct type *elt_type, LONGEST elt_off,
+ LONGEST index, bool last_p)
{
struct value *elt
= value_from_component (m_val, elt_type, (elt_off + m_base_offset));
@@ -579,8 +574,8 @@ eval_op_f_associated (struct type *expect_type,
}
/* Implement FORTRAN_ARRAY_SIZE expression, this corresponds to the 'SIZE'
- keyword. Both GDBARCH and LANG are extracted from the expression being
- evaluated. ARRAY is the value that should be an array, though this will
+ keyword. RESULT_TYPE corresponds to the type kind the function should be
+ evaluated in, ARRAY is the value that should be an array, though this will
not have been checked before calling this function. DIM is optional, if
present then it should be an integer identifying a dimension of the
array to ask about. As with ARRAY the validity of DIM is not checked
@@ -589,9 +584,8 @@ eval_op_f_associated (struct type *expect_type,
Return either the total number of elements in ARRAY (when DIM is
nullptr), or the number of elements in dimension DIM. */
-static struct value *
-fortran_array_size (struct gdbarch *gdbarch, const language_defn *lang,
- struct value *array, struct value *dim_val = nullptr)
+static value *
+fortran_array_size (value *array, value *dim_val, type *result_type)
{
/* Check that ARRAY is the correct type. */
struct type *array_type = check_typedef (value_type (array));
@@ -643,8 +637,6 @@ fortran_array_size (struct gdbarch *gdbarch, const language_defn *lang,
array_type = TYPE_TARGET_TYPE (array_type);
}
- struct type *result_type
- = builtin_f_type (gdbarch)->builtin_integer;
return value_from_longest (result_type, result);
}
@@ -658,7 +650,9 @@ eval_op_f_array_size (struct type *expect_type,
struct value *arg1)
{
gdb_assert (opcode == FORTRAN_ARRAY_SIZE);
- return fortran_array_size (exp->gdbarch, exp->language_defn, arg1);
+
+ type *result_type = builtin_f_type (exp->gdbarch)->builtin_integer;
+ return fortran_array_size (arg1, nullptr, result_type);
}
/* See f-exp.h. */
@@ -672,7 +666,21 @@ eval_op_f_array_size (struct type *expect_type,
struct value *arg2)
{
gdb_assert (opcode == FORTRAN_ARRAY_SIZE);
- return fortran_array_size (exp->gdbarch, exp->language_defn, arg1, arg2);
+
+ type *result_type = builtin_f_type (exp->gdbarch)->builtin_integer;
+ return fortran_array_size (arg1, arg2, result_type);
+}
+
+/* See f-exp.h. */
+
+value *eval_op_f_array_size (type *expect_type, expression *exp, noside noside,
+ exp_opcode opcode, value *arg1, value *arg2,
+ type *kind_arg)
+{
+ gdb_assert (opcode == FORTRAN_ARRAY_SIZE);
+ gdb_assert (kind_arg->code () == TYPE_CODE_INT);
+
+ return fortran_array_size (arg1, arg2, kind_arg);
}
/* Implement UNOP_FORTRAN_SHAPE expression. Both GDBARCH and LANG are
@@ -821,7 +829,22 @@ eval_op_f_mod (struct type *expect_type, struct expression *exp,
error (_("MOD of type %s not supported"), TYPE_SAFE_NAME (type));
}
-/* A helper function for UNOP_FORTRAN_CEILING. */
+/* A helper function for the different FORTRAN_CEILING overloads. Calculates
+ CEILING for ARG1 (a float type) and returns it in the requested kind type
+ RESULT_TYPE. */
+
+static value *
+fortran_ceil_operation (value *arg1, type *result_type)
+{
+ if (value_type (arg1)->code () != TYPE_CODE_FLT)
+ error (_("argument to CEILING must be of type float"));
+ double val = target_float_to_host_double (value_contents (arg1).data (),
+ value_type (arg1));
+ val = ceil (val);
+ return value_from_longest (result_type, val);
+}
+
+/* A helper function for FORTRAN_CEILING. */
struct value *
eval_op_f_ceil (struct type *expect_type, struct expression *exp,
@@ -829,32 +852,59 @@ eval_op_f_ceil (struct type *expect_type, struct expression *exp,
enum exp_opcode opcode,
struct value *arg1)
{
- struct type *type = value_type (arg1);
- if (type->code () != TYPE_CODE_FLT)
- error (_("argument to CEILING must be of type float"));
- double val
- = target_float_to_host_double (value_contents (arg1).data (),
- value_type (arg1));
- val = ceil (val);
- return value_from_host_double (type, val);
+ gdb_assert (opcode == FORTRAN_CEILING);
+ type *result_type = builtin_f_type (exp->gdbarch)->builtin_integer;
+ return fortran_ceil_operation (arg1, result_type);
}
-/* A helper function for UNOP_FORTRAN_FLOOR. */
+/* A helper function for FORTRAN_CEILING. */
-struct value *
-eval_op_f_floor (struct type *expect_type, struct expression *exp,
- enum noside noside,
- enum exp_opcode opcode,
- struct value *arg1)
+value *
+eval_op_f_ceil (type *expect_type, expression *exp, noside noside,
+ exp_opcode opcode, value *arg1, type *kind_arg)
{
- struct type *type = value_type (arg1);
- if (type->code () != TYPE_CODE_FLT)
+ gdb_assert (opcode == FORTRAN_CEILING);
+ gdb_assert (kind_arg->code () == TYPE_CODE_INT);
+ return fortran_ceil_operation (arg1, kind_arg);
+}
+
+/* A helper function for the different FORTRAN_FLOOR overloads. Calculates
+ FLOOR for ARG1 (a float type) and returns it in the requested kind type
+ RESULT_TYPE. */
+
+static value *
+fortran_floor_operation (value *arg1, type *result_type)
+{
+ if (value_type (arg1)->code () != TYPE_CODE_FLT)
error (_("argument to FLOOR must be of type float"));
- double val
- = target_float_to_host_double (value_contents (arg1).data (),
- value_type (arg1));
+ double val = target_float_to_host_double (value_contents (arg1).data (),
+ value_type (arg1));
val = floor (val);
- return value_from_host_double (type, val);
+ return value_from_longest (result_type, val);
+}
+
+/* A helper function for FORTRAN_FLOOR. */
+
+struct value *
+eval_op_f_floor (struct type *expect_type, struct expression *exp,
+ enum noside noside,
+ enum exp_opcode opcode,
+ struct value *arg1)
+{
+ gdb_assert (opcode == FORTRAN_FLOOR);
+ type *result_type = builtin_f_type (exp->gdbarch)->builtin_integer;
+ return fortran_floor_operation (arg1, result_type);
+}
+
+/* A helper function for FORTRAN_FLOOR. */
+
+struct value *
+eval_op_f_floor (type *expect_type, expression *exp, noside noside,
+ exp_opcode opcode, value *arg1, type *kind_arg)
+{
+ gdb_assert (opcode == FORTRAN_FLOOR);
+ gdb_assert (kind_arg->code () == TYPE_CODE_INT);
+ return fortran_floor_operation (arg1, kind_arg);
}
/* A helper function for BINOP_FORTRAN_MODULO. */
@@ -897,7 +947,25 @@ eval_op_f_modulo (struct type *expect_type, struct expression *exp,
error (_("MODULO of type %s not supported"), TYPE_SAFE_NAME (type));
}
-/* A helper function for BINOP_FORTRAN_CMPLX. */
+/* A helper function for FORTRAN_CMPLX. */
+
+value *
+eval_op_f_cmplx (type *expect_type, expression *exp, noside noside,
+ exp_opcode opcode, value *arg1)
+{
+ gdb_assert (opcode == FORTRAN_CMPLX);
+
+ type *result_type = builtin_f_type (exp->gdbarch)->builtin_complex;
+
+ if (value_type (arg1)->code () == TYPE_CODE_COMPLEX)
+ return value_cast (result_type, arg1);
+ else
+ return value_literal_complex (arg1,
+ value_zero (value_type (arg1), not_lval),
+ result_type);
+}
+
+/* A helper function for FORTRAN_CMPLX. */
struct value *
eval_op_f_cmplx (struct type *expect_type, struct expression *exp,
@@ -905,8 +973,28 @@ eval_op_f_cmplx (struct type *expect_type, struct expression *exp,
enum exp_opcode opcode,
struct value *arg1, struct value *arg2)
{
- struct type *type = builtin_f_type(exp->gdbarch)->builtin_complex_s16;
- return value_literal_complex (arg1, arg2, type);
+ if (value_type (arg1)->code () == TYPE_CODE_COMPLEX
+ || value_type (arg2)->code () == TYPE_CODE_COMPLEX)
+ error (_("Types of arguments for CMPLX called with more then one argument "
+ "must be REAL or INTEGER"));
+
+ type *result_type = builtin_f_type (exp->gdbarch)->builtin_complex;
+ return value_literal_complex (arg1, arg2, result_type);
+}
+
+/* A helper function for FORTRAN_CMPLX. */
+
+value *
+eval_op_f_cmplx (type *expect_type, expression *exp, noside noside,
+ exp_opcode opcode, value *arg1, value *arg2, type *kind_arg)
+{
+ gdb_assert (kind_arg->code () == TYPE_CODE_COMPLEX);
+ if (value_type (arg1)->code () == TYPE_CODE_COMPLEX
+ || value_type (arg2)->code () == TYPE_CODE_COMPLEX)
+ error (_("Types of arguments for CMPLX called with more then one argument "
+ "must be REAL or INTEGER"));
+
+ return value_literal_complex (arg1, arg2, kind_arg);
}
/* A helper function for UNOP_FORTRAN_KIND. */
@@ -1479,8 +1567,8 @@ fortran_bound_2arg::evaluate (struct type *expect_type,
/* User asked for the bounds of a specific dimension of the array. */
value *arg2 = std::get<2> (m_storage)->evaluate (nullptr, exp, noside);
- struct type *type = check_typedef (value_type (arg2));
- if (type->code () != TYPE_CODE_INT)
+ type *type_arg2 = check_typedef (value_type (arg2));
+ if (type_arg2->code () != TYPE_CODE_INT)
{
if (lbound_p)
error (_("LBOUND second argument should be an integer"));
@@ -1488,7 +1576,34 @@ fortran_bound_2arg::evaluate (struct type *expect_type,
error (_("UBOUND second argument should be an integer"));
}
- return fortran_bounds_for_dimension (lbound_p, exp->gdbarch, arg1, arg2);
+ type *result_type = builtin_f_type (exp->gdbarch)->builtin_integer;
+ return fortran_bounds_for_dimension (lbound_p, arg1, arg2, result_type);
+}
+
+value *
+fortran_bound_3arg::evaluate (type *expect_type,
+ expression *exp,
+ noside noside)
+{
+ const bool lbound_p = std::get<0> (m_storage) == FORTRAN_LBOUND;
+ value *arg1 = std::get<1> (m_storage)->evaluate (nullptr, exp, noside);
+ fortran_require_array (value_type (arg1), lbound_p);
+
+ /* User asked for the bounds of a specific dimension of the array. */
+ value *arg2 = std::get<2> (m_storage)->evaluate (nullptr, exp, noside);
+ type *type_arg2 = check_typedef (value_type (arg2));
+ if (type_arg2->code () != TYPE_CODE_INT)
+ {
+ if (lbound_p)
+ error (_("LBOUND second argument should be an integer"));
+ else
+ error (_("UBOUND second argument should be an integer"));
+ }
+
+ type *kind_arg = std::get<3> (m_storage);
+ gdb_assert (kind_arg->code () == TYPE_CODE_INT);
+
+ return fortran_bounds_for_dimension (lbound_p, arg1, arg2, kind_arg);
}
/* Implement STRUCTOP_STRUCT for Fortran. See operation::evaluate in
@@ -1533,6 +1648,20 @@ fortran_structop_operation::evaluate (struct type *expect_type,
/* See language.h. */
void
+f_language::print_array_index (struct type *index_type, LONGEST index,
+ struct ui_file *stream,
+ const value_print_options *options) const
+{
+ struct value *index_value = value_from_longest (index_type, index);
+
+ gdb_printf (stream, "(");
+ value_print (index_value, stream, options);
+ gdb_printf (stream, ") = ");
+}
+
+/* See language.h. */
+
+void
f_language::language_arch_info (struct gdbarch *gdbarch,
struct language_arch_info *lai) const
{
@@ -1552,12 +1681,12 @@ f_language::language_arch_info (struct gdbarch *gdbarch,
add (builtin->builtin_real);
add (builtin->builtin_real_s8);
add (builtin->builtin_real_s16);
+ add (builtin->builtin_complex);
add (builtin->builtin_complex_s8);
- add (builtin->builtin_complex_s16);
add (builtin->builtin_void);
lai->set_string_char_type (builtin->builtin_character);
- lai->set_bool_type (builtin->builtin_logical_s2, "logical");
+ lai->set_bool_type (builtin->builtin_logical, "logical");
}
/* See language.h. */
@@ -1606,36 +1735,37 @@ build_fortran_types (struct gdbarch *gdbarch)
builtin_f_type->builtin_logical_s1
= arch_boolean_type (gdbarch, TARGET_CHAR_BIT, 1, "logical*1");
- builtin_f_type->builtin_integer_s2
- = arch_integer_type (gdbarch, gdbarch_short_bit (gdbarch), 0,
- "integer*2");
-
- builtin_f_type->builtin_integer_s8
- = arch_integer_type (gdbarch, gdbarch_long_long_bit (gdbarch), 0,
- "integer*8");
-
builtin_f_type->builtin_logical_s2
- = arch_boolean_type (gdbarch, gdbarch_short_bit (gdbarch), 1,
- "logical*2");
+ = arch_boolean_type (gdbarch, gdbarch_short_bit (gdbarch), 1, "logical*2");
+
+ builtin_f_type->builtin_logical
+ = arch_boolean_type (gdbarch, gdbarch_int_bit (gdbarch), 1, "logical*4");
builtin_f_type->builtin_logical_s8
= arch_boolean_type (gdbarch, gdbarch_long_long_bit (gdbarch), 1,
"logical*8");
+ builtin_f_type->builtin_integer_s1
+ = arch_integer_type (gdbarch, TARGET_CHAR_BIT, 0, "integer*1");
+
+ builtin_f_type->builtin_integer_s2
+ = arch_integer_type (gdbarch, gdbarch_short_bit (gdbarch), 0, "integer*2");
+
builtin_f_type->builtin_integer
- = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch), 0,
- "integer");
+ = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch), 0, "integer*4");
- builtin_f_type->builtin_logical
- = arch_boolean_type (gdbarch, gdbarch_int_bit (gdbarch), 1,
- "logical*4");
+ builtin_f_type->builtin_integer_s8
+ = arch_integer_type (gdbarch, gdbarch_long_long_bit (gdbarch), 0,
+ "integer*8");
builtin_f_type->builtin_real
= arch_float_type (gdbarch, gdbarch_float_bit (gdbarch),
- "real", gdbarch_float_format (gdbarch));
+ "real*4", gdbarch_float_format (gdbarch));
+
builtin_f_type->builtin_real_s8
= arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
"real*8", gdbarch_double_format (gdbarch));
+
auto fmt = gdbarch_floatformat_for_type (gdbarch, "real(kind=16)", 128);
if (fmt != nullptr)
builtin_f_type->builtin_real_s16
@@ -1648,17 +1778,18 @@ build_fortran_types (struct gdbarch *gdbarch)
builtin_f_type->builtin_real_s16
= arch_type (gdbarch, TYPE_CODE_ERROR, 128, "real*16");
+ builtin_f_type->builtin_complex
+ = init_complex_type ("complex*4", builtin_f_type->builtin_real);
+
builtin_f_type->builtin_complex_s8
- = init_complex_type ("complex*8", builtin_f_type->builtin_real);
- builtin_f_type->builtin_complex_s16
- = init_complex_type ("complex*16", builtin_f_type->builtin_real_s8);
+ = init_complex_type ("complex*8", builtin_f_type->builtin_real_s8);
if (builtin_f_type->builtin_real_s16->code () == TYPE_CODE_ERROR)
- builtin_f_type->builtin_complex_s32
- = arch_type (gdbarch, TYPE_CODE_ERROR, 256, "complex*32");
+ builtin_f_type->builtin_complex_s16
+ = arch_type (gdbarch, TYPE_CODE_ERROR, 256, "complex*16");
else
- builtin_f_type->builtin_complex_s32
- = init_complex_type ("complex*32", builtin_f_type->builtin_real_s16);
+ builtin_f_type->builtin_complex_s16
+ = init_complex_type ("complex*16", builtin_f_type->builtin_real_s16);
return builtin_f_type;
}
diff --git a/gdb/f-lang.h b/gdb/f-lang.h
index 26b2c093095..aebd45db94a 100644
--- a/gdb/f-lang.h
+++ b/gdb/f-lang.h
@@ -59,6 +59,12 @@ public:
}
/* See language.h. */
+ void print_array_index (struct type *index_type,
+ LONGEST index,
+ struct ui_file *stream,
+ const value_print_options *options) const override;
+
+ /* See language.h. */
void language_arch_info (struct gdbarch *gdbarch,
struct language_arch_info *lai) const override;
@@ -155,9 +161,9 @@ public:
void printchar (int ch, struct type *chtype,
struct ui_file *stream) const override
{
- fputs_filtered ("'", stream);
+ gdb_puts ("'", stream);
emitchar (ch, chtype, stream, '\'');
- fputs_filtered ("'", stream);
+ gdb_puts ("'", stream);
}
/* See language.h. */
@@ -170,7 +176,7 @@ public:
const char *type_encoding = get_encoding (elttype);
if (TYPE_LENGTH (elttype) == 4)
- fputs_filtered ("4_", stream);
+ gdb_puts ("4_", stream);
if (!encoding || !*encoding)
encoding = type_encoding;
@@ -260,6 +266,17 @@ private:
int arrayprint_recurse_level,
bool print_rank_only) const;
+ /* If TYPE is an extended type, then print out derivation information.
+
+ A typical output could look like this:
+ "Type, extends(point) :: waypoint"
+ " Type point :: point"
+ " real(kind=4) :: angle"
+ "End Type waypoint". */
+
+ void f_type_print_derivation_info (struct type *type,
+ struct ui_file *stream) const;
+
/* Print the name of the type (or the ultimate pointer target, function
value or array element), or the description of a structure or union.
@@ -301,19 +318,20 @@ extern int calc_f77_array_dims (struct type *);
struct builtin_f_type
{
struct type *builtin_character;
- struct type *builtin_integer;
+ struct type *builtin_integer_s1;
struct type *builtin_integer_s2;
+ struct type *builtin_integer;
struct type *builtin_integer_s8;
- struct type *builtin_logical;
struct type *builtin_logical_s1;
struct type *builtin_logical_s2;
+ struct type *builtin_logical;
struct type *builtin_logical_s8;
struct type *builtin_real;
struct type *builtin_real_s8;
struct type *builtin_real_s16;
+ struct type *builtin_complex;
struct type *builtin_complex_s8;
struct type *builtin_complex_s16;
- struct type *builtin_complex_s32;
struct type *builtin_void;
};
diff --git a/gdb/f-typeprint.c b/gdb/f-typeprint.c
index a633e47b2d3..170187c6749 100644
--- a/gdb/f-typeprint.c
+++ b/gdb/f-typeprint.c
@@ -21,7 +21,7 @@
along with this program. If not, see <http://www.gnu.org/licenses/>. */
#include "defs.h"
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
#include "bfd.h"
#include "symtab.h"
#include "gdbtypes.h"
@@ -69,14 +69,14 @@ f_language::print_type (struct type *type, const char *varstring,
== TYPE_CODE_METHOD)
|| (TYPE_TARGET_TYPE (type)->code ()
== TYPE_CODE_ARRAY))))))
- fputs_filtered (" ", stream);
+ gdb_puts (" ", stream);
f_type_print_varspec_prefix (type, stream, show, 0);
if (varstring != NULL)
{
int demangled_args;
- fputs_filtered (varstring, stream);
+ gdb_puts (varstring, stream);
/* For demangled function names, we have the arglist as part of the name,
so don't print an additional pair of ()'s. */
@@ -111,7 +111,7 @@ f_language::f_type_print_varspec_prefix (struct type *type,
case TYPE_CODE_FUNC:
f_type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, 0, 0);
if (passed_a_ptr)
- fprintf_filtered (stream, "(");
+ gdb_printf (stream, "(");
break;
case TYPE_CODE_ARRAY:
@@ -121,6 +121,7 @@ f_language::f_type_print_varspec_prefix (struct type *type,
case TYPE_CODE_UNDEF:
case TYPE_CODE_STRUCT:
case TYPE_CODE_UNION:
+ case TYPE_CODE_NAMELIST:
case TYPE_CODE_ENUM:
case TYPE_CODE_INT:
case TYPE_CODE_FLT:
@@ -168,7 +169,7 @@ f_language::f_type_print_varspec_suffix (struct type *type,
arrayprint_recurse_level++;
if (arrayprint_recurse_level == 1)
- fprintf_filtered (stream, "(");
+ gdb_printf (stream, "(");
if (type_not_associated (type))
print_rank_only = true;
@@ -192,23 +193,23 @@ f_language::f_type_print_varspec_suffix (struct type *type,
print_rank_only);
if (print_rank_only)
- fprintf_filtered (stream, ":");
+ gdb_printf (stream, ":");
else
{
LONGEST lower_bound = f77_get_lowerbound (type);
if (lower_bound != 1) /* Not the default. */
- fprintf_filtered (stream, "%s:", plongest (lower_bound));
+ gdb_printf (stream, "%s:", plongest (lower_bound));
/* Make sure that, if we have an assumed size array, we
print out a warning and print the upperbound as '*'. */
if (type->bounds ()->high.kind () == PROP_UNDEFINED)
- fprintf_filtered (stream, "*");
+ gdb_printf (stream, "*");
else
{
LONGEST upper_bound = f77_get_upperbound (type);
- fputs_filtered (plongest (upper_bound), stream);
+ gdb_puts (plongest (upper_bound), stream);
}
}
@@ -218,9 +219,9 @@ f_language::f_type_print_varspec_suffix (struct type *type,
print_rank_only);
if (arrayprint_recurse_level == 1)
- fprintf_filtered (stream, ")");
+ gdb_printf (stream, ")");
else
- fprintf_filtered (stream, ",");
+ gdb_printf (stream, ",");
arrayprint_recurse_level--;
break;
@@ -228,7 +229,7 @@ f_language::f_type_print_varspec_suffix (struct type *type,
case TYPE_CODE_REF:
f_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0, 1, 0,
arrayprint_recurse_level, false);
- fprintf_filtered (stream, " )");
+ gdb_printf (stream, " )");
break;
case TYPE_CODE_FUNC:
@@ -239,8 +240,8 @@ f_language::f_type_print_varspec_suffix (struct type *type,
passed_a_ptr, 0,
arrayprint_recurse_level, false);
if (passed_a_ptr)
- fprintf_filtered (stream, ") ");
- fprintf_filtered (stream, "(");
+ gdb_printf (stream, ") ");
+ gdb_printf (stream, "(");
if (nfields == 0 && type->is_prototyped ())
print_type (builtin_f_type (type->arch ())->builtin_void,
"", stream, -1, 0, 0);
@@ -249,18 +250,19 @@ f_language::f_type_print_varspec_suffix (struct type *type,
{
if (i > 0)
{
- fputs_filtered (", ", stream);
- wrap_here (" ");
+ gdb_puts (", ", stream);
+ stream->wrap_here (4);
}
print_type (type->field (i).type (), "", stream, -1, 0, 0);
}
- fprintf_filtered (stream, ")");
+ gdb_printf (stream, ")");
}
break;
case TYPE_CODE_UNDEF:
case TYPE_CODE_STRUCT:
case TYPE_CODE_UNION:
+ case TYPE_CODE_NAMELIST:
case TYPE_CODE_ENUM:
case TYPE_CODE_INT:
case TYPE_CODE_FLT:
@@ -283,6 +285,19 @@ f_language::f_type_print_varspec_suffix (struct type *type,
/* See f-lang.h. */
void
+f_language::f_type_print_derivation_info (struct type *type,
+ struct ui_file *stream) const
+{
+ /* Fortran doesn't support multiple inheritance. */
+ const int i = 0;
+
+ if (TYPE_N_BASECLASSES (type) > 0)
+ gdb_printf (stream, ", extends(%s) ::", TYPE_BASECLASS (type, i)->name ());
+}
+
+/* See f-lang.h. */
+
+void
f_language::f_type_print_base (struct type *type, struct ui_file *stream,
int show, int level) const
{
@@ -290,7 +305,7 @@ f_language::f_type_print_base (struct type *type, struct ui_file *stream,
QUIT;
- wrap_here (" ");
+ stream->wrap_here (4);
if (type == NULL)
{
fputs_styled ("<type unknown>", metadata_style.style (), stream);
@@ -305,9 +320,10 @@ f_language::f_type_print_base (struct type *type, struct ui_file *stream,
const char *prefix = "";
if (type->code () == TYPE_CODE_UNION)
prefix = "Type, C_Union :: ";
- else if (type->code () == TYPE_CODE_STRUCT)
+ else if (type->code () == TYPE_CODE_STRUCT
+ || type->code () == TYPE_CODE_NAMELIST)
prefix = "Type ";
- fprintf_filtered (stream, "%*s%s%s", level, "", prefix, type->name ());
+ gdb_printf (stream, "%*s%s%s", level, "", prefix, type->name ());
return;
}
@@ -331,33 +347,33 @@ f_language::f_type_print_base (struct type *type, struct ui_file *stream,
break;
case TYPE_CODE_PTR:
- fprintf_filtered (stream, "%*sPTR TO -> ( ", level, "");
+ gdb_printf (stream, "%*sPTR TO -> ( ", level, "");
f_type_print_base (TYPE_TARGET_TYPE (type), stream, show, 0);
break;
case TYPE_CODE_REF:
- fprintf_filtered (stream, "%*sREF TO -> ( ", level, "");
+ gdb_printf (stream, "%*sREF TO -> ( ", level, "");
f_type_print_base (TYPE_TARGET_TYPE (type), stream, show, 0);
break;
case TYPE_CODE_VOID:
{
struct type *void_type = builtin_f_type (type->arch ())->builtin_void;
- fprintf_filtered (stream, "%*s%s", level, "", void_type->name ());
+ gdb_printf (stream, "%*s%s", level, "", void_type->name ());
}
break;
case TYPE_CODE_UNDEF:
- fprintf_filtered (stream, "%*sstruct <unknown>", level, "");
+ gdb_printf (stream, "%*sstruct <unknown>", level, "");
break;
case TYPE_CODE_ERROR:
- fprintf_filtered (stream, "%*s%s", level, "", TYPE_ERROR_NAME (type));
+ gdb_printf (stream, "%*s%s", level, "", TYPE_ERROR_NAME (type));
break;
case TYPE_CODE_RANGE:
/* This should not occur. */
- fprintf_filtered (stream, "%*s<range type>", level, "");
+ gdb_printf (stream, "%*s<range type>", level, "");
break;
case TYPE_CODE_CHAR:
@@ -367,7 +383,7 @@ f_language::f_type_print_base (struct type *type, struct ui_file *stream,
C-oriented, we must change these to "character" from "char". */
if (strcmp (type->name (), "char") == 0)
- fprintf_filtered (stream, "%*scharacter", level, "");
+ gdb_printf (stream, "%*scharacter", level, "");
else
goto default_case;
break;
@@ -383,42 +399,50 @@ f_language::f_type_print_base (struct type *type, struct ui_file *stream,
{
LONGEST upper_bound = f77_get_upperbound (type);
- fprintf_filtered (stream, "character*%s", pulongest (upper_bound));
+ gdb_printf (stream, "character*%s", pulongest (upper_bound));
}
else
- fprintf_filtered (stream, "%*scharacter*(*)", level, "");
+ gdb_printf (stream, "%*scharacter*(*)", level, "");
break;
case TYPE_CODE_STRUCT:
case TYPE_CODE_UNION:
+ case TYPE_CODE_NAMELIST:
if (type->code () == TYPE_CODE_UNION)
- fprintf_filtered (stream, "%*sType, C_Union :: ", level, "");
+ gdb_printf (stream, "%*sType, C_Union ::", level, "");
else
- fprintf_filtered (stream, "%*sType ", level, "");
- fputs_filtered (type->name (), stream);
+ gdb_printf (stream, "%*sType", level, "");
+
+ if (show > 0)
+ f_type_print_derivation_info (type, stream);
+
+ gdb_puts (" ", stream);
+
+ gdb_puts (type->name (), stream);
+
/* According to the definition,
we only print structure elements in case show > 0. */
if (show > 0)
{
- fputs_filtered ("\n", stream);
+ gdb_puts ("\n", stream);
for (index = 0; index < type->num_fields (); index++)
{
f_type_print_base (type->field (index).type (), stream,
show - 1, level + 4);
- fputs_filtered (" :: ", stream);
+ gdb_puts (" :: ", stream);
fputs_styled (type->field (index).name (),
variable_name_style.style (), stream);
f_type_print_varspec_suffix (type->field (index).type (),
stream, show - 1, 0, 0, 0, false);
- fputs_filtered ("\n", stream);
+ gdb_puts ("\n", stream);
}
- fprintf_filtered (stream, "%*sEnd Type ", level, "");
- fputs_filtered (type->name (), stream);
+ gdb_printf (stream, "%*sEnd Type ", level, "");
+ gdb_puts (type->name (), stream);
}
break;
case TYPE_CODE_MODULE:
- fprintf_filtered (stream, "%*smodule %s", level, "", type->name ());
+ gdb_printf (stream, "%*smodule %s", level, "", type->name ());
break;
default_case:
@@ -428,12 +452,12 @@ f_language::f_type_print_base (struct type *type, struct ui_file *stream,
the type name is, as recorded in the type itself. If there
is no type name, then complain. */
if (type->name () != NULL)
- fprintf_filtered (stream, "%*s%s", level, "", type->name ());
+ gdb_printf (stream, "%*s%s", level, "", type->name ());
else
error (_("Invalid type code (%d) in symbol table."), type->code ());
break;
}
if (TYPE_IS_ALLOCATABLE (type))
- fprintf_filtered (stream, ", allocatable");
+ gdb_printf (stream, ", allocatable");
}
diff --git a/gdb/f-valprint.c b/gdb/f-valprint.c
index c267469cd23..6a3f83c2194 100644
--- a/gdb/f-valprint.c
+++ b/gdb/f-valprint.c
@@ -21,6 +21,7 @@
along with this program. If not, see <http://www.gnu.org/licenses/>. */
#include "defs.h"
+#include "annotate.h"
#include "symtab.h"
#include "gdbtypes.h"
#include "expression.h"
@@ -42,7 +43,7 @@ static void f77_get_dynamic_length_of_aggregate (struct type *);
LONGEST
f77_get_lowerbound (struct type *type)
{
- if (type->bounds ()->low.kind () == PROP_UNDEFINED)
+ if (type->bounds ()->low.kind () != PROP_CONST)
error (_("Lower bound may not be '*' in F77"));
return type->bounds ()->low.const_val ();
@@ -51,7 +52,7 @@ f77_get_lowerbound (struct type *type)
LONGEST
f77_get_upperbound (struct type *type)
{
- if (type->bounds ()->high.kind () == PROP_UNDEFINED)
+ if (type->bounds ()->high.kind () != PROP_CONST)
{
/* We have an assumed size array on our hands. Assume that
upper_bound == lower_bound so that we show at least 1 element.
@@ -96,6 +97,17 @@ f77_get_dynamic_length_of_aggregate (struct type *type)
* TYPE_LENGTH (check_typedef (TYPE_TARGET_TYPE (type)));
}
+/* Per-dimension statistics. */
+
+struct dimension_stats
+{
+ /* The type of the index used to address elements in the dimension. */
+ struct type *index_type;
+
+ /* Total number of elements in the dimension, counted as we go. */
+ int nelts;
+};
+
/* A class used by FORTRAN_PRINT_ARRAY as a specialisation of the array
walking template. This specialisation prints Fortran arrays. */
@@ -117,7 +129,10 @@ public:
m_val (val),
m_stream (stream),
m_recurse (recurse),
- m_options (options)
+ m_options (options),
+ m_dimension (0),
+ m_nrepeats (0),
+ m_stats (0)
{ /* Nothing. */ }
/* Called while iterating over the array bounds. When SHOULD_CONTINUE is
@@ -129,15 +144,25 @@ public:
{
bool cont = should_continue && (m_elts < m_options->print_max);
if (!cont && should_continue)
- fputs_filtered ("...", m_stream);
+ gdb_puts ("...", m_stream);
return cont;
}
/* Called when we start iterating over a dimension. If it's not the
inner most dimension then print an opening '(' character. */
- void start_dimension (bool inner_p)
+ void start_dimension (struct type *index_type, LONGEST nelts, bool inner_p)
{
- fputs_filtered ("(", m_stream);
+ size_t dim_indx = m_dimension++;
+
+ m_elt_type_prev = nullptr;
+ if (m_stats.size () < m_dimension)
+ {
+ m_stats.resize (m_dimension);
+ m_stats[dim_indx].index_type = index_type;
+ m_stats[dim_indx].nelts = nelts;
+ }
+
+ gdb_puts ("(", m_stream);
}
/* Called when we finish processing a batch of items within a dimension
@@ -146,25 +171,203 @@ public:
separators between elements, and dimensions of the array. */
void finish_dimension (bool inner_p, bool last_p)
{
- fputs_filtered (")", m_stream);
+ gdb_puts (")", m_stream);
if (!last_p)
- fputs_filtered (" ", m_stream);
+ gdb_puts (" ", m_stream);
+
+ m_dimension--;
+ }
+
+ /* Called when processing dimensions of the array other than the
+ innermost one. WALK_1 is the walker to normally call, ELT_TYPE is
+ the type of the element being extracted, and ELT_OFF is the offset
+ of the element from the start of array being walked, INDEX_TYPE
+ and INDEX is the type and the value respectively of the element's
+ index in the dimension currently being walked and LAST_P is true
+ only when this is the last element that will be processed in this
+ dimension. */
+ void process_dimension (gdb::function_view<void (struct type *,
+ int, bool)> walk_1,
+ struct type *elt_type, LONGEST elt_off,
+ LONGEST index, bool last_p)
+ {
+ size_t dim_indx = m_dimension - 1;
+ struct type *elt_type_prev = m_elt_type_prev;
+ LONGEST elt_off_prev = m_elt_off_prev;
+ bool repeated = (m_options->repeat_count_threshold < UINT_MAX
+ && elt_type_prev != nullptr
+ && (m_elts + ((m_nrepeats + 1)
+ * m_stats[dim_indx + 1].nelts)
+ <= m_options->print_max)
+ && dimension_contents_eq (m_val, elt_type,
+ elt_off_prev, elt_off));
+
+ if (repeated)
+ m_nrepeats++;
+ if (!repeated || last_p)
+ {
+ LONGEST nrepeats = m_nrepeats;
+
+ m_nrepeats = 0;
+ if (nrepeats >= m_options->repeat_count_threshold)
+ {
+ annotate_elt_rep (nrepeats + 1);
+ gdb_printf (m_stream, "%p[<repeats %s times>%p]",
+ metadata_style.style ().ptr (),
+ plongest (nrepeats + 1),
+ nullptr);
+ annotate_elt_rep_end ();
+ if (!repeated)
+ gdb_puts (" ", m_stream);
+ m_elts += nrepeats * m_stats[dim_indx + 1].nelts;
+ }
+ else
+ for (LONGEST i = nrepeats; i > 0; i--)
+ {
+ maybe_print_array_index (m_stats[dim_indx].index_type,
+ index - nrepeats + repeated,
+ m_stream, m_options);
+ walk_1 (elt_type_prev, elt_off_prev, repeated && i == 1);
+ }
+
+ if (!repeated)
+ {
+ /* We need to specially handle the case of hitting `print_max'
+ exactly as recursing would cause lone `(...)' to be printed.
+ And we need to print `...' by hand if the skipped element
+ would be the last one processed, because the subsequent call
+ to `continue_walking' from our caller won't do that. */
+ if (m_elts < m_options->print_max)
+ {
+ maybe_print_array_index (m_stats[dim_indx].index_type, index,
+ m_stream, m_options);
+ walk_1 (elt_type, elt_off, last_p);
+ nrepeats++;
+ }
+ else if (last_p)
+ gdb_puts ("...", m_stream);
+ }
+ }
+
+ m_elt_type_prev = elt_type;
+ m_elt_off_prev = elt_off;
}
/* Called to process an element of ELT_TYPE at offset ELT_OFF from the
- start of the parent object. */
- void process_element (struct type *elt_type, LONGEST elt_off, bool last_p)
+ start of the parent object, where INDEX is the value of the element's
+ index in the dimension currently being walked and LAST_P is true only
+ when this is the last element to be processed in this dimension. */
+ void process_element (struct type *elt_type, LONGEST elt_off,
+ LONGEST index, bool last_p)
{
- /* Extract the element value from the parent value. */
- struct value *e_val
- = value_from_component (m_val, elt_type, elt_off);
- common_val_print (e_val, m_stream, m_recurse, m_options, current_language);
- if (!last_p)
- fputs_filtered (", ", m_stream);
+ size_t dim_indx = m_dimension - 1;
+ struct type *elt_type_prev = m_elt_type_prev;
+ LONGEST elt_off_prev = m_elt_off_prev;
+ bool repeated = (m_options->repeat_count_threshold < UINT_MAX
+ && elt_type_prev != nullptr
+ && value_contents_eq (m_val, elt_off_prev, m_val, elt_off,
+ TYPE_LENGTH (elt_type)));
+
+ if (repeated)
+ m_nrepeats++;
+ if (!repeated || last_p || m_elts + 1 == m_options->print_max)
+ {
+ LONGEST nrepeats = m_nrepeats;
+ bool printed = false;
+
+ if (nrepeats != 0)
+ {
+ m_nrepeats = 0;
+ if (nrepeats >= m_options->repeat_count_threshold)
+ {
+ annotate_elt_rep (nrepeats + 1);
+ gdb_printf (m_stream, "%p[<repeats %s times>%p]",
+ metadata_style.style ().ptr (),
+ plongest (nrepeats + 1),
+ nullptr);
+ annotate_elt_rep_end ();
+ }
+ else
+ {
+ /* Extract the element value from the parent value. */
+ struct value *e_val
+ = value_from_component (m_val, elt_type, elt_off_prev);
+
+ for (LONGEST i = nrepeats; i > 0; i--)
+ {
+ maybe_print_array_index (m_stats[dim_indx].index_type,
+ index - i + 1,
+ m_stream, m_options);
+ common_val_print (e_val, m_stream, m_recurse, m_options,
+ current_language);
+ if (i > 1)
+ gdb_puts (", ", m_stream);
+ }
+ }
+ printed = true;
+ }
+
+ if (!repeated)
+ {
+ /* Extract the element value from the parent value. */
+ struct value *e_val
+ = value_from_component (m_val, elt_type, elt_off);
+
+ if (printed)
+ gdb_puts (", ", m_stream);
+ maybe_print_array_index (m_stats[dim_indx].index_type, index,
+ m_stream, m_options);
+ common_val_print (e_val, m_stream, m_recurse, m_options,
+ current_language);
+ }
+ if (!last_p)
+ gdb_puts (", ", m_stream);
+ }
+
+ m_elt_type_prev = elt_type;
+ m_elt_off_prev = elt_off;
++m_elts;
}
private:
+ /* Called to compare two VAL elements of ELT_TYPE at offsets OFFSET1
+ and OFFSET2 each. Handle subarrays recursively, because they may
+ have been sliced and we do not want to compare any memory contents
+ present between the slices requested. */
+ bool
+ dimension_contents_eq (const struct value *val, struct type *type,
+ LONGEST offset1, LONGEST offset2)
+ {
+ if (type->code () == TYPE_CODE_ARRAY
+ && TYPE_TARGET_TYPE (type)->code () != TYPE_CODE_CHAR)
+ {
+ /* Extract the range, and get lower and upper bounds. */
+ struct type *range_type = check_typedef (type)->index_type ();
+ LONGEST lowerbound, upperbound;
+ if (!get_discrete_bounds (range_type, &lowerbound, &upperbound))
+ error ("failed to get range bounds");
+
+ /* CALC is used to calculate the offsets for each element. */
+ fortran_array_offset_calculator calc (type);
+
+ struct type *subarray_type = check_typedef (TYPE_TARGET_TYPE (type));
+ for (LONGEST i = lowerbound; i < upperbound + 1; i++)
+ {
+ /* Use the index and the stride to work out a new offset. */
+ LONGEST index_offset = calc.index_offset (i);
+
+ if (!dimension_contents_eq (val, subarray_type,
+ offset1 + index_offset,
+ offset2 + index_offset))
+ return false;
+ }
+ return true;
+ }
+ else
+ return value_contents_eq (val, offset1, val, offset2,
+ TYPE_LENGTH (type));
+ }
+
/* The number of elements printed so far. */
int m_elts;
@@ -180,6 +383,20 @@ private:
/* The print control options. Gives us the maximum number of elements to
print, and is passed through to each element that we print. */
const struct value_print_options *m_options = nullptr;
+
+ /* The number of the current dimension being handled. */
+ LONGEST m_dimension;
+
+ /* The number of element repetitions in the current series. */
+ LONGEST m_nrepeats;
+
+ /* The type and offset from M_VAL of the element handled in the previous
+ iteration over the current dimension. */
+ struct type *m_elt_type_prev;
+ LONGEST m_elt_off_prev;
+
+ /* Per-dimension stats. */
+ std::vector<struct dimension_stats> m_stats;
};
/* This function gets called to print a Fortran array. */
@@ -273,7 +490,7 @@ f_language::value_print_inner (struct value *val, struct ui_file *stream,
stream, demangle);
else if (options->addressprint && options->format != 's')
{
- fputs_filtered (paddress (gdbarch, addr), stream);
+ gdb_puts (paddress (gdbarch, addr), stream);
want_space = 1;
}
@@ -285,7 +502,7 @@ f_language::value_print_inner (struct value *val, struct ui_file *stream,
&& addr != 0)
{
if (want_space)
- fputs_filtered (" ", stream);
+ gdb_puts (" ", stream);
val_print_string (TYPE_TARGET_TYPE (type), NULL, addr, -1,
stream, options);
}
@@ -295,29 +512,43 @@ f_language::value_print_inner (struct value *val, struct ui_file *stream,
case TYPE_CODE_STRUCT:
case TYPE_CODE_UNION:
+ case TYPE_CODE_NAMELIST:
/* Starting from the Fortran 90 standard, Fortran supports derived
types. */
- fprintf_filtered (stream, "( ");
+ gdb_printf (stream, "( ");
for (index = 0; index < type->num_fields (); index++)
{
- struct value *field = value_field (val, index);
-
- struct type *field_type = check_typedef (type->field (index).type ());
-
+ struct type *field_type
+ = check_typedef (type->field (index).type ());
if (field_type->code () != TYPE_CODE_FUNC)
{
- const char *field_name;
+ const char *field_name = type->field (index).name ();
+ struct value *field;
+
+ if (type->code () == TYPE_CODE_NAMELIST)
+ {
+ /* While printing namelist items, fetch the appropriate
+ value field before printing its value. */
+ struct block_symbol sym
+ = lookup_symbol (field_name, get_selected_block (nullptr),
+ VAR_DOMAIN, nullptr);
+ if (sym.symbol == nullptr)
+ error (_("failed to find symbol for name list component %s"),
+ field_name);
+ field = value_of_variable (sym.symbol, sym.block);
+ }
+ else
+ field = value_field (val, index);
if (printed_field > 0)
- fputs_filtered (", ", stream);
+ gdb_puts (", ", stream);
- field_name = type->field (index).name ();
if (field_name != NULL)
{
fputs_styled (field_name, variable_name_style.style (),
stream);
- fputs_filtered (" = ", stream);
+ gdb_puts (" = ", stream);
}
common_val_print (field, stream, recurse + 1,
@@ -326,7 +557,7 @@ f_language::value_print_inner (struct value *val, struct ui_file *stream,
++printed_field;
}
}
- fprintf_filtered (stream, " )");
+ gdb_printf (stream, " )");
break;
case TYPE_CODE_BOOL:
@@ -344,9 +575,9 @@ f_language::value_print_inner (struct value *val, struct ui_file *stream,
represented. Different compilers use different non zero
values to represent logical true. */
if (longval == 0)
- fputs_filtered (f_decorations.false_name, stream);
+ gdb_puts (f_decorations.false_name, stream);
else
- fputs_filtered (f_decorations.true_name, stream);
+ gdb_puts (f_decorations.true_name, stream);
}
break;
@@ -378,33 +609,33 @@ info_common_command_for_block (const struct block *block, const char *comname,
get_user_print_options (&opts);
ALL_BLOCK_SYMBOLS (block, iter, sym)
- if (SYMBOL_DOMAIN (sym) == COMMON_BLOCK_DOMAIN)
+ if (sym->domain () == COMMON_BLOCK_DOMAIN)
{
- const struct common_block *common = SYMBOL_VALUE_COMMON_BLOCK (sym);
+ const struct common_block *common = sym->value_common_block ();
size_t index;
- gdb_assert (SYMBOL_CLASS (sym) == LOC_COMMON_BLOCK);
+ gdb_assert (sym->aclass () == LOC_COMMON_BLOCK);
if (comname && (!sym->linkage_name ()
|| strcmp (comname, sym->linkage_name ()) != 0))
continue;
if (*any_printed)
- putchar_filtered ('\n');
+ gdb_putc ('\n');
else
*any_printed = 1;
if (sym->print_name ())
- printf_filtered (_("Contents of F77 COMMON block '%s':\n"),
- sym->print_name ());
+ gdb_printf (_("Contents of F77 COMMON block '%s':\n"),
+ sym->print_name ());
else
- printf_filtered (_("Contents of blank COMMON block:\n"));
+ gdb_printf (_("Contents of blank COMMON block:\n"));
for (index = 0; index < common->n_entries; index++)
{
struct value *val = NULL;
- printf_filtered ("%s = ",
- common->contents[index]->print_name ());
+ gdb_printf ("%s = ",
+ common->contents[index]->print_name ());
try
{
@@ -419,7 +650,7 @@ info_common_command_for_block (const struct block *block, const char *comname,
except.what ());
}
- putchar_filtered ('\n');
+ gdb_putc ('\n');
}
}
}
@@ -448,7 +679,7 @@ info_common_command (const char *comname, int from_tty)
block = get_frame_block (fi, 0);
if (block == NULL)
{
- printf_filtered (_("No symbol table info available.\n"));
+ gdb_printf (_("No symbol table info available.\n"));
return;
}
@@ -457,17 +688,17 @@ info_common_command (const char *comname, int from_tty)
info_common_command_for_block (block, comname, &values_printed);
/* After handling the function's top-level block, stop. Don't
continue to its superblock, the block of per-file symbols. */
- if (BLOCK_FUNCTION (block))
+ if (block->function ())
break;
- block = BLOCK_SUPERBLOCK (block);
+ block = block->superblock ();
}
if (!values_printed)
{
if (comname)
- printf_filtered (_("No common block '%s'.\n"), comname);
+ gdb_printf (_("No common block '%s'.\n"), comname);
else
- printf_filtered (_("No common blocks.\n"));
+ gdb_printf (_("No common blocks.\n"));
}
}
diff --git a/gdb/fbsd-nat.c b/gdb/fbsd-nat.c
index ae5af02693e..a501d9212c0 100644
--- a/gdb/fbsd-nat.c
+++ b/gdb/fbsd-nat.c
@@ -18,7 +18,9 @@
along with this program. If not, see <http://www.gnu.org/licenses/>. */
#include "defs.h"
+#include "gdbsupport/block-signals.h"
#include "gdbsupport/byte-vector.h"
+#include "gdbsupport/event-loop.h"
#include "gdbcore.h"
#include "inferior.h"
#include "regcache.h"
@@ -26,7 +28,9 @@
#include "gdbarch.h"
#include "gdbcmd.h"
#include "gdbthread.h"
+#include "gdbsupport/buildargv.h"
#include "gdbsupport/gdb_wait.h"
+#include "inf-loop.h"
#include "inf-ptrace.h"
#include <sys/types.h>
#ifdef HAVE_SYS_PROCCTL_H
@@ -45,6 +49,11 @@
#include <list>
+#ifndef PT_GETREGSET
+#define PT_GETREGSET 42 /* Get a target register set */
+#define PT_SETREGSET 43 /* Set a target register set */
+#endif
+
/* Return the name of a file that can be opened to get the symbols for
the child process identified by PID. */
@@ -104,13 +113,12 @@ fbsd_nat_target::find_memory_regions (find_memory_region_ftype func,
size = kve->kve_end - kve->kve_start;
if (info_verbose)
{
- fprintf_filtered (gdb_stdout,
- "Save segment, %ld bytes at %s (%c%c%c)\n",
- (long) size,
- paddress (target_gdbarch (), kve->kve_start),
- kve->kve_protection & KVME_PROT_READ ? 'r' : '-',
- kve->kve_protection & KVME_PROT_WRITE ? 'w' : '-',
- kve->kve_protection & KVME_PROT_EXEC ? 'x' : '-');
+ gdb_printf ("Save segment, %ld bytes at %s (%c%c%c)\n",
+ (long) size,
+ paddress (target_gdbarch (), kve->kve_start),
+ kve->kve_protection & KVME_PROT_READ ? 'r' : '-',
+ kve->kve_protection & KVME_PROT_WRITE ? 'w' : '-',
+ kve->kve_protection & KVME_PROT_EXEC ? 'x' : '-');
}
/* Invoke the callback function to create the corefile segment.
@@ -238,7 +246,7 @@ fbsd_nat_target::info_proc (const char *args, enum info_proc_what what)
else
error (_("Invalid arguments."));
- printf_filtered (_("process %d\n"), pid);
+ gdb_printf (_("process %d\n"), pid);
if (do_cwd || do_exe || do_files)
fdtbl.reset (kinfo_getfile (pid, &nfd));
@@ -246,7 +254,7 @@ fbsd_nat_target::info_proc (const char *args, enum info_proc_what what)
{
gdb::unique_xmalloc_ptr<char> cmdline = fbsd_fetch_cmdline (pid);
if (cmdline != nullptr)
- printf_filtered ("cmdline = '%s'\n", cmdline.get ());
+ gdb_printf ("cmdline = '%s'\n", cmdline.get ());
else
warning (_("unable to fetch command line"));
}
@@ -263,7 +271,7 @@ fbsd_nat_target::info_proc (const char *args, enum info_proc_what what)
}
}
if (cwd != NULL)
- printf_filtered ("cwd = '%s'\n", cwd);
+ gdb_printf ("cwd = '%s'\n", cwd);
else
warning (_("unable to fetch current working directory"));
}
@@ -282,7 +290,7 @@ fbsd_nat_target::info_proc (const char *args, enum info_proc_what what)
if (exe == NULL)
exe = pid_to_exec_file (pid);
if (exe != NULL)
- printf_filtered ("exe = '%s'\n", exe);
+ gdb_printf ("exe = '%s'\n", exe);
else
warning (_("unable to fetch executable path name"));
}
@@ -333,7 +341,7 @@ fbsd_nat_target::info_proc (const char *args, enum info_proc_what what)
const char *state;
int pgtok;
- printf_filtered ("Name: %s\n", kp.ki_comm);
+ gdb_printf ("Name: %s\n", kp.ki_comm);
switch (kp.ki_stat)
{
case SIDL:
@@ -361,69 +369,69 @@ fbsd_nat_target::info_proc (const char *args, enum info_proc_what what)
state = "? (unknown)";
break;
}
- printf_filtered ("State: %s\n", state);
- printf_filtered ("Parent process: %d\n", kp.ki_ppid);
- printf_filtered ("Process group: %d\n", kp.ki_pgid);
- printf_filtered ("Session id: %d\n", kp.ki_sid);
- printf_filtered ("TTY: %s\n", pulongest (kp.ki_tdev));
- printf_filtered ("TTY owner process group: %d\n", kp.ki_tpgid);
- printf_filtered ("User IDs (real, effective, saved): %d %d %d\n",
- kp.ki_ruid, kp.ki_uid, kp.ki_svuid);
- printf_filtered ("Group IDs (real, effective, saved): %d %d %d\n",
- kp.ki_rgid, kp.ki_groups[0], kp.ki_svgid);
- printf_filtered ("Groups: ");
+ gdb_printf ("State: %s\n", state);
+ gdb_printf ("Parent process: %d\n", kp.ki_ppid);
+ gdb_printf ("Process group: %d\n", kp.ki_pgid);
+ gdb_printf ("Session id: %d\n", kp.ki_sid);
+ gdb_printf ("TTY: %s\n", pulongest (kp.ki_tdev));
+ gdb_printf ("TTY owner process group: %d\n", kp.ki_tpgid);
+ gdb_printf ("User IDs (real, effective, saved): %d %d %d\n",
+ kp.ki_ruid, kp.ki_uid, kp.ki_svuid);
+ gdb_printf ("Group IDs (real, effective, saved): %d %d %d\n",
+ kp.ki_rgid, kp.ki_groups[0], kp.ki_svgid);
+ gdb_printf ("Groups: ");
for (int i = 0; i < kp.ki_ngroups; i++)
- printf_filtered ("%d ", kp.ki_groups[i]);
- printf_filtered ("\n");
- printf_filtered ("Minor faults (no memory page): %ld\n",
- kp.ki_rusage.ru_minflt);
- printf_filtered ("Minor faults, children: %ld\n",
- kp.ki_rusage_ch.ru_minflt);
- printf_filtered ("Major faults (memory page faults): %ld\n",
- kp.ki_rusage.ru_majflt);
- printf_filtered ("Major faults, children: %ld\n",
- kp.ki_rusage_ch.ru_majflt);
- printf_filtered ("utime: %s.%06ld\n",
- plongest (kp.ki_rusage.ru_utime.tv_sec),
- kp.ki_rusage.ru_utime.tv_usec);
- printf_filtered ("stime: %s.%06ld\n",
- plongest (kp.ki_rusage.ru_stime.tv_sec),
- kp.ki_rusage.ru_stime.tv_usec);
- printf_filtered ("utime, children: %s.%06ld\n",
- plongest (kp.ki_rusage_ch.ru_utime.tv_sec),
- kp.ki_rusage_ch.ru_utime.tv_usec);
- printf_filtered ("stime, children: %s.%06ld\n",
- plongest (kp.ki_rusage_ch.ru_stime.tv_sec),
- kp.ki_rusage_ch.ru_stime.tv_usec);
- printf_filtered ("'nice' value: %d\n", kp.ki_nice);
- printf_filtered ("Start time: %s.%06ld\n",
- plongest (kp.ki_start.tv_sec),
- kp.ki_start.tv_usec);
+ gdb_printf ("%d ", kp.ki_groups[i]);
+ gdb_printf ("\n");
+ gdb_printf ("Minor faults (no memory page): %ld\n",
+ kp.ki_rusage.ru_minflt);
+ gdb_printf ("Minor faults, children: %ld\n",
+ kp.ki_rusage_ch.ru_minflt);
+ gdb_printf ("Major faults (memory page faults): %ld\n",
+ kp.ki_rusage.ru_majflt);
+ gdb_printf ("Major faults, children: %ld\n",
+ kp.ki_rusage_ch.ru_majflt);
+ gdb_printf ("utime: %s.%06ld\n",
+ plongest (kp.ki_rusage.ru_utime.tv_sec),
+ kp.ki_rusage.ru_utime.tv_usec);
+ gdb_printf ("stime: %s.%06ld\n",
+ plongest (kp.ki_rusage.ru_stime.tv_sec),
+ kp.ki_rusage.ru_stime.tv_usec);
+ gdb_printf ("utime, children: %s.%06ld\n",
+ plongest (kp.ki_rusage_ch.ru_utime.tv_sec),
+ kp.ki_rusage_ch.ru_utime.tv_usec);
+ gdb_printf ("stime, children: %s.%06ld\n",
+ plongest (kp.ki_rusage_ch.ru_stime.tv_sec),
+ kp.ki_rusage_ch.ru_stime.tv_usec);
+ gdb_printf ("'nice' value: %d\n", kp.ki_nice);
+ gdb_printf ("Start time: %s.%06ld\n",
+ plongest (kp.ki_start.tv_sec),
+ kp.ki_start.tv_usec);
pgtok = getpagesize () / 1024;
- printf_filtered ("Virtual memory size: %s kB\n",
- pulongest (kp.ki_size / 1024));
- printf_filtered ("Data size: %s kB\n",
- pulongest (kp.ki_dsize * pgtok));
- printf_filtered ("Stack size: %s kB\n",
- pulongest (kp.ki_ssize * pgtok));
- printf_filtered ("Text size: %s kB\n",
- pulongest (kp.ki_tsize * pgtok));
- printf_filtered ("Resident set size: %s kB\n",
- pulongest (kp.ki_rssize * pgtok));
- printf_filtered ("Maximum RSS: %s kB\n",
- pulongest (kp.ki_rusage.ru_maxrss));
- printf_filtered ("Pending Signals: ");
+ gdb_printf ("Virtual memory size: %s kB\n",
+ pulongest (kp.ki_size / 1024));
+ gdb_printf ("Data size: %s kB\n",
+ pulongest (kp.ki_dsize * pgtok));
+ gdb_printf ("Stack size: %s kB\n",
+ pulongest (kp.ki_ssize * pgtok));
+ gdb_printf ("Text size: %s kB\n",
+ pulongest (kp.ki_tsize * pgtok));
+ gdb_printf ("Resident set size: %s kB\n",
+ pulongest (kp.ki_rssize * pgtok));
+ gdb_printf ("Maximum RSS: %s kB\n",
+ pulongest (kp.ki_rusage.ru_maxrss));
+ gdb_printf ("Pending Signals: ");
for (int i = 0; i < _SIG_WORDS; i++)
- printf_filtered ("%08x ", kp.ki_siglist.__bits[i]);
- printf_filtered ("\n");
- printf_filtered ("Ignored Signals: ");
+ gdb_printf ("%08x ", kp.ki_siglist.__bits[i]);
+ gdb_printf ("\n");
+ gdb_printf ("Ignored Signals: ");
for (int i = 0; i < _SIG_WORDS; i++)
- printf_filtered ("%08x ", kp.ki_sigignore.__bits[i]);
- printf_filtered ("\n");
- printf_filtered ("Caught Signals: ");
+ gdb_printf ("%08x ", kp.ki_sigignore.__bits[i]);
+ gdb_printf ("\n");
+ gdb_printf ("Caught Signals: ");
for (int i = 0; i < _SIG_WORDS; i++)
- printf_filtered ("%08x ", kp.ki_sigcatch.__bits[i]);
- printf_filtered ("\n");
+ gdb_printf ("%08x ", kp.ki_sigcatch.__bits[i]);
+ gdb_printf ("\n");
}
}
@@ -714,15 +722,15 @@ static void
show_fbsd_lwp_debug (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Debugging of FreeBSD lwp module is %s.\n"), value);
+ gdb_printf (file, _("Debugging of FreeBSD lwp module is %s.\n"), value);
}
static void
show_fbsd_nat_debug (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Debugging of FreeBSD native target is %s.\n"),
- value);
+ gdb_printf (file, _("Debugging of FreeBSD native target is %s.\n"),
+ value);
}
#define fbsd_lwp_debug_printf(fmt, ...) \
@@ -815,9 +823,9 @@ fbsd_nat_target::thread_name (struct thread_info *thr)
if a name has not been set explicitly. Return a NULL name in
that case. */
if (!fbsd_fetch_kinfo_proc (pid, &kp))
- perror_with_name (_("Failed to fetch process information"));
+ return nullptr;
if (ptrace (PT_LWPINFO, lwp, (caddr_t) &pl, sizeof pl) == -1)
- perror_with_name (("ptrace"));
+ return nullptr;
if (strcmp (kp.ki_comm, pl.pl_tdname) == 0)
return NULL;
xsnprintf (buf, sizeof buf, "%s", pl.pl_tdname);
@@ -846,22 +854,22 @@ fbsd_enable_proc_events (pid_t pid)
if (ptrace (PT_GET_EVENT_MASK, pid, (PTRACE_TYPE_ARG3)&events,
sizeof (events)) == -1)
- perror_with_name (("ptrace"));
+ perror_with_name (("ptrace (PT_GET_EVENT_MASK)"));
events |= PTRACE_FORK | PTRACE_LWP;
#ifdef PTRACE_VFORK
events |= PTRACE_VFORK;
#endif
if (ptrace (PT_SET_EVENT_MASK, pid, (PTRACE_TYPE_ARG3)&events,
sizeof (events)) == -1)
- perror_with_name (("ptrace"));
+ perror_with_name (("ptrace (PT_SET_EVENT_MASK)"));
#else
#ifdef TDP_RFPPWAIT
if (ptrace (PT_FOLLOW_FORK, pid, (PTRACE_TYPE_ARG3)0, 1) == -1)
- perror_with_name (("ptrace"));
+ perror_with_name (("ptrace (PT_FOLLOW_FORK)"));
#endif
#ifdef PT_LWP_EVENTS
if (ptrace (PT_LWP_EVENTS, pid, (PTRACE_TYPE_ARG3)0, 1) == -1)
- perror_with_name (("ptrace"));
+ perror_with_name (("ptrace (PT_LWP_EVENTS)"));
#endif
#endif
}
@@ -880,13 +888,13 @@ fbsd_add_threads (fbsd_nat_target *target, pid_t pid)
gdb_assert (!in_thread_list (target, ptid_t (pid)));
nlwps = ptrace (PT_GETNUMLWPS, pid, NULL, 0);
if (nlwps == -1)
- perror_with_name (("ptrace"));
+ perror_with_name (("ptrace (PT_GETNUMLWPS)"));
gdb::unique_xmalloc_ptr<lwpid_t[]> lwps (XCNEWVEC (lwpid_t, nlwps));
nlwps = ptrace (PT_GETLWPLIST, pid, (caddr_t) lwps.get (), nlwps);
if (nlwps == -1)
- perror_with_name (("ptrace"));
+ perror_with_name (("ptrace (PT_GETLWPLIST)"));
for (i = 0; i < nlwps; i++)
{
@@ -900,7 +908,7 @@ fbsd_add_threads (fbsd_nat_target *target, pid_t pid)
/* Don't add exited threads. Note that this is only called
when attaching to a multi-threaded process. */
if (ptrace (PT_LWPINFO, lwps[i], (caddr_t) &pl, sizeof pl) == -1)
- perror_with_name (("ptrace"));
+ perror_with_name (("ptrace (PT_LWPINFO)"));
if (pl.pl_flags & PL_FLAG_EXITED)
continue;
#endif
@@ -926,6 +934,70 @@ fbsd_nat_target::update_thread_list ()
#endif
}
+/* Async mode support. */
+
+/* Implement the "can_async_p" target method. */
+
+bool
+fbsd_nat_target::can_async_p ()
+{
+ /* This flag should be checked in the common target.c code. */
+ gdb_assert (target_async_permitted);
+
+ /* Otherwise, this targets is always able to support async mode. */
+ return true;
+}
+
+/* SIGCHLD handler notifies the event-loop in async mode. */
+
+static void
+sigchld_handler (int signo)
+{
+ int old_errno = errno;
+
+ fbsd_nat_target::async_file_mark_if_open ();
+
+ errno = old_errno;
+}
+
+/* Callback registered with the target events file descriptor. */
+
+static void
+handle_target_event (int error, gdb_client_data client_data)
+{
+ inferior_event_handler (INF_REG_EVENT);
+}
+
+/* Implement the "async" target method. */
+
+void
+fbsd_nat_target::async (int enable)
+{
+ if ((enable != 0) == is_async_p ())
+ return;
+
+ /* Block SIGCHILD while we create/destroy the pipe, as the handler
+ writes to it. */
+ gdb::block_signals blocker;
+
+ if (enable)
+ {
+ if (!async_file_open ())
+ internal_error (__FILE__, __LINE__, "failed to create event pipe.");
+
+ add_file_handler (async_wait_fd (), handle_target_event, NULL, "fbsd-nat");
+
+ /* Trigger a poll in case there are pending events to
+ handle. */
+ async_file_mark ();
+ }
+ else
+ {
+ delete_file_handler (async_wait_fd ());
+ async_file_close ();
+ }
+}
+
#ifdef TDP_RFPPWAIT
/*
To catch fork events, PT_FOLLOW_FORK is set on every traced process
@@ -997,6 +1069,11 @@ static void
fbsd_add_vfork_done (ptid_t pid)
{
fbsd_pending_vfork_done.push_front (pid);
+
+ /* If we're in async mode, need to tell the event loop there's
+ something here to process. */
+ if (target_is_async_p ())
+ async_file_mark ();
}
/* Check for a pending vfork done event for a specific PID. */
@@ -1045,8 +1122,9 @@ fbsd_nat_target::resume (ptid_t ptid, int step, enum gdb_signal signo)
return;
#endif
- fbsd_lwp_debug_printf ("ptid (%d, %ld, %s)", ptid.pid (), ptid.lwp (),
- pulongest (ptid.tid ()));
+ fbsd_nat_debug_printf ("[%s], step %d, signo %d (%s)",
+ target_pid_to_str (ptid).c_str (), step, signo,
+ gdb_signal_to_name (signo));
if (ptid.lwp_p ())
{
/* If ptid is a specific LWP, suspend all other LWPs in the process. */
@@ -1062,7 +1140,11 @@ fbsd_nat_target::resume (ptid_t ptid, int step, enum gdb_signal signo)
request = PT_SUSPEND;
if (ptrace (request, tp->ptid.lwp (), NULL, 0) == -1)
- perror_with_name (("ptrace"));
+ perror_with_name (request == PT_RESUME ?
+ ("ptrace (PT_RESUME)") :
+ ("ptrace (PT_SUSPEND)"));
+ if (request == PT_RESUME)
+ low_prepare_to_resume (tp);
}
}
else
@@ -1070,8 +1152,11 @@ fbsd_nat_target::resume (ptid_t ptid, int step, enum gdb_signal signo)
/* If ptid is a wildcard, resume all matching threads (they won't run
until the process is continued however). */
for (thread_info *tp : all_non_exited_threads (this, ptid))
- if (ptrace (PT_RESUME, tp->ptid.lwp (), NULL, 0) == -1)
- perror_with_name (("ptrace"));
+ {
+ if (ptrace (PT_RESUME, tp->ptid.lwp (), NULL, 0) == -1)
+ perror_with_name (("ptrace (PT_RESUME)"));
+ low_prepare_to_resume (tp);
+ }
ptid = inferior_ptid;
}
@@ -1101,7 +1186,7 @@ fbsd_nat_target::resume (ptid_t ptid, int step, enum gdb_signal signo)
if (step)
{
if (ptrace (PT_SETSTEP, get_ptrace_pid (ptid), NULL, 0) == -1)
- perror_with_name (("ptrace"));
+ perror_with_name (("ptrace (PT_SETSTEP)"));
step = 0;
}
ptid = ptid_t (ptid.pid ());
@@ -1165,8 +1250,8 @@ fbsd_handle_debug_trap (fbsd_nat_target *target, ptid_t ptid,
the status in *OURSTATUS. */
ptid_t
-fbsd_nat_target::wait (ptid_t ptid, struct target_waitstatus *ourstatus,
- target_wait_flags target_options)
+fbsd_nat_target::wait_1 (ptid_t ptid, struct target_waitstatus *ourstatus,
+ target_wait_flags target_options)
{
ptid_t wptid;
@@ -1189,7 +1274,7 @@ fbsd_nat_target::wait (ptid_t ptid, struct target_waitstatus *ourstatus,
pid = wptid.pid ();
if (ptrace (PT_LWPINFO, pid, (caddr_t) &pl, sizeof pl) == -1)
- perror_with_name (("ptrace"));
+ perror_with_name (("ptrace (PT_LWPINFO)"));
wptid = ptid_t (pid, pl.pl_lwpid);
@@ -1216,12 +1301,13 @@ fbsd_nat_target::wait (ptid_t ptid, struct target_waitstatus *ourstatus,
fbsd_lwp_debug_printf ("deleting thread for LWP %u",
pl.pl_lwpid);
if (print_thread_events)
- printf_unfiltered (_("[%s exited]\n"),
- target_pid_to_str (wptid).c_str ());
+ gdb_printf (_("[%s exited]\n"),
+ target_pid_to_str (wptid).c_str ());
+ low_delete_thread (thr);
delete_thread (thr);
}
if (ptrace (PT_CONTINUE, pid, (caddr_t) 1, 0) == -1)
- perror_with_name (("ptrace"));
+ perror_with_name (("ptrace (PT_CONTINUE)"));
continue;
}
#endif
@@ -1284,7 +1370,7 @@ fbsd_nat_target::wait (ptid_t ptid, struct target_waitstatus *ourstatus,
gdb_assert (pid == child);
if (ptrace (PT_LWPINFO, child, (caddr_t)&pl, sizeof pl) == -1)
- perror_with_name (("ptrace"));
+ perror_with_name (("ptrace (PT_LWPINFO)"));
gdb_assert (pl.pl_flags & PL_FLAG_CHILD);
child_ptid = ptid_t (child, pl.pl_lwpid);
@@ -1305,6 +1391,8 @@ fbsd_nat_target::wait (ptid_t ptid, struct target_waitstatus *ourstatus,
warning (_("Failed to fetch process information"));
#endif
+ low_new_fork (wptid, child);
+
if (is_vfork)
ourstatus->set_vforked (child_ptid);
else
@@ -1373,7 +1461,7 @@ fbsd_nat_target::wait (ptid_t ptid, struct target_waitstatus *ourstatus,
and once system call stops are enabled on a process
it stops for all system call entries and exits. */
if (ptrace (PT_CONTINUE, pid, (caddr_t) 1, 0) == -1)
- perror_with_name (("ptrace"));
+ perror_with_name (("ptrace (PT_CONTINUE)"));
continue;
}
}
@@ -1381,6 +1469,36 @@ fbsd_nat_target::wait (ptid_t ptid, struct target_waitstatus *ourstatus,
}
}
+ptid_t
+fbsd_nat_target::wait (ptid_t ptid, struct target_waitstatus *ourstatus,
+ target_wait_flags target_options)
+{
+ ptid_t wptid;
+
+ fbsd_nat_debug_printf ("[%s], [%s]", target_pid_to_str (ptid).c_str (),
+ target_options_to_string (target_options).c_str ());
+
+ /* Ensure any subsequent events trigger a new event in the loop. */
+ if (is_async_p ())
+ async_file_flush ();
+
+ wptid = wait_1 (ptid, ourstatus, target_options);
+
+ /* If we are in async mode and found an event, there may still be
+ another event pending. Trigger the event pipe so that that the
+ event loop keeps polling until no event is returned. */
+ if (is_async_p ()
+ && ((ourstatus->kind () != TARGET_WAITKIND_IGNORE
+ && ourstatus->kind() != TARGET_WAITKIND_NO_RESUMED)
+ || ptid != minus_one_ptid))
+ async_file_mark ();
+
+ fbsd_nat_debug_printf ("returning [%s], [%s]",
+ target_pid_to_str (wptid).c_str (),
+ ourstatus->to_string ().c_str ());
+ return wptid;
+}
+
#ifdef USE_SIGTRAP_SIGINFO
/* Implement the "stopped_by_sw_breakpoint" target_ops method. */
@@ -1490,7 +1608,7 @@ fbsd_nat_target::follow_fork (inferior *child_inf, ptid_t child_ptid,
infrun.c. */
if (ptrace (PT_DETACH, child_pid, (PTRACE_TYPE_ARG3)1, 0) == -1)
- perror_with_name (("ptrace"));
+ perror_with_name (("ptrace (PT_DETACH)"));
#ifndef PTRACE_VFORK
if (fork_kind () == TARGET_WAITKIND_VFORKED)
@@ -1611,7 +1729,7 @@ fbsd_nat_target::supports_disable_randomization ()
/* See fbsd-nat.h. */
-void
+bool
fbsd_nat_target::fetch_register_set (struct regcache *regcache, int regnum,
int fetch_op, const struct regset *regset,
void *regs, size_t size)
@@ -1627,12 +1745,14 @@ fbsd_nat_target::fetch_register_set (struct regcache *regcache, int regnum,
perror_with_name (_("Couldn't get registers"));
regcache->supply_regset (regset, regnum, regs, size);
+ return true;
}
+ return false;
}
/* See fbsd-nat.h. */
-void
+bool
fbsd_nat_target::store_register_set (struct regcache *regcache, int regnum,
int fetch_op, int store_op,
const struct regset *regset, void *regs,
@@ -1652,7 +1772,95 @@ fbsd_nat_target::store_register_set (struct regcache *regcache, int regnum,
if (ptrace (store_op, pid, (PTRACE_TYPE_ARG3) regs, 0) == -1)
perror_with_name (_("Couldn't write registers"));
+ return true;
+ }
+ return false;
+}
+
+/* See fbsd-nat.h. */
+
+bool
+fbsd_nat_target::have_regset (ptid_t ptid, int note)
+{
+ pid_t pid = get_ptrace_pid (ptid);
+ struct iovec iov;
+
+ iov.iov_base = nullptr;
+ iov.iov_len = 0;
+ if (ptrace (PT_GETREGSET, pid, (PTRACE_TYPE_ARG3) &iov, note) == -1)
+ return 0;
+ return iov.iov_len;
+}
+
+/* See fbsd-nat.h. */
+
+bool
+fbsd_nat_target::fetch_regset (struct regcache *regcache, int regnum, int note,
+ const struct regset *regset, void *regs,
+ size_t size)
+{
+ const struct regcache_map_entry *map
+ = (const struct regcache_map_entry *) regset->regmap;
+ pid_t pid = get_ptrace_pid (regcache->ptid ());
+
+ if (regnum == -1 || regcache_map_supplies (map, regnum, regcache->arch(),
+ size))
+ {
+ struct iovec iov;
+
+ iov.iov_base = regs;
+ iov.iov_len = size;
+ if (ptrace (PT_GETREGSET, pid, (PTRACE_TYPE_ARG3) &iov, note) == -1)
+ perror_with_name (_("Couldn't get registers"));
+
+ regcache->supply_regset (regset, regnum, regs, size);
+ return true;
+ }
+ return false;
+}
+
+bool
+fbsd_nat_target::store_regset (struct regcache *regcache, int regnum, int note,
+ const struct regset *regset, void *regs,
+ size_t size)
+{
+ const struct regcache_map_entry *map
+ = (const struct regcache_map_entry *) regset->regmap;
+ pid_t pid = get_ptrace_pid (regcache->ptid ());
+
+ if (regnum == -1 || regcache_map_supplies (map, regnum, regcache->arch(),
+ size))
+ {
+ struct iovec iov;
+
+ iov.iov_base = regs;
+ iov.iov_len = size;
+ if (ptrace (PT_GETREGSET, pid, (PTRACE_TYPE_ARG3) &iov, note) == -1)
+ perror_with_name (_("Couldn't get registers"));
+
+ regcache->collect_regset (regset, regnum, regs, size);
+
+ if (ptrace (PT_SETREGSET, pid, (PTRACE_TYPE_ARG3) &iov, note) == -1)
+ perror_with_name (_("Couldn't write registers"));
+ return true;
}
+ return false;
+}
+
+/* See fbsd-nat.h. */
+
+bool
+fbsd_nat_get_siginfo (ptid_t ptid, siginfo_t *siginfo)
+{
+ struct ptrace_lwpinfo pl;
+ pid_t pid = get_ptrace_pid (ptid);
+
+ if (ptrace (PT_LWPINFO, pid, (caddr_t) &pl, sizeof pl) == -1)
+ return false;
+ if (!(pl.pl_flags & PL_FLAG_SI))
+ return false;;
+ *siginfo = pl.pl_siginfo;
+ return (true);
}
void _initialize_fbsd_nat ();
@@ -1675,4 +1883,7 @@ Enables printf debugging output."),
NULL,
&show_fbsd_nat_debug,
&setdebuglist, &showdebuglist);
+
+ /* Install a SIGCHLD handler. */
+ signal (SIGCHLD, sigchld_handler);
}
diff --git a/gdb/fbsd-nat.h b/gdb/fbsd-nat.h
index 6f8b206dcd5..ba359c62314 100644
--- a/gdb/fbsd-nat.h
+++ b/gdb/fbsd-nat.h
@@ -66,6 +66,10 @@ public:
void update_thread_list () override;
+ bool can_async_p () override;
+
+ void async (int) override;
+
thread_control_capabilities get_thread_control_capabilities () override
{ return tc_schedlock; }
@@ -105,11 +109,27 @@ public:
bool supports_disable_randomization () override;
+ /* Methods meant to be overridden by arch-specific target
+ classes. */
+
+ virtual void low_new_fork (ptid_t parent, pid_t child)
+ {}
+
+ /* The method to call, if any, when a thread is destroyed. */
+ virtual void low_delete_thread (thread_info *)
+ {}
+
+ /* Hook to call prior to resuming a thread. */
+ virtual void low_prepare_to_resume (thread_info *)
+ {}
+
protected:
void post_startup_inferior (ptid_t) override;
private:
+ ptid_t wait_1 (ptid_t, struct target_waitstatus *, target_wait_flags);
+
/* Helper routines for use in fetch_registers and store_registers in
subclasses. These routines fetch and store a single set of
registers described by REGSET. The REGSET's 'regmap' field must
@@ -120,35 +140,80 @@ private:
of registers to a native thread.
The caller must provide storage for the set of registers in REGS,
- and SIZE is the size of the storage. */
+ and SIZE is the size of the storage.
- void fetch_register_set (struct regcache *regcache, int regnum, int fetch_op,
+ Returns true if the register set was transferred due to a
+ matching REGNUM.*/
+
+ bool fetch_register_set (struct regcache *regcache, int regnum, int fetch_op,
const struct regset *regset, void *regs, size_t size);
- void store_register_set (struct regcache *regcache, int regnum, int fetch_op,
+ bool store_register_set (struct regcache *regcache, int regnum, int fetch_op,
int store_op, const struct regset *regset,
void *regs, size_t size);
+
+ /* Helper routines which use PT_GETREGSET and PT_SETREGSET for the
+ specified NOTE instead of regset-specific fetch and store
+ ops. */
+
+ bool fetch_regset (struct regcache *regcache, int regnum, int note,
+ const struct regset *regset, void *regs, size_t size);
+
+ bool store_regset (struct regcache *regcache, int regnum, int note,
+ const struct regset *regset, void *regs, size_t size);
+
protected:
/* Wrapper versions of the above helpers which accept a register set
type such as 'struct reg' or 'struct fpreg'. */
template <class Regset>
- void fetch_register_set (struct regcache *regcache, int regnum, int fetch_op,
+ bool fetch_register_set (struct regcache *regcache, int regnum, int fetch_op,
const struct regset *regset)
{
Regset regs;
- fetch_register_set (regcache, regnum, fetch_op, regset, &regs,
- sizeof (regs));
+ return fetch_register_set (regcache, regnum, fetch_op, regset, &regs,
+ sizeof (regs));
}
template <class Regset>
- void store_register_set (struct regcache *regcache, int regnum, int fetch_op,
+ bool store_register_set (struct regcache *regcache, int regnum, int fetch_op,
int store_op, const struct regset *regset)
{
Regset regs;
- store_register_set (regcache, regnum, fetch_op, store_op, regset, &regs,
- sizeof (regs));
+ return store_register_set (regcache, regnum, fetch_op, store_op, regset,
+ &regs, sizeof (regs));
+ }
+
+ /* Helper routine for use in read_description in subclasses. This
+ routine checks if the register set for the specified NOTE is
+ present for a given PTID. If the register set is present, the
+ the size of the register set is returned. If the register set is
+ not present, zero is returned. */
+
+ bool have_regset (ptid_t ptid, int note);
+
+ /* Wrapper versions of the PT_GETREGSET and PT_REGSET helpers which
+ accept a register set type. */
+
+ template <class Regset>
+ bool fetch_regset (struct regcache *regcache, int regnum, int note,
+ const struct regset *regset)
+ {
+ Regset regs;
+ return fetch_regset (regcache, regnum, note, regset, &regs, sizeof (regs));
+ }
+
+ template <class Regset>
+ bool store_regset (struct regcache *regcache, int regnum, int note,
+ const struct regset *regset)
+ {
+ Regset regs;
+ return store_regset (regcache, regnum, note, regset, &regs, sizeof (regs));
}
};
+/* Fetch the signal information for PTID and store it in *SIGINFO.
+ Return true if successful. */
+bool fbsd_nat_get_siginfo (ptid_t ptid, siginfo_t *siginfo);
+
#endif /* fbsd-nat.h */
diff --git a/gdb/fbsd-tdep.c b/gdb/fbsd-tdep.c
index f5c880d6596..b241e855bd6 100644
--- a/gdb/fbsd-tdep.c
+++ b/gdb/fbsd-tdep.c
@@ -510,6 +510,13 @@ struct fbsd_pspace_data
LONGEST off_linkmap = 0;
LONGEST off_tlsindex = 0;
bool rtld_offsets_valid = false;
+
+ /* vDSO mapping range. */
+ struct mem_range vdso_range {};
+
+ /* Zero if the range hasn't been searched for, > 0 if a range was
+ found, or < 0 if a range was not found. */
+ int vdso_range_p = 0;
};
/* Per-program-space data for FreeBSD architectures. */
@@ -914,8 +921,8 @@ fbsd_print_sockaddr_in (const void *sockaddr)
if (inet_ntop (AF_INET, sin->sin_addr, buf, sizeof buf) == nullptr)
error (_("Failed to format IPv4 address"));
- printf_filtered ("%s:%u", buf,
- (sin->sin_port[0] << 8) | sin->sin_port[1]);
+ gdb_printf ("%s:%u", buf,
+ (sin->sin_port[0] << 8) | sin->sin_port[1]);
}
/* Helper function to print out an IPv6 socket address. */
@@ -929,8 +936,8 @@ fbsd_print_sockaddr_in6 (const void *sockaddr)
if (inet_ntop (AF_INET6, sin6->sin6_addr, buf, sizeof buf) == nullptr)
error (_("Failed to format IPv6 address"));
- printf_filtered ("%s.%u", buf,
- (sin6->sin6_port[0] << 8) | sin6->sin6_port[1]);
+ gdb_printf ("%s.%u", buf,
+ (sin6->sin6_port[0] << 8) | sin6->sin6_port[1]);
}
/* See fbsd-tdep.h. */
@@ -938,9 +945,9 @@ fbsd_print_sockaddr_in6 (const void *sockaddr)
void
fbsd_info_proc_files_header ()
{
- printf_filtered (_("Open files:\n\n"));
- printf_filtered (" %6s %6s %10s %9s %s\n",
- "FD", "Type", "Offset", "Flags ", "Name");
+ gdb_printf (_("Open files:\n\n"));
+ gdb_printf (" %6s %6s %10s %9s %s\n",
+ "FD", "Type", "Offset", "Flags ", "Name");
}
/* See fbsd-tdep.h. */
@@ -952,11 +959,11 @@ fbsd_info_proc_files_entry (int kf_type, int kf_fd, int kf_flags,
int kf_sock_protocol, const void *kf_sa_local,
const void *kf_sa_peer, const void *kf_path)
{
- printf_filtered (" %6s %6s %10s %8s ",
- fbsd_file_fd (kf_fd),
- fbsd_file_type (kf_type, kf_vnode_type),
- kf_offset > -1 ? hex_string (kf_offset) : "-",
- fbsd_file_flags (kf_flags));
+ gdb_printf (" %6s %6s %10s %8s ",
+ fbsd_file_fd (kf_fd),
+ fbsd_file_type (kf_type, kf_vnode_type),
+ kf_offset > -1 ? hex_string (kf_offset) : "-",
+ fbsd_file_flags (kf_flags));
if (kf_type == KINFO_FILE_TYPE_SOCKET)
{
switch (kf_sock_domain)
@@ -966,16 +973,16 @@ fbsd_info_proc_files_entry (int kf_type, int kf_fd, int kf_flags,
switch (kf_sock_type)
{
case FBSD_SOCK_STREAM:
- printf_filtered ("unix stream:");
+ gdb_printf ("unix stream:");
break;
case FBSD_SOCK_DGRAM:
- printf_filtered ("unix dgram:");
+ gdb_printf ("unix dgram:");
break;
case FBSD_SOCK_SEQPACKET:
- printf_filtered ("unix seqpacket:");
+ gdb_printf ("unix seqpacket:");
break;
default:
- printf_filtered ("unix <%d>:", kf_sock_type);
+ gdb_printf ("unix <%d>:", kf_sock_type);
break;
}
@@ -986,26 +993,26 @@ fbsd_info_proc_files_entry (int kf_type, int kf_fd, int kf_flags,
if (saddr_un->sun_path[0] == 0)
saddr_un = reinterpret_cast<const struct fbsd_sockaddr_un *>
(kf_sa_peer);
- printf_filtered ("%s", saddr_un->sun_path);
+ gdb_printf ("%s", saddr_un->sun_path);
break;
}
case FBSD_AF_INET:
- printf_filtered ("%s4 ", fbsd_ipproto (kf_sock_protocol));
+ gdb_printf ("%s4 ", fbsd_ipproto (kf_sock_protocol));
fbsd_print_sockaddr_in (kf_sa_local);
- printf_filtered (" -> ");
+ gdb_printf (" -> ");
fbsd_print_sockaddr_in (kf_sa_peer);
break;
case FBSD_AF_INET6:
- printf_filtered ("%s6 ", fbsd_ipproto (kf_sock_protocol));
+ gdb_printf ("%s6 ", fbsd_ipproto (kf_sock_protocol));
fbsd_print_sockaddr_in6 (kf_sa_local);
- printf_filtered (" -> ");
+ gdb_printf (" -> ");
fbsd_print_sockaddr_in6 (kf_sa_peer);
break;
}
}
else
- printf_filtered ("%s", reinterpret_cast<const char *> (kf_path));
- printf_filtered ("\n");
+ gdb_printf ("%s", reinterpret_cast<const char *> (kf_path));
+ gdb_printf ("\n");
}
/* Implement "info proc files" for a corefile. */
@@ -1091,20 +1098,20 @@ fbsd_vm_map_entry_flags (int kve_flags, int kve_protection)
void
fbsd_info_proc_mappings_header (int addr_bit)
{
- printf_filtered (_("Mapped address spaces:\n\n"));
+ gdb_printf (_("Mapped address spaces:\n\n"));
if (addr_bit == 64)
{
- printf_filtered (" %18s %18s %10s %10s %9s %s\n",
- "Start Addr",
- " End Addr",
- " Size", " Offset", "Flags ", "File");
+ gdb_printf (" %18s %18s %10s %10s %9s %s\n",
+ "Start Addr",
+ " End Addr",
+ " Size", " Offset", "Flags ", "File");
}
else
{
- printf_filtered ("\t%10s %10s %10s %10s %9s %s\n",
- "Start Addr",
- " End Addr",
- " Size", " Offset", "Flags ", "File");
+ gdb_printf ("\t%10s %10s %10s %10s %9s %s\n",
+ "Start Addr",
+ " End Addr",
+ " Size", " Offset", "Flags ", "File");
}
}
@@ -1118,23 +1125,23 @@ fbsd_info_proc_mappings_entry (int addr_bit, ULONGEST kve_start,
{
if (addr_bit == 64)
{
- printf_filtered (" %18s %18s %10s %10s %9s %s\n",
- hex_string (kve_start),
- hex_string (kve_end),
- hex_string (kve_end - kve_start),
- hex_string (kve_offset),
- fbsd_vm_map_entry_flags (kve_flags, kve_protection),
- reinterpret_cast<const char *> (kve_path));
+ gdb_printf (" %18s %18s %10s %10s %9s %s\n",
+ hex_string (kve_start),
+ hex_string (kve_end),
+ hex_string (kve_end - kve_start),
+ hex_string (kve_offset),
+ fbsd_vm_map_entry_flags (kve_flags, kve_protection),
+ reinterpret_cast<const char *> (kve_path));
}
else
{
- printf_filtered ("\t%10s %10s %10s %10s %9s %s\n",
- hex_string (kve_start),
- hex_string (kve_end),
- hex_string (kve_end - kve_start),
- hex_string (kve_offset),
- fbsd_vm_map_entry_flags (kve_flags, kve_protection),
- reinterpret_cast<const char *> (kve_path));
+ gdb_printf ("\t%10s %10s %10s %10s %9s %s\n",
+ hex_string (kve_start),
+ hex_string (kve_end),
+ hex_string (kve_end - kve_start),
+ hex_string (kve_offset),
+ fbsd_vm_map_entry_flags (kve_flags, kve_protection),
+ reinterpret_cast<const char *> (kve_path));
}
}
@@ -1265,11 +1272,11 @@ fbsd_core_fetch_timeval (struct gdbarch *gdbarch, unsigned char *data,
static void
fbsd_print_sigset (const char *descr, unsigned char *sigset)
{
- printf_filtered ("%s: ", descr);
+ gdb_printf ("%s: ", descr);
for (int i = 0; i < SIG_WORDS; i++)
- printf_filtered ("%08x ",
- (unsigned int) bfd_get_32 (core_bfd, sigset + i * 4));
- printf_filtered ("\n");
+ gdb_printf ("%08x ",
+ (unsigned int) bfd_get_32 (core_bfd, sigset + i * 4));
+ gdb_printf ("\n");
}
/* Implement "info proc status" for a corefile. */
@@ -1329,15 +1336,15 @@ fbsd_core_info_proc_status (struct gdbarch *gdbarch)
return;
}
- printf_filtered ("Name: %.19s\n", descdata + kp->ki_comm);
- printf_filtered ("Process ID: %s\n",
- pulongest (bfd_get_32 (core_bfd, descdata + kp->ki_pid)));
- printf_filtered ("Parent process: %s\n",
- pulongest (bfd_get_32 (core_bfd, descdata + kp->ki_ppid)));
- printf_filtered ("Process group: %s\n",
- pulongest (bfd_get_32 (core_bfd, descdata + kp->ki_pgid)));
- printf_filtered ("Session id: %s\n",
- pulongest (bfd_get_32 (core_bfd, descdata + kp->ki_sid)));
+ gdb_printf ("Name: %.19s\n", descdata + kp->ki_comm);
+ gdb_printf ("Process ID: %s\n",
+ pulongest (bfd_get_32 (core_bfd, descdata + kp->ki_pid)));
+ gdb_printf ("Parent process: %s\n",
+ pulongest (bfd_get_32 (core_bfd, descdata + kp->ki_ppid)));
+ gdb_printf ("Process group: %s\n",
+ pulongest (bfd_get_32 (core_bfd, descdata + kp->ki_pgid)));
+ gdb_printf ("Session id: %s\n",
+ pulongest (bfd_get_32 (core_bfd, descdata + kp->ki_sid)));
/* FreeBSD 12.0 and later store a 64-bit dev_t at 'ki_tdev'. Older
kernels store a 32-bit dev_t at 'ki_tdev_freebsd11'. In older
@@ -1348,76 +1355,76 @@ fbsd_core_info_proc_status (struct gdbarch *gdbarch)
value = bfd_get_64 (core_bfd, descdata + kp->ki_tdev);
if (value == 0)
value = bfd_get_32 (core_bfd, descdata + kp->ki_tdev_freebsd11);
- printf_filtered ("TTY: %s\n", pulongest (value));
- printf_filtered ("TTY owner process group: %s\n",
- pulongest (bfd_get_32 (core_bfd, descdata + kp->ki_tpgid)));
- printf_filtered ("User IDs (real, effective, saved): %s %s %s\n",
- pulongest (bfd_get_32 (core_bfd, descdata + kp->ki_ruid)),
- pulongest (bfd_get_32 (core_bfd, descdata + kp->ki_uid)),
- pulongest (bfd_get_32 (core_bfd, descdata + kp->ki_svuid)));
- printf_filtered ("Group IDs (real, effective, saved): %s %s %s\n",
- pulongest (bfd_get_32 (core_bfd, descdata + kp->ki_rgid)),
- pulongest (bfd_get_32 (core_bfd, descdata + kp->ki_groups)),
- pulongest (bfd_get_32 (core_bfd, descdata + kp->ki_svgid)));
- printf_filtered ("Groups: ");
+ gdb_printf ("TTY: %s\n", pulongest (value));
+ gdb_printf ("TTY owner process group: %s\n",
+ pulongest (bfd_get_32 (core_bfd, descdata + kp->ki_tpgid)));
+ gdb_printf ("User IDs (real, effective, saved): %s %s %s\n",
+ pulongest (bfd_get_32 (core_bfd, descdata + kp->ki_ruid)),
+ pulongest (bfd_get_32 (core_bfd, descdata + kp->ki_uid)),
+ pulongest (bfd_get_32 (core_bfd, descdata + kp->ki_svuid)));
+ gdb_printf ("Group IDs (real, effective, saved): %s %s %s\n",
+ pulongest (bfd_get_32 (core_bfd, descdata + kp->ki_rgid)),
+ pulongest (bfd_get_32 (core_bfd, descdata + kp->ki_groups)),
+ pulongest (bfd_get_32 (core_bfd, descdata + kp->ki_svgid)));
+ gdb_printf ("Groups: ");
uint16_t ngroups = bfd_get_16 (core_bfd, descdata + kp->ki_ngroups);
for (int i = 0; i < ngroups; i++)
- printf_filtered ("%s ",
- pulongest (bfd_get_32 (core_bfd,
- descdata + kp->ki_groups + i * 4)));
- printf_filtered ("\n");
+ gdb_printf ("%s ",
+ pulongest (bfd_get_32 (core_bfd,
+ descdata + kp->ki_groups + i * 4)));
+ gdb_printf ("\n");
value = bfd_get (long_bit, core_bfd,
descdata + kp->ki_rusage + kp->ru_minflt);
- printf_filtered ("Minor faults (no memory page): %s\n", pulongest (value));
+ gdb_printf ("Minor faults (no memory page): %s\n", pulongest (value));
value = bfd_get (long_bit, core_bfd,
descdata + kp->ki_rusage_ch + kp->ru_minflt);
- printf_filtered ("Minor faults, children: %s\n", pulongest (value));
+ gdb_printf ("Minor faults, children: %s\n", pulongest (value));
value = bfd_get (long_bit, core_bfd,
descdata + kp->ki_rusage + kp->ru_majflt);
- printf_filtered ("Major faults (memory page faults): %s\n",
- pulongest (value));
+ gdb_printf ("Major faults (memory page faults): %s\n",
+ pulongest (value));
value = bfd_get (long_bit, core_bfd,
descdata + kp->ki_rusage_ch + kp->ru_majflt);
- printf_filtered ("Major faults, children: %s\n", pulongest (value));
+ gdb_printf ("Major faults, children: %s\n", pulongest (value));
fbsd_core_fetch_timeval (gdbarch,
descdata + kp->ki_rusage + kp->ru_utime,
sec, value);
- printf_filtered ("utime: %s.%06d\n", plongest (sec), (int) value);
+ gdb_printf ("utime: %s.%06d\n", plongest (sec), (int) value);
fbsd_core_fetch_timeval (gdbarch,
descdata + kp->ki_rusage + kp->ru_stime,
sec, value);
- printf_filtered ("stime: %s.%06d\n", plongest (sec), (int) value);
+ gdb_printf ("stime: %s.%06d\n", plongest (sec), (int) value);
fbsd_core_fetch_timeval (gdbarch,
descdata + kp->ki_rusage_ch + kp->ru_utime,
sec, value);
- printf_filtered ("utime, children: %s.%06d\n", plongest (sec), (int) value);
+ gdb_printf ("utime, children: %s.%06d\n", plongest (sec), (int) value);
fbsd_core_fetch_timeval (gdbarch,
descdata + kp->ki_rusage_ch + kp->ru_stime,
sec, value);
- printf_filtered ("stime, children: %s.%06d\n", plongest (sec), (int) value);
- printf_filtered ("'nice' value: %d\n",
- (int) bfd_get_signed_8 (core_bfd, descdata + kp->ki_nice));
+ gdb_printf ("stime, children: %s.%06d\n", plongest (sec), (int) value);
+ gdb_printf ("'nice' value: %d\n",
+ (int) bfd_get_signed_8 (core_bfd, descdata + kp->ki_nice));
fbsd_core_fetch_timeval (gdbarch, descdata + kp->ki_start, sec, value);
- printf_filtered ("Start time: %s.%06d\n", plongest (sec), (int) value);
- printf_filtered ("Virtual memory size: %s kB\n",
- pulongest (bfd_get (addr_bit, core_bfd,
- descdata + kp->ki_size) / 1024));
- printf_filtered ("Data size: %s pages\n",
- pulongest (bfd_get (addr_bit, core_bfd,
- descdata + kp->ki_dsize)));
- printf_filtered ("Stack size: %s pages\n",
- pulongest (bfd_get (addr_bit, core_bfd,
- descdata + kp->ki_ssize)));
- printf_filtered ("Text size: %s pages\n",
- pulongest (bfd_get (addr_bit, core_bfd,
- descdata + kp->ki_tsize)));
- printf_filtered ("Resident set size: %s pages\n",
- pulongest (bfd_get (addr_bit, core_bfd,
- descdata + kp->ki_rssize)));
- printf_filtered ("Maximum RSS: %s pages\n",
- pulongest (bfd_get (long_bit, core_bfd,
- descdata + kp->ki_rusage
- + kp->ru_maxrss)));
+ gdb_printf ("Start time: %s.%06d\n", plongest (sec), (int) value);
+ gdb_printf ("Virtual memory size: %s kB\n",
+ pulongest (bfd_get (addr_bit, core_bfd,
+ descdata + kp->ki_size) / 1024));
+ gdb_printf ("Data size: %s pages\n",
+ pulongest (bfd_get (addr_bit, core_bfd,
+ descdata + kp->ki_dsize)));
+ gdb_printf ("Stack size: %s pages\n",
+ pulongest (bfd_get (addr_bit, core_bfd,
+ descdata + kp->ki_ssize)));
+ gdb_printf ("Text size: %s pages\n",
+ pulongest (bfd_get (addr_bit, core_bfd,
+ descdata + kp->ki_tsize)));
+ gdb_printf ("Resident set size: %s pages\n",
+ pulongest (bfd_get (addr_bit, core_bfd,
+ descdata + kp->ki_rssize)));
+ gdb_printf ("Maximum RSS: %s pages\n",
+ pulongest (bfd_get (long_bit, core_bfd,
+ descdata + kp->ki_rusage
+ + kp->ru_maxrss)));
fbsd_print_sigset ("Ignored Signals", descdata + kp->ki_sigignore);
fbsd_print_sigset ("Caught Signals", descdata + kp->ki_sigcatch);
}
@@ -1476,7 +1483,7 @@ fbsd_core_info_proc (struct gdbarch *gdbarch, const char *args,
pid = bfd_core_file_pid (core_bfd);
if (pid != 0)
- printf_filtered (_("process %d\n"), pid);
+ gdb_printf (_("process %d\n"), pid);
if (do_cmdline)
{
@@ -1484,7 +1491,7 @@ fbsd_core_info_proc (struct gdbarch *gdbarch, const char *args,
cmdline = bfd_core_file_failing_command (core_bfd);
if (cmdline)
- printf_filtered ("cmdline = '%s'\n", cmdline);
+ gdb_printf ("cmdline = '%s'\n", cmdline);
else
warning (_("Command line unavailable"));
}
@@ -1493,7 +1500,7 @@ fbsd_core_info_proc (struct gdbarch *gdbarch, const char *args,
gdb::unique_xmalloc_ptr<char> cwd =
fbsd_core_vnode_path (gdbarch, KINFO_FILE_FD_TYPE_CWD);
if (cwd)
- printf_filtered ("cwd = '%s'\n", cwd.get ());
+ gdb_printf ("cwd = '%s'\n", cwd.get ());
else
warning (_("unable to read current working directory"));
}
@@ -1502,7 +1509,7 @@ fbsd_core_info_proc (struct gdbarch *gdbarch, const char *args,
gdb::unique_xmalloc_ptr<char> exe =
fbsd_core_vnode_path (gdbarch, KINFO_FILE_FD_TYPE_TEXT);
if (exe)
- printf_filtered ("exe = '%s'\n", exe.get ());
+ gdb_printf ("exe = '%s'\n", exe.get ());
else
warning (_("unable to read executable path name"));
}
@@ -1932,7 +1939,7 @@ fbsd_read_integer_by_name (struct gdbarch *gdbarch, const char *name)
error (_("Unable to resolve symbol '%s'"), name);
gdb_byte buf[4];
- if (target_read_memory (BMSYMBOL_VALUE_ADDRESS (ms), buf, sizeof buf) != 0)
+ if (target_read_memory (ms.value_address (), buf, sizeof buf) != 0)
error (_("Unable to read value of '%s'"), name);
return extract_signed_integer (buf, gdbarch_byte_order (gdbarch));
@@ -1952,9 +1959,9 @@ fbsd_fetch_rtld_offsets (struct gdbarch *gdbarch, struct fbsd_pspace_data *data)
language_c, NULL).symbol;
if (obj_entry_sym == NULL)
error (_("Unable to find Struct_Obj_Entry symbol"));
- data->off_linkmap = lookup_struct_elt (SYMBOL_TYPE (obj_entry_sym),
+ data->off_linkmap = lookup_struct_elt (obj_entry_sym->type (),
"linkmap", 0).offset / 8;
- data->off_tlsindex = lookup_struct_elt (SYMBOL_TYPE (obj_entry_sym),
+ data->off_tlsindex = lookup_struct_elt (obj_entry_sym->type (),
"tlsindex", 0).offset / 8;
data->rtld_offsets_valid = true;
return;
@@ -2041,7 +2048,7 @@ CORE_ADDR
fbsd_skip_solib_resolver (struct gdbarch *gdbarch, CORE_ADDR pc)
{
struct bound_minimal_symbol msym = lookup_bound_minimal_symbol ("_rtld_bind");
- if (msym.minsym != nullptr && BMSYMBOL_VALUE_ADDRESS (msym) == pc)
+ if (msym.minsym != nullptr && msym.value_address () == pc)
return frame_unwind_caller_pc (get_current_frame ());
return 0;
@@ -2261,6 +2268,108 @@ fbsd_report_signal_info (struct gdbarch *gdbarch, struct ui_out *uiout,
}
}
+/* Search a list of struct kinfo_vmmap entries in the ENTRIES buffer
+ of LEN bytes to find the length of the entry starting at ADDR.
+ Returns the length of the entry or zero if no entry was found. */
+
+static ULONGEST
+fbsd_vmmap_length (struct gdbarch *gdbarch, unsigned char *entries, size_t len,
+ CORE_ADDR addr)
+{
+ enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
+ unsigned char *descdata = entries;
+ unsigned char *descend = descdata + len;
+
+ /* Skip over the structure size. */
+ descdata += 4;
+
+ while (descdata + KVE_PATH < descend)
+ {
+ ULONGEST structsize = extract_unsigned_integer (descdata
+ + KVE_STRUCTSIZE, 4,
+ byte_order);
+ if (structsize < KVE_PATH)
+ return false;
+
+ ULONGEST start = extract_unsigned_integer (descdata + KVE_START, 8,
+ byte_order);
+ ULONGEST end = extract_unsigned_integer (descdata + KVE_END, 8,
+ byte_order);
+ if (start == addr)
+ return end - start;
+
+ descdata += structsize;
+ }
+ return 0;
+}
+
+/* Helper for fbsd_vsyscall_range that does the real work of finding
+ the vDSO's address range. */
+
+static bool
+fbsd_vdso_range (struct gdbarch *gdbarch, struct mem_range *range)
+{
+ struct target_ops *ops = current_inferior ()->top_target ();
+
+ if (target_auxv_search (ops, AT_FREEBSD_KPRELOAD, &range->start) <= 0)
+ return false;
+
+ if (!target_has_execution ())
+ {
+ /* Search for the ending address in the NT_PROCSTAT_VMMAP note. */
+ asection *section = bfd_get_section_by_name (core_bfd,
+ ".note.freebsdcore.vmmap");
+ if (section == nullptr)
+ return false;
+
+ size_t note_size = bfd_section_size (section);
+ if (note_size < 4)
+ return false;
+
+ gdb::def_vector<unsigned char> contents (note_size);
+ if (!bfd_get_section_contents (core_bfd, section, contents.data (),
+ 0, note_size))
+ return false;
+
+ range->length = fbsd_vmmap_length (gdbarch, contents.data (), note_size,
+ range->start);
+ }
+ else
+ {
+ /* Fetch the list of address space entries from the running target. */
+ gdb::optional<gdb::byte_vector> buf =
+ target_read_alloc (ops, TARGET_OBJECT_FREEBSD_VMMAP, nullptr);
+ if (!buf || buf->empty ())
+ return false;
+
+ range->length = fbsd_vmmap_length (gdbarch, buf->data (), buf->size (),
+ range->start);
+ }
+ return range->length != 0;
+}
+
+/* Return the address range of the vDSO for the current inferior. */
+
+static int
+fbsd_vsyscall_range (struct gdbarch *gdbarch, struct mem_range *range)
+{
+ struct fbsd_pspace_data *data = get_fbsd_pspace_data (current_program_space);
+
+ if (data->vdso_range_p == 0)
+ {
+ if (fbsd_vdso_range (gdbarch, &data->vdso_range))
+ data->vdso_range_p = 1;
+ else
+ data->vdso_range_p = -1;
+ }
+
+ if (data->vdso_range_p < 0)
+ return 0;
+
+ *range = data->vdso_range;
+ return 1;
+}
+
/* To be called from GDB_OSABI_FREEBSD handlers. */
void
@@ -2277,6 +2386,7 @@ fbsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
set_gdbarch_gdb_signal_to_target (gdbarch, fbsd_gdb_signal_to_target);
set_gdbarch_report_signal_info (gdbarch, fbsd_report_signal_info);
set_gdbarch_skip_solib_resolver (gdbarch, fbsd_skip_solib_resolver);
+ set_gdbarch_vsyscall_range (gdbarch, fbsd_vsyscall_range);
/* `catch syscall' */
set_xml_syscall_file_name (gdbarch, "syscalls/freebsd.xml");
diff --git a/gdb/features/Makefile b/gdb/features/Makefile
index bd39abda108..15d623c2681 100644
--- a/gdb/features/Makefile
+++ b/gdb/features/Makefile
@@ -173,6 +173,7 @@ GDB = false
aarch64-feature = 1
arm-feature = 1
i386-feature = 1
+loongarch-feature = 1
riscv-feature = 1
tic6x-feature = 1
@@ -197,6 +198,7 @@ FEATURE_XMLFILES = aarch64-core.xml \
aarch64-fpu.xml \
aarch64-pauth.xml \
aarch64-mte.xml \
+ aarch64-tls.xml \
arc/v1-core.xml \
arc/v1-aux.xml \
arc/v2-core.xml \
@@ -205,7 +207,9 @@ FEATURE_XMLFILES = aarch64-core.xml \
arm/arm-fpa.xml \
arm/arm-m-profile.xml \
arm/arm-m-profile-mve.xml \
+ arm/arm-m-system.xml \
arm/arm-m-profile-with-fpa.xml \
+ arm/arm-tls.xml \
arm/arm-vfpv2.xml \
arm/arm-vfpv3.xml \
arm/xscale-iwmmxt.xml \
@@ -215,7 +219,6 @@ FEATURE_XMLFILES = aarch64-core.xml \
i386/32bit-avx.xml \
i386/32bit-mpx.xml \
i386/32bit-avx512.xml \
- i386/32bit-pkeys.xml \
i386/32bit-segments.xml \
i386/64bit-avx512.xml \
i386/64bit-core.xml \
@@ -223,9 +226,11 @@ FEATURE_XMLFILES = aarch64-core.xml \
i386/64bit-segments.xml \
i386/64bit-avx.xml \
i386/64bit-linux.xml \
- i386/64bit-pkeys.xml \
i386/64bit-sse.xml \
+ i386/pkeys.xml \
i386/x32-core.xml \
+ loongarch/base32.xml \
+ loongarch/base64.xml \
riscv/rv32e-xregs.xml \
riscv/32bit-cpu.xml \
riscv/32bit-fpu.xml \
diff --git a/gdb/features/aarch64-tls.c b/gdb/features/aarch64-tls.c
new file mode 100644
index 00000000000..30d730dffba
--- /dev/null
+++ b/gdb/features/aarch64-tls.c
@@ -0,0 +1,14 @@
+/* THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi:set ro:
+ Original: aarch64-tls.xml */
+
+#include "gdbsupport/tdesc.h"
+
+static int
+create_feature_aarch64_tls (struct target_desc *result, long regnum)
+{
+ struct tdesc_feature *feature;
+
+ feature = tdesc_create_feature (result, "org.gnu.gdb.aarch64.tls");
+ tdesc_create_reg (feature, "tpidr", regnum++, 1, NULL, 64, "data_ptr");
+ return regnum;
+}
diff --git a/gdb/features/i386/64bit-pkeys.xml b/gdb/features/aarch64-tls.xml
index db6c10af65f..f6437785f71 100644
--- a/gdb/features/i386/64bit-pkeys.xml
+++ b/gdb/features/aarch64-tls.xml
@@ -1,13 +1,11 @@
<?xml version="1.0"?>
-<!-- Copyright (C) 2016-2022 Free Software Foundation, Inc.
+<!-- Copyright (C) 2022 Free Software Foundation, Inc.
Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved. -->
<!DOCTYPE feature SYSTEM "gdb-target.dtd">
-<feature name="org.gnu.gdb.i386.pkeys">
-
- <reg name="pkru" bitsize="32" type="uint32"/>
-
+<feature name="org.gnu.gdb.aarch64.tls">
+ <reg name="tpidr" bitsize="64" type="data_ptr"/>
</feature>
diff --git a/gdb/features/arm/arm-m-system.c b/gdb/features/arm/arm-m-system.c
new file mode 100644
index 00000000000..3fb20a57198
--- /dev/null
+++ b/gdb/features/arm/arm-m-system.c
@@ -0,0 +1,15 @@
+/* THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi:set ro:
+ Original: arm-m-system.xml */
+
+#include "gdbsupport/tdesc.h"
+
+static int
+create_feature_arm_arm_m_system (struct target_desc *result, long regnum)
+{
+ struct tdesc_feature *feature;
+
+ feature = tdesc_create_feature (result, "org.gnu.gdb.arm.m-system");
+ tdesc_create_reg (feature, "msp", regnum++, 1, NULL, 32, "data_ptr");
+ tdesc_create_reg (feature, "psp", regnum++, 1, NULL, 32, "data_ptr");
+ return regnum;
+}
diff --git a/gdb/features/arm/arm-m-system.xml b/gdb/features/arm/arm-m-system.xml
new file mode 100644
index 00000000000..eb167adb21a
--- /dev/null
+++ b/gdb/features/arm/arm-m-system.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2022 Free Software Foundation, Inc.
+
+ Copying and distribution of this file, with or without modification,
+ are permitted in any medium without royalty provided the copyright
+ notice and this notice are preserved. -->
+
+<!DOCTYPE feature SYSTEM "gdb-target.dtd">
+<feature name="org.gnu.gdb.arm.m-system">
+ <reg name="msp" bitsize="32" type="data_ptr"/>
+ <reg name="psp" bitsize="32" type="data_ptr"/>
+</feature>
diff --git a/gdb/features/arm/arm-secext.c b/gdb/features/arm/arm-secext.c
new file mode 100644
index 00000000000..39ef4afb05f
--- /dev/null
+++ b/gdb/features/arm/arm-secext.c
@@ -0,0 +1,17 @@
+/* THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi:set ro:
+ Original: arm-secext.xml */
+
+#include "gdbsupport/tdesc.h"
+
+static int
+create_feature_arm_arm_m_system (struct target_desc *result, long regnum)
+{
+ struct tdesc_feature *feature;
+
+ feature = tdesc_create_feature (result, "org.gnu.gdb.arm.secext");
+ tdesc_create_reg (feature, "msp_ns", regnum++, 1, NULL, 32, "data_ptr");
+ tdesc_create_reg (feature, "psp_ns", regnum++, 1, NULL, 32, "data_ptr");
+ tdesc_create_reg (feature, "msp_s", regnum++, 1, NULL, 32, "data_ptr");
+ tdesc_create_reg (feature, "psp_s", regnum++, 1, NULL, 32, "data_ptr");
+ return regnum;
+}
diff --git a/gdb/features/arm/arm-secext.xml b/gdb/features/arm/arm-secext.xml
new file mode 100644
index 00000000000..52b2c20a982
--- /dev/null
+++ b/gdb/features/arm/arm-secext.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2022 Free Software Foundation, Inc.
+
+ Copying and distribution of this file, with or without modification,
+ are permitted in any medium without royalty provided the copyright
+ notice and this notice are preserved. -->
+
+<!DOCTYPE feature SYSTEM "gdb-target.dtd">
+<feature name="org.gnu.gdb.arm.secext">
+ <!-- We have 4 stack pointers with the security extension. -->
+ <reg name="msp_ns" bitsize="32" type="data_ptr"/>
+ <reg name="psp_ns" bitsize="32" type="data_ptr"/>
+ <reg name="msp_s" bitsize="32" type="data_ptr"/>
+ <reg name="psp_s" bitsize="32" type="data_ptr"/>
+</feature>
diff --git a/gdb/features/arm/arm-tls.c b/gdb/features/arm/arm-tls.c
new file mode 100644
index 00000000000..d1214dda8ec
--- /dev/null
+++ b/gdb/features/arm/arm-tls.c
@@ -0,0 +1,14 @@
+/* THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi:set ro:
+ Original: arm-tls.xml */
+
+#include "gdbsupport/tdesc.h"
+
+static int
+create_feature_arm_arm_tls (struct target_desc *result, long regnum)
+{
+ struct tdesc_feature *feature;
+
+ feature = tdesc_create_feature (result, "org.gnu.gdb.arm.tls");
+ tdesc_create_reg (feature, "tpidruro", regnum++, 1, NULL, 32, "data_ptr");
+ return regnum;
+}
diff --git a/gdb/features/arm/arm-tls.xml b/gdb/features/arm/arm-tls.xml
new file mode 100644
index 00000000000..3cdf73e776f
--- /dev/null
+++ b/gdb/features/arm/arm-tls.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2022 Free Software Foundation, Inc.
+
+ Copying and distribution of this file, with or without modification,
+ are permitted in any medium without royalty provided the copyright
+ notice and this notice are preserved. -->
+
+<!DOCTYPE feature SYSTEM "gdb-target.dtd">
+<feature name="org.gnu.gdb.arm.tls">
+ <reg name="tpidruro" bitsize="32" type="data_ptr"/>
+</feature>
diff --git a/gdb/features/i386/64bit-pkeys.c b/gdb/features/i386/64bit-pkeys.c
deleted file mode 100644
index 83001d4a876..00000000000
--- a/gdb/features/i386/64bit-pkeys.c
+++ /dev/null
@@ -1,14 +0,0 @@
-/* THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi:set ro:
- Original: 64bit-pkeys.xml */
-
-#include "gdbsupport/tdesc.h"
-
-static int
-create_feature_i386_64bit_pkeys (struct target_desc *result, long regnum)
-{
- struct tdesc_feature *feature;
-
- feature = tdesc_create_feature (result, "org.gnu.gdb.i386.pkeys");
- tdesc_create_reg (feature, "pkru", regnum++, 1, NULL, 32, "uint32");
- return regnum;
-}
diff --git a/gdb/features/i386/32bit-pkeys.c b/gdb/features/i386/pkeys.c
index 5e9087e4303..955d563176a 100644
--- a/gdb/features/i386/32bit-pkeys.c
+++ b/gdb/features/i386/pkeys.c
@@ -1,10 +1,10 @@
/* THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi:set ro:
- Original: 32bit-pkeys.xml */
+ Original: pkeys.xml */
#include "gdbsupport/tdesc.h"
static int
-create_feature_i386_32bit_pkeys (struct target_desc *result, long regnum)
+create_feature_i386_pkeys (struct target_desc *result, long regnum)
{
struct tdesc_feature *feature;
diff --git a/gdb/features/i386/32bit-pkeys.xml b/gdb/features/i386/pkeys.xml
index db6c10af65f..db6c10af65f 100644
--- a/gdb/features/i386/32bit-pkeys.xml
+++ b/gdb/features/i386/pkeys.xml
diff --git a/gdb/features/loongarch/base32.c b/gdb/features/loongarch/base32.c
new file mode 100644
index 00000000000..7105c152aed
--- /dev/null
+++ b/gdb/features/loongarch/base32.c
@@ -0,0 +1,47 @@
+/* THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi:set ro:
+ Original: base32.xml */
+
+#include "gdbsupport/tdesc.h"
+
+static int
+create_feature_loongarch_base32 (struct target_desc *result, long regnum)
+{
+ struct tdesc_feature *feature;
+
+ feature = tdesc_create_feature (result, "org.gnu.gdb.loongarch.base");
+ tdesc_create_reg (feature, "r0", regnum++, 1, "general", 32, "uint32");
+ tdesc_create_reg (feature, "r1", regnum++, 1, "general", 32, "code_ptr");
+ tdesc_create_reg (feature, "r2", regnum++, 1, "general", 32, "data_ptr");
+ tdesc_create_reg (feature, "r3", regnum++, 1, "general", 32, "data_ptr");
+ tdesc_create_reg (feature, "r4", regnum++, 1, "general", 32, "uint32");
+ tdesc_create_reg (feature, "r5", regnum++, 1, "general", 32, "uint32");
+ tdesc_create_reg (feature, "r6", regnum++, 1, "general", 32, "uint32");
+ tdesc_create_reg (feature, "r7", regnum++, 1, "general", 32, "uint32");
+ tdesc_create_reg (feature, "r8", regnum++, 1, "general", 32, "uint32");
+ tdesc_create_reg (feature, "r9", regnum++, 1, "general", 32, "uint32");
+ tdesc_create_reg (feature, "r10", regnum++, 1, "general", 32, "uint32");
+ tdesc_create_reg (feature, "r11", regnum++, 1, "general", 32, "uint32");
+ tdesc_create_reg (feature, "r12", regnum++, 1, "general", 32, "uint32");
+ tdesc_create_reg (feature, "r13", regnum++, 1, "general", 32, "uint32");
+ tdesc_create_reg (feature, "r14", regnum++, 1, "general", 32, "uint32");
+ tdesc_create_reg (feature, "r15", regnum++, 1, "general", 32, "uint32");
+ tdesc_create_reg (feature, "r16", regnum++, 1, "general", 32, "uint32");
+ tdesc_create_reg (feature, "r17", regnum++, 1, "general", 32, "uint32");
+ tdesc_create_reg (feature, "r18", regnum++, 1, "general", 32, "uint32");
+ tdesc_create_reg (feature, "r19", regnum++, 1, "general", 32, "uint32");
+ tdesc_create_reg (feature, "r20", regnum++, 1, "general", 32, "uint32");
+ tdesc_create_reg (feature, "r21", regnum++, 1, "general", 32, "uint32");
+ tdesc_create_reg (feature, "r22", regnum++, 1, "general", 32, "data_ptr");
+ tdesc_create_reg (feature, "r23", regnum++, 1, "general", 32, "uint32");
+ tdesc_create_reg (feature, "r24", regnum++, 1, "general", 32, "uint32");
+ tdesc_create_reg (feature, "r25", regnum++, 1, "general", 32, "uint32");
+ tdesc_create_reg (feature, "r26", regnum++, 1, "general", 32, "uint32");
+ tdesc_create_reg (feature, "r27", regnum++, 1, "general", 32, "uint32");
+ tdesc_create_reg (feature, "r28", regnum++, 1, "general", 32, "uint32");
+ tdesc_create_reg (feature, "r29", regnum++, 1, "general", 32, "uint32");
+ tdesc_create_reg (feature, "r30", regnum++, 1, "general", 32, "uint32");
+ tdesc_create_reg (feature, "r31", regnum++, 1, "general", 32, "uint32");
+ tdesc_create_reg (feature, "pc", regnum++, 1, "general", 32, "code_ptr");
+ tdesc_create_reg (feature, "badv", regnum++, 1, "general", 32, "code_ptr");
+ return regnum;
+}
diff --git a/gdb/features/loongarch/base32.xml b/gdb/features/loongarch/base32.xml
new file mode 100644
index 00000000000..5b00f8a8d37
--- /dev/null
+++ b/gdb/features/loongarch/base32.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2022 Free Software Foundation, Inc.
+
+ Copying and distribution of this file, with or without modification,
+ are permitted in any medium without royalty provided the copyright
+ notice and this notice are preserved. -->
+
+<!DOCTYPE feature SYSTEM "gdb-target.dtd">
+<feature name="org.gnu.gdb.loongarch.base">
+ <reg name="r0" bitsize="32" type="uint32" group="general"/>
+ <reg name="r1" bitsize="32" type="code_ptr" group="general"/>
+ <reg name="r2" bitsize="32" type="data_ptr" group="general"/>
+ <reg name="r3" bitsize="32" type="data_ptr" group="general"/>
+ <reg name="r4" bitsize="32" type="uint32" group="general"/>
+ <reg name="r5" bitsize="32" type="uint32" group="general"/>
+ <reg name="r6" bitsize="32" type="uint32" group="general"/>
+ <reg name="r7" bitsize="32" type="uint32" group="general"/>
+ <reg name="r8" bitsize="32" type="uint32" group="general"/>
+ <reg name="r9" bitsize="32" type="uint32" group="general"/>
+ <reg name="r10" bitsize="32" type="uint32" group="general"/>
+ <reg name="r11" bitsize="32" type="uint32" group="general"/>
+ <reg name="r12" bitsize="32" type="uint32" group="general"/>
+ <reg name="r13" bitsize="32" type="uint32" group="general"/>
+ <reg name="r14" bitsize="32" type="uint32" group="general"/>
+ <reg name="r15" bitsize="32" type="uint32" group="general"/>
+ <reg name="r16" bitsize="32" type="uint32" group="general"/>
+ <reg name="r17" bitsize="32" type="uint32" group="general"/>
+ <reg name="r18" bitsize="32" type="uint32" group="general"/>
+ <reg name="r19" bitsize="32" type="uint32" group="general"/>
+ <reg name="r20" bitsize="32" type="uint32" group="general"/>
+ <reg name="r21" bitsize="32" type="uint32" group="general"/>
+ <reg name="r22" bitsize="32" type="data_ptr" group="general"/>
+ <reg name="r23" bitsize="32" type="uint32" group="general"/>
+ <reg name="r24" bitsize="32" type="uint32" group="general"/>
+ <reg name="r25" bitsize="32" type="uint32" group="general"/>
+ <reg name="r26" bitsize="32" type="uint32" group="general"/>
+ <reg name="r27" bitsize="32" type="uint32" group="general"/>
+ <reg name="r28" bitsize="32" type="uint32" group="general"/>
+ <reg name="r29" bitsize="32" type="uint32" group="general"/>
+ <reg name="r30" bitsize="32" type="uint32" group="general"/>
+ <reg name="r31" bitsize="32" type="uint32" group="general"/>
+ <reg name="pc" bitsize="32" type="code_ptr" group="general"/>
+ <reg name="badv" bitsize="32" type="code_ptr" group="general"/>
+</feature>
diff --git a/gdb/features/loongarch/base64.c b/gdb/features/loongarch/base64.c
new file mode 100644
index 00000000000..63eee024554
--- /dev/null
+++ b/gdb/features/loongarch/base64.c
@@ -0,0 +1,47 @@
+/* THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi:set ro:
+ Original: base64.xml */
+
+#include "gdbsupport/tdesc.h"
+
+static int
+create_feature_loongarch_base64 (struct target_desc *result, long regnum)
+{
+ struct tdesc_feature *feature;
+
+ feature = tdesc_create_feature (result, "org.gnu.gdb.loongarch.base");
+ tdesc_create_reg (feature, "r0", regnum++, 1, "general", 64, "uint64");
+ tdesc_create_reg (feature, "r1", regnum++, 1, "general", 64, "code_ptr");
+ tdesc_create_reg (feature, "r2", regnum++, 1, "general", 64, "data_ptr");
+ tdesc_create_reg (feature, "r3", regnum++, 1, "general", 64, "data_ptr");
+ tdesc_create_reg (feature, "r4", regnum++, 1, "general", 64, "uint64");
+ tdesc_create_reg (feature, "r5", regnum++, 1, "general", 64, "uint64");
+ tdesc_create_reg (feature, "r6", regnum++, 1, "general", 64, "uint64");
+ tdesc_create_reg (feature, "r7", regnum++, 1, "general", 64, "uint64");
+ tdesc_create_reg (feature, "r8", regnum++, 1, "general", 64, "uint64");
+ tdesc_create_reg (feature, "r9", regnum++, 1, "general", 64, "uint64");
+ tdesc_create_reg (feature, "r10", regnum++, 1, "general", 64, "uint64");
+ tdesc_create_reg (feature, "r11", regnum++, 1, "general", 64, "uint64");
+ tdesc_create_reg (feature, "r12", regnum++, 1, "general", 64, "uint64");
+ tdesc_create_reg (feature, "r13", regnum++, 1, "general", 64, "uint64");
+ tdesc_create_reg (feature, "r14", regnum++, 1, "general", 64, "uint64");
+ tdesc_create_reg (feature, "r15", regnum++, 1, "general", 64, "uint64");
+ tdesc_create_reg (feature, "r16", regnum++, 1, "general", 64, "uint64");
+ tdesc_create_reg (feature, "r17", regnum++, 1, "general", 64, "uint64");
+ tdesc_create_reg (feature, "r18", regnum++, 1, "general", 64, "uint64");
+ tdesc_create_reg (feature, "r19", regnum++, 1, "general", 64, "uint64");
+ tdesc_create_reg (feature, "r20", regnum++, 1, "general", 64, "uint64");
+ tdesc_create_reg (feature, "r21", regnum++, 1, "general", 64, "uint64");
+ tdesc_create_reg (feature, "r22", regnum++, 1, "general", 64, "data_ptr");
+ tdesc_create_reg (feature, "r23", regnum++, 1, "general", 64, "uint64");
+ tdesc_create_reg (feature, "r24", regnum++, 1, "general", 64, "uint64");
+ tdesc_create_reg (feature, "r25", regnum++, 1, "general", 64, "uint64");
+ tdesc_create_reg (feature, "r26", regnum++, 1, "general", 64, "uint64");
+ tdesc_create_reg (feature, "r27", regnum++, 1, "general", 64, "uint64");
+ tdesc_create_reg (feature, "r28", regnum++, 1, "general", 64, "uint64");
+ tdesc_create_reg (feature, "r29", regnum++, 1, "general", 64, "uint64");
+ tdesc_create_reg (feature, "r30", regnum++, 1, "general", 64, "uint64");
+ tdesc_create_reg (feature, "r31", regnum++, 1, "general", 64, "uint64");
+ tdesc_create_reg (feature, "pc", regnum++, 1, "general", 64, "code_ptr");
+ tdesc_create_reg (feature, "badv", regnum++, 1, "general", 64, "code_ptr");
+ return regnum;
+}
diff --git a/gdb/features/loongarch/base64.xml b/gdb/features/loongarch/base64.xml
new file mode 100644
index 00000000000..bef91e50dd7
--- /dev/null
+++ b/gdb/features/loongarch/base64.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2022 Free Software Foundation, Inc.
+
+ Copying and distribution of this file, with or without modification,
+ are permitted in any medium without royalty provided the copyright
+ notice and this notice are preserved. -->
+
+<!DOCTYPE feature SYSTEM "gdb-target.dtd">
+<feature name="org.gnu.gdb.loongarch.base">
+ <reg name="r0" bitsize="64" type="uint64" group="general"/>
+ <reg name="r1" bitsize="64" type="code_ptr" group="general"/>
+ <reg name="r2" bitsize="64" type="data_ptr" group="general"/>
+ <reg name="r3" bitsize="64" type="data_ptr" group="general"/>
+ <reg name="r4" bitsize="64" type="uint64" group="general"/>
+ <reg name="r5" bitsize="64" type="uint64" group="general"/>
+ <reg name="r6" bitsize="64" type="uint64" group="general"/>
+ <reg name="r7" bitsize="64" type="uint64" group="general"/>
+ <reg name="r8" bitsize="64" type="uint64" group="general"/>
+ <reg name="r9" bitsize="64" type="uint64" group="general"/>
+ <reg name="r10" bitsize="64" type="uint64" group="general"/>
+ <reg name="r11" bitsize="64" type="uint64" group="general"/>
+ <reg name="r12" bitsize="64" type="uint64" group="general"/>
+ <reg name="r13" bitsize="64" type="uint64" group="general"/>
+ <reg name="r14" bitsize="64" type="uint64" group="general"/>
+ <reg name="r15" bitsize="64" type="uint64" group="general"/>
+ <reg name="r16" bitsize="64" type="uint64" group="general"/>
+ <reg name="r17" bitsize="64" type="uint64" group="general"/>
+ <reg name="r18" bitsize="64" type="uint64" group="general"/>
+ <reg name="r19" bitsize="64" type="uint64" group="general"/>
+ <reg name="r20" bitsize="64" type="uint64" group="general"/>
+ <reg name="r21" bitsize="64" type="uint64" group="general"/>
+ <reg name="r22" bitsize="64" type="data_ptr" group="general"/>
+ <reg name="r23" bitsize="64" type="uint64" group="general"/>
+ <reg name="r24" bitsize="64" type="uint64" group="general"/>
+ <reg name="r25" bitsize="64" type="uint64" group="general"/>
+ <reg name="r26" bitsize="64" type="uint64" group="general"/>
+ <reg name="r27" bitsize="64" type="uint64" group="general"/>
+ <reg name="r28" bitsize="64" type="uint64" group="general"/>
+ <reg name="r29" bitsize="64" type="uint64" group="general"/>
+ <reg name="r30" bitsize="64" type="uint64" group="general"/>
+ <reg name="r31" bitsize="64" type="uint64" group="general"/>
+ <reg name="pc" bitsize="64" type="code_ptr" group="general"/>
+ <reg name="badv" bitsize="64" type="code_ptr" group="general"/>
+</feature>
diff --git a/gdb/filename-seen-cache.h b/gdb/filename-seen-cache.h
index 09529031973..83a6e8a6258 100644
--- a/gdb/filename-seen-cache.h
+++ b/gdb/filename-seen-cache.h
@@ -22,6 +22,7 @@
#include "defs.h"
#include "gdbsupport/function-view.h"
+#include "gdbsupport/gdb-hashtab.h"
/* Cache to watch for file names already seen. */
diff --git a/gdb/filesystem.c b/gdb/filesystem.c
index 1f969d3ba4d..f9aaeed7b40 100644
--- a/gdb/filesystem.c
+++ b/gdb/filesystem.c
@@ -64,16 +64,16 @@ show_target_file_system_kind_command (struct ui_file *file,
const char *value)
{
if (target_file_system_kind == file_system_kind_auto)
- fprintf_filtered (file, _("\
+ gdb_printf (file, _("\
The assumed file system kind for target reported file names \
is \"%s\" (currently \"%s\").\n"),
- value,
- effective_target_file_system_kind ());
+ value,
+ effective_target_file_system_kind ());
else
- fprintf_filtered (file, _("\
+ gdb_printf (file, _("\
The assumed file system kind for target reported file names \
is \"%s\".\n"),
- value);
+ value);
}
void _initialize_filesystem ();
diff --git a/gdb/findcmd.c b/gdb/findcmd.c
index 4ae60970f27..ff13f22e970 100644
--- a/gdb/findcmd.c
+++ b/gdb/findcmd.c
@@ -121,7 +121,7 @@ parse_find_args (const char *args, ULONGEST *max_countp,
len = value_as_long (v);
if (len == 0)
{
- printf_filtered (_("Empty search range.\n"));
+ gdb_printf (_("Empty search range.\n"));
return pattern_buf;
}
if (len < 0)
@@ -247,7 +247,7 @@ find_command (const char *args, int from_tty)
break;
print_address (gdbarch, found_addr, gdb_stdout);
- printf_filtered ("\n");
+ gdb_printf ("\n");
++found_count;
last_found_addr = found_addr;
@@ -274,10 +274,10 @@ find_command (const char *args, int from_tty)
}
if (found_count == 0)
- printf_filtered ("Pattern not found.\n");
+ gdb_printf ("Pattern not found.\n");
else
- printf_filtered ("%d pattern%s found.\n", found_count,
- found_count > 1 ? "s" : "");
+ gdb_printf ("%d pattern%s found.\n", found_count,
+ found_count > 1 ? "s" : "");
}
void _initialize_mem_search ();
diff --git a/gdb/findvar.c b/gdb/findvar.c
index 8fcdcbb92b2..1f0317567cd 100644
--- a/gdb/findvar.c
+++ b/gdb/findvar.c
@@ -358,7 +358,7 @@ symbol_read_needs (struct symbol *sym)
if (SYMBOL_COMPUTED_OPS (sym) != NULL)
return SYMBOL_COMPUTED_OPS (sym)->get_symbol_read_needs (sym);
- switch (SYMBOL_CLASS (sym))
+ switch (sym->aclass ())
{
/* All cases listed explicitly so that gcc -Wall will detect it if
we failed to consider one. */
@@ -404,7 +404,7 @@ symbol_read_needs_frame (struct symbol *sym)
struct minsym_lookup_data
{
/* The name of the minimal symbol we are searching for. */
- const char *name;
+ const char *name = nullptr;
/* The field where the callback should store the minimal symbol
if found. It should be initialized to NULL before the search
@@ -534,7 +534,7 @@ get_hosting_frame (struct symbol *var, const struct block *var_block,
/* Assuming we have a block for this frame: if we are at the function
level, the immediate upper lexical block is in an outer function:
follow the static link. */
- else if (BLOCK_FUNCTION (frame_block))
+ else if (frame_block->function ())
{
const struct dynamic_prop *static_link
= block_static_link (frame_block);
@@ -559,7 +559,7 @@ get_hosting_frame (struct symbol *var, const struct block *var_block,
else
/* We must be in some function nested lexical block. Just get the
outer block: both must share the same frame. */
- frame_block = BLOCK_SUPERBLOCK (frame_block);
+ frame_block = frame_block->superblock ();
}
/* Old compilers may not provide a static link, or they may provide an
@@ -571,11 +571,11 @@ get_hosting_frame (struct symbol *var, const struct block *var_block,
frame = block_innermost_frame (var_block);
if (frame == NULL)
{
- if (BLOCK_FUNCTION (var_block)
+ if (var_block->function ()
&& !block_inlined_p (var_block)
- && BLOCK_FUNCTION (var_block)->print_name ())
+ && var_block->function ()->print_name ())
error (_("No frame is currently executing in block %s."),
- BLOCK_FUNCTION (var_block)->print_name ());
+ var_block->function ()->print_name ());
else
error (_("No frame is currently executing in specified"
" block"));
@@ -593,7 +593,7 @@ language_defn::read_var_value (struct symbol *var,
struct frame_info *frame) const
{
struct value *v;
- struct type *type = SYMBOL_TYPE (var);
+ struct type *type = var->type ();
CORE_ADDR addr;
enum symbol_needs_kind sym_need;
@@ -616,7 +616,7 @@ language_defn::read_var_value (struct symbol *var,
if (SYMBOL_COMPUTED_OPS (var) != NULL)
return SYMBOL_COMPUTED_OPS (var)->read_variable (var, frame);
- switch (SYMBOL_CLASS (var))
+ switch (var->aclass ())
{
case LOC_CONST:
if (is_dynamic_type (type))
@@ -627,8 +627,7 @@ language_defn::read_var_value (struct symbol *var,
/* Put the constant back in target format. */
v = allocate_value (type);
store_signed_integer (value_contents_raw (v).data (), TYPE_LENGTH (type),
- type_byte_order (type),
- (LONGEST) SYMBOL_VALUE (var));
+ type_byte_order (type), var->value_longest ());
VALUE_LVAL (v) = not_lval;
return v;
@@ -637,14 +636,14 @@ language_defn::read_var_value (struct symbol *var,
v = allocate_value (type);
if (overlay_debugging)
{
- struct objfile *var_objfile = symbol_objfile (var);
- addr = symbol_overlayed_address (SYMBOL_VALUE_ADDRESS (var),
+ struct objfile *var_objfile = var->objfile ();
+ addr = symbol_overlayed_address (var->value_address (),
var->obj_section (var_objfile));
store_typed_address (value_contents_raw (v).data (), type, addr);
}
else
store_typed_address (value_contents_raw (v).data (), type,
- SYMBOL_VALUE_ADDRESS (var));
+ var->value_address ());
VALUE_LVAL (v) = not_lval;
return v;
@@ -655,7 +654,7 @@ language_defn::read_var_value (struct symbol *var,
type = resolve_dynamic_type (type, {}, /* Unused address. */ 0);
}
v = allocate_value (type);
- memcpy (value_contents_raw (v).data (), SYMBOL_VALUE_BYTES (var),
+ memcpy (value_contents_raw (v).data (), var->value_bytes (),
TYPE_LENGTH (type));
VALUE_LVAL (v) = not_lval;
return v;
@@ -663,10 +662,10 @@ language_defn::read_var_value (struct symbol *var,
case LOC_STATIC:
if (overlay_debugging)
addr
- = symbol_overlayed_address (SYMBOL_VALUE_ADDRESS (var),
- var->obj_section (symbol_objfile (var)));
+ = symbol_overlayed_address (var->value_address (),
+ var->obj_section (var->objfile ()));
else
- addr = SYMBOL_VALUE_ADDRESS (var);
+ addr = var->value_address ();
break;
case LOC_ARG:
@@ -674,7 +673,7 @@ language_defn::read_var_value (struct symbol *var,
if (!addr)
error (_("Unknown argument list address for `%s'."),
var->print_name ());
- addr += SYMBOL_VALUE (var);
+ addr += var->value_longest ();
break;
case LOC_REF_ARG:
@@ -686,7 +685,7 @@ language_defn::read_var_value (struct symbol *var,
if (!argref)
error (_("Unknown argument list address for `%s'."),
var->print_name ());
- argref += SYMBOL_VALUE (var);
+ argref += var->value_longest ();
ref = value_at (lookup_pointer_type (type), argref);
addr = value_as_address (ref);
break;
@@ -694,7 +693,7 @@ language_defn::read_var_value (struct symbol *var,
case LOC_LOCAL:
addr = get_frame_locals_address (frame);
- addr += SYMBOL_VALUE (var);
+ addr += var->value_longest ();
break;
case LOC_TYPEDEF:
@@ -705,10 +704,10 @@ language_defn::read_var_value (struct symbol *var,
case LOC_BLOCK:
if (overlay_debugging)
addr = symbol_overlayed_address
- (BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (var)),
- var->obj_section (symbol_objfile (var)));
+ (var->value_block ()->entry_pc (),
+ var->obj_section (var->objfile ()));
else
- addr = BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (var));
+ addr = var->value_block ()->entry_pc ();
break;
case LOC_REGISTER:
@@ -718,7 +717,7 @@ language_defn::read_var_value (struct symbol *var,
->register_number (var, get_frame_arch (frame));
struct value *regval;
- if (SYMBOL_CLASS (var) == LOC_REGPARM_ADDR)
+ if (var->aclass () == LOC_REGPARM_ADDR)
{
regval = value_from_register (lookup_pointer_type (type),
regno,
@@ -751,13 +750,12 @@ language_defn::read_var_value (struct symbol *var,
struct minimal_symbol *msym;
struct obj_section *obj_section;
- memset (&lookup_data, 0, sizeof (lookup_data));
lookup_data.name = var->linkage_name ();
gdbarch_iterate_over_objfiles_in_search_order
- (symbol_arch (var),
+ (var->arch (),
minsym_lookup_iterator_cb, &lookup_data,
- symbol_objfile (var));
+ var->objfile ());
msym = lookup_data.result.minsym;
/* If we can't find the minsym there's a problem in the symbol info.
@@ -766,7 +764,7 @@ language_defn::read_var_value (struct symbol *var,
if (msym == NULL)
{
const char *flavour_name
- = objfile_flavour_name (symbol_objfile (var));
+ = objfile_flavour_name (var->objfile ());
/* We can't get here unless we've opened the file, so flavour_name
can't be NULL. */
@@ -779,9 +777,9 @@ language_defn::read_var_value (struct symbol *var,
a TLS variable. */
if (obj_section == NULL
|| (obj_section->the_bfd_section->flags & SEC_THREAD_LOCAL) != 0)
- addr = MSYMBOL_VALUE_RAW_ADDRESS (msym);
+ addr = msym->value_raw_address ();
else
- addr = BMSYMBOL_VALUE_ADDRESS (lookup_data.result);
+ addr = lookup_data.result.value_address ();
if (overlay_debugging)
addr = symbol_overlayed_address (addr, obj_section);
/* Determine address of TLS variable. */
diff --git a/gdb/fork-child.c b/gdb/fork-child.c
index 89895238c24..89003fa617d 100644
--- a/gdb/fork-child.c
+++ b/gdb/fork-child.c
@@ -98,7 +98,7 @@ postfork_child_hook ()
static int debug_setpgrp = 657473;
/* Make sure we switch to main_ui here in order to be able to
- use the fprintf_unfiltered/warning/error functions. */
+ use the gdb_printf/warning/error functions. */
current_ui = main_ui;
/* Create a new session for the inferior process, if necessary.
@@ -146,9 +146,9 @@ static void
show_startup_with_shell (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file,
- _("Use of shell to start subprocesses is %s.\n"),
- value);
+ gdb_printf (file,
+ _("Use of shell to start subprocesses is %s.\n"),
+ value);
}
void _initialize_fork_child ();
diff --git a/gdb/frame-base.c b/gdb/frame-base.c
index 7f018122d37..91af24b4f74 100644
--- a/gdb/frame-base.c
+++ b/gdb/frame-base.c
@@ -20,7 +20,7 @@
#include "defs.h"
#include "frame-base.h"
#include "frame.h"
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
#include "gdbarch.h"
/* A default frame base implementations. If it wasn't for the old
diff --git a/gdb/frame-unwind.c b/gdb/frame-unwind.c
index fdfe44cb10a..302ce1efb99 100644
--- a/gdb/frame-unwind.c
+++ b/gdb/frame-unwind.c
@@ -24,7 +24,7 @@
#include "inline-frame.h"
#include "value.h"
#include "regcache.h"
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
#include "target.h"
#include "gdbarch.h"
#include "dwarf2/frame-tailcall.h"
diff --git a/gdb/frame.c b/gdb/frame.c
index cee6b08a49a..ae45e22d613 100644
--- a/gdb/frame.c
+++ b/gdb/frame.c
@@ -24,7 +24,7 @@
#include "inferior.h" /* for inferior_ptid */
#include "regcache.h"
#include "user-regs.h"
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
#include "dummy-frame.h"
#include "sentinel-frame.h"
#include "gdbcore.h"
@@ -339,7 +339,7 @@ static void
show_frame_debug (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Frame debugging is %s.\n"), value);
+ gdb_printf (file, _("Frame debugging is %s.\n"), value);
}
/* Implementation of "show backtrace past-main". */
@@ -348,10 +348,10 @@ static void
show_backtrace_past_main (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file,
- _("Whether backtraces should "
- "continue past \"main\" is %s.\n"),
- value);
+ gdb_printf (file,
+ _("Whether backtraces should "
+ "continue past \"main\" is %s.\n"),
+ value);
}
/* Implementation of "show backtrace past-entry". */
@@ -360,9 +360,9 @@ static void
show_backtrace_past_entry (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Whether backtraces should continue past the "
- "entry point of a program is %s.\n"),
- value);
+ gdb_printf (file, _("Whether backtraces should continue past the "
+ "entry point of a program is %s.\n"),
+ value);
}
/* Implementation of "show backtrace limit". */
@@ -371,10 +371,10 @@ static void
show_backtrace_limit (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file,
- _("An upper bound on the number "
- "of backtrace levels is %s.\n"),
- value);
+ gdb_printf (file,
+ _("An upper bound on the number "
+ "of backtrace levels is %s.\n"),
+ value);
}
/* See frame.h. */
@@ -1238,36 +1238,36 @@ frame_unwind_register_value (frame_info *next_frame, int regnum)
{
string_file debug_file;
- fprintf_unfiltered (&debug_file, " ->");
+ gdb_printf (&debug_file, " ->");
if (value_optimized_out (value))
{
- fprintf_unfiltered (&debug_file, " ");
+ gdb_printf (&debug_file, " ");
val_print_not_saved (&debug_file);
}
else
{
if (VALUE_LVAL (value) == lval_register)
- fprintf_unfiltered (&debug_file, " register=%d",
- VALUE_REGNUM (value));
+ gdb_printf (&debug_file, " register=%d",
+ VALUE_REGNUM (value));
else if (VALUE_LVAL (value) == lval_memory)
- fprintf_unfiltered (&debug_file, " address=%s",
- paddress (gdbarch,
- value_address (value)));
+ gdb_printf (&debug_file, " address=%s",
+ paddress (gdbarch,
+ value_address (value)));
else
- fprintf_unfiltered (&debug_file, " computed");
+ gdb_printf (&debug_file, " computed");
if (value_lazy (value))
- fprintf_unfiltered (&debug_file, " lazy");
+ gdb_printf (&debug_file, " lazy");
else
{
int i;
gdb::array_view<const gdb_byte> buf = value_contents (value);
- fprintf_unfiltered (&debug_file, " bytes=");
- fprintf_unfiltered (&debug_file, "[");
+ gdb_printf (&debug_file, " bytes=");
+ gdb_printf (&debug_file, "[");
for (i = 0; i < register_size (gdbarch, regnum); i++)
- fprintf_unfiltered (&debug_file, "%02x", buf[i]);
- fprintf_unfiltered (&debug_file, "]");
+ gdb_printf (&debug_file, "%02x", buf[i]);
+ gdb_printf (&debug_file, "]");
}
}
@@ -2430,12 +2430,12 @@ inside_main_func (frame_info *this_frame)
if (bs.symbol == nullptr)
return false;
- const struct block *block = SYMBOL_BLOCK_VALUE (bs.symbol);
+ const struct block *block = bs.symbol->value_block ();
gdb_assert (block != nullptr);
- sym_addr = BLOCK_START (block);
+ sym_addr = block->start ();
}
else
- sym_addr = BMSYMBOL_VALUE_ADDRESS (msymbol);
+ sym_addr = msymbol.value_address ();
/* Convert any function descriptor addresses into the actual function
code address. */
@@ -2699,10 +2699,10 @@ find_frame_sal (frame_info *frame)
gdb_assert (sym);
symtab_and_line sal;
- if (SYMBOL_LINE (sym) != 0)
+ if (sym->line () != 0)
{
- sal.symtab = symbol_symtab (sym);
- sal.line = SYMBOL_LINE (sym);
+ sal.symtab = sym->symtab ();
+ sal.line = sym->line ();
}
else
/* If the symbol does not have a location, we don't know where
diff --git a/gdb/frv-tdep.c b/gdb/frv-tdep.c
index 1f291d9117d..2328791a540 100644
--- a/gdb/frv-tdep.c
+++ b/gdb/frv-tdep.c
@@ -1384,7 +1384,7 @@ frv_frame_this_id (struct frame_info *this_frame,
/* Check if the stack is empty. */
msym_stack = lookup_minimal_symbol ("_stack", NULL, NULL);
- if (msym_stack.minsym && info->base == BMSYMBOL_VALUE_ADDRESS (msym_stack))
+ if (msym_stack.minsym && info->base == msym_stack.value_address ())
return;
/* Hopefully the prologue analysis either correctly determined the
diff --git a/gdb/ft32-tdep.c b/gdb/ft32-tdep.c
index 34703cc3e12..f77e313e0dd 100644
--- a/gdb/ft32-tdep.c
+++ b/gdb/ft32-tdep.c
@@ -200,7 +200,7 @@ ft32_analyze_prologue (CORE_ADDR start_addr, CORE_ADDR end_addr,
regnum);
msymbol = lookup_minimal_symbol (prolog_symbol, NULL, NULL);
if (msymbol.minsym)
- prologs[regnum] = BMSYMBOL_VALUE_ADDRESS (msymbol);
+ prologs[regnum] = msymbol.value_address ();
else
prologs[regnum] = 0;
}
diff --git a/gdb/gcore.c b/gdb/gcore.c
index 63ebbb79e84..fdb22b72a07 100644
--- a/gdb/gcore.c
+++ b/gdb/gcore.c
@@ -140,9 +140,8 @@ gcore_command (const char *args, int from_tty)
}
if (info_verbose)
- fprintf_filtered (gdb_stdout,
- "Opening corefile '%s' for output.\n",
- corefilename.get ());
+ gdb_printf ("Opening corefile '%s' for output.\n",
+ corefilename.get ());
if (target_supports_dumpcore ())
target_dumpcore (corefilename.get ());
@@ -161,7 +160,7 @@ gcore_command (const char *args, int from_tty)
unlink_file.keep ();
}
- fprintf_filtered (gdb_stdout, "Saved corefile %s\n", corefilename.get ());
+ gdb_printf ("Saved corefile %s\n", corefilename.get ());
}
static enum bfd_architecture
@@ -385,8 +384,8 @@ gcore_create_callback (CORE_ADDR vaddr, unsigned long size, int read,
{
if (info_verbose)
{
- fprintf_filtered (gdb_stdout, "Ignore segment, %s bytes at %s\n",
- plongest (size), paddress (target_gdbarch (), vaddr));
+ gdb_printf ("Ignore segment, %s bytes at %s\n",
+ plongest (size), paddress (target_gdbarch (), vaddr));
}
return 0;
@@ -445,8 +444,8 @@ gcore_create_callback (CORE_ADDR vaddr, unsigned long size, int read,
if (info_verbose)
{
- fprintf_filtered (gdb_stdout, "Save segment, %s bytes at %s\n",
- plongest (size), paddress (target_gdbarch (), vaddr));
+ gdb_printf ("Save segment, %s bytes at %s\n",
+ plongest (size), paddress (target_gdbarch (), vaddr));
}
bfd_set_section_size (osec, size);
diff --git a/gdb/gcore.in b/gdb/gcore.in
index 7038c0c394c..ed7abf2d29b 100644
--- a/gdb/gcore.in
+++ b/gdb/gcore.in
@@ -98,7 +98,7 @@ do
# `</dev/null' to avoid touching interactive terminal if it is
# available but not accessible as GDB would get stopped on SIGTTIN.
"$binary_path/@GDB_TRANSFORM_NAME@" </dev/null \
- --nx --batch --readnever \
+ --nx --batch --readnever -iex 'set debuginfod enabled off' \
-ex "set pagination off" -ex "set height 0" -ex "set width 0" \
"${dump_all_cmds[@]}" \
-ex "attach $pid" -ex "gcore $prefix.$pid" -ex detach -ex quit
diff --git a/gdb/gdb-demangle.c b/gdb/gdb-demangle.c
index 975ad438be5..3db979cf617 100644
--- a/gdb/gdb-demangle.c
+++ b/gdb/gdb-demangle.c
@@ -50,10 +50,10 @@ static void
show_demangle (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file,
- _("Demangling of encoded C++/ObjC names "
- "when displaying symbols is %s.\n"),
- value);
+ gdb_printf (file,
+ _("Demangling of encoded C++/ObjC names "
+ "when displaying symbols is %s.\n"),
+ value);
}
/* See documentation in gdb-demangle.h. */
@@ -63,10 +63,10 @@ static void
show_asm_demangle (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file,
- _("Demangling of C++/ObjC names in "
- "disassembly listings is %s.\n"),
- value);
+ gdb_printf (file,
+ _("Demangling of C++/ObjC names in "
+ "disassembly listings is %s.\n"),
+ value);
}
/* String name for the current demangling style. Set by the
@@ -83,8 +83,8 @@ static void
show_demangling_style_names(struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("The current C++ demangling style is \"%s\".\n"),
- value);
+ gdb_printf (file, _("The current C++ demangling style is \"%s\".\n"),
+ value);
}
/* Set current demangling style. Called by the "set demangle-style"
@@ -204,7 +204,7 @@ demangle_command (const char *args, int from_tty)
gdb::unique_xmalloc_ptr<char> demangled
= language_demangle (lang, name, DMGL_ANSI | DMGL_PARAMS);
if (demangled != NULL)
- printf_filtered ("%s\n", demangled.get ());
+ gdb_printf ("%s\n", demangled.get ());
else
error (_("Can't demangle \"%s\""), name);
}
diff --git a/gdb/gdb_bfd.c b/gdb/gdb_bfd.c
index d28c32352bc..22828482d5b 100644
--- a/gdb/gdb_bfd.c
+++ b/gdb/gdb_bfd.c
@@ -32,6 +32,7 @@
#include "target.h"
#include "gdb/fileio.h"
#include "inferior.h"
+#include "cli/cli-style.h"
/* An object of this type is stored in the section's user data when
mapping a section. */
@@ -131,7 +132,7 @@ static void
show_bfd_sharing (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("BFD sharing is %s.\n"), value);
+ gdb_printf (file, _("BFD sharing is %s.\n"), value);
}
/* When true debugging of the bfd caches is enabled. */
@@ -147,7 +148,7 @@ static void
show_bfd_cache_debug (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("BFD cache debugging is %s.\n"), value);
+ gdb_printf (file, _("BFD cache debugging is %s.\n"), value);
}
/* The type of an object being looked up in gdb_bfd_cache. We use
@@ -1101,7 +1102,8 @@ print_one_bfd (void **slot, void *data)
ui_out_emit_tuple tuple_emitter (uiout, NULL);
uiout->field_signed ("refcount", gdata->refc);
uiout->field_string ("addr", host_address_to_string (abfd));
- uiout->field_string ("filename", bfd_get_filename (abfd));
+ uiout->field_string ("filename", bfd_get_filename (abfd),
+ file_name_style.style ());
uiout->text ("\n");
return 1;
diff --git a/gdb/gdbarch-components.py b/gdb/gdbarch-components.py
index 4987f8a5fef..e8f20c83ff0 100644
--- a/gdb/gdbarch-components.py
+++ b/gdb/gdbarch-components.py
@@ -65,7 +65,7 @@
#
# A gdbarch is zero-initialized. Then, if a field has a pre-default,
# the field is set to that value. After initialization is complete
-# (that is, after the tdep code has a change to change the settings),
+# (that is, after the tdep code has a chance to change the settings),
# the post-initialization step is done.
#
# There is a generic algorithm to generate a "validation function" for
@@ -574,7 +574,6 @@ use "register_type".
type="struct type *",
name="register_type",
params=[("int", "reg_nr")],
- predicate=True,
invalid=True,
)
@@ -741,7 +740,7 @@ FRAME corresponds to the longjmp frame.
Value(
type="int",
name="believe_pcc_promotion",
- invalid=True,
+ invalid=False,
)
Method(
@@ -763,7 +762,7 @@ Function(
("int *", "optimizedp"),
("int *", "unavailablep"),
],
- invalid=True,
+ invalid=False,
)
Function(
@@ -775,7 +774,7 @@ Function(
("struct type *", "type"),
("const gdb_byte *", "buf"),
],
- invalid=True,
+ invalid=False,
)
Method(
@@ -1087,7 +1086,7 @@ Method(
Value(
type="int",
name="frame_red_zone_size",
- invalid=True,
+ invalid=False,
)
Method(
@@ -1461,7 +1460,7 @@ Is a register in a group
""",
type="int",
name="register_reggroup_p",
- params=[("int", "regnum"), ("struct reggroup *", "reggroup")],
+ params=[("int", "regnum"), ("const struct reggroup *", "reggroup")],
predefault="default_register_reggroup_p",
invalid=False,
)
@@ -1768,7 +1767,7 @@ contents of all displaced step buffers in the child's address space.
type="void",
name="displaced_step_restore_all_in_ptid",
params=[("inferior *", "parent_inf"), ("ptid_t", "child_ptid")],
- invalid=True,
+ invalid=False,
)
Method(
@@ -2299,7 +2298,7 @@ compared to the names of the files GDB should load for debug info.
""",
type="const char *",
name="solib_symbols_extension",
- invalid=True,
+ invalid=False,
printer="pstring (gdbarch->solib_symbols_extension)",
)
diff --git a/gdb/gdbarch-gen.h b/gdb/gdbarch-gen.h
index d9d81b7d386..882b9057b1a 100644
--- a/gdb/gdbarch-gen.h
+++ b/gdb/gdbarch-gen.h
@@ -20,7 +20,9 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
-/* This file was created with the aid of ``gdbarch.py''. */
+/* To regenerate this file, run:
+ ./gdbarch.py
+*/
@@ -294,8 +296,6 @@ extern void set_gdbarch_register_name (struct gdbarch *gdbarch, gdbarch_register
the register cache should call this function directly; others should
use "register_type". */
-extern bool gdbarch_register_type_p (struct gdbarch *gdbarch);
-
typedef struct type * (gdbarch_register_type_ftype) (struct gdbarch *gdbarch, int reg_nr);
extern struct type * gdbarch_register_type (struct gdbarch *gdbarch, int reg_nr);
extern void set_gdbarch_register_type (struct gdbarch *gdbarch, gdbarch_register_type_ftype *register_type);
@@ -833,8 +833,8 @@ extern void set_gdbarch_address_class_name_to_type_flags (struct gdbarch *gdbarc
/* Is a register in a group */
-typedef int (gdbarch_register_reggroup_p_ftype) (struct gdbarch *gdbarch, int regnum, struct reggroup *reggroup);
-extern int gdbarch_register_reggroup_p (struct gdbarch *gdbarch, int regnum, struct reggroup *reggroup);
+typedef int (gdbarch_register_reggroup_p_ftype) (struct gdbarch *gdbarch, int regnum, const struct reggroup *reggroup);
+extern int gdbarch_register_reggroup_p (struct gdbarch *gdbarch, int regnum, const struct reggroup *reggroup);
extern void set_gdbarch_register_reggroup_p (struct gdbarch *gdbarch, gdbarch_register_reggroup_p_ftype *register_reggroup_p);
/* Fetch the pointer to the ith function argument. */
diff --git a/gdb/gdbarch.c b/gdb/gdbarch.c
index 3f7a1e35789..a588bdef61a 100644
--- a/gdb/gdbarch.c
+++ b/gdb/gdbarch.c
@@ -20,7 +20,9 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
-/* This file was created with the aid of ``gdbarch.py''. */
+/* To regenerate this file, run:
+ ./gdbarch.py
+*/
/* Maintain the struct gdbarch object. */
@@ -441,7 +443,8 @@ verify_gdbarch (struct gdbarch *gdbarch)
/* Skip verify of dwarf2_reg_to_regnum, invalid_p == 0 */
if (gdbarch->register_name == 0)
log.puts ("\n\tregister_name");
- /* Skip verify of register_type, has predicate. */
+ if (gdbarch->register_type == 0)
+ log.puts ("\n\tregister_type");
/* Skip verify of dummy_id, invalid_p == 0 */
/* Skip verify of deprecated_fp_regnum, invalid_p == 0 */
/* Skip verify of push_dummy_call, has predicate. */
@@ -455,7 +458,10 @@ verify_gdbarch (struct gdbarch *gdbarch)
/* Skip verify of cannot_fetch_register, invalid_p == 0 */
/* Skip verify of cannot_store_register, invalid_p == 0 */
/* Skip verify of get_longjmp_target, has predicate. */
+ /* Skip verify of believe_pcc_promotion, invalid_p == 0 */
/* Skip verify of convert_register_p, invalid_p == 0 */
+ /* Skip verify of register_to_value, invalid_p == 0 */
+ /* Skip verify of value_to_register, invalid_p == 0 */
/* Skip verify of value_from_register, invalid_p == 0 */
/* Skip verify of pointer_to_address, invalid_p == 0 */
/* Skip verify of address_to_pointer, invalid_p == 0 */
@@ -487,6 +493,7 @@ verify_gdbarch (struct gdbarch *gdbarch)
/* Skip verify of frame_num_args, has predicate. */
/* Skip verify of frame_align, has predicate. */
/* Skip verify of stabs_argument_has_addr, invalid_p == 0 */
+ /* Skip verify of frame_red_zone_size, invalid_p == 0 */
/* Skip verify of convert_from_func_ptr_addr, invalid_p == 0 */
/* Skip verify of addr_bits_remove, invalid_p == 0 */
/* Skip verify of significant_addr_bit, invalid_p == 0 */
@@ -537,6 +544,7 @@ verify_gdbarch (struct gdbarch *gdbarch)
if ((! gdbarch->displaced_step_finish) != (! gdbarch->displaced_step_prepare))
log.puts ("\n\tdisplaced_step_finish");
/* Skip verify of displaced_step_copy_insn_closure_by_addr, has predicate. */
+ /* Skip verify of displaced_step_restore_all_in_ptid, invalid_p == 0 */
/* Skip verify of relocate_instruction, has predicate. */
/* Skip verify of overlay_update, has predicate. */
/* Skip verify of core_read_description, has predicate. */
@@ -572,6 +580,7 @@ verify_gdbarch (struct gdbarch *gdbarch)
/* Skip verify of guess_tracepoint_registers, invalid_p == 0 */
/* Skip verify of auto_charset, invalid_p == 0 */
/* Skip verify of auto_wide_charset, invalid_p == 0 */
+ /* Skip verify of solib_symbols_extension, invalid_p == 0 */
/* Skip verify of has_dos_based_file_system, invalid_p == 0 */
/* Skip verify of gen_return_address, invalid_p == 0 */
/* Skip verify of info_proc, has predicate. */
@@ -613,805 +622,802 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file)
#if defined (GDB_NM_FILE)
gdb_nm_file = GDB_NM_FILE;
#endif
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: GDB_NM_FILE = %s\n",
gdb_nm_file);
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: bfd_arch_info = %s\n",
gdbarch_bfd_arch_info (gdbarch)->printable_name);
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: byte_order = %s\n",
plongest (gdbarch->byte_order));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: byte_order_for_code = %s\n",
plongest (gdbarch->byte_order_for_code));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: osabi = %s\n",
plongest (gdbarch->osabi));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: target_desc = %s\n",
host_address_to_string (gdbarch->target_desc));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: short_bit = %s\n",
plongest (gdbarch->short_bit));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: int_bit = %s\n",
plongest (gdbarch->int_bit));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: long_bit = %s\n",
plongest (gdbarch->long_bit));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: long_long_bit = %s\n",
plongest (gdbarch->long_long_bit));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: bfloat16_bit = %s\n",
plongest (gdbarch->bfloat16_bit));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: bfloat16_format = %s\n",
pformat (gdbarch->bfloat16_format));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: half_bit = %s\n",
plongest (gdbarch->half_bit));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: half_format = %s\n",
pformat (gdbarch->half_format));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: float_bit = %s\n",
plongest (gdbarch->float_bit));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: float_format = %s\n",
pformat (gdbarch->float_format));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: double_bit = %s\n",
plongest (gdbarch->double_bit));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: double_format = %s\n",
pformat (gdbarch->double_format));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: long_double_bit = %s\n",
plongest (gdbarch->long_double_bit));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: long_double_format = %s\n",
pformat (gdbarch->long_double_format));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: wchar_bit = %s\n",
plongest (gdbarch->wchar_bit));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: wchar_signed = %s\n",
plongest (gdbarch->wchar_signed));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: floatformat_for_type = <%s>\n",
host_address_to_string (gdbarch->floatformat_for_type));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: ptr_bit = %s\n",
plongest (gdbarch->ptr_bit));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: addr_bit = %s\n",
plongest (gdbarch->addr_bit));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: dwarf2_addr_size = %s\n",
plongest (gdbarch->dwarf2_addr_size));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: char_signed = %s\n",
plongest (gdbarch->char_signed));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdbarch_read_pc_p() = %d\n",
gdbarch_read_pc_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: read_pc = <%s>\n",
host_address_to_string (gdbarch->read_pc));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdbarch_write_pc_p() = %d\n",
gdbarch_write_pc_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: write_pc = <%s>\n",
host_address_to_string (gdbarch->write_pc));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: virtual_frame_pointer = <%s>\n",
host_address_to_string (gdbarch->virtual_frame_pointer));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdbarch_pseudo_register_read_p() = %d\n",
gdbarch_pseudo_register_read_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: pseudo_register_read = <%s>\n",
host_address_to_string (gdbarch->pseudo_register_read));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdbarch_pseudo_register_read_value_p() = %d\n",
gdbarch_pseudo_register_read_value_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: pseudo_register_read_value = <%s>\n",
host_address_to_string (gdbarch->pseudo_register_read_value));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdbarch_pseudo_register_write_p() = %d\n",
gdbarch_pseudo_register_write_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: pseudo_register_write = <%s>\n",
host_address_to_string (gdbarch->pseudo_register_write));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: num_regs = %s\n",
plongest (gdbarch->num_regs));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: num_pseudo_regs = %s\n",
plongest (gdbarch->num_pseudo_regs));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdbarch_ax_pseudo_register_collect_p() = %d\n",
gdbarch_ax_pseudo_register_collect_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: ax_pseudo_register_collect = <%s>\n",
host_address_to_string (gdbarch->ax_pseudo_register_collect));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdbarch_ax_pseudo_register_push_stack_p() = %d\n",
gdbarch_ax_pseudo_register_push_stack_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: ax_pseudo_register_push_stack = <%s>\n",
host_address_to_string (gdbarch->ax_pseudo_register_push_stack));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdbarch_report_signal_info_p() = %d\n",
gdbarch_report_signal_info_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: report_signal_info = <%s>\n",
host_address_to_string (gdbarch->report_signal_info));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: sp_regnum = %s\n",
plongest (gdbarch->sp_regnum));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: pc_regnum = %s\n",
plongest (gdbarch->pc_regnum));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: ps_regnum = %s\n",
plongest (gdbarch->ps_regnum));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: fp0_regnum = %s\n",
plongest (gdbarch->fp0_regnum));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: stab_reg_to_regnum = <%s>\n",
host_address_to_string (gdbarch->stab_reg_to_regnum));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: ecoff_reg_to_regnum = <%s>\n",
host_address_to_string (gdbarch->ecoff_reg_to_regnum));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: sdb_reg_to_regnum = <%s>\n",
host_address_to_string (gdbarch->sdb_reg_to_regnum));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: dwarf2_reg_to_regnum = <%s>\n",
host_address_to_string (gdbarch->dwarf2_reg_to_regnum));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: register_name = <%s>\n",
host_address_to_string (gdbarch->register_name));
- fprintf_filtered (file,
- "gdbarch_dump: gdbarch_register_type_p() = %d\n",
- gdbarch_register_type_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: register_type = <%s>\n",
host_address_to_string (gdbarch->register_type));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: dummy_id = <%s>\n",
host_address_to_string (gdbarch->dummy_id));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: deprecated_fp_regnum = %s\n",
plongest (gdbarch->deprecated_fp_regnum));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdbarch_push_dummy_call_p() = %d\n",
gdbarch_push_dummy_call_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: push_dummy_call = <%s>\n",
host_address_to_string (gdbarch->push_dummy_call));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: call_dummy_location = %s\n",
plongest (gdbarch->call_dummy_location));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdbarch_push_dummy_code_p() = %d\n",
gdbarch_push_dummy_code_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: push_dummy_code = <%s>\n",
host_address_to_string (gdbarch->push_dummy_code));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: code_of_frame_writable = <%s>\n",
host_address_to_string (gdbarch->code_of_frame_writable));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: print_registers_info = <%s>\n",
host_address_to_string (gdbarch->print_registers_info));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: print_float_info = <%s>\n",
host_address_to_string (gdbarch->print_float_info));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdbarch_print_vector_info_p() = %d\n",
gdbarch_print_vector_info_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: print_vector_info = <%s>\n",
host_address_to_string (gdbarch->print_vector_info));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: register_sim_regno = <%s>\n",
host_address_to_string (gdbarch->register_sim_regno));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: cannot_fetch_register = <%s>\n",
host_address_to_string (gdbarch->cannot_fetch_register));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: cannot_store_register = <%s>\n",
host_address_to_string (gdbarch->cannot_store_register));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdbarch_get_longjmp_target_p() = %d\n",
gdbarch_get_longjmp_target_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: get_longjmp_target = <%s>\n",
host_address_to_string (gdbarch->get_longjmp_target));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: believe_pcc_promotion = %s\n",
plongest (gdbarch->believe_pcc_promotion));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: convert_register_p = <%s>\n",
host_address_to_string (gdbarch->convert_register_p));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: register_to_value = <%s>\n",
host_address_to_string (gdbarch->register_to_value));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: value_to_register = <%s>\n",
host_address_to_string (gdbarch->value_to_register));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: value_from_register = <%s>\n",
host_address_to_string (gdbarch->value_from_register));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: pointer_to_address = <%s>\n",
host_address_to_string (gdbarch->pointer_to_address));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: address_to_pointer = <%s>\n",
host_address_to_string (gdbarch->address_to_pointer));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdbarch_integer_to_address_p() = %d\n",
gdbarch_integer_to_address_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: integer_to_address = <%s>\n",
host_address_to_string (gdbarch->integer_to_address));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdbarch_return_value_p() = %d\n",
gdbarch_return_value_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: return_value = <%s>\n",
host_address_to_string (gdbarch->return_value));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: return_in_first_hidden_param_p = <%s>\n",
host_address_to_string (gdbarch->return_in_first_hidden_param_p));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: skip_prologue = <%s>\n",
host_address_to_string (gdbarch->skip_prologue));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdbarch_skip_main_prologue_p() = %d\n",
gdbarch_skip_main_prologue_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: skip_main_prologue = <%s>\n",
host_address_to_string (gdbarch->skip_main_prologue));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdbarch_skip_entrypoint_p() = %d\n",
gdbarch_skip_entrypoint_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: skip_entrypoint = <%s>\n",
host_address_to_string (gdbarch->skip_entrypoint));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: inner_than = <%s>\n",
host_address_to_string (gdbarch->inner_than));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: breakpoint_from_pc = <%s>\n",
host_address_to_string (gdbarch->breakpoint_from_pc));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: breakpoint_kind_from_pc = <%s>\n",
host_address_to_string (gdbarch->breakpoint_kind_from_pc));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: sw_breakpoint_from_kind = <%s>\n",
host_address_to_string (gdbarch->sw_breakpoint_from_kind));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: breakpoint_kind_from_current_state = <%s>\n",
host_address_to_string (gdbarch->breakpoint_kind_from_current_state));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdbarch_adjust_breakpoint_address_p() = %d\n",
gdbarch_adjust_breakpoint_address_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: adjust_breakpoint_address = <%s>\n",
host_address_to_string (gdbarch->adjust_breakpoint_address));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: memory_insert_breakpoint = <%s>\n",
host_address_to_string (gdbarch->memory_insert_breakpoint));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: memory_remove_breakpoint = <%s>\n",
host_address_to_string (gdbarch->memory_remove_breakpoint));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: decr_pc_after_break = %s\n",
core_addr_to_string_nz (gdbarch->decr_pc_after_break));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: deprecated_function_start_offset = %s\n",
core_addr_to_string_nz (gdbarch->deprecated_function_start_offset));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: remote_register_number = <%s>\n",
host_address_to_string (gdbarch->remote_register_number));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdbarch_fetch_tls_load_module_address_p() = %d\n",
gdbarch_fetch_tls_load_module_address_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: fetch_tls_load_module_address = <%s>\n",
host_address_to_string (gdbarch->fetch_tls_load_module_address));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdbarch_get_thread_local_address_p() = %d\n",
gdbarch_get_thread_local_address_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: get_thread_local_address = <%s>\n",
host_address_to_string (gdbarch->get_thread_local_address));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: frame_args_skip = %s\n",
core_addr_to_string_nz (gdbarch->frame_args_skip));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: unwind_pc = <%s>\n",
host_address_to_string (gdbarch->unwind_pc));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: unwind_sp = <%s>\n",
host_address_to_string (gdbarch->unwind_sp));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdbarch_frame_num_args_p() = %d\n",
gdbarch_frame_num_args_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: frame_num_args = <%s>\n",
host_address_to_string (gdbarch->frame_num_args));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdbarch_frame_align_p() = %d\n",
gdbarch_frame_align_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: frame_align = <%s>\n",
host_address_to_string (gdbarch->frame_align));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: stabs_argument_has_addr = <%s>\n",
host_address_to_string (gdbarch->stabs_argument_has_addr));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: frame_red_zone_size = %s\n",
plongest (gdbarch->frame_red_zone_size));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: convert_from_func_ptr_addr = <%s>\n",
host_address_to_string (gdbarch->convert_from_func_ptr_addr));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: addr_bits_remove = <%s>\n",
host_address_to_string (gdbarch->addr_bits_remove));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: significant_addr_bit = %s\n",
plongest (gdbarch->significant_addr_bit));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: memtag_to_string = <%s>\n",
host_address_to_string (gdbarch->memtag_to_string));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: tagged_address_p = <%s>\n",
host_address_to_string (gdbarch->tagged_address_p));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: memtag_matches_p = <%s>\n",
host_address_to_string (gdbarch->memtag_matches_p));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: set_memtags = <%s>\n",
host_address_to_string (gdbarch->set_memtags));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: get_memtag = <%s>\n",
host_address_to_string (gdbarch->get_memtag));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: memtag_granule_size = %s\n",
core_addr_to_string_nz (gdbarch->memtag_granule_size));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdbarch_software_single_step_p() = %d\n",
gdbarch_software_single_step_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: software_single_step = <%s>\n",
host_address_to_string (gdbarch->software_single_step));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdbarch_single_step_through_delay_p() = %d\n",
gdbarch_single_step_through_delay_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: single_step_through_delay = <%s>\n",
host_address_to_string (gdbarch->single_step_through_delay));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: print_insn = <%s>\n",
host_address_to_string (gdbarch->print_insn));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: skip_trampoline_code = <%s>\n",
host_address_to_string (gdbarch->skip_trampoline_code));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: skip_solib_resolver = <%s>\n",
host_address_to_string (gdbarch->skip_solib_resolver));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: in_solib_return_trampoline = <%s>\n",
host_address_to_string (gdbarch->in_solib_return_trampoline));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: in_indirect_branch_thunk = <%s>\n",
host_address_to_string (gdbarch->in_indirect_branch_thunk));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: stack_frame_destroyed_p = <%s>\n",
host_address_to_string (gdbarch->stack_frame_destroyed_p));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdbarch_elf_make_msymbol_special_p() = %d\n",
gdbarch_elf_make_msymbol_special_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: elf_make_msymbol_special = <%s>\n",
host_address_to_string (gdbarch->elf_make_msymbol_special));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: coff_make_msymbol_special = <%s>\n",
host_address_to_string (gdbarch->coff_make_msymbol_special));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: make_symbol_special = <%s>\n",
host_address_to_string (gdbarch->make_symbol_special));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: adjust_dwarf2_addr = <%s>\n",
host_address_to_string (gdbarch->adjust_dwarf2_addr));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: adjust_dwarf2_line = <%s>\n",
host_address_to_string (gdbarch->adjust_dwarf2_line));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: cannot_step_breakpoint = %s\n",
plongest (gdbarch->cannot_step_breakpoint));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: have_nonsteppable_watchpoint = %s\n",
plongest (gdbarch->have_nonsteppable_watchpoint));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdbarch_address_class_type_flags_p() = %d\n",
gdbarch_address_class_type_flags_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: address_class_type_flags = <%s>\n",
host_address_to_string (gdbarch->address_class_type_flags));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdbarch_address_class_type_flags_to_name_p() = %d\n",
gdbarch_address_class_type_flags_to_name_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: address_class_type_flags_to_name = <%s>\n",
host_address_to_string (gdbarch->address_class_type_flags_to_name));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: execute_dwarf_cfa_vendor_op = <%s>\n",
host_address_to_string (gdbarch->execute_dwarf_cfa_vendor_op));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdbarch_address_class_name_to_type_flags_p() = %d\n",
gdbarch_address_class_name_to_type_flags_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: address_class_name_to_type_flags = <%s>\n",
host_address_to_string (gdbarch->address_class_name_to_type_flags));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: register_reggroup_p = <%s>\n",
host_address_to_string (gdbarch->register_reggroup_p));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdbarch_fetch_pointer_argument_p() = %d\n",
gdbarch_fetch_pointer_argument_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: fetch_pointer_argument = <%s>\n",
host_address_to_string (gdbarch->fetch_pointer_argument));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdbarch_iterate_over_regset_sections_p() = %d\n",
gdbarch_iterate_over_regset_sections_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: iterate_over_regset_sections = <%s>\n",
host_address_to_string (gdbarch->iterate_over_regset_sections));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdbarch_make_corefile_notes_p() = %d\n",
gdbarch_make_corefile_notes_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: make_corefile_notes = <%s>\n",
host_address_to_string (gdbarch->make_corefile_notes));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdbarch_find_memory_regions_p() = %d\n",
gdbarch_find_memory_regions_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: find_memory_regions = <%s>\n",
host_address_to_string (gdbarch->find_memory_regions));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdbarch_core_xfer_shared_libraries_p() = %d\n",
gdbarch_core_xfer_shared_libraries_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: core_xfer_shared_libraries = <%s>\n",
host_address_to_string (gdbarch->core_xfer_shared_libraries));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdbarch_core_xfer_shared_libraries_aix_p() = %d\n",
gdbarch_core_xfer_shared_libraries_aix_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: core_xfer_shared_libraries_aix = <%s>\n",
host_address_to_string (gdbarch->core_xfer_shared_libraries_aix));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdbarch_core_pid_to_str_p() = %d\n",
gdbarch_core_pid_to_str_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: core_pid_to_str = <%s>\n",
host_address_to_string (gdbarch->core_pid_to_str));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdbarch_core_thread_name_p() = %d\n",
gdbarch_core_thread_name_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: core_thread_name = <%s>\n",
host_address_to_string (gdbarch->core_thread_name));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdbarch_core_xfer_siginfo_p() = %d\n",
gdbarch_core_xfer_siginfo_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: core_xfer_siginfo = <%s>\n",
host_address_to_string (gdbarch->core_xfer_siginfo));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdbarch_gcore_bfd_target_p() = %d\n",
gdbarch_gcore_bfd_target_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gcore_bfd_target = %s\n",
pstring (gdbarch->gcore_bfd_target));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: vtable_function_descriptors = %s\n",
plongest (gdbarch->vtable_function_descriptors));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: vbit_in_delta = %s\n",
plongest (gdbarch->vbit_in_delta));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: skip_permanent_breakpoint = <%s>\n",
host_address_to_string (gdbarch->skip_permanent_breakpoint));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdbarch_max_insn_length_p() = %d\n",
gdbarch_max_insn_length_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: max_insn_length = %s\n",
plongest (gdbarch->max_insn_length));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdbarch_displaced_step_copy_insn_p() = %d\n",
gdbarch_displaced_step_copy_insn_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: displaced_step_copy_insn = <%s>\n",
host_address_to_string (gdbarch->displaced_step_copy_insn));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: displaced_step_hw_singlestep = <%s>\n",
host_address_to_string (gdbarch->displaced_step_hw_singlestep));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdbarch_displaced_step_fixup_p() = %d\n",
gdbarch_displaced_step_fixup_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: displaced_step_fixup = <%s>\n",
host_address_to_string (gdbarch->displaced_step_fixup));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdbarch_displaced_step_prepare_p() = %d\n",
gdbarch_displaced_step_prepare_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: displaced_step_prepare = <%s>\n",
host_address_to_string (gdbarch->displaced_step_prepare));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: displaced_step_finish = <%s>\n",
host_address_to_string (gdbarch->displaced_step_finish));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdbarch_displaced_step_copy_insn_closure_by_addr_p() = %d\n",
gdbarch_displaced_step_copy_insn_closure_by_addr_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: displaced_step_copy_insn_closure_by_addr = <%s>\n",
host_address_to_string (gdbarch->displaced_step_copy_insn_closure_by_addr));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: displaced_step_restore_all_in_ptid = <%s>\n",
host_address_to_string (gdbarch->displaced_step_restore_all_in_ptid));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdbarch_relocate_instruction_p() = %d\n",
gdbarch_relocate_instruction_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: relocate_instruction = <%s>\n",
host_address_to_string (gdbarch->relocate_instruction));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdbarch_overlay_update_p() = %d\n",
gdbarch_overlay_update_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: overlay_update = <%s>\n",
host_address_to_string (gdbarch->overlay_update));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdbarch_core_read_description_p() = %d\n",
gdbarch_core_read_description_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: core_read_description = <%s>\n",
host_address_to_string (gdbarch->core_read_description));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: sofun_address_maybe_missing = %s\n",
plongest (gdbarch->sofun_address_maybe_missing));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdbarch_process_record_p() = %d\n",
gdbarch_process_record_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: process_record = <%s>\n",
host_address_to_string (gdbarch->process_record));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdbarch_process_record_signal_p() = %d\n",
gdbarch_process_record_signal_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: process_record_signal = <%s>\n",
host_address_to_string (gdbarch->process_record_signal));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdbarch_gdb_signal_from_target_p() = %d\n",
gdbarch_gdb_signal_from_target_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdb_signal_from_target = <%s>\n",
host_address_to_string (gdbarch->gdb_signal_from_target));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdbarch_gdb_signal_to_target_p() = %d\n",
gdbarch_gdb_signal_to_target_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdb_signal_to_target = <%s>\n",
host_address_to_string (gdbarch->gdb_signal_to_target));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdbarch_get_siginfo_type_p() = %d\n",
gdbarch_get_siginfo_type_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: get_siginfo_type = <%s>\n",
host_address_to_string (gdbarch->get_siginfo_type));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdbarch_record_special_symbol_p() = %d\n",
gdbarch_record_special_symbol_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: record_special_symbol = <%s>\n",
host_address_to_string (gdbarch->record_special_symbol));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdbarch_get_syscall_number_p() = %d\n",
gdbarch_get_syscall_number_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: get_syscall_number = <%s>\n",
host_address_to_string (gdbarch->get_syscall_number));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: xml_syscall_file = %s\n",
pstring (gdbarch->xml_syscall_file));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: syscalls_info = %s\n",
host_address_to_string (gdbarch->syscalls_info));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: stap_integer_prefixes = %s\n",
pstring_list (gdbarch->stap_integer_prefixes));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: stap_integer_suffixes = %s\n",
pstring_list (gdbarch->stap_integer_suffixes));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: stap_register_prefixes = %s\n",
pstring_list (gdbarch->stap_register_prefixes));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: stap_register_suffixes = %s\n",
pstring_list (gdbarch->stap_register_suffixes));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: stap_register_indirection_prefixes = %s\n",
pstring_list (gdbarch->stap_register_indirection_prefixes));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: stap_register_indirection_suffixes = %s\n",
pstring_list (gdbarch->stap_register_indirection_suffixes));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: stap_gdb_register_prefix = %s\n",
pstring (gdbarch->stap_gdb_register_prefix));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: stap_gdb_register_suffix = %s\n",
pstring (gdbarch->stap_gdb_register_suffix));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdbarch_stap_is_single_operand_p() = %d\n",
gdbarch_stap_is_single_operand_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: stap_is_single_operand = <%s>\n",
host_address_to_string (gdbarch->stap_is_single_operand));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdbarch_stap_parse_special_token_p() = %d\n",
gdbarch_stap_parse_special_token_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: stap_parse_special_token = <%s>\n",
host_address_to_string (gdbarch->stap_parse_special_token));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdbarch_stap_adjust_register_p() = %d\n",
gdbarch_stap_adjust_register_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: stap_adjust_register = <%s>\n",
host_address_to_string (gdbarch->stap_adjust_register));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdbarch_dtrace_parse_probe_argument_p() = %d\n",
gdbarch_dtrace_parse_probe_argument_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: dtrace_parse_probe_argument = <%s>\n",
host_address_to_string (gdbarch->dtrace_parse_probe_argument));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdbarch_dtrace_probe_is_enabled_p() = %d\n",
gdbarch_dtrace_probe_is_enabled_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: dtrace_probe_is_enabled = <%s>\n",
host_address_to_string (gdbarch->dtrace_probe_is_enabled));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdbarch_dtrace_enable_probe_p() = %d\n",
gdbarch_dtrace_enable_probe_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: dtrace_enable_probe = <%s>\n",
host_address_to_string (gdbarch->dtrace_enable_probe));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdbarch_dtrace_disable_probe_p() = %d\n",
gdbarch_dtrace_disable_probe_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: dtrace_disable_probe = <%s>\n",
host_address_to_string (gdbarch->dtrace_disable_probe));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: has_global_solist = %s\n",
plongest (gdbarch->has_global_solist));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: has_global_breakpoints = %s\n",
plongest (gdbarch->has_global_breakpoints));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: has_shared_address_space = <%s>\n",
host_address_to_string (gdbarch->has_shared_address_space));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: fast_tracepoint_valid_at = <%s>\n",
host_address_to_string (gdbarch->fast_tracepoint_valid_at));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: guess_tracepoint_registers = <%s>\n",
host_address_to_string (gdbarch->guess_tracepoint_registers));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: auto_charset = <%s>\n",
host_address_to_string (gdbarch->auto_charset));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: auto_wide_charset = <%s>\n",
host_address_to_string (gdbarch->auto_wide_charset));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: solib_symbols_extension = %s\n",
pstring (gdbarch->solib_symbols_extension));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: has_dos_based_file_system = %s\n",
plongest (gdbarch->has_dos_based_file_system));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gen_return_address = <%s>\n",
host_address_to_string (gdbarch->gen_return_address));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdbarch_info_proc_p() = %d\n",
gdbarch_info_proc_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: info_proc = <%s>\n",
host_address_to_string (gdbarch->info_proc));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdbarch_core_info_proc_p() = %d\n",
gdbarch_core_info_proc_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: core_info_proc = <%s>\n",
host_address_to_string (gdbarch->core_info_proc));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: iterate_over_objfiles_in_search_order = <%s>\n",
host_address_to_string (gdbarch->iterate_over_objfiles_in_search_order));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: ravenscar_ops = %s\n",
host_address_to_string (gdbarch->ravenscar_ops));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: insn_is_call = <%s>\n",
host_address_to_string (gdbarch->insn_is_call));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: insn_is_ret = <%s>\n",
host_address_to_string (gdbarch->insn_is_ret));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: insn_is_jump = <%s>\n",
host_address_to_string (gdbarch->insn_is_jump));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: program_breakpoint_here_p = <%s>\n",
host_address_to_string (gdbarch->program_breakpoint_here_p));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gdbarch_auxv_parse_p() = %d\n",
gdbarch_auxv_parse_p (gdbarch));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: auxv_parse = <%s>\n",
host_address_to_string (gdbarch->auxv_parse));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: print_auxv_entry = <%s>\n",
host_address_to_string (gdbarch->print_auxv_entry));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: vsyscall_range = <%s>\n",
host_address_to_string (gdbarch->vsyscall_range));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: infcall_mmap = <%s>\n",
host_address_to_string (gdbarch->infcall_mmap));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: infcall_munmap = <%s>\n",
host_address_to_string (gdbarch->infcall_munmap));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gcc_target_options = <%s>\n",
host_address_to_string (gdbarch->gcc_target_options));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: gnu_triplet_regexp = <%s>\n",
host_address_to_string (gdbarch->gnu_triplet_regexp));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: addressable_memory_unit_size = <%s>\n",
host_address_to_string (gdbarch->addressable_memory_unit_size));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: disassembler_options_implicit = %s\n",
pstring (gdbarch->disassembler_options_implicit));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: disassembler_options = %s\n",
pstring_ptr (gdbarch->disassembler_options));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: valid_disassembler_options = %s\n",
host_address_to_string (gdbarch->valid_disassembler_options));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: type_align = <%s>\n",
host_address_to_string (gdbarch->type_align));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: get_pc_address_flags = <%s>\n",
host_address_to_string (gdbarch->get_pc_address_flags));
- fprintf_filtered (file,
+ gdb_printf (file,
"gdbarch_dump: read_core_file_mappings = <%s>\n",
host_address_to_string (gdbarch->read_core_file_mappings));
if (gdbarch->dump_tdep != NULL)
@@ -1424,7 +1430,7 @@ gdbarch_bfd_arch_info (struct gdbarch *gdbarch)
{
gdb_assert (gdbarch != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_bfd_arch_info called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_bfd_arch_info called\n");
return gdbarch->bfd_arch_info;
}
@@ -1433,7 +1439,7 @@ gdbarch_byte_order (struct gdbarch *gdbarch)
{
gdb_assert (gdbarch != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_byte_order called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_byte_order called\n");
return gdbarch->byte_order;
}
@@ -1442,7 +1448,7 @@ gdbarch_byte_order_for_code (struct gdbarch *gdbarch)
{
gdb_assert (gdbarch != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_byte_order_for_code called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_byte_order_for_code called\n");
return gdbarch->byte_order_for_code;
}
@@ -1451,7 +1457,7 @@ gdbarch_osabi (struct gdbarch *gdbarch)
{
gdb_assert (gdbarch != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_osabi called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_osabi called\n");
return gdbarch->osabi;
}
@@ -1460,7 +1466,7 @@ gdbarch_target_desc (struct gdbarch *gdbarch)
{
gdb_assert (gdbarch != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_target_desc called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_target_desc called\n");
return gdbarch->target_desc;
}
@@ -1470,7 +1476,7 @@ gdbarch_short_bit (struct gdbarch *gdbarch)
gdb_assert (gdbarch != NULL);
/* Skip verify of short_bit, invalid_p == 0 */
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_short_bit called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_short_bit called\n");
return gdbarch->short_bit;
}
@@ -1487,7 +1493,7 @@ gdbarch_int_bit (struct gdbarch *gdbarch)
gdb_assert (gdbarch != NULL);
/* Skip verify of int_bit, invalid_p == 0 */
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_int_bit called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_int_bit called\n");
return gdbarch->int_bit;
}
@@ -1504,7 +1510,7 @@ gdbarch_long_bit (struct gdbarch *gdbarch)
gdb_assert (gdbarch != NULL);
/* Skip verify of long_bit, invalid_p == 0 */
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_long_bit called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_long_bit called\n");
return gdbarch->long_bit;
}
@@ -1521,7 +1527,7 @@ gdbarch_long_long_bit (struct gdbarch *gdbarch)
gdb_assert (gdbarch != NULL);
/* Skip verify of long_long_bit, invalid_p == 0 */
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_long_long_bit called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_long_long_bit called\n");
return gdbarch->long_long_bit;
}
@@ -1538,7 +1544,7 @@ gdbarch_bfloat16_bit (struct gdbarch *gdbarch)
gdb_assert (gdbarch != NULL);
/* Skip verify of bfloat16_bit, invalid_p == 0 */
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_bfloat16_bit called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_bfloat16_bit called\n");
return gdbarch->bfloat16_bit;
}
@@ -1554,7 +1560,7 @@ gdbarch_bfloat16_format (struct gdbarch *gdbarch)
{
gdb_assert (gdbarch != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_bfloat16_format called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_bfloat16_format called\n");
return gdbarch->bfloat16_format;
}
@@ -1571,7 +1577,7 @@ gdbarch_half_bit (struct gdbarch *gdbarch)
gdb_assert (gdbarch != NULL);
/* Skip verify of half_bit, invalid_p == 0 */
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_half_bit called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_half_bit called\n");
return gdbarch->half_bit;
}
@@ -1587,7 +1593,7 @@ gdbarch_half_format (struct gdbarch *gdbarch)
{
gdb_assert (gdbarch != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_half_format called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_half_format called\n");
return gdbarch->half_format;
}
@@ -1604,7 +1610,7 @@ gdbarch_float_bit (struct gdbarch *gdbarch)
gdb_assert (gdbarch != NULL);
/* Skip verify of float_bit, invalid_p == 0 */
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_float_bit called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_float_bit called\n");
return gdbarch->float_bit;
}
@@ -1620,7 +1626,7 @@ gdbarch_float_format (struct gdbarch *gdbarch)
{
gdb_assert (gdbarch != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_float_format called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_float_format called\n");
return gdbarch->float_format;
}
@@ -1637,7 +1643,7 @@ gdbarch_double_bit (struct gdbarch *gdbarch)
gdb_assert (gdbarch != NULL);
/* Skip verify of double_bit, invalid_p == 0 */
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_double_bit called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_double_bit called\n");
return gdbarch->double_bit;
}
@@ -1653,7 +1659,7 @@ gdbarch_double_format (struct gdbarch *gdbarch)
{
gdb_assert (gdbarch != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_double_format called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_double_format called\n");
return gdbarch->double_format;
}
@@ -1670,7 +1676,7 @@ gdbarch_long_double_bit (struct gdbarch *gdbarch)
gdb_assert (gdbarch != NULL);
/* Skip verify of long_double_bit, invalid_p == 0 */
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_long_double_bit called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_long_double_bit called\n");
return gdbarch->long_double_bit;
}
@@ -1686,7 +1692,7 @@ gdbarch_long_double_format (struct gdbarch *gdbarch)
{
gdb_assert (gdbarch != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_long_double_format called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_long_double_format called\n");
return gdbarch->long_double_format;
}
@@ -1703,7 +1709,7 @@ gdbarch_wchar_bit (struct gdbarch *gdbarch)
gdb_assert (gdbarch != NULL);
/* Skip verify of wchar_bit, invalid_p == 0 */
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_wchar_bit called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_wchar_bit called\n");
return gdbarch->wchar_bit;
}
@@ -1721,7 +1727,7 @@ gdbarch_wchar_signed (struct gdbarch *gdbarch)
/* Check variable changed from pre-default. */
gdb_assert (gdbarch->wchar_signed != -1);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_wchar_signed called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_wchar_signed called\n");
return gdbarch->wchar_signed;
}
@@ -1738,7 +1744,7 @@ gdbarch_floatformat_for_type (struct gdbarch *gdbarch, const char *name, int len
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->floatformat_for_type != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_floatformat_for_type called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_floatformat_for_type called\n");
return gdbarch->floatformat_for_type (gdbarch, name, length);
}
@@ -1755,7 +1761,7 @@ gdbarch_ptr_bit (struct gdbarch *gdbarch)
gdb_assert (gdbarch != NULL);
/* Skip verify of ptr_bit, invalid_p == 0 */
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_ptr_bit called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_ptr_bit called\n");
return gdbarch->ptr_bit;
}
@@ -1773,7 +1779,7 @@ gdbarch_addr_bit (struct gdbarch *gdbarch)
/* Check variable changed from pre-default. */
gdb_assert (gdbarch->addr_bit != 0);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_addr_bit called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_addr_bit called\n");
return gdbarch->addr_bit;
}
@@ -1791,7 +1797,7 @@ gdbarch_dwarf2_addr_size (struct gdbarch *gdbarch)
/* Check variable changed from pre-default. */
gdb_assert (gdbarch->dwarf2_addr_size != 0);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_dwarf2_addr_size called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_dwarf2_addr_size called\n");
return gdbarch->dwarf2_addr_size;
}
@@ -1809,7 +1815,7 @@ gdbarch_char_signed (struct gdbarch *gdbarch)
/* Check variable changed from pre-default. */
gdb_assert (gdbarch->char_signed != -1);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_char_signed called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_char_signed called\n");
return gdbarch->char_signed;
}
@@ -1833,7 +1839,7 @@ gdbarch_read_pc (struct gdbarch *gdbarch, readable_regcache *regcache)
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->read_pc != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_read_pc called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_read_pc called\n");
return gdbarch->read_pc (regcache);
}
@@ -1857,7 +1863,7 @@ gdbarch_write_pc (struct gdbarch *gdbarch, struct regcache *regcache, CORE_ADDR
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->write_pc != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_write_pc called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_write_pc called\n");
gdbarch->write_pc (regcache, val);
}
@@ -1874,7 +1880,7 @@ gdbarch_virtual_frame_pointer (struct gdbarch *gdbarch, CORE_ADDR pc, int *frame
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->virtual_frame_pointer != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_virtual_frame_pointer called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_virtual_frame_pointer called\n");
gdbarch->virtual_frame_pointer (gdbarch, pc, frame_regnum, frame_offset);
}
@@ -1898,7 +1904,7 @@ gdbarch_pseudo_register_read (struct gdbarch *gdbarch, readable_regcache *regcac
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->pseudo_register_read != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_pseudo_register_read called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_pseudo_register_read called\n");
return gdbarch->pseudo_register_read (gdbarch, regcache, cookednum, buf);
}
@@ -1922,7 +1928,7 @@ gdbarch_pseudo_register_read_value (struct gdbarch *gdbarch, readable_regcache *
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->pseudo_register_read_value != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_pseudo_register_read_value called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_pseudo_register_read_value called\n");
return gdbarch->pseudo_register_read_value (gdbarch, regcache, cookednum);
}
@@ -1946,7 +1952,7 @@ gdbarch_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcach
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->pseudo_register_write != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_pseudo_register_write called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_pseudo_register_write called\n");
gdbarch->pseudo_register_write (gdbarch, regcache, cookednum, buf);
}
@@ -1964,7 +1970,7 @@ gdbarch_num_regs (struct gdbarch *gdbarch)
/* Check variable changed from pre-default. */
gdb_assert (gdbarch->num_regs != -1);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_num_regs called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_num_regs called\n");
return gdbarch->num_regs;
}
@@ -1981,7 +1987,7 @@ gdbarch_num_pseudo_regs (struct gdbarch *gdbarch)
gdb_assert (gdbarch != NULL);
/* Skip verify of num_pseudo_regs, invalid_p == 0 */
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_num_pseudo_regs called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_num_pseudo_regs called\n");
return gdbarch->num_pseudo_regs;
}
@@ -2005,7 +2011,7 @@ gdbarch_ax_pseudo_register_collect (struct gdbarch *gdbarch, struct agent_expr *
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->ax_pseudo_register_collect != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_ax_pseudo_register_collect called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_ax_pseudo_register_collect called\n");
return gdbarch->ax_pseudo_register_collect (gdbarch, ax, reg);
}
@@ -2029,7 +2035,7 @@ gdbarch_ax_pseudo_register_push_stack (struct gdbarch *gdbarch, struct agent_exp
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->ax_pseudo_register_push_stack != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_ax_pseudo_register_push_stack called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_ax_pseudo_register_push_stack called\n");
return gdbarch->ax_pseudo_register_push_stack (gdbarch, ax, reg);
}
@@ -2053,7 +2059,7 @@ gdbarch_report_signal_info (struct gdbarch *gdbarch, struct ui_out *uiout, enum
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->report_signal_info != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_report_signal_info called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_report_signal_info called\n");
gdbarch->report_signal_info (gdbarch, uiout, siggnal);
}
@@ -2070,7 +2076,7 @@ gdbarch_sp_regnum (struct gdbarch *gdbarch)
gdb_assert (gdbarch != NULL);
/* Skip verify of sp_regnum, invalid_p == 0 */
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_sp_regnum called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_sp_regnum called\n");
return gdbarch->sp_regnum;
}
@@ -2087,7 +2093,7 @@ gdbarch_pc_regnum (struct gdbarch *gdbarch)
gdb_assert (gdbarch != NULL);
/* Skip verify of pc_regnum, invalid_p == 0 */
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_pc_regnum called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_pc_regnum called\n");
return gdbarch->pc_regnum;
}
@@ -2104,7 +2110,7 @@ gdbarch_ps_regnum (struct gdbarch *gdbarch)
gdb_assert (gdbarch != NULL);
/* Skip verify of ps_regnum, invalid_p == 0 */
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_ps_regnum called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_ps_regnum called\n");
return gdbarch->ps_regnum;
}
@@ -2121,7 +2127,7 @@ gdbarch_fp0_regnum (struct gdbarch *gdbarch)
gdb_assert (gdbarch != NULL);
/* Skip verify of fp0_regnum, invalid_p == 0 */
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_fp0_regnum called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_fp0_regnum called\n");
return gdbarch->fp0_regnum;
}
@@ -2138,7 +2144,7 @@ gdbarch_stab_reg_to_regnum (struct gdbarch *gdbarch, int stab_regnr)
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->stab_reg_to_regnum != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_stab_reg_to_regnum called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_stab_reg_to_regnum called\n");
return gdbarch->stab_reg_to_regnum (gdbarch, stab_regnr);
}
@@ -2155,7 +2161,7 @@ gdbarch_ecoff_reg_to_regnum (struct gdbarch *gdbarch, int ecoff_regnr)
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->ecoff_reg_to_regnum != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_ecoff_reg_to_regnum called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_ecoff_reg_to_regnum called\n");
return gdbarch->ecoff_reg_to_regnum (gdbarch, ecoff_regnr);
}
@@ -2172,7 +2178,7 @@ gdbarch_sdb_reg_to_regnum (struct gdbarch *gdbarch, int sdb_regnr)
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->sdb_reg_to_regnum != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_sdb_reg_to_regnum called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_sdb_reg_to_regnum called\n");
return gdbarch->sdb_reg_to_regnum (gdbarch, sdb_regnr);
}
@@ -2189,7 +2195,7 @@ gdbarch_dwarf2_reg_to_regnum (struct gdbarch *gdbarch, int dwarf2_regnr)
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->dwarf2_reg_to_regnum != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_dwarf2_reg_to_regnum called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_dwarf2_reg_to_regnum called\n");
return gdbarch->dwarf2_reg_to_regnum (gdbarch, dwarf2_regnr);
}
@@ -2206,7 +2212,7 @@ gdbarch_register_name (struct gdbarch *gdbarch, int regnr)
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->register_name != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_register_name called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_register_name called\n");
return gdbarch->register_name (gdbarch, regnr);
}
@@ -2217,20 +2223,13 @@ set_gdbarch_register_name (struct gdbarch *gdbarch,
gdbarch->register_name = register_name;
}
-bool
-gdbarch_register_type_p (struct gdbarch *gdbarch)
-{
- gdb_assert (gdbarch != NULL);
- return gdbarch->register_type != NULL;
-}
-
struct type *
gdbarch_register_type (struct gdbarch *gdbarch, int reg_nr)
{
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->register_type != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_register_type called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_register_type called\n");
return gdbarch->register_type (gdbarch, reg_nr);
}
@@ -2247,7 +2246,7 @@ gdbarch_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->dummy_id != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_dummy_id called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_dummy_id called\n");
return gdbarch->dummy_id (gdbarch, this_frame);
}
@@ -2264,7 +2263,7 @@ gdbarch_deprecated_fp_regnum (struct gdbarch *gdbarch)
gdb_assert (gdbarch != NULL);
/* Skip verify of deprecated_fp_regnum, invalid_p == 0 */
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_deprecated_fp_regnum called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_deprecated_fp_regnum called\n");
return gdbarch->deprecated_fp_regnum;
}
@@ -2288,7 +2287,7 @@ gdbarch_push_dummy_call (struct gdbarch *gdbarch, struct value *function, struct
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->push_dummy_call != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_push_dummy_call called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_push_dummy_call called\n");
return gdbarch->push_dummy_call (gdbarch, function, regcache, bp_addr, nargs, args, sp, return_method, struct_addr);
}
@@ -2305,7 +2304,7 @@ gdbarch_call_dummy_location (struct gdbarch *gdbarch)
gdb_assert (gdbarch != NULL);
/* Skip verify of call_dummy_location, invalid_p == 0 */
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_call_dummy_location called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_call_dummy_location called\n");
return gdbarch->call_dummy_location;
}
@@ -2329,7 +2328,7 @@ gdbarch_push_dummy_code (struct gdbarch *gdbarch, CORE_ADDR sp, CORE_ADDR funadd
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->push_dummy_code != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_push_dummy_code called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_push_dummy_code called\n");
return gdbarch->push_dummy_code (gdbarch, sp, funaddr, args, nargs, value_type, real_pc, bp_addr, regcache);
}
@@ -2346,7 +2345,7 @@ gdbarch_code_of_frame_writable (struct gdbarch *gdbarch, struct frame_info *fram
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->code_of_frame_writable != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_code_of_frame_writable called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_code_of_frame_writable called\n");
return gdbarch->code_of_frame_writable (gdbarch, frame);
}
@@ -2363,7 +2362,7 @@ gdbarch_print_registers_info (struct gdbarch *gdbarch, struct ui_file *file, str
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->print_registers_info != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_print_registers_info called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_print_registers_info called\n");
gdbarch->print_registers_info (gdbarch, file, frame, regnum, all);
}
@@ -2380,7 +2379,7 @@ gdbarch_print_float_info (struct gdbarch *gdbarch, struct ui_file *file, struct
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->print_float_info != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_print_float_info called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_print_float_info called\n");
gdbarch->print_float_info (gdbarch, file, frame, args);
}
@@ -2404,7 +2403,7 @@ gdbarch_print_vector_info (struct gdbarch *gdbarch, struct ui_file *file, struct
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->print_vector_info != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_print_vector_info called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_print_vector_info called\n");
gdbarch->print_vector_info (gdbarch, file, frame, args);
}
@@ -2421,7 +2420,7 @@ gdbarch_register_sim_regno (struct gdbarch *gdbarch, int reg_nr)
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->register_sim_regno != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_register_sim_regno called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_register_sim_regno called\n");
return gdbarch->register_sim_regno (gdbarch, reg_nr);
}
@@ -2438,7 +2437,7 @@ gdbarch_cannot_fetch_register (struct gdbarch *gdbarch, int regnum)
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->cannot_fetch_register != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_cannot_fetch_register called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_cannot_fetch_register called\n");
return gdbarch->cannot_fetch_register (gdbarch, regnum);
}
@@ -2455,7 +2454,7 @@ gdbarch_cannot_store_register (struct gdbarch *gdbarch, int regnum)
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->cannot_store_register != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_cannot_store_register called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_cannot_store_register called\n");
return gdbarch->cannot_store_register (gdbarch, regnum);
}
@@ -2479,7 +2478,7 @@ gdbarch_get_longjmp_target (struct gdbarch *gdbarch, struct frame_info *frame, C
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->get_longjmp_target != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_get_longjmp_target called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_get_longjmp_target called\n");
return gdbarch->get_longjmp_target (frame, pc);
}
@@ -2494,8 +2493,9 @@ int
gdbarch_believe_pcc_promotion (struct gdbarch *gdbarch)
{
gdb_assert (gdbarch != NULL);
+ /* Skip verify of believe_pcc_promotion, invalid_p == 0 */
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_believe_pcc_promotion called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_believe_pcc_promotion called\n");
return gdbarch->believe_pcc_promotion;
}
@@ -2512,7 +2512,7 @@ gdbarch_convert_register_p (struct gdbarch *gdbarch, int regnum, struct type *ty
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->convert_register_p != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_convert_register_p called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_convert_register_p called\n");
return gdbarch->convert_register_p (gdbarch, regnum, type);
}
@@ -2529,7 +2529,7 @@ gdbarch_register_to_value (struct gdbarch *gdbarch, struct frame_info *frame, in
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->register_to_value != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_register_to_value called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_register_to_value called\n");
return gdbarch->register_to_value (frame, regnum, type, buf, optimizedp, unavailablep);
}
@@ -2546,7 +2546,7 @@ gdbarch_value_to_register (struct gdbarch *gdbarch, struct frame_info *frame, in
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->value_to_register != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_value_to_register called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_value_to_register called\n");
gdbarch->value_to_register (frame, regnum, type, buf);
}
@@ -2563,7 +2563,7 @@ gdbarch_value_from_register (struct gdbarch *gdbarch, struct type *type, int reg
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->value_from_register != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_value_from_register called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_value_from_register called\n");
return gdbarch->value_from_register (gdbarch, type, regnum, frame_id);
}
@@ -2580,7 +2580,7 @@ gdbarch_pointer_to_address (struct gdbarch *gdbarch, struct type *type, const gd
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->pointer_to_address != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_pointer_to_address called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_pointer_to_address called\n");
return gdbarch->pointer_to_address (gdbarch, type, buf);
}
@@ -2597,7 +2597,7 @@ gdbarch_address_to_pointer (struct gdbarch *gdbarch, struct type *type, gdb_byte
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->address_to_pointer != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_address_to_pointer called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_address_to_pointer called\n");
gdbarch->address_to_pointer (gdbarch, type, buf, addr);
}
@@ -2621,7 +2621,7 @@ gdbarch_integer_to_address (struct gdbarch *gdbarch, struct type *type, const gd
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->integer_to_address != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_integer_to_address called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_integer_to_address called\n");
return gdbarch->integer_to_address (gdbarch, type, buf);
}
@@ -2645,7 +2645,7 @@ gdbarch_return_value (struct gdbarch *gdbarch, struct value *function, struct ty
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->return_value != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_return_value called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_return_value called\n");
return gdbarch->return_value (gdbarch, function, valtype, regcache, readbuf, writebuf);
}
@@ -2662,7 +2662,7 @@ gdbarch_return_in_first_hidden_param_p (struct gdbarch *gdbarch, struct type *ty
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->return_in_first_hidden_param_p != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_return_in_first_hidden_param_p called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_return_in_first_hidden_param_p called\n");
return gdbarch->return_in_first_hidden_param_p (gdbarch, type);
}
@@ -2679,7 +2679,7 @@ gdbarch_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR ip)
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->skip_prologue != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_skip_prologue called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_skip_prologue called\n");
return gdbarch->skip_prologue (gdbarch, ip);
}
@@ -2703,7 +2703,7 @@ gdbarch_skip_main_prologue (struct gdbarch *gdbarch, CORE_ADDR ip)
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->skip_main_prologue != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_skip_main_prologue called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_skip_main_prologue called\n");
return gdbarch->skip_main_prologue (gdbarch, ip);
}
@@ -2727,7 +2727,7 @@ gdbarch_skip_entrypoint (struct gdbarch *gdbarch, CORE_ADDR ip)
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->skip_entrypoint != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_skip_entrypoint called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_skip_entrypoint called\n");
return gdbarch->skip_entrypoint (gdbarch, ip);
}
@@ -2744,7 +2744,7 @@ gdbarch_inner_than (struct gdbarch *gdbarch, CORE_ADDR lhs, CORE_ADDR rhs)
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->inner_than != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_inner_than called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_inner_than called\n");
return gdbarch->inner_than (lhs, rhs);
}
@@ -2761,7 +2761,7 @@ gdbarch_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr, int *lenp
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->breakpoint_from_pc != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_breakpoint_from_pc called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_breakpoint_from_pc called\n");
return gdbarch->breakpoint_from_pc (gdbarch, pcptr, lenptr);
}
@@ -2778,7 +2778,7 @@ gdbarch_breakpoint_kind_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr)
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->breakpoint_kind_from_pc != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_breakpoint_kind_from_pc called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_breakpoint_kind_from_pc called\n");
return gdbarch->breakpoint_kind_from_pc (gdbarch, pcptr);
}
@@ -2795,7 +2795,7 @@ gdbarch_sw_breakpoint_from_kind (struct gdbarch *gdbarch, int kind, int *size)
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->sw_breakpoint_from_kind != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_sw_breakpoint_from_kind called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_sw_breakpoint_from_kind called\n");
return gdbarch->sw_breakpoint_from_kind (gdbarch, kind, size);
}
@@ -2812,7 +2812,7 @@ gdbarch_breakpoint_kind_from_current_state (struct gdbarch *gdbarch, struct regc
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->breakpoint_kind_from_current_state != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_breakpoint_kind_from_current_state called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_breakpoint_kind_from_current_state called\n");
return gdbarch->breakpoint_kind_from_current_state (gdbarch, regcache, pcptr);
}
@@ -2836,7 +2836,7 @@ gdbarch_adjust_breakpoint_address (struct gdbarch *gdbarch, CORE_ADDR bpaddr)
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->adjust_breakpoint_address != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_adjust_breakpoint_address called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_adjust_breakpoint_address called\n");
return gdbarch->adjust_breakpoint_address (gdbarch, bpaddr);
}
@@ -2853,7 +2853,7 @@ gdbarch_memory_insert_breakpoint (struct gdbarch *gdbarch, struct bp_target_info
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->memory_insert_breakpoint != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_memory_insert_breakpoint called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_memory_insert_breakpoint called\n");
return gdbarch->memory_insert_breakpoint (gdbarch, bp_tgt);
}
@@ -2870,7 +2870,7 @@ gdbarch_memory_remove_breakpoint (struct gdbarch *gdbarch, struct bp_target_info
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->memory_remove_breakpoint != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_memory_remove_breakpoint called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_memory_remove_breakpoint called\n");
return gdbarch->memory_remove_breakpoint (gdbarch, bp_tgt);
}
@@ -2887,7 +2887,7 @@ gdbarch_decr_pc_after_break (struct gdbarch *gdbarch)
gdb_assert (gdbarch != NULL);
/* Skip verify of decr_pc_after_break, invalid_p == 0 */
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_decr_pc_after_break called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_decr_pc_after_break called\n");
return gdbarch->decr_pc_after_break;
}
@@ -2904,7 +2904,7 @@ gdbarch_deprecated_function_start_offset (struct gdbarch *gdbarch)
gdb_assert (gdbarch != NULL);
/* Skip verify of deprecated_function_start_offset, invalid_p == 0 */
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_deprecated_function_start_offset called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_deprecated_function_start_offset called\n");
return gdbarch->deprecated_function_start_offset;
}
@@ -2921,7 +2921,7 @@ gdbarch_remote_register_number (struct gdbarch *gdbarch, int regno)
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->remote_register_number != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_remote_register_number called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_remote_register_number called\n");
return gdbarch->remote_register_number (gdbarch, regno);
}
@@ -2945,7 +2945,7 @@ gdbarch_fetch_tls_load_module_address (struct gdbarch *gdbarch, struct objfile *
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->fetch_tls_load_module_address != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_fetch_tls_load_module_address called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_fetch_tls_load_module_address called\n");
return gdbarch->fetch_tls_load_module_address (objfile);
}
@@ -2969,7 +2969,7 @@ gdbarch_get_thread_local_address (struct gdbarch *gdbarch, ptid_t ptid, CORE_ADD
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->get_thread_local_address != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_get_thread_local_address called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_get_thread_local_address called\n");
return gdbarch->get_thread_local_address (gdbarch, ptid, lm_addr, offset);
}
@@ -2986,7 +2986,7 @@ gdbarch_frame_args_skip (struct gdbarch *gdbarch)
gdb_assert (gdbarch != NULL);
/* Skip verify of frame_args_skip, invalid_p == 0 */
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_frame_args_skip called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_frame_args_skip called\n");
return gdbarch->frame_args_skip;
}
@@ -3003,7 +3003,7 @@ gdbarch_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->unwind_pc != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_unwind_pc called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_unwind_pc called\n");
return gdbarch->unwind_pc (gdbarch, next_frame);
}
@@ -3020,7 +3020,7 @@ gdbarch_unwind_sp (struct gdbarch *gdbarch, struct frame_info *next_frame)
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->unwind_sp != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_unwind_sp called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_unwind_sp called\n");
return gdbarch->unwind_sp (gdbarch, next_frame);
}
@@ -3044,7 +3044,7 @@ gdbarch_frame_num_args (struct gdbarch *gdbarch, struct frame_info *frame)
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->frame_num_args != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_frame_num_args called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_frame_num_args called\n");
return gdbarch->frame_num_args (frame);
}
@@ -3068,7 +3068,7 @@ gdbarch_frame_align (struct gdbarch *gdbarch, CORE_ADDR address)
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->frame_align != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_frame_align called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_frame_align called\n");
return gdbarch->frame_align (gdbarch, address);
}
@@ -3085,7 +3085,7 @@ gdbarch_stabs_argument_has_addr (struct gdbarch *gdbarch, struct type *type)
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->stabs_argument_has_addr != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_stabs_argument_has_addr called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_stabs_argument_has_addr called\n");
return gdbarch->stabs_argument_has_addr (gdbarch, type);
}
@@ -3100,8 +3100,9 @@ int
gdbarch_frame_red_zone_size (struct gdbarch *gdbarch)
{
gdb_assert (gdbarch != NULL);
+ /* Skip verify of frame_red_zone_size, invalid_p == 0 */
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_frame_red_zone_size called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_frame_red_zone_size called\n");
return gdbarch->frame_red_zone_size;
}
@@ -3118,7 +3119,7 @@ gdbarch_convert_from_func_ptr_addr (struct gdbarch *gdbarch, CORE_ADDR addr, str
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->convert_from_func_ptr_addr != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_convert_from_func_ptr_addr called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_convert_from_func_ptr_addr called\n");
return gdbarch->convert_from_func_ptr_addr (gdbarch, addr, targ);
}
@@ -3135,7 +3136,7 @@ gdbarch_addr_bits_remove (struct gdbarch *gdbarch, CORE_ADDR addr)
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->addr_bits_remove != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_addr_bits_remove called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_addr_bits_remove called\n");
return gdbarch->addr_bits_remove (gdbarch, addr);
}
@@ -3152,7 +3153,7 @@ gdbarch_significant_addr_bit (struct gdbarch *gdbarch)
gdb_assert (gdbarch != NULL);
/* Skip verify of significant_addr_bit, invalid_p == 0 */
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_significant_addr_bit called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_significant_addr_bit called\n");
return gdbarch->significant_addr_bit;
}
@@ -3169,7 +3170,7 @@ gdbarch_memtag_to_string (struct gdbarch *gdbarch, struct value *tag)
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->memtag_to_string != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_memtag_to_string called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_memtag_to_string called\n");
return gdbarch->memtag_to_string (gdbarch, tag);
}
@@ -3186,7 +3187,7 @@ gdbarch_tagged_address_p (struct gdbarch *gdbarch, struct value *address)
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->tagged_address_p != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_tagged_address_p called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_tagged_address_p called\n");
return gdbarch->tagged_address_p (gdbarch, address);
}
@@ -3203,7 +3204,7 @@ gdbarch_memtag_matches_p (struct gdbarch *gdbarch, struct value *address)
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->memtag_matches_p != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_memtag_matches_p called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_memtag_matches_p called\n");
return gdbarch->memtag_matches_p (gdbarch, address);
}
@@ -3220,7 +3221,7 @@ gdbarch_set_memtags (struct gdbarch *gdbarch, struct value *address, size_t leng
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->set_memtags != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_set_memtags called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_set_memtags called\n");
return gdbarch->set_memtags (gdbarch, address, length, tags, tag_type);
}
@@ -3237,7 +3238,7 @@ gdbarch_get_memtag (struct gdbarch *gdbarch, struct value *address, memtag_type
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->get_memtag != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_get_memtag called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_get_memtag called\n");
return gdbarch->get_memtag (gdbarch, address, tag_type);
}
@@ -3254,7 +3255,7 @@ gdbarch_memtag_granule_size (struct gdbarch *gdbarch)
gdb_assert (gdbarch != NULL);
/* Skip verify of memtag_granule_size, invalid_p == 0 */
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_memtag_granule_size called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_memtag_granule_size called\n");
return gdbarch->memtag_granule_size;
}
@@ -3278,7 +3279,7 @@ gdbarch_software_single_step (struct gdbarch *gdbarch, struct regcache *regcache
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->software_single_step != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_software_single_step called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_software_single_step called\n");
return gdbarch->software_single_step (regcache);
}
@@ -3302,7 +3303,7 @@ gdbarch_single_step_through_delay (struct gdbarch *gdbarch, struct frame_info *f
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->single_step_through_delay != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_single_step_through_delay called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_single_step_through_delay called\n");
return gdbarch->single_step_through_delay (gdbarch, frame);
}
@@ -3319,7 +3320,7 @@ gdbarch_print_insn (struct gdbarch *gdbarch, bfd_vma vma, struct disassemble_inf
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->print_insn != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_print_insn called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_print_insn called\n");
return gdbarch->print_insn (vma, info);
}
@@ -3336,7 +3337,7 @@ gdbarch_skip_trampoline_code (struct gdbarch *gdbarch, struct frame_info *frame,
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->skip_trampoline_code != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_skip_trampoline_code called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_skip_trampoline_code called\n");
return gdbarch->skip_trampoline_code (frame, pc);
}
@@ -3353,7 +3354,7 @@ gdbarch_skip_solib_resolver (struct gdbarch *gdbarch, CORE_ADDR pc)
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->skip_solib_resolver != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_skip_solib_resolver called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_skip_solib_resolver called\n");
return gdbarch->skip_solib_resolver (gdbarch, pc);
}
@@ -3370,7 +3371,7 @@ gdbarch_in_solib_return_trampoline (struct gdbarch *gdbarch, CORE_ADDR pc, const
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->in_solib_return_trampoline != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_in_solib_return_trampoline called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_in_solib_return_trampoline called\n");
return gdbarch->in_solib_return_trampoline (gdbarch, pc, name);
}
@@ -3387,7 +3388,7 @@ gdbarch_in_indirect_branch_thunk (struct gdbarch *gdbarch, CORE_ADDR pc)
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->in_indirect_branch_thunk != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_in_indirect_branch_thunk called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_in_indirect_branch_thunk called\n");
return gdbarch->in_indirect_branch_thunk (gdbarch, pc);
}
@@ -3404,7 +3405,7 @@ gdbarch_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR addr)
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->stack_frame_destroyed_p != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_stack_frame_destroyed_p called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_stack_frame_destroyed_p called\n");
return gdbarch->stack_frame_destroyed_p (gdbarch, addr);
}
@@ -3428,7 +3429,7 @@ gdbarch_elf_make_msymbol_special (struct gdbarch *gdbarch, asymbol *sym, struct
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->elf_make_msymbol_special != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_elf_make_msymbol_special called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_elf_make_msymbol_special called\n");
gdbarch->elf_make_msymbol_special (sym, msym);
}
@@ -3445,7 +3446,7 @@ gdbarch_coff_make_msymbol_special (struct gdbarch *gdbarch, int val, struct mini
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->coff_make_msymbol_special != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_coff_make_msymbol_special called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_coff_make_msymbol_special called\n");
gdbarch->coff_make_msymbol_special (val, msym);
}
@@ -3462,7 +3463,7 @@ gdbarch_make_symbol_special (struct gdbarch *gdbarch, struct symbol *sym, struct
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->make_symbol_special != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_make_symbol_special called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_make_symbol_special called\n");
gdbarch->make_symbol_special (sym, objfile);
}
@@ -3479,7 +3480,7 @@ gdbarch_adjust_dwarf2_addr (struct gdbarch *gdbarch, CORE_ADDR pc)
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->adjust_dwarf2_addr != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_adjust_dwarf2_addr called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_adjust_dwarf2_addr called\n");
return gdbarch->adjust_dwarf2_addr (pc);
}
@@ -3496,7 +3497,7 @@ gdbarch_adjust_dwarf2_line (struct gdbarch *gdbarch, CORE_ADDR addr, int rel)
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->adjust_dwarf2_line != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_adjust_dwarf2_line called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_adjust_dwarf2_line called\n");
return gdbarch->adjust_dwarf2_line (addr, rel);
}
@@ -3513,7 +3514,7 @@ gdbarch_cannot_step_breakpoint (struct gdbarch *gdbarch)
gdb_assert (gdbarch != NULL);
/* Skip verify of cannot_step_breakpoint, invalid_p == 0 */
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_cannot_step_breakpoint called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_cannot_step_breakpoint called\n");
return gdbarch->cannot_step_breakpoint;
}
@@ -3530,7 +3531,7 @@ gdbarch_have_nonsteppable_watchpoint (struct gdbarch *gdbarch)
gdb_assert (gdbarch != NULL);
/* Skip verify of have_nonsteppable_watchpoint, invalid_p == 0 */
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_have_nonsteppable_watchpoint called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_have_nonsteppable_watchpoint called\n");
return gdbarch->have_nonsteppable_watchpoint;
}
@@ -3554,7 +3555,7 @@ gdbarch_address_class_type_flags (struct gdbarch *gdbarch, int byte_size, int dw
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->address_class_type_flags != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_address_class_type_flags called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_address_class_type_flags called\n");
return gdbarch->address_class_type_flags (byte_size, dwarf2_addr_class);
}
@@ -3578,7 +3579,7 @@ gdbarch_address_class_type_flags_to_name (struct gdbarch *gdbarch, type_instance
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->address_class_type_flags_to_name != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_address_class_type_flags_to_name called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_address_class_type_flags_to_name called\n");
return gdbarch->address_class_type_flags_to_name (gdbarch, type_flags);
}
@@ -3595,7 +3596,7 @@ gdbarch_execute_dwarf_cfa_vendor_op (struct gdbarch *gdbarch, gdb_byte op, struc
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->execute_dwarf_cfa_vendor_op != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_execute_dwarf_cfa_vendor_op called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_execute_dwarf_cfa_vendor_op called\n");
return gdbarch->execute_dwarf_cfa_vendor_op (gdbarch, op, fs);
}
@@ -3619,7 +3620,7 @@ gdbarch_address_class_name_to_type_flags (struct gdbarch *gdbarch, const char *n
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->address_class_name_to_type_flags != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_address_class_name_to_type_flags called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_address_class_name_to_type_flags called\n");
return gdbarch->address_class_name_to_type_flags (gdbarch, name, type_flags_ptr);
}
@@ -3631,12 +3632,12 @@ set_gdbarch_address_class_name_to_type_flags (struct gdbarch *gdbarch,
}
int
-gdbarch_register_reggroup_p (struct gdbarch *gdbarch, int regnum, struct reggroup *reggroup)
+gdbarch_register_reggroup_p (struct gdbarch *gdbarch, int regnum, const struct reggroup *reggroup)
{
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->register_reggroup_p != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_register_reggroup_p called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_register_reggroup_p called\n");
return gdbarch->register_reggroup_p (gdbarch, regnum, reggroup);
}
@@ -3660,7 +3661,7 @@ gdbarch_fetch_pointer_argument (struct gdbarch *gdbarch, struct frame_info *fram
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->fetch_pointer_argument != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_fetch_pointer_argument called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_fetch_pointer_argument called\n");
return gdbarch->fetch_pointer_argument (frame, argi, type);
}
@@ -3684,7 +3685,7 @@ gdbarch_iterate_over_regset_sections (struct gdbarch *gdbarch, iterate_over_regs
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->iterate_over_regset_sections != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_iterate_over_regset_sections called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_iterate_over_regset_sections called\n");
gdbarch->iterate_over_regset_sections (gdbarch, cb, cb_data, regcache);
}
@@ -3708,7 +3709,7 @@ gdbarch_make_corefile_notes (struct gdbarch *gdbarch, bfd *obfd, int *note_size)
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->make_corefile_notes != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_make_corefile_notes called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_make_corefile_notes called\n");
return gdbarch->make_corefile_notes (gdbarch, obfd, note_size);
}
@@ -3732,7 +3733,7 @@ gdbarch_find_memory_regions (struct gdbarch *gdbarch, find_memory_region_ftype f
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->find_memory_regions != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_find_memory_regions called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_find_memory_regions called\n");
return gdbarch->find_memory_regions (gdbarch, func, data);
}
@@ -3756,7 +3757,7 @@ gdbarch_core_xfer_shared_libraries (struct gdbarch *gdbarch, gdb_byte *readbuf,
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->core_xfer_shared_libraries != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_core_xfer_shared_libraries called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_core_xfer_shared_libraries called\n");
return gdbarch->core_xfer_shared_libraries (gdbarch, readbuf, offset, len);
}
@@ -3780,7 +3781,7 @@ gdbarch_core_xfer_shared_libraries_aix (struct gdbarch *gdbarch, gdb_byte *readb
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->core_xfer_shared_libraries_aix != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_core_xfer_shared_libraries_aix called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_core_xfer_shared_libraries_aix called\n");
return gdbarch->core_xfer_shared_libraries_aix (gdbarch, readbuf, offset, len);
}
@@ -3804,7 +3805,7 @@ gdbarch_core_pid_to_str (struct gdbarch *gdbarch, ptid_t ptid)
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->core_pid_to_str != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_core_pid_to_str called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_core_pid_to_str called\n");
return gdbarch->core_pid_to_str (gdbarch, ptid);
}
@@ -3828,7 +3829,7 @@ gdbarch_core_thread_name (struct gdbarch *gdbarch, struct thread_info *thr)
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->core_thread_name != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_core_thread_name called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_core_thread_name called\n");
return gdbarch->core_thread_name (gdbarch, thr);
}
@@ -3852,7 +3853,7 @@ gdbarch_core_xfer_siginfo (struct gdbarch *gdbarch, gdb_byte *readbuf, ULONGEST
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->core_xfer_siginfo != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_core_xfer_siginfo called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_core_xfer_siginfo called\n");
return gdbarch->core_xfer_siginfo (gdbarch, readbuf, offset, len);
}
@@ -3877,7 +3878,7 @@ gdbarch_gcore_bfd_target (struct gdbarch *gdbarch)
/* Check variable changed from pre-default. */
gdb_assert (gdbarch->gcore_bfd_target != 0);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_gcore_bfd_target called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_gcore_bfd_target called\n");
return gdbarch->gcore_bfd_target;
}
@@ -3894,7 +3895,7 @@ gdbarch_vtable_function_descriptors (struct gdbarch *gdbarch)
gdb_assert (gdbarch != NULL);
/* Skip verify of vtable_function_descriptors, invalid_p == 0 */
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_vtable_function_descriptors called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_vtable_function_descriptors called\n");
return gdbarch->vtable_function_descriptors;
}
@@ -3911,7 +3912,7 @@ gdbarch_vbit_in_delta (struct gdbarch *gdbarch)
gdb_assert (gdbarch != NULL);
/* Skip verify of vbit_in_delta, invalid_p == 0 */
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_vbit_in_delta called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_vbit_in_delta called\n");
return gdbarch->vbit_in_delta;
}
@@ -3928,7 +3929,7 @@ gdbarch_skip_permanent_breakpoint (struct gdbarch *gdbarch, struct regcache *reg
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->skip_permanent_breakpoint != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_skip_permanent_breakpoint called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_skip_permanent_breakpoint called\n");
gdbarch->skip_permanent_breakpoint (regcache);
}
@@ -3953,7 +3954,7 @@ gdbarch_max_insn_length (struct gdbarch *gdbarch)
/* Check variable changed from pre-default. */
gdb_assert (gdbarch->max_insn_length != 0);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_max_insn_length called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_max_insn_length called\n");
return gdbarch->max_insn_length;
}
@@ -3977,7 +3978,7 @@ gdbarch_displaced_step_copy_insn (struct gdbarch *gdbarch, CORE_ADDR from, CORE_
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->displaced_step_copy_insn != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_displaced_step_copy_insn called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_displaced_step_copy_insn called\n");
return gdbarch->displaced_step_copy_insn (gdbarch, from, to, regs);
}
@@ -3994,7 +3995,7 @@ gdbarch_displaced_step_hw_singlestep (struct gdbarch *gdbarch)
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->displaced_step_hw_singlestep != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_displaced_step_hw_singlestep called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_displaced_step_hw_singlestep called\n");
return gdbarch->displaced_step_hw_singlestep (gdbarch);
}
@@ -4019,7 +4020,7 @@ gdbarch_displaced_step_fixup (struct gdbarch *gdbarch, struct displaced_step_cop
gdb_assert (gdbarch->displaced_step_fixup != NULL);
/* Do not check predicate: gdbarch->displaced_step_fixup != NULL, allow call. */
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_displaced_step_fixup called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_displaced_step_fixup called\n");
gdbarch->displaced_step_fixup (gdbarch, closure, from, to, regs);
}
@@ -4043,7 +4044,7 @@ gdbarch_displaced_step_prepare (struct gdbarch *gdbarch, thread_info *thread, CO
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->displaced_step_prepare != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_displaced_step_prepare called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_displaced_step_prepare called\n");
return gdbarch->displaced_step_prepare (gdbarch, thread, displaced_pc);
}
@@ -4060,7 +4061,7 @@ gdbarch_displaced_step_finish (struct gdbarch *gdbarch, thread_info *thread, gdb
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->displaced_step_finish != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_displaced_step_finish called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_displaced_step_finish called\n");
return gdbarch->displaced_step_finish (gdbarch, thread, sig);
}
@@ -4084,7 +4085,7 @@ gdbarch_displaced_step_copy_insn_closure_by_addr (struct gdbarch *gdbarch, infer
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->displaced_step_copy_insn_closure_by_addr != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_displaced_step_copy_insn_closure_by_addr called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_displaced_step_copy_insn_closure_by_addr called\n");
return gdbarch->displaced_step_copy_insn_closure_by_addr (inf, addr);
}
@@ -4101,7 +4102,7 @@ gdbarch_displaced_step_restore_all_in_ptid (struct gdbarch *gdbarch, inferior *p
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->displaced_step_restore_all_in_ptid != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_displaced_step_restore_all_in_ptid called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_displaced_step_restore_all_in_ptid called\n");
gdbarch->displaced_step_restore_all_in_ptid (parent_inf, child_ptid);
}
@@ -4126,7 +4127,7 @@ gdbarch_relocate_instruction (struct gdbarch *gdbarch, CORE_ADDR *to, CORE_ADDR
gdb_assert (gdbarch->relocate_instruction != NULL);
/* Do not check predicate: gdbarch->relocate_instruction != NULL, allow call. */
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_relocate_instruction called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_relocate_instruction called\n");
gdbarch->relocate_instruction (gdbarch, to, from);
}
@@ -4150,7 +4151,7 @@ gdbarch_overlay_update (struct gdbarch *gdbarch, struct obj_section *osect)
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->overlay_update != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_overlay_update called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_overlay_update called\n");
gdbarch->overlay_update (osect);
}
@@ -4174,7 +4175,7 @@ gdbarch_core_read_description (struct gdbarch *gdbarch, struct target_ops *targe
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->core_read_description != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_core_read_description called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_core_read_description called\n");
return gdbarch->core_read_description (gdbarch, target, abfd);
}
@@ -4191,7 +4192,7 @@ gdbarch_sofun_address_maybe_missing (struct gdbarch *gdbarch)
gdb_assert (gdbarch != NULL);
/* Skip verify of sofun_address_maybe_missing, invalid_p == 0 */
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_sofun_address_maybe_missing called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_sofun_address_maybe_missing called\n");
return gdbarch->sofun_address_maybe_missing;
}
@@ -4215,7 +4216,7 @@ gdbarch_process_record (struct gdbarch *gdbarch, struct regcache *regcache, CORE
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->process_record != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_process_record called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_process_record called\n");
return gdbarch->process_record (gdbarch, regcache, addr);
}
@@ -4239,7 +4240,7 @@ gdbarch_process_record_signal (struct gdbarch *gdbarch, struct regcache *regcach
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->process_record_signal != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_process_record_signal called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_process_record_signal called\n");
return gdbarch->process_record_signal (gdbarch, regcache, signal);
}
@@ -4263,7 +4264,7 @@ gdbarch_gdb_signal_from_target (struct gdbarch *gdbarch, int signo)
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->gdb_signal_from_target != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_gdb_signal_from_target called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_gdb_signal_from_target called\n");
return gdbarch->gdb_signal_from_target (gdbarch, signo);
}
@@ -4287,7 +4288,7 @@ gdbarch_gdb_signal_to_target (struct gdbarch *gdbarch, enum gdb_signal signal)
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->gdb_signal_to_target != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_gdb_signal_to_target called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_gdb_signal_to_target called\n");
return gdbarch->gdb_signal_to_target (gdbarch, signal);
}
@@ -4311,7 +4312,7 @@ gdbarch_get_siginfo_type (struct gdbarch *gdbarch)
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->get_siginfo_type != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_get_siginfo_type called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_get_siginfo_type called\n");
return gdbarch->get_siginfo_type (gdbarch);
}
@@ -4335,7 +4336,7 @@ gdbarch_record_special_symbol (struct gdbarch *gdbarch, struct objfile *objfile,
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->record_special_symbol != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_record_special_symbol called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_record_special_symbol called\n");
gdbarch->record_special_symbol (gdbarch, objfile, sym);
}
@@ -4359,7 +4360,7 @@ gdbarch_get_syscall_number (struct gdbarch *gdbarch, thread_info *thread)
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->get_syscall_number != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_get_syscall_number called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_get_syscall_number called\n");
return gdbarch->get_syscall_number (gdbarch, thread);
}
@@ -4376,7 +4377,7 @@ gdbarch_xml_syscall_file (struct gdbarch *gdbarch)
gdb_assert (gdbarch != NULL);
/* Skip verify of xml_syscall_file, invalid_p == 0 */
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_xml_syscall_file called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_xml_syscall_file called\n");
return gdbarch->xml_syscall_file;
}
@@ -4393,7 +4394,7 @@ gdbarch_syscalls_info (struct gdbarch *gdbarch)
gdb_assert (gdbarch != NULL);
/* Skip verify of syscalls_info, invalid_p == 0 */
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_syscalls_info called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_syscalls_info called\n");
return gdbarch->syscalls_info;
}
@@ -4410,7 +4411,7 @@ gdbarch_stap_integer_prefixes (struct gdbarch *gdbarch)
gdb_assert (gdbarch != NULL);
/* Skip verify of stap_integer_prefixes, invalid_p == 0 */
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_stap_integer_prefixes called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_stap_integer_prefixes called\n");
return gdbarch->stap_integer_prefixes;
}
@@ -4427,7 +4428,7 @@ gdbarch_stap_integer_suffixes (struct gdbarch *gdbarch)
gdb_assert (gdbarch != NULL);
/* Skip verify of stap_integer_suffixes, invalid_p == 0 */
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_stap_integer_suffixes called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_stap_integer_suffixes called\n");
return gdbarch->stap_integer_suffixes;
}
@@ -4444,7 +4445,7 @@ gdbarch_stap_register_prefixes (struct gdbarch *gdbarch)
gdb_assert (gdbarch != NULL);
/* Skip verify of stap_register_prefixes, invalid_p == 0 */
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_stap_register_prefixes called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_stap_register_prefixes called\n");
return gdbarch->stap_register_prefixes;
}
@@ -4461,7 +4462,7 @@ gdbarch_stap_register_suffixes (struct gdbarch *gdbarch)
gdb_assert (gdbarch != NULL);
/* Skip verify of stap_register_suffixes, invalid_p == 0 */
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_stap_register_suffixes called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_stap_register_suffixes called\n");
return gdbarch->stap_register_suffixes;
}
@@ -4478,7 +4479,7 @@ gdbarch_stap_register_indirection_prefixes (struct gdbarch *gdbarch)
gdb_assert (gdbarch != NULL);
/* Skip verify of stap_register_indirection_prefixes, invalid_p == 0 */
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_stap_register_indirection_prefixes called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_stap_register_indirection_prefixes called\n");
return gdbarch->stap_register_indirection_prefixes;
}
@@ -4495,7 +4496,7 @@ gdbarch_stap_register_indirection_suffixes (struct gdbarch *gdbarch)
gdb_assert (gdbarch != NULL);
/* Skip verify of stap_register_indirection_suffixes, invalid_p == 0 */
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_stap_register_indirection_suffixes called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_stap_register_indirection_suffixes called\n");
return gdbarch->stap_register_indirection_suffixes;
}
@@ -4512,7 +4513,7 @@ gdbarch_stap_gdb_register_prefix (struct gdbarch *gdbarch)
gdb_assert (gdbarch != NULL);
/* Skip verify of stap_gdb_register_prefix, invalid_p == 0 */
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_stap_gdb_register_prefix called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_stap_gdb_register_prefix called\n");
return gdbarch->stap_gdb_register_prefix;
}
@@ -4529,7 +4530,7 @@ gdbarch_stap_gdb_register_suffix (struct gdbarch *gdbarch)
gdb_assert (gdbarch != NULL);
/* Skip verify of stap_gdb_register_suffix, invalid_p == 0 */
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_stap_gdb_register_suffix called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_stap_gdb_register_suffix called\n");
return gdbarch->stap_gdb_register_suffix;
}
@@ -4553,7 +4554,7 @@ gdbarch_stap_is_single_operand (struct gdbarch *gdbarch, const char *s)
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->stap_is_single_operand != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_stap_is_single_operand called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_stap_is_single_operand called\n");
return gdbarch->stap_is_single_operand (gdbarch, s);
}
@@ -4577,7 +4578,7 @@ gdbarch_stap_parse_special_token (struct gdbarch *gdbarch, struct stap_parse_inf
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->stap_parse_special_token != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_stap_parse_special_token called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_stap_parse_special_token called\n");
return gdbarch->stap_parse_special_token (gdbarch, p);
}
@@ -4601,7 +4602,7 @@ gdbarch_stap_adjust_register (struct gdbarch *gdbarch, struct stap_parse_info *p
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->stap_adjust_register != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_stap_adjust_register called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_stap_adjust_register called\n");
return gdbarch->stap_adjust_register (gdbarch, p, regname, regnum);
}
@@ -4625,7 +4626,7 @@ gdbarch_dtrace_parse_probe_argument (struct gdbarch *gdbarch, int narg)
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->dtrace_parse_probe_argument != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_dtrace_parse_probe_argument called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_dtrace_parse_probe_argument called\n");
return gdbarch->dtrace_parse_probe_argument (gdbarch, narg);
}
@@ -4649,7 +4650,7 @@ gdbarch_dtrace_probe_is_enabled (struct gdbarch *gdbarch, CORE_ADDR addr)
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->dtrace_probe_is_enabled != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_dtrace_probe_is_enabled called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_dtrace_probe_is_enabled called\n");
return gdbarch->dtrace_probe_is_enabled (gdbarch, addr);
}
@@ -4673,7 +4674,7 @@ gdbarch_dtrace_enable_probe (struct gdbarch *gdbarch, CORE_ADDR addr)
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->dtrace_enable_probe != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_dtrace_enable_probe called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_dtrace_enable_probe called\n");
gdbarch->dtrace_enable_probe (gdbarch, addr);
}
@@ -4697,7 +4698,7 @@ gdbarch_dtrace_disable_probe (struct gdbarch *gdbarch, CORE_ADDR addr)
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->dtrace_disable_probe != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_dtrace_disable_probe called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_dtrace_disable_probe called\n");
gdbarch->dtrace_disable_probe (gdbarch, addr);
}
@@ -4714,7 +4715,7 @@ gdbarch_has_global_solist (struct gdbarch *gdbarch)
gdb_assert (gdbarch != NULL);
/* Skip verify of has_global_solist, invalid_p == 0 */
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_has_global_solist called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_has_global_solist called\n");
return gdbarch->has_global_solist;
}
@@ -4731,7 +4732,7 @@ gdbarch_has_global_breakpoints (struct gdbarch *gdbarch)
gdb_assert (gdbarch != NULL);
/* Skip verify of has_global_breakpoints, invalid_p == 0 */
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_has_global_breakpoints called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_has_global_breakpoints called\n");
return gdbarch->has_global_breakpoints;
}
@@ -4748,7 +4749,7 @@ gdbarch_has_shared_address_space (struct gdbarch *gdbarch)
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->has_shared_address_space != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_has_shared_address_space called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_has_shared_address_space called\n");
return gdbarch->has_shared_address_space (gdbarch);
}
@@ -4765,7 +4766,7 @@ gdbarch_fast_tracepoint_valid_at (struct gdbarch *gdbarch, CORE_ADDR addr, std::
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->fast_tracepoint_valid_at != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_fast_tracepoint_valid_at called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_fast_tracepoint_valid_at called\n");
return gdbarch->fast_tracepoint_valid_at (gdbarch, addr, msg);
}
@@ -4782,7 +4783,7 @@ gdbarch_guess_tracepoint_registers (struct gdbarch *gdbarch, struct regcache *re
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->guess_tracepoint_registers != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_guess_tracepoint_registers called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_guess_tracepoint_registers called\n");
gdbarch->guess_tracepoint_registers (gdbarch, regcache, addr);
}
@@ -4799,7 +4800,7 @@ gdbarch_auto_charset (struct gdbarch *gdbarch)
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->auto_charset != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_auto_charset called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_auto_charset called\n");
return gdbarch->auto_charset ();
}
@@ -4816,7 +4817,7 @@ gdbarch_auto_wide_charset (struct gdbarch *gdbarch)
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->auto_wide_charset != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_auto_wide_charset called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_auto_wide_charset called\n");
return gdbarch->auto_wide_charset ();
}
@@ -4831,8 +4832,9 @@ const char *
gdbarch_solib_symbols_extension (struct gdbarch *gdbarch)
{
gdb_assert (gdbarch != NULL);
+ /* Skip verify of solib_symbols_extension, invalid_p == 0 */
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_solib_symbols_extension called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_solib_symbols_extension called\n");
return gdbarch->solib_symbols_extension;
}
@@ -4849,7 +4851,7 @@ gdbarch_has_dos_based_file_system (struct gdbarch *gdbarch)
gdb_assert (gdbarch != NULL);
/* Skip verify of has_dos_based_file_system, invalid_p == 0 */
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_has_dos_based_file_system called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_has_dos_based_file_system called\n");
return gdbarch->has_dos_based_file_system;
}
@@ -4866,7 +4868,7 @@ gdbarch_gen_return_address (struct gdbarch *gdbarch, struct agent_expr *ax, stru
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->gen_return_address != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_gen_return_address called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_gen_return_address called\n");
gdbarch->gen_return_address (gdbarch, ax, value, scope);
}
@@ -4890,7 +4892,7 @@ gdbarch_info_proc (struct gdbarch *gdbarch, const char *args, enum info_proc_wha
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->info_proc != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_info_proc called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_info_proc called\n");
gdbarch->info_proc (gdbarch, args, what);
}
@@ -4914,7 +4916,7 @@ gdbarch_core_info_proc (struct gdbarch *gdbarch, const char *args, enum info_pro
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->core_info_proc != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_core_info_proc called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_core_info_proc called\n");
gdbarch->core_info_proc (gdbarch, args, what);
}
@@ -4931,7 +4933,7 @@ gdbarch_iterate_over_objfiles_in_search_order (struct gdbarch *gdbarch, iterate_
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->iterate_over_objfiles_in_search_order != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_iterate_over_objfiles_in_search_order called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_iterate_over_objfiles_in_search_order called\n");
gdbarch->iterate_over_objfiles_in_search_order (gdbarch, cb, cb_data, current_objfile);
}
@@ -4948,7 +4950,7 @@ gdbarch_ravenscar_ops (struct gdbarch *gdbarch)
gdb_assert (gdbarch != NULL);
/* Skip verify of ravenscar_ops, invalid_p == 0 */
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_ravenscar_ops called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_ravenscar_ops called\n");
return gdbarch->ravenscar_ops;
}
@@ -4965,7 +4967,7 @@ gdbarch_insn_is_call (struct gdbarch *gdbarch, CORE_ADDR addr)
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->insn_is_call != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_insn_is_call called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_insn_is_call called\n");
return gdbarch->insn_is_call (gdbarch, addr);
}
@@ -4982,7 +4984,7 @@ gdbarch_insn_is_ret (struct gdbarch *gdbarch, CORE_ADDR addr)
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->insn_is_ret != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_insn_is_ret called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_insn_is_ret called\n");
return gdbarch->insn_is_ret (gdbarch, addr);
}
@@ -4999,7 +5001,7 @@ gdbarch_insn_is_jump (struct gdbarch *gdbarch, CORE_ADDR addr)
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->insn_is_jump != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_insn_is_jump called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_insn_is_jump called\n");
return gdbarch->insn_is_jump (gdbarch, addr);
}
@@ -5016,7 +5018,7 @@ gdbarch_program_breakpoint_here_p (struct gdbarch *gdbarch, CORE_ADDR address)
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->program_breakpoint_here_p != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_program_breakpoint_here_p called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_program_breakpoint_here_p called\n");
return gdbarch->program_breakpoint_here_p (gdbarch, address);
}
@@ -5040,7 +5042,7 @@ gdbarch_auxv_parse (struct gdbarch *gdbarch, gdb_byte **readptr, gdb_byte *endpt
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->auxv_parse != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_auxv_parse called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_auxv_parse called\n");
return gdbarch->auxv_parse (gdbarch, readptr, endptr, typep, valp);
}
@@ -5057,7 +5059,7 @@ gdbarch_print_auxv_entry (struct gdbarch *gdbarch, struct ui_file *file, CORE_AD
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->print_auxv_entry != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_print_auxv_entry called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_print_auxv_entry called\n");
gdbarch->print_auxv_entry (gdbarch, file, type, val);
}
@@ -5074,7 +5076,7 @@ gdbarch_vsyscall_range (struct gdbarch *gdbarch, struct mem_range *range)
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->vsyscall_range != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_vsyscall_range called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_vsyscall_range called\n");
return gdbarch->vsyscall_range (gdbarch, range);
}
@@ -5091,7 +5093,7 @@ gdbarch_infcall_mmap (struct gdbarch *gdbarch, CORE_ADDR size, unsigned prot)
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->infcall_mmap != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_infcall_mmap called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_infcall_mmap called\n");
return gdbarch->infcall_mmap (size, prot);
}
@@ -5108,7 +5110,7 @@ gdbarch_infcall_munmap (struct gdbarch *gdbarch, CORE_ADDR addr, CORE_ADDR size)
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->infcall_munmap != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_infcall_munmap called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_infcall_munmap called\n");
gdbarch->infcall_munmap (addr, size);
}
@@ -5125,7 +5127,7 @@ gdbarch_gcc_target_options (struct gdbarch *gdbarch)
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->gcc_target_options != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_gcc_target_options called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_gcc_target_options called\n");
return gdbarch->gcc_target_options (gdbarch);
}
@@ -5142,7 +5144,7 @@ gdbarch_gnu_triplet_regexp (struct gdbarch *gdbarch)
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->gnu_triplet_regexp != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_gnu_triplet_regexp called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_gnu_triplet_regexp called\n");
return gdbarch->gnu_triplet_regexp (gdbarch);
}
@@ -5159,7 +5161,7 @@ gdbarch_addressable_memory_unit_size (struct gdbarch *gdbarch)
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->addressable_memory_unit_size != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_addressable_memory_unit_size called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_addressable_memory_unit_size called\n");
return gdbarch->addressable_memory_unit_size (gdbarch);
}
@@ -5176,7 +5178,7 @@ gdbarch_disassembler_options_implicit (struct gdbarch *gdbarch)
gdb_assert (gdbarch != NULL);
/* Skip verify of disassembler_options_implicit, invalid_p == 0 */
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_disassembler_options_implicit called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_disassembler_options_implicit called\n");
return gdbarch->disassembler_options_implicit;
}
@@ -5193,7 +5195,7 @@ gdbarch_disassembler_options (struct gdbarch *gdbarch)
gdb_assert (gdbarch != NULL);
/* Skip verify of disassembler_options, invalid_p == 0 */
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_disassembler_options called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_disassembler_options called\n");
return gdbarch->disassembler_options;
}
@@ -5210,7 +5212,7 @@ gdbarch_valid_disassembler_options (struct gdbarch *gdbarch)
gdb_assert (gdbarch != NULL);
/* Skip verify of valid_disassembler_options, invalid_p == 0 */
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_valid_disassembler_options called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_valid_disassembler_options called\n");
return gdbarch->valid_disassembler_options;
}
@@ -5227,7 +5229,7 @@ gdbarch_type_align (struct gdbarch *gdbarch, struct type *type)
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->type_align != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_type_align called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_type_align called\n");
return gdbarch->type_align (gdbarch, type);
}
@@ -5244,7 +5246,7 @@ gdbarch_get_pc_address_flags (struct gdbarch *gdbarch, frame_info *frame, CORE_A
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->get_pc_address_flags != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_get_pc_address_flags called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_get_pc_address_flags called\n");
return gdbarch->get_pc_address_flags (frame, pc);
}
@@ -5261,7 +5263,7 @@ gdbarch_read_core_file_mappings (struct gdbarch *gdbarch, struct bfd *cbfd, read
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->read_core_file_mappings != NULL);
if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_read_core_file_mappings called\n");
+ gdb_printf (gdb_stdlog, "gdbarch_read_core_file_mappings called\n");
gdbarch->read_core_file_mappings (gdbarch, cbfd, pre_loop_cb, loop_cb);
}
diff --git a/gdb/gdbarch.h b/gdb/gdbarch.h
index fc1582449ed..6404dc1cb43 100644
--- a/gdb/gdbarch.h
+++ b/gdb/gdbarch.h
@@ -24,7 +24,7 @@
#include <vector>
#include "frame.h"
#include "dis-asm.h"
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
#include "infrun.h"
#include "osabi.h"
#include "displaced-stepping.h"
diff --git a/gdb/gdbarch.py b/gdb/gdbarch.py
index 9b538a7d5c6..8956a9c38aa 100755
--- a/gdb/gdbarch.py
+++ b/gdb/gdbarch.py
@@ -20,6 +20,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import textwrap
+import gdbcopyright
# All the components created in gdbarch-components.py.
components = []
@@ -161,30 +162,9 @@ class Method(Function):
with open("gdbarch-components.py") as fd:
exec(fd.read())
-copyright = """/* *INDENT-OFF* */ /* THIS FILE IS GENERATED -*- buffer-read-only: t -*- */
-/* vi:set ro: */
-
-/* Dynamic architecture support for GDB, the GNU debugger.
-
- Copyright (C) 1998-2022 Free Software Foundation, Inc.
-
- This file is part of GDB.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>. */
-
-/* This file was created with the aid of ``gdbarch.py''. */
-"""
+copyright = gdbcopyright.copyright(
+ "gdbarch.py", "Dynamic architecture support for GDB, the GNU debugger."
+)
def info(c):
@@ -381,6 +361,16 @@ with open("gdbarch.c", "w") as f:
elif c.predefault is not None:
print(f" if (gdbarch->{c.name} == {c.predefault})", file=f)
print(f""" log.puts ("\\n\\t{c.name}");""", file=f)
+ elif c.invalid is True:
+ print(f" if (gdbarch->{c.name} == 0)", file=f)
+ print(f""" log.puts ("\\n\\t{c.name}");""", file=f)
+ else:
+ # We should not allow ourselves to simply do nothing here
+ # because no other case applies. If we end up here then
+ # either the input data needs adjusting so one of the
+ # above cases matches, or we need additional cases adding
+ # here.
+ raise Exception("unhandled case when generating gdbarch validation")
print(" if (!log.empty ())", file=f)
print(" internal_error (__FILE__, __LINE__,", file=f)
print(""" _("verify_gdbarch: the following are invalid ...%s"),""", file=f)
@@ -401,19 +391,19 @@ with open("gdbarch.c", "w") as f:
print("#if defined (GDB_NM_FILE)", file=f)
print(" gdb_nm_file = GDB_NM_FILE;", file=f)
print("#endif", file=f)
- print(" fprintf_filtered (file,", file=f)
+ print(" gdb_printf (file,", file=f)
print(""" "gdbarch_dump: GDB_NM_FILE = %s\\n",""", file=f)
print(" gdb_nm_file);", file=f)
for c in components:
if c.predicate:
- print(" fprintf_filtered (file,", file=f)
+ print(" gdb_printf (file,", file=f)
print(
f""" "gdbarch_dump: gdbarch_{c.name}_p() = %d\\n",""",
file=f,
)
print(f" gdbarch_{c.name}_p (gdbarch));", file=f)
if isinstance(c, Function):
- print(" fprintf_filtered (file,", file=f)
+ print(" gdb_printf (file,", file=f)
print(
f""" "gdbarch_dump: {c.name} = <%s>\\n",""", file=f
)
@@ -428,7 +418,7 @@ with open("gdbarch.c", "w") as f:
printer = f"core_addr_to_string_nz (gdbarch->{c.name})"
else:
printer = f"plongest (gdbarch->{c.name})"
- print(" fprintf_filtered (file,", file=f)
+ print(" gdb_printf (file,", file=f)
print(
f""" "gdbarch_dump: {c.name} = %s\\n",""", file=f
)
@@ -464,7 +454,7 @@ with open("gdbarch.c", "w") as f:
)
print(" if (gdbarch_debug >= 2)", file=f)
print(
- f""" fprintf_unfiltered (gdb_stdlog, "gdbarch_{c.name} called\\n");""",
+ f""" gdb_printf (gdb_stdlog, "gdbarch_{c.name} called\\n");""",
file=f,
)
print(" ", file=f, end="")
@@ -498,7 +488,7 @@ with open("gdbarch.c", "w") as f:
print(f" gdb_assert (gdbarch->{c.name} != {c.predefault});", file=f)
print(" if (gdbarch_debug >= 2)", file=f)
print(
- f""" fprintf_unfiltered (gdb_stdlog, "gdbarch_{c.name} called\\n");""",
+ f""" gdb_printf (gdb_stdlog, "gdbarch_{c.name} called\\n");""",
file=f,
)
print(f" return gdbarch->{c.name};", file=f)
@@ -519,7 +509,7 @@ with open("gdbarch.c", "w") as f:
print(" gdb_assert (gdbarch != NULL);", file=f)
print(" if (gdbarch_debug >= 2)", file=f)
print(
- f""" fprintf_unfiltered (gdb_stdlog, "gdbarch_{c.name} called\\n");""",
+ f""" gdb_printf (gdb_stdlog, "gdbarch_{c.name} called\\n");""",
file=f,
)
print(f" return gdbarch->{c.name};", file=f)
diff --git a/gdb/gdbcopyright.py b/gdb/gdbcopyright.py
new file mode 100644
index 00000000000..1e38036204d
--- /dev/null
+++ b/gdb/gdbcopyright.py
@@ -0,0 +1,53 @@
+# Copyright constant for Python code to use.
+#
+# Copyright (C) 2022 Free Software Foundation, Inc.
+#
+# This file is part of GDB.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+def copyright(tool, description):
+ # Search the tool source itself for the correct copyright years.
+ with open(tool, "r") as f:
+ for line in f:
+ if line.startswith("# Copyright (C) "):
+ dateline = line[1:].strip()
+ break
+ return f"""/* *INDENT-OFF* */ /* THIS FILE IS GENERATED -*- buffer-read-only: t -*- */
+/* vi:set ro: */
+
+/* {description}
+
+ {dateline}
+
+ This file is part of GDB.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+/* To regenerate this file, run:
+ ./{tool}
+*/
+"""
diff --git a/gdb/gdbthread.h b/gdb/gdbthread.h
index 5350a42f1bb..1a33eb61221 100644
--- a/gdb/gdbthread.h
+++ b/gdb/gdbthread.h
@@ -34,6 +34,7 @@ struct symtab;
#include "gdbsupport/forward-scope-exit.h"
#include "displaced-stepping.h"
#include "gdbsupport/intrusive_list.h"
+#include "thread-fsm.h"
struct inferior;
struct process_stratum_target;
@@ -443,6 +444,32 @@ public:
m_suspend.stop_reason = reason;
}
+ /* Get the FSM associated with the thread. */
+
+ struct thread_fsm *thread_fsm () const
+ {
+ return m_thread_fsm.get ();
+ }
+
+ /* Get the owning reference to the FSM associated with the thread.
+
+ After a call to this method, "thread_fsm () == nullptr". */
+
+ std::unique_ptr<struct thread_fsm> release_thread_fsm ()
+ {
+ return std::move (m_thread_fsm);
+ }
+
+ /* Set the FSM associated with the current thread.
+
+ It is invalid to set the FSM if another FSM is already installed. */
+
+ void set_thread_fsm (std::unique_ptr<struct thread_fsm> fsm)
+ {
+ gdb_assert (m_thread_fsm == nullptr);
+ m_thread_fsm = std::move (fsm);
+ }
+
int current_line = 0;
struct symtab *current_symtab = NULL;
@@ -480,11 +507,6 @@ public:
when GDB gets back SIGTRAP from step_resume_breakpoint. */
int step_after_step_resume_breakpoint = 0;
- /* Pointer to the state machine manager object that handles what is
- left to do for the thread's execution command after the target
- stops. Several execution commands use it. */
- struct thread_fsm *thread_fsm = NULL;
-
/* This is used to remember when a fork or vfork event was caught by
a catchpoint, and thus the event is to be followed at the next
resume of the thread, and not immediately. */
@@ -550,6 +572,11 @@ private:
Nullptr if the thread does not have a user-given name. */
gdb::unique_xmalloc_ptr<char> m_name;
+
+ /* Pointer to the state machine manager object that handles what is
+ left to do for the thread's execution command after the target
+ stops. Several execution commands use it. */
+ std::unique_ptr<struct thread_fsm> m_thread_fsm;
};
using thread_info_resumed_with_pending_wait_status_node
@@ -1003,4 +1030,8 @@ extern void thread_try_catch_cmd (thread_info *thr,
const char *cmd, int from_tty,
const qcs_flags &flags);
+/* Return a string representation of STATE. */
+
+extern const char *thread_state_string (enum thread_state state);
+
#endif /* GDBTHREAD_H */
diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c
index 8af96c79e6c..2a51372a037 100644
--- a/gdb/gdbtypes.c
+++ b/gdb/gdbtypes.c
@@ -44,12 +44,18 @@
#include <algorithm>
#include "gmp-utils.h"
+/* The value of an invalid conversion badness. */
+#define INVALID_CONVERSION 100
+
+static struct dynamic_prop_list *
+copy_dynamic_prop_list (struct obstack *, struct dynamic_prop_list *);
+
/* Initialize BADNESS constants. */
-const struct rank LENGTH_MISMATCH_BADNESS = {100,0};
+const struct rank LENGTH_MISMATCH_BADNESS = {INVALID_CONVERSION,0};
-const struct rank TOO_FEW_PARAMS_BADNESS = {100,0};
-const struct rank INCOMPATIBLE_TYPE_BADNESS = {100,0};
+const struct rank TOO_FEW_PARAMS_BADNESS = {INVALID_CONVERSION,0};
+const struct rank INCOMPATIBLE_TYPE_BADNESS = {INVALID_CONVERSION,0};
const struct rank EXACT_MATCH_BADNESS = {0,0};
@@ -82,6 +88,10 @@ const struct floatformat *floatformats_ieee_double[BFD_ENDIAN_UNKNOWN] = {
&floatformat_ieee_double_big,
&floatformat_ieee_double_little
};
+const struct floatformat *floatformats_ieee_quad[BFD_ENDIAN_UNKNOWN] = {
+ &floatformat_ieee_quad_big,
+ &floatformat_ieee_quad_little
+};
const struct floatformat *floatformats_ieee_double_littlebyte_bigword[BFD_ENDIAN_UNKNOWN] = {
&floatformat_ieee_double_big,
&floatformat_ieee_double_littlebyte_bigword
@@ -102,10 +112,6 @@ const struct floatformat *floatformats_ia64_spill[BFD_ENDIAN_UNKNOWN] = {
&floatformat_ia64_spill_big,
&floatformat_ia64_spill_little
};
-const struct floatformat *floatformats_ia64_quad[BFD_ENDIAN_UNKNOWN] = {
- &floatformat_ia64_quad_big,
- &floatformat_ia64_quad_little
-};
const struct floatformat *floatformats_vax_f[BFD_ENDIAN_UNKNOWN] = {
&floatformat_vax_f,
&floatformat_vax_f
@@ -142,9 +148,9 @@ show_opaque_type_resolution (struct ui_file *file, int from_tty,
struct cmd_list_element *c,
const char *value)
{
- fprintf_filtered (file, _("Resolution of opaque struct/class/union types "
- "(if set before loading symbols) is %s.\n"),
- value);
+ gdb_printf (file, _("Resolution of opaque struct/class/union types "
+ "(if set before loading symbols) is %s.\n"),
+ value);
}
/* A function to show whether C++ overload debugging is enabled. */
@@ -153,8 +159,8 @@ static void
show_overload_debug (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Debugging of C++ overloading is %s.\n"),
- value);
+ gdb_printf (file, _("Debugging of C++ overloading is %s.\n"),
+ value);
}
/* A function to show the status of strict type checking. */
@@ -163,7 +169,7 @@ static void
show_strict_type_checking (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Strict type checking is %s.\n"), value);
+ gdb_printf (file, _("Strict type checking is %s.\n"), value);
}
@@ -1690,8 +1696,8 @@ lookup_typename (const struct language_defn *language,
sym = lookup_symbol_in_language (name, block, VAR_DOMAIN,
language->la_language, NULL).symbol;
- if (sym != NULL && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
- return SYMBOL_TYPE (sym);
+ if (sym != NULL && sym->aclass () == LOC_TYPEDEF)
+ return sym->type ();
if (noerr)
return NULL;
@@ -1738,12 +1744,12 @@ lookup_struct (const char *name, const struct block *block)
{
error (_("No struct type named %s."), name);
}
- if (SYMBOL_TYPE (sym)->code () != TYPE_CODE_STRUCT)
+ if (sym->type ()->code () != TYPE_CODE_STRUCT)
{
error (_("This context has class, union or enum %s, not a struct."),
name);
}
- return (SYMBOL_TYPE (sym));
+ return (sym->type ());
}
/* Lookup a union type named "union NAME",
@@ -1760,7 +1766,7 @@ lookup_union (const char *name, const struct block *block)
if (sym == NULL)
error (_("No union type named %s."), name);
- t = SYMBOL_TYPE (sym);
+ t = sym->type ();
if (t->code () == TYPE_CODE_UNION)
return t;
@@ -1783,12 +1789,12 @@ lookup_enum (const char *name, const struct block *block)
{
error (_("No enum type named %s."), name);
}
- if (SYMBOL_TYPE (sym)->code () != TYPE_CODE_ENUM)
+ if (sym->type ()->code () != TYPE_CODE_ENUM)
{
error (_("This context has class, struct or union %s, not an enum."),
name);
}
- return (SYMBOL_TYPE (sym));
+ return (sym->type ());
}
/* Lookup a template type named "template NAME<TYPE>",
@@ -1813,12 +1819,12 @@ lookup_template_type (const char *name, struct type *type,
{
error (_("No template type named %s."), name);
}
- if (SYMBOL_TYPE (sym)->code () != TYPE_CODE_STRUCT)
+ if (sym->type ()->code () != TYPE_CODE_STRUCT)
{
error (_("This context has class, union or enum %s, not a struct."),
name);
}
- return (SYMBOL_TYPE (sym));
+ return (sym->type ());
}
/* See gdbtypes.h. */
@@ -2191,27 +2197,34 @@ static struct type *resolve_dynamic_type_internal
and stride information set to undefined. The RESOLVE_P set to false
case will be used when evaluating a dynamic array that is not
allocated, or not associated, i.e. the bounds information might not be
- initialized yet. */
+ initialized yet.
+
+ RANK is the array rank for which we are resolving this range, and is a
+ zero based count. The rank should never be negative.
+*/
static struct type *
resolve_dynamic_range (struct type *dyn_range_type,
struct property_addr_info *addr_stack,
- bool resolve_p = true)
+ int rank, bool resolve_p = true)
{
CORE_ADDR value;
struct type *static_range_type, *static_target_type;
struct dynamic_prop low_bound, high_bound, stride;
gdb_assert (dyn_range_type->code () == TYPE_CODE_RANGE);
+ gdb_assert (rank >= 0);
const struct dynamic_prop *prop = &dyn_range_type->bounds ()->low;
- if (resolve_p && dwarf2_evaluate_property (prop, NULL, addr_stack, &value))
+ if (resolve_p && dwarf2_evaluate_property (prop, NULL, addr_stack, &value,
+ { (CORE_ADDR) rank }))
low_bound.set_const_val (value);
else
low_bound.set_undefined ();
prop = &dyn_range_type->bounds ()->high;
- if (resolve_p && dwarf2_evaluate_property (prop, NULL, addr_stack, &value))
+ if (resolve_p && dwarf2_evaluate_property (prop, NULL, addr_stack, &value,
+ { (CORE_ADDR) rank }))
{
high_bound.set_const_val (value);
@@ -2224,7 +2237,8 @@ resolve_dynamic_range (struct type *dyn_range_type,
bool byte_stride_p = dyn_range_type->bounds ()->flag_is_byte_stride;
prop = &dyn_range_type->bounds ()->stride;
- if (resolve_p && dwarf2_evaluate_property (prop, NULL, addr_stack, &value))
+ if (resolve_p && dwarf2_evaluate_property (prop, NULL, addr_stack, &value,
+ { (CORE_ADDR) rank }))
{
stride.set_const_val (value);
@@ -2255,18 +2269,29 @@ resolve_dynamic_range (struct type *dyn_range_type,
return static_range_type;
}
-/* Resolves dynamic bound values of an array or string type TYPE to static
- ones. ADDR_STACK is a stack of struct property_addr_info to be used if
- needed during the dynamic resolution.
+/* Helper function for resolve_dynamic_array_or_string. This function
+ resolves the properties for a single array at RANK within a nested array
+ of arrays structure. The RANK value is greater than or equal to 0, and
+ starts at it's maximum value and goes down by 1 for each recursive call
+ to this function. So, for a 3-dimensional array, the first call to this
+ function has RANK == 2, then we call ourselves recursively with RANK ==
+ 1, than again with RANK == 0, and at that point we should return.
+
+ TYPE is updated as the dynamic properties are resolved, and so, should
+ be a copy of the dynamic type, rather than the original dynamic type
+ itself.
+
+ ADDR_STACK is a stack of struct property_addr_info to be used if needed
+ during the dynamic resolution.
When RESOLVE_P is true then the dynamic properties of TYPE are
evaluated, otherwise the dynamic properties of TYPE are not evaluated,
instead we assume the array is not allocated/associated yet. */
static struct type *
-resolve_dynamic_array_or_string (struct type *type,
- struct property_addr_info *addr_stack,
- bool resolve_p = true)
+resolve_dynamic_array_or_string_1 (struct type *type,
+ struct property_addr_info *addr_stack,
+ int rank, bool resolve_p)
{
CORE_ADDR value;
struct type *elt_type;
@@ -2280,7 +2305,9 @@ resolve_dynamic_array_or_string (struct type *type,
gdb_assert (type->code () == TYPE_CODE_ARRAY
|| type->code () == TYPE_CODE_STRING);
- type = copy_type (type);
+ /* As the rank is a zero based count we expect this to never be
+ negative. */
+ gdb_assert (rank >= 0);
/* Resolve the allocated and associated properties before doing anything
else. If an array is not allocated or not associated then (at least
@@ -2310,11 +2337,16 @@ resolve_dynamic_array_or_string (struct type *type,
}
range_type = check_typedef (type->index_type ());
- range_type = resolve_dynamic_range (range_type, addr_stack, resolve_p);
+ range_type
+ = resolve_dynamic_range (range_type, addr_stack, rank, resolve_p);
ary_dim = check_typedef (TYPE_TARGET_TYPE (type));
if (ary_dim != NULL && ary_dim->code () == TYPE_CODE_ARRAY)
- elt_type = resolve_dynamic_array_or_string (ary_dim, addr_stack, resolve_p);
+ {
+ ary_dim = copy_type (ary_dim);
+ elt_type = resolve_dynamic_array_or_string_1 (ary_dim, addr_stack,
+ rank - 1, resolve_p);
+ }
else
elt_type = TYPE_TARGET_TYPE (type);
@@ -2342,6 +2374,97 @@ resolve_dynamic_array_or_string (struct type *type,
bit_stride);
}
+/* Resolve an array or string type with dynamic properties, return a new
+ type with the dynamic properties resolved to actual values. The
+ ADDR_STACK represents the location of the object being resolved. */
+
+static struct type *
+resolve_dynamic_array_or_string (struct type *type,
+ struct property_addr_info *addr_stack)
+{
+ CORE_ADDR value;
+ int rank = 0;
+
+ /* For dynamic type resolution strings can be treated like arrays of
+ characters. */
+ gdb_assert (type->code () == TYPE_CODE_ARRAY
+ || type->code () == TYPE_CODE_STRING);
+
+ type = copy_type (type);
+
+ /* Resolve the rank property to get rank value. */
+ struct dynamic_prop *prop = TYPE_RANK_PROP (type);
+ if (dwarf2_evaluate_property (prop, nullptr, addr_stack, &value))
+ {
+ prop->set_const_val (value);
+ rank = value;
+
+ if (rank == 0)
+ {
+ /* Rank is zero, if a variable is passed as an argument to a
+ function. In this case the resolved type should not be an
+ array, but should instead be that of an array element. */
+ struct type *dynamic_array_type = type;
+ type = copy_type (TYPE_TARGET_TYPE (dynamic_array_type));
+ struct dynamic_prop_list *prop_list
+ = TYPE_MAIN_TYPE (dynamic_array_type)->dyn_prop_list;
+ if (prop_list != nullptr)
+ {
+ struct obstack *obstack
+ = &type->objfile_owner ()->objfile_obstack;
+ TYPE_MAIN_TYPE (type)->dyn_prop_list
+ = copy_dynamic_prop_list (obstack, prop_list);
+ }
+ return type;
+ }
+ else if (type->code () == TYPE_CODE_STRING && rank != 1)
+ {
+ /* What would this even mean? A string with a dynamic rank
+ greater than 1. */
+ error (_("unable to handle string with dynamic rank greater than 1"));
+ }
+ else if (rank > 1)
+ {
+ /* Arrays with dynamic rank are initially just an array type
+ with a target type that is the array element.
+
+ However, now we know the rank of the array we need to build
+ the array of arrays structure that GDB expects, that is we
+ need an array type that has a target which is an array type,
+ and so on, until eventually, we have the element type at the
+ end of the chain. Create all the additional array types here
+ by copying the top level array type. */
+ struct type *element_type = TYPE_TARGET_TYPE (type);
+ struct type *rank_type = type;
+ for (int i = 1; i < rank; i++)
+ {
+ TYPE_TARGET_TYPE (rank_type) = copy_type (rank_type);
+ rank_type = TYPE_TARGET_TYPE (rank_type);
+ }
+ TYPE_TARGET_TYPE (rank_type) = element_type;
+ }
+ }
+ else
+ {
+ rank = 1;
+
+ for (struct type *tmp_type = check_typedef (TYPE_TARGET_TYPE (type));
+ tmp_type->code () == TYPE_CODE_ARRAY;
+ tmp_type = check_typedef (TYPE_TARGET_TYPE (tmp_type)))
+ ++rank;
+ }
+
+ /* The rank that we calculated above is actually a count of the number of
+ ranks. However, when we resolve the type of each individual array
+ rank we should actually use a rank "offset", e.g. an array with a rank
+ count of 1 (calculated above) will use the rank offset 0 in order to
+ resolve the details of the first array dimension. As a result, we
+ reduce the rank by 1 here. */
+ --rank;
+
+ return resolve_dynamic_array_or_string_1 (type, addr_stack, rank, true);
+}
+
/* Resolve dynamic bounds of members of the union TYPE to static
bounds. ADDR_STACK is a stack of struct property_addr_info
to be used if needed during the dynamic resolution. */
@@ -2598,7 +2721,7 @@ resolve_dynamic_struct (struct type *type,
CORE_ADDR addr;
if (dwarf2_evaluate_property (&prop, nullptr, addr_stack, &addr,
- true))
+ {addr_stack->addr}))
resolved_type->field (i).set_loc_bitpos
(TARGET_CHAR_BIT * (addr - addr_stack->addr));
}
@@ -2727,7 +2850,12 @@ resolve_dynamic_type_internal (struct type *type,
break;
case TYPE_CODE_RANGE:
- resolved_type = resolve_dynamic_range (type, addr_stack);
+ /* Pass 0 for the rank value here, which indicates this is a
+ range for the first rank of an array. The assumption is that
+ this rank value is not actually required for the resolution of
+ the dynamic range, otherwise, we'd be resolving this range
+ within the context of a dynamic array. */
+ resolved_type = resolve_dynamic_range (type, addr_stack, 0);
break;
case TYPE_CODE_UNION:
@@ -2906,7 +3034,7 @@ check_typedef (struct type *type)
}
sym = lookup_symbol (name, 0, STRUCT_DOMAIN, 0).symbol;
if (sym)
- TYPE_TARGET_TYPE (type) = SYMBOL_TYPE (sym);
+ TYPE_TARGET_TYPE (type) = sym->type ();
else /* TYPE_CODE_UNDEF */
TYPE_TARGET_TYPE (type) = alloc_type_arch (type->arch ());
}
@@ -3000,11 +3128,11 @@ check_typedef (struct type *type)
/* Same as above for opaque types, we can replace the stub
with the complete type only if they are in the same
objfile. */
- if (SYMBOL_TYPE (sym)->objfile_owner () == type->objfile_owner ())
- type = make_qualified_type (SYMBOL_TYPE (sym),
+ if (sym->type ()->objfile_owner () == type->objfile_owner ())
+ type = make_qualified_type (sym->type (),
type->instance_flags (), type);
else
- type = SYMBOL_TYPE (sym);
+ type = sym->type ();
}
}
@@ -3903,6 +4031,17 @@ type_byte_order (const struct type *type)
return byteorder;
}
+/* See gdbtypes.h. */
+
+bool
+is_nocall_function (const struct type *type)
+{
+ gdb_assert (type->code () == TYPE_CODE_FUNC
+ || type->code () == TYPE_CODE_METHOD);
+
+ return TYPE_CALLING_CONVENTION (type) == DW_CC_nocall;
+}
+
/* Overload resolution. */
@@ -3955,8 +4094,14 @@ compare_badness (const badness_vector &a, const badness_vector &b)
{
int i;
int tmp;
- short found_pos = 0; /* any positives in c? */
- short found_neg = 0; /* any negatives in c? */
+ /* Any positives in comparison? */
+ bool found_pos = false;
+ /* Any negatives in comparison? */
+ bool found_neg = false;
+ /* Did A have any INVALID_CONVERSION entries. */
+ bool a_invalid = false;
+ /* Did B have any INVALID_CONVERSION entries. */
+ bool b_invalid = false;
/* differing sizes => incomparable */
if (a.size () != b.size ())
@@ -3967,12 +4112,27 @@ compare_badness (const badness_vector &a, const badness_vector &b)
{
tmp = compare_ranks (b[i], a[i]);
if (tmp > 0)
- found_pos = 1;
+ found_pos = true;
else if (tmp < 0)
- found_neg = 1;
+ found_neg = true;
+ if (a[i].rank >= INVALID_CONVERSION)
+ a_invalid = true;
+ if (b[i].rank >= INVALID_CONVERSION)
+ b_invalid = true;
}
- if (found_pos)
+ /* B will only be considered better than or incomparable to A if
+ they both have invalid entries, or if neither does. That is, if
+ A has only valid entries, and B has an invalid entry, then A will
+ be considered better than B, even if B happens to be better for
+ some parameter. */
+ if (a_invalid != b_invalid)
+ {
+ if (a_invalid)
+ return 3; /* A > B */
+ return 2; /* A < B */
+ }
+ else if (found_pos)
{
if (found_neg)
return 1; /* incomparable */
@@ -4731,7 +4891,8 @@ rank_one_type_parm_set (struct type *parm, struct type *arg, struct value *value
* Return 0 if they are identical types;
* Otherwise, return an integer which corresponds to how compatible
* PARM is to ARG. The higher the return value, the worse the match.
- * Generally the "bad" conversions are all uniformly assigned a 100. */
+ * Generally the "bad" conversions are all uniformly assigned
+ * INVALID_CONVERSION. */
struct rank
rank_one_type (struct type *parm, struct type *arg, struct value *value)
@@ -4800,10 +4961,10 @@ rank_one_type (struct type *parm, struct type *arg, struct value *value)
if (overload_debug)
{
/* Debugging only. */
- fprintf_filtered (gdb_stderr,
- "------ Arg is %s [%d], parm is %s [%d]\n",
- arg->name (), arg->code (),
- parm->name (), parm->code ());
+ gdb_printf (gdb_stderr,
+ "------ Arg is %s [%d], parm is %s [%d]\n",
+ arg->name (), arg->code (),
+ parm->name (), parm->code ());
}
/* x -> y means arg of type x being supplied for parameter of type y. */
@@ -4852,12 +5013,12 @@ print_bit_vector (B_TYPE *bits, int nbits)
{
if ((bitno % 8) == 0)
{
- puts_filtered (" ");
+ gdb_puts (" ");
}
if (B_TST (bits, bitno))
- printf_filtered (("1"));
+ gdb_printf (("1"));
else
- printf_filtered (("0"));
+ gdb_printf (("0"));
}
}
@@ -4874,7 +5035,7 @@ print_args (struct field *args, int nargs, int spaces)
for (i = 0; i < nargs; i++)
{
- printf_filtered
+ gdb_printf
("%*s[%d] name '%s'\n", spaces, "", i,
args[i].name () != NULL ? args[i].name () : "<NULL>");
recursive_dump_type (args[i].type (), spaces + 2);
@@ -4901,12 +5062,12 @@ dump_fn_fieldlists (struct type *type, int spaces)
int overload_idx;
struct fn_field *f;
- printf_filtered ("%*sfn_fieldlists %s\n", spaces, "",
- host_address_to_string (TYPE_FN_FIELDLISTS (type)));
+ gdb_printf ("%*sfn_fieldlists %s\n", spaces, "",
+ host_address_to_string (TYPE_FN_FIELDLISTS (type)));
for (method_idx = 0; method_idx < TYPE_NFN_FIELDS (type); method_idx++)
{
f = TYPE_FN_FIELDLIST1 (type, method_idx);
- printf_filtered
+ gdb_printf
("%*s[%d] name '%s' (%s) length %d\n", spaces + 2, "",
method_idx,
TYPE_FN_FIELDLIST_NAME (type, method_idx),
@@ -4916,46 +5077,46 @@ dump_fn_fieldlists (struct type *type, int spaces)
overload_idx < TYPE_FN_FIELDLIST_LENGTH (type, method_idx);
overload_idx++)
{
- printf_filtered
+ gdb_printf
("%*s[%d] physname '%s' (%s)\n",
spaces + 4, "", overload_idx,
TYPE_FN_FIELD_PHYSNAME (f, overload_idx),
host_address_to_string (TYPE_FN_FIELD_PHYSNAME (f,
overload_idx)));
- printf_filtered
+ gdb_printf
("%*stype %s\n", spaces + 8, "",
host_address_to_string (TYPE_FN_FIELD_TYPE (f, overload_idx)));
recursive_dump_type (TYPE_FN_FIELD_TYPE (f, overload_idx),
spaces + 8 + 2);
- printf_filtered
+ gdb_printf
("%*sargs %s\n", spaces + 8, "",
host_address_to_string (TYPE_FN_FIELD_ARGS (f, overload_idx)));
print_args (TYPE_FN_FIELD_ARGS (f, overload_idx),
TYPE_FN_FIELD_TYPE (f, overload_idx)->num_fields (),
spaces + 8 + 2);
- printf_filtered
+ gdb_printf
("%*sfcontext %s\n", spaces + 8, "",
host_address_to_string (TYPE_FN_FIELD_FCONTEXT (f,
overload_idx)));
- printf_filtered ("%*sis_const %d\n", spaces + 8, "",
- TYPE_FN_FIELD_CONST (f, overload_idx));
- printf_filtered ("%*sis_volatile %d\n", spaces + 8, "",
- TYPE_FN_FIELD_VOLATILE (f, overload_idx));
- printf_filtered ("%*sis_private %d\n", spaces + 8, "",
- TYPE_FN_FIELD_PRIVATE (f, overload_idx));
- printf_filtered ("%*sis_protected %d\n", spaces + 8, "",
- TYPE_FN_FIELD_PROTECTED (f, overload_idx));
- printf_filtered ("%*sis_stub %d\n", spaces + 8, "",
- TYPE_FN_FIELD_STUB (f, overload_idx));
- printf_filtered ("%*sdefaulted %d\n", spaces + 8, "",
- TYPE_FN_FIELD_DEFAULTED (f, overload_idx));
- printf_filtered ("%*sis_deleted %d\n", spaces + 8, "",
- TYPE_FN_FIELD_DELETED (f, overload_idx));
- printf_filtered ("%*svoffset %u\n", spaces + 8, "",
- TYPE_FN_FIELD_VOFFSET (f, overload_idx));
+ gdb_printf ("%*sis_const %d\n", spaces + 8, "",
+ TYPE_FN_FIELD_CONST (f, overload_idx));
+ gdb_printf ("%*sis_volatile %d\n", spaces + 8, "",
+ TYPE_FN_FIELD_VOLATILE (f, overload_idx));
+ gdb_printf ("%*sis_private %d\n", spaces + 8, "",
+ TYPE_FN_FIELD_PRIVATE (f, overload_idx));
+ gdb_printf ("%*sis_protected %d\n", spaces + 8, "",
+ TYPE_FN_FIELD_PROTECTED (f, overload_idx));
+ gdb_printf ("%*sis_stub %d\n", spaces + 8, "",
+ TYPE_FN_FIELD_STUB (f, overload_idx));
+ gdb_printf ("%*sdefaulted %d\n", spaces + 8, "",
+ TYPE_FN_FIELD_DEFAULTED (f, overload_idx));
+ gdb_printf ("%*sis_deleted %d\n", spaces + 8, "",
+ TYPE_FN_FIELD_DELETED (f, overload_idx));
+ gdb_printf ("%*svoffset %u\n", spaces + 8, "",
+ TYPE_FN_FIELD_VOFFSET (f, overload_idx));
}
}
}
@@ -4963,49 +5124,49 @@ dump_fn_fieldlists (struct type *type, int spaces)
static void
print_cplus_stuff (struct type *type, int spaces)
{
- printf_filtered ("%*svptr_fieldno %d\n", spaces, "",
- TYPE_VPTR_FIELDNO (type));
- printf_filtered ("%*svptr_basetype %s\n", spaces, "",
- host_address_to_string (TYPE_VPTR_BASETYPE (type)));
+ gdb_printf ("%*svptr_fieldno %d\n", spaces, "",
+ TYPE_VPTR_FIELDNO (type));
+ gdb_printf ("%*svptr_basetype %s\n", spaces, "",
+ host_address_to_string (TYPE_VPTR_BASETYPE (type)));
if (TYPE_VPTR_BASETYPE (type) != NULL)
recursive_dump_type (TYPE_VPTR_BASETYPE (type), spaces + 2);
- printf_filtered ("%*sn_baseclasses %d\n", spaces, "",
- TYPE_N_BASECLASSES (type));
- printf_filtered ("%*snfn_fields %d\n", spaces, "",
- TYPE_NFN_FIELDS (type));
+ gdb_printf ("%*sn_baseclasses %d\n", spaces, "",
+ TYPE_N_BASECLASSES (type));
+ gdb_printf ("%*snfn_fields %d\n", spaces, "",
+ TYPE_NFN_FIELDS (type));
if (TYPE_N_BASECLASSES (type) > 0)
{
- printf_filtered
+ gdb_printf
("%*svirtual_field_bits (%d bits at *%s)",
spaces, "", TYPE_N_BASECLASSES (type),
host_address_to_string (TYPE_FIELD_VIRTUAL_BITS (type)));
print_bit_vector (TYPE_FIELD_VIRTUAL_BITS (type),
TYPE_N_BASECLASSES (type));
- puts_filtered ("\n");
+ gdb_puts ("\n");
}
if (type->num_fields () > 0)
{
if (TYPE_FIELD_PRIVATE_BITS (type) != NULL)
{
- printf_filtered
+ gdb_printf
("%*sprivate_field_bits (%d bits at *%s)",
spaces, "", type->num_fields (),
host_address_to_string (TYPE_FIELD_PRIVATE_BITS (type)));
print_bit_vector (TYPE_FIELD_PRIVATE_BITS (type),
type->num_fields ());
- puts_filtered ("\n");
+ gdb_puts ("\n");
}
if (TYPE_FIELD_PROTECTED_BITS (type) != NULL)
{
- printf_filtered
+ gdb_printf
("%*sprotected_field_bits (%d bits at *%s",
spaces, "", type->num_fields (),
host_address_to_string (TYPE_FIELD_PROTECTED_BITS (type)));
print_bit_vector (TYPE_FIELD_PROTECTED_BITS (type),
type->num_fields ());
- puts_filtered ("\n");
+ gdb_puts ("\n");
}
}
if (TYPE_NFN_FIELDS (type) > 0)
@@ -5013,8 +5174,8 @@ print_cplus_stuff (struct type *type, int spaces)
dump_fn_fieldlists (type, spaces);
}
- printf_filtered ("%*scalling_convention %d\n", spaces, "",
- TYPE_CPLUS_CALLING_CONVENTION (type));
+ gdb_printf ("%*scalling_convention %d\n", spaces, "",
+ TYPE_CPLUS_CALLING_CONVENTION (type));
}
/* Print the contents of the TYPE's type_specific union, assuming that
@@ -5026,10 +5187,10 @@ print_gnat_stuff (struct type *type, int spaces)
struct type *descriptive_type = TYPE_DESCRIPTIVE_TYPE (type);
if (descriptive_type == NULL)
- printf_filtered ("%*sno descriptive type\n", spaces + 2, "");
+ gdb_printf ("%*sno descriptive type\n", spaces + 2, "");
else
{
- printf_filtered ("%*sdescriptive type\n", spaces + 2, "");
+ gdb_printf ("%*sdescriptive type\n", spaces + 2, "");
recursive_dump_type (descriptive_type, spaces + 4);
}
}
@@ -5040,8 +5201,8 @@ print_gnat_stuff (struct type *type, int spaces)
static void
print_fixed_point_type_info (struct type *type, int spaces)
{
- printf_filtered ("%*sscaling factor: %s\n", spaces + 2, "",
- type->fixed_point_scaling_factor ().str ().c_str ());
+ gdb_printf ("%*sscaling factor: %s\n", spaces + 2, "",
+ type->fixed_point_scaling_factor ().str ().c_str ());
}
static struct obstack dont_print_type_obstack;
@@ -5054,14 +5215,14 @@ dump_dynamic_prop (dynamic_prop const& prop)
switch (prop.kind ())
{
case PROP_CONST:
- printf_filtered ("%s", plongest (prop.const_val ()));
+ gdb_printf ("%s", plongest (prop.const_val ()));
break;
case PROP_UNDEFINED:
- printf_filtered ("(undefined)");
+ gdb_printf ("(undefined)");
break;
case PROP_LOCEXPR:
case PROP_LOCLIST:
- printf_filtered ("(dynamic)");
+ gdb_printf ("(dynamic)");
break;
default:
gdb_assert_not_reached ("unhandled prop kind");
@@ -5090,9 +5251,9 @@ recursive_dump_type (struct type *type, int spaces)
{
if (type == first_dont_print[i])
{
- printf_filtered ("%*stype node %s", spaces, "",
- host_address_to_string (type));
- printf_filtered (_(" <same as already seen type>\n"));
+ gdb_printf ("%*stype node %s", spaces, "",
+ host_address_to_string (type));
+ gdb_printf (_(" <same as already seen type>\n"));
return;
}
}
@@ -5100,234 +5261,234 @@ recursive_dump_type (struct type *type, int spaces)
obstack_ptr_grow (&dont_print_type_obstack, type);
}
- printf_filtered ("%*stype node %s\n", spaces, "",
- host_address_to_string (type));
- printf_filtered ("%*sname '%s' (%s)\n", spaces, "",
- type->name () ? type->name () : "<NULL>",
- host_address_to_string (type->name ()));
- printf_filtered ("%*scode 0x%x ", spaces, "", type->code ());
+ gdb_printf ("%*stype node %s\n", spaces, "",
+ host_address_to_string (type));
+ gdb_printf ("%*sname '%s' (%s)\n", spaces, "",
+ type->name () ? type->name () : "<NULL>",
+ host_address_to_string (type->name ()));
+ gdb_printf ("%*scode 0x%x ", spaces, "", type->code ());
switch (type->code ())
{
case TYPE_CODE_UNDEF:
- printf_filtered ("(TYPE_CODE_UNDEF)");
+ gdb_printf ("(TYPE_CODE_UNDEF)");
break;
case TYPE_CODE_PTR:
- printf_filtered ("(TYPE_CODE_PTR)");
+ gdb_printf ("(TYPE_CODE_PTR)");
break;
case TYPE_CODE_ARRAY:
- printf_filtered ("(TYPE_CODE_ARRAY)");
+ gdb_printf ("(TYPE_CODE_ARRAY)");
break;
case TYPE_CODE_STRUCT:
- printf_filtered ("(TYPE_CODE_STRUCT)");
+ gdb_printf ("(TYPE_CODE_STRUCT)");
break;
case TYPE_CODE_UNION:
- printf_filtered ("(TYPE_CODE_UNION)");
+ gdb_printf ("(TYPE_CODE_UNION)");
break;
case TYPE_CODE_ENUM:
- printf_filtered ("(TYPE_CODE_ENUM)");
+ gdb_printf ("(TYPE_CODE_ENUM)");
break;
case TYPE_CODE_FLAGS:
- printf_filtered ("(TYPE_CODE_FLAGS)");
+ gdb_printf ("(TYPE_CODE_FLAGS)");
break;
case TYPE_CODE_FUNC:
- printf_filtered ("(TYPE_CODE_FUNC)");
+ gdb_printf ("(TYPE_CODE_FUNC)");
break;
case TYPE_CODE_INT:
- printf_filtered ("(TYPE_CODE_INT)");
+ gdb_printf ("(TYPE_CODE_INT)");
break;
case TYPE_CODE_FLT:
- printf_filtered ("(TYPE_CODE_FLT)");
+ gdb_printf ("(TYPE_CODE_FLT)");
break;
case TYPE_CODE_VOID:
- printf_filtered ("(TYPE_CODE_VOID)");
+ gdb_printf ("(TYPE_CODE_VOID)");
break;
case TYPE_CODE_SET:
- printf_filtered ("(TYPE_CODE_SET)");
+ gdb_printf ("(TYPE_CODE_SET)");
break;
case TYPE_CODE_RANGE:
- printf_filtered ("(TYPE_CODE_RANGE)");
+ gdb_printf ("(TYPE_CODE_RANGE)");
break;
case TYPE_CODE_STRING:
- printf_filtered ("(TYPE_CODE_STRING)");
+ gdb_printf ("(TYPE_CODE_STRING)");
break;
case TYPE_CODE_ERROR:
- printf_filtered ("(TYPE_CODE_ERROR)");
+ gdb_printf ("(TYPE_CODE_ERROR)");
break;
case TYPE_CODE_MEMBERPTR:
- printf_filtered ("(TYPE_CODE_MEMBERPTR)");
+ gdb_printf ("(TYPE_CODE_MEMBERPTR)");
break;
case TYPE_CODE_METHODPTR:
- printf_filtered ("(TYPE_CODE_METHODPTR)");
+ gdb_printf ("(TYPE_CODE_METHODPTR)");
break;
case TYPE_CODE_METHOD:
- printf_filtered ("(TYPE_CODE_METHOD)");
+ gdb_printf ("(TYPE_CODE_METHOD)");
break;
case TYPE_CODE_REF:
- printf_filtered ("(TYPE_CODE_REF)");
+ gdb_printf ("(TYPE_CODE_REF)");
break;
case TYPE_CODE_CHAR:
- printf_filtered ("(TYPE_CODE_CHAR)");
+ gdb_printf ("(TYPE_CODE_CHAR)");
break;
case TYPE_CODE_BOOL:
- printf_filtered ("(TYPE_CODE_BOOL)");
+ gdb_printf ("(TYPE_CODE_BOOL)");
break;
case TYPE_CODE_COMPLEX:
- printf_filtered ("(TYPE_CODE_COMPLEX)");
+ gdb_printf ("(TYPE_CODE_COMPLEX)");
break;
case TYPE_CODE_TYPEDEF:
- printf_filtered ("(TYPE_CODE_TYPEDEF)");
+ gdb_printf ("(TYPE_CODE_TYPEDEF)");
break;
case TYPE_CODE_NAMESPACE:
- printf_filtered ("(TYPE_CODE_NAMESPACE)");
+ gdb_printf ("(TYPE_CODE_NAMESPACE)");
break;
case TYPE_CODE_FIXED_POINT:
- printf_filtered ("(TYPE_CODE_FIXED_POINT)");
+ gdb_printf ("(TYPE_CODE_FIXED_POINT)");
break;
default:
- printf_filtered ("(UNKNOWN TYPE CODE)");
+ gdb_printf ("(UNKNOWN TYPE CODE)");
break;
}
- puts_filtered ("\n");
- printf_filtered ("%*slength %s\n", spaces, "",
- pulongest (TYPE_LENGTH (type)));
+ gdb_puts ("\n");
+ gdb_printf ("%*slength %s\n", spaces, "",
+ pulongest (TYPE_LENGTH (type)));
if (type->is_objfile_owned ())
- printf_filtered ("%*sobjfile %s\n", spaces, "",
- host_address_to_string (type->objfile_owner ()));
+ gdb_printf ("%*sobjfile %s\n", spaces, "",
+ host_address_to_string (type->objfile_owner ()));
else
- printf_filtered ("%*sgdbarch %s\n", spaces, "",
- host_address_to_string (type->arch_owner ()));
- printf_filtered ("%*starget_type %s\n", spaces, "",
- host_address_to_string (TYPE_TARGET_TYPE (type)));
+ gdb_printf ("%*sgdbarch %s\n", spaces, "",
+ host_address_to_string (type->arch_owner ()));
+ gdb_printf ("%*starget_type %s\n", spaces, "",
+ host_address_to_string (TYPE_TARGET_TYPE (type)));
if (TYPE_TARGET_TYPE (type) != NULL)
{
recursive_dump_type (TYPE_TARGET_TYPE (type), spaces + 2);
}
- printf_filtered ("%*spointer_type %s\n", spaces, "",
- host_address_to_string (TYPE_POINTER_TYPE (type)));
- printf_filtered ("%*sreference_type %s\n", spaces, "",
- host_address_to_string (TYPE_REFERENCE_TYPE (type)));
- printf_filtered ("%*stype_chain %s\n", spaces, "",
- host_address_to_string (TYPE_CHAIN (type)));
- printf_filtered ("%*sinstance_flags 0x%x", spaces, "",
- (unsigned) type->instance_flags ());
+ gdb_printf ("%*spointer_type %s\n", spaces, "",
+ host_address_to_string (TYPE_POINTER_TYPE (type)));
+ gdb_printf ("%*sreference_type %s\n", spaces, "",
+ host_address_to_string (TYPE_REFERENCE_TYPE (type)));
+ gdb_printf ("%*stype_chain %s\n", spaces, "",
+ host_address_to_string (TYPE_CHAIN (type)));
+ gdb_printf ("%*sinstance_flags 0x%x", spaces, "",
+ (unsigned) type->instance_flags ());
if (TYPE_CONST (type))
{
- puts_filtered (" TYPE_CONST");
+ gdb_puts (" TYPE_CONST");
}
if (TYPE_VOLATILE (type))
{
- puts_filtered (" TYPE_VOLATILE");
+ gdb_puts (" TYPE_VOLATILE");
}
if (TYPE_CODE_SPACE (type))
{
- puts_filtered (" TYPE_CODE_SPACE");
+ gdb_puts (" TYPE_CODE_SPACE");
}
if (TYPE_DATA_SPACE (type))
{
- puts_filtered (" TYPE_DATA_SPACE");
+ gdb_puts (" TYPE_DATA_SPACE");
}
if (TYPE_ADDRESS_CLASS_1 (type))
{
- puts_filtered (" TYPE_ADDRESS_CLASS_1");
+ gdb_puts (" TYPE_ADDRESS_CLASS_1");
}
if (TYPE_ADDRESS_CLASS_2 (type))
{
- puts_filtered (" TYPE_ADDRESS_CLASS_2");
+ gdb_puts (" TYPE_ADDRESS_CLASS_2");
}
if (TYPE_RESTRICT (type))
{
- puts_filtered (" TYPE_RESTRICT");
+ gdb_puts (" TYPE_RESTRICT");
}
if (TYPE_ATOMIC (type))
{
- puts_filtered (" TYPE_ATOMIC");
+ gdb_puts (" TYPE_ATOMIC");
}
- puts_filtered ("\n");
+ gdb_puts ("\n");
- printf_filtered ("%*sflags", spaces, "");
+ gdb_printf ("%*sflags", spaces, "");
if (type->is_unsigned ())
{
- puts_filtered (" TYPE_UNSIGNED");
+ gdb_puts (" TYPE_UNSIGNED");
}
if (type->has_no_signedness ())
{
- puts_filtered (" TYPE_NOSIGN");
+ gdb_puts (" TYPE_NOSIGN");
}
if (type->endianity_is_not_default ())
{
- puts_filtered (" TYPE_ENDIANITY_NOT_DEFAULT");
+ gdb_puts (" TYPE_ENDIANITY_NOT_DEFAULT");
}
if (type->is_stub ())
{
- puts_filtered (" TYPE_STUB");
+ gdb_puts (" TYPE_STUB");
}
if (type->target_is_stub ())
{
- puts_filtered (" TYPE_TARGET_STUB");
+ gdb_puts (" TYPE_TARGET_STUB");
}
if (type->is_prototyped ())
{
- puts_filtered (" TYPE_PROTOTYPED");
+ gdb_puts (" TYPE_PROTOTYPED");
}
if (type->has_varargs ())
{
- puts_filtered (" TYPE_VARARGS");
+ gdb_puts (" TYPE_VARARGS");
}
/* This is used for things like AltiVec registers on ppc. Gcc emits
an attribute for the array type, which tells whether or not we
have a vector, instead of a regular array. */
if (type->is_vector ())
{
- puts_filtered (" TYPE_VECTOR");
+ gdb_puts (" TYPE_VECTOR");
}
if (type->is_fixed_instance ())
{
- puts_filtered (" TYPE_FIXED_INSTANCE");
+ gdb_puts (" TYPE_FIXED_INSTANCE");
}
if (type->stub_is_supported ())
{
- puts_filtered (" TYPE_STUB_SUPPORTED");
+ gdb_puts (" TYPE_STUB_SUPPORTED");
}
if (TYPE_NOTTEXT (type))
{
- puts_filtered (" TYPE_NOTTEXT");
+ gdb_puts (" TYPE_NOTTEXT");
}
- puts_filtered ("\n");
- printf_filtered ("%*snfields %d ", spaces, "", type->num_fields ());
+ gdb_puts ("\n");
+ gdb_printf ("%*snfields %d ", spaces, "", type->num_fields ());
if (TYPE_ASSOCIATED_PROP (type) != nullptr
|| TYPE_ALLOCATED_PROP (type) != nullptr)
{
- printf_filtered ("%*s", spaces, "");
+ gdb_printf ("%*s", spaces, "");
if (TYPE_ASSOCIATED_PROP (type) != nullptr)
{
- printf_filtered ("associated ");
+ gdb_printf ("associated ");
dump_dynamic_prop (*TYPE_ASSOCIATED_PROP (type));
}
if (TYPE_ALLOCATED_PROP (type) != nullptr)
{
if (TYPE_ASSOCIATED_PROP (type) != nullptr)
- printf_filtered (" ");
- printf_filtered ("allocated ");
+ gdb_printf (" ");
+ gdb_printf ("allocated ");
dump_dynamic_prop (*TYPE_ALLOCATED_PROP (type));
}
- printf_filtered ("\n");
+ gdb_printf ("\n");
}
- printf_filtered ("%s\n", host_address_to_string (type->fields ()));
+ gdb_printf ("%s\n", host_address_to_string (type->fields ()));
for (idx = 0; idx < type->num_fields (); idx++)
{
if (type->code () == TYPE_CODE_ENUM)
- printf_filtered ("%*s[%d] enumval %s type ", spaces + 2, "",
- idx, plongest (type->field (idx).loc_enumval ()));
+ gdb_printf ("%*s[%d] enumval %s type ", spaces + 2, "",
+ idx, plongest (type->field (idx).loc_enumval ()));
else
- printf_filtered ("%*s[%d] bitpos %s bitsize %d type ", spaces + 2, "",
- idx, plongest (type->field (idx).loc_bitpos ()),
- TYPE_FIELD_BITSIZE (type, idx));
- printf_filtered ("%s name '%s' (%s)\n",
- host_address_to_string (type->field (idx).type ()),
- type->field (idx).name () != NULL
- ? type->field (idx).name ()
- : "<NULL>",
- host_address_to_string (type->field (idx).name ()));
+ gdb_printf ("%*s[%d] bitpos %s bitsize %d type ", spaces + 2, "",
+ idx, plongest (type->field (idx).loc_bitpos ()),
+ TYPE_FIELD_BITSIZE (type, idx));
+ gdb_printf ("%s name '%s' (%s)\n",
+ host_address_to_string (type->field (idx).type ()),
+ type->field (idx).name () != NULL
+ ? type->field (idx).name ()
+ : "<NULL>",
+ host_address_to_string (type->field (idx).name ()));
if (type->field (idx).type () != NULL)
{
recursive_dump_type (type->field (idx).type (), spaces + 4);
@@ -5335,52 +5496,52 @@ recursive_dump_type (struct type *type, int spaces)
}
if (type->code () == TYPE_CODE_RANGE)
{
- printf_filtered ("%*slow ", spaces, "");
+ gdb_printf ("%*slow ", spaces, "");
dump_dynamic_prop (type->bounds ()->low);
- printf_filtered (" high ");
+ gdb_printf (" high ");
dump_dynamic_prop (type->bounds ()->high);
- printf_filtered ("\n");
+ gdb_printf ("\n");
}
switch (TYPE_SPECIFIC_FIELD (type))
{
case TYPE_SPECIFIC_CPLUS_STUFF:
- printf_filtered ("%*scplus_stuff %s\n", spaces, "",
- host_address_to_string (TYPE_CPLUS_SPECIFIC (type)));
+ gdb_printf ("%*scplus_stuff %s\n", spaces, "",
+ host_address_to_string (TYPE_CPLUS_SPECIFIC (type)));
print_cplus_stuff (type, spaces);
break;
case TYPE_SPECIFIC_GNAT_STUFF:
- printf_filtered ("%*sgnat_stuff %s\n", spaces, "",
- host_address_to_string (TYPE_GNAT_SPECIFIC (type)));
+ gdb_printf ("%*sgnat_stuff %s\n", spaces, "",
+ host_address_to_string (TYPE_GNAT_SPECIFIC (type)));
print_gnat_stuff (type, spaces);
break;
case TYPE_SPECIFIC_FLOATFORMAT:
- printf_filtered ("%*sfloatformat ", spaces, "");
+ gdb_printf ("%*sfloatformat ", spaces, "");
if (TYPE_FLOATFORMAT (type) == NULL
|| TYPE_FLOATFORMAT (type)->name == NULL)
- puts_filtered ("(null)");
+ gdb_puts ("(null)");
else
- puts_filtered (TYPE_FLOATFORMAT (type)->name);
- puts_filtered ("\n");
+ gdb_puts (TYPE_FLOATFORMAT (type)->name);
+ gdb_puts ("\n");
break;
case TYPE_SPECIFIC_FUNC:
- printf_filtered ("%*scalling_convention %d\n", spaces, "",
- TYPE_CALLING_CONVENTION (type));
+ gdb_printf ("%*scalling_convention %d\n", spaces, "",
+ TYPE_CALLING_CONVENTION (type));
/* tail_call_list is not printed. */
break;
case TYPE_SPECIFIC_SELF_TYPE:
- printf_filtered ("%*sself_type %s\n", spaces, "",
- host_address_to_string (TYPE_SELF_TYPE (type)));
+ gdb_printf ("%*sself_type %s\n", spaces, "",
+ host_address_to_string (TYPE_SELF_TYPE (type)));
break;
case TYPE_SPECIFIC_FIXED_POINT:
- printf_filtered ("%*sfixed_point_info ", spaces, "");
+ gdb_printf ("%*sfixed_point_info ", spaces, "");
print_fixed_point_type_info (type, spaces);
- puts_filtered ("\n");
+ gdb_puts ("\n");
break;
case TYPE_SPECIFIC_INT:
@@ -5388,8 +5549,8 @@ recursive_dump_type (struct type *type, int spaces)
{
unsigned bit_size = type->bit_size ();
unsigned bit_off = type->bit_offset ();
- printf_filtered ("%*s bit size = %u, bit offset = %u\n", spaces, "",
- bit_size, bit_off);
+ gdb_printf ("%*s bit size = %u, bit offset = %u\n", spaces, "",
+ bit_size, bit_off);
}
break;
}
@@ -6285,7 +6446,7 @@ call_site::pc () const
{
compunit_symtab *cust = this->per_objfile->get_symtab (this->per_cu);
CORE_ADDR delta
- = this->per_objfile->objfile->section_offsets[COMPUNIT_BLOCK_LINE_SECTION (cust)];
+ = this->per_objfile->objfile->section_offsets[cust->block_line_section ()];
return m_unrelocated_pc + delta;
}
diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h
index 42878dba933..7437e1db8ab 100644
--- a/gdb/gdbtypes.h
+++ b/gdb/gdbtypes.h
@@ -46,13 +46,15 @@
#include "hashtab.h"
#include "gdbsupport/array-view.h"
+#include "gdbsupport/gdb-hashtab.h"
#include "gdbsupport/gdb_optional.h"
#include "gdbsupport/offset-type.h"
#include "gdbsupport/enum-flags.h"
#include "gdbsupport/underlying.h"
#include "gdbsupport/print-utils.h"
+#include "gdbsupport/function-view.h"
#include "dwarf2.h"
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
#include "gmp-utils.h"
/* Forward declarations for prototypes. */
@@ -195,6 +197,19 @@ enum type_code
/* * Fixed Point type. */
TYPE_CODE_FIXED_POINT,
+
+ /* * Fortran namelist is a group of variables or arrays that can be
+ read or written.
+
+ Namelist syntax: NAMELIST / groupname / namelist_items ...
+ NAMELIST statement assign a group name to a collection of variables
+ called as namelist items. The namelist items can be of any data type
+ and can be variables or arrays.
+
+ Compiler emit DW_TAG_namelist for group name and DW_TAG_namelist_item
+ for each of the namelist items. GDB process these namelist dies
+ and print namelist variables during print and ptype commands. */
+ TYPE_CODE_NAMELIST,
};
/* * Some bits for the type's instance_flags word. See the macros
@@ -556,6 +571,10 @@ enum dynamic_prop_node_kind
/* A property holding variant parts. */
DYN_PROP_VARIANT_PARTS,
+ /* A property representing DW_AT_rank. The presence of this attribute
+ indicates that the object is of assumed rank array type. */
+ DYN_PROP_RANK,
+
/* A property holding the size of the type. */
DYN_PROP_BYTE_SIZE,
};
@@ -1810,52 +1829,77 @@ enum call_site_parameter_kind
struct call_site_target
{
- field_loc_kind loc_kind () const
- {
- return m_loc_kind;
- }
-
- CORE_ADDR loc_physaddr () const
- {
- gdb_assert (m_loc_kind == FIELD_LOC_KIND_PHYSADDR);
- return m_loc.physaddr;
- }
+ /* The kind of location held by this call site target. */
+ enum kind
+ {
+ /* An address. */
+ PHYSADDR,
+ /* A name. */
+ PHYSNAME,
+ /* A DWARF block. */
+ DWARF_BLOCK,
+ /* An array of addresses. */
+ ADDRESSES,
+ };
void set_loc_physaddr (CORE_ADDR physaddr)
{
- m_loc_kind = FIELD_LOC_KIND_PHYSADDR;
+ m_loc_kind = PHYSADDR;
m_loc.physaddr = physaddr;
}
- const char *loc_physname () const
- {
- gdb_assert (m_loc_kind == FIELD_LOC_KIND_PHYSNAME);
- return m_loc.physname;
- }
-
void set_loc_physname (const char *physname)
{
- m_loc_kind = FIELD_LOC_KIND_PHYSNAME;
+ m_loc_kind = PHYSNAME;
m_loc.physname = physname;
}
- dwarf2_locexpr_baton *loc_dwarf_block () const
- {
- gdb_assert (m_loc_kind == FIELD_LOC_KIND_DWARF_BLOCK);
- return m_loc.dwarf_block;
- }
-
void set_loc_dwarf_block (dwarf2_locexpr_baton *dwarf_block)
{
- m_loc_kind = FIELD_LOC_KIND_DWARF_BLOCK;
+ m_loc_kind = DWARF_BLOCK;
m_loc.dwarf_block = dwarf_block;
}
- union field_location m_loc;
+ void set_loc_array (unsigned length, const CORE_ADDR *data)
+ {
+ m_loc_kind = ADDRESSES;
+ m_loc.addresses.length = length;
+ m_loc.addresses.values = data;
+ }
- /* * Discriminant for union field_location. */
+ /* Callback type for iterate_over_addresses. */
- ENUM_BITFIELD(field_loc_kind) m_loc_kind : 3;
+ using iterate_ftype = gdb::function_view<void (CORE_ADDR)>;
+
+ /* Call CALLBACK for each DW_TAG_call_site's DW_AT_call_target
+ address. CALLER_FRAME (for registers) can be NULL if it is not
+ known. This function always may throw NO_ENTRY_VALUE_ERROR. */
+
+ void iterate_over_addresses (struct gdbarch *call_site_gdbarch,
+ const struct call_site *call_site,
+ struct frame_info *caller_frame,
+ iterate_ftype callback) const;
+
+private:
+
+ union
+ {
+ /* Address. */
+ CORE_ADDR physaddr;
+ /* Mangled name. */
+ const char *physname;
+ /* DWARF block. */
+ struct dwarf2_locexpr_baton *dwarf_block;
+ /* Array of addresses. */
+ struct
+ {
+ unsigned length;
+ const CORE_ADDR *values;
+ } addresses;
+ } m_loc;
+
+ /* * Discriminant for union field_location. */
+ enum kind m_loc_kind;
};
union call_site_parameter_u
@@ -1935,6 +1979,19 @@ struct call_site
CORE_ADDR pc () const;
+ /* Call CALLBACK for each target address. CALLER_FRAME (for
+ registers) can be NULL if it is not known. This function may
+ throw NO_ENTRY_VALUE_ERROR. */
+
+ void iterate_over_addresses (struct gdbarch *call_site_gdbarch,
+ struct frame_info *caller_frame,
+ call_site_target::iterate_ftype callback)
+ const
+ {
+ return target.iterate_over_addresses (call_site_gdbarch, this,
+ caller_frame, callback);
+ }
+
/* * List successor with head in FUNC_TYPE.TAIL_CALL_LIST. */
struct call_site *tail_call_next = nullptr;
@@ -2077,6 +2134,8 @@ extern bool set_type_align (struct type *, ULONGEST);
((thistype)->dyn_prop (DYN_PROP_ALLOCATED))
#define TYPE_ASSOCIATED_PROP(thistype) \
((thistype)->dyn_prop (DYN_PROP_ASSOCIATED))
+#define TYPE_RANK_PROP(thistype) \
+ ((thistype)->dyn_prop (DYN_PROP_RANK))
/* C++ */
@@ -2387,12 +2446,12 @@ extern const struct objfile_type *objfile_type (struct objfile *objfile);
extern const struct floatformat *floatformats_ieee_half[BFD_ENDIAN_UNKNOWN];
extern const struct floatformat *floatformats_ieee_single[BFD_ENDIAN_UNKNOWN];
extern const struct floatformat *floatformats_ieee_double[BFD_ENDIAN_UNKNOWN];
+extern const struct floatformat *floatformats_ieee_quad[BFD_ENDIAN_UNKNOWN];
extern const struct floatformat *floatformats_ieee_double_littlebyte_bigword[BFD_ENDIAN_UNKNOWN];
extern const struct floatformat *floatformats_i387_ext[BFD_ENDIAN_UNKNOWN];
extern const struct floatformat *floatformats_m68881_ext[BFD_ENDIAN_UNKNOWN];
extern const struct floatformat *floatformats_arm_ext[BFD_ENDIAN_UNKNOWN];
extern const struct floatformat *floatformats_ia64_spill[BFD_ENDIAN_UNKNOWN];
-extern const struct floatformat *floatformats_ia64_quad[BFD_ENDIAN_UNKNOWN];
extern const struct floatformat *floatformats_vax_f[BFD_ENDIAN_UNKNOWN];
extern const struct floatformat *floatformats_vax_d[BFD_ENDIAN_UNKNOWN];
extern const struct floatformat *floatformats_ibm_long_double[BFD_ENDIAN_UNKNOWN];
@@ -2851,4 +2910,14 @@ extern enum bfd_endian type_byte_order (const struct type *type);
extern unsigned int overload_debug;
+/* Return whether the function type represented by TYPE is marked as unsafe
+ to call by the debugger.
+
+ This usually indicates that the function does not follow the target's
+ standard calling convention.
+
+ The TYPE argument must be of code TYPE_CODE_FUNC or TYPE_CODE_METHOD. */
+
+extern bool is_nocall_function (const struct type *type);
+
#endif /* GDBTYPES_H */
diff --git a/gdb/glibc-tdep.c b/gdb/glibc-tdep.c
index 19b69fb94dc..7f6c12bc402 100644
--- a/gdb/glibc-tdep.c
+++ b/gdb/glibc-tdep.c
@@ -66,7 +66,7 @@ glibc_skip_solib_resolver (struct gdbarch *gdbarch, CORE_ADDR pc)
if (! fixup.minsym)
fixup = lookup_minimal_symbol ("fixup", NULL, resolver.objfile);
- if (fixup.minsym && BMSYMBOL_VALUE_ADDRESS (fixup) == pc)
+ if (fixup.minsym && fixup.value_address () == pc)
return frame_unwind_caller_pc (get_current_frame ());
}
diff --git a/gdb/gnu-nat.c b/gdb/gnu-nat.c
index 9c53e3c0c2f..72314824278 100644
--- a/gdb/gnu-nat.c
+++ b/gdb/gnu-nat.c
@@ -69,7 +69,7 @@ extern "C"
#include "gdbcmd.h"
#include "gdbcore.h"
#include "gdbthread.h"
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
#include "tid-parse.h"
#include "nat/fork-inferior.h"
@@ -1463,7 +1463,7 @@ gnu_nat_target::wait (ptid_t ptid, struct target_waitstatus *status,
waiting_inf = inf;
- inf_debug (inf, "waiting for: %s", target_pid_to_str (ptid).c_str ());
+ inf_debug (inf, "waiting for: %s", ptid.to_string ().c_str ());
rewait:
if (proc_wait_pid != inf->pid && !inf->no_wait)
@@ -1621,7 +1621,7 @@ rewait:
}
inf_debug (inf, "returning ptid = %s, %s",
- target_pid_to_str (ptid).c_str (),
+ ptid.to_string ().c_str (),
status->to_string ().c_str ());
return ptid;
@@ -1766,7 +1766,7 @@ do_mach_notify_dead_name (mach_port_t notify, mach_port_t dead_port)
#define ILL_RPC(fun, ...) \
- extern kern_return_t fun (__VA_ARGS__); \
+ extern "C" kern_return_t fun (__VA_ARGS__); \
kern_return_t fun (__VA_ARGS__) \
{ \
warning (_("illegal rpc: %s"), #fun); \
@@ -1859,29 +1859,29 @@ ILL_RPC (S_proc_pid2proc_reply,
mach_port_t proc, mach_msg_type_name_t procPoly)
ILL_RPC (S_proc_getprocinfo_reply,
mach_port_t reply_port, kern_return_t return_code,
- int flags, procinfo_t procinfo, mach_msg_type_number_t procinfoCnt,
- data_t threadwaits, mach_msg_type_number_t threadwaitsCnt)
+ int flags, const_procinfo_t procinfo, mach_msg_type_number_t procinfoCnt,
+ const_data_t threadwaits, mach_msg_type_number_t threadwaitsCnt)
ILL_RPC (S_proc_getprocargs_reply,
mach_port_t reply_port, kern_return_t return_code,
- data_t procargs, mach_msg_type_number_t procargsCnt)
+ const_data_t procargs, mach_msg_type_number_t procargsCnt)
ILL_RPC (S_proc_getprocenv_reply,
mach_port_t reply_port, kern_return_t return_code,
- data_t procenv, mach_msg_type_number_t procenvCnt)
+ const_data_t procenv, mach_msg_type_number_t procenvCnt)
ILL_RPC (S_proc_getloginid_reply,
mach_port_t reply_port, kern_return_t return_code, pid_t login_id)
ILL_RPC (S_proc_getloginpids_reply,
mach_port_t reply_port, kern_return_t return_code,
- pidarray_t pids, mach_msg_type_number_t pidsCnt)
+ const_pidarray_t pids, mach_msg_type_number_t pidsCnt)
ILL_RPC (S_proc_getlogin_reply,
- mach_port_t reply_port, kern_return_t return_code, string_t logname)
+ mach_port_t reply_port, kern_return_t return_code, const_string_t logname)
ILL_RPC (S_proc_getsid_reply,
mach_port_t reply_port, kern_return_t return_code, pid_t sid)
ILL_RPC (S_proc_getsessionpgids_reply,
mach_port_t reply_port, kern_return_t return_code,
- pidarray_t pgidset, mach_msg_type_number_t pgidsetCnt)
+ const_pidarray_t pgidset, mach_msg_type_number_t pgidsetCnt)
ILL_RPC (S_proc_getsessionpids_reply,
mach_port_t reply_port, kern_return_t return_code,
- pidarray_t pidset, mach_msg_type_number_t pidsetCnt)
+ const_pidarray_t pidset, mach_msg_type_number_t pidsetCnt)
ILL_RPC (S_proc_getsidport_reply,
mach_port_t reply_port, kern_return_t return_code,
mach_port_t sessport)
@@ -1889,7 +1889,7 @@ ILL_RPC (S_proc_getpgrp_reply,
mach_port_t reply_port, kern_return_t return_code, pid_t pgrp)
ILL_RPC (S_proc_getpgrppids_reply,
mach_port_t reply_port, kern_return_t return_code,
- pidarray_t pidset, mach_msg_type_number_t pidsetCnt)
+ const_pidarray_t pidset, mach_msg_type_number_t pidsetCnt)
ILL_RPC (S_proc_get_tty_reply,
mach_port_t reply_port, kern_return_t return_code, mach_port_t tty)
ILL_RPC (S_proc_getnports_reply,
@@ -1973,7 +1973,7 @@ gnu_nat_target::resume (ptid_t ptid, int step, enum gdb_signal sig)
struct inf *inf = gnu_current_inf;
inf_debug (inf, "ptid = %s, step = %d, sig = %d",
- target_pid_to_str (ptid).c_str (), step, sig);
+ ptid.to_string ().c_str (), step, sig);
inf_validate_procinfo (inf);
@@ -2021,7 +2021,7 @@ gnu_nat_target::resume (ptid_t ptid, int step, enum gdb_signal sig)
error (_("Can't run single thread id %s: no such thread!"),
target_pid_to_str (ptid).c_str ());
inf_debug (inf, "running one thread: %s",
- target_pid_to_str (ptid).c_str ());
+ ptid.to_string ().c_str ());
inf_set_threads_resume_sc (inf, thread, 0);
}
@@ -2033,7 +2033,7 @@ gnu_nat_target::resume (ptid_t ptid, int step, enum gdb_signal sig)
target_pid_to_str (ptid).c_str ());
else
inf_debug (inf, "stepping thread: %s",
- target_pid_to_str (ptid).c_str ());
+ ptid.to_string ().c_str ());
}
if (step_thread != inf->step_thread)
inf_set_step_thread (inf, step_thread);
@@ -2775,10 +2775,10 @@ show_task_pause_cmd (const char *args, int from_tty)
struct inf *inf = cur_inf ();
check_empty (args, "show task pause");
- printf_filtered ("The inferior task %s suspended while gdb has control.\n",
- inf->task
- ? (inf->pause_sc == 0 ? "isn't" : "is")
- : (inf->pause_sc == 0 ? "won't be" : "will be"));
+ gdb_printf ("The inferior task %s suspended while gdb has control.\n",
+ inf->task
+ ? (inf->pause_sc == 0 ? "isn't" : "is")
+ : (inf->pause_sc == 0 ? "won't be" : "will be"));
}
static void
@@ -2792,9 +2792,9 @@ static void
show_task_detach_sc_cmd (const char *args, int from_tty)
{
check_empty (args, "show task detach-suspend-count");
- printf_filtered ("The inferior task will be left with a "
- "suspend count of %d when detaching.\n",
- cur_inf ()->detach_sc);
+ gdb_printf ("The inferior task will be left with a "
+ "suspend count of %d when detaching.\n",
+ cur_inf ()->detach_sc);
}
@@ -2814,9 +2814,9 @@ show_thread_default_pause_cmd (const char *args, int from_tty)
int sc = inf->default_thread_pause_sc;
check_empty (args, "show thread default pause");
- printf_filtered ("New threads %s suspended while gdb has control%s.\n",
- sc ? "are" : "aren't",
- !sc && inf->pause_sc ? " (but the task is)" : "");
+ gdb_printf ("New threads %s suspended while gdb has control%s.\n",
+ sc ? "are" : "aren't",
+ !sc && inf->pause_sc ? " (but the task is)" : "");
}
static void
@@ -2834,8 +2834,8 @@ show_thread_default_run_cmd (const char *args, int from_tty)
struct inf *inf = cur_inf ();
check_empty (args, "show thread default run");
- printf_filtered ("New threads %s allowed to run.\n",
- inf->default_thread_run_sc == 0 ? "are" : "aren't");
+ gdb_printf ("New threads %s allowed to run.\n",
+ inf->default_thread_run_sc == 0 ? "are" : "aren't");
}
static void
@@ -2849,8 +2849,8 @@ static void
show_thread_default_detach_sc_cmd (const char *args, int from_tty)
{
check_empty (args, "show thread default detach-suspend-count");
- printf_filtered ("New threads will get a detach-suspend-count of %d.\n",
- cur_inf ()->default_thread_detach_sc);
+ gdb_printf ("New threads will get a detach-suspend-count of %d.\n",
+ cur_inf ()->default_thread_detach_sc);
}
@@ -2913,8 +2913,8 @@ show_stopped_cmd (const char *args, int from_tty)
struct inf *inf = active_inf ();
check_empty (args, "show stopped");
- printf_filtered ("The inferior process %s stopped.\n",
- inf->stopped ? "is" : "isn't");
+ gdb_printf ("The inferior process %s stopped.\n",
+ inf->stopped ? "is" : "isn't");
}
static void
@@ -2942,10 +2942,10 @@ show_sig_thread_cmd (const char *args, int from_tty)
check_empty (args, "show signal-thread");
if (inf->signal_thread)
- printf_filtered ("The signal thread is %s.\n",
- proc_string (inf->signal_thread));
+ gdb_printf ("The signal thread is %s.\n",
+ proc_string (inf->signal_thread));
else
- printf_filtered ("There is no signal thread.\n");
+ gdb_printf ("There is no signal thread.\n");
}
@@ -2973,10 +2973,10 @@ show_signals_cmd (const char *args, int from_tty)
struct inf *inf = cur_inf ();
check_empty (args, "show signals");
- printf_filtered ("The inferior process's signals %s intercepted.\n",
- inf->task
- ? (inf->traced ? "are" : "aren't")
- : (inf->want_signals ? "will be" : "won't be"));
+ gdb_printf ("The inferior process's signals %s intercepted.\n",
+ inf->task
+ ? (inf->traced ? "are" : "aren't")
+ : (inf->want_signals ? "will be" : "won't be"));
}
static void
@@ -3002,18 +3002,18 @@ show_exceptions_cmd (const char *args, int from_tty)
struct inf *inf = cur_inf ();
check_empty (args, "show exceptions");
- printf_filtered ("Exceptions in the inferior %s trapped.\n",
- inf->task
- ? (inf->want_exceptions ? "are" : "aren't")
- : (inf->want_exceptions ? "will be" : "won't be"));
+ gdb_printf ("Exceptions in the inferior %s trapped.\n",
+ inf->task
+ ? (inf->want_exceptions ? "are" : "aren't")
+ : (inf->want_exceptions ? "will be" : "won't be"));
}
static void
set_task_cmd (const char *args, int from_tty)
{
- printf_filtered ("\"set task\" must be followed by the name"
- " of a task property.\n");
+ gdb_printf ("\"set task\" must be followed by the name"
+ " of a task property.\n");
}
static void
@@ -3277,10 +3277,10 @@ show_thread_pause_cmd (const char *args, int from_tty)
int sc = thread->pause_sc;
check_empty (args, "show task pause");
- printf_filtered ("Thread %s %s suspended while gdb has control%s.\n",
- proc_string (thread),
- sc ? "is" : "isn't",
- !sc && thread->inf->pause_sc ? " (but the task is)" : "");
+ gdb_printf ("Thread %s %s suspended while gdb has control%s.\n",
+ proc_string (thread),
+ sc ? "is" : "isn't",
+ !sc && thread->inf->pause_sc ? " (but the task is)" : "");
}
static void
@@ -3297,9 +3297,9 @@ show_thread_run_cmd (const char *args, int from_tty)
struct proc *thread = cur_thread ();
check_empty (args, "show thread run");
- printf_filtered ("Thread %s %s allowed to run.",
- proc_string (thread),
- thread->run_sc == 0 ? "is" : "isn't");
+ gdb_printf ("Thread %s %s allowed to run.",
+ proc_string (thread),
+ thread->run_sc == 0 ? "is" : "isn't");
}
static void
@@ -3315,10 +3315,10 @@ show_thread_detach_sc_cmd (const char *args, int from_tty)
struct proc *thread = cur_thread ();
check_empty (args, "show thread detach-suspend-count");
- printf_filtered ("Thread %s will be left with a suspend count"
- " of %d when detaching.\n",
- proc_string (thread),
- thread->detach_sc);
+ gdb_printf ("Thread %s will be left with a suspend count"
+ " of %d when detaching.\n",
+ proc_string (thread),
+ thread->detach_sc);
}
static void
@@ -3360,7 +3360,7 @@ thread_takeover_sc_cmd (const char *args, int from_tty)
error (("%s."), safe_strerror (err));
thread->sc = info->suspend_count;
if (from_tty)
- printf_filtered ("Suspend count was %d.\n", thread->sc);
+ gdb_printf ("Suspend count was %d.\n", thread->sc);
if (info != &_info)
vm_deallocate (mach_task_self (), (vm_address_t) info,
info_len * sizeof (int));
diff --git a/gdb/gnu-nat.h b/gdb/gnu-nat.h
index 628ef5aae7e..c4ea1340522 100644
--- a/gdb/gnu-nat.h
+++ b/gdb/gnu-nat.h
@@ -109,8 +109,8 @@ extern bool gnu_debug_flag;
#define debug(msg, args...) \
do { if (gnu_debug_flag) \
- fprintf_unfiltered (gdb_stdlog, "%s:%d: " msg "\r\n", \
- __FILE__ , __LINE__ , ##args); } while (0)
+ gdb_printf (gdb_stdlog, "%s:%d: " msg "\r\n", \
+ __FILE__ , __LINE__ , ##args); } while (0)
/* A prototype generic GNU/Hurd target. The client can override it
with local methods. */
diff --git a/gdb/gnu-v3-abi.c b/gdb/gnu-v3-abi.c
index 270a8b4b46f..7aac0ca4f9c 100644
--- a/gdb/gnu-v3-abi.c
+++ b/gdb/gnu-v3-abi.c
@@ -483,7 +483,7 @@ gnuv3_baseclass_offset (struct type *type, int index,
CORE_ADDR result;
if (dwarf2_evaluate_property (&prop, nullptr, &addr_stack, &result,
- true))
+ {addr_stack.addr}))
return (int) (result - addr_stack.addr);
}
@@ -623,7 +623,7 @@ gnuv3_print_method_ptr (const gdb_byte *contents,
/* Check for NULL. */
if (ptr_value == 0 && vbit == 0)
{
- fprintf_filtered (stream, "NULL");
+ gdb_printf (stream, "NULL");
return;
}
@@ -647,26 +647,26 @@ gnuv3_print_method_ptr (const gdb_byte *contents,
gdb::unique_xmalloc_ptr<char> demangled_name
= gdb_demangle (physname, DMGL_ANSI | DMGL_PARAMS);
- fprintf_filtered (stream, "&virtual ");
+ gdb_printf (stream, "&virtual ");
if (demangled_name == NULL)
- fputs_filtered (physname, stream);
+ gdb_puts (physname, stream);
else
- fputs_filtered (demangled_name.get (), stream);
+ gdb_puts (demangled_name.get (), stream);
return;
}
}
else if (ptr_value != 0)
{
/* Found a non-virtual function: print out the type. */
- fputs_filtered ("(", stream);
+ gdb_puts ("(", stream);
c_print_type (type, "", stream, -1, 0, &type_print_raw_options);
- fputs_filtered (") ", stream);
+ gdb_puts (") ", stream);
}
/* We didn't find it; print the raw data. */
if (vbit)
{
- fprintf_filtered (stream, "&virtual table offset ");
+ gdb_printf (stream, "&virtual table offset ");
print_longest (stream, 'd', 1, ptr_value);
}
else
@@ -679,7 +679,7 @@ gnuv3_print_method_ptr (const gdb_byte *contents,
if (adjustment)
{
- fprintf_filtered (stream, ", this adjustment ");
+ gdb_printf (stream, ", this adjustment ");
print_longest (stream, 'd', 1, adjustment);
}
}
@@ -907,11 +907,11 @@ print_one_vtable (struct gdbarch *gdbarch, struct value *value,
vt_addr = value_address (value_field (vtable,
vtable_field_virtual_functions));
- printf_filtered (_("vtable for '%s' @ %s (subobject @ %s):\n"),
- TYPE_SAFE_NAME (type),
- paddress (gdbarch, vt_addr),
- paddress (gdbarch, (value_address (value)
- + value_embedded_offset (value))));
+ gdb_printf (_("vtable for '%s' @ %s (subobject @ %s):\n"),
+ TYPE_SAFE_NAME (type),
+ paddress (gdbarch, vt_addr),
+ paddress (gdbarch, (value_address (value)
+ + value_embedded_offset (value))));
for (i = 0; i <= max_voffset; ++i)
{
@@ -920,7 +920,7 @@ print_one_vtable (struct gdbarch *gdbarch, struct value *value,
int got_error = 0;
struct value *vfn;
- printf_filtered ("[%d]: ", i);
+ gdb_printf ("[%d]: ", i);
vfn = value_subscript (value_field (vtable,
vtable_field_virtual_functions),
@@ -942,7 +942,7 @@ print_one_vtable (struct gdbarch *gdbarch, struct value *value,
if (!got_error)
print_function_pointer_address (opts, gdbarch, addr, gdb_stdout);
- printf_filtered ("\n");
+ gdb_printf ("\n");
}
}
@@ -983,7 +983,7 @@ gnuv3_print_vtable (struct value *value)
if (!vtable)
{
- printf_filtered (_("This object does not have a virtual function table\n"));
+ gdb_printf (_("This object does not have a virtual function table\n"));
return;
}
@@ -1002,7 +1002,7 @@ gnuv3_print_vtable (struct value *value)
if (iter->max_voffset >= 0)
{
if (count > 0)
- printf_filtered ("\n");
+ gdb_printf ("\n");
print_one_vtable (gdbarch, iter->value, iter->max_voffset, &opts);
++count;
}
@@ -1071,7 +1071,7 @@ gnuv3_get_typeid_type (struct gdbarch *gdbarch)
typeinfo_type
= (struct type *) gdbarch_data (gdbarch, std_type_info_gdbarch_data);
else
- typeinfo_type = SYMBOL_TYPE (typeinfo);
+ typeinfo_type = typeinfo->type ();
return typeinfo_type;
}
@@ -1146,7 +1146,7 @@ gnuv3_get_typeid (struct value *value)
if (minsym.minsym == NULL)
error (_("could not find typeinfo symbol for '%s'"), name);
- result = value_at_lazy (typeinfo_type, BMSYMBOL_VALUE_ADDRESS (minsym));
+ result = value_at_lazy (typeinfo_type, minsym.value_address ());
}
return result;
@@ -1235,7 +1235,7 @@ gnuv3_skip_trampoline (struct frame_info *frame, CORE_ADDR stop_pc)
if (fn_sym.minsym == NULL)
return 0;
- method_stop_pc = BMSYMBOL_VALUE_ADDRESS (fn_sym);
+ method_stop_pc = fn_sym.value_address ();
/* Some targets have minimal symbols pointing to function descriptors
(powerpc 64 for example). Make sure to retrieve the address
diff --git a/gdb/go-exp.y b/gdb/go-exp.y
index 359af226056..1b9b6ea7e90 100644
--- a/gdb/go-exp.y
+++ b/gdb/go-exp.y
@@ -545,7 +545,7 @@ variable: name_not_typename ENTRY
{ struct symbol *sym = $1.sym.symbol;
if (sym == NULL
- || !SYMBOL_IS_ARGUMENT (sym)
+ || !sym->is_argument ()
|| !symbol_read_needs_frame (sym))
error (_("@entry can be used only for function "
"parameters, not for \"%s\""),
@@ -647,10 +647,8 @@ static int
parse_number (struct parser_state *par_state,
const char *p, int len, int parsed_float, YYSTYPE *putithere)
{
- /* FIXME: Shouldn't these be unsigned? We don't deal with negative values
- here, and we do kind of silly things like cast to unsigned. */
- LONGEST n = 0;
- LONGEST prevn = 0;
+ ULONGEST n = 0;
+ ULONGEST prevn = 0;
ULONGEST un;
int i = 0;
@@ -702,7 +700,7 @@ parse_number (struct parser_state *par_state,
}
/* Handle base-switching prefixes 0x, 0t, 0d, 0. */
- if (p[0] == '0')
+ if (p[0] == '0' && len > 1)
switch (p[1])
{
case 'x':
@@ -790,7 +788,7 @@ parse_number (struct parser_state *par_state,
on 0x123456789 when LONGEST is 32 bits. */
if (c != 'l' && c != 'u' && n != 0)
{
- if ((unsigned_p && (ULONGEST) prevn >= (ULONGEST) n))
+ if ((unsigned_p && prevn >= n))
error (_("Numeric constant too large."));
}
prevn = n;
@@ -808,7 +806,7 @@ parse_number (struct parser_state *par_state,
the case where it is we just always shift the value more than
once, with fewer bits each time. */
- un = (ULONGEST)n >> 2;
+ un = n >> 2;
if (long_p == 0
&& (un >> (gdbarch_int_bit (par_state->gdbarch ()) - 2)) == 0)
{
@@ -1338,8 +1336,8 @@ package_name_p (const char *name, const struct block *block)
sym = lookup_symbol (name, block, STRUCT_DOMAIN, &is_a_field_of_this).symbol;
if (sym
- && SYMBOL_CLASS (sym) == LOC_TYPEDEF
- && SYMBOL_TYPE (sym)->code () == TYPE_CODE_MODULE)
+ && sym->aclass () == LOC_TYPEDEF
+ && sym->type ()->code () == TYPE_CODE_MODULE)
return 1;
return 0;
diff --git a/gdb/go-lang.c b/gdb/go-lang.c
index d0c6188cb0b..844f743e83d 100644
--- a/gdb/go-lang.c
+++ b/gdb/go-lang.c
@@ -32,7 +32,7 @@
*/
#include "defs.h"
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
#include "block.h"
#include "symtab.h"
#include "language.h"
@@ -418,7 +418,7 @@ go_block_package_name (const struct block *block)
{
while (block != NULL)
{
- struct symbol *function = BLOCK_FUNCTION (block);
+ struct symbol *function = block->function ();
if (function != NULL)
{
@@ -433,7 +433,7 @@ go_block_package_name (const struct block *block)
return NULL;
}
- block = BLOCK_SUPERBLOCK (block);
+ block = block->superblock ();
}
return NULL;
diff --git a/gdb/go-typeprint.c b/gdb/go-typeprint.c
index 0a463871546..f8f155fbb64 100644
--- a/gdb/go-typeprint.c
+++ b/gdb/go-typeprint.c
@@ -54,7 +54,7 @@ go_language::print_type (struct type *type, const char *varstring,
if (type->code () == TYPE_CODE_ARRAY
&& TYPE_TARGET_TYPE (type)->code () == TYPE_CODE_CHAR)
{
- fputs_filtered ("string", stream);
+ gdb_puts ("string", stream);
return;
}
diff --git a/gdb/go-valprint.c b/gdb/go-valprint.c
index 32bb6790cba..45bd529ba95 100644
--- a/gdb/go-valprint.c
+++ b/gdb/go-valprint.c
@@ -66,15 +66,15 @@ print_go_string (struct type *type,
/* TODO(dje): Print address of struct or actual string? */
if (options->addressprint)
{
- fputs_filtered (paddress (gdbarch, addr), stream);
- fputs_filtered (" ", stream);
+ gdb_puts (paddress (gdbarch, addr), stream);
+ gdb_puts (" ", stream);
}
if (length < 0)
{
- printf_filtered (_("<invalid length: %ps>"),
- styled_string (metadata_style.style (),
- plongest (addr)));
+ gdb_printf (_("<invalid length: %ps>"),
+ styled_string (metadata_style.style (),
+ plongest (addr)));
return;
}
diff --git a/gdb/go32-nat.c b/gdb/go32-nat.c
index 91fae3dd7f4..475425d9f3b 100644
--- a/gdb/go32-nat.c
+++ b/gdb/go32-nat.c
@@ -663,7 +663,7 @@ static cmdline_t child_cmd; /* Parsed child's command line kept here. */
void
go32_nat_target::files_info ()
{
- printf_filtered ("You are running a DJGPP V2 program.\n");
+ gdb_printf ("You are running a DJGPP V2 program.\n");
}
void
@@ -899,9 +899,9 @@ go32_nat_target::terminal_init ()
void
go32_nat_target::terminal_info (const char *args, int from_tty)
{
- printf_filtered ("Inferior's terminal is in %s mode.\n",
- !inf_mode_valid
- ? "default" : inf_terminal_mode ? "raw" : "cooked");
+ gdb_printf ("Inferior's terminal is in %s mode.\n",
+ !inf_mode_valid
+ ? "default" : inf_terminal_mode ? "raw" : "cooked");
#if __DJGPP_MINOR__ > 2
if (child_cmd.redirection)
@@ -911,15 +911,15 @@ go32_nat_target::terminal_info (const char *args, int from_tty)
for (i = 0; i < DBG_HANDLES; i++)
{
if (child_cmd.redirection[i]->file_name)
- printf_filtered ("\tFile handle %d is redirected to `%s'.\n",
- i, child_cmd.redirection[i]->file_name);
+ gdb_printf ("\tFile handle %d is redirected to `%s'.\n",
+ i, child_cmd.redirection[i]->file_name);
else if (_get_dev_info (child_cmd.redirection[i]->inf_handle) == -1)
- printf_filtered
+ gdb_printf
("\tFile handle %d appears to be closed by inferior.\n", i);
/* Mask off the raw/cooked bit when comparing device info words. */
else if ((_get_dev_info (child_cmd.redirection[i]->inf_handle) & 0xdf)
!= (_get_dev_info (i) & 0xdf))
- printf_filtered
+ gdb_printf
("\tFile handle %d appears to be redirected by inferior.\n", i);
}
}
@@ -1060,16 +1060,16 @@ print_mem (unsigned long datum, const char *header, int in_pages_p)
{
if (in_pages_p)
datum <<= 12;
- puts_filtered (header);
+ gdb_puts (header);
if (datum > 1024)
{
- printf_filtered ("%lu KB", datum >> 10);
+ gdb_printf ("%lu KB", datum >> 10);
if (datum > 1024 * 1024)
- printf_filtered (" (%lu MB)", datum >> 20);
+ gdb_printf (" (%lu MB)", datum >> 20);
}
else
- printf_filtered ("%lu Bytes", datum);
- puts_filtered ("\n");
+ gdb_printf ("%lu Bytes", datum);
+ gdb_puts ("\n");
}
}
@@ -1134,10 +1134,10 @@ go32_sysinfo (const char *arg, int from_tty)
#endif
}
- printf_filtered ("CPU Type.......................%s", u.machine);
+ gdb_printf ("CPU Type.......................%s", u.machine);
if (cpuid_vendor[0])
- printf_filtered (" (%s)", cpuid_vendor);
- puts_filtered ("\n");
+ gdb_printf (" (%s)", cpuid_vendor);
+ gdb_puts ("\n");
/* CPUID with EAX = 1 returns processor signature and features. */
if (cpuid_max >= 1)
@@ -1257,52 +1257,52 @@ go32_sysinfo (const char *arg, int from_tty)
xsnprintf (cpu_string, sizeof (cpu_string), "%s%s Model %d Stepping %d",
intel_p ? "Pentium" : (amd_p ? "AMD" : (hygon_p ? "Hygon" : "ix86")),
cpu_brand, cpu_model, cpuid_eax & 0xf);
- printf_filtered ("%*s%s\n", 31, "", cpu_string);
+ gdb_printf ("%*s%s\n", 31, "", cpu_string);
if (((cpuid_edx & (6 | (0x0d << 23))) != 0)
|| ((cpuid_edx & 1) == 0)
|| ((amd_p || hygon_p) && (cpuid_edx & (3 << 30)) != 0))
{
- puts_filtered ("CPU Features...................");
+ gdb_puts ("CPU Features...................");
/* We only list features which might be useful in the DPMI
environment. */
if ((cpuid_edx & 1) == 0)
- puts_filtered ("No FPU "); /* It's unusual to not have an FPU. */
+ gdb_puts ("No FPU "); /* It's unusual to not have an FPU. */
if ((cpuid_edx & (1 << 1)) != 0)
- puts_filtered ("VME ");
+ gdb_puts ("VME ");
if ((cpuid_edx & (1 << 2)) != 0)
- puts_filtered ("DE ");
+ gdb_puts ("DE ");
if ((cpuid_edx & (1 << 4)) != 0)
- puts_filtered ("TSC ");
+ gdb_puts ("TSC ");
if ((cpuid_edx & (1 << 23)) != 0)
- puts_filtered ("MMX ");
+ gdb_puts ("MMX ");
if ((cpuid_edx & (1 << 25)) != 0)
- puts_filtered ("SSE ");
+ gdb_puts ("SSE ");
if ((cpuid_edx & (1 << 26)) != 0)
- puts_filtered ("SSE2 ");
+ gdb_puts ("SSE2 ");
if (amd_p || hygon_p)
{
if ((cpuid_edx & (1 << 31)) != 0)
- puts_filtered ("3DNow! ");
+ gdb_puts ("3DNow! ");
if ((cpuid_edx & (1 << 30)) != 0)
- puts_filtered ("3DNow!Ext");
+ gdb_puts ("3DNow!Ext");
}
- puts_filtered ("\n");
+ gdb_puts ("\n");
}
}
- puts_filtered ("\n");
- printf_filtered ("DOS Version....................%s %s.%s",
- _os_flavor, u.release, u.version);
+ gdb_puts ("\n");
+ gdb_printf ("DOS Version....................%s %s.%s",
+ _os_flavor, u.release, u.version);
if (true_dos_version != advertized_dos_version)
- printf_filtered (" (disguised as v%d.%d)", _osmajor, _osminor);
- puts_filtered ("\n");
+ gdb_printf (" (disguised as v%d.%d)", _osmajor, _osminor);
+ gdb_puts ("\n");
if (!windows_major)
go32_get_windows_version ();
if (windows_major != 0xff)
{
const char *windows_flavor;
- printf_filtered ("Windows Version................%d.%02d (Windows ",
- windows_major, windows_minor);
+ gdb_printf ("Windows Version................%d.%02d (Windows ",
+ windows_major, windows_minor);
switch (windows_major)
{
case 3:
@@ -1332,12 +1332,12 @@ go32_sysinfo (const char *arg, int from_tty)
windows_flavor = "??";
break;
}
- printf_filtered ("%s)\n", windows_flavor);
+ gdb_printf ("%s)\n", windows_flavor);
}
else if (true_dos_version == 0x532 && advertized_dos_version == 0x500)
- printf_filtered ("Windows Version................"
- "Windows NT family (W2K/XP/W2K3/Vista/W2K8)\n");
- puts_filtered ("\n");
+ gdb_printf ("Windows Version................"
+ "Windows NT family (W2K/XP/W2K3/Vista/W2K8)\n");
+ gdb_puts ("\n");
/* On some versions of Windows, __dpmi_get_capabilities returns
zero, but the buffer is not filled with info, so we fill the
buffer with a known pattern and test for it afterwards. */
@@ -1352,39 +1352,39 @@ go32_sysinfo (const char *arg, int from_tty)
I don't trust the vendors to follow that... */
if (!memchr (&dpmi_vendor_info[2], 0, 126))
dpmi_vendor_info[128] = '\0';
- printf_filtered ("DPMI Host......................"
- "%s v%d.%d (capabilities: %#x)\n",
- &dpmi_vendor_info[2],
- (unsigned)dpmi_vendor_info[0],
- (unsigned)dpmi_vendor_info[1],
- ((unsigned)dpmi_flags & 0x7f));
+ gdb_printf ("DPMI Host......................"
+ "%s v%d.%d (capabilities: %#x)\n",
+ &dpmi_vendor_info[2],
+ (unsigned)dpmi_vendor_info[0],
+ (unsigned)dpmi_vendor_info[1],
+ ((unsigned)dpmi_flags & 0x7f));
}
else
- printf_filtered ("DPMI Host......................(Info not available)\n");
+ gdb_printf ("DPMI Host......................(Info not available)\n");
__dpmi_get_version (&dpmi_version_data);
- printf_filtered ("DPMI Version...................%d.%02d\n",
- dpmi_version_data.major, dpmi_version_data.minor);
- printf_filtered ("DPMI Info......................"
- "%s-bit DPMI, with%s Virtual Memory support\n",
- (dpmi_version_data.flags & 1) ? "32" : "16",
- (dpmi_version_data.flags & 4) ? "" : "out");
- printf_filtered ("%*sInterrupts reflected to %s mode\n", 31, "",
- (dpmi_version_data.flags & 2) ? "V86" : "Real");
- printf_filtered ("%*sProcessor type: i%d86\n", 31, "",
- dpmi_version_data.cpu);
- printf_filtered ("%*sPIC base interrupt: Master: %#x Slave: %#x\n", 31, "",
- dpmi_version_data.master_pic, dpmi_version_data.slave_pic);
+ gdb_printf ("DPMI Version...................%d.%02d\n",
+ dpmi_version_data.major, dpmi_version_data.minor);
+ gdb_printf ("DPMI Info......................"
+ "%s-bit DPMI, with%s Virtual Memory support\n",
+ (dpmi_version_data.flags & 1) ? "32" : "16",
+ (dpmi_version_data.flags & 4) ? "" : "out");
+ gdb_printf ("%*sInterrupts reflected to %s mode\n", 31, "",
+ (dpmi_version_data.flags & 2) ? "V86" : "Real");
+ gdb_printf ("%*sProcessor type: i%d86\n", 31, "",
+ dpmi_version_data.cpu);
+ gdb_printf ("%*sPIC base interrupt: Master: %#x Slave: %#x\n", 31, "",
+ dpmi_version_data.master_pic, dpmi_version_data.slave_pic);
/* a_tss is only initialized when the debuggee is first run. */
if (prog_has_started)
{
__asm__ __volatile__ ("pushfl ; popl %0" : "=g" (eflags));
- printf_filtered ("Protection....................."
- "Ring %d (in %s), with%s I/O protection\n",
- a_tss.tss_cs & 3, (a_tss.tss_cs & 4) ? "LDT" : "GDT",
- (a_tss.tss_cs & 3) > ((eflags >> 12) & 3) ? "" : "out");
+ gdb_printf ("Protection....................."
+ "Ring %d (in %s), with%s I/O protection\n",
+ a_tss.tss_cs & 3, (a_tss.tss_cs & 4) ? "LDT" : "GDT",
+ (a_tss.tss_cs & 3) > ((eflags >> 12) & 3) ? "" : "out");
}
- puts_filtered ("\n");
+ gdb_puts ("\n");
__dpmi_get_free_memory_information (&mem_info);
print_mem (mem_info.total_number_of_physical_pages,
"DPMI Total Physical Memory.....", 1);
@@ -1420,14 +1420,14 @@ go32_sysinfo (const char *arg, int from_tty)
hilo_idx = 0;
if (fit_idx > 2)
fit_idx = 0;
- printf_filtered ("DOS Memory Allocation..........%s memory, %s fit\n",
- dos_hilo[hilo_idx], dos_fit[fit_idx]);
+ gdb_printf ("DOS Memory Allocation..........%s memory, %s fit\n",
+ dos_hilo[hilo_idx], dos_fit[fit_idx]);
regs.x.ax = 0x5802;
__dpmi_int (0x21, &regs);
if ((regs.x.flags & 1) != 0)
regs.h.al = 0;
- printf_filtered ("%*sUMBs %sin DOS memory chain\n", 31, "",
- regs.h.al == 0 ? "not " : "");
+ gdb_printf ("%*sUMBs %sin DOS memory chain\n", 31, "",
+ regs.h.al == 0 ? "not " : "");
}
}
@@ -1542,7 +1542,7 @@ display_descriptor (unsigned type, unsigned long base_addr, int idx, int force)
/* Get the descriptor from the table. */
if (idx == 0 && type == 0)
- puts_filtered ("0x000: null descriptor\n");
+ gdb_puts ("0x000: null descriptor\n");
else if (get_descriptor (base_addr, idx, &descr) != -1)
{
/* For each type of descriptor table, this has a bit set if the
@@ -1561,65 +1561,65 @@ display_descriptor (unsigned type, unsigned long base_addr, int idx, int force)
if (descr.present
&& (allowed_descriptors[type] & (1 << descr.stype)) != 0)
{
- printf_filtered ("0x%03x: ",
- type == 1
- ? idx : (idx * 8) | (type ? (cpl | 4) : 0));
+ gdb_printf ("0x%03x: ",
+ type == 1
+ ? idx : (idx * 8) | (type ? (cpl | 4) : 0));
if (descr.page_granular)
limit = (limit << 12) | 0xfff; /* big segment: low 12 bit set */
if (descr.stype == 1 || descr.stype == 2 || descr.stype == 3
|| descr.stype == 9 || descr.stype == 11
|| (descr.stype >= 16 && descr.stype < 32))
- printf_filtered ("base=0x%02x%02x%04x limit=0x%08lx",
- descr.base2, descr.base1, descr.base0, limit);
+ gdb_printf ("base=0x%02x%02x%04x limit=0x%08lx",
+ descr.base2, descr.base1, descr.base0, limit);
switch (descr.stype)
{
case 1:
case 3:
- printf_filtered (" 16-bit TSS (task %sactive)",
- descr.stype == 3 ? "" : "in");
+ gdb_printf (" 16-bit TSS (task %sactive)",
+ descr.stype == 3 ? "" : "in");
break;
case 2:
- puts_filtered (" LDT");
+ gdb_puts (" LDT");
break;
case 4:
memcpy (&gate, &descr, sizeof gate);
- printf_filtered ("selector=0x%04x offs=0x%04x%04x",
- gate.selector, gate.offset1, gate.offset0);
- printf_filtered (" 16-bit Call Gate (params=%d)",
- gate.param_count);
+ gdb_printf ("selector=0x%04x offs=0x%04x%04x",
+ gate.selector, gate.offset1, gate.offset0);
+ gdb_printf (" 16-bit Call Gate (params=%d)",
+ gate.param_count);
break;
case 5:
- printf_filtered ("TSS selector=0x%04x", descr.base0);
- printf_filtered ("%*sTask Gate", 16, "");
+ gdb_printf ("TSS selector=0x%04x", descr.base0);
+ gdb_printf ("%*sTask Gate", 16, "");
break;
case 6:
case 7:
memcpy (&gate, &descr, sizeof gate);
- printf_filtered ("selector=0x%04x offs=0x%04x%04x",
- gate.selector, gate.offset1, gate.offset0);
- printf_filtered (" 16-bit %s Gate",
- descr.stype == 6 ? "Interrupt" : "Trap");
+ gdb_printf ("selector=0x%04x offs=0x%04x%04x",
+ gate.selector, gate.offset1, gate.offset0);
+ gdb_printf (" 16-bit %s Gate",
+ descr.stype == 6 ? "Interrupt" : "Trap");
break;
case 9:
case 11:
- printf_filtered (" 32-bit TSS (task %sactive)",
- descr.stype == 3 ? "" : "in");
+ gdb_printf (" 32-bit TSS (task %sactive)",
+ descr.stype == 3 ? "" : "in");
break;
case 12:
memcpy (&gate, &descr, sizeof gate);
- printf_filtered ("selector=0x%04x offs=0x%04x%04x",
- gate.selector, gate.offset1, gate.offset0);
- printf_filtered (" 32-bit Call Gate (params=%d)",
- gate.param_count);
+ gdb_printf ("selector=0x%04x offs=0x%04x%04x",
+ gate.selector, gate.offset1, gate.offset0);
+ gdb_printf (" 32-bit Call Gate (params=%d)",
+ gate.param_count);
break;
case 14:
case 15:
memcpy (&gate, &descr, sizeof gate);
- printf_filtered ("selector=0x%04x offs=0x%04x%04x",
- gate.selector, gate.offset1, gate.offset0);
- printf_filtered (" 32-bit %s Gate",
- descr.stype == 14 ? "Interrupt" : "Trap");
+ gdb_printf ("selector=0x%04x offs=0x%04x%04x",
+ gate.selector, gate.offset1, gate.offset0);
+ gdb_printf (" 32-bit %s Gate",
+ descr.stype == 14 ? "Interrupt" : "Trap");
break;
case 16: /* data segments */
case 17:
@@ -1629,12 +1629,12 @@ display_descriptor (unsigned type, unsigned long base_addr, int idx, int force)
case 21:
case 22:
case 23:
- printf_filtered (" %s-bit Data (%s Exp-%s%s)",
- descr.bit32 ? "32" : "16",
- descr.stype & 2
- ? "Read/Write," : "Read-Only, ",
- descr.stype & 4 ? "down" : "up",
- descr.stype & 1 ? "" : ", N.Acc");
+ gdb_printf (" %s-bit Data (%s Exp-%s%s)",
+ descr.bit32 ? "32" : "16",
+ descr.stype & 2
+ ? "Read/Write," : "Read-Only, ",
+ descr.stype & 4 ? "down" : "up",
+ descr.stype & 1 ? "" : ", N.Acc");
break;
case 24: /* code segments */
case 25:
@@ -1644,32 +1644,32 @@ display_descriptor (unsigned type, unsigned long base_addr, int idx, int force)
case 29:
case 30:
case 31:
- printf_filtered (" %s-bit Code (%s, %sConf%s)",
- descr.bit32 ? "32" : "16",
- descr.stype & 2 ? "Exec/Read" : "Exec-Only",
- descr.stype & 4 ? "" : "N.",
- descr.stype & 1 ? "" : ", N.Acc");
+ gdb_printf (" %s-bit Code (%s, %sConf%s)",
+ descr.bit32 ? "32" : "16",
+ descr.stype & 2 ? "Exec/Read" : "Exec-Only",
+ descr.stype & 4 ? "" : "N.",
+ descr.stype & 1 ? "" : ", N.Acc");
break;
default:
- printf_filtered ("Unknown type 0x%02x", descr.stype);
+ gdb_printf ("Unknown type 0x%02x", descr.stype);
break;
}
- puts_filtered ("\n");
+ gdb_puts ("\n");
}
else if (force)
{
- printf_filtered ("0x%03x: ",
- type == 1
- ? idx : (idx * 8) | (type ? (cpl | 4) : 0));
+ gdb_printf ("0x%03x: ",
+ type == 1
+ ? idx : (idx * 8) | (type ? (cpl | 4) : 0));
if (!descr.present)
- puts_filtered ("Segment not present\n");
+ gdb_puts ("Segment not present\n");
else
- printf_filtered ("Segment type 0x%02x is invalid in this table\n",
- descr.stype);
+ gdb_printf ("Segment type 0x%02x is invalid in this table\n",
+ descr.stype);
}
}
else if (force)
- printf_filtered ("0x%03x: Cannot read this descriptor\n", idx);
+ gdb_printf ("0x%03x: Cannot read this descriptor\n", idx);
}
static void
@@ -1700,13 +1700,13 @@ go32_sldt (const char *arg, int from_tty)
__asm__ __volatile__ ("sldt %0" : "=m" (ldtr) : /* no inputs */ );
ldt_idx = ldtr / 8;
if (ldt_idx == 0)
- puts_filtered ("There is no LDT.\n");
+ gdb_puts ("There is no LDT.\n");
/* LDT's entry in the GDT must have the type LDT, which is 2. */
else if (get_descriptor (gdtr.base, ldt_idx, &ldt_descr) != 2)
- printf_filtered ("LDT is present (at %#x), but unreadable by GDB.\n",
- ldt_descr.base0
- | (ldt_descr.base1 << 16)
- | (ldt_descr.base2 << 24));
+ gdb_printf ("LDT is present (at %#x), but unreadable by GDB.\n",
+ ldt_descr.base0
+ | (ldt_descr.base1 << 16)
+ | (ldt_descr.base2 << 24));
else
{
unsigned base =
@@ -1939,23 +1939,23 @@ display_ptable_entry (unsigned long entry, int is_dir, int force, unsigned off)
{
if ((entry & 1) != 0)
{
- printf_filtered ("Base=0x%05lx000", entry >> 12);
+ gdb_printf ("Base=0x%05lx000", entry >> 12);
if ((entry & 0x100) && !is_dir)
- puts_filtered (" Global");
+ gdb_puts (" Global");
if ((entry & 0x40) && !is_dir)
- puts_filtered (" Dirty");
- printf_filtered (" %sAcc.", (entry & 0x20) ? "" : "Not-");
- printf_filtered (" %sCached", (entry & 0x10) ? "" : "Not-");
- printf_filtered (" Write-%s", (entry & 8) ? "Thru" : "Back");
- printf_filtered (" %s", (entry & 4) ? "Usr" : "Sup");
- printf_filtered (" Read-%s", (entry & 2) ? "Write" : "Only");
+ gdb_puts (" Dirty");
+ gdb_printf (" %sAcc.", (entry & 0x20) ? "" : "Not-");
+ gdb_printf (" %sCached", (entry & 0x10) ? "" : "Not-");
+ gdb_printf (" Write-%s", (entry & 8) ? "Thru" : "Back");
+ gdb_printf (" %s", (entry & 4) ? "Usr" : "Sup");
+ gdb_printf (" Read-%s", (entry & 2) ? "Write" : "Only");
if (off)
- printf_filtered (" +0x%x", off);
- puts_filtered ("\n");
+ gdb_printf (" +0x%x", off);
+ gdb_puts ("\n");
}
else if (force)
- printf_filtered ("Page%s not present or not supported; value=0x%lx.\n",
- is_dir ? " Table" : "", entry >> 1);
+ gdb_printf ("Page%s not present or not supported; value=0x%lx.\n",
+ is_dir ? " Table" : "", entry >> 1);
}
static void
@@ -1977,8 +1977,8 @@ go32_pde (const char *arg, int from_tty)
pdbr = get_cr3 ();
if (!pdbr)
- puts_filtered ("Access to Page Directories is "
- "not supported on this system.\n");
+ gdb_puts ("Access to Page Directories is "
+ "not supported on this system.\n");
else if (pde_idx >= 0)
display_ptable_entry (get_pde (pde_idx), 1, 1, 0);
else
@@ -1998,14 +1998,14 @@ display_page_table (long n, int force)
{
int i;
- printf_filtered ("Page Table pointed to by "
- "Page Directory entry 0x%lx:\n", n);
+ gdb_printf ("Page Table pointed to by "
+ "Page Directory entry 0x%lx:\n", n);
for (i = 0; i < 1024; i++)
display_ptable_entry (get_pte (pde, i), 0, 0, 0);
- puts_filtered ("\n");
+ gdb_puts ("\n");
}
else if (force)
- printf_filtered ("Page Table not present; value=0x%lx.\n", pde >> 1);
+ gdb_printf ("Page Table not present; value=0x%lx.\n", pde >> 1);
}
static void
@@ -2027,7 +2027,7 @@ go32_pte (const char *arg, int from_tty)
pdbr = get_cr3 ();
if (!pdbr)
- puts_filtered ("Access to Page Tables is not supported on this system.\n");
+ gdb_puts ("Access to Page Tables is not supported on this system.\n");
else if (pde_idx >= 0)
display_page_table (pde_idx, 1);
else
@@ -2052,15 +2052,15 @@ go32_pte_for_address (const char *arg, int from_tty)
pdbr = get_cr3 ();
if (!pdbr)
- puts_filtered ("Access to Page Tables is not supported on this system.\n");
+ gdb_puts ("Access to Page Tables is not supported on this system.\n");
else
{
int pde_idx = (addr >> 22) & 0x3ff;
int pte_idx = (addr >> 12) & 0x3ff;
unsigned offs = addr & 0xfff;
- printf_filtered ("Page Table entry for address %s:\n",
- hex_string(addr));
+ gdb_printf ("Page Table entry for address %s:\n",
+ hex_string(addr));
display_ptable_entry (get_pte (get_pde (pde_idx), pte_idx), 0, 1, offs);
}
}
diff --git a/gdb/guile/guile.c b/gdb/guile/guile.c
index c040be556a6..c7be48fb739 100644
--- a/gdb/guile/guile.c
+++ b/gdb/guile/guile.c
@@ -273,7 +273,7 @@ gdbscm_source_script (const struct extension_language_defn *extlang,
gdb::unique_xmalloc_ptr<char> msg = gdbscm_safe_source_script (filename);
if (msg != NULL)
- fprintf_filtered (gdb_stderr, "%s\n", msg.get ());
+ gdb_printf (gdb_stderr, "%s\n", msg.get ());
}
/* (execute string [#:from-tty boolean] [#:to-string boolean])
@@ -528,11 +528,11 @@ print_throw_error (SCM key, SCM args)
static SCM
handle_boot_error (void *boot_scm_file, SCM key, SCM args)
{
- fprintf_unfiltered (gdb_stderr, ("Exception caught while booting Guile.\n"));
+ gdb_printf (gdb_stderr, ("Exception caught while booting Guile.\n"));
print_throw_error (key, args);
- fprintf_unfiltered (gdb_stderr, "\n");
+ gdb_printf (gdb_stderr, "\n");
warning (_("Could not complete Guile gdb module initialization from:\n"
"%s.\n"
"Limited Guile support is available.\n"
diff --git a/gdb/guile/scm-auto-load.c b/gdb/guile/scm-auto-load.c
index 8ced220f926..6aa0a5d614d 100644
--- a/gdb/guile/scm-auto-load.c
+++ b/gdb/guile/scm-auto-load.c
@@ -38,7 +38,7 @@ static void
show_auto_load_guile_scripts (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Auto-loading of Guile scripts is %s.\n"), value);
+ gdb_printf (file, _("Auto-loading of Guile scripts is %s.\n"), value);
}
/* See guile-internal.h. */
diff --git a/gdb/guile/scm-block.c b/gdb/guile/scm-block.c
index 80cadbe1526..41954c70519 100644
--- a/gdb/guile/scm-block.c
+++ b/gdb/guile/scm-block.c
@@ -151,16 +151,16 @@ bkscm_print_block_smob (SCM self, SCM port, scm_print_state *pstate)
gdbscm_printf (port, "#<%s", block_smob_name);
- if (BLOCK_SUPERBLOCK (b) == NULL)
+ if (b->superblock () == NULL)
gdbscm_printf (port, " global");
- else if (BLOCK_SUPERBLOCK (BLOCK_SUPERBLOCK (b)) == NULL)
+ else if (b->superblock ()->superblock () == NULL)
gdbscm_printf (port, " static");
- if (BLOCK_FUNCTION (b) != NULL)
- gdbscm_printf (port, " %s", BLOCK_FUNCTION (b)->print_name ());
+ if (b->function () != NULL)
+ gdbscm_printf (port, " %s", b->function ()->print_name ());
gdbscm_printf (port, " %s-%s",
- hex_string (BLOCK_START (b)), hex_string (BLOCK_END (b)));
+ hex_string (b->start ()), hex_string (b->end ()));
scm_puts (">", port);
@@ -379,7 +379,7 @@ gdbscm_block_start (SCM self)
= bkscm_get_valid_block_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
const struct block *block = b_smob->block;
- return gdbscm_scm_from_ulongest (BLOCK_START (block));
+ return gdbscm_scm_from_ulongest (block->start ());
}
/* (block-end <gdb:block>) -> address */
@@ -391,7 +391,7 @@ gdbscm_block_end (SCM self)
= bkscm_get_valid_block_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
const struct block *block = b_smob->block;
- return gdbscm_scm_from_ulongest (BLOCK_END (block));
+ return gdbscm_scm_from_ulongest (block->end ());
}
/* (block-function <gdb:block>) -> <gdb:symbol> */
@@ -404,7 +404,7 @@ gdbscm_block_function (SCM self)
const struct block *block = b_smob->block;
struct symbol *sym;
- sym = BLOCK_FUNCTION (block);
+ sym = block->function ();
if (sym != NULL)
return syscm_scm_from_symbol (sym);
@@ -421,7 +421,7 @@ gdbscm_block_superblock (SCM self)
const struct block *block = b_smob->block;
const struct block *super_block;
- super_block = BLOCK_SUPERBLOCK (block);
+ super_block = block->superblock ();
if (super_block)
return bkscm_scm_from_block (super_block, b_smob->objfile);
@@ -456,7 +456,7 @@ gdbscm_block_static_block (SCM self)
const struct block *block = b_smob->block;
const struct block *static_block;
- if (BLOCK_SUPERBLOCK (block) == NULL)
+ if (block->superblock () == NULL)
return SCM_BOOL_F;
static_block = block_static_block (block);
@@ -474,7 +474,7 @@ gdbscm_block_global_p (SCM self)
= bkscm_get_valid_block_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
const struct block *block = b_smob->block;
- return scm_from_bool (BLOCK_SUPERBLOCK (block) == NULL);
+ return scm_from_bool (block->superblock () == NULL);
}
/* (block-static? <gdb:block>) -> boolean
@@ -487,8 +487,8 @@ gdbscm_block_static_p (SCM self)
= bkscm_get_valid_block_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
const struct block *block = b_smob->block;
- if (BLOCK_SUPERBLOCK (block) != NULL
- && BLOCK_SUPERBLOCK (BLOCK_SUPERBLOCK (block)) == NULL)
+ if (block->superblock () != NULL
+ && block->superblock ()->superblock () == NULL)
return SCM_BOOL_T;
return SCM_BOOL_F;
}
@@ -554,7 +554,7 @@ bkscm_print_block_syms_progress_smob (SCM self, SCM port,
: i_smob->iter.d.compunit_symtab->includes[i_smob->iter.idx]);
gdbscm_printf (port, " %s",
symtab_to_filename_for_display
- (compunit_primary_filetab (cust)));
+ (cust->primary_filetab ()));
break;
}
case FIRST_LOCAL_BLOCK:
@@ -685,7 +685,7 @@ gdbscm_lookup_block (SCM pc_scm)
{
cust = find_pc_compunit_symtab (pc);
- if (cust != NULL && COMPUNIT_OBJFILE (cust) != NULL)
+ if (cust != NULL && cust->objfile () != NULL)
block = block_for_pc (pc);
}
catch (const gdb_exception &except)
@@ -694,14 +694,14 @@ gdbscm_lookup_block (SCM pc_scm)
}
GDBSCM_HANDLE_GDB_EXCEPTION (exc);
- if (cust == NULL || COMPUNIT_OBJFILE (cust) == NULL)
+ if (cust == NULL || cust->objfile () == NULL)
{
gdbscm_out_of_range_error (FUNC_NAME, SCM_ARG1, pc_scm,
_("cannot locate object file for block"));
}
if (block != NULL)
- return bkscm_scm_from_block (block, COMPUNIT_OBJFILE (cust));
+ return bkscm_scm_from_block (block, cust->objfile ());
return SCM_BOOL_F;
}
diff --git a/gdb/guile/scm-breakpoint.c b/gdb/guile/scm-breakpoint.c
index 0069d3371ff..d6c89aa8c71 100644
--- a/gdb/guile/scm-breakpoint.c
+++ b/gdb/guile/scm-breakpoint.c
@@ -353,8 +353,8 @@ gdbscm_make_breakpoint (SCM location_scm, SCM rest)
char *location;
int type_arg_pos = -1, access_type_arg_pos = -1,
internal_arg_pos = -1, temporary_arg_pos = -1;
- enum bptype type = bp_breakpoint;
- enum target_hw_bp_type access_type = hw_write;
+ int type = bp_breakpoint;
+ int access_type = hw_write;
int internal = 0;
int temporary = 0;
SCM result;
@@ -403,7 +403,7 @@ gdbscm_make_breakpoint (SCM location_scm, SCM rest)
case bp_access_watchpoint:
case bp_catchpoint:
{
- const char *type_name = bpscm_type_to_string (type);
+ const char *type_name = bpscm_type_to_string ((enum bptype) type);
gdbscm_misc_error (FUNC_NAME, type_arg_pos,
gdbscm_scm_from_c_string (type_name),
_("unsupported breakpoint type"));
@@ -417,8 +417,8 @@ gdbscm_make_breakpoint (SCM location_scm, SCM rest)
bp_smob->is_scheme_bkpt = 1;
bp_smob->spec.location = location;
- bp_smob->spec.type = type;
- bp_smob->spec.access_type = access_type;
+ bp_smob->spec.type = (enum bptype) type;
+ bp_smob->spec.access_type = (enum target_hw_bp_type) access_type;
bp_smob->spec.is_internal = internal;
bp_smob->spec.is_temporary = temporary;
diff --git a/gdb/guile/scm-frame.c b/gdb/guile/scm-frame.c
index 68fa35cf94c..6bbb6f81d68 100644
--- a/gdb/guile/scm-frame.c
+++ b/gdb/guile/scm-frame.c
@@ -611,11 +611,11 @@ gdbscm_frame_block (SCM self)
}
for (fn_block = block;
- fn_block != NULL && BLOCK_FUNCTION (fn_block) == NULL;
- fn_block = BLOCK_SUPERBLOCK (fn_block))
+ fn_block != NULL && fn_block->function () == NULL;
+ fn_block = fn_block->superblock ())
continue;
- if (block == NULL || fn_block == NULL || BLOCK_FUNCTION (fn_block) == NULL)
+ if (block == NULL || fn_block == NULL || fn_block->function () == NULL)
{
scm_misc_error (FUNC_NAME, _("cannot find block for frame"),
scm_list_1 (self));
@@ -624,7 +624,7 @@ gdbscm_frame_block (SCM self)
if (block != NULL)
{
return bkscm_scm_from_block
- (block, symbol_objfile (BLOCK_FUNCTION (fn_block)));
+ (block, fn_block->function ()->objfile ());
}
return SCM_BOOL_F;
diff --git a/gdb/guile/scm-objfile.c b/gdb/guile/scm-objfile.c
index bdd61ae1fd3..760d5aa1f4b 100644
--- a/gdb/guile/scm-objfile.c
+++ b/gdb/guile/scm-objfile.c
@@ -314,7 +314,7 @@ gdbscm_source_objfile_script (const struct extension_language_defn *extlang,
gdb::unique_xmalloc_ptr<char> msg = gdbscm_safe_source_script (filename);
if (msg != NULL)
- fprintf_filtered (gdb_stderr, "%s", msg.get ());
+ gdb_printf (gdb_stderr, "%s", msg.get ());
ofscm_current_objfile = NULL;
}
@@ -335,7 +335,7 @@ gdbscm_execute_objfile_script (const struct extension_language_defn *extlang,
gdb::unique_xmalloc_ptr<char> msg
= gdbscm_safe_eval_string (script, 0 /* display_result */);
if (msg != NULL)
- fprintf_filtered (gdb_stderr, "%s", msg.get ());
+ gdb_printf (gdb_stderr, "%s", msg.get ());
ofscm_current_objfile = NULL;
}
diff --git a/gdb/guile/scm-param.c b/gdb/guile/scm-param.c
index 125b0e4766b..54c8c27301a 100644
--- a/gdb/guile/scm-param.c
+++ b/gdb/guile/scm-param.c
@@ -320,7 +320,7 @@ pascm_set_func (const char *args, int from_tty, struct cmd_list_element *c)
/* GDB is usually silent when a parameter is set. */
if (*msg.get () != '\0')
- fprintf_filtered (gdb_stdout, "%s\n", msg.get ());
+ gdb_printf ("%s\n", msg.get ());
}
/* A callback function that is registered against the respective
@@ -362,7 +362,7 @@ pascm_show_func (struct ui_file *file, int from_tty,
error (_("Error converting show text to host string."));
}
- fprintf_filtered (file, "%s\n", msg.get ());
+ gdb_printf (file, "%s\n", msg.get ());
}
/* A helper function that dispatches to the appropriate add_setshow
@@ -458,12 +458,12 @@ add_setshow_generic (enum var_types param_type, enum command_class cmd_class,
break;
case var_enum:
+ /* Initialize the value, just in case. */
+ make_setting (self).set<const char *> (self->enumeration[0]);
commands = add_setshow_enum_cmd (cmd_name, cmd_class, self->enumeration,
&self->value.cstringval, set_doc,
show_doc, help_doc, set_func, show_func,
set_list, show_list);
- /* Initialize the value, just in case. */
- make_setting (self).set<const char *> (self->enumeration[0]);
break;
default:
diff --git a/gdb/guile/scm-ports.c b/gdb/guile/scm-ports.c
index dde7882b425..946859aa1f3 100644
--- a/gdb/guile/scm-ports.c
+++ b/gdb/guile/scm-ports.c
@@ -202,9 +202,9 @@ fputsn_filtered (const char *s, size_t size, struct ui_file *stream)
for (i = 0; i < size; ++i)
{
if (s[i] == '\0')
- fputs_filtered ("\\000", stream);
+ gdb_puts ("\\000", stream);
else
- fputc_filtered (s[i], stream);
+ gdb_putc (s[i], stream);
}
}
diff --git a/gdb/guile/scm-pretty-print.c b/gdb/guile/scm-pretty-print.c
index 77f9b0ab7f8..2bb63e849d1 100644
--- a/gdb/guile/scm-pretty-print.c
+++ b/gdb/guile/scm-pretty-print.c
@@ -617,7 +617,7 @@ ppscm_print_exception_unless_memory_error (SCM exception,
/* This "shouldn't happen", but play it safe. */
if (msg == NULL || msg.get ()[0] == '\0')
- fprintf_filtered (stream, _("<error reading variable>"));
+ gdb_printf (stream, _("<error reading variable>"));
else
{
/* Remove the trailing newline. We could instead call a special
@@ -628,7 +628,7 @@ ppscm_print_exception_unless_memory_error (SCM exception,
if (msg_text[len - 1] == '\n')
msg_text[len - 1] = '\0';
- fprintf_filtered (stream, _("<error reading variable: %s>"), msg_text);
+ gdb_printf (stream, _("<error reading variable: %s>"), msg_text);
}
}
else
@@ -687,9 +687,9 @@ ppscm_print_string_repr (SCM printer, enum display_hint hint,
for (i = 0; i < length; ++i)
{
if (string.get ()[i] == '\0')
- fputs_filtered ("\\000", stream);
+ gdb_puts ("\\000", stream);
else
- fputc_filtered (string.get ()[i], stream);
+ gdb_putc (string.get ()[i], stream);
}
}
result = STRING_REPR_OK;
@@ -826,10 +826,10 @@ ppscm_print_children (SCM printer, enum display_hint hint,
if (i == 0)
{
if (!printed_nothing)
- fputs_filtered (" = ", stream);
+ gdb_puts (" = ", stream);
}
else if (! is_map || i % 2 == 0)
- fputs_filtered (pretty ? "," : ", ", stream);
+ gdb_puts (pretty ? "," : ", ", stream);
/* Skip printing children if max_depth has been reached. This check
is performed after print_string_repr and the "=" separator so that
@@ -839,7 +839,7 @@ ppscm_print_children (SCM printer, enum display_hint hint,
goto done;
else if (i == 0)
/* Print initial "{" to bookend children. */
- fputs_filtered ("{", stream);
+ gdb_puts ("{", stream);
/* In summary mode, we just want to print "= {...}" if there is
a value. */
@@ -857,26 +857,26 @@ ppscm_print_children (SCM printer, enum display_hint hint,
{
if (pretty)
{
- fputs_filtered ("\n", stream);
- print_spaces_filtered (2 + 2 * recurse, stream);
+ gdb_puts ("\n", stream);
+ print_spaces (2 + 2 * recurse, stream);
}
else
- wrap_here (n_spaces (2 + 2 *recurse));
+ stream->wrap_here (2 + 2 *recurse);
}
if (is_map && i % 2 == 0)
- fputs_filtered ("[", stream);
+ gdb_puts ("[", stream);
else if (is_array)
{
/* We print the index, not whatever the child method
returned as the name. */
if (options->print_array_indexes)
- fprintf_filtered (stream, "[%d] = ", i);
+ gdb_printf (stream, "[%d] = ", i);
}
else if (! is_map)
{
- fputs_filtered (name.get (), stream);
- fputs_filtered (" = ", stream);
+ gdb_puts (name.get (), stream);
+ gdb_puts (" = ", stream);
}
if (lsscm_is_lazy_string (v_scm))
@@ -890,7 +890,7 @@ ppscm_print_children (SCM printer, enum display_hint hint,
{
gdb::unique_xmalloc_ptr<char> output
= gdbscm_scm_to_c_string (v_scm);
- fputs_filtered (output.get (), stream);
+ gdb_puts (output.get (), stream);
}
else
{
@@ -920,7 +920,7 @@ ppscm_print_children (SCM printer, enum display_hint hint,
}
if (is_map && i % 2 == 0)
- fputs_filtered ("] = ", stream);
+ gdb_puts ("] = ", stream);
}
if (i)
@@ -929,17 +929,17 @@ ppscm_print_children (SCM printer, enum display_hint hint,
{
if (pretty)
{
- fputs_filtered ("\n", stream);
- print_spaces_filtered (2 + 2 * recurse, stream);
+ gdb_puts ("\n", stream);
+ print_spaces (2 + 2 * recurse, stream);
}
- fputs_filtered ("...", stream);
+ gdb_puts ("...", stream);
}
if (pretty)
{
- fputs_filtered ("\n", stream);
- print_spaces_filtered (2 * recurse, stream);
+ gdb_puts ("\n", stream);
+ print_spaces (2 * recurse, stream);
}
- fputs_filtered ("}", stream);
+ gdb_puts ("}", stream);
}
done:
diff --git a/gdb/guile/scm-string.c b/gdb/guile/scm-string.c
index 184eaaded07..bf558922db6 100644
--- a/gdb/guile/scm-string.c
+++ b/gdb/guile/scm-string.c
@@ -23,6 +23,7 @@
#include "defs.h"
#include "charset.h"
#include "guile-internal.h"
+#include "gdbsupport/buildargv.h"
/* Convert STRING to an int.
STRING must be a valid integer. */
diff --git a/gdb/guile/scm-symbol.c b/gdb/guile/scm-symbol.c
index 05e6b88fc84..55eac3cfff6 100644
--- a/gdb/guile/scm-symbol.c
+++ b/gdb/guile/scm-symbol.c
@@ -101,9 +101,9 @@ syscm_get_symbol_map (struct symbol *symbol)
{
htab_t htab;
- if (SYMBOL_OBJFILE_OWNED (symbol))
+ if (symbol->is_objfile_owned ())
{
- struct objfile *objfile = symbol_objfile (symbol);
+ struct objfile *objfile = symbol->objfile ();
htab = (htab_t) objfile_data (objfile, syscm_objfile_data_key);
if (htab == NULL)
@@ -115,7 +115,7 @@ syscm_get_symbol_map (struct symbol *symbol)
}
else
{
- struct gdbarch *gdbarch = symbol_arch (symbol);
+ struct gdbarch *gdbarch = symbol->arch ();
struct syscm_gdbarch_data *data
= (struct syscm_gdbarch_data *) gdbarch_data (gdbarch,
syscm_gdbarch_data_key);
@@ -345,10 +345,10 @@ gdbscm_symbol_type (SCM self)
= syscm_get_valid_symbol_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
const struct symbol *symbol = s_smob->symbol;
- if (SYMBOL_TYPE (symbol) == NULL)
+ if (symbol->type () == NULL)
return SCM_BOOL_F;
- return tyscm_scm_from_type (SYMBOL_TYPE (symbol));
+ return tyscm_scm_from_type (symbol->type ());
}
/* (symbol-symtab <gdb:symbol>) -> <gdb:symtab> | #f
@@ -362,9 +362,9 @@ gdbscm_symbol_symtab (SCM self)
= syscm_get_valid_symbol_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
const struct symbol *symbol = s_smob->symbol;
- if (!SYMBOL_OBJFILE_OWNED (symbol))
+ if (!symbol->is_objfile_owned ())
return SCM_BOOL_F;
- return stscm_scm_from_symtab (symbol_symtab (symbol));
+ return stscm_scm_from_symtab (symbol->symtab ());
}
/* (symbol-name <gdb:symbol>) -> string */
@@ -412,7 +412,7 @@ gdbscm_symbol_addr_class (SCM self)
= syscm_get_valid_symbol_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
const struct symbol *symbol = s_smob->symbol;
- return scm_from_int (SYMBOL_CLASS (symbol));
+ return scm_from_int (symbol->aclass ());
}
/* (symbol-argument? <gdb:symbol>) -> boolean */
@@ -424,7 +424,7 @@ gdbscm_symbol_argument_p (SCM self)
= syscm_get_valid_symbol_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
const struct symbol *symbol = s_smob->symbol;
- return scm_from_bool (SYMBOL_IS_ARGUMENT (symbol));
+ return scm_from_bool (symbol->is_argument ());
}
/* (symbol-constant? <gdb:symbol>) -> boolean */
@@ -437,7 +437,7 @@ gdbscm_symbol_constant_p (SCM self)
const struct symbol *symbol = s_smob->symbol;
enum address_class theclass;
- theclass = SYMBOL_CLASS (symbol);
+ theclass = symbol->aclass ();
return scm_from_bool (theclass == LOC_CONST || theclass == LOC_CONST_BYTES);
}
@@ -452,7 +452,7 @@ gdbscm_symbol_function_p (SCM self)
const struct symbol *symbol = s_smob->symbol;
enum address_class theclass;
- theclass = SYMBOL_CLASS (symbol);
+ theclass = symbol->aclass ();
return scm_from_bool (theclass == LOC_BLOCK);
}
@@ -467,9 +467,9 @@ gdbscm_symbol_variable_p (SCM self)
const struct symbol *symbol = s_smob->symbol;
enum address_class theclass;
- theclass = SYMBOL_CLASS (symbol);
+ theclass = symbol->aclass ();
- return scm_from_bool (!SYMBOL_IS_ARGUMENT (symbol)
+ return scm_from_bool (!symbol->is_argument ()
&& (theclass == LOC_LOCAL || theclass == LOC_REGISTER
|| theclass == LOC_STATIC || theclass == LOC_COMPUTED
|| theclass == LOC_OPTIMIZED_OUT));
@@ -510,7 +510,7 @@ gdbscm_symbol_line (SCM self)
= syscm_get_valid_symbol_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
const struct symbol *symbol = s_smob->symbol;
- return scm_from_int (SYMBOL_LINE (symbol));
+ return scm_from_int (symbol->line ());
}
/* (symbol-value <gdb:symbol> [#:frame <gdb:frame>]) -> <gdb:value>
@@ -534,7 +534,7 @@ gdbscm_symbol_value (SCM self, SCM rest)
if (!gdbscm_is_false (frame_scm))
f_smob = frscm_get_frame_smob_arg_unsafe (frame_scm, frame_pos, FUNC_NAME);
- if (SYMBOL_CLASS (symbol) == LOC_TYPEDEF)
+ if (symbol->aclass () == LOC_TYPEDEF)
{
gdbscm_out_of_range_error (FUNC_NAME, SCM_ARG1, self,
_("cannot get the value of a typedef"));
diff --git a/gdb/guile/scm-symtab.c b/gdb/guile/scm-symtab.c
index 40410f7b9fb..518ceeaa15d 100644
--- a/gdb/guile/scm-symtab.c
+++ b/gdb/guile/scm-symtab.c
@@ -109,7 +109,7 @@ stscm_eq_symtab_smob (const void *ap, const void *bp)
static htab_t
stscm_objfile_symtab_map (struct symtab *symtab)
{
- struct objfile *objfile = SYMTAB_OBJFILE (symtab);
+ struct objfile *objfile = symtab->compunit ()->objfile ();
htab_t htab = (htab_t) objfile_data (objfile, stscm_objfile_data_key);
if (htab == NULL)
@@ -348,7 +348,7 @@ gdbscm_symtab_objfile (SCM self)
= stscm_get_valid_symtab_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
const struct symtab *symtab = st_smob->symtab;
- return ofscm_scm_from_objfile (SYMTAB_OBJFILE (symtab));
+ return ofscm_scm_from_objfile (symtab->compunit ()->objfile ());
}
/* (symtab-global-block <gdb:symtab>) -> <gdb:block>
@@ -361,12 +361,11 @@ gdbscm_symtab_global_block (SCM self)
= stscm_get_valid_symtab_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
const struct symtab *symtab = st_smob->symtab;
const struct blockvector *blockvector;
- const struct block *block;
- blockvector = SYMTAB_BLOCKVECTOR (symtab);
- block = BLOCKVECTOR_BLOCK (blockvector, GLOBAL_BLOCK);
+ blockvector = symtab->compunit ()->blockvector ();
+ const struct block *block = blockvector->global_block ();
- return bkscm_scm_from_block (block, SYMTAB_OBJFILE (symtab));
+ return bkscm_scm_from_block (block, symtab->compunit ()->objfile ());
}
/* (symtab-static-block <gdb:symtab>) -> <gdb:block>
@@ -379,12 +378,11 @@ gdbscm_symtab_static_block (SCM self)
= stscm_get_valid_symtab_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
const struct symtab *symtab = st_smob->symtab;
const struct blockvector *blockvector;
- const struct block *block;
- blockvector = SYMTAB_BLOCKVECTOR (symtab);
- block = BLOCKVECTOR_BLOCK (blockvector, STATIC_BLOCK);
+ blockvector = symtab->compunit ()->blockvector ();
+ const struct block *block = blockvector->static_block ();
- return bkscm_scm_from_block (block, SYMTAB_OBJFILE (symtab));
+ return bkscm_scm_from_block (block, symtab->compunit ()->objfile ());
}
/* Administrivia for sal (symtab-and-line) smobs. */
diff --git a/gdb/guile/scm-type.c b/gdb/guile/scm-type.c
index c23305a961c..27d00f12a95 100644
--- a/gdb/guile/scm-type.c
+++ b/gdb/guile/scm-type.c
@@ -108,8 +108,9 @@ tyscm_type_name (struct type *type)
{
string_file stb;
- LA_PRINT_TYPE (type, "", &stb, -1, 0, &type_print_raw_options);
- return std::move (stb.string ());
+ current_language->print_type (type, "", &stb, -1, 0,
+ &type_print_raw_options);
+ return stb.release ();
}
catch (const gdb_exception &except)
{
diff --git a/gdb/h8300-tdep.c b/gdb/h8300-tdep.c
index 1365ee393da..c4d9824ffda 100644
--- a/gdb/h8300-tdep.c
+++ b/gdb/h8300-tdep.c
@@ -1007,17 +1007,17 @@ h8300_print_register (struct gdbarch *gdbarch, struct ui_file *file,
rval = get_frame_register_signed (frame, regno);
- fprintf_filtered (file, "%-14s ", name);
+ gdb_printf (file, "%-14s ", name);
if ((regno == E_PSEUDO_CCR_REGNUM (gdbarch)) || \
(regno == E_PSEUDO_EXR_REGNUM (gdbarch) && is_h8300smode (gdbarch)))
{
- fprintf_filtered (file, "0x%02x ", (unsigned char) rval);
+ gdb_printf (file, "0x%02x ", (unsigned char) rval);
print_longest (file, 'u', 1, rval);
}
else
{
- fprintf_filtered (file, "0x%s ", phex ((ULONGEST) rval,
- BINWORD (gdbarch)));
+ gdb_printf (file, "0x%s ", phex ((ULONGEST) rval,
+ BINWORD (gdbarch)));
print_longest (file, 'd', 1, rval);
}
if (regno == E_PSEUDO_CCR_REGNUM (gdbarch))
@@ -1025,51 +1025,51 @@ h8300_print_register (struct gdbarch *gdbarch, struct ui_file *file,
/* CCR register */
int C, Z, N, V;
unsigned char l = rval & 0xff;
- fprintf_filtered (file, "\t");
- fprintf_filtered (file, "I-%d ", (l & 0x80) != 0);
- fprintf_filtered (file, "UI-%d ", (l & 0x40) != 0);
- fprintf_filtered (file, "H-%d ", (l & 0x20) != 0);
- fprintf_filtered (file, "U-%d ", (l & 0x10) != 0);
+ gdb_printf (file, "\t");
+ gdb_printf (file, "I-%d ", (l & 0x80) != 0);
+ gdb_printf (file, "UI-%d ", (l & 0x40) != 0);
+ gdb_printf (file, "H-%d ", (l & 0x20) != 0);
+ gdb_printf (file, "U-%d ", (l & 0x10) != 0);
N = (l & 0x8) != 0;
Z = (l & 0x4) != 0;
V = (l & 0x2) != 0;
C = (l & 0x1) != 0;
- fprintf_filtered (file, "N-%d ", N);
- fprintf_filtered (file, "Z-%d ", Z);
- fprintf_filtered (file, "V-%d ", V);
- fprintf_filtered (file, "C-%d ", C);
+ gdb_printf (file, "N-%d ", N);
+ gdb_printf (file, "Z-%d ", Z);
+ gdb_printf (file, "V-%d ", V);
+ gdb_printf (file, "C-%d ", C);
if ((C | Z) == 0)
- fprintf_filtered (file, "u> ");
+ gdb_printf (file, "u> ");
if ((C | Z) == 1)
- fprintf_filtered (file, "u<= ");
+ gdb_printf (file, "u<= ");
if (C == 0)
- fprintf_filtered (file, "u>= ");
+ gdb_printf (file, "u>= ");
if (C == 1)
- fprintf_filtered (file, "u< ");
+ gdb_printf (file, "u< ");
if (Z == 0)
- fprintf_filtered (file, "!= ");
+ gdb_printf (file, "!= ");
if (Z == 1)
- fprintf_filtered (file, "== ");
+ gdb_printf (file, "== ");
if ((N ^ V) == 0)
- fprintf_filtered (file, ">= ");
+ gdb_printf (file, ">= ");
if ((N ^ V) == 1)
- fprintf_filtered (file, "< ");
+ gdb_printf (file, "< ");
if ((Z | (N ^ V)) == 0)
- fprintf_filtered (file, "> ");
+ gdb_printf (file, "> ");
if ((Z | (N ^ V)) == 1)
- fprintf_filtered (file, "<= ");
+ gdb_printf (file, "<= ");
}
else if (regno == E_PSEUDO_EXR_REGNUM (gdbarch) && is_h8300smode (gdbarch))
{
/* EXR register */
unsigned char l = rval & 0xff;
- fprintf_filtered (file, "\t");
- fprintf_filtered (file, "T-%d - - - ", (l & 0x80) != 0);
- fprintf_filtered (file, "I2-%d ", (l & 4) != 0);
- fprintf_filtered (file, "I1-%d ", (l & 2) != 0);
- fprintf_filtered (file, "I0-%d", (l & 1) != 0);
+ gdb_printf (file, "\t");
+ gdb_printf (file, "T-%d - - - ", (l & 0x80) != 0);
+ gdb_printf (file, "I2-%d ", (l & 4) != 0);
+ gdb_printf (file, "I1-%d ", (l & 2) != 0);
+ gdb_printf (file, "I0-%d", (l & 1) != 0);
}
- fprintf_filtered (file, "\n");
+ gdb_printf (file, "\n");
}
static void
diff --git a/gdb/hppa-tdep.c b/gdb/hppa-tdep.c
index 32c54357045..f9ececbb04f 100644
--- a/gdb/hppa-tdep.c
+++ b/gdb/hppa-tdep.c
@@ -70,12 +70,12 @@ struct hppa_unwind_info
struct hppa_objfile_private
{
- struct hppa_unwind_info *unwind_info; /* a pointer */
- struct so_list *so_info; /* a pointer */
- CORE_ADDR dp;
+ struct hppa_unwind_info *unwind_info = nullptr; /* a pointer */
+ struct so_list *so_info = nullptr; /* a pointer */
+ CORE_ADDR dp = 0;
- int dummy_call_sequence_reg;
- CORE_ADDR dummy_call_sequence_addr;
+ int dummy_call_sequence_reg = 0;
+ CORE_ADDR dummy_call_sequence_addr = 0;
};
/* hppa-specific object data -- unwind and solib info.
@@ -84,9 +84,7 @@ struct hppa_objfile_private
that separately and make this static. The solib data is probably hpux-
specific, so we can create a separate extern objfile_data that is registered
by hppa-hpux-tdep.c and shared with pa64solib.c and somsolib.c. */
-static const struct objfile_key<hppa_objfile_private,
- gdb::noop_deleter<hppa_objfile_private>>
- hppa_objfile_priv_data;
+static const struct objfile_key<hppa_objfile_private> hppa_objfile_priv_data;
/* Get at various relevant fields of an instruction word. */
#define MASK_5 0x1f
@@ -199,21 +197,11 @@ hppa_symbol_address(const char *sym)
minsym = lookup_minimal_symbol (sym, NULL, NULL);
if (minsym.minsym)
- return BMSYMBOL_VALUE_ADDRESS (minsym);
+ return minsym.value_address ();
else
return (CORE_ADDR)-1;
}
-static struct hppa_objfile_private *
-hppa_init_objfile_priv_data (struct objfile *objfile)
-{
- hppa_objfile_private *priv
- = OBSTACK_ZALLOC (&objfile->objfile_obstack, hppa_objfile_private);
-
- hppa_objfile_priv_data.set (objfile, priv);
-
- return priv;
-}
/* Compare the start address for two unwind entries returning 1 if
@@ -471,7 +459,7 @@ read_unwind_info (struct objfile *objfile)
/* Keep a pointer to the unwind information. */
obj_private = hppa_objfile_priv_data.get (objfile);
if (obj_private == NULL)
- obj_private = hppa_init_objfile_priv_data (objfile);
+ obj_private = hppa_objfile_priv_data.emplace (objfile);
obj_private->unwind_info = ui;
}
@@ -485,17 +473,16 @@ struct unwind_table_entry *
find_unwind_entry (CORE_ADDR pc)
{
int first, middle, last;
- struct hppa_objfile_private *priv;
if (hppa_debug)
- fprintf_unfiltered (gdb_stdlog, "{ find_unwind_entry %s -> ",
- hex_string (pc));
+ gdb_printf (gdb_stdlog, "{ find_unwind_entry %s -> ",
+ hex_string (pc));
/* A function at address 0? Not in HP-UX! */
if (pc == (CORE_ADDR) 0)
{
if (hppa_debug)
- fprintf_unfiltered (gdb_stdlog, "NULL }\n");
+ gdb_printf (gdb_stdlog, "NULL }\n");
return NULL;
}
@@ -503,9 +490,9 @@ find_unwind_entry (CORE_ADDR pc)
{
struct hppa_unwind_info *ui;
ui = NULL;
- priv = hppa_objfile_priv_data.get (objfile);
+ struct hppa_objfile_private *priv = hppa_objfile_priv_data.get (objfile);
if (priv)
- ui = ((struct hppa_objfile_private *) priv)->unwind_info;
+ ui = priv->unwind_info;
if (!ui)
{
@@ -513,7 +500,7 @@ find_unwind_entry (CORE_ADDR pc)
priv = hppa_objfile_priv_data.get (objfile);
if (priv == NULL)
error (_("Internal error reading unwind information."));
- ui = ((struct hppa_objfile_private *) priv)->unwind_info;
+ ui = priv->unwind_info;
}
/* First, check the cache. */
@@ -523,8 +510,8 @@ find_unwind_entry (CORE_ADDR pc)
&& pc <= ui->cache->region_end)
{
if (hppa_debug)
- fprintf_unfiltered (gdb_stdlog, "%s (cached) }\n",
- hex_string ((uintptr_t) ui->cache));
+ gdb_printf (gdb_stdlog, "%s (cached) }\n",
+ hex_string ((uintptr_t) ui->cache));
return ui->cache;
}
@@ -541,8 +528,8 @@ find_unwind_entry (CORE_ADDR pc)
{
ui->cache = &ui->table[middle];
if (hppa_debug)
- fprintf_unfiltered (gdb_stdlog, "%s }\n",
- hex_string ((uintptr_t) ui->cache));
+ gdb_printf (gdb_stdlog, "%s }\n",
+ hex_string ((uintptr_t) ui->cache));
return &ui->table[middle];
}
@@ -554,7 +541,7 @@ find_unwind_entry (CORE_ADDR pc)
}
if (hppa_debug)
- fprintf_unfiltered (gdb_stdlog, "NULL (not found) }\n");
+ gdb_printf (gdb_stdlog, "NULL (not found) }\n");
return NULL;
}
@@ -1881,14 +1868,14 @@ hppa_frame_cache (struct frame_info *this_frame, void **this_cache)
int i;
if (hppa_debug)
- fprintf_unfiltered (gdb_stdlog, "{ hppa_frame_cache (frame=%d) -> ",
- frame_relative_level(this_frame));
+ gdb_printf (gdb_stdlog, "{ hppa_frame_cache (frame=%d) -> ",
+ frame_relative_level(this_frame));
if ((*this_cache) != NULL)
{
if (hppa_debug)
- fprintf_unfiltered (gdb_stdlog, "base=%s (cached) }",
- paddress (gdbarch, ((struct hppa_frame_cache *)*this_cache)->base));
+ gdb_printf (gdb_stdlog, "base=%s (cached) }",
+ paddress (gdbarch, ((struct hppa_frame_cache *)*this_cache)->base));
return (struct hppa_frame_cache *) (*this_cache);
}
cache = FRAME_OBSTACK_ZALLOC (struct hppa_frame_cache);
@@ -1900,7 +1887,7 @@ hppa_frame_cache (struct frame_info *this_frame, void **this_cache)
if (!u)
{
if (hppa_debug)
- fprintf_unfiltered (gdb_stdlog, "base=NULL (no unwind entry) }");
+ gdb_printf (gdb_stdlog, "base=NULL (no unwind entry) }");
return (struct hppa_frame_cache *) (*this_cache);
}
@@ -2121,11 +2108,11 @@ hppa_frame_cache (struct frame_info *this_frame, void **this_cache)
CORE_ADDR fp;
if (hppa_debug)
- fprintf_unfiltered (gdb_stdlog, " (this_sp=%s, pc=%s, "
- "prologue_end=%s) ",
- paddress (gdbarch, this_sp),
- paddress (gdbarch, get_frame_pc (this_frame)),
- paddress (gdbarch, prologue_end));
+ gdb_printf (gdb_stdlog, " (this_sp=%s, pc=%s, "
+ "prologue_end=%s) ",
+ paddress (gdbarch, this_sp),
+ paddress (gdbarch, get_frame_pc (this_frame)),
+ paddress (gdbarch, prologue_end));
/* Check to see if a frame pointer is available, and use it for
frame unwinding if it is.
@@ -2156,8 +2143,8 @@ hppa_frame_cache (struct frame_info *this_frame, void **this_cache)
cache->base = fp;
if (hppa_debug)
- fprintf_unfiltered (gdb_stdlog, " (base=%s) [frame pointer]",
- paddress (gdbarch, cache->base));
+ gdb_printf (gdb_stdlog, " (base=%s) [frame pointer]",
+ paddress (gdbarch, cache->base));
}
else if (u->Save_SP
&& cache->saved_regs[HPPA_SP_REGNUM].is_addr ())
@@ -2168,17 +2155,17 @@ hppa_frame_cache (struct frame_info *this_frame, void **this_cache)
cache->base = read_memory_integer (this_sp, word_size, byte_order);
if (hppa_debug)
- fprintf_unfiltered (gdb_stdlog, " (base=%s) [saved]",
- paddress (gdbarch, cache->base));
+ gdb_printf (gdb_stdlog, " (base=%s) [saved]",
+ paddress (gdbarch, cache->base));
}
- else
+ else
{
/* The prologue has been slowly allocating stack space. Adjust
the SP back. */
cache->base = this_sp - frame_size;
if (hppa_debug)
- fprintf_unfiltered (gdb_stdlog, " (base=%s) [unwind adjust]",
- paddress (gdbarch, cache->base));
+ gdb_printf (gdb_stdlog, " (base=%s) [unwind adjust]",
+ paddress (gdbarch, cache->base));
}
cache->saved_regs[HPPA_SP_REGNUM].set_value (cache->base);
@@ -2192,14 +2179,14 @@ hppa_frame_cache (struct frame_info *this_frame, void **this_cache)
{
cache->saved_regs[HPPA_PCOQ_HEAD_REGNUM] = cache->saved_regs[31];
if (hppa_debug)
- fprintf_unfiltered (gdb_stdlog, " (pc=r31) [stack] } ");
+ gdb_printf (gdb_stdlog, " (pc=r31) [stack] } ");
}
else
{
ULONGEST r31 = get_frame_register_unsigned (this_frame, 31);
cache->saved_regs[HPPA_PCOQ_HEAD_REGNUM].set_value (r31);
if (hppa_debug)
- fprintf_unfiltered (gdb_stdlog, " (pc=r31) [frame] } ");
+ gdb_printf (gdb_stdlog, " (pc=r31) [frame] } ");
}
}
else
@@ -2209,7 +2196,7 @@ hppa_frame_cache (struct frame_info *this_frame, void **this_cache)
cache->saved_regs[HPPA_PCOQ_HEAD_REGNUM] =
cache->saved_regs[HPPA_RP_REGNUM];
if (hppa_debug)
- fprintf_unfiltered (gdb_stdlog, " (pc=rp) [stack] } ");
+ gdb_printf (gdb_stdlog, " (pc=rp) [stack] } ");
}
else
{
@@ -2217,7 +2204,7 @@ hppa_frame_cache (struct frame_info *this_frame, void **this_cache)
HPPA_RP_REGNUM);
cache->saved_regs[HPPA_PCOQ_HEAD_REGNUM].set_value (rp);
if (hppa_debug)
- fprintf_unfiltered (gdb_stdlog, " (pc=rp) [frame] } ");
+ gdb_printf (gdb_stdlog, " (pc=rp) [frame] } ");
}
}
@@ -2261,8 +2248,8 @@ hppa_frame_cache (struct frame_info *this_frame, void **this_cache)
}
if (hppa_debug)
- fprintf_unfiltered (gdb_stdlog, "base=%s }",
- paddress (gdbarch, ((struct hppa_frame_cache *)*this_cache)->base));
+ gdb_printf (gdb_stdlog, "base=%s }",
+ paddress (gdbarch, ((struct hppa_frame_cache *)*this_cache)->base));
return (struct hppa_frame_cache *) (*this_cache);
}
@@ -2329,9 +2316,9 @@ hppa_fallback_frame_cache (struct frame_info *this_frame, void **this_cache)
CORE_ADDR start_pc;
if (hppa_debug)
- fprintf_unfiltered (gdb_stdlog,
- "{ hppa_fallback_frame_cache (frame=%d) -> ",
- frame_relative_level (this_frame));
+ gdb_printf (gdb_stdlog,
+ "{ hppa_fallback_frame_cache (frame=%d) -> ",
+ frame_relative_level (this_frame));
cache = FRAME_OBSTACK_ZALLOC (struct hppa_frame_cache);
(*this_cache) = cache;
@@ -2367,8 +2354,8 @@ hppa_fallback_frame_cache (struct frame_info *this_frame, void **this_cache)
}
if (hppa_debug)
- fprintf_unfiltered (gdb_stdlog, " frame_size=%d, found_rp=%d }\n",
- frame_size, found_rp);
+ gdb_printf (gdb_stdlog, " frame_size=%d, found_rp=%d }\n",
+ frame_size, found_rp);
cache->base = get_frame_register_unsigned (this_frame, HPPA_SP_REGNUM);
cache->base -= frame_size;
@@ -2531,7 +2518,7 @@ struct bound_minimal_symbol
hppa_lookup_stub_minimal_symbol (const char *name,
enum unwind_stub_types stub_type)
{
- struct bound_minimal_symbol result = { NULL, NULL };
+ struct bound_minimal_symbol result;
for (objfile *objfile : current_program_space->objfiles ())
{
@@ -2541,7 +2528,7 @@ hppa_lookup_stub_minimal_symbol (const char *name,
{
struct unwind_table_entry *u;
- u = find_unwind_entry (MSYMBOL_VALUE (msym));
+ u = find_unwind_entry (msym->value_longest ());
if (u != NULL && u->stub_unwind.stub_type == stub_type)
{
result.objfile = objfile;
@@ -2572,19 +2559,19 @@ unwind_command (const char *exp, int from_tty)
if (!u)
{
- printf_filtered ("Can't find unwind table entry for %s\n", exp);
+ gdb_printf ("Can't find unwind table entry for %s\n", exp);
return;
}
- printf_filtered ("unwind_table_entry (%s):\n", host_address_to_string (u));
+ gdb_printf ("unwind_table_entry (%s):\n", host_address_to_string (u));
- printf_filtered ("\tregion_start = %s\n", hex_string (u->region_start));
+ gdb_printf ("\tregion_start = %s\n", hex_string (u->region_start));
- printf_filtered ("\tregion_end = %s\n", hex_string (u->region_end));
+ gdb_printf ("\tregion_end = %s\n", hex_string (u->region_end));
-#define pif(FLD) if (u->FLD) printf_filtered (" "#FLD);
+#define pif(FLD) if (u->FLD) gdb_printf (" "#FLD);
- printf_filtered ("\n\tflags =");
+ gdb_printf ("\n\tflags =");
pif (Cannot_unwind);
pif (Millicode);
pif (Millicode_save_sr0);
@@ -2609,9 +2596,9 @@ unwind_command (const char *exp, int from_tty)
pif (Large_frame);
pif (alloca_frame);
- putchar_filtered ('\n');
+ gdb_putc ('\n');
-#define pin(FLD) printf_filtered ("\t"#FLD" = 0x%x\n", u->FLD);
+#define pin(FLD) gdb_printf ("\t"#FLD" = 0x%x\n", u->FLD);
pin (Region_description);
pin (Entry_FR);
@@ -2620,26 +2607,26 @@ unwind_command (const char *exp, int from_tty)
if (u->stub_unwind.stub_type)
{
- printf_filtered ("\tstub type = ");
+ gdb_printf ("\tstub type = ");
switch (u->stub_unwind.stub_type)
{
case LONG_BRANCH:
- printf_filtered ("long branch\n");
+ gdb_printf ("long branch\n");
break;
case PARAMETER_RELOCATION:
- printf_filtered ("parameter relocation\n");
+ gdb_printf ("parameter relocation\n");
break;
case EXPORT:
- printf_filtered ("export\n");
+ gdb_printf ("export\n");
break;
case IMPORT:
- printf_filtered ("import\n");
+ gdb_printf ("import\n");
break;
case IMPORT_SHLIB:
- printf_filtered ("import shlib\n");
+ gdb_printf ("import shlib\n");
break;
default:
- printf_filtered ("unknown (%d)\n", u->stub_unwind.stub_type);
+ gdb_printf ("unknown (%d)\n", u->stub_unwind.stub_type);
}
}
}
@@ -3085,7 +3072,7 @@ hppa_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
and LP64, but might show differences some day. */
set_gdbarch_long_long_bit (gdbarch, 64);
set_gdbarch_long_double_bit (gdbarch, 128);
- set_gdbarch_long_double_format (gdbarch, floatformats_ia64_quad);
+ set_gdbarch_long_double_format (gdbarch, floatformats_ieee_quad);
/* The following gdbarch vector elements do not depend on the address
size, or in any other gdbarch element previously set. */
@@ -3162,9 +3149,9 @@ hppa_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
{
hppa_gdbarch_tdep *tdep = (hppa_gdbarch_tdep *) gdbarch_tdep (gdbarch);
- fprintf_filtered (file, "bytes_per_address = %d\n",
- tdep->bytes_per_address);
- fprintf_filtered (file, "elf = %s\n", tdep->is_elf ? "yes" : "no");
+ gdb_printf (file, "bytes_per_address = %d\n",
+ tdep->bytes_per_address);
+ gdb_printf (file, "elf = %s\n", tdep->is_elf ? "yes" : "no");
}
void _initialize_hppa_tdep ();
diff --git a/gdb/i386-bsd-nat.c b/gdb/i386-bsd-nat.c
index 515e0a8d9ad..97a9738c52b 100644
--- a/gdb/i386-bsd-nat.c
+++ b/gdb/i386-bsd-nat.c
@@ -92,11 +92,9 @@ static int i386bsd_r_reg_offset[] =
#define GETREGS_SUPPLIES(regnum) \
((0 <= (regnum) && (regnum) <= 15))
-#ifdef HAVE_PT_GETXMMREGS
/* Set to 1 if the kernel supports PT_GETXMMREGS. Initialized to -1
so that we try PT_GETXMMREGS the first time around. */
static int have_ptrace_xmmregs = -1;
-#endif
/* Supply the general-purpose registers in GREGS, to REGCACHE. */
@@ -159,56 +157,11 @@ i386bsd_fetch_inferior_registers (struct regcache *regcache, int regnum)
return;
}
-#ifdef PT_GETFSBASE
- if (regnum == -1 || regnum == I386_FSBASE_REGNUM)
- {
- register_t base;
-
- if (gdb_ptrace (PT_GETFSBASE, ptid, (PTRACE_TYPE_ARG3) &base, 0) == -1)
- perror_with_name (_("Couldn't get segment register fs_base"));
-
- regcache->raw_supply (I386_FSBASE_REGNUM, &base);
- if (regnum != -1)
- return;
- }
-#endif
-#ifdef PT_GETGSBASE
- if (regnum == -1 || regnum == I386_GSBASE_REGNUM)
- {
- register_t base;
-
- if (gdb_ptrace (PT_GETGSBASE, ptid, (PTRACE_TYPE_ARG3) &base, 0) == -1)
- perror_with_name (_("Couldn't get segment register gs_base"));
-
- regcache->raw_supply (I386_GSBASE_REGNUM, &base);
- if (regnum != -1)
- return;
- }
-#endif
-
if (regnum == -1 || regnum >= I386_ST0_REGNUM)
{
struct fpreg fpregs;
-#ifdef HAVE_PT_GETXMMREGS
char xmmregs[512];
-#endif
-
-#ifdef PT_GETXSTATE_INFO
- if (x86bsd_xsave_len != 0)
- {
- void *xstateregs;
- xstateregs = alloca (x86bsd_xsave_len);
- if (gdb_ptrace (PT_GETXSTATE, ptid,
- (PTRACE_TYPE_ARG3) xstateregs, 0) == -1)
- perror_with_name (_("Couldn't get extended state status"));
-
- i387_supply_xsave (regcache, -1, xstateregs);
- return;
- }
-#endif
-
-#ifdef HAVE_PT_GETXMMREGS
if (have_ptrace_xmmregs != 0
&& gdb_ptrace(PT_GETXMMREGS, ptid,
(PTRACE_TYPE_ARG3) xmmregs, 0) == 0)
@@ -219,15 +172,12 @@ i386bsd_fetch_inferior_registers (struct regcache *regcache, int regnum)
else
{
have_ptrace_xmmregs = 0;
-#endif
if (gdb_ptrace (PT_GETFPREGS, ptid,
(PTRACE_TYPE_ARG3) &fpregs, 0) == -1)
perror_with_name (_("Couldn't get floating point status"));
i387_supply_fsave (regcache, -1, &fpregs);
-#ifdef HAVE_PT_GETXMMREGS
}
-#endif
}
}
@@ -255,60 +205,11 @@ i386bsd_store_inferior_registers (struct regcache *regcache, int regnum)
return;
}
-#ifdef PT_SETFSBASE
- if (regnum == -1 || regnum == I386_FSBASE_REGNUM)
- {
- register_t base;
-
- regcache->raw_collect (I386_FSBASE_REGNUM, &base);
-
- if (gdb_ptrace (PT_SETFSBASE, ptid, (PTRACE_TYPE_ARG3) &base, 0) == -1)
- perror_with_name (_("Couldn't write segment register fs_base"));
- if (regnum != -1)
- return;
- }
-#endif
-#ifdef PT_SETGSBASE
- if (regnum == -1 || regnum == I386_GSBASE_REGNUM)
- {
- register_t base;
-
- regcache->raw_collect (I386_GSBASE_REGNUM, &base);
-
- if (gdb_ptrace (PT_SETGSBASE, ptid, (PTRACE_TYPE_ARG3) &base, 0) == -1)
- perror_with_name (_("Couldn't write segment register gs_base"));
- if (regnum != -1)
- return;
- }
-#endif
-
if (regnum == -1 || regnum >= I386_ST0_REGNUM)
{
struct fpreg fpregs;
-#ifdef HAVE_PT_GETXMMREGS
char xmmregs[512];
-#endif
-
-#ifdef PT_GETXSTATE_INFO
- if (x86bsd_xsave_len != 0)
- {
- void *xstateregs;
-
- xstateregs = alloca (x86bsd_xsave_len);
- if (gdb_ptrace (PT_GETXSTATE, ptid,
- (PTRACE_TYPE_ARG3) xstateregs, 0) == -1)
- perror_with_name (_("Couldn't get extended state status"));
- i387_collect_xsave (regcache, -1, xstateregs, 0);
-
- if (gdb_ptrace (PT_SETXSTATE, ptid, (PTRACE_TYPE_ARG3) xstateregs,
- x86bsd_xsave_len) == -1)
- perror_with_name (_("Couldn't write extended state status"));
- return;
- }
-#endif
-
-#ifdef HAVE_PT_GETXMMREGS
if (have_ptrace_xmmregs != 0
&& gdb_ptrace(PT_GETXMMREGS, ptid,
(PTRACE_TYPE_ARG3) xmmregs, 0) == 0)
@@ -324,7 +225,6 @@ i386bsd_store_inferior_registers (struct regcache *regcache, int regnum)
else
{
have_ptrace_xmmregs = 0;
-#endif
if (gdb_ptrace (PT_GETFPREGS, ptid,
(PTRACE_TYPE_ARG3) &fpregs, 0) == -1)
perror_with_name (_("Couldn't get floating point status"));
@@ -334,9 +234,7 @@ i386bsd_store_inferior_registers (struct regcache *regcache, int regnum)
if (gdb_ptrace (PT_SETFPREGS, ptid,
(PTRACE_TYPE_ARG3) &fpregs, 0) == -1)
perror_with_name (_("Couldn't write floating point status"));
-#ifdef HAVE_PT_GETXMMREGS
}
-#endif
}
}
@@ -350,11 +248,7 @@ _initialize_i386bsd_nat ()
system header files and sysctl(3) to get at the relevant
information. */
-#if defined (__FreeBSD_version) && __FreeBSD_version >= 400011
-#define SC_REG_OFFSET i386fbsd4_sc_reg_offset
-#elif defined (__FreeBSD_version) && __FreeBSD_version >= 300005
-#define SC_REG_OFFSET i386fbsd_sc_reg_offset
-#elif defined (OpenBSD)
+#if defined (OpenBSD)
#define SC_REG_OFFSET i386obsd_sc_reg_offset
#endif
diff --git a/gdb/i386-fbsd-nat.c b/gdb/i386-fbsd-nat.c
index 61717c65b18..0a00aef5901 100644
--- a/gdb/i386-fbsd-nat.c
+++ b/gdb/i386-fbsd-nat.c
@@ -27,31 +27,200 @@
#include <sys/sysctl.h>
#include <sys/user.h>
-#include "fbsd-nat.h"
#include "i386-tdep.h"
+#include "i386-fbsd-tdep.h"
+#include "i387-tdep.h"
#include "x86-nat.h"
#include "gdbsupport/x86-xstate.h"
-#include "x86-bsd-nat.h"
-#include "i386-bsd-nat.h"
+#include "x86-fbsd-nat.h"
-class i386_fbsd_nat_target final
- : public i386_bsd_nat_target<fbsd_nat_target>
+class i386_fbsd_nat_target final : public x86_fbsd_nat_target
{
public:
- /* Add some extra features to the common *BSD/i386 target. */
-#ifdef PT_GETXSTATE_INFO
+ void fetch_registers (struct regcache *, int) override;
+ void store_registers (struct regcache *, int) override;
+
const struct target_desc *read_description () override;
-#endif
void resume (ptid_t, int, enum gdb_signal) override;
-
-#if defined(HAVE_PT_GETDBREGS) && defined(USE_SIGTRAP_SIGINFO)
- bool supports_stopped_by_hw_breakpoint () override;
-#endif
};
static i386_fbsd_nat_target the_i386_fbsd_nat_target;
+#ifdef PT_GETXSTATE_INFO
+static size_t xsave_len;
+#endif
+
+static int have_ptrace_xmmregs;
+
+/* Fetch register REGNUM from the inferior. If REGNUM is -1, do this
+ for all registers. */
+
+void
+i386_fbsd_nat_target::fetch_registers (struct regcache *regcache, int regnum)
+{
+ struct gdbarch *gdbarch = regcache->arch ();
+ pid_t pid = get_ptrace_pid (regcache->ptid ());
+
+ if (fetch_register_set<struct reg> (regcache, regnum, PT_GETREGS,
+ &i386_fbsd_gregset))
+ {
+ if (regnum != -1)
+ return;
+ }
+
+#ifdef PT_GETFSBASE
+ if (regnum == -1 || regnum == I386_FSBASE_REGNUM)
+ {
+ register_t base;
+
+ if (ptrace (PT_GETFSBASE, pid, (PTRACE_TYPE_ARG3) &base, 0) == -1)
+ perror_with_name (_("Couldn't get segment register fs_base"));
+
+ regcache->raw_supply (I386_FSBASE_REGNUM, &base);
+ if (regnum != -1)
+ return;
+ }
+#endif
+#ifdef PT_GETGSBASE
+ if (regnum == -1 || regnum == I386_GSBASE_REGNUM)
+ {
+ register_t base;
+
+ if (ptrace (PT_GETGSBASE, pid, (PTRACE_TYPE_ARG3) &base, 0) == -1)
+ perror_with_name (_("Couldn't get segment register gs_base"));
+
+ regcache->raw_supply (I386_GSBASE_REGNUM, &base);
+ if (regnum != -1)
+ return;
+ }
+#endif
+
+ /* There is no i386_fxsave_supplies or i386_xsave_supplies.
+ Instead, the earlier register sets return early if the request
+ was for a specific register that was already satisified to avoid
+ fetching the FPU/XSAVE state unnecessarily. */
+
+#ifdef PT_GETXSTATE_INFO
+ if (xsave_len != 0)
+ {
+ void *xstateregs = alloca (xsave_len);
+
+ if (ptrace (PT_GETXSTATE, pid, (PTRACE_TYPE_ARG3) xstateregs, 0) == -1)
+ perror_with_name (_("Couldn't get extended state status"));
+
+ i387_supply_xsave (regcache, regnum, xstateregs);
+ return;
+ }
+#endif
+ if (have_ptrace_xmmregs != 0)
+ {
+ char xmmregs[I387_SIZEOF_FXSAVE];
+
+ if (ptrace(PT_GETXMMREGS, pid, (PTRACE_TYPE_ARG3) xmmregs, 0) == -1)
+ perror_with_name (_("Couldn't get XMM registers"));
+
+ i387_supply_fxsave (regcache, regnum, xmmregs);
+ return;
+ }
+
+ struct fpreg fpregs;
+
+ if (ptrace (PT_GETFPREGS, pid, (PTRACE_TYPE_ARG3) &fpregs, 0) == -1)
+ perror_with_name (_("Couldn't get floating point status"));
+
+ i387_supply_fsave (regcache, regnum, &fpregs);
+}
+
+/* Store register REGNUM back into the inferior. If REGNUM is -1, do
+ this for all registers. */
+
+void
+i386_fbsd_nat_target::store_registers (struct regcache *regcache, int regnum)
+{
+ struct gdbarch *gdbarch = regcache->arch ();
+ pid_t pid = get_ptrace_pid (regcache->ptid ());
+
+ if (store_register_set<struct reg> (regcache, regnum, PT_GETREGS, PT_SETREGS,
+ &i386_fbsd_gregset))
+ {
+ if (regnum != -1)
+ return;
+ }
+
+#ifdef PT_SETFSBASE
+ if (regnum == -1 || regnum == I386_FSBASE_REGNUM)
+ {
+ register_t base;
+
+ regcache->raw_collect (I386_FSBASE_REGNUM, &base);
+
+ if (ptrace (PT_SETFSBASE, pid, (PTRACE_TYPE_ARG3) &base, 0) == -1)
+ perror_with_name (_("Couldn't write segment register fs_base"));
+ if (regnum != -1)
+ return;
+ }
+#endif
+#ifdef PT_SETGSBASE
+ if (regnum == -1 || regnum == I386_GSBASE_REGNUM)
+ {
+ register_t base;
+
+ regcache->raw_collect (I386_GSBASE_REGNUM, &base);
+
+ if (ptrace (PT_SETGSBASE, pid, (PTRACE_TYPE_ARG3) &base, 0) == -1)
+ perror_with_name (_("Couldn't write segment register gs_base"));
+ if (regnum != -1)
+ return;
+ }
+#endif
+
+ /* There is no i386_fxsave_supplies or i386_xsave_supplies.
+ Instead, the earlier register sets return early if the request
+ was for a specific register that was already satisified to avoid
+ fetching the FPU/XSAVE state unnecessarily. */
+
+#ifdef PT_GETXSTATE_INFO
+ if (xsave_len != 0)
+ {
+ void *xstateregs = alloca (xsave_len);
+
+ if (ptrace (PT_GETXSTATE, pid, (PTRACE_TYPE_ARG3) xstateregs, 0) == -1)
+ perror_with_name (_("Couldn't get extended state status"));
+
+ i387_collect_xsave (regcache, regnum, xstateregs, 0);
+
+ if (ptrace (PT_SETXSTATE, pid, (PTRACE_TYPE_ARG3) xstateregs, xsave_len)
+ == -1)
+ perror_with_name (_("Couldn't write extended state status"));
+ return;
+ }
+#endif
+ if (have_ptrace_xmmregs != 0)
+ {
+ char xmmregs[I387_SIZEOF_FXSAVE];
+
+ if (ptrace(PT_GETXMMREGS, pid, (PTRACE_TYPE_ARG3) xmmregs, 0) == -1)
+ perror_with_name (_("Couldn't get XMM registers"));
+
+ i387_collect_fxsave (regcache, regnum, xmmregs);
+
+ if (ptrace (PT_SETXMMREGS, pid, (PTRACE_TYPE_ARG3) xmmregs, 0) == -1)
+ perror_with_name (_("Couldn't write XMM registers"));
+ return;
+ }
+
+ struct fpreg fpregs;
+
+ if (ptrace (PT_GETFPREGS, pid, (PTRACE_TYPE_ARG3) &fpregs, 0) == -1)
+ perror_with_name (_("Couldn't get floating point status"));
+
+ i387_collect_fsave (regcache, regnum, &fpregs);
+
+ if (ptrace (PT_SETFPREGS, pid, (PTRACE_TYPE_ARG3) &fpregs, 0) == -1)
+ perror_with_name (_("Couldn't write floating point status"));
+}
+
/* Resume execution of the inferior process. If STEP is nonzero,
single-step it. If SIGNAL is nonzero, give it that signal. */
@@ -135,15 +304,18 @@ i386fbsd_supply_pcb (struct regcache *regcache, struct pcb *pcb)
}
-#ifdef PT_GETXSTATE_INFO
/* Implement the read_description method. */
const struct target_desc *
i386_fbsd_nat_target::read_description ()
{
+#ifdef PT_GETXSTATE_INFO
static int xsave_probed;
static uint64_t xcr0;
+#endif
+ static int xmm_probed;
+#ifdef PT_GETXSTATE_INFO
if (!xsave_probed)
{
struct ptrace_xstate_info info;
@@ -151,28 +323,31 @@ i386_fbsd_nat_target::read_description ()
if (ptrace (PT_GETXSTATE_INFO, inferior_ptid.pid (),
(PTRACE_TYPE_ARG3) &info, sizeof (info)) == 0)
{
- x86bsd_xsave_len = info.xsave_len;
+ xsave_len = info.xsave_len;
xcr0 = info.xsave_mask;
}
xsave_probed = 1;
}
- if (x86bsd_xsave_len == 0)
- xcr0 = X86_XSTATE_SSE_MASK;
-
- return i386_target_description (xcr0, true);
-}
+ if (xsave_len != 0)
+ return i386_target_description (xcr0, true);
#endif
-#if defined(HAVE_PT_GETDBREGS) && defined(USE_SIGTRAP_SIGINFO)
-/* Implement the supports_stopped_by_hw_breakpoints method. */
+ if (!xmm_probed)
+ {
+ char xmmregs[I387_SIZEOF_FXSAVE];
-bool
-i386_fbsd_nat_target::supports_stopped_by_hw_breakpoint ()
-{
- return true;
+ if (ptrace (PT_GETXMMREGS, inferior_ptid.pid (),
+ (PTRACE_TYPE_ARG3) xmmregs, 0) == 0)
+ have_ptrace_xmmregs = 1;
+ xmm_probed = 1;
+ }
+
+ if (have_ptrace_xmmregs)
+ return i386_target_description (X86_XSTATE_SSE_MASK, true);
+
+ return i386_target_description (X86_XSTATE_X87_MASK, true);
}
-#endif
void _initialize_i386fbsd_nat ();
void
@@ -182,30 +357,4 @@ _initialize_i386fbsd_nat ()
/* Support debugging kernel virtual memory images. */
bsd_kvm_add_target (i386fbsd_supply_pcb);
-
-#ifdef KERN_PROC_SIGTRAMP
- /* Normally signal frames are detected via i386fbsd_sigtramp_p.
- However, FreeBSD 9.2 through 10.1 do not include the page holding
- the signal code in core dumps. These releases do provide a
- kern.proc.sigtramp.<pid> sysctl that returns the location of the
- signal trampoline for a running process. We fetch the location
- of the current (gdb) process and use this to identify signal
- frames in core dumps from these releases. */
- {
- int mib[4];
- struct kinfo_sigtramp kst;
- size_t len;
-
- mib[0] = CTL_KERN;
- mib[1] = KERN_PROC;
- mib[2] = KERN_PROC_SIGTRAMP;
- mib[3] = getpid ();
- len = sizeof (kst);
- if (sysctl (mib, 4, &kst, &len, NULL, 0) == 0)
- {
- i386fbsd_sigtramp_start_addr = (uintptr_t) kst.ksigtramp_start;
- i386fbsd_sigtramp_end_addr = (uintptr_t) kst.ksigtramp_end;
- }
- }
-#endif
}
diff --git a/gdb/i386-fbsd-tdep.c b/gdb/i386-fbsd-tdep.c
index 1363f62cbf0..d68498cd5e9 100644
--- a/gdb/i386-fbsd-tdep.c
+++ b/gdb/i386-fbsd-tdep.c
@@ -18,11 +18,11 @@
along with this program. If not, see <http://www.gnu.org/licenses/>. */
#include "defs.h"
-#include "arch-utils.h"
-#include "gdbcore.h"
#include "osabi.h"
#include "regcache.h"
#include "regset.h"
+#include "trad-frame.h"
+#include "tramp-frame.h"
#include "i386-fbsd-tdep.h"
#include "gdbsupport/x86-xstate.h"
@@ -32,196 +32,213 @@
#include "solib-svr4.h"
#include "inferior.h"
-/* Support for signal handlers. */
+/* The general-purpose regset consists of 19 32-bit slots. */
+#define I386_FBSD_SIZEOF_GREGSET (19 * 4)
-/* Return whether THIS_FRAME corresponds to a FreeBSD sigtramp
- routine. */
+/* The segment base register set consists of 2 32-bit registers. */
+#define I386_FBSD_SIZEOF_SEGBASES_REGSET (2 * 4)
-/* FreeBSD/i386 supports three different signal trampolines, one for
- versions before 4.0, a second for 4.x, and a third for 5.0 and
- later. To complicate matters, FreeBSD/i386 binaries running under
- an amd64 kernel use a different set of trampolines. These
- trampolines differ from the i386 kernel trampolines in that they
- omit a middle section that conditionally restores %gs. */
+/* Register maps. */
-static const gdb_byte i386fbsd_sigtramp_start[] =
+static const struct regcache_map_entry i386_fbsd_gregmap[] =
{
- 0x8d, 0x44, 0x24, 0x20, /* lea SIGF_UC(%esp),%eax */
- 0x50 /* pushl %eax */
+ { 1, I386_FS_REGNUM, 4 },
+ { 1, I386_ES_REGNUM, 4 },
+ { 1, I386_DS_REGNUM, 4 },
+ { 1, I386_EDI_REGNUM, 0 },
+ { 1, I386_ESI_REGNUM, 0 },
+ { 1, I386_EBP_REGNUM, 0 },
+ { 1, REGCACHE_MAP_SKIP, 4 }, /* isp */
+ { 1, I386_EBX_REGNUM, 0 },
+ { 1, I386_EDX_REGNUM, 0 },
+ { 1, I386_ECX_REGNUM, 0 },
+ { 1, I386_EAX_REGNUM, 0 },
+ { 1, REGCACHE_MAP_SKIP, 4 }, /* trapno */
+ { 1, REGCACHE_MAP_SKIP, 4 }, /* err */
+ { 1, I386_EIP_REGNUM, 0 },
+ { 1, I386_CS_REGNUM, 4 },
+ { 1, I386_EFLAGS_REGNUM, 0 },
+ { 1, I386_ESP_REGNUM, 0 },
+ { 1, I386_SS_REGNUM, 4 },
+ { 1, I386_GS_REGNUM, 4 },
+ { 0 }
};
-static const gdb_byte i386fbsd_sigtramp_middle[] =
+static const struct regcache_map_entry i386_fbsd_segbases_regmap[] =
{
- 0xf7, 0x40, 0x54, 0x00, 0x00, 0x02, 0x00,
- /* testl $PSL_VM,UC_EFLAGS(%eax) */
- 0x75, 0x03, /* jne +3 */
- 0x8e, 0x68, 0x14 /* mov UC_GS(%eax),%gs */
+ { 1, I386_FSBASE_REGNUM, 0 },
+ { 1, I386_GSBASE_REGNUM, 0 },
+ { 0 }
};
-static const gdb_byte i386fbsd_sigtramp_end[] =
-{
- 0xb8, 0xa1, 0x01, 0x00, 0x00, /* movl $SYS_sigreturn,%eax */
- 0x50, /* pushl %eax */
- 0xcd, 0x80 /* int $0x80 */
-};
+/* This layout including fsbase and gsbase was adopted in FreeBSD
+ 8.0. */
-static const gdb_byte i386fbsd_freebsd4_sigtramp_start[] =
+static const struct regcache_map_entry i386_fbsd_mcregmap[] =
{
- 0x8d, 0x44, 0x24, 0x14, /* lea SIGF_UC4(%esp),%eax */
- 0x50 /* pushl %eax */
+ { 1, REGCACHE_MAP_SKIP, 4 }, /* mc_onstack */
+ { 1, I386_GS_REGNUM, 4 },
+ { 1, I386_FS_REGNUM, 4 },
+ { 1, I386_ES_REGNUM, 4 },
+ { 1, I386_DS_REGNUM, 4 },
+ { 1, I386_EDI_REGNUM, 0 },
+ { 1, I386_ESI_REGNUM, 0 },
+ { 1, I386_EBP_REGNUM, 0 },
+ { 1, REGCACHE_MAP_SKIP, 4 }, /* isp */
+ { 1, I386_EBX_REGNUM, 0 },
+ { 1, I386_EDX_REGNUM, 0 },
+ { 1, I386_ECX_REGNUM, 0 },
+ { 1, I386_EAX_REGNUM, 0 },
+ { 1, REGCACHE_MAP_SKIP, 4 }, /* mc_trapno */
+ { 1, REGCACHE_MAP_SKIP, 4 }, /* mc_err */
+ { 1, I386_EIP_REGNUM, 0 },
+ { 1, I386_CS_REGNUM, 4 },
+ { 1, I386_EFLAGS_REGNUM, 0 },
+ { 1, I386_ESP_REGNUM, 0 },
+ { 1, I386_SS_REGNUM, 4 },
+ { 1, REGCACHE_MAP_SKIP, 4 }, /* mc_len */
+ { 1, REGCACHE_MAP_SKIP, 4 }, /* mc_fpformat */
+ { 1, REGCACHE_MAP_SKIP, 4 }, /* mc_ownedfp */
+ { 1, REGCACHE_MAP_SKIP, 4 }, /* mc_flags */
+ { 128, REGCACHE_MAP_SKIP, 4 },/* mc_fpstate */
+ { 1, I386_FSBASE_REGNUM, 0 },
+ { 1, I386_GSBASE_REGNUM, 0 },
+ { 0 }
};
-static const gdb_byte i386fbsd_freebsd4_sigtramp_middle[] =
-{
- 0xf7, 0x40, 0x54, 0x00, 0x00, 0x02, 0x00,
- /* testl $PSL_VM,UC4_EFLAGS(%eax) */
- 0x75, 0x03, /* jne +3 */
- 0x8e, 0x68, 0x14 /* mov UC4_GS(%eax),%gs */
-};
+/* Register set definitions. */
-static const gdb_byte i386fbsd_freebsd4_sigtramp_end[] =
+const struct regset i386_fbsd_gregset =
{
- 0xb8, 0x58, 0x01, 0x00, 0x00, /* movl $344,%eax */
- 0x50, /* pushl %eax */
- 0xcd, 0x80 /* int $0x80 */
+ i386_fbsd_gregmap, regcache_supply_regset, regcache_collect_regset
};
-static const gdb_byte i386fbsd_osigtramp_start[] =
+const struct regset i386_fbsd_segbases_regset =
{
- 0x8d, 0x44, 0x24, 0x14, /* lea SIGF_SC(%esp),%eax */
- 0x50 /* pushl %eax */
+ i386_fbsd_segbases_regmap, regcache_supply_regset, regcache_collect_regset
};
-static const gdb_byte i386fbsd_osigtramp_middle[] =
-{
- 0xf7, 0x40, 0x18, 0x00, 0x00, 0x02, 0x00,
- /* testl $PSL_VM,SC_PS(%eax) */
- 0x75, 0x03, /* jne +3 */
- 0x8e, 0x68, 0x44 /* mov SC_GS(%eax),%gs */
-};
+/* Support for signal handlers. */
-static const gdb_byte i386fbsd_osigtramp_end[] =
-{
- 0xb8, 0x67, 0x00, 0x00, 0x00, /* movl $103,%eax */
- 0x50, /* pushl %eax */
- 0xcd, 0x80 /* int $0x80 */
-};
+/* In a signal frame, esp points to a 'struct sigframe' which is
+ defined as:
+
+ struct sigframe {
+ register_t sf_signum;
+ register_t sf_siginfo;
+ register_t sf_ucontext;
+ register_t sf_addr;
+ union {
+ __siginfohandler_t *sf_action;
+ __sighandler_t *sf_handler;
+ } sf_ahu;
+ ucontext_t sf_uc;
+ ...
+ }
+
+ ucontext_t is defined as:
+
+ struct __ucontext {
+ sigset_t uc_sigmask;
+ mcontext_t uc_mcontext;
+ ...
+ };
+
+ The mcontext_t contains the general purpose register set as well
+ as the floating point or XSAVE state. */
+
+/* NB: There is a 12 byte padding hole between sf_ahu and sf_uc. */
+#define I386_SIGFRAME_UCONTEXT_OFFSET 32
+#define I386_UCONTEXT_MCONTEXT_OFFSET 16
+#define I386_SIZEOF_MCONTEXT_T 640
-/* The three different trampolines are all the same size. */
-gdb_static_assert (sizeof i386fbsd_sigtramp_start
- == sizeof i386fbsd_freebsd4_sigtramp_start);
-gdb_static_assert (sizeof i386fbsd_sigtramp_start
- == sizeof i386fbsd_osigtramp_start);
-gdb_static_assert (sizeof i386fbsd_sigtramp_middle
- == sizeof i386fbsd_freebsd4_sigtramp_middle);
-gdb_static_assert (sizeof i386fbsd_sigtramp_middle
- == sizeof i386fbsd_osigtramp_middle);
-gdb_static_assert (sizeof i386fbsd_sigtramp_end
- == sizeof i386fbsd_freebsd4_sigtramp_end);
-gdb_static_assert (sizeof i386fbsd_sigtramp_end
- == sizeof i386fbsd_osigtramp_end);
-
-/* We assume that the middle is the largest chunk below. */
-gdb_static_assert (sizeof i386fbsd_sigtramp_middle
- > sizeof i386fbsd_sigtramp_start);
-gdb_static_assert (sizeof i386fbsd_sigtramp_middle
- > sizeof i386fbsd_sigtramp_end);
-
-static int
-i386fbsd_sigtramp_p (struct frame_info *this_frame)
+/* Implement the "init" method of struct tramp_frame. */
+
+static void
+i386_fbsd_sigframe_init (const struct tramp_frame *self,
+ struct frame_info *this_frame,
+ struct trad_frame_cache *this_cache,
+ CORE_ADDR func)
{
- CORE_ADDR pc = get_frame_pc (this_frame);
- gdb_byte buf[sizeof i386fbsd_sigtramp_middle];
- const gdb_byte *middle, *end;
-
- /* Look for a matching start. */
- if (!safe_frame_unwind_memory (this_frame, pc,
- {buf, sizeof i386fbsd_sigtramp_start}))
- return 0;
- if (memcmp (buf, i386fbsd_sigtramp_start, sizeof i386fbsd_sigtramp_start)
- == 0)
- {
- middle = i386fbsd_sigtramp_middle;
- end = i386fbsd_sigtramp_end;
- }
- else if (memcmp (buf, i386fbsd_freebsd4_sigtramp_start,
- sizeof i386fbsd_freebsd4_sigtramp_start) == 0)
- {
- middle = i386fbsd_freebsd4_sigtramp_middle;
- end = i386fbsd_freebsd4_sigtramp_end;
- }
- else if (memcmp (buf, i386fbsd_osigtramp_start,
- sizeof i386fbsd_osigtramp_start) == 0)
- {
- middle = i386fbsd_osigtramp_middle;
- end = i386fbsd_osigtramp_end;
- }
- else
- return 0;
-
- /* Since the end is shorter than the middle, check for a matching end
- next. */
- pc += sizeof i386fbsd_sigtramp_start;
- if (!safe_frame_unwind_memory (this_frame, pc,
- {buf, sizeof i386fbsd_sigtramp_end}))
- return 0;
- if (memcmp (buf, end, sizeof i386fbsd_sigtramp_end) == 0)
- return 1;
-
- /* If the end didn't match, check for a matching middle. */
- if (!safe_frame_unwind_memory (this_frame, pc,
- {buf, sizeof i386fbsd_sigtramp_middle}))
- return 0;
- if (memcmp (buf, middle, sizeof i386fbsd_sigtramp_middle) != 0)
- return 0;
-
- /* The middle matched, check for a matching end. */
- pc += sizeof i386fbsd_sigtramp_middle;
- if (!safe_frame_unwind_memory (this_frame, pc,
- {buf, sizeof i386fbsd_sigtramp_end}))
- return 0;
- if (memcmp (buf, end, sizeof i386fbsd_sigtramp_end) != 0)
- return 0;
-
- return 1;
+ CORE_ADDR sp = get_frame_register_unsigned (this_frame, I386_ESP_REGNUM);
+ CORE_ADDR mcontext_addr
+ = (sp
+ + I386_SIGFRAME_UCONTEXT_OFFSET
+ + I386_UCONTEXT_MCONTEXT_OFFSET);
+
+ trad_frame_set_reg_regmap (this_cache, i386_fbsd_mcregmap, mcontext_addr,
+ I386_SIZEOF_MCONTEXT_T);
+
+ /* Don't bother with floating point or XSAVE state for now. The
+ current helper routines for parsing FXSAVE and XSAVE state only
+ work with regcaches. This could perhaps create a temporary
+ regcache, collect the register values from mc_fpstate and
+ mc_xfpustate, and then set register values in the trad_frame. */
+
+ trad_frame_set_id (this_cache, frame_id_build (sp, func));
}
-/* FreeBSD 3.0-RELEASE or later. */
-
-/* From <machine/reg.h>. */
-static int i386fbsd_r_reg_offset[] =
+static const struct tramp_frame i386_fbsd_sigframe =
{
- 9 * 4, 8 * 4, 7 * 4, 6 * 4, /* %eax, %ecx, %edx, %ebx */
- 15 * 4, 4 * 4, /* %esp, %ebp */
- 3 * 4, 2 * 4, /* %esi, %edi */
- 12 * 4, 14 * 4, /* %eip, %eflags */
- 13 * 4, 16 * 4, /* %cs, %ss */
- 1 * 4, 0 * 4, -1, -1 /* %ds, %es, %fs, %gs */
+ SIGTRAMP_FRAME,
+ 1,
+ {
+ {0x8d, ULONGEST_MAX}, /* lea SIGF_UC(%esp),%eax */
+ {0x44, ULONGEST_MAX},
+ {0x24, ULONGEST_MAX},
+ {0x20, ULONGEST_MAX},
+ {0x50, ULONGEST_MAX}, /* pushl %eax */
+ {0xf7, ULONGEST_MAX}, /* testl $PSL_VM,UC_EFLAGS(%eax) */
+ {0x40, ULONGEST_MAX},
+ {0x54, ULONGEST_MAX},
+ {0x00, ULONGEST_MAX},
+ {0x00, ULONGEST_MAX},
+ {0x02, ULONGEST_MAX},
+ {0x00, ULONGEST_MAX},
+ {0x75, ULONGEST_MAX}, /* jne +3 */
+ {0x03, ULONGEST_MAX},
+ {0x8e, ULONGEST_MAX}, /* mov UC_GS(%eax),%gs */
+ {0x68, ULONGEST_MAX},
+ {0x14, ULONGEST_MAX},
+ {0xb8, ULONGEST_MAX}, /* movl $SYS_sigreturn,%eax */
+ {0xa1, ULONGEST_MAX},
+ {0x01, ULONGEST_MAX},
+ {0x00, ULONGEST_MAX},
+ {0x00, ULONGEST_MAX},
+ {0x50, ULONGEST_MAX}, /* pushl %eax */
+ {0xcd, ULONGEST_MAX}, /* int $0x80 */
+ {0x80, ULONGEST_MAX},
+ {TRAMP_SENTINEL_INSN, ULONGEST_MAX}
+ },
+ i386_fbsd_sigframe_init
};
-/* Sigtramp routine location. */
-CORE_ADDR i386fbsd_sigtramp_start_addr;
-CORE_ADDR i386fbsd_sigtramp_end_addr;
+/* FreeBSD/i386 binaries running under an amd64 kernel use a different
+ trampoline. This trampoline differs from the i386 kernel trampoline
+ in that it omits a middle section that conditionally restores
+ %gs. */
-/* From <machine/signal.h>. */
-int i386fbsd_sc_reg_offset[] =
+static const struct tramp_frame i386_fbsd64_sigframe =
{
- 8 + 14 * 4, /* %eax */
- 8 + 13 * 4, /* %ecx */
- 8 + 12 * 4, /* %edx */
- 8 + 11 * 4, /* %ebx */
- 8 + 0 * 4, /* %esp */
- 8 + 1 * 4, /* %ebp */
- 8 + 10 * 4, /* %esi */
- 8 + 9 * 4, /* %edi */
- 8 + 3 * 4, /* %eip */
- 8 + 4 * 4, /* %eflags */
- 8 + 7 * 4, /* %cs */
- 8 + 8 * 4, /* %ss */
- 8 + 6 * 4, /* %ds */
- 8 + 5 * 4, /* %es */
- 8 + 15 * 4, /* %fs */
- 8 + 16 * 4 /* %gs */
+ SIGTRAMP_FRAME,
+ 1,
+ {
+ {0x8d, ULONGEST_MAX}, /* lea SIGF_UC(%esp),%eax */
+ {0x44, ULONGEST_MAX},
+ {0x24, ULONGEST_MAX},
+ {0x20, ULONGEST_MAX},
+ {0x50, ULONGEST_MAX}, /* pushl %eax */
+ {0xb8, ULONGEST_MAX}, /* movl $SYS_sigreturn,%eax */
+ {0xa1, ULONGEST_MAX},
+ {0x01, ULONGEST_MAX},
+ {0x00, ULONGEST_MAX},
+ {0x00, ULONGEST_MAX},
+ {0x50, ULONGEST_MAX}, /* pushl %eax */
+ {0xcd, ULONGEST_MAX}, /* int $0x80 */
+ {0x80, ULONGEST_MAX},
+ {TRAMP_SENTINEL_INSN, ULONGEST_MAX}
+ },
+ i386_fbsd_sigframe_init
};
/* Get XSAVE extended state xcr0 from core dump. */
@@ -310,10 +327,13 @@ i386fbsd_iterate_over_regset_sections (struct gdbarch *gdbarch,
{
i386_gdbarch_tdep *tdep = (i386_gdbarch_tdep *) gdbarch_tdep (gdbarch);
- cb (".reg", tdep->sizeof_gregset, tdep->sizeof_gregset, &i386_gregset, NULL,
- cb_data);
+ cb (".reg", I386_FBSD_SIZEOF_GREGSET, I386_FBSD_SIZEOF_GREGSET,
+ &i386_fbsd_gregset, NULL, cb_data);
cb (".reg2", tdep->sizeof_fpregset, tdep->sizeof_fpregset, &i386_fpregset,
NULL, cb_data);
+ cb (".reg-x86-segbases", I386_FBSD_SIZEOF_SEGBASES_REGSET,
+ I386_FBSD_SIZEOF_SEGBASES_REGSET, &i386_fbsd_segbases_regset,
+ "segment bases", cb_data);
if (tdep->xcr0 & X86_XSTATE_AVX)
cb (".reg-xstate", X86_XSTATE_SIZE (tdep->xcr0),
@@ -327,19 +347,15 @@ static CORE_ADDR
i386fbsd_get_thread_local_address (struct gdbarch *gdbarch, ptid_t ptid,
CORE_ADDR lm_addr, CORE_ADDR offset)
{
- i386_gdbarch_tdep *tdep = (i386_gdbarch_tdep *) gdbarch_tdep (gdbarch);
struct regcache *regcache;
- if (tdep->fsbase_regnum == -1)
- error (_("Unable to fetch %%gsbase"));
-
regcache = get_thread_arch_regcache (current_inferior ()->process_target (),
ptid, gdbarch);
- target_fetch_registers (regcache, tdep->fsbase_regnum + 1);
+ target_fetch_registers (regcache, I386_GSBASE_REGNUM);
ULONGEST gsbase;
- if (regcache->cooked_read (tdep->fsbase_regnum + 1, &gsbase) != REG_VALID)
+ if (regcache->cooked_read (I386_GSBASE_REGNUM, &gsbase) != REG_VALID)
error (_("Unable to fetch %%gsbase"));
CORE_ADDR dtv_addr = gsbase + gdbarch_ptr_bit (gdbarch) / 8;
@@ -351,91 +367,24 @@ i386fbsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
{
i386_gdbarch_tdep *tdep = (i386_gdbarch_tdep *) gdbarch_tdep (gdbarch);
+ /* Generic FreeBSD support. */
+ fbsd_init_abi (info, gdbarch);
+
/* Obviously FreeBSD is BSD-based. */
i386bsd_init_abi (info, gdbarch);
- /* FreeBSD has a different `struct reg', and reserves some space for
- its FPU emulator in `struct fpreg'. */
- tdep->gregset_reg_offset = i386fbsd_r_reg_offset;
- tdep->gregset_num_regs = ARRAY_SIZE (i386fbsd_r_reg_offset);
- tdep->sizeof_gregset = 18 * 4;
+ /* FreeBSD reserves some space for its FPU emulator in
+ `struct fpreg'. */
tdep->sizeof_fpregset = 176;
/* FreeBSD uses -freg-struct-return by default. */
tdep->struct_return = reg_struct_return;
- tdep->sigtramp_p = i386fbsd_sigtramp_p;
-
- /* FreeBSD uses a different memory layout. */
- tdep->sigtramp_start = i386fbsd_sigtramp_start_addr;
- tdep->sigtramp_end = i386fbsd_sigtramp_end_addr;
-
- /* FreeBSD has a more complete `struct sigcontext'. */
- tdep->sc_reg_offset = i386fbsd_sc_reg_offset;
- tdep->sc_num_regs = ARRAY_SIZE (i386fbsd_sc_reg_offset);
+ tramp_frame_prepend_unwinder (gdbarch, &i386_fbsd_sigframe);
+ tramp_frame_prepend_unwinder (gdbarch, &i386_fbsd64_sigframe);
i386_elf_init_abi (info, gdbarch);
- /* FreeBSD uses SVR4-style shared libraries. */
- set_solib_svr4_fetch_link_map_offsets
- (gdbarch, svr4_ilp32_fetch_link_map_offsets);
-}
-
-/* FreeBSD 4.0-RELEASE or later. */
-
-/* From <machine/reg.h>. */
-static int i386fbsd4_r_reg_offset[] =
-{
- 10 * 4, 9 * 4, 8 * 4, 7 * 4, /* %eax, %ecx, %edx, %ebx */
- 16 * 4, 5 * 4, /* %esp, %ebp */
- 4 * 4, 3 * 4, /* %esi, %edi */
- 13 * 4, 15 * 4, /* %eip, %eflags */
- 14 * 4, 17 * 4, /* %cs, %ss */
- 2 * 4, 1 * 4, 0 * 4, 18 * 4 /* %ds, %es, %fs, %gs */
-};
-
-/* From <machine/signal.h>. */
-int i386fbsd4_sc_reg_offset[] =
-{
- 20 + 11 * 4, /* %eax */
- 20 + 10 * 4, /* %ecx */
- 20 + 9 * 4, /* %edx */
- 20 + 8 * 4, /* %ebx */
- 20 + 17 * 4, /* %esp */
- 20 + 6 * 4, /* %ebp */
- 20 + 5 * 4, /* %esi */
- 20 + 4 * 4, /* %edi */
- 20 + 14 * 4, /* %eip */
- 20 + 16 * 4, /* %eflags */
- 20 + 15 * 4, /* %cs */
- 20 + 18 * 4, /* %ss */
- 20 + 3 * 4, /* %ds */
- 20 + 2 * 4, /* %es */
- 20 + 1 * 4, /* %fs */
- 20 + 0 * 4 /* %gs */
-};
-
-static void
-i386fbsd4_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
-{
- i386_gdbarch_tdep *tdep = (i386_gdbarch_tdep *) gdbarch_tdep (gdbarch);
-
- /* Generic FreeBSD support. */
- fbsd_init_abi (info, gdbarch);
-
- /* Inherit stuff from older releases. We assume that FreeBSD
- 4.0-RELEASE always uses ELF. */
- i386fbsd_init_abi (info, gdbarch);
-
- /* FreeBSD 4.0 introduced a new `struct reg'. */
- tdep->gregset_reg_offset = i386fbsd4_r_reg_offset;
- tdep->gregset_num_regs = ARRAY_SIZE (i386fbsd4_r_reg_offset);
- tdep->sizeof_gregset = 19 * 4;
-
- /* FreeBSD 4.0 introduced a new `struct sigcontext'. */
- tdep->sc_reg_offset = i386fbsd4_sc_reg_offset;
- tdep->sc_num_regs = ARRAY_SIZE (i386fbsd4_sc_reg_offset);
-
tdep->xsave_xcr0_offset = I386_FBSD_XSAVE_XCR0_OFFSET;
/* Iterate over core file register note sections. */
@@ -445,6 +394,10 @@ i386fbsd4_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
set_gdbarch_core_read_description (gdbarch,
i386fbsd_core_read_description);
+ /* FreeBSD uses SVR4-style shared libraries. */
+ set_solib_svr4_fetch_link_map_offsets
+ (gdbarch, svr4_ilp32_fetch_link_map_offsets);
+
set_gdbarch_fetch_tls_load_module_address (gdbarch,
svr4_fetch_objfile_link_map);
set_gdbarch_get_thread_local_address (gdbarch,
@@ -456,5 +409,5 @@ void
_initialize_i386fbsd_tdep ()
{
gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_FREEBSD,
- i386fbsd4_init_abi);
+ i386fbsd_init_abi);
}
diff --git a/gdb/i386-fbsd-tdep.h b/gdb/i386-fbsd-tdep.h
index 583f49f84f2..76f4c20f657 100644
--- a/gdb/i386-fbsd-tdep.h
+++ b/gdb/i386-fbsd-tdep.h
@@ -20,6 +20,8 @@
#ifndef I386_FBSD_TDEP_H
#define I386_FBSD_TDEP_H
+#include "regset.h"
+
/* Get XSAVE extended state xcr0 from core dump. */
extern uint64_t i386fbsd_core_read_xcr0 (bfd *abfd);
@@ -28,4 +30,6 @@ extern uint64_t i386fbsd_core_read_xcr0 (bfd *abfd);
matches the layout on Linux. */
#define I386_FBSD_XSAVE_XCR0_OFFSET 464
+extern const struct regset i386_fbsd_gregset;
+
#endif /* i386-fbsd-tdep.h */
diff --git a/gdb/i386-linux-tdep.c b/gdb/i386-linux-tdep.c
index 48191797cd5..5d7f54194af 100644
--- a/gdb/i386-linux-tdep.c
+++ b/gdb/i386-linux-tdep.c
@@ -54,7 +54,7 @@
group. Put the LINUX_ORIG_EAX register in the system group. */
static int
i386_linux_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
- struct reggroup *group)
+ const struct reggroup *group)
{
if (regnum == I386_LINUX_ORIG_EAX_REGNUM)
return (group == system_reggroup
@@ -466,10 +466,10 @@ i386_linux_intx80_sysenter_syscall_record (struct regcache *regcache)
if (syscall_gdb < 0)
{
- fprintf_unfiltered (gdb_stderr,
- _("Process record and replay target doesn't "
- "support syscall number %s\n"),
- plongest (syscall_native));
+ gdb_printf (gdb_stderr,
+ _("Process record and replay target doesn't "
+ "support syscall number %s\n"),
+ plongest (syscall_native));
return -1;
}
diff --git a/gdb/i386-tdep.c b/gdb/i386-tdep.c
index aaa5592f40a..8501e12e241 100644
--- a/gdb/i386-tdep.c
+++ b/gdb/i386-tdep.c
@@ -1853,9 +1853,9 @@ i386_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc)
compilers to emit usable line notes. */
if (post_prologue_pc
&& (cust != NULL
- && COMPUNIT_PRODUCER (cust) != NULL
- && (producer_is_llvm (COMPUNIT_PRODUCER (cust))
- || producer_is_icc_ge_19 (COMPUNIT_PRODUCER (cust)))))
+ && cust->producer () != NULL
+ && (producer_is_llvm (cust->producer ())
+ || producer_is_icc_ge_19 (cust->producer ()))))
return std::max (start_pc, post_prologue_pc);
}
@@ -2222,7 +2222,7 @@ i386_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc)
struct compunit_symtab *cust;
cust = find_pc_compunit_symtab (pc);
- if (cust != NULL && COMPUNIT_EPILOGUE_UNWIND_VALID (cust))
+ if (cust != NULL && cust->epilogue_unwind_valid ())
return 0;
if (target_read_memory (pc, &insn, 1))
@@ -4531,8 +4531,8 @@ i386_svr4_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
/* i386 register groups. In addition to the normal groups, add "mmx"
and "sse". */
-static struct reggroup *i386_sse_reggroup;
-static struct reggroup *i386_mmx_reggroup;
+static const reggroup *i386_sse_reggroup;
+static const reggroup *i386_mmx_reggroup;
static void
i386_init_reggroups (void)
@@ -4546,18 +4546,11 @@ i386_add_reggroups (struct gdbarch *gdbarch)
{
reggroup_add (gdbarch, i386_sse_reggroup);
reggroup_add (gdbarch, i386_mmx_reggroup);
- reggroup_add (gdbarch, general_reggroup);
- reggroup_add (gdbarch, float_reggroup);
- reggroup_add (gdbarch, all_reggroup);
- reggroup_add (gdbarch, save_reggroup);
- reggroup_add (gdbarch, restore_reggroup);
- reggroup_add (gdbarch, vector_reggroup);
- reggroup_add (gdbarch, system_reggroup);
}
int
i386_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
- struct reggroup *group)
+ const struct reggroup *group)
{
const i386_gdbarch_tdep *tdep = (i386_gdbarch_tdep *) gdbarch_tdep (gdbarch);
int fp_regnum_p, mmx_regnum_p, xmm_regnum_p, mxcsr_regnum_p,
@@ -5091,9 +5084,9 @@ i386_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
ir.gdbarch = gdbarch;
if (record_debug > 1)
- fprintf_unfiltered (gdb_stdlog, "Process record: i386_process_record "
- "addr = %s\n",
- paddress (gdbarch, ir.addr));
+ gdb_printf (gdb_stdlog, "Process record: i386_process_record "
+ "addr = %s\n",
+ paddress (gdbarch, ir.addr));
/* prefixes */
while (1)
@@ -6864,9 +6857,9 @@ Do you want to stop the program?"),
/* XXX */
case 0xcc: /* int3 */
- fprintf_unfiltered (gdb_stderr,
- _("Process record does not support instruction "
- "int3.\n"));
+ gdb_printf (gdb_stderr,
+ _("Process record does not support instruction "
+ "int3.\n"));
ir.addr -= 1;
goto no_support;
break;
@@ -6882,10 +6875,10 @@ Do you want to stop the program?"),
if (interrupt != 0x80
|| tdep->i386_intx80_record == NULL)
{
- fprintf_unfiltered (gdb_stderr,
- _("Process record does not support "
- "instruction int 0x%02x.\n"),
- interrupt);
+ gdb_printf (gdb_stderr,
+ _("Process record does not support "
+ "instruction int 0x%02x.\n"),
+ interrupt);
ir.addr -= 2;
goto no_support;
}
@@ -6897,9 +6890,9 @@ Do you want to stop the program?"),
/* XXX */
case 0xce: /* into */
- fprintf_unfiltered (gdb_stderr,
- _("Process record does not support "
- "instruction into.\n"));
+ gdb_printf (gdb_stderr,
+ _("Process record does not support "
+ "instruction into.\n"));
ir.addr -= 1;
goto no_support;
break;
@@ -6909,9 +6902,9 @@ Do you want to stop the program?"),
break;
case 0x62: /* bound */
- fprintf_unfiltered (gdb_stderr,
- _("Process record does not support "
- "instruction bound.\n"));
+ gdb_printf (gdb_stderr,
+ _("Process record does not support "
+ "instruction bound.\n"));
ir.addr -= 1;
goto no_support;
break;
@@ -6946,17 +6939,17 @@ Do you want to stop the program?"),
break;
case 0x0f30: /* wrmsr */
- fprintf_unfiltered (gdb_stderr,
- _("Process record does not support "
- "instruction wrmsr.\n"));
+ gdb_printf (gdb_stderr,
+ _("Process record does not support "
+ "instruction wrmsr.\n"));
ir.addr -= 2;
goto no_support;
break;
case 0x0f32: /* rdmsr */
- fprintf_unfiltered (gdb_stderr,
- _("Process record does not support "
- "instruction rdmsr.\n"));
+ gdb_printf (gdb_stderr,
+ _("Process record does not support "
+ "instruction rdmsr.\n"));
ir.addr -= 2;
goto no_support;
break;
@@ -6976,9 +6969,9 @@ Do you want to stop the program?"),
}
if (tdep->i386_sysenter_record == NULL)
{
- fprintf_unfiltered (gdb_stderr,
- _("Process record does not support "
- "instruction sysenter.\n"));
+ gdb_printf (gdb_stderr,
+ _("Process record does not support "
+ "instruction sysenter.\n"));
ir.addr -= 2;
goto no_support;
}
@@ -6989,9 +6982,9 @@ Do you want to stop the program?"),
break;
case 0x0f35: /* sysexit */
- fprintf_unfiltered (gdb_stderr,
- _("Process record does not support "
- "instruction sysexit.\n"));
+ gdb_printf (gdb_stderr,
+ _("Process record does not support "
+ "instruction sysexit.\n"));
ir.addr -= 2;
goto no_support;
break;
@@ -7001,9 +6994,9 @@ Do you want to stop the program?"),
int ret;
if (tdep->i386_syscall_record == NULL)
{
- fprintf_unfiltered (gdb_stderr,
- _("Process record does not support "
- "instruction syscall.\n"));
+ gdb_printf (gdb_stderr,
+ _("Process record does not support "
+ "instruction syscall.\n"));
ir.addr -= 2;
goto no_support;
}
@@ -7014,9 +7007,9 @@ Do you want to stop the program?"),
break;
case 0x0f07: /* sysret */
- fprintf_unfiltered (gdb_stderr,
- _("Process record does not support "
- "instruction sysret.\n"));
+ gdb_printf (gdb_stderr,
+ _("Process record does not support "
+ "instruction sysret.\n"));
ir.addr -= 2;
goto no_support;
break;
@@ -7029,9 +7022,9 @@ Do you want to stop the program?"),
break;
case 0xf4: /* hlt */
- fprintf_unfiltered (gdb_stderr,
- _("Process record does not support "
- "instruction hlt.\n"));
+ gdb_printf (gdb_stderr,
+ _("Process record does not support "
+ "instruction hlt.\n"));
ir.addr -= 1;
goto no_support;
break;
@@ -8149,11 +8142,11 @@ reswitch_prefix_add:
return 0;
no_support:
- fprintf_unfiltered (gdb_stderr,
- _("Process record does not support instruction 0x%02x "
- "at address %s.\n"),
- (unsigned int) (opcode),
- paddress (gdbarch, ir.orig_addr));
+ gdb_printf (gdb_stderr,
+ _("Process record does not support instruction 0x%02x "
+ "at address %s.\n"),
+ (unsigned int) (opcode),
+ paddress (gdbarch, ir.orig_addr));
return -1;
}
@@ -8243,7 +8236,7 @@ i386_floatformat_for_type (struct gdbarch *gdbarch,
|| strcmp (name, "real(kind=16)") == 0
|| strcmp (name, "real*16") == 0
|| strcmp (name, "REAL*16") == 0)
- return floatformats_ia64_quad;
+ return floatformats_ieee_quad;
return default_floatformat_for_type (gdbarch, name, len);
}
@@ -8992,14 +8985,14 @@ i386_mpx_info_bounds (const char *args, int from_tty)
if (gdbarch_bfd_arch_info (gdbarch)->arch != bfd_arch_i386
|| !i386_mpx_enabled ())
{
- printf_filtered (_("Intel Memory Protection Extensions not "
- "supported on this target.\n"));
+ gdb_printf (_("Intel Memory Protection Extensions not "
+ "supported on this target.\n"));
return;
}
if (args == NULL)
{
- printf_filtered (_("Address of pointer variable expected.\n"));
+ gdb_printf (_("Address of pointer variable expected.\n"));
return;
}
diff --git a/gdb/i386-tdep.h b/gdb/i386-tdep.h
index 6fd134d3fce..a8067cf6b6c 100644
--- a/gdb/i386-tdep.h
+++ b/gdb/i386-tdep.h
@@ -418,7 +418,7 @@ extern int i386_sigtramp_p (struct frame_info *this_frame);
/* Return non-zero if REGNUM is a member of the specified group. */
extern int i386_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
- struct reggroup *group);
+ const struct reggroup *group);
/* Supply register REGNUM from the general-purpose register set REGSET
to register cache REGCACHE. If REGNUM is -1, do this for all
@@ -472,12 +472,8 @@ extern int i386_mpx_enabled (void);
/* Functions and variables exported from i386-bsd-tdep.c. */
extern void i386bsd_init_abi (struct gdbarch_info, struct gdbarch *);
-extern CORE_ADDR i386fbsd_sigtramp_start_addr;
-extern CORE_ADDR i386fbsd_sigtramp_end_addr;
extern CORE_ADDR i386obsd_sigtramp_start_addr;
extern CORE_ADDR i386obsd_sigtramp_end_addr;
-extern int i386fbsd4_sc_reg_offset[];
-extern int i386fbsd_sc_reg_offset[];
extern int i386obsd_sc_reg_offset[];
extern int i386bsd_sc_reg_offset[];
diff --git a/gdb/i386-windows-tdep.c b/gdb/i386-windows-tdep.c
index d50d6edb385..8e1cc17b91c 100644
--- a/gdb/i386-windows-tdep.c
+++ b/gdb/i386-windows-tdep.c
@@ -23,7 +23,7 @@
#include "i386-tdep.h"
#include "windows-tdep.h"
#include "regset.h"
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
#include "xml-support.h"
#include "gdbcore.h"
#include "inferior.h"
diff --git a/gdb/i387-tdep.c b/gdb/i387-tdep.c
index 2f0b6509457..f056ea59347 100644
--- a/gdb/i387-tdep.c
+++ b/gdb/i387-tdep.c
@@ -42,7 +42,7 @@ print_i387_value (struct gdbarch *gdbarch,
point, 19 for the digits and 6 for the exponent adds up to 27. */
const struct type *type = i387_ext_type (gdbarch);
std::string str = target_float_to_string (raw, type, " %-+27.19g");
- fprintf_filtered (file, "%s", str.c_str ());
+ gdb_printf (file, "%s", str.c_str ());
}
/* Print the classification for the register contents RAW. */
@@ -67,16 +67,16 @@ print_i387_ext (struct gdbarch *gdbarch,
{
if (fraction[0] == 0x00000000 && fraction[1] == 0x00000000)
/* Infinity. */
- fprintf_filtered (file, " %cInf", (sign ? '-' : '+'));
+ gdb_printf (file, " %cInf", (sign ? '-' : '+'));
else if (sign && fraction[0] == 0x00000000 && fraction[1] == 0x40000000)
/* Real Indefinite (QNaN). */
- fputs_filtered (" Real Indefinite (QNaN)", file);
+ gdb_puts (" Real Indefinite (QNaN)", file);
else if (fraction[1] & 0x40000000)
/* QNaN. */
- fputs_filtered (" QNaN", file);
+ gdb_puts (" QNaN", file);
else
/* SNaN. */
- fputs_filtered (" SNaN", file);
+ gdb_puts (" SNaN", file);
}
else if (exponent < 0x7fff && exponent > 0x0000 && integer)
/* Normal. */
@@ -88,14 +88,14 @@ print_i387_ext (struct gdbarch *gdbarch,
if (integer)
/* Pseudo-denormal. */
- fputs_filtered (" Pseudo-denormal", file);
+ gdb_puts (" Pseudo-denormal", file);
else if (fraction[0] || fraction[1])
/* Denormal. */
- fputs_filtered (" Denormal", file);
+ gdb_puts (" Denormal", file);
}
else
/* Unsupported. */
- fputs_filtered (" Unsupported", file);
+ gdb_puts (" Unsupported", file);
}
/* Print the status word STATUS. If STATUS_P is false, then STATUS
@@ -105,35 +105,35 @@ static void
print_i387_status_word (int status_p,
unsigned int status, struct ui_file *file)
{
- fprintf_filtered (file, "Status Word: ");
+ gdb_printf (file, "Status Word: ");
if (!status_p)
{
- fprintf_filtered (file, "%s\n", _("<unavailable>"));
+ gdb_printf (file, "%s\n", _("<unavailable>"));
return;
}
- fprintf_filtered (file, "%s", hex_string_custom (status, 4));
- fputs_filtered (" ", file);
- fprintf_filtered (file, " %s", (status & 0x0001) ? "IE" : " ");
- fprintf_filtered (file, " %s", (status & 0x0002) ? "DE" : " ");
- fprintf_filtered (file, " %s", (status & 0x0004) ? "ZE" : " ");
- fprintf_filtered (file, " %s", (status & 0x0008) ? "OE" : " ");
- fprintf_filtered (file, " %s", (status & 0x0010) ? "UE" : " ");
- fprintf_filtered (file, " %s", (status & 0x0020) ? "PE" : " ");
- fputs_filtered (" ", file);
- fprintf_filtered (file, " %s", (status & 0x0080) ? "ES" : " ");
- fputs_filtered (" ", file);
- fprintf_filtered (file, " %s", (status & 0x0040) ? "SF" : " ");
- fputs_filtered (" ", file);
- fprintf_filtered (file, " %s", (status & 0x0100) ? "C0" : " ");
- fprintf_filtered (file, " %s", (status & 0x0200) ? "C1" : " ");
- fprintf_filtered (file, " %s", (status & 0x0400) ? "C2" : " ");
- fprintf_filtered (file, " %s", (status & 0x4000) ? "C3" : " ");
-
- fputs_filtered ("\n", file);
-
- fprintf_filtered (file,
- " TOP: %d\n", ((status >> 11) & 7));
+ gdb_printf (file, "%s", hex_string_custom (status, 4));
+ gdb_puts (" ", file);
+ gdb_printf (file, " %s", (status & 0x0001) ? "IE" : " ");
+ gdb_printf (file, " %s", (status & 0x0002) ? "DE" : " ");
+ gdb_printf (file, " %s", (status & 0x0004) ? "ZE" : " ");
+ gdb_printf (file, " %s", (status & 0x0008) ? "OE" : " ");
+ gdb_printf (file, " %s", (status & 0x0010) ? "UE" : " ");
+ gdb_printf (file, " %s", (status & 0x0020) ? "PE" : " ");
+ gdb_puts (" ", file);
+ gdb_printf (file, " %s", (status & 0x0080) ? "ES" : " ");
+ gdb_puts (" ", file);
+ gdb_printf (file, " %s", (status & 0x0040) ? "SF" : " ");
+ gdb_puts (" ", file);
+ gdb_printf (file, " %s", (status & 0x0100) ? "C0" : " ");
+ gdb_printf (file, " %s", (status & 0x0200) ? "C1" : " ");
+ gdb_printf (file, " %s", (status & 0x0400) ? "C2" : " ");
+ gdb_printf (file, " %s", (status & 0x4000) ? "C3" : " ");
+
+ gdb_puts ("\n", file);
+
+ gdb_printf (file,
+ " TOP: %d\n", ((status >> 11) & 7));
}
/* Print the control word CONTROL. If CONTROL_P is false, then
@@ -143,55 +143,55 @@ static void
print_i387_control_word (int control_p,
unsigned int control, struct ui_file *file)
{
- fprintf_filtered (file, "Control Word: ");
+ gdb_printf (file, "Control Word: ");
if (!control_p)
{
- fprintf_filtered (file, "%s\n", _("<unavailable>"));
+ gdb_printf (file, "%s\n", _("<unavailable>"));
return;
}
- fprintf_filtered (file, "%s", hex_string_custom (control, 4));
- fputs_filtered (" ", file);
- fprintf_filtered (file, " %s", (control & 0x0001) ? "IM" : " ");
- fprintf_filtered (file, " %s", (control & 0x0002) ? "DM" : " ");
- fprintf_filtered (file, " %s", (control & 0x0004) ? "ZM" : " ");
- fprintf_filtered (file, " %s", (control & 0x0008) ? "OM" : " ");
- fprintf_filtered (file, " %s", (control & 0x0010) ? "UM" : " ");
- fprintf_filtered (file, " %s", (control & 0x0020) ? "PM" : " ");
+ gdb_printf (file, "%s", hex_string_custom (control, 4));
+ gdb_puts (" ", file);
+ gdb_printf (file, " %s", (control & 0x0001) ? "IM" : " ");
+ gdb_printf (file, " %s", (control & 0x0002) ? "DM" : " ");
+ gdb_printf (file, " %s", (control & 0x0004) ? "ZM" : " ");
+ gdb_printf (file, " %s", (control & 0x0008) ? "OM" : " ");
+ gdb_printf (file, " %s", (control & 0x0010) ? "UM" : " ");
+ gdb_printf (file, " %s", (control & 0x0020) ? "PM" : " ");
- fputs_filtered ("\n", file);
+ gdb_puts ("\n", file);
- fputs_filtered (" PC: ", file);
+ gdb_puts (" PC: ", file);
switch ((control >> 8) & 3)
{
case 0:
- fputs_filtered ("Single Precision (24-bits)\n", file);
+ gdb_puts ("Single Precision (24-bits)\n", file);
break;
case 1:
- fputs_filtered ("Reserved\n", file);
+ gdb_puts ("Reserved\n", file);
break;
case 2:
- fputs_filtered ("Double Precision (53-bits)\n", file);
+ gdb_puts ("Double Precision (53-bits)\n", file);
break;
case 3:
- fputs_filtered ("Extended Precision (64-bits)\n", file);
+ gdb_puts ("Extended Precision (64-bits)\n", file);
break;
}
- fputs_filtered (" RC: ", file);
+ gdb_puts (" RC: ", file);
switch ((control >> 10) & 3)
{
case 0:
- fputs_filtered ("Round to nearest\n", file);
+ gdb_puts ("Round to nearest\n", file);
break;
case 1:
- fputs_filtered ("Round down\n", file);
+ gdb_puts ("Round down\n", file);
break;
case 2:
- fputs_filtered ("Round up\n", file);
+ gdb_puts ("Round up\n", file);
break;
case 3:
- fputs_filtered ("Round toward zero\n", file);
+ gdb_puts ("Round toward zero\n", file);
break;
}
}
@@ -254,7 +254,7 @@ i387_print_float_info (struct gdbarch *gdbarch, struct ui_file *file,
int i;
int tag = -1;
- fprintf_filtered (file, "%sR%d: ", fpreg == top ? "=>" : " ", fpreg);
+ gdb_printf (file, "%sR%d: ", fpreg == top ? "=>" : " ", fpreg);
if (ftag_p)
{
@@ -263,21 +263,21 @@ i387_print_float_info (struct gdbarch *gdbarch, struct ui_file *file,
switch (tag)
{
case 0:
- fputs_filtered ("Valid ", file);
+ gdb_puts ("Valid ", file);
break;
case 1:
- fputs_filtered ("Zero ", file);
+ gdb_puts ("Zero ", file);
break;
case 2:
- fputs_filtered ("Special ", file);
+ gdb_puts ("Special ", file);
break;
case 3:
- fputs_filtered ("Empty ", file);
+ gdb_puts ("Empty ", file);
break;
}
}
else
- fputs_filtered ("Unknown ", file);
+ gdb_puts ("Unknown ", file);
regnum = (fpreg + 8 - top) % 8 + I387_ST0_REGNUM (tdep);
regval = get_frame_register_value (frame, regnum);
@@ -286,37 +286,37 @@ i387_print_float_info (struct gdbarch *gdbarch, struct ui_file *file,
{
const gdb_byte *raw = value_contents (regval).data ();
- fputs_filtered ("0x", file);
+ gdb_puts ("0x", file);
for (i = 9; i >= 0; i--)
- fprintf_filtered (file, "%02x", raw[i]);
+ gdb_printf (file, "%02x", raw[i]);
if (tag != -1 && tag != 3)
print_i387_ext (gdbarch, raw, file);
}
else
- fprintf_filtered (file, "%s", _("<unavailable>"));
+ gdb_printf (file, "%s", _("<unavailable>"));
- fputs_filtered ("\n", file);
+ gdb_puts ("\n", file);
}
}
- fputs_filtered ("\n", file);
+ gdb_puts ("\n", file);
print_i387_status_word (fstat_p, fstat, file);
print_i387_control_word (fctrl_p, fctrl, file);
- fprintf_filtered (file, "Tag Word: %s\n",
- ftag_p ? hex_string_custom (ftag, 4) : _("<unavailable>"));
- fprintf_filtered (file, "Instruction Pointer: %s:",
- fiseg_p ? hex_string_custom (fiseg, 2) : _("<unavailable>"));
- fprintf_filtered (file, "%s\n",
- fioff_p ? hex_string_custom (fioff, 8) : _("<unavailable>"));
- fprintf_filtered (file, "Operand Pointer: %s:",
- foseg_p ? hex_string_custom (foseg, 2) : _("<unavailable>"));
- fprintf_filtered (file, "%s\n",
- fooff_p ? hex_string_custom (fooff, 8) : _("<unavailable>"));
- fprintf_filtered (file, "Opcode: %s\n",
- fop_p
- ? (hex_string_custom (fop ? (fop | 0xd800) : 0, 4))
- : _("<unavailable>"));
+ gdb_printf (file, "Tag Word: %s\n",
+ ftag_p ? hex_string_custom (ftag, 4) : _("<unavailable>"));
+ gdb_printf (file, "Instruction Pointer: %s:",
+ fiseg_p ? hex_string_custom (fiseg, 2) : _("<unavailable>"));
+ gdb_printf (file, "%s\n",
+ fioff_p ? hex_string_custom (fioff, 8) : _("<unavailable>"));
+ gdb_printf (file, "Operand Pointer: %s:",
+ foseg_p ? hex_string_custom (foseg, 2) : _("<unavailable>"));
+ gdb_printf (file, "%s\n",
+ fooff_p ? hex_string_custom (fooff, 8) : _("<unavailable>"));
+ gdb_printf (file, "Opcode: %s\n",
+ fop_p
+ ? (hex_string_custom (fop ? (fop | 0xd800) : 0, 4))
+ : _("<unavailable>"));
}
diff --git a/gdb/ia64-libunwind-tdep.c b/gdb/ia64-libunwind-tdep.c
index 6d157109db0..a2a236a4667 100644
--- a/gdb/ia64-libunwind-tdep.c
+++ b/gdb/ia64-libunwind-tdep.c
@@ -512,11 +512,11 @@ libunwind_load (void)
}
if (handle == NULL)
{
- fprintf_unfiltered (gdb_stderr, _("[GDB failed to load %s: %s]\n"),
- LIBUNWIND_SO, so_error);
+ gdb_printf (gdb_stderr, _("[GDB failed to load %s: %s]\n"),
+ LIBUNWIND_SO, so_error);
#ifdef LIBUNWIND_SO_7
- fprintf_unfiltered (gdb_stderr, _("[GDB failed to load %s: %s]\n"),
- LIBUNWIND_SO_7, dlerror ());
+ gdb_printf (gdb_stderr, _("[GDB failed to load %s: %s]\n"),
+ LIBUNWIND_SO_7, dlerror ());
#endif /* LIBUNWIND_SO_7 */
}
xfree (so_error);
diff --git a/gdb/ia64-tdep.c b/gdb/ia64-tdep.c
index 0d01902b550..dd6d5b199b2 100644
--- a/gdb/ia64-tdep.c
+++ b/gdb/ia64-tdep.c
@@ -75,7 +75,7 @@ static gdb::optional<gdb::byte_vector> ktab_buf;
/* An enumeration of the different IA-64 instruction types. */
-typedef enum instruction_type
+enum instruction_type
{
A, /* Integer ALU ; I-unit or M-unit */
I, /* Non-ALU integer; I-unit */
@@ -85,7 +85,7 @@ typedef enum instruction_type
L, /* Extended (L+X) ; I-unit */
X, /* Extended (L+X) ; I-unit */
undefined /* undefined or reserved */
-} instruction_type;
+};
/* We represent IA-64 PC addresses as the value of the instruction
pointer or'd with some bit combination in the low nibble which
@@ -322,7 +322,7 @@ ia64_ext_type (struct gdbarch *gdbarch)
static int
ia64_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
- struct reggroup *group)
+ const struct reggroup *group)
{
int vector_p;
int float_p;
@@ -1895,13 +1895,13 @@ ia64_frame_this_id (struct frame_info *this_frame, void **this_cache,
if (cache->base != 0)
(*this_id) = frame_id_build_special (cache->base, cache->pc, cache->bsp);
if (gdbarch_debug >= 1)
- fprintf_unfiltered (gdb_stdlog,
- "regular frame id: code %s, stack %s, "
- "special %s, this_frame %s\n",
- paddress (gdbarch, this_id->code_addr),
- paddress (gdbarch, this_id->stack_addr),
- paddress (gdbarch, cache->bsp),
- host_address_to_string (this_frame));
+ gdb_printf (gdb_stdlog,
+ "regular frame id: code %s, stack %s, "
+ "special %s, this_frame %s\n",
+ paddress (gdbarch, this_id->code_addr),
+ paddress (gdbarch, this_id->stack_addr),
+ paddress (gdbarch, cache->bsp),
+ host_address_to_string (this_frame));
}
static struct value *
@@ -2269,13 +2269,13 @@ ia64_sigtramp_frame_this_id (struct frame_info *this_frame,
get_frame_pc (this_frame),
cache->bsp);
if (gdbarch_debug >= 1)
- fprintf_unfiltered (gdb_stdlog,
- "sigtramp frame id: code %s, stack %s, "
- "special %s, this_frame %s\n",
- paddress (gdbarch, this_id->code_addr),
- paddress (gdbarch, this_id->stack_addr),
- paddress (gdbarch, cache->bsp),
- host_address_to_string (this_frame));
+ gdb_printf (gdb_stdlog,
+ "sigtramp frame id: code %s, stack %s, "
+ "special %s, this_frame %s\n",
+ paddress (gdbarch, this_id->code_addr),
+ paddress (gdbarch, this_id->stack_addr),
+ paddress (gdbarch, cache->bsp),
+ host_address_to_string (this_frame));
}
static struct value *
@@ -2524,11 +2524,11 @@ ia64_access_reg (unw_addr_space_t as, unw_regnum_t uw_regnum, unw_word_t *val,
}
if (gdbarch_debug >= 1)
- fprintf_unfiltered (gdb_stdlog,
- " access_reg: from cache: %4s=%s\n",
- (((unsigned) regnum <= IA64_NAT127_REGNUM)
- ? ia64_register_names[regnum] : "r??"),
- paddress (gdbarch, *val));
+ gdb_printf (gdb_stdlog,
+ " access_reg: from cache: %4s=%s\n",
+ (((unsigned) regnum <= IA64_NAT127_REGNUM)
+ ? ia64_register_names[regnum] : "r??"),
+ paddress (gdbarch, *val));
return 0;
}
@@ -2595,11 +2595,11 @@ ia64_access_rse_reg (unw_addr_space_t as, unw_regnum_t uw_regnum,
}
if (gdbarch_debug >= 1)
- fprintf_unfiltered (gdb_stdlog,
- " access_rse_reg: from cache: %4s=%s\n",
- (((unsigned) regnum <= IA64_NAT127_REGNUM)
- ? ia64_register_names[regnum] : "r??"),
- paddress (gdbarch, *val));
+ gdb_printf (gdb_stdlog,
+ " access_rse_reg: from cache: %4s=%s\n",
+ (((unsigned) regnum <= IA64_NAT127_REGNUM)
+ ? ia64_register_names[regnum] : "r??"),
+ paddress (gdbarch, *val));
return 0;
}
@@ -2693,12 +2693,12 @@ get_kernel_table (unw_word_t ip, unw_dyn_info_t *di)
di->u.ti.table_data = (unw_word_t *) ktab;
if (gdbarch_debug >= 1)
- fprintf_unfiltered (gdb_stdlog, "get_kernel_table: found table `%s': "
- "segbase=%s, length=%s, gp=%s\n",
- (char *) di->u.ti.name_ptr,
- hex_string (di->u.ti.segbase),
- pulongest (di->u.ti.table_len),
- hex_string (di->gp));
+ gdb_printf (gdb_stdlog, "get_kernel_table: found table `%s': "
+ "segbase=%s, length=%s, gp=%s\n",
+ (char *) di->u.ti.name_ptr,
+ hex_string (di->u.ti.segbase),
+ pulongest (di->u.ti.table_len),
+ hex_string (di->gp));
return 0;
}
@@ -2799,15 +2799,15 @@ ia64_find_proc_info_x (unw_addr_space_t as, unw_word_t ip, unw_proc_info_t *pi,
return -UNW_ENOINFO;
if (gdbarch_debug >= 1)
- fprintf_unfiltered (gdb_stdlog, "ia64_find_proc_info_x: %s -> "
- "(name=`%s',segbase=%s,start=%s,end=%s,gp=%s,"
- "length=%s,data=%s)\n",
- hex_string (ip), (char *)di.u.ti.name_ptr,
- hex_string (di.u.ti.segbase),
- hex_string (di.start_ip), hex_string (di.end_ip),
- hex_string (di.gp),
- pulongest (di.u.ti.table_len),
- hex_string ((CORE_ADDR)di.u.ti.table_data));
+ gdb_printf (gdb_stdlog, "ia64_find_proc_info_x: %s -> "
+ "(name=`%s',segbase=%s,start=%s,end=%s,gp=%s,"
+ "length=%s,data=%s)\n",
+ hex_string (ip), (char *)di.u.ti.name_ptr,
+ hex_string (di.u.ti.segbase),
+ hex_string (di.start_ip), hex_string (di.end_ip),
+ hex_string (di.gp),
+ pulongest (di.u.ti.table_len),
+ hex_string ((CORE_ADDR)di.u.ti.table_data));
}
else
{
@@ -2816,15 +2816,15 @@ ia64_find_proc_info_x (unw_addr_space_t as, unw_word_t ip, unw_proc_info_t *pi,
return ret;
if (gdbarch_debug >= 1)
- fprintf_unfiltered (gdb_stdlog, "ia64_find_proc_info_x: %s -> "
- "(name=`%s',segbase=%s,start=%s,end=%s,gp=%s,"
- "length=%s,data=%s)\n",
- hex_string (ip), (char *)di.u.rti.name_ptr,
- hex_string (di.u.rti.segbase),
- hex_string (di.start_ip), hex_string (di.end_ip),
- hex_string (di.gp),
- pulongest (di.u.rti.table_len),
- hex_string (di.u.rti.table_data));
+ gdb_printf (gdb_stdlog, "ia64_find_proc_info_x: %s -> "
+ "(name=`%s',segbase=%s,start=%s,end=%s,gp=%s,"
+ "length=%s,data=%s)\n",
+ hex_string (ip), (char *)di.u.rti.name_ptr,
+ hex_string (di.u.rti.segbase),
+ hex_string (di.start_ip), hex_string (di.end_ip),
+ hex_string (di.gp),
+ pulongest (di.u.rti.table_len),
+ hex_string (di.u.rti.table_data));
}
ret = libunwind_search_unwind_table (&as, ip, &di, pi, need_unwind_info,
@@ -2874,11 +2874,11 @@ ia64_get_dyn_info_list (unw_addr_space_t as,
if (addr)
{
if (gdbarch_debug >= 1)
- fprintf_unfiltered (gdb_stdlog,
- "dynamic unwind table in objfile %s "
- "at %s (gp=%s)\n",
- bfd_get_filename (objfile->obfd),
- hex_string (addr), hex_string (di.gp));
+ gdb_printf (gdb_stdlog,
+ "dynamic unwind table in objfile %s "
+ "at %s (gp=%s)\n",
+ bfd_get_filename (objfile->obfd),
+ hex_string (addr), hex_string (di.gp));
*dilap = addr;
return 0;
}
@@ -2915,13 +2915,13 @@ ia64_libunwind_frame_this_id (struct frame_info *this_frame, void **this_cache,
(*this_id) = frame_id_build_special (id.stack_addr, id.code_addr, bsp);
if (gdbarch_debug >= 1)
- fprintf_unfiltered (gdb_stdlog,
- "libunwind frame id: code %s, stack %s, "
- "special %s, this_frame %s\n",
- paddress (gdbarch, id.code_addr),
- paddress (gdbarch, id.stack_addr),
- paddress (gdbarch, bsp),
- host_address_to_string (this_frame));
+ gdb_printf (gdb_stdlog,
+ "libunwind frame id: code %s, stack %s, "
+ "special %s, this_frame %s\n",
+ paddress (gdbarch, id.code_addr),
+ paddress (gdbarch, id.stack_addr),
+ paddress (gdbarch, bsp),
+ host_address_to_string (this_frame));
}
static struct value *
@@ -3047,13 +3047,13 @@ ia64_libunwind_sigtramp_frame_this_id (struct frame_info *this_frame,
(*this_id) = frame_id_build_special (id.stack_addr, id.code_addr, bsp);
if (gdbarch_debug >= 1)
- fprintf_unfiltered (gdb_stdlog,
- "libunwind sigtramp frame id: code %s, "
- "stack %s, special %s, this_frame %s\n",
- paddress (gdbarch, id.code_addr),
- paddress (gdbarch, id.stack_addr),
- paddress (gdbarch, bsp),
- host_address_to_string (this_frame));
+ gdb_printf (gdb_stdlog,
+ "libunwind sigtramp frame id: code %s, "
+ "stack %s, special %s, this_frame %s\n",
+ paddress (gdbarch, id.code_addr),
+ paddress (gdbarch, id.stack_addr),
+ paddress (gdbarch, bsp),
+ host_address_to_string (this_frame));
}
static struct value *
@@ -3876,10 +3876,10 @@ ia64_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
bsp = extract_unsigned_integer (buf, 8, byte_order);
if (gdbarch_debug >= 1)
- fprintf_unfiltered (gdb_stdlog,
- "dummy frame id: code %s, stack %s, special %s\n",
- paddress (gdbarch, get_frame_pc (this_frame)),
- paddress (gdbarch, sp), paddress (gdbarch, bsp));
+ gdb_printf (gdb_stdlog,
+ "dummy frame id: code %s, stack %s, special %s\n",
+ paddress (gdbarch, get_frame_pc (this_frame)),
+ paddress (gdbarch, sp), paddress (gdbarch, bsp));
return frame_id_build_special (sp, get_frame_pc (this_frame), bsp);
}
diff --git a/gdb/ia64-vms-tdep.c b/gdb/ia64-vms-tdep.c
index 23f32658fbb..9b12df4fe2b 100644
--- a/gdb/ia64-vms-tdep.c
+++ b/gdb/ia64-vms-tdep.c
@@ -132,7 +132,7 @@ static struct libunwind_descr ia64_vms_libunwind_descr;
static void
ia64_openvms_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
{
- set_gdbarch_long_double_format (gdbarch, floatformats_ia64_quad);
+ set_gdbarch_long_double_format (gdbarch, floatformats_ieee_quad);
#ifdef HAVE_LIBUNWIND_IA64_H
/* Override the default descriptor. */
diff --git a/gdb/inf-child.c b/gdb/inf-child.c
index fe91d1fa820..cc00867787a 100644
--- a/gdb/inf-child.c
+++ b/gdb/inf-child.c
@@ -161,7 +161,7 @@ inf_child_open_target (const char *arg, int from_tty)
current_inferior ()->push_target (target);
inf_child_explicitly_opened = 1;
if (from_tty)
- printf_filtered ("Done. Use the \"run\" command to start a process.\n");
+ gdb_printf ("Done. Use the \"run\" command to start a process.\n");
}
/* Implement the to_disconnect target_ops method. */
diff --git a/gdb/inf-loop.c b/gdb/inf-loop.c
index f1298cf3192..41ca17ad62a 100644
--- a/gdb/inf-loop.c
+++ b/gdb/inf-loop.c
@@ -85,7 +85,7 @@ inferior_event_handler (enum inferior_event_type event_type)
break;
default:
- printf_unfiltered (_("Event type not recognized.\n"));
+ gdb_printf (gdb_stderr, _("Event type not recognized.\n"));
break;
}
}
diff --git a/gdb/inf-ptrace.c b/gdb/inf-ptrace.c
index 6e4706a3d20..b9767978744 100644
--- a/gdb/inf-ptrace.c
+++ b/gdb/inf-ptrace.c
@@ -48,6 +48,9 @@ gdb_ptrace (PTRACE_TYPE_ARG1 request, ptid_t ptid, PTRACE_TYPE_ARG3 addr,
#endif
}
+/* The event pipe registered as a waitable file in the event loop. */
+event_pipe inf_ptrace_target::m_event_pipe;
+
inf_ptrace_target::~inf_ptrace_target ()
{}
@@ -289,10 +292,14 @@ inf_ptrace_target::resume (ptid_t ptid, int step, enum gdb_signal signal)
ptid_t
inf_ptrace_target::wait (ptid_t ptid, struct target_waitstatus *ourstatus,
- target_wait_flags options)
+ target_wait_flags target_options)
{
pid_t pid;
- int status, save_errno;
+ int options, status, save_errno;
+
+ options = 0;
+ if (target_options & TARGET_WNOHANG)
+ options |= WNOHANG;
do
{
@@ -300,22 +307,38 @@ inf_ptrace_target::wait (ptid_t ptid, struct target_waitstatus *ourstatus,
do
{
- pid = waitpid (ptid.pid (), &status, 0);
+ pid = waitpid (ptid.pid (), &status, options);
save_errno = errno;
}
while (pid == -1 && errno == EINTR);
clear_sigint_trap ();
+ if (pid == 0)
+ {
+ gdb_assert (target_options & TARGET_WNOHANG);
+ ourstatus->set_ignore ();
+ return minus_one_ptid;
+ }
+
if (pid == -1)
{
- fprintf_unfiltered (gdb_stderr,
- _("Child process unexpectedly missing: %s.\n"),
- safe_strerror (save_errno));
+ /* In async mode the SIGCHLD might have raced and triggered
+ a check for an event that had already been reported. If
+ the event was the exit of the only remaining child,
+ waitpid() will fail with ECHILD. */
+ if (ptid == minus_one_ptid && save_errno == ECHILD)
+ {
+ ourstatus->set_no_resumed ();
+ return minus_one_ptid;
+ }
- /* Claim it exited with unknown signal. */
- ourstatus->set_signalled (GDB_SIGNAL_UNKNOWN);
- return inferior_ptid;
+ gdb_printf (gdb_stderr,
+ _("Child process unexpectedly missing: %s.\n"),
+ safe_strerror (save_errno));
+
+ ourstatus->set_ignore ();
+ return minus_one_ptid;
}
/* Ignore terminated detached child processes. */
@@ -497,9 +520,9 @@ inf_ptrace_target::files_info ()
{
struct inferior *inf = current_inferior ();
- printf_filtered (_("\tUsing the running image of %s %s.\n"),
- inf->attach_flag ? "attached" : "child",
- target_pid_to_str (inferior_ptid).c_str ());
+ gdb_printf (_("\tUsing the running image of %s %s.\n"),
+ inf->attach_flag ? "attached" : "child",
+ target_pid_to_str (inferior_ptid).c_str ());
}
std::string
@@ -507,3 +530,15 @@ inf_ptrace_target::pid_to_str (ptid_t ptid)
{
return normal_pid_to_str (ptid);
}
+
+/* Implement the "close" target method. */
+
+void
+inf_ptrace_target::close ()
+{
+ /* Unregister from the event loop. */
+ if (is_async_p ())
+ async (0);
+
+ inf_child_target::close ();
+}
diff --git a/gdb/inf-ptrace.h b/gdb/inf-ptrace.h
index 01b05f7d20e..8f18d4579a6 100644
--- a/gdb/inf-ptrace.h
+++ b/gdb/inf-ptrace.h
@@ -20,6 +20,7 @@
#ifndef INF_PTRACE_H
#define INF_PTRACE_H
+#include "gdbsupport/event-pipe.h"
#include "inf-child.h"
/* An abstract prototype ptrace target. The client can override it
@@ -33,6 +34,8 @@ struct inf_ptrace_target : public inf_child_target
void detach (inferior *inf, int) override;
+ void close () override;
+
void resume (ptid_t, int, enum gdb_signal) override;
ptid_t wait (ptid_t, struct target_waitstatus *, target_wait_flags) override;
@@ -57,7 +60,31 @@ struct inf_ptrace_target : public inf_child_target
ULONGEST offset, ULONGEST len,
ULONGEST *xfered_len) override;
+ bool is_async_p () override
+ { return m_event_pipe.is_open (); }
+
+ int async_wait_fd () override
+ { return m_event_pipe.event_fd (); }
+
+ /* Helper routine used from SIGCHLD handlers to signal the async
+ event pipe. */
+ static void async_file_mark_if_open ()
+ {
+ if (m_event_pipe.is_open ())
+ m_event_pipe.mark ();
+ }
+
protected:
+ /* Helper routines for interacting with the async event pipe. */
+ bool async_file_open ()
+ { return m_event_pipe.open_pipe (); }
+ void async_file_close ()
+ { m_event_pipe.close_pipe (); }
+ void async_file_flush ()
+ { m_event_pipe.flush (); }
+ void async_file_mark ()
+ { m_event_pipe.mark (); }
+
/* Cleanup the inferior after a successful ptrace detach. */
void detach_success (inferior *inf);
@@ -71,6 +98,9 @@ protected:
Such targets will supply an appropriate definition for this
function. */
virtual void post_startup_inferior (ptid_t ptid) = 0;
+
+private:
+ static event_pipe m_event_pipe;
};
#ifndef __NetBSD__
diff --git a/gdb/infcall.c b/gdb/infcall.c
index 05cf18f0a7f..5365f97049c 100644
--- a/gdb/infcall.c
+++ b/gdb/infcall.c
@@ -62,9 +62,9 @@ show_may_call_functions_p (struct ui_file *file, int from_tty,
struct cmd_list_element *c,
const char *value)
{
- fprintf_filtered (file,
- _("Permission to call functions in the program is %s.\n"),
- value);
+ gdb_printf (file,
+ _("Permission to call functions in the program is %s.\n"),
+ value);
}
/* How you should pass arguments to a function depends on whether it
@@ -92,10 +92,10 @@ static void
show_coerce_float_to_double_p (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file,
- _("Coercion of floats to doubles "
- "when calling functions is %s.\n"),
- value);
+ gdb_printf (file,
+ _("Coercion of floats to doubles "
+ "when calling functions is %s.\n"),
+ value);
}
/* This boolean tells what gdb should do if a signal is received while
@@ -110,10 +110,10 @@ static void
show_unwind_on_signal_p (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file,
- _("Unwinding of stack if a signal is "
- "received while in a call dummy is %s.\n"),
- value);
+ gdb_printf (file,
+ _("Unwinding of stack if a signal is "
+ "received while in a call dummy is %s.\n"),
+ value);
}
/* This boolean tells what gdb should do if a std::terminate call is
@@ -136,10 +136,10 @@ show_unwind_on_terminating_exception_p (struct ui_file *file, int from_tty,
const char *value)
{
- fprintf_filtered (file,
- _("Unwind stack if a C++ exception is "
- "unhandled while in a call dummy is %s.\n"),
- value);
+ gdb_printf (file,
+ _("Unwind stack if a C++ exception is "
+ "unhandled while in a call dummy is %s.\n"),
+ value);
}
/* Perform the standard coercions that are specified
@@ -574,7 +574,7 @@ call_thread_fsm::should_notify_stop ()
thrown errors. The caller should rethrow if there's an error. */
static struct gdb_exception
-run_inferior_call (struct call_thread_fsm *sm,
+run_inferior_call (std::unique_ptr<call_thread_fsm> sm,
struct thread_info *call_thread, CORE_ADDR real_pc)
{
struct gdb_exception caught_error;
@@ -597,9 +597,8 @@ run_inferior_call (struct call_thread_fsm *sm,
clear_proceed_status (0);
/* Associate the FSM with the thread after clear_proceed_status
- (otherwise it'd clear this FSM), and before anything throws, so
- we don't leak it (and any resources it manages). */
- call_thread->thread_fsm = sm;
+ (otherwise it'd clear this FSM). */
+ call_thread->set_thread_fsm (std::move (sm));
disable_watchpoints_before_interactive_call_start ();
@@ -813,6 +812,11 @@ call_function_by_hand_dummy (struct value *function,
type *values_type;
CORE_ADDR funaddr = find_function_addr (function, &values_type, &ftype);
+ if (is_nocall_function (ftype))
+ error (_("Cannot call the function '%s' which does not follow the "
+ "target calling convention."),
+ get_function_name (funaddr, name_buf, sizeof (name_buf)));
+
if (values_type == NULL)
values_type = default_return_type;
if (values_type == NULL)
@@ -1251,12 +1255,9 @@ call_function_by_hand_dummy (struct value *function,
just below is the place to chop this function in two.. */
{
- struct thread_fsm *saved_sm;
- struct call_thread_fsm *sm;
-
/* Save the current FSM. We'll override it. */
- saved_sm = call_thread->thread_fsm;
- call_thread->thread_fsm = NULL;
+ std::unique_ptr<thread_fsm> saved_sm = call_thread->release_thread_fsm ();
+ struct call_thread_fsm *sm;
/* Save this thread's ptid, we need it later but the thread
may have exited. */
@@ -1273,17 +1274,19 @@ call_function_by_hand_dummy (struct value *function,
values_type,
return_method != return_method_normal,
struct_addr);
-
- e = run_inferior_call (sm, call_thread.get (), real_pc);
+ {
+ std::unique_ptr<call_thread_fsm> sm_up (sm);
+ e = run_inferior_call (std::move (sm_up), call_thread.get (), real_pc);
+ }
gdb::observers::inferior_call_post.notify (call_thread_ptid, funaddr);
if (call_thread->state != THREAD_EXITED)
{
/* The FSM should still be the same. */
- gdb_assert (call_thread->thread_fsm == sm);
+ gdb_assert (call_thread->thread_fsm () == sm);
- if (call_thread->thread_fsm->finished_p ())
+ if (call_thread->thread_fsm ()->finished_p ())
{
struct value *retval;
@@ -1297,11 +1300,16 @@ call_function_by_hand_dummy (struct value *function,
/* Get the return value. */
retval = sm->return_value;
- /* Clean up / destroy the call FSM, and restore the
- original one. */
- call_thread->thread_fsm->clean_up (call_thread.get ());
- delete call_thread->thread_fsm;
- call_thread->thread_fsm = saved_sm;
+ /* Restore the original FSM and clean up / destroh the call FSM.
+ Doing it in this order ensures that if the call to clean_up
+ throws, the original FSM is properly restored. */
+ {
+ std::unique_ptr<thread_fsm> finalizing
+ = call_thread->release_thread_fsm ();
+ call_thread->set_thread_fsm (std::move (saved_sm));
+
+ finalizing->clean_up (call_thread.get ());
+ }
maybe_remove_breakpoints ();
@@ -1315,9 +1323,13 @@ call_function_by_hand_dummy (struct value *function,
/* Didn't complete. Clean up / destroy the call FSM, and restore the
previous state machine, and handle the error. */
- call_thread->thread_fsm->clean_up (call_thread.get ());
- delete call_thread->thread_fsm;
- call_thread->thread_fsm = saved_sm;
+ {
+ std::unique_ptr<thread_fsm> finalizing
+ = call_thread->release_thread_fsm ();
+ call_thread->set_thread_fsm (std::move (saved_sm));
+
+ finalizing->clean_up (call_thread.get ());
+ }
}
}
diff --git a/gdb/infcmd.c b/gdb/infcmd.c
index 8bf58018bdd..e909d4d4c81 100644
--- a/gdb/infcmd.c
+++ b/gdb/infcmd.c
@@ -117,9 +117,9 @@ show_inferior_tty_command (struct ui_file *file, int from_tty,
directly. */
const std::string &inferior_tty = current_inferior ()->tty ();
- fprintf_filtered (file,
- _("Terminal for future runs of program being debugged "
- "is \"%s\".\n"), inferior_tty.c_str ());
+ gdb_printf (file,
+ _("Terminal for future runs of program being debugged "
+ "is \"%s\".\n"), inferior_tty.c_str ());
}
void
@@ -177,16 +177,16 @@ show_cwd_command (struct ui_file *file, int from_tty,
const std::string &cwd = current_inferior ()->cwd ();
if (cwd.empty ())
- fprintf_filtered (file,
- _("\
+ gdb_printf (file,
+ _("\
You have not set the inferior's current working directory.\n\
The inferior will inherit GDB's cwd if native debugging, or the remote\n\
server's cwd if remote debugging.\n"));
else
- fprintf_filtered (file,
- _("Current working directory that will be used "
- "when starting the inferior is \"%s\".\n"),
- cwd.c_str ());
+ gdb_printf (file,
+ _("Current working directory that will be used "
+ "when starting the inferior is \"%s\".\n"),
+ cwd.c_str ());
}
@@ -238,6 +238,9 @@ post_create_inferior (int from_tty)
/* Be sure we own the terminal in case write operations are performed. */
target_terminal::ours_for_output ();
+ infrun_debug_show_threads ("threads in the newly created inferior",
+ current_inferior ()->non_exited_threads ());
+
/* If the target hasn't taken care of this already, do it now.
Targets which need to access registers during to_open,
to_create_inferior, or to_attach should do it earlier; but many
@@ -438,7 +441,8 @@ run_command_1 (const char *args, int from_tty, enum run_how run_how)
uiout->field_string (NULL, "Starting program");
uiout->text (": ");
if (exec_file)
- uiout->field_string ("execfile", exec_file);
+ uiout->field_string ("execfile", exec_file,
+ file_name_style.style ());
uiout->spaces (1);
uiout->field_string ("infargs", current_inferior ()->args ());
uiout->text ("\n");
@@ -453,6 +457,9 @@ run_command_1 (const char *args, int from_tty, enum run_how run_how)
shouldn't refer to run_target again. */
run_target = NULL;
+ infrun_debug_show_threads ("immediately after create_process",
+ current_inferior ()->non_exited_threads ());
+
/* We're starting off a new process. When we get out of here, in
non-stop mode, finish the state of all threads of that process,
but leave other threads alone, as they may be stopped in internal
@@ -700,13 +707,13 @@ continue_command (const char *args, int from_tty)
/* set_ignore_count prints a message ending with a period.
So print two spaces before "Continuing.". */
if (from_tty)
- printf_filtered (" ");
+ gdb_printf (" ");
stopped = 1;
}
if (!stopped && from_tty)
{
- printf_filtered
+ gdb_printf
("Not stopped at any breakpoint; argument ignored.\n");
}
}
@@ -723,7 +730,7 @@ continue_command (const char *args, int from_tty)
prepare_execution_command (current_inferior ()->top_target (), async_exec);
if (from_tty)
- printf_filtered (_("Continuing.\n"));
+ gdb_printf (_("Continuing.\n"));
continue_1 (all_threads_p);
}
@@ -848,7 +855,7 @@ step_1 (int skip_subroutines, int single_inst, const char *count_string)
steps. */
thr = inferior_thread ();
step_sm = new step_command_fsm (command_interp ());
- thr->thread_fsm = step_sm;
+ thr->set_thread_fsm (std::unique_ptr<thread_fsm> (step_sm));
step_command_fsm_prepare (step_sm, skip_subroutines,
single_inst, count, thr);
@@ -865,7 +872,7 @@ step_1 (int skip_subroutines, int single_inst, const char *count_string)
/* Stepped into an inline frame. Pretend that we've
stopped. */
- thr->thread_fsm->clean_up (thr);
+ thr->thread_fsm ()->clean_up (thr);
proceeded = normal_stop ();
if (!proceeded)
inferior_event_handler (INF_EXEC_COMPLETE);
@@ -976,11 +983,11 @@ prepare_one_step (thread_info *tp, struct step_command_fsm *sm)
if (inline_skipped_frames (tp) > 0)
{
symbol *sym = inline_skipped_symbol (tp);
- if (SYMBOL_CLASS (sym) == LOC_BLOCK)
+ if (sym->aclass () == LOC_BLOCK)
{
- const block *block = SYMBOL_BLOCK_VALUE (sym);
- if (BLOCK_END (block) < tp->control.step_range_end)
- tp->control.step_range_end = BLOCK_END (block);
+ const block *block = sym->value_block ();
+ if (block->end () < tp->control.step_range_end)
+ tp->control.step_range_end = block->end ();
}
}
@@ -1002,9 +1009,9 @@ prepare_one_step (thread_info *tp, struct step_command_fsm *sm)
error (_("Cannot find bounds of current function"));
target_terminal::ours_for_output ();
- printf_filtered (_("Single stepping until exit from function %s,"
- "\nwhich has no line number information.\n"),
- name);
+ gdb_printf (_("Single stepping until exit from function %s,"
+ "\nwhich has no line number information.\n"),
+ name);
}
}
else
@@ -1085,7 +1092,7 @@ jump_command (const char *arg, int from_tty)
struct obj_section *section;
fixup_symbol_section (sfn, 0);
- section = sfn->obj_section (symbol_objfile (sfn));
+ section = sfn->obj_section (sfn->objfile ());
if (section_is_overlay (section)
&& !section_is_mapped (section))
{
@@ -1102,9 +1109,9 @@ jump_command (const char *arg, int from_tty)
if (from_tty)
{
- printf_filtered (_("Continuing at "));
- fputs_filtered (paddress (gdbarch, addr), gdb_stdout);
- printf_filtered (".\n");
+ gdb_printf (_("Continuing at "));
+ gdb_puts (paddress (gdbarch, addr));
+ gdb_printf (".\n");
}
clear_proceed_status (0);
@@ -1178,11 +1185,11 @@ signal_command (const char *signum_exp, int from_tty)
&& signal_pass_state (tp->stop_signal ()))
{
if (!must_confirm)
- printf_unfiltered (_("Note:\n"));
- printf_unfiltered (_(" Thread %s previously stopped with signal %s, %s.\n"),
- print_thread_id (tp),
- gdb_signal_to_name (tp->stop_signal ()),
- gdb_signal_to_string (tp->stop_signal ()));
+ gdb_printf (_("Note:\n"));
+ gdb_printf (_(" Thread %s previously stopped with signal %s, %s.\n"),
+ print_thread_id (tp),
+ gdb_signal_to_name (tp->stop_signal ()),
+ gdb_signal_to_string (tp->stop_signal ()));
must_confirm = 1;
}
}
@@ -1198,10 +1205,10 @@ signal_command (const char *signum_exp, int from_tty)
if (from_tty)
{
if (oursig == GDB_SIGNAL_0)
- printf_filtered (_("Continuing with no signal.\n"));
+ gdb_printf (_("Continuing with no signal.\n"));
else
- printf_filtered (_("Continuing with signal %s.\n"),
- gdb_signal_to_name (oursig));
+ gdb_printf (_("Continuing with signal %s.\n"),
+ gdb_signal_to_name (oursig));
}
clear_proceed_status (0);
@@ -1335,7 +1342,7 @@ until_next_command (int from_tty)
if (msymbol.minsym == NULL)
error (_("Execution is not within a known function."));
- tp->control.step_range_start = BMSYMBOL_VALUE_ADDRESS (msymbol);
+ tp->control.step_range_start = msymbol.value_address ();
/* The upper-bound of step_range is exclusive. In order to make PC
within the range, set the step_range_end with PC + 1. */
tp->control.step_range_end = pc + 1;
@@ -1344,8 +1351,47 @@ until_next_command (int from_tty)
{
sal = find_pc_line (pc, 0);
- tp->control.step_range_start = BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (func));
+ tp->control.step_range_start = func->value_block ()->entry_pc ();
tp->control.step_range_end = sal.end;
+
+ /* By setting the step_range_end based on the current pc, we are
+ assuming that the last line table entry for any given source line
+ will have is_stmt set to true. This is not necessarily the case,
+ there may be additional entries for the same source line with
+ is_stmt set false. Consider the following code:
+
+ for (int i = 0; i < 10; i++)
+ loop_body ();
+
+ Clang-13, will generate multiple line table entries at the end of
+ the loop all associated with the 'for' line. The first of these
+ entries is marked is_stmt true, but the other entries are is_stmt
+ false.
+
+ If we only use the values in SAL, then our stepping range may not
+ extend to the end of the loop. The until command will reach the
+ end of the range, find a non is_stmt instruction, and step to the
+ next is_stmt instruction. This stopping point, however, will be
+ inside the loop, which is not what we wanted.
+
+ Instead, we now check any subsequent line table entries to see if
+ they are for the same line. If they are, and they are marked
+ is_stmt false, then we extend the end of our stepping range.
+
+ When we finish this process the end of the stepping range will
+ point either to a line with a different line number, or, will
+ point at an address for the same line number that is marked as a
+ statement. */
+
+ struct symtab_and_line final_sal
+ = find_pc_line (tp->control.step_range_end, 0);
+
+ while (final_sal.line == sal.line && final_sal.symtab == sal.symtab
+ && !final_sal.is_stmt)
+ {
+ tp->control.step_range_end = final_sal.end;
+ final_sal = find_pc_line (final_sal.end, 0);
+ }
}
tp->control.may_range_step = 1;
@@ -1355,7 +1401,7 @@ until_next_command (int from_tty)
delete_longjmp_breakpoint_cleanup lj_deleter (thread);
sm = new until_next_fsm (command_interp (), tp->global_num);
- tp->thread_fsm = sm;
+ tp->set_thread_fsm (std::unique_ptr<thread_fsm> (sm));
lj_deleter.release ();
proceed ((CORE_ADDR) -1, GDB_SIGNAL_DEFAULT);
@@ -1405,20 +1451,28 @@ advance_command (const char *arg, int from_tty)
until_break_command (arg, from_tty, 1);
}
-/* Return the value of the result of a function at the end of a 'finish'
- command/BP. DTOR_DATA (if not NULL) can represent inferior registers
- right after an inferior call has finished. */
+/* See inferior.h. */
struct value *
-get_return_value (struct value *function, struct type *value_type)
+get_return_value (struct symbol *func_symbol, struct value *function)
{
regcache *stop_regs = get_current_regcache ();
struct gdbarch *gdbarch = stop_regs->arch ();
struct value *value;
- value_type = check_typedef (value_type);
+ struct type *value_type
+ = check_typedef (TYPE_TARGET_TYPE (func_symbol->type ()));
gdb_assert (value_type->code () != TYPE_CODE_VOID);
+ if (is_nocall_function (check_typedef (::value_type (function))))
+ {
+ warning (_("Function '%s' does not follow the target calling "
+ "convention, cannot determine its returned value."),
+ func_symbol->print_name ());
+
+ return nullptr;
+ }
+
/* FIXME: 2003-09-27: When returning from a nested inferior function
call, it's possible (with no help from the architecture vector)
to locate and return/print a "struct return" value. This is just
@@ -1567,7 +1621,7 @@ finish_command_fsm::should_stop (struct thread_info *tp)
/* We're done. */
set_finished ();
- rv->type = TYPE_TARGET_TYPE (SYMBOL_TYPE (function));
+ rv->type = TYPE_TARGET_TYPE (function->type ());
if (rv->type == NULL)
internal_error (__FILE__, __LINE__,
_("finish_command: function has no target type"));
@@ -1577,7 +1631,7 @@ finish_command_fsm::should_stop (struct thread_info *tp)
struct value *func;
func = read_var_value (function, NULL, get_current_frame ());
- rv->value = get_return_value (func, rv->type);
+ rv->value = get_return_value (function, func);
if (rv->value != NULL)
rv->value_history_index = record_latest_value (rv->value);
}
@@ -1762,7 +1816,7 @@ finish_command (const char *arg, int from_tty)
sm = new finish_command_fsm (command_interp ());
- tp->thread_fsm = sm;
+ tp->set_thread_fsm (std::unique_ptr<thread_fsm> (sm));
/* Finishing from an inline frame is completely different. We don't
try to show the "return value" - no way to locate it. */
@@ -1783,7 +1837,7 @@ finish_command (const char *arg, int from_tty)
source. */
if (from_tty)
{
- printf_filtered (_("Run till exit from "));
+ gdb_printf (_("Run till exit from "));
print_stack_frame (get_selected_frame (NULL), 1, LOCATION, 0);
}
@@ -1800,15 +1854,15 @@ finish_command (const char *arg, int from_tty)
if (from_tty)
{
if (execution_direction == EXEC_REVERSE)
- printf_filtered (_("Run back to call of "));
+ gdb_printf (_("Run back to call of "));
else
{
- if (sm->function != NULL && TYPE_NO_RETURN (sm->function->type)
+ if (sm->function != NULL && TYPE_NO_RETURN (sm->function->type ())
&& !query (_("warning: Function %s does not return normally.\n"
"Try to finish anyway? "),
sm->function->print_name ()))
error (_("Not confirmed."));
- printf_filtered (_("Run till exit from "));
+ gdb_printf (_("Run till exit from "));
}
print_stack_frame (get_selected_frame (NULL), 1, LOCATION, 0);
@@ -1838,7 +1892,7 @@ info_program_command (const char *args, int from_tty)
if (!target_has_execution ())
{
- printf_filtered (_("The program being debugged is not being run.\n"));
+ gdb_printf (_("The program being debugged is not being run.\n"));
return;
}
@@ -1864,10 +1918,10 @@ info_program_command (const char *args, int from_tty)
stat = bpstat_num (&bs, &num);
target_files_info ();
- printf_filtered (_("Program stopped at %s.\n"),
- paddress (target_gdbarch (), tp->stop_pc ()));
+ gdb_printf (_("Program stopped at %s.\n"),
+ paddress (target_gdbarch (), tp->stop_pc ()));
if (tp->control.stop_step)
- printf_filtered (_("It stopped after being stepped.\n"));
+ gdb_printf (_("It stopped after being stepped.\n"));
else if (stat != 0)
{
/* There may be several breakpoints in the same place, so this
@@ -1876,25 +1930,25 @@ info_program_command (const char *args, int from_tty)
{
if (stat < 0)
{
- printf_filtered (_("It stopped at a breakpoint "
- "that has since been deleted.\n"));
+ gdb_printf (_("It stopped at a breakpoint "
+ "that has since been deleted.\n"));
}
else
- printf_filtered (_("It stopped at breakpoint %d.\n"), num);
+ gdb_printf (_("It stopped at breakpoint %d.\n"), num);
stat = bpstat_num (&bs, &num);
}
}
else if (tp->stop_signal () != GDB_SIGNAL_0)
{
- printf_filtered (_("It stopped with signal %s, %s.\n"),
- gdb_signal_to_name (tp->stop_signal ()),
- gdb_signal_to_string (tp->stop_signal ()));
+ gdb_printf (_("It stopped with signal %s, %s.\n"),
+ gdb_signal_to_name (tp->stop_signal ()),
+ gdb_signal_to_string (tp->stop_signal ()));
}
if (from_tty)
{
- printf_filtered (_("Type \"info stack\" or \"info "
- "registers\" for more information.\n"));
+ gdb_printf (_("Type \"info stack\" or \"info "
+ "registers\" for more information.\n"));
}
}
@@ -1907,16 +1961,16 @@ environment_info (const char *var, int from_tty)
if (val)
{
- puts_filtered (var);
- puts_filtered (" = ");
- puts_filtered (val);
- puts_filtered ("\n");
+ gdb_puts (var);
+ gdb_puts (" = ");
+ gdb_puts (val);
+ gdb_puts ("\n");
}
else
{
- puts_filtered ("Environment variable \"");
- puts_filtered (var);
- puts_filtered ("\" not defined.\n");
+ gdb_puts ("Environment variable \"");
+ gdb_puts (var);
+ gdb_puts ("\" not defined.\n");
}
}
else
@@ -1925,8 +1979,8 @@ environment_info (const char *var, int from_tty)
for (int idx = 0; envp[idx] != NULL; ++idx)
{
- puts_filtered (envp[idx]);
- puts_filtered ("\n");
+ gdb_puts (envp[idx]);
+ gdb_puts ("\n");
}
}
}
@@ -1984,9 +2038,9 @@ set_environment_command (const char *arg, int from_tty)
std::string var (arg, p - arg);
if (nullset)
{
- printf_filtered (_("Setting environment variable "
- "\"%s\" to null value.\n"),
- var.c_str ());
+ gdb_printf (_("Setting environment variable "
+ "\"%s\" to null value.\n"),
+ var.c_str ());
current_inferior ()->environment.set (var.c_str (), "");
}
else
@@ -2014,9 +2068,9 @@ static const char path_var_name[] = "PATH";
static void
path_info (const char *args, int from_tty)
{
- puts_filtered ("Executable and object file path: ");
- puts_filtered (current_inferior ()->environment.get (path_var_name));
- puts_filtered ("\n");
+ gdb_puts ("Executable and object file path: ");
+ gdb_puts (current_inferior ()->environment.get (path_var_name));
+ gdb_puts ("\n");
}
/* Add zero or more directories to the front of the execution path. */
@@ -2116,8 +2170,8 @@ default_print_one_register_info (struct ui_file *file,
}
}
- fputs_filtered (format_stream.c_str (), file);
- fprintf_filtered (file, "\n");
+ gdb_puts (format_stream.c_str (), file);
+ gdb_printf (file, "\n");
}
/* Print out the machine register regnum. If regnum is -1, print all
@@ -2247,17 +2301,17 @@ registers_info (const char *addr_exp, int fpregs)
/* A register group? */
{
- struct reggroup *group;
-
- for (group = reggroup_next (gdbarch, NULL);
- group != NULL;
- group = reggroup_next (gdbarch, group))
+ const struct reggroup *group = nullptr;
+ for (const struct reggroup *g : gdbarch_reggroups (gdbarch))
{
/* Don't bother with a length check. Should the user
enter a short register group name, go with the first
group that matches. */
- if (strncmp (start, reggroup_name (group), end - start) == 0)
- break;
+ if (strncmp (start, g->name (), end - start) == 0)
+ {
+ group = g;
+ break;
+ }
}
if (group != NULL)
{
@@ -2315,7 +2369,7 @@ print_vector_info (struct ui_file *file,
}
}
if (!printed_something)
- fprintf_filtered (file, "No vector information\n");
+ gdb_printf (file, "No vector information\n");
}
}
@@ -2352,8 +2406,8 @@ kill_command (const char *arg, int from_tty)
bfd_cache_close_all ();
if (print_inferior_events)
- printf_filtered (_("[Inferior %d (%s) killed]\n"),
- infnum, pid_str.c_str ());
+ gdb_printf (_("[Inferior %d (%s) killed]\n"),
+ infnum, pid_str.c_str ());
}
/* Used in `attach&' command. Proceed threads of inferior INF iff
@@ -2473,7 +2527,7 @@ attach_post_wait (int from_tty, enum attach_post_wait_mode mode)
{
struct thread_info *lowest = inferior_thread ();
- stop_all_threads ();
+ stop_all_threads ("attaching");
/* It's not defined which thread will report the attach
stop. For consistency, always select the thread with
@@ -2541,6 +2595,13 @@ attach_command (const char *args, int from_tty)
shouldn't refer to attach_target again. */
attach_target = NULL;
+ infrun_debug_show_threads ("immediately after attach",
+ current_inferior ()->non_exited_threads ());
+
+ /* Enable async mode if it is supported by the target. */
+ if (target_can_async_p ())
+ target_async (1);
+
/* Set up the "saved terminal modes" of the inferior
based on what modes we are starting it with. */
target_terminal::init ();
@@ -2838,8 +2899,8 @@ default_print_float_info (struct gdbarch *gdbarch, struct ui_file *file,
}
}
if (!printed_something)
- fprintf_filtered (file, "No floating-point info "
- "available for this processor.\n");
+ gdb_printf (file, "No floating-point info "
+ "available for this processor.\n");
}
static void
@@ -2949,9 +3010,9 @@ show_print_finish (struct ui_file *file, int from_tty,
struct cmd_list_element *c,
const char *value)
{
- fprintf_filtered (file, _("\
+ gdb_printf (file, _("\
Printing of return value after `finish' is %s.\n"),
- value);
+ value);
}
diff --git a/gdb/inferior.c b/gdb/inferior.c
index c7a6ae87cf5..606b4189181 100644
--- a/gdb/inferior.c
+++ b/gdb/inferior.c
@@ -35,6 +35,8 @@
#include "target-descriptions.h"
#include "readline/tilde.h"
#include "progspace-and-thread.h"
+#include "gdbsupport/buildargv.h"
+#include "cli/cli-style.h"
/* Keep a registry of per-inferior data-pointers required by other GDB
modules. */
@@ -162,11 +164,11 @@ add_inferior (int pid)
if (print_inferior_events)
{
if (pid != 0)
- printf_unfiltered (_("[New inferior %d (%s)]\n"),
- inf->num,
- target_pid_to_str (ptid_t (pid)).c_str ());
+ gdb_printf (_("[New inferior %d (%s)]\n"),
+ inf->num,
+ target_pid_to_str (ptid_t (pid)).c_str ());
else
- printf_unfiltered (_("[New inferior %d]\n"), inf->num);
+ gdb_printf (_("[New inferior %d]\n"), inf->num);
}
return inf;
@@ -262,9 +264,9 @@ detach_inferior (inferior *inf)
exit_inferior_1 (inf, 0);
if (print_inferior_events)
- printf_unfiltered (_("[Inferior %d (%s) detached]\n"),
- inf->num,
- target_pid_to_str (ptid_t (pid)).c_str ());
+ gdb_printf (_("[Inferior %d (%s) detached]\n"),
+ inf->num,
+ target_pid_to_str (ptid_t (pid)).c_str ());
}
void
@@ -520,7 +522,8 @@ print_inferior (struct ui_out *uiout, const char *requested_inferiors)
uiout->field_string ("connection-id", conn);
if (inf->pspace->exec_filename != nullptr)
- uiout->field_string ("exec", inf->pspace->exec_filename.get ());
+ uiout->field_string ("exec", inf->pspace->exec_filename.get (),
+ file_name_style.style ());
else
uiout->field_skip ("exec");
@@ -647,9 +650,9 @@ inferior_command (const char *args, int from_tty)
if (filename == nullptr)
filename = _("<noexec>");
- printf_filtered (_("[Current inferior is %d [%s] (%s)]\n"),
- inf->num, inferior_pid_to_str (inf->pid).c_str (),
- filename);
+ gdb_printf (_("[Current inferior is %d [%s] (%s)]\n"),
+ inf->num, inferior_pid_to_str (inf->pid).c_str (),
+ filename);
}
else
{
@@ -756,11 +759,9 @@ add_inferior_with_spaces (void)
return inf;
}
-/* Switch to inferior NEW_INF, a new inferior, and unless
- NO_CONNECTION is true, push the process_stratum_target of ORG_INF
- to NEW_INF. */
+/* See inferior.h. */
-static void
+void
switch_to_inferior_and_push_target (inferior *new_inf,
bool no_connection, inferior *org_inf)
{
@@ -775,19 +776,19 @@ switch_to_inferior_and_push_target (inferior *new_inf,
{
new_inf->push_target (proc_target);
if (proc_target->connection_string () != NULL)
- printf_filtered (_("Added inferior %d on connection %d (%s %s)\n"),
- new_inf->num,
- proc_target->connection_number,
- proc_target->shortname (),
- proc_target->connection_string ());
+ gdb_printf (_("Added inferior %d on connection %d (%s %s)\n"),
+ new_inf->num,
+ proc_target->connection_number,
+ proc_target->shortname (),
+ proc_target->connection_string ());
else
- printf_filtered (_("Added inferior %d on connection %d (%s)\n"),
- new_inf->num,
- proc_target->connection_number,
- proc_target->shortname ());
+ gdb_printf (_("Added inferior %d on connection %d (%s)\n"),
+ new_inf->num,
+ proc_target->connection_number,
+ proc_target->shortname ());
}
else
- printf_filtered (_("Added inferior %d\n"), new_inf->num);
+ gdb_printf (_("Added inferior %d\n"), new_inf->num);
}
/* add-inferior [-copies N] [-exec FILENAME] [-no-connection] */
@@ -959,7 +960,7 @@ static void
show_print_inferior_events (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Printing of inferior events is %s.\n"), value);
+ gdb_printf (file, _("Printing of inferior events is %s.\n"), value);
}
/* Return a new value for the selected inferior's id. */
@@ -979,7 +980,6 @@ static const struct internalvar_funcs inferior_funcs =
{
inferior_id_make_value,
NULL,
- NULL
};
diff --git a/gdb/inferior.h b/gdb/inferior.h
index ec0fb6e8b16..f6e26a32feb 100644
--- a/gdb/inferior.h
+++ b/gdb/inferior.h
@@ -219,8 +219,14 @@ extern void detach_command (const char *, int);
extern void notice_new_inferior (struct thread_info *, bool, int);
-extern struct value *get_return_value (struct value *function,
- struct type *value_type);
+/* Return the value of the result of a function at the end of a 'finish'
+ command/BP. If the result's value cannot be retrieved, return NULL.
+
+ FUNC_SYMBOL is the symbol of the function being returned from. FUNCTION is
+ a value containing the address of the function. */
+
+extern struct value *get_return_value (struct symbol *func_symbol,
+ struct value *function);
/* Prepare for execution command. TARGET is the target that will run
the command. BACKGROUND determines whether this is a foreground
@@ -531,10 +537,10 @@ public:
exits or execs. */
bool pending_detach = false;
- /* True if this inferior is a vfork parent waiting for a vfork child
- not under our control to be done with the shared memory region,
- either by exiting or execing. */
- bool waiting_for_vfork_done = false;
+ /* If non-nullptr, points to a thread that called vfork and is now waiting
+ for a vfork child not under our control to be done with the shared memory
+ region, either by exiting or execing. */
+ thread_info *thread_waiting_for_vfork_done = nullptr;
/* True if we're in the process of detaching from this inferior. */
bool detaching = false;
@@ -734,4 +740,11 @@ extern struct inferior *add_inferior_with_spaces (void);
/* Print the current selected inferior. */
extern void print_selected_inferior (struct ui_out *uiout);
+/* Switch to inferior NEW_INF, a new inferior, and unless
+ NO_CONNECTION is true, push the process_stratum_target of ORG_INF
+ to NEW_INF. */
+
+extern void switch_to_inferior_and_push_target
+ (inferior *new_inf, bool no_connection, inferior *org_inf);
+
#endif /* !defined (INFERIOR_H) */
diff --git a/gdb/inflow.c b/gdb/inflow.c
index cd7a4171c98..9c7e2907625 100644
--- a/gdb/inflow.c
+++ b/gdb/inflow.c
@@ -172,8 +172,8 @@ gdb_has_a_terminal (void)
#define OOPSY(what) \
if (result == -1) \
- fprintf_unfiltered(gdb_stderr, "[%s failed in terminal_inferior: %s]\n", \
- what, safe_strerror (errno))
+ gdb_printf(gdb_stderr, "[%s failed in terminal_inferior: %s]\n", \
+ what, safe_strerror (errno))
/* Initialize the terminal settings we record for the inferior,
before we actually run the inferior. */
@@ -382,7 +382,7 @@ child_terminal_inferior (struct target_ops *self)
process running on another terminal and we couldn't
tell whether it was sharing GDB's terminal (and so
assumed yes). */
- fprintf_unfiltered
+ gdb_printf
(gdb_stderr,
"[tcsetpgrp failed in child_terminal_inferior: %s]\n",
safe_strerror (errno));
@@ -492,9 +492,9 @@ child_terminal_ours_1 (target_terminal_state desired_state)
used to check for an error here, so perhaps there are other
such situations as well. */
if (result == -1)
- fprintf_unfiltered (gdb_stderr,
- "[tcsetpgrp failed in child_terminal_ours: %s]\n",
- safe_strerror (errno));
+ gdb_printf (gdb_stderr,
+ "[tcsetpgrp failed in child_terminal_ours: %s]\n",
+ safe_strerror (errno));
#endif
#endif /* termios */
}
@@ -681,7 +681,7 @@ child_terminal_info (struct target_ops *self, const char *args, int from_tty)
if (!gdb_has_a_terminal ())
{
- printf_filtered (_("This GDB does not control a terminal.\n"));
+ gdb_printf (_("This GDB does not control a terminal.\n"));
return;
}
@@ -691,8 +691,8 @@ child_terminal_info (struct target_ops *self, const char *args, int from_tty)
inf = current_inferior ();
tinfo = get_inflow_inferior_data (inf);
- printf_filtered (_("Inferior's terminal status "
- "(currently saved by GDB):\n"));
+ gdb_printf (_("Inferior's terminal status "
+ "(currently saved by GDB):\n"));
/* First the fcntl flags. */
{
@@ -700,7 +700,7 @@ child_terminal_info (struct target_ops *self, const char *args, int from_tty)
flags = tinfo->tflags;
- printf_filtered ("File descriptor flags = ");
+ gdb_printf ("File descriptor flags = ");
#ifndef O_ACCMODE
#define O_ACCMODE (O_RDONLY | O_WRONLY | O_RDWR)
@@ -709,20 +709,20 @@ child_terminal_info (struct target_ops *self, const char *args, int from_tty)
switch (flags & (O_ACCMODE))
{
case O_RDONLY:
- printf_filtered ("O_RDONLY");
+ gdb_printf ("O_RDONLY");
break;
case O_WRONLY:
- printf_filtered ("O_WRONLY");
+ gdb_printf ("O_WRONLY");
break;
case O_RDWR:
- printf_filtered ("O_RDWR");
+ gdb_printf ("O_RDWR");
break;
}
flags &= ~(O_ACCMODE);
#ifdef O_NONBLOCK
if (flags & O_NONBLOCK)
- printf_filtered (" | O_NONBLOCK");
+ gdb_printf (" | O_NONBLOCK");
flags &= ~O_NONBLOCK;
#endif
@@ -731,27 +731,27 @@ child_terminal_info (struct target_ops *self, const char *args, int from_tty)
print it as O_NONBLOCK, which is good cause that is what POSIX
has, and the flag will already be cleared by the time we get here. */
if (flags & O_NDELAY)
- printf_filtered (" | O_NDELAY");
+ gdb_printf (" | O_NDELAY");
flags &= ~O_NDELAY;
#endif
if (flags & O_APPEND)
- printf_filtered (" | O_APPEND");
+ gdb_printf (" | O_APPEND");
flags &= ~O_APPEND;
#if defined (O_BINARY)
if (flags & O_BINARY)
- printf_filtered (" | O_BINARY");
+ gdb_printf (" | O_BINARY");
flags &= ~O_BINARY;
#endif
if (flags)
- printf_filtered (" | 0x%x", flags);
- printf_filtered ("\n");
+ gdb_printf (" | 0x%x", flags);
+ gdb_printf ("\n");
}
#ifdef HAVE_TERMIOS_H
- printf_filtered ("Process group = %d\n", (int) tinfo->process_group);
+ gdb_printf ("Process group = %d\n", (int) tinfo->process_group);
#endif
serial_print_tty_state (stdin_serial, tinfo->ttystate, gdb_stdout);
diff --git a/gdb/infrun.c b/gdb/infrun.c
index 793d83a17a6..02c98b50c8c 100644
--- a/gdb/infrun.c
+++ b/gdb/infrun.c
@@ -72,6 +72,7 @@
#include "scoped-mock-context.h"
#include "test-target.h"
#include "gdbsupport/common-debug.h"
+#include "gdbsupport/buildargv.h"
/* Prototypes for local functions */
@@ -95,6 +96,13 @@ static void resume (gdb_signal sig);
static void wait_for_inferior (inferior *inf);
+static void restart_threads (struct thread_info *event_thread,
+ inferior *inf = nullptr);
+
+static bool start_step_over (void);
+
+static bool step_over_info_valid_p (void);
+
/* Asynchronous signal handler registered as event loop source for
when we have pending events ready to be passed to the core. */
static struct async_event_handler *infrun_async_inferior_event_token;
@@ -137,7 +145,7 @@ static void
show_step_stop_if_no_debug (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Mode of the step operation is %s.\n"), value);
+ gdb_printf (file, _("Mode of the step operation is %s.\n"), value);
}
/* proceed and normal_stop use this to notify the user when the
@@ -158,7 +166,7 @@ static void
show_debug_infrun (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Inferior debugging is %s.\n"), value);
+ gdb_printf (file, _("Inferior debugging is %s.\n"), value);
}
/* Support for disabling address space randomization. */
@@ -170,14 +178,14 @@ show_disable_randomization (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
if (target_supports_disable_randomization ())
- fprintf_filtered (file,
- _("Disabling randomization of debuggee's "
- "virtual address space is %s.\n"),
- value);
+ gdb_printf (file,
+ _("Disabling randomization of debuggee's "
+ "virtual address space is %s.\n"),
+ value);
else
- fputs_filtered (_("Disabling randomization of debuggee's "
- "virtual address space is unsupported on\n"
- "this platform.\n"), file);
+ gdb_puts (_("Disabling randomization of debuggee's "
+ "virtual address space is unsupported on\n"
+ "this platform.\n"), file);
}
static void
@@ -212,9 +220,9 @@ static void
show_non_stop (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file,
- _("Controlling the inferior in non-stop mode is %s.\n"),
- value);
+ gdb_printf (file,
+ _("Controlling the inferior in non-stop mode is %s.\n"),
+ value);
}
/* "Observer mode" is somewhat like a more extreme version of
@@ -256,15 +264,15 @@ set_observer_mode (const char *args, int from_tty,
}
if (from_tty)
- printf_filtered (_("Observer mode is now %s.\n"),
- (observer_mode ? "on" : "off"));
+ gdb_printf (_("Observer mode is now %s.\n"),
+ (observer_mode ? "on" : "off"));
}
static void
show_observer_mode (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Observer mode is %s.\n"), value);
+ gdb_printf (file, _("Observer mode is %s.\n"), value);
}
/* This updates the value of observer mode based on changes in
@@ -284,8 +292,8 @@ update_observer_mode (void)
/* Let the user know if things change. */
if (newval != observer_mode)
- printf_filtered (_("Observer mode is now %s.\n"),
- (newval ? "on" : "off"));
+ gdb_printf (_("Observer mode is now %s.\n"),
+ (newval ? "on" : "off"));
observer_mode = observer_mode_1 = newval;
}
@@ -357,8 +365,8 @@ static void
show_stop_on_solib_events (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Stopping for shared library events is %s.\n"),
- value);
+ gdb_printf (file, _("Stopping for shared library events is %s.\n"),
+ value);
}
/* True after stop if current stack frame should be printed. */
@@ -366,7 +374,7 @@ show_stop_on_solib_events (struct ui_file *file, int from_tty,
static bool stop_print_frame;
/* This is a cached copy of the target/ptid/waitstatus of the last
- event returned by target_wait()/deprecated_target_wait_hook().
+ event returned by target_wait().
This information is returned by get_last_target_status(). */
static process_stratum_target *target_last_proc_target;
static ptid_t target_last_wait_ptid;
@@ -388,10 +396,10 @@ static void
show_follow_fork_mode_string (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file,
- _("Debugger response to a program "
- "call of fork or vfork is \"%s\".\n"),
- value);
+ gdb_printf (file,
+ _("Debugger response to a program "
+ "call of fork or vfork is \"%s\".\n"),
+ value);
}
@@ -421,7 +429,7 @@ follow_fork_inferior (bool follow_child, bool detach_fork)
the parent stays blocked. If we're telling the parent to run
in the foreground, the user will not be able to ctrl-c to get
back the terminal, effectively hanging the debug session. */
- fprintf_filtered (gdb_stderr, _("\
+ gdb_printf (gdb_stderr, _("\
Can not resume the parent process over vfork in the foreground while\n\
holding the child stopped. Try \"set detach-on-fork\" or \
\"set schedule-multiple\".\n"));
@@ -431,6 +439,8 @@ holding the child stopped. Try \"set detach-on-fork\" or \
inferior *parent_inf = current_inferior ();
inferior *child_inf = nullptr;
+ gdb_assert (parent_inf->thread_waiting_for_vfork_done == nullptr);
+
if (!follow_child)
{
/* Detach new forked process? */
@@ -455,9 +465,9 @@ holding the child stopped. Try \"set detach-on-fork\" or \
ptid_t process_ptid = ptid_t (child_ptid.pid ());
target_terminal::ours_for_output ();
- printf_filtered (_("[Detaching after %s from child %s]\n"),
- has_vforked ? "vfork" : "fork",
- target_pid_to_str (process_ptid).c_str ());
+ gdb_printf (_("[Detaching after %s from child %s]\n"),
+ has_vforked ? "vfork" : "fork",
+ target_pid_to_str (process_ptid).c_str ());
}
}
else
@@ -507,7 +517,8 @@ holding the child stopped. Try \"set detach-on-fork\" or \
insert breakpoints, so that we can debug it. A
subsequent child exec or exit is enough to know when does
the child stops using the parent's address space. */
- parent_inf->waiting_for_vfork_done = detach_fork;
+ parent_inf->thread_waiting_for_vfork_done
+ = detach_fork ? inferior_thread () : nullptr;
parent_inf->pspace->breakpoints_not_allowed = detach_fork;
}
}
@@ -521,10 +532,10 @@ holding the child stopped. Try \"set detach-on-fork\" or \
std::string child_pid = target_pid_to_str (child_ptid);
target_terminal::ours_for_output ();
- printf_filtered (_("[Attaching after %s %s to child %s]\n"),
- parent_pid.c_str (),
- has_vforked ? "vfork" : "fork",
- child_pid.c_str ());
+ gdb_printf (_("[Attaching after %s %s to child %s]\n"),
+ parent_pid.c_str (),
+ has_vforked ? "vfork" : "fork",
+ child_pid.c_str ());
}
/* Add the new inferior first, so that the target_detach below
@@ -639,7 +650,6 @@ holding the child stopped. Try \"set detach-on-fork\" or \
child_inf->pending_detach = 0;
parent_inf->vfork_child = child_inf;
parent_inf->pending_detach = detach_fork;
- parent_inf->waiting_for_vfork_done = 0;
}
else if (detach_fork)
{
@@ -649,9 +659,9 @@ holding the child stopped. Try \"set detach-on-fork\" or \
ptid_t process_ptid = ptid_t (parent_ptid.pid ());
target_terminal::ours_for_output ();
- printf_filtered (_("[Detaching after fork from "
- "parent %s]\n"),
- target_pid_to_str (process_ptid).c_str ());
+ gdb_printf (_("[Detaching after fork from "
+ "parent %s]\n"),
+ target_pid_to_str (process_ptid).c_str ());
}
target_detach (parent_inf, 0);
@@ -697,7 +707,6 @@ follow_fork ()
int current_line = 0;
symtab *current_symtab = NULL;
struct frame_id step_frame_id = { 0 };
- struct thread_fsm *thread_fsm = NULL;
if (!non_stop)
{
@@ -740,6 +749,7 @@ follow_fork ()
case TARGET_WAITKIND_VFORKED:
{
ptid_t parent, child;
+ std::unique_ptr<struct thread_fsm> thread_fsm;
/* If the user did a next/step, etc, over a fork call,
preserve the stepping state in the fork child. */
@@ -754,7 +764,7 @@ follow_fork ()
step_frame_id = tp->control.step_frame_id;
exception_resume_breakpoint
= clone_momentary_breakpoint (tp->control.exception_resume_breakpoint);
- thread_fsm = tp->thread_fsm;
+ thread_fsm = tp->release_thread_fsm ();
/* For now, delete the parent's sr breakpoint, otherwise,
parent/child sr breakpoints are considered duplicates,
@@ -766,12 +776,17 @@ follow_fork ()
tp->control.step_range_end = 0;
tp->control.step_frame_id = null_frame_id;
delete_exception_resume_breakpoint (tp);
- tp->thread_fsm = NULL;
}
parent = inferior_ptid;
child = tp->pending_follow.child_ptid ();
+ /* If handling a vfork, stop all the inferior's threads, they will be
+ restarted when the vfork shared region is complete. */
+ if (tp->pending_follow.kind () == TARGET_WAITKIND_VFORKED
+ && target_is_non_stop_p ())
+ stop_all_threads ("handling vfork", tp->inf);
+
process_stratum_target *parent_targ = tp->inf->process_target ();
/* Set up inferior(s) as specified by the caller, and tell the
target to do whatever is necessary to follow either parent
@@ -808,7 +823,7 @@ follow_fork ()
tp->control.step_frame_id = step_frame_id;
tp->control.exception_resume_breakpoint
= exception_resume_breakpoint;
- tp->thread_fsm = thread_fsm;
+ tp->set_thread_fsm (std::move (thread_fsm));
}
else
{
@@ -962,13 +977,13 @@ handle_vfork_child_exec_or_exit (int exec)
if (exec)
{
- printf_filtered (_("[Detaching vfork parent %s "
- "after child exec]\n"), pidstr.c_str ());
+ gdb_printf (_("[Detaching vfork parent %s "
+ "after child exec]\n"), pidstr.c_str ());
}
else
{
- printf_filtered (_("[Detaching vfork parent %s "
- "after child exit]\n"), pidstr.c_str ());
+ gdb_printf (_("[Detaching vfork parent %s "
+ "after child exit]\n"), pidstr.c_str ());
}
}
@@ -1033,6 +1048,55 @@ handle_vfork_child_exec_or_exit (int exec)
}
}
+/* Handle TARGET_WAITKIND_VFORK_DONE. */
+
+static void
+handle_vfork_done (thread_info *event_thread)
+{
+ /* We only care about this event if inferior::thread_waiting_for_vfork_done is
+ set, that is if we are waiting for a vfork child not under our control
+ (because we detached it) to exec or exit.
+
+ If an inferior has vforked and we are debugging the child, we don't use
+ the vfork-done event to get notified about the end of the shared address
+ space window. We rely instead on the child's exec or exit event, and the
+ inferior::vfork_{parent,child} fields are used instead. See
+ handle_vfork_child_exec_or_exit for that. */
+ if (event_thread->inf->thread_waiting_for_vfork_done == nullptr)
+ {
+ infrun_debug_printf ("not waiting for a vfork-done event");
+ return;
+ }
+
+ INFRUN_SCOPED_DEBUG_ENTER_EXIT;
+
+ /* We stopped all threads (other than the vforking thread) of the inferior in
+ follow_fork and kept them stopped until now. It should therefore not be
+ possible for another thread to have reported a vfork during that window.
+ If THREAD_WAITING_FOR_VFORK_DONE is set, it has to be the same thread whose
+ vfork-done we are handling right now. */
+ gdb_assert (event_thread->inf->thread_waiting_for_vfork_done == event_thread);
+
+ event_thread->inf->thread_waiting_for_vfork_done = nullptr;
+ event_thread->inf->pspace->breakpoints_not_allowed = 0;
+
+ /* On non-stop targets, we stopped all the inferior's threads in follow_fork,
+ resume them now. On all-stop targets, everything that needs to be resumed
+ will be when we resume the event thread. */
+ if (target_is_non_stop_p ())
+ {
+ /* restart_threads and start_step_over may change the current thread, make
+ sure we leave the event thread as the current thread. */
+ scoped_restore_current_thread restore_thread;
+
+ insert_breakpoints ();
+ start_step_over ();
+
+ if (!step_over_info_valid_p ())
+ restart_threads (event_thread, event_thread->inf);
+ }
+}
+
/* Enum strings for "set|show follow-exec-mode". */
static const char follow_exec_mode_new[] = "new";
@@ -1049,7 +1113,7 @@ static void
show_follow_exec_mode_string (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Follow exec mode is \"%s\".\n"), value);
+ gdb_printf (file, _("Follow exec mode is \"%s\".\n"), value);
}
/* EXEC_FILE_TARGET is assumed to be non-NULL. */
@@ -1130,9 +1194,9 @@ follow_exec (ptid_t ptid, const char *exec_file_target)
/* What is this a.out's name? */
process_ptid = ptid_t (pid);
- printf_unfiltered (_("%s is executing new program: %s\n"),
- target_pid_to_str (process_ptid).c_str (),
- exec_file_target);
+ gdb_printf (_("%s is executing new program: %s\n"),
+ target_pid_to_str (process_ptid).c_str (),
+ exec_file_target);
/* We've followed the inferior through an exec. Therefore, the
inferior has essentially been killed & reborn. */
@@ -1484,6 +1548,7 @@ static void
infrun_inferior_exit (struct inferior *inf)
{
inf->displaced_step_state.reset ();
+ inf->thread_waiting_for_vfork_done = nullptr;
}
static void
@@ -1502,6 +1567,8 @@ infrun_inferior_execd (inferior *inf)
one in progress at the time of the exec, it must have been the exec'ing
thread. */
clear_step_over_info ();
+
+ inf->thread_waiting_for_vfork_done = nullptr;
}
/* If ON, and the architecture supports it, GDB will use displaced
@@ -1519,14 +1586,14 @@ show_can_use_displaced_stepping (struct ui_file *file, int from_tty,
const char *value)
{
if (can_use_displaced_stepping == AUTO_BOOLEAN_AUTO)
- fprintf_filtered (file,
- _("Debugger's willingness to use displaced stepping "
- "to step over breakpoints is %s (currently %s).\n"),
- value, target_is_non_stop_p () ? "on" : "off");
+ gdb_printf (file,
+ _("Debugger's willingness to use displaced stepping "
+ "to step over breakpoints is %s (currently %s).\n"),
+ value, target_is_non_stop_p () ? "on" : "off");
else
- fprintf_filtered (file,
- _("Debugger's willingness to use displaced stepping "
- "to step over breakpoints is %s.\n"), value);
+ gdb_printf (file,
+ _("Debugger's willingness to use displaced stepping "
+ "to step over breakpoints is %s.\n"), value);
}
/* Return true if the gdbarch implements the required methods to use
@@ -1904,6 +1971,16 @@ start_step_over (void)
continue;
}
+ if (tp->inf->thread_waiting_for_vfork_done != nullptr)
+ {
+ /* When we stop all threads, handling a vfork, any thread in the step
+ over chain remains there. A user could also try to continue a
+ thread stopped at a breakpoint while another thread is waiting for
+ a vfork-done event. In any case, we don't want to start a step
+ over right now. */
+ continue;
+ }
+
/* Remove thread from the THREADS_TO_STEP chain. If anything goes wrong
while we try to prepare the displaced step, we don't add it back to
the global step over chain. This is to avoid a thread staying in the
@@ -2033,10 +2110,10 @@ static void
show_scheduler_mode (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file,
- _("Mode for locking scheduler "
- "during execution is \"%s\".\n"),
- value);
+ gdb_printf (file,
+ _("Mode for locking scheduler "
+ "during execution is \"%s\".\n"),
+ value);
}
static void
@@ -2139,8 +2216,41 @@ internal_resume_ptid (int user_step)
return a wildcard ptid. */
if (target_is_non_stop_p ())
return inferior_ptid;
- else
- return user_visible_resume_ptid (user_step);
+
+ /* The rest of the function assumes non-stop==off and
+ target-non-stop==off.
+
+ If a thread is waiting for a vfork-done event, it means breakpoints are out
+ for this inferior (well, program space in fact). We don't want to resume
+ any thread other than the one waiting for vfork done, otherwise these other
+ threads could miss breakpoints. So if a thread in the resumption set is
+ waiting for a vfork-done event, resume only that thread.
+
+ The resumption set width depends on whether schedule-multiple is on or off.
+
+ Note that if the target_resume interface was more flexible, we could be
+ smarter here when schedule-multiple is on. For example, imagine 3
+ inferiors with 2 threads each (1.1, 1.2, 2.1, 2.2, 3.1 and 3.2). Threads
+ 2.1 and 3.2 are both waiting for a vfork-done event. Then we could ask the
+ target(s) to resume:
+
+ - All threads of inferior 1
+ - Thread 2.1
+ - Thread 3.2
+
+ Since we don't have that flexibility (we can only pass one ptid), just
+ resume the first thread waiting for a vfork-done event we find (e.g. thread
+ 2.1). */
+ if (sched_multi)
+ {
+ for (inferior *inf : all_non_exited_inferiors ())
+ if (inf->thread_waiting_for_vfork_done != nullptr)
+ return inf->thread_waiting_for_vfork_done->ptid;
+ }
+ else if (current_inferior ()->thread_waiting_for_vfork_done != nullptr)
+ return current_inferior ()->thread_waiting_for_vfork_done->ptid;
+
+ return user_visible_resume_ptid (user_step);
}
/* Wrapper for target_resume, that handles infrun-specific
@@ -2185,10 +2295,11 @@ do_target_resume (ptid_t resume_ptid, bool step, enum gdb_signal sig)
else
target_pass_signals (signal_pass);
- target_resume (resume_ptid, step, sig);
+ infrun_debug_printf ("resume_ptid=%s, step=%d, sig=%s",
+ resume_ptid.to_string ().c_str (),
+ step, gdb_signal_to_symbol_string (sig));
- if (target_can_async_p ())
- target_async (1);
+ target_resume (resume_ptid, step, sig);
}
/* Resume the inferior. SIG is the signal to give the inferior
@@ -2254,7 +2365,7 @@ resume_1 (enum gdb_signal sig)
/* Depends on stepped_breakpoint. */
step = currently_stepping (tp);
- if (current_inferior ()->waiting_for_vfork_done)
+ if (current_inferior ()->thread_waiting_for_vfork_done != nullptr)
{
/* Don't try to single-step a vfork parent that is waiting for
the child to get out of the shared memory region (by exec'ing
@@ -2374,7 +2485,7 @@ resume_1 (enum gdb_signal sig)
&& use_displaced_stepping (tp)
&& !step_over_info_valid_p ()
&& sig == GDB_SIGNAL_0
- && !current_inferior ()->waiting_for_vfork_done)
+ && current_inferior ()->thread_waiting_for_vfork_done == nullptr)
{
displaced_step_prepare_status prepare_status
= displaced_step_prepare (tp);
@@ -2391,7 +2502,7 @@ resume_1 (enum gdb_signal sig)
/* Fallback to stepping over the breakpoint in-line. */
if (target_is_non_stop_p ())
- stop_all_threads ();
+ stop_all_threads ("displaced stepping falling back on inline stepping");
set_step_over_info (regcache->aspace (),
regcache_read_pc (regcache), 0, tp->global_num);
@@ -2650,8 +2761,7 @@ clear_proceed_status_thread (struct thread_info *tp)
if (!signal_pass_state (tp->stop_signal ()))
tp->set_stop_signal (GDB_SIGNAL_0);
- delete tp->thread_fsm;
- tp->thread_fsm = NULL;
+ tp->release_thread_fsm ();
tp->control.trap_expected = 0;
tp->control.step_range_start = 0;
@@ -3055,7 +3165,6 @@ proceed (CORE_ADDR addr, enum gdb_signal siggnal)
CORE_ADDR pc;
struct execution_control_state ecss;
struct execution_control_state *ecs = &ecss;
- bool started;
/* If we're stopped at a fork/vfork, follow the branch set by the
"set follow-fork-mode" command; otherwise, we'll just proceed
@@ -3204,8 +3313,7 @@ proceed (CORE_ADDR addr, enum gdb_signal siggnal)
{
scoped_disable_commit_resumed disable_commit_resumed ("proceeding");
-
- started = start_step_over ();
+ bool step_over_started = start_step_over ();
if (step_over_info_valid_p ())
{
@@ -3213,7 +3321,7 @@ proceed (CORE_ADDR addr, enum gdb_signal siggnal)
other thread was already doing one. In either case, don't
resume anything else until the step-over is finished. */
}
- else if (started && !target_is_non_stop_p ())
+ else if (step_over_started && !target_is_non_stop_p ())
{
/* A new displaced stepping sequence was started. In all-stop,
we can't talk to the target anymore until it next stops. */
@@ -3252,6 +3360,19 @@ proceed (CORE_ADDR addr, enum gdb_signal siggnal)
continue;
}
+ /* If a thread of that inferior is waiting for a vfork-done
+ (for a detached vfork child to exec or exit), breakpoints are
+ removed. We must not resume any thread of that inferior, other
+ than the one waiting for the vfork-done. */
+ if (tp->inf->thread_waiting_for_vfork_done != nullptr
+ && tp != tp->inf->thread_waiting_for_vfork_done)
+ {
+ infrun_debug_printf ("[%s] another thread of this inferior is "
+ "waiting for vfork-done",
+ tp->ptid.to_string ().c_str ());
+ continue;
+ }
+
infrun_debug_printf ("resuming %s",
tp->ptid.to_string ().c_str ());
@@ -3262,7 +3383,13 @@ proceed (CORE_ADDR addr, enum gdb_signal siggnal)
error (_("Command aborted."));
}
}
- else if (!cur_thr->resumed () && !thread_is_in_step_over_chain (cur_thr))
+ else if (!cur_thr->resumed ()
+ && !thread_is_in_step_over_chain (cur_thr)
+ /* In non-stop, forbid resuming a thread if some other thread of
+ that inferior is waiting for a vfork-done event (this means
+ breakpoints are out for this inferior). */
+ && !(non_stop
+ && cur_thr->inf->thread_waiting_for_vfork_done != nullptr))
{
/* The thread wasn't started, and isn't queued, run it now. */
reset_ecs (ecs, cur_thr);
@@ -3521,7 +3648,6 @@ static ptid_t
do_target_wait_1 (inferior *inf, ptid_t ptid,
target_waitstatus *status, target_wait_flags options)
{
- ptid_t event_ptid;
struct thread_info *tp;
/* We know that we are looking for an event in the target of inferior
@@ -3636,12 +3762,7 @@ do_target_wait_1 (inferior *inf, ptid_t ptid,
if (!target_can_async_p ())
options &= ~TARGET_WNOHANG;
- if (deprecated_target_wait_hook)
- event_ptid = deprecated_target_wait_hook (ptid, status, options);
- else
- event_ptid = target_wait (ptid, status, options);
-
- return event_ptid;
+ return target_wait (ptid, status, options);
}
/* Wrapper for target_wait that first checks whether threads have
@@ -3752,7 +3873,6 @@ struct wait_one_event
};
static bool handle_one (const wait_one_event &event);
-static void restart_threads (struct thread_info *event_thread);
/* Prepare and stabilize the inferior for detaching it. E.g.,
detaching while a thread is displaced stepping is a recipe for
@@ -3936,25 +4056,29 @@ reinstall_readline_callback_handler_cleanup ()
static void
clean_up_just_stopped_threads_fsms (struct execution_control_state *ecs)
{
- if (ecs->event_thread != NULL
- && ecs->event_thread->thread_fsm != NULL)
- ecs->event_thread->thread_fsm->clean_up (ecs->event_thread);
+ /* The first clean_up call below assumes the event thread is the current
+ one. */
+ if (ecs->event_thread != nullptr)
+ gdb_assert (ecs->event_thread == inferior_thread ());
+
+ if (ecs->event_thread != nullptr
+ && ecs->event_thread->thread_fsm () != nullptr)
+ ecs->event_thread->thread_fsm ()->clean_up (ecs->event_thread);
if (!non_stop)
{
+ scoped_restore_current_thread restore_thread;
+
for (thread_info *thr : all_non_exited_threads ())
{
- if (thr->thread_fsm == NULL)
+ if (thr->thread_fsm () == nullptr)
continue;
if (thr == ecs->event_thread)
continue;
switch_to_thread (thr);
- thr->thread_fsm->clean_up (thr);
+ thr->thread_fsm ()->clean_up (thr);
}
-
- if (ecs->event_thread != NULL)
- switch_to_thread (ecs->event_thread);
}
}
@@ -4104,13 +4228,8 @@ fetch_inferior_event ()
delete_just_stopped_threads_infrun_breakpoints ();
- if (thr != NULL)
- {
- struct thread_fsm *thread_fsm = thr->thread_fsm;
-
- if (thread_fsm != NULL)
- should_stop = thread_fsm->should_stop (thr);
- }
+ if (thr != nullptr && thr->thread_fsm () != nullptr)
+ should_stop = thr->thread_fsm ()->should_stop (thr);
if (!should_stop)
{
@@ -4123,8 +4242,9 @@ fetch_inferior_event ()
clean_up_just_stopped_threads_fsms (ecs);
- if (thr != NULL && thr->thread_fsm != NULL)
- should_notify_stop = thr->thread_fsm->should_notify_stop ();
+ if (thr != nullptr && thr->thread_fsm () != nullptr)
+ should_notify_stop
+ = thr->thread_fsm ()->should_notify_stop ();
if (should_notify_stop)
{
@@ -4166,6 +4286,18 @@ fetch_inferior_event ()
reinstalled here. */
}
+ /* Handling this event might have caused some inferiors to become prunable.
+ For example, the exit of an inferior that was automatically added. Try
+ to get rid of them. Keeping those around slows down things linearly.
+
+ Note that this never removes the current inferior. Therefore, call this
+ after RESTORE_THREAD went out of scope, in case the event inferior (which was
+ temporarily made the current inferior) is meant to be deleted.
+
+ Call this before all_uis_check_sync_execution_done, so that notifications about
+ removed inferiors appear before the prompt. */
+ prune_inferiors ();
+
/* If a UI was in sync execution mode, and now isn't, restore its
prompt (a synchronous execution command has finished, and we're
ready for input). */
@@ -4175,7 +4307,7 @@ fetch_inferior_event ()
&& exec_done_display_p
&& (inferior_ptid == null_ptid
|| inferior_thread ()->state != THREAD_RUNNING))
- printf_unfiltered (_("completed.\n"));
+ gdb_printf (_("completed.\n"));
}
/* See infrun.h. */
@@ -4193,6 +4325,13 @@ set_step_info (thread_info *tp, struct frame_info *frame,
tp->current_symtab = sal.symtab;
tp->current_line = sal.line;
+
+ infrun_debug_printf
+ ("symtab = %s, line = %d, step_frame_id = %s, step_stack_frame_id = %s",
+ tp->current_symtab != nullptr ? tp->current_symtab->filename : "<null>",
+ tp->current_line,
+ tp->control.step_frame_id.to_string ().c_str (),
+ tp->control.step_stack_frame_id.to_string ().c_str ());
}
/* Clear context switchable stepping state. */
@@ -4500,9 +4639,9 @@ handle_syscall_event (struct execution_control_state *ecs)
infrun_debug_printf ("syscall number=%d", syscall_number);
ecs->event_thread->control.stop_bpstat
- = bpstat_stop_status (regcache->aspace (),
- ecs->event_thread->stop_pc (),
- ecs->event_thread, ecs->ws);
+ = bpstat_stop_status_nowatch (regcache->aspace (),
+ ecs->event_thread->stop_pc (),
+ ecs->event_thread, ecs->ws);
if (handle_stop_requested (ecs))
return false;
@@ -4552,8 +4691,8 @@ fill_in_stop_func (struct gdbarch *gdbarch,
stop_func_start is NOT advanced when in a range of a
non-contiguous block that does not contain the entry pc. */
if (block != nullptr
- && ecs->stop_func_start <= BLOCK_ENTRY_PC (block)
- && BLOCK_ENTRY_PC (block) < ecs->stop_func_end)
+ && ecs->stop_func_start <= block->entry_pc ()
+ && block->entry_pc () < ecs->stop_func_end)
{
ecs->stop_func_start
+= gdbarch_deprecated_function_start_offset (gdbarch);
@@ -4595,10 +4734,7 @@ poll_one_curr_target (struct target_waitstatus *ws)
don't get any event. */
target_dcache_invalidate ();
- if (deprecated_target_wait_hook)
- event_ptid = deprecated_target_wait_hook (minus_one_ptid, ws, TARGET_WNOHANG);
- else
- event_ptid = target_wait (minus_one_ptid, ws, TARGET_WNOHANG);
+ event_ptid = target_wait (minus_one_ptid, ws, TARGET_WNOHANG);
if (debug_infrun)
print_target_wait_results (minus_one_ptid, event_ptid, *ws);
@@ -4849,8 +4985,7 @@ handle_one (const wait_one_event &event)
/* This may be the first time we see the inferior report
a stop. */
- inferior *inf = find_inferior_ptid (event.target, event.ptid);
- if (inf->needs_setup)
+ if (t->inf->needs_setup)
{
switch_to_thread_no_regs (t);
setup_inferior (0);
@@ -4917,7 +5052,7 @@ handle_one (const wait_one_event &event)
/* See infrun.h. */
void
-stop_all_threads (void)
+stop_all_threads (const char *reason, inferior *inf)
{
/* We may need multiple passes to discover all threads. */
int pass;
@@ -4925,22 +5060,32 @@ stop_all_threads (void)
gdb_assert (exists_non_stop_target ());
- infrun_debug_printf ("starting");
+ INFRUN_SCOPED_DEBUG_START_END ("reason=%s, inf=%d", reason,
+ inf != nullptr ? inf->num : -1);
+
+ infrun_debug_show_threads ("non-exited threads",
+ all_non_exited_threads ());
scoped_restore_current_thread restore_thread;
- /* Enable thread events of all targets. */
+ /* Enable thread events on relevant targets. */
for (auto *target : all_non_exited_process_targets ())
{
+ if (inf != nullptr && inf->process_target () != target)
+ continue;
+
switch_to_target_no_thread (target);
target_thread_events (true);
}
SCOPE_EXIT
{
- /* Disable thread events of all targets. */
+ /* Disable thread events on relevant targets. */
for (auto *target : all_non_exited_process_targets ())
{
+ if (inf != nullptr && inf->process_target () != target)
+ continue;
+
switch_to_target_no_thread (target);
target_thread_events (false);
}
@@ -4965,6 +5110,9 @@ stop_all_threads (void)
for (auto *target : all_non_exited_process_targets ())
{
+ if (inf != nullptr && inf->process_target () != target)
+ continue;
+
switch_to_target_no_thread (target);
update_thread_list ();
}
@@ -4973,6 +5121,9 @@ stop_all_threads (void)
to tell the target to stop. */
for (thread_info *t : all_non_exited_threads ())
{
+ if (inf != nullptr && t->inf != inf)
+ continue;
+
/* For a single-target setting with an all-stop target,
we would not even arrive here. For a multi-target
setting, until GDB is able to handle a mixture of
@@ -5100,12 +5251,7 @@ handle_no_resumed (struct execution_control_state *ecs)
inferior *curr_inf = current_inferior ();
scoped_restore_current_thread restore_thread;
-
- for (auto *target : all_non_exited_process_targets ())
- {
- switch_to_target_no_thread (target);
- update_thread_list ();
- }
+ update_thread_list ();
/* If:
@@ -5301,9 +5447,9 @@ handle_inferior_event (struct execution_control_state *ecs)
ecs->event_thread->set_stop_pc (regcache_read_pc (regcache));
ecs->event_thread->control.stop_bpstat
- = bpstat_stop_status (regcache->aspace (),
- ecs->event_thread->stop_pc (),
- ecs->event_thread, ecs->ws);
+ = bpstat_stop_status_nowatch (regcache->aspace (),
+ ecs->event_thread->stop_pc (),
+ ecs->event_thread, ecs->ws);
if (handle_stop_requested (ecs))
return;
@@ -5544,9 +5690,9 @@ handle_inferior_event (struct execution_control_state *ecs)
(regcache_read_pc (get_thread_regcache (ecs->event_thread)));
ecs->event_thread->control.stop_bpstat
- = bpstat_stop_status (get_current_regcache ()->aspace (),
- ecs->event_thread->stop_pc (),
- ecs->event_thread, ecs->ws);
+ = bpstat_stop_status_nowatch (get_current_regcache ()->aspace (),
+ ecs->event_thread->stop_pc (),
+ ecs->event_thread, ecs->ws);
if (handle_stop_requested (ecs))
return;
@@ -5606,7 +5752,18 @@ handle_inferior_event (struct execution_control_state *ecs)
ecs->ptid = inferior_ptid;
if (should_resume)
- keep_going (ecs);
+ {
+ /* Never call switch_back_to_stepped_thread if we are waiting for
+ vfork-done (waiting for an external vfork child to exec or
+ exit). We will resume only the vforking thread for the purpose
+ of collecting the vfork-done event, and we will restart any
+ step once the critical shared address space window is done. */
+ if ((!follow_child
+ && detach_fork
+ && parent->inf->thread_waiting_for_vfork_done != nullptr)
+ || !switch_back_to_stepped_thread (ecs))
+ keep_going (ecs);
+ }
else
stop_waiting (ecs);
return;
@@ -5620,15 +5777,19 @@ handle_inferior_event (struct execution_control_state *ecs)
context_switch (ecs);
- current_inferior ()->waiting_for_vfork_done = 0;
- current_inferior ()->pspace->breakpoints_not_allowed = 0;
+ handle_vfork_done (ecs->event_thread);
+ gdb_assert (inferior_thread () == ecs->event_thread);
if (handle_stop_requested (ecs))
return;
- /* This also takes care of reinserting breakpoints in the
- previously locked inferior. */
- keep_going (ecs);
+ if (!switch_back_to_stepped_thread (ecs))
+ {
+ gdb_assert (inferior_thread () == ecs->event_thread);
+ /* This also takes care of reinserting breakpoints in the
+ previously locked inferior. */
+ keep_going (ecs);
+ }
return;
case TARGET_WAITKIND_EXECD:
@@ -5655,9 +5816,9 @@ handle_inferior_event (struct execution_control_state *ecs)
(regcache_read_pc (get_thread_regcache (ecs->event_thread)));
ecs->event_thread->control.stop_bpstat
- = bpstat_stop_status (get_current_regcache ()->aspace (),
- ecs->event_thread->stop_pc (),
- ecs->event_thread, ecs->ws);
+ = bpstat_stop_status_nowatch (get_current_regcache ()->aspace (),
+ ecs->event_thread->stop_pc (),
+ ecs->event_thread, ecs->ws);
if (handle_stop_requested (ecs))
return;
@@ -5715,17 +5876,28 @@ handle_inferior_event (struct execution_control_state *ecs)
}
/* Restart threads back to what they were trying to do back when we
- paused them for an in-line step-over. The EVENT_THREAD thread is
- ignored. */
+ paused them (because of an in-line step-over or vfork, for example).
+ The EVENT_THREAD thread is ignored (not restarted).
+
+ If INF is non-nullptr, only resume threads from INF. */
static void
-restart_threads (struct thread_info *event_thread)
+restart_threads (struct thread_info *event_thread, inferior *inf)
{
+ INFRUN_SCOPED_DEBUG_START_END ("event_thread=%s, inf=%d",
+ event_thread->ptid.to_string ().c_str (),
+ inf != nullptr ? inf->num : -1);
+
+ gdb_assert (!step_over_info_valid_p ());
+
/* In case the instruction just stepped spawned a new thread. */
update_thread_list ();
for (thread_info *tp : all_non_exited_threads ())
{
+ if (inf != nullptr && tp->inf != inf)
+ continue;
+
if (tp->inf->detaching)
{
infrun_debug_printf ("restart threads: [%s] inferior detaching",
@@ -7267,6 +7439,11 @@ process_event_stop_test (struct execution_control_state *ecs)
ecs->event_thread->control.step_range_start = stop_pc_sal.pc;
ecs->event_thread->control.step_range_end = stop_pc_sal.end;
ecs->event_thread->control.may_range_step = 1;
+ infrun_debug_printf
+ ("updated step range, start = %s, end = %s, may_range_step = %d",
+ paddress (gdbarch, ecs->event_thread->control.step_range_start),
+ paddress (gdbarch, ecs->event_thread->control.step_range_end),
+ ecs->event_thread->control.may_range_step);
if (refresh_step_info)
set_step_info (ecs->event_thread, frame, stop_pc_sal);
@@ -7933,10 +8110,10 @@ check_exception_resume (struct execution_control_state *ecs,
cases such as throwing an exception from inside a signal
handler. */
- b = SYMBOL_BLOCK_VALUE (func);
+ b = func->value_block ();
ALL_BLOCK_SYMBOLS (b, iter, sym)
{
- if (!SYMBOL_IS_ARGUMENT (sym))
+ if (!sym->is_argument ())
continue;
if (argno == 0)
@@ -7965,7 +8142,7 @@ stop_waiting (struct execution_control_state *ecs)
/* If all-stop, but there exists a non-stop target, stop all
threads now that we're presenting the stop to the user. */
if (!non_stop && exists_non_stop_target ())
- stop_all_threads ();
+ stop_all_threads ("presenting stop to user in all-stop");
}
/* Like keep_going, but passes the signal to the inferior, even if the
@@ -8065,7 +8242,7 @@ keep_going_pass_signal (struct execution_control_state *ecs)
we're about to step over, otherwise other threads could miss
it. */
if (step_over_info_valid_p () && target_is_non_stop_p ())
- stop_all_threads ();
+ stop_all_threads ("starting in-line step-over");
/* Stop stepping if inserting breakpoints fails. */
try
@@ -8341,13 +8518,13 @@ print_stop_event (struct ui_out *uiout, bool displays)
}
tp = inferior_thread ();
- if (tp->thread_fsm != NULL
- && tp->thread_fsm->finished_p ())
+ if (tp->thread_fsm () != nullptr
+ && tp->thread_fsm ()->finished_p ())
{
struct return_value_info *rv;
- rv = tp->thread_fsm->return_value ();
- if (rv != NULL)
+ rv = tp->thread_fsm ()->return_value ();
+ if (rv != nullptr)
print_return_value (uiout, rv);
}
}
@@ -8362,9 +8539,9 @@ maybe_remove_breakpoints (void)
if (remove_breakpoints ())
{
target_terminal::ours_for_output ();
- printf_filtered (_("Cannot remove breakpoints because "
- "program is no longer writable.\nFurther "
- "execution is probably impossible.\n"));
+ gdb_printf (_("Cannot remove breakpoints because "
+ "program is no longer writable.\nFurther "
+ "execution is probably impossible.\n"));
}
}
}
@@ -8508,8 +8685,8 @@ normal_stop (void)
SWITCH_THRU_ALL_UIS ()
{
target_terminal::ours_for_output ();
- printf_filtered (_("[Switching to %s]\n"),
- target_pid_to_str (inferior_ptid).c_str ());
+ gdb_printf (_("[Switching to %s]\n"),
+ target_pid_to_str (inferior_ptid).c_str ());
annotate_thread_changed ();
}
previous_inferior_ptid = inferior_ptid;
@@ -8521,7 +8698,7 @@ normal_stop (void)
if (current_ui->prompt_state == PROMPT_BLOCKED)
{
target_terminal::ours_for_output ();
- printf_filtered (_("No unwaited-for children left.\n"));
+ gdb_printf (_("No unwaited-for children left.\n"));
}
}
@@ -8572,28 +8749,25 @@ normal_stop (void)
/* Look up the hook_stop and run it (CLI internally handles problem
of stop_command's pre-hook not existing). */
- if (stop_command != NULL)
- {
- stop_context saved_context;
+ stop_context saved_context;
- try
- {
- execute_cmd_pre_hook (stop_command);
- }
- catch (const gdb_exception &ex)
- {
- exception_fprintf (gdb_stderr, ex,
- "Error while running hook_stop:\n");
- }
-
- /* If the stop hook resumes the target, then there's no point in
- trying to notify about the previous stop; its context is
- gone. Likewise if the command switches thread or inferior --
- the observers would print a stop for the wrong
- thread/inferior. */
- if (saved_context.changed ())
- return 1;
+ try
+ {
+ execute_cmd_pre_hook (stop_command);
}
+ catch (const gdb_exception &ex)
+ {
+ exception_fprintf (gdb_stderr, ex,
+ "Error while running hook_stop:\n");
+ }
+
+ /* If the stop hook resumes the target, then there's no point in
+ trying to notify about the previous stop; its context is
+ gone. Likewise if the command switches thread or inferior --
+ the observers would print a stop for the wrong
+ thread/inferior. */
+ if (saved_context.changed ())
+ return 1;
/* Notify observers about the stop. This is where the interpreters
print the stop event. */
@@ -8615,11 +8789,6 @@ normal_stop (void)
breakpoint_auto_delete (inferior_thread ()->control.stop_bpstat);
}
- /* Try to get rid of automatically added inferiors that are no
- longer needed. Keeping those around slows down things linearly.
- Note that this never removes the current inferior. */
- prune_inferiors ();
-
return 0;
}
@@ -8705,8 +8874,8 @@ signal_catch_update (const unsigned int *info)
static void
sig_print_header (void)
{
- printf_filtered (_("Signal Stop\tPrint\tPass "
- "to program\tDescription\n"));
+ gdb_printf (_("Signal Stop\tPrint\tPass "
+ "to program\tDescription\n"));
}
static void
@@ -8718,12 +8887,12 @@ sig_print_info (enum gdb_signal oursig)
if (name_padding <= 0)
name_padding = 0;
- printf_filtered ("%s", name);
- printf_filtered ("%*.*s ", name_padding, name_padding, " ");
- printf_filtered ("%s\t", signal_stop[oursig] ? "Yes" : "No");
- printf_filtered ("%s\t", signal_print[oursig] ? "Yes" : "No");
- printf_filtered ("%s\t\t", signal_program[oursig] ? "Yes" : "No");
- printf_filtered ("%s\n", gdb_signal_to_string (oursig));
+ gdb_printf ("%s", name);
+ gdb_printf ("%*.*s ", name_padding, name_padding, " ");
+ gdb_printf ("%s\t", signal_stop[oursig] ? "Yes" : "No");
+ gdb_printf ("%s\t", signal_print[oursig] ? "Yes" : "No");
+ gdb_printf ("%s\t\t", signal_program[oursig] ? "Yes" : "No");
+ gdb_printf ("%s\n", gdb_signal_to_string (oursig));
}
/* Specify how various signals in the inferior should be handled. */
@@ -8859,7 +9028,7 @@ Are you sure you want to change it? "),
sigs[signum] = 1;
}
else
- printf_unfiltered (_("Not confirmed, unchanged.\n"));
+ gdb_printf (_("Not confirmed, unchanged.\n"));
}
break;
case GDB_SIGNAL_0:
@@ -8954,7 +9123,7 @@ info_signals_command (const char *signum_exp, int from_tty)
return;
}
- printf_filtered ("\n");
+ gdb_printf ("\n");
/* These ugly casts brought to you by the native VAX compiler. */
for (oursig = GDB_SIGNAL_FIRST;
(int) oursig < (int) GDB_SIGNAL_LAST;
@@ -8967,8 +9136,8 @@ info_signals_command (const char *signum_exp, int from_tty)
sig_print_info (oursig);
}
- printf_filtered (_("\nUse the \"handle\" command "
- "to change these tables.\n"));
+ gdb_printf (_("\nUse the \"handle\" command "
+ "to change these tables.\n"));
}
/* The $_siginfo convenience variable is a bit special. We don't know
@@ -9341,10 +9510,10 @@ show_exec_direction_func (struct ui_file *out, int from_tty,
{
switch (execution_direction) {
case EXEC_FORWARD:
- fprintf_filtered (out, _("Forward.\n"));
+ gdb_printf (out, _("Forward.\n"));
break;
case EXEC_REVERSE:
- fprintf_filtered (out, _("Reverse.\n"));
+ gdb_printf (out, _("Reverse.\n"));
break;
default:
internal_error (__FILE__, __LINE__,
@@ -9357,8 +9526,8 @@ static void
show_schedule_multiple (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Resuming the execution of threads "
- "of all processes is %s.\n"), value);
+ gdb_printf (file, _("Resuming the execution of threads "
+ "of all processes is %s.\n"), value);
}
/* Implementation of `siginfo' variable. */
@@ -9367,7 +9536,6 @@ static const struct internalvar_funcs siginfo_funcs =
{
siginfo_make_value,
NULL,
- NULL
};
/* Callback for infrun's target events source. This is marked when a
@@ -9498,9 +9666,8 @@ may be interspersed with actions, with the actions being performed for\n\
all signals cumulatively specified."));
set_cmd_completer (c, handle_completer);
- if (!dbx_commands)
- stop_command = add_cmd ("stop", class_obscure,
- not_just_help_class_command, _("\
+ stop_command = add_cmd ("stop", class_obscure,
+ not_just_help_class_command, _("\
There is no `stop' command, but you can set a hook on `stop'.\n\
This allows you to set a list of commands to be run each time execution\n\
of the program stops."), &cmdlist);
diff --git a/gdb/infrun.h b/gdb/infrun.h
index 3e84805accb..0c7c55eabec 100644
--- a/gdb/infrun.h
+++ b/gdb/infrun.h
@@ -40,14 +40,40 @@ extern bool debug_infrun;
/* Print "infrun" start/end debug statements. */
-#define INFRUN_SCOPED_DEBUG_START_END(msg) \
- scoped_debug_start_end (debug_infrun, "infrun", msg)
+#define INFRUN_SCOPED_DEBUG_START_END(fmt, ...) \
+ scoped_debug_start_end (debug_infrun, "infrun", fmt, ##__VA_ARGS__)
/* Print "infrun" enter/exit debug statements. */
#define INFRUN_SCOPED_DEBUG_ENTER_EXIT \
scoped_debug_enter_exit (debug_infrun, "infrun")
+/* A infrun debug helper routine to print out all the threads in the set
+ THREADS (which should be a range type that returns thread_info*
+ objects).
+
+ The TITLE is a string that is printed before the list of threads.
+
+ Output is only produced when 'set debug infrun on'. */
+
+template<typename ThreadRange>
+static inline void
+infrun_debug_show_threads (const char *title, ThreadRange threads)
+{
+ if (debug_infrun)
+ {
+ infrun_debug_printf ("%s:", title);
+ for (thread_info *thread : threads)
+ infrun_debug_printf (" thread %s, executing = %d, resumed = %d, "
+ "state = %s",
+ thread->ptid.to_string ().c_str (),
+ thread->executing (),
+ thread->resumed (),
+ thread_state_string (thread->state));
+ }
+}
+
+
/* Nonzero if we want to give control to the user when we're notified
of shared library events by the dynamic linker. */
extern int stop_on_solib_events;
@@ -124,9 +150,8 @@ extern process_stratum_target *user_visible_resume_target (ptid_t resume_ptid);
extern int normal_stop (void);
/* Return the cached copy of the last target/ptid/waitstatus returned
- by target_wait()/deprecated_target_wait_hook(). The data is
- actually cached by handle_inferior_event(), which gets called
- immediately after target_wait()/deprecated_target_wait_hook(). */
+ by target_wait(). The data is actually cached by handle_inferior_event(),
+ which gets called immediately after target_wait(). */
extern void get_last_target_status (process_stratum_target **target,
ptid_t *ptid,
struct target_waitstatus *status);
@@ -139,8 +164,14 @@ extern void set_last_target_status (process_stratum_target *target, ptid_t ptid,
target_wait(). */
extern void nullify_last_target_wait_ptid ();
-/* Stop all threads. Only returns after everything is halted. */
-extern void stop_all_threads (void);
+/* Stop all threads. Only returns after everything is halted.
+
+ REASON is a string indicating the reason why we stop all threads, used in
+ debug messages.
+
+ If INF is non-nullptr, stop all threads of that inferior. Otherwise, stop
+ all threads of all inferiors. */
+extern void stop_all_threads (const char *reason, inferior *inf = nullptr);
extern void prepare_for_detach (void);
diff --git a/gdb/inline-frame.c b/gdb/inline-frame.c
index a9006a6c8a3..57b58f38c22 100644
--- a/gdb/inline-frame.c
+++ b/gdb/inline-frame.c
@@ -181,7 +181,7 @@ inline_frame_this_id (struct frame_info *this_frame,
in the frame ID (and eventually, to set breakpoints). */
func = get_frame_function (this_frame);
gdb_assert (func != NULL);
- (*this_id).code_addr = BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (func));
+ (*this_id).code_addr = func->value_block ()->entry_pc ();
(*this_id).artificial_depth++;
}
@@ -226,14 +226,14 @@ inline_frame_sniffer (const struct frame_unwind *self,
location. */
depth = 0;
cur_block = frame_block;
- while (BLOCK_SUPERBLOCK (cur_block))
+ while (cur_block->superblock ())
{
if (block_inlined_p (cur_block))
depth++;
- else if (BLOCK_FUNCTION (cur_block) != NULL)
+ else if (cur_block->function () != NULL)
break;
- cur_block = BLOCK_SUPERBLOCK (cur_block);
+ cur_block = cur_block->superblock ();
}
/* Check how many inlined functions already have frames. */
@@ -286,11 +286,10 @@ block_starting_point_at (CORE_ADDR pc, const struct block *block)
const struct block *new_block;
bv = blockvector_for_pc (pc, NULL);
- if (BLOCKVECTOR_MAP (bv) == NULL)
+ if (bv->map () == nullptr)
return 0;
- new_block = (const struct block *) addrmap_find (BLOCKVECTOR_MAP (bv),
- pc - 1);
+ new_block = (const struct block *) addrmap_find (bv->map (), pc - 1);
if (new_block == NULL)
return 1;
@@ -329,7 +328,7 @@ stopped_by_user_bp_inline_frame (const block *frame_block, bpstat *stop_chain)
to presenting the stop at the innermost inline
function. */
if (loc->symbol == nullptr
- || frame_block == SYMBOL_BLOCK_VALUE (loc->symbol))
+ || frame_block == loc->symbol->value_block ())
return true;
}
}
@@ -356,13 +355,13 @@ skip_inline_frames (thread_info *thread, bpstat *stop_chain)
if (frame_block != NULL)
{
cur_block = frame_block;
- while (BLOCK_SUPERBLOCK (cur_block))
+ while (cur_block->superblock ())
{
if (block_inlined_p (cur_block))
{
/* See comments in inline_frame_this_id about this use
of BLOCK_ENTRY_PC. */
- if (BLOCK_ENTRY_PC (cur_block) == this_pc
+ if (cur_block->entry_pc () == this_pc
|| block_starting_point_at (this_pc, cur_block))
{
/* Do not skip the inlined frame if execution
@@ -372,15 +371,15 @@ skip_inline_frames (thread_info *thread, bpstat *stop_chain)
break;
skip_count++;
- skipped_syms.push_back (BLOCK_FUNCTION (cur_block));
+ skipped_syms.push_back (cur_block->function ());
}
else
break;
}
- else if (BLOCK_FUNCTION (cur_block) != NULL)
+ else if (cur_block->function () != NULL)
break;
- cur_block = BLOCK_SUPERBLOCK (cur_block);
+ cur_block = cur_block->superblock ();
}
}
diff --git a/gdb/interps.c b/gdb/interps.c
index d65698f0cb4..44002ff2cb5 100644
--- a/gdb/interps.c
+++ b/gdb/interps.c
@@ -38,6 +38,7 @@
#include "completer.h"
#include "top.h" /* For command_loop. */
#include "main.h"
+#include "gdbsupport/buildargv.h"
/* Each UI has its own independent set of interpreters. */
@@ -126,7 +127,7 @@ interp_factory_register (const char *name, interp_factory_func func)
/* Add interpreter INTERP to the gdb interpreter list. The
interpreter must not have previously been added. */
-void
+static void
interp_add (struct ui *ui, struct interp *interp)
{
struct ui_interp_info *ui_interp = get_interp_info (ui);
@@ -356,7 +357,6 @@ clear_interpreter_hooks (void)
deprecated_readline_hook = 0;
deprecated_readline_end_hook = 0;
deprecated_context_hook = 0;
- deprecated_target_wait_hook = 0;
deprecated_call_command_hook = 0;
deprecated_error_begin_hook = 0;
}
diff --git a/gdb/interps.h b/gdb/interps.h
index 40f6d3bc89b..330c1ba6615 100644
--- a/gdb/interps.h
+++ b/gdb/interps.h
@@ -94,8 +94,6 @@ public:
bool inited;
};
-extern void interp_add (struct ui *ui, struct interp *interp);
-
/* Look up the interpreter for NAME, creating one if none exists yet.
If NAME is not a interpreter type previously registered with
interp_factory_register, return NULL; otherwise return a pointer to
diff --git a/gdb/jit.c b/gdb/jit.c
index 42776b95683..b4a070bb879 100644
--- a/gdb/jit.c
+++ b/gdb/jit.c
@@ -71,7 +71,7 @@ static void
show_jit_debug (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("JIT debugging is %s.\n"), value);
+ gdb_printf (file, _("JIT debugging is %s.\n"), value);
}
/* Implementation of the "maintenance info jit" command. */
@@ -82,6 +82,8 @@ maint_info_jit_cmd (const char *args, int from_tty)
inferior *inf = current_inferior ();
bool printed_header = false;
+ gdb::optional<ui_out_emit_table> table_emitter;
+
/* Print a line for each JIT-ed objfile. */
for (objfile *obj : inf->pspace->objfiles ())
{
@@ -90,11 +92,35 @@ maint_info_jit_cmd (const char *args, int from_tty)
if (!printed_header)
{
- printf_filtered ("Base address of known JIT-ed objfiles:\n");
+ table_emitter.emplace (current_uiout, 3, -1, "jit-created-objfiles");
+
+ /* The +2 allows for the leading '0x', then one character for
+ every 4-bits. */
+ int addr_width = 2 + (gdbarch_ptr_bit (obj->arch ()) / 4);
+
+ /* The std::max here selects between the width of an address (as
+ a string) and the width of the column header string. */
+ current_uiout->table_header (std::max (addr_width, 22), ui_left,
+ "jit_code_entry-address",
+ "jit_code_entry address");
+ current_uiout->table_header (std::max (addr_width, 15), ui_left,
+ "symfile-address", "symfile address");
+ current_uiout->table_header (20, ui_left,
+ "symfile-size", "symfile size");
+ current_uiout->table_body ();
+
printed_header = true;
}
- printf_filtered (" %s\n", paddress (obj->arch (), obj->jited_data->addr));
+ ui_out_emit_tuple tuple_emitter (current_uiout, "jit-objfile");
+
+ current_uiout->field_core_addr ("jit_code_entry-address", obj->arch (),
+ obj->jited_data->addr);
+ current_uiout->field_core_addr ("symfile-address", obj->arch (),
+ obj->jited_data->symfile_addr);
+ current_uiout->field_unsigned ("symfile-size",
+ obj->jited_data->symfile_size);
+ current_uiout->text ("\n");
}
}
@@ -211,11 +237,13 @@ get_jiter_objfile_data (objfile *objf)
at inferior address ENTRY. */
static void
-add_objfile_entry (struct objfile *objfile, CORE_ADDR entry)
+add_objfile_entry (struct objfile *objfile, CORE_ADDR entry,
+ CORE_ADDR symfile_addr, ULONGEST symfile_size)
{
gdb_assert (objfile->jited_data == nullptr);
- objfile->jited_data.reset (new jited_objfile_data (entry));
+ objfile->jited_data.reset (new jited_objfile_data (entry, symfile_addr,
+ symfile_size));
}
/* Helper function for reading the global JIT descriptor from remote
@@ -237,7 +265,7 @@ jit_read_descriptor (gdbarch *gdbarch,
jiter_objfile_data *objf_data = jiter->jiter_data.get ();
gdb_assert (objf_data != nullptr);
- CORE_ADDR addr = MSYMBOL_VALUE_ADDRESS (jiter, objf_data->descriptor);
+ CORE_ADDR addr = objf_data->descriptor->value_address (jiter);
jit_debug_printf ("descriptor_addr = %s", paddress (gdbarch, addr));
@@ -251,8 +279,8 @@ jit_read_descriptor (gdbarch *gdbarch,
err = target_read_memory (addr, desc_buf, desc_size);
if (err)
{
- fprintf_unfiltered (gdb_stderr, _("Unable to read JIT descriptor from "
- "remote memory\n"));
+ gdb_printf (gdb_stderr, _("Unable to read JIT descriptor from "
+ "remote memory\n"));
return false;
}
@@ -380,7 +408,16 @@ struct gdb_object
/* The type of the `private' data passed around by the callback
functions. */
-typedef CORE_ADDR jit_dbg_reader_data;
+struct jit_dbg_reader_data
+{
+ /* Address of the jit_code_entry in the inferior's address space. */
+ CORE_ADDR entry_addr;
+
+ /* The code entry, copied in our address space. */
+ const jit_code_entry &entry;
+
+ struct gdbarch *gdbarch;
+};
/* The reader calls into this function to read data off the targets
address space. */
@@ -500,11 +537,11 @@ finalize_symtab (struct gdb_symtab *stab, struct objfile *objfile)
});
cust = allocate_compunit_symtab (objfile, stab->file_name.c_str ());
- allocate_symtab (cust, stab->file_name.c_str ());
+ symtab *filetab = allocate_symtab (cust, stab->file_name.c_str ());
add_compunit_symtab_to_objfile (cust);
/* JIT compilers compile in memory. */
- COMPUNIT_DIRNAME (cust) = NULL;
+ cust->set_dirname (nullptr);
/* Copy over the linetable entry if one was provided. */
if (stab->linetable)
@@ -512,24 +549,23 @@ finalize_symtab (struct gdb_symtab *stab, struct objfile *objfile)
size_t size = ((stab->linetable->nitems - 1)
* sizeof (struct linetable_entry)
+ sizeof (struct linetable));
- SYMTAB_LINETABLE (COMPUNIT_FILETABS (cust))
- = (struct linetable *) obstack_alloc (&objfile->objfile_obstack, size);
- memcpy (SYMTAB_LINETABLE (COMPUNIT_FILETABS (cust)),
- stab->linetable.get (), size);
+ filetab->set_linetable ((struct linetable *)
+ obstack_alloc (&objfile->objfile_obstack, size));
+ memcpy (filetab->linetable (), stab->linetable.get (), size);
}
blockvector_size = (sizeof (struct blockvector)
+ (actual_nblocks - 1) * sizeof (struct block *));
bv = (struct blockvector *) obstack_alloc (&objfile->objfile_obstack,
blockvector_size);
- COMPUNIT_BLOCKVECTOR (cust) = bv;
+ cust->set_blockvector (bv);
/* At the end of this function, (begin, end) will contain the PC range this
entire blockvector spans. */
- BLOCKVECTOR_MAP (bv) = NULL;
+ bv->set_map (nullptr);
begin = stab->blocks.front ().begin;
end = stab->blocks.front ().end;
- BLOCKVECTOR_NBLOCKS (bv) = actual_nblocks;
+ bv->set_num_blocks (actual_nblocks);
/* First run over all the gdb_block objects, creating a real block
object for each. Simultaneously, keep setting the real_block
@@ -544,29 +580,29 @@ finalize_symtab (struct gdb_symtab *stab, struct objfile *objfile)
TARGET_CHAR_BIT,
"void");
- BLOCK_MULTIDICT (new_block)
- = mdict_create_linear (&objfile->objfile_obstack, NULL);
+ new_block->set_multidict
+ (mdict_create_linear (&objfile->objfile_obstack, NULL));
/* The address range. */
- BLOCK_START (new_block) = (CORE_ADDR) gdb_block_iter.begin;
- BLOCK_END (new_block) = (CORE_ADDR) gdb_block_iter.end;
+ new_block->set_start (gdb_block_iter.begin);
+ new_block->set_end (gdb_block_iter.end);
/* The name. */
- SYMBOL_DOMAIN (block_name) = VAR_DOMAIN;
- SYMBOL_ACLASS_INDEX (block_name) = LOC_BLOCK;
- symbol_set_symtab (block_name, COMPUNIT_FILETABS (cust));
- SYMBOL_TYPE (block_name) = lookup_function_type (block_type);
- SYMBOL_BLOCK_VALUE (block_name) = new_block;
+ block_name->set_domain (VAR_DOMAIN);
+ block_name->set_aclass_index (LOC_BLOCK);
+ block_name->set_symtab (filetab);
+ block_name->set_type (lookup_function_type (block_type));
+ block_name->set_value_block (new_block);
block_name->m_name = obstack_strdup (&objfile->objfile_obstack,
gdb_block_iter.name.get ());
- BLOCK_FUNCTION (new_block) = block_name;
+ new_block->set_function (block_name);
- BLOCKVECTOR_BLOCK (bv, block_idx) = new_block;
- if (begin > BLOCK_START (new_block))
- begin = BLOCK_START (new_block);
- if (end < BLOCK_END (new_block))
- end = BLOCK_END (new_block);
+ bv->set_block (block_idx, new_block);
+ if (begin > new_block->start ())
+ begin = new_block->start ();
+ if (end < new_block->end ())
+ end = new_block->end ();
gdb_block_iter.real_block = new_block;
@@ -582,15 +618,15 @@ finalize_symtab (struct gdb_symtab *stab, struct objfile *objfile)
new_block = (i == GLOBAL_BLOCK
? allocate_global_block (&objfile->objfile_obstack)
: allocate_block (&objfile->objfile_obstack));
- BLOCK_MULTIDICT (new_block)
- = mdict_create_linear (&objfile->objfile_obstack, NULL);
- BLOCK_SUPERBLOCK (new_block) = block_iter;
+ new_block->set_multidict
+ (mdict_create_linear (&objfile->objfile_obstack, NULL));
+ new_block->set_superblock (block_iter);
block_iter = new_block;
- BLOCK_START (new_block) = (CORE_ADDR) begin;
- BLOCK_END (new_block) = (CORE_ADDR) end;
+ new_block->set_start (begin);
+ new_block->set_end (end);
- BLOCKVECTOR_BLOCK (bv, i) = new_block;
+ bv->set_block (i, new_block);
if (i == GLOBAL_BLOCK)
set_block_compunit_symtab (new_block, cust);
@@ -604,14 +640,14 @@ finalize_symtab (struct gdb_symtab *stab, struct objfile *objfile)
{
/* If the plugin specifically mentioned a parent block, we
use that. */
- BLOCK_SUPERBLOCK (gdb_block_iter.real_block) =
- gdb_block_iter.parent->real_block;
+ gdb_block_iter.real_block->set_superblock
+ (gdb_block_iter.parent->real_block);
+
}
else
{
/* And if not, we set a default parent block. */
- BLOCK_SUPERBLOCK (gdb_block_iter.real_block) =
- BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
+ gdb_block_iter.real_block->set_superblock (bv->static_block ());
}
}
}
@@ -623,19 +659,22 @@ static void
jit_object_close_impl (struct gdb_symbol_callbacks *cb,
struct gdb_object *obj)
{
- struct objfile *objfile;
- jit_dbg_reader_data *priv_data;
+ jit_dbg_reader_data *priv_data = (jit_dbg_reader_data *) cb->priv_data;
+ std::string objfile_name
+ = string_printf ("<< JIT compiled code at %s >>",
+ paddress (priv_data->gdbarch,
+ priv_data->entry.symfile_addr));
- priv_data = (jit_dbg_reader_data *) cb->priv_data;
-
- objfile = objfile::make (nullptr, "<< JIT compiled code >>",
- OBJF_NOT_FILENAME);
- objfile->per_bfd->gdbarch = target_gdbarch ();
+ objfile *objfile = objfile::make (nullptr, objfile_name.c_str (),
+ OBJF_NOT_FILENAME);
+ objfile->per_bfd->gdbarch = priv_data->gdbarch;
for (gdb_symtab &symtab : obj->symtabs)
finalize_symtab (&symtab, objfile);
- add_objfile_entry (objfile, *priv_data);
+ add_objfile_entry (objfile, priv_data->entry_addr,
+ priv_data->entry.symfile_addr,
+ priv_data->entry.symfile_size);
delete obj;
}
@@ -645,11 +684,16 @@ jit_object_close_impl (struct gdb_symbol_callbacks *cb,
inferior address space. */
static int
-jit_reader_try_read_symtab (struct jit_code_entry *code_entry,
+jit_reader_try_read_symtab (gdbarch *gdbarch, jit_code_entry *code_entry,
CORE_ADDR entry_addr)
{
int status;
- jit_dbg_reader_data priv_data;
+ jit_dbg_reader_data priv_data
+ {
+ entry_addr,
+ *code_entry,
+ gdbarch
+ };
struct gdb_reader_funcs *funcs;
struct gdb_symbol_callbacks callbacks =
{
@@ -665,8 +709,6 @@ jit_reader_try_read_symtab (struct jit_code_entry *code_entry,
&priv_data
};
- priv_data = entry_addr;
-
if (!loaded_jit_reader)
return 0;
@@ -719,8 +761,8 @@ jit_bfd_try_read_symtab (struct jit_code_entry *code_entry,
(code_entry->symfile_addr, code_entry->symfile_size, gnutarget));
if (nbfd == NULL)
{
- fputs_unfiltered (_("Error opening JITed symbol file, ignoring it.\n"),
- gdb_stderr);
+ gdb_puts (_("Error opening JITed symbol file, ignoring it.\n"),
+ gdb_stderr);
return;
}
@@ -728,7 +770,7 @@ jit_bfd_try_read_symtab (struct jit_code_entry *code_entry,
We would segfault later without this line. */
if (!bfd_check_format (nbfd.get (), bfd_object))
{
- fprintf_unfiltered (gdb_stderr, _("\
+ gdb_printf (gdb_stderr, _("\
JITed symbol file is not an object file, ignoring it.\n"));
return;
}
@@ -761,7 +803,8 @@ JITed symbol file is not an object file, ignoring it.\n"));
&sai,
OBJF_SHARED | OBJF_NOT_FILENAME, NULL);
- add_objfile_entry (objfile, entry_addr);
+ add_objfile_entry (objfile, entry_addr, code_entry->symfile_addr,
+ code_entry->symfile_size);
}
/* This function registers code associated with a JIT code entry. It uses the
@@ -779,7 +822,7 @@ jit_register_code (struct gdbarch *gdbarch,
paddress (gdbarch, code_entry->symfile_addr),
pulongest (code_entry->symfile_size));
- success = jit_reader_try_read_symtab (code_entry, entry_addr);
+ success = jit_reader_try_read_symtab (gdbarch, code_entry, entry_addr);
if (!success)
jit_bfd_try_read_symtab (code_entry, entry_addr, gdbarch);
@@ -844,7 +887,7 @@ jit_breakpoint_re_set_internal (struct gdbarch *gdbarch, program_space *pspace)
bound_minimal_symbol reg_symbol
= lookup_minimal_symbol (jit_break_name, nullptr, the_objfile);
if (reg_symbol.minsym == NULL
- || BMSYMBOL_VALUE_ADDRESS (reg_symbol) == 0)
+ || reg_symbol.value_address () == 0)
{
/* No need to repeat the lookup the next time. */
the_objfile->skip_jit_symbol_lookup = true;
@@ -854,7 +897,7 @@ jit_breakpoint_re_set_internal (struct gdbarch *gdbarch, program_space *pspace)
bound_minimal_symbol desc_symbol
= lookup_minimal_symbol (jit_descriptor_name, NULL, the_objfile);
if (desc_symbol.minsym == NULL
- || BMSYMBOL_VALUE_ADDRESS (desc_symbol) == 0)
+ || desc_symbol.value_address () == 0)
{
/* No need to repeat the lookup the next time. */
the_objfile->skip_jit_symbol_lookup = true;
@@ -866,9 +909,7 @@ jit_breakpoint_re_set_internal (struct gdbarch *gdbarch, program_space *pspace)
objf_data->register_code = reg_symbol.minsym;
objf_data->descriptor = desc_symbol.minsym;
- CORE_ADDR addr = MSYMBOL_VALUE_ADDRESS (the_objfile,
- objf_data->register_code);
-
+ CORE_ADDR addr = objf_data->register_code->value_address (the_objfile);
jit_debug_printf ("breakpoint_addr = %s", paddress (gdbarch, addr));
/* Check if we need to re-create the breakpoint. */
@@ -892,7 +933,7 @@ struct jit_unwind_private
{
/* Cached register values. See jit_frame_sniffer to see how this
works. */
- detached_regcache *regcache;
+ std::unique_ptr<detached_regcache> regcache;
/* The frame being unwound. */
struct frame_info *this_frame;
@@ -959,10 +1000,7 @@ static void
jit_dealloc_cache (struct frame_info *this_frame, void *cache)
{
struct jit_unwind_private *priv_data = (struct jit_unwind_private *) cache;
-
- gdb_assert (priv_data->regcache != NULL);
- delete priv_data->regcache;
- xfree (priv_data);
+ delete priv_data;
}
/* The frame sniffer for the pseudo unwinder.
@@ -992,11 +1030,11 @@ jit_frame_sniffer (const struct frame_unwind *self,
gdb_assert (!*cache);
- *cache = XCNEW (struct jit_unwind_private);
- priv_data = (struct jit_unwind_private *) *cache;
+ priv_data = new struct jit_unwind_private;
+ *cache = priv_data;
/* Take a snapshot of current regcache. */
- priv_data->regcache = new detached_regcache (get_frame_arch (this_frame),
- true);
+ priv_data->regcache.reset
+ (new detached_regcache (get_frame_arch (this_frame), true));
priv_data->this_frame = this_frame;
callbacks.priv_data = priv_data;
@@ -1029,7 +1067,7 @@ jit_frame_this_id (struct frame_info *this_frame, void **cache,
struct gdb_reader_funcs *funcs;
struct gdb_unwind_callbacks callbacks;
- priv.regcache = NULL;
+ priv.regcache.reset ();
priv.this_frame = this_frame;
/* We don't expect the frame_id function to set any registers, so we
@@ -1139,10 +1177,10 @@ jit_inferior_init (inferior *inf)
/* Check that the version number agrees with that we support. */
if (descriptor.version != 1)
{
- fprintf_unfiltered (gdb_stderr,
- _("Unsupported JIT protocol version %ld "
- "in descriptor (expected 1)\n"),
- (long) descriptor.version);
+ gdb_printf (gdb_stderr,
+ _("Unsupported JIT protocol version %ld "
+ "in descriptor (expected 1)\n"),
+ (long) descriptor.version);
continue;
}
@@ -1231,10 +1269,10 @@ jit_event_handler (gdbarch *gdbarch, objfile *jiter)
{
objfile *jited = jit_find_objf_with_entry_addr (entry_addr);
if (jited == nullptr)
- fprintf_unfiltered (gdb_stderr,
- _("Unable to find JITed code "
- "entry at address: %s\n"),
- paddress (gdbarch, entry_addr));
+ gdb_printf (gdb_stderr,
+ _("Unable to find JITed code "
+ "entry at address: %s\n"),
+ paddress (gdbarch, entry_addr));
else
jited->unlink ();
diff --git a/gdb/jit.h b/gdb/jit.h
index 09dbce21f5c..68547637b0b 100644
--- a/gdb/jit.h
+++ b/gdb/jit.h
@@ -28,12 +28,12 @@ struct minimal_symbol;
these actions. These values are used by the inferior, so the
values of these enums cannot be changed. */
-typedef enum
+enum jit_actions_t
{
JIT_NOACTION = 0,
JIT_REGISTER,
JIT_UNREGISTER
-} jit_actions_t;
+};
/* This struct describes a single symbol file in a linked list of
symbol files describing generated code. As the inferior generates
@@ -95,12 +95,21 @@ struct jiter_objfile_data
struct jited_objfile_data
{
- jited_objfile_data (CORE_ADDR addr)
- : addr (addr)
+ jited_objfile_data (CORE_ADDR addr, CORE_ADDR symfile_addr,
+ ULONGEST symfile_size)
+ : addr (addr),
+ symfile_addr (symfile_addr),
+ symfile_size (symfile_size)
{}
/* Address of struct jit_code_entry for this objfile. */
CORE_ADDR addr;
+
+ /* Value of jit_code_entry->symfile_addr for this objfile. */
+ CORE_ADDR symfile_addr;
+
+ /* Value of jit_code_entry->symfile_size for this objfile. */
+ ULONGEST symfile_size;
};
/* Re-establish the jit breakpoint(s). */
diff --git a/gdb/language.c b/gdb/language.c
index 0846b3e5eeb..af58a374dd6 100644
--- a/gdb/language.c
+++ b/gdb/language.c
@@ -114,14 +114,14 @@ show_language_command (struct ui_file *file, int from_tty,
enum language flang; /* The language of the frame. */
if (language_mode == language_mode_auto)
- fprintf_filtered (file,
- _("The current source language is "
- "\"auto; currently %s\".\n"),
- current_language->name ());
+ gdb_printf (file,
+ _("The current source language is "
+ "\"auto; currently %s\".\n"),
+ current_language->name ());
else
- fprintf_filtered (file,
- _("The current source language is \"%s\".\n"),
- current_language->name ());
+ gdb_printf (file,
+ _("The current source language is \"%s\".\n"),
+ current_language->name ());
if (has_stack_frames ())
{
@@ -132,7 +132,7 @@ show_language_command (struct ui_file *file, int from_tty,
if (flang != language_unknown
&& language_mode == language_mode_manual
&& current_language->la_language != flang)
- fprintf_filtered (file, "%s\n", _(lang_frame_mismatch_warn));
+ gdb_printf (file, "%s\n", _(lang_frame_mismatch_warn));
}
}
@@ -220,13 +220,13 @@ show_range_command (struct ui_file *file, int from_tty,
"Unrecognized range check setting.");
}
- fprintf_filtered (file,
- _("Range checking is \"auto; currently %s\".\n"),
- tmp);
+ gdb_printf (file,
+ _("Range checking is \"auto; currently %s\".\n"),
+ tmp);
}
else
- fprintf_filtered (file, _("Range checking is \"%s\".\n"),
- value);
+ gdb_printf (file, _("Range checking is \"%s\".\n"),
+ value);
if (range_check == range_check_warn
|| ((range_check == range_check_on)
@@ -296,15 +296,15 @@ show_case_command (struct ui_file *file, int from_tty,
"Unrecognized case-sensitive setting.");
}
- fprintf_filtered (file,
- _("Case sensitivity in "
- "name search is \"auto; currently %s\".\n"),
- tmp);
+ gdb_printf (file,
+ _("Case sensitivity in "
+ "name search is \"auto; currently %s\".\n"),
+ tmp);
}
else
- fprintf_filtered (file,
- _("Case sensitivity in name search is \"%s\".\n"),
- value);
+ gdb_printf (file,
+ _("Case sensitivity in name search is \"%s\".\n"),
+ value);
if (case_sensitivity != current_language->case_sensitivity ())
warning (_("the current case sensitivity setting does not match "
@@ -383,7 +383,7 @@ language_info ()
return;
expected_language = current_language;
- printf_filtered (_("Current language: %s\n"), language);
+ gdb_printf (_("Current language: %s\n"), language);
show_language_command (gdb_stdout, 1, NULL, NULL);
}
@@ -414,8 +414,8 @@ range_error (const char *string,...)
case range_check_off:
/* FIXME: cagney/2002-01-30: Should this function print anything
when range error is off? */
- vfprintf_filtered (gdb_stderr, string, args);
- fprintf_filtered (gdb_stderr, "\n");
+ gdb_vprintf (gdb_stderr, string, args);
+ gdb_printf (gdb_stderr, "\n");
break;
default:
internal_error (__FILE__, __LINE__, _("bad switch"));
@@ -476,7 +476,8 @@ add_set_language_command ()
/* Display "auto", "local" and "unknown" first, and then the rest,
alpha sorted. */
const char **language_names_p = language_names;
- *language_names_p++ = language_def (language_auto)->name ();
+ language = language_def (language_auto)->name ();
+ *language_names_p++ = language;
*language_names_p++ = "local";
*language_names_p++ = language_def (language_unknown)->name ();
const char **sort_begin = language_names_p;
@@ -588,9 +589,9 @@ language_defn::print_array_index (struct type *index_type, LONGEST index,
{
struct value *index_value = value_from_longest (index_type, index);
- fprintf_filtered (stream, "[");
+ gdb_printf (stream, "[");
value_print (index_value, stream, options);
- fprintf_filtered (stream, "] = ");
+ gdb_printf (stream, "] = ");
}
/* See language.h. */
@@ -974,7 +975,7 @@ language_arch_info::bool_type () const
sym = lookup_symbol (m_bool_type_name, NULL, VAR_DOMAIN, NULL).symbol;
if (sym != nullptr)
{
- struct type *type = SYMBOL_TYPE (sym);
+ struct type *type = sym->type ();
if (type != nullptr && type->code () == TYPE_CODE_BOOL)
return type;
}
@@ -997,11 +998,11 @@ language_arch_info::type_and_symbol::alloc_type_symbol
symbol->m_name = type->name ();
symbol->set_language (lang, nullptr);
symbol->owner.arch = gdbarch;
- SYMBOL_OBJFILE_OWNED (symbol) = 0;
+ symbol->set_is_objfile_owned (0);
symbol->set_section_index (0);
- SYMBOL_TYPE (symbol) = type;
- SYMBOL_DOMAIN (symbol) = VAR_DOMAIN;
- SYMBOL_ACLASS_INDEX (symbol) = LOC_TYPEDEF;
+ symbol->set_type (type);
+ symbol->set_domain (VAR_DOMAIN);
+ symbol->set_aclass_index (LOC_TYPEDEF);
return symbol;
}
@@ -1103,16 +1104,16 @@ language_lookup_primitive_type_as_symbol (const struct language_defn *la,
struct language_arch_info *lai = &ld->arch_info[la->la_language];
if (symbol_lookup_debug)
- fprintf_unfiltered (gdb_stdlog,
- "language_lookup_primitive_type_as_symbol"
- " (%s, %s, %s)",
- la->name (), host_address_to_string (gdbarch), name);
+ gdb_printf (gdb_stdlog,
+ "language_lookup_primitive_type_as_symbol"
+ " (%s, %s, %s)",
+ la->name (), host_address_to_string (gdbarch), name);
struct symbol *sym
= lai->lookup_primitive_type_as_symbol (name, la->la_language);
if (symbol_lookup_debug)
- fprintf_unfiltered (gdb_stdlog, " = %s\n", host_address_to_string (sym));
+ gdb_printf (gdb_stdlog, " = %s\n", host_address_to_string (sym));
/* Note: The result of symbol lookup is normally a symbol *and* the block
it was found in. Builtin types don't live in blocks. We *could* give
@@ -1150,6 +1151,8 @@ _initialize_language ()
add_alias_cmd ("c", setshow_check_cmds.show, no_class, 1, &showlist);
add_alias_cmd ("ch", setshow_check_cmds.show, no_class, 1, &showlist);
+ range = type_or_range_names[3];
+ gdb_assert (strcmp (range, "auto") == 0);
add_setshow_enum_cmd ("range", class_support, type_or_range_names,
&range,
_("Set range checking (on/warn/off/auto)."),
@@ -1158,6 +1161,8 @@ _initialize_language ()
show_range_command,
&setchecklist, &showchecklist);
+ case_sensitive = case_sensitive_names[2];
+ gdb_assert (strcmp (case_sensitive, "auto") == 0);
add_setshow_enum_cmd ("case-sensitive", class_support, case_sensitive_names,
&case_sensitive, _("\
Set case sensitivity in name search (on/off/auto)."), _("\
@@ -1174,10 +1179,6 @@ For Fortran the default is off; for other languages the default is on."),
add_set_language_command ();
- language = "auto";
- range = "auto";
- case_sensitive = "auto";
-
/* Have the above take effect. */
set_language (language_auto);
}
diff --git a/gdb/language.h b/gdb/language.h
index bfdade398e4..f2885000259 100644
--- a/gdb/language.h
+++ b/gdb/language.h
@@ -750,20 +750,6 @@ extern void language_info ();
extern enum language set_language (enum language);
-/* This page contains functions that return things that are
- specific to languages. Each of these functions is based on
- the current setting of working_lang, which the user sets
- with the "set language" command. */
-
-#define LA_PRINT_TYPE(type,varstring,stream,show,level,flags) \
- (current_language->print_type(type,varstring,stream,show,level,flags))
-
-#define LA_PRINT_CHAR(ch, type, stream) \
- (current_language->printchar (ch, type, stream))
-#define LA_PRINT_STRING(stream, elttype, string, length, encoding, force_ellipses, options) \
- (current_language->printstr (stream, elttype, string, length, \
- encoding, force_ellipses,options))
-
/* Test a character to decide whether it can be printed in literal form
or needs to be printed in another representation. For example,
in C the literal form of the character with octal value 141 is 'a'
diff --git a/gdb/linespec.c b/gdb/linespec.c
index eb911ccdb35..c9558c8ae36 100644
--- a/gdb/linespec.c
+++ b/gdb/linespec.c
@@ -204,7 +204,7 @@ collect_info::add_symbol (block_symbol *bsym)
{
/* In list mode, add all matching symbols, regardless of class.
This allows the user to type "list a_global_variable". */
- if (SYMBOL_CLASS (bsym->symbol) == LOC_BLOCK || this->state->list_mode)
+ if (bsym->symbol->aclass () == LOC_BLOCK || this->state->list_mode)
this->result.symbols->push_back (*bsym);
/* Continue iterating. */
@@ -228,7 +228,7 @@ struct symbol_searcher_collect_info
/* Token types */
-enum ls_token_type
+enum linespec_token_type
{
/* A keyword */
LSTOKEN_KEYWORD = 0,
@@ -251,7 +251,6 @@ enum ls_token_type
/* Consumed token */
LSTOKEN_CONSUMED
};
-typedef enum ls_token_type linespec_token_type;
/* List of keywords. This is NULL-terminated so that it can be used
as enum completer. */
@@ -1179,7 +1178,7 @@ iterate_over_all_matching_symtabs
for (compunit_symtab *cu : objfile->compunits ())
{
- struct symtab *symtab = COMPUNIT_FILETABS (cu);
+ struct symtab *symtab = cu->primary_filetab ();
iterate_over_file_blocks (symtab, lookup_name, name_domain,
callback);
@@ -1188,19 +1187,18 @@ iterate_over_all_matching_symtabs
{
const struct block *block;
int i;
+ const blockvector *bv = symtab->compunit ()->blockvector ();
- for (i = FIRST_LOCAL_BLOCK;
- i < BLOCKVECTOR_NBLOCKS (SYMTAB_BLOCKVECTOR (symtab));
- i++)
+ for (i = FIRST_LOCAL_BLOCK; i < bv->num_blocks (); i++)
{
- block = BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symtab), i);
+ block = bv->block (i);
state->language->iterate_over_symbols
(block, lookup_name, name_domain,
[&] (block_symbol *bsym)
{
/* Restrict calls to CALLBACK to symbols
representing inline symbols only. */
- if (SYMBOL_INLINED (bsym->symbol))
+ if (bsym->symbol->is_inlined ())
return callback (bsym);
return true;
});
@@ -1232,9 +1230,9 @@ iterate_over_file_blocks
{
const struct block *block;
- for (block = BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symtab), STATIC_BLOCK);
+ for (block = symtab->compunit ()->blockvector ()->static_block ();
block != NULL;
- block = BLOCK_SUPERBLOCK (block))
+ block = block->superblock ())
current_language->iterate_over_symbols (block, name, domain, callback);
}
@@ -1298,83 +1296,6 @@ find_methods (struct type *t, enum language t_lang, const char *name,
superclasses->push_back (TYPE_BASECLASS (t, ibase));
}
-/* Find an instance of the character C in the string S that is outside
- of all parenthesis pairs, single-quoted strings, and double-quoted
- strings. Also, ignore the char within a template name, like a ','
- within foo<int, int>, while considering C++ operator</operator<<. */
-
-const char *
-find_toplevel_char (const char *s, char c)
-{
- int quoted = 0; /* zero if we're not in quotes;
- '"' if we're in a double-quoted string;
- '\'' if we're in a single-quoted string. */
- int depth = 0; /* Number of unclosed parens we've seen. */
- const char *scan;
-
- for (scan = s; *scan; scan++)
- {
- if (quoted)
- {
- if (*scan == quoted)
- quoted = 0;
- else if (*scan == '\\' && *(scan + 1))
- scan++;
- }
- else if (*scan == c && ! quoted && depth == 0)
- return scan;
- else if (*scan == '"' || *scan == '\'')
- quoted = *scan;
- else if (*scan == '(' || *scan == '<')
- depth++;
- else if ((*scan == ')' || *scan == '>') && depth > 0)
- depth--;
- else if (*scan == 'o' && !quoted && depth == 0)
- {
- /* Handle C++ operator names. */
- if (strncmp (scan, CP_OPERATOR_STR, CP_OPERATOR_LEN) == 0)
- {
- scan += CP_OPERATOR_LEN;
- if (*scan == c)
- return scan;
- while (isspace (*scan))
- {
- ++scan;
- if (*scan == c)
- return scan;
- }
- if (*scan == '\0')
- break;
-
- switch (*scan)
- {
- /* Skip over one less than the appropriate number of
- characters: the for loop will skip over the last
- one. */
- case '<':
- if (scan[1] == '<')
- {
- scan++;
- if (*scan == c)
- return scan;
- }
- break;
- case '>':
- if (scan[1] == '>')
- {
- scan++;
- if (*scan == c)
- return scan;
- }
- break;
- }
- }
- }
- }
-
- return 0;
-}
-
/* The string equivalent of find_toplevel_char. Returns a pointer
to the location of NEEDLE in HAYSTACK, ignoring any occurrences
inside "()" and "<>". Returns NULL if NEEDLE was not found. */
@@ -2098,12 +2019,8 @@ canonicalize_linespec (struct linespec_state *state, const linespec *ls)
/* If this location originally came from a linespec, save a string
representation of it for display and saving to file. */
if (state->is_linespec)
- {
- char *linespec = explicit_location_to_linespec (explicit_loc);
-
- set_event_location_string (canon, linespec);
- xfree (linespec);
- }
+ set_event_location_string (canon,
+ explicit_location_to_linespec (explicit_loc));
}
/* Given a line offset in LS, construct the relevant SALs. */
@@ -2269,7 +2186,7 @@ convert_linespec_to_sals (struct linespec_state *state, linespec *ls)
for (const auto &sym : ls->labels.label_symbols)
{
struct program_space *pspace
- = SYMTAB_PSPACE (symbol_symtab (sym.symbol));
+ = sym.symbol->symtab ()->compunit ()->objfile ()->pspace;
if (symbol_to_sal (&sal, state->funfirstline, sym.symbol)
&& maybe_add_address (state->addr_set, pspace, sal.pc))
@@ -2291,7 +2208,7 @@ convert_linespec_to_sals (struct linespec_state *state, linespec *ls)
for (const auto &sym : ls->function_symbols)
{
program_space *pspace
- = SYMTAB_PSPACE (symbol_symtab (sym.symbol));
+ = sym.symbol->symtab ()->compunit ()->objfile ()->pspace;
set_current_program_space (pspace);
/* Don't skip to the first line of the function if we
@@ -2302,18 +2219,18 @@ convert_linespec_to_sals (struct linespec_state *state, linespec *ls)
if (state->funfirstline
&& !ls->minimal_symbols.empty ()
- && SYMBOL_CLASS (sym.symbol) == LOC_BLOCK)
+ && sym.symbol->aclass () == LOC_BLOCK)
{
const CORE_ADDR addr
- = BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (sym.symbol));
+ = sym.symbol->value_block ()->entry_pc ();
for (const auto &elem : ls->minimal_symbols)
{
- if (MSYMBOL_TYPE (elem.minsym) == mst_text_gnu_ifunc
- || MSYMBOL_TYPE (elem.minsym) == mst_data_gnu_ifunc)
+ if (elem.minsym->type () == mst_text_gnu_ifunc
+ || elem.minsym->type () == mst_data_gnu_ifunc)
{
- CORE_ADDR msym_addr = BMSYMBOL_VALUE_ADDRESS (elem);
- if (MSYMBOL_TYPE (elem.minsym) == mst_data_gnu_ifunc)
+ CORE_ADDR msym_addr = elem.value_address ();
+ if (elem.minsym->type () == mst_data_gnu_ifunc)
{
struct gdbarch *gdbarch
= elem.objfile->arch ();
@@ -2526,14 +2443,15 @@ convert_explicit_location_to_sals (struct linespec_state *self,
if no file is validly specified. Callers must check that.
Also, the line number returned may be invalid. */
-/* Parse the linespec in ARG. MATCH_TYPE indicates how function names
- should be matched. */
+/* Parse the linespec in ARG, which must not be nullptr. MATCH_TYPE
+ indicates how function names should be matched. */
static std::vector<symtab_and_line>
parse_linespec (linespec_parser *parser, const char *arg,
symbol_name_match_type match_type)
{
- linespec_token token;
+ gdb_assert (arg != nullptr);
+
struct gdb_exception file_exception;
/* A special case to start. It has become quite popular for
@@ -2542,11 +2460,10 @@ parse_linespec (linespec_parser *parser, const char *arg,
parser->is_quote_enclosed = 0;
if (parser->completion_tracker == NULL
&& !is_ada_operator (arg)
+ && *arg != '\0'
&& strchr (linespec_quote_characters, *arg) != NULL)
{
- const char *end;
-
- end = skip_quote_char (arg + 1, *arg);
+ const char *end = skip_quote_char (arg + 1, *arg);
if (end != NULL && is_closing_quote_enclosed (end))
{
/* Here's the special case. Skip ARG past the initial
@@ -2587,7 +2504,7 @@ parse_linespec (linespec_parser *parser, const char *arg,
/* Start parsing. */
/* Get the first token. */
- token = linespec_lexer_consume_token (parser);
+ linespec_token token = linespec_lexer_consume_token (parser);
/* It must be either LSTOKEN_STRING or LSTOKEN_NUMBER. */
if (token.type == LSTOKEN_STRING && *LS_TOKEN_STOKEN (token).ptr == '$')
@@ -3495,10 +3412,10 @@ decode_compound_collector::operator () (block_symbol *bsym)
struct type *t;
struct symbol *sym = bsym->symbol;
- if (SYMBOL_CLASS (sym) != LOC_TYPEDEF)
+ if (sym->aclass () != LOC_TYPEDEF)
return true; /* Continue iterating. */
- t = SYMBOL_TYPE (sym);
+ t = sym->type ();
t = check_typedef (t);
if (t->code () != TYPE_CODE_STRUCT
&& t->code () != TYPE_CODE_UNION
@@ -3543,8 +3460,10 @@ lookup_prefix_sym (struct linespec_state *state,
{
/* Program spaces that are executing startup should have
been filtered out earlier. */
- gdb_assert (!SYMTAB_PSPACE (elt)->executing_startup);
- set_current_program_space (SYMTAB_PSPACE (elt));
+ program_space *pspace = elt->compunit ()->objfile ()->pspace;
+
+ gdb_assert (!pspace->executing_startup);
+ set_current_program_space (pspace);
iterate_over_file_blocks (elt, lookup_name, STRUCT_DOMAIN, collector);
iterate_over_file_blocks (elt, lookup_name, VAR_DOMAIN, collector);
}
@@ -3562,8 +3481,8 @@ compare_symbols (const block_symbol &a, const block_symbol &b)
{
uintptr_t uia, uib;
- uia = (uintptr_t) SYMTAB_PSPACE (symbol_symtab (a.symbol));
- uib = (uintptr_t) SYMTAB_PSPACE (symbol_symtab (b.symbol));
+ uia = (uintptr_t) a.symbol->symtab ()->compunit ()->objfile ()->pspace;
+ uib = (uintptr_t) b.symbol->symtab ()->compunit ()->objfile ()->pspace;
if (uia < uib)
return true;
@@ -3687,10 +3606,10 @@ find_method (struct linespec_state *self,
/* Program spaces that are executing startup should have
been filtered out earlier. */
- pspace = SYMTAB_PSPACE (symbol_symtab (sym));
+ pspace = sym->symtab ()->compunit ()->objfile ()->pspace;
gdb_assert (!pspace->executing_startup);
set_current_program_space (pspace);
- t = check_typedef (SYMBOL_TYPE (sym));
+ t = check_typedef (sym->type ());
find_methods (t, sym->language (),
method_name, &result_names, &superclass_vec);
@@ -3698,7 +3617,8 @@ find_method (struct linespec_state *self,
sure not to miss the last batch. */
if (ix == sym_classes->size () - 1
|| (pspace
- != SYMTAB_PSPACE (symbol_symtab (sym_classes->at (ix + 1).symbol))))
+ != (sym_classes->at (ix + 1).symbol->symtab ()
+ ->compunit ()->objfile ()->pspace)))
{
/* If we did not find a direct implementation anywhere in
this program space, consider superclasses. */
@@ -3999,7 +3919,7 @@ find_label_symbols_in_block (const struct block *block,
ALL_BLOCK_SYMBOLS (block, iter, sym)
{
if (symbol_matches_domain (sym->language (),
- SYMBOL_DOMAIN (sym), LABEL_DOMAIN)
+ sym->domain (), LABEL_DOMAIN)
&& cmp (sym->search_name (), name, name_len) == 0)
{
result->push_back ({sym, block});
@@ -4045,14 +3965,14 @@ find_label_symbols (struct linespec_state *self,
block = get_current_search_block ();
for (;
- block && !BLOCK_FUNCTION (block);
- block = BLOCK_SUPERBLOCK (block))
+ block && !block->function ();
+ block = block->superblock ())
;
if (!block)
return {};
- fn_sym = BLOCK_FUNCTION (block);
+ fn_sym = block->function ();
find_label_symbols_in_block (block, name, fn_sym, completion_mode,
&result, label_funcs_ret);
@@ -4062,8 +3982,9 @@ find_label_symbols (struct linespec_state *self,
for (const auto &elt : function_symbols)
{
fn_sym = elt.symbol;
- set_current_program_space (SYMTAB_PSPACE (symbol_symtab (fn_sym)));
- block = SYMBOL_BLOCK_VALUE (fn_sym);
+ set_current_program_space
+ (fn_sym->symtab ()->compunit ()->objfile ()->pspace);
+ block = fn_sym->value_block ();
find_label_symbols_in_block (block, name, fn_sym, completion_mode,
&result, label_funcs_ret);
@@ -4091,13 +4012,14 @@ decode_digits_list_mode (struct linespec_state *self,
/* The logic above should ensure this. */
gdb_assert (elt != NULL);
- set_current_program_space (SYMTAB_PSPACE (elt));
+ program_space *pspace = elt->compunit ()->objfile ()->pspace;
+ set_current_program_space (pspace);
/* Simplistic search just for the list command. */
val.symtab = find_line_symtab (elt, val.line, NULL, NULL);
if (val.symtab == NULL)
val.symtab = elt;
- val.pspace = SYMTAB_PSPACE (elt);
+ val.pspace = pspace;
val.pc = 0;
val.explicit_line = true;
@@ -4125,13 +4047,14 @@ decode_digits_ordinary (struct linespec_state *self,
/* The logic above should ensure this. */
gdb_assert (elt != NULL);
- set_current_program_space (SYMTAB_PSPACE (elt));
+ program_space *pspace = elt->compunit ()->objfile ()->pspace;
+ set_current_program_space (pspace);
pcs = find_pcs_for_symtab_line (elt, line, best_entry);
for (CORE_ADDR pc : pcs)
{
symtab_and_line sal;
- sal.pspace = SYMTAB_PSPACE (elt);
+ sal.pspace = pspace;
sal.symtab = elt;
sal.line = line;
sal.explicit_line = true;
@@ -4221,8 +4144,8 @@ minsym_found (struct linespec_state *self, struct objfile *objfile,
{
const char *msym_name = msymbol->linkage_name ();
- if (MSYMBOL_TYPE (msymbol) == mst_text_gnu_ifunc
- || MSYMBOL_TYPE (msymbol) == mst_data_gnu_ifunc)
+ if (msymbol->type () == mst_text_gnu_ifunc
+ || msymbol->type () == mst_data_gnu_ifunc)
want_start_sal = gnu_ifunc_resolve_name (msym_name, &func_addr);
else
want_start_sal = true;
@@ -4241,7 +4164,7 @@ minsym_found (struct linespec_state *self, struct objfile *objfile,
if (is_function)
sal.pc = func_addr;
else
- sal.pc = MSYMBOL_VALUE_ADDRESS (objfile, msymbol);
+ sal.pc = msymbol->value_address (objfile);
sal.pspace = current_program_space;
}
@@ -4277,8 +4200,7 @@ add_minsym (struct minimal_symbol *minsym, struct objfile *objfile,
if (!list_mode && !msymbol_is_function (objfile, minsym))
return;
- struct bound_minimal_symbol mo = {minsym, objfile};
- msyms->push_back (mo);
+ msyms->emplace_back (minsym, objfile);
return;
}
@@ -4323,14 +4245,16 @@ search_minsyms_for_name (struct collect_info *info,
}
else
{
- if (search_pspace == NULL || SYMTAB_PSPACE (symtab) == search_pspace)
+ program_space *pspace = symtab->compunit ()->objfile ()->pspace;
+
+ if (search_pspace == NULL || pspace == search_pspace)
{
- set_current_program_space (SYMTAB_PSPACE (symtab));
+ set_current_program_space (pspace);
iterate_over_minimal_symbols
- (SYMTAB_OBJFILE (symtab), name,
+ (symtab->compunit ()->objfile (), name,
[&] (struct minimal_symbol *msym)
{
- add_minsym (msym, SYMTAB_OBJFILE (symtab), symtab,
+ add_minsym (msym, symtab->compunit ()->objfile (), symtab,
info->state->list_mode, &minsyms);
return false;
});
@@ -4358,7 +4282,7 @@ search_minsyms_for_name (struct collect_info *info,
for (const bound_minimal_symbol &item : minsyms)
{
bool skip = false;
- if (MSYMBOL_TYPE (item.minsym) == mst_solib_trampoline)
+ if (item.minsym->type () == mst_solib_trampoline)
{
for (const bound_minimal_symbol &item2 : minsyms)
{
@@ -4367,7 +4291,7 @@ search_minsyms_for_name (struct collect_info *info,
/* Trampoline symbols can only jump to exported
symbols. */
- if (msymbol_type_is_static (MSYMBOL_TYPE (item2.minsym)))
+ if (msymbol_type_is_static (item2.minsym->type ()))
continue;
if (strcmp (item.minsym->linkage_name (),
@@ -4411,14 +4335,15 @@ add_matching_symbols_to_info (const char *name,
{ return info->add_symbol (bsym); });
search_minsyms_for_name (info, lookup_name, pspace, NULL);
}
- else if (pspace == NULL || pspace == SYMTAB_PSPACE (elt))
+ else if (pspace == NULL || pspace == elt->compunit ()->objfile ()->pspace)
{
int prev_len = info->result.symbols->size ();
/* Program spaces that are executing startup should have
been filtered out earlier. */
- gdb_assert (!SYMTAB_PSPACE (elt)->executing_startup);
- set_current_program_space (SYMTAB_PSPACE (elt));
+ program_space *elt_pspace = elt->compunit ()->objfile ()->pspace;
+ gdb_assert (!elt_pspace->executing_startup);
+ set_current_program_space (elt_pspace);
iterate_over_file_blocks (elt, lookup_name, VAR_DOMAIN,
[&] (block_symbol *bsym)
{ return info->add_symbol (bsym); });
@@ -4428,7 +4353,7 @@ add_matching_symbols_to_info (const char *name,
which we don't have debug info. Check for a minimal symbol in
this case. */
if (prev_len == info->result.symbols->size ()
- && elt->language == language_asm)
+ && elt->language () == language_asm)
search_minsyms_for_name (info, lookup_name, pspace, elt);
}
}
@@ -4443,21 +4368,21 @@ static int
symbol_to_sal (struct symtab_and_line *result,
int funfirstline, struct symbol *sym)
{
- if (SYMBOL_CLASS (sym) == LOC_BLOCK)
+ if (sym->aclass () == LOC_BLOCK)
{
*result = find_function_start_sal (sym, funfirstline);
return 1;
}
else
{
- if (SYMBOL_CLASS (sym) == LOC_LABEL && SYMBOL_VALUE_ADDRESS (sym) != 0)
+ if (sym->aclass () == LOC_LABEL && sym->value_address () != 0)
{
*result = {};
- result->symtab = symbol_symtab (sym);
+ result->symtab = sym->symtab ();
result->symbol = sym;
- result->line = SYMBOL_LINE (sym);
- result->pc = SYMBOL_VALUE_ADDRESS (sym);
- result->pspace = SYMTAB_PSPACE (result->symtab);
+ result->line = sym->line ();
+ result->pc = sym->value_address ();
+ result->pspace = result->symtab->compunit ()->objfile ()->pspace;
result->explicit_pc = 1;
return 1;
}
@@ -4465,15 +4390,15 @@ symbol_to_sal (struct symtab_and_line *result,
{
/* Nothing. */
}
- else if (SYMBOL_LINE (sym) != 0)
+ else if (sym->line () != 0)
{
/* We know its line number. */
*result = {};
- result->symtab = symbol_symtab (sym);
+ result->symtab = sym->symtab ();
result->symbol = sym;
- result->line = SYMBOL_LINE (sym);
- result->pc = SYMBOL_VALUE_ADDRESS (sym);
- result->pspace = SYMTAB_PSPACE (result->symtab);
+ result->line = sym->line ();
+ result->pc = sym->value_address ();
+ result->pspace = result->symtab->compunit ()->objfile ()->pspace;
return 1;
}
}
diff --git a/gdb/linespec.h b/gdb/linespec.h
index bf9b04008a8..bb8975548a3 100644
--- a/gdb/linespec.h
+++ b/gdb/linespec.h
@@ -162,13 +162,6 @@ extern const char *get_gdb_linespec_parser_quote_characters (void);
extern int is_ada_operator (const char *string);
-/* Find an instance of the character C in the string S that is outside
- of all parenthesis pairs, single-quoted strings, and double-quoted
- strings. Also, ignore the char within a template name, like a ','
- within foo<int, int>. */
-
-extern const char *find_toplevel_char (const char *s, char c);
-
/* Find the end of the (first) linespec pointed to by *STRINGP.
STRINGP will be advanced to this point. */
diff --git a/gdb/linux-fork.c b/gdb/linux-fork.c
index c26900c75e8..ca876a5cf94 100644
--- a/gdb/linux-fork.c
+++ b/gdb/linux-fork.c
@@ -348,8 +348,8 @@ linux_fork_mourn_inferior (void)
last = find_last_fork ();
fork_load_infrun_state (last);
- printf_filtered (_("[Switching to %s]\n"),
- target_pid_to_str (inferior_ptid).c_str ());
+ gdb_printf (_("[Switching to %s]\n"),
+ target_pid_to_str (inferior_ptid).c_str ());
/* If there's only one fork, switch back to non-fork mode. */
if (one_fork_p ())
@@ -381,8 +381,8 @@ linux_fork_detach (int from_tty)
fork_load_infrun_state (&fork_list.front ());
if (from_tty)
- printf_filtered (_("[Switching to %s]\n"),
- target_pid_to_str (inferior_ptid).c_str ());
+ gdb_printf (_("[Switching to %s]\n"),
+ target_pid_to_str (inferior_ptid).c_str ());
/* If there's only one fork, switch back to non-fork mode. */
if (one_fork_p ())
@@ -509,7 +509,7 @@ Please switch to another checkpoint before deleting the current one"));
pptid = fi->parent_ptid;
if (from_tty)
- printf_filtered (_("Killed %s\n"), target_pid_to_str (ptid).c_str ());
+ gdb_printf (_("Killed %s\n"), target_pid_to_str (ptid).c_str ());
delete_fork (ptid);
@@ -547,7 +547,7 @@ Please switch to another checkpoint before detaching the current one"));
error (_("Unable to detach %s"), target_pid_to_str (ptid).c_str ());
if (from_tty)
- printf_filtered (_("Detached %s\n"), target_pid_to_str (ptid).c_str ());
+ gdb_printf (_("Detached %s\n"), target_pid_to_str (ptid).c_str ());
delete_fork (ptid);
}
@@ -571,40 +571,40 @@ info_checkpoints_command (const char *arg, int from_tty)
printed = &fi;
if (fi.ptid == inferior_ptid)
- printf_filtered ("* ");
+ gdb_printf ("* ");
else
- printf_filtered (" ");
+ gdb_printf (" ");
ULONGEST pc = fi.pc;
- printf_filtered ("%d %s", fi.num, target_pid_to_str (fi.ptid).c_str ());
+ gdb_printf ("%d %s", fi.num, target_pid_to_str (fi.ptid).c_str ());
if (fi.num == 0)
- printf_filtered (_(" (main process)"));
- printf_filtered (_(" at "));
- fputs_filtered (paddress (gdbarch, pc), gdb_stdout);
+ gdb_printf (_(" (main process)"));
+ gdb_printf (_(" at "));
+ gdb_puts (paddress (gdbarch, pc));
symtab_and_line sal = find_pc_line (pc, 0);
if (sal.symtab)
- printf_filtered (_(", file %s"),
- symtab_to_filename_for_display (sal.symtab));
+ gdb_printf (_(", file %s"),
+ symtab_to_filename_for_display (sal.symtab));
if (sal.line)
- printf_filtered (_(", line %d"), sal.line);
+ gdb_printf (_(", line %d"), sal.line);
if (!sal.symtab && !sal.line)
{
struct bound_minimal_symbol msym;
msym = lookup_minimal_symbol_by_pc (pc);
if (msym.minsym)
- printf_filtered (", <%s>", msym.minsym->linkage_name ());
+ gdb_printf (", <%s>", msym.minsym->linkage_name ());
}
- putchar_filtered ('\n');
+ gdb_putc ('\n');
}
if (printed == NULL)
{
if (requested > 0)
- printf_filtered (_("No checkpoint number %d.\n"), requested);
+ gdb_printf (_("No checkpoint number %d.\n"), requested);
else
- printf_filtered (_("No checkpoints.\n"));
+ gdb_printf (_("No checkpoints.\n"));
}
}
@@ -685,15 +685,15 @@ checkpoint_command (const char *args, int from_tty)
{
int parent_pid;
- printf_filtered (_("checkpoint %d: fork returned pid %ld.\n"),
- fp != NULL ? fp->num : -1, (long) retpid);
+ gdb_printf (_("checkpoint %d: fork returned pid %ld.\n"),
+ fp != NULL ? fp->num : -1, (long) retpid);
if (info_verbose)
{
parent_pid = last_target_ptid.lwp ();
if (parent_pid == 0)
parent_pid = last_target_ptid.pid ();
- printf_filtered (_(" gdb says parent = %ld.\n"),
- (long) parent_pid);
+ gdb_printf (_(" gdb says parent = %ld.\n"),
+ (long) parent_pid);
}
}
@@ -728,8 +728,8 @@ linux_fork_context (struct fork_info *newfp, int from_tty)
fork_load_infrun_state (newfp);
insert_breakpoints ();
- printf_filtered (_("Switching to %s\n"),
- target_pid_to_str (inferior_ptid).c_str ());
+ gdb_printf (_("Switching to %s\n"),
+ target_pid_to_str (inferior_ptid).c_str ());
print_stack_frame (get_selected_frame (NULL), 1, SRC_AND_LOC, 1);
}
diff --git a/gdb/linux-nat.c b/gdb/linux-nat.c
index 2271cbf1532..740cc0ddfc0 100644
--- a/gdb/linux-nat.c
+++ b/gdb/linux-nat.c
@@ -65,6 +65,7 @@
#include "gdbsupport/filestuff.h"
#include "objfiles.h"
#include "nat/linux-namespaces.h"
+#include "gdbsupport/block-signals.h"
#include "gdbsupport/fileio.h"
#include "gdbsupport/scope-exit.h"
#include "gdbsupport/gdb-sigmask.h"
@@ -111,11 +112,11 @@ and target events, so neither blocking waitpid nor sigsuspend are
viable options. Instead, we should asynchronously notify the GDB main
event loop whenever there's an unprocessed event from the target. We
detect asynchronous target events by handling SIGCHLD signals. To
-notify the event loop about target events, the self-pipe trick is used
---- a pipe is registered as waitable event source in the event loop,
+notify the event loop about target events, an event pipe is used
+--- the pipe is registered as waitable event source in the event loop,
the event loop select/poll's on the read end of this pipe (as well on
-other event sources, e.g., stdin), and the SIGCHLD handler writes a
-byte to this pipe. This is more portable than relying on
+other event sources, e.g., stdin), and the SIGCHLD handler marks the
+event pipe to raise an event. This is more portable than relying on
pselect/ppoll, since on kernels that lack those syscalls, libc
emulates them with select/poll+sigprocmask, and that is racy
(a.k.a. plain broken).
@@ -195,14 +196,14 @@ enum tribool have_ptrace_getregset = TRIBOOL_UNKNOWN;
static bool debug_linux_nat;
-/* Implement 'show debug lin-lwp'. */
+/* Implement 'show debug linux-nat'. */
static void
show_debug_linux_nat (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Debugging of GNU/Linux lwp module is %s.\n"),
- value);
+ gdb_printf (file, _("Debugging of GNU/Linux native targets is %s.\n"),
+ value);
}
/* Print a linux-nat debug statement. */
@@ -226,54 +227,6 @@ static struct simple_pid_list *stopped_pids;
/* Whether target_thread_events is in effect. */
static int report_thread_events;
-/* Async mode support. */
-
-/* The read/write ends of the pipe registered as waitable file in the
- event loop. */
-static int linux_nat_event_pipe[2] = { -1, -1 };
-
-/* True if we're currently in async mode. */
-#define linux_is_async_p() (linux_nat_event_pipe[0] != -1)
-
-/* Flush the event pipe. */
-
-static void
-async_file_flush (void)
-{
- int ret;
- char buf;
-
- do
- {
- ret = read (linux_nat_event_pipe[0], &buf, 1);
- }
- while (ret >= 0 || (ret == -1 && errno == EINTR));
-}
-
-/* Put something (anything, doesn't matter what, or how much) in event
- pipe, so that the select/poll in the event-loop realizes we have
- something to process. */
-
-static void
-async_file_mark (void)
-{
- int ret;
-
- /* It doesn't really matter what the pipe contains, as long we end
- up with something in it. Might as well flush the previous
- left-overs. */
- async_file_flush ();
-
- do
- {
- ret = write (linux_nat_event_pipe[1], "+", 1);
- }
- while (ret == -1 && errno == EINTR);
-
- /* Ignore EAGAIN. If the pipe is full, the event loop will already
- be awakened anyway. */
-}
-
static int kill_lwp (int lwpid, int signo);
static int stop_callback (struct lwp_info *lp);
@@ -294,6 +247,14 @@ static void save_stop_reason (struct lwp_info *lp);
static void close_proc_mem_file (pid_t pid);
static void open_proc_mem_file (ptid_t ptid);
+/* Return TRUE if LWP is the leader thread of the process. */
+
+static bool
+is_leader (lwp_info *lp)
+{
+ return lp->ptid.pid () == lp->ptid.lwp ();
+}
+
/* LWP accessors. */
@@ -535,70 +496,12 @@ linux_nat_target::follow_fork (inferior *child_inf, ptid_t child_ptid,
if (has_vforked)
{
- struct lwp_info *parent_lp;
-
- parent_lp = find_lwp_pid (parent_ptid);
- gdb_assert (linux_supports_tracefork () >= 0);
-
- if (linux_supports_tracevforkdone ())
- {
- linux_nat_debug_printf ("waiting for VFORK_DONE on %d",
- parent_pid);
- parent_lp->stopped = 1;
+ lwp_info *parent_lp = find_lwp_pid (parent_ptid);
+ linux_nat_debug_printf ("waiting for VFORK_DONE on %d", parent_pid);
+ parent_lp->stopped = 1;
- /* We'll handle the VFORK_DONE event like any other
- event, in target_wait. */
- }
- else
- {
- /* We can't insert breakpoints until the child has
- finished with the shared memory region. We need to
- wait until that happens. Ideal would be to just
- call:
- - ptrace (PTRACE_SYSCALL, parent_pid, 0, 0);
- - waitpid (parent_pid, &status, __WALL);
- However, most architectures can't handle a syscall
- being traced on the way out if it wasn't traced on
- the way in.
-
- We might also think to loop, continuing the child
- until it exits or gets a SIGTRAP. One problem is
- that the child might call ptrace with PTRACE_TRACEME.
-
- There's no simple and reliable way to figure out when
- the vforked child will be done with its copy of the
- shared memory. We could step it out of the syscall,
- two instructions, let it go, and then single-step the
- parent once. When we have hardware single-step, this
- would work; with software single-step it could still
- be made to work but we'd have to be able to insert
- single-step breakpoints in the child, and we'd have
- to insert -just- the single-step breakpoint in the
- parent. Very awkward.
-
- In the end, the best we can do is to make sure it
- runs for a little while. Hopefully it will be out of
- range of any breakpoints we reinsert. Usually this
- is only the single-step breakpoint at vfork's return
- point. */
-
- linux_nat_debug_printf ("no VFORK_DONE support, sleeping a bit");
-
- usleep (10000);
-
- /* Pretend we've seen a PTRACE_EVENT_VFORK_DONE event,
- and leave it pending. The next linux_nat_resume call
- will notice a pending event, and bypasses actually
- resuming the inferior. */
- parent_lp->status = 0;
- parent_lp->waitstatus.set_vfork_done ();
- parent_lp->stopped = 1;
-
- /* If we're in async mode, need to tell the event loop
- there's something here to process. */
- if (target_is_async_p ())
- async_file_mark ();
- }
+ /* We'll handle the VFORK_DONE event like any other
+ event, in target_wait. */
}
}
else
@@ -615,7 +518,7 @@ linux_nat_target::follow_fork (inferior *child_inf, ptid_t child_ptid,
int
linux_nat_target::insert_fork_catchpoint (int pid)
{
- return !linux_supports_tracefork ();
+ return 0;
}
int
@@ -627,7 +530,7 @@ linux_nat_target::remove_fork_catchpoint (int pid)
int
linux_nat_target::insert_vfork_catchpoint (int pid)
{
- return !linux_supports_tracefork ();
+ return 0;
}
int
@@ -639,7 +542,7 @@ linux_nat_target::remove_vfork_catchpoint (int pid)
int
linux_nat_target::insert_exec_catchpoint (int pid)
{
- return !linux_supports_tracefork ();
+ return 0;
}
int
@@ -652,9 +555,6 @@ int
linux_nat_target::set_syscall_catchpoint (int pid, bool needed, int any_count,
gdb::array_view<const int> syscall_counts)
{
- if (!linux_supports_tracesysgood ())
- return 1;
-
/* On GNU/Linux, we ignore the arguments. It means that we only
enable the syscall catchpoints, but do not disable them.
@@ -994,8 +894,8 @@ exit_lwp (struct lwp_info *lp)
if (th)
{
if (print_thread_events)
- printf_unfiltered (_("[%s exited]\n"),
- target_pid_to_str (lp->ptid).c_str ());
+ gdb_printf (_("[%s exited]\n"),
+ target_pid_to_str (lp->ptid).c_str ());
delete_thread (th);
}
@@ -1123,7 +1023,7 @@ attach_proc_task_lwp_callback (ptid_t ptid)
else
{
linux_nat_debug_printf ("PTRACE_ATTACH %s, 0, 0 (OK)",
- target_pid_to_str (ptid).c_str ());
+ ptid.to_string ().c_str ());
lp = add_lwp (ptid);
@@ -1241,9 +1141,6 @@ linux_nat_target::attach (const char *args, int from_tty)
threads and associate pthread info with each LWP. */
linux_proc_attach_tgid_threads (lp->ptid.pid (),
attach_proc_task_lwp_callback);
-
- if (target_can_async_p ())
- target_async (1);
}
/* Ptrace-detach the thread with pid PID. */
@@ -1356,18 +1253,18 @@ get_detach_signal (struct lwp_info *lp)
if (signo == GDB_SIGNAL_0)
{
linux_nat_debug_printf ("lwp %s has no pending signal",
- target_pid_to_str (lp->ptid).c_str ());
+ lp->ptid.to_string ().c_str ());
}
else if (!signal_pass_state (signo))
{
linux_nat_debug_printf
("lwp %s had signal %s but it is in no pass state",
- target_pid_to_str (lp->ptid).c_str (), gdb_signal_to_string (signo));
+ lp->ptid.to_string ().c_str (), gdb_signal_to_string (signo));
}
else
{
linux_nat_debug_printf ("lwp %s has pending signal %s",
- target_pid_to_str (lp->ptid).c_str (),
+ lp->ptid.to_string ().c_str (),
gdb_signal_to_string (signo));
return gdb_signal_to_host (signo);
@@ -1433,13 +1330,13 @@ detach_one_lwp (struct lwp_info *lp, int *signo_p)
if (lp->status != 0)
linux_nat_debug_printf ("Pending %s for %s on detach.",
strsignal (WSTOPSIG (lp->status)),
- target_pid_to_str (lp->ptid).c_str ());
+ lp->ptid.to_string ().c_str ());
/* If there is a pending SIGSTOP, get rid of it. */
if (lp->signalled)
{
linux_nat_debug_printf ("Sending SIGCONT to %s",
- target_pid_to_str (lp->ptid).c_str ());
+ lp->ptid.to_string ().c_str ());
kill_lwp (lwpid, SIGCONT);
lp->signalled = 0;
@@ -1630,12 +1527,12 @@ resume_lwp (struct lwp_info *lp, int step, enum gdb_signal signo)
if (inf->vfork_child != NULL)
{
linux_nat_debug_printf ("Not resuming %s (vfork parent)",
- target_pid_to_str (lp->ptid).c_str ());
+ lp->ptid.to_string ().c_str ());
}
else if (!lwp_status_pending_p (lp))
{
linux_nat_debug_printf ("Resuming sibling %s, %s, %s",
- target_pid_to_str (lp->ptid).c_str (),
+ lp->ptid.to_string ().c_str (),
(signo != GDB_SIGNAL_0
? strsignal (gdb_signal_to_host (signo))
: "0"),
@@ -1646,12 +1543,12 @@ resume_lwp (struct lwp_info *lp, int step, enum gdb_signal signo)
else
{
linux_nat_debug_printf ("Not resuming sibling %s (has pending)",
- target_pid_to_str (lp->ptid).c_str ());
+ lp->ptid.to_string ().c_str ());
}
}
else
linux_nat_debug_printf ("Not resuming sibling %s (not stopped)",
- target_pid_to_str (lp->ptid).c_str ());
+ lp->ptid.to_string ().c_str ());
}
/* Callback for iterate_over_lwps. If LWP is EXCEPT, do nothing.
@@ -1698,32 +1595,22 @@ resume_set_callback (struct lwp_info *lp)
}
void
-linux_nat_target::resume (ptid_t ptid, int step, enum gdb_signal signo)
+linux_nat_target::resume (ptid_t scope_ptid, int step, enum gdb_signal signo)
{
struct lwp_info *lp;
- int resume_many;
linux_nat_debug_printf ("Preparing to %s %s, %s, inferior_ptid %s",
step ? "step" : "resume",
- target_pid_to_str (ptid).c_str (),
+ scope_ptid.to_string ().c_str (),
(signo != GDB_SIGNAL_0
? strsignal (gdb_signal_to_host (signo)) : "0"),
- target_pid_to_str (inferior_ptid).c_str ());
-
- /* A specific PTID means `step only this process id'. */
- resume_many = (minus_one_ptid == ptid
- || ptid.is_pid ());
+ inferior_ptid.to_string ().c_str ());
/* Mark the lwps we're resuming as resumed and update their
last_resume_kind to resume_continue. */
- iterate_over_lwps (ptid, resume_set_callback);
+ iterate_over_lwps (scope_ptid, resume_set_callback);
- /* See if it's the current inferior that should be handled
- specially. */
- if (resume_many)
- lp = find_lwp_pid (inferior_ptid);
- else
- lp = find_lwp_pid (ptid);
+ lp = find_lwp_pid (inferior_ptid);
gdb_assert (lp != NULL);
/* Remember if we're stepping. */
@@ -1772,22 +1659,20 @@ linux_nat_target::resume (ptid_t ptid, int step, enum gdb_signal signo)
return;
}
- if (resume_many)
- iterate_over_lwps (ptid, [=] (struct lwp_info *info)
- {
- return linux_nat_resume_callback (info, lp);
- });
+ /* No use iterating unless we're resuming other threads. */
+ if (scope_ptid != lp->ptid)
+ iterate_over_lwps (scope_ptid, [=] (struct lwp_info *info)
+ {
+ return linux_nat_resume_callback (info, lp);
+ });
linux_nat_debug_printf ("%s %s, %s (resume event thread)",
step ? "PTRACE_SINGLESTEP" : "PTRACE_CONT",
- target_pid_to_str (lp->ptid).c_str (),
+ lp->ptid.to_string ().c_str (),
(signo != GDB_SIGNAL_0
? strsignal (gdb_signal_to_host (signo)) : "0"));
linux_resume_one_lwp (lp, step, signo);
-
- if (target_can_async_p ())
- target_async (1);
}
/* Send a signal to an LWP. */
@@ -2096,20 +1981,11 @@ linux_handle_extended_wait (struct lwp_info *lp, int status)
if (event == PTRACE_EVENT_VFORK_DONE)
{
- if (current_inferior ()->waiting_for_vfork_done)
- {
- linux_nat_debug_printf
- ("Got expected PTRACE_EVENT_VFORK_DONE from LWP %ld: stopping",
- lp->ptid.lwp ());
-
- ourstatus->set_vfork_done ();
- return 0;
- }
-
linux_nat_debug_printf
- ("Got PTRACE_EVENT_VFORK_DONE from LWP %ld: ignoring", lp->ptid.lwp ());
-
- return 1;
+ ("Got PTRACE_EVENT_VFORK_DONE from LWP %ld",
+ lp->ptid.lwp ());
+ ourstatus->set_vfork_done ();
+ return 0;
}
internal_error (__FILE__, __LINE__,
@@ -2167,7 +2043,7 @@ wait_lwp (struct lwp_info *lp)
the top of the file. */
thread_dead = 1;
linux_nat_debug_printf ("%s vanished.",
- target_pid_to_str (lp->ptid).c_str ());
+ lp->ptid.to_string ().c_str ());
}
if (pid != 0)
break;
@@ -2191,7 +2067,7 @@ wait_lwp (struct lwp_info *lp)
{
thread_dead = 1;
linux_nat_debug_printf ("Thread group leader %s vanished.",
- target_pid_to_str (lp->ptid).c_str ());
+ lp->ptid.to_string ().c_str ());
break;
}
@@ -2211,7 +2087,7 @@ wait_lwp (struct lwp_info *lp)
gdb_assert (pid == lp->ptid.lwp ());
linux_nat_debug_printf ("waitpid %s received %s",
- target_pid_to_str (lp->ptid).c_str (),
+ lp->ptid.to_string ().c_str (),
status_to_str (status).c_str ());
/* Check if the thread has exited. */
@@ -2232,7 +2108,7 @@ wait_lwp (struct lwp_info *lp)
thread_dead = 1;
linux_nat_debug_printf ("%s exited.",
- target_pid_to_str (lp->ptid).c_str ());
+ lp->ptid.to_string ().c_str ());
}
}
@@ -2294,7 +2170,7 @@ stop_callback (struct lwp_info *lp)
int ret;
linux_nat_debug_printf ("kill %s **<SIGSTOP>**",
- target_pid_to_str (lp->ptid).c_str ());
+ lp->ptid.to_string ().c_str ());
errno = 0;
ret = kill_lwp (lp->ptid.lwp (), SIGSTOP);
@@ -2388,7 +2264,7 @@ maybe_clear_ignore_sigint (struct lwp_info *lp)
if (!linux_nat_has_pending_sigint (lp->ptid.lwp ()))
{
linux_nat_debug_printf ("Clearing bogus flag for %s",
- target_pid_to_str (lp->ptid).c_str ());
+ lp->ptid.to_string ().c_str ());
lp->ignore_sigint = 0;
}
}
@@ -2486,7 +2362,7 @@ stop_wait_callback (struct lwp_info *lp)
lp->stopped = 0;
linux_nat_debug_printf
("PTRACE_CONT %s, 0, 0 (%s) (discarding SIGINT)",
- target_pid_to_str (lp->ptid).c_str (),
+ lp->ptid.to_string ().c_str (),
errno ? safe_strerror (errno) : "OK");
return stop_wait_callback (lp);
@@ -2500,7 +2376,7 @@ stop_wait_callback (struct lwp_info *lp)
linux_nat_debug_printf ("Pending event %s in %s",
status_to_str ((int) status).c_str (),
- target_pid_to_str (lp->ptid).c_str ());
+ lp->ptid.to_string ().c_str ());
/* Save the sigtrap event. */
lp->status = status;
@@ -2512,7 +2388,7 @@ stop_wait_callback (struct lwp_info *lp)
/* We caught the SIGSTOP that we intended to catch. */
linux_nat_debug_printf ("Expected SIGSTOP caught for %s.",
- target_pid_to_str (lp->ptid).c_str ());
+ lp->ptid.to_string ().c_str ());
lp->signalled = 0;
@@ -2557,7 +2433,7 @@ status_callback (struct lwp_info *lp)
if (pc != lp->stop_pc)
{
linux_nat_debug_printf ("PC of %s changed. was=%s, now=%s",
- target_pid_to_str (lp->ptid).c_str (),
+ lp->ptid.to_string ().c_str (),
paddress (target_gdbarch (), lp->stop_pc),
paddress (target_gdbarch (), pc));
discard = 1;
@@ -2567,7 +2443,7 @@ status_callback (struct lwp_info *lp)
else if (!breakpoint_inserted_here_p (regcache->aspace (), pc))
{
linux_nat_debug_printf ("previous breakpoint of %s, at %s gone",
- target_pid_to_str (lp->ptid).c_str (),
+ lp->ptid.to_string ().c_str (),
paddress (target_gdbarch (), lp->stop_pc));
discard = 1;
@@ -2577,7 +2453,7 @@ status_callback (struct lwp_info *lp)
if (discard)
{
linux_nat_debug_printf ("pending event of %s cancelled.",
- target_pid_to_str (lp->ptid).c_str ());
+ lp->ptid.to_string ().c_str ());
lp->status = 0;
linux_resume_one_lwp (lp, lp->step, GDB_SIGNAL_0);
@@ -2701,7 +2577,7 @@ save_stop_reason (struct lwp_info *lp)
else if (siginfo.si_code == TRAP_TRACE)
{
linux_nat_debug_printf ("%s stopped by trace",
- target_pid_to_str (lp->ptid).c_str ());
+ lp->ptid.to_string ().c_str ());
/* We may have single stepped an instruction that
triggered a watchpoint. In that case, on some
@@ -2732,7 +2608,7 @@ save_stop_reason (struct lwp_info *lp)
if (lp->stop_reason == TARGET_STOPPED_BY_SW_BREAKPOINT)
{
linux_nat_debug_printf ("%s stopped by software breakpoint",
- target_pid_to_str (lp->ptid).c_str ());
+ lp->ptid.to_string ().c_str ());
/* Back up the PC if necessary. */
if (pc != sw_bp_pc)
@@ -2744,12 +2620,12 @@ save_stop_reason (struct lwp_info *lp)
else if (lp->stop_reason == TARGET_STOPPED_BY_HW_BREAKPOINT)
{
linux_nat_debug_printf ("%s stopped by hardware breakpoint",
- target_pid_to_str (lp->ptid).c_str ());
+ lp->ptid.to_string ().c_str ());
}
else if (lp->stop_reason == TARGET_STOPPED_BY_WATCHPOINT)
{
linux_nat_debug_printf ("%s stopped by hardware watchpoint",
- target_pid_to_str (lp->ptid).c_str ());
+ lp->ptid.to_string ().c_str ());
}
lp->stop_pc = pc;
@@ -2824,7 +2700,7 @@ select_event_lwp (ptid_t filter, struct lwp_info **orig_lp, int *status)
if (event_lp != NULL)
{
linux_nat_debug_printf ("Select single-step %s",
- target_pid_to_str (event_lp->ptid).c_str ());
+ event_lp->ptid.to_string ().c_str ());
}
}
@@ -2890,46 +2766,67 @@ linux_nat_filter_event (int lwpid, int status)
lp = find_lwp_pid (ptid_t (lwpid));
- /* Check for stop events reported by a process we didn't already
- know about - anything not already in our LWP list.
-
- If we're expecting to receive stopped processes after
- fork, vfork, and clone events, then we'll just add the
- new one to our list and go back to waiting for the event
- to be reported - the stopped process might be returned
- from waitpid before or after the event is.
-
- But note the case of a non-leader thread exec'ing after the
- leader having exited, and gone from our lists. The non-leader
- thread changes its tid to the tgid. */
-
- if (WIFSTOPPED (status) && lp == NULL
- && (WSTOPSIG (status) == SIGTRAP && event == PTRACE_EVENT_EXEC))
+ /* Check for events reported by anything not in our LWP list. */
+ if (lp == nullptr)
{
- /* A multi-thread exec after we had seen the leader exiting. */
- linux_nat_debug_printf ("Re-adding thread group leader LWP %d.", lwpid);
+ if (WIFSTOPPED (status))
+ {
+ if (WSTOPSIG (status) == SIGTRAP && event == PTRACE_EVENT_EXEC)
+ {
+ /* A non-leader thread exec'ed after we've seen the
+ leader zombie, and removed it from our lists (in
+ check_zombie_leaders). The non-leader thread changes
+ its tid to the tgid. */
+ linux_nat_debug_printf
+ ("Re-adding thread group leader LWP %d after exec.",
+ lwpid);
- lp = add_lwp (ptid_t (lwpid, lwpid));
- lp->stopped = 1;
- lp->resumed = 1;
- add_thread (linux_target, lp->ptid);
- }
+ lp = add_lwp (ptid_t (lwpid, lwpid));
+ lp->stopped = 1;
+ lp->resumed = 1;
+ add_thread (linux_target, lp->ptid);
+ }
+ else
+ {
+ /* A process we are controlling has forked and the new
+ child's stop was reported to us by the kernel. Save
+ its PID and go back to waiting for the fork event to
+ be reported - the stopped process might be returned
+ from waitpid before or after the fork event is. */
+ linux_nat_debug_printf
+ ("Saving LWP %d status %s in stopped_pids list",
+ lwpid, status_to_str (status).c_str ());
+ add_to_pid_list (&stopped_pids, lwpid, status);
+ }
+ }
+ else
+ {
+ /* Don't report an event for the exit of an LWP not in our
+ list, i.e. not part of any inferior we're debugging.
+ This can happen if we detach from a program we originally
+ forked and then it exits. However, note that we may have
+ earlier deleted a leader of an inferior we're debugging,
+ in check_zombie_leaders. Re-add it back here if so. */
+ for (inferior *inf : all_inferiors (linux_target))
+ {
+ if (inf->pid == lwpid)
+ {
+ linux_nat_debug_printf
+ ("Re-adding thread group leader LWP %d after exit.",
+ lwpid);
+
+ lp = add_lwp (ptid_t (lwpid, lwpid));
+ lp->resumed = 1;
+ add_thread (linux_target, lp->ptid);
+ break;
+ }
+ }
+ }
- if (WIFSTOPPED (status) && !lp)
- {
- linux_nat_debug_printf ("saving LWP %ld status %s in stopped_pids list",
- (long) lwpid, status_to_str (status).c_str ());
- add_to_pid_list (&stopped_pids, lwpid, status);
- return;
+ if (lp == nullptr)
+ return;
}
- /* Make sure we don't report an event for the exit of an LWP not in
- our list, i.e. not part of the current process. This can happen
- if we detach from a program we originally forked and then it
- exits. */
- if (!WIFSTOPPED (status) && !lp)
- return;
-
/* This LWP is stopped now. (And if dead, this prevents it from
ever being continued.) */
lp->stopped = 1;
@@ -2974,13 +2871,12 @@ linux_nat_filter_event (int lwpid, int status)
/* Check if the thread has exited. */
if (WIFEXITED (status) || WIFSIGNALED (status))
{
- if (!report_thread_events
- && num_lwps (lp->ptid.pid ()) > 1)
+ if (!report_thread_events && !is_leader (lp))
{
linux_nat_debug_printf ("%s exited.",
- target_pid_to_str (lp->ptid).c_str ());
+ lp->ptid.to_string ().c_str ());
- /* If there is at least one more LWP, then the exit signal
+ /* If this was not the leader exiting, then the exit signal
was not the end of the debugged application and should be
ignored. */
exit_lwp (lp);
@@ -3013,7 +2909,7 @@ linux_nat_filter_event (int lwpid, int status)
if (lp->last_resume_kind == resume_stop)
{
linux_nat_debug_printf ("resume_stop SIGSTOP caught for %s.",
- target_pid_to_str (lp->ptid).c_str ());
+ lp->ptid.to_string ().c_str ());
}
else
{
@@ -3022,7 +2918,7 @@ linux_nat_filter_event (int lwpid, int status)
linux_nat_debug_printf
("%s %s, 0, 0 (discard delayed SIGSTOP)",
lp->step ? "PTRACE_SINGLESTEP" : "PTRACE_CONT",
- target_pid_to_str (lp->ptid).c_str ());
+ lp->ptid.to_string ().c_str ());
linux_resume_one_lwp (lp, lp->step, GDB_SIGNAL_0);
gdb_assert (lp->resumed);
@@ -3036,7 +2932,7 @@ linux_nat_filter_event (int lwpid, int status)
&& WIFSTOPPED (status) && WSTOPSIG (status) == SIGINT)
{
linux_nat_debug_printf ("Delayed SIGINT caught for %s.",
- target_pid_to_str (lp->ptid).c_str ());
+ lp->ptid.to_string ().c_str ());
/* This is a delayed SIGINT. */
lp->ignore_sigint = 0;
@@ -3044,7 +2940,7 @@ linux_nat_filter_event (int lwpid, int status)
linux_resume_one_lwp (lp, lp->step, GDB_SIGNAL_0);
linux_nat_debug_printf ("%s %s, 0, 0 (discard SIGINT)",
lp->step ? "PTRACE_SINGLESTEP" : "PTRACE_CONT",
- target_pid_to_str (lp->ptid).c_str ());
+ lp->ptid.to_string ().c_str ());
gdb_assert (lp->resumed);
/* Discard the event. */
@@ -3094,7 +2990,7 @@ linux_nat_filter_event (int lwpid, int status)
linux_nat_debug_printf
("%s %s, %s (preempt 'handle')",
lp->step ? "PTRACE_SINGLESTEP" : "PTRACE_CONT",
- target_pid_to_str (lp->ptid).c_str (),
+ lp->ptid.to_string ().c_str (),
(signo != GDB_SIGNAL_0
? strsignal (gdb_signal_to_host (signo)) : "0"));
return;
@@ -3123,33 +3019,63 @@ check_zombie_leaders (void)
leader_lp = find_lwp_pid (ptid_t (inf->pid));
if (leader_lp != NULL
/* Check if there are other threads in the group, as we may
- have raced with the inferior simply exiting. */
+ have raced with the inferior simply exiting. Note this
+ isn't a watertight check. If the inferior is
+ multi-threaded and is exiting, it may be we see the
+ leader as zombie before we reap all the non-leader
+ threads. See comments below. */
&& num_lwps (inf->pid) > 1
&& linux_proc_pid_is_zombie (inf->pid))
{
+ /* A zombie leader in a multi-threaded program can mean one
+ of three things:
+
+ #1 - Only the leader exited, not the whole program, e.g.,
+ with pthread_exit. Since we can't reap the leader's exit
+ status until all other threads are gone and reaped too,
+ we want to delete the zombie leader right away, as it
+ can't be debugged, we can't read its registers, etc.
+ This is the main reason we check for zombie leaders
+ disappearing.
+
+ #2 - The whole thread-group/process exited (a group exit,
+ via e.g. exit(3), and there is (or will be shortly) an
+ exit reported for each thread in the process, and then
+ finally an exit for the leader once the non-leaders are
+ reaped.
+
+ #3 - There are 3 or more threads in the group, and a
+ thread other than the leader exec'd. See comments on
+ exec events at the top of the file.
+
+ Ideally we would never delete the leader for case #2.
+ Instead, we want to collect the exit status of each
+ non-leader thread, and then finally collect the exit
+ status of the leader as normal and use its exit code as
+ whole-process exit code. Unfortunately, there's no
+ race-free way to distinguish cases #1 and #2. We can't
+ assume the exit events for the non-leaders threads are
+ already pending in the kernel, nor can we assume the
+ non-leader threads are in zombie state already. Between
+ the leader becoming zombie and the non-leaders exiting
+ and becoming zombie themselves, there's a small time
+ window, so such a check would be racy. Temporarily
+ pausing all threads and checking to see if all threads
+ exit or not before re-resuming them would work in the
+ case that all threads are running right now, but it
+ wouldn't work if some thread is currently already
+ ptrace-stopped, e.g., due to scheduler-locking.
+
+ So what we do is we delete the leader anyhow, and then
+ later on when we see its exit status, we re-add it back.
+ We also make sure that we only report a whole-process
+ exit when we see the leader exiting, as opposed to when
+ the last LWP in the LWP list exits, which can be a
+ non-leader if we deleted the leader here. */
linux_nat_debug_printf ("Thread group leader %d zombie "
- "(it exited, or another thread execd).",
+ "(it exited, or another thread execd), "
+ "deleting it.",
inf->pid);
-
- /* A leader zombie can mean one of two things:
-
- - It exited, and there's an exit status pending
- available, or only the leader exited (not the whole
- program). In the latter case, we can't waitpid the
- leader's exit status until all other threads are gone.
-
- - There are 3 or more threads in the group, and a thread
- other than the leader exec'd. See comments on exec
- events at the top of the file. We could try
- distinguishing the exit and exec cases, by waiting once
- more, and seeing if something comes out, but it doesn't
- sound useful. The previous leader _does_ go away, and
- we'll re-add the new one once we see the exec event
- (which is just the same as what would happen if the
- previous leader did exit voluntarily before some other
- thread execs). */
-
- linux_nat_debug_printf ("Thread group leader %d vanished.", inf->pid);
exit_lwp (leader_lp);
}
}
@@ -3166,7 +3092,7 @@ filter_exit_event (struct lwp_info *event_child,
{
ptid_t ptid = event_child->ptid;
- if (num_lwps (ptid.pid ()) > 1)
+ if (!is_leader (event_child))
{
if (report_thread_events)
ourstatus->set_thread_exited (0);
@@ -3212,7 +3138,7 @@ linux_nat_wait_1 (ptid_t ptid, struct target_waitstatus *ourstatus,
{
linux_nat_debug_printf ("Using pending wait status %s for %s.",
status_to_str (lp->status).c_str (),
- target_pid_to_str (lp->ptid).c_str ());
+ lp->ptid.to_string ().c_str ());
}
/* But if we don't find a pending event, we'll have to wait. Always
@@ -3364,7 +3290,7 @@ linux_nat_wait_1 (ptid_t ptid, struct target_waitstatus *ourstatus,
if (linux_target->low_status_is_event (status))
{
linux_nat_debug_printf ("trap ptid is %s.",
- target_pid_to_str (lp->ptid).c_str ());
+ lp->ptid.to_string ().c_str ());
}
if (lp->waitstatus.kind () != TARGET_WAITKIND_IGNORE)
@@ -3410,17 +3336,17 @@ resume_stopped_resumed_lwps (struct lwp_info *lp, const ptid_t wait_ptid)
if (!lp->stopped)
{
linux_nat_debug_printf ("NOT resuming LWP %s, not stopped",
- target_pid_to_str (lp->ptid).c_str ());
+ lp->ptid.to_string ().c_str ());
}
else if (!lp->resumed)
{
linux_nat_debug_printf ("NOT resuming LWP %s, not resumed",
- target_pid_to_str (lp->ptid).c_str ());
+ lp->ptid.to_string ().c_str ());
}
else if (lwp_status_pending_p (lp))
{
linux_nat_debug_printf ("NOT resuming LWP %s, has pending status",
- target_pid_to_str (lp->ptid).c_str ());
+ lp->ptid.to_string ().c_str ());
}
else
{
@@ -3444,7 +3370,7 @@ resume_stopped_resumed_lwps (struct lwp_info *lp, const ptid_t wait_ptid)
{
linux_nat_debug_printf
("resuming stopped-resumed LWP %s at %s: step=%d",
- target_pid_to_str (lp->ptid).c_str (), paddress (gdbarch, pc),
+ lp->ptid.to_string ().c_str (), paddress (gdbarch, pc),
lp->step);
linux_resume_one_lwp_throw (lp, lp->step, GDB_SIGNAL_0);
@@ -3466,7 +3392,7 @@ linux_nat_target::wait (ptid_t ptid, struct target_waitstatus *ourstatus,
{
ptid_t event_ptid;
- linux_nat_debug_printf ("[%s], [%s]", target_pid_to_str (ptid).c_str (),
+ linux_nat_debug_printf ("[%s], [%s]", ptid.to_string ().c_str (),
target_options_to_string (target_options).c_str ());
/* Flush the async file first. */
@@ -3948,7 +3874,7 @@ open_proc_mem_file (ptid_t ptid)
std::forward_as_tuple (ptid.pid ()),
std::forward_as_tuple (ptid, fd));
- linux_nat_debug_printf ("opened fd %d for lwp %d.%ld\n",
+ linux_nat_debug_printf ("opened fd %d for lwp %d.%ld",
fd, ptid.pid (), ptid.lwp ());
}
@@ -3988,7 +3914,7 @@ linux_proc_xfer_memory_partial (gdb_byte *readbuf, const gdb_byte *writebuf,
if (ret == -1)
{
- linux_nat_debug_printf ("accessing fd %d for pid %d failed: %s (%d)\n",
+ linux_nat_debug_printf ("accessing fd %d for pid %d failed: %s (%d)",
fd, inferior_ptid.pid (),
safe_strerror (errno), errno);
return TARGET_XFER_EOF;
@@ -3997,7 +3923,7 @@ linux_proc_xfer_memory_partial (gdb_byte *readbuf, const gdb_byte *writebuf,
{
/* EOF means the address space is gone, the whole process exited
or execed. */
- linux_nat_debug_printf ("accessing fd %d for pid %d got EOF\n",
+ linux_nat_debug_printf ("accessing fd %d for pid %d got EOF",
fd, inferior_ptid.pid ());
return TARGET_XFER_EOF;
}
@@ -4142,14 +4068,6 @@ linux_nat_target::static_tracepoint_markers_by_strid (const char *strid)
return markers;
}
-/* target_is_async_p implementation. */
-
-bool
-linux_nat_target::is_async_p ()
-{
- return linux_is_async_p ();
-}
-
/* target_can_async_p implementation. */
bool
@@ -4201,10 +4119,11 @@ sigchld_handler (int signo)
if (debug_linux_nat)
gdb_stdlog->write_async_safe ("sigchld\n", sizeof ("sigchld\n") - 1);
- if (signo == SIGCHLD
- && linux_nat_event_pipe[0] != -1)
- async_file_mark (); /* Let the event loop know that there are
- events to handle. */
+ if (signo == SIGCHLD)
+ {
+ /* Let the event loop know that there are events to handle. */
+ linux_nat_target::async_file_mark_if_open ();
+ }
errno = old_errno;
}
@@ -4217,73 +4136,35 @@ handle_target_event (int error, gdb_client_data client_data)
inferior_event_handler (INF_REG_EVENT);
}
-/* Create/destroy the target events pipe. Returns previous state. */
-
-static int
-linux_async_pipe (int enable)
-{
- int previous = linux_is_async_p ();
-
- if (previous != enable)
- {
- sigset_t prev_mask;
-
- /* Block child signals while we create/destroy the pipe, as
- their handler writes to it. */
- block_child_signals (&prev_mask);
-
- if (enable)
- {
- if (gdb_pipe_cloexec (linux_nat_event_pipe) == -1)
- internal_error (__FILE__, __LINE__,
- "creating event pipe failed.");
-
- fcntl (linux_nat_event_pipe[0], F_SETFL, O_NONBLOCK);
- fcntl (linux_nat_event_pipe[1], F_SETFL, O_NONBLOCK);
- }
- else
- {
- close (linux_nat_event_pipe[0]);
- close (linux_nat_event_pipe[1]);
- linux_nat_event_pipe[0] = -1;
- linux_nat_event_pipe[1] = -1;
- }
-
- restore_child_signals_mask (&prev_mask);
- }
-
- return previous;
-}
-
-int
-linux_nat_target::async_wait_fd ()
-{
- return linux_nat_event_pipe[0];
-}
-
/* target_async implementation. */
void
linux_nat_target::async (int enable)
{
+ if ((enable != 0) == is_async_p ())
+ return;
+
+ /* Block child signals while we create/destroy the pipe, as their
+ handler writes to it. */
+ gdb::block_signals blocker;
+
if (enable)
{
- if (!linux_async_pipe (1))
- {
- add_file_handler (linux_nat_event_pipe[0],
- handle_target_event, NULL,
- "linux-nat");
- /* There may be pending events to handle. Tell the event loop
- to poll them. */
- async_file_mark ();
- }
+ if (!async_file_open ())
+ internal_error (__FILE__, __LINE__, "creating event pipe failed.");
+
+ add_file_handler (async_wait_fd (), handle_target_event, NULL,
+ "linux-nat");
+
+ /* There may be pending events to handle. Tell the event loop
+ to poll them. */
+ async_file_mark ();
}
else
{
- delete_file_handler (linux_nat_event_pipe[0]);
- linux_async_pipe (0);
+ delete_file_handler (async_wait_fd ());
+ async_file_close ();
}
- return;
}
/* Stop an LWP, and push a GDB_SIGNAL_0 stop status if no other
@@ -4295,7 +4176,7 @@ linux_nat_stop_lwp (struct lwp_info *lwp)
if (!lwp->stopped)
{
linux_nat_debug_printf ("running -> suspending %s",
- target_pid_to_str (lwp->ptid).c_str ());
+ lwp->ptid.to_string ().c_str ());
if (lwp->last_resume_kind == resume_stop)
@@ -4316,10 +4197,10 @@ linux_nat_stop_lwp (struct lwp_info *lwp)
{
if (find_thread_ptid (linux_target, lwp->ptid)->stop_requested)
linux_nat_debug_printf ("already stopped/stop_requested %s",
- target_pid_to_str (lwp->ptid).c_str ());
+ lwp->ptid.to_string ().c_str ());
else
linux_nat_debug_printf ("already stopped/no stop_requested yet %s",
- target_pid_to_str (lwp->ptid).c_str ());
+ lwp->ptid.to_string ().c_str ());
}
}
return 0;
@@ -4332,16 +4213,6 @@ linux_nat_target::stop (ptid_t ptid)
iterate_over_lwps (ptid, linux_nat_stop_lwp);
}
-void
-linux_nat_target::close ()
-{
- /* Unregister from the event loop. */
- if (is_async_p ())
- async (0);
-
- inf_ptrace_target::close ();
-}
-
/* When requests are passed down from the linux-nat layer to the
single threaded inf-ptrace layer, ptids of (lwpid,0,0) form are
used. The address space pointer is stored in the inferior object,
@@ -4529,7 +4400,7 @@ void _initialize_linux_nat ();
void
_initialize_linux_nat ()
{
- add_setshow_boolean_cmd ("lin-lwp", class_maintenance,
+ add_setshow_boolean_cmd ("linux-nat", class_maintenance,
&debug_linux_nat, _("\
Set debugging of GNU/Linux native target."), _(" \
Show debugging of GNU/Linux native target."), _(" \
diff --git a/gdb/linux-nat.h b/gdb/linux-nat.h
index befe5b6311a..12a90eccb28 100644
--- a/gdb/linux-nat.h
+++ b/gdb/linux-nat.h
@@ -83,16 +83,12 @@ public:
void thread_events (int) override;
bool can_async_p () override;
- bool is_async_p () override;
bool supports_non_stop () override;
bool always_non_stop_p () override;
- int async_wait_fd () override;
void async (int) override;
- void close () override;
-
void stop (ptid_t) override;
bool supports_multi_process () override;
diff --git a/gdb/linux-record.c b/gdb/linux-record.c
index 0a84bad6983..ea858df59a6 100644
--- a/gdb/linux-record.c
+++ b/gdb/linux-record.c
@@ -120,11 +120,11 @@ record_linux_sockaddr (struct regcache *regcache,
if (target_read_memory ((CORE_ADDR) len, a, tdep->size_int))
{
if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = 0x%s len = %d.\n",
- phex_nz (len, tdep->size_pointer),
- tdep->size_int);
+ gdb_printf (gdb_stdlog,
+ "Process record: error reading "
+ "memory at addr = 0x%s len = %d.\n",
+ phex_nz (len, tdep->size_pointer),
+ tdep->size_int);
return -1;
}
addrlen = (int) extract_unsigned_integer (a, tdep->size_int, byte_order);
@@ -157,12 +157,12 @@ record_linux_msghdr (struct regcache *regcache,
if (target_read_memory ((CORE_ADDR) addr, a, tdep->size_msghdr))
{
if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = 0x%s "
- "len = %d.\n",
- phex_nz (addr, tdep->size_pointer),
- tdep->size_msghdr);
+ gdb_printf (gdb_stdlog,
+ "Process record: error reading "
+ "memory at addr = 0x%s "
+ "len = %d.\n",
+ phex_nz (addr, tdep->size_pointer),
+ tdep->size_msghdr);
return -1;
}
@@ -194,13 +194,13 @@ record_linux_msghdr (struct regcache *regcache,
if (target_read_memory ((CORE_ADDR) addr, iov, tdep->size_iovec))
{
if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error "
- "reading memory at "
- "addr = 0x%s "
- "len = %d.\n",
- phex_nz (addr,tdep->size_pointer),
- tdep->size_iovec);
+ gdb_printf (gdb_stdlog,
+ "Process record: error "
+ "reading memory at "
+ "addr = 0x%s "
+ "len = %d.\n",
+ phex_nz (addr,tdep->size_pointer),
+ tdep->size_iovec);
return -1;
}
tmpaddr = (CORE_ADDR) extract_unsigned_integer (iov,
@@ -492,17 +492,17 @@ record_linux_system_call (enum gdb_syscall syscall,
}
else if (tmpulongest == tdep->ioctl_TIOCSERGSTRUCT)
{
- fprintf_unfiltered (gdb_stderr,
- _("Process record and replay target doesn't "
- "support ioctl request TIOCSERGSTRUCT\n"));
+ gdb_printf (gdb_stderr,
+ _("Process record and replay target doesn't "
+ "support ioctl request TIOCSERGSTRUCT\n"));
return 1;
}
else
{
- fprintf_unfiltered (gdb_stderr,
- _("Process record and replay target doesn't "
- "support ioctl request 0x%s.\n"),
- OUTPUT_REG (tmpulongest, tdep->arg2));
+ gdb_printf (gdb_stderr,
+ _("Process record and replay target doesn't "
+ "support ioctl request 0x%s.\n"),
+ OUTPUT_REG (tmpulongest, tdep->arg2));
return 1;
}
break;
@@ -616,11 +616,11 @@ record_linux_system_call (enum gdb_syscall syscall,
if (target_read_memory (tmpulongest, a, sz_sel_arg))
{
if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading memory "
- "at addr = 0x%s len = %lu.\n",
- OUTPUT_REG (tmpulongest, tdep->arg1),
- sz_sel_arg);
+ gdb_printf (gdb_stdlog,
+ "Process record: error reading memory "
+ "at addr = 0x%s len = %lu.\n",
+ OUTPUT_REG (tmpulongest, tdep->arg1),
+ sz_sel_arg);
return -1;
}
/* Skip n. */
@@ -764,12 +764,12 @@ Do you want to stop the program?"),
tdep->size_int))
{
if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = 0x%s "
- "len = %d.\n",
- OUTPUT_REG (tmpulongest, tdep->arg5),
- tdep->size_int);
+ gdb_printf (gdb_stdlog,
+ "Process record: error reading "
+ "memory at addr = 0x%s "
+ "len = %d.\n",
+ OUTPUT_REG (tmpulongest, tdep->arg5),
+ tdep->size_int);
return -1;
}
regcache_raw_read_unsigned (regcache, tdep->arg4, &optvalp);
@@ -808,11 +808,11 @@ Do you want to stop the program?"),
tdep->size_ulong * 2))
{
if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = 0x%s len = %d.\n",
- OUTPUT_REG (tmpulongest, tdep->arg2),
- tdep->size_ulong * 2);
+ gdb_printf (gdb_stdlog,
+ "Process record: error reading "
+ "memory at addr = 0x%s len = %d.\n",
+ OUTPUT_REG (tmpulongest, tdep->arg2),
+ tdep->size_ulong * 2);
return -1;
}
tmpulongest = extract_unsigned_integer (a,
@@ -839,11 +839,11 @@ Do you want to stop the program?"),
tdep->size_ulong))
{
if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = 0x%s len = %d.\n",
- OUTPUT_REG (tmpulongest, tdep->arg2),
- tdep->size_ulong);
+ gdb_printf (gdb_stdlog,
+ "Process record: error reading "
+ "memory at addr = 0x%s len = %d.\n",
+ OUTPUT_REG (tmpulongest, tdep->arg2),
+ tdep->size_ulong);
return -1;
}
tmpaddr
@@ -870,11 +870,11 @@ Do you want to stop the program?"),
tdep->size_ulong * 2))
{
if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = 0x%s len = %d.\n",
- OUTPUT_REG (tmpulongest, tdep->arg2),
- tdep->size_ulong * 2);
+ gdb_printf (gdb_stdlog,
+ "Process record: error reading "
+ "memory at addr = 0x%s len = %d.\n",
+ OUTPUT_REG (tmpulongest, tdep->arg2),
+ tdep->size_ulong * 2);
return -1;
}
tmpulongest = extract_unsigned_integer (a, tdep->size_ulong,
@@ -897,11 +897,11 @@ Do you want to stop the program?"),
tdep->size_ulong))
{
if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = 0x%s len = %d.\n",
- OUTPUT_REG (tmpulongest, tdep->arg2),
- tdep->size_ulong);
+ gdb_printf (gdb_stdlog,
+ "Process record: error reading "
+ "memory at addr = 0x%s len = %d.\n",
+ OUTPUT_REG (tmpulongest, tdep->arg2),
+ tdep->size_ulong);
return -1;
}
tmpulongest = extract_unsigned_integer (a, tdep->size_ulong,
@@ -934,11 +934,11 @@ Do you want to stop the program?"),
tdep->size_ulong * 2))
{
if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = 0x%s len = %d.\n",
- OUTPUT_REG (tmpulongest, tdep->arg2),
- tdep->size_ulong * 2);
+ gdb_printf (gdb_stdlog,
+ "Process record: error reading "
+ "memory at addr = 0x%s len = %d.\n",
+ OUTPUT_REG (tmpulongest, tdep->arg2),
+ tdep->size_ulong * 2);
return -1;
}
tmpulongest = extract_unsigned_integer (a + tdep->size_ulong,
@@ -950,13 +950,13 @@ Do you want to stop the program?"),
tdep->size_int))
{
if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = 0x%s "
- "len = %d.\n",
- phex_nz (tmpulongest,
- tdep->size_ulong),
- tdep->size_int);
+ gdb_printf (gdb_stdlog,
+ "Process record: error reading "
+ "memory at addr = 0x%s "
+ "len = %d.\n",
+ phex_nz (tmpulongest,
+ tdep->size_ulong),
+ tdep->size_int);
return -1;
}
tmpaddr
@@ -995,11 +995,11 @@ Do you want to stop the program?"),
tdep->size_ulong))
{
if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = 0x%s len = %d.\n",
- OUTPUT_REG (tmpulongest, tdep->arg2),
- tdep->size_ulong);
+ gdb_printf (gdb_stdlog,
+ "Process record: error reading "
+ "memory at addr = 0x%s len = %d.\n",
+ OUTPUT_REG (tmpulongest, tdep->arg2),
+ tdep->size_ulong);
return -1;
}
tmpulongest = extract_unsigned_integer (a, tdep->size_ulong,
@@ -1010,10 +1010,10 @@ Do you want to stop the program?"),
}
break;
default:
- fprintf_unfiltered (gdb_stderr,
- _("Process record and replay target "
- "doesn't support socketcall call 0x%s\n"),
- OUTPUT_REG (tmpulongest, tdep->arg1));
+ gdb_printf (gdb_stderr,
+ _("Process record and replay target "
+ "doesn't support socketcall call 0x%s\n"),
+ OUTPUT_REG (tmpulongest, tdep->arg1));
return -1;
break;
}
@@ -1151,10 +1151,10 @@ Do you want to stop the program?"),
break;
default:
/* XXX RECORD_SEMCTL still not supported. */
- fprintf_unfiltered (gdb_stderr,
- _("Process record and replay target doesn't "
- "support ipc number %s\n"),
- pulongest (tmpulongest));
+ gdb_printf (gdb_stderr,
+ _("Process record and replay target doesn't "
+ "support ipc number %s\n"),
+ pulongest (tmpulongest));
break;
}
break;
@@ -1292,11 +1292,11 @@ Do you want to stop the program?"),
tdep->size_iovec))
{
if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = 0x%s len = %d.\n",
- OUTPUT_REG (vec, tdep->arg2),
- tdep->size_iovec);
+ gdb_printf (gdb_stdlog,
+ "Process record: error reading "
+ "memory at addr = 0x%s len = %d.\n",
+ OUTPUT_REG (vec, tdep->arg2),
+ tdep->size_iovec);
return -1;
}
tmpaddr
@@ -1712,11 +1712,11 @@ Do you want to stop the program?"),
nr * tdep->size_pointer))
{
if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading memory "
- "at addr = 0x%s len = %u.\n",
- OUTPUT_REG (tmpulongest, tdep->arg2),
- (int) (nr * tdep->size_pointer));
+ gdb_printf (gdb_stdlog,
+ "Process record: error reading memory "
+ "at addr = 0x%s len = %u.\n",
+ OUTPUT_REG (tmpulongest, tdep->arg2),
+ (int) (nr * tdep->size_pointer));
return -1;
}
for (i = 0; i < nr; i++)
@@ -2036,9 +2036,9 @@ Do you want to stop the program?"),
break;
default:
- fprintf_unfiltered (gdb_stderr,
- _("Process record and replay target doesn't "
- "support syscall number %d\n"), syscall);
+ gdb_printf (gdb_stderr,
+ _("Process record and replay target doesn't "
+ "support syscall number %d\n"), syscall);
return -1;
break;
}
diff --git a/gdb/linux-tdep.c b/gdb/linux-tdep.c
index b0056358cf9..4e728a06e7e 100644
--- a/gdb/linux-tdep.c
+++ b/gdb/linux-tdep.c
@@ -31,12 +31,12 @@
#include "inferior.h"
#include "cli/cli-utils.h"
#include "arch-utils.h"
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
#include "observable.h"
#include "objfiles.h"
#include "infcall.h"
#include "gdbcmd.h"
-#include "gdb_regex.h"
+#include "gdbsupport/gdb_regex.h"
#include "gdbsupport/enum-flags.h"
#include "gdbsupport/gdb_optional.h"
#include "gcore.h"
@@ -44,6 +44,7 @@
#include "solib-svr4.h"
#include <ctype.h>
+#include <unordered_map>
/* This enum represents the values that the user can choose when
informing the Linux kernel about which memory mappings will be
@@ -441,42 +442,55 @@ linux_core_pid_to_str (struct gdbarch *gdbarch, ptid_t ptid)
return normal_pid_to_str (ptid);
}
+/* Data from one mapping from /proc/PID/maps. */
+
+struct mapping
+{
+ ULONGEST addr;
+ ULONGEST endaddr;
+ gdb::string_view permissions;
+ ULONGEST offset;
+ gdb::string_view device;
+ ULONGEST inode;
+
+ /* This field is guaranteed to be NULL-terminated, hence it is not a
+ gdb::string_view. */
+ const char *filename;
+};
+
/* Service function for corefiles and info proc. */
-static void
-read_mapping (const char *line,
- ULONGEST *addr, ULONGEST *endaddr,
- const char **permissions, size_t *permissions_len,
- ULONGEST *offset,
- const char **device, size_t *device_len,
- ULONGEST *inode,
- const char **filename)
+static mapping
+read_mapping (const char *line)
{
+ struct mapping mapping;
const char *p = line;
- *addr = strtoulst (p, &p, 16);
+ mapping.addr = strtoulst (p, &p, 16);
if (*p == '-')
p++;
- *endaddr = strtoulst (p, &p, 16);
+ mapping.endaddr = strtoulst (p, &p, 16);
p = skip_spaces (p);
- *permissions = p;
+ const char *permissions_start = p;
while (*p && !isspace (*p))
p++;
- *permissions_len = p - *permissions;
+ mapping.permissions = {permissions_start, (size_t) (p - permissions_start)};
- *offset = strtoulst (p, &p, 16);
+ mapping.offset = strtoulst (p, &p, 16);
p = skip_spaces (p);
- *device = p;
+ const char *device_start = p;
while (*p && !isspace (*p))
p++;
- *device_len = p - *device;
+ mapping.device = {device_start, (size_t) (p - device_start)};
- *inode = strtoulst (p, &p, 10);
+ mapping.inode = strtoulst (p, &p, 10);
p = skip_spaces (p);
- *filename = p;
+ mapping.filename = p;
+
+ return mapping;
}
/* Helper function to decode the "VmFlags" field in /proc/PID/smaps.
@@ -824,7 +838,7 @@ linux_info_proc (struct gdbarch *gdbarch, const char *args,
if (args && args[0])
error (_("Too many parameters: %s"), args);
- printf_filtered (_("process %ld\n"), pid);
+ gdb_printf (_("process %ld\n"), pid);
if (cmdline_f)
{
xsnprintf (filename, sizeof filename, "/proc/%ld/cmdline", pid);
@@ -842,7 +856,7 @@ linux_info_proc (struct gdbarch *gdbarch, const char *args,
buffer[pos] = ' ';
}
buffer[len - 1] = '\0';
- printf_filtered ("cmdline = '%s'\n", buffer);
+ gdb_printf ("cmdline = '%s'\n", buffer);
}
else
warning (_("unable to open /proc file '%s'"), filename);
@@ -853,7 +867,7 @@ linux_info_proc (struct gdbarch *gdbarch, const char *args,
gdb::optional<std::string> contents
= target_fileio_readlink (NULL, filename, &target_errno);
if (contents.has_value ())
- printf_filtered ("cwd = '%s'\n", contents->c_str ());
+ gdb_printf ("cwd = '%s'\n", contents->c_str ());
else
warning (_("unable to read link '%s'"), filename);
}
@@ -863,7 +877,7 @@ linux_info_proc (struct gdbarch *gdbarch, const char *args,
gdb::optional<std::string> contents
= target_fileio_readlink (NULL, filename, &target_errno);
if (contents.has_value ())
- printf_filtered ("exe = '%s'\n", contents->c_str ());
+ gdb_printf ("exe = '%s'\n", contents->c_str ());
else
warning (_("unable to read link '%s'"), filename);
}
@@ -876,20 +890,18 @@ linux_info_proc (struct gdbarch *gdbarch, const char *args,
{
char *line;
- printf_filtered (_("Mapped address spaces:\n\n"));
+ gdb_printf (_("Mapped address spaces:\n\n"));
if (gdbarch_addr_bit (gdbarch) == 32)
{
- printf_filtered ("\t%10s %10s %10s %10s %s\n",
- "Start Addr",
- " End Addr",
- " Size", " Offset", "objfile");
+ gdb_printf ("\t%10s %10s %10s %10s %s %s\n",
+ "Start Addr", " End Addr", " Size",
+ " Offset", "Perms ", "objfile");
}
else
{
- printf_filtered (" %18s %18s %10s %10s %s\n",
- "Start Addr",
- " End Addr",
- " Size", " Offset", "objfile");
+ gdb_printf (" %18s %18s %10s %10s %s %s\n",
+ "Start Addr", " End Addr", " Size",
+ " Offset", "Perms ", "objfile");
}
char *saveptr;
@@ -897,32 +909,29 @@ linux_info_proc (struct gdbarch *gdbarch, const char *args,
line;
line = strtok_r (NULL, "\n", &saveptr))
{
- ULONGEST addr, endaddr, offset, inode;
- const char *permissions, *device, *mapping_filename;
- size_t permissions_len, device_len;
-
- read_mapping (line, &addr, &endaddr,
- &permissions, &permissions_len,
- &offset, &device, &device_len,
- &inode, &mapping_filename);
+ struct mapping m = read_mapping (line);
if (gdbarch_addr_bit (gdbarch) == 32)
{
- printf_filtered ("\t%10s %10s %10s %10s %s\n",
- paddress (gdbarch, addr),
- paddress (gdbarch, endaddr),
- hex_string (endaddr - addr),
- hex_string (offset),
- *mapping_filename ? mapping_filename : "");
+ gdb_printf ("\t%10s %10s %10s %10s %-5.*s %s\n",
+ paddress (gdbarch, m.addr),
+ paddress (gdbarch, m.endaddr),
+ hex_string (m.endaddr - m.addr),
+ hex_string (m.offset),
+ (int) m.permissions.size (),
+ m.permissions.data (),
+ m.filename);
}
else
{
- printf_filtered (" %18s %18s %10s %10s %s\n",
- paddress (gdbarch, addr),
- paddress (gdbarch, endaddr),
- hex_string (endaddr - addr),
- hex_string (offset),
- *mapping_filename ? mapping_filename : "");
+ gdb_printf (" %18s %18s %10s %10s %-5.*s %s\n",
+ paddress (gdbarch, m.addr),
+ paddress (gdbarch, m.endaddr),
+ hex_string (m.endaddr - m.addr),
+ hex_string (m.offset),
+ (int) m.permissions.size (),
+ m.permissions.data (),
+ m.filename);
}
}
}
@@ -935,7 +944,7 @@ linux_info_proc (struct gdbarch *gdbarch, const char *args,
gdb::unique_xmalloc_ptr<char> status
= target_fileio_read_stralloc (NULL, filename);
if (status)
- puts_filtered (status.get ());
+ gdb_puts (status.get ());
else
warning (_("unable to open /proc file '%s'"), filename);
}
@@ -948,8 +957,8 @@ linux_info_proc (struct gdbarch *gdbarch, const char *args,
{
const char *p = statstr.get ();
- printf_filtered (_("Process: %s\n"),
- pulongest (strtoulst (p, &p, 10)));
+ gdb_printf (_("Process: %s\n"),
+ pulongest (strtoulst (p, &p, 10)));
p = skip_spaces (p);
if (*p == '(')
@@ -959,117 +968,117 @@ linux_info_proc (struct gdbarch *gdbarch, const char *args,
const char *ep = strrchr (p, ')');
if (ep != NULL)
{
- printf_filtered ("Exec file: %.*s\n",
- (int) (ep - p - 1), p + 1);
+ gdb_printf ("Exec file: %.*s\n",
+ (int) (ep - p - 1), p + 1);
p = ep + 1;
}
}
p = skip_spaces (p);
if (*p)
- printf_filtered (_("State: %c\n"), *p++);
+ gdb_printf (_("State: %c\n"), *p++);
if (*p)
- printf_filtered (_("Parent process: %s\n"),
- pulongest (strtoulst (p, &p, 10)));
+ gdb_printf (_("Parent process: %s\n"),
+ pulongest (strtoulst (p, &p, 10)));
if (*p)
- printf_filtered (_("Process group: %s\n"),
- pulongest (strtoulst (p, &p, 10)));
+ gdb_printf (_("Process group: %s\n"),
+ pulongest (strtoulst (p, &p, 10)));
if (*p)
- printf_filtered (_("Session id: %s\n"),
- pulongest (strtoulst (p, &p, 10)));
+ gdb_printf (_("Session id: %s\n"),
+ pulongest (strtoulst (p, &p, 10)));
if (*p)
- printf_filtered (_("TTY: %s\n"),
- pulongest (strtoulst (p, &p, 10)));
+ gdb_printf (_("TTY: %s\n"),
+ pulongest (strtoulst (p, &p, 10)));
if (*p)
- printf_filtered (_("TTY owner process group: %s\n"),
- pulongest (strtoulst (p, &p, 10)));
+ gdb_printf (_("TTY owner process group: %s\n"),
+ pulongest (strtoulst (p, &p, 10)));
if (*p)
- printf_filtered (_("Flags: %s\n"),
- hex_string (strtoulst (p, &p, 10)));
+ gdb_printf (_("Flags: %s\n"),
+ hex_string (strtoulst (p, &p, 10)));
if (*p)
- printf_filtered (_("Minor faults (no memory page): %s\n"),
- pulongest (strtoulst (p, &p, 10)));
+ gdb_printf (_("Minor faults (no memory page): %s\n"),
+ pulongest (strtoulst (p, &p, 10)));
if (*p)
- printf_filtered (_("Minor faults, children: %s\n"),
- pulongest (strtoulst (p, &p, 10)));
+ gdb_printf (_("Minor faults, children: %s\n"),
+ pulongest (strtoulst (p, &p, 10)));
if (*p)
- printf_filtered (_("Major faults (memory page faults): %s\n"),
- pulongest (strtoulst (p, &p, 10)));
+ gdb_printf (_("Major faults (memory page faults): %s\n"),
+ pulongest (strtoulst (p, &p, 10)));
if (*p)
- printf_filtered (_("Major faults, children: %s\n"),
- pulongest (strtoulst (p, &p, 10)));
+ gdb_printf (_("Major faults, children: %s\n"),
+ pulongest (strtoulst (p, &p, 10)));
if (*p)
- printf_filtered (_("utime: %s\n"),
- pulongest (strtoulst (p, &p, 10)));
+ gdb_printf (_("utime: %s\n"),
+ pulongest (strtoulst (p, &p, 10)));
if (*p)
- printf_filtered (_("stime: %s\n"),
- pulongest (strtoulst (p, &p, 10)));
+ gdb_printf (_("stime: %s\n"),
+ pulongest (strtoulst (p, &p, 10)));
if (*p)
- printf_filtered (_("utime, children: %s\n"),
- pulongest (strtoulst (p, &p, 10)));
+ gdb_printf (_("utime, children: %s\n"),
+ pulongest (strtoulst (p, &p, 10)));
if (*p)
- printf_filtered (_("stime, children: %s\n"),
- pulongest (strtoulst (p, &p, 10)));
+ gdb_printf (_("stime, children: %s\n"),
+ pulongest (strtoulst (p, &p, 10)));
if (*p)
- printf_filtered (_("jiffies remaining in current "
- "time slice: %s\n"),
- pulongest (strtoulst (p, &p, 10)));
+ gdb_printf (_("jiffies remaining in current "
+ "time slice: %s\n"),
+ pulongest (strtoulst (p, &p, 10)));
if (*p)
- printf_filtered (_("'nice' value: %s\n"),
- pulongest (strtoulst (p, &p, 10)));
+ gdb_printf (_("'nice' value: %s\n"),
+ pulongest (strtoulst (p, &p, 10)));
if (*p)
- printf_filtered (_("jiffies until next timeout: %s\n"),
- pulongest (strtoulst (p, &p, 10)));
+ gdb_printf (_("jiffies until next timeout: %s\n"),
+ pulongest (strtoulst (p, &p, 10)));
if (*p)
- printf_filtered (_("jiffies until next SIGALRM: %s\n"),
- pulongest (strtoulst (p, &p, 10)));
+ gdb_printf (_("jiffies until next SIGALRM: %s\n"),
+ pulongest (strtoulst (p, &p, 10)));
if (*p)
- printf_filtered (_("start time (jiffies since "
- "system boot): %s\n"),
- pulongest (strtoulst (p, &p, 10)));
+ gdb_printf (_("start time (jiffies since "
+ "system boot): %s\n"),
+ pulongest (strtoulst (p, &p, 10)));
if (*p)
- printf_filtered (_("Virtual memory size: %s\n"),
- pulongest (strtoulst (p, &p, 10)));
+ gdb_printf (_("Virtual memory size: %s\n"),
+ pulongest (strtoulst (p, &p, 10)));
if (*p)
- printf_filtered (_("Resident set size: %s\n"),
- pulongest (strtoulst (p, &p, 10)));
+ gdb_printf (_("Resident set size: %s\n"),
+ pulongest (strtoulst (p, &p, 10)));
if (*p)
- printf_filtered (_("rlim: %s\n"),
- pulongest (strtoulst (p, &p, 10)));
+ gdb_printf (_("rlim: %s\n"),
+ pulongest (strtoulst (p, &p, 10)));
if (*p)
- printf_filtered (_("Start of text: %s\n"),
- hex_string (strtoulst (p, &p, 10)));
+ gdb_printf (_("Start of text: %s\n"),
+ hex_string (strtoulst (p, &p, 10)));
if (*p)
- printf_filtered (_("End of text: %s\n"),
- hex_string (strtoulst (p, &p, 10)));
+ gdb_printf (_("End of text: %s\n"),
+ hex_string (strtoulst (p, &p, 10)));
if (*p)
- printf_filtered (_("Start of stack: %s\n"),
- hex_string (strtoulst (p, &p, 10)));
+ gdb_printf (_("Start of stack: %s\n"),
+ hex_string (strtoulst (p, &p, 10)));
#if 0 /* Don't know how architecture-dependent the rest is...
Anyway the signal bitmap info is available from "status". */
if (*p)
- printf_filtered (_("Kernel stack pointer: %s\n"),
- hex_string (strtoulst (p, &p, 10)));
+ gdb_printf (_("Kernel stack pointer: %s\n"),
+ hex_string (strtoulst (p, &p, 10)));
if (*p)
- printf_filtered (_("Kernel instr pointer: %s\n"),
- hex_string (strtoulst (p, &p, 10)));
+ gdb_printf (_("Kernel instr pointer: %s\n"),
+ hex_string (strtoulst (p, &p, 10)));
if (*p)
- printf_filtered (_("Pending signals bitmap: %s\n"),
- hex_string (strtoulst (p, &p, 10)));
+ gdb_printf (_("Pending signals bitmap: %s\n"),
+ hex_string (strtoulst (p, &p, 10)));
if (*p)
- printf_filtered (_("Blocked signals bitmap: %s\n"),
- hex_string (strtoulst (p, &p, 10)));
+ gdb_printf (_("Blocked signals bitmap: %s\n"),
+ hex_string (strtoulst (p, &p, 10)));
if (*p)
- printf_filtered (_("Ignored signals bitmap: %s\n"),
- hex_string (strtoulst (p, &p, 10)));
+ gdb_printf (_("Ignored signals bitmap: %s\n"),
+ hex_string (strtoulst (p, &p, 10)));
if (*p)
- printf_filtered (_("Catched signals bitmap: %s\n"),
- hex_string (strtoulst (p, &p, 10)));
+ gdb_printf (_("Catched signals bitmap: %s\n"),
+ hex_string (strtoulst (p, &p, 10)));
if (*p)
- printf_filtered (_("wchan (system call): %s\n"),
- hex_string (strtoulst (p, &p, 10)));
+ gdb_printf (_("wchan (system call): %s\n"),
+ hex_string (strtoulst (p, &p, 10)));
#endif
}
else
@@ -1177,6 +1186,22 @@ linux_read_core_file_mappings
if (f != descend)
warning (_("malformed note - filename area is too big"));
+ const bfd_build_id *orig_build_id = cbfd->build_id;
+ std::unordered_map<ULONGEST, const bfd_build_id *> vma_map;
+
+ /* Search for solib build-ids in the core file. Each time one is found,
+ map the start vma of the corresponding elf header to the build-id. */
+ for (bfd_section *sec = cbfd->sections; sec != nullptr; sec = sec->next)
+ {
+ cbfd->build_id = nullptr;
+
+ if (sec->flags & SEC_LOAD
+ && (get_elf_backend_data (cbfd)->elf_backend_core_find_build_id
+ (cbfd, (bfd_vma) sec->filepos)))
+ vma_map[sec->vma] = cbfd->build_id;
+ }
+
+ cbfd->build_id = orig_build_id;
pre_loop_cb (count);
for (int i = 0; i < count; i++)
@@ -1190,8 +1215,13 @@ linux_read_core_file_mappings
descdata += addr_size;
char * filename = filenames;
filenames += strlen ((char *) filenames) + 1;
+ const bfd_build_id *build_id = nullptr;
+ auto vma_map_it = vma_map.find (start);
- loop_cb (i, start, end, file_ofs, filename, nullptr);
+ if (vma_map_it != vma_map.end ())
+ build_id = vma_map_it->second;
+
+ loop_cb (i, start, end, file_ofs, filename, build_id);
}
}
@@ -1203,39 +1233,39 @@ linux_core_info_proc_mappings (struct gdbarch *gdbarch, const char *args)
linux_read_core_file_mappings (gdbarch, core_bfd,
[=] (ULONGEST count)
{
- printf_filtered (_("Mapped address spaces:\n\n"));
+ gdb_printf (_("Mapped address spaces:\n\n"));
if (gdbarch_addr_bit (gdbarch) == 32)
{
- printf_filtered ("\t%10s %10s %10s %10s %s\n",
- "Start Addr",
- " End Addr",
- " Size", " Offset", "objfile");
+ gdb_printf ("\t%10s %10s %10s %10s %s\n",
+ "Start Addr",
+ " End Addr",
+ " Size", " Offset", "objfile");
}
else
{
- printf_filtered (" %18s %18s %10s %10s %s\n",
- "Start Addr",
- " End Addr",
- " Size", " Offset", "objfile");
+ gdb_printf (" %18s %18s %10s %10s %s\n",
+ "Start Addr",
+ " End Addr",
+ " Size", " Offset", "objfile");
}
},
[=] (int num, ULONGEST start, ULONGEST end, ULONGEST file_ofs,
const char *filename, const bfd_build_id *build_id)
{
if (gdbarch_addr_bit (gdbarch) == 32)
- printf_filtered ("\t%10s %10s %10s %10s %s\n",
- paddress (gdbarch, start),
- paddress (gdbarch, end),
- hex_string (end - start),
- hex_string (file_ofs),
- filename);
+ gdb_printf ("\t%10s %10s %10s %10s %s\n",
+ paddress (gdbarch, start),
+ paddress (gdbarch, end),
+ hex_string (end - start),
+ hex_string (file_ofs),
+ filename);
else
- printf_filtered (" %18s %18s %10s %10s %s\n",
- paddress (gdbarch, start),
- paddress (gdbarch, end),
- hex_string (end - start),
- hex_string (file_ofs),
- filename);
+ gdb_printf (" %18s %18s %10s %10s %s\n",
+ paddress (gdbarch, start),
+ paddress (gdbarch, end),
+ hex_string (end - start),
+ hex_string (file_ofs),
+ filename);
});
}
@@ -1254,7 +1284,7 @@ linux_core_info_proc (struct gdbarch *gdbarch, const char *args,
exe = bfd_core_file_failing_command (core_bfd);
if (exe != NULL)
- printf_filtered ("exe = '%s'\n", exe);
+ gdb_printf ("exe = '%s'\n", exe);
else
warning (_("unable to find command name in core file"));
}
@@ -1322,19 +1352,15 @@ parse_smaps_data (const char *data,
while (line != NULL)
{
- ULONGEST addr, endaddr, offset, inode;
- const char *permissions, *device, *filename;
struct smaps_vmflags v;
- size_t permissions_len, device_len;
int read, write, exec, priv;
int has_anonymous = 0;
int mapping_anon_p;
int mapping_file_p;
memset (&v, 0, sizeof (v));
- read_mapping (line, &addr, &endaddr, &permissions, &permissions_len,
- &offset, &device, &device_len, &inode, &filename);
- mapping_anon_p = mapping_is_anonymous_p (filename);
+ struct mapping m = read_mapping (line);
+ mapping_anon_p = mapping_is_anonymous_p (m.filename);
/* If the mapping is not anonymous, then we can consider it
to be file-backed. These two states (anonymous or
file-backed) seem to be exclusive, but they can actually
@@ -1347,9 +1373,12 @@ parse_smaps_data (const char *data,
mapping_file_p = !mapping_anon_p;
/* Decode permissions. */
- read = (memchr (permissions, 'r', permissions_len) != 0);
- write = (memchr (permissions, 'w', permissions_len) != 0);
- exec = (memchr (permissions, 'x', permissions_len) != 0);
+ auto has_perm = [&m] (char c)
+ { return m.permissions.find (c) != gdb::string_view::npos; };
+ read = has_perm ('r');
+ write = has_perm ('w');
+ exec = has_perm ('x');
+
/* 'private' here actually means VM_MAYSHARE, and not
VM_SHARED. In order to know if a mapping is really
private or not, we must check the flag "sh" in the
@@ -1359,7 +1388,7 @@ parse_smaps_data (const char *data,
not have the VmFlags there. In this case, there is
really no way to know if we are dealing with VM_SHARED,
so we just assume that VM_MAYSHARE is enough. */
- priv = memchr (permissions, 'p', permissions_len) != 0;
+ priv = has_perm ('p');
/* Try to detect if region should be dumped by parsing smaps
counters. */
@@ -1421,9 +1450,9 @@ parse_smaps_data (const char *data,
/* Save the smaps entry to the vector. */
struct smaps_data map;
- map.start_address = addr;
- map.end_address = endaddr;
- map.filename = filename;
+ map.start_address = m.addr;
+ map.end_address = m.endaddr;
+ map.filename = m.filename;
map.vmflags = v;
map.read = read? true : false;
map.write = write? true : false;
@@ -1432,8 +1461,8 @@ parse_smaps_data (const char *data,
map.has_anonymous = has_anonymous;
map.mapping_anon_p = mapping_anon_p? true : false;
map.mapping_file_p = mapping_file_p? true : false;
- map.offset = offset;
- map.inode = inode;
+ map.offset = m.offset;
+ map.inode = m.inode;
smaps.emplace_back (map);
}
@@ -2630,8 +2659,8 @@ static void
show_use_coredump_filter (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Use of /proc/PID/coredump_filter file to generate"
- " corefiles is %s.\n"), value);
+ gdb_printf (file, _("Use of /proc/PID/coredump_filter file to generate"
+ " corefiles is %s.\n"), value);
}
/* Display whether the gcore command is dumping mappings marked with
@@ -2641,8 +2670,8 @@ static void
show_dump_excluded_mappings (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Dumping of mappings marked with the VM_DONTDUMP"
- " flag is %s.\n"), value);
+ gdb_printf (file, _("Dumping of mappings marked with the VM_DONTDUMP"
+ " flag is %s.\n"), value);
}
/* To be called from the various GDB_OSABI_LINUX handlers for the
diff --git a/gdb/linux-thread-db.c b/gdb/linux-thread-db.c
index a0cfeb1685b..11da82a1abc 100644
--- a/gdb/linux-thread-db.c
+++ b/gdb/linux-thread-db.c
@@ -126,9 +126,9 @@ static void
show_auto_load_thread_db (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Auto-loading of inferior specific libthread_db "
- "is %s.\n"),
- value);
+ gdb_printf (file, _("Auto-loading of inferior specific libthread_db "
+ "is %s.\n"),
+ value);
}
static void
@@ -147,7 +147,7 @@ static void
show_libthread_db_debug (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("libthread-db debugging is %s.\n"), value);
+ gdb_printf (file, _("libthread-db debugging is %s.\n"), value);
}
/* If we're running on GNU/Linux, we must explicitly attach to any new
@@ -474,7 +474,7 @@ inferior_has_bug (const char *ver_symbol, int ver_major_min, int ver_minor_min)
if (version_msym.minsym == NULL)
return 0;
- version_addr = BMSYMBOL_VALUE_ADDRESS (version_msym);
+ version_addr = version_msym.value_address ();
gdb::unique_xmalloc_ptr<char> version
= target_read_string (version_addr, 32, &got);
if (version != nullptr
@@ -778,7 +778,7 @@ check_thread_db (struct thread_db_info *info, bool log_progress)
catch (const gdb_exception_error &except)
{
if (warning_pre_print)
- fputs_unfiltered (warning_pre_print, gdb_stderr);
+ gdb_puts (warning_pre_print, gdb_stderr);
exception_fprintf (gdb_stderr, except,
_("libthread_db integrity checks failed: "));
@@ -861,8 +861,8 @@ try_thread_db_load_1 (struct thread_db_info *info)
if (err != TD_OK)
{
if (libthread_db_debug)
- fprintf_unfiltered (gdb_stdlog, _("td_ta_new failed: %s\n"),
- thread_db_err_str (err));
+ gdb_printf (gdb_stdlog, _("td_ta_new failed: %s\n"),
+ thread_db_err_str (err));
else
switch (err)
{
@@ -936,25 +936,18 @@ try_thread_db_load_1 (struct thread_db_info *info)
return false;
}
- printf_unfiltered (_("[Thread debugging using libthread_db enabled]\n"));
+ gdb_printf (_("[Thread debugging using libthread_db enabled]\n"));
if (!libthread_db_search_path.empty () || libthread_db_debug)
{
- struct ui_file *file;
const char *library;
library = dladdr_to_soname ((const void *) *info->td_ta_new_p);
if (library == NULL)
library = LIBTHREAD_DB_SO;
- /* If we'd print this to gdb_stdout when debug output is
- disabled, still print it to gdb_stdout if debug output is
- enabled. User visible output should not depend on debug
- settings. */
- file = !libthread_db_search_path.empty () ? gdb_stdout : gdb_stdlog;
- fprintf_unfiltered (file,
- _("Using host libthread_db library \"%ps\".\n"),
- styled_string (file_name_style.style (), library));
+ gdb_printf (_("Using host libthread_db library \"%ps\".\n"),
+ styled_string (file_name_style.style (), library));
}
/* The thread library was detected. Activate the thread_db target
@@ -973,9 +966,9 @@ try_thread_db_load (const char *library, bool check_auto_load_safe)
struct thread_db_info *info;
if (libthread_db_debug)
- fprintf_unfiltered (gdb_stdlog,
- _("Trying host libthread_db library: %s.\n"),
- library);
+ gdb_printf (gdb_stdlog,
+ _("Trying host libthread_db library: %s.\n"),
+ library);
if (check_auto_load_safe)
{
@@ -984,8 +977,8 @@ try_thread_db_load (const char *library, bool check_auto_load_safe)
/* Do not print warnings by file_is_auto_load_safe if the library does
not exist at this place. */
if (libthread_db_debug)
- fprintf_unfiltered (gdb_stdlog, _("open failed: %s.\n"),
- safe_strerror (errno));
+ gdb_printf (gdb_stdlog, _("open failed: %s.\n"),
+ safe_strerror (errno));
return false;
}
@@ -1001,7 +994,7 @@ try_thread_db_load (const char *library, bool check_auto_load_safe)
if (handle == NULL)
{
if (libthread_db_debug)
- fprintf_unfiltered (gdb_stdlog, _("dlopen failed: %s.\n"), dlerror ());
+ gdb_printf (gdb_stdlog, _("dlopen failed: %s.\n"), dlerror ());
return false;
}
@@ -1015,8 +1008,8 @@ try_thread_db_load (const char *library, bool check_auto_load_safe)
const char *const libpath = dladdr_to_soname (td_init);
if (libpath != NULL)
- fprintf_unfiltered (gdb_stdlog, _("Host %s resolved to: %s.\n"),
- library, libpath);
+ gdb_printf (gdb_stdlog, _("Host %s resolved to: %s.\n"),
+ library, libpath);
}
}
@@ -1184,8 +1177,8 @@ thread_db_load_search (void)
}
if (libthread_db_debug)
- fprintf_unfiltered (gdb_stdlog,
- _("thread_db_load_search returning %d\n"), rc);
+ gdb_printf (gdb_stdlog,
+ _("thread_db_load_search returning %d\n"), rc);
return rc;
}
@@ -1485,10 +1478,10 @@ find_new_threads_callback (const td_thrhandle_t *th_p, void *data)
terminated and joined threads with kernel thread ID -1. See
glibc PR17707. */
if (libthread_db_debug)
- fprintf_unfiltered (gdb_stdlog,
- "thread_db: skipping exited and "
- "joined thread (0x%lx)\n",
- (unsigned long) ti.ti_tid);
+ gdb_printf (gdb_stdlog,
+ "thread_db: skipping exited and "
+ "joined thread (0x%lx)\n",
+ (unsigned long) ti.ti_tid);
return 0;
}
@@ -1563,9 +1556,9 @@ find_new_threads_once (struct thread_db_info *info, int iteration,
if (libthread_db_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- _("Found %d new threads in iteration %d.\n"),
- data.new_threads, iteration);
+ gdb_printf (gdb_stdlog,
+ _("Found %d new threads in iteration %d.\n"),
+ data.new_threads, iteration);
}
if (errp != NULL)
@@ -1951,7 +1944,8 @@ info_auto_load_libthread_db (const char *args, int from_tty)
ui_out_emit_tuple tuple_emitter (uiout, NULL);
info = array[i];
- uiout->field_string ("filename", info->filename);
+ uiout->field_string ("filename", info->filename,
+ file_name_style.style ());
std::string pids;
while (i < array.size () && strcmp (info->filename,
diff --git a/gdb/lm32-tdep.c b/gdb/lm32-tdep.c
index cb516e846f4..4a781c394e9 100644
--- a/gdb/lm32-tdep.c
+++ b/gdb/lm32-tdep.c
@@ -59,21 +59,11 @@ struct lm32_frame_cache
trad_frame_saved_reg *saved_regs;
};
-/* Add the available register groups. */
-
-static void
-lm32_add_reggroups (struct gdbarch *gdbarch)
-{
- reggroup_add (gdbarch, general_reggroup);
- reggroup_add (gdbarch, all_reggroup);
- reggroup_add (gdbarch, system_reggroup);
-}
-
/* Return whether a given register is in a given group. */
static int
lm32_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
- struct reggroup *group)
+ const struct reggroup *group)
{
if (group == general_reggroup)
return ((regnum >= SIM_LM32_R0_REGNUM) && (regnum <= SIM_LM32_RA_REGNUM))
@@ -540,7 +530,6 @@ lm32_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
set_gdbarch_push_dummy_call (gdbarch, lm32_push_dummy_call);
set_gdbarch_return_value (gdbarch, lm32_return_value);
- lm32_add_reggroups (gdbarch);
set_gdbarch_register_reggroup_p (gdbarch, lm32_register_reggroup_p);
return gdbarch;
diff --git a/gdb/location.c b/gdb/location.c
index 45f1d59ad81..0459980ab8c 100644
--- a/gdb/location.c
+++ b/gdb/location.c
@@ -29,39 +29,262 @@
#include <ctype.h>
#include <string.h>
-/* An event location used to set a stop event in the inferior.
- This structure is an amalgam of the various ways
- to specify where a stop event should be set. */
+static std::string explicit_location_to_string
+ (const struct explicit_location *explicit_loc);
+
+/* The base class for all an event locations used to set a stop event
+ in the inferior. */
struct event_location
{
+ virtual ~event_location () = default;
+
+ /* Clone this object. */
+ virtual event_location_up clone () const = 0;
+
+ /* Return true if this location is empty, false otherwise. */
+ virtual bool empty_p () const = 0;
+
+ /* Return a string representation of this location. */
+ const char *to_string () const
+ {
+ if (as_string.empty ())
+ as_string = compute_string ();
+ if (as_string.empty ())
+ return nullptr;
+ return as_string.c_str ();
+ }
+
+ DISABLE_COPY_AND_ASSIGN (event_location);
+
/* The type of this breakpoint specification. */
enum event_location_type type;
-#define EL_TYPE(P) (P)->type
- union
+ /* Cached string representation of this location. This is used,
+ e.g., to save stop event locations to file. */
+ mutable std::string as_string;
+
+protected:
+
+ explicit event_location (enum event_location_type t)
+ : type (t)
+ {
+ }
+
+ event_location (enum event_location_type t, std::string &&str)
+ : type (t),
+ as_string (std::move (str))
+ {
+ }
+
+ explicit event_location (const event_location *to_clone)
+ : type (to_clone->type),
+ as_string (to_clone->as_string)
+ {
+ }
+
+ /* Compute the string representation of this object. This is called
+ by to_string when needed. */
+ virtual std::string compute_string () const = 0;
+};
+
+/* A probe. */
+struct event_location_probe : public event_location
+{
+ explicit event_location_probe (std::string &&probe)
+ : event_location (PROBE_LOCATION, std::move (probe))
+ {
+ }
+
+ event_location_up clone () const override
+ {
+ return event_location_up (new event_location_probe (this));
+ }
+
+ bool empty_p () const override
+ {
+ return false;
+ }
+
+protected:
+
+ explicit event_location_probe (const event_location_probe *to_clone)
+ : event_location (to_clone)
+ {
+ }
+
+ std::string compute_string () const override
+ {
+ return std::move (as_string);
+ }
+};
+
+/* A "normal" linespec. */
+struct event_location_linespec : public event_location
+{
+ event_location_linespec (const char **linespec,
+ symbol_name_match_type match_type)
+ : event_location (LINESPEC_LOCATION)
+ {
+ linespec_location.match_type = match_type;
+ if (*linespec != NULL)
+ {
+ const char *p;
+ const char *orig = *linespec;
+
+ linespec_lex_to_end (linespec);
+ p = remove_trailing_whitespace (orig, *linespec);
+
+ /* If there is no valid linespec then this will leave the
+ spec_string as nullptr. This behaviour is relied on in the
+ breakpoint setting code, where spec_string being nullptr means
+ to use the default breakpoint location. */
+ if ((p - orig) > 0)
+ linespec_location.spec_string = savestring (orig, p - orig);
+ }
+ }
+
+ ~event_location_linespec ()
+ {
+ xfree (linespec_location.spec_string);
+ }
+
+ event_location_up clone () const override
{
- /* A probe. */
- char *addr_string;
-#define EL_PROBE(P) ((P)->u.addr_string)
-
- /* A "normal" linespec. */
- struct linespec_location linespec_location;
-#define EL_LINESPEC(P) (&(P)->u.linespec_location)
-
- /* An address in the inferior. */
- CORE_ADDR address;
-#define EL_ADDRESS(P) (P)->u.address
-
- /* An explicit location. */
- struct explicit_location explicit_loc;
-#define EL_EXPLICIT(P) (&((P)->u.explicit_loc))
- } u;
-
- /* Cached string representation of this location. This is used, e.g., to
- save stop event locations to file. Malloc'd. */
- char *as_string;
-#define EL_STRING(P) ((P)->as_string)
+ return event_location_up (new event_location_linespec (this));
+ }
+
+ bool empty_p () const override
+ {
+ return false;
+ }
+
+ struct linespec_location linespec_location {};
+
+protected:
+
+ explicit event_location_linespec (const event_location_linespec *to_clone)
+ : event_location (to_clone),
+ linespec_location (to_clone->linespec_location)
+ {
+ if (linespec_location.spec_string != nullptr)
+ linespec_location.spec_string = xstrdup (linespec_location.spec_string);
+ }
+
+ std::string compute_string () const override
+ {
+ if (linespec_location.spec_string != nullptr)
+ {
+ const struct linespec_location *ls = &linespec_location;
+ if (ls->match_type == symbol_name_match_type::FULL)
+ return std::string ("-qualified ") + ls->spec_string;
+ else
+ return ls->spec_string;
+ }
+ return {};
+ }
+};
+
+/* An address in the inferior. */
+struct event_location_address : public event_location
+{
+ event_location_address (CORE_ADDR addr, const char *addr_string,
+ int addr_string_len)
+ : event_location (ADDRESS_LOCATION),
+ address (addr)
+ {
+ if (addr_string != nullptr)
+ as_string = std::string (addr_string, addr_string_len);
+ }
+
+ event_location_up clone () const override
+ {
+ return event_location_up (new event_location_address (this));
+ }
+
+ bool empty_p () const override
+ {
+ return false;
+ }
+
+ CORE_ADDR address;
+
+protected:
+
+ event_location_address (const event_location_address *to_clone)
+ : event_location (to_clone),
+ address (to_clone->address)
+ {
+ }
+
+ std::string compute_string () const override
+ {
+ const char *addr_string = core_addr_to_string (address);
+ return std::string ("*") + addr_string;
+ }
+};
+
+/* An explicit location. */
+struct event_location_explicit : public event_location
+{
+ explicit event_location_explicit (const struct explicit_location *loc)
+ : event_location (EXPLICIT_LOCATION)
+ {
+ copy_loc (loc);
+ }
+
+ ~event_location_explicit ()
+ {
+ xfree (explicit_loc.source_filename);
+ xfree (explicit_loc.function_name);
+ xfree (explicit_loc.label_name);
+ }
+
+ event_location_up clone () const override
+ {
+ return event_location_up (new event_location_explicit (this));
+ }
+
+ bool empty_p () const override
+ {
+ return (explicit_loc.source_filename == nullptr
+ && explicit_loc.function_name == nullptr
+ && explicit_loc.label_name == nullptr
+ && explicit_loc.line_offset.sign == LINE_OFFSET_UNKNOWN);
+ }
+
+ struct explicit_location explicit_loc;
+
+protected:
+
+ explicit event_location_explicit (const event_location_explicit *to_clone)
+ : event_location (to_clone)
+ {
+ copy_loc (&to_clone->explicit_loc);
+ }
+
+ std::string compute_string () const override
+ {
+ return explicit_location_to_string (&explicit_loc);
+ }
+
+private:
+
+ void copy_loc (const struct explicit_location *loc)
+ {
+ initialize_explicit_location (&explicit_loc);
+ if (loc != nullptr)
+ {
+ explicit_loc.func_name_match_type = loc->func_name_match_type;
+ if (loc->source_filename != nullptr)
+ explicit_loc.source_filename = xstrdup (loc->source_filename);
+ if (loc->function_name != nullptr)
+ explicit_loc.function_name = xstrdup (loc->function_name);
+ if (loc->label_name != nullptr)
+ explicit_loc.label_name = xstrdup (loc->label_name);
+ explicit_loc.line_offset = loc->line_offset;
+ }
+ }
};
/* See description in location.h. */
@@ -69,7 +292,7 @@ struct event_location
enum event_location_type
event_location_type (const struct event_location *location)
{
- return EL_TYPE (location);
+ return location->type;
}
/* See description in location.h. */
@@ -88,22 +311,8 @@ event_location_up
new_linespec_location (const char **linespec,
symbol_name_match_type match_type)
{
- struct event_location *location;
-
- location = XCNEW (struct event_location);
- EL_TYPE (location) = LINESPEC_LOCATION;
- EL_LINESPEC (location)->match_type = match_type;
- if (*linespec != NULL)
- {
- const char *p;
- const char *orig = *linespec;
-
- linespec_lex_to_end (linespec);
- p = remove_trailing_whitespace (orig, *linespec);
- if ((p - orig) > 0)
- EL_LINESPEC (location)->spec_string = savestring (orig, p - orig);
- }
- return event_location_up (location);
+ return event_location_up (new event_location_linespec (linespec,
+ match_type));
}
/* See description in location.h. */
@@ -111,8 +320,8 @@ new_linespec_location (const char **linespec,
const linespec_location *
get_linespec_location (const struct event_location *location)
{
- gdb_assert (EL_TYPE (location) == LINESPEC_LOCATION);
- return EL_LINESPEC (location);
+ gdb_assert (location->type == LINESPEC_LOCATION);
+ return &((event_location_linespec *) location)->linespec_location;
}
/* See description in location.h. */
@@ -121,14 +330,8 @@ event_location_up
new_address_location (CORE_ADDR addr, const char *addr_string,
int addr_string_len)
{
- struct event_location *location;
-
- location = XCNEW (struct event_location);
- EL_TYPE (location) = ADDRESS_LOCATION;
- EL_ADDRESS (location) = addr;
- if (addr_string != NULL)
- EL_STRING (location) = xstrndup (addr_string, addr_string_len);
- return event_location_up (location);
+ return event_location_up (new event_location_address (addr, addr_string,
+ addr_string_len));
}
/* See description in location.h. */
@@ -136,8 +339,8 @@ new_address_location (CORE_ADDR addr, const char *addr_string,
CORE_ADDR
get_address_location (const struct event_location *location)
{
- gdb_assert (EL_TYPE (location) == ADDRESS_LOCATION);
- return EL_ADDRESS (location);
+ gdb_assert (location->type == ADDRESS_LOCATION);
+ return ((event_location_address *) location)->address;
}
/* See description in location.h. */
@@ -145,22 +348,16 @@ get_address_location (const struct event_location *location)
const char *
get_address_string_location (const struct event_location *location)
{
- gdb_assert (EL_TYPE (location) == ADDRESS_LOCATION);
- return EL_STRING (location);
+ gdb_assert (location->type == ADDRESS_LOCATION);
+ return location->to_string ();
}
/* See description in location.h. */
event_location_up
-new_probe_location (const char *probe)
+new_probe_location (std::string &&probe)
{
- struct event_location *location;
-
- location = XCNEW (struct event_location);
- EL_TYPE (location) = PROBE_LOCATION;
- if (probe != NULL)
- EL_PROBE (location) = xstrdup (probe);
- return event_location_up (location);
+ return event_location_up (new event_location_probe (std::move (probe)));
}
/* See description in location.h. */
@@ -168,8 +365,8 @@ new_probe_location (const char *probe)
const char *
get_probe_location (const struct event_location *location)
{
- gdb_assert (EL_TYPE (location) == PROBE_LOCATION);
- return EL_PROBE (location);
+ gdb_assert (location->type == PROBE_LOCATION);
+ return location->to_string ();
}
/* See description in location.h. */
@@ -177,34 +374,7 @@ get_probe_location (const struct event_location *location)
event_location_up
new_explicit_location (const struct explicit_location *explicit_loc)
{
- struct event_location tmp;
-
- memset (&tmp, 0, sizeof (struct event_location));
- EL_TYPE (&tmp) = EXPLICIT_LOCATION;
- initialize_explicit_location (EL_EXPLICIT (&tmp));
- if (explicit_loc != NULL)
- {
- EL_EXPLICIT (&tmp)->func_name_match_type
- = explicit_loc->func_name_match_type;
-
- if (explicit_loc->source_filename != NULL)
- {
- EL_EXPLICIT (&tmp)->source_filename
- = explicit_loc->source_filename;
- }
-
- if (explicit_loc->function_name != NULL)
- EL_EXPLICIT (&tmp)->function_name
- = explicit_loc->function_name;
-
- if (explicit_loc->label_name != NULL)
- EL_EXPLICIT (&tmp)->label_name = explicit_loc->label_name;
-
- if (explicit_loc->line_offset.sign != LINE_OFFSET_UNKNOWN)
- EL_EXPLICIT (&tmp)->line_offset = explicit_loc->line_offset;
- }
-
- return copy_event_location (&tmp);
+ return event_location_up (new event_location_explicit (explicit_loc));
}
/* See description in location.h. */
@@ -212,8 +382,8 @@ new_explicit_location (const struct explicit_location *explicit_loc)
struct explicit_location *
get_explicit_location (struct event_location *location)
{
- gdb_assert (EL_TYPE (location) == EXPLICIT_LOCATION);
- return EL_EXPLICIT (location);
+ gdb_assert (location->type == EXPLICIT_LOCATION);
+ return &((event_location_explicit *) location)->explicit_loc;
}
/* See description in location.h. */
@@ -221,21 +391,21 @@ get_explicit_location (struct event_location *location)
const struct explicit_location *
get_explicit_location_const (const struct event_location *location)
{
- gdb_assert (EL_TYPE (location) == EXPLICIT_LOCATION);
- return EL_EXPLICIT (location);
+ gdb_assert (location->type == EXPLICIT_LOCATION);
+ return &((event_location_explicit *) location)->explicit_loc;
}
/* This convenience function returns a malloc'd string which
represents the location in EXPLICIT_LOC.
- AS_LINESPEC is non-zero if this string should be a linespec.
+ AS_LINESPEC is true if this string should be a linespec.
Otherwise it will be output in explicit form. */
-static char *
-explicit_to_string_internal (int as_linespec,
+static std::string
+explicit_to_string_internal (bool as_linespec,
const struct explicit_location *explicit_loc)
{
- int need_space = 0;
+ bool need_space = false;
char space = as_linespec ? ':' : ' ';
string_file buf;
@@ -244,7 +414,7 @@ explicit_to_string_internal (int as_linespec,
if (!as_linespec)
buf.puts ("-source ");
buf.puts (explicit_loc->source_filename);
- need_space = 1;
+ need_space = true;
}
if (explicit_loc->function_name != NULL)
@@ -256,7 +426,7 @@ explicit_to_string_internal (int as_linespec,
if (!as_linespec)
buf.puts ("-function ");
buf.puts (explicit_loc->function_name);
- need_space = 1;
+ need_space = true;
}
if (explicit_loc->label_name != NULL)
@@ -266,7 +436,7 @@ explicit_to_string_internal (int as_linespec,
if (!as_linespec)
buf.puts ("-label ");
buf.puts (explicit_loc->label_name);
- need_space = 1;
+ need_space = true;
}
if (explicit_loc->line_offset.sign != LINE_OFFSET_UNKNOWN)
@@ -282,23 +452,23 @@ explicit_to_string_internal (int as_linespec,
explicit_loc->line_offset.offset);
}
- return xstrdup (buf.c_str ());
+ return buf.release ();
}
/* See description in location.h. */
-char *
+static std::string
explicit_location_to_string (const struct explicit_location *explicit_loc)
{
- return explicit_to_string_internal (0, explicit_loc);
+ return explicit_to_string_internal (false, explicit_loc);
}
/* See description in location.h. */
-char *
+std::string
explicit_location_to_linespec (const struct explicit_location *explicit_loc)
{
- return explicit_to_string_internal (1, explicit_loc);
+ return explicit_to_string_internal (true, explicit_loc);
}
/* See description in location.h. */
@@ -306,89 +476,13 @@ explicit_location_to_linespec (const struct explicit_location *explicit_loc)
event_location_up
copy_event_location (const struct event_location *src)
{
- struct event_location *dst;
-
- dst = XCNEW (struct event_location);
- EL_TYPE (dst) = EL_TYPE (src);
- if (EL_STRING (src) != NULL)
- EL_STRING (dst) = xstrdup (EL_STRING (src));
-
- switch (EL_TYPE (src))
- {
- case LINESPEC_LOCATION:
- EL_LINESPEC (dst)->match_type = EL_LINESPEC (src)->match_type;
- if (EL_LINESPEC (src)->spec_string != NULL)
- EL_LINESPEC (dst)->spec_string
- = xstrdup (EL_LINESPEC (src)->spec_string);
- break;
-
- case ADDRESS_LOCATION:
- EL_ADDRESS (dst) = EL_ADDRESS (src);
- break;
-
- case EXPLICIT_LOCATION:
- EL_EXPLICIT (dst)->func_name_match_type
- = EL_EXPLICIT (src)->func_name_match_type;
- if (EL_EXPLICIT (src)->source_filename != NULL)
- EL_EXPLICIT (dst)->source_filename
- = xstrdup (EL_EXPLICIT (src)->source_filename);
-
- if (EL_EXPLICIT (src)->function_name != NULL)
- EL_EXPLICIT (dst)->function_name
- = xstrdup (EL_EXPLICIT (src)->function_name);
-
- if (EL_EXPLICIT (src)->label_name != NULL)
- EL_EXPLICIT (dst)->label_name = xstrdup (EL_EXPLICIT (src)->label_name);
-
- EL_EXPLICIT (dst)->line_offset = EL_EXPLICIT (src)->line_offset;
- break;
-
-
- case PROBE_LOCATION:
- if (EL_PROBE (src) != NULL)
- EL_PROBE (dst) = xstrdup (EL_PROBE (src));
- break;
-
- default:
- gdb_assert_not_reached ("unknown event location type");
- }
-
- return event_location_up (dst);
+ return src->clone ();
}
void
event_location_deleter::operator() (event_location *location) const
{
- if (location != NULL)
- {
- xfree (EL_STRING (location));
-
- switch (EL_TYPE (location))
- {
- case LINESPEC_LOCATION:
- xfree (EL_LINESPEC (location)->spec_string);
- break;
-
- case ADDRESS_LOCATION:
- /* Nothing to do. */
- break;
-
- case EXPLICIT_LOCATION:
- xfree (EL_EXPLICIT (location)->source_filename);
- xfree (EL_EXPLICIT (location)->function_name);
- xfree (EL_EXPLICIT (location)->label_name);
- break;
-
- case PROBE_LOCATION:
- xfree (EL_PROBE (location));
- break;
-
- default:
- gdb_assert_not_reached ("unknown event location type");
- }
-
- xfree (location);
- }
+ delete location;
}
/* See description in location.h. */
@@ -396,48 +490,7 @@ event_location_deleter::operator() (event_location *location) const
const char *
event_location_to_string (struct event_location *location)
{
- if (EL_STRING (location) == NULL)
- {
- switch (EL_TYPE (location))
- {
- case LINESPEC_LOCATION:
- if (EL_LINESPEC (location)->spec_string != NULL)
- {
- linespec_location *ls = EL_LINESPEC (location);
- if (ls->match_type == symbol_name_match_type::FULL)
- {
- EL_STRING (location)
- = concat ("-qualified ", ls->spec_string, (char *) NULL);
- }
- else
- EL_STRING (location) = xstrdup (ls->spec_string);
- }
- break;
-
- case ADDRESS_LOCATION:
- {
- const char *addr_string
- = core_addr_to_string (EL_ADDRESS (location));
- EL_STRING (location)
- = xstrprintf ("*%s", addr_string).release ();
- }
- break;
-
- case EXPLICIT_LOCATION:
- EL_STRING (location)
- = explicit_location_to_string (EL_EXPLICIT (location));
- break;
-
- case PROBE_LOCATION:
- EL_STRING (location) = xstrdup (EL_PROBE (location));
- break;
-
- default:
- gdb_assert_not_reached ("unknown event location type");
- }
- }
-
- return EL_STRING (location);
+ return location->to_string ();
}
/* Find an instance of the quote character C in the string S that is
@@ -723,8 +776,6 @@ string_to_explicit_location (const char **argp,
const struct language_defn *language,
explicit_completion_info *completion_info)
{
- event_location_up location;
-
/* It is assumed that input beginning with '-' and a non-digit
character is an explicit location. "-p" is reserved, though,
for probe locations. */
@@ -735,7 +786,8 @@ string_to_explicit_location (const char **argp,
|| ((*argp)[0] == '-' && (*argp)[1] == 'p'))
return NULL;
- location = new_explicit_location (NULL);
+ std::unique_ptr<event_location_explicit> location
+ (new event_location_explicit ((const explicit_location *) nullptr));
/* Process option/argument pairs. dprintf_command
requires that processing stop on ','. */
@@ -804,17 +856,17 @@ string_to_explicit_location (const char **argp,
{
set_oarg (explicit_location_lex_one (argp, language,
completion_info));
- EL_EXPLICIT (location)->source_filename = oarg.release ();
+ location->explicit_loc.source_filename = oarg.release ();
}
else if (strncmp (opt.get (), "-function", len) == 0)
{
set_oarg (explicit_location_lex_one_function (argp, language,
completion_info));
- EL_EXPLICIT (location)->function_name = oarg.release ();
+ location->explicit_loc.function_name = oarg.release ();
}
else if (strncmp (opt.get (), "-qualified", len) == 0)
{
- EL_EXPLICIT (location)->func_name_match_type
+ location->explicit_loc.func_name_match_type
= symbol_name_match_type::FULL;
}
else if (strncmp (opt.get (), "-line", len) == 0)
@@ -823,7 +875,7 @@ string_to_explicit_location (const char **argp,
*argp = skip_spaces (*argp);
if (have_oarg)
{
- EL_EXPLICIT (location)->line_offset
+ location->explicit_loc.line_offset
= linespec_parse_line_offset (oarg.get ());
continue;
}
@@ -831,7 +883,7 @@ string_to_explicit_location (const char **argp,
else if (strncmp (opt.get (), "-label", len) == 0)
{
set_oarg (explicit_location_lex_one (argp, language, completion_info));
- EL_EXPLICIT (location)->label_name = oarg.release ();
+ location->explicit_loc.label_name = oarg.release ();
}
/* Only emit an "invalid argument" error for options
that look like option strings. */
@@ -861,17 +913,17 @@ string_to_explicit_location (const char **argp,
/* One special error check: If a source filename was given
without offset, function, or label, issue an error. */
- if (EL_EXPLICIT (location)->source_filename != NULL
- && EL_EXPLICIT (location)->function_name == NULL
- && EL_EXPLICIT (location)->label_name == NULL
- && (EL_EXPLICIT (location)->line_offset.sign == LINE_OFFSET_UNKNOWN)
+ if (location->explicit_loc.source_filename != NULL
+ && location->explicit_loc.function_name == NULL
+ && location->explicit_loc.label_name == NULL
+ && (location->explicit_loc.line_offset.sign == LINE_OFFSET_UNKNOWN)
&& completion_info == NULL)
{
error (_("Source filename requires function, label, or "
"line offset."));
}
- return location;
+ return event_location_up (location.release ());
}
/* See description in location.h. */
@@ -940,7 +992,10 @@ string_to_event_location (const char **stringp,
"-qualified", otherwise string_to_explicit_location would
have thrown an error. Save the flags for "basic" linespec
parsing below and discard the explicit location. */
- match_type = EL_EXPLICIT (location)->func_name_match_type;
+ event_location_explicit *xloc
+ = dynamic_cast<event_location_explicit *> (location.get ());
+ gdb_assert (xloc != nullptr);
+ match_type = xloc->explicit_loc.func_name_match_type;
}
/* Everything else is a "basic" linespec, address, or probe
@@ -953,36 +1008,14 @@ string_to_event_location (const char **stringp,
int
event_location_empty_p (const struct event_location *location)
{
- switch (EL_TYPE (location))
- {
- case LINESPEC_LOCATION:
- /* Linespecs are never "empty." (NULL is a valid linespec) */
- return 0;
-
- case ADDRESS_LOCATION:
- return 0;
-
- case EXPLICIT_LOCATION:
- return (EL_EXPLICIT (location)->source_filename == NULL
- && EL_EXPLICIT (location)->function_name == NULL
- && EL_EXPLICIT (location)->label_name == NULL
- && (EL_EXPLICIT (location)->line_offset.sign
- == LINE_OFFSET_UNKNOWN));
-
- case PROBE_LOCATION:
- return EL_PROBE (location) == NULL;
-
- default:
- gdb_assert_not_reached ("unknown event location type");
- }
+ return location->empty_p ();
}
/* See description in location.h. */
void
set_event_location_string (struct event_location *location,
- const char *string)
+ std::string &&string)
{
- xfree (EL_STRING (location));
- EL_STRING (location) = string == NULL ? NULL : xstrdup (string);
+ location->as_string = std::move (string);
}
diff --git a/gdb/location.h b/gdb/location.h
index c6e1402d762..ff21c1c21cc 100644
--- a/gdb/location.h
+++ b/gdb/location.h
@@ -109,16 +109,10 @@ struct explicit_location
extern enum event_location_type
event_location_type (const struct event_location *);
-/* Return a malloc'd explicit string representation of the given
- explicit location. The location must already be canonicalized/valid. */
+/* Return a linespec string representation of the given explicit
+ location. The location must already be canonicalized/valid. */
-extern char *
- explicit_location_to_string (const struct explicit_location *explicit_loc);
-
-/* Return a malloc'd linespec string representation of the given
- explicit location. The location must already be canonicalized/valid. */
-
-extern char *
+extern std::string
explicit_location_to_linespec (const struct explicit_location *explicit_loc);
/* Return a string representation of the LOCATION.
@@ -175,7 +169,7 @@ extern const char *
/* Create a new probe location. */
-extern event_location_up new_probe_location (const char *probe);
+extern event_location_up new_probe_location (std::string &&probe);
/* Return the probe location (a string) of the given event_location
(which must be of type PROBE_LOCATION). */
@@ -211,12 +205,11 @@ extern event_location_up
copy_event_location (const struct event_location *src);
/* Attempt to convert the input string in *ARGP into an event_location.
- ARGP is advanced past any processed input. Returns an event_location
- (malloc'd) if an event location was successfully found in *ARGP,
- NULL otherwise.
+ ARGP is advanced past any processed input. Always returns a non-nullptr
+ event_location unique pointer object.
- This function may call error() if *ARGP looks like properly formed,
- but invalid, input, e.g., if it is called with missing argument parameters
+ This function may call error() if *ARGP looks like properly formed, but
+ invalid, input, e.g., if it is called with missing argument parameters
or invalid options.
This function is intended to be used by CLI commands and will parse
@@ -281,11 +274,10 @@ extern event_location_up
extern int event_location_empty_p (const struct event_location *location);
-/* Set the location's string representation. If STRING is NULL, clear
- the string representation. */
+/* Set the location's string representation. */
extern void
set_event_location_string (struct event_location *location,
- const char *string);
+ std::string &&string);
#endif /* LOCATION_H */
diff --git a/gdb/loongarch-linux-nat.c b/gdb/loongarch-linux-nat.c
new file mode 100644
index 00000000000..edc3d697d7b
--- /dev/null
+++ b/gdb/loongarch-linux-nat.c
@@ -0,0 +1,184 @@
+/* Native-dependent code for GNU/Linux on LoongArch processors.
+
+ Copyright (C) 2022 Free Software Foundation, Inc.
+ Contributed by Loongson Ltd.
+
+ This file is part of GDB.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#include "defs.h"
+#include "elf/common.h"
+#include "gregset.h"
+#include "inferior.h"
+#include "linux-nat-trad.h"
+#include "loongarch-tdep.h"
+#include "nat/gdb_ptrace.h"
+#include "target-descriptions.h"
+
+#include <asm/ptrace.h>
+
+/* LoongArch Linux native additions to the default Linux support. */
+
+class loongarch_linux_nat_target final : public linux_nat_trad_target
+{
+public:
+ /* Add our register access methods. */
+ void fetch_registers (struct regcache *, int) override;
+ void store_registers (struct regcache *, int) override;
+
+protected:
+ /* Override linux_nat_trad_target methods. */
+ CORE_ADDR register_u_offset (struct gdbarch *gdbarch, int regno,
+ int store_p) override;
+};
+
+/* Fill GDB's register array with the general-purpose, pc and badv
+ register values from the current thread. */
+
+static void
+fetch_gregs_from_thread (struct regcache *regcache, int regno, pid_t tid)
+{
+ loongarch_gdbarch_tdep *tdep
+ = (loongarch_gdbarch_tdep *) gdbarch_tdep (regcache->arch ());
+ auto regs = tdep->regs;
+ elf_gregset_t regset;
+
+ if (regno == -1 || (regs.r <= regno && regno < regs.r + 32)
+ || regs.pc == regno || regs.badv == regno)
+ {
+ struct iovec iov;
+
+ iov.iov_base = &regset;
+ iov.iov_len = sizeof (regset);
+
+ if (ptrace (PTRACE_GETREGSET, tid, NT_PRSTATUS, (long) &iov) < 0)
+ perror_with_name (_("Couldn't get NT_PRSTATUS registers"));
+ else
+ loongarch_gregset.supply_regset (nullptr, regcache, regno,
+ &regset, sizeof (regset));
+ }
+}
+
+/* Store to the current thread the valid general-purpose, pc and badv
+ register values in the GDB's register array. */
+
+static void
+store_gregs_to_thread (struct regcache *regcache, int regno, pid_t tid)
+{
+ loongarch_gdbarch_tdep *tdep
+ = (loongarch_gdbarch_tdep *) gdbarch_tdep (regcache->arch ());
+ auto regs = tdep->regs;
+ elf_gregset_t regset;
+
+ if (regno == -1 || (regs.r <= regno && regno < regs.r + 32)
+ || regs.pc == regno || regs.badv == regno)
+ {
+ struct iovec iov;
+
+ iov.iov_base = &regset;
+ iov.iov_len = sizeof (regset);
+
+ if (ptrace (PTRACE_GETREGSET, tid, NT_PRSTATUS, (long) &iov) < 0)
+ perror_with_name (_("Couldn't get NT_PRSTATUS registers"));
+ else
+ {
+ loongarch_gregset.collect_regset (nullptr, regcache, regno,
+ &regset, sizeof (regset));
+ if (ptrace (PTRACE_SETREGSET, tid, NT_PRSTATUS, (long) &iov) < 0)
+ perror_with_name (_("Couldn't set NT_PRSTATUS registers"));
+ }
+ }
+}
+
+/* Implement the "fetch_registers" target_ops method. */
+
+void
+loongarch_linux_nat_target::fetch_registers (struct regcache *regcache,
+ int regno)
+{
+ pid_t tid = get_ptrace_pid (regcache->ptid ());
+
+ fetch_gregs_from_thread(regcache, regno, tid);
+}
+
+/* Implement the "store_registers" target_ops method. */
+
+void
+loongarch_linux_nat_target::store_registers (struct regcache *regcache,
+ int regno)
+{
+ pid_t tid = get_ptrace_pid (regcache->ptid ());
+
+ store_gregs_to_thread (regcache, regno, tid);
+}
+
+/* Return the address in the core dump or inferior of register REGNO. */
+
+CORE_ADDR
+loongarch_linux_nat_target::register_u_offset (struct gdbarch *gdbarch,
+ int regno, int store_p)
+{
+ loongarch_gdbarch_tdep *tdep
+ = (loongarch_gdbarch_tdep *) gdbarch_tdep (gdbarch);
+ auto regs = tdep->regs;
+
+ /* According to <asm/ptrace.h> */
+ if (0 <= regs.r && regs.r <= regno && regno < regs.r + GPR_NUM)
+ return GPR_BASE + regno - regs.r;
+ else if (regs.pc == regno)
+ return PC;
+ else
+ return -1;
+}
+
+static loongarch_linux_nat_target the_loongarch_linux_nat_target;
+
+/* Wrapper functions. These are only used by libthread_db. */
+
+void
+supply_gregset (struct regcache *regcache, const gdb_gregset_t *gregset)
+{
+ loongarch_gregset.supply_regset (nullptr, regcache, -1, gregset,
+ sizeof (gdb_gregset_t));
+}
+
+void
+fill_gregset (const struct regcache *regcache, gdb_gregset_t *gregset,
+ int regno)
+{
+ loongarch_gregset.collect_regset (nullptr, regcache, regno, gregset,
+ sizeof (gdb_gregset_t));
+}
+
+void
+supply_fpregset (struct regcache *regcache, const gdb_fpregset_t *fpregset)
+{
+}
+
+void
+fill_fpregset (const struct regcache *regcache, gdb_fpregset_t *fpregset,
+ int regno)
+{
+}
+
+/* Initialize LoongArch Linux native support. */
+
+void _initialize_loongarch_linux_nat ();
+void
+_initialize_loongarch_linux_nat ()
+{
+ linux_target = &the_loongarch_linux_nat_target;
+ add_inf_child_target (&the_loongarch_linux_nat_target);
+}
diff --git a/gdb/loongarch-linux-tdep.c b/gdb/loongarch-linux-tdep.c
new file mode 100644
index 00000000000..7e219c4b9a0
--- /dev/null
+++ b/gdb/loongarch-linux-tdep.c
@@ -0,0 +1,201 @@
+/* Target-dependent code for GNU/Linux on LoongArch processors.
+
+ Copyright (C) 2022 Free Software Foundation, Inc.
+ Contributed by Loongson Ltd.
+
+ This file is part of GDB.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#include "defs.h"
+#include "glibc-tdep.h"
+#include "inferior.h"
+#include "linux-tdep.h"
+#include "loongarch-tdep.h"
+#include "solib-svr4.h"
+#include "target-descriptions.h"
+#include "trad-frame.h"
+#include "tramp-frame.h"
+
+/* Unpack an elf_gregset_t into GDB's register cache. */
+
+static void
+loongarch_supply_gregset (const struct regset *r,
+ struct regcache *regcache, int regno,
+ const void *gprs, size_t len)
+{
+ loongarch_gdbarch_tdep *tdep
+ = (loongarch_gdbarch_tdep *) gdbarch_tdep (regcache->arch ());
+ auto regs = tdep->regs;
+
+ int regsize = register_size (regcache->arch (), regs.r);
+ const gdb_byte *buf = nullptr;
+
+ if (regno == -1)
+ {
+ /* Set $r0 = 0. */
+ regcache->raw_supply_zeroed (regs.r);
+
+ for (int i = 1; i < 32; i++)
+ {
+ buf = (const gdb_byte*) gprs + regsize * i;
+ regcache->raw_supply (regs.r + i, (const void *) buf);
+ }
+
+ /* Size base (pc) = regsize * regs.pc. */
+ buf = (const gdb_byte*) gprs + regsize * regs.pc;
+ regcache->raw_supply (regs.pc, (const void *) buf);
+
+ /* Size base (badv) = regsize * regs.badv. */
+ buf = (const gdb_byte*) gprs + regsize * regs.badv;
+ regcache->raw_supply (regs.badv, (const void *) buf);
+ }
+ else if (regs.r == regno)
+ regcache->raw_supply_zeroed (regno);
+ else if ((regs.r < regno && regno < regs.r + 32)
+ || regs.pc == regno || regs.badv == regno)
+ {
+ /* Offset offset (regno) = regsize * (regno - regs.r). */
+ buf = (const gdb_byte*) gprs + regsize * (regno - regs.r);
+ regcache->raw_supply (regno, (const void *) buf);
+ }
+}
+
+/* Pack the GDB's register cache value into an elf_gregset_t. */
+
+static void
+loongarch_fill_gregset (const struct regset *r,
+ const struct regcache *regcache, int regno,
+ void *gprs, size_t len)
+{
+ loongarch_gdbarch_tdep *tdep
+ = (loongarch_gdbarch_tdep *) gdbarch_tdep (regcache->arch ());
+ auto regs = tdep->regs;
+ int regsize = register_size (regcache->arch (), regs.r);
+ gdb_byte *buf = nullptr;
+
+ if (regno == -1)
+ {
+ for (int i = 0; i < 32; i++)
+ {
+ buf = (gdb_byte *) gprs + regsize * i;
+ regcache->raw_collect (regs.r + i, (void *) buf);
+ }
+
+ /* Size base (pc) = regsize * regs.pc. */
+ buf = (gdb_byte *) gprs + regsize * regs.pc;
+ regcache->raw_collect (regs.pc, (void *) buf);
+
+ /* Size base (badv) = regsize * regs.badv. */
+ buf = (gdb_byte *) gprs + regsize * regs.badv;
+ regcache->raw_collect (regs.badv, (void *) buf);
+ }
+ else if ((regs.r <= regno && regno < regs.r + 32)
+ || regs.pc == regno || regs.badv == regno)
+ {
+ /* Offset offset (regno) = regsize * (regno - regs.r). */
+ buf = (gdb_byte *) gprs + regsize * (regno - regs.r);
+ regcache->raw_collect (regno, (void *) buf);
+ }
+}
+
+/* Register set definitions. */
+
+const struct regset loongarch_gregset =
+{
+ nullptr,
+ loongarch_supply_gregset,
+ loongarch_fill_gregset,
+};
+
+/* Implement the "init" method of struct tramp_frame. */
+
+#define LOONGARCH_RT_SIGFRAME_UCONTEXT_OFFSET 128
+#define LOONGARCH_UCONTEXT_SIGCONTEXT_OFFSET 176
+
+static void
+loongarch_linux_rt_sigframe_init (const struct tramp_frame *self,
+ struct frame_info *this_frame,
+ struct trad_frame_cache *this_cache,
+ CORE_ADDR func)
+{
+ struct gdbarch *gdbarch = get_frame_arch (this_frame);
+ loongarch_gdbarch_tdep *tdep = (loongarch_gdbarch_tdep *) gdbarch_tdep (gdbarch);
+ auto regs = tdep->regs;
+
+ CORE_ADDR frame_sp = get_frame_sp (this_frame);
+ CORE_ADDR sigcontext_base = (frame_sp + LOONGARCH_RT_SIGFRAME_UCONTEXT_OFFSET
+ + LOONGARCH_UCONTEXT_SIGCONTEXT_OFFSET);
+
+ trad_frame_set_reg_addr (this_cache, regs.pc, sigcontext_base);
+ for (int i = 0; i < 32; i++)
+ trad_frame_set_reg_addr (this_cache, regs.r + i, sigcontext_base + 8 + i * 8);
+
+ trad_frame_set_id (this_cache, frame_id_build (frame_sp, func));
+}
+
+/* li.w a7, __NR_rt_sigreturn */
+#define LOONGARCH_INST_LIW_A7_RT_SIGRETURN 0x03822c0b
+/* syscall 0 */
+#define LOONGARCH_INST_SYSCALL 0x002b0000
+
+static const struct tramp_frame loongarch_linux_rt_sigframe =
+{
+ SIGTRAMP_FRAME,
+ 4,
+ {
+ { LOONGARCH_INST_LIW_A7_RT_SIGRETURN, ULONGEST_MAX },
+ { LOONGARCH_INST_SYSCALL, ULONGEST_MAX },
+ { TRAMP_SENTINEL_INSN, ULONGEST_MAX }
+ },
+ loongarch_linux_rt_sigframe_init,
+ NULL
+};
+
+/* Initialize LoongArch Linux ABI info. */
+
+static void
+loongarch_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
+{
+ linux_init_abi (info, gdbarch, 0);
+
+ set_solib_svr4_fetch_link_map_offsets (gdbarch,
+ info.bfd_arch_info->bits_per_address == 32
+ ? linux_ilp32_fetch_link_map_offsets
+ : linux_lp64_fetch_link_map_offsets);
+
+ /* GNU/Linux uses SVR4-style shared libraries. */
+ set_gdbarch_skip_trampoline_code (gdbarch, find_solib_trampoline_target);
+
+ /* GNU/Linux uses the dynamic linker included in the GNU C Library. */
+ set_gdbarch_skip_solib_resolver (gdbarch, glibc_skip_solib_resolver);
+
+ /* Enable TLS support. */
+ set_gdbarch_fetch_tls_load_module_address (gdbarch, svr4_fetch_objfile_link_map);
+
+ /* Prepend tramp frame unwinder for signal. */
+ tramp_frame_prepend_unwinder (gdbarch, &loongarch_linux_rt_sigframe);
+}
+
+/* Initialize LoongArch Linux target support. */
+
+void _initialize_loongarch_linux_tdep ();
+void
+_initialize_loongarch_linux_tdep ()
+{
+ gdbarch_register_osabi (bfd_arch_loongarch, bfd_mach_loongarch32,
+ GDB_OSABI_LINUX, loongarch_linux_init_abi);
+ gdbarch_register_osabi (bfd_arch_loongarch, bfd_mach_loongarch64,
+ GDB_OSABI_LINUX, loongarch_linux_init_abi);
+}
diff --git a/gdb/loongarch-tdep.c b/gdb/loongarch-tdep.c
new file mode 100644
index 00000000000..e30ef8084da
--- /dev/null
+++ b/gdb/loongarch-tdep.c
@@ -0,0 +1,450 @@
+/* Target-dependent code for the LoongArch architecture, for GDB.
+
+ Copyright (C) 2022 Free Software Foundation, Inc.
+
+ This file is part of GDB.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#include "defs.h"
+#include "arch-utils.h"
+#include "dwarf2/frame.h"
+#include "elf-bfd.h"
+#include "frame-unwind.h"
+#include "gdbcore.h"
+#include "loongarch-tdep.h"
+#include "target.h"
+#include "target-descriptions.h"
+#include "trad-frame.h"
+#include "user-regs.h"
+
+/* Fetch the instruction at PC. */
+
+static insn_t
+loongarch_fetch_instruction (CORE_ADDR pc)
+{
+ size_t insn_len = loongarch_insn_length (0);
+ gdb_byte buf[insn_len];
+ int err;
+
+ err = target_read_memory (pc, buf, insn_len);
+ if (err)
+ memory_error (TARGET_XFER_E_IO, pc);
+
+ return extract_unsigned_integer (buf, insn_len, BFD_ENDIAN_LITTLE);
+}
+
+/* Return TRUE if INSN is a branch instruction, otherwise return FALSE. */
+
+static bool
+loongarch_insn_is_branch (insn_t insn)
+{
+ if ((insn & 0xfc000000) == 0x4c000000 /* jirl rd, rj, offs16 */
+ || (insn & 0xfc000000) == 0x50000000 /* b offs26 */
+ || (insn & 0xfc000000) == 0x54000000 /* bl offs26 */
+ || (insn & 0xfc000000) == 0x58000000 /* beq rj, rd, offs16 */
+ || (insn & 0xfc000000) == 0x5c000000 /* bne rj, rd, offs16 */
+ || (insn & 0xfc000000) == 0x60000000 /* blt rj, rd, offs16 */
+ || (insn & 0xfc000000) == 0x64000000 /* bge rj, rd, offs16 */
+ || (insn & 0xfc000000) == 0x68000000 /* bltu rj, rd, offs16 */
+ || (insn & 0xfc000000) == 0x6c000000 /* bgeu rj, rd, offs16 */
+ || (insn & 0xfc000000) == 0x40000000 /* beqz rj, offs21 */
+ || (insn & 0xfc000000) == 0x44000000) /* bnez rj, offs21 */
+ return true;
+ return false;
+}
+
+/* Analyze the function prologue from START_PC to LIMIT_PC.
+ Return the address of the first instruction past the prologue. */
+
+static CORE_ADDR
+loongarch_scan_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc,
+ CORE_ADDR limit_pc, struct frame_info *this_frame,
+ struct trad_frame_cache *this_cache)
+{
+ CORE_ADDR cur_pc = start_pc, prologue_end = 0;
+ loongarch_gdbarch_tdep *tdep = (loongarch_gdbarch_tdep *) gdbarch_tdep (gdbarch);
+ auto regs = tdep->regs;
+ int32_t sp = regs.r + 3;
+ int32_t fp = regs.r + 22;
+ int32_t reg_value[32] = {0};
+ int32_t reg_used[32] = {1, 0};
+
+ while (cur_pc < limit_pc)
+ {
+ insn_t insn = loongarch_fetch_instruction (cur_pc);
+ size_t insn_len = loongarch_insn_length (insn);
+ int32_t rd = loongarch_decode_imm ("0:5", insn, 0);
+ int32_t rj = loongarch_decode_imm ("5:5", insn, 0);
+ int32_t rk = loongarch_decode_imm ("10:5", insn, 0);
+ int32_t si12 = loongarch_decode_imm ("10:12", insn, 1);
+ int32_t si20 = loongarch_decode_imm ("5:20", insn, 1);
+
+ if ((insn & 0xffc00000) == 0x02c00000 /* addi.d sp,sp,si12 */
+ && rd == sp && rj == sp && si12 < 0)
+ {
+ prologue_end = cur_pc + insn_len;
+ }
+ else if ((insn & 0xffc00000) == 0x02c00000 /* addi.d fp,sp,si12 */
+ && rd == fp && rj == sp && si12 > 0)
+ {
+ prologue_end = cur_pc + insn_len;
+ }
+ else if ((insn & 0xffc00000) == 0x29c00000 /* st.d rd,sp,si12 */
+ && rj == sp)
+ {
+ prologue_end = cur_pc + insn_len;
+ }
+ else if ((insn & 0xff000000) == 0x27000000 /* stptr.d rd,sp,si14 */
+ && rj == sp)
+ {
+ prologue_end = cur_pc + insn_len;
+ }
+ else if ((insn & 0xfe000000) == 0x14000000) /* lu12i.w rd,si20 */
+ {
+ reg_value[rd] = si20 << 12;
+ reg_used[rd] = 1;
+ }
+ else if ((insn & 0xffc00000) == 0x03800000) /* ori rd,rj,si12 */
+ {
+ if (reg_used[rj])
+ {
+ reg_value[rd] = reg_value[rj] | (si12 & 0xfff);
+ reg_used[rd] = 1;
+ }
+ }
+ else if ((insn & 0xffff8000) == 0x00108000 /* add.d sp,sp,rk */
+ && rd == sp && rj == sp)
+ {
+ if (reg_used[rk] == 1 && reg_value[rk] < 0)
+ {
+ prologue_end = cur_pc + insn_len;
+ break;
+ }
+ }
+ else if (loongarch_insn_is_branch (insn))
+ {
+ break;
+ }
+
+ cur_pc += insn_len;
+ }
+
+ if (prologue_end == 0)
+ prologue_end = cur_pc;
+
+ return prologue_end;
+}
+
+/* Implement the loongarch_skip_prologue gdbarch method. */
+
+static CORE_ADDR
+loongarch_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
+{
+ CORE_ADDR func_addr;
+
+ /* 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 prologue, whichever
+ is greater. */
+ if (find_pc_partial_function (pc, nullptr, &func_addr, nullptr))
+ {
+ CORE_ADDR post_prologue_pc
+ = skip_prologue_using_sal (gdbarch, func_addr);
+ if (post_prologue_pc != 0)
+ return std::max (pc, post_prologue_pc);
+ }
+
+ /* Can't determine prologue from the symbol table, need to examine
+ instructions. */
+
+ /* Find an upper limit on the function prologue using the debug
+ information. If the debug information could not be used to provide
+ that bound, then use an arbitrary large number as the upper bound. */
+ CORE_ADDR limit_pc = skip_prologue_using_sal (gdbarch, pc);
+ if (limit_pc == 0)
+ limit_pc = pc + 100; /* Arbitrary large number. */
+
+ return loongarch_scan_prologue (gdbarch, pc, limit_pc, nullptr, nullptr);
+}
+
+/* Adjust the address downward (direction of stack growth) so that it
+ is correctly aligned for a new stack frame. */
+
+static CORE_ADDR
+loongarch_frame_align (struct gdbarch *gdbarch, CORE_ADDR addr)
+{
+ return align_down (addr, 16);
+}
+
+/* Generate, or return the cached frame cache for LoongArch frame unwinder. */
+
+static struct trad_frame_cache *
+loongarch_frame_cache (struct frame_info *this_frame, void **this_cache)
+{
+ struct gdbarch *gdbarch = get_frame_arch (this_frame);
+ struct trad_frame_cache *cache;
+ CORE_ADDR pc;
+
+ if (*this_cache != nullptr)
+ return (struct trad_frame_cache *) *this_cache;
+
+ cache = trad_frame_cache_zalloc (this_frame);
+ *this_cache = cache;
+
+ loongarch_gdbarch_tdep *tdep = (loongarch_gdbarch_tdep *) gdbarch_tdep (gdbarch);
+ trad_frame_set_reg_realreg (cache, gdbarch_pc_regnum (gdbarch), tdep->regs.ra);
+
+ pc = get_frame_address_in_block (this_frame);
+ trad_frame_set_id (cache, frame_id_build_unavailable_stack (pc));
+
+ return cache;
+}
+
+/* Implement the this_id callback for LoongArch frame unwinder. */
+
+static void
+loongarch_frame_this_id (struct frame_info *this_frame, void **prologue_cache,
+ struct frame_id *this_id)
+{
+ struct trad_frame_cache *info;
+
+ info = loongarch_frame_cache (this_frame, prologue_cache);
+ trad_frame_get_id (info, this_id);
+}
+
+/* Implement the prev_register callback for LoongArch frame unwinder. */
+
+static struct value *
+loongarch_frame_prev_register (struct frame_info *this_frame,
+ void **prologue_cache, int regnum)
+{
+ struct trad_frame_cache *info;
+
+ info = loongarch_frame_cache (this_frame, prologue_cache);
+ return trad_frame_get_register (info, this_frame, regnum);
+}
+
+static const struct frame_unwind loongarch_frame_unwind = {
+ "loongarch prologue",
+ /*.type =*/NORMAL_FRAME,
+ /*.stop_reason =*/default_frame_unwind_stop_reason,
+ /*.this_id =*/loongarch_frame_this_id,
+ /*.prev_register =*/loongarch_frame_prev_register,
+ /*.unwind_data =*/nullptr,
+ /*.sniffer =*/default_frame_sniffer,
+ /*.dealloc_cache =*/nullptr,
+ /*.prev_arch =*/nullptr,
+};
+
+/* Implement the "dwarf2_reg_to_regnum" gdbarch method. */
+
+static int
+loongarch_dwarf2_reg_to_regnum (struct gdbarch *gdbarch, int num)
+{
+ loongarch_gdbarch_tdep *tdep = (loongarch_gdbarch_tdep *) gdbarch_tdep (gdbarch);
+ auto regs = tdep->regs;
+
+ if (0 <= num && num < 32)
+ return regs.r + num;
+ else
+ return -1;
+}
+
+static constexpr gdb_byte loongarch_default_breakpoint[] = {0x05, 0x00, 0x2a, 0x00};
+typedef BP_MANIPULATION (loongarch_default_breakpoint) loongarch_breakpoint;
+
+/* Extract a set of required target features out of ABFD. If ABFD is nullptr
+ then a LOONGARCH_GDBARCH_FEATURES is returned in its default state. */
+
+static struct loongarch_gdbarch_features
+loongarch_features_from_bfd (const bfd *abfd)
+{
+ struct loongarch_gdbarch_features features;
+
+ /* Now try to improve on the defaults by looking at the binary we are
+ going to execute. We assume the user knows what they are doing and
+ that the target will match the binary. Remember, this code path is
+ only used at all if the target hasn't given us a description, so this
+ is really a last ditched effort to do something sane before giving
+ up. */
+ if (abfd != nullptr && bfd_get_flavour (abfd) == bfd_target_elf_flavour)
+ {
+ unsigned char eclass = elf_elfheader (abfd)->e_ident[EI_CLASS];
+
+ if (eclass == ELFCLASS32)
+ features.xlen = 4;
+ else if (eclass == ELFCLASS64)
+ features.xlen = 8;
+ else
+ internal_error (__FILE__, __LINE__,
+ _("unknown ELF header class %d"), eclass);
+ }
+
+ return features;
+}
+
+/* Find a suitable default target description. Use the contents of INFO,
+ specifically the bfd object being executed, to guide the selection of a
+ suitable default target description. */
+
+static const struct target_desc *
+loongarch_find_default_target_description (const struct gdbarch_info info)
+{
+ /* Extract desired feature set from INFO. */
+ struct loongarch_gdbarch_features features
+ = loongarch_features_from_bfd (info.abfd);
+
+ /* If the XLEN field is still 0 then we got nothing useful from INFO.BFD,
+ maybe there was no bfd object. In this case we fall back to a minimal
+ useful target with no floating point, the x-register size is selected
+ based on the architecture from INFO. */
+ if (features.xlen == 0)
+ features.xlen = info.bfd_arch_info->bits_per_address == 32 ? 4 : 8;
+
+ /* Now build a target description based on the feature set. */
+ return loongarch_lookup_target_description (features);
+}
+
+/* Initialize the current architecture based on INFO */
+
+static struct gdbarch *
+loongarch_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
+{
+ const struct target_desc *tdesc = info.target_desc;
+
+ /* Ensure we always have a target description. */
+ if (!tdesc_has_registers (tdesc))
+ tdesc = loongarch_find_default_target_description (info);
+
+ const struct tdesc_feature *feature_cpu
+ = tdesc_find_feature (tdesc, "org.gnu.gdb.loongarch.base");
+ if (feature_cpu == nullptr)
+ return nullptr;
+
+ int xlen_bitsize = tdesc_register_bitsize (feature_cpu, "pc");
+ struct loongarch_gdbarch_features features;
+ features.xlen = (xlen_bitsize / 8);
+
+ size_t regnum = 0;
+ tdesc_arch_data_up tdesc_data = tdesc_data_alloc ();
+ loongarch_gdbarch_tdep *tdep = new loongarch_gdbarch_tdep;
+ tdep->regs.r = regnum;
+
+ /* Validate the description provides the mandatory base registers
+ and allocate their numbers. */
+ bool valid_p = true;
+ for (int i = 0; i < 32; i++)
+ valid_p &= tdesc_numbered_register (feature_cpu, tdesc_data.get (), regnum++,
+ loongarch_r_normal_name[i] + 1);
+ valid_p &= tdesc_numbered_register (feature_cpu, tdesc_data.get (),
+ tdep->regs.pc = regnum++, "pc");
+ valid_p &= tdesc_numbered_register (feature_cpu, tdesc_data.get (),
+ tdep->regs.badv = regnum++, "badv");
+ if (!valid_p)
+ return nullptr;
+
+ /* LoongArch code is always little-endian. */
+ info.byte_order_for_code = BFD_ENDIAN_LITTLE;
+
+ /* Have a look at what the supplied (if any) bfd object requires of the
+ target, then check that this matches with what the target is
+ providing. */
+ struct loongarch_gdbarch_features abi_features
+ = loongarch_features_from_bfd (info.abfd);
+
+ /* If the ABI_FEATURES xlen is 0 then this indicates we got no useful abi
+ features from the INFO object. In this case we just treat the
+ hardware features as defining the abi. */
+ if (abi_features.xlen == 0)
+ abi_features = features;
+
+ /* Find a candidate among the list of pre-declared architectures. */
+ for (arches = gdbarch_list_lookup_by_info (arches, &info);
+ arches != nullptr;
+ arches = gdbarch_list_lookup_by_info (arches->next, &info))
+ {
+ /* Check that the feature set of the ARCHES matches the feature set
+ we are looking for. If it doesn't then we can't reuse this
+ gdbarch. */
+ loongarch_gdbarch_tdep *candidate_tdep
+ = (loongarch_gdbarch_tdep *) gdbarch_tdep (arches->gdbarch);
+
+ if (candidate_tdep->abi_features != abi_features)
+ continue;
+
+ break;
+ }
+
+ if (arches != nullptr)
+ return arches->gdbarch;
+
+ /* None found, so create a new architecture from the information provided. */
+ struct gdbarch *gdbarch = gdbarch_alloc (&info, tdep);
+ tdep->abi_features = abi_features;
+
+ /* Target data types. */
+ set_gdbarch_short_bit (gdbarch, 16);
+ set_gdbarch_int_bit (gdbarch, 32);
+ set_gdbarch_long_bit (gdbarch, info.bfd_arch_info->bits_per_address);
+ set_gdbarch_long_long_bit (gdbarch, 64);
+ set_gdbarch_float_bit (gdbarch, 32);
+ set_gdbarch_double_bit (gdbarch, 64);
+ set_gdbarch_long_double_bit (gdbarch, 128);
+ set_gdbarch_long_double_format (gdbarch, floatformats_ieee_quad);
+ set_gdbarch_ptr_bit (gdbarch, info.bfd_arch_info->bits_per_address);
+ set_gdbarch_char_signed (gdbarch, 0);
+
+ info.target_desc = tdesc;
+ info.tdesc_data = tdesc_data.get ();
+
+ /* Information about registers. */
+ tdep->regs.ra = tdep->regs.r + 1;
+ tdep->regs.sp = tdep->regs.r + 3;
+ set_gdbarch_num_regs (gdbarch, regnum);
+ set_gdbarch_sp_regnum (gdbarch, tdep->regs.sp);
+ set_gdbarch_pc_regnum (gdbarch, tdep->regs.pc);
+
+ /* Finalise the target description registers. */
+ tdesc_use_registers (gdbarch, tdesc, std::move (tdesc_data));
+
+ /* Advance PC across function entry code. */
+ set_gdbarch_skip_prologue (gdbarch, loongarch_skip_prologue);
+
+ /* Stack grows downward. */
+ set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
+
+ /* Frame info. */
+ set_gdbarch_frame_align (gdbarch, loongarch_frame_align);
+
+ /* Breakpoint manipulation. */
+ set_gdbarch_breakpoint_kind_from_pc (gdbarch, loongarch_breakpoint::kind_from_pc);
+ set_gdbarch_sw_breakpoint_from_kind (gdbarch, loongarch_breakpoint::bp_from_kind);
+
+ /* Frame unwinders. Use DWARF debug info if available, otherwise use our own unwinder. */
+ set_gdbarch_dwarf2_reg_to_regnum (gdbarch, loongarch_dwarf2_reg_to_regnum);
+ dwarf2_append_unwinders (gdbarch);
+ frame_unwind_append_unwinder (gdbarch, &loongarch_frame_unwind);
+
+ /* Hook in OS ABI-specific overrides, if they have been registered. */
+ gdbarch_init_osabi (info, gdbarch);
+
+ return gdbarch;
+}
+
+void _initialize_loongarch_tdep ();
+void
+_initialize_loongarch_tdep ()
+{
+ gdbarch_register (bfd_arch_loongarch, loongarch_gdbarch_init, nullptr);
+}
diff --git a/gdb/loongarch-tdep.h b/gdb/loongarch-tdep.h
new file mode 100644
index 00000000000..b2fd16e25a7
--- /dev/null
+++ b/gdb/loongarch-tdep.h
@@ -0,0 +1,49 @@
+/* Target-dependent header for the LoongArch architecture, for GDB.
+
+ Copyright (C) 2022 Free Software Foundation, Inc.
+
+ This file is part of GDB.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#ifndef LOONGARCH_TDEP_H
+#define LOONGARCH_TDEP_H
+
+#include "gdbarch.h"
+#include "arch/loongarch.h"
+#include "regset.h"
+
+#include "elf/loongarch.h"
+#include "opcode/loongarch.h"
+
+/* Register set definitions. */
+extern const struct regset loongarch_gregset;
+
+/* Target-dependent structure in gdbarch. */
+struct loongarch_gdbarch_tdep : gdbarch_tdep
+{
+ /* Features about the abi that impact how the gdbarch is configured. */
+ struct loongarch_gdbarch_features abi_features;
+
+ struct
+ {
+ int r; /* General register. */
+ int ra; /* Return Address. */
+ int sp; /* Stack Pointer. */
+ int pc; /* Program Counter. */
+ int badv; /* Bad vaddr for addressing exception. */
+ } regs; /* LoongArch registers */
+};
+
+#endif /* LOONGARCH_TDEP_H */
diff --git a/gdb/m2-exp.y b/gdb/m2-exp.y
index 86409cf78b1..85bac11b8fb 100644
--- a/gdb/m2-exp.y
+++ b/gdb/m2-exp.y
@@ -490,7 +490,7 @@ exp : STRING
/* This will be used for extensions later. Like adding modules. */
block : fblock
- { $$ = SYMBOL_BLOCK_VALUE($1); }
+ { $$ = $1->value_block (); }
;
fblock : BLOCKNAME
@@ -507,7 +507,7 @@ fblock : block COLONCOLON BLOCKNAME
{ struct symbol *tem
= lookup_symbol (copy_name ($3).c_str (), $1,
VAR_DOMAIN, 0).symbol;
- if (!tem || SYMBOL_CLASS (tem) != LOC_BLOCK)
+ if (!tem || tem->aclass () != LOC_BLOCK)
error (_("No function \"%s\" in specified context."),
copy_name ($3).c_str ());
$$ = tem;
@@ -932,7 +932,7 @@ yylex (void)
return BLOCKNAME;
sym = lookup_symbol (tmp.c_str (), pstate->expression_context_block,
VAR_DOMAIN, 0).symbol;
- if (sym && SYMBOL_CLASS (sym) == LOC_BLOCK)
+ if (sym && sym->aclass () == LOC_BLOCK)
return BLOCKNAME;
if (lookup_typename (pstate->language (),
tmp.c_str (), pstate->expression_context_block, 1))
@@ -940,7 +940,7 @@ yylex (void)
if(sym)
{
- switch(SYMBOL_CLASS (sym))
+ switch(sym->aclass ())
{
case LOC_STATIC:
case LOC_REGISTER:
diff --git a/gdb/m2-lang.c b/gdb/m2-lang.c
index 1b53aff3f0d..17b21af5d95 100644
--- a/gdb/m2-lang.c
+++ b/gdb/m2-lang.c
@@ -145,9 +145,9 @@ void
m2_language::printchar (int c, struct type *type,
struct ui_file *stream) const
{
- fputs_filtered ("'", stream);
+ gdb_puts ("'", stream);
emitchar (c, type, stream, '\'');
- fputs_filtered ("'", stream);
+ gdb_puts ("'", stream);
}
/* See language.h. */
@@ -165,7 +165,7 @@ m2_language::printstr (struct ui_file *stream, struct type *elttype,
if (length == 0)
{
- fputs_filtered ("\"\"", gdb_stdout);
+ gdb_puts ("\"\"");
return;
}
@@ -181,7 +181,7 @@ m2_language::printstr (struct ui_file *stream, struct type *elttype,
if (need_comma)
{
- fputs_filtered (", ", stream);
+ gdb_puts (", ", stream);
need_comma = 0;
}
@@ -197,11 +197,11 @@ m2_language::printstr (struct ui_file *stream, struct type *elttype,
{
if (in_quotes)
{
- fputs_filtered ("\", ", stream);
+ gdb_puts ("\", ", stream);
in_quotes = 0;
}
printchar (string[i], elttype, stream);
- fprintf_filtered (stream, " <repeats %u times>", reps);
+ gdb_printf (stream, " <repeats %u times>", reps);
i = rep1 - 1;
things_printed += options->repeat_count_threshold;
need_comma = 1;
@@ -210,7 +210,7 @@ m2_language::printstr (struct ui_file *stream, struct type *elttype,
{
if (!in_quotes)
{
- fputs_filtered ("\"", stream);
+ gdb_puts ("\"", stream);
in_quotes = 1;
}
emitchar (string[i], elttype, stream, '"');
@@ -220,10 +220,10 @@ m2_language::printstr (struct ui_file *stream, struct type *elttype,
/* Terminate the quotes if necessary. */
if (in_quotes)
- fputs_filtered ("\"", stream);
+ gdb_puts ("\"", stream);
if (force_ellipses || i < length)
- fputs_filtered ("...", stream);
+ gdb_puts ("...", stream);
}
/* See language.h. */
@@ -237,36 +237,36 @@ m2_language::emitchar (int ch, struct type *chtype,
if (PRINT_LITERAL_FORM (ch))
{
if (ch == '\\' || ch == quoter)
- fputs_filtered ("\\", stream);
- fprintf_filtered (stream, "%c", ch);
+ gdb_puts ("\\", stream);
+ gdb_printf (stream, "%c", ch);
}
else
{
switch (ch)
{
case '\n':
- fputs_filtered ("\\n", stream);
+ gdb_puts ("\\n", stream);
break;
case '\b':
- fputs_filtered ("\\b", stream);
+ gdb_puts ("\\b", stream);
break;
case '\t':
- fputs_filtered ("\\t", stream);
+ gdb_puts ("\\t", stream);
break;
case '\f':
- fputs_filtered ("\\f", stream);
+ gdb_puts ("\\f", stream);
break;
case '\r':
- fputs_filtered ("\\r", stream);
+ gdb_puts ("\\r", stream);
break;
case '\033':
- fputs_filtered ("\\e", stream);
+ gdb_puts ("\\e", stream);
break;
case '\007':
- fputs_filtered ("\\a", stream);
+ gdb_puts ("\\a", stream);
break;
default:
- fprintf_filtered (stream, "\\%.3o", (unsigned int) ch);
+ gdb_printf (stream, "\\%.3o", (unsigned int) ch);
break;
}
}
diff --git a/gdb/m2-typeprint.c b/gdb/m2-typeprint.c
index 9fd86f5f0d2..cbd35df0190 100644
--- a/gdb/m2-typeprint.c
+++ b/gdb/m2-typeprint.c
@@ -17,7 +17,7 @@
along with this program. If not, see <http://www.gnu.org/licenses/>. */
#include "defs.h"
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
#include "bfd.h" /* Binary File Description */
#include "symtab.h"
#include "gdbtypes.h"
@@ -79,7 +79,7 @@ m2_print_type (struct type *type, const char *varstring,
QUIT;
- wrap_here (" ");
+ stream->wrap_here (4);
if (type == NULL)
{
fputs_styled (_("<type unknown>"), metadata_style.style (), stream);
@@ -162,15 +162,15 @@ m2_language::print_typedef (struct type *type, struct symbol *new_symbol,
struct ui_file *stream) const
{
type = check_typedef (type);
- fprintf_filtered (stream, "TYPE ");
- if (!SYMBOL_TYPE (new_symbol)->name ()
- || strcmp ((SYMBOL_TYPE (new_symbol))->name (),
+ gdb_printf (stream, "TYPE ");
+ if (!new_symbol->type ()->name ()
+ || strcmp ((new_symbol->type ())->name (),
new_symbol->linkage_name ()) != 0)
- fprintf_filtered (stream, "%s = ", new_symbol->print_name ());
+ gdb_printf (stream, "%s = ", new_symbol->print_name ());
else
- fprintf_filtered (stream, "<builtin> = ");
+ gdb_printf (stream, "<builtin> = ");
type_print (type, "", stream, 0);
- fprintf_filtered (stream, ";");
+ gdb_printf (stream, ";");
}
/* m2_type_name - if a, type, has a name then print it. */
@@ -179,7 +179,7 @@ void
m2_type_name (struct type *type, struct ui_file *stream)
{
if (type->name () != NULL)
- fputs_filtered (type->name (), stream);
+ gdb_puts (type->name (), stream);
}
/* m2_range - displays a Modula-2 subrange type. */
@@ -199,11 +199,11 @@ m2_range (struct type *type, struct ui_file *stream, int show,
{
struct type *target = TYPE_TARGET_TYPE (type);
- fprintf_filtered (stream, "[");
+ gdb_printf (stream, "[");
print_type_scalar (target, type->bounds ()->low.const_val (), stream);
- fprintf_filtered (stream, "..");
+ gdb_printf (stream, "..");
print_type_scalar (target, type->bounds ()->high.const_val (), stream);
- fprintf_filtered (stream, "]");
+ gdb_printf (stream, "]");
}
}
@@ -213,8 +213,8 @@ m2_typedef (struct type *type, struct ui_file *stream, int show,
{
if (type->name () != NULL)
{
- fputs_filtered (type->name (), stream);
- fputs_filtered (" = ", stream);
+ gdb_puts (type->name (), stream);
+ gdb_puts (" = ", stream);
}
m2_print_type (TYPE_TARGET_TYPE (type), "", stream, show, level, flags);
}
@@ -224,22 +224,22 @@ m2_typedef (struct type *type, struct ui_file *stream, int show,
static void m2_array (struct type *type, struct ui_file *stream,
int show, int level, const struct type_print_options *flags)
{
- fprintf_filtered (stream, "ARRAY [");
+ gdb_printf (stream, "ARRAY [");
if (TYPE_LENGTH (TYPE_TARGET_TYPE (type)) > 0
&& type->bounds ()->high.kind () != PROP_UNDEFINED)
{
if (type->index_type () != 0)
{
m2_print_bounds (type->index_type (), stream, show, -1, 0);
- fprintf_filtered (stream, "..");
+ gdb_printf (stream, "..");
m2_print_bounds (type->index_type (), stream, show, -1, 1);
}
else
- fputs_filtered (pulongest ((TYPE_LENGTH (type)
- / TYPE_LENGTH (TYPE_TARGET_TYPE (type)))),
- stream);
+ gdb_puts (pulongest ((TYPE_LENGTH (type)
+ / TYPE_LENGTH (TYPE_TARGET_TYPE (type)))),
+ stream);
}
- fprintf_filtered (stream, "] OF ");
+ gdb_printf (stream, "] OF ");
m2_print_type (TYPE_TARGET_TYPE (type), "", stream, show, level, flags);
}
@@ -248,9 +248,9 @@ m2_pointer (struct type *type, struct ui_file *stream, int show,
int level, const struct type_print_options *flags)
{
if (TYPE_CONST (type))
- fprintf_filtered (stream, "[...] : ");
+ gdb_printf (stream, "[...] : ");
else
- fprintf_filtered (stream, "POINTER TO ");
+ gdb_printf (stream, "POINTER TO ");
m2_print_type (TYPE_TARGET_TYPE (type), "", stream, show, level, flags);
}
@@ -259,7 +259,7 @@ static void
m2_ref (struct type *type, struct ui_file *stream, int show,
int level, const struct type_print_options *flags)
{
- fprintf_filtered (stream, "VAR");
+ gdb_printf (stream, "VAR");
m2_print_type (TYPE_TARGET_TYPE (type), "", stream, show, level, flags);
}
@@ -267,36 +267,36 @@ static void
m2_unknown (const char *s, struct type *type, struct ui_file *stream,
int show, int level)
{
- fprintf_filtered (stream, "%s %s", s, _("is unknown"));
+ gdb_printf (stream, "%s %s", s, _("is unknown"));
}
static void m2_union (struct type *type, struct ui_file *stream)
{
- fprintf_filtered (stream, "union");
+ gdb_printf (stream, "union");
}
static void
m2_procedure (struct type *type, struct ui_file *stream,
int show, int level, const struct type_print_options *flags)
{
- fprintf_filtered (stream, "PROCEDURE ");
+ gdb_printf (stream, "PROCEDURE ");
m2_type_name (type, stream);
if (TYPE_TARGET_TYPE (type) == NULL
|| TYPE_TARGET_TYPE (type)->code () != TYPE_CODE_VOID)
{
int i, len = type->num_fields ();
- fprintf_filtered (stream, " (");
+ gdb_printf (stream, " (");
for (i = 0; i < len; i++)
{
if (i > 0)
{
- fputs_filtered (", ", stream);
- wrap_here (" ");
+ gdb_puts (", ", stream);
+ stream->wrap_here (4);
}
m2_print_type (type->field (i).type (), "", stream, -1, 0, flags);
}
- fprintf_filtered (stream, ") : ");
+ gdb_printf (stream, ") : ");
if (TYPE_TARGET_TYPE (type) != NULL)
m2_print_type (TYPE_TARGET_TYPE (type), "", stream, 0, 0, flags);
else
@@ -323,14 +323,14 @@ m2_print_bounds (struct type *type,
static void
m2_short_set (struct type *type, struct ui_file *stream, int show, int level)
{
- fprintf_filtered(stream, "SET [");
+ gdb_printf(stream, "SET [");
m2_print_bounds (type->index_type (), stream,
show - 1, level, 0);
- fprintf_filtered(stream, "..");
+ gdb_printf(stream, "..");
m2_print_bounds (type->index_type (), stream,
show - 1, level, 1);
- fprintf_filtered(stream, "]");
+ gdb_printf(stream, "]");
}
int
@@ -442,34 +442,34 @@ m2_long_set (struct type *type, struct ui_file *stream, int show, int level,
{
if (type->name () != NULL)
{
- fputs_filtered (type->name (), stream);
+ gdb_puts (type->name (), stream);
if (show == 0)
return 1;
- fputs_filtered (" = ", stream);
+ gdb_puts (" = ", stream);
}
if (get_long_set_bounds (type, &low, &high))
{
- fprintf_filtered(stream, "SET OF ");
+ gdb_printf(stream, "SET OF ");
i = TYPE_N_BASECLASSES (type);
if (m2_is_long_set_of_type (type, &of_type))
m2_print_type (of_type, "", stream, show - 1, level, flags);
else
{
- fprintf_filtered(stream, "[");
+ gdb_printf(stream, "[");
m2_print_bounds (type->field (i).type ()->index_type (),
stream, show - 1, level, 0);
- fprintf_filtered(stream, "..");
+ gdb_printf(stream, "..");
m2_print_bounds (type->field (len - 1).type ()->index_type (),
stream, show - 1, level, 1);
- fprintf_filtered(stream, "]");
+ gdb_printf(stream, "]");
}
}
else
/* i18n: Do not translate the "SET OF" part! */
- fprintf_filtered(stream, _("SET OF <unknown>"));
+ gdb_printf(stream, _("SET OF <unknown>"));
return 1;
}
@@ -516,7 +516,7 @@ m2_unbounded_array (struct type *type, struct ui_file *stream, int show,
{
if (show > 0)
{
- fputs_filtered ("ARRAY OF ", stream);
+ gdb_puts ("ARRAY OF ", stream);
m2_print_type (TYPE_TARGET_TYPE (type->field (0).type ()),
"", stream, 0, level, flags);
}
@@ -534,18 +534,18 @@ m2_record_fields (struct type *type, struct ui_file *stream, int show,
{
if (!startswith (type->name (), "$$"))
{
- fputs_filtered (type->name (), stream);
+ gdb_puts (type->name (), stream);
if (show > 0)
- fprintf_filtered (stream, " = ");
+ gdb_printf (stream, " = ");
}
}
- wrap_here (" ");
+ stream->wrap_here (4);
if (show < 0)
{
if (type->code () == TYPE_CODE_STRUCT)
- fprintf_filtered (stream, "RECORD ... END ");
+ gdb_printf (stream, "RECORD ... END ");
else if (type->code () == TYPE_CODE_UNION)
- fprintf_filtered (stream, "CASE ... END ");
+ gdb_printf (stream, "CASE ... END ");
}
else if (show > 0)
{
@@ -553,19 +553,19 @@ m2_record_fields (struct type *type, struct ui_file *stream, int show,
int len = type->num_fields ();
if (type->code () == TYPE_CODE_STRUCT)
- fprintf_filtered (stream, "RECORD\n");
+ gdb_printf (stream, "RECORD\n");
else if (type->code () == TYPE_CODE_UNION)
/* i18n: Do not translate "CASE" and "OF". */
- fprintf_filtered (stream, _("CASE <variant> OF\n"));
+ gdb_printf (stream, _("CASE <variant> OF\n"));
for (i = TYPE_N_BASECLASSES (type); i < len; i++)
{
QUIT;
- print_spaces_filtered (level + 4, stream);
+ print_spaces (level + 4, stream);
fputs_styled (type->field (i).name (),
variable_name_style.style (), stream);
- fputs_filtered (" : ", stream);
+ gdb_puts (" : ", stream);
m2_print_type (type->field (i).type (),
"",
stream, 0, level + 4, flags);
@@ -576,13 +576,13 @@ m2_record_fields (struct type *type, struct ui_file *stream, int show,
unnamed fields. This would lead to misleading
results if the compiler does not put out fields
for such things (I don't know what it does). */
- fprintf_filtered (stream, " : %d",
- TYPE_FIELD_BITSIZE (type, i));
+ gdb_printf (stream, " : %d",
+ TYPE_FIELD_BITSIZE (type, i));
}
- fprintf_filtered (stream, ";\n");
+ gdb_printf (stream, ";\n");
}
- fprintf_filtered (stream, "%*sEND ", level, "");
+ gdb_printf (stream, "%*sEND ", level, "");
}
}
@@ -596,29 +596,29 @@ m2_enum (struct type *type, struct ui_file *stream, int show, int level)
{
/* If we just printed a tag name, no need to print anything else. */
if (type->name () == NULL)
- fprintf_filtered (stream, "(...)");
+ gdb_printf (stream, "(...)");
}
else if (show > 0 || type->name () == NULL)
{
- fprintf_filtered (stream, "(");
+ gdb_printf (stream, "(");
len = type->num_fields ();
lastval = 0;
for (i = 0; i < len; i++)
{
QUIT;
if (i > 0)
- fprintf_filtered (stream, ", ");
- wrap_here (" ");
+ gdb_printf (stream, ", ");
+ stream->wrap_here (4);
fputs_styled (type->field (i).name (),
variable_name_style.style (), stream);
if (lastval != type->field (i).loc_enumval ())
{
- fprintf_filtered (stream, " = %s",
- plongest (type->field (i).loc_enumval ()));
+ gdb_printf (stream, " = %s",
+ plongest (type->field (i).loc_enumval ()));
lastval = type->field (i).loc_enumval ();
}
lastval++;
}
- fprintf_filtered (stream, ")");
+ gdb_printf (stream, ")");
}
}
diff --git a/gdb/m2-valprint.c b/gdb/m2-valprint.c
index 3fd46b25a38..9e3f16a896f 100644
--- a/gdb/m2-valprint.c
+++ b/gdb/m2-valprint.c
@@ -81,7 +81,7 @@ m2_print_long_set (struct type *type, const gdb_byte *valaddr,
type = check_typedef (type);
- fprintf_filtered (stream, "{");
+ gdb_printf (stream, "{");
len = type->num_fields ();
if (get_long_set_bounds (type, &low_bound, &high_bound))
{
@@ -112,7 +112,7 @@ m2_print_long_set (struct type *type, const gdb_byte *valaddr,
if (! element_seen)
{
if (! empty_set)
- fprintf_filtered (stream, ", ");
+ gdb_printf (stream, ", ");
print_type_scalar (target, i, stream);
empty_set = 0;
element_seen = 1;
@@ -125,7 +125,7 @@ m2_print_long_set (struct type *type, const gdb_byte *valaddr,
if (element_seen)
{
if (previous_low+1 < previous_high)
- fprintf_filtered (stream, "..");
+ gdb_printf (stream, "..");
if (previous_low+1 < previous_high)
print_type_scalar (target, previous_high, stream);
element_seen = 0;
@@ -146,12 +146,12 @@ m2_print_long_set (struct type *type, const gdb_byte *valaddr,
{
if (previous_low+1 < previous_high)
{
- fprintf_filtered (stream, "..");
+ gdb_printf (stream, "..");
print_type_scalar (target, previous_high, stream);
}
element_seen = 0;
}
- fprintf_filtered (stream, "}");
+ gdb_printf (stream, "}");
}
}
@@ -175,9 +175,9 @@ m2_print_unbounded_array (struct value *value,
addr);
len = unpack_field_as_long (type, valaddr, 1);
- fprintf_filtered (stream, "{");
+ gdb_printf (stream, "{");
m2_print_array_contents (val, stream, recurse, options, len);
- fprintf_filtered (stream, ", HIGH = %d}", (int) len);
+ gdb_printf (stream, ", HIGH = %d}", (int) len);
}
static int
@@ -200,7 +200,7 @@ print_unpacked_pointer (struct type *type,
if (options->addressprint && options->format != 's')
{
- fputs_filtered (paddress (gdbarch, address), stream);
+ gdb_puts (paddress (gdbarch, address), stream);
want_space = 1;
}
@@ -213,7 +213,7 @@ print_unpacked_pointer (struct type *type,
&& addr != 0)
{
if (want_space)
- fputs_filtered (" ", stream);
+ gdb_puts (" ", stream);
return val_print_string (TYPE_TARGET_TYPE (type), NULL, addr, -1,
stream, options);
}
@@ -232,9 +232,9 @@ print_variable_at_address (struct type *type,
CORE_ADDR addr = unpack_pointer (type, valaddr);
struct type *elttype = check_typedef (TYPE_TARGET_TYPE (type));
- fprintf_filtered (stream, "[");
- fputs_filtered (paddress (gdbarch, addr), stream);
- fprintf_filtered (stream, "] : ");
+ gdb_printf (stream, "[");
+ gdb_puts (paddress (gdbarch, addr), stream);
+ gdb_printf (stream, "] : ");
if (elttype->code () != TYPE_CODE_UNDEF)
{
@@ -244,7 +244,7 @@ print_variable_at_address (struct type *type,
common_val_print (deref_val, stream, recurse, options, current_language);
}
else
- fputs_filtered ("???", stream);
+ gdb_puts ("???", stream);
}
@@ -274,9 +274,9 @@ m2_print_array_contents (struct value *val,
options);
else
{
- fprintf_filtered (stream, "{");
+ gdb_printf (stream, "{");
value_print_array_elements (val, stream, recurse, options, 0);
- fprintf_filtered (stream, "}");
+ gdb_printf (stream, "}");
}
}
}
@@ -342,10 +342,10 @@ m2_language::value_print_inner (struct value *val, struct ui_file *stream,
}
else
{
- fprintf_filtered (stream, "{");
+ gdb_printf (stream, "{");
value_print_array_elements (val, stream, recurse,
options, 0);
- fprintf_filtered (stream, "}");
+ gdb_printf (stream, "}");
}
break;
}
@@ -368,7 +368,7 @@ m2_language::value_print_inner (struct value *val, struct ui_file *stream,
case TYPE_CODE_UNION:
if (recurse && !options->unionprint)
{
- fprintf_filtered (stream, "{...}");
+ gdb_printf (stream, "{...}");
break;
}
/* Fall through. */
@@ -397,7 +397,7 @@ m2_language::value_print_inner (struct value *val, struct ui_file *stream,
int i;
int need_comma = 0;
- fputs_filtered ("{", stream);
+ gdb_puts ("{", stream);
i = get_discrete_bounds (range, &low_bound, &high_bound) ? 0 : -1;
maybe_bad_bstring:
@@ -420,7 +420,7 @@ m2_language::value_print_inner (struct value *val, struct ui_file *stream,
if (element)
{
if (need_comma)
- fputs_filtered (", ", stream);
+ gdb_puts (", ", stream);
print_type_scalar (range, i, stream);
need_comma = 1;
@@ -429,7 +429,7 @@ m2_language::value_print_inner (struct value *val, struct ui_file *stream,
{
int j = i;
- fputs_filtered ("..", stream);
+ gdb_puts ("..", stream);
while (i + 1 <= high_bound
&& value_bit_index (type, valaddr, ++i))
j = i;
@@ -438,7 +438,7 @@ m2_language::value_print_inner (struct value *val, struct ui_file *stream,
}
}
done:
- fputs_filtered ("}", stream);
+ gdb_puts ("}", stream);
}
break;
diff --git a/gdb/m32c-tdep.c b/gdb/m32c-tdep.c
index 5e4844bda0a..4971be796cd 100644
--- a/gdb/m32c-tdep.c
+++ b/gdb/m32c-tdep.c
@@ -35,7 +35,7 @@
/* The m32c tdep structure. */
-static struct reggroup *m32c_dma_reggroup;
+static const reggroup *m32c_dma_reggroup;
/* The type of a function that moves the value of REG between CACHE or
BUF --- in either direction. */
@@ -252,7 +252,7 @@ m32c_debug_info_reg_to_regnum (struct gdbarch *gdbarch, int reg_nr)
static int
m32c_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
- struct reggroup *group)
+ const struct reggroup *group)
{
m32c_gdbarch_tdep *tdep = (m32c_gdbarch_tdep *) gdbarch_tdep (gdbarch);
struct m32c_reg *reg = &tdep->regs[regnum];
@@ -981,11 +981,6 @@ make_regs (struct gdbarch *arch)
set_gdbarch_dwarf2_reg_to_regnum (arch, m32c_debug_info_reg_to_regnum);
set_gdbarch_register_reggroup_p (arch, m32c_register_reggroup_p);
- reggroup_add (arch, general_reggroup);
- reggroup_add (arch, all_reggroup);
- reggroup_add (arch, save_reggroup);
- reggroup_add (arch, restore_reggroup);
- reggroup_add (arch, system_reggroup);
reggroup_add (arch, m32c_dma_reggroup);
}
@@ -2221,7 +2216,7 @@ m32c_return_value (struct gdbarch *gdbarch,
error (_("The return value is stored in memory at 'mem0', "
"but GDB cannot find\n"
"its address."));
- read_memory (BMSYMBOL_VALUE_ADDRESS (mem0), readbuf, valtype_len);
+ read_memory (mem0.value_address (), readbuf, valtype_len);
}
}
@@ -2253,7 +2248,7 @@ m32c_return_value (struct gdbarch *gdbarch,
error (_("The return value is stored in memory at 'mem0', "
"but GDB cannot find\n"
" its address."));
- write_memory (BMSYMBOL_VALUE_ADDRESS (mem0), writebuf, valtype_len);
+ write_memory (mem0.value_address (), writebuf, valtype_len);
}
}
@@ -2478,7 +2473,7 @@ m32c_m16c_address_to_pointer (struct gdbarch *gdbarch,
else
{
/* The trampoline's address is our pointer. */
- addr = BMSYMBOL_VALUE_ADDRESS (tramp_msym);
+ addr = tramp_msym.value_address ();
}
}
@@ -2530,7 +2525,7 @@ m32c_m16c_pointer_to_address (struct gdbarch *gdbarch,
/* If we do have such a symbol, return its value as the
function's true address. */
if (func_msym.minsym)
- ptr = BMSYMBOL_VALUE_ADDRESS (func_msym);
+ ptr = func_msym.value_address ();
}
}
else
diff --git a/gdb/m32r-tdep.c b/gdb/m32r-tdep.c
index 9c276fb7593..3ad4c8de6bf 100644
--- a/gdb/m32r-tdep.c
+++ b/gdb/m32r-tdep.c
@@ -811,7 +811,7 @@ m32r_frame_this_id (struct frame_info *this_frame,
/* Check if the stack is empty. */
msym_stack = lookup_minimal_symbol ("_stack", NULL, NULL);
- if (msym_stack.minsym && info->base == BMSYMBOL_VALUE_ADDRESS (msym_stack))
+ if (msym_stack.minsym && info->base == msym_stack.value_address ())
return;
/* Hopefully the prologue analysis either correctly determined the
diff --git a/gdb/m68hc11-tdep.c b/gdb/m68hc11-tdep.c
index cbce2f42475..98f1367423e 100644
--- a/gdb/m68hc11-tdep.c
+++ b/gdb/m68hc11-tdep.c
@@ -58,16 +58,16 @@
MSYMBOL_IS_RTI Tests the "RTC" bit in a minimal symbol. */
#define MSYMBOL_SET_RTC(msym) \
- MSYMBOL_TARGET_FLAG_1 (msym) = 1
+ (msym)->set_target_flag_1 (true)
#define MSYMBOL_SET_RTI(msym) \
- MSYMBOL_TARGET_FLAG_2 (msym) = 1
+ (msym)->set_target_flag_2 (true)
#define MSYMBOL_IS_RTC(msym) \
- MSYMBOL_TARGET_FLAG_1 (msym)
+ (msym)->target_flag_1 ()
#define MSYMBOL_IS_RTI(msym) \
- MSYMBOL_TARGET_FLAG_2 (msym)
+ (msym)->target_flag_2 ()
enum insn_return_kind {
RETURN_RTS,
@@ -215,7 +215,7 @@ m68hc11_get_register_info (struct m68hc11_soft_reg *reg, const char *name)
msymbol = lookup_minimal_symbol (name, NULL, NULL);
if (msymbol.minsym)
{
- reg->addr = BMSYMBOL_VALUE_ADDRESS (msymbol);
+ reg->addr = msymbol.value_address ();
reg->name = xstrdup (name);
/* Keep track of the address range for soft registers. */
@@ -1013,7 +1013,7 @@ m68hc11_print_register (struct gdbarch *gdbarch, struct ui_file *file,
if (regno == HARD_A_REGNUM || regno == HARD_B_REGNUM
|| regno == HARD_CCR_REGNUM || regno == HARD_PAGE_REGNUM)
{
- fprintf_filtered (file, "0x%02x ", (unsigned char) rval);
+ gdb_printf (file, "0x%02x ", (unsigned char) rval);
if (regno != HARD_CCR_REGNUM)
print_longest (file, 'd', 1, rval);
}
@@ -1027,12 +1027,12 @@ m68hc11_print_register (struct gdbarch *gdbarch, struct ui_file *file,
ULONGEST page;
page = get_frame_register_unsigned (frame, HARD_PAGE_REGNUM);
- fprintf_filtered (file, "0x%02x:%04x ", (unsigned) page,
- (unsigned) rval);
+ gdb_printf (file, "0x%02x:%04x ", (unsigned) page,
+ (unsigned) rval);
}
else
{
- fprintf_filtered (file, "0x%04x ", (unsigned) rval);
+ gdb_printf (file, "0x%04x ", (unsigned) rval);
if (regno != HARD_PC_REGNUM && regno != HARD_SP_REGNUM
&& regno != SOFT_FP_REGNUM && regno != M68HC12_HARD_PC_REGNUM)
print_longest (file, 'd', 1, rval);
@@ -1045,15 +1045,15 @@ m68hc11_print_register (struct gdbarch *gdbarch, struct ui_file *file,
int C, Z, N, V;
unsigned char l = rval & 0xff;
- fprintf_filtered (file, "%c%c%c%c%c%c%c%c ",
- l & M6811_S_BIT ? 'S' : '-',
- l & M6811_X_BIT ? 'X' : '-',
- l & M6811_H_BIT ? 'H' : '-',
- l & M6811_I_BIT ? 'I' : '-',
- l & M6811_N_BIT ? 'N' : '-',
- l & M6811_Z_BIT ? 'Z' : '-',
- l & M6811_V_BIT ? 'V' : '-',
- l & M6811_C_BIT ? 'C' : '-');
+ gdb_printf (file, "%c%c%c%c%c%c%c%c ",
+ l & M6811_S_BIT ? 'S' : '-',
+ l & M6811_X_BIT ? 'X' : '-',
+ l & M6811_H_BIT ? 'H' : '-',
+ l & M6811_I_BIT ? 'I' : '-',
+ l & M6811_N_BIT ? 'N' : '-',
+ l & M6811_Z_BIT ? 'Z' : '-',
+ l & M6811_V_BIT ? 'V' : '-',
+ l & M6811_C_BIT ? 'C' : '-');
N = (l & M6811_N_BIT) != 0;
Z = (l & M6811_Z_BIT) != 0;
V = (l & M6811_V_BIT) != 0;
@@ -1061,26 +1061,26 @@ m68hc11_print_register (struct gdbarch *gdbarch, struct ui_file *file,
/* Print flags following the h8300. */
if ((C | Z) == 0)
- fprintf_filtered (file, "u> ");
+ gdb_printf (file, "u> ");
else if ((C | Z) == 1)
- fprintf_filtered (file, "u<= ");
+ gdb_printf (file, "u<= ");
else if (C == 0)
- fprintf_filtered (file, "u< ");
+ gdb_printf (file, "u< ");
if (Z == 0)
- fprintf_filtered (file, "!= ");
+ gdb_printf (file, "!= ");
else
- fprintf_filtered (file, "== ");
+ gdb_printf (file, "== ");
if ((N ^ V) == 0)
- fprintf_filtered (file, ">= ");
+ gdb_printf (file, ">= ");
else
- fprintf_filtered (file, "< ");
+ gdb_printf (file, "< ");
if ((Z | (N ^ V)) == 0)
- fprintf_filtered (file, "> ");
+ gdb_printf (file, "> ");
else
- fprintf_filtered (file, "<= ");
+ gdb_printf (file, "<= ");
}
}
@@ -1096,43 +1096,43 @@ m68hc11_print_registers_info (struct gdbarch *gdbarch, struct ui_file *file,
if (!name || !*name)
return;
- fprintf_filtered (file, "%-10s ", name);
+ gdb_printf (file, "%-10s ", name);
m68hc11_print_register (gdbarch, file, frame, regno);
- fprintf_filtered (file, "\n");
+ gdb_printf (file, "\n");
}
else
{
int i, nr;
- fprintf_filtered (file, "PC=");
+ gdb_printf (file, "PC=");
m68hc11_print_register (gdbarch, file, frame, HARD_PC_REGNUM);
- fprintf_filtered (file, " SP=");
+ gdb_printf (file, " SP=");
m68hc11_print_register (gdbarch, file, frame, HARD_SP_REGNUM);
- fprintf_filtered (file, " FP=");
+ gdb_printf (file, " FP=");
m68hc11_print_register (gdbarch, file, frame, SOFT_FP_REGNUM);
- fprintf_filtered (file, "\nCCR=");
+ gdb_printf (file, "\nCCR=");
m68hc11_print_register (gdbarch, file, frame, HARD_CCR_REGNUM);
- fprintf_filtered (file, "\nD=");
+ gdb_printf (file, "\nD=");
m68hc11_print_register (gdbarch, file, frame, HARD_D_REGNUM);
- fprintf_filtered (file, " X=");
+ gdb_printf (file, " X=");
m68hc11_print_register (gdbarch, file, frame, HARD_X_REGNUM);
- fprintf_filtered (file, " Y=");
+ gdb_printf (file, " Y=");
m68hc11_print_register (gdbarch, file, frame, HARD_Y_REGNUM);
m68gc11_gdbarch_tdep *tdep = (m68gc11_gdbarch_tdep *) gdbarch_tdep (gdbarch);
if (tdep->use_page_register)
{
- fprintf_filtered (file, "\nPage=");
+ gdb_printf (file, "\nPage=");
m68hc11_print_register (gdbarch, file, frame, HARD_PAGE_REGNUM);
}
- fprintf_filtered (file, "\n");
+ gdb_printf (file, "\n");
nr = 0;
for (i = SOFT_D1_REGNUM; i < M68HC11_ALL_REGS; i++)
@@ -1141,16 +1141,16 @@ m68hc11_print_registers_info (struct gdbarch *gdbarch, struct ui_file *file,
if (soft_regs[i].name == 0)
continue;
- fprintf_filtered (file, "D%d=", i - SOFT_D1_REGNUM + 1);
+ gdb_printf (file, "D%d=", i - SOFT_D1_REGNUM + 1);
m68hc11_print_register (gdbarch, file, frame, i);
nr++;
if ((nr % 8) == 7)
- fprintf_filtered (file, "\n");
+ gdb_printf (file, "\n");
else
- fprintf_filtered (file, " ");
+ gdb_printf (file, " ");
}
if (nr && (nr % 8) != 7)
- fprintf_filtered (file, "\n");
+ gdb_printf (file, "\n");
}
}
@@ -1346,8 +1346,8 @@ m68hc11_elf_make_msymbol_special (asymbol *sym, struct minimal_symbol *msym)
/* 68HC11/68HC12 register groups.
Identify real hard registers and soft registers used by gcc. */
-static struct reggroup *m68hc11_soft_reggroup;
-static struct reggroup *m68hc11_hard_reggroup;
+static const reggroup *m68hc11_soft_reggroup;
+static const reggroup *m68hc11_hard_reggroup;
static void
m68hc11_init_reggroups (void)
@@ -1361,18 +1361,11 @@ m68hc11_add_reggroups (struct gdbarch *gdbarch)
{
reggroup_add (gdbarch, m68hc11_hard_reggroup);
reggroup_add (gdbarch, m68hc11_soft_reggroup);
- reggroup_add (gdbarch, general_reggroup);
- reggroup_add (gdbarch, float_reggroup);
- reggroup_add (gdbarch, all_reggroup);
- reggroup_add (gdbarch, save_reggroup);
- reggroup_add (gdbarch, restore_reggroup);
- reggroup_add (gdbarch, vector_reggroup);
- reggroup_add (gdbarch, system_reggroup);
}
static int
m68hc11_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
- struct reggroup *group)
+ const struct reggroup *group)
{
/* We must save the real hard register as well as gcc
soft registers including the frame pointer. */
diff --git a/gdb/machoread.c b/gdb/machoread.c
index 14a7428a979..8c4b08f8cea 100644
--- a/gdb/machoread.c
+++ b/gdb/machoread.c
@@ -404,7 +404,7 @@ macho_resolve_oso_sym_with_minsym (struct objfile *main_objfile, asymbol *sym)
return 0;
}
else
- return BMSYMBOL_VALUE_ADDRESS (msym);
+ return msym.value_address ();
}
/* Add oso file OSO/ABFD as a symbol file. */
@@ -860,7 +860,7 @@ macho_symfile_read (struct objfile *objfile, symfile_add_flags symfile_flags)
if (dwarf2_has_info (objfile, NULL))
{
/* DWARF 2 sections */
- dwarf2_build_psymtabs (objfile);
+ dwarf2_initialize_objfile (objfile);
}
/* Then the oso. */
diff --git a/gdb/macrocmd.c b/gdb/macrocmd.c
index 5f40a60909a..5626c7102f8 100644
--- a/gdb/macrocmd.c
+++ b/gdb/macrocmd.c
@@ -41,7 +41,7 @@ static struct cmd_list_element *macrolist;
static void
macro_inform_no_debuginfo (void)
{
- puts_filtered ("GDB has no preprocessor macro information for that code.\n");
+ gdb_puts ("GDB has no preprocessor macro information for that code.\n");
}
static void
@@ -63,9 +63,9 @@ macro_expand_command (const char *exp, int from_tty)
{
gdb::unique_xmalloc_ptr<char> expanded = macro_expand (exp, *ms);
- fputs_filtered ("expands to: ", gdb_stdout);
- fputs_filtered (expanded.get (), gdb_stdout);
- fputs_filtered ("\n", gdb_stdout);
+ gdb_puts ("expands to: ");
+ gdb_puts (expanded.get ());
+ gdb_puts ("\n");
}
else
macro_inform_no_debuginfo ();
@@ -91,9 +91,9 @@ macro_expand_once_command (const char *exp, int from_tty)
{
gdb::unique_xmalloc_ptr<char> expanded = macro_expand_once (exp, *ms);
- fputs_filtered ("expands to: ", gdb_stdout);
- fputs_filtered (expanded.get (), gdb_stdout);
- fputs_filtered ("\n", gdb_stdout);
+ gdb_puts ("expands to: ");
+ gdb_puts (expanded.get ());
+ gdb_puts ("\n");
}
else
macro_inform_no_debuginfo ();
@@ -109,17 +109,17 @@ show_pp_source_pos (struct ui_file *stream,
int line)
{
std::string fullname = macro_source_fullname (file);
- fprintf_filtered (stream, "%ps:%d\n",
- styled_string (file_name_style.style (),
- fullname.c_str ()),
- line);
+ gdb_printf (stream, "%ps:%d\n",
+ styled_string (file_name_style.style (),
+ fullname.c_str ()),
+ line);
while (file->included_by)
{
fullname = macro_source_fullname (file->included_by);
- fputs_filtered (_(" included at "), stream);
+ gdb_puts (_(" included at "), stream);
fputs_styled (fullname.c_str (), file_name_style.style (), stream);
- fprintf_filtered (stream, ":%d\n", file->included_at_line);
+ gdb_printf (stream, ":%d\n", file->included_at_line);
file = file->included_by;
}
}
@@ -137,32 +137,32 @@ print_macro_definition (const char *name,
struct macro_source_file *file,
int line)
{
- fprintf_filtered (gdb_stdout, "Defined at ");
+ gdb_printf ("Defined at ");
show_pp_source_pos (gdb_stdout, file, line);
if (line != 0)
- fprintf_filtered (gdb_stdout, "#define %s", name);
+ gdb_printf ("#define %s", name);
else
- fprintf_filtered (gdb_stdout, "-D%s", name);
+ gdb_printf ("-D%s", name);
if (d->kind == macro_function_like)
{
int i;
- fputs_filtered ("(", gdb_stdout);
+ gdb_puts ("(");
for (i = 0; i < d->argc; i++)
{
- fputs_filtered (d->argv[i], gdb_stdout);
+ gdb_puts (d->argv[i]);
if (i + 1 < d->argc)
- fputs_filtered (", ", gdb_stdout);
+ gdb_puts (", ");
}
- fputs_filtered (")", gdb_stdout);
+ gdb_puts (")");
}
if (line != 0)
- fprintf_filtered (gdb_stdout, " %s\n", d->replacement);
+ gdb_printf (" %s\n", d->replacement);
else
- fprintf_filtered (gdb_stdout, "=%s\n", d->replacement);
+ gdb_printf ("=%s\n", d->replacement);
}
/* The implementation of the `info macro' command. */
@@ -229,10 +229,9 @@ info_macro_command (const char *args, int from_tty)
}
else
{
- fprintf_filtered (gdb_stdout,
- "The symbol `%s' has no definition as a C/C++"
- " preprocessor macro\n"
- "at ", name);
+ gdb_printf ("The symbol `%s' has no definition as a C/C++"
+ " preprocessor macro\n"
+ "at ", name);
show_pp_source_pos (gdb_stdout, ms->file, ms->line);
}
}
@@ -424,18 +423,18 @@ static void
print_one_macro (const char *name, const struct macro_definition *macro,
struct macro_source_file *source, int line)
{
- fprintf_filtered (gdb_stdout, "macro define %s", name);
+ gdb_printf ("macro define %s", name);
if (macro->kind == macro_function_like)
{
int i;
- fprintf_filtered (gdb_stdout, "(");
+ gdb_printf ("(");
for (i = 0; i < macro->argc; ++i)
- fprintf_filtered (gdb_stdout, "%s%s", (i > 0) ? ", " : "",
- macro->argv[i]);
- fprintf_filtered (gdb_stdout, ")");
+ gdb_printf ("%s%s", (i > 0) ? ", " : "",
+ macro->argv[i]);
+ gdb_printf (")");
}
- fprintf_filtered (gdb_stdout, " %s\n", macro->replacement);
+ gdb_printf (" %s\n", macro->replacement);
}
diff --git a/gdb/macroexp.c b/gdb/macroexp.c
index 97adb6e31a2..be5723fe600 100644
--- a/gdb/macroexp.c
+++ b/gdb/macroexp.c
@@ -18,7 +18,7 @@
along with this program. If not, see <http://www.gnu.org/licenses/>. */
#include "defs.h"
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
#include "macrotab.h"
#include "macroexp.h"
#include "macroscope.h"
diff --git a/gdb/macroscope.c b/gdb/macroscope.c
index 02070967579..93f561acccd 100644
--- a/gdb/macroscope.c
+++ b/gdb/macroscope.c
@@ -43,13 +43,14 @@ sal_macro_scope (struct symtab_and_line sal)
if (sal.symtab == NULL)
return NULL;
- cust = SYMTAB_COMPUNIT (sal.symtab);
- if (COMPUNIT_MACRO_TABLE (cust) == NULL)
+
+ cust = sal.symtab->compunit ();
+ if (cust->macro_table () == NULL)
return NULL;
gdb::unique_xmalloc_ptr<struct macro_scope> ms (XNEW (struct macro_scope));
- main_file = macro_main (COMPUNIT_MACRO_TABLE (cust));
+ main_file = macro_main (cust->macro_table ());
inclusion = macro_lookup_inclusion (main_file, sal.symtab->filename);
if (inclusion)
diff --git a/gdb/macrotab.c b/gdb/macrotab.c
index 479d08f13c6..108e6f1bbae 100644
--- a/gdb/macrotab.c
+++ b/gdb/macrotab.c
@@ -18,7 +18,8 @@
along with this program. If not, see <http://www.gnu.org/licenses/>. */
#include "defs.h"
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
+#include "gdbsupport/pathstuff.h"
#include "splay-tree.h"
#include "filenames.h"
#include "symtab.h"
@@ -1066,10 +1067,10 @@ macro_source_fullname (struct macro_source_file *file)
const char *comp_dir = NULL;
if (file->table->compunit_symtab != NULL)
- comp_dir = COMPUNIT_DIRNAME (file->table->compunit_symtab);
+ comp_dir = file->table->compunit_symtab->dirname ();
if (comp_dir == NULL || IS_ABSOLUTE_PATH (file->filename))
return file->filename;
- return std::string (comp_dir) + SLASH_STRING + file->filename;
+ return path_join (comp_dir, file->filename);
}
diff --git a/gdb/main.c b/gdb/main.c
index 278b901c768..ec2b7b01752 100644
--- a/gdb/main.c
+++ b/gdb/main.c
@@ -61,9 +61,6 @@
do_setshow_command will free it. */
char *interpreter_p;
-/* Whether dbx commands will be handled. */
-int dbx_commands = 0;
-
/* System root path, used to find libraries etc. */
std::string gdb_sysroot;
@@ -122,7 +119,7 @@ set_gdb_data_directory (const char *new_datadir)
{
int save_errno = errno;
- fprintf_unfiltered (gdb_stderr, "Warning: ");
+ gdb_printf (gdb_stderr, "Warning: ");
print_sys_errmsg (new_datadir, save_errno);
}
else if (!S_ISDIR (st.st_mode))
@@ -136,12 +133,7 @@ set_gdb_data_directory (const char *new_datadir)
"../foo" and "../foo" doesn't exist then we'll record $(pwd)/../foo which
isn't canonical, but that's ok. */
if (!IS_ABSOLUTE_PATH (gdb_datadir.c_str ()))
- {
- gdb::unique_xmalloc_ptr<char> abs_datadir
- = gdb_abspath (gdb_datadir.c_str ());
-
- gdb_datadir = abs_datadir.get ();
- }
+ gdb_datadir = gdb_abspath (gdb_datadir.c_str ());
}
/* Relocate a file or directory. PROGNAME is the name by which gdb
@@ -766,7 +758,6 @@ captured_main_1 (struct captured_main_args *context)
static struct option long_options[] =
{
{"tui", no_argument, 0, OPT_TUI},
- {"dbx", no_argument, &dbx_commands, 1},
{"readnow", no_argument, NULL, OPT_READNOW},
{"readnever", no_argument, NULL, OPT_READNEVER},
{"r", no_argument, NULL, OPT_READNOW},
@@ -1098,11 +1089,11 @@ captured_main_1 (struct captured_main_args *context)
/* Any argument left on the command line is unexpected and
will be ignored. Inform the user. */
if (optind < argc)
- fprintf_unfiltered (gdb_stderr,
- _("Excess command line "
- "arguments ignored. (%s%s)\n"),
- argv[optind],
- (optind == argc - 1) ? "" : " ...");
+ gdb_printf (gdb_stderr,
+ _("Excess command line "
+ "arguments ignored. (%s%s)\n"),
+ argv[optind],
+ (optind == argc - 1) ? "" : " ...");
}
/* Lookup gdbinit files. Note that the gdbinit file name may be
@@ -1121,8 +1112,7 @@ captured_main_1 (struct captured_main_args *context)
if (print_version)
{
print_gdb_version (gdb_stdout, false);
- wrap_here ("");
- printf_filtered ("\n");
+ gdb_printf ("\n");
exit (0);
}
@@ -1135,8 +1125,7 @@ captured_main_1 (struct captured_main_args *context)
if (print_configuration)
{
print_gdb_configuration (gdb_stdout);
- wrap_here ("");
- printf_filtered ("\n");
+ gdb_printf ("\n");
exit (0);
}
@@ -1150,9 +1139,8 @@ captured_main_1 (struct captured_main_args *context)
about to read a symbol file (possibly slowly). */
print_gdb_version (gdb_stdout, true);
if (symarg)
- printf_filtered ("..");
- wrap_here ("");
- printf_filtered ("\n");
+ gdb_printf ("..");
+ gdb_printf ("\n");
gdb_flush (gdb_stdout); /* Force to screen during slow
operations. */
}
@@ -1171,9 +1159,8 @@ captured_main_1 (struct captured_main_args *context)
about to read a symbol file (possibly slowly). */
print_gdb_version (gdb_stdout, true);
if (symarg)
- printf_filtered ("..");
- wrap_here ("");
- printf_filtered ("\n");
+ gdb_printf ("..");
+ gdb_printf ("\n");
gdb_flush (gdb_stdout); /* Force to screen during slow
operations. */
}
@@ -1391,12 +1378,12 @@ print_gdb_help (struct ui_file *stream)
/* Note: The options in the list below are only approximately sorted
in the alphabetical order, so as to group closely related options
together. */
- fputs_unfiltered (_("\
+ gdb_puts (_("\
This is the GNU debugger. Usage:\n\n\
gdb [options] [executable-file [core-file or process-id]]\n\
gdb [options] --args executable-file [inferior-arguments ...]\n\n\
"), stream);
- fputs_unfiltered (_("\
+ gdb_puts (_("\
Selection of debuggee and its files:\n\n\
--args Arguments after executable-file are passed to inferior.\n\
--core=COREFILE Analyze the core dump COREFILE.\n\
@@ -1409,7 +1396,7 @@ Selection of debuggee and its files:\n\n\
--readnever Do not read symbol files.\n\
--write Set writing into executable and core files.\n\n\
"), stream);
- fputs_unfiltered (_("\
+ gdb_puts (_("\
Initial commands and command files:\n\n\
--command=FILE, -x Execute GDB commands from FILE.\n\
--init-command=FILE, -ix\n\
@@ -1423,7 +1410,7 @@ Initial commands and command files:\n\n\
--nh Do not read ~/.gdbinit.\n\
--nx Do not read any .gdbinit files in any directory.\n\n\
"), stream);
- fputs_unfiltered (_("\
+ gdb_puts (_("\
Output and user interface control:\n\n\
--fullname Output information used by emacs-GDB interface.\n\
--interpreter=INTERP\n\
@@ -1433,16 +1420,15 @@ Output and user interface control:\n\n\
--nw Do not use the GUI interface.\n\
"), stream);
#if defined(TUI)
- fputs_unfiltered (_("\
+ gdb_puts (_("\
--tui Use a terminal user interface.\n\
"), stream);
#endif
- fputs_unfiltered (_("\
- --dbx DBX compatibility mode.\n\
+ gdb_puts (_("\
-q, --quiet, --silent\n\
Do not print version number on startup.\n\n\
"), stream);
- fputs_unfiltered (_("\
+ gdb_puts (_("\
Operating modes:\n\n\
--batch Exit after processing options.\n\
--batch-silent Like --batch, but suppress all gdb stdout output.\n\
@@ -1459,18 +1445,18 @@ Other options:\n\n\
--data-directory=DIR, -D\n\
Set GDB's data-directory to DIR.\n\
"), stream);
- fputs_unfiltered (_("\n\
+ gdb_puts (_("\n\
At startup, GDB reads the following early init files and executes their\n\
commands:\n\
"), stream);
if (!home_gdbearlyinit.empty ())
- fprintf_unfiltered (stream, _("\
+ gdb_printf (stream, _("\
* user-specific early init file: %s\n\
"), home_gdbearlyinit.c_str ());
if (home_gdbearlyinit.empty ())
- fprintf_unfiltered (stream, _("\
+ gdb_printf (stream, _("\
None found.\n"));
- fputs_unfiltered (_("\n\
+ gdb_puts (_("\n\
At startup, GDB reads the following init files and executes their commands:\n\
"), stream);
if (!system_gdbinit.empty ())
@@ -1482,32 +1468,32 @@ At startup, GDB reads the following init files and executes their commands:\n\
if (idx < system_gdbinit.size () - 1)
output += ", ";
}
- fprintf_unfiltered (stream, _("\
+ gdb_printf (stream, _("\
* system-wide init files: %s\n\
"), output.c_str ());
}
if (!home_gdbinit.empty ())
- fprintf_unfiltered (stream, _("\
+ gdb_printf (stream, _("\
* user-specific init file: %s\n\
"), home_gdbinit.c_str ());
if (!local_gdbinit.empty ())
- fprintf_unfiltered (stream, _("\
+ gdb_printf (stream, _("\
* local init file (see also 'set auto-load local-gdbinit'): ./%s\n\
"), local_gdbinit.c_str ());
if (system_gdbinit.empty () && home_gdbinit.empty ()
&& local_gdbinit.empty ())
- fprintf_unfiltered (stream, _("\
+ gdb_printf (stream, _("\
None found.\n"));
- fputs_unfiltered (_("\n\
+ gdb_puts (_("\n\
For more information, type \"help\" from within GDB, or consult the\n\
GDB manual (available as on-line info or a printed manual).\n\
"), stream);
if (REPORT_BUGS_TO[0] && stream == gdb_stdout)
- fprintf_unfiltered (stream, _("\n\
-Report bugs to %s.\n\
-"), REPORT_BUGS_TO);
+ gdb_printf (stream, _("\n\
+Report bugs to %ps.\n\
+"), styled_string (file_name_style.style (), REPORT_BUGS_TO));
if (stream == gdb_stdout)
- fprintf_unfiltered (stream, _("\n\
+ gdb_printf (stream, _("\n\
You can ask GDB-related questions on the GDB users mailing list\n\
(gdb@sourceware.org) or on GDB's IRC channel (#gdb on Freenode).\n"));
}
diff --git a/gdb/maint-test-options.c b/gdb/maint-test-options.c
index b9b538d78bb..14808972467 100644
--- a/gdb/maint-test-options.c
+++ b/gdb/maint-test-options.c
@@ -143,22 +143,22 @@ struct test_options_opts
arguments. */
void dump (ui_file *file, const char *args) const
{
- fprintf_filtered (file,
- _("-flag %d -xx1 %d -xx2 %d -bool %d "
- "-enum %s -uint %s -zuint-unl %s -string '%s' -- %s\n"),
- flag_opt,
- xx1_opt,
- xx2_opt,
- boolean_opt,
- enum_opt,
- (uint_opt == UINT_MAX
- ? "unlimited"
- : pulongest (uint_opt)),
- (zuint_unl_opt == -1
- ? "unlimited"
- : plongest (zuint_unl_opt)),
- string_opt.c_str (),
- args);
+ gdb_printf (file,
+ _("-flag %d -xx1 %d -xx2 %d -bool %d "
+ "-enum %s -uint %s -zuint-unl %s -string '%s' -- %s\n"),
+ flag_opt,
+ xx1_opt,
+ xx2_opt,
+ boolean_opt,
+ enum_opt,
+ (uint_opt == UINT_MAX
+ ? "unlimited"
+ : pulongest (uint_opt)),
+ (zuint_unl_opt == -1
+ ? "unlimited"
+ : plongest (zuint_unl_opt)),
+ string_opt.c_str (),
+ args);
}
};
@@ -279,7 +279,7 @@ static void
maintenance_show_test_options_completion_result (const char *args,
int from_tty)
{
- puts_filtered (maintenance_test_options_command_completion_text.c_str ());
+ gdb_puts (maintenance_test_options_command_completion_text.c_str ());
}
/* Save the completion result in the global variables read by the
@@ -295,8 +295,7 @@ save_completion_result (const test_options_opts &opts, bool res,
stream.puts ("1 ");
opts.dump (&stream, text);
- maintenance_test_options_command_completion_text
- = std::move (stream.string ());
+ maintenance_test_options_command_completion_text = stream.release ();
}
else
{
diff --git a/gdb/maint-test-settings.c b/gdb/maint-test-settings.c
index 5607b921545..fbcce9dd007 100644
--- a/gdb/maint-test-settings.c
+++ b/gdb/maint-test-settings.c
@@ -75,7 +75,7 @@ maintenance_show_test_settings_value_cmd
(struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, (("%s\n")), value);
+ gdb_printf (file, (("%s\n")), value);
}
diff --git a/gdb/maint.c b/gdb/maint.c
index 3584974c9e1..31b8fd8322e 100644
--- a/gdb/maint.c
+++ b/gdb/maint.c
@@ -41,16 +41,13 @@
#include "maint.h"
#include "gdbsupport/selftest.h"
#include "inferior.h"
+#include "gdbsupport/thread-pool.h"
#include "cli/cli-decode.h"
#include "cli/cli-utils.h"
#include "cli/cli-setshow.h"
#include "cli/cli-cmds.h"
-#if CXX_STD_THREAD
-#include "gdbsupport/thread-pool.h"
-#endif
-
static void maintenance_do_deprecate (const char *, int);
#ifndef _WIN32
@@ -109,14 +106,14 @@ maintenance_demangler_warning (const char *args, int from_tty)
static void
maintenance_demangle (const char *args, int from_tty)
{
- printf_filtered (_("This command has been moved to \"demangle\".\n"));
+ gdb_printf (_("This command has been moved to \"demangle\".\n"));
}
static void
maintenance_time_display (const char *args, int from_tty)
{
if (args == NULL || *args == '\0')
- printf_filtered (_("\"maintenance time\" takes a numeric argument.\n"));
+ gdb_printf (_("\"maintenance time\" takes a numeric argument.\n"));
else
set_per_command_time (strtol (args, NULL, 10));
}
@@ -125,7 +122,7 @@ static void
maintenance_space_display (const char *args, int from_tty)
{
if (args == NULL || *args == '\0')
- printf_filtered ("\"maintenance space\" takes a numeric argument.\n");
+ gdb_printf ("\"maintenance space\" takes a numeric argument.\n");
else
set_per_command_space (strtol (args, NULL, 10));
}
@@ -220,7 +217,7 @@ print_bfd_flags (flagword flags)
for (const auto &f : bfd_flag_info)
{
if (flags & f.value)
- printf_filtered (" %s", f.name);
+ gdb_printf (" %s", f.name);
}
}
@@ -229,13 +226,13 @@ maint_print_section_info (const char *name, flagword flags,
CORE_ADDR addr, CORE_ADDR endaddr,
unsigned long filepos, int addr_size)
{
- printf_filtered (" %s", hex_string_custom (addr, addr_size));
- printf_filtered ("->%s", hex_string_custom (endaddr, addr_size));
- printf_filtered (" at %s",
- hex_string_custom ((unsigned long) filepos, 8));
- printf_filtered (": %s", name);
+ gdb_printf (" %s", hex_string_custom (addr, addr_size));
+ gdb_printf ("->%s", hex_string_custom (endaddr, addr_size));
+ gdb_printf (" at %s",
+ hex_string_custom ((unsigned long) filepos, 8));
+ gdb_printf (": %s", name);
print_bfd_flags (flags);
- printf_filtered ("\n");
+ gdb_printf ("\n");
}
/* Return the number of digits required to display COUNT in decimal.
@@ -261,7 +258,7 @@ print_section_index (bfd *abfd,
std::string result
= string_printf (" [%d] ", gdb_bfd_section_index (abfd, asect));
/* The '+ 4' for the leading and trailing characters. */
- printf_filtered ("%-*s", (index_digits + 4), result.c_str ());
+ gdb_printf ("%-*s", (index_digits + 4), result.c_str ());
}
/* Print information about ASECT from ABFD. The section will be printed using
@@ -363,11 +360,11 @@ static void
maint_print_all_sections (const char *header, bfd *abfd, objfile *objfile,
const char *arg)
{
- puts_filtered (header);
- wrap_here (" ");
- printf_filtered ("`%s', ", bfd_get_filename (abfd));
- wrap_here (" ");
- printf_filtered (_("file type %s.\n"), bfd_get_target (abfd));
+ gdb_puts (header);
+ gdb_stdout->wrap_here (8);
+ gdb_printf ("`%s', ", bfd_get_filename (abfd));
+ gdb_stdout->wrap_here (8);
+ gdb_printf (_("file type %s.\n"), bfd_get_target (abfd));
int section_count = gdb_bfd_count_sections (abfd);
int digits = index_digits (section_count);
@@ -497,8 +494,8 @@ maintenance_info_target_sections (const char *arg, int from_tty)
gdbarch = gdbarch_from_bfd (abfd);
addr_size = gdbarch_addr_bit (gdbarch) / 8;
- printf_filtered (_("From '%s', file type %s:\n"),
- bfd_get_filename (abfd), bfd_get_target (abfd));
+ gdb_printf (_("From '%s', file type %s:\n"),
+ bfd_get_filename (abfd), bfd_get_target (abfd));
}
print_bfd_section_info (abfd,
sec.the_bfd_section,
@@ -506,11 +503,11 @@ maintenance_info_target_sections (const char *arg, int from_tty)
digits);
/* The magic '8 + digits' here ensures that the 'Start' is aligned
with the output of print_bfd_section_info. */
- printf_filtered ("%*sStart: %s, End: %s, Owner token: %p\n",
- (8 + digits), "",
- hex_string_custom (sec.addr, addr_size),
- hex_string_custom (sec.endaddr, addr_size),
- sec.owner);
+ gdb_printf ("%*sStart: %s, End: %s, Owner token: %p\n",
+ (8 + digits), "",
+ hex_string_custom (sec.addr, addr_size),
+ hex_string_custom (sec.endaddr, addr_size),
+ sec.owner);
}
}
@@ -588,7 +585,7 @@ maintenance_translate_address (const char *arg, int from_tty)
{
const char *symbol_name = sym.minsym->print_name ();
const char *symbol_offset
- = pulongest (address - BMSYMBOL_VALUE_ADDRESS (sym));
+ = pulongest (address - sym.value_address ());
sect = sym.obj_section ();
if (sect != NULL)
@@ -603,21 +600,21 @@ maintenance_translate_address (const char *arg, int from_tty)
obj_name = objfile_name (sect->objfile);
if (current_program_space->multi_objfile_p ())
- printf_filtered (_("%s + %s in section %s of %s\n"),
- symbol_name, symbol_offset,
- section_name, obj_name);
+ gdb_printf (_("%s + %s in section %s of %s\n"),
+ symbol_name, symbol_offset,
+ section_name, obj_name);
else
- printf_filtered (_("%s + %s in section %s\n"),
- symbol_name, symbol_offset, section_name);
+ gdb_printf (_("%s + %s in section %s\n"),
+ symbol_name, symbol_offset, section_name);
}
else
- printf_filtered (_("%s + %s\n"), symbol_name, symbol_offset);
+ gdb_printf (_("%s + %s\n"), symbol_name, symbol_offset);
}
else if (sect)
- printf_filtered (_("no symbol at %s:%s\n"),
- sect->the_bfd_section->name, hex_string (address));
+ gdb_printf (_("no symbol at %s:%s\n"),
+ sect->the_bfd_section->name, hex_string (address));
else
- printf_filtered (_("no symbol at %s\n"), hex_string (address));
+ gdb_printf (_("no symbol at %s\n"), hex_string (address));
return;
}
@@ -632,7 +629,7 @@ maintenance_deprecate (const char *args, int from_tty)
{
if (args == NULL || *args == '\0')
{
- printf_filtered (_("\"maintenance deprecate\" takes an argument,\n\
+ gdb_printf (_("\"maintenance deprecate\" takes an argument,\n\
the command you want to deprecate, and optionally the replacement command\n\
enclosed in quotes.\n"));
}
@@ -646,7 +643,7 @@ maintenance_undeprecate (const char *args, int from_tty)
{
if (args == NULL || *args == '\0')
{
- printf_filtered (_("\"maintenance undeprecate\" takes an argument, \n\
+ gdb_printf (_("\"maintenance undeprecate\" takes an argument, \n\
the command you want to undeprecate.\n"));
}
@@ -677,7 +674,7 @@ maintenance_do_deprecate (const char *text, int deprecate)
if (!lookup_cmd_composition (text, &alias, &prefix_cmd, &cmd))
{
- printf_filtered (_("Can't find command '%s' to deprecate.\n"), text);
+ gdb_printf (_("Can't find command '%s' to deprecate.\n"), text);
return;
}
@@ -777,7 +774,7 @@ static void
show_maintenance_profile_p (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Internal profiling is %s.\n"), value);
+ gdb_printf (file, _("Internal profiling is %s.\n"), value);
}
#ifdef HAVE__ETEXT
@@ -874,9 +871,9 @@ maintenance_show_worker_threads (struct ui_file *file, int from_tty,
#if CXX_STD_THREAD
if (n_worker_threads == -1)
{
- fprintf_filtered (file, _("The number of worker threads GDB "
- "can use is unlimited (currently %zu).\n"),
- gdb::thread_pool::g_thread_pool->thread_count ());
+ gdb_printf (file, _("The number of worker threads GDB "
+ "can use is unlimited (currently %zu).\n"),
+ gdb::thread_pool::g_thread_pool->thread_count ());
return;
}
#endif
@@ -885,9 +882,9 @@ maintenance_show_worker_threads (struct ui_file *file, int from_tty,
#if CXX_STD_THREAD
report_threads = n_worker_threads;
#endif
- fprintf_filtered (file, _("The number of worker threads GDB "
- "can use is %d.\n"),
- report_threads);
+ gdb_printf (file, _("The number of worker threads GDB "
+ "can use is %d.\n"),
+ report_threads);
}
@@ -946,9 +943,9 @@ count_symtabs_and_blocks (int *nr_symtabs_ptr, int *nr_compunit_symtabs_ptr,
for (compunit_symtab *cu : o->compunits ())
{
++nr_compunit_symtabs;
- nr_blocks += BLOCKVECTOR_NBLOCKS (COMPUNIT_BLOCKVECTOR (cu));
- nr_symtabs += std::distance (compunit_filetabs (cu).begin (),
- compunit_filetabs (cu).end ());
+ nr_blocks += cu->blockvector ()->num_blocks ();
+ nr_symtabs += std::distance (cu->filetabs ().begin (),
+ cu->filetabs ().end ());
}
}
}
@@ -990,11 +987,12 @@ scoped_command_stats::~scoped_command_stats ()
/* Subtract time spend in prompt_for_continue from walltime. */
wall_time -= get_prompt_for_continue_wait_time ();
- printf_unfiltered (!m_msg_type
- ? _("Startup time: %.6f (cpu), %.6f (wall)\n")
- : _("Command execution time: %.6f (cpu), %.6f (wall)\n"),
- duration<double> (cmd_time).count (),
- duration<double> (wall_time).count ());
+ gdb_printf (gdb_stdlog,
+ !m_msg_type
+ ? _("Startup time: %.6f (cpu), %.6f (wall)\n")
+ : _("Command execution time: %.6f (cpu), %.6f (wall)\n"),
+ duration<double> (cmd_time).count (),
+ duration<double> (wall_time).count ());
}
if (m_space_enabled && per_command_space)
@@ -1005,12 +1003,13 @@ scoped_command_stats::~scoped_command_stats ()
long space_now = lim - lim_at_start;
long space_diff = space_now - m_start_space;
- printf_unfiltered (!m_msg_type
- ? _("Space used: %ld (%s%ld during startup)\n")
- : _("Space used: %ld (%s%ld for this command)\n"),
- space_now,
- (space_diff >= 0 ? "+" : ""),
- space_diff);
+ gdb_printf (gdb_stdlog,
+ !m_msg_type
+ ? _("Space used: %ld (%s%ld during startup)\n")
+ : _("Space used: %ld (%s%ld for this command)\n"),
+ space_now,
+ (space_diff >= 0 ? "+" : ""),
+ space_diff);
#endif
}
@@ -1019,16 +1018,17 @@ scoped_command_stats::~scoped_command_stats ()
int nr_symtabs, nr_compunit_symtabs, nr_blocks;
count_symtabs_and_blocks (&nr_symtabs, &nr_compunit_symtabs, &nr_blocks);
- printf_unfiltered (_("#symtabs: %d (+%d),"
- " #compunits: %d (+%d),"
- " #blocks: %d (+%d)\n"),
- nr_symtabs,
- nr_symtabs - m_start_nr_symtabs,
- nr_compunit_symtabs,
- (nr_compunit_symtabs
- - m_start_nr_compunit_symtabs),
- nr_blocks,
- nr_blocks - m_start_nr_blocks);
+ gdb_printf (gdb_stdlog,
+ _("#symtabs: %d (+%d),"
+ " #compunits: %d (+%d),"
+ " #blocks: %d (+%d)\n"),
+ nr_symtabs,
+ nr_symtabs - m_start_nr_symtabs,
+ nr_compunit_symtabs,
+ (nr_compunit_symtabs
+ - m_start_nr_compunit_symtabs),
+ nr_blocks,
+ nr_blocks - m_start_nr_blocks);
}
}
@@ -1095,7 +1095,7 @@ scoped_command_stats::print_time (const char *msg)
char out[100];
strftime (out, sizeof (out), "%F %H:%M:%S", &tm);
- printf_unfiltered ("%s.%03d - %s\n", out, (int) millis, msg);
+ gdb_printf (gdb_stdlog, "%s.%03d - %s\n", out, (int) millis, msg);
}
/* Handle unknown "mt set per-command" arguments.
@@ -1161,7 +1161,7 @@ maintenance_selftest (const char *args, int from_tty)
const gdb_argv argv (args);
selftests::run_tests (argv.as_array_view (), opts.verbose);
#else
- printf_filtered (_("\
+ gdb_printf (_("\
Selftests have been disabled for this build.\n"));
#endif
}
@@ -1181,11 +1181,11 @@ maintenance_selftest_completer (cmd_list_element *cmd,
return;
#if GDB_SELF_TEST
- selftests::for_each_selftest ([&tracker, text] (const std::string &name)
+ for (const auto &test : selftests::all_selftests ())
{
- if (startswith (name.c_str (), text))
- tracker.add_completion (make_unique_xstrdup (name.c_str ()));
- });
+ if (startswith (test.name.c_str (), text))
+ tracker.add_completion (make_unique_xstrdup (test.name.c_str ()));
+ }
#endif
}
@@ -1193,12 +1193,11 @@ static void
maintenance_info_selftests (const char *arg, int from_tty)
{
#if GDB_SELF_TEST
- printf_filtered ("Registered selftests:\n");
- selftests::for_each_selftest ([] (const std::string &name) {
- printf_filtered (" - %s\n", name.c_str ());
- });
+ gdb_printf ("Registered selftests:\n");
+ for (const auto &test : selftests::all_selftests ())
+ gdb_printf (" - %s\n", test.name.c_str ());
#else
- printf_filtered (_("\
+ gdb_printf (_("\
Selftests have been disabled for this build.\n"));
#endif
}
diff --git a/gdb/make-target-delegates b/gdb/make-target-delegates
deleted file mode 100755
index f759b5507ca..00000000000
--- a/gdb/make-target-delegates
+++ /dev/null
@@ -1,421 +0,0 @@
-#!/usr/bin/perl
-
-# Copyright (C) 2013-2022 Free Software Foundation, Inc.
-#
-# This file is part of GDB.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-
-# Usage:
-# make-target-delegates target.h > target-delegates.c
-
-# The line we search for in target.h that marks where we should start
-# looking for methods.
-$TRIGGER = qr,^struct target_ops$,;
-# The end of the methods part.
-$ENDER = qr,^\s*};$,;
-
-# Match a C symbol.
-$SYMBOL = qr,[a-zA-Z_][a-zA-Z0-9_]*,;
-# Match the name part of a method in struct target_ops.
-$NAME_PART = qr,(?<name>${SYMBOL}+)\s,;
-# Match the arguments to a method.
-$ARGS_PART = qr,(?<args>\(.*\)),;
-# We strip the indentation so here we only need the caret.
-$INTRO_PART = qr,^,;
-
-$POINTER_PART = qr,\s*(\*)?\s*,;
-
-# Match a C++ symbol, including scope operators and template
-# parameters. E.g., 'std::vector<something>'.
-$CP_SYMBOL = qr,[a-zA-Z_][a-zA-Z0-9_<>:]*,;
-# Match the return type when it is "ordinary".
-$SIMPLE_RETURN_PART = qr,((struct|class|enum|union)\s+)?${CP_SYMBOL}+,;
-
-# Match a return type.
-$RETURN_PART = qr,((const|volatile)\s+)?(${SIMPLE_RETURN_PART})${POINTER_PART},;
-
-# Match "virtual".
-$VIRTUAL_PART = qr,virtual\s,;
-
-# Match the TARGET_DEFAULT_* attribute for a method.
-$TARGET_DEFAULT_PART = qr,TARGET_DEFAULT_(?<style>[A-Z_]+)\s*\((?<default_arg>.*)\),;
-
-# Match the arguments and trailing attribute of a method definition.
-# Note we don't match the trailing ";".
-$METHOD_TRAILER = qr,\s*${TARGET_DEFAULT_PART}$,;
-
-# Match an entire method definition.
-$METHOD = ($INTRO_PART . $VIRTUAL_PART . "(?<return_type>" . $RETURN_PART . ")"
- . $NAME_PART . $ARGS_PART
- . $METHOD_TRAILER);
-
-# Match TARGET_DEBUG_PRINTER in an argument type.
-# This must match the whole "sub-expression" including the parens.
-# Reference $1 must refer to the function argument.
-$TARGET_DEBUG_PRINTER = qr,\s*TARGET_DEBUG_PRINTER\s*\(([^)]*)\)\s*,;
-
-sub trim($) {
- my ($result) = @_;
-
- $result =~ s,^\s+,,;
- $result =~ s,\s+$,,;
-
- return $result;
-}
-
-# Read from the input files until we find the trigger line.
-# Die if not found.
-sub find_trigger() {
- while (<>) {
- chomp;
- return if m/$TRIGGER/;
- }
-
- die "could not find trigger line\n";
-}
-
-# Scan target.h and return a list of possible target_ops method entries.
-sub scan_target_h() {
- my $all_the_text = '';
-
- find_trigger();
- while (<>) {
- chomp;
- # Skip the open brace.
- next if /{/;
- last if m/$ENDER/;
-
- # Strip // comments.
- $_ =~ s,//.*$,,;
-
- $all_the_text .= $_;
- }
-
- # Now strip out the C comments.
- $all_the_text =~ s,/\*(.*?)\*/,,g;
-
- # Replace sequences of tabs and/or whitespace with a single
- # whitespace character. We need the whitespace because the method
- # may have been split between multiple lines, like e.g.:
- #
- # virtual std::vector<long_type_name>
- # my_long_method_name ()
- # TARGET_DEFAULT_IGNORE ();
- #
- # If we didn't preserve the whitespace, then we'd end up with:
- #
- # virtual std::vector<long_type_name>my_long_method_name ()TARGET_DEFAULT_IGNORE ()
- #
- # ... which wouldn't later be parsed correctly.
- $all_the_text =~ s/[\t\s]+/ /g;
-
- return split (/;/, $all_the_text);
-}
-
-# Parse arguments into a list.
-sub parse_argtypes($) {
- my ($typestr) = @_;
-
- $typestr =~ s/^\((.*)\)$/\1/;
-
- my (@typelist) = split (/,\s*/, $typestr);
- my (@result, $iter, $onetype);
-
- foreach $iter (@typelist) {
- if ($iter =~ m/^(enum\s+${SYMBOL}\s*)(${SYMBOL})?$/) {
- $onetype = $1;
- } elsif ($iter =~ m/^(.*(enum\s+)?${SYMBOL}.*(\s|\*|&))${SYMBOL}+$/) {
- $onetype = $1;
- } elsif ($iter eq 'void') {
- next;
- } else {
- $onetype = $iter;
- }
- push @result, trim ($onetype);
- }
-
- return @result;
-}
-
-sub dname($) {
- my ($name) = @_;
- return "target_ops::" . $name;
-}
-
-# Write function header given name, return type, and argtypes.
-# Returns a list of actual argument names.
-sub write_function_header($$$@) {
- my ($decl, $name, $return_type, @argtypes) = @_;
-
- print $return_type;
-
- if ($decl) {
- if ($return_type !~ m,\*$,) {
- print " ";
- }
- } else {
- print "\n";
- }
-
- print $name . ' (';
-
- my $iter;
- my @argdecls;
- my @actuals;
- my $i = 0;
- foreach $iter (@argtypes) {
- my $val = $iter;
-
- $val =~ s/$TARGET_DEBUG_PRINTER//;
-
- if ($iter !~ m,(\*|&)$,) {
- $val .= ' ';
- }
-
- my $vname;
- $vname .= "arg$i";
- $val .= $vname;
-
- push @argdecls, $val;
- push @actuals, $vname;
- ++$i;
- }
-
- print join (', ', @argdecls) . ")";
-
- if ($decl) {
- print " override;\n";
- } else {
- print "\n{\n";
- }
-
- return @actuals;
-}
-
-# Write out a declaration.
-sub write_declaration($$@) {
- my ($name, $return_type, @argtypes) = @_;
-
- write_function_header (1, $name, $return_type, @argtypes);
-}
-
-# Write out a delegation function.
-sub write_delegator($$@) {
- my ($name, $return_type, @argtypes) = @_;
-
- my (@names) = write_function_header (0, dname ($name),
- $return_type, @argtypes);
-
- print " ";
- if ($return_type ne 'void') {
- print "return ";
- }
- print "this->beneath ()->" . $name . " (";
- print join (', ', @names);
- print ");\n";
- print "}\n\n";
-}
-
-sub tdname ($) {
- my ($name) = @_;
- return "dummy_target::" . $name;
-}
-
-# Write out a default function.
-sub write_tdefault($$$$@) {
- my ($content, $style, $name, $return_type, @argtypes) = @_;
-
- my (@names) = write_function_header (0, tdname ($name),
- $return_type, @argtypes);
-
- if ($style eq 'FUNC') {
- print " ";
- if ($return_type ne 'void') {
- print "return ";
- }
- print $content . " (this";
- if (@names) {
- print ", ";
- }
- print join (', ', @names);
- print ");\n";
- } elsif ($style eq 'RETURN') {
- print " return $content;\n";
- } elsif ($style eq 'NORETURN') {
- print " $content;\n";
- } elsif ($style eq 'IGNORE') {
- # Nothing.
- } else {
- die "unrecognized style: $style\n";
- }
-
- print "}\n\n";
-
- return tdname ($name);
-}
-
-sub munge_type($) {
- my ($typename) = @_;
- my ($result);
-
- if ($typename =~ m/$TARGET_DEBUG_PRINTER/) {
- $result = $1;
- } else {
- ($result = $typename) =~ s/\s+$//;
- $result =~ s/[ ()<>:]/_/g;
- $result =~ s/[*]/p/g;
- $result =~ s/&/r/g;
-
- # Identifers with double underscores are reserved to the C++
- # implementation.
- $result =~ s/_+/_/g;
-
- # Avoid ending the function name with underscore, for
- # cosmetics. Trailing underscores appear after munging types
- # with template parameters, like e.g. "foo<int>".
- $result =~ s/_$//g;
-
- $result = 'target_debug_print_' . $result;
- }
-
- return $result;
-}
-
-# Write out a debug method.
-sub write_debugmethod($$$@) {
- my ($content, $name, $return_type, @argtypes) = @_;
-
- my ($debugname) = "debug_target::" . $name;
- my ($targetname) = $name;
-
- my (@names) = write_function_header (0, $debugname, $return_type, @argtypes);
-
- if ($return_type ne 'void') {
- print " $return_type result;\n";
- }
-
- print " fprintf_unfiltered (gdb_stdlog, \"-> %s->$name (...)\\n\", this->beneath ()->shortname ());\n";
-
- # Delegate to the beneath target.
- print " ";
- if ($return_type ne 'void') {
- print "result = ";
- }
- print "this->beneath ()->" . $name . " (";
- print join (', ', @names);
- print ");\n";
-
- # Now print the arguments.
- print " fprintf_unfiltered (gdb_stdlog, \"<- %s->$name (\", this->beneath ()->shortname ());\n";
- for my $i (0 .. $#argtypes) {
- if ($i > 0) {
- print " fputs_unfiltered (\", \", gdb_stdlog);\n"
- }
- my $printer = munge_type ($argtypes[$i]);
- print " $printer ($names[$i]);\n";
- }
- if ($return_type ne 'void') {
- print " fputs_unfiltered (\") = \", gdb_stdlog);\n";
- my $printer = munge_type ($return_type);
- print " $printer (result);\n";
- print " fputs_unfiltered (\"\\n\", gdb_stdlog);\n";
- } else {
- print " fputs_unfiltered (\")\\n\", gdb_stdlog);\n";
- }
-
- if ($return_type ne 'void') {
- print " return result;\n";
- }
-
- print "}\n\n";
-
- return $debugname;
-}
-
-print "/* THIS FILE IS GENERATED -*- buffer-read-only: t -*- */\n";
-print "/* vi:set ro: */\n\n";
-print "/* To regenerate this file, run:*/\n";
-print "/* make-target-delegates target.h > target-delegates.c */\n";
-print "\n";
-
-@lines = scan_target_h();
-
-@delegators = ();
-@return_types = ();
-@tdefaults = ();
-@styles = ();
-@argtypes_array = ();
-
-foreach $current_line (@lines) {
- # See comments in scan_target_h. Here we strip away the leading
- # and trailing whitespace.
- $current_line = trim ($current_line);
-
- next unless $current_line =~ m/$METHOD/;
-
- my $name = $+{name};
- my $current_line = $+{args};
- my $return_type = trim ($+{return_type});
- my $current_args = $+{args};
- my $tdefault = $+{default_arg};
- my $style = $+{style};
-
- my @argtypes = parse_argtypes ($current_args);
-
- push @delegators, $name;
-
- $return_types{$name} = $return_type;
- $tdefaults{$name} = $tdefault;
- $styles{$name} = $style;
- $argtypes_array{$name} = \@argtypes;
-}
-
-sub print_class($) {
- my ($name) = @_;
-
- print "struct " . $name . " : public target_ops\n";
- print "{\n";
- print " const target_info &info () const override;\n";
- print "\n";
- print " strata stratum () const override;\n";
- print "\n";
-
- for $name (@delegators) {
- my $return_type = $return_types{$name};
- my @argtypes = @{$argtypes_array{$name}};
-
- print " ";
- write_declaration ($name, $return_type, @argtypes);
- }
-
- print "};\n\n";
-}
-
-print_class ("dummy_target");
-print_class ("debug_target");
-
-for $name (@delegators) {
- my $tdefault = $tdefaults{$name};
- my $return_type = $return_types{$name};
- my $style = $styles{$name};
- my @argtypes = @{$argtypes_array{$name}};
-
- write_delegator ($name, $return_type, @argtypes);
-
- write_tdefault ($tdefault, $style, $name, $return_type, @argtypes);
-
- write_debugmethod ($tdefault, $name, $return_type, @argtypes);
-}
diff --git a/gdb/make-target-delegates.py b/gdb/make-target-delegates.py
new file mode 100755
index 00000000000..9fe7cb17b6f
--- /dev/null
+++ b/gdb/make-target-delegates.py
@@ -0,0 +1,340 @@
+#!/usr/bin/env python3
+
+# Copyright (C) 2013-2022 Free Software Foundation, Inc.
+#
+# This file is part of GDB.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Usage:
+# make-target-delegates.py
+
+import re
+import gdbcopyright
+
+
+# The line we search for in target.h that marks where we should start
+# looking for methods.
+TRIGGER = re.compile(r"^struct target_ops$")
+# The end of the methods part.
+ENDER = re.compile(r"^\s*};$")
+
+# Match a C symbol.
+SYMBOL = "[a-zA-Z_][a-zA-Z0-9_]*"
+# Match the name part of a method in struct target_ops.
+NAME_PART = r"(?P<name>" + SYMBOL + ")\s"
+# Match the arguments to a method.
+ARGS_PART = r"(?P<args>\(.*\))"
+# We strip the indentation so here we only need the caret.
+INTRO_PART = r"^"
+
+POINTER_PART = r"\s*(\*)?\s*"
+
+# Match a C++ symbol, including scope operators and template
+# parameters. E.g., 'std::vector<something>'.
+CP_SYMBOL = r"[a-zA-Z_][a-zA-Z0-9_<>:]*"
+# Match the return type when it is "ordinary".
+SIMPLE_RETURN_PART = r"((struct|class|enum|union)\s+)?" + CP_SYMBOL
+
+# Match a return type.
+RETURN_PART = r"((const|volatile)\s+)?(" + SIMPLE_RETURN_PART + ")" + POINTER_PART
+
+# Match "virtual".
+VIRTUAL_PART = r"virtual\s"
+
+# Match the TARGET_DEFAULT_* attribute for a method.
+TARGET_DEFAULT_PART = r"TARGET_DEFAULT_(?P<style>[A-Z_]+)\s*\((?P<default_arg>.*)\)"
+
+# Match the arguments and trailing attribute of a method definition.
+# Note we don't match the trailing ";".
+METHOD_TRAILER = r"\s*" + TARGET_DEFAULT_PART + "$"
+
+# Match an entire method definition.
+METHOD = re.compile(
+ INTRO_PART
+ + VIRTUAL_PART
+ + "(?P<return_type>"
+ + RETURN_PART
+ + ")"
+ + NAME_PART
+ + ARGS_PART
+ + METHOD_TRAILER
+)
+
+# Regular expression used to dissect argument types.
+ARGTYPES = re.compile(
+ "^("
+ + r"(?P<E>enum\s+"
+ + SYMBOL
+ + r"\s*)("
+ + SYMBOL
+ + ")?"
+ + r"|(?P<T>.*(enum\s+)?"
+ + SYMBOL
+ + r".*(\s|\*|&))"
+ + SYMBOL
+ + ")$"
+)
+
+# Match TARGET_DEBUG_PRINTER in an argument type.
+# This must match the whole "sub-expression" including the parens.
+TARGET_DEBUG_PRINTER = r"\s*TARGET_DEBUG_PRINTER\s*\((?P<arg>[^)]*)\)\s*"
+
+
+def scan_target_h():
+ found_trigger = False
+ all_the_text = ""
+ with open("target.h", "r") as target_h:
+ for line in target_h:
+ line = line.strip()
+ if not found_trigger:
+ if TRIGGER.match(line):
+ found_trigger = True
+ elif "{" in line:
+ # Skip the open brace.
+ pass
+ elif ENDER.match(line):
+ break
+ else:
+ # Strip // comments.
+ line = re.split("//", line)[0]
+ all_the_text = all_the_text + " " + line
+ if not found_trigger:
+ raise "Could not find trigger line"
+ # Now strip out the C comments.
+ all_the_text = re.sub(r"/\*(.*?)\*/", "", all_the_text)
+ # Replace sequences whitespace with a single space character.
+ # We need the space because the method may have been split
+ # between multiple lines, like e.g.:
+ #
+ # virtual std::vector<long_type_name>
+ # my_long_method_name ()
+ # TARGET_DEFAULT_IGNORE ();
+ #
+ # If we didn't preserve the space, then we'd end up with:
+ #
+ # virtual std::vector<long_type_name>my_long_method_name ()TARGET_DEFAULT_IGNORE ()
+ #
+ # ... which wouldn't later be parsed correctly.
+ all_the_text = re.sub(r"\s+", " ", all_the_text)
+ return all_the_text.split(";")
+
+
+# Parse arguments into a list.
+def parse_argtypes(typestr):
+ # Remove the outer parens.
+ typestr = re.sub(r"^\((.*)\)$", r"\1", typestr)
+ result = []
+ for item in re.split(r",\s*", typestr):
+ if item == "void" or item == "":
+ continue
+ m = ARGTYPES.match(item)
+ if m:
+ if m.group("E"):
+ onetype = m.group("E")
+ else:
+ onetype = m.group("T")
+ else:
+ onetype = item
+ result.append(onetype.strip())
+ return result
+
+
+# Write function header given name, return type, and argtypes.
+# Returns a list of actual argument names.
+def write_function_header(f, decl, name, return_type, argtypes):
+ print(return_type, file=f, end="")
+ if decl:
+ if not return_type.endswith("*"):
+ print(" ", file=f, end="")
+ else:
+ print("", file=f)
+ print(name + " (", file=f, end="")
+ argdecls = []
+ actuals = []
+ for i in range(len(argtypes)):
+ val = re.sub(TARGET_DEBUG_PRINTER, "", argtypes[i])
+ if not val.endswith("*") and not val.endswith("&"):
+ val = val + " "
+ vname = "arg" + str(i)
+ val = val + vname
+ argdecls.append(val)
+ actuals.append(vname)
+ print(", ".join(argdecls) + ")", file=f, end="")
+ if decl:
+ print(" override;", file=f)
+ else:
+ print("\n{", file=f)
+ return actuals
+
+
+# Write out a declaration.
+def write_declaration(f, name, return_type, argtypes):
+ write_function_header(f, True, name, return_type, argtypes)
+
+
+# Write out a delegation function.
+def write_delegator(f, name, return_type, argtypes):
+ names = write_function_header(
+ f, False, "target_ops::" + name, return_type, argtypes
+ )
+ print(" ", file=f, end="")
+ if return_type != "void":
+ print("return ", file=f, end="")
+ print("this->beneath ()->" + name + " (", file=f, end="")
+ print(", ".join(names), file=f, end="")
+ print(");", file=f)
+ print("}\n", file=f)
+
+
+# Write out a default function.
+def write_tdefault(f, content, style, name, return_type, argtypes):
+ name = "dummy_target::" + name
+ names = write_function_header(f, False, name, return_type, argtypes)
+ if style == "FUNC":
+ print(" ", file=f, end="")
+ if return_type != "void":
+ print("return ", file=f, end="")
+ print(content + " (", file=f, end="")
+ names.insert(0, "this")
+ print(", ".join(names) + ");", file=f)
+ elif style == "RETURN":
+ print(" return " + content + ";", file=f)
+ elif style == "NORETURN":
+ print(" " + content + ";", file=f)
+ elif style == "IGNORE":
+ # Nothing.
+ pass
+ else:
+ raise "unrecognized style: " + style
+ print("}\n", file=f)
+
+
+def munge_type(typename):
+ m = re.search(TARGET_DEBUG_PRINTER, typename)
+ if m:
+ return m.group("arg")
+ typename = typename.rstrip()
+ typename = re.sub("[ ()<>:]", "_", typename)
+ typename = re.sub("[*]", "p", typename)
+ typename = re.sub("&", "r", typename)
+ # Identifers with double underscores are reserved to the C++
+ # implementation.
+ typename = re.sub("_+", "_", typename)
+ # Avoid ending the function name with underscore, for
+ # cosmetics. Trailing underscores appear after munging types
+ # with template parameters, like e.g. "foo<int>".
+ typename = re.sub("_+$", "", typename)
+ return "target_debug_print_" + typename
+
+
+# Write out a debug method.
+def write_debugmethod(f, content, name, return_type, argtypes):
+ debugname = "debug_target::" + name
+ names = write_function_header(f, False, debugname, return_type, argtypes)
+ if return_type != "void":
+ print(" " + return_type + " result;", file=f)
+ print(
+ ' gdb_printf (gdb_stdlog, "-> %s->'
+ + name
+ + ' (...)\\n", this->beneath ()->shortname ());',
+ file=f,
+ )
+
+ # Delegate to the beneath target.
+ print(" ", file=f, end="")
+ if return_type != "void":
+ print("result = ", file=f, end="")
+ print("this->beneath ()->" + name + " (", file=f, end="")
+ print(", ".join(names), file=f, end="")
+ print(");", file=f)
+
+ # Now print the arguments.
+ print(
+ ' gdb_printf (gdb_stdlog, "<- %s->'
+ + name
+ + ' (", this->beneath ()->shortname ());',
+ file=f,
+ )
+ for i in range(len(argtypes)):
+ if i > 0:
+ print(' gdb_puts (", ", gdb_stdlog);', file=f)
+ printer = munge_type(argtypes[i])
+ print(" " + printer + " (" + names[i] + ");", file=f)
+ if return_type != "void":
+ print(' gdb_puts (") = ", gdb_stdlog);', file=f)
+ printer = munge_type(return_type)
+ print(" " + printer + " (result);", file=f)
+ print(' gdb_puts ("\\n", gdb_stdlog);', file=f)
+ else:
+ print(' gdb_puts (")\\n", gdb_stdlog);', file=f)
+
+ if return_type != "void":
+ print(" return result;", file=f)
+
+ print("}\n", file=f)
+
+
+def print_class(f, class_name, delegators, entries):
+ print("struct " + class_name + " : public target_ops", file=f)
+ print("{", file=f)
+ print(" const target_info &info () const override;", file=f)
+ print("", file=f)
+ print(" strata stratum () const override;", file=f)
+ print("", file=f)
+
+ for name in delegators:
+ return_type = entries[name]["return_type"]
+ argtypes = entries[name]["argtypes"]
+ print(" ", file=f, end="")
+ write_declaration(f, name, return_type, argtypes)
+
+ print("};\n", file=f)
+
+
+delegators = []
+entries = {}
+for current_line in scan_target_h():
+ # See comments in scan_target_h. Here we strip away the leading
+ # and trailing whitespace.
+ current_line = current_line.strip()
+ m = METHOD.match(current_line)
+ if not m:
+ continue
+ data = m.groupdict()
+ data["argtypes"] = parse_argtypes(data["args"])
+ data["return_type"] = data["return_type"].strip()
+ entries[data["name"]] = data
+
+ delegators.append(data["name"])
+
+with open("target-delegates.c", "w") as f:
+ print(
+ gdbcopyright.copyright(
+ "make-target-delegates.py", "Boilerplate target methods for GDB"
+ ),
+ file=f,
+ )
+ print_class(f, "dummy_target", delegators, entries)
+ print_class(f, "debug_target", delegators, entries)
+
+ for name in delegators:
+ tdefault = entries[name]["default_arg"]
+ return_type = entries[name]["return_type"]
+ style = entries[name]["style"]
+ argtypes = entries[name]["argtypes"]
+
+ write_delegator(f, name, return_type, argtypes)
+ write_tdefault(f, tdefault, style, name, return_type, argtypes)
+ write_debugmethod(f, tdefault, name, return_type, argtypes)
diff --git a/gdb/mdebugread.c b/gdb/mdebugread.c
index b8c8ccb5e97..ca7c15ee63f 100644
--- a/gdb/mdebugread.c
+++ b/gdb/mdebugread.c
@@ -45,7 +45,7 @@
#include "gdbcore.h"
#include "filenames.h"
#include "objfiles.h"
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
#include "buildsym-legacy.h"
#include "stabsread.h"
#include "complaints.h"
@@ -371,11 +371,11 @@ mdebug_build_psymtabs (minimal_symbol_reader &reader,
if (compare_glevel (max_glevel, GLEVEL_2) < 0)
{
if (max_gdbinfo == 0)
- printf_unfiltered (_("\n%s not compiled with -g, "
- "debugging support is limited.\n"),
- objfile->name);
- printf_unfiltered (_("You should compile with -g2 or "
- "-g3 for best debugging support.\n"));
+ gdb_printf (_("\n%s not compiled with -g, "
+ "debugging support is limited.\n"),
+ objfile->name);
+ gdb_printf (_("You should compile with -g2 or "
+ "-g3 for best debugging support.\n"));
}
#endif
}
@@ -533,7 +533,7 @@ reg_value_complaint (int regnum, int num_regs, const char *sym)
static int
mdebug_reg_to_regnum (struct symbol *sym, struct gdbarch *gdbarch)
{
- int regno = gdbarch_ecoff_reg_to_regnum (gdbarch, SYMBOL_VALUE (sym));
+ int regno = gdbarch_ecoff_reg_to_regnum (gdbarch, sym->value_longest ());
if (regno < 0 || regno >= gdbarch_num_cooked_regs (gdbarch))
{
@@ -562,16 +562,16 @@ add_data_symbol (SYMR *sh, union aux_ext *ax, int bigend,
struct symbol *s, int aclass_index, struct block *b,
struct objfile *objfile, const char *name)
{
- SYMBOL_DOMAIN (s) = VAR_DOMAIN;
- SYMBOL_ACLASS_INDEX (s) = aclass_index;
+ s->set_domain (VAR_DOMAIN);
+ s->set_aclass_index (aclass_index);
add_symbol (s, top_stack->cur_st, b);
/* Type could be missing if file is compiled without debugging info. */
if (SC_IS_UNDEF (sh->sc)
|| sh->sc == scNil || sh->index == indexNil)
- SYMBOL_TYPE (s) = objfile_type (objfile)->nodebug_data_symbol;
+ s->set_type (objfile_type (objfile)->nodebug_data_symbol);
else
- SYMBOL_TYPE (s) = parse_type (cur_fd, ax, sh->index, 0, bigend, name);
+ s->set_type (parse_type (cur_fd, ax, sh->index, 0, bigend, name));
/* Value of a data symbol is its memory address. */
}
@@ -628,10 +628,9 @@ parse_symbol (SYMR *sh, union aux_ext *ax, char *ext_sh, int bigend,
break;
case stGlobal: /* External symbol, goes into global block. */
- b = BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (top_stack->cur_st),
- GLOBAL_BLOCK);
+ b = top_stack->cur_st->compunit ()->blockvector ()->global_block ();
s = new_symbol (name);
- SET_SYMBOL_VALUE_ADDRESS (s, (CORE_ADDR) sh->value);
+ s->set_value_address (sh->value);
add_data_symbol (sh, ax, bigend, s, LOC_STATIC, b, objfile, name);
break;
@@ -644,18 +643,18 @@ parse_symbol (SYMR *sh, union aux_ext *ax, char *ext_sh, int bigend,
address is not in the symbol; we need to fix it later in
scan_file_globals. */
int bucket = hashname (s->linkage_name ());
- SYMBOL_VALUE_CHAIN (s) = global_sym_chain[bucket];
+ s->set_value_chain (global_sym_chain[bucket]);
global_sym_chain[bucket] = s;
}
else
- SET_SYMBOL_VALUE_ADDRESS (s, (CORE_ADDR) sh->value);
+ s->set_value_address (sh->value);
add_data_symbol (sh, ax, bigend, s, LOC_STATIC, b, objfile, name);
break;
case stLocal: /* Local variable, goes into current block. */
b = top_stack->cur_block;
s = new_symbol (name);
- SYMBOL_VALUE (s) = svalue;
+ s->set_value_longest (svalue);
if (sh->sc == scRegister)
add_data_symbol (sh, ax, bigend, s, mdebug_register_index,
b, objfile, name);
@@ -675,38 +674,38 @@ parse_symbol (SYMR *sh, union aux_ext *ax, char *ext_sh, int bigend,
name = "this"; /* FIXME, not alloc'd in obstack. */
s = new_symbol (name);
- SYMBOL_DOMAIN (s) = VAR_DOMAIN;
- SYMBOL_IS_ARGUMENT (s) = 1;
+ s->set_domain (VAR_DOMAIN);
+ s->set_is_argument (1);
switch (sh->sc)
{
case scRegister:
/* Pass by value in register. */
- SYMBOL_ACLASS_INDEX (s) = mdebug_register_index;
+ s->set_aclass_index (mdebug_register_index);
break;
case scVar:
/* Pass by reference on stack. */
- SYMBOL_ACLASS_INDEX (s) = LOC_REF_ARG;
+ s->set_aclass_index (LOC_REF_ARG);
break;
case scVarRegister:
/* Pass by reference in register. */
- SYMBOL_ACLASS_INDEX (s) = mdebug_regparm_index;
+ s->set_aclass_index (mdebug_regparm_index);
break;
default:
/* Pass by value on stack. */
- SYMBOL_ACLASS_INDEX (s) = LOC_ARG;
+ s->set_aclass_index (LOC_ARG);
break;
}
- SYMBOL_VALUE (s) = svalue;
- SYMBOL_TYPE (s) = parse_type (cur_fd, ax, sh->index, 0, bigend, name);
+ s->set_value_longest (svalue);
+ s->set_type (parse_type (cur_fd, ax, sh->index, 0, bigend, name));
add_symbol (s, top_stack->cur_st, top_stack->cur_block);
break;
case stLabel: /* label, goes into current block. */
s = new_symbol (name);
- SYMBOL_DOMAIN (s) = VAR_DOMAIN; /* So that it can be used */
- SYMBOL_ACLASS_INDEX (s) = LOC_LABEL; /* but not misused. */
- SET_SYMBOL_VALUE_ADDRESS (s, (CORE_ADDR) sh->value);
- SYMBOL_TYPE (s) = objfile_type (objfile)->builtin_int;
+ s->set_domain (VAR_DOMAIN); /* So that it can be used */
+ s->set_aclass_index (LOC_LABEL); /* but not misused. */
+ s->set_value_address (sh->value);
+ s->set_type (objfile_type (objfile)->builtin_int);
add_symbol (s, top_stack->cur_st, top_stack->cur_block);
break;
@@ -744,8 +743,8 @@ parse_symbol (SYMR *sh, union aux_ext *ax, char *ext_sh, int bigend,
break;
}
s = new_symbol (name);
- SYMBOL_DOMAIN (s) = VAR_DOMAIN;
- SYMBOL_ACLASS_INDEX (s) = LOC_BLOCK;
+ s->set_domain (VAR_DOMAIN);
+ s->set_aclass_index (LOC_BLOCK);
/* Type of the return value. */
if (SC_IS_UNDEF (sh->sc) || sh->sc == scNil)
t = objfile_type (objfile)->builtin_int;
@@ -770,36 +769,37 @@ parse_symbol (SYMR *sh, union aux_ext *ax, char *ext_sh, int bigend,
b = top_stack->cur_block;
if (sh->st == stProc)
{
- const struct blockvector *bv
- = SYMTAB_BLOCKVECTOR (top_stack->cur_st);
+ struct blockvector *bv
+ = top_stack->cur_st->compunit ()->blockvector ();
/* The next test should normally be true, but provides a
hook for nested functions (which we don't want to make
global). */
- if (b == BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK))
- b = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
+ if (b == bv->static_block ())
+ b = bv->global_block ();
/* Irix 5 sometimes has duplicate names for the same
function. We want to add such names up at the global
level, not as a nested function. */
else if (sh->value == top_stack->procadr)
- b = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
+ b = bv->global_block ();
}
add_symbol (s, top_stack->cur_st, b);
/* Make a type for the procedure itself. */
- SYMBOL_TYPE (s) = lookup_function_type (t);
+ s->set_type (lookup_function_type (t));
/* All functions in C++ have prototypes. For C we don't have enough
information in the debug info. */
if (s->language () == language_cplus)
- SYMBOL_TYPE (s)->set_is_prototyped (true);
+ s->type ()->set_is_prototyped (true);
/* Create and enter a new lexical context. */
b = new_block (FUNCTION_BLOCK, s->language ());
- SYMBOL_BLOCK_VALUE (s) = b;
- BLOCK_FUNCTION (b) = s;
- BLOCK_START (b) = BLOCK_END (b) = sh->value;
- BLOCK_SUPERBLOCK (b) = top_stack->cur_block;
+ s->set_value_block (b);
+ b->set_function (s);
+ b->set_start (sh->value);
+ b->set_end (sh->value);
+ b->set_superblock (top_stack->cur_block);
add_block (b, top_stack->cur_st);
/* Not if we only have partial info. */
@@ -809,7 +809,7 @@ parse_symbol (SYMR *sh, union aux_ext *ax, char *ext_sh, int bigend,
push_parse_stack ();
top_stack->cur_block = b;
top_stack->blocktype = sh->st;
- top_stack->cur_type = SYMBOL_TYPE (s);
+ top_stack->cur_type = s->type ();
top_stack->cur_field = -1;
top_stack->procadr = sh->value;
top_stack->numargs = 0;
@@ -1065,11 +1065,11 @@ parse_symbol (SYMR *sh, union aux_ext *ax, char *ext_sh, int bigend,
enum_sym->set_linkage_name
(obstack_strdup (&mdebugread_objfile->objfile_obstack,
f->name ()));
- SYMBOL_ACLASS_INDEX (enum_sym) = LOC_CONST;
- SYMBOL_TYPE (enum_sym) = t;
- SYMBOL_DOMAIN (enum_sym) = VAR_DOMAIN;
- SYMBOL_VALUE (enum_sym) = tsym.value;
- if (SYMBOL_VALUE (enum_sym) < 0)
+ enum_sym->set_aclass_index (LOC_CONST);
+ enum_sym->set_type (t);
+ enum_sym->set_domain (VAR_DOMAIN);
+ enum_sym->set_value_longest (tsym.value);
+ if (enum_sym->value_longest () < 0)
unsigned_enum = 0;
add_symbol (enum_sym, top_stack->cur_st, top_stack->cur_block);
@@ -1097,10 +1097,10 @@ parse_symbol (SYMR *sh, union aux_ext *ax, char *ext_sh, int bigend,
}
s = new_symbol (name);
- SYMBOL_DOMAIN (s) = STRUCT_DOMAIN;
- SYMBOL_ACLASS_INDEX (s) = LOC_TYPEDEF;
- SYMBOL_VALUE (s) = 0;
- SYMBOL_TYPE (s) = t;
+ s->set_domain (STRUCT_DOMAIN);
+ s->set_aclass_index (LOC_TYPEDEF);
+ s->set_value_longest (0);
+ s->set_type (t);
add_symbol (s, top_stack->cur_st, top_stack->cur_block);
break;
@@ -1126,8 +1126,8 @@ parse_symbol (SYMR *sh, union aux_ext *ax, char *ext_sh, int bigend,
top_stack->blocktype = stBlock;
b = new_block (NON_FUNCTION_BLOCK, psymtab_language);
- BLOCK_START (b) = sh->value + top_stack->procadr;
- BLOCK_SUPERBLOCK (b) = top_stack->cur_block;
+ b->set_start (sh->value + top_stack->procadr);
+ b->set_superblock (top_stack->cur_block);
top_stack->cur_block = b;
add_block (b, top_stack->cur_st);
break;
@@ -1143,39 +1143,37 @@ parse_symbol (SYMR *sh, union aux_ext *ax, char *ext_sh, int bigend,
top_stack->blocktype == stStaticProc))
{
/* Finished with procedure */
- const struct blockvector *bv
- = SYMTAB_BLOCKVECTOR (top_stack->cur_st);
+ struct blockvector *bv
+ = top_stack->cur_st->compunit ()->blockvector ();
struct mdebug_extra_func_info *e;
struct block *cblock = top_stack->cur_block;
struct type *ftype = top_stack->cur_type;
- int i;
- BLOCK_END (top_stack->cur_block) += sh->value; /* size */
+ top_stack->cur_block->set_end
+ (top_stack->cur_block->end () + sh->value); /* size */
/* Make up special symbol to contain procedure specific info. */
s = new_symbol (MDEBUG_EFI_SYMBOL_NAME);
- SYMBOL_DOMAIN (s) = LABEL_DOMAIN;
- SYMBOL_ACLASS_INDEX (s) = LOC_CONST;
- SYMBOL_TYPE (s) = objfile_type (mdebugread_objfile)->builtin_void;
+ s->set_domain (LABEL_DOMAIN);
+ s->set_aclass_index (LOC_CONST);
+ s->set_type (objfile_type (mdebugread_objfile)->builtin_void);
e = OBSTACK_ZALLOC (&mdebugread_objfile->objfile_obstack,
mdebug_extra_func_info);
- SYMBOL_VALUE_BYTES (s) = (gdb_byte *) e;
+ s->set_value_bytes ((gdb_byte *) e);
e->numargs = top_stack->numargs;
e->pdr.framereg = -1;
add_symbol (s, top_stack->cur_st, top_stack->cur_block);
/* f77 emits proc-level with address bounds==[0,0],
So look for such child blocks, and patch them. */
- for (i = 0; i < BLOCKVECTOR_NBLOCKS (bv); i++)
+ for (block *b_bad : bv->blocks ())
{
- struct block *b_bad = BLOCKVECTOR_BLOCK (bv, i);
-
- if (BLOCK_SUPERBLOCK (b_bad) == cblock
- && BLOCK_START (b_bad) == top_stack->procadr
- && BLOCK_END (b_bad) == top_stack->procadr)
+ if (b_bad->superblock () == cblock
+ && b_bad->start () == top_stack->procadr
+ && b_bad->end () == top_stack->procadr)
{
- BLOCK_START (b_bad) = BLOCK_START (cblock);
- BLOCK_END (b_bad) = BLOCK_END (cblock);
+ b_bad->set_start (cblock->start ());
+ b_bad->set_end (cblock->end ());
}
}
@@ -1202,9 +1200,9 @@ parse_symbol (SYMR *sh, union aux_ext *ax, char *ext_sh, int bigend,
if (iparams == nparams)
break;
- if (SYMBOL_IS_ARGUMENT (sym))
+ if (sym->is_argument ())
{
- ftype->field (iparams).set_type (SYMBOL_TYPE (sym));
+ ftype->field (iparams).set_type (sym->type ());
TYPE_FIELD_ARTIFICIAL (ftype, iparams) = 0;
iparams++;
}
@@ -1217,7 +1215,7 @@ parse_symbol (SYMR *sh, union aux_ext *ax, char *ext_sh, int bigend,
/* End of (code) block. The value of the symbol is the
displacement from the procedure`s start address of the
end of this block. */
- BLOCK_END (top_stack->cur_block) = sh->value + top_stack->procadr;
+ top_stack->cur_block->set_end (sh->value + top_stack->procadr);
}
else if (sh->sc == scText && top_stack->blocktype == stNil)
{
@@ -1295,20 +1293,20 @@ parse_symbol (SYMR *sh, union aux_ext *ax, char *ext_sh, int bigend,
if (has_opaque_xref (cur_fdr, sh))
break;
s = new_symbol (name);
- SYMBOL_DOMAIN (s) = VAR_DOMAIN;
- SYMBOL_ACLASS_INDEX (s) = LOC_TYPEDEF;
- SYMBOL_BLOCK_VALUE (s) = top_stack->cur_block;
- SYMBOL_TYPE (s) = t;
+ s->set_domain (VAR_DOMAIN);
+ s->set_aclass_index (LOC_TYPEDEF);
+ s->set_value_block (top_stack->cur_block);
+ s->set_type (t);
add_symbol (s, top_stack->cur_st, top_stack->cur_block);
/* Incomplete definitions of structs should not get a name. */
- if (SYMBOL_TYPE (s)->name () == NULL
- && (SYMBOL_TYPE (s)->num_fields () != 0
- || (SYMBOL_TYPE (s)->code () != TYPE_CODE_STRUCT
- && SYMBOL_TYPE (s)->code () != TYPE_CODE_UNION)))
+ if (s->type ()->name () == NULL
+ && (s->type ()->num_fields () != 0
+ || (s->type ()->code () != TYPE_CODE_STRUCT
+ && s->type ()->code () != TYPE_CODE_UNION)))
{
- if (SYMBOL_TYPE (s)->code () == TYPE_CODE_PTR
- || SYMBOL_TYPE (s)->code () == TYPE_CODE_FUNC)
+ if (s->type ()->code () == TYPE_CODE_PTR
+ || s->type ()->code () == TYPE_CODE_FUNC)
{
/* If we are giving a name to a type such as "pointer to
foo" or "function returning foo", we better not set
@@ -1330,7 +1328,7 @@ parse_symbol (SYMR *sh, union aux_ext *ax, char *ext_sh, int bigend,
for anything except pointers or functions. */
}
else
- SYMBOL_TYPE (s)->set_name (s->linkage_name ());
+ s->type ()->set_name (s->linkage_name ());
}
break;
@@ -1965,8 +1963,7 @@ parse_procedure (PDR *pr, struct compunit_symtab *search_symtab,
#else
s = mylookup_symbol
(sh_name,
- BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (search_symtab),
- STATIC_BLOCK),
+ search_symtab->blockvector ()->static_block (),
VAR_DOMAIN,
LOC_BLOCK);
#endif
@@ -1977,7 +1974,7 @@ parse_procedure (PDR *pr, struct compunit_symtab *search_symtab,
if (s != 0)
{
- b = SYMBOL_BLOCK_VALUE (s);
+ b = s->value_block ();
}
else
{
@@ -1987,10 +1984,10 @@ parse_procedure (PDR *pr, struct compunit_symtab *search_symtab,
#else
/* FIXME -- delete. We can't do symbol allocation now; it's all done. */
s = new_symbol (sh_name);
- SYMBOL_DOMAIN (s) = VAR_DOMAIN;
+ s->set_domain (VAR_DOMAIN);
SYMBOL_CLASS (s) = LOC_BLOCK;
/* Don't know its type, hope int is ok. */
- SYMBOL_TYPE (s)
+ s->type ()
= lookup_function_type (objfile_type (pst->objfile)->builtin_int);
add_symbol (s, top_stack->cur_st, top_stack->cur_block);
/* Won't have symbols for this one. */
@@ -2012,7 +2009,7 @@ parse_procedure (PDR *pr, struct compunit_symtab *search_symtab,
{
struct mdebug_extra_func_info *e;
- e = (struct mdebug_extra_func_info *) SYMBOL_VALUE_BYTES (i);
+ e = (struct mdebug_extra_func_info *) i->value_bytes ();
e->pdr = *pr;
/* GDB expects the absolute function start address for the
@@ -2024,7 +2021,7 @@ parse_procedure (PDR *pr, struct compunit_symtab *search_symtab,
e->pdr.adr is sometimes offset by a bogus value.
To work around these problems, we replace e->pdr.adr with
the start address of the function. */
- e->pdr.adr = BLOCK_START (b);
+ e->pdr.adr = b->start ();
}
/* It would be reasonable that functions that have been compiled
@@ -2044,8 +2041,8 @@ parse_procedure (PDR *pr, struct compunit_symtab *search_symtab,
if (processing_gcc_compilation == 0
&& found_ecoff_debugging_info == 0
- && TYPE_TARGET_TYPE (SYMBOL_TYPE (s))->code () == TYPE_CODE_VOID)
- SYMBOL_TYPE (s) = objfile_type (mdebugread_objfile)->nodebug_text_symbol;
+ && TYPE_TARGET_TYPE (s->type ())->code () == TYPE_CODE_VOID)
+ s->set_type (objfile_type (mdebugread_objfile)->nodebug_text_symbol);
}
/* Parse the external symbol ES. Just call parse_symbol() after
@@ -2102,9 +2099,9 @@ parse_external (EXTR *es, int bigend, const section_offsets &section_offsets,
n_undef_symbols++;
/* FIXME: Turn this into a complaint? */
if (info_verbose)
- printf_filtered (_("Warning: %s `%s' is undefined (in %s)\n"),
- what, debug_info->ssext + es->asym.iss,
- fdr_name (cur_fdr));
+ gdb_printf (_("Warning: %s `%s' is undefined (in %s)\n"),
+ what, debug_info->ssext + es->asym.iss,
+ fdr_name (cur_fdr));
return;
}
@@ -3961,7 +3958,7 @@ mdebug_expand_psymtab (legacy_psymtab *pst, struct objfile *objfile)
{
valu += section_offsets[SECT_OFF_TEXT (objfile)];
previous_stab_code = N_SO;
- cust = end_symtab (valu, SECT_OFF_TEXT (objfile));
+ cust = end_compunit_symtab (valu, SECT_OFF_TEXT (objfile));
end_stabs ();
last_symtab_ended = 1;
}
@@ -3987,10 +3984,10 @@ mdebug_expand_psymtab (legacy_psymtab *pst, struct objfile *objfile)
mdebug_extra_func_info);
struct symbol *s = new_symbol (MDEBUG_EFI_SYMBOL_NAME);
- SYMBOL_DOMAIN (s) = LABEL_DOMAIN;
- SYMBOL_ACLASS_INDEX (s) = LOC_CONST;
- SYMBOL_TYPE (s) = objfile_type (objfile)->builtin_void;
- SYMBOL_VALUE_BYTES (s) = (gdb_byte *) e;
+ s->set_domain (LABEL_DOMAIN);
+ s->set_aclass_index (LOC_CONST);
+ s->set_type (objfile_type (objfile)->builtin_void);
+ s->set_value_bytes ((gdb_byte *) e);
e->pdr.framereg = -1;
add_symbol_to_list (s, get_local_symbols ());
}
@@ -4021,7 +4018,8 @@ mdebug_expand_psymtab (legacy_psymtab *pst, struct objfile *objfile)
if (! last_symtab_ended)
{
- cust = end_symtab (pst->raw_text_high (), SECT_OFF_TEXT (objfile));
+ cust = end_compunit_symtab (pst->raw_text_high (),
+ SECT_OFF_TEXT (objfile));
end_stabs ();
}
@@ -4084,21 +4082,21 @@ mdebug_expand_psymtab (legacy_psymtab *pst, struct objfile *objfile)
/* The proper language was already determined when building
the psymtab, use it. */
- COMPUNIT_FILETABS (cust)->language = PST_PRIVATE (pst)->pst_language;
+ cust->primary_filetab ()->set_language
+ (PST_PRIVATE (pst)->pst_language);
}
- psymtab_language = COMPUNIT_FILETABS (cust)->language;
+ psymtab_language = cust->primary_filetab ()->language ();
- lines = SYMTAB_LINETABLE (COMPUNIT_FILETABS (cust));
+ lines = cust->primary_filetab ()->linetable ();
/* Get a new lexical context. */
push_parse_stack ();
- top_stack->cur_st = COMPUNIT_FILETABS (cust);
- top_stack->cur_block
- = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (cust), STATIC_BLOCK);
- BLOCK_START (top_stack->cur_block) = pst->text_low (objfile);
- BLOCK_END (top_stack->cur_block) = 0;
+ top_stack->cur_st = cust->primary_filetab ();
+ top_stack->cur_block = cust->blockvector ()->static_block ();
+ top_stack->cur_block->set_start (pst->text_low (objfile));
+ top_stack->cur_block->set_end (0);
top_stack->blocktype = stFile;
top_stack->cur_type = 0;
top_stack->procadr = 0;
@@ -4173,20 +4171,19 @@ mdebug_expand_psymtab (legacy_psymtab *pst, struct objfile *objfile)
size = lines->nitems;
if (size > 1)
--size;
- SYMTAB_LINETABLE (COMPUNIT_FILETABS (cust))
- = ((struct linetable *)
- obstack_copy (&mdebugread_objfile->objfile_obstack,
- lines, (sizeof (struct linetable)
- + size * sizeof (lines->item))));
+ cust->primary_filetab ()->set_linetable
+ ((struct linetable *)
+ obstack_copy (&mdebugread_objfile->objfile_obstack,
+ lines, (sizeof (struct linetable)
+ + size * sizeof (lines->item))));
xfree (lines);
/* .. and our share of externals.
XXX use the global list to speed up things here. How?
FIXME, Maybe quit once we have found the right number of ext's? */
- top_stack->cur_st = COMPUNIT_FILETABS (cust);
+ top_stack->cur_st = cust->primary_filetab ();
top_stack->cur_block
- = BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (top_stack->cur_st),
- GLOBAL_BLOCK);
+ = top_stack->cur_st->compunit ()->blockvector ()->global_block ();
top_stack->blocktype = stFile;
ext_ptr = PST_PRIVATE (pst)->extern_tab;
@@ -4199,19 +4196,19 @@ mdebug_expand_psymtab (legacy_psymtab *pst, struct objfile *objfile)
from a shared library, so tell the user only if verbose is on. */
if (info_verbose && n_undef_symbols)
{
- printf_filtered (_("File %s contains %d unresolved references:"),
- symtab_to_filename_for_display
- (COMPUNIT_FILETABS (cust)),
- n_undef_symbols);
- printf_filtered ("\n\t%4d variables\n\t%4d "
- "procedures\n\t%4d labels\n",
- n_undef_vars, n_undef_procs, n_undef_labels);
+ gdb_printf (_("File %s contains %d unresolved references:"),
+ symtab_to_filename_for_display
+ (cust->primary_filetab ()),
+ n_undef_symbols);
+ gdb_printf ("\n\t%4d variables\n\t%4d "
+ "procedures\n\t%4d labels\n",
+ n_undef_vars, n_undef_procs, n_undef_labels);
n_undef_symbols = n_undef_labels = n_undef_vars = n_undef_procs = 0;
}
pop_parse_stack ();
- sort_blocks (COMPUNIT_FILETABS (cust));
+ sort_blocks (cust->primary_filetab ());
}
/* Now link the psymtab and the symtab. */
@@ -4466,13 +4463,13 @@ mylookup_symbol (const char *name, const struct block *block,
ALL_BLOCK_SYMBOLS (block, iter, sym)
{
if (sym->linkage_name ()[0] == inc
- && SYMBOL_DOMAIN (sym) == domain
- && SYMBOL_CLASS (sym) == theclass
+ && sym->domain () == domain
+ && sym->aclass () == theclass
&& strcmp (sym->linkage_name (), name) == 0)
return sym;
}
- block = BLOCK_SUPERBLOCK (block);
+ block = block->superblock ();
if (block)
return mylookup_symbol (name, block, domain, theclass);
return 0;
@@ -4484,8 +4481,8 @@ mylookup_symbol (const char *name, const struct block *block,
static void
add_symbol (struct symbol *s, struct symtab *symtab, struct block *b)
{
- symbol_set_symtab (s, symtab);
- mdict_add_symbol (BLOCK_MULTIDICT (b), s);
+ s->set_symtab (symtab);
+ mdict_add_symbol (b->multidict (), s);
}
/* Add a new block B to a symtab S. */
@@ -4495,16 +4492,18 @@ add_block (struct block *b, struct symtab *s)
{
/* Cast away "const", but that's ok because we're building the
symtab and blockvector here. */
- struct blockvector *bv = (struct blockvector *) SYMTAB_BLOCKVECTOR (s);
+ struct blockvector *bv
+ = (struct blockvector *) s->compunit ()->blockvector ();
bv = (struct blockvector *) xrealloc ((void *) bv,
(sizeof (struct blockvector)
- + BLOCKVECTOR_NBLOCKS (bv)
- * sizeof (bv->block)));
- if (bv != SYMTAB_BLOCKVECTOR (s))
- SYMTAB_BLOCKVECTOR (s) = bv;
+ + bv->num_blocks ()
+ * sizeof (struct block)));
+ if (bv != s->compunit ()->blockvector ())
+ s->compunit ()->set_blockvector (bv);
- BLOCKVECTOR_BLOCK (bv, BLOCKVECTOR_NBLOCKS (bv)++) = b;
+ bv->set_block (bv->num_blocks (), b);
+ bv->set_num_blocks (bv->num_blocks () + 1);
}
/* Add a new linenumber entry (LINENO,ADR) to a linevector LT.
@@ -4547,13 +4546,13 @@ add_line (struct linetable *lt, int lineno, CORE_ADDR adr, int last)
static bool
block_is_less_than (const struct block *b1, const struct block *b2)
{
- CORE_ADDR start1 = BLOCK_START (b1);
- CORE_ADDR start2 = BLOCK_START (b2);
+ CORE_ADDR start1 = b1->start ();
+ CORE_ADDR start2 = b2->start ();
if (start1 != start2)
return start1 < start2;
- return (BLOCK_END (b2)) < (BLOCK_END (b1));
+ return (b2->end ()) < (b1->end ());
}
/* Sort the blocks of a symtab S.
@@ -4565,15 +4564,16 @@ sort_blocks (struct symtab *s)
{
/* We have to cast away const here, but this is ok because we're
constructing the blockvector in this code. */
- struct blockvector *bv = (struct blockvector *) SYMTAB_BLOCKVECTOR (s);
+ struct blockvector *bv
+ = (struct blockvector *) s->compunit ()->blockvector ();
- if (BLOCKVECTOR_NBLOCKS (bv) <= FIRST_LOCAL_BLOCK)
+ if (bv->num_blocks () <= FIRST_LOCAL_BLOCK)
{
/* Cosmetic */
- if (BLOCK_END (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK)) == 0)
- BLOCK_START (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK)) = 0;
- if (BLOCK_END (BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK)) == 0)
- BLOCK_START (BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK)) = 0;
+ if (bv->global_block ()->end () == 0)
+ bv->global_block ()->set_start (0);
+ if (bv->static_block ()->end () == 0)
+ bv->static_block ()->set_start (0);
return;
}
/*
@@ -4582,28 +4582,27 @@ sort_blocks (struct symtab *s)
* are very different. It would be nice to find a reliable test
* to detect -O3 images in advance.
*/
- if (BLOCKVECTOR_NBLOCKS (bv) > FIRST_LOCAL_BLOCK + 1)
- std::sort (&BLOCKVECTOR_BLOCK (bv, FIRST_LOCAL_BLOCK),
- &BLOCKVECTOR_BLOCK (bv, BLOCKVECTOR_NBLOCKS (bv)),
- block_is_less_than);
+ if (bv->num_blocks () > FIRST_LOCAL_BLOCK + 1)
+ {
+ gdb::array_view<block *> blocks_view = bv->blocks ();
+
+ std::sort (blocks_view.begin () + FIRST_LOCAL_BLOCK,
+ blocks_view.end (), block_is_less_than);
+ }
{
CORE_ADDR high = 0;
- int i, j = BLOCKVECTOR_NBLOCKS (bv);
+ int i, j = bv->num_blocks ();
for (i = FIRST_LOCAL_BLOCK; i < j; i++)
- if (high < BLOCK_END (BLOCKVECTOR_BLOCK (bv, i)))
- high = BLOCK_END (BLOCKVECTOR_BLOCK (bv, i));
- BLOCK_END (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK)) = high;
+ if (high < bv->block (i)->end ())
+ high = bv->block (i)->end ();
+ bv->global_block ()->set_end (high);
}
- BLOCK_START (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK)) =
- BLOCK_START (BLOCKVECTOR_BLOCK (bv, FIRST_LOCAL_BLOCK));
-
- BLOCK_START (BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK)) =
- BLOCK_START (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK));
- BLOCK_END (BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK)) =
- BLOCK_END (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK));
+ bv->global_block ()->set_start (bv->block (FIRST_LOCAL_BLOCK)->start ());
+ bv->static_block ()->set_start (bv->global_block ()->start ());
+ bv->static_block ()->set_end (bv->global_block ()->end ());
}
@@ -4623,18 +4622,17 @@ new_symtab (const char *name, int maxlines, struct objfile *objfile)
add_compunit_symtab_to_objfile (cust);
symtab = allocate_symtab (cust, name);
- SYMTAB_LINETABLE (symtab) = new_linetable (maxlines);
+ symtab->set_linetable (new_linetable (maxlines));
lang = compunit_language (cust);
/* All symtabs must have at least two blocks. */
bv = new_bvect (2);
- BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK) = new_block (NON_FUNCTION_BLOCK, lang);
- BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK) = new_block (NON_FUNCTION_BLOCK, lang);
- BLOCK_SUPERBLOCK (BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK)) =
- BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
- COMPUNIT_BLOCKVECTOR (cust) = bv;
+ bv->set_block (GLOBAL_BLOCK, new_block (NON_FUNCTION_BLOCK, lang));
+ bv->set_block (STATIC_BLOCK, new_block (NON_FUNCTION_BLOCK, lang));
+ bv->static_block ()->set_superblock (bv->global_block ());
+ cust->set_blockvector (bv);
- COMPUNIT_DEBUGFORMAT (cust) = "ECOFF";
+ cust->set_debugformat ("ECOFF");
return cust;
}
@@ -4706,8 +4704,7 @@ new_bvect (int nblocks)
size = sizeof (struct blockvector) + nblocks * sizeof (struct block *);
bv = (struct blockvector *) xzalloc (size);
-
- BLOCKVECTOR_NBLOCKS (bv) = nblocks;
+ bv->set_num_blocks (nblocks);
return bv;
}
@@ -4726,9 +4723,9 @@ new_block (enum block_type type, enum language language)
struct block *retval = XCNEW (struct block);
if (type == FUNCTION_BLOCK)
- BLOCK_MULTIDICT (retval) = mdict_create_linear_expandable (language);
+ retval->set_multidict (mdict_create_linear_expandable (language));
else
- BLOCK_MULTIDICT (retval) = mdict_create_hashed_expandable (language);
+ retval->set_multidict (mdict_create_hashed_expandable (language));
return retval;
}
diff --git a/gdb/memattr.c b/gdb/memattr.c
index f83888449a1..fbcbe1ddd9f 100644
--- a/gdb/memattr.c
+++ b/gdb/memattr.c
@@ -60,11 +60,11 @@ show_inaccessible_by_default (struct ui_file *file, int from_tty,
const char *value)
{
if (inaccessible_by_default)
- fprintf_filtered (file, _("Unknown memory addresses will "
- "be treated as inaccessible.\n"));
+ gdb_printf (file, _("Unknown memory addresses will "
+ "be treated as inaccessible.\n"));
else
- fprintf_filtered (file, _("Unknown memory addresses "
- "will be treated as RAM.\n"));
+ gdb_printf (file, _("Unknown memory addresses "
+ "will be treated as RAM.\n"));
}
/* This function should be called before any command which would
@@ -121,7 +121,7 @@ create_user_mem_region (CORE_ADDR lo, CORE_ADDR hi,
/* lo == hi is a useless empty region. */
if (lo >= hi && hi != 0)
{
- printf_filtered (_("invalid memory region: low >= high\n"));
+ gdb_printf (_("invalid memory region: low >= high\n"));
return;
}
@@ -148,7 +148,7 @@ create_user_mem_region (CORE_ADDR lo, CORE_ADDR hi,
|| (hi > n.lo && (hi <= n.hi || n.hi == 0))
|| (lo <= n.lo && ((hi >= n.hi && n.hi != 0) || hi == 0)))
{
- printf_filtered (_("overlapping memory region\n"));
+ gdb_printf (_("overlapping memory region\n"));
return;
}
}
@@ -339,42 +339,42 @@ static void
info_mem_command (const char *args, int from_tty)
{
if (mem_use_target ())
- printf_filtered (_("Using memory regions provided by the target.\n"));
+ gdb_printf (_("Using memory regions provided by the target.\n"));
else
- printf_filtered (_("Using user-defined memory regions.\n"));
+ gdb_printf (_("Using user-defined memory regions.\n"));
require_target_regions ();
if (mem_region_list->empty ())
{
- printf_filtered (_("There are no memory regions defined.\n"));
+ gdb_printf (_("There are no memory regions defined.\n"));
return;
}
- printf_filtered ("Num ");
- printf_filtered ("Enb ");
- printf_filtered ("Low Addr ");
+ gdb_printf ("Num ");
+ gdb_printf ("Enb ");
+ gdb_printf ("Low Addr ");
if (gdbarch_addr_bit (target_gdbarch ()) > 32)
- printf_filtered (" ");
- printf_filtered ("High Addr ");
+ gdb_printf (" ");
+ gdb_printf ("High Addr ");
if (gdbarch_addr_bit (target_gdbarch ()) > 32)
- printf_filtered (" ");
- printf_filtered ("Attrs ");
- printf_filtered ("\n");
+ gdb_printf (" ");
+ gdb_printf ("Attrs ");
+ gdb_printf ("\n");
for (const mem_region &m : *mem_region_list)
{
const char *tmp;
- printf_filtered ("%-3d %-3c\t",
- m.number,
- m.enabled_p ? 'y' : 'n');
+ gdb_printf ("%-3d %-3c\t",
+ m.number,
+ m.enabled_p ? 'y' : 'n');
if (gdbarch_addr_bit (target_gdbarch ()) <= 32)
tmp = hex_string_custom (m.lo, 8);
else
tmp = hex_string_custom (m.lo, 16);
- printf_filtered ("%s ", tmp);
+ gdb_printf ("%s ", tmp);
if (gdbarch_addr_bit (target_gdbarch ()) <= 32)
{
@@ -391,7 +391,7 @@ info_mem_command (const char *args, int from_tty)
tmp = hex_string_custom (m.hi, 16);
}
- printf_filtered ("%s ", tmp);
+ gdb_printf ("%s ", tmp);
/* Print a token for each attribute.
@@ -408,32 +408,32 @@ info_mem_command (const char *args, int from_tty)
switch (m.attrib.mode)
{
case MEM_RW:
- printf_filtered ("rw ");
+ gdb_printf ("rw ");
break;
case MEM_RO:
- printf_filtered ("ro ");
+ gdb_printf ("ro ");
break;
case MEM_WO:
- printf_filtered ("wo ");
+ gdb_printf ("wo ");
break;
case MEM_FLASH:
- printf_filtered ("flash blocksize 0x%x ", m.attrib.blocksize);
+ gdb_printf ("flash blocksize 0x%x ", m.attrib.blocksize);
break;
}
switch (m.attrib.width)
{
case MEM_WIDTH_8:
- printf_filtered ("8 ");
+ gdb_printf ("8 ");
break;
case MEM_WIDTH_16:
- printf_filtered ("16 ");
+ gdb_printf ("16 ");
break;
case MEM_WIDTH_32:
- printf_filtered ("32 ");
+ gdb_printf ("32 ");
break;
case MEM_WIDTH_64:
- printf_filtered ("64 ");
+ gdb_printf ("64 ");
break;
case MEM_WIDTH_UNSPECIFIED:
break;
@@ -441,24 +441,24 @@ info_mem_command (const char *args, int from_tty)
#if 0
if (attrib->hwbreak)
- printf_filtered ("hwbreak");
+ gdb_printf ("hwbreak");
else
- printf_filtered ("swbreak");
+ gdb_printf ("swbreak");
#endif
if (m.attrib.cache)
- printf_filtered ("cache ");
+ gdb_printf ("cache ");
else
- printf_filtered ("nocache ");
+ gdb_printf ("nocache ");
#if 0
if (attrib->verify)
- printf_filtered ("verify ");
+ gdb_printf ("verify ");
else
- printf_filtered ("noverify ");
+ gdb_printf ("noverify ");
#endif
- printf_filtered ("\n");
+ gdb_printf ("\n");
}
}
@@ -474,7 +474,7 @@ mem_enable (int num)
m.enabled_p = 1;
return;
}
- printf_filtered (_("No memory region number %d.\n"), num);
+ gdb_printf (_("No memory region number %d.\n"), num);
}
static void
@@ -512,7 +512,7 @@ mem_disable (int num)
m.enabled_p = 0;
return;
}
- printf_filtered (_("No memory region number %d.\n"), num);
+ gdb_printf (_("No memory region number %d.\n"), num);
}
static void
@@ -545,7 +545,7 @@ mem_delete (int num)
{
if (!mem_region_list)
{
- printf_filtered (_("No memory region number %d.\n"), num);
+ gdb_printf (_("No memory region number %d.\n"), num);
return;
}
@@ -558,7 +558,7 @@ mem_delete (int num)
if (it != mem_region_list->end ())
mem_region_list->erase (it);
else
- printf_filtered (_("No memory region number %d.\n"), num);
+ gdb_printf (_("No memory region number %d.\n"), num);
}
static void
diff --git a/gdb/mep-tdep.c b/gdb/mep-tdep.c
index 11d79a0e9e7..6b3a62391c0 100644
--- a/gdb/mep-tdep.c
+++ b/gdb/mep-tdep.c
@@ -37,7 +37,6 @@
#include "regcache.h"
#include "remote.h"
#include "sim-regno.h"
-#include "disasm.h"
#include "trad-frame.h"
#include "reggroups.h"
#include "elf-bfd.h"
@@ -1022,14 +1021,14 @@ mep_register_name (struct gdbarch *gdbarch, int regnr)
/* Custom register groups for the MeP. */
-static struct reggroup *mep_csr_reggroup; /* control/special */
-static struct reggroup *mep_cr_reggroup; /* coprocessor general-purpose */
-static struct reggroup *mep_ccr_reggroup; /* coprocessor control */
+static const reggroup *mep_csr_reggroup; /* control/special */
+static const reggroup *mep_cr_reggroup; /* coprocessor general-purpose */
+static const reggroup *mep_ccr_reggroup; /* coprocessor control */
static int
mep_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
- struct reggroup *group)
+ const struct reggroup *group)
{
/* Filter reserved or unused register numbers. */
{
@@ -2369,7 +2368,7 @@ mep_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
const char *file_endianness
= bfd_big_endian (info.abfd) ? "big" : "little";
- fputc_unfiltered ('\n', gdb_stderr);
+ gdb_putc ('\n', gdb_stderr);
if (module_name)
warning (_("the MeP module '%s' is %s-endian, but the executable\n"
"%s is %s-endian."),
@@ -2428,10 +2427,6 @@ mep_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
set_gdbarch_stab_reg_to_regnum (gdbarch, mep_debug_reg_to_regnum);
set_gdbarch_register_reggroup_p (gdbarch, mep_register_reggroup_p);
- reggroup_add (gdbarch, all_reggroup);
- reggroup_add (gdbarch, general_reggroup);
- reggroup_add (gdbarch, save_reggroup);
- reggroup_add (gdbarch, restore_reggroup);
reggroup_add (gdbarch, mep_csr_reggroup);
reggroup_add (gdbarch, mep_cr_reggroup);
reggroup_add (gdbarch, mep_ccr_reggroup);
diff --git a/gdb/mi/mi-cmd-break.c b/gdb/mi/mi-cmd-break.c
index 7be4c3cb3b8..1d9fc0de436 100644
--- a/gdb/mi/mi-cmd-break.c
+++ b/gdb/mi/mi-cmd-break.c
@@ -30,7 +30,7 @@
#include "language.h"
#include "location.h"
#include "linespec.h"
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
#include <ctype.h>
#include "tracepoint.h"
@@ -180,7 +180,7 @@ mi_cmd_break_insert_1 (int dprintf, const char *command, char **argv, int argc)
symbol_name_match_type match_type = symbol_name_match_type::WILD;
enum bptype type_wanted;
event_location_up location;
- struct breakpoint_ops *ops;
+ const struct breakpoint_ops *ops;
int is_explicit = 0;
struct explicit_location explicit_loc;
std::string extra_string;
@@ -322,17 +322,17 @@ mi_cmd_break_insert_1 (int dprintf, const char *command, char **argv, int argc)
A simulator or an emulator could conceivably implement fast
regular non-jump based tracepoints. */
type_wanted = hardware ? bp_fast_tracepoint : bp_tracepoint;
- ops = &tracepoint_breakpoint_ops;
+ ops = breakpoint_ops_for_event_location (nullptr, true);
}
else if (dprintf)
{
type_wanted = bp_dprintf;
- ops = &dprintf_breakpoint_ops;
+ ops = &base_breakpoint_ops;
}
else
{
type_wanted = hardware ? bp_hardware_breakpoint : bp_breakpoint;
- ops = &bkpt_breakpoint_ops;
+ ops = &base_breakpoint_ops;
}
if (is_explicit)
diff --git a/gdb/mi/mi-cmd-file.c b/gdb/mi/mi-cmd-file.c
index 8fdcf891cf5..0ed7bed82e2 100644
--- a/gdb/mi/mi-cmd-file.c
+++ b/gdb/mi/mi-cmd-file.c
@@ -28,7 +28,7 @@
#include "psymtab.h"
#include "solib.h"
#include "solist.h"
-#include "gdb_regex.h"
+#include "gdbsupport/gdb_regex.h"
/* Return to the client the absolute path and line number of the
current file being executed. */
@@ -59,7 +59,7 @@ mi_cmd_file_list_exec_source_file (const char *command, char **argv, int argc)
uiout->field_string ("fullname", symtab_to_fullname (st.symtab));
uiout->field_signed ("macro-info",
- COMPUNIT_MACRO_TABLE (SYMTAB_COMPUNIT (st.symtab)) != NULL);
+ st.symtab->compunit ()->macro_table () != NULL);
}
/* Implement -file-list-exec-source-files command. */
diff --git a/gdb/mi/mi-cmd-stack.c b/gdb/mi/mi-cmd-stack.c
index 87ed547e5fb..0fe204dbc66 100644
--- a/gdb/mi/mi-cmd-stack.c
+++ b/gdb/mi/mi-cmd-stack.c
@@ -36,6 +36,8 @@
#include "mi-parse.h"
#include "gdbsupport/gdb_optional.h"
#include "safe-ctype.h"
+#include "inferior.h"
+#include "observable.h"
enum what_to_list { locals, arguments, all };
@@ -520,13 +522,13 @@ list_arg_or_local (const struct frame_arg *arg, enum what_to_list what,
stb.puts ("@entry");
uiout->field_stream ("name", stb);
- if (what == all && SYMBOL_IS_ARGUMENT (arg->sym))
+ if (what == all && arg->sym->is_argument ())
uiout->field_signed ("arg", 1);
if (values == PRINT_SIMPLE_VALUES)
{
- check_typedef (arg->sym->type);
- type_print (arg->sym->type, "", &stb, -1);
+ check_typedef (arg->sym->type ());
+ type_print (arg->sym->type (), "", &stb, -1);
uiout->field_stream ("type", stb);
}
@@ -599,7 +601,7 @@ list_args_or_locals (const frame_print_options &fp_opts,
{
int print_me = 0;
- switch (SYMBOL_CLASS (sym))
+ switch (sym->aclass ())
{
default:
case LOC_UNDEF: /* catches errors */
@@ -623,9 +625,9 @@ list_args_or_locals (const frame_print_options &fp_opts,
if (what == all)
print_me = 1;
else if (what == locals)
- print_me = !SYMBOL_IS_ARGUMENT (sym);
+ print_me = !sym->is_argument ();
else
- print_me = SYMBOL_IS_ARGUMENT (sym);
+ print_me = sym->is_argument ();
break;
}
if (print_me)
@@ -633,7 +635,7 @@ list_args_or_locals (const frame_print_options &fp_opts,
struct symbol *sym2;
struct frame_arg arg, entryarg;
- if (SYMBOL_IS_ARGUMENT (sym))
+ if (sym->is_argument ())
sym2 = lookup_symbol_search_name (sym->search_name (),
block, VAR_DOMAIN).symbol;
else
@@ -648,13 +650,13 @@ list_args_or_locals (const frame_print_options &fp_opts,
switch (values)
{
case PRINT_SIMPLE_VALUES:
- type = check_typedef (sym2->type);
+ type = check_typedef (sym2->type ());
if (type->code () != TYPE_CODE_ARRAY
&& type->code () != TYPE_CODE_STRUCT
&& type->code () != TYPE_CODE_UNION)
{
case PRINT_ALL_VALUES:
- if (SYMBOL_IS_ARGUMENT (sym))
+ if (sym->is_argument ())
read_frame_arg (fp_opts, sym2, fi, &arg, &entryarg);
else
read_frame_local (sym2, fi, &arg);
@@ -669,10 +671,10 @@ list_args_or_locals (const frame_print_options &fp_opts,
}
}
- if (BLOCK_FUNCTION (block))
+ if (block->function ())
break;
else
- block = BLOCK_SUPERBLOCK (block);
+ block = block->superblock ();
}
}
@@ -755,8 +757,7 @@ mi_cmd_stack_select_frame (const char *command, char **argv, int argc)
{
if (argc == 0 || argc > 1)
error (_("-stack-select-frame: Usage: FRAME_SPEC"));
-
- select_frame_for_mi (parse_frame_specification (argv[0]));
+ select_frame (parse_frame_specification (argv[0]));
}
void
diff --git a/gdb/mi/mi-cmd-var.c b/gdb/mi/mi-cmd-var.c
index c660fd5ab65..3db09cf7815 100644
--- a/gdb/mi/mi-cmd-var.c
+++ b/gdb/mi/mi-cmd-var.c
@@ -125,9 +125,9 @@ mi_cmd_var_create (const char *command, char **argv, int argc)
}
if (varobjdebug)
- fprintf_unfiltered (gdb_stdlog,
- "Name=\"%s\", Frame=\"%s\" (%s), Expression=\"%s\"\n",
- name, frame, hex_string (frameaddr), expr);
+ gdb_printf (gdb_stdlog,
+ "Name=\"%s\", Frame=\"%s\" (%s), Expression=\"%s\"\n",
+ name, frame, hex_string (frameaddr), expr);
var = varobj_create (name, expr, frameaddr, var_type);
diff --git a/gdb/mi/mi-cmds.c b/gdb/mi/mi-cmds.c
index cd7cabdda9b..05714693023 100644
--- a/gdb/mi/mi-cmds.c
+++ b/gdb/mi/mi-cmds.c
@@ -26,10 +26,6 @@
#include <map>
#include <string>
-/* A command held in the MI_CMD_TABLE. */
-
-using mi_command_up = std::unique_ptr<struct mi_command>;
-
/* MI command table (built at run time). */
static std::map<std::string, mi_command_up> mi_cmd_table;
@@ -49,11 +45,9 @@ struct mi_command_mi : public mi_command
gdb_assert (func != nullptr);
}
-protected:
-
/* Called when this MI command has been invoked, calls m_argv_function
with arguments contained within PARSE. */
- void do_invoke (struct mi_parse *parse) const override
+ void invoke (struct mi_parse *parse) const override
{
mi_parse_argv (parse->args, parse);
@@ -87,13 +81,11 @@ struct mi_command_cli : public mi_command
m_args_p (args_p)
{ /* Nothing. */ }
-protected:
-
/* Called when this MI command has been invoked, calls the m_cli_name
CLI function. In m_args_p is true then the argument string from
within PARSE is passed through to the CLI function, otherwise nullptr
is passed through to the CLI function as its argument string. */
- void do_invoke (struct mi_parse *parse) const override
+ void invoke (struct mi_parse *parse) const override
{
const char *args = m_args_p ? parse->args : nullptr;
mi_execute_cli_command (m_cli_name, m_args_p, args);
@@ -108,12 +100,9 @@ private:
bool m_args_p;
};
-/* Insert COMMAND into the global mi_cmd_table. Return false if
- COMMAND->name already exists in mi_cmd_table, in which case COMMAND will
- not have been added to mi_cmd_table. Otherwise, return true, and
- COMMAND was added to mi_cmd_table. */
+/* See mi-cmds.h. */
-static bool
+bool
insert_mi_cmd_entry (mi_command_up command)
{
gdb_assert (command != nullptr);
@@ -127,6 +116,32 @@ insert_mi_cmd_entry (mi_command_up command)
return true;
}
+/* See mi-cmds.h. */
+
+bool
+remove_mi_cmd_entry (const std::string &name)
+{
+ if (mi_cmd_table.find (name) == mi_cmd_table.end ())
+ return false;
+
+ mi_cmd_table.erase (name);
+ return true;
+}
+
+/* See mi-cmds.h. */
+
+void
+remove_mi_cmd_entries (remove_mi_cmd_entries_ftype callback)
+{
+ for (auto it = mi_cmd_table.cbegin (); it != mi_cmd_table.cend (); )
+ {
+ if (callback (it->second.get ()))
+ it = mi_cmd_table.erase (it);
+ else
+ ++it;
+ }
+}
+
/* Create and register a new MI command with an MI specific implementation.
NAME must name an MI command that does not already exist, otherwise an
assertion will trigger. */
@@ -168,16 +183,6 @@ mi_command::mi_command (const char *name, int *suppress_notification)
/* See mi-cmds.h. */
-void
-mi_command::invoke (struct mi_parse *parse) const
-{
- gdb::optional<scoped_restore_tmpl<int>> restore
- = do_suppress_notification ();
- this->do_invoke (parse);
-}
-
-/* See mi-cmds.h. */
-
gdb::optional<scoped_restore_tmpl<int>>
mi_command::do_suppress_notification () const
{
diff --git a/gdb/mi/mi-cmds.h b/gdb/mi/mi-cmds.h
index 2a93a9f5476..9ffb11bf997 100644
--- a/gdb/mi/mi-cmds.h
+++ b/gdb/mi/mi-cmds.h
@@ -22,7 +22,9 @@
#ifndef MI_MI_CMDS_H
#define MI_MI_CMDS_H
+#include "gdbsupport/function-view.h"
#include "gdbsupport/gdb_optional.h"
+#include "mi/mi-main.h"
enum print_values {
PRINT_NO_VALUES,
@@ -159,17 +161,21 @@ struct mi_command
const char *name () const
{ return m_name; }
- /* Execute the MI command. Can throw an exception if something goes
- wrong. */
- void invoke (struct mi_parse *parse) const;
-
-protected:
-
- /* The core of command invocation, this needs to be overridden in each
- base class. PARSE is the parsed command line from the user. */
- virtual void do_invoke (struct mi_parse *parse) const = 0;
-
-private:
+ /* Execute the MI command. this needs to be overridden in each
+ base class. PARSE is the parsed command line from the user.
+ Can throw an exception if something goes wrong. */
+ virtual void invoke (struct mi_parse *parse) const = 0;
+
+ /* Return whether this command preserves user selected context (thread
+ and frame). */
+ bool preserve_user_selected_context () const
+ {
+ /* Here we exploit the fact that if MI command is supposed to change
+ user context, then it should not emit change notifications. Therefore if
+ command does not suppress user context change notifications, then it should
+ preserve the context. */
+ return m_suppress_notification != &mi_suppress_notification.user_selected_context;
+ }
/* If this command was created with a suppress notifications pointer,
then this function will set the suppress flag and return a
@@ -180,6 +186,8 @@ private:
then this function returns an empty gdb::optional. */
gdb::optional<scoped_restore_tmpl<int>> do_suppress_notification () const;
+private:
+
/* The name of the command. */
const char *m_name;
@@ -187,6 +195,10 @@ private:
int *m_suppress_notification;
};
+/* A command held in the global mi_cmd_table. */
+
+using mi_command_up = std::unique_ptr<struct mi_command>;
+
/* Lookup a command in the MI command table, returns nullptr if COMMAND is
not found. */
@@ -194,4 +206,24 @@ extern mi_command *mi_cmd_lookup (const char *command);
extern void mi_execute_command (const char *cmd, int from_tty);
+/* Insert COMMAND into the global mi_cmd_table. Return false if
+ COMMAND->name already exists in mi_cmd_table, in which case COMMAND will
+ not have been added to mi_cmd_table. Otherwise, return true, and
+ COMMAND was added to mi_cmd_table. */
+
+extern bool insert_mi_cmd_entry (mi_command_up command);
+
+/* Remove the command called NAME from the global mi_cmd_table. Return
+ true if the removal was a success, otherwise return false, which
+ indicates no command called NAME was found in the mi_cmd_table. */
+
+extern bool remove_mi_cmd_entry (const std::string &name);
+
+/* Call CALLBACK for each registered MI command. Remove commands for which
+ CALLBACK returns true. */
+
+using remove_mi_cmd_entries_ftype
+ = gdb::function_view<bool (mi_command *)>;
+extern void remove_mi_cmd_entries (remove_mi_cmd_entries_ftype callback);
+
#endif /* MI_MI_CMDS_H */
diff --git a/gdb/mi/mi-console.c b/gdb/mi/mi-console.c
index 9db87fe180c..5cdb486be5e 100644
--- a/gdb/mi/mi-console.c
+++ b/gdb/mi/mi-console.c
@@ -76,18 +76,18 @@ mi_console_file::flush ()
size_t length_buf = str.size ();
const char *buf = str.data ();
- fputs_unfiltered (m_prefix, m_raw);
+ gdb_puts (m_prefix, m_raw);
if (m_quote)
{
- fputc_unfiltered (m_quote, m_raw);
+ gdb_putc (m_quote, m_raw);
m_raw->putstrn (buf, length_buf, m_quote);
- fputc_unfiltered (m_quote, m_raw);
- fputc_unfiltered ('\n', m_raw);
+ gdb_putc (m_quote, m_raw);
+ gdb_putc ('\n', m_raw);
}
else
{
m_raw->putstrn (buf, length_buf, 0);
- fputc_unfiltered ('\n', m_raw);
+ gdb_putc ('\n', m_raw);
}
gdb_flush (m_raw);
}
diff --git a/gdb/mi/mi-interp.c b/gdb/mi/mi-interp.c
index e69ad9aff2d..8d6e0334a90 100644
--- a/gdb/mi/mi-interp.c
+++ b/gdb/mi/mi-interp.c
@@ -98,7 +98,7 @@ display_mi_prompt (struct mi_interp *mi)
{
struct ui *ui = current_ui;
- fputs_unfiltered ("(gdb) \n", mi->raw_stdout);
+ gdb_puts ("(gdb) \n", mi->raw_stdout);
gdb_flush (mi->raw_stdout);
ui->prompt_state = PROMPTED;
}
@@ -112,6 +112,16 @@ as_mi_interp (struct interp *interp)
return dynamic_cast<mi_interp *> (interp);
}
+/* Observer for the command_error notification. */
+
+static void
+mi_on_command_error ()
+{
+ mi_interp *mi = as_mi_interp (top_level_interpreter ());
+ if (mi != nullptr)
+ display_mi_prompt (mi);
+}
+
void
mi_interp::init (bool top_level)
{
@@ -149,9 +159,9 @@ mi_interp::init (bool top_level)
target_terminal::scoped_restore_terminal_state term_state;
target_terminal::ours_for_output ();
- fprintf_unfiltered (mi->event_channel,
- "thread-group-added,id=\"i%d\"",
- inf->num);
+ gdb_printf (mi->event_channel,
+ "thread-group-added,id=\"i%d\"",
+ inf->num);
gdb_flush (mi->event_channel);
}
@@ -338,9 +348,9 @@ mi_new_thread (struct thread_info *t)
target_terminal::scoped_restore_terminal_state term_state;
target_terminal::ours_for_output ();
- fprintf_unfiltered (mi->event_channel,
- "thread-created,id=\"%d\",group-id=\"i%d\"",
- t->global_num, t->inf->num);
+ gdb_printf (mi->event_channel,
+ "thread-created,id=\"%d\",group-id=\"i%d\"",
+ t->global_num, t->inf->num);
gdb_flush (mi->event_channel);
}
}
@@ -360,9 +370,9 @@ mi_thread_exit (struct thread_info *t, int silent)
target_terminal::scoped_restore_terminal_state term_state;
target_terminal::ours_for_output ();
- fprintf_unfiltered (mi->event_channel,
- "thread-exited,id=\"%d\",group-id=\"i%d\"",
- t->global_num, t->inf->num);
+ gdb_printf (mi->event_channel,
+ "thread-exited,id=\"%d\",group-id=\"i%d\"",
+ t->global_num, t->inf->num);
gdb_flush (mi->event_channel);
}
}
@@ -387,24 +397,24 @@ mi_record_changed (struct inferior *inferior, int started, const char *method,
{
if (format != NULL)
{
- fprintf_unfiltered (mi->event_channel,
- "record-started,thread-group=\"i%d\","
- "method=\"%s\",format=\"%s\"",
- inferior->num, method, format);
+ gdb_printf (mi->event_channel,
+ "record-started,thread-group=\"i%d\","
+ "method=\"%s\",format=\"%s\"",
+ inferior->num, method, format);
}
else
{
- fprintf_unfiltered (mi->event_channel,
- "record-started,thread-group=\"i%d\","
- "method=\"%s\"",
- inferior->num, method);
+ gdb_printf (mi->event_channel,
+ "record-started,thread-group=\"i%d\","
+ "method=\"%s\"",
+ inferior->num, method);
}
}
else
{
- fprintf_unfiltered (mi->event_channel,
- "record-stopped,thread-group=\"i%d\"",
- inferior->num);
+ gdb_printf (mi->event_channel,
+ "record-stopped,thread-group=\"i%d\"",
+ inferior->num);
}
gdb_flush (mi->event_channel);
@@ -432,9 +442,9 @@ mi_inferior_added (struct inferior *inf)
target_terminal::scoped_restore_terminal_state term_state;
target_terminal::ours_for_output ();
- fprintf_unfiltered (mi->event_channel,
- "thread-group-added,id=\"i%d\"",
- inf->num);
+ gdb_printf (mi->event_channel,
+ "thread-group-added,id=\"i%d\"",
+ inf->num);
gdb_flush (mi->event_channel);
}
}
@@ -452,9 +462,9 @@ mi_inferior_appeared (struct inferior *inf)
target_terminal::scoped_restore_terminal_state term_state;
target_terminal::ours_for_output ();
- fprintf_unfiltered (mi->event_channel,
- "thread-group-started,id=\"i%d\",pid=\"%d\"",
- inf->num, inf->pid);
+ gdb_printf (mi->event_channel,
+ "thread-group-started,id=\"i%d\",pid=\"%d\"",
+ inf->num, inf->pid);
gdb_flush (mi->event_channel);
}
}
@@ -473,12 +483,12 @@ mi_inferior_exit (struct inferior *inf)
target_terminal::ours_for_output ();
if (inf->has_exit_code)
- fprintf_unfiltered (mi->event_channel,
- "thread-group-exited,id=\"i%d\",exit-code=\"%s\"",
- inf->num, int_string (inf->exit_code, 8, 0, 0, 1));
+ gdb_printf (mi->event_channel,
+ "thread-group-exited,id=\"i%d\",exit-code=\"%s\"",
+ inf->num, int_string (inf->exit_code, 8, 0, 0, 1));
else
- fprintf_unfiltered (mi->event_channel,
- "thread-group-exited,id=\"i%d\"", inf->num);
+ gdb_printf (mi->event_channel,
+ "thread-group-exited,id=\"i%d\"", inf->num);
gdb_flush (mi->event_channel);
}
@@ -497,9 +507,9 @@ mi_inferior_removed (struct inferior *inf)
target_terminal::scoped_restore_terminal_state term_state;
target_terminal::ours_for_output ();
- fprintf_unfiltered (mi->event_channel,
- "thread-group-removed,id=\"i%d\"",
- inf->num);
+ gdb_printf (mi->event_channel,
+ "thread-group-removed,id=\"i%d\"",
+ inf->num);
gdb_flush (mi->event_channel);
}
}
@@ -630,12 +640,12 @@ mi_on_normal_stop_1 (struct bpstat *bs, int print_frame)
tp = inferior_thread ();
- if (tp->thread_fsm != NULL
- && tp->thread_fsm->finished_p ())
+ if (tp->thread_fsm () != nullptr
+ && tp->thread_fsm ()->finished_p ())
{
enum async_reply_reason reason;
- reason = tp->thread_fsm->async_reply_reason ();
+ reason = tp->thread_fsm ()->async_reply_reason ();
mi_uiout->field_string ("reason", async_reason_lookup (reason));
}
@@ -664,11 +674,11 @@ mi_on_normal_stop_1 (struct bpstat *bs, int print_frame)
mi_uiout->field_signed ("core", core);
}
- fputs_unfiltered ("*stopped", mi->raw_stdout);
+ gdb_puts ("*stopped", mi->raw_stdout);
mi_out_put (mi_uiout, mi->raw_stdout);
mi_out_rewind (mi_uiout);
mi_print_timing_maybe (mi->raw_stdout);
- fputs_unfiltered ("\n", mi->raw_stdout);
+ gdb_puts ("\n", mi->raw_stdout);
gdb_flush (mi->raw_stdout);
}
@@ -730,11 +740,11 @@ mi_traceframe_changed (int tfnum, int tpnum)
target_terminal::ours_for_output ();
if (tfnum >= 0)
- fprintf_unfiltered (mi->event_channel, "traceframe-changed,"
- "num=\"%d\",tracepoint=\"%d\"",
- tfnum, tpnum);
+ gdb_printf (mi->event_channel, "traceframe-changed,"
+ "num=\"%d\",tracepoint=\"%d\"",
+ tfnum, tpnum);
else
- fprintf_unfiltered (mi->event_channel, "traceframe-changed,end");
+ gdb_printf (mi->event_channel, "traceframe-changed,end");
gdb_flush (mi->event_channel);
}
@@ -755,9 +765,9 @@ mi_tsv_created (const struct trace_state_variable *tsv)
target_terminal::scoped_restore_terminal_state term_state;
target_terminal::ours_for_output ();
- fprintf_unfiltered (mi->event_channel, "tsv-created,"
- "name=\"%s\",initial=\"%s\"",
- tsv->name.c_str (), plongest (tsv->initial_value));
+ gdb_printf (mi->event_channel, "tsv-created,"
+ "name=\"%s\",initial=\"%s\"",
+ tsv->name.c_str (), plongest (tsv->initial_value));
gdb_flush (mi->event_channel);
}
@@ -779,10 +789,10 @@ mi_tsv_deleted (const struct trace_state_variable *tsv)
target_terminal::ours_for_output ();
if (tsv != NULL)
- fprintf_unfiltered (mi->event_channel, "tsv-deleted,"
- "name=\"%s\"", tsv->name.c_str ());
+ gdb_printf (mi->event_channel, "tsv-deleted,"
+ "name=\"%s\"", tsv->name.c_str ());
else
- fprintf_unfiltered (mi->event_channel, "tsv-deleted");
+ gdb_printf (mi->event_channel, "tsv-deleted");
gdb_flush (mi->event_channel);
}
@@ -806,8 +816,8 @@ mi_tsv_modified (const struct trace_state_variable *tsv)
target_terminal::scoped_restore_terminal_state term_state;
target_terminal::ours_for_output ();
- fprintf_unfiltered (mi->event_channel,
- "tsv-modified");
+ gdb_printf (mi->event_channel,
+ "tsv-modified");
mi_uiout->redirect (mi->event_channel);
@@ -875,8 +885,8 @@ mi_breakpoint_created (struct breakpoint *b)
target_terminal::scoped_restore_terminal_state term_state;
target_terminal::ours_for_output ();
- fprintf_unfiltered (mi->event_channel,
- "breakpoint-created");
+ gdb_printf (mi->event_channel,
+ "breakpoint-created");
mi_print_breakpoint_for_event (mi, b);
gdb_flush (mi->event_channel);
@@ -904,8 +914,8 @@ mi_breakpoint_deleted (struct breakpoint *b)
target_terminal::scoped_restore_terminal_state term_state;
target_terminal::ours_for_output ();
- fprintf_unfiltered (mi->event_channel, "breakpoint-deleted,id=\"%d\"",
- b->number);
+ gdb_printf (mi->event_channel, "breakpoint-deleted,id=\"%d\"",
+ b->number);
gdb_flush (mi->event_channel);
}
@@ -931,8 +941,8 @@ mi_breakpoint_modified (struct breakpoint *b)
target_terminal::scoped_restore_terminal_state term_state;
target_terminal::ours_for_output ();
- fprintf_unfiltered (mi->event_channel,
- "breakpoint-modified");
+ gdb_printf (mi->event_channel,
+ "breakpoint-modified");
mi_print_breakpoint_for_event (mi, b);
gdb_flush (mi->event_channel);
@@ -949,9 +959,9 @@ mi_output_running (struct thread_info *thread)
if (mi == NULL)
continue;
- fprintf_unfiltered (mi->raw_stdout,
- "*running,thread-id=\"%d\"\n",
- thread->global_num);
+ gdb_printf (mi->raw_stdout,
+ "*running,thread-id=\"%d\"\n",
+ thread->global_num);
}
}
@@ -987,8 +997,8 @@ mi_on_resume_1 (struct mi_interp *mi,
In future (MI3), we'll be outputting "^done" here. */
if (!running_result_record_printed && mi_proceeded)
{
- fprintf_unfiltered (mi->raw_stdout, "%s^running\n",
- current_token ? current_token : "");
+ gdb_printf (mi->raw_stdout, "%s^running\n",
+ current_token ? current_token : "");
}
/* Backwards compatibility. If doing a wildcard resume and there's
@@ -996,7 +1006,7 @@ mi_on_resume_1 (struct mi_interp *mi,
thread individually. */
if ((ptid == minus_one_ptid || ptid.is_pid ())
&& !multiple_inferiors_p ())
- fprintf_unfiltered (mi->raw_stdout, "*running,thread-id=\"all\"\n");
+ gdb_printf (mi->raw_stdout, "*running,thread-id=\"all\"\n");
else
for (thread_info *tp : all_non_exited_threads (targ, ptid))
mi_output_running (tp);
@@ -1008,7 +1018,7 @@ mi_on_resume_1 (struct mi_interp *mi,
even if it cannot actually accept any input. This will be
surely removed for MI3, and may be removed even earlier. */
if (current_ui->prompt_state == PROMPT_BLOCKED)
- fputs_unfiltered ("(gdb) \n", mi->raw_stdout);
+ gdb_puts ("(gdb) \n", mi->raw_stdout);
}
gdb_flush (mi->raw_stdout);
}
@@ -1081,7 +1091,7 @@ mi_solib_loaded (struct so_list *solib)
target_terminal::scoped_restore_terminal_state term_state;
target_terminal::ours_for_output ();
- fprintf_unfiltered (mi->event_channel, "library-loaded");
+ gdb_printf (mi->event_channel, "library-loaded");
uiout->redirect (mi->event_channel);
@@ -1109,7 +1119,7 @@ mi_solib_unloaded (struct so_list *solib)
target_terminal::scoped_restore_terminal_state term_state;
target_terminal::ours_for_output ();
- fprintf_unfiltered (mi->event_channel, "library-unloaded");
+ gdb_printf (mi->event_channel, "library-unloaded");
uiout->redirect (mi->event_channel);
@@ -1148,7 +1158,7 @@ mi_command_param_changed (const char *param, const char *value)
target_terminal::scoped_restore_terminal_state term_state;
target_terminal::ours_for_output ();
- fprintf_unfiltered (mi->event_channel, "cmd-param-changed");
+ gdb_printf (mi->event_channel, "cmd-param-changed");
mi_uiout->redirect (mi->event_channel);
@@ -1184,7 +1194,7 @@ mi_memory_changed (struct inferior *inferior, CORE_ADDR memaddr,
target_terminal::scoped_restore_terminal_state term_state;
target_terminal::ours_for_output ();
- fprintf_unfiltered (mi->event_channel, "memory-changed");
+ gdb_printf (mi->event_channel, "memory-changed");
mi_uiout->redirect (mi->event_channel);
@@ -1250,9 +1260,9 @@ mi_user_selected_context_changed (user_selected_what selection)
{
print_selected_thread_frame (mi->cli_uiout, selection);
- fprintf_unfiltered (mi->event_channel,
- "thread-selected,id=\"%d\"",
- tp->global_num);
+ gdb_printf (mi->event_channel,
+ "thread-selected,id=\"%d\"",
+ tp->global_num);
if (tp->state != THREAD_RUNNING)
{
@@ -1369,6 +1379,7 @@ _initialize_mi_interp ()
"mi-interp");
gdb::observers::command_param_changed.attach (mi_command_param_changed,
"mi-interp");
+ gdb::observers::command_error.attach (mi_on_command_error, "mi-interp");
gdb::observers::memory_changed.attach (mi_memory_changed, "mi-interp");
gdb::observers::sync_execution_done.attach (mi_on_sync_execution_done,
"mi-interp");
diff --git a/gdb/mi/mi-main.c b/gdb/mi/mi-main.c
index 4860da7536a..18707bf62e7 100644
--- a/gdb/mi/mi-main.c
+++ b/gdb/mi/mi-main.c
@@ -123,9 +123,9 @@ show_mi_async_command (struct ui_file *file, int from_tty,
struct cmd_list_element *c,
const char *value)
{
- fprintf_filtered (file,
- _("Whether MI is in asynchronous mode is %s.\n"),
- value);
+ gdb_printf (file,
+ _("Whether MI is in asynchronous mode is %s.\n"),
+ value);
}
/* A wrapper for target_can_async_p that takes the MI setting into
@@ -153,8 +153,8 @@ mi_cmd_gdb_exit (const char *command, char **argv, int argc)
/* We have to print everything right here because we never return. */
if (current_token)
- fputs_unfiltered (current_token, mi->raw_stdout);
- fputs_unfiltered ("^exit\n", mi->raw_stdout);
+ gdb_puts (current_token, mi->raw_stdout);
+ gdb_puts ("^exit\n", mi->raw_stdout);
mi_out_put (current_uiout, mi->raw_stdout);
gdb_flush (mi->raw_stdout);
/* FIXME: The function called is not yet a formal libgdb function. */
@@ -556,19 +556,10 @@ mi_cmd_thread_select (const char *command, char **argv, int argc)
if (thr == NULL)
error (_("Thread ID %d not known."), num);
- ptid_t previous_ptid = inferior_ptid;
-
thread_select (argv[0], thr);
print_selected_thread_frame (current_uiout,
USER_SELECTED_THREAD | USER_SELECTED_FRAME);
-
- /* Notify if the thread has effectively changed. */
- if (inferior_ptid != previous_ptid)
- {
- gdb::observers::user_selected_context_changed.notify
- (USER_SELECTED_THREAD | USER_SELECTED_FRAME);
- }
}
void
@@ -1703,14 +1694,53 @@ mi_cmd_list_target_features (const char *command, char **argv, int argc)
void
mi_cmd_add_inferior (const char *command, char **argv, int argc)
{
- struct inferior *inf;
+ bool no_connection = false;
- if (argc != 0)
- error (_("-add-inferior should be passed no arguments"));
+ /* Parse the command options. */
+ enum opt
+ {
+ NO_CONNECTION_OPT,
+ };
+ static const struct mi_opt opts[] =
+ {
+ {"-no-connection", NO_CONNECTION_OPT, 0},
+ {NULL, 0, 0},
+ };
- inf = add_inferior_with_spaces ();
+ int oind = 0;
+ char *oarg;
+
+ while (1)
+ {
+ int opt = mi_getopt ("-add-inferior", argc, argv, opts, &oind, &oarg);
+
+ if (opt < 0)
+ break;
+ switch ((enum opt) opt)
+ {
+ case NO_CONNECTION_OPT:
+ no_connection = true;
+ break;
+ }
+ }
+
+ scoped_restore_current_pspace_and_thread restore_pspace_thread;
+
+ inferior *inf = add_inferior_with_spaces ();
+
+ switch_to_inferior_and_push_target (inf, no_connection,
+ current_inferior ());
current_uiout->field_fmt ("inferior", "i%d", inf->num);
+
+ process_stratum_target *proc_target = inf->process_target ();
+
+ if (proc_target != nullptr)
+ {
+ ui_out_emit_tuple tuple_emitter (current_uiout, "connection");
+ current_uiout->field_unsigned ("number", proc_target->connection_number);
+ current_uiout->field_string ("name", proc_target->shortname ());
+ }
}
void
@@ -1786,9 +1816,9 @@ captured_mi_execute_command (struct ui_out *uiout, struct mi_parse *context)
case MI_COMMAND:
/* A MI command was read from the input stream. */
if (mi_debug_p)
- fprintf_unfiltered (gdb_stdlog,
- " token=`%s' command=`%s' args=`%s'\n",
- context->token, context->command, context->args);
+ gdb_printf (gdb_stdlog,
+ " token=`%s' command=`%s' args=`%s'\n",
+ context->token, context->command, context->args);
mi_cmd_execute (context);
@@ -1800,15 +1830,15 @@ captured_mi_execute_command (struct ui_out *uiout, struct mi_parse *context)
uiout will most likely crash in the mi_out_* routines. */
if (!running_result_record_printed)
{
- fputs_unfiltered (context->token, mi->raw_stdout);
+ gdb_puts (context->token, mi->raw_stdout);
/* There's no particularly good reason why target-connect results
in not ^done. Should kill ^connected for MI3. */
- fputs_unfiltered (strcmp (context->command, "target-select") == 0
- ? "^connected" : "^done", mi->raw_stdout);
+ gdb_puts (strcmp (context->command, "target-select") == 0
+ ? "^connected" : "^done", mi->raw_stdout);
mi_out_put (uiout, mi->raw_stdout);
mi_out_rewind (uiout);
mi_print_timing_maybe (mi->raw_stdout);
- fputs_unfiltered ("\n", mi->raw_stdout);
+ gdb_puts ("\n", mi->raw_stdout);
}
else
/* The command does not want anything to be printed. In that
@@ -1825,7 +1855,7 @@ captured_mi_execute_command (struct ui_out *uiout, struct mi_parse *context)
/* This "feature" will be removed as soon as we have a
complete set of mi commands. */
/* Echo the command on the console. */
- fprintf_unfiltered (gdb_stdlog, "%s\n", context->command);
+ gdb_printf (gdb_stdlog, "%s\n", context->command);
/* Call the "console" interpreter. */
argv[0] = (char *) INTERP_CONSOLE;
argv[1] = context->command;
@@ -1839,12 +1869,12 @@ captured_mi_execute_command (struct ui_out *uiout, struct mi_parse *context)
{
if (!running_result_record_printed)
{
- fputs_unfiltered (context->token, mi->raw_stdout);
- fputs_unfiltered ("^done", mi->raw_stdout);
+ gdb_puts (context->token, mi->raw_stdout);
+ gdb_puts ("^done", mi->raw_stdout);
mi_out_put (uiout, mi->raw_stdout);
mi_out_rewind (uiout);
mi_print_timing_maybe (mi->raw_stdout);
- fputs_unfiltered ("\n", mi->raw_stdout);
+ gdb_puts ("\n", mi->raw_stdout);
}
else
mi_out_rewind (uiout);
@@ -1861,50 +1891,22 @@ mi_print_exception (const char *token, const struct gdb_exception &exception)
{
struct mi_interp *mi = (struct mi_interp *) current_interpreter ();
- fputs_unfiltered (token, mi->raw_stdout);
- fputs_unfiltered ("^error,msg=\"", mi->raw_stdout);
+ gdb_puts (token, mi->raw_stdout);
+ gdb_puts ("^error,msg=\"", mi->raw_stdout);
if (exception.message == NULL)
- fputs_unfiltered ("unknown error", mi->raw_stdout);
+ gdb_puts ("unknown error", mi->raw_stdout);
else
mi->raw_stdout->putstr (exception.what (), '"');
- fputs_unfiltered ("\"", mi->raw_stdout);
+ gdb_puts ("\"", mi->raw_stdout);
switch (exception.error)
{
case UNDEFINED_COMMAND_ERROR:
- fputs_unfiltered (",code=\"undefined-command\"", mi->raw_stdout);
+ gdb_puts (",code=\"undefined-command\"", mi->raw_stdout);
break;
}
- fputs_unfiltered ("\n", mi->raw_stdout);
-}
-
-/* Determine whether the parsed command already notifies the
- user_selected_context_changed observer. */
-
-static int
-command_notifies_uscc_observer (struct mi_parse *command)
-{
- if (command->op == CLI_COMMAND)
- {
- /* CLI commands "thread" and "inferior" already send it. */
- return (startswith (command->command, "thread ")
- || startswith (command->command, "inferior "));
- }
- else /* MI_COMMAND */
- {
- if (strcmp (command->command, "interpreter-exec") == 0
- && command->argc > 1)
- {
- /* "thread" and "inferior" again, but through -interpreter-exec. */
- return (startswith (command->argv[1], "thread ")
- || startswith (command->argv[1], "inferior "));
- }
-
- else
- /* -thread-select already sends it. */
- return strcmp (command->command, "thread-select") == 0;
- }
+ gdb_puts ("\n", mi->raw_stdout);
}
void
@@ -1932,8 +1934,6 @@ mi_execute_command (const char *cmd, int from_tty)
if (command != NULL)
{
- ptid_t previous_ptid = inferior_ptid;
-
command->token = token;
if (do_timings)
@@ -1963,39 +1963,63 @@ mi_execute_command (const char *cmd, int from_tty)
bpstat_do_actions ();
- if (/* The notifications are only output when the top-level
- interpreter (specified on the command line) is MI. */
- top_level_interpreter ()->interp_ui_out ()->is_mi_like_p ()
- /* Don't try report anything if there are no threads --
- the program is dead. */
- && any_thread_p ()
- /* If the command already reports the thread change, no need to do it
- again. */
- && !command_notifies_uscc_observer (command.get ()))
- {
- int report_change = 0;
+ }
+}
- if (command->thread == -1)
- {
- report_change = (previous_ptid != null_ptid
- && inferior_ptid != previous_ptid
- && inferior_ptid != null_ptid);
- }
- else if (inferior_ptid != null_ptid)
- {
- struct thread_info *ti = inferior_thread ();
+/* Captures the current user selected context state, that is the current
+ thread and frame. Later we can then check if the user selected context
+ has changed at all. */
- report_change = (ti->global_num != command->thread);
- }
+struct user_selected_context
+{
+ /* Constructor. */
+ user_selected_context ()
+ : m_previous_ptid (inferior_ptid)
+ {
+ save_selected_frame (&m_previous_frame_id, &m_previous_frame_level);
+ }
- if (report_change)
- {
- gdb::observers::user_selected_context_changed.notify
- (USER_SELECTED_THREAD | USER_SELECTED_FRAME);
- }
- }
- }
-}
+ /* Return true if the user selected context has changed since this object
+ was created. */
+ bool has_changed () const
+ {
+ /* Did the selected thread change? */
+ if (m_previous_ptid != null_ptid && inferior_ptid != null_ptid
+ && m_previous_ptid != inferior_ptid)
+ return true;
+
+ /* Grab details of the currently selected frame, for comparison. */
+ frame_id current_frame_id;
+ int current_frame_level;
+ save_selected_frame (&current_frame_id, &current_frame_level);
+
+ /* Did the selected frame level change? */
+ if (current_frame_level != m_previous_frame_level)
+ return true;
+
+ /* Did the selected frame id change? If the innermost frame is
+ selected then the level will be -1, and the frame-id will be
+ null_frame_id. As comparing null_frame_id with itself always
+ reports not-equal, we only do the equality test if we have something
+ other than the innermost frame selected. */
+ if (current_frame_level != -1
+ && !frame_id_eq (current_frame_id, m_previous_frame_id))
+ return true;
+
+ /* Nothing changed! */
+ return false;
+ }
+private:
+ /* The previously selected thread. This might be null_ptid if there was
+ no previously selected thread. */
+ ptid_t m_previous_ptid;
+
+ /* The previously selected frame. If the innermost frame is selected, or
+ no frame is selected, then the frame_id will be null_frame_id, and the
+ level will be -1. */
+ frame_id m_previous_frame_id;
+ int m_previous_frame_level;
+};
static void
mi_cmd_execute (struct mi_parse *parse)
@@ -2037,6 +2061,9 @@ mi_cmd_execute (struct mi_parse *parse)
set_current_program_space (inf->pspace);
}
+ user_selected_context current_user_selected_context;
+
+ gdb::optional<scoped_restore_current_thread> thread_saver;
if (parse->thread != -1)
{
thread_info *tp = find_thread_global_id (parse->thread);
@@ -2047,9 +2074,13 @@ mi_cmd_execute (struct mi_parse *parse)
if (tp->state == THREAD_EXITED)
error (_("Thread id: %d has terminated"), parse->thread);
+ if (parse->cmd->preserve_user_selected_context ())
+ thread_saver.emplace ();
+
switch_to_thread (tp);
}
+ gdb::optional<scoped_restore_selected_frame> frame_saver;
if (parse->frame != -1)
{
struct frame_info *fid;
@@ -2057,8 +2088,12 @@ mi_cmd_execute (struct mi_parse *parse)
fid = find_relative_frame (get_current_frame (), &frame);
if (frame == 0)
- /* find_relative_frame was successful */
- select_frame (fid);
+ {
+ if (parse->cmd->preserve_user_selected_context ())
+ frame_saver.emplace ();
+
+ select_frame (fid);
+ }
else
error (_("Invalid frame id: %d"), frame);
}
@@ -2073,7 +2108,16 @@ mi_cmd_execute (struct mi_parse *parse)
current_context = parse;
gdb_assert (parse->cmd != nullptr);
+
+ gdb::optional<scoped_restore_tmpl<int>> restore_suppress_notification
+ = parse->cmd->do_suppress_notification ();
+
parse->cmd->invoke (parse);
+
+ if (!parse->cmd->preserve_user_selected_context ()
+ && current_user_selected_context.has_changed ())
+ gdb::observers::user_selected_context_changed.notify
+ (USER_SELECTED_THREAD | USER_SELECTED_FRAME);
}
/* See mi-main.h. */
@@ -2091,8 +2135,8 @@ mi_execute_cli_command (const char *cmd, bool args_p, const char *args)
gdb_assert (args == nullptr);
if (mi_debug_p)
- fprintf_unfiltered (gdb_stdlog, "cli=%s run=%s\n",
- cmd, run.c_str ());
+ gdb_printf (gdb_stdlog, "cli=%s run=%s\n",
+ cmd, run.c_str ());
execute_command (run.c_str (), 0 /* from_tty */ );
}
@@ -2143,8 +2187,8 @@ mi_load_progress (const char *section_name,
previous_sect_name = xstrdup (section_name);
if (current_token)
- fputs_unfiltered (current_token, mi->raw_stdout);
- fputs_unfiltered ("+download", mi->raw_stdout);
+ gdb_puts (current_token, mi->raw_stdout);
+ gdb_puts ("+download", mi->raw_stdout);
{
ui_out_emit_tuple tuple_emitter (uiout.get (), NULL);
uiout->field_string ("section", section_name);
@@ -2152,7 +2196,7 @@ mi_load_progress (const char *section_name,
uiout->field_signed ("total-size", grand_total);
}
mi_out_put (uiout.get (), mi->raw_stdout);
- fputs_unfiltered ("\n", mi->raw_stdout);
+ gdb_puts ("\n", mi->raw_stdout);
gdb_flush (mi->raw_stdout);
}
@@ -2161,8 +2205,8 @@ mi_load_progress (const char *section_name,
{
last_update = time_now;
if (current_token)
- fputs_unfiltered (current_token, mi->raw_stdout);
- fputs_unfiltered ("+download", mi->raw_stdout);
+ gdb_puts (current_token, mi->raw_stdout);
+ gdb_puts ("+download", mi->raw_stdout);
{
ui_out_emit_tuple tuple_emitter (uiout.get (), NULL);
uiout->field_string ("section", section_name);
@@ -2172,7 +2216,7 @@ mi_load_progress (const char *section_name,
uiout->field_signed ("total-size", grand_total);
}
mi_out_put (uiout.get (), mi->raw_stdout);
- fputs_unfiltered ("\n", mi->raw_stdout);
+ gdb_puts ("\n", mi->raw_stdout);
gdb_flush (mi->raw_stdout);
}
}
@@ -2214,7 +2258,7 @@ print_diff (struct ui_file *file, struct mi_timestamp *start,
duration<double> utime = end->utime - start->utime;
duration<double> stime = end->stime - start->stime;
- fprintf_unfiltered
+ gdb_printf
(file,
",time={wallclock=\"%0.5f\",user=\"%0.5f\",system=\"%0.5f\"}",
wallclock.count (), utime.count (), stime.count ());
diff --git a/gdb/mi/mi-out.c b/gdb/mi/mi-out.c
index e5c4e3b8534..6b3e932ffa4 100644
--- a/gdb/mi/mi-out.c
+++ b/gdb/mi/mi-out.c
@@ -132,11 +132,11 @@ mi_ui_out::do_field_string (int fldno, int width, ui_align align,
field_separator ();
if (fldname)
- fprintf_unfiltered (stream, "%s=", fldname);
- fprintf_unfiltered (stream, "\"");
+ gdb_printf (stream, "%s=", fldname);
+ gdb_printf (stream, "\"");
if (string)
stream->putstr (string, '"');
- fprintf_unfiltered (stream, "\"");
+ gdb_printf (stream, "\"");
}
void
@@ -148,11 +148,11 @@ mi_ui_out::do_field_fmt (int fldno, int width, ui_align align,
field_separator ();
if (fldname)
- fprintf_unfiltered (stream, "%s=\"", fldname);
+ gdb_printf (stream, "%s=\"", fldname);
else
- fputs_unfiltered ("\"", stream);
- vfprintf_unfiltered (stream, format, args);
- fputs_unfiltered ("\"", stream);
+ gdb_puts ("\"", stream);
+ gdb_vprintf (stream, format, args);
+ gdb_puts ("\"", stream);
}
void
@@ -172,9 +172,9 @@ mi_ui_out::do_message (const ui_file_style &style,
}
void
-mi_ui_out::do_wrap_hint (const char *identstring)
+mi_ui_out::do_wrap_hint (int indent)
{
- wrap_here (identstring);
+ m_streams.back ()->wrap_here (indent);
}
void
@@ -199,7 +199,7 @@ mi_ui_out::field_separator ()
if (m_suppress_field_separator)
m_suppress_field_separator = false;
else
- fputc_unfiltered (',', m_streams.back ());
+ gdb_putc (',', m_streams.back ());
}
void
@@ -211,16 +211,16 @@ mi_ui_out::open (const char *name, ui_out_type type)
m_suppress_field_separator = true;
if (name)
- fprintf_unfiltered (stream, "%s=", name);
+ gdb_printf (stream, "%s=", name);
switch (type)
{
case ui_out_type_tuple:
- fputc_unfiltered ('{', stream);
+ gdb_putc ('{', stream);
break;
case ui_out_type_list:
- fputc_unfiltered ('[', stream);
+ gdb_putc ('[', stream);
break;
default:
@@ -236,11 +236,11 @@ mi_ui_out::close (ui_out_type type)
switch (type)
{
case ui_out_type_tuple:
- fputc_unfiltered ('}', stream);
+ gdb_putc ('}', stream);
break;
case ui_out_type_list:
- fputc_unfiltered (']', stream);
+ gdb_putc (']', stream);
break;
default:
@@ -277,7 +277,7 @@ mi_ui_out::do_progress_notify (const std::string &msg, double howmuch)
if (info.state == progress_update::START)
{
struct ui_file *stream = gdb_stdout;
- fprintf_unfiltered (stream, "%s\n", msg.c_str ());
+ gdb_printf (stream, "%s\n", msg.c_str ());
info.state = progress_update::WORKING;
}
}
diff --git a/gdb/mi/mi-out.h b/gdb/mi/mi-out.h
index 5ce81c94473..1cc1cc1f74e 100644
--- a/gdb/mi/mi-out.h
+++ b/gdb/mi/mi-out.h
@@ -75,7 +75,7 @@ protected:
virtual void do_message (const ui_file_style &style,
const char *format, va_list args) override
ATTRIBUTE_PRINTF (3,0);
- virtual void do_wrap_hint (const char *identstring) override;
+ virtual void do_wrap_hint (int indent) override;
virtual void do_flush () override;
virtual void do_redirect (struct ui_file *outstream) override;
diff --git a/gdb/mi/mi-parse.c b/gdb/mi/mi-parse.c
index d5febced153..dfa7b462714 100644
--- a/gdb/mi/mi-parse.c
+++ b/gdb/mi/mi-parse.c
@@ -57,7 +57,7 @@ mi_parse_escape (const char **string_ptr)
case '6':
case '7':
{
- int i = host_hex_value (c);
+ int i = fromhex (c);
int count = 0;
while (++count < 3)
@@ -67,7 +67,7 @@ mi_parse_escape (const char **string_ptr)
{
(*string_ptr)++;
i *= 8;
- i += host_hex_value (c);
+ i += fromhex (c);
}
else
{
diff --git a/gdb/mi/mi-symbol-cmds.c b/gdb/mi/mi-symbol-cmds.c
index 2177354ae19..56e9c3f3ce0 100644
--- a/gdb/mi/mi-symbol-cmds.c
+++ b/gdb/mi/mi-symbol-cmds.c
@@ -50,15 +50,15 @@ mi_cmd_symbol_list_lines (const char *command, char **argv, int argc)
already sorted by increasing values in the symbol table, so no
need to perform any other sorting. */
- gdbarch = SYMTAB_OBJFILE (s)->arch ();
+ gdbarch = s->compunit ()->objfile ()->arch ();
ui_out_emit_list list_emitter (uiout, "lines");
- if (SYMTAB_LINETABLE (s) != NULL && SYMTAB_LINETABLE (s)->nitems > 0)
- for (i = 0; i < SYMTAB_LINETABLE (s)->nitems; i++)
+ if (s->linetable () != NULL && s->linetable ()->nitems > 0)
+ for (i = 0; i < s->linetable ()->nitems; i++)
{
ui_out_emit_tuple tuple_emitter (uiout, NULL);
- uiout->field_core_addr ("pc", gdbarch, SYMTAB_LINETABLE (s)->item[i].pc);
- uiout->field_signed ("line", SYMTAB_LINETABLE (s)->item[i].line);
+ uiout->field_core_addr ("pc", gdbarch, s->linetable ()->item[i].pc);
+ uiout->field_signed ("line", s->linetable ()->item[i].line);
}
}
@@ -74,14 +74,14 @@ output_debug_symbol (ui_out *uiout, enum search_domain kind,
{
ui_out_emit_tuple tuple_emitter (uiout, NULL);
- if (SYMBOL_LINE (sym) != 0)
- uiout->field_unsigned ("line", SYMBOL_LINE (sym));
+ if (sym->line () != 0)
+ uiout->field_unsigned ("line", sym->line ());
uiout->field_string ("name", sym->print_name ());
if (kind == FUNCTIONS_DOMAIN || kind == VARIABLES_DOMAIN)
{
string_file tmp_stream;
- type_print (SYMBOL_TYPE (sym), "", &tmp_stream, -1);
+ type_print (sym->type (), "", &tmp_stream, -1);
uiout->field_string ("type", tmp_stream.string ());
std::string str = symbol_to_info_string (sym, block, kind);
@@ -100,7 +100,7 @@ output_nondebug_symbol (ui_out *uiout,
ui_out_emit_tuple tuple_emitter (uiout, NULL);
uiout->field_core_addr ("address", gdbarch,
- BMSYMBOL_VALUE_ADDRESS (msymbol));
+ msymbol.value_address ());
uiout->field_string ("name", msymbol.minsym->print_name ());
}
@@ -132,7 +132,7 @@ mi_symbol_info (enum search_domain kind, const char *name_regexp,
/* As long as we have debug symbols... */
while (i < symbols.size () && symbols[i].msymbol.minsym == nullptr)
{
- symtab *symtab = symbol_symtab (symbols[i].symbol);
+ symtab *symtab = symbols[i].symbol->symtab ();
ui_out_emit_tuple symtab_tuple_emitter (uiout, nullptr);
uiout->field_string ("filename",
@@ -144,7 +144,7 @@ mi_symbol_info (enum search_domain kind, const char *name_regexp,
/* As long as we have debug symbols from this symtab... */
for (; (i < symbols.size ()
&& symbols[i].msymbol.minsym == nullptr
- && symbol_symtab (symbols[i].symbol) == symtab);
+ && symbols[i].symbol->symtab () == symtab);
++i)
{
symbol_search &s = symbols[i];
@@ -256,7 +256,7 @@ output_module_symbols_in_single_module_and_file
/* The symbol for the first result, and the symtab in which it resides. */
const symbol *first_result_symbol = iter->second.symbol;
- symtab *first_symbtab = symbol_symtab (first_result_symbol);
+ symtab *first_symbtab = first_result_symbol->symtab ();
/* Formatted output. */
ui_out_emit_tuple current_file (uiout, nullptr);
@@ -269,7 +269,7 @@ output_module_symbols_in_single_module_and_file
we change module, or we change symtab. */
for (; (iter != end
&& first_module_symbol == iter->first.symbol
- && first_symbtab == symbol_symtab (iter->second.symbol));
+ && first_symbtab == iter->second.symbol->symtab ());
++iter)
output_debug_symbol (uiout, kind, iter->second.symbol,
iter->second.block);
diff --git a/gdb/minsyms.c b/gdb/minsyms.c
index 9a44e4bcf6d..cbd0ad22392 100644
--- a/gdb/minsyms.c
+++ b/gdb/minsyms.c
@@ -113,9 +113,9 @@ bool
msymbol_is_function (struct objfile *objfile, minimal_symbol *minsym,
CORE_ADDR *func_address_p)
{
- CORE_ADDR msym_addr = MSYMBOL_VALUE_ADDRESS (objfile, minsym);
+ CORE_ADDR msym_addr = minsym->value_address (objfile);
- switch (minsym->type)
+ switch (minsym->type ())
{
case mst_slot_got_plt:
case mst_data:
@@ -230,13 +230,13 @@ add_minsym_to_demangled_hash_table (struct minimal_symbol *sym,
struct found_minimal_symbols
{
/* External symbols are best. */
- bound_minimal_symbol external_symbol {};
+ bound_minimal_symbol external_symbol;
/* File-local symbols are next best. */
- bound_minimal_symbol file_symbol {};
+ bound_minimal_symbol file_symbol;
/* Symbols for shared library trampolines are next best. */
- bound_minimal_symbol trampoline_symbol {};
+ bound_minimal_symbol trampoline_symbol;
/* Called when a symbol name matches. Check if the minsym is a
better type than what we had already found, and record it in one
@@ -253,7 +253,7 @@ found_minimal_symbols::maybe_collect (const char *sfile,
struct objfile *objfile,
minimal_symbol *msymbol)
{
- switch (MSYMBOL_TYPE (msymbol))
+ switch (msymbol->type ())
{
case mst_file_text:
case mst_file_data:
@@ -387,10 +387,10 @@ lookup_minimal_symbol (const char *name, const char *sfile,
{
if (symbol_lookup_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "lookup_minimal_symbol (%s, %s, %s)\n",
- name, sfile != NULL ? sfile : "NULL",
- objfile_debug_name (objfile));
+ gdb_printf (gdb_stdlog,
+ "lookup_minimal_symbol (%s, %s, %s)\n",
+ name, sfile != NULL ? sfile : "NULL",
+ objfile_debug_name (objfile));
}
/* Do two passes: the first over the ordinary hash table,
@@ -438,9 +438,9 @@ lookup_minimal_symbol (const char *name, const char *sfile,
{
minimal_symbol *minsym = found.external_symbol.minsym;
- fprintf_unfiltered (gdb_stdlog,
- "lookup_minimal_symbol (...) = %s (external)\n",
- host_address_to_string (minsym));
+ gdb_printf (gdb_stdlog,
+ "lookup_minimal_symbol (...) = %s (external)\n",
+ host_address_to_string (minsym));
}
return found.external_symbol;
}
@@ -452,9 +452,9 @@ lookup_minimal_symbol (const char *name, const char *sfile,
{
minimal_symbol *minsym = found.file_symbol.minsym;
- fprintf_unfiltered (gdb_stdlog,
- "lookup_minimal_symbol (...) = %s (file-local)\n",
- host_address_to_string (minsym));
+ gdb_printf (gdb_stdlog,
+ "lookup_minimal_symbol (...) = %s (file-local)\n",
+ host_address_to_string (minsym));
}
return found.file_symbol;
}
@@ -466,9 +466,9 @@ lookup_minimal_symbol (const char *name, const char *sfile,
{
minimal_symbol *minsym = found.trampoline_symbol.minsym;
- fprintf_unfiltered (gdb_stdlog,
- "lookup_minimal_symbol (...) = %s (trampoline)\n",
- host_address_to_string (minsym));
+ gdb_printf (gdb_stdlog,
+ "lookup_minimal_symbol (...) = %s (trampoline)\n",
+ host_address_to_string (minsym));
}
return found.trampoline_symbol;
@@ -476,7 +476,7 @@ lookup_minimal_symbol (const char *name, const char *sfile,
/* Not found. */
if (symbol_lookup_debug)
- fprintf_unfiltered (gdb_stdlog, "lookup_minimal_symbol (...) = NULL\n");
+ gdb_printf (gdb_stdlog, "lookup_minimal_symbol (...) = NULL\n");
return {};
}
@@ -498,7 +498,7 @@ find_minimal_symbol_address (const char *name, CORE_ADDR *addr,
= lookup_minimal_symbol (name, NULL, objfile);
if (sym.minsym != NULL)
- *addr = BMSYMBOL_VALUE_ADDRESS (sym);
+ *addr = sym.value_address ();
return sym.minsym == NULL;
}
@@ -586,8 +586,8 @@ lookup_minimal_symbol_linkage (const char *name, struct objfile *objf)
msymbol = msymbol->hash_next)
{
if (strcmp (msymbol->linkage_name (), name) == 0
- && (MSYMBOL_TYPE (msymbol) == mst_data
- || MSYMBOL_TYPE (msymbol) == mst_bss))
+ && (msymbol->type () == mst_data
+ || msymbol->type () == mst_bss))
return {msymbol, objfile};
}
}
@@ -601,8 +601,8 @@ struct bound_minimal_symbol
lookup_minimal_symbol_text (const char *name, struct objfile *objf)
{
struct minimal_symbol *msymbol;
- struct bound_minimal_symbol found_symbol = { NULL, NULL };
- struct bound_minimal_symbol found_file_symbol = { NULL, NULL };
+ struct bound_minimal_symbol found_symbol;
+ struct bound_minimal_symbol found_file_symbol;
unsigned int hash = msymbol_hash (name) % MINIMAL_SYMBOL_HASH_SIZE;
@@ -619,11 +619,11 @@ lookup_minimal_symbol_text (const char *name, struct objfile *objf)
msymbol = msymbol->hash_next)
{
if (strcmp (msymbol->linkage_name (), name) == 0 &&
- (MSYMBOL_TYPE (msymbol) == mst_text
- || MSYMBOL_TYPE (msymbol) == mst_text_gnu_ifunc
- || MSYMBOL_TYPE (msymbol) == mst_file_text))
+ (msymbol->type () == mst_text
+ || msymbol->type () == mst_text_gnu_ifunc
+ || msymbol->type () == mst_file_text))
{
- switch (MSYMBOL_TYPE (msymbol))
+ switch (msymbol->type ())
{
case mst_file_text:
found_file_symbol.minsym = msymbol;
@@ -665,7 +665,7 @@ lookup_minimal_symbol_by_pc_name (CORE_ADDR pc, const char *name,
msymbol != NULL;
msymbol = msymbol->hash_next)
{
- if (MSYMBOL_VALUE_ADDRESS (objfile, msymbol) == pc
+ if (msymbol->value_address (objfile) == pc
&& strcmp (msymbol->linkage_name (), name) == 0)
return msymbol;
}
@@ -799,14 +799,14 @@ lookup_minimal_symbol_by_pc_section (CORE_ADDR pc_in, struct obj_section *sectio
Warning: this code is trickier than it would appear at first. */
if (frob_address (objfile, &pc)
- && pc >= MSYMBOL_VALUE_RAW_ADDRESS (&msymbol[lo]))
+ && pc >= msymbol[lo].value_raw_address ())
{
- while (MSYMBOL_VALUE_RAW_ADDRESS (&msymbol[hi]) > pc)
+ while (msymbol[hi].value_raw_address () > pc)
{
/* pc is still strictly less than highest address. */
/* Note "new" will always be >= lo. */
newobj = (lo + hi) / 2;
- if ((MSYMBOL_VALUE_RAW_ADDRESS (&msymbol[newobj]) >= pc)
+ if ((msymbol[newobj].value_raw_address () >= pc)
|| (lo == newobj))
{
hi = newobj;
@@ -821,8 +821,8 @@ lookup_minimal_symbol_by_pc_section (CORE_ADDR pc_in, struct obj_section *sectio
hi to point to the last one. That way we can find the
right symbol if it has an index greater than hi. */
while (hi < objfile->per_bfd->minimal_symbol_count - 1
- && (MSYMBOL_VALUE_RAW_ADDRESS (&msymbol[hi])
- == MSYMBOL_VALUE_RAW_ADDRESS (&msymbol[hi + 1])))
+ && (msymbol[hi].value_raw_address ()
+ == msymbol[hi + 1].value_raw_address ()))
hi++;
/* Skip various undesirable symbols. */
@@ -840,7 +840,7 @@ lookup_minimal_symbol_by_pc_section (CORE_ADDR pc_in, struct obj_section *sectio
triggered by a special mst_abs_or_lib or some
such. */
- if (MSYMBOL_TYPE (&msymbol[hi]) == mst_abs)
+ if (msymbol[hi].type () == mst_abs)
{
hi--;
continue;
@@ -866,12 +866,11 @@ lookup_minimal_symbol_by_pc_section (CORE_ADDR pc_in, struct obj_section *sectio
preceding symbol too. If they are otherwise
identical prefer that one. */
if (hi > 0
- && MSYMBOL_TYPE (&msymbol[hi]) != want_type
- && MSYMBOL_TYPE (&msymbol[hi - 1]) == want_type
- && (MSYMBOL_SIZE (&msymbol[hi])
- == MSYMBOL_SIZE (&msymbol[hi - 1]))
- && (MSYMBOL_VALUE_RAW_ADDRESS (&msymbol[hi])
- == MSYMBOL_VALUE_RAW_ADDRESS (&msymbol[hi - 1]))
+ && msymbol[hi].type () != want_type
+ && msymbol[hi - 1].type () == want_type
+ && (msymbol[hi].size () == msymbol[hi - 1].size ())
+ && (msymbol[hi].value_raw_address ()
+ == msymbol[hi - 1].value_raw_address ())
&& (msymbol[hi].obj_section (objfile)
== msymbol[hi - 1].obj_section (objfile)))
{
@@ -885,7 +884,7 @@ lookup_minimal_symbol_by_pc_section (CORE_ADDR pc_in, struct obj_section *sectio
symbol isn't an object or function (e.g. a
label), or it may just mean that the size was not
specified. */
- if (MSYMBOL_SIZE (&msymbol[hi]) == 0)
+ if (msymbol[hi].size () == 0)
{
if (best_zero_sized == -1)
best_zero_sized = hi;
@@ -899,11 +898,11 @@ lookup_minimal_symbol_by_pc_section (CORE_ADDR pc_in, struct obj_section *sectio
the nocancel variants of system calls are inside
the cancellable variants, but both have sizes. */
if (hi > 0
- && MSYMBOL_SIZE (&msymbol[hi]) != 0
- && pc >= (MSYMBOL_VALUE_RAW_ADDRESS (&msymbol[hi])
- + MSYMBOL_SIZE (&msymbol[hi]))
- && pc < (MSYMBOL_VALUE_RAW_ADDRESS (&msymbol[hi - 1])
- + MSYMBOL_SIZE (&msymbol[hi - 1])))
+ && msymbol[hi].size () != 0
+ && pc >= (msymbol[hi].value_raw_address ()
+ + msymbol[hi].size ())
+ && pc < (msymbol[hi - 1].value_raw_address ()
+ + msymbol[hi - 1].size ()))
{
hi--;
continue;
@@ -920,7 +919,7 @@ lookup_minimal_symbol_by_pc_section (CORE_ADDR pc_in, struct obj_section *sectio
address). Also, if we ran off the end, be sure
to back up. */
if (best_zero_sized != -1
- && (hi < 0 || MSYMBOL_SIZE (&msymbol[hi]) == 0))
+ && (hi < 0 || msymbol[hi].size () == 0))
hi = best_zero_sized;
/* If the minimal symbol has a non-zero size, and this
@@ -931,9 +930,9 @@ lookup_minimal_symbol_by_pc_section (CORE_ADDR pc_in, struct obj_section *sectio
specified sizes, they do not overlap. */
if (hi >= 0
- && MSYMBOL_SIZE (&msymbol[hi]) != 0
- && pc >= (MSYMBOL_VALUE_RAW_ADDRESS (&msymbol[hi])
- + MSYMBOL_SIZE (&msymbol[hi])))
+ && msymbol[hi].size () != 0
+ && pc >= (msymbol[hi].value_raw_address ()
+ + msymbol[hi].size ()))
{
if (best_zero_sized != -1)
hi = best_zero_sized;
@@ -944,9 +943,8 @@ lookup_minimal_symbol_by_pc_section (CORE_ADDR pc_in, struct obj_section *sectio
if (previous != nullptr)
{
if (previous->minsym == nullptr
- || (MSYMBOL_VALUE_RAW_ADDRESS (&msymbol[hi])
- > MSYMBOL_VALUE_RAW_ADDRESS
- (previous->minsym)))
+ || (msymbol[hi].value_raw_address ()
+ > previous->minsym->value_raw_address ()))
{
previous->minsym = &msymbol[hi];
previous->objfile = objfile;
@@ -963,8 +961,8 @@ lookup_minimal_symbol_by_pc_section (CORE_ADDR pc_in, struct obj_section *sectio
if (hi >= 0
&& ((best_symbol == NULL) ||
- (MSYMBOL_VALUE_RAW_ADDRESS (best_symbol) <
- MSYMBOL_VALUE_RAW_ADDRESS (&msymbol[hi]))))
+ (best_symbol->value_raw_address () <
+ msymbol[hi].value_raw_address ())))
{
best_symbol = &msymbol[hi];
best_objfile = objfile;
@@ -994,7 +992,7 @@ in_gnu_ifunc_stub (CORE_ADDR pc)
bound_minimal_symbol msymbol
= lookup_minimal_symbol_by_pc_section (pc, NULL,
lookup_msym_prefer::GNU_IFUNC);
- return msymbol.minsym && MSYMBOL_TYPE (msymbol.minsym) == mst_text_gnu_ifunc;
+ return msymbol.minsym && msymbol.minsym->type () == mst_text_gnu_ifunc;
}
/* See elf_gnu_ifunc_resolve_addr for its real implementation. */
@@ -1187,10 +1185,10 @@ minimal_symbol_reader::record_full (gdb::string_view name,
return (NULL);
if (symtab_create_debug >= 2)
- fprintf_unfiltered (gdb_stdlog,
- "Recording minsym: %-21s %18s %4d %.*s\n",
- mst_str (ms_type), hex_string (address), section,
- (int) name.size (), name.data ());
+ gdb_printf (gdb_stdlog,
+ "Recording minsym: %-21s %18s %4d %.*s\n",
+ mst_str (ms_type), hex_string (address), section,
+ (int) name.size (), name.data ());
if (m_msym_bunch_index == BUNCH_SIZE)
{
@@ -1209,10 +1207,10 @@ minimal_symbol_reader::record_full (gdb::string_view name,
else
msymbol->m_name = name.data ();
- SET_MSYMBOL_VALUE_ADDRESS (msymbol, address);
+ msymbol->set_value_address (address);
msymbol->set_section_index (section);
- MSYMBOL_TYPE (msymbol) = ms_type;
+ msymbol->set_type (ms_type);
/* If we already read minimal symbols for this objfile, then don't
ever allocate a new one. */
@@ -1233,11 +1231,11 @@ static inline bool
minimal_symbol_is_less_than (const minimal_symbol &fn1,
const minimal_symbol &fn2)
{
- if (MSYMBOL_VALUE_RAW_ADDRESS (&fn1) < MSYMBOL_VALUE_RAW_ADDRESS (&fn2))
+ if ((&fn1)->value_raw_address () < (&fn2)->value_raw_address ())
{
return true; /* addr 1 is less than addr 2. */
}
- else if (MSYMBOL_VALUE_RAW_ADDRESS (&fn1) > MSYMBOL_VALUE_RAW_ADDRESS (&fn2))
+ else if ((&fn1)->value_raw_address () > (&fn2)->value_raw_address ())
{
return false; /* addr 1 is greater than addr 2. */
}
@@ -1297,17 +1295,16 @@ compact_minimal_symbols (struct minimal_symbol *msymbol, int mcount,
copyfrom = copyto = msymbol;
while (copyfrom < msymbol + mcount - 1)
{
- if (MSYMBOL_VALUE_RAW_ADDRESS (copyfrom)
- == MSYMBOL_VALUE_RAW_ADDRESS ((copyfrom + 1))
+ if (copyfrom->value_raw_address ()
+ == (copyfrom + 1)->value_raw_address ()
&& (copyfrom->section_index ()
== (copyfrom + 1)->section_index ())
&& strcmp (copyfrom->linkage_name (),
(copyfrom + 1)->linkage_name ()) == 0)
{
- if (MSYMBOL_TYPE ((copyfrom + 1)) == mst_unknown)
- {
- MSYMBOL_TYPE ((copyfrom + 1)) = MSYMBOL_TYPE (copyfrom);
- }
+ if ((copyfrom + 1)->type () == mst_unknown)
+ (copyfrom + 1)->set_type (copyfrom->type ());
+
copyfrom++;
}
else
@@ -1394,9 +1391,9 @@ minimal_symbol_reader::install ()
{
if (symtab_create_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "Installing %d minimal symbols of objfile %s.\n",
- m_msym_count, objfile_name (m_objfile));
+ gdb_printf (gdb_stdlog,
+ "Installing %d minimal symbols of objfile %s.\n",
+ m_msym_count, objfile_name (m_objfile));
}
/* Allocate enough space, into which we will gather the bunches
@@ -1463,8 +1460,8 @@ minimal_symbol_reader::install ()
std::vector<computed_hash_values> hash_values (mcount);
msymbols = m_objfile->per_bfd->msymbols.get ();
- gdb::parallel_for_each
- (&msymbols[0], &msymbols[mcount],
+ /* Arbitrarily require at least 10 elements in a thread. */
+ gdb::parallel_for_each (10, &msymbols[0], &msymbols[mcount],
[&] (minimal_symbol *start, minimal_symbol *end)
{
for (minimal_symbol *msym = start; msym < end; ++msym)
@@ -1531,7 +1528,7 @@ lookup_solib_trampoline_symbol_by_pc (CORE_ADDR pc)
lookup_msym_prefer::TRAMPOLINE);
if (msymbol.minsym != NULL
- && MSYMBOL_TYPE (msymbol.minsym) == mst_solib_trampoline)
+ && msymbol.minsym->type () == mst_solib_trampoline)
return msymbol.minsym;
return NULL;
}
@@ -1559,10 +1556,10 @@ find_solib_trampoline_target (struct frame_info *frame, CORE_ADDR pc)
{
/* Also handle minimal symbols pointing to function
descriptors. */
- if ((MSYMBOL_TYPE (msymbol) == mst_text
- || MSYMBOL_TYPE (msymbol) == mst_text_gnu_ifunc
- || MSYMBOL_TYPE (msymbol) == mst_data
- || MSYMBOL_TYPE (msymbol) == mst_data_gnu_ifunc)
+ if ((msymbol->type () == mst_text
+ || msymbol->type () == mst_text_gnu_ifunc
+ || msymbol->type () == mst_data
+ || msymbol->type () == mst_data_gnu_ifunc)
&& strcmp (msymbol->linkage_name (),
tsymbol->linkage_name ()) == 0)
{
@@ -1595,8 +1592,8 @@ minimal_symbol_upper_bound (struct bound_minimal_symbol minsym)
lesser of the next minimal symbol in the same section, or the end
of the section, as the end of the function. */
- if (MSYMBOL_SIZE (minsym.minsym) != 0)
- return BMSYMBOL_VALUE_ADDRESS (minsym) + MSYMBOL_SIZE (minsym.minsym);
+ if (minsym.minsym->size () != 0)
+ return minsym.value_address () + minsym.minsym->size ();
/* Step over other symbols at this same address, and symbols in
other sections, to find the next symbol in this section with a
@@ -1609,17 +1606,17 @@ minimal_symbol_upper_bound (struct bound_minimal_symbol minsym)
section = msymbol->section_index ();
for (iter = msymbol + 1; iter != past_the_end; ++iter)
{
- if ((MSYMBOL_VALUE_RAW_ADDRESS (iter)
- != MSYMBOL_VALUE_RAW_ADDRESS (msymbol))
+ if ((iter->value_raw_address ()
+ != msymbol->value_raw_address ())
&& iter->section_index () == section)
break;
}
obj_section = minsym.obj_section ();
if (iter != past_the_end
- && (MSYMBOL_VALUE_ADDRESS (minsym.objfile, iter)
+ && (iter->value_address (minsym.objfile)
< obj_section->endaddr ()))
- result = MSYMBOL_VALUE_ADDRESS (minsym.objfile, iter);
+ result = iter->value_address (minsym.objfile);
else
/* We got the start address from the last msymbol in the objfile.
So the end address is the end of the section. */
diff --git a/gdb/minsyms.h b/gdb/minsyms.h
index 5970cb3bb99..296b8cde1ba 100644
--- a/gdb/minsyms.h
+++ b/gdb/minsyms.h
@@ -28,15 +28,30 @@ struct type;
struct bound_minimal_symbol
{
+ bound_minimal_symbol (struct minimal_symbol *msym, struct objfile *objf)
+ : minsym (msym),
+ objfile (objf)
+ {
+ }
+
+ bound_minimal_symbol () = default;
+
+ /* Return the address of the minimal symbol in the context of the objfile. */
+
+ CORE_ADDR value_address () const
+ {
+ return this->minsym->value_address (this->objfile);
+ }
+
/* The minimal symbol that was found, or NULL if no minimal symbol
was found. */
- struct minimal_symbol *minsym;
+ struct minimal_symbol *minsym = nullptr;
/* If MINSYM is not NULL, then this is the objfile in which the
symbol is defined. */
- struct objfile *objfile;
+ struct objfile *objfile = nullptr;
/* Return the obj_section from OBJFILE for MINSYM. */
diff --git a/gdb/mips-fbsd-tdep.c b/gdb/mips-fbsd-tdep.c
index e7eeecb2174..05043d93e74 100644
--- a/gdb/mips-fbsd-tdep.c
+++ b/gdb/mips-fbsd-tdep.c
@@ -470,7 +470,7 @@ mips_fbsd_skip_solib_resolver (struct gdbarch *gdbarch, CORE_ADDR pc)
{
struct bound_minimal_symbol msym
= lookup_bound_minimal_symbol ("_mips_rtld_bind");
- if (msym.minsym != nullptr && BMSYMBOL_VALUE_ADDRESS (msym) == pc)
+ if (msym.minsym != nullptr && msym.value_address () == pc)
return frame_unwind_caller_pc (get_current_frame ());
return fbsd_skip_solib_resolver (gdbarch, pc);
diff --git a/gdb/mips-linux-nat.c b/gdb/mips-linux-nat.c
index 20e12b6889e..feaf4643158 100644
--- a/gdb/mips-linux-nat.c
+++ b/gdb/mips-linux-nat.c
@@ -508,26 +508,26 @@ mips_show_dr (const char *func, CORE_ADDR addr,
{
int i;
- fputs_unfiltered (func, gdb_stdlog);
+ gdb_puts (func, gdb_stdlog);
if (addr || len)
- fprintf_unfiltered (gdb_stdlog,
- " (addr=%s, len=%d, type=%s)",
- paddress (target_gdbarch (), addr), len,
- type == hw_write ? "data-write"
- : (type == hw_read ? "data-read"
- : (type == hw_access ? "data-read/write"
- : (type == hw_execute ? "instruction-execute"
- : "??unknown??"))));
- fputs_unfiltered (":\n", gdb_stdlog);
+ gdb_printf (gdb_stdlog,
+ " (addr=%s, len=%d, type=%s)",
+ paddress (target_gdbarch (), addr), len,
+ type == hw_write ? "data-write"
+ : (type == hw_read ? "data-read"
+ : (type == hw_access ? "data-read/write"
+ : (type == hw_execute ? "instruction-execute"
+ : "??unknown??"))));
+ gdb_puts (":\n", gdb_stdlog);
for (i = 0; i < MAX_DEBUG_REGISTER; i++)
- fprintf_unfiltered (gdb_stdlog, "\tDR%d: lo=%s, hi=%s\n", i,
- paddress (target_gdbarch (),
- mips_linux_watch_get_watchlo (&watch_mirror,
- i)),
- paddress (target_gdbarch (),
- mips_linux_watch_get_watchhi (&watch_mirror,
- i)));
+ gdb_printf (gdb_stdlog, "\tDR%d: lo=%s, hi=%s\n", i,
+ paddress (target_gdbarch (),
+ mips_linux_watch_get_watchlo (&watch_mirror,
+ i)),
+ paddress (target_gdbarch (),
+ mips_linux_watch_get_watchhi (&watch_mirror,
+ i)));
}
/* Target to_can_use_hw_breakpoint implementation. Return 1 if we can
diff --git a/gdb/mips-linux-tdep.c b/gdb/mips-linux-tdep.c
index 6686355a4fe..d8f90ccf881 100644
--- a/gdb/mips-linux-tdep.c
+++ b/gdb/mips-linux-tdep.c
@@ -701,7 +701,7 @@ mips_linux_skip_resolver (struct gdbarch *gdbarch, CORE_ADDR pc)
resolver = lookup_minimal_symbol ("__dl_runtime_resolve", NULL, NULL);
- if (resolver.minsym && BMSYMBOL_VALUE_ADDRESS (resolver) == pc)
+ if (resolver.minsym && resolver.value_address () == pc)
return frame_unwind_caller_pc (get_current_frame ());
return glibc_skip_solib_resolver (gdbarch, pc);
@@ -1556,11 +1556,7 @@ mips_linux_init_abi (struct gdbarch_info info,
set_solib_svr4_fetch_link_map_offsets
(gdbarch, linux_ilp32_fetch_link_map_offsets);
set_gdbarch_long_double_bit (gdbarch, 128);
- /* These floatformats should probably be renamed. MIPS uses
- the same 128-bit IEEE floating point format that IA-64 uses,
- except that the quiet/signalling NaN bit is reversed (GDB
- does not distinguish between quiet and signalling NaNs). */
- set_gdbarch_long_double_format (gdbarch, floatformats_ia64_quad);
+ set_gdbarch_long_double_format (gdbarch, floatformats_ieee_quad);
tramp_frame_prepend_unwinder (gdbarch,
&micromips_linux_n32_rt_sigframe);
tramp_frame_prepend_unwinder (gdbarch, &mips_linux_n32_rt_sigframe);
@@ -1572,11 +1568,7 @@ mips_linux_init_abi (struct gdbarch_info info,
set_solib_svr4_fetch_link_map_offsets
(gdbarch, linux_lp64_fetch_link_map_offsets);
set_gdbarch_long_double_bit (gdbarch, 128);
- /* These floatformats should probably be renamed. MIPS uses
- the same 128-bit IEEE floating point format that IA-64 uses,
- except that the quiet/signalling NaN bit is reversed (GDB
- does not distinguish between quiet and signalling NaNs). */
- set_gdbarch_long_double_format (gdbarch, floatformats_ia64_quad);
+ set_gdbarch_long_double_format (gdbarch, floatformats_ieee_quad);
tramp_frame_prepend_unwinder (gdbarch,
&micromips_linux_n64_rt_sigframe);
tramp_frame_prepend_unwinder (gdbarch, &mips_linux_n64_rt_sigframe);
diff --git a/gdb/mips-tdep.c b/gdb/mips-tdep.c
index e5f8c6b2053..ffed8723dce 100644
--- a/gdb/mips-tdep.c
+++ b/gdb/mips-tdep.c
@@ -435,13 +435,13 @@ mips_elf_make_msymbol_special (asymbol * sym, struct minimal_symbol *msym)
if (ELF_ST_IS_MICROMIPS (st_other))
{
- MSYMBOL_TARGET_FLAG_MICROMIPS (msym) = 1;
- SET_MSYMBOL_VALUE_ADDRESS (msym, MSYMBOL_VALUE_RAW_ADDRESS (msym) | 1);
+ SET_MSYMBOL_TARGET_FLAG_MICROMIPS (msym);
+ msym->set_value_address (msym->value_raw_address () | 1);
}
else if (ELF_ST_IS_MIPS16 (st_other))
{
- MSYMBOL_TARGET_FLAG_MIPS16 (msym) = 1;
- SET_MSYMBOL_VALUE_ADDRESS (msym, MSYMBOL_VALUE_RAW_ADDRESS (msym) | 1);
+ SET_MSYMBOL_TARGET_FLAG_MIPS16 (msym);
+ msym->set_value_address (msym->value_raw_address () | 1);
}
}
@@ -451,7 +451,7 @@ static int
msymbol_is_mips (struct minimal_symbol *msym)
{
return !(MSYMBOL_TARGET_FLAG_MIPS16 (msym)
- | MSYMBOL_TARGET_FLAG_MICROMIPS (msym));
+ || MSYMBOL_TARGET_FLAG_MICROMIPS (msym));
}
/* Return one iff MSYM refers to MIPS16 code. */
@@ -483,18 +483,18 @@ msymbol_is_micromips (struct minimal_symbol *msym)
static void
mips_make_symbol_special (struct symbol *sym, struct objfile *objfile)
{
- if (SYMBOL_CLASS (sym) == LOC_BLOCK)
+ if (sym->aclass () == LOC_BLOCK)
{
/* We are in symbol reading so it is OK to cast away constness. */
- struct block *block = (struct block *) SYMBOL_BLOCK_VALUE (sym);
+ struct block *block = (struct block *) sym->value_block ();
CORE_ADDR compact_block_start;
struct bound_minimal_symbol msym;
- compact_block_start = BLOCK_START (block) | 1;
+ compact_block_start = block->start () | 1;
msym = lookup_minimal_symbol_by_pc (compact_block_start);
if (msym.minsym && !msymbol_is_mips (msym.minsym))
{
- BLOCK_START (block) = compact_block_start;
+ block->set_start (compact_block_start);
}
}
}
@@ -530,15 +530,15 @@ mips_xfer_register (struct gdbarch *gdbarch, struct regcache *regcache,
internal_error (__FILE__, __LINE__, _("bad switch"));
}
if (mips_debug)
- fprintf_unfiltered (gdb_stderr,
- "xfer $%d, reg offset %d, buf offset %d, length %d, ",
- reg_num, reg_offset, buf_offset, length);
+ gdb_printf (gdb_stderr,
+ "xfer $%d, reg offset %d, buf offset %d, length %d, ",
+ reg_num, reg_offset, buf_offset, length);
if (mips_debug && out != NULL)
{
int i;
- fprintf_unfiltered (gdb_stdlog, "out ");
+ gdb_printf (gdb_stdlog, "out ");
for (i = 0; i < length; i++)
- fprintf_unfiltered (gdb_stdlog, "%02x", out[buf_offset + i]);
+ gdb_printf (gdb_stdlog, "%02x", out[buf_offset + i]);
}
if (in != NULL)
regcache->cooked_read_part (reg_num, reg_offset, length, in + buf_offset);
@@ -547,12 +547,12 @@ mips_xfer_register (struct gdbarch *gdbarch, struct regcache *regcache,
if (mips_debug && in != NULL)
{
int i;
- fprintf_unfiltered (gdb_stdlog, "in ");
+ gdb_printf (gdb_stdlog, "in ");
for (i = 0; i < length; i++)
- fprintf_unfiltered (gdb_stdlog, "%02x", in[buf_offset + i]);
+ gdb_printf (gdb_stdlog, "%02x", in[buf_offset + i]);
}
if (mips_debug)
- fprintf_unfiltered (gdb_stdlog, "\n");
+ gdb_printf (gdb_stdlog, "\n");
}
/* Determine if a MIPS3 or later cpu is operating in MIPS{1,2} FPU
@@ -698,7 +698,7 @@ mips_register_name (struct gdbarch *gdbarch, int regno)
static int
mips_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
- struct reggroup *reggroup)
+ const struct reggroup *reggroup)
{
int vector_p;
int float_p;
@@ -738,7 +738,7 @@ mips_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
static int
mips_tdesc_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
- struct reggroup *reggroup)
+ const struct reggroup *reggroup)
{
int rawnum = regnum % gdbarch_num_regs (gdbarch);
int pseudo = regnum / gdbarch_num_regs (gdbarch);
@@ -1190,13 +1190,13 @@ show_mask_address (struct ui_file *file, int from_tty,
switch (mask_address_var)
{
case AUTO_BOOLEAN_TRUE:
- fprintf_filtered (file, "The 32 bit mips address mask is enabled\n");
+ gdb_printf (file, "The 32 bit mips address mask is enabled\n");
break;
case AUTO_BOOLEAN_FALSE:
- fprintf_filtered (file, "The 32 bit mips address mask is disabled\n");
+ gdb_printf (file, "The 32 bit mips address mask is disabled\n");
break;
case AUTO_BOOLEAN_AUTO:
- fprintf_filtered
+ gdb_printf
(file,
"The 32 bit address mask is set automatically. Currently %s\n",
mips_mask_address_p (tdep) ? "enabled" : "disabled");
@@ -2063,7 +2063,7 @@ micromips_next_pc (struct regcache *regcache, CORE_ADDR pc)
if (regcache_raw_get_signed (regcache, b0s5_reg (insn >> 16))
!= regcache_raw_get_signed (regcache, b5s5_reg (insn >> 16)))
pc += micromips_relative_offset16 (insn);
- else
+ else
pc += micromips_pc_insn_size (gdbarch, pc);
break;
@@ -4294,7 +4294,7 @@ heuristic_proc_start (struct gdbarch *gdbarch, CORE_ADDR pc)
particular. This message needs to give people
in that situation enough information to
determine that it's no big deal. */
- printf_filtered ("\n\
+ gdb_printf ("\n\
GDB is unable to find the start of the function at %s\n\
and thus can't determine the size of that function's stack frame.\n\
This means that GDB may be unable to access that stack frame, or\n\
@@ -4305,7 +4305,7 @@ stack pointer.\n\
from %s for code which looks like the beginning of a\n\
function, you can increase the range of the search using the `set\n\
heuristic-fence-post' command.\n",
- paddress (gdbarch, pc), paddress (gdbarch, pc));
+ paddress (gdbarch, pc), paddress (gdbarch, pc));
blurb_printed = 1;
}
}
@@ -4562,10 +4562,10 @@ mips_eabi_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
sp -= align_up (arg_space, 16);
if (mips_debug)
- fprintf_unfiltered (gdb_stdlog,
- "mips_eabi_push_dummy_call: sp=%s allocated %ld\n",
- paddress (gdbarch, sp),
- (long) align_up (arg_space, 16));
+ gdb_printf (gdb_stdlog,
+ "mips_eabi_push_dummy_call: sp=%s allocated %ld\n",
+ paddress (gdbarch, sp),
+ (long) align_up (arg_space, 16));
/* Initialize the integer and float register pointers. */
argreg = MIPS_A0_REGNUM;
@@ -4575,10 +4575,10 @@ mips_eabi_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
if (return_method == return_method_struct)
{
if (mips_debug)
- fprintf_unfiltered (gdb_stdlog,
- "mips_eabi_push_dummy_call: "
- "struct_return reg=%d %s\n",
- argreg, paddress (gdbarch, struct_addr));
+ gdb_printf (gdb_stdlog,
+ "mips_eabi_push_dummy_call: "
+ "struct_return reg=%d %s\n",
+ argreg, paddress (gdbarch, struct_addr));
regcache_cooked_write_unsigned (regcache, argreg++, struct_addr);
}
@@ -4597,9 +4597,9 @@ mips_eabi_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
enum type_code typecode = arg_type->code ();
if (mips_debug)
- fprintf_unfiltered (gdb_stdlog,
- "mips_eabi_push_dummy_call: %d len=%d type=%d",
- argnum + 1, len, (int) typecode);
+ gdb_printf (gdb_stdlog,
+ "mips_eabi_push_dummy_call: %d len=%d type=%d",
+ argnum + 1, len, (int) typecode);
/* The EABI passes structures that do not fit in a register by
reference. */
@@ -4613,7 +4613,7 @@ mips_eabi_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
len = abi_regsize;
val = ref_valbuf;
if (mips_debug)
- fprintf_unfiltered (gdb_stdlog, " push");
+ gdb_printf (gdb_stdlog, " push");
}
else
val = value_contents (arg).data ();
@@ -4659,16 +4659,16 @@ mips_eabi_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
regval = extract_signed_integer (val + low_offset,
4, byte_order);
if (mips_debug)
- fprintf_unfiltered (gdb_stdlog, " - fpreg=%d val=%s",
- float_argreg, phex (regval, 4));
+ gdb_printf (gdb_stdlog, " - fpreg=%d val=%s",
+ float_argreg, phex (regval, 4));
regcache_cooked_write_signed (regcache, float_argreg++, regval);
/* Write the high word of the double to the odd register(s). */
regval = extract_signed_integer (val + 4 - low_offset,
4, byte_order);
if (mips_debug)
- fprintf_unfiltered (gdb_stdlog, " - fpreg=%d val=%s",
- float_argreg, phex (regval, 4));
+ gdb_printf (gdb_stdlog, " - fpreg=%d val=%s",
+ float_argreg, phex (regval, 4));
regcache_cooked_write_signed (regcache, float_argreg++, regval);
}
else
@@ -4679,8 +4679,8 @@ mips_eabi_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
above to ensure that it is even register aligned. */
LONGEST regval = extract_signed_integer (val, len, byte_order);
if (mips_debug)
- fprintf_unfiltered (gdb_stdlog, " - fpreg=%d val=%s",
- float_argreg, phex (regval, len));
+ gdb_printf (gdb_stdlog, " - fpreg=%d val=%s",
+ float_argreg, phex (regval, len));
regcache_cooked_write_signed (regcache, float_argreg++, regval);
}
}
@@ -4705,8 +4705,8 @@ mips_eabi_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
int partial_len = (len < abi_regsize ? len : abi_regsize);
if (mips_debug)
- fprintf_unfiltered (gdb_stdlog, " -- partial=%d",
- partial_len);
+ gdb_printf (gdb_stdlog, " -- partial=%d",
+ partial_len);
/* Write this portion of the argument to the stack. */
if (argreg > mips_last_arg_regnum (gdbarch)
@@ -4733,10 +4733,10 @@ mips_eabi_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
if (mips_debug)
{
- fprintf_unfiltered (gdb_stdlog, " - stack_offset=%s",
- paddress (gdbarch, stack_offset));
- fprintf_unfiltered (gdb_stdlog, " longword_offset=%s",
- paddress (gdbarch, longword_offset));
+ gdb_printf (gdb_stdlog, " - stack_offset=%s",
+ paddress (gdbarch, stack_offset));
+ gdb_printf (gdb_stdlog, " longword_offset=%s",
+ paddress (gdbarch, longword_offset));
}
addr = sp + stack_offset + longword_offset;
@@ -4744,12 +4744,12 @@ mips_eabi_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
if (mips_debug)
{
int i;
- fprintf_unfiltered (gdb_stdlog, " @%s ",
- paddress (gdbarch, addr));
+ gdb_printf (gdb_stdlog, " @%s ",
+ paddress (gdbarch, addr));
for (i = 0; i < partial_len; i++)
{
- fprintf_unfiltered (gdb_stdlog, "%02x",
- val[i] & 0xff);
+ gdb_printf (gdb_stdlog, "%02x",
+ val[i] & 0xff);
}
}
write_memory (addr, val, partial_len);
@@ -4767,9 +4767,9 @@ mips_eabi_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
extract_signed_integer (val, partial_len, byte_order);
if (mips_debug)
- fprintf_filtered (gdb_stdlog, " - reg=%d val=%s",
- argreg,
- phex (regval, abi_regsize));
+ gdb_printf (gdb_stdlog, " - reg=%d val=%s",
+ argreg,
+ phex (regval, abi_regsize));
regcache_cooked_write_signed (regcache, argreg, regval);
argreg++;
}
@@ -4788,7 +4788,7 @@ mips_eabi_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
}
}
if (mips_debug)
- fprintf_unfiltered (gdb_stdlog, "\n");
+ gdb_printf (gdb_stdlog, "\n");
}
regcache_cooked_write_signed (regcache, MIPS_SP_REGNUM, sp);
@@ -4834,14 +4834,14 @@ mips_eabi_return_value (struct gdbarch *gdbarch, struct value *function,
/* A floating-point value belongs in the least significant part
of FP0/FP1. */
if (mips_debug)
- fprintf_unfiltered (gdb_stderr, "Return float in $fp0\n");
+ gdb_printf (gdb_stderr, "Return float in $fp0\n");
regnum = mips_regnum (gdbarch)->fp0;
}
else
{
/* An integer value goes in V0/V1. */
if (mips_debug)
- fprintf_unfiltered (gdb_stderr, "Return scalar in $v0\n");
+ gdb_printf (gdb_stderr, "Return scalar in $v0\n");
regnum = MIPS_V0_REGNUM;
}
for (offset = 0;
@@ -4955,10 +4955,10 @@ mips_n32n64_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
sp -= align_up (arg_space, 16);
if (mips_debug)
- fprintf_unfiltered (gdb_stdlog,
- "mips_n32n64_push_dummy_call: sp=%s allocated %ld\n",
- paddress (gdbarch, sp),
- (long) align_up (arg_space, 16));
+ gdb_printf (gdb_stdlog,
+ "mips_n32n64_push_dummy_call: sp=%s allocated %ld\n",
+ paddress (gdbarch, sp),
+ (long) align_up (arg_space, 16));
/* Initialize the integer and float register pointers. */
argreg = MIPS_A0_REGNUM;
@@ -4968,10 +4968,10 @@ mips_n32n64_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
if (return_method == return_method_struct)
{
if (mips_debug)
- fprintf_unfiltered (gdb_stdlog,
- "mips_n32n64_push_dummy_call: "
- "struct_return reg=%d %s\n",
- argreg, paddress (gdbarch, struct_addr));
+ gdb_printf (gdb_stdlog,
+ "mips_n32n64_push_dummy_call: "
+ "struct_return reg=%d %s\n",
+ argreg, paddress (gdbarch, struct_addr));
regcache_cooked_write_unsigned (regcache, argreg++, struct_addr);
}
@@ -4987,9 +4987,9 @@ mips_n32n64_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
enum type_code typecode = arg_type->code ();
if (mips_debug)
- fprintf_unfiltered (gdb_stdlog,
- "mips_n32n64_push_dummy_call: %d len=%d type=%d",
- argnum + 1, len, (int) typecode);
+ gdb_printf (gdb_stdlog,
+ "mips_n32n64_push_dummy_call: %d len=%d type=%d",
+ argnum + 1, len, (int) typecode);
val = value_contents (arg).data ();
@@ -5011,13 +5011,13 @@ mips_n32n64_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
int reglen = (len <= MIPS64_REGSIZE ? len : MIPS64_REGSIZE);
LONGEST regval = extract_unsigned_integer (val, reglen, byte_order);
if (mips_debug)
- fprintf_unfiltered (gdb_stdlog, " - fpreg=%d val=%s",
- float_argreg, phex (regval, reglen));
+ gdb_printf (gdb_stdlog, " - fpreg=%d val=%s",
+ float_argreg, phex (regval, reglen));
regcache_cooked_write_unsigned (regcache, float_argreg, regval);
if (mips_debug)
- fprintf_unfiltered (gdb_stdlog, " - reg=%d val=%s",
- argreg, phex (regval, reglen));
+ gdb_printf (gdb_stdlog, " - reg=%d val=%s",
+ argreg, phex (regval, reglen));
regcache_cooked_write_unsigned (regcache, argreg, regval);
float_argreg++;
argreg++;
@@ -5026,13 +5026,13 @@ mips_n32n64_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
regval = extract_unsigned_integer (val + reglen,
reglen, byte_order);
if (mips_debug)
- fprintf_unfiltered (gdb_stdlog, " - fpreg=%d val=%s",
- float_argreg, phex (regval, reglen));
+ gdb_printf (gdb_stdlog, " - fpreg=%d val=%s",
+ float_argreg, phex (regval, reglen));
regcache_cooked_write_unsigned (regcache, float_argreg, regval);
if (mips_debug)
- fprintf_unfiltered (gdb_stdlog, " - reg=%d val=%s",
- argreg, phex (regval, reglen));
+ gdb_printf (gdb_stdlog, " - reg=%d val=%s",
+ argreg, phex (regval, reglen));
regcache_cooked_write_unsigned (regcache, argreg, regval);
float_argreg++;
argreg++;
@@ -5060,8 +5060,8 @@ mips_n32n64_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
int partial_len = (len < MIPS64_REGSIZE ? len : MIPS64_REGSIZE);
if (mips_debug)
- fprintf_unfiltered (gdb_stdlog, " -- partial=%d",
- partial_len);
+ gdb_printf (gdb_stdlog, " -- partial=%d",
+ partial_len);
if (fp_register_arg_p (gdbarch, typecode, arg_type))
gdb_assert (argreg > mips_last_arg_regnum (gdbarch));
@@ -5084,10 +5084,10 @@ mips_n32n64_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
if (mips_debug)
{
- fprintf_unfiltered (gdb_stdlog, " - stack_offset=%s",
- paddress (gdbarch, stack_offset));
- fprintf_unfiltered (gdb_stdlog, " longword_offset=%s",
- paddress (gdbarch, longword_offset));
+ gdb_printf (gdb_stdlog, " - stack_offset=%s",
+ paddress (gdbarch, stack_offset));
+ gdb_printf (gdb_stdlog, " longword_offset=%s",
+ paddress (gdbarch, longword_offset));
}
addr = sp + stack_offset + longword_offset;
@@ -5095,12 +5095,12 @@ mips_n32n64_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
if (mips_debug)
{
int i;
- fprintf_unfiltered (gdb_stdlog, " @%s ",
- paddress (gdbarch, addr));
+ gdb_printf (gdb_stdlog, " @%s ",
+ paddress (gdbarch, addr));
for (i = 0; i < partial_len; i++)
{
- fprintf_unfiltered (gdb_stdlog, "%02x",
- val[i] & 0xff);
+ gdb_printf (gdb_stdlog, "%02x",
+ val[i] & 0xff);
}
}
write_memory (addr, val, partial_len);
@@ -5147,18 +5147,18 @@ mips_n32n64_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
* TARGET_CHAR_BIT);
if (mips_debug)
- fprintf_filtered (gdb_stdlog, " - reg=%d val=%s",
- argreg,
- phex (regval, MIPS64_REGSIZE));
+ gdb_printf (gdb_stdlog, " - reg=%d val=%s",
+ argreg,
+ phex (regval, MIPS64_REGSIZE));
regcache_cooked_write_unsigned (regcache, argreg, regval);
if (mips_n32n64_fp_arg_chunk_p (gdbarch, arg_type,
TYPE_LENGTH (arg_type) - len))
{
if (mips_debug)
- fprintf_filtered (gdb_stdlog, " - fpreg=%d val=%s",
- float_argreg,
- phex (regval, MIPS64_REGSIZE));
+ gdb_printf (gdb_stdlog, " - fpreg=%d val=%s",
+ float_argreg,
+ phex (regval, MIPS64_REGSIZE));
regcache_cooked_write_unsigned (regcache, float_argreg,
regval);
}
@@ -5181,7 +5181,7 @@ mips_n32n64_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
}
}
if (mips_debug)
- fprintf_unfiltered (gdb_stdlog, "\n");
+ gdb_printf (gdb_stdlog, "\n");
}
regcache_cooked_write_signed (regcache, MIPS_SP_REGNUM, sp);
@@ -5217,30 +5217,44 @@ mips_n32n64_return_value (struct gdbarch *gdbarch, struct value *function,
that all composite results be handled by conversion to implicit first
parameters. The MIPS/SGI Fortran implementation has always made a
specific exception to return COMPLEX results in the floating point
- registers.] */
+ registers.]
+
+ From MIPSpro Assembly Language Programmer's Guide, Document Number:
+ 007-2418-004
+
+ Software
+ Register Name(from
+ Name fgregdef.h) Use and Linkage
+ -----------------------------------------------------------------
+ $f0, $f2 fv0, fv1 Hold results of floating-point type function
+ ($f0) and complex type function ($f0 has the
+ real part, $f2 has the imaginary part.) */
if (TYPE_LENGTH (type) > 2 * MIPS64_REGSIZE)
return RETURN_VALUE_STRUCT_CONVENTION;
- else if (type->code () == TYPE_CODE_FLT
- && TYPE_LENGTH (type) == 16
+ else if ((type->code () == TYPE_CODE_COMPLEX
+ || (type->code () == TYPE_CODE_FLT && TYPE_LENGTH (type) == 16))
&& tdep->mips_fpu_type != MIPS_FPU_NONE)
{
- /* A 128-bit floating-point value fills both $f0 and $f2. The
- two registers are used in the same as memory order, so the
- eight bytes with the lower memory address are in $f0. */
+ /* A complex value of up to 128 bits in width as well as a 128-bit
+ floating-point value goes in both $f0 and $f2. A single complex
+ value is held in the lower halves only of the respective registers.
+ The two registers are used in the same as memory order, so the
+ bytes with the lower memory address are in $f0. */
if (mips_debug)
- fprintf_unfiltered (gdb_stderr, "Return float in $f0 and $f2\n");
+ gdb_printf (gdb_stderr, "Return float in $f0 and $f2\n");
mips_xfer_register (gdbarch, regcache,
(gdbarch_num_regs (gdbarch)
+ mips_regnum (gdbarch)->fp0),
- 8, gdbarch_byte_order (gdbarch),
+ TYPE_LENGTH (type) / 2, gdbarch_byte_order (gdbarch),
readbuf, writebuf, 0);
mips_xfer_register (gdbarch, regcache,
(gdbarch_num_regs (gdbarch)
+ mips_regnum (gdbarch)->fp0 + 2),
- 8, gdbarch_byte_order (gdbarch),
- readbuf ? readbuf + 8 : readbuf,
- writebuf ? writebuf + 8 : writebuf, 0);
+ TYPE_LENGTH (type) / 2, gdbarch_byte_order (gdbarch),
+ readbuf ? readbuf + TYPE_LENGTH (type) / 2 : readbuf,
+ (writebuf
+ ? writebuf + TYPE_LENGTH (type) / 2 : writebuf), 0);
return RETURN_VALUE_REGISTER_CONVENTION;
}
else if (type->code () == TYPE_CODE_FLT
@@ -5248,7 +5262,7 @@ mips_n32n64_return_value (struct gdbarch *gdbarch, struct value *function,
{
/* A single or double floating-point value that fits in FP0. */
if (mips_debug)
- fprintf_unfiltered (gdb_stderr, "Return float in $fp0\n");
+ gdb_printf (gdb_stderr, "Return float in $fp0\n");
mips_xfer_register (gdbarch, regcache,
(gdbarch_num_regs (gdbarch)
+ mips_regnum (gdbarch)->fp0),
@@ -5281,8 +5295,8 @@ mips_n32n64_return_value (struct gdbarch *gdbarch, struct value *function,
{
int offset = type->field (field).loc_bitpos () / TARGET_CHAR_BIT;
if (mips_debug)
- fprintf_unfiltered (gdb_stderr, "Return float struct+%d\n",
- offset);
+ gdb_printf (gdb_stderr, "Return float struct+%d\n",
+ offset);
if (TYPE_LENGTH (type->field (field).type ()) == 16)
{
/* A 16-byte long double field goes in two consecutive
@@ -5324,8 +5338,8 @@ mips_n32n64_return_value (struct gdbarch *gdbarch, struct value *function,
if (offset + xfer > TYPE_LENGTH (type))
xfer = TYPE_LENGTH (type) - offset;
if (mips_debug)
- fprintf_unfiltered (gdb_stderr, "Return struct+%d:%d in $%d\n",
- offset, xfer, regnum);
+ gdb_printf (gdb_stderr, "Return struct+%d:%d in $%d\n",
+ offset, xfer, regnum);
mips_xfer_register (gdbarch, regcache,
gdbarch_num_regs (gdbarch) + regnum,
xfer, BFD_ENDIAN_UNKNOWN, readbuf, writebuf,
@@ -5347,8 +5361,8 @@ mips_n32n64_return_value (struct gdbarch *gdbarch, struct value *function,
if (offset + xfer > TYPE_LENGTH (type))
xfer = TYPE_LENGTH (type) - offset;
if (mips_debug)
- fprintf_unfiltered (gdb_stderr, "Return scalar+%d:%d in $%d\n",
- offset, xfer, regnum);
+ gdb_printf (gdb_stderr, "Return scalar+%d:%d in $%d\n",
+ offset, xfer, regnum);
mips_xfer_register (gdbarch, regcache,
gdbarch_num_regs (gdbarch) + regnum,
xfer, gdbarch_byte_order (gdbarch),
@@ -5420,10 +5434,10 @@ mips_o32_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
sp -= align_up (arg_space, 16);
if (mips_debug)
- fprintf_unfiltered (gdb_stdlog,
- "mips_o32_push_dummy_call: sp=%s allocated %ld\n",
- paddress (gdbarch, sp),
- (long) align_up (arg_space, 16));
+ gdb_printf (gdb_stdlog,
+ "mips_o32_push_dummy_call: sp=%s allocated %ld\n",
+ paddress (gdbarch, sp),
+ (long) align_up (arg_space, 16));
/* Initialize the integer and float register pointers. */
argreg = MIPS_A0_REGNUM;
@@ -5433,10 +5447,10 @@ mips_o32_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
if (return_method == return_method_struct)
{
if (mips_debug)
- fprintf_unfiltered (gdb_stdlog,
- "mips_o32_push_dummy_call: "
- "struct_return reg=%d %s\n",
- argreg, paddress (gdbarch, struct_addr));
+ gdb_printf (gdb_stdlog,
+ "mips_o32_push_dummy_call: "
+ "struct_return reg=%d %s\n",
+ argreg, paddress (gdbarch, struct_addr));
regcache_cooked_write_unsigned (regcache, argreg++, struct_addr);
stack_offset += MIPS32_REGSIZE;
}
@@ -5453,9 +5467,9 @@ mips_o32_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
enum type_code typecode = arg_type->code ();
if (mips_debug)
- fprintf_unfiltered (gdb_stdlog,
- "mips_o32_push_dummy_call: %d len=%d type=%d",
- argnum + 1, len, (int) typecode);
+ gdb_printf (gdb_stdlog,
+ "mips_o32_push_dummy_call: %d len=%d type=%d",
+ argnum + 1, len, (int) typecode);
val = value_contents (arg).data ();
@@ -5493,29 +5507,29 @@ mips_o32_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
/* First word. */
regval = extract_unsigned_integer (val, 4, byte_order);
if (mips_debug)
- fprintf_unfiltered (gdb_stdlog, " - fpreg=%d val=%s",
- float_argreg + freg_offset,
- phex (regval, 4));
+ gdb_printf (gdb_stdlog, " - fpreg=%d val=%s",
+ float_argreg + freg_offset,
+ phex (regval, 4));
regcache_cooked_write_unsigned (regcache,
float_argreg++ + freg_offset,
regval);
if (mips_debug)
- fprintf_unfiltered (gdb_stdlog, " - reg=%d val=%s",
- argreg, phex (regval, 4));
+ gdb_printf (gdb_stdlog, " - reg=%d val=%s",
+ argreg, phex (regval, 4));
regcache_cooked_write_unsigned (regcache, argreg++, regval);
/* Second word. */
regval = extract_unsigned_integer (val + 4, 4, byte_order);
if (mips_debug)
- fprintf_unfiltered (gdb_stdlog, " - fpreg=%d val=%s",
- float_argreg - freg_offset,
- phex (regval, 4));
+ gdb_printf (gdb_stdlog, " - fpreg=%d val=%s",
+ float_argreg - freg_offset,
+ phex (regval, 4));
regcache_cooked_write_unsigned (regcache,
float_argreg++ - freg_offset,
regval);
if (mips_debug)
- fprintf_unfiltered (gdb_stdlog, " - reg=%d val=%s",
- argreg, phex (regval, 4));
+ gdb_printf (gdb_stdlog, " - reg=%d val=%s",
+ argreg, phex (regval, 4));
regcache_cooked_write_unsigned (regcache, argreg++, regval);
}
else
@@ -5526,16 +5540,16 @@ mips_o32_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
above to ensure that it is even register aligned. */
LONGEST regval = extract_unsigned_integer (val, len, byte_order);
if (mips_debug)
- fprintf_unfiltered (gdb_stdlog, " - fpreg=%d val=%s",
- float_argreg, phex (regval, len));
+ gdb_printf (gdb_stdlog, " - fpreg=%d val=%s",
+ float_argreg, phex (regval, len));
regcache_cooked_write_unsigned (regcache,
float_argreg++, regval);
/* Although two FP registers are reserved for each
argument, only one corresponding integer register is
reserved. */
if (mips_debug)
- fprintf_unfiltered (gdb_stdlog, " - reg=%d val=%s",
- argreg, phex (regval, len));
+ gdb_printf (gdb_stdlog, " - reg=%d val=%s",
+ argreg, phex (regval, len));
regcache_cooked_write_unsigned (regcache, argreg++, regval);
}
/* Reserve space for the FP register. */
@@ -5568,8 +5582,8 @@ mips_o32_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
int partial_len = (len < MIPS32_REGSIZE ? len : MIPS32_REGSIZE);
if (mips_debug)
- fprintf_unfiltered (gdb_stdlog, " -- partial=%d",
- partial_len);
+ gdb_printf (gdb_stdlog, " -- partial=%d",
+ partial_len);
/* Write this portion of the argument to the stack. */
if (argreg > mips_last_arg_regnum (gdbarch)
@@ -5582,10 +5596,10 @@ mips_o32_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
if (mips_debug)
{
- fprintf_unfiltered (gdb_stdlog, " - stack_offset=%s",
- paddress (gdbarch, stack_offset));
- fprintf_unfiltered (gdb_stdlog, " longword_offset=%s",
- paddress (gdbarch, longword_offset));
+ gdb_printf (gdb_stdlog, " - stack_offset=%s",
+ paddress (gdbarch, stack_offset));
+ gdb_printf (gdb_stdlog, " longword_offset=%s",
+ paddress (gdbarch, longword_offset));
}
addr = sp + stack_offset + longword_offset;
@@ -5593,12 +5607,12 @@ mips_o32_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
if (mips_debug)
{
int i;
- fprintf_unfiltered (gdb_stdlog, " @%s ",
- paddress (gdbarch, addr));
+ gdb_printf (gdb_stdlog, " @%s ",
+ paddress (gdbarch, addr));
for (i = 0; i < partial_len; i++)
{
- fprintf_unfiltered (gdb_stdlog, "%02x",
- val[i] & 0xff);
+ gdb_printf (gdb_stdlog, "%02x",
+ val[i] & 0xff);
}
}
write_memory (addr, val, partial_len);
@@ -5648,9 +5662,9 @@ mips_o32_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
* TARGET_CHAR_BIT);
if (mips_debug)
- fprintf_filtered (gdb_stdlog, " - reg=%d val=%s",
- argreg,
- phex (regval, MIPS32_REGSIZE));
+ gdb_printf (gdb_stdlog, " - reg=%d val=%s",
+ argreg,
+ phex (regval, MIPS32_REGSIZE));
regcache_cooked_write_unsigned (regcache, argreg, regval);
argreg++;
@@ -5674,7 +5688,7 @@ mips_o32_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
}
}
if (mips_debug)
- fprintf_unfiltered (gdb_stdlog, "\n");
+ gdb_printf (gdb_stdlog, "\n");
}
regcache_cooked_write_signed (regcache, MIPS_SP_REGNUM, sp);
@@ -5711,13 +5725,13 @@ mips_o32_return_value (struct gdbarch *gdbarch, struct value *function,
switch (fval_reg)
{
case mips_fval_fpr:
- fprintf_unfiltered (gdb_stderr, "Return float in $fp0\n");
+ gdb_printf (gdb_stderr, "Return float in $fp0\n");
break;
case mips_fval_gpr:
- fprintf_unfiltered (gdb_stderr, "Return float in $2\n");
+ gdb_printf (gdb_stderr, "Return float in $2\n");
break;
case mips_fval_both:
- fprintf_unfiltered (gdb_stderr, "Return float in $fp0 and $2\n");
+ gdb_printf (gdb_stderr, "Return float in $fp0 and $2\n");
break;
}
if (fval_reg != mips_fval_gpr)
@@ -5749,14 +5763,14 @@ mips_o32_return_value (struct gdbarch *gdbarch, struct value *function,
switch (fval_reg)
{
case mips_fval_fpr:
- fprintf_unfiltered (gdb_stderr, "Return float in $fp1/$fp0\n");
+ gdb_printf (gdb_stderr, "Return float in $fp1/$fp0\n");
break;
case mips_fval_gpr:
- fprintf_unfiltered (gdb_stderr, "Return float in $2/$3\n");
+ gdb_printf (gdb_stderr, "Return float in $2/$3\n");
break;
case mips_fval_both:
- fprintf_unfiltered (gdb_stderr,
- "Return float in $fp1/$fp0 and $2/$3\n");
+ gdb_printf (gdb_stderr,
+ "Return float in $fp1/$fp0 and $2/$3\n");
break;
}
if (fval_reg != mips_fval_gpr)
@@ -5832,8 +5846,8 @@ mips_o32_return_value (struct gdbarch *gdbarch, struct value *function,
{
int offset = (type->fields ()[field].loc_bitpos () / TARGET_CHAR_BIT);
if (mips_debug)
- fprintf_unfiltered (gdb_stderr, "Return float struct+%d\n",
- offset);
+ gdb_printf (gdb_stderr, "Return float struct+%d\n",
+ offset);
mips_xfer_register (gdbarch, regcache,
gdbarch_num_regs (gdbarch) + regnum,
TYPE_LENGTH (type->field (field).type ()),
@@ -5860,8 +5874,8 @@ mips_o32_return_value (struct gdbarch *gdbarch, struct value *function,
if (offset + xfer > TYPE_LENGTH (type))
xfer = TYPE_LENGTH (type) - offset;
if (mips_debug)
- fprintf_unfiltered (gdb_stderr, "Return struct+%d:%d in $%d\n",
- offset, xfer, regnum);
+ gdb_printf (gdb_stderr, "Return struct+%d:%d in $%d\n",
+ offset, xfer, regnum);
mips_xfer_register (gdbarch, regcache,
gdbarch_num_regs (gdbarch) + regnum, xfer,
BFD_ENDIAN_UNKNOWN, readbuf, writebuf, offset);
@@ -5884,8 +5898,8 @@ mips_o32_return_value (struct gdbarch *gdbarch, struct value *function,
if (offset + xfer > TYPE_LENGTH (type))
xfer = TYPE_LENGTH (type) - offset;
if (mips_debug)
- fprintf_unfiltered (gdb_stderr, "Return scalar+%d:%d in $%d\n",
- offset, xfer, regnum);
+ gdb_printf (gdb_stderr, "Return scalar+%d:%d in $%d\n",
+ offset, xfer, regnum);
mips_xfer_register (gdbarch, regcache,
gdbarch_num_regs (gdbarch) + regnum, xfer,
gdbarch_byte_order (gdbarch),
@@ -5941,10 +5955,10 @@ mips_o64_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
sp -= align_up (arg_space, 16);
if (mips_debug)
- fprintf_unfiltered (gdb_stdlog,
- "mips_o64_push_dummy_call: sp=%s allocated %ld\n",
- paddress (gdbarch, sp),
- (long) align_up (arg_space, 16));
+ gdb_printf (gdb_stdlog,
+ "mips_o64_push_dummy_call: sp=%s allocated %ld\n",
+ paddress (gdbarch, sp),
+ (long) align_up (arg_space, 16));
/* Initialize the integer and float register pointers. */
argreg = MIPS_A0_REGNUM;
@@ -5954,10 +5968,10 @@ mips_o64_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
if (return_method == return_method_struct)
{
if (mips_debug)
- fprintf_unfiltered (gdb_stdlog,
- "mips_o64_push_dummy_call: "
- "struct_return reg=%d %s\n",
- argreg, paddress (gdbarch, struct_addr));
+ gdb_printf (gdb_stdlog,
+ "mips_o64_push_dummy_call: "
+ "struct_return reg=%d %s\n",
+ argreg, paddress (gdbarch, struct_addr));
regcache_cooked_write_unsigned (regcache, argreg++, struct_addr);
stack_offset += MIPS64_REGSIZE;
}
@@ -5974,9 +5988,9 @@ mips_o64_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
enum type_code typecode = arg_type->code ();
if (mips_debug)
- fprintf_unfiltered (gdb_stdlog,
- "mips_o64_push_dummy_call: %d len=%d type=%d",
- argnum + 1, len, (int) typecode);
+ gdb_printf (gdb_stdlog,
+ "mips_o64_push_dummy_call: %d len=%d type=%d",
+ argnum + 1, len, (int) typecode);
val = value_contents (arg).data ();
@@ -5995,12 +6009,12 @@ mips_o64_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
{
LONGEST regval = extract_unsigned_integer (val, len, byte_order);
if (mips_debug)
- fprintf_unfiltered (gdb_stdlog, " - fpreg=%d val=%s",
- float_argreg, phex (regval, len));
+ gdb_printf (gdb_stdlog, " - fpreg=%d val=%s",
+ float_argreg, phex (regval, len));
regcache_cooked_write_unsigned (regcache, float_argreg++, regval);
if (mips_debug)
- fprintf_unfiltered (gdb_stdlog, " - reg=%d val=%s",
- argreg, phex (regval, len));
+ gdb_printf (gdb_stdlog, " - reg=%d val=%s",
+ argreg, phex (regval, len));
regcache_cooked_write_unsigned (regcache, argreg, regval);
argreg++;
/* Reserve space for the FP register. */
@@ -6022,8 +6036,8 @@ mips_o64_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
int partial_len = (len < MIPS64_REGSIZE ? len : MIPS64_REGSIZE);
if (mips_debug)
- fprintf_unfiltered (gdb_stdlog, " -- partial=%d",
- partial_len);
+ gdb_printf (gdb_stdlog, " -- partial=%d",
+ partial_len);
/* Write this portion of the argument to the stack. */
if (argreg > mips_last_arg_regnum (gdbarch)
@@ -6044,10 +6058,10 @@ mips_o64_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
if (mips_debug)
{
- fprintf_unfiltered (gdb_stdlog, " - stack_offset=%s",
- paddress (gdbarch, stack_offset));
- fprintf_unfiltered (gdb_stdlog, " longword_offset=%s",
- paddress (gdbarch, longword_offset));
+ gdb_printf (gdb_stdlog, " - stack_offset=%s",
+ paddress (gdbarch, stack_offset));
+ gdb_printf (gdb_stdlog, " longword_offset=%s",
+ paddress (gdbarch, longword_offset));
}
addr = sp + stack_offset + longword_offset;
@@ -6055,12 +6069,12 @@ mips_o64_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
if (mips_debug)
{
int i;
- fprintf_unfiltered (gdb_stdlog, " @%s ",
- paddress (gdbarch, addr));
+ gdb_printf (gdb_stdlog, " @%s ",
+ paddress (gdbarch, addr));
for (i = 0; i < partial_len; i++)
{
- fprintf_unfiltered (gdb_stdlog, "%02x",
- val[i] & 0xff);
+ gdb_printf (gdb_stdlog, "%02x",
+ val[i] & 0xff);
}
}
write_memory (addr, val, partial_len);
@@ -6094,9 +6108,9 @@ mips_o64_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
* TARGET_CHAR_BIT);
if (mips_debug)
- fprintf_filtered (gdb_stdlog, " - reg=%d val=%s",
- argreg,
- phex (regval, MIPS64_REGSIZE));
+ gdb_printf (gdb_stdlog, " - reg=%d val=%s",
+ argreg,
+ phex (regval, MIPS64_REGSIZE));
regcache_cooked_write_unsigned (regcache, argreg, regval);
argreg++;
@@ -6120,7 +6134,7 @@ mips_o64_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
}
}
if (mips_debug)
- fprintf_unfiltered (gdb_stdlog, "\n");
+ gdb_printf (gdb_stdlog, "\n");
}
regcache_cooked_write_signed (regcache, MIPS_SP_REGNUM, sp);
@@ -6155,13 +6169,13 @@ mips_o64_return_value (struct gdbarch *gdbarch, struct value *function,
switch (fval_reg)
{
case mips_fval_fpr:
- fprintf_unfiltered (gdb_stderr, "Return float in $fp0\n");
+ gdb_printf (gdb_stderr, "Return float in $fp0\n");
break;
case mips_fval_gpr:
- fprintf_unfiltered (gdb_stderr, "Return float in $2\n");
+ gdb_printf (gdb_stderr, "Return float in $2\n");
break;
case mips_fval_both:
- fprintf_unfiltered (gdb_stderr, "Return float in $fp0 and $2\n");
+ gdb_printf (gdb_stderr, "Return float in $fp0 and $2\n");
break;
}
if (fval_reg != mips_fval_gpr)
@@ -6193,8 +6207,8 @@ mips_o64_return_value (struct gdbarch *gdbarch, struct value *function,
if (offset + xfer > TYPE_LENGTH (type))
xfer = TYPE_LENGTH (type) - offset;
if (mips_debug)
- fprintf_unfiltered (gdb_stderr, "Return scalar+%d:%d in $%d\n",
- offset, xfer, regnum);
+ gdb_printf (gdb_stderr, "Return scalar+%d:%d in $%d\n",
+ offset, xfer, regnum);
mips_xfer_register (gdbarch, regcache,
gdbarch_num_regs (gdbarch) + regnum,
xfer, gdbarch_byte_order (gdbarch),
@@ -6325,10 +6339,10 @@ mips_print_fp_register (struct ui_file *file, struct frame_info *frame,
= ((gdb_byte *)
alloca (2 * register_size (gdbarch, mips_regnum (gdbarch)->fp0)));
- fprintf_filtered (file, "%s:", gdbarch_register_name (gdbarch, regnum));
- fprintf_filtered (file, "%*s",
- 4 - (int) strlen (gdbarch_register_name (gdbarch, regnum)),
- "");
+ gdb_printf (file, "%s:", gdbarch_register_name (gdbarch, regnum));
+ gdb_printf (file, "%*s",
+ 4 - (int) strlen (gdbarch_register_name (gdbarch, regnum)),
+ "");
if (register_size (gdbarch, regnum) == 4 || mips2_fp_compat (frame))
{
@@ -6344,14 +6358,14 @@ mips_print_fp_register (struct ui_file *file, struct frame_info *frame,
builtin_type (gdbarch)->builtin_uint32,
&opts, 'w', file);
- fprintf_filtered (file, " flt: %s", flt_str.c_str ());
+ gdb_printf (file, " flt: %s", flt_str.c_str ());
if ((regnum - gdbarch_num_regs (gdbarch)) % 2 == 0)
{
mips_read_fp_register_double (frame, regnum, raw_buffer);
dbl_str = target_float_to_string (raw_buffer, dbl_type, "%-24.17g");
- fprintf_filtered (file, " dbl: %s", dbl_str.c_str ());
+ gdb_printf (file, " dbl: %s", dbl_str.c_str ());
}
}
else
@@ -6370,8 +6384,8 @@ mips_print_fp_register (struct ui_file *file, struct frame_info *frame,
builtin_type (gdbarch)->builtin_uint64,
&opts, 'g', file);
- fprintf_filtered (file, " flt: %s", flt_str.c_str ());
- fprintf_filtered (file, " dbl: %s", dbl_str.c_str ());
+ gdb_printf (file, " flt: %s", flt_str.c_str ());
+ gdb_printf (file, " dbl: %s", dbl_str.c_str ());
}
}
@@ -6391,16 +6405,16 @@ mips_print_register (struct ui_file *file, struct frame_info *frame,
val = get_frame_register_value (frame, regnum);
- fputs_filtered (gdbarch_register_name (gdbarch, regnum), file);
+ gdb_puts (gdbarch_register_name (gdbarch, regnum), file);
/* The problem with printing numeric register names (r26, etc.) is that
the user can't use them on input. Probably the best solution is to
fix it so that either the numeric or the funky (a2, etc.) names
are accepted on input. */
if (regnum < MIPS_NUMREGS)
- fprintf_filtered (file, "(r%d): ", regnum);
+ gdb_printf (file, "(r%d): ", regnum);
else
- fprintf_filtered (file, ": ");
+ gdb_printf (file, ": ");
get_formatted_print_options (&opts, 'x');
value_print_scalar_formatted (val, &opts, 0, file);
@@ -6412,18 +6426,18 @@ static void
print_fpu_flags (struct ui_file *file, int flags)
{
if (flags & (1 << 0))
- fputs_filtered (" inexact", file);
+ gdb_puts (" inexact", file);
if (flags & (1 << 1))
- fputs_filtered (" uflow", file);
+ gdb_puts (" uflow", file);
if (flags & (1 << 2))
- fputs_filtered (" oflow", file);
+ gdb_puts (" oflow", file);
if (flags & (1 << 3))
- fputs_filtered (" div0", file);
+ gdb_puts (" div0", file);
if (flags & (1 << 4))
- fputs_filtered (" inval", file);
+ gdb_puts (" inval", file);
if (flags & (1 << 5))
- fputs_filtered (" unimp", file);
- fputc_filtered ('\n', file);
+ gdb_puts (" unimp", file);
+ gdb_putc ('\n', file);
}
/* Print interesting information about the floating point processor
@@ -6441,55 +6455,55 @@ mips_print_float_info (struct gdbarch *gdbarch, struct ui_file *file,
if (fcsr == -1 || !read_frame_register_unsigned (frame, fcsr, &fcs))
type = MIPS_FPU_NONE;
- fprintf_filtered (file, "fpu type: %s\n",
- type == MIPS_FPU_DOUBLE ? "double-precision"
- : type == MIPS_FPU_SINGLE ? "single-precision"
- : "none / unused");
+ gdb_printf (file, "fpu type: %s\n",
+ type == MIPS_FPU_DOUBLE ? "double-precision"
+ : type == MIPS_FPU_SINGLE ? "single-precision"
+ : "none / unused");
if (type == MIPS_FPU_NONE)
return;
- fprintf_filtered (file, "reg size: %d bits\n",
- register_size (gdbarch, mips_regnum (gdbarch)->fp0) * 8);
+ gdb_printf (file, "reg size: %d bits\n",
+ register_size (gdbarch, mips_regnum (gdbarch)->fp0) * 8);
- fputs_filtered ("cond :", file);
+ gdb_puts ("cond :", file);
if (fcs & (1 << 23))
- fputs_filtered (" 0", file);
+ gdb_puts (" 0", file);
for (i = 1; i <= 7; i++)
if (fcs & (1 << (24 + i)))
- fprintf_filtered (file, " %d", i);
- fputc_filtered ('\n', file);
+ gdb_printf (file, " %d", i);
+ gdb_putc ('\n', file);
- fputs_filtered ("cause :", file);
+ gdb_puts ("cause :", file);
print_fpu_flags (file, (fcs >> 12) & 0x3f);
fputs ("mask :", stdout);
print_fpu_flags (file, (fcs >> 7) & 0x1f);
fputs ("flags :", stdout);
print_fpu_flags (file, (fcs >> 2) & 0x1f);
- fputs_filtered ("rounding: ", file);
+ gdb_puts ("rounding: ", file);
switch (fcs & 3)
{
- case 0: fputs_filtered ("nearest\n", file); break;
- case 1: fputs_filtered ("zero\n", file); break;
- case 2: fputs_filtered ("+inf\n", file); break;
- case 3: fputs_filtered ("-inf\n", file); break;
+ case 0: gdb_puts ("nearest\n", file); break;
+ case 1: gdb_puts ("zero\n", file); break;
+ case 2: gdb_puts ("+inf\n", file); break;
+ case 3: gdb_puts ("-inf\n", file); break;
}
- fputs_filtered ("flush :", file);
+ gdb_puts ("flush :", file);
if (fcs & (1 << 21))
- fputs_filtered (" nearest", file);
+ gdb_puts (" nearest", file);
if (fcs & (1 << 22))
- fputs_filtered (" override", file);
+ gdb_puts (" override", file);
if (fcs & (1 << 24))
- fputs_filtered (" zero", file);
+ gdb_puts (" zero", file);
if ((fcs & (0xb << 21)) == 0)
- fputs_filtered (" no", file);
- fputc_filtered ('\n', file);
+ gdb_puts (" no", file);
+ gdb_putc ('\n', file);
- fprintf_filtered (file, "nan2008 : %s\n", fcs & (1 << 18) ? "yes" : "no");
- fprintf_filtered (file, "abs2008 : %s\n", fcs & (1 << 19) ? "yes" : "no");
- fputc_filtered ('\n', file);
+ gdb_printf (file, "nan2008 : %s\n", fcs & (1 << 18) ? "yes" : "no");
+ gdb_printf (file, "abs2008 : %s\n", fcs & (1 << 19) ? "yes" : "no");
+ gdb_putc ('\n', file);
default_print_float_info (gdbarch, file, frame, args);
}
@@ -6501,9 +6515,9 @@ static int
print_fp_register_row (struct ui_file *file, struct frame_info *frame,
int regnum)
{
- fprintf_filtered (file, " ");
+ gdb_printf (file, " ");
mips_print_fp_register (file, frame, regnum);
- fprintf_filtered (file, "\n");
+ gdb_printf (file, "\n");
return regnum + 1;
}
@@ -6540,14 +6554,14 @@ print_gp_register_row (struct ui_file *file, struct frame_info *frame,
/* Print this register on a row by itself. */
mips_print_register (file, frame, regnum);
- fprintf_filtered (file, "\n");
+ gdb_printf (file, "\n");
return regnum + 1;
}
if (col == 0)
- fprintf_filtered (file, " ");
- fprintf_filtered (file,
- mips_abi_regsize (gdbarch) == 8 ? "%17s" : "%9s",
- gdbarch_register_name (gdbarch, regnum));
+ gdb_printf (file, " ");
+ gdb_printf (file,
+ mips_abi_regsize (gdbarch) == 8 ? "%17s" : "%9s",
+ gdbarch_register_name (gdbarch, regnum));
col++;
}
@@ -6556,10 +6570,10 @@ print_gp_register_row (struct ui_file *file, struct frame_info *frame,
/* Print the R0 to R31 names. */
if ((start_regnum % gdbarch_num_regs (gdbarch)) < MIPS_NUMREGS)
- fprintf_filtered (file, "\n R%-4d",
- start_regnum % gdbarch_num_regs (gdbarch));
+ gdb_printf (file, "\n R%-4d",
+ start_regnum % gdbarch_num_regs (gdbarch));
else
- fprintf_filtered (file, "\n ");
+ gdb_printf (file, "\n ");
/* Now print the values in hex, 4 or 8 to the row. */
for (col = 0, regnum = start_regnum;
@@ -6578,10 +6592,10 @@ print_gp_register_row (struct ui_file *file, struct frame_info *frame,
if (value_optimized_out (value)
|| !value_entirely_available (value))
{
- fprintf_filtered (file, "%*s ",
- (int) mips_abi_regsize (gdbarch) * 2,
- (mips_abi_regsize (gdbarch) == 4 ? "<unavl>"
- : "<unavailable>"));
+ gdb_printf (file, "%*s ",
+ (int) mips_abi_regsize (gdbarch) * 2,
+ (mips_abi_regsize (gdbarch) == 4 ? "<unavl>"
+ : "<unavailable>"));
col++;
continue;
}
@@ -6590,22 +6604,22 @@ print_gp_register_row (struct ui_file *file, struct frame_info *frame,
for (byte = 0;
byte < (mips_abi_regsize (gdbarch)
- register_size (gdbarch, regnum)); byte++)
- fprintf_filtered (file, " ");
+ gdb_printf (file, " ");
/* Now print the register value in hex, endian order. */
if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
for (byte =
register_size (gdbarch, regnum) - register_size (gdbarch, regnum);
byte < register_size (gdbarch, regnum); byte++)
- fprintf_filtered (file, "%02x", raw_buffer[byte]);
+ gdb_printf (file, "%02x", raw_buffer[byte]);
else
for (byte = register_size (gdbarch, regnum) - 1;
byte >= 0; byte--)
- fprintf_filtered (file, "%02x", raw_buffer[byte]);
- fprintf_filtered (file, " ");
+ gdb_printf (file, "%02x", raw_buffer[byte]);
+ gdb_printf (file, " ");
col++;
}
if (col > 0) /* ie. if we actually printed anything... */
- fprintf_filtered (file, "\n");
+ gdb_printf (file, "\n");
return regnum;
}
@@ -6623,7 +6637,7 @@ mips_print_registers_info (struct gdbarch *gdbarch, struct ui_file *file,
error (_("Not a valid register for the current processor type"));
mips_print_register (file, frame, regnum);
- fprintf_filtered (file, "\n");
+ gdb_printf (file, "\n");
}
else
/* Do all (or most) registers. */
@@ -6916,7 +6930,7 @@ show_mipsfpu_command (const char *args, int from_tty)
if (gdbarch_bfd_arch_info (target_gdbarch ())->arch != bfd_arch_mips)
{
- printf_filtered
+ gdb_printf
("The MIPS floating-point coprocessor is unknown "
"because the current architecture is not MIPS.\n");
return;
@@ -6937,11 +6951,11 @@ show_mipsfpu_command (const char *args, int from_tty)
internal_error (__FILE__, __LINE__, _("bad switch"));
}
if (mips_fpu_type_auto)
- printf_filtered ("The MIPS floating-point coprocessor "
- "is set automatically (currently %s)\n",
- fpu);
+ gdb_printf ("The MIPS floating-point coprocessor "
+ "is set automatically (currently %s)\n",
+ fpu);
else
- printf_filtered
+ gdb_printf
("The MIPS floating-point coprocessor is assumed to be %s\n", fpu);
}
@@ -7816,17 +7830,17 @@ mips_skip_pic_trampoline_code (struct frame_info *frame, CORE_ADDR pc)
which jumps to foo. */
msym = lookup_minimal_symbol_by_pc (pc);
if (msym.minsym == NULL
- || BMSYMBOL_VALUE_ADDRESS (msym) != pc
+ || msym.value_address () != pc
|| msym.minsym->linkage_name () == NULL
|| !startswith (msym.minsym->linkage_name (), ".pic."))
return 0;
/* A two-instruction header. */
- if (MSYMBOL_SIZE (msym.minsym) == 8)
+ if (msym.minsym->size () == 8)
return pc + 8;
/* A three-instruction (plus delay slot) trampoline. */
- if (MSYMBOL_SIZE (msym.minsym) == 16)
+ if (msym.minsym->size () == 16)
{
if (target_read_memory (pc, stub_code, 16) != 0)
return 0;
@@ -8093,8 +8107,8 @@ mips_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
else
elf_flags = 0;
if (gdbarch_debug)
- fprintf_unfiltered (gdb_stdlog,
- "mips_gdbarch_init: elf_flags = 0x%08x\n", elf_flags);
+ gdb_printf (gdb_stdlog,
+ "mips_gdbarch_init: elf_flags = 0x%08x\n", elf_flags);
/* Check ELF_FLAGS to see if it specifies the ABI being used. */
switch ((elf_flags & EF_MIPS_ABI))
@@ -8169,14 +8183,14 @@ mips_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
found_abi = MIPS_ABI_N64;
if (gdbarch_debug)
- fprintf_unfiltered (gdb_stdlog, "mips_gdbarch_init: found_abi = %d\n",
- found_abi);
+ gdb_printf (gdb_stdlog, "mips_gdbarch_init: found_abi = %d\n",
+ found_abi);
/* What has the user specified from the command line? */
wanted_abi = global_mips_abi ();
if (gdbarch_debug)
- fprintf_unfiltered (gdb_stdlog, "mips_gdbarch_init: wanted_abi = %d\n",
- wanted_abi);
+ gdb_printf (gdb_stdlog, "mips_gdbarch_init: wanted_abi = %d\n",
+ wanted_abi);
/* Now that we have found what the ABI for this binary would be,
check whether the user is overriding it. */
@@ -8187,8 +8201,8 @@ mips_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
else
mips_abi = MIPS_ABI_O32;
if (gdbarch_debug)
- fprintf_unfiltered (gdb_stdlog, "mips_gdbarch_init: mips_abi = %d\n",
- mips_abi);
+ gdb_printf (gdb_stdlog, "mips_gdbarch_init: mips_abi = %d\n",
+ mips_abi);
/* Make sure we don't use a 32-bit architecture with a 64-bit ABI. */
if (mips_abi != MIPS_ABI_EABI32
@@ -8211,10 +8225,10 @@ mips_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
/* Also used when doing an architecture lookup. */
if (gdbarch_debug)
- fprintf_unfiltered (gdb_stdlog,
- "mips_gdbarch_init: "
- "mips64_transfers_32bit_regs_p = %d\n",
- mips64_transfers_32bit_regs_p);
+ gdb_printf (gdb_stdlog,
+ "mips_gdbarch_init: "
+ "mips64_transfers_32bit_regs_p = %d\n",
+ mips64_transfers_32bit_regs_p);
/* Determine the MIPS FPU type. */
#ifdef HAVE_ELF
@@ -8265,8 +8279,8 @@ mips_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
else
fpu_type = MIPS_FPU_DOUBLE;
if (gdbarch_debug)
- fprintf_unfiltered (gdb_stdlog,
- "mips_gdbarch_init: fpu_type = %d\n", fpu_type);
+ gdb_printf (gdb_stdlog,
+ "mips_gdbarch_init: fpu_type = %d\n", fpu_type);
/* Check for blatant incompatibilities. */
@@ -8841,7 +8855,7 @@ show_mips_abi (struct ui_file *file,
const char *ignored_value)
{
if (gdbarch_bfd_arch_info (target_gdbarch ())->arch != bfd_arch_mips)
- fprintf_filtered
+ gdb_printf
(file,
"The MIPS ABI is unknown because the current architecture "
"is not MIPS.\n");
@@ -8852,22 +8866,22 @@ show_mips_abi (struct ui_file *file,
const char *actual_abi_str = mips_abi_strings[actual_abi];
if (global_abi == MIPS_ABI_UNKNOWN)
- fprintf_filtered
+ gdb_printf
(file,
"The MIPS ABI is set automatically (currently \"%s\").\n",
actual_abi_str);
else if (global_abi == actual_abi)
- fprintf_filtered
+ gdb_printf
(file,
"The MIPS ABI is assumed to be \"%s\" (due to user setting).\n",
actual_abi_str);
else
{
/* Probably shouldn't happen... */
- fprintf_filtered (file,
- "The (auto detected) MIPS ABI \"%s\" is in use "
- "even though the user setting was \"%s\".\n",
- actual_abi_str, mips_abi_strings[global_abi]);
+ gdb_printf (file,
+ "The (auto detected) MIPS ABI \"%s\" is in use "
+ "even though the user setting was \"%s\".\n",
+ actual_abi_str, mips_abi_strings[global_abi]);
}
}
}
@@ -8878,8 +8892,8 @@ static void
show_mips_compression (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("The compressed ISA encoding used is %s.\n"),
- value);
+ gdb_printf (file, _("The compressed ISA encoding used is %s.\n"),
+ value);
}
/* Return a textual name for MIPS FPU type FPU_TYPE. */
@@ -8929,34 +8943,34 @@ mips_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
}
/* Determine the size of a pointer. */
ef_mips_32bitmode = (tdep->elf_flags & EF_MIPS_32BITMODE);
- fprintf_filtered (file,
- "mips_dump_tdep: tdep->elf_flags = 0x%x\n",
- tdep->elf_flags);
- fprintf_filtered (file,
- "mips_dump_tdep: ef_mips_32bitmode = %d\n",
- ef_mips_32bitmode);
- fprintf_filtered (file,
- "mips_dump_tdep: ef_mips_arch = %d\n",
- ef_mips_arch);
- fprintf_filtered (file,
- "mips_dump_tdep: tdep->mips_abi = %d (%s)\n",
- tdep->mips_abi, mips_abi_strings[tdep->mips_abi]);
- fprintf_filtered (file,
- "mips_dump_tdep: "
- "mips_mask_address_p() %d (default %d)\n",
- mips_mask_address_p (tdep),
- tdep->default_mask_address_p);
+ gdb_printf (file,
+ "mips_dump_tdep: tdep->elf_flags = 0x%x\n",
+ tdep->elf_flags);
+ gdb_printf (file,
+ "mips_dump_tdep: ef_mips_32bitmode = %d\n",
+ ef_mips_32bitmode);
+ gdb_printf (file,
+ "mips_dump_tdep: ef_mips_arch = %d\n",
+ ef_mips_arch);
+ gdb_printf (file,
+ "mips_dump_tdep: tdep->mips_abi = %d (%s)\n",
+ tdep->mips_abi, mips_abi_strings[tdep->mips_abi]);
+ gdb_printf (file,
+ "mips_dump_tdep: "
+ "mips_mask_address_p() %d (default %d)\n",
+ mips_mask_address_p (tdep),
+ tdep->default_mask_address_p);
}
- fprintf_filtered (file,
- "mips_dump_tdep: MIPS_DEFAULT_FPU_TYPE = %d (%s)\n",
- MIPS_DEFAULT_FPU_TYPE,
- mips_fpu_type_str (MIPS_DEFAULT_FPU_TYPE));
- fprintf_filtered (file, "mips_dump_tdep: MIPS_EABI = %d\n",
- mips_eabi (gdbarch));
- fprintf_filtered (file,
- "mips_dump_tdep: MIPS_FPU_TYPE = %d (%s)\n",
- mips_get_fpu_type (gdbarch),
- mips_fpu_type_str (mips_get_fpu_type (gdbarch)));
+ gdb_printf (file,
+ "mips_dump_tdep: MIPS_DEFAULT_FPU_TYPE = %d (%s)\n",
+ MIPS_DEFAULT_FPU_TYPE,
+ mips_fpu_type_str (MIPS_DEFAULT_FPU_TYPE));
+ gdb_printf (file, "mips_dump_tdep: MIPS_EABI = %d\n",
+ mips_eabi (gdbarch));
+ gdb_printf (file,
+ "mips_dump_tdep: MIPS_FPU_TYPE = %d (%s)\n",
+ mips_get_fpu_type (gdbarch),
+ mips_fpu_type_str (mips_get_fpu_type (gdbarch)));
}
void _initialize_mips_tdep ();
diff --git a/gdb/mips-tdep.h b/gdb/mips-tdep.h
index f0a74409d9b..4d2664d4273 100644
--- a/gdb/mips-tdep.h
+++ b/gdb/mips-tdep.h
@@ -50,8 +50,17 @@ enum mips_isa
};
/* Corresponding MSYMBOL_TARGET_FLAG aliases. */
-#define MSYMBOL_TARGET_FLAG_MIPS16 MSYMBOL_TARGET_FLAG_1
-#define MSYMBOL_TARGET_FLAG_MICROMIPS MSYMBOL_TARGET_FLAG_2
+#define MSYMBOL_TARGET_FLAG_MIPS16(sym) \
+ (sym)->target_flag_1 ()
+
+#define SET_MSYMBOL_TARGET_FLAG_MIPS16(sym) \
+ (sym)->set_target_flag_1 (true)
+
+#define MSYMBOL_TARGET_FLAG_MICROMIPS(sym) \
+ (sym)->target_flag_2 ()
+
+#define SET_MSYMBOL_TARGET_FLAG_MICROMIPS(sym) \
+ (sym)->set_target_flag_2 (true)
/* Return the MIPS ISA's register size. Just a short cut to the BFD
architecture's word size. */
diff --git a/gdb/mips64-obsd-tdep.c b/gdb/mips64-obsd-tdep.c
index 0e63d164e08..8fe2834f23a 100644
--- a/gdb/mips64-obsd-tdep.c
+++ b/gdb/mips64-obsd-tdep.c
@@ -29,10 +29,6 @@
#include "mips-tdep.h"
#include "solib-svr4.h"
-/* The MIPS64 Floating-Point Quad-Precision format is similar to
- big-endian IA-64 Quad-Precision format. */
-#define floatformats_mips64_quad floatformats_ia64_quad
-
#define MIPS64OBSD_NUM_REGS 73
/* Core file support. */
@@ -150,7 +146,7 @@ mips64obsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
tramp_frame_prepend_unwinder (gdbarch, &mips64obsd_sigframe);
set_gdbarch_long_double_bit (gdbarch, 128);
- set_gdbarch_long_double_format (gdbarch, floatformats_mips64_quad);
+ set_gdbarch_long_double_format (gdbarch, floatformats_ieee_quad);
obsd_init_abi(info, gdbarch);
diff --git a/gdb/mn10300-tdep.c b/gdb/mn10300-tdep.c
index 02efd84d638..7a41070bb30 100644
--- a/gdb/mn10300-tdep.c
+++ b/gdb/mn10300-tdep.c
@@ -1413,8 +1413,8 @@ static void
mn10300_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
{
mn10300_gdbarch_tdep *tdep = (mn10300_gdbarch_tdep *) gdbarch_tdep (gdbarch);
- fprintf_filtered (file, "mn10300_dump_tdep: am33_mode = %d\n",
- tdep->am33_mode);
+ gdb_printf (file, "mn10300_dump_tdep: am33_mode = %d\n",
+ tdep->am33_mode);
}
void _initialize_mn10300_tdep ();
diff --git a/gdb/moxie-tdep.c b/gdb/moxie-tdep.c
index e3507d948f8..f5cf501cea0 100644
--- a/gdb/moxie-tdep.c
+++ b/gdb/moxie-tdep.c
@@ -279,10 +279,10 @@ moxie_process_readu (CORE_ADDR addr, gdb_byte *buf,
if (target_read_memory (addr, buf, length))
{
if (record_debug)
- fprintf_unfiltered (gdb_stderr,
- _("Process record: error reading memory at "
- "addr 0x%s len = %d.\n"),
- paddress (target_gdbarch (), addr), length);
+ gdb_printf (gdb_stderr,
+ _("Process record: error reading memory at "
+ "addr 0x%s len = %d.\n"),
+ paddress (target_gdbarch (), addr), length);
return -1;
}
@@ -629,9 +629,9 @@ moxie_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
if (record_debug > 1)
- fprintf_unfiltered (gdb_stdlog, "Process record: moxie_process_record "
- "addr = 0x%s\n",
- paddress (target_gdbarch (), addr));
+ gdb_printf (gdb_stdlog, "Process record: moxie_process_record "
+ "addr = 0x%s\n",
+ paddress (target_gdbarch (), addr));
inst = (uint16_t) moxie_process_readu (addr, buf, 2, byte_order);
diff --git a/gdb/msp430-tdep.c b/gdb/msp430-tdep.c
index 86277e0b186..28268a95139 100644
--- a/gdb/msp430-tdep.c
+++ b/gdb/msp430-tdep.c
@@ -203,7 +203,7 @@ msp430_register_name (struct gdbarch *gdbarch, int regnr)
static int
msp430_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
- struct reggroup *group)
+ const struct reggroup *group)
{
if (group == all_reggroup)
return 1;
diff --git a/gdb/namespace.h b/gdb/namespace.h
index e3bac97727e..dc052a44e42 100644
--- a/gdb/namespace.h
+++ b/gdb/namespace.h
@@ -20,7 +20,7 @@
#define NAMESPACE_H
#include "gdbsupport/gdb_vecs.h"
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
/* This struct is designed to store data from using directives. It
says that names from namespace IMPORT_SRC should be visible within
diff --git a/gdb/nat/aarch64-hw-point.c b/gdb/nat/aarch64-hw-point.c
new file mode 100644
index 00000000000..f0418f7eef8
--- /dev/null
+++ b/gdb/nat/aarch64-hw-point.c
@@ -0,0 +1,624 @@
+/* Copyright (C) 2009-2022 Free Software Foundation, Inc.
+
+ This file is part of GDB.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#include "gdbsupport/common-defs.h"
+#include "gdbsupport/break-common.h"
+#include "gdbsupport/common-regcache.h"
+#include "aarch64-hw-point.h"
+
+#ifdef __linux__
+/* For kernel_supports_any_contiguous_range. */
+#include "aarch64-linux-hw-point.h"
+#else
+#define kernel_supports_any_contiguous_range true
+#endif
+
+/* Number of hardware breakpoints/watchpoints the target supports.
+ They are initialized with values obtained via ptrace. */
+
+int aarch64_num_bp_regs;
+int aarch64_num_wp_regs;
+
+/* Return starting byte 0..7 incl. of a watchpoint encoded by CTRL. */
+
+unsigned int
+aarch64_watchpoint_offset (unsigned int ctrl)
+{
+ uint8_t mask = DR_CONTROL_MASK (ctrl);
+ unsigned retval;
+
+ /* Shift out bottom zeros. */
+ for (retval = 0; mask && (mask & 1) == 0; ++retval)
+ mask >>= 1;
+
+ return retval;
+}
+
+/* Utility function that returns the length in bytes of a watchpoint
+ according to the content of a hardware debug control register CTRL.
+ Any contiguous range of bytes in CTRL is supported. The returned
+ value can be between 0..8 (inclusive). */
+
+unsigned int
+aarch64_watchpoint_length (unsigned int ctrl)
+{
+ uint8_t mask = DR_CONTROL_MASK (ctrl);
+ unsigned retval;
+
+ /* Shift out bottom zeros. */
+ mask >>= aarch64_watchpoint_offset (ctrl);
+
+ /* Count bottom ones. */
+ for (retval = 0; (mask & 1) != 0; ++retval)
+ mask >>= 1;
+
+ if (mask != 0)
+ error (_("Unexpected hardware watchpoint length register value 0x%x"),
+ DR_CONTROL_MASK (ctrl));
+
+ return retval;
+}
+
+/* Given the hardware breakpoint or watchpoint type TYPE and its
+ length LEN, return the expected encoding for a hardware
+ breakpoint/watchpoint control register. */
+
+static unsigned int
+aarch64_point_encode_ctrl_reg (enum target_hw_bp_type type, int offset, int len)
+{
+ unsigned int ctrl, ttype;
+
+ gdb_assert (offset == 0 || kernel_supports_any_contiguous_range);
+ gdb_assert (offset + len <= AARCH64_HWP_MAX_LEN_PER_REG);
+
+ /* type */
+ switch (type)
+ {
+ case hw_write:
+ ttype = 2;
+ break;
+ case hw_read:
+ ttype = 1;
+ break;
+ case hw_access:
+ ttype = 3;
+ break;
+ case hw_execute:
+ ttype = 0;
+ break;
+ default:
+ perror_with_name (_("Unrecognized breakpoint/watchpoint type"));
+ }
+
+ ctrl = ttype << 3;
+
+ /* offset and length bitmask */
+ ctrl |= ((1 << len) - 1) << (5 + offset);
+ /* enabled at el0 */
+ ctrl |= (2 << 1) | 1;
+
+ return ctrl;
+}
+
+/* Addresses to be written to the hardware breakpoint and watchpoint
+ value registers need to be aligned; the alignment is 4-byte and
+ 8-type respectively. Linux kernel rejects any non-aligned address
+ it receives from the related ptrace call. Furthermore, the kernel
+ currently only supports the following Byte Address Select (BAS)
+ values: 0x1, 0x3, 0xf and 0xff, which means that for a hardware
+ watchpoint to be accepted by the kernel (via ptrace call), its
+ valid length can only be 1 byte, 2 bytes, 4 bytes or 8 bytes.
+ Despite these limitations, the unaligned watchpoint is supported in
+ this port.
+
+ Return 0 for any non-compliant ADDR and/or LEN; return 1 otherwise. */
+
+static int
+aarch64_point_is_aligned (ptid_t ptid, int is_watchpoint, CORE_ADDR addr,
+ int len)
+{
+ unsigned int alignment = 0;
+
+ if (is_watchpoint)
+ alignment = AARCH64_HWP_ALIGNMENT;
+ else
+ {
+ struct regcache *regcache
+ = get_thread_regcache_for_ptid (ptid);
+
+ /* Set alignment to 2 only if the current process is 32-bit,
+ since thumb instruction can be 2-byte aligned. Otherwise, set
+ alignment to AARCH64_HBP_ALIGNMENT. */
+ if (regcache_register_size (regcache, 0) == 8)
+ alignment = AARCH64_HBP_ALIGNMENT;
+ else
+ alignment = 2;
+ }
+
+ if (addr & (alignment - 1))
+ return 0;
+
+ if ((!kernel_supports_any_contiguous_range
+ && len != 8 && len != 4 && len != 2 && len != 1)
+ || (kernel_supports_any_contiguous_range
+ && (len < 1 || len > 8)))
+ return 0;
+
+ return 1;
+}
+
+/* Given the (potentially unaligned) watchpoint address in ADDR and
+ length in LEN, return the aligned address, offset from that base
+ address, and aligned length in *ALIGNED_ADDR_P, *ALIGNED_OFFSET_P
+ and *ALIGNED_LEN_P, respectively. The returned values will be
+ valid values to write to the hardware watchpoint value and control
+ registers.
+
+ The given watchpoint may get truncated if more than one hardware
+ register is needed to cover the watched region. *NEXT_ADDR_P
+ and *NEXT_LEN_P, if non-NULL, will return the address and length
+ of the remaining part of the watchpoint (which can be processed
+ by calling this routine again to generate another aligned address,
+ offset and length tuple.
+
+ Essentially, unaligned watchpoint is achieved by minimally
+ enlarging the watched area to meet the alignment requirement, and
+ if necessary, splitting the watchpoint over several hardware
+ watchpoint registers.
+
+ On kernels that predate the support for Byte Address Select (BAS)
+ in the hardware watchpoint control register, the offset from the
+ base address is always zero, and so in that case the trade-off is
+ that there will be false-positive hits for the read-type or the
+ access-type hardware watchpoints; for the write type, which is more
+ commonly used, there will be no such issues, as the higher-level
+ breakpoint management in gdb always examines the exact watched
+ region for any content change, and transparently resumes a thread
+ from a watchpoint trap if there is no change to the watched region.
+
+ Another limitation is that because the watched region is enlarged,
+ the watchpoint fault address discovered by
+ aarch64_stopped_data_address may be outside of the original watched
+ region, especially when the triggering instruction is accessing a
+ larger region. When the fault address is not within any known
+ range, watchpoints_triggered in gdb will get confused, as the
+ higher-level watchpoint management is only aware of original
+ watched regions, and will think that some unknown watchpoint has
+ been triggered. To prevent such a case,
+ aarch64_stopped_data_address implementations in gdb and gdbserver
+ try to match the trapped address with a watched region, and return
+ an address within the latter. */
+
+static void
+aarch64_align_watchpoint (CORE_ADDR addr, int len, CORE_ADDR *aligned_addr_p,
+ int *aligned_offset_p, int *aligned_len_p,
+ CORE_ADDR *next_addr_p, int *next_len_p,
+ CORE_ADDR *next_addr_orig_p)
+{
+ int aligned_len;
+ unsigned int offset, aligned_offset;
+ CORE_ADDR aligned_addr;
+ const unsigned int alignment = AARCH64_HWP_ALIGNMENT;
+ const unsigned int max_wp_len = AARCH64_HWP_MAX_LEN_PER_REG;
+
+ /* As assumed by the algorithm. */
+ gdb_assert (alignment == max_wp_len);
+
+ if (len <= 0)
+ return;
+
+ /* The address put into the hardware watchpoint value register must
+ be aligned. */
+ offset = addr & (alignment - 1);
+ aligned_addr = addr - offset;
+ aligned_offset
+ = kernel_supports_any_contiguous_range ? addr & (alignment - 1) : 0;
+
+ gdb_assert (offset >= 0 && offset < alignment);
+ gdb_assert (aligned_addr >= 0 && aligned_addr <= addr);
+ gdb_assert (offset + len > 0);
+
+ if (offset + len >= max_wp_len)
+ {
+ /* Need more than one watchpoint register; truncate at the
+ alignment boundary. */
+ aligned_len
+ = max_wp_len - (kernel_supports_any_contiguous_range ? offset : 0);
+ len -= (max_wp_len - offset);
+ addr += (max_wp_len - offset);
+ gdb_assert ((addr & (alignment - 1)) == 0);
+ }
+ else
+ {
+ /* Find the smallest valid length that is large enough to
+ accommodate this watchpoint. */
+ static const unsigned char
+ aligned_len_array[AARCH64_HWP_MAX_LEN_PER_REG] =
+ { 1, 2, 4, 4, 8, 8, 8, 8 };
+
+ aligned_len = (kernel_supports_any_contiguous_range
+ ? len : aligned_len_array[offset + len - 1]);
+ addr += len;
+ len = 0;
+ }
+
+ if (aligned_addr_p)
+ *aligned_addr_p = aligned_addr;
+ if (aligned_offset_p)
+ *aligned_offset_p = aligned_offset;
+ if (aligned_len_p)
+ *aligned_len_p = aligned_len;
+ if (next_addr_p)
+ *next_addr_p = addr;
+ if (next_len_p)
+ *next_len_p = len;
+ if (next_addr_orig_p)
+ *next_addr_orig_p = align_down (*next_addr_orig_p + alignment, alignment);
+}
+
+/* Record the insertion of one breakpoint/watchpoint, as represented
+ by ADDR and CTRL, in the process' arch-specific data area *STATE. */
+
+static int
+aarch64_dr_state_insert_one_point (ptid_t ptid,
+ struct aarch64_debug_reg_state *state,
+ enum target_hw_bp_type type,
+ CORE_ADDR addr, int offset, int len,
+ CORE_ADDR addr_orig)
+{
+ int i, idx, num_regs, is_watchpoint;
+ unsigned int ctrl, *dr_ctrl_p, *dr_ref_count;
+ CORE_ADDR *dr_addr_p, *dr_addr_orig_p;
+
+ /* Set up state pointers. */
+ is_watchpoint = (type != hw_execute);
+ gdb_assert (aarch64_point_is_aligned (ptid, is_watchpoint, addr, len));
+ if (is_watchpoint)
+ {
+ num_regs = aarch64_num_wp_regs;
+ dr_addr_p = state->dr_addr_wp;
+ dr_addr_orig_p = state->dr_addr_orig_wp;
+ dr_ctrl_p = state->dr_ctrl_wp;
+ dr_ref_count = state->dr_ref_count_wp;
+ }
+ else
+ {
+ num_regs = aarch64_num_bp_regs;
+ dr_addr_p = state->dr_addr_bp;
+ dr_addr_orig_p = nullptr;
+ dr_ctrl_p = state->dr_ctrl_bp;
+ dr_ref_count = state->dr_ref_count_bp;
+ }
+
+ ctrl = aarch64_point_encode_ctrl_reg (type, offset, len);
+
+ /* Find an existing or free register in our cache. */
+ idx = -1;
+ for (i = 0; i < num_regs; ++i)
+ {
+ if ((dr_ctrl_p[i] & 1) == 0)
+ {
+ gdb_assert (dr_ref_count[i] == 0);
+ idx = i;
+ /* no break; continue hunting for an exising one. */
+ }
+ else if (dr_addr_p[i] == addr
+ && (dr_addr_orig_p == nullptr || dr_addr_orig_p[i] == addr_orig)
+ && dr_ctrl_p[i] == ctrl)
+ {
+ gdb_assert (dr_ref_count[i] != 0);
+ idx = i;
+ break;
+ }
+ }
+
+ /* No space. */
+ if (idx == -1)
+ return -1;
+
+ /* Update our cache. */
+ if ((dr_ctrl_p[idx] & 1) == 0)
+ {
+ /* new entry */
+ dr_addr_p[idx] = addr;
+ if (dr_addr_orig_p != nullptr)
+ dr_addr_orig_p[idx] = addr_orig;
+ dr_ctrl_p[idx] = ctrl;
+ dr_ref_count[idx] = 1;
+ /* Notify the change. */
+ aarch64_notify_debug_reg_change (ptid, is_watchpoint, idx);
+ }
+ else
+ {
+ /* existing entry */
+ dr_ref_count[idx]++;
+ }
+
+ return 0;
+}
+
+/* Record the removal of one breakpoint/watchpoint, as represented by
+ ADDR and CTRL, in the process' arch-specific data area *STATE. */
+
+static int
+aarch64_dr_state_remove_one_point (ptid_t ptid,
+ struct aarch64_debug_reg_state *state,
+ enum target_hw_bp_type type,
+ CORE_ADDR addr, int offset, int len,
+ CORE_ADDR addr_orig)
+{
+ int i, num_regs, is_watchpoint;
+ unsigned int ctrl, *dr_ctrl_p, *dr_ref_count;
+ CORE_ADDR *dr_addr_p, *dr_addr_orig_p;
+
+ /* Set up state pointers. */
+ is_watchpoint = (type != hw_execute);
+ if (is_watchpoint)
+ {
+ num_regs = aarch64_num_wp_regs;
+ dr_addr_p = state->dr_addr_wp;
+ dr_addr_orig_p = state->dr_addr_orig_wp;
+ dr_ctrl_p = state->dr_ctrl_wp;
+ dr_ref_count = state->dr_ref_count_wp;
+ }
+ else
+ {
+ num_regs = aarch64_num_bp_regs;
+ dr_addr_p = state->dr_addr_bp;
+ dr_addr_orig_p = nullptr;
+ dr_ctrl_p = state->dr_ctrl_bp;
+ dr_ref_count = state->dr_ref_count_bp;
+ }
+
+ ctrl = aarch64_point_encode_ctrl_reg (type, offset, len);
+
+ /* Find the entry that matches the ADDR and CTRL. */
+ for (i = 0; i < num_regs; ++i)
+ if (dr_addr_p[i] == addr
+ && (dr_addr_orig_p == nullptr || dr_addr_orig_p[i] == addr_orig)
+ && dr_ctrl_p[i] == ctrl)
+ {
+ gdb_assert (dr_ref_count[i] != 0);
+ break;
+ }
+
+ /* Not found. */
+ if (i == num_regs)
+ return -1;
+
+ /* Clear our cache. */
+ if (--dr_ref_count[i] == 0)
+ {
+ /* Clear the enable bit. */
+ ctrl &= ~1;
+ dr_addr_p[i] = 0;
+ if (dr_addr_orig_p != nullptr)
+ dr_addr_orig_p[i] = 0;
+ dr_ctrl_p[i] = ctrl;
+ /* Notify the change. */
+ aarch64_notify_debug_reg_change (ptid, is_watchpoint, i);
+ }
+
+ return 0;
+}
+
+int
+aarch64_handle_breakpoint (enum target_hw_bp_type type, CORE_ADDR addr,
+ int len, int is_insert, ptid_t ptid,
+ struct aarch64_debug_reg_state *state)
+{
+ if (is_insert)
+ {
+ /* The hardware breakpoint on AArch64 should always be 4-byte
+ aligned, but on AArch32, it can be 2-byte aligned. Note that
+ we only check the alignment on inserting breakpoint because
+ aarch64_point_is_aligned needs the inferior_ptid inferior's
+ regcache to decide whether the inferior is 32-bit or 64-bit.
+ However when GDB follows the parent process and detach breakpoints
+ from child process, inferior_ptid is the child ptid, but the
+ child inferior doesn't exist in GDB's view yet. */
+ if (!aarch64_point_is_aligned (ptid, 0 /* is_watchpoint */ , addr, len))
+ return -1;
+
+ return aarch64_dr_state_insert_one_point (ptid, state, type, addr, 0, len,
+ -1);
+ }
+ else
+ return aarch64_dr_state_remove_one_point (ptid, state, type, addr, 0, len,
+ -1);
+}
+
+/* This is essentially the same as aarch64_handle_breakpoint, apart
+ from that it is an aligned watchpoint to be handled. */
+
+static int
+aarch64_handle_aligned_watchpoint (enum target_hw_bp_type type,
+ CORE_ADDR addr, int len, int is_insert,
+ ptid_t ptid,
+ struct aarch64_debug_reg_state *state)
+{
+ if (is_insert)
+ return aarch64_dr_state_insert_one_point (ptid, state, type, addr, 0, len,
+ addr);
+ else
+ return aarch64_dr_state_remove_one_point (ptid, state, type, addr, 0, len,
+ addr);
+}
+
+/* Insert/remove unaligned watchpoint by calling
+ aarch64_align_watchpoint repeatedly until the whole watched region,
+ as represented by ADDR and LEN, has been properly aligned and ready
+ to be written to one or more hardware watchpoint registers.
+ IS_INSERT indicates whether this is an insertion or a deletion.
+ Return 0 if succeed. */
+
+static int
+aarch64_handle_unaligned_watchpoint (enum target_hw_bp_type type,
+ CORE_ADDR addr, int len, int is_insert,
+ ptid_t ptid,
+ struct aarch64_debug_reg_state *state)
+{
+ CORE_ADDR addr_orig = addr;
+
+ while (len > 0)
+ {
+ CORE_ADDR aligned_addr;
+ int aligned_offset, aligned_len, ret;
+ CORE_ADDR addr_orig_next = addr_orig;
+
+ aarch64_align_watchpoint (addr, len, &aligned_addr, &aligned_offset,
+ &aligned_len, &addr, &len, &addr_orig_next);
+
+ if (is_insert)
+ ret = aarch64_dr_state_insert_one_point (ptid, state, type,
+ aligned_addr, aligned_offset,
+ aligned_len, addr_orig);
+ else
+ ret = aarch64_dr_state_remove_one_point (ptid, state, type,
+ aligned_addr, aligned_offset,
+ aligned_len, addr_orig);
+
+ if (show_debug_regs)
+ debug_printf ("handle_unaligned_watchpoint: is_insert: %d\n"
+ " "
+ "aligned_addr: %s, aligned_len: %d\n"
+ " "
+ "addr_orig: %s\n"
+ " "
+ "next_addr: %s, next_len: %d\n"
+ " "
+ "addr_orig_next: %s\n",
+ is_insert, core_addr_to_string_nz (aligned_addr),
+ aligned_len, core_addr_to_string_nz (addr_orig),
+ core_addr_to_string_nz (addr), len,
+ core_addr_to_string_nz (addr_orig_next));
+
+ addr_orig = addr_orig_next;
+
+ if (ret != 0)
+ return ret;
+ }
+
+ return 0;
+}
+
+int
+aarch64_handle_watchpoint (enum target_hw_bp_type type, CORE_ADDR addr,
+ int len, int is_insert, ptid_t ptid,
+ struct aarch64_debug_reg_state *state)
+{
+ if (aarch64_point_is_aligned (ptid, 1 /* is_watchpoint */ , addr, len))
+ return aarch64_handle_aligned_watchpoint (type, addr, len, is_insert, ptid,
+ state);
+ else
+ return aarch64_handle_unaligned_watchpoint (type, addr, len, is_insert,
+ ptid, state);
+}
+
+/* See nat/aarch64-hw-point.h. */
+
+bool
+aarch64_any_set_debug_regs_state (aarch64_debug_reg_state *state,
+ bool watchpoint)
+{
+ int count = watchpoint ? aarch64_num_wp_regs : aarch64_num_bp_regs;
+ if (count == 0)
+ return false;
+
+ const CORE_ADDR *addr = watchpoint ? state->dr_addr_wp : state->dr_addr_bp;
+ const unsigned int *ctrl = watchpoint ? state->dr_ctrl_wp : state->dr_ctrl_bp;
+
+ for (int i = 0; i < count; i++)
+ if (addr[i] != 0 || ctrl[i] != 0)
+ return true;
+
+ return false;
+}
+
+/* Print the values of the cached breakpoint/watchpoint registers. */
+
+void
+aarch64_show_debug_reg_state (struct aarch64_debug_reg_state *state,
+ const char *func, CORE_ADDR addr,
+ int len, enum target_hw_bp_type type)
+{
+ int i;
+
+ debug_printf ("%s", func);
+ if (addr || len)
+ debug_printf (" (addr=0x%08lx, len=%d, type=%s)",
+ (unsigned long) addr, len,
+ type == hw_write ? "hw-write-watchpoint"
+ : (type == hw_read ? "hw-read-watchpoint"
+ : (type == hw_access ? "hw-access-watchpoint"
+ : (type == hw_execute ? "hw-breakpoint"
+ : "??unknown??"))));
+ debug_printf (":\n");
+
+ debug_printf ("\tBREAKPOINTs:\n");
+ for (i = 0; i < aarch64_num_bp_regs; i++)
+ debug_printf ("\tBP%d: addr=%s, ctrl=0x%08x, ref.count=%d\n",
+ i, core_addr_to_string_nz (state->dr_addr_bp[i]),
+ state->dr_ctrl_bp[i], state->dr_ref_count_bp[i]);
+
+ debug_printf ("\tWATCHPOINTs:\n");
+ for (i = 0; i < aarch64_num_wp_regs; i++)
+ debug_printf ("\tWP%d: addr=%s (orig=%s), ctrl=0x%08x, ref.count=%d\n",
+ i, core_addr_to_string_nz (state->dr_addr_wp[i]),
+ core_addr_to_string_nz (state->dr_addr_orig_wp[i]),
+ state->dr_ctrl_wp[i], state->dr_ref_count_wp[i]);
+}
+
+/* Return true if we can watch a memory region that starts address
+ ADDR and whose length is LEN in bytes. */
+
+int
+aarch64_region_ok_for_watchpoint (CORE_ADDR addr, int len)
+{
+ CORE_ADDR aligned_addr;
+
+ /* Can not set watchpoints for zero or negative lengths. */
+ if (len <= 0)
+ return 0;
+
+ /* Must have hardware watchpoint debug register(s). */
+ if (aarch64_num_wp_regs == 0)
+ return 0;
+
+ /* We support unaligned watchpoint address and arbitrary length,
+ as long as the size of the whole watched area after alignment
+ doesn't exceed size of the total area that all watchpoint debug
+ registers can watch cooperatively.
+
+ This is a very relaxed rule, but unfortunately there are
+ limitations, e.g. false-positive hits, due to limited support of
+ hardware debug registers in the kernel. See comment above
+ aarch64_align_watchpoint for more information. */
+
+ aligned_addr = addr & ~(AARCH64_HWP_MAX_LEN_PER_REG - 1);
+ if (aligned_addr + aarch64_num_wp_regs * AARCH64_HWP_MAX_LEN_PER_REG
+ < addr + len)
+ return 0;
+
+ /* All tests passed so we are likely to be able to set the watchpoint.
+ The reason that it is 'likely' rather than 'must' is because
+ we don't check the current usage of the watchpoint registers, and
+ there may not be enough registers available for this watchpoint.
+ Ideally we should check the cached debug register state, however
+ the checking is costly. */
+ return 1;
+}
diff --git a/gdb/nat/aarch64-hw-point.h b/gdb/nat/aarch64-hw-point.h
new file mode 100644
index 00000000000..97b37d537c2
--- /dev/null
+++ b/gdb/nat/aarch64-hw-point.h
@@ -0,0 +1,126 @@
+/* Copyright (C) 2009-2022 Free Software Foundation, Inc.
+
+ This file is part of GDB.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#ifndef NAT_AARCH64_HW_POINT_H
+#define NAT_AARCH64_HW_POINT_H
+
+/* Macro definitions, data structures, and code for the hardware
+ breakpoint and hardware watchpoint support follow. We use the
+ following abbreviations throughout the code:
+
+ hw - hardware
+ bp - breakpoint
+ wp - watchpoint */
+
+/* Maximum number of hardware breakpoint and watchpoint registers.
+ Neither of these values may exceed the width of dr_changed_t
+ measured in bits. */
+
+#define AARCH64_HBP_MAX_NUM 16
+#define AARCH64_HWP_MAX_NUM 16
+
+/* Alignment requirement in bytes for addresses written to
+ hardware breakpoint and watchpoint value registers.
+
+ A ptrace call attempting to set an address that does not meet the
+ alignment criteria will fail. Limited support has been provided in
+ this port for unaligned watchpoints, such that from a GDB user
+ perspective, an unaligned watchpoint may be requested.
+
+ This is achieved by minimally enlarging the watched area to meet the
+ alignment requirement, and if necessary, splitting the watchpoint
+ over several hardware watchpoint registers. */
+
+#define AARCH64_HBP_ALIGNMENT 4
+#define AARCH64_HWP_ALIGNMENT 8
+
+/* The maximum length of a memory region that can be watched by one
+ hardware watchpoint register. */
+
+#define AARCH64_HWP_MAX_LEN_PER_REG 8
+
+/* Macro for the expected version of the ARMv8-A debug architecture. */
+#define AARCH64_DEBUG_ARCH_V8 0x6
+#define AARCH64_DEBUG_ARCH_V8_1 0x7
+#define AARCH64_DEBUG_ARCH_V8_2 0x8
+#define AARCH64_DEBUG_ARCH_V8_4 0x9
+
+/* ptrace expects control registers to be formatted as follows:
+
+ 31 13 5 3 1 0
+ +--------------------------------+----------+------+------+----+
+ | RESERVED (SBZ) | MASK | TYPE | PRIV | EN |
+ +--------------------------------+----------+------+------+----+
+
+ The TYPE field is ignored for breakpoints. */
+
+#define DR_CONTROL_ENABLED(ctrl) (((ctrl) & 0x1) == 1)
+#define DR_CONTROL_MASK(ctrl) (((ctrl) >> 5) & 0xff)
+
+/* Structure for managing the hardware breakpoint/watchpoint resources.
+ DR_ADDR_* stores the address, DR_CTRL_* stores the control register
+ content, and DR_REF_COUNT_* counts the numbers of references to the
+ corresponding bp/wp, by which way the limited hardware resources
+ are not wasted on duplicated bp/wp settings (though so far gdb has
+ done a good job by not sending duplicated bp/wp requests). */
+
+struct aarch64_debug_reg_state
+{
+ /* hardware breakpoint */
+ CORE_ADDR dr_addr_bp[AARCH64_HBP_MAX_NUM];
+ unsigned int dr_ctrl_bp[AARCH64_HBP_MAX_NUM];
+ unsigned int dr_ref_count_bp[AARCH64_HBP_MAX_NUM];
+
+ /* hardware watchpoint */
+ /* Address aligned down to AARCH64_HWP_ALIGNMENT. */
+ CORE_ADDR dr_addr_wp[AARCH64_HWP_MAX_NUM];
+ /* Address as entered by user without any forced alignment. */
+ CORE_ADDR dr_addr_orig_wp[AARCH64_HWP_MAX_NUM];
+ unsigned int dr_ctrl_wp[AARCH64_HWP_MAX_NUM];
+ unsigned int dr_ref_count_wp[AARCH64_HWP_MAX_NUM];
+};
+
+extern int aarch64_num_bp_regs;
+extern int aarch64_num_wp_regs;
+
+/* Invoked when IDXth breakpoint/watchpoint register pair needs to be
+ updated. */
+void aarch64_notify_debug_reg_change (ptid_t ptid, int is_watchpoint,
+ unsigned int idx);
+
+unsigned int aarch64_watchpoint_offset (unsigned int ctrl);
+unsigned int aarch64_watchpoint_length (unsigned int ctrl);
+
+int aarch64_handle_breakpoint (enum target_hw_bp_type type, CORE_ADDR addr,
+ int len, int is_insert, ptid_t ptid,
+ struct aarch64_debug_reg_state *state);
+int aarch64_handle_watchpoint (enum target_hw_bp_type type, CORE_ADDR addr,
+ int len, int is_insert, ptid_t ptid,
+ struct aarch64_debug_reg_state *state);
+
+/* Return TRUE if there are any hardware breakpoints. If WATCHPOINT is TRUE,
+ check hardware watchpoints instead. */
+bool aarch64_any_set_debug_regs_state (aarch64_debug_reg_state *state,
+ bool watchpoint);
+
+void aarch64_show_debug_reg_state (struct aarch64_debug_reg_state *state,
+ const char *func, CORE_ADDR addr,
+ int len, enum target_hw_bp_type type);
+
+int aarch64_region_ok_for_watchpoint (CORE_ADDR addr, int len);
+
+#endif /* NAT_AARCH64_HW_POINT_H */
diff --git a/gdb/nat/aarch64-linux-hw-point.c b/gdb/nat/aarch64-linux-hw-point.c
index f5dd3b2be2c..a6d91a367b7 100644
--- a/gdb/nat/aarch64-linux-hw-point.c
+++ b/gdb/nat/aarch64-linux-hw-point.c
@@ -34,256 +34,9 @@
#include <elf.h>
-/* Number of hardware breakpoints/watchpoints the target supports.
- They are initialized with values obtained via the ptrace calls
- with NT_ARM_HW_BREAK and NT_ARM_HW_WATCH respectively. */
+/* See aarch64-linux-hw-point.h */
-int aarch64_num_bp_regs;
-int aarch64_num_wp_regs;
-
-/* True if this kernel does not have the bug described by PR
- external/20207 (Linux >= 4.10). A fixed kernel supports any
- contiguous range of bits in 8-bit byte DR_CONTROL_MASK. A buggy
- kernel supports only 0x01, 0x03, 0x0f and 0xff. We start by
- assuming the bug is fixed, and then detect the bug at
- PTRACE_SETREGSET time. */
-static bool kernel_supports_any_contiguous_range = true;
-
-/* Return starting byte 0..7 incl. of a watchpoint encoded by CTRL. */
-
-unsigned int
-aarch64_watchpoint_offset (unsigned int ctrl)
-{
- uint8_t mask = DR_CONTROL_MASK (ctrl);
- unsigned retval;
-
- /* Shift out bottom zeros. */
- for (retval = 0; mask && (mask & 1) == 0; ++retval)
- mask >>= 1;
-
- return retval;
-}
-
-/* Utility function that returns the length in bytes of a watchpoint
- according to the content of a hardware debug control register CTRL.
- Any contiguous range of bytes in CTRL is supported. The returned
- value can be between 0..8 (inclusive). */
-
-unsigned int
-aarch64_watchpoint_length (unsigned int ctrl)
-{
- uint8_t mask = DR_CONTROL_MASK (ctrl);
- unsigned retval;
-
- /* Shift out bottom zeros. */
- mask >>= aarch64_watchpoint_offset (ctrl);
-
- /* Count bottom ones. */
- for (retval = 0; (mask & 1) != 0; ++retval)
- mask >>= 1;
-
- if (mask != 0)
- error (_("Unexpected hardware watchpoint length register value 0x%x"),
- DR_CONTROL_MASK (ctrl));
-
- return retval;
-}
-
-/* Given the hardware breakpoint or watchpoint type TYPE and its
- length LEN, return the expected encoding for a hardware
- breakpoint/watchpoint control register. */
-
-static unsigned int
-aarch64_point_encode_ctrl_reg (enum target_hw_bp_type type, int offset, int len)
-{
- unsigned int ctrl, ttype;
-
- gdb_assert (offset == 0 || kernel_supports_any_contiguous_range);
- gdb_assert (offset + len <= AARCH64_HWP_MAX_LEN_PER_REG);
-
- /* type */
- switch (type)
- {
- case hw_write:
- ttype = 2;
- break;
- case hw_read:
- ttype = 1;
- break;
- case hw_access:
- ttype = 3;
- break;
- case hw_execute:
- ttype = 0;
- break;
- default:
- perror_with_name (_("Unrecognized breakpoint/watchpoint type"));
- }
-
- ctrl = ttype << 3;
-
- /* offset and length bitmask */
- ctrl |= ((1 << len) - 1) << (5 + offset);
- /* enabled at el0 */
- ctrl |= (2 << 1) | 1;
-
- return ctrl;
-}
-
-/* Addresses to be written to the hardware breakpoint and watchpoint
- value registers need to be aligned; the alignment is 4-byte and
- 8-type respectively. Linux kernel rejects any non-aligned address
- it receives from the related ptrace call. Furthermore, the kernel
- currently only supports the following Byte Address Select (BAS)
- values: 0x1, 0x3, 0xf and 0xff, which means that for a hardware
- watchpoint to be accepted by the kernel (via ptrace call), its
- valid length can only be 1 byte, 2 bytes, 4 bytes or 8 bytes.
- Despite these limitations, the unaligned watchpoint is supported in
- this port.
-
- Return 0 for any non-compliant ADDR and/or LEN; return 1 otherwise. */
-
-static int
-aarch64_point_is_aligned (int is_watchpoint, CORE_ADDR addr, int len)
-{
- unsigned int alignment = 0;
-
- if (is_watchpoint)
- alignment = AARCH64_HWP_ALIGNMENT;
- else
- {
- struct regcache *regcache
- = get_thread_regcache_for_ptid (current_lwp_ptid ());
-
- /* Set alignment to 2 only if the current process is 32-bit,
- since thumb instruction can be 2-byte aligned. Otherwise, set
- alignment to AARCH64_HBP_ALIGNMENT. */
- if (regcache_register_size (regcache, 0) == 8)
- alignment = AARCH64_HBP_ALIGNMENT;
- else
- alignment = 2;
- }
-
- if (addr & (alignment - 1))
- return 0;
-
- if ((!kernel_supports_any_contiguous_range
- && len != 8 && len != 4 && len != 2 && len != 1)
- || (kernel_supports_any_contiguous_range
- && (len < 1 || len > 8)))
- return 0;
-
- return 1;
-}
-
-/* Given the (potentially unaligned) watchpoint address in ADDR and
- length in LEN, return the aligned address, offset from that base
- address, and aligned length in *ALIGNED_ADDR_P, *ALIGNED_OFFSET_P
- and *ALIGNED_LEN_P, respectively. The returned values will be
- valid values to write to the hardware watchpoint value and control
- registers.
-
- The given watchpoint may get truncated if more than one hardware
- register is needed to cover the watched region. *NEXT_ADDR_P
- and *NEXT_LEN_P, if non-NULL, will return the address and length
- of the remaining part of the watchpoint (which can be processed
- by calling this routine again to generate another aligned address,
- offset and length tuple.
-
- Essentially, unaligned watchpoint is achieved by minimally
- enlarging the watched area to meet the alignment requirement, and
- if necessary, splitting the watchpoint over several hardware
- watchpoint registers.
-
- On kernels that predate the support for Byte Address Select (BAS)
- in the hardware watchpoint control register, the offset from the
- base address is always zero, and so in that case the trade-off is
- that there will be false-positive hits for the read-type or the
- access-type hardware watchpoints; for the write type, which is more
- commonly used, there will be no such issues, as the higher-level
- breakpoint management in gdb always examines the exact watched
- region for any content change, and transparently resumes a thread
- from a watchpoint trap if there is no change to the watched region.
-
- Another limitation is that because the watched region is enlarged,
- the watchpoint fault address discovered by
- aarch64_stopped_data_address may be outside of the original watched
- region, especially when the triggering instruction is accessing a
- larger region. When the fault address is not within any known
- range, watchpoints_triggered in gdb will get confused, as the
- higher-level watchpoint management is only aware of original
- watched regions, and will think that some unknown watchpoint has
- been triggered. To prevent such a case,
- aarch64_stopped_data_address implementations in gdb and gdbserver
- try to match the trapped address with a watched region, and return
- an address within the latter. */
-
-static void
-aarch64_align_watchpoint (CORE_ADDR addr, int len, CORE_ADDR *aligned_addr_p,
- int *aligned_offset_p, int *aligned_len_p,
- CORE_ADDR *next_addr_p, int *next_len_p,
- CORE_ADDR *next_addr_orig_p)
-{
- int aligned_len;
- unsigned int offset, aligned_offset;
- CORE_ADDR aligned_addr;
- const unsigned int alignment = AARCH64_HWP_ALIGNMENT;
- const unsigned int max_wp_len = AARCH64_HWP_MAX_LEN_PER_REG;
-
- /* As assumed by the algorithm. */
- gdb_assert (alignment == max_wp_len);
-
- if (len <= 0)
- return;
-
- /* The address put into the hardware watchpoint value register must
- be aligned. */
- offset = addr & (alignment - 1);
- aligned_addr = addr - offset;
- aligned_offset
- = kernel_supports_any_contiguous_range ? addr & (alignment - 1) : 0;
-
- gdb_assert (offset >= 0 && offset < alignment);
- gdb_assert (aligned_addr >= 0 && aligned_addr <= addr);
- gdb_assert (offset + len > 0);
-
- if (offset + len >= max_wp_len)
- {
- /* Need more than one watchpoint register; truncate at the
- alignment boundary. */
- aligned_len
- = max_wp_len - (kernel_supports_any_contiguous_range ? offset : 0);
- len -= (max_wp_len - offset);
- addr += (max_wp_len - offset);
- gdb_assert ((addr & (alignment - 1)) == 0);
- }
- else
- {
- /* Find the smallest valid length that is large enough to
- accommodate this watchpoint. */
- static const unsigned char
- aligned_len_array[AARCH64_HWP_MAX_LEN_PER_REG] =
- { 1, 2, 4, 4, 8, 8, 8, 8 };
-
- aligned_len = (kernel_supports_any_contiguous_range
- ? len : aligned_len_array[offset + len - 1]);
- addr += len;
- len = 0;
- }
-
- if (aligned_addr_p)
- *aligned_addr_p = aligned_addr;
- if (aligned_offset_p)
- *aligned_offset_p = aligned_offset;
- if (aligned_len_p)
- *aligned_len_p = aligned_len;
- if (next_addr_p)
- *next_addr_p = addr;
- if (next_len_p)
- *next_len_p = len;
- if (next_addr_orig_p)
- *next_addr_orig_p = align_down (*next_addr_orig_p + alignment, alignment);
-}
+bool kernel_supports_any_contiguous_range = true;
/* Helper for aarch64_notify_debug_reg_change. Records the
information about the change of one hardware breakpoint/watchpoint
@@ -349,11 +102,11 @@ debug_reg_change_callback (struct lwp_info *lwp, int is_watchpoint,
thread's arch-specific data area, the actual updating will be done
when the thread is resumed. */
-static void
-aarch64_notify_debug_reg_change (const struct aarch64_debug_reg_state *state,
+void
+aarch64_notify_debug_reg_change (ptid_t ptid,
int is_watchpoint, unsigned int idx)
{
- ptid_t pid_ptid = ptid_t (current_lwp_ptid ().pid ());
+ ptid_t pid_ptid = ptid_t (ptid.pid ());
iterate_over_lwps (pid_ptid, [=] (struct lwp_info *info)
{
@@ -414,259 +167,9 @@ aarch64_downgrade_regs (struct aarch64_debug_reg_state *state)
break;
}
- aarch64_notify_debug_reg_change (state, 1 /* is_watchpoint */, i);
- }
-}
-
-/* Record the insertion of one breakpoint/watchpoint, as represented
- by ADDR and CTRL, in the process' arch-specific data area *STATE. */
-
-static int
-aarch64_dr_state_insert_one_point (struct aarch64_debug_reg_state *state,
- enum target_hw_bp_type type,
- CORE_ADDR addr, int offset, int len,
- CORE_ADDR addr_orig)
-{
- int i, idx, num_regs, is_watchpoint;
- unsigned int ctrl, *dr_ctrl_p, *dr_ref_count;
- CORE_ADDR *dr_addr_p, *dr_addr_orig_p;
-
- /* Set up state pointers. */
- is_watchpoint = (type != hw_execute);
- gdb_assert (aarch64_point_is_aligned (is_watchpoint, addr, len));
- if (is_watchpoint)
- {
- num_regs = aarch64_num_wp_regs;
- dr_addr_p = state->dr_addr_wp;
- dr_addr_orig_p = state->dr_addr_orig_wp;
- dr_ctrl_p = state->dr_ctrl_wp;
- dr_ref_count = state->dr_ref_count_wp;
- }
- else
- {
- num_regs = aarch64_num_bp_regs;
- dr_addr_p = state->dr_addr_bp;
- dr_addr_orig_p = nullptr;
- dr_ctrl_p = state->dr_ctrl_bp;
- dr_ref_count = state->dr_ref_count_bp;
- }
-
- ctrl = aarch64_point_encode_ctrl_reg (type, offset, len);
-
- /* Find an existing or free register in our cache. */
- idx = -1;
- for (i = 0; i < num_regs; ++i)
- {
- if ((dr_ctrl_p[i] & 1) == 0)
- {
- gdb_assert (dr_ref_count[i] == 0);
- idx = i;
- /* no break; continue hunting for an exising one. */
- }
- else if (dr_addr_p[i] == addr
- && (dr_addr_orig_p == nullptr || dr_addr_orig_p[i] == addr_orig)
- && dr_ctrl_p[i] == ctrl)
- {
- gdb_assert (dr_ref_count[i] != 0);
- idx = i;
- break;
- }
- }
-
- /* No space. */
- if (idx == -1)
- return -1;
-
- /* Update our cache. */
- if ((dr_ctrl_p[idx] & 1) == 0)
- {
- /* new entry */
- dr_addr_p[idx] = addr;
- if (dr_addr_orig_p != nullptr)
- dr_addr_orig_p[idx] = addr_orig;
- dr_ctrl_p[idx] = ctrl;
- dr_ref_count[idx] = 1;
- /* Notify the change. */
- aarch64_notify_debug_reg_change (state, is_watchpoint, idx);
- }
- else
- {
- /* existing entry */
- dr_ref_count[idx]++;
- }
-
- return 0;
-}
-
-/* Record the removal of one breakpoint/watchpoint, as represented by
- ADDR and CTRL, in the process' arch-specific data area *STATE. */
-
-static int
-aarch64_dr_state_remove_one_point (struct aarch64_debug_reg_state *state,
- enum target_hw_bp_type type,
- CORE_ADDR addr, int offset, int len,
- CORE_ADDR addr_orig)
-{
- int i, num_regs, is_watchpoint;
- unsigned int ctrl, *dr_ctrl_p, *dr_ref_count;
- CORE_ADDR *dr_addr_p, *dr_addr_orig_p;
-
- /* Set up state pointers. */
- is_watchpoint = (type != hw_execute);
- if (is_watchpoint)
- {
- num_regs = aarch64_num_wp_regs;
- dr_addr_p = state->dr_addr_wp;
- dr_addr_orig_p = state->dr_addr_orig_wp;
- dr_ctrl_p = state->dr_ctrl_wp;
- dr_ref_count = state->dr_ref_count_wp;
- }
- else
- {
- num_regs = aarch64_num_bp_regs;
- dr_addr_p = state->dr_addr_bp;
- dr_addr_orig_p = nullptr;
- dr_ctrl_p = state->dr_ctrl_bp;
- dr_ref_count = state->dr_ref_count_bp;
- }
-
- ctrl = aarch64_point_encode_ctrl_reg (type, offset, len);
-
- /* Find the entry that matches the ADDR and CTRL. */
- for (i = 0; i < num_regs; ++i)
- if (dr_addr_p[i] == addr
- && (dr_addr_orig_p == nullptr || dr_addr_orig_p[i] == addr_orig)
- && dr_ctrl_p[i] == ctrl)
- {
- gdb_assert (dr_ref_count[i] != 0);
- break;
+ aarch64_notify_debug_reg_change (current_lwp_ptid (),
+ 1 /* is_watchpoint */, i);
}
-
- /* Not found. */
- if (i == num_regs)
- return -1;
-
- /* Clear our cache. */
- if (--dr_ref_count[i] == 0)
- {
- /* Clear the enable bit. */
- ctrl &= ~1;
- dr_addr_p[i] = 0;
- if (dr_addr_orig_p != nullptr)
- dr_addr_orig_p[i] = 0;
- dr_ctrl_p[i] = ctrl;
- /* Notify the change. */
- aarch64_notify_debug_reg_change (state, is_watchpoint, i);
- }
-
- return 0;
-}
-
-int
-aarch64_handle_breakpoint (enum target_hw_bp_type type, CORE_ADDR addr,
- int len, int is_insert,
- struct aarch64_debug_reg_state *state)
-{
- if (is_insert)
- {
- /* The hardware breakpoint on AArch64 should always be 4-byte
- aligned, but on AArch32, it can be 2-byte aligned. Note that
- we only check the alignment on inserting breakpoint because
- aarch64_point_is_aligned needs the inferior_ptid inferior's
- regcache to decide whether the inferior is 32-bit or 64-bit.
- However when GDB follows the parent process and detach breakpoints
- from child process, inferior_ptid is the child ptid, but the
- child inferior doesn't exist in GDB's view yet. */
- if (!aarch64_point_is_aligned (0 /* is_watchpoint */ , addr, len))
- return -1;
-
- return aarch64_dr_state_insert_one_point (state, type, addr, 0, len, -1);
- }
- else
- return aarch64_dr_state_remove_one_point (state, type, addr, 0, len, -1);
-}
-
-/* This is essentially the same as aarch64_handle_breakpoint, apart
- from that it is an aligned watchpoint to be handled. */
-
-static int
-aarch64_handle_aligned_watchpoint (enum target_hw_bp_type type,
- CORE_ADDR addr, int len, int is_insert,
- struct aarch64_debug_reg_state *state)
-{
- if (is_insert)
- return aarch64_dr_state_insert_one_point (state, type, addr, 0, len, addr);
- else
- return aarch64_dr_state_remove_one_point (state, type, addr, 0, len, addr);
-}
-
-/* Insert/remove unaligned watchpoint by calling
- aarch64_align_watchpoint repeatedly until the whole watched region,
- as represented by ADDR and LEN, has been properly aligned and ready
- to be written to one or more hardware watchpoint registers.
- IS_INSERT indicates whether this is an insertion or a deletion.
- Return 0 if succeed. */
-
-static int
-aarch64_handle_unaligned_watchpoint (enum target_hw_bp_type type,
- CORE_ADDR addr, int len, int is_insert,
- struct aarch64_debug_reg_state *state)
-{
- CORE_ADDR addr_orig = addr;
-
- while (len > 0)
- {
- CORE_ADDR aligned_addr;
- int aligned_offset, aligned_len, ret;
- CORE_ADDR addr_orig_next = addr_orig;
-
- aarch64_align_watchpoint (addr, len, &aligned_addr, &aligned_offset,
- &aligned_len, &addr, &len, &addr_orig_next);
-
- if (is_insert)
- ret = aarch64_dr_state_insert_one_point (state, type, aligned_addr,
- aligned_offset,
- aligned_len, addr_orig);
- else
- ret = aarch64_dr_state_remove_one_point (state, type, aligned_addr,
- aligned_offset,
- aligned_len, addr_orig);
-
- if (show_debug_regs)
- debug_printf ("handle_unaligned_watchpoint: is_insert: %d\n"
- " "
- "aligned_addr: %s, aligned_len: %d\n"
- " "
- "addr_orig: %s\n"
- " "
- "next_addr: %s, next_len: %d\n"
- " "
- "addr_orig_next: %s\n",
- is_insert, core_addr_to_string_nz (aligned_addr),
- aligned_len, core_addr_to_string_nz (addr_orig),
- core_addr_to_string_nz (addr), len,
- core_addr_to_string_nz (addr_orig_next));
-
- addr_orig = addr_orig_next;
-
- if (ret != 0)
- return ret;
- }
-
- return 0;
-}
-
-int
-aarch64_handle_watchpoint (enum target_hw_bp_type type, CORE_ADDR addr,
- int len, int is_insert,
- struct aarch64_debug_reg_state *state)
-{
- if (aarch64_point_is_aligned (1 /* is_watchpoint */ , addr, len))
- return aarch64_handle_aligned_watchpoint (type, addr, len, is_insert,
- state);
- else
- return aarch64_handle_unaligned_watchpoint (type, addr, len, is_insert,
- state);
}
/* Call ptrace to set the thread TID's hardware breakpoint/watchpoint
@@ -715,60 +218,6 @@ aarch64_linux_set_debug_regs (struct aarch64_debug_reg_state *state,
}
}
-/* See nat/aarch64-linux-hw-point.h. */
-
-bool
-aarch64_linux_any_set_debug_regs_state (aarch64_debug_reg_state *state,
- bool watchpoint)
-{
- int count = watchpoint ? aarch64_num_wp_regs : aarch64_num_bp_regs;
- if (count == 0)
- return false;
-
- const CORE_ADDR *addr = watchpoint ? state->dr_addr_wp : state->dr_addr_bp;
- const unsigned int *ctrl = watchpoint ? state->dr_ctrl_wp : state->dr_ctrl_bp;
-
- for (int i = 0; i < count; i++)
- if (addr[i] != 0 || ctrl[i] != 0)
- return true;
-
- return false;
-}
-
-/* Print the values of the cached breakpoint/watchpoint registers. */
-
-void
-aarch64_show_debug_reg_state (struct aarch64_debug_reg_state *state,
- const char *func, CORE_ADDR addr,
- int len, enum target_hw_bp_type type)
-{
- int i;
-
- debug_printf ("%s", func);
- if (addr || len)
- debug_printf (" (addr=0x%08lx, len=%d, type=%s)",
- (unsigned long) addr, len,
- type == hw_write ? "hw-write-watchpoint"
- : (type == hw_read ? "hw-read-watchpoint"
- : (type == hw_access ? "hw-access-watchpoint"
- : (type == hw_execute ? "hw-breakpoint"
- : "??unknown??"))));
- debug_printf (":\n");
-
- debug_printf ("\tBREAKPOINTs:\n");
- for (i = 0; i < aarch64_num_bp_regs; i++)
- debug_printf ("\tBP%d: addr=%s, ctrl=0x%08x, ref.count=%d\n",
- i, core_addr_to_string_nz (state->dr_addr_bp[i]),
- state->dr_ctrl_bp[i], state->dr_ref_count_bp[i]);
-
- debug_printf ("\tWATCHPOINTs:\n");
- for (i = 0; i < aarch64_num_wp_regs; i++)
- debug_printf ("\tWP%d: addr=%s (orig=%s), ctrl=0x%08x, ref.count=%d\n",
- i, core_addr_to_string_nz (state->dr_addr_wp[i]),
- core_addr_to_string_nz (state->dr_addr_orig_wp[i]),
- state->dr_ctrl_wp[i], state->dr_ref_count_wp[i]);
-}
-
/* Return true if debug arch level is compatible for hw watchpoints
and breakpoints. */
@@ -839,43 +288,3 @@ aarch64_linux_get_debug_reg_capacity (int tid)
aarch64_num_bp_regs = 0;
}
}
-
-/* Return true if we can watch a memory region that starts address
- ADDR and whose length is LEN in bytes. */
-
-int
-aarch64_linux_region_ok_for_watchpoint (CORE_ADDR addr, int len)
-{
- CORE_ADDR aligned_addr;
-
- /* Can not set watchpoints for zero or negative lengths. */
- if (len <= 0)
- return 0;
-
- /* Must have hardware watchpoint debug register(s). */
- if (aarch64_num_wp_regs == 0)
- return 0;
-
- /* We support unaligned watchpoint address and arbitrary length,
- as long as the size of the whole watched area after alignment
- doesn't exceed size of the total area that all watchpoint debug
- registers can watch cooperatively.
-
- This is a very relaxed rule, but unfortunately there are
- limitations, e.g. false-positive hits, due to limited support of
- hardware debug registers in the kernel. See comment above
- aarch64_align_watchpoint for more information. */
-
- aligned_addr = addr & ~(AARCH64_HWP_MAX_LEN_PER_REG - 1);
- if (aligned_addr + aarch64_num_wp_regs * AARCH64_HWP_MAX_LEN_PER_REG
- < addr + len)
- return 0;
-
- /* All tests passed so we are likely to be able to set the watchpoint.
- The reason that it is 'likely' rather than 'must' is because
- we don't check the current usage of the watchpoint registers, and
- there may not be enough registers available for this watchpoint.
- Ideally we should check the cached debug register state, however
- the checking is costly. */
- return 1;
-}
diff --git a/gdb/nat/aarch64-linux-hw-point.h b/gdb/nat/aarch64-linux-hw-point.h
index c746a7622a0..7c694ff0882 100644
--- a/gdb/nat/aarch64-linux-hw-point.h
+++ b/gdb/nat/aarch64-linux-hw-point.h
@@ -21,40 +21,7 @@
#include "gdbsupport/break-common.h" /* For enum target_hw_bp_type. */
-/* Macro definitions, data structures, and code for the hardware
- breakpoint and hardware watchpoint support follow. We use the
- following abbreviations throughout the code:
-
- hw - hardware
- bp - breakpoint
- wp - watchpoint */
-
-/* Maximum number of hardware breakpoint and watchpoint registers.
- Neither of these values may exceed the width of dr_changed_t
- measured in bits. */
-
-#define AARCH64_HBP_MAX_NUM 16
-#define AARCH64_HWP_MAX_NUM 16
-
-/* Alignment requirement in bytes for addresses written to
- hardware breakpoint and watchpoint value registers.
-
- A ptrace call attempting to set an address that does not meet the
- alignment criteria will fail. Limited support has been provided in
- this port for unaligned watchpoints, such that from a GDB user
- perspective, an unaligned watchpoint may be requested.
-
- This is achieved by minimally enlarging the watched area to meet the
- alignment requirement, and if necessary, splitting the watchpoint
- over several hardware watchpoint registers. */
-
-#define AARCH64_HBP_ALIGNMENT 4
-#define AARCH64_HWP_ALIGNMENT 8
-
-/* The maximum length of a memory region that can be watched by one
- hardware watchpoint register. */
-
-#define AARCH64_HWP_MAX_LEN_PER_REG 8
+#include "nat/aarch64-hw-point.h"
/* ptrace hardware breakpoint resource info is formatted as follows:
@@ -68,24 +35,6 @@
#define AARCH64_DEBUG_NUM_SLOTS(x) ((x) & 0xff)
#define AARCH64_DEBUG_ARCH(x) (((x) >> 8) & 0xff)
-/* Macro for the expected version of the ARMv8-A debug architecture. */
-#define AARCH64_DEBUG_ARCH_V8 0x6
-#define AARCH64_DEBUG_ARCH_V8_1 0x7
-#define AARCH64_DEBUG_ARCH_V8_2 0x8
-#define AARCH64_DEBUG_ARCH_V8_4 0x9
-
-/* ptrace expects control registers to be formatted as follows:
-
- 31 13 5 3 1 0
- +--------------------------------+----------+------+------+----+
- | RESERVED (SBZ) | MASK | TYPE | PRIV | EN |
- +--------------------------------+----------+------+------+----+
-
- The TYPE field is ignored for breakpoints. */
-
-#define DR_CONTROL_ENABLED(ctrl) (((ctrl) & 0x1) == 1)
-#define DR_CONTROL_MASK(ctrl) (((ctrl) >> 5) & 0xff)
-
/* Each bit of a variable of this type is used to indicate whether a
hardware breakpoint or watchpoint setting has been changed since
the last update.
@@ -133,29 +82,6 @@ typedef ULONGEST dr_changed_t;
#define DR_HAS_CHANGED(x) ((x) != 0)
#define DR_N_HAS_CHANGED(x, n) ((x) & ((dr_changed_t)1 << (n)))
-/* Structure for managing the hardware breakpoint/watchpoint resources.
- DR_ADDR_* stores the address, DR_CTRL_* stores the control register
- content, and DR_REF_COUNT_* counts the numbers of references to the
- corresponding bp/wp, by which way the limited hardware resources
- are not wasted on duplicated bp/wp settings (though so far gdb has
- done a good job by not sending duplicated bp/wp requests). */
-
-struct aarch64_debug_reg_state
-{
- /* hardware breakpoint */
- CORE_ADDR dr_addr_bp[AARCH64_HBP_MAX_NUM];
- unsigned int dr_ctrl_bp[AARCH64_HBP_MAX_NUM];
- unsigned int dr_ref_count_bp[AARCH64_HBP_MAX_NUM];
-
- /* hardware watchpoint */
- /* Address aligned down to AARCH64_HWP_ALIGNMENT. */
- CORE_ADDR dr_addr_wp[AARCH64_HWP_MAX_NUM];
- /* Address as entered by user without any forced alignment. */
- CORE_ADDR dr_addr_orig_wp[AARCH64_HWP_MAX_NUM];
- unsigned int dr_ctrl_wp[AARCH64_HWP_MAX_NUM];
- unsigned int dr_ref_count_wp[AARCH64_HWP_MAX_NUM];
-};
-
/* Per-thread arch-specific data we want to keep. */
struct arch_lwp_info
@@ -167,35 +93,20 @@ struct arch_lwp_info
dr_changed_t dr_changed_wp;
};
-extern int aarch64_num_bp_regs;
-extern int aarch64_num_wp_regs;
-
-unsigned int aarch64_watchpoint_offset (unsigned int ctrl);
-unsigned int aarch64_watchpoint_length (unsigned int ctrl);
+/* True if this kernel does not have the bug described by PR
+ external/20207 (Linux >= 4.10). A fixed kernel supports any
+ contiguous range of bits in 8-bit byte DR_CONTROL_MASK. A buggy
+ kernel supports only 0x01, 0x03, 0x0f and 0xff. We start by
+ assuming the bug is fixed, and then detect the bug at
+ PTRACE_SETREGSET time. */
-int aarch64_handle_breakpoint (enum target_hw_bp_type type, CORE_ADDR addr,
- int len, int is_insert,
- struct aarch64_debug_reg_state *state);
-int aarch64_handle_watchpoint (enum target_hw_bp_type type, CORE_ADDR addr,
- int len, int is_insert,
- struct aarch64_debug_reg_state *state);
+extern bool kernel_supports_any_contiguous_range;
void aarch64_linux_set_debug_regs (struct aarch64_debug_reg_state *state,
int tid, int watchpoint);
-/* Return TRUE if there are any hardware breakpoints. If WATCHPOINT is TRUE,
- check hardware watchpoints instead. */
-bool aarch64_linux_any_set_debug_regs_state (aarch64_debug_reg_state *state,
- bool watchpoint);
-
-void aarch64_show_debug_reg_state (struct aarch64_debug_reg_state *state,
- const char *func, CORE_ADDR addr,
- int len, enum target_hw_bp_type type);
-
void aarch64_linux_get_debug_reg_capacity (int tid);
struct aarch64_debug_reg_state *aarch64_get_debug_reg_state (pid_t pid);
-int aarch64_linux_region_ok_for_watchpoint (CORE_ADDR addr, int len);
-
#endif /* NAT_AARCH64_LINUX_HW_POINT_H */
diff --git a/gdb/nat/aarch64-linux.c b/gdb/nat/aarch64-linux.c
index b2ed8f9a2a5..421d1ecb53c 100644
--- a/gdb/nat/aarch64-linux.c
+++ b/gdb/nat/aarch64-linux.c
@@ -81,9 +81,9 @@ aarch64_linux_new_thread (struct lwp_info *lwp)
/* If there are hardware breakpoints/watchpoints in the process then mark that
all the hardware breakpoint/watchpoint register pairs for this thread need
to be initialized (with data from aarch_process_info.debug_reg_state). */
- if (aarch64_linux_any_set_debug_regs_state (state, false))
+ if (aarch64_any_set_debug_regs_state (state, false))
DR_MARK_ALL_CHANGED (info->dr_changed_bp, aarch64_num_bp_regs);
- if (aarch64_linux_any_set_debug_regs_state (state, true))
+ if (aarch64_any_set_debug_regs_state (state, true))
DR_MARK_ALL_CHANGED (info->dr_changed_wp, aarch64_num_wp_regs);
lwp_set_arch_private_info (lwp, info);
diff --git a/gdb/nat/linux-btrace.c b/gdb/nat/linux-btrace.c
index d8880756aad..b0d6dcd7cf1 100644
--- a/gdb/nat/linux-btrace.c
+++ b/gdb/nat/linux-btrace.c
@@ -427,9 +427,11 @@ diagnose_perf_event_open_fail ()
case EACCES:
{
static const char filename[] = "/proc/sys/kernel/perf_event_paranoid";
+ errno = 0;
gdb_file_up file = gdb_fopen_cloexec (filename, "r");
if (file.get () == nullptr)
- break;
+ error (_("Failed to open %s (%s). Your system does not support "
+ "process recording."), filename, safe_strerror (errno));
int level, found = fscanf (file.get (), "%d", &level);
if (found == 1 && level > 2)
@@ -571,7 +573,22 @@ perf_event_pt_event_type ()
errno = 0;
gdb_file_up file = gdb_fopen_cloexec (filename, "r");
if (file.get () == nullptr)
- error (_("Failed to open %s: %s."), filename, safe_strerror (errno));
+ switch (errno)
+ {
+ case EACCES:
+ case EFAULT:
+ case EPERM:
+ error (_("Failed to open %s (%s). You do not have permission "
+ "to use Intel PT."), filename, safe_strerror (errno));
+
+ case ENOTDIR:
+ case ENOENT:
+ error (_("Failed to open %s (%s). Your system does not support "
+ "Intel PT."), filename, safe_strerror (errno));
+
+ default:
+ error (_("Failed to open %s: %s."), filename, safe_strerror (errno));
+ }
int type, found = fscanf (file.get (), "%d", &type);
if (found != 1)
diff --git a/gdb/nat/linux-ptrace.c b/gdb/nat/linux-ptrace.c
index 7258f4a0f07..5b3086e76a6 100644
--- a/gdb/nat/linux-ptrace.c
+++ b/gdb/nat/linux-ptrace.c
@@ -301,20 +301,6 @@ linux_fork_to_function (gdb_byte *child_stack, int (*function) (void *))
}
/* A helper function for linux_check_ptrace_features, called after
- the child forks a grandchild. */
-
-static int
-linux_grandchild_function (void *child_stack)
-{
- /* Free any allocated stack. */
- xfree (child_stack);
-
- /* This code is only reacheable by the grandchild (child's child)
- process. */
- _exit (0);
-}
-
-/* A helper function for linux_check_ptrace_features, called after
the parent process forks a child. The child allows itself to
be traced by its parent. */
@@ -324,16 +310,11 @@ linux_child_function (void *child_stack)
ptrace (PTRACE_TRACEME, 0, (PTRACE_TYPE_ARG3) 0, (PTRACE_TYPE_ARG4) 0);
kill (getpid (), SIGSTOP);
- /* Fork a grandchild. */
- linux_fork_to_function ((gdb_byte *) child_stack, linux_grandchild_function);
-
/* This code is only reacheable by the child (grandchild's parent)
process. */
_exit (0);
}
-static void linux_test_for_tracesysgood (int child_pid);
-static void linux_test_for_tracefork (int child_pid);
static void linux_test_for_exitkill (int child_pid);
/* Determine ptrace features available on this target. */
@@ -343,8 +324,15 @@ linux_check_ptrace_features (void)
{
int child_pid, ret, status;
- /* Initialize the options. */
- supported_ptrace_options = 0;
+ /* Initialize the options. We consider that these options are always
+ supported. */
+ supported_ptrace_options
+ = (PTRACE_O_TRACESYSGOOD
+ | PTRACE_O_TRACECLONE
+ | PTRACE_O_TRACEFORK
+ | PTRACE_O_TRACEVFORK
+ | PTRACE_O_TRACEVFORKDONE
+ | PTRACE_O_TRACEEXEC);
/* Fork a child so we can do some testing. The child will call
linux_child_function and will get traced. The child will
@@ -362,104 +350,12 @@ linux_check_ptrace_features (void)
error (_("linux_check_ptrace_features: waitpid: unexpected status %d."),
status);
- linux_test_for_tracesysgood (child_pid);
-
- linux_test_for_tracefork (child_pid);
-
linux_test_for_exitkill (child_pid);
/* Kill child_pid. */
kill_child (child_pid, "linux_check_ptrace_features");
}
-/* Determine if PTRACE_O_TRACESYSGOOD can be used to catch
- syscalls. */
-
-static void
-linux_test_for_tracesysgood (int child_pid)
-{
- int ret;
-
- ret = ptrace (PTRACE_SETOPTIONS, child_pid, (PTRACE_TYPE_ARG3) 0,
- (PTRACE_TYPE_ARG4) PTRACE_O_TRACESYSGOOD);
-
- if (ret == 0)
- supported_ptrace_options |= PTRACE_O_TRACESYSGOOD;
-}
-
-/* Determine if PTRACE_O_TRACEFORK can be used to follow fork
- events. */
-
-static void
-linux_test_for_tracefork (int child_pid)
-{
- int ret, status;
- long second_pid;
-
- /* First, set the PTRACE_O_TRACEFORK option. If this fails, we
- know for sure that it is not supported. */
- ret = ptrace (PTRACE_SETOPTIONS, child_pid, (PTRACE_TYPE_ARG3) 0,
- (PTRACE_TYPE_ARG4) PTRACE_O_TRACEFORK);
-
- if (ret != 0)
- return;
-
- /* Check if the target supports PTRACE_O_TRACEVFORKDONE. */
- ret = ptrace (PTRACE_SETOPTIONS, child_pid, (PTRACE_TYPE_ARG3) 0,
- (PTRACE_TYPE_ARG4) (PTRACE_O_TRACEFORK
- | PTRACE_O_TRACEVFORKDONE));
- if (ret == 0)
- supported_ptrace_options |= PTRACE_O_TRACEVFORKDONE;
-
- /* Setting PTRACE_O_TRACEFORK did not cause an error, however we
- don't know for sure that the feature is available; old
- versions of PTRACE_SETOPTIONS ignored unknown options.
- Therefore, we attach to the child process, use PTRACE_SETOPTIONS
- to enable fork tracing, and let it fork. If the process exits,
- we assume that we can't use PTRACE_O_TRACEFORK; if we get the
- fork notification, and we can extract the new child's PID, then
- we assume that we can.
-
- We do not explicitly check for vfork tracing here. It is
- assumed that vfork tracing is available whenever fork tracing
- is available. */
- ret = ptrace (PTRACE_CONT, child_pid, (PTRACE_TYPE_ARG3) 0,
- (PTRACE_TYPE_ARG4) 0);
- if (ret != 0)
- warning (_("linux_test_for_tracefork: failed to resume child"));
-
- ret = my_waitpid (child_pid, &status, 0);
-
- /* Check if we received a fork event notification. */
- if (ret == child_pid && WIFSTOPPED (status)
- && linux_ptrace_get_extended_event (status) == PTRACE_EVENT_FORK)
- {
- /* We did receive a fork event notification. Make sure its PID
- is reported. */
- second_pid = 0;
- ret = ptrace (PTRACE_GETEVENTMSG, child_pid, (PTRACE_TYPE_ARG3) 0,
- (PTRACE_TYPE_ARG4) &second_pid);
- if (ret == 0 && second_pid != 0)
- {
- int second_status;
-
- /* We got the PID from the grandchild, which means fork
- tracing is supported. */
- supported_ptrace_options |= PTRACE_O_TRACECLONE;
- supported_ptrace_options |= (PTRACE_O_TRACEFORK
- | PTRACE_O_TRACEVFORK
- | PTRACE_O_TRACEEXEC);
-
- /* Do some cleanup and kill the grandchild. */
- my_waitpid (second_pid, &second_status, 0);
- kill_child (second_pid, "linux_test_for_tracefork");
- }
- }
- else
- warning (_("linux_test_for_tracefork: unexpected result from waitpid "
- "(%d, status 0x%x)"), ret, status);
-}
-
/* Determine if PTRACE_O_EXITKILL can be used. */
static void
@@ -507,70 +403,6 @@ linux_disable_event_reporting (pid_t pid)
ptrace (PTRACE_SETOPTIONS, pid, (PTRACE_TYPE_ARG3) 0, 0);
}
-/* Returns non-zero if PTRACE_OPTIONS is contained within
- SUPPORTED_PTRACE_OPTIONS, therefore supported. Returns 0
- otherwise. */
-
-static int
-ptrace_supports_feature (int ptrace_options)
-{
- if (supported_ptrace_options == -1)
- linux_check_ptrace_features ();
-
- return ((supported_ptrace_options & ptrace_options) == ptrace_options);
-}
-
-/* Returns non-zero if PTRACE_EVENT_FORK is supported by ptrace,
- 0 otherwise. Note that if PTRACE_EVENT_FORK is supported so is
- PTRACE_EVENT_CLONE, PTRACE_EVENT_EXEC and PTRACE_EVENT_VFORK,
- since they were all added to the kernel at the same time. */
-
-int
-linux_supports_tracefork (void)
-{
- return ptrace_supports_feature (PTRACE_O_TRACEFORK);
-}
-
-/* Returns non-zero if PTRACE_EVENT_EXEC is supported by ptrace,
- 0 otherwise. Note that if PTRACE_EVENT_FORK is supported so is
- PTRACE_EVENT_CLONE, PTRACE_EVENT_FORK and PTRACE_EVENT_VFORK,
- since they were all added to the kernel at the same time. */
-
-int
-linux_supports_traceexec (void)
-{
- return ptrace_supports_feature (PTRACE_O_TRACEEXEC);
-}
-
-/* Returns non-zero if PTRACE_EVENT_CLONE is supported by ptrace,
- 0 otherwise. Note that if PTRACE_EVENT_CLONE is supported so is
- PTRACE_EVENT_FORK, PTRACE_EVENT_EXEC and PTRACE_EVENT_VFORK,
- since they were all added to the kernel at the same time. */
-
-int
-linux_supports_traceclone (void)
-{
- return ptrace_supports_feature (PTRACE_O_TRACECLONE);
-}
-
-/* Returns non-zero if PTRACE_O_TRACEVFORKDONE is supported by
- ptrace, 0 otherwise. */
-
-int
-linux_supports_tracevforkdone (void)
-{
- return ptrace_supports_feature (PTRACE_O_TRACEVFORKDONE);
-}
-
-/* Returns non-zero if PTRACE_O_TRACESYSGOOD is supported by ptrace,
- 0 otherwise. */
-
-int
-linux_supports_tracesysgood (void)
-{
- return ptrace_supports_feature (PTRACE_O_TRACESYSGOOD);
-}
-
/* Display possible problems on this system. Display them only once per GDB
execution. */
diff --git a/gdb/nat/linux-ptrace.h b/gdb/nat/linux-ptrace.h
index 2ac59a7317f..4694046e1e8 100644
--- a/gdb/nat/linux-ptrace.h
+++ b/gdb/nat/linux-ptrace.h
@@ -187,11 +187,6 @@ extern void linux_ptrace_init_warnings (void);
extern void linux_check_ptrace_features (void);
extern void linux_enable_event_reporting (pid_t pid, int attached);
extern void linux_disable_event_reporting (pid_t pid);
-extern int linux_supports_tracefork (void);
-extern int linux_supports_traceexec (void);
-extern int linux_supports_traceclone (void);
-extern int linux_supports_tracevforkdone (void);
-extern int linux_supports_tracesysgood (void);
extern int linux_ptrace_get_extended_event (int wstat);
extern int linux_is_extended_waitstatus (int wstat);
extern int linux_wstatus_maybe_breakpoint (int wstat);
diff --git a/gdb/nat/windows-nat.c b/gdb/nat/windows-nat.c
index 21445f3f859..c8db19439f3 100644
--- a/gdb/nat/windows-nat.c
+++ b/gdb/nat/windows-nat.c
@@ -19,16 +19,15 @@
#include "gdbsupport/common-defs.h"
#include "nat/windows-nat.h"
#include "gdbsupport/common-debug.h"
+#include "target/target.h"
+
+#ifdef __CYGWIN__
+#define __USEWIDE
+#endif
namespace windows_nat
{
-HANDLE current_process_handle;
-DWORD current_process_id;
-DWORD main_thread_id;
-enum gdb_signal last_sig = GDB_SIGNAL_0;
-DEBUG_EVENT current_event;
-
/* The most recent event from WaitForDebugEvent. Unlike
current_event, this is guaranteed never to come from a pending
stop. This is important because only data from the most recent
@@ -36,15 +35,6 @@ DEBUG_EVENT current_event;
ContinueDebugEvent. */
static DEBUG_EVENT last_wait_event;
-DWORD desired_stop_thread_id = -1;
-std::vector<pending_stop> pending_stops;
-EXCEPTION_RECORD siginfo_er;
-
-#ifdef __x86_64__
-bool wow64_process = false;
-bool ignore_first_breakpoint = false;
-#endif
-
AdjustTokenPrivileges_ftype *AdjustTokenPrivileges;
DebugActiveProcessStop_ftype *DebugActiveProcessStop;
DebugBreakProcess_ftype *DebugBreakProcess;
@@ -68,16 +58,16 @@ Wow64GetThreadSelectorEntry_ftype *Wow64GetThreadSelectorEntry;
#endif
GenerateConsoleCtrlEvent_ftype *GenerateConsoleCtrlEvent;
+#define GetThreadDescription dyn_GetThreadDescription
+typedef HRESULT WINAPI (GetThreadDescription_ftype) (HANDLE, PWSTR *);
+static GetThreadDescription_ftype *GetThreadDescription;
+
/* Note that 'debug_events' must be locally defined in the relevant
functions. */
#define DEBUG_EVENTS(fmt, ...) \
debug_prefixed_printf_cond (debug_events, "windows events", fmt, \
## __VA_ARGS__)
-windows_thread_info::~windows_thread_info ()
-{
-}
-
void
windows_thread_info::suspend ()
{
@@ -120,6 +110,40 @@ windows_thread_info::resume ()
suspended = 0;
}
+const char *
+windows_thread_info::thread_name ()
+{
+ if (GetThreadDescription != nullptr)
+ {
+ PWSTR value;
+ HRESULT result = GetThreadDescription (h, &value);
+ if (SUCCEEDED (result))
+ {
+ int needed = WideCharToMultiByte (CP_ACP, 0, value, -1, nullptr, 0,
+ nullptr, nullptr);
+ if (needed != 0)
+ {
+ /* USED_DEFAULT is how we detect that the encoding
+ conversion had to fall back to the substitution
+ character. It seems better to just reject bad
+ conversions here. */
+ BOOL used_default = FALSE;
+ gdb::unique_xmalloc_ptr<char> new_name
+ ((char *) xmalloc (needed));
+ if (WideCharToMultiByte (CP_ACP, 0, value, -1,
+ new_name.get (), needed,
+ nullptr, &used_default) == needed
+ && !used_default
+ && strlen (new_name.get ()) > 0)
+ name = std::move (new_name);
+ }
+ LocalFree (value);
+ }
+ }
+
+ return name.get ();
+}
+
/* Return the name of the DLL referenced by H at ADDRESS. UNICODE
determines what sort of string is read from the inferior. Returns
the name of the DLL, or NULL on error. If a name is returned, it
@@ -177,6 +201,45 @@ get_image_name (HANDLE h, void *address, int unicode)
return buf;
}
+/* See nat/windows-nat.h. */
+
+bool
+windows_process_info::handle_ms_vc_exception (const EXCEPTION_RECORD *rec)
+{
+ if (rec->NumberParameters >= 3
+ && (rec->ExceptionInformation[0] & 0xffffffff) == 0x1000)
+ {
+ DWORD named_thread_id;
+ windows_thread_info *named_thread;
+ CORE_ADDR thread_name_target;
+
+ thread_name_target = rec->ExceptionInformation[1];
+ named_thread_id = (DWORD) (0xffffffff & rec->ExceptionInformation[2]);
+
+ if (named_thread_id == (DWORD) -1)
+ named_thread_id = current_event.dwThreadId;
+
+ named_thread = thread_rec (ptid_t (current_event.dwProcessId,
+ named_thread_id, 0),
+ DONT_INVALIDATE_CONTEXT);
+ if (named_thread != NULL)
+ {
+ int thread_name_len;
+ gdb::unique_xmalloc_ptr<char> thread_name
+ = target_read_string (thread_name_target, 1025, &thread_name_len);
+ if (thread_name_len > 0)
+ {
+ thread_name.get ()[thread_name_len - 1] = '\0';
+ named_thread->name = std::move (thread_name);
+ }
+ }
+
+ return true;
+ }
+
+ return false;
+}
+
/* The exception thrown by a program to tell the debugger the name of
a thread. The exception record contains an ID of a thread and a
name to give it. This exception has no documented name, but MSDN
@@ -184,7 +247,8 @@ get_image_name (HANDLE h, void *address, int unicode)
#define MS_VC_EXCEPTION 0x406d1388
handle_exception_result
-handle_exception (struct target_waitstatus *ourstatus, bool debug_exceptions)
+windows_process_info::handle_exception (struct target_waitstatus *ourstatus,
+ bool debug_exceptions)
{
#define DEBUG_EXCEPTION_SIMPLE(x) if (debug_exceptions) \
debug_printf ("gdb: Target exception %s at %s\n", x, \
@@ -201,6 +265,8 @@ handle_exception (struct target_waitstatus *ourstatus, bool debug_exceptions)
thread_rec (ptid_t (current_event.dwProcessId, current_event.dwThreadId, 0),
DONT_SUSPEND);
+ last_sig = GDB_SIGNAL_0;
+
switch (code)
{
case EXCEPTION_ACCESS_VIOLATION:
@@ -261,8 +327,10 @@ handle_exception (struct target_waitstatus *ourstatus, bool debug_exceptions)
on startup, first a BREAKPOINT for the 64bit ntdll.dll,
then a WX86_BREAKPOINT for the 32bit ntdll.dll.
Here we only care about the WX86_BREAKPOINT's. */
+ DEBUG_EXCEPTION_SIMPLE ("EXCEPTION_BREAKPOINT - ignore_first_breakpoint");
ourstatus->set_spurious ();
ignore_first_breakpoint = false;
+ break;
}
else if (wow64_process)
{
@@ -273,7 +341,7 @@ handle_exception (struct target_waitstatus *ourstatus, bool debug_exceptions)
gdb lets the target process continue.
So handle it as SIGINT instead, then the target is stopped
unconditionally. */
- DEBUG_EXCEPTION_SIMPLE ("EXCEPTION_BREAKPOINT");
+ DEBUG_EXCEPTION_SIMPLE ("EXCEPTION_BREAKPOINT - wow64_process");
rec->ExceptionCode = DBG_CONTROL_C;
ourstatus->set_stopped (GDB_SIGNAL_INT);
break;
@@ -339,15 +407,10 @@ handle_exception (struct target_waitstatus *ourstatus, bool debug_exceptions)
#undef DEBUG_EXCEPTION_SIMPLE
}
-/* Iterate over all DLLs currently mapped by our inferior, looking for
- a DLL which is loaded at LOAD_ADDR. If found, add the DLL to our
- list of solibs; otherwise do nothing. LOAD_ADDR NULL means add all
- DLLs to the list of solibs; this is used when the inferior finishes
- its initialization, and all the DLLs it statically depends on are
- presumed loaded. */
+/* See nat/windows-nat.h. */
-static void
-windows_add_dll (LPVOID load_addr)
+void
+windows_process_info::add_dll (LPVOID load_addr)
{
HMODULE dummy_hmodule;
DWORD cb_needed;
@@ -357,7 +420,7 @@ windows_add_dll (LPVOID load_addr)
#ifdef __x86_64__
if (wow64_process)
{
- if (EnumProcessModulesEx (current_process_handle, &dummy_hmodule,
+ if (EnumProcessModulesEx (handle, &dummy_hmodule,
sizeof (HMODULE), &cb_needed,
LIST_MODULES_32BIT) == 0)
return;
@@ -365,7 +428,7 @@ windows_add_dll (LPVOID load_addr)
else
#endif
{
- if (EnumProcessModules (current_process_handle, &dummy_hmodule,
+ if (EnumProcessModules (handle, &dummy_hmodule,
sizeof (HMODULE), &cb_needed) == 0)
return;
}
@@ -377,7 +440,7 @@ windows_add_dll (LPVOID load_addr)
#ifdef __x86_64__
if (wow64_process)
{
- if (EnumProcessModulesEx (current_process_handle, hmodules,
+ if (EnumProcessModulesEx (handle, hmodules,
cb_needed, &cb_needed,
LIST_MODULES_32BIT) == 0)
return;
@@ -385,7 +448,7 @@ windows_add_dll (LPVOID load_addr)
else
#endif
{
- if (EnumProcessModules (current_process_handle, hmodules,
+ if (EnumProcessModules (handle, hmodules,
cb_needed, &cb_needed) == 0)
return;
}
@@ -430,11 +493,11 @@ windows_add_dll (LPVOID load_addr)
char dll_name[MAX_PATH];
#endif
const char *name;
- if (GetModuleInformation (current_process_handle, hmodules[i],
+ if (GetModuleInformation (handle, hmodules[i],
&mi, sizeof (mi)) == 0)
continue;
- if (GetModuleFileNameEx (current_process_handle, hmodules[i],
+ if (GetModuleFileNameEx (handle, hmodules[i],
dll_name, sizeof (dll_name)) == 0)
continue;
#ifdef __USEWIDE
@@ -470,7 +533,7 @@ windows_add_dll (LPVOID load_addr)
/* See nat/windows-nat.h. */
void
-dll_loaded_event ()
+windows_process_info::dll_loaded_event ()
{
gdb_assert (current_event.dwDebugEventCode == LOAD_DLL_DEBUG_EVENT);
@@ -482,29 +545,28 @@ dll_loaded_event ()
in the sense that it might be NULL. And the first DLL event in
particular is explicitly documented as "likely not pass[ed]"
(source: MSDN LOAD_DLL_DEBUG_INFO structure). */
- dll_name = get_image_name (current_process_handle,
- event->lpImageName, event->fUnicode);
+ dll_name = get_image_name (handle, event->lpImageName, event->fUnicode);
/* If the DLL name could not be gleaned via lpImageName, try harder
by enumerating all the DLLs loaded into the inferior, looking for
one that is loaded at base address = lpBaseOfDll. */
if (dll_name != nullptr)
handle_load_dll (dll_name, event->lpBaseOfDll);
else if (event->lpBaseOfDll != nullptr)
- windows_add_dll (event->lpBaseOfDll);
+ add_dll (event->lpBaseOfDll);
}
/* See nat/windows-nat.h. */
void
-windows_add_all_dlls ()
+windows_process_info::add_all_dlls ()
{
- windows_add_dll (nullptr);
+ add_dll (nullptr);
}
/* See nat/windows-nat.h. */
bool
-matching_pending_stop (bool debug_events)
+windows_process_info::matching_pending_stop (bool debug_events)
{
/* If there are pending stops, and we might plausibly hit one of
them, we don't want to actually continue the inferior -- we just
@@ -528,7 +590,7 @@ matching_pending_stop (bool debug_events)
/* See nat/windows-nat.h. */
gdb::optional<pending_stop>
-fetch_pending_stop (bool debug_events)
+windows_process_info::fetch_pending_stop (bool debug_events)
{
gdb::optional<pending_stop> result;
for (auto iter = pending_stops.begin ();
@@ -638,6 +700,7 @@ initialize_loadable ()
GPA (hm, Wow64GetThreadSelectorEntry);
#endif
GPA (hm, GenerateConsoleCtrlEvent);
+ GPA (hm, GetThreadDescription);
}
/* Set variables to dummy versions of these processes if the function
@@ -694,6 +757,15 @@ initialize_loadable ()
OpenProcessToken = bad;
}
+ /* On some versions of Windows, this function is only available in
+ KernelBase.dll, not kernel32.dll. */
+ if (GetThreadDescription == nullptr)
+ {
+ hm = LoadLibrary (TEXT ("KernelBase.dll"));
+ if (hm)
+ GPA (hm, GetThreadDescription);
+ }
+
#undef GPA
return result;
diff --git a/gdb/nat/windows-nat.h b/gdb/nat/windows-nat.h
index f0abd7d795c..27b653674c3 100644
--- a/gdb/nat/windows-nat.h
+++ b/gdb/nat/windows-nat.h
@@ -43,8 +43,6 @@ struct windows_thread_info
{
}
- ~windows_thread_info ();
-
DISABLE_COPY_AND_ASSIGN (windows_thread_info);
/* Ensure that this thread has been suspended. */
@@ -53,6 +51,11 @@ struct windows_thread_info
/* Resume the thread if it has been suspended. */
void resume ();
+ /* Return the thread's name, or nullptr if not known. The name is
+ stored in this thread and is guaranteed to live until at least
+ the next call. */
+ const char *thread_name ();
+
/* The Win32 thread identifier. */
DWORD tid;
@@ -94,7 +97,7 @@ struct windows_thread_info
adjustments if the registers are read multiple times. */
bool pc_adjusted = false;
- /* The name of the thread, allocated by xmalloc. */
+ /* The name of the thread. */
gdb::unique_xmalloc_ptr<char> name;
};
@@ -111,145 +114,160 @@ enum thread_disposition_type
INVALIDATE_CONTEXT
};
-/* Find a thread record given a thread id. THREAD_DISPOSITION
- controls whether the thread is suspended, and whether the context
- is invalidated.
-
- This function must be supplied by the embedding application. */
-extern windows_thread_info *thread_rec (ptid_t ptid,
- thread_disposition_type disposition);
-
+/* A single pending stop. See "pending_stops" for more
+ information. */
+struct pending_stop
+{
+ /* The thread id. */
+ DWORD thread_id;
-/* Handle OUTPUT_DEBUG_STRING_EVENT from child process. Updates
- OURSTATUS and returns the thread id if this represents a thread
- change (this is specific to Cygwin), otherwise 0.
+ /* The target waitstatus we computed. */
+ target_waitstatus status;
- Cygwin prepends its messages with a "cygwin:". Interpret this as
- a Cygwin signal. Otherwise just print the string as a warning.
+ /* The event. A few fields of this can be referenced after a stop,
+ and it seemed simplest to store the entire event. */
+ DEBUG_EVENT event;
+};
- This function must be supplied by the embedding application. */
-extern int handle_output_debug_string (struct target_waitstatus *ourstatus);
+enum handle_exception_result
+{
+ HANDLE_EXCEPTION_UNHANDLED = 0,
+ HANDLE_EXCEPTION_HANDLED,
+ HANDLE_EXCEPTION_IGNORED
+};
-/* Handle a DLL load event.
+/* A single Windows process. An object of this type (or subclass) is
+ created by the client. Some methods must be provided by the client
+ as well. */
- This function assumes that the current event did not occur during
- inferior initialization.
+struct windows_process_info
+{
+ /* The process handle */
+ HANDLE handle = 0;
+ DWORD id = 0;
+ DWORD main_thread_id = 0;
+ enum gdb_signal last_sig = GDB_SIGNAL_0;
+
+ /* The current debug event from WaitForDebugEvent or from a pending
+ stop. */
+ DEBUG_EVENT current_event {};
+
+ /* The ID of the thread for which we anticipate a stop event.
+ Normally this is -1, meaning we'll accept an event in any
+ thread. */
+ DWORD desired_stop_thread_id = -1;
+
+ /* A vector of pending stops. Sometimes, Windows will report a stop
+ on a thread that has been ostensibly suspended. We believe what
+ happens here is that two threads hit a breakpoint simultaneously,
+ and the Windows kernel queues the stop events. However, this can
+ result in the strange effect of trying to single step thread A --
+ leaving all other threads suspended -- and then seeing a stop in
+ thread B. To handle this scenario, we queue all such "pending"
+ stops here, and then process them once the step has completed. See
+ PR gdb/22992. */
+ std::vector<pending_stop> pending_stops;
+
+ /* Contents of $_siginfo */
+ EXCEPTION_RECORD siginfo_er {};
- DLL_NAME is the name of the library. BASE is the base load
- address.
+#ifdef __x86_64__
+ /* The target is a WOW64 process */
+ bool wow64_process = false;
+ /* Ignore first breakpoint exception of WOW64 process */
+ bool ignore_first_breakpoint = false;
+#endif
- This function must be supplied by the embedding application. */
-extern void handle_load_dll (const char *dll_name, LPVOID base);
+ /* Find a thread record given a thread id. THREAD_DISPOSITION
+ controls whether the thread is suspended, and whether the context
+ is invalidated.
-/* Handle a DLL unload event.
+ This function must be supplied by the embedding application. */
+ windows_thread_info *thread_rec (ptid_t ptid,
+ thread_disposition_type disposition);
- This function assumes that this event did not occur during inferior
- initialization.
+ /* Handle OUTPUT_DEBUG_STRING_EVENT from child process. Updates
+ OURSTATUS and returns the thread id if this represents a thread
+ change (this is specific to Cygwin), otherwise 0.
- This function must be supplied by the embedding application. */
+ Cygwin prepends its messages with a "cygwin:". Interpret this as
+ a Cygwin signal. Otherwise just print the string as a warning.
-extern void handle_unload_dll ();
+ This function must be supplied by the embedding application. */
+ int handle_output_debug_string (struct target_waitstatus *ourstatus);
-/* Handle MS_VC_EXCEPTION when processing a stop. MS_VC_EXCEPTION is
- somewhat undocumented but is used to tell the debugger the name of
- a thread.
+ /* Handle a DLL load event.
- Return true if the exception was handled; return false otherwise.
+ This function assumes that the current event did not occur during
+ inferior initialization.
- This function must be supplied by the embedding application. */
+ DLL_NAME is the name of the library. BASE is the base load
+ address.
-extern bool handle_ms_vc_exception (const EXCEPTION_RECORD *rec);
+ This function must be supplied by the embedding application. */
-/* When EXCEPTION_ACCESS_VIOLATION is processed, we give the embedding
- application a chance to change it to be considered "unhandled".
- This function must be supplied by the embedding application. If it
- returns true, then the exception is "unhandled". */
+ void handle_load_dll (const char *dll_name, LPVOID base);
-extern bool handle_access_violation (const EXCEPTION_RECORD *rec);
+ /* Handle a DLL unload event.
+ This function assumes that this event did not occur during inferior
+ initialization.
-/* Currently executing process */
-extern HANDLE current_process_handle;
-extern DWORD current_process_id;
-extern DWORD main_thread_id;
-extern enum gdb_signal last_sig;
+ This function must be supplied by the embedding application. */
-/* The current debug event from WaitForDebugEvent or from a pending
- stop. */
-extern DEBUG_EVENT current_event;
+ void handle_unload_dll ();
-/* The ID of the thread for which we anticipate a stop event.
- Normally this is -1, meaning we'll accept an event in any
- thread. */
-extern DWORD desired_stop_thread_id;
+ /* When EXCEPTION_ACCESS_VIOLATION is processed, we give the embedding
+ application a chance to change it to be considered "unhandled".
+ This function must be supplied by the embedding application. If it
+ returns true, then the exception is "unhandled". */
-/* A single pending stop. See "pending_stops" for more
- information. */
-struct pending_stop
-{
- /* The thread id. */
- DWORD thread_id;
+ bool handle_access_violation (const EXCEPTION_RECORD *rec);
- /* The target waitstatus we computed. */
- target_waitstatus status;
+ handle_exception_result handle_exception
+ (struct target_waitstatus *ourstatus, bool debug_exceptions);
- /* The event. A few fields of this can be referenced after a stop,
- and it seemed simplest to store the entire event. */
- DEBUG_EVENT event;
-};
+ /* Call to indicate that a DLL was loaded. */
-/* A vector of pending stops. Sometimes, Windows will report a stop
- on a thread that has been ostensibly suspended. We believe what
- happens here is that two threads hit a breakpoint simultaneously,
- and the Windows kernel queues the stop events. However, this can
- result in the strange effect of trying to single step thread A --
- leaving all other threads suspended -- and then seeing a stop in
- thread B. To handle this scenario, we queue all such "pending"
- stops here, and then process them once the step has completed. See
- PR gdb/22992. */
-extern std::vector<pending_stop> pending_stops;
+ void dll_loaded_event ();
-/* Contents of $_siginfo */
-extern EXCEPTION_RECORD siginfo_er;
+ /* Iterate over all DLLs currently mapped by our inferior, and
+ add them to our list of solibs. */
-#ifdef __x86_64__
-/* The target is a WOW64 process */
-extern bool wow64_process;
-/* Ignore first breakpoint exception of WOW64 process */
-extern bool ignore_first_breakpoint;
-#endif
+ void add_all_dlls ();
-typedef enum
-{
- HANDLE_EXCEPTION_UNHANDLED = 0,
- HANDLE_EXCEPTION_HANDLED,
- HANDLE_EXCEPTION_IGNORED
-} handle_exception_result;
+ /* Return true if there is a pending stop matching
+ desired_stop_thread_id. If DEBUG_EVENTS is true, logging will be
+ enabled. */
-extern handle_exception_result handle_exception
- (struct target_waitstatus *ourstatus, bool debug_exceptions);
+ bool matching_pending_stop (bool debug_events);
-/* Call to indicate that a DLL was loaded. */
+ /* See if a pending stop matches DESIRED_STOP_THREAD_ID. If so,
+ remove it from the list of pending stops, set 'current_event', and
+ return it. Otherwise, return an empty optional. */
-extern void dll_loaded_event ();
+ gdb::optional<pending_stop> fetch_pending_stop (bool debug_events);
-/* Iterate over all DLLs currently mapped by our inferior, and
- add them to our list of solibs. */
+private:
-extern void windows_add_all_dlls ();
+ /* Handle MS_VC_EXCEPTION when processing a stop. MS_VC_EXCEPTION is
+ somewhat undocumented but is used to tell the debugger the name of
+ a thread.
-/* Return true if there is a pending stop matching
- desired_stop_thread_id. If DEBUG_EVENTS is true, logging will be
- enabled. */
+ Return true if the exception was handled; return false otherwise. */
-extern bool matching_pending_stop (bool debug_events);
+ bool handle_ms_vc_exception (const EXCEPTION_RECORD *rec);
-/* See if a pending stop matches DESIRED_STOP_THREAD_ID. If so,
- remove it from the list of pending stops, set 'current_event', and
- return it. Otherwise, return an empty optional. */
+ /* Iterate over all DLLs currently mapped by our inferior, looking for
+ a DLL which is loaded at LOAD_ADDR. If found, add the DLL to our
+ list of solibs; otherwise do nothing. LOAD_ADDR NULL means add all
+ DLLs to the list of solibs; this is used when the inferior finishes
+ its initialization, and all the DLLs it statically depends on are
+ presumed loaded. */
-extern gdb::optional<pending_stop> fetch_pending_stop (bool debug_events);
+ void add_dll (LPVOID load_addr);
+};
/* A simple wrapper for ContinueDebugEvent that continues the last
waited-for event. If DEBUG_EVENTS is true, logging will be
diff --git a/gdb/nat/x86-dregs.c b/gdb/nat/x86-dregs.c
index 230b99c0a23..94de0265cf6 100644
--- a/gdb/nat/x86-dregs.c
+++ b/gdb/nat/x86-dregs.c
@@ -206,7 +206,7 @@ x86_get_debug_register_length ()
#define X86_DR_WATCH_HIT(dr6, i) ((dr6) & (1 << (i)))
/* Types of operations supported by x86_handle_nonaligned_watchpoint. */
-typedef enum { WP_INSERT, WP_REMOVE, WP_COUNT } x86_wp_op_t;
+enum x86_wp_op_t { WP_INSERT, WP_REMOVE, WP_COUNT };
/* Print the values of the mirrored debug registers. */
diff --git a/gdb/nds32-tdep.c b/gdb/nds32-tdep.c
index f8548561853..e95ad7cc662 100644
--- a/gdb/nds32-tdep.c
+++ b/gdb/nds32-tdep.c
@@ -314,16 +314,16 @@ nds32_dwarf2_reg_to_regnum (struct gdbarch *gdbarch, int num)
}
/* NDS32 register groups. */
-static struct reggroup *nds32_cr_reggroup;
-static struct reggroup *nds32_ir_reggroup;
-static struct reggroup *nds32_mr_reggroup;
-static struct reggroup *nds32_dr_reggroup;
-static struct reggroup *nds32_pfr_reggroup;
-static struct reggroup *nds32_hspr_reggroup;
-static struct reggroup *nds32_dmar_reggroup;
-static struct reggroup *nds32_racr_reggroup;
-static struct reggroup *nds32_idr_reggroup;
-static struct reggroup *nds32_secur_reggroup;
+static const reggroup *nds32_cr_reggroup;
+static const reggroup *nds32_ir_reggroup;
+static const reggroup *nds32_mr_reggroup;
+static const reggroup *nds32_dr_reggroup;
+static const reggroup *nds32_pfr_reggroup;
+static const reggroup *nds32_hspr_reggroup;
+static const reggroup *nds32_dmar_reggroup;
+static const reggroup *nds32_racr_reggroup;
+static const reggroup *nds32_idr_reggroup;
+static const reggroup *nds32_secur_reggroup;
static void
nds32_init_reggroups (void)
@@ -343,14 +343,6 @@ nds32_init_reggroups (void)
static void
nds32_add_reggroups (struct gdbarch *gdbarch)
{
- /* Add pre-defined register groups. */
- reggroup_add (gdbarch, general_reggroup);
- reggroup_add (gdbarch, float_reggroup);
- reggroup_add (gdbarch, system_reggroup);
- reggroup_add (gdbarch, all_reggroup);
- reggroup_add (gdbarch, save_reggroup);
- reggroup_add (gdbarch, restore_reggroup);
-
/* Add NDS32 register groups. */
reggroup_add (gdbarch, nds32_cr_reggroup);
reggroup_add (gdbarch, nds32_ir_reggroup);
@@ -368,7 +360,7 @@ nds32_add_reggroups (struct gdbarch *gdbarch)
static int
nds32_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
- struct reggroup *reggroup)
+ const struct reggroup *reggroup)
{
const char *reg_name;
const char *group_name;
@@ -398,7 +390,7 @@ nds32_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
/* The NDS32 reggroup contains registers whose name is prefixed
by reggroup name. */
reg_name = gdbarch_register_name (gdbarch, regnum);
- group_name = reggroup_name (reggroup);
+ group_name = reggroup->name ();
return !strncmp (reg_name, group_name, strlen (group_name));
}
diff --git a/gdb/netbsd-nat.c b/gdb/netbsd-nat.c
index 1463305acc8..f2eeb3ff61e 100644
--- a/gdb/netbsd-nat.c
+++ b/gdb/netbsd-nat.c
@@ -247,13 +247,12 @@ nbsd_nat_target::find_memory_regions (find_memory_region_ftype func,
size_t size = kve->kve_end - kve->kve_start;
if (info_verbose)
{
- fprintf_filtered (gdb_stdout,
- "Save segment, %ld bytes at %s (%c%c%c)\n",
- (long) size,
- paddress (target_gdbarch (), kve->kve_start),
- kve->kve_protection & KVME_PROT_READ ? 'r' : '-',
- kve->kve_protection & KVME_PROT_WRITE ? 'w' : '-',
- kve->kve_protection & KVME_PROT_EXEC ? 'x' : '-');
+ gdb_printf ("Save segment, %ld bytes at %s (%c%c%c)\n",
+ (long) size,
+ paddress (target_gdbarch (), kve->kve_start),
+ kve->kve_protection & KVME_PROT_READ ? 'r' : '-',
+ kve->kve_protection & KVME_PROT_WRITE ? 'w' : '-',
+ kve->kve_protection & KVME_PROT_EXEC ? 'x' : '-');
}
/* Invoke the callback function to create the corefile segment.
@@ -323,13 +322,13 @@ nbsd_nat_target::info_proc (const char *args, enum info_proc_what what)
else
error (_("Invalid arguments."));
- printf_filtered (_("process %d\n"), pid);
+ gdb_printf (_("process %d\n"), pid);
if (do_cmdline)
{
gdb::unique_xmalloc_ptr<char[]> cmdline = nbsd_pid_to_cmdline (pid);
if (cmdline != nullptr)
- printf_filtered ("cmdline = '%s'\n", cmdline.get ());
+ gdb_printf ("cmdline = '%s'\n", cmdline.get ());
else
warning (_("unable to fetch command line"));
}
@@ -337,7 +336,7 @@ nbsd_nat_target::info_proc (const char *args, enum info_proc_what what)
{
std::string cwd = nbsd_pid_to_cwd (pid);
if (cwd != "")
- printf_filtered ("cwd = '%s'\n", cwd.c_str ());
+ gdb_printf ("cwd = '%s'\n", cwd.c_str ());
else
warning (_("unable to fetch current working directory"));
}
@@ -345,7 +344,7 @@ nbsd_nat_target::info_proc (const char *args, enum info_proc_what what)
{
const char *exe = pid_to_exec_file (pid);
if (exe != nullptr)
- printf_filtered ("exe = '%s'\n", exe);
+ gdb_printf ("exe = '%s'\n", exe);
else
warning (_("unable to fetch executable path name"));
}
@@ -399,59 +398,59 @@ nbsd_nat_target::info_proc (const char *args, enum info_proc_what what)
}
};
- printf_filtered ("Name: %s\n", kp.p_comm);
- printf_filtered ("State: %s\n", process_status(kp.p_realstat));
- printf_filtered ("Parent process: %" PRId32 "\n", kp.p_ppid);
- printf_filtered ("Process group: %" PRId32 "\n", kp.p__pgid);
- printf_filtered ("Session id: %" PRId32 "\n", kp.p_sid);
- printf_filtered ("TTY: %" PRId32 "\n", kp.p_tdev);
- printf_filtered ("TTY owner process group: %" PRId32 "\n", kp.p_tpgid);
- printf_filtered ("User IDs (real, effective, saved): "
- "%" PRIu32 " %" PRIu32 " %" PRIu32 "\n",
- kp.p_ruid, kp.p_uid, kp.p_svuid);
- printf_filtered ("Group IDs (real, effective, saved): "
- "%" PRIu32 " %" PRIu32 " %" PRIu32 "\n",
- kp.p_rgid, kp.p_gid, kp.p_svgid);
-
- printf_filtered ("Groups:");
+ gdb_printf ("Name: %s\n", kp.p_comm);
+ gdb_printf ("State: %s\n", process_status(kp.p_realstat));
+ gdb_printf ("Parent process: %" PRId32 "\n", kp.p_ppid);
+ gdb_printf ("Process group: %" PRId32 "\n", kp.p__pgid);
+ gdb_printf ("Session id: %" PRId32 "\n", kp.p_sid);
+ gdb_printf ("TTY: %" PRId32 "\n", kp.p_tdev);
+ gdb_printf ("TTY owner process group: %" PRId32 "\n", kp.p_tpgid);
+ gdb_printf ("User IDs (real, effective, saved): "
+ "%" PRIu32 " %" PRIu32 " %" PRIu32 "\n",
+ kp.p_ruid, kp.p_uid, kp.p_svuid);
+ gdb_printf ("Group IDs (real, effective, saved): "
+ "%" PRIu32 " %" PRIu32 " %" PRIu32 "\n",
+ kp.p_rgid, kp.p_gid, kp.p_svgid);
+
+ gdb_printf ("Groups:");
for (int i = 0; i < kp.p_ngroups; i++)
- printf_filtered (" %" PRIu32, kp.p_groups[i]);
- printf_filtered ("\n");
- printf_filtered ("Minor faults (no memory page): %" PRIu64 "\n",
- kp.p_uru_minflt);
- printf_filtered ("Major faults (memory page faults): %" PRIu64 "\n",
- kp.p_uru_majflt);
- printf_filtered ("utime: %" PRIu32 ".%06" PRIu32 "\n",
- kp.p_uutime_sec, kp.p_uutime_usec);
- printf_filtered ("stime: %" PRIu32 ".%06" PRIu32 "\n",
- kp.p_ustime_sec, kp.p_ustime_usec);
- printf_filtered ("utime+stime, children: %" PRIu32 ".%06" PRIu32 "\n",
- kp.p_uctime_sec, kp.p_uctime_usec);
- printf_filtered ("'nice' value: %" PRIu8 "\n", kp.p_nice);
- printf_filtered ("Start time: %" PRIu32 ".%06" PRIu32 "\n",
- kp.p_ustart_sec, kp.p_ustart_usec);
+ gdb_printf (" %" PRIu32, kp.p_groups[i]);
+ gdb_printf ("\n");
+ gdb_printf ("Minor faults (no memory page): %" PRIu64 "\n",
+ kp.p_uru_minflt);
+ gdb_printf ("Major faults (memory page faults): %" PRIu64 "\n",
+ kp.p_uru_majflt);
+ gdb_printf ("utime: %" PRIu32 ".%06" PRIu32 "\n",
+ kp.p_uutime_sec, kp.p_uutime_usec);
+ gdb_printf ("stime: %" PRIu32 ".%06" PRIu32 "\n",
+ kp.p_ustime_sec, kp.p_ustime_usec);
+ gdb_printf ("utime+stime, children: %" PRIu32 ".%06" PRIu32 "\n",
+ kp.p_uctime_sec, kp.p_uctime_usec);
+ gdb_printf ("'nice' value: %" PRIu8 "\n", kp.p_nice);
+ gdb_printf ("Start time: %" PRIu32 ".%06" PRIu32 "\n",
+ kp.p_ustart_sec, kp.p_ustart_usec);
int pgtok = getpagesize () / 1024;
- printf_filtered ("Data size: %" PRIuMAX " kB\n",
- (uintmax_t) kp.p_vm_dsize * pgtok);
- printf_filtered ("Stack size: %" PRIuMAX " kB\n",
- (uintmax_t) kp.p_vm_ssize * pgtok);
- printf_filtered ("Text size: %" PRIuMAX " kB\n",
- (uintmax_t) kp.p_vm_tsize * pgtok);
- printf_filtered ("Resident set size: %" PRIuMAX " kB\n",
- (uintmax_t) kp.p_vm_rssize * pgtok);
- printf_filtered ("Maximum RSS: %" PRIu64 " kB\n", kp.p_uru_maxrss);
- printf_filtered ("Pending Signals:");
+ gdb_printf ("Data size: %" PRIuMAX " kB\n",
+ (uintmax_t) kp.p_vm_dsize * pgtok);
+ gdb_printf ("Stack size: %" PRIuMAX " kB\n",
+ (uintmax_t) kp.p_vm_ssize * pgtok);
+ gdb_printf ("Text size: %" PRIuMAX " kB\n",
+ (uintmax_t) kp.p_vm_tsize * pgtok);
+ gdb_printf ("Resident set size: %" PRIuMAX " kB\n",
+ (uintmax_t) kp.p_vm_rssize * pgtok);
+ gdb_printf ("Maximum RSS: %" PRIu64 " kB\n", kp.p_uru_maxrss);
+ gdb_printf ("Pending Signals:");
for (size_t i = 0; i < ARRAY_SIZE (kp.p_siglist.__bits); i++)
- printf_filtered (" %08" PRIx32, kp.p_siglist.__bits[i]);
- printf_filtered ("\n");
- printf_filtered ("Ignored Signals:");
+ gdb_printf (" %08" PRIx32, kp.p_siglist.__bits[i]);
+ gdb_printf ("\n");
+ gdb_printf ("Ignored Signals:");
for (size_t i = 0; i < ARRAY_SIZE (kp.p_sigignore.__bits); i++)
- printf_filtered (" %08" PRIx32, kp.p_sigignore.__bits[i]);
- printf_filtered ("\n");
- printf_filtered ("Caught Signals:");
+ gdb_printf (" %08" PRIx32, kp.p_sigignore.__bits[i]);
+ gdb_printf ("\n");
+ gdb_printf ("Caught Signals:");
for (size_t i = 0; i < ARRAY_SIZE (kp.p_sigcatch.__bits); i++)
- printf_filtered (" %08" PRIx32, kp.p_sigcatch.__bits[i]);
- printf_filtered ("\n");
+ gdb_printf (" %08" PRIx32, kp.p_sigcatch.__bits[i]);
+ gdb_printf ("\n");
}
}
@@ -627,8 +626,8 @@ nbsd_nat_target::wait (ptid_t ptid, struct target_waitstatus *ourstatus,
ourstatus->set_thread_exited (0);
if (print_thread_events)
- printf_unfiltered (_("[%s exited]\n"),
- target_pid_to_str (wptid).c_str ());
+ gdb_printf (_("[%s exited]\n"),
+ target_pid_to_str (wptid).c_str ());
delete_thread (thr);
}
@@ -773,11 +772,11 @@ nbsd_nat_target::xfer_partial (enum target_object object,
if (res != 0)
{
if (res == EACCES)
- fprintf_unfiltered (gdb_stderr, "Cannot %s process at %s (%s). "
- "Is PaX MPROTECT active? See security(7), "
- "sysctl(7), paxctl(8)\n",
- (writebuf ? "write to" : "read from"),
- pulongest (offset), safe_strerror (errno));
+ gdb_printf (gdb_stderr, "Cannot %s process at %s (%s). "
+ "Is PaX MPROTECT active? See security(7), "
+ "sysctl(7), paxctl(8)\n",
+ (writebuf ? "write to" : "read from"),
+ pulongest (offset), safe_strerror (errno));
return TARGET_XFER_E_IO;
}
if (xfered == 0)
diff --git a/gdb/netbsd-tdep.c b/gdb/netbsd-tdep.c
index eb890439fb2..fbedb77f46e 100644
--- a/gdb/netbsd-tdep.c
+++ b/gdb/netbsd-tdep.c
@@ -367,7 +367,7 @@ nbsd_skip_solib_resolver (struct gdbarch *gdbarch, CORE_ADDR pc)
struct bound_minimal_symbol msym;
msym = lookup_minimal_symbol ("_rtld_bind_start", NULL, NULL);
- if (msym.minsym && BMSYMBOL_VALUE_ADDRESS (msym) == pc)
+ if (msym.minsym && msym.value_address () == pc)
return frame_unwind_caller_pc (get_current_frame ());
else
return find_solib_trampoline_target (get_current_frame (), pc);
@@ -525,20 +525,20 @@ nbsd_get_siginfo_type (struct gdbarch *gdbarch)
void
nbsd_info_proc_mappings_header (int addr_bit)
{
- printf_filtered (_("Mapped address spaces:\n\n"));
+ gdb_printf (_("Mapped address spaces:\n\n"));
if (addr_bit == 64)
{
- printf_filtered (" %18s %18s %10s %10s %9s %s\n",
- "Start Addr",
- " End Addr",
- " Size", " Offset", "Flags ", "File");
+ gdb_printf (" %18s %18s %10s %10s %9s %s\n",
+ "Start Addr",
+ " End Addr",
+ " Size", " Offset", "Flags ", "File");
}
else
{
- printf_filtered ("\t%10s %10s %10s %10s %9s %s\n",
- "Start Addr",
- " End Addr",
- " Size", " Offset", "Flags ", "File");
+ gdb_printf ("\t%10s %10s %10s %10s %9s %s\n",
+ "Start Addr",
+ " End Addr",
+ " Size", " Offset", "Flags ", "File");
}
}
@@ -572,23 +572,23 @@ nbsd_info_proc_mappings_entry (int addr_bit, ULONGEST kve_start,
{
if (addr_bit == 64)
{
- printf_filtered (" %18s %18s %10s %10s %9s %s\n",
- hex_string (kve_start),
- hex_string (kve_end),
- hex_string (kve_end - kve_start),
- hex_string (kve_offset),
- nbsd_vm_map_entry_flags (kve_flags, kve_protection),
- kve_path);
+ gdb_printf (" %18s %18s %10s %10s %9s %s\n",
+ hex_string (kve_start),
+ hex_string (kve_end),
+ hex_string (kve_end - kve_start),
+ hex_string (kve_offset),
+ nbsd_vm_map_entry_flags (kve_flags, kve_protection),
+ kve_path);
}
else
{
- printf_filtered ("\t%10s %10s %10s %10s %9s %s\n",
- hex_string (kve_start),
- hex_string (kve_end),
- hex_string (kve_end - kve_start),
- hex_string (kve_offset),
- nbsd_vm_map_entry_flags (kve_flags, kve_protection),
- kve_path);
+ gdb_printf ("\t%10s %10s %10s %10s %9s %s\n",
+ hex_string (kve_start),
+ hex_string (kve_end),
+ hex_string (kve_end - kve_start),
+ hex_string (kve_offset),
+ nbsd_vm_map_entry_flags (kve_flags, kve_protection),
+ kve_path);
}
}
diff --git a/gdb/nios2-tdep.c b/gdb/nios2-tdep.c
index 857c60d7e4e..159d31b2d0f 100644
--- a/gdb/nios2-tdep.c
+++ b/gdb/nios2-tdep.c
@@ -1222,10 +1222,10 @@ nios2_analyze_prologue (struct gdbarch *gdbarch, const CORE_ADDR start_pc,
int innermost = (this_frame ? (frame_relative_level (this_frame) == 0) : 1);
if (nios2_debug)
- fprintf_unfiltered (gdb_stdlog,
- "{ nios2_analyze_prologue start=%s, current=%s ",
- paddress (gdbarch, start_pc),
- paddress (gdbarch, current_pc));
+ gdb_printf (gdb_stdlog,
+ "{ nios2_analyze_prologue start=%s, current=%s ",
+ paddress (gdbarch, start_pc),
+ paddress (gdbarch, current_pc));
/* Set up the default values of the registers. */
nios2_setup_default (cache);
@@ -1252,7 +1252,7 @@ nios2_analyze_prologue (struct gdbarch *gdbarch, const CORE_ADDR start_pc,
memcpy (temp_value, value, sizeof (temp_value));
value = temp_value;
if (nios2_debug)
- fprintf_unfiltered (gdb_stdlog, "*");
+ gdb_printf (gdb_stdlog, "*");
}
op = nios2_fetch_insn (gdbarch, pc, &insn);
@@ -1265,9 +1265,9 @@ nios2_analyze_prologue (struct gdbarch *gdbarch, const CORE_ADDR start_pc,
if (nios2_debug)
{
if (op->size == 2)
- fprintf_unfiltered (gdb_stdlog, "[%04X]", insn & 0xffff);
+ gdb_printf (gdb_stdlog, "[%04X]", insn & 0xffff);
else
- fprintf_unfiltered (gdb_stdlog, "[%08X]", insn);
+ gdb_printf (gdb_stdlog, "[%08X]", insn);
}
/* The following instructions can appear in the prologue. */
@@ -1554,7 +1554,7 @@ nios2_analyze_prologue (struct gdbarch *gdbarch, const CORE_ADDR start_pc,
cache->return_regnum = NIOS2_EA_REGNUM;
if (nios2_debug)
- fprintf_unfiltered (gdb_stdlog, "\n-> retreg=%d, ", cache->return_regnum);
+ gdb_printf (gdb_stdlog, "\n-> retreg=%d, ", cache->return_regnum);
if (cache->reg_value[NIOS2_FP_REGNUM].reg == NIOS2_SP_REGNUM)
/* If the FP now holds an offset from the CFA then this is a
@@ -1571,7 +1571,7 @@ nios2_analyze_prologue (struct gdbarch *gdbarch, const CORE_ADDR start_pc,
/* Somehow the stack pointer has been corrupted.
We can't return. */
if (nios2_debug)
- fprintf_unfiltered (gdb_stdlog, "<can't reach cfa> }\n");
+ gdb_printf (gdb_stdlog, "<can't reach cfa> }\n");
return 0;
}
@@ -1598,7 +1598,7 @@ nios2_analyze_prologue (struct gdbarch *gdbarch, const CORE_ADDR start_pc,
if (ra == current_pc)
{
if (nios2_debug)
- fprintf_unfiltered
+ gdb_printf
(gdb_stdlog,
"<noreturn ADJUST %s, r31@r%d+?>, r%d@r%d+?> }\n",
paddress (gdbarch, cache->reg_value[base_reg].offset),
@@ -1660,8 +1660,8 @@ nios2_analyze_prologue (struct gdbarch *gdbarch, const CORE_ADDR start_pc,
}
if (nios2_debug)
- fprintf_unfiltered (gdb_stdlog, "cfa=%s }\n",
- paddress (gdbarch, cache->cfa));
+ gdb_printf (gdb_stdlog, "cfa=%s }\n",
+ paddress (gdbarch, cache->cfa));
return prologue_end;
}
diff --git a/gdb/nto-procfs.c b/gdb/nto-procfs.c
index da0feaedff9..61374c9fad4 100644
--- a/gdb/nto-procfs.c
+++ b/gdb/nto-procfs.c
@@ -220,9 +220,9 @@ nto_procfs_target::open (const char *arg, int from_tty)
if (nto_procfs_node == -1)
{
if (errno == ENOTSUP)
- printf_filtered ("QNX Net Manager not found.\n");
- printf_filtered ("Invalid QNX node %s: error %d (%s).\n", nodestr,
- errno, safe_strerror (errno));
+ gdb_printf ("QNX Net Manager not found.\n");
+ gdb_printf ("Invalid QNX node %s: error %d (%s).\n", nodestr,
+ errno, safe_strerror (errno));
xfree (nodestr);
nodestr = NULL;
nto_procfs_node = ND_LOCAL_NODE;
@@ -241,16 +241,16 @@ nto_procfs_target::open (const char *arg, int from_tty)
scoped_fd fd (open (nto_procfs_path, O_RDONLY));
if (fd.get () == -1)
{
- printf_filtered ("Error opening %s : %d (%s)\n", nto_procfs_path, errno,
- safe_strerror (errno));
+ gdb_printf ("Error opening %s : %d (%s)\n", nto_procfs_path, errno,
+ safe_strerror (errno));
error (_("Invalid procfs arg"));
}
sysinfo = (void *) buffer;
if (devctl (fd.get (), DCMD_PROC_SYSINFO, sysinfo, sizeof buffer, 0) != EOK)
{
- printf_filtered ("Error getting size: %d (%s)\n", errno,
- safe_strerror (errno));
+ gdb_printf ("Error getting size: %d (%s)\n", errno,
+ safe_strerror (errno));
error (_("Devctl failed."));
}
else
@@ -259,8 +259,8 @@ nto_procfs_target::open (const char *arg, int from_tty)
sysinfo = alloca (total_size);
if (sysinfo == NULL)
{
- printf_filtered ("Memory error: %d (%s)\n", errno,
- safe_strerror (errno));
+ gdb_printf ("Memory error: %d (%s)\n", errno,
+ safe_strerror (errno));
error (_("alloca failed."));
}
else
@@ -268,8 +268,8 @@ nto_procfs_target::open (const char *arg, int from_tty)
if (devctl (fd.get (), DCMD_PROC_SYSINFO, sysinfo, total_size, 0)
!= EOK)
{
- printf_filtered ("Error getting sysinfo: %d (%s)\n", errno,
- safe_strerror (errno));
+ gdb_printf ("Error getting sysinfo: %d (%s)\n", errno,
+ safe_strerror (errno));
error (_("Devctl failed."));
}
else
@@ -283,7 +283,7 @@ nto_procfs_target::open (const char *arg, int from_tty)
}
inf_child_target::open (arg, from_tty);
- printf_filtered ("Debugging using %s\n", nto_procfs_path);
+ gdb_printf ("Debugging using %s\n", nto_procfs_path);
}
static void
@@ -437,8 +437,8 @@ procfs_pidlist (const char *args, int from_tty)
gdb_dir_up dp (opendir (procfs_dir));
if (dp == NULL)
{
- fprintf_unfiltered (gdb_stderr, "failed to opendir \"%s\" - %d (%s)",
- procfs_dir, errno, safe_strerror (errno));
+ gdb_printf (gdb_stderr, "failed to opendir \"%s\" - %d (%s)",
+ procfs_dir, errno, safe_strerror (errno));
return;
}
@@ -464,17 +464,17 @@ procfs_pidlist (const char *args, int from_tty)
scoped_fd fd (open (buf, O_RDONLY));
if (fd.get () == -1)
{
- fprintf_unfiltered (gdb_stderr, "failed to open %s - %d (%s)\n",
- buf, errno, safe_strerror (errno));
+ gdb_printf (gdb_stderr, "failed to open %s - %d (%s)\n",
+ buf, errno, safe_strerror (errno));
continue;
}
pidinfo = (procfs_info *) buf;
if (devctl (fd.get (), DCMD_PROC_INFO, pidinfo, sizeof (buf), 0) != EOK)
{
- fprintf_unfiltered (gdb_stderr,
- "devctl DCMD_PROC_INFO failed - %d (%s)\n",
- errno, safe_strerror (errno));
+ gdb_printf (gdb_stderr,
+ "devctl DCMD_PROC_INFO failed - %d (%s)\n",
+ errno, safe_strerror (errno));
break;
}
num_threads = pidinfo->num_threads;
@@ -492,12 +492,12 @@ procfs_pidlist (const char *args, int from_tty)
{
const int err
= devctl (fd.get (), DCMD_PROC_TIDSTATUS, status, sizeof (buf), 0);
- printf_filtered ("%s - %d", name, pid);
+ gdb_printf ("%s - %d", name, pid);
if (err == EOK && status->tid != 0)
- printf_filtered ("/%d\n", status->tid);
+ gdb_printf ("/%d\n", status->tid);
else
{
- printf_filtered ("\n");
+ gdb_printf ("\n");
break;
}
}
@@ -629,22 +629,22 @@ procfs_meminfo (const char *args, int from_tty)
}
mapinfo_p->ino = 0;
- printf_filtered ("%s\n", printme.name);
- printf_filtered ("\ttext=%08x bytes @ 0x%08x\n", printme.text.size,
- printme.text.addr);
- printf_filtered ("\t\tflags=%08x\n", printme.text.flags);
- printf_filtered ("\t\tdebug=%08x\n", printme.text.debug_vaddr);
- printf_filtered ("\t\toffset=%s\n", phex (printme.text.offset, 8));
+ gdb_printf ("%s\n", printme.name);
+ gdb_printf ("\ttext=%08x bytes @ 0x%08x\n", printme.text.size,
+ printme.text.addr);
+ gdb_printf ("\t\tflags=%08x\n", printme.text.flags);
+ gdb_printf ("\t\tdebug=%08x\n", printme.text.debug_vaddr);
+ gdb_printf ("\t\toffset=%s\n", phex (printme.text.offset, 8));
if (printme.data.size)
{
- printf_filtered ("\tdata=%08x bytes @ 0x%08x\n", printme.data.size,
- printme.data.addr);
- printf_filtered ("\t\tflags=%08x\n", printme.data.flags);
- printf_filtered ("\t\tdebug=%08x\n", printme.data.debug_vaddr);
- printf_filtered ("\t\toffset=%s\n", phex (printme.data.offset, 8));
+ gdb_printf ("\tdata=%08x bytes @ 0x%08x\n", printme.data.size,
+ printme.data.addr);
+ gdb_printf ("\t\tflags=%08x\n", printme.data.flags);
+ gdb_printf ("\t\tdebug=%08x\n", printme.data.debug_vaddr);
+ gdb_printf ("\t\toffset=%s\n", phex (printme.data.offset, 8));
}
- printf_filtered ("\tdev=0x%x\n", printme.dev);
- printf_filtered ("\tino=0x%x\n", (unsigned int) printme.ino);
+ gdb_printf ("\tdev=0x%x\n", printme.dev);
+ gdb_printf ("\tino=0x%x\n", (unsigned int) printme.ino);
}
xfree (mapinfos);
return;
@@ -656,10 +656,10 @@ nto_procfs_target::files_info ()
{
struct inferior *inf = current_inferior ();
- printf_filtered ("\tUsing the running image of %s %s via %s.\n",
- inf->attach_flag ? "attached" : "child",
- target_pid_to_str (inferior_ptid).c_str (),
- (nodestr != NULL) ? nodestr : "local node");
+ gdb_printf ("\tUsing the running image of %s %s via %s.\n",
+ inf->attach_flag ? "attached" : "child",
+ target_pid_to_str (inferior_ptid).c_str (),
+ (nodestr != NULL) ? nodestr : "local node");
}
/* Target to_pid_to_exec_file implementation. */
@@ -1384,9 +1384,9 @@ nto_procfs_target::store_registers (struct regcache *regcache, int regno)
err = devctl (ctl_fd, dev_set, &reg, regsize, 0);
if (err != EOK)
- fprintf_unfiltered (gdb_stderr,
- "Warning unable to write regset %d: %s\n",
- regno, safe_strerror (err));
+ gdb_printf (gdb_stderr,
+ "Warning unable to write regset %d: %s\n",
+ regno, safe_strerror (err));
}
}
else
@@ -1409,9 +1409,9 @@ nto_procfs_target::store_registers (struct regcache *regcache, int regno)
err = devctl (ctl_fd, dev_set, &reg, regsize, 0);
if (err != EOK)
- fprintf_unfiltered (gdb_stderr,
- "Warning unable to write regset %d: %s\n", regno,
- safe_strerror (err));
+ gdb_printf (gdb_stderr,
+ "Warning unable to write regset %d: %s\n", regno,
+ safe_strerror (err));
}
}
diff --git a/gdb/objc-lang.c b/gdb/objc-lang.c
index 787e8d647ea..00c362c5c9c 100644
--- a/gdb/objc-lang.c
+++ b/gdb/objc-lang.c
@@ -37,7 +37,7 @@
#include "gdbcore.h"
#include "gdbcmd.h"
#include "frame.h"
-#include "gdb_regex.h"
+#include "gdbsupport/gdb_regex.h"
#include "regcache.h"
#include "block.h"
#include "infcall.h"
@@ -96,7 +96,7 @@ lookup_struct_typedef (const char *name, const struct block *block, int noerr)
else
error (_("No struct type named %s."), name);
}
- if (SYMBOL_TYPE (sym)->code () != TYPE_CODE_STRUCT)
+ if (sym->type ()->code () != TYPE_CODE_STRUCT)
{
if (noerr)
return 0;
@@ -210,7 +210,7 @@ value_nsstring (struct gdbarch *gdbarch, const char *ptr, int len)
if (sym == NULL)
type = builtin_type (gdbarch)->builtin_data_ptr;
else
- type = lookup_pointer_type(SYMBOL_TYPE (sym));
+ type = lookup_pointer_type(sym->type ());
deprecated_set_value_type (nsstringValue, type);
return nsstringValue;
@@ -621,8 +621,8 @@ info_selectors_command (const char *regexp, int from_tty)
}
if (matches)
{
- printf_filtered (_("Selectors matching \"%s\":\n\n"),
- regexp ? regexp : "*");
+ gdb_printf (_("Selectors matching \"%s\":\n\n"),
+ regexp ? regexp : "*");
sym_arr = XALLOCAVEC (struct symbol *, matches);
matches = 0;
@@ -666,13 +666,13 @@ info_selectors_command (const char *regexp, int from_tty)
*p++ = *name++;
*p++ = '\0';
/* Print in columns. */
- puts_filtered_tabular(asel, maxlen + 1, 0);
+ puts_tabular(asel, maxlen + 1, 0);
}
begin_line();
}
else
- printf_filtered (_("No selectors matching \"%s\"\n"),
- regexp ? regexp : "*");
+ gdb_printf (_("No selectors matching \"%s\"\n"),
+ regexp ? regexp : "*");
}
/*
@@ -763,8 +763,8 @@ info_classes_command (const char *regexp, int from_tty)
}
if (matches)
{
- printf_filtered (_("Classes matching \"%s\":\n\n"),
- regexp ? regexp : "*");
+ gdb_printf (_("Classes matching \"%s\":\n\n"),
+ regexp ? regexp : "*");
sym_arr = XALLOCAVEC (struct symbol *, matches);
matches = 0;
for (objfile *objfile : current_program_space->objfiles ())
@@ -800,12 +800,12 @@ info_classes_command (const char *regexp, int from_tty)
*p++ = *name++;
*p++ = '\0';
/* Print in columns. */
- puts_filtered_tabular(aclass, maxlen + 1, 0);
+ puts_tabular(aclass, maxlen + 1, 0);
}
begin_line();
}
else
- printf_filtered (_("No classes matching \"%s\"\n"), regexp ? regexp : "*");
+ gdb_printf (_("No classes matching \"%s\"\n"), regexp ? regexp : "*");
}
static char *
@@ -1181,12 +1181,12 @@ print_object_command (const char *args, int from_tty)
do
{ /* Read and print characters up to EOS. */
QUIT;
- printf_filtered ("%c", c);
+ gdb_printf ("%c", c);
read_memory (string_addr + i++, &c, 1);
} while (c != 0);
else
- printf_filtered(_("<object returns empty description>"));
- printf_filtered ("\n");
+ gdb_printf(_("<object returns empty description>"));
+ gdb_printf ("\n");
}
/* The data structure 'methcalls' is used to detect method calls (thru
@@ -1249,7 +1249,7 @@ find_objc_msgsend (void)
continue;
}
- methcalls[i].begin = BMSYMBOL_VALUE_ADDRESS (func);
+ methcalls[i].begin = func.value_address ();
methcalls[i].end = minimal_symbol_upper_bound (func);
}
}
diff --git a/gdb/objfiles.c b/gdb/objfiles.c
index 262009eeda3..3f18e98710b 100644
--- a/gdb/objfiles.c
+++ b/gdb/objfiles.c
@@ -36,7 +36,7 @@
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
#include "hashtab.h"
#include "breakpoint.h"
@@ -331,7 +331,7 @@ objfile::objfile (bfd *abfd, const char *name, objfile_flags flags_)
objfile_alloc_data (this);
- gdb::unique_xmalloc_ptr<char> name_holder;
+ std::string name_holder;
if (name == NULL)
{
gdb_assert (abfd == NULL);
@@ -344,7 +344,7 @@ objfile::objfile (bfd *abfd, const char *name, objfile_flags flags_)
else
{
name_holder = gdb_abspath (name);
- expanded_name = name_holder.get ();
+ expanded_name = name_holder.c_str ();
}
original_name = obstack_strdup (&objfile_obstack, expanded_name);
@@ -591,7 +591,7 @@ objfile::~objfile ()
{
struct symtab_and_line cursal = get_current_source_symtab_and_line ();
- if (cursal.symtab && SYMTAB_OBJFILE (cursal.symtab) == this)
+ if (cursal.symtab && cursal.symtab->compunit ()->objfile () == this)
clear_current_source_symtab_and_line ();
}
@@ -616,14 +616,11 @@ relocate_one_symbol (struct symbol *sym, struct objfile *objfile,
any symbols in STRUCT_DOMAIN or UNDEF_DOMAIN.
But I'm leaving out that test, on the theory that
they can't possibly pass the tests below. */
- if ((SYMBOL_CLASS (sym) == LOC_LABEL
- || SYMBOL_CLASS (sym) == LOC_STATIC)
+ if ((sym->aclass () == LOC_LABEL
+ || sym->aclass () == LOC_STATIC)
&& sym->section_index () >= 0)
- {
- SET_SYMBOL_VALUE_ADDRESS (sym,
- SYMBOL_VALUE_ADDRESS (sym)
- + delta[sym->section_index ()]);
- }
+ sym->set_value_address (sym->value_address ()
+ + delta[sym->section_index ()]);
}
/* Relocate OBJFILE to NEW_OFFSETS. There should be OBJFILE->NUM_SECTIONS
@@ -651,48 +648,45 @@ objfile_relocate1 (struct objfile *objfile,
{
for (compunit_symtab *cust : objfile->compunits ())
{
- for (symtab *s : compunit_filetabs (cust))
+ for (symtab *s : cust->filetabs ())
{
struct linetable *l;
/* First the line table. */
- l = SYMTAB_LINETABLE (s);
+ l = s->linetable ();
if (l)
{
for (int i = 0; i < l->nitems; ++i)
- l->item[i].pc += delta[COMPUNIT_BLOCK_LINE_SECTION (cust)];
+ l->item[i].pc += delta[cust->block_line_section ()];
}
}
}
for (compunit_symtab *cust : objfile->compunits ())
{
- const struct blockvector *bv = COMPUNIT_BLOCKVECTOR (cust);
- int block_line_section = COMPUNIT_BLOCK_LINE_SECTION (cust);
+ struct blockvector *bv = cust->blockvector ();
+ int block_line_section = cust->block_line_section ();
- if (BLOCKVECTOR_MAP (bv))
- addrmap_relocate (BLOCKVECTOR_MAP (bv), delta[block_line_section]);
+ if (bv->map () != nullptr)
+ addrmap_relocate (bv->map (), delta[block_line_section]);
- for (int i = 0; i < BLOCKVECTOR_NBLOCKS (bv); ++i)
+ for (block *b : bv->blocks ())
{
- struct block *b;
struct symbol *sym;
struct mdict_iterator miter;
- b = BLOCKVECTOR_BLOCK (bv, i);
- BLOCK_START (b) += delta[block_line_section];
- BLOCK_END (b) += delta[block_line_section];
+ b->set_start (b->start () + delta[block_line_section]);
+ b->set_end (b->end () + delta[block_line_section]);
- if (BLOCK_RANGES (b) != nullptr)
- for (int j = 0; j < BLOCK_NRANGES (b); j++)
- {
- BLOCK_RANGE_START (b, j) += delta[block_line_section];
- BLOCK_RANGE_END (b, j) += delta[block_line_section];
- }
+ for (blockrange &r : b->ranges ())
+ {
+ r.set_start (r.start () + delta[block_line_section]);
+ r.set_end (r.end () + delta[block_line_section]);
+ }
/* We only want to iterate over the local symbols, not any
symbols in included symtabs. */
- ALL_DICT_SYMBOLS (BLOCK_MULTIDICT (b), miter, sym)
+ ALL_DICT_SYMBOLS (b->multidict (), miter, sym)
{
relocate_one_symbol (sym, objfile, delta);
}
diff --git a/gdb/objfiles.h b/gdb/objfiles.h
index 27737dc99ca..8bd76705688 100644
--- a/gdb/objfiles.h
+++ b/gdb/objfiles.h
@@ -21,7 +21,7 @@
#define OBJFILES_H
#include "hashtab.h"
-#include "gdb_obstack.h" /* For obstack internals. */
+#include "gdbsupport/gdb_obstack.h" /* For obstack internals. */
#include "objfile-flags.h"
#include "symfile.h"
#include "progspace.h"
diff --git a/gdb/obsd-tdep.c b/gdb/obsd-tdep.c
index f9b967ac47d..eed327bf7a9 100644
--- a/gdb/obsd-tdep.c
+++ b/gdb/obsd-tdep.c
@@ -31,7 +31,7 @@ obsd_skip_solib_resolver (struct gdbarch *gdbarch, CORE_ADDR pc)
struct bound_minimal_symbol msym;
msym = lookup_minimal_symbol("_dl_bind", NULL, NULL);
- if (msym.minsym && BMSYMBOL_VALUE_ADDRESS (msym) == pc)
+ if (msym.minsym && msym.value_address () == pc)
return frame_unwind_caller_pc (get_current_frame ());
else
return find_solib_trampoline_target (get_current_frame (), pc);
diff --git a/gdb/observable.c b/gdb/observable.c
index 78f315793b6..0bc8697f137 100644
--- a/gdb/observable.c
+++ b/gdb/observable.c
@@ -79,6 +79,8 @@ DEFINE_OBSERVABLE (styling_changed);
DEFINE_OBSERVABLE (current_source_symtab_and_line_changed);
DEFINE_OBSERVABLE (gdb_exiting);
DEFINE_OBSERVABLE (connection_removed);
+DEFINE_OBSERVABLE (target_pre_wait);
+DEFINE_OBSERVABLE (target_post_wait);
} /* namespace observers */
} /* namespace gdb */
@@ -87,7 +89,7 @@ static void
show_observer_debug (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Observer debugging is %s.\n"), value);
+ gdb_printf (file, _("Observer debugging is %s.\n"), value);
}
void _initialize_observer ();
diff --git a/gdb/observable.h b/gdb/observable.h
index 0cdf4767f04..f426c1a761f 100644
--- a/gdb/observable.h
+++ b/gdb/observable.h
@@ -256,6 +256,12 @@ extern observable<int> gdb_exiting;
/* When a connection is removed. */
extern observable<process_stratum_target */* target */> connection_removed;
+/* About to enter target_wait (). */
+extern observable <ptid_t /* ptid */> target_pre_wait;
+
+/* About to leave target_wait (). */
+extern observable <ptid_t /* event_ptid */> target_post_wait;
+
} /* namespace observers */
} /* namespace gdb */
diff --git a/gdb/or1k-tdep.c b/gdb/or1k-tdep.c
index 1e01df223ad..2b906fa69d3 100644
--- a/gdb/or1k-tdep.c
+++ b/gdb/or1k-tdep.c
@@ -57,7 +57,7 @@ static void
show_or1k_debug (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("OpenRISC debugging is %s.\n"), value);
+ gdb_printf (file, _("OpenRISC debugging is %s.\n"), value);
}
@@ -471,8 +471,8 @@ or1k_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
{
struct symtab_and_line prologue_sal = find_pc_line (start_pc, 0);
struct compunit_symtab *compunit
- = SYMTAB_COMPUNIT (prologue_sal.symtab);
- const char *debug_format = COMPUNIT_DEBUGFORMAT (compunit);
+ = prologue_sal.symtab->compunit ();
+ const char *debug_format = compunit->debugformat ();
if ((NULL != debug_format)
&& (strlen ("dwarf") <= strlen (debug_format))
@@ -564,14 +564,14 @@ or1k_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
CORE_ADDR pc;
if (or1k_debug)
- fprintf_unfiltered (gdb_stdlog, "or1k_unwind_pc, next_frame=%d\n",
- frame_relative_level (next_frame));
+ gdb_printf (gdb_stdlog, "or1k_unwind_pc, next_frame=%d\n",
+ frame_relative_level (next_frame));
pc = frame_unwind_register_unsigned (next_frame, OR1K_NPC_REGNUM);
if (or1k_debug)
- fprintf_unfiltered (gdb_stdlog, "or1k_unwind_pc, pc=%s\n",
- paddress (gdbarch, pc));
+ gdb_printf (gdb_stdlog, "or1k_unwind_pc, pc=%s\n",
+ paddress (gdbarch, pc));
return pc;
}
@@ -584,14 +584,14 @@ or1k_unwind_sp (struct gdbarch *gdbarch, struct frame_info *next_frame)
CORE_ADDR sp;
if (or1k_debug)
- fprintf_unfiltered (gdb_stdlog, "or1k_unwind_sp, next_frame=%d\n",
- frame_relative_level (next_frame));
+ gdb_printf (gdb_stdlog, "or1k_unwind_sp, next_frame=%d\n",
+ frame_relative_level (next_frame));
sp = frame_unwind_register_unsigned (next_frame, OR1K_SP_REGNUM);
if (or1k_debug)
- fprintf_unfiltered (gdb_stdlog, "or1k_unwind_sp, sp=%s\n",
- paddress (gdbarch, sp));
+ gdb_printf (gdb_stdlog, "or1k_unwind_sp, sp=%s\n",
+ paddress (gdbarch, sp));
return sp;
}
@@ -904,9 +904,9 @@ or1k_frame_cache (struct frame_info *this_frame, void **prologue_cache)
CORE_ADDR end_addr;
if (or1k_debug)
- fprintf_unfiltered (gdb_stdlog,
- "or1k_frame_cache, prologue_cache = %s\n",
- host_address_to_string (*prologue_cache));
+ gdb_printf (gdb_stdlog,
+ "or1k_frame_cache, prologue_cache = %s\n",
+ host_address_to_string (*prologue_cache));
/* Nothing to do if we already have this info. */
if (NULL != *prologue_cache)
@@ -930,7 +930,7 @@ or1k_frame_cache (struct frame_info *this_frame, void **prologue_cache)
if (start_addr == 0)
{
if (or1k_debug)
- fprintf_unfiltered (gdb_stdlog, " couldn't find function\n");
+ gdb_printf (gdb_stdlog, " couldn't find function\n");
/* JPB: 28-Apr-11. This is a temporary patch, to get round GDB
crashing right at the beginning. Build the frame ID as best we
@@ -1091,10 +1091,10 @@ or1k_frame_cache (struct frame_info *this_frame, void **prologue_cache)
if (or1k_debug)
{
- fprintf_unfiltered (gdb_stdlog, " this_sp_for_id = %s\n",
- paddress (gdbarch, this_sp_for_id));
- fprintf_unfiltered (gdb_stdlog, " start_addr = %s\n",
- paddress (gdbarch, start_addr));
+ gdb_printf (gdb_stdlog, " this_sp_for_id = %s\n",
+ paddress (gdbarch, this_sp_for_id));
+ gdb_printf (gdb_stdlog, " start_addr = %s\n",
+ paddress (gdbarch, start_addr));
}
return info;
@@ -1260,19 +1260,7 @@ or1k_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
}
if (tdesc_data != NULL)
- {
- /* If we are using tdesc, register our own reggroups, otherwise we
- will used the defaults. */
- reggroup_add (gdbarch, general_reggroup);
- reggroup_add (gdbarch, system_reggroup);
- reggroup_add (gdbarch, float_reggroup);
- reggroup_add (gdbarch, vector_reggroup);
- reggroup_add (gdbarch, all_reggroup);
- reggroup_add (gdbarch, save_reggroup);
- reggroup_add (gdbarch, restore_reggroup);
-
- tdesc_use_registers (gdbarch, tdesc, std::move (tdesc_data));
- }
+ tdesc_use_registers (gdbarch, tdesc, std::move (tdesc_data));
/* Hook in ABI-specific overrides, if they have been registered. */
gdbarch_init_osabi (info, gdbarch);
@@ -1290,10 +1278,10 @@ or1k_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
if (NULL == tdep)
return; /* Nothing to report */
- fprintf_filtered (file, "or1k_dump_tdep: %d bytes per word\n",
- tdep->bytes_per_word);
- fprintf_filtered (file, "or1k_dump_tdep: %d bytes per address\n",
- tdep->bytes_per_address);
+ gdb_printf (file, "or1k_dump_tdep: %d bytes per word\n",
+ tdep->bytes_per_word);
+ gdb_printf (file, "or1k_dump_tdep: %d bytes per address\n",
+ tdep->bytes_per_address);
}
diff --git a/gdb/osabi.c b/gdb/osabi.c
index 40c86e782e7..bbd7635532f 100644
--- a/gdb/osabi.c
+++ b/gdb/osabi.c
@@ -638,17 +638,17 @@ show_osabi (struct ui_file *file, int from_tty, struct cmd_list_element *c,
const char *value)
{
if (user_osabi_state == osabi_auto)
- fprintf_filtered (file,
- _("The current OS ABI is \"auto\" "
- "(currently \"%s\").\n"),
- gdbarch_osabi_name (gdbarch_osabi (get_current_arch ())));
+ gdb_printf (file,
+ _("The current OS ABI is \"auto\" "
+ "(currently \"%s\").\n"),
+ gdbarch_osabi_name (gdbarch_osabi (get_current_arch ())));
else
- fprintf_filtered (file, _("The current OS ABI is \"%s\".\n"),
- gdbarch_osabi_name (user_selected_osabi));
+ gdb_printf (file, _("The current OS ABI is \"%s\".\n"),
+ gdbarch_osabi_name (user_selected_osabi));
if (GDB_OSABI_DEFAULT != GDB_OSABI_UNKNOWN)
- fprintf_filtered (file, _("The default OS ABI is \"%s\".\n"),
- gdbarch_osabi_name (GDB_OSABI_DEFAULT));
+ gdb_printf (file, _("The default OS ABI is \"%s\".\n"),
+ gdbarch_osabi_name (GDB_OSABI_DEFAULT));
}
void _initialize_gdb_osabi ();
@@ -666,11 +666,13 @@ _initialize_gdb_osabi ()
generic_elf_osabi_sniffer);
/* Register the "set osabi" command. */
+ user_osabi_state = osabi_auto;
+ set_osabi_string = gdb_osabi_available_names[0];
+ gdb_assert (strcmp (set_osabi_string, "auto") == 0);
add_setshow_enum_cmd ("osabi", class_support, gdb_osabi_available_names,
&set_osabi_string,
_("Set OS ABI of target."),
_("Show OS ABI of target."),
NULL, set_osabi, show_osabi,
&setlist, &showlist);
- user_osabi_state = osabi_auto;
}
diff --git a/gdb/p-exp.y b/gdb/p-exp.y
index 62b0a3be5a9..7c88df65e69 100644
--- a/gdb/p-exp.y
+++ b/gdb/p-exp.y
@@ -612,15 +612,15 @@ exp : THIS
block : BLOCKNAME
{
if ($1.sym.symbol != 0)
- $$ = SYMBOL_BLOCK_VALUE ($1.sym.symbol);
+ $$ = $1.sym.symbol->value_block ();
else
{
std::string copy = copy_name ($1.stoken);
struct symtab *tem =
lookup_symtab (copy.c_str ());
if (tem)
- $$ = BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (tem),
- STATIC_BLOCK);
+ $$ = (tem->compunit ()->blockvector ()
+ ->static_block ());
else
error (_("No file or function \"%s\"."),
copy.c_str ());
@@ -635,10 +635,10 @@ block : block COLONCOLON name
= lookup_symbol (copy.c_str (), $1,
VAR_DOMAIN, NULL).symbol;
- if (!tem || SYMBOL_CLASS (tem) != LOC_BLOCK)
+ if (!tem || tem->aclass () != LOC_BLOCK)
error (_("No function \"%s\" in specified context."),
copy.c_str ());
- $$ = SYMBOL_BLOCK_VALUE (tem); }
+ $$ = tem->value_block (); }
;
variable: block COLONCOLON name
@@ -690,7 +690,7 @@ variable: name_not_typename
pstate->block_tracker->update (sym);
pstate->push_new<var_value_operation> (sym);
- current_type = sym.symbol->type; }
+ current_type = sym.symbol->type (); }
else if ($1.is_a_field_of_this)
{
struct value * this_val;
@@ -802,10 +802,8 @@ static int
parse_number (struct parser_state *par_state,
const char *p, int len, int parsed_float, YYSTYPE *putithere)
{
- /* FIXME: Shouldn't these be unsigned? We don't deal with negative values
- here, and we do kind of silly things like cast to unsigned. */
- LONGEST n = 0;
- LONGEST prevn = 0;
+ ULONGEST n = 0;
+ ULONGEST prevn = 0;
ULONGEST un;
int i = 0;
@@ -854,7 +852,7 @@ parse_number (struct parser_state *par_state,
}
/* Handle base-switching prefixes 0x, 0t, 0d, 0. */
- if (p[0] == '0')
+ if (p[0] == '0' && len > 1)
switch (p[1])
{
case 'x':
@@ -932,7 +930,7 @@ parse_number (struct parser_state *par_state,
on 0x123456789 when LONGEST is 32 bits. */
if (c != 'l' && c != 'u' && n != 0)
{
- if ((unsigned_p && (ULONGEST) prevn >= (ULONGEST) n))
+ if (unsigned_p && prevn >= n)
error (_("Numeric constant too large."));
}
prevn = n;
@@ -950,7 +948,7 @@ parse_number (struct parser_state *par_state,
the case where it is we just always shift the value more than
once, with fewer bits each time. */
- un = (ULONGEST)n >> 2;
+ un = n >> 2;
if (long_p == 0
&& (un >> (gdbarch_int_bit (par_state->gdbarch ()) - 2)) == 0)
{
@@ -1544,7 +1542,7 @@ yylex (void)
/* Call lookup_symtab, not lookup_partial_symtab, in case there are
no psymtabs (coff, xcoff, or some future change to blow away the
psymtabs once once symbols are read). */
- if ((sym && SYMBOL_CLASS (sym) == LOC_BLOCK)
+ if ((sym && sym->aclass () == LOC_BLOCK)
|| lookup_symtab (tmp.c_str ()))
{
yylval.ssym.sym.symbol = sym;
@@ -1553,7 +1551,7 @@ yylex (void)
free (uptokstart);
return BLOCKNAME;
}
- if (sym && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
+ if (sym && sym->aclass () == LOC_TYPEDEF)
{
#if 1
/* Despite the following flaw, we need to keep this code enabled.
@@ -1622,7 +1620,7 @@ yylex (void)
VAR_DOMAIN, NULL).symbol;
if (cur_sym)
{
- if (SYMBOL_CLASS (cur_sym) == LOC_TYPEDEF)
+ if (cur_sym->aclass () == LOC_TYPEDEF)
{
best_sym = cur_sym;
pstate->lexptr = p;
@@ -1640,9 +1638,9 @@ yylex (void)
break;
}
- yylval.tsym.type = SYMBOL_TYPE (best_sym);
+ yylval.tsym.type = best_sym->type ();
#else /* not 0 */
- yylval.tsym.type = SYMBOL_TYPE (sym);
+ yylval.tsym.type = sym->type ();
#endif /* not 0 */
free (uptokstart);
return TYPENAME;
diff --git a/gdb/p-lang.c b/gdb/p-lang.c
index 70ff404bac3..1597e9cf2ff 100644
--- a/gdb/p-lang.c
+++ b/gdb/p-lang.c
@@ -152,21 +152,21 @@ pascal_language::print_one_char (int c, struct ui_file *stream,
if (c == '\'' || ((unsigned int) c <= 0xff && (PRINT_LITERAL_FORM (c))))
{
if (!(*in_quotes))
- fputs_filtered ("'", stream);
+ gdb_puts ("'", stream);
*in_quotes = 1;
if (c == '\'')
{
- fputs_filtered ("''", stream);
+ gdb_puts ("''", stream);
}
else
- fprintf_filtered (stream, "%c", c);
+ gdb_printf (stream, "%c", c);
}
else
{
if (*in_quotes)
- fputs_filtered ("'", stream);
+ gdb_puts ("'", stream);
*in_quotes = 0;
- fprintf_filtered (stream, "#%d", (unsigned int) c);
+ gdb_printf (stream, "#%d", (unsigned int) c);
}
}
@@ -180,7 +180,7 @@ pascal_language::printchar (int c, struct type *type,
print_one_char (c, stream, &in_quotes);
if (in_quotes)
- fputs_filtered ("'", stream);
+ gdb_puts ("'", stream);
}
@@ -249,7 +249,7 @@ pascal_language::printstr (struct ui_file *stream, struct type *elttype,
if (length == 0)
{
- fputs_filtered ("''", stream);
+ gdb_puts ("''", stream);
return;
}
@@ -266,7 +266,7 @@ pascal_language::printstr (struct ui_file *stream, struct type *elttype,
if (need_comma)
{
- fputs_filtered (", ", stream);
+ gdb_puts (", ", stream);
need_comma = 0;
}
@@ -287,13 +287,13 @@ pascal_language::printstr (struct ui_file *stream, struct type *elttype,
{
if (in_quotes)
{
- fputs_filtered ("', ", stream);
+ gdb_puts ("', ", stream);
in_quotes = 0;
}
printchar (current_char, elttype, stream);
- fprintf_filtered (stream, " %p[<repeats %u times>%p]",
- metadata_style.style ().ptr (),
- reps, nullptr);
+ gdb_printf (stream, " %p[<repeats %u times>%p]",
+ metadata_style.style ().ptr (),
+ reps, nullptr);
i = rep1 - 1;
things_printed += options->repeat_count_threshold;
need_comma = 1;
@@ -302,7 +302,7 @@ pascal_language::printstr (struct ui_file *stream, struct type *elttype,
{
if ((!in_quotes) && (PRINT_LITERAL_FORM (current_char)))
{
- fputs_filtered ("'", stream);
+ gdb_puts ("'", stream);
in_quotes = 1;
}
print_one_char (current_char, stream, &in_quotes);
@@ -312,10 +312,10 @@ pascal_language::printstr (struct ui_file *stream, struct type *elttype,
/* Terminate the quotes if necessary. */
if (in_quotes)
- fputs_filtered ("'", stream);
+ gdb_puts ("'", stream);
if (force_ellipses || i < length)
- fputs_filtered ("...", stream);
+ gdb_puts ("...", stream);
}
/* Single instance of the Pascal language class. */
diff --git a/gdb/p-lang.h b/gdb/p-lang.h
index 429ef23aea4..eae73e19346 100644
--- a/gdb/p-lang.h
+++ b/gdb/p-lang.h
@@ -116,7 +116,7 @@ public:
print_one_char (ch, stream, &in_quotes);
if (in_quotes)
- fputs_filtered ("'", stream);
+ gdb_puts ("'", stream);
}
/* See language.h. */
diff --git a/gdb/p-typeprint.c b/gdb/p-typeprint.c
index 468f0fdece1..f222f01b429 100644
--- a/gdb/p-typeprint.c
+++ b/gdb/p-typeprint.c
@@ -19,7 +19,7 @@
/* This file is derived from p-typeprint.c */
#include "defs.h"
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
#include "bfd.h" /* Binary File Description */
#include "symtab.h"
#include "gdbtypes.h"
@@ -55,13 +55,13 @@ pascal_language::print_type (struct type *type, const char *varstring,
type_print_varspec_prefix (type, stream, show, 0, flags);
}
/* first the name */
- fputs_filtered (varstring, stream);
+ gdb_puts (varstring, stream);
if ((varstring != NULL && *varstring != '\0')
&& !(code == TYPE_CODE_FUNC
|| code == TYPE_CODE_METHOD))
{
- fputs_filtered (" : ", stream);
+ gdb_puts (" : ", stream);
}
if (!(code == TYPE_CODE_FUNC
@@ -87,10 +87,10 @@ pascal_language::print_typedef (struct type *type, struct symbol *new_symbol,
struct ui_file *stream) const
{
type = check_typedef (type);
- fprintf_filtered (stream, "type ");
- fprintf_filtered (stream, "%s = ", new_symbol->print_name ());
+ gdb_printf (stream, "type ");
+ gdb_printf (stream, "%s = ", new_symbol->print_name ());
type_print (type, "", stream, 0);
- fprintf_filtered (stream, ";");
+ gdb_printf (stream, ";");
}
/* See p-lang.h. */
@@ -104,16 +104,16 @@ pascal_language::type_print_derivation_info (struct ui_file *stream,
for (i = 0; i < TYPE_N_BASECLASSES (type); i++)
{
- fputs_filtered (i == 0 ? ": " : ", ", stream);
- fprintf_filtered (stream, "%s%s ",
- BASETYPE_VIA_PUBLIC (type, i) ? "public" : "private",
- BASETYPE_VIA_VIRTUAL (type, i) ? " virtual" : "");
+ gdb_puts (i == 0 ? ": " : ", ", stream);
+ gdb_printf (stream, "%s%s ",
+ BASETYPE_VIA_PUBLIC (type, i) ? "public" : "private",
+ BASETYPE_VIA_VIRTUAL (type, i) ? " virtual" : "");
name = TYPE_BASECLASS (type, i)->name ();
- fprintf_filtered (stream, "%s", name ? name : "(null)");
+ gdb_printf (stream, "%s", name ? name : "(null)");
}
if (i > 0)
{
- fputs_filtered (" ", stream);
+ gdb_puts (" ", stream);
}
}
@@ -132,11 +132,11 @@ pascal_language::type_print_method_args (const char *physname,
physname += 6;
}
- fputs_filtered (methodname, stream);
+ gdb_puts (methodname, stream);
if (physname && (*physname != 0))
{
- fputs_filtered (" (", stream);
+ gdb_puts (" (", stream);
/* We must demangle this. */
while (isdigit (physname[0]))
{
@@ -152,15 +152,15 @@ pascal_language::type_print_method_args (const char *physname,
physname += len;
for (j = 0; j < i; ++j)
- fputc_filtered (physname[j], stream);
+ gdb_putc (physname[j], stream);
physname += i;
if (physname[0] != 0)
{
- fputs_filtered (", ", stream);
+ gdb_puts (", ", stream);
}
}
- fputs_filtered (")", stream);
+ gdb_puts (")", stream);
}
}
@@ -183,7 +183,7 @@ pascal_language::type_print_varspec_prefix (struct type *type,
switch (type->code ())
{
case TYPE_CODE_PTR:
- fprintf_filtered (stream, "^");
+ gdb_printf (stream, "^");
type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, 0, 1,
flags);
break; /* Pointer should be handled normally
@@ -191,58 +191,58 @@ pascal_language::type_print_varspec_prefix (struct type *type,
case TYPE_CODE_METHOD:
if (passed_a_ptr)
- fprintf_filtered (stream, "(");
+ gdb_printf (stream, "(");
if (TYPE_TARGET_TYPE (type) != NULL
&& TYPE_TARGET_TYPE (type)->code () != TYPE_CODE_VOID)
{
- fprintf_filtered (stream, "function ");
+ gdb_printf (stream, "function ");
}
else
{
- fprintf_filtered (stream, "procedure ");
+ gdb_printf (stream, "procedure ");
}
if (passed_a_ptr)
{
- fprintf_filtered (stream, " ");
+ gdb_printf (stream, " ");
type_print_base (TYPE_SELF_TYPE (type),
stream, 0, passed_a_ptr, flags);
- fprintf_filtered (stream, "::");
+ gdb_printf (stream, "::");
}
break;
case TYPE_CODE_REF:
type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, 0, 1,
flags);
- fprintf_filtered (stream, "&");
+ gdb_printf (stream, "&");
break;
case TYPE_CODE_FUNC:
if (passed_a_ptr)
- fprintf_filtered (stream, "(");
+ gdb_printf (stream, "(");
if (TYPE_TARGET_TYPE (type) != NULL
&& TYPE_TARGET_TYPE (type)->code () != TYPE_CODE_VOID)
{
- fprintf_filtered (stream, "function ");
+ gdb_printf (stream, "function ");
}
else
{
- fprintf_filtered (stream, "procedure ");
+ gdb_printf (stream, "procedure ");
}
break;
case TYPE_CODE_ARRAY:
if (passed_a_ptr)
- fprintf_filtered (stream, "(");
- fprintf_filtered (stream, "array ");
+ gdb_printf (stream, "(");
+ gdb_printf (stream, "array ");
if (TYPE_LENGTH (TYPE_TARGET_TYPE (type)) > 0
&& type->bounds ()->high.kind () != PROP_UNDEFINED)
- fprintf_filtered (stream, "[%s..%s] ",
- plongest (type->bounds ()->low.const_val ()),
- plongest (type->bounds ()->high.const_val ()));
- fprintf_filtered (stream, "of ");
+ gdb_printf (stream, "[%s..%s] ",
+ plongest (type->bounds ()->low.const_val ()),
+ plongest (type->bounds ()->high.const_val ()));
+ gdb_printf (stream, "of ");
break;
case TYPE_CODE_UNDEF:
@@ -280,19 +280,19 @@ pascal_language::print_func_args (struct type *type, struct ui_file *stream,
if (len)
{
- fprintf_filtered (stream, "(");
+ gdb_printf (stream, "(");
}
for (i = 0; i < len; i++)
{
if (i > 0)
{
- fputs_filtered (", ", stream);
- wrap_here (" ");
+ gdb_puts (", ", stream);
+ stream->wrap_here (4);
}
/* Can we find if it is a var parameter ??
if ( TYPE_FIELD(type, i) == )
{
- fprintf_filtered (stream, "var ");
+ gdb_printf (stream, "var ");
} */
print_type (type->field (i).type (), "" /* TYPE_FIELD_NAME
seems invalid! */
@@ -300,7 +300,7 @@ pascal_language::print_func_args (struct type *type, struct ui_file *stream,
}
if (len)
{
- fprintf_filtered (stream, ")");
+ gdb_printf (stream, ")");
}
}
@@ -316,7 +316,7 @@ pascal_language::type_print_func_varspec_suffix (struct type *type,
if (TYPE_TARGET_TYPE (type) == NULL
|| TYPE_TARGET_TYPE (type)->code () != TYPE_CODE_VOID)
{
- fprintf_filtered (stream, " : ");
+ gdb_printf (stream, " : ");
type_print_varspec_prefix (TYPE_TARGET_TYPE (type),
stream, 0, 0, flags);
@@ -352,12 +352,12 @@ pascal_language::type_print_varspec_suffix (struct type *type,
{
case TYPE_CODE_ARRAY:
if (passed_a_ptr)
- fprintf_filtered (stream, ")");
+ gdb_printf (stream, ")");
break;
case TYPE_CODE_METHOD:
if (passed_a_ptr)
- fprintf_filtered (stream, ")");
+ gdb_printf (stream, ")");
type_print_method_args ("", "", stream);
type_print_func_varspec_suffix (type, stream, show,
passed_a_ptr, 0, flags);
@@ -371,7 +371,7 @@ pascal_language::type_print_varspec_suffix (struct type *type,
case TYPE_CODE_FUNC:
if (passed_a_ptr)
- fprintf_filtered (stream, ")");
+ gdb_printf (stream, ")");
if (!demangled_args)
print_func_args (type, stream, flags);
type_print_func_varspec_suffix (type, stream, show,
@@ -419,7 +419,7 @@ pascal_language::type_print_base (struct type *type, struct ui_file *stream, int
section_type;
QUIT;
- wrap_here (" ");
+ stream->wrap_here (4);
if (type == NULL)
{
fputs_styled ("<type unknown>", metadata_style.style (), stream);
@@ -430,8 +430,8 @@ pascal_language::type_print_base (struct type *type, struct ui_file *stream, int
if ((type->code () == TYPE_CODE_PTR)
&& (TYPE_TARGET_TYPE (type)->code () == TYPE_CODE_VOID))
{
- fputs_filtered (type->name () ? type->name () : "pointer",
- stream);
+ gdb_puts (type->name () ? type->name () : "pointer",
+ stream);
return;
}
/* When SHOW is zero or less, and there is a valid type name, then always
@@ -440,7 +440,7 @@ pascal_language::type_print_base (struct type *type, struct ui_file *stream, int
if (show <= 0
&& type->name () != NULL)
{
- fputs_filtered (type->name (), stream);
+ gdb_puts (type->name (), stream);
return;
}
@@ -465,48 +465,48 @@ pascal_language::type_print_base (struct type *type, struct ui_file *stream, int
case TYPE_CODE_STRUCT:
if (type->name () != NULL)
{
- fputs_filtered (type->name (), stream);
- fputs_filtered (" = ", stream);
+ gdb_puts (type->name (), stream);
+ gdb_puts (" = ", stream);
}
if (HAVE_CPLUS_STRUCT (type))
{
- fprintf_filtered (stream, "class ");
+ gdb_printf (stream, "class ");
}
else
{
- fprintf_filtered (stream, "record ");
+ gdb_printf (stream, "record ");
}
goto struct_union;
case TYPE_CODE_UNION:
if (type->name () != NULL)
{
- fputs_filtered (type->name (), stream);
- fputs_filtered (" = ", stream);
+ gdb_puts (type->name (), stream);
+ gdb_puts (" = ", stream);
}
- fprintf_filtered (stream, "case <?> of ");
+ gdb_printf (stream, "case <?> of ");
struct_union:
- wrap_here (" ");
+ stream->wrap_here (4);
if (show < 0)
{
/* If we just printed a tag name, no need to print anything else. */
if (type->name () == NULL)
- fprintf_filtered (stream, "{...}");
+ gdb_printf (stream, "{...}");
}
else if (show > 0 || type->name () == NULL)
{
type_print_derivation_info (stream, type);
- fprintf_filtered (stream, "\n");
+ gdb_printf (stream, "\n");
if ((type->num_fields () == 0) && (TYPE_NFN_FIELDS (type) == 0))
{
if (type->is_stub ())
- fprintf_filtered (stream, "%*s<incomplete type>\n",
- level + 4, "");
+ gdb_printf (stream, "%*s<incomplete type>\n",
+ level + 4, "");
else
- fprintf_filtered (stream, "%*s<no data fields>\n",
- level + 4, "");
+ gdb_printf (stream, "%*s<no data fields>\n",
+ level + 4, "");
}
/* Start off with no specific section type, so we can print
@@ -537,8 +537,8 @@ pascal_language::type_print_base (struct type *type, struct ui_file *stream, int
if (section_type != s_protected)
{
section_type = s_protected;
- fprintf_filtered (stream, "%*sprotected\n",
- level + 2, "");
+ gdb_printf (stream, "%*sprotected\n",
+ level + 2, "");
}
}
else if (TYPE_FIELD_PRIVATE (type, i))
@@ -546,8 +546,8 @@ pascal_language::type_print_base (struct type *type, struct ui_file *stream, int
if (section_type != s_private)
{
section_type = s_private;
- fprintf_filtered (stream, "%*sprivate\n",
- level + 2, "");
+ gdb_printf (stream, "%*sprivate\n",
+ level + 2, "");
}
}
else
@@ -555,15 +555,15 @@ pascal_language::type_print_base (struct type *type, struct ui_file *stream, int
if (section_type != s_public)
{
section_type = s_public;
- fprintf_filtered (stream, "%*spublic\n",
- level + 2, "");
+ gdb_printf (stream, "%*spublic\n",
+ level + 2, "");
}
}
}
- print_spaces_filtered (level + 4, stream);
+ print_spaces (level + 4, stream);
if (field_is_static (&type->field (i)))
- fprintf_filtered (stream, "static ");
+ gdb_printf (stream, "static ");
print_type (type->field (i).type (),
type->field (i).name (),
stream, show - 1, level + 4, flags);
@@ -575,16 +575,16 @@ pascal_language::type_print_base (struct type *type, struct ui_file *stream, int
unnamed fields. This would lead to misleading
results if the compiler does not put out fields
for such things (I don't know what it does). */
- fprintf_filtered (stream, " : %d",
- TYPE_FIELD_BITSIZE (type, i));
+ gdb_printf (stream, " : %d",
+ TYPE_FIELD_BITSIZE (type, i));
}
- fprintf_filtered (stream, ";\n");
+ gdb_printf (stream, ";\n");
}
/* If there are both fields and methods, put a space between. */
len = TYPE_NFN_FIELDS (type);
if (len && section_type != s_none)
- fprintf_filtered (stream, "\n");
+ gdb_printf (stream, "\n");
/* Object pascal: print out the methods. */
@@ -610,8 +610,8 @@ pascal_language::type_print_base (struct type *type, struct ui_file *stream, int
if (section_type != s_protected)
{
section_type = s_protected;
- fprintf_filtered (stream, "%*sprotected\n",
- level + 2, "");
+ gdb_printf (stream, "%*sprotected\n",
+ level + 2, "");
}
}
else if (TYPE_FN_FIELD_PRIVATE (f, j))
@@ -619,8 +619,8 @@ pascal_language::type_print_base (struct type *type, struct ui_file *stream, int
if (section_type != s_private)
{
section_type = s_private;
- fprintf_filtered (stream, "%*sprivate\n",
- level + 2, "");
+ gdb_printf (stream, "%*sprivate\n",
+ level + 2, "");
}
}
else
@@ -628,38 +628,38 @@ pascal_language::type_print_base (struct type *type, struct ui_file *stream, int
if (section_type != s_public)
{
section_type = s_public;
- fprintf_filtered (stream, "%*spublic\n",
- level + 2, "");
+ gdb_printf (stream, "%*spublic\n",
+ level + 2, "");
}
}
- print_spaces_filtered (level + 4, stream);
+ print_spaces (level + 4, stream);
if (TYPE_FN_FIELD_STATIC_P (f, j))
- fprintf_filtered (stream, "static ");
+ gdb_printf (stream, "static ");
if (TYPE_TARGET_TYPE (TYPE_FN_FIELD_TYPE (f, j)) == 0)
{
/* Keep GDB from crashing here. */
- fprintf_filtered (stream, "<undefined type> %s;\n",
- TYPE_FN_FIELD_PHYSNAME (f, j));
+ gdb_printf (stream, "<undefined type> %s;\n",
+ TYPE_FN_FIELD_PHYSNAME (f, j));
break;
}
if (is_constructor)
{
- fprintf_filtered (stream, "constructor ");
+ gdb_printf (stream, "constructor ");
}
else if (is_destructor)
{
- fprintf_filtered (stream, "destructor ");
+ gdb_printf (stream, "destructor ");
}
else if (TYPE_TARGET_TYPE (TYPE_FN_FIELD_TYPE (f, j)) != 0
&& TYPE_TARGET_TYPE (TYPE_FN_FIELD_TYPE(f, j))->code () != TYPE_CODE_VOID)
{
- fprintf_filtered (stream, "function ");
+ gdb_printf (stream, "function ");
}
else
{
- fprintf_filtered (stream, "procedure ");
+ gdb_printf (stream, "procedure ");
}
/* This does not work, no idea why !! */
@@ -668,72 +668,72 @@ pascal_language::type_print_base (struct type *type, struct ui_file *stream, int
if (TYPE_TARGET_TYPE (TYPE_FN_FIELD_TYPE (f, j)) != 0
&& TYPE_TARGET_TYPE (TYPE_FN_FIELD_TYPE(f, j))->code () != TYPE_CODE_VOID)
{
- fputs_filtered (" : ", stream);
+ gdb_puts (" : ", stream);
type_print (TYPE_TARGET_TYPE (TYPE_FN_FIELD_TYPE (f, j)),
"", stream, -1);
}
if (TYPE_FN_FIELD_VIRTUAL_P (f, j))
- fprintf_filtered (stream, "; virtual");
+ gdb_printf (stream, "; virtual");
- fprintf_filtered (stream, ";\n");
+ gdb_printf (stream, ";\n");
}
}
- fprintf_filtered (stream, "%*send", level, "");
+ gdb_printf (stream, "%*send", level, "");
}
break;
case TYPE_CODE_ENUM:
if (type->name () != NULL)
{
- fputs_filtered (type->name (), stream);
+ gdb_puts (type->name (), stream);
if (show > 0)
- fputs_filtered (" ", stream);
+ gdb_puts (" ", stream);
}
/* enum is just defined by
type enume_name = (enum_member1,enum_member2,...) */
- fprintf_filtered (stream, " = ");
- wrap_here (" ");
+ gdb_printf (stream, " = ");
+ stream->wrap_here (4);
if (show < 0)
{
/* If we just printed a tag name, no need to print anything else. */
if (type->name () == NULL)
- fprintf_filtered (stream, "(...)");
+ gdb_printf (stream, "(...)");
}
else if (show > 0 || type->name () == NULL)
{
- fprintf_filtered (stream, "(");
+ gdb_printf (stream, "(");
len = type->num_fields ();
lastval = 0;
for (i = 0; i < len; i++)
{
QUIT;
if (i)
- fprintf_filtered (stream, ", ");
- wrap_here (" ");
- fputs_filtered (type->field (i).name (), stream);
+ gdb_printf (stream, ", ");
+ stream->wrap_here (4);
+ gdb_puts (type->field (i).name (), stream);
if (lastval != type->field (i).loc_enumval ())
{
- fprintf_filtered (stream,
- " := %s",
- plongest (type->field (i).loc_enumval ()));
+ gdb_printf (stream,
+ " := %s",
+ plongest (type->field (i).loc_enumval ()));
lastval = type->field (i).loc_enumval ();
}
lastval++;
}
- fprintf_filtered (stream, ")");
+ gdb_printf (stream, ")");
}
break;
case TYPE_CODE_VOID:
- fprintf_filtered (stream, "void");
+ gdb_printf (stream, "void");
break;
case TYPE_CODE_UNDEF:
- fprintf_filtered (stream, "record <unknown>");
+ gdb_printf (stream, "record <unknown>");
break;
case TYPE_CODE_ERROR:
- fprintf_filtered (stream, "%s", TYPE_ERROR_NAME (type));
+ gdb_printf (stream, "%s", TYPE_ERROR_NAME (type));
break;
/* this probably does not work for enums. */
@@ -742,19 +742,19 @@ pascal_language::type_print_base (struct type *type, struct ui_file *stream, int
struct type *target = TYPE_TARGET_TYPE (type);
print_type_scalar (target, type->bounds ()->low.const_val (), stream);
- fputs_filtered ("..", stream);
+ gdb_puts ("..", stream);
print_type_scalar (target, type->bounds ()->high.const_val (), stream);
}
break;
case TYPE_CODE_SET:
- fputs_filtered ("set of ", stream);
+ gdb_puts ("set of ", stream);
print_type (type->index_type (), "", stream,
show - 1, level, flags);
break;
case TYPE_CODE_STRING:
- fputs_filtered ("String", stream);
+ gdb_puts ("String", stream);
break;
default:
@@ -764,7 +764,7 @@ pascal_language::type_print_base (struct type *type, struct ui_file *stream, int
is no type name, then complain. */
if (type->name () != NULL)
{
- fputs_filtered (type->name (), stream);
+ gdb_puts (type->name (), stream);
}
else
{
diff --git a/gdb/p-valprint.c b/gdb/p-valprint.c
index d4a3971103c..43c286d6472 100644
--- a/gdb/p-valprint.c
+++ b/gdb/p-valprint.c
@@ -20,7 +20,7 @@
/* This file is derived from c-valprint.c */
#include "defs.h"
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
#include "symtab.h"
#include "gdbtypes.h"
#include "expression.h"
@@ -122,20 +122,20 @@ pascal_language::value_print_inner (struct value *val,
}
else
{
- fprintf_filtered (stream, "{");
+ gdb_printf (stream, "{");
/* If this is a virtual function table, print the 0th
entry specially, and the rest of the members normally. */
if (pascal_object_is_vtbl_ptr_type (elttype))
{
i = 1;
- fprintf_filtered (stream, "%d vtable entries", len - 1);
+ gdb_printf (stream, "%d vtable entries", len - 1);
}
else
{
i = 0;
}
value_print_array_elements (val, stream, recurse, options, i);
- fprintf_filtered (stream, "}");
+ gdb_printf (stream, "}");
}
break;
}
@@ -176,7 +176,7 @@ pascal_language::value_print_inner (struct value *val,
if (options->addressprint && options->format != 's')
{
- fputs_filtered (paddress (gdbarch, addr), stream);
+ gdb_puts (paddress (gdbarch, addr), stream);
want_space = 1;
}
@@ -191,7 +191,7 @@ pascal_language::value_print_inner (struct value *val,
&& addr != 0)
{
if (want_space)
- fputs_filtered (" ", stream);
+ gdb_puts (" ", stream);
/* No wide string yet. */
i = val_print_string (elttype, NULL, addr, -1, stream, options);
}
@@ -208,7 +208,7 @@ pascal_language::value_print_inner (struct value *val,
gdb_byte *buffer;
if (want_space)
- fputs_filtered (" ", stream);
+ gdb_puts (" ", stream);
buffer = (gdb_byte *) xmalloc (length_size);
read_memory (addr + length_pos, buffer, length_size);
string_length = extract_unsigned_integer (buffer, length_size,
@@ -228,13 +228,13 @@ pascal_language::value_print_inner (struct value *val,
/* If 'symbol_print' is set, we did the work above. */
if (!options->symbol_print
&& (msymbol.minsym != NULL)
- && (vt_address == BMSYMBOL_VALUE_ADDRESS (msymbol)))
+ && (vt_address == msymbol.value_address ()))
{
if (want_space)
- fputs_filtered (" ", stream);
- fputs_filtered ("<", stream);
- fputs_filtered (msymbol.minsym->print_name (), stream);
- fputs_filtered (">", stream);
+ gdb_puts (" ", stream);
+ gdb_puts ("<", stream);
+ gdb_puts (msymbol.minsym->print_name (), stream);
+ gdb_puts (">", stream);
want_space = 1;
}
if (vt_address && options->vtblprint)
@@ -244,7 +244,7 @@ pascal_language::value_print_inner (struct value *val,
struct type *wtype;
if (want_space)
- fputs_filtered (" ", stream);
+ gdb_puts (" ", stream);
if (msymbol.minsym != NULL)
{
@@ -255,7 +255,7 @@ pascal_language::value_print_inner (struct value *val,
if (wsym)
{
- wtype = SYMBOL_TYPE (wsym);
+ wtype = wsym->type ();
}
else
{
@@ -266,8 +266,8 @@ pascal_language::value_print_inner (struct value *val,
current_language);
if (options->prettyformat)
{
- fprintf_filtered (stream, "\n");
- print_spaces_filtered (2 + 2 * recurse, stream);
+ gdb_printf (stream, "\n");
+ print_spaces (2 + 2 * recurse, stream);
}
}
}
@@ -292,7 +292,7 @@ pascal_language::value_print_inner (struct value *val,
case TYPE_CODE_UNION:
if (recurse && !options->unionprint)
{
- fprintf_filtered (stream, "{...}");
+ gdb_printf (stream, "{...}");
break;
}
/* Fall through. */
@@ -313,7 +313,7 @@ pascal_language::value_print_inner (struct value *val,
}
else
{
- if (pascal_is_string_type (type, &length_pos, &length_size,
+ if (pascal_is_string_type (type, &length_pos, &length_size,
&string_pos, &char_type, NULL) > 0)
{
len = extract_unsigned_integer (valaddr + length_pos,
@@ -341,7 +341,7 @@ pascal_language::value_print_inner (struct value *val,
LONGEST low_bound, high_bound;
int need_comma = 0;
- fputs_filtered ("[", stream);
+ gdb_puts ("[", stream);
int bound_info = (get_discrete_bounds (range, &low_bound, &high_bound)
? 0 : -1);
@@ -372,7 +372,7 @@ pascal_language::value_print_inner (struct value *val,
if (element)
{
if (need_comma)
- fputs_filtered (", ", stream);
+ gdb_puts (", ", stream);
print_type_scalar (range, i, stream);
need_comma = 1;
@@ -381,7 +381,7 @@ pascal_language::value_print_inner (struct value *val,
{
int j = i;
- fputs_filtered ("..", stream);
+ gdb_puts ("..", stream);
while (i + 1 <= high_bound
&& value_bit_index (type, valaddr, ++i))
j = i;
@@ -390,7 +390,7 @@ pascal_language::value_print_inner (struct value *val,
}
}
done:
- fputs_filtered ("]", stream);
+ gdb_puts ("]", stream);
}
break;
@@ -430,9 +430,9 @@ pascal_language::value_print (struct value *val, struct ui_file *stream,
}
else
{
- fprintf_filtered (stream, "(");
+ gdb_printf (stream, "(");
type_print (type, "", stream, -1);
- fprintf_filtered (stream, ") ");
+ gdb_printf (stream, ") ");
}
}
common_val_print (val, stream, 0, &opts, current_language);
@@ -443,8 +443,8 @@ static void
show_pascal_static_field_print (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Printing of pascal static members is %s.\n"),
- value);
+ gdb_printf (file, _("Printing of pascal static members is %s.\n"),
+ value);
}
static struct obstack dont_print_vb_obstack;
@@ -520,7 +520,7 @@ pascal_object_print_value_fields (struct value *val, struct ui_file *stream,
struct type *type = check_typedef (value_type (val));
- fprintf_filtered (stream, "{");
+ gdb_printf (stream, "{");
len = type->num_fields ();
n_baseclasses = TYPE_N_BASECLASSES (type);
@@ -553,45 +553,45 @@ pascal_object_print_value_fields (struct value *val, struct ui_file *stream,
&& field_is_static (&type->field (i)))
continue;
if (fields_seen)
- fprintf_filtered (stream, ", ");
+ gdb_printf (stream, ", ");
else if (n_baseclasses > 0)
{
if (options->prettyformat)
{
- fprintf_filtered (stream, "\n");
- print_spaces_filtered (2 + 2 * recurse, stream);
- fputs_filtered ("members of ", stream);
- fputs_filtered (type->name (), stream);
- fputs_filtered (": ", stream);
+ gdb_printf (stream, "\n");
+ print_spaces (2 + 2 * recurse, stream);
+ gdb_puts ("members of ", stream);
+ gdb_puts (type->name (), stream);
+ gdb_puts (": ", stream);
}
}
fields_seen = 1;
if (options->prettyformat)
{
- fprintf_filtered (stream, "\n");
- print_spaces_filtered (2 + 2 * recurse, stream);
+ gdb_printf (stream, "\n");
+ print_spaces (2 + 2 * recurse, stream);
}
else
{
- wrap_here (n_spaces (2 + 2 * recurse));
+ stream->wrap_here (2 + 2 * recurse);
}
annotate_field_begin (type->field (i).type ());
if (field_is_static (&type->field (i)))
{
- fputs_filtered ("static ", stream);
- fprintf_symbol_filtered (stream,
- type->field (i).name (),
- current_language->la_language,
- DMGL_PARAMS | DMGL_ANSI);
+ gdb_puts ("static ", stream);
+ fprintf_symbol (stream,
+ type->field (i).name (),
+ current_language->la_language,
+ DMGL_PARAMS | DMGL_ANSI);
}
else
fputs_styled (type->field (i).name (),
variable_name_style.style (), stream);
annotate_field_name_end ();
- fputs_filtered (" = ", stream);
+ gdb_puts (" = ", stream);
annotate_field_value ();
if (!field_is_static (&type->field (i))
@@ -670,11 +670,11 @@ pascal_object_print_value_fields (struct value *val, struct ui_file *stream,
if (options->prettyformat)
{
- fprintf_filtered (stream, "\n");
- print_spaces_filtered (2 * recurse, stream);
+ gdb_printf (stream, "\n");
+ print_spaces (2 * recurse, stream);
}
}
- fprintf_filtered (stream, "}");
+ gdb_printf (stream, "}");
}
/* Special val_print routine to avoid printing multiple copies of virtual
@@ -761,15 +761,15 @@ pascal_object_print_value (struct value *val, struct ui_file *stream,
if (options->prettyformat)
{
- fprintf_filtered (stream, "\n");
- print_spaces_filtered (2 * recurse, stream);
+ gdb_printf (stream, "\n");
+ print_spaces (2 * recurse, stream);
}
- fputs_filtered ("<", stream);
+ gdb_puts ("<", stream);
/* Not sure what the best notation is in the case where there is no
baseclass name. */
- fputs_filtered (basename ? basename : "", stream);
- fputs_filtered ("> = ", stream);
+ gdb_puts (basename ? basename : "", stream);
+ gdb_puts ("> = ", stream);
if (skip < 0)
val_print_unavailable (stream);
@@ -780,7 +780,7 @@ pascal_object_print_value (struct value *val, struct ui_file *stream,
(base_value, stream, recurse, options,
(struct type **) obstack_base (&dont_print_vb_obstack),
0);
- fputs_filtered (", ", stream);
+ gdb_puts (", ", stream);
flush_it:
;
diff --git a/gdb/pager.h b/gdb/pager.h
new file mode 100644
index 00000000000..d2a3a2b8ec8
--- /dev/null
+++ b/gdb/pager.h
@@ -0,0 +1,91 @@
+/* Output pager for gdb
+ Copyright (C) 2021, 2022 Free Software Foundation, Inc.
+
+ This file is part of GDB.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#ifndef GDB_PAGER_H
+#define GDB_PAGER_H
+
+#include "ui-file.h"
+
+/* A ui_file that implements output paging and unfiltered output. */
+
+class pager_file : public wrapped_file
+{
+public:
+ /* Create a new pager_file. The new object takes ownership of
+ STREAM. */
+ explicit pager_file (ui_file *stream)
+ : wrapped_file (stream)
+ {
+ }
+
+ ~pager_file ()
+ {
+ delete m_stream;
+ }
+
+ DISABLE_COPY_AND_ASSIGN (pager_file);
+
+ void write (const char *buf, long length_buf) override;
+
+ void puts (const char *str) override;
+
+ void write_async_safe (const char *buf, long length_buf) override
+ {
+ m_stream->write_async_safe (buf, length_buf);
+ }
+
+ void emit_style_escape (const ui_file_style &style) override;
+ void reset_style () override;
+
+ void flush () override;
+
+ void wrap_here (int indent) override;
+
+ void puts_unfiltered (const char *str) override
+ {
+ flush_wrap_buffer ();
+ m_stream->puts_unfiltered (str);
+ }
+
+private:
+
+ void prompt_for_continue ();
+
+ /* Flush the wrap buffer to STREAM, if necessary. */
+ void flush_wrap_buffer ();
+
+ /* Contains characters which are waiting to be output (they have
+ already been counted in chars_printed). */
+ std::string m_wrap_buffer;
+
+ /* Amount to indent by if the wrap occurs. */
+ int m_wrap_indent = 0;
+
+ /* Column number on the screen where wrap_buffer begins, or 0 if
+ wrapping is not in effect. */
+ int m_wrap_column = 0;
+
+ /* The style applied at the time that wrap_here was called. */
+ ui_file_style m_wrap_style;
+
+ /* This is temporarily set when paging. This will cause some
+ methods to change their behavior to ignore the wrap buffer. */
+ bool m_paging = false;
+};
+
+#endif /* GDB_PAGER_H */
diff --git a/gdb/parse.c b/gdb/parse.c
index a6595e3da06..fb308be0d7c 100644
--- a/gdb/parse.c
+++ b/gdb/parse.c
@@ -57,7 +57,7 @@ static void
show_expressiondebug (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Expression debugging is %s.\n"), value);
+ gdb_printf (file, _("Expression debugging is %s.\n"), value);
}
@@ -68,14 +68,15 @@ static void
show_parserdebug (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Parser debugging is %s.\n"), value);
+ gdb_printf (file, _("Parser debugging is %s.\n"), value);
}
-static expression_up parse_exp_in_context (const char **, CORE_ADDR,
- const struct block *, int,
- bool, innermost_block_tracker *,
- expr_completion_state *);
+static expression_up parse_exp_in_context
+ (const char **, CORE_ADDR,
+ const struct block *, int,
+ bool, innermost_block_tracker *,
+ std::unique_ptr<expr_completion_base> *);
/* Documented at it's declaration. */
@@ -102,7 +103,7 @@ find_minsym_type_and_address (minimal_symbol *msymbol,
{
bound_minimal_symbol bound_msym = {msymbol, objfile};
struct obj_section *section = msymbol->obj_section (objfile);
- enum minimal_symbol_type type = MSYMBOL_TYPE (msymbol);
+ enum minimal_symbol_type type = msymbol->type ();
bool is_tls = (section != NULL
&& section->the_bfd_section->flags & SEC_THREAD_LOCAL);
@@ -114,16 +115,16 @@ find_minsym_type_and_address (minimal_symbol *msymbol,
{
/* Addresses of TLS symbols are really offsets into a
per-objfile/per-thread storage block. */
- addr = MSYMBOL_VALUE_RAW_ADDRESS (bound_msym.minsym);
+ addr = bound_msym.minsym->value_raw_address ();
}
else if (msymbol_is_function (objfile, msymbol, &addr))
{
- if (addr != BMSYMBOL_VALUE_ADDRESS (bound_msym))
+ if (addr != bound_msym.value_address ())
{
/* This means we resolved a function descriptor, and we now
have an address for a code/text symbol instead of a data
symbol. */
- if (MSYMBOL_TYPE (msymbol) == mst_data_gnu_ifunc)
+ if (msymbol->type () == mst_data_gnu_ifunc)
type = mst_text_gnu_ifunc;
else
type = mst_text;
@@ -131,7 +132,7 @@ find_minsym_type_and_address (minimal_symbol *msymbol,
}
}
else
- addr = BMSYMBOL_VALUE_ADDRESS (bound_msym);
+ addr = bound_msym.value_address ();
if (overlay_debugging)
addr = symbol_overlayed_address (addr, section);
@@ -171,15 +172,22 @@ find_minsym_type_and_address (minimal_symbol *msymbol,
}
}
+bool
+expr_complete_tag::complete (struct expression *exp,
+ completion_tracker &tracker)
+{
+ collect_symbol_completion_matches_type (tracker, m_name.get (),
+ m_name.get (), m_code);
+ return true;
+}
+
/* See parser-defs.h. */
void
parser_state::mark_struct_expression (expr::structop_base_operation *op)
{
- gdb_assert (parse_completion
- && (m_completion_state.expout_tag_completion_type
- == TYPE_CODE_UNDEF));
- m_completion_state.expout_last_op = op;
+ gdb_assert (parse_completion && m_completion_state == nullptr);
+ m_completion_state.reset (new expr_complete_structop (op));
}
/* Indicate that the current parser invocation is completing a tag.
@@ -190,17 +198,12 @@ void
parser_state::mark_completion_tag (enum type_code tag, const char *ptr,
int length)
{
- gdb_assert (parse_completion
- && (m_completion_state.expout_tag_completion_type
- == TYPE_CODE_UNDEF)
- && m_completion_state.expout_completion_name == NULL
- && m_completion_state.expout_last_op == nullptr);
+ gdb_assert (parse_completion && m_completion_state == nullptr);
gdb_assert (tag == TYPE_CODE_UNION
|| tag == TYPE_CODE_STRUCT
|| tag == TYPE_CODE_ENUM);
- m_completion_state.expout_tag_completion_type = tag;
- m_completion_state.expout_completion_name
- = make_unique_xstrndup (ptr, length);
+ m_completion_state.reset
+ (new expr_complete_tag (tag, make_unique_xstrndup (ptr, length)));
}
/* See parser-defs.h. */
@@ -433,7 +436,7 @@ parse_exp_in_context (const char **stringptr, CORE_ADDR pc,
const struct block *block,
int comma, bool void_context_p,
innermost_block_tracker *tracker,
- expr_completion_state *cstate)
+ std::unique_ptr<expr_completion_base> *completer)
{
const struct language_defn *lang = NULL;
@@ -451,7 +454,7 @@ parse_exp_in_context (const char **stringptr, CORE_ADDR pc,
if (!expression_context_block)
expression_context_block = get_selected_block (&expression_context_pc);
else if (pc == 0)
- expression_context_pc = BLOCK_ENTRY_PC (expression_context_block);
+ expression_context_pc = expression_context_block->entry_pc ();
else
expression_context_pc = pc;
@@ -460,12 +463,13 @@ parse_exp_in_context (const char **stringptr, CORE_ADDR pc,
if (!expression_context_block)
{
struct symtab_and_line cursal = get_current_source_symtab_and_line ();
+
if (cursal.symtab)
expression_context_block
- = BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (cursal.symtab),
- STATIC_BLOCK);
+ = cursal.symtab->compunit ()->blockvector ()->static_block ();
+
if (expression_context_block)
- expression_context_pc = BLOCK_ENTRY_PC (expression_context_block);
+ expression_context_pc = expression_context_block->entry_pc ();
}
if (language_mode == language_mode_auto && block != NULL)
@@ -501,7 +505,7 @@ parse_exp_in_context (const char **stringptr, CORE_ADDR pc,
parser_state ps (lang, get_current_arch (), expression_context_block,
expression_context_pc, comma, *stringptr,
- cstate != nullptr, tracker, void_context_p);
+ completer != nullptr, tracker, void_context_p);
scoped_restore_current_language lang_saver;
set_language (lang->la_language);
@@ -525,8 +529,8 @@ parse_exp_in_context (const char **stringptr, CORE_ADDR pc,
if (expressiondebug)
dump_prefix_expression (result.get (), gdb_stdlog);
- if (cstate != nullptr)
- *cstate = std::move (ps.m_completion_state);
+ if (completer != nullptr)
+ *completer = std::move (ps.m_completion_state);
*stringptr = ps.lexptr;
return result;
}
@@ -566,47 +570,32 @@ parse_expression_with_language (const char *string, enum language lang)
return parse_expression (string);
}
-/* Parse STRING as an expression. If parsing ends in the middle of a
- field reference, return the type of the left-hand-side of the
- reference; furthermore, if the parsing ends in the field name,
- return the field name in *NAME. If the parsing ends in the middle
- of a field reference, but the reference is somehow invalid, throw
- an exception. In all other cases, return NULL. */
-
-struct type *
-parse_expression_for_completion (const char *string,
- gdb::unique_xmalloc_ptr<char> *name,
- enum type_code *code)
+/* Parse STRING as an expression. If the parse is marked for
+ completion, set COMPLETER and return the expression. In all other
+ cases, return NULL. */
+
+expression_up
+parse_expression_for_completion
+ (const char *string,
+ std::unique_ptr<expr_completion_base> *completer)
{
expression_up exp;
- expr_completion_state cstate;
try
{
- exp = parse_exp_in_context (&string, 0, 0, 0, false, nullptr, &cstate);
+ exp = parse_exp_in_context (&string, 0, 0, 0, false, nullptr, completer);
}
catch (const gdb_exception_error &except)
{
/* Nothing, EXP remains NULL. */
}
- if (exp == NULL)
- return NULL;
-
- if (cstate.expout_tag_completion_type != TYPE_CODE_UNDEF)
- {
- *code = cstate.expout_tag_completion_type;
- *name = std::move (cstate.expout_completion_name);
- return NULL;
- }
-
- if (cstate.expout_last_op == nullptr)
+ /* If we didn't get a completion result, be sure to also not return
+ an expression to our caller. */
+ if (*completer == nullptr)
return nullptr;
- expr::structop_base_operation *op = cstate.expout_last_op;
- const std::string &fld = op->get_string ();
- *name = make_unique_xstrdup (fld.c_str ());
- return value_type (op->evaluate_lhs (exp.get ()));
+ return exp;
}
/* Parse floating point value P of length LEN.
@@ -632,11 +621,11 @@ parser_fprintf (FILE *x, const char *y, ...)
va_start (args, y);
if (x == stderr)
- vfprintf_unfiltered (gdb_stderr, y, args);
+ gdb_vprintf (gdb_stderr, y, args);
else
{
- fprintf_unfiltered (gdb_stderr, " Unknown FILE used.\n");
- vfprintf_unfiltered (gdb_stderr, y, args);
+ gdb_printf (gdb_stderr, " Unknown FILE used.\n");
+ gdb_vprintf (gdb_stderr, y, args);
}
va_end (args);
}
diff --git a/gdb/parser-defs.h b/gdb/parser-defs.h
index 6de514023b2..3be7d6c839f 100644
--- a/gdb/parser-defs.h
+++ b/gdb/parser-defs.h
@@ -82,20 +82,55 @@ struct expr_builder
expression_up expout;
};
-/* This is used for expression completion. */
+/* Complete an expression that references a field, like "x->y". */
-struct expr_completion_state
+struct expr_complete_structop : public expr_completion_base
{
+ explicit expr_complete_structop (expr::structop_base_operation *op)
+ : m_op (op)
+ {
+ }
+
+ bool complete (struct expression *exp,
+ completion_tracker &tracker) override
+ {
+ return m_op->complete (exp, tracker);
+ }
+
+private:
+
/* The last struct expression directly before a '.' or '->'. This
is set when parsing and is only used when completing a field
name. It is nullptr if no dereference operation was found. */
- expr::structop_base_operation *expout_last_op = nullptr;
+ expr::structop_base_operation *m_op = nullptr;
+};
- /* If we are completing a tagged type name, this will be nonzero. */
- enum type_code expout_tag_completion_type = TYPE_CODE_UNDEF;
+/* Complete a tag name in an expression. This is used for something
+ like "enum abc<TAB>". */
+
+struct expr_complete_tag : public expr_completion_base
+{
+ expr_complete_tag (enum type_code code,
+ gdb::unique_xmalloc_ptr<char> name)
+ : m_code (code),
+ m_name (std::move (name))
+ {
+ /* Parsers should enforce this statically. */
+ gdb_assert (code == TYPE_CODE_ENUM
+ || code == TYPE_CODE_UNION
+ || code == TYPE_CODE_STRUCT);
+ }
+
+ bool complete (struct expression *exp,
+ completion_tracker &tracker) override;
+
+private:
+
+ /* The kind of tag to complete. */
+ enum type_code m_code;
/* The token for tagged type name completion. */
- gdb::unique_xmalloc_ptr<char> expout_completion_name;
+ gdb::unique_xmalloc_ptr<char> m_name;
};
/* An instance of this type is instantiated during expression parsing,
@@ -160,6 +195,14 @@ struct parser_state : public expr_builder
void mark_completion_tag (enum type_code tag, const char *ptr, int length);
+ /* Mark for completion, using an arbitrary completer. */
+
+ void mark_completion (std::unique_ptr<expr_completion_base> completer)
+ {
+ gdb_assert (m_completion_state == nullptr);
+ m_completion_state = std::move (completer);
+ }
+
/* Push an operation on the stack. */
void push (expr::operation_up &&op)
{
@@ -254,7 +297,7 @@ struct parser_state : public expr_builder
bool parse_completion;
/* Completion state is updated here. */
- expr_completion_state m_completion_state;
+ std::unique_ptr<expr_completion_base> m_completion_state;
/* The innermost block tracker. */
innermost_block_tracker *block_tracker;
diff --git a/gdb/ppc-linux-tdep.c b/gdb/ppc-linux-tdep.c
index 0b165fe2ca3..4c5f8b7a281 100644
--- a/gdb/ppc-linux-tdep.c
+++ b/gdb/ppc-linux-tdep.c
@@ -1427,9 +1427,9 @@ ppc_linux_syscall_record (struct regcache *regcache)
if (syscall_gdb < 0)
{
- fprintf_unfiltered (gdb_stderr,
- _("Process record and replay target doesn't "
- "support syscall number %d\n"), (int) scnum);
+ gdb_printf (gdb_stderr,
+ _("Process record and replay target doesn't "
+ "support syscall number %d\n"), (int) scnum);
return 0;
}
@@ -1639,7 +1639,7 @@ ppc_elfv2_elf_make_msymbol_special (asymbol *sym, struct minimal_symbol *msym)
default:
break;
case 8:
- MSYMBOL_TARGET_FLAG_1 (msym) = 1;
+ msym->set_target_flag_1 (true);
break;
}
}
@@ -1659,12 +1659,12 @@ ppc_elfv2_skip_entrypoint (struct gdbarch *gdbarch, CORE_ADDR pc)
/* See ppc_elfv2_elf_make_msymbol_special for how local entry point
offset values are encoded. */
- if (MSYMBOL_TARGET_FLAG_1 (fun.minsym))
+ if (fun.minsym->target_flag_1 ())
local_entry_offset = 8;
- if (BMSYMBOL_VALUE_ADDRESS (fun) <= pc
- && pc < BMSYMBOL_VALUE_ADDRESS (fun) + local_entry_offset)
- return BMSYMBOL_VALUE_ADDRESS (fun) + local_entry_offset;
+ if (fun.value_address () <= pc
+ && pc < fun.value_address () + local_entry_offset)
+ return fun.value_address () + local_entry_offset;
return pc;
}
@@ -1974,7 +1974,7 @@ ppc_floatformat_for_type (struct gdbarch *gdbarch,
|| strcmp (name, "_Float64x") == 0
|| strcmp (name, "complex _Float128") == 0
|| strcmp (name, "complex _Float64x") == 0)
- return floatformats_ia64_quad;
+ return floatformats_ieee_quad;
if (strcmp (name, "__ibm128") == 0)
return floatformats_ibm_long_double;
@@ -2053,7 +2053,7 @@ ppc_linux_init_abi (struct gdbarch_info info,
to distinguish between the IBM long double and IEEE quad cases. */
set_gdbarch_long_double_bit (gdbarch, 16 * TARGET_CHAR_BIT);
if (tdep->long_double_abi == POWERPC_LONG_DOUBLE_IEEE128)
- set_gdbarch_long_double_format (gdbarch, floatformats_ia64_quad);
+ set_gdbarch_long_double_format (gdbarch, floatformats_ieee_quad);
else
set_gdbarch_long_double_format (gdbarch, floatformats_ibm_long_double);
diff --git a/gdb/ppc-sysv-tdep.c b/gdb/ppc-sysv-tdep.c
index 5255cea43e3..6c2fd1bfc99 100644
--- a/gdb/ppc-sysv-tdep.c
+++ b/gdb/ppc-sysv-tdep.c
@@ -1059,7 +1059,7 @@ convert_code_addr_to_desc_addr (CORE_ADDR code_addr, CORE_ADDR *desc_addr)
if (fn.minsym == NULL)
return 0;
/* Found a descriptor. */
- (*desc_addr) = BMSYMBOL_VALUE_ADDRESS (fn);
+ (*desc_addr) = fn.value_address ();
return 1;
}
@@ -1761,7 +1761,8 @@ ppc64_sysv_abi_return_value_base (struct gdbarch *gdbarch, struct type *valtype,
/* Fixed point type values need to be returned unscaled. */
gdb_mpz unscaled;
- unscaled.read ({writebuf, TYPE_LENGTH (valtype)},
+ unscaled.read (gdb::make_array_view (writebuf,
+ TYPE_LENGTH (valtype)),
type_byte_order (valtype),
valtype->is_unsigned ());
return_val = unscaled.as_integer<LONGEST> ();
diff --git a/gdb/ppc64-tdep.c b/gdb/ppc64-tdep.c
index 02fcc653b3a..32931f72691 100644
--- a/gdb/ppc64-tdep.c
+++ b/gdb/ppc64-tdep.c
@@ -798,6 +798,6 @@ ppc64_elf_make_msymbol_special (asymbol *sym, struct minimal_symbol *msym)
if ((sym->flags & BSF_SYNTHETIC) != 0 && sym->udata.p != NULL)
{
elf_symbol_type *elf_sym = (elf_symbol_type *) sym->udata.p;
- SET_MSYMBOL_SIZE (msym, elf_sym->internal_elf_sym.st_size);
+ msym->set_size (elf_sym->internal_elf_sym.st_size);
}
}
diff --git a/gdb/printcmd.c b/gdb/printcmd.c
index 509f62c21c7..806c5d1b004 100644
--- a/gdb/printcmd.c
+++ b/gdb/printcmd.c
@@ -102,10 +102,10 @@ static void
show_max_symbolic_offset (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file,
- _("The largest offset that will be "
- "printed in <symbol+1234> form is %s.\n"),
- value);
+ gdb_printf (file,
+ _("The largest offset that will be "
+ "printed in <symbol+1234> form is %s.\n"),
+ value);
}
/* Append the source filename and linenumber of the symbol when
@@ -115,9 +115,9 @@ static void
show_print_symbol_filename (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Printing of source filename and "
- "line number with <symbol> is %s.\n"),
- value);
+ gdb_printf (file, _("Printing of source filename and "
+ "line number with <symbol> is %s.\n"),
+ value);
}
/* Number of auto-display expression currently being displayed.
@@ -317,7 +317,7 @@ print_formatted (struct value *val, int size,
case 'i':
/* We often wrap here if there are long symbolic names. */
- wrap_here (" ");
+ stream->wrap_here (4);
next_address = (value_address (val)
+ gdb_print_insn (type->arch (),
value_address (val), stream,
@@ -426,19 +426,14 @@ print_scalar_formatted (const gdb_byte *valaddr, struct type *type,
len = newlen;
}
- /* Historically gdb has printed floats by first casting them to a
- long, and then printing the long. PR cli/16242 suggests changing
- this to using C-style hex float format.
-
- Biased range types and sub-word scalar types must also be handled
+ /* Biased range types and sub-word scalar types must be handled
here; the value is correctly computed by unpack_long. */
gdb::byte_vector converted_bytes;
/* Some cases below will unpack the value again. In the biased
range case, we want to avoid this, so we store the unpacked value
here for possible use later. */
gdb::optional<LONGEST> val_long;
- if (((type->code () == TYPE_CODE_FLT
- || is_fixed_point_type (type))
+ if ((is_fixed_point_type (type)
&& (options->format == 'o'
|| options->format == 'x'
|| options->format == 't'
@@ -567,28 +562,28 @@ print_address_symbolic (struct gdbarch *gdbarch, CORE_ADDR addr,
&offset, &filename, &line, &unmapped))
return 0;
- fputs_filtered (leadin, stream);
+ gdb_puts (leadin, stream);
if (unmapped)
- fputs_filtered ("<*", stream);
+ gdb_puts ("<*", stream);
else
- fputs_filtered ("<", stream);
+ gdb_puts ("<", stream);
fputs_styled (name.c_str (), function_name_style.style (), stream);
if (offset != 0)
- fprintf_filtered (stream, "%+d", offset);
+ gdb_printf (stream, "%+d", offset);
/* Append source filename and line number if desired. Give specific
line # of this addr, if we have it; else line # of the nearest symbol. */
if (print_symbol_filename && !filename.empty ())
{
- fputs_filtered (line == -1 ? " in " : " at ", stream);
+ gdb_puts (line == -1 ? " in " : " at ", stream);
fputs_styled (filename.c_str (), file_name_style.style (), stream);
if (line != -1)
- fprintf_filtered (stream, ":%d", line);
+ gdb_printf (stream, ":%d", line);
}
if (unmapped)
- fputs_filtered ("*>", stream);
+ gdb_puts ("*>", stream);
else
- fputs_filtered (">", stream);
+ gdb_puts (">", stream);
return 1;
}
@@ -650,7 +645,7 @@ build_address_symbolic (struct gdbarch *gdbarch,
pointer is <function+3>. This matches the ISA behavior. */
addr = gdbarch_addr_bits_remove (gdbarch, addr);
- name_location = BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (symbol));
+ name_location = symbol->value_block ()->entry_pc ();
if (do_demangle || asm_demangle)
name_temp = symbol->print_name ();
else
@@ -658,11 +653,11 @@ build_address_symbolic (struct gdbarch *gdbarch,
}
if (msymbol.minsym != NULL
- && MSYMBOL_HAS_SIZE (msymbol.minsym)
- && MSYMBOL_SIZE (msymbol.minsym) == 0
- && MSYMBOL_TYPE (msymbol.minsym) != mst_text
- && MSYMBOL_TYPE (msymbol.minsym) != mst_text_gnu_ifunc
- && MSYMBOL_TYPE (msymbol.minsym) != mst_file_text)
+ && msymbol.minsym->has_size ()
+ && msymbol.minsym->size () == 0
+ && msymbol.minsym->type () != mst_text
+ && msymbol.minsym->type () != mst_text_gnu_ifunc
+ && msymbol.minsym->type () != mst_file_text)
msymbol.minsym = NULL;
if (msymbol.minsym != NULL)
@@ -678,7 +673,7 @@ build_address_symbolic (struct gdbarch *gdbarch,
under consideration. */
if (symbol == NULL ||
(!prefer_sym_over_minsym
- && BMSYMBOL_VALUE_ADDRESS (msymbol) == addr
+ && msymbol.value_address () == addr
&& name_location != addr))
{
/* If this is a function (i.e. a code address), strip out any
@@ -686,14 +681,14 @@ build_address_symbolic (struct gdbarch *gdbarch,
first instruction of a Thumb function as <function>; the
second instruction will be <function+2>, even though the
pointer is <function+3>. This matches the ISA behavior. */
- if (MSYMBOL_TYPE (msymbol.minsym) == mst_text
- || MSYMBOL_TYPE (msymbol.minsym) == mst_text_gnu_ifunc
- || MSYMBOL_TYPE (msymbol.minsym) == mst_file_text
- || MSYMBOL_TYPE (msymbol.minsym) == mst_solib_trampoline)
+ if (msymbol.minsym->type () == mst_text
+ || msymbol.minsym->type () == mst_text_gnu_ifunc
+ || msymbol.minsym->type () == mst_file_text
+ || msymbol.minsym->type () == mst_solib_trampoline)
addr = gdbarch_addr_bits_remove (gdbarch, addr);
symbol = 0;
- name_location = BMSYMBOL_VALUE_ADDRESS (msymbol);
+ name_location = msymbol.value_address ();
if (do_demangle || asm_demangle)
name_temp = msymbol.minsym->print_name ();
else
@@ -824,11 +819,11 @@ find_instruction_backward (struct gdbarch *gdbarch, CORE_ADDR addr,
/* We reach here when line info is not available. In this case,
we print a message and just exit the loop. The return value
is calculated after the loop. */
- printf_filtered (_("No line number information available "
- "for address "));
- wrap_here (" ");
+ gdb_printf (_("No line number information available "
+ "for address "));
+ gdb_stdout->wrap_here (2);
print_address (gdbarch, loop_start - 1, gdb_stdout);
- printf_filtered ("\n");
+ gdb_printf ("\n");
break;
}
@@ -910,8 +905,8 @@ read_memory_backward (struct gdbarch *gdbarch,
if (errcode != 0)
{
/* The read was unsuccessful, so exit the loop. */
- printf_filtered (_("Cannot access memory at address %s\n"),
- paddress (gdbarch, memaddr));
+ gdb_printf (_("Cannot access memory at address %s\n"),
+ paddress (gdbarch, memaddr));
break;
}
}
@@ -1145,24 +1140,24 @@ do_examine (struct format_data fmt, struct gdbarch *gdbarch, CORE_ADDR addr)
if (!atag.empty ())
{
- printf_filtered (_("<Allocation Tag %s for range [%s,%s)>\n"),
- atag.c_str (),
- paddress (gdbarch, tag_laddr),
- paddress (gdbarch, tag_haddr));
+ gdb_printf (_("<Allocation Tag %s for range [%s,%s)>\n"),
+ atag.c_str (),
+ paddress (gdbarch, tag_laddr),
+ paddress (gdbarch, tag_haddr));
}
}
print_range_tag = false;
}
if (format == 'i')
- fputs_filtered (pc_prefix (next_address), gdb_stdout);
+ gdb_puts (pc_prefix (next_address));
print_address (next_gdbarch, next_address, gdb_stdout);
- printf_filtered (":");
+ gdb_printf (":");
for (i = maxelts;
i > 0 && count > 0;
i--, count--)
{
- printf_filtered ("\t");
+ gdb_printf ("\t");
/* Note that print_formatted sets next_address for the next
object. */
last_examine_address = next_address;
@@ -1190,7 +1185,7 @@ do_examine (struct format_data fmt, struct gdbarch *gdbarch, CORE_ADDR addr)
if (tag_haddr <= next_address)
print_range_tag = true;
}
- printf_filtered ("\n");
+ gdb_printf ("\n");
}
if (need_to_update_next_address)
@@ -1251,12 +1246,12 @@ print_value (value *val, const value_print_options &opts)
annotate_value_history_begin (histindex, value_type (val));
- printf_filtered ("$%d = ", histindex);
+ gdb_printf ("$%d = ", histindex);
annotate_value_history_value ();
print_formatted (val, 0, &opts, gdb_stdout);
- printf_filtered ("\n");
+ gdb_printf ("\n");
annotate_value_history_end ();
}
@@ -1348,9 +1343,9 @@ print_command_1 (const char *args, int voidprint)
std::string atag
= gdbarch_memtag_to_string (target_gdbarch (), tag);
- printf_filtered (_("Logical tag (%s) does not match the "
- "allocation tag (%s).\n"),
- ltag.c_str (), atag.c_str ());
+ gdb_printf (_("Logical tag (%s) does not match the "
+ "allocation tag (%s).\n"),
+ ltag.c_str (), atag.c_str ());
}
}
catch (gdb_exception_error &ex)
@@ -1358,9 +1353,9 @@ print_command_1 (const char *args, int voidprint)
if (ex.error == TARGET_CLOSE_ERROR)
throw;
- fprintf_filtered (gdb_stderr,
- _("Could not validate memory tag: %s\n"),
- ex.message->c_str ());
+ gdb_printf (gdb_stderr,
+ _("Could not validate memory tag: %s\n"),
+ ex.message->c_str ());
}
}
@@ -1498,7 +1493,6 @@ output_command (const char *exp, int from_tty)
annotate_value_end ();
- wrap_here ("");
gdb_flush (gdb_stdout);
}
@@ -1557,7 +1551,7 @@ info_symbol_command (const char *arg, int from_tty)
const char *loc_string;
matches = 1;
- offset = sect_addr - MSYMBOL_VALUE_ADDRESS (objfile, msymbol);
+ offset = sect_addr - msymbol->value_address (objfile);
mapped = section_is_mapped (osect) ? _("mapped") : _("unmapped");
sec_name = osect->the_bfd_section->name;
msym_name = msymbol->print_name ();
@@ -1579,41 +1573,41 @@ info_symbol_command (const char *arg, int from_tty)
if (current_program_space->multi_objfile_p ())
if (pc_in_unmapped_range (addr, osect))
if (section_is_overlay (osect))
- printf_filtered (_("%s in load address range of "
- "%s overlay section %s of %s\n"),
- loc_string, mapped, sec_name, obj_name);
+ gdb_printf (_("%s in load address range of "
+ "%s overlay section %s of %s\n"),
+ loc_string, mapped, sec_name, obj_name);
else
- printf_filtered (_("%s in load address range of "
- "section %s of %s\n"),
- loc_string, sec_name, obj_name);
+ gdb_printf (_("%s in load address range of "
+ "section %s of %s\n"),
+ loc_string, sec_name, obj_name);
else
if (section_is_overlay (osect))
- printf_filtered (_("%s in %s overlay section %s of %s\n"),
- loc_string, mapped, sec_name, obj_name);
+ gdb_printf (_("%s in %s overlay section %s of %s\n"),
+ loc_string, mapped, sec_name, obj_name);
else
- printf_filtered (_("%s in section %s of %s\n"),
- loc_string, sec_name, obj_name);
+ gdb_printf (_("%s in section %s of %s\n"),
+ loc_string, sec_name, obj_name);
else
if (pc_in_unmapped_range (addr, osect))
if (section_is_overlay (osect))
- printf_filtered (_("%s in load address range of %s overlay "
- "section %s\n"),
- loc_string, mapped, sec_name);
+ gdb_printf (_("%s in load address range of %s overlay "
+ "section %s\n"),
+ loc_string, mapped, sec_name);
else
- printf_filtered
+ gdb_printf
(_("%s in load address range of section %s\n"),
loc_string, sec_name);
else
if (section_is_overlay (osect))
- printf_filtered (_("%s in %s overlay section %s\n"),
- loc_string, mapped, sec_name);
+ gdb_printf (_("%s in %s overlay section %s\n"),
+ loc_string, mapped, sec_name);
else
- printf_filtered (_("%s in section %s\n"),
- loc_string, sec_name);
+ gdb_printf (_("%s in section %s\n"),
+ loc_string, sec_name);
}
}
if (matches == 0)
- printf_filtered (_("No symbol matches %s.\n"), arg);
+ gdb_printf (_("No symbol matches %s.\n"), arg);
}
static void
@@ -1637,14 +1631,14 @@ info_address_command (const char *exp, int from_tty)
{
if (is_a_field_of_this.type != NULL)
{
- printf_filtered ("Symbol \"");
- fprintf_symbol_filtered (gdb_stdout, exp,
- current_language->la_language, DMGL_ANSI);
- printf_filtered ("\" is a field of the local class variable ");
+ gdb_printf ("Symbol \"");
+ fprintf_symbol (gdb_stdout, exp,
+ current_language->la_language, DMGL_ANSI);
+ gdb_printf ("\" is a field of the local class variable ");
if (current_language->la_language == language_objc)
- printf_filtered ("`self'\n"); /* ObjC equivalent of "this" */
+ gdb_printf ("`self'\n"); /* ObjC equivalent of "this" */
else
- printf_filtered ("`this'\n");
+ gdb_printf ("`this'\n");
return;
}
@@ -1655,71 +1649,71 @@ info_address_command (const char *exp, int from_tty)
struct objfile *objfile = msymbol.objfile;
gdbarch = objfile->arch ();
- load_addr = BMSYMBOL_VALUE_ADDRESS (msymbol);
+ load_addr = msymbol.value_address ();
- printf_filtered ("Symbol \"");
- fprintf_symbol_filtered (gdb_stdout, exp,
- current_language->la_language, DMGL_ANSI);
- printf_filtered ("\" is at ");
+ gdb_printf ("Symbol \"");
+ fprintf_symbol (gdb_stdout, exp,
+ current_language->la_language, DMGL_ANSI);
+ gdb_printf ("\" is at ");
fputs_styled (paddress (gdbarch, load_addr), address_style.style (),
gdb_stdout);
- printf_filtered (" in a file compiled without debugging");
+ gdb_printf (" in a file compiled without debugging");
section = msymbol.minsym->obj_section (objfile);
if (section_is_overlay (section))
{
load_addr = overlay_unmapped_address (load_addr, section);
- printf_filtered (",\n -- loaded at ");
+ gdb_printf (",\n -- loaded at ");
fputs_styled (paddress (gdbarch, load_addr),
address_style.style (),
gdb_stdout);
- printf_filtered (" in overlay section %s",
- section->the_bfd_section->name);
+ gdb_printf (" in overlay section %s",
+ section->the_bfd_section->name);
}
- printf_filtered (".\n");
+ gdb_printf (".\n");
}
else
error (_("No symbol \"%s\" in current context."), exp);
return;
}
- printf_filtered ("Symbol \"");
- fputs_filtered (sym->print_name (), gdb_stdout);
- printf_filtered ("\" is ");
- val = SYMBOL_VALUE (sym);
- if (SYMBOL_OBJFILE_OWNED (sym))
- section = sym->obj_section (symbol_objfile (sym));
+ gdb_printf ("Symbol \"");
+ gdb_puts (sym->print_name ());
+ gdb_printf ("\" is ");
+ val = sym->value_longest ();
+ if (sym->is_objfile_owned ())
+ section = sym->obj_section (sym->objfile ());
else
section = NULL;
- gdbarch = symbol_arch (sym);
+ gdbarch = sym->arch ();
if (SYMBOL_COMPUTED_OPS (sym) != NULL)
{
SYMBOL_COMPUTED_OPS (sym)->describe_location (sym, context_pc,
gdb_stdout);
- printf_filtered (".\n");
+ gdb_printf (".\n");
return;
}
- switch (SYMBOL_CLASS (sym))
+ switch (sym->aclass ())
{
case LOC_CONST:
case LOC_CONST_BYTES:
- printf_filtered ("constant");
+ gdb_printf ("constant");
break;
case LOC_LABEL:
- printf_filtered ("a label at address ");
- load_addr = SYMBOL_VALUE_ADDRESS (sym);
+ gdb_printf ("a label at address ");
+ load_addr = sym->value_address ();
fputs_styled (paddress (gdbarch, load_addr), address_style.style (),
gdb_stdout);
if (section_is_overlay (section))
{
load_addr = overlay_unmapped_address (load_addr, section);
- printf_filtered (",\n -- loaded at ");
+ gdb_printf (",\n -- loaded at ");
fputs_styled (paddress (gdbarch, load_addr), address_style.style (),
gdb_stdout);
- printf_filtered (" in overlay section %s",
- section->the_bfd_section->name);
+ gdb_printf (" in overlay section %s",
+ section->the_bfd_section->name);
}
break;
@@ -1735,66 +1729,66 @@ info_address_command (const char *exp, int from_tty)
in that objfile. */
regno = SYMBOL_REGISTER_OPS (sym)->register_number (sym, gdbarch);
- if (SYMBOL_IS_ARGUMENT (sym))
- printf_filtered (_("an argument in register %s"),
- gdbarch_register_name (gdbarch, regno));
+ if (sym->is_argument ())
+ gdb_printf (_("an argument in register %s"),
+ gdbarch_register_name (gdbarch, regno));
else
- printf_filtered (_("a variable in register %s"),
- gdbarch_register_name (gdbarch, regno));
+ gdb_printf (_("a variable in register %s"),
+ gdbarch_register_name (gdbarch, regno));
break;
case LOC_STATIC:
- printf_filtered (_("static storage at address "));
- load_addr = SYMBOL_VALUE_ADDRESS (sym);
+ gdb_printf (_("static storage at address "));
+ load_addr = sym->value_address ();
fputs_styled (paddress (gdbarch, load_addr), address_style.style (),
gdb_stdout);
if (section_is_overlay (section))
{
load_addr = overlay_unmapped_address (load_addr, section);
- printf_filtered (_(",\n -- loaded at "));
+ gdb_printf (_(",\n -- loaded at "));
fputs_styled (paddress (gdbarch, load_addr), address_style.style (),
gdb_stdout);
- printf_filtered (_(" in overlay section %s"),
- section->the_bfd_section->name);
+ gdb_printf (_(" in overlay section %s"),
+ section->the_bfd_section->name);
}
break;
case LOC_REGPARM_ADDR:
/* Note comment at LOC_REGISTER. */
regno = SYMBOL_REGISTER_OPS (sym)->register_number (sym, gdbarch);
- printf_filtered (_("address of an argument in register %s"),
- gdbarch_register_name (gdbarch, regno));
+ gdb_printf (_("address of an argument in register %s"),
+ gdbarch_register_name (gdbarch, regno));
break;
case LOC_ARG:
- printf_filtered (_("an argument at offset %ld"), val);
+ gdb_printf (_("an argument at offset %ld"), val);
break;
case LOC_LOCAL:
- printf_filtered (_("a local variable at frame offset %ld"), val);
+ gdb_printf (_("a local variable at frame offset %ld"), val);
break;
case LOC_REF_ARG:
- printf_filtered (_("a reference argument at offset %ld"), val);
+ gdb_printf (_("a reference argument at offset %ld"), val);
break;
case LOC_TYPEDEF:
- printf_filtered (_("a typedef"));
+ gdb_printf (_("a typedef"));
break;
case LOC_BLOCK:
- printf_filtered (_("a function at address "));
- load_addr = BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (sym));
+ gdb_printf (_("a function at address "));
+ load_addr = sym->value_block ()->entry_pc ();
fputs_styled (paddress (gdbarch, load_addr), address_style.style (),
gdb_stdout);
if (section_is_overlay (section))
{
load_addr = overlay_unmapped_address (load_addr, section);
- printf_filtered (_(",\n -- loaded at "));
+ gdb_printf (_(",\n -- loaded at "));
fputs_styled (paddress (gdbarch, load_addr), address_style.style (),
gdb_stdout);
- printf_filtered (_(" in overlay section %s"),
- section->the_bfd_section->name);
+ gdb_printf (_(" in overlay section %s"),
+ section->the_bfd_section->name);
}
break;
@@ -1804,7 +1798,7 @@ info_address_command (const char *exp, int from_tty)
msym = lookup_bound_minimal_symbol (sym->linkage_name ());
if (msym.minsym == NULL)
- printf_filtered ("unresolved");
+ gdb_printf ("unresolved");
else
{
section = msym.obj_section ();
@@ -1812,27 +1806,27 @@ info_address_command (const char *exp, int from_tty)
if (section
&& (section->the_bfd_section->flags & SEC_THREAD_LOCAL) != 0)
{
- load_addr = MSYMBOL_VALUE_RAW_ADDRESS (msym.minsym);
- printf_filtered (_("a thread-local variable at offset %s "
- "in the thread-local storage for `%s'"),
- paddress (gdbarch, load_addr),
- objfile_name (section->objfile));
+ load_addr = msym.minsym->value_raw_address ();
+ gdb_printf (_("a thread-local variable at offset %s "
+ "in the thread-local storage for `%s'"),
+ paddress (gdbarch, load_addr),
+ objfile_name (section->objfile));
}
else
{
- load_addr = BMSYMBOL_VALUE_ADDRESS (msym);
- printf_filtered (_("static storage at address "));
+ load_addr = msym.value_address ();
+ gdb_printf (_("static storage at address "));
fputs_styled (paddress (gdbarch, load_addr),
address_style.style (), gdb_stdout);
if (section_is_overlay (section))
{
load_addr = overlay_unmapped_address (load_addr, section);
- printf_filtered (_(",\n -- loaded at "));
+ gdb_printf (_(",\n -- loaded at "));
fputs_styled (paddress (gdbarch, load_addr),
address_style.style (),
gdb_stdout);
- printf_filtered (_(" in overlay section %s"),
- section->the_bfd_section->name);
+ gdb_printf (_(" in overlay section %s"),
+ section->the_bfd_section->name);
}
}
}
@@ -1840,14 +1834,14 @@ info_address_command (const char *exp, int from_tty)
break;
case LOC_OPTIMIZED_OUT:
- printf_filtered (_("optimized out"));
+ gdb_printf (_("optimized out"));
break;
default:
- printf_filtered (_("of unknown (botched) type"));
+ gdb_printf (_("of unknown (botched) type"));
break;
}
- printf_filtered (".\n");
+ gdb_printf (".\n");
}
@@ -2058,7 +2052,7 @@ map_display_numbers (const char *args,
return item->number == num;
});
if (iter == all_displays.end ())
- printf_filtered (_("No display number %d.\n"), num);
+ gdb_printf (_("No display number %d.\n"), num);
else
function (iter->get ());
}
@@ -2143,31 +2137,31 @@ do_one_display (struct display *d)
= make_scoped_restore (&current_display_number, d->number);
annotate_display_begin ();
- printf_filtered ("%d", d->number);
+ gdb_printf ("%d", d->number);
annotate_display_number_end ();
- printf_filtered (": ");
+ gdb_printf (": ");
if (d->format.size)
{
annotate_display_format ();
- printf_filtered ("x/");
+ gdb_printf ("x/");
if (d->format.count != 1)
- printf_filtered ("%d", d->format.count);
- printf_filtered ("%c", d->format.format);
+ gdb_printf ("%d", d->format.count);
+ gdb_printf ("%c", d->format.format);
if (d->format.format != 'i' && d->format.format != 's')
- printf_filtered ("%c", d->format.size);
- printf_filtered (" ");
+ gdb_printf ("%c", d->format.size);
+ gdb_printf (" ");
annotate_display_expression ();
- puts_filtered (d->exp_string.c_str ());
+ gdb_puts (d->exp_string.c_str ());
annotate_display_expression_end ();
if (d->format.count != 1 || d->format.format == 'i')
- printf_filtered ("\n");
+ gdb_printf ("\n");
else
- printf_filtered (" ");
+ gdb_printf (" ");
annotate_display_value ();
@@ -2184,9 +2178,9 @@ do_one_display (struct display *d)
}
catch (const gdb_exception_error &ex)
{
- fprintf_filtered (gdb_stdout, _("%p[<error: %s>%p]\n"),
- metadata_style.style ().ptr (), ex.what (),
- nullptr);
+ gdb_printf (_("%p[<error: %s>%p]\n"),
+ metadata_style.style ().ptr (), ex.what (),
+ nullptr);
}
}
else
@@ -2196,14 +2190,14 @@ do_one_display (struct display *d)
annotate_display_format ();
if (d->format.format)
- printf_filtered ("/%c ", d->format.format);
+ gdb_printf ("/%c ", d->format.format);
annotate_display_expression ();
- puts_filtered (d->exp_string.c_str ());
+ gdb_puts (d->exp_string.c_str ());
annotate_display_expression_end ();
- printf_filtered (" = ");
+ gdb_printf (" = ");
annotate_display_expression ();
@@ -2223,7 +2217,7 @@ do_one_display (struct display *d)
_("<error: %s>"), ex.what ());
}
- printf_filtered ("\n");
+ gdb_printf ("\n");
}
annotate_display_end ();
@@ -2253,7 +2247,7 @@ disable_display (int num)
d->enabled_p = false;
return;
}
- printf_filtered (_("No display number %d.\n"), num);
+ gdb_printf (_("No display number %d.\n"), num);
}
void
@@ -2262,10 +2256,10 @@ disable_current_display (void)
if (current_display_number >= 0)
{
disable_display (current_display_number);
- fprintf_unfiltered (gdb_stderr,
- _("Disabling display %d to "
- "avoid infinite recursion.\n"),
- current_display_number);
+ gdb_printf (gdb_stderr,
+ _("Disabling display %d to "
+ "avoid infinite recursion.\n"),
+ current_display_number);
}
current_display_number = -1;
}
@@ -2274,23 +2268,23 @@ static void
info_display_command (const char *ignore, int from_tty)
{
if (all_displays.empty ())
- printf_filtered (_("There are no auto-display expressions now.\n"));
+ gdb_printf (_("There are no auto-display expressions now.\n"));
else
- printf_filtered (_("Auto-display expressions now in effect:\n\
+ gdb_printf (_("Auto-display expressions now in effect:\n\
Num Enb Expression\n"));
for (auto &d : all_displays)
{
- printf_filtered ("%d: %c ", d->number, "ny"[(int) d->enabled_p]);
+ gdb_printf ("%d: %c ", d->number, "ny"[(int) d->enabled_p]);
if (d->format.size)
- printf_filtered ("/%d%c%c ", d->format.count, d->format.size,
- d->format.format);
+ gdb_printf ("/%d%c%c ", d->format.count, d->format.size,
+ d->format.format);
else if (d->format.format)
- printf_filtered ("/%c ", d->format.format);
- puts_filtered (d->exp_string.c_str ());
+ gdb_printf ("/%c ", d->format.format);
+ gdb_puts (d->exp_string.c_str ());
if (d->block && !contained_in (get_selected_block (0), d->block, true))
- printf_filtered (_(" (cannot be evaluated in the current context)"));
- printf_filtered ("\n");
+ gdb_printf (_(" (cannot be evaluated in the current context)"));
+ gdb_printf ("\n");
}
}
@@ -2393,8 +2387,8 @@ print_variable_and_value (const char *name, struct symbol *var,
if (!name)
name = var->print_name ();
- fprintf_filtered (stream, "%*s%ps = ", 2 * indent, "",
- styled_string (variable_name_style.style (), name));
+ gdb_printf (stream, "%*s%ps = ", 2 * indent, "",
+ styled_string (variable_name_style.style (), name));
try
{
@@ -2421,7 +2415,7 @@ print_variable_and_value (const char *name, struct symbol *var,
except.what ());
}
- fprintf_filtered (stream, "\n");
+ gdb_printf (stream, "\n");
}
/* Subroutine of ui_printf to simplify it.
@@ -2459,7 +2453,7 @@ printf_c_string (struct ui_file *stream, const char *format,
{
DIAGNOSTIC_PUSH
DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
- fprintf_filtered (stream, format, "(null)");
+ gdb_printf (stream, format, "(null)");
DIAGNOSTIC_POP
return;
}
@@ -2488,7 +2482,7 @@ printf_c_string (struct ui_file *stream, const char *format,
DIAGNOSTIC_PUSH
DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
- fprintf_filtered (stream, format, (char *) str);
+ gdb_printf (stream, format, (char *) str);
DIAGNOSTIC_POP
}
@@ -2522,7 +2516,7 @@ printf_wide_c_string (struct ui_file *stream, const char *format,
{
DIAGNOSTIC_PUSH
DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
- fprintf_filtered (stream, format, "(null)");
+ gdb_printf (stream, format, "(null)");
DIAGNOSTIC_POP
return;
}
@@ -2558,7 +2552,7 @@ printf_wide_c_string (struct ui_file *stream, const char *format,
DIAGNOSTIC_PUSH
DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
- fprintf_filtered (stream, format, obstack_base (&output));
+ gdb_printf (stream, format, obstack_base (&output));
DIAGNOSTIC_POP
}
@@ -2629,7 +2623,7 @@ printf_floating (struct ui_file *stream, const char *format,
/* Convert the value to a string and print it. */
std::string str
= target_float_to_string (value_contents (value).data (), fmt_type, format);
- fputs_filtered (str.c_str (), stream);
+ gdb_puts (str.c_str (), stream);
}
/* Subroutine of ui_printf to simplify it.
@@ -2690,7 +2684,7 @@ printf_pointer (struct ui_file *stream, const char *format,
*fmt_p++ = '\0';
DIAGNOSTIC_PUSH
DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
- fprintf_filtered (stream, fmt, val);
+ gdb_printf (stream, fmt, val);
DIAGNOSTIC_POP
}
else
@@ -2699,7 +2693,7 @@ printf_pointer (struct ui_file *stream, const char *format,
*fmt_p++ = '\0';
DIAGNOSTIC_PUSH
DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
- fprintf_filtered (stream, fmt, "(nil)");
+ gdb_printf (stream, fmt, "(nil)");
DIAGNOSTIC_POP
}
}
@@ -2802,8 +2796,8 @@ ui_printf (const char *arg, struct ui_file *stream)
DIAGNOSTIC_PUSH
DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
- fprintf_filtered (stream, current_substring,
- obstack_base (&output));
+ gdb_printf (stream, current_substring,
+ obstack_base (&output));
DIAGNOSTIC_POP
}
break;
@@ -2814,7 +2808,7 @@ ui_printf (const char *arg, struct ui_file *stream)
DIAGNOSTIC_PUSH
DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
- fprintf_filtered (stream, current_substring, val);
+ gdb_printf (stream, current_substring, val);
DIAGNOSTIC_POP
break;
}
@@ -2827,7 +2821,7 @@ ui_printf (const char *arg, struct ui_file *stream)
DIAGNOSTIC_PUSH
DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
- fprintf_filtered (stream, current_substring, val);
+ gdb_printf (stream, current_substring, val);
DIAGNOSTIC_POP
break;
}
@@ -2837,7 +2831,7 @@ ui_printf (const char *arg, struct ui_file *stream)
DIAGNOSTIC_PUSH
DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
- fprintf_filtered (stream, current_substring, val);
+ gdb_printf (stream, current_substring, val);
DIAGNOSTIC_POP
break;
}
@@ -2847,7 +2841,7 @@ ui_printf (const char *arg, struct ui_file *stream)
DIAGNOSTIC_PUSH
DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
- fprintf_filtered (stream, current_substring, val);
+ gdb_printf (stream, current_substring, val);
DIAGNOSTIC_POP
break;
}
@@ -2867,14 +2861,14 @@ ui_printf (const char *arg, struct ui_file *stream)
/* Print a portion of the format string that has no
directives. Note that this will not include any
ordinary %-specs, but it might include "%%". That is
- why we use printf_filtered and not puts_filtered here.
+ why we use gdb_printf and not gdb_puts here.
Also, we pass a dummy argument because some platforms
have modified GCC to include -Wformat-security by
default, which will warn here if there is no
argument. */
DIAGNOSTIC_PUSH
DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
- fprintf_filtered (stream, current_substring, 0);
+ gdb_printf (stream, current_substring, 0);
DIAGNOSTIC_POP
break;
default:
@@ -2894,8 +2888,8 @@ static void
printf_command (const char *arg, int from_tty)
{
ui_printf (arg, gdb_stdout);
- reset_terminal_style (gdb_stdout);
- wrap_here ("");
+ gdb_stdout->reset_style ();
+ gdb_stdout->wrap_here (0);
gdb_stdout->flush ();
}
@@ -2966,9 +2960,9 @@ memory_tag_print_tag_command (const char *args, enum memtag_type tag_type)
std::string tag = gdbarch_memtag_to_string (target_gdbarch (), tag_value);
if (tag.empty ())
- printf_filtered (_("%s tag unavailable.\n"),
- tag_type
- == memtag_type::logical? "Logical" : "Allocation");
+ gdb_printf (_("%s tag unavailable.\n"),
+ tag_type
+ == memtag_type::logical? "Logical" : "Allocation");
struct value *v_tag = process_print_command_args (tag.c_str (),
&print_opts,
@@ -3064,7 +3058,7 @@ memory_tag_with_logical_tag_command (const char *args, int from_tty)
/* Length doesn't matter for a logical tag. Pass 0. */
if (!gdbarch_set_memtags (target_gdbarch (), val, 0, tags,
memtag_type::logical))
- printf_filtered (_("Could not update the logical tag data.\n"));
+ gdb_printf (_("Could not update the logical tag data.\n"));
else
{
/* Always print it in hex format. */
@@ -3141,9 +3135,9 @@ memory_tag_set_allocation_tag_command (const char *args, int from_tty)
if (!gdbarch_set_memtags (target_gdbarch (), val, length, tags,
memtag_type::allocation))
- printf_filtered (_("Could not update the allocation tag(s).\n"));
+ gdb_printf (_("Could not update the allocation tag(s).\n"));
else
- printf_filtered (_("Allocation tag(s) updated successfully.\n"));
+ gdb_printf (_("Allocation tag(s) updated successfully.\n"));
}
/* Implement the "memory-tag check" command. */
@@ -3183,10 +3177,10 @@ memory_tag_check_command (const char *args, int from_tty)
std::string atag
= gdbarch_memtag_to_string (target_gdbarch (), tag);
- printf_filtered (_("Logical tag (%s) does not match"
- " the allocation tag (%s) for address %s.\n"),
- ltag.c_str (), atag.c_str (),
- paddress (target_gdbarch (), addr));
+ gdb_printf (_("Logical tag (%s) does not match"
+ " the allocation tag (%s) for address %s.\n"),
+ ltag.c_str (), atag.c_str (),
+ paddress (target_gdbarch (), addr));
}
else
{
@@ -3195,8 +3189,8 @@ memory_tag_check_command (const char *args, int from_tty)
std::string ltag
= gdbarch_memtag_to_string (target_gdbarch (), tag);
- printf_filtered (_("Memory tags for address %s match (%s).\n"),
- paddress (target_gdbarch (), addr), ltag.c_str ());
+ gdb_printf (_("Memory tags for address %s match (%s).\n"),
+ paddress (target_gdbarch (), addr), ltag.c_str ());
}
}
@@ -3304,18 +3298,6 @@ Use \"set variable\" for variables with names identical to set subcommands.\n\
With a subcommand, this command modifies parts of the gdb environment.\n\
You can see these environment settings with the \"show\" command."),
&setlist, 1, &cmdlist);
- if (dbx_commands)
- add_com ("assign", class_vars, set_command, _("\
-Evaluate expression EXP and assign result to variable VAR.\n\
-Usage: assign VAR = EXP\n\
-This uses assignment syntax appropriate for the current language\n\
-(VAR = EXP or VAR := EXP for example).\n\
-VAR may be a debugger \"convenience\" variable (names starting\n\
-with $), a register (a few standard names starting with $), or an actual\n\
-variable in the program being debugged. EXP is any valid expression.\n\
-Use \"set variable\" for variables with names identical to set subcommands.\n\
-\nWith a subcommand, this command modifies parts of the gdb environment.\n\
-You can see these environment settings with the \"show\" command."));
/* "call" is the same as "set", but handy for dbx users to call fns. */
c = add_com ("call", class_vars, call_command, _("\
diff --git a/gdb/probe.c b/gdb/probe.c
index b8da177a0ae..f0a40f5face 100644
--- a/gdb/probe.c
+++ b/gdb/probe.c
@@ -27,7 +27,7 @@
#include "progspace.h"
#include "filenames.h"
#include "linespec.h"
-#include "gdb_regex.h"
+#include "gdbsupport/gdb_regex.h"
#include "frame.h"
#include "arch-utils.h"
#include "value.h"
@@ -204,7 +204,7 @@ parse_probes (const struct event_location *location,
std::string canon (arg_start, arg_end - arg_start);
canonical->special_display = 1;
canonical->pre_expanded = 1;
- canonical->location = new_probe_location (canon.c_str ());
+ canonical->location = new_probe_location (std::move (canon));
}
return result;
@@ -866,7 +866,6 @@ static const struct internalvar_funcs probe_funcs =
{
compute_probe_arg,
compile_probe_arg,
- NULL
};
diff --git a/gdb/proc-service.c b/gdb/proc-service.c
index e21ea05872a..dd3d7c9201e 100644
--- a/gdb/proc-service.c
+++ b/gdb/proc-service.c
@@ -111,7 +111,7 @@ ps_pglobal_lookup (struct ps_prochandle *ph, const char *obj,
if (ms.minsym == NULL)
return PS_NOSYM;
- *sym_addr = core_addr_to_ps_addr (BMSYMBOL_VALUE_ADDRESS (ms));
+ *sym_addr = core_addr_to_ps_addr (ms.value_address ());
return PS_OK;
}
diff --git a/gdb/procfs.c b/gdb/procfs.c
index 840201d1897..f6ca1345a21 100644
--- a/gdb/procfs.c
+++ b/gdb/procfs.c
@@ -45,6 +45,7 @@
#include "observable.h"
#include "gdbsupport/scoped_fd.h"
#include "gdbsupport/pathstuff.h"
+#include "gdbsupport/buildargv.h"
/* This module provides the interface between GDB and the
/proc file system, which is used on many versions of Unix
@@ -1809,7 +1810,7 @@ do_attach (ptid_t ptid)
if (!open_procinfo_files (pi, FD_CTL))
{
- fprintf_filtered (gdb_stderr, "procfs:%d -- ", __LINE__);
+ gdb_printf (gdb_stderr, "procfs:%d -- ", __LINE__);
xsnprintf (errmsg, sizeof (errmsg),
"do_attach: couldn't open /proc file for process %d",
ptid.pid ());
@@ -2122,8 +2123,8 @@ wait_again:
if (what == SYS_lwp_exit)
{
if (print_thread_events)
- printf_unfiltered (_("[%s exited]\n"),
- target_pid_to_str (retval).c_str ());
+ gdb_printf (_("[%s exited]\n"),
+ target_pid_to_str (retval).c_str ());
delete_thread (find_thread_ptid (this, retval));
target_continue_no_signal (ptid);
goto wait_again;
@@ -2171,9 +2172,9 @@ wait_again:
}
else
{
- printf_filtered (_("procfs: trapped on entry to "));
+ gdb_printf (_("procfs: trapped on entry to "));
proc_prettyprint_syscall (proc_what (pi), 0);
- printf_filtered ("\n");
+ gdb_printf ("\n");
long i, nsysargs, *sysargs;
@@ -2182,11 +2183,11 @@ wait_again:
if (nsysargs > 0 && sysargs != NULL)
{
- printf_filtered (_("%ld syscall arguments:\n"),
- nsysargs);
+ gdb_printf (_("%ld syscall arguments:\n"),
+ nsysargs);
for (i = 0; i < nsysargs; i++)
- printf_filtered ("#%ld: 0x%08lx\n",
- i, sysargs[i]);
+ gdb_printf ("#%ld: 0x%08lx\n",
+ i, sysargs[i]);
}
/* How to keep going without returning to wfi: */
@@ -2229,17 +2230,17 @@ wait_again:
else if (what == SYS_lwp_exit)
{
if (print_thread_events)
- printf_unfiltered (_("[%s exited]\n"),
- target_pid_to_str (retval).c_str ());
+ gdb_printf (_("[%s exited]\n"),
+ target_pid_to_str (retval).c_str ());
delete_thread (find_thread_ptid (this, retval));
status->set_spurious ();
return retval;
}
else
{
- printf_filtered (_("procfs: trapped on exit from "));
+ gdb_printf (_("procfs: trapped on exit from "));
proc_prettyprint_syscall (proc_what (pi), 0);
- printf_filtered ("\n");
+ gdb_printf ("\n");
long i, nsysargs, *sysargs;
@@ -2248,11 +2249,11 @@ wait_again:
if (nsysargs > 0 && sysargs != NULL)
{
- printf_filtered (_("%ld syscall arguments:\n"),
- nsysargs);
+ gdb_printf (_("%ld syscall arguments:\n"),
+ nsysargs);
for (i = 0; i < nsysargs; i++)
- printf_filtered ("#%ld: 0x%08lx\n",
- i, sysargs[i]);
+ gdb_printf ("#%ld: 0x%08lx\n",
+ i, sysargs[i]);
}
target_continue_no_signal (ptid);
@@ -2266,7 +2267,7 @@ wait_again:
#else
if (retry < 5)
{
- printf_filtered (_("Retry #%d:\n"), retry);
+ gdb_printf (_("Retry #%d:\n"), retry);
pi->status_valid = 0;
goto wait_again;
}
@@ -2297,8 +2298,8 @@ wait_again:
}
break;
default: /* switch (why) unmatched */
- printf_filtered ("procfs:%d -- ", __LINE__);
- printf_filtered (_("child stopped for unknown reason:\n"));
+ gdb_printf ("procfs:%d -- ", __LINE__);
+ gdb_printf (_("child stopped for unknown reason:\n"));
proc_prettyprint_why (why, what, 1);
error (_("... giving up..."));
break;
@@ -2321,8 +2322,8 @@ wait_again:
else /* Flags do not indicate STOPPED. */
{
/* surely this can't happen... */
- printf_filtered ("procfs:%d -- process not stopped.\n",
- __LINE__);
+ gdb_printf ("procfs:%d -- process not stopped.\n",
+ __LINE__);
proc_prettyprint_flags (flags, 1);
error (_("procfs: ...giving up..."));
}
@@ -2537,9 +2538,9 @@ procfs_target::files_info ()
{
struct inferior *inf = current_inferior ();
- printf_filtered (_("\tUsing the running image of %s %s via /proc.\n"),
- inf->attach_flag? "attached": "child",
- target_pid_to_str (inferior_ptid).c_str ());
+ gdb_printf (_("\tUsing the running image of %s %s via /proc.\n"),
+ inf->attach_flag? "attached": "child",
+ target_pid_to_str (inferior_ptid).c_str ());
}
/* Make it die. Wait for it to die. Clean up after it. Note: this
@@ -3228,19 +3229,19 @@ info_mappings_callback (struct prmap *map, find_memory_region_ftype ignore,
pr_off = (unsigned int) map->pr_offset;
if (gdbarch_addr_bit (target_gdbarch ()) == 32)
- printf_filtered ("\t%#10lx %#10lx %#10lx %#10x %7s\n",
- (unsigned long) map->pr_vaddr,
- (unsigned long) map->pr_vaddr + map->pr_size - 1,
- (unsigned long) map->pr_size,
- pr_off,
- mappingflags (map->pr_mflags));
+ gdb_printf ("\t%#10lx %#10lx %#10lx %#10x %7s\n",
+ (unsigned long) map->pr_vaddr,
+ (unsigned long) map->pr_vaddr + map->pr_size - 1,
+ (unsigned long) map->pr_size,
+ pr_off,
+ mappingflags (map->pr_mflags));
else
- printf_filtered (" %#18lx %#18lx %#10lx %#10x %7s\n",
- (unsigned long) map->pr_vaddr,
- (unsigned long) map->pr_vaddr + map->pr_size - 1,
- (unsigned long) map->pr_size,
- pr_off,
- mappingflags (map->pr_mflags));
+ gdb_printf (" %#18lx %#18lx %#10lx %#10x %7s\n",
+ (unsigned long) map->pr_vaddr,
+ (unsigned long) map->pr_vaddr + map->pr_size - 1,
+ (unsigned long) map->pr_size,
+ pr_off,
+ mappingflags (map->pr_mflags));
return 0;
}
@@ -3253,24 +3254,24 @@ info_proc_mappings (procinfo *pi, int summary)
if (summary)
return; /* No output for summary mode. */
- printf_filtered (_("Mapped address spaces:\n\n"));
+ gdb_printf (_("Mapped address spaces:\n\n"));
if (gdbarch_ptr_bit (target_gdbarch ()) == 32)
- printf_filtered ("\t%10s %10s %10s %10s %7s\n",
- "Start Addr",
- " End Addr",
- " Size",
- " Offset",
- "Flags");
+ gdb_printf ("\t%10s %10s %10s %10s %7s\n",
+ "Start Addr",
+ " End Addr",
+ " Size",
+ " Offset",
+ "Flags");
else
- printf_filtered (" %18s %18s %10s %10s %7s\n",
- "Start Addr",
- " End Addr",
- " Size",
- " Offset",
- "Flags");
+ gdb_printf (" %18s %18s %10s %10s %7s\n",
+ "Start Addr",
+ " End Addr",
+ " Size",
+ " Offset",
+ "Flags");
iterate_over_mappings (pi, NULL, NULL, info_mappings_callback);
- printf_filtered ("\n");
+ gdb_printf ("\n");
}
/* Implement the "info proc" command. */
@@ -3339,17 +3340,17 @@ procfs_target::info_proc (const char *args, enum info_proc_what what)
if (process)
{
- printf_filtered (_("process %d flags:\n"), process->pid);
+ gdb_printf (_("process %d flags:\n"), process->pid);
proc_prettyprint_flags (proc_flags (process), 1);
if (proc_flags (process) & (PR_STOPPED | PR_ISTOP))
proc_prettyprint_why (proc_why (process), proc_what (process), 1);
if (proc_get_nthreads (process) > 1)
- printf_filtered ("Process has %d threads.\n",
- proc_get_nthreads (process));
+ gdb_printf ("Process has %d threads.\n",
+ proc_get_nthreads (process));
}
if (thread)
{
- printf_filtered (_("thread %d flags:\n"), thread->tid);
+ gdb_printf (_("thread %d flags:\n"), thread->tid);
proc_prettyprint_flags (proc_flags (thread), 1);
if (proc_flags (thread) & (PR_STOPPED | PR_ISTOP))
proc_prettyprint_why (proc_why (thread), proc_what (thread), 1);
diff --git a/gdb/producer.c b/gdb/producer.c
index ba6e021b94a..ef1dd93afbc 100644
--- a/gdb/producer.c
+++ b/gdb/producer.c
@@ -20,7 +20,7 @@
#include "defs.h"
#include "producer.h"
#include "gdbsupport/selftest.h"
-#include "gdb_regex.h"
+#include "gdbsupport/gdb_regex.h"
/* See producer.h. */
diff --git a/gdb/progspace.c b/gdb/progspace.c
index 4a2ac84ca06..1ee4fe3f940 100644
--- a/gdb/progspace.c
+++ b/gdb/progspace.c
@@ -27,6 +27,7 @@
#include "gdbthread.h"
#include "inferior.h"
#include <algorithm>
+#include "cli/cli-style.h"
/* The last program space number assigned. */
static int last_program_space_num = 0;
@@ -321,7 +322,8 @@ print_program_space (struct ui_out *uiout, int requested)
uiout->field_signed ("id", pspace->num);
if (pspace->exec_filename != nullptr)
- uiout->field_string ("exec", pspace->exec_filename.get ());
+ uiout->field_string ("exec", pspace->exec_filename.get (),
+ file_name_style.style ());
else
uiout->field_skip ("exec");
@@ -344,14 +346,14 @@ print_program_space (struct ui_out *uiout, int requested)
if (!printed_header)
{
printed_header = 1;
- printf_filtered ("\n\tBound inferiors: ID %d (%s)",
- inf->num,
- target_pid_to_str (ptid_t (inf->pid)).c_str ());
+ gdb_printf ("\n\tBound inferiors: ID %d (%s)",
+ inf->num,
+ target_pid_to_str (ptid_t (inf->pid)).c_str ());
}
else
- printf_filtered (", ID %d (%s)",
- inf->num,
- target_pid_to_str (ptid_t (inf->pid)).c_str ());
+ gdb_printf (", ID %d (%s)",
+ inf->num,
+ target_pid_to_str (ptid_t (inf->pid)).c_str ());
}
uiout->text ("\n");
diff --git a/gdb/psympriv.h b/gdb/psympriv.h
index eeaf076bf13..677a57edee8 100644
--- a/gdb/psympriv.h
+++ b/gdb/psympriv.h
@@ -46,14 +46,14 @@ struct partial_symbol
/* Return the unrelocated address of this partial symbol. */
CORE_ADDR unrelocated_address () const
{
- return ginfo.value.address;
+ return ginfo.value_address ();
}
/* Return the address of this partial symbol, relocated according to
the offsets provided in OBJFILE. */
CORE_ADDR address (const struct objfile *objfile) const
{
- return (ginfo.value.address
+ return (ginfo.value_address ()
+ objfile->section_offsets[ginfo.section_index ()]);
}
@@ -61,7 +61,7 @@ struct partial_symbol
unrelocated. */
void set_unrelocated_address (CORE_ADDR addr)
{
- ginfo.value.address = addr;
+ ginfo.set_value_address (addr);
}
/* Note that partial_symbol does not derive from general_symbol_info
@@ -71,7 +71,7 @@ struct partial_symbol
/* Name space code. */
- ENUM_BITFIELD(domain_enum_tag) domain : SYMBOL_DOMAIN_BITS;
+ ENUM_BITFIELD(domain_enum) domain : SYMBOL_DOMAIN_BITS;
/* Address class (for info_symbols). Note that we don't allow
synthetic "aclass" values here at present, simply because there's
diff --git a/gdb/psymtab.c b/gdb/psymtab.c
index 7e2da485ba5..402d6085fe6 100644
--- a/gdb/psymtab.c
+++ b/gdb/psymtab.c
@@ -29,13 +29,14 @@
#include "ui-out.h"
#include "command.h"
#include "readline/tilde.h"
-#include "gdb_regex.h"
+#include "gdbsupport/gdb_regex.h"
#include "dictionary.h"
#include "language.h"
#include "cp-support.h"
#include "gdbcmd.h"
#include <algorithm>
#include <set>
+#include "gdbsupport/buildargv.h"
static struct partial_symbol *lookup_partial_symbol (struct objfile *,
struct partial_symtab *,
@@ -133,7 +134,7 @@ find_pc_sect_psymtab_closer (struct objfile *objfile,
object's symbol table. */
p = find_pc_sect_psymbol (objfile, tpst, pc, section);
if (p != NULL
- && (p->address (objfile) == BMSYMBOL_VALUE_ADDRESS (msymbol)))
+ && (p->address (objfile) == msymbol.value_address ()))
return tpst;
/* Also accept the textlow value of a psymtab as a
@@ -210,7 +211,7 @@ psymbol_functions::find_pc_sect_psymtab (struct objfile *objfile,
p = find_pc_sect_psymbol (objfile, pst, pc, section);
if (p == NULL
|| (p->address (objfile)
- != BMSYMBOL_VALUE_ADDRESS (msymbol)))
+ != msymbol.value_address ()))
goto next;
}
@@ -587,8 +588,8 @@ psymtab_to_symtab (struct objfile *objfile, struct partial_symtab *pst)
if (info_verbose)
{
- printf_filtered (_("Reading in symbols for %s...\n"),
- pst->filename);
+ gdb_printf (_("Reading in symbols for %s...\n"),
+ pst->filename);
gdb_flush (gdb_stdout);
}
@@ -630,7 +631,7 @@ psymbol_functions::find_last_source_symtab (struct objfile *ofp)
if (cust == NULL)
return NULL;
- return compunit_primary_filetab (cust);
+ return cust->primary_filetab ();
}
}
return NULL;
@@ -657,95 +658,95 @@ print_partial_symbols (struct gdbarch *gdbarch, struct objfile *objfile,
const std::vector<partial_symbol *> &symbols,
const char *what, struct ui_file *outfile)
{
- fprintf_filtered (outfile, " %s partial symbols:\n", what);
+ gdb_printf (outfile, " %s partial symbols:\n", what);
for (partial_symbol *p : symbols)
{
QUIT;
- fprintf_filtered (outfile, " `%s'", p->ginfo.linkage_name ());
+ gdb_printf (outfile, " `%s'", p->ginfo.linkage_name ());
if (p->ginfo.demangled_name () != NULL)
{
- fprintf_filtered (outfile, " `%s'",
- p->ginfo.demangled_name ());
+ gdb_printf (outfile, " `%s'",
+ p->ginfo.demangled_name ());
}
- fputs_filtered (", ", outfile);
+ gdb_puts (", ", outfile);
switch (p->domain)
{
case UNDEF_DOMAIN:
- fputs_filtered ("undefined domain, ", outfile);
+ gdb_puts ("undefined domain, ", outfile);
break;
case VAR_DOMAIN:
/* This is the usual thing -- don't print it. */
break;
case STRUCT_DOMAIN:
- fputs_filtered ("struct domain, ", outfile);
+ gdb_puts ("struct domain, ", outfile);
break;
case MODULE_DOMAIN:
- fputs_filtered ("module domain, ", outfile);
+ gdb_puts ("module domain, ", outfile);
break;
case LABEL_DOMAIN:
- fputs_filtered ("label domain, ", outfile);
+ gdb_puts ("label domain, ", outfile);
break;
case COMMON_BLOCK_DOMAIN:
- fputs_filtered ("common block domain, ", outfile);
+ gdb_puts ("common block domain, ", outfile);
break;
default:
- fputs_filtered ("<invalid domain>, ", outfile);
+ gdb_puts ("<invalid domain>, ", outfile);
break;
}
switch (p->aclass)
{
case LOC_UNDEF:
- fputs_filtered ("undefined", outfile);
+ gdb_puts ("undefined", outfile);
break;
case LOC_CONST:
- fputs_filtered ("constant int", outfile);
+ gdb_puts ("constant int", outfile);
break;
case LOC_STATIC:
- fputs_filtered ("static", outfile);
+ gdb_puts ("static", outfile);
break;
case LOC_REGISTER:
- fputs_filtered ("register", outfile);
+ gdb_puts ("register", outfile);
break;
case LOC_ARG:
- fputs_filtered ("pass by value", outfile);
+ gdb_puts ("pass by value", outfile);
break;
case LOC_REF_ARG:
- fputs_filtered ("pass by reference", outfile);
+ gdb_puts ("pass by reference", outfile);
break;
case LOC_REGPARM_ADDR:
- fputs_filtered ("register address parameter", outfile);
+ gdb_puts ("register address parameter", outfile);
break;
case LOC_LOCAL:
- fputs_filtered ("stack parameter", outfile);
+ gdb_puts ("stack parameter", outfile);
break;
case LOC_TYPEDEF:
- fputs_filtered ("type", outfile);
+ gdb_puts ("type", outfile);
break;
case LOC_LABEL:
- fputs_filtered ("label", outfile);
+ gdb_puts ("label", outfile);
break;
case LOC_BLOCK:
- fputs_filtered ("function", outfile);
+ gdb_puts ("function", outfile);
break;
case LOC_CONST_BYTES:
- fputs_filtered ("constant bytes", outfile);
+ gdb_puts ("constant bytes", outfile);
break;
case LOC_UNRESOLVED:
- fputs_filtered ("unresolved", outfile);
+ gdb_puts ("unresolved", outfile);
break;
case LOC_OPTIMIZED_OUT:
- fputs_filtered ("optimized out", outfile);
+ gdb_puts ("optimized out", outfile);
break;
case LOC_COMPUTED:
- fputs_filtered ("computed at runtime", outfile);
+ gdb_puts ("computed at runtime", outfile);
break;
default:
- fputs_filtered ("<invalid location>", outfile);
+ gdb_puts ("<invalid location>", outfile);
break;
}
- fputs_filtered (", ", outfile);
- fputs_filtered (paddress (gdbarch, p->unrelocated_address ()), outfile);
- fprintf_filtered (outfile, "\n");
+ gdb_puts (", ", outfile);
+ gdb_puts (paddress (gdbarch, p->unrelocated_address ()), outfile);
+ gdb_printf (outfile, "\n");
}
}
@@ -758,41 +759,41 @@ dump_psymtab (struct objfile *objfile, struct partial_symtab *psymtab,
if (psymtab->anonymous)
{
- fprintf_filtered (outfile, "\nAnonymous partial symtab (%s) ",
- psymtab->filename);
+ gdb_printf (outfile, "\nAnonymous partial symtab (%s) ",
+ psymtab->filename);
}
else
{
- fprintf_filtered (outfile, "\nPartial symtab for source file %s ",
- psymtab->filename);
+ gdb_printf (outfile, "\nPartial symtab for source file %s ",
+ psymtab->filename);
}
- fprintf_filtered (outfile, "(object %s)\n\n",
- host_address_to_string (psymtab));
- fprintf_filtered (outfile, " Read from object file %s (%s)\n",
- objfile_name (objfile),
- host_address_to_string (objfile));
+ gdb_printf (outfile, "(object %s)\n\n",
+ host_address_to_string (psymtab));
+ gdb_printf (outfile, " Read from object file %s (%s)\n",
+ objfile_name (objfile),
+ host_address_to_string (objfile));
if (psymtab->readin_p (objfile))
- fprintf_filtered
+ gdb_printf
(outfile,
" Full symtab was read (at %s)\n",
host_address_to_string (psymtab->get_compunit_symtab (objfile)));
- fprintf_filtered (outfile, " Symbols cover text addresses ");
- fputs_filtered (paddress (gdbarch, psymtab->text_low (objfile)), outfile);
- fprintf_filtered (outfile, "-");
- fputs_filtered (paddress (gdbarch, psymtab->text_high (objfile)), outfile);
- fprintf_filtered (outfile, "\n");
- fprintf_filtered (outfile, " Address map supported - %s.\n",
- psymtab->psymtabs_addrmap_supported ? "yes" : "no");
- fprintf_filtered (outfile, " Depends on %d other partial symtabs.\n",
- psymtab->number_of_dependencies);
+ gdb_printf (outfile, " Symbols cover text addresses ");
+ gdb_puts (paddress (gdbarch, psymtab->text_low (objfile)), outfile);
+ gdb_printf (outfile, "-");
+ gdb_puts (paddress (gdbarch, psymtab->text_high (objfile)), outfile);
+ gdb_printf (outfile, "\n");
+ gdb_printf (outfile, " Address map supported - %s.\n",
+ psymtab->psymtabs_addrmap_supported ? "yes" : "no");
+ gdb_printf (outfile, " Depends on %d other partial symtabs.\n",
+ psymtab->number_of_dependencies);
for (i = 0; i < psymtab->number_of_dependencies; i++)
- fprintf_filtered (outfile, " %d %s\n", i,
- host_address_to_string (psymtab->dependencies[i]));
+ gdb_printf (outfile, " %d %s\n", i,
+ host_address_to_string (psymtab->dependencies[i]));
if (psymtab->user != NULL)
- fprintf_filtered (outfile, " Shared partial symtab with user %s\n",
- host_address_to_string (psymtab->user));
+ gdb_printf (outfile, " Shared partial symtab with user %s\n",
+ host_address_to_string (psymtab->user));
if (!psymtab->global_psymbols.empty ())
{
print_partial_symbols
@@ -805,7 +806,7 @@ dump_psymtab (struct objfile *objfile, struct partial_symtab *psymtab,
(gdbarch, objfile, psymtab->static_psymbols,
"Static", outfile);
}
- fprintf_filtered (outfile, "\n");
+ gdb_printf (outfile, "\n");
}
/* Count the number of partial symbols in OBJFILE. */
@@ -834,8 +835,8 @@ psymbol_functions::print_stats (struct objfile *objfile, bool print_bcache)
{
int n_psyms = count_psyms ();
if (n_psyms > 0)
- printf_filtered (_(" Number of \"partial\" symbols read: %d\n"),
- n_psyms);
+ gdb_printf (_(" Number of \"partial\" symbols read: %d\n"),
+ n_psyms);
i = 0;
for (partial_symtab *ps : require_partial_symbols (objfile))
@@ -843,14 +844,14 @@ psymbol_functions::print_stats (struct objfile *objfile, bool print_bcache)
if (!ps->readin_p (objfile))
i++;
}
- printf_filtered (_(" Number of psym tables (not yet expanded): %d\n"),
- i);
- printf_filtered (_(" Total memory used for psymbol cache: %d\n"),
- m_partial_symtabs->psymbol_cache.memory_used ());
+ gdb_printf (_(" Number of psym tables (not yet expanded): %d\n"),
+ i);
+ gdb_printf (_(" Total memory used for psymbol cache: %d\n"),
+ m_partial_symtabs->psymbol_cache.memory_used ());
}
else
{
- printf_filtered (_("Psymbol byte cache statistics:\n"));
+ gdb_printf (_("Psymbol byte cache statistics:\n"));
m_partial_symtabs->psymbol_cache.print_statistics
("partial symbol cache");
}
@@ -866,14 +867,14 @@ psymbol_functions::dump (struct objfile *objfile)
if (m_partial_symtabs->psymtabs)
{
- printf_filtered ("Psymtabs:\n");
+ gdb_printf ("Psymtabs:\n");
for (psymtab = m_partial_symtabs->psymtabs;
psymtab != NULL;
psymtab = psymtab->next)
- printf_filtered ("%s at %s\n",
- psymtab->filename,
- host_address_to_string (psymtab));
- printf_filtered ("\n\n");
+ gdb_printf ("%s at %s\n",
+ psymtab->filename,
+ host_address_to_string (psymtab));
+ gdb_printf ("\n\n");
}
}
@@ -1135,13 +1136,10 @@ psymbol_functions::expand_symtabs_matching
*psym_lookup_name,
symbol_matcher))
{
- struct compunit_symtab *symtab =
- psymtab_to_symtab (objfile, ps);
-
- gdb_assert (symtab != nullptr);
+ compunit_symtab *cust = psymtab_to_symtab (objfile, ps);
- if (expansion_notify != NULL)
- if (!expansion_notify (symtab))
+ if (cust != nullptr && expansion_notify != nullptr)
+ if (!expansion_notify (cust))
return false;
}
}
@@ -1289,7 +1287,7 @@ psymbol_bcache::hash (const void *addr, int length)
unsigned int domain = psymbol->domain;
unsigned int theclass = psymbol->aclass;
- h = fast_hash (&psymbol->ginfo.value, sizeof (psymbol->ginfo.value), h);
+ h = fast_hash (&psymbol->ginfo.m_value, sizeof (psymbol->ginfo.m_value), h);
h = fast_hash (&lang, sizeof (unsigned int), h);
h = fast_hash (&domain, sizeof (unsigned int), h);
h = fast_hash (&theclass, sizeof (unsigned int), h);
@@ -1308,8 +1306,8 @@ psymbol_bcache::compare (const void *addr1, const void *addr2, int length)
struct partial_symbol *sym1 = (struct partial_symbol *) addr1;
struct partial_symbol *sym2 = (struct partial_symbol *) addr2;
- return (memcmp (&sym1->ginfo.value, &sym2->ginfo.value,
- sizeof (sym1->ginfo.value)) == 0
+ return (memcmp (&sym1->ginfo.m_value, &sym2->ginfo.m_value,
+ sizeof (sym1->ginfo.m_value)) == 0
&& sym1->ginfo.language () == sym2->ginfo.language ()
&& sym1->domain == sym2->domain
&& sym1->aclass == sym2->aclass
@@ -1397,13 +1395,13 @@ partial_symtab::partial_symtab (const char *filename_,
if (last_bfd_name.empty () || last_bfd_name != this_bfd_name)
{
last_bfd_name = this_bfd_name;
- fprintf_filtered (gdb_stdlog,
- "Creating one or more psymtabs for %s ...\n",
- this_bfd_name);
+ gdb_printf (gdb_stdlog,
+ "Creating one or more psymtabs for %s ...\n",
+ this_bfd_name);
}
- fprintf_filtered (gdb_stdlog,
- "Created psymtab %s for module %s.\n",
- host_address_to_string (this), filename);
+ gdb_printf (gdb_stdlog,
+ "Created psymtab %s for module %s.\n",
+ host_address_to_string (this), filename);
}
}
@@ -1420,12 +1418,11 @@ partial_symtab::expand_dependencies (struct objfile *objfile)
/* Inform about additional files to be read in. */
if (info_verbose)
{
- fputs_filtered (" ", gdb_stdout);
- wrap_here ("");
- fputs_filtered ("and ", gdb_stdout);
- wrap_here ("");
- printf_filtered ("%s...", dependencies[i]->filename);
- wrap_here (""); /* Flush output */
+ gdb_puts (" ");
+ gdb_stdout->wrap_here (0);
+ gdb_puts ("and ");
+ gdb_stdout->wrap_here (0);
+ gdb_printf ("%s...", dependencies[i]->filename);
gdb_flush (gdb_stdout);
}
dependencies[i]->expand_psymtab (objfile);
@@ -1471,9 +1468,9 @@ dump_psymtab_addrmap (struct objfile *objfile,
&& partial_symtabs->psymtabs_addrmap != NULL)
{
if (psymtab == nullptr)
- fprintf_filtered (outfile, _("Entire address map:\n"));
+ gdb_printf (outfile, _("Entire address map:\n"));
else
- fprintf_filtered (outfile, _("Address map:\n"));
+ gdb_printf (outfile, _("Address map:\n"));
addrmap_dump (partial_symtabs->psymtabs_addrmap, outfile, psymtab);
}
}
@@ -1576,7 +1573,7 @@ maintenance_print_psymbols (const char *args, int from_tty)
if (address_arg != NULL)
{
- struct bound_minimal_symbol msymbol = { NULL, NULL };
+ struct bound_minimal_symbol msymbol;
/* We don't assume each pc has a unique objfile (this is for
debugging). */
@@ -1677,84 +1674,82 @@ maintenance_info_psymtabs (const char *regexp, int from_tty)
{
if (! printed_objfile_start)
{
- printf_filtered ("{ objfile %s ", objfile_name (objfile));
- wrap_here (" ");
- printf_filtered ("((struct objfile *) %s)\n",
- host_address_to_string (objfile));
+ gdb_printf ("{ objfile %s ", objfile_name (objfile));
+ gdb_stdout->wrap_here (2);
+ gdb_printf ("((struct objfile *) %s)\n",
+ host_address_to_string (objfile));
printed_objfile_start = 1;
}
- printf_filtered (" { psymtab %s ", psymtab->filename);
- wrap_here (" ");
- printf_filtered ("((struct partial_symtab *) %s)\n",
- host_address_to_string (psymtab));
-
- printf_filtered (" readin %s\n",
- psymtab->readin_p (objfile) ? "yes" : "no");
- printf_filtered (" fullname %s\n",
- psymtab->fullname
- ? psymtab->fullname : "(null)");
- printf_filtered (" text addresses ");
- fputs_filtered (paddress (gdbarch,
- psymtab->text_low (objfile)),
- gdb_stdout);
- printf_filtered (" -- ");
- fputs_filtered (paddress (gdbarch,
- psymtab->text_high (objfile)),
- gdb_stdout);
- printf_filtered ("\n");
- printf_filtered (" psymtabs_addrmap_supported %s\n",
- (psymtab->psymtabs_addrmap_supported
- ? "yes" : "no"));
- printf_filtered (" globals ");
+ gdb_printf (" { psymtab %s ", psymtab->filename);
+ gdb_stdout->wrap_here (4);
+ gdb_printf ("((struct partial_symtab *) %s)\n",
+ host_address_to_string (psymtab));
+
+ gdb_printf (" readin %s\n",
+ psymtab->readin_p (objfile) ? "yes" : "no");
+ gdb_printf (" fullname %s\n",
+ psymtab->fullname
+ ? psymtab->fullname : "(null)");
+ gdb_printf (" text addresses ");
+ gdb_puts (paddress (gdbarch,
+ psymtab->text_low (objfile)));
+ gdb_printf (" -- ");
+ gdb_puts (paddress (gdbarch,
+ psymtab->text_high (objfile)));
+ gdb_printf ("\n");
+ gdb_printf (" psymtabs_addrmap_supported %s\n",
+ (psymtab->psymtabs_addrmap_supported
+ ? "yes" : "no"));
+ gdb_printf (" globals ");
if (!psymtab->global_psymbols.empty ())
- printf_filtered
+ gdb_printf
("(* (struct partial_symbol **) %s @ %d)\n",
host_address_to_string (psymtab->global_psymbols.data ()),
(int) psymtab->global_psymbols.size ());
else
- printf_filtered ("(none)\n");
- printf_filtered (" statics ");
+ gdb_printf ("(none)\n");
+ gdb_printf (" statics ");
if (!psymtab->static_psymbols.empty ())
- printf_filtered
+ gdb_printf
("(* (struct partial_symbol **) %s @ %d)\n",
host_address_to_string (psymtab->static_psymbols.data ()),
(int) psymtab->static_psymbols.size ());
else
- printf_filtered ("(none)\n");
+ gdb_printf ("(none)\n");
if (psymtab->user)
- printf_filtered (" user %s "
- "((struct partial_symtab *) %s)\n",
- psymtab->user->filename,
- host_address_to_string (psymtab->user));
- printf_filtered (" dependencies ");
+ gdb_printf (" user %s "
+ "((struct partial_symtab *) %s)\n",
+ psymtab->user->filename,
+ host_address_to_string (psymtab->user));
+ gdb_printf (" dependencies ");
if (psymtab->number_of_dependencies)
{
int i;
- printf_filtered ("{\n");
+ gdb_printf ("{\n");
for (i = 0; i < psymtab->number_of_dependencies; i++)
{
struct partial_symtab *dep = psymtab->dependencies[i];
/* Note the string concatenation there --- no
comma. */
- printf_filtered (" psymtab %s "
- "((struct partial_symtab *) %s)\n",
- dep->filename,
- host_address_to_string (dep));
+ gdb_printf (" psymtab %s "
+ "((struct partial_symtab *) %s)\n",
+ dep->filename,
+ host_address_to_string (dep));
}
- printf_filtered (" }\n");
+ gdb_printf (" }\n");
}
else
- printf_filtered ("(none)\n");
- printf_filtered (" }\n");
+ gdb_printf ("(none)\n");
+ gdb_printf (" }\n");
}
}
}
if (printed_objfile_start)
- printf_filtered ("}\n");
+ gdb_printf ("}\n");
}
}
@@ -1789,29 +1784,27 @@ maintenance_check_psymtabs (const char *ignore, int from_tty)
/* First do some checks that don't require the associated symtab. */
if (ps->text_high (objfile) < ps->text_low (objfile))
{
- printf_filtered ("Psymtab ");
- puts_filtered (ps->filename);
- printf_filtered (" covers bad range ");
- fputs_filtered (paddress (gdbarch, ps->text_low (objfile)),
- gdb_stdout);
- printf_filtered (" - ");
- fputs_filtered (paddress (gdbarch, ps->text_high (objfile)),
- gdb_stdout);
- printf_filtered ("\n");
+ gdb_printf ("Psymtab ");
+ gdb_puts (ps->filename);
+ gdb_printf (" covers bad range ");
+ gdb_puts (paddress (gdbarch, ps->text_low (objfile)));
+ gdb_printf (" - ");
+ gdb_puts (paddress (gdbarch, ps->text_high (objfile)));
+ gdb_printf ("\n");
continue;
}
/* Now do checks requiring the associated symtab. */
if (cust == NULL)
continue;
- bv = COMPUNIT_BLOCKVECTOR (cust);
- b = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
+ bv = cust->blockvector ();
+ b = bv->static_block ();
for (partial_symbol *psym : ps->static_psymbols)
{
/* Skip symbols for inlined functions without address. These may
or may not have a match in the full symtab. */
if (psym->aclass == LOC_BLOCK
- && psym->ginfo.value.address == 0)
+ && psym->ginfo.value_address () == 0)
continue;
sym = block_lookup_symbol (b, psym->ginfo.search_name (),
@@ -1819,14 +1812,14 @@ maintenance_check_psymtabs (const char *ignore, int from_tty)
psym->domain);
if (!sym)
{
- printf_filtered ("Static symbol `");
- puts_filtered (psym->ginfo.linkage_name ());
- printf_filtered ("' only found in ");
- puts_filtered (ps->filename);
- printf_filtered (" psymtab\n");
+ gdb_printf ("Static symbol `");
+ gdb_puts (psym->ginfo.linkage_name ());
+ gdb_printf ("' only found in ");
+ gdb_puts (ps->filename);
+ gdb_printf (" psymtab\n");
}
}
- b = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
+ b = bv->global_block ();
for (partial_symbol *psym : ps->global_psymbols)
{
sym = block_lookup_symbol (b, psym->ginfo.search_name (),
@@ -1834,30 +1827,28 @@ maintenance_check_psymtabs (const char *ignore, int from_tty)
psym->domain);
if (!sym)
{
- printf_filtered ("Global symbol `");
- puts_filtered (psym->ginfo.linkage_name ());
- printf_filtered ("' only found in ");
- puts_filtered (ps->filename);
- printf_filtered (" psymtab\n");
+ gdb_printf ("Global symbol `");
+ gdb_puts (psym->ginfo.linkage_name ());
+ gdb_printf ("' only found in ");
+ gdb_puts (ps->filename);
+ gdb_printf (" psymtab\n");
}
}
if (ps->raw_text_high () != 0
- && (ps->text_low (objfile) < BLOCK_START (b)
- || ps->text_high (objfile) > BLOCK_END (b)))
+ && (ps->text_low (objfile) < b->start ()
+ || ps->text_high (objfile) > b->end ()))
{
- printf_filtered ("Psymtab ");
- puts_filtered (ps->filename);
- printf_filtered (" covers ");
- fputs_filtered (paddress (gdbarch, ps->text_low (objfile)),
- gdb_stdout);
- printf_filtered (" - ");
- fputs_filtered (paddress (gdbarch, ps->text_high (objfile)),
- gdb_stdout);
- printf_filtered (" but symtab covers only ");
- fputs_filtered (paddress (gdbarch, BLOCK_START (b)), gdb_stdout);
- printf_filtered (" - ");
- fputs_filtered (paddress (gdbarch, BLOCK_END (b)), gdb_stdout);
- printf_filtered ("\n");
+ gdb_printf ("Psymtab ");
+ gdb_puts (ps->filename);
+ gdb_printf (" covers ");
+ gdb_puts (paddress (gdbarch, ps->text_low (objfile)));
+ gdb_printf (" - ");
+ gdb_puts (paddress (gdbarch, ps->text_high (objfile)));
+ gdb_printf (" but symtab covers only ");
+ gdb_puts (paddress (gdbarch, b->start ()));
+ gdb_printf (" - ");
+ gdb_puts (paddress (gdbarch, b->end ()));
+ gdb_printf ("\n");
}
}
}
diff --git a/gdb/psymtab.h b/gdb/psymtab.h
index 7ad9a534af1..70eb3e246ba 100644
--- a/gdb/psymtab.h
+++ b/gdb/psymtab.h
@@ -20,7 +20,7 @@
#ifndef PSYMTAB_H
#define PSYMTAB_H
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
#include "symfile.h"
#include "gdbsupport/next-iterator.h"
#include "bcache.h"
diff --git a/gdb/python/lib/gdb/FrameDecorator.py b/gdb/python/lib/gdb/FrameDecorator.py
index 46febcd5cf6..118673fc8b6 100644
--- a/gdb/python/lib/gdb/FrameDecorator.py
+++ b/gdb/python/lib/gdb/FrameDecorator.py
@@ -15,15 +15,6 @@
import gdb
-# This small code snippet deals with problem of strings in Python 2.x
-# and Python 3.x. Python 2.x has str and unicode classes which are
-# sub-classes of basestring. In Python 3.x all strings are encoded
-# and basestring has been removed.
-try:
- basestring
-except NameError:
- basestring = str
-
class FrameDecorator(object):
"""Basic implementation of a Frame Decorator"""
@@ -252,7 +243,7 @@ class FrameVars(object):
# SYM may be a string instead of a symbol in the case of
# synthetic local arguments or locals. If that is the case,
# always fetch.
- if isinstance(sym, basestring):
+ if isinstance(sym, str):
return True
sym_type = sym.addr_class
diff --git a/gdb/python/lib/gdb/__init__.py b/gdb/python/lib/gdb/__init__.py
index 11a1b444bfd..a52f6b46413 100644
--- a/gdb/python/lib/gdb/__init__.py
+++ b/gdb/python/lib/gdb/__init__.py
@@ -17,11 +17,12 @@ import traceback
import os
import sys
import _gdb
+from contextlib import contextmanager
# Python 3 moved "reload"
if sys.version_info >= (3, 4):
from importlib import reload
-elif sys.version_info[0] > 2:
+else:
from imp import reload
from _gdb import *
@@ -231,19 +232,19 @@ def find_pc_line(pc):
return current_progspace().find_pc_line(pc)
-try:
- from pygments import formatters, lexers, highlight
+def set_parameter(name, value):
+ """Set the GDB parameter NAME to VALUE."""
+ execute("set " + name + " " + str(value), to_string=True)
- def colorize(filename, contents):
- # Don't want any errors.
- try:
- lexer = lexers.get_lexer_for_filename(filename, stripnl=False)
- formatter = formatters.TerminalFormatter()
- return highlight(contents, lexer, formatter)
- except:
- return None
-except:
-
- def colorize(filename, contents):
- return None
+@contextmanager
+def with_parameter(name, value):
+ """Temporarily set the GDB parameter NAME to VALUE.
+ Note that this is a context manager."""
+ old_value = parameter(name)
+ set_parameter(name, value)
+ try:
+ # Nothing that useful to return.
+ yield None
+ finally:
+ set_parameter(name, old_value)
diff --git a/gdb/python/lib/gdb/command/explore.py b/gdb/python/lib/gdb/command/explore.py
index ea49c38d7f0..c03bef34182 100644
--- a/gdb/python/lib/gdb/command/explore.py
+++ b/gdb/python/lib/gdb/command/explore.py
@@ -19,10 +19,6 @@
import gdb
import sys
-if sys.version_info[0] > 2:
- # Python 3 renamed raw_input to input
- raw_input = input
-
class Explorer(object):
"""Internal class which invokes other explorers."""
@@ -172,7 +168,7 @@ class Explorer(object):
so that the exploration session can shift back to the parent value.
Useful when exploring values.
"""
- raw_input("\nPress enter to return to parent value: ")
+ input("\nPress enter to return to parent value: ")
@staticmethod
def return_to_enclosing_type():
@@ -187,7 +183,7 @@ class Explorer(object):
so that the exploration session can shift back to the enclosing type.
Useful when exploring types.
"""
- raw_input("\nPress enter to return to enclosing type: ")
+ input("\nPress enter to return to enclosing type: ")
class ScalarExplorer(object):
@@ -244,7 +240,7 @@ class PointerExplorer(object):
"'%s' is a pointer to a value of type '%s'"
% (expr, str(value.type.target()))
)
- option = raw_input(
+ option = input(
"Continue exploring it as a pointer to a single " "value [y/n]: "
)
if option == "y":
@@ -264,13 +260,13 @@ class PointerExplorer(object):
)
return False
- option = raw_input("Continue exploring it as a pointer to an " "array [y/n]: ")
+ option = input("Continue exploring it as a pointer to an " "array [y/n]: ")
if option == "y":
while True:
index = 0
try:
index = int(
- raw_input(
+ input(
"Enter the index of the element you "
"want to explore in '%s': " % expr
)
@@ -338,7 +334,7 @@ class ArrayExplorer(object):
index = 0
try:
index = int(
- raw_input(
+ input(
"Enter the index of the element you want to "
"explore in '%s': " % expr
)
@@ -354,7 +350,7 @@ class ArrayExplorer(object):
str(element)
except gdb.MemoryError:
print("Cannot read value at index %d." % index)
- raw_input("Press enter to continue... ")
+ input("Press enter to continue... ")
return True
Explorer.explore_expr(
@@ -474,7 +470,7 @@ class CompoundExplorer(object):
print("")
if has_explorable_fields:
- choice = raw_input("Enter the field number of choice: ")
+ choice = input("Enter the field number of choice: ")
if choice in choice_to_compound_field_map:
Explorer.explore_expr(
choice_to_compound_field_map[choice][0],
@@ -550,7 +546,7 @@ class CompoundExplorer(object):
print("")
if len(choice_to_compound_field_map) > 0:
- choice = raw_input("Enter the field number of choice: ")
+ choice = input("Enter the field number of choice: ")
if choice in choice_to_compound_field_map:
if is_child:
new_name = "%s '%s' of %s" % (
diff --git a/gdb/python/lib/gdb/command/prompt.py b/gdb/python/lib/gdb/command/prompt.py
index 1491c6a3e65..8dfa8ed91ef 100644
--- a/gdb/python/lib/gdb/command/prompt.py
+++ b/gdb/python/lib/gdb/command/prompt.py
@@ -28,12 +28,11 @@ class _ExtendedPrompt(gdb.Parameter):
Substitutions are applied to VALUE to compute the real prompt.
- The currently defined substitutions are:
- """
+ The currently defined substitutions are:"""
# Add the prompt library's dynamically generated help to the
# __doc__ string.
- __doc__ = __doc__ + gdb.prompt.prompt_help()
+ __doc__ = __doc__ + "\n" + gdb.prompt.prompt_help()
set_doc = "Set the extended prompt."
show_doc = "Show the extended prompt."
diff --git a/gdb/python/lib/gdb/printer/bound_registers.py b/gdb/python/lib/gdb/printer/bound_registers.py
index f8ce9ead7c2..7cb6e8f3402 100644
--- a/gdb/python/lib/gdb/printer/bound_registers.py
+++ b/gdb/python/lib/gdb/printer/bound_registers.py
@@ -18,11 +18,6 @@ import sys
import gdb.printing
-if sys.version_info[0] > 2:
- # Python 3 removed basestring and long
- basestring = str
- long = int
-
class MpxBound128Printer:
"""Adds size field to a mpx __gdb_builtin_type_bound128 type."""
@@ -33,7 +28,7 @@ class MpxBound128Printer:
def to_string(self):
upper = self.val["ubound"]
lower = self.val["lbound"]
- size = (long)((upper) - (lower))
+ size = upper - lower
if size > -1:
size = size + 1
result = "{lbound = %s, ubound = %s} : size %s" % (lower, upper, size)
diff --git a/gdb/python/lib/gdb/printing.py b/gdb/python/lib/gdb/printing.py
index 93d61f127dc..e208e889caa 100644
--- a/gdb/python/lib/gdb/printing.py
+++ b/gdb/python/lib/gdb/printing.py
@@ -21,11 +21,6 @@ import gdb.types
import re
import sys
-if sys.version_info[0] > 2:
- # Python 3 removed basestring and long
- basestring = str
- long = int
-
class PrettyPrinter(object):
"""A basic pretty-printer.
@@ -132,7 +127,7 @@ def register_pretty_printer(obj, printer, replace=False):
# Printers implemented as functions are old-style. In order to not risk
# breaking anything we do not check __name__ here.
if hasattr(printer, "name"):
- if not isinstance(printer.name, basestring):
+ if not isinstance(printer.name, str):
raise TypeError("printer name is not a string")
# If printer provides a name, make sure it doesn't contain ";".
# Semicolon is used by the info/enable/disable pretty-printer commands
@@ -232,7 +227,7 @@ class _EnumInstance:
def to_string(self):
flag_list = []
- v = long(self.val)
+ v = int(self.val)
any_found = False
for (e_name, e_value) in self.enumerators:
if v & e_value != 0:
diff --git a/gdb/python/lib/gdb/styling.py b/gdb/python/lib/gdb/styling.py
new file mode 100644
index 00000000000..aef39c6857c
--- /dev/null
+++ b/gdb/python/lib/gdb/styling.py
@@ -0,0 +1,50 @@
+# Styling related hooks.
+# Copyright (C) 2010-2022 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+"""Utilities for styling."""
+
+import gdb
+
+try:
+ from pygments import formatters, lexers, highlight
+
+ def colorize(filename, contents):
+ # Don't want any errors.
+ try:
+ lexer = lexers.get_lexer_for_filename(filename, stripnl=False)
+ formatter = formatters.TerminalFormatter()
+ return highlight(contents, lexer, formatter).encode(
+ gdb.host_charset(), "backslashreplace"
+ )
+ except:
+ return None
+
+ def colorize_disasm(content, gdbarch):
+ # Don't want any errors.
+ try:
+ lexer = lexers.get_lexer_by_name("asm")
+ formatter = formatters.TerminalFormatter()
+ return highlight(content, lexer, formatter).rstrip().encode()
+ except:
+ return None
+
+except:
+
+ def colorize(filename, contents):
+ return None
+
+ def colorize_disasm(content, gdbarch):
+ return None
diff --git a/gdb/python/lib/gdb/xmethod.py b/gdb/python/lib/gdb/xmethod.py
index 4c3a52206fa..c69ea9992a3 100644
--- a/gdb/python/lib/gdb/xmethod.py
+++ b/gdb/python/lib/gdb/xmethod.py
@@ -21,12 +21,6 @@ import re
import sys
-if sys.version_info[0] > 2:
- # Python 3 removed basestring and long
- basestring = str
- long = int
-
-
class XMethod(object):
"""Base class (or a template) for an xmethod description.
@@ -223,7 +217,7 @@ def _validate_xmethod_matcher(matcher):
return TypeError("Xmethod matcher is missing attribute: name")
if not hasattr(matcher, "enabled"):
return TypeError("Xmethod matcher is missing attribute: enabled")
- if not isinstance(matcher.name, basestring):
+ if not isinstance(matcher.name, str):
return TypeError("Attribute 'name' of xmethod matcher is not a " "string")
if matcher.name.find(";") >= 0:
return ValueError("Xmethod matcher name cannot contain ';' in it")
diff --git a/gdb/python/py-arch.c b/gdb/python/py-arch.c
index 0f273b344e4..d8098a2d161 100644
--- a/gdb/python/py-arch.c
+++ b/gdb/python/py-arch.c
@@ -62,16 +62,25 @@ arch_object_data_init (struct gdbarch *gdbarch)
}
/* Returns the struct gdbarch value corresponding to the given Python
- architecture object OBJ. */
+ architecture object OBJ, which must be a gdb.Architecture object. */
struct gdbarch *
arch_object_to_gdbarch (PyObject *obj)
{
- arch_object *py_arch = (arch_object *) obj;
+ gdb_assert (gdbpy_is_architecture (obj));
+ arch_object *py_arch = (arch_object *) obj;
return py_arch->gdbarch;
}
+/* See python-internal.h. */
+
+bool
+gdbpy_is_architecture (PyObject *obj)
+{
+ return PyObject_TypeCheck (obj, &arch_object_type);
+}
+
/* Returns the Python architecture object corresponding to GDBARCH.
Returns a new reference to the arch_object associated as data with
GDBARCH. */
@@ -100,7 +109,7 @@ archpy_name (PyObject *self, PyObject *args)
ARCHPY_REQUIRE_VALID (self, gdbarch);
name = (gdbarch_bfd_arch_info (gdbarch))->printable_name;
- return PyString_FromString (name);
+ return PyUnicode_FromString (name);
}
/* Implementation of
@@ -139,12 +148,6 @@ archpy_disassemble (PyObject *self, PyObject *args, PyObject *kw)
conversion process. */
if (PyLong_Check (end_obj))
end = PyLong_AsUnsignedLongLong (end_obj);
-#if PY_MAJOR_VERSION == 2
- else if (PyInt_Check (end_obj))
- /* If the end_pc value is specified without a trailing 'L', end_obj will
- be an integer and not a long integer. */
- end = PyInt_AsLong (end_obj);
-#endif
else
{
PyErr_SetString (PyExc_TypeError,
@@ -164,7 +167,7 @@ archpy_disassemble (PyObject *self, PyObject *args, PyObject *kw)
}
if (count_obj)
{
- count = PyInt_AsLong (count_obj);
+ count = PyLong_AsLong (count_obj);
if (PyErr_Occurred () || count < 0)
{
PyErr_SetString (PyExc_TypeError,
@@ -213,9 +216,8 @@ archpy_disassemble (PyObject *self, PyObject *args, PyObject *kw)
if (pc_obj == nullptr)
return nullptr;
- gdbpy_ref<> asm_obj (PyString_FromString (!stb.empty ()
- ? stb.c_str ()
- : "<unknown>"));
+ gdbpy_ref<> asm_obj
+ (PyUnicode_FromString (!stb.empty () ? stb.c_str () : "<unknown>"));
if (asm_obj == nullptr)
return nullptr;
@@ -338,7 +340,7 @@ gdbpy_all_architecture_names (PyObject *self, PyObject *args)
std::vector<const char *> name_list = gdbarch_printable_names ();
for (const char *name : name_list)
{
- gdbpy_ref <> py_name (PyString_FromString (name));
+ gdbpy_ref <> py_name (PyUnicode_FromString (name));
if (py_name == nullptr)
return nullptr;
if (PyList_Append (list.get (), py_name.get ()) < 0)
diff --git a/gdb/python/py-auto-load.c b/gdb/python/py-auto-load.c
index bdd116d58b3..5d60460683a 100644
--- a/gdb/python/py-auto-load.c
+++ b/gdb/python/py-auto-load.c
@@ -37,7 +37,7 @@ static void
show_auto_load_python_scripts (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Auto-loading of Python scripts is %s.\n"), value);
+ gdb_printf (file, _("Auto-loading of Python scripts is %s.\n"), value);
}
/* See python-internal.h. */
diff --git a/gdb/python/py-block.c b/gdb/python/py-block.c
index cf543c79484..872fb89ba83 100644
--- a/gdb/python/py-block.c
+++ b/gdb/python/py-block.c
@@ -109,7 +109,7 @@ blpy_get_start (PyObject *self, void *closure)
BLPY_REQUIRE_VALID (self, block);
- return gdb_py_object_from_ulongest (BLOCK_START (block)).release ();
+ return gdb_py_object_from_ulongest (block->start ()).release ();
}
static PyObject *
@@ -119,7 +119,7 @@ blpy_get_end (PyObject *self, void *closure)
BLPY_REQUIRE_VALID (self, block);
- return gdb_py_object_from_ulongest (BLOCK_END (block)).release ();
+ return gdb_py_object_from_ulongest (block->end ()).release ();
}
static PyObject *
@@ -130,7 +130,7 @@ blpy_get_function (PyObject *self, void *closure)
BLPY_REQUIRE_VALID (self, block);
- sym = BLOCK_FUNCTION (block);
+ sym = block->function ();
if (sym)
return symbol_to_symbol_object (sym);
@@ -146,7 +146,7 @@ blpy_get_superblock (PyObject *self, void *closure)
BLPY_REQUIRE_VALID (self, block);
- super_block = BLOCK_SUPERBLOCK (block);
+ super_block = block->superblock ();
if (super_block)
return block_to_block_object (super_block, self_obj->objfile);
@@ -183,7 +183,7 @@ blpy_get_static_block (PyObject *self, void *closure)
BLPY_REQUIRE_VALID (self, block);
- if (BLOCK_SUPERBLOCK (block) == NULL)
+ if (block->superblock () == NULL)
Py_RETURN_NONE;
static_block = block_static_block (block);
@@ -201,7 +201,7 @@ blpy_is_global (PyObject *self, void *closure)
BLPY_REQUIRE_VALID (self, block);
- if (BLOCK_SUPERBLOCK (block))
+ if (block->superblock ())
Py_RETURN_FALSE;
Py_RETURN_TRUE;
@@ -217,8 +217,8 @@ blpy_is_static (PyObject *self, void *closure)
BLPY_REQUIRE_VALID (self, block);
- if (BLOCK_SUPERBLOCK (block) != NULL
- && BLOCK_SUPERBLOCK (BLOCK_SUPERBLOCK (block)) == NULL)
+ if (block->superblock () != NULL
+ && block->superblock ()->superblock () == NULL)
Py_RETURN_TRUE;
Py_RETURN_FALSE;
diff --git a/gdb/python/py-breakpoint.c b/gdb/python/py-breakpoint.c
index f00bd6f78e6..74de0d90e23 100644
--- a/gdb/python/py-breakpoint.c
+++ b/gdb/python/py-breakpoint.c
@@ -44,7 +44,7 @@ static void
show_pybp_debug (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Python breakpoint debugging is %s.\n"), value);
+ gdb_printf (file, _("Python breakpoint debugging is %s.\n"), value);
}
/* Print a "py-breakpoint" debug statement. */
@@ -224,7 +224,7 @@ bppy_set_thread (PyObject *self, PyObject *newvalue, void *closure)
_("Cannot delete `thread' attribute."));
return -1;
}
- else if (PyInt_Check (newvalue))
+ else if (PyLong_Check (newvalue))
{
if (! gdb_py_int_as_long (newvalue, &id))
return -1;
@@ -266,7 +266,7 @@ bppy_set_task (PyObject *self, PyObject *newvalue, void *closure)
_("Cannot delete `task' attribute."));
return -1;
}
- else if (PyInt_Check (newvalue))
+ else if (PyLong_Check (newvalue))
{
if (! gdb_py_int_as_long (newvalue, &id))
return -1;
@@ -341,7 +341,7 @@ bppy_set_ignore_count (PyObject *self, PyObject *newvalue, void *closure)
_("Cannot delete `ignore_count' attribute."));
return -1;
}
- else if (! PyInt_Check (newvalue))
+ else if (!PyLong_Check (newvalue))
{
PyErr_SetString (PyExc_TypeError,
_("The value of `ignore_count' must be an integer."));
@@ -780,9 +780,9 @@ bppy_init (PyObject *self, PyObject *args, PyObject *kwargs)
if (lineobj != NULL)
{
- if (PyInt_Check (lineobj))
- line = xstrprintf ("%ld", PyInt_AsLong (lineobj));
- else if (PyString_Check (lineobj))
+ if (PyLong_Check (lineobj))
+ line = xstrprintf ("%ld", PyLong_AsLong (lineobj));
+ else if (PyUnicode_Check (lineobj))
line = python_string_to_host_string (lineobj);
else
{
@@ -858,7 +858,7 @@ bppy_init (PyObject *self, PyObject *args, PyObject *kwargs)
const struct breakpoint_ops *ops =
breakpoint_ops_for_event_location (location.get (), false);
- create_breakpoint (python_gdbarch,
+ create_breakpoint (gdbpy_enter::get_gdbarch (),
location.get (), NULL, -1, NULL, false,
0,
temporary_bp, type,
@@ -954,15 +954,13 @@ gdbpy_breakpoint_cond_says_stop (const struct extension_language_defn *extlang,
int stop;
struct gdbpy_breakpoint_object *bp_obj = b->py_bp_object;
PyObject *py_bp = (PyObject *) bp_obj;
- struct gdbarch *garch;
if (bp_obj == NULL)
return EXT_LANG_BP_STOP_UNSET;
stop = -1;
- garch = b->gdbarch ? b->gdbarch : get_current_arch ();
- gdbpy_enter enter_py (garch, current_language);
+ gdbpy_enter enter_py (b->gdbarch);
if (bp_obj->is_finish_bp)
bpfinishpy_pre_stop_hook (bp_obj);
@@ -1005,15 +1003,13 @@ gdbpy_breakpoint_has_cond (const struct extension_language_defn *extlang,
struct breakpoint *b)
{
PyObject *py_bp;
- struct gdbarch *garch;
if (b->py_bp_object == NULL)
return 0;
py_bp = (PyObject *) b->py_bp_object;
- garch = b->gdbarch ? b->gdbarch : get_current_arch ();
- gdbpy_enter enter_py (garch, current_language);
+ gdbpy_enter enter_py (b->gdbarch);
return PyObject_HasAttrString (py_bp, stop_func);
}
@@ -1048,8 +1044,7 @@ gdbpy_breakpoint_created (struct breakpoint *bp)
return;
}
- struct gdbarch *garch = bp->gdbarch ? bp->gdbarch : get_current_arch ();
- gdbpy_enter enter_py (garch, current_language);
+ gdbpy_enter enter_py (bp->gdbarch);
if (bppy_pending_object)
{
@@ -1099,8 +1094,7 @@ gdbpy_breakpoint_deleted (struct breakpoint *b)
bp = get_breakpoint (num);
if (bp)
{
- struct gdbarch *garch = bp->gdbarch ? bp->gdbarch : get_current_arch ();
- gdbpy_enter enter_py (garch, current_language);
+ gdbpy_enter enter_py (b->gdbarch);
gdbpy_ref<gdbpy_breakpoint_object> bp_obj (bp->py_bp_object);
if (bp_obj != NULL)
@@ -1131,8 +1125,7 @@ gdbpy_breakpoint_modified (struct breakpoint *b)
bp = get_breakpoint (num);
if (bp)
{
- struct gdbarch *garch = bp->gdbarch ? bp->gdbarch : get_current_arch ();
- gdbpy_enter enter_py (garch, current_language);
+ gdbpy_enter enter_py (b->gdbarch);
PyObject *bp_obj = (PyObject *) bp->py_bp_object;
if (bp_obj)
diff --git a/gdb/python/py-cmd.c b/gdb/python/py-cmd.c
index 3a4e6490cf0..c0a98544619 100644
--- a/gdb/python/py-cmd.c
+++ b/gdb/python/py-cmd.c
@@ -90,7 +90,7 @@ cmdpy_dont_repeat (PyObject *self, PyObject *args)
static void
cmdpy_destroyer (struct cmd_list_element *self, void *context)
{
- gdbpy_enter enter_py (get_current_arch (), current_language);
+ gdbpy_enter enter_py;
/* Release our hold on the command object. */
gdbpy_ref<cmdpy_object> cmd ((cmdpy_object *) context);
@@ -104,7 +104,7 @@ cmdpy_function (const char *args, int from_tty, cmd_list_element *command)
{
cmdpy_object *obj = (cmdpy_object *) command->context ();
- gdbpy_enter enter_py (get_current_arch (), current_language);
+ gdbpy_enter enter_py;
if (! obj)
error (_("Invalid invocation of Python command object."));
@@ -223,7 +223,7 @@ cmdpy_completer_handle_brkchars (struct cmd_list_element *command,
completion_tracker &tracker,
const char *text, const char *word)
{
- gdbpy_enter enter_py (get_current_arch (), current_language);
+ gdbpy_enter enter_py;
/* Calling our helper to obtain a reference to the PyObject of the Python
function. */
@@ -233,7 +233,7 @@ cmdpy_completer_handle_brkchars (struct cmd_list_element *command,
if (resultobj == NULL)
return;
- if (PyInt_Check (resultobj.get ()))
+ if (PyLong_Check (resultobj.get ()))
{
/* User code may also return one of the completion constants,
thus requesting that sort of completion. We are only
@@ -266,7 +266,7 @@ cmdpy_completer (struct cmd_list_element *command,
completion_tracker &tracker,
const char *text, const char *word)
{
- gdbpy_enter enter_py (get_current_arch (), current_language);
+ gdbpy_enter enter_py;
/* Calling our helper to obtain a reference to the PyObject of the Python
function. */
@@ -277,7 +277,7 @@ cmdpy_completer (struct cmd_list_element *command,
if (resultobj == NULL)
return;
- if (PyInt_Check (resultobj.get ()))
+ if (PyLong_Check (resultobj.get ()))
{
/* User code may also return one of the completion constants,
thus requesting that sort of completion. */
@@ -592,10 +592,10 @@ gdbpy_initialize_commands (void)
(PyObject *) &cmdpy_object_type) < 0)
return -1;
- invoke_cst = PyString_FromString ("invoke");
+ invoke_cst = PyUnicode_FromString ("invoke");
if (invoke_cst == NULL)
return -1;
- complete_cst = PyString_FromString ("complete");
+ complete_cst = PyUnicode_FromString ("complete");
if (complete_cst == NULL)
return -1;
@@ -684,7 +684,7 @@ gdbpy_string_to_argv (PyObject *self, PyObject *args)
for (char *arg : c_argv)
{
- gdbpy_ref<> argp (PyString_FromString (arg));
+ gdbpy_ref<> argp (PyUnicode_FromString (arg));
if (argp == NULL
|| PyList_Append (py_argv.get (), argp.get ()) < 0)
diff --git a/gdb/python/py-connection.c b/gdb/python/py-connection.c
index 7c33a1f93d4..84660414dd0 100644
--- a/gdb/python/py-connection.c
+++ b/gdb/python/py-connection.c
@@ -161,7 +161,7 @@ connpy_connection_removed (process_stratum_target *target)
if (!gdb_python_initialized)
return;
- gdbpy_enter enter_py (get_current_arch (), current_language);
+ gdbpy_enter enter_py;
if (!evregpy_no_listeners_p (gdb_py_events.connection_removed))
if (emit_connection_event (target, gdb_py_events.connection_removed) < 0)
@@ -204,12 +204,12 @@ connpy_repr (PyObject *obj)
process_stratum_target *target = self->target;
if (target == nullptr)
- return PyString_FromFormat ("<%s (invalid)>", Py_TYPE (obj)->tp_name);
+ return PyUnicode_FromFormat ("<%s (invalid)>", Py_TYPE (obj)->tp_name);
- return PyString_FromFormat ("<%s num=%d, what=\"%s\">",
- Py_TYPE (obj)->tp_name,
- target->connection_number,
- make_target_connection_string (target).c_str ());
+ return PyUnicode_FromFormat ("<%s num=%d, what=\"%s\">",
+ Py_TYPE (obj)->tp_name,
+ target->connection_number,
+ make_target_connection_string (target).c_str ());
}
/* Implementation of gdb.TargetConnection.is_valid() -> Boolean. Returns
diff --git a/gdb/python/py-event.h b/gdb/python/py-event.h
index 56e53b7a1e7..831dd10fc85 100644
--- a/gdb/python/py-event.h
+++ b/gdb/python/py-event.h
@@ -45,13 +45,13 @@ extern int emit_exited_event (const LONGEST *exit_code, struct inferior *inf);
/* For inferior function call events, discriminate whether event is
before or after the call. */
-typedef enum
+enum inferior_call_kind
{
/* Before the call */
INFERIOR_CALL_PRE,
/* after the call */
INFERIOR_CALL_POST,
-} inferior_call_kind;
+};
extern int emit_inferior_call_event (inferior_call_kind kind,
ptid_t thread, CORE_ADDR addr);
diff --git a/gdb/python/py-evts.c b/gdb/python/py-evts.c
index 457825c9863..23a5d75ae21 100644
--- a/gdb/python/py-evts.c
+++ b/gdb/python/py-evts.c
@@ -20,7 +20,6 @@
#include "defs.h"
#include "py-events.h"
-#ifdef IS_PY3K
static struct PyModuleDef EventModuleDef =
{
PyModuleDef_HEAD_INIT,
@@ -33,7 +32,6 @@ static struct PyModuleDef EventModuleDef =
NULL,
NULL
};
-#endif
/* Initialize python events. */
@@ -53,11 +51,7 @@ add_new_registry (eventregistry_object **registryp, const char *name)
int
gdbpy_initialize_py_events (void)
{
-#ifdef IS_PY3K
gdb_py_events.module = PyModule_Create (&EventModuleDef);
-#else
- gdb_py_events.module = Py_InitModule ("events", NULL);
-#endif
if (!gdb_py_events.module)
return -1;
diff --git a/gdb/python/py-finishbreakpoint.c b/gdb/python/py-finishbreakpoint.c
index 8d5eb42efc0..abd5b48a949 100644
--- a/gdb/python/py-finishbreakpoint.c
+++ b/gdb/python/py-finishbreakpoint.c
@@ -40,13 +40,17 @@ struct finish_breakpoint_object
{
/* gdb.Breakpoint base class. */
gdbpy_breakpoint_object py_bp;
- /* gdb.Type object of the value return by the breakpointed function.
- May be NULL if no debug information was available or return type
- was VOID. */
- PyObject *return_type;
- /* gdb.Value object of the function finished by this breakpoint. Will be
- NULL if return_type is NULL. */
+
+ /* gdb.Symbol object of the function finished by this breakpoint.
+
+ nullptr if no debug information was available or return type was VOID. */
+ PyObject *func_symbol;
+
+ /* gdb.Value object of the function finished by this breakpoint.
+
+ nullptr if no debug information was available or return type was VOID. */
PyObject *function_value;
+
/* When stopped at this FinishBreakpoint, gdb.Value object returned by
the function; Py_None if the value is not computable; NULL if GDB is
not stopped at a FinishBreakpoint. */
@@ -80,8 +84,8 @@ bpfinishpy_dealloc (PyObject *self)
struct finish_breakpoint_object *self_bpfinish =
(struct finish_breakpoint_object *) self;
+ Py_XDECREF (self_bpfinish->func_symbol);
Py_XDECREF (self_bpfinish->function_value);
- Py_XDECREF (self_bpfinish->return_type);
Py_XDECREF (self_bpfinish->return_value);
Py_TYPE (self)->tp_free (self);
}
@@ -99,16 +103,17 @@ bpfinishpy_pre_stop_hook (struct gdbpy_breakpoint_object *bp_obj)
/* Can compute return_value only once. */
gdb_assert (!self_finishbp->return_value);
- if (!self_finishbp->return_type)
+ if (self_finishbp->func_symbol == nullptr)
return;
try
{
+ struct symbol *func_symbol =
+ symbol_object_to_symbol (self_finishbp->func_symbol);
struct value *function =
value_object_to_value (self_finishbp->function_value);
- struct type *value_type =
- type_object_to_type (self_finishbp->return_type);
- struct value *ret = get_return_value (function, value_type);
+ struct value *ret =
+ get_return_value (func_symbol, function);
if (ret)
{
@@ -165,7 +170,6 @@ bpfinishpy_init (PyObject *self, PyObject *args, PyObject *kwargs)
PyObject *internal = NULL;
int internal_bp = 0;
CORE_ADDR pc;
- struct symbol *function;
if (!gdb_PyArg_ParseTupleAndKeywords (args, kwargs, "|OO", keywords,
&frame_obj, &internal))
@@ -239,30 +243,30 @@ bpfinishpy_init (PyObject *self, PyObject *args, PyObject *kwargs)
}
/* Find the function we will return from. */
- self_bpfinish->return_type = NULL;
- self_bpfinish->function_value = NULL;
+ self_bpfinish->func_symbol = nullptr;
+ self_bpfinish->function_value = nullptr;
try
{
if (get_frame_pc_if_available (frame, &pc))
{
- function = find_pc_function (pc);
- if (function != NULL)
+ struct symbol *function = find_pc_function (pc);
+ if (function != nullptr)
{
struct type *ret_type =
- check_typedef (TYPE_TARGET_TYPE (SYMBOL_TYPE (function)));
+ check_typedef (TYPE_TARGET_TYPE (function->type ()));
/* Remember only non-void return types. */
if (ret_type->code () != TYPE_CODE_VOID)
{
- struct value *func_value;
-
/* Ignore Python errors at this stage. */
- self_bpfinish->return_type = type_to_type_object (ret_type);
+ value *func_value = read_var_value (function, NULL, frame);
+ self_bpfinish->function_value
+ = value_to_value_object (func_value);
PyErr_Clear ();
- func_value = read_var_value (function, NULL, frame);
- self_bpfinish->function_value =
- value_to_value_object (func_value);
+
+ self_bpfinish->func_symbol
+ = symbol_to_symbol_object (function);
PyErr_Clear ();
}
}
@@ -274,14 +278,15 @@ bpfinishpy_init (PyObject *self, PyObject *args, PyObject *kwargs)
remain NULL. */
}
- if (self_bpfinish->return_type == NULL || self_bpfinish->function_value == NULL)
+ if (self_bpfinish->func_symbol == nullptr
+ || self_bpfinish->function_value == nullptr)
{
/* Won't be able to compute return value. */
- Py_XDECREF (self_bpfinish->return_type);
+ Py_XDECREF (self_bpfinish->func_symbol);
Py_XDECREF (self_bpfinish->function_value);
- self_bpfinish->return_type = NULL;
- self_bpfinish->function_value = NULL;
+ self_bpfinish->func_symbol = nullptr;
+ self_bpfinish->function_value = nullptr;
}
bppy_pending_object = &self_bpfinish->py_bp;
@@ -293,14 +298,14 @@ bpfinishpy_init (PyObject *self, PyObject *args, PyObject *kwargs)
/* Set a breakpoint on the return address. */
event_location_up location
= new_address_location (get_frame_pc (prev_frame), NULL, 0);
- create_breakpoint (python_gdbarch,
+ create_breakpoint (gdbpy_enter::get_gdbarch (),
location.get (), NULL, thread, NULL, false,
0,
1 /*temp_flag*/,
bp_breakpoint,
0,
AUTO_BOOLEAN_TRUE,
- &bkpt_breakpoint_ops,
+ &base_breakpoint_ops,
0, 1, internal_bp, 0);
}
catch (const gdb_exception &except)
@@ -380,7 +385,7 @@ bpfinishpy_detect_out_scope_cb (struct breakpoint *b,
static void
bpfinishpy_handle_stop (struct bpstat *bs, int print_frame)
{
- gdbpy_enter enter_py (get_current_arch (), current_language);
+ gdbpy_enter enter_py;
for (breakpoint *bp : all_breakpoints_safe ())
bpfinishpy_detect_out_scope_cb (bp, bs == NULL ? NULL : bs->breakpoint_at);
@@ -392,7 +397,7 @@ bpfinishpy_handle_stop (struct bpstat *bs, int print_frame)
static void
bpfinishpy_handle_exit (struct inferior *inf)
{
- gdbpy_enter enter_py (target_gdbarch (), current_language);
+ gdbpy_enter enter_py (target_gdbarch ());
for (breakpoint *bp : all_breakpoints_safe ())
bpfinishpy_detect_out_scope_cb (bp, nullptr);
diff --git a/gdb/python/py-frame.c b/gdb/python/py-frame.c
index 0cab8e15946..769e28c1a2c 100644
--- a/gdb/python/py-frame.c
+++ b/gdb/python/py-frame.c
@@ -80,7 +80,7 @@ static PyObject *
frapy_str (PyObject *self)
{
const frame_id &fid = ((frame_object *) self)->frame_id;
- return PyString_FromString (fid.to_string ().c_str ());
+ return PyUnicode_FromString (fid.to_string ().c_str ());
}
/* Implementation of gdb.Frame.is_valid (self) -> Boolean.
@@ -292,11 +292,11 @@ frapy_block (PyObject *self, PyObject *args)
}
for (fn_block = block;
- fn_block != NULL && BLOCK_FUNCTION (fn_block) == NULL;
- fn_block = BLOCK_SUPERBLOCK (fn_block))
+ fn_block != NULL && fn_block->function () == NULL;
+ fn_block = fn_block->superblock ())
;
- if (block == NULL || fn_block == NULL || BLOCK_FUNCTION (fn_block) == NULL)
+ if (block == NULL || fn_block == NULL || fn_block->function () == NULL)
{
PyErr_SetString (PyExc_RuntimeError,
_("Cannot locate block for frame."));
@@ -306,7 +306,7 @@ frapy_block (PyObject *self, PyObject *args)
if (block)
{
return block_to_block_object
- (block, symbol_objfile (BLOCK_FUNCTION (fn_block)));
+ (block, fn_block->function ()->objfile ());
}
Py_RETURN_NONE;
diff --git a/gdb/python/py-framefilter.c b/gdb/python/py-framefilter.c
index 936354f354c..366f3745b9d 100644
--- a/gdb/python/py-framefilter.c
+++ b/gdb/python/py-framefilter.c
@@ -74,11 +74,11 @@ extract_sym (PyObject *obj, gdb::unique_xmalloc_ptr<char> *name,
if (*name == NULL)
return EXT_LANG_BT_ERROR;
/* If the API returns a string (and not a symbol), then there is
- no symbol derived language available and the frame filter has
- either overridden the symbol with a string, or supplied a
- entirely synthetic symbol/value pairing. In that case, use
- python_language. */
- *language = python_language;
+ no symbol derived language available and the frame filter has
+ either overridden the symbol with a string, or supplied a
+ entirely synthetic symbol/value pairing. In that case, use
+ the current language. */
+ *language = current_language;
*sym = NULL;
*sym_block = NULL;
}
@@ -169,7 +169,7 @@ mi_should_print (struct symbol *sym, enum mi_print_types type)
{
int print_me = 0;
- switch (SYMBOL_CLASS (sym))
+ switch (sym->aclass ())
{
default:
case LOC_UNDEF: /* catches errors */
@@ -191,9 +191,9 @@ mi_should_print (struct symbol *sym, enum mi_print_types type)
case LOC_REGISTER: /* register */
case LOC_COMPUTED: /* computed location */
if (type == MI_PRINT_LOCALS)
- print_me = ! SYMBOL_IS_ARGUMENT (sym);
+ print_me = ! sym->is_argument ();
else
- print_me = SYMBOL_IS_ARGUMENT (sym);
+ print_me = sym->is_argument ();
}
return print_me;
}
@@ -348,12 +348,12 @@ py_print_single_arg (struct ui_out *out,
{
string_file stb;
- fputs_filtered (fa->sym->print_name (), &stb);
+ gdb_puts (fa->sym->print_name (), &stb);
if (fa->entry_kind == print_entry_values_compact)
{
stb.puts ("=");
- fputs_filtered (fa->sym->print_name (), &stb);
+ gdb_puts (fa->sym->print_name (), &stb);
}
if (fa->entry_kind == print_entry_values_only
|| fa->entry_kind == print_entry_values_compact)
@@ -501,7 +501,7 @@ enumerate_args (PyObject *iter,
if (arg.entry_kind != print_entry_values_only)
{
out->text (", ");
- out->wrap_hint (" ");
+ out->wrap_hint (4);
}
py_print_single_arg (out, NULL, &entryarg, NULL, &opts,
@@ -705,7 +705,7 @@ py_print_args (PyObject *filter,
ui_out_emit_list list_emitter (out, "args");
- out->wrap_hint (" ");
+ out->wrap_hint (3);
annotate_frame_args ();
out->text (" (");
@@ -920,11 +920,7 @@ py_print_frame (PyObject *filter, frame_filter_flags flags,
function = function_to_free.get ();
}
- else if (PyLong_Check (py_func.get ())
-#if PY_MAJOR_VERSION == 2
- || PyInt_Check (py_func.get ())
-#endif
- )
+ else if (PyLong_Check (py_func.get ()))
{
CORE_ADDR addr;
struct bound_minimal_symbol msymbol;
@@ -984,7 +980,7 @@ py_print_frame (PyObject *filter, frame_filter_flags flags,
if (filename == NULL)
return EXT_LANG_BT_ERROR;
- out->wrap_hint (" ");
+ out->wrap_hint (3);
out->text (" at ");
annotate_frame_source_file ();
out->field_string ("file", filename.get (),
@@ -1157,7 +1153,7 @@ gdbpy_apply_frame_filter (const struct extension_language_defn *extlang,
return EXT_LANG_BT_NO_FILTERS;
}
- gdbpy_enter enter_py (gdbarch, current_language);
+ gdbpy_enter enter_py (gdbarch);
/* When we're limiting the number of frames, be careful to request
one extra frame, so that we can print a message if there are more
@@ -1226,7 +1222,7 @@ gdbpy_apply_frame_filter (const struct extension_language_defn *extlang,
{
/* We've printed all the frames we were asked to
print, but more frames existed. */
- printf_filtered (_("(More stack frames follow...)\n"));
+ gdb_printf (_("(More stack frames follow...)\n"));
break;
}
}
diff --git a/gdb/python/py-inferior.c b/gdb/python/py-inferior.c
index 45e33f9e28a..ebcd5b0a70f 100644
--- a/gdb/python/py-inferior.c
+++ b/gdb/python/py-inferior.c
@@ -86,7 +86,7 @@ python_on_normal_stop (struct bpstat *bs, int print_frame)
stop_signal = inferior_thread ()->stop_signal ();
- gdbpy_enter enter_py (get_current_arch (), current_language);
+ gdbpy_enter enter_py;
if (emit_stop_event (bs, stop_signal) < 0)
gdbpy_print_stack ();
@@ -98,7 +98,7 @@ python_on_resume (ptid_t ptid)
if (!gdb_python_initialized)
return;
- gdbpy_enter enter_py (target_gdbarch (), current_language);
+ gdbpy_enter enter_py (target_gdbarch ());
if (emit_continue_event (ptid) < 0)
gdbpy_print_stack ();
@@ -110,7 +110,7 @@ python_on_resume (ptid_t ptid)
static void
python_on_inferior_call_pre (ptid_t thread, CORE_ADDR address)
{
- gdbpy_enter enter_py (target_gdbarch (), current_language);
+ gdbpy_enter enter_py (target_gdbarch ());
if (emit_inferior_call_event (INFERIOR_CALL_PRE, thread, address) < 0)
gdbpy_print_stack ();
@@ -122,7 +122,7 @@ python_on_inferior_call_pre (ptid_t thread, CORE_ADDR address)
static void
python_on_inferior_call_post (ptid_t thread, CORE_ADDR address)
{
- gdbpy_enter enter_py (target_gdbarch (), current_language);
+ gdbpy_enter enter_py (target_gdbarch ());
if (emit_inferior_call_event (INFERIOR_CALL_POST, thread, address) < 0)
gdbpy_print_stack ();
@@ -135,7 +135,7 @@ python_on_inferior_call_post (ptid_t thread, CORE_ADDR address)
static void
python_on_memory_change (struct inferior *inferior, CORE_ADDR addr, ssize_t len, const bfd_byte *data)
{
- gdbpy_enter enter_py (target_gdbarch (), current_language);
+ gdbpy_enter enter_py (target_gdbarch ());
if (emit_memory_changed_event (addr, len) < 0)
gdbpy_print_stack ();
@@ -148,7 +148,7 @@ python_on_memory_change (struct inferior *inferior, CORE_ADDR addr, ssize_t len,
static void
python_on_register_change (struct frame_info *frame, int regnum)
{
- gdbpy_enter enter_py (target_gdbarch (), current_language);
+ gdbpy_enter enter_py (target_gdbarch ());
if (emit_register_changed_event (frame, regnum) < 0)
gdbpy_print_stack ();
@@ -162,7 +162,7 @@ python_inferior_exit (struct inferior *inf)
if (!gdb_python_initialized)
return;
- gdbpy_enter enter_py (target_gdbarch (), current_language);
+ gdbpy_enter enter_py (target_gdbarch ());
if (inf->has_exit_code)
exit_code = &inf->exit_code;
@@ -183,8 +183,7 @@ python_new_objfile (struct objfile *objfile)
gdbpy_enter enter_py (objfile != NULL
? objfile->arch ()
- : target_gdbarch (),
- current_language);
+ : target_gdbarch ());
if (objfile == NULL)
{
@@ -237,7 +236,7 @@ python_new_inferior (struct inferior *inf)
if (!gdb_python_initialized)
return;
- gdbpy_enter enter_py (python_gdbarch, python_language);
+ gdbpy_enter enter_py;
if (evregpy_no_listeners_p (gdb_py_events.new_inferior))
return;
@@ -265,7 +264,7 @@ python_inferior_deleted (struct inferior *inf)
if (!gdb_python_initialized)
return;
- gdbpy_enter enter_py (python_gdbarch, python_language);
+ gdbpy_enter enter_py;
if (evregpy_no_listeners_p (gdb_py_events.inferior_deleted))
return;
@@ -312,7 +311,7 @@ add_thread_object (struct thread_info *tp)
if (!gdb_python_initialized)
return;
- gdbpy_enter enter_py (python_gdbarch, python_language);
+ gdbpy_enter enter_py;
gdbpy_ref<thread_object> thread_obj = create_thread_object (tp);
if (thread_obj == NULL)
@@ -348,7 +347,7 @@ delete_thread_object (struct thread_info *tp, int ignore)
if (!gdb_python_initialized)
return;
- gdbpy_enter enter_py (python_gdbarch, python_language);
+ gdbpy_enter enter_py;
gdbpy_ref<inferior_object> inf_obj = inferior_to_inferior_object (tp->inf);
if (inf_obj == NULL)
@@ -754,10 +753,10 @@ infpy_repr (PyObject *obj)
inferior *inf = self->inferior;
if (inf == nullptr)
- return PyString_FromString ("<gdb.Inferior (invalid)>");
+ return PyUnicode_FromString ("<gdb.Inferior (invalid)>");
- return PyString_FromFormat ("<gdb.Inferior num=%d, pid=%d>",
- inf->num, inf->pid);
+ return PyUnicode_FromFormat ("<gdb.Inferior num=%d, pid=%d>",
+ inf->num, inf->pid);
}
@@ -792,7 +791,7 @@ py_free_inferior (struct inferior *inf, void *datum)
if (!gdb_python_initialized)
return;
- gdbpy_enter enter_py (python_gdbarch, python_language);
+ gdbpy_enter enter_py;
gdbpy_ref<inferior_object> inf_obj ((inferior_object *) datum);
inf_obj->inferior = NULL;
diff --git a/gdb/python/py-infthread.c b/gdb/python/py-infthread.c
index e568d8d916e..34f60526ac9 100644
--- a/gdb/python/py-infthread.c
+++ b/gdb/python/py-infthread.c
@@ -73,7 +73,35 @@ thpy_get_name (PyObject *self, void *ignore)
if (name == NULL)
Py_RETURN_NONE;
- return PyString_FromString (name);
+ return PyUnicode_FromString (name);
+}
+
+/* Return a string containing target specific additional information about
+ the state of the thread, or None, if there is no such additional
+ information. */
+
+static PyObject *
+thpy_get_details (PyObject *self, void *ignore)
+{
+ thread_object *thread_obj = (thread_object *) self;
+
+ THPY_REQUIRE_VALID (thread_obj);
+
+ /* GCC can't tell that extra_info will always be assigned after the
+ 'catch', so initialize it. */
+ const char *extra_info = nullptr;
+ try
+ {
+ extra_info = target_extra_thread_info (thread_obj->thread);
+ }
+ catch (const gdb_exception &except)
+ {
+ GDB_PY_HANDLE_EXCEPTION (except);
+ }
+ if (extra_info == nullptr)
+ Py_RETURN_NONE;
+
+ return PyUnicode_FromString (extra_info);
}
static int
@@ -347,6 +375,9 @@ static gdb_PyGetSetDef thread_object_getset[] =
{
{ "name", thpy_get_name, thpy_set_name,
"The name of the thread, as set by the user or the OS.", NULL },
+ { "details", thpy_get_details, NULL,
+ "A target specific string containing extra thread state details.",
+ NULL },
{ "num", thpy_get_num, NULL,
"Per-inferior number of the thread, as assigned by GDB.", NULL },
{ "global_num", thpy_get_global_num, NULL,
diff --git a/gdb/python/py-lazy-string.c b/gdb/python/py-lazy-string.c
index 69b1bc52ab9..c49987e2530 100644
--- a/gdb/python/py-lazy-string.c
+++ b/gdb/python/py-lazy-string.c
@@ -73,7 +73,7 @@ stpy_get_encoding (PyObject *self, void *closure)
/* An encoding can be set to NULL by the user, so check before
attempting a Python FromString call. If NULL return Py_None. */
if (self_string->encoding)
- result = PyString_FromString (self_string->encoding);
+ result = PyUnicode_FromString (self_string->encoding);
else
{
result = Py_None;
diff --git a/gdb/python/py-linetable.c b/gdb/python/py-linetable.c
index dfd4cbebdae..8e545febb17 100644
--- a/gdb/python/py-linetable.c
+++ b/gdb/python/py-linetable.c
@@ -192,16 +192,16 @@ ltpy_has_line (PyObject *self, PyObject *args)
if (! PyArg_ParseTuple (args, GDB_PY_LL_ARG, &py_line))
return NULL;
- if (SYMTAB_LINETABLE (symtab) == NULL)
+ if (symtab->linetable () == NULL)
{
PyErr_SetString (PyExc_RuntimeError,
_("Linetable information not found in symbol table"));
return NULL;
}
- for (index = 0; index < SYMTAB_LINETABLE (symtab)->nitems; index++)
+ for (index = 0; index < symtab->linetable ()->nitems; index++)
{
- struct linetable_entry *item = &(SYMTAB_LINETABLE (symtab)->item[index]);
+ struct linetable_entry *item = &(symtab->linetable ()->item[index]);
if (item->line == py_line)
Py_RETURN_TRUE;
}
@@ -223,7 +223,7 @@ ltpy_get_all_source_lines (PyObject *self, PyObject *args)
LTPY_REQUIRE_VALID (self, symtab);
- if (SYMTAB_LINETABLE (symtab) == NULL)
+ if (symtab->linetable () == NULL)
{
PyErr_SetString (PyExc_RuntimeError,
_("Linetable information not found in symbol table"));
@@ -234,9 +234,9 @@ ltpy_get_all_source_lines (PyObject *self, PyObject *args)
if (source_dict == NULL)
return NULL;
- for (index = 0; index < SYMTAB_LINETABLE (symtab)->nitems; index++)
+ for (index = 0; index < symtab->linetable ()->nitems; index++)
{
- item = &(SYMTAB_LINETABLE (symtab)->item[index]);
+ item = &(symtab->linetable ()->item[index]);
/* 0 is used to signify end of line table information. Do not
include in the source set. */
@@ -399,13 +399,13 @@ ltpy_iternext (PyObject *self)
LTPY_REQUIRE_VALID (iter_obj->source, symtab);
- if (iter_obj->current_index >= SYMTAB_LINETABLE (symtab)->nitems)
+ if (iter_obj->current_index >= symtab->linetable ()->nitems)
{
PyErr_SetNone (PyExc_StopIteration);
return NULL;
}
- item = &(SYMTAB_LINETABLE (symtab)->item[iter_obj->current_index]);
+ item = &(symtab->linetable ()->item[iter_obj->current_index]);
/* Skip over internal entries such as 0. 0 signifies the end of
line table data and is not useful to the API user. */
@@ -414,12 +414,12 @@ ltpy_iternext (PyObject *self)
iter_obj->current_index++;
/* Exit if the internal value is the last item in the line table. */
- if (iter_obj->current_index >= SYMTAB_LINETABLE (symtab)->nitems)
+ if (iter_obj->current_index >= symtab->linetable ()->nitems)
{
PyErr_SetNone (PyExc_StopIteration);
return NULL;
}
- item = &(SYMTAB_LINETABLE (symtab)->item[iter_obj->current_index]);
+ item = &(symtab->linetable ()->item[iter_obj->current_index]);
}
obj = build_linetable_entry (item->line, item->pc);
diff --git a/gdb/python/py-membuf.c b/gdb/python/py-membuf.c
index e789a78e649..d2a059a0e34 100644
--- a/gdb/python/py-membuf.c
+++ b/gdb/python/py-membuf.c
@@ -54,15 +54,7 @@ gdbpy_buffer_to_membuf (gdb::unique_xmalloc_ptr<gdb_byte> buffer,
membuf_obj->addr = address;
membuf_obj->length = length;
- PyObject *result;
-#ifdef IS_PY3K
- result = PyMemoryView_FromObject ((PyObject *) membuf_obj.get ());
-#else
- result = PyBuffer_FromReadWriteObject ((PyObject *) membuf_obj.get (), 0,
- Py_END_OF_BUFFER);
-#endif
-
- return result;
+ return PyMemoryView_FromObject ((PyObject *) membuf_obj.get ());
}
/* Destructor for gdb.Membuf objects. */
@@ -81,14 +73,13 @@ mbpy_str (PyObject *self)
{
membuf_object *membuf_obj = (membuf_object *) self;
- return PyString_FromFormat (_("Memory buffer for address %s, \
+ return PyUnicode_FromFormat (_("Memory buffer for address %s, \
which is %s bytes long."),
- paddress (python_gdbarch, membuf_obj->addr),
- pulongest (membuf_obj->length));
+ paddress (gdbpy_enter::get_gdbarch (),
+ membuf_obj->addr),
+ pulongest (membuf_obj->length));
}
-#ifdef IS_PY3K
-
static int
get_buffer (PyObject *self, Py_buffer *buf, int flags)
{
@@ -106,54 +97,6 @@ get_buffer (PyObject *self, Py_buffer *buf, int flags)
return ret;
}
-#else
-
-static Py_ssize_t
-get_read_buffer (PyObject *self, Py_ssize_t segment, void **ptrptr)
-{
- membuf_object *membuf_obj = (membuf_object *) self;
-
- if (segment)
- {
- PyErr_SetString (PyExc_SystemError,
- _("The memory buffer supports only one segment."));
- return -1;
- }
-
- *ptrptr = membuf_obj->buffer;
-
- return membuf_obj->length;
-}
-
-static Py_ssize_t
-get_write_buffer (PyObject *self, Py_ssize_t segment, void **ptrptr)
-{
- return get_read_buffer (self, segment, ptrptr);
-}
-
-static Py_ssize_t
-get_seg_count (PyObject *self, Py_ssize_t *lenp)
-{
- if (lenp)
- *lenp = ((membuf_object *) self)->length;
-
- return 1;
-}
-
-static Py_ssize_t
-get_char_buffer (PyObject *self, Py_ssize_t segment, char **ptrptr)
-{
- void *ptr = nullptr;
- Py_ssize_t ret;
-
- ret = get_read_buffer (self, segment, &ptr);
- *ptrptr = (char *) ptr;
-
- return ret;
-}
-
-#endif /* IS_PY3K */
-
/* General Python initialization callback. */
int
@@ -167,24 +110,11 @@ gdbpy_initialize_membuf (void)
(PyObject *) &membuf_object_type);
}
-#ifdef IS_PY3K
-
static PyBufferProcs buffer_procs =
{
get_buffer
};
-#else
-
-static PyBufferProcs buffer_procs = {
- get_read_buffer,
- get_write_buffer,
- get_seg_count,
- get_char_buffer
-};
-
-#endif /* IS_PY3K */
-
PyTypeObject membuf_object_type = {
PyVarObject_HEAD_INIT (nullptr, 0)
"gdb.Membuf", /*tp_name*/
diff --git a/gdb/python/py-micmd.c b/gdb/python/py-micmd.c
new file mode 100644
index 00000000000..79e2575f789
--- /dev/null
+++ b/gdb/python/py-micmd.c
@@ -0,0 +1,739 @@
+/* MI Command Set for GDB, the GNU debugger.
+
+ Copyright (C) 2019-2022 Free Software Foundation, Inc.
+
+ This file is part of GDB.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+/* GDB/MI commands implemented in Python. */
+
+#include "defs.h"
+#include "python-internal.h"
+#include "arch-utils.h"
+#include "charset.h"
+#include "language.h"
+#include "mi/mi-cmds.h"
+#include "mi/mi-parse.h"
+#include "cli/cli-cmds.h"
+#include <string>
+
+/* Debugging of Python MI commands. */
+
+static bool pymicmd_debug;
+
+/* Implementation of "show debug py-micmd". */
+
+static void
+show_pymicmd_debug (struct ui_file *file, int from_tty,
+ struct cmd_list_element *c, const char *value)
+{
+ gdb_printf (file, _("Python MI command debugging is %s.\n"), value);
+}
+
+/* Print a "py-micmd" debug statement. */
+
+#define pymicmd_debug_printf(fmt, ...) \
+ debug_prefixed_printf_cond (pymicmd_debug, "py-micmd", fmt, ##__VA_ARGS__)
+
+/* Print a "py-micmd" enter/exit debug statements. */
+
+#define PYMICMD_SCOPED_DEBUG_ENTER_EXIT \
+ scoped_debug_enter_exit (pymicmd_debug, "py-micmd")
+
+struct mi_command_py;
+
+/* Representation of a Python gdb.MICommand object. */
+
+struct micmdpy_object
+{
+ PyObject_HEAD
+
+ /* The object representing this command in the MI command table. This
+ pointer can be nullptr if the command is not currently installed into
+ the MI command table (see gdb.MICommand.installed property). */
+ struct mi_command_py *mi_command;
+
+ /* The string representing the name of this command, without the leading
+ dash. This string is never nullptr once the Python object has been
+ initialised.
+
+ The memory for this string was allocated with malloc, and needs to be
+ deallocated with free when the Python object is deallocated.
+
+ When the MI_COMMAND field is not nullptr, then the mi_command_py
+ object's name will point back to this string. */
+ char *mi_command_name;
+};
+
+/* The MI command implemented in Python. */
+
+struct mi_command_py : public mi_command
+{
+ /* Constructs a new mi_command_py object. NAME is command name without
+ leading dash. OBJECT is a reference to a Python object implementing
+ the command. This object must inherit from gdb.MICommand and must
+ implement the invoke method. */
+
+ mi_command_py (const char *name, micmdpy_object *object)
+ : mi_command (name, nullptr),
+ m_pyobj (gdbpy_ref<micmdpy_object>::new_reference (object))
+ {
+ pymicmd_debug_printf ("this = %p", this);
+ m_pyobj->mi_command = this;
+ }
+
+ ~mi_command_py ()
+ {
+ /* The Python object representing a MI command contains a pointer back
+ to this c++ object. We can safely set this pointer back to nullptr
+ now, to indicate the Python object no longer references a valid c++
+ object.
+
+ However, the Python object also holds the storage for our name
+ string. We can't clear that here as our parent's destructor might
+ still want to reference that string. Instead we rely on the Python
+ object deallocator to free that memory, and reset the pointer. */
+ m_pyobj->mi_command = nullptr;
+
+ pymicmd_debug_printf ("this = %p", this);
+ };
+
+ /* Validate that CMD_OBJ, a non-nullptr pointer, is installed into the MI
+ command table correctly. This function looks up the command in the MI
+ command table and checks that the object we get back references
+ CMD_OBJ. This function is only intended for calling within a
+ gdb_assert. This function performs many assertions internally, and
+ then always returns true. */
+ static void validate_installation (micmdpy_object *cmd_obj);
+
+ /* Update M_PYOBJ to NEW_PYOBJ. The pointer from M_PYOBJ that points
+ back to this object is swapped with the pointer in NEW_PYOBJ, which
+ must be nullptr, so that NEW_PYOBJ now points back to this object.
+ Additionally our parent's name string is stored in M_PYOBJ, so we
+ swap the name string with NEW_PYOBJ.
+
+ Before this call M_PYOBJ is the Python object representing this MI
+ command object. After this call has completed, NEW_PYOBJ now
+ represents this MI command object. */
+ void swap_python_object (micmdpy_object *new_pyobj)
+ {
+ /* Current object has a backlink, new object doesn't have a backlink. */
+ gdb_assert (m_pyobj->mi_command != nullptr);
+ gdb_assert (new_pyobj->mi_command == nullptr);
+
+ /* Clear the current M_PYOBJ's backlink, set NEW_PYOBJ's backlink. */
+ std::swap (new_pyobj->mi_command, m_pyobj->mi_command);
+
+ /* Both object have names. */
+ gdb_assert (m_pyobj->mi_command_name != nullptr);
+ gdb_assert (new_pyobj->mi_command_name != nullptr);
+
+ /* mi_command::m_name is the string owned by the current object. */
+ gdb_assert (m_pyobj->mi_command_name == this->name ());
+
+ /* The name in mi_command::m_name is owned by the current object. Rather
+ than changing the value of mi_command::m_name (which is not accessible
+ from here) to point to the name owned by the new object, swap the names
+ of the two objects, since we know they are identical strings. */
+ gdb_assert (strcmp (new_pyobj->mi_command_name,
+ m_pyobj->mi_command_name) == 0);
+ std::swap (new_pyobj->mi_command_name, m_pyobj->mi_command_name);
+
+ /* Take a reference to the new object, drop the reference to the current
+ object. */
+ m_pyobj = gdbpy_ref<micmdpy_object>::new_reference (new_pyobj);
+ }
+
+ /* Called when the MI command is invoked. */
+ virtual void invoke(struct mi_parse *parse) const override;
+
+private:
+ /* The Python object representing this MI command. */
+ gdbpy_ref<micmdpy_object> m_pyobj;
+};
+
+using mi_command_py_up = std::unique_ptr<mi_command_py>;
+
+extern PyTypeObject micmdpy_object_type
+ CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("micmdpy_object");
+
+/* Holds a Python object containing the string 'invoke'. */
+
+static PyObject *invoke_cst;
+
+/* Convert KEY_OBJ into a string that can be used as a field name in MI
+ output. KEY_OBJ must be a Python string object, and must only contain
+ characters suitable for use as an MI field name.
+
+ If KEY_OBJ is not a string, or if KEY_OBJ contains invalid characters,
+ then an error is thrown. Otherwise, KEY_OBJ is converted to a string
+ and returned. */
+
+static gdb::unique_xmalloc_ptr<char>
+py_object_to_mi_key (PyObject *key_obj)
+{
+ /* The key must be a string. */
+ if (!PyUnicode_Check (key_obj))
+ {
+ gdbpy_ref<> key_repr (PyObject_Repr (key_obj));
+ gdb::unique_xmalloc_ptr<char> key_repr_string;
+ if (key_repr != nullptr)
+ key_repr_string = python_string_to_target_string (key_repr.get ());
+ if (key_repr_string == nullptr)
+ gdbpy_handle_exception ();
+
+ gdbpy_error (_("non-string object used as key: %s"),
+ key_repr_string.get ());
+ }
+
+ gdb::unique_xmalloc_ptr<char> key_string
+ = python_string_to_target_string (key_obj);
+ if (key_string == nullptr)
+ gdbpy_handle_exception ();
+
+ /* Predicate function, returns true if NAME is a valid field name for use
+ in MI result output, otherwise, returns false. */
+ auto is_valid_key_name = [] (const char *name) -> bool
+ {
+ gdb_assert (name != nullptr);
+
+ if (*name == '\0' || !isalpha (*name))
+ return false;
+
+ for (; *name != '\0'; ++name)
+ if (!isalnum (*name) && *name != '_' && *name != '-')
+ return false;
+
+ return true;
+ };
+
+ if (!is_valid_key_name (key_string.get ()))
+ {
+ if (*key_string.get () == '\0')
+ gdbpy_error (_("Invalid empty key in MI result"));
+ else
+ gdbpy_error (_("Invalid key in MI result: %s"), key_string.get ());
+ }
+
+ return key_string;
+}
+
+/* Serialize RESULT and print it in MI format to the current_uiout.
+ FIELD_NAME is used as the name of this result field.
+
+ RESULT can be a dictionary, a sequence, an iterator, or an object that
+ can be converted to a string, these are converted to the matching MI
+ output format (dictionaries as tuples, sequences and iterators as lists,
+ and strings as named fields).
+
+ If anything goes wrong while formatting the output then an error is
+ thrown.
+
+ This function is the recursive inner core of serialize_mi_result, and
+ should only be called from that function. */
+
+static void
+serialize_mi_result_1 (PyObject *result, const char *field_name)
+{
+ struct ui_out *uiout = current_uiout;
+
+ if (PyDict_Check (result))
+ {
+ PyObject *key, *value;
+ Py_ssize_t pos = 0;
+ ui_out_emit_tuple tuple_emitter (uiout, field_name);
+ while (PyDict_Next (result, &pos, &key, &value))
+ {
+ gdb::unique_xmalloc_ptr<char> key_string
+ (py_object_to_mi_key (key));
+ serialize_mi_result_1 (value, key_string.get ());
+ }
+ }
+ else if (PySequence_Check (result) && !PyUnicode_Check (result))
+ {
+ ui_out_emit_list list_emitter (uiout, field_name);
+ Py_ssize_t len = PySequence_Size (result);
+ if (len == -1)
+ gdbpy_handle_exception ();
+ for (Py_ssize_t i = 0; i < len; ++i)
+ {
+ gdbpy_ref<> item (PySequence_ITEM (result, i));
+ if (item == nullptr)
+ gdbpy_handle_exception ();
+ serialize_mi_result_1 (item.get (), nullptr);
+ }
+ }
+ else if (PyIter_Check (result))
+ {
+ gdbpy_ref<> item;
+ ui_out_emit_list list_emitter (uiout, field_name);
+ while (true)
+ {
+ item.reset (PyIter_Next (result));
+ if (item == nullptr)
+ {
+ if (PyErr_Occurred () != nullptr)
+ gdbpy_handle_exception ();
+ break;
+ }
+ serialize_mi_result_1 (item.get (), nullptr);
+ }
+ }
+ else
+ {
+ gdb::unique_xmalloc_ptr<char> string (gdbpy_obj_to_string (result));
+ if (string == nullptr)
+ gdbpy_handle_exception ();
+ uiout->field_string (field_name, string.get ());
+ }
+}
+
+/* Serialize RESULT and print it in MI format to the current_uiout.
+
+ This function handles the top-level result initially returned from the
+ invoke method of the Python command implementation. At the top-level
+ the result must be a dictionary. The values within this dictionary can
+ be a wider range of types. Handling the values of the top-level
+ dictionary is done by serialize_mi_result_1, see that function for more
+ details.
+
+ If anything goes wrong while parsing and printing the MI output then an
+ error is thrown. */
+
+static void
+serialize_mi_result (PyObject *result)
+{
+ /* At the top-level, the result must be a dictionary. */
+
+ if (!PyDict_Check (result))
+ gdbpy_error (_("Result from invoke must be a dictionary"));
+
+ PyObject *key, *value;
+ Py_ssize_t pos = 0;
+ while (PyDict_Next (result, &pos, &key, &value))
+ {
+ gdb::unique_xmalloc_ptr<char> key_string
+ (py_object_to_mi_key (key));
+ serialize_mi_result_1 (value, key_string.get ());
+ }
+}
+
+/* Called when the MI command is invoked. PARSE contains the parsed
+ command line arguments from the user. */
+
+void
+mi_command_py::invoke (struct mi_parse *parse) const
+{
+ PYMICMD_SCOPED_DEBUG_ENTER_EXIT;
+
+ pymicmd_debug_printf ("this = %p, name = %s", this, name ());
+
+ mi_parse_argv (parse->args, parse);
+
+ if (parse->argv == nullptr)
+ error (_("Problem parsing arguments: %s %s"), parse->command, parse->args);
+
+
+ gdbpy_enter enter_py;
+
+ /* Place all the arguments into a list which we pass as a single argument
+ to the MI command's invoke method. */
+ gdbpy_ref<> argobj (PyList_New (parse->argc));
+ if (argobj == nullptr)
+ gdbpy_handle_exception ();
+
+ for (int i = 0; i < parse->argc; ++i)
+ {
+ gdbpy_ref<> str (PyUnicode_Decode (parse->argv[i],
+ strlen (parse->argv[i]),
+ host_charset (), nullptr));
+ if (PyList_SetItem (argobj.get (), i, str.release ()) < 0)
+ gdbpy_handle_exception ();
+ }
+
+ gdb_assert (this->m_pyobj != nullptr);
+ gdb_assert (PyErr_Occurred () == nullptr);
+ gdbpy_ref<> result
+ (PyObject_CallMethodObjArgs ((PyObject *) this->m_pyobj.get (), invoke_cst,
+ argobj.get (), nullptr));
+ if (result == nullptr)
+ gdbpy_handle_exception ();
+
+ if (result != Py_None)
+ serialize_mi_result (result.get ());
+}
+
+/* See declaration above. */
+
+void
+mi_command_py::validate_installation (micmdpy_object *cmd_obj)
+{
+ gdb_assert (cmd_obj != nullptr);
+ mi_command_py *cmd = cmd_obj->mi_command;
+ gdb_assert (cmd != nullptr);
+ const char *name = cmd_obj->mi_command_name;
+ gdb_assert (name != nullptr);
+ gdb_assert (name == cmd->name ());
+ mi_command *mi_cmd = mi_cmd_lookup (name);
+ gdb_assert (mi_cmd == cmd);
+ gdb_assert (cmd->m_pyobj == cmd_obj);
+}
+
+/* Return CMD as an mi_command_py if it is a Python MI command, else
+ nullptr. */
+
+static mi_command_py *
+as_mi_command_py (mi_command *cmd)
+{
+ return dynamic_cast<mi_command_py *> (cmd);
+}
+
+/* Uninstall OBJ, making the MI command represented by OBJ unavailable for
+ use by the user. On success 0 is returned, otherwise -1 is returned
+ and a Python exception will be set. */
+
+static int
+micmdpy_uninstall_command (micmdpy_object *obj)
+{
+ PYMICMD_SCOPED_DEBUG_ENTER_EXIT;
+
+ gdb_assert (obj->mi_command != nullptr);
+ gdb_assert (obj->mi_command_name != nullptr);
+
+ pymicmd_debug_printf ("name = %s", obj->mi_command_name);
+
+ /* Remove the command from the internal MI table of commands. This will
+ cause the mi_command_py object to be deleted, which will clear the
+ backlink in OBJ. */
+ bool removed = remove_mi_cmd_entry (obj->mi_command->name ());
+ gdb_assert (removed);
+ gdb_assert (obj->mi_command == nullptr);
+
+ return 0;
+}
+
+/* Install OBJ as a usable MI command. Return 0 on success, and -1 on
+ error, in which case, a Python error will have been set.
+
+ After successful completion the command name associated with OBJ will
+ be installed in the MI command table (so it can be found if the user
+ enters that command name), additionally, OBJ will have been added to
+ the gdb._mi_commands dictionary (using the command name as its key),
+ this will ensure that OBJ remains live even if the user gives up all
+ references. */
+
+static int
+micmdpy_install_command (micmdpy_object *obj)
+{
+ PYMICMD_SCOPED_DEBUG_ENTER_EXIT;
+
+ gdb_assert (obj->mi_command == nullptr);
+ gdb_assert (obj->mi_command_name != nullptr);
+
+ pymicmd_debug_printf ("name = %s", obj->mi_command_name);
+
+ /* Look up this command name in MI_COMMANDS, a command with this name may
+ already exist. */
+ mi_command *cmd = mi_cmd_lookup (obj->mi_command_name);
+ mi_command_py *cmd_py = as_mi_command_py (cmd);
+
+ if (cmd != nullptr && cmd_py == nullptr)
+ {
+ /* There is already an MI command registered with that name, and it's not
+ a Python one. Forbid replacing a non-Python MI command. */
+ PyErr_SetString (PyExc_RuntimeError,
+ _("unable to add command, name is already in use"));
+ return -1;
+ }
+
+ if (cmd_py != nullptr)
+ {
+ /* There is already a Python MI command registered with that name, swap
+ in the new gdb.MICommand implementation. */
+ cmd_py->swap_python_object (obj);
+ }
+ else
+ {
+ /* There's no MI command registered with that name at all, create one. */
+ mi_command_py_up mi_cmd (new mi_command_py (obj->mi_command_name, obj));
+
+ /* Add the command to the gdb internal MI command table. */
+ bool result = insert_mi_cmd_entry (std::move (mi_cmd));
+ gdb_assert (result);
+ }
+
+ return 0;
+}
+
+/* Implement gdb.MICommand.__init__. The init method takes the name of
+ the MI command as the first argument, which must be a string, starting
+ with a single dash. */
+
+static int
+micmdpy_init (PyObject *self, PyObject *args, PyObject *kwargs)
+{
+ PYMICMD_SCOPED_DEBUG_ENTER_EXIT;
+
+ micmdpy_object *cmd = (micmdpy_object *) self;
+
+ static const char *keywords[] = { "name", nullptr };
+ const char *name;
+
+ if (!gdb_PyArg_ParseTupleAndKeywords (args, kwargs, "s", keywords,
+ &name))
+ return -1;
+
+ /* Validate command name */
+ const int name_len = strlen (name);
+ if (name_len == 0)
+ {
+ PyErr_SetString (PyExc_ValueError, _("MI command name is empty."));
+ return -1;
+ }
+ else if ((name_len < 2) || (name[0] != '-') || !isalnum (name[1]))
+ {
+ PyErr_SetString (PyExc_ValueError,
+ _("MI command name does not start with '-'"
+ " followed by at least one letter or digit."));
+ return -1;
+ }
+ else
+ {
+ for (int i = 2; i < name_len; i++)
+ {
+ if (!isalnum (name[i]) && name[i] != '-')
+ {
+ PyErr_Format
+ (PyExc_ValueError,
+ _("MI command name contains invalid character: %c."),
+ name[i]);
+ return -1;
+ }
+ }
+
+ /* Skip over the leading dash. For the rest of this function the
+ dash is not important. */
+ ++name;
+ }
+
+ /* If this object already has a name set, then this object has been
+ initialized before. We handle this case a little differently. */
+ if (cmd->mi_command_name != nullptr)
+ {
+ /* First, we don't allow the user to change the MI command name.
+ Supporting this would be tricky as we would need to delete the
+ mi_command_py from the MI command table, however, the user might
+ be trying to perform this reinitialization from within the very
+ command we're about to delete... it all gets very messy.
+
+ So, for now at least, we don't allow this. This doesn't seem like
+ an excessive restriction. */
+ if (strcmp (cmd->mi_command_name, name) != 0)
+ {
+ PyErr_SetString
+ (PyExc_ValueError,
+ _("can't reinitialize object with a different command name"));
+ return -1;
+ }
+
+ /* If there's already an object registered with the MI command table,
+ then we're done. That object must be a mi_command_py, which
+ should reference back to this micmdpy_object. */
+ if (cmd->mi_command != nullptr)
+ {
+ mi_command_py::validate_installation (cmd);
+ return 0;
+ }
+ }
+ else
+ cmd->mi_command_name = xstrdup (name);
+
+ /* Now we can install this mi_command_py in the MI command table. */
+ return micmdpy_install_command (cmd);
+}
+
+/* Called when a gdb.MICommand object is deallocated. */
+
+static void
+micmdpy_dealloc (PyObject *obj)
+{
+ PYMICMD_SCOPED_DEBUG_ENTER_EXIT;
+
+ micmdpy_object *cmd = (micmdpy_object *) obj;
+
+ /* If the Python object failed to initialize, then the name field might
+ be nullptr. */
+ pymicmd_debug_printf ("obj = %p, name = %s", cmd,
+ (cmd->mi_command_name == nullptr
+ ? "(null)" : cmd->mi_command_name));
+
+ /* As the mi_command_py object holds a reference to the micmdpy_object,
+ the only way the dealloc function can be called is if the mi_command_py
+ object has been deleted, in which case the following assert will
+ hold. */
+ gdb_assert (cmd->mi_command == nullptr);
+
+ /* Free the memory that holds the command name. */
+ xfree (cmd->mi_command_name);
+ cmd->mi_command_name = nullptr;
+
+ /* Finally, free the memory for this Python object. */
+ Py_TYPE (obj)->tp_free (obj);
+}
+
+/* Python initialization for the MI commands components. */
+
+int
+gdbpy_initialize_micommands ()
+{
+ micmdpy_object_type.tp_new = PyType_GenericNew;
+ if (PyType_Ready (&micmdpy_object_type) < 0)
+ return -1;
+
+ if (gdb_pymodule_addobject (gdb_module, "MICommand",
+ (PyObject *) &micmdpy_object_type)
+ < 0)
+ return -1;
+
+ invoke_cst = PyUnicode_FromString ("invoke");
+ if (invoke_cst == nullptr)
+ return -1;
+
+ return 0;
+}
+
+void
+gdbpy_finalize_micommands ()
+{
+ /* mi_command_py objects hold references to micmdpy_object objects. They must
+ be dropped before the Python interpreter is finalized. Do so by removing
+ those MI command entries, thus deleting the mi_command_py objects. */
+ remove_mi_cmd_entries ([] (mi_command *cmd)
+ {
+ return as_mi_command_py (cmd) != nullptr;
+ });
+}
+
+/* Get the gdb.MICommand.name attribute, returns a string, the name of this
+ MI command. */
+
+static PyObject *
+micmdpy_get_name (PyObject *self, void *closure)
+{
+ struct micmdpy_object *micmd_obj = (struct micmdpy_object *) self;
+
+ gdb_assert (micmd_obj->mi_command_name != nullptr);
+ std::string name_str = string_printf ("-%s", micmd_obj->mi_command_name);
+ return PyUnicode_FromString (name_str.c_str ());
+}
+
+/* Get the gdb.MICommand.installed property. Returns true if this MI
+ command is installed into the MI command table, otherwise returns
+ false. */
+
+static PyObject *
+micmdpy_get_installed (PyObject *self, void *closure)
+{
+ struct micmdpy_object *micmd_obj = (struct micmdpy_object *) self;
+
+ if (micmd_obj->mi_command == nullptr)
+ Py_RETURN_FALSE;
+ Py_RETURN_TRUE;
+}
+
+/* Set the gdb.MICommand.installed property. The property can be set to
+ either true or false. Setting the property to true will cause the
+ command to be installed into the MI command table (if it isn't
+ already), while setting this property to false will cause the command
+ to be removed from the MI command table (if it is present). */
+
+static int
+micmdpy_set_installed (PyObject *self, PyObject *newvalue, void *closure)
+{
+ struct micmdpy_object *micmd_obj = (struct micmdpy_object *) self;
+
+ bool installed_p = PyObject_IsTrue (newvalue);
+ if (installed_p == (micmd_obj->mi_command != nullptr))
+ return 0;
+
+ if (installed_p)
+ return micmdpy_install_command (micmd_obj);
+ else
+ return micmdpy_uninstall_command (micmd_obj);
+}
+
+/* The gdb.MICommand properties. */
+
+static gdb_PyGetSetDef micmdpy_object_getset[] = {
+ { "name", micmdpy_get_name, nullptr, "The command's name.", nullptr },
+ { "installed", micmdpy_get_installed, micmdpy_set_installed,
+ "Is this command installed for use.", nullptr },
+ { nullptr } /* Sentinel. */
+};
+
+/* The gdb.MICommand descriptor. */
+
+PyTypeObject micmdpy_object_type = {
+ PyVarObject_HEAD_INIT (nullptr, 0) "gdb.MICommand", /*tp_name */
+ sizeof (micmdpy_object), /*tp_basicsize */
+ 0, /*tp_itemsize */
+ micmdpy_dealloc, /*tp_dealloc */
+ 0, /*tp_print */
+ 0, /*tp_getattr */
+ 0, /*tp_setattr */
+ 0, /*tp_compare */
+ 0, /*tp_repr */
+ 0, /*tp_as_number */
+ 0, /*tp_as_sequence */
+ 0, /*tp_as_mapping */
+ 0, /*tp_hash */
+ 0, /*tp_call */
+ 0, /*tp_str */
+ 0, /*tp_getattro */
+ 0, /*tp_setattro */
+ 0, /*tp_as_buffer */
+ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /*tp_flags */
+ "GDB mi-command object", /* tp_doc */
+ 0, /* tp_traverse */
+ 0, /* tp_clear */
+ 0, /* tp_richcompare */
+ 0, /* tp_weaklistoffset */
+ 0, /* tp_iter */
+ 0, /* tp_iternext */
+ 0, /* tp_methods */
+ 0, /* tp_members */
+ micmdpy_object_getset, /* tp_getset */
+ 0, /* tp_base */
+ 0, /* tp_dict */
+ 0, /* tp_descr_get */
+ 0, /* tp_descr_set */
+ 0, /* tp_dictoffset */
+ micmdpy_init, /* tp_init */
+ 0, /* tp_alloc */
+};
+
+void _initialize_py_micmd ();
+void
+_initialize_py_micmd ()
+{
+ add_setshow_boolean_cmd
+ ("py-micmd", class_maintenance, &pymicmd_debug,
+ _("Set Python micmd debugging."),
+ _("Show Python micmd debugging."),
+ _("When on, Python micmd debugging is enabled."),
+ nullptr,
+ show_pymicmd_debug,
+ &setdebuglist, &showdebuglist);
+}
diff --git a/gdb/python/py-objfile.c b/gdb/python/py-objfile.c
index 38052245bde..3e3270e7cd3 100644
--- a/gdb/python/py-objfile.c
+++ b/gdb/python/py-objfile.c
@@ -510,10 +510,10 @@ objfpy_repr (PyObject *self_)
objfile *obj = self->objfile;
if (obj == nullptr)
- return PyString_FromString ("<gdb.Objfile (invalid)>");
+ return PyUnicode_FromString ("<gdb.Objfile (invalid)>");
- return PyString_FromFormat ("<gdb.Objfile filename=%s>",
- objfile_filename (obj));
+ return PyUnicode_FromFormat ("<gdb.Objfile filename=%s>",
+ objfile_name (obj));
}
/* Subroutine of gdbpy_lookup_objfile_by_build_id to simplify it.
@@ -550,7 +550,7 @@ objfpy_build_id_matches (const struct bfd_build_id *build_id,
for (i = 0; i < build_id->size; ++i)
{
char c1 = string[i * 2], c2 = string[i * 2 + 1];
- int byte = (host_hex_value (c1) << 4) | host_hex_value (c2);
+ int byte = (fromhex (c1) << 4) | fromhex (c2);
if (byte != build_id->data[i])
return 0;
@@ -661,7 +661,7 @@ gdbpy_lookup_objfile (PyObject *self, PyObject *args, PyObject *kw)
static void
py_free_objfile (struct objfile *objfile, void *datum)
{
- gdbpy_enter enter_py (objfile->arch (), current_language);
+ gdbpy_enter enter_py (objfile->arch ());
gdbpy_ref<objfile_object> object ((objfile_object *) datum);
object->objfile = NULL;
}
diff --git a/gdb/python/py-param.c b/gdb/python/py-param.c
index 592ecbb41f9..cac9bd209a4 100644
--- a/gdb/python/py-param.c
+++ b/gdb/python/py-param.c
@@ -125,12 +125,8 @@ static PyObject *show_doc_cst;
static PyObject *
get_attr (PyObject *obj, PyObject *attr_name)
{
- if (PyString_Check (attr_name)
-#ifdef IS_PY3K
+ if (PyUnicode_Check (attr_name)
&& ! PyUnicode_CompareWithASCIIString (attr_name, "value"))
-#else
- && ! strcmp (PyString_AsString (attr_name), "value"))
-#endif
{
parmpy_object *self = (parmpy_object *) obj;
@@ -247,7 +243,7 @@ set_parameter_value (parmpy_object *self, PyObject *value)
long l;
int ok;
- if (! PyInt_Check (value))
+ if (!PyLong_Check (value))
{
PyErr_SetString (PyExc_RuntimeError,
_("The value must be integer."));
@@ -312,12 +308,8 @@ set_parameter_value (parmpy_object *self, PyObject *value)
static int
set_attr (PyObject *obj, PyObject *attr_name, PyObject *val)
{
- if (PyString_Check (attr_name)
-#ifdef IS_PY3K
+ if (PyUnicode_Check (attr_name)
&& ! PyUnicode_CompareWithASCIIString (attr_name, "value"))
-#else
- && ! strcmp (PyString_AsString (attr_name), "value"))
-#endif
{
if (!val)
{
@@ -331,14 +323,59 @@ set_attr (PyObject *obj, PyObject *attr_name, PyObject *val)
return PyObject_GenericSetAttr (obj, attr_name, val);
}
+/* Build up the path to command C, but drop the first component of the
+ command prefix. This is only intended for use with the set/show
+ parameters this file deals with, the first prefix should always be
+ either 'set' or 'show'.
+
+ As an example, if this full command is 'set prefix_a prefix_b command'
+ this function will return the string 'prefix_a prefix_b command'. */
+
+static std::string
+full_cmd_name_without_first_prefix (struct cmd_list_element *c)
+{
+ std::vector<std::string> components
+ = c->command_components ();
+ gdb_assert (components.size () > 1);
+ std::string result = components[1];
+ for (int i = 2; i < components.size (); ++i)
+ result += " " + components[i];
+ return result;
+}
+
+/* The different types of documentation string. */
+
+enum doc_string_type
+{
+ doc_string_set,
+ doc_string_show,
+ doc_string_description
+};
+
/* A helper function which returns a documentation string for an
object. */
static gdb::unique_xmalloc_ptr<char>
-get_doc_string (PyObject *object, PyObject *attr)
+get_doc_string (PyObject *object, enum doc_string_type doc_type,
+ const char *cmd_name)
{
gdb::unique_xmalloc_ptr<char> result;
+ PyObject *attr = nullptr;
+ switch (doc_type)
+ {
+ case doc_string_set:
+ attr = set_doc_cst;
+ break;
+ case doc_string_show:
+ attr = show_doc_cst;
+ break;
+ case doc_string_description:
+ attr = gdbpy_doc_cst;
+ break;
+ }
+ gdb_assert (attr != nullptr);
+
if (PyObject_HasAttr (object, attr))
{
gdbpy_ref<> ds_obj (PyObject_GetAttr (object, attr));
@@ -350,8 +387,21 @@ get_doc_string (PyObject *object, PyObject *attr)
gdbpy_print_stack ();
}
}
- if (! result)
- result.reset (xstrdup (_("This command is not documented.")));
+
+ if (result == nullptr)
+ {
+ if (doc_type == doc_string_description)
+ result.reset (xstrdup (_("This command is not documented.")));
+ else
+ {
+ if (doc_type == doc_string_show)
+ result = xstrprintf (_("Show the current value of '%s'."),
+ cmd_name);
+ else
+ result = xstrprintf (_("Set the current value of '%s'."),
+ cmd_name);
+ }
+ }
return result;
}
@@ -396,8 +446,8 @@ get_set_value (const char *args, int from_tty,
PyObject *obj = (PyObject *) c->context ();
gdb::unique_xmalloc_ptr<char> set_doc_string;
- gdbpy_enter enter_py (get_current_arch (), current_language);
- gdbpy_ref<> set_doc_func (PyString_FromString ("get_set_string"));
+ gdbpy_enter enter_py;
+ gdbpy_ref<> set_doc_func (PyUnicode_FromString ("get_set_string"));
if (set_doc_func == NULL)
{
@@ -414,7 +464,7 @@ get_set_value (const char *args, int from_tty,
const char *str = set_doc_string.get ();
if (str != nullptr && str[0] != '\0')
- fprintf_filtered (gdb_stdout, "%s\n", str);
+ gdb_printf ("%s\n", str);
}
/* A callback function that is registered against the respective
@@ -431,8 +481,8 @@ get_show_value (struct ui_file *file, int from_tty,
PyObject *obj = (PyObject *) c->context ();
gdb::unique_xmalloc_ptr<char> show_doc_string;
- gdbpy_enter enter_py (get_current_arch (), current_language);
- gdbpy_ref<> show_doc_func (PyString_FromString ("get_show_string"));
+ gdbpy_enter enter_py;
+ gdbpy_ref<> show_doc_func (PyUnicode_FromString ("get_show_string"));
if (show_doc_func == NULL)
{
@@ -442,7 +492,7 @@ get_show_value (struct ui_file *file, int from_tty,
if (PyObject_HasAttr (obj, show_doc_func.get ()))
{
- gdbpy_ref<> val_obj (PyString_FromString (value));
+ gdbpy_ref<> val_obj (PyUnicode_FromString (value));
if (val_obj == NULL)
{
@@ -458,15 +508,19 @@ get_show_value (struct ui_file *file, int from_tty,
return;
}
- fprintf_filtered (file, "%s\n", show_doc_string.get ());
+ gdb_printf (file, "%s\n", show_doc_string.get ());
}
else
{
- /* We have to preserve the existing < GDB 7.3 API. If a
- callback function does not exist, then attempt to read the
- show_doc attribute. */
- show_doc_string = get_doc_string (obj, show_doc_cst);
- fprintf_filtered (file, "%s %s\n", show_doc_string.get (), value);
+ /* If there is no 'get_show_string' callback then we want to show
+ something sensible here. In older versions of GDB (< 7.3) we
+ didn't support 'get_show_string', and instead we just made use of
+ GDB's builtin use of the show_doc. However, GDB's builtin
+ show_doc adjustment is not i18n friendly, so, instead, we just
+ print this generic string. */
+ std::string cmd_path = full_cmd_name_without_first_prefix (c);
+ gdb_printf (file, _("The current value of '%s' is \"%s\".\n"),
+ cmd_path.c_str (), value);
}
}
@@ -572,13 +626,13 @@ add_setshow_generic (int parmclass, enum command_class cmdclass,
break;
case var_enum:
+ /* Initialize the value, just in case. */
+ self->value.cstringval = self->enumeration[0];
commands = add_setshow_enum_cmd (cmd_name.get (), cmdclass,
self->enumeration,
&self->value.cstringval, set_doc,
show_doc, help_doc, get_set_value,
get_show_value, set_list, show_list);
- /* Initialize the value, just in case. */
- self->value.cstringval = self->enumeration[0];
break;
default:
@@ -737,9 +791,9 @@ parmpy_init (PyObject *self, PyObject *args, PyObject *kwds)
if (cmd_name == nullptr)
return -1;
- set_doc = get_doc_string (self, set_doc_cst);
- show_doc = get_doc_string (self, show_doc_cst);
- doc = get_doc_string (self, gdbpy_doc_cst);
+ set_doc = get_doc_string (self, doc_string_set, name);
+ show_doc = get_doc_string (self, doc_string_show, name);
+ doc = get_doc_string (self, doc_string_description, cmd_name.get ());
Py_INCREF (self);
@@ -781,10 +835,10 @@ gdbpy_initialize_parameters (void)
if (PyType_Ready (&parmpy_object_type) < 0)
return -1;
- set_doc_cst = PyString_FromString ("set_doc");
+ set_doc_cst = PyUnicode_FromString ("set_doc");
if (! set_doc_cst)
return -1;
- show_doc_cst = PyString_FromString ("show_doc");
+ show_doc_cst = PyUnicode_FromString ("show_doc");
if (! show_doc_cst)
return -1;
diff --git a/gdb/python/py-prettyprint.c b/gdb/python/py-prettyprint.c
index df4857fef11..c9bbd726412 100644
--- a/gdb/python/py-prettyprint.c
+++ b/gdb/python/py-prettyprint.c
@@ -321,7 +321,7 @@ print_string_repr (PyObject *printer, const char *hint,
language->printstr (stream, type, (gdb_byte *) output,
length, NULL, 0, options);
else
- fputs_filtered (output, stream);
+ gdb_puts (output, stream);
}
else
{
@@ -425,8 +425,8 @@ print_children (PyObject *printer, const char *hint,
/* The user won't necessarily get a stack trace here, so provide
more context. */
if (gdbpy_print_python_errors_p ())
- fprintf_unfiltered (gdb_stderr,
- _("Bad result from children iterator.\n"));
+ gdb_printf (gdb_stderr,
+ _("Bad result from children iterator.\n"));
gdbpy_print_stack ();
continue;
}
@@ -439,10 +439,10 @@ print_children (PyObject *printer, const char *hint,
if (i == 0)
{
if (!is_py_none)
- fputs_filtered (" = ", stream);
+ gdb_puts (" = ", stream);
}
else if (! is_map || i % 2 == 0)
- fputs_filtered (pretty ? "," : ", ", stream);
+ gdb_puts (pretty ? "," : ", ", stream);
/* Skip printing children if max_depth has been reached. This check
is performed after print_string_repr and the "=" separator so that
@@ -452,7 +452,7 @@ print_children (PyObject *printer, const char *hint,
return;
else if (i == 0)
/* Print initial "{" to bookend children. */
- fputs_filtered ("{", stream);
+ gdb_puts ("{", stream);
/* In summary mode, we just want to print "= {...}" if there is
a value. */
@@ -470,26 +470,26 @@ print_children (PyObject *printer, const char *hint,
{
if (pretty)
{
- fputs_filtered ("\n", stream);
- print_spaces_filtered (2 + 2 * recurse, stream);
+ gdb_puts ("\n", stream);
+ print_spaces (2 + 2 * recurse, stream);
}
else
- wrap_here (n_spaces (2 + 2 *recurse));
+ stream->wrap_here (2 + 2 *recurse);
}
if (is_map && i % 2 == 0)
- fputs_filtered ("[", stream);
+ gdb_puts ("[", stream);
else if (is_array)
{
/* We print the index, not whatever the child method
returned as the name. */
if (options->print_array_indexes)
- fprintf_filtered (stream, "[%d] = ", i);
+ gdb_printf (stream, "[%d] = ", i);
}
else if (! is_map)
{
- fputs_filtered (name, stream);
- fputs_filtered (" = ", stream);
+ gdb_puts (name, stream);
+ gdb_puts (" = ", stream);
}
if (gdbpy_is_lazy_string (py_v))
@@ -514,7 +514,7 @@ print_children (PyObject *printer, const char *hint,
if (!output)
gdbpy_print_stack ();
else
- fputs_filtered (output.get (), stream);
+ gdb_puts (output.get (), stream);
}
else
{
@@ -540,7 +540,7 @@ print_children (PyObject *printer, const char *hint,
}
if (is_map && i % 2 == 0)
- fputs_filtered ("] = ", stream);
+ gdb_puts ("] = ", stream);
}
if (i)
@@ -549,17 +549,17 @@ print_children (PyObject *printer, const char *hint,
{
if (pretty)
{
- fputs_filtered ("\n", stream);
- print_spaces_filtered (2 + 2 * recurse, stream);
+ gdb_puts ("\n", stream);
+ print_spaces (2 + 2 * recurse, stream);
}
- fputs_filtered ("...", stream);
+ gdb_puts ("...", stream);
}
if (pretty)
{
- fputs_filtered ("\n", stream);
- print_spaces_filtered (2 * recurse, stream);
+ gdb_puts ("\n", stream);
+ print_spaces (2 * recurse, stream);
}
- fputs_filtered ("}", stream);
+ gdb_puts ("}", stream);
}
}
diff --git a/gdb/python/py-progspace.c b/gdb/python/py-progspace.c
index 8131b66d24b..5657ef7756c 100644
--- a/gdb/python/py-progspace.c
+++ b/gdb/python/py-progspace.c
@@ -388,7 +388,7 @@ pspy_block_for_pc (PyObject *o, PyObject *args)
set_current_program_space (self->pspace);
cust = find_pc_compunit_symtab (pc);
- if (cust != NULL && COMPUNIT_OBJFILE (cust) != NULL)
+ if (cust != NULL && cust->objfile () != NULL)
block = block_for_pc (pc);
}
catch (const gdb_exception &except)
@@ -396,11 +396,11 @@ pspy_block_for_pc (PyObject *o, PyObject *args)
GDB_PY_HANDLE_EXCEPTION (except);
}
- if (cust == NULL || COMPUNIT_OBJFILE (cust) == NULL)
+ if (cust == NULL || cust->objfile () == NULL)
Py_RETURN_NONE;
if (block)
- return block_to_block_object (block, COMPUNIT_OBJFILE (cust));
+ return block_to_block_object (block, cust->objfile ());
Py_RETURN_NONE;
}
@@ -472,7 +472,7 @@ py_free_pspace (struct program_space *pspace, void *datum)
being deleted. */
struct gdbarch *arch = target_gdbarch ();
- gdbpy_enter enter_py (arch, current_language);
+ gdbpy_enter enter_py (arch);
gdbpy_ref<pspace_object> object ((pspace_object *) datum);
object->pspace = NULL;
}
@@ -504,6 +504,23 @@ pspace_to_pspace_object (struct program_space *pspace)
return gdbpy_ref<>::new_reference (result);
}
+/* See python-internal.h. */
+
+struct program_space *
+progspace_object_to_program_space (PyObject *obj)
+{
+ gdb_assert (gdbpy_is_progspace (obj));
+ return ((pspace_object *) obj)->pspace;
+}
+
+/* See python-internal.h. */
+
+bool
+gdbpy_is_progspace (PyObject *obj)
+{
+ return PyObject_TypeCheck (obj, &pspace_object_type);
+}
+
void _initialize_py_progspace ();
void
_initialize_py_progspace ()
diff --git a/gdb/python/py-record-btrace.c b/gdb/python/py-record-btrace.c
index 2a0e89ddcfa..85401010f0a 100644
--- a/gdb/python/py-record-btrace.c
+++ b/gdb/python/py-record-btrace.c
@@ -28,16 +28,6 @@
#include "disasm.h"
#include "gdbarch.h"
-#if defined (IS_PY3K)
-
-#define BTPY_PYSLICE(x) (x)
-
-#else
-
-#define BTPY_PYSLICE(x) ((PySliceObject *) x)
-
-#endif
-
/* Python object for btrace record lists. */
struct btpy_list_object {
@@ -295,12 +285,7 @@ recpy_bt_insn_data (PyObject *self, void *closure)
if (object == NULL)
return NULL;
-#ifdef IS_PY3K
return PyMemoryView_FromObject (object);
-#else
- return PyBuffer_FromObject (object, 0, Py_END_OF_BUFFER);
-#endif
-
}
/* Implementation of RecordInstruction.decoded [str] for btrace.
@@ -486,9 +471,9 @@ btpy_list_slice (PyObject *self, PyObject *value)
const Py_ssize_t length = btpy_list_length (self);
Py_ssize_t start, stop, step, slicelength;
- if (PyInt_Check (value))
+ if (PyLong_Check (value))
{
- Py_ssize_t index = PyInt_AsSsize_t (value);
+ Py_ssize_t index = PyLong_AsSsize_t (value);
/* Emulate Python behavior for negative indices. */
if (index < 0)
@@ -500,7 +485,7 @@ btpy_list_slice (PyObject *self, PyObject *value)
if (!PySlice_Check (value))
return PyErr_Format (PyExc_TypeError, _("Index must be int or slice."));
- if (0 != PySlice_GetIndicesEx (BTPY_PYSLICE (value), length, &start, &stop,
+ if (0 != PySlice_GetIndicesEx (value, length, &start, &stop,
&step, &slicelength))
return NULL;
@@ -622,7 +607,7 @@ btpy_list_richcompare (PyObject *self, PyObject *other, int op)
PyObject *
recpy_bt_method (PyObject *self, void *closure)
{
- return PyString_FromString ("btrace");
+ return PyUnicode_FromString ("btrace");
}
/* Implementation of
@@ -643,7 +628,7 @@ recpy_bt_format (PyObject *self, void *closure)
if (config == NULL)
Py_RETURN_NONE;
- return PyString_FromString (btrace_format_short_string (config->format));
+ return PyUnicode_FromString (btrace_format_short_string (config->format));
}
/* Implementation of
diff --git a/gdb/python/py-record-full.c b/gdb/python/py-record-full.c
index 1caec735c49..ecae08bfc95 100644
--- a/gdb/python/py-record-full.c
+++ b/gdb/python/py-record-full.c
@@ -26,7 +26,7 @@
PyObject *
recpy_full_method (PyObject *self, void *closure)
{
- return PyString_FromString ("full");
+ return PyUnicode_FromString ("full");
}
/* Implementation of
@@ -35,5 +35,5 @@ recpy_full_method (PyObject *self, void *closure)
PyObject *
recpy_full_format (PyObject *self, void *closure)
{
- return PyString_FromString ("full");
+ return PyUnicode_FromString ("full");
}
diff --git a/gdb/python/py-record.c b/gdb/python/py-record.c
index a4ab2936b01..51084dfac72 100644
--- a/gdb/python/py-record.c
+++ b/gdb/python/py-record.c
@@ -474,7 +474,7 @@ recpy_gap_reason_string (PyObject *self, void *closure)
{
const recpy_gap_object * const obj = (const recpy_gap_object *) self;
- return PyString_FromString (obj->reason_string);
+ return PyUnicode_FromString (obj->reason_string);
}
/* Record method list. */
diff --git a/gdb/python/py-registers.c b/gdb/python/py-registers.c
index b3f784e7fc5..bbb322f068c 100644
--- a/gdb/python/py-registers.c
+++ b/gdb/python/py-registers.c
@@ -20,7 +20,6 @@
#include "defs.h"
#include "gdbarch.h"
#include "arch-utils.h"
-#include "disasm.h"
#include "reggroups.h"
#include "python-internal.h"
#include "user-regs.h"
@@ -35,7 +34,7 @@ struct register_descriptor_iterator_object {
/* The register group that the user is iterating over. This will never
be NULL. */
- struct reggroup *reggroup;
+ const struct reggroup *reggroup;
/* The next register number to lookup. Starts at 0 and counts up. */
int regnum;
@@ -65,8 +64,8 @@ extern PyTypeObject register_descriptor_object_type
struct reggroup_iterator_object {
PyObject_HEAD
- /* The last register group returned. Initially this will be NULL. */
- struct reggroup *reggroup;
+ /* The index into GROUPS for the next group to return. */
+ std::vector<const reggroup *>::size_type index;
/* Pointer back to the architecture we're finding registers for. */
struct gdbarch *gdbarch;
@@ -80,7 +79,7 @@ struct reggroup_object {
PyObject_HEAD
/* The register group being described. */
- struct reggroup *reggroup;
+ const struct reggroup *reggroup;
};
extern PyTypeObject reggroup_object_type
@@ -101,12 +100,12 @@ gdbpy_register_object_data_init (struct gdbarch *gdbarch)
returned for the same REGGROUP pointer. */
static gdbpy_ref<>
-gdbpy_get_reggroup (struct reggroup *reggroup)
+gdbpy_get_reggroup (const reggroup *reggroup)
{
/* Map from GDB's internal reggroup objects to the Python representation.
GDB's reggroups are global, and are never deleted, so using a map like
this is safe. */
- static std::unordered_map<struct reggroup *,gdbpy_ref<>>
+ static std::unordered_map<const struct reggroup *,gdbpy_ref<>>
gdbpy_reggroup_object_map;
/* If there is not already a suitable Python object in the map then
@@ -135,10 +134,9 @@ static PyObject *
gdbpy_reggroup_to_string (PyObject *self)
{
reggroup_object *group = (reggroup_object *) self;
- struct reggroup *reggroup = group->reggroup;
+ const reggroup *reggroup = group->reggroup;
- const char *name = reggroup_name (reggroup);
- return PyString_FromString (name);
+ return PyUnicode_FromString (reggroup->name ());
}
/* Implement gdb.RegisterGroup.name (self) -> String.
@@ -196,7 +194,7 @@ gdbpy_register_descriptor_to_string (PyObject *self)
int regnum = reg->regnum;
const char *name = gdbarch_register_name (gdbarch, regnum);
- return PyString_FromString (name);
+ return PyUnicode_FromString (name);
}
/* Implement gdb.RegisterDescriptor.name attribute get function. Return a
@@ -225,17 +223,18 @@ gdbpy_reggroup_iter_next (PyObject *self)
{
reggroup_iterator_object *iter_obj
= (reggroup_iterator_object *) self;
- struct gdbarch *gdbarch = iter_obj->gdbarch;
- struct reggroup *next_group = reggroup_next (gdbarch, iter_obj->reggroup);
- if (next_group == NULL)
+ const std::vector<const reggroup *> &groups
+ = gdbarch_reggroups (iter_obj->gdbarch);
+ if (iter_obj->index >= groups.size ())
{
PyErr_SetString (PyExc_StopIteration, _("No more groups"));
return NULL;
}
- iter_obj->reggroup = next_group;
- return gdbpy_get_reggroup (iter_obj->reggroup).release ();
+ const reggroup *group = groups[iter_obj->index];
+ iter_obj->index++;
+ return gdbpy_get_reggroup (group).release ();
}
/* Return a new gdb.RegisterGroupsIterator over all the register groups in
@@ -252,7 +251,7 @@ gdbpy_new_reggroup_iterator (struct gdbarch *gdbarch)
&reggroup_iterator_object_type);
if (iter == NULL)
return NULL;
- iter->reggroup = NULL;
+ iter->index = 0;
iter->gdbarch = gdbarch;
return (PyObject *) iter;
}
@@ -269,7 +268,7 @@ PyObject *
gdbpy_new_register_descriptor_iterator (struct gdbarch *gdbarch,
const char *group_name)
{
- struct reggroup *grp = NULL;
+ const reggroup *grp = NULL;
/* Lookup the requested register group, or find the default. */
if (group_name == NULL || *group_name == '\0')
@@ -391,7 +390,7 @@ gdbpy_parse_register_id (struct gdbarch *gdbarch, PyObject *pyo_reg_id,
}
}
/* The register could be its internal GDB register number. */
- else if (PyInt_Check (pyo_reg_id))
+ else if (PyLong_Check (pyo_reg_id))
{
long value;
if (gdb_py_int_as_long (pyo_reg_id, &value) && (int) value == value)
diff --git a/gdb/python/py-signalevent.c b/gdb/python/py-signalevent.c
index e349f6107b2..69eeebbfaaa 100644
--- a/gdb/python/py-signalevent.c
+++ b/gdb/python/py-signalevent.c
@@ -31,7 +31,7 @@ create_signal_event_object (enum gdb_signal stop_signal)
const char *signal_name = gdb_signal_to_name (stop_signal);
- gdbpy_ref<> signal_name_obj (PyString_FromString (signal_name));
+ gdbpy_ref<> signal_name_obj (PyUnicode_FromString (signal_name));
if (signal_name_obj == NULL)
return NULL;
if (evpy_add_attribute (signal_event_obj.get (),
diff --git a/gdb/python/py-symbol.c b/gdb/python/py-symbol.c
index 508f445e100..02c35acd1e9 100644
--- a/gdb/python/py-symbol.c
+++ b/gdb/python/py-symbol.c
@@ -60,7 +60,7 @@ sympy_str (PyObject *self)
SYMPY_REQUIRE_VALID (self, symbol);
- result = PyString_FromString (symbol->print_name ());
+ result = PyUnicode_FromString (symbol->print_name ());
return result;
}
@@ -72,13 +72,13 @@ sympy_get_type (PyObject *self, void *closure)
SYMPY_REQUIRE_VALID (self, symbol);
- if (SYMBOL_TYPE (symbol) == NULL)
+ if (symbol->type () == NULL)
{
Py_INCREF (Py_None);
return Py_None;
}
- return type_to_type_object (SYMBOL_TYPE (symbol));
+ return type_to_type_object (symbol->type ());
}
static PyObject *
@@ -88,10 +88,10 @@ sympy_get_symtab (PyObject *self, void *closure)
SYMPY_REQUIRE_VALID (self, symbol);
- if (!SYMBOL_OBJFILE_OWNED (symbol))
+ if (!symbol->is_objfile_owned ())
Py_RETURN_NONE;
- return symtab_to_symtab_object (symbol_symtab (symbol));
+ return symtab_to_symtab_object (symbol->symtab ());
}
static PyObject *
@@ -101,7 +101,7 @@ sympy_get_name (PyObject *self, void *closure)
SYMPY_REQUIRE_VALID (self, symbol);
- return PyString_FromString (symbol->natural_name ());
+ return PyUnicode_FromString (symbol->natural_name ());
}
static PyObject *
@@ -111,7 +111,7 @@ sympy_get_linkage_name (PyObject *self, void *closure)
SYMPY_REQUIRE_VALID (self, symbol);
- return PyString_FromString (symbol->linkage_name ());
+ return PyUnicode_FromString (symbol->linkage_name ());
}
static PyObject *
@@ -131,7 +131,7 @@ sympy_get_addr_class (PyObject *self, void *closure)
SYMPY_REQUIRE_VALID (self, symbol);
- return gdb_py_object_from_longest (SYMBOL_CLASS (symbol)).release ();
+ return gdb_py_object_from_longest (symbol->aclass ()).release ();
}
static PyObject *
@@ -141,7 +141,7 @@ sympy_is_argument (PyObject *self, void *closure)
SYMPY_REQUIRE_VALID (self, symbol);
- return PyBool_FromLong (SYMBOL_IS_ARGUMENT (symbol));
+ return PyBool_FromLong (symbol->is_argument ());
}
static PyObject *
@@ -152,7 +152,7 @@ sympy_is_constant (PyObject *self, void *closure)
SYMPY_REQUIRE_VALID (self, symbol);
- theclass = SYMBOL_CLASS (symbol);
+ theclass = symbol->aclass ();
return PyBool_FromLong (theclass == LOC_CONST || theclass == LOC_CONST_BYTES);
}
@@ -165,7 +165,7 @@ sympy_is_function (PyObject *self, void *closure)
SYMPY_REQUIRE_VALID (self, symbol);
- theclass = SYMBOL_CLASS (symbol);
+ theclass = symbol->aclass ();
return PyBool_FromLong (theclass == LOC_BLOCK);
}
@@ -178,9 +178,9 @@ sympy_is_variable (PyObject *self, void *closure)
SYMPY_REQUIRE_VALID (self, symbol);
- theclass = SYMBOL_CLASS (symbol);
+ theclass = symbol->aclass ();
- return PyBool_FromLong (!SYMBOL_IS_ARGUMENT (symbol)
+ return PyBool_FromLong (!symbol->is_argument ()
&& (theclass == LOC_LOCAL || theclass == LOC_REGISTER
|| theclass == LOC_STATIC || theclass == LOC_COMPUTED
|| theclass == LOC_OPTIMIZED_OUT));
@@ -221,7 +221,7 @@ sympy_line (PyObject *self, void *closure)
SYMPY_REQUIRE_VALID (self, symbol);
- return gdb_py_object_from_longest (SYMBOL_LINE (symbol)).release ();
+ return gdb_py_object_from_longest (symbol->line ()).release ();
}
/* Implementation of gdb.Symbol.is_valid (self) -> Boolean.
@@ -260,7 +260,7 @@ sympy_value (PyObject *self, PyObject *args)
}
SYMPY_REQUIRE_VALID (self, symbol);
- if (SYMBOL_CLASS (symbol) == LOC_TYPEDEF)
+ if (symbol->aclass () == LOC_TYPEDEF)
{
PyErr_SetString (PyExc_TypeError, "cannot get the value of a typedef");
return NULL;
@@ -302,10 +302,10 @@ set_symbol (symbol_object *obj, struct symbol *symbol)
{
obj->symbol = symbol;
obj->prev = NULL;
- if (SYMBOL_OBJFILE_OWNED (symbol)
- && symbol_symtab (symbol) != NULL)
+ if (symbol->is_objfile_owned ()
+ && symbol->symtab () != NULL)
{
- struct objfile *objfile = symbol_objfile (symbol);
+ struct objfile *objfile = symbol->objfile ();
obj->next = ((symbol_object *)
objfile_data (objfile, sympy_objfile_data_key));
@@ -348,10 +348,10 @@ sympy_dealloc (PyObject *obj)
if (sym_obj->prev)
sym_obj->prev->next = sym_obj->next;
else if (sym_obj->symbol != NULL
- && SYMBOL_OBJFILE_OWNED (sym_obj->symbol)
- && symbol_symtab (sym_obj->symbol) != NULL)
+ && sym_obj->symbol->is_objfile_owned ()
+ && sym_obj->symbol->symtab () != NULL)
{
- set_objfile_data (symbol_objfile (sym_obj->symbol),
+ set_objfile_data (sym_obj->symbol->objfile (),
sympy_objfile_data_key, sym_obj->next);
}
if (sym_obj->next)
@@ -569,10 +569,9 @@ gdbpy_lookup_static_symbols (PyObject *self, PyObject *args, PyObject *kw)
for (compunit_symtab *cust : objfile->compunits ())
{
const struct blockvector *bv;
- const struct block *block;
- bv = COMPUNIT_BLOCKVECTOR (cust);
- block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
+ bv = cust->blockvector ();
+ const struct block *block = bv->static_block ();
if (block != nullptr)
{
diff --git a/gdb/python/py-symtab.c b/gdb/python/py-symtab.c
index db19e4b1213..7ed62716b67 100644
--- a/gdb/python/py-symtab.c
+++ b/gdb/python/py-symtab.c
@@ -93,7 +93,7 @@ stpy_str (PyObject *self)
STPY_REQUIRE_VALID (self, symtab);
- result = PyString_FromString (symtab_to_filename_for_display (symtab));
+ result = PyUnicode_FromString (symtab_to_filename_for_display (symtab));
return result;
}
@@ -119,7 +119,7 @@ stpy_get_objfile (PyObject *self, void *closure)
STPY_REQUIRE_VALID (self, symtab);
- return objfile_to_objfile_object (SYMTAB_OBJFILE (symtab)).release ();
+ return objfile_to_objfile_object (symtab->compunit ()->objfile ()).release ();
}
/* Getter function for symtab.producer. */
@@ -131,10 +131,10 @@ stpy_get_producer (PyObject *self, void *closure)
struct compunit_symtab *cust;
STPY_REQUIRE_VALID (self, symtab);
- cust = SYMTAB_COMPUNIT (symtab);
- if (COMPUNIT_PRODUCER (cust) != NULL)
+ cust = symtab->compunit ();
+ if (cust->producer () != nullptr)
{
- const char *producer = COMPUNIT_PRODUCER (cust);
+ const char *producer = cust->producer ();
return host_string_to_python_string (producer).release ();
}
@@ -176,14 +176,14 @@ static PyObject *
stpy_global_block (PyObject *self, PyObject *args)
{
struct symtab *symtab = NULL;
- const struct block *block = NULL;
const struct blockvector *blockvector;
STPY_REQUIRE_VALID (self, symtab);
- blockvector = SYMTAB_BLOCKVECTOR (symtab);
- block = BLOCKVECTOR_BLOCK (blockvector, GLOBAL_BLOCK);
- return block_to_block_object (block, SYMTAB_OBJFILE (symtab));
+ blockvector = symtab->compunit ()->blockvector ();
+ const struct block *block = blockvector->global_block ();
+
+ return block_to_block_object (block, symtab->compunit ()->objfile ());
}
/* Return the STATIC_BLOCK of the underlying symtab. */
@@ -192,14 +192,14 @@ static PyObject *
stpy_static_block (PyObject *self, PyObject *args)
{
struct symtab *symtab = NULL;
- const struct block *block = NULL;
const struct blockvector *blockvector;
STPY_REQUIRE_VALID (self, symtab);
- blockvector = SYMTAB_BLOCKVECTOR (symtab);
- block = BLOCKVECTOR_BLOCK (blockvector, STATIC_BLOCK);
- return block_to_block_object (block, SYMTAB_OBJFILE (symtab));
+ blockvector = symtab->compunit ()->blockvector ();
+ const struct block *block = blockvector->static_block ();
+
+ return block_to_block_object (block, symtab->compunit ()->objfile ());
}
/* Implementation of gdb.Symtab.linetable (self) -> gdb.LineTable.
@@ -234,8 +234,8 @@ salpy_str (PyObject *self)
filename = symtab_to_filename_for_display (symtab);
}
- return PyString_FromFormat ("symbol and line for %s, line %d", filename,
- sal->line);
+ return PyUnicode_FromFormat ("symbol and line for %s, line %d", filename,
+ sal->line);
}
static void
@@ -247,7 +247,7 @@ stpy_dealloc (PyObject *obj)
symtab->prev->next = symtab->next;
else if (symtab->symtab)
{
- set_objfile_data (SYMTAB_OBJFILE (symtab->symtab),
+ set_objfile_data (symtab->symtab->compunit ()->objfile (),
stpy_objfile_data_key, symtab->next);
}
if (symtab->next)
@@ -330,7 +330,7 @@ salpy_dealloc (PyObject *self)
self_sal->prev->next = self_sal->next;
else if (self_sal->symtab != Py_None)
set_objfile_data
- (SYMTAB_OBJFILE (symtab_object_to_symtab (self_sal->symtab)),
+ (symtab_object_to_symtab (self_sal->symtab)->compunit ()->objfile (),
salpy_objfile_data_key, self_sal->next);
if (self_sal->next)
@@ -378,12 +378,12 @@ set_sal (sal_object *sal_obj, struct symtab_and_line sal)
symtab *symtab = symtab_object_to_symtab (sal_obj->symtab);
sal_obj->next
- = ((sal_object *) objfile_data (SYMTAB_OBJFILE (symtab),
+ = ((sal_object *) objfile_data (symtab->compunit ()->objfile (),
salpy_objfile_data_key));
if (sal_obj->next)
sal_obj->next->prev = sal_obj;
- set_objfile_data (SYMTAB_OBJFILE (symtab),
+ set_objfile_data (symtab->compunit ()->objfile (),
salpy_objfile_data_key, sal_obj);
}
else
@@ -406,10 +406,12 @@ set_symtab (symtab_object *obj, struct symtab *symtab)
{
obj->next
= ((symtab_object *)
- objfile_data (SYMTAB_OBJFILE (symtab), stpy_objfile_data_key));
+ objfile_data (symtab->compunit ()->objfile (),
+ stpy_objfile_data_key));
if (obj->next)
obj->next->prev = obj;
- set_objfile_data (SYMTAB_OBJFILE (symtab), stpy_objfile_data_key, obj);
+ set_objfile_data (symtab->compunit ()->objfile (),
+ stpy_objfile_data_key, obj);
}
else
obj->next = NULL;
diff --git a/gdb/python/py-tui.c b/gdb/python/py-tui.c
index 97fdfe2be96..6a92251a705 100644
--- a/gdb/python/py-tui.c
+++ b/gdb/python/py-tui.c
@@ -155,7 +155,7 @@ gdbpy_tui_window::is_valid () const
tui_py_window::~tui_py_window ()
{
- gdbpy_enter enter_py (get_current_arch (), current_language);
+ gdbpy_enter enter_py;
/* This can be null if the user-provided Python construction
function failed. */
@@ -181,7 +181,7 @@ tui_py_window::rerender ()
{
tui_win_info::rerender ();
- gdbpy_enter enter_py (get_current_arch (), current_language);
+ gdbpy_enter enter_py;
int h = viewport_height ();
int w = viewport_width ();
@@ -206,7 +206,7 @@ tui_py_window::rerender ()
void
tui_py_window::do_scroll_horizontal (int num_to_scroll)
{
- gdbpy_enter enter_py (get_current_arch (), current_language);
+ gdbpy_enter enter_py;
if (PyObject_HasAttrString (m_window.get (), "hscroll"))
{
@@ -220,7 +220,7 @@ tui_py_window::do_scroll_horizontal (int num_to_scroll)
void
tui_py_window::do_scroll_vertical (int num_to_scroll)
{
- gdbpy_enter enter_py (get_current_arch (), current_language);
+ gdbpy_enter enter_py;
if (PyObject_HasAttrString (m_window.get (), "vscroll"))
{
@@ -234,7 +234,7 @@ tui_py_window::do_scroll_vertical (int num_to_scroll)
void
tui_py_window::click (int mouse_x, int mouse_y, int mouse_button)
{
- gdbpy_enter enter_py (get_current_arch (), current_language);
+ gdbpy_enter enter_py;
if (PyObject_HasAttrString (m_window.get (), "click"))
{
@@ -285,7 +285,7 @@ public:
gdbpy_tui_window_maker (const gdbpy_tui_window_maker &other)
{
- gdbpy_enter enter_py (get_current_arch (), current_language);
+ gdbpy_enter enter_py;
m_constr = other.m_constr;
}
@@ -297,7 +297,7 @@ public:
gdbpy_tui_window_maker &operator= (const gdbpy_tui_window_maker &other)
{
- gdbpy_enter enter_py (get_current_arch (), current_language);
+ gdbpy_enter enter_py;
m_constr = other.m_constr;
return *this;
}
@@ -312,14 +312,14 @@ private:
gdbpy_tui_window_maker::~gdbpy_tui_window_maker ()
{
- gdbpy_enter enter_py (get_current_arch (), current_language);
+ gdbpy_enter enter_py;
m_constr.reset (nullptr);
}
tui_win_info *
gdbpy_tui_window_maker::operator() (const char *win_name)
{
- gdbpy_enter enter_py (get_current_arch (), current_language);
+ gdbpy_enter enter_py;
gdbpy_ref<gdbpy_tui_window> wrapper
(PyObject_New (gdbpy_tui_window, &gdbpy_tui_window_object_type));
diff --git a/gdb/python/py-type.c b/gdb/python/py-type.c
index 220b0d46ffb..5352ead84bd 100644
--- a/gdb/python/py-type.c
+++ b/gdb/python/py-type.c
@@ -113,7 +113,6 @@ static struct pyty_code pyty_codes[] =
ENTRY (TYPE_CODE_NAMESPACE),
ENTRY (TYPE_CODE_DECFLOAT),
ENTRY (TYPE_CODE_INTERNAL_FUNCTION),
- { TYPE_CODE_UNDEF, NULL }
};
@@ -210,7 +209,7 @@ convert_field (struct type *type, int field)
if (field_name[0] != '\0')
{
- arg.reset (PyString_FromString (type->field (field).name ()));
+ arg.reset (PyUnicode_FromString (type->field (field).name ()));
if (arg == NULL)
return NULL;
}
@@ -262,7 +261,7 @@ field_name (struct type *type, int field)
gdbpy_ref<> result;
if (type->field (field).name ())
- result.reset (PyString_FromString (type->field (field).name ()));
+ result.reset (PyUnicode_FromString (type->field (field).name ()));
else
result = gdbpy_ref<>::new_reference (Py_None);
@@ -400,9 +399,9 @@ typy_get_name (PyObject *self, void *closure)
{
std::string name = ada_decode (type->name (), false);
if (!name.empty ())
- return PyString_FromString (name.c_str ());
+ return PyUnicode_FromString (name.c_str ());
}
- return PyString_FromString (type->name ());
+ return PyUnicode_FromString (type->name ());
}
/* Return the type's tag, or None. */
@@ -419,7 +418,7 @@ typy_get_tag (PyObject *self, void *closure)
if (tagname == nullptr)
Py_RETURN_NONE;
- return PyString_FromString (tagname);
+ return PyUnicode_FromString (tagname);
}
/* Return the type's objfile, or None. */
@@ -434,6 +433,40 @@ typy_get_objfile (PyObject *self, void *closure)
return objfile_to_objfile_object (objfile).release ();
}
+/* Return true if this is a scalar type, otherwise, returns false. */
+
+static PyObject *
+typy_is_scalar (PyObject *self, void *closure)
+{
+ struct type *type = ((type_object *) self)->type;
+
+ if (is_scalar_type (type))
+ Py_RETURN_TRUE;
+ else
+ Py_RETURN_FALSE;
+}
+
+/* Return true if this type is signed. Raises a ValueError if this type
+ is not a scalar type. */
+
+static PyObject *
+typy_is_signed (PyObject *self, void *closure)
+{
+ struct type *type = ((type_object *) self)->type;
+
+ if (!is_scalar_type (type))
+ {
+ PyErr_SetString (PyExc_ValueError,
+ _("Type must be a scalar type"));
+ return nullptr;
+ }
+
+ if (type->is_unsigned ())
+ Py_RETURN_FALSE;
+ else
+ Py_RETURN_TRUE;
+}
+
/* Return the type, stripped of typedefs. */
static PyObject *
typy_strip_typedefs (PyObject *self, PyObject *args)
@@ -506,7 +539,7 @@ typy_array_1 (PyObject *self, PyObject *args, int is_vector)
if (n2_obj)
{
- if (!PyInt_Check (n2_obj))
+ if (!PyLong_Check (n2_obj))
{
PyErr_SetString (PyExc_RuntimeError,
_("Array bound must be an integer"));
@@ -799,7 +832,7 @@ typy_lookup_typename (const char *type_name, const struct block *block)
else if (startswith (type_name, "enum "))
type = lookup_enum (type_name + 5, NULL);
else
- type = lookup_typename (python_language,
+ type = lookup_typename (current_language,
type_name, block, 0);
}
catch (const gdb_exception &except)
@@ -997,9 +1030,9 @@ typy_template_argument (PyObject *self, PyObject *args)
}
sym = TYPE_TEMPLATE_ARGUMENT (type, argno);
- if (SYMBOL_CLASS (sym) == LOC_TYPEDEF)
- return type_to_type_object (SYMBOL_TYPE (sym));
- else if (SYMBOL_CLASS (sym) == LOC_OPTIMIZED_OUT)
+ if (sym->aclass () == LOC_TYPEDEF)
+ return type_to_type_object (sym->type ());
+ else if (sym->aclass () == LOC_OPTIMIZED_OUT)
{
PyErr_Format (PyExc_RuntimeError,
_("Template argument is optimized out"));
@@ -1025,8 +1058,9 @@ typy_str (PyObject *self)
try
{
- LA_PRINT_TYPE (type_object_to_type (self), "", &thetype, -1, 0,
- &type_print_raw_options);
+ current_language->print_type (type_object_to_type (self), "",
+ &thetype, -1, 0,
+ &type_print_raw_options);
}
catch (const gdb_exception &except)
{
@@ -1089,7 +1123,7 @@ save_objfile_types (struct objfile *objfile, void *datum)
/* This prevents another thread from freeing the objects we're
operating on. */
- gdbpy_enter enter_py (objfile->arch (), current_language);
+ gdbpy_enter enter_py (objfile->arch ());
htab_up copied_types = create_copied_types_hash (objfile);
@@ -1444,8 +1478,6 @@ _initialize_py_type ()
int
gdbpy_initialize_types (void)
{
- int i;
-
if (PyType_Ready (&type_object_type) < 0)
return -1;
if (PyType_Ready (&field_object_type) < 0)
@@ -1453,10 +1485,9 @@ gdbpy_initialize_types (void)
if (PyType_Ready (&type_iterator_object_type) < 0)
return -1;
- for (i = 0; pyty_codes[i].name; ++i)
+ for (const auto &item : pyty_codes)
{
- if (PyModule_AddIntConstant (gdb_module, pyty_codes[i].name,
- pyty_codes[i].code) < 0)
+ if (PyModule_AddIntConstant (gdb_module, item.name, item.code) < 0)
return -1;
}
@@ -1490,6 +1521,10 @@ static gdb_PyGetSetDef type_object_getset[] =
"The tag name for this type, or None.", NULL },
{ "objfile", typy_get_objfile, NULL,
"The objfile this type was defined in, or None.", NULL },
+ { "is_scalar", typy_is_scalar, nullptr,
+ "Is this a scalar type?", nullptr },
+ { "is_signed", typy_is_signed, nullptr,
+ "Is this an signed type?", nullptr },
{ NULL }
};
@@ -1575,9 +1610,6 @@ static PyNumberMethods type_object_as_number = {
NULL, /* nb_add */
NULL, /* nb_subtract */
NULL, /* nb_multiply */
-#ifndef IS_PY3K
- NULL, /* nb_divide */
-#endif
NULL, /* nb_remainder */
NULL, /* nb_divmod */
NULL, /* nb_power */
@@ -1591,19 +1623,9 @@ static PyNumberMethods type_object_as_number = {
NULL, /* nb_and */
NULL, /* nb_xor */
NULL, /* nb_or */
-#ifdef IS_PY3K
NULL, /* nb_int */
NULL, /* reserved */
-#else
- NULL, /* nb_coerce */
- NULL, /* nb_int */
- NULL, /* nb_long */
-#endif
NULL, /* nb_float */
-#ifndef IS_PY3K
- NULL, /* nb_oct */
- NULL /* nb_hex */
-#endif
};
static PyMappingMethods typy_mapping = {
diff --git a/gdb/python/py-unwind.c b/gdb/python/py-unwind.c
index a884c83ec26..b2fd1402e93 100644
--- a/gdb/python/py-unwind.c
+++ b/gdb/python/py-unwind.c
@@ -20,7 +20,7 @@
#include "defs.h"
#include "arch-utils.h"
#include "frame-unwind.h"
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
#include "gdbcmd.h"
#include "language.h"
#include "observable.h"
@@ -39,7 +39,7 @@ static void
show_pyuw_debug (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Python unwinder debugging is %s.\n"), value);
+ gdb_printf (file, _("Python unwinder debugging is %s.\n"), value);
}
/* Print a "py-unwind" debug statement. */
@@ -213,7 +213,7 @@ unwind_infopy_str (PyObject *self)
stb.puts (")");
}
- return PyString_FromString (stb.c_str ());
+ return PyUnicode_FromString (stb.c_str ());
}
/* Create UnwindInfo instance for given PendingFrame and frame ID.
@@ -349,7 +349,7 @@ pending_framepy_str (PyObject *self)
const char *pc_str = NULL;
if (frame == NULL)
- return PyString_FromString ("Stale PendingFrame instance");
+ return PyUnicode_FromString ("Stale PendingFrame instance");
try
{
sp_str = core_addr_to_string_nz (get_frame_sp (frame));
@@ -360,7 +360,7 @@ pending_framepy_str (PyObject *self)
GDB_PY_HANDLE_EXCEPTION (except);
}
- return PyString_FromFormat ("SP=%s,PC=%s", sp_str, pc_str);
+ return PyUnicode_FromFormat ("SP=%s,PC=%s", sp_str, pc_str);
}
/* Implementation of gdb.PendingFrame.read_register (self, reg) -> gdb.Value.
@@ -524,7 +524,7 @@ pyuw_sniffer (const struct frame_unwind *self, struct frame_info *this_frame,
struct gdbarch *gdbarch = (struct gdbarch *) (self->unwind_data);
cached_frame_info *cached_frame;
- gdbpy_enter enter_py (gdbarch, current_language);
+ gdbpy_enter enter_py (gdbarch);
pyuw_debug_printf ("frame=%d, sp=%s, pc=%s",
frame_relative_level (this_frame),
diff --git a/gdb/python/py-utils.c b/gdb/python/py-utils.c
index 79e1c013261..63eb4e8078c 100644
--- a/gdb/python/py-utils.c
+++ b/gdb/python/py-utils.c
@@ -45,14 +45,10 @@ python_string_to_unicode (PyObject *obj)
unicode_str = obj;
Py_INCREF (obj);
}
-#ifndef IS_PY3K
- else if (PyString_Check (obj))
- unicode_str = PyUnicode_FromEncodedObject (obj, host_charset (), NULL);
-#endif
else
{
PyErr_SetString (PyExc_TypeError,
- _("Expected a string or unicode object."));
+ _("Expected a string object."));
unicode_str = NULL;
}
@@ -93,8 +89,9 @@ unicode_to_encoded_python_string (PyObject *unicode_str, const char *charset)
gdb::unique_xmalloc_ptr<char>
unicode_to_target_string (PyObject *unicode_str)
{
- return unicode_to_encoded_string (unicode_str,
- target_charset (python_gdbarch));
+ return (unicode_to_encoded_string
+ (unicode_str,
+ target_charset (gdbpy_enter::get_gdbarch ())));
}
/* Returns a PyObject with the contents of the given unicode string
@@ -104,8 +101,9 @@ unicode_to_target_string (PyObject *unicode_str)
static gdbpy_ref<>
unicode_to_target_python_string (PyObject *unicode_str)
{
- return unicode_to_encoded_python_string (unicode_str,
- target_charset (python_gdbarch));
+ return (unicode_to_encoded_python_string
+ (unicode_str,
+ target_charset (gdbpy_enter::get_gdbarch ())));
}
/* Converts a python string (8-bit or unicode) to a target string in
@@ -154,8 +152,8 @@ python_string_to_host_string (PyObject *obj)
gdbpy_ref<>
host_string_to_python_string (const char *str)
{
- return gdbpy_ref<> (PyString_Decode (str, strlen (str), host_charset (),
- NULL));
+ return gdbpy_ref<> (PyUnicode_Decode (str, strlen (str), host_charset (),
+ NULL));
}
/* Return true if OBJ is a Python string or unicode object, false
@@ -164,11 +162,7 @@ host_string_to_python_string (const char *str)
int
gdbpy_is_string (PyObject *obj)
{
-#ifdef IS_PY3K
return PyUnicode_Check (obj);
-#else
- return PyString_Check (obj) || PyUnicode_Check (obj);
-#endif
}
/* Return the string representation of OBJ, i.e., str (obj).
@@ -180,17 +174,7 @@ gdbpy_obj_to_string (PyObject *obj)
gdbpy_ref<> str_obj (PyObject_Str (obj));
if (str_obj != NULL)
- {
- gdb::unique_xmalloc_ptr<char> msg;
-
-#ifdef IS_PY3K
- msg = python_string_to_host_string (str_obj.get ());
-#else
- msg.reset (xstrdup (PyString_AsString (str_obj.get ())));
-#endif
-
- return msg;
- }
+ return python_string_to_host_string (str_obj.get ());
return NULL;
}
@@ -294,20 +278,9 @@ get_addr_from_python (PyObject *obj, CORE_ADDR *addr)
gdbpy_ref<>
gdb_py_object_from_longest (LONGEST l)
{
-#ifdef IS_PY3K
if (sizeof (l) > sizeof (long))
return gdbpy_ref<> (PyLong_FromLongLong (l));
return gdbpy_ref<> (PyLong_FromLong (l));
-#else
-#ifdef HAVE_LONG_LONG /* Defined by Python. */
- /* If we have 'long long', and the value overflows a 'long', use a
- Python Long; otherwise use a Python Int. */
- if (sizeof (l) > sizeof (long)
- && (l > PyInt_GetMax () || l < (- (LONGEST) PyInt_GetMax ()) - 1))
- return gdbpy_ref<> (PyLong_FromLongLong (l));
-#endif
- return gdbpy_ref<> (PyInt_FromLong (l));
-#endif
}
/* Convert a ULONGEST to the appropriate Python object -- either an
@@ -316,32 +289,18 @@ gdb_py_object_from_longest (LONGEST l)
gdbpy_ref<>
gdb_py_object_from_ulongest (ULONGEST l)
{
-#ifdef IS_PY3K
if (sizeof (l) > sizeof (unsigned long))
return gdbpy_ref<> (PyLong_FromUnsignedLongLong (l));
return gdbpy_ref<> (PyLong_FromUnsignedLong (l));
-#else
-#ifdef HAVE_LONG_LONG /* Defined by Python. */
- /* If we have 'long long', and the value overflows a 'long', use a
- Python Long; otherwise use a Python Int. */
- if (sizeof (l) > sizeof (unsigned long) && l > PyInt_GetMax ())
- return gdbpy_ref<> (PyLong_FromUnsignedLongLong (l));
-#endif
-
- if (l > PyInt_GetMax ())
- return gdbpy_ref<> (PyLong_FromUnsignedLong (l));
-
- return gdbpy_ref<> (PyInt_FromLong (l));
-#endif
}
-/* Like PyInt_AsLong, but returns 0 on failure, 1 on success, and puts
+/* Like PyLong_AsLong, but returns 0 on failure, 1 on success, and puts
the value into an out parameter. */
int
gdb_py_int_as_long (PyObject *obj, long *result)
{
- *result = PyInt_AsLong (obj);
+ *result = PyLong_AsLong (obj);
return ! (*result == -1 && PyErr_Occurred ());
}
@@ -380,6 +339,23 @@ gdb_pymodule_addobject (PyObject *module, const char *name, PyObject *object)
return result;
}
+/* See python-internal.h. */
+
+void
+gdbpy_error (const char *fmt, ...)
+{
+ va_list ap;
+ va_start (ap, fmt);
+ std::string str = string_vprintf (fmt, ap);
+ va_end (ap);
+
+ const char *msg = str.c_str ();
+ if (msg != nullptr && *msg != '\0')
+ error (_("Error occurred in Python: %s"), msg);
+ else
+ error (_("Error occurred in Python."));
+}
+
/* Handle a Python exception when the special gdb.GdbError treatment
is desired. This should only be called when an exception is set.
If the exception is a gdb.GdbError, throw a gdb exception with the
@@ -396,9 +372,9 @@ gdbpy_handle_exception ()
{
/* An error occurred computing the string representation of the
error message. This is rare, but we should inform the user. */
- printf_filtered (_("An error occurred in Python "
- "and then another occurred computing the "
- "error message.\n"));
+ gdb_printf (_("An error occurred in Python "
+ "and then another occurred computing the "
+ "error message.\n"));
gdbpy_print_stack ();
}
diff --git a/gdb/python/py-value.c b/gdb/python/py-value.c
index 70b33d5a27b..e779f491b5b 100644
--- a/gdb/python/py-value.c
+++ b/gdb/python/py-value.c
@@ -35,23 +35,26 @@
GDB (which uses target arithmetic). */
/* Python's integer type corresponds to C's long type. */
-#define builtin_type_pyint builtin_type (python_gdbarch)->builtin_long
+#define builtin_type_pyint \
+ builtin_type (gdbpy_enter::get_gdbarch ())->builtin_long
/* Python's float type corresponds to C's double type. */
-#define builtin_type_pyfloat builtin_type (python_gdbarch)->builtin_double
+#define builtin_type_pyfloat \
+ builtin_type (gdbpy_enter::get_gdbarch ())->builtin_double
/* Python's long type corresponds to C's long long type. */
-#define builtin_type_pylong builtin_type (python_gdbarch)->builtin_long_long
+#define builtin_type_pylong \
+ builtin_type (gdbpy_enter::get_gdbarch ())->builtin_long_long
/* Python's long type corresponds to C's long long type. Unsigned version. */
#define builtin_type_upylong builtin_type \
- (python_gdbarch)->builtin_unsigned_long_long
+ (gdbpy_enter::get_gdbarch ())->builtin_unsigned_long_long
#define builtin_type_pybool \
- language_bool_type (python_language, python_gdbarch)
+ language_bool_type (current_language, gdbpy_enter::get_gdbarch ())
#define builtin_type_pychar \
- language_string_char_type (python_language, python_gdbarch)
+ language_string_char_type (current_language, gdbpy_enter::get_gdbarch ())
struct value_object {
PyObject_HEAD
@@ -636,6 +639,7 @@ valpy_format_string (PyObject *self, PyObject *args, PyObject *kw)
"symbols", /* See set print symbol on|off. */
"unions", /* See set print union on|off. */
"address", /* See set print address on|off. */
+ "styling", /* Should we apply styling. */
/* C++ options. */
"deref_refs", /* No corresponding setting. */
"actual_objects", /* See set print object on|off. */
@@ -680,13 +684,14 @@ valpy_format_string (PyObject *self, PyObject *args, PyObject *kw)
PyObject *symbols_obj = NULL;
PyObject *unions_obj = NULL;
PyObject *address_obj = NULL;
+ PyObject *styling_obj = Py_False;
PyObject *deref_refs_obj = NULL;
PyObject *actual_objects_obj = NULL;
PyObject *static_members_obj = NULL;
char *format = NULL;
if (!gdb_PyArg_ParseTupleAndKeywords (args,
kw,
- "|O!O!O!O!O!O!O!O!O!O!IIIs",
+ "|O!O!O!O!O!O!O!O!O!O!O!IIIs",
keywords,
&PyBool_Type, &raw_obj,
&PyBool_Type, &pretty_arrays_obj,
@@ -695,6 +700,7 @@ valpy_format_string (PyObject *self, PyObject *args, PyObject *kw)
&PyBool_Type, &symbols_obj,
&PyBool_Type, &unions_obj,
&PyBool_Type, &address_obj,
+ &PyBool_Type, &styling_obj,
&PyBool_Type, &deref_refs_obj,
&PyBool_Type, &actual_objects_obj,
&PyBool_Type, &static_members_obj,
@@ -749,12 +755,12 @@ valpy_format_string (PyObject *self, PyObject *args, PyObject *kw)
}
}
- string_file stb;
+ string_file stb (PyObject_IsTrue (styling_obj));
try
{
common_val_print (((value_object *) self)->value, &stb, 0,
- &opts, python_language);
+ &opts, current_language);
}
catch (const gdb_exception &except)
{
@@ -1160,7 +1166,7 @@ valpy_str (PyObject *self)
try
{
common_val_print (((value_object *) self)->value, &stb, 0,
- &opts, python_language);
+ &opts, current_language);
}
catch (const gdb_exception &except)
{
@@ -1689,41 +1695,6 @@ valpy_richcompare (PyObject *self, PyObject *other, int op)
Py_RETURN_FALSE;
}
-#ifndef IS_PY3K
-/* Implements conversion to int. */
-static PyObject *
-valpy_int (PyObject *self)
-{
- struct value *value = ((value_object *) self)->value;
- struct type *type = value_type (value);
- LONGEST l = 0;
-
- try
- {
- if (is_floating_value (value))
- {
- type = builtin_type_pylong;
- value = value_cast (type, value);
- }
-
- if (!is_integral_type (type)
- && type->code () != TYPE_CODE_PTR)
- error (_("Cannot convert value to int."));
-
- l = value_as_long (value);
- }
- catch (const gdb_exception &except)
- {
- GDB_PY_HANDLE_EXCEPTION (except);
- }
-
- if (type->is_unsigned ())
- return gdb_py_object_from_ulongest (l).release ();
- else
- return gdb_py_object_from_longest (l).release ();
-}
-#endif
-
/* Implements conversion to long. */
static PyObject *
valpy_long (PyObject *self)
@@ -1908,15 +1879,6 @@ convert_value_from_python (PyObject *obj)
else
value = value_from_longest (builtin_type_pylong, l);
}
-#if PY_MAJOR_VERSION == 2
- else if (PyInt_Check (obj))
- {
- long l = PyInt_AsLong (obj);
-
- if (! PyErr_Occurred ())
- value = value_from_longest (builtin_type_pyint, l);
- }
-#endif
else if (PyFloat_Check (obj))
{
double d = PyFloat_AsDouble (obj);
@@ -1942,14 +1904,8 @@ convert_value_from_python (PyObject *obj)
value = value_copy (((value_object *) result)->value);
}
else
-#ifdef IS_PY3K
PyErr_Format (PyExc_TypeError,
_("Could not convert Python object: %S."), obj);
-#else
- PyErr_Format (PyExc_TypeError,
- _("Could not convert Python object: %s."),
- PyString_AsString (PyObject_Str (obj)));
-#endif
}
catch (const gdb_exception &except)
{
@@ -2009,6 +1965,14 @@ gdbpy_add_history (PyObject *self, PyObject *args)
return nullptr;
}
+/* Return an integer, the number of items in GDB's history. */
+
+PyObject *
+gdbpy_history_count (PyObject *self, PyObject *args)
+{
+ return gdb_py_object_from_ulongest (value_history_count ()).release ();
+}
+
/* Return the value of a convenience variable. */
PyObject *
gdbpy_convenience_variable (PyObject *self, PyObject *args)
@@ -2025,7 +1989,7 @@ gdbpy_convenience_variable (PyObject *self, PyObject *args)
if (var != NULL)
{
- res_val = value_of_internalvar (python_gdbarch, var);
+ res_val = value_of_internalvar (gdbpy_enter::get_gdbarch (), var);
if (value_type (res_val)->code () == TYPE_CODE_VOID)
res_val = NULL;
}
@@ -2162,9 +2126,6 @@ static PyNumberMethods value_object_as_number = {
valpy_add,
valpy_subtract,
valpy_multiply,
-#ifndef IS_PY3K
- valpy_divide,
-#endif
valpy_remainder,
NULL, /* nb_divmod */
valpy_power, /* nb_power */
@@ -2178,25 +2139,12 @@ static PyNumberMethods value_object_as_number = {
valpy_and, /* nb_and */
valpy_xor, /* nb_xor */
valpy_or, /* nb_or */
-#ifdef IS_PY3K
valpy_long, /* nb_int */
NULL, /* reserved */
-#else
- NULL, /* nb_coerce */
- valpy_int, /* nb_int */
- valpy_long, /* nb_long */
-#endif
valpy_float, /* nb_float */
-#ifndef IS_PY3K
- NULL, /* nb_oct */
- NULL, /* nb_hex */
-#endif
NULL, /* nb_inplace_add */
NULL, /* nb_inplace_subtract */
NULL, /* nb_inplace_multiply */
-#ifndef IS_PY3K
- NULL, /* nb_inplace_divide */
-#endif
NULL, /* nb_inplace_remainder */
NULL, /* nb_inplace_power */
NULL, /* nb_inplace_lshift */
diff --git a/gdb/python/py-xmethods.c b/gdb/python/py-xmethods.c
index fd3673029a0..1467e52a960 100644
--- a/gdb/python/py-xmethods.c
+++ b/gdb/python/py-xmethods.c
@@ -69,7 +69,7 @@ private:
python_xmethod_worker::~python_xmethod_worker ()
{
/* We don't do much here, but we still need the GIL. */
- gdbpy_enter enter_py (get_current_arch (), current_language);
+ gdbpy_enter enter_py;
Py_DECREF (m_py_worker);
Py_DECREF (m_this_type);
@@ -103,7 +103,7 @@ invoke_match_method (PyObject *matcher, PyObject *py_obj_type,
if (match_method == NULL)
return NULL;
- gdbpy_ref<> py_xmethod_name (PyString_FromString (xmethod_name));
+ gdbpy_ref<> py_xmethod_name (PyUnicode_FromString (xmethod_name));
if (py_xmethod_name == NULL)
return NULL;
@@ -122,7 +122,7 @@ gdbpy_get_matching_xmethod_workers
{
gdb_assert (obj_type != NULL && method_name != NULL);
- gdbpy_enter enter_py (get_current_arch (), current_language);
+ gdbpy_enter enter_py;
gdbpy_ref<> py_type (type_to_type_object (obj_type));
if (py_type == NULL)
@@ -294,7 +294,7 @@ python_xmethod_worker::do_get_arg_types (std::vector<type *> *arg_types)
{
/* The gdbpy_enter object needs to be placed first, so that it's the last to
be destroyed. */
- gdbpy_enter enter_py (get_current_arch (), current_language);
+ gdbpy_enter enter_py;
struct type *obj_type;
int i = 1, arg_count;
gdbpy_ref<> list_iter;
@@ -410,7 +410,7 @@ python_xmethod_worker::do_get_result_type (value *obj,
struct type *obj_type, *this_type;
int i;
- gdbpy_enter enter_py (get_current_arch (), current_language);
+ gdbpy_enter enter_py;
/* First see if there is a get_result_type method.
If not this could be an old xmethod (pre 7.9.1). */
@@ -502,7 +502,7 @@ struct value *
python_xmethod_worker::invoke (struct value *obj,
gdb::array_view<value *> args)
{
- gdbpy_enter enter_py (get_current_arch (), current_language);
+ gdbpy_enter enter_py;
int i;
struct type *obj_type, *this_type;
@@ -580,7 +580,7 @@ python_xmethod_worker::invoke (struct value *obj,
}
else
{
- res = allocate_value (lookup_typename (python_language,
+ res = allocate_value (lookup_typename (current_language,
"void", NULL, 0));
}
@@ -601,12 +601,12 @@ python_xmethod_worker::python_xmethod_worker (PyObject *py_worker,
int
gdbpy_initialize_xmethods (void)
{
- py_match_method_name = PyString_FromString (match_method_name);
+ py_match_method_name = PyUnicode_FromString (match_method_name);
if (py_match_method_name == NULL)
return -1;
py_get_arg_types_method_name
- = PyString_FromString (get_arg_types_method_name);
+ = PyUnicode_FromString (get_arg_types_method_name);
if (py_get_arg_types_method_name == NULL)
return -1;
diff --git a/gdb/python/python-internal.h b/gdb/python/python-internal.h
index 583989c5a6d..d947b96033b 100644
--- a/gdb/python/python-internal.h
+++ b/gdb/python/python-internal.h
@@ -87,23 +87,8 @@
#include <frameobject.h>
#include "py-ref.h"
-#if PY_MAJOR_VERSION >= 3
-#define IS_PY3K 1
-#endif
-
-#ifdef IS_PY3K
#define Py_TPFLAGS_CHECKTYPES 0
-#define PyInt_Check PyLong_Check
-#define PyInt_AsLong PyLong_AsLong
-#define PyInt_AsSsize_t PyLong_AsSsize_t
-
-#define PyString_FromString PyUnicode_FromString
-#define PyString_Decode PyUnicode_Decode
-#define PyString_FromFormat PyUnicode_FromFormat
-#define PyString_Check PyUnicode_Check
-#endif
-
/* If Python.h does not define WITH_THREAD, then the various
GIL-related functions will not be defined. However,
PyGILState_STATE will be. */
@@ -147,19 +132,6 @@ typedef long Py_hash_t;
#define PyMem_RawMalloc PyMem_Malloc
#endif
-/* Python 2.6 did not wrap Py_DECREF in 'do {...} while (0)', leading
- to 'suggest explicit braces to avoid ambiguous ‘else’' gcc errors.
- Wrap it ourselves, so that callers don't need to care. */
-
-static inline void
-gdb_Py_DECREF (void *op) /* ARI: editCase function */
-{
- Py_DECREF (op);
-}
-
-#undef Py_DECREF
-#define Py_DECREF(op) gdb_Py_DECREF (op)
-
/* PyObject_CallMethod's 'method' and 'format' parameters were missing
the 'const' qualifier before Python 3.4. Hence, we wrap the
function in our own version to avoid errors with string literals.
@@ -209,11 +181,7 @@ gdb_PySys_GetObject (const char *name)
before Python 3.6. Hence, we wrap it in a function to avoid errors
when compiled with -Werror. */
-#ifdef IS_PY3K
# define GDB_PYSYS_SETPATH_CHAR wchar_t
-#else
-# define GDB_PYSYS_SETPATH_CHAR char
-#endif
static inline void
gdb_PySys_SetPath (const GDB_PYSYS_SETPATH_CHAR *path)
@@ -412,6 +380,7 @@ extern enum ext_lang_rc gdbpy_get_matching_xmethod_workers
PyObject *gdbpy_history (PyObject *self, PyObject *args);
PyObject *gdbpy_add_history (PyObject *self, PyObject *args);
+extern PyObject *gdbpy_history_count (PyObject *self, PyObject *args);
PyObject *gdbpy_convenience_variable (PyObject *self, PyObject *args);
PyObject *gdbpy_set_convenience_variable (PyObject *self, PyObject *args);
PyObject *gdbpy_breakpoints (PyObject *, PyObject *);
@@ -496,6 +465,13 @@ struct symtab_and_line *sal_object_to_symtab_and_line (PyObject *obj);
struct frame_info *frame_object_to_frame_info (PyObject *frame_obj);
struct gdbarch *arch_object_to_gdbarch (PyObject *obj);
+/* Convert Python object OBJ to a program_space pointer. OBJ must be a
+ gdb.Progspace reference. Return nullptr if the gdb.Progspace is not
+ valid (see gdb.Progspace.is_valid), otherwise return the program_space
+ pointer. */
+
+extern struct program_space *progspace_object_to_program_space (PyObject *obj);
+
void gdbpy_initialize_gdb_readline (void);
int gdbpy_initialize_auto_load (void)
CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
@@ -561,6 +537,9 @@ int gdbpy_initialize_membuf ()
CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
int gdbpy_initialize_connection ()
CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
+int gdbpy_initialize_micommands (void)
+ CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
+void gdbpy_finalize_micommands ();
/* A wrapper for PyErr_Fetch that handles reference counting for the
caller. */
@@ -625,14 +604,36 @@ class gdbpy_enter
{
public:
- gdbpy_enter (struct gdbarch *gdbarch, const struct language_defn *language);
+ /* Set the ambient Python architecture to GDBARCH and the language
+ to LANGUAGE. If GDBARCH is nullptr, then the architecture will
+ be computed, when needed, using get_current_arch; see the
+ get_gdbarch method. If LANGUAGE is not nullptr, then the current
+ language at time of construction will be saved (to be restored on
+ destruction), and the current language will be set to
+ LANGUAGE. */
+ explicit gdbpy_enter (struct gdbarch *gdbarch = nullptr,
+ const struct language_defn *language = nullptr);
~gdbpy_enter ();
DISABLE_COPY_AND_ASSIGN (gdbpy_enter);
+ /* Return the current gdbarch, as known to the Python layer. This
+ is either python_gdbarch (which comes from the most recent call
+ to the gdbpy_enter constructor), or, if that is nullptr, the
+ result of get_current_arch. */
+ static struct gdbarch *get_gdbarch ();
+
+ /* Called only during gdb shutdown. This sets python_gdbarch to an
+ acceptable value. */
+ static void finalize ();
+
private:
+ /* The current gdbarch, according to Python. This can be
+ nullptr. */
+ static struct gdbarch *python_gdbarch;
+
struct active_ext_lang_state *m_previous_active;
PyGILState_STATE m_state;
struct gdbarch *m_gdbarch;
@@ -680,9 +681,6 @@ private:
PyThreadState *m_save;
};
-extern struct gdbarch *python_gdbarch;
-extern const struct language_defn *python_language;
-
/* Use this after a TRY_EXCEPT to throw the appropriate Python
exception. */
#define GDB_PY_HANDLE_EXCEPTION(Exception) \
@@ -710,6 +708,17 @@ void gdbpy_print_stack (void);
void gdbpy_print_stack_or_quit ();
void gdbpy_handle_exception () ATTRIBUTE_NORETURN;
+/* A wrapper around calling 'error'. Prefixes the error message with an
+ 'Error occurred in Python' string. Use this in C++ code if we spot
+ something wrong with an object returned from Python code. The prefix
+ string gives the user a hint that the mistake is within Python code,
+ rather than some other part of GDB.
+
+ This always calls error, and never returns. */
+
+void gdbpy_error (const char *fmt, ...)
+ ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (1, 2);
+
gdbpy_ref<> python_string_to_unicode (PyObject *obj);
gdb::unique_xmalloc_ptr<char> unicode_to_target_string (PyObject *unicode_str);
gdb::unique_xmalloc_ptr<char> python_string_to_target_string (PyObject *obj);
@@ -804,4 +813,13 @@ typedef std::unique_ptr<Py_buffer, Py_buffer_deleter> Py_buffer_up;
extern bool gdbpy_parse_register_id (struct gdbarch *gdbarch,
PyObject *pyo_reg_id, int *reg_num);
+/* Return true if OBJ is a gdb.Architecture object, otherwise, return
+ false. */
+
+extern bool gdbpy_is_architecture (PyObject *obj);
+
+/* Return true if OBJ is a gdb.Progspace object, otherwise, return false. */
+
+extern bool gdbpy_is_progspace (PyObject *obj);
+
#endif /* PYTHON_PYTHON_INTERNAL_H */
diff --git a/gdb/python/python.c b/gdb/python/python.c
index e05b99c0bec..11aaa7ae778 100644
--- a/gdb/python/python.c
+++ b/gdb/python/python.c
@@ -121,6 +121,8 @@ static enum ext_lang_rc gdbpy_before_prompt_hook
(const struct extension_language_defn *, const char *current_gdb_prompt);
static gdb::optional<std::string> gdbpy_colorize
(const std::string &filename, const std::string &contents);
+static gdb::optional<std::string> gdbpy_colorize_disasm
+ (const std::string &content, gdbarch *gdbarch);
/* The interface between gdb proper and loading of python scripts. */
@@ -162,6 +164,8 @@ static const struct extension_language_ops python_extension_ops =
gdbpy_get_matching_xmethod_workers,
gdbpy_colorize,
+
+ gdbpy_colorize_disasm,
};
#endif /* HAVE_PYTHON */
@@ -192,13 +196,12 @@ const struct extension_language_defn extension_language_python =
/* Architecture and language to be used in callbacks from
the Python interpreter. */
-struct gdbarch *python_gdbarch;
-const struct language_defn *python_language;
+struct gdbarch *gdbpy_enter::python_gdbarch;
gdbpy_enter::gdbpy_enter (struct gdbarch *gdbarch,
const struct language_defn *language)
: m_gdbarch (python_gdbarch),
- m_language (python_language)
+ m_language (language == nullptr ? nullptr : current_language)
{
/* We should not ever enter Python unless initialized. */
if (!gdb_python_initialized)
@@ -209,7 +212,8 @@ gdbpy_enter::gdbpy_enter (struct gdbarch *gdbarch,
m_state = PyGILState_Ensure ();
python_gdbarch = gdbarch;
- python_language = language;
+ if (language != nullptr)
+ set_language (language->la_language);
/* Save it and ensure ! PyErr_Occurred () afterwards. */
m_error.emplace ();
@@ -228,12 +232,27 @@ gdbpy_enter::~gdbpy_enter ()
m_error->restore ();
python_gdbarch = m_gdbarch;
- python_language = m_language;
+ if (m_language != nullptr)
+ set_language (m_language->la_language);
restore_active_ext_lang (m_previous_active);
PyGILState_Release (m_state);
}
+struct gdbarch *
+gdbpy_enter::get_gdbarch ()
+{
+ if (python_gdbarch != nullptr)
+ return python_gdbarch;
+ return get_current_arch ();
+}
+
+void
+gdbpy_enter::finalize ()
+{
+ python_gdbarch = target_gdbarch ();
+}
+
/* A helper class to save and restore the GIL, but without touching
the other globals that are handled by gdbpy_enter. */
@@ -298,11 +317,6 @@ eval_python_command (const char *command)
if (v == NULL)
return -1;
-#ifndef IS_PY3K
- if (Py_FlushLine ())
- PyErr_Clear ();
-#endif
-
return 0;
}
@@ -318,7 +332,7 @@ python_interactive_command (const char *arg, int from_tty)
arg = skip_spaces (arg);
- gdbpy_enter enter_py (get_current_arch (), current_language);
+ gdbpy_enter enter_py;
if (arg && *arg)
{
@@ -412,7 +426,7 @@ gdbpy_eval_from_control_command (const struct extension_language_defn *extlang,
if (cmd->body_list_1 != nullptr)
error (_("Invalid \"python\" block structure."));
- gdbpy_enter enter_py (get_current_arch (), current_language);
+ gdbpy_enter enter_py;
std::string script = compute_python_string (cmd->body_list_0.get ());
ret = PyRun_SimpleString (script.c_str ());
@@ -425,7 +439,7 @@ gdbpy_eval_from_control_command (const struct extension_language_defn *extlang,
static void
python_command (const char *arg, int from_tty)
{
- gdbpy_enter enter_py (get_current_arch (), current_language);
+ gdbpy_enter enter_py;
scoped_restore save_async = make_scoped_restore (&current_ui->async, 0);
@@ -556,7 +570,7 @@ gdbpy_parameter (PyObject *self, PyObject *args)
static PyObject *
gdbpy_target_charset (PyObject *self, PyObject *args)
{
- const char *cset = target_charset (python_gdbarch);
+ const char *cset = target_charset (gdbpy_enter::get_gdbarch ());
return PyUnicode_Decode (cset, strlen (cset), host_charset (), NULL);
}
@@ -566,7 +580,17 @@ gdbpy_target_charset (PyObject *self, PyObject *args)
static PyObject *
gdbpy_target_wide_charset (PyObject *self, PyObject *args)
{
- const char *cset = target_wide_charset (python_gdbarch);
+ const char *cset = target_wide_charset (gdbpy_enter::get_gdbarch ());
+
+ return PyUnicode_Decode (cset, strlen (cset), host_charset (), NULL);
+}
+
+/* Implement gdb.host_charset(). */
+
+static PyObject *
+gdbpy_host_charset (PyObject *self, PyObject *args)
+{
+ const char *cset = host_charset ();
return PyUnicode_Decode (cset, strlen (cset), host_charset (), NULL);
}
@@ -661,7 +685,7 @@ execute_gdb_command (PyObject *self, PyObject *args, PyObject *kw)
}
if (to_string)
- return PyString_FromString (to_string_res.c_str ());
+ return PyUnicode_FromString (to_string_res.c_str ());
Py_RETURN_NONE;
}
@@ -807,7 +831,7 @@ gdbpy_rbreak (PyObject *self, PyObject *args, PyObject *kw)
if (p.msymbol.minsym == NULL)
{
- struct symtab *symtab = symbol_symtab (p.symbol);
+ struct symtab *symtab = p.symbol->symtab ();
const char *fullname = symtab_to_fullname (symtab);
symbol_name = fullname;
@@ -857,7 +881,7 @@ gdbpy_decode_line (PyObject *self, PyObject *args)
}
if (arg != NULL)
- location = string_to_event_location_basic (&arg, python_language,
+ location = string_to_event_location_basic (&arg, current_language,
symbol_name_match_type::WILD);
std::vector<symtab_and_line> decoded_sals;
@@ -907,7 +931,7 @@ gdbpy_decode_line (PyObject *self, PyObject *args)
if (arg != NULL && strlen (arg) > 0)
{
- unparsed.reset (PyString_FromString (arg));
+ unparsed.reset (PyUnicode_FromString (arg));
if (unparsed == NULL)
return NULL;
}
@@ -962,7 +986,7 @@ static void
gdbpy_source_script (const struct extension_language_defn *extlang,
FILE *file, const char *filename)
{
- gdbpy_enter enter_py (get_current_arch (), current_language);
+ gdbpy_enter enter_py;
python_run_simple_file (file, filename);
}
@@ -1001,7 +1025,7 @@ struct gdbpy_event
void operator() ()
{
- gdbpy_enter enter_py (get_current_arch (), current_language);
+ gdbpy_enter enter_py;
gdbpy_ref<> call_result (PyObject_CallObject (m_func, NULL));
if (call_result == NULL)
@@ -1050,7 +1074,7 @@ gdbpy_before_prompt_hook (const struct extension_language_defn *extlang,
if (!gdb_python_initialized)
return EXT_LANG_RC_NOP;
- gdbpy_enter enter_py (get_current_arch (), current_language);
+ gdbpy_enter enter_py;
if (!evregpy_no_listeners_p (gdb_py_events.before_prompt)
&& evpy_emit_event (NULL, gdb_py_events.before_prompt) < 0)
@@ -1069,7 +1093,7 @@ gdbpy_before_prompt_hook (const struct extension_language_defn *extlang,
if (PyCallable_Check (hook.get ()))
{
- gdbpy_ref<> current_prompt (PyString_FromString (current_gdb_prompt));
+ gdbpy_ref<> current_prompt (PyUnicode_FromString (current_gdb_prompt));
if (current_prompt == NULL)
{
gdbpy_print_stack ();
@@ -1088,7 +1112,7 @@ gdbpy_before_prompt_hook (const struct extension_language_defn *extlang,
/* Return type should be None, or a String. If it is None,
fall through, we will not set a prompt. If it is a
string, set PROMPT. Anything else, set an exception. */
- if (result != Py_None && ! PyString_Check (result.get ()))
+ if (result != Py_None && !PyUnicode_Check (result.get ()))
{
PyErr_Format (PyExc_RuntimeError,
_("Return from prompt_hook must " \
@@ -1125,13 +1149,19 @@ gdbpy_colorize (const std::string &filename, const std::string &contents)
if (!gdb_python_initialized)
return {};
- gdbpy_enter enter_py (get_current_arch (), current_language);
+ gdbpy_enter enter_py;
- if (gdb_python_module == nullptr
- || !PyObject_HasAttrString (gdb_python_module, "colorize"))
+ gdbpy_ref<> module (PyImport_ImportModule ("gdb.styling"));
+ if (module == nullptr)
+ {
+ gdbpy_print_stack ();
+ return {};
+ }
+
+ if (!PyObject_HasAttrString (module.get (), "colorize"))
return {};
- gdbpy_ref<> hook (PyObject_GetAttrString (gdb_python_module, "colorize"));
+ gdbpy_ref<> hook (PyObject_GetAttrString (module.get (), "colorize"));
if (hook == nullptr)
{
gdbpy_print_stack ();
@@ -1141,19 +1171,30 @@ gdbpy_colorize (const std::string &filename, const std::string &contents)
if (!PyCallable_Check (hook.get ()))
return {};
- gdbpy_ref<> fname_arg (PyString_FromString (filename.c_str ()));
+ gdbpy_ref<> fname_arg (PyUnicode_FromString (filename.c_str ()));
if (fname_arg == nullptr)
{
gdbpy_print_stack ();
return {};
}
- gdbpy_ref<> contents_arg (PyString_FromString (contents.c_str ()));
+
+ /* The pygments library, which is what we currently use for applying
+ styling, is happy to take input as a bytes object, and to figure out
+ the encoding for itself. This removes the need for us to figure out
+ (guess?) at how the content is encoded, which is probably a good
+ thing. */
+ gdbpy_ref<> contents_arg (PyBytes_FromStringAndSize (contents.c_str (),
+ contents.size ()));
if (contents_arg == nullptr)
{
gdbpy_print_stack ();
return {};
}
+ /* Calling gdb.colorize passing in the filename (a string), and the file
+ contents (a bytes object). This function should return either a bytes
+ object, the same contents with styling applied, or None to indicate
+ that no styling should be performed. */
gdbpy_ref<> result (PyObject_CallFunctionObjArgs (hook.get (),
fname_arg.get (),
contents_arg.get (),
@@ -1164,25 +1205,187 @@ gdbpy_colorize (const std::string &filename, const std::string &contents)
return {};
}
- if (!gdbpy_is_string (result.get ()))
+ if (result == Py_None)
+ return {};
+ else if (!PyBytes_Check (result.get ()))
+ {
+ PyErr_SetString (PyExc_TypeError,
+ _("Return value from gdb.colorize should be a bytes object or None."));
+ gdbpy_print_stack ();
+ return {};
+ }
+
+ return std::string (PyBytes_AsString (result.get ()));
+}
+
+/* This is the extension_language_ops.colorize_disasm "method". */
+
+static gdb::optional<std::string>
+gdbpy_colorize_disasm (const std::string &content, gdbarch *gdbarch)
+{
+ if (!gdb_python_initialized)
return {};
- gdbpy_ref<> unic = python_string_to_unicode (result.get ());
- if (unic == nullptr)
+ gdbpy_enter enter_py;
+
+ gdbpy_ref<> module (PyImport_ImportModule ("gdb.styling"));
+ if (module == nullptr)
{
gdbpy_print_stack ();
return {};
}
- gdbpy_ref<> host_str (PyUnicode_AsEncodedString (unic.get (),
- host_charset (),
- nullptr));
- if (host_str == nullptr)
+
+ if (!PyObject_HasAttrString (module.get (), "colorize_disasm"))
+ return {};
+
+ gdbpy_ref<> hook (PyObject_GetAttrString (module.get (),
+ "colorize_disasm"));
+ if (hook == nullptr)
+ {
+ gdbpy_print_stack ();
+ return {};
+ }
+
+ if (!PyCallable_Check (hook.get ()))
+ return {};
+
+ gdbpy_ref<> content_arg (PyBytes_FromString (content.c_str ()));
+ if (content_arg == nullptr)
+ {
+ gdbpy_print_stack ();
+ return {};
+ }
+
+ gdbpy_ref<> gdbarch_arg (gdbarch_to_arch_object (gdbarch));
+ if (gdbarch_arg == nullptr)
{
gdbpy_print_stack ();
return {};
}
- return std::string (PyBytes_AsString (host_str.get ()));
+ gdbpy_ref<> result (PyObject_CallFunctionObjArgs (hook.get (),
+ content_arg.get (),
+ gdbarch_arg.get (),
+ nullptr));
+ if (result == nullptr)
+ {
+ gdbpy_print_stack ();
+ return {};
+ }
+
+ if (result == Py_None)
+ return {};
+
+ if (!PyBytes_Check (result.get ()))
+ {
+ PyErr_SetString (PyExc_TypeError,
+ _("Return value from gdb.colorize_disasm should be a bytes object or None."));
+ gdbpy_print_stack ();
+ return {};
+ }
+
+ return std::string (PyBytes_AsString (result.get ()));
+}
+
+
+
+/* Implement gdb.format_address(ADDR,P_SPACE,ARCH). Provide access to
+ GDB's print_address function from Python. The returned address will
+ have the format '0x..... <symbol+offset>'. */
+
+static PyObject *
+gdbpy_format_address (PyObject *self, PyObject *args, PyObject *kw)
+{
+ static const char *keywords[] =
+ {
+ "address", "progspace", "architecture", nullptr
+ };
+ PyObject *addr_obj = nullptr, *pspace_obj = nullptr, *arch_obj = nullptr;
+ CORE_ADDR addr;
+ struct gdbarch *gdbarch = nullptr;
+ struct program_space *pspace = nullptr;
+
+ if (!gdb_PyArg_ParseTupleAndKeywords (args, kw, "O|OO", keywords,
+ &addr_obj, &pspace_obj, &arch_obj))
+ return nullptr;
+
+ if (get_addr_from_python (addr_obj, &addr) < 0)
+ return nullptr;
+
+ /* If the user passed None for progspace or architecture, then we
+ consider this to mean "the default". Here we replace references to
+ None with nullptr, this means that in the following code we only have
+ to handle the nullptr case. These are only borrowed references, so
+ no decref is required here. */
+ if (pspace_obj == Py_None)
+ pspace_obj = nullptr;
+ if (arch_obj == Py_None)
+ arch_obj = nullptr;
+
+ if (pspace_obj == nullptr && arch_obj == nullptr)
+ {
+ /* Grab both of these from the current inferior, and its associated
+ default architecture. */
+ pspace = current_inferior ()->pspace;
+ gdbarch = current_inferior ()->gdbarch;
+ }
+ else if (arch_obj == nullptr || pspace_obj == nullptr)
+ {
+ /* If the user has only given one of program space or architecture,
+ then don't use the default for the other. Sure we could use the
+ default, but it feels like there's too much scope of mistakes in
+ this case, so better to require the user to provide both
+ arguments. */
+ PyErr_SetString (PyExc_ValueError,
+ _("The architecture and progspace arguments must both be supplied"));
+ return nullptr;
+ }
+ else
+ {
+ /* The user provided an address, program space, and architecture.
+ Just check that these objects are valid. */
+ if (!gdbpy_is_progspace (pspace_obj))
+ {
+ PyErr_SetString (PyExc_TypeError,
+ _("The progspace argument is not a gdb.Progspace object"));
+ return nullptr;
+ }
+
+ pspace = progspace_object_to_program_space (pspace_obj);
+ if (pspace == nullptr)
+ {
+ PyErr_SetString (PyExc_ValueError,
+ _("The progspace argument is not valid"));
+ return nullptr;
+ }
+
+ if (!gdbpy_is_architecture (arch_obj))
+ {
+ PyErr_SetString (PyExc_TypeError,
+ _("The architecture argument is not a gdb.Architecture object"));
+ return nullptr;
+ }
+
+ /* Architectures are never deleted once created, so gdbarch should
+ never come back as nullptr. */
+ gdbarch = arch_object_to_gdbarch (arch_obj);
+ gdb_assert (gdbarch != nullptr);
+ }
+
+ /* By this point we should know the program space and architecture we are
+ going to use. */
+ gdb_assert (pspace != nullptr);
+ gdb_assert (gdbarch != nullptr);
+
+ /* Unfortunately print_address relies on the current program space for
+ its symbol lookup. Temporarily switch now. */
+ scoped_restore_current_program_space restore_progspace;
+ set_current_program_space (pspace);
+
+ /* Format the address, and return it as a string. */
+ string_file buf;
+ print_address (gdbarch, addr, &buf);
+ return PyUnicode_FromString (buf.c_str ());
}
@@ -1210,16 +1413,16 @@ gdbpy_write (PyObject *self, PyObject *args, PyObject *kw)
{
case 1:
{
- fprintf_filtered (gdb_stderr, "%s", arg);
+ gdb_printf (gdb_stderr, "%s", arg);
break;
}
case 2:
{
- fprintf_filtered (gdb_stdlog, "%s", arg);
+ gdb_printf (gdb_stdlog, "%s", arg);
break;
}
default:
- fprintf_filtered (gdb_stdout, "%s", arg);
+ gdb_printf (gdb_stdout, "%s", arg);
}
}
catch (const gdb_exception &except)
@@ -1290,7 +1493,7 @@ gdbpy_print_stack (void)
PyErr_Print ();
/* PyErr_Print doesn't necessarily end output with a newline.
This works because Python's stdout/stderr is fed through
- printf_filtered. */
+ gdb_printf. */
try
{
begin_line ();
@@ -1317,14 +1520,14 @@ gdbpy_print_stack (void)
{
/* An error occurred computing the string representation of the
error message. */
- fprintf_filtered (gdb_stderr,
- _("Error occurred computing Python error" \
- "message.\n"));
+ gdb_printf (gdb_stderr,
+ _("Error occurred computing Python error" \
+ "message.\n"));
PyErr_Clear ();
}
else
- fprintf_filtered (gdb_stderr, "Python Exception %s: %s\n",
- type.get (), msg.get ());
+ gdb_printf (gdb_stderr, "Python Exception %s: %s\n",
+ type.get (), msg.get ());
}
catch (const gdb_exception &except)
{
@@ -1390,7 +1593,7 @@ gdbpy_source_objfile_script (const struct extension_language_defn *extlang,
if (!gdb_python_initialized)
return;
- gdbpy_enter enter_py (objfile->arch (), current_language);
+ gdbpy_enter enter_py (objfile->arch ());
scoped_restore restire_current_objfile
= make_scoped_restore (&gdbpy_current_objfile, objfile);
@@ -1411,7 +1614,7 @@ gdbpy_execute_objfile_script (const struct extension_language_defn *extlang,
if (!gdb_python_initialized)
return;
- gdbpy_enter enter_py (objfile->arch (), current_language);
+ gdbpy_enter enter_py (objfile->arch ());
scoped_restore restire_current_objfile
= make_scoped_restore (&gdbpy_current_objfile, objfile);
@@ -1443,7 +1646,7 @@ gdbpy_start_type_printers (const struct extension_language_defn *extlang,
if (!gdb_python_initialized)
return;
- gdbpy_enter enter_py (get_current_arch (), current_language);
+ gdbpy_enter enter_py;
gdbpy_ref<> type_module (PyImport_ImportModule ("gdb.types"));
if (type_module == NULL)
@@ -1488,7 +1691,7 @@ gdbpy_apply_type_printers (const struct extension_language_defn *extlang,
if (!gdb_python_initialized)
return EXT_LANG_RC_NOP;
- gdbpy_enter enter_py (get_current_arch (), current_language);
+ gdbpy_enter enter_py;
gdbpy_ref<> type_obj (type_to_type_object (type));
if (type_obj == NULL)
@@ -1551,7 +1754,7 @@ gdbpy_free_type_printers (const struct extension_language_defn *extlang,
if (!gdb_python_initialized)
return;
- gdbpy_enter enter_py (get_current_arch (), current_language);
+ gdbpy_enter enter_py;
Py_DECREF (printers);
}
@@ -1593,8 +1796,8 @@ static void
show_python_ignore_environment (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Python's ignore-environment setting is %s.\n"),
- value);
+ gdb_printf (file, _("Python's ignore-environment setting is %s.\n"),
+ value);
}
/* Implement 'set python ignore-environment'. This sets Python's internal
@@ -1627,13 +1830,13 @@ show_python_dont_write_bytecode (struct ui_file *file, int from_tty,
= (python_ignore_environment
|| getenv ("PYTHONDONTWRITEBYTECODE") == nullptr) ? "off" : "on";
- fprintf_filtered (file,
- _("Python's dont-write-bytecode setting is %s (currently %s).\n"),
- value, auto_string);
+ gdb_printf (file,
+ _("Python's dont-write-bytecode setting is %s (currently %s).\n"),
+ value, auto_string);
}
else
- fprintf_filtered (file, _("Python's dont-write-bytecode setting is %s.\n"),
- value);
+ gdb_printf (file, _("Python's dont-write-bytecode setting is %s.\n"),
+ value);
}
/* Implement 'set python dont-write-bytecode'. This sets Python's internal
@@ -1686,8 +1889,9 @@ finalize_python (void *ignore)
previous_active = set_active_ext_lang (&extension_language_python);
(void) PyGILState_Ensure ();
- python_gdbarch = target_gdbarch ();
- python_language = current_language;
+ gdbpy_enter::finalize ();
+
+ gdbpy_finalize_micommands ();
Py_Finalize ();
@@ -1695,7 +1899,6 @@ finalize_python (void *ignore)
restore_active_ext_lang (previous_active);
}
-#ifdef IS_PY3K
static struct PyModuleDef python_GdbModuleDef =
{
PyModuleDef_HEAD_INIT,
@@ -1718,7 +1921,6 @@ init__gdb_module (void)
{
return PyModule_Create (&python_GdbModuleDef);
}
-#endif
/* Emit a gdb.GdbExitingEvent, return a negative value if there are any
errors, otherwise, return 0. */
@@ -1746,7 +1948,7 @@ gdbpy_gdb_exiting (int exit_code)
if (!gdb_python_initialized)
return;
- gdbpy_enter enter_py (python_gdbarch, python_language);
+ gdbpy_enter enter_py;
if (emit_exiting_event (exit_code) < 0)
gdbpy_print_stack ();
@@ -1765,7 +1967,6 @@ do_start_initialization ()
gdb::unique_xmalloc_ptr<char> progname
(concat (ldirname (python_libdir.c_str ()).c_str (), SLASH_STRING, "bin",
SLASH_STRING, "python", (char *) NULL));
-#ifdef IS_PY3K
/* Python documentation indicates that the memory given
to Py_SetProgramName cannot be freed. However, it seems that
at least Python 3.7.4 Py_SetProgramName takes a copy of the
@@ -1794,9 +1995,6 @@ do_start_initialization ()
/* Define _gdb as a built-in module. */
PyImport_AppendInittab ("_gdb", init__gdb_module);
-#else
- Py_SetProgramName (progname.release ());
-#endif
#endif
Py_Initialize ();
@@ -1807,11 +2005,7 @@ do_start_initialization ()
PyEval_InitThreads ();
#endif
-#ifdef IS_PY3K
gdb_module = PyImport_ImportModule ("_gdb");
-#else
- gdb_module = Py_InitModule ("_gdb", python_GdbMethods);
-#endif
if (gdb_module == NULL)
return false;
@@ -1877,7 +2071,8 @@ do_start_initialization ()
|| gdbpy_initialize_unwind () < 0
|| gdbpy_initialize_membuf () < 0
|| gdbpy_initialize_connection () < 0
- || gdbpy_initialize_tui () < 0)
+ || gdbpy_initialize_tui () < 0
+ || gdbpy_initialize_micommands () < 0)
return false;
#define GDB_PY_DEFINE_EVENT_TYPE(name, py_name, doc, base) \
@@ -1886,22 +2081,22 @@ do_start_initialization ()
#include "py-event-types.def"
#undef GDB_PY_DEFINE_EVENT_TYPE
- gdbpy_to_string_cst = PyString_FromString ("to_string");
+ gdbpy_to_string_cst = PyUnicode_FromString ("to_string");
if (gdbpy_to_string_cst == NULL)
return false;
- gdbpy_children_cst = PyString_FromString ("children");
+ gdbpy_children_cst = PyUnicode_FromString ("children");
if (gdbpy_children_cst == NULL)
return false;
- gdbpy_display_hint_cst = PyString_FromString ("display_hint");
+ gdbpy_display_hint_cst = PyUnicode_FromString ("display_hint");
if (gdbpy_display_hint_cst == NULL)
return false;
- gdbpy_doc_cst = PyString_FromString ("__doc__");
+ gdbpy_doc_cst = PyUnicode_FromString ("__doc__");
if (gdbpy_doc_cst == NULL)
return false;
- gdbpy_enabled_cst = PyString_FromString ("enabled");
+ gdbpy_enabled_cst = PyUnicode_FromString ("enabled");
if (gdbpy_enabled_cst == NULL)
return false;
- gdbpy_value_cst = PyString_FromString ("value");
+ gdbpy_value_cst = PyUnicode_FromString ("value");
if (gdbpy_value_cst == NULL)
return false;
@@ -2111,16 +2306,12 @@ do_initialize (const struct extension_language_defn *extlang)
/* If sys.path is not defined yet, define it first. */
if (!(sys_path && PyList_Check (sys_path)))
{
-#ifdef IS_PY3K
PySys_SetPath (L"");
-#else
- PySys_SetPath ("");
-#endif
sys_path = PySys_GetObject ("path");
}
if (sys_path && PyList_Check (sys_path))
{
- gdbpy_ref<> pythondir (PyString_FromString (gdb_pythondir.c_str ()));
+ gdbpy_ref<> pythondir (PyUnicode_FromString (gdb_pythondir.c_str ()));
if (pythondir == NULL || PyList_Insert (sys_path, 0, pythondir.get ()))
return false;
}
@@ -2164,7 +2355,7 @@ gdbpy_initialize (const struct extension_language_defn *extlang)
if (!do_start_initialization () && PyErr_Occurred ())
gdbpy_print_stack ();
- gdbpy_enter enter_py (get_current_arch (), current_language);
+ gdbpy_enter enter_py;
if (!do_initialize (extlang))
{
@@ -2188,6 +2379,8 @@ PyMethodDef python_GdbMethods[] =
"Get a value from history" },
{ "add_history", gdbpy_add_history, METH_VARARGS,
"Add a value to the value history list" },
+ { "history_count", gdbpy_history_count, METH_NOARGS,
+ "Return an integer, the number of values in GDB's value history" },
{ "execute", (PyCFunction) execute_gdb_command, METH_VARARGS | METH_KEYWORDS,
"execute (command [, from_tty] [, to_string]) -> [String]\n\
Evaluate command, a string, as a gdb CLI command. Optionally returns\n\
@@ -2281,6 +2474,9 @@ Return the name of the current target charset." },
{ "target_wide_charset", gdbpy_target_wide_charset, METH_NOARGS,
"target_wide_charset () -> string.\n\
Return the name of the current target wide charset." },
+ { "host_charset", gdbpy_host_charset, METH_NOARGS,
+ "host_charset () -> string.\n\
+Return the name of the current host charset." },
{ "rbreak", (PyCFunction) gdbpy_rbreak, METH_VARARGS | METH_KEYWORDS,
"rbreak (Regex) -> List.\n\
Return a Tuple containing gdb.Breakpoint objects that match the given Regex." },
@@ -2331,6 +2527,13 @@ Return a list of all the architecture names GDB understands." },
"connections () -> List.\n\
Return a list of gdb.TargetConnection objects." },
+ { "format_address", (PyCFunction) gdbpy_format_address,
+ METH_VARARGS | METH_KEYWORDS,
+ "format_address (ADDRESS, PROG_SPACE, ARCH) -> String.\n\
+Format ADDRESS, an address within PROG_SPACE, a gdb.Progspace, using\n\
+ARCH, a gdb.Architecture to determine the address size. The format of\n\
+the returned string is 'ADDRESS <SYMBOL+OFFSET>' without the quotes." },
+
{NULL, NULL, 0, NULL}
};
diff --git a/gdb/ravenscar-thread.c b/gdb/ravenscar-thread.c
index 5f040cece07..aae6e397327 100644
--- a/gdb/ravenscar-thread.c
+++ b/gdb/ravenscar-thread.c
@@ -120,12 +120,16 @@ struct ravenscar_thread_target final : public target_ops
ptid_t get_ada_task_ptid (long lwp, ULONGEST thread) override;
- struct btrace_target_info *enable_btrace (ptid_t ptid,
+ struct btrace_target_info *enable_btrace (thread_info *tp,
const struct btrace_config *conf)
override
{
- ptid = get_base_thread_from_ravenscar_task (ptid);
- return beneath ()->enable_btrace (ptid, conf);
+ process_stratum_target *proc_target
+ = as_process_stratum_target (this->beneath ());
+ ptid_t underlying = get_base_thread_from_ravenscar_task (tp->ptid);
+ tp = find_thread_ptid (proc_target, underlying);
+
+ return beneath ()->enable_btrace (tp, conf);
}
void mourn_inferior () override;
@@ -357,7 +361,7 @@ get_running_thread_id (int cpu)
return 0;
object_size = TYPE_LENGTH (builtin_type_void_data_ptr);
- object_addr = (BMSYMBOL_VALUE_ADDRESS (object_msym)
+ object_addr = (object_msym.value_address ()
+ (cpu - 1) * object_size);
buf_size = object_size;
buf = (gdb_byte *) alloca (buf_size);
@@ -699,10 +703,10 @@ show_ravenscar_task_switching_command (struct ui_file *file, int from_tty,
const char *value)
{
if (ravenscar_task_support)
- fprintf_filtered (file, _("\
+ gdb_printf (file, _("\
Support for Ravenscar task/thread switching is enabled\n"));
else
- fprintf_filtered (file, _("\
+ gdb_printf (file, _("\
Support for Ravenscar task/thread switching is disabled\n"));
}
diff --git a/gdb/record-btrace.c b/gdb/record-btrace.c
index c659d68e444..373d82b8b99 100644
--- a/gdb/record-btrace.c
+++ b/gdb/record-btrace.c
@@ -211,8 +211,8 @@ static struct cmd_list_element *set_record_btrace_cpu_cmdlist;
do \
{ \
if (record_debug != 0) \
- fprintf_unfiltered (gdb_stdlog, \
- "[record-btrace] " msg "\n", ##args); \
+ gdb_printf (gdb_stdlog, \
+ "[record-btrace] " msg "\n", ##args); \
} \
while (0)
@@ -279,10 +279,10 @@ require_btrace (void)
return &tp->btrace;
}
-/* Enable branch tracing for one thread. Warn on errors. */
+/* The new thread observer. */
static void
-record_btrace_enable_warn (struct thread_info *tp)
+record_btrace_on_new_thread (struct thread_info *tp)
{
/* Ignore this thread if its inferior is not recorded by us. */
target_ops *rec = tp->inf->target_at (record_stratum);
@@ -306,7 +306,7 @@ record_btrace_auto_enable (void)
{
DEBUG ("attach thread observer");
- gdb::observers::new_thread.attach (record_btrace_enable_warn,
+ gdb::observers::new_thread.attach (record_btrace_on_new_thread,
record_btrace_thread_observer_token,
"record-btrace");
}
@@ -506,7 +506,7 @@ record_btrace_print_bts_conf (const struct btrace_config_bts *conf)
if (size > 0)
{
suffix = record_btrace_adjust_size (&size);
- printf_filtered (_("Buffer size: %u%s.\n"), size, suffix);
+ gdb_printf (_("Buffer size: %u%s.\n"), size, suffix);
}
}
@@ -522,7 +522,7 @@ record_btrace_print_pt_conf (const struct btrace_config_pt *conf)
if (size > 0)
{
suffix = record_btrace_adjust_size (&size);
- printf_filtered (_("Buffer size: %u%s.\n"), size, suffix);
+ gdb_printf (_("Buffer size: %u%s.\n"), size, suffix);
}
}
@@ -531,8 +531,8 @@ record_btrace_print_pt_conf (const struct btrace_config_pt *conf)
static void
record_btrace_print_conf (const struct btrace_config *conf)
{
- printf_filtered (_("Recording format: %s.\n"),
- btrace_format_string (conf->format));
+ gdb_printf (_("Recording format: %s.\n"),
+ btrace_format_string (conf->format));
switch (conf->format)
{
@@ -602,14 +602,14 @@ record_btrace_target::info_record ()
gaps = btinfo->ngaps;
}
- printf_filtered (_("Recorded %u instructions in %u functions (%u gaps) "
- "for thread %s (%s).\n"), insns, calls, gaps,
- print_thread_id (tp),
- target_pid_to_str (tp->ptid).c_str ());
+ gdb_printf (_("Recorded %u instructions in %u functions (%u gaps) "
+ "for thread %s (%s).\n"), insns, calls, gaps,
+ print_thread_id (tp),
+ target_pid_to_str (tp->ptid).c_str ());
if (btrace_is_replaying (tp))
- printf_filtered (_("Replay in progress. At instruction %u.\n"),
- btrace_insn_number (btinfo->replay));
+ gdb_printf (_("Replay in progress. At instruction %u.\n"),
+ btrace_insn_number (btinfo->replay));
}
/* Print a decode error. */
@@ -713,7 +713,7 @@ btrace_find_line_range (CORE_ADDR pc)
if (symtab == NULL)
return btrace_mk_line_range (NULL, 0, 0);
- ltable = SYMTAB_LINETABLE (symtab);
+ ltable = symtab->linetable ();
if (ltable == NULL)
return btrace_mk_line_range (symtab, 0, 0);
@@ -938,9 +938,9 @@ record_btrace_target::insn_history (int size, gdb_disassembly_flags flags)
else
{
if (size < 0)
- printf_filtered (_("At the start of the branch trace record.\n"));
+ gdb_printf (_("At the start of the branch trace record.\n"));
else
- printf_filtered (_("At the end of the branch trace record.\n"));
+ gdb_printf (_("At the end of the branch trace record.\n"));
}
btrace_set_insn_history (btinfo, &begin, &end);
@@ -1067,7 +1067,7 @@ btrace_compute_src_line_range (const struct btrace_function *bfun,
if (sym == NULL)
goto out;
- symtab = symbol_symtab (sym);
+ symtab = sym->symtab ();
for (const btrace_insn &insn : bfun->insn)
{
@@ -1100,7 +1100,7 @@ btrace_call_history_src_line (struct ui_out *uiout,
return;
uiout->field_string ("file",
- symtab_to_filename_for_display (symbol_symtab (sym)),
+ symtab_to_filename_for_display (sym->symtab ()),
file_name_style.style ());
btrace_compute_src_line_range (bfun, &begin, &end);
@@ -1295,9 +1295,9 @@ record_btrace_target::call_history (int size, record_print_flags flags)
else
{
if (size < 0)
- printf_filtered (_("At the start of the branch trace record.\n"));
+ gdb_printf (_("At the start of the branch trace record.\n"));
else
- printf_filtered (_("At the end of the branch trace record.\n"));
+ gdb_printf (_("At the end of the branch trace record.\n"));
}
btrace_set_call_history (btinfo, &begin, &end);
@@ -1962,7 +1962,7 @@ record_btrace_resume_thread (struct thread_info *tp,
struct btrace_thread_info *btinfo;
DEBUG ("resuming thread %s (%s): %x (%s)", print_thread_id (tp),
- target_pid_to_str (tp->ptid).c_str (), flag,
+ tp->ptid.to_string ().c_str (), flag,
btrace_thread_flag_to_str (flag));
btinfo = &tp->btrace;
@@ -2125,7 +2125,7 @@ record_btrace_target::resume (ptid_t ptid, int step, enum gdb_signal signal)
{
enum btrace_thread_flag flag, cflag;
- DEBUG ("resume %s: %s%s", target_pid_to_str (ptid).c_str (),
+ DEBUG ("resume %s: %s%s", ptid.to_string ().c_str (),
::execution_direction == EXEC_REVERSE ? "reverse-" : "",
step ? "step" : "cont");
@@ -2205,7 +2205,7 @@ record_btrace_cancel_resume (struct thread_info *tp)
DEBUG ("cancel resume thread %s (%s): %x (%s)",
print_thread_id (tp),
- target_pid_to_str (tp->ptid).c_str (), flags.raw (),
+ tp->ptid.to_string ().c_str (), flags.raw (),
btrace_thread_flag_to_str (flags));
tp->btrace.flags &= ~(BTHR_MOVE | BTHR_STOP);
@@ -2431,7 +2431,7 @@ record_btrace_step_thread (struct thread_info *tp)
btinfo->flags &= ~(BTHR_MOVE | BTHR_STOP);
DEBUG ("stepping thread %s (%s): %x (%s)", print_thread_id (tp),
- target_pid_to_str (tp->ptid).c_str (), flags.raw (),
+ tp->ptid.to_string ().c_str (), flags.raw (),
btrace_thread_flag_to_str (flags));
/* We can't step without an execution history. */
@@ -2519,7 +2519,7 @@ record_btrace_target::wait (ptid_t ptid, struct target_waitstatus *status,
/* Clear this, if needed we'll re-mark it below. */
clear_async_event_handler (record_btrace_async_inferior_event_handler);
- DEBUG ("wait %s (0x%x)", target_pid_to_str (ptid).c_str (),
+ DEBUG ("wait %s (0x%x)", ptid.to_string ().c_str (),
(unsigned) options);
/* As long as we're not replaying, just forward the request. */
@@ -2539,7 +2539,7 @@ record_btrace_target::wait (ptid_t ptid, struct target_waitstatus *status,
{
*status = btrace_step_no_resumed ();
- DEBUG ("wait ended by %s: %s", target_pid_to_str (null_ptid).c_str (),
+ DEBUG ("wait ended by %s: %s", null_ptid.to_string ().c_str (),
status->to_string ().c_str ());
return null_ptid;
@@ -2630,7 +2630,7 @@ record_btrace_target::wait (ptid_t ptid, struct target_waitstatus *status,
DEBUG ("wait ended by thread %s (%s): %s",
print_thread_id (eventing),
- target_pid_to_str (eventing->ptid).c_str (),
+ eventing->ptid.to_string ().c_str (),
status->to_string ().c_str ());
return eventing->ptid;
@@ -2641,7 +2641,7 @@ record_btrace_target::wait (ptid_t ptid, struct target_waitstatus *status,
void
record_btrace_target::stop (ptid_t ptid)
{
- DEBUG ("stop %s", target_pid_to_str (ptid).c_str ());
+ DEBUG ("stop %s", ptid.to_string ().c_str ());
/* As long as we're not replaying, just forward the request. */
if ((::execution_direction != EXEC_REVERSE)
@@ -2956,8 +2956,8 @@ static void
cmd_show_replay_memory_access (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Replay memory access is %s.\n"),
- replay_memory_access);
+ gdb_printf (file, _("Replay memory access is %s.\n"),
+ replay_memory_access);
}
/* The "set record btrace cpu none" command. */
@@ -3037,11 +3037,11 @@ cmd_show_record_btrace_cpu (const char *args, int from_tty)
switch (record_btrace_cpu_state)
{
case CS_AUTO:
- printf_filtered (_("btrace cpu is 'auto'.\n"));
+ gdb_printf (_("btrace cpu is 'auto'.\n"));
return;
case CS_NONE:
- printf_filtered (_("btrace cpu is 'none'.\n"));
+ gdb_printf (_("btrace cpu is 'none'.\n"));
return;
case CS_CPU:
@@ -3049,14 +3049,14 @@ cmd_show_record_btrace_cpu (const char *args, int from_tty)
{
case CV_INTEL:
if (record_btrace_cpu.stepping == 0)
- printf_filtered (_("btrace cpu is 'intel: %u/%u'.\n"),
- record_btrace_cpu.family,
- record_btrace_cpu.model);
+ gdb_printf (_("btrace cpu is 'intel: %u/%u'.\n"),
+ record_btrace_cpu.family,
+ record_btrace_cpu.model);
else
- printf_filtered (_("btrace cpu is 'intel: %u/%u/%u'.\n"),
- record_btrace_cpu.family,
- record_btrace_cpu.model,
- record_btrace_cpu.stepping);
+ gdb_printf (_("btrace cpu is 'intel: %u/%u/%u'.\n"),
+ record_btrace_cpu.family,
+ record_btrace_cpu.model,
+ record_btrace_cpu.stepping);
return;
}
}
@@ -3071,8 +3071,8 @@ show_record_bts_buffer_size_value (struct ui_file *file, int from_tty,
struct cmd_list_element *c,
const char *value)
{
- fprintf_filtered (file, _("The record/replay bts buffer size is %s.\n"),
- value);
+ gdb_printf (file, _("The record/replay bts buffer size is %s.\n"),
+ value);
}
/* The "record pt buffer-size" show value function. */
@@ -3082,8 +3082,8 @@ show_record_pt_buffer_size_value (struct ui_file *file, int from_tty,
struct cmd_list_element *c,
const char *value)
{
- fprintf_filtered (file, _("The record/replay pt buffer size is %s.\n"),
- value);
+ gdb_printf (file, _("The record/replay pt buffer size is %s.\n"),
+ value);
}
/* Initialize btrace commands. */
diff --git a/gdb/record-full.c b/gdb/record-full.c
index 76b21523853..38e021529c7 100644
--- a/gdb/record-full.c
+++ b/gdb/record-full.c
@@ -565,9 +565,9 @@ static void
record_full_arch_list_add (struct record_full_entry *rec)
{
if (record_debug > 1)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: record_full_arch_list_add %s.\n",
- host_address_to_string (rec));
+ gdb_printf (gdb_stdlog,
+ "Process record: record_full_arch_list_add %s.\n",
+ host_address_to_string (rec));
if (record_full_arch_list_tail)
{
@@ -612,10 +612,10 @@ record_full_arch_list_add_reg (struct regcache *regcache, int regnum)
struct record_full_entry *rec;
if (record_debug > 1)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: add register num = %d to "
- "record list.\n",
- regnum);
+ gdb_printf (gdb_stdlog,
+ "Process record: add register num = %d to "
+ "record list.\n",
+ regnum);
rec = record_full_reg_alloc (regcache, regnum);
@@ -635,10 +635,10 @@ record_full_arch_list_add_mem (CORE_ADDR addr, int len)
struct record_full_entry *rec;
if (record_debug > 1)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: add mem addr = %s len = %d to "
- "record list.\n",
- paddress (target_gdbarch (), addr), len);
+ gdb_printf (gdb_stdlog,
+ "Process record: add mem addr = %s len = %d to "
+ "record list.\n",
+ paddress (target_gdbarch (), addr), len);
if (!addr) /* FIXME: Why? Some arch must permit it... */
return 0;
@@ -666,8 +666,8 @@ record_full_arch_list_add_end (void)
struct record_full_entry *rec;
if (record_debug > 1)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: add end to arch list.\n");
+ gdb_printf (gdb_stdlog,
+ "Process record: add end to arch list.\n");
rec = record_full_end_alloc ();
rec->u.end.sigval = GDB_SIGNAL_0;
@@ -824,11 +824,11 @@ record_full_exec_insn (struct regcache *regcache,
gdb::byte_vector reg (entry->u.reg.len);
if (record_debug > 1)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: record_full_reg %s to "
- "inferior num = %d.\n",
- host_address_to_string (entry),
- entry->u.reg.num);
+ gdb_printf (gdb_stdlog,
+ "Process record: record_full_reg %s to "
+ "inferior num = %d.\n",
+ host_address_to_string (entry),
+ entry->u.reg.num);
regcache->cooked_read (entry->u.reg.num, reg.data ());
regcache->cooked_write (entry->u.reg.num, record_full_get_loc (entry));
@@ -844,12 +844,12 @@ record_full_exec_insn (struct regcache *regcache,
gdb::byte_vector mem (entry->u.mem.len);
if (record_debug > 1)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: record_full_mem %s to "
- "inferior addr = %s len = %d.\n",
- host_address_to_string (entry),
- paddress (gdbarch, entry->u.mem.addr),
- entry->u.mem.len);
+ gdb_printf (gdb_stdlog,
+ "Process record: record_full_mem %s to "
+ "inferior addr = %s len = %d.\n",
+ host_address_to_string (entry),
+ paddress (gdbarch, entry->u.mem.addr),
+ entry->u.mem.len);
if (record_read_memory (gdbarch,
entry->u.mem.addr, mem.data (),
@@ -934,7 +934,7 @@ static void
record_full_open_1 (const char *name, int from_tty)
{
if (record_debug)
- fprintf_unfiltered (gdb_stdlog, "Process record: record_full_open_1\n");
+ gdb_printf (gdb_stdlog, "Process record: record_full_open_1\n");
/* check exec */
if (!target_has_execution ())
@@ -958,7 +958,7 @@ static void
record_full_open (const char *name, int from_tty)
{
if (record_debug)
- fprintf_unfiltered (gdb_stdlog, "Process record: record_full_open\n");
+ gdb_printf (gdb_stdlog, "Process record: record_full_open\n");
record_preopen ();
@@ -991,7 +991,7 @@ record_full_base_target::close ()
struct record_full_core_buf_entry *entry;
if (record_debug)
- fprintf_unfiltered (gdb_stdlog, "Process record: record_full_close\n");
+ gdb_printf (gdb_stdlog, "Process record: record_full_close\n");
record_full_list_release (record_full_list);
@@ -1095,11 +1095,6 @@ record_full_target::resume (ptid_t ptid, int step, enum gdb_signal signal)
this->beneath ()->resume (ptid, step, signal);
}
-
- /* We are about to start executing the inferior (or simulate it),
- let's register it with the event loop. */
- if (target_can_async_p ())
- target_async (1);
}
static int record_full_get_sig = 0;
@@ -1110,7 +1105,7 @@ static void
record_full_sig_handler (int signo)
{
if (record_debug)
- fprintf_unfiltered (gdb_stdlog, "Process record: get a signal\n");
+ gdb_printf (gdb_stdlog, "Process record: get a signal\n");
/* It will break the running inferior in replay mode. */
record_full_resume_step = 1;
@@ -1142,13 +1137,13 @@ record_full_wait_1 (struct target_ops *ops,
= record_full_gdb_operation_disable_set ();
if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: record_full_wait "
- "record_full_resume_step = %d, "
- "record_full_resumed = %d, direction=%s\n",
- record_full_resume_step, record_full_resumed,
- record_full_execution_dir == EXEC_FORWARD
- ? "forward" : "reverse");
+ gdb_printf (gdb_stdlog,
+ "Process record: record_full_wait "
+ "record_full_resume_step = %d, "
+ "record_full_resumed = %d, direction=%s\n",
+ record_full_resume_step, record_full_resumed,
+ record_full_execution_dir == EXEC_FORWARD
+ ? "forward" : "reverse");
if (!record_full_resumed)
{
@@ -1185,9 +1180,9 @@ record_full_wait_1 (struct target_ops *ops,
if (status->kind () == TARGET_WAITKIND_IGNORE)
{
if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: record_full_wait "
- "target beneath not done yet\n");
+ gdb_printf (gdb_stdlog,
+ "Process record: record_full_wait "
+ "target beneath not done yet\n");
return ret;
}
@@ -1259,10 +1254,10 @@ record_full_wait_1 (struct target_ops *ops,
}
if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: record_full_wait "
- "issuing one more step in the "
- "target beneath\n");
+ gdb_printf (gdb_stdlog,
+ "Process record: record_full_wait "
+ "issuing one more step in the "
+ "target beneath\n");
ops->beneath ()->resume (ptid, step, GDB_SIGNAL_0);
proc_target->commit_resumed_state = true;
proc_target->commit_resumed ();
@@ -1303,9 +1298,9 @@ record_full_wait_1 (struct target_ops *ops,
&record_full_stop_reason))
{
if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: break at %s.\n",
- paddress (gdbarch, tmp_pc));
+ gdb_printf (gdb_stdlog,
+ "Process record: break at %s.\n",
+ paddress (gdbarch, tmp_pc));
goto replay_out;
}
}
@@ -1347,7 +1342,7 @@ record_full_wait_1 (struct target_ops *ops,
if (record_full_list->type == record_full_end)
{
if (record_debug > 1)
- fprintf_unfiltered
+ gdb_printf
(gdb_stdlog,
"Process record: record_full_end %s to "
"inferior.\n",
@@ -1371,8 +1366,8 @@ record_full_wait_1 (struct target_ops *ops,
if (record_full_resume_step)
{
if (record_debug > 1)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: step.\n");
+ gdb_printf (gdb_stdlog,
+ "Process record: step.\n");
continue_flag = 0;
}
@@ -1382,10 +1377,10 @@ record_full_wait_1 (struct target_ops *ops,
(aspace, tmp_pc, &record_full_stop_reason))
{
if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: break "
- "at %s.\n",
- paddress (gdbarch, tmp_pc));
+ gdb_printf (gdb_stdlog,
+ "Process record: break "
+ "at %s.\n",
+ paddress (gdbarch, tmp_pc));
continue_flag = 0;
}
@@ -1394,9 +1389,9 @@ record_full_wait_1 (struct target_ops *ops,
== TARGET_STOPPED_BY_WATCHPOINT)
{
if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: hit hw "
- "watchpoint.\n");
+ gdb_printf (gdb_stdlog,
+ "Process record: hit hw "
+ "watchpoint.\n");
continue_flag = 0;
}
/* Check target signal */
@@ -1663,18 +1658,18 @@ record_full_target::xfer_partial (enum target_object object,
{
record_full_list_release (record_full_arch_list_tail);
if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: failed to record "
- "execution log.");
+ gdb_printf (gdb_stdlog,
+ "Process record: failed to record "
+ "execution log.");
return TARGET_XFER_E_IO;
}
if (record_full_arch_list_add_end ())
{
record_full_list_release (record_full_arch_list_tail);
if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: failed to record "
- "execution log.");
+ gdb_printf (gdb_stdlog,
+ "Process record: failed to record "
+ "execution log.");
return TARGET_XFER_E_IO;
}
record_full_list->next = record_full_arch_list_head;
@@ -1847,11 +1842,11 @@ record_full_base_target::get_bookmark (const char *args, int from_tty)
if (record_debug)
{
if (ret)
- fprintf_unfiltered (gdb_stdlog,
- "record_full_get_bookmark returns %s\n", ret);
+ gdb_printf (gdb_stdlog,
+ "record_full_get_bookmark returns %s\n", ret);
else
- fprintf_unfiltered (gdb_stdlog,
- "record_full_get_bookmark returns NULL\n");
+ gdb_printf (gdb_stdlog,
+ "record_full_get_bookmark returns NULL\n");
}
return (gdb_byte *) ret;
}
@@ -1865,8 +1860,8 @@ record_full_base_target::goto_bookmark (const gdb_byte *raw_bookmark,
const char *bookmark = (const char *) raw_bookmark;
if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "record_full_goto_bookmark receives %s\n", bookmark);
+ gdb_printf (gdb_stdlog,
+ "record_full_goto_bookmark receives %s\n", bookmark);
std::string name_holder;
if (bookmark[0] == '\'' || bookmark[0] == '\"')
@@ -1901,9 +1896,9 @@ record_full_base_target::info_record ()
struct record_full_entry *p;
if (RECORD_FULL_IS_REPLAY)
- printf_filtered (_("Replay mode:\n"));
+ gdb_printf (_("Replay mode:\n"));
else
- printf_filtered (_("Record mode:\n"));
+ gdb_printf (_("Record mode:\n"));
/* Find entry for first actual instruction in the log. */
for (p = record_full_first.next;
@@ -1915,28 +1910,28 @@ record_full_base_target::info_record ()
if (p != NULL && p->type == record_full_end)
{
/* Display instruction number for first instruction in the log. */
- printf_filtered (_("Lowest recorded instruction number is %s.\n"),
- pulongest (p->u.end.insn_num));
+ gdb_printf (_("Lowest recorded instruction number is %s.\n"),
+ pulongest (p->u.end.insn_num));
/* If in replay mode, display where we are in the log. */
if (RECORD_FULL_IS_REPLAY)
- printf_filtered (_("Current instruction number is %s.\n"),
- pulongest (record_full_list->u.end.insn_num));
+ gdb_printf (_("Current instruction number is %s.\n"),
+ pulongest (record_full_list->u.end.insn_num));
/* Display instruction number for last instruction in the log. */
- printf_filtered (_("Highest recorded instruction number is %s.\n"),
- pulongest (record_full_insn_count));
+ gdb_printf (_("Highest recorded instruction number is %s.\n"),
+ pulongest (record_full_insn_count));
/* Display log count. */
- printf_filtered (_("Log contains %u instructions.\n"),
- record_full_insn_num);
+ gdb_printf (_("Log contains %u instructions.\n"),
+ record_full_insn_num);
}
else
- printf_filtered (_("No instructions have been logged.\n"));
+ gdb_printf (_("No instructions have been logged.\n"));
/* Display max log size. */
- printf_filtered (_("Max logged instructions is %u.\n"),
- record_full_insn_max_num);
+ gdb_printf (_("Max logged instructions is %u.\n"),
+ record_full_insn_max_num);
}
bool
@@ -1984,14 +1979,14 @@ record_full_goto_entry (struct record_full_entry *p)
error (_("Already at target insn."));
else if (p->u.end.insn_num > record_full_list->u.end.insn_num)
{
- printf_filtered (_("Go forward to insn number %s\n"),
- pulongest (p->u.end.insn_num));
+ gdb_printf (_("Go forward to insn number %s\n"),
+ pulongest (p->u.end.insn_num));
record_full_goto_insn (p, EXEC_FORWARD);
}
else
{
- printf_filtered (_("Go backward to insn number %s\n"),
- pulongest (p->u.end.insn_num));
+ gdb_printf (_("Go backward to insn number %s\n"),
+ pulongest (p->u.end.insn_num));
record_full_goto_insn (p, EXEC_REVERSE);
}
@@ -2062,11 +2057,6 @@ record_full_core_target::resume (ptid_t ptid, int step,
record_full_resume_step = step;
record_full_resumed = 1;
record_full_execution_dir = ::execution_direction;
-
- /* We are about to start executing the inferior (or simulate it),
- let's register it with the event loop. */
- if (target_can_async_p ())
- target_async (1);
}
/* "kill" method for prec over corefile. */
@@ -2075,7 +2065,7 @@ void
record_full_core_target::kill ()
{
if (record_debug)
- fprintf_unfiltered (gdb_stdlog, "Process record: record_full_core_kill\n");
+ gdb_printf (gdb_stdlog, "Process record: record_full_core_kill\n");
current_inferior ()->unpush_target (this);
}
@@ -2334,18 +2324,18 @@ record_full_restore (void)
gdb_assert (record_full_first.next == NULL);
if (record_debug)
- fprintf_unfiltered (gdb_stdlog, "Restoring recording from core file.\n");
+ gdb_printf (gdb_stdlog, "Restoring recording from core file.\n");
/* Now need to find our special note section. */
osec = bfd_get_section_by_name (core_bfd, "null0");
if (record_debug)
- fprintf_unfiltered (gdb_stdlog, "Find precord section %s.\n",
- osec ? "succeeded" : "failed");
+ gdb_printf (gdb_stdlog, "Find precord section %s.\n",
+ osec ? "succeeded" : "failed");
if (osec == NULL)
return;
osec_size = bfd_section_size (osec);
if (record_debug)
- fprintf_unfiltered (gdb_stdlog, "%s", bfd_section_name (osec));
+ gdb_printf (gdb_stdlog, "%s", bfd_section_name (osec));
/* Check the magic code. */
bfdcore_read (core_bfd, osec, &magic, sizeof (magic), &bfd_offset);
@@ -2353,10 +2343,10 @@ record_full_restore (void)
error (_("Version mis-match or file format error in core file %s."),
bfd_get_filename (core_bfd));
if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- " Reading 4-byte magic cookie "
- "RECORD_FULL_FILE_MAGIC (0x%s)\n",
- phex_nz (netorder32 (magic), 4));
+ gdb_printf (gdb_stdlog,
+ " Reading 4-byte magic cookie "
+ "RECORD_FULL_FILE_MAGIC (0x%s)\n",
+ phex_nz (netorder32 (magic), 4));
/* Restore the entries in recfd into record_full_arch_list_head and
record_full_arch_list_tail. */
@@ -2394,12 +2384,12 @@ record_full_restore (void)
rec->u.reg.len, &bfd_offset);
if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- " Reading register %d (1 "
- "plus %lu plus %d bytes)\n",
- rec->u.reg.num,
- (unsigned long) sizeof (regnum),
- rec->u.reg.len);
+ gdb_printf (gdb_stdlog,
+ " Reading register %d (1 "
+ "plus %lu plus %d bytes)\n",
+ rec->u.reg.num,
+ (unsigned long) sizeof (regnum),
+ rec->u.reg.len);
break;
case record_full_mem: /* mem */
@@ -2420,14 +2410,14 @@ record_full_restore (void)
rec->u.mem.len, &bfd_offset);
if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- " Reading memory %s (1 plus "
- "%lu plus %lu plus %d bytes)\n",
- paddress (get_current_arch (),
- rec->u.mem.addr),
- (unsigned long) sizeof (addr),
- (unsigned long) sizeof (len),
- rec->u.mem.len);
+ gdb_printf (gdb_stdlog,
+ " Reading memory %s (1 plus "
+ "%lu plus %lu plus %d bytes)\n",
+ paddress (get_current_arch (),
+ rec->u.mem.addr),
+ (unsigned long) sizeof (addr),
+ (unsigned long) sizeof (len),
+ rec->u.mem.len);
break;
case record_full_end: /* end */
@@ -2447,13 +2437,13 @@ record_full_restore (void)
rec->u.end.insn_num = count;
record_full_insn_count = count + 1;
if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- " Reading record_full_end (1 + "
- "%lu + %lu bytes), offset == %s\n",
- (unsigned long) sizeof (signal),
- (unsigned long) sizeof (count),
- paddress (get_current_arch (),
- bfd_offset));
+ gdb_printf (gdb_stdlog,
+ " Reading record_full_end (1 + "
+ "%lu + %lu bytes), offset == %s\n",
+ (unsigned long) sizeof (signal),
+ (unsigned long) sizeof (count),
+ paddress (get_current_arch (),
+ bfd_offset));
break;
default:
@@ -2487,8 +2477,8 @@ record_full_restore (void)
}
/* Succeeded. */
- printf_filtered (_("Restored records from core file %s.\n"),
- bfd_get_filename (core_bfd));
+ gdb_printf (_("Restored records from core file %s.\n"),
+ bfd_get_filename (core_bfd));
print_stack_frame (get_selected_frame (NULL), 1, SRC_AND_LOC, 1);
}
@@ -2534,8 +2524,8 @@ record_full_base_target::save_record (const char *recfilename)
/* Open the save file. */
if (record_debug)
- fprintf_unfiltered (gdb_stdlog, "Saving execution log to core file '%s'\n",
- recfilename);
+ gdb_printf (gdb_stdlog, "Saving execution log to core file '%s'\n",
+ recfilename);
/* Open the output file. */
gdb_bfd_ref_ptr obfd (create_gcore_bfd (recfilename));
@@ -2603,10 +2593,10 @@ record_full_base_target::save_record (const char *recfilename)
/* Write the magic code. */
magic = RECORD_FULL_FILE_MAGIC;
if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- " Writing 4-byte magic cookie "
- "RECORD_FULL_FILE_MAGIC (0x%s)\n",
- phex_nz (magic, 4));
+ gdb_printf (gdb_stdlog,
+ " Writing 4-byte magic cookie "
+ "RECORD_FULL_FILE_MAGIC (0x%s)\n",
+ phex_nz (magic, 4));
bfdcore_write (obfd.get (), osec, &magic, sizeof (magic), &bfd_offset);
/* Save the entries to recfd and forward execute to the end of
@@ -2628,12 +2618,12 @@ record_full_base_target::save_record (const char *recfilename)
{
case record_full_reg: /* reg */
if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- " Writing register %d (1 "
- "plus %lu plus %d bytes)\n",
- record_full_list->u.reg.num,
- (unsigned long) sizeof (regnum),
- record_full_list->u.reg.len);
+ gdb_printf (gdb_stdlog,
+ " Writing register %d (1 "
+ "plus %lu plus %d bytes)\n",
+ record_full_list->u.reg.num,
+ (unsigned long) sizeof (regnum),
+ record_full_list->u.reg.len);
/* Write regnum. */
regnum = netorder32 (record_full_list->u.reg.num);
@@ -2648,14 +2638,14 @@ record_full_base_target::save_record (const char *recfilename)
case record_full_mem: /* mem */
if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- " Writing memory %s (1 plus "
- "%lu plus %lu plus %d bytes)\n",
- paddress (gdbarch,
- record_full_list->u.mem.addr),
- (unsigned long) sizeof (addr),
- (unsigned long) sizeof (len),
- record_full_list->u.mem.len);
+ gdb_printf (gdb_stdlog,
+ " Writing memory %s (1 plus "
+ "%lu plus %lu plus %d bytes)\n",
+ paddress (gdbarch,
+ record_full_list->u.mem.addr),
+ (unsigned long) sizeof (addr),
+ (unsigned long) sizeof (len),
+ record_full_list->u.mem.len);
/* Write memlen. */
len = netorder32 (record_full_list->u.mem.len);
@@ -2675,11 +2665,11 @@ record_full_base_target::save_record (const char *recfilename)
case record_full_end:
if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- " Writing record_full_end (1 + "
- "%lu + %lu bytes)\n",
- (unsigned long) sizeof (signal),
- (unsigned long) sizeof (count));
+ gdb_printf (gdb_stdlog,
+ " Writing record_full_end (1 + "
+ "%lu + %lu bytes)\n",
+ (unsigned long) sizeof (signal),
+ (unsigned long) sizeof (count));
/* Write signal value. */
signal = netorder32 (record_full_list->u.end.sigval);
bfdcore_write (obfd.get (), osec, &signal,
@@ -2718,8 +2708,8 @@ record_full_base_target::save_record (const char *recfilename)
unlink_file.keep ();
/* Succeeded. */
- printf_filtered (_("Saved core file %s with execution log.\n"),
- recfilename);
+ gdb_printf (_("Saved core file %s with execution log.\n"),
+ recfilename);
}
/* record_full_goto_insn -- rewind the record log (forward or backward,
diff --git a/gdb/record.c b/gdb/record.c
index 3c936811fe4..17a5df262bd 100644
--- a/gdb/record.c
+++ b/gdb/record.c
@@ -55,7 +55,7 @@ struct cmd_list_element *info_record_cmdlist = NULL;
#define DEBUG(msg, args...) \
if (record_debug) \
- fprintf_unfiltered (gdb_stdlog, "record: " msg "\n", ##args)
+ gdb_printf (gdb_stdlog, "record: " msg "\n", ##args)
/* See record.h. */
@@ -257,8 +257,8 @@ static void
show_record_debug (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Debugging of process record target is %s.\n"),
- value);
+ gdb_printf (file, _("Debugging of process record target is %s.\n"),
+ value);
}
/* Alias for "target record". */
@@ -279,14 +279,14 @@ cmd_record_delete (const char *args, int from_tty)
if (!target_record_is_replaying (inferior_ptid))
{
- printf_filtered (_("Already at end of record list.\n"));
+ gdb_printf (_("Already at end of record list.\n"));
return;
}
if (!target_supports_delete_record ())
{
- printf_filtered (_("The current record target does not support "
- "this operation.\n"));
+ gdb_printf (_("The current record target does not support "
+ "this operation.\n"));
return;
}
@@ -308,8 +308,8 @@ cmd_record_stop (const char *args, int from_tty)
record_stop (t);
record_unpush (t);
- printf_filtered (_("Process record is stopped and all execution "
- "logs are deleted.\n"));
+ gdb_printf (_("Process record is stopped and all execution "
+ "logs are deleted.\n"));
gdb::observers::record_changed.notify (current_inferior (), 0, NULL, NULL);
}
@@ -325,11 +325,11 @@ info_record_command (const char *args, int from_tty)
t = find_record_target ();
if (t == NULL)
{
- printf_filtered (_("No recording is currently active.\n"));
+ gdb_printf (_("No recording is currently active.\n"));
return;
}
- printf_filtered (_("Active record target: %s\n"), t->shortname ());
+ gdb_printf (_("Active record target: %s\n"), t->shortname ());
t->info_record ();
}
diff --git a/gdb/regcache-dump.c b/gdb/regcache-dump.c
index f59345032ed..0c5da0e241d 100644
--- a/gdb/regcache-dump.c
+++ b/gdb/regcache-dump.c
@@ -43,9 +43,9 @@ protected:
if (regnum < 0)
{
if (m_dump_pseudo)
- fprintf_filtered (file, "Cooked value");
+ gdb_printf (file, "Cooked value");
else
- fprintf_filtered (file, "Raw value");
+ gdb_printf (file, "Raw value");
}
else
{
@@ -60,9 +60,9 @@ protected:
auto status = m_regcache->cooked_read (regnum, buf.data ());
if (status == REG_UNKNOWN)
- fprintf_filtered (file, "<invalid>");
+ gdb_printf (file, "<invalid>");
else if (status == REG_UNAVAILABLE)
- fprintf_filtered (file, "<unavailable>");
+ gdb_printf (file, "<unavailable>");
else
{
print_hex_chars (file, buf.data (), size,
@@ -73,7 +73,7 @@ protected:
{
/* Just print "<cooked>" for pseudo register when
regcache_dump_raw. */
- fprintf_filtered (file, "<cooked>");
+ gdb_printf (file, "<cooked>");
}
}
}
@@ -102,9 +102,9 @@ protected:
if (regnum < 0)
{
if (m_has_pseudo)
- fprintf_filtered (file, "Cooked value");
+ gdb_printf (file, "Cooked value");
else
- fprintf_filtered (file, "Raw value");
+ gdb_printf (file, "Raw value");
}
else
{
@@ -120,15 +120,15 @@ protected:
gdb_assert (status != REG_VALID);
if (status == REG_UNKNOWN)
- fprintf_filtered (file, "<invalid>");
+ gdb_printf (file, "<invalid>");
else
- fprintf_filtered (file, "<unavailable>");
+ gdb_printf (file, "<unavailable>");
}
else
{
/* Just print "<cooked>" for pseudo register when
regcache_dump_raw. */
- fprintf_filtered (file, "<cooked>");
+ gdb_printf (file, "<cooked>");
}
}
}
@@ -162,7 +162,7 @@ protected:
{
if (regnum < 0)
{
- fprintf_filtered (file, "Rmt Nr g/G Offset");
+ gdb_printf (file, "Rmt Nr g/G Offset");
}
else if (regnum < gdbarch_num_regs (m_gdbarch))
{
@@ -170,7 +170,7 @@ protected:
if (remote_register_number_and_offset (m_gdbarch, regnum,
&pnum, &poffset))
- fprintf_filtered (file, "%7d %11d", pnum, poffset);
+ gdb_printf (file, "%7d %11d", pnum, poffset);
}
}
};
@@ -188,20 +188,15 @@ protected:
void dump_reg (ui_file *file, int regnum) override
{
if (regnum < 0)
- fprintf_filtered (file, "Groups");
+ gdb_printf (file, "Groups");
else
{
const char *sep = "";
- struct reggroup *group;
-
- for (group = reggroup_next (m_gdbarch, NULL);
- group != NULL;
- group = reggroup_next (m_gdbarch, group))
+ for (const struct reggroup *group : gdbarch_reggroups (m_gdbarch))
{
if (gdbarch_register_reggroup_p (m_gdbarch, regnum, group))
{
- fprintf_filtered (file,
- "%s%s", sep, reggroup_name (group));
+ gdb_printf (file, "%s%s", sep, group->name ());
sep = ",";
}
}
diff --git a/gdb/regcache.c b/gdb/regcache.c
index ab45277e3b6..037659ef8fa 100644
--- a/gdb/regcache.c
+++ b/gdb/regcache.c
@@ -1164,7 +1164,12 @@ regcache::transfer_regset_register (struct regcache *out_regcache, int regnum,
memset (out_buf + offs + reg_size, 0, slot_size - reg_size);
}
else if (in_buf != nullptr)
- out_regcache->raw_supply_part (regnum, 0, reg_size, in_buf + offs);
+ {
+ /* Zero-extend the register value if the slot is smaller than the register. */
+ if (slot_size < register_size (gdbarch, regnum))
+ out_regcache->raw_supply_zeroed (regnum);
+ out_regcache->raw_supply_part (regnum, 0, reg_size, in_buf + offs);
+ }
else
{
/* Invalidate the register. */
@@ -1378,34 +1383,34 @@ regcache::debug_print_register (const char *func, int regno)
{
struct gdbarch *gdbarch = arch ();
- fprintf_unfiltered (gdb_stdlog, "%s ", func);
+ gdb_printf (gdb_stdlog, "%s ", func);
if (regno >= 0 && regno < gdbarch_num_regs (gdbarch)
&& gdbarch_register_name (gdbarch, regno) != NULL
&& gdbarch_register_name (gdbarch, regno)[0] != '\0')
- fprintf_unfiltered (gdb_stdlog, "(%s)",
- gdbarch_register_name (gdbarch, regno));
+ gdb_printf (gdb_stdlog, "(%s)",
+ gdbarch_register_name (gdbarch, regno));
else
- fprintf_unfiltered (gdb_stdlog, "(%d)", regno);
+ gdb_printf (gdb_stdlog, "(%d)", regno);
if (regno >= 0 && regno < gdbarch_num_regs (gdbarch))
{
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
int size = register_size (gdbarch, regno);
gdb_byte *buf = register_buffer (regno);
- fprintf_unfiltered (gdb_stdlog, " = ");
+ gdb_printf (gdb_stdlog, " = ");
for (int i = 0; i < size; i++)
{
- fprintf_unfiltered (gdb_stdlog, "%02x", buf[i]);
+ gdb_printf (gdb_stdlog, "%02x", buf[i]);
}
if (size <= sizeof (LONGEST))
{
ULONGEST val = extract_unsigned_integer (buf, size, byte_order);
- fprintf_unfiltered (gdb_stdlog, " %s %s",
- core_addr_to_string_nz (val), plongest (val));
+ gdb_printf (gdb_stdlog, " %s %s",
+ core_addr_to_string_nz (val), plongest (val));
}
}
- fprintf_unfiltered (gdb_stdlog, "\n");
+ gdb_printf (gdb_stdlog, "\n");
}
/* Implement 'maint flush register-cache' command. */
@@ -1416,7 +1421,7 @@ reg_flush_command (const char *command, int from_tty)
/* Force-flush the register cache. */
registers_changed ();
if (from_tty)
- printf_filtered (_("Register cache flushed.\n"));
+ gdb_printf (_("Register cache flushed.\n"));
}
void
@@ -1436,7 +1441,7 @@ register_dump::dump (ui_file *file)
{
/* Name. */
if (regnum < 0)
- fprintf_filtered (file, " %-10s", "Name");
+ gdb_printf (file, " %-10s", "Name");
else
{
const char *p = gdbarch_register_name (m_gdbarch, regnum);
@@ -1445,31 +1450,31 @@ register_dump::dump (ui_file *file)
p = "";
else if (p[0] == '\0')
p = "''";
- fprintf_filtered (file, " %-10s", p);
+ gdb_printf (file, " %-10s", p);
}
/* Number. */
if (regnum < 0)
- fprintf_filtered (file, " %4s", "Nr");
+ gdb_printf (file, " %4s", "Nr");
else
- fprintf_filtered (file, " %4d", regnum);
+ gdb_printf (file, " %4d", regnum);
/* Relative number. */
if (regnum < 0)
- fprintf_filtered (file, " %4s", "Rel");
+ gdb_printf (file, " %4s", "Rel");
else if (regnum < gdbarch_num_regs (m_gdbarch))
- fprintf_filtered (file, " %4d", regnum);
+ gdb_printf (file, " %4d", regnum);
else
- fprintf_filtered (file, " %4d",
- (regnum - gdbarch_num_regs (m_gdbarch)));
+ gdb_printf (file, " %4d",
+ (regnum - gdbarch_num_regs (m_gdbarch)));
/* Offset. */
if (regnum < 0)
- fprintf_filtered (file, " %6s ", "Offset");
+ gdb_printf (file, " %6s ", "Offset");
else
{
- fprintf_filtered (file, " %6ld",
- descr->register_offset[regnum]);
+ gdb_printf (file, " %6ld",
+ descr->register_offset[regnum]);
if (register_offset != descr->register_offset[regnum]
|| (regnum > 0
&& (descr->register_offset[regnum]
@@ -1479,19 +1484,19 @@ register_dump::dump (ui_file *file)
{
if (!footnote_register_offset)
footnote_register_offset = ++footnote_nr;
- fprintf_filtered (file, "*%d", footnote_register_offset);
+ gdb_printf (file, "*%d", footnote_register_offset);
}
else
- fprintf_filtered (file, " ");
+ gdb_printf (file, " ");
register_offset = (descr->register_offset[regnum]
+ descr->sizeof_register[regnum]);
}
/* Size. */
if (regnum < 0)
- fprintf_filtered (file, " %5s ", "Size");
+ gdb_printf (file, " %5s ", "Size");
else
- fprintf_filtered (file, " %5ld", descr->sizeof_register[regnum]);
+ gdb_printf (file, " %5ld", descr->sizeof_register[regnum]);
/* Type. */
{
@@ -1517,24 +1522,24 @@ register_dump::dump (ui_file *file)
if (startswith (t, blt))
t += strlen (blt);
}
- fprintf_filtered (file, " %-15s", t);
+ gdb_printf (file, " %-15s", t);
}
/* Leading space always present. */
- fprintf_filtered (file, " ");
+ gdb_printf (file, " ");
dump_reg (file, regnum);
- fprintf_filtered (file, "\n");
+ gdb_printf (file, "\n");
}
if (footnote_register_offset)
- fprintf_filtered (file, "*%d: Inconsistent register offsets.\n",
- footnote_register_offset);
+ gdb_printf (file, "*%d: Inconsistent register offsets.\n",
+ footnote_register_offset);
if (footnote_register_type_name_null)
- fprintf_filtered (file,
- "*%d: Register type's name NULL.\n",
- footnote_register_type_name_null);
+ gdb_printf (file,
+ "*%d: Register type's name NULL.\n",
+ footnote_register_type_name_null);
}
#if GDB_SELF_TEST
@@ -1939,30 +1944,9 @@ cooked_read_test (struct gdbarch *gdbarch)
static void
cooked_write_test (struct gdbarch *gdbarch)
{
- /* Error out if debugging something, because we're going to push the
- test target, which would pop any existing target. */
- if (current_inferior ()->top_target ()->stratum () >= process_stratum)
- error (_("target already pushed"));
-
/* Create a mock environment. A process_stratum target pushed. */
-
- target_ops_no_register mock_target;
-
- /* Push the process_stratum target so we can mock accessing
- registers. */
- current_inferior ()->push_target (&mock_target);
-
- /* Pop it again on exit (return/exception). */
- struct on_exit
- {
- ~on_exit ()
- {
- pop_all_targets_at_and_above (process_stratum);
- }
- } pop_targets;
-
- readwrite_regcache readwrite (&mock_target, gdbarch);
-
+ scoped_mock_context<target_ops_no_register> ctx (gdbarch);
+ readwrite_regcache readwrite (&ctx.mock_target, gdbarch);
const int num_regs = gdbarch_num_cooked_regs (gdbarch);
for (auto regnum = 0; regnum < num_regs; regnum++)
diff --git a/gdb/reggroups.c b/gdb/reggroups.c
index 2b612fbd040..1a13cb2fba0 100644
--- a/gdb/reggroups.c
+++ b/gdb/reggroups.c
@@ -26,171 +26,117 @@
#include "regcache.h"
#include "command.h"
#include "gdbcmd.h" /* For maintenanceprintlist. */
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
-/* Individual register groups. */
-
-struct reggroup
-{
- const char *name;
- enum reggroup_type type;
-};
+/* See reggroups.h. */
-struct reggroup *
+const reggroup *
reggroup_new (const char *name, enum reggroup_type type)
{
- struct reggroup *group = XNEW (struct reggroup);
-
- group->name = name;
- group->type = type;
- return group;
+ return new reggroup (name, type);
}
/* See reggroups.h. */
-struct reggroup *
+const reggroup *
reggroup_gdbarch_new (struct gdbarch *gdbarch, const char *name,
enum reggroup_type type)
{
- struct reggroup *group = GDBARCH_OBSTACK_ZALLOC (gdbarch,
- struct reggroup);
-
- group->name = gdbarch_obstack_strdup (gdbarch, name);
- group->type = type;
- return group;
+ name = gdbarch_obstack_strdup (gdbarch, name);
+ return obstack_new<struct reggroup> (gdbarch_obstack (gdbarch),
+ name, type);
}
-/* Register group attributes. */
+/* A container holding all the register groups for a particular
+ architecture. */
-const char *
-reggroup_name (struct reggroup *group)
+struct reggroups
{
- return group->name;
-}
+ /* Add GROUP to the list of register groups. */
-enum reggroup_type
-reggroup_type (struct reggroup *group)
-{
- return group->type;
-}
+ void add (const reggroup *group)
+ {
+ gdb_assert (group != nullptr);
+ gdb_assert (std::find (m_groups.begin(), m_groups.end(), group)
+ == m_groups.end());
-/* A linked list of groups for the given architecture. */
+ m_groups.push_back (group);
+ }
-struct reggroup_el
-{
- struct reggroup *group;
- struct reggroup_el *next;
-};
+ /* The number of register groups. */
-struct reggroups
-{
- struct reggroup_el *first;
- struct reggroup_el **last;
-};
+ std::vector<struct reggroup *>::size_type
+ size () const
+ {
+ return m_groups.size ();
+ }
-static struct gdbarch_data *reggroups_data;
+ /* Return a reference to the list of all groups. */
-static void *
-reggroups_init (struct obstack *obstack)
-{
- struct reggroups *groups = OBSTACK_ZALLOC (obstack, struct reggroups);
+ const std::vector<const struct reggroup *> &
+ groups () const
+ {
+ return m_groups;
+ }
- groups->last = &groups->first;
- return groups;
-}
+private:
+ /* The register groups. */
+ std::vector<const struct reggroup *> m_groups;
+};
-/* Add a register group (with attribute values) to the pre-defined
- list. */
+/* Key used to lookup register group data from a gdbarch. */
-static void
-add_group (struct reggroups *groups, struct reggroup *group,
- struct reggroup_el *el)
-{
- gdb_assert (group != NULL);
- el->group = group;
- el->next = NULL;
- (*groups->last) = el;
- groups->last = &el->next;
-}
+static struct gdbarch_data *reggroups_data;
+
+/* See reggroups.h. */
void
-reggroup_add (struct gdbarch *gdbarch, struct reggroup *group)
+reggroup_add (struct gdbarch *gdbarch, const reggroup *group)
{
struct reggroups *groups
= (struct reggroups *) gdbarch_data (gdbarch, reggroups_data);
- add_group (groups, group,
- GDBARCH_OBSTACK_ZALLOC (gdbarch, struct reggroup_el));
+ gdb_assert (groups != nullptr);
+ gdb_assert (group != nullptr);
+
+ groups->add (group);
}
-/* The default register groups for an architecture. */
+/* Called to initialize the per-gdbarch register group information. */
-static struct reggroups default_groups = { NULL, &default_groups.first };
+static void *
+reggroups_init (struct obstack *obstack)
+{
+ struct reggroups *groups = obstack_new<struct reggroups> (obstack);
-/* A register group iterator. */
+ /* Add the default groups. */
+ groups->add (general_reggroup);
+ groups->add (float_reggroup);
+ groups->add (system_reggroup);
+ groups->add (vector_reggroup);
+ groups->add (all_reggroup);
+ groups->add (save_reggroup);
+ groups->add (restore_reggroup);
-struct reggroup *
-reggroup_next (struct gdbarch *gdbarch, struct reggroup *last)
-{
- struct reggroups *groups;
- struct reggroup_el *el;
-
- /* Don't allow this function to be called during architecture
- creation. If there are no groups, use the default groups list. */
- groups = (struct reggroups *) gdbarch_data (gdbarch, reggroups_data);
- gdb_assert (groups != NULL);
- if (groups->first == NULL)
- groups = &default_groups;
-
- /* Return the first/next reggroup. */
- if (last == NULL)
- return groups->first->group;
- for (el = groups->first; el != NULL; el = el->next)
- {
- if (el->group == last)
- {
- if (el->next != NULL)
- return el->next->group;
- else
- return NULL;
- }
- }
- return NULL;
+ return groups;
}
/* See reggroups.h. */
-
-struct reggroup *
-reggroup_prev (struct gdbarch *gdbarch, struct reggroup *curr)
+const std::vector<const reggroup *> &
+gdbarch_reggroups (struct gdbarch *gdbarch)
{
- struct reggroups *groups;
- struct reggroup_el *el;
- struct reggroup *prev;
-
- /* Don't allow this function to be called during architecture
- creation. If there are no groups, use the default groups list. */
- groups = (struct reggroups *) gdbarch_data (gdbarch, reggroups_data);
- gdb_assert (groups != NULL);
- if (groups->first == NULL)
- groups = &default_groups;
-
- prev = NULL;
- for (el = groups->first; el != NULL; el = el->next)
- {
- gdb_assert (el->group != NULL);
- if (el->group == curr)
- return prev;
- prev = el->group;
- }
- if (curr == NULL)
- return prev;
- return NULL;
+ struct reggroups *groups
+ = (struct reggroups *) gdbarch_data (gdbarch, reggroups_data);
+ gdb_assert (groups != nullptr);
+ gdb_assert (groups->size () > 0);
+ return groups->groups ();
}
-/* Is REGNUM a member of REGGROUP? */
+/* See reggroups.h. */
+
int
default_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
- struct reggroup *group)
+ const struct reggroup *group)
{
int vector_p;
int float_p;
@@ -214,21 +160,17 @@ default_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
return (!vector_p && !float_p);
if (group == save_reggroup || group == restore_reggroup)
return raw_p;
- return 0;
+ return 0;
}
/* See reggroups.h. */
-reggroup *
+const reggroup *
reggroup_find (struct gdbarch *gdbarch, const char *name)
{
- struct reggroup *group;
-
- for (group = reggroup_next (gdbarch, NULL);
- group != NULL;
- group = reggroup_next (gdbarch, group))
+ for (const struct reggroup *group : gdbarch_reggroups (gdbarch))
{
- if (strcmp (name, reggroup_name (group)) == 0)
+ if (strcmp (name, group->name ()) == 0)
return group;
}
return NULL;
@@ -239,54 +181,39 @@ reggroup_find (struct gdbarch *gdbarch, const char *name)
static void
reggroups_dump (struct gdbarch *gdbarch, struct ui_file *file)
{
- struct reggroup *group = NULL;
+ static constexpr const char *fmt = " %-10s %-10s\n";
+
+ gdb_printf (file, fmt, "Group", "Type");
- do
+ for (const struct reggroup *group : gdbarch_reggroups (gdbarch))
{
/* Group name. */
- {
- const char *name;
-
- if (group == NULL)
- name = "Group";
- else
- name = reggroup_name (group);
- fprintf_filtered (file, " %-10s", name);
- }
-
+ const char *name = group->name ();
+
/* Group type. */
- {
- const char *type;
-
- if (group == NULL)
- type = "Type";
- else
- {
- switch (reggroup_type (group))
- {
- case USER_REGGROUP:
- type = "user";
- break;
- case INTERNAL_REGGROUP:
- type = "internal";
- break;
- default:
- internal_error (__FILE__, __LINE__, _("bad switch"));
- }
- }
- fprintf_filtered (file, " %-10s", type);
- }
+ const char *type;
+
+ switch (group->type ())
+ {
+ case USER_REGGROUP:
+ type = "user";
+ break;
+ case INTERNAL_REGGROUP:
+ type = "internal";
+ break;
+ default:
+ internal_error (__FILE__, __LINE__, _("bad switch"));
+ }
/* Note: If you change this, be sure to also update the
documentation. */
-
- fprintf_filtered (file, "\n");
- group = reggroup_next (gdbarch, group);
+ gdb_printf (file, fmt, name, type);
}
- while (group != NULL);
}
+/* Implement 'maintenance print reggroups' command. */
+
static void
maintenance_print_reggroups (const char *args, int from_tty)
{
@@ -305,21 +232,21 @@ maintenance_print_reggroups (const char *args, int from_tty)
}
/* Pre-defined register groups. */
-static struct reggroup general_group = { "general", USER_REGGROUP };
-static struct reggroup float_group = { "float", USER_REGGROUP };
-static struct reggroup system_group = { "system", USER_REGGROUP };
-static struct reggroup vector_group = { "vector", USER_REGGROUP };
-static struct reggroup all_group = { "all", USER_REGGROUP };
-static struct reggroup save_group = { "save", INTERNAL_REGGROUP };
-static struct reggroup restore_group = { "restore", INTERNAL_REGGROUP };
-
-struct reggroup *const general_reggroup = &general_group;
-struct reggroup *const float_reggroup = &float_group;
-struct reggroup *const system_reggroup = &system_group;
-struct reggroup *const vector_reggroup = &vector_group;
-struct reggroup *const all_reggroup = &all_group;
-struct reggroup *const save_reggroup = &save_group;
-struct reggroup *const restore_reggroup = &restore_group;
+static const reggroup general_group = { "general", USER_REGGROUP };
+static const reggroup float_group = { "float", USER_REGGROUP };
+static const reggroup system_group = { "system", USER_REGGROUP };
+static const reggroup vector_group = { "vector", USER_REGGROUP };
+static const reggroup all_group = { "all", USER_REGGROUP };
+static const reggroup save_group = { "save", INTERNAL_REGGROUP };
+static const reggroup restore_group = { "restore", INTERNAL_REGGROUP };
+
+const reggroup *const general_reggroup = &general_group;
+const reggroup *const float_reggroup = &float_group;
+const reggroup *const system_reggroup = &system_group;
+const reggroup *const vector_reggroup = &vector_group;
+const reggroup *const all_reggroup = &all_group;
+const reggroup *const save_reggroup = &save_group;
+const reggroup *const restore_reggroup = &restore_group;
void _initialize_reggroup ();
void
@@ -327,15 +254,6 @@ _initialize_reggroup ()
{
reggroups_data = gdbarch_data_register_pre_init (reggroups_init);
- /* The pre-defined list of groups. */
- add_group (&default_groups, general_reggroup, XNEW (struct reggroup_el));
- add_group (&default_groups, float_reggroup, XNEW (struct reggroup_el));
- add_group (&default_groups, system_reggroup, XNEW (struct reggroup_el));
- add_group (&default_groups, vector_reggroup, XNEW (struct reggroup_el));
- add_group (&default_groups, all_reggroup, XNEW (struct reggroup_el));
- add_group (&default_groups, save_reggroup, XNEW (struct reggroup_el));
- add_group (&default_groups, restore_reggroup, XNEW (struct reggroup_el));
-
add_cmd ("reggroups", class_maintenance,
maintenance_print_reggroups, _("\
Print the internal register group names.\n\
diff --git a/gdb/reggroups.h b/gdb/reggroups.h
index f2e60c4f1da..a2b4cc5713e 100644
--- a/gdb/reggroups.h
+++ b/gdb/reggroups.h
@@ -23,49 +23,79 @@
#define REGGROUPS_H
struct gdbarch;
-struct reggroup;
-enum reggroup_type { USER_REGGROUP, INTERNAL_REGGROUP };
+/* The different register group types. */
+enum reggroup_type {
+ /* Used for any register group that should be visible to the user.
+ Architecture specific register groups, as well as most of the default
+ groups will have this type. */
+ USER_REGGROUP,
+
+ /* Used for a few groups that GDB uses while managing machine state.
+ These groups are mostly hidden from the user. */
+ INTERNAL_REGGROUP
+};
+
+/* Individual register group. */
+
+struct reggroup
+{
+ /* Create a new register group object. The NAME is not owned by the new
+ reggroup object, so must outlive the object. */
+ reggroup (const char *name, enum reggroup_type type)
+ : m_name (name),
+ m_type (type)
+ { /* Nothing. */ }
+
+ /* Return the name for this register group. */
+ const char *name () const
+ { return m_name; }
+
+ /* Return the type of this register group. */
+ enum reggroup_type type () const
+ { return m_type; }
+
+private:
+ /* The name of this register group. */
+ const char *m_name;
+
+ /* The type of this register group. */
+ enum reggroup_type m_type;
+};
/* Pre-defined, user visible, register groups. */
-extern struct reggroup *const general_reggroup;
-extern struct reggroup *const float_reggroup;
-extern struct reggroup *const system_reggroup;
-extern struct reggroup *const vector_reggroup;
-extern struct reggroup *const all_reggroup;
+extern const reggroup *const general_reggroup;
+extern const reggroup *const float_reggroup;
+extern const reggroup *const system_reggroup;
+extern const reggroup *const vector_reggroup;
+extern const reggroup *const all_reggroup;
/* Pre-defined, internal, register groups. */
-extern struct reggroup *const save_reggroup;
-extern struct reggroup *const restore_reggroup;
+extern const reggroup *const save_reggroup;
+extern const reggroup *const restore_reggroup;
/* Create a new local register group. */
-extern struct reggroup *reggroup_new (const char *name,
- enum reggroup_type type);
+extern const reggroup *reggroup_new (const char *name,
+ enum reggroup_type type);
+
/* Create a new register group allocated onto the gdbarch obstack. */
-extern struct reggroup *reggroup_gdbarch_new (struct gdbarch *gdbarch,
- const char *name,
- enum reggroup_type type);
-
-/* Add a register group (with attribute values) to the pre-defined list. */
-extern void reggroup_add (struct gdbarch *gdbarch, struct reggroup *group);
-
-/* Register group attributes. */
-extern const char *reggroup_name (struct reggroup *reggroup);
-extern enum reggroup_type reggroup_type (struct reggroup *reggroup);
-
-/* Iterators for the architecture's register groups. Pass in NULL, returns
- the first (for next), or last (for prev) group. Pass in a group,
- returns the next or previous group, or NULL when either the end or the
- beginning of the group list is reached. */
-extern struct reggroup *reggroup_next (struct gdbarch *gdbarch,
- struct reggroup *last);
-extern struct reggroup *reggroup_prev (struct gdbarch *gdbarch,
- struct reggroup *curr);
+extern const reggroup *reggroup_gdbarch_new (struct gdbarch *gdbarch,
+ const char *name,
+ enum reggroup_type type);
+
+/* Add register group GROUP to the list of register groups for GDBARCH. */
+extern void reggroup_add (struct gdbarch *gdbarch, const reggroup *group);
+
+/* Return the list of all register groups for GDBARCH. */
+extern const std::vector<const reggroup *> &
+ gdbarch_reggroups (struct gdbarch *gdbarch);
+
/* Find a reggroup by name. */
-extern reggroup *reggroup_find (struct gdbarch *gdbarch, const char *name);
+extern const reggroup *reggroup_find (struct gdbarch *gdbarch,
+ const char *name);
/* Is REGNUM a member of REGGROUP? */
extern int default_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
- struct reggroup *reggroup);
+ const struct reggroup *reggroup);
#endif
diff --git a/gdb/remote-fileio.c b/gdb/remote-fileio.c
index 9963f1ebc01..fe191fb6069 100644
--- a/gdb/remote-fileio.c
+++ b/gdb/remote-fileio.c
@@ -1290,8 +1290,8 @@ show_system_call_allowed (const char *args, int from_tty)
if (args)
error (_("Garbage after \"show remote "
"system-call-allowed\" command: `%s'"), args);
- printf_filtered ("Calling host system(3) call from target is %sallowed\n",
- remote_fio_system_call_allowed ? "" : "not ");
+ gdb_printf ("Calling host system(3) call from target is %sallowed\n",
+ remote_fio_system_call_allowed ? "" : "not ");
}
void
diff --git a/gdb/remote-notif.c b/gdb/remote-notif.c
index 0973733e1bf..95b45e3f984 100644
--- a/gdb/remote-notif.c
+++ b/gdb/remote-notif.c
@@ -63,8 +63,8 @@ remote_notif_ack (remote_target *remote,
notif_event_up event = nc->alloc_event ();
if (notif_debug)
- fprintf_unfiltered (gdb_stdlog, "notif: ack '%s'\n",
- nc->ack_command);
+ gdb_printf (gdb_stdlog, "notif: ack '%s'\n",
+ nc->ack_command);
nc->parse (remote, nc, buf, event.get ());
nc->ack (remote, nc, buf, event.release ());
@@ -79,7 +79,7 @@ remote_notif_parse (remote_target *remote,
notif_event_up event = nc->alloc_event ();
if (notif_debug)
- fprintf_unfiltered (gdb_stdlog, "notif: parse '%s'\n", nc->name);
+ gdb_printf (gdb_stdlog, "notif: parse '%s'\n", nc->name);
nc->parse (remote, nc, buf, event.get ());
@@ -145,8 +145,8 @@ handle_notification (struct remote_notif_state *state, const char *buf)
reason thought we didn't, possibly due to timeout on its side.
Just ignore it. */
if (notif_debug)
- fprintf_unfiltered (gdb_stdlog,
- "notif: ignoring resent notification\n");
+ gdb_printf (gdb_stdlog,
+ "notif: ignoring resent notification\n");
}
else
{
@@ -202,9 +202,9 @@ handle_notification (struct remote_notif_state *state, const char *buf)
}
if (notif_debug)
- fprintf_unfiltered (gdb_stdlog,
- "notif: Notification '%s' captured\n",
- nc->name);
+ gdb_printf (gdb_stdlog,
+ "notif: Notification '%s' captured\n",
+ nc->name);
}
}
diff --git a/gdb/remote-sim.c b/gdb/remote-sim.c
index 3637fdb18bf..4b8afd27688 100644
--- a/gdb/remote-sim.c
+++ b/gdb/remote-sim.c
@@ -44,6 +44,7 @@
#include "gdbsupport/byte-vector.h"
#include "memory-map.h"
#include "remote.h"
+#include "gdbsupport/buildargv.h"
/* Prototypes */
@@ -61,7 +62,7 @@ static void gdb_os_flush_stderr (host_callback *);
static int gdb_os_poll_quit (host_callback *);
-/* printf_filtered is depreciated. */
+/* gdb_printf is depreciated. */
static void gdb_os_printf_filtered (host_callback *, const char *, ...);
static void gdb_os_vprintf_filtered (host_callback *, const char *, va_list);
@@ -293,26 +294,26 @@ sim_inferior_data::~sim_inferior_data ()
static void
dump_mem (const gdb_byte *buf, int len)
{
- fputs_unfiltered ("\t", gdb_stdlog);
+ gdb_puts ("\t", gdb_stdlog);
if (len == 8 || len == 4)
{
uint32_t l[2];
memcpy (l, buf, len);
- fprintf_unfiltered (gdb_stdlog, "0x%08x", l[0]);
+ gdb_printf (gdb_stdlog, "0x%08x", l[0]);
if (len == 8)
- fprintf_unfiltered (gdb_stdlog, " 0x%08x", l[1]);
+ gdb_printf (gdb_stdlog, " 0x%08x", l[1]);
}
else
{
int i;
for (i = 0; i < len; i++)
- fprintf_unfiltered (gdb_stdlog, "0x%02x ", buf[i]);
+ gdb_printf (gdb_stdlog, "0x%02x ", buf[i]);
}
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
}
/* Initialize gdb_callback. */
@@ -392,7 +393,7 @@ gdb_os_flush_stderr (host_callback *p)
gdb_stdtargerr->flush ();
}
-/* GDB version of printf_filtered callback. */
+/* GDB version of gdb_printf callback. */
static void ATTRIBUTE_PRINTF (2, 3)
gdb_os_printf_filtered (host_callback * p, const char *format, ...)
@@ -400,16 +401,16 @@ gdb_os_printf_filtered (host_callback * p, const char *format, ...)
va_list args;
va_start (args, format);
- vfprintf_filtered (gdb_stdout, format, args);
+ gdb_vprintf (gdb_stdout, format, args);
va_end (args);
}
-/* GDB version of error vprintf_filtered. */
+/* GDB version of error gdb_vprintf. */
static void ATTRIBUTE_PRINTF (2, 0)
gdb_os_vprintf_filtered (host_callback * p, const char *format, va_list ap)
{
- vfprintf_filtered (gdb_stdout, format, ap);
+ gdb_vprintf (gdb_stdout, format, ap);
}
/* GDB version of error evprintf_filtered. */
@@ -417,7 +418,7 @@ gdb_os_vprintf_filtered (host_callback * p, const char *format, va_list ap)
static void ATTRIBUTE_PRINTF (2, 0)
gdb_os_evprintf_filtered (host_callback * p, const char *format, va_list ap)
{
- vfprintf_filtered (gdb_stderr, format, ap);
+ gdb_vprintf (gdb_stderr, format, ap);
}
/* GDB version of error callback. */
@@ -481,13 +482,13 @@ gdbsim_target::fetch_registers (struct regcache *regcache, int regno)
buf.data (), regsize);
if (nr_bytes > 0 && nr_bytes != regsize && warn_user)
{
- fprintf_unfiltered (gdb_stderr,
- "Size of register %s (%d/%d) "
- "incorrect (%d instead of %d))",
- gdbarch_register_name (gdbarch, regno),
- regno,
- gdbarch_register_sim_regno (gdbarch, regno),
- nr_bytes, regsize);
+ gdb_printf (gdb_stderr,
+ "Size of register %s (%d/%d) "
+ "incorrect (%d instead of %d))",
+ gdbarch_register_name (gdbarch, regno),
+ regno,
+ gdbarch_register_sim_regno (gdbarch, regno),
+ nr_bytes, regsize);
warn_user = 0;
}
/* FIXME: cagney/2002-05-27: Should check `nr_bytes == 0'
@@ -498,8 +499,8 @@ gdbsim_target::fetch_registers (struct regcache *regcache, int regno)
regcache->raw_supply (regno, buf.data ());
if (remote_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "gdbsim_fetch_register: %d", regno);
+ gdb_printf (gdb_stdlog,
+ "gdbsim_fetch_register: %d", regno);
/* FIXME: We could print something more intelligible. */
dump_mem (buf.data (), regsize);
}
@@ -547,7 +548,7 @@ gdbsim_target::store_registers (struct regcache *regcache, int regno)
if (remote_debug)
{
- fprintf_unfiltered (gdb_stdlog, "gdbsim_store_register: %d", regno);
+ gdb_printf (gdb_stdlog, "gdbsim_store_register: %d", regno);
/* FIXME: We could print something more intelligible. */
dump_mem (tmp.data (), regsize);
}
@@ -561,7 +562,7 @@ void
gdbsim_target::kill ()
{
if (remote_debug)
- fprintf_unfiltered (gdb_stdlog, "gdbsim_kill\n");
+ gdb_printf (gdb_stdlog, "gdbsim_kill\n");
/* There is no need to `kill' running simulator - the simulator is
not running. Mourning it is enough. */
@@ -590,7 +591,7 @@ gdbsim_target::load (const char *args, int fromtty)
error (_("GDB sim does not yet support a load offset."));
if (remote_debug)
- fprintf_unfiltered (gdb_stdlog, "gdbsim_load: prog \"%s\"\n", prog);
+ gdb_printf (gdb_stdlog, "gdbsim_load: prog \"%s\"\n", prog);
/* FIXME: We will print two messages on error.
Need error to either not print anything if passed NULL or need
@@ -630,10 +631,10 @@ gdbsim_target::create_inferior (const char *exec_file,
warning (_("No program loaded."));
if (remote_debug)
- fprintf_unfiltered (gdb_stdlog,
- "gdbsim_create_inferior: exec_file \"%s\", args \"%s\"\n",
- (exec_file ? exec_file : "(NULL)"),
- args);
+ gdb_printf (gdb_stdlog,
+ "gdbsim_create_inferior: exec_file \"%s\", args \"%s\"\n",
+ (exec_file ? exec_file : "(NULL)"),
+ args);
if (inferior_ptid == sim_data->remote_sim_ptid)
kill ();
@@ -687,8 +688,8 @@ gdbsim_target_open (const char *args, int from_tty)
sysroot += strlen (TARGET_SYSROOT_PREFIX);
if (remote_debug)
- fprintf_unfiltered (gdb_stdlog,
- "gdbsim_open: args \"%s\"\n", args ? args : "(null)");
+ gdb_printf (gdb_stdlog,
+ "gdbsim_open: args \"%s\"\n", args ? args : "(null)");
/* Ensure that the sim target is not on the target stack. This is
necessary, because if it is on the target stack, the call to
@@ -763,7 +764,7 @@ gdbsim_target_open (const char *args, int from_tty)
sim_data->gdbsim_desc = gdbsim_desc;
current_inferior ()->push_target (&gdbsim_ops);
- printf_filtered ("Connected to the simulator.\n");
+ gdb_printf ("Connected to the simulator.\n");
/* There's nothing running after "target sim" or "load"; not until
"run". */
@@ -803,7 +804,7 @@ void
gdbsim_target::close ()
{
if (remote_debug)
- fprintf_unfiltered (gdb_stdlog, "gdbsim_close\n");
+ gdb_printf (gdb_stdlog, "gdbsim_close\n");
for (inferior *inf : all_inferiors (this))
close_one_inferior (inf);
@@ -831,11 +832,11 @@ void
gdbsim_target::detach (inferior *inf, int from_tty)
{
if (remote_debug)
- fprintf_unfiltered (gdb_stdlog, "gdbsim_detach\n");
+ gdb_printf (gdb_stdlog, "gdbsim_detach\n");
inf->unpush_target (this); /* calls gdbsim_close to do the real work */
if (from_tty)
- printf_filtered ("Ending simulator %s debugging\n", target_shortname ());
+ gdb_printf ("Ending simulator %s debugging\n", target_shortname ());
}
/* Resume execution of the target process. STEP says whether to single-step
@@ -855,9 +856,9 @@ gdbsim_target::resume_one_inferior (inferior *inf, bool step,
sim_data->resume_step = step;
if (remote_debug)
- fprintf_unfiltered (gdb_stdlog,
- _("gdbsim_resume: pid %d, step %d, signal %d\n"),
- inf->pid, step, siggnal);
+ gdb_printf (gdb_stdlog,
+ _("gdbsim_resume: pid %d, step %d, signal %d\n"),
+ inf->pid, step, siggnal);
}
}
@@ -955,7 +956,7 @@ gdbsim_target::wait (ptid_t ptid, struct target_waitstatus *status,
}
if (remote_debug)
- fprintf_unfiltered (gdb_stdlog, "gdbsim_wait\n");
+ gdb_printf (gdb_stdlog, "gdbsim_wait\n");
#if defined (HAVE_SIGACTION) && defined (SA_RESTART)
{
@@ -1049,13 +1050,13 @@ gdbsim_xfer_memory (struct target_ops *target,
gdb_assert (sim_data->gdbsim_desc != NULL);
if (remote_debug)
- fprintf_unfiltered (gdb_stdlog,
- "gdbsim_xfer_memory: readbuf %s, writebuf %s, "
- "memaddr %s, len %s\n",
- host_address_to_string (readbuf),
- host_address_to_string (writebuf),
- paddress (target_gdbarch (), memaddr),
- pulongest (len));
+ gdb_printf (gdb_stdlog,
+ "gdbsim_xfer_memory: readbuf %s, writebuf %s, "
+ "memaddr %s, len %s\n",
+ host_address_to_string (readbuf),
+ host_address_to_string (writebuf),
+ paddress (target_gdbarch (), memaddr),
+ pulongest (len));
if (writebuf)
{
@@ -1110,12 +1111,12 @@ gdbsim_target::files_info ()
file = bfd_get_filename (current_program_space->exec_bfd ());
if (remote_debug)
- fprintf_unfiltered (gdb_stdlog, "gdbsim_files_info: file \"%s\"\n", file);
+ gdb_printf (gdb_stdlog, "gdbsim_files_info: file \"%s\"\n", file);
if (current_program_space->exec_bfd ())
{
- printf_filtered ("\tAttached to %s running program %s\n",
- target_shortname (), file);
+ gdb_printf ("\tAttached to %s running program %s\n",
+ target_shortname (), file);
sim_info (sim_data->gdbsim_desc, 0);
}
}
@@ -1126,7 +1127,7 @@ void
gdbsim_target::mourn_inferior ()
{
if (remote_debug)
- fprintf_unfiltered (gdb_stdlog, "gdbsim_mourn_inferior:\n");
+ gdb_printf (gdb_stdlog, "gdbsim_mourn_inferior:\n");
remove_breakpoints ();
generic_mourn_inferior ();
diff --git a/gdb/remote.c b/gdb/remote.c
index 290edd07cd1..b8df3326849 100644
--- a/gdb/remote.c
+++ b/gdb/remote.c
@@ -391,7 +391,7 @@ private:
static const target_info remote_target_info = {
"remote",
- N_("Remote serial target in gdb-specific protocol"),
+ N_("Remote target using gdb-specific protocol"),
remote_doc
};
@@ -426,8 +426,6 @@ public:
void store_registers (struct regcache *, int) override;
void prepare_to_store (struct regcache *) override;
- void files_info () override;
-
int insert_breakpoint (struct gdbarch *, struct bp_target_info *) override;
int remove_breakpoint (struct gdbarch *, struct bp_target_info *,
@@ -660,8 +658,8 @@ public:
bool use_agent (bool use) override;
bool can_use_agent () override;
- struct btrace_target_info *enable_btrace (ptid_t ptid,
- const struct btrace_config *conf) override;
+ struct btrace_target_info *
+ enable_btrace (thread_info *tp, const struct btrace_config *conf) override;
void disable_btrace (struct btrace_target_info *tinfo) override;
@@ -739,7 +737,7 @@ public: /* Remote specific methods. */
char *append_resumption (char *p, char *endp,
ptid_t ptid, int step, gdb_signal siggnal);
- int remote_resume_with_vcont (ptid_t ptid, int step,
+ int remote_resume_with_vcont (ptid_t scope_ptid, int step,
gdb_signal siggnal);
thread_info *add_current_inferior_and_thread (const char *wait_status);
@@ -959,7 +957,7 @@ private:
static const target_info extended_remote_target_info = {
"extended-remote",
- N_("Extended remote serial target in gdb-specific protocol"),
+ N_("Extended remote target using gdb-specific protocol"),
remote_doc
};
@@ -1018,13 +1016,20 @@ struct stop_reply : public notif_event
int core;
};
+/* Return TARGET as a remote_target if it is one, else nullptr. */
+
+static remote_target *
+as_remote_target (process_stratum_target *target)
+{
+ return dynamic_cast<remote_target *> (target);
+}
+
/* See remote.h. */
bool
is_remote_target (process_stratum_target *target)
{
- remote_target *rt = dynamic_cast<remote_target *> (target);
- return rt != nullptr;
+ return as_remote_target (target) != nullptr;
}
/* Per-program-space data key. */
@@ -1392,7 +1397,7 @@ static void
show_remote_exec_file (struct ui_file *file, int from_tty,
struct cmd_list_element *cmd, const char *value)
{
- fprintf_filtered (file, "%s\n", get_remote_exec_file ());
+ gdb_printf (file, "%s\n", get_remote_exec_file ());
}
static int
@@ -1574,19 +1579,19 @@ show_interrupt_sequence (struct ui_file *file, int from_tty,
const char *value)
{
if (interrupt_sequence_mode == interrupt_sequence_control_c)
- fprintf_filtered (file,
- _("Send the ASCII ETX character (Ctrl-c) "
- "to the remote target to interrupt the "
- "execution of the program.\n"));
+ gdb_printf (file,
+ _("Send the ASCII ETX character (Ctrl-c) "
+ "to the remote target to interrupt the "
+ "execution of the program.\n"));
else if (interrupt_sequence_mode == interrupt_sequence_break)
- fprintf_filtered (file,
- _("send a break signal to the remote target "
- "to interrupt the execution of the program.\n"));
+ gdb_printf (file,
+ _("send a break signal to the remote target "
+ "to interrupt the execution of the program.\n"));
else if (interrupt_sequence_mode == interrupt_sequence_break_g)
- fprintf_filtered (file,
- _("Send a break signal and 'g' a.k.a. Magic SysRq g to "
- "the remote target to interrupt the execution "
- "of Linux kernel.\n"));
+ gdb_printf (file,
+ _("Send a break signal and 'g' a.k.a. Magic SysRq g to "
+ "the remote target to interrupt the execution "
+ "of Linux kernel.\n"));
else
internal_error (__FILE__, __LINE__,
_("Invalid value for interrupt_sequence_mode: %s."),
@@ -1762,22 +1767,22 @@ static void
show_memory_packet_size (struct memory_packet_config *config)
{
if (config->size == 0)
- printf_filtered (_("The %s is 0 (default). "), config->name);
+ gdb_printf (_("The %s is 0 (default). "), config->name);
else
- printf_filtered (_("The %s is %ld. "), config->name, config->size);
+ gdb_printf (_("The %s is %ld. "), config->name, config->size);
if (config->fixed_p)
- printf_filtered (_("Packets are fixed at %ld bytes.\n"),
- get_fixed_memory_packet_size (config));
+ gdb_printf (_("Packets are fixed at %ld bytes.\n"),
+ get_fixed_memory_packet_size (config));
else
{
remote_target *remote = get_current_remote_target ();
if (remote != NULL)
- printf_filtered (_("Packets are limited to %ld bytes.\n"),
- remote->get_memory_packet_size (config));
+ gdb_printf (_("Packets are limited to %ld bytes.\n"),
+ remote->get_memory_packet_size (config));
else
- puts_filtered ("The actual limit will be further reduced "
- "dependent on the target.\n");
+ gdb_puts ("The actual limit will be further reduced "
+ "dependent on the target.\n");
}
}
@@ -1806,8 +1811,8 @@ show_hardware_watchpoint_limit (struct ui_file *file, int from_tty,
struct cmd_list_element *c,
const char *value)
{
- fprintf_filtered (file, _("The maximum number of target hardware "
- "watchpoints is %s.\n"), value);
+ gdb_printf (file, _("The maximum number of target hardware "
+ "watchpoints is %s.\n"), value);
}
/* Show the length limit (in bytes) for hardware watchpoints. */
@@ -1817,8 +1822,8 @@ show_hardware_watchpoint_length_limit (struct ui_file *file, int from_tty,
struct cmd_list_element *c,
const char *value)
{
- fprintf_filtered (file, _("The maximum length (in bytes) of a target "
- "hardware watchpoint is %s.\n"), value);
+ gdb_printf (file, _("The maximum length (in bytes) of a target "
+ "hardware watchpoint is %s.\n"), value);
}
/* Show the number of hardware breakpoints that can be used. */
@@ -1828,8 +1833,8 @@ show_hardware_breakpoint_limit (struct ui_file *file, int from_tty,
struct cmd_list_element *c,
const char *value)
{
- fprintf_filtered (file, _("The maximum number of target hardware "
- "breakpoints is %s.\n"), value);
+ gdb_printf (file, _("The maximum number of target hardware "
+ "breakpoints is %s.\n"), value);
}
/* Controls the maximum number of characters to display in the debug output
@@ -1845,8 +1850,8 @@ show_remote_packet_max_chars (struct ui_file *file, int from_tty,
struct cmd_list_element *c,
const char *value)
{
- fprintf_filtered (file, _("Number of remote packet characters to "
- "display is %s.\n"), value);
+ gdb_printf (file, _("Number of remote packet characters to "
+ "display is %s.\n"), value);
}
long
@@ -1930,16 +1935,16 @@ show_packet_config_cmd (ui_file *file, struct packet_config *config)
switch (config->detect)
{
case AUTO_BOOLEAN_AUTO:
- fprintf_filtered (file,
- _("Support for the `%s' packet "
- "is auto-detected, currently %s.\n"),
- config->name, support);
+ gdb_printf (file,
+ _("Support for the `%s' packet "
+ "is auto-detected, currently %s.\n"),
+ config->name, support);
break;
case AUTO_BOOLEAN_TRUE:
case AUTO_BOOLEAN_FALSE:
- fprintf_filtered (file,
- _("Support for the `%s' packet is currently %s.\n"),
- config->name, support);
+ gdb_printf (file,
+ _("Support for the `%s' packet is currently %s.\n"),
+ config->name, support);
break;
}
}
@@ -1970,15 +1975,17 @@ add_packet_config_cmd (struct packet_config *config, const char *name,
/* set/show remote NAME-packet {auto,on,off} -- legacy. */
if (legacy)
{
- /* It's not clear who should take ownership of this string, so, for
- now, make it static, and give copies to each of the add_alias_cmd
- calls below. */
- static gdb::unique_xmalloc_ptr<char> legacy_name
+ /* It's not clear who should take ownership of the LEGACY_NAME string
+ created below, so, for now, place the string into a static vector
+ which ensures the strings is released when GDB exits. */
+ static std::vector<gdb::unique_xmalloc_ptr<char>> legacy_names;
+ gdb::unique_xmalloc_ptr<char> legacy_name
= xstrprintf ("%s-packet", name);
add_alias_cmd (legacy_name.get (), cmds.set, class_obscure, 0,
&remote_set_cmdlist);
add_alias_cmd (legacy_name.get (), cmds.show, class_obscure, 0,
&remote_show_cmdlist);
+ legacy_names.emplace_back (std::move (legacy_name));
}
}
@@ -3147,14 +3154,15 @@ read_ptid (const char *buf, const char **obuf)
return null_ptid;
}
- /* Since the stub is not sending a process id, then default to
- what's in inferior_ptid, unless it's null at this point. If so,
+ /* Since the stub is not sending a process id, default to what's
+ current_inferior, unless it doesn't have a PID yet. If so,
then since there's no way to know the pid of the reported
threads, use the magic number. */
- if (inferior_ptid == null_ptid)
+ inferior *inf = current_inferior ();
+ if (inf->pid == 0)
pid = magic_null_ptid.pid ();
else
- pid = inferior_ptid.pid ();
+ pid = inf->pid;
if (obuf)
*obuf = pp;
@@ -4643,7 +4651,7 @@ remote_target::process_initial_stop_replies (int from_tty)
gdb_assert (!this->is_async_p ());
SCOPE_EXIT { target_async (0); };
target_async (1);
- stop_all_threads ();
+ stop_all_threads ("remote connect in all-stop");
}
/* If all threads of an inferior were already stopped, we
@@ -5013,12 +5021,24 @@ remote_target::start_remote_1 (int from_tty, int extended_p)
target_async (1);
}
- /* If we connected to a live target, do some additional setup. */
- if (target_has_execution ())
+ /* Give the target a chance to look up symbols. */
+ for (inferior *inf : all_inferiors (this))
{
+ /* The inferiors that exist at this point were created from what
+ was found already running on the remote side, so we know they
+ have execution. */
+ gdb_assert (this->has_execution (inf));
+
/* No use without a symbol-file. */
- if (current_program_space->symfile_object_file)
- remote_check_symbols ();
+ if (inf->pspace->symfile_object_file == nullptr)
+ continue;
+
+ /* Need to switch to a specific thread, because remote_check_symbols
+ uses INFERIOR_PTID to set the general thread. */
+ scoped_restore_current_thread restore_thread;
+ thread_info *thread = any_thread_of_inferior (inf);
+ switch_to_thread (thread);
+ this->remote_check_symbols ();
}
/* Possibly the target has been engaged in a trace run started
@@ -5028,7 +5048,7 @@ remote_target::start_remote_1 (int from_tty, int extended_p)
struct uploaded_tp *uploaded_tps = NULL;
if (current_trace_status ()->running)
- printf_filtered (_("Trace is already running on the target.\n"));
+ gdb_printf (_("Trace is already running on the target.\n"));
upload_tracepoints (&uploaded_tps);
@@ -5115,13 +5135,10 @@ remote_target::remote_check_symbols ()
char *tmp;
int end;
- /* The remote side has no concept of inferiors that aren't running
- yet, it only knows about running processes. If we're connected
- but our current inferior is not running, we should not invite the
- remote target to request symbol lookups related to its
- (unrelated) current process. */
- if (!target_has_execution ())
- return;
+ /* It doesn't make sense to send a qSymbol packet for an inferior that
+ doesn't have execution, because the remote side doesn't know about
+ inferiors without execution. */
+ gdb_assert (target_has_execution ());
if (packet_support (PACKET_qSymbol) == PACKET_DISABLE)
return;
@@ -5156,7 +5173,7 @@ remote_target::remote_check_symbols ()
else
{
int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
- CORE_ADDR sym_addr = BMSYMBOL_VALUE_ADDRESS (sym);
+ CORE_ADDR sym_addr = sym.value_address ();
/* If this is a function address, return the start of code
instead of any data function descriptor. */
@@ -5783,9 +5800,9 @@ remote_target::open_1 (const char *name, int from_tty, int extended_p)
if (from_tty)
{
- puts_filtered ("Remote debugging using ");
- puts_filtered (name);
- puts_filtered ("\n");
+ gdb_puts ("Remote debugging using ");
+ gdb_puts (name);
+ gdb_puts ("\n");
}
/* Switch to using the remote target now. */
@@ -5961,7 +5978,7 @@ remote_target::remote_detach_1 (inferior *inf, int from_tty)
/* Exit only if this is the only active inferior. */
if (from_tty && !rs->extended && number_of_live_inferiors (this) == 1)
- puts_filtered (_("Ending remote debugging.\n"));
+ gdb_puts (_("Ending remote debugging.\n"));
/* See if any thread of the inferior we are detaching has a pending fork
status. In that case, we must detach from the child resulting from
@@ -6006,8 +6023,8 @@ remote_target::remote_detach_1 (inferior *inf, int from_tty)
target_mourn_inferior (inferior_ptid);
if (print_inferior_events)
- printf_unfiltered (_("[Inferior %d (%s) detached]\n"),
- inf->num, infpid.c_str ());
+ gdb_printf (_("[Inferior %d (%s) detached]\n"),
+ inf->num, infpid.c_str ());
}
else
{
@@ -6094,7 +6111,7 @@ remote_target::disconnect (const char *args, int from_tty)
remote_unpush_target (this);
if (from_tty)
- puts_filtered ("Ending remote debugging.\n");
+ gdb_puts ("Ending remote debugging.\n");
}
/* Attach to the process specified by ARGS. If FROM_TTY is non-zero,
@@ -6185,16 +6202,12 @@ extended_remote_target::attach (const char *args, int from_tty)
= remote_notif_parse (this, &notif_client_stop, wait_status);
push_stop_reply ((struct stop_reply *) reply);
-
- if (target_can_async_p ())
- target_async (1);
}
else
{
gdb_assert (wait_status == NULL);
gdb_assert (target_can_async_p ());
- target_async (1);
}
}
@@ -6277,9 +6290,8 @@ remote_target::remote_vcont_probe ()
thread to be resumed is PTID; STEP and SIGGNAL indicate whether the
resumed thread should be single-stepped and/or signalled. If PTID
equals minus_one_ptid, then all threads are resumed; if PTID
- represents a process, then all threads of the process are resumed;
- the thread to be stepped and/or signalled is given in the global
- INFERIOR_PTID. */
+ represents a process, then all threads of the process are
+ resumed. */
char *
remote_target::append_resumption (char *p, char *endp,
@@ -6436,18 +6448,15 @@ remote_target::remote_resume_with_hc (ptid_t ptid, int step,
putpkt (buf);
}
-/* Resume the remote inferior by using a "vCont" packet. The thread
- to be resumed is PTID; STEP and SIGGNAL indicate whether the
- resumed thread should be single-stepped and/or signalled. If PTID
- equals minus_one_ptid, then all threads are resumed; the thread to
- be stepped and/or signalled is given in the global INFERIOR_PTID.
- This function returns non-zero iff it resumes the inferior.
+/* Resume the remote inferior by using a "vCont" packet. SCOPE_PTID,
+ STEP, and SIGGNAL have the same meaning as in target_resume. This
+ function returns non-zero iff it resumes the inferior.
This function issues a strict subset of all possible vCont commands
at the moment. */
int
-remote_target::remote_resume_with_vcont (ptid_t ptid, int step,
+remote_target::remote_resume_with_vcont (ptid_t scope_ptid, int step,
enum gdb_signal siggnal)
{
struct remote_state *rs = get_remote_state ();
@@ -6473,7 +6482,7 @@ remote_target::remote_resume_with_vcont (ptid_t ptid, int step,
p += xsnprintf (p, endp - p, "vCont");
- if (ptid == magic_null_ptid)
+ if (scope_ptid == magic_null_ptid)
{
/* MAGIC_NULL_PTID means that we don't have any active threads,
so we don't have any TID numbers the inferior will
@@ -6481,7 +6490,7 @@ remote_target::remote_resume_with_vcont (ptid_t ptid, int step,
a TID. */
append_resumption (p, endp, minus_one_ptid, step, siggnal);
}
- else if (ptid == minus_one_ptid || ptid.is_pid ())
+ else if (scope_ptid == minus_one_ptid || scope_ptid.is_pid ())
{
/* Resume all threads (of all processes, or of a single
process), with preference for INFERIOR_PTID. This assumes
@@ -6495,15 +6504,15 @@ remote_target::remote_resume_with_vcont (ptid_t ptid, int step,
/* Also pass down any pending signaled resumption for other
threads not the current. */
- p = append_pending_thread_resumptions (p, endp, ptid);
+ p = append_pending_thread_resumptions (p, endp, scope_ptid);
/* And continue others without a signal. */
- append_resumption (p, endp, ptid, /*step=*/ 0, GDB_SIGNAL_0);
+ append_resumption (p, endp, scope_ptid, /*step=*/ 0, GDB_SIGNAL_0);
}
else
{
- /* Scheduler locking; resume only PTID. */
- append_resumption (p, endp, ptid, step, siggnal);
+ /* Scheduler locking; resume only SCOPE_PTID. */
+ append_resumption (p, endp, scope_ptid, step, siggnal);
}
gdb_assert (strlen (rs->buf.data ()) < get_remote_packet_size ());
@@ -6526,7 +6535,7 @@ remote_target::remote_resume_with_vcont (ptid_t ptid, int step,
/* Tell the remote machine to resume. */
void
-remote_target::resume (ptid_t ptid, int step, enum gdb_signal siggnal)
+remote_target::resume (ptid_t scope_ptid, int step, enum gdb_signal siggnal)
{
struct remote_state *rs = get_remote_state ();
@@ -6539,18 +6548,20 @@ remote_target::resume (ptid_t ptid, int step, enum gdb_signal siggnal)
able to do vCont action coalescing. */
if (target_is_non_stop_p () && ::execution_direction != EXEC_REVERSE)
{
- remote_thread_info *remote_thr;
-
- if (minus_one_ptid == ptid || ptid.is_pid ())
- remote_thr = get_remote_thread_info (this, inferior_ptid);
- else
- remote_thr = get_remote_thread_info (this, ptid);
+ remote_thread_info *remote_thr
+ = get_remote_thread_info (inferior_thread ());
/* We don't expect the core to ask to resume an already resumed (from
its point of view) thread. */
gdb_assert (remote_thr->get_resume_state () == resume_state::NOT_RESUMED);
remote_thr->set_resumed_pending_vcont (step, siggnal);
+
+ /* There's actually nothing that says that the core can't
+ request a wildcard resume in non-stop mode, though. It's
+ just that we know it doesn't currently, so we don't bother
+ with it. */
+ gdb_assert (scope_ptid == inferior_ptid);
return;
}
@@ -6566,23 +6577,13 @@ remote_target::resume (ptid_t ptid, int step, enum gdb_signal siggnal)
rs->last_resume_exec_dir = ::execution_direction;
/* Prefer vCont, and fallback to s/c/S/C, which use Hc. */
- if (!remote_resume_with_vcont (ptid, step, siggnal))
- remote_resume_with_hc (ptid, step, siggnal);
+ if (!remote_resume_with_vcont (scope_ptid, step, siggnal))
+ remote_resume_with_hc (scope_ptid, step, siggnal);
/* Update resumed state tracked by the remote target. */
- for (thread_info *tp : all_non_exited_threads (this, ptid))
+ for (thread_info *tp : all_non_exited_threads (this, scope_ptid))
get_remote_thread_info (tp)->set_resumed ();
- /* We are about to start executing the inferior, let's register it
- with the event loop. NOTE: this is the one place where all the
- execution commands end up. We could alternatively do this in each
- of the execution commands in infcmd.c. */
- /* FIXME: ezannoni 1999-09-28: We may need to move this out of here
- into infcmd.c in order to allow inferior function calls to work
- NOT asynchronously. */
- if (target_can_async_p ())
- target_async (1);
-
/* We've just told the target to resume. The remote server will
wait for the inferior to stop, and then send a stop reply. In
the mean time, we can't start another command/query ourselves
@@ -7308,9 +7309,10 @@ remote_target::remove_new_fork_children (threads_listing_context *context)
remote_notif_get_pending_events (notif);
for (auto &event : get_remote_state ()->stop_reply_queue)
if (event->ws.kind () == TARGET_WAITKIND_FORKED
- || event->ws.kind () == TARGET_WAITKIND_VFORKED
- || event->ws.kind () == TARGET_WAITKIND_THREAD_EXITED)
+ || event->ws.kind () == TARGET_WAITKIND_VFORKED)
context->remove_thread (event->ws.child_ptid ());
+ else if (event->ws.kind () == TARGET_WAITKIND_THREAD_EXITED)
+ context->remove_thread (event->ptid);
}
/* Check whether any event pending in the vStopped queue would prevent a
@@ -7436,9 +7438,9 @@ remote_target::remote_notif_remove_queued_reply (ptid_t ptid)
}
if (notif_debug)
- fprintf_unfiltered (gdb_stdlog,
- "notif: discard queued event: 'Stop' in %s\n",
- target_pid_to_str (ptid).c_str ());
+ gdb_printf (gdb_stdlog,
+ "notif: discard queued event: 'Stop' in %s\n",
+ ptid.to_string ().c_str ());
return result;
}
@@ -7474,10 +7476,10 @@ remote_target::push_stop_reply (struct stop_reply *new_event)
rs->stop_reply_queue.push_back (stop_reply_up (new_event));
if (notif_debug)
- fprintf_unfiltered (gdb_stdlog,
- "notif: push 'Stop' %s to queue %d\n",
- target_pid_to_str (new_event->ptid).c_str (),
- int (rs->stop_reply_queue.size ()));
+ gdb_printf (gdb_stdlog,
+ "notif: push 'Stop' %s to queue %d\n",
+ new_event->ptid.to_string ().c_str (),
+ int (rs->stop_reply_queue.size ()));
/* Mark the pending event queue only if async mode is currently enabled.
If async mode is not currently enabled, then, if it later becomes
@@ -7900,9 +7902,9 @@ remote_target::remote_notif_get_pending_events (notif_client *nc)
if (rs->notif_state->pending_event[nc->id] != NULL)
{
if (notif_debug)
- fprintf_unfiltered (gdb_stdlog,
- "notif: process: '%s' ack pending event\n",
- nc->name);
+ gdb_printf (gdb_stdlog,
+ "notif: process: '%s' ack pending event\n",
+ nc->name);
/* acknowledge */
nc->ack (this, nc, rs->buf.data (),
@@ -7921,9 +7923,9 @@ remote_target::remote_notif_get_pending_events (notif_client *nc)
else
{
if (notif_debug)
- fprintf_unfiltered (gdb_stdlog,
- "notif: process: '%s' no pending reply\n",
- nc->name);
+ gdb_printf (gdb_stdlog,
+ "notif: process: '%s' no pending reply\n",
+ nc->name);
}
}
@@ -8276,7 +8278,7 @@ remote_target::wait_as (ptid_t ptid, target_waitstatus *status,
/* Zero length reply means that we tried 'S' or 'C' and the
remote system doesn't support it. */
target_terminal::ours_for_output ();
- printf_filtered
+ gdb_printf
("Can't send signals to this remote system. %s not sent.\n",
gdb_signal_to_name (rs->last_sent_signal));
rs->last_sent_signal = GDB_SIGNAL_0;
@@ -9420,11 +9422,6 @@ remote_target::flash_done ()
}
}
-void
-remote_target::files_info ()
-{
- puts_filtered ("Debugging a target over a serial line.\n");
-}
/* Stuff for dealing with the packets which are part of this protocol.
See comment at top of file for details. */
@@ -9526,7 +9523,7 @@ escape_buffer (const char *buf, int n)
string_file stb;
stb.putstrn (buf, n, '\\');
- return std::move (stb.string ());
+ return stb.release ();
}
int
@@ -9845,7 +9842,7 @@ remote_target::read_frame (gdb::char_vector *buf_p)
}
buf[bc] = '\0';
- printf_filtered (_("Invalid run length encoding: %s\n"), buf);
+ gdb_printf (_("Invalid run length encoding: %s\n"), buf);
return -1;
}
default:
@@ -9874,7 +9871,7 @@ static void
show_watchdog (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Watchdog timer is %s.\n"), value);
+ gdb_printf (file, _("Watchdog timer is %s.\n"), value);
}
/* Read a packet from the remote machine, with error checking, and
@@ -9981,7 +9978,7 @@ remote_target::getpkt_or_notif_sane_1 (gdb::char_vector *buf,
{
/* We have tried hard enough, and just can't receive the
packet/notification. Give up. */
- printf_unfiltered (_("Ignoring packet error, continuing...\n"));
+ gdb_printf (_("Ignoring packet error, continuing...\n"));
/* Skip the ack char if we're in no-ack mode. */
if (!rs->noack_mode)
@@ -11074,14 +11071,14 @@ compare_sections_command (const char *args, int from_tty)
paddress (target_gdbarch (), lma),
paddress (target_gdbarch (), lma + size));
- printf_filtered ("Section %s, range %s -- %s: ", sectname,
- paddress (target_gdbarch (), lma),
- paddress (target_gdbarch (), lma + size));
+ gdb_printf ("Section %s, range %s -- %s: ", sectname,
+ paddress (target_gdbarch (), lma),
+ paddress (target_gdbarch (), lma + size));
if (res)
- printf_filtered ("matched.\n");
+ gdb_printf ("matched.\n");
else
{
- printf_filtered ("MIS-MATCHED!\n");
+ gdb_printf ("MIS-MATCHED!\n");
mismatched++;
}
}
@@ -11089,7 +11086,7 @@ compare_sections_command (const char *args, int from_tty)
warning (_("One or more sections of the target image does not match\n\
the loaded file\n"));
if (args && !matched)
- printf_filtered (_("No loaded section named '%s'.\n"), args);
+ gdb_printf (_("No loaded section named '%s'.\n"), args);
}
/* Write LEN bytes from WRITEBUF into OBJECT_NAME/ANNEX at OFFSET
@@ -11584,7 +11581,7 @@ remote_target::rcmd (const char *command, struct ui_file *outbuf)
if (strcmp (buf, "OK") == 0)
break;
if (strlen (buf) == 3 && buf[0] == 'E'
- && isdigit (buf[1]) && isdigit (buf[2]))
+ && isxdigit (buf[1]) && isxdigit (buf[2]))
{
error (_("Protocol error with Rcmd"));
}
@@ -11592,7 +11589,7 @@ remote_target::rcmd (const char *command, struct ui_file *outbuf)
{
char c = (fromhex (p[0]) << 4) + fromhex (p[1]);
- fputc_unfiltered (c, outbuf);
+ gdb_putc (c, outbuf);
}
break;
}
@@ -11621,18 +11618,18 @@ struct cli_packet_command_callbacks : public send_remote_packet_callbacks
void sending (gdb::array_view<const char> &buf) override
{
- puts_filtered ("sending: ");
+ gdb_puts ("sending: ");
print_packet (buf);
- puts_filtered ("\n");
+ gdb_puts ("\n");
}
/* Called with BUF, the reply from the remote target. */
void received (gdb::array_view<const char> &buf) override
{
- puts_filtered ("received: \"");
+ gdb_puts ("received: \"");
print_packet (buf);
- puts_filtered ("\"\n");
+ gdb_puts ("\"\n");
}
private:
@@ -11649,12 +11646,12 @@ private:
{
gdb_byte c = buf[i];
if (isprint (c))
- fputc_unfiltered (c, &stb);
+ gdb_putc (c, &stb);
else
- fprintf_unfiltered (&stb, "\\x%02x", (unsigned char) c);
+ gdb_printf (&stb, "\\x%02x", (unsigned char) c);
}
- puts_filtered (stb.string ().c_str ());
+ gdb_puts (stb.string ().c_str ());
}
};
@@ -11723,7 +11720,7 @@ threadset_test_cmd (const char *cmd, int tty)
{
int sample_thread = SAMPLE_THREAD;
- printf_filtered (_("Remote threadset test\n"));
+ gdb_printf (_("Remote threadset test\n"));
set_general_thread (sample_thread);
}
@@ -11736,9 +11733,9 @@ threadalive_test (const char *cmd, int tty)
ptid_t ptid = ptid_t (pid, sample_thread, 0);
if (remote_thread_alive (ptid))
- printf_filtered ("PASS: Thread alive test\n");
+ gdb_printf ("PASS: Thread alive test\n");
else
- printf_filtered ("FAIL: Thread alive test\n");
+ gdb_printf ("FAIL: Thread alive test\n");
}
void output_threadid (char *title, threadref *ref);
@@ -11750,7 +11747,7 @@ output_threadid (char *title, threadref *ref)
pack_threadid (&hexid[0], ref); /* Convert thread id into hex. */
hexid[16] = 0;
- printf_filtered ("%s %s\n", title, (&hexid[0]));
+ gdb_printf ("%s %s\n", title, (&hexid[0]));
}
static void
@@ -11761,10 +11758,10 @@ threadlist_test_cmd (const char *cmd, int tty)
int done, result_count;
threadref threadlist[3];
- printf_filtered ("Remote Threadlist test\n");
+ gdb_printf ("Remote Threadlist test\n");
if (!remote_get_threadlist (startflag, &nextthread, 3, &done,
&result_count, &threadlist[0]))
- printf_filtered ("FAIL: threadlist test\n");
+ gdb_printf ("FAIL: threadlist test\n");
else
{
threadref *scan = threadlist;
@@ -11779,9 +11776,9 @@ void
display_thread_info (struct gdb_ext_thread_info *info)
{
output_threadid ("Threadid: ", &info->threadid);
- printf_filtered ("Name: %s\n ", info->shortname);
- printf_filtered ("State: %s\n", info->display);
- printf_filtered ("other: %s\n\n", info->more_display);
+ gdb_printf ("Name: %s\n ", info->shortname);
+ gdb_printf ("State: %s\n", info->display);
+ gdb_printf ("other: %s\n\n", info->more_display);
}
int
@@ -11806,9 +11803,9 @@ threadinfo_test_cmd (const char *cmd, int tty)
int set;
int_to_threadref (&thread, athread);
- printf_filtered ("Remote Threadinfo test\n");
+ gdb_printf ("Remote Threadinfo test\n");
if (!get_and_display_threadinfo (&thread))
- printf_filtered ("FAIL cannot get thread info\n");
+ gdb_printf ("FAIL cannot get thread info\n");
}
static int
@@ -11821,7 +11818,7 @@ thread_display_step (threadref *ref, void *context)
static void
threadlist_update_test_cmd (const char *cmd, int tty)
{
- printf_filtered ("Remote Threadlist update test\n");
+ gdb_printf ("Remote Threadlist update test\n");
remote_threadlist_iterator (thread_display_step, 0, CRAZY_MAX_THREADS);
}
@@ -12332,8 +12329,8 @@ remote_target::remote_hostio_open (inferior *inf, const char *filename,
{
static int warning_issued = 0;
- printf_unfiltered (_("Reading %s from remote target...\n"),
- filename);
+ gdb_printf (_("Reading %s from remote target...\n"),
+ filename);
if (!warning_issued)
{
@@ -12921,7 +12918,7 @@ remote_target::remote_file_put (const char *local_file, const char *remote_file,
remote_hostio_error (remote_errno);
if (from_tty)
- printf_filtered (_("Successfully sent file \"%s\".\n"), local_file);
+ gdb_printf (_("Successfully sent file \"%s\".\n"), local_file);
}
void
@@ -12980,7 +12977,7 @@ remote_target::remote_file_get (const char *remote_file, const char *local_file,
remote_hostio_error (remote_errno);
if (from_tty)
- printf_filtered (_("Successfully fetched file \"%s\".\n"), remote_file);
+ gdb_printf (_("Successfully fetched file \"%s\".\n"), remote_file);
}
void
@@ -13004,7 +13001,7 @@ remote_target::remote_file_delete (const char *remote_file, int from_tty)
remote_hostio_error (remote_errno);
if (from_tty)
- printf_filtered (_("Successfully deleted file \"%s\".\n"), remote_file);
+ gdb_printf (_("Successfully deleted file \"%s\".\n"), remote_file);
}
static void
@@ -13243,7 +13240,8 @@ remote_target::download_tracepoint (struct bp_location *loc)
warning (_("Target does not support fast tracepoints, "
"downloading %d as regular tracepoint"), b->number);
}
- else if (b->type == bp_static_tracepoint)
+ else if (b->type == bp_static_tracepoint
+ || b->type == bp_static_marker_tracepoint)
{
/* Only test for support at download time; we may not know
target capabilities at definition time. */
@@ -14110,12 +14108,15 @@ remote_target::btrace_sync_conf (const btrace_config *conf)
}
}
-/* Read the current thread's btrace configuration from the target and
- store it into CONF. */
+/* Read TP's btrace configuration from the target and store it into CONF. */
static void
-btrace_read_config (struct btrace_config *conf)
+btrace_read_config (thread_info *tp, struct btrace_config *conf)
{
+ /* target_read_stralloc relies on INFERIOR_PTID. */
+ scoped_restore_current_thread restore_thread;
+ switch_to_thread (tp);
+
gdb::optional<gdb::char_vector> xml
= target_read_stralloc (current_inferior ()->top_target (),
TARGET_OBJECT_BTRACE_CONF, "");
@@ -14139,14 +14140,10 @@ remote_target::remote_btrace_maybe_reopen ()
if (packet_support (PACKET_qXfer_btrace_conf) != PACKET_ENABLE)
return;
- scoped_restore_current_thread restore_thread;
-
for (thread_info *tp : all_non_exited_threads (this))
{
- set_general_thread (tp->ptid);
-
memset (&rs->btrace_config, 0x00, sizeof (struct btrace_config));
- btrace_read_config (&rs->btrace_config);
+ btrace_read_config (tp, &rs->btrace_config);
if (rs->btrace_config.format == BTRACE_FORMAT_NONE)
continue;
@@ -14172,8 +14169,8 @@ remote_target::remote_btrace_maybe_reopen ()
{
btrace_target_pushed = 1;
record_btrace_push_target ();
- printf_filtered (_("Target is recording using %s.\n"),
- btrace_format_string (rs->btrace_config.format));
+ gdb_printf (_("Target is recording using %s.\n"),
+ btrace_format_string (rs->btrace_config.format));
}
tp->btrace.target = XCNEW (struct btrace_target_info);
@@ -14185,7 +14182,8 @@ remote_target::remote_btrace_maybe_reopen ()
/* Enable branch tracing. */
struct btrace_target_info *
-remote_target::enable_btrace (ptid_t ptid, const struct btrace_config *conf)
+remote_target::enable_btrace (thread_info *tp,
+ const struct btrace_config *conf)
{
struct btrace_target_info *tinfo = NULL;
struct packet_config *packet = NULL;
@@ -14209,6 +14207,7 @@ remote_target::enable_btrace (ptid_t ptid, const struct btrace_config *conf)
btrace_sync_conf (conf);
+ ptid_t ptid = tp->ptid;
set_general_thread (ptid);
buf += xsnprintf (buf, endbuf - buf, "%s", packet->name);
@@ -14232,7 +14231,7 @@ remote_target::enable_btrace (ptid_t ptid, const struct btrace_config *conf)
tracing itself is not impacted. */
try
{
- btrace_read_config (&tinfo->conf);
+ btrace_read_config (tp, &tinfo->conf);
}
catch (const gdb_exception_error &err)
{
@@ -14592,28 +14591,55 @@ show_remote_cmd (const char *args, int from_tty)
static void
remote_new_objfile (struct objfile *objfile)
{
- remote_target *remote = get_current_remote_target ();
+ /* The objfile change happened in that program space. */
+ program_space *pspace = current_program_space;
- /* First, check whether the current inferior's process target is a remote
- target. */
- if (remote == nullptr)
- return;
+ /* The affected program space is possibly shared by multiple inferiors.
+ Consider sending a qSymbol packet for each of the inferiors using that
+ program space. */
+ for (inferior *inf : all_inferiors ())
+ {
+ if (inf->pspace != pspace)
+ continue;
- /* When we are attaching or handling a fork child and the shared library
- subsystem reads the list of loaded libraries, we receive new objfile
- events in between each found library. The libraries are read in an
- undefined order, so if we gave the remote side a chance to look up
- symbols between each objfile, we might give it an inconsistent picture
- of the inferior. It could appear that a library A appears loaded but
- a library B does not, even though library A requires library B. That
- would present a state that couldn't normally exist in the inferior.
-
- So, skip these events, we'll give the remote a chance to look up symbols
- once all the loaded libraries and their symbols are known to GDB. */
- if (current_inferior ()->in_initial_library_scan)
- return;
+ /* Check whether the inferior's process target is a remote target. */
+ remote_target *remote = as_remote_target (inf->process_target ());
+ if (remote == nullptr)
+ continue;
+
+ /* When we are attaching or handling a fork child and the shared library
+ subsystem reads the list of loaded libraries, we receive new objfile
+ events in between each found library. The libraries are read in an
+ undefined order, so if we gave the remote side a chance to look up
+ symbols between each objfile, we might give it an inconsistent picture
+ of the inferior. It could appear that a library A appears loaded but
+ a library B does not, even though library A requires library B. That
+ would present a state that couldn't normally exist in the inferior.
+
+ So, skip these events, we'll give the remote a chance to look up
+ symbols once all the loaded libraries and their symbols are known to
+ GDB. */
+ if (inf->in_initial_library_scan)
+ continue;
+
+ if (!remote->has_execution (inf))
+ continue;
+
+ /* Need to switch to a specific thread, because remote_check_symbols will
+ set the general thread using INFERIOR_PTID.
- remote->remote_check_symbols ();
+ It's possible to have inferiors with no thread here, because we are
+ called very early in the connection process, while the inferior is
+ being set up, before threads are added. Just skip it, start_remote_1
+ also calls remote_check_symbols when it's done setting things up. */
+ thread_info *thread = any_thread_of_inferior (inf);
+ if (thread != nullptr)
+ {
+ scoped_restore_current_thread restore_thread;
+ switch_to_thread (thread);
+ remote->remote_check_symbols ();
+ }
+ }
}
/* Pull all the tracepoints defined on the target and create local
@@ -14670,9 +14696,9 @@ show_range_stepping (struct ui_file *file, int from_tty,
struct cmd_list_element *c,
const char *value)
{
- fprintf_filtered (file,
- _("Debugger's willingness to use range stepping "
- "is %s.\n"), value);
+ gdb_printf (file,
+ _("Debugger's willingness to use range stepping "
+ "is %s.\n"), value);
}
/* Return true if the vCont;r action is supported by the remote
@@ -14709,17 +14735,17 @@ static void
show_remote_debug (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Debugging of remote protocol is %s.\n"),
- value);
+ gdb_printf (file, _("Debugging of remote protocol is %s.\n"),
+ value);
}
static void
show_remote_timeout (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file,
- _("Timeout limit to wait for target to respond is %s.\n"),
- value);
+ gdb_printf (file,
+ _("Timeout limit to wait for target to respond is %s.\n"),
+ value);
}
/* Implement the "supports_memory_tagging" target_ops method. */
diff --git a/gdb/reverse.c b/gdb/reverse.c
index d0652b88994..dc417497b7a 100644
--- a/gdb/reverse.c
+++ b/gdb/reverse.c
@@ -150,8 +150,8 @@ save_bookmark_command (const char *args, int from_tty)
b1 = b1->next;
b1->next = b;
}
- printf_filtered (_("Saved bookmark %d at %s\n"), b->number,
- paddress (gdbarch, b->sal.pc));
+ gdb_printf (_("Saved bookmark %d at %s\n"), b->number,
+ paddress (gdbarch, b->sal.pc));
}
/* Implement "delete bookmark" command. */
@@ -288,16 +288,16 @@ bookmark_1 (int bnum)
{
if (bnum == -1 || bnum == b->number)
{
- printf_filtered (" %d %s '%s'\n",
- b->number,
- paddress (gdbarch, b->pc),
- b->opaque_data);
+ gdb_printf (" %d %s '%s'\n",
+ b->number,
+ paddress (gdbarch, b->pc),
+ b->opaque_data);
matched++;
}
}
if (bnum > 0 && matched == 0)
- printf_filtered ("No bookmark #%d\n", bnum);
+ gdb_printf ("No bookmark #%d\n", bnum);
return matched;
}
@@ -308,7 +308,7 @@ static void
info_bookmarks_command (const char *args, int from_tty)
{
if (!bookmark_chain)
- printf_filtered (_("No bookmarks.\n"));
+ gdb_printf (_("No bookmarks.\n"));
else if (args == NULL || *args == '\0')
bookmark_1 (-1);
else
diff --git a/gdb/riscv-tdep.c b/gdb/riscv-tdep.c
index 886996ce5b7..69f2123dcdb 100644
--- a/gdb/riscv-tdep.c
+++ b/gdb/riscv-tdep.c
@@ -129,7 +129,7 @@ struct riscv_unwind_cache
/* RISC-V specific register group for CSRs. */
-static reggroup *csr_reggroup = NULL;
+static const reggroup *csr_reggroup = nullptr;
/* Callback function for user_reg_add. */
@@ -701,9 +701,9 @@ show_use_compressed_breakpoints (struct ui_file *file, int from_tty,
struct cmd_list_element *c,
const char *value)
{
- fprintf_filtered (file,
- _("Debugger's use of compressed breakpoints is set "
- "to %s.\n"), value);
+ gdb_printf (file,
+ _("Debugger's use of compressed breakpoints is set "
+ "to %s.\n"), value);
}
/* The set and show lists for 'set riscv' and 'show riscv' prefixes. */
@@ -723,9 +723,9 @@ show_riscv_debug_variable (struct ui_file *file, int from_tty,
struct cmd_list_element *c,
const char *value)
{
- fprintf_filtered (file,
- _("RiscV debug variable `%s' is set to: %s\n"),
- c->name, value);
+ gdb_printf (file,
+ _("RiscV debug variable `%s' is set to: %s\n"),
+ c->name, value);
}
/* See riscv-tdep.h. */
@@ -832,13 +832,13 @@ riscv_breakpoint_kind_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr)
const char *bp = (unaligned_p || riscv_insn_length (buf[0]) == 2
? "C.EBREAK" : "EBREAK");
- fprintf_unfiltered (gdb_stdlog, "Using %s for breakpoint at %s ",
- bp, paddress (gdbarch, *pcptr));
+ gdb_printf (gdb_stdlog, "Using %s for breakpoint at %s ",
+ bp, paddress (gdbarch, *pcptr));
if (unaligned_p)
- fprintf_unfiltered (gdb_stdlog, "(unaligned address)\n");
+ gdb_printf (gdb_stdlog, "(unaligned address)\n");
else
- fprintf_unfiltered (gdb_stdlog, "(instruction length %d)\n",
- riscv_insn_length (buf[0]));
+ gdb_printf (gdb_stdlog, "(instruction length %d)\n",
+ riscv_insn_length (buf[0]));
}
if (unaligned_p || riscv_insn_length (buf[0]) == 2)
return 2;
@@ -1037,8 +1037,8 @@ riscv_print_one_register_info (struct gdbarch *gdbarch,
int print_raw_format;
enum tab_stops { value_column_1 = 15 };
- fputs_filtered (name, file);
- print_spaces_filtered (value_column_1 - strlen (name), file);
+ gdb_puts (name, file);
+ print_spaces (value_column_1 - strlen (name), file);
try
{
@@ -1049,7 +1049,7 @@ riscv_print_one_register_info (struct gdbarch *gdbarch,
{
/* Handle failure to read a register without interrupting the entire
'info registers' flow. */
- fprintf_filtered (file, "%s\n", ex.what ());
+ gdb_printf (file, "%s\n", ex.what ());
return;
}
@@ -1078,10 +1078,10 @@ riscv_print_one_register_info (struct gdbarch *gdbarch,
if (print_raw_format)
{
- fprintf_filtered (file, "\t(raw ");
+ gdb_printf (file, "\t(raw ");
print_hex_chars (file, valaddr, TYPE_LENGTH (regtype), byte_order,
true);
- fprintf_filtered (file, ")");
+ gdb_printf (file, ")");
}
}
else
@@ -1105,28 +1105,28 @@ riscv_print_one_register_info (struct gdbarch *gdbarch,
of the number of bits in MSTATUS. */
d = value_as_long (val);
xlen = size * 8;
- fprintf_filtered (file,
- "\tSD:%X VM:%02X MXR:%X PUM:%X MPRV:%X XS:%X "
- "FS:%X MPP:%x HPP:%X SPP:%X MPIE:%X HPIE:%X "
- "SPIE:%X UPIE:%X MIE:%X HIE:%X SIE:%X UIE:%X",
- (int) ((d >> (xlen - 1)) & 0x1),
- (int) ((d >> 24) & 0x1f),
- (int) ((d >> 19) & 0x1),
- (int) ((d >> 18) & 0x1),
- (int) ((d >> 17) & 0x1),
- (int) ((d >> 15) & 0x3),
- (int) ((d >> 13) & 0x3),
- (int) ((d >> 11) & 0x3),
- (int) ((d >> 9) & 0x3),
- (int) ((d >> 8) & 0x1),
- (int) ((d >> 7) & 0x1),
- (int) ((d >> 6) & 0x1),
- (int) ((d >> 5) & 0x1),
- (int) ((d >> 4) & 0x1),
- (int) ((d >> 3) & 0x1),
- (int) ((d >> 2) & 0x1),
- (int) ((d >> 1) & 0x1),
- (int) ((d >> 0) & 0x1));
+ gdb_printf (file,
+ "\tSD:%X VM:%02X MXR:%X PUM:%X MPRV:%X XS:%X "
+ "FS:%X MPP:%x HPP:%X SPP:%X MPIE:%X HPIE:%X "
+ "SPIE:%X UPIE:%X MIE:%X HIE:%X SIE:%X UIE:%X",
+ (int) ((d >> (xlen - 1)) & 0x1),
+ (int) ((d >> 24) & 0x1f),
+ (int) ((d >> 19) & 0x1),
+ (int) ((d >> 18) & 0x1),
+ (int) ((d >> 17) & 0x1),
+ (int) ((d >> 15) & 0x3),
+ (int) ((d >> 13) & 0x3),
+ (int) ((d >> 11) & 0x3),
+ (int) ((d >> 9) & 0x3),
+ (int) ((d >> 8) & 0x1),
+ (int) ((d >> 7) & 0x1),
+ (int) ((d >> 6) & 0x1),
+ (int) ((d >> 5) & 0x1),
+ (int) ((d >> 4) & 0x1),
+ (int) ((d >> 3) & 0x1),
+ (int) ((d >> 2) & 0x1),
+ (int) ((d >> 1) & 0x1),
+ (int) ((d >> 0) & 0x1));
}
else if (regnum == RISCV_CSR_MISA_REGNUM)
{
@@ -1144,12 +1144,12 @@ riscv_print_one_register_info (struct gdbarch *gdbarch,
for (; base > 0; base--)
xlen *= 2;
- fprintf_filtered (file, "\tRV%d", xlen);
+ gdb_printf (file, "\tRV%d", xlen);
for (i = 0; i < 26; i++)
{
if (d & (1 << i))
- fprintf_filtered (file, "%c", 'A' + i);
+ gdb_printf (file, "%c", 'A' + i);
}
}
else if (regnum == RISCV_CSR_FCSR_REGNUM
@@ -1160,16 +1160,16 @@ riscv_print_one_register_info (struct gdbarch *gdbarch,
d = value_as_long (val);
- fprintf_filtered (file, "\t");
+ gdb_printf (file, "\t");
if (regnum != RISCV_CSR_FRM_REGNUM)
- fprintf_filtered (file,
- "RD:%01X NV:%d DZ:%d OF:%d UF:%d NX:%d",
- (int) ((d >> 5) & 0x7),
- (int) ((d >> 4) & 0x1),
- (int) ((d >> 3) & 0x1),
- (int) ((d >> 2) & 0x1),
- (int) ((d >> 1) & 0x1),
- (int) ((d >> 0) & 0x1));
+ gdb_printf (file,
+ "RD:%01X NV:%d DZ:%d OF:%d UF:%d NX:%d",
+ (int) ((d >> 5) & 0x7),
+ (int) ((d >> 4) & 0x1),
+ (int) ((d >> 3) & 0x1),
+ (int) ((d >> 2) & 0x1),
+ (int) ((d >> 1) & 0x1),
+ (int) ((d >> 0) & 0x1));
if (regnum != RISCV_CSR_FFLAGS_REGNUM)
{
@@ -1187,10 +1187,10 @@ riscv_print_one_register_info (struct gdbarch *gdbarch,
int frm = ((regnum == RISCV_CSR_FCSR_REGNUM)
? (d >> 5) : d) & 0x3;
- fprintf_filtered (file, "%sFRM:%i [%s]",
- (regnum == RISCV_CSR_FCSR_REGNUM
- ? " " : ""),
- frm, sfrm[frm]);
+ gdb_printf (file, "%sFRM:%i [%s]",
+ (regnum == RISCV_CSR_FCSR_REGNUM
+ ? " " : ""),
+ frm, sfrm[frm]);
}
}
else if (regnum == RISCV_PRIV_REGNUM)
@@ -1210,11 +1210,11 @@ riscv_print_one_register_info (struct gdbarch *gdbarch,
"Hypervisor",
"Machine"
};
- fprintf_filtered (file, "\tprv:%d [%s]",
- priv, sprv[priv]);
+ gdb_printf (file, "\tprv:%d [%s]",
+ priv, sprv[priv]);
}
else
- fprintf_filtered (file, "\tprv:%d [INVALID]", priv);
+ gdb_printf (file, "\tprv:%d [INVALID]", priv);
}
else
{
@@ -1224,13 +1224,13 @@ riscv_print_one_register_info (struct gdbarch *gdbarch,
{
get_user_print_options (&opts);
opts.deref_ref = 1;
- fprintf_filtered (file, "\t");
+ gdb_printf (file, "\t");
common_val_print (val, file, 0, &opts, current_language);
}
}
}
}
- fprintf_filtered (file, "\n");
+ gdb_printf (file, "\n");
}
/* Return true if REGNUM is a valid CSR register. The CSR register space
@@ -1271,7 +1271,7 @@ riscv_is_unknown_csr (struct gdbarch *gdbarch, int regnum)
static int
riscv_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
- struct reggroup *reggroup)
+ const struct reggroup *reggroup)
{
/* Used by 'info registers' and 'info registers <groupname>'. */
@@ -1369,7 +1369,7 @@ riscv_print_registers_info (struct gdbarch *gdbarch,
}
else
{
- struct reggroup *reggroup;
+ const struct reggroup *reggroup;
if (print_all)
reggroup = all_reggroup;
@@ -1858,7 +1858,7 @@ riscv_scan_prologue (struct gdbarch *gdbarch,
pv_area stack (RISCV_SP_REGNUM, gdbarch_addr_bit (gdbarch));
if (riscv_debug_unwinder)
- fprintf_unfiltered
+ gdb_printf
(gdb_stdlog,
"Prologue scan for function starting at %s (limit %s)\n",
core_addr_to_string (start_pc),
@@ -1995,8 +1995,8 @@ riscv_scan_prologue (struct gdbarch *gdbarch,
end_prologue_addr = cur_pc;
if (riscv_debug_unwinder)
- fprintf_unfiltered (gdb_stdlog, "End of prologue at %s\n",
- core_addr_to_string (end_prologue_addr));
+ gdb_printf (gdb_stdlog, "End of prologue at %s\n",
+ core_addr_to_string (end_prologue_addr));
if (cache != NULL)
{
@@ -2031,10 +2031,10 @@ riscv_scan_prologue (struct gdbarch *gdbarch,
the frame base address to the registers location on
the stack, with a descending stack this means the
offsets are always negative. */
- fprintf_unfiltered (gdb_stdlog,
- "Register $%s at stack offset %s\n",
- gdbarch_register_name (gdbarch, i),
- plongest ((LONGEST) offset));
+ gdb_printf (gdb_stdlog,
+ "Register $%s at stack offset %s\n",
+ gdbarch_register_name (gdbarch, i),
+ plongest ((LONGEST) offset));
}
cache->regs[i].set_addr (offset);
}
@@ -2109,11 +2109,11 @@ riscv_push_dummy_code (struct gdbarch *gdbarch, CORE_ADDR sp,
int status = target_write_memory (*bp_addr, nop_insn, sizeof (nop_insn));
if (riscv_debug_breakpoints || riscv_debug_infcall)
- fprintf_unfiltered (gdb_stdlog,
- "Writing %s-byte nop instruction to %s: %s\n",
- plongest (sizeof (nop_insn)),
- paddress (gdbarch, *bp_addr),
- (status == 0 ? "success" : "failed"));
+ gdb_printf (gdb_stdlog,
+ "Writing %s-byte nop instruction to %s: %s\n",
+ plongest (sizeof (nop_insn)),
+ paddress (gdbarch, *bp_addr),
+ (status == 0 ? "success" : "failed"));
return sp;
}
@@ -2815,12 +2815,12 @@ riscv_print_arg_location (ui_file *stream, struct gdbarch *gdbarch,
struct riscv_arg_info *info,
CORE_ADDR sp_refs, CORE_ADDR sp_args)
{
- fprintf_unfiltered (stream, "type: '%s', length: 0x%x, alignment: 0x%x",
- TYPE_SAFE_NAME (info->type), info->length, info->align);
+ gdb_printf (stream, "type: '%s', length: 0x%x, alignment: 0x%x",
+ TYPE_SAFE_NAME (info->type), info->length, info->align);
switch (info->argloc[0].loc_type)
{
case riscv_arg_info::location::in_reg:
- fprintf_unfiltered
+ gdb_printf
(stream, ", register %s",
gdbarch_register_name (gdbarch, info->argloc[0].loc_data.regno));
if (info->argloc[0].c_length < info->length)
@@ -2828,15 +2828,15 @@ riscv_print_arg_location (ui_file *stream, struct gdbarch *gdbarch,
switch (info->argloc[1].loc_type)
{
case riscv_arg_info::location::in_reg:
- fprintf_unfiltered
+ gdb_printf
(stream, ", register %s",
gdbarch_register_name (gdbarch,
info->argloc[1].loc_data.regno));
break;
case riscv_arg_info::location::on_stack:
- fprintf_unfiltered (stream, ", on stack at offset 0x%x",
- info->argloc[1].loc_data.offset);
+ gdb_printf (stream, ", on stack at offset 0x%x",
+ info->argloc[1].loc_data.offset);
break;
case riscv_arg_info::location::by_ref:
@@ -2849,31 +2849,31 @@ riscv_print_arg_location (ui_file *stream, struct gdbarch *gdbarch,
}
if (info->argloc[1].c_offset > info->argloc[0].c_length)
- fprintf_unfiltered (stream, " (offset 0x%x)",
- info->argloc[1].c_offset);
+ gdb_printf (stream, " (offset 0x%x)",
+ info->argloc[1].c_offset);
}
break;
case riscv_arg_info::location::on_stack:
- fprintf_unfiltered (stream, ", on stack at offset 0x%x",
- info->argloc[0].loc_data.offset);
+ gdb_printf (stream, ", on stack at offset 0x%x",
+ info->argloc[0].loc_data.offset);
break;
case riscv_arg_info::location::by_ref:
- fprintf_unfiltered
+ gdb_printf
(stream, ", by reference, data at offset 0x%x (%s)",
info->argloc[0].loc_data.offset,
core_addr_to_string (sp_refs + info->argloc[0].loc_data.offset));
if (info->argloc[1].loc_type
== riscv_arg_info::location::in_reg)
- fprintf_unfiltered
+ gdb_printf
(stream, ", address in register %s",
gdbarch_register_name (gdbarch, info->argloc[1].loc_data.regno));
else
{
gdb_assert (info->argloc[1].loc_type
== riscv_arg_info::location::on_stack);
- fprintf_unfiltered
+ gdb_printf
(stream, ", address on stack at offset 0x%x (%s)",
info->argloc[1].loc_data.offset,
core_addr_to_string (sp_args + info->argloc[1].loc_data.offset));
@@ -2961,33 +2961,33 @@ riscv_push_dummy_call (struct gdbarch *gdbarch,
if (riscv_debug_infcall > 0)
{
- fprintf_unfiltered (gdb_stdlog, "dummy call args:\n");
- fprintf_unfiltered (gdb_stdlog, ": floating point ABI %s in use\n",
- (riscv_has_fp_abi (gdbarch) ? "is" : "is not"));
- fprintf_unfiltered (gdb_stdlog, ": xlen: %d\n: flen: %d\n",
- call_info.xlen, call_info.flen);
+ gdb_printf (gdb_stdlog, "dummy call args:\n");
+ gdb_printf (gdb_stdlog, ": floating point ABI %s in use\n",
+ (riscv_has_fp_abi (gdbarch) ? "is" : "is not"));
+ gdb_printf (gdb_stdlog, ": xlen: %d\n: flen: %d\n",
+ call_info.xlen, call_info.flen);
if (return_method == return_method_struct)
- fprintf_unfiltered (gdb_stdlog,
- "[*] struct return pointer in register $A0\n");
+ gdb_printf (gdb_stdlog,
+ "[*] struct return pointer in register $A0\n");
for (i = 0; i < nargs; ++i)
{
struct riscv_arg_info *info = &arg_info [i];
- fprintf_unfiltered (gdb_stdlog, "[%2d] ", i);
+ gdb_printf (gdb_stdlog, "[%2d] ", i);
riscv_print_arg_location (gdb_stdlog, gdbarch, info, sp_refs, sp_args);
- fprintf_unfiltered (gdb_stdlog, "\n");
+ gdb_printf (gdb_stdlog, "\n");
}
if (call_info.memory.arg_offset > 0
|| call_info.memory.ref_offset > 0)
{
- fprintf_unfiltered (gdb_stdlog, " Original sp: %s\n",
- core_addr_to_string (osp));
- fprintf_unfiltered (gdb_stdlog, "Stack required (for args): 0x%x\n",
- call_info.memory.arg_offset);
- fprintf_unfiltered (gdb_stdlog, "Stack required (for refs): 0x%x\n",
- call_info.memory.ref_offset);
- fprintf_unfiltered (gdb_stdlog, " Stack allocated: %s\n",
- core_addr_to_string_nz (osp - sp));
+ gdb_printf (gdb_stdlog, " Original sp: %s\n",
+ core_addr_to_string (osp));
+ gdb_printf (gdb_stdlog, "Stack required (for args): 0x%x\n",
+ call_info.memory.arg_offset);
+ gdb_printf (gdb_stdlog, "Stack required (for refs): 0x%x\n",
+ call_info.memory.ref_offset);
+ gdb_printf (gdb_stdlog, " Stack allocated: %s\n",
+ core_addr_to_string_nz (osp - sp));
}
}
@@ -3086,15 +3086,15 @@ riscv_push_dummy_call (struct gdbarch *gdbarch,
A dummy breakpoint will be setup to execute the call. */
if (riscv_debug_infcall > 0)
- fprintf_unfiltered (gdb_stdlog, ": writing $ra = %s\n",
- core_addr_to_string (bp_addr));
+ gdb_printf (gdb_stdlog, ": writing $ra = %s\n",
+ core_addr_to_string (bp_addr));
regcache_cooked_write_unsigned (regcache, RISCV_RA_REGNUM, bp_addr);
/* Finally, update the stack pointer. */
if (riscv_debug_infcall > 0)
- fprintf_unfiltered (gdb_stdlog, ": writing $sp = %s\n",
- core_addr_to_string (sp));
+ gdb_printf (gdb_stdlog, ": writing $sp = %s\n",
+ core_addr_to_string (sp));
regcache_cooked_write_unsigned (regcache, RISCV_SP_REGNUM, sp);
return sp;
@@ -3119,10 +3119,10 @@ riscv_return_value (struct gdbarch *gdbarch,
if (riscv_debug_infcall > 0)
{
- fprintf_unfiltered (gdb_stdlog, "riscv return value:\n");
- fprintf_unfiltered (gdb_stdlog, "[R] ");
+ gdb_printf (gdb_stdlog, "riscv return value:\n");
+ gdb_printf (gdb_stdlog, "[R] ");
riscv_print_arg_location (gdb_stdlog, gdbarch, &info, 0, 0);
- fprintf_unfiltered (gdb_stdlog, "\n");
+ gdb_printf (gdb_stdlog, "\n");
}
if (readbuf != nullptr || writebuf != nullptr)
@@ -3344,11 +3344,11 @@ riscv_frame_cache (struct frame_info *this_frame, void **this_cache)
= (get_frame_register_unsigned (this_frame, cache->frame_base_reg)
+ cache->frame_base_offset);
if (riscv_debug_unwinder)
- fprintf_unfiltered (gdb_stdlog, "Frame base is %s ($%s + 0x%x)\n",
- core_addr_to_string (cache->frame_base),
- gdbarch_register_name (gdbarch,
- cache->frame_base_reg),
- cache->frame_base_offset);
+ gdb_printf (gdb_stdlog, "Frame base is %s ($%s + 0x%x)\n",
+ core_addr_to_string (cache->frame_base),
+ gdbarch_register_name (gdbarch,
+ cache->frame_base_reg),
+ cache->frame_base_offset);
/* The prologue scanner sets the address of registers stored to the stack
as the offset of that register from the frame base. The prologue
@@ -3497,21 +3497,11 @@ riscv_find_default_target_description (const struct gdbarch_info info)
return riscv_lookup_target_description (features);
}
-/* Add all the expected register sets into GDBARCH. */
+/* Add all the RISC-V specific register groups into GDBARCH. */
static void
riscv_add_reggroups (struct gdbarch *gdbarch)
{
- /* Add predefined register groups. */
- reggroup_add (gdbarch, all_reggroup);
- reggroup_add (gdbarch, save_reggroup);
- reggroup_add (gdbarch, restore_reggroup);
- reggroup_add (gdbarch, system_reggroup);
- reggroup_add (gdbarch, vector_reggroup);
- reggroup_add (gdbarch, general_reggroup);
- reggroup_add (gdbarch, float_reggroup);
-
- /* Add RISC-V specific register groups. */
reggroup_add (gdbarch, csr_reggroup);
}
@@ -3687,7 +3677,7 @@ riscv_gdbarch_init (struct gdbarch_info info,
gdb_assert (tdesc != nullptr);
if (riscv_debug_gdbarch)
- fprintf_unfiltered (gdb_stdlog, "Have got a target description\n");
+ gdb_printf (gdb_stdlog, "Have got a target description\n");
tdesc_arch_data_up tdesc_data = tdesc_data_alloc ();
std::vector<riscv_pending_register_alias> pending_aliases;
@@ -3705,7 +3695,7 @@ riscv_gdbarch_init (struct gdbarch_info info,
if (!valid_p)
{
if (riscv_debug_gdbarch)
- fprintf_unfiltered (gdb_stdlog, "Target description is not valid\n");
+ gdb_printf (gdb_stdlog, "Target description is not valid\n");
return NULL;
}
@@ -3769,7 +3759,7 @@ riscv_gdbarch_init (struct gdbarch_info info,
set_gdbarch_float_bit (gdbarch, 32);
set_gdbarch_double_bit (gdbarch, 64);
set_gdbarch_long_double_bit (gdbarch, 128);
- set_gdbarch_long_double_format (gdbarch, floatformats_ia64_quad);
+ set_gdbarch_long_double_format (gdbarch, floatformats_ieee_quad);
set_gdbarch_ptr_bit (gdbarch, riscv_isa_xlen (gdbarch) * 8);
set_gdbarch_char_signed (gdbarch, 0);
set_gdbarch_type_align (gdbarch, riscv_type_align);
diff --git a/gdb/rl78-tdep.c b/gdb/rl78-tdep.c
index df04939acb1..6ea0473081d 100644
--- a/gdb/rl78-tdep.c
+++ b/gdb/rl78-tdep.c
@@ -586,7 +586,7 @@ rl78_g10_register_name (struct gdbarch *gdbarch, int regnr)
static int
rl78_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
- struct reggroup *group)
+ const struct reggroup *group)
{
if (group == all_reggroup)
return 1;
diff --git a/gdb/rs6000-aix-nat.c b/gdb/rs6000-aix-nat.c
index 5cf1214c65e..8563aea313a 100644
--- a/gdb/rs6000-aix-nat.c
+++ b/gdb/rs6000-aix-nat.c
@@ -210,9 +210,9 @@ fetch_register (struct regcache *regcache, int regno)
else if (nr < 0)
{
if (regno >= gdbarch_num_regs (gdbarch))
- fprintf_unfiltered (gdb_stderr,
- "gdb error: register no %d not implemented.\n",
- regno);
+ gdb_printf (gdb_stderr,
+ "gdb error: register no %d not implemented.\n",
+ regno);
return;
}
@@ -272,9 +272,9 @@ store_register (struct regcache *regcache, int regno)
else if (nr < 0)
{
if (regno >= gdbarch_num_regs (gdbarch))
- fprintf_unfiltered (gdb_stderr,
- "gdb error: register no %d not implemented.\n",
- regno);
+ gdb_printf (gdb_stderr,
+ "gdb error: register no %d not implemented.\n",
+ regno);
}
/* Fixed-point registers. */
@@ -519,9 +519,9 @@ rs6000_nat_target::wait (ptid_t ptid, struct target_waitstatus *ourstatus,
if (pid == -1)
{
- fprintf_unfiltered (gdb_stderr,
- _("Child process unexpectedly missing: %s.\n"),
- safe_strerror (save_errno));
+ gdb_printf (gdb_stderr,
+ _("Child process unexpectedly missing: %s.\n"),
+ safe_strerror (save_errno));
/* Claim it exited with unknown signal. */
ourstatus->set_signalled (GDB_SIGNAL_UNKNOWN);
diff --git a/gdb/rs6000-tdep.c b/gdb/rs6000-tdep.c
index ee3f051dda6..6815dfaa820 100644
--- a/gdb/rs6000-tdep.c
+++ b/gdb/rs6000-tdep.c
@@ -2434,7 +2434,7 @@ rs6000_builtin_type_vec128 (struct gdbarch *gdbarch)
/* PPC specific type for IEEE 128-bit float field */
struct type *t_float128
- = arch_float_type (gdbarch, 128, "float128_t", floatformats_ia64_quad);
+ = arch_float_type (gdbarch, 128, "float128_t", floatformats_ieee_quad);
struct type *t;
@@ -2642,7 +2642,7 @@ rs6000_pseudo_register_type (struct gdbarch *gdbarch, int regnum)
static int
rs6000_pseudo_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
- struct reggroup *group)
+ const struct reggroup *group)
{
ppc_gdbarch_tdep *tdep = (ppc_gdbarch_tdep *) gdbarch_tdep (gdbarch);
@@ -4123,8 +4123,25 @@ bfd_uses_spe_extensions (bfd *abfd)
#define PPC_LEV(insn) PPC_FIELD (insn, 20, 7)
#define PPC_XT(insn) ((PPC_TX (insn) << 5) | PPC_T (insn))
+#define PPC_XTp(insn) ((PPC_BIT (insn, 10) << 5) \
+ | PPC_FIELD (insn, 6, 4) << 1)
+#define PPC_XSp(insn) ((PPC_BIT (insn, 10) << 5) \
+ | PPC_FIELD (insn, 6, 4) << 1)
#define PPC_XER_NB(xer) (xer & 0x7f)
+/* The following macros are for the prefixed instructions. */
+#define P_PPC_D(insn_prefix, insn_suffix) \
+ PPC_SEXT (PPC_FIELD (insn_prefix, 14, 18) << 16 \
+ | PPC_FIELD (insn_suffix, 16, 16), 34)
+#define P_PPC_TX5(insn_sufix) PPC_BIT (insn_suffix, 5)
+#define P_PPC_TX15(insn_suffix) PPC_BIT (insn_suffix, 15)
+#define P_PPC_XT(insn_suffix) ((PPC_TX (insn_suffix) << 5) \
+ | PPC_T (insn_suffix))
+#define P_PPC_XT5(insn_suffix) ((P_PPC_TX5 (insn_suffix) << 5) \
+ | PPC_T (insn_suffix))
+#define P_PPC_XT15(insn_suffix) \
+ ((P_PPC_TX15 (insn_suffix) << 5) | PPC_T (insn_suffix))
+
/* Record Vector-Scalar Registers.
For VSR less than 32, it's represented by an FPR and an VSR-upper register.
Otherwise, it's just a VR register. Record them accordingly. */
@@ -4152,6 +4169,59 @@ ppc_record_vsr (struct regcache *regcache, ppc_gdbarch_tdep *tdep, int vsr)
return 0;
}
+/* The ppc_record_ACC_fpscr() records the changes to the VSR registers
+ modified by a floating point instruction. The ENTRY argument selects which
+ of the eight AT entries needs to be recorded. The boolean SAVE_FPSCR
+ argument is set to TRUE to indicate the FPSCR also needs to be recorded.
+ The function returns 0 on success. */
+
+static int
+ppc_record_ACC_fpscr (struct regcache *regcache, ppc_gdbarch_tdep *tdep,
+ int entry, bool save_fpscr)
+{
+ int i;
+ if (entry < 0 || entry >= 8)
+ return -1;
+
+ /* The ACC register file consists of 8 register entries, each register
+ entry consist of four 128-bit rows.
+
+ The ACC rows map to specific VSR registers.
+ ACC[0][0] -> VSR[0]
+ ACC[0][1] -> VSR[1]
+ ACC[0][2] -> VSR[2]
+ ACC[0][3] -> VSR[3]
+ ...
+ ACC[7][0] -> VSR[28]
+ ACC[7][1] -> VSR[29]
+ ACC[7][2] -> VSR[30]
+ ACC[7][3] -> VSR[31]
+
+ NOTE:
+ In ISA 3.1 the ACC is mapped on top of VSR[0] thru VSR[31].
+
+ In the future, the ACC may be implemented as an independent register file
+ rather than mapping on top of the VSRs. This will then require the ACC to
+ be assigned its own register number and the ptrace interface to be able
+ access the ACC. Note the ptrace interface for the ACC will also need to
+ be implemented. */
+
+ /* ACC maps over the same VSR space as the fp registers. */
+ for (i = 0; i < 4; i++)
+ {
+ record_full_arch_list_add_reg (regcache, tdep->ppc_fp0_regnum
+ + entry * 4 + i);
+ record_full_arch_list_add_reg (regcache,
+ tdep->ppc_vsr0_upper_regnum
+ + entry * 4 + i);
+ }
+
+ if (save_fpscr)
+ record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
+
+ return 0;
+}
+
/* Parse and record instructions primary opcode-4 at ADDR.
Return 0 if successful. */
@@ -4171,9 +4241,34 @@ ppc_process_record_op4 (struct gdbarch *gdbarch, struct regcache *regcache,
case 41: /* Vector Multiply-Sum Signed Halfword Saturate */
record_full_arch_list_add_reg (regcache, PPC_VSCR_REGNUM);
/* FALL-THROUGH */
+ case 20: /* Move To VSR Byte Mask Immediate opcode, b2 = 0,
+ ignore bit 31 */
+ case 21: /* Move To VSR Byte Mask Immediate opcode, b2 = 1,
+ ignore bit 31 */
+ case 23: /* Vector Multiply-Sum & write Carry-out Unsigned
+ Doubleword */
+ case 24: /* Vector Extract Double Unsigned Byte to VSR
+ using GPR-specified Left-Index */
+ case 25: /* Vector Extract Double Unsigned Byte to VSR
+ using GPR-specified Right-Index */
+ case 26: /* Vector Extract Double Unsigned Halfword to VSR
+ using GPR-specified Left-Index */
+ case 27: /* Vector Extract Double Unsigned Halfword to VSR
+ using GPR-specified Right-Index */
+ case 28: /* Vector Extract Double Unsigned Word to VSR
+ using GPR-specified Left-Index */
+ case 29: /* Vector Extract Double Unsigned Word to VSR
+ using GPR-specified Right-Index */
+ case 30: /* Vector Extract Double Unsigned Doubleword to VSR
+ using GPR-specified Left-Index */
+ case 31: /* Vector Extract Double Unsigned Doubleword to VSR
+ using GPR-specified Right-Index */
case 42: /* Vector Select */
case 43: /* Vector Permute */
case 59: /* Vector Permute Right-indexed */
+ case 22: /* Vector Shift
+ Left Double by Bit Immediate if insn[21] = 0
+ Right Double by Bit Immediate if insn[21] = 1 */
case 44: /* Vector Shift Left Double by Octet Immediate */
case 45: /* Vector Permute and Exclusive-OR */
case 60: /* Vector Add Extended Unsigned Quadword Modulo */
@@ -4236,6 +4331,9 @@ ppc_process_record_op4 (struct gdbarch *gdbarch, struct regcache *regcache,
/* Bit-21 is used for RC */
switch (ext & 0x3ff)
{
+ case 5: /* Vector Rotate Left Quadword */
+ case 69: /* Vector Rotate Left Quadword then Mask Insert */
+ case 325: /* Vector Rotate Left Quadword then AND with Mask */
case 6: /* Vector Compare Equal To Unsigned Byte */
case 70: /* Vector Compare Equal To Unsigned Halfword */
case 134: /* Vector Compare Equal To Unsigned Word */
@@ -4244,13 +4342,16 @@ ppc_process_record_op4 (struct gdbarch *gdbarch, struct regcache *regcache,
case 838: /* Vector Compare Greater Than Signed Halfword */
case 902: /* Vector Compare Greater Than Signed Word */
case 967: /* Vector Compare Greater Than Signed Doubleword */
+ case 903: /* Vector Compare Greater Than Signed Quadword */
case 518: /* Vector Compare Greater Than Unsigned Byte */
case 646: /* Vector Compare Greater Than Unsigned Word */
case 582: /* Vector Compare Greater Than Unsigned Halfword */
case 711: /* Vector Compare Greater Than Unsigned Doubleword */
+ case 647: /* Vector Compare Greater Than Unsigned Quadword */
case 966: /* Vector Compare Bounds Single-Precision */
case 198: /* Vector Compare Equal To Single-Precision */
case 454: /* Vector Compare Greater Than or Equal To Single-Precision */
+ case 455: /* Vector Compare Equal Quadword */
case 710: /* Vector Compare Greater Than Single-Precision */
case 7: /* Vector Compare Not Equal Byte */
case 71: /* Vector Compare Not Equal Halfword */
@@ -4263,6 +4364,21 @@ ppc_process_record_op4 (struct gdbarch *gdbarch, struct regcache *regcache,
record_full_arch_list_add_reg (regcache,
tdep->ppc_vr0_regnum + PPC_VRT (insn));
return 0;
+
+ case 13:
+ switch (vra) /* Bit-21 is used for RC */
+ {
+ case 0: /* Vector String Isolate Byte Left-justified */
+ case 1: /* Vector String Isolate Byte Right-justified */
+ case 2: /* Vector String Isolate Halfword Left-justified */
+ case 3: /* Vector String Isolate Halfword Right-justified */
+ if (PPC_Rc (insn))
+ record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
+ record_full_arch_list_add_reg (regcache,
+ tdep->ppc_vr0_regnum
+ + PPC_VRT (insn));
+ return 0;
+ }
}
if (ext == 1538)
@@ -4287,6 +4403,7 @@ ppc_process_record_op4 (struct gdbarch *gdbarch, struct regcache *regcache,
case 24: /* Vector Extend Sign Byte To Doubleword */
case 25: /* Vector Extend Sign Halfword To Doubleword */
case 26: /* Vector Extend Sign Word To Doubleword */
+ case 27: /* Vector Extend Sign Doubleword To Quadword */
case 28: /* Vector Count Trailing Zeros Byte */
case 29: /* Vector Count Trailing Zeros Halfword */
case 30: /* Vector Count Trailing Zeros Word */
@@ -4297,8 +4414,57 @@ ppc_process_record_op4 (struct gdbarch *gdbarch, struct regcache *regcache,
}
}
+ if (ext == 1602)
+ {
+ switch (vra)
+ {
+ case 0: /* Vector Expand Byte Mask */
+ case 1: /* Vector Expand Halfword Mask */
+ case 2: /* Vector Expand Word Mask */
+ case 3: /* Vector Expand Doubleword Mask */
+ case 4: /* Vector Expand Quadword Mask */
+ case 16: /* Move to VSR Byte Mask */
+ case 17: /* Move to VSR Halfword Mask */
+ case 18: /* Move to VSR Word Mask */
+ case 19: /* Move to VSR Doubleword Mask */
+ case 20: /* Move to VSR Quadword Mask */
+ ppc_record_vsr (regcache, tdep, PPC_VRT (insn) + 32);
+ return 0;
+
+ case 8: /* Vector Extract Byte Mask */
+ case 9: /* Vector Extract Halfword Mask */
+ case 10: /* Vector Extract Word Mask */
+ case 11: /* Vector Extract Doubleword Mask */
+ case 12: /* Vector Extract Quadword Mask */
+
+ /* Ignore the MP bit in the LSB position of the vra value. */
+ case 24: /* Vector Count Mask Bits Byte, MP = 0 */
+ case 25: /* Vector Count Mask Bits Byte, MP = 1 */
+ case 26: /* Vector Count Mask Bits Halfword, MP = 0 */
+ case 27: /* Vector Count Mask Bits Halfword, MP = 1 */
+ case 28: /* Vector Count Mask Bits Word, MP = 0 */
+ case 29: /* Vector Count Mask Bits Word, MP = 1 */
+ case 30: /* Vector Count Mask Bits Doubleword, MP = 0 */
+ case 31: /* Vector Count Mask Bits Doubleword, MP = 1 */
+ record_full_arch_list_add_reg (regcache,
+ tdep->ppc_gp0_regnum + PPC_RT (insn));
+ record_full_arch_list_add_reg (regcache,
+ tdep->ppc_gp0_regnum + PPC_RT (insn));
+ return 0;
+ }
+ }
+
switch (ext)
{
+
+ case 257: /* Vector Compare Unsigned Quadword */
+ case 321: /* Vector Compare Signed Quadword */
+ /* Comparison tests that always set CR field BF */
+ record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
+ record_full_arch_list_add_reg (regcache,
+ tdep->ppc_vr0_regnum + PPC_VRT (insn));
+ return 0;
+
case 142: /* Vector Pack Unsigned Halfword Unsigned Saturate */
case 206: /* Vector Pack Unsigned Word Unsigned Saturate */
case 270: /* Vector Pack Signed Halfword Unsigned Saturate */
@@ -4338,6 +4504,8 @@ ppc_process_record_op4 (struct gdbarch *gdbarch, struct regcache *regcache,
case 268: /* Vector Merge Low Byte */
case 332: /* Vector Merge Low Halfword */
case 396: /* Vector Merge Low Word */
+ case 397: /* Vector Clear Leftmost Bytes */
+ case 461: /* Vector Clear Rightmost Bytes */
case 526: /* Vector Unpack High Signed Byte */
case 590: /* Vector Unpack High Signed Halfword */
case 654: /* Vector Unpack Low Signed Byte */
@@ -4356,8 +4524,11 @@ ppc_process_record_op4 (struct gdbarch *gdbarch, struct regcache *regcache,
case 780: /* Vector Splat Immediate Signed Byte */
case 844: /* Vector Splat Immediate Signed Halfword */
case 908: /* Vector Splat Immediate Signed Word */
+ case 261: /* Vector Shift Left Quadword */
case 452: /* Vector Shift Left */
+ case 517: /* Vector Shift Right Quadword */
case 708: /* Vector Shift Right */
+ case 773: /* Vector Shift Right Algebraic Quadword */
case 1036: /* Vector Shift Left by Octet */
case 1100: /* Vector Shift Right by Octet */
case 0: /* Vector Add Unsigned Byte Modulo */
@@ -4370,15 +4541,43 @@ ppc_process_record_op4 (struct gdbarch *gdbarch, struct regcache *regcache,
case 8: /* Vector Multiply Odd Unsigned Byte */
case 72: /* Vector Multiply Odd Unsigned Halfword */
case 136: /* Vector Multiply Odd Unsigned Word */
+ case 200: /* Vector Multiply Odd Unsigned Doubleword */
case 264: /* Vector Multiply Odd Signed Byte */
case 328: /* Vector Multiply Odd Signed Halfword */
case 392: /* Vector Multiply Odd Signed Word */
+ case 456: /* Vector Multiply Odd Signed Doubleword */
case 520: /* Vector Multiply Even Unsigned Byte */
case 584: /* Vector Multiply Even Unsigned Halfword */
case 648: /* Vector Multiply Even Unsigned Word */
+ case 712: /* Vector Multiply Even Unsigned Doubleword */
case 776: /* Vector Multiply Even Signed Byte */
case 840: /* Vector Multiply Even Signed Halfword */
case 904: /* Vector Multiply Even Signed Word */
+ case 968: /* Vector Multiply Even Signed Doubleword */
+ case 457: /* Vector Multiply Low Doubleword */
+ case 649: /* Vector Multiply High Unsigned Word */
+ case 713: /* Vector Multiply High Unsigned Doubleword */
+ case 905: /* Vector Multiply High Signed Word */
+ case 969: /* Vector Multiply High Signed Doubleword */
+ case 11: /* Vector Divide Unsigned Quadword */
+ case 203: /* Vector Divide Unsigned Doubleword */
+ case 139: /* Vector Divide Unsigned Word */
+ case 267: /* Vector Divide Signed Quadword */
+ case 459: /* Vector Divide Signed Doubleword */
+ case 395: /* Vector Divide Signed Word */
+ case 523: /* Vector Divide Extended Unsigned Quadword */
+ case 715: /* Vector Divide Extended Unsigned Doubleword */
+ case 651: /* Vector Divide Extended Unsigned Word */
+ case 779: /* Vector Divide Extended Signed Quadword */
+ case 971: /* Vector Divide Extended Signed Doubleword */
+ case 907: /* Vector Divide Extended Unsigned Word */
+ case 1547: /* Vector Modulo Unsigned Quadword */
+ case 1675: /* Vector Modulo Unsigned Word */
+ case 1739: /* Vector Modulo Unsigned Doubleword */
+ case 1803: /* Vector Modulo Signed Quadword */
+ case 1931: /* Vector Modulo Signed Word */
+ case 1995: /* Vector Modulo Signed Doubleword */
+
case 137: /* Vector Multiply Unsigned Word Modulo */
case 1024: /* Vector Subtract Unsigned Byte Modulo */
case 1088: /* Vector Subtract Unsigned Halfword Modulo */
@@ -4462,7 +4661,11 @@ ppc_process_record_op4 (struct gdbarch *gdbarch, struct regcache *regcache,
case 1794: /* Vector Count Leading Zeros Byte */
case 1858: /* Vector Count Leading Zeros Halfword */
case 1922: /* Vector Count Leading Zeros Word */
+ case 1924: /* Vector Count Leading Zeros Doubleword under
+ bit Mask*/
case 1986: /* Vector Count Leading Zeros Doubleword */
+ case 1988: /* Vector Count Trailing Zeros Doubleword under bit
+ Mask */
case 1795: /* Vector Population Count Byte */
case 1859: /* Vector Population Count Halfword */
case 1923: /* Vector Population Count Word */
@@ -4488,14 +4691,50 @@ ppc_process_record_op4 (struct gdbarch *gdbarch, struct regcache *regcache,
case 589: /* Vector Extract Unsigned Halfword */
case 653: /* Vector Extract Unsigned Word */
case 717: /* Vector Extract Doubleword */
+ case 15: /* Vector Insert Byte from VSR using GPR-specified
+ Left-Index */
+ case 79: /* Vector Insert Halfword from VSR using GPR-specified
+ Left-Index */
+ case 143: /* Vector Insert Word from VSR using GPR-specified
+ Left-Index */
+ case 207: /* Vector Insert Word from GPR using
+ immediate-specified index */
+ case 463: /* Vector Insert Doubleword from GPR using
+ immediate-specified index */
+ case 271: /* Vector Insert Byte from VSR using GPR-specified
+ Right-Index */
+ case 335: /* Vector Insert Halfword from VSR using GPR-specified
+ Right-Index */
+ case 399: /* Vector Insert Word from VSR using GPR-specified
+ Right-Index */
+ case 527: /* Vector Insert Byte from GPR using GPR-specified
+ Left-Index */
+ case 591: /* Vector Insert Halfword from GPR using GPR-specified
+ Left-Index */
+ case 655: /* Vector Insert Word from GPR using GPR-specified
+ Left-Index */
+ case 719: /* Vector Insert Doubleword from GPR using
+ GPR-specified Left-Index */
+ case 783: /* Vector Insert Byte from GPR using GPR-specified
+ Right-Index */
+ case 847: /* Vector Insert Halfword from GPR using GPR-specified
+ Left-Index */
+ case 911: /* Vector Insert Word from GPR using GPR-specified
+ Left-Index */
+ case 975: /* Vector Insert Doubleword from GPR using
+ GPR-specified Right-Index */
case 781: /* Vector Insert Byte */
case 845: /* Vector Insert Halfword */
case 909: /* Vector Insert Word */
case 973: /* Vector Insert Doubleword */
+ case 1357: /* Vector Centrifuge Doubleword */
+ case 1421: /* Vector Parallel Bits Extract Doubleword */
+ case 1485: /* Vector Parallel Bits Deposit Doubleword */
record_full_arch_list_add_reg (regcache,
tdep->ppc_vr0_regnum + PPC_VRT (insn));
return 0;
+ case 1228: /* Vector Gather every Nth Bit */
case 1549: /* Vector Extract Unsigned Byte Left-Indexed */
case 1613: /* Vector Extract Unsigned Halfword Left-Indexed */
case 1677: /* Vector Extract Unsigned Word Left-Indexed */
@@ -4520,8 +4759,36 @@ ppc_process_record_op4 (struct gdbarch *gdbarch, struct regcache *regcache,
return 0;
}
- fprintf_unfiltered (gdb_stdlog, "Warning: Don't know how to record %08x "
- "at %s, 4-%d.\n", insn, paddress (gdbarch, addr), ext);
+ gdb_printf (gdb_stdlog, "Warning: Don't know how to record %08x "
+ "at %s, 4-%d.\n", insn, paddress (gdbarch, addr), ext);
+ return -1;
+}
+
+/* Parse and record instructions of primary opcode 6 at ADDR.
+ Return 0 if successful. */
+
+static int
+ppc_process_record_op6 (struct gdbarch *gdbarch, struct regcache *regcache,
+ CORE_ADDR addr, uint32_t insn)
+{
+ ppc_gdbarch_tdep *tdep = (ppc_gdbarch_tdep *) gdbarch_tdep (gdbarch);
+ int subtype = PPC_FIELD (insn, 28, 4);
+ CORE_ADDR ea = 0;
+
+ switch (subtype)
+ {
+ case 0: /* Load VSX Vector Paired */
+ ppc_record_vsr (regcache, tdep, PPC_XTp (insn));
+ ppc_record_vsr (regcache, tdep, PPC_XTp (insn) + 1);
+ return 0;
+ case 1: /* Store VSX Vector Paired */
+ if (PPC_RA (insn) != 0)
+ regcache_raw_read_unsigned (regcache,
+ tdep->ppc_gp0_regnum + PPC_RA (insn), &ea);
+ ea += PPC_DQ (insn) << 4;
+ record_full_arch_list_add_mem (ea, 32);
+ return 0;
+ }
return -1;
}
@@ -4572,8 +4839,32 @@ ppc_process_record_op19 (struct gdbarch *gdbarch, struct regcache *regcache,
return 0;
}
- fprintf_unfiltered (gdb_stdlog, "Warning: Don't know how to record %08x "
- "at %s, 19-%d.\n", insn, paddress (gdbarch, addr), ext);
+ gdb_printf (gdb_stdlog, "Warning: Don't know how to record %08x "
+ "at %s, 19-%d.\n", insn, paddress (gdbarch, addr), ext);
+ return -1;
+}
+
+/* Parse and record instructions of primary opcode-31 with the extended opcode
+ 177. The argument is the word instruction (insn). Return 0 if successful.
+*/
+
+static int
+ppc_process_record_op31_177 (struct gdbarch *gdbarch,
+ struct regcache *regcache,
+ uint32_t insn)
+{
+ int RA_opcode = PPC_RA(insn);
+ int as = PPC_FIELD (insn, 6, 3);
+ ppc_gdbarch_tdep *tdep = (ppc_gdbarch_tdep *) gdbarch_tdep (gdbarch);
+
+ switch (RA_opcode)
+ {
+ case 0: /* VSX Move From Accumulator, xxmfacc */
+ case 1: /* VSX Move To Accumulator, xxmtacc */
+ case 3: /* VSX Set Accumulator to Zero, xxsetaccz */
+ ppc_record_ACC_fpscr (regcache, tdep, as, false);
+ return 0;
+ }
return -1;
}
@@ -4586,7 +4877,7 @@ ppc_process_record_op31 (struct gdbarch *gdbarch, struct regcache *regcache,
{
ppc_gdbarch_tdep *tdep = (ppc_gdbarch_tdep *) gdbarch_tdep (gdbarch);
int ext = PPC_EXTOP (insn);
- int tmp, nr, nb, i;
+ int tmp, nr, nb = 0, i;
CORE_ADDR at_dcsz, ea = 0;
ULONGEST rb, ra, xer;
int size = 0;
@@ -4677,6 +4968,10 @@ ppc_process_record_op31 (struct gdbarch *gdbarch, struct regcache *regcache,
case 371: /* Move From Time Base [Phased-Out] */
case 309: /* Load Doubleword Monitored Indexed */
case 128: /* Set Boolean */
+ case 384: /* Set Boolean Condition */
+ case 416: /* Set Boolean Condition Reverse */
+ case 448: /* Set Negative Boolean Condition */
+ case 480: /* Set Negative Boolean Condition Reverse */
case 755: /* Deliver A Random Number */
record_full_arch_list_add_reg (regcache,
tdep->ppc_gp0_regnum + PPC_RT (insn));
@@ -4684,8 +4979,15 @@ ppc_process_record_op31 (struct gdbarch *gdbarch, struct regcache *regcache,
/* These only write to RA. */
case 51: /* Move From VSR Doubleword */
+ case 59: /* Count Leading Zeros Doubleword under bit Mask */
case 115: /* Move From VSR Word and Zero */
case 122: /* Population count bytes */
+ case 155: /* Byte-Reverse Word */
+ case 156: /* Parallel Bits Deposit Doubleword */
+ case 187: /* Byte-Reverse Doubleword */
+ case 188: /* Parallel Bits Extract Doubleword */
+ case 219: /* Byte-Reverse Halfword */
+ case 220: /* Centrifuge Doubleword */
case 378: /* Population count words */
case 506: /* Population count doublewords */
case 154: /* Parity Word */
@@ -4695,6 +4997,7 @@ ppc_process_record_op31 (struct gdbarch *gdbarch, struct regcache *regcache,
case 314: /* Convert Binary Coded Decimal To Declets */
case 508: /* Compare bytes */
case 307: /* Move From VSR Lower Doubleword */
+ case 571: /* Count Trailing Zeros Doubleword under bit Mask */
record_full_arch_list_add_reg (regcache,
tdep->ppc_gp0_regnum + PPC_RA (insn));
return 0;
@@ -4819,6 +5122,7 @@ ppc_process_record_op31 (struct gdbarch *gdbarch, struct regcache *regcache,
record_full_arch_list_add_reg (regcache, tmp + 1);
return 0;
+ /* These write to destination register PPC_XT. */
case 179: /* Move To VSR Doubleword */
case 211: /* Move To VSR Word Algebraic */
case 243: /* Move To VSR Word and Zero */
@@ -4826,6 +5130,10 @@ ppc_process_record_op31 (struct gdbarch *gdbarch, struct regcache *regcache,
case 524: /* Load VSX Scalar Single-Precision Indexed */
case 76: /* Load VSX Scalar as Integer Word Algebraic Indexed */
case 12: /* Load VSX Scalar as Integer Word and Zero Indexed */
+ case 13: /* Load VSX Vector Rightmost Byte Indexed */
+ case 45: /* Load VSX Vector Rightmost Halfword Indexed */
+ case 77: /* Load VSX Vector Rightmost Word Indexed */
+ case 109: /* Load VSX Vector Rightmost Doubleword Indexed */
case 844: /* Load VSX Vector Doubleword*2 Indexed */
case 332: /* Load VSX Vector Doubleword & Splat Indexed */
case 780: /* Load VSX Vector Word*4 Indexed */
@@ -4842,6 +5150,11 @@ ppc_process_record_op31 (struct gdbarch *gdbarch, struct regcache *regcache,
ppc_record_vsr (regcache, tdep, PPC_XT (insn));
return 0;
+ case 333: /* Load VSX Vector Paired Indexed */
+ ppc_record_vsr (regcache, tdep, PPC_XTp (insn));
+ ppc_record_vsr (regcache, tdep, PPC_XTp (insn) + 1);
+ return 0;
+
/* These write RA. Update CR if RC is set. */
case 24: /* Shift Left Word */
case 26: /* Count Leading Zeros Word */
@@ -5006,6 +5319,31 @@ ppc_process_record_op31 (struct gdbarch *gdbarch, struct regcache *regcache,
record_full_arch_list_add_mem (ea, size);
return 0;
+ case 141: /* Store VSX Vector Rightmost Byte Indexed */
+ case 173: /* Store VSX Vector Rightmost Halfword Indexed */
+ case 205: /* Store VSX Vector Rightmost Word Indexed */
+ case 237: /* Store VSX Vector Rightmost Doubleword Indexed */
+ switch(ext)
+ {
+ case 141: nb = 1;
+ break;
+ case 173: nb = 2;
+ break;
+ case 205: nb = 4;
+ break;
+ case 237: nb = 8;
+ break;
+ }
+ ra = 0;
+ if (PPC_RA (insn) != 0)
+ regcache_raw_read_unsigned (regcache,
+ tdep->ppc_gp0_regnum + PPC_RA (insn), &ra);
+ regcache_raw_read_unsigned (regcache,
+ tdep->ppc_gp0_regnum + PPC_RB (insn), &rb);
+ ea = ra + rb;
+ record_full_arch_list_add_mem (ea, nb);
+ return 0;
+
case 397: /* Store VSX Vector with Length */
case 429: /* Store VSX Vector Left-justified with Length */
ra = 0;
@@ -5021,6 +5359,19 @@ ppc_process_record_op31 (struct gdbarch *gdbarch, struct regcache *regcache,
record_full_arch_list_add_mem (ea, nb);
return 0;
+ case 461: /* Store VSX Vector Paired Indexed */
+ {
+ if (PPC_RA (insn) != 0)
+ regcache_raw_read_unsigned (regcache,
+ tdep->ppc_gp0_regnum
+ + PPC_RA (insn), &ea);
+ regcache_raw_read_unsigned (regcache,
+ tdep->ppc_gp0_regnum + PPC_RB (insn), &rb);
+ ea += rb;
+ record_full_arch_list_add_mem (ea, 32);
+ return 0;
+ }
+
case 710: /* Store Word Atomic */
case 742: /* Store Doubleword Atomic */
ra = 0;
@@ -5166,11 +5517,15 @@ ppc_process_record_op31 (struct gdbarch *gdbarch, struct regcache *regcache,
ea = (ra + rb) & ~((ULONGEST) (at_dcsz - 1));
record_full_arch_list_add_mem (ea, at_dcsz);
return 0;
+
+ case 177:
+ if (ppc_process_record_op31_177 (gdbarch, regcache, insn) == 0)
+ return 0;
}
UNKNOWN_OP:
- fprintf_unfiltered (gdb_stdlog, "Warning: Don't know how to record %08x "
- "at %s, 31-%d.\n", insn, paddress (gdbarch, addr), ext);
+ gdb_printf (gdb_stdlog, "Warning: Don't know how to record %08x "
+ "at %s, 31-%d.\n", insn, paddress (gdbarch, addr), ext);
return -1;
}
@@ -5179,10 +5534,11 @@ UNKNOWN_OP:
static int
ppc_process_record_op59 (struct gdbarch *gdbarch, struct regcache *regcache,
- CORE_ADDR addr, uint32_t insn)
+ CORE_ADDR addr, uint32_t insn)
{
ppc_gdbarch_tdep *tdep = (ppc_gdbarch_tdep *) gdbarch_tdep (gdbarch);
int ext = PPC_EXTOP (insn);
+ int at = PPC_FIELD (insn, 6, 3);
switch (ext & 0x1f)
{
@@ -5206,6 +5562,75 @@ ppc_process_record_op59 (struct gdbarch *gdbarch, struct regcache *regcache,
return 0;
}
+ /* MMA instructions, keep looking. */
+ switch (ext >> 2) /* Additional opcode field is upper 8-bits of ext */
+ {
+ case 3: /* VSX Vector 8-bit Signed/Unsigned Integer GER, xvi8ger4 */
+ case 2: /* VSX Vector 8-bit Signed/Unsigned Integer GER Positive
+ multiply, Positive accumulate, xvi8ger4pp */
+
+ case 99: /* VSX Vector 8-bit Signed/Unsigned Integer GER with
+ Saturate Positive multiply, Positive accumulate,
+ xvi8ger4spp */
+
+ case 35: /* VSX Vector 4-bit Signed Integer GER, xvi4ger8 */
+ case 34: /* VSX Vector 4-bit Signed Integer GER Positive multiply,
+ Positive accumulate, xvi4ger8pp */
+
+ case 75: /* VSX Vector 16-bit Signed Integer GER, xvi16ger2 */
+ case 107: /* VSX Vector 16-bit Signed Integer GER Positive multiply,
+ Positive accumulate, xvi16ger2pp */
+
+ case 43: /* VSX Vector 16-bit Signed Integer GER with Saturation,
+ xvi16ger2s */
+ case 42: /* VSX Vector 16-bit Signed Integer GER with Saturation
+ Positive multiply, Positive accumulate, xvi16ger2spp */
+ ppc_record_ACC_fpscr (regcache, tdep, at, false);
+ return 0;
+
+ case 19: /* VSX Vector 16-bit Floating-Point GER, xvf16ger2 */
+ case 18: /* VSX Vector 16-bit Floating-Point GER Positive multiply,
+ Positive accumulate, xvf16ger2pp */
+ case 146: /* VSX Vector 16-bit Floating-Point GER Positive multiply,
+ Negative accumulate, xvf16ger2pn */
+ case 82: /* VSX Vector 16-bit Floating-Point GER Negative multiply,
+ Positive accumulate, xvf16ger2np */
+ case 210: /* VSX Vector 16-bit Floating-Point GER Negative multiply,
+ Negative accumulate, xvf16ger2nn */
+
+ case 27: /* VSX Vector 32-bit Floating-Point GER, xvf32ger */
+ case 26: /* VSX Vector 32-bit Floating-Point GER Positive multiply,
+ Positive accumulate, xvf32gerpp */
+ case 154: /* VSX Vector 32-bit Floating-Point GER Positive multiply,
+ Negative accumulate, xvf32gerpn */
+ case 90: /* VSX Vector 32-bit Floating-Point GER Negative multiply,
+ Positive accumulate, xvf32gernp */
+ case 218: /* VSX Vector 32-bit Floating-Point GER Negative multiply,
+ Negative accumulate, xvf32gernn */
+
+ case 59: /* VSX Vector 64-bit Floating-Point GER, pmxvf64ger */
+ case 58: /* VSX Vector 64-bit Floating-Point GER Positive multiply,
+ Positive accumulate, xvf64gerpp */
+ case 186: /* VSX Vector 64-bit Floating-Point GER Positive multiply,
+ Negative accumulate, xvf64gerpn */
+ case 122: /* VSX Vector 64-bit Floating-Point GER Negative multiply,
+ Positive accumulate, xvf64gernp */
+ case 250: /* VSX Vector 64-bit Floating-Point GER Negative multiply,
+ Negative accumulate, pmxvf64gernn */
+
+ case 51: /* VSX Vector bfloat16 GER, xvbf16ger2 */
+ case 50: /* VSX Vector bfloat16 GER Positive multiply,
+ Positive accumulate, xvbf16ger2pp */
+ case 178: /* VSX Vector bfloat16 GER Positive multiply,
+ Negative accumulate, xvbf16ger2pn */
+ case 114: /* VSX Vector bfloat16 GER Negative multiply,
+ Positive accumulate, xvbf16ger2np */
+ case 242: /* VSX Vector bfloat16 GER Negative multiply,
+ Negative accumulate, xvbf16ger2nn */
+ ppc_record_ACC_fpscr (regcache, tdep, at, true);
+ return 0;
+ }
+
switch (ext)
{
case 2: /* DFP Add */
@@ -5263,8 +5688,50 @@ ppc_process_record_op59 (struct gdbarch *gdbarch, struct regcache *regcache,
return 0;
}
- fprintf_unfiltered (gdb_stdlog, "Warning: Don't know how to record %08x "
- "at %s, 59-%d.\n", insn, paddress (gdbarch, addr), ext);
+ gdb_printf (gdb_stdlog, "Warning: Don't know how to record %08x "
+ "at %s, 59-%d.\n", insn, paddress (gdbarch, addr), ext);
+ return -1;
+}
+
+/* Parse and record an XX2-Form instruction with opcode 60 at ADDR. The
+ word instruction is an argument insn. Return 0 if successful. */
+
+static int
+ppc_process_record_op60_XX2 (struct gdbarch *gdbarch,
+ struct regcache *regcache,
+ CORE_ADDR addr, uint32_t insn)
+{
+ ppc_gdbarch_tdep *tdep = (ppc_gdbarch_tdep *) gdbarch_tdep (gdbarch);
+ int RA_opcode = PPC_RA(insn);
+
+ switch (RA_opcode)
+ {
+ case 2: /* VSX Vector Test Least-Significant Bit by Byte */
+ case 25: /* VSX Vector round and Convert Single-Precision format
+ to Half-Precision format. Only changes the CR
+ field. */
+ record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
+ return 0;
+ case 17: /* VSX Vector Convert with round Single-Precision
+ to bfloat16 format */
+ case 24: /* VSX Vector Convert Half-Precision format to
+ Single-Precision format */
+ record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
+ /* Fall-through */
+ case 0: /* VSX Vector Extract Exponent Double-Precision */
+ case 1: /* VSX Vector Extract Significand Double-Precision */
+ case 7: /* VSX Vector Byte-Reverse Halfword */
+ case 8: /* VSX Vector Extract Exponent Single-Precision */
+ case 9: /* VSX Vector Extract Significand Single-Precision */
+ case 15: /* VSX Vector Byte-Reverse Word */
+ case 16: /* VSX Vector Convert bfloat16 to Single-Precision
+ format Non-signaling */
+ case 23: /* VSX Vector Byte-Reverse Doubleword */
+ case 31: /* VSX Vector Byte-Reverse Quadword */
+ ppc_record_vsr (regcache, tdep, PPC_XT (insn));
+ return 0;
+ }
+
return -1;
}
@@ -5583,37 +6050,30 @@ ppc_process_record_op60 (struct gdbarch *gdbarch, struct regcache *regcache,
break;
case 475:
- switch (PPC_FIELD (insn, 11, 5))
- {
- case 24: /* VSX Vector Convert Half-Precision format to
- Single-Precision format */
- case 25: /* VSX Vector round and Convert Single-Precision format
- to Half-Precision format */
- record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
- /* FALL-THROUGH */
- case 0: /* VSX Vector Extract Exponent Double-Precision */
- case 1: /* VSX Vector Extract Significand Double-Precision */
- case 7: /* VSX Vector Byte-Reverse Halfword */
- case 8: /* VSX Vector Extract Exponent Single-Precision */
- case 9: /* VSX Vector Extract Significand Single-Precision */
- case 15: /* VSX Vector Byte-Reverse Word */
- case 23: /* VSX Vector Byte-Reverse Doubleword */
- case 31: /* VSX Vector Byte-Reverse Quadword */
- ppc_record_vsr (regcache, tdep, PPC_XT (insn));
- return 0;
- }
- break;
+ if (ppc_process_record_op60_XX2 (gdbarch, regcache, addr, insn) != 0)
+ return -1;
+ return 0;
}
switch (ext)
{
- case 360: /* VSX Vector Splat Immediate Byte */
- if (PPC_FIELD (insn, 11, 2) == 0)
+ case 360:
+ if (PPC_FIELD (insn, 11, 2) == 0) /* VSX Vector Splat Immediate Byte */
+ {
+ ppc_record_vsr (regcache, tdep, PPC_XT (insn));
+ return 0;
+ }
+ if (PPC_FIELD (insn, 11, 5) == 31) /* Load VSX Vector Special Value
+ Quadword */
{
ppc_record_vsr (regcache, tdep, PPC_XT (insn));
return 0;
}
break;
+ case 916: /* VSX Vector Generate PCV from Byte Mask */
+ case 917: /* VSX Vector Generate PCV from Halfword Mask */
+ case 948: /* VSX Vector Generate PCV from Word Mask */
+ case 949: /* VSX Vector Generate PCV from Doubleword Mask */
case 918: /* VSX Scalar Insert Exponent Double-Precision */
ppc_record_vsr (regcache, tdep, PPC_XT (insn));
return 0;
@@ -5625,8 +6085,8 @@ ppc_process_record_op60 (struct gdbarch *gdbarch, struct regcache *regcache,
return 0;
}
- fprintf_unfiltered (gdb_stdlog, "Warning: Don't know how to record %08x "
- "at %s, 60-%d.\n", insn, paddress (gdbarch, addr), ext);
+ gdb_printf (gdb_stdlog, "Warning: Don't know how to record %08x "
+ "at %s, 60-%d.\n", insn, paddress (gdbarch, addr), ext);
return -1;
}
@@ -5684,8 +6144,8 @@ ppc_process_record_op61 (struct gdbarch *gdbarch, struct regcache *regcache,
return 0;
}
- fprintf_unfiltered (gdb_stdlog, "Warning: Don't know how to record %08x "
- "at %s.\n", insn, paddress (gdbarch, addr));
+ gdb_printf (gdb_stdlog, "Warning: Don't know how to record %08x "
+ "at %s.\n", insn, paddress (gdbarch, addr));
return -1;
}
@@ -5894,6 +6354,35 @@ ppc_process_record_op63 (struct gdbarch *gdbarch, struct regcache *regcache,
Quad-Precision */
case 516: /* VSX Scalar Subtract Quad-Precision */
case 548: /* VSX Scalar Divide Quad-Precision */
+ case 994:
+ {
+ switch (PPC_FIELD (insn, 11, 5))
+ {
+ case 0: /* DFP Convert From Fixed Quadword Quad */
+ record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
+
+ record_full_arch_list_add_reg (regcache,
+ tdep->ppc_fp0_regnum
+ + PPC_FRT (insn));
+ record_full_arch_list_add_reg (regcache,
+ tdep->ppc_fp0_regnum
+ + PPC_FRT (insn) + 1);
+ return 0;
+ case 1: /* DFP Convert To Fixed Quadword Quad */
+ record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
+ ppc_record_vsr (regcache, tdep, PPC_VRT (insn) + 32);
+ return 0;
+ }
+ }
+
+ record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
+ /* FALL-THROUGH */
+ case 68: /* VSX Scalar Compare Equal Quad-Precision */
+ case 196: /* VSX Scalar Compare Greater Than or Equal
+ Quad-Precision */
+ case 228: /* VSX Scalar Compare Greater Than Quad-Precision */
+ case 676: /* VSX Scalar Maximum Type-C Quad-Precision */
+ case 740: /* VSX Scalar Minimum Type-C Quad-Precision */
record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
/* FALL-THROUGH */
case 100: /* VSX Scalar Copy Sign Quad-Precision */
@@ -5920,14 +6409,22 @@ ppc_process_record_op63 (struct gdbarch *gdbarch, struct regcache *regcache,
case 836:
switch (PPC_FIELD (insn, 11, 5))
{
+ case 0: /* VSX Scalar Convert with round to zero
+ Quad-Precision to Unsigned Quadword */
case 1: /* VSX Scalar truncate & Convert Quad-Precision format
to Unsigned Word format */
case 2: /* VSX Scalar Convert Unsigned Doubleword format to
Quad-Precision format */
+ case 3: /* VSX Scalar Convert with round
+ Unsigned Quadword to Quad-Precision */
+ case 8: /* VSX Scalar Convert with round to zero
+ Quad-Precision to Signed Quadword */
case 9: /* VSX Scalar truncate & Convert Quad-Precision format
to Signed Word format */
case 10: /* VSX Scalar Convert Signed Doubleword format to
Quad-Precision format */
+ case 11: /* VSX Scalar Convert with round
+ Signed Quadword to Quad-Precision */
case 17: /* VSX Scalar truncate & Convert Quad-Precision format
to Unsigned Doubleword format */
case 20: /* VSX Scalar round & Convert Quad-Precision format to
@@ -5942,22 +6439,656 @@ ppc_process_record_op63 (struct gdbarch *gdbarch, struct regcache *regcache,
}
}
- fprintf_unfiltered (gdb_stdlog, "Warning: Don't know how to record %08x "
- "at %s, 63-%d.\n", insn, paddress (gdbarch, addr), ext);
+ gdb_printf (gdb_stdlog, "Warning: Don't know how to record %08x "
+ "at %s, 63-%d.\n", insn, paddress (gdbarch, addr), ext);
return -1;
}
+/* Record the prefixed instructions with primary opcode 32. The arguments are
+ the first 32-bits of the instruction (insn_prefix), and the second 32-bits
+ of the instruction (insn_suffix). Return 0 on success. */
+
+static int
+ppc_process_record_prefix_op42 (struct gdbarch *gdbarch,
+ struct regcache *regcache,
+ uint32_t insn_prefix, uint32_t insn_suffix)
+{
+ ppc_gdbarch_tdep *tdep = (ppc_gdbarch_tdep *) gdbarch_tdep (gdbarch);
+ int type = PPC_FIELD (insn_prefix, 6, 2);
+ int ST1 = PPC_FIELD (insn_prefix, 8, 1);
+
+ if (ST1 != 0)
+ return -1;
+
+ switch (type)
+ {
+ case 0: /* Prefixed Load VSX Scalar Doubleword, plxsd */
+ ppc_record_vsr (regcache, tdep, PPC_VRT (insn_suffix) + 32);
+ break;
+ case 2: /* Prefixed Load Halfword Algebraic, plha */
+ record_full_arch_list_add_reg (regcache,
+ tdep->ppc_gp0_regnum
+ + PPC_RT (insn_suffix));
+ break;
+ default:
+ return -1;
+ }
+ return 0;
+}
+
+/* Record the prefixed XX3-Form instructions with primary opcode 59. The
+ arguments are the first 32-bits of the instruction (insn_prefix), and the
+ second 32-bits of the instruction (insn_suffix). Return 0 on success. */
+
+static int
+ppc_process_record_prefix_op59_XX3 (struct gdbarch *gdbarch,
+ struct regcache *regcache,
+ uint32_t insn_prefix, uint32_t insn_suffix)
+{
+ int opcode = PPC_FIELD (insn_suffix, 21, 8);
+ int type = PPC_FIELD (insn_prefix, 6, 2);
+ int ST4 = PPC_FIELD (insn_prefix, 8, 4);
+ int at = PPC_FIELD (insn_suffix, 6, 3);
+ ppc_gdbarch_tdep *tdep = (ppc_gdbarch_tdep *) gdbarch_tdep (gdbarch);
+
+ if (type == 3)
+ {
+ if (ST4 == 9)
+ switch (opcode)
+ {
+ case 35: /* Prefixed Masked VSX Vector 4-bit Signed Integer GER
+ MMIRR, pmxvi4ger8 */
+ case 34: /* Prefixed Masked VSX Vector 4-bit Signed Integer GER
+ MMIRR, pmxvi4ger8pp */
+
+ case 99: /* Prefixed Masked VSX Vector 8-bit Signed/Unsigned
+ Integer GER with Saturate Positive multiply,
+ Positive accumulate, xvi8ger4spp */
+
+ case 3: /* Prefixed Masked VSX Vector 8-bit Signed/Unsigned
+ Integer GER MMIRR, pmxvi8ger4 */
+ case 2: /* Prefixed Masked VSX Vector 8-bit Signed/Unsigned
+ Integer GER Positive multiply, Positive accumulate
+ MMIRR, pmxvi8ger4pp */
+
+ case 75: /* Prefixed Masked VSX Vector 16-bit Signed Integer
+ GER MMIRR, pmxvi16ger2 */
+ case 107: /* Prefixed Masked VSX Vector 16-bit Signed Integer
+ GER Positive multiply, Positive accumulate,
+ pmxvi16ger2pp */
+
+ case 43: /* Prefixed Masked VSX Vector 16-bit Signed Integer
+ GER with Saturation MMIRR, pmxvi16ger2s */
+ case 42: /* Prefixed Masked VSX Vector 16-bit Signed Integer
+ GER with Saturation Positive multiply, Positive
+ accumulate MMIRR, pmxvi16ger2spp */
+ ppc_record_ACC_fpscr (regcache, tdep, at, false);
+ return 0;
+
+ case 19: /* Prefixed Masked VSX Vector 16-bit Floating-Point
+ GER MMIRR, pmxvf16ger2 */
+ case 18: /* Prefixed Masked VSX Vector 16-bit Floating-Point
+ GER Positive multiply, Positive accumulate MMIRR,
+ pmxvf16ger2pp */
+ case 146: /* Prefixed Masked VSX Vector 16-bit Floating-Point
+ GER Positive multiply, Negative accumulate MMIRR,
+ pmxvf16ger2pn */
+ case 82: /* Prefixed Masked VSX Vector 16-bit Floating-Point
+ GER Negative multiply, Positive accumulate MMIRR,
+ pmxvf16ger2np */
+ case 210: /* Prefixed Masked VSX Vector 16-bit Floating-Point
+ GER Negative multiply, Negative accumulate MMIRR,
+ pmxvf16ger2nn */
+
+ case 27: /* Prefixed Masked VSX Vector 32-bit Floating-Point
+ GER MMIRR, pmxvf32ger */
+ case 26: /* Prefixed Masked VSX Vector 32-bit Floating-Point
+ GER Positive multiply, Positive accumulate MMIRR,
+ pmxvf32gerpp */
+ case 154: /* Prefixed Masked VSX Vector 32-bit Floating-Point
+ GER Positive multiply, Negative accumulate MMIRR,
+ pmxvf32gerpn */
+ case 90: /* Prefixed Masked VSX Vector 32-bit Floating-Point
+ GER Negative multiply, Positive accumulate MMIRR,
+ pmxvf32gernp */
+ case 218: /* Prefixed Masked VSX Vector 32-bit Floating-Point
+ GER Negative multiply, Negative accumulate MMIRR,
+ pmxvf32gernn */
+
+ case 59: /* Prefixed Masked VSX Vector 64-bit Floating-Point
+ GER MMIRR, pmxvf64ger */
+ case 58: /* Floating-Point GER Positive multiply, Positive
+ accumulate MMIRR, pmxvf64gerpp */
+ case 186: /* Prefixed Masked VSX Vector 64-bit Floating-Point
+ GER Positive multiply, Negative accumulate MMIRR,
+ pmxvf64gerpn */
+ case 122: /* Prefixed Masked VSX Vector 64-bit Floating-Point
+ GER Negative multiply, Positive accumulate MMIRR,
+ pmxvf64gernp */
+ case 250: /* Prefixed Masked VSX Vector 64-bit Floating-Point
+ GER Negative multiply, Negative accumulate MMIRR,
+ pmxvf64gernn */
+
+ case 51: /* Prefixed Masked VSX Vector bfloat16 GER MMIRR,
+ pmxvbf16ger2 */
+ case 50: /* Prefixed Masked VSX Vector bfloat16 GER Positive
+ multiply, Positive accumulate MMIRR,
+ pmxvbf16ger2pp */
+ case 178: /* Prefixed Masked VSX Vector bfloat16 GER Positive
+ multiply, Negative accumulate MMIRR,
+ pmxvbf16ger2pn */
+ case 114: /* Prefixed Masked VSX Vector bfloat16 GER Negative
+ multiply, Positive accumulate MMIRR,
+ pmxvbf16ger2np */
+ case 242: /* Prefixed Masked VSX Vector bfloat16 GER Negative
+ multiply, Negative accumulate MMIRR,
+ pmxvbf16ger2nn */
+ ppc_record_ACC_fpscr (regcache, tdep, at, true);
+ return 0;
+ }
+ }
+ else
+ return -1;
+
+ return 0;
+}
+
+/* Record the prefixed store instructions. The arguments are the instruction
+ address, the first 32-bits of the instruction(insn_prefix) and the following
+ 32-bits of the instruction (insn_suffix). Return 0 on success. */
+
+static int
+ppc_process_record_prefix_store (struct gdbarch *gdbarch,
+ struct regcache *regcache,
+ CORE_ADDR addr, uint32_t insn_prefix,
+ uint32_t insn_suffix)
+{
+ ppc_gdbarch_tdep *tdep = (ppc_gdbarch_tdep *) gdbarch_tdep (gdbarch);
+ ULONGEST iaddr = 0;
+ int size;
+ int R = PPC_BIT (insn_prefix, 11);
+ int op6 = PPC_OP6 (insn_suffix);
+
+ if (R == 0)
+ {
+ if (PPC_RA (insn_suffix) != 0)
+ regcache_raw_read_unsigned (regcache, tdep->ppc_gp0_regnum
+ + PPC_RA (insn_suffix), &iaddr);
+ }
+ else
+ {
+ iaddr = addr; /* PC relative */
+ }
+
+ switch (op6)
+ {
+ case 38:
+ size = 1; /* store byte, pstb */
+ break;
+ case 44:
+ size = 2; /* store halfword, psth */
+ break;
+ case 36:
+ case 52:
+ size = 4; /* store word, pstw, pstfs */
+ break;
+ case 54:
+ case 61:
+ size = 8; /* store double word, pstd, pstfd */
+ break;
+ case 60:
+ size = 16; /* store quadword, pstq */
+ break;
+ default: return -1;
+ }
+
+ iaddr += P_PPC_D (insn_prefix, insn_suffix);
+ record_full_arch_list_add_mem (iaddr, size);
+ return 0;
+}
+
+/* Record the prefixed instructions with primary op code 32. The arguments
+ are the first 32-bits of the instruction (insn_prefix) and the following
+ 32-bits of the instruction (insn_suffix). Return 0 on success. */
+
+static int
+ppc_process_record_prefix_op32 (struct gdbarch *gdbarch,
+ struct regcache *regcache,
+ uint32_t insn_prefix, uint32_t insn_suffix)
+{
+ int type = PPC_FIELD (insn_prefix, 6, 2);
+ int ST1 = PPC_FIELD (insn_prefix, 8, 1);
+ int ST4 = PPC_FIELD (insn_prefix, 8, 4);
+ ppc_gdbarch_tdep *tdep = (ppc_gdbarch_tdep *) gdbarch_tdep (gdbarch);
+
+ if (type == 1)
+ {
+ if (ST4 == 0)
+ {
+ switch (PPC_FIELD (insn_suffix, 11, 3))
+ {
+ case 0: /* VSX Vector Splat Immediate Word 8RR, xxsplti32dx */
+ ppc_record_vsr (regcache, tdep, P_PPC_XT15 (insn_suffix));
+ return 0;
+ }
+
+ switch (PPC_FIELD (insn_suffix, 11, 4))
+ {
+ case 2: /* VSX Vector Splat Immediate Double-Precision
+ 8RR, xxspltidp */
+ case 3: /* VSX Vector Splat Immediate Word 8RR, xxspltiw */
+ ppc_record_vsr (regcache, tdep, P_PPC_XT15 (insn_suffix));
+ return 0;
+ default:
+ return -1;
+ }
+ }
+ else
+ return -1;
+
+ }
+ else if (type == 2)
+ {
+ if (ST1 == 0) /* Prefixed Load Word and Zero, plwz */
+ record_full_arch_list_add_reg (regcache, tdep->ppc_gp0_regnum
+ + PPC_RT (insn_suffix));
+ else
+ return -1;
+
+ }
+ else
+ return -1;
+
+ return 0;
+}
+
+/* Record the prefixed instructions with primary op code 33. The arguments
+ are the first 32-bits of the instruction(insn_prefix) and the following
+ 32-bits of the instruction (insn_suffix). Return 0 on success. */
+
+static int
+ppc_process_record_prefix_op33 (struct gdbarch *gdbarch,
+ struct regcache *regcache,
+ uint32_t insn_prefix, uint32_t insn_suffix)
+{
+ int type = PPC_FIELD (insn_prefix, 6, 2);
+ int ST4 = PPC_FIELD (insn_prefix, 8, 4);
+ ppc_gdbarch_tdep *tdep = (ppc_gdbarch_tdep *) gdbarch_tdep (gdbarch);
+
+ if (type == 1)
+ {
+ if (ST4 == 0)
+ switch (PPC_FIELD (insn_suffix, 26, 2))
+ {
+ case 0: /* VSX Vector Blend Variable Byte 8RR, xxblendvb */
+ case 1: /* VSX Vector Blend Variable Halfword, xxblendvh */
+ case 2: /* VSX Vector Blend Variable Word, xxblendvw */
+ case 3: /* VSX Vector Blend Variable Doubleword, xxblendvd */
+ ppc_record_vsr (regcache, tdep, PPC_XT (insn_suffix));
+ break;
+ default:
+ return -1;
+ }
+ else
+ return -1;
+
+ }
+ else
+ return -1;
+
+ return 0;
+}
+
+/* Record the prefixed instructions with primary op code 34. The arguments
+ are the first 32-bits of the instruction(insn_prefix) and the following
+ 32-bits of the instruction (insn_suffix). Return 0 on success. */
+
+static int
+ppc_process_record_prefix_op34 (struct gdbarch *gdbarch,
+ struct regcache *regcache,
+ uint32_t insn_prefix, uint32_t insn_suffix)
+{
+ int type = PPC_FIELD (insn_prefix, 6, 2);
+ int ST1 = PPC_FIELD (insn_prefix, 8, 1);
+ int ST4 = PPC_FIELD (insn_prefix, 8, 4);
+ ppc_gdbarch_tdep *tdep = (ppc_gdbarch_tdep *) gdbarch_tdep (gdbarch);
+
+ if (type == 1)
+ {
+ if (ST4 == 0)
+ switch (PPC_FIELD (insn_suffix, 26, 2))
+ {
+ case 0: /* VSX Vector Permute Extended 8RR, xxpermx */
+ case 1: /* VSX Vector Evaluate 8RR, xxeval */
+ ppc_record_vsr (regcache, tdep, P_PPC_XT (insn_suffix));
+ break;
+ default:
+ return -1;
+ }
+ else
+ return -1;
+
+ }
+ else if (type == 2)
+ {
+ if (ST1 == 0) /* Prefixed Load Word and Zero, plbz */
+ record_full_arch_list_add_reg (regcache,
+ tdep->ppc_gp0_regnum
+ + PPC_RT (insn_suffix));
+ else
+ return -1;
+
+ }
+ else
+ return -1;
+
+ return 0;
+}
+
+/* Record the prefixed VSX store, form DS, instructions. The arguments are the
+ instruction address (addr), the first 32-bits of the instruction
+ (insn_prefix) followed by the 32-bit instruction suffix (insn_suffix).
+ Return 0 on success. */
+
+static int
+ppc_process_record_prefix_store_vsx_ds_form (struct gdbarch *gdbarch,
+ struct regcache *regcache,
+ CORE_ADDR addr,
+ uint32_t insn_prefix,
+ uint32_t insn_suffix)
+{
+ ppc_gdbarch_tdep *tdep = (ppc_gdbarch_tdep *) gdbarch_tdep (gdbarch);
+ ULONGEST ea = 0;
+ int size;
+ int R = PPC_BIT (insn_prefix, 11);
+ int type = PPC_FIELD (insn_prefix, 6, 2);
+ int ST1 = PPC_FIELD (insn_prefix, 8, 1);
+
+ if ((type == 0) && (ST1 == 0))
+ {
+ if (R == 0)
+ {
+ if (PPC_RA (insn_suffix) != 0)
+ regcache_raw_read_unsigned (regcache,
+ tdep->ppc_gp0_regnum
+ + PPC_RA (insn_suffix),
+ &ea);
+ }
+ else
+ {
+ ea = addr; /* PC relative */
+ }
+
+ ea += P_PPC_D (insn_prefix, insn_suffix);
+ switch (PPC_FIELD (insn_suffix, 0, 6))
+ {
+ case 46: /* Prefixed Store VSX Scalar Doubleword, pstxsd */
+ size = 8;
+ break;
+ case 47: /* Prefixed,Store VSX Scalar Single-Precision, pstxssp */
+ size = 4;
+ break;
+ default:
+ return -1;
+ }
+ record_full_arch_list_add_mem (ea, size);
+ return 0;
+ }
+ else
+ return -1;
+}
+
+/* Record the prefixed VSX, form D, instructions. The arguments are the
+ instruction address for PC-relative addresss (addr), the first 32-bits of
+ the instruction (insn_prefix) and the following 32-bits of the instruction
+ (insn_suffix). Return 0 on success. */
+
+static int
+ppc_process_record_prefix_vsx_d_form (struct gdbarch *gdbarch,
+ struct regcache *regcache,
+ CORE_ADDR addr,
+ uint32_t insn_prefix,
+ uint32_t insn_suffix)
+{
+ ppc_gdbarch_tdep *tdep = (ppc_gdbarch_tdep *) gdbarch_tdep (gdbarch);
+ ULONGEST ea = 0;
+ int size;
+ int R = PPC_BIT (insn_prefix, 11);
+ int type = PPC_FIELD (insn_prefix, 6, 2);
+ int ST1 = PPC_FIELD (insn_prefix, 8, 1);
+
+ if ((type == 0) && (ST1 == 0))
+ {
+ switch (PPC_FIELD (insn_suffix, 0, 5))
+ {
+ case 25: /* Prefixed Load VSX Vector, plxv */
+ ppc_record_vsr (regcache, tdep, P_PPC_XT5 (insn_prefix));
+ return 0;
+ case 27: /* Prefixed Store VSX Vector 8LS, pstxv */
+ {
+ size = 16;
+ if (R == 0)
+ {
+ if (PPC_RA (insn_suffix) != 0)
+ regcache_raw_read_unsigned (regcache,
+ tdep->ppc_gp0_regnum
+ + PPC_RA (insn_suffix),
+ &ea);
+ }
+ else
+ {
+ ea = addr; /* PC relative */
+ }
+
+ ea += P_PPC_D (insn_prefix, insn_suffix);
+ record_full_arch_list_add_mem (ea, size);
+ return 0;
+ }
+ }
+ return -1;
+ }
+ else
+ return -1;
+}
+
/* Parse the current instruction and record the values of the registers and
memory that will be changed in current instruction to "record_arch_list".
Return -1 if something wrong. */
+/* This handles the recording of the various prefix instructions. It takes
+ the instruction address, the first 32-bits of the instruction (insn_prefix)
+ and the following 32-bits of the instruction (insn_suffix). Return 0 on
+ success. */
+
+static int
+ppc_process_prefix_instruction (int insn_prefix, int insn_suffix,
+ CORE_ADDR addr, struct gdbarch *gdbarch,
+ struct regcache *regcache)
+{
+ int type = PPC_FIELD (insn_prefix, 6, 2);
+ int ST1 = PPC_FIELD (insn_prefix, 8, 1);
+ ppc_gdbarch_tdep *tdep = (ppc_gdbarch_tdep *) gdbarch_tdep (gdbarch);
+ int op6;
+
+ /* D-form has uses a 5-bit opcode in the instruction suffix */
+ if (ppc_process_record_prefix_vsx_d_form ( gdbarch, regcache, addr,
+ insn_prefix, insn_suffix) == 0)
+ goto SUCCESS;
+
+ op6 = PPC_OP6 (insn_suffix); /* 6-bit opcode in the instruction suffix */
+
+ switch (op6)
+ {
+ case 14: /* Prefixed Add Immediate, paddi */
+ if ((type == 2) && (ST1 == 0))
+ record_full_arch_list_add_reg (regcache,
+ tdep->ppc_gp0_regnum
+ + PPC_RT (insn_suffix));
+ else
+ goto UNKNOWN_PREFIX_OP;
+ break;
+
+ case 32:
+ if (ppc_process_record_prefix_op32 (gdbarch, regcache,
+ insn_prefix, insn_suffix) != 0)
+ goto UNKNOWN_PREFIX_OP;
+ break;
+
+ case 33:
+ if (ppc_process_record_prefix_op33 (gdbarch, regcache,
+ insn_prefix, insn_suffix) != 0)
+ goto UNKNOWN_PREFIX_OP;
+ break;
+
+ case 34: /* Prefixed Load Byte and Zero, plbz */
+ if (ppc_process_record_prefix_op34 (gdbarch, regcache,
+ insn_prefix, insn_suffix) != 0)
+ goto UNKNOWN_PREFIX_OP;
+ break;
+ case 40: /* Prefixed Load Halfword and Zero, plhz */
+ if ((type == 2) && (ST1 == 0))
+ record_full_arch_list_add_reg (regcache,
+ tdep->ppc_gp0_regnum
+ + PPC_RT (insn_suffix));
+ else
+ goto UNKNOWN_PREFIX_OP;
+ break;
+
+ break;
+
+ case 36: /* Prefixed Store Word, pstw */
+ case 38: /* Prefixed Store Byte, pstb */
+ case 44: /* Prefixed Store Halfword, psth */
+ case 52: /* Prefixed Store Floating-Point Single, pstfs */
+ case 54: /* Prefixed Store Floating-Point Double, pstfd */
+ case 60: /* Prefixed Store Quadword, pstq */
+ case 61: /* Prefixed Store Doubleword, pstd */
+ if (ppc_process_record_prefix_store (gdbarch, regcache, addr,
+ insn_prefix, insn_suffix) != 0)
+ goto UNKNOWN_PREFIX_OP;
+ break;
+
+ case 42:
+ if (ppc_process_record_prefix_op42 (gdbarch, regcache,
+ insn_prefix, insn_suffix) != 0)
+ goto UNKNOWN_PREFIX_OP;
+ break;
+
+ case 43: /* Prefixed Load VSX Scalar Single-Precision, plxssp */
+ if ((type == 0) && (ST1 == 0))
+ ppc_record_vsr (regcache, tdep, PPC_VRT (insn_suffix) + 32);
+ else
+ goto UNKNOWN_PREFIX_OP;
+ break;
+
+ case 46:
+ case 47:
+ if (ppc_process_record_prefix_store_vsx_ds_form (gdbarch, regcache, addr,
+ insn_prefix, insn_suffix) != 0)
+ goto UNKNOWN_PREFIX_OP;
+ break;
+
+ case 56: /* Prefixed Load Quadword, plq */
+ {
+ if ((type == 0) && (ST1 == 0))
+ {
+ int tmp;
+ tmp = tdep->ppc_gp0_regnum + (PPC_RT (insn_suffix) & ~1);
+ record_full_arch_list_add_reg (regcache, tmp);
+ record_full_arch_list_add_reg (regcache, tmp + 1);
+ }
+ else
+ goto UNKNOWN_PREFIX_OP;
+ break;
+ }
+
+ case 41: /* Prefixed Load Word Algebraic, plwa */
+ case 57: /* Prefixed Load Doubleword, pld */
+ if ((type == 0) && (ST1 == 0))
+ record_full_arch_list_add_reg (regcache,
+ tdep->ppc_gp0_regnum
+ + PPC_RT (insn_suffix));
+ else
+ goto UNKNOWN_PREFIX_OP;
+ break;
+
+ case 48: /* Prefixed Load Floating-Point Single, plfs */
+ case 50: /* Prefixed Load Floating-Point Double, plfd */
+ if ((type == 2) && (ST1 == 0))
+ record_full_arch_list_add_reg (regcache,
+ tdep->ppc_fp0_regnum
+ + PPC_FRT (insn_suffix));
+ else
+ goto UNKNOWN_PREFIX_OP;
+ break;
+
+ case 58: /* Prefixed Load VSX Vector Paired, plxvp */
+ if ((type == 0) && (ST1 == 0))
+ {
+ ppc_record_vsr (regcache, tdep, PPC_XTp (insn_suffix));
+ ppc_record_vsr (regcache, tdep, PPC_XTp (insn_suffix) + 1);
+ }
+ else
+ goto UNKNOWN_PREFIX_OP;
+ break;
+
+ case 59:
+ if (ppc_process_record_prefix_op59_XX3 (gdbarch, regcache, insn_prefix,
+ insn_suffix) != 0)
+ goto UNKNOWN_PREFIX_OP;
+ break;
+
+ case 62: /* Prefixed Store VSX Vector Paired 8LS, pstxvp */
+ if ((type == 0) && (ST1 == 0))
+ {
+ int R = PPC_BIT (insn_prefix, 11);
+ CORE_ADDR ea = 0;
+
+ if (R == 0)
+ {
+ if (PPC_RA (insn_suffix) != 0)
+ regcache_raw_read_unsigned (regcache,
+ tdep->ppc_gp0_regnum
+ + PPC_RA (insn_suffix), &ea);
+ }
+ else
+ {
+ ea = addr; /* PC relative */
+ }
+
+ ea += P_PPC_D (insn_prefix, insn_suffix) << 4;
+ record_full_arch_list_add_mem (ea, 32);
+ }
+ else
+ goto UNKNOWN_PREFIX_OP;
+ break;
+
+ default:
+UNKNOWN_PREFIX_OP:
+ gdb_printf (gdb_stdlog,
+ "Warning: Don't know how to record prefix instruction "
+ "%08x %08x at %s, %d.\n",
+ insn_prefix, insn_suffix, paddress (gdbarch, addr),
+ op6);
+ return -1;
+ }
+
+ SUCCESS:
+ if (record_full_arch_list_add_reg (regcache, PPC_PC_REGNUM))
+ return -1;
+
+ if (record_full_arch_list_add_end ())
+ return -1;
+ return 0;
+}
+
int
ppc_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
CORE_ADDR addr)
{
ppc_gdbarch_tdep *tdep = (ppc_gdbarch_tdep *) gdbarch_tdep (gdbarch);
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
- uint32_t insn;
+ uint32_t insn, insn_suffix;
int op6, tmp, i;
insn = read_memory_unsigned_integer (addr, 4, byte_order);
@@ -5965,16 +7096,28 @@ ppc_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
switch (op6)
{
+ case 1: /* prefixed instruction */
+ {
+ /* Get the lower 32-bits of the prefixed instruction. */
+ insn_suffix = read_memory_unsigned_integer (addr+4, 4, byte_order);
+ return ppc_process_prefix_instruction (insn, insn_suffix, addr,
+ gdbarch, regcache);
+ }
case 2: /* Trap Doubleword Immediate */
case 3: /* Trap Word Immediate */
/* Do nothing. */
break;
- case 4:
+ case 4: /* Vector Integer, Compare, Logical, Shift, etc. */
if (ppc_process_record_op4 (gdbarch, regcache, addr, insn) != 0)
return -1;
break;
+ case 6: /* Vector Load and Store */
+ if (ppc_process_record_op6 (gdbarch, regcache, addr, insn) != 0)
+ return -1;
+ break;
+
case 17: /* System call */
if (PPC_LEV (insn) != 0)
goto UNKNOWN_OP;
@@ -5986,7 +7129,7 @@ ppc_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
}
else
{
- fprintf_unfiltered (gdb_stderr, _("no syscall record support\n"));
+ gdb_printf (gdb_stderr, _("no syscall record support\n"));
return -1;
}
break;
@@ -6235,8 +7378,8 @@ ppc_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
default:
UNKNOWN_OP:
- fprintf_unfiltered (gdb_stdlog, "Warning: Don't know how to record %08x "
- "at %s, %d.\n", insn, paddress (gdbarch, addr), op6);
+ gdb_printf (gdb_stdlog, "Warning: Don't know how to record %08x "
+ "at %s, %d.\n", insn, paddress (gdbarch, addr), op6);
return -1;
}
@@ -7361,7 +8504,7 @@ show_powerpc_exact_watchpoints (struct ui_file *file, int from_tty,
struct cmd_list_element *c,
const char *value)
{
- fprintf_filtered (file, _("Use of exact watchpoints is %s.\n"), value);
+ gdb_printf (file, _("Use of exact watchpoints is %s.\n"), value);
}
/* Read a PPC instruction from memory. */
diff --git a/gdb/run-on-main-thread.c b/gdb/run-on-main-thread.c
index ea633d9d2d0..eb22310f5c0 100644
--- a/gdb/run-on-main-thread.c
+++ b/gdb/run-on-main-thread.c
@@ -20,6 +20,7 @@
#include "run-on-main-thread.h"
#include "ser-event.h"
#if CXX_STD_THREAD
+#include <thread>
#include <mutex>
#endif
#include "gdbsupport/event-loop.h"
@@ -38,6 +39,10 @@ static std::vector<std::function<void ()>> runnables;
static std::mutex runnable_mutex;
+/* The main thread. */
+
+static std::thread::id main_thread;
+
#endif
/* Run all the queued runnables. */
@@ -89,10 +94,25 @@ run_on_main_thread (std::function<void ()> &&func)
serial_event_set (runnable_event);
}
+/* See run-on-main-thread.h. */
+
+bool
+is_main_thread ()
+{
+#if CXX_STD_THREAD
+ return std::this_thread::get_id () == main_thread;
+#else
+ return true;
+#endif
+}
+
void _initialize_run_on_main_thread ();
void
_initialize_run_on_main_thread ()
{
+#if CXX_STD_THREAD
+ main_thread = std::this_thread::get_id ();
+#endif
runnable_event = make_serial_event ();
add_file_handler (serial_event_fd (runnable_event), run_events, nullptr,
"run-on-main-thread");
diff --git a/gdb/run-on-main-thread.h b/gdb/run-on-main-thread.h
index 0bfe0b7456a..888328e7a51 100644
--- a/gdb/run-on-main-thread.h
+++ b/gdb/run-on-main-thread.h
@@ -25,4 +25,8 @@
extern void run_on_main_thread (std::function<void ()> &&);
+/* Return true on the main thread. */
+
+extern bool is_main_thread ();
+
#endif /* GDB_RUN_ON_MAIN_THREAD_H */
diff --git a/gdb/rust-exp.h b/gdb/rust-exp.h
index 28c28a8a526..778d87f4078 100644
--- a/gdb/rust-exp.h
+++ b/gdb/rust-exp.h
@@ -33,11 +33,6 @@ extern struct value *eval_op_rust_array (struct type *expect_type,
enum exp_opcode opcode,
struct value *ncopies,
struct value *elt);
-extern struct value *eval_op_rust_ind (struct type *expect_type,
- struct expression *exp,
- enum noside noside,
- enum exp_opcode opcode,
- struct value *value);
extern struct value *rust_subscript (struct type *expect_type,
struct expression *exp,
enum noside noside, bool for_addr,
@@ -46,16 +41,6 @@ extern struct value *rust_range (struct type *expect_type,
struct expression *exp,
enum noside noside, enum range_flag kind,
struct value *low, struct value *high);
-extern struct value *eval_op_rust_struct_anon (struct type *expect_type,
- struct expression *exp,
- enum noside noside,
- int field_number,
- struct value *lhs);
-extern struct value *eval_op_rust_structop (struct type *expect_type,
- struct expression *exp,
- enum noside noside,
- struct value *lhs,
- const char *field_name);
namespace expr
{
@@ -75,14 +60,7 @@ public:
value *evaluate (struct type *expect_type,
struct expression *exp,
- enum noside noside) override
- {
- if (noside != EVAL_NORMAL)
- return unop_ind_operation::evaluate (expect_type, exp, noside);
-
- value *arg1 = std::get<0> (m_storage)->evaluate (nullptr, exp, noside);
- return eval_op_rust_ind (expect_type, exp, noside, UNOP_IND, arg1);
- }
+ enum noside noside) override;
};
/* Subscript operator for Rust. */
@@ -174,13 +152,7 @@ public:
value *evaluate (struct type *expect_type,
struct expression *exp,
- enum noside noside) override
- {
- value *lhs = std::get<1> (m_storage)->evaluate (nullptr, exp, noside);
- return eval_op_rust_struct_anon (expect_type, exp, noside,
- std::get<0> (m_storage), lhs);
-
- }
+ enum noside noside) override;
enum exp_opcode opcode () const override
{ return STRUCTOP_ANONYMOUS; }
@@ -196,12 +168,7 @@ public:
value *evaluate (struct type *expect_type,
struct expression *exp,
- enum noside noside) override
- {
- value *lhs = std::get<0> (m_storage)->evaluate (nullptr, exp, noside);
- return eval_op_rust_structop (expect_type, exp, noside, lhs,
- std::get<1> (m_storage).c_str ());
- }
+ enum noside noside) override;
value *evaluate_funcall (struct type *expect_type,
struct expression *exp,
@@ -230,6 +197,33 @@ public:
{ return OP_AGGREGATE; }
};
+/* Rust parenthesized operation. This is needed to distinguish
+ between 'obj.f()', which is a method call, and '(obj.f)()', which
+ is a call of a function-valued field 'f'. */
+class rust_parenthesized_operation
+ : public tuple_holding_operation<operation_up>
+{
+public:
+
+ explicit rust_parenthesized_operation (operation_up op)
+ : tuple_holding_operation (std::move (op))
+ {
+ }
+
+ value *evaluate (struct type *expect_type,
+ struct expression *exp,
+ enum noside noside) override
+ {
+ return std::get<0> (m_storage)->evaluate (expect_type, exp, noside);
+ }
+
+ enum exp_opcode opcode () const override
+ {
+ /* A lie but this isn't worth introducing a new opcode for. */
+ return UNOP_PLUS;
+ }
+};
+
} /* namespace expr */
#endif /* RUST_EXP_H */
diff --git a/gdb/rust-lang.c b/gdb/rust-lang.c
index 316e172969a..bf8dba99ecd 100644
--- a/gdb/rust-lang.c
+++ b/gdb/rust-lang.c
@@ -159,10 +159,19 @@ rust_tuple_struct_type_p (struct type *type)
static bool
rust_slice_type_p (struct type *type)
{
- return (type->code () == TYPE_CODE_STRUCT
- && type->name () != NULL
- && (strncmp (type->name (), "&[", 2) == 0
- || strcmp (type->name (), "&str") == 0));
+ if (type->code () == TYPE_CODE_STRUCT
+ && type->name () != NULL
+ && type->num_fields () == 2)
+ {
+ /* The order of fields doesn't matter. While it would be nice
+ to check for artificiality here, the Rust compiler doesn't
+ emit this information. */
+ const char *n1 = type->field (0).name ();
+ const char *n2 = type->field (1).name ();
+ return ((streq (n1, "data_ptr") && streq (n2, "length"))
+ || (streq (n2, "data_ptr") && streq (n1, "length")));
+ }
+ return false;
}
/* Return true if TYPE is a range type, otherwise false. */
@@ -296,19 +305,57 @@ rust_language::printstr (struct ui_file *stream, struct type *type,
-/* Helper function to print a string slice. */
+static const struct generic_val_print_decorations rust_decorations =
+{
+ /* Complex isn't used in Rust, but we provide C-ish values just in
+ case. */
+ "",
+ " + ",
+ " * I",
+ "true",
+ "false",
+ "()",
+ "[",
+ "]"
+};
+
+/* Helper function to print a slice. */
static void
-rust_val_print_str (struct ui_file *stream, struct value *val,
- const struct value_print_options *options)
+rust_val_print_slice (struct value *val, struct ui_file *stream, int recurse,
+ const struct value_print_options *options)
{
struct value *base = value_struct_elt (&val, {}, "data_ptr", NULL,
"slice");
struct value *len = value_struct_elt (&val, {}, "length", NULL, "slice");
- val_print_string (TYPE_TARGET_TYPE (value_type (base)), "UTF-8",
- value_as_address (base), value_as_long (len), stream,
- options);
+ struct type *type = check_typedef (value_type (val));
+ if (strcmp (type->name (), "&str") == 0)
+ val_print_string (TYPE_TARGET_TYPE (value_type (base)), "UTF-8",
+ value_as_address (base), value_as_long (len), stream,
+ options);
+ else
+ {
+ LONGEST llen = value_as_long (len);
+
+ type_print (value_type (val), "", stream, -1);
+ gdb_printf (stream, " ");
+
+ if (llen == 0)
+ gdb_printf (stream, "[]");
+ else
+ {
+ struct type *elt_type = TYPE_TARGET_TYPE (value_type (base));
+ struct type *array_type = lookup_array_range_type (elt_type, 0,
+ llen - 1);
+ struct value *array = allocate_value_lazy (array_type);
+ VALUE_LVAL (array) = lval_memory;
+ set_value_address (array, value_as_address (base));
+ value_fetch_lazy (array);
+ generic_value_print (array, stream, recurse, options,
+ &rust_decorations);
+ }
+ }
}
/* See rust-lang.h. */
@@ -322,17 +369,9 @@ rust_language::val_print_struct
int first_field;
struct type *type = check_typedef (value_type (val));
- if (rust_slice_type_p (type) && strcmp (type->name (), "&str") == 0)
+ if (rust_slice_type_p (type))
{
- /* If what we are printing here is actually a string within a
- structure then VAL will be the original parent value, while TYPE
- will be the type of the structure representing the string we want
- to print.
- However, RUST_VAL_PRINT_STR looks up the fields of the string
- inside VAL, assuming that VAL is the string.
- So, recreate VAL as a value representing just the string. */
- val = value_at_lazy (type, value_address (val));
- rust_val_print_str (stream, val, options);
+ rust_val_print_slice (val, stream, recurse, options);
return;
}
@@ -343,19 +382,19 @@ rust_language::val_print_struct
if (!is_tuple)
{
if (type->name () != NULL)
- fprintf_filtered (stream, "%s", type->name ());
+ gdb_printf (stream, "%s", type->name ());
if (type->num_fields () == 0)
return;
if (type->name () != NULL)
- fputs_filtered (" ", stream);
+ gdb_puts (" ", stream);
}
if (is_tuple || is_tuple_struct)
- fputs_filtered ("(", stream);
+ gdb_puts ("(", stream);
else
- fputs_filtered ("{", stream);
+ gdb_puts ("{", stream);
opts = *options;
opts.deref_ref = 0;
@@ -367,15 +406,15 @@ rust_language::val_print_struct
continue;
if (!first_field)
- fputs_filtered (",", stream);
+ gdb_puts (",", stream);
if (options->prettyformat)
{
- fputs_filtered ("\n", stream);
- print_spaces_filtered (2 + 2 * recurse, stream);
+ gdb_puts ("\n", stream);
+ print_spaces (2 + 2 * recurse, stream);
}
else if (!first_field)
- fputs_filtered (" ", stream);
+ gdb_puts (" ", stream);
first_field = 0;
@@ -383,7 +422,7 @@ rust_language::val_print_struct
{
fputs_styled (type->field (i).name (),
variable_name_style.style (), stream);
- fputs_filtered (": ", stream);
+ gdb_puts (": ", stream);
}
common_val_print (value_field (val, i), stream, recurse + 1, &opts,
@@ -392,14 +431,14 @@ rust_language::val_print_struct
if (options->prettyformat)
{
- fputs_filtered ("\n", stream);
- print_spaces_filtered (2 * recurse, stream);
+ gdb_puts ("\n", stream);
+ print_spaces (2 * recurse, stream);
}
if (is_tuple || is_tuple_struct)
- fputs_filtered (")", stream);
+ gdb_puts (")", stream);
else
- fputs_filtered ("}", stream);
+ gdb_puts ("}", stream);
}
/* See rust-lang.h. */
@@ -423,9 +462,9 @@ rust_language::print_enum (struct value *val, struct ui_file *stream,
if (rust_empty_enum_p (type))
{
/* Print the enum type name here to be more clear. */
- fprintf_filtered (stream, _("%s {%p[<No data fields>%p]}"),
- type->name (),
- metadata_style.style ().ptr (), nullptr);
+ gdb_printf (stream, _("%s {%p[<No data fields>%p]}"),
+ type->name (),
+ metadata_style.style ().ptr (), nullptr);
return;
}
@@ -437,7 +476,7 @@ rust_language::print_enum (struct value *val, struct ui_file *stream,
bool is_tuple = rust_tuple_struct_type_p (variant_type);
- fprintf_filtered (stream, "%s", variant_type->name ());
+ gdb_printf (stream, "%s", variant_type->name ());
if (nfields == 0)
{
/* In case of a nullary variant like 'None', just output
@@ -447,49 +486,35 @@ rust_language::print_enum (struct value *val, struct ui_file *stream,
/* In case of a non-nullary variant, we output 'Foo(x,y,z)'. */
if (is_tuple)
- fprintf_filtered (stream, "(");
+ gdb_printf (stream, "(");
else
{
/* struct variant. */
- fprintf_filtered (stream, "{");
+ gdb_printf (stream, "{");
}
bool first_field = true;
for (int j = 0; j < variant_type->num_fields (); j++)
{
if (!first_field)
- fputs_filtered (", ", stream);
+ gdb_puts (", ", stream);
first_field = false;
if (!is_tuple)
- fprintf_filtered (stream, "%ps: ",
- styled_string (variable_name_style.style (),
- variant_type->field (j).name ()));
+ gdb_printf (stream, "%ps: ",
+ styled_string (variable_name_style.style (),
+ variant_type->field (j).name ()));
common_val_print (value_field (val, j), stream, recurse + 1, &opts,
this);
}
if (is_tuple)
- fputs_filtered (")", stream);
+ gdb_puts (")", stream);
else
- fputs_filtered ("}", stream);
+ gdb_puts ("}", stream);
}
-static const struct generic_val_print_decorations rust_decorations =
-{
- /* Complex isn't used in Rust, but we provide C-ish values just in
- case. */
- "",
- " + ",
- " * I",
- "true",
- "false",
- "()",
- "[",
- "]"
-};
-
/* See language.h. */
void
@@ -524,11 +549,11 @@ rust_language::value_print_inner
if (opts.addressprint)
{
- fputs_filtered (paddress (arch, addr), stream);
- fputs_filtered (" ", stream);
+ gdb_puts (paddress (arch, addr), stream);
+ gdb_puts (" ", stream);
}
- fputs_filtered ("b", stream);
+ gdb_puts ("b", stream);
val_print_string (TYPE_TARGET_TYPE (elttype), "ASCII", addr,
high_bound - low_bound + 1, stream,
&opts);
@@ -542,7 +567,7 @@ rust_language::value_print_inner
if (type->is_unsigned () && TYPE_LENGTH (type) == 0
&& type->name () != NULL && strcmp (type->name (), "()") == 0)
{
- fputs_filtered ("()", stream);
+ gdb_puts ("()", stream);
break;
}
goto generic_print;
@@ -557,7 +582,7 @@ rust_language::value_print_inner
/* If we see a plain TYPE_CODE_STRING, then we're printing a
byte string, hence the choice of "ASCII" as the
encoding. */
- fputs_filtered ("b", stream);
+ gdb_puts ("b", stream);
printstr (stream, TYPE_TARGET_TYPE (type),
value_contents_for_printing (val).data (),
high_bound - low_bound + 1, "ASCII", 0, &opts);
@@ -570,7 +595,7 @@ rust_language::value_print_inner
if (get_array_bounds (type, &low_bound, &high_bound)
&& high_bound - low_bound + 1 == 0)
- fputs_filtered ("[]", stream);
+ gdb_puts ("[]", stream);
else
goto generic_print;
}
@@ -599,6 +624,27 @@ rust_language::value_print_inner
}
}
+/* See language.h. */
+
+void
+rust_language::value_print
+ (struct value *val, struct ui_file *stream,
+ const struct value_print_options *options) const
+{
+ value_print_options opts = *options;
+ opts.deref_ref = true;
+
+ struct type *type = check_typedef (value_type (val));
+ if (type->is_pointer_or_reference ())
+ {
+ gdb_printf (stream, "(");
+ type_print (value_type (val), "", stream, -1);
+ gdb_printf (stream, ") ");
+ }
+
+ return common_val_print (val, stream, 0, &opts, this);
+}
+
static void
@@ -617,7 +663,7 @@ rust_print_struct_def (struct type *type, const char *varstring,
/* Print a tuple type simply. */
if (rust_tuple_type_p (type))
{
- fputs_filtered (type->name (), stream);
+ gdb_puts (type->name (), stream);
return;
}
@@ -648,26 +694,26 @@ rust_print_struct_def (struct type *type, const char *varstring,
/* This code path is also used by unions and enums. */
if (is_enum)
{
- fputs_filtered ("enum ", stream);
+ gdb_puts ("enum ", stream);
dynamic_prop *prop = type->dyn_prop (DYN_PROP_VARIANT_PARTS);
if (prop != nullptr && prop->kind () == PROP_TYPE)
type = prop->original_type ();
}
else if (type->code () == TYPE_CODE_STRUCT)
- fputs_filtered ("struct ", stream);
+ gdb_puts ("struct ", stream);
else
- fputs_filtered ("union ", stream);
+ gdb_puts ("union ", stream);
if (tagname != NULL)
- fputs_filtered (tagname, stream);
+ gdb_puts (tagname, stream);
}
if (type->num_fields () == 0 && !is_tuple)
return;
if (for_rust_enum && !flags->print_offsets)
- fputs_filtered (is_tuple_struct ? "(" : "{", stream);
+ gdb_puts (is_tuple_struct ? "(" : "{", stream);
else
- fputs_filtered (is_tuple_struct ? " (\n" : " {\n", stream);
+ gdb_puts (is_tuple_struct ? " (\n" : " {\n", stream);
/* When printing offsets, we rearrange the fields into storage
order. This lets us show holes more clearly. We work using
@@ -707,25 +753,25 @@ rust_print_struct_def (struct type *type, const char *varstring,
/* For a tuple struct we print the type but nothing
else. */
if (!for_rust_enum || flags->print_offsets)
- print_spaces_filtered (level + 2, stream);
+ print_spaces (level + 2, stream);
if (is_enum)
fputs_styled (type->field (i).name (), variable_name_style.style (),
stream);
else if (!is_tuple_struct)
- fprintf_filtered (stream, "%ps: ",
- styled_string (variable_name_style.style (),
- type->field (i).name ()));
+ gdb_printf (stream, "%ps: ",
+ styled_string (variable_name_style.style (),
+ type->field (i).name ()));
rust_internal_print_type (type->field (i).type (), NULL,
stream, (is_enum ? show : show - 1),
level + 2, flags, is_enum, podata);
if (!for_rust_enum || flags->print_offsets)
- fputs_filtered (",\n", stream);
+ gdb_puts (",\n", stream);
/* Note that this check of "I" is ok because we only sorted the
fields by offset when print_offsets was set, so we won't take
this branch in that case. */
else if (i + 1 < type->num_fields ())
- fputs_filtered (", ", stream);
+ gdb_puts (", ", stream);
}
if (flags->print_offsets)
@@ -733,13 +779,13 @@ rust_print_struct_def (struct type *type, const char *varstring,
/* Undo the temporary level increase we did above. */
level -= 2;
podata->finish (type, level, stream);
- print_spaces_filtered (print_offset_data::indentation, stream);
+ print_spaces (print_offset_data::indentation, stream);
if (level == 0)
- print_spaces_filtered (2, stream);
+ print_spaces (2, stream);
}
if (!for_rust_enum || flags->print_offsets)
- print_spaces_filtered (level, stream);
- fputs_filtered (is_tuple_struct ? ")" : "}", stream);
+ print_spaces (level, stream);
+ gdb_puts (is_tuple_struct ? ")" : "}", stream);
}
/* la_print_type implementation for Rust. */
@@ -757,9 +803,9 @@ rust_internal_print_type (struct type *type, const char *varstring,
/* Rust calls the unit type "void" in its debuginfo,
but we don't want to print it as that. */
if (type->code () == TYPE_CODE_VOID)
- fputs_filtered ("()", stream);
+ gdb_puts ("()", stream);
else
- fputs_filtered (type->name (), stream);
+ gdb_puts (type->name (), stream);
return;
}
@@ -771,7 +817,7 @@ rust_internal_print_type (struct type *type, const char *varstring,
unqualified name, and there is nothing else to print
here. */
if (!for_rust_enum)
- fputs_filtered ("()", stream);
+ gdb_puts ("()", stream);
break;
case TYPE_CODE_FUNC:
@@ -779,23 +825,23 @@ rust_internal_print_type (struct type *type, const char *varstring,
if (type->has_varargs ())
goto c_printer;
- fputs_filtered ("fn ", stream);
+ gdb_puts ("fn ", stream);
if (varstring != NULL)
- fputs_filtered (varstring, stream);
- fputs_filtered ("(", stream);
+ gdb_puts (varstring, stream);
+ gdb_puts ("(", stream);
for (int i = 0; i < type->num_fields (); ++i)
{
QUIT;
if (i > 0)
- fputs_filtered (", ", stream);
+ gdb_puts (", ", stream);
rust_internal_print_type (type->field (i).type (), "", stream,
-1, 0, flags, false, podata);
}
- fputs_filtered (")", stream);
+ gdb_puts (")", stream);
/* If it returns unit, we can omit the return type. */
if (TYPE_TARGET_TYPE (type)->code () != TYPE_CODE_VOID)
{
- fputs_filtered (" -> ", stream);
+ gdb_puts (" -> ", stream);
rust_internal_print_type (TYPE_TARGET_TYPE (type), "", stream,
-1, 0, flags, false, podata);
}
@@ -805,18 +851,18 @@ rust_internal_print_type (struct type *type, const char *varstring,
{
LONGEST low_bound, high_bound;
- fputs_filtered ("[", stream);
+ gdb_puts ("[", stream);
rust_internal_print_type (TYPE_TARGET_TYPE (type), NULL,
stream, show - 1, level, flags, false,
podata);
if (type->bounds ()->high.kind () == PROP_LOCEXPR
|| type->bounds ()->high.kind () == PROP_LOCLIST)
- fprintf_filtered (stream, "; variable length");
+ gdb_printf (stream, "; variable length");
else if (get_array_bounds (type, &low_bound, &high_bound))
- fprintf_filtered (stream, "; %s",
- plongest (high_bound - low_bound + 1));
- fputs_filtered ("]", stream);
+ gdb_printf (stream, "; %s",
+ plongest (high_bound - low_bound + 1));
+ gdb_puts ("]", stream);
}
break;
@@ -830,14 +876,14 @@ rust_internal_print_type (struct type *type, const char *varstring,
{
int len = 0;
- fputs_filtered ("enum ", stream);
+ gdb_puts ("enum ", stream);
if (type->name () != NULL)
{
- fputs_filtered (type->name (), stream);
- fputs_filtered (" ", stream);
+ gdb_puts (type->name (), stream);
+ gdb_puts (" ", stream);
len = strlen (type->name ());
}
- fputs_filtered ("{\n", stream);
+ gdb_puts ("{\n", stream);
for (int i = 0; i < type->num_fields (); ++i)
{
@@ -850,25 +896,25 @@ rust_internal_print_type (struct type *type, const char *varstring,
&& name[len] == ':'
&& name[len + 1] == ':')
name += len + 2;
- fprintf_filtered (stream, "%*s%ps,\n",
- level + 2, "",
- styled_string (variable_name_style.style (),
- name));
+ gdb_printf (stream, "%*s%ps,\n",
+ level + 2, "",
+ styled_string (variable_name_style.style (),
+ name));
}
- fputs_filtered ("}", stream);
+ gdb_puts ("}", stream);
}
break;
case TYPE_CODE_PTR:
{
if (type->name () != nullptr)
- fputs_filtered (type->name (), stream);
+ gdb_puts (type->name (), stream);
else
{
/* We currently can't distinguish between pointers and
references. */
- fputs_filtered ("*mut ", stream);
+ gdb_puts ("*mut ", stream);
type_print (TYPE_TARGET_TYPE (type), "", stream, 0);
}
}
@@ -1244,15 +1290,19 @@ rust_subscript (struct type *expect_type, struct expression *exp,
return result;
}
-/* A helper function for UNOP_IND. */
+namespace expr
+{
struct value *
-eval_op_rust_ind (struct type *expect_type, struct expression *exp,
- enum noside noside,
- enum exp_opcode opcode,
- struct value *value)
+rust_unop_ind_operation::evaluate (struct type *expect_type,
+ struct expression *exp,
+ enum noside noside)
{
- gdb_assert (noside == EVAL_NORMAL);
+ if (noside != EVAL_NORMAL)
+ return unop_ind_operation::evaluate (expect_type, exp, noside);
+
+ struct value *value = std::get<0> (m_storage)->evaluate (nullptr, exp,
+ noside);
struct value *trait_ptr = rust_get_trait_object_pointer (value);
if (trait_ptr != NULL)
value = trait_ptr;
@@ -1260,6 +1310,8 @@ eval_op_rust_ind (struct type *expect_type, struct expression *exp,
return value_ind (value);
}
+} /* namespace expr */
+
/* A helper function for UNOP_COMPLEMENT. */
struct value *
@@ -1302,13 +1354,17 @@ eval_op_rust_array (struct type *expect_type, struct expression *exp,
}
}
-/* A helper function for STRUCTOP_ANONYMOUS. */
+namespace expr
+{
struct value *
-eval_op_rust_struct_anon (struct type *expect_type, struct expression *exp,
- enum noside noside,
- int field_number, struct value *lhs)
+rust_struct_anon::evaluate (struct type *expect_type,
+ struct expression *exp,
+ enum noside noside)
{
+ value *lhs = std::get<1> (m_storage)->evaluate (nullptr, exp, noside);
+ int field_number = std::get<0> (m_storage);
+
struct type *type = value_type (lhs);
if (type->code () == TYPE_CODE_STRUCT)
@@ -1368,13 +1424,14 @@ eval_op_rust_struct_anon (struct type *expect_type, struct expression *exp,
tuple structs, and tuple-like enum variants"));
}
-/* A helper function for STRUCTOP_STRUCT. */
-
struct value *
-eval_op_rust_structop (struct type *expect_type, struct expression *exp,
- enum noside noside,
- struct value *lhs, const char *field_name)
+rust_structop::evaluate (struct type *expect_type,
+ struct expression *exp,
+ enum noside noside)
{
+ value *lhs = std::get<0> (m_storage)->evaluate (nullptr, exp, noside);
+ const char *field_name = std::get<1> (m_storage).c_str ();
+
struct value *result;
struct type *type = value_type (lhs);
if (type->code () == TYPE_CODE_STRUCT && rust_enum_p (type))
@@ -1416,9 +1473,6 @@ eval_op_rust_structop (struct type *expect_type, struct expression *exp,
return result;
}
-namespace expr
-{
-
value *
rust_aggregate_operation::evaluate (struct type *expect_type,
struct expression *exp,
@@ -1503,7 +1557,7 @@ rust_structop::evaluate_funcall (struct type *expect_type,
if (sym.symbol == NULL)
error (_("Could not find function named '%s'"), name.c_str ());
- struct type *fn_type = SYMBOL_TYPE (sym.symbol);
+ struct type *fn_type = sym.symbol->type ();
if (fn_type->num_fields () == 0)
error (_("Function '%s' takes no arguments"), name.c_str ());
@@ -1590,21 +1644,21 @@ rust_language::emitchar (int ch, struct type *chtype,
generic_emit_char (ch, chtype, stream, quoter,
target_charset (chtype->arch ()));
else if (ch == '\\' || ch == quoter)
- fprintf_filtered (stream, "\\%c", ch);
+ gdb_printf (stream, "\\%c", ch);
else if (ch == '\n')
- fputs_filtered ("\\n", stream);
+ gdb_puts ("\\n", stream);
else if (ch == '\r')
- fputs_filtered ("\\r", stream);
+ gdb_puts ("\\r", stream);
else if (ch == '\t')
- fputs_filtered ("\\t", stream);
+ gdb_puts ("\\t", stream);
else if (ch == '\0')
- fputs_filtered ("\\0", stream);
+ gdb_puts ("\\0", stream);
else if (ch >= 32 && ch <= 127 && isprint (ch))
- fputc_filtered (ch, stream);
+ gdb_putc (ch, stream);
else if (ch <= 255)
- fprintf_filtered (stream, "\\x%02x", ch);
+ gdb_printf (stream, "\\x%02x", ch);
else
- fprintf_filtered (stream, "\\u{%06x}", ch);
+ gdb_printf (stream, "\\u{%06x}", ch);
}
/* See language.h. */
diff --git a/gdb/rust-lang.h b/gdb/rust-lang.h
index 60a1967ff45..514494a2c82 100644
--- a/gdb/rust-lang.h
+++ b/gdb/rust-lang.h
@@ -125,6 +125,11 @@ public:
/* See language.h. */
+ void value_print (struct value *val, struct ui_file *stream,
+ const struct value_print_options *options) const override;
+
+ /* See language.h. */
+
struct block_symbol lookup_symbol_nonlocal
(const char *name, const struct block *block,
const domain_enum domain) const override
@@ -133,11 +138,11 @@ public:
if (symbol_lookup_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "rust_lookup_symbol_non_local"
- " (%s, %s (scope %s), %s)\n",
- name, host_address_to_string (block),
- block_scope (block), domain_name (domain));
+ gdb_printf (gdb_stdlog,
+ "rust_lookup_symbol_non_local"
+ " (%s, %s (scope %s), %s)\n",
+ name, host_address_to_string (block),
+ block_scope (block), domain_name (domain));
}
/* Look up bare names in the block's scope. */
@@ -178,9 +183,9 @@ public:
void printchar (int ch, struct type *chtype,
struct ui_file *stream) const override
{
- fputs_filtered ("'", stream);
+ gdb_puts ("'", stream);
emitchar (ch, chtype, stream, '\'');
- fputs_filtered ("'", stream);
+ gdb_puts ("'", stream);
}
/* See language.h. */
@@ -196,9 +201,9 @@ public:
struct ui_file *stream) const override
{
type = check_typedef (type);
- fprintf_filtered (stream, "type %s = ", new_symbol->print_name ());
+ gdb_printf (stream, "type %s = ", new_symbol->print_name ());
type_print (type, "", stream, 0);
- fprintf_filtered (stream, ";");
+ gdb_printf (stream, ";");
}
/* See language.h. */
diff --git a/gdb/rust-parse.c b/gdb/rust-parse.c
index 6628a86f575..7d7d882872c 100644
--- a/gdb/rust-parse.c
+++ b/gdb/rust-parse.c
@@ -22,8 +22,8 @@
#include "block.h"
#include "charset.h"
#include "cp-support.h"
-#include "gdb_obstack.h"
-#include "gdb_regex.h"
+#include "gdbsupport/gdb_obstack.h"
+#include "gdbsupport/gdb_regex.h"
#include "rust-lang.h"
#include "parser-defs.h"
#include "gdbsupport/selftest.h"
@@ -271,7 +271,10 @@ struct rust_parser
operation_up parse_entry_point ()
{
lex ();
- return parse_expr ();
+ operation_up result = parse_expr ();
+ if (current_token != 0)
+ error (_("Syntax error near '%s'"), pstate->prev_lexptr);
+ return result;
}
operation_up parse_tuple ();
@@ -452,7 +455,7 @@ rust_parser::rust_lookup_type (const char *name)
if (result.symbol != NULL)
{
update_innermost_block (result);
- return SYMBOL_TYPE (result.symbol);
+ return result.symbol->type ();
}
type = lookup_typename (language (), name, NULL, 1);
@@ -577,6 +580,36 @@ rust_parser::lex_escape (int is_byte)
return result;
}
+/* A helper for lex_character. Search forward for the closing single
+ quote, then convert the bytes from the host charset to UTF-32. */
+
+static uint32_t
+lex_multibyte_char (const char *text, int *len)
+{
+ /* Only look a maximum of 5 bytes for the closing quote. This is
+ the maximum for UTF-8. */
+ int quote;
+ gdb_assert (text[0] != '\'');
+ for (quote = 1; text[quote] != '\0' && text[quote] != '\''; ++quote)
+ ;
+ *len = quote;
+ /* The caller will issue an error. */
+ if (text[quote] == '\0')
+ return 0;
+
+ auto_obstack result;
+ convert_between_encodings (host_charset (), HOST_UTF32,
+ (const gdb_byte *) text,
+ quote, 1, &result, translit_none);
+
+ int size = obstack_object_size (&result);
+ if (size > 4)
+ error (_("overlong character literal"));
+ uint32_t value;
+ memcpy (&value, obstack_finish (&result), size);
+ return value;
+}
+
/* Lex a character constant. */
int
@@ -592,13 +625,15 @@ rust_parser::lex_character ()
}
gdb_assert (pstate->lexptr[0] == '\'');
++pstate->lexptr;
- /* This should handle UTF-8 here. */
- if (pstate->lexptr[0] == '\\')
+ if (pstate->lexptr[0] == '\'')
+ error (_("empty character literal"));
+ else if (pstate->lexptr[0] == '\\')
value = lex_escape (is_byte);
else
{
- value = pstate->lexptr[0] & 0xff;
- ++pstate->lexptr;
+ int len;
+ value = lex_multibyte_char (&pstate->lexptr[0], &len);
+ pstate->lexptr += len;
}
if (pstate->lexptr[0] != '\'')
@@ -695,16 +730,10 @@ rust_parser::lex_string ()
if (is_byte)
obstack_1grow (&obstack, value);
else
- {
-#if WORDS_BIGENDIAN
-#define UTF32 "UTF-32BE"
-#else
-#define UTF32 "UTF-32LE"
-#endif
- convert_between_encodings (UTF32, "UTF-8", (gdb_byte *) &value,
- sizeof (value), sizeof (value),
- &obstack, translit_none);
- }
+ convert_between_encodings (HOST_UTF32, "UTF-8",
+ (gdb_byte *) &value,
+ sizeof (value), sizeof (value),
+ &obstack, translit_none);
}
else if (pstate->lexptr[0] == '\0')
error (_("Unexpected EOF in string"));
@@ -746,7 +775,10 @@ rust_identifier_start_p (char c)
return ((c >= 'a' && c <= 'z')
|| (c >= 'A' && c <= 'Z')
|| c == '_'
- || c == '$');
+ || c == '$'
+ /* Allow any non-ASCII character as an identifier. There
+ doesn't seem to be a need to be picky about this. */
+ || (c & 0x80) != 0);
}
/* Lex an identifier. */
@@ -772,13 +804,14 @@ rust_parser::lex_identifier ()
++pstate->lexptr;
- /* For the time being this doesn't handle Unicode rules. Non-ASCII
- identifiers are gated anyway. */
+ /* Allow any non-ASCII character here. This "handles" UTF-8 by
+ passing it through. */
while ((pstate->lexptr[0] >= 'a' && pstate->lexptr[0] <= 'z')
|| (pstate->lexptr[0] >= 'A' && pstate->lexptr[0] <= 'Z')
|| pstate->lexptr[0] == '_'
|| (is_gdb_var && pstate->lexptr[0] == '$')
- || (pstate->lexptr[0] >= '0' && pstate->lexptr[0] <= '9'))
+ || (pstate->lexptr[0] >= '0' && pstate->lexptr[0] <= '9')
+ || (pstate->lexptr[0] & 0x80) != 0)
++pstate->lexptr;
@@ -1105,7 +1138,7 @@ rust_parser::parse_tuple ()
{
/* Parenthesized expression. */
lex ();
- return expr;
+ return make_operation<rust_parenthesized_operation> (std::move (expr));
}
std::vector<operation_up> ops;
@@ -1176,15 +1209,15 @@ rust_parser::name_to_operation (const std::string &name)
struct block_symbol sym = lookup_symbol (name.c_str (),
pstate->expression_context_block,
VAR_DOMAIN);
- if (sym.symbol != nullptr && SYMBOL_CLASS (sym.symbol) != LOC_TYPEDEF)
+ if (sym.symbol != nullptr && sym.symbol->aclass () != LOC_TYPEDEF)
return make_operation<var_value_operation> (sym);
struct type *type = nullptr;
if (sym.symbol != nullptr)
{
- gdb_assert (SYMBOL_CLASS (sym.symbol) == LOC_TYPEDEF);
- type = SYMBOL_TYPE (sym.symbol);
+ gdb_assert (sym.symbol->aclass () == LOC_TYPEDEF);
+ type = sym.symbol->type ();
}
if (type == nullptr)
type = rust_lookup_type (name.c_str ());
@@ -1990,6 +2023,7 @@ rust_parser::parse_atom (bool required)
case STRING:
result = parse_string ();
+ lex ();
break;
case BYTESTRING:
diff --git a/gdb/s12z-tdep.c b/gdb/s12z-tdep.c
index 3f9740f0dfe..5394c1bbf5e 100644
--- a/gdb/s12z-tdep.c
+++ b/gdb/s12z-tdep.c
@@ -32,6 +32,7 @@
#include "remote.h"
#include "opcodes/s12z-opc.h"
#include "gdbarch.h"
+#include "disasm.h"
/* Two of the registers included in S12Z_N_REGISTERS are
the CCH and CCL "registers" which are just views into
@@ -140,19 +141,15 @@ s12z_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int num)
/* Support functions for frame handling. */
-/* Copy of gdb_buffered_insn_length_fprintf from disasm.c. */
-static int ATTRIBUTE_PRINTF (2, 3)
-s12z_fprintf_disasm (void *stream, const char *format, ...)
-{
- return 0;
-}
+/* Return a disassemble_info initialized for s12z disassembly, however,
+ the disassembler will not actually print anything. */
static struct disassemble_info
s12z_disassemble_info (struct gdbarch *gdbarch)
{
struct disassemble_info di;
- init_disassemble_info (&di, &null_stream, s12z_fprintf_disasm);
+ init_disassemble_info_for_no_printing (&di);
di.arch = gdbarch_bfd_arch_info (gdbarch)->arch;
di.mach = gdbarch_bfd_arch_info (gdbarch)->mach;
di.endian = gdbarch_byte_order (gdbarch);
@@ -522,28 +519,28 @@ s12z_print_ccw_info (struct gdbarch *gdbarch,
struct value *v = value_of_register (reg, frame);
const char *name = gdbarch_register_name (gdbarch, reg);
uint32_t ccw = value_as_long (v);
- fputs_filtered (name, file);
+ gdb_puts (name, file);
size_t len = strlen (name);
const int stop_1 = 15;
const int stop_2 = 17;
for (int i = 0; i < stop_1 - len; ++i)
- fputc_filtered (' ', file);
- fprintf_filtered (file, "0x%04x", ccw);
+ gdb_putc (' ', file);
+ gdb_printf (file, "0x%04x", ccw);
for (int i = 0; i < stop_2 - len; ++i)
- fputc_filtered (' ', file);
+ gdb_putc (' ', file);
for (int b = 15; b >= 0; --b)
{
if (ccw & (0x1u << b))
{
if (ccw_bits[b] == 0)
- fputc_filtered ('1', file);
+ gdb_putc ('1', file);
else
- fputc_filtered (ccw_bits[b], file);
+ gdb_putc (ccw_bits[b], file);
}
else
- fputc_filtered (tolower (ccw_bits[b]), file);
+ gdb_putc (tolower (ccw_bits[b]), file);
}
- fputc_filtered ('\n', file);
+ gdb_putc ('\n', file);
}
static void
@@ -635,7 +632,7 @@ show_bdccsr_command (const char *args, int from_tty)
struct string_file output;
target_rcmd ("bdccsr", &output);
- printf_filtered ("The current BDCCSR value is %s\n", output.string().c_str());
+ gdb_printf ("The current BDCCSR value is %s\n", output.string().c_str());
}
static struct gdbarch *
diff --git a/gdb/s390-linux-nat.c b/gdb/s390-linux-nat.c
index 3d41789b8f3..73961c87769 100644
--- a/gdb/s390-linux-nat.c
+++ b/gdb/s390-linux-nat.c
@@ -878,8 +878,8 @@ s390_linux_nat_target::remove_watchpoint (CORE_ADDR addr, int len,
}
}
- fprintf_unfiltered (gdb_stderr,
- "Attempt to remove nonexistent watchpoint.\n");
+ gdb_printf (gdb_stderr,
+ "Attempt to remove nonexistent watchpoint.\n");
return -1;
}
@@ -931,8 +931,8 @@ s390_linux_nat_target::remove_hw_breakpoint (struct gdbarch *gdbarch,
}
}
- fprintf_unfiltered (gdb_stderr,
- "Attempt to remove nonexistent breakpoint.\n");
+ gdb_printf (gdb_stderr,
+ "Attempt to remove nonexistent breakpoint.\n");
return -1;
}
diff --git a/gdb/s390-linux-tdep.c b/gdb/s390-linux-tdep.c
index 56cc147a391..9d4e2d09f2a 100644
--- a/gdb/s390-linux-tdep.c
+++ b/gdb/s390-linux-tdep.c
@@ -815,10 +815,10 @@ s390_linux_syscall_record (struct regcache *regcache, LONGEST syscall_native)
if (syscall_gdb < 0)
{
- fprintf_unfiltered (gdb_stderr,
- _("Process record and replay target doesn't "
- "support syscall number %s\n"),
- plongest (syscall_native));
+ gdb_printf (gdb_stderr,
+ _("Process record and replay target doesn't "
+ "support syscall number %s\n"),
+ plongest (syscall_native));
return -1;
}
diff --git a/gdb/s390-tdep.c b/gdb/s390-tdep.c
index 153f0ed7db5..14b03a167d7 100644
--- a/gdb/s390-tdep.c
+++ b/gdb/s390-tdep.c
@@ -1440,7 +1440,7 @@ s390_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache,
static int
s390_pseudo_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
- struct reggroup *group)
+ const struct reggroup *group)
{
s390_gdbarch_tdep *tdep = (s390_gdbarch_tdep *) gdbarch_tdep (gdbarch);
@@ -2797,7 +2797,7 @@ s390_record_address_mask (struct gdbarch *gdbarch, struct regcache *regcache,
case 3:
return val;
default:
- fprintf_unfiltered (gdb_stdlog, "Warning: Addressing mode %d used.", am);
+ gdb_printf (gdb_stdlog, "Warning: Addressing mode %d used.", am);
return 0;
}
}
@@ -3031,8 +3031,8 @@ ex:
return -1;
break;
default:
- fprintf_unfiltered (gdb_stdlog, "Warning: Unknown PFPO OFC %02x at %s.\n",
- ofc, paddress (gdbarch, addr));
+ gdb_printf (gdb_stdlog, "Warning: Unknown PFPO OFC %02x at %s.\n",
+ ofc, paddress (gdbarch, addr));
return -1;
}
@@ -3103,7 +3103,7 @@ ex:
}
else
{
- fprintf_unfiltered (gdb_stderr, _("no syscall record support\n"));
+ gdb_printf (gdb_stderr, _("no syscall record support\n"));
return -1;
}
break;
@@ -3318,8 +3318,8 @@ ex:
case 0x44: /* EX - execute */
if (ex != -1)
{
- fprintf_unfiltered (gdb_stdlog, "Warning: Double execute at %s.\n",
- paddress (gdbarch, addr));
+ gdb_printf (gdb_stdlog, "Warning: Double execute at %s.\n",
+ paddress (gdbarch, addr));
return -1;
}
addr = s390_record_calc_disp (gdbarch, regcache, inib[3], insn[1], 0);
@@ -4304,8 +4304,8 @@ ex:
break;
default:
- fprintf_unfiltered (gdb_stdlog, "Warning: Unknown KMAC function %02x at %s.\n",
- (int)tmp, paddress (gdbarch, addr));
+ gdb_printf (gdb_stdlog, "Warning: Unknown KMAC function %02x at %s.\n",
+ (int)tmp, paddress (gdbarch, addr));
return -1;
}
if (tmp != 0)
@@ -4369,8 +4369,8 @@ ex:
/* For other instructions... */
/* Fall through. */
default:
- fprintf_unfiltered (gdb_stdlog, "Warning: Unknown KM* function %02x at %s.\n",
- (int)tmp, paddress (gdbarch, addr));
+ gdb_printf (gdb_stdlog, "Warning: Unknown KM* function %02x at %s.\n",
+ (int)tmp, paddress (gdbarch, addr));
return -1;
}
if (tmp != 0)
@@ -4453,8 +4453,8 @@ ex:
break;
default:
- fprintf_unfiltered (gdb_stdlog, "Warning: Unknown PCC function %02x at %s.\n",
- (int)tmp, paddress (gdbarch, addr));
+ gdb_printf (gdb_stdlog, "Warning: Unknown PCC function %02x at %s.\n",
+ (int)tmp, paddress (gdbarch, addr));
return -1;
}
if (record_full_arch_list_add_reg (regcache, S390_PSWM_REGNUM))
@@ -4488,8 +4488,8 @@ ex:
break;
default:
- fprintf_unfiltered (gdb_stdlog, "Warning: Unknown KMCTR function %02x at %s.\n",
- (int)tmp, paddress (gdbarch, addr));
+ gdb_printf (gdb_stdlog, "Warning: Unknown KMCTR function %02x at %s.\n",
+ (int)tmp, paddress (gdbarch, addr));
return -1;
}
if (tmp != 0)
@@ -4559,8 +4559,8 @@ ex:
break;
default:
- fprintf_unfiltered (gdb_stdlog, "Warning: Unknown KM function %02x at %s.\n",
- (int)tmp, paddress (gdbarch, addr));
+ gdb_printf (gdb_stdlog, "Warning: Unknown KM function %02x at %s.\n",
+ (int)tmp, paddress (gdbarch, addr));
return -1;
}
if (tmp != 0)
@@ -4626,8 +4626,8 @@ ex:
break;
default:
- fprintf_unfiltered (gdb_stdlog, "Warning: Unknown PPNO function %02x at %s.\n",
- (int)tmp, paddress (gdbarch, addr));
+ gdb_printf (gdb_stdlog, "Warning: Unknown PPNO function %02x at %s.\n",
+ (int)tmp, paddress (gdbarch, addr));
return -1;
}
/* DXC may be written */
@@ -4678,8 +4678,8 @@ ex:
/* For KLMD... */
/* Fall through. */
default:
- fprintf_unfiltered (gdb_stdlog, "Warning: Unknown KMAC function %02x at %s.\n",
- (int)tmp, paddress (gdbarch, addr));
+ gdb_printf (gdb_stdlog, "Warning: Unknown KMAC function %02x at %s.\n",
+ (int)tmp, paddress (gdbarch, addr));
return -1;
}
if (tmp != 0)
@@ -4984,8 +4984,8 @@ ex:
case 0xc60: /* EXRL - execute relative long */
if (ex != -1)
{
- fprintf_unfiltered (gdb_stdlog, "Warning: Double execute at %s.\n",
- paddress (gdbarch, addr));
+ gdb_printf (gdb_stdlog, "Warning: Double execute at %s.\n",
+ paddress (gdbarch, addr));
return -1;
}
addr = s390_record_calc_rl (gdbarch, regcache, addr, insn[1], insn[2]);
@@ -5073,8 +5073,8 @@ ex:
break;
default:
- fprintf_unfiltered (gdb_stdlog, "Warning: Unknown CSST FC %02x at %s.\n",
- fc, paddress (gdbarch, addr));
+ gdb_printf (gdb_stdlog, "Warning: Unknown CSST FC %02x at %s.\n",
+ fc, paddress (gdbarch, addr));
return -1;
}
@@ -5082,8 +5082,8 @@ ex:
oaddr2 = s390_record_calc_disp (gdbarch, regcache, 0, insn[2], 0);
if (sc > 4)
{
- fprintf_unfiltered (gdb_stdlog, "Warning: Unknown CSST FC %02x at %s.\n",
- sc, paddress (gdbarch, addr));
+ gdb_printf (gdb_stdlog, "Warning: Unknown CSST FC %02x at %s.\n",
+ sc, paddress (gdbarch, addr));
return -1;
}
@@ -6708,8 +6708,8 @@ CSSTX:
break;
default:
- fprintf_unfiltered (gdb_stdlog, "Warning: Unknown PLO FC %02x at %s.\n",
- fc, paddress (gdbarch, addr));
+ gdb_printf (gdb_stdlog, "Warning: Unknown PLO FC %02x at %s.\n",
+ fc, paddress (gdbarch, addr));
return -1;
}
}
@@ -6771,8 +6771,8 @@ CSSTX:
default:
UNKNOWN_OP:
- fprintf_unfiltered (gdb_stdlog, "Warning: Don't know how to record %04x "
- "at %s.\n", insn[0], paddress (gdbarch, addr));
+ gdb_printf (gdb_stdlog, "Warning: Don't know how to record %04x "
+ "at %s.\n", insn[0], paddress (gdbarch, addr));
return -1;
}
@@ -7038,7 +7038,7 @@ s390_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
We can safely let them default to 128-bit, since the debug info
will give the size of type actually used in each case. */
set_gdbarch_long_double_bit (gdbarch, 128);
- set_gdbarch_long_double_format (gdbarch, floatformats_ia64_quad);
+ set_gdbarch_long_double_format (gdbarch, floatformats_ieee_quad);
set_gdbarch_type_align (gdbarch, s390_type_align);
diff --git a/gdb/score-tdep.c b/gdb/score-tdep.c
deleted file mode 100644
index e20bee46df9..00000000000
--- a/gdb/score-tdep.c
+++ /dev/null
@@ -1,1527 +0,0 @@
-/* Target-dependent code for the S+core architecture, for GDB,
- the GNU Debugger.
-
- Copyright (C) 2006-2022 Free Software Foundation, Inc.
-
- Contributed by Qinwei (qinwei@sunnorth.com.cn)
- Contributed by Ching-Peng Lin (cplin@sunplus.com)
-
- This file is part of GDB.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>. */
-
-#include "defs.h"
-#include "inferior.h"
-#include "symtab.h"
-#include "objfiles.h"
-#include "gdbcore.h"
-#include "target.h"
-#include "arch-utils.h"
-#include "regcache.h"
-#include "regset.h"
-#include "dis-asm.h"
-#include "frame-unwind.h"
-#include "frame-base.h"
-#include "trad-frame.h"
-#include "dwarf2/frame.h"
-#include "score-tdep.h"
-
-#define G_FLD(_i,_ms,_ls) \
- ((unsigned)((_i) << (31 - (_ms))) >> (31 - (_ms) + (_ls)))
-
-typedef struct{
- unsigned long long v;
- unsigned long long raw;
- unsigned int len;
-}inst_t;
-
-struct score_frame_cache
-{
- CORE_ADDR base;
- CORE_ADDR fp;
- trad_frame_saved_reg *saved_regs;
-};
-
-static int target_mach = bfd_mach_score7;
-
-static struct type *
-score_register_type (struct gdbarch *gdbarch, int regnum)
-{
- gdb_assert (regnum >= 0
- && regnum < ((target_mach == bfd_mach_score7)
- ? SCORE7_NUM_REGS : SCORE3_NUM_REGS));
- return builtin_type (gdbarch)->builtin_uint32;
-}
-
-static const char *
-score7_register_name (struct gdbarch *gdbarch, int regnum)
-{
- const char *score_register_names[] = {
- "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
- "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
- "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23",
- "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31",
-
- "PSR", "COND", "ECR", "EXCPVEC", "CCR",
- "EPC", "EMA", "TLBLOCK", "TLBPT", "PEADDR",
- "TLBRPT", "PEVN", "PECTX", "LIMPFN", "LDMPFN",
- "PREV", "DREG", "PC", "DSAVE", "COUNTER",
- "LDCR", "STCR", "CEH", "CEL",
- };
-
- gdb_assert (regnum >= 0 && regnum < SCORE7_NUM_REGS);
- return score_register_names[regnum];
-}
-
-static const char *
-score3_register_name (struct gdbarch *gdbarch, int regnum)
-{
- const char *score_register_names[] = {
- "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
- "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
- "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23",
- "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31",
-
- "PSR", "COND", "ECR", "EXCPVEC", "CCR",
- "EPC", "EMA", "PREV", "DREG", "DSAVE",
- "COUNTER", "LDCR", "STCR", "CEH", "CEL",
- "", "", "PC",
- };
-
- gdb_assert (regnum >= 0 && regnum < SCORE3_NUM_REGS);
- return score_register_names[regnum];
-}
-
-#if WITH_SIM
-static int
-score_register_sim_regno (struct gdbarch *gdbarch, int regnum)
-{
- gdb_assert (regnum >= 0
- && regnum < ((target_mach == bfd_mach_score7)
- ? SCORE7_NUM_REGS : SCORE3_NUM_REGS));
- return regnum;
-}
-#endif
-
-static inst_t *
-score7_fetch_inst (struct gdbarch *gdbarch, CORE_ADDR addr, gdb_byte *memblock)
-{
- enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
- static inst_t inst = { 0, 0, 0 };
- gdb_byte buf[SCORE_INSTLEN] = { 0 };
- int big;
- int ret;
-
- if (target_has_execution () && memblock != NULL)
- {
- /* Fetch instruction from local MEMBLOCK. */
- memcpy (buf, memblock, SCORE_INSTLEN);
- }
- else
- {
- /* Fetch instruction from target. */
- ret = target_read_memory (addr & ~0x3, buf, SCORE_INSTLEN);
- if (ret)
- {
- error (_("Error: target_read_memory in file:%s, line:%d!"),
- __FILE__, __LINE__);
- return 0;
- }
- }
-
- inst.raw = extract_unsigned_integer (buf, SCORE_INSTLEN, byte_order);
- inst.len = (inst.raw & 0x80008000) ? 4 : 2;
- inst.v = ((inst.raw >> 16 & 0x7FFF) << 15) | (inst.raw & 0x7FFF);
- big = (byte_order == BFD_ENDIAN_BIG);
- if (inst.len == 2)
- {
- if (big ^ ((addr & 0x2) == 2))
- inst.v = G_FLD (inst.v, 29, 15);
- else
- inst.v = G_FLD (inst.v, 14, 0);
- }
- return &inst;
-}
-
-static inst_t *
-score3_adjust_pc_and_fetch_inst (CORE_ADDR *pcptr, int *lenptr,
- enum bfd_endian byte_order)
-{
- static inst_t inst = { 0, 0, 0 };
-
- struct breakplace
- {
- int break_offset;
- int inst_len;
- };
- /* raw table 1 (column 2, 3, 4)
- * 0 1 0 * # 2
- * 0 1 1 0 # 3
- 0 1 1 0 * # 6
- table 2 (column 1, 2, 3)
- * 0 0 * * # 0, 4
- 0 1 0 * * # 2
- 1 1 0 * * # 6
- */
-
- static const struct breakplace bk_table[16] =
- {
- /* table 1 */
- {0, 0},
- {0, 0},
- {0, 4},
- {0, 6},
- {0, 0},
- {0, 0},
- {-2, 6},
- {0, 0},
- /* table 2 */
- {0, 2},
- {0, 0},
- {-2, 4},
- {0, 0},
- {0, 2},
- {0, 0},
- {-4, 6},
- {0, 0}
- };
-
-#define EXTRACT_LEN 2
- CORE_ADDR adjust_pc = *pcptr & ~0x1;
- gdb_byte buf[5][EXTRACT_LEN] =
- {
- {'\0', '\0'},
- {'\0', '\0'},
- {'\0', '\0'},
- {'\0', '\0'},
- {'\0', '\0'}
- };
- int ret;
- unsigned int raw;
- unsigned int cbits = 0;
- int bk_index;
- int i, count;
-
- inst.v = 0;
- inst.raw = 0;
- inst.len = 0;
-
- adjust_pc -= 4;
- for (i = 0; i < 5; i++)
- {
- ret = target_read_memory (adjust_pc + 2 * i, buf[i], EXTRACT_LEN);
- if (ret != 0)
- {
- buf[i][0] = '\0';
- buf[i][1] = '\0';
- if (i == 2)
- error (_("Error: target_read_memory in file:%s, line:%d!"),
- __FILE__, __LINE__);
- }
-
- raw = extract_unsigned_integer (buf[i], EXTRACT_LEN, byte_order);
- cbits = (cbits << 1) | (raw >> 15);
- }
- adjust_pc += 4;
-
- if (cbits & 0x4)
- {
- /* table 1 */
- cbits = (cbits >> 1) & 0x7;
- bk_index = cbits;
- }
- else
- {
- /* table 2 */
- cbits = (cbits >> 2) & 0x7;
- bk_index = cbits + 8;
- }
-
- gdb_assert (!((bk_table[bk_index].break_offset == 0)
- && (bk_table[bk_index].inst_len == 0)));
-
- inst.len = bk_table[bk_index].inst_len;
-
- i = (bk_table[bk_index].break_offset + 4) / 2;
- count = inst.len / 2;
- for (; count > 0; i++, count--)
- {
- inst.raw = (inst.raw << 16)
- | extract_unsigned_integer (buf[i], EXTRACT_LEN, byte_order);
- }
-
- switch (inst.len)
- {
- case 2:
- inst.v = inst.raw & 0x7FFF;
- break;
- case 4:
- inst.v = ((inst.raw >> 16 & 0x7FFF) << 15) | (inst.raw & 0x7FFF);
- break;
- case 6:
- inst.v = ((inst.raw >> 32 & 0x7FFF) << 30)
- | ((inst.raw >> 16 & 0x7FFF) << 15) | (inst.raw & 0x7FFF);
- break;
- }
-
- if (pcptr)
- *pcptr = adjust_pc + bk_table[bk_index].break_offset;
- if (lenptr)
- *lenptr = bk_table[bk_index].inst_len;
-
-#undef EXTRACT_LEN
-
- return &inst;
-}
-
-/* Implement the breakpoint_kind_from_pc gdbarch method. */
-
-static int
-score7_breakpoint_kind_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr)
-{
- int ret;
- unsigned int raw;
- enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
- gdb_byte buf[SCORE_INSTLEN] = { 0 };
-
- if ((ret = target_read_memory (*pcptr & ~0x3, buf, SCORE_INSTLEN)) != 0)
- {
- error (_("Error: target_read_memory in file:%s, line:%d!"),
- __FILE__, __LINE__);
- }
- raw = extract_unsigned_integer (buf, SCORE_INSTLEN, byte_order);
-
- if (!(raw & 0x80008000))
- {
- /* 16bits instruction. */
- *pcptr &= ~0x1;
- return 2;
- }
- else
- {
- /* 32bits instruction. */
- *pcptr &= ~0x3;
- return 4;
- }
-}
-
-/* Implement the sw_breakpoint_from_kind gdbarch method. */
-
-static const gdb_byte *
-score7_sw_breakpoint_from_kind (struct gdbarch *gdbarch, int kind, int *size)
-{
- enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
-
- *size = kind;
-
- if (kind == 4)
- {
- static gdb_byte big_breakpoint32[] = { 0x80, 0x00, 0x80, 0x06 };
- static gdb_byte little_breakpoint32[] = { 0x06, 0x80, 0x00, 0x80 };
-
- if (byte_order == BFD_ENDIAN_BIG)
- return big_breakpoint32;
- else
- return little_breakpoint32;
- }
- else
- {
- static gdb_byte big_breakpoint16[] = { 0x60, 0x02 };
- static gdb_byte little_breakpoint16[] = { 0x02, 0x60 };
-
- if (byte_order == BFD_ENDIAN_BIG)
- return big_breakpoint16;
- else
- return little_breakpoint16;
- }
-}
-
-/* Implement the breakpoint_kind_from_pc gdbarch method. */
-
-static int
-score3_breakpoint_kind_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr)
-{
- enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
- int len;
-
- score3_adjust_pc_and_fetch_inst (pcptr, &len, byte_order);
-
- return len;
-}
-
-/* Implement the sw_breakpoint_from_kind gdbarch method. */
-
-static const gdb_byte *
-score3_sw_breakpoint_from_kind (struct gdbarch *gdbarch, int kind, int *size)
-{
- int index = 0;
- enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
- static gdb_byte score_break_insns[6][6] = {
- /* The following three instructions are big endian. */
- { 0x00, 0x20 },
- { 0x80, 0x00, 0x00, 0x06 },
- { 0x80, 0x00, 0x80, 0x00, 0x00, 0x00 },
- /* The following three instructions are little endian. */
- { 0x20, 0x00 },
- { 0x00, 0x80, 0x06, 0x00 },
- { 0x00, 0x80, 0x00, 0x80, 0x00, 0x00 }};
-
- *size = kind;
-
- index = ((byte_order == BFD_ENDIAN_BIG) ? 0 : 3) + (kind / 2 - 1);
- return score_break_insns[index];
-}
-
-static CORE_ADDR
-score_adjust_breakpoint_address (struct gdbarch *gdbarch, CORE_ADDR bpaddr)
-{
- CORE_ADDR adjust_pc = bpaddr;
-
- if (target_mach == bfd_mach_score3)
- score3_adjust_pc_and_fetch_inst (&adjust_pc, NULL,
- gdbarch_byte_order (gdbarch));
- else
- adjust_pc = align_down (adjust_pc, 2);
-
- return adjust_pc;
-}
-
-static CORE_ADDR
-score_frame_align (struct gdbarch *gdbarch, CORE_ADDR addr)
-{
- return align_down (addr, 16);
-}
-
-static void
-score_xfer_register (struct regcache *regcache, int regnum, int length,
- enum bfd_endian endian, gdb_byte *readbuf,
- const gdb_byte *writebuf, int buf_offset)
-{
- int reg_offset = 0;
- gdb_assert (regnum >= 0
- && regnum < ((target_mach == bfd_mach_score7)
- ? SCORE7_NUM_REGS : SCORE3_NUM_REGS));
-
- switch (endian)
- {
- case BFD_ENDIAN_BIG:
- reg_offset = SCORE_REGSIZE - length;
- break;
- case BFD_ENDIAN_LITTLE:
- reg_offset = 0;
- break;
- case BFD_ENDIAN_UNKNOWN:
- reg_offset = 0;
- break;
- default:
- error (_("Error: score_xfer_register in file:%s, line:%d!"),
- __FILE__, __LINE__);
- }
-
- if (readbuf != NULL)
- regcache->cooked_read_part (regnum, reg_offset, length,
- readbuf + buf_offset);
- if (writebuf != NULL)
- regcache->cooked_write_part (regnum, reg_offset, length,
- writebuf + buf_offset);
-}
-
-static enum return_value_convention
-score_return_value (struct gdbarch *gdbarch, struct value *function,
- struct type *type, struct regcache *regcache,
- gdb_byte * readbuf, const gdb_byte * writebuf)
-{
- if (type->code () == TYPE_CODE_STRUCT
- || type->code () == TYPE_CODE_UNION
- || type->code () == TYPE_CODE_ARRAY)
- return RETURN_VALUE_STRUCT_CONVENTION;
- else
- {
- int offset;
- int regnum;
- for (offset = 0, regnum = SCORE_A0_REGNUM;
- offset < TYPE_LENGTH (type);
- offset += SCORE_REGSIZE, regnum++)
- {
- int xfer = SCORE_REGSIZE;
-
- if (offset + xfer > TYPE_LENGTH (type))
- xfer = TYPE_LENGTH (type) - offset;
- score_xfer_register (regcache, regnum, xfer,
- gdbarch_byte_order(gdbarch),
- readbuf, writebuf, offset);
- }
- return RETURN_VALUE_REGISTER_CONVENTION;
- }
-}
-
-static int
-score_type_needs_double_align (struct type *type)
-{
- enum type_code typecode = type->code ();
-
- if ((typecode == TYPE_CODE_INT && TYPE_LENGTH (type) == 8)
- || (typecode == TYPE_CODE_FLT && TYPE_LENGTH (type) == 8))
- return 1;
- else if (typecode == TYPE_CODE_STRUCT || typecode == TYPE_CODE_UNION)
- {
- int i, n;
-
- n = type->num_fields ();
- for (i = 0; i < n; i++)
- if (score_type_needs_double_align (type->field (i).type ()))
- return 1;
- return 0;
- }
- return 0;
-}
-
-static CORE_ADDR
-score_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
- struct regcache *regcache, CORE_ADDR bp_addr,
- int nargs, struct value **args, CORE_ADDR sp,
- function_call_return_method return_method,
- CORE_ADDR struct_addr)
-{
- enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
- int argnum;
- int argreg;
- int arglen = 0;
- CORE_ADDR stack_offset = 0;
- CORE_ADDR addr = 0;
-
- /* Step 1, Save RA. */
- regcache_cooked_write_unsigned (regcache, SCORE_RA_REGNUM, bp_addr);
-
- /* Step 2, Make space on the stack for the args. */
- struct_addr = align_down (struct_addr, 16);
- sp = align_down (sp, 16);
- for (argnum = 0; argnum < nargs; argnum++)
- arglen += align_up (TYPE_LENGTH (value_type (args[argnum])),
- SCORE_REGSIZE);
- sp -= align_up (arglen, 16);
-
- argreg = SCORE_BEGIN_ARG_REGNUM;
-
- /* Step 3, Check if struct return then save the struct address to
- r4 and increase the stack_offset by 4. */
- if (return_method == return_method_struct)
- {
- regcache_cooked_write_unsigned (regcache, argreg++, struct_addr);
- stack_offset += SCORE_REGSIZE;
- }
-
- /* Step 4, Load arguments:
- If arg length is too long (> 4 bytes), then split the arg and
- save every parts. */
- for (argnum = 0; argnum < nargs; argnum++)
- {
- struct value *arg = args[argnum];
- struct type *arg_type = check_typedef (value_type (arg));
- enum type_code typecode = arg_type->code ();
- const gdb_byte *val = value_contents (arg).data ();
- int downward_offset = 0;
- int arg_last_part_p = 0;
-
- arglen = TYPE_LENGTH (arg_type);
-
- /* If a arg should be aligned to 8 bytes (long long or double),
- the value should be put to even register numbers. */
- if (score_type_needs_double_align (arg_type))
- {
- if (argreg & 1)
- argreg++;
- }
-
- /* If sizeof a block < SCORE_REGSIZE, then Score GCC will chose
- the default "downward"/"upward" method:
-
- Example:
-
- struct struc
- {
- char a; char b; char c;
- } s = {'a', 'b', 'c'};
-
- Big endian: s = {X, 'a', 'b', 'c'}
- Little endian: s = {'a', 'b', 'c', X}
-
- Where X is a hole. */
-
- if (gdbarch_byte_order(gdbarch) == BFD_ENDIAN_BIG
- && (typecode == TYPE_CODE_STRUCT
- || typecode == TYPE_CODE_UNION)
- && argreg > SCORE_LAST_ARG_REGNUM
- && arglen < SCORE_REGSIZE)
- downward_offset += (SCORE_REGSIZE - arglen);
-
- while (arglen > 0)
- {
- int partial_len = arglen < SCORE_REGSIZE ? arglen : SCORE_REGSIZE;
- ULONGEST regval = extract_unsigned_integer (val, partial_len,
- byte_order);
-
- /* The last part of a arg should shift left when
- gdbarch_byte_order is BFD_ENDIAN_BIG. */
- if (byte_order == BFD_ENDIAN_BIG
- && arg_last_part_p == 1
- && (typecode == TYPE_CODE_STRUCT
- || typecode == TYPE_CODE_UNION))
- regval <<= ((SCORE_REGSIZE - partial_len) * TARGET_CHAR_BIT);
-
- /* Always increase the stack_offset and save args to stack. */
- addr = sp + stack_offset + downward_offset;
- write_memory (addr, val, partial_len);
-
- if (argreg <= SCORE_LAST_ARG_REGNUM)
- {
- regcache_cooked_write_unsigned (regcache, argreg++, regval);
- if (arglen > SCORE_REGSIZE && arglen < SCORE_REGSIZE * 2)
- arg_last_part_p = 1;
- }
-
- val += partial_len;
- arglen -= partial_len;
- stack_offset += align_up (partial_len, SCORE_REGSIZE);
- }
- }
-
- /* Step 5, Save SP. */
- regcache_cooked_write_unsigned (regcache, SCORE_SP_REGNUM, sp);
-
- return sp;
-}
-
-static CORE_ADDR
-score7_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
-{
- CORE_ADDR cpc = pc;
- int iscan = 32, stack_sub = 0;
- while (iscan-- > 0)
- {
- inst_t *inst = score7_fetch_inst (gdbarch, cpc, NULL);
- if (!inst)
- break;
- if ((inst->len == 4) && !stack_sub
- && (G_FLD (inst->v, 29, 25) == 0x1
- && G_FLD (inst->v, 24, 20) == 0x0))
- {
- /* addi r0, offset */
- stack_sub = cpc + SCORE_INSTLEN;
- pc = cpc + SCORE_INSTLEN;
- }
- else if ((inst->len == 4)
- && (G_FLD (inst->v, 29, 25) == 0x0)
- && (G_FLD (inst->v, 24, 20) == 0x2)
- && (G_FLD (inst->v, 19, 15) == 0x0)
- && (G_FLD (inst->v, 14, 10) == 0xF)
- && (G_FLD (inst->v, 9, 0) == 0x56))
- {
- /* mv r2, r0 */
- pc = cpc + SCORE_INSTLEN;
- break;
- }
- else if ((inst->len == 2)
- && (G_FLD (inst->v, 14, 12) == 0x0)
- && (G_FLD (inst->v, 11, 8) == 0x2)
- && (G_FLD (inst->v, 7, 4) == 0x0)
- && (G_FLD (inst->v, 3, 0) == 0x3))
- {
- /* mv! r2, r0 */
- pc = cpc + SCORE16_INSTLEN;
- break;
- }
- else if ((inst->len == 2)
- && ((G_FLD (inst->v, 14, 12) == 3) /* j15 form */
- || (G_FLD (inst->v, 14, 12) == 4) /* b15 form */
- || (G_FLD (inst->v, 14, 12) == 0x0
- && G_FLD (inst->v, 3, 0) == 0x4))) /* br! */
- break;
- else if ((inst->len == 4)
- && ((G_FLD (inst->v, 29, 25) == 2) /* j32 form */
- || (G_FLD (inst->v, 29, 25) == 4) /* b32 form */
- || (G_FLD (inst->v, 29, 25) == 0x0
- && G_FLD (inst->v, 6, 1) == 0x4))) /* br */
- break;
-
- cpc += (inst->len == 2) ? SCORE16_INSTLEN : SCORE_INSTLEN;
- }
- return pc;
-}
-
-static CORE_ADDR
-score3_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
-{
- CORE_ADDR cpc = pc;
- int iscan = 32, stack_sub = 0;
- while (iscan-- > 0)
- {
- inst_t *inst
- = score3_adjust_pc_and_fetch_inst (&cpc, NULL,
- gdbarch_byte_order (gdbarch));
-
- if (!inst)
- break;
- if (inst->len == 4 && !stack_sub
- && (G_FLD (inst->v, 29, 25) == 0x1)
- && (G_FLD (inst->v, 19, 17) == 0x0)
- && (G_FLD (inst->v, 24, 20) == 0x0))
- {
- /* addi r0, offset */
- stack_sub = cpc + inst->len;
- pc = cpc + inst->len;
- }
- else if (inst->len == 4
- && (G_FLD (inst->v, 29, 25) == 0x0)
- && (G_FLD (inst->v, 24, 20) == 0x2)
- && (G_FLD (inst->v, 19, 15) == 0x0)
- && (G_FLD (inst->v, 14, 10) == 0xF)
- && (G_FLD (inst->v, 9, 0) == 0x56))
- {
- /* mv r2, r0 */
- pc = cpc + inst->len;
- break;
- }
- else if ((inst->len == 2)
- && (G_FLD (inst->v, 14, 10) == 0x10)
- && (G_FLD (inst->v, 9, 5) == 0x2)
- && (G_FLD (inst->v, 4, 0) == 0x0))
- {
- /* mv! r2, r0 */
- pc = cpc + inst->len;
- break;
- }
- else if (inst->len == 2
- && ((G_FLD (inst->v, 14, 12) == 3) /* b15 form */
- || (G_FLD (inst->v, 14, 12) == 0x0
- && G_FLD (inst->v, 11, 5) == 0x4))) /* br! */
- break;
- else if (inst->len == 4
- && ((G_FLD (inst->v, 29, 25) == 2) /* j32 form */
- || (G_FLD (inst->v, 29, 25) == 4))) /* b32 form */
- break;
-
- cpc += inst->len;
- }
- return pc;
-}
-
-/* Implement the stack_frame_destroyed_p gdbarch method. */
-
-static int
-score7_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR cur_pc)
-{
- inst_t *inst = score7_fetch_inst (gdbarch, cur_pc, NULL);
-
- if (inst->v == 0x23)
- return 1; /* mv! r0, r2 */
- else if (G_FLD (inst->v, 14, 12) == 0x2
- && G_FLD (inst->v, 3, 0) == 0xa)
- return 1; /* pop! */
- else if (G_FLD (inst->v, 14, 12) == 0x0
- && G_FLD (inst->v, 7, 0) == 0x34)
- return 1; /* br! r3 */
- else if (G_FLD (inst->v, 29, 15) == 0x2
- && G_FLD (inst->v, 6, 1) == 0x2b)
- return 1; /* mv r0, r2 */
- else if (G_FLD (inst->v, 29, 25) == 0x0
- && G_FLD (inst->v, 6, 1) == 0x4
- && G_FLD (inst->v, 19, 15) == 0x3)
- return 1; /* br r3 */
- else
- return 0;
-}
-
-/* Implement the stack_frame_destroyed_p gdbarch method. */
-
-static int
-score3_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR cur_pc)
-{
- CORE_ADDR pc = cur_pc;
- inst_t *inst
- = score3_adjust_pc_and_fetch_inst (&pc, NULL,
- gdbarch_byte_order (gdbarch));
-
- if (inst->len == 2
- && (G_FLD (inst->v, 14, 10) == 0x10)
- && (G_FLD (inst->v, 9, 5) == 0x0)
- && (G_FLD (inst->v, 4, 0) == 0x2))
- return 1; /* mv! r0, r2 */
- else if (inst->len == 4
- && (G_FLD (inst->v, 29, 25) == 0x0)
- && (G_FLD (inst->v, 24, 20) == 0x2)
- && (G_FLD (inst->v, 19, 15) == 0x0)
- && (G_FLD (inst->v, 14, 10) == 0xF)
- && (G_FLD (inst->v, 9, 0) == 0x56))
- return 1; /* mv r0, r2 */
- else if (inst->len == 2
- && (G_FLD (inst->v, 14, 12) == 0x0)
- && (G_FLD (inst->v, 11, 5) == 0x2))
- return 1; /* pop! */
- else if (inst->len == 2
- && (G_FLD (inst->v, 14, 12) == 0x0)
- && (G_FLD (inst->v, 11, 7) == 0x0)
- && (G_FLD (inst->v, 6, 5) == 0x2))
- return 1; /* rpop! */
- else if (inst->len == 2
- && (G_FLD (inst->v, 14, 12) == 0x0)
- && (G_FLD (inst->v, 11, 5) == 0x4)
- && (G_FLD (inst->v, 4, 0) == 0x3))
- return 1; /* br! r3 */
- else if (inst->len == 4
- && (G_FLD (inst->v, 29, 25) == 0x0)
- && (G_FLD (inst->v, 24, 20) == 0x0)
- && (G_FLD (inst->v, 19, 15) == 0x3)
- && (G_FLD (inst->v, 14, 10) == 0xF)
- && (G_FLD (inst->v, 9, 0) == 0x8))
- return 1; /* br r3 */
- else
- return 0;
-}
-
-static gdb_byte *
-score7_malloc_and_get_memblock (CORE_ADDR addr, CORE_ADDR size)
-{
- int ret;
- gdb_byte *memblock = NULL;
-
- if (size == 0)
- return NULL;
-
- memblock = (gdb_byte *) xmalloc (size);
- memset (memblock, 0, size);
- ret = target_read_memory (addr & ~0x3, memblock, size);
- if (ret)
- {
- error (_("Error: target_read_memory in file:%s, line:%d!"),
- __FILE__, __LINE__);
- return NULL;
- }
- return memblock;
-}
-
-static void
-score7_free_memblock (gdb_byte *memblock)
-{
- xfree (memblock);
-}
-
-static void
-score7_adjust_memblock_ptr (gdb_byte **memblock, CORE_ADDR prev_pc,
- CORE_ADDR cur_pc)
-{
- if (prev_pc == -1)
- {
- /* First time call this function, do nothing. */
- }
- else if (cur_pc - prev_pc == 2 && (cur_pc & 0x3) == 0)
- {
- /* First 16-bit instruction, then 32-bit instruction. */
- *memblock += SCORE_INSTLEN;
- }
- else if (cur_pc - prev_pc == 4)
- {
- /* Is 32-bit instruction, increase MEMBLOCK by 4. */
- *memblock += SCORE_INSTLEN;
- }
-}
-
-static void
-score7_analyze_prologue (CORE_ADDR startaddr, CORE_ADDR pc,
- struct frame_info *this_frame,
- struct score_frame_cache *this_cache)
-{
- struct gdbarch *gdbarch = get_frame_arch (this_frame);
- CORE_ADDR sp;
- CORE_ADDR fp;
- CORE_ADDR cur_pc = startaddr;
-
- int sp_offset = 0;
- int ra_offset = 0;
- int fp_offset = 0;
- int ra_offset_p = 0;
- int fp_offset_p = 0;
- int inst_len = 0;
-
- gdb_byte *memblock = NULL;
- gdb_byte *memblock_ptr = NULL;
- CORE_ADDR prev_pc = -1;
-
- /* Allocate MEMBLOCK if PC - STARTADDR > 0. */
- memblock_ptr = memblock =
- score7_malloc_and_get_memblock (startaddr, pc - startaddr);
-
- sp = get_frame_register_unsigned (this_frame, SCORE_SP_REGNUM);
- fp = get_frame_register_unsigned (this_frame, SCORE_FP_REGNUM);
-
- for (; cur_pc < pc; prev_pc = cur_pc, cur_pc += inst_len)
- {
- inst_t *inst = NULL;
- if (memblock != NULL)
- {
- /* Reading memory block from target successfully and got all
- the instructions(from STARTADDR to PC) needed. */
- score7_adjust_memblock_ptr (&memblock, prev_pc, cur_pc);
- inst = score7_fetch_inst (gdbarch, cur_pc, memblock);
- }
- else
- {
- /* Otherwise, we fetch 4 bytes from target, and GDB also
- work correctly. */
- inst = score7_fetch_inst (gdbarch, cur_pc, NULL);
- }
-
- /* FIXME: make a full-power prologue analyzer. */
- if (inst->len == 2)
- {
- inst_len = SCORE16_INSTLEN;
-
- if (G_FLD (inst->v, 14, 12) == 0x2
- && G_FLD (inst->v, 3, 0) == 0xe)
- {
- /* push! */
- sp_offset += 4;
-
- if (G_FLD (inst->v, 11, 7) == 0x6
- && ra_offset_p == 0)
- {
- /* push! r3, [r0] */
- ra_offset = sp_offset;
- ra_offset_p = 1;
- }
- else if (G_FLD (inst->v, 11, 7) == 0x4
- && fp_offset_p == 0)
- {
- /* push! r2, [r0] */
- fp_offset = sp_offset;
- fp_offset_p = 1;
- }
- }
- else if (G_FLD (inst->v, 14, 12) == 0x2
- && G_FLD (inst->v, 3, 0) == 0xa)
- {
- /* pop! */
- sp_offset -= 4;
- }
- else if (G_FLD (inst->v, 14, 7) == 0xc1
- && G_FLD (inst->v, 2, 0) == 0x0)
- {
- /* subei! r0, n */
- sp_offset += (int) pow (2.0, G_FLD (inst->v, 6, 3));
- }
- else if (G_FLD (inst->v, 14, 7) == 0xc0
- && G_FLD (inst->v, 2, 0) == 0x0)
- {
- /* addei! r0, n */
- /* Solaris 11+gcc 5.5 has ambiguous overloads of pow, so we
- pass 2.0 instead of 2 to get the right one. */
- sp_offset -= (int) pow (2.0, G_FLD (inst->v, 6, 3));
- }
- }
- else
- {
- inst_len = SCORE_INSTLEN;
-
- if (G_FLD(inst->v, 29, 25) == 0x3
- && G_FLD(inst->v, 2, 0) == 0x4
- && G_FLD(inst->v, 19, 15) == 0)
- {
- /* sw rD, [r0, offset]+ */
- sp_offset += SCORE_INSTLEN;
-
- if (G_FLD(inst->v, 24, 20) == 0x3)
- {
- /* rD = r3 */
- if (ra_offset_p == 0)
- {
- ra_offset = sp_offset;
- ra_offset_p = 1;
- }
- }
- else if (G_FLD(inst->v, 24, 20) == 0x2)
- {
- /* rD = r2 */
- if (fp_offset_p == 0)
- {
- fp_offset = sp_offset;
- fp_offset_p = 1;
- }
- }
- }
- else if (G_FLD(inst->v, 29, 25) == 0x14
- && G_FLD(inst->v, 19,15) == 0)
- {
- /* sw rD, [r0, offset] */
- if (G_FLD(inst->v, 24, 20) == 0x3)
- {
- /* rD = r3 */
- ra_offset = sp_offset - G_FLD(inst->v, 14, 0);
- ra_offset_p = 1;
- }
- else if (G_FLD(inst->v, 24, 20) == 0x2)
- {
- /* rD = r2 */
- fp_offset = sp_offset - G_FLD(inst->v, 14, 0);
- fp_offset_p = 1;
- }
- }
- else if (G_FLD (inst->v, 29, 15) == 0x1c60
- && G_FLD (inst->v, 2, 0) == 0x0)
- {
- /* lw r3, [r0]+, 4 */
- sp_offset -= SCORE_INSTLEN;
- ra_offset_p = 1;
- }
- else if (G_FLD (inst->v, 29, 15) == 0x1c40
- && G_FLD (inst->v, 2, 0) == 0x0)
- {
- /* lw r2, [r0]+, 4 */
- sp_offset -= SCORE_INSTLEN;
- fp_offset_p = 1;
- }
-
- else if (G_FLD (inst->v, 29, 17) == 0x100
- && G_FLD (inst->v, 0, 0) == 0x0)
- {
- /* addi r0, -offset */
- sp_offset += 65536 - G_FLD (inst->v, 16, 1);
- }
- else if (G_FLD (inst->v, 29, 17) == 0x110
- && G_FLD (inst->v, 0, 0) == 0x0)
- {
- /* addi r2, offset */
- if (pc - cur_pc > 4)
- {
- unsigned int save_v = inst->v;
- inst_t *inst2 =
- score7_fetch_inst (gdbarch, cur_pc + SCORE_INSTLEN, NULL);
- if (inst2->v == 0x23)
- {
- /* mv! r0, r2 */
- sp_offset -= G_FLD (save_v, 16, 1);
- }
- }
- }
- }
- }
-
- /* Save RA. */
- if (ra_offset_p == 1)
- {
- if (this_cache->saved_regs[SCORE_PC_REGNUM].is_realreg ()
- && this_cache->saved_regs[SCORE_PC_REGNUM].realreg ()
- == SCORE_PC_REGNUM)
- this_cache->saved_regs[SCORE_PC_REGNUM].set_addr (sp + sp_offset
- - ra_offset);
- }
- else
- {
- this_cache->saved_regs[SCORE_PC_REGNUM] =
- this_cache->saved_regs[SCORE_RA_REGNUM];
- }
-
- /* Save FP. */
- if (fp_offset_p == 1)
- {
- if (this_cache->saved_regs[SCORE_FP_REGNUM].is_realreg ()
- && this_cache->saved_regs[SCORE_FP_REGNUM].realreg ()
- == SCORE_FP_REGNUM)
- this_cache->saved_regs[SCORE_FP_REGNUM].set_addr (sp + sp_offset
- - fp_offset);
- }
-
- /* Save SP and FP. */
- this_cache->base = sp + sp_offset;
- this_cache->fp = fp;
-
- /* Don't forget to free MEMBLOCK if we allocated it. */
- if (memblock_ptr != NULL)
- score7_free_memblock (memblock_ptr);
-}
-
-static void
-score3_analyze_prologue (CORE_ADDR startaddr, CORE_ADDR pc,
- struct frame_info *this_frame,
- struct score_frame_cache *this_cache)
-{
- CORE_ADDR sp;
- CORE_ADDR fp;
- CORE_ADDR cur_pc = startaddr;
- enum bfd_endian byte_order
- = gdbarch_byte_order (get_frame_arch (this_frame));
-
- int sp_offset = 0;
- int ra_offset = 0;
- int fp_offset = 0;
- int ra_offset_p = 0;
- int fp_offset_p = 0;
- int inst_len = 0;
-
- sp = get_frame_register_unsigned (this_frame, SCORE_SP_REGNUM);
- fp = get_frame_register_unsigned (this_frame, SCORE_FP_REGNUM);
-
- for (; cur_pc < pc; cur_pc += inst_len)
- {
- inst_t *inst = NULL;
-
- inst = score3_adjust_pc_and_fetch_inst (&cur_pc, &inst_len, byte_order);
-
- /* FIXME: make a full-power prologue analyzer. */
- if (inst->len == 2)
- {
- if (G_FLD (inst->v, 14, 12) == 0x0
- && G_FLD (inst->v, 11, 7) == 0x0
- && G_FLD (inst->v, 6, 5) == 0x3)
- {
- /* push! */
- sp_offset += 4;
-
- if (G_FLD (inst->v, 4, 0) == 0x3
- && ra_offset_p == 0)
- {
- /* push! r3, [r0] */
- ra_offset = sp_offset;
- ra_offset_p = 1;
- }
- else if (G_FLD (inst->v, 4, 0) == 0x2
- && fp_offset_p == 0)
- {
- /* push! r2, [r0] */
- fp_offset = sp_offset;
- fp_offset_p = 1;
- }
- }
- else if (G_FLD (inst->v, 14, 12) == 0x6
- && G_FLD (inst->v, 11, 10) == 0x3)
- {
- /* rpush! */
- int start_r = G_FLD (inst->v, 9, 5);
- int cnt = G_FLD (inst->v, 4, 0);
-
- if ((ra_offset_p == 0)
- && (start_r <= SCORE_RA_REGNUM)
- && (SCORE_RA_REGNUM < start_r + cnt))
- {
- /* rpush! contains r3 */
- ra_offset_p = 1;
- ra_offset = sp_offset + 4 * (SCORE_RA_REGNUM - start_r) + 4;
- }
-
- if ((fp_offset_p == 0)
- && (start_r <= SCORE_FP_REGNUM)
- && (SCORE_FP_REGNUM < start_r + cnt))
- {
- /* rpush! contains r2 */
- fp_offset_p = 1;
- fp_offset = sp_offset + 4 * (SCORE_FP_REGNUM - start_r) + 4;
- }
-
- sp_offset += 4 * cnt;
- }
- else if (G_FLD (inst->v, 14, 12) == 0x0
- && G_FLD (inst->v, 11, 7) == 0x0
- && G_FLD (inst->v, 6, 5) == 0x2)
- {
- /* pop! */
- sp_offset -= 4;
- }
- else if (G_FLD (inst->v, 14, 12) == 0x6
- && G_FLD (inst->v, 11, 10) == 0x2)
- {
- /* rpop! */
- sp_offset -= 4 * G_FLD (inst->v, 4, 0);
- }
- else if (G_FLD (inst->v, 14, 12) == 0x5
- && G_FLD (inst->v, 11, 10) == 0x3
- && G_FLD (inst->v, 9, 6) == 0x0)
- {
- /* addi! r0, -offset */
- int imm = G_FLD (inst->v, 5, 0);
- if (imm >> 5)
- imm = -(0x3F - imm + 1);
- sp_offset -= imm;
- }
- else if (G_FLD (inst->v, 14, 12) == 0x5
- && G_FLD (inst->v, 11, 10) == 0x3
- && G_FLD (inst->v, 9, 6) == 0x2)
- {
- /* addi! r2, offset */
- if (pc - cur_pc >= 2)
- {
- inst_t *inst2;
-
- cur_pc += inst->len;
- inst2 = score3_adjust_pc_and_fetch_inst (&cur_pc, NULL,
- byte_order);
-
- if (inst2->len == 2
- && G_FLD (inst2->v, 14, 10) == 0x10
- && G_FLD (inst2->v, 9, 5) == 0x0
- && G_FLD (inst2->v, 4, 0) == 0x2)
- {
- /* mv! r0, r2 */
- int imm = G_FLD (inst->v, 5, 0);
- if (imm >> 5)
- imm = -(0x3F - imm + 1);
- sp_offset -= imm;
- }
- }
- }
- }
- else if (inst->len == 4)
- {
- if (G_FLD (inst->v, 29, 25) == 0x3
- && G_FLD (inst->v, 2, 0) == 0x4
- && G_FLD (inst->v, 24, 20) == 0x3
- && G_FLD (inst->v, 19, 15) == 0x0)
- {
- /* sw r3, [r0, offset]+ */
- sp_offset += inst->len;
- if (ra_offset_p == 0)
- {
- ra_offset = sp_offset;
- ra_offset_p = 1;
- }
- }
- else if (G_FLD (inst->v, 29, 25) == 0x3
- && G_FLD (inst->v, 2, 0) == 0x4
- && G_FLD (inst->v, 24, 20) == 0x2
- && G_FLD (inst->v, 19, 15) == 0x0)
- {
- /* sw r2, [r0, offset]+ */
- sp_offset += inst->len;
- if (fp_offset_p == 0)
- {
- fp_offset = sp_offset;
- fp_offset_p = 1;
- }
- }
- else if (G_FLD (inst->v, 29, 25) == 0x7
- && G_FLD (inst->v, 2, 0) == 0x0
- && G_FLD (inst->v, 24, 20) == 0x3
- && G_FLD (inst->v, 19, 15) == 0x0)
- {
- /* lw r3, [r0]+, 4 */
- sp_offset -= inst->len;
- ra_offset_p = 1;
- }
- else if (G_FLD (inst->v, 29, 25) == 0x7
- && G_FLD (inst->v, 2, 0) == 0x0
- && G_FLD (inst->v, 24, 20) == 0x2
- && G_FLD (inst->v, 19, 15) == 0x0)
- {
- /* lw r2, [r0]+, 4 */
- sp_offset -= inst->len;
- fp_offset_p = 1;
- }
- else if (G_FLD (inst->v, 29, 25) == 0x1
- && G_FLD (inst->v, 19, 17) == 0x0
- && G_FLD (inst->v, 24, 20) == 0x0
- && G_FLD (inst->v, 0, 0) == 0x0)
- {
- /* addi r0, -offset */
- int imm = G_FLD (inst->v, 16, 1);
- if (imm >> 15)
- imm = -(0xFFFF - imm + 1);
- sp_offset -= imm;
- }
- else if (G_FLD (inst->v, 29, 25) == 0x1
- && G_FLD (inst->v, 19, 17) == 0x0
- && G_FLD (inst->v, 24, 20) == 0x2
- && G_FLD (inst->v, 0, 0) == 0x0)
- {
- /* addi r2, offset */
- if (pc - cur_pc >= 2)
- {
- inst_t *inst2;
-
- cur_pc += inst->len;
- inst2 = score3_adjust_pc_and_fetch_inst (&cur_pc, NULL,
- byte_order);
-
- if (inst2->len == 2
- && G_FLD (inst2->v, 14, 10) == 0x10
- && G_FLD (inst2->v, 9, 5) == 0x0
- && G_FLD (inst2->v, 4, 0) == 0x2)
- {
- /* mv! r0, r2 */
- int imm = G_FLD (inst->v, 16, 1);
- if (imm >> 15)
- imm = -(0xFFFF - imm + 1);
- sp_offset -= imm;
- }
- }
- }
- }
- }
-
- /* Save RA. */
- if (ra_offset_p == 1)
- {
- if (this_cache->saved_regs[SCORE_PC_REGNUM].is_realreg ()
- && this_cache->saved_regs[SCORE_PC_REGNUM].realreg ()
- == SCORE_PC_REGNUM)
- this_cache->saved_regs[SCORE_PC_REGNUM].set_addr (sp + sp_offset
- - ra_offset);
- }
- else
- {
- this_cache->saved_regs[SCORE_PC_REGNUM] =
- this_cache->saved_regs[SCORE_RA_REGNUM];
- }
-
- /* Save FP. */
- if (fp_offset_p == 1)
- {
- if (this_cache->saved_regs[SCORE_FP_REGNUM].is_realreg ()
- && this_cache->saved_regs[SCORE_FP_REGNUM].realreg ()
- == SCORE_FP_REGNUM)
- this_cache->saved_regs[SCORE_FP_REGNUM].set_addr (sp + sp_offset
- - fp_offset);
- }
-
- /* Save SP and FP. */
- this_cache->base = sp + sp_offset;
- this_cache->fp = fp;
-}
-
-static struct score_frame_cache *
-score_make_prologue_cache (struct frame_info *this_frame, void **this_cache)
-{
- struct score_frame_cache *cache;
-
- if ((*this_cache) != NULL)
- return (struct score_frame_cache *) (*this_cache);
-
- cache = FRAME_OBSTACK_ZALLOC (struct score_frame_cache);
- (*this_cache) = cache;
- cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
-
- /* Analyze the prologue. */
- {
- const CORE_ADDR pc = get_frame_pc (this_frame);
- CORE_ADDR start_addr;
-
- find_pc_partial_function (pc, NULL, &start_addr, NULL);
- if (start_addr == 0)
- return cache;
-
- if (target_mach == bfd_mach_score3)
- score3_analyze_prologue (start_addr, pc, this_frame,
- (struct score_frame_cache *) *this_cache);
- else
- score7_analyze_prologue (start_addr, pc, this_frame,
- (struct score_frame_cache *) *this_cache);
- }
-
- /* Save SP. */
- cache->saved_regs[SCORE_SP_REGNUM].set_value (cache->base);
-
- return (struct score_frame_cache *) (*this_cache);
-}
-
-static void
-score_prologue_this_id (struct frame_info *this_frame, void **this_cache,
- struct frame_id *this_id)
-{
- struct score_frame_cache *info = score_make_prologue_cache (this_frame,
- this_cache);
- (*this_id) = frame_id_build (info->base, get_frame_func (this_frame));
-}
-
-static struct value *
-score_prologue_prev_register (struct frame_info *this_frame,
- void **this_cache, int regnum)
-{
- struct score_frame_cache *info = score_make_prologue_cache (this_frame,
- this_cache);
- return trad_frame_get_prev_register (this_frame, info->saved_regs, regnum);
-}
-
-static const struct frame_unwind score_prologue_unwind =
-{
- "score prologue",
- NORMAL_FRAME,
- default_frame_unwind_stop_reason,
- score_prologue_this_id,
- score_prologue_prev_register,
- NULL,
- default_frame_sniffer,
- NULL
-};
-
-static CORE_ADDR
-score_prologue_frame_base_address (struct frame_info *this_frame,
- void **this_cache)
-{
- struct score_frame_cache *info =
- score_make_prologue_cache (this_frame, this_cache);
- return info->fp;
-}
-
-static const struct frame_base score_prologue_frame_base =
-{
- &score_prologue_unwind,
- score_prologue_frame_base_address,
- score_prologue_frame_base_address,
- score_prologue_frame_base_address,
-};
-
-static const struct frame_base *
-score_prologue_frame_base_sniffer (struct frame_info *this_frame)
-{
- return &score_prologue_frame_base;
-}
-
-/* Core file support. */
-
-static const struct regcache_map_entry score7_linux_gregmap[] =
- {
- /* FIXME: According to the current Linux kernel, r0 is preceded by
- 9 rather than 7 words. */
- { 7, REGCACHE_MAP_SKIP, 4 },
- { 32, 0, 4 }, /* r0 ... r31 */
- { 1, 55, 4 }, /* CEL */
- { 1, 54, 4 }, /* CEH */
- { 1, 53, 4 }, /* sr0, i.e. cnt or COUNTER */
- { 1, 52, 4 }, /* sr1, i.e. lcr or LDCR */
- { 1, 51, 4 }, /* sr2, i.e. scr or STCR */
- { 1, 49, 4 }, /* PC (same slot as EPC) */
- { 1, 38, 4 }, /* EMA */
- { 1, 32, 4 }, /* PSR */
- { 1, 34, 4 }, /* ECR */
- { 1, 33, 4 }, /* COND */
- { 0 }
- };
-
-#define SCORE7_LINUX_EPC_OFFSET (44 * 4)
-#define SCORE7_LINUX_SIZEOF_GREGSET (49 * 4)
-
-static void
-score7_linux_supply_gregset(const struct regset *regset,
- struct regcache *regcache,
- int regnum, const void *buf,
- size_t size)
-{
- regcache_supply_regset (regset, regcache, regnum, buf, size);
-
- /* Supply the EPC from the same slot as the PC. Note that the
- collect function will store the PC in that slot. */
- if ((regnum == -1 || regnum == SCORE_EPC_REGNUM)
- && size >= SCORE7_LINUX_EPC_OFFSET + 4)
- regcache->raw_supply
- (SCORE_EPC_REGNUM, (const gdb_byte *) buf + SCORE7_LINUX_EPC_OFFSET);
-}
-
-static const struct regset score7_linux_gregset =
- {
- score7_linux_gregmap,
- score7_linux_supply_gregset,
- regcache_collect_regset
- };
-
-/* Iterate over core file register note sections. */
-
-static void
-score7_linux_iterate_over_regset_sections (struct gdbarch *gdbarch,
- iterate_over_regset_sections_cb *cb,
- void *cb_data,
- const struct regcache *regcache)
-{
- cb (".reg", SCORE7_LINUX_SIZEOF_GREGSET, SCORE7_LINUX_SIZEOF_GREGSET,
- &score7_linux_gregset, NULL, cb_data);
-}
-
-static struct gdbarch *
-score_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
-{
- struct gdbarch *gdbarch;
- target_mach = info.bfd_arch_info->mach;
-
- arches = gdbarch_list_lookup_by_info (arches, &info);
- if (arches != NULL)
- {
- return (arches->gdbarch);
- }
- gdbarch = gdbarch_alloc (&info, NULL);
-
- set_gdbarch_short_bit (gdbarch, 16);
- set_gdbarch_int_bit (gdbarch, 32);
- set_gdbarch_float_bit (gdbarch, 32);
- set_gdbarch_double_bit (gdbarch, 64);
- set_gdbarch_long_double_bit (gdbarch, 64);
-#if WITH_SIM
- set_gdbarch_register_sim_regno (gdbarch, score_register_sim_regno);
-#endif
- set_gdbarch_pc_regnum (gdbarch, SCORE_PC_REGNUM);
- set_gdbarch_sp_regnum (gdbarch, SCORE_SP_REGNUM);
- set_gdbarch_adjust_breakpoint_address (gdbarch,
- score_adjust_breakpoint_address);
- set_gdbarch_register_type (gdbarch, score_register_type);
- set_gdbarch_frame_align (gdbarch, score_frame_align);
- set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
-
- switch (target_mach)
- {
- case bfd_mach_score7:
- set_gdbarch_breakpoint_kind_from_pc (gdbarch,
- score7_breakpoint_kind_from_pc);
- set_gdbarch_sw_breakpoint_from_kind (gdbarch,
- score7_sw_breakpoint_from_kind);
- set_gdbarch_skip_prologue (gdbarch, score7_skip_prologue);
- set_gdbarch_stack_frame_destroyed_p (gdbarch,
- score7_stack_frame_destroyed_p);
- set_gdbarch_register_name (gdbarch, score7_register_name);
- set_gdbarch_num_regs (gdbarch, SCORE7_NUM_REGS);
- /* Core file support. */
- set_gdbarch_iterate_over_regset_sections
- (gdbarch, score7_linux_iterate_over_regset_sections);
- break;
-
- case bfd_mach_score3:
- set_gdbarch_breakpoint_kind_from_pc (gdbarch,
- score3_breakpoint_kind_from_pc);
- set_gdbarch_sw_breakpoint_from_kind (gdbarch,
- score3_sw_breakpoint_from_kind);
- set_gdbarch_skip_prologue (gdbarch, score3_skip_prologue);
- set_gdbarch_stack_frame_destroyed_p (gdbarch,
- score3_stack_frame_destroyed_p);
- set_gdbarch_register_name (gdbarch, score3_register_name);
- set_gdbarch_num_regs (gdbarch, SCORE3_NUM_REGS);
- break;
- }
-
- /* Watchpoint hooks. */
- set_gdbarch_have_nonsteppable_watchpoint (gdbarch, 1);
-
- /* Dummy frame hooks. */
- set_gdbarch_return_value (gdbarch, score_return_value);
- set_gdbarch_call_dummy_location (gdbarch, AT_ENTRY_POINT);
- set_gdbarch_push_dummy_call (gdbarch, score_push_dummy_call);
-
- /* Normal frame hooks. */
- dwarf2_append_unwinders (gdbarch);
- frame_base_append_sniffer (gdbarch, dwarf2_frame_base_sniffer);
- frame_unwind_append_unwinder (gdbarch, &score_prologue_unwind);
- frame_base_append_sniffer (gdbarch, score_prologue_frame_base_sniffer);
-
- return gdbarch;
-}
-
-void _initialize_score_tdep ();
-void
-_initialize_score_tdep ()
-{
- gdbarch_register (bfd_arch_score, score_gdbarch_init, NULL);
-}
diff --git a/gdb/score-tdep.h b/gdb/score-tdep.h
deleted file mode 100644
index 07c62f7e34d..00000000000
--- a/gdb/score-tdep.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/* Target-dependent code for the S+core architecture, for GDB,
- the GNU Debugger.
-
- Copyright (C) 2006-2022 Free Software Foundation, Inc.
-
- Contributed by Qinwei (qinwei@sunnorth.com.cn)
- Contributed by Ching-Peng Lin (cplin@sunplus.com)
-
- This file is part of GDB.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>. */
-
-#ifndef SCORE_TDEP_H
-#define SCORE_TDEP_H
-#include "math.h"
-
-enum gdb_regnum
-{
- SCORE_SP_REGNUM = 0,
- SCORE_FP_REGNUM = 2,
- SCORE_RA_REGNUM = 3,
- SCORE_A0_REGNUM = 4,
- SCORE_AL_REGNUM = 7,
- SCORE_EPC_REGNUM = 37,
- SCORE_PC_REGNUM = 49,
-};
-
-#define SCORE_A0_REGNUM 4
-#define SCORE_A1_REGNUM 5
-#define SCORE_REGSIZE 4
-#define SCORE7_NUM_REGS 56
-#define SCORE3_NUM_REGS 50
-#define SCORE_BEGIN_ARG_REGNUM 4
-#define SCORE_LAST_ARG_REGNUM 7
-
-#define SCORE_INSTLEN 4
-#define SCORE16_INSTLEN 2
-
-#endif /* SCORE_TDEP_H */
diff --git a/gdb/selftest-arch.c b/gdb/selftest-arch.c
index 1375838b0c2..f434da718d5 100644
--- a/gdb/selftest-arch.c
+++ b/gdb/selftest-arch.c
@@ -49,14 +49,15 @@ static bool skip_arch (const char *arch)
return false;
}
-/* Register a kind of selftest that calls the test function once for each
- gdbarch known to GDB. */
+/* Generate a selftest for each gdbarch known to GDB. */
-void
-register_test_foreach_arch (const std::string &name,
- self_test_foreach_arch_function *function)
+static std::vector<selftest>
+foreach_arch_test_generator (const std::string &name,
+ self_test_foreach_arch_function *function)
{
+ std::vector<selftest> tests;
std::vector<const char *> arches = gdbarch_printable_names ();
+ tests.reserve (arches.size ());
for (const char *arch : arches)
{
if (skip_arch (arch))
@@ -73,10 +74,22 @@ register_test_foreach_arch (const std::string &name,
reset ();
});
- std::string test_name
- = name + std::string ("::") + std::string (arch);
- register_test (test_name, test_fn);
+ tests.emplace_back (string_printf ("%s::%s", name.c_str (), arch),
+ test_fn);
}
+ return tests;
+}
+
+/* See selftest-arch.h. */
+
+void
+register_test_foreach_arch (const std::string &name,
+ self_test_foreach_arch_function *function)
+{
+ add_lazy_generator ([=] ()
+ {
+ return foreach_arch_test_generator (name, function);
+ });
}
void
diff --git a/gdb/selftest-arch.h b/gdb/selftest-arch.h
index f359e4a0ed9..6bdef267c44 100644
--- a/gdb/selftest-arch.h
+++ b/gdb/selftest-arch.h
@@ -23,6 +23,9 @@ typedef void self_test_foreach_arch_function (struct gdbarch *);
namespace selftests
{
+
+/* Register a selftest running FUNCTION for each arch supported by GDB. */
+
extern void
register_test_foreach_arch (const std::string &name,
self_test_foreach_arch_function *function);
diff --git a/gdb/ser-base.c b/gdb/ser-base.c
index 830ebfea3a1..91c0ab826cd 100644
--- a/gdb/ser-base.c
+++ b/gdb/ser-base.c
@@ -108,13 +108,13 @@ reschedule (struct serial *scb)
{
case FD_SCHEDULED:
if (scb->async_state != FD_SCHEDULED)
- fprintf_unfiltered (gdb_stdlog, "[fd%d->fd-scheduled]\n",
- scb->fd);
+ gdb_printf (gdb_stdlog, "[fd%d->fd-scheduled]\n",
+ scb->fd);
break;
default: /* TIMER SCHEDULED */
if (scb->async_state == FD_SCHEDULED)
- fprintf_unfiltered (gdb_stdlog, "[fd%d->timer-scheduled]\n",
- scb->fd);
+ gdb_printf (gdb_stdlog, "[fd%d->timer-scheduled]\n",
+ scb->fd);
break;
}
}
@@ -306,12 +306,12 @@ ser_base_read_error_fd (struct serial *scb, int close_fd)
while ((newline = strstr (current, "\n")) != NULL)
{
*newline = '\0';
- fputs_unfiltered (current, gdb_stderr);
- fputs_unfiltered ("\n", gdb_stderr);
+ gdb_puts (current, gdb_stderr);
+ gdb_puts ("\n", gdb_stderr);
current = newline + 1;
}
- fputs_unfiltered (current, gdb_stderr);
+ gdb_puts (current, gdb_stderr);
}
}
}
@@ -592,8 +592,8 @@ ser_base_async (struct serial *scb,
/* Force a re-schedule. */
scb->async_state = NOTHING_SCHEDULED;
if (serial_debug_p (scb))
- fprintf_unfiltered (gdb_stdlog, "[fd%d->asynchronous]\n",
- scb->fd);
+ gdb_printf (gdb_stdlog, "[fd%d->asynchronous]\n",
+ scb->fd);
reschedule (scb);
if (scb->error_fd != -1)
@@ -602,8 +602,8 @@ ser_base_async (struct serial *scb,
else
{
if (serial_debug_p (scb))
- fprintf_unfiltered (gdb_stdlog, "[fd%d->synchronous]\n",
- scb->fd);
+ gdb_printf (gdb_stdlog, "[fd%d->synchronous]\n",
+ scb->fd);
/* De-schedule whatever tasks are currently scheduled. */
switch (scb->async_state)
{
diff --git a/gdb/ser-go32.c b/gdb/ser-go32.c
index 0b2fa93b9c9..2ccad41db1b 100644
--- a/gdb/ser-go32.c
+++ b/gdb/ser-go32.c
@@ -584,11 +584,11 @@ dos_close (struct serial *scb)
/* Check for overflow errors. */
if (port->oflo)
{
- fprintf_unfiltered (gdb_stderr,
- "Serial input overruns occurred.\n");
- fprintf_unfiltered (gdb_stderr, "This system %s handle %d baud.\n",
- port->fifo ? "cannot" : "needs a 16550 to",
- port->baudrate);
+ gdb_printf (gdb_stderr,
+ "Serial input overruns occurred.\n");
+ gdb_printf (gdb_stderr, "This system %s handle %d baud.\n",
+ port->fifo ? "cannot" : "needs a 16550 to",
+ port->baudrate);
}
}
@@ -745,7 +745,7 @@ dos_setbaudrate (struct serial *scb, int rate)
x = dos_baudconv (rate);
if (x <= 0)
{
- fprintf_unfiltered (gdb_stderr, "%d: impossible baudrate\n", rate);
+ gdb_printf (gdb_stderr, "%d: impossible baudrate\n", rate);
errno = EINVAL;
return -1;
}
@@ -898,20 +898,20 @@ info_serial_command (const char *arg, int from_tty)
{
if (port->baudrate == 0)
continue;
- printf_filtered ("Port:\tCOM%ld (%sactive)\n", (long)(port - ports) + 1,
- port->intrupt ? "" : "not ");
- printf_filtered ("Addr:\t0x%03x (irq %d)\n", port->base, port->irq);
- printf_filtered ("16550:\t%s\n", port->fifo ? "yes" : "no");
- printf_filtered ("Speed:\t%d baud\n", port->baudrate);
- printf_filtered ("Errs:\tframing %d parity %d overflow %d\n\n",
- port->ferr, port->perr, port->oflo);
+ gdb_printf ("Port:\tCOM%ld (%sactive)\n", (long)(port - ports) + 1,
+ port->intrupt ? "" : "not ");
+ gdb_printf ("Addr:\t0x%03x (irq %d)\n", port->base, port->irq);
+ gdb_printf ("16550:\t%s\n", port->fifo ? "yes" : "no");
+ gdb_printf ("Speed:\t%d baud\n", port->baudrate);
+ gdb_printf ("Errs:\tframing %d parity %d overflow %d\n\n",
+ port->ferr, port->perr, port->oflo);
}
#ifdef DOS_STATS
- printf_filtered ("\nTotal interrupts: %d\n", intrcnt);
+ gdb_printf ("\nTotal interrupts: %d\n", intrcnt);
for (i = 0; i < NCNT; i++)
if (cnts[i])
- printf_filtered ("%s:\t%lu\n", cntnames[i], (unsigned long) cnts[i]);
+ gdb_printf ("%s:\t%lu\n", cntnames[i], (unsigned long) cnts[i]);
#endif
}
diff --git a/gdb/ser-mingw.c b/gdb/ser-mingw.c
index a5be6ab166d..afe04102e15 100644
--- a/gdb/ser-mingw.c
+++ b/gdb/ser-mingw.c
@@ -30,6 +30,7 @@
#include <sys/types.h>
#include "command.h"
+#include "gdbsupport/buildargv.h"
struct ser_windows_state
{
diff --git a/gdb/ser-pipe.c b/gdb/ser-pipe.c
index 06c3d3a174e..80bb73e0418 100644
--- a/gdb/ser-pipe.c
+++ b/gdb/ser-pipe.c
@@ -62,6 +62,12 @@ pipe_open (struct serial *scb, const char *name)
int err_pdes[2];
int pid;
+ if (*name == '|')
+ {
+ name++;
+ name = skip_spaces (name);
+ }
+
if (gdb_socketpair_cloexec (AF_UNIX, SOCK_STREAM, 0, pdes) < 0)
return -1;
if (gdb_socketpair_cloexec (AF_UNIX, SOCK_STREAM, 0, err_pdes) < 0)
diff --git a/gdb/ser-tcp.c b/gdb/ser-tcp.c
index e7d2cc9bc60..ffc039b54ab 100644
--- a/gdb/ser-tcp.c
+++ b/gdb/ser-tcp.c
@@ -296,8 +296,8 @@ net_open (struct serial *scb, const char *name)
if (r != 0)
{
- fprintf_unfiltered (gdb_stderr, _("%s: cannot resolve name: %s\n"),
- name, gai_strerror (r));
+ gdb_printf (gdb_stderr, _("%s: cannot resolve name: %s\n"),
+ name, gai_strerror (r));
errno = ENOENT;
return -1;
}
diff --git a/gdb/ser-unix.c b/gdb/ser-unix.c
index 9de950aced6..37ac0b6403c 100644
--- a/gdb/ser-unix.c
+++ b/gdb/ser-unix.c
@@ -46,7 +46,7 @@ static void
show_serial_hwflow (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Hardware flow control is %s.\n"), value);
+ gdb_printf (file, _("Hardware flow control is %s.\n"), value);
}
#endif
@@ -142,21 +142,21 @@ hardwire_print_tty_state (struct serial *scb,
struct hardwire_ttystate *state = (struct hardwire_ttystate *) ttystate;
int i;
- fprintf_filtered (stream, "c_iflag = 0x%x, c_oflag = 0x%x,\n",
- (int) state->termios.c_iflag,
- (int) state->termios.c_oflag);
- fprintf_filtered (stream, "c_cflag = 0x%x, c_lflag = 0x%x\n",
- (int) state->termios.c_cflag,
- (int) state->termios.c_lflag);
+ gdb_printf (stream, "c_iflag = 0x%x, c_oflag = 0x%x,\n",
+ (int) state->termios.c_iflag,
+ (int) state->termios.c_oflag);
+ gdb_printf (stream, "c_cflag = 0x%x, c_lflag = 0x%x\n",
+ (int) state->termios.c_cflag,
+ (int) state->termios.c_lflag);
#if 0
/* This not in POSIX, and is not really documented by those systems
which have it (at least not Sun). */
- fprintf_filtered (stream, "c_line = 0x%x.\n", state->termios.c_line);
+ gdb_printf (stream, "c_line = 0x%x.\n", state->termios.c_line);
#endif
- fprintf_filtered (stream, "c_cc: ");
+ gdb_printf (stream, "c_cc: ");
for (i = 0; i < NCCS; i += 1)
- fprintf_filtered (stream, "0x%x ", state->termios.c_cc[i]);
- fprintf_filtered (stream, "\n");
+ gdb_printf (stream, "0x%x ", state->termios.c_cc[i]);
+ gdb_printf (stream, "\n");
}
/* Wait for the output to drain away, as opposed to flushing
@@ -197,8 +197,8 @@ hardwire_raw (struct serial *scb)
struct hardwire_ttystate state;
if (get_tty_state (scb, &state))
- fprintf_unfiltered (gdb_stderr, "get_tty_state failed: %s\n",
- safe_strerror (errno));
+ gdb_printf (gdb_stderr, "get_tty_state failed: %s\n",
+ safe_strerror (errno));
state.termios.c_iflag = 0;
state.termios.c_oflag = 0;
@@ -222,8 +222,8 @@ hardwire_raw (struct serial *scb)
state.termios.c_cc[VTIME] = 0;
if (set_tty_state (scb, &state))
- fprintf_unfiltered (gdb_stderr, "set_tty_state failed: %s\n",
- safe_strerror (errno));
+ gdb_printf (gdb_stderr, "set_tty_state failed: %s\n",
+ safe_strerror (errno));
}
#ifndef B19200
diff --git a/gdb/serial.c b/gdb/serial.c
index c6e3cb9bbbb..0a8c7abf615 100644
--- a/gdb/serial.c
+++ b/gdb/serial.c
@@ -65,59 +65,59 @@ serial_logchar (struct ui_file *stream, int ch_type, int ch, int timeout)
{
if (ch_type != serial_current_type)
{
- fprintf_unfiltered (stream, "\n%c ", ch_type);
+ gdb_printf (stream, "\n%c ", ch_type);
serial_current_type = ch_type;
}
if (serial_logbase != logbase_ascii)
- fputc_unfiltered (' ', stream);
+ gdb_putc (' ', stream);
switch (ch)
{
case SERIAL_TIMEOUT:
- fprintf_unfiltered (stream, "<Timeout: %d seconds>", timeout);
+ gdb_printf (stream, "<Timeout: %d seconds>", timeout);
return;
case SERIAL_ERROR:
- fprintf_unfiltered (stream, "<Error: %s>", safe_strerror (errno));
+ gdb_printf (stream, "<Error: %s>", safe_strerror (errno));
return;
case SERIAL_EOF:
- fputs_unfiltered ("<Eof>", stream);
+ gdb_puts ("<Eof>", stream);
return;
case SERIAL_BREAK:
- fputs_unfiltered ("<Break>", stream);
+ gdb_puts ("<Break>", stream);
return;
default:
if (serial_logbase == logbase_hex)
- fprintf_unfiltered (stream, "%02x", ch & 0xff);
+ gdb_printf (stream, "%02x", ch & 0xff);
else if (serial_logbase == logbase_octal)
- fprintf_unfiltered (stream, "%03o", ch & 0xff);
+ gdb_printf (stream, "%03o", ch & 0xff);
else
switch (ch)
{
case '\\':
- fputs_unfiltered ("\\\\", stream);
+ gdb_puts ("\\\\", stream);
break;
case '\b':
- fputs_unfiltered ("\\b", stream);
+ gdb_puts ("\\b", stream);
break;
case '\f':
- fputs_unfiltered ("\\f", stream);
+ gdb_puts ("\\f", stream);
break;
case '\n':
- fputs_unfiltered ("\\n", stream);
+ gdb_puts ("\\n", stream);
break;
case '\r':
- fputs_unfiltered ("\\r", stream);
+ gdb_puts ("\\r", stream);
break;
case '\t':
- fputs_unfiltered ("\\t", stream);
+ gdb_puts ("\\t", stream);
break;
case '\v':
- fputs_unfiltered ("\\v", stream);
+ gdb_puts ("\\v", stream);
break;
default:
- fprintf_unfiltered (stream,
- isprint (ch) ? "%c" : "\\x%02x", ch & 0xFF);
+ gdb_printf (stream,
+ isprint (ch) ? "%c" : "\\x%02x", ch & 0xFF);
break;
}
}
@@ -131,8 +131,8 @@ serial_log_command (struct target_ops *self, const char *cmd)
serial_current_type = 'c';
- fputs_unfiltered ("\nc ", serial_logfp);
- fputs_unfiltered (cmd, serial_logfp);
+ gdb_puts ("\nc ", serial_logfp);
+ gdb_puts (cmd, serial_logfp);
/* Make sure that the log file is as up-to-date as possible,
in case we are getting ready to dump core or something. */
@@ -201,12 +201,7 @@ serial_open (const char *name)
const char *open_name = name;
if (startswith (name, "|"))
- {
- ops = serial_interface_lookup ("pipe");
- /* Discard ``|'' and any space before the command itself. */
- ++open_name;
- open_name = skip_spaces (open_name);
- }
+ ops = serial_interface_lookup ("pipe");
/* Check for a colon, suggesting an IP address/port pair.
Do this *after* checking for all the interesting prefixes. We
don't want to constrain the syntax of what can follow them. */
@@ -317,7 +312,7 @@ do_serial_close (struct serial *scb, int really_close)
if (serial_logfp)
{
- fputs_unfiltered ("\nEnd of log\n", serial_logfp);
+ gdb_puts ("\nEnd of log\n", serial_logfp);
serial_current_type = 0;
/* XXX - What if serial_logfp == gdb_stdout or gdb_stderr? */
@@ -406,9 +401,9 @@ serial_readchar (struct serial *scb, int timeout)
}
if (serial_debug_p (scb))
{
- fprintf_unfiltered (gdb_stdlog, "[");
+ gdb_printf (gdb_stdlog, "[");
serial_logchar (gdb_stdlog, 'r', ch, timeout);
- fprintf_unfiltered (gdb_stdlog, "]");
+ gdb_printf (gdb_stdlog, "]");
gdb_flush (gdb_stdlog);
}
@@ -437,9 +432,9 @@ serial_write (struct serial *scb, const void *buf, size_t count)
for (c = 0; c < count; c++)
{
- fprintf_unfiltered (gdb_stdlog, "[");
+ gdb_printf (gdb_stdlog, "[");
serial_logchar (gdb_stdlog, 'w', str[c] & 0xff, 0);
- fprintf_unfiltered (gdb_stdlog, "]");
+ gdb_printf (gdb_stdlog, "]");
}
gdb_flush (gdb_stdlog);
}
@@ -631,8 +626,8 @@ static void
serial_baud_show_cmd (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Baud rate for remote serial I/O is %s.\n"),
- value);
+ gdb_printf (file, _("Baud rate for remote serial I/O is %s.\n"),
+ value);
}
/* See serial.h. */
diff --git a/gdb/serial.h b/gdb/serial.h
index 4c1261848b3..bc74813a2f9 100644
--- a/gdb/serial.h
+++ b/gdb/serial.h
@@ -169,7 +169,7 @@ extern serial_ttystate serial_copy_tty_state (struct serial *scb,
extern int serial_set_tty_state (struct serial *scb, serial_ttystate ttystate);
-/* printf_filtered a user-comprehensible description of ttystate on
+/* gdb_printf a user-comprehensible description of ttystate on
the specified STREAM. FIXME: At present this sends output to the
default stream - GDB_STDOUT. */
diff --git a/gdb/sh-tdep.c b/gdb/sh-tdep.c
index c12d40b604c..2341a9beef6 100644
--- a/gdb/sh-tdep.c
+++ b/gdb/sh-tdep.c
@@ -1490,7 +1490,7 @@ sh_default_register_type (struct gdbarch *gdbarch, int reg_nr)
TODO: sh2a and dsp registers. */
static int
sh_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
- struct reggroup *reggroup)
+ const struct reggroup *reggroup)
{
if (gdbarch_register_name (gdbarch, regnum) == NULL
|| *gdbarch_register_name (gdbarch, regnum) == '\0')
diff --git a/gdb/skip.c b/gdb/skip.c
index 2525b8b60db..3a3734a296d 100644
--- a/gdb/skip.c
+++ b/gdb/skip.c
@@ -33,10 +33,11 @@
#include "source.h"
#include "filenames.h"
#include "fnmatch.h"
-#include "gdb_regex.h"
+#include "gdbsupport/gdb_regex.h"
#include "gdbsupport/gdb_optional.h"
#include <list>
#include "cli/cli-style.h"
+#include "gdbsupport/buildargv.h"
/* True if we want to print debug printouts related to file/function
skipping. */
@@ -183,7 +184,7 @@ skip_file_command (const char *arg, int from_tty)
skiplist_entry::add_entry (false, std::string (filename),
false, std::string ());
- printf_filtered (_("File %s will be skipped when stepping.\n"), filename);
+ gdb_printf (_("File %s will be skipped when stepping.\n"), filename);
}
/* Create a skiplist entry for the given function NAME and add it to the
@@ -194,7 +195,7 @@ skip_function (const char *name)
{
skiplist_entry::add_entry (false, std::string (), false, std::string (name));
- printf_filtered (_("Function %s will be skipped when stepping.\n"), name);
+ gdb_printf (_("Function %s will be skipped when stepping.\n"), name);
}
static void
@@ -330,20 +331,20 @@ skip_command (const char *arg, int from_tty)
if (function_to_print == NULL)
{
- printf_filtered (_("%s %s will be skipped when stepping.\n"),
- file_text, file_to_print);
+ gdb_printf (_("%s %s will be skipped when stepping.\n"),
+ file_text, file_to_print);
}
else if (file_to_print == NULL)
{
- printf_filtered (_("%s %s will be skipped when stepping.\n"),
- function_text, function_to_print);
+ gdb_printf (_("%s %s will be skipped when stepping.\n"),
+ function_text, function_to_print);
}
else
{
- printf_filtered (_("%s %s in %s %s will be skipped"
- " when stepping.\n"),
- function_text, function_to_print,
- lower_file_text, file_to_print);
+ gdb_printf (_("%s %s in %s %s will be skipped"
+ " when stepping.\n"),
+ function_text, function_to_print,
+ lower_file_text, file_to_print);
}
}
}
@@ -485,9 +486,9 @@ bool
skiplist_entry::do_skip_file_p (const symtab_and_line &function_sal) const
{
if (debug_skip)
- fprintf_unfiltered (gdb_stdlog,
- "skip: checking if file %s matches non-glob %s...",
- function_sal.symtab->filename, m_file.c_str ());
+ gdb_printf (gdb_stdlog,
+ "skip: checking if file %s matches non-glob %s...",
+ function_sal.symtab->filename, m_file.c_str ());
bool result;
@@ -512,7 +513,7 @@ skiplist_entry::do_skip_file_p (const symtab_and_line &function_sal) const
}
if (debug_skip)
- fprintf_unfiltered (gdb_stdlog, result ? "yes.\n" : "no.\n");
+ gdb_printf (gdb_stdlog, result ? "yes.\n" : "no.\n");
return result;
}
@@ -521,9 +522,9 @@ bool
skiplist_entry::do_skip_gfile_p (const symtab_and_line &function_sal) const
{
if (debug_skip)
- fprintf_unfiltered (gdb_stdlog,
- "skip: checking if file %s matches glob %s...",
- function_sal.symtab->filename, m_file.c_str ());
+ gdb_printf (gdb_stdlog,
+ "skip: checking if file %s matches glob %s...",
+ function_sal.symtab->filename, m_file.c_str ());
bool result;
@@ -552,7 +553,7 @@ skiplist_entry::do_skip_gfile_p (const symtab_and_line &function_sal) const
}
if (debug_skip)
- fprintf_unfiltered (gdb_stdlog, result ? "yes.\n" : "no.\n");
+ gdb_printf (gdb_stdlog, result ? "yes.\n" : "no.\n");
return result;
}
@@ -583,9 +584,9 @@ skiplist_entry::skip_function_p (const char *function_name) const
if (m_function_is_regexp)
{
if (debug_skip)
- fprintf_unfiltered (gdb_stdlog,
- "skip: checking if function %s matches regex %s...",
- function_name, m_function.c_str ());
+ gdb_printf (gdb_stdlog,
+ "skip: checking if function %s matches regex %s...",
+ function_name, m_function.c_str ());
gdb_assert (m_compiled_function_regexp);
result
@@ -594,15 +595,15 @@ skiplist_entry::skip_function_p (const char *function_name) const
else
{
if (debug_skip)
- fprintf_unfiltered (gdb_stdlog,
- ("skip: checking if function %s matches non-regex "
- "%s..."),
- function_name, m_function.c_str ());
+ gdb_printf (gdb_stdlog,
+ ("skip: checking if function %s matches non-regex "
+ "%s..."),
+ function_name, m_function.c_str ());
result = (strcmp_iw (function_name, m_function.c_str ()) == 0);
}
if (debug_skip)
- fprintf_unfiltered (gdb_stdlog, result ? "yes.\n" : "no.\n");
+ gdb_printf (gdb_stdlog, result ? "yes.\n" : "no.\n");
return result;
}
diff --git a/gdb/sol-thread.c b/gdb/sol-thread.c
index 44e990b6e5f..18754f4f93b 100644
--- a/gdb/sol-thread.c
+++ b/gdb/sol-thread.c
@@ -638,7 +638,7 @@ check_for_thread_db (void)
break;
case TD_OK:
- printf_unfiltered (_("[Thread debugging using libthread_db enabled]\n"));
+ gdb_printf (_("[Thread debugging using libthread_db enabled]\n"));
/* The thread library was detected. Activate the sol_thread target. */
current_inferior ()->push_target (&sol_thread_ops);
@@ -767,7 +767,7 @@ ps_pglobal_lookup (struct ps_prochandle *ph, const char *ld_object_name,
if (!ms.minsym)
return PS_NOSYM;
- *ld_symbol_addr = BMSYMBOL_VALUE_ADDRESS (ms);
+ *ld_symbol_addr = ms.value_address ();
return PS_OK;
}
@@ -882,7 +882,7 @@ ps_plog (const char *fmt, ...)
va_start (args, fmt);
- vfprintf_filtered (gdb_stderr, fmt, args);
+ gdb_vprintf (gdb_stderr, fmt, args);
}
/* Get size of extra register set. Currently a noop. */
@@ -1043,32 +1043,32 @@ info_cb (const td_thrhandle_t *th, void *s)
ret = p_td_thr_get_info (th, &ti);
if (ret == TD_OK)
{
- printf_filtered ("%s thread #%d, lwp %d, ",
- ti.ti_type == TD_THR_SYSTEM ? "system" : "user ",
- ti.ti_tid, ti.ti_lid);
+ gdb_printf ("%s thread #%d, lwp %d, ",
+ ti.ti_type == TD_THR_SYSTEM ? "system" : "user ",
+ ti.ti_tid, ti.ti_lid);
switch (ti.ti_state)
{
default:
case TD_THR_UNKNOWN:
- printf_filtered ("<unknown state>");
+ gdb_printf ("<unknown state>");
break;
case TD_THR_STOPPED:
- printf_filtered ("(stopped)");
+ gdb_printf ("(stopped)");
break;
case TD_THR_RUN:
- printf_filtered ("(run) ");
+ gdb_printf ("(run) ");
break;
case TD_THR_ACTIVE:
- printf_filtered ("(active) ");
+ gdb_printf ("(active) ");
break;
case TD_THR_ZOMBIE:
- printf_filtered ("(zombie) ");
+ gdb_printf ("(zombie) ");
break;
case TD_THR_SLEEP:
- printf_filtered ("(asleep) ");
+ gdb_printf ("(asleep) ");
break;
case TD_THR_STOPPED_ASLEEP:
- printf_filtered ("(stopped asleep)");
+ gdb_printf ("(stopped asleep)");
break;
}
/* Print thr_create start function. */
@@ -1077,10 +1077,10 @@ info_cb (const td_thrhandle_t *th, void *s)
const struct bound_minimal_symbol msym
= lookup_minimal_symbol_by_pc (ti.ti_startfunc);
- printf_filtered (" startfunc=%s",
- msym.minsym
- ? msym.minsym->print_name ()
- : paddress (target_gdbarch (), ti.ti_startfunc));
+ gdb_printf (" startfunc=%s",
+ msym.minsym
+ ? msym.minsym->print_name ()
+ : paddress (target_gdbarch (), ti.ti_startfunc));
}
/* If thread is asleep, print function that went to sleep. */
@@ -1089,13 +1089,13 @@ info_cb (const td_thrhandle_t *th, void *s)
const struct bound_minimal_symbol msym
= lookup_minimal_symbol_by_pc (ti.ti_pc);
- printf_filtered (" sleepfunc=%s",
- msym.minsym
- ? msym.minsym->print_name ()
- : paddress (target_gdbarch (), ti.ti_pc));
+ gdb_printf (" sleepfunc=%s",
+ msym.minsym
+ ? msym.minsym->print_name ()
+ : paddress (target_gdbarch (), ti.ti_pc));
}
- printf_filtered ("\n");
+ gdb_printf ("\n");
}
else
warning (_("info sol-thread: failed to get info for thread."));
@@ -1194,7 +1194,7 @@ _initialize_sol_thread ()
return;
die:
- fprintf_unfiltered (gdb_stderr, "\
+ gdb_printf (gdb_stderr, "\
[GDB will not be able to debug user-mode threads: %s]\n", dlerror ());
if (dlhandle)
diff --git a/gdb/sol2-tdep.c b/gdb/sol2-tdep.c
index e456c6c9a41..a7bf8836269 100644
--- a/gdb/sol2-tdep.c
+++ b/gdb/sol2-tdep.c
@@ -67,7 +67,7 @@ sol2_skip_solib_resolver (struct gdbarch *gdbarch, CORE_ADDR pc)
struct bound_minimal_symbol msym;
msym = lookup_minimal_symbol("elf_bndr", NULL, NULL);
- if (msym.minsym && BMSYMBOL_VALUE_ADDRESS (msym) == pc)
+ if (msym.minsym && msym.value_address () == pc)
return frame_unwind_caller_pc (get_current_frame ());
return 0;
diff --git a/gdb/solib-aix.c b/gdb/solib-aix.c
index 2223749b867..3a8debf2c5a 100644
--- a/gdb/solib-aix.c
+++ b/gdb/solib-aix.c
@@ -713,7 +713,7 @@ static void
show_solib_aix_debug (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("solib-aix debugging is %s.\n"), value);
+ gdb_printf (file, _("solib-aix debugging is %s.\n"), value);
}
/* The target_so_ops for AIX targets. */
diff --git a/gdb/solib-dsbt.c b/gdb/solib-dsbt.c
index 37364992cd4..0b03f944608 100644
--- a/gdb/solib-dsbt.c
+++ b/gdb/solib-dsbt.c
@@ -188,23 +188,23 @@ dsbt_print_loadmap (struct int_elf32_dsbt_loadmap *map)
int i;
if (map == NULL)
- printf_filtered ("(null)\n");
+ gdb_printf ("(null)\n");
else if (map->version != 0)
- printf_filtered (_("Unsupported map version: %d\n"), map->version);
+ gdb_printf (_("Unsupported map version: %d\n"), map->version);
else
{
- printf_filtered ("version %d\n", map->version);
+ gdb_printf ("version %d\n", map->version);
for (i = 0; i < map->nsegs; i++)
- printf_filtered ("%s:%s -> %s:%s\n",
- print_core_address (target_gdbarch (),
- map->segs[i].p_vaddr),
- print_core_address (target_gdbarch (),
- map->segs[i].p_vaddr
- + map->segs[i].p_memsz),
- print_core_address (target_gdbarch (), map->segs[i].addr),
- print_core_address (target_gdbarch (), map->segs[i].addr
- + map->segs[i].p_memsz));
+ gdb_printf ("%s:%s -> %s:%s\n",
+ print_core_address (target_gdbarch (),
+ map->segs[i].p_vaddr),
+ print_core_address (target_gdbarch (),
+ map->segs[i].p_vaddr
+ + map->segs[i].p_memsz),
+ print_core_address (target_gdbarch (), map->segs[i].addr),
+ print_core_address (target_gdbarch (), map->segs[i].addr
+ + map->segs[i].p_memsz));
}
}
@@ -459,11 +459,11 @@ lm_base (void)
if (got_sym.minsym != 0)
{
- addr = BMSYMBOL_VALUE_ADDRESS (got_sym);
+ addr = got_sym.value_address ();
if (solib_dsbt_debug)
- fprintf_unfiltered (gdb_stdlog,
- "lm_base: get addr %x by _GLOBAL_OFFSET_TABLE_.\n",
- (unsigned int) addr);
+ gdb_printf (gdb_stdlog,
+ "lm_base: get addr %x by _GLOBAL_OFFSET_TABLE_.\n",
+ (unsigned int) addr);
}
else if (gdb_bfd_scan_elf_dyntag (DT_PLTGOT,
current_program_space->exec_bfd (),
@@ -475,32 +475,32 @@ lm_base (void)
ldm = info->exec_loadmap;
addr += displacement_from_map (ldm, addr);
if (solib_dsbt_debug)
- fprintf_unfiltered (gdb_stdlog,
- "lm_base: get addr %x by DT_PLTGOT.\n",
- (unsigned int) addr);
+ gdb_printf (gdb_stdlog,
+ "lm_base: get addr %x by DT_PLTGOT.\n",
+ (unsigned int) addr);
}
else
{
if (solib_dsbt_debug)
- fprintf_unfiltered (gdb_stdlog,
- "lm_base: _GLOBAL_OFFSET_TABLE_ not found.\n");
+ gdb_printf (gdb_stdlog,
+ "lm_base: _GLOBAL_OFFSET_TABLE_ not found.\n");
return 0;
}
addr += GOT_MODULE_OFFSET;
if (solib_dsbt_debug)
- fprintf_unfiltered (gdb_stdlog,
- "lm_base: _GLOBAL_OFFSET_TABLE_ + %d = %s\n",
- GOT_MODULE_OFFSET, hex_string_custom (addr, 8));
+ gdb_printf (gdb_stdlog,
+ "lm_base: _GLOBAL_OFFSET_TABLE_ + %d = %s\n",
+ GOT_MODULE_OFFSET, hex_string_custom (addr, 8));
if (target_read_memory (addr, buf, sizeof buf) != 0)
return 0;
info->lm_base_cache = extract_unsigned_integer (buf, sizeof buf, byte_order);
if (solib_dsbt_debug)
- fprintf_unfiltered (gdb_stdlog,
- "lm_base: lm_base_cache = %s\n",
- hex_string_custom (info->lm_base_cache, 8));
+ gdb_printf (gdb_stdlog,
+ "lm_base: lm_base_cache = %s\n",
+ hex_string_custom (info->lm_base_cache, 8));
return info->lm_base_cache;
}
@@ -553,9 +553,9 @@ dsbt_current_sos (void)
int ret;
if (solib_dsbt_debug)
- fprintf_unfiltered (gdb_stdlog,
- "current_sos: reading link_map entry at %s\n",
- hex_string_custom (lm_addr, 8));
+ gdb_printf (gdb_stdlog,
+ "current_sos: reading link_map entry at %s\n",
+ hex_string_custom (lm_addr, 8));
ret = target_read_memory (lm_addr, (gdb_byte *) &lm_buf, sizeof (lm_buf));
if (ret)
@@ -614,8 +614,8 @@ dsbt_current_sos (void)
else
{
if (solib_dsbt_debug)
- fprintf_unfiltered (gdb_stdlog, "current_sos: name = %s\n",
- name_buf.get ());
+ gdb_printf (gdb_stdlog, "current_sos: name = %s\n",
+ name_buf.get ());
strncpy (sop->so_name, name_buf.get (), SO_NAME_MAX_PATH_SIZE - 1);
sop->so_name[SO_NAME_MAX_PATH_SIZE - 1] = '\0';
@@ -763,15 +763,15 @@ enable_break (void)
if (addr != 0)
{
if (solib_dsbt_debug)
- fprintf_unfiltered (gdb_stdlog,
- "enable_break: _dl_debug_state (prior to relocation) = %s\n",
- hex_string_custom (addr, 8));
+ gdb_printf (gdb_stdlog,
+ "enable_break: _dl_debug_state (prior to relocation) = %s\n",
+ hex_string_custom (addr, 8));
addr += displacement_from_map (ldm, addr);
if (solib_dsbt_debug)
- fprintf_unfiltered (gdb_stdlog,
- "enable_break: _dl_debug_state (after relocation) = %s\n",
- hex_string_custom (addr, 8));
+ gdb_printf (gdb_stdlog,
+ "enable_break: _dl_debug_state (after relocation) = %s\n",
+ hex_string_custom (addr, 8));
/* Now (finally!) create the solib breakpoint. */
create_solib_event_breakpoint (target_gdbarch (), addr);
@@ -781,8 +781,8 @@ enable_break (void)
else
{
if (solib_dsbt_debug)
- fprintf_unfiltered (gdb_stdlog,
- "enable_break: _dl_debug_state is not found\n");
+ gdb_printf (gdb_stdlog,
+ "enable_break: _dl_debug_state is not found\n");
ret = 0;
}
@@ -921,7 +921,7 @@ static void
show_dsbt_debug (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("solib-dsbt debugging is %s.\n"), value);
+ gdb_printf (file, _("solib-dsbt debugging is %s.\n"), value);
}
struct target_so_ops dsbt_so_ops;
diff --git a/gdb/solib-frv.c b/gdb/solib-frv.c
index 9618817d385..a6d6fe07088 100644
--- a/gdb/solib-frv.c
+++ b/gdb/solib-frv.c
@@ -291,26 +291,26 @@ lm_base (void)
if (got_sym.minsym == 0)
{
if (solib_frv_debug)
- fprintf_unfiltered (gdb_stdlog,
- "lm_base: _GLOBAL_OFFSET_TABLE_ not found.\n");
+ gdb_printf (gdb_stdlog,
+ "lm_base: _GLOBAL_OFFSET_TABLE_ not found.\n");
return 0;
}
- addr = BMSYMBOL_VALUE_ADDRESS (got_sym) + 8;
+ addr = got_sym.value_address () + 8;
if (solib_frv_debug)
- fprintf_unfiltered (gdb_stdlog,
- "lm_base: _GLOBAL_OFFSET_TABLE_ + 8 = %s\n",
- hex_string_custom (addr, 8));
+ gdb_printf (gdb_stdlog,
+ "lm_base: _GLOBAL_OFFSET_TABLE_ + 8 = %s\n",
+ hex_string_custom (addr, 8));
if (target_read_memory (addr, buf, sizeof buf) != 0)
return 0;
lm_base_cache = extract_unsigned_integer (buf, sizeof buf, byte_order);
if (solib_frv_debug)
- fprintf_unfiltered (gdb_stdlog,
- "lm_base: lm_base_cache = %s\n",
- hex_string_custom (lm_base_cache, 8));
+ gdb_printf (gdb_stdlog,
+ "lm_base: lm_base_cache = %s\n",
+ hex_string_custom (lm_base_cache, 8));
return lm_base_cache;
}
@@ -355,9 +355,9 @@ frv_current_sos (void)
CORE_ADDR got_addr;
if (solib_frv_debug)
- fprintf_unfiltered (gdb_stdlog,
- "current_sos: reading link_map entry at %s\n",
- hex_string_custom (lm_addr, 8));
+ gdb_printf (gdb_stdlog,
+ "current_sos: reading link_map entry at %s\n",
+ hex_string_custom (lm_addr, 8));
if (target_read_memory (lm_addr, (gdb_byte *) &lm_buf,
sizeof (lm_buf)) != 0)
@@ -406,8 +406,8 @@ frv_current_sos (void)
= target_read_string (addr, SO_NAME_MAX_PATH_SIZE - 1);
if (solib_frv_debug)
- fprintf_unfiltered (gdb_stdlog, "current_sos: name = %s\n",
- name_buf.get ());
+ gdb_printf (gdb_stdlog, "current_sos: name = %s\n",
+ name_buf.get ());
if (name_buf == nullptr)
warning (_("Can't read pathname for link map entry."));
@@ -583,9 +583,9 @@ enable_break2 (void)
}
if (solib_frv_debug)
- fprintf_unfiltered (gdb_stdlog,
- "enable_break: interp_loadmap_addr = %s\n",
- hex_string_custom (interp_loadmap_addr, 8));
+ gdb_printf (gdb_stdlog,
+ "enable_break: interp_loadmap_addr = %s\n",
+ hex_string_custom (interp_loadmap_addr, 8));
ldm = fetch_loadmap (interp_loadmap_addr);
if (ldm == NULL)
@@ -628,18 +628,18 @@ enable_break2 (void)
}
if (solib_frv_debug)
- fprintf_unfiltered (gdb_stdlog,
- "enable_break: _dl_debug_addr "
- "(prior to relocation) = %s\n",
- hex_string_custom (addr, 8));
+ gdb_printf (gdb_stdlog,
+ "enable_break: _dl_debug_addr "
+ "(prior to relocation) = %s\n",
+ hex_string_custom (addr, 8));
addr += displacement_from_map (ldm, addr);
if (solib_frv_debug)
- fprintf_unfiltered (gdb_stdlog,
- "enable_break: _dl_debug_addr "
- "(after relocation) = %s\n",
- hex_string_custom (addr, 8));
+ gdb_printf (gdb_stdlog,
+ "enable_break: _dl_debug_addr "
+ "(after relocation) = %s\n",
+ hex_string_custom (addr, 8));
/* Fetch the address of the r_debug struct. */
if (target_read_memory (addr, addr_buf, sizeof addr_buf) != 0)
@@ -651,17 +651,17 @@ enable_break2 (void)
addr = extract_unsigned_integer (addr_buf, sizeof addr_buf, byte_order);
if (solib_frv_debug)
- fprintf_unfiltered (gdb_stdlog,
- "enable_break: _dl_debug_addr[0..3] = %s\n",
- hex_string_custom (addr, 8));
+ gdb_printf (gdb_stdlog,
+ "enable_break: _dl_debug_addr[0..3] = %s\n",
+ hex_string_custom (addr, 8));
/* If it's zero, then the ldso hasn't initialized yet, and so
there are no shared libs yet loaded. */
if (addr == 0)
{
if (solib_frv_debug)
- fprintf_unfiltered (gdb_stdlog,
- "enable_break: ldso not yet initialized\n");
+ gdb_printf (gdb_stdlog,
+ "enable_break: ldso not yet initialized\n");
/* Do not warn, but mark to run again. */
return 0;
}
@@ -720,16 +720,16 @@ enable_break (void)
if (current_program_space->symfile_object_file == NULL)
{
if (solib_frv_debug)
- fprintf_unfiltered (gdb_stdlog,
- "enable_break: No symbol file found.\n");
+ gdb_printf (gdb_stdlog,
+ "enable_break: No symbol file found.\n");
return 0;
}
if (!entry_point_address_query (&entry_point))
{
if (solib_frv_debug)
- fprintf_unfiltered (gdb_stdlog,
- "enable_break: Symbol file has no entry point.\n");
+ gdb_printf (gdb_stdlog,
+ "enable_break: Symbol file has no entry point.\n");
return 0;
}
@@ -742,18 +742,18 @@ enable_break (void)
if (interp_sect == NULL)
{
if (solib_frv_debug)
- fprintf_unfiltered (gdb_stdlog,
- "enable_break: No .interp section found.\n");
+ gdb_printf (gdb_stdlog,
+ "enable_break: No .interp section found.\n");
return 0;
}
create_solib_event_breakpoint (target_gdbarch (), entry_point);
if (solib_frv_debug)
- fprintf_unfiltered (gdb_stdlog,
- "enable_break: solib event breakpoint "
- "placed at entry point: %s\n",
- hex_string_custom (entry_point, 8));
+ gdb_printf (gdb_stdlog,
+ "enable_break: solib event breakpoint "
+ "placed at entry point: %s\n",
+ hex_string_custom (entry_point, 8));
return 1;
}
@@ -900,7 +900,7 @@ main_got (void)
if (got_sym.minsym == 0)
return 0;
- return BMSYMBOL_VALUE_ADDRESS (got_sym);
+ return got_sym.value_address ();
}
/* Find the global pointer for the given function address ADDR. */
diff --git a/gdb/solib-svr4.c b/gdb/solib-svr4.c
index 69f2991f5e6..2f3e79d200f 100644
--- a/gdb/solib-svr4.c
+++ b/gdb/solib-svr4.c
@@ -292,10 +292,10 @@ lm_addr_check (const struct so_list *so, bfd *abfd)
&& (l_addr & align) == ((l_dynaddr - dynaddr) & align))
{
if (info_verbose)
- printf_unfiltered (_("Using PIC (Position Independent Code) "
- "prelink displacement %s for \"%s\".\n"),
- paddress (target_gdbarch (), l_addr),
- so->so_name);
+ gdb_printf (_("Using PIC (Position Independent Code) "
+ "prelink displacement %s for \"%s\".\n"),
+ paddress (target_gdbarch (), l_addr),
+ so->so_name);
}
else
{
@@ -713,7 +713,7 @@ elf_locate_base (void)
msymbol = lookup_minimal_symbol ("_r_debug", NULL,
current_program_space->symfile_object_file);
if (msymbol.minsym != NULL)
- return BMSYMBOL_VALUE_ADDRESS (msymbol);
+ return msymbol.value_address ();
/* DT_DEBUG entry not found. */
return 0;
@@ -1453,11 +1453,6 @@ svr4_fetch_objfile_link_map (struct objfile *objfile)
if (objfile == current_program_space->symfile_object_file)
return info->main_lm_addr;
- /* If OBJFILE is a separate debug object file, look for the
- original object file. */
- if (objfile->separate_debug_objfile_backlink != NULL)
- objfile = objfile->separate_debug_objfile_backlink;
-
/* The other link map addresses may be found by examining the list
of shared libraries. */
for (struct so_list *so : current_program_space->solibs ())
@@ -2374,9 +2369,9 @@ enable_break (struct svr4_info *info, int from_tty)
{
msymbol = lookup_minimal_symbol (*bkpt_namep, NULL, objf);
if ((msymbol.minsym != NULL)
- && (BMSYMBOL_VALUE_ADDRESS (msymbol) != 0))
+ && (msymbol.value_address () != 0))
{
- sym_addr = BMSYMBOL_VALUE_ADDRESS (msymbol);
+ sym_addr = msymbol.value_address ();
sym_addr = gdbarch_convert_from_func_ptr_addr
(target_gdbarch (), sym_addr, current_inferior ()->top_target ());
svr4_create_solib_event_breakpoints (info, target_gdbarch (),
@@ -2391,9 +2386,9 @@ enable_break (struct svr4_info *info, int from_tty)
{
msymbol = lookup_minimal_symbol (*bkpt_namep, NULL, objf);
if ((msymbol.minsym != NULL)
- && (BMSYMBOL_VALUE_ADDRESS (msymbol) != 0))
+ && (msymbol.value_address () != 0))
{
- sym_addr = BMSYMBOL_VALUE_ADDRESS (msymbol);
+ sym_addr = msymbol.value_address ();
sym_addr = gdbarch_convert_from_func_ptr_addr
(target_gdbarch (), sym_addr,
current_inferior ()->top_target ());
@@ -2834,10 +2829,10 @@ svr4_exec_displacement (CORE_ADDR *displacementp)
the executable symbols/file has been already relocated to
displacement. */
- printf_unfiltered (_("Using PIE (Position Independent Executable) "
- "displacement %s for \"%s\".\n"),
- paddress (target_gdbarch (), exec_displacement),
- bfd_get_filename (current_program_space->exec_bfd ()));
+ gdb_printf (_("Using PIE (Position Independent Executable) "
+ "displacement %s for \"%s\".\n"),
+ paddress (target_gdbarch (), exec_displacement),
+ bfd_get_filename (current_program_space->exec_bfd ()));
}
*displacementp = exec_displacement;
diff --git a/gdb/solib.c b/gdb/solib.c
index 56b86614a16..0fbf5bc988d 100644
--- a/gdb/solib.c
+++ b/gdb/solib.c
@@ -23,13 +23,14 @@
#include <fcntl.h>
#include "symtab.h"
#include "bfd.h"
+#include "build-id.h"
#include "symfile.h"
#include "objfiles.h"
#include "gdbcore.h"
#include "command.h"
#include "target.h"
#include "frame.h"
-#include "gdb_regex.h"
+#include "gdbsupport/gdb_regex.h"
#include "inferior.h"
#include "gdbsupport/environ.h"
#include "language.h"
@@ -48,6 +49,8 @@
#include "filesystem.h"
#include "gdb_bfd.h"
#include "gdbsupport/filestuff.h"
+#include "gdbsupport/scoped_fd.h"
+#include "debuginfod-support.h"
#include "source.h"
#include "cli/cli-style.h"
@@ -103,9 +106,9 @@ static void
show_solib_search_path (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("The search path for loading non-absolute "
- "shared library symbol files is %s.\n"),
- value);
+ gdb_printf (file, _("The search path for loading non-absolute "
+ "shared library symbol files is %s.\n"),
+ value);
}
/* Same as HAVE_DOS_BASED_FILE_SYSTEM, but useable as an rvalue. */
@@ -511,14 +514,63 @@ solib_bfd_open (const char *pathname)
/* Check bfd arch. */
b = gdbarch_bfd_arch_info (target_gdbarch ());
if (!b->compatible (b, bfd_get_arch_info (abfd.get ())))
- warning (_("`%s': Shared library architecture %s is not compatible "
- "with target architecture %s."), bfd_get_filename (abfd.get ()),
- bfd_get_arch_info (abfd.get ())->printable_name,
- b->printable_name);
+ error (_("`%s': Shared library architecture %s is not compatible "
+ "with target architecture %s."), bfd_get_filename (abfd.get ()),
+ bfd_get_arch_info (abfd.get ())->printable_name,
+ b->printable_name);
return abfd;
}
+/* Mapping of a core file's shared library sonames to their respective
+ build-ids. Added to the registries of core file bfds. */
+
+typedef std::unordered_map<std::string, std::string> soname_build_id_map;
+
+/* Key used to associate a soname_build_id_map to a core file bfd. */
+
+static const struct bfd_key<soname_build_id_map> cbfd_soname_build_id_data_key;
+
+/* See solib.h. */
+
+void
+set_cbfd_soname_build_id (gdb_bfd_ref_ptr abfd,
+ const char *soname,
+ const bfd_build_id *build_id)
+{
+ gdb_assert (abfd.get () != nullptr);
+ gdb_assert (soname != nullptr);
+ gdb_assert (build_id != nullptr);
+
+ soname_build_id_map *mapptr = cbfd_soname_build_id_data_key.get (abfd.get ());
+
+ if (mapptr == nullptr)
+ mapptr = cbfd_soname_build_id_data_key.emplace (abfd.get ());
+
+ (*mapptr)[soname] = build_id_to_string (build_id);
+}
+
+/* See solib.h. */
+
+gdb::unique_xmalloc_ptr<char>
+get_cbfd_soname_build_id (gdb_bfd_ref_ptr abfd, const char *soname)
+{
+ if (abfd.get () == nullptr || soname == nullptr)
+ return {};
+
+ soname_build_id_map *mapptr
+ = cbfd_soname_build_id_data_key.get (abfd.get ());
+
+ if (mapptr == nullptr)
+ return {};
+
+ auto it = mapptr->find (lbasename (soname));
+ if (it == mapptr->end ())
+ return {};
+
+ return make_unique_xstrdup (it->second.c_str ());
+}
+
/* Given a pointer to one of the shared objects in our list of mapped
objects, use the recorded name to open a bfd descriptor for the
object, build a section table, relocate all the section addresses
@@ -538,6 +590,36 @@ solib_map_sections (struct so_list *so)
gdb::unique_xmalloc_ptr<char> filename (tilde_expand (so->so_name));
gdb_bfd_ref_ptr abfd (ops->bfd_open (filename.get ()));
+ gdb::unique_xmalloc_ptr<char> build_id_hexstr
+ = get_cbfd_soname_build_id (current_program_space->cbfd, so->so_name);
+
+ /* If we already know the build-id of this solib from a core file, verify
+ it matches ABFD's build-id. If there is a mismatch or the solib wasn't
+ found, attempt to query debuginfod for the correct solib. */
+ if (build_id_hexstr.get () != nullptr)
+ {
+ bool mismatch = false;
+
+ if (abfd != nullptr && abfd->build_id != nullptr)
+ {
+ std::string build_id = build_id_to_string (abfd->build_id);
+
+ if (build_id != build_id_hexstr.get ())
+ mismatch = true;
+ }
+ if (abfd == nullptr || mismatch)
+ {
+ scoped_fd fd = debuginfod_exec_query ((const unsigned char*)
+ build_id_hexstr.get (),
+ 0, so->so_name, &filename);
+
+ if (fd.get () >= 0)
+ abfd = ops->bfd_open (filename.get ());
+ else if (mismatch)
+ warning (_("Build-id of %ps does not match core file."),
+ styled_string (file_name_style.style (), filename.get ()));
+ }
+ }
if (abfd == NULL)
return 0;
@@ -940,11 +1022,11 @@ solib_add (const char *pattern, int from_tty, int readsyms)
{
if (pattern != NULL)
{
- printf_unfiltered (_("Loading symbols for shared libraries: %s\n"),
- pattern);
+ gdb_printf (_("Loading symbols for shared libraries: %s\n"),
+ pattern);
}
else
- printf_unfiltered (_("Loading symbols for shared libraries.\n"));
+ gdb_printf (_("Loading symbols for shared libraries.\n"));
}
current_program_space->solib_add_generation++;
@@ -989,8 +1071,8 @@ solib_add (const char *pattern, int from_tty, int readsyms)
/* If no pattern was given, be quiet for shared
libraries we have already loaded. */
if (pattern && (from_tty || info_verbose))
- printf_unfiltered (_("Symbols already loaded for %s\n"),
- gdb->so_name);
+ gdb_printf (_("Symbols already loaded for %s\n"),
+ gdb->so_name);
}
else if (solib_read_symbols (gdb, add_flags))
loaded_any_symbols = true;
@@ -1001,7 +1083,7 @@ solib_add (const char *pattern, int from_tty, int readsyms)
breakpoint_re_set ();
if (from_tty && pattern && ! any_matches)
- printf_unfiltered
+ gdb_printf
("No loaded shared libraries match the pattern `%s'.\n", pattern);
if (loaded_any_symbols)
@@ -1277,7 +1359,7 @@ static void
reload_shared_libraries_1 (int from_tty)
{
if (print_symbol_loading_p (from_tty, 0, 0))
- printf_unfiltered (_("Loading symbols for shared libraries.\n"));
+ gdb_printf (_("Loading symbols for shared libraries.\n"));
for (struct so_list *so : current_program_space->solibs ())
{
@@ -1421,8 +1503,8 @@ static void
show_auto_solib_add (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Autoloading of shared library symbols is %s.\n"),
- value);
+ gdb_printf (file, _("Autoloading of shared library symbols is %s.\n"),
+ value);
}
@@ -1469,9 +1551,9 @@ gdb_bfd_lookup_symbol_from_symtab (bfd *abfd,
{
struct minimal_symbol msym {};
- SET_MSYMBOL_VALUE_ADDRESS (&msym, symaddr);
+ msym.set_value_address (symaddr);
gdbarch_elf_make_msymbol_special (gdbarch, sym, &msym);
- symaddr = MSYMBOL_VALUE_RAW_ADDRESS (&msym);
+ symaddr = msym.value_raw_address ();
}
/* BFD symbols are section relative. */
@@ -1586,6 +1668,43 @@ gdb_bfd_scan_elf_dyntag (const int desired_dyntag, bfd *abfd, CORE_ADDR *ptr,
return 0;
}
+/* See solib.h. */
+
+gdb::unique_xmalloc_ptr<char>
+gdb_bfd_read_elf_soname (const char *filename)
+{
+ gdb_bfd_ref_ptr abfd = gdb_bfd_open (filename, gnutarget);
+
+ if (abfd == nullptr)
+ return {};
+
+ /* Check that ABFD is an ET_DYN ELF file. */
+ if (!bfd_check_format (abfd.get (), bfd_object)
+ || !(bfd_get_file_flags (abfd.get ()) & DYNAMIC))
+ return {};
+
+ CORE_ADDR idx;
+ if (!gdb_bfd_scan_elf_dyntag (DT_SONAME, abfd.get (), &idx, nullptr))
+ return {};
+
+ struct bfd_section *dynstr = bfd_get_section_by_name (abfd.get (), ".dynstr");
+ int sect_size = bfd_section_size (dynstr);
+ if (dynstr == nullptr || sect_size <= idx)
+ return {};
+
+ /* Read soname from the string table. */
+ gdb::byte_vector dynstr_buf;
+ if (!gdb_bfd_get_full_section_contents (abfd.get (), dynstr, &dynstr_buf))
+ return {};
+
+ /* Ensure soname is null-terminated before returning a copy. */
+ char *soname = (char *) dynstr_buf.data () + idx;
+ if (strnlen (soname, sect_size - idx) == sect_size - idx)
+ return {};
+
+ return make_unique_xstrdup (soname);
+}
+
/* Lookup the value for a specific symbol from symbol table. Look up symbol
from ABFD. MATCH_SYM is a callback function to determine whether to pick
up a symbol. DATA is the input of this callback function. Return NULL
diff --git a/gdb/solib.h b/gdb/solib.h
index 2258b0ba6a0..f9b4d3566d7 100644
--- a/gdb/solib.h
+++ b/gdb/solib.h
@@ -1,5 +1,5 @@
/* Shared library declarations for GDB, the GNU Debugger.
-
+
Copyright (C) 1992-2022 Free Software Foundation, Inc.
This file is part of GDB.
@@ -26,6 +26,7 @@ struct target_ops;
struct target_so_ops;
struct program_space;
+#include "gdb_bfd.h"
#include "symfile-add-flags.h"
/* Called when we free all symtabs, to free the shared library information
@@ -118,6 +119,12 @@ extern CORE_ADDR gdb_bfd_lookup_symbol_from_symtab (bfd *abfd,
extern int gdb_bfd_scan_elf_dyntag (const int desired_dyntag, bfd *abfd,
CORE_ADDR *ptr, CORE_ADDR *ptr_addr);
+/* If FILENAME refers to an ELF shared object then attempt to return the
+ string referred to by its DT_SONAME tag. */
+
+extern gdb::unique_xmalloc_ptr<char> gdb_bfd_read_elf_soname
+ (const char *filename);
+
/* Enable or disable optional solib event breakpoints as appropriate. */
extern void update_solib_breakpoints (void);
@@ -126,4 +133,18 @@ extern void update_solib_breakpoints (void);
extern void handle_solib_event (void);
+/* Associate SONAME with BUILD_ID in ABFD's registry so that it can be
+ retrieved with get_cbfd_soname_build_id. */
+
+extern void set_cbfd_soname_build_id (gdb_bfd_ref_ptr abfd,
+ const char *soname,
+ const bfd_build_id *build_id);
+
+/* If SONAME had a build-id associated with it in ABFD's registry by a
+ previous call to set_cbfd_soname_build_id then return the build-id
+ as a NULL-terminated hex string. */
+
+extern gdb::unique_xmalloc_ptr<char> get_cbfd_soname_build_id
+ (gdb_bfd_ref_ptr abfd, const char *soname);
+
#endif /* SOLIB_H */
diff --git a/gdb/source-cache.c b/gdb/source-cache.c
index fc789eef8f9..2cc5b37a817 100644
--- a/gdb/source-cache.c
+++ b/gdb/source-cache.c
@@ -25,6 +25,7 @@
#include "gdbsupport/selftest.h"
#include "objfiles.h"
#include "exec.h"
+#include "cli/cli-cmds.h"
#ifdef HAVE_SOURCE_HIGHLIGHT
/* If Gnulib redirects 'open' and 'close' to its replacements
@@ -46,6 +47,46 @@
source_cache g_source_cache;
+/* When this is true we will use the GNU Source Highlight to add styling to
+ source code (assuming the library is available). This is initialized to
+ true (if appropriate) in _initialize_source_cache below. */
+
+static bool use_gnu_source_highlight;
+
+/* The "maint show gnu-source-highlight enabled" command. */
+
+static void
+show_use_gnu_source_highlight_enabled (struct ui_file *file, int from_tty,
+ struct cmd_list_element *c,
+ const char *value)
+{
+ gdb_printf (file,
+ _("Use of GNU Source Highlight library is \"%s\".\n"),
+ value);
+}
+
+/* The "maint set gnu-source-highlight enabled" command. */
+
+static void
+set_use_gnu_source_highlight_enabled (const char *ignore_args,
+ int from_tty,
+ struct cmd_list_element *c)
+{
+#ifndef HAVE_SOURCE_HIGHLIGHT
+ /* If the library is not available and the user tried to enable use of
+ the library, then disable use of the library, and give an error. */
+ if (use_gnu_source_highlight)
+ {
+ use_gnu_source_highlight = false;
+ error (_("the GNU Source Highlight library is not available"));
+ }
+#else
+ /* We (might) have just changed how we style source code, discard any
+ previously cached contents. */
+ forget_cached_source_info ();
+#endif
+}
+
/* See source-cache.h. */
std::string
@@ -66,8 +107,9 @@ source_cache::get_plain_source_lines (struct symtab *s,
perror_with_name (symtab_to_filename_for_display (s));
time_t mtime = 0;
- if (SYMTAB_OBJFILE (s) != NULL && SYMTAB_OBJFILE (s)->obfd != NULL)
- mtime = SYMTAB_OBJFILE (s)->mtime;
+ if (s->compunit ()->objfile () != NULL
+ && s->compunit ()->objfile ()->obfd != NULL)
+ mtime = s->compunit ()->objfile ()->mtime;
else if (current_program_space->exec_bfd ())
mtime = current_program_space->ebfd_mtime;
@@ -161,9 +203,8 @@ source_cache::ensure (struct symtab *s)
{
if (m_source_map[i].fullname == fullname)
{
- /* This should always hold, because we create the file
- offsets when reading the file, and never free them
- without also clearing the contents cache. */
+ /* This should always hold, because we create the file offsets
+ when reading the file. */
gdb_assert (m_offset_cache.find (fullname)
!= m_offset_cache.end ());
/* Not strictly LRU, but at least ensure that the most
@@ -191,8 +232,8 @@ source_cache::ensure (struct symtab *s)
{
#ifdef HAVE_SOURCE_HIGHLIGHT
bool already_styled = false;
- const char *lang_name = get_language_name (SYMTAB_LANGUAGE (s));
- if (lang_name != nullptr)
+ const char *lang_name = get_language_name (s->language ());
+ if (lang_name != nullptr && use_gnu_source_highlight)
{
/* The global source highlight object, or null if one was
never constructed. This is stored here rather than in
@@ -239,7 +280,11 @@ source_cache::ensure (struct symtab *s)
m_source_map.push_back (std::move (result));
if (m_source_map.size () > MAX_ENTRIES)
- m_source_map.erase (m_source_map.begin ());
+ {
+ auto iter = m_source_map.begin ();
+ m_offset_cache.erase (iter->fullname);
+ m_source_map.erase (iter);
+ }
return true;
}
@@ -323,6 +368,15 @@ source_cache::get_source_lines (struct symtab *s, int first_line,
first_line, last_line, lines);
}
+/* Implement 'maint flush source-cache' command. */
+
+static void
+source_cache_flush_command (const char *command, int from_tty)
+{
+ forget_cached_source_info ();
+ gdb_printf (_("Source cache flushed.\n"));
+}
+
#if GDB_SELF_TEST
namespace selftests
{
@@ -346,6 +400,40 @@ void _initialize_source_cache ();
void
_initialize_source_cache ()
{
+ add_cmd ("source-cache", class_maintenance, source_cache_flush_command,
+ _("Force gdb to flush its source code cache."),
+ &maintenanceflushlist);
+
+ /* All the 'maint set|show gnu-source-highlight' sub-commands. */
+ static struct cmd_list_element *maint_set_gnu_source_highlight_cmdlist;
+ static struct cmd_list_element *maint_show_gnu_source_highlight_cmdlist;
+
+ /* Adds 'maint set|show gnu-source-highlight'. */
+ add_setshow_prefix_cmd ("gnu-source-highlight", class_maintenance,
+ _("Set gnu-source-highlight specific variables."),
+ _("Show gnu-source-highlight specific variables."),
+ &maint_set_gnu_source_highlight_cmdlist,
+ &maint_show_gnu_source_highlight_cmdlist,
+ &maintenance_set_cmdlist,
+ &maintenance_show_cmdlist);
+
+ /* Adds 'maint set|show gnu-source-highlight enabled'. */
+ add_setshow_boolean_cmd ("enabled", class_maintenance,
+ &use_gnu_source_highlight, _("\
+Set whether the GNU Source Highlight library should be used."), _("\
+Show whether the GNU Source Highlight library is being used."),_("\
+When enabled, GDB will use the GNU Source Highlight library to apply\n\
+styling to source code lines that are shown."),
+ set_use_gnu_source_highlight_enabled,
+ show_use_gnu_source_highlight_enabled,
+ &maint_set_gnu_source_highlight_cmdlist,
+ &maint_show_gnu_source_highlight_cmdlist);
+
+ /* Enable use of GNU Source Highlight library, if we have it. */
+#ifdef HAVE_SOURCE_HIGHLIGHT
+ use_gnu_source_highlight = true;
+#endif
+
#if GDB_SELF_TEST
selftests::register_test ("source-cache", selftests::extract_lines_test);
#endif
diff --git a/gdb/source.c b/gdb/source.c
index 6bf4a4e881e..8691113c729 100644
--- a/gdb/source.c
+++ b/gdb/source.c
@@ -31,7 +31,7 @@
#include <sys/types.h>
#include <fcntl.h>
#include "gdbcore.h"
-#include "gdb_regex.h"
+#include "gdbsupport/gdb_regex.h"
#include "symfile.h"
#include "objfiles.h"
#include "annotate.h"
@@ -50,6 +50,7 @@
#include "observable.h"
#include "build-id.h"
#include "debuginfod-support.h"
+#include "gdbsupport/buildargv.h"
#define OPEN_MODE (O_RDONLY | O_BINARY)
#define FDOPEN_MODE FOPEN_RB
@@ -127,10 +128,10 @@ static void
show_lines_to_list (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file,
- _("Number of source lines gdb "
- "will list by default is %s.\n"),
- value);
+ gdb_printf (file,
+ _("Number of source lines gdb "
+ "will list by default is %s.\n"),
+ value);
}
/* Possible values of 'set filename-display'. */
@@ -151,7 +152,7 @@ static void
show_filename_display_string (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Filenames are displayed as \"%s\".\n"), value);
+ gdb_printf (file, _("Filenames are displayed as \"%s\".\n"), value);
}
/* When true GDB will stat and open source files as required, but when
@@ -165,7 +166,7 @@ static void
show_source_open (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Source opening is \"%s\".\n"), value);
+ gdb_printf (file, _("Source opening is \"%s\".\n"), value);
}
/* Line number of last line printed. Default for various commands.
@@ -310,7 +311,7 @@ select_source_symtab (struct symtab *s)
if (s)
{
current_source_location *loc
- = get_source_location (SYMTAB_PSPACE (s));
+ = get_source_location (s->compunit ()->objfile ()->pspace);
loc->set (s, 1);
return;
}
@@ -322,13 +323,13 @@ select_source_symtab (struct symtab *s)
/* Make the default place to list be the function `main'
if one exists. */
block_symbol bsym = lookup_symbol (main_name (), 0, VAR_DOMAIN, 0);
- if (bsym.symbol != nullptr && SYMBOL_CLASS (bsym.symbol) == LOC_BLOCK)
+ if (bsym.symbol != nullptr && bsym.symbol->aclass () == LOC_BLOCK)
{
symtab_and_line sal = find_function_start_sal (bsym.symbol, true);
if (sal.symtab == NULL)
/* We couldn't find the location of `main', possibly due to missing
line number info, fall back to line 1 in the corresponding file. */
- loc->set (symbol_symtab (bsym.symbol), 1);
+ loc->set (bsym.symbol->symtab (), 1);
else
loc->set (sal.symtab, std::max (sal.line - (lines_to_list - 1), 1));
return;
@@ -343,7 +344,7 @@ select_source_symtab (struct symtab *s)
{
for (compunit_symtab *cu : ofp->compunits ())
{
- for (symtab *symtab : compunit_filetabs (cu))
+ for (symtab *symtab : cu->filetabs ())
{
const char *name = symtab->filename;
int len = strlen (name);
@@ -402,9 +403,9 @@ set_directories_command (const char *args,
static void
show_directories_1 (ui_file *file, char *ignore, int from_tty)
{
- fputs_filtered ("Source directories searched: ", file);
- fputs_filtered (source_path.c_str (), file);
- fputs_filtered ("\n", file);
+ gdb_puts ("Source directories searched: ", file);
+ gdb_puts (source_path.c_str (), file);
+ gdb_puts ("\n", file);
}
/* Handler for "show directories" command. */
@@ -423,7 +424,7 @@ forget_cached_source_info_for_objfile (struct objfile *objfile)
{
for (compunit_symtab *cu : objfile->compunits ())
{
- for (symtab *s : compunit_filetabs (cu))
+ for (symtab *s : cu->filetabs ())
{
if (s->fullname != NULL)
{
@@ -536,15 +537,15 @@ add_path (const char *dirname, char **which_path, int parse_separators)
for (const gdb::unique_xmalloc_ptr<char> &name_up : dir_vec)
{
- char *name = name_up.get ();
+ const char *name = name_up.get ();
char *p;
struct stat st;
- gdb::unique_xmalloc_ptr<char> new_name_holder;
+ std::string new_name_holder;
/* Spaces and tabs will have been removed by buildargv().
NAME is the start of the directory.
P is the '\0' following the end. */
- p = name + strlen (name);
+ p = name_up.get () + strlen (name);
while (!(IS_DIR_SEPARATOR (*name) && p <= name + 1) /* "/" */
#ifdef HAVE_DOS_BASED_FILE_SYSTEM
@@ -588,16 +589,18 @@ add_path (const char *dirname, char **which_path, int parse_separators)
if (name[0] == '\0')
goto skip_dup;
if (name[0] == '~')
- new_name_holder.reset (tilde_expand (name));
+ new_name_holder
+ = gdb::unique_xmalloc_ptr<char[]> (tilde_expand (name)).get ();
#ifdef HAVE_DOS_BASED_FILE_SYSTEM
else if (IS_ABSOLUTE_PATH (name) && p == name + 2) /* "d:" => "d:." */
- new_name_holder.reset (concat (name, ".", (char *) NULL));
+ new_name_holder = std::string (name) + ".";
#endif
else if (!IS_ABSOLUTE_PATH (name) && name[0] != '$')
new_name_holder = gdb_abspath (name);
else
- new_name_holder.reset (savestring (name, p - name));
- name = new_name_holder.get ();
+ new_name_holder = std::string (name, p - name);
+
+ name = new_name_holder.c_str ();
/* Unless it's a variable, check existence. */
if (name[0] != '$')
@@ -615,7 +618,7 @@ add_path (const char *dirname, char **which_path, int parse_separators)
{
int save_errno = errno;
- fprintf_unfiltered (gdb_stderr, "Warning: ");
+ gdb_printf (gdb_stderr, "Warning: ");
print_sys_errmsg (name, save_errno);
}
else if ((st.st_mode & S_IFMT) != S_IFDIR)
@@ -706,30 +709,31 @@ info_source_command (const char *ignore, int from_tty)
if (!s)
{
- printf_filtered (_("No current source file.\n"));
+ gdb_printf (_("No current source file.\n"));
return;
}
- cust = SYMTAB_COMPUNIT (s);
- printf_filtered (_("Current source file is %s\n"), s->filename);
- if (SYMTAB_DIRNAME (s) != NULL)
- printf_filtered (_("Compilation directory is %s\n"), SYMTAB_DIRNAME (s));
+ cust = s->compunit ();
+ gdb_printf (_("Current source file is %s\n"), s->filename);
+ if (s->compunit ()->dirname () != NULL)
+ gdb_printf (_("Compilation directory is %s\n"), s->compunit ()->dirname ());
if (s->fullname)
- printf_filtered (_("Located in %s\n"), s->fullname);
+ gdb_printf (_("Located in %s\n"), s->fullname);
const std::vector<off_t> *offsets;
if (g_source_cache.get_line_charpos (s, &offsets))
- printf_filtered (_("Contains %d line%s.\n"), (int) offsets->size (),
- offsets->size () == 1 ? "" : "s");
-
- printf_filtered (_("Source language is %s.\n"), language_str (s->language));
- printf_filtered (_("Producer is %s.\n"),
- COMPUNIT_PRODUCER (cust) != NULL
- ? COMPUNIT_PRODUCER (cust) : _("unknown"));
- printf_filtered (_("Compiled with %s debugging format.\n"),
- COMPUNIT_DEBUGFORMAT (cust));
- printf_filtered (_("%s preprocessor macro info.\n"),
- COMPUNIT_MACRO_TABLE (cust) != NULL
- ? "Includes" : "Does not include");
+ gdb_printf (_("Contains %d line%s.\n"), (int) offsets->size (),
+ offsets->size () == 1 ? "" : "s");
+
+ gdb_printf (_("Source language is %s.\n"),
+ language_str (s->language ()));
+ gdb_printf (_("Producer is %s.\n"),
+ (cust->producer ()) != nullptr
+ ? cust->producer () : _("unknown"));
+ gdb_printf (_("Compiled with %s debugging format.\n"),
+ cust->debugformat ());
+ gdb_printf (_("%s preprocessor macro info.\n"),
+ (cust->macro_table () != nullptr
+ ? "Includes" : "Does not include"));
}
@@ -948,7 +952,8 @@ done:
else if ((opts & OPF_RETURN_REALPATH) != 0)
*filename_opened = gdb_realpath (filename);
else
- *filename_opened = gdb_abspath (filename);
+ *filename_opened
+ = make_unique_xstrdup (gdb_abspath (filename).c_str ());
}
errno = last_errno;
@@ -1178,21 +1183,21 @@ open_source_file (struct symtab *s)
gdb::unique_xmalloc_ptr<char> fullname (s->fullname);
s->fullname = NULL;
- scoped_fd fd = find_and_open_source (s->filename, SYMTAB_DIRNAME (s),
+ scoped_fd fd = find_and_open_source (s->filename, s->compunit ()->dirname (),
&fullname);
if (fd.get () < 0)
{
- if (SYMTAB_COMPUNIT (s) != nullptr)
+ if (s->compunit () != nullptr)
{
- const objfile *ofp = COMPUNIT_OBJFILE (SYMTAB_COMPUNIT (s));
+ const objfile *ofp = s->compunit ()->objfile ();
std::string srcpath;
if (IS_ABSOLUTE_PATH (s->filename))
srcpath = s->filename;
- else if (SYMTAB_DIRNAME (s) != nullptr)
+ else if (s->compunit ()->dirname () != nullptr)
{
- srcpath = SYMTAB_DIRNAME (s);
+ srcpath = s->compunit ()->dirname ();
srcpath += SLASH_STRING;
srcpath += s->filename;
}
@@ -1266,10 +1271,11 @@ symtab_to_fullname (struct symtab *s)
/* rewrite_source_path would be applied by find_and_open_source, we
should report the pathname where GDB tried to find the file. */
- if (SYMTAB_DIRNAME (s) == NULL || IS_ABSOLUTE_PATH (s->filename))
+ if (s->compunit ()->dirname () == nullptr
+ || IS_ABSOLUTE_PATH (s->filename))
fullname.reset (xstrdup (s->filename));
else
- fullname.reset (concat (SYMTAB_DIRNAME (s), SLASH_STRING,
+ fullname.reset (concat (s->compunit ()->dirname (), SLASH_STRING,
s->filename, (char *) NULL));
s->fullname = rewrite_source_path (fullname.get ()).release ();
@@ -1540,48 +1546,48 @@ info_line_command (const char *arg, int from_tty)
{
struct gdbarch *gdbarch = get_current_arch ();
- printf_filtered (_("No line number information available"));
+ gdb_printf (_("No line number information available"));
if (sal.pc != 0)
{
/* This is useful for "info line *0x7f34". If we can't tell the
user about a source line, at least let them have the symbolic
address. */
- printf_filtered (" for address ");
- wrap_here (" ");
+ gdb_printf (" for address ");
+ gdb_stdout->wrap_here (2);
print_address (gdbarch, sal.pc, gdb_stdout);
}
else
- printf_filtered (".");
- printf_filtered ("\n");
+ gdb_printf (".");
+ gdb_printf ("\n");
}
else if (sal.line > 0
&& find_line_pc_range (sal, &start_pc, &end_pc))
{
- struct gdbarch *gdbarch = SYMTAB_OBJFILE (sal.symtab)->arch ();
+ gdbarch *gdbarch = sal.symtab->compunit ()->objfile ()->arch ();
if (start_pc == end_pc)
{
- printf_filtered ("Line %d of \"%s\"",
- sal.line,
- symtab_to_filename_for_display (sal.symtab));
- wrap_here (" ");
- printf_filtered (" is at address ");
+ gdb_printf ("Line %d of \"%s\"",
+ sal.line,
+ symtab_to_filename_for_display (sal.symtab));
+ gdb_stdout->wrap_here (2);
+ gdb_printf (" is at address ");
print_address (gdbarch, start_pc, gdb_stdout);
- wrap_here (" ");
- printf_filtered (" but contains no code.\n");
+ gdb_stdout->wrap_here (2);
+ gdb_printf (" but contains no code.\n");
}
else
{
- printf_filtered ("Line %d of \"%s\"",
- sal.line,
- symtab_to_filename_for_display (sal.symtab));
- wrap_here (" ");
- printf_filtered (" starts at address ");
+ gdb_printf ("Line %d of \"%s\"",
+ sal.line,
+ symtab_to_filename_for_display (sal.symtab));
+ gdb_stdout->wrap_here (2);
+ gdb_printf (" starts at address ");
print_address (gdbarch, start_pc, gdb_stdout);
- wrap_here (" ");
- printf_filtered (" and ends at ");
+ gdb_stdout->wrap_here (2);
+ gdb_printf (" and ends at ");
print_address (gdbarch, end_pc, gdb_stdout);
- printf_filtered (".\n");
+ gdb_printf (".\n");
}
/* x/i should display this line's code. */
@@ -1599,8 +1605,8 @@ info_line_command (const char *arg, int from_tty)
/* Is there any case in which we get here, and have an address
which the user would want to see? If we have debugging symbols
and no line numbers? */
- printf_filtered (_("Line number %d is out of range for \"%s\".\n"),
- sal.line, symtab_to_filename_for_display (sal.symtab));
+ gdb_printf (_("Line number %d is out of range for \"%s\".\n"),
+ sal.line, symtab_to_filename_for_display (sal.symtab));
}
}
@@ -1697,7 +1703,7 @@ search_command_helper (const char *regex, int from_tty, bool forward)
}
}
- printf_filtered (_("Expression not found\n"));
+ gdb_printf (_("Expression not found\n"));
}
static void
@@ -1755,16 +1761,16 @@ show_substitute_path_command (const char *args, int from_tty)
/* Print the substitution rules. */
if (from != NULL)
- printf_filtered
+ gdb_printf
(_("Source path substitution rule matching `%s':\n"), from);
else
- printf_filtered (_("List of all source path substitution rules:\n"));
+ gdb_printf (_("List of all source path substitution rules:\n"));
for (substitute_path_rule &rule : substitute_path_rules)
{
if (from == NULL || substitute_path_rule_matches (&rule, from) != 0)
- printf_filtered (" `%s' -> `%s'.\n", rule.from.c_str (),
- rule.to.c_str ());
+ gdb_printf (" `%s' -> `%s'.\n", rule.from.c_str (),
+ rule.to.c_str ());
}
}
@@ -1924,9 +1930,6 @@ directory in which the source file was compiled into object code.\n\
With no argument, reset the search path to $cdir:$cwd, the default."),
&cmdlist);
- if (dbx_commands)
- add_com_alias ("use", directory_cmd, class_files, 0);
-
set_cmd_completer (directory_cmd, filename_completer);
add_setshow_optional_filename_cmd ("directories",
diff --git a/gdb/sparc-tdep.c b/gdb/sparc-tdep.c
index 90092e8f309..e540263a2fe 100644
--- a/gdb/sparc-tdep.c
+++ b/gdb/sparc-tdep.c
@@ -61,10 +61,6 @@ struct regset;
code that can handle both. The 64-bit specific code lives in
sparc64-tdep.c; don't add any here. */
-/* The SPARC Floating-Point Quad-Precision format is similar to
- big-endian IA-64 Quad-Precision format. */
-#define floatformats_sparc_quad floatformats_ia64_quad
-
/* The stack pointer is offset from the stack frame by a BIAS of 2047
(0x7ff) for 64-bit code. BIAS is likely to be defined on SPARC
hosts, so undefine it first. */
@@ -1126,7 +1122,6 @@ sparc_analyze_prologue (struct gdbarch *gdbarch, CORE_ADDR pc,
static CORE_ADDR
sparc32_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc)
{
- struct symtab_and_line sal;
CORE_ADDR func_addr;
struct sparc_frame_cache cache;
@@ -1234,7 +1229,7 @@ sparc_frame_cache (struct frame_info *this_frame, void **this_cache)
static int
sparc32_struct_return_from_sym (struct symbol *sym)
{
- struct type *type = check_typedef (SYMBOL_TYPE (sym));
+ struct type *type = check_typedef (sym->type ());
enum type_code code = type->code ();
if (code == TYPE_CODE_FUNC || code == TYPE_CODE_METHOD)
@@ -1838,7 +1833,7 @@ sparc32_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
tdep->cp0_registers_num = ARRAY_SIZE (sparc32_cp0_register_names);
set_gdbarch_long_double_bit (gdbarch, 128);
- set_gdbarch_long_double_format (gdbarch, floatformats_sparc_quad);
+ set_gdbarch_long_double_format (gdbarch, floatformats_ieee_quad);
set_gdbarch_wchar_bit (gdbarch, 16);
set_gdbarch_wchar_signed (gdbarch, 1);
diff --git a/gdb/sparc64-tdep.c b/gdb/sparc64-tdep.c
index 95d46c83253..95496d33ad4 100644
--- a/gdb/sparc64-tdep.c
+++ b/gdb/sparc64-tdep.c
@@ -327,8 +327,8 @@ adi_is_addr_mapped (CORE_ADDR vaddr, size_t cnt)
}
}
}
- else
- warning (_("unable to open /proc file '%s'"), filename);
+ else
+ warning (_("unable to open /proc file '%s'"), filename);
return false;
}
@@ -389,19 +389,19 @@ adi_print_versions (CORE_ADDR vaddr, size_t cnt, gdb_byte *tags)
while (cnt > 0)
{
QUIT;
- printf_filtered ("%s:\t",
- paddress (target_gdbarch (), vaddr * adi_stat.blksize));
+ gdb_printf ("%s:\t",
+ paddress (target_gdbarch (), vaddr * adi_stat.blksize));
for (int i = maxelts; i > 0 && cnt > 0; i--, cnt--)
{
if (tags[v_idx] == 0xff) /* no version tag */
- printf_filtered ("-");
+ gdb_printf ("-");
else
- printf_filtered ("%1X", tags[v_idx]);
+ gdb_printf ("%1X", tags[v_idx]);
if (cnt > 1)
- printf_filtered (" ");
+ gdb_printf (" ");
++v_idx;
}
- printf_filtered ("\n");
+ gdb_printf ("\n");
vaddr += maxelts;
}
}
diff --git a/gdb/split-name.c b/gdb/split-name.c
new file mode 100644
index 00000000000..35fe0fe20e7
--- /dev/null
+++ b/gdb/split-name.c
@@ -0,0 +1,81 @@
+/* Split a symbol name.
+
+ Copyright (C) 2022 Free Software Foundation, Inc.
+
+ This file is part of GDB.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#include "defs.h"
+#include "split-name.h"
+#include "cp-support.h"
+
+/* See split-name.h. */
+
+std::vector<gdb::string_view>
+split_name (const char *name, split_style style)
+{
+ std::vector<gdb::string_view> result;
+ unsigned int previous_len = 0;
+
+ switch (style)
+ {
+ case split_style::CXX:
+ for (unsigned int current_len = cp_find_first_component (name);
+ name[current_len] != '\0';
+ current_len += cp_find_first_component (name + current_len))
+ {
+ gdb_assert (name[current_len] == ':');
+ result.emplace_back (&name[previous_len],
+ current_len - previous_len);
+ /* Skip the '::'. */
+ current_len += 2;
+ previous_len = current_len;
+ }
+ break;
+
+ case split_style::UNDERSCORE:
+ /* Handle the Ada encoded (aka mangled) form here. */
+ for (const char *iter = strstr (name, "__");
+ iter != nullptr;
+ iter = strstr (iter, "__"))
+ {
+ result.emplace_back (&name[previous_len],
+ iter - &name[previous_len]);
+ iter += 2;
+ previous_len = iter - name;
+ }
+ break;
+
+ case split_style::DOT:
+ /* D and Go-style names. */
+ for (const char *iter = strchr (name, '.');
+ iter != nullptr;
+ iter = strchr (iter, '.'))
+ {
+ result.emplace_back (&name[previous_len],
+ iter - &name[previous_len]);
+ ++iter;
+ previous_len = iter - name;
+ }
+ break;
+
+ default:
+ break;
+ }
+
+ result.emplace_back (&name[previous_len]);
+ return result;
+}
+
diff --git a/gdb/split-name.h b/gdb/split-name.h
new file mode 100644
index 00000000000..c588b84f653
--- /dev/null
+++ b/gdb/split-name.h
@@ -0,0 +1,45 @@
+/* Split a symbol name.
+
+ Copyright (C) 2022 Free Software Foundation, Inc.
+
+ This file is part of GDB.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#ifndef GDB_SPLIT_NAME_H
+#define GDB_SPLIT_NAME_H
+
+#include "gdbsupport/gdb_string_view.h"
+
+/* The available styles of name splitting. */
+
+enum class split_style
+{
+ /* No splitting - C style. */
+ NONE,
+ /* C++ style, with "::" and template parameter intelligence. */
+ CXX,
+ /* Split at ".". Used by Ada, Go, D. */
+ DOT,
+ /* Split at "__". Used by Ada encoded names. */
+ UNDERSCORE,
+};
+
+/* Split NAME into components at module boundaries. STYLE indicates
+ which style of splitting to use. */
+
+extern std::vector<gdb::string_view> split_name (const char *name,
+ split_style style);
+
+#endif /* GDB_SPLIT_NAME_H */
diff --git a/gdb/stabsread.c b/gdb/stabsread.c
index f6b211ec29e..4fe2110a47f 100644
--- a/gdb/stabsread.c
+++ b/gdb/stabsread.c
@@ -26,7 +26,7 @@
#include "defs.h"
#include "bfd.h"
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
#include "symtab.h"
#include "gdbtypes.h"
#include "expression.h"
@@ -424,8 +424,8 @@ patch_block_stabs (struct pending *symbols, struct pending_stabs *stabs,
ld will remove it from the executable. There is then
a N_GSYM stab for it, but no regular (C_EXT) symbol. */
sym = new (&objfile->objfile_obstack) symbol;
- SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
- SYMBOL_ACLASS_INDEX (sym) = LOC_OPTIMIZED_OUT;
+ sym->set_domain (VAR_DOMAIN);
+ sym->set_aclass_index (LOC_OPTIMIZED_OUT);
sym->set_linkage_name
(obstack_strndup (&objfile->objfile_obstack, name, pp - name));
pp += 2;
@@ -434,12 +434,12 @@ patch_block_stabs (struct pending *symbols, struct pending_stabs *stabs,
/* I don't think the linker does this with functions,
so as far as I know this is never executed.
But it doesn't hurt to check. */
- SYMBOL_TYPE (sym) =
- lookup_function_type (read_type (&pp, objfile));
+ sym->set_type
+ (lookup_function_type (read_type (&pp, objfile)));
}
else
{
- SYMBOL_TYPE (sym) = read_type (&pp, objfile);
+ sym->set_type (read_type (&pp, objfile));
}
add_symbol_to_list (sym, get_global_symbols ());
}
@@ -448,12 +448,12 @@ patch_block_stabs (struct pending *symbols, struct pending_stabs *stabs,
pp += 2;
if (*(pp - 1) == 'F' || *(pp - 1) == 'f')
{
- SYMBOL_TYPE (sym) =
- lookup_function_type (read_type (&pp, objfile));
+ sym->set_type
+ (lookup_function_type (read_type (&pp, objfile)));
}
else
{
- SYMBOL_TYPE (sym) = read_type (&pp, objfile);
+ sym->set_type (read_type (&pp, objfile));
}
}
}
@@ -623,7 +623,7 @@ symbol_reference_defined (const char **string)
static int
stab_reg_to_regnum (struct symbol *sym, struct gdbarch *gdbarch)
{
- int regno = gdbarch_stab_reg_to_regnum (gdbarch, SYMBOL_VALUE (sym));
+ int regno = gdbarch_stab_reg_to_regnum (gdbarch, sym->value_longest ());
if (regno < 0 || regno >= gdbarch_num_cooked_regs (gdbarch))
{
@@ -693,11 +693,11 @@ define_symbol (CORE_ADDR valu, const char *string, int desc, int type,
{
/* GCC 2.x puts the line number in desc. SunOS apparently puts in the
number of bytes occupied by a type or object, which we ignore. */
- SYMBOL_LINE (sym) = desc;
+ sym->set_line (desc);
}
else
{
- SYMBOL_LINE (sym) = 0; /* unknown */
+ sym->set_line (0); /* unknown */
}
sym->set_language (get_current_subfile ()->language,
@@ -783,9 +783,9 @@ define_symbol (CORE_ADDR valu, const char *string, int desc, int type,
(where type 6 is defined by "blobs:t6=eblob1:0,blob2:1,;"). */
if (*p != '=')
{
- SYMBOL_ACLASS_INDEX (sym) = LOC_CONST;
- SYMBOL_TYPE (sym) = error_type (&p, objfile);
- SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
+ sym->set_aclass_index (LOC_CONST);
+ sym->set_type (error_type (&p, objfile));
+ sym->set_domain (VAR_DOMAIN);
add_symbol_to_list (sym, get_file_symbols ());
return sym;
}
@@ -804,9 +804,9 @@ define_symbol (CORE_ADDR valu, const char *string, int desc, int type,
target_float_from_string (dbl_valu, dbl_type, std::string (p));
- SYMBOL_TYPE (sym) = dbl_type;
- SYMBOL_VALUE_BYTES (sym) = dbl_valu;
- SYMBOL_ACLASS_INDEX (sym) = LOC_CONST_BYTES;
+ sym->set_type (dbl_type);
+ sym->set_value_bytes (dbl_valu);
+ sym->set_aclass_index (LOC_CONST_BYTES);
}
break;
case 'i':
@@ -818,17 +818,17 @@ define_symbol (CORE_ADDR valu, const char *string, int desc, int type,
types; other languages probably should have at least
unsigned as well as signed constants. */
- SYMBOL_TYPE (sym) = objfile_type (objfile)->builtin_long;
- SYMBOL_VALUE (sym) = atoi (p);
- SYMBOL_ACLASS_INDEX (sym) = LOC_CONST;
+ sym->set_type (objfile_type (objfile)->builtin_long);
+ sym->set_value_longest (atoi (p));
+ sym->set_aclass_index (LOC_CONST);
}
break;
case 'c':
{
- SYMBOL_TYPE (sym) = objfile_type (objfile)->builtin_char;
- SYMBOL_VALUE (sym) = atoi (p);
- SYMBOL_ACLASS_INDEX (sym) = LOC_CONST;
+ sym->set_type (objfile_type (objfile)->builtin_char);
+ sym->set_value_longest (atoi (p));
+ sym->set_aclass_index (LOC_CONST);
}
break;
@@ -842,9 +842,9 @@ define_symbol (CORE_ADDR valu, const char *string, int desc, int type,
if (quote != '\'' && quote != '"')
{
- SYMBOL_ACLASS_INDEX (sym) = LOC_CONST;
- SYMBOL_TYPE (sym) = error_type (&p, objfile);
- SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
+ sym->set_aclass_index (LOC_CONST);
+ sym->set_type (error_type (&p, objfile));
+ sym->set_domain (VAR_DOMAIN);
add_symbol_to_list (sym, get_file_symbols ());
return sym;
}
@@ -867,9 +867,9 @@ define_symbol (CORE_ADDR valu, const char *string, int desc, int type,
}
if (*p != quote)
{
- SYMBOL_ACLASS_INDEX (sym) = LOC_CONST;
- SYMBOL_TYPE (sym) = error_type (&p, objfile);
- SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
+ sym->set_aclass_index (LOC_CONST);
+ sym->set_type (error_type (&p, objfile));
+ sym->set_domain (VAR_DOMAIN);
add_symbol_to_list (sym, get_file_symbols ());
return sym;
}
@@ -880,16 +880,16 @@ define_symbol (CORE_ADDR valu, const char *string, int desc, int type,
= create_static_range_type (NULL,
objfile_type (objfile)->builtin_int,
0, ind);
- SYMBOL_TYPE (sym) = create_array_type (NULL,
- objfile_type (objfile)->builtin_char,
- range_type);
+ sym->set_type
+ (create_array_type (NULL, objfile_type (objfile)->builtin_char,
+ range_type));
string_value
= (gdb_byte *) obstack_alloc (&objfile->objfile_obstack, ind + 1);
memcpy (string_value, string_local, ind + 1);
p++;
- SYMBOL_VALUE_BYTES (sym) = string_value;
- SYMBOL_ACLASS_INDEX (sym) = LOC_CONST_BYTES;
+ sym->set_value_bytes (string_value);
+ sym->set_aclass_index (LOC_CONST_BYTES);
}
break;
@@ -899,12 +899,12 @@ define_symbol (CORE_ADDR valu, const char *string, int desc, int type,
e.g. "b:c=e6,0" for "const b = blob1"
(where type 6 is defined by "blobs:t6=eblob1:0,blob2:1,;"). */
{
- SYMBOL_ACLASS_INDEX (sym) = LOC_CONST;
- SYMBOL_TYPE (sym) = read_type (&p, objfile);
+ sym->set_aclass_index (LOC_CONST);
+ sym->set_type (read_type (&p, objfile));
if (*p != ',')
{
- SYMBOL_TYPE (sym) = error_type (&p, objfile);
+ sym->set_type (error_type (&p, objfile));
break;
}
++p;
@@ -915,33 +915,33 @@ define_symbol (CORE_ADDR valu, const char *string, int desc, int type,
correct. Ideally, we should be using whatever we have
available for parsing unsigned and long long values,
however. */
- SYMBOL_VALUE (sym) = atoi (p);
+ sym->set_value_longest (atoi (p));
}
break;
default:
{
- SYMBOL_ACLASS_INDEX (sym) = LOC_CONST;
- SYMBOL_TYPE (sym) = error_type (&p, objfile);
+ sym->set_aclass_index (LOC_CONST);
+ sym->set_type (error_type (&p, objfile));
}
}
- SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
+ sym->set_domain (VAR_DOMAIN);
add_symbol_to_list (sym, get_file_symbols ());
return sym;
case 'C':
/* The name of a caught exception. */
- SYMBOL_TYPE (sym) = read_type (&p, objfile);
- SYMBOL_ACLASS_INDEX (sym) = LOC_LABEL;
- SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
- SET_SYMBOL_VALUE_ADDRESS (sym, valu);
+ sym->set_type (read_type (&p, objfile));
+ sym->set_aclass_index (LOC_LABEL);
+ sym->set_domain (VAR_DOMAIN);
+ sym->set_value_address (valu);
add_symbol_to_list (sym, get_local_symbols ());
break;
case 'f':
/* A static function definition. */
- SYMBOL_TYPE (sym) = read_type (&p, objfile);
- SYMBOL_ACLASS_INDEX (sym) = LOC_BLOCK;
- SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
+ sym->set_type (read_type (&p, objfile));
+ sym->set_aclass_index (LOC_BLOCK);
+ sym->set_domain (VAR_DOMAIN);
add_symbol_to_list (sym, get_file_symbols ());
/* fall into process_function_types. */
@@ -949,8 +949,8 @@ define_symbol (CORE_ADDR valu, const char *string, int desc, int type,
/* Function result types are described as the result type in stabs.
We need to convert this to the function-returning-type-X type
in GDB. E.g. "int" is converted to "function returning int". */
- if (SYMBOL_TYPE (sym)->code () != TYPE_CODE_FUNC)
- SYMBOL_TYPE (sym) = lookup_function_type (SYMBOL_TYPE (sym));
+ if (sym->type ()->code () != TYPE_CODE_FUNC)
+ sym->set_type (lookup_function_type (sym->type ()));
/* All functions in C++ have prototypes. Stabs does not offer an
explicit way to identify prototyped or unprototyped functions,
@@ -958,7 +958,7 @@ define_symbol (CORE_ADDR valu, const char *string, int desc, int type,
than the "declared-as" type for unprototyped functions, so
we treat all functions as if they were prototyped. This is used
primarily for promotion when calling the function from GDB. */
- SYMBOL_TYPE (sym)->set_is_prototyped (true);
+ sym->type ()->set_is_prototyped (true);
/* fall into process_prototype_types. */
@@ -966,7 +966,7 @@ define_symbol (CORE_ADDR valu, const char *string, int desc, int type,
/* Sun acc puts declared types of arguments here. */
if (*p == ';')
{
- struct type *ftype = SYMBOL_TYPE (sym);
+ struct type *ftype = sym->type ();
int nsemi = 0;
int nparams = 0;
const char *p1 = p;
@@ -1011,9 +1011,9 @@ define_symbol (CORE_ADDR valu, const char *string, int desc, int type,
case 'F':
/* A global function definition. */
- SYMBOL_TYPE (sym) = read_type (&p, objfile);
- SYMBOL_ACLASS_INDEX (sym) = LOC_BLOCK;
- SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
+ sym->set_type (read_type (&p, objfile));
+ sym->set_aclass_index (LOC_BLOCK);
+ sym->set_domain (VAR_DOMAIN);
add_symbol_to_list (sym, get_global_symbols ());
goto process_function_types;
@@ -1022,9 +1022,9 @@ define_symbol (CORE_ADDR valu, const char *string, int desc, int type,
value is not correct. It is necessary to search for the
corresponding linker definition to find the value.
These definitions appear at the end of the namelist. */
- SYMBOL_TYPE (sym) = read_type (&p, objfile);
- SYMBOL_ACLASS_INDEX (sym) = LOC_STATIC;
- SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
+ sym->set_type (read_type (&p, objfile));
+ sym->set_aclass_index (LOC_STATIC);
+ sym->set_domain (VAR_DOMAIN);
/* Don't add symbol references to global_sym_chain.
Symbol references don't have valid names and wont't match up with
minimal symbols when the global_sym_chain is relocated.
@@ -1032,7 +1032,7 @@ define_symbol (CORE_ADDR valu, const char *string, int desc, int type,
if (sym->linkage_name () && sym->linkage_name ()[0] != '#')
{
i = hashname (sym->linkage_name ());
- SYMBOL_VALUE_CHAIN (sym) = global_sym_chain[i];
+ sym->set_value_chain (global_sym_chain[i]);
global_sym_chain[i] = sym;
}
add_symbol_to_list (sym, get_global_symbols ());
@@ -1043,10 +1043,10 @@ define_symbol (CORE_ADDR valu, const char *string, int desc, int type,
Dbx data never actually contains 'l'. */
case 's':
case 'l':
- SYMBOL_TYPE (sym) = read_type (&p, objfile);
- SYMBOL_ACLASS_INDEX (sym) = LOC_LOCAL;
- SYMBOL_VALUE (sym) = valu;
- SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
+ sym->set_type (read_type (&p, objfile));
+ sym->set_aclass_index (LOC_LOCAL);
+ sym->set_value_longest (valu);
+ sym->set_domain (VAR_DOMAIN);
add_symbol_to_list (sym, get_local_symbols ());
break;
@@ -1057,17 +1057,17 @@ define_symbol (CORE_ADDR valu, const char *string, int desc, int type,
Translate it into a pointer-to-function type. */
{
p++;
- SYMBOL_TYPE (sym)
- = lookup_pointer_type
- (lookup_function_type (read_type (&p, objfile)));
+ sym->set_type
+ (lookup_pointer_type
+ (lookup_function_type (read_type (&p, objfile))));
}
else
- SYMBOL_TYPE (sym) = read_type (&p, objfile);
+ sym->set_type (read_type (&p, objfile));
- SYMBOL_ACLASS_INDEX (sym) = LOC_ARG;
- SYMBOL_VALUE (sym) = valu;
- SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
- SYMBOL_IS_ARGUMENT (sym) = 1;
+ sym->set_aclass_index (LOC_ARG);
+ sym->set_value_longest (valu);
+ sym->set_domain (VAR_DOMAIN);
+ sym->set_is_argument (1);
add_symbol_to_list (sym, get_local_symbols ());
if (gdbarch_byte_order (gdbarch) != BFD_ENDIAN_BIG)
@@ -1086,12 +1086,12 @@ define_symbol (CORE_ADDR valu, const char *string, int desc, int type,
{
/* If PCC says a parameter is a short or a char, it is
really an int. */
- if (TYPE_LENGTH (SYMBOL_TYPE (sym))
+ if (TYPE_LENGTH (sym->type ())
< gdbarch_int_bit (gdbarch) / TARGET_CHAR_BIT
- && SYMBOL_TYPE (sym)->code () == TYPE_CODE_INT)
+ && sym->type ()->code () == TYPE_CODE_INT)
{
- SYMBOL_TYPE (sym) =
- (SYMBOL_TYPE (sym)->is_unsigned ()
+ sym->set_type
+ (sym->type ()->is_unsigned ()
? objfile_type (objfile)->builtin_unsigned_int
: objfile_type (objfile)->builtin_int);
}
@@ -1105,27 +1105,27 @@ define_symbol (CORE_ADDR valu, const char *string, int desc, int type,
with this extra information. FIXME, it ought to. */
if (type == N_FUN)
{
- SYMBOL_TYPE (sym) = read_type (&p, objfile);
+ sym->set_type (read_type (&p, objfile));
goto process_prototype_types;
}
/*FALLTHROUGH */
case 'R':
/* Parameter which is in a register. */
- SYMBOL_TYPE (sym) = read_type (&p, objfile);
- SYMBOL_ACLASS_INDEX (sym) = stab_register_index;
- SYMBOL_IS_ARGUMENT (sym) = 1;
- SYMBOL_VALUE (sym) = valu;
- SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
+ sym->set_type (read_type (&p, objfile));
+ sym->set_aclass_index (stab_register_index);
+ sym->set_is_argument (1);
+ sym->set_value_longest (valu);
+ sym->set_domain (VAR_DOMAIN);
add_symbol_to_list (sym, get_local_symbols ());
break;
case 'r':
/* Register variable (either global or local). */
- SYMBOL_TYPE (sym) = read_type (&p, objfile);
- SYMBOL_ACLASS_INDEX (sym) = stab_register_index;
- SYMBOL_VALUE (sym) = valu;
- SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
+ sym->set_type (read_type (&p, objfile));
+ sym->set_aclass_index (stab_register_index);
+ sym->set_value_longest (valu);
+ sym->set_domain (VAR_DOMAIN);
if (within_function)
{
/* Sun cc uses a pair of symbols, one 'p' and one 'r', with
@@ -1150,21 +1150,21 @@ define_symbol (CORE_ADDR valu, const char *string, int desc, int type,
struct pending *local_symbols = *get_local_symbols ();
if (local_symbols
&& local_symbols->nsyms > 0
- && gdbarch_stabs_argument_has_addr (gdbarch, SYMBOL_TYPE (sym)))
+ && gdbarch_stabs_argument_has_addr (gdbarch, sym->type ()))
{
struct symbol *prev_sym;
prev_sym = local_symbols->symbol[local_symbols->nsyms - 1];
- if ((SYMBOL_CLASS (prev_sym) == LOC_REF_ARG
- || SYMBOL_CLASS (prev_sym) == LOC_ARG)
+ if ((prev_sym->aclass () == LOC_REF_ARG
+ || prev_sym->aclass () == LOC_ARG)
&& strcmp (prev_sym->linkage_name (),
sym->linkage_name ()) == 0)
{
- SYMBOL_ACLASS_INDEX (prev_sym) = stab_register_index;
+ prev_sym->set_aclass_index (stab_register_index);
/* Use the type from the LOC_REGISTER; that is the type
that is actually in that register. */
- SYMBOL_TYPE (prev_sym) = SYMBOL_TYPE (sym);
- SYMBOL_VALUE (prev_sym) = SYMBOL_VALUE (sym);
+ prev_sym->set_type (sym->type ());
+ prev_sym->set_value_longest (sym->value_longest ());
sym = prev_sym;
break;
}
@@ -1177,10 +1177,10 @@ define_symbol (CORE_ADDR valu, const char *string, int desc, int type,
case 'S':
/* Static symbol at top level of file. */
- SYMBOL_TYPE (sym) = read_type (&p, objfile);
- SYMBOL_ACLASS_INDEX (sym) = LOC_STATIC;
- SET_SYMBOL_VALUE_ADDRESS (sym, valu);
- SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
+ sym->set_type (read_type (&p, objfile));
+ sym->set_aclass_index (LOC_STATIC);
+ sym->set_value_address (valu);
+ sym->set_domain (VAR_DOMAIN);
add_symbol_to_list (sym, get_file_symbols ());
break;
@@ -1202,38 +1202,38 @@ define_symbol (CORE_ADDR valu, const char *string, int desc, int type,
synonym = (sym->language () == language_ada && p[-2] != 'T');
/* Typedef */
- SYMBOL_TYPE (sym) = read_type (&p, objfile);
+ sym->set_type (read_type (&p, objfile));
/* For a nameless type, we don't want a create a symbol, thus we
did not use `sym'. Return without further processing. */
if (nameless)
return NULL;
- SYMBOL_ACLASS_INDEX (sym) = LOC_TYPEDEF;
- SYMBOL_VALUE (sym) = valu;
- SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
+ sym->set_aclass_index (LOC_TYPEDEF);
+ sym->set_value_longest (valu);
+ sym->set_domain (VAR_DOMAIN);
/* C++ vagaries: we may have a type which is derived from
a base type which did not have its name defined when the
derived class was output. We fill in the derived class's
base part member's name here in that case. */
- if (SYMBOL_TYPE (sym)->name () != NULL)
- if ((SYMBOL_TYPE (sym)->code () == TYPE_CODE_STRUCT
- || SYMBOL_TYPE (sym)->code () == TYPE_CODE_UNION)
- && TYPE_N_BASECLASSES (SYMBOL_TYPE (sym)))
+ if (sym->type ()->name () != NULL)
+ if ((sym->type ()->code () == TYPE_CODE_STRUCT
+ || sym->type ()->code () == TYPE_CODE_UNION)
+ && TYPE_N_BASECLASSES (sym->type ()))
{
int j;
- for (j = TYPE_N_BASECLASSES (SYMBOL_TYPE (sym)) - 1; j >= 0; j--)
- if (TYPE_BASECLASS_NAME (SYMBOL_TYPE (sym), j) == 0)
- SYMBOL_TYPE (sym)->field (j).set_name
- (TYPE_BASECLASS (SYMBOL_TYPE (sym), j)->name ());
+ for (j = TYPE_N_BASECLASSES (sym->type ()) - 1; j >= 0; j--)
+ if (TYPE_BASECLASS_NAME (sym->type (), j) == 0)
+ sym->type ()->field (j).set_name
+ (TYPE_BASECLASS (sym->type (), j)->name ());
}
- if (SYMBOL_TYPE (sym)->name () == NULL)
+ if (sym->type ()->name () == NULL)
{
- if ((SYMBOL_TYPE (sym)->code () == TYPE_CODE_PTR
+ if ((sym->type ()->code () == TYPE_CODE_PTR
&& strcmp (sym->linkage_name (), vtbl_ptr_name))
- || SYMBOL_TYPE (sym)->code () == TYPE_CODE_FUNC)
+ || sym->type ()->code () == TYPE_CODE_FUNC)
{
/* If we are giving a name to a type such as "pointer to
foo" or "function returning foo", we better not set
@@ -1272,10 +1272,10 @@ define_symbol (CORE_ADDR valu, const char *string, int desc, int type,
/* Pascal accepts names for pointer types. */
if (get_current_subfile ()->language == language_pascal)
- SYMBOL_TYPE (sym)->set_name (sym->linkage_name ());
+ sym->type ()->set_name (sym->linkage_name ());
}
else
- SYMBOL_TYPE (sym)->set_name (sym->linkage_name ());
+ sym->type ()->set_name (sym->linkage_name ());
}
add_symbol_to_list (sym, get_file_symbols ());
@@ -1286,11 +1286,11 @@ define_symbol (CORE_ADDR valu, const char *string, int desc, int type,
struct symbol *struct_sym = new (&objfile->objfile_obstack) symbol;
*struct_sym = *sym;
- SYMBOL_ACLASS_INDEX (struct_sym) = LOC_TYPEDEF;
- SYMBOL_VALUE (struct_sym) = valu;
- SYMBOL_DOMAIN (struct_sym) = STRUCT_DOMAIN;
- if (SYMBOL_TYPE (sym)->name () == 0)
- SYMBOL_TYPE (sym)->set_name
+ struct_sym->set_aclass_index (LOC_TYPEDEF);
+ struct_sym->set_value_longest (valu);
+ struct_sym->set_domain (STRUCT_DOMAIN);
+ if (sym->type ()->name () == 0)
+ sym->type ()->set_name
(obconcat (&objfile->objfile_obstack, sym->linkage_name (),
(char *) NULL));
add_symbol_to_list (struct_sym, get_file_symbols ());
@@ -1306,18 +1306,18 @@ define_symbol (CORE_ADDR valu, const char *string, int desc, int type,
if (synonym)
p++;
- SYMBOL_TYPE (sym) = read_type (&p, objfile);
+ sym->set_type (read_type (&p, objfile));
/* For a nameless type, we don't want a create a symbol, thus we
did not use `sym'. Return without further processing. */
if (nameless)
return NULL;
- SYMBOL_ACLASS_INDEX (sym) = LOC_TYPEDEF;
- SYMBOL_VALUE (sym) = valu;
- SYMBOL_DOMAIN (sym) = STRUCT_DOMAIN;
- if (SYMBOL_TYPE (sym)->name () == 0)
- SYMBOL_TYPE (sym)->set_name
+ sym->set_aclass_index (LOC_TYPEDEF);
+ sym->set_value_longest (valu);
+ sym->set_domain (STRUCT_DOMAIN);
+ if (sym->type ()->name () == 0)
+ sym->type ()->set_name
(obconcat (&objfile->objfile_obstack, sym->linkage_name (),
(char *) NULL));
add_symbol_to_list (sym, get_file_symbols ());
@@ -1328,11 +1328,11 @@ define_symbol (CORE_ADDR valu, const char *string, int desc, int type,
struct symbol *typedef_sym = new (&objfile->objfile_obstack) symbol;
*typedef_sym = *sym;
- SYMBOL_ACLASS_INDEX (typedef_sym) = LOC_TYPEDEF;
- SYMBOL_VALUE (typedef_sym) = valu;
- SYMBOL_DOMAIN (typedef_sym) = VAR_DOMAIN;
- if (SYMBOL_TYPE (sym)->name () == 0)
- SYMBOL_TYPE (sym)->set_name
+ typedef_sym->set_aclass_index (LOC_TYPEDEF);
+ typedef_sym->set_value_longest (valu);
+ typedef_sym->set_domain (VAR_DOMAIN);
+ if (sym->type ()->name () == 0)
+ sym->type ()->set_name
(obconcat (&objfile->objfile_obstack, sym->linkage_name (),
(char *) NULL));
add_symbol_to_list (typedef_sym, get_file_symbols ());
@@ -1341,30 +1341,30 @@ define_symbol (CORE_ADDR valu, const char *string, int desc, int type,
case 'V':
/* Static symbol of local scope. */
- SYMBOL_TYPE (sym) = read_type (&p, objfile);
- SYMBOL_ACLASS_INDEX (sym) = LOC_STATIC;
- SET_SYMBOL_VALUE_ADDRESS (sym, valu);
- SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
+ sym->set_type (read_type (&p, objfile));
+ sym->set_aclass_index (LOC_STATIC);
+ sym->set_value_address (valu);
+ sym->set_domain (VAR_DOMAIN);
add_symbol_to_list (sym, get_local_symbols ());
break;
case 'v':
/* Reference parameter */
- SYMBOL_TYPE (sym) = read_type (&p, objfile);
- SYMBOL_ACLASS_INDEX (sym) = LOC_REF_ARG;
- SYMBOL_IS_ARGUMENT (sym) = 1;
- SYMBOL_VALUE (sym) = valu;
- SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
+ sym->set_type (read_type (&p, objfile));
+ sym->set_aclass_index (LOC_REF_ARG);
+ sym->set_is_argument (1);
+ sym->set_value_longest (valu);
+ sym->set_domain (VAR_DOMAIN);
add_symbol_to_list (sym, get_local_symbols ());
break;
case 'a':
/* Reference parameter which is in a register. */
- SYMBOL_TYPE (sym) = read_type (&p, objfile);
- SYMBOL_ACLASS_INDEX (sym) = stab_regparm_index;
- SYMBOL_IS_ARGUMENT (sym) = 1;
- SYMBOL_VALUE (sym) = valu;
- SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
+ sym->set_type (read_type (&p, objfile));
+ sym->set_aclass_index (stab_regparm_index);
+ sym->set_is_argument (1);
+ sym->set_value_longest (valu);
+ sym->set_domain (VAR_DOMAIN);
add_symbol_to_list (sym, get_local_symbols ());
break;
@@ -1373,18 +1373,18 @@ define_symbol (CORE_ADDR valu, const char *string, int desc, int type,
Sun claims ("dbx and dbxtool interfaces", 2nd ed)
that Pascal uses it too, but when I tried it Pascal used
"x:3" (local symbol) instead. */
- SYMBOL_TYPE (sym) = read_type (&p, objfile);
- SYMBOL_ACLASS_INDEX (sym) = LOC_LOCAL;
- SYMBOL_VALUE (sym) = valu;
- SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
+ sym->set_type (read_type (&p, objfile));
+ sym->set_aclass_index (LOC_LOCAL);
+ sym->set_value_longest (valu);
+ sym->set_domain (VAR_DOMAIN);
add_symbol_to_list (sym, get_local_symbols ());
break;
default:
- SYMBOL_TYPE (sym) = error_type (&p, objfile);
- SYMBOL_ACLASS_INDEX (sym) = LOC_CONST;
- SYMBOL_VALUE (sym) = 0;
- SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
+ sym->set_type (error_type (&p, objfile));
+ sym->set_aclass_index (LOC_CONST);
+ sym->set_value_longest (0);
+ sym->set_domain (VAR_DOMAIN);
add_symbol_to_list (sym, get_file_symbols ());
break;
}
@@ -1393,17 +1393,17 @@ define_symbol (CORE_ADDR valu, const char *string, int desc, int type,
of by value, i.e. they will pass the address of a structure (in a
register or on the stack) instead of the structure itself. */
- if (gdbarch_stabs_argument_has_addr (gdbarch, SYMBOL_TYPE (sym))
- && SYMBOL_IS_ARGUMENT (sym))
+ if (gdbarch_stabs_argument_has_addr (gdbarch, sym->type ())
+ && sym->is_argument ())
{
/* We have to convert LOC_REGISTER to LOC_REGPARM_ADDR (for
variables passed in a register). */
- if (SYMBOL_CLASS (sym) == LOC_REGISTER)
- SYMBOL_ACLASS_INDEX (sym) = LOC_REGPARM_ADDR;
+ if (sym->aclass () == LOC_REGISTER)
+ sym->set_aclass_index (LOC_REGPARM_ADDR);
/* Likewise for converting LOC_ARG to LOC_REF_ARG (for the 7th
and subsequent arguments on SPARC, for example). */
- else if (SYMBOL_CLASS (sym) == LOC_ARG)
- SYMBOL_ACLASS_INDEX (sym) = LOC_REF_ARG;
+ else if (sym->aclass () == LOC_ARG)
+ sym->set_aclass_index (LOC_REF_ARG);
}
return sym;
@@ -1628,13 +1628,13 @@ again:
{
struct symbol *sym = ppt->symbol[i];
- if (SYMBOL_CLASS (sym) == LOC_TYPEDEF
- && SYMBOL_DOMAIN (sym) == STRUCT_DOMAIN
- && (SYMBOL_TYPE (sym)->code () == code)
+ if (sym->aclass () == LOC_TYPEDEF
+ && sym->domain () == STRUCT_DOMAIN
+ && (sym->type ()->code () == code)
&& strcmp (sym->linkage_name (), type_name) == 0)
{
obstack_free (&objfile->objfile_obstack, type_name);
- type = SYMBOL_TYPE (sym);
+ type = sym->type ();
if (typenums[0] != -1)
*dbx_lookup_type (typenums, objfile) = type;
return type;
@@ -3592,9 +3592,9 @@ read_enum_type (const char **pp, struct type *type,
sym->set_linkage_name (name);
sym->set_language (get_current_subfile ()->language,
&objfile->objfile_obstack);
- SYMBOL_ACLASS_INDEX (sym) = LOC_CONST;
- SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
- SYMBOL_VALUE (sym) = n;
+ sym->set_aclass_index (LOC_CONST);
+ sym->set_domain (VAR_DOMAIN);
+ sym->set_value_longest (n);
if (n < 0)
unsigned_enum = 0;
add_symbol_to_list (sym, symlist);
@@ -3635,9 +3635,9 @@ read_enum_type (const char **pp, struct type *type,
{
struct symbol *xsym = syms->symbol[j];
- SYMBOL_TYPE (xsym) = type;
+ xsym->set_type (type);
type->field (n).set_name (xsym->linkage_name ());
- type->field (n).set_loc_enumval (SYMBOL_VALUE (xsym));
+ type->field (n).set_loc_enumval (xsym->value_longest ());
TYPE_FIELD_BITSIZE (type, n) = 0;
}
if (syms == osyms)
@@ -4260,7 +4260,7 @@ common_block_end (struct objfile *objfile)
sym = new (&objfile->objfile_obstack) symbol;
/* Note: common_block_name already saved on objfile_obstack. */
sym->set_linkage_name (common_block_name);
- SYMBOL_ACLASS_INDEX (sym) = LOC_BLOCK;
+ sym->set_aclass_index (LOC_BLOCK);
/* Now we copy all the symbols which have been defined since the BCOMM. */
@@ -4281,13 +4281,13 @@ common_block_end (struct objfile *objfile)
for (j = common_block_i; j < common_block->nsyms; j++)
add_symbol_to_list (common_block->symbol[j], &newobj);
- SYMBOL_TYPE (sym) = (struct type *) newobj;
+ sym->set_type ((struct type *) newobj);
/* Should we be putting local_symbols back to what it was?
Does it matter? */
i = hashname (sym->linkage_name ());
- SYMBOL_VALUE_CHAIN (sym) = global_sym_chain[i];
+ sym->set_value_chain (global_sym_chain[i]);
global_sym_chain[i] = sym;
common_block_name = NULL;
}
@@ -4299,16 +4299,15 @@ common_block_end (struct objfile *objfile)
static void
fix_common_block (struct symbol *sym, CORE_ADDR valu)
{
- struct pending *next = (struct pending *) SYMBOL_TYPE (sym);
+ struct pending *next = (struct pending *) sym->type ();
for (; next; next = next->next)
{
int j;
for (j = next->nsyms - 1; j >= 0; j--)
- SET_SYMBOL_VALUE_ADDRESS (next->symbol[j],
- SYMBOL_VALUE_ADDRESS (next->symbol[j])
- + valu);
+ next->symbol[j]->set_value_address
+ (next->symbol[j]->value_address () + valu);
}
}
@@ -4466,13 +4465,13 @@ cleanup_undefined_types_1 (void)
{
struct symbol *sym = ppt->symbol[i];
- if (SYMBOL_CLASS (sym) == LOC_TYPEDEF
- && SYMBOL_DOMAIN (sym) == STRUCT_DOMAIN
- && (SYMBOL_TYPE (sym)->code () == (*type)->code ())
+ if (sym->aclass () == LOC_TYPEDEF
+ && sym->domain () == STRUCT_DOMAIN
+ && (sym->type ()->code () == (*type)->code ())
&& ((*type)->instance_flags ()
- == SYMBOL_TYPE (sym)->instance_flags ())
+ == sym->type ()->instance_flags ())
&& strcmp (sym->linkage_name (), type_name) == 0)
- replace_type (*type, SYMBOL_TYPE (sym));
+ replace_type (*type, sym->type ());
}
}
}
@@ -4539,7 +4538,7 @@ scan_file_globals (struct objfile *objfile)
QUIT;
/* Skip static symbols. */
- switch (MSYMBOL_TYPE (msymbol))
+ switch (msymbol->type ())
{
case mst_file_text:
case mst_file_data:
@@ -4564,11 +4563,11 @@ scan_file_globals (struct objfile *objfile)
assign the value we have to it. */
if (prev)
{
- SYMBOL_VALUE_CHAIN (prev) = SYMBOL_VALUE_CHAIN (sym);
+ prev->set_value_chain (sym->value_chain ());
}
else
{
- global_sym_chain[hash] = SYMBOL_VALUE_CHAIN (sym);
+ global_sym_chain[hash] = sym->value_chain ();
}
/* Check to see whether we need to fix up a common block. */
@@ -4576,24 +4575,18 @@ scan_file_globals (struct objfile *objfile)
the same symbol if there are multiple references. */
if (sym)
{
- if (SYMBOL_CLASS (sym) == LOC_BLOCK)
- {
- fix_common_block (sym,
- MSYMBOL_VALUE_ADDRESS (resolve_objfile,
- msymbol));
- }
+ if (sym->aclass () == LOC_BLOCK)
+ fix_common_block
+ (sym, msymbol->value_address (resolve_objfile));
else
- {
- SET_SYMBOL_VALUE_ADDRESS
- (sym, MSYMBOL_VALUE_ADDRESS (resolve_objfile,
- msymbol));
- }
+ sym->set_value_address
+ (msymbol->value_address (resolve_objfile));
sym->set_section_index (msymbol->section_index ());
}
if (prev)
{
- sym = SYMBOL_VALUE_CHAIN (prev);
+ sym = prev->value_chain ();
}
else
{
@@ -4603,7 +4596,7 @@ scan_file_globals (struct objfile *objfile)
else
{
prev = sym;
- sym = SYMBOL_VALUE_CHAIN (sym);
+ sym = sym->value_chain ();
}
}
}
@@ -4620,15 +4613,15 @@ scan_file_globals (struct objfile *objfile)
while (sym)
{
prev = sym;
- sym = SYMBOL_VALUE_CHAIN (sym);
+ sym = sym->value_chain ();
/* Change the symbol address from the misleading chain value
to address zero. */
- SET_SYMBOL_VALUE_ADDRESS (prev, 0);
+ prev->set_value_address (0);
/* Complain about unresolved common block symbols. */
- if (SYMBOL_CLASS (prev) == LOC_STATIC)
- SYMBOL_ACLASS_INDEX (prev) = LOC_UNRESOLVED;
+ if (prev->aclass () == LOC_STATIC)
+ prev->set_aclass_index (LOC_UNRESOLVED);
else
complaint (_("%s: common block `%s' from "
"global_sym_chain unresolved"),
@@ -4659,7 +4652,7 @@ stabsread_new_init (void)
}
/* Initialize anything that needs initializing at the same time as
- start_symtab() is called. */
+ start_compunit_symtab() is called. */
void
start_stabs (void)
@@ -4675,7 +4668,7 @@ start_stabs (void)
common_block_name = NULL;
}
-/* Call after end_symtab(). */
+/* Call after end_compunit_symtab(). */
void
end_stabs (void)
diff --git a/gdb/stack.c b/gdb/stack.c
index 8239c76de20..71d85985d18 100644
--- a/gdb/stack.c
+++ b/gdb/stack.c
@@ -55,6 +55,7 @@
#include "gdbsupport/def-vector.h"
#include "cli/cli-option.h"
#include "cli/cli-style.h"
+#include "gdbsupport/buildargv.h"
/* The possible choices of "set print frame-arguments", and the value
of this setting. */
@@ -398,8 +399,8 @@ print_frame_nameless_args (struct frame_info *frame, long start, int num,
arg_value = read_memory_integer (argsaddr + start,
sizeof (int), byte_order);
if (!first)
- fprintf_filtered (stream, ", ");
- fprintf_filtered (stream, "%ld", arg_value);
+ gdb_printf (stream, ", ");
+ gdb_printf (stream, "%ld", arg_value);
first = 0;
start += sizeof (int);
}
@@ -427,14 +428,14 @@ print_frame_arg (const frame_print_options &fp_opts,
annotate_arg_emitter arg_emitter;
ui_out_emit_tuple tuple_emitter (uiout, NULL);
- fputs_filtered (arg->sym->print_name (), &stb);
+ gdb_puts (arg->sym->print_name (), &stb);
if (arg->entry_kind == print_entry_values_compact)
{
/* It is OK to provide invalid MI-like stream as with
PRINT_ENTRY_VALUE_COMPACT we never use MI. */
stb.puts ("=");
- fputs_filtered (arg->sym->print_name (), &stb);
+ gdb_puts (arg->sym->print_name (), &stb);
}
if (arg->entry_kind == print_entry_values_only
|| arg->entry_kind == print_entry_values_compact)
@@ -673,7 +674,7 @@ read_frame_arg (const frame_print_options &fp_opts,
|| (fp_opts.print_entry_values == print_entry_values_preferred
&& (!val || value_optimized_out (val))))
{
- entryval = allocate_optimized_out_value (SYMBOL_TYPE (sym));
+ entryval = allocate_optimized_out_value (sym->type ());
entryval_error = NULL;
}
}
@@ -749,7 +750,7 @@ print_frame_args (const frame_print_options &fp_opts,
if (func)
{
- const struct block *b = SYMBOL_BLOCK_VALUE (func);
+ const struct block *b = func->value_block ();
struct block_iterator iter;
struct symbol *sym;
@@ -762,7 +763,7 @@ print_frame_args (const frame_print_options &fp_opts,
/* Keep track of the highest stack argument offset seen, and
skip over any kinds of symbols we don't care about. */
- if (!SYMBOL_IS_ARGUMENT (sym))
+ if (!sym->is_argument ())
continue;
if (!print_names)
@@ -772,13 +773,13 @@ print_frame_args (const frame_print_options &fp_opts,
break;
}
- switch (SYMBOL_CLASS (sym))
+ switch (sym->aclass ())
{
case LOC_ARG:
case LOC_REF_ARG:
{
- long current_offset = SYMBOL_VALUE (sym);
- int arg_size = TYPE_LENGTH (SYMBOL_TYPE (sym));
+ long current_offset = sym->value_longest ();
+ int arg_size = TYPE_LENGTH (sym->type ());
/* Compute address of next argument by adding the size of
this argument and rounding to an int boundary. */
@@ -827,8 +828,8 @@ print_frame_args (const frame_print_options &fp_opts,
nsym = lookup_symbol_search_name (sym->search_name (),
b, VAR_DOMAIN).symbol;
gdb_assert (nsym != NULL);
- if (SYMBOL_CLASS (nsym) == LOC_REGISTER
- && !SYMBOL_IS_ARGUMENT (nsym))
+ if (nsym->aclass () == LOC_REGISTER
+ && !nsym->is_argument ())
{
/* There is a LOC_ARG/LOC_REGISTER pair. This means
that it was passed on the stack and loaded into a
@@ -874,7 +875,7 @@ print_frame_args (const frame_print_options &fp_opts,
/* Print the current arg. */
if (!first)
uiout->text (", ");
- uiout->wrap_hint (" ");
+ uiout->wrap_hint (4);
if (!print_args)
{
@@ -894,7 +895,7 @@ print_frame_args (const frame_print_options &fp_opts,
if (arg.entry_kind != print_entry_values_only)
{
uiout->text (", ");
- uiout->wrap_hint (" ");
+ uiout->wrap_hint (4);
}
print_frame_arg (fp_opts, &entryarg);
@@ -948,10 +949,10 @@ show_disassemble_next_line (struct ui_file *file, int from_tty,
struct cmd_list_element *c,
const char *value)
{
- fprintf_filtered (file,
- _("Debugger's willingness to use "
- "disassemble-next-line is %s.\n"),
- value);
+ gdb_printf (file,
+ _("Debugger's willingness to use "
+ "disassemble-next-line is %s.\n"),
+ value);
}
/* Use TRY_CATCH to catch the exception from the gdb_disassembly
@@ -1365,9 +1366,9 @@ print_frame (const frame_print_options &fp_opts,
annotate_frame_function_name ();
string_file stb;
- fputs_filtered (funname ? funname.get () : "??", &stb);
+ gdb_puts (funname ? funname.get () : "??", &stb);
uiout->field_stream ("func", stb, function_name_style.style ());
- uiout->wrap_hint (" ");
+ uiout->wrap_hint (3);
annotate_frame_args ();
uiout->text (" (");
@@ -1405,7 +1406,7 @@ print_frame (const frame_print_options &fp_opts,
filename_display = symtab_to_filename_for_display (sal.symtab);
annotate_frame_source_begin ();
- uiout->wrap_hint (" ");
+ uiout->wrap_hint (3);
uiout->text (" at ");
annotate_frame_source_file ();
uiout->field_string ("file", filename_display,
@@ -1432,7 +1433,7 @@ print_frame (const frame_print_options &fp_opts,
if (lib)
{
annotate_frame_where ();
- uiout->wrap_hint (" ");
+ uiout->wrap_hint (2);
uiout->text (" from ");
uiout->field_string ("from", lib, file_name_style.style ());
}
@@ -1541,37 +1542,37 @@ info_frame_command_core (struct frame_info *fi, bool selected_frame_p)
if (selected_frame_p && frame_relative_level (fi) >= 0)
{
- printf_filtered (_("Stack level %d, frame at "),
- frame_relative_level (fi));
+ gdb_printf (_("Stack level %d, frame at "),
+ frame_relative_level (fi));
}
else
{
- printf_filtered (_("Stack frame at "));
+ gdb_printf (_("Stack frame at "));
}
- fputs_filtered (paddress (gdbarch, get_frame_base (fi)), gdb_stdout);
- printf_filtered (":\n");
- printf_filtered (" %s = ", pc_regname);
+ gdb_puts (paddress (gdbarch, get_frame_base (fi)));
+ gdb_printf (":\n");
+ gdb_printf (" %s = ", pc_regname);
if (frame_pc_p)
- fputs_filtered (paddress (gdbarch, get_frame_pc (fi)), gdb_stdout);
+ gdb_puts (paddress (gdbarch, get_frame_pc (fi)));
else
fputs_styled ("<unavailable>", metadata_style.style (), gdb_stdout);
- wrap_here (" ");
+ gdb_stdout->wrap_here (3);
if (funname)
{
- printf_filtered (" in ");
- fputs_filtered (funname, gdb_stdout);
+ gdb_printf (" in ");
+ gdb_puts (funname);
}
- wrap_here (" ");
+ gdb_stdout->wrap_here (3);
if (sal.symtab)
- printf_filtered
+ gdb_printf
(" (%ps:%d)",
styled_string (file_name_style.style (),
symtab_to_filename_for_display (sal.symtab)),
sal.line);
- puts_filtered ("; ");
- wrap_here (" ");
- printf_filtered ("saved %s = ", pc_regname);
+ gdb_puts ("; ");
+ gdb_stdout->wrap_here (4);
+ gdb_printf ("saved %s = ", pc_regname);
if (!frame_id_p (frame_unwind_caller_id (fi)))
val_print_not_saved (gdb_stdout);
@@ -1602,8 +1603,8 @@ info_frame_command_core (struct frame_info *fi, bool selected_frame_p)
}
if (caller_pc_p)
- fputs_filtered (paddress (gdbarch, caller_pc), gdb_stdout);
- printf_filtered ("\n");
+ gdb_puts (paddress (gdbarch, caller_pc));
+ gdb_printf ("\n");
if (calling_frame_info == NULL)
{
@@ -1611,35 +1612,33 @@ info_frame_command_core (struct frame_info *fi, bool selected_frame_p)
reason = get_frame_unwind_stop_reason (fi);
if (reason != UNWIND_NO_REASON)
- printf_filtered (_(" Outermost frame: %s\n"),
- frame_stop_reason_string (fi));
+ gdb_printf (_(" Outermost frame: %s\n"),
+ frame_stop_reason_string (fi));
}
else if (get_frame_type (fi) == TAILCALL_FRAME)
- puts_filtered (" tail call frame");
+ gdb_puts (" tail call frame");
else if (get_frame_type (fi) == INLINE_FRAME)
- printf_filtered (" inlined into frame %d",
- frame_relative_level (get_prev_frame (fi)));
+ gdb_printf (" inlined into frame %d",
+ frame_relative_level (get_prev_frame (fi)));
else
{
- printf_filtered (" called by frame at ");
- fputs_filtered (paddress (gdbarch, get_frame_base (calling_frame_info)),
- gdb_stdout);
+ gdb_printf (" called by frame at ");
+ gdb_puts (paddress (gdbarch, get_frame_base (calling_frame_info)));
}
if (get_next_frame (fi) && calling_frame_info)
- puts_filtered (",");
- wrap_here (" ");
+ gdb_puts (",");
+ gdb_stdout->wrap_here (3);
if (get_next_frame (fi))
{
- printf_filtered (" caller of frame at ");
- fputs_filtered (paddress (gdbarch, get_frame_base (get_next_frame (fi))),
- gdb_stdout);
+ gdb_printf (" caller of frame at ");
+ gdb_puts (paddress (gdbarch, get_frame_base (get_next_frame (fi))));
}
if (get_next_frame (fi) || calling_frame_info)
- puts_filtered ("\n");
+ gdb_puts ("\n");
if (s)
- printf_filtered (" source language %s.\n",
- language_str (s->language));
+ gdb_printf (" source language %s.\n",
+ language_str (s->language ()));
{
/* Address of the argument list for this frame, or 0. */
@@ -1648,32 +1647,32 @@ info_frame_command_core (struct frame_info *fi, bool selected_frame_p)
int numargs;
if (arg_list == 0)
- printf_filtered (" Arglist at unknown address.\n");
+ gdb_printf (" Arglist at unknown address.\n");
else
{
- printf_filtered (" Arglist at ");
- fputs_filtered (paddress (gdbarch, arg_list), gdb_stdout);
- printf_filtered (",");
+ gdb_printf (" Arglist at ");
+ gdb_puts (paddress (gdbarch, arg_list));
+ gdb_printf (",");
if (!gdbarch_frame_num_args_p (gdbarch))
{
numargs = -1;
- puts_filtered (" args: ");
+ gdb_puts (" args: ");
}
else
{
numargs = gdbarch_frame_num_args (gdbarch, fi);
gdb_assert (numargs >= 0);
if (numargs == 0)
- puts_filtered (" no args.");
+ gdb_puts (" no args.");
else if (numargs == 1)
- puts_filtered (" 1 arg: ");
+ gdb_puts (" 1 arg: ");
else
- printf_filtered (" %d args: ", numargs);
+ gdb_printf (" %d args: ", numargs);
}
print_frame_args (user_frame_print_options,
func, fi, numargs, gdb_stdout);
- puts_filtered ("\n");
+ gdb_puts ("\n");
}
}
{
@@ -1681,12 +1680,12 @@ info_frame_command_core (struct frame_info *fi, bool selected_frame_p)
CORE_ADDR arg_list = get_frame_locals_address (fi);
if (arg_list == 0)
- printf_filtered (" Locals at unknown address,");
+ gdb_printf (" Locals at unknown address,");
else
{
- printf_filtered (" Locals at ");
- fputs_filtered (paddress (gdbarch, arg_list), gdb_stdout);
- printf_filtered (",");
+ gdb_printf (" Locals at ");
+ gdb_puts (paddress (gdbarch, arg_list));
+ gdb_printf (",");
}
}
@@ -1719,22 +1718,21 @@ info_frame_command_core (struct frame_info *fi, bool selected_frame_p)
sp = extract_unsigned_integer
(value_contents_all (value).data (), sp_size, byte_order);
- printf_filtered (" Previous frame's sp is ");
- fputs_filtered (paddress (gdbarch, sp), gdb_stdout);
- printf_filtered ("\n");
+ gdb_printf (" Previous frame's sp is ");
+ gdb_puts (paddress (gdbarch, sp));
+ gdb_printf ("\n");
}
else if (VALUE_LVAL (value) == lval_memory)
{
- printf_filtered (" Previous frame's sp at ");
- fputs_filtered (paddress (gdbarch, value_address (value)),
- gdb_stdout);
- printf_filtered ("\n");
+ gdb_printf (" Previous frame's sp at ");
+ gdb_puts (paddress (gdbarch, value_address (value)));
+ gdb_printf ("\n");
}
else if (VALUE_LVAL (value) == lval_register)
{
- printf_filtered (" Previous frame's sp in %s\n",
- gdbarch_register_name (gdbarch,
- VALUE_REGNUM (value)));
+ gdb_printf (" Previous frame's sp in %s\n",
+ gdbarch_register_name (gdbarch,
+ VALUE_REGNUM (value)));
}
release_value (value);
@@ -1764,18 +1762,18 @@ info_frame_command_core (struct frame_info *fi, bool selected_frame_p)
if (!optimized && !unavailable && lval == lval_memory)
{
if (count == 0)
- puts_filtered (" Saved registers:\n ");
+ gdb_puts (" Saved registers:\n ");
else
- puts_filtered (",");
- wrap_here (" ");
- printf_filtered (" %s at ",
- gdbarch_register_name (gdbarch, i));
- fputs_filtered (paddress (gdbarch, addr), gdb_stdout);
+ gdb_puts (",");
+ gdb_stdout->wrap_here (1);
+ gdb_printf (" %s at ",
+ gdbarch_register_name (gdbarch, i));
+ gdb_puts (paddress (gdbarch, addr));
count++;
}
}
if (count || need_nl)
- puts_filtered ("\n");
+ gdb_puts ("\n");
}
}
@@ -1843,14 +1841,6 @@ select_frame_command_core (struct frame_info *fi, bool ignored)
gdb::observers::user_selected_context_changed.notify (USER_SELECTED_FRAME);
}
-/* See stack.h. */
-
-void
-select_frame_for_mi (struct frame_info *fi)
-{
- select_frame_command_core (fi, false /* Ignored. */);
-}
-
/* The core of all the "frame" sub-commands. Select frame FI, and if this
means we change frame send out a change notification (otherwise, just
reprint the current frame summary). */
@@ -2099,7 +2089,7 @@ backtrace_command_1 (const frame_print_options &fp_opts,
/* If we've stopped before the end, mention that. */
if (fi && from_tty)
- printf_filtered (_("(More stack frames follow...)\n"));
+ gdb_printf (_("(More stack frames follow...)\n"));
/* If we've run out of frames, and the reason appears to be an error
condition, print it. */
@@ -2109,8 +2099,8 @@ backtrace_command_1 (const frame_print_options &fp_opts,
reason = get_frame_unwind_stop_reason (trailing);
if (reason >= UNWIND_FIRST_ERROR)
- printf_filtered (_("Backtrace stopped: %s\n"),
- frame_stop_reason_string (trailing));
+ gdb_printf (_("Backtrace stopped: %s\n"),
+ frame_stop_reason_string (trailing));
}
}
}
@@ -2237,20 +2227,18 @@ backtrace_command_completer (struct cmd_list_element *ignore,
expression_completer (ignore, tracker, text, word);
}
-/* Iterate over the local variables of a block B, calling CB with
- CB_DATA. */
+/* Iterate over the local variables of a block B, calling CB. */
static void
iterate_over_block_locals (const struct block *b,
- iterate_over_block_arg_local_vars_cb cb,
- void *cb_data)
+ iterate_over_block_arg_local_vars_cb cb)
{
struct block_iterator iter;
struct symbol *sym;
ALL_BLOCK_SYMBOLS (b, iter, sym)
{
- switch (SYMBOL_CLASS (sym))
+ switch (sym->aclass ())
{
case LOC_CONST:
case LOC_LOCAL:
@@ -2258,11 +2246,11 @@ iterate_over_block_locals (const struct block *b,
case LOC_STATIC:
case LOC_COMPUTED:
case LOC_OPTIMIZED_OUT:
- if (SYMBOL_IS_ARGUMENT (sym))
+ if (sym->is_argument ())
break;
- if (SYMBOL_DOMAIN (sym) == COMMON_BLOCK_DOMAIN)
+ if (sym->domain () == COMMON_BLOCK_DOMAIN)
break;
- (*cb) (sym->print_name (), sym, cb_data);
+ cb (sym->print_name (), sym);
break;
default:
@@ -2277,18 +2265,17 @@ iterate_over_block_locals (const struct block *b,
void
iterate_over_block_local_vars (const struct block *block,
- iterate_over_block_arg_local_vars_cb cb,
- void *cb_data)
+ iterate_over_block_arg_local_vars_cb cb)
{
while (block)
{
- iterate_over_block_locals (block, cb, cb_data);
+ iterate_over_block_locals (block, cb);
/* After handling the function's top-level block, stop. Don't
continue to its superblock, the block of per-file
symbols. */
- if (BLOCK_FUNCTION (block))
+ if (block->function ())
break;
- block = BLOCK_SUPERBLOCK (block);
+ block = block->superblock ();
}
}
@@ -2303,41 +2290,40 @@ struct print_variable_and_value_data
int num_tabs;
struct ui_file *stream;
int values_printed;
+
+ void operator() (const char *print_name, struct symbol *sym);
};
/* The callback for the locals and args iterators. */
-static void
-do_print_variable_and_value (const char *print_name,
- struct symbol *sym,
- void *cb_data)
+void
+print_variable_and_value_data::operator() (const char *print_name,
+ struct symbol *sym)
{
- struct print_variable_and_value_data *p
- = (struct print_variable_and_value_data *) cb_data;
struct frame_info *frame;
- if (p->preg.has_value ()
- && p->preg->exec (sym->natural_name (), 0, NULL, 0) != 0)
+ if (preg.has_value ()
+ && preg->exec (sym->natural_name (), 0, NULL, 0) != 0)
return;
- if (p->treg.has_value ()
- && !treg_matches_sym_type_name (*p->treg, sym))
+ if (treg.has_value ()
+ && !treg_matches_sym_type_name (*treg, sym))
return;
if (language_def (sym->language ())->symbol_printing_suppressed (sym))
return;
- frame = frame_find_by_id (p->frame_id);
+ frame = frame_find_by_id (frame_id);
if (frame == NULL)
{
warning (_("Unable to restore previously selected frame."));
return;
}
- print_variable_and_value (print_name, sym, frame, p->stream, p->num_tabs);
+ print_variable_and_value (print_name, sym, frame, stream, num_tabs);
/* print_variable_and_value invalidates FRAME. */
frame = NULL;
- p->values_printed = 1;
+ values_printed = 1;
}
/* Prepares the regular expression REG from REGEXP.
@@ -2380,8 +2366,8 @@ print_frame_local_vars (struct frame_info *frame,
if (!get_frame_pc_if_available (frame, &pc))
{
if (!quiet)
- fprintf_filtered (stream,
- _("PC unavailable, cannot determine locals.\n"));
+ gdb_printf (stream,
+ _("PC unavailable, cannot determine locals.\n"));
return;
}
@@ -2389,7 +2375,7 @@ print_frame_local_vars (struct frame_info *frame,
if (block == 0)
{
if (!quiet)
- fprintf_filtered (stream, "No symbol table info available.\n");
+ gdb_printf (stream, "No symbol table info available.\n");
return;
}
@@ -2406,16 +2392,14 @@ print_frame_local_vars (struct frame_info *frame,
scoped_restore_selected_frame restore_selected_frame;
select_frame (frame);
- iterate_over_block_local_vars (block,
- do_print_variable_and_value,
- &cb_data);
+ iterate_over_block_local_vars (block, cb_data);
if (!cb_data.values_printed && !quiet)
{
if (regexp == NULL && t_regexp == NULL)
- fprintf_filtered (stream, _("No locals.\n"));
+ gdb_printf (stream, _("No locals.\n"));
else
- fprintf_filtered (stream, _("No matching locals.\n"));
+ gdb_printf (stream, _("No matching locals.\n"));
}
}
@@ -2496,8 +2480,7 @@ info_locals_command (const char *args, int from_tty)
void
iterate_over_block_arg_vars (const struct block *b,
- iterate_over_block_arg_local_vars_cb cb,
- void *cb_data)
+ iterate_over_block_arg_local_vars_cb cb)
{
struct block_iterator iter;
struct symbol *sym, *sym2;
@@ -2505,7 +2488,7 @@ iterate_over_block_arg_vars (const struct block *b,
ALL_BLOCK_SYMBOLS (b, iter, sym)
{
/* Don't worry about things which aren't arguments. */
- if (SYMBOL_IS_ARGUMENT (sym))
+ if (sym->is_argument ())
{
/* We have to look up the symbol because arguments can have
two entries (one a parameter, one a local) and the one we
@@ -2520,7 +2503,7 @@ iterate_over_block_arg_vars (const struct block *b,
sym2 = lookup_symbol_search_name (sym->search_name (),
b, VAR_DOMAIN).symbol;
- (*cb) (sym->print_name (), sym2, cb_data);
+ cb (sym->print_name (), sym2);
}
}
}
@@ -2551,8 +2534,8 @@ print_frame_arg_vars (struct frame_info *frame,
if (!get_frame_pc_if_available (frame, &pc))
{
if (!quiet)
- fprintf_filtered (stream,
- _("PC unavailable, cannot determine args.\n"));
+ gdb_printf (stream,
+ _("PC unavailable, cannot determine args.\n"));
return;
}
@@ -2560,7 +2543,7 @@ print_frame_arg_vars (struct frame_info *frame,
if (func == NULL)
{
if (!quiet)
- fprintf_filtered (stream, _("No symbol table info available.\n"));
+ gdb_printf (stream, _("No symbol table info available.\n"));
return;
}
@@ -2571,8 +2554,7 @@ print_frame_arg_vars (struct frame_info *frame,
cb_data.stream = stream;
cb_data.values_printed = 0;
- iterate_over_block_arg_vars (SYMBOL_BLOCK_VALUE (func),
- do_print_variable_and_value, &cb_data);
+ iterate_over_block_arg_vars (func->value_block (), cb_data);
/* do_print_variable_and_value invalidates FRAME. */
frame = NULL;
@@ -2580,9 +2562,9 @@ print_frame_arg_vars (struct frame_info *frame,
if (!cb_data.values_printed && !quiet)
{
if (regexp == NULL && t_regexp == NULL)
- fprintf_filtered (stream, _("No arguments.\n"));
+ gdb_printf (stream, _("No arguments.\n"));
else
- fprintf_filtered (stream, _("No matching arguments.\n"));
+ gdb_printf (stream, _("No matching arguments.\n"));
}
}
@@ -2739,7 +2721,7 @@ return_command (const char *retval_exp, int from_tty)
struct symbol *thisfun;
struct value *return_value = NULL;
struct value *function = NULL;
- const char *query_prefix = "";
+ std::string query_prefix;
thisframe = get_selected_frame ("No selected frame.");
thisfun = get_frame_function (thisframe);
@@ -2764,7 +2746,7 @@ return_command (const char *retval_exp, int from_tty)
/* Cast return value to the return type of the function. Should
the cast fail, this call throws an error. */
if (thisfun != NULL)
- return_type = TYPE_TARGET_TYPE (SYMBOL_TYPE (thisfun));
+ return_type = TYPE_TARGET_TYPE (thisfun->type ());
if (return_type == NULL)
{
if (retval_expr->first_opcode () != UNOP_CAST
@@ -2795,6 +2777,17 @@ return_command (const char *retval_exp, int from_tty)
return_value = NULL;
else if (thisfun != NULL)
{
+ if (is_nocall_function (check_typedef (value_type (function))))
+ {
+ query_prefix =
+ string_printf ("Function '%s' does not follow the target "
+ "calling convention.\n"
+ "If you continue, setting the return value "
+ "will probably lead to unpredictable "
+ "behaviors.\n",
+ thisfun->print_name ());
+ }
+
rv_conv = struct_return_convention (gdbarch, function, return_type);
if (rv_conv == RETURN_VALUE_STRUCT_CONVENTION
|| rv_conv == RETURN_VALUE_ABI_RETURNS_ADDRESS)
@@ -2817,12 +2810,13 @@ return_command (const char *retval_exp, int from_tty)
if (thisfun == NULL)
confirmed = query (_("%sMake selected stack frame return now? "),
- query_prefix);
+ query_prefix.c_str ());
else
{
- if (TYPE_NO_RETURN (thisfun->type))
+ if (TYPE_NO_RETURN (thisfun->type ()))
warning (_("Function does not return normally to caller."));
- confirmed = query (_("%sMake %s return now? "), query_prefix,
+ confirmed = query (_("%sMake %s return now? "),
+ query_prefix.c_str (),
thisfun->print_name ());
}
if (!confirmed)
@@ -2909,24 +2903,6 @@ find_frame_for_function (const char *function_name)
return frame;
}
-/* Implements the dbx 'func' command. */
-
-static void
-func_command (const char *arg, int from_tty)
-{
- if (arg == NULL)
- return;
-
- struct frame_info *frame = find_frame_for_function (arg);
- if (frame == NULL)
- error (_("'%s' not within current stack frame."), arg);
- if (frame != get_selected_frame (NULL))
- {
- select_frame (frame);
- print_stack_frame (get_selected_frame (NULL), 1, SRC_AND_LOC, 1);
- }
-}
-
/* The qcs command line flags for the "frame apply" commands. Keep
this in sync with the "thread apply" commands. */
@@ -3037,7 +3013,7 @@ frame_apply_command_count (const char *which_command,
{
if (!flags.quiet)
print_stack_frame (fi, 1, LOCATION, 0);
- printf_filtered ("%s", cmd_result.c_str ());
+ gdb_printf ("%s", cmd_result.c_str ());
}
}
catch (const gdb_exception_error &ex)
@@ -3049,7 +3025,7 @@ frame_apply_command_count (const char *which_command,
if (!flags.quiet)
print_stack_frame (fi, 1, LOCATION, 0);
if (flags.cont)
- printf_filtered ("%s\n", ex.what ());
+ gdb_printf ("%s\n", ex.what ());
else
throw;
}
@@ -3566,11 +3542,6 @@ Prints the argument variables of the current stack frame.\n"),
false));
set_cmd_completer_handle_brkchars (cmd, info_print_command_completer);
- if (dbx_commands)
- add_com ("func", class_stack, func_command, _("\
-Select the stack frame that contains NAME.\n\
-Usage: func NAME"));
-
/* Install "set print raw frame-arguments", a deprecated spelling of
"set print raw-frame-arguments". */
set_show_commands set_show_frame_args
diff --git a/gdb/stack.h b/gdb/stack.h
index 97cf30cb677..f78aedf1c85 100644
--- a/gdb/stack.h
+++ b/gdb/stack.h
@@ -20,27 +20,18 @@
#ifndef STACK_H
#define STACK_H
-/* Access method used by the MI -stack-select-frame command to switch to
- frame FI. This differs from SELECT_FRAME in that the observers for a
- user selected context change will be triggered. */
-
-void select_frame_for_mi (struct frame_info *fi);
-
gdb::unique_xmalloc_ptr<char> find_frame_funname (struct frame_info *frame,
enum language *funlang,
struct symbol **funcp);
-typedef void (*iterate_over_block_arg_local_vars_cb) (const char *print_name,
- struct symbol *sym,
- void *cb_data);
+typedef gdb::function_view<void (const char *print_name, struct symbol *sym)>
+ iterate_over_block_arg_local_vars_cb;
void iterate_over_block_arg_vars (const struct block *block,
- iterate_over_block_arg_local_vars_cb cb,
- void *cb_data);
+ iterate_over_block_arg_local_vars_cb cb);
void iterate_over_block_local_vars (const struct block *block,
- iterate_over_block_arg_local_vars_cb cb,
- void *cb_data);
+ iterate_over_block_arg_local_vars_cb cb);
/* Initialize *WHAT to be a copy of the user desired print what frame info.
If !WHAT.has_value (), the printing function chooses a default set of
diff --git a/gdb/stap-probe.c b/gdb/stap-probe.c
index 2310fdec86d..8488ddb9c31 100644
--- a/gdb/stap-probe.c
+++ b/gdb/stap-probe.c
@@ -281,8 +281,8 @@ static void
show_stapexpressiondebug (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("SystemTap Probe expression debugging is %s.\n"),
- value);
+ gdb_printf (file, _("SystemTap Probe expression debugging is %s.\n"),
+ value);
}
/* Returns the operator precedence level of OP, or STAP_OPERAND_PREC_NONE
@@ -822,6 +822,21 @@ stap_parse_register_operand (struct stap_parse_info *p)
operation_up reg = make_operation<register_operation> (std::move (regname));
+ /* If the argument has been placed into a vector register then (for most
+ architectures), the type of this register will be a union of arrays.
+ As a result, attempting to cast from the register type to the scalar
+ argument type will not be possible (GDB will throw an error during
+ expression evaluation).
+
+ The solution is to extract the scalar type from the value contents of
+ the entire register value. */
+ if (!is_scalar_type (gdbarch_register_type (gdbarch, regnum)))
+ {
+ gdb_assert (is_scalar_type (p->arg_type));
+ reg = make_operation<unop_extract_operation> (std::move (reg),
+ p->arg_type);
+ }
+
if (indirect_p)
{
if (disp_op != nullptr)
@@ -1330,7 +1345,7 @@ stap_probe::parse_arguments (struct gdbarch *gdbarch)
static CORE_ADDR
relocate_address (CORE_ADDR address, struct objfile *objfile)
{
- return address + objfile->data_section_offset ();
+ return address + objfile->text_section_offset ();
}
/* Implementation of the get_relocated_address method. */
diff --git a/gdb/std-operator.def b/gdb/std-operator.def
index baaa5947e2c..71f1f7ec036 100644
--- a/gdb/std-operator.def
+++ b/gdb/std-operator.def
@@ -187,6 +187,15 @@ OP (OP_STRING)
and they must all match. */
OP (OP_ARRAY)
+/* UNOP_EXTRACT takes a value and a type, like a cast, but, instead of
+ casting the value to the given type, a new value (of the given
+ type) is extracted from the contents of the old value, starting
+ from the least significant byte.
+
+ It is invalid for the given type to be larger than the type of the
+ given value. */
+OP (UNOP_EXTRACT)
+
/* UNOP_CAST is followed by a type pointer in the next exp_element.
With another UNOP_CAST at the end, this makes three exp_elements.
It casts the value of the following subexpression. */
@@ -375,19 +384,21 @@ OP (OP_F77_UNDETERMINED_ARGLIST)
/* Single operand builtins. */
OP (UNOP_FORTRAN_KIND)
-OP (UNOP_FORTRAN_FLOOR)
-OP (UNOP_FORTRAN_CEILING)
OP (UNOP_FORTRAN_ALLOCATED)
OP (UNOP_FORTRAN_RANK)
OP (UNOP_FORTRAN_SHAPE)
OP (UNOP_FORTRAN_LOC)
/* Two operand builtins. */
-OP (BINOP_FORTRAN_CMPLX)
OP (BINOP_FORTRAN_MODULO)
/* Builtins that take one or two operands. */
+OP (FORTRAN_CEILING)
+OP (FORTRAN_FLOOR)
+OP (FORTRAN_ASSOCIATED)
+
+/* Builtins that take one, two or three operands. */
OP (FORTRAN_LBOUND)
OP (FORTRAN_UBOUND)
-OP (FORTRAN_ASSOCIATED)
+OP (FORTRAN_CMPLX)
OP (FORTRAN_ARRAY_SIZE)
diff --git a/gdb/symfile-debug.c b/gdb/symfile-debug.c
index ab5fc0d0272..bbbcbcabfde 100644
--- a/gdb/symfile-debug.c
+++ b/gdb/symfile-debug.c
@@ -94,8 +94,8 @@ objfile::has_partial_symbols ()
}
if (debug_symfile)
- fprintf_filtered (gdb_stdlog, "qf->has_symbols (%s) = %d\n",
- objfile_debug_name (this), retval);
+ gdb_printf (gdb_stdlog, "qf->has_symbols (%s) = %d\n",
+ objfile_debug_name (this), retval);
return retval;
}
@@ -105,8 +105,8 @@ bool
objfile::has_unexpanded_symtabs ()
{
if (debug_symfile)
- fprintf_filtered (gdb_stdlog, "qf->has_unexpanded_symtabs (%s)\n",
- objfile_debug_name (this));
+ gdb_printf (gdb_stdlog, "qf->has_unexpanded_symtabs (%s)\n",
+ objfile_debug_name (this));
bool result = false;
for (const auto &iter : qf)
@@ -119,8 +119,8 @@ objfile::has_unexpanded_symtabs ()
}
if (debug_symfile)
- fprintf_filtered (gdb_stdlog, "qf->has_unexpanded_symtabs (%s) = %d\n",
- objfile_debug_name (this), (result ? 1 : 0));
+ gdb_printf (gdb_stdlog, "qf->has_unexpanded_symtabs (%s) = %d\n",
+ objfile_debug_name (this), (result ? 1 : 0));
return result;
}
@@ -131,8 +131,8 @@ objfile::find_last_source_symtab ()
struct symtab *retval = nullptr;
if (debug_symfile)
- fprintf_filtered (gdb_stdlog, "qf->find_last_source_symtab (%s)\n",
- objfile_debug_name (this));
+ gdb_printf (gdb_stdlog, "qf->find_last_source_symtab (%s)\n",
+ objfile_debug_name (this));
for (const auto &iter : qf)
{
@@ -142,8 +142,8 @@ objfile::find_last_source_symtab ()
}
if (debug_symfile)
- fprintf_filtered (gdb_stdlog, "qf->find_last_source_symtab (...) = %s\n",
- retval ? debug_symtab_name (retval) : "NULL");
+ gdb_printf (gdb_stdlog, "qf->find_last_source_symtab (...) = %s\n",
+ retval ? debug_symtab_name (retval) : "NULL");
return retval;
}
@@ -152,8 +152,8 @@ void
objfile::forget_cached_source_info ()
{
if (debug_symfile)
- fprintf_filtered (gdb_stdlog, "qf->forget_cached_source_info (%s)\n",
- objfile_debug_name (this));
+ gdb_printf (gdb_stdlog, "qf->forget_cached_source_info (%s)\n",
+ objfile_debug_name (this));
for (const auto &iter : qf)
iter->forget_cached_source_info (this);
@@ -165,12 +165,12 @@ objfile::map_symtabs_matching_filename
gdb::function_view<bool (symtab *)> callback)
{
if (debug_symfile)
- fprintf_filtered (gdb_stdlog,
- "qf->map_symtabs_matching_filename (%s, \"%s\", "
- "\"%s\", %s)\n",
- objfile_debug_name (this), name,
- real_path ? real_path : NULL,
- host_address_to_string (&callback));
+ gdb_printf (gdb_stdlog,
+ "qf->map_symtabs_matching_filename (%s, \"%s\", "
+ "\"%s\", %s)\n",
+ objfile_debug_name (this), name,
+ real_path ? real_path : NULL,
+ host_address_to_string (&callback));
bool retval = true;
const char *name_basename = lbasename (name);
@@ -220,9 +220,9 @@ objfile::map_symtabs_matching_filename
}
if (debug_symfile)
- fprintf_filtered (gdb_stdlog,
- "qf->map_symtabs_matching_filename (...) = %d\n",
- retval);
+ gdb_printf (gdb_stdlog,
+ "qf->map_symtabs_matching_filename (...) = %d\n",
+ retval);
/* We must re-invert the return value here to match the caller's
expectations. */
@@ -235,18 +235,18 @@ objfile::lookup_symbol (block_enum kind, const char *name, domain_enum domain)
struct compunit_symtab *retval = nullptr;
if (debug_symfile)
- fprintf_filtered (gdb_stdlog,
- "qf->lookup_symbol (%s, %d, \"%s\", %s)\n",
- objfile_debug_name (this), kind, name,
- domain_name (domain));
+ gdb_printf (gdb_stdlog,
+ "qf->lookup_symbol (%s, %d, \"%s\", %s)\n",
+ objfile_debug_name (this), kind, name,
+ domain_name (domain));
lookup_name_info lookup_name (name, symbol_name_match_type::FULL);
auto search_one_symtab = [&] (compunit_symtab *stab)
{
struct symbol *sym, *with_opaque = NULL;
- const struct blockvector *bv = COMPUNIT_BLOCKVECTOR (stab);
- const struct block *block = BLOCKVECTOR_BLOCK (bv, kind);
+ const struct blockvector *bv = stab->blockvector ();
+ const struct block *block = bv->block (kind);
sym = block_find_symbol (block, name, domain,
block_find_non_opaque_type_preferred,
@@ -257,14 +257,14 @@ objfile::lookup_symbol (block_enum kind, const char *name, domain_enum domain)
information (but NAME might contain it). */
if (sym != NULL
- && SYMBOL_MATCHES_SEARCH_NAME (sym, lookup_name))
+ && symbol_matches_search_name (sym, lookup_name))
{
retval = stab;
/* Found it. */
return false;
}
if (with_opaque != NULL
- && SYMBOL_MATCHES_SEARCH_NAME (with_opaque, lookup_name))
+ && symbol_matches_search_name (with_opaque, lookup_name))
retval = stab;
/* Keep looking through other psymtabs. */
@@ -287,10 +287,10 @@ objfile::lookup_symbol (block_enum kind, const char *name, domain_enum domain)
}
if (debug_symfile)
- fprintf_filtered (gdb_stdlog, "qf->lookup_symbol (...) = %s\n",
- retval
- ? debug_symtab_name (compunit_primary_filetab (retval))
- : "NULL");
+ gdb_printf (gdb_stdlog, "qf->lookup_symbol (...) = %s\n",
+ retval
+ ? debug_symtab_name (retval->primary_filetab ())
+ : "NULL");
return retval;
}
@@ -299,8 +299,8 @@ void
objfile::print_stats (bool print_bcache)
{
if (debug_symfile)
- fprintf_filtered (gdb_stdlog, "qf->print_stats (%s, %d)\n",
- objfile_debug_name (this), print_bcache);
+ gdb_printf (gdb_stdlog, "qf->print_stats (%s, %d)\n",
+ objfile_debug_name (this), print_bcache);
for (const auto &iter : qf)
iter->print_stats (this, print_bcache);
@@ -310,8 +310,8 @@ void
objfile::dump ()
{
if (debug_symfile)
- fprintf_filtered (gdb_stdlog, "qf->dump (%s)\n",
- objfile_debug_name (this));
+ gdb_printf (gdb_stdlog, "qf->dump (%s)\n",
+ objfile_debug_name (this));
for (const auto &iter : qf)
iter->dump (this);
@@ -321,9 +321,9 @@ void
objfile::expand_symtabs_for_function (const char *func_name)
{
if (debug_symfile)
- fprintf_filtered (gdb_stdlog,
- "qf->expand_symtabs_for_function (%s, \"%s\")\n",
- objfile_debug_name (this), func_name);
+ gdb_printf (gdb_stdlog,
+ "qf->expand_symtabs_for_function (%s, \"%s\")\n",
+ objfile_debug_name (this), func_name);
lookup_name_info base_lookup (func_name, symbol_name_match_type::FULL);
lookup_name_info lookup_name = base_lookup.make_ignore_params ();
@@ -344,8 +344,8 @@ void
objfile::expand_all_symtabs ()
{
if (debug_symfile)
- fprintf_filtered (gdb_stdlog, "qf->expand_all_symtabs (%s)\n",
- objfile_debug_name (this));
+ gdb_printf (gdb_stdlog, "qf->expand_all_symtabs (%s)\n",
+ objfile_debug_name (this));
for (const auto &iter : qf)
iter->expand_all_symtabs (this);
@@ -355,9 +355,9 @@ void
objfile::expand_symtabs_with_fullname (const char *fullname)
{
if (debug_symfile)
- fprintf_filtered (gdb_stdlog,
- "qf->expand_symtabs_with_fullname (%s, \"%s\")\n",
- objfile_debug_name (this), fullname);
+ gdb_printf (gdb_stdlog,
+ "qf->expand_symtabs_with_fullname (%s, \"%s\")\n",
+ objfile_debug_name (this), fullname);
const char *basename = lbasename (fullname);
auto file_matcher = [&] (const char *filename, bool basenames)
@@ -384,11 +384,11 @@ objfile::expand_matching_symbols
symbol_compare_ftype *ordered_compare)
{
if (debug_symfile)
- fprintf_filtered (gdb_stdlog,
- "qf->expand_matching_symbols (%s, %s, %d, %s)\n",
- objfile_debug_name (this),
- domain_name (domain), global,
- host_address_to_string (ordered_compare));
+ gdb_printf (gdb_stdlog,
+ "qf->expand_matching_symbols (%s, %s, %d, %s)\n",
+ objfile_debug_name (this),
+ domain_name (domain), global,
+ host_address_to_string (ordered_compare));
for (const auto &iter : qf)
iter->expand_matching_symbols (this, name, domain, global,
@@ -409,13 +409,13 @@ objfile::expand_symtabs_matching
gdb_assert (lookup_name != nullptr || symbol_matcher == nullptr);
if (debug_symfile)
- fprintf_filtered (gdb_stdlog,
- "qf->expand_symtabs_matching (%s, %s, %s, %s, %s)\n",
- objfile_debug_name (this),
- host_address_to_string (&file_matcher),
- host_address_to_string (&symbol_matcher),
- host_address_to_string (&expansion_notify),
- search_domain_name (kind));
+ gdb_printf (gdb_stdlog,
+ "qf->expand_symtabs_matching (%s, %s, %s, %s, %s)\n",
+ objfile_debug_name (this),
+ host_address_to_string (&file_matcher),
+ host_address_to_string (&symbol_matcher),
+ host_address_to_string (&expansion_notify),
+ search_domain_name (kind));
for (const auto &iter : qf)
if (!iter->expand_symtabs_matching (this, file_matcher, lookup_name,
@@ -434,13 +434,13 @@ objfile::find_pc_sect_compunit_symtab (struct bound_minimal_symbol msymbol,
struct compunit_symtab *retval = nullptr;
if (debug_symfile)
- fprintf_filtered (gdb_stdlog,
- "qf->find_pc_sect_compunit_symtab (%s, %s, %s, %s, %d)\n",
- objfile_debug_name (this),
- host_address_to_string (msymbol.minsym),
- hex_string (pc),
- host_address_to_string (section),
- warn_if_readin);
+ gdb_printf (gdb_stdlog,
+ "qf->find_pc_sect_compunit_symtab (%s, %s, %s, %s, %d)\n",
+ objfile_debug_name (this),
+ host_address_to_string (msymbol.minsym),
+ hex_string (pc),
+ host_address_to_string (section),
+ warn_if_readin);
for (const auto &iter : qf)
{
@@ -451,11 +451,11 @@ objfile::find_pc_sect_compunit_symtab (struct bound_minimal_symbol msymbol,
}
if (debug_symfile)
- fprintf_filtered (gdb_stdlog,
- "qf->find_pc_sect_compunit_symtab (...) = %s\n",
- retval
- ? debug_symtab_name (compunit_primary_filetab (retval))
- : "NULL");
+ gdb_printf (gdb_stdlog,
+ "qf->find_pc_sect_compunit_symtab (...) = %s\n",
+ retval
+ ? debug_symtab_name (retval->primary_filetab ())
+ : "NULL");
return retval;
}
@@ -465,10 +465,10 @@ objfile::map_symbol_filenames (gdb::function_view<symbol_filename_ftype> fun,
bool need_fullname)
{
if (debug_symfile)
- fprintf_filtered (gdb_stdlog,
- "qf->map_symbol_filenames (%s, ..., %d)\n",
- objfile_debug_name (this),
- need_fullname);
+ gdb_printf (gdb_stdlog,
+ "qf->map_symbol_filenames (%s, ..., %d)\n",
+ objfile_debug_name (this),
+ need_fullname);
for (const auto &iter : qf)
iter->map_symbol_filenames (this, fun, need_fullname);
@@ -478,10 +478,10 @@ struct compunit_symtab *
objfile::find_compunit_symtab_by_address (CORE_ADDR address)
{
if (debug_symfile)
- fprintf_filtered (gdb_stdlog,
- "qf->find_compunit_symtab_by_address (%s, %s)\n",
- objfile_debug_name (this),
- hex_string (address));
+ gdb_printf (gdb_stdlog,
+ "qf->find_compunit_symtab_by_address (%s, %s)\n",
+ objfile_debug_name (this),
+ hex_string (address));
struct compunit_symtab *result = NULL;
for (const auto &iter : qf)
@@ -492,11 +492,11 @@ objfile::find_compunit_symtab_by_address (CORE_ADDR address)
}
if (debug_symfile)
- fprintf_filtered (gdb_stdlog,
- "qf->find_compunit_symtab_by_address (...) = %s\n",
- result
- ? debug_symtab_name (compunit_primary_filetab (result))
- : "NULL");
+ gdb_printf (gdb_stdlog,
+ "qf->find_compunit_symtab_by_address (...) = %s\n",
+ result
+ ? debug_symtab_name (result->primary_filetab ())
+ : "NULL");
return result;
}
@@ -534,16 +534,16 @@ objfile::require_partial_symbols (bool verbose)
{
if (verbose && !printed)
{
- printf_filtered (_("Reading symbols from %s...\n"),
- objfile_name (this));
+ gdb_printf (_("Reading symbols from %s...\n"),
+ objfile_name (this));
printed = true;
}
iter->read_partial_symbols (this);
}
}
if (printed && !objfile_has_symbols (this))
- printf_filtered (_("(No debugging symbols found in %s)\n"),
- objfile_name (this));
+ gdb_printf (_("(No debugging symbols found in %s)\n"),
+ objfile_name (this));
}
}
@@ -559,10 +559,10 @@ debug_sym_get_probes (struct objfile *objfile)
const std::vector<std::unique_ptr<probe>> &retval
= debug_data->real_sf->sym_probe_fns->sym_get_probes (objfile);
- fprintf_filtered (gdb_stdlog,
- "probes->sym_get_probes (%s) = %s\n",
- objfile_debug_name (objfile),
- host_address_to_string (retval.data ()));
+ gdb_printf (gdb_stdlog,
+ "probes->sym_get_probes (%s) = %s\n",
+ objfile_debug_name (objfile),
+ host_address_to_string (retval.data ()));
return retval;
}
@@ -580,8 +580,8 @@ debug_sym_new_init (struct objfile *objfile)
const struct debug_sym_fns_data *debug_data
= symfile_debug_objfile_data_key.get (objfile);
- fprintf_filtered (gdb_stdlog, "sf->sym_new_init (%s)\n",
- objfile_debug_name (objfile));
+ gdb_printf (gdb_stdlog, "sf->sym_new_init (%s)\n",
+ objfile_debug_name (objfile));
debug_data->real_sf->sym_new_init (objfile);
}
@@ -592,8 +592,8 @@ debug_sym_init (struct objfile *objfile)
const struct debug_sym_fns_data *debug_data
= symfile_debug_objfile_data_key.get (objfile);
- fprintf_filtered (gdb_stdlog, "sf->sym_init (%s)\n",
- objfile_debug_name (objfile));
+ gdb_printf (gdb_stdlog, "sf->sym_init (%s)\n",
+ objfile_debug_name (objfile));
debug_data->real_sf->sym_init (objfile);
}
@@ -604,8 +604,8 @@ debug_sym_read (struct objfile *objfile, symfile_add_flags symfile_flags)
const struct debug_sym_fns_data *debug_data
= symfile_debug_objfile_data_key.get (objfile);
- fprintf_filtered (gdb_stdlog, "sf->sym_read (%s, 0x%x)\n",
- objfile_debug_name (objfile), (unsigned) symfile_flags);
+ gdb_printf (gdb_stdlog, "sf->sym_read (%s, 0x%x)\n",
+ objfile_debug_name (objfile), (unsigned) symfile_flags);
debug_data->real_sf->sym_read (objfile, symfile_flags);
}
@@ -616,8 +616,8 @@ debug_sym_finish (struct objfile *objfile)
const struct debug_sym_fns_data *debug_data
= symfile_debug_objfile_data_key.get (objfile);
- fprintf_filtered (gdb_stdlog, "sf->sym_finish (%s)\n",
- objfile_debug_name (objfile));
+ gdb_printf (gdb_stdlog, "sf->sym_finish (%s)\n",
+ objfile_debug_name (objfile));
debug_data->real_sf->sym_finish (objfile);
}
@@ -629,9 +629,9 @@ debug_sym_offsets (struct objfile *objfile,
const struct debug_sym_fns_data *debug_data
= symfile_debug_objfile_data_key.get (objfile);
- fprintf_filtered (gdb_stdlog, "sf->sym_offsets (%s, %s)\n",
- objfile_debug_name (objfile),
- host_address_to_string (&info));
+ gdb_printf (gdb_stdlog, "sf->sym_offsets (%s, %s)\n",
+ objfile_debug_name (objfile),
+ host_address_to_string (&info));
debug_data->real_sf->sym_offsets (objfile, info);
}
@@ -651,8 +651,8 @@ debug_sym_read_linetable (struct objfile *objfile)
const struct debug_sym_fns_data *debug_data
= symfile_debug_objfile_data_key.get (objfile);
- fprintf_filtered (gdb_stdlog, "sf->sym_read_linetable (%s)\n",
- objfile_debug_name (objfile));
+ gdb_printf (gdb_stdlog, "sf->sym_read_linetable (%s)\n",
+ objfile_debug_name (objfile));
debug_data->real_sf->sym_read_linetable (objfile);
}
@@ -666,12 +666,12 @@ debug_sym_relocate (struct objfile *objfile, asection *sectp, bfd_byte *buf)
retval = debug_data->real_sf->sym_relocate (objfile, sectp, buf);
- fprintf_filtered (gdb_stdlog,
- "sf->sym_relocate (%s, %s, %s) = %s\n",
- objfile_debug_name (objfile),
- host_address_to_string (sectp),
- host_address_to_string (buf),
- host_address_to_string (retval));
+ gdb_printf (gdb_stdlog,
+ "sf->sym_relocate (%s, %s, %s) = %s\n",
+ objfile_debug_name (objfile),
+ host_address_to_string (sectp),
+ host_address_to_string (buf),
+ host_address_to_string (retval));
return retval;
}
@@ -797,7 +797,7 @@ static void
show_debug_symfile (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Symfile debugging is %s.\n"), value);
+ gdb_printf (file, _("Symfile debugging is %s.\n"), value);
}
void _initialize_symfile_debug ();
diff --git a/gdb/symfile-mem.c b/gdb/symfile-mem.c
index b4c359ccd31..73c5ee378b8 100644
--- a/gdb/symfile-mem.c
+++ b/gdb/symfile-mem.c
@@ -88,7 +88,7 @@ symbol_file_add_from_memory (struct bfd *templ, CORE_ADDR addr,
struct bfd *nbfd;
struct bfd_section *sec;
bfd_vma loadbase;
- symfile_add_flags add_flags = 0;
+ symfile_add_flags add_flags = SYMFILE_NOT_FILENAME;
if (bfd_get_flavour (templ) != bfd_target_elf_flavour)
error (_("add-symbol-file-from-memory not supported for this target"));
diff --git a/gdb/symfile.c b/gdb/symfile.c
index 0449b919974..6f546f5b059 100644
--- a/gdb/symfile.c
+++ b/gdb/symfile.c
@@ -40,7 +40,7 @@
#include "regcache.h"
#include "filenames.h" /* for DOSish file names */
#include "gdb-stabs.h"
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
#include "completer.h"
#include "bcache.h"
#include "hashtab.h"
@@ -61,6 +61,7 @@
#include "gdbsupport/selftest.h"
#include "cli/cli-style.h"
#include "gdbsupport/forward-scope-exit.h"
+#include "gdbsupport/buildargv.h"
#include <sys/types.h>
#include <fcntl.h>
@@ -1081,8 +1082,8 @@ symbol_file_add_with_addrs (bfd *abfd, const char *name,
if (deprecated_pre_add_symbol_hook)
deprecated_pre_add_symbol_hook (name);
else
- printf_filtered (_("Reading symbols from %ps...\n"),
- styled_string (file_name_style.style (), name));
+ gdb_printf (_("Reading symbols from %ps...\n"),
+ styled_string (file_name_style.style (), name));
}
syms_from_objfile (objfile, addrs, add_flags);
@@ -1094,8 +1095,8 @@ symbol_file_add_with_addrs (bfd *abfd, const char *name,
if ((flags & OBJF_READNOW))
{
if (should_print)
- printf_filtered (_("Expanding full symbols from %ps...\n"),
- styled_string (file_name_style.style (), name));
+ gdb_printf (_("Expanding full symbols from %ps...\n"),
+ styled_string (file_name_style.style (), name));
objfile->expand_all_symtabs ();
}
@@ -1106,8 +1107,8 @@ symbol_file_add_with_addrs (bfd *abfd, const char *name,
file, and so printing it twice is just redundant. */
if (should_print && !objfile_has_symbols (objfile)
&& objfile->separate_debug_objfile == nullptr)
- printf_filtered (_("(No debugging symbols found in %ps)\n"),
- styled_string (file_name_style.style (), name));
+ gdb_printf (_("(No debugging symbols found in %ps)\n"),
+ styled_string (file_name_style.style (), name));
if (should_print)
{
@@ -1234,7 +1235,7 @@ symbol_file_clear (int from_tty)
gdb_assert (current_program_space->symfile_object_file == NULL);
if (from_tty)
- printf_filtered (_("No symbol file now.\n"));
+ gdb_printf (_("No symbol file now.\n"));
}
/* See symfile.h. */
@@ -1261,7 +1262,7 @@ separate_debug_file_exists (const std::string &name, unsigned long crc,
if (separate_debug_file_debug)
{
- fprintf_filtered (gdb_stdlog, _(" Trying %s..."), name.c_str ());
+ gdb_printf (gdb_stdlog, _(" Trying %s..."), name.c_str ());
gdb_flush (gdb_stdlog);
}
@@ -1270,7 +1271,7 @@ separate_debug_file_exists (const std::string &name, unsigned long crc,
if (abfd == NULL)
{
if (separate_debug_file_debug)
- fprintf_filtered (gdb_stdlog, _(" no, unable to open.\n"));
+ gdb_printf (gdb_stdlog, _(" no, unable to open.\n"));
return 0;
}
@@ -1294,8 +1295,8 @@ separate_debug_file_exists (const std::string &name, unsigned long crc,
&& abfd_stat.st_ino == parent_stat.st_ino)
{
if (separate_debug_file_debug)
- fprintf_filtered (gdb_stdlog,
- _(" no, same file as the objfile.\n"));
+ gdb_printf (gdb_stdlog,
+ _(" no, same file as the objfile.\n"));
return 0;
}
@@ -1309,7 +1310,7 @@ separate_debug_file_exists (const std::string &name, unsigned long crc,
if (!file_crc_p)
{
if (separate_debug_file_debug)
- fprintf_filtered (gdb_stdlog, _(" no, error computing CRC.\n"));
+ gdb_printf (gdb_stdlog, _(" no, error computing CRC.\n"));
return 0;
}
@@ -1327,8 +1328,8 @@ separate_debug_file_exists (const std::string &name, unsigned long crc,
if (!gdb_bfd_crc (parent_objfile->obfd, &parent_crc))
{
if (separate_debug_file_debug)
- fprintf_filtered (gdb_stdlog,
- _(" no, error computing CRC.\n"));
+ gdb_printf (gdb_stdlog,
+ _(" no, error computing CRC.\n"));
return 0;
}
@@ -1340,13 +1341,13 @@ separate_debug_file_exists (const std::string &name, unsigned long crc,
name.c_str (), objfile_name (parent_objfile));
if (separate_debug_file_debug)
- fprintf_filtered (gdb_stdlog, _(" no, CRC doesn't match.\n"));
+ gdb_printf (gdb_stdlog, _(" no, CRC doesn't match.\n"));
return 0;
}
if (separate_debug_file_debug)
- fprintf_filtered (gdb_stdlog, _(" yes!\n"));
+ gdb_printf (gdb_stdlog, _(" yes!\n"));
return 1;
}
@@ -1356,10 +1357,10 @@ static void
show_debug_file_directory (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file,
- _("The directory where separate debug "
- "symbols are searched for is \"%s\".\n"),
- value);
+ gdb_printf (file,
+ _("The directory where separate debug "
+ "symbols are searched for is \"%s\".\n"),
+ value);
}
#if ! defined (DEBUG_SUBDIRECTORY)
@@ -1381,9 +1382,9 @@ find_separate_debug_file (const char *dir,
unsigned long crc32, struct objfile *objfile)
{
if (separate_debug_file_debug)
- fprintf_filtered (gdb_stdlog,
- _("\nLooking for separate debug info (debug link) for "
- "%s\n"), objfile_name (objfile));
+ gdb_printf (gdb_stdlog,
+ _("\nLooking for separate debug info (debug link) for "
+ "%s\n"), objfile_name (objfile));
/* First try in the same directory as the original file. */
std::string debugfile = dir;
@@ -1437,7 +1438,7 @@ find_separate_debug_file (const char *dir,
for (const gdb::unique_xmalloc_ptr<char> &debugdir : debugdir_vec)
{
debugfile = target_prefix ? "target:" : "";
- debugfile += debugdir.get ();
+ debugfile += debugdir;
debugfile += "/";
debugfile += drive;
debugfile += dir_notarget;
@@ -1459,7 +1460,7 @@ find_separate_debug_file (const char *dir,
/* If the file is in the sysroot, try using its base path in
the global debugfile directory. */
debugfile = target_prefix ? "target:" : "";
- debugfile += debugdir.get ();
+ debugfile += debugdir;
debugfile += "/";
debugfile += base_path;
debugfile += "/";
@@ -1472,7 +1473,7 @@ find_separate_debug_file (const char *dir,
the sysroot's global debugfile directory. */
debugfile = target_prefix ? "target:" : "";
debugfile += gdb_sysroot;
- debugfile += debugdir.get ();
+ debugfile += debugdir;
debugfile += "/";
debugfile += base_path;
debugfile += "/";
@@ -2276,8 +2277,8 @@ add_symbol_file_command (const char *args, int from_tty)
statements because hex_string returns a local static
string. */
- printf_filtered (_("add symbol table from file \"%s\""),
- filename.get ());
+ gdb_printf (_("add symbol table from file \"%s\""),
+ filename.get ());
section_addr_info section_addrs;
std::vector<sect_opt>::const_iterator it = sect_opts.begin ();
if (!seen_addr)
@@ -2289,7 +2290,7 @@ add_symbol_file_command (const char *args, int from_tty)
const char *sec = it->name;
if (section_addrs.empty ())
- printf_filtered (_(" at\n"));
+ gdb_printf (_(" at\n"));
addr = parse_and_eval_address (val);
/* Here we store the section offsets in the order they were
@@ -2299,8 +2300,8 @@ add_symbol_file_command (const char *args, int from_tty)
index is not used for any other purpose.
*/
section_addrs.emplace_back (addr, sec, section_addrs.size ());
- printf_filtered ("\t%s_addr = %s\n", sec,
- paddress (gdbarch, addr));
+ gdb_printf ("\t%s_addr = %s\n", sec,
+ paddress (gdbarch, addr));
/* The object's sections are initialized when a
call is made to build_objfile_section_table (objfile).
@@ -2309,13 +2310,13 @@ add_symbol_file_command (const char *args, int from_tty)
so we can't determine what section names are valid. */
}
if (seen_offset)
- printf_filtered (_("%s offset by %s\n"),
- (section_addrs.empty ()
- ? _(" with all sections")
- : _("with other sections")),
- paddress (gdbarch, offset));
+ gdb_printf (_("%s offset by %s\n"),
+ (section_addrs.empty ()
+ ? _(" with all sections")
+ : _("with other sections")),
+ paddress (gdbarch, offset));
else if (section_addrs.empty ())
- printf_filtered ("\n");
+ gdb_printf ("\n");
if (from_tty && (!query ("%s", "")))
error (_("Not confirmed."));
@@ -2441,15 +2442,15 @@ reread_symbols (int from_tty)
if (res != 0)
{
/* FIXME, should use print_sys_errmsg but it's not filtered. */
- printf_filtered (_("`%s' has disappeared; keeping its symbols.\n"),
- objfile_name (objfile));
+ gdb_printf (_("`%s' has disappeared; keeping its symbols.\n"),
+ objfile_name (objfile));
continue;
}
new_modtime = new_statbuf.st_mtime;
if (new_modtime != objfile->mtime)
{
- printf_filtered (_("`%s' has changed; re-reading symbols.\n"),
- objfile_name (objfile));
+ gdb_printf (_("`%s' has changed; re-reading symbols.\n"),
+ objfile_name (objfile));
/* There are various functions like symbol_file_add,
symfile_bfd_open, syms_from_objfile, etc., which might
@@ -2597,18 +2598,18 @@ reread_symbols (int from_tty)
const int should_print = (print_symbol_loading_p (from_tty, mainline, 1)
&& readnow_symbol_files);
if (should_print)
- printf_filtered (_("Expanding full symbols from %ps...\n"),
- styled_string (file_name_style.style (),
- objfile_name (objfile)));
+ gdb_printf (_("Expanding full symbols from %ps...\n"),
+ styled_string (file_name_style.style (),
+ objfile_name (objfile)));
objfile->expand_all_symtabs ();
}
if (!objfile_has_symbols (objfile))
{
- wrap_here ("");
- printf_filtered (_("(no debugging symbols found)\n"));
- wrap_here ("");
+ gdb_stdout->wrap_here (0);
+ gdb_printf (_("(no debugging symbols found)\n"));
+ gdb_stdout->wrap_here (0);
}
/* We're done reading the symbol file; finish off complaints. */
@@ -2676,10 +2677,10 @@ static void
show_ext_args (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file,
- _("Mapping between filename extension "
- "and source language is \"%s\".\n"),
- value);
+ gdb_printf (file,
+ _("Mapping between filename extension "
+ "and source language is \"%s\".\n"),
+ value);
}
static void
@@ -2744,11 +2745,11 @@ set_ext_lang_command (const char *args,
static void
info_ext_lang_command (const char *args, int from_tty)
{
- printf_filtered (_("Filename extensions and the languages they represent:"));
- printf_filtered ("\n\n");
+ gdb_printf (_("Filename extensions and the languages they represent:"));
+ gdb_printf ("\n\n");
for (const filename_language &entry : filename_language_table)
- printf_filtered ("\t%s\t- %s\n", entry.ext.c_str (),
- language_str (entry.lang));
+ gdb_printf ("\t%s\t- %s\n", entry.ext.c_str (),
+ language_str (entry.lang));
}
enum language
@@ -2773,13 +2774,13 @@ deduce_language_from_filename (const char *filename)
struct symtab *
allocate_symtab (struct compunit_symtab *cust, const char *filename)
{
- struct objfile *objfile = cust->objfile;
+ struct objfile *objfile = cust->objfile ();
struct symtab *symtab
= OBSTACK_ZALLOC (&objfile->objfile_obstack, struct symtab);
symtab->filename = objfile->intern (filename);
symtab->fullname = NULL;
- symtab->language = deduce_language_from_filename (filename);
+ symtab->set_language (deduce_language_from_filename (filename));
/* This can be very verbose with lots of headers.
Only print at higher debug levels. */
@@ -2793,29 +2794,20 @@ allocate_symtab (struct compunit_symtab *cust, const char *filename)
if (last_objfile_name.empty () || last_objfile_name != this_objfile_name)
{
last_objfile_name = this_objfile_name;
- fprintf_filtered (gdb_stdlog,
- "Creating one or more symtabs for objfile %s ...\n",
- this_objfile_name);
+ gdb_printf (gdb_stdlog,
+ "Creating one or more symtabs for objfile %s ...\n",
+ this_objfile_name);
}
- fprintf_filtered (gdb_stdlog,
- "Created symtab %s for module %s.\n",
- host_address_to_string (symtab), filename);
+ gdb_printf (gdb_stdlog,
+ "Created symtab %s for module %s.\n",
+ host_address_to_string (symtab), filename);
}
/* Add it to CUST's list of symtabs. */
- if (cust->filetabs == NULL)
- {
- cust->filetabs = symtab;
- cust->last_filetab = symtab;
- }
- else
- {
- cust->last_filetab->next = symtab;
- cust->last_filetab = symtab;
- }
+ cust->add_filetab (symtab);
/* Backlink to the containing compunit symtab. */
- symtab->compunit_symtab = cust;
+ symtab->set_compunit (cust);
return symtab;
}
@@ -2831,7 +2823,7 @@ allocate_compunit_symtab (struct objfile *objfile, const char *name)
struct compunit_symtab);
const char *saved_name;
- cu->objfile = objfile;
+ cu->set_objfile (objfile);
/* The name we record here is only for display/debugging purposes.
Just save the basename to avoid path issues (too long for display,
@@ -2839,14 +2831,14 @@ allocate_compunit_symtab (struct objfile *objfile, const char *name)
saved_name = lbasename (name);
cu->name = obstack_strdup (&objfile->objfile_obstack, saved_name);
- COMPUNIT_DEBUGFORMAT (cu) = "unknown";
+ cu->set_debugformat ("unknown");
if (symtab_create_debug)
{
- fprintf_filtered (gdb_stdlog,
- "Created compunit symtab %s for %s.\n",
- host_address_to_string (cu),
- cu->name);
+ gdb_printf (gdb_stdlog,
+ "Created compunit symtab %s for %s.\n",
+ host_address_to_string (cu),
+ cu->name);
}
return cu;
@@ -2857,8 +2849,8 @@ allocate_compunit_symtab (struct objfile *objfile, const char *name)
void
add_compunit_symtab_to_objfile (struct compunit_symtab *cu)
{
- cu->next = cu->objfile->compunit_symtabs;
- cu->objfile->compunit_symtabs = cu;
+ cu->next = cu->objfile ()->compunit_symtabs;
+ cu->objfile ()->compunit_symtabs = cu;
}
@@ -3209,21 +3201,21 @@ list_overlays_command (const char *args, int from_tty)
size = bfd_section_size (osect->the_bfd_section);
name = bfd_section_name (osect->the_bfd_section);
- printf_filtered ("Section %s, loaded at ", name);
- fputs_filtered (paddress (gdbarch, lma), gdb_stdout);
- puts_filtered (" - ");
- fputs_filtered (paddress (gdbarch, lma + size), gdb_stdout);
- printf_filtered (", mapped at ");
- fputs_filtered (paddress (gdbarch, vma), gdb_stdout);
- puts_filtered (" - ");
- fputs_filtered (paddress (gdbarch, vma + size), gdb_stdout);
- puts_filtered ("\n");
+ gdb_printf ("Section %s, loaded at ", name);
+ gdb_puts (paddress (gdbarch, lma));
+ gdb_puts (" - ");
+ gdb_puts (paddress (gdbarch, lma + size));
+ gdb_printf (", mapped at ");
+ gdb_puts (paddress (gdbarch, vma));
+ gdb_puts (" - ");
+ gdb_puts (paddress (gdbarch, vma + size));
+ gdb_puts ("\n");
nmapped++;
}
}
if (nmapped == 0)
- printf_filtered (_("No sections are mapped.\n"));
+ gdb_printf (_("No sections are mapped.\n"));
}
/* Function: map_overlay_command
@@ -3262,8 +3254,8 @@ map_overlay_command (const char *args, int from_tty)
sec2))
{
if (info_verbose)
- printf_filtered (_("Note: section %s unmapped by overlap\n"),
- bfd_section_name (sec2->the_bfd_section));
+ gdb_printf (_("Note: section %s unmapped by overlap\n"),
+ bfd_section_name (sec2->the_bfd_section));
sec2->ovly_mapped = 0; /* sec2 overlaps sec: unmap sec2. */
}
return;
@@ -3311,7 +3303,7 @@ overlay_auto_command (const char *args, int from_tty)
overlay_debugging = ovly_auto;
enable_overlay_breakpoints ();
if (info_verbose)
- printf_filtered (_("Automatic overlay debugging enabled."));
+ gdb_printf (_("Automatic overlay debugging enabled."));
}
/* Function: overlay_manual_command
@@ -3324,7 +3316,7 @@ overlay_manual_command (const char *args, int from_tty)
overlay_debugging = ovly_on;
disable_overlay_breakpoints ();
if (info_verbose)
- printf_filtered (_("Overlay debugging enabled."));
+ gdb_printf (_("Overlay debugging enabled."));
}
/* Function: overlay_off_command
@@ -3337,7 +3329,7 @@ overlay_off_command (const char *args, int from_tty)
overlay_debugging = ovly_off;
disable_overlay_breakpoints ();
if (info_verbose)
- printf_filtered (_("Overlay debugging disabled."));
+ gdb_printf (_("Overlay debugging disabled."));
}
static void
@@ -3458,11 +3450,11 @@ simple_read_overlay_table (void)
word_size = gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT;
byte_order = gdbarch_byte_order (gdbarch);
- cache_novlys = read_memory_integer (BMSYMBOL_VALUE_ADDRESS (novlys_msym),
+ cache_novlys = read_memory_integer (novlys_msym.value_address (),
4, byte_order);
cache_ovly_table
= (unsigned int (*)[4]) xmalloc (cache_novlys * sizeof (*cache_ovly_table));
- cache_ovly_table_base = BMSYMBOL_VALUE_ADDRESS (ovly_table_msym);
+ cache_ovly_table_base = ovly_table_msym.value_address ();
read_target_long_array (cache_ovly_table_base,
(unsigned int *) cache_ovly_table,
cache_novlys * 4, word_size, byte_order);
@@ -3532,7 +3524,7 @@ simple_overlay_update (struct obj_section *osect)
"find `_ovly_table' array\n"
"in inferior. Use `overlay manual' mode."));
- if (cache_ovly_table_base == BMSYMBOL_VALUE_ADDRESS (minsym))
+ if (cache_ovly_table_base == minsym.value_address ())
/* Then go ahead and try to look up this single section in
the cache. */
if (simple_overlay_update_1 (osect))
diff --git a/gdb/symmisc.c b/gdb/symmisc.c
index ca803fc5342..68b76bf3b8e 100644
--- a/gdb/symmisc.c
+++ b/gdb/symmisc.c
@@ -26,11 +26,11 @@
#include "objfiles.h"
#include "breakpoint.h"
#include "command.h"
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
#include "language.h"
#include "bcache.h"
#include "block.h"
-#include "gdb_regex.h"
+#include "gdbsupport/gdb_regex.h"
#include <sys/stat.h>
#include "dictionary.h"
#include "typeprint.h"
@@ -38,6 +38,7 @@
#include "source.h"
#include "readline/tilde.h"
#include <cli/cli-style.h>
+#include "gdbsupport/buildargv.h"
/* Prototypes for local functions */
@@ -56,54 +57,54 @@ print_objfile_statistics (void)
for (objfile *objfile : pspace->objfiles ())
{
QUIT;
- printf_filtered (_("Statistics for '%s':\n"), objfile_name (objfile));
+ gdb_printf (_("Statistics for '%s':\n"), objfile_name (objfile));
if (OBJSTAT (objfile, n_stabs) > 0)
- printf_filtered (_(" Number of \"stab\" symbols read: %d\n"),
- OBJSTAT (objfile, n_stabs));
+ gdb_printf (_(" Number of \"stab\" symbols read: %d\n"),
+ OBJSTAT (objfile, n_stabs));
if (objfile->per_bfd->n_minsyms > 0)
- printf_filtered (_(" Number of \"minimal\" symbols read: %d\n"),
- objfile->per_bfd->n_minsyms);
+ gdb_printf (_(" Number of \"minimal\" symbols read: %d\n"),
+ objfile->per_bfd->n_minsyms);
if (OBJSTAT (objfile, n_syms) > 0)
- printf_filtered (_(" Number of \"full\" symbols read: %d\n"),
- OBJSTAT (objfile, n_syms));
+ gdb_printf (_(" Number of \"full\" symbols read: %d\n"),
+ OBJSTAT (objfile, n_syms));
if (OBJSTAT (objfile, n_types) > 0)
- printf_filtered (_(" Number of \"types\" defined: %d\n"),
- OBJSTAT (objfile, n_types));
+ gdb_printf (_(" Number of \"types\" defined: %d\n"),
+ OBJSTAT (objfile, n_types));
i = linetables = 0;
for (compunit_symtab *cu : objfile->compunits ())
{
- for (symtab *s : compunit_filetabs (cu))
+ for (symtab *s : cu->filetabs ())
{
i++;
- if (SYMTAB_LINETABLE (s) != NULL)
+ if (s->linetable () != NULL)
linetables++;
}
}
blockvectors = std::distance (objfile->compunits ().begin (),
objfile->compunits ().end ());
- printf_filtered (_(" Number of symbol tables: %d\n"), i);
- printf_filtered (_(" Number of symbol tables with line tables: %d\n"),
- linetables);
- printf_filtered (_(" Number of symbol tables with blockvectors: %d\n"),
- blockvectors);
+ gdb_printf (_(" Number of symbol tables: %d\n"), i);
+ gdb_printf (_(" Number of symbol tables with line tables: %d\n"),
+ linetables);
+ gdb_printf (_(" Number of symbol tables with blockvectors: %d\n"),
+ blockvectors);
objfile->print_stats (false);
if (OBJSTAT (objfile, sz_strtab) > 0)
- printf_filtered (_(" Space used by string tables: %d\n"),
- OBJSTAT (objfile, sz_strtab));
- printf_filtered (_(" Total memory used for objfile obstack: %s\n"),
- pulongest (obstack_memory_used (&objfile
- ->objfile_obstack)));
- printf_filtered (_(" Total memory used for BFD obstack: %s\n"),
- pulongest (obstack_memory_used (&objfile->per_bfd
- ->storage_obstack)));
-
- printf_filtered (_(" Total memory used for string cache: %d\n"),
- objfile->per_bfd->string_cache.memory_used ());
- printf_filtered (_("Byte cache statistics for '%s':\n"),
- objfile_name (objfile));
+ gdb_printf (_(" Space used by string tables: %d\n"),
+ OBJSTAT (objfile, sz_strtab));
+ gdb_printf (_(" Total memory used for objfile obstack: %s\n"),
+ pulongest (obstack_memory_used (&objfile
+ ->objfile_obstack)));
+ gdb_printf (_(" Total memory used for BFD obstack: %s\n"),
+ pulongest (obstack_memory_used (&objfile->per_bfd
+ ->storage_obstack)));
+
+ gdb_printf (_(" Total memory used for string cache: %d\n"),
+ objfile->per_bfd->string_cache.memory_used ());
+ gdb_printf (_("Byte cache statistics for '%s':\n"),
+ objfile_name (objfile));
objfile->per_bfd->string_cache.print_statistics ("string cache");
objfile->print_stats (true);
}
@@ -112,30 +113,30 @@ print_objfile_statistics (void)
static void
dump_objfile (struct objfile *objfile)
{
- printf_filtered ("\nObject file %s: ", objfile_name (objfile));
- printf_filtered ("Objfile at %s, bfd at %s, %d minsyms\n\n",
- host_address_to_string (objfile),
- host_address_to_string (objfile->obfd),
- objfile->per_bfd->minimal_symbol_count);
+ gdb_printf ("\nObject file %s: ", objfile_name (objfile));
+ gdb_printf ("Objfile at %s, bfd at %s, %d minsyms\n\n",
+ host_address_to_string (objfile),
+ host_address_to_string (objfile->obfd),
+ objfile->per_bfd->minimal_symbol_count);
objfile->dump ();
if (objfile->compunit_symtabs != NULL)
{
- printf_filtered ("Symtabs:\n");
+ gdb_printf ("Symtabs:\n");
for (compunit_symtab *cu : objfile->compunits ())
{
- for (symtab *symtab : compunit_filetabs (cu))
+ for (symtab *symtab : cu->filetabs ())
{
- printf_filtered ("%s at %s",
- symtab_to_filename_for_display (symtab),
- host_address_to_string (symtab));
- if (SYMTAB_OBJFILE (symtab) != objfile)
- printf_filtered (", NOT ON CHAIN!");
- printf_filtered ("\n");
+ gdb_printf ("%s at %s",
+ symtab_to_filename_for_display (symtab),
+ host_address_to_string (symtab));
+ if (symtab->compunit ()->objfile () != objfile)
+ gdb_printf (", NOT ON CHAIN!");
+ gdb_printf ("\n");
}
}
- printf_filtered ("\n\n");
+ gdb_printf ("\n\n");
}
}
@@ -148,10 +149,10 @@ dump_msymbols (struct objfile *objfile, struct ui_file *outfile)
int index;
char ms_type;
- fprintf_filtered (outfile, "\nObject file %s:\n\n", objfile_name (objfile));
+ gdb_printf (outfile, "\nObject file %s:\n\n", objfile_name (objfile));
if (objfile->per_bfd->minimal_symbol_count == 0)
{
- fprintf_filtered (outfile, "No minimal symbols found.\n");
+ gdb_printf (outfile, "No minimal symbols found.\n");
return;
}
index = 0;
@@ -159,7 +160,7 @@ dump_msymbols (struct objfile *objfile, struct ui_file *outfile)
{
struct obj_section *section = msymbol->obj_section (objfile);
- switch (MSYMBOL_TYPE (msymbol))
+ switch (msymbol->type ())
{
case mst_unknown:
ms_type = 'u';
@@ -196,30 +197,30 @@ dump_msymbols (struct objfile *objfile, struct ui_file *outfile)
ms_type = '?';
break;
}
- fprintf_filtered (outfile, "[%2d] %c ", index, ms_type);
+ gdb_printf (outfile, "[%2d] %c ", index, ms_type);
/* Use the relocated address as shown in the symbol here -- do
not try to respect copy relocations. */
- CORE_ADDR addr = (msymbol->value.address
+ CORE_ADDR addr = (msymbol->value_raw_address ()
+ objfile->section_offsets[msymbol->section_index ()]);
- fputs_filtered (paddress (gdbarch, addr), outfile);
- fprintf_filtered (outfile, " %s", msymbol->linkage_name ());
+ gdb_puts (paddress (gdbarch, addr), outfile);
+ gdb_printf (outfile, " %s", msymbol->linkage_name ());
if (section)
{
if (section->the_bfd_section != NULL)
- fprintf_filtered (outfile, " section %s",
- bfd_section_name (section->the_bfd_section));
+ gdb_printf (outfile, " section %s",
+ bfd_section_name (section->the_bfd_section));
else
- fprintf_filtered (outfile, " spurious section %ld",
- (long) (section - objfile->sections));
+ gdb_printf (outfile, " spurious section %ld",
+ (long) (section - objfile->sections));
}
if (msymbol->demangled_name () != NULL)
{
- fprintf_filtered (outfile, " %s", msymbol->demangled_name ());
+ gdb_printf (outfile, " %s", msymbol->demangled_name ());
}
if (msymbol->filename)
- fprintf_filtered (outfile, " %s", msymbol->filename);
- fputs_filtered ("\n", outfile);
+ gdb_printf (outfile, " %s", msymbol->filename);
+ gdb_puts ("\n", outfile);
index++;
}
if (objfile->per_bfd->minimal_symbol_count != index)
@@ -227,91 +228,86 @@ dump_msymbols (struct objfile *objfile, struct ui_file *outfile)
warning (_("internal error: minimal symbol count %d != %d"),
objfile->per_bfd->minimal_symbol_count, index);
}
- fprintf_filtered (outfile, "\n");
+ gdb_printf (outfile, "\n");
}
static void
dump_symtab_1 (struct symtab *symtab, struct ui_file *outfile)
{
- struct objfile *objfile = SYMTAB_OBJFILE (symtab);
+ struct objfile *objfile = symtab->compunit ()->objfile ();
struct gdbarch *gdbarch = objfile->arch ();
- int i;
struct mdict_iterator miter;
- int len;
struct linetable *l;
- const struct blockvector *bv;
struct symbol *sym;
- const struct block *b;
int depth;
- fprintf_filtered (outfile, "\nSymtab for file %s at %s\n",
- symtab_to_filename_for_display (symtab),
- host_address_to_string (symtab));
+ gdb_printf (outfile, "\nSymtab for file %s at %s\n",
+ symtab_to_filename_for_display (symtab),
+ host_address_to_string (symtab));
- if (SYMTAB_DIRNAME (symtab) != NULL)
- fprintf_filtered (outfile, "Compilation directory is %s\n",
- SYMTAB_DIRNAME (symtab));
- fprintf_filtered (outfile, "Read from object file %s (%s)\n",
- objfile_name (objfile),
- host_address_to_string (objfile));
- fprintf_filtered (outfile, "Language: %s\n",
- language_str (symtab->language));
+ if (symtab->compunit ()->dirname () != NULL)
+ gdb_printf (outfile, "Compilation directory is %s\n",
+ symtab->compunit ()->dirname ());
+ gdb_printf (outfile, "Read from object file %s (%s)\n",
+ objfile_name (objfile),
+ host_address_to_string (objfile));
+ gdb_printf (outfile, "Language: %s\n",
+ language_str (symtab->language ()));
/* First print the line table. */
- l = SYMTAB_LINETABLE (symtab);
+ l = symtab->linetable ();
if (l)
{
- fprintf_filtered (outfile, "\nLine table:\n\n");
- len = l->nitems;
- for (i = 0; i < len; i++)
+ gdb_printf (outfile, "\nLine table:\n\n");
+ int len = l->nitems;
+ for (int i = 0; i < len; i++)
{
- fprintf_filtered (outfile, " line %d at ", l->item[i].line);
- fputs_filtered (paddress (gdbarch, l->item[i].pc), outfile);
+ gdb_printf (outfile, " line %d at ", l->item[i].line);
+ gdb_puts (paddress (gdbarch, l->item[i].pc), outfile);
if (l->item[i].is_stmt)
- fprintf_filtered (outfile, "\t(stmt)");
- fprintf_filtered (outfile, "\n");
+ gdb_printf (outfile, "\t(stmt)");
+ gdb_printf (outfile, "\n");
}
}
/* Now print the block info, but only for compunit symtabs since we will
print lots of duplicate info otherwise. */
if (is_main_symtab_of_compunit_symtab (symtab))
{
- fprintf_filtered (outfile, "\nBlockvector:\n\n");
- bv = SYMTAB_BLOCKVECTOR (symtab);
- len = BLOCKVECTOR_NBLOCKS (bv);
- for (i = 0; i < len; i++)
+ gdb_printf (outfile, "\nBlockvector:\n\n");
+ const blockvector *bv = symtab->compunit ()->blockvector ();
+ for (int i = 0; i < bv->num_blocks (); i++)
{
- b = BLOCKVECTOR_BLOCK (bv, i);
+ const block *b = bv->block (i);
depth = block_depth (b) * 2;
- fprintf_filtered (outfile, "%*sblock #%03d, object at %s",
- depth, "", i,
- host_address_to_string (b));
- if (BLOCK_SUPERBLOCK (b))
- fprintf_filtered (outfile, " under %s",
- host_address_to_string (BLOCK_SUPERBLOCK (b)));
+ gdb_printf (outfile, "%*sblock #%03d, object at %s",
+ depth, "", i,
+ host_address_to_string (b));
+ if (b->superblock ())
+ gdb_printf (outfile, " under %s",
+ host_address_to_string (b->superblock ()));
/* drow/2002-07-10: We could save the total symbols count
even if we're using a hashtable, but nothing else but this message
wants it. */
- fprintf_filtered (outfile, ", %d syms/buckets in ",
- mdict_size (BLOCK_MULTIDICT (b)));
- fputs_filtered (paddress (gdbarch, BLOCK_START (b)), outfile);
- fprintf_filtered (outfile, "..");
- fputs_filtered (paddress (gdbarch, BLOCK_END (b)), outfile);
- if (BLOCK_FUNCTION (b))
+ gdb_printf (outfile, ", %d syms/buckets in ",
+ mdict_size (b->multidict ()));
+ gdb_puts (paddress (gdbarch, b->start ()), outfile);
+ gdb_printf (outfile, "..");
+ gdb_puts (paddress (gdbarch, b->end ()), outfile);
+ if (b->function ())
{
- fprintf_filtered (outfile, ", function %s",
- BLOCK_FUNCTION (b)->linkage_name ());
- if (BLOCK_FUNCTION (b)->demangled_name () != NULL)
+ gdb_printf (outfile, ", function %s",
+ b->function ()->linkage_name ());
+ if (b->function ()->demangled_name () != NULL)
{
- fprintf_filtered (outfile, ", %s",
- BLOCK_FUNCTION (b)->demangled_name ());
+ gdb_printf (outfile, ", %s",
+ b->function ()->demangled_name ());
}
}
- fprintf_filtered (outfile, "\n");
+ gdb_printf (outfile, "\n");
/* Now print each symbol in this block (in no particular order, if
we're using a hashtable). Note that we only want this
block, not any blocks from included symtabs. */
- ALL_DICT_SYMBOLS (BLOCK_MULTIDICT (b), miter, sym)
+ ALL_DICT_SYMBOLS (b->multidict (), miter, sym)
{
try
{
@@ -324,39 +320,40 @@ dump_symtab_1 (struct symtab *symtab, struct ui_file *outfile)
}
}
}
- fprintf_filtered (outfile, "\n");
+ gdb_printf (outfile, "\n");
}
else
{
+ compunit_symtab *compunit = symtab->compunit ();
const char *compunit_filename
- = symtab_to_filename_for_display (COMPUNIT_FILETABS (SYMTAB_COMPUNIT (symtab)));
+ = symtab_to_filename_for_display (compunit->primary_filetab ());
- fprintf_filtered (outfile,
- "\nBlockvector same as owning compunit: %s\n\n",
- compunit_filename);
+ gdb_printf (outfile,
+ "\nBlockvector same as owning compunit: %s\n\n",
+ compunit_filename);
}
/* Print info about the user of this compunit_symtab, and the
compunit_symtabs included by this one. */
if (is_main_symtab_of_compunit_symtab (symtab))
{
- struct compunit_symtab *cust = SYMTAB_COMPUNIT (symtab);
+ struct compunit_symtab *cust = symtab->compunit ();
if (cust->user != nullptr)
{
const char *addr
- = host_address_to_string (COMPUNIT_FILETABS (cust->user));
- fprintf_filtered (outfile, "Compunit user: %s\n", addr);
+ = host_address_to_string (cust->user->primary_filetab ());
+ gdb_printf (outfile, "Compunit user: %s\n", addr);
}
if (cust->includes != nullptr)
- for (i = 0; ; ++i)
+ for (int i = 0; ; ++i)
{
struct compunit_symtab *include = cust->includes[i];
if (include == nullptr)
break;
const char *addr
- = host_address_to_string (COMPUNIT_FILETABS (include));
- fprintf_filtered (outfile, "Compunit include: %s\n", addr);
+ = host_address_to_string (include->primary_filetab ());
+ gdb_printf (outfile, "Compunit include: %s\n", addr);
}
}
}
@@ -368,11 +365,11 @@ dump_symtab (struct symtab *symtab, struct ui_file *outfile)
because certain routines used during dump_symtab() use the current
language to print an image of the symbol. We'll restore it later.
But use only real languages, not placeholders. */
- if (symtab->language != language_unknown
- && symtab->language != language_auto)
+ if (symtab->language () != language_unknown
+ && symtab->language () != language_auto)
{
scoped_restore_current_language save_lang;
- set_language (symtab->language);
+ set_language (symtab->language ());
dump_symtab_1 (symtab, outfile);
}
else
@@ -468,7 +465,7 @@ maintenance_print_symbols (const char *args, int from_tty)
for (compunit_symtab *cu : objfile->compunits ())
{
- for (symtab *s : compunit_filetabs (cu))
+ for (symtab *s : cu->filetabs ())
{
int print_for_source = 0;
@@ -500,163 +497,161 @@ print_symbol (struct gdbarch *gdbarch, struct symbol *symbol,
{
struct obj_section *section;
- if (SYMBOL_OBJFILE_OWNED (symbol))
- section = symbol->obj_section (symbol_objfile (symbol));
+ if (symbol->is_objfile_owned ())
+ section = symbol->obj_section (symbol->objfile ());
else
section = NULL;
- print_spaces_filtered (depth, outfile);
- if (SYMBOL_DOMAIN (symbol) == LABEL_DOMAIN)
+ print_spaces (depth, outfile);
+ if (symbol->domain () == LABEL_DOMAIN)
{
- fprintf_filtered (outfile, "label %s at ", symbol->print_name ());
- fputs_filtered (paddress (gdbarch, SYMBOL_VALUE_ADDRESS (symbol)),
- outfile);
+ gdb_printf (outfile, "label %s at ", symbol->print_name ());
+ gdb_puts (paddress (gdbarch, symbol->value_address ()),
+ outfile);
if (section)
- fprintf_filtered (outfile, " section %s\n",
- bfd_section_name (section->the_bfd_section));
+ gdb_printf (outfile, " section %s\n",
+ bfd_section_name (section->the_bfd_section));
else
- fprintf_filtered (outfile, "\n");
+ gdb_printf (outfile, "\n");
return;
}
- if (SYMBOL_DOMAIN (symbol) == STRUCT_DOMAIN)
+ if (symbol->domain () == STRUCT_DOMAIN)
{
- if (SYMBOL_TYPE (symbol)->name ())
+ if (symbol->type ()->name ())
{
- LA_PRINT_TYPE (SYMBOL_TYPE (symbol), "", outfile, 1, depth,
- &type_print_raw_options);
+ current_language->print_type (symbol->type (), "", outfile, 1, depth,
+ &type_print_raw_options);
}
else
{
- fprintf_filtered (outfile, "%s %s = ",
- (SYMBOL_TYPE (symbol)->code () == TYPE_CODE_ENUM
- ? "enum"
- : (SYMBOL_TYPE (symbol)->code () == TYPE_CODE_STRUCT
- ? "struct" : "union")),
- symbol->linkage_name ());
- LA_PRINT_TYPE (SYMBOL_TYPE (symbol), "", outfile, 1, depth,
- &type_print_raw_options);
+ gdb_printf (outfile, "%s %s = ",
+ (symbol->type ()->code () == TYPE_CODE_ENUM
+ ? "enum"
+ : (symbol->type ()->code () == TYPE_CODE_STRUCT
+ ? "struct" : "union")),
+ symbol->linkage_name ());
+ current_language->print_type (symbol->type (), "", outfile, 1, depth,
+ &type_print_raw_options);
}
- fprintf_filtered (outfile, ";\n");
+ gdb_printf (outfile, ";\n");
}
else
{
- if (SYMBOL_CLASS (symbol) == LOC_TYPEDEF)
- fprintf_filtered (outfile, "typedef ");
- if (SYMBOL_TYPE (symbol))
+ if (symbol->aclass () == LOC_TYPEDEF)
+ gdb_printf (outfile, "typedef ");
+ if (symbol->type ())
{
/* Print details of types, except for enums where it's clutter. */
- LA_PRINT_TYPE (SYMBOL_TYPE (symbol), symbol->print_name (),
- outfile,
- SYMBOL_TYPE (symbol)->code () != TYPE_CODE_ENUM,
- depth,
- &type_print_raw_options);
- fprintf_filtered (outfile, "; ");
+ current_language->print_type (symbol->type (), symbol->print_name (),
+ outfile,
+ symbol->type ()->code () != TYPE_CODE_ENUM,
+ depth,
+ &type_print_raw_options);
+ gdb_printf (outfile, "; ");
}
else
- fprintf_filtered (outfile, "%s ", symbol->print_name ());
+ gdb_printf (outfile, "%s ", symbol->print_name ());
- switch (SYMBOL_CLASS (symbol))
+ switch (symbol->aclass ())
{
case LOC_CONST:
- fprintf_filtered (outfile, "const %s (%s)",
- plongest (SYMBOL_VALUE (symbol)),
- hex_string (SYMBOL_VALUE (symbol)));
+ gdb_printf (outfile, "const %s (%s)",
+ plongest (symbol->value_longest ()),
+ hex_string (symbol->value_longest ()));
break;
case LOC_CONST_BYTES:
{
unsigned i;
- struct type *type = check_typedef (SYMBOL_TYPE (symbol));
+ struct type *type = check_typedef (symbol->type ());
- fprintf_filtered (outfile, "const %s hex bytes:",
- pulongest (TYPE_LENGTH (type)));
+ gdb_printf (outfile, "const %s hex bytes:",
+ pulongest (TYPE_LENGTH (type)));
for (i = 0; i < TYPE_LENGTH (type); i++)
- fprintf_filtered (outfile, " %02x",
- (unsigned) SYMBOL_VALUE_BYTES (symbol)[i]);
+ gdb_printf (outfile, " %02x",
+ (unsigned) symbol->value_bytes ()[i]);
}
break;
case LOC_STATIC:
- fprintf_filtered (outfile, "static at ");
- fputs_filtered (paddress (gdbarch, SYMBOL_VALUE_ADDRESS (symbol)),
- outfile);
+ gdb_printf (outfile, "static at ");
+ gdb_puts (paddress (gdbarch, symbol->value_address ()), outfile);
if (section)
- fprintf_filtered (outfile, " section %s",
- bfd_section_name (section->the_bfd_section));
+ gdb_printf (outfile, " section %s",
+ bfd_section_name (section->the_bfd_section));
break;
case LOC_REGISTER:
- if (SYMBOL_IS_ARGUMENT (symbol))
- fprintf_filtered (outfile, "parameter register %s",
- plongest (SYMBOL_VALUE (symbol)));
+ if (symbol->is_argument ())
+ gdb_printf (outfile, "parameter register %s",
+ plongest (symbol->value_longest ()));
else
- fprintf_filtered (outfile, "register %s",
- plongest (SYMBOL_VALUE (symbol)));
+ gdb_printf (outfile, "register %s",
+ plongest (symbol->value_longest ()));
break;
case LOC_ARG:
- fprintf_filtered (outfile, "arg at offset %s",
- hex_string (SYMBOL_VALUE (symbol)));
+ gdb_printf (outfile, "arg at offset %s",
+ hex_string (symbol->value_longest ()));
break;
case LOC_REF_ARG:
- fprintf_filtered (outfile, "reference arg at %s",
- hex_string (SYMBOL_VALUE (symbol)));
+ gdb_printf (outfile, "reference arg at %s",
+ hex_string (symbol->value_longest ()));
break;
case LOC_REGPARM_ADDR:
- fprintf_filtered (outfile, "address parameter register %s",
- plongest (SYMBOL_VALUE (symbol)));
+ gdb_printf (outfile, "address parameter register %s",
+ plongest (symbol->value_longest ()));
break;
case LOC_LOCAL:
- fprintf_filtered (outfile, "local at offset %s",
- hex_string (SYMBOL_VALUE (symbol)));
+ gdb_printf (outfile, "local at offset %s",
+ hex_string (symbol->value_longest ()));
break;
case LOC_TYPEDEF:
break;
case LOC_LABEL:
- fprintf_filtered (outfile, "label at ");
- fputs_filtered (paddress (gdbarch, SYMBOL_VALUE_ADDRESS (symbol)),
- outfile);
+ gdb_printf (outfile, "label at ");
+ gdb_puts (paddress (gdbarch, symbol->value_address ()), outfile);
if (section)
- fprintf_filtered (outfile, " section %s",
- bfd_section_name (section->the_bfd_section));
+ gdb_printf (outfile, " section %s",
+ bfd_section_name (section->the_bfd_section));
break;
case LOC_BLOCK:
- fprintf_filtered
+ gdb_printf
(outfile, "block object %s, %s..%s",
- host_address_to_string (SYMBOL_BLOCK_VALUE (symbol)),
- paddress (gdbarch, BLOCK_START (SYMBOL_BLOCK_VALUE (symbol))),
- paddress (gdbarch, BLOCK_END (SYMBOL_BLOCK_VALUE (symbol))));
+ host_address_to_string (symbol->value_block ()),
+ paddress (gdbarch, symbol->value_block()->start ()),
+ paddress (gdbarch, symbol->value_block()->end ()));
if (section)
- fprintf_filtered (outfile, " section %s",
- bfd_section_name (section->the_bfd_section));
+ gdb_printf (outfile, " section %s",
+ bfd_section_name (section->the_bfd_section));
break;
case LOC_COMPUTED:
- fprintf_filtered (outfile, "computed at runtime");
+ gdb_printf (outfile, "computed at runtime");
break;
case LOC_UNRESOLVED:
- fprintf_filtered (outfile, "unresolved");
+ gdb_printf (outfile, "unresolved");
break;
case LOC_OPTIMIZED_OUT:
- fprintf_filtered (outfile, "optimized out");
+ gdb_printf (outfile, "optimized out");
break;
default:
- fprintf_filtered (outfile, "botched symbol class %x",
- SYMBOL_CLASS (symbol));
+ gdb_printf (outfile, "botched symbol class %x",
+ symbol->aclass ());
break;
}
}
- fprintf_filtered (outfile, "\n");
+ gdb_printf (outfile, "\n");
}
static void
@@ -755,7 +750,7 @@ maintenance_info_symtabs (const char *regexp, int from_tty)
{
int printed_compunit_symtab_start = 0;
- for (symtab *symtab : compunit_filetabs (cust))
+ for (symtab *symtab : cust->filetabs ())
{
QUIT;
@@ -764,38 +759,37 @@ maintenance_info_symtabs (const char *regexp, int from_tty)
{
if (! printed_objfile_start)
{
- printf_filtered ("{ objfile %s ", objfile_name (objfile));
- wrap_here (" ");
- printf_filtered ("((struct objfile *) %s)\n",
- host_address_to_string (objfile));
+ gdb_printf ("{ objfile %s ", objfile_name (objfile));
+ gdb_stdout->wrap_here (2);
+ gdb_printf ("((struct objfile *) %s)\n",
+ host_address_to_string (objfile));
printed_objfile_start = 1;
}
if (! printed_compunit_symtab_start)
{
- printf_filtered (" { ((struct compunit_symtab *) %s)\n",
- host_address_to_string (cust));
- printf_filtered (" debugformat %s\n",
- COMPUNIT_DEBUGFORMAT (cust));
- printf_filtered (" producer %s\n",
- COMPUNIT_PRODUCER (cust) != NULL
- ? COMPUNIT_PRODUCER (cust)
- : "(null)");
- printf_filtered (" dirname %s\n",
- COMPUNIT_DIRNAME (cust) != NULL
- ? COMPUNIT_DIRNAME (cust)
- : "(null)");
- printf_filtered (" blockvector"
- " ((struct blockvector *) %s)\n",
- host_address_to_string
- (COMPUNIT_BLOCKVECTOR (cust)));
- printf_filtered (" user"
- " ((struct compunit_symtab *) %s)\n",
- cust->user != nullptr
- ? host_address_to_string (cust->user)
- : "(null)");
+ gdb_printf (" { ((struct compunit_symtab *) %s)\n",
+ host_address_to_string (cust));
+ gdb_printf (" debugformat %s\n",
+ cust->debugformat ());
+ gdb_printf (" producer %s\n",
+ (cust->producer () != nullptr
+ ? cust->producer () : "(null)"));
+ gdb_printf (" name %s\n", cust->name);
+ gdb_printf (" dirname %s\n",
+ (cust->dirname () != NULL
+ ? cust->dirname () : "(null)"));
+ gdb_printf (" blockvector"
+ " ((struct blockvector *) %s)\n",
+ host_address_to_string
+ (cust->blockvector ()));
+ gdb_printf (" user"
+ " ((struct compunit_symtab *) %s)\n",
+ cust->user != nullptr
+ ? host_address_to_string (cust->user)
+ : "(null)");
if (cust->includes != nullptr)
{
- printf_filtered (" ( includes\n");
+ gdb_printf (" ( includes\n");
for (int i = 0; ; ++i)
{
struct compunit_symtab *include
@@ -804,37 +798,38 @@ maintenance_info_symtabs (const char *regexp, int from_tty)
break;
const char *addr
= host_address_to_string (include);
- printf_filtered (" (%s %s)\n",
- "(struct compunit_symtab *)",
- addr);
+ gdb_printf (" (%s %s)\n",
+ "(struct compunit_symtab *)",
+ addr);
}
- printf_filtered (" )\n");
+ gdb_printf (" )\n");
}
printed_compunit_symtab_start = 1;
}
- printf_filtered ("\t{ symtab %s ",
- symtab_to_filename_for_display (symtab));
- wrap_here (" ");
- printf_filtered ("((struct symtab *) %s)\n",
- host_address_to_string (symtab));
- printf_filtered ("\t fullname %s\n",
- symtab->fullname != NULL
- ? symtab->fullname
- : "(null)");
- printf_filtered ("\t "
- "linetable ((struct linetable *) %s)\n",
- host_address_to_string (symtab->linetable));
- printf_filtered ("\t}\n");
+ gdb_printf ("\t{ symtab %s ",
+ symtab_to_filename_for_display (symtab));
+ gdb_stdout->wrap_here (4);
+ gdb_printf ("((struct symtab *) %s)\n",
+ host_address_to_string (symtab));
+ gdb_printf ("\t fullname %s\n",
+ symtab->fullname != NULL
+ ? symtab->fullname
+ : "(null)");
+ gdb_printf ("\t "
+ "linetable ((struct linetable *) %s)\n",
+ host_address_to_string
+ (symtab->linetable ()));
+ gdb_printf ("\t}\n");
}
}
if (printed_compunit_symtab_start)
- printf_filtered (" }\n");
+ gdb_printf (" }\n");
}
if (printed_objfile_start)
- printf_filtered ("}\n");
+ gdb_printf ("}\n");
}
}
@@ -859,11 +854,11 @@ maintenance_check_symtabs (const char *ignore, int from_tty)
for (compunit_symtab *cust : objfile->compunits ())
{
int found_something = 0;
- struct symtab *symtab = compunit_primary_filetab (cust);
+ struct symtab *symtab = cust->primary_filetab ();
QUIT;
- if (COMPUNIT_BLOCKVECTOR (cust) == NULL)
+ if (cust->blockvector () == NULL)
found_something = 1;
/* Add more checks here. */
@@ -871,22 +866,22 @@ maintenance_check_symtabs (const char *ignore, int from_tty)
{
if (! printed_objfile_start)
{
- printf_filtered ("{ objfile %s ", objfile_name (objfile));
- wrap_here (" ");
- printf_filtered ("((struct objfile *) %s)\n",
- host_address_to_string (objfile));
+ gdb_printf ("{ objfile %s ", objfile_name (objfile));
+ gdb_stdout->wrap_here (2);
+ gdb_printf ("((struct objfile *) %s)\n",
+ host_address_to_string (objfile));
printed_objfile_start = 1;
}
- printf_filtered (" { symtab %s\n",
- symtab_to_filename_for_display (symtab));
- if (COMPUNIT_BLOCKVECTOR (cust) == NULL)
- printf_filtered (" NULL blockvector\n");
- printf_filtered (" }\n");
+ gdb_printf (" { symtab %s\n",
+ symtab_to_filename_for_display (symtab));
+ if (cust->blockvector () == NULL)
+ gdb_printf (" NULL blockvector\n");
+ gdb_printf (" }\n");
}
}
if (printed_objfile_start)
- printf_filtered ("}\n");
+ gdb_printf ("}\n");
}
}
@@ -939,7 +934,7 @@ block_depth (const struct block *block)
{
int i = 0;
- while ((block = BLOCK_SUPERBLOCK (block)) != NULL)
+ while ((block = block->superblock ()) != NULL)
{
i++;
}
@@ -956,36 +951,37 @@ maintenance_print_one_line_table (struct symtab *symtab, void *data)
struct linetable *linetable;
struct objfile *objfile;
- objfile = symtab->compunit_symtab->objfile;
- printf_filtered (_("objfile: %ps ((struct objfile *) %s)\n"),
- styled_string (file_name_style.style (),
- objfile_name (objfile)),
- host_address_to_string (objfile));
- printf_filtered (_("compunit_symtab: %s ((struct compunit_symtab *) %s)\n"),
- symtab->compunit_symtab->name,
- host_address_to_string (symtab->compunit_symtab));
- printf_filtered (_("symtab: %ps ((struct symtab *) %s)\n"),
- styled_string (file_name_style.style (),
- symtab_to_fullname (symtab)),
- host_address_to_string (symtab));
- linetable = SYMTAB_LINETABLE (symtab);
- printf_filtered (_("linetable: ((struct linetable *) %s):\n"),
- host_address_to_string (linetable));
+ objfile = symtab->compunit ()->objfile ();
+ gdb_printf (_("objfile: %ps ((struct objfile *) %s)\n"),
+ styled_string (file_name_style.style (),
+ objfile_name (objfile)),
+ host_address_to_string (objfile));
+ gdb_printf (_("compunit_symtab: %s ((struct compunit_symtab *) %s)\n"),
+ symtab->compunit ()->name,
+ host_address_to_string (symtab->compunit ()));
+ gdb_printf (_("symtab: %ps ((struct symtab *) %s)\n"),
+ styled_string (file_name_style.style (),
+ symtab_to_fullname (symtab)),
+ host_address_to_string (symtab));
+ linetable = symtab->linetable ();
+ gdb_printf (_("linetable: ((struct linetable *) %s):\n"),
+ host_address_to_string (linetable));
if (linetable == NULL)
- printf_filtered (_("No line table.\n"));
+ gdb_printf (_("No line table.\n"));
else if (linetable->nitems <= 0)
- printf_filtered (_("Line table has no lines.\n"));
+ gdb_printf (_("Line table has no lines.\n"));
else
{
/* Leave space for 6 digits of index and line number. After that the
tables will just not format as well. */
struct ui_out *uiout = current_uiout;
- ui_out_emit_table table_emitter (uiout, 4, -1, "line-table");
+ ui_out_emit_table table_emitter (uiout, 5, -1, "line-table");
uiout->table_header (6, ui_left, "index", _("INDEX"));
uiout->table_header (6, ui_left, "line", _("LINE"));
uiout->table_header (18, ui_left, "address", _("ADDRESS"));
- uiout->table_header (1, ui_left, "is-stmt", _("IS-STMT"));
+ uiout->table_header (7, ui_left, "is-stmt", _("IS-STMT"));
+ uiout->table_header (12, ui_left, "prologue-end", _("PROLOGUE-END"));
uiout->table_body ();
for (int i = 0; i < linetable->nitems; ++i)
@@ -1002,6 +998,7 @@ maintenance_print_one_line_table (struct symtab *symtab, void *data)
uiout->field_core_addr ("address", objfile->arch (),
item->pc);
uiout->field_string ("is-stmt", item->is_stmt ? "Y" : "");
+ uiout->field_string ("prologue-end", item->prologue_end ? "Y" : "");
uiout->text ("\n");
}
}
@@ -1024,7 +1021,7 @@ maintenance_info_line_tables (const char *regexp, int from_tty)
{
for (compunit_symtab *cust : objfile->compunits ())
{
- for (symtab *symtab : compunit_filetabs (cust))
+ for (symtab *symtab : cust->filetabs ())
{
QUIT;
@@ -1032,7 +1029,7 @@ maintenance_info_line_tables (const char *regexp, int from_tty)
|| re_exec (symtab_to_filename_for_display (symtab)))
{
maintenance_print_one_line_table (symtab, NULL);
- printf_filtered ("\n");
+ gdb_printf ("\n");
}
}
}
diff --git a/gdb/symtab.c b/gdb/symtab.c
index ba8e34df651..4b33d6c91af 100644
--- a/gdb/symtab.c
+++ b/gdb/symtab.c
@@ -27,7 +27,7 @@
#include "symfile.h"
#include "objfiles.h"
#include "gdbcmd.h"
-#include "gdb_regex.h"
+#include "gdbsupport/gdb_regex.h"
#include "expression.h"
#include "language.h"
#include "demangle.h"
@@ -47,7 +47,7 @@
#include "hashtab.h"
#include "typeprint.h"
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
#include "block.h"
#include "dictionary.h"
@@ -288,6 +288,10 @@ static const char *const multiple_symbols_modes[] =
};
static const char *multiple_symbols_mode = multiple_symbols_all;
+/* When TRUE, ignore the prologue-end flag in linetable_entry when searching
+ for the SAL past a function prologue. */
+static bool ignore_prologue_end_flag = false;
+
/* Read-only accessor to AUTO_SELECT_MODE. */
const char *
@@ -338,7 +342,7 @@ compunit_symtab::find_call_site (CORE_ADDR pc) const
return nullptr;
CORE_ADDR delta
- = this->objfile->section_offsets[COMPUNIT_BLOCK_LINE_SECTION (this)];
+ = this->objfile ()->section_offsets[this->block_line_section ()];
CORE_ADDR unrelocated_pc = pc - delta;
struct call_site call_site_local (unrelocated_pc, nullptr, nullptr);
@@ -361,13 +365,41 @@ compunit_symtab::set_call_site_htab (htab_t call_site_htab)
/* See symtab.h. */
+void
+compunit_symtab::set_primary_filetab (symtab *primary_filetab)
+{
+ symtab *prev_filetab = nullptr;
+
+ /* Move PRIMARY_FILETAB to the head of the filetab list. */
+ for (symtab *filetab : this->filetabs ())
+ {
+ if (filetab == primary_filetab)
+ {
+ if (prev_filetab != nullptr)
+ {
+ prev_filetab->next = primary_filetab->next;
+ primary_filetab->next = m_filetabs;
+ m_filetabs = primary_filetab;
+ }
+
+ break;
+ }
+
+ prev_filetab = filetab;
+ }
+
+ gdb_assert (primary_filetab == m_filetabs);
+}
+
+/* See symtab.h. */
+
struct symtab *
-compunit_primary_filetab (const struct compunit_symtab *cust)
+compunit_symtab::primary_filetab () const
{
- gdb_assert (COMPUNIT_FILETABS (cust) != NULL);
+ gdb_assert (m_filetabs != nullptr);
/* The primary file symtab is the first one in the list. */
- return COMPUNIT_FILETABS (cust);
+ return m_filetabs;
}
/* See symtab.h. */
@@ -375,11 +407,24 @@ compunit_primary_filetab (const struct compunit_symtab *cust)
enum language
compunit_language (const struct compunit_symtab *cust)
{
- struct symtab *symtab = compunit_primary_filetab (cust);
+ struct symtab *symtab = cust->primary_filetab ();
/* The language of the compunit symtab is the language of its primary
source file. */
- return SYMTAB_LANGUAGE (symtab);
+ return symtab->language ();
+}
+
+/* The relocated address of the minimal symbol, using the section
+ offsets from OBJFILE. */
+
+CORE_ADDR
+minimal_symbol::value_address (objfile *objfile) const
+{
+ if (this->maybe_copied)
+ return get_msymbol_address (objfile, this);
+ else
+ return (this->value_raw_address ()
+ + objfile->section_offsets[this->section_index ()]);
}
/* See symtab.h. */
@@ -387,11 +432,11 @@ compunit_language (const struct compunit_symtab *cust)
bool
minimal_symbol::data_p () const
{
- return type == mst_data
- || type == mst_bss
- || type == mst_abs
- || type == mst_file_data
- || type == mst_file_bss;
+ return m_type == mst_data
+ || m_type == mst_bss
+ || m_type == mst_abs
+ || m_type == mst_file_data
+ || m_type == mst_file_bss;
}
/* See symtab.h. */
@@ -399,12 +444,12 @@ minimal_symbol::data_p () const
bool
minimal_symbol::text_p () const
{
- return type == mst_text
- || type == mst_text_gnu_ifunc
- || type == mst_data_gnu_ifunc
- || type == mst_slot_got_plt
- || type == mst_solib_trampoline
- || type == mst_file_text;
+ return m_type == mst_text
+ || m_type == mst_text_gnu_ifunc
+ || m_type == mst_data_gnu_ifunc
+ || m_type == mst_slot_got_plt
+ || m_type == mst_solib_trampoline
+ || m_type == mst_file_text;
}
/* See whether FILENAME matches SEARCH_NAME using the rule that we
@@ -505,7 +550,7 @@ iterate_over_some_symtabs (const char *name,
for (cust = first; cust != NULL && cust != after_last; cust = cust->next)
{
- for (symtab *s : compunit_filetabs (cust))
+ for (symtab *s : cust->filetabs ())
{
if (compare_filenames_for_search (s->filename, name))
{
@@ -1193,7 +1238,7 @@ eq_symbol_entry (const struct symbol_cache_slot *slot,
else
{
slot_name = slot->value.found.symbol->search_name ();
- slot_domain = SYMBOL_DOMAIN (slot->value.found.symbol);
+ slot_domain = slot->value.found.symbol->domain ();
}
/* NULL names match. */
@@ -1228,7 +1273,7 @@ eq_symbol_entry (const struct symbol_cache_slot *slot,
struct symbol *sym = slot->value.found.symbol;
lookup_name_info lookup_name (name, symbol_name_match_type::FULL);
- if (!SYMBOL_MATCHES_SEARCH_NAME (sym, lookup_name))
+ if (!symbol_matches_search_name (sym, lookup_name))
return 0;
if (!symbol_matches_domain (sym->language (), slot_domain, domain))
@@ -1380,12 +1425,12 @@ symbol_cache_lookup (struct symbol_cache *cache,
if (eq_symbol_entry (slot, objfile_context, name, domain))
{
if (symbol_lookup_debug)
- fprintf_unfiltered (gdb_stdlog,
- "%s block symbol cache hit%s for %s, %s\n",
- block == GLOBAL_BLOCK ? "Global" : "Static",
- slot->state == SYMBOL_SLOT_NOT_FOUND
- ? " (not found)" : "",
- name, domain_name (domain));
+ gdb_printf (gdb_stdlog,
+ "%s block symbol cache hit%s for %s, %s\n",
+ block == GLOBAL_BLOCK ? "Global" : "Static",
+ slot->state == SYMBOL_SLOT_NOT_FOUND
+ ? " (not found)" : "",
+ name, domain_name (domain));
++bsc->hits;
if (slot->state == SYMBOL_SLOT_NOT_FOUND)
return SYMBOL_LOOKUP_FAILED;
@@ -1396,10 +1441,10 @@ symbol_cache_lookup (struct symbol_cache *cache,
if (symbol_lookup_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "%s block symbol cache miss for %s, %s\n",
- block == GLOBAL_BLOCK ? "Global" : "Static",
- name, domain_name (domain));
+ gdb_printf (gdb_stdlog,
+ "%s block symbol cache miss for %s, %s\n",
+ block == GLOBAL_BLOCK ? "Global" : "Static",
+ name, domain_name (domain));
}
++bsc->misses;
return {};
@@ -1507,7 +1552,7 @@ symbol_cache_dump (const struct symbol_cache *cache)
if (cache->global_symbols == NULL)
{
- printf_filtered (" <disabled>\n");
+ gdb_printf (" <disabled>\n");
return;
}
@@ -1518,9 +1563,9 @@ symbol_cache_dump (const struct symbol_cache *cache)
unsigned int i;
if (pass == 0)
- printf_filtered ("Global symbols:\n");
+ gdb_printf ("Global symbols:\n");
else
- printf_filtered ("Static symbols:\n");
+ gdb_printf ("Static symbols:\n");
for (i = 0; i < bsc->size; ++i)
{
@@ -1533,20 +1578,20 @@ symbol_cache_dump (const struct symbol_cache *cache)
case SYMBOL_SLOT_UNUSED:
break;
case SYMBOL_SLOT_NOT_FOUND:
- printf_filtered (" [%4u] = %s, %s %s (not found)\n", i,
- host_address_to_string (slot->objfile_context),
- slot->value.not_found.name,
- domain_name (slot->value.not_found.domain));
+ gdb_printf (" [%4u] = %s, %s %s (not found)\n", i,
+ host_address_to_string (slot->objfile_context),
+ slot->value.not_found.name,
+ domain_name (slot->value.not_found.domain));
break;
case SYMBOL_SLOT_FOUND:
{
struct symbol *found = slot->value.found.symbol;
const struct objfile *context = slot->objfile_context;
- printf_filtered (" [%4u] = %s, %s %s\n", i,
- host_address_to_string (context),
- found->print_name (),
- domain_name (SYMBOL_DOMAIN (found)));
+ gdb_printf (" [%4u] = %s, %s %s\n", i,
+ host_address_to_string (context),
+ found->print_name (),
+ domain_name (found->domain ()));
break;
}
}
@@ -1563,16 +1608,16 @@ maintenance_print_symbol_cache (const char *args, int from_tty)
{
struct symbol_cache *cache;
- printf_filtered (_("Symbol cache for pspace %d\n%s:\n"),
- pspace->num,
- pspace->symfile_object_file != NULL
- ? objfile_name (pspace->symfile_object_file)
- : "(no object file)");
+ gdb_printf (_("Symbol cache for pspace %d\n%s:\n"),
+ pspace->num,
+ pspace->symfile_object_file != NULL
+ ? objfile_name (pspace->symfile_object_file)
+ : "(no object file)");
/* If the cache hasn't been created yet, avoid creating one. */
cache = symbol_cache_key.get (pspace);
if (cache == NULL)
- printf_filtered (" <empty>\n");
+ gdb_printf (" <empty>\n");
else
symbol_cache_dump (cache);
}
@@ -1598,7 +1643,7 @@ symbol_cache_stats (struct symbol_cache *cache)
if (cache->global_symbols == NULL)
{
- printf_filtered (" <disabled>\n");
+ gdb_printf (" <disabled>\n");
return;
}
@@ -1610,14 +1655,14 @@ symbol_cache_stats (struct symbol_cache *cache)
QUIT;
if (pass == 0)
- printf_filtered ("Global block cache stats:\n");
+ gdb_printf ("Global block cache stats:\n");
else
- printf_filtered ("Static block cache stats:\n");
+ gdb_printf ("Static block cache stats:\n");
- printf_filtered (" size: %u\n", bsc->size);
- printf_filtered (" hits: %u\n", bsc->hits);
- printf_filtered (" misses: %u\n", bsc->misses);
- printf_filtered (" collisions: %u\n", bsc->collisions);
+ gdb_printf (" size: %u\n", bsc->size);
+ gdb_printf (" hits: %u\n", bsc->hits);
+ gdb_printf (" misses: %u\n", bsc->misses);
+ gdb_printf (" collisions: %u\n", bsc->collisions);
}
}
@@ -1630,16 +1675,16 @@ maintenance_print_symbol_cache_statistics (const char *args, int from_tty)
{
struct symbol_cache *cache;
- printf_filtered (_("Symbol cache statistics for pspace %d\n%s:\n"),
- pspace->num,
- pspace->symfile_object_file != NULL
- ? objfile_name (pspace->symfile_object_file)
- : "(no object file)");
+ gdb_printf (_("Symbol cache statistics for pspace %d\n%s:\n"),
+ pspace->num,
+ pspace->symfile_object_file != NULL
+ ? objfile_name (pspace->symfile_object_file)
+ : "(no object file)");
/* If the cache hasn't been created yet, avoid creating one. */
cache = symbol_cache_key.get (pspace);
if (cache == NULL)
- printf_filtered (" empty, no stats available\n");
+ gdb_printf (" empty, no stats available\n");
else
symbol_cache_stats (cache);
}
@@ -1753,15 +1798,15 @@ fixup_symbol_section (struct symbol *sym, struct objfile *objfile)
if (!sym)
return NULL;
- if (!SYMBOL_OBJFILE_OWNED (sym))
+ if (!sym->is_objfile_owned ())
return sym;
/* We either have an OBJFILE, or we can get at it from the sym's
symtab. Anything else is a bug. */
- gdb_assert (objfile || symbol_symtab (sym));
+ gdb_assert (objfile || sym->symtab ());
if (objfile == NULL)
- objfile = symbol_objfile (sym);
+ objfile = sym->objfile ();
if (sym->obj_section (objfile) != nullptr)
return sym;
@@ -1769,14 +1814,14 @@ fixup_symbol_section (struct symbol *sym, struct objfile *objfile)
/* We should have an objfile by now. */
gdb_assert (objfile);
- switch (SYMBOL_CLASS (sym))
+ switch (sym->aclass ())
{
case LOC_STATIC:
case LOC_LABEL:
- addr = SYMBOL_VALUE_ADDRESS (sym);
+ addr = sym->value_address ();
break;
case LOC_BLOCK:
- addr = BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (sym));
+ addr = sym->value_block ()->entry_pc ();
break;
default:
@@ -1955,10 +2000,10 @@ lookup_language_this (const struct language_defn *lang,
{
struct objfile *objfile = block_objfile (block);
- fprintf_unfiltered (gdb_stdlog,
- "lookup_language_this (%s, %s (objfile %s))",
- lang->name (), host_address_to_string (block),
- objfile_debug_name (objfile));
+ gdb_printf (gdb_stdlog,
+ "lookup_language_this (%s, %s (objfile %s))",
+ lang->name (), host_address_to_string (block),
+ objfile_debug_name (objfile));
}
while (block)
@@ -1972,20 +2017,20 @@ lookup_language_this (const struct language_defn *lang,
{
if (symbol_lookup_debug > 1)
{
- fprintf_unfiltered (gdb_stdlog, " = %s (%s, block %s)\n",
- sym->print_name (),
- host_address_to_string (sym),
- host_address_to_string (block));
+ gdb_printf (gdb_stdlog, " = %s (%s, block %s)\n",
+ sym->print_name (),
+ host_address_to_string (sym),
+ host_address_to_string (block));
}
return (struct block_symbol) {sym, block};
}
- if (BLOCK_FUNCTION (block))
+ if (block->function ())
break;
- block = BLOCK_SUPERBLOCK (block);
+ block = block->superblock ();
}
if (symbol_lookup_debug > 1)
- fprintf_unfiltered (gdb_stdlog, " = NULL\n");
+ gdb_printf (gdb_stdlog, " = NULL\n");
return {};
}
@@ -2051,12 +2096,12 @@ lookup_symbol_aux (const char *name, symbol_name_match_type match_type,
struct objfile *objfile = (block == nullptr
? nullptr : block_objfile (block));
- fprintf_unfiltered (gdb_stdlog,
- "lookup_symbol_aux (%s, %s (objfile %s), %s, %s)\n",
- name, host_address_to_string (block),
- objfile != NULL
- ? objfile_debug_name (objfile) : "NULL",
- domain_name (domain), language_str (language));
+ gdb_printf (gdb_stdlog,
+ "lookup_symbol_aux (%s, %s (objfile %s), %s, %s)\n",
+ name, host_address_to_string (block),
+ objfile != NULL
+ ? objfile_debug_name (objfile) : "NULL",
+ domain_name (domain), language_str (language));
}
/* Make sure we do something sensible with is_a_field_of_this, since
@@ -2074,8 +2119,8 @@ lookup_symbol_aux (const char *name, symbol_name_match_type match_type,
{
if (symbol_lookup_debug)
{
- fprintf_unfiltered (gdb_stdlog, "lookup_symbol_aux (...) = %s\n",
- host_address_to_string (result.symbol));
+ gdb_printf (gdb_stdlog, "lookup_symbol_aux (...) = %s\n",
+ host_address_to_string (result.symbol));
}
return result;
}
@@ -2094,7 +2139,7 @@ lookup_symbol_aux (const char *name, symbol_name_match_type match_type,
if (result.symbol)
{
- struct type *t = result.symbol->type;
+ struct type *t = result.symbol->type ();
/* I'm not really sure that type of this can ever
be typedefed; just be safe. */
@@ -2111,8 +2156,8 @@ lookup_symbol_aux (const char *name, symbol_name_match_type match_type,
{
if (symbol_lookup_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "lookup_symbol_aux (...) = NULL\n");
+ gdb_printf (gdb_stdlog,
+ "lookup_symbol_aux (...) = NULL\n");
}
return {};
}
@@ -2127,8 +2172,8 @@ lookup_symbol_aux (const char *name, symbol_name_match_type match_type,
{
if (symbol_lookup_debug)
{
- fprintf_unfiltered (gdb_stdlog, "lookup_symbol_aux (...) = %s\n",
- host_address_to_string (result.symbol));
+ gdb_printf (gdb_stdlog, "lookup_symbol_aux (...) = %s\n",
+ host_address_to_string (result.symbol));
}
return result;
}
@@ -2139,10 +2184,10 @@ lookup_symbol_aux (const char *name, symbol_name_match_type match_type,
result = lookup_static_symbol (name, domain);
if (symbol_lookup_debug)
{
- fprintf_unfiltered (gdb_stdlog, "lookup_symbol_aux (...) = %s\n",
- result.symbol != NULL
- ? host_address_to_string (result.symbol)
- : "NULL");
+ gdb_printf (gdb_stdlog, "lookup_symbol_aux (...) = %s\n",
+ result.symbol != NULL
+ ? host_address_to_string (result.symbol)
+ : "NULL");
}
return result;
}
@@ -2182,9 +2227,9 @@ lookup_local_symbol (const char *name,
return blocksym;
}
- if (BLOCK_FUNCTION (block) != NULL && block_inlined_p (block))
+ if (block->function () != NULL && block_inlined_p (block))
break;
- block = BLOCK_SUPERBLOCK (block);
+ block = block->superblock ();
}
/* We've reached the end of the function without finding a result. */
@@ -2206,11 +2251,11 @@ lookup_symbol_in_block (const char *name, symbol_name_match_type match_type,
struct objfile *objfile = (block == nullptr
? nullptr : block_objfile (block));
- fprintf_unfiltered (gdb_stdlog,
- "lookup_symbol_in_block (%s, %s (objfile %s), %s)",
- name, host_address_to_string (block),
- objfile_debug_name (objfile),
- domain_name (domain));
+ gdb_printf (gdb_stdlog,
+ "lookup_symbol_in_block (%s, %s (objfile %s), %s)",
+ name, host_address_to_string (block),
+ objfile_debug_name (objfile),
+ domain_name (domain));
}
sym = block_lookup_symbol (block, name, match_type, domain);
@@ -2218,14 +2263,14 @@ lookup_symbol_in_block (const char *name, symbol_name_match_type match_type,
{
if (symbol_lookup_debug > 1)
{
- fprintf_unfiltered (gdb_stdlog, " = %s\n",
- host_address_to_string (sym));
+ gdb_printf (gdb_stdlog, " = %s\n",
+ host_address_to_string (sym));
}
return fixup_symbol_section (sym, NULL);
}
if (symbol_lookup_debug > 1)
- fprintf_unfiltered (gdb_stdlog, " = NULL\n");
+ gdb_printf (gdb_stdlog, " = NULL\n");
return NULL;
}
@@ -2265,12 +2310,12 @@ lookup_symbol_in_objfile_symtabs (struct objfile *objfile,
if (symbol_lookup_debug > 1)
{
- fprintf_unfiltered (gdb_stdlog,
- "lookup_symbol_in_objfile_symtabs (%s, %s, %s, %s)",
- objfile_debug_name (objfile),
- block_index == GLOBAL_BLOCK
- ? "GLOBAL_BLOCK" : "STATIC_BLOCK",
- name, domain_name (domain));
+ gdb_printf (gdb_stdlog,
+ "lookup_symbol_in_objfile_symtabs (%s, %s, %s, %s)",
+ objfile_debug_name (objfile),
+ block_index == GLOBAL_BLOCK
+ ? "GLOBAL_BLOCK" : "STATIC_BLOCK",
+ name, domain_name (domain));
}
struct block_symbol other;
@@ -2281,8 +2326,8 @@ lookup_symbol_in_objfile_symtabs (struct objfile *objfile,
const struct block *block;
struct block_symbol result;
- bv = COMPUNIT_BLOCKVECTOR (cust);
- block = BLOCKVECTOR_BLOCK (bv, block_index);
+ bv = cust->blockvector ();
+ block = bv->block (block_index);
result.symbol = block_lookup_symbol_primary (block, name, domain);
result.block = block;
if (result.symbol == NULL)
@@ -2293,7 +2338,7 @@ lookup_symbol_in_objfile_symtabs (struct objfile *objfile,
break;
}
if (symbol_matches_domain (result.symbol->language (),
- SYMBOL_DOMAIN (result.symbol), domain))
+ result.symbol->domain (), domain))
{
struct symbol *better
= better_symbol (other.symbol, result.symbol, domain);
@@ -2309,16 +2354,16 @@ lookup_symbol_in_objfile_symtabs (struct objfile *objfile,
{
if (symbol_lookup_debug > 1)
{
- fprintf_unfiltered (gdb_stdlog, " = %s (block %s)\n",
- host_address_to_string (other.symbol),
- host_address_to_string (other.block));
+ gdb_printf (gdb_stdlog, " = %s (block %s)\n",
+ host_address_to_string (other.symbol),
+ host_address_to_string (other.block));
}
other.symbol = fixup_symbol_section (other.symbol, objfile);
return other;
}
if (symbol_lookup_debug > 1)
- fprintf_unfiltered (gdb_stdlog, " = NULL\n");
+ gdb_printf (gdb_stdlog, " = NULL\n");
return {};
}
@@ -2376,7 +2421,7 @@ Internal: %s symbol `%s' found in %s psymtab but not in symtab.\n\
(if a template, try specifying an instantiation: %s<type>)."),
block_index == GLOBAL_BLOCK ? "global" : "static",
name,
- symtab_to_filename_for_display (compunit_primary_filetab (cust)),
+ symtab_to_filename_for_display (cust->primary_filetab ()),
name, name);
}
@@ -2395,12 +2440,12 @@ lookup_symbol_via_quick_fns (struct objfile *objfile,
if (symbol_lookup_debug > 1)
{
- fprintf_unfiltered (gdb_stdlog,
- "lookup_symbol_via_quick_fns (%s, %s, %s, %s)\n",
- objfile_debug_name (objfile),
- block_index == GLOBAL_BLOCK
- ? "GLOBAL_BLOCK" : "STATIC_BLOCK",
- name, domain_name (domain));
+ gdb_printf (gdb_stdlog,
+ "lookup_symbol_via_quick_fns (%s, %s, %s, %s)\n",
+ objfile_debug_name (objfile),
+ block_index == GLOBAL_BLOCK
+ ? "GLOBAL_BLOCK" : "STATIC_BLOCK",
+ name, domain_name (domain));
}
cust = objfile->lookup_symbol (block_index, name, domain);
@@ -2408,14 +2453,14 @@ lookup_symbol_via_quick_fns (struct objfile *objfile,
{
if (symbol_lookup_debug > 1)
{
- fprintf_unfiltered (gdb_stdlog,
- "lookup_symbol_via_quick_fns (...) = NULL\n");
+ gdb_printf (gdb_stdlog,
+ "lookup_symbol_via_quick_fns (...) = NULL\n");
}
return {};
}
- bv = COMPUNIT_BLOCKVECTOR (cust);
- block = BLOCKVECTOR_BLOCK (bv, block_index);
+ bv = cust->blockvector ();
+ block = bv->block (block_index);
result.symbol = block_lookup_symbol (block, name,
symbol_name_match_type::FULL, domain);
if (result.symbol == NULL)
@@ -2423,10 +2468,10 @@ lookup_symbol_via_quick_fns (struct objfile *objfile,
if (symbol_lookup_debug > 1)
{
- fprintf_unfiltered (gdb_stdlog,
- "lookup_symbol_via_quick_fns (...) = %s (block %s)\n",
- host_address_to_string (result.symbol),
- host_address_to_string (block));
+ gdb_printf (gdb_stdlog,
+ "lookup_symbol_via_quick_fns (...) = %s (block %s)\n",
+ host_address_to_string (result.symbol),
+ host_address_to_string (block));
}
result.symbol = fixup_symbol_section (result.symbol, objfile);
@@ -2493,13 +2538,13 @@ lookup_symbol_in_static_block (const char *name,
struct objfile *objfile = (block == nullptr
? nullptr : block_objfile (block));
- fprintf_unfiltered (gdb_stdlog,
- "lookup_symbol_in_static_block (%s, %s (objfile %s),"
- " %s)\n",
- name,
- host_address_to_string (block),
- objfile_debug_name (objfile),
- domain_name (domain));
+ gdb_printf (gdb_stdlog,
+ "lookup_symbol_in_static_block (%s, %s (objfile %s),"
+ " %s)\n",
+ name,
+ host_address_to_string (block),
+ objfile_debug_name (objfile),
+ domain_name (domain));
}
sym = lookup_symbol_in_block (name,
@@ -2507,9 +2552,9 @@ lookup_symbol_in_static_block (const char *name,
static_block, domain);
if (symbol_lookup_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "lookup_symbol_in_static_block (...) = %s\n",
- sym != NULL ? host_address_to_string (sym) : "NULL");
+ gdb_printf (gdb_stdlog,
+ "lookup_symbol_in_static_block (...) = %s\n",
+ sym != NULL ? host_address_to_string (sym) : "NULL");
}
return (struct block_symbol) {sym, static_block};
}
@@ -2529,12 +2574,12 @@ lookup_symbol_in_objfile (struct objfile *objfile, enum block_enum block_index,
if (symbol_lookup_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "lookup_symbol_in_objfile (%s, %s, %s, %s)\n",
- objfile_debug_name (objfile),
- block_index == GLOBAL_BLOCK
- ? "GLOBAL_BLOCK" : "STATIC_BLOCK",
- name, domain_name (domain));
+ gdb_printf (gdb_stdlog,
+ "lookup_symbol_in_objfile (%s, %s, %s, %s)\n",
+ objfile_debug_name (objfile),
+ block_index == GLOBAL_BLOCK
+ ? "GLOBAL_BLOCK" : "STATIC_BLOCK",
+ name, domain_name (domain));
}
result = lookup_symbol_in_objfile_symtabs (objfile, block_index,
@@ -2543,10 +2588,10 @@ lookup_symbol_in_objfile (struct objfile *objfile, enum block_enum block_index,
{
if (symbol_lookup_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "lookup_symbol_in_objfile (...) = %s"
- " (in symtabs)\n",
- host_address_to_string (result.symbol));
+ gdb_printf (gdb_stdlog,
+ "lookup_symbol_in_objfile (...) = %s"
+ " (in symtabs)\n",
+ host_address_to_string (result.symbol));
}
return result;
}
@@ -2555,12 +2600,12 @@ lookup_symbol_in_objfile (struct objfile *objfile, enum block_enum block_index,
name, domain);
if (symbol_lookup_debug)
{
- fprintf_unfiltered (gdb_stdlog,
- "lookup_symbol_in_objfile (...) = %s%s\n",
- result.symbol != NULL
- ? host_address_to_string (result.symbol)
- : "NULL",
- result.symbol != NULL ? " (via quick fns)" : "");
+ gdb_printf (gdb_stdlog,
+ "lookup_symbol_in_objfile (...) = %s%s\n",
+ result.symbol != NULL
+ ? host_address_to_string (result.symbol)
+ : "NULL",
+ result.symbol != NULL ? " (via quick fns)" : "");
}
return result;
}
@@ -2764,14 +2809,14 @@ basic_lookup_transparent_type_quick (struct objfile *objfile,
if (cust == NULL)
return NULL;
- bv = COMPUNIT_BLOCKVECTOR (cust);
- block = BLOCKVECTOR_BLOCK (bv, block_index);
+ bv = cust->blockvector ();
+ block = bv->block (block_index);
sym = block_find_symbol (block, name, STRUCT_DOMAIN,
block_find_non_opaque_type, NULL);
if (sym == NULL)
error_in_psymtab_expansion (block_index, name, cust);
- gdb_assert (!TYPE_IS_OPAQUE (SYMBOL_TYPE (sym)));
- return SYMBOL_TYPE (sym);
+ gdb_assert (!TYPE_IS_OPAQUE (sym->type ()));
+ return sym->type ();
}
/* Subroutine of basic_lookup_transparent_type to simplify it.
@@ -2789,14 +2834,14 @@ basic_lookup_transparent_type_1 (struct objfile *objfile,
for (compunit_symtab *cust : objfile->compunits ())
{
- bv = COMPUNIT_BLOCKVECTOR (cust);
- block = BLOCKVECTOR_BLOCK (bv, block_index);
+ bv = cust->blockvector ();
+ block = bv->block (block_index);
sym = block_find_symbol (block, name, STRUCT_DOMAIN,
block_find_non_opaque_type, NULL);
if (sym != NULL)
{
- gdb_assert (!TYPE_IS_OPAQUE (SYMBOL_TYPE (sym)));
- return SYMBOL_TYPE (sym);
+ gdb_assert (!TYPE_IS_OPAQUE (sym->type ()));
+ return sym->type ();
}
}
@@ -2870,7 +2915,7 @@ iterate_over_symbols (const struct block *block,
ALL_BLOCK_SYMBOLS_WITH_NAME (block, name, iter, sym)
{
- if (symbol_matches_domain (sym->language (), SYMBOL_DOMAIN (sym), domain))
+ if (symbol_matches_domain (sym->language (), sym->domain (), domain))
{
struct block_symbol block_sym = {sym, block};
@@ -2934,18 +2979,17 @@ find_pc_sect_compunit_symtab (CORE_ADDR pc, struct obj_section *section)
{
for (compunit_symtab *cust : obj_file->compunits ())
{
- const struct blockvector *bv = COMPUNIT_BLOCKVECTOR (cust);
- const struct block *global_block
- = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
- CORE_ADDR start = BLOCK_START (global_block);
- CORE_ADDR end = BLOCK_END (global_block);
+ const struct blockvector *bv = cust->blockvector ();
+ const struct block *global_block = bv->global_block ();
+ CORE_ADDR start = global_block->start ();
+ CORE_ADDR end = global_block->end ();
bool in_range_p = start <= pc && pc < end;
if (!in_range_p)
continue;
- if (BLOCKVECTOR_MAP (bv))
+ if (bv->map () != nullptr)
{
- if (addrmap_find (BLOCKVECTOR_MAP (bv), pc) == nullptr)
+ if (addrmap_find (bv->map (), pc) == nullptr)
continue;
return cust;
@@ -2985,7 +3029,7 @@ find_pc_sect_compunit_symtab (CORE_ADDR pc, struct obj_section *section)
b_index <= STATIC_BLOCK && sym == NULL;
++b_index)
{
- const struct block *b = BLOCKVECTOR_BLOCK (bv, b_index);
+ const struct block *b = bv->block (b_index);
ALL_BLOCK_SYMBOLS (b, iter, sym)
{
fixup_symbol_section (sym, obj_file);
@@ -3040,18 +3084,18 @@ find_symbol_at_address (CORE_ADDR address)
ADDR. */
auto search_symtab = [] (compunit_symtab *symtab, CORE_ADDR addr) -> symbol *
{
- const struct blockvector *bv = COMPUNIT_BLOCKVECTOR (symtab);
+ const struct blockvector *bv = symtab->blockvector ();
for (int i = GLOBAL_BLOCK; i <= STATIC_BLOCK; ++i)
{
- const struct block *b = BLOCKVECTOR_BLOCK (bv, i);
+ const struct block *b = bv->block (i);
struct block_iterator iter;
struct symbol *sym;
ALL_BLOCK_SYMBOLS (b, iter, sym)
{
- if (SYMBOL_CLASS (sym) == LOC_STATIC
- && SYMBOL_VALUE_ADDRESS (sym) == addr)
+ if (sym->aclass () == LOC_STATIC
+ && sym->value_address () == addr)
return sym;
}
}
@@ -3193,7 +3237,7 @@ find_pc_sect_line (CORE_ADDR pc, struct obj_section *section, int notcurrent)
*/
msymbol = lookup_minimal_symbol_by_pc (pc);
if (msymbol.minsym != NULL)
- if (MSYMBOL_TYPE (msymbol.minsym) == mst_solib_trampoline)
+ if (msymbol.minsym->type () == mst_solib_trampoline)
{
struct bound_minimal_symbol mfunsym
= lookup_minimal_symbol_text (msymbol.minsym->linkage_name (),
@@ -3213,8 +3257,8 @@ find_pc_sect_line (CORE_ADDR pc, struct obj_section *section, int notcurrent)
msymbol->linkage_name ()); */
;
/* fall through */
- else if (BMSYMBOL_VALUE_ADDRESS (mfunsym)
- == BMSYMBOL_VALUE_ADDRESS (msymbol))
+ else if (mfunsym.value_address ()
+ == msymbol.value_address ())
/* Avoid infinite recursion */
/* See above comment about why warning is commented out. */
/* warning ("In stub for %s; unable to find real function/line info",
@@ -3226,12 +3270,12 @@ find_pc_sect_line (CORE_ADDR pc, struct obj_section *section, int notcurrent)
/* Detect an obvious case of infinite recursion. If this
should occur, we'd like to know about it, so error out,
fatally. */
- if (BMSYMBOL_VALUE_ADDRESS (mfunsym) == pc)
+ if (mfunsym.value_address () == pc)
internal_error (__FILE__, __LINE__,
_("Infinite recursion detected in find_pc_sect_line;"
"please file a bug report"));
- return find_pc_line (BMSYMBOL_VALUE_ADDRESS (mfunsym), 0);
+ return find_pc_line (mfunsym.value_address (), 0);
}
}
@@ -3248,16 +3292,16 @@ find_pc_sect_line (CORE_ADDR pc, struct obj_section *section, int notcurrent)
return val;
}
- bv = COMPUNIT_BLOCKVECTOR (cust);
+ bv = cust->blockvector ();
/* Look at all the symtabs that share this blockvector.
They all have the same apriori range, that we found was right;
but they have different line tables. */
- for (symtab *iter_s : compunit_filetabs (cust))
+ for (symtab *iter_s : cust->filetabs ())
{
/* Find the best line in this symtab. */
- l = SYMTAB_LINETABLE (iter_s);
+ l = iter_s->linetable ();
if (!l)
continue;
len = l->nitems;
@@ -3361,7 +3405,7 @@ find_pc_sect_line (CORE_ADDR pc, struct obj_section *section, int notcurrent)
else if (alt)
val.end = alt->pc;
else
- val.end = BLOCK_END (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK));
+ val.end = bv->global_block ()->end ();
}
val.section = section;
return val;
@@ -3426,7 +3470,7 @@ find_line_symtab (struct symtab *sym_tab, int line,
struct symtab *best_symtab;
/* First try looking it up in the given symtab. */
- best_linetable = SYMTAB_LINETABLE (sym_tab);
+ best_linetable = sym_tab->linetable ();
best_symtab = sym_tab;
best_index = find_line_common (best_linetable, line, &exact, 0);
if (best_index < 0 || !exact)
@@ -3455,7 +3499,7 @@ find_line_symtab (struct symtab *sym_tab, int line,
{
for (compunit_symtab *cu : objfile->compunits ())
{
- for (symtab *s : compunit_filetabs (cu))
+ for (symtab *s : cu->filetabs ())
{
struct linetable *l;
int ind;
@@ -3465,7 +3509,7 @@ find_line_symtab (struct symtab *sym_tab, int line,
if (FILENAME_CMP (symtab_to_fullname (sym_tab),
symtab_to_fullname (s)) != 0)
continue;
- l = SYMTAB_LINETABLE (s);
+ l = s->linetable ();
ind = find_line_common (l, line, &exact, 0);
if (ind >= 0)
{
@@ -3517,14 +3561,14 @@ find_pcs_for_symtab_line (struct symtab *symtab, int line,
int was_exact;
int idx;
- idx = find_line_common (SYMTAB_LINETABLE (symtab), line, &was_exact,
+ idx = find_line_common (symtab->linetable (), line, &was_exact,
start);
if (idx < 0)
break;
if (!was_exact)
{
- struct linetable_entry *item = &SYMTAB_LINETABLE (symtab)->item[idx];
+ struct linetable_entry *item = &symtab->linetable ()->item[idx];
if (*best_item == NULL
|| (item->line < (*best_item)->line && item->is_stmt))
@@ -3533,7 +3577,7 @@ find_pcs_for_symtab_line (struct symtab *symtab, int line,
break;
}
- result.push_back (SYMTAB_LINETABLE (symtab)->item[idx].pc);
+ result.push_back (symtab->linetable ()->item[idx].pc);
start = idx + 1;
}
@@ -3558,7 +3602,7 @@ find_line_pc (struct symtab *symtab, int line, CORE_ADDR *pc)
symtab = find_line_symtab (symtab, line, &ind, NULL);
if (symtab != NULL)
{
- l = SYMTAB_LINETABLE (symtab);
+ l = symtab->linetable ();
*pc = l->item[ind].pc;
return true;
}
@@ -3681,10 +3725,10 @@ find_function_start_sal_1 (CORE_ADDR func_addr, obj_section *section,
symtab_and_line sal = find_pc_sect_line (func_addr, section, 0);
if (funfirstline && sal.symtab != NULL
- && (COMPUNIT_LOCATIONS_VALID (SYMTAB_COMPUNIT (sal.symtab))
- || SYMTAB_LANGUAGE (sal.symtab) == language_asm))
+ && (sal.symtab->compunit ()->locations_valid ()
+ || sal.symtab->language () == language_asm))
{
- struct gdbarch *gdbarch = SYMTAB_OBJFILE (sal.symtab)->arch ();
+ struct gdbarch *gdbarch = sal.symtab->compunit ()->objfile ()->arch ();
sal.pc = func_addr;
if (gdbarch_skip_entrypoint_p (gdbarch))
@@ -3734,8 +3778,8 @@ find_function_start_sal (symbol *sym, bool funfirstline)
{
fixup_symbol_section (sym, NULL);
symtab_and_line sal
- = find_function_start_sal_1 (BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (sym)),
- sym->obj_section (symbol_objfile (sym)),
+ = find_function_start_sal_1 (sym->value_block ()->entry_pc (),
+ sym->obj_section (sym->objfile ()),
funfirstline);
sal.symbol = sym;
return sal;
@@ -3755,7 +3799,7 @@ skip_prologue_using_lineinfo (CORE_ADDR func_addr, struct symtab *symtab)
int i;
/* Give up if this symbol has no lineinfo table. */
- l = SYMTAB_LINETABLE (symtab);
+ l = symtab->linetable ();
if (l == NULL)
return func_addr;
@@ -3782,6 +3826,44 @@ skip_prologue_using_lineinfo (CORE_ADDR func_addr, struct symtab *symtab)
return func_addr;
}
+/* Try to locate the address where a breakpoint should be placed past the
+ prologue of function starting at FUNC_ADDR using the line table.
+
+ Return the address associated with the first entry in the line-table for
+ the function starting at FUNC_ADDR which has prologue_end set to true if
+ such entry exist, otherwise return an empty optional. */
+
+static gdb::optional<CORE_ADDR>
+skip_prologue_using_linetable (CORE_ADDR func_addr)
+{
+ CORE_ADDR start_pc, end_pc;
+
+ if (!find_pc_partial_function (func_addr, nullptr, &start_pc, &end_pc))
+ return {};
+
+ const struct symtab_and_line prologue_sal = find_pc_line (start_pc, 0);
+ if (prologue_sal.symtab != nullptr
+ && prologue_sal.symtab->language () != language_asm)
+ {
+ struct linetable *linetable = prologue_sal.symtab->linetable ();
+
+ auto it = std::lower_bound
+ (linetable->item, linetable->item + linetable->nitems, start_pc,
+ [] (const linetable_entry &lte, CORE_ADDR pc) -> bool
+ {
+ return lte.pc < pc;
+ });
+
+ for (;
+ it < linetable->item + linetable->nitems && it->pc <= end_pc;
+ it++)
+ if (it->prologue_end)
+ return {it->pc};
+ }
+
+ return {};
+}
+
/* Adjust SAL to the first instruction past the function prologue.
If the PC was explicitly specified, the SAL is not changed.
If the line number was explicitly specified then the SAL can still be
@@ -3812,7 +3894,7 @@ skip_prologue_sal (struct symtab_and_line *sal)
is likely to be the wrong choice. */
if (sal->symtab != nullptr
&& sal->explicit_line
- && SYMTAB_LANGUAGE (sal->symtab) == language_asm)
+ && sal->symtab->language () == language_asm)
return;
scoped_restore_current_pspace_and_thread restore_pspace_thread;
@@ -3824,8 +3906,8 @@ skip_prologue_sal (struct symtab_and_line *sal)
{
fixup_symbol_section (sym, NULL);
- objfile = symbol_objfile (sym);
- pc = BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (sym));
+ objfile = sym->objfile ();
+ pc = sym->value_block ()->entry_pc ();
section = sym->obj_section (objfile);
name = sym->linkage_name ();
}
@@ -3838,7 +3920,7 @@ skip_prologue_sal (struct symtab_and_line *sal)
return;
objfile = msymbol.objfile;
- pc = BMSYMBOL_VALUE_ADDRESS (msymbol);
+ pc = msymbol.value_address ();
section = msymbol.minsym->obj_section (objfile);
name = msymbol.minsym->linkage_name ();
}
@@ -3857,7 +3939,7 @@ skip_prologue_sal (struct symtab_and_line *sal)
have proven the CU (Compilation Unit) supports it. sal->SYMTAB does not
have to be set by the caller so we use SYM instead. */
if (sym != NULL
- && COMPUNIT_LOCATIONS_VALID (SYMTAB_COMPUNIT (symbol_symtab (sym))))
+ && sym->symtab ()->compunit ()->locations_valid ())
force_skip = 0;
saved_pc = pc;
@@ -3865,6 +3947,21 @@ skip_prologue_sal (struct symtab_and_line *sal)
{
pc = saved_pc;
+ /* Check if the compiler explicitly indicated where a breakpoint should
+ be placed to skip the prologue. */
+ if (!ignore_prologue_end_flag && skip)
+ {
+ gdb::optional<CORE_ADDR> linetable_pc
+ = skip_prologue_using_linetable (pc);
+ if (linetable_pc)
+ {
+ pc = *linetable_pc;
+ start_sal = find_pc_sect_line (pc, section, 0);
+ force_skip = 1;
+ continue;
+ }
+ }
+
/* If the function is in an unmapped overlay, use its unmapped LMA address,
so that gdbarch_skip_prologue has something unique to work on. */
if (section_is_overlay (section) && !section_is_mapped (section))
@@ -3886,8 +3983,8 @@ skip_prologue_sal (struct symtab_and_line *sal)
/* Check if gdbarch_skip_prologue left us in mid-line, and the next
line is still part of the same function. */
if (skip && start_sal.pc != pc
- && (sym ? (BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (sym)) <= start_sal.end
- && start_sal.end < BLOCK_END (SYMBOL_BLOCK_VALUE (sym)))
+ && (sym ? (sym->value_block ()->entry_pc () <= start_sal.end
+ && start_sal.end < sym->value_block()->end ())
: (lookup_minimal_symbol_by_pc_section (start_sal.end, section).minsym
== lookup_minimal_symbol_by_pc_section (pc, section).minsym)))
{
@@ -3922,7 +4019,7 @@ skip_prologue_sal (struct symtab_and_line *sal)
is aligned. */
if (!force_skip && sym && start_sal.symtab == NULL)
{
- pc = skip_prologue_using_lineinfo (pc, symbol_symtab (sym));
+ pc = skip_prologue_using_lineinfo (pc, sym->symtab ());
/* Recalculate the line number. */
start_sal = find_pc_sect_line (pc, section, 0);
}
@@ -3944,17 +4041,17 @@ skip_prologue_sal (struct symtab_and_line *sal)
function_block = NULL;
while (b != NULL)
{
- if (BLOCK_FUNCTION (b) != NULL && block_inlined_p (b))
+ if (b->function () != NULL && block_inlined_p (b))
function_block = b;
- else if (BLOCK_FUNCTION (b) != NULL)
+ else if (b->function () != NULL)
break;
- b = BLOCK_SUPERBLOCK (b);
+ b = b->superblock ();
}
if (function_block != NULL
- && SYMBOL_LINE (BLOCK_FUNCTION (function_block)) != 0)
+ && function_block->function ()->line () != 0)
{
- sal->line = SYMBOL_LINE (BLOCK_FUNCTION (function_block));
- sal->symtab = symbol_symtab (BLOCK_FUNCTION (function_block));
+ sal->line = function_block->function ()->line ();
+ sal->symtab = function_block->function ()->symtab ();
}
}
@@ -3995,9 +4092,9 @@ skip_prologue_using_sal (struct gdbarch *gdbarch, CORE_ADDR func_addr)
The GNU assembler emits separate line notes for each instruction
in a multi-instruction macro, but compilers generally will not
do this. */
- if (prologue_sal.symtab->language != language_asm)
+ if (prologue_sal.symtab->language () != language_asm)
{
- struct linetable *linetable = SYMTAB_LINETABLE (prologue_sal.symtab);
+ struct linetable *linetable = prologue_sal.symtab->linetable ();
int idx = 0;
/* Skip any earlier lines, and any end-of-sequence marker
@@ -4042,12 +4139,12 @@ skip_prologue_using_sal (struct gdbarch *gdbarch, CORE_ADDR func_addr)
{
if (block_inlined_p (bl))
break;
- if (BLOCK_FUNCTION (bl))
+ if (bl->function ())
{
bl = NULL;
break;
}
- bl = BLOCK_SUPERBLOCK (bl);
+ bl = bl->superblock ();
}
if (bl != NULL)
break;
@@ -4083,8 +4180,8 @@ find_function_alias_target (bound_minimal_symbol msymbol)
symbol *sym = find_pc_function (func_addr);
if (sym != NULL
- && SYMBOL_CLASS (sym) == LOC_BLOCK
- && BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (sym)) == func_addr)
+ && sym->aclass () == LOC_BLOCK
+ && sym->value_block ()->entry_pc () == func_addr)
return sym;
return NULL;
@@ -4380,7 +4477,7 @@ output_source_filename_data::output (const char *disp_name,
m_uiout->text (", ");
m_first = false;
- wrap_here ("");
+ m_uiout->wrap_hint (0);
if (m_uiout->is_mi_like_p ())
{
m_uiout->field_string ("file", disp_name, file_name_style.style ());
@@ -4472,7 +4569,8 @@ info_sources_worker (struct ui_out *uiout,
if (group_by_objfile)
{
output_tuple.emplace (uiout, nullptr);
- uiout->field_string ("filename", objfile_name (objfile));
+ uiout->field_string ("filename", objfile_name (objfile),
+ file_name_style.style ());
uiout->text (":\n");
bool debug_fully_readin = !objfile->has_unexpanded_symtabs ();
if (uiout->is_mi_like_p ())
@@ -4503,7 +4601,7 @@ info_sources_worker (struct ui_out *uiout,
for (compunit_symtab *cu : objfile->compunits ())
{
- for (symtab *s : compunit_filetabs (cu))
+ for (symtab *s : cu->filetabs ())
{
const char *file = symtab_to_filename_for_display (s);
const char *fullname = symtab_to_fullname (s);
@@ -4593,8 +4691,8 @@ symbol_search::compare_search_syms (const symbol_search &sym_a,
{
int c;
- c = FILENAME_CMP (symbol_symtab (sym_a.symbol)->filename,
- symbol_symtab (sym_b.symbol)->filename);
+ c = FILENAME_CMP (sym_a.symbol->symtab ()->filename,
+ sym_b.symbol->symtab ()->filename);
if (c != 0)
return c;
@@ -4616,12 +4714,12 @@ treg_matches_sym_type_name (const compiled_regex &treg,
if (symbol_lookup_debug > 1)
{
- fprintf_unfiltered (gdb_stdlog,
- "treg_matches_sym_type_name\n sym %s\n",
- sym->natural_name ());
+ gdb_printf (gdb_stdlog,
+ "treg_matches_sym_type_name\n sym %s\n",
+ sym->natural_name ());
}
- sym_type = SYMBOL_TYPE (sym);
+ sym_type = sym->type ();
if (sym_type == NULL)
return false;
@@ -4634,9 +4732,9 @@ treg_matches_sym_type_name (const compiled_regex &treg,
if (symbol_lookup_debug > 1)
{
- fprintf_unfiltered (gdb_stdlog,
- " sym_type_name %s\n",
- printed_sym_type_name.c_str ());
+ gdb_printf (gdb_stdlog,
+ " sym_type_name %s\n",
+ printed_sym_type_name.c_str ());
}
@@ -4652,7 +4750,7 @@ bool
global_symbol_searcher::is_suitable_msymbol
(const enum search_domain kind, const minimal_symbol *msymbol)
{
- switch (MSYMBOL_TYPE (msymbol))
+ switch (msymbol->type ())
{
case mst_data:
case mst_bss:
@@ -4736,8 +4834,7 @@ global_symbol_searcher::expand_symtabs
the symbols tables are expanded. */
if (kind == FUNCTIONS_DOMAIN
? (find_pc_compunit_symtab
- (MSYMBOL_VALUE_ADDRESS (objfile, msymbol))
- == NULL)
+ (msymbol->value_address (objfile)) == NULL)
: (lookup_symbol_in_objfile_from_linkage_name
(objfile, msymbol->linkage_name (),
VAR_DOMAIN)
@@ -4765,17 +4862,17 @@ global_symbol_searcher::add_matching_symbols
/* Add matching symbols (if not already present). */
for (compunit_symtab *cust : objfile->compunits ())
{
- const struct blockvector *bv = COMPUNIT_BLOCKVECTOR (cust);
+ const struct blockvector *bv = cust->blockvector ();
for (block_enum block : { GLOBAL_BLOCK, STATIC_BLOCK })
{
struct block_iterator iter;
struct symbol *sym;
- const struct block *b = BLOCKVECTOR_BLOCK (bv, block);
+ const struct block *b = bv->block (block);
ALL_BLOCK_SYMBOLS (b, iter, sym)
{
- struct symtab *real_symtab = symbol_symtab (sym);
+ struct symtab *real_symtab = sym->symtab ();
QUIT;
@@ -4792,29 +4889,29 @@ global_symbol_searcher::add_matching_symbols
|| preg->exec (sym->natural_name (), 0,
NULL, 0) == 0)
&& ((kind == VARIABLES_DOMAIN
- && SYMBOL_CLASS (sym) != LOC_TYPEDEF
- && SYMBOL_CLASS (sym) != LOC_UNRESOLVED
- && SYMBOL_CLASS (sym) != LOC_BLOCK
+ && sym->aclass () != LOC_TYPEDEF
+ && sym->aclass () != LOC_UNRESOLVED
+ && sym->aclass () != LOC_BLOCK
/* LOC_CONST can be used for more than
just enums, e.g., c++ static const
members. We only want to skip enums
here. */
- && !(SYMBOL_CLASS (sym) == LOC_CONST
- && (SYMBOL_TYPE (sym)->code ()
+ && !(sym->aclass () == LOC_CONST
+ && (sym->type ()->code ()
== TYPE_CODE_ENUM))
&& (!treg.has_value ()
|| treg_matches_sym_type_name (*treg, sym)))
|| (kind == FUNCTIONS_DOMAIN
- && SYMBOL_CLASS (sym) == LOC_BLOCK
+ && sym->aclass () == LOC_BLOCK
&& (!treg.has_value ()
|| treg_matches_sym_type_name (*treg,
sym)))
|| (kind == TYPES_DOMAIN
- && SYMBOL_CLASS (sym) == LOC_TYPEDEF
- && SYMBOL_DOMAIN (sym) != MODULE_DOMAIN)
+ && sym->aclass () == LOC_TYPEDEF
+ && sym->domain () != MODULE_DOMAIN)
|| (kind == MODULES_DOMAIN
- && SYMBOL_DOMAIN (sym) == MODULE_DOMAIN
- && SYMBOL_LINE (sym) != 0))))
+ && sym->domain () == MODULE_DOMAIN
+ && sym->line () != 0))))
{
if (result_set->size () < m_max_search_results)
{
@@ -4859,8 +4956,7 @@ global_symbol_searcher::add_matching_msymbols
symbol might be found via find_pc_symtab. */
if (kind != FUNCTIONS_DOMAIN
|| (find_pc_compunit_symtab
- (MSYMBOL_VALUE_ADDRESS (objfile, msymbol))
- == NULL))
+ (msymbol->value_address (objfile)) == NULL))
{
if (lookup_symbol_in_objfile_from_linkage_name
(objfile, msymbol->linkage_name (),
@@ -4994,7 +5090,7 @@ symbol_to_info_string (struct symbol *sym, int block,
/* Typedef that is not a C++ class. */
if (kind == TYPES_DOMAIN
- && SYMBOL_DOMAIN (sym) != STRUCT_DOMAIN)
+ && sym->domain () != STRUCT_DOMAIN)
{
string_file tmp_stream;
@@ -5006,21 +5102,21 @@ symbol_to_info_string (struct symbol *sym, int block,
For the struct printing case below, things are worse, we force
printing of the ";" in this function, which is going to be wrong
for languages that don't require a ";" between statements. */
- if (SYMBOL_TYPE (sym)->code () == TYPE_CODE_TYPEDEF)
- typedef_print (SYMBOL_TYPE (sym), sym, &tmp_stream);
+ if (sym->type ()->code () == TYPE_CODE_TYPEDEF)
+ typedef_print (sym->type (), sym, &tmp_stream);
else
- type_print (SYMBOL_TYPE (sym), "", &tmp_stream, -1);
+ type_print (sym->type (), "", &tmp_stream, -1);
str += tmp_stream.string ();
}
/* variable, func, or typedef-that-is-c++-class. */
else if (kind < TYPES_DOMAIN
|| (kind == TYPES_DOMAIN
- && SYMBOL_DOMAIN (sym) == STRUCT_DOMAIN))
+ && sym->domain () == STRUCT_DOMAIN))
{
string_file tmp_stream;
- type_print (SYMBOL_TYPE (sym),
- (SYMBOL_CLASS (sym) == LOC_TYPEDEF
+ type_print (sym->type (),
+ (sym->aclass () == LOC_TYPEDEF
? "" : sym->print_name ()),
&tmp_stream, 0);
@@ -5049,7 +5145,7 @@ print_symbol_info (enum search_domain kind,
int block, const char *last)
{
scoped_switch_to_sym_language_if_auto l (sym);
- struct symtab *s = symbol_symtab (sym);
+ struct symtab *s = sym->symtab ();
if (last != NULL)
{
@@ -5057,19 +5153,19 @@ print_symbol_info (enum search_domain kind,
if (filename_cmp (last, s_filename) != 0)
{
- printf_filtered (_("\nFile %ps:\n"),
- styled_string (file_name_style.style (),
- s_filename));
+ gdb_printf (_("\nFile %ps:\n"),
+ styled_string (file_name_style.style (),
+ s_filename));
}
- if (SYMBOL_LINE (sym) != 0)
- printf_filtered ("%d:\t", SYMBOL_LINE (sym));
+ if (sym->line () != 0)
+ gdb_printf ("%d:\t", sym->line ());
else
- puts_filtered ("\t");
+ gdb_puts ("\t");
}
std::string str = symbol_to_info_string (sym, block, kind);
- printf_filtered ("%s\n", str.c_str ());
+ gdb_printf ("%s\n", str.c_str ());
}
/* This help function for symtab_symbol_info() prints information
@@ -5082,20 +5178,20 @@ print_msymbol_info (struct bound_minimal_symbol msymbol)
char *tmp;
if (gdbarch_addr_bit (gdbarch) <= 32)
- tmp = hex_string_custom (BMSYMBOL_VALUE_ADDRESS (msymbol)
+ tmp = hex_string_custom (msymbol.value_address ()
& (CORE_ADDR) 0xffffffff,
8);
else
- tmp = hex_string_custom (BMSYMBOL_VALUE_ADDRESS (msymbol),
+ tmp = hex_string_custom (msymbol.value_address (),
16);
ui_file_style sym_style = (msymbol.minsym->text_p ()
? function_name_style.style ()
: ui_file_style ());
- printf_filtered (_("%ps %ps\n"),
- styled_string (address_style.style (), tmp),
- styled_string (sym_style, msymbol.minsym->print_name ()));
+ gdb_printf (_("%ps %ps\n"),
+ styled_string (address_style.style (), tmp),
+ styled_string (sym_style, msymbol.minsym->print_name ()));
}
/* This is the guts of the commands "info functions", "info types", and
@@ -5128,23 +5224,23 @@ symtab_symbol_info (bool quiet, bool exclude_minsyms,
if (regexp != NULL)
{
if (t_regexp != NULL)
- printf_filtered
+ gdb_printf
(_("All %ss matching regular expression \"%s\""
" with type matching regular expression \"%s\":\n"),
classnames[kind], regexp, t_regexp);
else
- printf_filtered (_("All %ss matching regular expression \"%s\":\n"),
- classnames[kind], regexp);
+ gdb_printf (_("All %ss matching regular expression \"%s\":\n"),
+ classnames[kind], regexp);
}
else
{
if (t_regexp != NULL)
- printf_filtered
+ gdb_printf
(_("All defined %ss"
" with type matching regular expression \"%s\" :\n"),
classnames[kind], t_regexp);
else
- printf_filtered (_("All defined %ss:\n"), classnames[kind]);
+ gdb_printf (_("All defined %ss:\n"), classnames[kind]);
}
}
@@ -5157,7 +5253,7 @@ symtab_symbol_info (bool quiet, bool exclude_minsyms,
if (first)
{
if (!quiet)
- printf_filtered (_("\nNon-debugging symbols:\n"));
+ gdb_printf (_("\nNon-debugging symbols:\n"));
first = 0;
}
print_msymbol_info (p.msymbol);
@@ -5169,7 +5265,7 @@ symtab_symbol_info (bool quiet, bool exclude_minsyms,
p.block,
last_filename);
last_filename
- = symtab_to_filename_for_display (symbol_symtab (p.symbol));
+ = symtab_to_filename_for_display (p.symbol->symtab ());
}
}
}
@@ -5389,7 +5485,7 @@ rbreak_command (const char *regexp, int from_tty)
{
if (p.msymbol.minsym == NULL)
{
- struct symtab *symtab = symbol_symtab (p.symbol);
+ struct symtab *symtab = p.symbol->symtab ();
const char *fullname = symtab_to_fullname (symtab);
string = string_printf ("%s:'%s'", fullname,
@@ -5403,8 +5499,8 @@ rbreak_command (const char *regexp, int from_tty)
p.msymbol.minsym->linkage_name ());
break_command (&string[0], from_tty);
- printf_filtered ("<function, no debug info> %s;\n",
- p.msymbol.minsym->print_name ());
+ gdb_printf ("<function, no debug info> %s;\n",
+ p.msymbol.minsym->print_name ());
}
}
}
@@ -5489,8 +5585,8 @@ completion_list_add_symbol (completion_tracker &tracker,
the msymbol name and removes the msymbol name from the completion
tracker. */
if (sym->language () == language_cplus
- && SYMBOL_DOMAIN (sym) == VAR_DOMAIN
- && SYMBOL_CLASS (sym) == LOC_BLOCK)
+ && sym->domain () == VAR_DOMAIN
+ && sym->aclass () == LOC_BLOCK)
{
/* The call to canonicalize returns the empty string if the input
string is already in canonical form, thanks to this we don't
@@ -5635,9 +5731,9 @@ completion_list_add_fields (completion_tracker &tracker,
const lookup_name_info &lookup_name,
const char *text, const char *word)
{
- if (SYMBOL_CLASS (sym) == LOC_TYPEDEF)
+ if (sym->aclass () == LOC_TYPEDEF)
{
- struct type *t = SYMBOL_TYPE (sym);
+ struct type *t = sym->type ();
enum type_code c = t->code ();
int j;
@@ -5655,7 +5751,7 @@ completion_list_add_fields (completion_tracker &tracker,
bool
symbol_is_function_or_method (symbol *sym)
{
- switch (SYMBOL_TYPE (sym)->code ())
+ switch (sym->type ()->code ())
{
case TYPE_CODE_FUNC:
case TYPE_CODE_METHOD:
@@ -5670,7 +5766,7 @@ symbol_is_function_or_method (symbol *sym)
bool
symbol_is_function_or_method (minimal_symbol *msymbol)
{
- switch (MSYMBOL_TYPE (msymbol))
+ switch (msymbol->type ())
{
case mst_text:
case mst_text_gnu_ifunc:
@@ -5687,24 +5783,24 @@ symbol_is_function_or_method (minimal_symbol *msymbol)
bound_minimal_symbol
find_gnu_ifunc (const symbol *sym)
{
- if (SYMBOL_CLASS (sym) != LOC_BLOCK)
+ if (sym->aclass () != LOC_BLOCK)
return {};
lookup_name_info lookup_name (sym->search_name (),
symbol_name_match_type::SEARCH_NAME);
- struct objfile *objfile = symbol_objfile (sym);
+ struct objfile *objfile = sym->objfile ();
- CORE_ADDR address = BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (sym));
+ CORE_ADDR address = sym->value_block ()->entry_pc ();
minimal_symbol *ifunc = NULL;
iterate_over_minimal_symbols (objfile, lookup_name,
[&] (minimal_symbol *minsym)
{
- if (MSYMBOL_TYPE (minsym) == mst_text_gnu_ifunc
- || MSYMBOL_TYPE (minsym) == mst_data_gnu_ifunc)
+ if (minsym->type () == mst_text_gnu_ifunc
+ || minsym->type () == mst_data_gnu_ifunc)
{
- CORE_ADDR msym_addr = MSYMBOL_VALUE_ADDRESS (objfile, minsym);
- if (MSYMBOL_TYPE (minsym) == mst_data_gnu_ifunc)
+ CORE_ADDR msym_addr = minsym->value_address (objfile);
+ if (minsym->type () == mst_data_gnu_ifunc)
{
struct gdbarch *gdbarch = objfile->arch ();
msym_addr = gdbarch_convert_from_func_ptr_addr
@@ -5735,7 +5831,6 @@ add_symtab_completions (struct compunit_symtab *cust,
enum type_code code)
{
struct symbol *sym;
- const struct block *b;
struct block_iterator iter;
int i;
@@ -5745,15 +5840,16 @@ add_symtab_completions (struct compunit_symtab *cust,
for (i = GLOBAL_BLOCK; i <= STATIC_BLOCK; i++)
{
QUIT;
- b = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (cust), i);
+
+ const struct block *b = cust->blockvector ()->block (i);
ALL_BLOCK_SYMBOLS (b, iter, sym)
{
if (completion_skip_symbol (mode, sym))
continue;
if (code == TYPE_CODE_UNDEF
- || (SYMBOL_DOMAIN (sym) == STRUCT_DOMAIN
- && SYMBOL_TYPE (sym)->code () == code))
+ || (sym->domain () == STRUCT_DOMAIN
+ && sym->type ()->code () == code))
completion_list_add_symbol (tracker, sym,
lookup_name,
text, word);
@@ -5905,8 +6001,8 @@ default_collect_symbol_completion_matches_break_on
completion_list_add_fields (tracker, sym, lookup_name,
sym_text, word);
}
- else if (SYMBOL_DOMAIN (sym) == STRUCT_DOMAIN
- && SYMBOL_TYPE (sym)->code () == code)
+ else if (sym->domain () == STRUCT_DOMAIN
+ && sym->type ()->code () == code)
completion_list_add_symbol (tracker, sym, lookup_name,
sym_text, word);
}
@@ -5914,9 +6010,9 @@ default_collect_symbol_completion_matches_break_on
/* Stop when we encounter an enclosing function. Do not stop for
non-inlined functions - the locals of the enclosing function
are in scope for a nested function. */
- if (BLOCK_FUNCTION (b) != NULL && block_inlined_p (b))
+ if (b->function () != NULL && block_inlined_p (b))
break;
- b = BLOCK_SUPERBLOCK (b);
+ b = b->superblock ();
}
/* Add fields from the file's types; symbols will be added below. */
@@ -6067,7 +6163,7 @@ collect_file_symbol_completion_matches (completion_tracker &tracker,
for symbols which match. */
iterate_over_symtabs (srcfile, [&] (symtab *s)
{
- add_symtab_completions (SYMTAB_COMPUNIT (s),
+ add_symtab_completions (s->compunit (),
tracker, mode, lookup_name,
sym_text, word, TYPE_CODE_UNDEF);
return false;
@@ -6162,7 +6258,7 @@ make_source_files_completion_list (const char *text, const char *word)
{
for (compunit_symtab *cu : objfile->compunits ())
{
- for (symtab *s : compunit_filetabs (cu))
+ for (symtab *s : cu->filetabs ())
{
if (not_interesting_fname (s->filename))
continue;
@@ -6405,7 +6501,7 @@ static struct symbol_impl symbol_impl[MAX_SYMBOL_IMPLS];
/* The globally visible pointer. This is separate from 'symbol_impl'
so that it can be const. */
-const struct symbol_impl *symbol_impls = &symbol_impl[0];
+gdb::array_view<const struct symbol_impl> symbol_impls (symbol_impl);
/* Make sure we saved enough room in struct symbol. */
@@ -6496,38 +6592,38 @@ initialize_ordinary_address_classes (void)
/* See symtab.h. */
struct objfile *
-symbol_objfile (const struct symbol *symbol)
+symbol::objfile () const
{
- gdb_assert (SYMBOL_OBJFILE_OWNED (symbol));
- return SYMTAB_OBJFILE (symbol->owner.symtab);
+ gdb_assert (is_objfile_owned ());
+ return owner.symtab->compunit ()->objfile ();
}
/* See symtab.h. */
struct gdbarch *
-symbol_arch (const struct symbol *symbol)
+symbol::arch () const
{
- if (!SYMBOL_OBJFILE_OWNED (symbol))
- return symbol->owner.arch;
- return SYMTAB_OBJFILE (symbol->owner.symtab)->arch ();
+ if (!is_objfile_owned ())
+ return owner.arch;
+ return owner.symtab->compunit ()->objfile ()->arch ();
}
/* See symtab.h. */
struct symtab *
-symbol_symtab (const struct symbol *symbol)
+symbol::symtab () const
{
- gdb_assert (SYMBOL_OBJFILE_OWNED (symbol));
- return symbol->owner.symtab;
+ gdb_assert (is_objfile_owned ());
+ return owner.symtab;
}
/* See symtab.h. */
void
-symbol_set_symtab (struct symbol *symbol, struct symtab *symtab)
+symbol::set_symtab (struct symtab *symtab)
{
- gdb_assert (SYMBOL_OBJFILE_OWNED (symbol));
- symbol->owner.symtab = symtab;
+ gdb_assert (is_objfile_owned ());
+ owner.symtab = symtab;
}
/* See symtab.h. */
@@ -6536,7 +6632,7 @@ CORE_ADDR
get_symbol_address (const struct symbol *sym)
{
gdb_assert (sym->maybe_copied);
- gdb_assert (SYMBOL_CLASS (sym) == LOC_STATIC);
+ gdb_assert (sym->aclass () == LOC_STATIC);
const char *linkage_name = sym->linkage_name ();
@@ -6548,9 +6644,9 @@ get_symbol_address (const struct symbol *sym)
bound_minimal_symbol minsym
= lookup_minimal_symbol_linkage (linkage_name, objfile);
if (minsym.minsym != nullptr)
- return BMSYMBOL_VALUE_ADDRESS (minsym);
+ return minsym.value_address ();
}
- return sym->value.address;
+ return sym->m_value.address;
}
/* See symtab.h. */
@@ -6571,10 +6667,10 @@ get_msymbol_address (struct objfile *objf, const struct minimal_symbol *minsym)
bound_minimal_symbol found
= lookup_minimal_symbol_linkage (linkage_name, objfile);
if (found.minsym != nullptr)
- return BMSYMBOL_VALUE_ADDRESS (found);
+ return found.value_address ();
}
}
- return (minsym->value.address
+ return (minsym->m_value.address
+ objf->section_offsets[minsym->section_index ()]);
}
@@ -6650,11 +6746,11 @@ info_module_subcommand (bool quiet, const char *module_regexp,
if (type_regexp == nullptr)
{
if (regexp == nullptr)
- printf_filtered ((kind == VARIABLES_DOMAIN
- ? _("All variables in all modules:")
- : _("All functions in all modules:")));
+ gdb_printf ((kind == VARIABLES_DOMAIN
+ ? _("All variables in all modules:")
+ : _("All functions in all modules:")));
else
- printf_filtered
+ gdb_printf
((kind == VARIABLES_DOMAIN
? _("All variables matching regular expression"
" \"%s\" in all modules:")
@@ -6665,7 +6761,7 @@ info_module_subcommand (bool quiet, const char *module_regexp,
else
{
if (regexp == nullptr)
- printf_filtered
+ gdb_printf
((kind == VARIABLES_DOMAIN
? _("All variables with type matching regular "
"expression \"%s\" in all modules:")
@@ -6673,7 +6769,7 @@ info_module_subcommand (bool quiet, const char *module_regexp,
"expression \"%s\" in all modules:")),
type_regexp);
else
- printf_filtered
+ gdb_printf
((kind == VARIABLES_DOMAIN
? _("All variables matching regular expression "
"\"%s\",\n\twith type matching regular "
@@ -6689,7 +6785,7 @@ info_module_subcommand (bool quiet, const char *module_regexp,
if (type_regexp == nullptr)
{
if (regexp == nullptr)
- printf_filtered
+ gdb_printf
((kind == VARIABLES_DOMAIN
? _("All variables in all modules matching regular "
"expression \"%s\":")
@@ -6697,7 +6793,7 @@ info_module_subcommand (bool quiet, const char *module_regexp,
"expression \"%s\":")),
module_regexp);
else
- printf_filtered
+ gdb_printf
((kind == VARIABLES_DOMAIN
? _("All variables matching regular expression "
"\"%s\",\n\tin all modules matching regular "
@@ -6710,7 +6806,7 @@ info_module_subcommand (bool quiet, const char *module_regexp,
else
{
if (regexp == nullptr)
- printf_filtered
+ gdb_printf
((kind == VARIABLES_DOMAIN
? _("All variables with type matching regular "
"expression \"%s\"\n\tin all modules matching "
@@ -6720,7 +6816,7 @@ info_module_subcommand (bool quiet, const char *module_regexp,
"regular expression \"%s\":")),
type_regexp, module_regexp);
else
- printf_filtered
+ gdb_printf
((kind == VARIABLES_DOMAIN
? _("All variables matching regular expression "
"\"%s\",\n\twith type matching regular expression "
@@ -6733,7 +6829,7 @@ info_module_subcommand (bool quiet, const char *module_regexp,
regexp, type_regexp, module_regexp);
}
}
- printf_filtered ("\n");
+ gdb_printf ("\n");
}
/* Find all symbols of type KIND matching the given regular expressions
@@ -6764,8 +6860,8 @@ info_module_subcommand (bool quiet, const char *module_regexp,
if (last_module_symbol != p.symbol)
{
- printf_filtered ("\n");
- printf_filtered (_("Module \"%s\":\n"), p.symbol->print_name ());
+ gdb_printf ("\n");
+ gdb_printf (_("Module \"%s\":\n"), p.symbol->print_name ());
last_module_symbol = p.symbol;
last_filename = "";
}
@@ -6773,7 +6869,7 @@ info_module_subcommand (bool quiet, const char *module_regexp,
print_symbol_info (FUNCTIONS_DOMAIN, q.symbol, q.block,
last_filename);
last_filename
- = symtab_to_filename_for_display (symbol_symtab (q.symbol));
+ = symtab_to_filename_for_display (q.symbol->symtab ());
}
}
@@ -6895,17 +6991,6 @@ Prints the global and static variables.\n"),
_("global and static variables"),
true));
set_cmd_completer_handle_brkchars (c, info_vars_funcs_command_completer);
- if (dbx_commands)
- {
- c = add_com ("whereis", class_info, info_variables_command,
- info_print_args_help (_("\
-All global and static variable names, or those matching REGEXPs.\n\
-Usage: whereis [-q] [-n] [-t TYPEREGEXP] [NAMEREGEXP]\n\
-Prints the global and static variables.\n"),
- _("global and static variables"),
- true));
- set_cmd_completer_handle_brkchars (c, info_vars_funcs_command_completer);
- }
c = add_info ("functions", info_functions_command,
info_print_args_help (_("\
@@ -7034,6 +7119,19 @@ If zero then the symbol cache is disabled."),
&maintenance_set_cmdlist,
&maintenance_show_cmdlist);
+ add_setshow_boolean_cmd ("ignore-prologue-end-flag", no_class,
+ &ignore_prologue_end_flag,
+ _("Set if the PROLOGUE-END flag is ignored."),
+ _("Show if the PROLOGUE-END flag is ignored."),
+ _("\
+The PROLOGUE-END flag from the line-table entries is used to place \
+breakpoints past the prologue of functions. Disabeling its use use forces \
+the use of prologue scanners."),
+ nullptr, nullptr,
+ &maintenance_set_cmdlist,
+ &maintenance_show_cmdlist);
+
+
add_cmd ("symbol-cache", class_maintenance, maintenance_print_symbol_cache,
_("Dump the symbol cache for each program space."),
&maintenanceprintlist);
diff --git a/gdb/symtab.h b/gdb/symtab.h
index a17ee02163a..b1cf84f756f 100644
--- a/gdb/symtab.h
+++ b/gdb/symtab.h
@@ -26,8 +26,8 @@
#include <set>
#include "gdbsupport/gdb_vecs.h"
#include "gdbtypes.h"
-#include "gdb_obstack.h"
-#include "gdb_regex.h"
+#include "gdbsupport/gdb_obstack.h"
+#include "gdbsupport/gdb_regex.h"
#include "gdbsupport/enum-flags.h"
#include "gdbsupport/function-view.h"
#include "gdbsupport/gdb_optional.h"
@@ -36,6 +36,7 @@
#include "gdbsupport/iterator-range.h"
#include "completer.h"
#include "gdb-demangle.h"
+#include "split-name.h"
/* Opaque declarations. */
struct ui_file;
@@ -121,6 +122,21 @@ class ada_lookup_name_info final
bool verbatim_p () const
{ return m_verbatim_p; }
+ /* A wrapper for ::split_name that handles some Ada-specific
+ peculiarities. */
+ std::vector<gdb::string_view> split_name () const
+ {
+ if (m_verbatim_p || m_standard_p)
+ {
+ std::vector<gdb::string_view> result;
+ if (m_standard_p)
+ result.emplace_back ("standard");
+ result.emplace_back (m_encoded_name);
+ return result;
+ }
+ return ::split_name (m_encoded_name.c_str (), split_style::UNDERSCORE);
+ }
+
private:
/* The Ada-encoded lookup name. */
std::string m_encoded_name;
@@ -272,6 +288,27 @@ class lookup_name_info final
}
}
+ /* A wrapper for ::split_name (see split-name.h) that splits this
+ name, and that handles any language-specific peculiarities. */
+ std::vector<gdb::string_view> split_name (language lang) const
+ {
+ if (lang == language_ada)
+ return ada ().split_name ();
+ split_style style = split_style::NONE;
+ switch (lang)
+ {
+ case language_cplus:
+ case language_rust:
+ style = split_style::CXX;
+ break;
+ case language_d:
+ case language_go:
+ style = split_style::DOT;
+ break;
+ }
+ return ::split_name (language_lookup_name (lang), style);
+ }
+
/* Get the Ada-specific lookup info. */
const ada_lookup_name_info &ada () const
{
@@ -475,6 +512,16 @@ struct general_symbol_info
gdb::optional<hashval_t> hash
= gdb::optional<hashval_t> ());
+ CORE_ADDR value_address () const
+ {
+ return m_value.address;
+ }
+
+ void set_value_address (CORE_ADDR address)
+ {
+ m_value.address = address;
+ }
+
/* Name of the symbol. This is a required field. Storage for the
name is allocated on the objfile_obstack for the associated
objfile. For languages like C++ that make a distinction between
@@ -507,7 +554,7 @@ struct general_symbol_info
struct symbol *chain;
}
- value;
+ m_value;
/* Since one and only one language can apply, wrap the language specific
information inside a union. */
@@ -573,19 +620,6 @@ extern CORE_ADDR symbol_overlayed_address (CORE_ADDR, struct obj_section *);
extern CORE_ADDR get_symbol_address (const struct symbol *sym);
-/* Note that these macros only work with symbol, not partial_symbol. */
-
-#define SYMBOL_VALUE(symbol) (symbol)->value.ivalue
-#define SYMBOL_VALUE_ADDRESS(symbol) \
- (((symbol)->maybe_copied) ? get_symbol_address (symbol) \
- : ((symbol)->value.address))
-#define SET_SYMBOL_VALUE_ADDRESS(symbol, new_value) \
- ((symbol)->value.address = (new_value))
-#define SYMBOL_VALUE_BYTES(symbol) (symbol)->value.bytes
-#define SYMBOL_VALUE_COMMON_BLOCK(symbol) (symbol)->value.common_block
-#define SYMBOL_BLOCK_VALUE(symbol) (symbol)->value.block
-#define SYMBOL_VALUE_CHAIN(symbol) (symbol)->value.chain
-
/* Try to determine the demangled name for a symbol, based on the
language of that symbol. If the language is set to language_auto,
it will attempt to find any demangling algorithm that works and
@@ -595,13 +629,8 @@ extern CORE_ADDR get_symbol_address (const struct symbol *sym);
extern gdb::unique_xmalloc_ptr<char> symbol_find_demangled_name
(struct general_symbol_info *gsymbol, const char *mangled);
-/* Return true if NAME matches the "search" name of SYMBOL, according
+/* Return true if NAME matches the "search" name of GSYMBOL, according
to the symbol's language. */
-#define SYMBOL_MATCHES_SEARCH_NAME(symbol, name) \
- symbol_matches_search_name ((symbol), (name))
-
-/* Helper for SYMBOL_MATCHES_SEARCH_NAME that works with both symbols
- and psymbols. */
extern bool symbol_matches_search_name
(const struct general_symbol_info *gsymbol,
const lookup_name_info &name);
@@ -669,6 +698,15 @@ enum minimal_symbol_type
#define MINSYM_TYPE_BITS 4
gdb_static_assert (nr_minsym_types <= (1 << MINSYM_TYPE_BITS));
+/* Return the address of MINSYM, which comes from OBJF. The
+ MAYBE_COPIED flag must be set on MINSYM. If MINSYM appears in the
+ main program's minimal symbols, then that minsym's address is
+ returned; otherwise, MINSYM's address is returned. This should
+ generally only be used via the MSYMBOL_VALUE_ADDRESS macro. */
+
+extern CORE_ADDR get_msymbol_address (struct objfile *objf,
+ const struct minimal_symbol *minsym);
+
/* Define a simple structure used to hold some very basic information about
all defined global symbols (text, data, bss, abs, etc). The only required
information is the general_symbol_info.
@@ -683,31 +721,110 @@ gdb_static_assert (nr_minsym_types <= (1 << MINSYM_TYPE_BITS));
struct minimal_symbol : public general_symbol_info
{
+ LONGEST value_longest () const
+ {
+ return m_value.ivalue;
+ }
+
+ /* The relocated address of the minimal symbol, using the section
+ offsets from OBJFILE. */
+ CORE_ADDR value_address (objfile *objfile) const;
+
+ /* The unrelocated address of the minimal symbol. */
+ CORE_ADDR value_raw_address () const
+ {
+ return m_value.address;
+ }
+
+ /* Return this minimal symbol's type. */
+
+ minimal_symbol_type type () const
+ {
+ return m_type;
+ }
+
+ /* Set this minimal symbol's type. */
+
+ void set_type (minimal_symbol_type type)
+ {
+ m_type = type;
+ }
+
+ /* Return this minimal symbol's size. */
+
+ unsigned long size () const
+ {
+ return m_size;
+ }
+
+ /* Set this minimal symbol's size. */
+
+ void set_size (unsigned long size)
+ {
+ m_size = size;
+ m_has_size = 1;
+ }
+
+ /* Return true if this minimal symbol's size is known. */
+
+ bool has_size () const
+ {
+ return m_has_size;
+ }
+
+ /* Return this minimal symbol's first target-specific flag. */
+
+ bool target_flag_1 () const
+ {
+ return m_target_flag_1;
+ }
+
+ /* Set this minimal symbol's first target-specific flag. */
+
+ void set_target_flag_1 (bool target_flag_1)
+ {
+ m_target_flag_1 = target_flag_1;
+ }
+
+ /* Return this minimal symbol's second target-specific flag. */
+
+ bool target_flag_2 () const
+ {
+ return m_target_flag_2;
+ }
+
+ /* Set this minimal symbol's second target-specific flag. */
+
+ void set_target_flag_2 (bool target_flag_2)
+ {
+ m_target_flag_2 = target_flag_2;
+ }
+
/* Size of this symbol. dbx_end_psymtab in dbxread.c uses this
information to calculate the end of the partial symtab based on the
address of the last symbol plus the size of the last symbol. */
- unsigned long size;
+ unsigned long m_size;
/* Which source file is this symbol in? Only relevant for mst_file_*. */
const char *filename;
/* Classification type for this minimal symbol. */
- ENUM_BITFIELD(minimal_symbol_type) type : MINSYM_TYPE_BITS;
+ ENUM_BITFIELD(minimal_symbol_type) m_type : MINSYM_TYPE_BITS;
/* Non-zero if this symbol was created by gdb.
Such symbols do not appear in the output of "info var|fun". */
unsigned int created_by_gdb : 1;
/* Two flag bits provided for the use of the target. */
- unsigned int target_flag_1 : 1;
- unsigned int target_flag_2 : 1;
+ unsigned int m_target_flag_1 : 1;
+ unsigned int m_target_flag_2 : 1;
/* Nonzero iff the size of the minimal symbol has been set.
Symbol size information can sometimes not be determined, because
the object file format may not carry that piece of information. */
- unsigned int has_size : 1;
+ unsigned int m_has_size : 1;
/* For data symbols only, if this is set, then the symbol might be
subject to copy relocation. In this case, a minimal symbol
@@ -740,45 +857,6 @@ struct minimal_symbol : public general_symbol_info
bool text_p () const;
};
-/* Return the address of MINSYM, which comes from OBJF. The
- MAYBE_COPIED flag must be set on MINSYM. If MINSYM appears in the
- main program's minimal symbols, then that minsym's address is
- returned; otherwise, MINSYM's address is returned. This should
- generally only be used via the MSYMBOL_VALUE_ADDRESS macro. */
-
-extern CORE_ADDR get_msymbol_address (struct objfile *objf,
- const struct minimal_symbol *minsym);
-
-#define MSYMBOL_TARGET_FLAG_1(msymbol) (msymbol)->target_flag_1
-#define MSYMBOL_TARGET_FLAG_2(msymbol) (msymbol)->target_flag_2
-#define MSYMBOL_SIZE(msymbol) ((msymbol)->size + 0)
-#define SET_MSYMBOL_SIZE(msymbol, sz) \
- do \
- { \
- (msymbol)->size = sz; \
- (msymbol)->has_size = 1; \
- } while (0)
-#define MSYMBOL_HAS_SIZE(msymbol) ((msymbol)->has_size + 0)
-#define MSYMBOL_TYPE(msymbol) (msymbol)->type
-
-#define MSYMBOL_VALUE(symbol) (symbol)->value.ivalue
-/* The unrelocated address of the minimal symbol. */
-#define MSYMBOL_VALUE_RAW_ADDRESS(symbol) ((symbol)->value.address + 0)
-/* The relocated address of the minimal symbol, using the section
- offsets from OBJFILE. */
-#define MSYMBOL_VALUE_ADDRESS(objfile, symbol) \
- (((symbol)->maybe_copied) ? get_msymbol_address (objfile, symbol) \
- : ((symbol)->value.address \
- + (objfile)->section_offsets[(symbol)->section_index ()]))
-/* For a bound minsym, we can easily compute the address directly. */
-#define BMSYMBOL_VALUE_ADDRESS(symbol) \
- MSYMBOL_VALUE_ADDRESS ((symbol).objfile, (symbol).minsym)
-#define SET_MSYMBOL_VALUE_ADDRESS(symbol, new_value) \
- ((symbol)->value.address = (new_value))
-#define MSYMBOL_VALUE_BYTES(symbol) (symbol)->value.bytes
-#define MSYMBOL_BLOCK_VALUE(symbol) (symbol)->value.block
-#define MSYMBOL_VALUE_CHAIN(symbol) (symbol)->value.chain
-
#include "minsyms.h"
@@ -788,7 +866,7 @@ extern CORE_ADDR get_msymbol_address (struct objfile *objf,
/* Different name domains for symbols. Looking up a symbol specifies a
domain and ignores symbol definitions in other name domains. */
-typedef enum domain_enum_tag
+enum domain_enum
{
/* UNDEF_DOMAIN is used when a domain has not been discovered or
none of the following apply. This usually indicates an error either
@@ -821,7 +899,7 @@ typedef enum domain_enum_tag
/* This must remain last. */
NR_DOMAINS
-} domain_enum;
+};
/* The number of bits in a symbol used to represent the domain. */
@@ -1110,25 +1188,27 @@ enum symbol_subclass_kind
SYMBOL_RUST_VTABLE
};
+extern gdb::array_view<const struct symbol_impl> symbol_impls;
+
/* This structure is space critical. See space comments at the top. */
struct symbol : public general_symbol_info, public allocate_on_obstack
{
symbol ()
/* Class-initialization of bitfields is only allowed in C++20. */
- : domain (UNDEF_DOMAIN),
- aclass_index (0),
- is_objfile_owned (1),
- is_argument (0),
- is_inlined (0),
+ : m_domain (UNDEF_DOMAIN),
+ m_aclass_index (0),
+ m_is_objfile_owned (1),
+ m_is_argument (0),
+ m_is_inlined (0),
maybe_copied (0),
subclass (SYMBOL_NONE),
- artificial (false)
+ m_artificial (false)
{
/* We can't use an initializer list for members of a base class, and
general_symbol_info needs to stay a POD type. */
m_name = nullptr;
- value.ivalue = 0;
+ m_value.ivalue = 0;
language_specific.obstack = nullptr;
m_language = language_unknown;
ada_mangled = 0;
@@ -1141,9 +1221,186 @@ struct symbol : public general_symbol_info, public allocate_on_obstack
symbol (const symbol &) = default;
symbol &operator= (const symbol &) = default;
+ void set_aclass_index (unsigned int aclass_index)
+ {
+ m_aclass_index = aclass_index;
+ }
+
+ const symbol_impl &impl () const
+ {
+ return symbol_impls[this->m_aclass_index];
+ }
+
+ address_class aclass () const
+ {
+ return this->impl ().aclass;
+ }
+
+ domain_enum domain () const
+ {
+ return m_domain;
+ }
+
+ void set_domain (domain_enum domain)
+ {
+ m_domain = domain;
+ }
+
+ bool is_objfile_owned () const
+ {
+ return m_is_objfile_owned;
+ }
+
+ void set_is_objfile_owned (bool is_objfile_owned)
+ {
+ m_is_objfile_owned = is_objfile_owned;
+ }
+
+ bool is_argument () const
+ {
+ return m_is_argument;
+ }
+
+ void set_is_argument (bool is_argument)
+ {
+ m_is_argument = is_argument;
+ }
+
+ bool is_inlined () const
+ {
+ return m_is_inlined;
+ }
+
+ void set_is_inlined (bool is_inlined)
+ {
+ m_is_inlined = is_inlined;
+ }
+
+ bool is_cplus_template_function () const
+ {
+ return this->subclass == SYMBOL_TEMPLATE;
+ }
+
+ struct type *type () const
+ {
+ return m_type;
+ }
+
+ void set_type (struct type *type)
+ {
+ m_type = type;
+ }
+
+ unsigned short line () const
+ {
+ return m_line;
+ }
+
+ void set_line (unsigned short line)
+ {
+ m_line = line;
+ }
+
+ LONGEST value_longest () const
+ {
+ return m_value.ivalue;
+ }
+
+ void set_value_longest (LONGEST value)
+ {
+ m_value.ivalue = value;
+ }
+
+ CORE_ADDR value_address () const
+ {
+ if (this->maybe_copied)
+ return get_symbol_address (this);
+ else
+ return m_value.address;
+ }
+
+ void set_value_address (CORE_ADDR address)
+ {
+ m_value.address = address;
+ }
+
+ const gdb_byte *value_bytes () const
+ {
+ return m_value.bytes;
+ }
+
+ void set_value_bytes (const gdb_byte *bytes)
+ {
+ m_value.bytes = bytes;
+ }
+
+ const common_block *value_common_block () const
+ {
+ return m_value.common_block;
+ }
+
+ void set_value_common_block (const common_block *common_block)
+ {
+ m_value.common_block = common_block;
+ }
+
+ const block *value_block () const
+ {
+ return m_value.block;
+ }
+
+ void set_value_block (const block *block)
+ {
+ m_value.block = block;
+ }
+
+ symbol *value_chain () const
+ {
+ return m_value.chain;
+ }
+
+ void set_value_chain (symbol *sym)
+ {
+ m_value.chain = sym;
+ }
+
+ /* Return true if this symbol was marked as artificial. */
+ bool is_artificial () const
+ {
+ return m_artificial;
+ }
+
+ /* Set the 'artificial' flag on this symbol. */
+ void set_is_artificial (bool artificial)
+ {
+ m_artificial = artificial;
+ }
+
+ /* Return the OBJFILE of this symbol. It is an error to call this
+ if is_objfile_owned is false, which only happens for
+ architecture-provided types. */
+
+ struct objfile *objfile () const;
+
+ /* Return the ARCH of this symbol. */
+
+ struct gdbarch *arch () const;
+
+ /* Return the symtab of this symbol. It is an error to call this if
+ is_objfile_owned is false, which only happens for
+ architecture-provided types. */
+
+ struct symtab *symtab () const;
+
+ /* Set the symtab of this symbol to SYMTAB. It is an error to call
+ this if is_objfile_owned is false, which only happens for
+ architecture-provided types. */
+
+ void set_symtab (struct symtab *symtab);
+
/* Data type of value */
- struct type *type = nullptr;
+ struct type *m_type = nullptr;
/* The owner of this symbol.
Which one to use is defined by symbol.is_objfile_owned. */
@@ -1161,25 +1418,25 @@ struct symbol : public general_symbol_info, public allocate_on_obstack
/* Domain code. */
- ENUM_BITFIELD(domain_enum_tag) domain : SYMBOL_DOMAIN_BITS;
+ ENUM_BITFIELD(domain_enum) m_domain : SYMBOL_DOMAIN_BITS;
/* Address class. This holds an index into the 'symbol_impls'
table. The actual enum address_class value is stored there,
alongside any per-class ops vectors. */
- unsigned int aclass_index : SYMBOL_ACLASS_BITS;
+ unsigned int m_aclass_index : SYMBOL_ACLASS_BITS;
/* If non-zero then symbol is objfile-owned, use owner.symtab.
Otherwise symbol is arch-owned, use owner.arch. */
- unsigned int is_objfile_owned : 1;
+ unsigned int m_is_objfile_owned : 1;
/* Whether this is an argument. */
- unsigned is_argument : 1;
+ unsigned m_is_argument : 1;
/* Whether this is an inlined function (class LOC_BLOCK only). */
- unsigned is_inlined : 1;
+ unsigned m_is_inlined : 1;
/* For LOC_STATIC only, if this is set, then the symbol might be
subject to copy relocation. In this case, a minimal symbol
@@ -1195,7 +1452,7 @@ struct symbol : public general_symbol_info, public allocate_on_obstack
/* Whether this symbol is artificial. */
- bool artificial : 1;
+ bool m_artificial : 1;
/* Line number of this symbol's definition, except for inlined
functions. For an inlined function (class LOC_BLOCK and
@@ -1208,7 +1465,7 @@ struct symbol : public general_symbol_info, public allocate_on_obstack
to debug files longer than 64K lines? What about machine
generated programs? */
- unsigned short line = 0;
+ unsigned short m_line = 0;
/* An arbitrary data pointer, allowing symbol readers to record
additional information on a per-symbol basis. Note that this data
@@ -1240,25 +1497,12 @@ struct block_symbol
const struct block *block;
};
-extern const struct symbol_impl *symbol_impls;
-
/* Note: There is no accessor macro for symbol.owner because it is
"private". */
-#define SYMBOL_DOMAIN(symbol) (symbol)->domain
-#define SYMBOL_IMPL(symbol) (symbol_impls[(symbol)->aclass_index])
-#define SYMBOL_ACLASS_INDEX(symbol) (symbol)->aclass_index
-#define SYMBOL_CLASS(symbol) (SYMBOL_IMPL (symbol).aclass)
-#define SYMBOL_OBJFILE_OWNED(symbol) ((symbol)->is_objfile_owned)
-#define SYMBOL_IS_ARGUMENT(symbol) (symbol)->is_argument
-#define SYMBOL_INLINED(symbol) (symbol)->is_inlined
-#define SYMBOL_IS_CPLUS_TEMPLATE_FUNCTION(symbol) \
- (((symbol)->subclass) == SYMBOL_TEMPLATE)
-#define SYMBOL_TYPE(symbol) (symbol)->type
-#define SYMBOL_LINE(symbol) (symbol)->line
-#define SYMBOL_COMPUTED_OPS(symbol) (SYMBOL_IMPL (symbol).ops_computed)
-#define SYMBOL_BLOCK_OPS(symbol) (SYMBOL_IMPL (symbol).ops_block)
-#define SYMBOL_REGISTER_OPS(symbol) (SYMBOL_IMPL (symbol).ops_register)
+#define SYMBOL_COMPUTED_OPS(symbol) ((symbol)->impl ().ops_computed)
+#define SYMBOL_BLOCK_OPS(symbol) ((symbol)->impl ().ops_block)
+#define SYMBOL_REGISTER_OPS(symbol) ((symbol)->impl ().ops_register)
#define SYMBOL_LOCATION_BATON(symbol) (symbol)->aux_value
extern int register_symbol_computed_impl (enum address_class,
@@ -1270,31 +1514,9 @@ extern int register_symbol_block_impl (enum address_class aclass,
extern int register_symbol_register_impl (enum address_class,
const struct symbol_register_ops *);
-/* Return the OBJFILE of SYMBOL.
- It is an error to call this if symbol.is_objfile_owned is false, which
- only happens for architecture-provided types. */
-
-extern struct objfile *symbol_objfile (const struct symbol *symbol);
-
-/* Return the ARCH of SYMBOL. */
-
-extern struct gdbarch *symbol_arch (const struct symbol *symbol);
-
-/* Return the SYMTAB of SYMBOL.
- It is an error to call this if symbol.is_objfile_owned is false, which
- only happens for architecture-provided types. */
-
-extern struct symtab *symbol_symtab (const struct symbol *symbol);
-
-/* Set the symtab of SYMBOL to SYMTAB.
- It is an error to call this if symbol.is_objfile_owned is false, which
- only happens for architecture-provided types. */
-
-extern void symbol_set_symtab (struct symbol *symbol, struct symtab *symtab);
-
/* An instance of this type is used to represent a C++ template
function. A symbol is really of this type iff
- SYMBOL_IS_CPLUS_TEMPLATE_FUNCTION is true. */
+ symbol::is_cplus_template_function is true. */
struct template_symbol : public symbol
{
@@ -1329,6 +1551,10 @@ struct linetable_entry
/* True if this PC is a good location to place a breakpoint for LINE. */
unsigned is_stmt : 1;
+ /* True if this location is a good location to place a breakpoint after a
+ function prologue. */
+ bool prologue_end : 1;
+
/* The address for this entry. */
CORE_ADDR pc;
};
@@ -1373,6 +1599,36 @@ typedef std::vector<CORE_ADDR> section_offsets;
struct symtab
{
+ struct compunit_symtab *compunit () const
+ {
+ return m_compunit;
+ }
+
+ void set_compunit (struct compunit_symtab *compunit)
+ {
+ m_compunit = compunit;
+ }
+
+ struct linetable *linetable () const
+ {
+ return m_linetable;
+ }
+
+ void set_linetable (struct linetable *linetable)
+ {
+ m_linetable = linetable;
+ }
+
+ enum language language () const
+ {
+ return m_language;
+ }
+
+ void set_language (enum language language)
+ {
+ m_language = language;
+ }
+
/* Unordered chain of all filetabs in the compunit, with the exception
that the "main" source file is the first entry in the list. */
@@ -1380,12 +1636,12 @@ struct symtab
/* Backlink to containing compunit symtab. */
- struct compunit_symtab *compunit_symtab;
+ struct compunit_symtab *m_compunit;
/* Table mapping core addresses to line numbers for this file.
Can be NULL if none. Never shared between different symtabs. */
- struct linetable *linetable;
+ struct linetable *m_linetable;
/* Name of this source file. This pointer is never NULL. */
@@ -1393,7 +1649,7 @@ struct symtab
/* Language of this source file. */
- enum language language;
+ enum language m_language;
/* Full name of file as found by searching the source path.
NULL if not yet known. */
@@ -1401,16 +1657,9 @@ struct symtab
char *fullname;
};
-#define SYMTAB_COMPUNIT(symtab) ((symtab)->compunit_symtab)
-#define SYMTAB_LINETABLE(symtab) ((symtab)->linetable)
-#define SYMTAB_LANGUAGE(symtab) ((symtab)->language)
-#define SYMTAB_BLOCKVECTOR(symtab) \
- COMPUNIT_BLOCKVECTOR (SYMTAB_COMPUNIT (symtab))
-#define SYMTAB_OBJFILE(symtab) \
- COMPUNIT_OBJFILE (SYMTAB_COMPUNIT (symtab))
-#define SYMTAB_PSPACE(symtab) (SYMTAB_OBJFILE (symtab)->pspace)
-#define SYMTAB_DIRNAME(symtab) \
- COMPUNIT_DIRNAME (SYMTAB_COMPUNIT (symtab))
+/* A range adapter to allowing iterating over all the file tables in a list. */
+
+using symtab_range = next_range<symtab>;
/* Compunit symtabs contain the actual "symbol table", aka blockvector, as well
as the list of all source files (what gdb has historically associated with
@@ -1449,6 +1698,129 @@ struct symtab
struct compunit_symtab
{
+ struct objfile *objfile () const
+ {
+ return m_objfile;
+ }
+
+ void set_objfile (struct objfile *objfile)
+ {
+ m_objfile = objfile;
+ }
+
+ symtab_range filetabs () const
+ {
+ return symtab_range (m_filetabs);
+ }
+
+ void add_filetab (symtab *filetab)
+ {
+ if (m_filetabs == nullptr)
+ {
+ m_filetabs = filetab;
+ m_last_filetab = filetab;
+ }
+ else
+ {
+ m_last_filetab->next = filetab;
+ m_last_filetab = filetab;
+ }
+ }
+
+ const char *debugformat () const
+ {
+ return m_debugformat;
+ }
+
+ void set_debugformat (const char *debugformat)
+ {
+ m_debugformat = debugformat;
+ }
+
+ const char *producer () const
+ {
+ return m_producer;
+ }
+
+ void set_producer (const char *producer)
+ {
+ m_producer = producer;
+ }
+
+ const char *dirname () const
+ {
+ return m_dirname;
+ }
+
+ void set_dirname (const char *dirname)
+ {
+ m_dirname = dirname;
+ }
+
+ struct blockvector *blockvector ()
+ {
+ return m_blockvector;
+ }
+
+ const struct blockvector *blockvector () const
+ {
+ return m_blockvector;
+ }
+
+ void set_blockvector (struct blockvector *blockvector)
+ {
+ m_blockvector = blockvector;
+ }
+
+ int block_line_section () const
+ {
+ return m_block_line_section;
+ }
+
+ void set_block_line_section (int block_line_section)
+ {
+ m_block_line_section = block_line_section;
+ }
+
+ bool locations_valid () const
+ {
+ return m_locations_valid;
+ }
+
+ void set_locations_valid (bool locations_valid)
+ {
+ m_locations_valid = locations_valid;
+ }
+
+ bool epilogue_unwind_valid () const
+ {
+ return m_epilogue_unwind_valid;
+ }
+
+ void set_epilogue_unwind_valid (bool epilogue_unwind_valid)
+ {
+ m_epilogue_unwind_valid = epilogue_unwind_valid;
+ }
+
+ struct macro_table *macro_table () const
+ {
+ return m_macro_table;
+ }
+
+ void set_macro_table (struct macro_table *macro_table)
+ {
+ m_macro_table = macro_table;
+ }
+
+ /* Make PRIMARY_FILETAB the primary filetab of this compunit symtab.
+
+ PRIMARY_FILETAB must already be a filetab of this compunit symtab. */
+
+ void set_primary_filetab (symtab *primary_filetab);
+
+ /* Return the primary filetab of the compunit. */
+ symtab *primary_filetab () const;
+
/* Set m_call_site_htab. */
void set_call_site_htab (htab_t call_site_htab);
@@ -1459,7 +1831,7 @@ struct compunit_symtab
struct compunit_symtab *next;
/* Object file from which this symtab information was read. */
- struct objfile *objfile;
+ struct objfile *m_objfile;
/* Name of the symtab.
This is *not* intended to be a usable filename, and is
@@ -1470,43 +1842,43 @@ struct compunit_symtab
source file (e.g., .c, .cc) is guaranteed to be first.
Each symtab is a file, either the "main" source file (e.g., .c, .cc)
or header (e.g., .h). */
- struct symtab *filetabs;
+ symtab *m_filetabs;
/* Last entry in FILETABS list.
Subfiles are added to the end of the list so they accumulate in order,
with the main source subfile living at the front.
The main reason is so that the main source file symtab is at the head
of the list, and the rest appear in order for debugging convenience. */
- struct symtab *last_filetab;
+ symtab *m_last_filetab;
/* Non-NULL string that identifies the format of the debugging information,
such as "stabs", "dwarf 1", "dwarf 2", "coff", etc. This is mostly useful
for automated testing of gdb but may also be information that is
useful to the user. */
- const char *debugformat;
+ const char *m_debugformat;
/* String of producer version information, or NULL if we don't know. */
- const char *producer;
+ const char *m_producer;
/* Directory in which it was compiled, or NULL if we don't know. */
- const char *dirname;
+ const char *m_dirname;
/* List of all symbol scope blocks for this symtab. It is shared among
all symtabs in a given compilation unit. */
- const struct blockvector *blockvector;
+ struct blockvector *m_blockvector;
/* Section in objfile->section_offsets for the blockvector and
the linetable. Probably always SECT_OFF_TEXT. */
- int block_line_section;
+ int m_block_line_section;
/* Symtab has been compiled with both optimizations and debug info so that
GDB may stop skipping prologues as variables locations are valid already
at function entry points. */
- unsigned int locations_valid : 1;
+ unsigned int m_locations_valid : 1;
/* DWARF unwinder for this CU is valid even for epilogues (PC at the return
instruction). This is supported by GCC since 4.5.0. */
- unsigned int epilogue_unwind_valid : 1;
+ unsigned int m_epilogue_unwind_valid : 1;
/* struct call_site entries for this compilation unit or NULL. */
htab_t m_call_site_htab;
@@ -1515,7 +1887,7 @@ struct compunit_symtab
is shared between different symtabs in a given compilation unit.
It's debatable whether it *should* be shared among all the symtabs in
the given compilation unit, but it currently is. */
- struct macro_table *macro_table;
+ struct macro_table *m_macro_table;
/* If non-NULL, then this points to a NULL-terminated vector of
included compunits. When searching the static or global
@@ -1535,33 +1907,6 @@ struct compunit_symtab
using compunit_symtab_range = next_range<compunit_symtab>;
-#define COMPUNIT_OBJFILE(cust) ((cust)->objfile)
-#define COMPUNIT_FILETABS(cust) ((cust)->filetabs)
-#define COMPUNIT_DEBUGFORMAT(cust) ((cust)->debugformat)
-#define COMPUNIT_PRODUCER(cust) ((cust)->producer)
-#define COMPUNIT_DIRNAME(cust) ((cust)->dirname)
-#define COMPUNIT_BLOCKVECTOR(cust) ((cust)->blockvector)
-#define COMPUNIT_BLOCK_LINE_SECTION(cust) ((cust)->block_line_section)
-#define COMPUNIT_LOCATIONS_VALID(cust) ((cust)->locations_valid)
-#define COMPUNIT_EPILOGUE_UNWIND_VALID(cust) ((cust)->epilogue_unwind_valid)
-#define COMPUNIT_MACRO_TABLE(cust) ((cust)->macro_table)
-
-/* A range adapter to allowing iterating over all the file tables
- within a compunit. */
-
-using symtab_range = next_range<symtab>;
-
-static inline symtab_range
-compunit_filetabs (compunit_symtab *cu)
-{
- return symtab_range (cu->filetabs);
-}
-
-/* Return the primary symtab of CUST. */
-
-extern struct symtab *
- compunit_primary_filetab (const struct compunit_symtab *cust);
-
/* Return the language of CUST. */
extern enum language compunit_language (const struct compunit_symtab *cust);
@@ -1571,7 +1916,7 @@ extern enum language compunit_language (const struct compunit_symtab *cust);
static inline bool
is_main_symtab_of_compunit_symtab (struct symtab *symtab)
{
- return symtab == COMPUNIT_FILETABS (SYMTAB_COMPUNIT (symtab));
+ return symtab == symtab->compunit ()->primary_filetab ();
}
diff --git a/gdb/system-gdbinit/elinos.py b/gdb/system-gdbinit/elinos.py
index 06724740e73..95a9529bc12 100644
--- a/gdb/system-gdbinit/elinos.py
+++ b/gdb/system-gdbinit/elinos.py
@@ -21,7 +21,7 @@ import gdb
def warn(msg):
- print "warning: %s" % msg
+ print("warning: %s" % msg)
def get_elinos_environment():
diff --git a/gdb/system-gdbinit/wrs-linux.py b/gdb/system-gdbinit/wrs-linux.py
index 88e1109a839..e4b225a32de 100644
--- a/gdb/system-gdbinit/wrs-linux.py
+++ b/gdb/system-gdbinit/wrs-linux.py
@@ -21,5 +21,5 @@ if "ENV_PREFIX" in os.environ:
gdb.execute("set sysroot %s" % os.environ["ENV_PREFIX"])
else:
- print "warning: ENV_PREFIX environment variable missing."
- print "The debugger will probably be unable to find the correct system libraries"
+ print("warning: ENV_PREFIX environment variable missing.")
+ print("The debugger will probably be unable to find the correct system libraries")
diff --git a/gdb/target-dcache.c b/gdb/target-dcache.c
index 96d4611ee02..0aa53302cea 100644
--- a/gdb/target-dcache.c
+++ b/gdb/target-dcache.c
@@ -102,7 +102,7 @@ static void
show_stack_cache (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Cache use for stack accesses is %s.\n"), value);
+ gdb_printf (file, _("Cache use for stack accesses is %s.\n"), value);
}
/* Return true if "stack cache" is enabled, otherwise, return false. */
@@ -142,7 +142,7 @@ static void
show_code_cache (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Cache use for code accesses is %s.\n"), value);
+ gdb_printf (file, _("Cache use for code accesses is %s.\n"), value);
}
/* Return true if "code cache" is enabled, otherwise, return false. */
@@ -160,7 +160,7 @@ maint_flush_dcache_command (const char *command, int from_tty)
{
target_dcache_invalidate ();
if (from_tty)
- printf_filtered (_("The dcache was flushed.\n"));
+ gdb_printf (_("The dcache was flushed.\n"));
}
void _initialize_target_dcache ();
diff --git a/gdb/target-debug.h b/gdb/target-debug.h
index e7a509858a7..c2b1db1ce8e 100644
--- a/gdb/target-debug.h
+++ b/gdb/target-debug.h
@@ -42,7 +42,7 @@
/* Helper macro. */
#define target_debug_do_print(E) \
- fputs_unfiltered ((E), gdb_stdlog);
+ gdb_puts ((E), gdb_stdlog);
#define target_debug_print_enum_target_object(X) \
target_debug_do_print (plongest (X))
@@ -180,7 +180,7 @@
static void
target_debug_print_struct_target_waitstatus_p (struct target_waitstatus *status)
{
- fputs_unfiltered (status->to_string ().c_str (), gdb_stdlog);
+ gdb_puts (status->to_string ().c_str (), gdb_stdlog);
}
@@ -195,40 +195,40 @@ target_debug_print_target_wait_flags (target_wait_flags options)
{
std::string str = target_options_to_string (options);
- fputs_unfiltered (str.c_str (), gdb_stdlog);
+ gdb_puts (str.c_str (), gdb_stdlog);
}
static void
target_debug_print_signals (gdb::array_view<const unsigned char> sigs)
{
- fputs_unfiltered ("{", gdb_stdlog);
+ gdb_puts ("{", gdb_stdlog);
for (size_t i = 0; i < sigs.size (); i++)
if (sigs[i] != 0)
{
- fprintf_unfiltered (gdb_stdlog, " %s",
- gdb_signal_to_name ((enum gdb_signal) i));
+ gdb_printf (gdb_stdlog, " %s",
+ gdb_signal_to_name ((enum gdb_signal) i));
}
- fputs_unfiltered (" }", gdb_stdlog);
+ gdb_puts (" }", gdb_stdlog);
}
static void
target_debug_print_size_t (size_t size)
{
- fprintf_unfiltered (gdb_stdlog, "%s", pulongest (size));
+ gdb_printf (gdb_stdlog, "%s", pulongest (size));
}
static void
target_debug_print_const_gdb_byte_vector_r (const gdb::byte_vector &vector)
{
- fputs_unfiltered ("{", gdb_stdlog);
+ gdb_puts ("{", gdb_stdlog);
for (size_t i = 0; i < vector.size (); i++)
{
- fprintf_unfiltered (gdb_stdlog, " %s",
- phex_nz (vector[i], 1));
+ gdb_printf (gdb_stdlog, " %s",
+ phex_nz (vector[i], 1));
}
- fputs_unfiltered (" }", gdb_stdlog);
+ gdb_puts (" }", gdb_stdlog);
}
static void
diff --git a/gdb/target-delegates.c b/gdb/target-delegates.c
index 9636e3212bc..4e653e8f429 100644
--- a/gdb/target-delegates.c
+++ b/gdb/target-delegates.c
@@ -1,8 +1,28 @@
-/* THIS FILE IS GENERATED -*- buffer-read-only: t -*- */
+/* *INDENT-OFF* */ /* THIS FILE IS GENERATED -*- buffer-read-only: t -*- */
/* vi:set ro: */
-/* To regenerate this file, run:*/
-/* make-target-delegates target.h > target-delegates.c */
+/* Boilerplate target methods for GDB
+
+ Copyright (C) 2013-2022 Free Software Foundation, Inc.
+
+ This file is part of GDB.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+/* To regenerate this file, run:
+ ./make-target-delegates.py
+*/
struct dummy_target : public target_ops
{
@@ -145,7 +165,7 @@ struct dummy_target : public target_ops
traceframe_info_up traceframe_info () override;
bool use_agent (bool arg0) override;
bool can_use_agent () override;
- struct btrace_target_info *enable_btrace (ptid_t arg0, const struct btrace_config *arg1) override;
+ struct btrace_target_info *enable_btrace (thread_info *arg0, const struct btrace_config *arg1) override;
void disable_btrace (struct btrace_target_info *arg0) override;
void teardown_btrace (struct btrace_target_info *arg0) override;
enum btrace_error read_btrace (struct btrace_data *arg0, struct btrace_target_info *arg1, enum btrace_read_type arg2) override;
@@ -319,7 +339,7 @@ struct debug_target : public target_ops
traceframe_info_up traceframe_info () override;
bool use_agent (bool arg0) override;
bool can_use_agent () override;
- struct btrace_target_info *enable_btrace (ptid_t arg0, const struct btrace_config *arg1) override;
+ struct btrace_target_info *enable_btrace (thread_info *arg0, const struct btrace_config *arg1) override;
void disable_btrace (struct btrace_target_info *arg0) override;
void teardown_btrace (struct btrace_target_info *arg0) override;
enum btrace_error read_btrace (struct btrace_data *arg0, struct btrace_target_info *arg1, enum btrace_read_type arg2) override;
@@ -366,11 +386,11 @@ dummy_target::post_attach (int arg0)
void
debug_target::post_attach (int arg0)
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->post_attach (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->post_attach (...)\n", this->beneath ()->shortname ());
this->beneath ()->post_attach (arg0);
- fprintf_unfiltered (gdb_stdlog, "<- %s->post_attach (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->post_attach (", this->beneath ()->shortname ());
target_debug_print_int (arg0);
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_puts (")\n", gdb_stdlog);
}
void
@@ -387,13 +407,13 @@ dummy_target::detach (inferior *arg0, int arg1)
void
debug_target::detach (inferior *arg0, int arg1)
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->detach (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->detach (...)\n", this->beneath ()->shortname ());
this->beneath ()->detach (arg0, arg1);
- fprintf_unfiltered (gdb_stdlog, "<- %s->detach (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->detach (", this->beneath ()->shortname ());
target_debug_print_inferior_p (arg0);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_int (arg1);
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_puts (")\n", gdb_stdlog);
}
void
@@ -411,13 +431,13 @@ dummy_target::disconnect (const char *arg0, int arg1)
void
debug_target::disconnect (const char *arg0, int arg1)
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->disconnect (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->disconnect (...)\n", this->beneath ()->shortname ());
this->beneath ()->disconnect (arg0, arg1);
- fprintf_unfiltered (gdb_stdlog, "<- %s->disconnect (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->disconnect (", this->beneath ()->shortname ());
target_debug_print_const_char_p (arg0);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_int (arg1);
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_puts (")\n", gdb_stdlog);
}
void
@@ -435,15 +455,15 @@ dummy_target::resume (ptid_t arg0, int arg1, enum gdb_signal arg2)
void
debug_target::resume (ptid_t arg0, int arg1, enum gdb_signal arg2)
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->resume (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->resume (...)\n", this->beneath ()->shortname ());
this->beneath ()->resume (arg0, arg1, arg2);
- fprintf_unfiltered (gdb_stdlog, "<- %s->resume (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->resume (", this->beneath ()->shortname ());
target_debug_print_ptid_t (arg0);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_step (arg1);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_enum_gdb_signal (arg2);
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_puts (")\n", gdb_stdlog);
}
void
@@ -460,10 +480,10 @@ dummy_target::commit_resumed ()
void
debug_target::commit_resumed ()
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->commit_resumed (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->commit_resumed (...)\n", this->beneath ()->shortname ());
this->beneath ()->commit_resumed ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->commit_resumed (", this->beneath ()->shortname ());
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->commit_resumed (", this->beneath ()->shortname ());
+ gdb_puts (")\n", gdb_stdlog);
}
ptid_t
@@ -482,17 +502,17 @@ ptid_t
debug_target::wait (ptid_t arg0, struct target_waitstatus *arg1, target_wait_flags arg2)
{
ptid_t result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->wait (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->wait (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->wait (arg0, arg1, arg2);
- fprintf_unfiltered (gdb_stdlog, "<- %s->wait (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->wait (", this->beneath ()->shortname ());
target_debug_print_ptid_t (arg0);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_struct_target_waitstatus_p (arg1);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_target_wait_flags (arg2);
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_ptid_t (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -510,13 +530,13 @@ dummy_target::fetch_registers (struct regcache *arg0, int arg1)
void
debug_target::fetch_registers (struct regcache *arg0, int arg1)
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->fetch_registers (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->fetch_registers (...)\n", this->beneath ()->shortname ());
this->beneath ()->fetch_registers (arg0, arg1);
- fprintf_unfiltered (gdb_stdlog, "<- %s->fetch_registers (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->fetch_registers (", this->beneath ()->shortname ());
target_debug_print_struct_regcache_p (arg0);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_int (arg1);
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_puts (")\n", gdb_stdlog);
}
void
@@ -534,13 +554,13 @@ dummy_target::store_registers (struct regcache *arg0, int arg1)
void
debug_target::store_registers (struct regcache *arg0, int arg1)
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->store_registers (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->store_registers (...)\n", this->beneath ()->shortname ());
this->beneath ()->store_registers (arg0, arg1);
- fprintf_unfiltered (gdb_stdlog, "<- %s->store_registers (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->store_registers (", this->beneath ()->shortname ());
target_debug_print_struct_regcache_p (arg0);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_int (arg1);
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_puts (")\n", gdb_stdlog);
}
void
@@ -558,11 +578,11 @@ dummy_target::prepare_to_store (struct regcache *arg0)
void
debug_target::prepare_to_store (struct regcache *arg0)
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->prepare_to_store (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->prepare_to_store (...)\n", this->beneath ()->shortname ());
this->beneath ()->prepare_to_store (arg0);
- fprintf_unfiltered (gdb_stdlog, "<- %s->prepare_to_store (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->prepare_to_store (", this->beneath ()->shortname ());
target_debug_print_struct_regcache_p (arg0);
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_puts (")\n", gdb_stdlog);
}
void
@@ -579,10 +599,10 @@ dummy_target::files_info ()
void
debug_target::files_info ()
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->files_info (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->files_info (...)\n", this->beneath ()->shortname ());
this->beneath ()->files_info ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->files_info (", this->beneath ()->shortname ());
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->files_info (", this->beneath ()->shortname ());
+ gdb_puts (")\n", gdb_stdlog);
}
int
@@ -601,15 +621,15 @@ int
debug_target::insert_breakpoint (struct gdbarch *arg0, struct bp_target_info *arg1)
{
int result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->insert_breakpoint (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->insert_breakpoint (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->insert_breakpoint (arg0, arg1);
- fprintf_unfiltered (gdb_stdlog, "<- %s->insert_breakpoint (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->insert_breakpoint (", this->beneath ()->shortname ());
target_debug_print_struct_gdbarch_p (arg0);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_struct_bp_target_info_p (arg1);
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_int (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -629,17 +649,17 @@ int
debug_target::remove_breakpoint (struct gdbarch *arg0, struct bp_target_info *arg1, enum remove_bp_reason arg2)
{
int result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->remove_breakpoint (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->remove_breakpoint (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->remove_breakpoint (arg0, arg1, arg2);
- fprintf_unfiltered (gdb_stdlog, "<- %s->remove_breakpoint (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->remove_breakpoint (", this->beneath ()->shortname ());
target_debug_print_struct_gdbarch_p (arg0);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_struct_bp_target_info_p (arg1);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_enum_remove_bp_reason (arg2);
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_int (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -659,12 +679,12 @@ bool
debug_target::stopped_by_sw_breakpoint ()
{
bool result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->stopped_by_sw_breakpoint (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->stopped_by_sw_breakpoint (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->stopped_by_sw_breakpoint ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->stopped_by_sw_breakpoint (", this->beneath ()->shortname ());
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->stopped_by_sw_breakpoint (", this->beneath ()->shortname ());
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_bool (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -684,12 +704,12 @@ bool
debug_target::supports_stopped_by_sw_breakpoint ()
{
bool result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->supports_stopped_by_sw_breakpoint (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->supports_stopped_by_sw_breakpoint (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->supports_stopped_by_sw_breakpoint ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->supports_stopped_by_sw_breakpoint (", this->beneath ()->shortname ());
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->supports_stopped_by_sw_breakpoint (", this->beneath ()->shortname ());
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_bool (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -709,12 +729,12 @@ bool
debug_target::stopped_by_hw_breakpoint ()
{
bool result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->stopped_by_hw_breakpoint (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->stopped_by_hw_breakpoint (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->stopped_by_hw_breakpoint ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->stopped_by_hw_breakpoint (", this->beneath ()->shortname ());
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->stopped_by_hw_breakpoint (", this->beneath ()->shortname ());
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_bool (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -734,12 +754,12 @@ bool
debug_target::supports_stopped_by_hw_breakpoint ()
{
bool result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->supports_stopped_by_hw_breakpoint (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->supports_stopped_by_hw_breakpoint (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->supports_stopped_by_hw_breakpoint ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->supports_stopped_by_hw_breakpoint (", this->beneath ()->shortname ());
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->supports_stopped_by_hw_breakpoint (", this->beneath ()->shortname ());
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_bool (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -759,17 +779,17 @@ int
debug_target::can_use_hw_breakpoint (enum bptype arg0, int arg1, int arg2)
{
int result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->can_use_hw_breakpoint (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->can_use_hw_breakpoint (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->can_use_hw_breakpoint (arg0, arg1, arg2);
- fprintf_unfiltered (gdb_stdlog, "<- %s->can_use_hw_breakpoint (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->can_use_hw_breakpoint (", this->beneath ()->shortname ());
target_debug_print_enum_bptype (arg0);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_int (arg1);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_int (arg2);
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_int (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -789,12 +809,12 @@ int
debug_target::ranged_break_num_registers ()
{
int result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->ranged_break_num_registers (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->ranged_break_num_registers (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->ranged_break_num_registers ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->ranged_break_num_registers (", this->beneath ()->shortname ());
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->ranged_break_num_registers (", this->beneath ()->shortname ());
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_int (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -814,15 +834,15 @@ int
debug_target::insert_hw_breakpoint (struct gdbarch *arg0, struct bp_target_info *arg1)
{
int result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->insert_hw_breakpoint (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->insert_hw_breakpoint (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->insert_hw_breakpoint (arg0, arg1);
- fprintf_unfiltered (gdb_stdlog, "<- %s->insert_hw_breakpoint (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->insert_hw_breakpoint (", this->beneath ()->shortname ());
target_debug_print_struct_gdbarch_p (arg0);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_struct_bp_target_info_p (arg1);
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_int (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -842,15 +862,15 @@ int
debug_target::remove_hw_breakpoint (struct gdbarch *arg0, struct bp_target_info *arg1)
{
int result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->remove_hw_breakpoint (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->remove_hw_breakpoint (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->remove_hw_breakpoint (arg0, arg1);
- fprintf_unfiltered (gdb_stdlog, "<- %s->remove_hw_breakpoint (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->remove_hw_breakpoint (", this->beneath ()->shortname ());
target_debug_print_struct_gdbarch_p (arg0);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_struct_bp_target_info_p (arg1);
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_int (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -870,19 +890,19 @@ int
debug_target::remove_watchpoint (CORE_ADDR arg0, int arg1, enum target_hw_bp_type arg2, struct expression *arg3)
{
int result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->remove_watchpoint (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->remove_watchpoint (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->remove_watchpoint (arg0, arg1, arg2, arg3);
- fprintf_unfiltered (gdb_stdlog, "<- %s->remove_watchpoint (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->remove_watchpoint (", this->beneath ()->shortname ());
target_debug_print_CORE_ADDR (arg0);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_int (arg1);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_enum_target_hw_bp_type (arg2);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_struct_expression_p (arg3);
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_int (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -902,19 +922,19 @@ int
debug_target::insert_watchpoint (CORE_ADDR arg0, int arg1, enum target_hw_bp_type arg2, struct expression *arg3)
{
int result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->insert_watchpoint (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->insert_watchpoint (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->insert_watchpoint (arg0, arg1, arg2, arg3);
- fprintf_unfiltered (gdb_stdlog, "<- %s->insert_watchpoint (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->insert_watchpoint (", this->beneath ()->shortname ());
target_debug_print_CORE_ADDR (arg0);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_int (arg1);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_enum_target_hw_bp_type (arg2);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_struct_expression_p (arg3);
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_int (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -934,17 +954,17 @@ int
debug_target::insert_mask_watchpoint (CORE_ADDR arg0, CORE_ADDR arg1, enum target_hw_bp_type arg2)
{
int result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->insert_mask_watchpoint (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->insert_mask_watchpoint (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->insert_mask_watchpoint (arg0, arg1, arg2);
- fprintf_unfiltered (gdb_stdlog, "<- %s->insert_mask_watchpoint (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->insert_mask_watchpoint (", this->beneath ()->shortname ());
target_debug_print_CORE_ADDR (arg0);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_CORE_ADDR (arg1);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_enum_target_hw_bp_type (arg2);
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_int (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -964,17 +984,17 @@ int
debug_target::remove_mask_watchpoint (CORE_ADDR arg0, CORE_ADDR arg1, enum target_hw_bp_type arg2)
{
int result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->remove_mask_watchpoint (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->remove_mask_watchpoint (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->remove_mask_watchpoint (arg0, arg1, arg2);
- fprintf_unfiltered (gdb_stdlog, "<- %s->remove_mask_watchpoint (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->remove_mask_watchpoint (", this->beneath ()->shortname ());
target_debug_print_CORE_ADDR (arg0);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_CORE_ADDR (arg1);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_enum_target_hw_bp_type (arg2);
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_int (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -994,12 +1014,12 @@ bool
debug_target::stopped_by_watchpoint ()
{
bool result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->stopped_by_watchpoint (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->stopped_by_watchpoint (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->stopped_by_watchpoint ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->stopped_by_watchpoint (", this->beneath ()->shortname ());
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->stopped_by_watchpoint (", this->beneath ()->shortname ());
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_bool (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -1019,12 +1039,12 @@ bool
debug_target::have_steppable_watchpoint ()
{
bool result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->have_steppable_watchpoint (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->have_steppable_watchpoint (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->have_steppable_watchpoint ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->have_steppable_watchpoint (", this->beneath ()->shortname ());
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->have_steppable_watchpoint (", this->beneath ()->shortname ());
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_bool (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -1044,13 +1064,13 @@ bool
debug_target::stopped_data_address (CORE_ADDR *arg0)
{
bool result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->stopped_data_address (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->stopped_data_address (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->stopped_data_address (arg0);
- fprintf_unfiltered (gdb_stdlog, "<- %s->stopped_data_address (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->stopped_data_address (", this->beneath ()->shortname ());
target_debug_print_CORE_ADDR_p (arg0);
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_bool (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -1070,17 +1090,17 @@ bool
debug_target::watchpoint_addr_within_range (CORE_ADDR arg0, CORE_ADDR arg1, int arg2)
{
bool result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->watchpoint_addr_within_range (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->watchpoint_addr_within_range (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->watchpoint_addr_within_range (arg0, arg1, arg2);
- fprintf_unfiltered (gdb_stdlog, "<- %s->watchpoint_addr_within_range (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->watchpoint_addr_within_range (", this->beneath ()->shortname ());
target_debug_print_CORE_ADDR (arg0);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_CORE_ADDR (arg1);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_int (arg2);
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_bool (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -1100,15 +1120,15 @@ int
debug_target::region_ok_for_hw_watchpoint (CORE_ADDR arg0, int arg1)
{
int result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->region_ok_for_hw_watchpoint (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->region_ok_for_hw_watchpoint (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->region_ok_for_hw_watchpoint (arg0, arg1);
- fprintf_unfiltered (gdb_stdlog, "<- %s->region_ok_for_hw_watchpoint (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->region_ok_for_hw_watchpoint (", this->beneath ()->shortname ());
target_debug_print_CORE_ADDR (arg0);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_int (arg1);
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_int (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -1128,19 +1148,19 @@ bool
debug_target::can_accel_watchpoint_condition (CORE_ADDR arg0, int arg1, int arg2, struct expression *arg3)
{
bool result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->can_accel_watchpoint_condition (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->can_accel_watchpoint_condition (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->can_accel_watchpoint_condition (arg0, arg1, arg2, arg3);
- fprintf_unfiltered (gdb_stdlog, "<- %s->can_accel_watchpoint_condition (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->can_accel_watchpoint_condition (", this->beneath ()->shortname ());
target_debug_print_CORE_ADDR (arg0);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_int (arg1);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_int (arg2);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_struct_expression_p (arg3);
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_bool (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -1160,15 +1180,15 @@ int
debug_target::masked_watch_num_registers (CORE_ADDR arg0, CORE_ADDR arg1)
{
int result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->masked_watch_num_registers (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->masked_watch_num_registers (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->masked_watch_num_registers (arg0, arg1);
- fprintf_unfiltered (gdb_stdlog, "<- %s->masked_watch_num_registers (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->masked_watch_num_registers (", this->beneath ()->shortname ());
target_debug_print_CORE_ADDR (arg0);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_CORE_ADDR (arg1);
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_int (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -1188,12 +1208,12 @@ int
debug_target::can_do_single_step ()
{
int result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->can_do_single_step (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->can_do_single_step (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->can_do_single_step ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->can_do_single_step (", this->beneath ()->shortname ());
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->can_do_single_step (", this->beneath ()->shortname ());
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_int (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -1213,12 +1233,12 @@ bool
debug_target::supports_terminal_ours ()
{
bool result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->supports_terminal_ours (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->supports_terminal_ours (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->supports_terminal_ours ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->supports_terminal_ours (", this->beneath ()->shortname ());
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->supports_terminal_ours (", this->beneath ()->shortname ());
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_bool (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -1236,10 +1256,10 @@ dummy_target::terminal_init ()
void
debug_target::terminal_init ()
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->terminal_init (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->terminal_init (...)\n", this->beneath ()->shortname ());
this->beneath ()->terminal_init ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->terminal_init (", this->beneath ()->shortname ());
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->terminal_init (", this->beneath ()->shortname ());
+ gdb_puts (")\n", gdb_stdlog);
}
void
@@ -1256,10 +1276,10 @@ dummy_target::terminal_inferior ()
void
debug_target::terminal_inferior ()
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->terminal_inferior (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->terminal_inferior (...)\n", this->beneath ()->shortname ());
this->beneath ()->terminal_inferior ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->terminal_inferior (", this->beneath ()->shortname ());
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->terminal_inferior (", this->beneath ()->shortname ());
+ gdb_puts (")\n", gdb_stdlog);
}
void
@@ -1276,10 +1296,10 @@ dummy_target::terminal_save_inferior ()
void
debug_target::terminal_save_inferior ()
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->terminal_save_inferior (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->terminal_save_inferior (...)\n", this->beneath ()->shortname ());
this->beneath ()->terminal_save_inferior ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->terminal_save_inferior (", this->beneath ()->shortname ());
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->terminal_save_inferior (", this->beneath ()->shortname ());
+ gdb_puts (")\n", gdb_stdlog);
}
void
@@ -1296,10 +1316,10 @@ dummy_target::terminal_ours_for_output ()
void
debug_target::terminal_ours_for_output ()
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->terminal_ours_for_output (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->terminal_ours_for_output (...)\n", this->beneath ()->shortname ());
this->beneath ()->terminal_ours_for_output ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->terminal_ours_for_output (", this->beneath ()->shortname ());
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->terminal_ours_for_output (", this->beneath ()->shortname ());
+ gdb_puts (")\n", gdb_stdlog);
}
void
@@ -1316,10 +1336,10 @@ dummy_target::terminal_ours ()
void
debug_target::terminal_ours ()
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->terminal_ours (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->terminal_ours (...)\n", this->beneath ()->shortname ());
this->beneath ()->terminal_ours ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->terminal_ours (", this->beneath ()->shortname ());
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->terminal_ours (", this->beneath ()->shortname ());
+ gdb_puts (")\n", gdb_stdlog);
}
void
@@ -1337,13 +1357,13 @@ dummy_target::terminal_info (const char *arg0, int arg1)
void
debug_target::terminal_info (const char *arg0, int arg1)
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->terminal_info (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->terminal_info (...)\n", this->beneath ()->shortname ());
this->beneath ()->terminal_info (arg0, arg1);
- fprintf_unfiltered (gdb_stdlog, "<- %s->terminal_info (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->terminal_info (", this->beneath ()->shortname ());
target_debug_print_const_char_p (arg0);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_int (arg1);
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_puts (")\n", gdb_stdlog);
}
void
@@ -1361,10 +1381,10 @@ dummy_target::kill ()
void
debug_target::kill ()
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->kill (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->kill (...)\n", this->beneath ()->shortname ());
this->beneath ()->kill ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->kill (", this->beneath ()->shortname ());
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->kill (", this->beneath ()->shortname ());
+ gdb_puts (")\n", gdb_stdlog);
}
void
@@ -1382,13 +1402,13 @@ dummy_target::load (const char *arg0, int arg1)
void
debug_target::load (const char *arg0, int arg1)
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->load (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->load (...)\n", this->beneath ()->shortname ());
this->beneath ()->load (arg0, arg1);
- fprintf_unfiltered (gdb_stdlog, "<- %s->load (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->load (", this->beneath ()->shortname ());
target_debug_print_const_char_p (arg0);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_int (arg1);
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_puts (")\n", gdb_stdlog);
}
int
@@ -1407,13 +1427,13 @@ int
debug_target::insert_fork_catchpoint (int arg0)
{
int result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->insert_fork_catchpoint (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->insert_fork_catchpoint (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->insert_fork_catchpoint (arg0);
- fprintf_unfiltered (gdb_stdlog, "<- %s->insert_fork_catchpoint (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->insert_fork_catchpoint (", this->beneath ()->shortname ());
target_debug_print_int (arg0);
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_int (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -1433,13 +1453,13 @@ int
debug_target::remove_fork_catchpoint (int arg0)
{
int result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->remove_fork_catchpoint (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->remove_fork_catchpoint (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->remove_fork_catchpoint (arg0);
- fprintf_unfiltered (gdb_stdlog, "<- %s->remove_fork_catchpoint (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->remove_fork_catchpoint (", this->beneath ()->shortname ());
target_debug_print_int (arg0);
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_int (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -1459,13 +1479,13 @@ int
debug_target::insert_vfork_catchpoint (int arg0)
{
int result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->insert_vfork_catchpoint (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->insert_vfork_catchpoint (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->insert_vfork_catchpoint (arg0);
- fprintf_unfiltered (gdb_stdlog, "<- %s->insert_vfork_catchpoint (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->insert_vfork_catchpoint (", this->beneath ()->shortname ());
target_debug_print_int (arg0);
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_int (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -1485,13 +1505,13 @@ int
debug_target::remove_vfork_catchpoint (int arg0)
{
int result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->remove_vfork_catchpoint (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->remove_vfork_catchpoint (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->remove_vfork_catchpoint (arg0);
- fprintf_unfiltered (gdb_stdlog, "<- %s->remove_vfork_catchpoint (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->remove_vfork_catchpoint (", this->beneath ()->shortname ());
target_debug_print_int (arg0);
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_int (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -1510,19 +1530,19 @@ dummy_target::follow_fork (inferior *arg0, ptid_t arg1, target_waitkind arg2, bo
void
debug_target::follow_fork (inferior *arg0, ptid_t arg1, target_waitkind arg2, bool arg3, bool arg4)
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->follow_fork (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->follow_fork (...)\n", this->beneath ()->shortname ());
this->beneath ()->follow_fork (arg0, arg1, arg2, arg3, arg4);
- fprintf_unfiltered (gdb_stdlog, "<- %s->follow_fork (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->follow_fork (", this->beneath ()->shortname ());
target_debug_print_inferior_p (arg0);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_ptid_t (arg1);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_target_waitkind (arg2);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_bool (arg3);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_bool (arg4);
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_puts (")\n", gdb_stdlog);
}
int
@@ -1541,13 +1561,13 @@ int
debug_target::insert_exec_catchpoint (int arg0)
{
int result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->insert_exec_catchpoint (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->insert_exec_catchpoint (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->insert_exec_catchpoint (arg0);
- fprintf_unfiltered (gdb_stdlog, "<- %s->insert_exec_catchpoint (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->insert_exec_catchpoint (", this->beneath ()->shortname ());
target_debug_print_int (arg0);
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_int (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -1567,13 +1587,13 @@ int
debug_target::remove_exec_catchpoint (int arg0)
{
int result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->remove_exec_catchpoint (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->remove_exec_catchpoint (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->remove_exec_catchpoint (arg0);
- fprintf_unfiltered (gdb_stdlog, "<- %s->remove_exec_catchpoint (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->remove_exec_catchpoint (", this->beneath ()->shortname ());
target_debug_print_int (arg0);
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_int (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -1591,15 +1611,15 @@ dummy_target::follow_exec (inferior *arg0, ptid_t arg1, const char *arg2)
void
debug_target::follow_exec (inferior *arg0, ptid_t arg1, const char *arg2)
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->follow_exec (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->follow_exec (...)\n", this->beneath ()->shortname ());
this->beneath ()->follow_exec (arg0, arg1, arg2);
- fprintf_unfiltered (gdb_stdlog, "<- %s->follow_exec (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->follow_exec (", this->beneath ()->shortname ());
target_debug_print_inferior_p (arg0);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_ptid_t (arg1);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_const_char_p (arg2);
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_puts (")\n", gdb_stdlog);
}
int
@@ -1618,19 +1638,19 @@ int
debug_target::set_syscall_catchpoint (int arg0, bool arg1, int arg2, gdb::array_view<const int> arg3)
{
int result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->set_syscall_catchpoint (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->set_syscall_catchpoint (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->set_syscall_catchpoint (arg0, arg1, arg2, arg3);
- fprintf_unfiltered (gdb_stdlog, "<- %s->set_syscall_catchpoint (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->set_syscall_catchpoint (", this->beneath ()->shortname ());
target_debug_print_int (arg0);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_bool (arg1);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_int (arg2);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_gdb_array_view_const_int (arg3);
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_int (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -1649,10 +1669,10 @@ dummy_target::mourn_inferior ()
void
debug_target::mourn_inferior ()
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->mourn_inferior (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->mourn_inferior (...)\n", this->beneath ()->shortname ());
this->beneath ()->mourn_inferior ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->mourn_inferior (", this->beneath ()->shortname ());
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->mourn_inferior (", this->beneath ()->shortname ());
+ gdb_puts (")\n", gdb_stdlog);
}
void
@@ -1669,11 +1689,11 @@ dummy_target::pass_signals (gdb::array_view<const unsigned char> arg0)
void
debug_target::pass_signals (gdb::array_view<const unsigned char> arg0)
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->pass_signals (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->pass_signals (...)\n", this->beneath ()->shortname ());
this->beneath ()->pass_signals (arg0);
- fprintf_unfiltered (gdb_stdlog, "<- %s->pass_signals (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->pass_signals (", this->beneath ()->shortname ());
target_debug_print_signals (arg0);
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_puts (")\n", gdb_stdlog);
}
void
@@ -1690,11 +1710,11 @@ dummy_target::program_signals (gdb::array_view<const unsigned char> arg0)
void
debug_target::program_signals (gdb::array_view<const unsigned char> arg0)
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->program_signals (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->program_signals (...)\n", this->beneath ()->shortname ());
this->beneath ()->program_signals (arg0);
- fprintf_unfiltered (gdb_stdlog, "<- %s->program_signals (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->program_signals (", this->beneath ()->shortname ());
target_debug_print_signals (arg0);
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_puts (")\n", gdb_stdlog);
}
bool
@@ -1713,13 +1733,13 @@ bool
debug_target::thread_alive (ptid_t arg0)
{
bool result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->thread_alive (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->thread_alive (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->thread_alive (arg0);
- fprintf_unfiltered (gdb_stdlog, "<- %s->thread_alive (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->thread_alive (", this->beneath ()->shortname ());
target_debug_print_ptid_t (arg0);
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_bool (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -1737,10 +1757,10 @@ dummy_target::update_thread_list ()
void
debug_target::update_thread_list ()
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->update_thread_list (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->update_thread_list (...)\n", this->beneath ()->shortname ());
this->beneath ()->update_thread_list ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->update_thread_list (", this->beneath ()->shortname ());
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->update_thread_list (", this->beneath ()->shortname ());
+ gdb_puts (")\n", gdb_stdlog);
}
std::string
@@ -1759,13 +1779,13 @@ std::string
debug_target::pid_to_str (ptid_t arg0)
{
std::string result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->pid_to_str (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->pid_to_str (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->pid_to_str (arg0);
- fprintf_unfiltered (gdb_stdlog, "<- %s->pid_to_str (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->pid_to_str (", this->beneath ()->shortname ());
target_debug_print_ptid_t (arg0);
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_std_string (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -1785,13 +1805,13 @@ const char *
debug_target::extra_thread_info (thread_info *arg0)
{
const char * result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->extra_thread_info (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->extra_thread_info (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->extra_thread_info (arg0);
- fprintf_unfiltered (gdb_stdlog, "<- %s->extra_thread_info (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->extra_thread_info (", this->beneath ()->shortname ());
target_debug_print_thread_info_p (arg0);
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_const_char_p (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -1811,13 +1831,13 @@ const char *
debug_target::thread_name (thread_info *arg0)
{
const char * result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->thread_name (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->thread_name (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->thread_name (arg0);
- fprintf_unfiltered (gdb_stdlog, "<- %s->thread_name (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->thread_name (", this->beneath ()->shortname ());
target_debug_print_thread_info_p (arg0);
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_const_char_p (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -1837,17 +1857,17 @@ thread_info *
debug_target::thread_handle_to_thread_info (const gdb_byte *arg0, int arg1, inferior *arg2)
{
thread_info * result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->thread_handle_to_thread_info (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->thread_handle_to_thread_info (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->thread_handle_to_thread_info (arg0, arg1, arg2);
- fprintf_unfiltered (gdb_stdlog, "<- %s->thread_handle_to_thread_info (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->thread_handle_to_thread_info (", this->beneath ()->shortname ());
target_debug_print_const_gdb_byte_p (arg0);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_int (arg1);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_inferior_p (arg2);
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_thread_info_p (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -1867,13 +1887,13 @@ gdb::byte_vector
debug_target::thread_info_to_thread_handle (struct thread_info *arg0)
{
gdb::byte_vector result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->thread_info_to_thread_handle (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->thread_info_to_thread_handle (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->thread_info_to_thread_handle (arg0);
- fprintf_unfiltered (gdb_stdlog, "<- %s->thread_info_to_thread_handle (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->thread_info_to_thread_handle (", this->beneath ()->shortname ());
target_debug_print_struct_thread_info_p (arg0);
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_gdb_byte_vector (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -1891,11 +1911,11 @@ dummy_target::stop (ptid_t arg0)
void
debug_target::stop (ptid_t arg0)
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->stop (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->stop (...)\n", this->beneath ()->shortname ());
this->beneath ()->stop (arg0);
- fprintf_unfiltered (gdb_stdlog, "<- %s->stop (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->stop (", this->beneath ()->shortname ());
target_debug_print_ptid_t (arg0);
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_puts (")\n", gdb_stdlog);
}
void
@@ -1912,10 +1932,10 @@ dummy_target::interrupt ()
void
debug_target::interrupt ()
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->interrupt (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->interrupt (...)\n", this->beneath ()->shortname ());
this->beneath ()->interrupt ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->interrupt (", this->beneath ()->shortname ());
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->interrupt (", this->beneath ()->shortname ());
+ gdb_puts (")\n", gdb_stdlog);
}
void
@@ -1933,10 +1953,10 @@ dummy_target::pass_ctrlc ()
void
debug_target::pass_ctrlc ()
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->pass_ctrlc (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->pass_ctrlc (...)\n", this->beneath ()->shortname ());
this->beneath ()->pass_ctrlc ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->pass_ctrlc (", this->beneath ()->shortname ());
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->pass_ctrlc (", this->beneath ()->shortname ());
+ gdb_puts (")\n", gdb_stdlog);
}
void
@@ -1954,13 +1974,13 @@ dummy_target::rcmd (const char *arg0, struct ui_file *arg1)
void
debug_target::rcmd (const char *arg0, struct ui_file *arg1)
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->rcmd (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->rcmd (...)\n", this->beneath ()->shortname ());
this->beneath ()->rcmd (arg0, arg1);
- fprintf_unfiltered (gdb_stdlog, "<- %s->rcmd (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->rcmd (", this->beneath ()->shortname ());
target_debug_print_const_char_p (arg0);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_struct_ui_file_p (arg1);
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_puts (")\n", gdb_stdlog);
}
char *
@@ -1979,13 +1999,13 @@ char *
debug_target::pid_to_exec_file (int arg0)
{
char * result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->pid_to_exec_file (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->pid_to_exec_file (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->pid_to_exec_file (arg0);
- fprintf_unfiltered (gdb_stdlog, "<- %s->pid_to_exec_file (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->pid_to_exec_file (", this->beneath ()->shortname ());
target_debug_print_int (arg0);
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_char_p (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -2003,11 +2023,11 @@ dummy_target::log_command (const char *arg0)
void
debug_target::log_command (const char *arg0)
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->log_command (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->log_command (...)\n", this->beneath ()->shortname ());
this->beneath ()->log_command (arg0);
- fprintf_unfiltered (gdb_stdlog, "<- %s->log_command (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->log_command (", this->beneath ()->shortname ());
target_debug_print_const_char_p (arg0);
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_puts (")\n", gdb_stdlog);
}
const target_section_table *
@@ -2026,12 +2046,12 @@ const target_section_table *
debug_target::get_section_table ()
{
const target_section_table * result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->get_section_table (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->get_section_table (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->get_section_table ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->get_section_table (", this->beneath ()->shortname ());
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->get_section_table (", this->beneath ()->shortname ());
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_const_target_section_table_p (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -2051,12 +2071,12 @@ thread_control_capabilities
debug_target::get_thread_control_capabilities ()
{
thread_control_capabilities result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->get_thread_control_capabilities (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->get_thread_control_capabilities (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->get_thread_control_capabilities ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->get_thread_control_capabilities (", this->beneath ()->shortname ());
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->get_thread_control_capabilities (", this->beneath ()->shortname ());
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_thread_control_capabilities (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -2076,12 +2096,12 @@ bool
debug_target::attach_no_wait ()
{
bool result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->attach_no_wait (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->attach_no_wait (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->attach_no_wait ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->attach_no_wait (", this->beneath ()->shortname ());
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->attach_no_wait (", this->beneath ()->shortname ());
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_bool (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -2101,12 +2121,12 @@ bool
debug_target::can_async_p ()
{
bool result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->can_async_p (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->can_async_p (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->can_async_p ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->can_async_p (", this->beneath ()->shortname ());
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->can_async_p (", this->beneath ()->shortname ());
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_bool (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -2126,12 +2146,12 @@ bool
debug_target::is_async_p ()
{
bool result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->is_async_p (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->is_async_p (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->is_async_p ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->is_async_p (", this->beneath ()->shortname ());
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->is_async_p (", this->beneath ()->shortname ());
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_bool (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -2150,11 +2170,11 @@ dummy_target::async (int arg0)
void
debug_target::async (int arg0)
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->async (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->async (...)\n", this->beneath ()->shortname ());
this->beneath ()->async (arg0);
- fprintf_unfiltered (gdb_stdlog, "<- %s->async (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->async (", this->beneath ()->shortname ());
target_debug_print_int (arg0);
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_puts (")\n", gdb_stdlog);
}
int
@@ -2173,12 +2193,12 @@ int
debug_target::async_wait_fd ()
{
int result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->async_wait_fd (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->async_wait_fd (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->async_wait_fd ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->async_wait_fd (", this->beneath ()->shortname ());
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->async_wait_fd (", this->beneath ()->shortname ());
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_int (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -2198,12 +2218,12 @@ bool
debug_target::has_pending_events ()
{
bool result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->has_pending_events (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->has_pending_events (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->has_pending_events ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->has_pending_events (", this->beneath ()->shortname ());
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->has_pending_events (", this->beneath ()->shortname ());
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_bool (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -2221,11 +2241,11 @@ dummy_target::thread_events (int arg0)
void
debug_target::thread_events (int arg0)
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->thread_events (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->thread_events (...)\n", this->beneath ()->shortname ());
this->beneath ()->thread_events (arg0);
- fprintf_unfiltered (gdb_stdlog, "<- %s->thread_events (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->thread_events (", this->beneath ()->shortname ());
target_debug_print_int (arg0);
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_puts (")\n", gdb_stdlog);
}
bool
@@ -2244,12 +2264,12 @@ bool
debug_target::supports_non_stop ()
{
bool result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->supports_non_stop (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->supports_non_stop (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->supports_non_stop ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->supports_non_stop (", this->beneath ()->shortname ());
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->supports_non_stop (", this->beneath ()->shortname ());
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_bool (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -2269,12 +2289,12 @@ bool
debug_target::always_non_stop_p ()
{
bool result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->always_non_stop_p (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->always_non_stop_p (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->always_non_stop_p ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->always_non_stop_p (", this->beneath ()->shortname ());
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->always_non_stop_p (", this->beneath ()->shortname ());
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_bool (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -2294,15 +2314,15 @@ int
debug_target::find_memory_regions (find_memory_region_ftype arg0, void *arg1)
{
int result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->find_memory_regions (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->find_memory_regions (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->find_memory_regions (arg0, arg1);
- fprintf_unfiltered (gdb_stdlog, "<- %s->find_memory_regions (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->find_memory_regions (", this->beneath ()->shortname ());
target_debug_print_find_memory_region_ftype (arg0);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_void_p (arg1);
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_int (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -2322,15 +2342,15 @@ gdb::unique_xmalloc_ptr<char>
debug_target::make_corefile_notes (bfd *arg0, int *arg1)
{
gdb::unique_xmalloc_ptr<char> result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->make_corefile_notes (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->make_corefile_notes (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->make_corefile_notes (arg0, arg1);
- fprintf_unfiltered (gdb_stdlog, "<- %s->make_corefile_notes (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->make_corefile_notes (", this->beneath ()->shortname ());
target_debug_print_bfd_p (arg0);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_int_p (arg1);
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_gdb_unique_xmalloc_ptr_char (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -2350,15 +2370,15 @@ gdb_byte *
debug_target::get_bookmark (const char *arg0, int arg1)
{
gdb_byte * result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->get_bookmark (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->get_bookmark (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->get_bookmark (arg0, arg1);
- fprintf_unfiltered (gdb_stdlog, "<- %s->get_bookmark (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->get_bookmark (", this->beneath ()->shortname ());
target_debug_print_const_char_p (arg0);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_int (arg1);
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_gdb_byte_p (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -2377,13 +2397,13 @@ dummy_target::goto_bookmark (const gdb_byte *arg0, int arg1)
void
debug_target::goto_bookmark (const gdb_byte *arg0, int arg1)
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->goto_bookmark (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->goto_bookmark (...)\n", this->beneath ()->shortname ());
this->beneath ()->goto_bookmark (arg0, arg1);
- fprintf_unfiltered (gdb_stdlog, "<- %s->goto_bookmark (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->goto_bookmark (", this->beneath ()->shortname ());
target_debug_print_const_gdb_byte_p (arg0);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_int (arg1);
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_puts (")\n", gdb_stdlog);
}
CORE_ADDR
@@ -2402,17 +2422,17 @@ CORE_ADDR
debug_target::get_thread_local_address (ptid_t arg0, CORE_ADDR arg1, CORE_ADDR arg2)
{
CORE_ADDR result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->get_thread_local_address (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->get_thread_local_address (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->get_thread_local_address (arg0, arg1, arg2);
- fprintf_unfiltered (gdb_stdlog, "<- %s->get_thread_local_address (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->get_thread_local_address (", this->beneath ()->shortname ());
target_debug_print_ptid_t (arg0);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_CORE_ADDR (arg1);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_CORE_ADDR (arg2);
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_CORE_ADDR (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -2432,25 +2452,25 @@ enum target_xfer_status
debug_target::xfer_partial (enum target_object arg0, const char *arg1, gdb_byte *arg2, const gdb_byte *arg3, ULONGEST arg4, ULONGEST arg5, ULONGEST *arg6)
{
enum target_xfer_status result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->xfer_partial (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->xfer_partial (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->xfer_partial (arg0, arg1, arg2, arg3, arg4, arg5, arg6);
- fprintf_unfiltered (gdb_stdlog, "<- %s->xfer_partial (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->xfer_partial (", this->beneath ()->shortname ());
target_debug_print_enum_target_object (arg0);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_const_char_p (arg1);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_gdb_byte_p (arg2);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_const_gdb_byte_p (arg3);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_ULONGEST (arg4);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_ULONGEST (arg5);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_ULONGEST_p (arg6);
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_enum_target_xfer_status (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -2470,12 +2490,12 @@ ULONGEST
debug_target::get_memory_xfer_limit ()
{
ULONGEST result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->get_memory_xfer_limit (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->get_memory_xfer_limit (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->get_memory_xfer_limit ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->get_memory_xfer_limit (", this->beneath ()->shortname ());
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->get_memory_xfer_limit (", this->beneath ()->shortname ());
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_ULONGEST (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -2495,12 +2515,12 @@ std::vector<mem_region>
debug_target::memory_map ()
{
std::vector<mem_region> result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->memory_map (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->memory_map (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->memory_map ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->memory_map (", this->beneath ()->shortname ());
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->memory_map (", this->beneath ()->shortname ());
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_std_vector_mem_region (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -2519,13 +2539,13 @@ dummy_target::flash_erase (ULONGEST arg0, LONGEST arg1)
void
debug_target::flash_erase (ULONGEST arg0, LONGEST arg1)
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->flash_erase (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->flash_erase (...)\n", this->beneath ()->shortname ());
this->beneath ()->flash_erase (arg0, arg1);
- fprintf_unfiltered (gdb_stdlog, "<- %s->flash_erase (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->flash_erase (", this->beneath ()->shortname ());
target_debug_print_ULONGEST (arg0);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_LONGEST (arg1);
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_puts (")\n", gdb_stdlog);
}
void
@@ -2543,10 +2563,10 @@ dummy_target::flash_done ()
void
debug_target::flash_done ()
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->flash_done (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->flash_done (...)\n", this->beneath ()->shortname ());
this->beneath ()->flash_done ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->flash_done (", this->beneath ()->shortname ());
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->flash_done (", this->beneath ()->shortname ());
+ gdb_puts (")\n", gdb_stdlog);
}
const struct target_desc *
@@ -2565,12 +2585,12 @@ const struct target_desc *
debug_target::read_description ()
{
const struct target_desc * result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->read_description (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->read_description (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->read_description ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->read_description (", this->beneath ()->shortname ());
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->read_description (", this->beneath ()->shortname ());
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_const_struct_target_desc_p (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -2590,15 +2610,15 @@ ptid_t
debug_target::get_ada_task_ptid (long arg0, ULONGEST arg1)
{
ptid_t result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->get_ada_task_ptid (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->get_ada_task_ptid (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->get_ada_task_ptid (arg0, arg1);
- fprintf_unfiltered (gdb_stdlog, "<- %s->get_ada_task_ptid (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->get_ada_task_ptid (", this->beneath ()->shortname ());
target_debug_print_long (arg0);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_ULONGEST (arg1);
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_ptid_t (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -2618,19 +2638,19 @@ int
debug_target::auxv_parse (gdb_byte **arg0, gdb_byte *arg1, CORE_ADDR *arg2, CORE_ADDR *arg3)
{
int result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->auxv_parse (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->auxv_parse (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->auxv_parse (arg0, arg1, arg2, arg3);
- fprintf_unfiltered (gdb_stdlog, "<- %s->auxv_parse (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->auxv_parse (", this->beneath ()->shortname ());
target_debug_print_gdb_byte_pp (arg0);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_gdb_byte_p (arg1);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_CORE_ADDR_p (arg2);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_CORE_ADDR_p (arg3);
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_int (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -2650,21 +2670,21 @@ int
debug_target::search_memory (CORE_ADDR arg0, ULONGEST arg1, const gdb_byte *arg2, ULONGEST arg3, CORE_ADDR *arg4)
{
int result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->search_memory (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->search_memory (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->search_memory (arg0, arg1, arg2, arg3, arg4);
- fprintf_unfiltered (gdb_stdlog, "<- %s->search_memory (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->search_memory (", this->beneath ()->shortname ());
target_debug_print_CORE_ADDR (arg0);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_ULONGEST (arg1);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_const_gdb_byte_p (arg2);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_ULONGEST (arg3);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_CORE_ADDR_p (arg4);
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_int (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -2684,12 +2704,12 @@ bool
debug_target::can_execute_reverse ()
{
bool result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->can_execute_reverse (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->can_execute_reverse (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->can_execute_reverse ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->can_execute_reverse (", this->beneath ()->shortname ());
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->can_execute_reverse (", this->beneath ()->shortname ());
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_bool (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -2709,12 +2729,12 @@ enum exec_direction_kind
debug_target::execution_direction ()
{
enum exec_direction_kind result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->execution_direction (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->execution_direction (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->execution_direction ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->execution_direction (", this->beneath ()->shortname ());
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->execution_direction (", this->beneath ()->shortname ());
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_enum_exec_direction_kind (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -2734,12 +2754,12 @@ bool
debug_target::supports_multi_process ()
{
bool result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->supports_multi_process (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->supports_multi_process (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->supports_multi_process ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->supports_multi_process (", this->beneath ()->shortname ());
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->supports_multi_process (", this->beneath ()->shortname ());
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_bool (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -2759,12 +2779,12 @@ bool
debug_target::supports_enable_disable_tracepoint ()
{
bool result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->supports_enable_disable_tracepoint (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->supports_enable_disable_tracepoint (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->supports_enable_disable_tracepoint ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->supports_enable_disable_tracepoint (", this->beneath ()->shortname ());
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->supports_enable_disable_tracepoint (", this->beneath ()->shortname ());
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_bool (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -2784,12 +2804,12 @@ bool
debug_target::supports_disable_randomization ()
{
bool result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->supports_disable_randomization (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->supports_disable_randomization (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->supports_disable_randomization ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->supports_disable_randomization (", this->beneath ()->shortname ());
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->supports_disable_randomization (", this->beneath ()->shortname ());
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_bool (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -2809,12 +2829,12 @@ bool
debug_target::supports_string_tracing ()
{
bool result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->supports_string_tracing (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->supports_string_tracing (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->supports_string_tracing ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->supports_string_tracing (", this->beneath ()->shortname ());
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->supports_string_tracing (", this->beneath ()->shortname ());
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_bool (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -2834,12 +2854,12 @@ bool
debug_target::supports_evaluation_of_breakpoint_conditions ()
{
bool result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->supports_evaluation_of_breakpoint_conditions (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->supports_evaluation_of_breakpoint_conditions (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->supports_evaluation_of_breakpoint_conditions ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->supports_evaluation_of_breakpoint_conditions (", this->beneath ()->shortname ());
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->supports_evaluation_of_breakpoint_conditions (", this->beneath ()->shortname ());
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_bool (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -2859,12 +2879,12 @@ bool
debug_target::supports_dumpcore ()
{
bool result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->supports_dumpcore (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->supports_dumpcore (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->supports_dumpcore ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->supports_dumpcore (", this->beneath ()->shortname ());
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->supports_dumpcore (", this->beneath ()->shortname ());
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_bool (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -2882,11 +2902,11 @@ dummy_target::dumpcore (const char *arg0)
void
debug_target::dumpcore (const char *arg0)
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->dumpcore (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->dumpcore (...)\n", this->beneath ()->shortname ());
this->beneath ()->dumpcore (arg0);
- fprintf_unfiltered (gdb_stdlog, "<- %s->dumpcore (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->dumpcore (", this->beneath ()->shortname ());
target_debug_print_const_char_p (arg0);
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_puts (")\n", gdb_stdlog);
}
bool
@@ -2905,12 +2925,12 @@ bool
debug_target::can_run_breakpoint_commands ()
{
bool result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->can_run_breakpoint_commands (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->can_run_breakpoint_commands (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->can_run_breakpoint_commands ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->can_run_breakpoint_commands (", this->beneath ()->shortname ());
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->can_run_breakpoint_commands (", this->beneath ()->shortname ());
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_bool (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -2930,13 +2950,13 @@ struct gdbarch *
debug_target::thread_architecture (ptid_t arg0)
{
struct gdbarch * result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->thread_architecture (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->thread_architecture (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->thread_architecture (arg0);
- fprintf_unfiltered (gdb_stdlog, "<- %s->thread_architecture (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->thread_architecture (", this->beneath ()->shortname ());
target_debug_print_ptid_t (arg0);
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_struct_gdbarch_p (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -2956,13 +2976,13 @@ struct address_space *
debug_target::thread_address_space (ptid_t arg0)
{
struct address_space * result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->thread_address_space (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->thread_address_space (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->thread_address_space (arg0);
- fprintf_unfiltered (gdb_stdlog, "<- %s->thread_address_space (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->thread_address_space (", this->beneath ()->shortname ());
target_debug_print_ptid_t (arg0);
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_struct_address_space_p (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -2982,12 +3002,12 @@ bool
debug_target::filesystem_is_local ()
{
bool result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->filesystem_is_local (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->filesystem_is_local (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->filesystem_is_local ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->filesystem_is_local (", this->beneath ()->shortname ());
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->filesystem_is_local (", this->beneath ()->shortname ());
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_bool (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -3006,10 +3026,10 @@ dummy_target::trace_init ()
void
debug_target::trace_init ()
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->trace_init (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->trace_init (...)\n", this->beneath ()->shortname ());
this->beneath ()->trace_init ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->trace_init (", this->beneath ()->shortname ());
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->trace_init (", this->beneath ()->shortname ());
+ gdb_puts (")\n", gdb_stdlog);
}
void
@@ -3027,11 +3047,11 @@ dummy_target::download_tracepoint (struct bp_location *arg0)
void
debug_target::download_tracepoint (struct bp_location *arg0)
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->download_tracepoint (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->download_tracepoint (...)\n", this->beneath ()->shortname ());
this->beneath ()->download_tracepoint (arg0);
- fprintf_unfiltered (gdb_stdlog, "<- %s->download_tracepoint (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->download_tracepoint (", this->beneath ()->shortname ());
target_debug_print_struct_bp_location_p (arg0);
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_puts (")\n", gdb_stdlog);
}
bool
@@ -3050,12 +3070,12 @@ bool
debug_target::can_download_tracepoint ()
{
bool result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->can_download_tracepoint (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->can_download_tracepoint (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->can_download_tracepoint ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->can_download_tracepoint (", this->beneath ()->shortname ());
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->can_download_tracepoint (", this->beneath ()->shortname ());
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_bool (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -3074,11 +3094,11 @@ dummy_target::download_trace_state_variable (const trace_state_variable &arg0)
void
debug_target::download_trace_state_variable (const trace_state_variable &arg0)
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->download_trace_state_variable (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->download_trace_state_variable (...)\n", this->beneath ()->shortname ());
this->beneath ()->download_trace_state_variable (arg0);
- fprintf_unfiltered (gdb_stdlog, "<- %s->download_trace_state_variable (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->download_trace_state_variable (", this->beneath ()->shortname ());
target_debug_print_const_trace_state_variable_r (arg0);
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_puts (")\n", gdb_stdlog);
}
void
@@ -3096,11 +3116,11 @@ dummy_target::enable_tracepoint (struct bp_location *arg0)
void
debug_target::enable_tracepoint (struct bp_location *arg0)
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->enable_tracepoint (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->enable_tracepoint (...)\n", this->beneath ()->shortname ());
this->beneath ()->enable_tracepoint (arg0);
- fprintf_unfiltered (gdb_stdlog, "<- %s->enable_tracepoint (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->enable_tracepoint (", this->beneath ()->shortname ());
target_debug_print_struct_bp_location_p (arg0);
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_puts (")\n", gdb_stdlog);
}
void
@@ -3118,11 +3138,11 @@ dummy_target::disable_tracepoint (struct bp_location *arg0)
void
debug_target::disable_tracepoint (struct bp_location *arg0)
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->disable_tracepoint (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->disable_tracepoint (...)\n", this->beneath ()->shortname ());
this->beneath ()->disable_tracepoint (arg0);
- fprintf_unfiltered (gdb_stdlog, "<- %s->disable_tracepoint (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->disable_tracepoint (", this->beneath ()->shortname ());
target_debug_print_struct_bp_location_p (arg0);
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_puts (")\n", gdb_stdlog);
}
void
@@ -3140,10 +3160,10 @@ dummy_target::trace_set_readonly_regions ()
void
debug_target::trace_set_readonly_regions ()
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->trace_set_readonly_regions (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->trace_set_readonly_regions (...)\n", this->beneath ()->shortname ());
this->beneath ()->trace_set_readonly_regions ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->trace_set_readonly_regions (", this->beneath ()->shortname ());
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->trace_set_readonly_regions (", this->beneath ()->shortname ());
+ gdb_puts (")\n", gdb_stdlog);
}
void
@@ -3161,10 +3181,10 @@ dummy_target::trace_start ()
void
debug_target::trace_start ()
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->trace_start (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->trace_start (...)\n", this->beneath ()->shortname ());
this->beneath ()->trace_start ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->trace_start (", this->beneath ()->shortname ());
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->trace_start (", this->beneath ()->shortname ());
+ gdb_puts (")\n", gdb_stdlog);
}
int
@@ -3183,13 +3203,13 @@ int
debug_target::get_trace_status (struct trace_status *arg0)
{
int result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->get_trace_status (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->get_trace_status (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->get_trace_status (arg0);
- fprintf_unfiltered (gdb_stdlog, "<- %s->get_trace_status (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->get_trace_status (", this->beneath ()->shortname ());
target_debug_print_struct_trace_status_p (arg0);
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_int (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -3208,13 +3228,13 @@ dummy_target::get_tracepoint_status (struct breakpoint *arg0, struct uploaded_tp
void
debug_target::get_tracepoint_status (struct breakpoint *arg0, struct uploaded_tp *arg1)
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->get_tracepoint_status (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->get_tracepoint_status (...)\n", this->beneath ()->shortname ());
this->beneath ()->get_tracepoint_status (arg0, arg1);
- fprintf_unfiltered (gdb_stdlog, "<- %s->get_tracepoint_status (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->get_tracepoint_status (", this->beneath ()->shortname ());
target_debug_print_struct_breakpoint_p (arg0);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_struct_uploaded_tp_p (arg1);
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_puts (")\n", gdb_stdlog);
}
void
@@ -3232,10 +3252,10 @@ dummy_target::trace_stop ()
void
debug_target::trace_stop ()
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->trace_stop (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->trace_stop (...)\n", this->beneath ()->shortname ());
this->beneath ()->trace_stop ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->trace_stop (", this->beneath ()->shortname ());
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->trace_stop (", this->beneath ()->shortname ());
+ gdb_puts (")\n", gdb_stdlog);
}
int
@@ -3254,21 +3274,21 @@ int
debug_target::trace_find (enum trace_find_type arg0, int arg1, CORE_ADDR arg2, CORE_ADDR arg3, int *arg4)
{
int result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->trace_find (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->trace_find (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->trace_find (arg0, arg1, arg2, arg3, arg4);
- fprintf_unfiltered (gdb_stdlog, "<- %s->trace_find (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->trace_find (", this->beneath ()->shortname ());
target_debug_print_enum_trace_find_type (arg0);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_int (arg1);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_CORE_ADDR (arg2);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_CORE_ADDR (arg3);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_int_p (arg4);
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_int (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -3288,15 +3308,15 @@ bool
debug_target::get_trace_state_variable_value (int arg0, LONGEST *arg1)
{
bool result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->get_trace_state_variable_value (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->get_trace_state_variable_value (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->get_trace_state_variable_value (arg0, arg1);
- fprintf_unfiltered (gdb_stdlog, "<- %s->get_trace_state_variable_value (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->get_trace_state_variable_value (", this->beneath ()->shortname ());
target_debug_print_int (arg0);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_LONGEST_p (arg1);
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_bool (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -3316,13 +3336,13 @@ int
debug_target::save_trace_data (const char *arg0)
{
int result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->save_trace_data (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->save_trace_data (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->save_trace_data (arg0);
- fprintf_unfiltered (gdb_stdlog, "<- %s->save_trace_data (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->save_trace_data (", this->beneath ()->shortname ());
target_debug_print_const_char_p (arg0);
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_int (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -3342,13 +3362,13 @@ int
debug_target::upload_tracepoints (struct uploaded_tp **arg0)
{
int result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->upload_tracepoints (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->upload_tracepoints (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->upload_tracepoints (arg0);
- fprintf_unfiltered (gdb_stdlog, "<- %s->upload_tracepoints (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->upload_tracepoints (", this->beneath ()->shortname ());
target_debug_print_struct_uploaded_tp_pp (arg0);
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_int (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -3368,13 +3388,13 @@ int
debug_target::upload_trace_state_variables (struct uploaded_tsv **arg0)
{
int result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->upload_trace_state_variables (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->upload_trace_state_variables (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->upload_trace_state_variables (arg0);
- fprintf_unfiltered (gdb_stdlog, "<- %s->upload_trace_state_variables (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->upload_trace_state_variables (", this->beneath ()->shortname ());
target_debug_print_struct_uploaded_tsv_pp (arg0);
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_int (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -3394,17 +3414,17 @@ LONGEST
debug_target::get_raw_trace_data (gdb_byte *arg0, ULONGEST arg1, LONGEST arg2)
{
LONGEST result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->get_raw_trace_data (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->get_raw_trace_data (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->get_raw_trace_data (arg0, arg1, arg2);
- fprintf_unfiltered (gdb_stdlog, "<- %s->get_raw_trace_data (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->get_raw_trace_data (", this->beneath ()->shortname ());
target_debug_print_gdb_byte_p (arg0);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_ULONGEST (arg1);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_LONGEST (arg2);
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_LONGEST (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -3424,12 +3444,12 @@ int
debug_target::get_min_fast_tracepoint_insn_len ()
{
int result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->get_min_fast_tracepoint_insn_len (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->get_min_fast_tracepoint_insn_len (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->get_min_fast_tracepoint_insn_len ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->get_min_fast_tracepoint_insn_len (", this->beneath ()->shortname ());
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->get_min_fast_tracepoint_insn_len (", this->beneath ()->shortname ());
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_int (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -3447,11 +3467,11 @@ dummy_target::set_disconnected_tracing (int arg0)
void
debug_target::set_disconnected_tracing (int arg0)
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->set_disconnected_tracing (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->set_disconnected_tracing (...)\n", this->beneath ()->shortname ());
this->beneath ()->set_disconnected_tracing (arg0);
- fprintf_unfiltered (gdb_stdlog, "<- %s->set_disconnected_tracing (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->set_disconnected_tracing (", this->beneath ()->shortname ());
target_debug_print_int (arg0);
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_puts (")\n", gdb_stdlog);
}
void
@@ -3468,11 +3488,11 @@ dummy_target::set_circular_trace_buffer (int arg0)
void
debug_target::set_circular_trace_buffer (int arg0)
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->set_circular_trace_buffer (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->set_circular_trace_buffer (...)\n", this->beneath ()->shortname ());
this->beneath ()->set_circular_trace_buffer (arg0);
- fprintf_unfiltered (gdb_stdlog, "<- %s->set_circular_trace_buffer (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->set_circular_trace_buffer (", this->beneath ()->shortname ());
target_debug_print_int (arg0);
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_puts (")\n", gdb_stdlog);
}
void
@@ -3489,11 +3509,11 @@ dummy_target::set_trace_buffer_size (LONGEST arg0)
void
debug_target::set_trace_buffer_size (LONGEST arg0)
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->set_trace_buffer_size (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->set_trace_buffer_size (...)\n", this->beneath ()->shortname ());
this->beneath ()->set_trace_buffer_size (arg0);
- fprintf_unfiltered (gdb_stdlog, "<- %s->set_trace_buffer_size (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->set_trace_buffer_size (", this->beneath ()->shortname ());
target_debug_print_LONGEST (arg0);
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_puts (")\n", gdb_stdlog);
}
bool
@@ -3512,17 +3532,17 @@ bool
debug_target::set_trace_notes (const char *arg0, const char *arg1, const char *arg2)
{
bool result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->set_trace_notes (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->set_trace_notes (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->set_trace_notes (arg0, arg1, arg2);
- fprintf_unfiltered (gdb_stdlog, "<- %s->set_trace_notes (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->set_trace_notes (", this->beneath ()->shortname ());
target_debug_print_const_char_p (arg0);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_const_char_p (arg1);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_const_char_p (arg2);
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_bool (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -3542,13 +3562,13 @@ int
debug_target::core_of_thread (ptid_t arg0)
{
int result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->core_of_thread (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->core_of_thread (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->core_of_thread (arg0);
- fprintf_unfiltered (gdb_stdlog, "<- %s->core_of_thread (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->core_of_thread (", this->beneath ()->shortname ());
target_debug_print_ptid_t (arg0);
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_int (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -3568,17 +3588,17 @@ int
debug_target::verify_memory (const gdb_byte *arg0, CORE_ADDR arg1, ULONGEST arg2)
{
int result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->verify_memory (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->verify_memory (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->verify_memory (arg0, arg1, arg2);
- fprintf_unfiltered (gdb_stdlog, "<- %s->verify_memory (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->verify_memory (", this->beneath ()->shortname ());
target_debug_print_const_gdb_byte_p (arg0);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_CORE_ADDR (arg1);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_ULONGEST (arg2);
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_int (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -3598,15 +3618,15 @@ bool
debug_target::get_tib_address (ptid_t arg0, CORE_ADDR *arg1)
{
bool result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->get_tib_address (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->get_tib_address (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->get_tib_address (arg0, arg1);
- fprintf_unfiltered (gdb_stdlog, "<- %s->get_tib_address (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->get_tib_address (", this->beneath ()->shortname ());
target_debug_print_ptid_t (arg0);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_CORE_ADDR_p (arg1);
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_bool (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -3624,10 +3644,10 @@ dummy_target::set_permissions ()
void
debug_target::set_permissions ()
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->set_permissions (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->set_permissions (...)\n", this->beneath ()->shortname ());
this->beneath ()->set_permissions ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->set_permissions (", this->beneath ()->shortname ());
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->set_permissions (", this->beneath ()->shortname ());
+ gdb_puts (")\n", gdb_stdlog);
}
bool
@@ -3646,15 +3666,15 @@ bool
debug_target::static_tracepoint_marker_at (CORE_ADDR arg0, static_tracepoint_marker *arg1)
{
bool result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->static_tracepoint_marker_at (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->static_tracepoint_marker_at (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->static_tracepoint_marker_at (arg0, arg1);
- fprintf_unfiltered (gdb_stdlog, "<- %s->static_tracepoint_marker_at (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->static_tracepoint_marker_at (", this->beneath ()->shortname ());
target_debug_print_CORE_ADDR (arg0);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_static_tracepoint_marker_p (arg1);
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_bool (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -3674,13 +3694,13 @@ std::vector<static_tracepoint_marker>
debug_target::static_tracepoint_markers_by_strid (const char *arg0)
{
std::vector<static_tracepoint_marker> result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->static_tracepoint_markers_by_strid (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->static_tracepoint_markers_by_strid (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->static_tracepoint_markers_by_strid (arg0);
- fprintf_unfiltered (gdb_stdlog, "<- %s->static_tracepoint_markers_by_strid (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->static_tracepoint_markers_by_strid (", this->beneath ()->shortname ());
target_debug_print_const_char_p (arg0);
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_std_vector_static_tracepoint_marker (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -3700,12 +3720,12 @@ traceframe_info_up
debug_target::traceframe_info ()
{
traceframe_info_up result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->traceframe_info (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->traceframe_info (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->traceframe_info ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->traceframe_info (", this->beneath ()->shortname ());
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->traceframe_info (", this->beneath ()->shortname ());
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_traceframe_info_up (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -3725,13 +3745,13 @@ bool
debug_target::use_agent (bool arg0)
{
bool result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->use_agent (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->use_agent (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->use_agent (arg0);
- fprintf_unfiltered (gdb_stdlog, "<- %s->use_agent (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->use_agent (", this->beneath ()->shortname ());
target_debug_print_bool (arg0);
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_bool (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -3751,40 +3771,40 @@ bool
debug_target::can_use_agent ()
{
bool result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->can_use_agent (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->can_use_agent (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->can_use_agent ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->can_use_agent (", this->beneath ()->shortname ());
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->can_use_agent (", this->beneath ()->shortname ());
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_bool (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
struct btrace_target_info *
-target_ops::enable_btrace (ptid_t arg0, const struct btrace_config *arg1)
+target_ops::enable_btrace (thread_info *arg0, const struct btrace_config *arg1)
{
return this->beneath ()->enable_btrace (arg0, arg1);
}
struct btrace_target_info *
-dummy_target::enable_btrace (ptid_t arg0, const struct btrace_config *arg1)
+dummy_target::enable_btrace (thread_info *arg0, const struct btrace_config *arg1)
{
tcomplain ();
}
struct btrace_target_info *
-debug_target::enable_btrace (ptid_t arg0, const struct btrace_config *arg1)
+debug_target::enable_btrace (thread_info *arg0, const struct btrace_config *arg1)
{
struct btrace_target_info * result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->enable_btrace (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->enable_btrace (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->enable_btrace (arg0, arg1);
- fprintf_unfiltered (gdb_stdlog, "<- %s->enable_btrace (", this->beneath ()->shortname ());
- target_debug_print_ptid_t (arg0);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->enable_btrace (", this->beneath ()->shortname ());
+ target_debug_print_thread_info_p (arg0);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_const_struct_btrace_config_p (arg1);
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_struct_btrace_target_info_p (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -3803,11 +3823,11 @@ dummy_target::disable_btrace (struct btrace_target_info *arg0)
void
debug_target::disable_btrace (struct btrace_target_info *arg0)
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->disable_btrace (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->disable_btrace (...)\n", this->beneath ()->shortname ());
this->beneath ()->disable_btrace (arg0);
- fprintf_unfiltered (gdb_stdlog, "<- %s->disable_btrace (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->disable_btrace (", this->beneath ()->shortname ());
target_debug_print_struct_btrace_target_info_p (arg0);
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_puts (")\n", gdb_stdlog);
}
void
@@ -3825,11 +3845,11 @@ dummy_target::teardown_btrace (struct btrace_target_info *arg0)
void
debug_target::teardown_btrace (struct btrace_target_info *arg0)
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->teardown_btrace (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->teardown_btrace (...)\n", this->beneath ()->shortname ());
this->beneath ()->teardown_btrace (arg0);
- fprintf_unfiltered (gdb_stdlog, "<- %s->teardown_btrace (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->teardown_btrace (", this->beneath ()->shortname ());
target_debug_print_struct_btrace_target_info_p (arg0);
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_puts (")\n", gdb_stdlog);
}
enum btrace_error
@@ -3848,17 +3868,17 @@ enum btrace_error
debug_target::read_btrace (struct btrace_data *arg0, struct btrace_target_info *arg1, enum btrace_read_type arg2)
{
enum btrace_error result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->read_btrace (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->read_btrace (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->read_btrace (arg0, arg1, arg2);
- fprintf_unfiltered (gdb_stdlog, "<- %s->read_btrace (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->read_btrace (", this->beneath ()->shortname ());
target_debug_print_struct_btrace_data_p (arg0);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_struct_btrace_target_info_p (arg1);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_enum_btrace_read_type (arg2);
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_enum_btrace_error (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -3878,13 +3898,13 @@ const struct btrace_config *
debug_target::btrace_conf (const struct btrace_target_info *arg0)
{
const struct btrace_config * result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->btrace_conf (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->btrace_conf (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->btrace_conf (arg0);
- fprintf_unfiltered (gdb_stdlog, "<- %s->btrace_conf (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->btrace_conf (", this->beneath ()->shortname ());
target_debug_print_const_struct_btrace_target_info_p (arg0);
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_const_struct_btrace_config_p (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -3904,13 +3924,13 @@ enum record_method
debug_target::record_method (ptid_t arg0)
{
enum record_method result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->record_method (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->record_method (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->record_method (arg0);
- fprintf_unfiltered (gdb_stdlog, "<- %s->record_method (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->record_method (", this->beneath ()->shortname ());
target_debug_print_ptid_t (arg0);
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_enum_record_method (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -3928,10 +3948,10 @@ dummy_target::stop_recording ()
void
debug_target::stop_recording ()
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->stop_recording (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->stop_recording (...)\n", this->beneath ()->shortname ());
this->beneath ()->stop_recording ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->stop_recording (", this->beneath ()->shortname ());
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->stop_recording (", this->beneath ()->shortname ());
+ gdb_puts (")\n", gdb_stdlog);
}
void
@@ -3948,10 +3968,10 @@ dummy_target::info_record ()
void
debug_target::info_record ()
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->info_record (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->info_record (...)\n", this->beneath ()->shortname ());
this->beneath ()->info_record ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->info_record (", this->beneath ()->shortname ());
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->info_record (", this->beneath ()->shortname ());
+ gdb_puts (")\n", gdb_stdlog);
}
void
@@ -3969,11 +3989,11 @@ dummy_target::save_record (const char *arg0)
void
debug_target::save_record (const char *arg0)
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->save_record (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->save_record (...)\n", this->beneath ()->shortname ());
this->beneath ()->save_record (arg0);
- fprintf_unfiltered (gdb_stdlog, "<- %s->save_record (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->save_record (", this->beneath ()->shortname ());
target_debug_print_const_char_p (arg0);
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_puts (")\n", gdb_stdlog);
}
bool
@@ -3992,12 +4012,12 @@ bool
debug_target::supports_delete_record ()
{
bool result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->supports_delete_record (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->supports_delete_record (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->supports_delete_record ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->supports_delete_record (", this->beneath ()->shortname ());
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->supports_delete_record (", this->beneath ()->shortname ());
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_bool (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -4016,10 +4036,10 @@ dummy_target::delete_record ()
void
debug_target::delete_record ()
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->delete_record (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->delete_record (...)\n", this->beneath ()->shortname ());
this->beneath ()->delete_record ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->delete_record (", this->beneath ()->shortname ());
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->delete_record (", this->beneath ()->shortname ());
+ gdb_puts (")\n", gdb_stdlog);
}
bool
@@ -4038,13 +4058,13 @@ bool
debug_target::record_is_replaying (ptid_t arg0)
{
bool result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->record_is_replaying (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->record_is_replaying (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->record_is_replaying (arg0);
- fprintf_unfiltered (gdb_stdlog, "<- %s->record_is_replaying (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->record_is_replaying (", this->beneath ()->shortname ());
target_debug_print_ptid_t (arg0);
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_bool (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -4064,15 +4084,15 @@ bool
debug_target::record_will_replay (ptid_t arg0, int arg1)
{
bool result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->record_will_replay (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->record_will_replay (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->record_will_replay (arg0, arg1);
- fprintf_unfiltered (gdb_stdlog, "<- %s->record_will_replay (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->record_will_replay (", this->beneath ()->shortname ());
target_debug_print_ptid_t (arg0);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_int (arg1);
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_bool (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -4090,10 +4110,10 @@ dummy_target::record_stop_replaying ()
void
debug_target::record_stop_replaying ()
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->record_stop_replaying (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->record_stop_replaying (...)\n", this->beneath ()->shortname ());
this->beneath ()->record_stop_replaying ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->record_stop_replaying (", this->beneath ()->shortname ());
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->record_stop_replaying (", this->beneath ()->shortname ());
+ gdb_puts (")\n", gdb_stdlog);
}
void
@@ -4111,10 +4131,10 @@ dummy_target::goto_record_begin ()
void
debug_target::goto_record_begin ()
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->goto_record_begin (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->goto_record_begin (...)\n", this->beneath ()->shortname ());
this->beneath ()->goto_record_begin ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->goto_record_begin (", this->beneath ()->shortname ());
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->goto_record_begin (", this->beneath ()->shortname ());
+ gdb_puts (")\n", gdb_stdlog);
}
void
@@ -4132,10 +4152,10 @@ dummy_target::goto_record_end ()
void
debug_target::goto_record_end ()
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->goto_record_end (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->goto_record_end (...)\n", this->beneath ()->shortname ());
this->beneath ()->goto_record_end ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->goto_record_end (", this->beneath ()->shortname ());
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->goto_record_end (", this->beneath ()->shortname ());
+ gdb_puts (")\n", gdb_stdlog);
}
void
@@ -4153,11 +4173,11 @@ dummy_target::goto_record (ULONGEST arg0)
void
debug_target::goto_record (ULONGEST arg0)
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->goto_record (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->goto_record (...)\n", this->beneath ()->shortname ());
this->beneath ()->goto_record (arg0);
- fprintf_unfiltered (gdb_stdlog, "<- %s->goto_record (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->goto_record (", this->beneath ()->shortname ());
target_debug_print_ULONGEST (arg0);
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_puts (")\n", gdb_stdlog);
}
void
@@ -4175,13 +4195,13 @@ dummy_target::insn_history (int arg0, gdb_disassembly_flags arg1)
void
debug_target::insn_history (int arg0, gdb_disassembly_flags arg1)
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->insn_history (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->insn_history (...)\n", this->beneath ()->shortname ());
this->beneath ()->insn_history (arg0, arg1);
- fprintf_unfiltered (gdb_stdlog, "<- %s->insn_history (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->insn_history (", this->beneath ()->shortname ());
target_debug_print_int (arg0);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_gdb_disassembly_flags (arg1);
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_puts (")\n", gdb_stdlog);
}
void
@@ -4199,15 +4219,15 @@ dummy_target::insn_history_from (ULONGEST arg0, int arg1, gdb_disassembly_flags
void
debug_target::insn_history_from (ULONGEST arg0, int arg1, gdb_disassembly_flags arg2)
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->insn_history_from (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->insn_history_from (...)\n", this->beneath ()->shortname ());
this->beneath ()->insn_history_from (arg0, arg1, arg2);
- fprintf_unfiltered (gdb_stdlog, "<- %s->insn_history_from (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->insn_history_from (", this->beneath ()->shortname ());
target_debug_print_ULONGEST (arg0);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_int (arg1);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_gdb_disassembly_flags (arg2);
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_puts (")\n", gdb_stdlog);
}
void
@@ -4225,15 +4245,15 @@ dummy_target::insn_history_range (ULONGEST arg0, ULONGEST arg1, gdb_disassembly_
void
debug_target::insn_history_range (ULONGEST arg0, ULONGEST arg1, gdb_disassembly_flags arg2)
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->insn_history_range (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->insn_history_range (...)\n", this->beneath ()->shortname ());
this->beneath ()->insn_history_range (arg0, arg1, arg2);
- fprintf_unfiltered (gdb_stdlog, "<- %s->insn_history_range (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->insn_history_range (", this->beneath ()->shortname ());
target_debug_print_ULONGEST (arg0);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_ULONGEST (arg1);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_gdb_disassembly_flags (arg2);
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_puts (")\n", gdb_stdlog);
}
void
@@ -4251,13 +4271,13 @@ dummy_target::call_history (int arg0, record_print_flags arg1)
void
debug_target::call_history (int arg0, record_print_flags arg1)
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->call_history (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->call_history (...)\n", this->beneath ()->shortname ());
this->beneath ()->call_history (arg0, arg1);
- fprintf_unfiltered (gdb_stdlog, "<- %s->call_history (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->call_history (", this->beneath ()->shortname ());
target_debug_print_int (arg0);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_record_print_flags (arg1);
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_puts (")\n", gdb_stdlog);
}
void
@@ -4275,15 +4295,15 @@ dummy_target::call_history_from (ULONGEST arg0, int arg1, record_print_flags arg
void
debug_target::call_history_from (ULONGEST arg0, int arg1, record_print_flags arg2)
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->call_history_from (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->call_history_from (...)\n", this->beneath ()->shortname ());
this->beneath ()->call_history_from (arg0, arg1, arg2);
- fprintf_unfiltered (gdb_stdlog, "<- %s->call_history_from (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->call_history_from (", this->beneath ()->shortname ());
target_debug_print_ULONGEST (arg0);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_int (arg1);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_record_print_flags (arg2);
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_puts (")\n", gdb_stdlog);
}
void
@@ -4301,15 +4321,15 @@ dummy_target::call_history_range (ULONGEST arg0, ULONGEST arg1, record_print_fla
void
debug_target::call_history_range (ULONGEST arg0, ULONGEST arg1, record_print_flags arg2)
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->call_history_range (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->call_history_range (...)\n", this->beneath ()->shortname ());
this->beneath ()->call_history_range (arg0, arg1, arg2);
- fprintf_unfiltered (gdb_stdlog, "<- %s->call_history_range (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->call_history_range (", this->beneath ()->shortname ());
target_debug_print_ULONGEST (arg0);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_ULONGEST (arg1);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_record_print_flags (arg2);
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_puts (")\n", gdb_stdlog);
}
bool
@@ -4328,12 +4348,12 @@ bool
debug_target::augmented_libraries_svr4_read ()
{
bool result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->augmented_libraries_svr4_read (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->augmented_libraries_svr4_read (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->augmented_libraries_svr4_read ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->augmented_libraries_svr4_read (", this->beneath ()->shortname ());
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->augmented_libraries_svr4_read (", this->beneath ()->shortname ());
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_bool (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -4353,12 +4373,12 @@ const struct frame_unwind *
debug_target::get_unwinder ()
{
const struct frame_unwind * result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->get_unwinder (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->get_unwinder (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->get_unwinder ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->get_unwinder (", this->beneath ()->shortname ());
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->get_unwinder (", this->beneath ()->shortname ());
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_const_struct_frame_unwind_p (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -4378,12 +4398,12 @@ const struct frame_unwind *
debug_target::get_tailcall_unwinder ()
{
const struct frame_unwind * result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->get_tailcall_unwinder (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->get_tailcall_unwinder (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->get_tailcall_unwinder ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->get_tailcall_unwinder (", this->beneath ()->shortname ());
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->get_tailcall_unwinder (", this->beneath ()->shortname ());
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_const_struct_frame_unwind_p (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -4401,10 +4421,10 @@ dummy_target::prepare_to_generate_core ()
void
debug_target::prepare_to_generate_core ()
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->prepare_to_generate_core (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->prepare_to_generate_core (...)\n", this->beneath ()->shortname ());
this->beneath ()->prepare_to_generate_core ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->prepare_to_generate_core (", this->beneath ()->shortname ());
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->prepare_to_generate_core (", this->beneath ()->shortname ());
+ gdb_puts (")\n", gdb_stdlog);
}
void
@@ -4421,10 +4441,10 @@ dummy_target::done_generating_core ()
void
debug_target::done_generating_core ()
{
- fprintf_unfiltered (gdb_stdlog, "-> %s->done_generating_core (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->done_generating_core (...)\n", this->beneath ()->shortname ());
this->beneath ()->done_generating_core ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->done_generating_core (", this->beneath ()->shortname ());
- fputs_unfiltered (")\n", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->done_generating_core (", this->beneath ()->shortname ());
+ gdb_puts (")\n", gdb_stdlog);
}
bool
@@ -4443,12 +4463,12 @@ bool
debug_target::supports_memory_tagging ()
{
bool result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->supports_memory_tagging (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->supports_memory_tagging (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->supports_memory_tagging ();
- fprintf_unfiltered (gdb_stdlog, "<- %s->supports_memory_tagging (", this->beneath ()->shortname ());
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_printf (gdb_stdlog, "<- %s->supports_memory_tagging (", this->beneath ()->shortname ());
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_bool (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -4468,19 +4488,19 @@ bool
debug_target::fetch_memtags (CORE_ADDR arg0, size_t arg1, gdb::byte_vector &arg2, int arg3)
{
bool result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->fetch_memtags (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->fetch_memtags (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->fetch_memtags (arg0, arg1, arg2, arg3);
- fprintf_unfiltered (gdb_stdlog, "<- %s->fetch_memtags (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->fetch_memtags (", this->beneath ()->shortname ());
target_debug_print_CORE_ADDR (arg0);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_size_t (arg1);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_gdb_byte_vector_r (arg2);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_int (arg3);
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_bool (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
@@ -4500,19 +4520,19 @@ bool
debug_target::store_memtags (CORE_ADDR arg0, size_t arg1, const gdb::byte_vector &arg2, int arg3)
{
bool result;
- fprintf_unfiltered (gdb_stdlog, "-> %s->store_memtags (...)\n", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "-> %s->store_memtags (...)\n", this->beneath ()->shortname ());
result = this->beneath ()->store_memtags (arg0, arg1, arg2, arg3);
- fprintf_unfiltered (gdb_stdlog, "<- %s->store_memtags (", this->beneath ()->shortname ());
+ gdb_printf (gdb_stdlog, "<- %s->store_memtags (", this->beneath ()->shortname ());
target_debug_print_CORE_ADDR (arg0);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_size_t (arg1);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_const_gdb_byte_vector_r (arg2);
- fputs_unfiltered (", ", gdb_stdlog);
+ gdb_puts (", ", gdb_stdlog);
target_debug_print_int (arg3);
- fputs_unfiltered (") = ", gdb_stdlog);
+ gdb_puts (") = ", gdb_stdlog);
target_debug_print_bool (result);
- fputs_unfiltered ("\n", gdb_stdlog);
+ gdb_puts ("\n", gdb_stdlog);
return result;
}
diff --git a/gdb/target-descriptions.c b/gdb/target-descriptions.c
index 282729df9e6..85954ac2939 100644
--- a/gdb/target-descriptions.c
+++ b/gdb/target-descriptions.c
@@ -30,7 +30,7 @@
#include "xml-tdesc.h"
#include "osabi.h"
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
#include "hashtab.h"
#include "inferior.h"
#include <algorithm>
@@ -1007,12 +1007,12 @@ tdesc_remote_register_number (struct gdbarch *gdbarch, int regno)
int
tdesc_register_in_reggroup_p (struct gdbarch *gdbarch, int regno,
- struct reggroup *reggroup)
+ const struct reggroup *reggroup)
{
struct tdesc_reg *reg = tdesc_find_register (gdbarch, regno);
if (reg != NULL && !reg->group.empty ()
- && (reg->group == reggroup_name (reggroup)))
+ && (reg->group == reggroup->name ()))
return 1;
if (reg != NULL
@@ -1028,7 +1028,7 @@ tdesc_register_in_reggroup_p (struct gdbarch *gdbarch, int regno,
static int
tdesc_register_reggroup_p (struct gdbarch *gdbarch, int regno,
- struct reggroup *reggroup)
+ const struct reggroup *reggroup)
{
int num_regs = gdbarch_num_regs (gdbarch);
int num_pseudo_regs = gdbarch_num_pseudo_regs (gdbarch);
@@ -1303,13 +1303,13 @@ show_tdesc_filename_cmd (struct ui_file *file, int from_tty,
value = get_tdesc_info (current_inferior ())->filename.data ();
if (value != NULL && *value != '\0')
- fprintf_filtered (file,
- _("The target description will be read from \"%s\".\n"),
- value);
+ gdb_printf (file,
+ _("The target description will be read from \"%s\".\n"),
+ value);
else
- fprintf_filtered (file,
- _("The target description will be "
- "read from the target.\n"));
+ gdb_printf (file,
+ _("The target description will be "
+ "read from the target.\n"));
}
static void
@@ -1347,9 +1347,9 @@ public:
*outp = '\0';
/* Standard boilerplate. */
- printf_filtered ("/* THIS FILE IS GENERATED. "
- "-*- buffer-read-only: t -*- vi"
- ":set ro:\n");
+ gdb_printf ("/* THIS FILE IS GENERATED. "
+ "-*- buffer-read-only: t -*- vi"
+ ":set ro:\n");
}
~print_c_tdesc ()
@@ -1359,56 +1359,56 @@ public:
void visit_pre (const target_desc *e) override
{
- printf_filtered (" Original: %s */\n\n",
- lbasename (m_filename_after_features.c_str ()));
-
- printf_filtered ("#include \"defs.h\"\n");
- printf_filtered ("#include \"osabi.h\"\n");
- printf_filtered ("#include \"target-descriptions.h\"\n");
- printf_filtered ("\n");
-
- printf_filtered ("struct target_desc *tdesc_%s;\n", m_function);
- printf_filtered ("static void\n");
- printf_filtered ("initialize_tdesc_%s (void)\n", m_function);
- printf_filtered ("{\n");
- printf_filtered
+ gdb_printf (" Original: %s */\n\n",
+ lbasename (m_filename_after_features.c_str ()));
+
+ gdb_printf ("#include \"defs.h\"\n");
+ gdb_printf ("#include \"osabi.h\"\n");
+ gdb_printf ("#include \"target-descriptions.h\"\n");
+ gdb_printf ("\n");
+
+ gdb_printf ("struct target_desc *tdesc_%s;\n", m_function);
+ gdb_printf ("static void\n");
+ gdb_printf ("initialize_tdesc_%s (void)\n", m_function);
+ gdb_printf ("{\n");
+ gdb_printf
(" target_desc_up result = allocate_target_description ();\n");
if (tdesc_architecture (e) != NULL)
{
- printf_filtered
+ gdb_printf
(" set_tdesc_architecture (result.get (), bfd_scan_arch (\"%s\"));\n",
tdesc_architecture (e)->printable_name);
- printf_filtered ("\n");
+ gdb_printf ("\n");
}
if (tdesc_osabi (e) > GDB_OSABI_UNKNOWN
&& tdesc_osabi (e) < GDB_OSABI_INVALID)
{
- printf_filtered
+ gdb_printf
(" set_tdesc_osabi (result.get (), osabi_from_tdesc_string (\"%s\"));\n",
gdbarch_osabi_name (tdesc_osabi (e)));
- printf_filtered ("\n");
+ gdb_printf ("\n");
}
for (const tdesc_compatible_info_up &compatible : e->compatible)
- printf_filtered
+ gdb_printf
(" tdesc_add_compatible (result.get (), bfd_scan_arch (\"%s\"));\n",
compatible->arch ()->printable_name);
if (!e->compatible.empty ())
- printf_filtered ("\n");
+ gdb_printf ("\n");
for (const property &prop : e->properties)
- printf_filtered (" set_tdesc_property (result.get (), \"%s\", \"%s\");\n",
- prop.key.c_str (), prop.value.c_str ());
+ gdb_printf (" set_tdesc_property (result.get (), \"%s\", \"%s\");\n",
+ prop.key.c_str (), prop.value.c_str ());
- printf_filtered (" struct tdesc_feature *feature;\n");
+ gdb_printf (" struct tdesc_feature *feature;\n");
}
void visit_pre (const tdesc_feature *e) override
{
- printf_filtered ("\n feature = tdesc_create_feature (result.get (), \"%s\");\n",
- e->name.c_str ());
+ gdb_printf ("\n feature = tdesc_create_feature (result.get (), \"%s\");\n",
+ e->name.c_str ());
}
void visit_post (const tdesc_feature *e) override
@@ -1416,8 +1416,8 @@ public:
void visit_post (const target_desc *e) override
{
- printf_filtered ("\n tdesc_%s = result.release ();\n", m_function);
- printf_filtered ("}\n");
+ gdb_printf ("\n tdesc_%s = result.release ();\n", m_function);
+ gdb_printf ("}\n");
}
void visit (const tdesc_type_builtin *type) override
@@ -1429,25 +1429,25 @@ public:
{
if (!m_printed_element_type)
{
- printf_filtered (" tdesc_type *element_type;\n");
+ gdb_printf (" tdesc_type *element_type;\n");
m_printed_element_type = true;
}
- printf_filtered
+ gdb_printf
(" element_type = tdesc_named_type (feature, \"%s\");\n",
type->element_type->name.c_str ());
- printf_filtered
+ gdb_printf
(" tdesc_create_vector (feature, \"%s\", element_type, %d);\n",
type->name.c_str (), type->count);
- printf_filtered ("\n");
+ gdb_printf ("\n");
}
void visit (const tdesc_type_with_fields *type) override
{
if (!m_printed_type_with_fields)
{
- printf_filtered (" tdesc_type_with_fields *type_with_fields;\n");
+ gdb_printf (" tdesc_type_with_fields *type_with_fields;\n");
m_printed_type_with_fields = true;
}
@@ -1457,16 +1457,16 @@ public:
case TDESC_TYPE_FLAGS:
if (type->kind == TDESC_TYPE_STRUCT)
{
- printf_filtered
+ gdb_printf
(" type_with_fields = tdesc_create_struct (feature, \"%s\");\n",
type->name.c_str ());
if (type->size != 0)
- printf_filtered
+ gdb_printf
(" tdesc_set_struct_size (type_with_fields, %d);\n", type->size);
}
else
{
- printf_filtered
+ gdb_printf
(" type_with_fields = tdesc_create_flags (feature, \"%s\", %d);\n",
type->name.c_str (), type->size);
}
@@ -1485,7 +1485,7 @@ public:
if (f.type->kind == TDESC_TYPE_BOOL)
{
gdb_assert (f.start == f.end);
- printf_filtered
+ gdb_printf
(" tdesc_add_flag (type_with_fields, %d, \"%s\");\n",
f.start, f.name.c_str ());
}
@@ -1493,7 +1493,7 @@ public:
|| (type->size == 8
&& f.type->kind == TDESC_TYPE_UINT64))
{
- printf_filtered
+ gdb_printf
(" tdesc_add_bitfield (type_with_fields, \"%s\", %d, %d);\n",
f.name.c_str (), f.start, f.end);
}
@@ -1502,7 +1502,7 @@ public:
printf_field_type_assignment
("tdesc_named_type (feature, \"%s\");\n",
type_name);
- printf_filtered
+ gdb_printf
(" tdesc_add_typed_bitfield (type_with_fields, \"%s\","
" %d, %d, field_type);\n",
f.name.c_str (), f.start, f.end);
@@ -1514,31 +1514,31 @@ public:
gdb_assert (type->kind == TDESC_TYPE_STRUCT);
printf_field_type_assignment
("tdesc_named_type (feature, \"%s\");\n", type_name);
- printf_filtered
+ gdb_printf
(" tdesc_add_field (type_with_fields, \"%s\", field_type);\n",
f.name.c_str ());
}
}
break;
case TDESC_TYPE_UNION:
- printf_filtered
+ gdb_printf
(" type_with_fields = tdesc_create_union (feature, \"%s\");\n",
type->name.c_str ());
for (const tdesc_type_field &f : type->fields)
{
printf_field_type_assignment
("tdesc_named_type (feature, \"%s\");\n", f.type->name.c_str ());
- printf_filtered
+ gdb_printf
(" tdesc_add_field (type_with_fields, \"%s\", field_type);\n",
f.name.c_str ());
}
break;
case TDESC_TYPE_ENUM:
- printf_filtered
+ gdb_printf
(" type_with_fields = tdesc_create_enum (feature, \"%s\", %d);\n",
type->name.c_str (), type->size);
for (const tdesc_type_field &f : type->fields)
- printf_filtered
+ gdb_printf
(" tdesc_add_enum_value (type_with_fields, %d, \"%s\");\n",
f.start, f.name.c_str ());
break;
@@ -1546,19 +1546,19 @@ public:
error (_("C output is not supported type \"%s\"."), type->name.c_str ());
}
- printf_filtered ("\n");
+ gdb_printf ("\n");
}
void visit (const tdesc_reg *reg) override
{
- printf_filtered (" tdesc_create_reg (feature, \"%s\", %ld, %d, ",
- reg->name.c_str (), reg->target_regnum,
- reg->save_restore);
+ gdb_printf (" tdesc_create_reg (feature, \"%s\", %ld, %d, ",
+ reg->name.c_str (), reg->target_regnum,
+ reg->save_restore);
if (!reg->group.empty ())
- printf_filtered ("\"%s\", ", reg->group.c_str ());
+ gdb_printf ("\"%s\", ", reg->group.c_str ());
else
- printf_filtered ("NULL, ");
- printf_filtered ("%d, \"%s\");\n", reg->bitsize, reg->type.c_str ());
+ gdb_printf ("NULL, ");
+ gdb_printf ("%d, \"%s\");\n", reg->bitsize, reg->type.c_str ());
}
protected:
@@ -1573,15 +1573,15 @@ private:
{
if (!m_printed_field_type)
{
- printf_filtered (" tdesc_type *field_type;\n");
+ gdb_printf (" tdesc_type *field_type;\n");
m_printed_field_type = true;
}
- printf_filtered (" field_type = ");
+ gdb_printf (" field_type = ");
va_list args;
va_start (args, fmt);
- vprintf_filtered (fmt, args);
+ gdb_vprintf (fmt, args);
va_end (args);
}
@@ -1613,11 +1613,11 @@ public:
void visit_pre (const target_desc *e) override
{
- printf_filtered (" Original: %s */\n\n",
- lbasename (m_filename_after_features.c_str ()));
+ gdb_printf (" Original: %s */\n\n",
+ lbasename (m_filename_after_features.c_str ()));
- printf_filtered ("#include \"gdbsupport/tdesc.h\"\n");
- printf_filtered ("\n");
+ gdb_printf ("#include \"gdbsupport/tdesc.h\"\n");
+ gdb_printf ("\n");
}
void visit_post (const target_desc *e) override
@@ -1633,22 +1633,22 @@ public:
std::replace (name.begin (), name.end (), '/', '_');
std::replace (name.begin (), name.end (), '-', '_');
- printf_filtered ("static int\n");
- printf_filtered ("create_feature_%s ", name.c_str ());
- printf_filtered ("(struct target_desc *result, long regnum)\n");
+ gdb_printf ("static int\n");
+ gdb_printf ("create_feature_%s ", name.c_str ());
+ gdb_printf ("(struct target_desc *result, long regnum)\n");
- printf_filtered ("{\n");
- printf_filtered (" struct tdesc_feature *feature;\n");
+ gdb_printf ("{\n");
+ gdb_printf (" struct tdesc_feature *feature;\n");
- printf_filtered
+ gdb_printf
("\n feature = tdesc_create_feature (result, \"%s\");\n",
e->name.c_str ());
}
void visit_post (const tdesc_feature *e) override
{
- printf_filtered (" return regnum;\n");
- printf_filtered ("}\n");
+ gdb_printf (" return regnum;\n");
+ gdb_printf ("}\n");
}
void visit (const tdesc_reg *reg) override
@@ -1681,27 +1681,27 @@ public:
and also print the message so that it can be saved in the
generated c file. */
- printf_filtered ("ERROR: \"regnum\" attribute %ld ",
- reg->target_regnum);
- printf_filtered ("is not the largest number (%d).\n",
- m_next_regnum);
+ gdb_printf ("ERROR: \"regnum\" attribute %ld ",
+ reg->target_regnum);
+ gdb_printf ("is not the largest number (%d).\n",
+ m_next_regnum);
error (_("\"regnum\" attribute %ld is not the largest number (%d)."),
reg->target_regnum, m_next_regnum);
}
if (reg->target_regnum > m_next_regnum)
{
- printf_filtered (" regnum = %ld;\n", reg->target_regnum);
+ gdb_printf (" regnum = %ld;\n", reg->target_regnum);
m_next_regnum = reg->target_regnum;
}
- printf_filtered (" tdesc_create_reg (feature, \"%s\", regnum++, %d, ",
- reg->name.c_str (), reg->save_restore);
+ gdb_printf (" tdesc_create_reg (feature, \"%s\", regnum++, %d, ",
+ reg->name.c_str (), reg->save_restore);
if (!reg->group.empty ())
- printf_filtered ("\"%s\", ", reg->group.c_str ());
+ gdb_printf ("\"%s\", ", reg->group.c_str ());
else
- printf_filtered ("NULL, ");
- printf_filtered ("%d, \"%s\");\n", reg->bitsize, reg->type.c_str ());
+ gdb_printf ("NULL, ");
+ gdb_printf ("%d, \"%s\");\n", reg->bitsize, reg->type.c_str ());
m_next_regnum++;
}
@@ -1858,7 +1858,7 @@ maint_print_xml_tdesc_cmd (const char *args, int from_tty)
std::string buf;
print_xml_feature v (&buf);
tdesc->accept (v);
- puts_filtered (buf.c_str ());
+ gdb_puts (buf.c_str ());
}
namespace selftests {
@@ -1900,8 +1900,8 @@ maintenance_check_tdesc_xml_convert (const target_desc *tdesc, const char *name)
if (xml == nullptr || *xml != '@')
{
- printf_filtered (_("Could not convert description for %s to xml.\n"),
- name);
+ gdb_printf (_("Could not convert description for %s to xml.\n"),
+ name);
return false;
}
@@ -1909,14 +1909,14 @@ maintenance_check_tdesc_xml_convert (const target_desc *tdesc, const char *name)
if (tdesc_trans == nullptr)
{
- printf_filtered (_("Could not convert description for %s from xml.\n"),
- name);
+ gdb_printf (_("Could not convert description for %s from xml.\n"),
+ name);
return false;
}
else if (*tdesc != *tdesc_trans)
{
- printf_filtered (_("Converted description for %s does not match.\n"),
- name);
+ gdb_printf (_("Converted description for %s does not match.\n"),
+ name);
return false;
}
return true;
@@ -1945,15 +1945,15 @@ maintenance_check_xml_descriptions (const char *dir, int from_tty)
if (tdesc == NULL || *tdesc != *e.tdesc)
{
- printf_filtered ( _("Descriptions for %s do not match.\n"), e.name);
+ gdb_printf ( _("Descriptions for %s do not match.\n"), e.name);
failed++;
}
else if (!maintenance_check_tdesc_xml_convert (tdesc, e.name)
|| !maintenance_check_tdesc_xml_convert (e.tdesc.get (), e.name))
failed++;
}
- printf_filtered (_("Tested %lu XML files, %d failed\n"),
- (long) selftests::xml_tdesc.size (), failed);
+ gdb_printf (_("Tested %lu XML files, %d failed\n"),
+ (long) selftests::xml_tdesc.size (), failed);
}
void _initialize_target_descriptions ();
diff --git a/gdb/target-descriptions.h b/gdb/target-descriptions.h
index 9d959977062..3b90dedcd80 100644
--- a/gdb/target-descriptions.h
+++ b/gdb/target-descriptions.h
@@ -229,7 +229,7 @@ struct type *tdesc_find_type (struct gdbarch *gdbarch, const char *id);
specify a group. */
int tdesc_register_in_reggroup_p (struct gdbarch *gdbarch, int regno,
- struct reggroup *reggroup);
+ const struct reggroup *reggroup);
/* Methods for constructing a target description. */
diff --git a/gdb/target.c b/gdb/target.c
index 950f2f08e31..1063f8086bc 100644
--- a/gdb/target.c
+++ b/gdb/target.c
@@ -26,6 +26,7 @@
#include "symtab.h"
#include "inferior.h"
#include "infrun.h"
+#include "observable.h"
#include "bfd.h"
#include "symfile.h"
#include "objfiles.h"
@@ -158,7 +159,7 @@ static void
show_targetdebug (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Target debugging is %s.\n"), value);
+ gdb_printf (file, _("Target debugging is %s.\n"), value);
}
int
@@ -846,14 +847,14 @@ open_target (const char *args, int from_tty, struct cmd_list_element *command)
target_open_ftype *func = target_factories[ti];
if (targetdebug)
- fprintf_unfiltered (gdb_stdlog, "-> %s->open (...)\n",
- ti->shortname);
+ gdb_printf (gdb_stdlog, "-> %s->open (...)\n",
+ ti->shortname);
func (args, from_tty);
if (targetdebug)
- fprintf_unfiltered (gdb_stdlog, "<- %s->open (%s, %d)\n",
- ti->shortname, args, from_tty);
+ gdb_printf (gdb_stdlog, "<- %s->open (%s, %d)\n",
+ ti->shortname, args, from_tty);
}
/* See target.h. */
@@ -1127,7 +1128,7 @@ noprocess (void)
static void
default_terminal_info (struct target_ops *self, const char *args, int from_tty)
{
- printf_filtered (_("No saved terminal information.\n"));
+ gdb_printf (_("No saved terminal information.\n"));
}
/* A default implementation for the to_get_ada_task_ptid target method.
@@ -1239,9 +1240,9 @@ unpush_target_and_assert (struct target_ops *target)
{
if (!current_inferior ()->unpush_target (target))
{
- fprintf_unfiltered (gdb_stderr,
- "pop_all_targets couldn't find target %s\n",
- target->shortname ());
+ gdb_printf (gdb_stderr,
+ "pop_all_targets couldn't find target %s\n",
+ target->shortname ());
internal_error (__FILE__, __LINE__,
_("failed internal consistency check"));
}
@@ -1295,6 +1296,11 @@ target_translate_tls_address (struct objfile *objfile, CORE_ADDR offset)
struct target_ops *target = current_inferior ()->top_target ();
struct gdbarch *gdbarch = target_gdbarch ();
+ /* If OBJFILE is a separate debug object file, look for the
+ original object file. */
+ if (objfile->separate_debug_objfile_backlink != NULL)
+ objfile = objfile->separate_debug_objfile_backlink;
+
if (gdbarch_fetch_tls_load_module_address_p (gdbarch))
{
ptid_t ptid = inferior_ptid;
@@ -1388,26 +1394,6 @@ target_xfer_status_to_string (enum target_xfer_status status)
};
-/* See target.h. */
-
-gdb::unique_xmalloc_ptr<char>
-target_read_string (CORE_ADDR memaddr, int len, int *bytes_read)
-{
- gdb::unique_xmalloc_ptr<gdb_byte> buffer;
-
- int ignore;
- if (bytes_read == nullptr)
- bytes_read = &ignore;
-
- /* Note that the endian-ness does not matter here. */
- int errcode = read_string (memaddr, -1, 1, len, BFD_ENDIAN_LITTLE,
- &buffer, bytes_read);
- if (errcode != 0)
- return {};
-
- return gdb::unique_xmalloc_ptr<char> ((char *) buffer.release ());
-}
-
const target_section_table *
target_get_section_table (struct target_ops *target)
{
@@ -1748,17 +1734,17 @@ target_xfer_partial (struct target_ops *ops,
{
const unsigned char *myaddr = NULL;
- fprintf_unfiltered (gdb_stdlog,
- "%s:target_xfer_partial "
- "(%d, %s, %s, %s, %s, %s) = %d, %s",
- ops->shortname (),
- (int) object,
- (annex ? annex : "(null)"),
- host_address_to_string (readbuf),
- host_address_to_string (writebuf),
- core_addr_to_string_nz (offset),
- pulongest (len), retval,
- pulongest (*xfered_len));
+ gdb_printf (gdb_stdlog,
+ "%s:target_xfer_partial "
+ "(%d, %s, %s, %s, %s, %s) = %d, %s",
+ ops->shortname (),
+ (int) object,
+ (annex ? annex : "(null)"),
+ host_address_to_string (readbuf),
+ host_address_to_string (writebuf),
+ core_addr_to_string_nz (offset),
+ pulongest (len), retval,
+ pulongest (*xfered_len));
if (readbuf)
myaddr = readbuf;
@@ -1768,24 +1754,24 @@ target_xfer_partial (struct target_ops *ops,
{
int i;
- fputs_unfiltered (", bytes =", gdb_stdlog);
+ gdb_puts (", bytes =", gdb_stdlog);
for (i = 0; i < *xfered_len; i++)
{
if ((((intptr_t) &(myaddr[i])) & 0xf) == 0)
{
if (targetdebug < 2 && i > 0)
{
- fprintf_unfiltered (gdb_stdlog, " ...");
+ gdb_printf (gdb_stdlog, " ...");
break;
}
- fprintf_unfiltered (gdb_stdlog, "\n");
+ gdb_printf (gdb_stdlog, "\n");
}
- fprintf_unfiltered (gdb_stdlog, " %02x", myaddr[i] & 0xff);
+ gdb_printf (gdb_stdlog, " %02x", myaddr[i] & 0xff);
}
}
- fputc_unfiltered ('\n', gdb_stdlog);
+ gdb_putc ('\n', gdb_stdlog);
}
/* Check implementations of to_xfer_partial update *XFERED_LEN
@@ -1961,9 +1947,9 @@ static void
show_trust_readonly (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file,
- _("Mode for reading from readonly sections is %s.\n"),
- value);
+ gdb_printf (file,
+ _("Mode for reading from readonly sections is %s.\n"),
+ value);
}
/* Target vector read/write partial wrapper functions. */
@@ -2444,8 +2430,8 @@ info_target_command (const char *args, int from_tty)
if (current_program_space->symfile_object_file != NULL)
{
objfile *objf = current_program_space->symfile_object_file;
- printf_filtered (_("Symbols from \"%s\".\n"),
- objfile_name (objf));
+ gdb_printf (_("Symbols from \"%s\".\n"),
+ objfile_name (objf));
}
for (target_ops *t = current_inferior ()->top_target ();
@@ -2458,9 +2444,9 @@ info_target_command (const char *args, int from_tty)
if ((int) (t->stratum ()) <= (int) dummy_stratum)
continue;
if (has_all_mem)
- printf_filtered (_("\tWhile running this, "
- "GDB does not access memory from...\n"));
- printf_filtered ("%s:\n", t->longname ());
+ gdb_printf (_("\tWhile running this, "
+ "GDB does not access memory from...\n"));
+ gdb_printf ("%s:\n", t->longname ());
t->files_info ();
has_all_mem = t->has_all_memory ();
}
@@ -2609,7 +2595,18 @@ target_wait (ptid_t ptid, struct target_waitstatus *status,
if (!target_can_async_p (target))
gdb_assert ((options & TARGET_WNOHANG) == 0);
- return target->wait (ptid, status, options);
+ try
+ {
+ gdb::observers::target_pre_wait.notify (ptid);
+ ptid_t event_ptid = target->wait (ptid, status, options);
+ gdb::observers::target_post_wait.notify (event_ptid);
+ return event_ptid;
+ }
+ catch (...)
+ {
+ gdb::observers::target_post_wait.notify (null_ptid);
+ throw;
+ }
}
/* See target.h. */
@@ -2658,21 +2655,27 @@ target_thread_info_to_thread_handle (struct thread_info *tip)
}
void
-target_resume (ptid_t ptid, int step, enum gdb_signal signal)
+target_resume (ptid_t scope_ptid, int step, enum gdb_signal signal)
{
process_stratum_target *curr_target = current_inferior ()->process_target ();
gdb_assert (!curr_target->commit_resumed_state);
+ gdb_assert (inferior_ptid != null_ptid);
+ gdb_assert (inferior_ptid.matches (scope_ptid));
+
target_dcache_invalidate ();
- current_inferior ()->top_target ()->resume (ptid, step, signal);
+ current_inferior ()->top_target ()->resume (scope_ptid, step, signal);
- registers_changed_ptid (curr_target, ptid);
+ registers_changed_ptid (curr_target, scope_ptid);
/* We only set the internal executing state here. The user/frontend
running state is set at a higher level. This also clears the
thread's stop_pc as side effect. */
- set_executing (curr_target, ptid, true);
- clear_inline_frame_state (curr_target, ptid);
+ set_executing (curr_target, scope_ptid, true);
+ clear_inline_frame_state (curr_target, scope_ptid);
+
+ if (target_can_async_p ())
+ target_async (1);
}
/* See target.h. */
@@ -2857,10 +2860,10 @@ static void
show_auto_connect_native_target (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file,
- _("Whether GDB may automatically connect to the "
- "native target is %s.\n"),
- value);
+ gdb_printf (file,
+ _("Whether GDB may automatically connect to the "
+ "native target is %s.\n"),
+ value);
}
/* A pointer to the target that can respond to "run" or "attach".
@@ -2968,8 +2971,8 @@ target_info_proc (const char *args, enum info_proc_what what)
if (t->info_proc (args, what))
{
if (targetdebug)
- fprintf_unfiltered (gdb_stdlog,
- "target_info_proc (\"%s\", %d)\n", args, what);
+ gdb_printf (gdb_stdlog,
+ "target_info_proc (\"%s\", %d)\n", args, what);
return 1;
}
@@ -3275,13 +3278,13 @@ target_fileio_open (struct inferior *inf, const char *filename,
fd = acquire_fileio_fd (t, fd);
if (targetdebug)
- fprintf_unfiltered (gdb_stdlog,
- "target_fileio_open (%d,%s,0x%x,0%o,%d)"
- " = %d (%d)\n",
- inf == NULL ? 0 : inf->num,
- filename, flags, mode,
- warn_if_slow, fd,
- fd != -1 ? 0 : *target_errno);
+ gdb_printf (gdb_stdlog,
+ "target_fileio_open (%d,%s,0x%x,0%o,%d)"
+ " = %d (%d)\n",
+ inf == NULL ? 0 : inf->num,
+ filename, flags, mode,
+ warn_if_slow, fd,
+ fd != -1 ? 0 : *target_errno);
return fd;
}
@@ -3307,11 +3310,11 @@ target_fileio_pwrite (int fd, const gdb_byte *write_buf, int len,
len, offset, target_errno);
if (targetdebug)
- fprintf_unfiltered (gdb_stdlog,
- "target_fileio_pwrite (%d,...,%d,%s) "
- "= %d (%d)\n",
- fd, len, pulongest (offset),
- ret, ret != -1 ? 0 : *target_errno);
+ gdb_printf (gdb_stdlog,
+ "target_fileio_pwrite (%d,...,%d,%s) "
+ "= %d (%d)\n",
+ fd, len, pulongest (offset),
+ ret, ret != -1 ? 0 : *target_errno);
return ret;
}
@@ -3333,11 +3336,11 @@ target_fileio_pread (int fd, gdb_byte *read_buf, int len,
len, offset, target_errno);
if (targetdebug)
- fprintf_unfiltered (gdb_stdlog,
- "target_fileio_pread (%d,...,%d,%s) "
- "= %d (%d)\n",
- fd, len, pulongest (offset),
- ret, ret != -1 ? 0 : *target_errno);
+ gdb_printf (gdb_stdlog,
+ "target_fileio_pread (%d,...,%d,%s) "
+ "= %d (%d)\n",
+ fd, len, pulongest (offset),
+ ret, ret != -1 ? 0 : *target_errno);
return ret;
}
@@ -3357,9 +3360,9 @@ target_fileio_fstat (int fd, struct stat *sb, int *target_errno)
ret = fh->target->fileio_fstat (fh->target_fd, sb, target_errno);
if (targetdebug)
- fprintf_unfiltered (gdb_stdlog,
- "target_fileio_fstat (%d) = %d (%d)\n",
- fd, ret, ret != -1 ? 0 : *target_errno);
+ gdb_printf (gdb_stdlog,
+ "target_fileio_fstat (%d) = %d (%d)\n",
+ fd, ret, ret != -1 ? 0 : *target_errno);
return ret;
}
@@ -3384,9 +3387,9 @@ target_fileio_close (int fd, int *target_errno)
}
if (targetdebug)
- fprintf_unfiltered (gdb_stdlog,
- "target_fileio_close (%d) = %d (%d)\n",
- fd, ret, ret != -1 ? 0 : *target_errno);
+ gdb_printf (gdb_stdlog,
+ "target_fileio_close (%d) = %d (%d)\n",
+ fd, ret, ret != -1 ? 0 : *target_errno);
return ret;
}
@@ -3404,11 +3407,11 @@ target_fileio_unlink (struct inferior *inf, const char *filename,
continue;
if (targetdebug)
- fprintf_unfiltered (gdb_stdlog,
- "target_fileio_unlink (%d,%s)"
- " = %d (%d)\n",
- inf == NULL ? 0 : inf->num, filename,
- ret, ret != -1 ? 0 : *target_errno);
+ gdb_printf (gdb_stdlog,
+ "target_fileio_unlink (%d,%s)"
+ " = %d (%d)\n",
+ inf == NULL ? 0 : inf->num, filename,
+ ret, ret != -1 ? 0 : *target_errno);
return ret;
}
@@ -3431,12 +3434,12 @@ target_fileio_readlink (struct inferior *inf, const char *filename,
continue;
if (targetdebug)
- fprintf_unfiltered (gdb_stdlog,
- "target_fileio_readlink (%d,%s)"
- " = %s (%d)\n",
- inf == NULL ? 0 : inf->num,
- filename, ret ? ret->c_str () : "(nil)",
- ret ? 0 : *target_errno);
+ gdb_printf (gdb_stdlog,
+ "target_fileio_readlink (%d,%s)"
+ " = %s (%d)\n",
+ inf == NULL ? 0 : inf->num,
+ filename, ret ? ret->c_str () : "(nil)",
+ ret ? 0 : *target_errno);
return ret;
}
@@ -3631,11 +3634,11 @@ target_announce_detach (int from_tty)
pid = inferior_ptid.pid ();
exec_file = get_exec_file (0);
if (exec_file == nullptr)
- printf_unfiltered ("Detaching from pid %s\n",
- target_pid_to_str (ptid_t (pid)).c_str ());
+ gdb_printf ("Detaching from pid %s\n",
+ target_pid_to_str (ptid_t (pid)).c_str ());
else
- printf_unfiltered (_("Detaching from program: %s, %s\n"), exec_file,
- target_pid_to_str (ptid_t (pid)).c_str ());
+ gdb_printf (_("Detaching from program: %s, %s\n"), exec_file,
+ target_pid_to_str (ptid_t (pid)).c_str ());
}
/* See target.h */
@@ -3649,11 +3652,11 @@ target_announce_attach (int from_tty, int pid)
const char *exec_file = get_exec_file (0);
if (exec_file != nullptr)
- printf_unfiltered ("Attaching to program: %s, %s\n", exec_file,
- target_pid_to_str (ptid_t (pid)).c_str ());
+ gdb_printf ("Attaching to program: %s, %s\n", exec_file,
+ target_pid_to_str (ptid_t (pid)).c_str ());
else
- printf_unfiltered ("Attaching to %s\n",
- target_pid_to_str (ptid_t (pid)).c_str ());
+ gdb_printf ("Attaching to %s\n",
+ target_pid_to_str (ptid_t (pid)).c_str ());
}
/* The inferior process has died. Long live the inferior! */
@@ -3778,7 +3781,7 @@ target_close (struct target_ops *targ)
targ->close ();
if (targetdebug)
- fprintf_unfiltered (gdb_stdlog, "target_close ()\n");
+ gdb_printf (gdb_stdlog, "target_close ()\n");
}
int
@@ -4060,9 +4063,9 @@ target_ranged_break_num_registers (void)
/* See target.h. */
struct btrace_target_info *
-target_enable_btrace (ptid_t ptid, const struct btrace_config *conf)
+target_enable_btrace (thread_info *tp, const struct btrace_config *conf)
{
- return current_inferior ()->top_target ()->enable_btrace (ptid, conf);
+ return current_inferior ()->top_target ()->enable_btrace (tp, conf);
}
/* See target.h. */
@@ -4334,7 +4337,7 @@ flash_erase_command (const char *cmd, int from_tty)
static void
maintenance_print_target_stack (const char *cmd, int from_tty)
{
- printf_filtered (_("The current target stack is:\n"));
+ gdb_printf (_("The current target stack is:\n"));
for (target_ops *t = current_inferior ()->top_target ();
t != NULL;
@@ -4342,7 +4345,7 @@ maintenance_print_target_stack (const char *cmd, int from_tty)
{
if (t->stratum () == debug_stratum)
continue;
- printf_filtered (" - %s (%s)\n", t->shortname (), t->longname ());
+ gdb_printf (" - %s (%s)\n", t->shortname (), t->longname ());
}
}
@@ -4370,31 +4373,28 @@ target_thread_events (int enable)
just for maintainers to use when debugging gdb. */
bool target_async_permitted = true;
-/* The set command writes to this variable. If the inferior is
- executing, target_async_permitted is *not* updated. */
-static bool target_async_permitted_1 = true;
-
static void
-maint_set_target_async_command (const char *args, int from_tty,
- struct cmd_list_element *c)
+set_maint_target_async (bool permitted)
{
if (have_live_inferiors ())
- {
- target_async_permitted_1 = target_async_permitted;
- error (_("Cannot change this setting while the inferior is running."));
- }
+ error (_("Cannot change this setting while the inferior is running."));
+
+ target_async_permitted = permitted;
+}
- target_async_permitted = target_async_permitted_1;
+static bool
+get_maint_target_async ()
+{
+ return target_async_permitted;
}
static void
-maint_show_target_async_command (struct ui_file *file, int from_tty,
- struct cmd_list_element *c,
- const char *value)
+show_maint_target_async (ui_file *file, int from_tty,
+ cmd_list_element *c, const char *value)
{
- fprintf_filtered (file,
- _("Controlling the inferior in "
- "asynchronous mode is %s.\n"), value);
+ gdb_printf (file,
+ _("Controlling the inferior in "
+ "asynchronous mode is %s.\n"), value);
}
/* Return true if the target operates in non-stop mode even with "set
@@ -4442,41 +4442,38 @@ exists_non_stop_target ()
mode. This is just for maintainers to use when debugging gdb. */
enum auto_boolean target_non_stop_enabled = AUTO_BOOLEAN_AUTO;
-/* The set command writes to this variable. If the inferior is
- executing, target_non_stop_enabled is *not* updated. */
-static enum auto_boolean target_non_stop_enabled_1 = AUTO_BOOLEAN_AUTO;
-
-/* Implementation of "maint set target-non-stop". */
+/* Set callback for maint target-non-stop setting. */
static void
-maint_set_target_non_stop_command (const char *args, int from_tty,
- struct cmd_list_element *c)
+set_maint_target_non_stop (auto_boolean enabled)
{
if (have_live_inferiors ())
- {
- target_non_stop_enabled_1 = target_non_stop_enabled;
- error (_("Cannot change this setting while the inferior is running."));
- }
+ error (_("Cannot change this setting while the inferior is running."));
- target_non_stop_enabled = target_non_stop_enabled_1;
+ target_non_stop_enabled = enabled;
}
-/* Implementation of "maint show target-non-stop". */
+/* Get callback for maint target-non-stop setting. */
+
+static auto_boolean
+get_maint_target_non_stop ()
+{
+ return target_non_stop_enabled;
+}
static void
-maint_show_target_non_stop_command (struct ui_file *file, int from_tty,
- struct cmd_list_element *c,
- const char *value)
+show_maint_target_non_stop (ui_file *file, int from_tty,
+ cmd_list_element *c, const char *value)
{
if (target_non_stop_enabled == AUTO_BOOLEAN_AUTO)
- fprintf_filtered (file,
- _("Whether the target is always in non-stop mode "
- "is %s (currently %s).\n"), value,
- target_always_non_stop_p () ? "on" : "off");
+ gdb_printf (file,
+ _("Whether the target is always in non-stop mode "
+ "is %s (currently %s).\n"), value,
+ target_always_non_stop_p () ? "on" : "off");
else
- fprintf_filtered (file,
- _("Whether the target is always in non-stop mode "
- "is %s.\n"), value);
+ gdb_printf (file,
+ _("Whether the target is always in non-stop mode "
+ "is %s.\n"), value);
}
/* Temporary copies of permission settings. */
@@ -4572,22 +4569,24 @@ result in significant performance improvement for remote targets."),
&maintenanceprintlist);
add_setshow_boolean_cmd ("target-async", no_class,
- &target_async_permitted_1, _("\
+ _("\
Set whether gdb controls the inferior in asynchronous mode."), _("\
Show whether gdb controls the inferior in asynchronous mode."), _("\
Tells gdb whether to control the inferior in asynchronous mode."),
- maint_set_target_async_command,
- maint_show_target_async_command,
+ set_maint_target_async,
+ get_maint_target_async,
+ show_maint_target_async,
&maintenance_set_cmdlist,
&maintenance_show_cmdlist);
add_setshow_auto_boolean_cmd ("target-non-stop", no_class,
- &target_non_stop_enabled_1, _("\
+ _("\
Set whether gdb always controls the inferior in non-stop mode."), _("\
Show whether gdb always controls the inferior in non-stop mode."), _("\
Tells gdb whether to control the inferior in non-stop mode."),
- maint_set_target_non_stop_command,
- maint_show_target_non_stop_command,
+ set_maint_target_non_stop,
+ get_maint_target_non_stop,
+ show_maint_target_non_stop,
&maintenance_set_cmdlist,
&maintenance_show_cmdlist);
diff --git a/gdb/target.h b/gdb/target.h
index 1ac7a4554dc..f77dbf05113 100644
--- a/gdb/target.h
+++ b/gdb/target.h
@@ -79,7 +79,7 @@ struct inferior;
#include "btrace.h"
#include "record.h"
#include "command.h"
-#include "disasm.h"
+#include "disasm-flags.h"
#include "tracepoint.h"
#include "gdbsupport/break-common.h" /* For enum target_hw_bp_type. */
@@ -1151,10 +1151,10 @@ struct target_ops
virtual bool can_use_agent ()
TARGET_DEFAULT_RETURN (false);
- /* Enable branch tracing for PTID using CONF configuration.
+ /* Enable branch tracing for TP using CONF configuration.
Return a branch trace target information struct for reading and for
disabling branch trace. */
- virtual struct btrace_target_info *enable_btrace (ptid_t ptid,
+ virtual struct btrace_target_info *enable_btrace (thread_info *tp,
const struct btrace_config *conf)
TARGET_DEFAULT_NORETURN (tcomplain ());
@@ -1471,23 +1471,32 @@ extern void target_detach (inferior *inf, int from_tty);
extern void target_disconnect (const char *, int);
-/* Resume execution (or prepare for execution) of a target thread,
- process or all processes. STEP says whether to hardware
- single-step or to run free; SIGGNAL is the signal to be given to
- the target, or GDB_SIGNAL_0 for no signal. The caller may not pass
- GDB_SIGNAL_DEFAULT. A specific PTID means `step/resume only this
- process id'. A wildcard PTID (all threads, or all threads of
- process) means `step/resume INFERIOR_PTID, and let other threads
- (for which the wildcard PTID matches) resume with their
- 'thread->suspend.stop_signal' signal (usually GDB_SIGNAL_0) if it
- is in "pass" state, or with no signal if in "no pass" state.
+/* Resume execution (or prepare for execution) of the current thread
+ (INFERIOR_PTID), while optionally letting other threads of the
+ current process or all processes run free.
+
+ STEP says whether to hardware single-step the current thread or to
+ let it run free; SIGNAL is the signal to be given to the current
+ thread, or GDB_SIGNAL_0 for no signal. The caller may not pass
+ GDB_SIGNAL_DEFAULT.
+
+ SCOPE_PTID indicates the resumption scope. I.e., which threads
+ (other than the current) run free. If resuming a single thread,
+ SCOPE_PTID is the same thread as the current thread. A wildcard
+ SCOPE_PTID (all threads, or all threads of process) lets threads
+ other than the current (for which the wildcard SCOPE_PTID matches)
+ resume with their 'thread->suspend.stop_signal' signal (usually
+ GDB_SIGNAL_0) if it is in "pass" state, or with no signal if in "no
+ pass" state. Note neither STEP nor SIGNAL apply to any thread
+ other than the current.
In order to efficiently handle batches of resumption requests,
targets may implement this method such that it records the
resumption request, but defers the actual resumption to the
target_commit_resume method implementation. See
target_commit_resume below. */
-extern void target_resume (ptid_t ptid, int step, enum gdb_signal signal);
+extern void target_resume (ptid_t scope_ptid,
+ int step, enum gdb_signal signal);
/* Ensure that all resumed threads are committed to the target.
@@ -1567,14 +1576,6 @@ extern void target_dumpcore (const char *filename);
extern bool target_can_run_breakpoint_commands ();
-/* Read a string from target memory at address MEMADDR. The string
- will be at most LEN bytes long (note that excess bytes may be read
- in some cases -- but these will not be returned). Returns nullptr
- on error. */
-
-extern gdb::unique_xmalloc_ptr<char> target_read_string
- (CORE_ADDR memaddr, int len, int *bytes_read = nullptr);
-
/* For target_read_memory see target/target.h. */
extern int target_read_raw_memory (CORE_ADDR memaddr, gdb_byte *myaddr,
@@ -2502,7 +2503,7 @@ extern void update_target_permissions (void);
/* See to_enable_btrace in struct target_ops. */
extern struct btrace_target_info *
- target_enable_btrace (ptid_t ptid, const struct btrace_config *);
+ target_enable_btrace (thread_info *tp, const struct btrace_config *);
/* See to_disable_btrace in struct target_ops. */
extern void target_disable_btrace (struct btrace_target_info *btinfo);
diff --git a/gdb/target/target.c b/gdb/target/target.c
new file mode 100644
index 00000000000..0b165bc05fe
--- /dev/null
+++ b/gdb/target/target.c
@@ -0,0 +1,190 @@
+/* String reading
+
+ Copyright (C) 2022 Free Software Foundation, Inc.
+
+ This file is part of GDB.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#include "gdbsupport/common-defs.h"
+#include "target/target.h"
+
+/* Read LEN bytes of target memory at address MEMADDR, placing the
+ results in GDB's memory at MYADDR. Returns a count of the bytes
+ actually read, and optionally a target_xfer_status value in the
+ location pointed to by ERRPTR if ERRPTR is non-null. */
+
+static int
+partial_memory_read (CORE_ADDR memaddr, gdb_byte *myaddr,
+ int len, int *errptr)
+{
+ int nread; /* Number of bytes actually read. */
+ int errcode; /* Error from last read. */
+
+ /* First try a complete read. */
+ errcode = target_read_memory (memaddr, myaddr, len);
+ if (errcode == 0)
+ {
+ /* Got it all. */
+ nread = len;
+ }
+ else
+ {
+ /* Loop, reading one byte at a time until we get as much as we can. */
+ for (errcode = 0, nread = 0; len > 0 && errcode == 0; nread++, len--)
+ {
+ errcode = target_read_memory (memaddr++, myaddr++, 1);
+ }
+ /* If an error, the last read was unsuccessful, so adjust count. */
+ if (errcode != 0)
+ {
+ nread--;
+ }
+ }
+ if (errptr != NULL)
+ {
+ *errptr = errcode;
+ }
+ return (nread);
+}
+
+/* See target/target.h. */
+
+int
+target_read_string (CORE_ADDR addr, int len, int width,
+ unsigned int fetchlimit,
+ gdb::unique_xmalloc_ptr<gdb_byte> *buffer,
+ int *bytes_read)
+{
+ int errcode; /* Errno returned from bad reads. */
+ unsigned int nfetch; /* Chars to fetch / chars fetched. */
+ gdb_byte *bufptr; /* Pointer to next available byte in
+ buffer. */
+
+ /* Loop until we either have all the characters, or we encounter
+ some error, such as bumping into the end of the address space. */
+
+ buffer->reset (nullptr);
+
+ if (len > 0)
+ {
+ /* We want fetchlimit chars, so we might as well read them all in
+ one operation. */
+ unsigned int fetchlen = std::min ((unsigned) len, fetchlimit);
+
+ buffer->reset ((gdb_byte *) xmalloc (fetchlen * width));
+ bufptr = buffer->get ();
+
+ nfetch = partial_memory_read (addr, bufptr, fetchlen * width, &errcode)
+ / width;
+ addr += nfetch * width;
+ bufptr += nfetch * width;
+ }
+ else if (len == -1)
+ {
+ unsigned long bufsize = 0;
+ unsigned int chunksize; /* Size of each fetch, in chars. */
+ int found_nul; /* Non-zero if we found the nul char. */
+ gdb_byte *limit; /* First location past end of fetch buffer. */
+
+ found_nul = 0;
+ /* We are looking for a NUL terminator to end the fetching, so we
+ might as well read in blocks that are large enough to be efficient,
+ but not so large as to be slow if fetchlimit happens to be large.
+ So we choose the minimum of 8 and fetchlimit. We used to use 200
+ instead of 8 but 200 is way too big for remote debugging over a
+ serial line. */
+ chunksize = std::min (8u, fetchlimit);
+
+ do
+ {
+ nfetch = std::min ((unsigned long) chunksize, fetchlimit - bufsize);
+
+ if (*buffer == NULL)
+ buffer->reset ((gdb_byte *) xmalloc (nfetch * width));
+ else
+ buffer->reset ((gdb_byte *) xrealloc (buffer->release (),
+ (nfetch + bufsize) * width));
+
+ bufptr = buffer->get () + bufsize * width;
+ bufsize += nfetch;
+
+ /* Read as much as we can. */
+ nfetch = partial_memory_read (addr, bufptr, nfetch * width, &errcode)
+ / width;
+
+ /* Scan this chunk for the null character that terminates the string
+ to print. If found, we don't need to fetch any more. Note
+ that bufptr is explicitly left pointing at the next character
+ after the null character, or at the next character after the end
+ of the buffer. */
+
+ limit = bufptr + nfetch * width;
+ while (bufptr < limit)
+ {
+ bool found_nonzero = false;
+
+ for (int i = 0; !found_nonzero && i < width; ++i)
+ if (bufptr[i] != 0)
+ found_nonzero = true;
+
+ addr += width;
+ bufptr += width;
+ if (!found_nonzero)
+ {
+ /* We don't care about any error which happened after
+ the NUL terminator. */
+ errcode = 0;
+ found_nul = 1;
+ break;
+ }
+ }
+ }
+ while (errcode == 0 /* no error */
+ && bufptr - buffer->get () < fetchlimit * width /* no overrun */
+ && !found_nul); /* haven't found NUL yet */
+ }
+ else
+ { /* Length of string is really 0! */
+ /* We always allocate *buffer. */
+ buffer->reset ((gdb_byte *) xmalloc (1));
+ bufptr = buffer->get ();
+ errcode = 0;
+ }
+
+ /* bufptr and addr now point immediately beyond the last byte which we
+ consider part of the string (including a '\0' which ends the string). */
+ *bytes_read = bufptr - buffer->get ();
+
+ return errcode;
+}
+
+/* See target/target.h. */
+
+gdb::unique_xmalloc_ptr<char>
+target_read_string (CORE_ADDR memaddr, int len, int *bytes_read)
+{
+ gdb::unique_xmalloc_ptr<gdb_byte> buffer;
+
+ int ignore;
+ if (bytes_read == nullptr)
+ bytes_read = &ignore;
+
+ /* Note that the endian-ness does not matter here. */
+ int errcode = target_read_string (memaddr, -1, 1, len, &buffer, bytes_read);
+ if (errcode != 0)
+ return {};
+
+ return gdb::unique_xmalloc_ptr<char> ((char *) buffer.release ());
+}
diff --git a/gdb/target/target.h b/gdb/target/target.h
index 818c8c6232f..a5b0dd3ed1a 100644
--- a/gdb/target/target.h
+++ b/gdb/target/target.h
@@ -48,6 +48,37 @@ extern int target_read_memory (CORE_ADDR memaddr, gdb_byte *myaddr,
extern int target_read_uint32 (CORE_ADDR memaddr, uint32_t *result);
+/* Read a string from target memory at address MEMADDR. The string
+ will be at most LEN bytes long (note that excess bytes may be read
+ in some cases -- but these will not be returned). Returns nullptr
+ on error. */
+
+extern gdb::unique_xmalloc_ptr<char> target_read_string
+ (CORE_ADDR memaddr, int len, int *bytes_read = nullptr);
+
+/* Read a string from the inferior, at ADDR, with LEN characters of
+ WIDTH bytes each. Fetch at most FETCHLIMIT characters. BUFFER
+ will be set to a newly allocated buffer containing the string, and
+ BYTES_READ will be set to the number of bytes read. Returns 0 on
+ success, or a target_xfer_status on failure.
+
+ If LEN > 0, reads the lesser of LEN or FETCHLIMIT characters
+ (including eventual NULs in the middle or end of the string).
+
+ If LEN is -1, stops at the first null character (not necessarily
+ the first null byte) up to a maximum of FETCHLIMIT characters. Set
+ FETCHLIMIT to UINT_MAX to read as many characters as possible from
+ the string.
+
+ Unless an exception is thrown, BUFFER will always be allocated, even on
+ failure. In this case, some characters might have been read before the
+ failure happened. Check BYTES_READ to recognize this situation. */
+
+extern int target_read_string (CORE_ADDR addr, int len, int width,
+ unsigned int fetchlimit,
+ gdb::unique_xmalloc_ptr<gdb_byte> *buffer,
+ int *bytes_read);
+
/* Write LEN bytes from MYADDR to target memory at address MEMADDR.
Return zero for success, nonzero if any error occurs. This
function must be provided by the client. Implementations of this
diff --git a/gdb/target/waitstatus.h b/gdb/target/waitstatus.h
index 7b5faed83c7..63bbd737749 100644
--- a/gdb/target/waitstatus.h
+++ b/gdb/target/waitstatus.h
@@ -418,7 +418,7 @@ private:
char *execd_pathname;
/* Syscall number */
int syscall_number;
- } m_value;
+ } m_value {};
};
/* Extended reasons that can explain why a target/thread stopped for a
diff --git a/gdb/testsuite/Makefile.in b/gdb/testsuite/Makefile.in
index 0bfcbdc3205..790b9e022cc 100644
--- a/gdb/testsuite/Makefile.in
+++ b/gdb/testsuite/Makefile.in
@@ -353,7 +353,7 @@ clean mostlyclean:
distclean maintainer-clean realclean: clean
-rm -f *~ core
- -rm -f Makefile config.status *-init.exp
+ -rm -f Makefile config.status *-init.exp lib/pdtrace
-rm -fr *.log summary detail *.plog *.sum *.psum site.*
Makefile : Makefile.in config.status $(host_makefile_frag)
diff --git a/gdb/testsuite/README b/gdb/testsuite/README
index 7552774c78b..3a34dcdd154 100644
--- a/gdb/testsuite/README
+++ b/gdb/testsuite/README
@@ -164,15 +164,23 @@ instance
checks both the installed GDB and GDBserver.
-INTERNAL_GDBFLAGS
+GDB_DATA_DIRECTORY
-Command line options passed to all GDB invocations.
+If you set GDB, then by default the testsuite assumes you are
+exercising an installed GDB, and thus the testsuite lets GDB use its
+configured data directory. Otherwise, if you don't set GDB, then by
+default the tested GDB uses the data directory found under the GDB
+build directory. You can override this by setting GDB_DATA_DIRECTORY.
+For instance:
+
+ make check \
+ RUNTESTFLAGS="GDB=/path/to/other/build/gdb \
+ GDB_DATA_DIRECTORY=/path/to/other/build/gdb/data-directory"
-The default is "-nw -nx".
+INTERNAL_GDBFLAGS
-`-nw' disables any of the windowed interfaces.
-`-nx' disables ~/.gdbinit, so that it doesn't interfere with
-the tests.
+Command line options passed to all GDB invocations.
+The default is set in lib/gdb.exp.
This is actually considered an internal variable, and you
won't normally want to change it. However, in some situations,
@@ -193,7 +201,10 @@ a .gdbinit. For example:
HOME=`pwd` runtest \
GDB=/usr/bin/gdb \
GDBSERVER=/usr/bin/gdbserver \
- INTERNAL_GDBFLAGS=-nw
+ INTERNAL_GDBFLAGS="-nw -iex 'set height 0' -iex 'set width 0'"
+
+Note that we do not need to specify '-data-directory' here
+as we are testing an installed GDB.
GDB_PARALLEL
diff --git a/gdb/testsuite/boards/native-extended-gdbserver.exp b/gdb/testsuite/boards/native-extended-gdbserver.exp
index b925c364993..67acc6fea7c 100644
--- a/gdb/testsuite/boards/native-extended-gdbserver.exp
+++ b/gdb/testsuite/boards/native-extended-gdbserver.exp
@@ -58,7 +58,7 @@ proc mi_gdb_start { args } {
global gdbserver_reconnect_p
# Spawn GDB.
- set res [extended_gdbserver_mi_gdb_start $args]
+ set res [eval extended_gdbserver_mi_gdb_start $args]
if { $res } {
return $res
}
diff --git a/gdb/testsuite/gdb.ada/arrayptr.exp b/gdb/testsuite/gdb.ada/arrayptr.exp
index 0e188bf9943..c3fb5f3d647 100644
--- a/gdb/testsuite/gdb.ada/arrayptr.exp
+++ b/gdb/testsuite/gdb.ada/arrayptr.exp
@@ -49,38 +49,56 @@ foreach_with_prefix scenario {all minimal} {
gdb_test "ptype string_access" "= access array \\(<>\\) of character"
- set kfail_int128support_re \
- "That operation is not available on integers of more than 8 bytes\\."
- set kfail_packed_array_range_re \
- "cannot subscript or call something of type `foo__packed_array_ptr'"
+ # GNAT >= 12.0 has the needed fix here.
+ set xfail_expected 0
+ if {$scenario == "minimal" && ![test_compiler_info {gcc-1[2-9]-*}]} {
+ set xfail_expected 1
+ }
gdb_test_multiple "print pa_ptr.all" "" {
-re -wrap " = \\(10, 20, 30, 40, 50, 60, 62, 63, -23, 42\\)" {
pass $gdb_test_name
}
- -re -wrap $kfail_int128support_re {
- kfail gdb/20991 $gdb_test_name
+ -re -wrap " = \[0-9\]+" {
+ if { $xfail_expected } {
+ xfail $gdb_test_name
+ } else {
+ fail $gdb_test_name
+ }
}
}
+ set xfail_cannot_subscript_re \
+ "cannot subscript or call something of type `foo__packed_array_ptr'"
+
gdb_test_multiple "print pa_ptr(3)" "" {
-re -wrap " = 30" {
pass $gdb_test_name
+
}
- -re -wrap $kfail_int128support_re {
- kfail gdb/20991 $gdb_test_name
- }
- -re -wrap $kfail_packed_array_range_re {
- kfail gdb/28115 $gdb_test_name
+ -re -wrap $xfail_cannot_subscript_re {
+ if { $xfail_expected } {
+ xfail $gdb_test_name
+ } else {
+ fail $gdb_test_name
+ }
}
}
+ set xfail_attempt_to_index_re \
+ "Attempt to index or call something other than an array or function"
+
gdb_test_multiple "print pa_ptr.all(3)" "" {
-re -wrap " = 30" {
pass $gdb_test_name
+
}
- -re -wrap $kfail_int128support_re {
- kfail gdb/20991 $gdb_test_name
+ -re -wrap $xfail_attempt_to_index_re {
+ if { $xfail_expected } {
+ xfail $gdb_test_name
+ } else {
+ fail $gdb_test_name
+ }
}
}
}
diff --git a/gdb/testsuite/gdb.ada/char_enum_unicode.exp b/gdb/testsuite/gdb.ada/char_enum_unicode.exp
new file mode 100644
index 00000000000..fad239983a3
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/char_enum_unicode.exp
@@ -0,0 +1,52 @@
+# Copyright 2011-2022 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+load_lib "ada.exp"
+
+if { [skip_ada_tests] } { return -1 }
+
+standard_ada_testfile foo
+
+set flags [list debug additional_flags=-gnatW8]
+if {[gdb_compile_ada "${srcfile}" "${binfile}" executable $flags] != "" } {
+ return -1
+}
+
+clean_restart ${testfile}
+
+set bp_location [gdb_get_line_number "STOP" ${testdir}/foo.adb]
+runto "foo.adb:$bp_location"
+
+set y "'\\\[\"0178\"\\\]'"
+set king "'\\\[\"01fa00\"\\\]'"
+set thorn "'\\\[\"de\"\\\]'"
+
+gdb_test "ptype Char_Enum_Type" "type = \\(alpha, 'x', $y, $king, $thorn\\)"
+gdb_test "print Char_Alpha" " = alpha"
+gdb_test "print Char_X" " = 1 'x'"
+gdb_test "print Char_Y" " = 2 $y"
+gdb_test "print Char_King" " = 3 $king"
+gdb_test "print Char_Thorn" " = 4 $thorn"
+gdb_test "print Char_Enum_Type'('x')" " = 1 'x'"
+gdb_test "print Char_Enum_Type'('\[\"0178\"\]')" " = 2 $y"
+gdb_test "print Char_Enum_Type'('\[\"1fa00\"\]')" " = 3 $king"
+gdb_test "print Char_Enum_Type'('\[\"de\"\]')" " = 4 $thorn"
+
+gdb_test "print '\[\"0178\"\]'" " = 376 $y"
+gdb_test "print '\[\"01fa00\"\]'" " = 129536 $king"
+gdb_test "print '\[\"de\"\]'" " = 222 $thorn"
+
+gdb_test "print \"\[\"0178\"\]\"" "wide strings are not yet supported"
+gdb_test "print \"\[\"de\"\]\"" " = \"\\\[\"de\"\\\]\""
diff --git a/gdb/testsuite/gdb.ada/char_enum_unicode/foo.adb b/gdb/testsuite/gdb.ada/char_enum_unicode/foo.adb
new file mode 100644
index 00000000000..09756870320
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/char_enum_unicode/foo.adb
@@ -0,0 +1,30 @@
+-- Copyright 2011-2022 Free Software Foundation, Inc.
+--
+-- This program is free software; you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation; either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+with Pck; use Pck;
+
+procedure Foo is
+ type Char_Enum_Type is (alpha, 'x', 'Ÿ', '🨀', 'Þ');
+ Char_Alpha : Char_Enum_Type := alpha;
+ Char_X : Char_Enum_Type := 'x';
+ Char_Thorn : Char_Enum_Type := 'Þ';
+ Char_Y : Char_Enum_Type := 'Ÿ';
+ Char_King : Char_Enum_Type := '🨀';
+begin
+ Do_Nothing (Char_Alpha'Address); -- STOP
+ Do_Nothing (Char_X'Address);
+ Do_Nothing (Char_Y'Address);
+ Do_Nothing (Char_King'Address);
+end Foo;
diff --git a/gdb/testsuite/gdb.ada/char_enum_unicode/pck.adb b/gdb/testsuite/gdb.ada/char_enum_unicode/pck.adb
new file mode 100644
index 00000000000..d9308b6c04d
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/char_enum_unicode/pck.adb
@@ -0,0 +1,21 @@
+-- Copyright 2011-2022 Free Software Foundation, Inc.
+--
+-- This program is free software; you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation; either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+package body Pck is
+ procedure Do_Nothing (A : System.Address) is
+ begin
+ null;
+ end Do_Nothing;
+end Pck;
diff --git a/gdb/testsuite/gdb.ada/char_enum_unicode/pck.ads b/gdb/testsuite/gdb.ada/char_enum_unicode/pck.ads
new file mode 100644
index 00000000000..4e937b8a5a2
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/char_enum_unicode/pck.ads
@@ -0,0 +1,20 @@
+-- Copyright 2011-2022 Free Software Foundation, Inc.
+--
+-- This program is free software; you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation; either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+with System;
+
+package Pck is
+ procedure Do_Nothing (A : System.Address);
+end Pck;
diff --git a/gdb/testsuite/gdb.ada/dynamic-iface.exp b/gdb/testsuite/gdb.ada/dynamic-iface.exp
new file mode 100644
index 00000000000..2942a437687
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/dynamic-iface.exp
@@ -0,0 +1,44 @@
+# Copyright 2022 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+load_lib "ada.exp"
+
+if { [skip_ada_tests] } { return -1 }
+
+if {![gnat_runtime_has_debug_info]} {
+ untested "GNAT runtime debuginfo required for this test"
+ return -1
+}
+
+standard_ada_testfile main
+
+if {[gdb_compile_ada "${srcfile}" "${binfile}" executable {debug additional_flags=-gnat05}] != "" } {
+ return -1
+}
+
+clean_restart ${testfile}
+
+set bp_location [gdb_get_line_number "STOP" ${testdir}/concrete.adb]
+runto "concrete.adb:$bp_location"
+
+gdb_test "print obj" \
+ [string_to_regexp "(n => 3, a => \"ABC\", value => 93)"] \
+ "print local as interface"
+
+gdb_continue_to_breakpoint STOP
+
+gdb_test "print obj" \
+ [string_to_regexp "(n => 5, a => \"DEFGH\", value => 107)"] \
+ "print local2 as interface"
diff --git a/gdb/testsuite/gdb.ada/dynamic-iface/concrete.adb b/gdb/testsuite/gdb.ada/dynamic-iface/concrete.adb
new file mode 100644
index 00000000000..66cbbbcf41d
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/dynamic-iface/concrete.adb
@@ -0,0 +1,23 @@
+-- Copyright 2022 Free Software Foundation, Inc.
+--
+-- This program is free software; you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation; either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+package body Concrete is
+
+ procedure Accept_Iface (Obj: Iface'Class) is
+ begin
+ null; -- STOP
+ end Accept_Iface;
+
+end Concrete;
diff --git a/gdb/testsuite/gdb.ada/dynamic-iface/concrete.ads b/gdb/testsuite/gdb.ada/dynamic-iface/concrete.ads
new file mode 100644
index 00000000000..3d44e42d4f3
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/dynamic-iface/concrete.ads
@@ -0,0 +1,36 @@
+-- Copyright 2022 Free Software Foundation, Inc.
+--
+-- This program is free software; you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation; either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+package Concrete is
+ type Iface is interface;
+
+ type Base (N : Integer) is tagged record
+ A : String (1 .. N);
+ end record;
+
+ -- An empty extension of Base. The compiler sources claimed there
+ -- was a special case for this, and while that doesn't seem to be
+ -- true in practice, it's worth checking.
+ type Intermediate is new Base with record
+ null;
+ end record;
+
+ type Object is new Intermediate and Iface with record
+ Value: Integer;
+ end record;
+
+ procedure Accept_Iface (Obj: Iface'Class);
+
+end Concrete;
diff --git a/gdb/testsuite/gdb.ada/dynamic-iface/main.adb b/gdb/testsuite/gdb.ada/dynamic-iface/main.adb
new file mode 100644
index 00000000000..01e19f297b5
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/dynamic-iface/main.adb
@@ -0,0 +1,24 @@
+-- Copyright 2022 Free Software Foundation, Inc.
+--
+-- This program is free software; you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation; either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+with Concrete; use Concrete;
+
+procedure Main is
+ Local : Object := (N => 3, A => "ABC", Value => 93);
+ Local2 : Object := (N => 5, A => "DEFGH", Value => 107);
+begin
+ Accept_Iface (Local);
+ Accept_Iface (Local2);
+end Main;
diff --git a/gdb/testsuite/gdb.ada/float-bits.exp b/gdb/testsuite/gdb.ada/float-bits.exp
new file mode 100644
index 00000000000..4ca8dbf88e5
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/float-bits.exp
@@ -0,0 +1,70 @@
+# Copyright 2022 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Test floating-point literal extension.
+
+load_lib "ada.exp"
+
+if { [skip_ada_tests] } { return -1 }
+
+standard_ada_testfile prog
+
+if {[gdb_compile_ada "${srcfile}" "${binfile}" executable {debug}] != ""} {
+ return -1
+}
+
+clean_restart ${testfile}
+
+set bp_location [gdb_get_line_number "BREAK" ${testdir}/prog.adb]
+runto "prog.adb:$bp_location"
+
+gdb_test "print 16f#41b80000#" " = 23.0"
+gdb_test "print val_float" " = 23.0"
+gdb_test "print val_float := 16f#41b80000#" " = 23.0"
+gdb_test "print val_float" " = 23.0" \
+ "print val_float after assignment"
+
+gdb_test "print 16lf#bc0d83c94fb6d2ac#" " = -2.0e-19"
+gdb_test "print val_double" " = -2.0e-19"
+gdb_test "print val_double := 16lf#bc0d83c94fb6d2ac#" " = -2.0e-19"
+gdb_test "print val_double" " = -2.0e-19" \
+ "print val_double after assignment"
+
+set 16llf_supported 0
+gdb_test_multiple "ptype long_long_float" "" {
+ -re -wrap "<16-byte float>" {
+ set 16llf_supported 1
+ pass $gdb_test_name
+ }
+ -re -wrap "<\\d+-byte float>" {
+ pass $gdb_test_name
+ }
+}
+
+if { $16llf_supported } {
+ gdb_test "print 16llf#7FFFF7FF4054A56FA5B99019A5C8#" " = 5.0e\\+25"
+}
+gdb_test "print val_long_double" " = 5.0e\\+25"
+if { $16llf_supported } {
+ gdb_test "print val_long_double := 16llf#7FFFF7FF4054A56FA5B99019A5C8#" \
+ " = 5.0e\\+25"
+}
+gdb_test "print val_long_double" " = 5.0e\\+25" \
+ "print val_long_double after assignment"
+
+if { $16llf_supported } {
+ gdb_test "print 16llf#a56fa5b99019a5c800007ffff7ff4054#" \
+ " = <invalid float value>"
+}
diff --git a/gdb/testsuite/gdb.ada/float-bits/prog.adb b/gdb/testsuite/gdb.ada/float-bits/prog.adb
new file mode 100644
index 00000000000..0d8c18f8d47
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/float-bits/prog.adb
@@ -0,0 +1,22 @@
+-- Copyright 2022 Free Software Foundation, Inc.
+--
+-- This program is free software; you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation; either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+procedure Prog is
+ Val_Float : Float := 23.0;
+ Val_Double : Long_Float := -2.0e-19;
+ Val_Long_Double : Long_Long_Float := 5.0e+25;
+begin
+ null; -- BREAK
+end Prog;
diff --git a/gdb/testsuite/gdb.ada/formatted_ref.exp b/gdb/testsuite/gdb.ada/formatted_ref.exp
index bb5f78c0d72..19a32658d98 100644
--- a/gdb/testsuite/gdb.ada/formatted_ref.exp
+++ b/gdb/testsuite/gdb.ada/formatted_ref.exp
@@ -70,16 +70,23 @@ proc test_p_x_addr { var addr } {
global gdb_prompt
foreach attr {access unchecked_access unrestricted_access} {
- set test "print/x $var'$attr"
- gdb_test_multiple $test $test {
- -re "\\$\[0-9\]+ = $addr.*$gdb_prompt $" {
- pass $test
- }
- -re "\\$\[0-9\]+ = 0x\[a-f0-9+\]+.*$gdb_prompt $" {
- fail "$test (prints unexpected address)"
+ foreach space {"" " "} {
+ set test "print/x $var'$space$attr"
+ gdb_test_multiple $test $test {
+ -re "\\$\[0-9\]+ = $addr.*$gdb_prompt $" {
+ pass $test
+ }
+ -re "\\$\[0-9\]+ = 0x\[a-f0-9+\]+.*$gdb_prompt $" {
+ fail "$test (prints unexpected address)"
+ }
}
}
}
+
+ gdb_test "complete print/x $var'unres" "print/x $var'unrestricted_access"
+ gdb_test_no_output "complete print/x $var'abcd"
+ gdb_test "complete print $var'f" "print $var'first"
+
return 0
}
diff --git a/gdb/testsuite/gdb.ada/ghost.exp b/gdb/testsuite/gdb.ada/ghost.exp
new file mode 100644
index 00000000000..7f92b130eff
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/ghost.exp
@@ -0,0 +1,37 @@
+# Copyright 2022 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+load_lib "ada.exp"
+
+if { [skip_ada_tests] } { return -1 }
+
+standard_ada_testfile main
+
+set flags [list debug additional_flags=-gnata]
+if {[gdb_compile_ada "${srcfile}" "${binfile}" executable $flags] != "" } {
+ return -1
+}
+
+clean_restart ${testfile}
+
+set bp_location [gdb_get_line_number "START" ${testdir}/main.adb]
+if ![runto "main.adb:$bp_location" ] then {
+ perror "Couldn't run ${testfile}"
+ return
+}
+
+gdb_test "print value" " = 64 '@'"
+gdb_test "print ghost_value" " = 64 '@'"
+gdb_test "print value2" " = 33 '!'"
diff --git a/gdb/testsuite/gdb.ada/ghost/gpck.ads b/gdb/testsuite/gdb.ada/ghost/gpck.ads
new file mode 100644
index 00000000000..5a38ed4f94e
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/ghost/gpck.ads
@@ -0,0 +1,18 @@
+-- Copyright 2022 Free Software Foundation, Inc.
+--
+-- This program is free software; you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation; either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+package GPck with Ghost is
+ Value2 : Character := '!';
+end GPck;
diff --git a/gdb/testsuite/gdb.ada/ghost/main.adb b/gdb/testsuite/gdb.ada/ghost/main.adb
new file mode 100644
index 00000000000..7da25422071
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/ghost/main.adb
@@ -0,0 +1,22 @@
+-- Copyright 2022 Free Software Foundation, Inc.
+--
+-- This program is free software; you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation; either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+with Pck; use Pck;
+with GPck; use GPck;
+
+procedure Main with Ghost is
+begin
+ null; -- START
+end Main;
diff --git a/gdb/testsuite/gdb.ada/ghost/pck.ads b/gdb/testsuite/gdb.ada/ghost/pck.ads
new file mode 100644
index 00000000000..f56aa509822
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/ghost/pck.ads
@@ -0,0 +1,19 @@
+-- Copyright 2022 Free Software Foundation, Inc.
+--
+-- This program is free software; you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation; either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+package Pck is
+ Value : Character := '@';
+ Ghost_Value : Character := '@' with Ghost;
+end Pck;
diff --git a/gdb/testsuite/gdb.ada/inline-section-gc.exp b/gdb/testsuite/gdb.ada/inline-section-gc.exp
new file mode 100644
index 00000000000..1f6ef667a87
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/inline-section-gc.exp
@@ -0,0 +1,41 @@
+# Copyright 2022 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+load_lib "ada.exp"
+
+if { [skip_ada_tests] } { return -1 }
+
+standard_ada_testfile caller
+
+set options {
+ debug
+ optimize=-O2
+ additional_flags=-ffunction-sections
+ additional_flags=-largs
+ additional_flags=-Wl,--gc-sections
+ additional_flags=-margs
+ additional_flags=-gnatn
+}
+if {[gdb_compile_ada "${srcfile}" "${binfile}" executable $options] != ""} {
+ return -1
+}
+
+clean_restart ${testfile}
+
+set bp_location [gdb_get_line_number "BREAK" ${testdir}/callee.adb]
+# The bug here was that gdb would set a breakpoint with two locations,
+# one of them at 0x0.
+gdb_test "break callee.adb:$bp_location" \
+ "Breakpoint $decimal at $hex: file .*callee.adb, line $bp_location."
diff --git a/gdb/testsuite/gdb.ada/inline-section-gc/callee.adb b/gdb/testsuite/gdb.ada/inline-section-gc/callee.adb
new file mode 100644
index 00000000000..9ece3cdc20a
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/inline-section-gc/callee.adb
@@ -0,0 +1,23 @@
+-- Copyright 2022 Free Software Foundation, Inc.
+--
+-- This program is free software; you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation; either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+with System;
+
+procedure Callee is
+ Data : Integer;
+ for Data'Address use System'To_Address (16#4000_0000#);
+begin
+ Data := 0; -- BREAK
+end Callee;
diff --git a/gdb/testsuite/gdb.ada/inline-section-gc/callee.ads b/gdb/testsuite/gdb.ada/inline-section-gc/callee.ads
new file mode 100644
index 00000000000..e13168d5fb5
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/inline-section-gc/callee.ads
@@ -0,0 +1,17 @@
+-- Copyright 2022 Free Software Foundation, Inc.
+--
+-- This program is free software; you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation; either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+procedure Callee;
+pragma Inline (Callee);
diff --git a/gdb/testsuite/gdb.ada/inline-section-gc/caller.adb b/gdb/testsuite/gdb.ada/inline-section-gc/caller.adb
new file mode 100644
index 00000000000..170227258c4
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/inline-section-gc/caller.adb
@@ -0,0 +1,21 @@
+-- Copyright 2022 Free Software Foundation, Inc.
+--
+-- This program is free software; you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation; either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+with Callee;
+
+procedure Caller is
+begin
+ Callee;
+end Caller;
diff --git a/gdb/testsuite/gdb.ada/interface.exp b/gdb/testsuite/gdb.ada/interface.exp
index 834da12b153..06b9660113b 100644
--- a/gdb/testsuite/gdb.ada/interface.exp
+++ b/gdb/testsuite/gdb.ada/interface.exp
@@ -17,6 +17,11 @@ load_lib "ada.exp"
if { [skip_ada_tests] } { return -1 }
+if {![gnat_runtime_has_debug_info]} {
+ untested "GNAT runtime debuginfo required for this test"
+ return -1
+}
+
standard_ada_testfile foo
if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug additional_flags=-gnat05 ]] != "" } {
diff --git a/gdb/testsuite/gdb.ada/iwide.exp b/gdb/testsuite/gdb.ada/iwide.exp
index 6f522ffb4f3..5d24ae5fd58 100644
--- a/gdb/testsuite/gdb.ada/iwide.exp
+++ b/gdb/testsuite/gdb.ada/iwide.exp
@@ -17,6 +17,11 @@ load_lib "ada.exp"
if { [skip_ada_tests] } { return -1 }
+if {![gnat_runtime_has_debug_info]} {
+ untested "GNAT runtime debuginfo required for this test"
+ return -1
+}
+
standard_ada_testfile p
if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug additional_flags=-gnat05 ]] != "" } {
diff --git a/gdb/testsuite/gdb.ada/literals.exp b/gdb/testsuite/gdb.ada/literals.exp
new file mode 100644
index 00000000000..a6ac89b540f
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/literals.exp
@@ -0,0 +1,39 @@
+# Copyright 2022 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Test some literal syntax.
+
+load_lib "ada.exp"
+
+if { [skip_ada_tests] } { return -1 }
+
+clean_restart
+
+gdb_test_no_output "set lang ada"
+gdb_test "print 7#10#" " = 7"
+gdb_test "print 77#10#" "Invalid base: 77."
+gdb_test "print 7#8#" "Invalid digit `8' in based literal"
+
+gdb_test "print 8e2" " = 800"
+gdb_test "print 9999999999999999999999999999999999999999999999" \
+ "Integer literal out of range"
+gdb_test "print 2e1000" "Integer literal out of range"
+
+gdb_test "print 16#ffff#" " = 65535"
+gdb_test "print 16#f#e1" " = 240"
+gdb_test "print 16#1#e10" " = 1099511627776"
+
+gdb_test "print/x 16#7fffffffffffffff#" " = 0x7fffffffffffffff"
+gdb_test "print 16#ffffffffffffffff#" " = -1"
diff --git a/gdb/testsuite/gdb.ada/mi_interface.exp b/gdb/testsuite/gdb.ada/mi_interface.exp
index 89e2fde7b7b..fa176e21ef1 100644
--- a/gdb/testsuite/gdb.ada/mi_interface.exp
+++ b/gdb/testsuite/gdb.ada/mi_interface.exp
@@ -17,6 +17,11 @@ load_lib "ada.exp"
if { [skip_ada_tests] } { return -1 }
+if {![gnat_runtime_has_debug_info]} {
+ untested "GNAT runtime debuginfo required for this test"
+ return -1
+}
+
standard_ada_testfile foo
if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug additional_flags=-gnat12 ]] != "" } {
diff --git a/gdb/testsuite/gdb.ada/mi_prot.exp b/gdb/testsuite/gdb.ada/mi_prot.exp
index b68dcb532b4..5ec7f8ddc6d 100644
--- a/gdb/testsuite/gdb.ada/mi_prot.exp
+++ b/gdb/testsuite/gdb.ada/mi_prot.exp
@@ -41,7 +41,7 @@ mi_gdb_reinitialize_dir $srcdir/$subdir
mi_gdb_load ${binfile}
set line [gdb_get_line_number "STOP" ${testdir}/prot.adb]
-mi_continue_to_line $line "continue to protected method"
+mi_continue_to_line "$srcfile:$line" "continue to protected method"
# The bug was that this crashed.
mi_gdb_test "-stack-list-arguments --no-frame-filters 1" \
diff --git a/gdb/testsuite/gdb.ada/non-ascii-latin-1.exp b/gdb/testsuite/gdb.ada/non-ascii-latin-1.exp
new file mode 100644
index 00000000000..5ff55d66a68
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/non-ascii-latin-1.exp
@@ -0,0 +1,50 @@
+# Copyright 2022 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Test UTF-8 identifiers.
+
+load_lib "ada.exp"
+
+if { [skip_ada_tests] } { return -1 }
+
+# Enable basic use of UTF-8. LC_ALL gets reset for each testfile. We
+# want this despite the program itself using Latin-1, as this test is
+# written using UTF-8.
+setenv LC_ALL C.UTF-8
+
+standard_ada_testfile prog
+
+set flags [list debug additional_flags=-gnati1]
+if {[gdb_compile_ada "${srcfile}" "${binfile}" executable $flags] != ""} {
+ return -1
+}
+
+# Restart without an executable so that we can set the encoding early.
+clean_restart
+
+# The default is Latin-1, but set this explicitly just in case we get
+# to change the default someday.
+gdb_test_no_output "set ada source-charset ISO-8859-1"
+
+gdb_load ${binfile}
+
+set bp_location [gdb_get_line_number "BREAK" ${testdir}/prog.adb]
+runto "prog.adb:$bp_location"
+
+gdb_test "print VAR_Þ" " = 23"
+gdb_test "print var_þ" " = 23"
+
+gdb_breakpoint "FUNC_Þ" message
+gdb_breakpoint "func_þ" message
diff --git a/gdb/testsuite/gdb.ada/non-ascii-latin-1/pack.adb b/gdb/testsuite/gdb.ada/non-ascii-latin-1/pack.adb
new file mode 100644
index 00000000000..b82a0e25184
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/non-ascii-latin-1/pack.adb
@@ -0,0 +1,28 @@
+-- Copyright 2022 Free Software Foundation, Inc. -*- coding: iso-latin-1 -*-
+--
+-- This program is free software; you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation; either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+package body Pack is
+
+ function FUNC_Þ (x : Integer) return Integer is
+ begin
+ return x;
+ end FUNC_Þ;
+
+ procedure Do_Nothing (A : System.Address) is
+ begin
+ null;
+ end Do_Nothing;
+
+end Pack;
diff --git a/gdb/testsuite/gdb.ada/non-ascii-latin-1/pack.ads b/gdb/testsuite/gdb.ada/non-ascii-latin-1/pack.ads
new file mode 100644
index 00000000000..93180b4a4e9
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/non-ascii-latin-1/pack.ads
@@ -0,0 +1,21 @@
+-- Copyright 2022 Free Software Foundation, Inc. -*- coding: iso-latin-1 -*-
+--
+-- This program is free software; you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation; either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+with System;
+package Pack is
+ function FUNC_Þ (x : Integer) return Integer;
+
+ procedure Do_Nothing (A : System.Address);
+end Pack;
diff --git a/gdb/testsuite/gdb.ada/non-ascii-latin-1/prog.adb b/gdb/testsuite/gdb.ada/non-ascii-latin-1/prog.adb
new file mode 100644
index 00000000000..f0bd5abaa8b
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/non-ascii-latin-1/prog.adb
@@ -0,0 +1,23 @@
+-- Copyright 2022 Free Software Foundation, Inc. -*- coding: iso-latin-1 -*-
+--
+-- This program is free software; you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation; either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+with Pack; use Pack;
+
+procedure Prog is
+ -- This should be var_Ufe.
+ VAR_Þ : Integer := FUNC_Þ (23);
+begin
+ Do_Nothing (var_þ'Address); -- BREAK
+end Prog;
diff --git a/gdb/testsuite/gdb.ada/non-ascii-latin-3.exp b/gdb/testsuite/gdb.ada/non-ascii-latin-3.exp
new file mode 100644
index 00000000000..bafcdeb13e7
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/non-ascii-latin-3.exp
@@ -0,0 +1,50 @@
+# Copyright 2022 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Test UTF-8 identifiers.
+
+load_lib "ada.exp"
+
+if { [skip_ada_tests] } { return -1 }
+
+# Enable basic use of UTF-8. LC_ALL gets reset for each testfile. We
+# want this despite the program itself using Latin-1, as this test is
+# written using UTF-8.
+setenv LC_ALL C.UTF-8
+
+standard_ada_testfile prog
+
+set flags [list debug additional_flags=-gnati3]
+if {[gdb_compile_ada "${srcfile}" "${binfile}" executable $flags] != ""} {
+ return -1
+}
+
+# Restart without an executable so that we can set the encoding early.
+clean_restart
+
+gdb_test_no_output "set ada source-charset ISO-8859-3"
+
+gdb_load ${binfile}
+
+set bp_location [gdb_get_line_number "BREAK" ${testdir}/prog.adb]
+runto "prog.adb:$bp_location"
+
+gdb_test "print VAR_Å»" " = 23"
+gdb_test "print var_ż" " = 23"
+
+gdb_breakpoint "FUNC_Å»" message
+gdb_breakpoint "func_ż" message
+
+gdb_test "print var_ð•¯" "warning: charset conversion failure.*"
diff --git a/gdb/testsuite/gdb.ada/non-ascii-latin-3/pack.adb b/gdb/testsuite/gdb.ada/non-ascii-latin-3/pack.adb
new file mode 100644
index 00000000000..b639b1c19a7
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/non-ascii-latin-3/pack.adb
@@ -0,0 +1,28 @@
+-- Copyright 2022 Free Software Foundation, Inc. -*- coding: iso-latin-3 -*-
+--
+-- This program is free software; you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation; either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+package body Pack is
+
+ function FUNC_¯ (x : Integer) return Integer is
+ begin
+ return x;
+ end FUNC_¯;
+
+ procedure Do_Nothing (A : System.Address) is
+ begin
+ null;
+ end Do_Nothing;
+
+end Pack;
diff --git a/gdb/testsuite/gdb.ada/non-ascii-latin-3/pack.ads b/gdb/testsuite/gdb.ada/non-ascii-latin-3/pack.ads
new file mode 100644
index 00000000000..d030d73003f
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/non-ascii-latin-3/pack.ads
@@ -0,0 +1,21 @@
+-- Copyright 2022 Free Software Foundation, Inc. -*- coding: iso-latin-3 -*-
+--
+-- This program is free software; you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation; either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+with System;
+package Pack is
+ function FUNC_¯ (x : Integer) return Integer;
+
+ procedure Do_Nothing (A : System.Address);
+end Pack;
diff --git a/gdb/testsuite/gdb.ada/non-ascii-latin-3/prog.adb b/gdb/testsuite/gdb.ada/non-ascii-latin-3/prog.adb
new file mode 100644
index 00000000000..c029dd93d02
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/non-ascii-latin-3/prog.adb
@@ -0,0 +1,24 @@
+-- Copyright 2022 Free Software Foundation, Inc. -*- coding: iso-latin-3 -*-
+--
+-- This program is free software; you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation; either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+with Pack; use Pack;
+
+procedure Prog is
+ -- The name is chosen to use a character that is not in Latin-1.
+ -- This should be var_Ubf.
+ VAR_¯ : Integer := FUNC_¯ (23);
+begin
+ Do_Nothing (var_¿'Address); -- BREAK
+end Prog;
diff --git a/gdb/testsuite/gdb.ada/non-ascii-utf-8.exp b/gdb/testsuite/gdb.ada/non-ascii-utf-8.exp
new file mode 100644
index 00000000000..4ab0ca54c63
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/non-ascii-utf-8.exp
@@ -0,0 +1,57 @@
+# Copyright 2022 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Test UTF-8 identifiers.
+
+load_lib "ada.exp"
+
+if { [skip_ada_tests] } { return -1 }
+
+# Enable basic use of UTF-8. LC_ALL gets reset for each testfile.
+setenv LC_ALL C.UTF-8
+
+standard_ada_testfile prog
+
+set flags [list debug additional_flags=-gnatW8]
+if {[gdb_compile_ada "${srcfile}" "${binfile}" executable $flags] != ""} {
+ return -1
+}
+
+# Restart without an executable so that we can set the encoding early.
+clean_restart
+
+gdb_test_no_output "set ada source-charset UTF-8"
+
+gdb_load ${binfile}
+
+set bp_location [gdb_get_line_number "BREAK" ${testdir}/prog.adb]
+runto "prog.adb:$bp_location"
+
+gdb_test "print VAR_Ü" " = 23"
+gdb_test "print var_ü" " = 23"
+gdb_test "print VAR_Ƹ" " = 24"
+gdb_test "print var_ƹ" " = 24"
+gdb_test "print VAR_ð" " = 25"
+gdb_test "print var_ð©" " = 25"
+gdb_test "print VAR_Å»" " = 26"
+gdb_test "print var_ż" " = 26"
+
+gdb_breakpoint "FUNC_Ü" message
+gdb_breakpoint "func_ü" message
+gdb_breakpoint "FUNC_Ƹ" message
+gdb_breakpoint "func_ƹ" message
+gdb_breakpoint "FUNC_Å»" message
+gdb_breakpoint "func_ż" message
+gdb_breakpoint "FUNC_ð" message
diff --git a/gdb/testsuite/gdb.ada/non-ascii-utf-8/pack.adb b/gdb/testsuite/gdb.ada/non-ascii-utf-8/pack.adb
new file mode 100644
index 00000000000..f7893f20976
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/non-ascii-utf-8/pack.adb
@@ -0,0 +1,43 @@
+-- Copyright 2022 Free Software Foundation, Inc.
+--
+-- This program is free software; you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation; either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+package body Pack is
+
+ function FUNC_Ü (x : Integer) return Integer is
+ begin
+ return x;
+ end FUNC_Ü;
+
+ function FUNC_Ƹ (x : Integer) return Integer is
+ begin
+ return x;
+ end FUNC_Ƹ;
+
+ function FUNC_ð (x : Integer) return Integer is
+ begin
+ return x;
+ end FUNC_ð;
+
+ function FUNC_Å» (x : Integer) return Integer is
+ begin
+ return x;
+ end FUNC_Å»;
+
+ procedure Do_Nothing (A : System.Address) is
+ begin
+ null;
+ end Do_Nothing;
+
+end Pack;
diff --git a/gdb/testsuite/gdb.ada/non-ascii-utf-8/pack.ads b/gdb/testsuite/gdb.ada/non-ascii-utf-8/pack.ads
new file mode 100644
index 00000000000..f44c487295f
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/non-ascii-utf-8/pack.ads
@@ -0,0 +1,24 @@
+-- Copyright 2022 Free Software Foundation, Inc.
+--
+-- This program is free software; you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation; either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+with System;
+package Pack is
+ function FUNC_Ü (x : Integer) return Integer;
+ function FUNC_Ƹ (x : Integer) return Integer;
+ function FUNC_ð (x : Integer) return Integer;
+ function FUNC_Å» (x : Integer) return Integer;
+
+ procedure Do_Nothing (A : System.Address);
+end Pack;
diff --git a/gdb/testsuite/gdb.ada/non-ascii-utf-8/prog.adb b/gdb/testsuite/gdb.ada/non-ascii-utf-8/prog.adb
new file mode 100644
index 00000000000..b9c1b17d448
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/non-ascii-utf-8/prog.adb
@@ -0,0 +1,36 @@
+-- Copyright 2022 Free Software Foundation, Inc.
+--
+-- This program is free software; you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation; either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+with Pack; use Pack;
+
+procedure Prog is
+ -- This should be var_Ufc.
+ VAR_Ü : Integer := FUNC_Ü (23);
+ -- This should be var_W01b8, because with UTF-8, non-ASCII
+ -- letters are upper-cased.
+ VAR_Ƹ : Integer := FUNC_Ƹ (24);
+ -- This should be var_WW00010401, because with UTF-8, non-ASCII
+ -- letters are upper-cased.
+ VAR_ð : Integer := FUNC_ð (25);
+ -- This is the same name as the corresponding Latin 3 test,
+ -- and helps show the peculiarity of the case folding rule.
+ -- This winds up as var_W017b, the upper-case variant.
+ VAR_Å» : Integer := FUNC_Å» (26);
+begin
+ Do_Nothing (var_ü'Address); -- BREAK
+ Do_Nothing (var_ƹ'Address);
+ Do_Nothing (var_ð©'Address);
+ Do_Nothing (var_ż'Address);
+end Prog;
diff --git a/gdb/testsuite/gdb.ada/ptype_field.exp b/gdb/testsuite/gdb.ada/ptype_field.exp
index cd45fbe157e..25147a88743 100644
--- a/gdb/testsuite/gdb.ada/ptype_field.exp
+++ b/gdb/testsuite/gdb.ada/ptype_field.exp
@@ -42,3 +42,34 @@ gdb_test "ptype circle.pos" \
gdb_test "ptype circle.pos.x" \
"type = <\[0-9\]+-byte integer>"
+
+gdb_test "complete print my_circ" "print my_circle"
+gdb_test "complete print my_circle.r" "print my_circle\\.radius"
+gdb_test "complete print my_circle.po" "print my_circle\\.pos"
+gdb_test "complete print my_circle . po" "print my_circle \\. pos" \
+ "complete with spaces"
+gdb_test "complete print my_circle." \
+ [multi_line \
+ "print my_circle\\.pos" \
+ "print my_circle\\.radius"]
+gdb_test "complete print (my_circle).r" "print \\(my_circle\\)\\.radius"
+gdb_test "complete print (my_circle).po" "print \\(my_circle\\)\\.pos"
+gdb_test "complete print (my_circle)." \
+ [multi_line \
+ "print \\(my_circle\\)\\.pos" \
+ "print \\(my_circle\\)\\.radius"]
+
+gdb_test "complete ptype pck.pos" "ptype pck\\.position"
+gdb_test "complete ptype pck.c" "ptype pck\\.circle"
+
+# We can't query the members of a package yet, and this yields a bit
+# too much output, so comment out for now instead of kfailing.
+# gdb_test "complete ptype pck." \
+# [multi_line \
+# "ptype pck\\.circle" \
+# "ptype pck\\.position"]
+
+gdb_test "complete ptype circle.pos." \
+ [multi_line \
+ "ptype circle\\.pos\\.x" \
+ "ptype circle\\.pos\\.y"]
diff --git a/gdb/testsuite/gdb.ada/tagged.exp b/gdb/testsuite/gdb.ada/tagged.exp
index 0e9d15faa0c..6fb8a418149 100644
--- a/gdb/testsuite/gdb.ada/tagged.exp
+++ b/gdb/testsuite/gdb.ada/tagged.exp
@@ -17,6 +17,11 @@ load_lib "ada.exp"
if { [skip_ada_tests] } { return -1 }
+if {![gnat_runtime_has_debug_info]} {
+ untested "GNAT runtime debuginfo required for this test"
+ return -1
+}
+
standard_ada_testfile foo
if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug]] != "" } {
diff --git a/gdb/testsuite/gdb.ada/tagged_access.exp b/gdb/testsuite/gdb.ada/tagged_access.exp
index 664a50deb09..3649c5474a7 100644
--- a/gdb/testsuite/gdb.ada/tagged_access.exp
+++ b/gdb/testsuite/gdb.ada/tagged_access.exp
@@ -17,6 +17,11 @@ load_lib "ada.exp"
if { [skip_ada_tests] } { return -1 }
+if {![gnat_runtime_has_debug_info]} {
+ untested "GNAT runtime debuginfo required for this test"
+ return -1
+}
+
standard_ada_testfile p
if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug]] != "" } {
diff --git a/gdb/testsuite/gdb.ada/unchecked_union.exp b/gdb/testsuite/gdb.ada/unchecked_union.exp
index 7fc08e1526d..6a9caf229cd 100644
--- a/gdb/testsuite/gdb.ada/unchecked_union.exp
+++ b/gdb/testsuite/gdb.ada/unchecked_union.exp
@@ -30,10 +30,14 @@ proc multi_line_string {str} {
}
set inner_string { case ? is
- when ? =>
+ when 0 =>
small: range 0 .. 255;
+ second: range 0 .. 255;
when ? =>
+ bval: range 0 .. 255;
+ when others =>
large: range 255 .. 510;
+ more: range 255 .. 510;
end case;
}
set inner_full "type = record (?) is\n${inner_string}end record"
diff --git a/gdb/testsuite/gdb.ada/unchecked_union/unchecked_union.adb b/gdb/testsuite/gdb.ada/unchecked_union/unchecked_union.adb
index 8e7b8efc078..42fe3a997b8 100644
--- a/gdb/testsuite/gdb.ada/unchecked_union/unchecked_union.adb
+++ b/gdb/testsuite/gdb.ada/unchecked_union/unchecked_union.adb
@@ -17,14 +17,18 @@ with System;
with Pck; use Pck;
procedure Foo is
- type Key is (Alpha, Omega);
+ type Key is (Alpha, Beta, Omega);
type Inner(Disc : Key := Omega) is record
case Disc is
when Alpha =>
Small : Integer range 0..255;
+ Second : Integer range 0..255;
+ when Beta =>
+ Bval : Integer range 0..255;
when others =>
Large : Integer range 255..510;
+ More : Integer range 255..510;
end case;
end record;
pragma Unchecked_Union (Inner);
diff --git a/gdb/testsuite/gdb.ada/widewide.exp b/gdb/testsuite/gdb.ada/widewide.exp
index 6fabb5bb08c..56c9e12abd2 100644
--- a/gdb/testsuite/gdb.ada/widewide.exp
+++ b/gdb/testsuite/gdb.ada/widewide.exp
@@ -33,9 +33,9 @@ if ![runto "foo.adb:$bp_location" ] then {
gdb_test "print some_easy" "= 74 'J'"
-gdb_test "print some_larger" "= 48879 '\\\[\"0000beef\"\\\]'"
+gdb_test "print some_larger" "= 48879 '\\\[\"00beef\"\\\]'"
-gdb_test "print some_big" "= 14335727 '\\\[\"00dabeef\"\\\]'"
+gdb_test "print some_big" "= 14335727 '\\\[\"dabeef\"\\\]'"
gdb_test "print my_wws" "= \" helo\""
@@ -43,3 +43,22 @@ gdb_test "print my_wws(1)" "= 32 ' '"
gdb_test "print my_wws(2)" "= 104 'h'"
+gdb_test "print my_wws = \" helo\"" " = true"
+
+gdb_test "print my_ws = \"wide\"" " = true"
+gdb_test "print my_ws = \"nope\"" " = false"
+
+gdb_test "print \"x\" & my_ws & \"y\"" " = \"xwidey\""
+
+gdb_test "print my_wws(1..3) := \"abc\"" " = \"abc\""
+gdb_test "print my_wws" " = \"abclo\"" \
+ "print my_wws after slice assignment"
+gdb_test "print my_wws(1..3) := my_wws(2..4)" " = \"bcl\""
+gdb_test "print my_wws" " = \"bcllo\"" \
+ "print my_wws after overlapping slice assignment"
+
+gdb_test "print 'x' & my_ws" " = \"xwide\""
+gdb_test "print my_ws & 'y'" " = \"widey\""
+
+gdb_test "ptype wide_wide_string'(\"wws\")" \
+ "array \\(1 \\.\\. 3\\) of wide_wide_character"
diff --git a/gdb/testsuite/gdb.ada/widewide/foo.adb b/gdb/testsuite/gdb.ada/widewide/foo.adb
index 45adbde20a1..eda6ac54039 100644
--- a/gdb/testsuite/gdb.ada/widewide/foo.adb
+++ b/gdb/testsuite/gdb.ada/widewide/foo.adb
@@ -19,9 +19,12 @@ procedure Foo is
Some_Easy : Wide_Wide_Character := 'J';
Some_Larger : Wide_Wide_Character := Wide_Wide_Character'Val(16#beef#);
Some_Big : Wide_Wide_Character := Wide_Wide_Character'Val(16#00dabeef#);
+ My_Ws : Wide_String := "wide";
My_WWS : Wide_Wide_String := " helo";
begin
Do_Nothing (Some_Easy'Address); -- START
Do_Nothing (Some_Larger'Address);
+ Do_Nothing (My_Ws);
+ Do_Nothing (My_WWS);
Do_Nothing (Some_Big'Address);
end Foo;
diff --git a/gdb/testsuite/gdb.ada/widewide/pck.adb b/gdb/testsuite/gdb.ada/widewide/pck.adb
index 6b9023beb67..f5ec5607a56 100644
--- a/gdb/testsuite/gdb.ada/widewide/pck.adb
+++ b/gdb/testsuite/gdb.ada/widewide/pck.adb
@@ -20,4 +20,14 @@ package body Pck is
null;
end Do_Nothing;
+ procedure Do_Nothing (A : Wide_String) is
+ begin
+ null;
+ end Do_Nothing;
+
+ procedure Do_Nothing (A : Wide_Wide_String) is
+ begin
+ null;
+ end Do_Nothing;
+
end Pck;
diff --git a/gdb/testsuite/gdb.ada/widewide/pck.ads b/gdb/testsuite/gdb.ada/widewide/pck.ads
index e9316b09678..90c04f373f2 100644
--- a/gdb/testsuite/gdb.ada/widewide/pck.ads
+++ b/gdb/testsuite/gdb.ada/widewide/pck.ads
@@ -18,5 +18,7 @@ with System;
package Pck is
procedure Do_Nothing (A : System.Address);
+ procedure Do_Nothing (A : Wide_String);
+ procedure Do_Nothing (A : Wide_Wide_String);
end Pck;
diff --git a/gdb/testsuite/gdb.arch/altivec-regs.exp b/gdb/testsuite/gdb.arch/altivec-regs.exp
index 7bae979b984..d4c13afa8a1 100644
--- a/gdb/testsuite/gdb.arch/altivec-regs.exp
+++ b/gdb/testsuite/gdb.arch/altivec-regs.exp
@@ -84,9 +84,9 @@ set endianness [get_endianness]
# b) the register read (below) also works.
if {$endianness == "big"} {
-set vector_register ".uint128 = 0x1000000010000000100000001, v4_float = .0x0, 0x0, 0x0, 0x0., v4_int32 = .0x1, 0x1, 0x1, 0x1., v8_int16 = .0x0, 0x1, 0x0, 0x1, 0x0, 0x1, 0x0, 0x1., v16_int8 = .0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1.."
+set vector_register ".uint128 = 0x1000000010000000100000001, v4_float = .0x1, 0x1, 0x1, 0x1., v4_int32 = .0x1, 0x1, 0x1, 0x1., v8_int16 = .0x0, 0x1, 0x0, 0x1, 0x0, 0x1, 0x0, 0x1., v16_int8 = .0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1.."
} else {
-set vector_register ".uint128 = 0x1000000010000000100000001, v4_float = .0x0, 0x0, 0x0, 0x0., v4_int32 = .0x1, 0x1, 0x1, 0x1., v8_int16 = .0x1, 0x0, 0x1, 0x0, 0x1, 0x0, 0x1, 0x0., v16_int8 = .0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0.."
+set vector_register ".uint128 = 0x1000000010000000100000001, v4_float = .0x1, 0x1, 0x1, 0x1., v4_int32 = .0x1, 0x1, 0x1, 0x1., v8_int16 = .0x1, 0x0, 0x1, 0x0, 0x1, 0x0, 0x1, 0x0., v16_int8 = .0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0.."
}
for {set i 0} {$i < 32} {incr i 1} {
@@ -104,9 +104,9 @@ gdb_test "info reg vscr" "vscr.*0x1\[ \t\]+1" "info reg vscr"
# the way gdb works.
if {$endianness == "big"} {
- set decimal_vector ".uint128 = 79228162532711081671548469249, v4_float = .1.*e-45, 1.*e-45, 1.*e-45, 1.*e-45., v4_int32 = .1, 1, 1, 1., v8_int16 = .0, 1, 0, 1, 0, 1, 0, 1., v16_int8 = .0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1.."
+ set decimal_vector ".uint128 = 79228162532711081671548469249, v4_float = .1.*e-45, 1.*e-45, 1.*e-45, 1.*e-45., v4_int32 = .1, 1, 1, 1., v8_int16 = .0, 1, 0, 1, 0, 1, 0, 1., v16_int8 = .0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1.."
} else {
- set decimal_vector ".uint128 = 79228162532711081671548469249, v4_float = .1.*e-45, 1.*e-45, 1.*e-45, 1.*e-45., v4_int32 = .1, 1, 1, 1., v8_int16 = .1, 0, 1, 0, 1, 0, 1, 0., v16_int8 = .1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.."
+ set decimal_vector ".uint128 = 79228162532711081671548469249, v4_float = .1.*e-45, 1.*e-45, 1.*e-45, 1.*e-45., v4_int32 = .1, 1, 1, 1., v8_int16 = .1, 0, 1, 0, 1, 0, 1, 0., v16_int8 = .1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.."
}
for {set i 0} {$i < 32} {incr i 1} {
diff --git a/gdb/testsuite/gdb.arch/amd64-entry-value.exp b/gdb/testsuite/gdb.arch/amd64-entry-value.exp
index 4f06a303ab2..485d8a5cd1b 100644
--- a/gdb/testsuite/gdb.arch/amd64-entry-value.exp
+++ b/gdb/testsuite/gdb.arch/amd64-entry-value.exp
@@ -253,7 +253,7 @@ gdb_test "bt" "^bt\r\n#0 +d \\(i=<optimized out>, j=<optimized out>\\)\[^\r\n\]*
gdb_continue_to_breakpoint "self: breakhere"
-gdb_test "bt" "^bt\r\n#0 +d \\(i=<optimized out>, j=<optimized out>\\)\[^\r\n\]*\r\n#1 +0x\[0-9a-f\]+ in self \\(i=<optimized out>\\)\[^\r\n\]*\r\n#2 +0x\[0-9a-f\]+ in main \\(\\)\[^\r\n\]*" \
+gdb_test "bt" "^bt\r\n#0 +d \\(i=<optimized out>, j=<optimized out>\\)\[^\r\n\]*\r\n#1 +0x\[0-9a-f\]+ in self \\(i=<optimized out>\\)\[^\r\n\]*\r\n#2 +0x\[0-9a-f\]+ in self2 \\(i=<optimized out>\\)\[^\r\n\]*\r\n#3 +0x\[0-9a-f\]+ in self \\(i=<optimized out>\\)\[^\r\n\]*\r\n#4 +0x\[0-9a-f\]+ in main \\(\\)\[^\r\n\]*" \
"self: bt"
gdb_test_no_output "set debug entry-values 1"
diff --git a/gdb/testsuite/gdb.arch/arm-bl-branch-dest.exp b/gdb/testsuite/gdb.arch/arm-bl-branch-dest.exp
index cebeb629a9f..34d98aec96e 100644
--- a/gdb/testsuite/gdb.arch/arm-bl-branch-dest.exp
+++ b/gdb/testsuite/gdb.arch/arm-bl-branch-dest.exp
@@ -26,7 +26,7 @@ standard_testfile
# the "-Wl,-Ttext-segment" option compile the binary.
if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile} \
- [list debug ldflags=-Wl,-Ttext-segment=0xb0000000]] } {
+ [list debug text_segment=0xb0000000]] } {
return -1
}
diff --git a/gdb/testsuite/gdb.arch/vsx-regs.exp b/gdb/testsuite/gdb.arch/vsx-regs.exp
index 8b3841362fe..56fea796a9b 100644
--- a/gdb/testsuite/gdb.arch/vsx-regs.exp
+++ b/gdb/testsuite/gdb.arch/vsx-regs.exp
@@ -61,29 +61,29 @@ set endianness [get_endianness]
# Data sets used throughout the test
if {$endianness == "big"} {
- set vector_register1 ".uint128 = 0x3ff4cccccccccccd0000000000000000, v2_double = .0x1, 0x0., v4_float = .0x1, 0xf9999998, 0x0, 0x0., v4_int32 = .0x3ff4cccc, 0xcccccccd, 0x0, 0x0., v8_int16 = .0x3ff4, 0xcccc, 0xcccc, 0xcccd, 0x0, 0x0, 0x0, 0x0., v16_int8 = .0x3f, 0xf4, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0.."
+ set vector_register1 ".float128 = 0x3ff4cccccccccccd0000000000000000, uint128 = 0x3ff4cccccccccccd0000000000000000, v2_double = .0x3ff4cccccccccccd, 0x0., v4_float = .0x3ff4cccc, 0xcccccccd, 0x0, 0x0., v4_int32 = .0x3ff4cccc, 0xcccccccd, 0x0, 0x0., v8_int16 = .0x3ff4, 0xcccc, 0xcccc, 0xcccd, 0x0, 0x0, 0x0, 0x0., v16_int8 = .0x3f, 0xf4, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0.."
- set vector_register1_vr ".uint128 = 0x3ff4cccccccccccd0000000100000001, v4_float = .0x1, 0xf9999998, 0x0, 0x0., v4_int32 = .0x3ff4cccc, 0xcccccccd, 0x1, 0x1., v8_int16 = .0x3ff4, 0xcccc, 0xcccc, 0xcccd, 0x0, 0x1, 0x0, 0x1., v16_int8 = .0x3f, 0xf4, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcd, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1.."
+ set vector_register1_vr ".uint128 = 0x3ff4cccccccccccd0000000100000001, v4_float = .0x3ff4cccc, 0xcccccccd, 0x1, 0x1., v4_int32 = .0x3ff4cccc, 0xcccccccd, 0x1, 0x1., v8_int16 = .0x3ff4, 0xcccc, 0xcccc, 0xcccd, 0x0, 0x1, 0x0, 0x1., v16_int8 = .0x3f, 0xf4, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcd, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1.."
- set vector_register2 "uint128 = 0xdeadbeefdeadbeefdeadbeefdeadbeef, v2_double = .0x8000000000000000, 0x8000000000000000., v4_float = .0x0, 0x0, 0x0, 0x0., v4_int32 = .0xdeadbeef, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef., v8_int16 = .0xdead, 0xbeef, 0xdead, 0xbeef, 0xdead, 0xbeef, 0xdead, 0xbeef., v16_int8 = .0xde, 0xad, 0xbe, 0xef, 0xde, 0xad, 0xbe, 0xef, 0xde, 0xad, 0xbe, 0xef, 0xde, 0xad, 0xbe, 0xef.."
+ set vector_register2 ".float128 = 0xdeadbeefdeadbeefdeadbeefdeadbeef, uint128 = 0xdeadbeefdeadbeefdeadbeefdeadbeef, v2_double = .0xdeadbeefdeadbeef, 0xdeadbeefdeadbeef., v4_float = .0xdeadbeef, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef., v4_int32 = .0xdeadbeef, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef., v8_int16 = .0xdead, 0xbeef, 0xdead, 0xbeef, 0xdead, 0xbeef, 0xdead, 0xbeef., v16_int8 = .0xde, 0xad, 0xbe, 0xef, 0xde, 0xad, 0xbe, 0xef, 0xde, 0xad, 0xbe, 0xef, 0xde, 0xad, 0xbe, 0xef.."
- set vector_register2_vr "uint128 = 0xdeadbeefdeadbeefdeadbeefdeadbeef, v4_float = .0x0, 0x0, 0x0, 0x0., v4_int32 = .0xdeadbeef, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef., v8_int16 = .0xdead, 0xbeef, 0xdead, 0xbeef, 0xdead, 0xbeef, 0xdead, 0xbeef., v16_int8 = .0xde, 0xad, 0xbe, 0xef, 0xde, 0xad, 0xbe, 0xef, 0xde, 0xad, 0xbe, 0xef, 0xde, 0xad, 0xbe, 0xef.."
+ set vector_register2_vr ".uint128 = 0xdeadbeefdeadbeefdeadbeefdeadbeef, v4_float = .0xdeadbeef, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef., v4_int32 = .0xdeadbeef, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef., v8_int16 = .0xdead, 0xbeef, 0xdead, 0xbeef, 0xdead, 0xbeef, 0xdead, 0xbeef., v16_int8 = .0xde, 0xad, 0xbe, 0xef, 0xde, 0xad, 0xbe, 0xef, 0xde, 0xad, 0xbe, 0xef, 0xde, 0xad, 0xbe, 0xef.."
- set vector_register3 ".uint128 = 0x1000000010000000100000001, v2_double = .0x0, 0x0., v4_float = .0x0, 0x0, 0x0, 0x0., v4_int32 = .0x1, 0x1, 0x1, 0x1., v8_int16 = .0x0, 0x1, 0x0, 0x1, 0x0, 0x1, 0x0, 0x1., v16_int8 = .0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1.."
+ set vector_register3 ".float128 = 0x1000000010000000100000001, uint128 = 0x1000000010000000100000001, v2_double = .0x100000001, 0x100000001., v4_float = .0x1, 0x1, 0x1, 0x1., v4_int32 = .0x1, 0x1, 0x1, 0x1., v8_int16 = .0x0, 0x1, 0x0, 0x1, 0x0, 0x1, 0x0, 0x1., v16_int8 = .0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1.."
- set vector_register3_vr ".uint128 = 0x1000000010000000100000001, v4_float = .0x0, 0x0, 0x0, 0x0., v4_int32 = .0x1, 0x1, 0x1, 0x1., v8_int16 = .0x0, 0x1, 0x0, 0x1, 0x0, 0x1, 0x0, 0x1., v16_int8 = .0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1.."
+ set vector_register3_vr ".uint128 = 0x1000000010000000100000001, v4_float = .0x1, 0x1, 0x1, 0x1., v4_int32 = .0x1, 0x1, 0x1, 0x1., v8_int16 = .0x0, 0x1, 0x0, 0x1, 0x0, 0x1, 0x0, 0x1., v16_int8 = .0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1.."
} else {
- set vector_register1 ".uint128 = 0x3ff4cccccccccccd0000000000000000, v2_double = .0x0, 0x1., v4_float = .0x0, 0x0, 0xf9999998, 0x1., v4_int32 = .0x0, 0x0, 0xcccccccd, 0x3ff4cccc., v8_int16 = .0x0, 0x0, 0x0, 0x0, 0xcccd, 0xcccc, 0xcccc, 0x3ff4., v16_int8 = .0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcd, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xf4, 0x3f.."
+ set vector_register1 ".float128 = 0x3ff4cccccccccccd0000000000000000, uint128 = 0x3ff4cccccccccccd0000000000000000, v2_double = .0x0, 0x3ff4cccccccccccd., v4_float = .0x0, 0x0, 0xcccccccd, 0x3ff4cccc., v4_int32 = .0x0, 0x0, 0xcccccccd, 0x3ff4cccc., v8_int16 = .0x0, 0x0, 0x0, 0x0, 0xcccd, 0xcccc, 0xcccc, 0x3ff4., v16_int8 = .0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcd, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xf4, 0x3f.."
- set vector_register1_vr ".uint128 = 0x3ff4cccccccccccd0000000100000001, v4_float = .0x0, 0x0, 0xf9999998, 0x1., v4_int32 = .0x1, 0x1, 0xcccccccd, 0x3ff4cccc., v8_int16 = .0x1, 0x0, 0x1, 0x0, 0xcccd, 0xcccc, 0xcccc, 0x3ff4., v16_int8 = .0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0xcd, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xf4, 0x3f.."
+ set vector_register1_vr ".uint128 = 0x3ff4cccccccccccd0000000100000001, v4_float = .0x1, 0x1, 0xcccccccd, 0x3ff4cccc., v4_int32 = .0x1, 0x1, 0xcccccccd, 0x3ff4cccc., v8_int16 = .0x1, 0x0, 0x1, 0x0, 0xcccd, 0xcccc, 0xcccc, 0x3ff4., v16_int8 = .0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0xcd, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xf4, 0x3f.."
- set vector_register2 "uint128 = 0xdeadbeefdeadbeefdeadbeefdeadbeef, v2_double = .0x8000000000000000, 0x8000000000000000., v4_float = .0x0, 0x0, 0x0, 0x0., v4_int32 = .0xdeadbeef, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef., v8_int16 = .0xbeef, 0xdead, 0xbeef, 0xdead, 0xbeef, 0xdead, 0xbeef, 0xdead., v16_int8 = .0xef, 0xbe, 0xad, 0xde, 0xef, 0xbe, 0xad, 0xde, 0xef, 0xbe, 0xad, 0xde, 0xef, 0xbe, 0xad, 0xde.."
+ set vector_register2 ".float128 = 0xdeadbeefdeadbeefdeadbeefdeadbeef, uint128 = 0xdeadbeefdeadbeefdeadbeefdeadbeef, v2_double = .0xdeadbeefdeadbeef, 0xdeadbeefdeadbeef., v4_float = .0xdeadbeef, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef., v4_int32 = .0xdeadbeef, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef., v8_int16 = .0xbeef, 0xdead, 0xbeef, 0xdead, 0xbeef, 0xdead, 0xbeef, 0xdead., v16_int8 = .0xef, 0xbe, 0xad, 0xde, 0xef, 0xbe, 0xad, 0xde, 0xef, 0xbe, 0xad, 0xde, 0xef, 0xbe, 0xad, 0xde.."
- set vector_register2_vr "uint128 = 0xdeadbeefdeadbeefdeadbeefdeadbeef, v4_float = .0x0, 0x0, 0x0, 0x0., v4_int32 = .0xdeadbeef, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef., v8_int16 = .0xbeef, 0xdead, 0xbeef, 0xdead, 0xbeef, 0xdead, 0xbeef, 0xdead., v16_int8 = .0xef, 0xbe, 0xad, 0xde, 0xef, 0xbe, 0xad, 0xde, 0xef, 0xbe, 0xad, 0xde, 0xef, 0xbe, 0xad, 0xde.."
+ set vector_register2_vr ".uint128 = 0xdeadbeefdeadbeefdeadbeefdeadbeef, v4_float = .0xdeadbeef, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef., v4_int32 = .0xdeadbeef, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef., v8_int16 = .0xbeef, 0xdead, 0xbeef, 0xdead, 0xbeef, 0xdead, 0xbeef, 0xdead., v16_int8 = .0xef, 0xbe, 0xad, 0xde, 0xef, 0xbe, 0xad, 0xde, 0xef, 0xbe, 0xad, 0xde, 0xef, 0xbe, 0xad, 0xde.."
- set vector_register3 ".uint128 = 0x1000000010000000100000001, v2_double = .0x0, 0x0., v4_float = .0x0, 0x0, 0x0, 0x0., v4_int32 = .0x1, 0x1, 0x1, 0x1., v8_int16 = .0x1, 0x0, 0x1, 0x0, 0x1, 0x0, 0x1, 0x0., v16_int8 = .0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0.."
+ set vector_register3 ".float128 = 0x1000000010000000100000001, uint128 = 0x1000000010000000100000001, v2_double = .0x100000001, 0x100000001., v4_float = .0x1, 0x1, 0x1, 0x1., v4_int32 = .0x1, 0x1, 0x1, 0x1., v8_int16 = .0x1, 0x0, 0x1, 0x0, 0x1, 0x0, 0x1, 0x0., v16_int8 = .0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0.."
- set vector_register3_vr ".uint128 = 0x1000000010000000100000001, v4_float = .0x0, 0x0, 0x0, 0x0., v4_int32 = .0x1, 0x1, 0x1, 0x1., v8_int16 = .0x1, 0x0, 0x1, 0x0, 0x1, 0x0, 0x1, 0x0., v16_int8 = .0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0.."
+ set vector_register3_vr ".uint128 = 0x1000000010000000100000001, v4_float = .0x1, 0x1, 0x1, 0x1., v4_int32 = .0x1, 0x1, 0x1, 0x1., v8_int16 = .0x1, 0x0, 0x1, 0x0, 0x1, 0x0, 0x1, 0x0., v16_int8 = .0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0.."
}
set float_register ".raw 0xdeadbeefdeadbeef."
@@ -93,12 +93,13 @@ set float_register ".raw 0xdeadbeefdeadbeef."
# after updates to F*.
# Since dl_main uses some VS* registers, and per inspection their values are
# no longer zero when our test reaches main(), we need to explicitly
-# initialize the doubleword1 portions before we run our tests against
-# values currently in those registers.
+# initialize the VS* registers before we run our tests against the values
+# currently in those registers.
-# 0: Initialize the (doubleword 1) portion of the VS0-VS31 registers.
+# 0: Initialize the (doubleword 0 and 1) portion of the VS0-VS31 registers.
for {set i 0} {$i < 32} {incr i 1} {
gdb_test_no_output "set \$vs$i.v2_double\[0\] = 0"
+ gdb_test_no_output "set \$vs$i.v2_double\[1\] = 0"
}
# 1: Set F0~F31 registers and check if it reflects on VS0~VS31.
diff --git a/gdb/testsuite/gdb.base/all-architectures.exp.tcl b/gdb/testsuite/gdb.base/all-architectures.exp.tcl
index 94b5efe80f3..d6679a1e9a1 100644
--- a/gdb/testsuite/gdb.base/all-architectures.exp.tcl
+++ b/gdb/testsuite/gdb.base/all-architectures.exp.tcl
@@ -91,45 +91,25 @@ proc gdb_test_internal {cmd pattern {message ""}} {
gdb_test_internal "set max-completions unlimited" \
"^set max-completions unlimited"
-# Return a list of all the accepted values of "set WHAT".
-
-proc get_set_option_choices {what} {
- global gdb_prompt
-
- set values {}
-
- set test "complete set $what"
- gdb_test_multiple "complete set $what " "$test" {
- -re "set $what (\[^\r\n\]+)\r\n" {
- lappend values $expect_out(1,string)
- exp_continue
- }
- -re "$gdb_prompt " {
- internal_pass $test
- }
- }
- return $values
-}
-
-set supported_archs [get_set_option_choices "architecture"]
+set supported_archs [get_set_option_choices "set architecture"]
# There should be at least one more than "auto".
gdb_assert {[llength $supported_archs] > 1} "at least one architecture"
-set supported_osabis [get_set_option_choices "osabi"]
+set supported_osabis [get_set_option_choices "set osabi"]
# There should be at least one more than "auto" and "default".
gdb_assert {[llength $supported_osabis] > 2} "at least one osabi"
if {[lsearch $supported_archs "mips"] >= 0} {
- set supported_mipsfpu [get_set_option_choices "mipsfpu"]
- set supported_mips_abi [get_set_option_choices "mips abi"]
+ set supported_mipsfpu [get_set_option_choices "set mipsfpu"]
+ set supported_mips_abi [get_set_option_choices "set mips abi"]
gdb_assert {[llength $supported_mipsfpu] != 0} "at least one mipsfpu"
gdb_assert {[llength $supported_mips_abi] != 0} "at least one mips abi"
}
if {[lsearch $supported_archs "arm"] >= 0} {
- set supported_arm_fpu [get_set_option_choices "arm fpu"]
- set supported_arm_abi [get_set_option_choices "arm abi"]
+ set supported_arm_fpu [get_set_option_choices "set arm fpu"]
+ set supported_arm_abi [get_set_option_choices "set arm abi"]
gdb_assert {[llength $supported_arm_fpu] != 0} "at least one arm fpu"
gdb_assert {[llength $supported_arm_abi] != 0} "at least one arm abi"
diff --git a/gdb/testsuite/gdb.base/annota1.exp b/gdb/testsuite/gdb.base/annota1.exp
index c9544eec0ec..ac6ad6478f4 100644
--- a/gdb/testsuite/gdb.base/annota1.exp
+++ b/gdb/testsuite/gdb.base/annota1.exp
@@ -128,41 +128,66 @@ gdb_test_multiple "info break" "breakpoint info" {
set binexp [string_to_regexp $binfile]
set warning_slow_re \
- "warning: File transfers from remote targets can be slow\[^\r\n\]+"
+ "warning: File transfers from remote targets can be slow\[^\r\n\]+\r\n"
set warning_gdb_index_re \
[multi_line \
"warning: Skipping \[^\r\n\]+ .gdb_index section in \[^\r\n\]+" \
"Do \"set use-deprecated-index-sections on\" before the file is read" \
- "to use the section anyway\\."]
+ "to use the section anyway\\.\r\n"]
set reading_re \
- "Reading \[^\r\n\]+"
+ "Reading \[^\r\n\]+\r\n"
set libthread_db_re \
[multi_line \
"\\\[Thread debugging using libthread_db enabled\\\]" \
- "Using host libthread_db library \[^\r\n\]+"]
+ "Using host libthread_db library \[^\r\n\]+\r\n"]
-set run_re \
+set optional_re \
[list \
- "\r\n\032\032post-prompt\r\nStarting program: $binexp " \
- "\(\(\r\n$reading_re\)|\(\r\n$warning_slow_re\)\)*" \
+ "\(" \
+ "\($reading_re)" \
+ "|" \
+ "\($warning_slow_re\)" \
+ "|" \
+ "\($libthread_db_re\)" \
+ "|" \
"\(\r\n$warning_gdb_index_re\)?" \
- "\(\(\r\n\r\n\032\032frames-invalid\)|\(\r\n\r\n\032\032breakpoints-invalid\)\)*\r\n\r\n" \
- "\032\032starting\(\(\r\n$reading_re\)|\(\r\n$warning_slow_re\)|\r\n$libthread_db_re\)*" \
- "\(\(\r\n\r\n\032\032frames-invalid\)|\(\r\n\r\n\032\032breakpoints-invalid\)\)*\r\n\r\n" \
- "\032\032breakpoint 1\r\n\r\n" \
- "Breakpoint 1, \r\n" \
- "\032\032frame-begin 0 $hex\r\n\r\n" \
- "\032\032frame-function-name\r\n" \
- "main\r\n" \
- "\032\032frame-args\r\n \\(\\)\r\n" \
- "\032\032frame-source-begin\r\n at \r\n" \
- "\032\032frame-source-file\r\n.*annota1.c\r\n" \
- "\032\032frame-source-file-end\r\n:\r\n" \
- "\032\032frame-source-line\r\n$main_line\r\n" \
- "\032\032frame-source-end\r\n\r\n\r\n" \
- "\032\032source.*$srcfile:$main_line:.*:beg:$hex\r\n\r\n" \
- "\032\032frame-end\r\n\r\n" \
- "\032\032stopped"]
+ "\)*"]
+set optional_re [join $optional_re ""]
+
+set run_re \
+ [list \
+ "\r\n\032\032post-prompt\r\n" \
+ "Starting program: $binexp \r\n" \
+ $optional_re \
+ "\(\r\n\032\032breakpoints-invalid\r\n\)?" \
+ $optional_re \
+ "\r\n\032\032starting\r\n" \
+ $optional_re \
+ "\r\n\032\032frames-invalid\r\n" \
+ $optional_re \
+ "\r\n\032\032breakpoints-invalid\r\n" \
+ $optional_re \
+ "\r\n\032\032breakpoint 1\r\n" \
+ "\r\n" \
+ "Breakpoint 1, " \
+ "\r\n\032\032frame-begin 0 $hex\r\n" \
+ "\r\n\032\032frame-function-name\r\n" \
+ "main" \
+ "\r\n\032\032frame-args\r\n" \
+ " \\(\\)" \
+ "\r\n\032\032frame-source-begin\r\n" \
+ " at " \
+ "\r\n\032\032frame-source-file\r\n" \
+ ".*annota1.c" \
+ "\r\n\032\032frame-source-file-end\r\n" \
+ ":" \
+ "\r\n\032\032frame-source-line\r\n" \
+ "$main_line" \
+ "\r\n\032\032frame-source-end\r\n" \
+ "\r\n" \
+ "\r\n\032\032source.*$srcfile:$main_line:.*:beg:$hex\r\n" \
+ "\r\n\032\032frame-end\r\n" \
+ "\r\n\032\032stopped\r\n"]
set run_re [join $run_re ""]
diff --git a/gdb/testsuite/gdb.base/array-indices.exp b/gdb/testsuite/gdb.base/array-indices.exp
new file mode 100644
index 00000000000..e2b0b9b91fc
--- /dev/null
+++ b/gdb/testsuite/gdb.base/array-indices.exp
@@ -0,0 +1,20 @@
+# Copyright 2022 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Test the printing of element indices in C arrays.
+
+set lang c
+
+source $srcdir/$subdir/array-indices.exp.tcl
diff --git a/gdb/testsuite/gdb.base/array-indices.exp.tcl b/gdb/testsuite/gdb.base/array-indices.exp.tcl
new file mode 100644
index 00000000000..6f18e4c7093
--- /dev/null
+++ b/gdb/testsuite/gdb.base/array-indices.exp.tcl
@@ -0,0 +1,175 @@
+# Copyright 2022 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Test the printing of element indices in C/C++ arrays.
+
+standard_testfile ${srcdir}/gdb.base/array-repeat.c
+
+if {[prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \
+ [list debug ${lang}]]} {
+ return -1
+}
+
+gdb_test_no_output "set print array-indexes on"
+
+if {![runto_main]} {
+ perror "Could not run to main."
+ continue
+}
+
+gdb_breakpoint [gdb_get_line_number "Break here"]
+gdb_continue_to_breakpoint "Break here"
+
+# Build up the expected output for each array.
+set n0 {[0]}
+set n1 {[1]}
+set n2 {[2]}
+set n3 {[3]}
+set n4 {[4]}
+set n5 {[5]}
+set a9p9o "{$n0 = 9, $n1 = 9, $n2 = 9, $n3 = 9, $n4 = 9, $n5 = 9}"
+set a1p "{$n0 = 1, $n1 = 1, $n2 = 1, $n3 = 1, $n4 = 1}"
+set a1p9 "{$n0 = 1, $n1 = 1, $n2 = 1, $n3 = 1, $n4 = 1, $n5 = 9}"
+set a2po "{$n0 = 2, $n1 = 2, $n2 = 2, $n3 = 2, $n4 = 2}"
+set a2p "{$n0 = ${a2po}, $n1 = ${a2po}, $n2 = ${a2po}, $n3 = ${a2po},\
+ $n4 = ${a2po}}"
+set a2p9o "{$n0 = 2, $n1 = 2, $n2 = 2, $n3 = 2, $n4 = 2, $n5 = 9}"
+set a2p9 "{$n0 = ${a2p9o}, $n1 = ${a2p9o}, $n2 = ${a2p9o}, $n3 = ${a2p9o},\
+ $n4 = ${a2p9o}, $n5 = ${a9p9o}}"
+set a3po "{$n0 = 3, $n1 = 3, $n2 = 3, $n3 = 3, $n4 = 3}"
+set a3p "{$n0 = ${a3po}, $n1 = ${a3po}, $n2 = ${a3po}, $n3 = ${a3po},\
+ $n4 = ${a3po}}"
+set a3p "{$n0 = ${a3p}, $n1 = ${a3p}, $n2 = ${a3p}, $n3 = ${a3p},\
+ $n4 = ${a3p}}"
+set a3p9o "{$n0 = 3, $n1 = 3, $n2 = 3, $n3 = 3, $n4 = 3, $n5 = 9}"
+set a3p9 "{$n0 = ${a3p9o}, $n1 = ${a3p9o}, $n2 = ${a3p9o}, $n3 = ${a3p9o},\
+ $n4 = ${a3p9o}, $n5 = ${a9p9o}}"
+set a9p9 "{$n0 = ${a9p9o}, $n1 = ${a9p9o}, $n2 = ${a9p9o}, $n3 = ${a9p9o},\
+ $n4 = ${a9p9o}, $n5 = ${a9p9o}}"
+set a3p9 "{$n0 = ${a3p9}, $n1 = ${a3p9}, $n2 = ${a3p9}, $n3 = ${a3p9},\
+ $n4 = ${a3p9}, $n5 = ${a9p9}}"
+
+# Convert the output into a regexp.
+set r1p [string_to_regexp $a1p]
+set r1p9 [string_to_regexp $a1p9]
+set r2po [string_to_regexp $a2po]
+set r2p9o [string_to_regexp $a2p9o]
+set r2p [string_to_regexp $a2p]
+set r2p9 [string_to_regexp $a2p9]
+set r3po [string_to_regexp $a3po]
+set r3p9o [string_to_regexp $a3p9o]
+set r3p [string_to_regexp $a3p]
+set r3p9 [string_to_regexp $a3p9]
+
+set rep5 "<repeats 5 times>"
+set rep6 "<repeats 6 times>"
+
+with_test_prefix "repeats=unlimited, elements=unlimited" {
+ # Check the arrays print as expected.
+ gdb_test_no_output "set print repeats unlimited"
+ gdb_test_no_output "set print elements unlimited"
+
+ gdb_test "print array_1d" "${r1p}"
+ gdb_test "print array_1d9" "${r1p9}"
+ gdb_test "print array_2d" "${r2p}"
+ gdb_test "print array_2d9" "${r2p9}"
+ gdb_test "print array_3d" "${r3p}"
+ gdb_test "print array_3d9" "${r3p9}"
+}
+
+with_test_prefix "repeats=4, elements=unlimited" {
+ # Now set the repeat limit.
+ gdb_test_no_output "set print repeats 4"
+ gdb_test_no_output "set print elements unlimited"
+
+ gdb_test "print array_1d" \
+ [string_to_regexp "{$n0 = 1 ${rep5}}"]
+ gdb_test "print array_1d9" \
+ [string_to_regexp "{$n0 = 1 ${rep5}, $n5 = 9}"]
+ gdb_test "print array_2d" \
+ [string_to_regexp "{$n0 = {$n0 = 2 ${rep5}} ${rep5}}"]
+ gdb_test "print array_2d9" \
+ [string_to_regexp "{$n0 = {$n0 = 2 ${rep5}, $n5 = 9} ${rep5},\
+ $n5 = {$n0 = 9 ${rep6}}}"]
+ gdb_test "print array_3d" \
+ [string_to_regexp "{$n0 = {$n0 = {$n0 = 3 ${rep5}} ${rep5}} ${rep5}}"]
+ gdb_test "print array_3d9" \
+ [string_to_regexp "{$n0 = {$n0 = {$n0 = 3 ${rep5}, $n5 = 9} ${rep5},\
+ $n5 = {$n0 = 9 ${rep6}}} ${rep5},\
+ $n5 = {$n0 = {$n0 = 9 ${rep6}} ${rep6}}}"]
+}
+
+with_test_prefix "repeats=unlimited, elements=3" {
+ # Now set the element limit.
+ gdb_test_no_output "set print repeats unlimited"
+ gdb_test_no_output "set print elements 3"
+
+ gdb_test "print array_1d" \
+ [string_to_regexp "{$n0 = 1, $n1 = 1, $n2 = 1...}"]
+ gdb_test "print array_1d9" \
+ [string_to_regexp "{$n0 = 1, $n1 = 1, $n2 = 1...}"]
+ gdb_test "print array_2d" \
+ [string_to_regexp "{$n0 = {$n0 = 2, $n1 = 2, $n2 = 2...},\
+ $n1 = {$n0 = 2, $n1 = 2, $n2 = 2...},\
+ $n2 = {$n0 = 2, $n1 = 2, $n2 = 2...}...}"]
+ gdb_test "print array_2d9" \
+ [string_to_regexp "{$n0 = {$n0 = 2, $n1 = 2, $n2 = 2...},\
+ $n1 = {$n0 = 2, $n1 = 2, $n2 = 2...},\
+ $n2 = {$n0 = 2, $n1 = 2, $n2 = 2...}...}"]
+ gdb_test "print array_3d" \
+ [string_to_regexp "{$n0 = {$n0 = {$n0 = 3, $n1 = 3, $n2 = 3...},\
+ $n1 = {$n0 = 3, $n1 = 3, $n2 = 3...},\
+ $n2 = {$n0 = 3, $n1 = 3, $n2 = 3...}...},\
+ $n1 = {$n0 = {$n0 = 3, $n1 = 3, $n2 = 3...},\
+ $n1 = {$n0 = 3, $n1 = 3, $n2 = 3...},\
+ $n2 = {$n0 = 3, $n1 = 3, $n2 = 3...}...},\
+ $n2 = {$n0 = {$n0 = 3, $n1 = 3, $n2 = 3...},\
+ $n1 = {$n0 = 3, $n1 = 3, $n2 = 3...},\
+ $n2 = {$n0 = 3, $n1 = 3,\
+ $n2 = 3...}...}...}"]
+ gdb_test "print array_3d9" \
+ [string_to_regexp "{$n0 = {$n0 = {$n0 = 3, $n1 = 3, $n2 = 3...},\
+ $n1 = {$n0 = 3, $n1 = 3, $n2 = 3...},\
+ $n2 = {$n0 = 3, $n1 = 3, $n2 = 3...}...},\
+ $n1 = {$n0 = {$n0 = 3, $n1 = 3, $n2 = 3...},\
+ $n1 = {$n0 = 3, $n1 = 3, $n2 = 3...},\
+ $n2 = {$n0 = 3, $n1 = 3, $n2 = 3...}...},\
+ $n2 = {$n0 = {$n0 = 3, $n1 = 3, $n2 = 3...},\
+ $n1 = {$n0 = 3, $n1 = 3, $n2 = 3...},\
+ $n2 = {$n0 = 3, $n1 = 3,\
+ $n2 = 3...}...}...}"]
+}
+
+with_test_prefix "repeats=4, elements=12" {
+ # Now set both limits.
+ gdb_test_no_output "set print repeats 4"
+ gdb_test_no_output "set print elements 12"
+
+ gdb_test "print array_1d" \
+ [string_to_regexp "{$n0 = 1 ${rep5}}"]
+ gdb_test "print array_1d9" \
+ [string_to_regexp "{$n0 = 1 ${rep5}, $n5 = 9}"]
+ gdb_test "print array_2d" \
+ [string_to_regexp "{$n0 = {$n0 = 2 ${rep5}} ${rep5}}"]
+ gdb_test "print array_2d9" \
+ [string_to_regexp "{$n0 = {$n0 = 2 ${rep5}, $n5 = 9} ${rep5},\
+ $n5 = {$n0 = 9 ${rep6}}}"]
+ gdb_test "print array_3d" \
+ [string_to_regexp "{$n0 = {$n0 = {$n0 = 3 ${rep5}} ${rep5}} ${rep5}}"]
+ gdb_test "print array_3d9" \
+ [string_to_regexp "{$n0 = {$n0 = {$n0 = 3 ${rep5}, $n5 = 9} ${rep5},\
+ $n5 = {$n0 = 9 ${rep6}}} ${rep5},\
+ $n5 = {$n0 = {$n0 = 9 ${rep6}} ${rep6}}}"]
+}
diff --git a/gdb/testsuite/gdb.base/array-repeat.c b/gdb/testsuite/gdb.base/array-repeat.c
new file mode 100644
index 00000000000..6682b8c3e30
--- /dev/null
+++ b/gdb/testsuite/gdb.base/array-repeat.c
@@ -0,0 +1,63 @@
+/* Copyright 2022 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#include <stdio.h>
+
+int
+main (void)
+{
+ int array_1d[5];
+ int array_1d9[6];
+ int array_2d[5][5];
+ int array_2d9[6][6];
+ int array_3d[5][5][5];
+ int array_3d9[6][6][6];
+ int i;
+
+ for (i = 0; i < sizeof (array_1d) / sizeof (int); i++)
+ *(array_1d + i) = 1;
+ for (i = 0; i < sizeof (array_1d9) / sizeof (int); i++)
+ *(array_1d9 + i) = i % 6 == 5 ? 9 : 1;
+ for (i = 0; i < sizeof (array_2d) / sizeof (int); i++)
+ *(*array_2d + i) = 2;
+ for (i = 0; i < sizeof (array_2d9) / sizeof (int); i++)
+ *(*array_2d9 + i) = i / 6 == 5 || i % 6 == 5 ? 9 : 2;
+ for (i = 0; i < sizeof (array_3d) / sizeof (int); i++)
+ *(**array_3d + i) = 3;
+ for (i = 0; i < sizeof (array_3d9) / sizeof (int); i++)
+ *(**array_3d9 + i) = i / 6 / 6 == 5 || i / 6 % 6 == 5 || i % 6 == 5 ? 9 : 3;
+
+ printf("\n"); /* Break here */
+ for (i = 0; i < sizeof (array_1d) / sizeof (int); i++)
+ printf(" %d", *(array_1d + i));
+ printf("\n");
+ for (i = 0; i < sizeof (array_1d9) / sizeof (int); i++)
+ printf(" %d", *(array_1d9 + i));
+ printf("\n");
+ for (i = 0; i < sizeof (array_2d) / sizeof (int); i++)
+ printf(" %d", *(*array_2d + i));
+ printf("\n");
+ for (i = 0; i < sizeof (array_2d9) / sizeof (int); i++)
+ printf(" %d", *(*array_2d9 + i));
+ printf("\n");
+ for (i = 0; i < sizeof (array_3d) / sizeof (int); i++)
+ printf(" %d", *(**array_3d + i));
+ printf("\n");
+ for (i = 0; i < sizeof (array_3d9) / sizeof (int); i++)
+ printf(" %d", *(**array_3d9 + i));
+ printf("\n");
+
+ return 0;
+}
diff --git a/gdb/testsuite/gdb.base/array-repeat.exp b/gdb/testsuite/gdb.base/array-repeat.exp
new file mode 100644
index 00000000000..685d520109e
--- /dev/null
+++ b/gdb/testsuite/gdb.base/array-repeat.exp
@@ -0,0 +1,20 @@
+# Copyright 2022 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Test the detection and printing of repeated elements in C arrays.
+
+set lang c
+
+source $srcdir/$subdir/array-repeat.exp.tcl
diff --git a/gdb/testsuite/gdb.base/array-repeat.exp.tcl b/gdb/testsuite/gdb.base/array-repeat.exp.tcl
new file mode 100644
index 00000000000..2a8c0887283
--- /dev/null
+++ b/gdb/testsuite/gdb.base/array-repeat.exp.tcl
@@ -0,0 +1,138 @@
+# Copyright 2022 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Test the detection and printing of repeated elements in C/C++ arrays.
+
+standard_testfile ${srcdir}/gdb.base/array-repeat.c
+
+if {[prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \
+ [list debug ${lang}]]} {
+ return -1
+}
+
+if {![runto_main]} {
+ perror "Could not run to main."
+ continue
+}
+
+gdb_breakpoint [gdb_get_line_number "Break here"]
+gdb_continue_to_breakpoint "Break here"
+
+# Build up the expected output for each array.
+set a9p9o "{9, 9, 9, 9, 9, 9}"
+set a1p "{1, 1, 1, 1, 1}"
+set a1p9 "{1, 1, 1, 1, 1, 9}"
+set a2po "{2, 2, 2, 2, 2}"
+set a2p "{${a2po}, ${a2po}, ${a2po}, ${a2po}, ${a2po}}"
+set a2p9o "{2, 2, 2, 2, 2, 9}"
+set a2p9 "{${a2p9o}, ${a2p9o}, ${a2p9o}, ${a2p9o}, ${a2p9o}, ${a9p9o}}"
+set a3po "{3, 3, 3, 3, 3}"
+set a3p "{${a3po}, ${a3po}, ${a3po}, ${a3po}, ${a3po}}"
+set a3p "{${a3p}, ${a3p}, ${a3p}, ${a3p}, ${a3p}}"
+set a3p9o "{3, 3, 3, 3, 3, 9}"
+set a3p9 "{${a3p9o}, ${a3p9o}, ${a3p9o}, ${a3p9o}, ${a3p9o}, ${a9p9o}}"
+set a9p9 "{${a9p9o}, ${a9p9o}, ${a9p9o}, ${a9p9o}, ${a9p9o}, ${a9p9o}}"
+set a3p9 "{${a3p9}, ${a3p9}, ${a3p9}, ${a3p9}, ${a3p9}, ${a9p9}}"
+
+# Convert the output into a regexp.
+set r1p [string_to_regexp $a1p]
+set r1p9 [string_to_regexp $a1p9]
+set r2po [string_to_regexp $a2po]
+set r2p9o [string_to_regexp $a2p9o]
+set r2p [string_to_regexp $a2p]
+set r2p9 [string_to_regexp $a2p9]
+set r3po [string_to_regexp $a3po]
+set r3p9o [string_to_regexp $a3p9o]
+set r3p [string_to_regexp $a3p]
+set r3p9 [string_to_regexp $a3p9]
+
+set rep5 "<repeats 5 times>"
+set rep6 "<repeats 6 times>"
+
+with_test_prefix "repeats=unlimited, elements=unlimited" {
+ # Check the arrays print as expected.
+ gdb_test_no_output "set print repeats unlimited"
+ gdb_test_no_output "set print elements unlimited"
+
+ gdb_test "print array_1d" "${r1p}"
+ gdb_test "print array_1d9" "${r1p9}"
+ gdb_test "print array_2d" "${r2p}"
+ gdb_test "print array_2d9" "${r2p9}"
+ gdb_test "print array_3d" "${r3p}"
+ gdb_test "print array_3d9" "${r3p9}"
+}
+
+with_test_prefix "repeats=4, elements=unlimited" {
+ # Now set the repeat limit.
+ gdb_test_no_output "set print repeats 4"
+ gdb_test_no_output "set print elements unlimited"
+
+ gdb_test "print array_1d" \
+ [string_to_regexp "{1 ${rep5}}"]
+ gdb_test "print array_1d9" \
+ [string_to_regexp "{1 ${rep5}, 9}"]
+ gdb_test "print array_2d" \
+ [string_to_regexp "{{2 ${rep5}} ${rep5}}"]
+ gdb_test "print array_2d9" \
+ [string_to_regexp "{{2 ${rep5}, 9} ${rep5}, {9 ${rep6}}}"]
+ gdb_test "print array_3d" \
+ [string_to_regexp "{{{3 ${rep5}} ${rep5}} ${rep5}}"]
+ gdb_test "print array_3d9" \
+ [string_to_regexp "{{{3 ${rep5}, 9} ${rep5}, {9 ${rep6}}} ${rep5},\
+ {{9 ${rep6}} ${rep6}}}"]
+}
+
+with_test_prefix "repeats=unlimited, elements=3" {
+ # Now set the element limit.
+ gdb_test_no_output "set print repeats unlimited"
+ gdb_test_no_output "set print elements 3"
+
+ gdb_test "print array_1d" \
+ [string_to_regexp "{1, 1, 1...}"]
+ gdb_test "print array_1d9" \
+ [string_to_regexp "{1, 1, 1...}"]
+ gdb_test "print array_2d" \
+ [string_to_regexp "{{2, 2, 2...}, {2, 2, 2...}, {2, 2, 2...}...}"]
+ gdb_test "print array_2d9" \
+ [string_to_regexp "{{2, 2, 2...}, {2, 2, 2...}, {2, 2, 2...}...}"]
+ gdb_test "print array_3d" \
+ [string_to_regexp "{{{3, 3, 3...}, {3, 3, 3...}, {3, 3, 3...}...},\
+ {{3, 3, 3...}, {3, 3, 3...}, {3, 3, 3...}...},\
+ {{3, 3, 3...}, {3, 3, 3...}, {3, 3, 3...}...}...}"]
+ gdb_test "print array_3d9" \
+ [string_to_regexp "{{{3, 3, 3...}, {3, 3, 3...}, {3, 3, 3...}...},\
+ {{3, 3, 3...}, {3, 3, 3...}, {3, 3, 3...}...},\
+ {{3, 3, 3...}, {3, 3, 3...}, {3, 3, 3...}...}...}"]
+}
+
+with_test_prefix "repeats=4, elements=12" {
+ # Now set both limits.
+ gdb_test_no_output "set print repeats 4"
+ gdb_test_no_output "set print elements 12"
+
+ gdb_test "print array_1d" \
+ [string_to_regexp "{1 ${rep5}}"]
+ gdb_test "print array_1d9" \
+ [string_to_regexp "{1 ${rep5}, 9}"]
+ gdb_test "print array_2d" \
+ [string_to_regexp "{{2 ${rep5}} ${rep5}}"]
+ gdb_test "print array_2d9" \
+ [string_to_regexp "{{2 ${rep5}, 9} ${rep5}, {9 ${rep6}}}"]
+ gdb_test "print array_3d" \
+ [string_to_regexp "{{{3 ${rep5}} ${rep5}} ${rep5}}"]
+ gdb_test "print array_3d9" \
+ [string_to_regexp "{{{3 ${rep5}, 9} ${rep5}, {9 ${rep6}}} ${rep5},\
+ {{9 ${rep6}} ${rep6}}}"]
+}
diff --git a/gdb/testsuite/gdb.base/attach-pie-misread.exp b/gdb/testsuite/gdb.base/attach-pie-misread.exp
index 78370a81ea0..3bbbbf826a5 100644
--- a/gdb/testsuite/gdb.base/attach-pie-misread.exp
+++ b/gdb/testsuite/gdb.base/attach-pie-misread.exp
@@ -96,10 +96,12 @@ if {$result == 0} {
fail $test
}
-set prelink_args [build_executable_own_libs ${test}.exp $executable $srcfile \
- [list pie "additional_flags=-DGEN=\"$genfile\""]]
-if {$prelink_args == ""} {
- return -1
+with_test_prefix "rebuild with DGEN defined" {
+ set prelink_args [build_executable_own_libs ${testfile}.exp $executable $srcfile \
+ [list pie "additional_flags=-DGEN=\"$genfile\""]]
+ if {$prelink_args == ""} {
+ return -1
+ }
}
# x86_64 file has 25MB, no need to keep it.
diff --git a/gdb/testsuite/gdb.base/attach-pie-noexec.exp b/gdb/testsuite/gdb.base/attach-pie-noexec.exp
index 471282466df..33238db834d 100644
--- a/gdb/testsuite/gdb.base/attach-pie-noexec.exp
+++ b/gdb/testsuite/gdb.base/attach-pie-noexec.exp
@@ -59,7 +59,10 @@ set testpid [spawn_id_get_pid $test_spawn_id]
gdb_start
file delete -- $binfile
-gdb_test "attach $testpid" "Attaching to process $testpid\r\n.*" "attach"
+if { ![gdb_attach $testpid] } {
+ kill_wait_spawned_process $test_spawn_id
+ return
+}
gdb_test "set architecture $arch" "The target architecture is set to \"$arch\"\\."
gdb_test "info shared" "From\[ \t\]+To\[ \t\]+Syms Read\[ \t\]+Shared Object Library\r\n0x.*"
diff --git a/gdb/testsuite/gdb.base/attach.exp b/gdb/testsuite/gdb.base/attach.exp
index d01060aba53..7b661e99a1c 100644
--- a/gdb/testsuite/gdb.base/attach.exp
+++ b/gdb/testsuite/gdb.base/attach.exp
@@ -467,14 +467,9 @@ proc_with_prefix do_command_attach_tests {} {
gdb_exit
- set res [gdb_spawn_with_cmdline_opts \
- "-quiet -iex \"set height 0\" -iex \"set width 0\" --pid=$testpid"]
- set test "starting with --pid"
- gdb_test_multiple "" $test {
- -re "Reading symbols from.*$gdb_prompt $" {
- pass "$test"
- }
- }
+ # gdb_spawn_attach_cmdline records test results. No need to explicitly
+ # call pass/fail here.
+ gdb_spawn_attach_cmdline $testpid
# Get rid of the process
kill_wait_spawned_process $test_spawn_id
diff --git a/gdb/testsuite/gdb.base/bitshift.exp b/gdb/testsuite/gdb.base/bitshift.exp
new file mode 100644
index 00000000000..03f18b9ebe5
--- /dev/null
+++ b/gdb/testsuite/gdb.base/bitshift.exp
@@ -0,0 +1,368 @@
+# Copyright 2022 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Test left and right bit shifting, in all languages that have such
+# operator.
+
+clean_restart
+
+# Test a print command that prints out RESULT_RE. If WARNING_OR_ERROR
+# is non-empty, it is expected that for languages other than Go, GDB
+# prints this warning before the print result. For Go, this is an
+# expected error. If WARNING_OR_ERROR is empty, it is expected that
+# GDB prints no text other than the print result.
+proc test_shift {lang cmd result_re {warning_or_error ""}} {
+ set cmd_re [string_to_regexp $cmd]
+
+ if {$lang == "go"} {
+ if {$warning_or_error != ""} {
+ set error_re "[string_to_regexp $warning_or_error]"
+ gdb_test_multiple $cmd "" {
+ -re -wrap "^$cmd_re\r\n$error_re" {
+ pass $gdb_test_name
+ }
+ }
+ } else {
+ gdb_test_multiple $cmd "" {
+ -re -wrap "^$cmd_re\r\n\\$$::decimal$result_re" {
+ pass $gdb_test_name
+ }
+ }
+ }
+ } else {
+ if {$warning_or_error != ""} {
+ set warning_re "warning: [string_to_regexp $warning_or_error]\r\n"
+ } else {
+ set warning_re ""
+ }
+
+ gdb_test_multiple $cmd "" {
+ -re -wrap "^$cmd_re\r\n$warning_re\\$$::decimal$result_re" {
+ pass $gdb_test_name
+ }
+ }
+ }
+}
+
+# Some warnings/errors GDB outputs.
+set rs_negative_shift_count "right shift count is negative"
+set rs_too_large_shift_count "right shift count >= width of type"
+set ls_negative_shift_count "left shift count is negative"
+set ls_too_large_shift_count "left shift count >= width of type"
+
+# Test a left shift that results in a too-large shift count warning in
+# all languages except Go.
+proc test_lshift_tl {lang cmd result_re} {
+ if {$lang != "go"} {
+ test_shift $lang $cmd $result_re $::ls_too_large_shift_count
+ } else {
+ test_shift $lang $cmd $result_re
+ }
+}
+
+# Test a right shift that results in a too-large shift count warning
+# in all languages except Go.
+proc test_rshift_tl {lang cmd result_re} {
+ if {$lang != "go"} {
+ test_shift $lang $cmd $result_re $::rs_too_large_shift_count
+ } else {
+ test_shift $lang $cmd $result_re
+ }
+}
+
+# Return VAL, an integer value converted/cast to the right type for
+# LANG. SIGNED indicates whether the type should be signed or
+# unsigned. BITS indicates the bit width of the type. E.g., signed=0
+# and bits=32 results in:
+# Go => "uint($VAL)"
+# D => "cast(uint) $VAL"
+# Rust => "$VAL as i32"
+# C/C++/others => "(unsigned int) $VAL"
+proc make_val_cast {lang signed bits val} {
+ if {$lang == "go"} {
+ if {$signed} {
+ set sign_prefix ""
+ } else {
+ set sign_prefix "u"
+ }
+ return "${sign_prefix}int${bits}($val)"
+ } elseif {$lang == "d"} {
+ if {$signed} {
+ set sign_prefix ""
+ } else {
+ set sign_prefix "u"
+ }
+ if {$bits == 8} {
+ set type "byte"
+ } elseif {$bits == 16} {
+ set type "short"
+ } elseif {$bits == 32} {
+ set type "int"
+ } elseif {$bits == 64} {
+ set type "long"
+ } else {
+ error "$lang: unsupported bits"
+ }
+ return "cast(${sign_prefix}$type) $val"
+ } elseif {$lang == "rust"} {
+ if {$signed} {
+ set sign_prefix "i"
+ } else {
+ set sign_prefix "u"
+ }
+ return "$val as ${sign_prefix}$bits"
+ } else {
+ # C-like cast.
+ if {$signed} {
+ set sign_prefix ""
+ } else {
+ set sign_prefix "un"
+ }
+ if {$bits == 8} {
+ set type "char"
+ } elseif {$bits == 16} {
+ set type "short"
+ } elseif {$bits == 32} {
+ set type "int"
+ } elseif {$bits == 64} {
+ if {$lang == "opencl"} {
+ set type "long"
+ } else {
+ set type "long long"
+ }
+ } else {
+ error "$lang: unsupported bits"
+ }
+ return "(${sign_prefix}signed $type) $val"
+ }
+}
+
+# Generate make_int8 ... make_uint64 convenience procs, wrappers
+# around make_val_cast.
+foreach signed {0 1} {
+ if {$signed} {
+ set sign_prefix ""
+ } else {
+ set sign_prefix "u"
+ }
+ foreach bits {8 16 32 64} {
+ proc make_${sign_prefix}int${bits} {lang val} \
+ "make_val_cast \$lang $signed $bits \$val"
+ }
+}
+
+# Test bitshifting, particularly with negative shift counts and
+# too-large-for-type shift counts. Exercises all C-like-ish
+# languages.
+proc test_shifts {} {
+ global ls_negative_shift_count rs_negative_shift_count
+
+ # Extract the set of all supported languages. We try all except
+ # languages we know wouldn't work. We do this instead of
+ # hardcoding the set of languages that we know work, so that if
+ # GDB gains a new language, it is automatically exercised.
+ set supported_langs [get_set_option_choices "set language"]
+
+ foreach_with_prefix lang $supported_langs {
+ set skip_langs {
+ "unknown" "ada" "modula-2" "pascal" "fortran"
+ }
+ if {[lsearch -exact $skip_langs $lang] >= 0} {
+ continue
+ }
+
+ gdb_test_no_output "set language $lang"
+
+ # Make sure a signed left shift that overflows, i.e., whose
+ # result isn't representable in the signed type of the lhs,
+ # which is actually undefined, doesn't crash GDB when is it
+ # built with UBSan.
+
+ with_test_prefix "lsh overflow" {
+ test_shift $lang "print /x 0x0fffffffffffffff << 8" \
+ " = 0xffffffffffffff00"
+ test_shift $lang "print /x 0x0fffffff << 8" \
+ " = 0xffffff00"
+
+ # Make sure the result is still signed when the lhs was
+ # signed.
+ test_shift $lang "print 0x0fffffffffffffff << 8" " = -256"
+ test_shift $lang "print 0x0fffffff << 8" " = -256"
+ }
+
+ # 8-bit and 16-bit are promoted to int.
+ with_test_prefix "8-bit, promoted" {
+ foreach lhs \
+ [list \
+ [make_int8 $lang 0x0f] \
+ [make_uint8 $lang 0x0f]] \
+ {
+ test_shift $lang "print /x $lhs << 8" " = 0xf00"
+ test_shift $lang "print $lhs << 8" " = 3840"
+ }
+ }
+ with_test_prefix "16-bit, promoted" {
+ foreach lhs \
+ [list \
+ [make_int16 $lang 0x0fff] \
+ [make_uint16 $lang 0x0fff]] \
+ {
+ test_shift $lang "print /x $lhs << 8" " = 0xfff00"
+ test_shift $lang "print $lhs << 8" " = 1048320"
+ }
+ }
+
+ # Similarly, test shifting with both negative and too-large
+ # rhs. Both cases are undefined, but GDB lets them go through
+ # anyhow, similarly to how compilers don't error out. Try
+ # both signed and unsigned lhs.
+
+ # 8-bit lhs, signed and unsigned. These get promoted to
+ # 32-bit int.
+ with_test_prefix "8-bit, invalid" {
+ foreach lhs \
+ [list \
+ [make_int8 $lang 0x7f] \
+ [make_uint8 $lang 0xff]] \
+ {
+ test_shift $lang "print $lhs << -1" " = 0" \
+ $ls_negative_shift_count
+ test_shift $lang "print $lhs >> -1" " = 0" \
+ $rs_negative_shift_count
+
+ test_shift $lang "print/x $lhs << 8" " = 0x(7|f)f00"
+ test_shift $lang "print/x $lhs >> 8" " = 0x0"
+
+ test_lshift_tl $lang "print $lhs << 32" " = 0"
+ test_rshift_tl $lang "print $lhs >> 32" " = 0"
+ test_lshift_tl $lang "print $lhs << 33" " = 0"
+ test_rshift_tl $lang "print $lhs >> 33" " = 0"
+ }
+ }
+
+ # 16-bit lhs, signed and unsigned. These get promoted to 32-bit int.
+ with_test_prefix "16-bit, invalid" {
+ foreach {lhs res} \
+ [list \
+ [make_int16 $lang 0x7fff] 0x7fff \
+ [make_uint16 $lang 0xffff] 0xffff] \
+ {
+ test_shift $lang "print $lhs << -1" " = 0" \
+ $ls_negative_shift_count
+ test_shift $lang "print $lhs >> -1" " = 0" \
+ $rs_negative_shift_count
+
+ # Confirm shifting by 0 doesn't warn.
+ test_shift $lang "print/x $lhs << 0" " = $res"
+ test_shift $lang "print/x $lhs >> 0" " = $res"
+
+ # These don't overflow due to promotion.
+ test_shift $lang "print/x $lhs << 16" " = 0x(7|f)fff0000"
+ test_shift $lang "print/x $lhs >> 16" " = 0x0"
+
+ test_lshift_tl $lang "print $lhs << 32" " = 0"
+ test_rshift_tl $lang "print $lhs >> 32" " = 0"
+ test_lshift_tl $lang "print $lhs << 33" " = 0"
+ test_rshift_tl $lang "print $lhs >> 33" " = 0"
+ }
+ }
+
+ # 32-bit lhs, signed and unsigned.
+ with_test_prefix "32-bit, invalid" {
+ foreach {lhs res} \
+ [list \
+ [make_int32 $lang 0x7fffffff] 0x7fffffff \
+ [make_uint32 $lang 0xffffffff] 0xffffffff] \
+ {
+ test_shift $lang "print $lhs << -1" " = 0" \
+ $ls_negative_shift_count
+ test_shift $lang "print $lhs >> -1" " = 0" \
+ $rs_negative_shift_count
+
+ # Confirm shifting by 0 doesn't warn.
+ test_shift $lang "print/x $lhs << 0" " = $res"
+ test_shift $lang "print/x $lhs >> 0" " = $res"
+
+ test_lshift_tl $lang "print $lhs << 32" " = 0"
+ test_rshift_tl $lang "print $lhs >> 32" " = 0"
+
+ test_lshift_tl $lang "print $lhs << 33" " = 0"
+ test_rshift_tl $lang "print $lhs >> 33" " = 0"
+ }
+ }
+
+ # 64-bit lhs, signed and unsigned.
+ with_test_prefix "64-bit, invalid" {
+ foreach {lhs res} \
+ [list \
+ [make_int64 $lang 0x7fffffffffffffff] \
+ 0x7fffffffffffffff \
+ \
+ [make_uint64 $lang 0xffffffffffffffff] \
+ 0xffffffffffffffff] \
+ {
+ test_shift $lang "print $lhs << -1" " = 0" \
+ $ls_negative_shift_count
+ test_shift $lang "print $lhs >> -1" " = 0" \
+ $rs_negative_shift_count
+
+ # Confirm shifting by 0 doesn't warn.
+ test_shift $lang "print/x $lhs << 0" " = $res"
+ test_shift $lang "print/x $lhs >> 0" " = $res"
+
+ test_lshift_tl $lang "print $lhs << 64" " = 0"
+ test_rshift_tl $lang "print $lhs >> 64" " = 0"
+
+ test_lshift_tl $lang "print $lhs << 65" " = 0"
+ test_rshift_tl $lang "print $lhs >> 65" " = 0"
+ }
+ }
+
+ # Right shift a negative number by a negative amount.
+ with_test_prefix "neg lhs/rhs" {
+ test_shift $lang "print -1 >> -1" " = -1" $rs_negative_shift_count
+ test_shift $lang "print -4 >> -2" " = -1" $rs_negative_shift_count
+ }
+
+ # Check right shifting a negative value. For C++, this is
+ # implementation-defined, up until C++20. In most
+ # implementations, this performs an arithmetic right shift, so
+ # that the result remains negative. Currently, GDB does
+ # whatever the host's compiler does. If that turns out wrong
+ # for some host/target, then GDB should be taught to ask the
+ # target gdbarch what to do.
+ with_test_prefix "rsh neg lhs" {
+ test_shift $lang "print -1 >> 0" " = -1"
+ test_shift $lang "print -1 >> 1" " = -1"
+ test_shift $lang "print -8 >> 1" " = -4"
+ test_shift $lang "print [make_int64 $lang -8] >> 1" " = -4"
+ }
+
+ # Make sure an unsigned 64-bit value with high bit set isn't
+ # confused for a negative shift count in the warning messages.
+ with_test_prefix "max-uint64" {
+ test_lshift_tl $lang \
+ "print 1 << [make_uint64 $lang 0xffffffffffffffff]" " = 0"
+ test_rshift_tl $lang \
+ "print 1 >> [make_uint64 $lang 0xffffffffffffffff]" " = 0"
+ test_lshift_tl $lang \
+ "print -1 << [make_uint64 $lang 0xffffffffffffffff]" " = 0"
+ test_rshift_tl $lang \
+ "print -1 >> [make_uint64 $lang 0xffffffffffffffff]" " = -1"
+ }
+ }
+}
+
+test_shifts
diff --git a/gdb/testsuite/gdb.base/break-interp.exp b/gdb/testsuite/gdb.base/break-interp.exp
index 87778679274..be1a212ec72 100644
--- a/gdb/testsuite/gdb.base/break-interp.exp
+++ b/gdb/testsuite/gdb.base/break-interp.exp
@@ -437,7 +437,7 @@ proc test_ld {file ifmain trynosym displacement} {
} else {
set pc $expect_out(1,string)
regsub "0x0*" $pc "" pc
- gdb_test "p /x 0x$pc" ".*"
+ gdb_test "p /x 0x$pc" ".*" "p /x \$pc"
gdb_test_multiple "info probes stap rtld" $gdb_test_name {
-re -wrap "(?:init_start|init_complete) +0x0*$pc .*" {
pass $gdb_test_name
diff --git a/gdb/testsuite/gdb.base/break.exp b/gdb/testsuite/gdb.base/break.exp
index 39a8f32e888..2c939ada14a 100644
--- a/gdb/testsuite/gdb.base/break.exp
+++ b/gdb/testsuite/gdb.base/break.exp
@@ -520,6 +520,11 @@ gdb_test "break" \
"Note: breakpoints \[0-9\]*, \[0-9\]* and \[0-9\]* also set at .*Breakpoint \[0-9\]*.*" \
"break on default location, 4th time"
+# Check setting a breakpoint at the default location with a condition attached.
+gdb_test "break if (1)" \
+ "Note: breakpoints \[0-9\]*, \[0-9\]*, \[0-9\]* and \[0-9\]* also set at .*Breakpoint \[0-9\]*.*" \
+ "break on the default location, 5th time, but with a condition"
+
# Verify that a "silent" breakpoint can be set, and that GDB is indeed
# "silent" about its triggering.
#
diff --git a/gdb/testsuite/gdb.base/cached-source-file.exp b/gdb/testsuite/gdb.base/cached-source-file.exp
index d4e64f32120..75a13378691 100644
--- a/gdb/testsuite/gdb.base/cached-source-file.exp
+++ b/gdb/testsuite/gdb.base/cached-source-file.exp
@@ -100,3 +100,41 @@ gdb_test "run" $re "rerun program" $q y
# changed for GDB.
gdb_test "list" "${bp_line}\[ \t\]+printf \\(\"foo\\\\n\"\\); /\\\* new-marker \\\*/.*" \
"verify that the source code is properly reloaded"
+
+# Modify the source file again. As before, this only works locally
+# because of the TCL commands.
+set bkpsrc [standard_output_file $testfile].c.bkp
+set bkpsrcfd [open $bkpsrc w]
+set srcfd [open $srcfile r]
+
+while { [gets $srcfd line] != -1 } {
+ if { [string first "new-marker" $line] != -1 } {
+ # Modify the printf line that we added previously.
+ puts $bkpsrcfd " printf (\"foo\\n\"); /* new-marker updated */"
+ } else {
+ puts $bkpsrcfd $line
+ }
+}
+
+close $bkpsrcfd
+close $srcfd
+file rename -force -- $bkpsrc $srcfile
+
+# As before, delay so that at least one second has passed. GDB still
+# will not spot that the source file has changed, as GDB doesn't do a
+# time check unless the binary has also changed, this delay just
+# allows us to confirm this behaviour.
+sleep 1
+
+# List the printf line again, we should not see the file changes yet
+# as the binary is unchanged, so the cached contents will still be
+# used.
+gdb_test "list ${bp_line}" "${bp_line}\[ \t\]+printf \\(\"foo\\\\n\"\\); /\\\* new-marker \\\*/.*" \
+ "verify that the source code change is not seen yet"
+
+gdb_test "maint flush source-cache" "Source cache flushed\\."
+
+# List the printf line again. After the cache flush GDB will re-read
+# the source file and we should now see the changes.
+gdb_test "list ${bp_line}" "${bp_line}\[ \t\]+printf \\(\"foo\\\\n\"\\); /\\\* new-marker updated \\\*/.*" \
+ "verify that the updated source code change is not seen"
diff --git a/gdb/testsuite/gdb.base/charset.c b/gdb/testsuite/gdb.base/charset.c
index ed9387b926d..30c3fb42892 100644
--- a/gdb/testsuite/gdb.base/charset.c
+++ b/gdb/testsuite/gdb.base/charset.c
@@ -183,7 +183,7 @@ int main ()
47, 22, 12,
37, 13, 5,
11, 74, 17);
- /* In EBCDIC, the upper-case letters are broken into three separate runs. */
+ /* In IBM1047, the upper-case letters are broken into three separate runs. */
fill_run (ibm1047_string, 7, 9, 193);
fill_run (ibm1047_string, 16, 9, 209);
fill_run (ibm1047_string, 25, 8, 226);
diff --git a/gdb/testsuite/gdb.base/clear_non_user_bp.exp b/gdb/testsuite/gdb.base/clear_non_user_bp.exp
new file mode 100644
index 00000000000..26d7a31fa47
--- /dev/null
+++ b/gdb/testsuite/gdb.base/clear_non_user_bp.exp
@@ -0,0 +1,94 @@
+# Copyright 2022 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Regression test for PR gdb/7161. Test that GDB cannot delete non-user
+# breakpoints with clear command.
+
+# get_maint_bp_addr num
+#
+# Purpose:
+# Get address of the specified internal breakpoint when using command
+# "maint info breakpoints $num".
+#
+# Parameter:
+# The parameter "num" indicates the number of the internal breakpoint
+# to get. Note that this parameter must be a negative number.
+# E.g., -1 means that we're gonna get the first internal breakpoint.
+#
+# Return:
+# Internal breakpoint address.
+#
+proc get_maint_bp_addr { num } {
+ gdb_test_multiple "maint info break $num" "find address of internal bp $num" {
+ -re -wrap ".*(0x\[0-9a-f\]+).*" {
+ return $expect_out(1,string)
+ }
+ }
+ return ""
+}
+
+# get_first_maint_bp_num
+#
+# Purpose:
+# Get the first number of all internal breakpoints when using command
+# "maint info breakpoints".
+#
+# Parameter:
+# None.
+#
+# Return:
+# Internal breakpoint number, which is negative.
+#
+proc get_first_maint_bp_num { } {
+ gdb_test_multiple "maint info break" "find first internal bp num" {
+ -re -wrap "(-\[0-9\]).*" {
+ return $expect_out(1,string)
+ }
+ }
+ return ""
+}
+
+standard_testfile .c
+
+# This testcase just needs a "Hello world" source file, reuse
+# gdb.base/main.c instead of adding a new one.
+if { [gdb_compile "${srcdir}/${subdir}/main.c" "${binfile}" executable {debug}] != "" } {
+ untested "failed to compile"
+ return -1
+}
+
+# Start with a fresh gdb.
+clean_restart ${binfile}
+
+if ![runto_main] then {
+ return 0
+}
+
+set bp_num [get_first_maint_bp_num]
+set bp_addr [get_maint_bp_addr $bp_num]
+
+gdb_test "maint info break $bp_num" \
+ "$bp_num.*$bp_addr.*" \
+ "maint info breakpoint \$bp_num"
+
+gdb_test "clear *$bp_addr" \
+ "No breakpoint at \\*$bp_addr." \
+ "clear internal breakpoint"
+
+# Check again, make sure that GDB really didn't delete the internal breakpoint.
+gdb_test "maint info break $bp_num" \
+ "$bp_num.*$bp_addr.*" \
+ "maint info breakpoint \$bp_num after clear"
+
diff --git a/gdb/testsuite/gdb.base/cli-suppress-notification.c b/gdb/testsuite/gdb.base/cli-suppress-notification.c
new file mode 100644
index 00000000000..243dbc9c70a
--- /dev/null
+++ b/gdb/testsuite/gdb.base/cli-suppress-notification.c
@@ -0,0 +1,26 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+ Copyright 2020-2022 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+static int global = 0;
+
+int
+main ()
+{
+ global++;
+ global++;
+ return 0;
+}
diff --git a/gdb/testsuite/gdb.base/cli-suppress-notification.exp b/gdb/testsuite/gdb.base/cli-suppress-notification.exp
new file mode 100644
index 00000000000..1e4cc9869e4
--- /dev/null
+++ b/gdb/testsuite/gdb.base/cli-suppress-notification.exp
@@ -0,0 +1,39 @@
+# Copyright 2020-2022 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Test the set/show suppress-cli-notifications command.
+
+standard_testfile
+
+if {[prepare_for_testing "failed to prepare" ${binfile} ${srcfile}]} {
+ return
+}
+
+if {![runto_main]} {
+ return
+}
+
+gdb_test "inferior 1" ".*Switching to inferior 1 .* to thread 1 .*" \
+ "inferior switch is not suppressed"
+
+gdb_test_no_output "set suppress-cli-notifications on"
+gdb_test_no_output "inferior 1" "inferior switch is suppressed"
+gdb_test_no_output "next" "stepping is suppressed"
+
+# Now check that suppression can be turned back off.
+gdb_test_no_output "set suppress-cli-notifications off"
+gdb_test "inferior 1" ".*Switching to inferior 1 .* to thread 1 .*" \
+ "inferior switch is not suppressed again"
+gdb_test "next" "return 0;" "stepping is not suppressed"
diff --git a/gdb/testsuite/gdb.base/completion.exp b/gdb/testsuite/gdb.base/completion.exp
index 34a16af1491..0c58a1ab6b7 100644
--- a/gdb/testsuite/gdb.base/completion.exp
+++ b/gdb/testsuite/gdb.base/completion.exp
@@ -675,10 +675,9 @@ gdb_test "complete whatis &values\[0\]->z" \
# ${srcdir} may be a relative path. We want to make sure we end up
# in the right directory - so make sure we know where it is.
-set mydir [pwd]
-cd ${srcdir}
-set fullsrcdir [pwd]
-cd ${mydir}
+with_cwd $srcdir {
+ set fullsrcdir [pwd]
+}
# If the directory name contains a '+' we must escape it, adding a backslash.
# If not, the test below will fail because it will interpret the '+' as a
diff --git a/gdb/testsuite/gdb.base/dbx.exp b/gdb/testsuite/gdb.base/dbx.exp
deleted file mode 100644
index a6f975c4e4d..00000000000
--- a/gdb/testsuite/gdb.base/dbx.exp
+++ /dev/null
@@ -1,308 +0,0 @@
-# Copyright 1998-2022 Free Software Foundation, Inc.
-
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>. */
-
-
-standard_testfile average.c sum.c
-
-if {[build_executable $testfile.exp $testfile \
- [list $srcfile $srcfile2] debug] == -1} {
- untested "failed to compile"
- return -1
-}
-
-#
-# start gdb -- start gdb running, default procedure
-#
-proc dbx_gdb_start { } {
- global prompt
- global timeout
- global gdb_spawn_id
-
- save_vars { GDBFLAGS } {
- append GDBFLAGS " -dbx"
-
- set res [gdb_spawn]
- if { $res != 0} {
- return $res
- }
- }
-
- set oldtimeout $timeout
- set timeout [expr "$timeout + 60"]
- gdb_expect {
- -re ".*\r\n$gdb_prompt $" {
- verbose "GDB initialized."
- }
- -re "$prompt $" {
- perror "GDB never initialized."
- unset gdb_spawn_id
- return -1
- }
- timeout {
- perror "(timeout) GDB never initialized."
- unset gdb_spawn_id
- return -1
- }
- }
- set timeout $oldtimeout
- # force the height to "unlimited", so no pagers get used
- send_gdb "set height 0\n"
- gdb_expect {
- -re ".*$prompt $" {
- verbose "Setting height to 0." 2
- }
- timeout {
- warning "Couldn't set the height to 0."
- }
- }
- # force the width to "unlimited", so no wraparound occurs
- send_gdb "set width 0\n"
- gdb_expect {
- -re ".*$prompt $" {
- verbose "Setting width to 0." 2
- }
- timeout {
- warning "Couldn't set the width to 0."
- }
- }
-}
-
-
-proc dbx_reinitialize_dir { subdir } {
- global gdb_prompt
-
- send_gdb "use\n"
- gdb_expect {
- -re "Reinitialize source path to empty.*y or n. " {
- send_gdb "y\n"
- gdb_expect {
- -re "Source directories searched.*$gdb_prompt $" {
- send_gdb "use $subdir\n"
- gdb_expect {
- -re "Source directories searched.*$gdb_prompt $" {
- verbose "Dir set to $subdir"
- }
- -re ".*$gdb_prompt $" {
- perror "Dir \"$subdir\" failed."
- }
- }
- }
- -re ".*$gdb_prompt $" {
- perror "Dir \"$subdir\" failed."
- }
- }
- }
- -re ".*$gdb_prompt $" {
- perror "Dir \"$subdir\" failed."
- }
- }
-}
-
-# In "testsuite/config/unix-gdb.exp", the routine "gdb_load"
-# is defined as "gdb_file_cmd". The binding of "gdb_file_cmd"
-# is done at invocation time. Before this file is processed,
-# it binds to the definition in "testsuite/lib/gdb.exp"; after
-# this file is processed, it binds to this definition.
-# TCL lets us overrides a previous routine definition without a
-# warning (isn't that special?).
-#
-# This means that tests before use "file" to load a target, and
-# tests afterwards use the pair "symbol-file" "exec-file".
-#
-# I'm leaving it as it is for now because at the moment it
-# is the only test we have of the use of the combination of
-# "symbol-file" and "exec-file" to load a debugging target (the
-# other definition uses "file".
-#
-# Symbol-file and exec-file should be tested explicitly, not
-# as a side effect of running a particular test (in this case,
-# "testsuite/gdb.compat/dbx.exp").
-#
-# CM: Renamed the procedure so it does not override the orginal file name.
-# Having the test suite change behavior depending on the tests run makes
-# it extremely difficult to reproduce errors. I've also added a
-# "dbx_gdb_load" procedure. This and only this test will call these
-# procedures now. I also added an "expect" to the "send exec-file" line.
-# The "expect" waits for a prompt to appear. Otherwise, if the tests run
-# too quickly, the caller could send another command before the prompt
-# of this command returns, causing the test to get out of sync and fail
-# seemingly randomly or only on a loaded system.
-#
-# Problem is, though, that the testsuite config files can override the definition of
-# gdb_load (without notice, as was mentioned above). Unfortunately, the gdb_load proc
-# that was copied into this test was a copy of the unix native version.
-#
-# The real problem that we're attempting to solve is how to load an exec and symbol
-# file into gdb for a dbx session. So why not just override gdb_file_cmd with the
-# right sequence of events, allowing gdb_load to do its normal thing? This way
-# remotes and simulators will work, too.
-#
-
-proc local_gdb_file_cmd {arg} {
- global loadpath
- global loadfile
- global GDB
- global gdb_prompt
- global spawn_id
- upvar timeout timeout
- global last_loaded_file
-
- set last_loaded_file $arg
-
- if [is_remote host] {
- set arg [remote_download host $arg]
- if { $arg == "" } {
- error "download failed"
- return -1
- }
- }
-
- send_gdb "symbol-file $arg\n"
- gdb_expect {
- -re "Reading symbols from.*$gdb_prompt $" {
- verbose "\t\tLoaded $arg into the $GDB"
- send_gdb "exec-file $arg\n"
- gdb_expect {
- -re "A program is being debugged already.*Kill it.*y or n. $" {
- send_gdb "y\n"
- verbose "\t\tKilling previous program being debugged"
- exp_continue
- }
- -re ".*$gdb_prompt $" {
- verbose "\t\tLoaded $arg with new symbol table into $GDB"
- return 0
- }
- timeout {
- perror "(timeout) Couldn't load $arg"
- return -1
- }
- }
- return 0
- }
- -re "has no symbol-table.*$gdb_prompt $" {
- perror "$arg wasn't compiled with \"-g\""
- return -1
- }
- -re "Load new symbol table from \".*\".*y or n. $" {
- send_gdb "y\n"
- exp_continue
- }
- -re ".*No such file or directory.*$gdb_prompt $" {
- perror "($arg) No such file or directory\n"
- return -1
- }
- -re "$gdb_prompt $" {
- perror "couldn't load $arg into $GDB."
- return -1
- }
- timeout {
- perror "couldn't load $arg into $GDB (timed out)."
- return -1
- }
- eof {
- # This is an attempt to detect a core dump, but seems not to
- # work. Perhaps we need to match .* followed by eof, in which
- # expect does not seem to have a way to do that.
- perror "couldn't load $arg into $GDB (end of file)."
- return -1
- }
- }
-}
-
-#
-#test_breakpoints
-#
-proc test_breakpoints { } {
- set stop_line [gdb_get_line_number "stop-in-main"]
- gdb_test "stop in main" "Breakpoint.*at.*: file.*average\.c, line $stop_line\."
- gdb_test "status" "Num.*Type.*Disp.*Enb.*Address.*What\r\n1\[ \r\]+breakpoint\[ \r\]+keep y.*in main at.*average\.c:$stop_line.*"
- set stop_line [gdb_get_line_number "stop-at-call"]
- gdb_test "stop at average.c:$stop_line" "Breakpoint.*at.*: file.*average\.c, line $stop_line.*"
- gdb_test "stop in average.c:$stop_line" "Usage: stop in <function . address>"
- gdb_test "stop at main" "Usage: stop at LINE"
-}
-
-#
-#test_assign
-#
-proc test_assign { } {
- global decimal
- global gdb_prompt
-
- gdb_run_cmd
- set test "running to main"
- gdb_test_multiple "" $test {
- -re "Break.* at .*:$decimal.*$gdb_prompt $" {
- pass $test
- }
- -re "Breakpoint \[0-9\]*, \[0-9xa-f\]* in .*$gdb_prompt $" {
- pass $test
- }
- }
- send_gdb "assign first=1\n"
- gdb_expect {
- -re "No symbol \"first\" in current context.*$" { fail "assign first" }
- -re "$gdb_prompt $" { pass "assign first" }
- timeout { fail "assign first (timeout)" }
- }
- gdb_test "print first" ".1 = 1"
-}
-
-#
-#test_whereis
-#
-proc test_whereis { } {
- gdb_test "whereis my_list" "All variables matching regular expression \"my_list\":\r\n\r\nFile.*average\.c:\r\n.*\tstatic int my_list\\\[10\\\];"
-}
-
-#
-#test_func
-#
-proc test_func { } {
- global decimal
- global srcfile2
- gdb_test "cont" ".*" "cont 1"
- gdb_test "step" ".*"
- gdb_test "func sum" "'sum' not within current stack frame\."
- set stop_line [gdb_get_line_number "stop-in-sum" $srcfile2]
- gdb_test "stop in sum" "Breakpoint.*at.*: file.*sum\.c, line $stop_line\."
- gdb_test "cont" ".*" "cont 2"
- gdb_test "func print_average" ".*in print_average.*\\(list=.*, low=0, high=6\\).*at.*average\.c:${decimal}\r\n${decimal}\[ \t\]+total = sum\\(list, low, high\\);"
-}
-
-# Start with a fresh gdb.
-
-gdb_exit
-
-with_override gdb_file_cmd local_gdb_file_cmd {
- save_vars GDBFLAGS {
- set GDBFLAGS "$GDBFLAGS --dbx"
-
- gdb_start
- dbx_reinitialize_dir $srcdir/$subdir
- gdb_load ${binfile}
-
- test_breakpoints
- test_assign
- test_whereis
- gdb_test "file average.c:1" "1\[ \t\]+/. This is a sample program.*"
- test_func
-
- #exit and cleanup
- gdb_exit
- }
-}
-
-return 0
diff --git a/gdb/testsuite/gdb.base/default.exp b/gdb/testsuite/gdb.base/default.exp
index fe9c397b88c..f7859c9a479 100644
--- a/gdb/testsuite/gdb.base/default.exp
+++ b/gdb/testsuite/gdb.base/default.exp
@@ -606,7 +606,7 @@ set show_conv_list \
{$_gdb_maint_setting = <internal function _gdb_maint_setting>} \
{$_gdb_setting_str = <internal function _gdb_setting_str>} \
{$_gdb_setting = <internal function _gdb_setting>} \
- {$_gdb_major = 12} \
+ {$_gdb_major = 13} \
{$_gdb_minor = 1} \
{$_shell_exitsignal = void} \
{$_shell_exitcode = 0} \
@@ -703,7 +703,7 @@ set show_confirm_seen 0
set show_prompt_seen 0
gdb_test_multiple "show" "show" {
-re "confirm: *Whether to confirm potentially dangerous operations is on.(\[^\r\n\]*\[\r\n\])+history filename: *The filename in which to record the command history is (\[^\r\n\]*\[\r\n\])+history save: *Saving of the history record on exit is on.(\[^\r\n\]*\[\r\n\])+history size: *The size of the command history is(\[^\r\n\]*\[\r\n\])+listsize: *Number of source lines gdb will list by default is 10(\[^\r\n]*\[\r\n\])+print elements: *Limit on string chars or array elements to print is 200." {
- verbose "Confirm dislayed"
+ verbose "Confirm displayed"
set show_confirm_seen 1
exp_continue
}
diff --git a/gdb/testsuite/gdb.base/dfp-test.exp b/gdb/testsuite/gdb.base/dfp-test.exp
index 4866d0ae094..6c3de2863ea 100644
--- a/gdb/testsuite/gdb.base/dfp-test.exp
+++ b/gdb/testsuite/gdb.base/dfp-test.exp
@@ -23,6 +23,7 @@ standard_testfile .c
# Try to compile the test case. If we can't, assume the
# toolchain does not yet provide DFP support and bail out.
if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {quiet debug}] != "" } {
+ unsupported "decimal floating point not supported for this target."
verbose "Skipping DFP tests."
return -1
}
diff --git a/gdb/testsuite/gdb.base/ending-run.exp b/gdb/testsuite/gdb.base/ending-run.exp
index 32435b2b509..906f1ac40ca 100644
--- a/gdb/testsuite/gdb.base/ending-run.exp
+++ b/gdb/testsuite/gdb.base/ending-run.exp
@@ -202,6 +202,22 @@ gdb_test_multiple "next" "step out of main" {
# This is what happens on system using uClibc.
pass "step out of main"
}
+ -re "0x.*\\?\\? \\(\\) from /lib/powerpc.*$gdb_prompt $" {
+ # This case occurs on Powerpc when gdb steps out of main and the
+ # needed debug info files are not loaded on the system, preventing
+ # GDB to determine which function it reached (__libc_start_call_main).
+ # Ideally, the target system would have the necessary debugging
+ # information, but in its absence, GDB's behavior is as expected.
+ #
+ # Another consequence of this missing information is that GDB
+ # can no longer continue to perform "next" operations, as doing
+ # so requires GDB to know the bounds of the current function.
+ # Not know what the current function it, it cannot determine
+ # its bounds. So we also set program_exited to 1 to indicate
+ # that we need to stop this testcase at this stage of the testing.
+ pass "step out of main"
+ set program_exited 1
+ }
}
# When we're talking to a program running on a real stand-alone board,
diff --git a/gdb/testsuite/gdb.base/eof-exit.exp b/gdb/testsuite/gdb.base/eof-exit.exp
new file mode 100644
index 00000000000..ad5f33d2f10
--- /dev/null
+++ b/gdb/testsuite/gdb.base/eof-exit.exp
@@ -0,0 +1,88 @@
+# Copyright (C) 2022 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# This test script checks how GDB handles exiting with ctrl-d.
+
+# Start GDB, and then close it by sendig ctrl-d. Check that the
+# string 'quit' appears where we expect it too.
+proc run_test {} {
+ clean_restart
+
+ # The gdb_start call above swallows the GDB prompt, and we want
+ # the prompt for the test below.
+ #
+ # Send a newline character, which will cause GDB to redisplay the
+ # prompt.
+ send_gdb "\n"
+ gdb_test_multiple "" "discard newline" {
+ -re "^\r\n" {
+ }
+ }
+
+ # Send GDB a ctrl-d. Check that we see the 'quit' string in the
+ # expected place.
+ send_gdb "\004"
+ gdb_test_multiple "" "close GDB with eof" {
+ -re "$::gdb_prompt \[^\n\]*\r\[^\n\]*quit" {
+ fail "$gdb_test_name (misplaced \\r)"
+ }
+ -re "$::gdb_prompt (?:\[^\n\]*\r)?\[^\n\]*\r\nquit\r\n" {
+ # For versions of readline that don't include the
+ # RL_STATE_EOF patch, then the 'quit' is printed on the
+ # subsequent line.
+ kfail gdb/28833 "$gdb_test_name (older version of readline)"
+ }
+ -re "$::gdb_prompt quit\[^\n\]*\r\n\[^\n\]*\r\n$" {
+ # There was a bug where GDB would print an extra blank
+ # line after the 'quit', this catches that case.
+ fail $gdb_test_name
+ }
+ -re "$::gdb_prompt \[^\n\r\]*quit\[^\n\]*\r\n\[^\n\]*$" {
+ pass $gdb_test_name
+ }
+ eof {
+ fail "$gdb_test_name (missed the prompt)"
+ }
+ }
+}
+
+with_test_prefix "default" {
+ run_test
+}
+
+save_vars { env(TERM) } {
+ setenv TERM ansi
+
+ with_test_prefix "with non-dump terminal" {
+ run_test
+
+ save_vars { env(INPUTRC) } {
+
+ # Create an inputrc file that turns bracketed paste mode
+ # on. This is usually turned off (see lib/gdb.exp), but
+ # for the next test we want to see what happens with this
+ # on.
+ set inputrc [standard_output_file inputrc]
+ set fd [open "$inputrc" w]
+ puts $fd "set enable-bracketed-paste on"
+ close $fd
+
+ setenv INPUTRC "$inputrc"
+ with_test_prefix "with bracketed-paste-mode on" {
+ run_test
+ }
+ }
+ }
+}
diff --git a/gdb/testsuite/gdb.base/execl-update-breakpoints.exp b/gdb/testsuite/gdb.base/execl-update-breakpoints.exp
index 8a9bdf66216..29647958e65 100644
--- a/gdb/testsuite/gdb.base/execl-update-breakpoints.exp
+++ b/gdb/testsuite/gdb.base/execl-update-breakpoints.exp
@@ -32,20 +32,8 @@ if { [gdb_compile [file join $srcdir $subdir $srcfile] $objfile \
return -1
}
-set opts1_ld [list debug ldflags=-Wl,-Ttext-segment=0x1000000]
-set opts1_gold [list debug ldflags=-Wl,-Ttext=0x1000000]
-set opts2_ld [list debug ldflags=-Wl,-Ttext-segment=0x2000000]
-set opts2_gold [list debug ldflags=-Wl,-Ttext=0x2000000]
-
-if { [gdb_compile $objfile $exec1 executable $opts1_ld] != "" } {
- # Old gold linker versions don't support -Ttext-segment. Fall
- # back to -Ttext.
- if { [gdb_compile $objfile $exec1 executable $opts1_gold] != ""
- || [gdb_compile $objfile $exec2 executable $opts2_gold] != ""} {
- untested "link failed"
- return -1
- }
-} elseif { [gdb_compile $objfile $exec2 executable $opts2_ld] != "" } {
+if { [gdb_compile $objfile $exec1 executable {debug text_segment=0x1000000}] != ""
+ || [gdb_compile $objfile $exec2 executable {debug text_segment=0x2000000}] != ""} {
untested "link failed"
return -1
}
diff --git a/gdb/testsuite/gdb.base/fullname.exp b/gdb/testsuite/gdb.base/fullname.exp
index a264dc75322..f9faca87423 100644
--- a/gdb/testsuite/gdb.base/fullname.exp
+++ b/gdb/testsuite/gdb.base/fullname.exp
@@ -99,14 +99,12 @@ if { [gdb_breakpoint [standard_output_file tmp-${srcfile}]:${line} {no-message}]
# Build the test executable using relative paths not relative to the directory
# we'll run GDB from.
-set save_pwd [pwd]
-cd [standard_output_file {}]
-if { [gdb_compile [standard_output_file tmp-${srcfile}] "${testfile}" \
- executable {debug}] != "" } {
- cd $save_pwd
- return -1
+with_cwd [standard_output_file {}] {
+ if { [gdb_compile [standard_output_file tmp-${srcfile}] "${testfile}" \
+ executable {debug}] != "" } {
+ return -1
+ }
}
-cd $save_pwd
gdb_exit
gdb_start
diff --git a/gdb/testsuite/gdb.base/fullpath-expand.exp b/gdb/testsuite/gdb.base/fullpath-expand.exp
index efa8d63b1d4..b3890244997 100644
--- a/gdb/testsuite/gdb.base/fullpath-expand.exp
+++ b/gdb/testsuite/gdb.base/fullpath-expand.exp
@@ -25,13 +25,13 @@ if { [file pathtype $objdir] != "absolute" } {
return -1
}
-set saved_pwd [pwd]
-cd $srcdir
-set err [gdb_compile "${subdir}/${srcfile} ${subdir}/${srcfile2}" $binfile executable {debug}]
-cd $saved_pwd
-if { $err != "" } {
- untested "${srcfile} or ${srcfile2} compilation failed"
- return -1
+with_cwd $srcdir {
+ set err [gdb_compile "${subdir}/${srcfile} ${subdir}/${srcfile2}" $binfile executable {debug}]
+
+ if { $err != "" } {
+ untested "${srcfile} or ${srcfile2} compilation failed"
+ return -1
+ }
}
set result [catch "exec realpath ${srcdir}/${subdir}/${srcfile2}" realsrcfile2]
diff --git a/gdb/testsuite/gdb.base/info-macros.exp b/gdb/testsuite/gdb.base/info-macros.exp
index b3e1032d76f..39c9bc696cc 100644
--- a/gdb/testsuite/gdb.base/info-macros.exp
+++ b/gdb/testsuite/gdb.base/info-macros.exp
@@ -21,19 +21,7 @@ if [using_fission] {
return -1
}
-set options {debug}
-
-get_compiler_info
-if { [test_compiler_info gcc*] } {
- lappend options "additional_flags=-g3"
-} elseif { [test_compiler_info clang*] } {
- lappend options "additional_flags=-fdebug-macro"
-} else {
- untested "no compiler info"
- return -1
-}
-
-if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile} $options] } {
+if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile} {debug macros}] } {
return -1
}
diff --git a/gdb/testsuite/gdb.base/jit-elf-fork.exp b/gdb/testsuite/gdb.base/jit-elf-fork.exp
index e5b9a18d00c..635248cd8e4 100644
--- a/gdb/testsuite/gdb.base/jit-elf-fork.exp
+++ b/gdb/testsuite/gdb.base/jit-elf-fork.exp
@@ -81,7 +81,11 @@ proc do_setup { detach-on-fork follow-fork-mode } {
gdb_continue_to_breakpoint "continue to before fork" ".*break before fork.*"
# We should have one JIT object loaded.
- gdb_test "maint info jit" " ${::hex}" "jit-ed objfiles before fork"
+ gdb_test "maint info jit" \
+ [multi_line \
+ "jit_code_entry address\\s+symfile address\\s+symfile size\\s*" \
+ "${::hex}\\s+${::hex}\\s+${::decimal}\\s*"] \
+ "jit-ed objfiles before fork"
# Put a breakpoint just after the fork, continue there.
gdb_breakpoint [gdb_get_line_number "break after fork" $::main_srcfile]
@@ -89,7 +93,11 @@ proc do_setup { detach-on-fork follow-fork-mode } {
# We should still have one JIT object loaded in whatever inferior we are
# currently stopped in, regardless of the mode.
- gdb_test "maint info jit" " ${::hex}" "jit-ed objfiles after fork"
+ gdb_test "maint info jit" \
+ [multi_line \
+ "jit_code_entry address\\s+symfile address\\s+symfile size\\s*" \
+ "${::hex}\\s+${::hex}\\s+${::decimal}\\s*"] \
+ "jit-ed objfiles after fork"
# Delete our breakpoints.
delete_breakpoints
@@ -108,7 +116,11 @@ proc_with_prefix test_detach_on_fork_off_follow_fork_mode_parent { } {
# Switch to the child, verify there is a JIT-ed objfile.
gdb_test "inferior 2" "Switching to inferior 2.*"
- gdb_test "maint info jit" " ${::hex}" "jit-ed objfile in child"
+ gdb_test "maint info jit" \
+ [multi_line \
+ "jit_code_entry address\\s+symfile address\\s+symfile size\\s*" \
+ "${::hex}\\s+${::hex}\\s+${::decimal}\\s*"] \
+ "jit-ed objfile in child"
# Continue child past JIT unload, verify there are no more JIT-ed objfiles.
gdb_continue_to_breakpoint "continue to before return - child" ".*break before return.*"
@@ -116,7 +128,11 @@ proc_with_prefix test_detach_on_fork_off_follow_fork_mode_parent { } {
# Go back to parent, the JIT-ed objfile should still be there.
gdb_test "inferior 1" "Switching to inferior 1.*"
- gdb_test "maint info jit" " ${::hex}" "jit-ed objfile in parent"
+ gdb_test "maint info jit" \
+ [multi_line \
+ "jit_code_entry address\\s+symfile address\\s+symfile size\\s*" \
+ "${::hex}\\s+${::hex}\\s+${::decimal}\\s*"] \
+ "jit-ed objfile in parent"
# Continue parent past JIT unload, verify there are no more JIT-ed objfiles.
gdb_continue_to_breakpoint "continue to before return - parent" ".*break before return.*"
@@ -135,7 +151,11 @@ proc_with_prefix test_detach_on_fork_off_follow_fork_mode_child { } {
# Switch to the parent, verify there is a JIT-ed objfile.
gdb_test "inferior 1" "Switching to inferior 1.*"
- gdb_test "maint info jit" " ${::hex}" "jit-ed objfile in parent"
+ gdb_test "maint info jit" \
+ [multi_line \
+ "jit_code_entry address\\s+symfile address\\s+symfile size\\s*" \
+ "${::hex}\\s+${::hex}\\s+${::decimal}\\s*"] \
+ "jit-ed objfile in parent"
# Continue parent past JIT unload, verify there are no more JIT-ed objfiles.
gdb_continue_to_breakpoint "continue to before return - parent" ".*break before return.*"
@@ -143,7 +163,11 @@ proc_with_prefix test_detach_on_fork_off_follow_fork_mode_child { } {
# Go back to child, the JIT-ed objfile should still be there.
gdb_test "inferior 2" "Switching to inferior 2.*"
- gdb_test "maint info jit" " ${::hex}" "jit-ed objfile in child"
+ gdb_test "maint info jit" \
+ [multi_line \
+ "jit_code_entry address\\s+symfile address\\s+symfile size\\s*" \
+ "${::hex}\\s+${::hex}\\s+${::decimal}\\s*"] \
+ "jit-ed objfile in child"
# Continue child past JIT unload, verify there are no more JIT-ed objfiles.
gdb_continue_to_breakpoint "continue to before return - child" ".*break before return.*"
diff --git a/gdb/testsuite/gdb.base/jit-elf.exp b/gdb/testsuite/gdb.base/jit-elf.exp
index 8a4c5b750ca..4b75188a00d 100644
--- a/gdb/testsuite/gdb.base/jit-elf.exp
+++ b/gdb/testsuite/gdb.base/jit-elf.exp
@@ -38,6 +38,7 @@ set jit_solib_basename jit-elf-solib
set jit_solib_srcfile ${srcdir}/${subdir}/${jit_solib_basename}.c
# Detach, restart GDB, and re-attach to the program.
+# Return 0 if attach failed, otherwise return 1.
proc clean_reattach {} {
global decimal gdb_prompt
global main_binfile main_srcfile
@@ -57,18 +58,18 @@ proc clean_reattach {} {
clean_restart ${main_binfile}
- set test "attach"
- gdb_test_multiple "attach $testpid" "$test" {
- -re "Attaching to program.*.*main.*at .*$main_srcfile:.*$gdb_prompt $" {
- pass "$test"
- }
+ if { ![gdb_attach $testpid \
+ -pattern "main.*at .*$::main_srcfile:.*"] } {
+ return 0
}
gdb_test_no_output "set var wait_for_gdb = 0"
+ return 1
}
# Continue to LOCATION in the program. If REATTACH, detach and
# re-attach to the program from scratch.
+# Return 0 if clean_reattach failed, otherwise return 1.
proc continue_to_test_location {location reattach} {
global main_srcfile
@@ -76,9 +77,12 @@ proc continue_to_test_location {location reattach} {
gdb_continue_to_breakpoint $location
if {$reattach} {
with_test_prefix "$location" {
- clean_reattach
+ if { ![clean_reattach] } {
+ return 0
+ }
}
}
+ return 1
}
proc one_jit_test {jit_solibs_target match_str reattach} {
@@ -114,7 +118,9 @@ proc one_jit_test {jit_solibs_target match_str reattach} {
gdb_continue_to_breakpoint "break here 0"
- continue_to_test_location "break here 1" $reattach
+ if { ![continue_to_test_location "break here 1" $reattach] } {
+ return
+ }
gdb_test "info function ^jit_function" "$match_str"
@@ -124,7 +130,9 @@ proc one_jit_test {jit_solibs_target match_str reattach} {
gdb_test "maintenance info break"
}
- continue_to_test_location "break here 2" $reattach
+ if { ![continue_to_test_location "break here 2" $reattach] } {
+ return
+ }
# All jit librares must have been unregistered
gdb_test "info function jit_function" \
diff --git a/gdb/testsuite/gdb.base/jit-reader.exp b/gdb/testsuite/gdb.base/jit-reader.exp
index 7ee16d69c84..d94360cd7d9 100644
--- a/gdb/testsuite/gdb.base/jit-reader.exp
+++ b/gdb/testsuite/gdb.base/jit-reader.exp
@@ -227,6 +227,16 @@ proc jit_reader_test {} {
"Attempt to assign to an unmodifiable value\." \
"cannot assign to register"
}
+
+ if { ![skip_python_tests] } {
+ gdb_test "python print(gdb.objfiles())" \
+ "$any<gdb.Objfile filename=<< JIT compiled code at $hex >>>$any" \
+ "python gdb.Objfile.__repr__ ()"
+
+ gdb_test "python print(list(map(lambda objf : objf.filename, gdb.objfiles())))" \
+ "$any'<< JIT compiled code at $hex >>'$any" \
+ "python gdb.Objfile.filename"
+ }
}
}
diff --git a/gdb/testsuite/gdb.base/list.exp b/gdb/testsuite/gdb.base/list.exp
index d035d9b1613..d11d35e6697 100644
--- a/gdb/testsuite/gdb.base/list.exp
+++ b/gdb/testsuite/gdb.base/list.exp
@@ -251,36 +251,28 @@ proc test_list_filename_and_function {} {
global gdb_prompt
global last_line_re
- set testcnt 0
-
# gcc appears to generate incorrect debugging information for code
# in include files, which breaks this test.
# SunPRO cc is the second case below, it's also correct.
- send_gdb "list list0.c:main\n"
- gdb_expect {
- -re "1\[ \t\]+#include .*10\[ \t\]+foo \[(\]+.*\[)\]+;\r\n$gdb_prompt $" {
- incr testcnt
+ gdb_test_multiple "list list0.c:main" "" {
+ -re -wrap "1\[ \t\]+#include .*10\[ \t\]+foo \[(\]+.*\[)\]+;" {
+ pass $gdb_test_name
}
- -re "5\[ \t\]+int x;.*14\[ \t\]+foo \[(\]+.*\[)\]+;\r\n$gdb_prompt $" {
- pass "list function in source file 1"
+ -re -wrap "5\[ \t\]+int x;.*14\[ \t\]+foo \[(\]+.*\[)\]+;" {
+ pass $gdb_test_name
}
- -re ".*$gdb_prompt $" { fail "list list0.c:main" }
- timeout { fail "list list0.c:main (timeout)" }
}
# Not sure what the point of having this function be unused is.
# AIX is legitimately removing it.
setup_xfail "rs6000-*-aix*"
- send_gdb "list list0.c:unused\n"
- gdb_expect {
- -re "40\[ \t\]+unused.*${last_line_re}\r\n$gdb_prompt $" {
- incr testcnt
+ gdb_test_multiple "list list0.c:unused" "" {
+ -re -wrap "40\[ \t\]+unused.*${last_line_re}" {
+ pass $gdb_test_name
}
- -re "37.*42\[ \t\]+\}\r\n$gdb_prompt $" {
- incr testcnt
+ -re -wrap "37.*42\[ \t\]+\}" {
+ pass $gdb_test_name
}
- -re ".*$gdb_prompt $" { fail "list list0.c:unused" }
- timeout { fail "list list0.c:unused (timeout)" }
}
clear_xfail "rs6000-*-aix*"
@@ -290,58 +282,47 @@ proc test_list_filename_and_function {} {
# SunPRO cc is the third case.
setup_xfail "rs6000-*-*" 1804
setup_xfail_format "COFF"
- send_gdb "list list0.h:foo\n"
- gdb_expect {
- -re "2\[ \t\]+including file. This.*11\[ \t\]+bar \[(\]+.*\[)\]+;\r\n$gdb_prompt $" {
- incr testcnt
+ gdb_test_multiple "list list0.h:foo" "" {
+ -re -wrap "2\[ \t\]+including file. This.*11\[ \t\]+bar \[(\]+.*\[)\]+;" {
+ pass $gdb_test_name
}
- -re "1\[ \t\]+/. An include file.*10\[ \t\]+bar \[(\]+.*\[)\]+;\r\n$gdb_prompt $" {
- incr testcnt
+ -re -wrap "1\[ \t\]+/. An include file.*10\[ \t\]+bar \[(\]+.*\[)\]+;" {
+ pass $gdb_test_name
}
- -re "3\[ \t\]+.*12\[ \t\]+bar \[(\]+.*\[)\]+;\r\n$gdb_prompt $" {
- incr testcnt
+ -re -wrap "3\[ \t\]+.*12\[ \t\]+bar \[(\]+.*\[)\]+;" {
+ pass $gdb_test_name
}
- -re "No source file named list0.h.\r\n$gdb_prompt $" {
- fail "list list0.h:foo"
+ -re -wrap "No source file named list0.h." {
+ fail $gdb_test_name
}
- -re ".*$gdb_prompt $" { fail "list list0.h:foo" }
- timeout { fail "list list0.h:foo (timeout)" }
}
# Ultrix gdb is the second case.
- send_gdb "list list1.c:bar\n"
- gdb_expect {
- -re "4\[ \t\]+void.*13\[ \t\]+\}\r\n$gdb_prompt $" {
- incr testcnt
+ gdb_test_multiple "list list1.c:bar" "" {
+ -re -wrap "4\[ \t\]+void.*13\[ \t\]+\}" {
+ pass $gdb_test_name
}
- -re "4\[ \t\]+void.*12\[ \t\]*long_line ..;\r\n$gdb_prompt $" {
- incr testcnt
+ -re -wrap "4\[ \t\]+void.*12\[ \t\]*long_line ..;" {
+ pass $gdb_test_name
}
- -re "4\[ \t\]+void.*11\[ \t\]*\r\n$gdb_prompt $" {
- incr testcnt
+ -re -wrap "4\[ \t\]+void.*11\[ \t\]*" {
+ pass $gdb_test_name
}
- -re ".*$gdb_prompt $" { fail "list list1.c:bar" }
- timeout { fail "list list1.c:bar (timeout)" }
}
# Not sure what the point of having this function be unused is.
# AIX is legitimately removing it.
setup_xfail "rs6000-*-aix*"
- send_gdb "list list1.c:unused\n"
- gdb_expect {
- -re "12\[ \t\]+long_line \[(\]\[)\];.*13\[ \t\]+\}\r\n.*$gdb_prompt $" {
- incr testcnt
+ gdb_test_multiple "list list1.c:unused" "" {
+ -re -wrap "12\[ \t\]+long_line \[(\]\[)\];.*13\[ \t\]+\}.*" {
+ pass $gdb_test_name
}
- -re "14.*19\[ \t\]+\}\r\n.*$gdb_prompt $" {
- incr testcnt
+ -re -wrap "14.*19\[ \t\]+\}.*" {
+ pass $gdb_test_name
}
- -re ".*$gdb_prompt $" { fail "list list1.c:unused" }
- timeout { fail "list list1.c:unused (timeout)" }
}
clear_xfail "rs6000-*-aix*"
- pass "list filename:function ($testcnt tests)"
-
# Test with quoting.
gdb_test "list 'list0.c:main'" "int main.*"
diff --git a/gdb/testsuite/gdb.base/macscp.exp b/gdb/testsuite/gdb.base/macscp.exp
index 4c06423e6d5..be9bd5312ff 100644
--- a/gdb/testsuite/gdb.base/macscp.exp
+++ b/gdb/testsuite/gdb.base/macscp.exp
@@ -18,19 +18,12 @@
standard_testfile macscp1.c
set objfile [standard_output_file ${testfile}.o]
-set options { debug additional_flags=-DFROM_COMMANDLINE=ARG}
-
-get_compiler_info
-if { [test_compiler_info "gcc-*"] } {
- lappend options additional_flags=-g3
-} elseif { [test_compiler_info "clang-*"] } {
- lappend options additional_flags=-fdebug-macro
-}
+set options {debug macros additional_flags=-DFROM_COMMANDLINE=ARG}
# Generate the intermediate object file. This is required by Darwin to
# have access to the .debug_macinfo section.
if {[gdb_compile "${srcdir}/${subdir}/macscp1.c" "${objfile}" \
- object $options] != ""
+ object $options] != ""
|| [gdb_compile "${objfile}" "${binfile}" executable $options] != "" } {
untested "failed to compile"
return -1
diff --git a/gdb/testsuite/gdb.base/maint.exp b/gdb/testsuite/gdb.base/maint.exp
index 6f7bd2d24a7..45ccdc6584e 100644
--- a/gdb/testsuite/gdb.base/maint.exp
+++ b/gdb/testsuite/gdb.base/maint.exp
@@ -200,11 +200,11 @@ set re \
" Number of symbol tables: $decimal" \
" Number of symbol tables with line tables: $decimal" \
" Number of symbol tables with blockvectors: $decimal" \
- "( Number of read CUs: $decimal" \
- " Number of unread CUs: $decimal" \
- ")?( Number of \"partial\" symbols read: $decimal" \
+ "( Number of \"partial\" symbols read: $decimal" \
")?( Number of psym tables \\(not yet expanded\\): $decimal" \
")?( Total memory used for psymbol cache: $decimal" \
+ ")?( Number of read CUs: $decimal" \
+ " Number of unread CUs: $decimal" \
")? Total memory used for objfile obstack: $decimal" \
" Total memory used for BFD obstack: $decimal" \
" Total memory used for string cache: $decimal" \
@@ -224,12 +224,17 @@ gdb_test_no_output "maint print dummy-frames"
set header 0
set psymtabs 0
+set cooked_index 0
set symtabs 0
gdb_test_multiple "maint print objfiles" "" -lbl {
-re "\r\nObject file.*maint($EXEEXT)?: Objfile at ${hex}" {
set header 1
exp_continue
}
+ -re "\r\nCooked index" {
+ set cooked_index 1
+ exp_continue
+ }
-re "\r\nPsymtabs:\[\r\t \]+" {
set psymtabs 1
exp_continue
@@ -248,6 +253,9 @@ proc maint_pass_if {val name} {
}
maint_pass_if $header "maint print objfiles: header"
+if {$cooked_index} {
+ set have_psyms 0
+}
if { $have_psyms } {
maint_pass_if $psymtabs "maint print objfiles: psymtabs"
}
diff --git a/gdb/testsuite/gdb.base/page.exp b/gdb/testsuite/gdb.base/page.exp
index a38f1dd0c94..268777f8acb 100644
--- a/gdb/testsuite/gdb.base/page.exp
+++ b/gdb/testsuite/gdb.base/page.exp
@@ -121,6 +121,7 @@ foreach_with_prefix size {"0" "0x80000000" "unlimited"} {
gdb_test "set width -1" "integer -1 out of range"
gdb_test "set height -1" "integer -1 out of range"
-gdb_exit
-return 0
-
+# A height of 1 used to cause pathological behavior -- it would
+# endlessly prompt for paging without printing anything.
+gdb_test_no_output "set height 1"
+gdb_test "print 23" " = 23"
diff --git a/gdb/testsuite/gdb.base/parse_number.exp b/gdb/testsuite/gdb.base/parse_number.exp
new file mode 100644
index 00000000000..ccef3f09655
--- /dev/null
+++ b/gdb/testsuite/gdb.base/parse_number.exp
@@ -0,0 +1,105 @@
+# Copyright 2022 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Test parsing numbers. Several language parsers had the same bug
+# around parsing large 64-bit numbers, hitting undefined behavior, and
+# thus crashing a GDB built with UBSan. This testcase goes over all
+# languages exercising printing the max 64-bit number, making sure
+# that GDB doesn't crash. ARCH is the architecture to test with.
+
+proc test_parse_numbers {arch} {
+ set arch_re [string_to_regexp $arch]
+ gdb_test "set architecture $arch" "The target architecture is set to \"$arch_re\"."
+
+ gdb_test_no_output "set language c"
+
+ # Types have different sizes depending on the architecture.
+ # Figure out type sizes before matching patterns in the upcoming
+ # tests.
+
+ set sizeof_long_long [get_sizeof "long long" -1]
+ set sizeof_long [get_sizeof "long" -1]
+ set sizeof_int [get_sizeof "int" -1]
+
+ if {$sizeof_long_long == 8 && $sizeof_long == 8} {
+ set 8B_type "unsigned long"
+ set fortran_type "unsigned long"
+ set fortran_value "0xffffffffffffffff"
+ } elseif {$sizeof_long_long == 8 && $sizeof_long == 4 && $sizeof_int == 4} {
+ set 8B_type "unsigned long long"
+ set fortran_type "unsigned int"
+ set fortran_value "0xffffffff"
+ } elseif {$sizeof_long == 4 && $sizeof_int == 2} {
+ set 8B_type "unsigned long long"
+ set fortran_type "unsigned long"
+ set fortran_value "0xffffffff"
+ } else {
+ error "missing case for long long = $sizeof_long_long, long = $sizeof_long, int = $sizeof_int"
+ }
+
+ foreach_with_prefix lang $::all_languages {
+ gdb_test_no_output "set language $lang"
+
+ set val "0xffffffffffffffff"
+ if {$lang == "fortran"} {
+ gdb_test "p/x $val" " = $fortran_value"
+ gdb_test "ptype $val" " = $fortran_type"
+ } elseif {$lang == "modula-2"} {
+ gdb_test "p/x 0FFFFFFFFFFFFFFFFH" "Overflow on numeric constant\\."
+ } elseif {$lang == "unknown"} {
+ gdb_test "p/x $val" \
+ "expression parsing not implemented for language \"Unknown\""
+ } else {
+ # D and Rust define their own built-in 64-bit types, and
+ # are thus always able to parse/print 64-bit values.
+ if {$sizeof_long_long == 4 && $lang != "d" && $lang != "rust"} {
+ set out "0xffffffff"
+ } else {
+ set out $val
+ }
+ gdb_test "p/x $val" " = $out"
+ if {$lang == "ada"} {
+ if {$sizeof_long_long == 4} {
+ gdb_test "ptype $val" " = <4-byte integer>"
+ } else {
+ gdb_test "ptype $val" " = <8-byte integer>"
+ }
+ } elseif {$lang == "d"} {
+ gdb_test "ptype $val" " = ulong"
+ } elseif {$lang == "rust"} {
+ gdb_test "ptype $val" " = i64"
+ } else {
+ gdb_test "ptype $val" " = $8B_type"
+ }
+ }
+ }
+}
+
+clean_restart
+
+gdb_test_no_output "set max-completions unlimited"
+
+set supported_archs [get_set_option_choices "set architecture"]
+# There should be at least one more than "auto".
+gdb_assert {[llength $supported_archs] > 1} "at least one architecture"
+
+set all_languages [get_set_option_choices "set language"]
+
+foreach_with_prefix arch $supported_archs {
+ if {$arch == "auto"} {
+ continue
+ }
+ test_parse_numbers $arch
+}
diff --git a/gdb/testsuite/gdb.base/printcmds.c b/gdb/testsuite/gdb.base/printcmds.c
index 9af6bf3aacb..78291a2803c 100644
--- a/gdb/testsuite/gdb.base/printcmds.c
+++ b/gdb/testsuite/gdb.base/printcmds.c
@@ -246,6 +246,8 @@ char invalid_RRR[] = "aaaaaaaaaaaaaaaaaaaa"
/* -- */
+float f_var = 65.0f;
+
int main ()
{
void *p = malloc (1);
diff --git a/gdb/testsuite/gdb.base/printcmds.exp b/gdb/testsuite/gdb.base/printcmds.exp
index 37632985a07..3260c8a3c09 100644
--- a/gdb/testsuite/gdb.base/printcmds.exp
+++ b/gdb/testsuite/gdb.base/printcmds.exp
@@ -158,8 +158,27 @@ proc test_float_rejected {} {
# Regression test for PR gdb/21675
proc test_radices {} {
gdb_test "print/o 16777211" " = 077777773"
- gdb_test "print/d 1.5" " = 1"
- gdb_test "print/u 1.5" " = 1"
+
+ # This is written in a somewhat funny way to avoid assuming a
+ # particular float format.
+ set s_int [get_sizeof int -1]
+ set s_float [get_sizeof float -1]
+ if {$s_int == $s_float && $s_int != -1} {
+ foreach fmt {d u x t o} {
+ set ival [get_valueof "/$fmt" "*(int *) &f_var" "FAIL" \
+ "get_valueof int/$fmt"]
+ set fval [get_valueof "/$fmt" f_var "FAIL" \
+ "get_valueof float/$fmt"]
+ # See PR gdb/16242 for this.
+ if {[string compare $ival $fval] == 0 && $ival != "FAIL"} {
+ pass "print/$fmt f_var"
+ } else {
+ fail "print/$fmt f_var"
+ }
+ }
+ }
+
+ gdb_test "print/c f_var" " = 65 'A'"
gdb_test "print/u (char) -1" " = 255"
gdb_test "print/d (unsigned char) -1" " = -1"
diff --git a/gdb/testsuite/gdb.base/remote.exp b/gdb/testsuite/gdb.base/remote.exp
index 1f0869433f2..579dcd40e5c 100644
--- a/gdb/testsuite/gdb.base/remote.exp
+++ b/gdb/testsuite/gdb.base/remote.exp
@@ -195,4 +195,9 @@ gdb_test_no_output "set remote hardware-breakpoint-limit -1"
gdb_test_no_output "set remote hardware-watchpoint-limit 2147483647"
gdb_test_no_output "set remote hardware-breakpoint-limit 2147483647"
+# Check the X/P/p alias commands display the correct packet names.
+foreach pkt {X P p} {
+ gdb_test "show remote ${pkt}-packet" "Support for the `${pkt}' packet is.*"
+}
+
gdb_exit
diff --git a/gdb/testsuite/gdb.base/return-nodebug.exp b/gdb/testsuite/gdb.base/return-nodebug.exp
index 6fd41bee884..1cce09d2fc4 100644
--- a/gdb/testsuite/gdb.base/return-nodebug.exp
+++ b/gdb/testsuite/gdb.base/return-nodebug.exp
@@ -38,7 +38,12 @@ proc do_test {type} {
"advance to marker"
# And if it returned the full width of the result.
- gdb_test "print /d t" " = -1" "full width of the returned result"
+ if {$type == "float" || $type == "double"} {
+ set flag ""
+ } else {
+ set flag "/d"
+ }
+ gdb_test "print $flag t" " = -1" "full width of the returned result"
}
}
}
diff --git a/gdb/testsuite/gdb.base/retval-large-struct.c b/gdb/testsuite/gdb.base/retval-large-struct.c
new file mode 100644
index 00000000000..ae459741220
--- /dev/null
+++ b/gdb/testsuite/gdb.base/retval-large-struct.c
@@ -0,0 +1,45 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+ Copyright 2022 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+struct big_struct_t
+{
+ int int_array[5];
+ double double_array[5];
+ char char_array[5];
+};
+
+struct big_struct_t big_struct =
+{
+ {1, 2, 3, 4, 5},
+ {3.25, 5.0, 6.25, 1.325, -1.95},
+ "abcde"
+};
+
+struct big_struct_t return_large_struct (void)
+{
+ return big_struct;
+}
+
+int
+main (int argc, char **argv)
+{
+ struct big_struct_t test_struct;
+
+ test_struct = return_large_struct ();
+
+ return 0;
+}
diff --git a/gdb/testsuite/gdb.base/retval-large-struct.exp b/gdb/testsuite/gdb.base/retval-large-struct.exp
new file mode 100644
index 00000000000..11bc4d5fbdf
--- /dev/null
+++ b/gdb/testsuite/gdb.base/retval-large-struct.exp
@@ -0,0 +1,37 @@
+# Copyright 2022 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# This file is part of the gdb testsuite
+#
+# Test if "finish" behaves correctly when a function returns a
+# large (> 16 bytes) struct.
+
+standard_testfile
+
+if {[prepare_for_testing "failed to prepare" $testfile $srcfile debug]} {
+ return -1
+}
+
+if {![runto_main]} {
+ return -1
+}
+
+set pattern ".* = \\{int_array = \\{1, 2, 3, 4, 5\\}, double_array = \\{3.25, 5, 6.25, 1.325, -1.95\\}, char_array = \"abcde\"\\}"
+
+gdb_test "p return_large_struct ()" $pattern
+
+gdb_breakpoint "return_large_struct"
+gdb_continue_to_breakpoint "Break in print_large_struct"
+gdb_test "finish" $pattern "finish from return_large_struct"
diff --git a/gdb/testsuite/gdb.base/settings.exp b/gdb/testsuite/gdb.base/settings.exp
index 6886c4b2b46..dafc5e4d8fd 100644
--- a/gdb/testsuite/gdb.base/settings.exp
+++ b/gdb/testsuite/gdb.base/settings.exp
@@ -213,7 +213,7 @@ proc test-integer {variant} {
if {$variant == "zinteger" || $variant == "zuinteger"} {
test_gdb_complete_none \
- "$set_cmd " \
+ "$set_cmd "
} else {
test_gdb_complete_unique \
"$set_cmd " \
@@ -585,11 +585,9 @@ proc test-string {variant} {
# ${srcdir} may be a relative path. We want to make sure we
# end up in the right directory - so make sure we know where
# it is.
- global srcdir
- set mydir [pwd]
- cd ${srcdir}
- set fullsrcdir [pwd]
- cd ${mydir}
+ with_cwd $::srcdir {
+ set fullsrcdir [pwd]
+ }
gdb_test "cd ${fullsrcdir}" \
"Working directory [string_to_regexp ${fullsrcdir}].*" \
diff --git a/gdb/testsuite/gdb.base/solib-search.exp b/gdb/testsuite/gdb.base/solib-search.exp
index eaabe508bf0..202e79d85de 100644
--- a/gdb/testsuite/gdb.base/solib-search.exp
+++ b/gdb/testsuite/gdb.base/solib-search.exp
@@ -54,7 +54,7 @@ set binfile2_lib [standard_output_file ${libname2}.so]
set lib_flags [list debug ldflags=-Wl,-Bsymbolic]
set wrong_lib_flags "$lib_flags additional_flags=-DARRAY_SIZE=1"
-set right_lib_flags "$lib_flags additional_flags=-DARRAY_SIZE=8192 -DRIGHT"
+set right_lib_flags "$lib_flags additional_flags=-DARRAY_SIZE=8192 additional_flags=-DRIGHT"
# Binary file.
standard_testfile .c
diff --git a/gdb/testsuite/gdb.base/source-dir.exp b/gdb/testsuite/gdb.base/source-dir.exp
index 21d4831688f..fff1c1f8717 100644
--- a/gdb/testsuite/gdb.base/source-dir.exp
+++ b/gdb/testsuite/gdb.base/source-dir.exp
@@ -87,31 +87,28 @@ proc test_truncated_comp_dir {} {
return
}
- set original_dir [pwd]
set working_dir [standard_output_file ""]
- cd ${working_dir}
-
- set strip_dir [file normalize "${working_dir}/../.."]
-
- set new_srcfile [standard_output_file ${srcfile}]
- set fd [open "$new_srcfile" w]
- puts $fd "int
- main ()
- {
- return 0;
- }"
- close $fd
-
- set options \
- "debug additional_flags=-fdebug-prefix-map=${strip_dir}="
- if { [gdb_compile "${srcfile}" "${binfile}" \
- executable ${options}] != "" } {
- untested "failed to compile"
- return -1
+ with_cwd $working_dir {
+ set strip_dir [file normalize "${working_dir}/../.."]
+
+ set new_srcfile [standard_output_file ${srcfile}]
+ set fd [open "$new_srcfile" w]
+ puts $fd "int
+ main ()
+ {
+ return 0;
+ }"
+ close $fd
+
+ set options \
+ "debug additional_flags=-fdebug-prefix-map=${strip_dir}="
+ if { [gdb_compile "${srcfile}" "${binfile}" \
+ executable ${options}] != "" } {
+ untested "failed to compile"
+ return -1
+ }
}
- cd ${original_dir}
-
clean_restart ${binfile}
if { [ishost *-*-mingw*] } {
diff --git a/gdb/testsuite/gdb.base/stap-probe.c b/gdb/testsuite/gdb.base/stap-probe.c
index 2d13d02c43a..d1482c35caf 100644
--- a/gdb/testsuite/gdb.base/stap-probe.c
+++ b/gdb/testsuite/gdb.base/stap-probe.c
@@ -29,6 +29,8 @@ __extension__ unsigned short test_m4_semaphore __attribute__ ((unused)) __attrib
__extension__ unsigned short test_pstr_semaphore __attribute__ ((unused)) __attribute__ ((section (".probes")));
__extension__ unsigned short test_ps_semaphore __attribute__ ((unused)) __attribute__ ((section (".probes")));
+
+__extension__ unsigned short test_xmmreg_semaphore __attribute__ ((unused)) __attribute__ ((section (".probes")));
#else
int relocation_marker __attribute__ ((unused));
@@ -90,6 +92,24 @@ pstr (int val)
return val == 0 ? a : b;
}
+#ifdef __SSE2__
+static const char * __attribute__((noinline))
+use_xmm_reg (int val)
+{
+ volatile register int val_in_reg asm ("xmm0") = val;
+
+ STAP_PROBE1 (test, xmmreg, val_in_reg);
+
+ return val == 0 ? "xxx" : "yyy";
+}
+#else
+static const char * __attribute__((noinline)) ATTRIBUTE_NOCLONE
+use_xmm_reg (int val)
+{
+ /* Nothing. */
+}
+#endif /* __SSE2__ */
+
static void
m4 (const struct funcs *fs, int v)
{
@@ -111,5 +131,7 @@ main()
m4 (&fs, 0);
m4 (&fs, 1);
+ use_xmm_reg (0x1234);
+
return 0; /* last break here */
}
diff --git a/gdb/testsuite/gdb.base/stap-probe.exp b/gdb/testsuite/gdb.base/stap-probe.exp
index 6d521870c10..31a054840a5 100644
--- a/gdb/testsuite/gdb.base/stap-probe.exp
+++ b/gdb/testsuite/gdb.base/stap-probe.exp
@@ -15,6 +15,98 @@
standard_testfile
+# Count the number of probes of TYPE (either 'stap' or 'dtrace'),
+# from provider matching PROVIDER, with a name matching NAME, and from
+# an objec file matching OBJECT.
+#
+# The OBJECT is optional, in which case all objects will be matched.
+#
+# If any error condition is detected, then perror is called, and -1
+# returned.
+#
+# Otherwise, returns an integer, 0 or greater.
+proc gdb_count_probes { type provider name { object "" }} {
+ set cmd "info probes ${type} ${provider} ${name}"
+ if { $object != "" } {
+ set cmd "$cmd ${object}"
+ }
+
+ set probe_count 0
+ set no_probes_line false
+ gdb_test_multiple $cmd "" {
+ -re "^$cmd\r\n" {
+ exp_continue
+ }
+ -re "^Type\\s+Provider\\s+Name\\s+Where\\s+Semaphore\\s+Object\\s*\r\n" {
+ exp_continue
+ }
+ -re "^\\s*\r\n" {
+ exp_continue
+ }
+ -re "^stap\[^\r\n\]+\r\n" {
+ incr probe_count
+ exp_continue
+ }
+ -re "^dtrace\[^\r\n\]+\r\n" {
+ incr probe_count
+ exp_continue
+ }
+ -re "^No probes matched\\.\r\n" {
+ set no_probes_line true
+ exp_continue
+ }
+ -re "^$::gdb_prompt $" {
+ pass $gdb_test_name
+ }
+ }
+
+ if { [expr $no_probes_line && $probe_count > 0] \
+ || [expr !$no_probes_line && $probe_count == 0] } {
+ perror "Mismatch between no probes found line, and probes count"
+ return -1
+ }
+
+ return $probe_count
+}
+
+proc check_for_usable_xmm0_probe { binfile } {
+ set readelf_program [gdb_find_readelf]
+ set binfile [standard_output_file $binfile]
+ set command "exec $readelf_program -n $binfile"
+ verbose -log "command is $command"
+ set result [catch $command output]
+ verbose -log "result is $result"
+ verbose -log "output is $output"
+
+ # We don't actually check RESULT. Sometimes readelf gives
+ # warnings about gaps in some of the notes data. This is
+ # unrelated to the staps probes, but still causes readelf to exit
+ # with non-zero status.
+ #
+ # Instead, just check the output. If readelf failed to run then
+ # the output will be empty, and the following regexps will fail to
+ # match.
+
+ # First, look for the xmmreg probe, and if we find it, grab the
+ # argument string.
+ if ![regexp {\n\s+Provider: test\n\s+Name: xmmreg\n[^\n]+\n\s+Arguments: ([^\n]+)\n} $output ignore arguments] {
+ verbose -log "APB: Couldn't find probe at all"
+ return false
+ }
+
+ verbose -log "APB: Matched on '$ignore'"
+ verbose -log "APB: arguments: '$arguments'"
+
+ # Check the the argument string mentions xmm0.
+ if ![regexp {@%?xmm0} $arguments] {
+ verbose -log "APB: Prove doesn't use xmm0 register"
+ return false
+ }
+
+ # Success! We have a probe that uses xmm0 for an argument.
+ return true
+}
+
# Run the tests. We run the tests two different ways: once with a
# plain probe, and once with a probe that has an associated semaphore.
# This returns -1 on failure to compile or start, 0 otherwise.
@@ -29,7 +121,9 @@ proc stap_test {exec_name {args ""}} {
set semaphore_addr_var ""
if {[string first "-DUSE_SEMAPHORES" $args] == -1} {
gdb_test_no_output "set breakpoint always-inserted on"
- set semaphore_addr_var [get_hexadecimal_valueof "&relocation_marker" "0"]
+ set semaphore_addr_var \
+ [get_hexadecimal_valueof "&relocation_marker" "0"\
+ "get original address of relocation_marker"]
}
if ![runto_main] {
@@ -40,10 +134,10 @@ proc stap_test {exec_name {args ""}} {
"check argument not at probe point"
if {[string first "-DUSE_SEMAPHORES" $args] != -1} {
- gdb_test "info probes stap" \
+ gdb_test_lines "info probes stap" "" \
"test *user *$hex *$hex .*"
} else {
- gdb_test "info probes stap" \
+ gdb_test_lines "info probes stap" "" \
"test *user *$hex .*"
}
@@ -54,8 +148,11 @@ proc stap_test {exec_name {args ""}} {
}
if {[string first "-DUSE_SEMAPHORES" $args] == -1} {
+ set updated_semaphore_addr_var \
+ [get_hexadecimal_valueof "&relocation_marker" \
+ "0" "get revised relocation_marker address"]
set relocation_base \
- [expr [get_hexadecimal_valueof "&relocation_marker" "0"] - $semaphore_addr_var]
+ [expr $updated_semaphore_addr_var - $semaphore_addr_var]
if {$relocation_base != 0} {
# Checks that GDB doesn't mistakenly relocate and write to null
# semaphore addresses. If it were to relocate a zero-valued
@@ -103,9 +200,9 @@ proc stap_test {exec_name {args ""}} {
# Reinit GDB, set a breakpoint on probe ps.
delete_breakpoints
if {[runto "-pstap test:ps"]} {
- pass "run to -pstap test:m4"
+ pass "run to -pstap test:ps"
} else {
- fail "run to -pstap test:m4"
+ fail "run to -pstap test:ps"
}
gdb_test "print \$_probe_argc" " = 3" \
@@ -114,6 +211,24 @@ proc stap_test {exec_name {args ""}} {
" = $hex .This is another test message.*" \
"print \$_probe_arg1 for probe ps"
+ # Check the probe is using the xmm0 register.
+ if [check_for_usable_xmm0_probe $exec_name] {
+
+ delete_breakpoints
+ if {[runto "-pstap test:xmmreg"]} {
+ pass "run to -pstap test:xmmreg"
+ } else {
+ fail "run to -pstap test:xmmreg"
+ }
+
+ gdb_test "print \$_probe_argc" " = 1" \
+ "print \$_probe_argc for probe xmmreg"
+ gdb_test "print/x \$_probe_arg0" " = 0x1234" \
+ "check \$_probe_arg0 for probe xmmreg"
+ } else {
+ unsupported "print probe argument from \$xmm0 register"
+ }
+
return 0
}
@@ -169,9 +284,9 @@ proc stap_test_no_debuginfo {exec_name {args ""}} {
# Reinit GDB, set a breakpoint on probe ps.
delete_breakpoints
if {[runto "-pstap test:ps"]} {
- pass "run to -pstap test:m4"
+ pass "run to -pstap test:ps"
} else {
- fail "run to -pstap test:m4"
+ fail "run to -pstap test:ps"
}
gdb_test "print \$_probe_argc" " = 3" \
@@ -180,6 +295,21 @@ proc stap_test_no_debuginfo {exec_name {args ""}} {
" = $hex .This is another test message.*" \
"print \$_probe_arg1 for probe ps"
+ # Reinit GDB, set a breakpoint on probe ps.
+ if { [gdb_count_probes stap test xmmreg] > 0 } {
+ delete_breakpoints
+ if {[runto "-pstap test:xmmreg"]} {
+ pass "run to -pstap test:xmmreg"
+ } else {
+ fail "run to -pstap test:xmmreg"
+ }
+
+ gdb_test "print \$_probe_argc" " = 1" \
+ "print \$_probe_argc for probe xmmreg"
+ gdb_test "print/x \$_probe_arg0" " = 0x1234" \
+ "check \$_probe_arg0 for probe xmmreg"
+ }
+
return 0
}
diff --git a/gdb/testsuite/gdb.base/style.exp b/gdb/testsuite/gdb.base/style.exp
index 2cd155d2cf2..6bb5e1c9ac0 100644
--- a/gdb/testsuite/gdb.base/style.exp
+++ b/gdb/testsuite/gdb.base/style.exp
@@ -13,23 +13,14 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
+load_lib gdb-python.exp
+
# Test CLI output styling.
standard_testfile
# Compile the test executable.
-set test_macros 0
-set options debug
-get_compiler_info
-if { [test_compiler_info "gcc-*"] } {
- lappend options additional_flags=-g3
- set test_macros 1
-} elseif { [test_compiler_info "clang-*"] } {
- lappend options additional_flags=-fdebug-macro
- set test_macros 1
-}
-
-if {[build_executable "failed to build" $testfile $srcfile $options]} {
+if {[build_executable "failed to build" $testfile $srcfile {debug macros}]} {
return -1
}
@@ -73,7 +64,7 @@ proc clean_restart_and_disable { args } {
# CLEAN_RESTART_AND_DISABLE instead of CLEAN_RESTART, this ensures
# that the test operates as expected as styles are disabled.
proc run_style_tests { } {
- global testfile srcfile hex binfile test_macros
+ global testfile srcfile hex binfile
global currently_disabled_style decimal hex
save_vars { env(TERM) } {
@@ -179,16 +170,22 @@ proc run_style_tests { } {
gdb_test_no_output "set width 0" ""
}
- if {$test_macros} {
- set macro_line [gdb_get_line_number "\#define SOME_MACRO"]
- gdb_test "info macro SOME_MACRO" \
- "Defined at $base_file_expr:$macro_line\r\n#define SOME_MACRO 23"
- }
+ set macro_line [gdb_get_line_number "\#define SOME_MACRO"]
+ gdb_test "info macro SOME_MACRO" \
+ "Defined at $base_file_expr:$macro_line\r\n#define SOME_MACRO 23"
gdb_test_no_output "set width 0"
+ # If disassembler styling is being done by the Python pygments
+ # module, then we can't be sure how the 'some_called_function'
+ # symbol will be styled. However, if pygments is not being
+ # used then we can know how the symbol name will be styled.
set main [limited_style main function]
- set func [limited_style some_called_function function]
+ if { $::python_disassembly_styling } {
+ set func "some_called_function"
+ } else {
+ set func [limited_style some_called_function function]
+ }
# Somewhere should see the call to the function.
gdb_test "disassemble main" \
[concat "Dump of assembler code for function $main:.*" \
@@ -299,8 +296,65 @@ proc run_style_tests { } {
# Check that the version string is styled in the output of 'show
# version', and that this styling can be disabled.
set vers [style "GNU gdb.*" version]
- gdb_test "show version" "${vers}.*" \
- "version is styled in 'show version'"
+ set url [limited_style "http:.*html" file]
+ gdb_test "show version" "${vers}.*<$url>.*" \
+ "'show version' is styled"
+ }
+}
+
+# Check that disassembler styling can be disabled. The function that
+# we are disassembling has some minimal styling applied even if the
+# Python pygments module is not available, so, when we disable
+# disassembler styling, we should always see a change in output.
+proc test_disable_disassembler_styling { } {
+ save_vars { env(TERM) } {
+ # We need an ANSI-capable terminal to get the output.
+ setenv TERM ansi
+
+ # Restart GDB with the correct TERM variable setting, this
+ # means that GDB will enable styling.
+ clean_restart_and_disable $::binfile
+
+ set styled_hex [limited_style $::hex address]
+ set main [limited_style main function]
+
+ foreach_with_prefix disasm_styling { on off } {
+ gdb_test_no_output "set style disassembler enabled ${disasm_styling}"
+
+ set saw_header_line false
+ set saw_styled_output_line false
+ set saw_unstyled_output_line false
+ gdb_test_multiple "disassemble main" "" {
+ -re "disassemble main\r\n" {
+ exp_continue
+ }
+ -re "^Dump of assembler code for function $main:" {
+ set saw_header_line true
+ exp_continue
+ }
+ -re "^\\s+${styled_hex}\\s+<\[^>\]+>:\\s+\[^\r\n\033\]+\r\n" {
+ set saw_unstyled_output_line true
+ exp_continue
+ }
+ -re "^\\s+${styled_hex}\\s+<\[^>\]+>:\\s+\[^\r\n\]+\033\[^\r\n\]+\r\n" {
+ set saw_styled_output_line true
+ exp_continue
+ }
+ -re "^End of assembler dump\\.\r\n" {
+ exp_continue
+ }
+ -re "^$::gdb_prompt $" {
+ gdb_assert { $saw_header_line }
+ if { $disasm_styling } {
+ gdb_assert { $saw_styled_output_line }
+ gdb_assert { !$saw_unstyled_output_line }
+ } else {
+ gdb_assert { !$saw_styled_output_line }
+ gdb_assert { $saw_unstyled_output_line }
+ }
+ }
+ }
+ }
}
}
@@ -317,6 +371,15 @@ proc test_startup_version_string { } {
gdb_test "" "${vers}.*" "version is styled at startup"
}
+# Check to see if the Python styling of disassembler output is
+# expected or not, this styling requires Python support in GDB, and
+# the Python pygments module to be available.
+clean_restart ${binfile}
+if {![skip_python_tests] && [gdb_py_module_available "pygments"]} {
+ set python_disassembly_styling true
+} else {
+ set python_disassembly_styling false
+}
# Run tests with all styles in their default state.
with_test_prefix "all styles enabled" {
@@ -333,5 +396,10 @@ foreach style { title file function highlight variable \
}
}
+# Check that the disassembler styling can be disabled.
+if { $python_disassembly_styling } {
+ test_disable_disassembler_styling
+}
+
# Finally, check the styling of the version string during startup.
test_startup_version_string
diff --git a/gdb/testsuite/gdb.base/until-trailing-insns.c b/gdb/testsuite/gdb.base/until-trailing-insns.c
new file mode 100644
index 00000000000..749695b3db1
--- /dev/null
+++ b/gdb/testsuite/gdb.base/until-trailing-insns.c
@@ -0,0 +1,35 @@
+/* Copyright 2022 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+int
+main ()
+{ /* TAG: main prologue */
+ asm ("main_label: .globl main_label");
+ asm ("loop_start: .globl loop_start");
+ int a, i;
+ i = 0; /* TAG: loop assignment */
+ while (1) /* TAG: loop line */
+ {
+ asm ("loop_condition: .globl loop_condition");
+ if (i >= 10) break; /* TAG: loop condition */
+ asm ("loop_code: .globl loop_code");
+ a = i; /* TAG: loop code */
+ asm ("loop_increment: .globl loop_increment");
+ i++; /* TAG: loop increment */
+ asm ("loop_jump: .globl loop_jump");
+ }
+ asm ("main_return: .globl main_return");
+ return 0; /* TAG: main return */
+}
diff --git a/gdb/testsuite/gdb.base/until-trailing-insns.exp b/gdb/testsuite/gdb.base/until-trailing-insns.exp
new file mode 100644
index 00000000000..ca5b388c0a6
--- /dev/null
+++ b/gdb/testsuite/gdb.base/until-trailing-insns.exp
@@ -0,0 +1,183 @@
+# Copyright 2022 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# This test sets up debug information for a loop as we see in some cases
+# from clang-13. In this situation, instructions at both the start and end
+# of the loop are associated (in the line table), with the header line of
+# the loop (line 10 in the example below).
+#
+# At the end of the loop we see some instructions marked as not a statement,
+# but still associated with the same loop header line. For example,
+# consider the following C code:
+#
+# 10: for (i = 0; i < 10; ++i)
+# 11: loop_body ();
+# 12: other_stuff ();
+#
+# Transformed into the following pseudo-assembler, with associated line table:
+#
+# Address | Pseudo-Assembler | Line | Is-Statement?
+#
+# 0x100 | i = 0 | 10 | Yes
+# 0x104 | loop_body () | 11 | Yes
+# 0x108 | i = i + 1 | 10 | Yes
+# 0x10c | if (i < 10): | 10 | No
+# 0x110 | goto 0x104 | 10 | No
+# 0x114 | other_stuff () | 12 | Yes
+#
+# Notice the two non-statement instructions at the end of the loop.
+#
+# The problem here is that when we reach address 0x108 and use 'until',
+# hoping to leave the loop, GDB sets up a stepping range that runs from the
+# start of the function (0x100 in our example) to the end of the current
+# line table entry, that is 0x10c in our example. GDB then starts stepping
+# forward.
+#
+# When 0x10c is reached GDB spots that we have left the stepping range, that
+# the new location is not a statement, and that the new location is
+# associated with the same source line number as the previous stepping
+# range. GDB then sets up a new stepping range that runs from 0x10c to
+# 0x114, and continues stepping forward.
+#
+# Within that stepping range the inferior hits the goto and loops back to
+# address 0x104.
+#
+# At 0x104 GDB spots that we have left the previous stepping range, that the
+# new address is marked as a statement, and that the new address is for a
+# different source line. As a result, GDB stops and returns control to the
+# user. This is not what the user was expecting, they expected GDB not to
+# stop until they were outside of the loop.
+#
+# The fix is that, when the user issues the 'until' command, and GDB sets up
+# the initial stepping range, GDB will check subsequent SALs to see if they
+# are non-statements associated with the same line number. If they are then
+# the end of the initial stepping range is pushed out to the end of the
+# non-statement SALs.
+#
+# In our example above, the user is at 0x108 and uses 'until'. GDB now sets
+# up a stepping range from the start of the function 0x100 to 0x114, the
+# first address associated with a different line.
+#
+# Now as GDB steps around the loop it never leaves the initial stepping
+# range. It is only when GDB exits the loop that we leave the stepping
+# range, and the stepping finishes at address 0x114.
+#
+# This test checks this behaviour using the DWARF assembler.
+
+load_lib dwarf.exp
+
+# This test can only be run on targets which support DWARF-2 and use gas.
+if {![dwarf2_support]} {
+ unsupported "dwarf2 support required for this test"
+ return 0
+}
+
+if [get_compiler_info] {
+ return -1
+}
+
+# The DWARF assembler requires the gcc compiler.
+if {!$gcc_compiled} {
+ unsupported "gcc is required for this test"
+ return 0
+}
+
+standard_testfile .c .S
+
+if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile}] } {
+ return -1
+}
+
+set asm_file [standard_output_file $srcfile2]
+Dwarf::assemble $asm_file {
+ global srcdir subdir srcfile
+ declare_labels integer_label L
+ set int_size [get_sizeof "int" 4]
+
+ # Find start address and length for our functions.
+ lassign [function_range main [list ${srcdir}/${subdir}/$srcfile]] \
+ main_start main_len
+ set main_end "$main_start + $main_len"
+
+ cu {} {
+ compile_unit {
+ {language @DW_LANG_C}
+ {name until-trailing-isns.c}
+ {stmt_list $L DW_FORM_sec_offset}
+ {low_pc 0 addr}
+ } {
+ subprogram {
+ {external 1 flag}
+ {name main}
+ {low_pc $main_start addr}
+ {high_pc $main_len DW_FORM_data4}
+ }
+ }
+ }
+
+ lines {version 2 default_is_stmt 1} L {
+ include_dir "${srcdir}/${subdir}"
+ file_name "$srcfile" 1
+
+ # Generate a line table program. This mimicks clang-13's behavior
+ # of adding some !is_stmt at the end of a loop line, making until
+ # not work properly.
+ program {
+ DW_LNE_set_address $main_start
+ line [gdb_get_line_number "TAG: main prologue"]
+ DW_LNS_copy
+ DW_LNE_set_address loop_start
+ line [gdb_get_line_number "TAG: loop line"]
+ DW_LNS_copy
+ DW_LNE_set_address loop_condition
+ line [gdb_get_line_number "TAG: loop line"]
+ DW_LNS_negate_stmt
+ DW_LNS_copy
+ DW_LNE_set_address loop_code
+ line [gdb_get_line_number "TAG: loop code"]
+ DW_LNS_negate_stmt
+ DW_LNS_copy
+ DW_LNE_set_address loop_increment
+ line [gdb_get_line_number "TAG: loop line"]
+ DW_LNS_copy
+ DW_LNE_set_address loop_jump
+ line [gdb_get_line_number "TAG: loop line"]
+ DW_LNS_negate_stmt
+ DW_LNS_copy
+ DW_LNE_set_address main_return
+ line [gdb_get_line_number "TAG: main return"]
+ DW_LNS_negate_stmt
+ DW_LNS_copy
+ DW_LNE_set_address $main_end
+ line [expr [gdb_get_line_number "TAG: main return"] + 1]
+ DW_LNS_copy
+ DW_LNE_end_sequence
+ }
+ }
+
+}
+
+if { [prepare_for_testing "failed to prepare" ${testfile} \
+ [list $srcfile $asm_file] {nodebug} ] } {
+ return -1
+}
+
+if ![runto_main] {
+ return -1
+}
+
+gdb_test "next" ".* TAG: loop code .*" "inside the loop"
+gdb_test "next" ".* TAG: loop line .*" "ending of loop"
+gdb_test "until" ".* TAG: main return .*" "left loop"
diff --git a/gdb/testsuite/gdb.base/vfork-follow-parent.c b/gdb/testsuite/gdb.base/vfork-follow-parent.c
new file mode 100644
index 00000000000..5fdd051523a
--- /dev/null
+++ b/gdb/testsuite/gdb.base/vfork-follow-parent.c
@@ -0,0 +1,46 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+ Copyright 2021-2022 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#include <unistd.h>
+
+static volatile int unblock_parent = 0;
+
+static void
+break_parent (void)
+{
+}
+
+int
+main (void)
+{
+ alarm (30);
+
+ if (vfork () != 0)
+ {
+ /* We want to guarantee that GDB processes the child exit event before
+ the parent's breakpoint hit event. Make the parent wait on this
+ variable that is eventually set by the test. */
+ while (!unblock_parent)
+ usleep (1000);
+
+ break_parent ();
+ }
+ else
+ _exit (0);
+
+ return 0;
+}
diff --git a/gdb/testsuite/gdb.base/vfork-follow-parent.exp b/gdb/testsuite/gdb.base/vfork-follow-parent.exp
new file mode 100644
index 00000000000..1ffc54e6293
--- /dev/null
+++ b/gdb/testsuite/gdb.base/vfork-follow-parent.exp
@@ -0,0 +1,80 @@
+# Copyright 2021-2022 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Test running into vfork while "detach-on-fork" is off and "follow-fork-mode"
+# is parent. This shows a "Can not resume the parent process..." message. If
+# the user wants to resume execution, they have to use either "set
+# schedule-multiple on" or "set detach-on-fork on". Test these two resolution
+# methods.
+
+standard_testfile
+
+if { [build_executable "failed to prepare" \
+ ${testfile} ${srcfile}] } {
+ return
+}
+
+# Test running to the "Can not resume the parent..." message. Then, resolve
+# the situation using the method in RESOLUTION_METHOD, either "detach-on-fork"
+# or "schedule-multiple" (the two alternatives the message suggests to the
+# user).
+
+proc do_test { resolution_method } {
+ clean_restart $::binfile
+
+ gdb_test_no_output "set detach-on-fork off"
+
+ if { ![runto_main] } {
+ return
+ }
+
+ gdb_test "break break_parent"
+
+ gdb_test "continue" \
+ "Can not resume the parent process over vfork .*" \
+ "continue to vfork"
+
+ # Try to continue again from there, expecting the same message. It
+ # exercises a different code path in GDB.
+ gdb_test "continue" \
+ "Can not resume the parent process over vfork .*" \
+ "try to continue from vfork"
+
+ # Unblock the execution using the specified resolution method.
+ if { $resolution_method == "detach-on-fork" } {
+ # Make GDB detach the child.
+ gdb_test "set detach-on-fork on"
+ gdb_test "print unblock_parent = 1" " = 1"
+ } elseif { $resolution_method == "schedule-multiple" } {
+ # Make GDB resume both inferiors. The parent is blocked while the
+ # children executes, so the continue will make the child reach the
+ # end.
+ gdb_test "set schedule-multiple on"
+ gdb_test "continue" "$::inferior_exited_re normally.*" \
+ "continue to end of inferior 2"
+ gdb_test "inferior 1" ".*Switching to inferior 1.*"
+ gdb_test "print unblock_parent = 1" " = 1"
+ } else {
+ error "invalid resolution method: $resolution_method"
+ }
+
+ # Continue from the vfork call to the breakpoint.
+ gdb_test "continue" "Breakpoint $::decimal, break_parent .*" \
+ "continue to break_parent"
+}
+
+foreach_with_prefix resolution_method {detach-on-fork schedule-multiple} {
+ do_test $resolution_method
+}
diff --git a/gdb/testsuite/gdb.base/watch-before-fork.c b/gdb/testsuite/gdb.base/watch-before-fork.c
new file mode 100644
index 00000000000..4d6c91e1e6f
--- /dev/null
+++ b/gdb/testsuite/gdb.base/watch-before-fork.c
@@ -0,0 +1,29 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+ Copyright 2021-2022 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#include <sys/types.h>
+#include <unistd.h>
+
+volatile int global_var = 5;
+
+int
+main (void)
+{
+ global_var = 1;
+ fork ();
+ return 0;
+}
diff --git a/gdb/testsuite/gdb.base/watch-before-fork.exp b/gdb/testsuite/gdb.base/watch-before-fork.exp
new file mode 100644
index 00000000000..7c2a481e454
--- /dev/null
+++ b/gdb/testsuite/gdb.base/watch-before-fork.exp
@@ -0,0 +1,99 @@
+# Copyright 2021-2022 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Regression test for PR gdb/28621. Test that GDB does not misreport
+# a watchpoint hit when a previous watchpoint hit is immediately
+# followed by a catchpoint hit.
+
+# This test uses "awatch".
+if {[skip_hw_watchpoint_access_tests]} {
+ return
+}
+
+standard_testfile
+
+if {[build_executable "failed to prepare" $testfile $srcfile debug]} {
+ return
+}
+
+# Check that fork catchpoints are supported. Returns 1 if they are.
+# Returns 0 and issues unsupported if they are not supported. If it
+# couldn't be determined, returns 0 (but does not call unsupported).
+
+proc_with_prefix catch_fork_supported {} {
+ clean_restart $::testfile
+
+ if { ![runto_main] } {
+ return 0
+ }
+
+ # Verify that the system supports "catch fork".
+ gdb_test "catch fork" "Catchpoint \[0-9\]* \\(fork\\)" "insert first fork catchpoint"
+ set has_fork_catchpoints -1
+ gdb_test_multiple "continue" "continue to first fork catchpoint" {
+ -re -wrap ".*Your system does not support this type\r\nof catchpoint.*" {
+ set has_fork_catchpoints 0
+ pass $gdb_test_name
+ }
+ -re -wrap ".*Catchpoint.*" {
+ set has_fork_catchpoints 1
+ pass $gdb_test_name
+ }
+ }
+
+ if {$has_fork_catchpoints == 1} {
+ return 1
+ } elseif {$has_fork_catchpoints == -1} {
+ return 0
+ } else {
+ unsupported "catch fork not supported"
+ return 0
+ }
+}
+
+# The test proper.
+
+proc_with_prefix test {} {
+ clean_restart $::testfile
+
+ if { ![runto_main] } {
+ return 0
+ }
+
+ gdb_test "awatch global_var" \
+ "Hardware access \\(read/write\\) watchpoint .*: global_var.*" \
+ "watchpoint on global variable"
+
+ gdb_test "continue" \
+ "Hardware access \\(read/write\\) watchpoint .*: global_var.*" \
+ "continue to watchpoint"
+
+ set seen_watchpoint 0
+ gdb_test_multiple "continue" "continue to catch fork" {
+ -re "watchpoint" {
+ set seen_watchpoint 1
+ exp_continue
+ }
+ -re "$::gdb_prompt " {
+ gdb_assert { !$seen_watchpoint } $gdb_test_name
+ }
+ }
+}
+
+if {![catch_fork_supported] } {
+ return
+}
+
+test
diff --git a/gdb/testsuite/gdb.cp/align.exp b/gdb/testsuite/gdb.cp/align.exp
index 6cda04798e8..018a297cde9 100644
--- a/gdb/testsuite/gdb.cp/align.exp
+++ b/gdb/testsuite/gdb.cp/align.exp
@@ -80,8 +80,19 @@ puts $outfile {
unsigned a_int3 = alignof (int[3]);
-#if !defined (__clang__)
- unsigned a_void = alignof (void);
+#if defined __GNUC__ && !defined __clang__
+ /* As a GNU C extension, GCC allows void pointer arithmetic, with
+ sizeof (void) == 1.
+ Another GNU C extension is __alignof__, which can be used to get
+ __alignof__ (void), which is also 1. This is unavailabe on clang.
+ GCC used to only warn for alignof (void), but starting with GCC 12.1,
+ as well as GCC 11.3, it will generate an error (note that using
+ -std=gnu++11 does not prevent the error).
+ So we avoid using alignof, and use __alignof__ instead. */
+ unsigned a_void = __alignof__ (void);
+#else
+ /* No support for __alignof__ (void), hardcode value. */
+ unsigned a_void = 1;
#endif
struct base { char c; };
@@ -173,13 +184,5 @@ foreach type $typelist {
set expected [get_integer_valueof a_int3 0]
gdb_test "print alignof(int\[3\])" " = $expected"
-# As an extension, GCC allows void pointer arithmetic, with
-# sizeof(void) and alignof(void) both 1. This test checks
-# GDB's support of GCC's extension.
-if [test_compiler_info clang*] {
- # Clang doesn't support GCC's extension.
- set expected 1
-} else {
- set expected [get_integer_valueof a_void 0]
-}
+set expected [get_integer_valueof a_void 0]
gdb_test "print alignof(void)" " = $expected"
diff --git a/gdb/testsuite/gdb.cp/array-indices.exp b/gdb/testsuite/gdb.cp/array-indices.exp
new file mode 100644
index 00000000000..514f6b69407
--- /dev/null
+++ b/gdb/testsuite/gdb.cp/array-indices.exp
@@ -0,0 +1,22 @@
+# Copyright 2022 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Test the printing of element indices in C++ arrays.
+
+if {[skip_cplus_tests]} { continue }
+
+set lang c++
+
+source ${srcdir}/gdb.base/array-indices.exp.tcl
diff --git a/gdb/testsuite/gdb.cp/array-repeat.exp b/gdb/testsuite/gdb.cp/array-repeat.exp
new file mode 100644
index 00000000000..d631bb47e4f
--- /dev/null
+++ b/gdb/testsuite/gdb.cp/array-repeat.exp
@@ -0,0 +1,22 @@
+# Copyright 2022 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Test the detection and printing of repeated elements in C++ arrays.
+
+if {[skip_cplus_tests]} { continue }
+
+set lang c++
+
+source ${srcdir}/gdb.base/array-repeat.exp.tcl
diff --git a/gdb/testsuite/gdb.cp/casts.cc b/gdb/testsuite/gdb.cp/casts.cc
index 543db896d3d..ea4dc961793 100644
--- a/gdb/testsuite/gdb.cp/casts.cc
+++ b/gdb/testsuite/gdb.cp/casts.cc
@@ -34,6 +34,20 @@ struct DoublyDerived : public VirtuallyDerived,
{
};
+struct Left
+{
+ int left;
+};
+
+struct Right
+{
+ int right;
+};
+
+struct LeftRight : public Left, public Right
+{
+};
+
int
main (int argc, char **argv)
{
@@ -48,5 +62,11 @@ main (int argc, char **argv)
Alpha *ad = &derived;
Alpha *add = &doublyderived;
+ LeftRight gd;
+ gd.left = 23;
+ gd.right = 27;
+ unsigned long long gd_value = (unsigned long long) &gd;
+ unsigned long long r_value = (unsigned long long) (Right *) &gd;
+
return 0; /* breakpoint spot: casts.exp: 1 */
}
diff --git a/gdb/testsuite/gdb.cp/casts.exp b/gdb/testsuite/gdb.cp/casts.exp
index cda870f77a4..5d0a52401a8 100644
--- a/gdb/testsuite/gdb.cp/casts.exp
+++ b/gdb/testsuite/gdb.cp/casts.exp
@@ -174,6 +174,12 @@ gdb_test "print dynamic_cast<Gamma *> (add)" \
" = \\(Gamma \\*\\) $nonzero_hex" \
"dynamic_cast to sibling"
+gdb_test "print (unsigned long long) &gd == gd_value" " = true"
+gdb_test "print (unsigned long long) (LeftRight *) (Right *) &gd == gd_value" \
+ " = true"
+gdb_test "print (unsigned long long) (LeftRight *) (Right *) r_value == gd_value" \
+ " = true"
+
if {[prepare_for_testing "failed to prepare" ${testfile}03 $srcfile2 \
{debug c++ additional_flags=-std=c++03}]} {
return -1
diff --git a/gdb/testsuite/gdb.cp/overload.cc b/gdb/testsuite/gdb.cp/overload.cc
index 5c782a46104..ab015721b2b 100644
--- a/gdb/testsuite/gdb.cp/overload.cc
+++ b/gdb/testsuite/gdb.cp/overload.cc
@@ -93,10 +93,15 @@ class A {};
class B: public A {};
class C: public B {};
class D: C {};
+class E {};
+class F {};
int bar (A) { return 11; }
int bar (B) { return 22; }
+int bar2 (E &, A &) { return 33; }
+int bar2 (F &, B &) { return 44; }
+
int intintfunc (int x) { return x; }
int main ()
@@ -119,11 +124,16 @@ int main ()
B b;
C c;
D d;
+ E e;
+ F f;
bar (a);
bar (b);
bar (c);
+ bar2 (e, b);
+ bar2 (f, b);
+
char *str = (char *) "A";
foo foo_instance1(111);
foo foo_instance2(222, str);
diff --git a/gdb/testsuite/gdb.cp/overload.exp b/gdb/testsuite/gdb.cp/overload.exp
index 56cd5ac2106..73ca0d2d55c 100644
--- a/gdb/testsuite/gdb.cp/overload.exp
+++ b/gdb/testsuite/gdb.cp/overload.exp
@@ -259,6 +259,9 @@ gdb_test "print bar(b)" "= 22"
gdb_test "print bar(c)" "= 22"
gdb_test "print bar(d)" "= 22"
+# PR c++/28901 - gdb thought this was ambiguous.
+gdb_test "print bar2(e, b)" " = 33"
+
# ---
# List overloaded functions.
diff --git a/gdb/testsuite/gdb.cp/ptype-flags.cc b/gdb/testsuite/gdb.cp/ptype-flags.cc
index 950fbcd0da5..8c0ee1545da 100644
--- a/gdb/testsuite/gdb.cp/ptype-flags.cc
+++ b/gdb/testsuite/gdb.cp/ptype-flags.cc
@@ -38,7 +38,30 @@ public:
double method(void) { return 23.0; }
};
+namespace ns
+{
+ typedef double scoped_double;
+}
+
+typedef double global_double;
+
+class TypedefHolder
+{
+public:
+ double a;
+ ns::scoped_double b;
+ global_double c;
+
+private:
+ typedef double class_double;
+ class_double d;
+
+ double method1(ns::scoped_double) { return 24.0; }
+ double method2(global_double) { return 24.0; }
+};
+
Holder<int> value;
+TypedefHolder value2;
int main()
{
diff --git a/gdb/testsuite/gdb.cp/ptype-flags.exp b/gdb/testsuite/gdb.cp/ptype-flags.exp
index d1974117e2b..f88c83e03ce 100644
--- a/gdb/testsuite/gdb.cp/ptype-flags.exp
+++ b/gdb/testsuite/gdb.cp/ptype-flags.exp
@@ -33,7 +33,9 @@ if ![runto_main] then {
gdb_test_no_output "set language c++" ""
gdb_test_no_output "set width 0" ""
-proc do_check {name {flags ""} {show_typedefs 1} {show_methods 1} {raw 0}} {
+proc do_check_holder {name {flags ""} {show_typedefs 1} {show_methods 1}
+ {raw 0}} {
+
set contents {
{ base "public Base<T>" }
{ field public "Simple<T> t;" }
@@ -62,24 +64,76 @@ proc do_check {name {flags ""} {show_typedefs 1} {show_methods 1} {raw 0}} {
"" {} $flags
}
-do_check "basic test"
-do_check "no methods" "/m" 1 0
-do_check "no typedefs" "/t" 0 1
-do_check "no methods or typedefs" "/mt" 0 0
+proc do_check_typedef_holder {name {flags ""} {show_typedefs 1} {show_methods 1}
+ {raw 0}} {
+
+ set contents {
+ { field public "double a;" }
+ { field public "ns::scoped_double b;" }
+ { field public "global_double c;" }
+ }
+
+ if {$show_typedefs} {
+ lappend contents { typedef private "typedef double class_double;" }
+ }
+
+ if {$show_methods} {
+ lappend contents { method private "double method1(ns::scoped_double);" }
+ lappend contents { method private "double method2(global_double);" }
+ }
+
+ if {$raw} {
+ lappend contents { field private "TypedefHolder::class_double d;" }
+ } else {
+ lappend contents { field private "class_double d;" }
+ }
+
+ cp_test_ptype_class value2 $name "class" "TypedefHolder" $contents \
+ "" {} $flags
+}
-do_check "raw" "/r" 1 1 1
-do_check "raw no methods" "/rm" 1 0 1
-do_check "raw no typedefs" "/rt" 0 1 1
-do_check "raw no methods or typedefs" "/rmt" 0 0 1
+do_check_holder "basic test"
+do_check_holder "no methods" "/m" 1 0
+do_check_holder "no typedefs" "/t" 0 1
+do_check_holder "no methods or typedefs" "/mt" 0 0
+do_check_typedef_holder "typdefs class: basic test"
+do_check_typedef_holder "typdefs class: no methods" "/m" 1 0
+do_check_typedef_holder "typdefs class: no typedefs" "/t" 0 1 0
+do_check_typedef_holder "typdefs class:no methods or typedefs" "/mt" 0 0
+
+do_check_holder "raw" "/r" 1 1 1
+do_check_holder "raw no methods" "/rm" 1 0 1
+do_check_holder "raw no typedefs" "/rt" 0 1 1
+do_check_holder "raw no methods or typedefs" "/rmt" 0 0 1
+do_check_typedef_holder "typedef class: raw" "/r" 1 1 1
+do_check_typedef_holder "typedef class: raw no methods" "/rm" 1 0 1
+do_check_typedef_holder "typedef class: raw no typedefs" "/rt" 0 1 1
+do_check_typedef_holder "typedef class: raw no methods or typedefs" "/rmt" 0 0 1
gdb_test_no_output "set print type methods off"
-do_check "basic test, default methods off" "" 1 0
-do_check "methods, default methods off" "/M" 1 1
-do_check "no typedefs, default methods off" "/t" 0 0
-do_check "methods, no typedefs, default methods off" "/Mt" 0 1
+do_check_holder "basic test, default methods off" "" 1 0
+do_check_holder "methods, default methods off" "/M" 1 1
+do_check_holder "no typedefs, default methods off" "/t" 0 0
+do_check_holder "methods, no typedefs, default methods off" "/Mt" 0 1
+do_check_typedef_holder \
+ "typedef class: basic test, default methods off" "" 1 0
+do_check_typedef_holder \
+ "typedef class: methods, default methods off" "/M" 1 1
+do_check_typedef_holder \
+ "typedef class: no typedefs, default methods off" "/t" 0 0
+do_check_typedef_holder \
+ "typedef class: methods, no typedefs, default methods off" "/Mt" 0 1
gdb_test_no_output "set print type typedefs off"
-do_check "basic test, default methods+typedefs off" "" 0 0
-do_check "methods, default methods+typedefs off" "/M" 0 1
-do_check "typedefs, default methods+typedefs off" "/T" 1 0
-do_check "methods typedefs, default methods+typedefs off" "/MT" 1 1
+do_check_holder "basic test, default methods+typedefs off" "" 0 0
+do_check_holder "methods, default methods+typedefs off" "/M" 0 1
+do_check_holder "typedefs, default methods+typedefs off" "/T" 1 0
+do_check_holder "methods typedefs, default methods+typedefs off" "/MT" 1 1
+do_check_typedef_holder \
+ "typedef class: basic test, default methods+typedefs off" "" 0 0
+do_check_typedef_holder \
+ "typedef class: methods, default methods+typedefs off" "/M" 0 1
+do_check_typedef_holder \
+ "typedef class: typedefs, default methods+typedefs off" "/T" 1 0
+do_check_typedef_holder \
+ "typedef class: methods typedefs, default methods+typedefs off" "/MT" 1 1
diff --git a/gdb/testsuite/gdb.cp/templates.cc b/gdb/testsuite/gdb.cp/templates.cc
index d5b24af3a4e..1b9a2d48819 100644
--- a/gdb/testsuite/gdb.cp/templates.cc
+++ b/gdb/testsuite/gdb.cp/templates.cc
@@ -742,6 +742,34 @@ template<class C> int FunctionArg<C>::method(Empty<void (FunctionArg<C>)> &arg)
Empty<void(FunctionArg<int>)> empty;
FunctionArg<int> arg;
+template <typename T1>
+struct Foozle
+{
+ int x;
+ T1 t;
+ template <typename T2>
+ T2 fogey (T2 plop);
+};
+
+template <typename T1>
+template <typename T2>
+T2 Foozle<T1>::fogey (T2 plop)
+{
+ return plop;
+}
+
+template <typename T>
+int operator< (T &lhs, T &rhs)
+{
+ return 0;
+}
+
+template <typename T>
+int operator<< (T &obj, T &val)
+{
+ return 1;
+};
+
int main()
{
int i;
@@ -815,5 +843,24 @@ int main()
arg.method(empty);
+ Empty<int> e;
+ Foozle<int> fzi;
+ x = fzi.fogey (0);
+ c = fzi.fogey<char> ('a');
+ e = fzi.fogey<Empty<int>> (e);
+ Foozle<char> fzc;
+ c = fzc.fogey ('b');
+ x = fzc.fogey<int> (0);
+ e = fzc.fogey<Empty<int>> (e);
+ Foozle<Empty<int>> fze;
+ e = fze.fogey (e);
+ c = fze.fogey<char> ('c');
+ x = fze.fogey<int> (0);
+
+ z = e < e;
+ z += e << e;
+ z += fzi < fzi;
+ z += fzi << fzi;
+
return 0; /* Final breakpoint. */
}
diff --git a/gdb/testsuite/gdb.cp/templates.exp b/gdb/testsuite/gdb.cp/templates.exp
index 885fb86bc00..a798054d19c 100644
--- a/gdb/testsuite/gdb.cp/templates.exp
+++ b/gdb/testsuite/gdb.cp/templates.exp
@@ -614,3 +614,70 @@ gdb_test "print Garply<Garply<char> >::garply" \
# Now should work fine
gdb_test "break Garply<Garply<char> >::garply" \
"Breakpoint \[0-9\]* at $hex: file .*templates.cc, line.*"
+
+#
+# Template wild-matching tests
+#
+
+# Turn off "ask" when multiple symbols are seen.
+gdb_test_no_output "set multiple-symbols all"
+
+# Test setting breakpoints in a method of all class template instantiations,
+# including overloads.
+gdb_test "break Foo::foo" "Breakpoint.*at.* \\(3 locations\\)"
+foreach t [list "int" "char" "volatile char *"] {
+ gdb_breakpoint "Foo<$t>::foo (int, $t)"
+ gdb_breakpoint "Foo::foo (int, $t)"
+}
+
+gdb_test "break Bar::bar" "Breakpoint.*at.* \\(2 locations\\)"
+gdb_test "break Bar::bar (int, int)" "Breakpoint.*at.* \\(2 locations\\)"
+foreach val [list 1 33] {
+ gdb_breakpoint "Bar<int, $val>::bar (int, int)"
+}
+
+# Test setting breakpoints in a member function template of a class template,
+# including overloads.
+gdb_test "break Foozle::fogey" "Breakpoint.*at.* \\(9 locations\\)" \
+ "break at template method fogey"
+foreach t [list "int" "char" "Empty<int>"] {
+ gdb_test "break Foozle::fogey ($t)" "Breakpoint.*at.* \\(3 locations\\)"
+ gdb_test "break Foozle::fogey<$t>" "Breakpoint.*at.* \\(3 locations\\)"
+ foreach u [list "int" "char" "Empty<int>"] {
+ gdb_breakpoint "Foozle<$t>::fogey<$u>" message
+ gdb_breakpoint "Foozle<$t>::fogey<$u> ($u)" message
+ }
+}
+
+# Test templated operators < and <<. Restrict results to only the test
+# source file.
+# operator<:
+# 1. operator< (const T2&, const T2&)
+# 2. operator< (const T2&, char)
+# 3. operator< <Empty<int>>
+# 4. operator< <Foozle<in>>
+#
+# operator<<:
+# 1. operator<< <Empty<int>>
+# 2. operator<< <Foozle<int>>
+gdb_test "break -source $srcfile -func operator<" \
+ "Breakpoint.*at.* \\(4 locations\\)"
+gdb_test "break -source $srcfile -func operator<<" \
+ "Breakpoint.*at.* \\(2 locations\\)"
+foreach t [list "Empty" "Foozle"] {
+ set tt "$t<int>"
+ gdb_breakpoint "operator< <$tt>" message
+ gdb_breakpoint "operator<< <$tt>" message
+
+ # Try a specific instance, both with and without whitespace
+ # after the template-template parameter.
+ gdb_breakpoint "operator< <$tt> ($tt&, $tt&)" message
+ gdb_breakpoint "operator< <$tt > ($tt&, $tt&)" message
+ gdb_breakpoint "operator<< <$tt> ($tt&, $tt&)" message
+ gdb_breakpoint "operator<< <$tt > ($tt&, $tt&)" message
+}
+
+# Test that "-qualified" finds no matching locations.
+gdb_test_no_output "set breakpoint pending off"
+gdb_test "break -qualified Foozle::fogey" \
+ "Function \"Foozle::fogey\" not defined."
diff --git a/gdb/testsuite/gdb.debuginfod/fetch_src_and_symbols.exp b/gdb/testsuite/gdb.debuginfod/fetch_src_and_symbols.exp
index 5912c38c266..74d026464b9 100644
--- a/gdb/testsuite/gdb.debuginfod/fetch_src_and_symbols.exp
+++ b/gdb/testsuite/gdb.debuginfod/fetch_src_and_symbols.exp
@@ -63,6 +63,11 @@ if { [gdb_compile "$sourcetmp" "$binfile" executable {debug}] != "" } {
return -1
}
+if { [gdb_compile "$sourcetmp" "${binfile}2" executable {debug}] != "" } {
+ fail "compile"
+ return -1
+}
+
# Write some assembly that just has a .gnu_debugaltlink section.
# Copied from testsuite/gdb.dwarf2/dwzbuildid.exp.
proc write_just_debugaltlink {filename dwzname buildid} {
@@ -114,6 +119,8 @@ proc write_dwarf_file {filename buildid {value 99}} {
}
}
+set corefile [standard_output_file "corefile"]
+
proc no_url { } {
global binfile outputdir debugdir
@@ -167,6 +174,38 @@ proc no_url { } {
gdb_test "file ${binfile}_alt.o" \
".*could not find '.gnu_debugaltlink'.*" \
"file [file tail ${binfile}_alt.o]"
+
+ # Generate a core file and test that gdb cannot find the executable
+ clean_restart ${binfile}2
+ gdb_test "start" "Temporary breakpoint.*"
+ gdb_test "generate-core-file $::corefile" "Saved corefile $::corefile" \
+ "file [file tail $::corefile] gen"
+ file rename -force ${binfile}2 $debugdir
+
+ clean_restart
+ gdb_test "core $::corefile" ".*in ?? ().*" "file [file tail $::corefile]"
+}
+
+# Test that GDB prints the debuginfod URLs when loading files. URLS
+# is the string set in the DEBUGINFOD_URLS environment variable.
+# PATTERN_RE is the URLs pattern we expect to see out of GDB. TEST is
+# the test name.
+
+proc test_urls {urls pattern_re test} {
+ setenv DEBUGINFOD_URLS $urls
+ clean_restart
+
+ if {$pattern_re != ""} {
+ set urls_re " +${pattern_re}\r\n"
+ } else {
+ set urls_re ""
+ }
+
+ # Use "with confirm off" to avoid having to deal with the
+ # "Enable debuginfod for this session? (y or [n])" question.
+ gdb_test "with confirm off -- file $::binfile" \
+ "following URLs:\r\n${urls_re}Debuginfod .*" \
+ $test
}
proc local_url { } {
@@ -234,6 +273,11 @@ proc local_url { } {
gdb_test "br main" "Breakpoint 1 at.*file.*"
gdb_test "l" ".*This program is distributed in the hope.*"
+ # gdb should now find the executable file
+ clean_restart
+ gdb_test "core $::corefile" ".*return 0.*" "file [file tail $::corefile]" \
+ "Enable debuginfod?.*" "y"
+
# gdb should now find the debugaltlink file
clean_restart
gdb_test "file ${binfile}_alt.o" \
@@ -257,6 +301,55 @@ proc local_url { } {
gdb_test_no_output "set debuginfod enabled on"
gdb_test "file $binfile" ".*Reading symbols from.*debuginfo.*" \
"file [file tail $binfile] cmd on"
+
+ # Test that URLs are printed correctly for the first-use notice.
+
+ # Empty URLS disables Debuginfod.
+ setenv DEBUGINFOD_URLS ""
+ clean_restart
+ # Disable confirmation to avoid having to deal with a query. See
+ # test_urls.
+ set file_cmd "with confirm off -- file $binfile"
+ gdb_test_multiple $file_cmd "notice empty URL" {
+ -re -wrap "This GDB supports auto-downloading.*" {
+ fail $gdb_test_name
+ }
+ -re -wrap "" {
+ pass $gdb_test_name
+ }
+ }
+
+ # Whitespace-only URLS disables Debuginfod.
+ setenv DEBUGINFOD_URLS " "
+ clean_restart
+ gdb_test_multiple $file_cmd "notice whitespace URL" {
+ -re -wrap "This GDB supports auto-downloading.*" {
+ fail $gdb_test_name
+ }
+ -re -wrap "" {
+ pass $gdb_test_name
+ }
+ }
+
+ set url "http://127.0.0.1:$port"
+
+ test_urls $url \
+ "<$url>" \
+ "notice 1 URL"
+
+ test_urls " $url " \
+ "<$url>" \
+ "notice 1 URL with whitespace"
+
+ set url2 "127.0.0.1:$port"
+
+ test_urls "$url $url2" \
+ "<$url>\r\n +<$url2>" \
+ "notice 2 URLs"
+
+ test_urls " $url $url2 " \
+ "<$url>\r\n +<$url2>" \
+ "notice 2 URLs with whitespace"
}
set envlist \
diff --git a/gdb/testsuite/gdb.dlang/demangle.exp b/gdb/testsuite/gdb.dlang/demangle.exp
index ebc2487fd1b..d45437c72cf 100644
--- a/gdb/testsuite/gdb.dlang/demangle.exp
+++ b/gdb/testsuite/gdb.dlang/demangle.exp
@@ -44,7 +44,7 @@ proc test_d_demangling {} {
test_demangling "_D8demangle4testFkZv" "demangle.test(uint)"
test_demangling "_D8demangle4testFlZv" "demangle.test(long)"
test_demangling "_D8demangle4testFmZv" "demangle.test(ulong)"
- test_demangling "_D8demangle4testFnZv" "demangle.test(none)"
+ test_demangling "_D8demangle4testFnZv" "demangle.test(typeof(null))"
test_demangling "_D8demangle4testFoZv" "demangle.test(ifloat)"
test_demangling "_D8demangle4testFpZv" "demangle.test(idouble)"
test_demangling "_D8demangle4testFqZv" "demangle.test(cfloat)"
diff --git a/gdb/testsuite/gdb.dlang/expression.exp b/gdb/testsuite/gdb.dlang/expression.exp
index 1ac6dca6248..6173dca713b 100644
--- a/gdb/testsuite/gdb.dlang/expression.exp
+++ b/gdb/testsuite/gdb.dlang/expression.exp
@@ -121,6 +121,10 @@ proc test_d_expressions {} {
gdb_test_no_output "set \$var = 144 ^^ 0.5" ""
gdb_test "print \$var ^^= 2" "144"
+
+ gdb_test "print 1 ~ \[2, 3\]" " = \\\{1, 2, 3\\\}"
+ gdb_test "print \[1, 2\] ~ 3" " = \\\{1, 2, 3\\\}"
+ gdb_test "print \[1, 2\] ~ \[2, 3\]" " = \\\{1, 2, 2, 3\\\}"
}
# Start with a fresh gdb.
diff --git a/gdb/testsuite/gdb.dwarf2/calling-convention.c b/gdb/testsuite/gdb.dwarf2/calling-convention.c
new file mode 100644
index 00000000000..0068ccdd6b4
--- /dev/null
+++ b/gdb/testsuite/gdb.dwarf2/calling-convention.c
@@ -0,0 +1,35 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+ Copyright 2022 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+/* Dummy foo function. */
+
+int
+foo (void)
+{
+ asm ("foo_label: .globl foo_label");
+ return 42;
+}
+
+/* Dummy main function. */
+
+int
+main (void)
+{
+ asm ("main_label: .globl main_label");
+ foo ();
+ return 0;
+}
diff --git a/gdb/testsuite/gdb.dwarf2/calling-convention.exp b/gdb/testsuite/gdb.dwarf2/calling-convention.exp
new file mode 100644
index 00000000000..77107a42350
--- /dev/null
+++ b/gdb/testsuite/gdb.dwarf2/calling-convention.exp
@@ -0,0 +1,97 @@
+# Copyright 2022 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# This testcase checks that if a function has the DW_AT_calling_convention
+# attribute with the value DW_CC_nocall, then GDB will not:
+# - call the function,
+# - try to access the value returned by the function when using the finish
+# command,
+# - force a user-provided return value when using the return command.
+#
+# In every case, GDB prints a message to the user indicating the issue. For
+# the return command, GDB asks the user to confirm if the specified value
+# should be forced.
+
+load_lib dwarf.exp
+
+# This test can only be run on targets which support DWARF-2 and use gas.
+if {![dwarf2_support]} {
+ return 0
+}
+
+standard_testfile .c .S
+
+# First compile the .c file so we can ask GDB what is sizeof(int).
+if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile}] } {
+ untested "failed to compile"
+ return -1
+}
+
+# Make some DWARF for the test.
+set asm_file [standard_output_file $srcfile2]
+Dwarf::assemble $asm_file {
+ cu {} {
+ compile_unit {
+ {language @DW_LANG_C}
+ {name "calling-convention"}
+ } {
+ declare_labels int_label
+
+ int_label: base_type {
+ {byte_size [get_sizeof "int" 4] sdata}
+ {encoding @DW_ATE_signed}
+ {name "int"}
+ }
+
+ subprogram {
+ {MACRO_AT_func { foo }}
+ {type :$int_label}
+ {calling_convention @DW_CC_nocall}
+ }
+
+ subprogram {
+ {MACRO_AT_func { main }}
+ {type :$int_label}
+ }
+ }
+ }
+}
+
+if { [prepare_for_testing "failed to prepare" ${testfile} \
+ [list $srcfile $asm_file] {nodebug}] } {
+ return -1
+}
+
+if {![runto_main]} {
+ return -1
+}
+
+gdb_test "call foo ()" \
+ "Cannot call the function 'foo' which does not follow the target calling convention."
+gdb_breakpoint "foo"
+gdb_continue_to_breakpoint "foo"
+
+gdb_test_multiple "return 35" "" {
+ -re "Function 'foo' does not follow the target calling convention.\r\nIf you continue, setting the return value will probably lead to unpredictable behaviors.\r\nMake foo return now\\? \\(y or n\\) $" {
+ pass $gdb_test_name
+ gdb_test "n" "Not confirmed" "cancel return"
+ }
+}
+
+gdb_test "finish" [multi_line \
+ "Run till exit from #0 $hex in foo \\(\\)" \
+ "warning: Function 'foo' does not follow the target calling convention, cannot determine its returned value\." \
+ "$hex in main \\(\\)" \
+ "Value returned has type: int. Cannot determine contents"]
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-bad-elf.exp b/gdb/testsuite/gdb.dwarf2/dw2-bad-elf.exp
index 0adff2868eb..7b71ed1155e 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-bad-elf.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-bad-elf.exp
@@ -127,13 +127,13 @@ Dwarf::assemble $asm_file {
# Line data doens't need to be correct, just present.
program {
- {DW_LNE_set_address [lindex $main_result 0]}
- {DW_LNS_advance_line 10}
- {DW_LNS_copy}
- {DW_LNS_advance_pc [lindex $main_result 1]}
- {DW_LNS_advance_line 19}
- {DW_LNS_copy}
- {DW_LNE_end_sequence}
+ DW_LNE_set_address [lindex $main_result 0]
+ DW_LNS_advance_line 10
+ DW_LNS_copy
+ DW_LNS_advance_pc [lindex $main_result 1]
+ DW_LNS_advance_line 19
+ DW_LNS_copy
+ DW_LNE_end_sequence
}
}
@@ -143,13 +143,13 @@ Dwarf::assemble $asm_file {
# Line data doens't need to be correct, just present.
program {
- {DW_LNE_set_address some_func}
- {DW_LNS_advance_line 5}
- {DW_LNS_copy}
- {DW_LNS_advance_pc 64}
- {DW_LNS_advance_line 8}
- {DW_LNS_copy}
- {DW_LNE_end_sequence}
+ DW_LNE_set_address some_func
+ DW_LNS_advance_line 5
+ DW_LNS_copy
+ DW_LNS_advance_pc 64
+ DW_LNS_advance_line 8
+ DW_LNS_copy
+ DW_LNE_end_sequence
}
}
}
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-disasm-over-non-stmt.exp b/gdb/testsuite/gdb.dwarf2/dw2-disasm-over-non-stmt.exp
index ea679c3adc1..5311dd61a4c 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-disasm-over-non-stmt.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-disasm-over-non-stmt.exp
@@ -68,34 +68,34 @@ Dwarf::assemble $asm_file {
file_name "$srcfile3" 1
program {
- {DW_LNE_set_address $main_start}
- {DW_LNS_advance_line 15}
- {DW_LNS_copy}
-
- {DW_LNE_set_address line_label_2}
- {DW_LNS_negate_stmt}
- {DW_LNS_copy}
-
- {DW_LNE_set_address line_label_3}
- {DW_LNS_advance_line 1}
- {DW_LNS_copy}
-
- {DW_LNE_set_address line_label_4}
- {DW_LNS_negate_stmt}
- {DW_LNS_copy}
-
- {DW_LNE_set_address line_label_5}
- {DW_LNS_negate_stmt}
- {DW_LNS_copy}
-
- {DW_LNE_set_address line_label_6}
- {DW_LNS_advance_line 1}
- {DW_LNS_negate_stmt}
- {DW_LNS_copy}
-
- {DW_LNE_set_address $main_end}
- {DW_LNS_copy}
- {DW_LNE_end_sequence}
+ DW_LNE_set_address $main_start
+ DW_LNS_advance_line 15
+ DW_LNS_copy
+
+ DW_LNE_set_address line_label_2
+ DW_LNS_negate_stmt
+ DW_LNS_copy
+
+ DW_LNE_set_address line_label_3
+ DW_LNS_advance_line 1
+ DW_LNS_copy
+
+ DW_LNE_set_address line_label_4
+ DW_LNS_negate_stmt
+ DW_LNS_copy
+
+ DW_LNE_set_address line_label_5
+ DW_LNS_negate_stmt
+ DW_LNS_copy
+
+ DW_LNE_set_address line_label_6
+ DW_LNS_advance_line 1
+ DW_LNS_negate_stmt
+ DW_LNS_copy
+
+ DW_LNE_set_address $main_end
+ DW_LNS_copy
+ DW_LNE_end_sequence
}
}
}
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-inline-header-1.exp b/gdb/testsuite/gdb.dwarf2/dw2-inline-header-1.exp
index 4ee7433f249..19f06adef7b 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-inline-header-1.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-inline-header-1.exp
@@ -119,41 +119,41 @@ proc do_test { start_label func_name tag } {
file_name "$srcfile4" 1
program {
- {DW_LNE_set_address line_label_1}
- {DW_LNS_advance_line 15}
- {DW_LNS_copy}
-
- {DW_LNE_set_address line_label_2}
- {DW_LNS_advance_line 1}
- {DW_LNS_copy}
-
- {DW_LNS_set_file 2}
- {DW_LNE_set_address line_label_3}
- {DW_LNS_advance_line 4}
- {DW_LNS_copy}
-
- {DW_LNE_set_address line_label_4}
- {DW_LNS_advance_line 1}
- {DW_LNS_copy}
-
- {DW_LNS_advance_line -4}
- {DW_LNS_set_file 1}
- {DW_LNS_negate_stmt}
- {DW_LNS_copy}
-
- {DW_LNS_set_file 2}
- {DW_LNE_set_address line_label_5}
- {DW_LNS_advance_line 5}
- {DW_LNS_copy}
-
- {DW_LNS_negate_stmt}
- {DW_LNS_set_file 1}
- {DW_LNE_set_address line_label_6}
- {DW_LNS_advance_line 1}
- {DW_LNS_copy}
-
- {DW_LNE_set_address line_label_7}
- {DW_LNE_end_sequence}
+ DW_LNE_set_address line_label_1
+ DW_LNS_advance_line 15
+ DW_LNS_copy
+
+ DW_LNE_set_address line_label_2
+ DW_LNS_advance_line 1
+ DW_LNS_copy
+
+ DW_LNS_set_file 2
+ DW_LNE_set_address line_label_3
+ DW_LNS_advance_line 4
+ DW_LNS_copy
+
+ DW_LNE_set_address line_label_4
+ DW_LNS_advance_line 1
+ DW_LNS_copy
+
+ DW_LNS_advance_line -4
+ DW_LNS_set_file 1
+ DW_LNS_negate_stmt
+ DW_LNS_copy
+
+ DW_LNS_set_file 2
+ DW_LNE_set_address line_label_5
+ DW_LNS_advance_line 5
+ DW_LNS_copy
+
+ DW_LNS_negate_stmt
+ DW_LNS_set_file 1
+ DW_LNE_set_address line_label_6
+ DW_LNS_advance_line 1
+ DW_LNS_copy
+
+ DW_LNE_set_address line_label_7
+ DW_LNE_end_sequence
}
}
}
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-inline-header-2.exp b/gdb/testsuite/gdb.dwarf2/dw2-inline-header-2.exp
index a8014489d9d..198f3553997 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-inline-header-2.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-inline-header-2.exp
@@ -109,39 +109,39 @@ Dwarf::assemble $asm_file {
file_name "$srcfile4" 1
program {
- {DW_LNE_set_address line_label_1}
- {DW_LNS_advance_line 15}
- {DW_LNS_copy}
-
- {DW_LNE_set_address line_label_2}
- {DW_LNS_advance_line 1}
- {DW_LNS_copy}
-
- {DW_LNS_set_file 2}
- {DW_LNE_set_address line_label_3}
- {DW_LNS_advance_line 4}
- {DW_LNS_copy}
-
- {DW_LNE_set_address line_label_4}
- {DW_LNS_advance_line 1}
- {DW_LNS_copy}
-
- {DW_LNS_advance_line -4}
- {DW_LNS_set_file 1}
- {DW_LNS_negate_stmt}
- {DW_LNS_copy}
-
- {DW_LNE_set_address line_label_5}
- {DW_LNS_advance_line 1}
- {DW_LNS_negate_stmt}
- {DW_LNS_copy}
-
- {DW_LNE_set_address line_label_6}
- {DW_LNS_advance_line 1}
- {DW_LNS_copy}
-
- {DW_LNE_set_address line_label_7}
- {DW_LNE_end_sequence}
+ DW_LNE_set_address line_label_1
+ DW_LNS_advance_line 15
+ DW_LNS_copy
+
+ DW_LNE_set_address line_label_2
+ DW_LNS_advance_line 1
+ DW_LNS_copy
+
+ DW_LNS_set_file 2
+ DW_LNE_set_address line_label_3
+ DW_LNS_advance_line 4
+ DW_LNS_copy
+
+ DW_LNE_set_address line_label_4
+ DW_LNS_advance_line 1
+ DW_LNS_copy
+
+ DW_LNS_advance_line -4
+ DW_LNS_set_file 1
+ DW_LNS_negate_stmt
+ DW_LNS_copy
+
+ DW_LNE_set_address line_label_5
+ DW_LNS_advance_line 1
+ DW_LNS_negate_stmt
+ DW_LNS_copy
+
+ DW_LNE_set_address line_label_6
+ DW_LNS_advance_line 1
+ DW_LNS_copy
+
+ DW_LNE_set_address line_label_7
+ DW_LNE_end_sequence
}
}
}
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-inline-header-3.exp b/gdb/testsuite/gdb.dwarf2/dw2-inline-header-3.exp
index 8f36e4f5219..68261aa78b0 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-inline-header-3.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-inline-header-3.exp
@@ -98,39 +98,39 @@ Dwarf::assemble $asm_file {
file_name "$srcfile4" 1
program {
- {DW_LNE_set_address line_label_1}
- {DW_LNS_advance_line 15}
- {DW_LNS_copy}
-
- {DW_LNE_set_address line_label_2}
- {DW_LNS_advance_line 1}
- {DW_LNS_copy}
-
- {DW_LNS_set_file 2}
- {DW_LNE_set_address line_label_3}
- {DW_LNS_advance_line 4}
- {DW_LNS_copy}
-
- {DW_LNE_set_address line_label_4}
- {DW_LNS_advance_line 1}
- {DW_LNS_copy}
-
- {DW_LNS_advance_line -4}
- {DW_LNS_set_file 1}
- {DW_LNS_negate_stmt}
- {DW_LNS_copy}
-
- {DW_LNE_set_address line_label_5}
- {DW_LNS_advance_line 1}
- {DW_LNS_copy}
-
- {DW_LNE_set_address line_label_6}
- {DW_LNS_advance_line 1}
- {DW_LNS_negate_stmt}
- {DW_LNS_copy}
-
- {DW_LNE_set_address line_label_7}
- {DW_LNE_end_sequence}
+ DW_LNE_set_address line_label_1
+ DW_LNS_advance_line 15
+ DW_LNS_copy
+
+ DW_LNE_set_address line_label_2
+ DW_LNS_advance_line 1
+ DW_LNS_copy
+
+ DW_LNS_set_file 2
+ DW_LNE_set_address line_label_3
+ DW_LNS_advance_line 4
+ DW_LNS_copy
+
+ DW_LNE_set_address line_label_4
+ DW_LNS_advance_line 1
+ DW_LNS_copy
+
+ DW_LNS_advance_line -4
+ DW_LNS_set_file 1
+ DW_LNS_negate_stmt
+ DW_LNS_copy
+
+ DW_LNE_set_address line_label_5
+ DW_LNS_advance_line 1
+ DW_LNS_copy
+
+ DW_LNE_set_address line_label_6
+ DW_LNS_advance_line 1
+ DW_LNS_negate_stmt
+ DW_LNS_copy
+
+ DW_LNE_set_address line_label_7
+ DW_LNE_end_sequence
}
}
}
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-inline-many-frames.exp b/gdb/testsuite/gdb.dwarf2/dw2-inline-many-frames.exp
index 483b197448c..9055244979d 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-inline-many-frames.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-inline-many-frames.exp
@@ -187,95 +187,95 @@ Dwarf::assemble $asm_file {
file_name "$srcfile" 1
program {
- {DW_LNE_set_address $main_start}
- {line [gdb_get_line_number "main prologue"]}
- {DW_LNS_copy}
- {DW_LNE_set_address main_label}
- {line [gdb_get_line_number "main set global_var"]}
- {DW_LNS_copy}
- {DW_LNE_set_address main_label2}
- {line [gdb_get_line_number "main call aaa"]}
- {DW_LNS_copy}
- {DW_LNE_set_address main_label2}
- {line [gdb_get_line_number "aaa return"]}
- {DW_LNS_copy}
- {DW_LNE_set_address main_label2}
- {line [gdb_get_line_number "bbb return"]}
- {DW_LNS_copy}
- {DW_LNE_set_address main_label2}
- {line [gdb_get_line_number "ccc return"]}
- {DW_LNS_copy}
- {DW_LNE_set_address main_label3}
- {line [gdb_get_line_number "main end"]}
- {DW_LNS_copy}
- {DW_LNE_set_address $main_end}
- {DW_LNE_end_sequence}
+ DW_LNE_set_address $main_start
+ line [gdb_get_line_number "main prologue"]
+ DW_LNS_copy
+ DW_LNE_set_address main_label
+ line [gdb_get_line_number "main set global_var"]
+ DW_LNS_copy
+ DW_LNE_set_address main_label2
+ line [gdb_get_line_number "main call aaa"]
+ DW_LNS_copy
+ DW_LNE_set_address main_label2
+ line [gdb_get_line_number "aaa return"]
+ DW_LNS_copy
+ DW_LNE_set_address main_label2
+ line [gdb_get_line_number "bbb return"]
+ DW_LNS_copy
+ DW_LNE_set_address main_label2
+ line [gdb_get_line_number "ccc return"]
+ DW_LNS_copy
+ DW_LNE_set_address main_label3
+ line [gdb_get_line_number "main end"]
+ DW_LNS_copy
+ DW_LNE_set_address $main_end
+ DW_LNE_end_sequence
- {DW_LNE_set_address $ddd_start}
- {line [gdb_get_line_number "ddd prologue"]}
- {DW_LNS_copy}
- {DW_LNE_set_address ddd_label}
- {line [gdb_get_line_number "ddd return"]}
- {DW_LNS_copy}
- {DW_LNE_set_address ddd_label2}
- {line [gdb_get_line_number "ddd end"]}
- {DW_LNS_copy}
- {DW_LNE_set_address $ddd_end}
- {DW_LNE_end_sequence}
+ DW_LNE_set_address $ddd_start
+ line [gdb_get_line_number "ddd prologue"]
+ DW_LNS_copy
+ DW_LNE_set_address ddd_label
+ line [gdb_get_line_number "ddd return"]
+ DW_LNS_copy
+ DW_LNE_set_address ddd_label2
+ line [gdb_get_line_number "ddd end"]
+ DW_LNS_copy
+ DW_LNE_set_address $ddd_end
+ DW_LNE_end_sequence
- {DW_LNE_set_address $eee_start}
- {line [gdb_get_line_number "eee prologue"]}
- {DW_LNS_copy}
- {DW_LNE_set_address eee_label}
- {line [gdb_get_line_number "eee return"]}
- {DW_LNS_copy}
- {DW_LNE_set_address eee_label2}
- {line [gdb_get_line_number "eee end"]}
- {DW_LNS_copy}
- {DW_LNE_set_address $eee_end}
- {DW_LNE_end_sequence}
+ DW_LNE_set_address $eee_start
+ line [gdb_get_line_number "eee prologue"]
+ DW_LNS_copy
+ DW_LNE_set_address eee_label
+ line [gdb_get_line_number "eee return"]
+ DW_LNS_copy
+ DW_LNE_set_address eee_label2
+ line [gdb_get_line_number "eee end"]
+ DW_LNS_copy
+ DW_LNE_set_address $eee_end
+ DW_LNE_end_sequence
- {DW_LNE_set_address $fff_start}
- {line [gdb_get_line_number "fff prologue"]}
- {DW_LNS_copy}
- {DW_LNE_set_address fff_label}
- {line [gdb_get_line_number "fff return"]}
- {DW_LNS_copy}
- {DW_LNE_set_address fff_label}
- {line [gdb_get_line_number "ggg return"]}
- {DW_LNS_copy}
- {DW_LNE_set_address fff_label}
- {line [gdb_get_line_number "hhh return"]}
- {DW_LNS_copy}
- {DW_LNE_set_address fff_label}
- {line [gdb_get_line_number "iii return"]}
- {DW_LNS_copy}
- {DW_LNE_set_address fff_label2}
- {line [gdb_get_line_number "fff end"]}
- {DW_LNS_copy}
- {DW_LNE_set_address $fff_end}
- {DW_LNE_end_sequence}
+ DW_LNE_set_address $fff_start
+ line [gdb_get_line_number "fff prologue"]
+ DW_LNS_copy
+ DW_LNE_set_address fff_label
+ line [gdb_get_line_number "fff return"]
+ DW_LNS_copy
+ DW_LNE_set_address fff_label
+ line [gdb_get_line_number "ggg return"]
+ DW_LNS_copy
+ DW_LNE_set_address fff_label
+ line [gdb_get_line_number "hhh return"]
+ DW_LNS_copy
+ DW_LNE_set_address fff_label
+ line [gdb_get_line_number "iii return"]
+ DW_LNS_copy
+ DW_LNE_set_address fff_label2
+ line [gdb_get_line_number "fff end"]
+ DW_LNS_copy
+ DW_LNE_set_address $fff_end
+ DW_LNE_end_sequence
- {DW_LNE_set_address $jjj_start}
- {line [gdb_get_line_number "jjj prologue"]}
- {DW_LNS_copy}
- {DW_LNE_set_address jjj_label}
- {line [gdb_get_line_number "jjj return"]}
- {DW_LNS_copy}
- {DW_LNE_set_address jjj_label2}
- {line [gdb_get_line_number "jjj end"]}
- {DW_LNS_copy}
- {DW_LNE_set_address $jjj_end}
- {DW_LNE_end_sequence}
+ DW_LNE_set_address $jjj_start
+ line [gdb_get_line_number "jjj prologue"]
+ DW_LNS_copy
+ DW_LNE_set_address jjj_label
+ line [gdb_get_line_number "jjj return"]
+ DW_LNS_copy
+ DW_LNE_set_address jjj_label2
+ line [gdb_get_line_number "jjj end"]
+ DW_LNS_copy
+ DW_LNE_set_address $jjj_end
+ DW_LNE_end_sequence
- {DW_LNE_set_address $kkk_start}
- {line [gdb_get_line_number "kkk prologue"]}
- {DW_LNS_copy}
- {DW_LNE_set_address kkk_label}
- {line [gdb_get_line_number "kkk return"]}
- {DW_LNS_copy}
- {DW_LNE_set_address $kkk_end}
- {DW_LNE_end_sequence}
+ DW_LNE_set_address $kkk_start
+ line [gdb_get_line_number "kkk prologue"]
+ DW_LNS_copy
+ DW_LNE_set_address kkk_label
+ line [gdb_get_line_number "kkk return"]
+ DW_LNS_copy
+ DW_LNE_set_address $kkk_end
+ DW_LNE_end_sequence
}
}
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-inline-param.exp b/gdb/testsuite/gdb.dwarf2/dw2-inline-param.exp
index 3cb11c8c014..c0675141012 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-inline-param.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-inline-param.exp
@@ -21,8 +21,10 @@ if {![dwarf2_support]} {
standard_testfile .S -main.c
+set binfile_stripped ${binfile}-stripped
+
if { [prepare_for_testing "failed to prepare" "${testfile}" \
- [list $srcfile2 $srcfile] {nodebug}] } {
+ [list $srcfile2 $srcfile] {nodebug nopie}] } {
return -1
}
@@ -40,7 +42,7 @@ gdb_unload
# Strip out any labels there as they could corrupt the `main' name.
set objcopy_program [gdb_find_objcopy]
-set command "$objcopy_program -N block_start -N block_end -N break_at ${binfile}"
+set command "$objcopy_program -N block_start -N block_end -N break_at ${binfile} ${binfile_stripped}"
verbose -log "Executing: $command"
set result [catch "exec $command" output]
verbose "result is $result"
@@ -49,7 +51,7 @@ if {$result != 0} {
return -1
}
-gdb_load ${binfile}
+gdb_load ${binfile_stripped}
if ![runto "*${break_at}"] {
return -1
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-inline-small-func.exp b/gdb/testsuite/gdb.dwarf2/dw2-inline-small-func.exp
index c480422b755..05286ad6d2f 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-inline-small-func.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-inline-small-func.exp
@@ -94,28 +94,28 @@ Dwarf::assemble $asm_file {
set f2_l1 [gdb_get_line_number "callee: body" $srcfile4]
program {
- {DW_LNE_set_address line_label_1}
- {line $f1_l1}
- {DW_LNS_copy}
+ DW_LNE_set_address line_label_1
+ line $f1_l1
+ DW_LNS_copy
- {line ${f1_l2}}
- {DW_LNS_copy}
+ line ${f1_l2}
+ DW_LNS_copy
- {DW_LNS_set_file 2}
- {line ${f2_l1}}
- {DW_LNS_copy}
+ DW_LNS_set_file 2
+ line ${f2_l1}
+ DW_LNS_copy
- {DW_LNS_negate_stmt}
- {DW_LNS_copy}
+ DW_LNS_negate_stmt
+ DW_LNS_copy
- {DW_LNS_set_file 1}
- {DW_LNE_set_address line_label_2}
- {line ${f1_l3}}
- {DW_LNS_copy}
+ DW_LNS_set_file 1
+ DW_LNE_set_address line_label_2
+ line ${f1_l3}
+ DW_LNS_copy
- {DW_LNE_set_address line_label_3}
- {DW_LNS_copy}
- {DW_LNE_end_sequence}
+ DW_LNE_set_address line_label_3
+ DW_LNS_copy
+ DW_LNE_end_sequence
}
}
}
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-inline-stepping.exp b/gdb/testsuite/gdb.dwarf2/dw2-inline-stepping.exp
index aafca3015e6..bd90715c198 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-inline-stepping.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-inline-stepping.exp
@@ -94,29 +94,29 @@ Dwarf::assemble $asm_file {
file_name "$srcfile" 1
program {
- {DW_LNE_set_address $main_start}
- {line [gdb_get_line_number "main prologue"]}
- {DW_LNS_copy}
- {DW_LNE_set_address main_label}
- {line [gdb_get_line_number "main set global_var"]}
- {DW_LNS_copy}
- {DW_LNE_set_address main_label2}
- {line [gdb_get_line_number "main call foo"]}
- {DW_LNS_copy}
- {DW_LNE_set_address main_label2}
- {line [gdb_get_line_number "foo call bar"]}
- {DW_LNS_copy}
- {DW_LNE_set_address $main_end}
- {DW_LNE_end_sequence}
-
- {DW_LNE_set_address $bar_start}
- {line [gdb_get_line_number "bar prologue"]}
- {DW_LNS_copy}
- {DW_LNE_set_address bar_label}
- {line [gdb_get_line_number "bar return global_var"]}
- {DW_LNS_copy}
- {DW_LNE_set_address $bar_end}
- {DW_LNE_end_sequence}
+ DW_LNE_set_address $main_start
+ line [gdb_get_line_number "main prologue"]
+ DW_LNS_copy
+ DW_LNE_set_address main_label
+ line [gdb_get_line_number "main set global_var"]
+ DW_LNS_copy
+ DW_LNE_set_address main_label2
+ line [gdb_get_line_number "main call foo"]
+ DW_LNS_copy
+ DW_LNE_set_address main_label2
+ line [gdb_get_line_number "foo call bar"]
+ DW_LNS_copy
+ DW_LNE_set_address $main_end
+ DW_LNE_end_sequence
+
+ DW_LNE_set_address $bar_start
+ line [gdb_get_line_number "bar prologue"]
+ DW_LNS_copy
+ DW_LNE_set_address bar_label
+ line [gdb_get_line_number "bar return global_var"]
+ DW_LNS_copy
+ DW_LNE_set_address $bar_end
+ DW_LNE_end_sequence
}
}
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-inline-with-lexical-scope.exp b/gdb/testsuite/gdb.dwarf2/dw2-inline-with-lexical-scope.exp
index 485f3aef956..61fd5d4fed8 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-inline-with-lexical-scope.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-inline-with-lexical-scope.exp
@@ -110,20 +110,20 @@ Dwarf::assemble $asm_file {
file_name "$srcfile" 1
program {
- {DW_LNE_set_address $main_start}
- {line [gdb_get_line_number "main prologue"]}
- {DW_LNS_copy}
- {DW_LNE_set_address main_label}
- {line [gdb_get_line_number "func call"]}
- {DW_LNS_copy}
- {DW_LNE_set_address main_label}
- {line [gdb_get_line_number "func end"]}
- {DW_LNS_copy}
- {DW_LNE_set_address main_label2}
- {line [gdb_get_line_number "main end"]}
- {DW_LNS_copy}
- {DW_LNE_set_address $main_end}
- {DW_LNE_end_sequence}
+ DW_LNE_set_address $main_start
+ line [gdb_get_line_number "main prologue"]
+ DW_LNS_copy
+ DW_LNE_set_address main_label
+ line [gdb_get_line_number "func call"]
+ DW_LNS_copy
+ DW_LNE_set_address main_label
+ line [gdb_get_line_number "func end"]
+ DW_LNS_copy
+ DW_LNE_set_address main_label2
+ line [gdb_get_line_number "main end"]
+ DW_LNS_copy
+ DW_LNE_set_address $main_end
+ DW_LNE_end_sequence
}
}
}
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-is-stmt-2.exp b/gdb/testsuite/gdb.dwarf2/dw2-is-stmt-2.exp
index 3ec9f807160..239f5f1d9e9 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-is-stmt-2.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-is-stmt-2.exp
@@ -68,84 +68,84 @@ Dwarf::assemble $asm_file {
file_name "$srcfile" 1
program {
- {DW_LNE_set_address main}
- {line [gdb_get_line_number "main prologue"]}
- {DW_LNS_copy}
-
- {DW_LNE_set_address line_label_0}
- {line [gdb_get_line_number "main start"]}
- {DW_LNS_copy}
-
- {DW_LNE_set_address line_label_1}
- {line [gdb_get_line_number "Line 1"]}
- {DW_LNS_negate_stmt}
- {DW_LNS_copy}
-
- {DW_LNE_set_address line_label_2}
- {DW_LNS_negate_stmt}
- {DW_LNS_copy}
-
- {DW_LNE_set_address line_label_3}
- {line [gdb_get_line_number "Line 2"]}
- {DW_LNS_negate_stmt}
- {DW_LNS_copy}
-
- {DW_LNE_set_address line_label_4}
- {line [gdb_get_line_number "Line 1"]}
- {DW_LNS_copy}
-
- {DW_LNE_set_address line_label_5}
- {line [gdb_get_line_number "Line 3"]}
- {DW_LNS_copy}
-
- {DW_LNE_set_address line_label_6}
- {line [gdb_get_line_number "Line 4"]}
- {DW_LNS_copy}
-
- {DW_LNE_set_address line_label_7}
- {DW_LNS_negate_stmt}
- {DW_LNS_copy}
-
- {DW_LNE_set_address line_label_8}
- {line [gdb_get_line_number "Line 2"]}
- {DW_LNS_copy}
-
- {DW_LNE_set_address line_label_9}
- {DW_LNS_negate_stmt}
- {DW_LNS_copy}
-
- {DW_LNE_set_address line_label_10}
- {line [gdb_get_line_number "Line 3"]}
- {DW_LNS_copy}
-
- {DW_LNE_set_address line_label_11}
- {line [gdb_get_line_number "Line 5"]}
- {DW_LNS_copy}
-
- {DW_LNE_set_address line_label_12}
- {DW_LNS_negate_stmt}
- {DW_LNS_copy}
-
- {DW_LNE_set_address line_label_13}
- {line [gdb_get_line_number "Line 3"]}
- {DW_LNS_copy}
-
- {DW_LNE_set_address line_label_14}
- {line [gdb_get_line_number "Line 4"]}
- {DW_LNS_negate_stmt}
- {DW_LNS_copy}
-
- {DW_LNE_set_address line_label_15}
- {line [gdb_get_line_number "Line 5"]}
- {DW_LNS_copy}
-
- {DW_LNE_set_address line_label_16}
- {line [gdb_get_line_number "main end"]}
- {DW_LNS_negate_stmt}
- {DW_LNS_copy}
-
- {DW_LNE_set_address ${main_end}}
- {DW_LNE_end_sequence}
+ DW_LNE_set_address main
+ line [gdb_get_line_number "main prologue"]
+ DW_LNS_copy
+
+ DW_LNE_set_address line_label_0
+ line [gdb_get_line_number "main start"]
+ DW_LNS_copy
+
+ DW_LNE_set_address line_label_1
+ line [gdb_get_line_number "Line 1"]
+ DW_LNS_negate_stmt
+ DW_LNS_copy
+
+ DW_LNE_set_address line_label_2
+ DW_LNS_negate_stmt
+ DW_LNS_copy
+
+ DW_LNE_set_address line_label_3
+ line [gdb_get_line_number "Line 2"]
+ DW_LNS_negate_stmt
+ DW_LNS_copy
+
+ DW_LNE_set_address line_label_4
+ line [gdb_get_line_number "Line 1"]
+ DW_LNS_copy
+
+ DW_LNE_set_address line_label_5
+ line [gdb_get_line_number "Line 3"]
+ DW_LNS_copy
+
+ DW_LNE_set_address line_label_6
+ line [gdb_get_line_number "Line 4"]
+ DW_LNS_copy
+
+ DW_LNE_set_address line_label_7
+ DW_LNS_negate_stmt
+ DW_LNS_copy
+
+ DW_LNE_set_address line_label_8
+ line [gdb_get_line_number "Line 2"]
+ DW_LNS_copy
+
+ DW_LNE_set_address line_label_9
+ DW_LNS_negate_stmt
+ DW_LNS_copy
+
+ DW_LNE_set_address line_label_10
+ line [gdb_get_line_number "Line 3"]
+ DW_LNS_copy
+
+ DW_LNE_set_address line_label_11
+ line [gdb_get_line_number "Line 5"]
+ DW_LNS_copy
+
+ DW_LNE_set_address line_label_12
+ DW_LNS_negate_stmt
+ DW_LNS_copy
+
+ DW_LNE_set_address line_label_13
+ line [gdb_get_line_number "Line 3"]
+ DW_LNS_copy
+
+ DW_LNE_set_address line_label_14
+ line [gdb_get_line_number "Line 4"]
+ DW_LNS_negate_stmt
+ DW_LNS_copy
+
+ DW_LNE_set_address line_label_15
+ line [gdb_get_line_number "Line 5"]
+ DW_LNS_copy
+
+ DW_LNE_set_address line_label_16
+ line [gdb_get_line_number "main end"]
+ DW_LNS_negate_stmt
+ DW_LNS_copy
+
+ DW_LNE_set_address ${main_end}
+ DW_LNE_end_sequence
}
}
}
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-is-stmt.exp b/gdb/testsuite/gdb.dwarf2/dw2-is-stmt.exp
index 9a9fc8cca64..c449757becb 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-is-stmt.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-is-stmt.exp
@@ -68,35 +68,35 @@ Dwarf::assemble $asm_file {
file_name "$srcfile" 1
program {
- {DW_LNE_set_address main}
- {line [gdb_get_line_number "main prologue"]}
- {DW_LNS_negate_stmt}
- {DW_LNS_copy}
-
- {DW_LNE_set_address line_label_1}
- {line [gdb_get_line_number "main, set var to 99"]}
- {DW_LNS_copy}
-
- {DW_LNE_set_address line_label_2}
- {line [gdb_get_line_number "main, set var to 0"]}
- {DW_LNS_negate_stmt}
- {DW_LNS_copy}
-
- {DW_LNE_set_address line_label_3}
- {DW_LNS_negate_stmt}
- {DW_LNS_copy}
-
- {DW_LNE_set_address line_label_4}
- {DW_LNS_negate_stmt}
- {DW_LNS_copy}
-
- {DW_LNE_set_address line_label_5}
- {line [gdb_get_line_number "main end"]}
- {DW_LNS_negate_stmt}
- {DW_LNS_copy}
-
- {DW_LNE_set_address ${main_end}}
- {DW_LNE_end_sequence}
+ DW_LNE_set_address main
+ line [gdb_get_line_number "main prologue"]
+ DW_LNS_negate_stmt
+ DW_LNS_copy
+
+ DW_LNE_set_address line_label_1
+ line [gdb_get_line_number "main, set var to 99"]
+ DW_LNS_copy
+
+ DW_LNE_set_address line_label_2
+ line [gdb_get_line_number "main, set var to 0"]
+ DW_LNS_negate_stmt
+ DW_LNS_copy
+
+ DW_LNE_set_address line_label_3
+ DW_LNS_negate_stmt
+ DW_LNS_copy
+
+ DW_LNE_set_address line_label_4
+ DW_LNS_negate_stmt
+ DW_LNS_copy
+
+ DW_LNE_set_address line_label_5
+ line [gdb_get_line_number "main end"]
+ DW_LNS_negate_stmt
+ DW_LNS_copy
+
+ DW_LNE_set_address ${main_end}
+ DW_LNE_end_sequence
}
}
}
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-line-number-zero.exp b/gdb/testsuite/gdb.dwarf2/dw2-line-number-zero.exp
index ec15694bb58..0c5eed9814f 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-line-number-zero.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-line-number-zero.exp
@@ -62,46 +62,46 @@ Dwarf::assemble $asm_file {
file_name "$srcfile" 1
program {
- {DW_LNE_set_address bar1_label}
- {line 27}
- {DW_LNS_copy}
+ DW_LNE_set_address bar1_label
+ line 27
+ DW_LNS_copy
- {DW_LNE_set_address bar1_label_2}
- {line 29}
- {DW_LNS_copy}
+ DW_LNE_set_address bar1_label_2
+ line 29
+ DW_LNS_copy
- {DW_LNE_set_address bar1_label_3}
- {line 0}
- {DW_LNS_copy}
+ DW_LNE_set_address bar1_label_3
+ line 0
+ DW_LNS_copy
- {DW_LNE_set_address bar1_label_4}
- {line 33}
- {DW_LNS_copy}
+ DW_LNE_set_address bar1_label_4
+ line 33
+ DW_LNS_copy
- {DW_LNE_set_address bar1_label_5}
- {DW_LNE_end_sequence}
+ DW_LNE_set_address bar1_label_5
+ DW_LNE_end_sequence
- {DW_LNE_set_address bar2_label}
- {line 41}
- {DW_LNS_copy}
+ DW_LNE_set_address bar2_label
+ line 41
+ DW_LNS_copy
- {DW_LNE_set_address bar2_label_2}
- {line 43}
- {DW_LNS_copy}
+ DW_LNE_set_address bar2_label_2
+ line 43
+ DW_LNS_copy
- {DW_LNE_set_address bar2_label_3}
- {line 0}
- {DW_LNS_negate_stmt}
- {DW_LNS_copy}
- {DW_LNS_negate_stmt}
+ DW_LNE_set_address bar2_label_3
+ line 0
+ DW_LNS_negate_stmt
+ DW_LNS_copy
+ DW_LNS_negate_stmt
- {DW_LNE_set_address bar2_label_4}
- {line 47}
- {DW_LNS_copy}
+ DW_LNE_set_address bar2_label_4
+ line 47
+ DW_LNS_copy
- {DW_LNE_set_address bar2_label_5}
- {DW_LNE_end_sequence}
+ DW_LNE_set_address bar2_label_5
+ DW_LNE_end_sequence
}
}
}
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-lines.exp b/gdb/testsuite/gdb.dwarf2/dw2-lines.exp
index c1be18aa88c..b24eec0c8d2 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-lines.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-lines.exp
@@ -79,28 +79,33 @@ proc test_1 { _cv _cdw64 _lv _ldw64 {_string_form ""}} {
}
lines [list version $lv is_64 $ldw64 string_form $string_form] Llines {
- include_dir "${srcdir}/${subdir}"
- file_name "$srcfile" 1
+ set diridx [include_dir "${srcdir}/${subdir}"]
+ file_name "$srcfile" $diridx
program {
- {DW_LNE_set_address bar_label}
- {line [line_for bar_label]}
- {DW_LNS_copy}
+ # If using DWARF 5, we want to refer to file 0, but the LNP
+ # state machine is still initialized with file 1. So we need
+ # to set the current file explicitly.
+ DW_LNS_set_file $diridx
- {DW_LNE_set_address bar_label_2}
- {line [line_for bar_label_2]}
- {DW_LNS_copy}
+ DW_LNE_set_address bar_label
+ line [line_for bar_label]
+ DW_LNS_copy
- {DW_LNE_set_address bar_label_3}
- {line [line_for bar_label_3]}
- {DW_LNS_copy}
+ DW_LNE_set_address bar_label_2
+ line [line_for bar_label_2]
+ DW_LNS_copy
- {DW_LNE_set_address bar_label_4}
- {line [line_for bar_label_4]}
- {DW_LNS_copy}
+ DW_LNE_set_address bar_label_3
+ line [line_for bar_label_3]
+ DW_LNS_copy
- {DW_LNE_set_address bar_label_5}
- {DW_LNE_end_sequence}
+ DW_LNE_set_address bar_label_4
+ line [line_for bar_label_4]
+ DW_LNS_copy
+
+ DW_LNE_set_address bar_label_5
+ DW_LNE_end_sequence
}
}
}
@@ -114,7 +119,7 @@ proc test_1 { _cv _cdw64 _lv _ldw64 {_string_form ""}} {
return -1
}
- gdb_breakpoint "bar"
+ gdb_breakpoint "bar_label"
gdb_continue_to_breakpoint "foo \\(1\\)"
gdb_test "next" "foo \\(2\\).*" "next to foo (2)"
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-missing-cu-tag.exp b/gdb/testsuite/gdb.dwarf2/dw2-missing-cu-tag.exp
index 1afcaa3b502..3ac94c31689 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-missing-cu-tag.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-missing-cu-tag.exp
@@ -54,8 +54,7 @@ clean_restart
set pattern1 \
[multi_line \
"Reading symbols from \[^\r\n\]+" \
- "Dwarf Error: unexpected tag 'DW_TAG_subprogram' at offset $hex \\\[\[^\r\n\]+\\\]" \
- "\\(No debugging symbols \[^\r\n\]+\\)"]
+ "Dwarf Error: unexpected tag 'DW_TAG_subprogram' at offset $hex \\\[\[^\r\n\]+\\\]"]
# This pattern is hit when GDB does use -readnow (e.g. running with
# --target_board=readnow).
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-out-of-range-end-of-seq.exp b/gdb/testsuite/gdb.dwarf2/dw2-out-of-range-end-of-seq.exp
index f60f622067e..b8da03ddb3d 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-out-of-range-end-of-seq.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-out-of-range-end-of-seq.exp
@@ -58,19 +58,19 @@ Dwarf::assemble $asm_file {
file_name "$srcfile" 1
program {
- {DW_LNE_set_address main_label}
- {line 1}
- {DW_LNS_copy}
+ DW_LNE_set_address main_label
+ line 1
+ DW_LNS_copy
- {DW_LNS_advance_pc 1}
- {DW_LNE_end_sequence}
+ DW_LNS_advance_pc 1
+ DW_LNE_end_sequence
- {DW_LNE_set_address 0}
- {line 2}
- {DW_LNS_copy}
+ DW_LNE_set_address 0
+ line 2
+ DW_LNS_copy
- {DW_LNS_advance_pc 1}
- {DW_LNE_end_sequence}
+ DW_LNS_advance_pc 1
+ DW_LNE_end_sequence
}
}
}
@@ -86,10 +86,10 @@ if ![runto_main] {
set test "END with address 1 eliminated"
gdb_test_multiple "maint info line-table $srcfile$" $test {
- -re -wrap "END *0x0*1 *Y \r\n.*" {
+ -re -wrap "END *0x0*1 *Y *\r\n.*" {
fail $gdb_test_name
}
- -re -wrap "END *$hex *Y " {
+ -re -wrap "END *$hex *Y *" {
pass $gdb_test_name
}
}
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-prologue-end.c b/gdb/testsuite/gdb.dwarf2/dw2-prologue-end.c
new file mode 100644
index 00000000000..d166540d9b3
--- /dev/null
+++ b/gdb/testsuite/gdb.dwarf2/dw2-prologue-end.c
@@ -0,0 +1,28 @@
+/* Copyright 2022 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+
+int
+main (void)
+{ /* main prologue */
+ asm ("main_label: .global main_label");
+ int m = 42; /* main assign m */
+ asm ("main_assign_n: .global main_assign_n");
+ int n = 54; /* main assign n */
+ asm ("main_end_prologue: .global main_end_prologue");
+ int o = 96; /* main assign o */
+ asm ("main_end: .global main_end"); /* main end */
+ return m + n - o;
+}
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-prologue-end.exp b/gdb/testsuite/gdb.dwarf2/dw2-prologue-end.exp
new file mode 100644
index 00000000000..9ce97fc1f26
--- /dev/null
+++ b/gdb/testsuite/gdb.dwarf2/dw2-prologue-end.exp
@@ -0,0 +1,106 @@
+# Copyright 2022 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Check that GDB can honor the prologue_end flag the compiler can place
+# in the line-table data.
+
+load_lib dwarf.exp
+
+# This test can only be run on targets which support DWARF-2 and use gas.
+if {![dwarf2_support]} {
+ return 0
+}
+
+standard_testfile .c .S
+
+set asm_file [standard_output_file $srcfile2]
+Dwarf::assemble $asm_file {
+ global srcdir subdir srcfile srcfile2
+ declare_labels lines_label
+
+ get_func_info main
+
+ cu {} {
+ compile_unit {
+ {language @DW_LANG_C}
+ {name dw2-prologue-end.c}
+ {stmt_list ${lines_label} DW_FORM_sec_offset}
+ } {
+ subprogram {
+ {external 1 flag}
+ {name main}
+ {low_pc $main_start addr}
+ {high_pc "$main_start + $main_len" addr}
+ }
+ }
+ }
+
+ lines {version 5} lines_label {
+ set diridx [include_dir "${srcdir}/${subdir}"]
+ file_name "$srcfile" $diridx
+
+ program {
+ DW_LNS_set_file $diridx
+ DW_LNE_set_address $main_start
+ line [gdb_get_line_number "main prologue"]
+ DW_LNS_copy
+
+ DW_LNE_set_address main_label
+ line [gdb_get_line_number "main assign m"]
+ DW_LNS_copy
+
+ DW_LNE_set_address main_assign_n
+ line [gdb_get_line_number "main assign n"]
+ DW_LNS_copy
+
+ DW_LNE_set_address main_end_prologue
+ line [gdb_get_line_number "main assign o"]
+ DW_LNS_set_prologue_end
+ DW_LNS_copy
+
+ DW_LNE_set_address main_end
+ line [gdb_get_line_number "main end"]
+ DW_LNS_copy
+
+ DW_LNE_end_sequence
+ }
+ }
+}
+
+if { [prepare_for_testing "failed to prepare" ${testfile} \
+ [list $srcfile $asm_file] {nodebug}] } {
+ return -1
+}
+
+if ![runto_main] {
+ return -1
+}
+
+set prologue_end_line [gdb_get_line_number "main assign o"]
+gdb_test "frame" ".*main \\\(\\\) at \[^\r\n\]*:$prologue_end_line\r\n.*"
+
+with_test_prefix "ignore-prologue-end" {
+ clean_restart $binfile
+ gdb_test_no_output "maintenance set ignore-prologue-end-flag on"
+
+ if ![runto_main] {
+ return -1
+ }
+
+ # If we ignore the prologue-end flag, we should stop at the first statement
+ # of main which assigns m.
+ set prologue_end_line [gdb_get_line_number "main assign m"]
+ gdb_test "frame" ".*main \\\(\\\) at \[^\r\n\]*:$prologue_end_line\r\n.*"
+}
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-ranges-base.exp b/gdb/testsuite/gdb.dwarf2/dw2-ranges-base.exp
index ae44dc49329..17530c8cc4b 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-ranges-base.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-ranges-base.exp
@@ -84,29 +84,29 @@ Dwarf::assemble $asm_file {
# table data associated with it. We do make use of the fake
# line numbers that we pick here in the tests below.
program {
- {DW_LNE_set_address [lindex $main_func 0]}
- {DW_LNS_advance_line 10}
- {DW_LNS_copy}
- {DW_LNS_advance_pc [lindex $main_func 1]}
- {DW_LNS_advance_line 19}
- {DW_LNS_copy}
- {DW_LNE_end_sequence}
-
- {DW_LNE_set_address [lindex $frame2_func 0]}
- {DW_LNS_advance_line 20}
- {DW_LNS_copy}
- {DW_LNS_advance_pc [lindex $frame2_func 1]}
- {DW_LNS_advance_line 29}
- {DW_LNS_copy}
- {DW_LNE_end_sequence}
-
- {DW_LNE_set_address [lindex $frame3_func 0]}
- {DW_LNS_advance_line 30}
- {DW_LNS_copy}
- {DW_LNS_advance_pc [lindex $frame3_func 1]}
- {DW_LNS_advance_line 39}
- {DW_LNS_copy}
- {DW_LNE_end_sequence}
+ DW_LNE_set_address [lindex $main_func 0]
+ DW_LNS_advance_line 10
+ DW_LNS_copy
+ DW_LNS_advance_pc [lindex $main_func 1]
+ DW_LNS_advance_line 19
+ DW_LNS_copy
+ DW_LNE_end_sequence
+
+ DW_LNE_set_address [lindex $frame2_func 0]
+ DW_LNS_advance_line 20
+ DW_LNS_copy
+ DW_LNS_advance_pc [lindex $frame2_func 1]
+ DW_LNS_advance_line 29
+ DW_LNS_copy
+ DW_LNE_end_sequence
+
+ DW_LNE_set_address [lindex $frame3_func 0]
+ DW_LNS_advance_line 30
+ DW_LNS_copy
+ DW_LNS_advance_pc [lindex $frame3_func 1]
+ DW_LNS_advance_line 39
+ DW_LNS_copy
+ DW_LNE_end_sequence
}
}
@@ -183,7 +183,7 @@ gdb_test_multiple "maint info line-table gdb.dwarf2/dw2-ranges-base.c" \
-re ".*linetable: \\(\\(struct linetable \\*\\) 0x0\\):\r\nNo line table.\r\n" {
exp_continue
}
- -re ".*linetable: \\(\\(struct linetable \\*\\) $hex\\):\r\nINDEX\[ \t\]+LINE\[ \t\]+ADDRESS\[ \t\]+IS-STMT *\r\n" {
+ -re ".*linetable: \\(\\(struct linetable \\*\\) $hex\\):\r\nINDEX\[ \t\]+LINE\[ \t\]+ADDRESS\[ \t\]+IS-STMT\[ \t\]PROLOGUE-END *\r\n" {
exp_continue
}
}
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-ranges-func.exp b/gdb/testsuite/gdb.dwarf2/dw2-ranges-func.exp
index b6077e0c676..aa95dae6bfc 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-ranges-func.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-ranges-func.exp
@@ -133,66 +133,66 @@ proc do_test {suffix} {
# Generate a line table program. An attempt was made to make it
# reasonably accurate as it made debugging the test case easier.
program {
- {DW_LNE_set_address $main_start}
- {line [gdb_get_line_number "main prologue"]}
- {DW_LNS_copy}
- {DW_LNE_set_address main_label}
- {line [gdb_get_line_number "main foo call"]}
- {DW_LNS_copy}
- {DW_LNE_set_address main_label2}
- {line [gdb_get_line_number "main return"]}
- {DW_LNS_copy}
- {DW_LNE_set_address $main_end}
- {line [expr [gdb_get_line_number "main end"] + 1]}
- {DW_LNS_copy}
- {DW_LNE_end_sequence}
-
- {DW_LNE_set_address $foo_start}
- {line [gdb_get_line_number "foo prologue"]}
- {DW_LNS_copy}
- {DW_LNE_set_address foo_label}
- {line [gdb_get_line_number "foo bar call"]}
- {DW_LNS_copy}
- {DW_LNE_set_address foo_label2}
- {line [gdb_get_line_number "foo foo_cold call"]}
- {DW_LNS_copy}
- {DW_LNE_set_address foo_label3}
- {line [gdb_get_line_number "foo end"]}
- {DW_LNS_copy}
- {DW_LNE_set_address $foo_end}
- {DW_LNS_advance_line 1}
- {DW_LNS_copy}
- {DW_LNE_end_sequence}
-
- {DW_LNE_set_address $bar_start}
- {line [gdb_get_line_number "bar end"]}
- {DW_LNS_copy}
- {DW_LNS_advance_pc $bar_len}
- {DW_LNS_advance_line 1}
- {DW_LNS_copy}
- {DW_LNE_end_sequence}
-
- {DW_LNE_set_address $baz_start}
- {line [gdb_get_line_number "baz end"]}
- {DW_LNS_copy}
- {DW_LNS_advance_pc $baz_len}
- {DW_LNS_advance_line 1}
- {DW_LNS_copy}
- {DW_LNE_end_sequence}
-
- {DW_LNE_set_address $foo_cold_start}
- {line [gdb_get_line_number "foo_cold prologue"]}
- {DW_LNS_copy}
- {DW_LNE_set_address foo_cold_label}
- {line [gdb_get_line_number "foo_cold baz call"]}
- {DW_LNS_copy}
- {DW_LNE_set_address foo_cold_label2}
- {line [gdb_get_line_number "foo_cold end"]}
- {DW_LNS_copy}
- {DW_LNE_set_address $foo_cold_end}
- {DW_LNS_advance_line 1}
- {DW_LNS_copy}
- {DW_LNE_end_sequence}
+ DW_LNE_set_address $main_start
+ line [gdb_get_line_number "main prologue"]
+ DW_LNS_copy
+ DW_LNE_set_address main_label
+ line [gdb_get_line_number "main foo call"]
+ DW_LNS_copy
+ DW_LNE_set_address main_label2
+ line [gdb_get_line_number "main return"]
+ DW_LNS_copy
+ DW_LNE_set_address $main_end
+ line [expr [gdb_get_line_number "main end"] + 1]
+ DW_LNS_copy
+ DW_LNE_end_sequence
+
+ DW_LNE_set_address $foo_start
+ line [gdb_get_line_number "foo prologue"]
+ DW_LNS_copy
+ DW_LNE_set_address foo_label
+ line [gdb_get_line_number "foo bar call"]
+ DW_LNS_copy
+ DW_LNE_set_address foo_label2
+ line [gdb_get_line_number "foo foo_cold call"]
+ DW_LNS_copy
+ DW_LNE_set_address foo_label3
+ line [gdb_get_line_number "foo end"]
+ DW_LNS_copy
+ DW_LNE_set_address $foo_end
+ DW_LNS_advance_line 1
+ DW_LNS_copy
+ DW_LNE_end_sequence
+
+ DW_LNE_set_address $bar_start
+ line [gdb_get_line_number "bar end"]
+ DW_LNS_copy
+ DW_LNS_advance_pc $bar_len
+ DW_LNS_advance_line 1
+ DW_LNS_copy
+ DW_LNE_end_sequence
+
+ DW_LNE_set_address $baz_start
+ line [gdb_get_line_number "baz end"]
+ DW_LNS_copy
+ DW_LNS_advance_pc $baz_len
+ DW_LNS_advance_line 1
+ DW_LNS_copy
+ DW_LNE_end_sequence
+
+ DW_LNE_set_address $foo_cold_start
+ line [gdb_get_line_number "foo_cold prologue"]
+ DW_LNS_copy
+ DW_LNE_set_address foo_cold_label
+ line [gdb_get_line_number "foo_cold baz call"]
+ DW_LNS_copy
+ DW_LNE_set_address foo_cold_label2
+ line [gdb_get_line_number "foo_cold end"]
+ DW_LNS_copy
+ DW_LNE_set_address $foo_cold_end
+ DW_LNS_advance_line 1
+ DW_LNS_copy
+ DW_LNE_end_sequence
}
}
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-step-out-of-function-no-stmt.exp b/gdb/testsuite/gdb.dwarf2/dw2-step-out-of-function-no-stmt.exp
index ad4a5f553e6..29e6858e04b 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-step-out-of-function-no-stmt.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-step-out-of-function-no-stmt.exp
@@ -79,29 +79,29 @@ Dwarf::assemble $asm_file {
file_name "$srcfile" 1
program {
- {DW_LNE_set_address bar_label}
- {line 26}
- {DW_LNS_copy}
+ DW_LNE_set_address bar_label
+ line 26
+ DW_LNS_copy
- {DW_LNE_set_address $bar_end}
- {DW_LNE_end_sequence}
+ DW_LNE_set_address $bar_end
+ DW_LNE_end_sequence
- {DW_LNE_set_address main_label}
- {line 32}
- {DW_LNS_copy}
+ DW_LNE_set_address main_label
+ line 32
+ DW_LNS_copy
- {DW_LNE_set_address main_label_2}
- {line 36}
- {DW_LNS_negate_stmt}
- {DW_LNS_copy}
- {DW_LNS_negate_stmt}
+ DW_LNE_set_address main_label_2
+ line 36
+ DW_LNS_negate_stmt
+ DW_LNS_copy
+ DW_LNS_negate_stmt
- {DW_LNE_set_address main_label_3}
- {line 36}
- {DW_LNS_copy}
+ DW_LNE_set_address main_label_3
+ line 36
+ DW_LNS_copy
- {DW_LNE_set_address $main_end}
- {DW_LNE_end_sequence}
+ DW_LNE_set_address $main_end
+ DW_LNE_end_sequence
}
}
}
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-symtab-includes-lookup.exp b/gdb/testsuite/gdb.dwarf2/dw2-symtab-includes-lookup.exp
index feab51ad13f..0390d36f74e 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-symtab-includes-lookup.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-symtab-includes-lookup.exp
@@ -77,7 +77,7 @@ Dwarf::assemble $asm_file {
include_dir "${srcdir}/${subdir}"
file_name "dw2-symtab-includes.h" 1
program {
- {DW_LNS_advance_line 1}
+ DW_LNS_advance_line 1
}
}
}
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-symtab-includes.exp b/gdb/testsuite/gdb.dwarf2/dw2-symtab-includes.exp
index e5c3342cf81..6c6d5fe46b4 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-symtab-includes.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-symtab-includes.exp
@@ -51,7 +51,7 @@ Dwarf::assemble $asm_file {
include_dir "${srcdir}/${subdir}"
file_name "dw2-symtab-includes.h" 1
program {
- {DW_LNS_advance_line 1}
+ DW_LNS_advance_line 1
}
}
}
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-vendor-extended-opcode.exp b/gdb/testsuite/gdb.dwarf2/dw2-vendor-extended-opcode.exp
index 86b5cc69e2e..de8c82bb40c 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-vendor-extended-opcode.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-vendor-extended-opcode.exp
@@ -57,14 +57,14 @@ Dwarf::assemble $asm_file {
file_name "$srcfile" 1
program {
- {DW_LNE_set_address main_label}
- {line 27}
- {DW_LNE_user 1 $DW_LNE_lo_usr}
- {DW_LNE_user 2 $DW_LNE_hi_usr}
- {DW_LNS_copy}
+ DW_LNE_set_address main_label
+ line 27
+ DW_LNE_user 1 $DW_LNE_lo_usr
+ DW_LNE_user 2 $DW_LNE_hi_usr
+ DW_LNS_copy
- {DW_LNE_set_address main_label_2}
- {DW_LNE_end_sequence}
+ DW_LNE_set_address main_label_2
+ DW_LNE_end_sequence
}
}
}
diff --git a/gdb/testsuite/gdb.dwarf2/fission-multi-cu.exp b/gdb/testsuite/gdb.dwarf2/fission-multi-cu.exp
index 9baa67ce7a3..62bffdf709d 100644
--- a/gdb/testsuite/gdb.dwarf2/fission-multi-cu.exp
+++ b/gdb/testsuite/gdb.dwarf2/fission-multi-cu.exp
@@ -88,18 +88,18 @@ Dwarf::assemble $asm_file_1 {
file_name "$srcfile" 1
program {
- {DW_LNE_set_address $func_start}
- {DW_LNS_advance_line 24}
- {DW_LNS_copy}
-
- {DW_LNE_set_address line_label_4}
- {DW_LNS_advance_line 3}
- {DW_LNS_copy}
-
- {DW_LNE_set_address $func_end}
- {DW_LNS_advance_line 1}
- {DW_LNS_copy}
- {DW_LNE_end_sequence}
+ DW_LNE_set_address $func_start
+ DW_LNS_advance_line 24
+ DW_LNS_copy
+
+ DW_LNE_set_address line_label_4
+ DW_LNS_advance_line 3
+ DW_LNS_copy
+
+ DW_LNE_set_address $func_end
+ DW_LNS_advance_line 1
+ DW_LNS_copy
+ DW_LNE_end_sequence
}
}
@@ -164,26 +164,26 @@ Dwarf::assemble $asm_file_2 {
file_name "$srcfile" 1
program {
- {DW_LNE_set_address $main_start}
- {DW_LNS_advance_line 32}
- {DW_LNS_copy}
-
- {DW_LNE_set_address line_label_1}
- {DW_LNS_advance_line 3}
- {DW_LNS_copy}
-
- {DW_LNE_set_address line_label_2}
- {DW_LNS_advance_line 2}
- {DW_LNS_copy}
-
- {DW_LNE_set_address line_label_3}
- {DW_LNS_advance_line 2}
- {DW_LNS_copy}
-
- {DW_LNE_set_address $main_end}
- {DW_LNS_advance_line 2}
- {DW_LNS_copy}
- {DW_LNE_end_sequence}
+ DW_LNE_set_address $main_start
+ DW_LNS_advance_line 32
+ DW_LNS_copy
+
+ DW_LNE_set_address line_label_1
+ DW_LNS_advance_line 3
+ DW_LNS_copy
+
+ DW_LNE_set_address line_label_2
+ DW_LNS_advance_line 2
+ DW_LNS_copy
+
+ DW_LNE_set_address line_label_3
+ DW_LNS_advance_line 2
+ DW_LNS_copy
+
+ DW_LNE_set_address $main_end
+ DW_LNS_advance_line 2
+ DW_LNS_copy
+ DW_LNE_end_sequence
}
}
diff --git a/gdb/testsuite/gdb.dwarf2/fortran-var-string.c b/gdb/testsuite/gdb.dwarf2/fortran-var-string.c
new file mode 100644
index 00000000000..a677b7e6550
--- /dev/null
+++ b/gdb/testsuite/gdb.dwarf2/fortran-var-string.c
@@ -0,0 +1,31 @@
+/* Copyright 2022 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+/* In the generated DWARF, we'll pretend that ARG is a string with dynamic
+ length. */
+int
+main_helper (void *arg)
+{
+ asm ("main_helper_label: .globl main_helper_label");
+ return 0;
+}
+
+int
+main (void)
+{
+ asm ("main_label: .globl main_label");
+ main_helper (0);
+ return 0;
+}
diff --git a/gdb/testsuite/gdb.dwarf2/fortran-var-string.exp b/gdb/testsuite/gdb.dwarf2/fortran-var-string.exp
new file mode 100644
index 00000000000..793c4418fd6
--- /dev/null
+++ b/gdb/testsuite/gdb.dwarf2/fortran-var-string.exp
@@ -0,0 +1,175 @@
+# Copyright 2022 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+load_lib dwarf.exp
+
+# This test can only be run on targets which support DWARF-2 and use gas.
+if {![dwarf2_support]} {
+ return 0
+}
+
+standard_testfile .c -dw.S
+
+# We need to know the size of integer and address types in order
+# to write some of the debugging info we'd like to generate.
+#
+# For that, we ask GDB by debugging our dynarr-ptr.c program.
+# Any program would do, but since we already have dynarr-ptr.c
+# specifically for this testcase, might as well use that.
+
+if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile}] } {
+ return -1
+}
+
+# Make some DWARF for the test.
+set asm_file [standard_output_file $srcfile2]
+Dwarf::assemble $asm_file {
+ set int_size [get_sizeof "int" 4]
+
+ get_func_info main
+ get_func_info main_helper
+
+ cu {} {
+ DW_TAG_compile_unit {
+ {DW_AT_language @DW_LANG_Fortran90}
+ {DW_AT_name fortran-var-string.f90}
+ {DW_AT_comp_dir /tmp}
+ } {
+ declare_labels integer_label string_label array_lb_label \
+ array_ub_label
+
+ DW_TAG_subprogram {
+ {name main}
+ {low_pc $main_helper_start addr}
+ {high_pc $main_helper_len data8}
+ {DW_AT_type :$integer_label}
+ {DW_AT_decl_file 1 data1}
+ {DW_AT_decl_line 1 data1}
+ }
+
+ DW_TAG_subprogram {
+ {name test_1_func}
+ {low_pc $main_start addr}
+ {high_pc $main_len data8}
+ {DW_AT_type :$integer_label}
+ {DW_AT_decl_file 1 data1}
+ {DW_AT_decl_line 2 data1}
+ } {
+ formal_parameter {
+ {name arg1}
+ {type :$string_label}
+ }
+ }
+
+ DW_TAG_subprogram {
+ {name test_2_func}
+ {low_pc $main_start addr}
+ {high_pc $main_len data8}
+ {DW_AT_type :$integer_label}
+ {DW_AT_decl_file 1 data1}
+ {DW_AT_decl_line 3 data1}
+ } {
+ formal_parameter {
+ {name arg1}
+ {type :$array_ub_label}
+ }
+ }
+
+ DW_TAG_subprogram {
+ {name test_3_func}
+ {low_pc $main_start addr}
+ {high_pc $main_len data8}
+ {DW_AT_type :$integer_label}
+ {DW_AT_decl_file 1 data1}
+ {DW_AT_decl_line 4 data1}
+ } {
+ formal_parameter {
+ {name arg1}
+ {type :$array_lb_label}
+ }
+ }
+
+ integer_label: DW_TAG_base_type {
+ {DW_AT_byte_size $int_size DW_FORM_sdata}
+ {DW_AT_encoding @DW_ATE_signed}
+ {DW_AT_name integer}
+ }
+
+ string_label: DW_TAG_string_type {
+ {DW_AT_byte_size $int_size DW_FORM_sdata}
+ {DW_AT_name .str.arg}
+ {DW_AT_string_length {} DW_FORM_block1}
+ }
+
+ array_lb_label: DW_TAG_array_type {
+ {DW_AT_ordering 1 data1}
+ {DW_AT_type :$integer_label}
+ } {
+ DW_TAG_subrange_type {
+ {DW_AT_lower_bound {} DW_FORM_block1}
+ {DW_AT_upper_bound 10 DW_FORM_data1}
+ }
+ }
+
+ array_ub_label: DW_TAG_array_type {
+ {DW_AT_ordering 1 data1}
+ {DW_AT_type :$integer_label}
+ } {
+ DW_TAG_subrange_type {
+ {DW_AT_upper_bound {} DW_FORM_block1}
+ }
+ }
+ }
+ }
+}
+
+# Now that we've generated the DWARF debugging info, rebuild our
+# program using our debug info instead of the info generated by
+# the compiler.
+
+if { [prepare_for_testing "failed to prepare" ${testfile} \
+ [list $srcfile $asm_file] {nodebug}] } {
+ return -1
+}
+
+if ![runto_main] {
+ return -1
+}
+
+gdb_test_no_output "set language fortran"
+
+gdb_test "info functions test_1_func" \
+ "2:\\s+integer test_1_func\\(character\\*\\(\\*\\)\\);"
+
+# We print `1` here as the bound because GDB treats this as an assumed
+# size array, and just reports the lower bound value for the upper
+# bound.
+#
+# We might, in the future, decide that there's a better way we could
+# tell the user about the type of this array argument, when that
+# happens it's OK to change the expected results here.
+gdb_test "info functions test_2_func" \
+ "3:\\s+integer test_2_func\\(integer \\(1\\)\\);"
+
+# It's not completely clear that this error is correct here. Why
+# can't the lower bound be a dynamic expression?
+#
+# This test was initially added to guard against the case where GDB
+# was crashing if/when it saw this situation.
+#
+# If later on, GDB's handling of array types with a dynamic loewr
+# bound changes, then it is possible that the expected result here
+# should change.
+gdb_test "info functions test_3_func" \
+ "4:\\s+Lower bound may not be '\\*' in F77"
diff --git a/gdb/testsuite/gdb.dwarf2/gdb-index-cxx.exp b/gdb/testsuite/gdb.dwarf2/gdb-index-cxx.exp
new file mode 100644
index 00000000000..26ecdec962a
--- /dev/null
+++ b/gdb/testsuite/gdb.dwarf2/gdb-index-cxx.exp
@@ -0,0 +1,35 @@
+# Copyright 2022 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+load_lib dwarf.exp
+
+standard_testfile index.cc
+
+if {[prepare_for_testing "failed to prepare" "${testfile}" \
+ [list ${srcfile}]]} {
+ return -1
+}
+
+# The bug was that gdb would crash when saving.
+set output_dir [standard_output_file ""]
+set cmd "save gdb-index"
+gdb_test_multiple "$cmd $output_dir" $cmd {
+ -re -wrap "Cannot use an index to create the index.*" {
+ unsupported $gdb_test_name
+ }
+ -re "^$cmd \[^\r\n\]*\r\n$gdb_prompt $" {
+ pass $gdb_test_name
+ }
+}
diff --git a/gdb/testsuite/gdb.dwarf2/gdb-index-nodebug.exp b/gdb/testsuite/gdb.dwarf2/gdb-index-nodebug.exp
index fe1398f973c..5b671727e65 100644
--- a/gdb/testsuite/gdb.dwarf2/gdb-index-nodebug.exp
+++ b/gdb/testsuite/gdb.dwarf2/gdb-index-nodebug.exp
@@ -28,6 +28,11 @@ set have_index_re \
"Error while writing index for \[^\r\n\]*:" \
"Cannot use an index to create the index"]
set have_index_re [join $have_index_re]
+set no_debug_re \
+ [list \
+ "Error while writing index for \[^\r\n\]*:" \
+ "No debugging symbols"]
+set no_debug_re [join $no_debug_re]
set readnow_p [readnow]
set index_file ${testfile}.gdb-index
@@ -41,6 +46,9 @@ gdb_test_multiple $cmd "try to save gdb index" {
fail $gdb_test_name
}
}
+ -re -wrap $no_debug_re {
+ pass $gdb_test_name
+ }
-re -wrap "^$cmd" {
pass $gdb_test_name
}
diff --git a/gdb/testsuite/gdb.dwarf2/gdb-index.exp b/gdb/testsuite/gdb.dwarf2/gdb-index.exp
index 587b034b28b..5badcaccb1b 100644
--- a/gdb/testsuite/gdb.dwarf2/gdb-index.exp
+++ b/gdb/testsuite/gdb.dwarf2/gdb-index.exp
@@ -90,12 +90,15 @@ gdb_test_multiple "mt print objfiles ${testfile}" $test {
-re "debug_names.*${gdb_prompt} $" {
set binfile_with_index $binfile
}
- -re "Psymtabs.*${gdb_prompt} $" {
+ -re "(Psymtabs|Cooked).*${gdb_prompt} $" {
set binfile_with_index [local_add_gdb_index $binfile]
if { ${binfile_with_index} == "" } {
return -1
}
}
+ -re ".*${gdb_prompt} $" {
+ fail "unrecognized symbol reader"
+ }
}
# Ok, we have a copy of $binfile with an index.
diff --git a/gdb/testsuite/gdb.dwarf2/imported-unit-bp.exp.tcl b/gdb/testsuite/gdb.dwarf2/imported-unit-bp.exp.tcl
index 4d95400caca..fe92c530888 100644
--- a/gdb/testsuite/gdb.dwarf2/imported-unit-bp.exp.tcl
+++ b/gdb/testsuite/gdb.dwarf2/imported-unit-bp.exp.tcl
@@ -83,37 +83,37 @@ Dwarf::assemble $asm_file {
file_name "$srcfile" 1
program {
- {DW_LNE_set_address line_label_1}
- {DW_LNS_advance_line 15}
- {DW_LNS_copy}
+ DW_LNE_set_address line_label_1
+ DW_LNS_advance_line 15
+ DW_LNS_copy
- {DW_LNE_set_address line_label_2}
- {DW_LNS_advance_line 1}
- {DW_LNS_copy}
+ DW_LNE_set_address line_label_2
+ DW_LNS_advance_line 1
+ DW_LNS_copy
- {DW_LNE_set_address line_label_3}
- {DW_LNS_advance_line 4}
- {DW_LNS_copy}
+ DW_LNE_set_address line_label_3
+ DW_LNS_advance_line 4
+ DW_LNS_copy
- {DW_LNE_set_address line_label_4}
- {DW_LNS_advance_line 1}
- {DW_LNS_copy}
+ DW_LNE_set_address line_label_4
+ DW_LNS_advance_line 1
+ DW_LNS_copy
- {DW_LNS_advance_line -4}
- {DW_LNS_negate_stmt}
- {DW_LNS_copy}
+ DW_LNS_advance_line -4
+ DW_LNS_negate_stmt
+ DW_LNS_copy
- {DW_LNE_set_address line_label_5}
- {DW_LNS_advance_line 1}
- {DW_LNS_copy}
+ DW_LNE_set_address line_label_5
+ DW_LNS_advance_line 1
+ DW_LNS_copy
- {DW_LNE_set_address line_label_6}
- {DW_LNS_advance_line 1}
- {DW_LNS_negate_stmt}
- {DW_LNS_copy}
+ DW_LNE_set_address line_label_6
+ DW_LNS_advance_line 1
+ DW_LNS_negate_stmt
+ DW_LNS_copy
- {DW_LNE_set_address line_label_7}
- {DW_LNE_end_sequence}
+ DW_LNE_set_address line_label_7
+ DW_LNE_end_sequence
}
}
}
diff --git a/gdb/testsuite/gdb.dwarf2/index.cc b/gdb/testsuite/gdb.dwarf2/index.cc
new file mode 100644
index 00000000000..763e2f231b9
--- /dev/null
+++ b/gdb/testsuite/gdb.dwarf2/index.cc
@@ -0,0 +1,29 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+ Copyright 2022 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+/* Test C++ index saving. */
+
+enum E { ONE, TWO };
+E e_value = ONE;
+
+enum class EC { THREE, FOUR };
+EC ec_value = EC::THREE;
+
+int main ()
+{
+ return 0;
+}
diff --git a/gdb/testsuite/gdb.dwarf2/locexpr-data-member-location.exp b/gdb/testsuite/gdb.dwarf2/locexpr-data-member-location.exp
index a0831082f09..adb4e0a4c21 100644
--- a/gdb/testsuite/gdb.dwarf2/locexpr-data-member-location.exp
+++ b/gdb/testsuite/gdb.dwarf2/locexpr-data-member-location.exp
@@ -267,35 +267,38 @@ Dwarf::assemble ${asm_file} {
# Generate a line table program.
program {
- {DW_LNE_set_address $foo_start}
- {line [gdb_get_line_number "foo prologue"]}
- {DW_LNS_copy}
- {DW_LNE_set_address foo_label}
- {line [gdb_get_line_number "foo return"]}
- {DW_LNS_copy}
- {line [gdb_get_line_number "foo end"]}
- {DW_LNS_copy}
- {DW_LNE_set_address $foo_end}
- {DW_LNS_advance_line 1}
- {DW_LNS_copy}
- {DW_LNE_end_sequence}
-
- {DW_LNE_set_address $bar_start}
- {line [gdb_get_line_number "bar prologue"]}
- {DW_LNS_copy}
- {DW_LNE_set_address bar_label}
- {line [gdb_get_line_number "bar return"]}
- {DW_LNS_copy}
- {line [gdb_get_line_number "bar end"]}
- {DW_LNS_copy}
- {DW_LNE_set_address $bar_end}
- {DW_LNS_advance_line 1}
- {DW_LNS_copy}
- {DW_LNE_end_sequence}
+ DW_LNE_set_address $foo_start
+ line [gdb_get_line_number "foo prologue"]
+ DW_LNS_copy
+ DW_LNE_set_address foo_label
+ line [gdb_get_line_number "foo return"]
+ DW_LNS_copy
+ line [gdb_get_line_number "foo end"]
+ DW_LNS_copy
+ DW_LNE_set_address $foo_end
+ DW_LNS_advance_line 1
+ DW_LNS_copy
+ DW_LNE_end_sequence
+
+ DW_LNE_set_address $bar_start
+ line [gdb_get_line_number "bar prologue"]
+ DW_LNS_copy
+ DW_LNE_set_address bar_label
+ line [gdb_get_line_number "bar return"]
+ DW_LNS_copy
+ line [gdb_get_line_number "bar end"]
+ DW_LNS_copy
+ DW_LNE_set_address $bar_end
+ DW_LNS_advance_line 1
+ DW_LNS_copy
+ DW_LNE_end_sequence
}
}
aranges {} cu_label {
+ # This 0,0 entry tests that the .debug_aranges reader can
+ # handle an apparent terminator before the end of the ranges.
+ arange {} 0 0
arange {} $foo_start $foo_end
arange {} $bar_start $bar_end
}
diff --git a/gdb/testsuite/gdb.dwarf2/negative-data-member-location.c b/gdb/testsuite/gdb.dwarf2/negative-data-member-location.c
new file mode 100644
index 00000000000..6d8e8df01e9
--- /dev/null
+++ b/gdb/testsuite/gdb.dwarf2/negative-data-member-location.c
@@ -0,0 +1,31 @@
+/* Copyright (C) 2021-2022 Free Software Foundation, Inc.
+
+ This file is part of GDB.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+struct the_struct
+{
+ /* Define the field as an array of char instead of an int to support targets
+ that have sizeof(int) != 4. */
+ char x[4];
+};
+
+struct the_struct s = { { 0x11, 0x22, 0x22, 0x11 } };
+
+int
+main (void)
+{
+ return 0;
+}
diff --git a/gdb/testsuite/gdb.dwarf2/negative-data-member-location.exp b/gdb/testsuite/gdb.dwarf2/negative-data-member-location.exp
new file mode 100644
index 00000000000..57030d77134
--- /dev/null
+++ b/gdb/testsuite/gdb.dwarf2/negative-data-member-location.exp
@@ -0,0 +1,77 @@
+# Copyright 2021-2022 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Test our workaround for a GCC 11 bug, where it sometimes puts a -1 value for
+# DW_AT_data_member_location:
+#
+# Negative DW_AT_data_member_location
+# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101378
+
+load_lib dwarf.exp
+
+# This test can only be run on targets which support DWARF-2 and use gas.
+if { ![dwarf2_support] } {
+ return 0
+}
+
+standard_testfile .c -dw.S
+
+set asm_file [standard_output_file ${srcfile2}]
+
+Dwarf::assemble ${asm_file} {
+ cu {} {
+ DW_TAG_compile_unit {
+ {DW_AT_language @DW_LANG_C99}
+ {DW_AT_producer "GNU C++17 11.1.0 -mtune=generic -march=x86-64 -g3 -O0"}
+ {name ${::srcfile}}
+ } {
+ declare_labels int_label struct_label
+
+ int_label: DW_TAG_base_type {
+ {DW_AT_byte_size 4 DW_FORM_udata}
+ {DW_AT_encoding @DW_ATE_signed}
+ {DW_AT_name "int"}
+ }
+
+ struct_label: DW_TAG_structure_type {
+ {DW_AT_name "the_struct"}
+ {DW_AT_byte_size 4 DW_FORM_udata}
+ } {
+ DW_TAG_member {
+ {DW_AT_name "field"}
+ {DW_AT_type :$int_label}
+ {DW_AT_data_member_location -1 DW_FORM_sdata}
+ }
+ }
+
+ DW_TAG_variable {
+ {DW_AT_name "s"}
+ {DW_AT_type :$struct_label}
+ {DW_AT_location {DW_OP_addr [gdb_target_symbol "s"]} SPECIAL_expr}
+ }
+ }
+ }
+}
+
+if { [prepare_for_testing "failed to prepare" ${testfile} [list $srcfile $asm_file] {nodebug}] } {
+ return
+}
+
+if { ![runto_main] } {
+ return
+}
+
+gdb_test "print /x s" " = {field = 0x11222211}"
+gdb_test "print /x s.field" " = 0x11222211"
diff --git a/gdb/testsuite/gdb.dwarf2/struct-decl.exp b/gdb/testsuite/gdb.dwarf2/struct-decl.exp
new file mode 100644
index 00000000000..739eaaabb2b
--- /dev/null
+++ b/gdb/testsuite/gdb.dwarf2/struct-decl.exp
@@ -0,0 +1,74 @@
+# Copyright 2022 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Check that the DWARF reader works when a DW_AT_specification refers
+# into a type hierarchy that is marked as a declaration.
+
+load_lib dwarf.exp
+
+# This test can only be run on targets which support DWARF-2 and use gas.
+if {![dwarf2_support]} {
+ return 0
+}
+
+standard_testfile main.c -debug.S
+
+# Set up the DWARF for the test.
+set asm_file [standard_output_file $srcfile2]
+Dwarf::assemble $asm_file {
+ global srcfile
+
+ cu {} {
+ DW_TAG_compile_unit {
+ {DW_AT_language @DW_LANG_C_plus_plus}
+ {DW_AT_name $srcfile}
+ {DW_AT_comp_dir /tmp}
+
+ } {
+ declare_labels origin
+
+ # The new indexer was ignoring types that were marked as
+ # declarations, even if they could contain methods --
+ # which meant that if a method referred back to them via a
+ # specification, it would get the wrong name.
+ DW_TAG_structure_type {
+ {DW_AT_byte_size 8 DW_FORM_sdata}
+ {DW_AT_encoding @DW_ATE_signed}
+ {DW_AT_name the_type}
+ {DW_AT_declaration 1 DW_FORM_flag_present}
+ } {
+ origin: DW_TAG_subprogram {
+ {DW_AT_name "method"}
+ {DW_AT_declaration 1 DW_FORM_flag_present}
+ }
+ }
+
+ # The low and high PC are phony: we just need an address
+ # range that is valid in the program, so we use the main
+ # function's range.
+ DW_TAG_subprogram {
+ {DW_AT_specification :$origin}
+ {MACRO_AT_range main}
+ }
+ }
+ }
+}
+
+if {[prepare_for_testing "failed to prepare" ${testfile} \
+ [list $srcfile $asm_file] {nodebug}]} {
+ return -1
+}
+
+gdb_breakpoint "the_type::method" message
diff --git a/gdb/testsuite/gdb.dwarf2/subrange-enum.exp b/gdb/testsuite/gdb.dwarf2/subrange-enum.exp
new file mode 100644
index 00000000000..b9f7cb68233
--- /dev/null
+++ b/gdb/testsuite/gdb.dwarf2/subrange-enum.exp
@@ -0,0 +1,78 @@
+# Copyright 2022 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Test generic printing of subrange values.
+
+load_lib dwarf.exp
+
+# This test can only be run on targets which support DWARF-2 and use gas.
+if {![dwarf2_support]} {
+ return 0
+}
+
+standard_testfile main.c -dw.S
+
+# Make some DWARF for the test.
+set asm_file [standard_output_file $srcfile2]
+Dwarf::assemble $asm_file {
+ cu {} {
+ compile_unit {{language @DW_LANG_C}} {
+ declare_labels integer_label enum_label subrange_label
+
+ integer_label: DW_TAG_base_type {
+ {DW_AT_byte_size 4 DW_FORM_sdata}
+ {DW_AT_encoding @DW_ATE_signed}
+ {DW_AT_name integer}
+ }
+
+ enum_label: DW_TAG_enumeration_type {
+ {DW_AT_name E}
+ {DW_AT_type :$integer_label}
+ } {
+ DW_TAG_enumerator {
+ {DW_AT_name ONE}
+ {DW_AT_const_value 1 DW_FORM_sdata}
+ }
+ DW_TAG_enumerator {
+ {DW_AT_name TWO}
+ {DW_AT_const_value 2 DW_FORM_sdata}
+ }
+ DW_TAG_enumerator {
+ {DW_AT_name THREE}
+ {DW_AT_const_value 3 DW_FORM_sdata}
+ }
+ }
+
+ subrange_label: DW_TAG_subrange_type {
+ {lower_bound 1 DW_FORM_sdata}
+ {upper_bound 2 DW_FORM_sdata}
+ {type :$enum_label}
+ }
+
+ DW_TAG_variable {
+ {name rangeval}
+ {type :$subrange_label}
+ {const_value 2 DW_FORM_udata}
+ }
+ }
+ }
+}
+
+if { [prepare_for_testing "failed to prepare" ${testfile} \
+ [list $srcfile $asm_file] {nodebug}] } {
+ return -1
+}
+
+gdb_test "print rangeval" " = TWO"
diff --git a/gdb/testsuite/gdb.fortran/array-indices.exp b/gdb/testsuite/gdb.fortran/array-indices.exp
new file mode 100644
index 00000000000..2740b81e038
--- /dev/null
+++ b/gdb/testsuite/gdb.fortran/array-indices.exp
@@ -0,0 +1,200 @@
+# Copyright 2022 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Test the printing of element indices in Fortran arrays.
+
+if {[skip_fortran_tests]} { return -1 }
+
+load_lib fortran.exp
+
+# Build up the expected output for each array.
+set n0 {(-2)}
+set n1 {(-1)}
+set n2 {(0)}
+set n3 {(1)}
+set n4 {(2)}
+set n5 {(3)}
+set a9p9o "($n0 = 9, $n1 = 9, $n2 = 9, $n3 = 9, $n4 = 9, $n5 = 9)"
+set a1p "($n0 = 1, $n1 = 1, $n2 = 1, $n3 = 1, $n4 = 1)"
+set a1p9 "($n0 = 1, $n1 = 1, $n2 = 1, $n3 = 1, $n4 = 1, $n5 = 9)"
+set a2po "($n0 = 2, $n1 = 2, $n2 = 2, $n3 = 2, $n4 = 2)"
+set a2p "($n0 = ${a2po} $n1 = ${a2po} $n2 = ${a2po} $n3 = ${a2po}\
+ $n4 = ${a2po})"
+set a2p9o "($n0 = 2, $n1 = 2, $n2 = 2, $n3 = 2, $n4 = 2, $n5 = 9)"
+set a2p9 "($n0 = ${a2p9o} $n1 = ${a2p9o} $n2 = ${a2p9o} $n3 = ${a2p9o}\
+ $n4 = ${a2p9o} $n5 = ${a9p9o})"
+set a3po "($n0 = 3, $n1 = 3, $n2 = 3, $n3 = 3, $n4 = 3)"
+set a3p "($n0 = ${a3po} $n1 = ${a3po} $n2 = ${a3po} $n3 = ${a3po}\
+ $n4 = ${a3po})"
+set a3p "($n0 = ${a3p} $n1 = ${a3p} $n2 = ${a3p} $n3 = ${a3p} $n4 = ${a3p})"
+set a3p9o "($n0 = 3, $n1 = 3, $n2 = 3, $n3 = 3, $n4 = 3, $n5 = 9)"
+set a3p9 "($n0 = ${a3p9o} $n1 = ${a3p9o} $n2 = ${a3p9o} $n3 = ${a3p9o}\
+ $n4 = ${a3p9o} $n5 = ${a9p9o})"
+set a9p9 "($n0 = ${a9p9o} $n1 = ${a9p9o} $n2 = ${a9p9o} $n3 = ${a9p9o}\
+ $n4 = ${a9p9o} $n5 = ${a9p9o})"
+set a3p9 "($n0 = ${a3p9} $n1 = ${a3p9} $n2 = ${a3p9} $n3 = ${a3p9}\
+ $n4 = ${a3p9} $n5 = ${a9p9})"
+
+# Convert the output into a regexp.
+set r1p [string_to_regexp $a1p]
+set r1p9 [string_to_regexp $a1p9]
+set r2po [string_to_regexp $a2po]
+set r2p9o [string_to_regexp $a2p9o]
+set r2p [string_to_regexp $a2p]
+set r2p9 [string_to_regexp $a2p9]
+set r3po [string_to_regexp $a3po]
+set r3p9o [string_to_regexp $a3p9o]
+set r3p [string_to_regexp $a3p]
+set r3p9 [string_to_regexp $a3p9]
+
+set rep5 "<repeats 5 times>"
+set rep6 "<repeats 6 times>"
+
+proc array_repeat { variant } {
+ global testfile srcfile
+ upvar n0 n0 n1 n1 n2 n2 n5 n5
+ upvar r1p r1p r1p9 r1p9 r2po r2po r2p9o r2p9o r2p r2p r2p9 r2p9
+ upvar r3po r3po r3p9o r3p9o r3p r3p r3p9 r3p9
+ upvar a2po a2po a2p9o a2p9o a3po a3po a3p9o a3p9o
+ upvar rep5 rep5 rep6 rep6
+
+ standard_testfile "${variant}.f90"
+
+ if {[prepare_for_testing ${testfile}.exp ${variant} ${srcfile} \
+ {debug f90}]} {
+ return -1
+ }
+
+ with_test_prefix "${variant}" {
+ gdb_test_no_output "set print array-indexes on"
+ }
+
+ if {![fortran_runto_main]} {
+ perror "Could not run to main."
+ continue
+ }
+
+ gdb_breakpoint [gdb_get_line_number "Break here"]
+ gdb_continue_to_breakpoint "${variant}"
+
+ with_test_prefix "${variant}: repeats=unlimited, elements=unlimited" {
+ # Check the arrays print as expected.
+ gdb_test_no_output "set print repeats unlimited"
+ gdb_test_no_output "set print elements unlimited"
+
+ gdb_test "print array_1d" "${r1p}"
+ gdb_test "print array_1d9" "${r1p9}"
+ gdb_test "print array_2d" "${r2p}"
+ gdb_test "print array_2d9" "${r2p9}"
+ gdb_test "print array_3d" "${r3p}"
+ gdb_test "print array_3d9" "${r3p9}"
+ }
+
+ with_test_prefix "${variant}: repeats=4, elements=unlimited" {
+ # Now set the repeat limit.
+ gdb_test_no_output "set print repeats 4"
+ gdb_test_no_output "set print elements unlimited"
+
+ gdb_test "print array_1d" \
+ [string_to_regexp "($n0 = 1, ${rep5})"]
+ gdb_test "print array_1d9" \
+ [string_to_regexp "($n0 = 1, ${rep5}, $n5 = 9)"]
+ gdb_test "print array_2d" \
+ [string_to_regexp "($n0 = ($n0 = 2, ${rep5}) ${rep5})"]
+ gdb_test "print array_2d9" \
+ [string_to_regexp "($n0 = ($n0 = 2, ${rep5}, $n5 = 9) ${rep5}\
+ $n5 = ($n0 = 9, ${rep6}))"]
+ gdb_test "print array_3d" \
+ [string_to_regexp "($n0 = ($n0 = ($n0 = 3, ${rep5}) ${rep5})\
+ ${rep5})"]
+ gdb_test "print array_3d9" \
+ [string_to_regexp "($n0 = ($n0 = ($n0 = 3, ${rep5}, $n5 = 9)\
+ ${rep5} $n5 = ($n0 = 9, ${rep6}))\
+ ${rep5}\
+ $n5 = ($n0 = ($n0 = 9, ${rep6}) ${rep6}))"]
+ }
+
+ with_test_prefix "${variant}: repeats=unlimited, elements=12" {
+ # Now set the element limit.
+ gdb_test_no_output "set print repeats unlimited"
+ gdb_test_no_output "set print elements 12"
+
+ gdb_test "print array_1d" "${r1p}"
+ gdb_test "print array_1d9" "${r1p9}"
+ gdb_test "print array_2d" \
+ [string_to_regexp "($n0 = ${a2po} $n1 = ${a2po}\
+ $n2 = ($n0 = 2, $n1 = 2, ...) ...)"]
+ gdb_test "print array_2d9" \
+ [string_to_regexp "($n0 = ${a2p9o} $n1 = ${a2p9o} ...)"]
+ gdb_test "print array_3d" \
+ [string_to_regexp "($n0 = ($n0 = ${a3po} $n1 = ${a3po}\
+ $n2 = ($n0 = 3, $n1 = 3, ...)\
+ ...) ...)"]
+ gdb_test "print array_3d9" \
+ [string_to_regexp "($n0 = ($n0 = ${a3p9o} $n1 = ${a3p9o} ...)\
+ ...)"]
+ }
+
+ with_test_prefix "${variant}: repeats=4, elements=12" {
+ # Now set both limits.
+ gdb_test_no_output "set print repeats 4"
+ gdb_test_no_output "set print elements 12"
+
+ gdb_test "print array_1d" \
+ [string_to_regexp "($n0 = 1, ${rep5})"]
+ gdb_test "print array_1d9" \
+ [string_to_regexp "($n0 = 1, ${rep5}, $n5 = 9)"]
+ gdb_test "print array_2d" \
+ [string_to_regexp "($n0 = ($n0 = 2, ${rep5})\
+ $n1 = ($n0 = 2, ${rep5})\
+ $n2 = ($n0 = 2, $n1 = 2, ...) ...)"]
+ gdb_test "print array_2d9" \
+ [string_to_regexp "($n0 = ($n0 = 2, ${rep5}, $n5 = 9)\
+ $n1 = ($n0 = 2, ${rep5}, $n5 = 9) ...)"]
+ gdb_test "print array_3d" \
+ [string_to_regexp "($n0 = ($n0 = ($n0 = 3, ${rep5})\
+ $n1 = ($n0 = 3, ${rep5})\
+ $n2 = ($n0 = 3, $n1 = 3, ...) ...) ...)"]
+ gdb_test "print array_3d9" \
+ [string_to_regexp "($n0 = ($n0 = ($n0 = 3, ${rep5}, $n5 = 9)\
+ $n1 = ($n0 = 3, ${rep5}, $n5 = 9)\
+ ...) ...)"]
+ }
+
+ with_test_prefix "${variant}: repeats=4, elements=30" {
+ # Now set both limits.
+ gdb_test_no_output "set print repeats 4"
+ gdb_test_no_output "set print elements 30"
+
+ gdb_test "print array_1d" \
+ [string_to_regexp "($n0 = 1, ${rep5})"]
+ gdb_test "print array_1d9" \
+ [string_to_regexp "($n0 = 1, ${rep5}, $n5 = 9)"]
+ gdb_test "print array_2d" \
+ [string_to_regexp "($n0 = ($n0 = 2, ${rep5}) ${rep5})"]
+ gdb_test "print array_2d9" \
+ [string_to_regexp "($n0 = ($n0 = 2, ${rep5}, $n5 = 9) ${rep5}\
+ ...)"]
+ gdb_test "print array_3d" \
+ [string_to_regexp "($n0 = ($n0 = ($n0 = 3, ${rep5}) ${rep5})\
+ $n1 = ($n0 = ($n0 = 3, ${rep5}) ...) ...)"]
+ gdb_test "print array_3d9" \
+ [string_to_regexp "($n0 = ($n0 = ($n0 = 3, ${rep5}, $n5 = 9)\
+ ${rep5} ...) ...)"]
+ }
+}
+
+array_repeat "array-repeat"
+array_repeat "array-slices-repeat"
diff --git a/gdb/testsuite/gdb.fortran/array-repeat.exp b/gdb/testsuite/gdb.fortran/array-repeat.exp
new file mode 100644
index 00000000000..bf16735c7e4
--- /dev/null
+++ b/gdb/testsuite/gdb.fortran/array-repeat.exp
@@ -0,0 +1,167 @@
+# Copyright 2022 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Test the detection and printing of repeated elements in Fortran arrays.
+
+if {[skip_fortran_tests]} { return -1 }
+
+load_lib fortran.exp
+
+# Build up the expected output for each array.
+set a9p9o "(9, 9, 9, 9, 9, 9)"
+set a1p "(1, 1, 1, 1, 1)"
+set a1p9 "(1, 1, 1, 1, 1, 9)"
+set a2po "(2, 2, 2, 2, 2)"
+set a2p "(${a2po} ${a2po} ${a2po} ${a2po} ${a2po})"
+set a2p9o "(2, 2, 2, 2, 2, 9)"
+set a2p9 "(${a2p9o} ${a2p9o} ${a2p9o} ${a2p9o} ${a2p9o} ${a9p9o})"
+set a3po "(3, 3, 3, 3, 3)"
+set a3p "(${a3po} ${a3po} ${a3po} ${a3po} ${a3po})"
+set a3p "(${a3p} ${a3p} ${a3p} ${a3p} ${a3p})"
+set a3p9o "(3, 3, 3, 3, 3, 9)"
+set a3p9 "(${a3p9o} ${a3p9o} ${a3p9o} ${a3p9o} ${a3p9o} ${a9p9o})"
+set a9p9 "(${a9p9o} ${a9p9o} ${a9p9o} ${a9p9o} ${a9p9o} ${a9p9o})"
+set a3p9 "(${a3p9} ${a3p9} ${a3p9} ${a3p9} ${a3p9} ${a9p9})"
+
+# Convert the output into a regexp.
+set r1p [string_to_regexp $a1p]
+set r1p9 [string_to_regexp $a1p9]
+set r2po [string_to_regexp $a2po]
+set r2p9o [string_to_regexp $a2p9o]
+set r2p [string_to_regexp $a2p]
+set r2p9 [string_to_regexp $a2p9]
+set r3po [string_to_regexp $a3po]
+set r3p9o [string_to_regexp $a3p9o]
+set r3p [string_to_regexp $a3p]
+set r3p9 [string_to_regexp $a3p9]
+
+set rep5 "<repeats 5 times>"
+set rep6 "<repeats 6 times>"
+
+proc array_repeat { variant } {
+ global testfile srcfile binfile
+ upvar r1p r1p r1p9 r1p9 r2po r2po r2p9o r2p9o r2p r2p r2p9 r2p9
+ upvar r3po r3po r3p9o r3p9o r3p r3p r3p9 r3p9
+ upvar a2po a2po a2p9o a2p9o a3po a3po a3p9o a3p9o
+ upvar rep5 rep5 rep6 rep6
+
+ standard_testfile "${variant}.f90"
+
+ if {[prepare_for_testing ${testfile}.exp ${variant} ${srcfile} \
+ {debug f90}]} {
+ return -1
+ }
+
+ if {![fortran_runto_main]} {
+ perror "Could not run to main."
+ continue
+ }
+
+ gdb_breakpoint [gdb_get_line_number "Break here"]
+ gdb_continue_to_breakpoint "${variant}"
+
+ with_test_prefix "${variant}: repeats=unlimited, elements=unlimited" {
+ # Check the arrays print as expected.
+ gdb_test_no_output "set print repeats unlimited"
+ gdb_test_no_output "set print elements unlimited"
+
+ gdb_test "print array_1d" "${r1p}"
+ gdb_test "print array_1d9" "${r1p9}"
+ gdb_test "print array_2d" "${r2p}"
+ gdb_test "print array_2d9" "${r2p9}"
+ gdb_test "print array_3d" "${r3p}"
+ gdb_test "print array_3d9" "${r3p9}"
+ }
+
+ with_test_prefix "${variant}: repeats=4, elements=unlimited" {
+ # Now set the repeat limit.
+ gdb_test_no_output "set print repeats 4"
+ gdb_test_no_output "set print elements unlimited"
+
+ gdb_test "print array_1d" \
+ [string_to_regexp "(1, ${rep5})"]
+ gdb_test "print array_1d9" \
+ [string_to_regexp "(1, ${rep5}, 9)"]
+ gdb_test "print array_2d" \
+ [string_to_regexp "((2, ${rep5}) ${rep5})"]
+ gdb_test "print array_2d9" \
+ [string_to_regexp "((2, ${rep5}, 9) ${rep5} (9, ${rep6}))"]
+ gdb_test "print array_3d" \
+ [string_to_regexp "(((3, ${rep5}) ${rep5}) ${rep5})"]
+ gdb_test "print array_3d9" \
+ [string_to_regexp "(((3, ${rep5}, 9) ${rep5} (9, ${rep6})) ${rep5}\
+ ((9, ${rep6}) ${rep6}))"]
+ }
+
+ with_test_prefix "${variant}: repeats=unlimited, elements=12" {
+ # Now set the element limit.
+ gdb_test_no_output "set print repeats unlimited"
+ gdb_test_no_output "set print elements 12"
+
+ gdb_test "print array_1d" "${r1p}"
+ gdb_test "print array_1d9" "${r1p9}"
+ gdb_test "print array_2d" \
+ [string_to_regexp "(${a2po} ${a2po} (2, 2, ...) ...)"]
+ gdb_test "print array_2d9" \
+ [string_to_regexp "(${a2p9o} ${a2p9o} ...)"]
+ gdb_test "print array_3d" \
+ [string_to_regexp "((${a3po} ${a3po} (3, 3, ...) ...) ...)"]
+ gdb_test "print array_3d9" \
+ [string_to_regexp "((${a3p9o} ${a3p9o} ...) ...)"]
+ }
+
+ with_test_prefix "${variant}: repeats=4, elements=12" {
+ # Now set both limits.
+ gdb_test_no_output "set print repeats 4"
+ gdb_test_no_output "set print elements 12"
+
+ gdb_test "print array_1d" \
+ [string_to_regexp "(1, ${rep5})"]
+ gdb_test "print array_1d9" \
+ [string_to_regexp "(1, ${rep5}, 9)"]
+ gdb_test "print array_2d" \
+ [string_to_regexp "((2, ${rep5}) (2, ${rep5}) (2, 2, ...) ...)"]
+ gdb_test "print array_2d9" \
+ [string_to_regexp "((2, ${rep5}, 9) (2, ${rep5}, 9) ...)"]
+ gdb_test "print array_3d" \
+ [string_to_regexp "(((3, ${rep5}) (3, ${rep5}) (3, 3, ...) ...)\
+ ...)"]
+ gdb_test "print array_3d9" \
+ [string_to_regexp "(((3, ${rep5}, 9) (3, ${rep5}, 9) ...) ...)"]
+ }
+
+ with_test_prefix "${variant}: repeats=4, elements=30" {
+ # Now set both limits.
+ gdb_test_no_output "set print repeats 4"
+ gdb_test_no_output "set print elements 30"
+
+ gdb_test "print array_1d" \
+ [string_to_regexp "(1, ${rep5})"]
+ gdb_test "print array_1d9" \
+ [string_to_regexp "(1, ${rep5}, 9)"]
+ gdb_test "print array_2d" \
+ [string_to_regexp "((2, ${rep5}) ${rep5})"]
+ gdb_test "print array_2d9" \
+ [string_to_regexp "((2, ${rep5}, 9) ${rep5} ...)"]
+ gdb_test "print array_3d" \
+ [string_to_regexp "(((3, ${rep5}) ${rep5}) ((3, ${rep5}) ...)\
+ ...)"]
+ gdb_test "print array_3d9" \
+ [string_to_regexp "(((3, ${rep5}, 9) ${rep5} ...) ...)"]
+ }
+}
+
+array_repeat "array-repeat"
+array_repeat "array-slices-repeat"
diff --git a/gdb/testsuite/gdb.fortran/array-repeat.f90 b/gdb/testsuite/gdb.fortran/array-repeat.f90
new file mode 100644
index 00000000000..adb6b2ad0e5
--- /dev/null
+++ b/gdb/testsuite/gdb.fortran/array-repeat.f90
@@ -0,0 +1,50 @@
+! Copyright 2022 Free Software Foundation, Inc.
+!
+! This program is free software; you can redistribute it and/or modify
+! it under the terms of the GNU General Public License as published by
+! the Free Software Foundation; either version 3 of the License, or
+! (at your option) any later version.
+!
+! This program is distributed in the hope that it will be useful,
+! but WITHOUT ANY WARRANTY; without even the implied warranty of
+! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+! GNU General Public License for more details.
+!
+! You should have received a copy of the GNU General Public License
+! along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+!
+! Start of test program.
+!
+program test
+
+ ! Declare variables used in this test.
+ integer, dimension (-2:2) :: array_1d
+ integer, dimension (-2:3) :: array_1d9
+ integer, dimension (-2:2, -2:2) :: array_2d
+ integer, dimension (-2:3, -2:3) :: array_2d9
+ integer, dimension (-2:2, -2:2, -2:2) :: array_3d
+ integer, dimension (-2:3, -2:3, -2:3) :: array_3d9
+
+ array_1d = 1
+ array_1d9 = 1
+ array_1d9 (3) = 9
+ array_2d = 2
+ array_2d9 = 2
+ array_2d9 (3, :) = 9
+ array_2d9 (:, 3) = 9
+ array_3d = 3
+ array_3d9 = 3
+ array_3d9 (3, :, :) = 9
+ array_3d9 (:, 3, :) = 9
+ array_3d9 (:, :, 3) = 9
+
+ print *, "" ! Break here
+ print *, array_1d
+ print *, array_1d9
+ print *, array_2d
+ print *, array_2d9
+ print *, array_3d
+ print *, array_3d9
+
+end program test
diff --git a/gdb/testsuite/gdb.fortran/array-slices-repeat.f90 b/gdb/testsuite/gdb.fortran/array-slices-repeat.f90
new file mode 100644
index 00000000000..3b9a9e3650c
--- /dev/null
+++ b/gdb/testsuite/gdb.fortran/array-slices-repeat.f90
@@ -0,0 +1,99 @@
+! Copyright 2022 Free Software Foundation, Inc.
+!
+! This program is free software; you can redistribute it and/or modify
+! it under the terms of the GNU General Public License as published by
+! the Free Software Foundation; either version 3 of the License, or
+! (at your option) any later version.
+!
+! This program is distributed in the hope that it will be useful,
+! but WITHOUT ANY WARRANTY; without even the implied warranty of
+! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+! GNU General Public License for more details.
+!
+! You should have received a copy of the GNU General Public License
+! along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+subroutine show (array_1d, array_1d9, array_2d, array_2d9, array_3d, array_3d9)
+ integer, dimension (-2:) :: array_1d
+ integer, dimension (-2:) :: array_1d9
+ integer, dimension (-2:, -2:) :: array_2d
+ integer, dimension (-2:, -2:) :: array_2d9
+ integer, dimension (-2:, -2:, -2:) :: array_3d
+ integer, dimension (-2:, -2:, -2:) :: array_3d9
+
+ print *, "" ! Break here
+ print *, array_1d
+ print *, array_1d9
+ print *, array_2d
+ print *, array_2d9
+ print *, array_3d
+ print *, array_3d9
+end subroutine show
+
+!
+! Start of test program.
+!
+program test
+ interface
+ subroutine show (array_1d, array_1d9, array_2d, array_2d9, &
+ array_3d, array_3d9)
+ integer, dimension (:) :: array_1d
+ integer, dimension (:) :: array_1d9
+ integer, dimension (:, :) :: array_2d
+ integer, dimension (:, :) :: array_2d9
+ integer, dimension (:, :, :) :: array_3d
+ integer, dimension (:, :, :) :: array_3d9
+ end subroutine show
+ end interface
+
+ ! Declare variables used in this test.
+ integer, dimension (-8:6) :: array_1d
+ integer, dimension (-8:9) :: array_1d9
+ integer, dimension (-8:6, -8:6) :: array_2d
+ integer, dimension (-8:9, -8:9) :: array_2d9
+ integer, dimension (-8:6, -8:6, -8:6) :: array_3d
+ integer, dimension (-8:9, -8:9, -8:9) :: array_3d9
+
+ integer, parameter :: v6 (6) = [-5, -4, -3, 1, 2, 3]
+ integer, parameter :: v9 (9) = [-5, -4, -3, 1, 2, 3, 7, 8, 9]
+
+ ! Intersperse slices selected with varying data to make sure it is
+ ! correctly ignored for the purpose of repeated element recognition
+ ! in the slices.
+ array_1d = 7
+ array_1d (::3) = 1
+ array_1d9 = 7
+ array_1d9 (::3) = 1
+ array_1d9 (7) = 9
+ array_2d = 7
+ array_2d (:, v6) = 6
+ array_2d (::3, ::3) = 2
+ array_2d9 = 7
+ array_2d9 (:, v9) = 6
+ array_2d9 (::3, ::3) = 2
+ array_2d9 (7, ::3) = 9
+ array_2d9 (::3, 7) = 9
+ array_3d = 7
+ array_3d (:, v6, :) = 6
+ array_3d (:, v6, v6) = 5
+ array_3d (::3, ::3, ::3) = 3
+ array_3d9 = 7
+ array_3d9 (:, v9, :) = 6
+ array_3d9 (:, v9, v9) = 5
+ array_3d9 (::3, ::3, ::3) = 3
+ array_3d9 (7, ::3, ::3) = 9
+ array_3d9 (::3, 7, ::3) = 9
+ array_3d9 (::3, ::3, 7) = 9
+
+ call show (array_1d (::3), array_1d9 (::3), &
+ array_2d (::3, ::3), array_2d9 (::3, ::3), &
+ array_3d (::3, ::3, ::3), array_3d9 (::3, ::3, ::3))
+
+ print *, array_1d
+ print *, array_1d9
+ print *, array_2d
+ print *, array_2d9
+ print *, array_3d
+ print *, array_3d9
+
+end program test
diff --git a/gdb/testsuite/gdb.fortran/array-slices.exp b/gdb/testsuite/gdb.fortran/array-slices.exp
index 5a909812fe3..a38276c67e4 100644
--- a/gdb/testsuite/gdb.fortran/array-slices.exp
+++ b/gdb/testsuite/gdb.fortran/array-slices.exp
@@ -35,6 +35,11 @@
if {[skip_fortran_tests]} { return -1 }
+# This test relies on output from the inferior.
+if [target_info exists gdb,noinferiorio] {
+ return -1
+}
+
standard_testfile ".f90"
load_lib fortran.exp
@@ -91,11 +96,19 @@ proc run_test { repack } {
set found_final_breakpoint false
set expected_result ""
set func_name ""
+ set found_prompt false
gdb_test_multiple "continue" "continue" {
+ -i $::inferior_spawn_id
+
-re ".*GDB = (\[^\r\n\]+)\r\n" {
set expected_result $expect_out(1,string)
- exp_continue
+ if {!$found_prompt} {
+ exp_continue
+ }
}
+
+ -i $::gdb_spawn_id
+
-re "! Display Element" {
set func_name "show_elem"
exp_continue
@@ -113,7 +126,14 @@ proc run_test { repack } {
exp_continue
}
-re "$gdb_prompt $" {
- # We're done.
+ set found_prompt true
+
+ if {$found_final_breakpoint
+ || ($expected_result != "" && $func_name != "")} {
+ # We're done.
+ } else {
+ exp_continue
+ }
}
}
diff --git a/gdb/testsuite/gdb.fortran/array-slices.f90 b/gdb/testsuite/gdb.fortran/array-slices.f90
index ff3964ffb6b..1eaee82b7b7 100644
--- a/gdb/testsuite/gdb.fortran/array-slices.f90
+++ b/gdb/testsuite/gdb.fortran/array-slices.f90
@@ -61,7 +61,7 @@ subroutine show_1d (array)
end if
write(*, fmt="(I0)", advance="no") array (i)
end do
- write(*, fmt="(A)", advance="no") ")"
+ write(*, fmt="(A)", advance="yes") ")"
print *, "" ! Display Array Slice 1D
end subroutine show_1d
diff --git a/gdb/testsuite/gdb.fortran/assumedrank.exp b/gdb/testsuite/gdb.fortran/assumedrank.exp
new file mode 100644
index 00000000000..e9429b44a9a
--- /dev/null
+++ b/gdb/testsuite/gdb.fortran/assumedrank.exp
@@ -0,0 +1,99 @@
+# Copyright 2021-2022 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/> .
+
+# Testing GDB's implementation of ASSUMED RANK arrays.
+
+if {[skip_fortran_tests]} { return -1 }
+
+standard_testfile ".f90"
+load_lib fortran.exp
+
+# Only gcc version >=11 supports assumed rank arrays.
+if { [test_compiler_info gcc*] &&
+ ![test_compiler_info {gcc-1[1-9]-*}]} {
+ untested "compiler does not support assumed rank"
+ return -1
+}
+
+if {[prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \
+ {debug f90 additional_flags=-gdwarf-5}]} {
+ return -1
+}
+
+if ![fortran_runto_main] {
+ untested "could not run to main"
+ return -1
+}
+
+gdb_breakpoint [gdb_get_line_number "Test Breakpoint"]
+gdb_breakpoint [gdb_get_line_number "Final Breakpoint"]
+
+# We place a limit on the number of tests that can be run, just in
+# case something goes wrong, and GDB gets stuck in an loop here.
+set found_final_breakpoint false
+set test_count 0
+while { $test_count < 500 } {
+ with_test_prefix "test $test_count" {
+ incr test_count
+
+ gdb_test_multiple "continue" "continue" {
+ -re -wrap "! Test Breakpoint" {
+ # We can run a test from here.
+ }
+ -re "! Final Breakpoint" {
+ # We're done with the tests.
+ set found_final_breakpoint true
+ }
+ }
+
+ # Currently, flang does not support rank0.
+ if {$test_count == 1 && [test_compiler_info {clang-*}]} {
+ unsupported "compiler does not support rank 0"
+ continue
+ }
+
+ if ($found_final_breakpoint) {
+ break
+ }
+
+ # First grab the information from the assumed rank array.
+ set answer_rank [get_valueof "" "rank(answer)" "**unknown**"]
+ set answer_content [get_valueof "" "answer" "**unknown**"]
+
+ # Now move up a frame and find the name of a non-assumed rank array
+ # which we can use to check the values we got above.
+ set test_array ""
+ gdb_test_multiple "up" "" {
+ -re -wrap "\r\n\[0-9\]+\[ \t\]+call test_rank \\((\[^\r\n\]+)\\)" {
+ set test_array $expect_out(1,string)
+ }
+ }
+ gdb_assert { ![string equal $test_array ""] } \
+ "found the name of a test array to check against"
+
+ # Check we got the correct array rank.
+ gdb_test "p rank($test_array)" " = $answer_rank"
+
+ # Check we got the correct array content.
+ set content [get_valueof "" "$test_array" "**unknown**"]
+ gdb_assert { [string equal $content $answer_content] } \
+ "answer array contains the expected contents"
+ }
+}
+
+# Ensure we reached the final breakpoint. If more tests have been added
+# to the test script, and this starts failing, then the safety 'while'
+# loop above might need to be increased.
+gdb_assert {$found_final_breakpoint} "ran all compiled in tests"
diff --git a/gdb/testsuite/gdb.fortran/assumedrank.f90 b/gdb/testsuite/gdb.fortran/assumedrank.f90
new file mode 100644
index 00000000000..7f7cf2c1f3e
--- /dev/null
+++ b/gdb/testsuite/gdb.fortran/assumedrank.f90
@@ -0,0 +1,49 @@
+! Copyright 2021-2022 Free Software Foundation, Inc.
+!
+! This program is free software; you can redistribute it and/or modify
+! it under the terms of the GNU General Public License as published by
+! the Free Software Foundation; either version 3 of the License, or
+! (at your option) any later version.
+!
+! This program is distributed in the hope that it will be useful,
+! but WITHOUT ANY WARRANTY; without even the implied warranty of
+! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+! GNU General Public License for more details.
+!
+! You should have received a copy of the GNU General Public License
+! along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+!
+! Start of test program.
+!
+
+PROGRAM arank
+
+ REAL :: array0
+ REAL :: array1(10)
+ REAL :: array2(1, 2)
+ REAL :: array3(3, 4, 5)
+ REAL :: array4(4, 5, 6, 7)
+
+ array0 = 0
+ array1 = 1.0
+ array2 = 2.0
+ array3 = 3.0
+ array4 = 4.0
+
+ call test_rank (array0)
+ call test_rank (array1)
+ call test_rank (array2)
+ call test_rank (array3)
+ call test_rank (array4)
+
+ print *, "" ! Final Breakpoint
+
+CONTAINS
+
+ SUBROUTINE test_rank(answer)
+ REAL :: answer(..)
+ print *, RANK(answer) ! Test Breakpoint
+ END SUBROUTINE test_rank
+
+END PROGRAM arank
diff --git a/gdb/testsuite/gdb.fortran/complex.exp b/gdb/testsuite/gdb.fortran/complex.exp
index 60f7c8e2553..ca41c812364 100644
--- a/gdb/testsuite/gdb.fortran/complex.exp
+++ b/gdb/testsuite/gdb.fortran/complex.exp
@@ -41,17 +41,18 @@ gdb_test "print c8" " = \\(321,-22\\)"
gdb_test "print dc" " = \\(321,-22\\)"
gdb_test "print c16" " = \\(-874,19\\)"
+gdb_test "print ci" " = \\(-4,12\\)"
gdb_test "whatis c" "type = $complex4"
gdb_test "print \$_creal (c)" " = 1000"
with_test_prefix "c" {
- gdb_test "whatis \$" " = real"
+ gdb_test "whatis \$" " = real\\*4"
}
gdb_test "whatis c4" "type = $complex4"
gdb_test "print \$_creal (c4)" " = 1000"
with_test_prefix "c4" {
- gdb_test "whatis \$" " = real"
+ gdb_test "whatis \$" " = real\\*4"
}
gdb_test "whatis c8" "type = $complex8"
gdb_test "print \$_creal (c8)" " = 321"
@@ -70,3 +71,8 @@ with_test_prefix "c16" {
gdb_test "whatis \$" " = real\\*16"
}
+gdb_test "whatis ci" "type = $complex4"
+gdb_test "print \$_creal (ci)" " = -4"
+with_test_prefix "ci" {
+ gdb_test "whatis \$" " = real\\*4"
+}
diff --git a/gdb/testsuite/gdb.fortran/complex.f90 b/gdb/testsuite/gdb.fortran/complex.f90
index 5c9491df023..cd1acecad54 100644
--- a/gdb/testsuite/gdb.fortran/complex.f90
+++ b/gdb/testsuite/gdb.fortran/complex.f90
@@ -17,8 +17,9 @@ program test_complex
real*4 r4a, r4b
real*8 r8a, r8b
real*16 r16a, r16b
+ integer ia, ib
- complex c
+ complex c, ci
complex(kind=4) c4
complex(kind=8) c8
double complex dc
@@ -30,15 +31,19 @@ program test_complex
r8b = -22
r16a = -874
r16b = 19
+ ia = -4
+ ib = 12
c = cmplx(r4a,r4b)
c4 = cmplx(r4a,r4b)
c8 = cmplx(r8a, r8b)
dc = cmplx(r8a, r8b)
c16 = cmplx(r16a, r16b)
+ ci = cmplx(ia, ib)
print *, c, c4, c8, dc, c16 ! stop
print *, r4a, r4b
print *, r8a, r8b
print *, r16a, r16b
+ print *, ia, ib
end program test_complex
diff --git a/gdb/testsuite/gdb.fortran/intrinsics.exp b/gdb/testsuite/gdb.fortran/intrinsics.exp
index c4020737c1d..29cff35c556 100644
--- a/gdb/testsuite/gdb.fortran/intrinsics.exp
+++ b/gdb/testsuite/gdb.fortran/intrinsics.exp
@@ -61,15 +61,37 @@ gdb_test "p mod (-8, 5)" " = -3"
gdb_test "p mod (8, -5)" " = 3"
gdb_test "p mod (-8, -5)" " = -3"
-# Test CEILING
+# Test CEILING and FLOOR.
+gdb_test "p floor (3.7)" " = 3"
gdb_test "p ceiling (3.7)" " = 4"
-gdb_test "p ceiling (-3.7)" " = -3"
-# Test FLOOR
-
-gdb_test "p floor (3.7)" " = 3"
gdb_test "p floor (-3.7)" " = -4"
+gdb_test "p ceiling (-3.7)" " = -3"
+
+gdb_test "p ceiling (3)" "argument to CEILING must be of type float"
+gdb_test "p floor (1)" "argument to FLOOR must be of type float"
+
+foreach op {floor ceiling} {
+ gdb_test "ptype ${op} (3.7)" "integer\\*4"
+ gdb_test "ptype ${op} (-1.1, 1)" "type = integer\\*1"
+ gdb_test "ptype ${op} (-1.1, 2)" "type = integer\\*2"
+ gdb_test "ptype ${op} (-1.1, 3)" "unsupported kind 3 for type integer\\*4"
+ gdb_test "ptype ${op} (-1.1, 4)" "type = integer\\*4"
+ gdb_test "ptype ${op} (-1.1, 8)" "type = integer\\*8"
+
+ # The actual overflow behavior differs in ifort/ifx/gfortran - this tests
+ # the GDB internal overflow behavior - not a compiler dependent one.
+ gdb_test "p ${op} (129.0,1)" " = -127"
+ gdb_test "p ${op} (129.0,2)" " = 129"
+ gdb_test "p ${op} (-32770.0,1)" " = -2"
+ gdb_test "p ${op} (-32770.0,2)" " = 32766"
+ gdb_test "p ${op} (-32770.0,4)" " = -32770"
+ gdb_test "p ${op} (2147483652.0,1)" " = 4"
+ gdb_test "p ${op} (2147483652.0,2)" " = 4"
+ gdb_test "p ${op} (2147483652.0,4)" " = -2147483644"
+ gdb_test "p ${op} (2147483652.0,8)" " = 2147483652"
+}
# Test MODULO
@@ -85,6 +107,20 @@ gdb_test "ptype MODULO (3.0,2.0)" "type = real\\*8"
gdb_test "p CMPLX (4.1, 2.0)" " = \\(4.$decimal,2\\)"
+gdb_test "p cmplx (4,4)" "= \\(4,4\\)"
+gdb_test "ptype cmplx (4,4)" "= complex\\*4"
+gdb_test "p cmplx (-14,-4)" "= \\(-14,-4\\)"
+gdb_test "p cmplx (4,4,4)" "\\(4,4\\)"
+gdb_test "p cmplx (4,4,8)" "\\(4,4\\)"
+gdb_test "p cmplx (4,4,16)" "\\(4,4\\)"
+gdb_test "ptype cmplx (4,4,4)" "= complex\\*4"
+gdb_test "ptype cmplx (4,4,8)" "= complex\\*8"
+gdb_test "ptype cmplx (4,4,16)" "= complex\\*16"
+
+gdb_test "p cmplx (4,4,1)" "unsupported kind 1 for type complex\\*4"
+gdb_test "p cmplx (4,4,-1)" "unsupported kind -1 for type complex\\*4"
+gdb_test "p cmplx (4,4,2)" "unsupported kind 2 for type complex\\*4"
+
# Test LOC
gdb_test "p/x LOC(l)" "= $hex"
diff --git a/gdb/testsuite/gdb.fortran/lbound-ubound.F90 b/gdb/testsuite/gdb.fortran/lbound-ubound.F90
index 37145724a31..aa5be85bb55 100644
--- a/gdb/testsuite/gdb.fortran/lbound-ubound.F90
+++ b/gdb/testsuite/gdb.fortran/lbound-ubound.F90
@@ -17,8 +17,8 @@
call do_test (lbound (ARRAY), ubound (ARRAY))
subroutine do_test (lb, ub)
- integer, dimension (:) :: lb
- integer, dimension (:) :: ub
+ integer*4, dimension (:) :: lb
+ integer*4, dimension (:) :: ub
print *, ""
print *, "Expected GDB Output:"
@@ -51,8 +51,8 @@ end subroutine do_test
program test
interface
subroutine do_test (lb, ub)
- integer, dimension (:) :: lb
- integer, dimension (:) :: ub
+ integer*4, dimension (:) :: lb
+ integer*4, dimension (:) :: ub
end subroutine do_test
end interface
@@ -70,11 +70,34 @@ program test
integer, dimension (:), pointer :: pointer1d => null()
+ integer, parameter :: b1 = 127 - 10
+ integer, parameter :: b1_o = 127 + 2
+ integer, parameter :: b2 = 32767 - 10
+ integer, parameter :: b2_o = 32767 + 3
+ integer*8, parameter :: b4 = 2147483647 - 10
+ integer*8, parameter :: b4_o = 2147483647 + 5
+
+ integer, allocatable :: array_1d_1bytes_overflow (:)
+ integer, allocatable :: array_1d_2bytes_overflow (:)
+ integer, allocatable :: array_1d_4bytes_overflow (:)
+ integer, allocatable :: array_2d_1byte_overflow (:,:)
+ integer, allocatable :: array_2d_2bytes_overflow (:,:)
+ integer, allocatable :: array_3d_1byte_overflow (:,:,:)
+
! Allocate or associate any variables as needed.
allocate (other (-5:4, -2:7))
pointer2d => tarray
pointer1d => array (3, 2:5)
+ allocate (array_1d_1bytes_overflow (-b1_o:-b1))
+ allocate (array_1d_2bytes_overflow (b2:b2_o))
+ allocate (array_1d_4bytes_overflow (-b4_o:-b4))
+
+ allocate (array_2d_1byte_overflow (-b1_o:-b1,b1:b1_o))
+ allocate (array_2d_2bytes_overflow (b2:b2_o,-b2_o:b2))
+
+ allocate (array_3d_1byte_overflow (-b1_o:-b1,b1:b1_o,-b1_o:-b1))
+
DO_TEST (neg_array)
DO_TEST (neg_array (-7:-3,-5:-4))
DO_TEST (array)
@@ -90,9 +113,27 @@ program test
DO_TEST (pointer2d)
DO_TEST (tarray)
+ DO_TEST (array_1d_1bytes_overflow)
+ DO_TEST (array_1d_2bytes_overflow)
+
+ DO_TEST (array_1d_4bytes_overflow)
+ DO_TEST (array_2d_1byte_overflow)
+ DO_TEST (array_2d_2bytes_overflow)
+ DO_TEST (array_3d_1byte_overflow)
+
! All done. Deallocate.
+ print *, "" ! Breakpoint before deallocate.
deallocate (other)
+ deallocate (array_3d_1byte_overflow)
+
+ deallocate (array_2d_2bytes_overflow)
+ deallocate (array_2d_1byte_overflow)
+
+ deallocate (array_1d_4bytes_overflow)
+ deallocate (array_1d_2bytes_overflow)
+ deallocate (array_1d_1bytes_overflow)
+
! GDB catches this final breakpoint to indicate the end of the test.
print *, "" ! Final Breakpoint.
diff --git a/gdb/testsuite/gdb.fortran/lbound-ubound.exp b/gdb/testsuite/gdb.fortran/lbound-ubound.exp
index 51dd3818499..334713666e0 100644
--- a/gdb/testsuite/gdb.fortran/lbound-ubound.exp
+++ b/gdb/testsuite/gdb.fortran/lbound-ubound.exp
@@ -32,13 +32,19 @@ if ![fortran_runto_main] {
return -1
}
+# This test relies on output from the inferior.
+if [target_info exists gdb,noinferiorio] {
+ return 0
+}
+
# Avoid libc symbols, in particular the 'array' type.
gdb_test_no_output "nosharedlibrary"
gdb_breakpoint [gdb_get_line_number "Test Breakpoint"]
+gdb_breakpoint [gdb_get_line_number "Breakpoint before deallocate\."]
gdb_breakpoint [gdb_get_line_number "Final Breakpoint"]
-set found_final_breakpoint false
+set found_dealloc_breakpoint false
# We place a limit on the number of tests that can be run, just in
# case something goes wrong, and GDB gets stuck in an loop here.
@@ -49,29 +55,46 @@ while { $test_count < 500 } {
set expected_lbound ""
set expected_ubound ""
+ set found_prompt false
gdb_test_multiple "continue" "continue" {
+ -i $::inferior_spawn_id
+
-re ".*LBOUND = (\[^\r\n\]+)\r\n" {
set expected_lbound $expect_out(1,string)
- exp_continue
+ if {!$found_prompt} {
+ exp_continue
+ }
}
-re ".*UBOUND = (\[^\r\n\]+)\r\n" {
set expected_ubound $expect_out(1,string)
- exp_continue
+ if {!$found_prompt} {
+ exp_continue
+ }
}
+
+ -i $::gdb_spawn_id
+
-re "! Test Breakpoint" {
set func_name "show_elem"
exp_continue
}
- -re "! Final Breakpoint" {
- set found_final_breakpoint true
+ -re "! Breakpoint before deallocate" {
+ set found_dealloc_breakpoint true
exp_continue
}
-re "$gdb_prompt $" {
- # We're done.
+ set found_prompt true
+
+ if {$found_dealloc_breakpoint
+ || ($expected_lbound != "" && $expected_ubound != "")} {
+ # We're done.
+ } else {
+ exp_continue
+ }
}
}
- if ($found_final_breakpoint) {
+ if ($found_dealloc_breakpoint) {
break
}
@@ -188,10 +211,26 @@ while { $test_count < 500 } {
}
}
+gdb_assert {$found_dealloc_breakpoint} "ran all compiled in tests"
+
+# Test the kind parameter of ubound and lbound a few times.
+gdb_test "p lbound(array_1d_1bytes_overflow, 1, 1)" "= 127"
+gdb_test "p lbound(array_1d_1bytes_overflow, 1, 2)" "= -129"
+gdb_test "p ubound(array_1d_1bytes_overflow, 1, 1)" "= -117"
+
+gdb_test "p lbound(array_1d_2bytes_overflow, 1, 2)" "= 32757"
+gdb_test "p ubound(array_1d_2bytes_overflow, 1, 2)" "= -32766"
+gdb_test "p ubound(array_1d_2bytes_overflow, 1, 4)" "= 32770"
+
+gdb_test "p lbound(array_1d_4bytes_overflow, 1, 4)" "= 2147483644"
+gdb_test "p lbound(array_1d_4bytes_overflow, 1, 8)" "= -2147483652"
+gdb_test "p ubound(array_1d_4bytes_overflow, 1, 4)" "= -2147483637"
+gdb_test "p lbound(array_1d_4bytes_overflow)" "= \\(2147483644\\)"
+
# Ensure we reached the final breakpoint. If more tests have been added
# to the test script, and this starts failing, then the safety 'while'
# loop above might need to be increased.
-gdb_assert {$found_final_breakpoint} "reached final breakpoint"
+gdb_continue_to_breakpoint "Final Breakpoint"
# Now for some final tests. This is mostly testing that GDB gives the
# correct errors in certain cases.
diff --git a/gdb/testsuite/gdb.fortran/namelist.exp b/gdb/testsuite/gdb.fortran/namelist.exp
new file mode 100644
index 00000000000..d6263e12fec
--- /dev/null
+++ b/gdb/testsuite/gdb.fortran/namelist.exp
@@ -0,0 +1,50 @@
+# Copyright (C) 2021-2022 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# This file is part of the gdb testsuite. It contains tests for fortran
+# namelist.
+
+if { [skip_fortran_tests] } { return -1 }
+
+standard_testfile .f90
+load_lib "fortran.exp"
+
+if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug f90}]} {
+ return -1
+}
+
+if ![fortran_runto_main] then {
+ perror "couldn't run to main"
+ continue
+}
+
+# Depending on the compiler being used, the type names can be printed
+# differently.
+set int [fortran_int4]
+
+gdb_breakpoint [gdb_get_line_number "Display namelist"]
+gdb_continue_to_breakpoint "Display namelist"
+
+if {[test_compiler_info {gcc-*}]} {
+ gdb_test "ptype nml" \
+ "type = Type nml\r\n *$int :: a\r\n *$int :: b\r\n *End Type nml"
+ gdb_test "print nml" \
+ "\\$\[0-9\]+ = \\( a = 10, b = 20 \\)"
+} else {
+ gdb_test "ptype nml" \
+ "No symbol \"nml\" in current context\\."
+ gdb_test "print nml" \
+ "No symbol \"nml\" in current context\\."
+}
diff --git a/gdb/testsuite/gdb.fortran/namelist.f90 b/gdb/testsuite/gdb.fortran/namelist.f90
new file mode 100644
index 00000000000..9e2ba0489d2
--- /dev/null
+++ b/gdb/testsuite/gdb.fortran/namelist.f90
@@ -0,0 +1,27 @@
+! Copyright (C) 2021-2022 Free Software Foundation, Inc.
+!
+! This program is free software; you can redistribute it and/or modify
+! it under the terms of the GNU General Public License as published by
+! the Free Software Foundation; either version 3 of the License, or
+! (at your option) any later version.
+!
+! This program is distributed in the hope that it will be useful,
+! but WITHOUT ANY WARRANTY; without even the implied warranty of
+! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+! GNU General Public License for more details.
+!
+! You should have received a copy of the GNU General Public License
+! along with this program. If not, see <http://www.gnu.org/licenses/>.
+!
+! This file is the Fortran source file for namelist.exp.
+
+program main
+
+ integer :: a, b
+ namelist /nml/ a, b
+
+ a = 10
+ b = 20
+ Write(*,nml) ! Display namelist
+
+end program main
diff --git a/gdb/testsuite/gdb.fortran/nested-funcs-2.exp b/gdb/testsuite/gdb.fortran/nested-funcs-2.exp
index d04fd0987e2..6009cb65c53 100644
--- a/gdb/testsuite/gdb.fortran/nested-funcs-2.exp
+++ b/gdb/testsuite/gdb.fortran/nested-funcs-2.exp
@@ -50,6 +50,31 @@ proc do_bp_tests {with_src_prefix_p with_nest_prefix_p} {
set nest_prefix ""
}
+ # Normally, info symbol prints the symbol table name for any fortran
+ # symbols (since symbol lookup happens via the minimal symbol
+ # table). This would correspond to the linkage name in the full symbol
+ # table.
+ # For gfortran (and maybe others) these names currently have the form
+ # XXXX.NUMBER where XXXX is the symbol name and NUMBER a compiler generated
+ # appendix for mangling. This mangled name gets recognized by the Ada
+ # demangler/decoder and decoded as Ada (setting the symbol language to Ada)
+ # to XXXX. This leads to the somewhat unexpected output of XXXX over
+ # XXXX.NUMBER for info symbol.
+ # For ifort and ifx the generated linkage names have the form
+ # SCOPEA_SCOPEB_XXXX_ which is not recognized by the Ada demangler and thus
+ # printed as is.
+ # Note that there is no Fortran mangling standard. We keep the
+ # gfortran behavior as is and extend the test to reflect ifx and ifort
+ # mangling.
+ proc get_linkage_name_pattern {symbol_name} {
+
+ if { [test_compiler_info icc*] || [test_compiler_info intel*]} {
+ return "\(?:.*_\)?${symbol_name}_?"
+ } else {
+ return ${symbol_name}
+ }
+ }
+
# Test setting up breakpoints and otherwise examining nested
# functions before the program starts.
with_test_prefix "before start" {
@@ -68,7 +93,7 @@ proc do_bp_tests {with_src_prefix_p with_nest_prefix_p} {
# is a failure, just a limitation in current GDB.
if { ${with_nest_prefix_p} } {
gdb_test "info symbol ${nest_prefix}${function}" \
- "${function} in section .*"
+ "[get_linkage_name_pattern ${function}] in section .*"
gdb_test "whatis ${nest_prefix}${function}" \
"type = ${type}"
gdb_test "ptype ${nest_prefix}${function}" \
@@ -134,7 +159,7 @@ proc do_bp_tests {with_src_prefix_p with_nest_prefix_p} {
set type [lindex $entry 1]
with_test_prefix $function {
gdb_test "info symbol ${nest_prefix}$function" \
- "$function in section .*"
+ "[get_linkage_name_pattern $function] in section .*"
gdb_test "whatis ${nest_prefix}$function" \
"type = ${type}"
gdb_test "ptype ${nest_prefix}$function" \
diff --git a/gdb/testsuite/gdb.fortran/oop_extend_type.exp b/gdb/testsuite/gdb.fortran/oop_extend_type.exp
new file mode 100755
index 00000000000..00cfffa0b63
--- /dev/null
+++ b/gdb/testsuite/gdb.fortran/oop_extend_type.exp
@@ -0,0 +1,190 @@
+# Copyright 2022 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+standard_testfile ".f90"
+load_lib "fortran.exp"
+
+if { [skip_fortran_tests] } {
+ return -1
+}
+
+if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \
+ {debug f90 quiet}] } {
+ return -1
+}
+
+if ![fortran_runto_main] {
+ perror "could not run to main"
+ return -1
+}
+
+# Depending on the compiler being used, the type names can be printed differently.
+set real [fortran_real4]
+set logical [fortran_logical4]
+
+set line1 [gdb_get_line_number "! Before vla allocation"]
+gdb_breakpoint $line1
+gdb_continue_to_breakpoint "line1" ".*$srcfile:$line1.*"
+
+gdb_test "whatis wp_vla" "type = Type waypoint, allocatable \\(:\\)" \
+ "whatis wp_vla before allocation"
+
+set line2 [gdb_get_line_number "! After value assignment"]
+gdb_breakpoint $line2
+gdb_continue_to_breakpoint "line2" ".*$srcfile:$line2.*"
+
+# test print of wp
+set test "p wp%coo"
+gdb_test_multiple "$test" "$test" {
+ -re " = \\(1, 2, 1\\)\r\n$gdb_prompt $" {
+ pass "$test"
+ }
+ -re "There is no member named coo.\r\n$gdb_prompt $" {
+ kfail "gcc/49475" "$test"
+ }
+}
+gdb_test "p wp%point%coo" " = \\(1, 2, 1\\)"
+gdb_test "p wp%point" " = \\( coo = \\(1, 2, 1\\) \\)"
+gdb_test "p wp" " = \\( point = \\( coo = \\(1, 2, 1\\) \\), angle = 100 \\)"
+
+gdb_test "whatis wp" "type = Type waypoint"
+set output_pass_wp [multi_line "type = Type, extends\\(point\\) :: waypoint" \
+ " Type point :: point" \
+ " $real :: angle" \
+ "End Type waypoint(, allocatable)?"]
+set output_kfail_wp [multi_line "type = Type waypoint" \
+ " Type point :: point" \
+ " $real :: angle" \
+ "End Type waypoint(, allocatable)?"]
+
+set test "ptype wp"
+gdb_test_multiple "$test" "$test" {
+ -re "$output_pass_wp\r\n$gdb_prompt $" {
+ pass "$test"
+ }
+ -re "$output_kfail_wp\r\n$gdb_prompt $" {
+ kfail "gcc/49475" "$test"
+ }
+}
+set test "ptype wp%coo"
+gdb_test_multiple "$test" "$test" {
+ -re "$real \\(3\\)\r\n$gdb_prompt $" {
+ pass "$test"
+ }
+ -re "There is no member named coo.\r\n$gdb_prompt $" {
+ kfail "gcc/49475" "$test"
+ }
+}
+gdb_test "ptype wp%point%coo" "$real \\(3\\)"
+
+# test print of fwp
+set test "p fwp%coo"
+gdb_test_multiple "$test" "$test" {
+ -re " = \\(1, 2, 2\\)\r\n$gdb_prompt $" {
+ pass "$test"
+ }
+ -re "There is no member named coo.\r\n$gdb_prompt $" {
+ kfail "gcc/49475" "$test"
+ }
+}
+gdb_test "p fwp%waypoint%point%coo" " = \\(1, 2, 2\\)"
+gdb_test "p fwp%waypoint%point" " = \\( coo = \\(1, 2, 2\\) \\)"
+gdb_test "p fwp%waypoint" \
+ " = \\( point = \\( coo = \\(1, 2, 2\\) \\), angle = 10 \\)"
+gdb_test "p fwp" \
+ " = \\( waypoint = \\( point = \\( coo = \\(1, 2, 2\\) \\), angle = 10 \\), is_fancy = \.TRUE\. \\)"
+
+set test "p fwp%angle"
+gdb_test_multiple "$test" "$test" {
+ -re " = 10\r\n$gdb_prompt $" {
+ pass "$test"
+ }
+ -re "There is no member named angle.\r\n$gdb_prompt $" {
+ kfail "gcc/49475" "$test"
+ }
+}
+
+gdb_test "whatis fwp" "type = Type fancywaypoint"
+set test "ptype fwp"
+
+set output_pass_fwp \
+ [multi_line "type = Type, extends\\(waypoint\\) :: fancywaypoint" \
+ " Type waypoint :: waypoint" \
+ " $logical :: is_fancy" \
+ "End Type fancywaypoint"]
+set output_kfail_fwp \
+ [multi_line "type = Type fancywaypoint" \
+ " Type waypoint :: waypoint" \
+ " $logical :: is_fancy" \
+ "End Type fancywaypoint"]
+
+gdb_test_multiple "$test" "$test" {
+ -re "$output_pass_fwp\r\n$gdb_prompt $" {
+ pass "$test"
+ }
+ -re "$output_kfail_fwp\r\n$gdb_prompt $" {
+ kfail "gcc/49475" "$test"
+ }
+}
+
+set test "ptype fwp%coo"
+gdb_test_multiple "$test" "$test" {
+ -re "$real \\(3\\)\r\n$gdb_prompt $" {
+ pass "$test"
+ }
+ -re "There is no member named coo.\r\n$gdb_prompt $" {
+ kfail "gcc/49475" "$test"
+ }
+}
+gdb_test "ptype fwp%waypoint%point%coo" "$real \\(3\\)"
+
+# test print of wp_vla
+set test "p wp_vla(1)%coo"
+gdb_test_multiple "$test" "$test" {
+ -re " = \\(10, 12, 10\\)\r\n$gdb_prompt $" {
+ pass "$test"
+ }
+ -re "There is no member named coo.\r\n$gdb_prompt $" {
+ kfail "gcc/49475" "$test"
+ }
+}
+
+gdb_test "p wp_vla(1)%point%coo" " = \\(10, 12, 10\\)"
+gdb_test "p wp_vla(1)%point" " = \\( coo = \\(10, 12, 10\\) \\)"
+gdb_test "p wp_vla(1)" " = \\( point = \\( coo = \\(10, 12, 10\\) \\), angle = 101 \\)"
+
+gdb_test "whatis wp_vla" "type = Type waypoint, allocatable \\(3\\)" \
+ "whatis wp_vla after allocation"
+
+set test "ptype wp_vla"
+gdb_test_multiple "$test" "$test" {
+ -re "$output_pass_wp \\(3\\)\r\n$gdb_prompt $" {
+ pass "$test"
+ }
+ -re "$output_kfail_wp \\(3\\)\r\n$gdb_prompt $" {
+ kfail "gcc/49475" "$test"
+ }
+}
+set test "ptype wp_vla(1)%coo"
+gdb_test_multiple "$test" "$test" {
+ -re "$real \\(3\\)\r\n$gdb_prompt $" {
+ pass "$test"
+ }
+ -re "There is no member named coo.\r\n$gdb_prompt $" {
+ kfail "gcc/49475" "$test"
+ }
+}
+
+gdb_test "ptype wp_vla(1)%point%coo" "$real \\(3\\)"
diff --git a/gdb/testsuite/gdb.fortran/oop_extend_type.f90 b/gdb/testsuite/gdb.fortran/oop_extend_type.f90
new file mode 100755
index 00000000000..dc91c45c60a
--- /dev/null
+++ b/gdb/testsuite/gdb.fortran/oop_extend_type.f90
@@ -0,0 +1,69 @@
+! Copyright 2022 Free Software Foundation, Inc.
+!
+! This program is free software; you can redistribute it and/or modify
+! it under the terms of the GNU General Public License as published by
+! the Free Software Foundation; either version 3 of the License, or
+! (at your option) any later version.
+!
+! This program is distributed in the hope that it will be useful,
+! but WITHOUT ANY WARRANTY; without even the implied warranty of
+! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+! GNU General Public License for more details.
+!
+! You should have received a copy of the GNU General Public License
+! along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+! Test fortran extends feature (also for chained extends).
+module testmod
+ implicit none
+ type :: point
+ real :: coo(3)
+ end type
+
+ type, extends(point) :: waypoint
+ real :: angle
+ end type
+
+ type, extends(waypoint) :: fancywaypoint
+ logical :: is_fancy
+ end type
+end module
+
+program testprog
+ use testmod
+ implicit none
+
+ logical l
+ type(waypoint) :: wp
+ type(fancywaypoint) :: fwp
+ type(waypoint), allocatable :: wp_vla(:)
+
+ l = .FALSE.
+ allocate(wp_vla(3)) ! Before vla allocation
+
+ l = allocated(wp_vla) ! After vla allocation
+
+ wp%angle = 100.00
+ wp%coo(:) = 1.00
+ wp%coo(2) = 2.00
+
+ fwp%is_fancy = .TRUE.
+ fwp%angle = 10.00
+ fwp%coo(:) = 2.00
+ fwp%coo(1) = 1.00
+
+ wp_vla(1)%angle = 101.00
+ wp_vla(1)%coo(:) = 10.00
+ wp_vla(1)%coo(2) = 12.00
+
+ wp_vla(2)%angle = 102.00
+ wp_vla(2)%coo(:) = 20.00
+ wp_vla(2)%coo(2) = 22.00
+
+ wp_vla(3)%angle = 103.00
+ wp_vla(3)%coo(:) = 30.00
+ wp_vla(3)%coo(2) = 32.00
+
+ print *, wp, wp_vla, fwp ! After value assignment
+
+end program
diff --git a/gdb/testsuite/gdb.fortran/size.exp b/gdb/testsuite/gdb.fortran/size.exp
index 81b58405cf8..fb49e286e5b 100644
--- a/gdb/testsuite/gdb.fortran/size.exp
+++ b/gdb/testsuite/gdb.fortran/size.exp
@@ -29,28 +29,33 @@ if ![fortran_runto_main] {
return -1
}
-gdb_breakpoint [gdb_get_line_number "Test Breakpoint"]
+gdb_breakpoint [gdb_get_line_number "Test Breakpoint 1"]
+gdb_breakpoint [gdb_get_line_number "Test Breakpoint 2"]
+gdb_breakpoint [gdb_get_line_number "Test Breakpoint 3"]
+gdb_breakpoint [gdb_get_line_number "Test Breakpoint 4"]
+
+gdb_breakpoint [gdb_get_line_number "Breakpoint before deallocate\."]
gdb_breakpoint [gdb_get_line_number "Final Breakpoint"]
# We place a limit on the number of tests that can be run, just in
# case something goes wrong, and GDB gets stuck in an loop here.
-set found_final_breakpoint false
+set found_dealloc_breakpoint false
set test_count 0
-while { $test_count < 500 } {
+while { $test_count < 600 } {
with_test_prefix "test $test_count" {
incr test_count
gdb_test_multiple "continue" "continue" {
- -re -wrap "! Test Breakpoint" {
+ -re -wrap "! Test Breakpoint \[0-9\]" {
# We can run a test from here.
}
- -re -wrap "! Final Breakpoint" {
+ -re -wrap "! Breakpoint before deallocate\." {
# We're done with the tests.
- set found_final_breakpoint true
+ set found_dealloc_breakpoint true
}
}
- if ($found_final_breakpoint) {
+ if ($found_dealloc_breakpoint) {
break
}
@@ -61,26 +66,81 @@ while { $test_count < 500 } {
# as a test.
set command ""
gdb_test_multiple "up" "up" {
- -re -wrap "\r\n\[0-9\]+\[ \t\]+call test_size \\((\[^\r\n\]+)\\)" {
+ -re -wrap "\r\n\[0-9\]+\[ \t\]+call test_size_\[0-9\]* \\((\[^\r\n\]+)\\)" {
set command $expect_out(1,string)
}
}
gdb_assert { ![string equal $command ""] } "found a command to run"
- gdb_test "p $command" " = $answer"
+ gdb_test_multiple "p $command" "p $command" {
+ -re -wrap " = $answer" {
+ pass $gdb_test_name
+ }
+ -re -wrap "SIZE can only be applied to arrays" {
+ # Because of ifort's DWARF pointer representation we need to
+ # aditionally de-reference Fortran pointers.
+ regsub -all "\\(" $command "\(\*" command_deref
+ gdb_test "p $command_deref" " = $answer"
+ pass $gdb_test_name
+ }
+ }
+ }
+}
+
+# Since the behavior of size (array_1d, 2) differs for different compilers and
+# neither of them seem to behave as expected (gfortran prints apparently random
+# things, ifort would print 0), we test for GDB's error message instead.
+gdb_assert {$found_dealloc_breakpoint} "ran all compiled in tests"
+
+foreach var {array_1d_p array_2d_p allocatable_array_1d \
+ allocatable_array_2d} {
+ gdb_test_multiple "p size ($var, 3)" "p size ($var, 3)" {
+ -re -wrap "DIM argument to SIZE must be between 1 and \[1-2\]" {
+ pass $gdb_test_name
+ }
+ -re -wrap "SIZE can only be applied to arrays" {
+ # Because of ifort's DWARF pointer representation we need to
+ # aditionally de-reference Fortran pointers.
+ gdb_test "p size (*$var, 3)" \
+ "DIM argument to SIZE must be between 1 and \[1-2\]"
+ pass $gdb_test_name
+ }
}
}
+# For wrong kind parameters GBD and compiler behavior differs. Here,
+# gfortran/ifort/ifx would already throw a compiler error - a user might still
+# try and call size with something like -3 as kind parameter, so we test GDB's
+# error handling here.
+
+foreach var {array_1d_p array_2d_p allocatable_array_1d \
+ allocatable_array_2d} {
+ gdb_test "p size ($var, 1, -10)" \
+ "unsupported kind -10 for type integer\\*4"
+ gdb_test "p size ($var, 1, 123)" \
+ "unsupported kind 123 for type integer\\*4"
+}
+
# Ensure we reached the final breakpoint. If more tests have been added
# to the test script, and this starts failing, then the safety 'while'
# loop above might need to be increased.
-gdb_assert {$found_final_breakpoint} "ran all compiled in tests"
+gdb_continue_to_breakpoint "Final Breakpoint"
foreach var {array_1d_p array_2d_p allocatable_array_1d \
allocatable_array_2d} {
- gdb_test "p size ($var)" \
- "SIZE can only be used on allocated/associated arrays"
+ gdb_test_multiple "p size ($var)" "p size ($var)" {
+ -re -wrap "SIZE can only be used on allocated/associated arrays" {
+ pass $gdb_test_name
+ }
+ -re -wrap "SIZE can only be applied to arrays" {
+ # Because of ifort's DWARF pointer representation we need to
+ # aditionally de-reference Fortran pointers.
+ gdb_test "p size (*$var)" \
+ "Attempt to take contents of a not associated pointer\."
+ pass $gdb_test_name
+ }
+ }
}
foreach var {an_integer a_real} {
diff --git a/gdb/testsuite/gdb.fortran/size.f90 b/gdb/testsuite/gdb.fortran/size.f90
index 76f71ab60f3..c924d846736 100644
--- a/gdb/testsuite/gdb.fortran/size.f90
+++ b/gdb/testsuite/gdb.fortran/size.f90
@@ -28,74 +28,184 @@ program test
integer, allocatable :: allocatable_array_1d (:)
integer, allocatable :: allocatable_array_2d (:,:)
+ integer, parameter :: b1_o = 127 + 1
+ integer, parameter :: b2_o = 32767 + 3
+ integer*8, parameter :: b4_o = 2147483647 + 5
+
+ integer, allocatable :: array_1d_1byte_overflow (:)
+ integer, allocatable :: array_1d_2bytes_overflow (:)
+ integer, allocatable :: array_1d_4bytes_overflow (:)
+ integer, allocatable :: array_2d_1byte_overflow (:,:)
+ integer, allocatable :: array_2d_2bytes_overflow (:,:)
+ integer, allocatable :: array_3d_1byte_overflow (:,:,:)
+
! Loop counters.
integer :: s1, s2
+ allocate (array_1d_1byte_overflow (1:b1_o))
+ allocate (array_1d_2bytes_overflow (1:b2_o))
+ allocate (array_1d_4bytes_overflow (1:b4_o))
+
+ allocate (array_2d_1byte_overflow (1:b1_o, 1:b1_o))
+ allocate (array_2d_2bytes_overflow (1:b2_o, 1:b2_o))
+
+ allocate (array_3d_1byte_overflow (1:b1_o, 1:b1_o, 1:b1_o))
+
+
! The start of the tests.
- call test_size (size (array_1d))
- call test_size (size (array_1d, 1))
+ call test_size_4 (size (array_1d))
+ call test_size_4 (size (array_1d, 1))
do s1=1, SIZE (array_1d, 1), 1
- call test_size (size (array_1d (1:10:s1)))
- call test_size (size (array_1d (1:10:s1), 1))
- call test_size (size (array_1d (10:1:-s1)))
- call test_size (size (array_1d (10:1:-s1), 1))
+ call test_size_4 (size (array_1d (1:10:s1)))
+ call test_size_4 (size (array_1d (1:10:s1), 1))
+ call test_size_4 (size (array_1d (10:1:-s1)))
+ call test_size_4 (size (array_1d (10:1:-s1), 1))
end do
do s2=1, SIZE (array_2d, 2), 1
do s1=1, SIZE (array_2d, 1), 1
- call test_size (size (array_2d (1:4:s1, 1:3:s2)))
- call test_size (size (array_2d (4:1:-s1, 1:3:s2)))
- call test_size (size (array_2d (1:4:s1, 3:1:-s2)))
- call test_size (size (array_2d (4:1:-s1, 3:1:-s2)))
-
- call test_size (size (array_2d (1:4:s1, 1:3:s2), 1))
- call test_size (size (array_2d (4:1:-s1, 1:3:s2), 1))
- call test_size (size (array_2d (1:4:s1, 3:1:-s2), 1))
- call test_size (size (array_2d (4:1:-s1, 3:1:-s2), 1))
-
- call test_size (size (array_2d (1:4:s1, 1:3:s2), 2))
- call test_size (size (array_2d (4:1:-s1, 1:3:s2), 2))
- call test_size (size (array_2d (1:4:s1, 3:1:-s2), 2))
- call test_size (size (array_2d (4:1:-s1, 3:1:-s2), 2))
+ call test_size_4 (size (array_2d (1:4:s1, 1:3:s2)))
+ call test_size_4 (size (array_2d (4:1:-s1, 1:3:s2)))
+ call test_size_4 (size (array_2d (1:4:s1, 3:1:-s2)))
+ call test_size_4 (size (array_2d (4:1:-s1, 3:1:-s2)))
+
+ call test_size_4 (size (array_2d (1:4:s1, 1:3:s2), 1))
+ call test_size_4 (size (array_2d (4:1:-s1, 1:3:s2), 1))
+ call test_size_4 (size (array_2d (1:4:s1, 3:1:-s2), 1))
+ call test_size_4 (size (array_2d (4:1:-s1, 3:1:-s2), 1))
+
+ call test_size_4 (size (array_2d (1:4:s1, 1:3:s2), 2))
+ call test_size_4 (size (array_2d (4:1:-s1, 1:3:s2), 2))
+ call test_size_4 (size (array_2d (1:4:s1, 3:1:-s2), 2))
+ call test_size_4 (size (array_2d (4:1:-s1, 3:1:-s2), 2))
end do
end do
allocate (allocatable_array_1d (-10:-5))
- call test_size (size (allocatable_array_1d))
+ call test_size_4 (size (allocatable_array_1d))
do s1=1, SIZE (allocatable_array_1d, 1), 1
- call test_size (size (allocatable_array_1d (-10:-5:s1)))
- call test_size (size (allocatable_array_1d (-5:-10:-s1)))
+ call test_size_4 (size (allocatable_array_1d (-10:-5:s1)))
+ call test_size_4 (size (allocatable_array_1d (-5:-10:-s1)))
- call test_size (size (allocatable_array_1d (-10:-5:s1), 1))
- call test_size (size (allocatable_array_1d (-5:-10:-s1), 1))
+ call test_size_4 (size (allocatable_array_1d (-10:-5:s1), 1))
+ call test_size_4 (size (allocatable_array_1d (-5:-10:-s1), 1))
end do
allocate (allocatable_array_2d (-3:3, 8:12))
do s2=1, SIZE (allocatable_array_2d, 2), 1
do s1=1, SIZE (allocatable_array_2d, 1), 1
- call test_size (size (allocatable_array_2d (-3:3:s1, 8:12:s2)))
- call test_size (size (allocatable_array_2d (3:-3:-s1, 8:12:s2)))
- call test_size (size (allocatable_array_2d (-3:3:s1, 12:8:-s2)))
- call test_size (size (allocatable_array_2d (3:-3:-s1, 12:8:-s2)))
-
- call test_size (size (allocatable_array_2d (-3:3:s1, 8:12:s2), 1))
- call test_size (size (allocatable_array_2d (3:-3:-s1, 8:12:s2), 2))
- call test_size (size (allocatable_array_2d (-3:3:s1, 12:8:-s2), 1))
- call test_size (size (allocatable_array_2d (3:-3:-s1, 12:8:-s2), 2))
+ call test_size_4 (size (allocatable_array_2d (-3:3:s1, 8:12:s2)))
+ call test_size_4 (size (allocatable_array_2d (3:-3:-s1, 8:12:s2)))
+ call test_size_4 (size (allocatable_array_2d (-3:3:s1, 12:8:-s2)))
+ call test_size_4 (size (allocatable_array_2d (3:-3:-s1, 12:8:-s2)))
+
+ call test_size_4 (size (allocatable_array_2d (-3:3:s1, 8:12:s2), 1))
+ call test_size_4 (size (allocatable_array_2d (3:-3:-s1, 8:12:s2), 2))
+ call test_size_4 (size (allocatable_array_2d (-3:3:s1, 12:8:-s2), 1))
+ call test_size_4 (size (allocatable_array_2d (3:-3:-s1, 12:8:-s2), 2))
end do
end do
array_1d_p => array_1d
- call test_size (size (array_1d_p))
- call test_size (size (array_1d_p, 1))
+ call test_size_4 (size (array_1d_p))
+ call test_size_4 (size (array_1d_p, 1))
array_2d_p => array_2d
- call test_size (size (array_2d_p))
- call test_size (size (array_2d_p, 1))
- call test_size (size (array_2d_p, 2))
+ call test_size_4 (size (array_2d_p))
+ call test_size_4 (size (array_2d_p, 1))
+ call test_size_4 (size (array_2d_p, 2))
+
+ ! Test kind parameters - compiler requires these to be compile time constant
+ ! so sadly there cannot be a loop over the kinds 1, 2, 4, 8.
+ call test_size_4 (size (array_1d_1byte_overflow))
+ call test_size_4 (size (array_1d_2bytes_overflow))
+
+ call test_size_4 (size (array_1d_1byte_overflow, 1))
+ call test_size_4 (size (array_1d_2bytes_overflow, 1))
+
+ call test_size_4 (size (array_1d_4bytes_overflow))
+ call test_size_4 (size (array_1d_4bytes_overflow, 1))
+
+ call test_size_4 (size (array_2d_1byte_overflow, 1))
+ call test_size_4 (size (array_2d_1byte_overflow, 2))
+ call test_size_4 (size (array_2d_2bytes_overflow, 1))
+ call test_size_4 (size (array_2d_2bytes_overflow, 2))
+
+ call test_size_4 (size (array_3d_1byte_overflow, 1))
+ call test_size_4 (size (array_3d_1byte_overflow, 2))
+ call test_size_4 (size (array_3d_1byte_overflow, 3))
+
+ ! Kind 1.
+
+ call test_size_1 (size (array_1d_1byte_overflow, 1, 1))
+ call test_size_1 (size (array_1d_2bytes_overflow, 1, 1))
+ call test_size_1 (size (array_1d_4bytes_overflow, 1, 1))
+
+ call test_size_1 (size (array_2d_1byte_overflow, 1, 1))
+ call test_size_1 (size (array_2d_1byte_overflow, 2, 1))
+ call test_size_1 (size (array_2d_2bytes_overflow, 1, 1))
+ call test_size_1 (size (array_2d_2bytes_overflow, 2, 1))
+
+ call test_size_1 (size (array_3d_1byte_overflow, 1, 1))
+ call test_size_1 (size (array_3d_1byte_overflow, 2, 1))
+ call test_size_1 (size (array_3d_1byte_overflow, 3, 1))
+
+ ! Kind 2.
+ call test_size_2 (size (array_1d_1byte_overflow, 1, 2))
+ call test_size_2 (size (array_1d_2bytes_overflow, 1, 2))
+ call test_size_2 (size (array_1d_4bytes_overflow, 1, 2))
+
+ call test_size_2 (size (array_2d_1byte_overflow, 1, 2))
+ call test_size_2 (size (array_2d_1byte_overflow, 2, 2))
+ call test_size_2 (size (array_2d_2bytes_overflow, 1, 2))
+ call test_size_2 (size (array_2d_2bytes_overflow, 2, 2))
+
+ call test_size_2 (size (array_3d_1byte_overflow, 1, 2))
+ call test_size_2 (size (array_3d_1byte_overflow, 2, 2))
+ call test_size_2 (size (array_3d_1byte_overflow, 3, 2))
+
+ ! Kind 4.
+ call test_size_4 (size (array_1d_1byte_overflow, 1, 4))
+ call test_size_4 (size (array_1d_2bytes_overflow, 1, 4))
+ call test_size_4 (size (array_1d_4bytes_overflow, 1, 4))
+
+ call test_size_4 (size (array_2d_1byte_overflow, 1, 4))
+ call test_size_4 (size (array_2d_1byte_overflow, 2, 4))
+ call test_size_4 (size (array_2d_2bytes_overflow, 1, 4))
+ call test_size_4 (size (array_2d_2bytes_overflow, 2, 4))
+
+ call test_size_4 (size (array_3d_1byte_overflow, 1, 4))
+ call test_size_4 (size (array_3d_1byte_overflow, 2, 4))
+ call test_size_4 (size (array_3d_1byte_overflow, 3, 4))
+
+ ! Kind 8.
+ call test_size_8 (size (array_1d_1byte_overflow, 1, 8))
+ call test_size_8 (size (array_1d_2bytes_overflow, 1, 8))
+ call test_size_8 (size (array_1d_4bytes_overflow, 1, 8))
+
+ call test_size_8 (size (array_2d_1byte_overflow, 1, 8))
+ call test_size_8 (size (array_2d_1byte_overflow, 2, 8))
+ call test_size_8 (size (array_2d_2bytes_overflow, 1, 8))
+ call test_size_8 (size (array_2d_2bytes_overflow, 2, 8))
+
+ call test_size_8 (size (array_3d_1byte_overflow, 1, 8))
+ call test_size_8 (size (array_3d_1byte_overflow, 2, 8))
+ call test_size_8 (size (array_3d_1byte_overflow, 3, 8))
+
+ print *, "" ! Breakpoint before deallocate.
deallocate (allocatable_array_1d)
deallocate (allocatable_array_2d)
+
+ deallocate (array_3d_1byte_overflow)
+
+ deallocate (array_2d_2bytes_overflow)
+ deallocate (array_2d_1byte_overflow)
+
+ deallocate (array_1d_4bytes_overflow)
+ deallocate (array_1d_2bytes_overflow)
+ deallocate (array_1d_1byte_overflow)
+
array_1d_p => null ()
array_2d_p => null ()
@@ -108,11 +218,28 @@ program test
print *, allocated (allocatable_array_2d)
contains
+ subroutine test_size_1 (answer)
+ integer*1 :: answer
+
+ print *, answer ! Test Breakpoint 1
+ end subroutine test_size_1
+
+ subroutine test_size_2 (answer)
+ integer*2 :: answer
+
+ print *, answer ! Test Breakpoint 2
+ end subroutine test_size_2
+
+ subroutine test_size_4 (answer)
+ integer*4 :: answer
+
+ print *, answer ! Test Breakpoint 3
+ end subroutine test_size_4
- subroutine test_size (answer)
- integer :: answer
+ subroutine test_size_8 (answer)
+ integer*8 :: answer
- print *,answer ! Test Breakpoint
- end subroutine test_size
+ print *, answer ! Test Breakpoint 4
+ end subroutine test_size_8
end program test
diff --git a/gdb/testsuite/gdb.fortran/type-kinds.exp b/gdb/testsuite/gdb.fortran/type-kinds.exp
index b054803a0bf..47b788bf134 100644
--- a/gdb/testsuite/gdb.fortran/type-kinds.exp
+++ b/gdb/testsuite/gdb.fortran/type-kinds.exp
@@ -56,6 +56,7 @@ proc test_basic_parsing_of_type_kinds {} {
test_cast_1_to_type_kind "logical" "8" "\\.TRUE\\." "8"
test_cast_1_to_type_kind "integer" "" "1" "4"
+ test_cast_1_to_type_kind "integer" "1" "1" "1"
test_cast_1_to_type_kind "integer" "2" "1" "2"
test_cast_1_to_type_kind "integer" "4" "1" "4"
test_cast_1_to_type_kind "integer" "8" "1" "8"
@@ -92,6 +93,7 @@ proc test_old_star_type_sizes {} {
gdb_test "p ((logical*4) 1)" " = \\.TRUE\\."
gdb_test "p ((logical*8) 1)" " = \\.TRUE\\."
+ gdb_test "p ((integer*1) 1)" " = 1"
gdb_test "p ((integer*2) 1)" " = 1"
gdb_test "p ((integer*4) 1)" " = 1"
gdb_test "p ((integer*8) 1)" " = 1"
diff --git a/gdb/testsuite/gdb.fortran/types.exp b/gdb/testsuite/gdb.fortran/types.exp
index 7bd51ca63a7..594276f3a7b 100644
--- a/gdb/testsuite/gdb.fortran/types.exp
+++ b/gdb/testsuite/gdb.fortran/types.exp
@@ -48,10 +48,10 @@ proc test_logical_literal_types_accepted {} {
# Test the only possible values for a logical, TRUE and FALSE (and
# also true and false).
- gdb_test "pt .TRUE." "type = logical\\*2"
- gdb_test "pt .FALSE." "type = logical\\*2"
- gdb_test "pt .true." "type = logical\\*2"
- gdb_test "pt .false." "type = logical\\*2"
+ gdb_test "pt .TRUE." "type = logical\\*4"
+ gdb_test "pt .FALSE." "type = logical\\*4"
+ gdb_test "pt .true." "type = logical\\*4"
+ gdb_test "pt .false." "type = logical\\*4"
}
proc test_float_literal_types_accepted {} {
@@ -71,13 +71,30 @@ proc test_float_literal_types_accepted {} {
gdb_test "pt 10e20" "type = real\\*\[0-9\]+"
}
+# Test the default primitive Fortran types.
+proc test_default_types {} {
+ gdb_test "ptype integer" "type = integer\\*4"
+ gdb_test "ptype logical" "type = logical\\*4"
+ gdb_test "ptype real" "type = real\\*4"
+ gdb_test "ptype complex" "type = complex\\*4"
+}
+
# Test the the primitive Fortran types, those that GDB should always
# know, even if the program does not define them, are in fact, known.
proc test_primitive_types_known {} {
- foreach type {void character logical*1 integer*2 integer*8 \
- logical*2 logical*8 integer logical*4 real \
- real*8 real*16} {
- gdb_test "ptype $type" [string_to_regexp "type = $type"]
+ foreach type {void character \
+ integer*1 integer*2 integer*4 integer*8 \
+ integer_1 integer_2 integer_4 integer_8 \
+ logical*1 logical*2 logical*4 logical*8 \
+ logical_1 logical_2 logical_4 logical_8 \
+ real*4 real*8 real*16 real_4 real_8 real_16 \
+ complex*4 complex*8 complex*16 \
+ complex_4 complex_8 complex_16} {
+
+ # While TYPE_KIND is allowed as input, GDB will always return the
+ # Fortran notation TYPE*KIND
+ regsub -all "_" $type "\*" type_res
+ gdb_test "ptype $type" [string_to_regexp "type = $type_res"]
}
}
@@ -91,6 +108,7 @@ gdb_test "set print sevenbit-strings" ""
if [set_lang_fortran] then {
test_primitive_types_known
+ test_default_types
test_integer_literal_types_accepted
test_integer_literal_types_rejected
test_logical_literal_types_accepted
diff --git a/gdb/testsuite/gdb.fortran/vla-value-sub-finish.exp b/gdb/testsuite/gdb.fortran/vla-value-sub-finish.exp
index ec1dd55acf1..7b7b48940d2 100644
--- a/gdb/testsuite/gdb.fortran/vla-value-sub-finish.exp
+++ b/gdb/testsuite/gdb.fortran/vla-value-sub-finish.exp
@@ -32,6 +32,8 @@ if ![fortran_runto_main] {
# We need both variants as depending on the arch we optionally may still be
# executing the caller line or not after `finish'.
+gdb_test_no_output "set print repeats unlimited"
+
gdb_breakpoint [gdb_get_line_number "array2-almost-filled"]
gdb_continue_to_breakpoint "array2-almost-filled"
# array2 size is 296352 bytes.
diff --git a/gdb/testsuite/gdb.fortran/vla-value-sub.exp b/gdb/testsuite/gdb.fortran/vla-value-sub.exp
index 0aa9a423521..b7ab7a51726 100644
--- a/gdb/testsuite/gdb.fortran/vla-value-sub.exp
+++ b/gdb/testsuite/gdb.fortran/vla-value-sub.exp
@@ -29,6 +29,8 @@ if ![fortran_runto_main] {
# Check the values of VLA's in subroutine can be evaluated correctly
+gdb_test_no_output "set print repeats unlimited"
+
# Try to access values from a fixed array handled as VLA in subroutine.
gdb_breakpoint [gdb_get_line_number "not-filled"]
gdb_continue_to_breakpoint "not-filled (1st)"
diff --git a/gdb/testsuite/gdb.gdb/unittest.exp b/gdb/testsuite/gdb.gdb/unittest.exp
index 46583cd3504..2967b994cc3 100644
--- a/gdb/testsuite/gdb.gdb/unittest.exp
+++ b/gdb/testsuite/gdb.gdb/unittest.exp
@@ -58,11 +58,12 @@ proc run_selftests { binfile } {
}
-re "Selftests have been disabled for this build.\r\n$gdb_prompt $" {
unsupported $test
+ set num_ran 0
set enabled 0
}
}
- return $enabled
+ return [list $enabled $num_ran]
}
# Test completion of command "maintenance selftest".
@@ -86,7 +87,27 @@ proc_with_prefix test_completion {} {
}
with_test_prefix "no executable loaded" {
- set self_tests_enabled [run_selftests ""]
+ set res [run_selftests ""]
+ set self_tests_enabled [lindex $res 0]
+ set num_ran [lindex $res 1]
+}
+
+if { $self_tests_enabled && ![is_remote host] } {
+ # Check that we have the same amount of selftests whatever the
+ # initialization order of GDB.
+ with_test_prefix "reversed initialization" {
+ save_vars { env(GDB_REVERSE_INIT_FUNCTIONS) } {
+ if [info exists env(GDB_REVERSE_INIT_FUNCTIONS)] {
+ unset env(GDB_REVERSE_INIT_FUNCTIONS)
+ } else {
+ set env(GDB_REVERSE_INIT_FUNCTIONS) 1
+ }
+
+ set res [run_selftests ""]
+ gdb_assert "$num_ran == [lindex $res 1]" \
+ "selftest not dependent on initialization order"
+ }
+ }
}
with_test_prefix "executable loaded" {
diff --git a/gdb/testsuite/gdb.go/methods.exp b/gdb/testsuite/gdb.go/methods.exp
index aabf1fa5e09..d50fbde122c 100644
--- a/gdb/testsuite/gdb.go/methods.exp
+++ b/gdb/testsuite/gdb.go/methods.exp
@@ -49,7 +49,7 @@ gdb_test_multiple "maintenance print symbols" "" {
-re "^\r\n void main.T.Bar\[^\r\n\]*(?=\r\n)" {
exp_continue
}
- -re "\r\n$gdb_prompt $" {
+ -re "^\r\n$gdb_prompt $" {
pass $gdb_test_name
}
-re "\r\n\[^\r\n\]*(?=\r\n)" {
diff --git a/gdb/testsuite/gdb.linespec/break-ask.exp b/gdb/testsuite/gdb.linespec/break-ask.exp
index d73172de596..120c399acf2 100644
--- a/gdb/testsuite/gdb.linespec/break-ask.exp
+++ b/gdb/testsuite/gdb.linespec/break-ask.exp
@@ -28,16 +28,19 @@ if { [file pathtype $objdir] == "relative" } {
untested "objdir $objdir should be absolute"
return
}
-set saved_pwd [pwd]
-cd $srcdir/${subdir}/base/one
-set err1 [gdb_compile "thefile.cc" $objfile1 object $opts]
-cd $saved_pwd
-cd $srcdir/${subdir}/base/two
-set err2 [gdb_compile "thefile.cc" $objfile2 object $opts]
-cd $saved_pwd
-if { $err1 != "" || $err2 != "" } {
- untested "compilation failed"
- return -1
+
+with_cwd $srcdir/${subdir}/base/one {
+ if { [gdb_compile "thefile.cc" $objfile1 object $opts] != "" } {
+ untested "compilation failed"
+ return
+ }
+}
+
+with_cwd $srcdir/${subdir}/base/two {
+ if { [gdb_compile "thefile.cc" $objfile2 object $opts] != "" } {
+ untested "compilation failed"
+ return
+ }
}
if { [gdb_compile "$srcdir/${subdir}/$srcfile $objfile1 $objfile2" \
diff --git a/gdb/testsuite/gdb.linespec/cpcompletion.exp b/gdb/testsuite/gdb.linespec/cpcompletion.exp
index eafd0436aef..0383469828c 100644
--- a/gdb/testsuite/gdb.linespec/cpcompletion.exp
+++ b/gdb/testsuite/gdb.linespec/cpcompletion.exp
@@ -16,6 +16,7 @@
# This file is part of the gdb testsuite.
load_lib completion-support.exp
+load_lib data-structures.exp
standard_testfile cpls.cc cpls2.cc cpls-hyphen.cc
@@ -32,6 +33,217 @@ if { ![readline_is_used] } {
return -1
}
+#
+# Some convenience procedures for testing template parameter list
+# completion.
+#
+
+# For the variable named ARGLISTVAR, which should be the name of an
+# argument list in the calling frame, "consume" the top-most token.
+# [See comments for makefoo for description of arglist format.]
+
+proc consume {arglistvar} {
+ upvar $arglistvar arglist
+
+ # ARGLIST is a string -- simply strip off the first character.
+ set arglist [string range $arglist 1 end]
+}
+
+# Create a function template named NAME, using the given stack ID to grab
+# NUM template parameters. The result is pushed back onto the
+# stack. NUM may be "all," in which case we use the entire stack
+# to create the function template, including function arguments.
+# The resulting template function's arguments are taken from the test
+# source code for the function "foo" and is not generalized.
+
+proc maket {sid name {num 1}} {
+
+ # Set up a temporary stack of parameters. This will reverse
+ # the order in SID so that when they are popped again below,
+ # we get them in the correct order. This also takes into account
+ # how many levels of the result stack we want to consider.
+
+ set paramstack [::Stack::new]
+ if {[string equal $num "all"]} {
+ while {![stack empty $sid]} {
+ stack push $paramstack [stack pop $sid]
+ }
+ } else {
+ for {set i 0} {$i < $num} {incr i} {
+ stack push $paramstack [stack pop $sid]
+ }
+ }
+
+ # Construct the function template and push it back to the
+ # top of the stack given by SID.
+ set result ""
+ set first true
+ while {![stack empty $paramstack]} {
+ set top [stack pop $paramstack]
+ if {$first} {
+ set first false
+ } else {
+ append result ", "
+ }
+ append result $top
+ }
+
+ # Save argument list.
+ set args $result
+
+ # GDB outputs "> >" instead of ">>".
+ if {[string index $top end] == ">"} {
+ append result " "
+ }
+ set result "$name<$result>"
+ if {[string equal $num "all"]} {
+ append result "($args)"
+ }
+ stack push $sid $result
+ stack delete $paramstack
+}
+
+# Given the stack SID and the name of a variable of the desired template
+# parameters, construct the actual template parameter and push it to the
+# top of the stack.
+
+proc makearg {sid arglistvar} {
+ upvar $arglistvar arglist
+
+ set c [string index $arglist 0]
+ consume arglist
+ switch $c {
+ A -
+ B {
+ makearg $sid arglist
+ makearg $sid arglist
+ maket $sid $c 2
+ }
+
+ a -
+ b -
+ c -
+ d {
+ makearg $sid arglist
+ maket $sid $c
+ }
+
+ i {
+ stack push $sid "int"
+ }
+
+ n {
+ # These are not templates.
+ set c [string index $arglist 0]
+ stack push $sid "n::n$c"
+ consume arglist
+ }
+
+ N {
+ set c [string index $arglist 0]
+ makearg $sid arglist
+ set top [stack pop $sid]
+ stack push $sid "n::N$top"
+ }
+
+ default { error "unhandled arglist identifier: '$c'" }
+ }
+}
+
+# Given ARGLIST, construct a class template for the type and return
+# it as a string.
+
+proc maketype {arglist} {
+ set s [Stack::new]
+ makearg $s arglist
+ set result [stack pop $s]
+ stack delete $s
+ return $result
+}
+
+# Returns a function template declaration for the function "foo" in the
+# corresponding test source code. ARGLIST specifies the exact instantiation
+# that is desired.
+#
+# Generically, this procedure returns a string of the form,
+# "foo<parameter-list> (arg-list)", where ARGLIST describes the parameter(s).
+#
+# Valid specifiers for ARGLIST (must be kept in sync with source code):
+#
+# i: Creates an "int" type.
+# a, b, c, d: Creates the struct template of the same name, taking a single
+# template parameter.
+# A, B: Creates the struct template of the same name, taking two template
+# parameters.
+# na, nb: Creates the non-template structs n::na and n::nb, respectively.
+# NA, NB: Creates the struct templates n::NA and n::NB, respectively, which
+# take two template parameters.
+#
+# Examples:
+# makefoo i
+# --> foo<int> (int)
+# makefoo ii
+# --> foo<int, int> (int, int)
+# makefoo Aiabi
+# --> foo<A<int, a<b<int> > > > (A<int, a<b<int> > >)
+# makefoo NANAiaiNBbiabi
+# --> foo<n::NA<n::NA<int, a<int> >, n::NB<b<int>, a<b<int> > > > >
+# (n::NA<n::NA<int, a<int> >, n::NB<b<int>, a<b<int> > > >)
+
+proc makefoo {arglist} {
+ set s [::Stack::new]
+ while {[string length $arglist] > 0} {
+ makearg $s arglist
+ }
+
+ maket $s "foo" all
+ set result [stack pop $s]
+ stack delete $s
+ return $result
+}
+
+# Test wrapper for a single "makefoo" unit test.
+
+proc test_makefoo_1 {arglist expected} {
+ set exp "foo<$expected"
+ if {[string index $exp end] == ">"} {
+ append exp " "
+ }
+ append exp ">"
+ append exp "($expected)"
+
+ set calc [makefoo $arglist]
+ send_log "makefoo $arglist = $calc\n"
+ send_log "expecting: $exp\n"
+ if {[string equal $exp $calc]} {
+ pass "makefoo unit test: $arglist"
+ } else {
+ fail "makefoo unit test: $arglist"
+ }
+}
+
+# Test whether the procedure "makefoo" is functioning as expected.
+
+proc test_makefoo {} {
+ test_makefoo_1 "i" "int"
+ test_makefoo_1 "ai" "a<int>"
+ test_makefoo_1 "aai" "a<a<int> >"
+ test_makefoo_1 "ii" "int, int"
+ test_makefoo_1 "aaibi" "a<a<int> >, b<int>"
+ test_makefoo_1 \
+ "ababiibababai" "a<b<a<b<int> > > >, int, b<a<b<a<b<a<int> > > > > >"
+ test_makefoo_1 "Aii" "A<int, int>"
+ test_makefoo_1 "ABaibibi" "A<B<a<int>, b<int> >, b<int> >"
+ test_makefoo_1 "na" "n::na"
+ test_makefoo_1 "nana" "n::na, n::na"
+ test_makefoo_1 "NAii" "n::NA<int, int>"
+ test_makefoo_1 "NANAiiNAii" "n::NA<n::NA<int, int>, n::NA<int, int> >"
+}
+
+#
+# Tests start here.
+#
+
# Disable the completion limit for the whole testcase.
gdb_test_no_output "set max-completions unlimited"
@@ -385,12 +597,11 @@ proc_with_prefix template-ret-type {} {
test_complete_prefix_range $complete_line $start
}
- # Setting a breakpoint without the template params doesn't work.
- check_setting_bp_fails "$cmd_prefix template2_fn"
- # However, setting a breakpoint with template params and without
- # the method params does work, just like with non-template
- # functions. It also works with or without return type.
+ # Setting a breakpoint with or without template params and without
+ # the method params works, just like with non-template functions.
+ # It also works with or without return type.
foreach linespec [list \
+ "template2_fn" \
"${method_name}" \
"${method_name}${param_list}" \
"${struct_type}::${method_name}" \
@@ -404,6 +615,218 @@ proc_with_prefix template-ret-type {} {
}
}
+# Test completion of function template foo.
+
+proc_with_prefix template-function-foo {} {
+
+ foreach cmd_prefix {"b" "b -function"} {
+ # "foo" is ambiguous, this will set many different breakpoints.
+ set completion_list \
+ [list \
+ [makefoo Aabiaai] \
+ [makefoo Aabiabi] \
+ [makefoo Aabicdi] \
+ [makefoo AabicdiAabiaai] \
+ [makefoo AabicdiAabiabi] \
+ [makefoo AabicdiBabicdi] \
+ [makefoo Babicdi] \
+ [makefoo aai] \
+ [makefoo aaiabi] \
+ [makefoo aaicci] \
+ [makefoo aaicdi] \
+ [makefoo abi] \
+ [makefoo anabnb] \
+ [makefoo cci] \
+ [makefoo cdi] \
+ [makefoo NAnanbNBnanb] \
+ [makefoo nanb]]
+ test_gdb_complete_multiple "$cmd_prefix " "foo" "<" $completion_list
+ check_bp_locations_match_list "$cmd_prefix foo" $completion_list
+
+ # "foo<" should give the same result, but it should not set any
+ # breakpoints.
+ test_gdb_complete_multiple "$cmd_prefix " "foo<" "" $completion_list
+ check_setting_bp_fails "$cmd_prefix foo<"
+
+ # "foo<A" should only give completions in COMPLETION_LIST that
+ # start with "A" but should set no breakpoints.
+ set completion_list \
+ [list \
+ [makefoo Aabiaai] \
+ [makefoo Aabiabi] \
+ [makefoo Aabicdi] \
+ [makefoo AabicdiAabiaai] \
+ [makefoo AabicdiAabiabi] \
+ [makefoo AabicdiBabicdi]]
+ test_gdb_complete_multiple "$cmd_prefix " "foo<A" "<a<b<int> >, " \
+ $completion_list
+ check_setting_bp_fails "$cmd_prefix foo<A"
+
+ # "foo<A>" should give any function with one parameter of any type
+ # of A. While the parameter list in the template should be ignored,
+ # the function's argument list should not be ignored.
+ set completion_list \
+ [list \
+ [makefoo Aabiaai] \
+ [makefoo Aabiabi] \
+ [makefoo Aabicdi]]
+ test_gdb_complete_multiple "$cmd_prefix " "foo<A>" \
+ "(A<a<b<int> >, " $completion_list
+ check_bp_locations_match_list "$cmd_prefix foo<A>" $completion_list
+
+ # "foo<A," should complete to any function with more than one
+ # parameter where the first parameter is any type of A. Insufficient
+ # location to set breakpoints.
+ set completion_list \
+ [list \
+ [makefoo AabicdiAabiaai] \
+ [makefoo AabicdiAabiabi] \
+ [makefoo AabicdiBabicdi]]
+ test_gdb_complete_multiple "$cmd_prefix " "foo<A," " " \
+ $completion_list
+ check_setting_bp_fails "$cmd_prefix foo<A,"
+
+ # "foo<A<a<b<int>, a" should give all completions starting with
+ # "Aabia" but it is insufficient to set breakpoints.
+ set completion_list \
+ [list \
+ [makefoo Aabiaai] \
+ [makefoo Aabiabi]]
+ test_gdb_complete_multiple "$cmd_prefix " "foo<A<a<b<int> >, a" \
+ "<" $completion_list
+ check_setting_bp_fails "$cmd_prefix foo<A<a<b<int> >, a"
+
+ # "foo<A<a<b<int>, a<" should yield the same results as above.
+ test_gdb_complete_multiple "$cmd_prefix " "foo<A<a<b<int> >, a<" \
+ "" $completion_list
+ check_setting_bp_fails "$cmd_prefix foo<A<a<b<int> >, a<"
+
+ # "foo<A<a<b<int>, a<a" is unique but insufficient to set a
+ # breakpoint. This has an ignored template parameter list, so
+ # the completion will contain an ignored list ("a<a>")
+ test_gdb_complete_unique "$cmd_prefix foo<A<a<b<int> >, a<a" \
+ "$cmd_prefix [makefoo Aabiaai]"
+ check_setting_bp_fails "$cmd_prefix foo<A<b<int> >, a<a"
+
+ # "foo<A<a<b<int>, a<b" is also unique. Same parameter ignoring
+ # happens here, too (except "a<b>").
+ test_gdb_complete_unique "$cmd_prefix foo<A<a<b<int> >, a<b" \
+ "$cmd_prefix [makefoo Aabiabi]"
+ check_setting_bp_fails "$cmd_prefix foo<A<a<b<int> >, a<b"
+
+ # "foo<B" is unique but insufficient to set a breakpoint.
+ test_gdb_complete_unique "$cmd_prefix foo<B" \
+ "$cmd_prefix [makefoo Babicdi]"
+ check_setting_bp_fails "$cmd_prefix foo<B"
+
+ # "foo<B>" yields the same unique result and sets a breakpoint.
+ # Since the input skips the parameter list, so does the completion.
+ test_gdb_complete_unique "$cmd_prefix foo<B>" \
+ "$cmd_prefix foo<B>(B<a<b<int> >, c<d<int> > >)"
+ check_bp_locations_match_list "$cmd_prefix foo<B>" \
+ [list [makefoo Babicdi]]
+
+ # "foo<B," should return no completions and no breakpoints.
+ test_gdb_complete_none "$cmd_prefix foo<B,"
+ check_setting_bp_fails "$cmd_prefix foo<B,"
+
+ # "foo<n::" should yield only the functions starting with
+ # "n" and "N" and no breakpoints.
+ set completion_list \
+ [list \
+ [makefoo NAnanbNBnanb] \
+ [makefoo nanb]]
+ test_gdb_complete_multiple "$cmd_prefix " "foo<n::" "" \
+ $completion_list
+ check_setting_bp_fails "$cmd_prefix foo<n::"
+
+ # "foo<A<a, c> >" is unique and sets a breakpoint.
+ # Multiple template parameter lists are skipped, so GDB will ignore
+ # them in the completion.
+ test_gdb_complete_unique "$cmd_prefix foo<A<a, c> >" \
+ "$cmd_prefix foo<A<a, c> >(A<a<b<int> >, c<d<int> > >)"
+ check_bp_locations_match_list "$cmd_prefix foo<A<a, c> >" \
+ [list [makefoo Aabicdi]]
+ }
+}
+
+# Helper for template-class-with-method to build completion lists.
+
+proc makem {arglist_list} {
+ set completion_list {}
+ foreach arglist $arglist_list {
+ lappend completion_list "[maketype $arglist]::method()"
+ }
+ return $completion_list
+}
+
+# Returns a list of elements that look like
+# void TYPE::method()
+# where TYPE is derived from each arglist in ARGLIST_LIST.
+
+proc test_makem_1 {arglist_list expected_list} {
+ set result [makem $arglist_list]
+ send_log "makem $arglist = $result\n"
+ send_log "expecting $expected_list\n"
+
+ # Do list equality via canonical strings.
+ if {[expr {[list {*}$expected_list] eq [list {*}$result]}]} {
+ pass "makem unit test: $arglist"
+ } else {
+ fail "makem unit test: $arglist"
+ }
+}
+
+# Unit tests for makem.
+
+proc test_makem {} {
+ test_makem_1 ai {"a<int>::method()"}
+ test_makem_1 bi {"b<int>::method()"}
+ test_makem_1 {ai bi} {"a<int>::method()" "b<int>::method()"}
+ test_makem_1 {Aaiaai Bbibbi abi cdi} {
+ "A<a<int>, a<a<int> > >::method()"
+ "B<b<int>, b<b<int> > >::method()"
+ "a<b<int> >::method()"
+ "c<d<int> >::method()"
+ }
+}
+
+# Test class template containing a (non-templated) method called "method."
+
+proc_with_prefix template-class-with-method {} {
+
+ foreach {type type_list} \
+ [list \
+ "" {aai abi cci cdi Aabicdi Aabiaai Aabiabi Babicdi} \
+ "a" {aai abi} \
+ "b" {} \
+ "c" {cci cdi} \
+ "A" {Aabicdi Aabiaai Aabiabi} \
+ "B" {Babicdi} \
+ "A<a, a>" {Aabiaai Aabiabi} \
+ "A<a<b>, c>" {Aabicdi}\
+ "A<a, d>" {} \
+ "B<a, a>" {} \
+ "B<a, b>" {} \
+ "B<a, c>" {Babicdi}] \
+ {
+ foreach cmd_prefix {"b" "b -function"} {
+ set c "$cmd_prefix "
+ if {$type != ""} {
+ append c "${type}::"
+ }
+ append c "method"
+
+ if {[llength $type_list] > 0} {
+ test_gdb_complete_unique $c "${c}()"
+ check_bp_locations_match_list $c [makem $type_list]
+ } else {
+ test_gdb_complete_none $c
+ }
+ }
+ }
+}
+
# Test completion of a const-overloaded funtion (const-overload).
# Note that "const" appears after the function/method parameters.
@@ -947,6 +1370,10 @@ proc test_driver {} {
overload-3
template-overload
template-ret-type
+ #test_makefoo
+ template-function-foo
+ #test_makem
+ template-class-with-method
const-overload
const-overload-quoted
append-end-quote-char-when-unambiguous
diff --git a/gdb/testsuite/gdb.linespec/cpls-ops.exp b/gdb/testsuite/gdb.linespec/cpls-ops.exp
index 558a486ec1e..78e5a552173 100644
--- a/gdb/testsuite/gdb.linespec/cpls-ops.exp
+++ b/gdb/testsuite/gdb.linespec/cpls-ops.exp
@@ -248,20 +248,6 @@ proc test_operator_ambiguous {class_name opn cls} {
test_gdb_complete_multiple \
"$cmd_prefix " "$linespec_noparams" "" $location_list
- # Setting the breakpoint doesn't create a breakpoint location
- # for the template, because immediately after
- # "operator()/operator[]" we have the template parameters, not
- # the parameter list.
- set location_list \
- [list \
- "${class_name}::operator${opn}${cls}(int)" \
- "${class_name}::operator${opn}${cls}(long)"]
- if {$opn == "("} {
- set location_list \
- [concat \
- [list "${class_name}::operator${opn}${cls}()"] \
- $location_list]
- }
check_bp_locations_match_list "$cmd_prefix $linespec_noparams" \
$location_list
check_bp_locations_match_list "$cmd_prefix $linespec_noparams<int>" \
@@ -269,26 +255,33 @@ proc test_operator_ambiguous {class_name opn cls} {
# Test the template version. Test both with and without
# return type.
- test_gdb_complete_unique \
- "$cmd_prefix ${class_name}::operator${opn}${cls}<int>(in" \
- "$cmd_prefix ${class_name}::operator${opn}${cls}<int>(int*)"
- check_bp_locations_match_list \
- "$cmd_prefix ${class_name}::operator${opn}${cls}<int>(int*)" \
- [list "${class_name}::operator${opn}${cls}<int>(int*)"]
- test_gdb_complete_unique \
- "$cmd_prefix void ${class_name}::operator${opn}${cls}<int>(in" \
- "$cmd_prefix void ${class_name}::operator${opn}${cls}<int>(int*)"
- check_bp_locations_match_list \
- "$cmd_prefix void ${class_name}::operator${opn}${cls}<int>(int*)" \
- [list "${class_name}::operator${opn}${cls}<int>(int*)"]
+ set f "${class_name}::operator"
+ foreach ws1 {"" " "} {
+ foreach ws2 {"" " "} {
+ foreach ws3 {"" " "} {
+ test_gdb_complete_unique \
+ "$cmd_prefix ${f}${opn}${ws1}${cls}<${ws2}int${ws3}>(in" \
+ "$cmd_prefix ${f}${opn}${ws1}${cls}<${ws2}int${ws3}>(int*)"
+ check_bp_locations_match_list \
+ "$cmd_prefix ${f}${opn}${ws1}${cls}<${ws2}int${ws3}>(int*)" \
+ [list "${f}${opn}${cls}<int>(int*)"]
+ test_gdb_complete_unique \
+ "$cmd_prefix void ${f}${opn}${ws1}${cls}<${ws2}int${ws3}>(in" \
+ "$cmd_prefix void ${f}${opn}${ws1}${cls}<${ws2}int${ws3}>(int*)"
+ check_bp_locations_match_list \
+ "$cmd_prefix void ${f}${opn}${ws1}${cls}<${ws2}int${ws3}>(int*)" \
+ [list "${f}${opn}${cls}<int>(int*)"]
+ }
+ }
+ }
# Add extra spaces.
test_gdb_complete_unique \
- "$cmd_prefix ${class_name}::operator ${opn} ${cls} ( in" \
- "$cmd_prefix ${class_name}::operator ${opn} ${cls} ( int)"
+ "$cmd_prefix ${class_name}::operator ${opn} ${cls} ( lo" \
+ "$cmd_prefix ${class_name}::operator ${opn} ${cls} ( long)"
check_bp_locations_match_list \
- "$cmd_prefix ${class_name}::operator ${opn} ${cls} ( int )" \
- [list "${class_name}::operator${opn}${cls}(int)"]
+ "$cmd_prefix ${class_name}::operator ${opn} ${cls} ( long )" \
+ [list "${class_name}::operator${opn}${cls}(long)"]
}
}
diff --git a/gdb/testsuite/gdb.linespec/cpls.cc b/gdb/testsuite/gdb.linespec/cpls.cc
index df64abd50fd..d96c1dd7211 100644
--- a/gdb/testsuite/gdb.linespec/cpls.cc
+++ b/gdb/testsuite/gdb.linespec/cpls.cc
@@ -146,7 +146,7 @@ namespace ns_overload3_test
}
}
-/* Code for the template-overload tests. */
+/* Code for the template-function_foo (template parameter completion) tests. */
template <typename T>
struct template_struct
@@ -163,6 +163,113 @@ T template_struct<T>::template_overload_fn (T t)
template_struct<int> template_struct_int;
template_struct<long> template_struct_long;
+/* Code for the template-parameter-overload test. */
+
+template <typename T>
+void foo (T c) {}
+
+template <typename T1, typename T2>
+void foo (T1 a, T2 b) {}
+
+template <typename T>
+struct a
+{
+ void method () {}
+};
+
+template <typename T>
+struct b
+{
+ void method () {}
+};
+
+template <typename T>
+struct c
+{
+ void method () {}
+};
+
+template <typename T>
+struct d
+{
+ void method () {};
+};
+
+template <typename T1, typename T2>
+struct A
+{
+ void method () {}
+};
+
+template <typename T1, typename T2>
+struct B
+{
+ void method () {}
+};
+
+namespace n
+{
+ struct na {};
+ struct nb {};
+
+ template <typename T1, typename T2>
+ struct NA {};
+
+ template <typename T1, typename T2>
+ struct NB {};
+};
+
+static void
+template_function_foo ()
+{
+ a<a<int>> aa;
+ aa.method ();
+ a<b<int>> ab;
+ ab.method ();
+ c<c<int>> cc;
+ cc.method ();
+ c<d<int>> cd;
+ cd.method ();
+ foo (aa);
+ foo (ab);
+ foo (cc);
+ foo (cd);
+ foo (aa, ab);
+ foo (aa, cc);
+ foo (aa, cd);
+
+ A<a<b<int>>, c<d<int>>> Aabcd;
+ Aabcd.method ();
+ foo (Aabcd);
+
+ A<a<b<int>>, a<a<int>>> Aabaa;
+ Aabaa.method ();
+ foo (Aabaa);
+
+ A<a<b<int>>, a<b<int>>> Aabab;
+ Aabab.method ();
+ foo (Aabab);
+
+ B<a<b<int>>, c<d<int>>> Babcd;
+ Babcd.method ();
+ foo (Babcd);
+
+ foo (Aabcd, Babcd);
+ foo (Aabcd, Aabaa);
+ foo (Aabcd, Aabab);
+
+ n::na na;
+ n::nb nb;
+ foo (na, nb);
+ a<n::na> ana;
+ b<n::nb> bnb;
+ foo (ana, bnb);
+
+ n::NA<n::na, n::nb> NAnanb;
+ n::NB<n::na, n::nb> Nbnanb;
+ foo (NAnanb, Nbnanb);
+}
+
/* Code for the template2-ret-type tests. */
template <typename T>
@@ -381,6 +488,7 @@ main ()
template2_struct_inst.template2_fn<int, int> ();
template_struct_int.template_overload_fn(0);
template_struct_long.template_overload_fn(0);
+ template_function_foo ();
return 0;
}
diff --git a/gdb/testsuite/gdb.base/linespecs.exp b/gdb/testsuite/gdb.linespec/errors.exp
index bc16863a3e3..c895e25da03 100644
--- a/gdb/testsuite/gdb.base/linespecs.exp
+++ b/gdb/testsuite/gdb.linespec/errors.exp
@@ -18,7 +18,7 @@
# We don't currently need our own test case for testing, so grab
# another one.
-if {[prepare_for_testing "failed to prepare" linespecs memattr.c]} {
+if {[prepare_for_testing "failed to prepare" linespecs keywords.c]} {
return -1
}
@@ -27,3 +27,21 @@ gdb_test "list c:/foo/bar/baz.c:1" "No source file named c:/foo/bar/baz.c."
gdb_test "list c:/foo/bar/baz.c" "Function \"c:/foo/bar/baz.c\" not defined."
gdb_test "list fooc:/foo/bar/baz.c:1" "No source file named fooc."
gdb_test "list fooc:/foo/bar/baz.c" "No source file named fooc."
+
+# PR cli/28665, gdb/28797
+save_vars { env(EDITOR) } {
+ setenv EDITOR true
+
+ foreach cmd {list edit} {
+ gdb_test "${cmd} task 123" \
+ "Junk at end of line specification\\."
+ gdb_test "${cmd} if (0)" \
+ "Junk at end of line specification\\."
+ gdb_test "${cmd} thread 1" \
+ "Junk at end of line specification\\."
+ gdb_test "${cmd} -force-condition" \
+ "Junk at end of line specification\\."
+ gdb_test "${cmd} ,," \
+ "Junk at end of line specification\\."
+ }
+}
diff --git a/gdb/testsuite/gdb.linespec/macro-relative.exp b/gdb/testsuite/gdb.linespec/macro-relative.exp
index f827420eb3c..67b779f5896 100644
--- a/gdb/testsuite/gdb.linespec/macro-relative.exp
+++ b/gdb/testsuite/gdb.linespec/macro-relative.exp
@@ -26,26 +26,18 @@ if [is_remote host] {
return 0
}
-set opts {debug additional_flags=-I.}
-
-get_compiler_info
-if [test_compiler_info gcc*] {
- lappend opts additional_flags=-g3
-} elseif [test_compiler_info clang*] {
- lappend opts additional_flags=-fdebug-macro
-}
+set opts {debug additional_flags=-I. macros}
if { [file pathtype $objdir] == "relative" } {
untested "objdir $objdir should be absolute"
return
}
-set saved_pwd [pwd]
-cd $srcdir/${subdir}/base/two
-set err [gdb_compile "../../${srcfile}" "${binfile}" executable $opts]
-cd $saved_pwd
-if { $err != "" } {
- untested "compilation failed"
- return -1
+
+with_cwd $srcdir/${subdir}/base/two {
+ if { [gdb_compile "../../${srcfile}" "${binfile}" executable $opts] != "" } {
+ untested "compilation failed"
+ return
+ }
}
clean_restart ${testfile}
diff --git a/gdb/testsuite/gdb.mi/interrupt-thread-group.exp b/gdb/testsuite/gdb.mi/interrupt-thread-group.exp
index 8661d573cfe..19ccbe85e04 100644
--- a/gdb/testsuite/gdb.mi/interrupt-thread-group.exp
+++ b/gdb/testsuite/gdb.mi/interrupt-thread-group.exp
@@ -57,19 +57,9 @@ mi_send_resuming_command "exec-continue --thread-group i1" \
set use_second_inferior [expr {![use_gdb_stub]}]
if { $use_second_inferior } {
- # The inferior created by the -add-inferior MI command does not inherit the
- # target connection of the first inferior. If debugging through an
- # extended-remote connection, that means we can't run that second inferior
- # on the remote connection. Use the add-inferior CLI command as a stop-gap.
- if { [mi_is_target_remote] } {
- mi_gdb_test "add-inferior" \
- "\\^done" \
- "add inferior 2"
- } else {
- mi_gdb_test "-add-inferior" \
- "\\^done,inferior=\"i2\"" \
- "add inferior 2"
- }
+ mi_gdb_test "-add-inferior" \
+ "\\^done,inferior=\"i2\",connection=\\{\[^\}\]+\\}" \
+ "add inferior 2"
mi_gdb_test "-file-exec-and-symbols --thread-group i2 $::binfile" \
"\\^done" \
"set executable of inferior 2"
diff --git a/gdb/testsuite/gdb.mi/mi-add-inferior.exp b/gdb/testsuite/gdb.mi/mi-add-inferior.exp
new file mode 100644
index 00000000000..85cd6a5271d
--- /dev/null
+++ b/gdb/testsuite/gdb.mi/mi-add-inferior.exp
@@ -0,0 +1,130 @@
+# Copyright 2022 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Test MI '-add-inferior'.
+
+load_lib mi-support.exp
+set MIFLAGS "-i=mi"
+
+standard_testfile basics.c
+
+if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" \
+ executable {debug}] != "" } {
+ untested "failed to compile"
+ return -1
+}
+
+mi_clean_restart ${binfile}
+
+# Start execution to establish a connection.
+mi_runto_main
+
+# Use 'info inferiors' to find the details of the current connection.
+set header_line ""
+set inf_line ""
+gdb_test_multiple "info inferiors" "" {
+
+ -re "^info inferiors\r\n" {
+ exp_continue
+ }
+
+ -re "^&\[^\r\n\]+\r\n" {
+ exp_continue
+ }
+
+ -re "~\"( Num\\s+Description\\s+Connection\[^\r\n\]+)\r\n" {
+ set header_line $expect_out(1,string)
+ exp_continue
+ }
+
+ -re "^~\"(\\*\\s+1\\s+\[^\r\n\]+)\r\n" {
+ set inf_line $expect_out(1,string)
+ exp_continue
+ }
+
+ -re "^\\^done\r\n" {
+ exp_continue
+ }
+
+ -re "^$mi_gdb_prompt$" {
+ gdb_assert { [string length "$header_line"] > 0 }
+ gdb_assert { [string length "$inf_line"] > 0 }
+ pass $gdb_test_name
+ }
+}
+
+# Now extract the string that represents the connection, and convert
+# it into a regexp.
+set idx [string first "Connection" "${header_line}"]
+gdb_assert { $idx > -1 }
+set inf_line [string range "${inf_line}" $idx end]
+regexp "^(${decimal} \\(\[^)\]+\\))" $inf_line conn_info
+set conn_pattern [string_to_regexp "${conn_info}"]
+
+# Now add a new inferior, this should use the connection of the
+# current inferior.
+mi_gdb_test "-add-inferior" \
+ [multi_line "=thread-group-added,id=\"\[^\"\]+\"" \
+ "~\"\\\[New inferior 2\\\]\\\\n\"" \
+ "\~\"Added inferior 2 on connection ${conn_pattern}\\\\n\"" \
+ "\\^done,inferior=\"\[^\"\]+\",connection=\{number=\"$decimal\",name=\"\[^\"\]+\"\}" ] \
+ "mi add inferior"
+
+# Now run 'info inferiors' again to check that the currently selected
+# inferior has not changed.
+set saw_current_inferior false
+set saw_new_inferior false
+gdb_test_multiple "info inferiors" \
+ "info inferiors, after new inferior was created" {
+
+ -re "^info inferiors\r\n" {
+ exp_continue
+ }
+
+ -re "^&\[^\r\n\]+\r\n" {
+ exp_continue
+ }
+
+ -re "~\"\\s+Num\\s+Description\\s+Connection\[^\r\n\]+\r\n" {
+ exp_continue
+ }
+
+ -re "^~\"\\*\\s+1\\s+\[^\r\n\]+\\s+${conn_pattern}\\s+\[^\r\n\]+\r\n" {
+ set saw_current_inferior true
+ exp_continue
+ }
+
+ -re "^~\"\\s+2\\s+\[^\r\n\]+\\s+${conn_pattern}\\s+\[^\r\n\]+\r\n" {
+ set saw_new_inferior true
+ exp_continue
+ }
+
+ -re "^\\^done\r\n" {
+ exp_continue
+ }
+
+ -re "^$mi_gdb_prompt$" {
+ gdb_assert { $saw_current_inferior && $saw_new_inferior }
+ pass $gdb_test_name
+ }
+ }
+
+# Add a third inferior, but this time, use --no-connection.
+mi_gdb_test "-add-inferior --no-connection" \
+ [multi_line "=thread-group-added,id=\"\[^\"\]+\"" \
+ "~\"\\\[New inferior 3\\\]\\\\n\"" \
+ "\~\"Added inferior 3\\\\n\"" \
+ "\\^done,inferior=\"\[^\"\]+\"" ] \
+ "mi add inferior with no connection"
diff --git a/gdb/testsuite/gdb.mi/mi-break-qualified.exp b/gdb/testsuite/gdb.mi/mi-break-qualified.exp
index ff37950fd76..ca6df0782df 100644
--- a/gdb/testsuite/gdb.mi/mi-break-qualified.exp
+++ b/gdb/testsuite/gdb.mi/mi-break-qualified.exp
@@ -95,7 +95,7 @@ proc test_break_qualified {} {
mi_gdb_exit
-if [mi_gdb_start ""] {
+if [mi_gdb_start] {
return
}
diff --git a/gdb/testsuite/gdb.mi/mi-catch-cpp-exceptions.exp b/gdb/testsuite/gdb.mi/mi-catch-cpp-exceptions.exp
index a909bb9d300..d8d7a57a766 100644
--- a/gdb/testsuite/gdb.mi/mi-catch-cpp-exceptions.exp
+++ b/gdb/testsuite/gdb.mi/mi-catch-cpp-exceptions.exp
@@ -183,8 +183,8 @@ with_test_prefix "all with -t" {
if { $libstdcxx_probe_tests_supported == 1 } {
# Check that the temporary switch works when used with a regexp.
- restart_for_test
with_test_prefix "all with -t and regexp" {
+ restart_for_test
setup_catchpoint "throw" "-t -r my_ex"
setup_catchpoint "rethrow" "-t -r _except"
setup_catchpoint "catch" "-t -r my_exception"
diff --git a/gdb/testsuite/gdb.mi/mi-cmd-user-context.c b/gdb/testsuite/gdb.mi/mi-cmd-user-context.c
new file mode 100644
index 00000000000..bb74ab86b20
--- /dev/null
+++ b/gdb/testsuite/gdb.mi/mi-cmd-user-context.c
@@ -0,0 +1,73 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+ Copyright 2016-2022 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+#include <pthread.h>
+#include <unistd.h>
+#include <stdint.h>
+
+#define NUM_THREADS 2
+
+static volatile int unblock_main[NUM_THREADS];
+
+static void
+child_sub_function (int child_idx)
+{
+ volatile int dummy = 0;
+
+ unblock_main[child_idx] = 1;
+
+ while (1)
+ /* Dummy loop body to allow setting breakpoint. */
+ dummy = !dummy; /* thread loop line */
+}
+
+static void *
+child_function (void *args)
+{
+ int child_idx = (int) (uintptr_t) args;
+
+ child_sub_function (child_idx); /* thread caller line */
+
+ return NULL;
+}
+
+int
+main (void)
+{
+ int i = 0;
+ pthread_t threads[NUM_THREADS];
+
+ /* Make the test exit eventually. */
+ alarm (20);
+
+ for (i = 0; i < NUM_THREADS; i++)
+ pthread_create (&threads[i], NULL, child_function, (void *) (uintptr_t) i);
+
+ /* Wait for child threads to reach child_sub_function. */
+ for (i = 0; i < NUM_THREADS; i++)
+ while (!unblock_main[i])
+ ;
+
+ volatile int dummy = 0;
+ while (1)
+ /* Dummy loop body to allow setting breakpoint. */
+ dummy = !dummy; /* main break line */
+
+ return 0;
+}
diff --git a/gdb/testsuite/gdb.mi/mi-cmd-user-context.exp b/gdb/testsuite/gdb.mi/mi-cmd-user-context.exp
new file mode 100644
index 00000000000..e5fccdd2308
--- /dev/null
+++ b/gdb/testsuite/gdb.mi/mi-cmd-user-context.exp
@@ -0,0 +1,157 @@
+# Copyright 2022 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Test that GDB/MI commands preserve user selected context when
+# passed --thread and/or --frame.
+
+load_lib mi-support.exp
+
+standard_testfile
+
+if {[build_executable $testfile.exp $testfile ${srcfile} "debug pthreads"] == -1} {
+ untested "failed to compile"
+ return -1
+}
+
+set main_break_line [gdb_get_line_number "main break line"]
+
+set any "\[^\r\n\]*"
+
+mi_clean_restart $binfile
+mi_create_breakpoint "$srcfile:$main_break_line" "set breakpoint in main"
+mi_run_cmd
+mi_expect_stop "breakpoint-hit" "main" "" $srcfile $main_break_line \
+ { "" "disp=\"keep\"" } "run to breakpoint in main"
+
+mi_gdb_test "thread" \
+ ".*Current thread is 1.*" \
+ "info thread 1"
+
+# Run -stack-info-depth in a different thread, the current thread
+# should not change.
+
+mi_gdb_test "-stack-info-depth --thread 3" \
+ "\\^done,depth=.*" \
+ "-stack-info-depth --thread 3"
+
+mi_gdb_test "thread" \
+ ".*Current thread is 1.*" \
+ "info thread 2"
+
+# Expect GDB to switch to thread 3.
+mi_gdb_test "-thread-select 3" \
+ "\\^done,${any}new-thread-id=\"3\"${any}" \
+ "-thread-select 3"
+
+mi_gdb_test "thread" \
+ ".*Current thread is 3.*" \
+ "info thread 3"
+
+# Expect GDB to switch to thread 1.
+mi_gdb_test "-thread-select --thread 2 1" \
+ "\\^done,${any}new-thread-id=\"1\"${any}" \
+ "-thread-select --thread 2 1"
+
+mi_gdb_test "thread" \
+ ".*Current thread is 1.*" \
+ "info thread 4"
+
+# Expect GDB to switch to thread 2.
+mi_gdb_test "-thread-select --thread 2 2" \
+ "\\^done,.*" \
+ "-thread-select --thread 2 2"
+
+mi_gdb_test "thread" \
+ ".*Current thread is 2.*" \
+ "info thread 5"
+
+# Check we're in frame 0.
+mi_gdb_test "frame" \
+ ".*#0 .*child_sub_function .*" \
+ "frame 1"
+
+# Ask about a different frame in the current thread, the current frame
+# should not change.
+mi_gdb_test "-stack-info-frame --thread 2 --frame 1" \
+ "\\^done,frame=\{level=\"1\".*" \
+ "-stack-info-frame 1"
+
+mi_gdb_test "thread" \
+ ".*Current thread is 2.*" \
+ "info thread 6"
+
+mi_gdb_test "frame" \
+ ".*#0 .*child_sub_function.*" \
+ "frame 2"
+
+
+# Ask about a different frame in a different thread. After this the
+# current thread and frame should not have changed.
+mi_gdb_test "-stack-info-frame --thread 3 --frame 1" \
+ "\\^done,frame=\{level=\"1\".*" \
+ "-stack-info-frame 2"
+
+mi_gdb_test "thread" \
+ ".*Current thread is 2.*" \
+ "info thread 7"
+
+mi_gdb_test "frame" \
+ ".*#0 .*child_sub_function.*" \
+ "frame 3"
+
+# Select a different frame in the current thread. Despite the use of
+# the --frame option, we do expect the currently selected frame to
+# change.
+mi_gdb_test "-stack-select-frame --thread 2 --frame 0 1" \
+ "\\^done" \
+ "--stack-select-frame 1"
+
+mi_gdb_test "thread" \
+ ".*Current thread is 2.*" \
+ "info thread 8"
+
+mi_gdb_test "frame" \
+ ".*#1 .*child_function.*" \
+ "frame 4"
+
+# Similar to the previous test, but this time the --frame option is
+# the same as the frame we are selecting. We still expect GDB to
+# update the currently selected frame.
+mi_gdb_test "-stack-select-frame --thread 2 --frame 2 2" \
+ "\\^done" \
+ "--stack-select-frame 2"
+
+mi_gdb_test "thread" \
+ ".*Current thread is 2.*" \
+ "info thread 9"
+
+mi_gdb_test "frame" \
+ ".*#2 0x.*" \
+ "frame 5"
+
+# Now select a frame in a different thread. We expect both the
+# currently selected thread, and the currently selected frame to be
+# updated.
+mi_gdb_test "-stack-select-frame --thread 1 --frame 0 0" \
+ "\\^done" \
+ "--stack-select-frame 3"
+
+mi_gdb_test "thread" \
+ ".*Current thread is 1.*" \
+ "info thread 10"
+
+mi_gdb_test "frame" \
+ ".*#0 main.*" \
+ "frame 6"
diff --git a/gdb/testsuite/gdb.mi/mi-exec-run.exp b/gdb/testsuite/gdb.mi/mi-exec-run.exp
index eaf7dfa68bf..f8e6550850f 100644
--- a/gdb/testsuite/gdb.mi/mi-exec-run.exp
+++ b/gdb/testsuite/gdb.mi/mi-exec-run.exp
@@ -60,7 +60,7 @@ proc test {inftty_mode mi_mode force_fail} {
lappend start_ops "separate-mi-tty"
}
- if [eval mi_gdb_start $start_ops] {
+ if [mi_gdb_start $start_ops] {
return
}
@@ -89,36 +89,60 @@ proc test {inftty_mode mi_mode force_fail} {
if {$force_fail} {
set saw_perm_error 0
set saw_mi_error 0
+ set already_failed 0
set test "run failure detected"
send_gdb "-exec-run --start\n"
- while {1} {
- gdb_expect {
- -i "$inferior_spawn_id"
- -re ".*Cannot exec.*Permission denied" {
- set saw_perm_error 1
- verbose -log "saw mi error"
+ # Redirect through SPAWN_LIST global. If the
+ # inferior_spawn_id is not the same as gdb_spawn_id, e.g. when
+ # testing with gdbserver, the gdbserver can exit after
+ # emitting it's error message.
+ #
+ # If inferior_spawn_id exits then we may see the eof from that
+ # spawn-id before we see the pattern from the gdb_spawn_id,
+ # which will kick us out of the gdb_expect, and cause us to
+ # fail the test.
+ #
+ # Instead we clean SPAWN_LIST once we've seen the expected
+ # pattern from that spawn-id, and after that we no longer care
+ # when gdbserver exits.
+ global spawn_list
+ set spawn_list "$inferior_spawn_id"
+
+ gdb_expect {
+ -i spawn_list
+ -re ".*Cannot exec.*Permission denied" {
+ set saw_perm_error 1
+ set spawn_list ""
+ verbose -log "saw perm error"
+ if {!$saw_mi_error} {
+ exp_continue
}
- -i "$gdb_spawn_id"
- -re "\\^error,msg=\"During startup program exited with code 127" {
- set saw_mi_error 1
- verbose -log "saw mi error"
- }
- timeout {
- fail "$test (timeout)"
- break
- }
- -i "$gdb_main_spawn_id"
- eof {
- fail "$test (eof)"
- break
+ }
+ -i "$gdb_spawn_id"
+ -re "\\^error,msg=\"(During startup program exited with code 127|Running .* on the remote target failed)" {
+ set saw_mi_error 1
+ verbose -log "saw mi error"
+ if {!$saw_perm_error} {
+ exp_continue
}
}
-
- if {$saw_perm_error && $saw_mi_error} {
- pass $test
- break
+ timeout {
+ set already_failed 1
+ fail "$test (timeout)"
}
+ -i "$gdb_main_spawn_id"
+ eof {
+ set already_failed 1
+ fail "$test (eof)"
+ }
+ }
+
+ if {$saw_perm_error && $saw_mi_error} {
+ pass $test
+ } elseif {!$already_failed} {
+ verbose -log "saw_perm_error=$saw_perm_error; saw_mi_error=$saw_mi_error"
+ fail $test
}
} else {
mi_run_cmd "--start"
diff --git a/gdb/testsuite/gdb.mi/mi-multi-commands.exp b/gdb/testsuite/gdb.mi/mi-multi-commands.exp
new file mode 100644
index 00000000000..d00e0aaea8b
--- /dev/null
+++ b/gdb/testsuite/gdb.mi/mi-multi-commands.exp
@@ -0,0 +1,131 @@
+# Copyright 2022 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# In the past we would use glibc's buffered input for the mi tty.
+# This buffering would cause problems if two commands are sent to gdb
+# in a single write call, and, if the first command (excluding its
+# trailing newline) exactly filled glibc's internal buffer.
+#
+# The solution to this problem was to stop using glibc's buffering for
+# the mi tty.
+#
+# To test for this situation we send two command to gdb in a loop, the
+# first command gets progressively bigger. We check that gdb
+# correctly sees both commands.
+
+load_lib mi-support.exp
+set MIFLAGS "-i=mi"
+
+# Start gdb, passing ARGS to mi_gdb_start. Then run a series of tests
+# passing two commands to gdb in a single write action. The first
+# command is increasingly long, while the second command stays very
+# short.
+#
+# Check that gdb sees, and performs, both commands.
+proc run_test { args } {
+ global mi_gdb_prompt
+ global decimal
+
+ gdb_exit
+ if [mi_gdb_start $args] {
+ continue
+ }
+
+ set start 1
+ set limit 2049
+
+ mi_gdb_test "set \$a = \"FIRST COMMAND\"" ".*"
+ mi_gdb_test "set \$b = \"TEST COMPLETE\"" ".*"
+
+ for { set i $start } { $i < $limit } { incr i } {
+
+ set cmd ""
+
+ # Create a command that is at least `i` characters long.
+ set first_cmd "-data-evaluate-expression \$a"
+ while { [string length $first_cmd] < $i } {
+ set first_cmd " $first_cmd"
+ }
+
+ # We reset `i`, our loop counter, here. When i is large this
+ # should be a nop as we attempt to make the first command
+ # length be i above. However, the first time around the loop
+ # we start with an i value of 1, however, we can't make a
+ # command that short, so, by resetting i here we effectively
+ # skip the first couple of loop iterations where i is less
+ # than the minimum command length.
+ set i [string length $first_cmd]
+ verbose -log "length of first command is $i"
+
+ set cmd "${first_cmd}\n-data-evaluate-expression \$b\n"
+
+ # We need to call send_gdb ourselves here as gdb_test_multiple
+ # will try to send each line of the command separately (breaking
+ # the command at newline characters). This splitting will more
+ # than likely mean that gdb will see and process the first command
+ # before the second command arrives, this prevents the bug from
+ # triggering.
+ send_gdb "$cmd"
+
+ # Now check for output from the two commands. We do this
+ # using two calls to gdb_test_multiple, this is because the
+ # echoing of the second command can sometime get mixed
+ # unexpectedly with the command output, this is especially
+ # likely when running using the read1 technique.
+ #
+ # When using a single gdb_test_multiple we need to anchor
+ # patterns using a ^, however, this requires us to consume and
+ # discard all lines that are not part of the output that we're
+ # looking for. However, due to the unpredictable
+ # intermingling, it's much easier if we drop the ^ anchor.
+ # However, with this gone dejagnu would sometimes match the
+ # second comand output before the first commands output.
+ #
+ # This approach just looks for the first command output, then,
+ # once that has been found, we start looking for the second
+ # command output, this seems pretty reliable.
+ set seen_first_message false
+ set seen_second_message false
+
+ gdb_test_multiple "" "look for first command output, command length $i" -prompt "$mi_gdb_prompt" {
+ -re "\\^done,value=\"\\\\\"FIRST COMMAND\\\\\"\"" {
+ set seen_first_message true
+ exp_continue
+ }
+ -re "\r\n$mi_gdb_prompt" {
+ gdb_assert $seen_first_message $gdb_test_name
+ }
+ }
+
+ gdb_test_multiple "" "look for second command output, command length $i" -prompt "$mi_gdb_prompt" {
+ -re "\\^done,value=\"\\\\\"TEST COMPLETE\\\\\"\"\r\n$mi_gdb_prompt" {
+ pass $gdb_test_name
+ set seen_second_message true
+ }
+ }
+
+ # If one of the above tests failed then lets no waste our time
+ # checking different command lengths. The actual bug this
+ # test checks for would result in a timeout, so we don't want
+ # to risk lots more timeouts.
+ if { ! [expr $seen_first_message && $seen_second_message ] } {
+ break
+ }
+ }
+}
+
+foreach_with_prefix args { "" "separate-mi-tty" } {
+ run_test $args
+}
diff --git a/gdb/testsuite/gdb.mi/mi-var-cmd.exp b/gdb/testsuite/gdb.mi/mi-var-cmd.exp
index a33b0c42e30..6c89c798ef1 100644
--- a/gdb/testsuite/gdb.mi/mi-var-cmd.exp
+++ b/gdb/testsuite/gdb.mi/mi-var-cmd.exp
@@ -596,7 +596,7 @@ set inline_tests {
# Needs to be last, following tests rely on this.
lappend inline_tests floating
-foreach inline_test $inline_tests {
+foreach_with_prefix inline_test $inline_tests {
if { [mi_run_inline_test $inline_test] < 0 } {
return -1
}
diff --git a/gdb/testsuite/gdb.mi/mi-var-cp.exp b/gdb/testsuite/gdb.mi/mi-var-cp.exp
index 38c5eb2dcb5..ba366daf2c3 100644
--- a/gdb/testsuite/gdb.mi/mi-var-cp.exp
+++ b/gdb/testsuite/gdb.mi/mi-var-cp.exp
@@ -46,7 +46,7 @@ set inline_tests {
path_expression
}
-foreach inline_test $inline_tests {
+foreach_with_prefix inline_test $inline_tests {
if { [mi_run_inline_test $inline_test] < 0 } {
return -1
}
diff --git a/gdb/testsuite/gdb.mi/mi-var-rtti.exp b/gdb/testsuite/gdb.mi/mi-var-rtti.exp
index 84b1a42bff2..0015d23a4be 100644
--- a/gdb/testsuite/gdb.mi/mi-var-rtti.exp
+++ b/gdb/testsuite/gdb.mi/mi-var-rtti.exp
@@ -119,7 +119,7 @@ set inline_tests {
skip_type_update_when_not_use_rtti
}
-foreach inline_test $inline_tests {
+foreach_with_prefix inline_test $inline_tests {
if { [mi_run_inline_test $inline_test] < 0 } {
return -1
}
diff --git a/gdb/testsuite/gdb.mi/user-selected-context-sync.exp b/gdb/testsuite/gdb.mi/user-selected-context-sync.exp
index e60d33a6d4c..9444ca5acf4 100644
--- a/gdb/testsuite/gdb.mi/user-selected-context-sync.exp
+++ b/gdb/testsuite/gdb.mi/user-selected-context-sync.exp
@@ -511,7 +511,7 @@ proc ensure_no_output { test } {
# current spawn_id) and pass/fail TEST accordingly.
# If RE is empty, ensure that the program did not output anything.
-proc match_re_or_ensure_not_output { re test } {
+proc match_re_or_ensure_no_output { re test } {
if { $re != "" } {
gdb_expect {
-re "$re" {
@@ -545,7 +545,7 @@ proc_with_prefix test_cli_inferior { mode } {
}
with_spawn_id $mi_spawn_id {
- match_re_or_ensure_not_output $mi_re "event on MI"
+ match_re_or_ensure_no_output $mi_re "event on MI"
}
# Do the 'inferior' command on the currently selected inferior. For now,
@@ -555,7 +555,7 @@ proc_with_prefix test_cli_inferior { mode } {
}
with_spawn_id $mi_spawn_id {
- match_re_or_ensure_not_output $mi_re "event on MI again"
+ match_re_or_ensure_no_output $mi_re "event on MI again"
}
}
@@ -581,7 +581,7 @@ proc_with_prefix test_cli_thread { mode } {
}
with_spawn_id $mi_spawn_id {
- match_re_or_ensure_not_output $mi_re "select thread, event on MI "
+ match_re_or_ensure_no_output $mi_re "select thread, event on MI "
}
# Do the 'thread' command to select the same thread. We shouldn't receive
@@ -594,7 +594,7 @@ proc_with_prefix test_cli_thread { mode } {
}
with_spawn_id $mi_spawn_id {
- match_re_or_ensure_not_output $mi_re "select thread, event on MI again"
+ match_re_or_ensure_no_output $mi_re "select thread, event on MI again"
}
# Try the 'thread' command without arguments.
@@ -607,7 +607,7 @@ proc_with_prefix test_cli_thread { mode } {
}
with_spawn_id $mi_spawn_id {
- match_re_or_ensure_not_output $mi_re "thread without args, event on MI"
+ match_re_or_ensure_no_output $mi_re "thread without args, event on MI"
}
}
@@ -628,7 +628,7 @@ proc_with_prefix test_cli_thread { mode } {
}
with_spawn_id $mi_spawn_id {
- match_re_or_ensure_not_output $mi_re "select thread, event on MI"
+ match_re_or_ensure_no_output $mi_re "select thread, event on MI"
}
# Do the 'thread' command to select the third thread again. Again, we
@@ -641,7 +641,7 @@ proc_with_prefix test_cli_thread { mode } {
}
with_spawn_id $mi_spawn_id {
- match_re_or_ensure_not_output $mi_re "select thread again, event on MI"
+ match_re_or_ensure_no_output $mi_re "select thread again, event on MI"
}
# Try the 'thread' command without arguments.
@@ -654,7 +654,7 @@ proc_with_prefix test_cli_thread { mode } {
}
with_spawn_id $mi_spawn_id {
- match_re_or_ensure_not_output $mi_re "thread without args, event on MI"
+ match_re_or_ensure_no_output $mi_re "thread without args, event on MI"
}
}
@@ -682,7 +682,7 @@ proc_with_prefix test_cli_frame { mode } {
}
with_spawn_id $mi_spawn_id {
- match_re_or_ensure_not_output $mi_re "select frame 1, event on MI"
+ match_re_or_ensure_no_output $mi_re "select frame 1, event on MI"
}
# Do the 'frame' command to select the same frame. This time we don't
@@ -695,7 +695,7 @@ proc_with_prefix test_cli_frame { mode } {
}
with_spawn_id $mi_spawn_id {
- match_re_or_ensure_not_output $mi_re "select frame 1 again, event on MI"
+ match_re_or_ensure_no_output $mi_re "select frame 1 again, event on MI"
}
# Do the 'frame' command without arguments. We shouldn't see anything on MI.
@@ -705,7 +705,7 @@ proc_with_prefix test_cli_frame { mode } {
}
with_spawn_id $mi_spawn_id {
- match_re_or_ensure_not_output $mi_re "frame without args, event on MI"
+ match_re_or_ensure_no_output $mi_re "frame without args, event on MI"
}
}
@@ -728,7 +728,7 @@ proc_with_prefix test_cli_frame { mode } {
}
with_spawn_id $mi_spawn_id {
- match_re_or_ensure_not_output $mi_re "select frame 1, event on MI"
+ match_re_or_ensure_no_output $mi_re "select frame 1, event on MI"
}
# Do the 'frame' command without arguments.
@@ -743,7 +743,7 @@ proc_with_prefix test_cli_frame { mode } {
}
with_spawn_id $mi_spawn_id {
- match_re_or_ensure_not_output $mi_re "frame without args, event on MI"
+ match_re_or_ensure_no_output $mi_re "frame without args, event on MI"
}
}
}
@@ -766,7 +766,7 @@ proc_with_prefix test_cli_select_frame { mode } {
}
with_spawn_id $mi_spawn_id {
- match_re_or_ensure_not_output $mi_re "select frame 1, event on MI"
+ match_re_or_ensure_no_output $mi_re "select frame 1, event on MI"
}
# Do the 'select-frame' command to select the same frame. This time we expect to
@@ -779,7 +779,7 @@ proc_with_prefix test_cli_select_frame { mode } {
}
with_spawn_id $mi_spawn_id {
- match_re_or_ensure_not_output $mi_re "select frame 1 again, event on MI"
+ match_re_or_ensure_no_output $mi_re "select frame 1 again, event on MI"
}
}
@@ -805,7 +805,7 @@ proc_with_prefix test_cli_select_frame { mode } {
}
with_spawn_id $mi_spawn_id {
- match_re_or_ensure_not_output $mi_re "select frame 1, event on MI"
+ match_re_or_ensure_no_output $mi_re "select frame 1, event on MI"
}
}
}
@@ -828,7 +828,7 @@ proc_with_prefix test_cli_up_down { mode } {
}
with_spawn_id $mi_spawn_id {
- match_re_or_ensure_not_output $mi_re "frame up, event on MI"
+ match_re_or_ensure_no_output $mi_re "frame up, event on MI"
}
# Try doing a 'down'.
@@ -841,7 +841,7 @@ proc_with_prefix test_cli_up_down { mode } {
}
with_spawn_id $mi_spawn_id {
- match_re_or_ensure_not_output $mi_re "frame down, event on MI"
+ match_re_or_ensure_no_output $mi_re "frame down, event on MI"
}
}
@@ -864,7 +864,7 @@ proc_with_prefix test_mi_thread_select { mode } {
}
with_spawn_id $gdb_main_spawn_id {
- match_re_or_ensure_not_output "$cli_re\r\n" "-thread-select, event on CLI"
+ match_re_or_ensure_no_output "$cli_re\r\n" "-thread-select, event on CLI"
}
# Do the '-thread-select' command to select the same thread. We
@@ -878,7 +878,7 @@ proc_with_prefix test_mi_thread_select { mode } {
}
with_spawn_id $gdb_main_spawn_id {
- match_re_or_ensure_not_output $cli_re "-thread-select again, event on CLI"
+ match_re_or_ensure_no_output $cli_re "-thread-select again, event on CLI"
}
}
@@ -899,7 +899,7 @@ proc_with_prefix test_mi_thread_select { mode } {
}
with_spawn_id $gdb_main_spawn_id {
- match_re_or_ensure_not_output "$cli_re\r\n" "-thread-select, event on CLI"
+ match_re_or_ensure_no_output "$cli_re\r\n" "-thread-select, event on CLI"
}
# Do the 'thread' command to select the third thread again. Again, we
@@ -912,13 +912,13 @@ proc_with_prefix test_mi_thread_select { mode } {
}
with_spawn_id $gdb_main_spawn_id {
- match_re_or_ensure_not_output $cli_re "-thread-select again, event on CLI"
+ match_re_or_ensure_no_output $cli_re "-thread-select again, event on CLI"
}
}
- with_test_prefix "thread 1.2 with --thread" {
+ with_test_prefix "thread 1.2 with --thread 2" {
# Test selecting a thread from MI with a --thread option. This test
- # verifies that even if the thread GDB would switch to is the same has
+ # verifies that even if the thread GDB would switch to is the same as
# the thread specified with --thread, an event is still sent to CLI.
# In this case this is thread 1.2
@@ -930,10 +930,28 @@ proc_with_prefix test_mi_thread_select { mode } {
}
with_spawn_id $gdb_main_spawn_id {
- # This doesn't work as of now, no event is sent on CLI. It is
- # commented out so we don't have to wait for the timeout every time.
- # match_re_or_ensure_not_output "$cli_re\r\n" "-thread-select, event on cli"
- kfail "gdb/20631" "thread-select, event on cli"
+ match_re_or_ensure_no_output "$cli_re\r\n" "-thread-select, event on cli"
+ }
+ }
+
+ with_test_prefix "thread 1.2 with --thread 3" {
+ # Test selecting a thread from MI with a --thread option.
+ # This test verifies that when different thread numbers are
+ # passed to the --thread option and the underlying
+ # -thread-select command, the correct thread is selected.
+ # In this case this is thread 1.2
+
+ reset_selection "1.1"
+
+ set mi_re [make_mi_re $mode 2 0 response]
+ set cli_re [make_cli_re $mode -1 1.2 0]
+
+ with_spawn_id $mi_spawn_id {
+ mi_gdb_test "-thread-select --thread 3 2" $mi_re "-thread-select"
+ }
+
+ with_spawn_id $gdb_main_spawn_id {
+ match_re_or_ensure_no_output "$cli_re\r\n" "-thread-select, event on cli"
}
}
@@ -959,7 +977,7 @@ proc_with_prefix test_mi_stack_select_frame { mode } {
}
with_spawn_id $gdb_main_spawn_id {
- match_re_or_ensure_not_output "$cli_re\r\n" "-stack-select-frame, event on MI"
+ match_re_or_ensure_no_output "$cli_re\r\n" "-stack-select-frame, event on CLI"
}
# Do the '-stack-select-frame' command to select the same frame. This time we don't
@@ -972,7 +990,37 @@ proc_with_prefix test_mi_stack_select_frame { mode } {
}
with_spawn_id $gdb_main_spawn_id {
- match_re_or_ensure_not_output $cli_re "-stack-select-frame again, event on MI"
+ match_re_or_ensure_no_output $cli_re "-stack-select-frame again, event on CLI"
+ }
+
+ # Now use the '-stack-select-frame' command with the --frame
+ # option, this verifies that even when the frame GDB would
+ # swith to is the same as the frame specified with --frame, an
+ # event is still sent to the CLI.
+
+ set cli_re [make_cli_re $mode -1 -1 0]
+
+ with_spawn_id $mi_spawn_id {
+ mi_gdb_test "-stack-select-frame --thread 2 --frame 0 0" $mi_re
+ }
+
+ with_spawn_id $gdb_main_spawn_id {
+ match_re_or_ensure_no_output "$cli_re\r\n" "-stack-select-frame with --frame 0, event on CLI"
+ }
+
+ # Now use the '-stack-select-frame' command with the --frame
+ # option, this verifies that the correct event is sent to the
+ # CLI when the frame specified with --frame is different to
+ # the actual frame selected.
+
+ set cli_re [make_cli_re $mode -1 -1 1]
+
+ with_spawn_id $mi_spawn_id {
+ mi_gdb_test "-stack-select-frame --thread 2 --frame 2 1" $mi_re
+ }
+
+ with_spawn_id $gdb_main_spawn_id {
+ match_re_or_ensure_no_output "$cli_re\r\n" "-stack-select-frame with --frame 2, event on CLI"
}
}
@@ -996,7 +1044,7 @@ proc_with_prefix test_mi_stack_select_frame { mode } {
}
with_spawn_id $gdb_main_spawn_id {
- match_re_or_ensure_not_output $cli_re "-stack-select-frame, event on MI"
+ match_re_or_ensure_no_output $cli_re "-stack-select-frame, event on CLI"
}
}
}
@@ -1029,7 +1077,7 @@ proc_with_prefix test_cli_in_mi_inferior { mode cli_in_mi_mode } {
}
with_spawn_id $gdb_main_spawn_id {
- match_re_or_ensure_not_output "$cli_re\r\n" "select inferior, event on CLI"
+ match_re_or_ensure_no_output "$cli_re\r\n" "select inferior, event on CLI"
}
# Do the 'inferior' command on the currently selected inferior. For now,
@@ -1039,7 +1087,7 @@ proc_with_prefix test_cli_in_mi_inferior { mode cli_in_mi_mode } {
}
with_spawn_id $gdb_main_spawn_id {
- match_re_or_ensure_not_output $cli_re "select inferior again, event on CLI"
+ match_re_or_ensure_no_output $cli_re "select inferior again, event on CLI"
}
}
@@ -1063,7 +1111,7 @@ proc_with_prefix test_cli_in_mi_thread { mode cli_in_mi_mode } {
}
with_spawn_id $gdb_main_spawn_id {
- match_re_or_ensure_not_output "$cli_re\r\n" "select thread, event on CLI"
+ match_re_or_ensure_no_output "$cli_re\r\n" "select thread, event on CLI"
}
# Do the 'thread' command to select the same thread. We shouldn't
@@ -1077,7 +1125,7 @@ proc_with_prefix test_cli_in_mi_thread { mode cli_in_mi_mode } {
}
with_spawn_id $gdb_main_spawn_id {
- match_re_or_ensure_not_output $cli_re "select thread again, event on CLI"
+ match_re_or_ensure_no_output $cli_re "select thread again, event on CLI"
}
# Try the 'thread' command without arguments.
@@ -1092,7 +1140,7 @@ proc_with_prefix test_cli_in_mi_thread { mode cli_in_mi_mode } {
}
with_spawn_id $gdb_main_spawn_id {
- match_re_or_ensure_not_output $cli_re "thread without args, event on CLI"
+ match_re_or_ensure_no_output $cli_re "thread without args, event on CLI"
}
}
@@ -1114,7 +1162,7 @@ proc_with_prefix test_cli_in_mi_thread { mode cli_in_mi_mode } {
}
with_spawn_id $gdb_main_spawn_id {
- match_re_or_ensure_not_output "$cli_re\r\n" "select thread, event on CLI"
+ match_re_or_ensure_no_output "$cli_re\r\n" "select thread, event on CLI"
}
# Do the 'thread' command to select the third thread again. Again, we
@@ -1132,7 +1180,7 @@ proc_with_prefix test_cli_in_mi_thread { mode cli_in_mi_mode } {
}
with_spawn_id $gdb_main_spawn_id {
- match_re_or_ensure_not_output $cli_re "select thread again, event on CLI"
+ match_re_or_ensure_no_output $cli_re "select thread again, event on CLI"
}
# Try the 'thread' command without arguments.
@@ -1147,7 +1195,7 @@ proc_with_prefix test_cli_in_mi_thread { mode cli_in_mi_mode } {
}
with_spawn_id $gdb_main_spawn_id {
- match_re_or_ensure_not_output $cli_re "thread without args, event on CLI"
+ match_re_or_ensure_no_output $cli_re "thread without args, event on CLI"
}
}
@@ -1176,7 +1224,7 @@ proc_with_prefix test_cli_in_mi_frame { mode cli_in_mi_mode } {
}
with_spawn_id $gdb_main_spawn_id {
- match_re_or_ensure_not_output "$cli_re\r\n" "select frame 1, event on CLI"
+ match_re_or_ensure_no_output "$cli_re\r\n" "select frame 1, event on CLI"
}
# Do the 'frame' command to select the same frame. This time we don't
@@ -1190,7 +1238,7 @@ proc_with_prefix test_cli_in_mi_frame { mode cli_in_mi_mode } {
}
with_spawn_id $gdb_main_spawn_id {
- match_re_or_ensure_not_output $cli_re "select frame 1 again, event on CLI"
+ match_re_or_ensure_no_output $cli_re "select frame 1 again, event on CLI"
}
# Do the 'frame' command without arguments. We shouldn't see anything on MI.
@@ -1203,7 +1251,7 @@ proc_with_prefix test_cli_in_mi_frame { mode cli_in_mi_mode } {
}
with_spawn_id $gdb_main_spawn_id {
- match_re_or_ensure_not_output $cli_re "frame without args, event on CLI"
+ match_re_or_ensure_no_output $cli_re "frame without args, event on CLI"
}
}
@@ -1228,7 +1276,7 @@ proc_with_prefix test_cli_in_mi_frame { mode cli_in_mi_mode } {
}
with_spawn_id $gdb_main_spawn_id {
- match_re_or_ensure_not_output $cli_re "select frame 1, event on CLI"
+ match_re_or_ensure_no_output $cli_re "select frame 1, event on CLI"
}
# Do the 'frame' command without arguments.
@@ -1246,7 +1294,7 @@ proc_with_prefix test_cli_in_mi_frame { mode cli_in_mi_mode } {
}
with_spawn_id $gdb_main_spawn_id {
- match_re_or_ensure_not_output $cli_re "frame without args, event on CLI"
+ match_re_or_ensure_no_output $cli_re "frame without args, event on CLI"
}
}
}
diff --git a/gdb/testsuite/gdb.multi/attach-no-multi-process.c b/gdb/testsuite/gdb.multi/attach-no-multi-process.c
new file mode 100644
index 00000000000..cdcc2afc7b0
--- /dev/null
+++ b/gdb/testsuite/gdb.multi/attach-no-multi-process.c
@@ -0,0 +1,34 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+ Copyright 2020-2022 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+/* This program is intended to be started outside of GDB, and then
+ attached to by GDB. */
+
+#include <unistd.h>
+
+int
+main ()
+{
+ /* Don't run forever in case GDB crashes and DejaGNU fails to kill
+ this program. */
+ alarm (10);
+
+ while (1)
+ usleep (1);
+
+ return 0;
+}
diff --git a/gdb/testsuite/gdb.multi/attach-no-multi-process.exp b/gdb/testsuite/gdb.multi/attach-no-multi-process.exp
new file mode 100644
index 00000000000..66b210f882c
--- /dev/null
+++ b/gdb/testsuite/gdb.multi/attach-no-multi-process.exp
@@ -0,0 +1,91 @@
+# This testcase is part of GDB, the GNU debugger.
+
+# Copyright 2020-2022 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Test attaching to a process, as a second inferior, through a
+# gdbserver that does not support multi-process extensions.
+
+load_lib gdbserver-support.exp
+
+standard_testfile
+
+if {![can_spawn_for_attach]} {
+ return
+}
+
+if {[build_executable "build" $testfile $srcfile {debug}] == -1} {
+ return -1
+}
+
+proc test {target_non_stop} {
+ global binfile
+ global gdb_prompt
+
+ save_vars { ::GDBFLAGS } {
+ # If GDB and GDBserver are both running locally, set the sysroot to avoid
+ # reading files via the remote protocol.
+ if { ![is_remote host] && ![is_remote target] } {
+ set ::GDBFLAGS "${::GDBFLAGS} -ex \"set sysroot\""
+ }
+ set ::GDBFLAGS \
+ "${::GDBFLAGS} -ex \"set remote multiprocess-feature-packet off\""
+ set ::GDBFLAGS \
+ "${::GDBFLAGS} -ex \"maint set target-non-stop ${target_non_stop}\""
+ clean_restart ${binfile}
+ }
+
+ # Start the first inferior.
+ if {![runto_main]} {
+ return
+ }
+
+ # The second inferior is an extended remote.
+ gdb_test "add-inferior -no-connection" "Added inferior 2.*" \
+ "add the second inferior"
+ gdb_test "inferior 2" ".*Switching to inferior 2.*" \
+ "switch to inferior 2"
+ set res [gdbserver_start "--multi" ""]
+ set gdbserver_gdbport [lindex $res 1]
+ gdb_target_cmd "extended-remote" $gdbserver_gdbport
+
+ # Start a program, then attach to it.
+ set spawn_id_list [spawn_wait_for_attach [list $binfile]]
+ set test_spawn_id [lindex $spawn_id_list 0]
+ set testpid [spawn_id_get_pid $test_spawn_id]
+ gdb_test_multiple "attach $testpid" "attach to the program via remote" {
+ -re "Attaching to Remote target.*\[\r\n\]+$gdb_prompt " {
+ pass $gdb_test_name
+ }
+ }
+
+ # Check that we have two threads. Bad GDB duplicated the
+ # thread coming from the remote when target-non-stop is off;
+ # or hanged during attach when target-non-stop is on.
+ gdb_test "info threads" \
+ [multi_line \
+ " Id\[^\r\n\]+" \
+ " 1\.1\[^\r\n\]+" \
+ ". 2\.1\[^\r\n\]+"
+ ]
+
+ # Clean the spawned process and gdbserver.
+ gdbserver_exit 0
+ kill_wait_spawned_process $test_spawn_id
+}
+
+foreach_with_prefix target_non_stop {off on} {
+ test $target_non_stop
+}
diff --git a/gdb/testsuite/gdb.multi/multi-target-info-inferiors.exp b/gdb/testsuite/gdb.multi/multi-target-info-inferiors.exp
index bb4efa11ae4..8b0c6c91a2a 100644
--- a/gdb/testsuite/gdb.multi/multi-target-info-inferiors.exp
+++ b/gdb/testsuite/gdb.multi/multi-target-info-inferiors.exp
@@ -89,9 +89,9 @@ proc test_info_inferiors {multi_process} {
[multi_line \
"Num${ws}What${ws}Description${ws}" \
"[connection_num 1 $inf]${ws}native${ws}Native process${ws}" \
- "[connection_num 2 $inf]${ws}extended-remote localhost:$decimal${ws}Extended remote serial target in gdb-specific protocol${ws}" \
+ "[connection_num 2 $inf]${ws}extended-remote localhost:$decimal${ws}Extended remote target using gdb-specific protocol${ws}" \
"[connection_num 3 $inf]${ws}core${ws}Local core dump file${ws}" \
- "[connection_num 4 $inf]${ws}extended-remote localhost:$decimal${ws}Extended remote serial target in gdb-specific protocol${ws}" \
+ "[connection_num 4 $inf]${ws}extended-remote localhost:$decimal${ws}Extended remote target using gdb-specific protocol${ws}" \
"[connection_num 5 $inf]${ws}core${ws}Local core dump file${ws}" \
]
@@ -100,9 +100,9 @@ proc test_info_inferiors {multi_process} {
[multi_line \
"Num${ws}What${ws}Description" \
"[connection_num 1 $inf]${ws}native${ws}Native process" \
- "[connection_num 2 $inf]${ws}extended-remote localhost:$decimal${ws}Extended remote serial target in gdb-specific protocol" \
+ "[connection_num 2 $inf]${ws}extended-remote localhost:$decimal${ws}Extended remote target using gdb-specific protocol" \
"[connection_num 3 $inf]${ws}core${ws}Local core dump file" \
- "[connection_num 4 $inf]${ws}extended-remote localhost:$decimal${ws}Extended remote serial target in gdb-specific protocol" \
+ "[connection_num 4 $inf]${ws}extended-remote localhost:$decimal${ws}Extended remote target using gdb-specific protocol" \
"[connection_num 5 $inf]${ws}core${ws}Local core dump file" \
]
}
diff --git a/gdb/testsuite/gdb.python/py-arch.exp b/gdb/testsuite/gdb.python/py-arch.exp
index b55778b0b72..58f6cb06b3e 100644
--- a/gdb/testsuite/gdb.python/py-arch.exp
+++ b/gdb/testsuite/gdb.python/py-arch.exp
@@ -64,12 +64,25 @@ if { ![is_address_zero_readable] } {
}
foreach size {0 1 2 3 4 8 16} {
- foreach sign {"" ", True" ", False" ", None" ", \"blah\""} {
+ foreach sign_data {{"" True} \
+ {", True" True} \
+ {", False" False} \
+ {", None" False} \
+ {", \"blah\"" True}} {
+ set sign [lindex $sign_data 0]
+ # GDB's 0 bit type is always signed.
+ if { $size == 0 } {
+ set sign_result True
+ } else {
+ set sign_result [lindex $sign_data 1]
+ }
set fullsize [expr 8 * $size]
gdb_test_no_output "python t = arch.integer_type($fullsize$sign)" \
"get integer type for $size$sign"
gdb_test "python print(t.sizeof)" "$size" \
"print size of integer type for $size$sign"
+ gdb_test "python print(t.is_signed == ${sign_result})" "True" \
+ "check signedness of type for $size$sign"
}
}
diff --git a/gdb/testsuite/gdb.python/py-charset.exp b/gdb/testsuite/gdb.python/py-charset.exp
new file mode 100644
index 00000000000..e4af0e5b56f
--- /dev/null
+++ b/gdb/testsuite/gdb.python/py-charset.exp
@@ -0,0 +1,50 @@
+# Copyright 2022 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+load_lib gdb-python.exp
+
+gdb_exit
+gdb_start
+
+# Skip all tests if Python scripting is not enabled.
+if { [skip_python_tests] } { continue }
+
+# Each test data has 4 parts:
+# 1. The string used in 'show XXX-charset' command,
+# 2. The string expected in the output of the command used in #1,
+# 3. The string used is gdb.XXXX_charset() python function call,
+# 4. A string that is a regexp appended to the result of #1, used to
+# match the output of #3
+foreach test_data { {host host host ""} \
+ {target target target ""} \
+ {target-wide "target wide" \
+ "target_wide" "(LE|BE)?"} } {
+ with_test_prefix "charset=[lindex $test_data 0]" {
+ set charset "unknown"
+ gdb_test_multiple "show [lindex $test_data 0]-charset" "" {
+ -re "The [lindex $test_data 1] character set is \"auto; currently (\[^\"\]*)\".*$gdb_prompt $" {
+ set charset $expect_out(1,string)
+ pass $gdb_test_name
+ }
+ -re "The [lindex $test_data 1] character set is \"(\[^\"\]*)\".*$gdb_prompt $" {
+ set charset $expect_out(1,string)
+ pass $gdb_test_name
+ }
+ }
+ set charset "${charset}[lindex $test_data 3]"
+ gdb_test "python print(gdb.[lindex $test_data 2]_charset())" \
+ "${charset}"
+ }
+}
diff --git a/gdb/testsuite/gdb.python/py-events.exp b/gdb/testsuite/gdb.python/py-events.exp
index 4df012b943b..2fdd2160a44 100644
--- a/gdb/testsuite/gdb.python/py-events.exp
+++ b/gdb/testsuite/gdb.python/py-events.exp
@@ -81,12 +81,17 @@ delete_breakpoints
# Test inferior call events
-gdb_test_multiple "info threads" "get current thread" {
- -re -wrap "process ($decimal)\[^\n\r\]*do_nothing.*" {
+set process_id "invalid"
+gdb_test_multiple "thread" "get current thread" {
+ -re -wrap "process ($decimal).*" {
set process_id $expect_out(1,string)
pass $gdb_test_name
}
- -re -wrap "Thread $hex \\(LWP ($decimal)\\)\[^\n\r\]*do_nothing.*" {
+ -re -wrap "Thread $hex \\(LWP ($decimal)\\).*" {
+ set process_id $expect_out(1,string)
+ pass $gdb_test_name
+ }
+ -re -wrap "Thread $decimal\.($decimal).*" {
set process_id $expect_out(1,string)
pass $gdb_test_name
}
diff --git a/gdb/testsuite/gdb.python/py-format-address.c b/gdb/testsuite/gdb.python/py-format-address.c
new file mode 100644
index 00000000000..6493fc4d579
--- /dev/null
+++ b/gdb/testsuite/gdb.python/py-format-address.c
@@ -0,0 +1,32 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+ Copyright 2022 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+/* This test is compiled multiple times with FUNCTION_NAME defined to
+ different strings, this means we should (hopefully) get the same code
+ layout in memory, but with different strings for the function name. */
+
+int
+FUNCTION_NAME (void)
+{
+ return 0;
+}
+
+int
+main (void)
+{
+ return FUNCTION_NAME ();
+}
diff --git a/gdb/testsuite/gdb.python/py-format-address.exp b/gdb/testsuite/gdb.python/py-format-address.exp
new file mode 100644
index 00000000000..bbfe658c0bb
--- /dev/null
+++ b/gdb/testsuite/gdb.python/py-format-address.exp
@@ -0,0 +1,178 @@
+# Copyright 2022 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+load_lib gdb-python.exp
+standard_testfile
+
+foreach func_name { foo bar } {
+ if {[build_executable "build binary with ${func_name} function" \
+ "$testfile-${func_name}" $srcfile \
+ [list debug \
+ nopie \
+ additional_flags=-DFUNCTION_NAME=${func_name}]] == -1} {
+ return -1
+ }
+}
+
+set binary_foo [standard_output_file "${testfile}-foo"]
+set binary_bar [standard_output_file "${testfile}-bar"]
+
+clean_restart $binary_foo
+
+# Skip all tests if Python scripting is not enabled.
+if { [skip_python_tests] } { continue }
+
+if ![runto_main] {
+ return -1
+}
+
+# Check the gdb.format_address method when using the default values
+# for the program space and architecture (these will be selected based
+# on the current inferior).
+set main_addr [get_hexadecimal_valueof "&main" "UNKNOWN"]
+set next_addr [format 0x%x [expr $main_addr + 1]]
+
+foreach_with_prefix symbol_filename { on off } {
+ gdb_test_no_output "set print symbol-filename ${symbol_filename}"
+
+ if { $symbol_filename == "on" } {
+ set filename_pattern " at \[^\r\n\]+/${srcfile}:$decimal"
+ } else {
+ set filename_pattern ""
+ }
+
+ gdb_test "python print(\"Got: \" + gdb.format_address($main_addr))" \
+ "Got: $main_addr <main${filename_pattern}>" \
+ "gdb.format_address, result should have no offset"
+
+ gdb_test "python print(\"Got: \" + gdb.format_address($next_addr))" \
+ "Got: $next_addr <main\\+1${filename_pattern}>" \
+ "gdb.format_address, result should have an offset"
+}
+
+if {![is_address_zero_readable]} {
+ gdb_test "python print(\"Got: \" + gdb.format_address(0))" \
+ "Got: 0x0" \
+ "gdb.format_address for address 0"
+}
+
+# Now check that gdb.format_address will accept the program space and
+# architecture arguments correctly.
+gdb_test_no_output "python inf = gdb.selected_inferior()"
+
+# First, pass both arguments, this should be fine.
+gdb_test "python print(\"Got: \" + gdb.format_address($main_addr, inf.progspace, inf.architecture()))" \
+ "Got: $main_addr <main>" \
+ "gdb.format_address passing program space and architecture"
+
+# Now pass the program space and architecture as None.
+# First, pass both arguments, this should be fine.
+gdb_test "python print(\"Got: \" + gdb.format_address($main_addr, None, None))" \
+ "Got: $main_addr <main>" \
+ "gdb.format_address passing program space and architecture as None"
+
+# Now forget the architecture, this should fail.
+gdb_test "python print(\"Got: \" + gdb.format_address($main_addr, inf.progspace))" \
+ [multi_line \
+ "ValueError: The architecture and progspace arguments must both be supplied" \
+ "Error while executing Python code\\."] \
+ "gdb.format_address passing program space only"
+
+gdb_test "python print(\"Got: \" + gdb.format_address($main_addr, inf.progspace, None))" \
+ [multi_line \
+ "ValueError: The architecture and progspace arguments must both be supplied" \
+ "Error while executing Python code\\."] \
+ "gdb.format_address passing real program space, but architecture is None"
+
+# Now skip the program space argument.
+gdb_test "python print(\"Got: \" + gdb.format_address($main_addr, architecture=inf.architecture()))" \
+ [multi_line \
+ "ValueError: The architecture and progspace arguments must both be supplied" \
+ "Error while executing Python code\\."] \
+ "gdb.format_address passing architecture only"
+
+gdb_test "python print(\"Got: \" + gdb.format_address($main_addr, None, inf.architecture()))" \
+ [multi_line \
+ "ValueError: The architecture and progspace arguments must both be supplied" \
+ "Error while executing Python code\\."] \
+ "gdb.format_address passing real architecture, but progspace is None"
+
+# Now, before we add a second inferior, lets just check we can format
+# the address of 'foo' correctly.
+set foo_addr [get_hexadecimal_valueof "&foo" "UNKNOWN"]
+
+gdb_test "python print(\"Got: \" + gdb.format_address($foo_addr, inf.progspace, inf.architecture()))" \
+ "Got: $foo_addr <foo>" \
+ "gdb.format_address for foo, with just one inferior"
+
+# Now lets add a second inferior, using a slightly different
+# executable, select that inferior, and capture a reference to the
+# inferior in a Python object.
+gdb_test "add-inferior -exec ${binary_bar}" ".*" \
+ "add a second inferior running the bar executable"
+gdb_test "inferior 2" ".*"
+gdb_test_no_output "python inf2 = gdb.selected_inferior()"
+
+# Now we can test formatting an address from inferior 1.
+gdb_test "python print(\"Got: \" + gdb.format_address($foo_addr, inf.progspace, inf.architecture()))" \
+ "Got: $foo_addr <foo>" \
+ "gdb.format_address for foo, while inferior 2 is selected"
+
+# Grab the address of 'bar'. Hopefully this will be the same address
+# as 'foo', but if not, that's not the end of the world, the test just
+# wont be quite as tough.
+set bar_addr [get_hexadecimal_valueof "&bar" "UNKNOWN"]
+
+# Now format the address of bar using the default inferior and
+# architecture, this should display the 'bar' symbol rather than
+# 'foo'.
+gdb_test "python print(\"Got: \" + gdb.format_address($bar_addr))" \
+ "Got: $bar_addr <bar>" \
+ "gdb.format_address for bar, while inferior 2 is selected"
+
+# And again, but this time, specificy the program space and
+# architecture.
+gdb_test "python print(\"Got: \" + gdb.format_address($bar_addr, inf2.progspace, inf2.architecture()))" \
+ "Got: $bar_addr <bar>" \
+ "gdb.format_address for bar, while inferior 2 is selected, pass progspace and architecture"
+
+# Reselect inferior 1, and then format an address from inferior 2.
+gdb_test "inferior 1" ".*"
+gdb_test "python print(\"Got: \" + gdb.format_address($bar_addr, inf2.progspace, inf2.architecture()))" \
+ "Got: $bar_addr <bar>" \
+ "gdb.format_address for bar, while inferior 1 is selected, pass progspace and architecture"
+
+# Try pasing incorrect object types for program space and architecture.
+gdb_test "python print(\"Got: \" + gdb.format_address($bar_addr, inf2.progspace, inf2.progspace))" \
+ [multi_line \
+ "TypeError: The architecture argument is not a gdb.Architecture object" \
+ "Error while executing Python code\\."] \
+ "gdb.format_address pass wrong object type for architecture"
+
+gdb_test "python print(\"Got: \" + gdb.format_address($bar_addr, inf2.architecture(), inf2.architecture()))" \
+ [multi_line \
+ "TypeError: The progspace argument is not a gdb.Progspace object" \
+ "Error while executing Python code\\."] \
+ "gdb.format_address pass wrong object type for progspace"
+
+# Now invalidate inferior 2's program space, and try using that.
+gdb_test "python pspace = inf2.progspace"
+gdb_test "python arch = inf2.architecture()"
+gdb_test "remove-inferior 2"
+gdb_test "python print(\"Got: \" + gdb.format_address($bar_addr, pspace, arch))" \
+ [multi_line \
+ "ValueError: The progspace argument is not valid" \
+ "Error while executing Python code\\."] \
+ "gdb.format_address called with an invalid program space"
diff --git a/gdb/testsuite/gdb.python/py-format-string.exp b/gdb/testsuite/gdb.python/py-format-string.exp
index 4c78bed1203..63b87e73476 100644
--- a/gdb/testsuite/gdb.python/py-format-string.exp
+++ b/gdb/testsuite/gdb.python/py-format-string.exp
@@ -898,6 +898,43 @@ proc_with_prefix test_format {} {
}
}
+ # Binary.
+ set opts "format='t'"
+ with_test_prefix $opts {
+ set binary_pointer_regexp "\[0-1\]+"
+ gdb_test "python print (gdb.Value (42).format_string (${opts}))" \
+ "101010" \
+ "42 with option ${opts}"
+
+ check_format_string "a_point_t" $opts
+ check_format_string "a_point_t_pointer" $opts \
+ $binary_pointer_regexp
+ check_format_string "another_point" $opts
+ check_format_string "a_struct_with_union" $opts \
+ "\\{the_union = \\{an_int = 101010001010100010101000101010, a_char = 101010\\}\\}"
+ check_format_string "an_enum" $opts \
+ "1"
+ check_format_string "a_string" $opts \
+ $binary_pointer_regexp
+ check_format_string "a_binary_string" $opts \
+ $binary_pointer_regexp
+ check_format_string "a_binary_string_array" $opts \
+ "\\{1101000, 1100101, 1101100, 1101100, 1101111, 0, 1110111, 1101111, 1110010, 1101100, 1100100, 0\\}"
+ check_format_string "a_big_string" $opts \
+ "\\{1000001, 1000010, 1000011, 1000100, 1000101, \[, 0-1\]+\.\.\.\\}"
+ check_format_string "an_array" $opts \
+ "\\{10, 11, 101\\}"
+ check_format_string "an_array_with_repetition" $opts \
+ "\\{1, 11 <repeats 12 times>, 101, 101, 101\\}"
+ check_format_string "a_symbol_pointer" $opts \
+ $binary_pointer_regexp
+
+ if { $current_lang == "c++" } {
+ check_format_string "a_point_t_ref" $opts
+ check_format_string "a_base_ref" $opts
+ }
+ }
+
# Decimal.
set opts "format='d'"
with_test_prefix $opts {
@@ -991,6 +1028,13 @@ proc_with_prefix test_invalid_args {} {
"ValueError: a single character is required.*"
}
+# Check the styling argument to format_string. This function needs to
+# be called with TERM set such that styling can be applied.
+proc test_styling {} {
+ gdb_test "python print(gdb.parse_and_eval(\"a_point_t\").format_string(styling=True, raw=True))" \
+ "{[style x variable] = 42, [style y variable] = 12}"
+}
+
# Run all the tests in common for both C and C++.
proc_with_prefix test_all_common {} {
# No options.
@@ -1023,9 +1067,16 @@ with_test_prefix "format_string" {
# Perform C Tests.
if { [build_inferior "${binfile}" "c"] == 0 } {
with_test_prefix "lang_c" {
- set current_lang "c"
- prepare_gdb "${binfile}"
- test_all_common
+ save_vars { env(TERM) } {
+ # We run all of these tests in an environment where styling
+ # could work, but we only expect the final call to
+ # test_styling to actually produce any styled output.
+ setenv TERM ansi
+ set current_lang "c"
+ prepare_gdb "${binfile}"
+ test_all_common
+ test_styling
+ }
}
}
diff --git a/gdb/testsuite/gdb.python/py-framefilter-mi.exp b/gdb/testsuite/gdb.python/py-framefilter-mi.exp
index 39431a301e1..08f9e17e9f9 100644
--- a/gdb/testsuite/gdb.python/py-framefilter-mi.exp
+++ b/gdb/testsuite/gdb.python/py-framefilter-mi.exp
@@ -50,7 +50,7 @@ mi_gdb_test "source ${remote_python_file}" ".*\\^done." "load python file"
# Multiple blocks test
mi_continue_to_line [gdb_get_line_number {Inner test breakpoint} ${srcfile}] \
- "step to breakpoint"
+ "step to first breakpoint"
mi_gdb_test "-stack-list-locals --all-values" \
"\\^done,locals=\\\[{name=\"h\",value=\"9\"},{name=\"f\",value=\"42\"},{name=\"g\",value=\"19\"},{name=\"bar\",value=\"$hex \\\\\"Inside block x2\\\\\"\"},{name=\"d\",value=\"15\"},{name=\"e\",value=\"14\"},{name=\"foo\",value=\"$hex \\\\\"Inside block\\\\\"\"},{name=\"str\",value=\"$hex \\\\\"The End\\\\\"\"},{name=\"st2\",value=\"$hex \\\\\"Is Near\\\\\"\"},{name=\"b\",value=\"12\"},{name=\"c\",value=\"5\"}\\\]" \
@@ -62,7 +62,7 @@ mi_gdb_test "-stack-list-locals --all-values" \
"stack-list-locals --all-values frame filters enabled"
mi_continue_to_line [gdb_get_line_number {Backtrace end breakpoint} ${srcfile}] \
- "step to breakpoint"
+ "step to second breakpoint"
set any "\[^\"\]+"
diff --git a/gdb/testsuite/gdb.python/py-inferior.exp b/gdb/testsuite/gdb.python/py-inferior.exp
index 5b5f58243e4..552f9b17f4d 100644
--- a/gdb/testsuite/gdb.python/py-inferior.exp
+++ b/gdb/testsuite/gdb.python/py-inferior.exp
@@ -77,11 +77,7 @@ gdb_py_test_silent_cmd "python addr = gdb.selected_frame ().read_var ('str')" \
"read str address" 0
gdb_py_test_silent_cmd "python str = gdb.inferiors()\[0\].read_memory (addr, 5); print(str)" \
"read str contents" 1
-if { $gdb_py_is_py3k == 0 } {
- gdb_py_test_silent_cmd "python a = 'a'" "" 0
-} else {
- gdb_py_test_silent_cmd "python a = bytes('a', 'ascii')" "" 0
-}
+gdb_py_test_silent_cmd "python a = bytes('a', 'ascii')" "" 0
gdb_py_test_silent_cmd "python str\[1\] = a" "change str" 0
gdb_py_test_silent_cmd "python gdb.inferiors()\[0\].write_memory (addr, str)" \
"write str" 1
@@ -220,6 +216,7 @@ with_test_prefix "is_valid" {
gdb_test "python print (inf_list\[0\].is_valid())" "True" \
"check inferior validity 1"
+ # The "dummy" line below used to cause a gdb crash.
gdb_test_multiline "install new inferior event handler" \
"python" "" \
"my_inferior_count = 1" "" \
@@ -227,6 +224,7 @@ with_test_prefix "is_valid" {
" global my_inferior_count" "" \
" if evt.inferior is not None:" "" \
" my_inferior_count = my_inferior_count + 1" "" \
+ " dummy = gdb.Value(True)" "" \
"gdb.events.new_inferior.connect(new_inf_handler)" "" \
"end" ""
gdb_test_multiline "install inferior deleted event handler" \
diff --git a/gdb/testsuite/gdb.python/py-infthread.exp b/gdb/testsuite/gdb.python/py-infthread.exp
index 5cbbe43c44c..a7754198e60 100644
--- a/gdb/testsuite/gdb.python/py-infthread.exp
+++ b/gdb/testsuite/gdb.python/py-infthread.exp
@@ -77,6 +77,11 @@ gdb_py_test_silent_cmd "python gdb.selected_thread().name = None" \
gdb_test "python print (gdb.selected_thread().name == name)" "True" \
"check name of current thread again"
+gdb_test_no_output "python details = gdb.selected_thread().details" \
+ "record the thread details string"
+gdb_test "python print(details is None or isinstance(details, str))" "True" \
+ "check that the details has an acceptable type"
+
gdb_test "python print ('result = %s' % t0.is_stopped ())" " = True" "test InferiorThread.is_stopped"
gdb_test "python print ('result = %s' % t0.is_running ())" " = False" "test InferiorThread.is_running"
gdb_test "python print ('result = %s' % t0.is_exited ())" " = False" "test InferiorThread.is_exited"
diff --git a/gdb/testsuite/gdb.python/py-lookup-type.exp b/gdb/testsuite/gdb.python/py-lookup-type.exp
index 52a1dae20ed..596ab9a9af8 100644
--- a/gdb/testsuite/gdb.python/py-lookup-type.exp
+++ b/gdb/testsuite/gdb.python/py-lookup-type.exp
@@ -54,3 +54,29 @@ test_lookup_type "opencl" "ushort"
test_lookup_type "objective-c" "char"
test_lookup_type "pascal" "char"
+
+gdb_test "show language" \
+ "The current source language is .pascal.." \
+ "show language before 'with'"
+gdb_test_multiline "look up type using set_parameter" \
+ "python" "" \
+ "with gdb.with_parameter('language', 'ada'):" "" \
+ " print(gdb.lookup_type('character'))" "" \
+ "end" "character"
+gdb_test "show language" \
+ "The current source language is .pascal.." \
+ "show language after 'with'"
+
+
+# Ensure that the language can be changed from within Python and still
+# affect the results.
+gdb_test_multiline "look up ada type from another language" \
+ "python" "" \
+ "gdb.execute('set language ada')" "" \
+ "print(gdb.lookup_type('character'))" "" \
+ "end" "character"
+
+gdb_test_no_output "python gdb.set_parameter('language', 'rust')"
+gdb_test "show language" \
+ "The current source language is .rust.." \
+ "show language after 'set_parameter'"
diff --git a/gdb/testsuite/gdb.python/py-mi-cmd.exp b/gdb/testsuite/gdb.python/py-mi-cmd.exp
new file mode 100644
index 00000000000..300ab956892
--- /dev/null
+++ b/gdb/testsuite/gdb.python/py-mi-cmd.exp
@@ -0,0 +1,339 @@
+# Copyright (C) 2019-2022 Free Software Foundation, Inc.
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Test custom MI commands implemented in Python.
+
+load_lib gdb-python.exp
+load_lib mi-support.exp
+set MIFLAGS "-i=mi"
+
+gdb_exit
+if {[mi_gdb_start]} {
+ continue
+}
+
+if {[lsearch -exact [mi_get_features] python] < 0} {
+ unsupported "python support is disabled"
+ return -1
+}
+
+standard_testfile
+
+mi_gdb_test "set python print-stack full" \
+ ".*\\^done" \
+ "set python print-stack full"
+
+mi_gdb_test "source ${srcdir}/${subdir}/${testfile}.py" \
+ ".*\\^done" \
+ "load python file"
+
+mi_gdb_test "python pycmd1('-pycmd')" \
+ ".*\\^done" \
+ "define -pycmd MI command"
+
+mi_gdb_test "-pycmd int" \
+ "\\^done,result=\"42\"" \
+ "-pycmd int"
+
+mi_gdb_test "-pycmd str" \
+ "\\^done,result=\"Hello world!\"" \
+ "-pycmd str"
+
+mi_gdb_test "-pycmd ary" \
+ "\\^done,result=\\\[\"Hello\",\"42\"\\\]" \
+ "-pycmd ary"
+
+mi_gdb_test "-pycmd dct" \
+ "\\^done,result={hello=\"world\",times=\"42\"}" \
+ "-pycmd dct"
+
+mi_gdb_test "-pycmd bk1" \
+ "\\^error,msg=\"Error occurred in Python: non-string object used as key: Bad Key\"" \
+ "-pycmd bk1"
+
+mi_gdb_test "-pycmd bk2" \
+ "\\^error,msg=\"Error occurred in Python: non-string object used as key: 1\"" \
+ "-pycmd bk2"
+
+mi_gdb_test "-pycmd bk3" \
+ [multi_line \
+ "&\"TypeError: __repr__ returned non-string \\(type BadKey\\)..\"" \
+ "\\^error,msg=\"Error occurred in Python: __repr__ returned non-string \\(type BadKey\\)\""] \
+ "-pycmd bk3"
+
+mi_gdb_test "-pycmd tpl" \
+ "\\^done,result=\\\[\"42\",\"Hello\"\\\]" \
+ "-pycmd tpl"
+
+mi_gdb_test "-pycmd itr" \
+ "\\^done,result=\\\[\"1\",\"2\",\"3\"\\\]" \
+ "-pycmd itr"
+
+mi_gdb_test "-pycmd nn1" \
+ "\\^done" \
+ "-pycmd nn1"
+
+mi_gdb_test "-pycmd nn2" \
+ "\\^done,result=\\\[\"None\"\\\]" \
+ "-pycmd nn2"
+
+mi_gdb_test "-pycmd bogus" \
+ "\\^error,msg=\"Invalid parameter: bogus\"" \
+ "-pycmd bogus"
+
+# Check that the top-level result from 'invoke' must be a dictionary.
+foreach test_name { nd1 nd2 nd3 } {
+ mi_gdb_test "-pycmd ${test_name}" \
+ "\\^error,msg=\"Error occurred in Python: Result from invoke must be a dictionary\""
+}
+
+# Check for invalid strings in the result.
+foreach test_desc { {ik1 "xxx yyy"} {ik2 "xxx yyy"} {ik3 "xxx\\+yyy"} \
+ {ik4 "xxx\\.yyy"} {ik5 "123xxxyyy"} } {
+ lassign $test_desc name pattern
+
+ mi_gdb_test "-pycmd ${name}" \
+ "\\^error,msg=\"Error occurred in Python: Invalid key in MI result: ${pattern}\""
+}
+
+mi_gdb_test "-pycmd empty_key" \
+ "\\^error,msg=\"Error occurred in Python: Invalid empty key in MI result\""
+
+# Check that a dash ('-') can be used in a key name.
+mi_gdb_test "-pycmd dash-key" \
+ "\\^done,the-key=\"123\""
+
+# With this argument the command raises a gdb.GdbError with no message
+# string. GDB considers this a bug in the user program, so prints a
+# backtrace, and a generic error message.
+mi_gdb_test "-pycmd exp" \
+ [multi_line ".*&\"Traceback \\(most recent call last\\):..\"" \
+ "&\"\[^\r\n\]+${testfile}.py\[^\r\n\]+\"" \
+ "&\"\[^\r\n\]+raise gdb.GdbError\\(\\)..\"" \
+ "&\"gdb.GdbError..\"" \
+ "\\^error,msg=\"Error occurred in Python\\.\""] \
+ "-pycmd exp"
+
+mi_gdb_test "python pycmd2('-pycmd')" \
+ ".*\\^done" \
+ "redefine -pycmd MI command from CLI command"
+
+mi_gdb_test "-pycmd str" \
+ "\\^done,result=\"Ciao!\"" \
+ "-pycmd str - redefined from CLI"
+
+mi_gdb_test "-pycmd int" \
+ "\\^error,msg=\"Invalid parameter: int\"" \
+ "-pycmd int - redefined from CLI"
+
+mi_gdb_test "-pycmd new" \
+ "\\^done" \
+ "Define new command -pycmd-new MI command from Python MI command"
+
+mi_gdb_test "-pycmd red" \
+ "\\^error,msg=\"Command redefined but we failing anyway\"" \
+ "redefine -pycmd MI command from Python MI command"
+
+mi_gdb_test "-pycmd int" \
+ "\\^done,result=\"42\"" \
+ "-pycmd int - redefined from MI"
+
+mi_gdb_test "-pycmd-new int" \
+ "\\^done,result=\"42\"" \
+ "-pycmd-new int - defined from MI"
+
+mi_gdb_test "python pycmd1('')" \
+ ".*&\"ValueError: MI command name is empty\\...\".*\\^error,msg=\"Error while executing Python code\\.\"" \
+ "empty MI command name"
+
+mi_gdb_test "python pycmd1('-')" \
+ [multi_line \
+ ".*" \
+ "&\"ValueError: MI command name does not start with '-' followed by at least one letter or digit\\...\"" \
+ "&\"Error while executing Python code\\...\"" \
+ "\\^error,msg=\"Error while executing Python code\\.\""] \
+ "invalid MI command name"
+
+mi_gdb_test "python pycmd1('-bad-character-@')" \
+ [multi_line \
+ ".*" \
+ "&\"ValueError: MI command name contains invalid character: @\\...\"" \
+ "&\"Error while executing Python code\\...\"" \
+ "\\^error,msg=\"Error while executing Python code\\.\""] \
+ "invalid character in MI command name"
+
+mi_gdb_test "python cmd=pycmd1('-abc')" \
+ ".*\\^done" \
+ "create command -abc, stored in a python variable"
+
+mi_gdb_test "python print(cmd.name)" \
+ ".*\r\n~\"-abc\\\\n\"\r\n\\^done" \
+ "print the name of the stored mi command"
+
+mi_gdb_test "python print(cmd.installed)" \
+ ".*\r\n~\"True\\\\n\"\r\n\\^done" \
+ "print the installed status of the stored mi command"
+
+mi_gdb_test "-abc str" \
+ "\\^done,result=\"Hello world!\"" \
+ "-abc str"
+
+mi_gdb_test "python cmd.installed = False" \
+ ".*\\^done" \
+ "uninstall the mi command"
+
+mi_gdb_test "-abc str" \
+ "\\^error,msg=\"Undefined MI command: abc\",code=\"undefined-command\"" \
+ "-abc str, but now the command is gone"
+
+mi_gdb_test "python cmd.installed = True" \
+ ".*\\^done" \
+ "re-install the mi command"
+
+mi_gdb_test "-abc str" \
+ "\\^done,result=\"Hello world!\"" \
+ "-abc str, the command is back again"
+
+mi_gdb_test "python other=pycmd2('-abc')" \
+ ".*\\^done" \
+ "create another command called -abc, stored in a separate python variable"
+
+mi_gdb_test "python print(other.installed)" \
+ ".*\r\n~\"True\\\\n\"\r\n\\^done" \
+ "print the installed status of the other stored mi command"
+
+mi_gdb_test "python print(cmd.installed)" \
+ ".*\r\n~\"False\\\\n\"\r\n\\^done" \
+ "print the installed status of the original stored mi command"
+
+mi_gdb_test "-abc str" \
+ "\\^done,result=\"Ciao!\"" \
+ "-abc str, when the other command is in place"
+
+mi_gdb_test "python cmd.installed = True" \
+ ".*\\^done" \
+ "re-install the original mi command"
+
+mi_gdb_test "-abc str" \
+ "\\^done,result=\"Hello world!\"" \
+ "-abc str, the original command is back again"
+
+mi_gdb_test "python print(other.installed)" \
+ ".*\r\n~\"False\\\\n\"\r\n\\^done" \
+ "the other command is now not installed"
+
+mi_gdb_test "python print(cmd.installed)" \
+ ".*\r\n~\"True\\\\n\"\r\n\\^done" \
+ "the original command is now installed"
+
+mi_gdb_test "python aa = pycmd3('-aa', 'message one', 'xxx')" \
+ ".*\\^done" \
+ "created a new -aa command"
+
+mi_gdb_test "-aa" \
+ ".*\\^done,xxx={msg=\"message one\"}" \
+ "call the -aa command"
+
+mi_gdb_test "python aa.__init__('-aa', 'message two', 'yyy')" \
+ ".*\\^done" \
+ "reinitialise -aa command with a new message"
+
+mi_gdb_test "-aa" \
+ ".*\\^done,yyy={msg=\"message two\"}" \
+ "call the -aa command, get the new message"
+
+mi_gdb_test "python aa.__init__('-bb', 'message three', 'zzz')" \
+ [multi_line \
+ ".*" \
+ "&\"ValueError: can't reinitialize object with a different command name..\"" \
+ "&\"Error while executing Python code\\...\"" \
+ "\\^error,msg=\"Error while executing Python code\\.\""] \
+ "attempt to reinitialise aa variable to a new command name"
+
+mi_gdb_test "-aa" \
+ ".*\\^done,yyy={msg=\"message two\"}" \
+ "check the aa object has not changed after failed initialization"
+
+mi_gdb_test "python aa.installed = False" \
+ ".*\\^done" \
+ "uninstall the -aa command"
+
+mi_gdb_test "python aa.__init__('-bb', 'message three', 'zzz')" \
+ [multi_line \
+ ".*" \
+ "&\"ValueError: can't reinitialize object with a different command name..\"" \
+ "&\"Error while executing Python code\\...\"" \
+ "\\^error,msg=\"Error while executing Python code\\.\""] \
+ "attempt to reinitialise aa variable to a new command name while uninstalled"
+
+mi_gdb_test "python aa.__init__('-aa', 'message three', 'zzz')" \
+ ".*\\^done" \
+ "reinitialise -aa command with a new message while uninstalled"
+
+mi_gdb_test "python aa.installed = True" \
+ ".*\\^done" \
+ "install the -aa command"
+
+mi_gdb_test "-aa" \
+ ".*\\^done,zzz={msg=\"message three\"}" \
+ "call the -aa command looking for message three"
+
+# Try to register a command object that is missing an invoke method.
+# This is accepted, but will give an error when the user tries to run
+# the command.
+mi_gdb_test "python no_invoke('-no-invoke')" ".*\\^done" \
+ "attempt to register command with no invoke method"
+mi_gdb_test "-no-invoke" \
+ [multi_line \
+ ".*" \
+ "&\"AttributeError: 'no_invoke' object has no attribute 'invoke'..\"" \
+ "\\^error,msg=\"Error occurred in Python: 'no_invoke' object has no attribute 'invoke'\""] \
+ "execute -no-invoke command, which is missing the invoke method"
+
+# Register a command, then delete its invoke method. What is the user thinking!!
+mi_gdb_test "python setattr(no_invoke, 'invoke', free_invoke)" ".*\\^done"
+mi_gdb_test "python cmd = no_invoke('-hello')" ".*\\^done"
+mi_gdb_test "-hello" ".*\\^done,result=\\\[\\\]" \
+ "execute no_invoke command, while it still has an invoke attribute"
+mi_gdb_test "python delattr(no_invoke, 'invoke')" ".*\\^done"
+mi_gdb_test "-hello" \
+ [multi_line \
+ ".*" \
+ "&\"AttributeError: 'no_invoke' object has no attribute 'invoke'..\"" \
+ "\\^error,msg=\"Error occurred in Python: 'no_invoke' object has no attribute 'invoke'\""] \
+ "execute -hello command, that had its invoke method removed"
+mi_gdb_test "python cmd.invoke = 'string'" ".*\\^done"
+mi_gdb_test "-hello" \
+ [multi_line \
+ ".*" \
+ "&\"TypeError: 'str' object is not callable..\"" \
+ "\\^error,msg=\"Error occurred in Python: 'str' object is not callable\""] \
+ "execute command with invoke set to a string"
+
+# Try to create a new MI command that uses the name of a builtin MI command.
+mi_gdb_test "python cmd = pycmd2('-data-disassemble')" \
+ [multi_line \
+ ".*" \
+ "&\"RuntimeError: unable to add command, name is already in use..\"" \
+ "&\"Error while executing Python code\\...\"" \
+ "\\^error,msg=\"Error while executing Python code\\.\""] \
+ "try to register a command that replaces -data-disassemble"
+
+
+
+mi_gdb_test "python run_exception_tests()" \
+ [multi_line \
+ ".*" \
+ "~\"PASS..\"" \
+ "\\^done"]
diff --git a/gdb/testsuite/gdb.python/py-mi-cmd.py b/gdb/testsuite/gdb.python/py-mi-cmd.py
new file mode 100644
index 00000000000..ffe27c52cf1
--- /dev/null
+++ b/gdb/testsuite/gdb.python/py-mi-cmd.py
@@ -0,0 +1,120 @@
+# Copyright (C) 2019-2022 Free Software Foundation, Inc.
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+import gdb
+
+
+class BadKey:
+ def __repr__(self):
+ return "Bad Key"
+
+
+class ReallyBadKey:
+ def __repr__(self):
+ return BadKey()
+
+
+class pycmd1(gdb.MICommand):
+ def invoke(self, argv):
+ if argv[0] == "int":
+ return {"result": 42}
+ elif argv[0] == "str":
+ return {"result": "Hello world!"}
+ elif argv[0] == "ary":
+ return {"result": ["Hello", 42]}
+ elif argv[0] == "dct":
+ return {"result": {"hello": "world", "times": 42}}
+ elif argv[0] == "bk1":
+ return {"result": {BadKey(): "world"}}
+ elif argv[0] == "bk2":
+ return {"result": {1: "world"}}
+ elif argv[0] == "bk3":
+ return {"result": {ReallyBadKey(): "world"}}
+ elif argv[0] == "tpl":
+ return {"result": (42, "Hello")}
+ elif argv[0] == "itr":
+ return {"result": iter([1, 2, 3])}
+ elif argv[0] == "nn1":
+ return None
+ elif argv[0] == "nn2":
+ return {"result": [None]}
+ elif argv[0] == "red":
+ pycmd2("-pycmd")
+ return None
+ elif argv[0] == "nd1":
+ return [1, 2, 3]
+ elif argv[0] == "nd2":
+ return 123
+ elif argv[0] == "nd3":
+ return "abc"
+ elif argv[0] == "ik1":
+ return {"xxx yyy": 123}
+ elif argv[0] == "ik2":
+ return {"result": {"xxx yyy": 123}}
+ elif argv[0] == "ik3":
+ return {"xxx+yyy": 123}
+ elif argv[0] == "ik4":
+ return {"xxx.yyy": 123}
+ elif argv[0] == "ik5":
+ return {"123xxxyyy": 123}
+ elif argv[0] == "empty_key":
+ return {"": 123}
+ elif argv[0] == "dash-key":
+ return {"the-key": 123}
+ elif argv[0] == "exp":
+ raise gdb.GdbError()
+ else:
+ raise gdb.GdbError("Invalid parameter: %s" % argv[0])
+
+
+class pycmd2(gdb.MICommand):
+ def invoke(self, argv):
+ if argv[0] == "str":
+ return {"result": "Ciao!"}
+ elif argv[0] == "red":
+ pycmd1("-pycmd")
+ raise gdb.GdbError("Command redefined but we failing anyway")
+ elif argv[0] == "new":
+ pycmd1("-pycmd-new")
+ return None
+ else:
+ raise gdb.GdbError("Invalid parameter: %s" % argv[0])
+
+
+# This class creates a command that returns a string, which is passed
+# when the command is created.
+class pycmd3(gdb.MICommand):
+ def __init__(self, name, msg, top_level):
+ super(pycmd3, self).__init__(name)
+ self._msg = msg
+ self._top_level = top_level
+
+ def invoke(self, args):
+ return {self._top_level: {"msg": self._msg}}
+
+
+# A command that is missing it's invoke method.
+class no_invoke(gdb.MICommand):
+ def __init__(self, name):
+ super(no_invoke, self).__init__(name)
+
+
+def free_invoke(obj, args):
+ return {"result": args}
+
+
+# Run some test involving catching exceptions. It's easier to write
+# these as a Python function which is then called from the exp script.
+def run_exception_tests():
+ print("PASS")
diff --git a/gdb/testsuite/gdb.python/py-mi-var-info-path-expression.py b/gdb/testsuite/gdb.python/py-mi-var-info-path-expression.py
index dfc2ebdf0e4..035478f6dc7 100644
--- a/gdb/testsuite/gdb.python/py-mi-var-info-path-expression.py
+++ b/gdb/testsuite/gdb.python/py-mi-var-info-path-expression.py
@@ -17,27 +17,23 @@ import sys
import gdb
import gdb.types
-# Following is for Python 3 compatibility...
-if sys.version_info[0] > 2:
- long = int
-
class cons_pp(object):
def __init__(self, val):
self._val = val
def to_string(self):
- if long(self._val) == 0:
+ if int(self._val) == 0:
return "nil"
- elif long(self._val["type"]) == 0:
+ elif int(self._val["type"]) == 0:
return "( . )"
else:
return "%d" % self._val["atom"]["ival"]
def children(self):
- if long(self._val) == 0:
+ if int(self._val) == 0:
return []
- elif long(self._val["type"]) == 0:
+ elif int(self._val["type"]) == 0:
return [("atom", self._val["atom"])]
else:
return [
diff --git a/gdb/testsuite/gdb.python/py-mi.exp b/gdb/testsuite/gdb.python/py-mi.exp
index 3704ce3b3d6..b832b2ccbd3 100644
--- a/gdb/testsuite/gdb.python/py-mi.exp
+++ b/gdb/testsuite/gdb.python/py-mi.exp
@@ -231,7 +231,7 @@ mi_varobj_update_dynamic container2 \
mi_continue_to_line \
[gdb_get_line_number {MI outer breakpoint here} ${srcfile}] \
- "step to outer breakpoint"
+ "step to first outer breakpoint"
mi_create_dynamic_varobj outer outer 1 \
"create outer varobj"
@@ -261,7 +261,7 @@ mi_varobj_update_with_type_change container int 0 "update after type change"
mi_continue_to_line \
[gdb_get_line_number {break to inspect struct and union} ${srcfile}] \
- "step to outer breakpoint"
+ "step to second outer breakpoint"
with_test_prefix "varobj nscont" {
mi_create_dynamic_varobj nscont nstype 1 \
diff --git a/gdb/testsuite/gdb.python/py-parameter.exp b/gdb/testsuite/gdb.python/py-parameter.exp
index b025c2562f0..98d4b2d4684 100644
--- a/gdb/testsuite/gdb.python/py-parameter.exp
+++ b/gdb/testsuite/gdb.python/py-parameter.exp
@@ -127,7 +127,10 @@ proc_with_prefix test_boolean_parameter { } {
gdb_test "python print (test_param.value)" "False" \
"test boolean parameter value is False"
gdb_test "help show print test-param" \
- "Show the state of the boolean test-param.*" "test show help"
+ [multi_line \
+ "Show the state of the boolean test-param" \
+ "When enabled, test param does something useful\\. When disabled, does nothing\\."] \
+ "test show help"
gdb_test "help set print test-param" \
"Set the state of the boolean test-param.*" "test set help"
gdb_test "help set print" \
@@ -233,11 +236,14 @@ proc_with_prefix test_undocumented_parameter { } {
gdb_test "python print (test_undoc_param.value)" \
"False" "test undocumented parameter value is False"
gdb_test "help show print test-undoc-param" \
- "This command is not documented.*" "test show help"
+ [multi_line \
+ "Show the current value of 'print test-undoc-param'\\." \
+ "This command is not documented.*"] \
+ "test show help"
gdb_test "help set print test-undoc-param" \
"This command is not documented.*" "test set help"
gdb_test "help set print" \
- "set print test-undoc-param -- This command is not documented.*" \
+ "set print test-undoc-param -- Set the current value of 'print test-undoc-param'\\..*" \
"test general help"
}
@@ -255,19 +261,24 @@ proc_with_prefix test_really_undocumented_parameter { } {
"end"
gdb_test "show print test-nodoc-param" \
- "This command is not documented.*" "show parameter on"
+ "The current value of 'print test-nodoc-param' is \"on\"\\." \
+ "show parameter on"
gdb_test_no_output "set print test-nodoc-param off" \
"turn off parameter"
gdb_test "show print test-nodoc-param" \
- "This command is not documented.*.*" "show parameter off"
+ "The current value of 'print test-nodoc-param' is \"off\"\\." \
+ "show parameter off"
gdb_test "python print (test_nodoc_param.value)" \
"False" "test really undocumented parameter value is False"
gdb_test "help show print test-nodoc-param" \
- "This command is not documented.*" "test show help"
+ [multi_line \
+ "Show the current value of 'print test-nodoc-param'\\." \
+ "This command is not documented.*"] \
+ "test show help"
gdb_test "help set print test-nodoc-param" \
"This command is not documented.*" "test set help"
gdb_test "help set print" \
- "set print test-nodoc-param -- This command is not documented.*" \
+ "set print test-nodoc-param -- Set the current value of 'print test-nodoc-param'\\..*" \
"test general help"
}
@@ -290,14 +301,19 @@ proc_with_prefix test_deprecated_api_parameter { } {
gdb_test "python print (test_param.value)" "True" \
"test deprecated API parameter value is True"
gdb_test "show print test-param" \
- "State of the Test Parameter on.*" "show parameter on"
+ "The current value of 'print test-param' is \"on\"\\." \
+ "show parameter on"
gdb_test_no_output "set print test-param off" "turn off parameter"
gdb_test "show print test-param" \
- "State of the Test Parameter off.*" "show parameter off"
+ "The current value of 'print test-param' is \"off\"\\." \
+ "show parameter off"
gdb_test "python print (test_param.value)" "False" \
"test deprecated API parameter value is False"
gdb_test "help show print test-param" \
- "State of the Test Parameter.*" "test show help"
+ [multi_line \
+ "State of the Test Parameter" \
+ "When enabled, test param does something useful\\. When disabled, does nothing\\."] \
+ "test show help"
gdb_test "help set print test-param" \
"Set the state of the Test Parameter.*" "test set help"
gdb_test "help set print" \
@@ -364,3 +380,7 @@ test_really_undocumented_parameter
test_deprecated_api_parameter
test_integer_parameter
test_throwing_parameter
+
+# This caused a gdb crash.
+gdb_test "python print(gdb.parameter('endian'))" "auto" \
+ "print endian parameter"
diff --git a/gdb/testsuite/gdb.python/py-record-btrace.exp b/gdb/testsuite/gdb.python/py-record-btrace.exp
index 8204577b866..e9fdd06154e 100644
--- a/gdb/testsuite/gdb.python/py-record-btrace.exp
+++ b/gdb/testsuite/gdb.python/py-record-btrace.exp
@@ -85,11 +85,7 @@ with_test_prefix "instruction " {
gdb_test "python print(i.number)" "1"
gdb_test "python print(i.sal)" "symbol and line for .*"
gdb_test "python print(i.pc)" "$decimal"
- if { $gdb_py_is_py3k == 0 } {
- gdb_test "python print(repr(i.data))" "<read-only buffer for $hex,.*>"
- } else {
- gdb_test "python print(repr(i.data))" "<memory at $hex>"
- }
+ gdb_test "python print(repr(i.data))" "<memory at $hex>"
gdb_test "python print(i.decoded)" ".*"
gdb_test "python print(i.size)" "$decimal"
gdb_test "python print(i.is_speculative)" "False"
diff --git a/gdb/testsuite/gdb.python/py-send-packet.py b/gdb/testsuite/gdb.python/py-send-packet.py
index 4966688a922..a6adc8279cb 100644
--- a/gdb/testsuite/gdb.python/py-send-packet.py
+++ b/gdb/testsuite/gdb.python/py-send-packet.py
@@ -81,17 +81,9 @@ def run_send_packet_test():
# the 'maint packet' command so that the output from the two sources
# can be compared.
def bytes_to_string(byte_array):
-
- # Python 2/3 compatibility. We need a function that can give us
- # the value of a single element in BYTE_ARRAY as an integer.
- if sys.version_info[0] > 2:
- value_of_single_byte = int
- else:
- value_of_single_byte = ord
-
res = ""
for b in byte_array:
- b = value_of_single_byte(b)
+ b = int(b)
if b >= 32 and b <= 126:
res = res + ("%c" % b)
else:
@@ -136,39 +128,23 @@ def run_set_global_var_test():
res = conn.send_packet(b"X%x,4:\x02\x02\x02\x02" % addr)
assert isinstance(res, bytes)
check_global_var(0x02020202)
- if sys.version_info[0] > 2:
- # On Python 3 this first attempt will not work as we're
- # passing a Unicode string containing non-ascii characters.
- saw_error = False
- try:
- res = conn.send_packet("X%x,4:\xff\xff\xff\xff" % addr)
- except UnicodeError:
- saw_error = True
- except:
- assert False
- assert saw_error
- check_global_var(0x02020202)
- # Now we pass a bytes object, which will work.
- res = conn.send_packet(b"X%x,4:\xff\xff\xff\xff" % addr)
- check_global_var(0xFFFFFFFF)
- else:
- # On Python 2 we need to force the creation of a Unicode
- # string, but, with that done, we expect to see the same error
- # as on Python 3; the unicode string contains non-ascii
- # characters.
- saw_error = False
- try:
- res = conn.send_packet(unicode("X%x,4:\xff\xff\xff\xff") % addr)
- except UnicodeError:
- saw_error = True
- except:
- assert False
- assert saw_error
- check_global_var(0x02020202)
- # Now we pass a plain string, which, on Python 2, is the same
- # as a bytes object, this, we expect to work.
+
+ # This first attempt will not work as we're passing a Unicode string
+ # containing non-ascii characters.
+ saw_error = False
+ try:
res = conn.send_packet("X%x,4:\xff\xff\xff\xff" % addr)
- check_global_var(0xFFFFFFFF)
+ except UnicodeError:
+ saw_error = True
+ except:
+ assert False
+
+ assert saw_error
+ check_global_var(0x02020202)
+ # Now we pass a bytes object, which will work.
+ res = conn.send_packet(b"X%x,4:\xff\xff\xff\xff" % addr)
+ check_global_var(0xFFFFFFFF)
+
print("set global_var test passed")
diff --git a/gdb/testsuite/gdb.python/py-shared.exp b/gdb/testsuite/gdb.python/py-shared.exp
index 61c057ace92..2d3390284fe 100644
--- a/gdb/testsuite/gdb.python/py-shared.exp
+++ b/gdb/testsuite/gdb.python/py-shared.exp
@@ -57,14 +57,11 @@ runto [gdb_get_line_number "Break to end."]
# Test gdb.solib_name
gdb_test "p &func1" "" "func1 address"
gdb_py_test_silent_cmd "python func1 = gdb.history(0)" "Aquire func1 address" 1
-if { $gdb_py_is_py3k == 1 } {
- gdb_py_test_silent_cmd "python long = int" "" 0
-}
-gdb_test "python print (gdb.solib_name(long(func1)))" "py-shared-sl.sl" "test func1 solib location"
+gdb_test "python print (gdb.solib_name(int(func1)))" "py-shared-sl.sl" "test func1 solib location"
gdb_test "p &main" "" "main address"
gdb_py_test_silent_cmd "python main = gdb.history(0)" "Aquire main address" 1
-gdb_test "python print (gdb.solib_name(long(main)))" "None" "test main solib location"
+gdb_test "python print (gdb.solib_name(int(main)))" "None" "test main solib location"
if {[is_lp64_target]} {
gdb_test "python print (len(\[gdb.solib_name(0xffffffffffffffff)\]))" "1"
diff --git a/gdb/testsuite/gdb.python/py-source-styling.c b/gdb/testsuite/gdb.python/py-source-styling.c
new file mode 100644
index 00000000000..e27f46053f5
--- /dev/null
+++ b/gdb/testsuite/gdb.python/py-source-styling.c
@@ -0,0 +1,29 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+ Copyright 2022 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+int
+main ()
+{
+ int some_variable = 1234;
+
+ /* The following line contains a character that is non-utf-8. This is a
+ critical part of the test as Python 3 can't convert this into a string
+ using its default mechanism. */
+ char c[] = "À"; /* List this line. */
+
+ return 0;
+}
diff --git a/gdb/testsuite/gdb.python/py-source-styling.exp b/gdb/testsuite/gdb.python/py-source-styling.exp
new file mode 100644
index 00000000000..68bbc9f9758
--- /dev/null
+++ b/gdb/testsuite/gdb.python/py-source-styling.exp
@@ -0,0 +1,64 @@
+# Copyright (C) 2022 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# This file is part of the GDB testsuite. It checks for memory leaks
+# associated with allocating and deallocation gdb.Inferior objects.
+
+load_lib gdb-python.exp
+
+standard_testfile
+
+save_vars { env(TERM) } {
+ # We need an ANSI-capable terminal to get the output, additionally
+ # we need to set LC_ALL so GDB knows the terminal is UTF-8
+ # capable, otherwise we'll get a UnicodeEncodeError trying to
+ # encode the output.
+ setenv TERM ansi
+
+ if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile}] } {
+ return -1
+ }
+
+ if { [skip_python_tests] } { continue }
+
+ if { ![gdb_py_module_available "pygments"] } {
+ unsupported "pygments module not available"
+ return -1
+ }
+
+ if ![runto_main] {
+ return
+ }
+
+ gdb_test_no_output "maint set gnu-source-highlight enabled off"
+
+ gdb_test "maint flush source-cache" "Source cache flushed\\."
+
+ set seen_style_escape false
+ set line_number [gdb_get_line_number "List this line."]
+ gdb_test_multiple "list ${line_number}" "" {
+ -re "Python Exception.*" {
+ fail $gdb_test_name
+ }
+ -re "\033" {
+ set seen_style_escape true
+ exp_continue
+ }
+ -re "$gdb_prompt $" {
+ gdb_assert { $seen_style_escape }
+ pass $gdb_test_name
+ }
+ }
+}
diff --git a/gdb/testsuite/gdb.python/py-type.c b/gdb/testsuite/gdb.python/py-type.c
index 10cbd3b0875..92297d5ad4b 100644
--- a/gdb/testsuite/gdb.python/py-type.c
+++ b/gdb/testsuite/gdb.python/py-type.c
@@ -32,6 +32,13 @@ TS ts;
int aligncheck;
+union UU
+{
+ int i;
+ float f;
+ int a[5];
+};
+
#ifdef __cplusplus
struct C
{
@@ -72,6 +79,14 @@ Temargs<D, 23, &C::c> temvar;
#endif
+unsigned char global_unsigned_char;
+char global_char;
+signed char global_signed_char;
+
+unsigned int global_unsigned_int;
+int global_int;
+signed int global_signed_int;
+
enum E
{ v1, v2, v3
};
@@ -91,6 +106,7 @@ main ()
int ar[2] = {1,2};
struct s st;
struct SS ss;
+ union UU uu;
#ifdef __cplusplus
C c;
c.c = 1;
diff --git a/gdb/testsuite/gdb.python/py-type.exp b/gdb/testsuite/gdb.python/py-type.exp
index 4990eeb7ddb..5613bc024f6 100644
--- a/gdb/testsuite/gdb.python/py-type.exp
+++ b/gdb/testsuite/gdb.python/py-type.exp
@@ -270,6 +270,87 @@ proc test_template {} {
gdb_test "python print (ttype.template_argument(2))" "&C::c"
}
+# Check the is_signed property of some types.
+proc test_is_signed {lang} {
+ if {$lang == "c++"} {
+ gdb_test "python print(gdb.parse_and_eval ('c').type.is_signed)" \
+ "ValueError: Type must be a scalar type.*"
+ gdb_test "python print(gdb.parse_and_eval ('&c').type.is_signed == False)" "True"
+ }
+
+ gdb_test "python print(gdb.parse_and_eval('global_unsigned_char').type.is_signed == False)" "True"
+ gdb_test "python print(gdb.parse_and_eval('global_char').type.is_signed)" "True|False"
+ gdb_test "python print(gdb.parse_and_eval('global_signed_char').type.is_signed == True)" "True"
+
+ gdb_test "python print(gdb.parse_and_eval ('ss.x').type.is_signed == True)" "True"
+ gdb_test "python print(gdb.parse_and_eval ('ss').type.is_signed)" \
+ "ValueError: Type must be a scalar type.*"
+ gdb_test "python print(gdb.parse_and_eval ('uu').type.is_signed)" \
+ "ValueError: Type must be a scalar type.*"
+ gdb_test "python print(gdb.parse_and_eval ('uu.i').type.is_signed == True)" "True"
+ gdb_test "python print(gdb.parse_and_eval ('uu.f').type.is_signed == True)" "True"
+ gdb_test "python print(gdb.parse_and_eval ('uu.a').type.is_signed)" \
+ "ValueError: Type must be a scalar type.*"
+
+ gdb_test "python print(gdb.parse_and_eval ('&ss.x').type.is_signed == False)" "True"
+ gdb_test "python print(gdb.parse_and_eval ('&uu').type.is_signed == False)" "True"
+}
+
+# Compare the types of different symbols from the inferior, we're
+# checking that the types of different sybols of the same declared
+# type, are equal (in Python).
+proc test_type_equality {} {
+
+ foreach_with_prefix type { char int } {
+ gdb_test_no_output "python v1 = gdb.parse_and_eval('global_unsigned_${type}')"
+ gdb_test_no_output "python v2 = gdb.parse_and_eval('global_${type}')"
+ gdb_test_no_output "python v3 = gdb.parse_and_eval('global_signed_${type}')"
+
+ gdb_test_no_output "python t1 = v1.type"
+ gdb_test_no_output "python t2 = v2.type"
+ gdb_test_no_output "python t3 = v3.type"
+
+ if { $type == "char" } {
+ # In C/C++ there's an interesting property of 'char' based types;
+ # 'signed char', 'unsigned char', and 'char' are all distinct
+ # types. Weird, right? Here we check that this property is
+ # visible to Python code.
+ gdb_test "python print(t1 != t2)" "True"
+ gdb_test "python print(t1 != t3)" "True"
+ gdb_test "python print(t2 != t3)" "True"
+ } else {
+ # For 'int' type, when neither signed or unsigned is given
+ # we expect the type to be signed by default.
+ gdb_test "python print(t1 != t2)" "True"
+ gdb_test "python print(t1 != t3)" "True"
+ gdb_test "python print(t2 == t3)" "True"
+ }
+ }
+}
+
+# Test the gdb.Type.is_scalar property.
+proc test_is_scalar { lang } {
+ if {$lang == "c++"} {
+ gdb_test "python print(gdb.parse_and_eval ('c').type.is_scalar)" "False"
+ gdb_test "python print(gdb.parse_and_eval ('&c').type.is_scalar)" "True"
+ }
+
+ foreach type { char int } {
+ gdb_test "python print(gdb.parse_and_eval('global_unsigned_${type}').type.is_scalar)" "True"
+ gdb_test "python print(gdb.parse_and_eval('global_${type}').type.is_scalar)" "True"
+ gdb_test "python print(gdb.parse_and_eval('global_signed_${type}').type.is_scalar)" "True"
+ }
+
+ gdb_test "python print(gdb.parse_and_eval ('ss.x').type.is_scalar)" "True"
+ gdb_test "python print(gdb.parse_and_eval ('ss').type.is_scalar)" "False"
+ gdb_test "python print(gdb.parse_and_eval ('uu').type.is_scalar)" "False"
+
+ gdb_test "python print(gdb.parse_and_eval ('uu.i').type.is_scalar)" "True"
+ gdb_test "python print(gdb.parse_and_eval ('uu.f').type.is_scalar)" "True"
+ gdb_test "python print(gdb.parse_and_eval ('uu.a').type.is_scalar)" "False"
+ gdb_test "python print(gdb.parse_and_eval ('&ss.x').type.is_scalar)" "True"
+}
+
# Perform C Tests.
if { [build_inferior "${binfile}" "c"] == 0 } {
restart_gdb "${binfile}"
@@ -296,10 +377,12 @@ if { [build_inferior "${binfile}" "c"] == 0 } {
runto_bp "break to inspect struct and array."
test_fields "c"
test_enums
+ test_is_scalar "c"
+ test_is_signed "c"
+ test_type_equality
}
}
-
# Perform C++ Tests.
if { [build_inferior "${binfile}-cxx" "c++"] == 0 } {
restart_gdb "${binfile}-cxx"
@@ -310,5 +393,8 @@ if { [build_inferior "${binfile}-cxx" "c++"] == 0 } {
test_range
test_template
test_enums
+ test_is_scalar "c++"
+ test_is_signed "c++"
+ test_type_equality
}
}
diff --git a/gdb/testsuite/gdb.python/py-value.exp b/gdb/testsuite/gdb.python/py-value.exp
index 9ee3c5f223d..b88c4515c8c 100644
--- a/gdb/testsuite/gdb.python/py-value.exp
+++ b/gdb/testsuite/gdb.python/py-value.exp
@@ -47,35 +47,24 @@ proc build_inferior {exefile lang} {
proc test_value_creation {} {
global gdb_prompt
- global gdb_py_is_py3k
gdb_py_test_silent_cmd "python i = gdb.Value (True)" "create boolean value" 1
gdb_py_test_silent_cmd "python i = gdb.Value (5)" "create integer value" 1
gdb_py_test_silent_cmd "python i = gdb.Value (3,None)" "create integer value, with None type" 1
- if { $gdb_py_is_py3k == 0 } {
- gdb_py_test_silent_cmd "python i = gdb.Value (5L)" "create long value" 1
- }
gdb_py_test_silent_cmd "python l = gdb.Value(0xffffffff12345678)" "create large unsigned 64-bit value" 1
- if { $gdb_py_is_py3k == 0 } {
- gdb_test "python print long(l)" "18446744069720004216" "large unsigned 64-bit int conversion to python"
- } else {
- gdb_test "python print (int(l))" "18446744069720004216" "large unsigned 64-bit int conversion to python"
- }
+ gdb_test "python print (int(l))" "18446744069720004216" "large unsigned 64-bit int conversion to python"
gdb_py_test_silent_cmd "python f = gdb.Value (1.25)" "create double value" 1
gdb_py_test_silent_cmd "python a = gdb.Value ('string test')" "create 8-bit string value" 1
gdb_test "python print (a)" "\"string test\"" "print 8-bit string"
gdb_test "python print (a.__class__)" "<(type|class) 'gdb.Value'>" "verify type of 8-bit string"
- if { $gdb_py_is_py3k == 0 } {
- gdb_py_test_silent_cmd "python a = gdb.Value (u'unicode test')" "create unicode value" 1
- gdb_test "python print (a)" "\"unicode test\"" "print Unicode string"
- gdb_test "python print (a.__class__)" "<(type|class) 'gdb.Value'>" "verify type of unicode string"
- }
-
# Test address attribute is None in a non-addressable value
gdb_test "python print ('result = %s' % i.address)" "= None" "test address attribute in non-addressable value"
+
+ # Test creating / printing an optimized out value
+ gdb_test "python print(gdb.Value(gdb.Value(5).type.optimized_out()))"
}
# Check that we can call gdb.Value.__init__ to change a value.
@@ -92,7 +81,6 @@ proc test_value_reinit {} {
proc test_value_numeric_ops {} {
global gdb_prompt
- global gdb_py_is_py3k
gdb_py_test_silent_cmd "python i = gdb.Value (5)" "create first integer value" 0
gdb_py_test_silent_cmd "python j = gdb.Value (2)" "create second integer value" 0
@@ -144,9 +132,6 @@ proc test_value_numeric_ops {} {
gdb_test_no_output "python b = gdb.history (0)" ""
gdb_test "python print(int(b))" "5" "convert pointer to int"
- if {!$gdb_py_is_py3k} {
- gdb_test "python print(long(b))" "5" "convert pointer to long"
- }
gdb_test "python print ('result = ' + str(a+5))" " = 0x7( <.*>)?" "add pointer value with python integer"
gdb_test "python print ('result = ' + str(b-2))" " = 0x3( <.*>)?" "subtract python integer from pointer value"
@@ -156,17 +141,11 @@ proc test_value_numeric_ops {} {
"result = r" "use value as string index"
gdb_test "python print ('result = ' + str((1,2,3)\[gdb.Value(0)\]))" \
"result = 1" "use value as tuple index"
- if {!$gdb_py_is_py3k} {
- gdb_test "python print ('result = ' + str(\[1,2,3\]\[gdb.Value(0)\]))" \
- "result = 1" "use value as array index"
- }
+ gdb_test "python print ('result = ' + str(\[1,2,3\]\[gdb.Value(0)\]))" \
+ "result = 1" "use value as array index"
gdb_test "python print('%x' % int(gdb.parse_and_eval('-1ull')))" \
"f+" "int conversion respect type sign"
- if {!$gdb_py_is_py3k} {
- gdb_test "python print('%x' % long(gdb.parse_and_eval('-1ull')))" \
- "f+" "long conversion respect type sign"
- }
# Test some invalid operations.
@@ -242,7 +221,6 @@ proc test_value_compare {} {
proc test_value_in_inferior {} {
global gdb_prompt
global testfile
- global gdb_py_is_py3k
gdb_breakpoint [gdb_get_line_number "break to inspect struct and union"]
gdb_continue_to_breakpoint "break to inspect struct and union"
@@ -253,9 +231,6 @@ proc test_value_in_inferior {} {
gdb_py_test_silent_cmd "python s = gdb.history (0)" "get value s from history" 1
gdb_test "python print ('result = ' + str(s\['a'\]))" " = 3" "access element inside struct using 8-bit string name"
- if { $gdb_py_is_py3k == 0 } {
- gdb_test "python print ('result = ' + str(s\[u'a'\]))" " = 3" "access element inside struct using unicode name"
- }
# Test dereferencing the argv pointer
@@ -533,13 +508,8 @@ proc test_value_hash {} {
}
proc test_float_conversion {} {
- global gdb_py_is_py3k
gdb_test "python print(int(gdb.Value(0)))" "0"
gdb_test "python print(int(gdb.Value(2.5)))" "2"
- if {!$gdb_py_is_py3k} {
- gdb_test "python print(long(gdb.Value(0)))" "0"
- gdb_test "python print(long(gdb.Value(2.5)))" "2"
- }
gdb_test "python print(float(gdb.Value(2.5)))" "2\\.5"
gdb_test "python print(float(gdb.Value(0)))" "0\\.0"
}
@@ -565,7 +535,6 @@ proc prepare_type_and_buffer {} {
proc test_value_from_buffer {} {
global gdb_prompt
- global gdb_py_is_py3k
prepare_type_and_buffer
gdb_test "python v=gdb.Value(b,tp); print(v)" "1" \
@@ -647,6 +616,17 @@ proc test_value_sub_classes {} {
"check printing of MyValue when initiaized with a type"
}
+# Test the history count. This must be the first thing called after
+# starting GDB as it depends on there being nothing in the value
+# history.
+proc test_history_count {} {
+ for { set i 0 } { $i < 5 } { incr i } {
+ gdb_test "python print('history count is %d' % gdb.history_count())" \
+ "history count is $i" "history count is $i"
+ gdb_test "print $i" " = $i"
+ }
+}
+
# Build C version of executable. C++ is built later.
if { [build_inferior "${binfile}" "c"] < 0 } {
return -1
@@ -658,6 +638,7 @@ clean_restart ${binfile}
# Skip all tests if Python scripting is not enabled.
if { [skip_python_tests] } { continue }
+test_history_count
test_value_creation
test_value_reinit
test_value_numeric_ops
diff --git a/gdb/testsuite/gdb.reverse/ppc_record_test_isa_2_06.c b/gdb/testsuite/gdb.reverse/ppc_record_test_isa_2_06.c
new file mode 100644
index 00000000000..45e58413da2
--- /dev/null
+++ b/gdb/testsuite/gdb.reverse/ppc_record_test_isa_2_06.c
@@ -0,0 +1,39 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+ Copyright 2012-2022 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+/* globals used for vector tests */
+static vector unsigned long vec_xb;
+static unsigned long ra, rb, rs;
+
+int
+main ()
+{
+ ra = 0xABCDEF012;
+ rb = 0;
+ rs = 0x012345678;
+
+ /* 9.0, 16.0, 25.0, 36.0 */
+ vec_xb = (vector unsigned long){0x4110000041800000, 0x41c8000042100000};
+
+ /* Test ISA 2.06 instructions. Load source into vs1, result of sqrt
+ put into vs0. */
+ ra = (unsigned long) & vec_xb; /* stop 1 */
+ __asm__ __volatile__ ("lxvd2x 1, %0, %1" :: "r" (ra ), "r" (rb));
+ __asm__ __volatile__ ("xvsqrtsp 0, 1");
+ ra = 0; /* stop 2 */
+}
+
diff --git a/gdb/testsuite/gdb.reverse/ppc_record_test_isa_2_06.exp b/gdb/testsuite/gdb.reverse/ppc_record_test_isa_2_06.exp
new file mode 100644
index 00000000000..d68dd7b9049
--- /dev/null
+++ b/gdb/testsuite/gdb.reverse/ppc_record_test_isa_2_06.exp
@@ -0,0 +1,105 @@
+# Copyright 2008-2022 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+# Test instruction record for PowerPC, ISA 2.06.
+#
+
+# The basic flow of the record tests are:
+# 1) Stop before executing the instructions of interest. Record
+# the initial value of the registers that the instruction will
+# change, i.e. the destination register.
+# 2) Execute the instructions. Record the new value of the
+# registers that changed.
+# 3) Reverse the direction of the execution and execute back to
+# just before the instructions of interest. Record the final
+# value of the registers of interest.
+# 4) Check that the initial and new values of the registers are
+# different, i.e. the instruction changed the registers as expected.
+# 5) Check that the initial and final values of the registers are
+# the same, i.e. gdb record restored the registers to their
+# original values.
+
+standard_testfile
+
+set gen_src record_test_isa_2_06.c
+set executable record_test_isa_2_06
+set options [list debug]
+
+if {![istarget "powerpc*"]} then {
+ verbose "Skipping PowerPC ISA 2.06 instruction record_test_2_06."
+ return
+}
+
+if {[build_executable "failed to prepare" $executable $srcfile $options] == -1} then {
+ return -1
+}
+
+clean_restart $executable
+
+if ![runto_main] then {
+ untested "could not run to main"
+ continue
+}
+
+gdb_test_no_output "record"
+
+###### Test: Test an ISA 2.06 load (lxvd2x) and square root instruction
+###### (xvsqrtsp). The load instruction will load vs1. The sqrt instruction
+###### will put its result into vs0.
+
+set stop1 [gdb_get_line_number "stop 1"]
+set stop2 [gdb_get_line_number "stop 2"]
+
+gdb_test "break $stop1" ".*Breakpoint .*" "about to execute test"
+gdb_test "continue" ".*Breakpoint .*" "at stop 1"
+
+# Record the initial values in vs0, vs1.
+set vs0_initial [capture_command_output "info register vs0" ""]
+set vs1_initial [capture_command_output "info register vs1" ""]
+
+gdb_test "break $stop2" ".*Breakpoint .*" "executed lxvd2x, xvsqrtsp"
+gdb_test "continue" ".*Breakpoint .*" "at stop 2"
+
+# Record the new values of vs0 and vs1.
+set vs0_new [capture_command_output "info register vs0" ""]
+set vs1_new [capture_command_output "info register vs1" ""]
+
+# Reverse the execution direction.
+gdb_test_no_output "set exec-direction reverse"
+gdb_test "break $stop1" ".*Breakpoint .*" "un executed lxvd2x, xvsqrtsp"
+
+# Execute in reverse to before the lxvd2x instruction.
+gdb_test "continue" ".*Breakpoint.*" "at stop 1 in reverse"
+
+# Record the final values of vs0, vs1.
+set vs0_final [capture_command_output "info register vs0" ""]
+set vs1_final [capture_command_output "info register vs1" ""]
+
+# Check initial and new of vs0 are different.
+gdb_assert [string compare $vs0_initial $vs1_new] \
+ "check vs0 initial versus vs0 new"
+
+# Check initial and new of vs1 are different.
+gdb_assert [string compare $vs1_initial $vs1_new] \
+ "check vs0 initial versus vs1 new"
+
+# Check initial and final are the same.
+gdb_assert ![string compare $vs0_initial $vs0_final] \
+ "check vs0 initial versus vs0 final"
+
+# Check initial and final are the same.
+gdb_assert ![string compare $vs1_initial $vs1_final] \
+ "check vs1 initial versus vs1 final"
+
diff --git a/gdb/testsuite/gdb.reverse/ppc_record_test_isa_3_1.c b/gdb/testsuite/gdb.reverse/ppc_record_test_isa_3_1.c
new file mode 100644
index 00000000000..c0d65d944af
--- /dev/null
+++ b/gdb/testsuite/gdb.reverse/ppc_record_test_isa_3_1.c
@@ -0,0 +1,95 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+ Copyright 2012-2022 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+/* Globals used for vector tests. */
+static vector unsigned long vec_xa, vec_xb, vec_xt;
+static unsigned long ra, rb, rs;
+
+int
+main ()
+{
+ ra = 0xABCDEF012;
+ rb = 0;
+ rs = 0x012345678;
+
+ /* 9.0, 16.0, 25.0, 36.0 */
+ vec_xb = (vector unsigned long){0x4110000041800000, 0x41c8000042100000};
+
+ vec_xt = (vector unsigned long){0xFF00FF00FF00FF00, 0xAA00AA00AA00AA00};
+
+ /* Test 1, ISA 3.1 word instructions. Load source into r1, result of brh
+ put in r0. */
+ ra = 0xABCDEF012; /* stop 1 */
+ __asm__ __volatile__ ("pld 1, %0" :: "r" (ra ));
+ __asm__ __volatile__ ("brh 0, 1" );
+ ra = 0; /* stop 2 */
+
+ /* Test 2, ISA 3.1 MMA instructions with results in various ACC entries
+ xxsetaccz - ACC[3]
+ xvi4ger8 - ACC[4]
+ xvf16ger2pn - ACC[5]
+ pmxvi8ger4 - ACC[6]
+ pmxvf32gerpp - ACC[7] and fpscr */
+ /* Need to initialize the vs registers to a non zero value. */
+ ra = (unsigned long) & vec_xb;
+ __asm__ __volatile__ ("lxvd2x 12, %0, %1" :: "r" (ra ), "r" (rb));
+ __asm__ __volatile__ ("lxvd2x 13, %0, %1" :: "r" (ra ), "r" (rb));
+ __asm__ __volatile__ ("lxvd2x 14, %0, %1" :: "r" (ra ), "r" (rb));
+ __asm__ __volatile__ ("lxvd2x 15, %0, %1" :: "r" (ra ), "r" (rb));
+ vec_xa = (vector unsigned long){0x333134343987601, 0x9994bbbc9983307};
+ vec_xb = (vector unsigned long){0x411234041898760, 0x41c833042103400};
+ __asm__ __volatile__ ("lxvd2x 16, %0, %1" :: "r" (ra ), "r" (rb));
+ vec_xb = (vector unsigned long){0x123456789987650, 0x235676546989807};
+ __asm__ __volatile__ ("lxvd2x 17, %0, %1" :: "r" (ra ), "r" (rb));
+ vec_xb = (vector unsigned long){0x878363439823470, 0x413434c99839870};
+ __asm__ __volatile__ ("lxvd2x 18, %0, %1" :: "r" (ra ), "r" (rb));
+ vec_xb = (vector unsigned long){0x043765434398760, 0x419876555558850};
+ __asm__ __volatile__ ("lxvd2x 19, %0, %1" :: "r" (ra ), "r" (rb));
+ vec_xb = (vector unsigned long){0x33313434398760, 0x9994bbbc99899330};
+ __asm__ __volatile__ ("lxvd2x 20, %0, %1" :: "r" (ra ), "r" (rb));
+ __asm__ __volatile__ ("lxvd2x 21, %0, %1" :: "r" (ra ), "r" (rb));
+ __asm__ __volatile__ ("lxvd2x 22, %0, %1" :: "r" (ra ), "r" (rb));
+ __asm__ __volatile__ ("lxvd2x 23, %0, %1" :: "r" (ra ), "r" (rb));
+ __asm__ __volatile__ ("lxvd2x 24, %0, %1" :: "r" (ra ), "r" (rb));
+ __asm__ __volatile__ ("lxvd2x 25, %0, %1" :: "r" (ra ), "r" (rb));
+ __asm__ __volatile__ ("lxvd2x 26, %0, %1" :: "r" (ra ), "r" (rb));
+ __asm__ __volatile__ ("lxvd2x 27, %0, %1" :: "r" (ra ), "r" (rb));
+ vec_xa = (vector unsigned long){0x33313434398760, 0x9994bbbc998330};
+ vec_xb = (vector unsigned long){0x4110000041800000, 0x41c8000042100000};
+ __asm__ __volatile__ ("lxvd2x 28, %0, %1" :: "r" (ra ), "r" (rb));
+ vec_xb = (vector unsigned long){0x4567000046800000, 0x4458000048700000};
+ __asm__ __volatile__ ("lxvd2x 29, %0, %1" :: "r" (ra ), "r" (rb));
+ vec_xb = (vector unsigned long){0x41dd000041e00000, 0x41c8000046544400};
+ __asm__ __volatile__ ("lxvd2x 30, %0, %1" :: "r" (ra ), "r" (rb));
+
+ /* SNAN */
+ vec_xb = (vector unsigned long){0x7F8F00007F8F0000, 0x7F8F00007F8F0000};
+
+ __asm__ __volatile__ ("lxvd2x 31, %0, %1" :: "r" (ra ), "r" (rb));
+
+ ra = 0xAB; /* stop 3 */
+ __asm__ __volatile__ ("xxsetaccz 3");
+ __asm__ __volatile__ ("xvi4ger8 4, %x0, %x1" :: "wa" (vec_xa), \
+ "wa" (vec_xb) );
+ __asm__ __volatile__ ("xvf16ger2pn 5, %x0, %x1" :: "wa" (vec_xa),\
+ "wa" (vec_xb) );
+ __asm__ __volatile__ ("pmxvi8ger4spp 6, %x0, %x1, 11, 13, 5"
+ :: "wa" (vec_xa), "wa" (vec_xb) );
+ __asm__ __volatile__ ("pmxvf32gerpp 7, %x0, %x1, 11, 13"
+ :: "wa" (vec_xa), "wa" (vec_xb) );
+ ra = 0; /* stop 4 */
+}
diff --git a/gdb/testsuite/gdb.reverse/ppc_record_test_isa_3_1.exp b/gdb/testsuite/gdb.reverse/ppc_record_test_isa_3_1.exp
new file mode 100644
index 00000000000..9ea8931e9cf
--- /dev/null
+++ b/gdb/testsuite/gdb.reverse/ppc_record_test_isa_3_1.exp
@@ -0,0 +1,341 @@
+# Copyright 2008-2022 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+# Test instruction record for PowerPC, ISA 3.1.
+#
+
+# The basic flow of the record tests are:
+# 1) Stop before executing the instructions of interest. Record
+# the initial value of the registers that the instruction will
+# change, i.e. the destination register.
+# 2) Execute the instructions. Record the new value of the
+# registers that changed.
+# 3) Reverse the direction of the execution and execute back to
+# just before the instructions of interest. Record the final
+# value of the registers of interest.
+# 4) Check that the initial and new values of the registers are
+# different, i.e. the instruction changed the registers as expected.
+# 5) Check that the initial and final values of the registers are
+# the same, i.e. gdb record restored the registers to their
+# original values.
+
+
+standard_testfile
+
+set gen_src record_test_isa_3_1.c
+set executable record_test_isa_3_1
+
+if {![istarget "powerpc*"] || [skip_power_isa_3_1_tests] } then {
+ verbose "Skipping PowerPC ISA 3.1 instruction record_test."
+ return
+}
+
+set options [list additional_flags=-mcpu=power10 debug]
+if {[build_executable "failed to prepare" $executable $srcfile $options] == -1} then {
+ return -1
+}
+
+clean_restart $executable
+
+if ![runto_main] then {
+ untested "could not run to main"
+ continue
+}
+
+gdb_test_no_output "record"
+
+###### Test 1: Test an ISA 3.1 byte reverse word instruction (brd) and a
+###### prefixed load double (pld) instruction.
+set stop1 [gdb_get_line_number "stop 1"]
+set stop2 [gdb_get_line_number "stop 2"]
+
+gdb_test "break $stop1" ".*Breakpoint .*" "about to execute test 1"
+gdb_test "continue" ".*Breakpoint .*" "at stop 1"
+
+# Record the initial values in r0, r1
+# Load the argument into r1, result of byte reverse is put into r0.
+set r0_initial [capture_command_output "info register r0" ""]
+set r1_initial [capture_command_output "info register r1" ""]
+
+gdb_test "break $stop2" ".*Breakpoint .*" "executed test 1"
+gdb_test "continue" ".*Breakpoint .*" "at stop 2"
+
+# Record the new values of r0 and r1
+set r0_new [capture_command_output "info register r0" ""]
+set r1_new [capture_command_output "info register r1" ""]
+
+# Execute in reverse to before test 1
+gdb_test_no_output "set exec-direction reverse"
+
+gdb_test "break $stop1" ".*Breakpoint .*" "reverse stop at test 1 start"
+gdb_test "continue" ".*Breakpoint.*" "at stop 1 in reverse"
+
+# Record the final values of r0, r1
+set r0_final [capture_command_output "info register r0" ""]
+set r1_final [capture_command_output "info register r1" ""]
+
+# Check initial and new of r0 are different.
+gdb_assert [string compare $r0_initial $r0_new] \
+ "check r0 initial versus r0 new"
+
+# Check initial and new of r1 are different.
+gdb_assert [string compare $r1_initial $r1_new] \
+ "check r0 initial versus r1 new"
+
+# Check initial and final are the same.
+gdb_assert ![string compare $r0_initial $r0_final] \
+ "check r0 initial versus r0 final"
+
+# Check initial and final are the same.
+gdb_assert ![string compare $r1_initial $r1_final] \
+ "check r1 initial versus r1 final"
+
+
+# Change execution direction to forward for next test.
+gdb_test_no_output "set exec-direction forward" "start forward test3"
+gdb_test "record stop" ".*Process record is stopped.*" "stopped recording 2"
+set test_del_bkpts "delete breakpoints, answer prompt 2"
+
+# Delete all breakpoints and catchpoints.
+delete_breakpoints
+
+gdb_test_no_output "record" "start recording test2"
+
+
+###### Test 2: Test the ISA 3.1 MMA instructions xxsetaccz, xvi4ger8,
+###### xvf16ger2pn, pmxvi8ger4, and pmxvf32gerpp. Goal here is to hit all
+###### the places where ppc_record_ACC_fpscr() gets called.
+##
+## xxsetaccz - ACC[3], vs[12] to vs[15]
+## xvi4ger8 - ACC[4], vs[16] to vs[19]
+## xvf16ger2pn - ACC[5], vs[20] to vs[23]
+## pmxvi8ger4 - ACC[6], vs[21] to vs[27]
+## pmxvf32gerpp - ACC[7], vs[28] to vs[31] and fpscr
+
+set stop3 [gdb_get_line_number "stop 3"]
+set stop4 [gdb_get_line_number "stop 4"]
+
+gdb_test "break $stop3" ".*Breakpoint .*" "about to execute test 2"
+gdb_test "continue" ".*Breakpoint .*" "at stop 3"
+
+# Record the initial values of vs's that correspond to the ACC entries,
+# and fpscr.
+set acc_3_0_initial [capture_command_output "info register vs12" ""]
+set acc_3_1_initial [capture_command_output "info register vs13" ""]
+set acc_3_2_initial [capture_command_output "info register vs14" ""]
+set acc_3_3_initial [capture_command_output "info register vs15" ""]
+set acc_4_0_initial [capture_command_output "info register vs16" ""]
+set acc_4_1_initial [capture_command_output "info register vs17" ""]
+set acc_4_2_initial [capture_command_output "info register vs18" ""]
+set acc_4_3_initial [capture_command_output "info register vs19" ""]
+set acc_5_0_initial [capture_command_output "info register vs20" ""]
+set acc_5_1_initial [capture_command_output "info register vs21" ""]
+set acc_5_2_initial [capture_command_output "info register vs22" ""]
+set acc_5_3_initial [capture_command_output "info register vs23" ""]
+set acc_6_0_initial [capture_command_output "info register vs24" ""]
+set acc_6_1_initial [capture_command_output "info register vs25" ""]
+set acc_6_2_initial [capture_command_output "info register vs26" ""]
+set acc_6_3_initial [capture_command_output "info register vs27" ""]
+set acc_7_0_initial [capture_command_output "info register vs28" ""]
+set acc_7_1_initial [capture_command_output "info register vs29" ""]
+set acc_7_2_initial [capture_command_output "info register vs30" ""]
+set acc_7_3_initial [capture_command_output "info register vs31" ""]
+set fpscr_initial [capture_command_output "info register fpscr" ""]
+
+gdb_test "break $stop4" ".*Breakpoint .*" "executed test 2"
+gdb_test "continue" ".*Breakpoint .*" "at stop 4"
+
+# Record the new values of the ACC entries and fpscr.
+set acc_3_0_new [capture_command_output "info register vs12" ""]
+set acc_3_1_new [capture_command_output "info register vs13" ""]
+set acc_3_2_new [capture_command_output "info register vs14" ""]
+set acc_3_3_new [capture_command_output "info register vs15" ""]
+set acc_4_0_new [capture_command_output "info register vs16" ""]
+set acc_4_1_new [capture_command_output "info register vs17" ""]
+set acc_4_2_new [capture_command_output "info register vs18" ""]
+set acc_4_3_new [capture_command_output "info register vs19" ""]
+set acc_5_0_new [capture_command_output "info register vs20" ""]
+set acc_5_1_new [capture_command_output "info register vs21" ""]
+set acc_5_2_new [capture_command_output "info register vs22" ""]
+set acc_5_3_new [capture_command_output "info register vs23" ""]
+set acc_6_0_new [capture_command_output "info register vs24" ""]
+set acc_6_1_new [capture_command_output "info register vs25" ""]
+set acc_6_2_new [capture_command_output "info register vs26" ""]
+set acc_6_3_new [capture_command_output "info register vs27" ""]
+set acc_7_0_new [capture_command_output "info register vs28" ""]
+set acc_7_1_new [capture_command_output "info register vs29" ""]
+set acc_7_2_new [capture_command_output "info register vs30" ""]
+set acc_7_3_new [capture_command_output "info register vs31" ""]
+set fpscr_new [capture_command_output "info register fpscr" ""]
+
+# Execute in reverse to before test 2.
+gdb_test_no_output "set exec-direction reverse" "reverse to start of test 2"
+
+gdb_test "break $stop3" ".*Breakpoint .*" "reverse stop at test 2 start"
+gdb_test "continue" ".*Breakpoint.*" "at stop 3 in reverse"
+
+# Record the final values of the ACC entries and fpscr.
+set acc_3_0_final [capture_command_output "info register vs12" ""]
+set acc_3_1_final [capture_command_output "info register vs13" ""]
+set acc_3_2_final [capture_command_output "info register vs14" ""]
+set acc_3_3_final [capture_command_output "info register vs15" ""]
+set acc_4_0_final [capture_command_output "info register vs16" ""]
+set acc_4_1_final [capture_command_output "info register vs17" ""]
+set acc_4_2_final [capture_command_output "info register vs18" ""]
+set acc_4_3_final [capture_command_output "info register vs19" ""]
+set acc_5_0_final [capture_command_output "info register vs20" ""]
+set acc_5_1_final [capture_command_output "info register vs21" ""]
+set acc_5_2_final [capture_command_output "info register vs22" ""]
+set acc_5_3_final [capture_command_output "info register vs23" ""]
+set acc_6_0_final [capture_command_output "info register vs24" ""]
+set acc_6_1_final [capture_command_output "info register vs25" ""]
+set acc_6_2_final [capture_command_output "info register vs26" ""]
+set acc_6_3_final [capture_command_output "info register vs27" ""]
+set acc_7_0_final [capture_command_output "info register vs28" ""]
+set acc_7_1_final [capture_command_output "info register vs29" ""]
+set acc_7_2_final [capture_command_output "info register vs30" ""]
+set acc_7_3_final [capture_command_output "info register vs31" ""]
+set fpscr_final [capture_command_output "info register fpscr" ""]
+
+# check initial and new ACC entries are different.
+gdb_assert [string compare $acc_3_0_initial $acc_3_0_new] \
+ "check vs12 initial versus new"
+
+gdb_assert [string compare $acc_3_1_initial $acc_3_1_new] \
+ "check vs13 initial versus new"
+
+gdb_assert [string compare $acc_3_2_initial $acc_3_2_new] \
+ "check vs14 initial versus new"
+
+gdb_assert [string compare $acc_3_3_initial $acc_3_3_new] \
+ "check vs15 initial versus new"
+
+gdb_assert [string compare $acc_4_0_initial $acc_4_0_new] \
+ "check vs16 initial versus new"
+
+gdb_assert [string compare $acc_4_1_initial $acc_4_1_new] \
+ "check vs17 initial versus new"
+
+gdb_assert [string compare $acc_4_2_initial $acc_4_2_new] \
+ "check vs18 initial versus new"
+
+gdb_assert [string compare $acc_4_3_initial $acc_4_3_new] \
+ "check vs19 initial versus new"
+
+gdb_assert [string compare $acc_5_0_initial $acc_5_0_new] \
+ "check vs20 initial versus new"
+
+gdb_assert [string compare $acc_5_1_initial $acc_5_1_new] \
+ "check vs21 initial versus new"
+
+gdb_assert [string compare $acc_5_2_initial $acc_5_2_new] \
+ "check vs22 initial versus new"
+
+gdb_assert [string compare $acc_5_3_initial $acc_5_3_new] \
+ "check vs23 initial versus new"
+
+gdb_assert [string compare $acc_6_0_initial $acc_6_0_new] \
+ "check vs24 initial versus new"
+
+gdb_assert [string compare $acc_6_1_initial $acc_6_1_new] \
+ "check vs25 initial versus new"
+
+gdb_assert [string compare $acc_6_2_initial $acc_6_2_new] \
+ "check vs26 initial versus new"
+
+gdb_assert [string compare $acc_6_3_initial $acc_6_3_new] \
+ "check vs27 initial versus new"
+
+gdb_assert [string compare $acc_7_0_initial $acc_7_0_new] \
+ "check vs28 initial versus new"
+
+gdb_assert [string compare $acc_7_1_initial $acc_7_1_new] \
+ "check vs29 initial versus new"
+
+gdb_assert [string compare $acc_7_2_initial $acc_7_2_new] \
+ "check vs30 initial versus new"
+
+gdb_assert [string compare $acc_7_3_initial $acc_7_3_new] \
+ "check vs31 initial versus new"
+
+gdb_assert [string compare $fpscr_initial $fpscr_new] \
+ "check fpscr initial versus new"
+
+
+# Check initial and final ACC entries are the same.
+gdb_assert ![string compare $acc_3_0_initial $acc_3_0_final] \
+ "check vs12 initial versus final"
+
+gdb_assert ![string compare $acc_3_1_initial $acc_3_1_final] \
+ "check vs13 initial versus final"
+
+gdb_assert ![string compare $acc_3_2_initial $acc_3_2_final] \
+ "check vs14 initial versus final"
+
+gdb_assert ![string compare $acc_3_3_initial $acc_3_3_final] \
+ "check vs15 initial versus final"
+
+gdb_assert ![string compare $acc_4_0_initial $acc_4_0_final] \
+ "check vs16 initial versus final"
+
+gdb_assert ![string compare $acc_4_1_initial $acc_4_1_final] \
+ "check vs17 initial versus final"
+
+gdb_assert ![string compare $acc_4_2_initial $acc_4_2_final] \
+ "check vs18 initial versus final"
+
+gdb_assert ![string compare $acc_4_3_initial $acc_4_3_final] \
+ "check vs19 initial versus final"
+
+gdb_assert ![string compare $acc_5_0_initial $acc_5_0_final] \
+ "check vs20 initial versus final"
+
+gdb_assert ![string compare $acc_5_1_initial $acc_5_1_final] \
+ "check vs21 initial versus final"
+
+gdb_assert ![string compare $acc_5_2_initial $acc_5_2_final] \
+ "check vs22 initial versus final"
+
+gdb_assert ![string compare $acc_5_3_initial $acc_5_3_final] \
+ "check vs23 initial versus final"
+
+gdb_assert ![string compare $acc_6_0_initial $acc_6_0_final] \
+ "check vs24 initial versus final"
+
+gdb_assert ![string compare $acc_6_1_initial $acc_6_1_final] \
+ "check vs25 initial versus final"
+
+gdb_assert ![string compare $acc_6_2_initial $acc_6_2_final] \
+ "check vs26 initial versus final"
+
+gdb_assert ![string compare $acc_6_3_initial $acc_6_3_final] \
+ "check vs27 initial versus final"
+
+gdb_assert ![string compare $acc_7_0_initial $acc_7_0_final] \
+ "check vs28 initial versus final"
+
+gdb_assert ![string compare $acc_7_1_initial $acc_7_1_final] \
+ "check vs29 initial versus final"
+
+gdb_assert ![string compare $acc_7_2_initial $acc_7_2_final] \
+ "check !vs30 initial versus final"
+
+gdb_assert ![string compare $acc_7_3_initial $acc_7_3_final] \
+ "check !vs31 initial versus final"
+
+gdb_assert ![string compare $fpscr_initial $fpscr_final] \
+ "check fpscr initial versus final"
+
+
diff --git a/gdb/testsuite/gdb.rust/expr.exp b/gdb/testsuite/gdb.rust/expr.exp
index 0c445897338..bb0222bed4b 100644
--- a/gdb/testsuite/gdb.rust/expr.exp
+++ b/gdb/testsuite/gdb.rust/expr.exp
@@ -145,3 +145,5 @@ gdb_test "print 0x0 as fn(i64) -> ()" " = \\\(\\*mut fn \\\(i64\\\) -> \\\(\\\)\
gdb_test "print r#" "No symbol 'r' in current context"
gdb_test "printf \"%d %d\\n\", 23+1, 23-1" "24 22"
+
+gdb_test "print 5," "Syntax error near ','"
diff --git a/gdb/testsuite/gdb.rust/fnfield.exp b/gdb/testsuite/gdb.rust/fnfield.exp
new file mode 100644
index 00000000000..45755710626
--- /dev/null
+++ b/gdb/testsuite/gdb.rust/fnfield.exp
@@ -0,0 +1,38 @@
+# Copyright (C) 2022 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Test trait object printing.
+
+load_lib rust-support.exp
+if {[skip_rust_tests]} {
+ continue
+}
+
+standard_testfile .rs
+if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug rust}]} {
+ return -1
+}
+
+set line [gdb_get_line_number "set breakpoint here"]
+if {![runto ${srcfile}:$line]} {
+ untested "could not run to breakpoint"
+ return -1
+}
+
+gdb_test "print foo.f()" " = 6" "call impl function"
+gdb_test "print (foo.f)()" " = 5" "call function field"
+gdb_test "print foo.g()" " = 7" "call impl function g"
+gdb_test "print (foo.g)()" "There is no member named g." \
+ "cannot call g with parens"
diff --git a/gdb/testsuite/gdb.rust/fnfield.rs b/gdb/testsuite/gdb.rust/fnfield.rs
new file mode 100644
index 00000000000..b80136c057f
--- /dev/null
+++ b/gdb/testsuite/gdb.rust/fnfield.rs
@@ -0,0 +1,39 @@
+// Copyright (C) 2022 Free Software Foundation, Inc.
+
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+#![allow(warnings)]
+
+fn five() -> i32 { 5 }
+
+fn main() {
+ let foo = Foo {x: 5, f: five};
+ foo.print(); // set breakpoint here
+ println!("Hello, world! {}, {}, {}", foo.f(), (foo.f)(),
+ foo.g ());
+}
+
+struct Foo {
+ x :i32,
+ f: fn () -> i32,
+}
+
+impl Foo {
+ fn print(&self) {
+ println!("hello {}", self.x)
+ }
+
+ fn f(&self) -> i32 { 6 }
+ fn g(&self) -> i32 { 7 }
+}
diff --git a/gdb/testsuite/gdb.rust/simple.exp b/gdb/testsuite/gdb.rust/simple.exp
index b6f2993c381..246aff634d3 100644
--- a/gdb/testsuite/gdb.rust/simple.exp
+++ b/gdb/testsuite/gdb.rust/simple.exp
@@ -314,7 +314,8 @@ proc test_one_slice {svar length base range} {
with_test_prefix $range {
global hex
- set result " = &\\\[.*\\\] \\{data_ptr: $hex, length: $length\\}"
+ # Just accept any array here.
+ set result " = &\\\[.*\\\] \\\[.*\\\]"
gdb_test "print $svar" $result
gdb_test "print &${base}\[${range}\]" $result
diff --git a/gdb/testsuite/gdb.rust/unicode.exp b/gdb/testsuite/gdb.rust/unicode.exp
new file mode 100644
index 00000000000..9de0a0e724f
--- /dev/null
+++ b/gdb/testsuite/gdb.rust/unicode.exp
@@ -0,0 +1,51 @@
+# Copyright (C) 2022 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Test raw identifiers.
+
+load_lib rust-support.exp
+if {[skip_rust_tests]} {
+ continue
+}
+
+# Non-ASCII identifiers were allowed starting in 1.53.
+set v [split [rust_compiler_version] .]
+if {[lindex $v 0] == 1 && [lindex $v 1] < 53} {
+ untested "this test requires rust 1.53 or greater"
+ return -1
+}
+
+# Enable basic use of UTF-8. LC_ALL gets reset for each testfile.
+setenv LC_ALL C.UTF-8
+
+standard_testfile .rs
+if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug rust}]} {
+ return -1
+}
+
+set line [gdb_get_line_number "set breakpoint here"]
+if {![runto ${srcfile}:$line]} {
+ untested "could not run to breakpoint"
+ return -1
+}
+
+gdb_test "print ð•¯" " = 98" "print D"
+gdb_test "print \"ð•¯\"" " = \"ð•¯\"" "print D in string"
+# This output is maybe not ideal, but it also isn't incorrect.
+gdb_test "print 'ð•¯'" " = 120175 '\\\\u\\\{01d56f\\\}'" \
+ "print D as char"
+gdb_test "print cç" " = 97" "print cc"
+
+gdb_test "print 'çc'" "overlong character literal" "print cc as char"
diff --git a/gdb/testsuite/gdb.rust/unicode.rs b/gdb/testsuite/gdb.rust/unicode.rs
new file mode 100644
index 00000000000..c6ca90e6450
--- /dev/null
+++ b/gdb/testsuite/gdb.rust/unicode.rs
@@ -0,0 +1,26 @@
+// Copyright (C) 2022 Free Software Foundation, Inc.
+
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+#![allow(dead_code)]
+#![allow(unused_variables)]
+#![allow(unused_assignments)]
+#![allow(uncommon_codepoints)]
+#![allow(non_snake_case)]
+
+fn main() {
+ let 𕯠= 98;
+ let cç = 97;
+ println!("{}, {}", ð•¯, cç); // set breakpoint here
+}
diff --git a/gdb/testsuite/gdb.rust/unsized.exp b/gdb/testsuite/gdb.rust/unsized.exp
index 388e1727fd4..67ee49d0935 100644
--- a/gdb/testsuite/gdb.rust/unsized.exp
+++ b/gdb/testsuite/gdb.rust/unsized.exp
@@ -31,5 +31,12 @@ if {![runto ${srcfile}:$line]} {
return -1
}
-gdb_test "ptype *us" \
- " = struct \[a-z:\]*V<\\\[u8\\\]> {.* data: \\\[u8\\\],.*}"
+gdb_test "ptype us" " = .*V<\\\[u8\\\]>.*"
+
+set v [split [rust_compiler_version] .]
+# The necessary debuginfo generation landed in 1.60, but had a bug
+# that was fixed in 1.61.
+if {[lindex $v 0] > 1 || [lindex $v 1] >= 61} {
+ gdb_test "print us2" " = .*Box<.*> \\\[1, 2, 3\\\]"
+ gdb_test "ptype us2" "type = .*"
+}
diff --git a/gdb/testsuite/gdb.rust/unsized.rs b/gdb/testsuite/gdb.rust/unsized.rs
index f4897d6b8f8..af3192e8407 100644
--- a/gdb/testsuite/gdb.rust/unsized.rs
+++ b/gdb/testsuite/gdb.rust/unsized.rs
@@ -28,6 +28,8 @@ fn ignore<T>(x: T) { }
fn main() {
let v: Box<V<[u8; 3]>> = Box::new(V { data: [1, 2, 3] });
let us: Box<Unsized> = v;
+ let v2 : Box<[u8; 3]> = Box::new([1, 2, 3]);
+ let us2 : Box<[u8]> = v2;
ignore(us); // set breakpoint here
}
diff --git a/gdb/testsuite/gdb.server/server-pipe.exp b/gdb/testsuite/gdb.server/server-pipe.exp
new file mode 100644
index 00000000000..83537378aa6
--- /dev/null
+++ b/gdb/testsuite/gdb.server/server-pipe.exp
@@ -0,0 +1,84 @@
+# This testcase is part of GDB, the GNU debugger.
+
+# Copyright 2022 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Test starting gdbserver using the 'target remove | ....' syntax.
+# The extended-remote target type is tested too. The test checks that
+# the `|` character can be seen in the 'info connections' output, and
+# (when Python is available) in the gdb.TargetConnection.details
+# string.
+
+# This test relies on starting gdbserver using the pipe syntax. Not
+# sure how well this will run if part of this test is being run
+# elsewhere.
+if { [is_remote target] || [is_remote host] } {
+ return 0
+}
+
+load_lib gdbserver-support.exp
+
+standard_testfile
+
+if { [skip_gdbserver_tests] } {
+ return 0
+}
+
+set gdbserver [find_gdbserver]
+if { $gdbserver == "" } {
+ unsupported "could not find gdbserver"
+ return
+}
+
+standard_testfile normal.c
+set executable ${testfile}
+
+if {[build_executable "failed to prepare" $testfile $srcfile debug]} {
+ return -1
+}
+
+# Start GDB using remote type TARGET, which should be either "remote"
+# or "extended-remote". Check the output of 'info connections', and
+# the contents of the gdb.TargetConnection.details string.
+proc do_test { target } {
+ clean_restart ${::binfile}
+
+ # Make sure we're disconnected, in case we're testing with an
+ # extended-remote board, therefore already connected.
+ gdb_test "disconnect" ".*"
+
+ gdb_test "target ${target} | ${::gdbserver} - ${::binfile}" ".*" \
+ "start gdbserver using pipe syntax"
+
+ gdb_breakpoint main
+ gdb_continue_to_breakpoint main
+ gdb_test "info frame" ".* in main .*"
+
+ gdb_test "info connections" "${target} \| ${::gdbserver} - ${::binfile} \[^\r\n\]+"
+
+ if { ![skip_python_tests] } {
+ gdb_test_no_output "python conn = gdb.selected_inferior().connection"
+ gdb_test "python print(conn.details)" "\| ${::gdbserver} - ${::binfile}"
+ }
+}
+
+save_vars { GDBFLAGS } {
+ set GDBFLAGS "$GDBFLAGS -ex \"set sysroot\""
+
+ # Test with the two remote protocol types.
+ foreach_with_prefix target { remote extended-remote } {
+ do_test ${target}
+ }
+}
diff --git a/gdb/testsuite/gdb.threads/access-mem-running-thread-exit.exp b/gdb/testsuite/gdb.threads/access-mem-running-thread-exit.exp
index dddb35dabc0..8dc9af05c8e 100644
--- a/gdb/testsuite/gdb.threads/access-mem-running-thread-exit.exp
+++ b/gdb/testsuite/gdb.threads/access-mem-running-thread-exit.exp
@@ -79,7 +79,35 @@ proc test { non_stop } {
# Start the second inferior.
with_test_prefix "second inferior" {
- gdb_test "add-inferior -no-connection" "New inferior 2.*"
+ # With stub targets that do reload on run, if we let the new
+ # inferior share inferior 1's connection, runto_main would
+ # fail because GDB is already connected to something, like
+ # e.g. with --target_board=native-gdbserver:
+ #
+ # (gdb) kill
+ # ...
+ # (gdb) target remote localhost:2348
+ # Already connected to a remote target. Disconnect? (y or n)
+ #
+ # Instead, start the inferior with no connection, and let
+ # gdb_load/runto_main spawn a new remote connection/gdbserver.
+ #
+ # OTOH, with extended-remote, we must let the new inferior
+ # reuse the current connection, so that runto_main below can
+ # issue the "run" command, and have the inferior run on the
+ # remote target. If we forced no connection, then "run" would
+ # either fail if "set auto-connect-native-target" is on, like
+ # the native-extended-gdbserver board enforces, or it would
+ # run the inferior on the native target, which isn't what is
+ # being tested.
+ #
+ # Since it's reload_on_run targets that need special care, we
+ # default to reusing the connection on most targets.
+ if [target_info exists gdb,do_reload_on_run] {
+ gdb_test "add-inferior -no-connection" "New inferior 2.*"
+ } else {
+ gdb_test "add-inferior" "New inferior 2.*"
+ }
gdb_test "inferior 2" "Switching to inferior 2 .*"
gdb_load $binfile
diff --git a/gdb/testsuite/gdb.threads/clone-new-thread-event.c b/gdb/testsuite/gdb.threads/clone-new-thread-event.c
index 800514d0b6d..9e7ceb97a65 100644
--- a/gdb/testsuite/gdb.threads/clone-new-thread-event.c
+++ b/gdb/testsuite/gdb.threads/clone-new-thread-event.c
@@ -26,6 +26,7 @@
#include <sys/types.h>
#include <unistd.h>
#include <sys/syscall.h>
+#include <sys/wait.h>
#include <features.h>
#ifdef __UCLIBC__
@@ -59,7 +60,7 @@ int
main (int argc, char **argv)
{
unsigned char *stack;
- int new_pid;
+ int new_pid, status, ret;
stack = malloc (STACK_SIZE);
assert (stack != NULL);
@@ -71,5 +72,18 @@ main (int argc, char **argv)
, NULL, NULL, NULL, NULL);
assert (new_pid > 0);
+ /* Note the clone call above didn't use CLONE_THREAD, so it actually
+ put the new thread in a new thread group. However, the new clone
+ is still reported with PTRACE_EVENT_CLONE to GDB, since we didn't
+ use CLONE_VFORK (results in PTRACE_EVENT_VFORK) nor set the
+ termination signal to SIGCHLD (results in PTRACE_EVENT_FORK), so
+ GDB thinks of it as a new thread of the same inferior. It's a
+ bit of an odd setup, but it's not important for what we're
+ testing, and, it let's us conveniently use waitpid to wait for
+ the clone, which you can't with CLONE_THREAD. */
+ ret = waitpid (new_pid, &status, __WALL);
+ assert (ret == new_pid);
+ assert (WIFSIGNALED (status) && WTERMSIG (status) == SIGUSR1);
+
return 0;
}
diff --git a/gdb/testsuite/gdb.threads/clone-new-thread-event.exp b/gdb/testsuite/gdb.threads/clone-new-thread-event.exp
index fdebd488d8a..db5ae39aded 100644
--- a/gdb/testsuite/gdb.threads/clone-new-thread-event.exp
+++ b/gdb/testsuite/gdb.threads/clone-new-thread-event.exp
@@ -31,3 +31,5 @@ if { ![runto_main] } {
gdb_test "continue" \
"Thread 2 received signal SIGUSR1, User defined signal 1.*" \
"catch SIGUSR1"
+
+gdb_continue_to_end "" continue 1
diff --git a/gdb/testsuite/gdb.threads/current-lwp-dead.c b/gdb/testsuite/gdb.threads/current-lwp-dead.c
index 76babc42ce8..ceb3ae47a4d 100644
--- a/gdb/testsuite/gdb.threads/current-lwp-dead.c
+++ b/gdb/testsuite/gdb.threads/current-lwp-dead.c
@@ -15,6 +15,18 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+ The original issue we're trying to test is described in this
+ thread:
+
+ https://sourceware.org/legacy-ml/gdb-patches/2009-06/msg00802.html
+
+ The NEW_THREAD_EVENT code the comments below refer to no longer
+ exists in GDB, so the following comments are kept for historical
+ reasons, and to guide future updates to the testcase.
+
+ ---
+
Do not use threads as we need to exploit a bug in LWP code masked by the
threads code otherwise.
@@ -29,60 +41,81 @@
#include <assert.h>
#include <unistd.h>
#include <stdlib.h>
-
-#include <features.h>
-#ifdef __UCLIBC__
-#if !(defined(__UCLIBC_HAS_MMU__) || defined(__ARCH_HAS_MMU__))
-#define HAS_NOMMU
-#endif
-#endif
+#include <sys/types.h>
+#include <sys/wait.h>
#define STACK_SIZE 0x1000
-static int
-fn_return (void *unused)
-{
- return 0; /* at-fn_return */
-}
+/* True if the 'fn_return' thread has been reached at the point after
+ its parent is already gone. */
+volatile int fn_return_reached = 0;
+
+/* True if the 'fn' thread has exited. */
+volatile int fn_exited = 0;
+
+/* Wrapper around clone. */
static int
-fn (void *unused)
+do_clone (int (*fn)(void *))
{
- int i;
unsigned char *stack;
int new_pid;
- i = sleep (1);
- assert (i == 0);
-
stack = malloc (STACK_SIZE);
assert (stack != NULL);
- new_pid = clone (fn_return, stack + STACK_SIZE, CLONE_FILES
-#if defined(__UCLIBC__) && defined(HAS_NOMMU)
- | CLONE_VM
-#endif /* defined(__UCLIBC__) && defined(HAS_NOMMU) */
- , NULL, NULL, NULL, NULL);
+ new_pid = clone (fn, stack + STACK_SIZE, CLONE_FILES | CLONE_VM,
+ NULL, NULL, NULL, NULL);
assert (new_pid > 0);
+ return new_pid;
+}
+
+static int
+fn_return (void *unused)
+{
+ /* Wait until our direct parent exits. We want the breakpoint set a
+ couple lines below to hit with the previously-selected thread
+ gone. */
+ while (!fn_exited)
+ usleep (1);
+
+ fn_return_reached = 1; /* at-fn_return */
+ return 0;
+}
+
+static int
+fn (void *unused)
+{
+ do_clone (fn_return);
return 0;
}
int
main (int argc, char **argv)
{
- unsigned char *stack;
- int new_pid;
-
- stack = malloc (STACK_SIZE);
- assert (stack != NULL);
-
- new_pid = clone (fn, stack + STACK_SIZE, CLONE_FILES
-#if defined(__UCLIBC__) && defined(HAS_NOMMU)
- | CLONE_VM
-#endif /* defined(__UCLIBC__) && defined(HAS_NOMMU) */
- , NULL, NULL, NULL, NULL);
- assert (new_pid > 0);
+ int new_pid, status, ret;
+
+ new_pid = do_clone (fn);
+
+ /* Note the clone call above didn't use CLONE_THREAD, so it actually
+ put the new child in a new thread group. However, the new clone
+ is still reported with PTRACE_EVENT_CLONE to GDB, since we didn't
+ use CLONE_VFORK (results in PTRACE_EVENT_VFORK) nor set the
+ termination signal to SIGCHLD (results in PTRACE_EVENT_FORK), so
+ GDB thinks of it as a new thread of the same inferior. It's a
+ bit of an odd setup, but it's not important for what we're
+ testing, and, it let's us conveniently use waitpid to wait for
+ the child, which you can't with CLONE_THREAD. */
+ ret = waitpid (new_pid, &status, __WALL);
+ assert (ret == new_pid);
+ assert (WIFEXITED (status) && WEXITSTATUS (status) == 0);
+
+ fn_exited = 1;
+
+ /* Don't exit before the breakpoint at fn_return triggers. */
+ while (!fn_return_reached)
+ usleep (1);
return 0;
}
diff --git a/gdb/testsuite/gdb.threads/current-lwp-dead.exp b/gdb/testsuite/gdb.threads/current-lwp-dead.exp
index b69fdbb5988..6728dbe87ab 100644
--- a/gdb/testsuite/gdb.threads/current-lwp-dead.exp
+++ b/gdb/testsuite/gdb.threads/current-lwp-dead.exp
@@ -15,8 +15,14 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-# Please email any bugs, comments, and/or additions to this file to:
-# bug-gdb@gnu.org
+# Regression test for issue originally described here:
+#
+# https://sourceware.org/legacy-ml/gdb-patches/2009-06/msg00802.html
+#
+# The relevant code has since been removed from GDB, but it doesn't
+# hurt to keep the testcase.
+
+standard_testfile
# This only works with on Linux targets.
if ![istarget *-*-linux*] then {
@@ -31,5 +37,16 @@ if {[runto_main] <= 0} {
return -1
}
-gdb_breakpoint "fn_return"
+# Run to "fn" so that thread 2 is made current.
+gdb_breakpoint "fn"
+gdb_continue_to_breakpoint "fn" ".*do_clone.*"
+
+# Run to thread 3, at a point where thread 2 is gone.
+set line [gdb_get_line_number "at-fn_return"]
+gdb_breakpoint $line
gdb_continue_to_breakpoint "fn_return" ".*at-fn_return.*"
+
+# Confirm thread 2 is really gone.
+gdb_test "info threads 2" "No threads match '2'\\."
+
+gdb_continue_to_end "" continue 1
diff --git a/gdb/testsuite/gdb.threads/fork-plus-threads.exp b/gdb/testsuite/gdb.threads/fork-plus-threads.exp
index bc09c89e69b..26fbef72941 100644
--- a/gdb/testsuite/gdb.threads/fork-plus-threads.exp
+++ b/gdb/testsuite/gdb.threads/fork-plus-threads.exp
@@ -76,6 +76,16 @@ proc do_test { detach-on-fork } {
set saw_cannot_remove_breakpoints 0
set saw_thread_stopped 0
+ set expected_num_inferior_exits [expr ${detach-on-fork} == "off" ? 11 : 1]
+
+ # Flags indicating if we have see the exit for each inferior.
+ for {set i 1} {$i <= $expected_num_inferior_exits} {incr i} {
+ set inferior_exits_seen($i) 0
+ }
+
+ # Number of inferior exits seen so far.
+ set num_inferior_exits_seen 0
+
set test "inferior 1 exited"
gdb_test_multiple "" $test {
-re "Cannot remove breakpoints" {
@@ -94,11 +104,30 @@ proc do_test { detach-on-fork } {
# Avoid timeout with check-read1
exp_continue
}
- -re "Inferior 1 \(\[^\r\n\]+\) exited normally" {
- pass $test
+ -re "Inferior ($::decimal) \(\[^\r\n\]+\) exited normally" {
+ set infnum $expect_out(1,string)
+ incr num_inferior_exits_seen
+ incr inferior_exits_seen($infnum) 1
+
+ if { $num_inferior_exits_seen == $expected_num_inferior_exits } {
+ pass $test
+ } else {
+ exp_continue
+ }
}
}
+ # Verify that we got all the inferior exits we expected.
+ set num_ok_exits 0
+ for {set i 1} {$i <= $expected_num_inferior_exits} {incr i} {
+ if { $inferior_exits_seen($i) == 1 } {
+ incr num_ok_exits
+ }
+ }
+
+ gdb_assert { $num_ok_exits == $expected_num_inferior_exits } \
+ "seen all expected inferior exits"
+
gdb_assert !$saw_cannot_remove_breakpoints \
"no failure to remove breakpoints"
gdb_assert !$saw_thread_stopped \
diff --git a/gdb/testsuite/gdb.threads/ia64-sigill.exp b/gdb/testsuite/gdb.threads/ia64-sigill.exp
index 89b684064df..e92b4877b2c 100644
--- a/gdb/testsuite/gdb.threads/ia64-sigill.exp
+++ b/gdb/testsuite/gdb.threads/ia64-sigill.exp
@@ -55,7 +55,7 @@ gdb_breakpoint [gdb_get_line_number "break-at-exit"]
gdb_test_no_output "set debug infrun 1"
-# The ia64 SIGILL signal is visible only in the lin-lwp debug.
+# The ia64 SIGILL signal is visible only in the linux-nat debug output.
set prompt "$gdb_prompt \\\[infrun\\\] fetch_inferior_event: exit\r\n$"
gdb_test_multiple "continue" "continue" -prompt $prompt {
diff --git a/gdb/testsuite/gdb.threads/killed-outside.exp b/gdb/testsuite/gdb.threads/killed-outside.exp
index a3996fe17c4..3d4543e088c 100644
--- a/gdb/testsuite/gdb.threads/killed-outside.exp
+++ b/gdb/testsuite/gdb.threads/killed-outside.exp
@@ -43,9 +43,9 @@ set no_longer_exists_msg "The program no longer exists\."
set not_being_run_msg "The program is not being run\."
gdb_test_multiple "continue" "prompt after first continue" {
- -re "Continuing\.\r\n$no_such_process_msg\r\n$no_such_process_msg\r\n$gdb_prompt " {
+ -re "Continuing\.\r\n$no_such_process_msg\r\n$gdb_prompt " {
pass $gdb_test_name
- # Two times $no_such_process_msg. The bug condition was triggered, go
+ # Saw $no_such_process_msg. The bug condition was triggered, go
# check for it.
gdb_test_multiple "" "messages" {
-re ".*$killed_msg.*$no_longer_exists_msg\r\n" {
diff --git a/gdb/testsuite/gdb.threads/next-fork-other-thread.c b/gdb/testsuite/gdb.threads/next-fork-other-thread.c
new file mode 100644
index 00000000000..377c1bc1a31
--- /dev/null
+++ b/gdb/testsuite/gdb.threads/next-fork-other-thread.c
@@ -0,0 +1,92 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+ Copyright 2022 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#include <pthread.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <errno.h>
+#include <assert.h>
+#include <limits.h>
+
+/* Number of threads doing forks. */
+#define N_FORKERS 4
+
+static void *
+forker (void *arg)
+{
+ for (;;)
+ {
+ pid_t pid = FORK_FUNC ();
+
+ if (pid == 0)
+ _exit (11);
+
+ assert (pid > 0);
+
+ /* Wait for children to exit. */
+ int ret;
+ int stat;
+ do
+ {
+ ret = waitpid (pid, &stat, 0);
+ } while (ret == EINTR);
+
+ assert (ret == pid);
+ assert (WIFEXITED (stat));
+ assert (WEXITSTATUS (stat) == 11);
+
+ /* We need a sleep, otherwise the forking threads spam events and the
+ stepping thread doesn't make progress. Sleep for a bit less than
+ `sleep_a_bit` does, so that forks are likely to interrupt a "next". */
+ usleep (40 * 1000);
+ }
+
+ return NULL;
+}
+
+static void
+sleep_a_bit (void)
+{
+ usleep (1000 * 50);
+}
+
+int
+main (void)
+{
+ int i;
+
+ alarm (60);
+
+ pthread_t thread[N_FORKERS];
+ for (i = 0; i < N_FORKERS; ++i)
+ {
+ int ret = pthread_create (&thread[i], NULL, forker, NULL);
+ assert (ret == 0);
+ }
+
+ for (i = 0; i < INT_MAX; ++i) /* for loop */
+ {
+ sleep_a_bit (); /* break here */
+ sleep_a_bit (); /* other line */
+ }
+
+ for (i = 0; i < N_FORKERS; ++i)
+ pthread_join (thread[i], NULL);
+
+ return 0;
+}
diff --git a/gdb/testsuite/gdb.threads/next-fork-other-thread.exp b/gdb/testsuite/gdb.threads/next-fork-other-thread.exp
new file mode 100644
index 00000000000..5960bb9ba10
--- /dev/null
+++ b/gdb/testsuite/gdb.threads/next-fork-other-thread.exp
@@ -0,0 +1,116 @@
+# Copyright 2022 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Test doing a "next" on a thread during which forks or vforks happen in other
+# threads.
+
+standard_testfile
+
+# Line where to stop the main thread.
+set break_here_line [gdb_get_line_number "break here"]
+
+# Build executables, one for each fork flavor.
+foreach_with_prefix fork_func {fork vfork} {
+ set opts [list debug pthreads additional_flags=-DFORK_FUNC=${fork_func}]
+ if { [build_executable "failed to prepare" \
+ ${testfile}-${fork_func} ${srcfile} $opts] } {
+ return
+ }
+}
+
+# If testing against GDBserver, consume all it its output.
+
+proc drain_gdbserver_output { } {
+ if { [info exists ::server_spawn_id] } {
+ gdb_test_multiple "" "" {
+ -i "$::server_spawn_id"
+ -timeout 0
+ -re ".+" {
+ exp_continue
+ }
+ }
+ }
+}
+
+# Run the test with the given parameters:
+#
+# - FORK_FUNC: fork flavor, "fork" or "vfork".
+# - TARGET-NON-STOP: "maintenance set target-non-stop" value, "auto", "on" or
+# "off".
+# - NON-STOP: "set non-stop" value, "on" or "off".
+# - DISPLACED-STEPPING: "set displaced-stepping" value, "auto", "on" or "off".
+
+proc do_test { fork_func target-non-stop non-stop displaced-stepping } {
+ save_vars { ::GDBFLAGS } {
+ append ::GDBFLAGS " -ex \"maintenance set target-non-stop ${target-non-stop}\""
+ append ::GDBFLAGS " -ex \"set non-stop ${non-stop}\""
+ clean_restart ${::binfile}-${fork_func}
+ }
+
+ gdb_test_no_output "set displaced-stepping ${displaced-stepping}"
+
+ if { ![runto_main] } {
+ return
+ }
+
+ # The "Detached after (v)fork" messages get in the way in non-stop, disable
+ # them.
+ gdb_test_no_output "set print inferior-events off"
+
+ # Advance the next-ing thread to the point where we'll execute the nexts.
+ # Leave the breakpoint in: it will force GDB to step over it while next-ing,
+ # which exercises some additional code paths.
+ gdb_test "break $::break_here_line" "Breakpoint $::decimal at $::hex.*"
+ gdb_test "continue" "hit Breakpoint $::decimal, main.*"
+
+ # Next an arbitrary number of times over the lines of the loop.
+ #
+ # It is useful to bump this number to a larger value (e.g. 200) to stress
+ # test more, but it makes the test case run for considerably longer. If
+ # you increase the number of loops, you might want to adjust the alarm
+ # time in the .c file accordingly.
+ for { set i 0 } { $i < 20 } { incr i } {
+ # If testing against GDBserver, the forking threads cause a lot of
+ # "Detaching from process XYZ" messages to appear. If we don't consume
+ # that output, GDBserver eventually blocks on a full stderr. Drain it
+ # once every loop. It may not be needed for 20 iterations, but it's
+ # needed if you increase to 200 iterations.
+ drain_gdbserver_output
+
+ with_test_prefix "i=$i" {
+ if { [gdb_test "next" "other line.*" "next to other line"] != 0 } {
+ return
+ }
+
+ if { [gdb_test "next" "for loop.*" "next to for loop"] != 0 } {
+ return
+ }
+
+ if { [gdb_test "next" "break here.*" "next to break here"] != 0} {
+ return
+ }
+ }
+ }
+}
+
+foreach_with_prefix fork_func {fork vfork} {
+ foreach_with_prefix target-non-stop {auto on off} {
+ foreach_with_prefix non-stop {off on} {
+ foreach_with_prefix displaced-stepping {auto on off} {
+ do_test ${fork_func} ${target-non-stop} ${non-stop} ${displaced-stepping}
+ }
+ }
+ }
+}
diff --git a/gdb/testsuite/gdb.threads/process-exit-status-is-leader-exit-status.c b/gdb/testsuite/gdb.threads/process-exit-status-is-leader-exit-status.c
new file mode 100644
index 00000000000..c27c266ef28
--- /dev/null
+++ b/gdb/testsuite/gdb.threads/process-exit-status-is-leader-exit-status.c
@@ -0,0 +1,64 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+ Copyright 2022 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#include <pthread.h>
+#include <unistd.h>
+#include <sys/syscall.h>
+
+#define NUM_THREADS 32
+
+pthread_barrier_t barrier;
+
+static void
+do_exit (int exitcode)
+{
+ /* Synchronize all threads up to here so that they all exit at
+ roughly the same time. */
+ pthread_barrier_wait (&barrier);
+
+ /* All threads exit with SYS_exit, even the main thread, to avoid
+ exiting with a group-exit syscall, as that syscall changes the
+ exit status of all still-alive threads, thus potentially masking
+ a bug. */
+ syscall (SYS_exit, exitcode);
+}
+
+static void *
+start (void *arg)
+{
+ int thread_return_value = *(int *) arg;
+
+ do_exit (thread_return_value);
+}
+
+int
+main(void)
+{
+ pthread_t threads[NUM_THREADS];
+ int thread_return_val[NUM_THREADS];
+ int i;
+
+ pthread_barrier_init (&barrier, NULL, NUM_THREADS + 1);
+
+ for (i = 0; i < NUM_THREADS; ++i)
+ {
+ thread_return_val[i] = i + 2;
+ pthread_create (&threads[i], NULL, start, &thread_return_val[i]);
+ }
+
+ do_exit (1);
+}
diff --git a/gdb/testsuite/gdb.threads/process-exit-status-is-leader-exit-status.exp b/gdb/testsuite/gdb.threads/process-exit-status-is-leader-exit-status.exp
new file mode 100644
index 00000000000..655e3134c08
--- /dev/null
+++ b/gdb/testsuite/gdb.threads/process-exit-status-is-leader-exit-status.exp
@@ -0,0 +1,46 @@
+# Copyright (C) 2022 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# GDB must always report the process's exit status based on the exit
+# status of the thread group leader thread. Test that when multiple
+# threads exit simultaneously, GDB doesn't confuse the non-leader
+# threads' exit status for the process's exit status. GDB used to
+# have a race condition that led to randomly handling this
+# incorrectly.
+#
+# Since the improper behavior is racy in nature, this test is not
+# expected to be able to reproduce the error reliably. Multiple
+# executions (or increasing the number of iterations) might be
+# required to reproduce the error with a misbehaving GDB.
+
+if { ![istarget "*-*-linux*"] } {
+ return 0
+}
+
+standard_testfile
+
+if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug pthreads}] == -1} {
+ return -1
+}
+
+for {set iteration 0} {$iteration < 10} {incr iteration} {
+ with_test_prefix "iteration=$iteration" {
+ if {![runto_main]} {
+ return
+ }
+
+ gdb_test "continue" "\\\[Inferior 1 \\(.*\\) exited with code 01\\\]"
+ }
+}
diff --git a/gdb/testsuite/gdb.threads/step-over-exec.exp b/gdb/testsuite/gdb.threads/step-over-exec.exp
index 9e252e65f97..783f865585c 100644
--- a/gdb/testsuite/gdb.threads/step-over-exec.exp
+++ b/gdb/testsuite/gdb.threads/step-over-exec.exp
@@ -47,8 +47,8 @@ proc do_test { execr_thread different_text_segments displaced_stepping } {
set execd_opts [list debug]
if { $different_text_segments } {
- lappend execr_opts "ldflags=-Wl,-Ttext-segment=0x600000"
- lappend execd_opts "ldflags=-Wl,-Ttext-segment=0x800000"
+ lappend execr_opts "text_segment=0x600000"
+ lappend execd_opts "text_segment=0x800000"
}
if { $execr_thread == "leader" } {
diff --git a/gdb/testsuite/gdb.threads/vfork-multi-inferior-sleep.c b/gdb/testsuite/gdb.threads/vfork-multi-inferior-sleep.c
new file mode 100644
index 00000000000..a26ae07d53b
--- /dev/null
+++ b/gdb/testsuite/gdb.threads/vfork-multi-inferior-sleep.c
@@ -0,0 +1,25 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+ Copyright 2022 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#include <unistd.h>
+
+int
+main (void)
+{
+ sleep (30);
+ return 0;
+}
diff --git a/gdb/testsuite/gdb.threads/vfork-multi-inferior.c b/gdb/testsuite/gdb.threads/vfork-multi-inferior.c
new file mode 100644
index 00000000000..7428ba00f3d
--- /dev/null
+++ b/gdb/testsuite/gdb.threads/vfork-multi-inferior.c
@@ -0,0 +1,55 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+ Copyright 2022 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#include <unistd.h>
+#include <sys/wait.h>
+#include <assert.h>
+
+static void
+should_break_here (void)
+{
+}
+
+int
+main (void)
+{
+ int i;
+
+ for (i = 0; i < NR_LOOPS; i++)
+ {
+ int pid = vfork ();
+
+ if (pid != 0)
+ {
+ /* Parent */
+ int stat;
+ int ret = waitpid (pid, &stat, 0);
+ assert (ret == pid);
+ assert (WIFEXITED (stat));
+ assert (WEXITSTATUS (stat) == 12);
+
+ should_break_here ();
+ }
+ else
+ {
+ /* Child */
+ _exit (12);
+ }
+ }
+
+ return 0;
+}
diff --git a/gdb/testsuite/gdb.threads/vfork-multi-inferior.exp b/gdb/testsuite/gdb.threads/vfork-multi-inferior.exp
new file mode 100644
index 00000000000..22a1476eaac
--- /dev/null
+++ b/gdb/testsuite/gdb.threads/vfork-multi-inferior.exp
@@ -0,0 +1,115 @@
+# Copyright 2020-2022 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Test handling a vfork while another inferior is running. The bug that
+# prompted writing this test case was in the Linux native target. The target
+# assumed that the vfork-done event it received was for the current inferior
+# (an invalid assumption, the current inferior is the one randomly selected by
+# do_target_wait (at the time of writing). This caused the target to drop the
+# vfork-done event, because it was seen as unneeded and to restart the thread
+# as if nothing happened. This however resulted in the thread running with
+# breakpoints not inserted.
+#
+# To catch the bug, this test verifies that we can hit a breakpoint after a
+# vfork call, while a second inferior runs in the background.
+
+if [use_gdb_stub] {
+ unsupported "test uses multiple inferiors"
+ return
+}
+
+standard_testfile .c -sleep.c
+
+set srcfile_sleep $srcfile2
+set binfile_sleep ${binfile}-sleep
+
+# The reproducibility of the bug depends on which inferior randomly selects in
+# do_target_wait when consuming the vfork-done event. Since GDB doesn't call
+# srand(), we are likely to always see the same sequence of inferior selected by
+# do_target_wait, which can hide the bug if you are not "lucky". To work
+# around that, call vfork and hit the breakpoint in a loop, it makes it
+# somewhat likely that the wrong inferior will be selected eventually.
+set nr_loops 20
+
+# Compile the main program that calls vfork and hits a breakpoint.
+set opts [list debug additional_flags=-DNR_LOOPS=$nr_loops]
+if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable \
+ $opts] != "" } {
+ untested "failed to compile"
+ return -1
+}
+
+# Compile the secondary program, which just sleeps.
+if { [gdb_compile "${srcdir}/${subdir}/${srcfile_sleep}" "${binfile_sleep}" executable \
+ {debug}] != "" } {
+ untested "failed to compile"
+ return -1
+}
+
+# We exercise two methods of getting a second inferior to execute while the
+# first one vforks. METHOD can be:
+#
+# - non-stop: start GDB with non-stop on and run the second inferior in
+# background.
+# - schedule-multiple: set "schedule-multiple on", this will make "continue"
+# resume both inferiors.
+proc do_test {method} {
+ save_vars { ::GDBFLAGS } {
+ if { $method == "non-stop" } {
+ append ::GDBFLAGS " -ex \"set non-stop on\""
+ }
+ clean_restart
+ }
+
+ # Start the second inferior in background.
+ gdb_test "add-inferior" "Added inferior 2.*"
+ gdb_test "inferior 2" "Switching to inferior 2 .*"
+ gdb_file_cmd ${::binfile_sleep}
+ if { $method == "non-stop" } {
+ gdb_test "run &" "Starting program: .*" "run inferior 2"
+ } else {
+ gdb_test "start" "Temporary breakpoint $::decimal, main .*" \
+ "start inferior 2"
+ }
+
+ # Start the first inferior.
+ gdb_test "inferior 1" "Switching to inferior 1 .*"
+ gdb_file_cmd ${::binfile}
+ gdb_test "break should_break_here" "Breakpoint $::decimal at .*"
+ gdb_test "start" "Thread 1.1 .* hit Temporary breakpoint.*" \
+ "start inferior 1"
+
+ # Only enable schedule-multiple this late, because of:
+ # https://sourceware.org/bugzilla/show_bug.cgi?id=28777
+ if { $method == "schedule-multiple" } {
+ gdb_test_no_output "set schedule-multiple on"
+ }
+
+
+ # Continue over vfork and until the breakpoint. The number of loops here
+ # matches the number of loops in the program. So if a breakpoint is missed
+ # at some point, a "continue" will wrongfully continue until the end of the
+ # program, which will fail the test.
+ for {set i 0} {$i < $::nr_loops} {incr i} {
+ with_test_prefix "i=$i" {
+ gdb_test "continue" \
+ "Thread 1.1 .* hit Breakpoint $::decimal, should_break_here.*"
+ }
+ }
+}
+
+foreach_with_prefix method {schedule-multiple non-stop} {
+ do_test $method
+}
diff --git a/gdb/testsuite/gdb.threads/vfork-multi-thread.c b/gdb/testsuite/gdb.threads/vfork-multi-thread.c
new file mode 100644
index 00000000000..7e38f8a9939
--- /dev/null
+++ b/gdb/testsuite/gdb.threads/vfork-multi-thread.c
@@ -0,0 +1,88 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+ Copyright 2022 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#include <assert.h>
+#include <pthread.h>
+#include <unistd.h>
+#include <sys/wait.h>
+
+static volatile int release_vfork = 0;
+static volatile int release_main = 0;
+
+static void *
+vforker (void *arg)
+{
+ while (!release_vfork)
+ usleep (1);
+
+ pid_t pid = vfork ();
+ if (pid == 0)
+ {
+ /* A vfork child is not supposed to mess with the state of the program,
+ but it is helpful for the purpose of this test. */
+ release_main = 1;
+ _exit(7);
+ }
+
+ int stat;
+ int ret = waitpid (pid, &stat, 0);
+ assert (ret == pid);
+ assert (WIFEXITED (stat));
+ assert (WEXITSTATUS (stat) == 7);
+
+ return NULL;
+}
+
+static void
+should_break_here (void)
+{}
+
+int
+main (void)
+{
+
+ pthread_t thread;
+ int ret = pthread_create (&thread, NULL, vforker, NULL);
+ assert (ret == 0);
+
+ /* We break here first, while the thread is stuck on `!release_fork`. */
+ release_vfork = 1;
+
+ /* We set a breakpoint on should_break_here.
+
+ We then set "release_fork" from the debugger and continue. The main
+ thread hangs on `!release_main` while the non-main thread vforks. During
+ the window of time where the two processes have a shared address space
+ (after vfork, before _exit), GDB removes the breakpoints from the address
+ space. During that window, only the vfork-ing thread (the non-main
+ thread) is frozen by the kernel. The main thread is free to execute. The
+ child process sets `release_main`, releasing the main thread. A buggy GDB
+ would let the main thread execute during that window, leading to the
+ breakpoint on should_break_here being missed. A fixed GDB does not resume
+ the threads of the vforking process other than the vforking thread. When
+ the vfork child exits, the fixed GDB resumes the main thread, after
+ breakpoints are reinserted, so the breakpoint is not missed. */
+
+ while (!release_main)
+ usleep (1);
+
+ should_break_here ();
+
+ pthread_join (thread, NULL);
+
+ return 6;
+}
diff --git a/gdb/testsuite/gdb.threads/vfork-multi-thread.exp b/gdb/testsuite/gdb.threads/vfork-multi-thread.exp
new file mode 100644
index 00000000000..d405411be01
--- /dev/null
+++ b/gdb/testsuite/gdb.threads/vfork-multi-thread.exp
@@ -0,0 +1,96 @@
+# Copyright 2022 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Test that a multi-threaded program doing a vfork doesn't miss breakpoints.
+#
+# When a program vforks, its address space is shared with the parent. When we
+# detach a vfork child, we must keep breakpoints out of that shared address space
+# until the child either exits or execs, so that the child does not hit a
+# breakpoint while out of GDB's control. During that time, threads from
+# the parent must be held stopped, otherwise they could miss breakpoints.
+#
+# The thread that did the vfork is suspended by the kernel, so it's not a
+# concern. The other threads need to be manually stopped by GDB and resumed
+# once the vfork critical region is done.
+#
+# This test spawns one thread that calls vfork. Meanwhile, the main thread
+# crosses a breakpoint. A buggy GDB would let the main thread run while
+# breakpoints are removed, so the main thread would miss the breakpoint and run
+# until exit.
+
+standard_testfile
+
+if { [build_executable "failed to prepare" ${testfile} ${srcfile} {debug pthreads}] } {
+ return
+}
+
+set any "\[^\r\n\]*"
+
+# A bunch of util procedures to continue an inferior to an expected point.
+
+proc continue_to_parent_breakpoint {} {
+ gdb_test "continue" \
+ "hit Breakpoint .* should_break_here .*" \
+ "continue parent to breakpoint"
+}
+
+proc continue_to_parent_end {} {
+ gdb_test "continue" "Inferior 1.*exited with code 06.*" \
+ "continue parent to end"
+}
+
+# Run the test with the given GDB settings.
+
+proc do_test { target-non-stop non-stop follow-fork-mode detach-on-fork schedule-multiple } {
+ save_vars { ::GDBFLAGS } {
+ append ::GDBFLAGS " -ex \"maintenance set target-non-stop ${target-non-stop}\""
+ append ::GDBFLAGS " -ex \"set non-stop ${non-stop}\""
+ clean_restart ${::binfile}
+ }
+
+ gdb_test_no_output "set follow-fork-mode ${follow-fork-mode}"
+ gdb_test_no_output "set detach-on-fork ${detach-on-fork}"
+ gdb_test_no_output "set schedule-multiple ${schedule-multiple}"
+
+ # The message about thread 2 of inferior 1 exiting happens at a somewhat
+ # unpredictable moment, it's simpler to silence it than to try to match it.
+ gdb_test_no_output "set print thread-events off"
+
+ if { ![runto_main] } {
+ return
+ }
+
+ # The main thread is expected to hit this breakpoint.
+ gdb_test "break should_break_here" "Breakpoint $::decimal at .*"
+
+ continue_to_parent_breakpoint
+ continue_to_parent_end
+}
+
+# We only test with follow-fork-mode=parent and detach-on-fork=on at the
+# moment, but the loops below are written to make it easy to add other values
+# on these axes in the future.
+
+foreach_with_prefix target-non-stop {auto on off} {
+ foreach_with_prefix non-stop {off on} {
+ foreach_with_prefix follow-fork-mode {parent} {
+ foreach_with_prefix detach-on-fork {on} {
+ foreach_with_prefix schedule-multiple {off on} {
+ do_test ${target-non-stop} ${non-stop} ${follow-fork-mode} ${detach-on-fork} ${schedule-multiple}
+ }
+ }
+ }
+ }
+}
diff --git a/gdb/testsuite/gdb.tui/basic.exp b/gdb/testsuite/gdb.tui/basic.exp
index 0e9f2e3eab2..7afb28b0858 100644
--- a/gdb/testsuite/gdb.tui/basic.exp
+++ b/gdb/testsuite/gdb.tui/basic.exp
@@ -104,5 +104,5 @@ Term::command "layout split"
Term::check_contents "split layout contents" \
"$main_line *$main_re.*$hex <main>"
-Term::check_box "source box in split layout" 0 0 80 7
-Term::check_box "asm box in split layout" 0 6 80 9
+Term::check_box "source box in split layout" 0 0 80 8
+Term::check_box "asm box in split layout" 0 7 80 8
diff --git a/gdb/testsuite/gdb.tui/empty.exp b/gdb/testsuite/gdb.tui/empty.exp
index ef14fe4dac0..3efa55d812e 100644
--- a/gdb/testsuite/gdb.tui/empty.exp
+++ b/gdb/testsuite/gdb.tui/empty.exp
@@ -35,26 +35,26 @@ if {![Term::enter_tui]} {
set layouts {
{src src {{0 0 80 15}} {{0 0 90 26}}
{{"no source" "No Source Available"}}}
- {regs src-regs {{0 0 80 7} {0 6 80 9}} {{0 0 90 13} {0 12 90 13}}
+ {regs src-regs {{0 0 80 8} {0 7 80 8}} {{0 0 90 13} {0 12 90 13}}
{
{"no source" "No Source Available"}
{"no regs" "Register Values Unavailable"}
}}
- {asm asm {{0 0 80 13}} {{0 0 90 26}}
+ {asm asm {{0 0 80 15}} {{0 0 90 26}}
{
{"no asm" "No Assembly Available"}
}}
- {regs asm-regs {{0 0 80 7} {0 6 80 9}} {{0 0 90 13} {0 12 90 13}}
+ {regs asm-regs {{0 0 80 8} {0 7 80 8}} {{0 0 90 13} {0 12 90 13}}
{
{"no asm" "No Assembly Available"}
{"no regs" "Register Values Unavailable"}
}}
- {split split {{0 0 80 6} {0 5 80 8}} {{0 0 90 13} {0 12 90 13}}
+ {split split {{0 0 80 8} {0 7 80 8}} {{0 0 90 13} {0 12 90 13}}
{
{"no source" "No Source Available"}
{"no asm" "No Assembly Available"}
}}
- {regs split-regs {{0 0 80 6} {0 5 80 8}} {{0 0 90 13} {0 12 90 13}}
+ {regs split-regs {{0 0 80 8} {0 7 80 8}} {{0 0 90 13} {0 12 90 13}}
{
{"no asm" "No Assembly Available"}
{"no regs" "Register Values Unavailable"}
@@ -97,5 +97,9 @@ foreach layout $layouts {
check_text $text_list
}
Term::resize 24 80
+ with_test_prefix "80x24 again" {
+ check_boxes $small_boxes
+ check_text $text_list
+ }
}
}
diff --git a/gdb/testsuite/gdb.tui/info-win.exp b/gdb/testsuite/gdb.tui/info-win.exp
new file mode 100644
index 00000000000..2607d5be493
--- /dev/null
+++ b/gdb/testsuite/gdb.tui/info-win.exp
@@ -0,0 +1,61 @@
+# Copyright 2022 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Test 'info win'.
+
+tuiterm_env
+
+standard_testfile
+
+Term::clean_restart 24 80
+
+if {![Term::enter_tui]} {
+ unsupported "TUI not supported"
+ return
+}
+
+Term::command "layout src"
+Term::command "info win"
+Term::check_region_contents "info win, layout src" \
+ 0 16 80 8 [multi_line "info win\\s+" \
+ "Name\\s+Lines\\s+Columns\\s+Focus\\s+" \
+ "src\\s+15\\s+80\\s+\\(has focus\\)\\s+" \
+ "status\\s+1\\s+80\\s+" \
+ "cmd\\s+8\\s+80\\s+"]
+
+Term::command "tui new-layout h { -horizontal src 1 asm 1 } 1 status 0 cmd 1"
+Term::command "layout h"
+Term::command "winheight cmd + 3"
+
+# As the tuiterm.exp library just waits for the prompt and command to
+# be echo'ed bcak to the screen, multiple 'info win' calls like this
+# have a problem. Dejagnu will send the command to gdb, but will then
+# immediately see the '(gdb) info win' output from the first use
+# above. This means we end up rushing ahead, and some tests might
+# fail.
+#
+# To work around this, I'm sending a unique command 'p 1' here, that
+# only happens after the second 'info win' call. When the 'p 1'
+# completes, I know the second 'info win' has also completed.
+Term::command "info win"
+Term::command "p 1"
+
+Term::check_region_contents "info win, layout h" \
+ 0 13 80 11 [multi_line "info win\\s+" \
+ "Name\\s+Lines\\s+Columns\\s+Focus\\s+" \
+ "src\\s+12\\s+40\\s+\\(has focus\\)\\s+" \
+ "asm\\s+12\\s+41\\s+" \
+ "status\\s+1\\s+80\\s+" \
+ "cmd\\s+11\\s+80\\s+"]
diff --git a/gdb/testsuite/gdb.tui/new-layout.exp b/gdb/testsuite/gdb.tui/new-layout.exp
index 2b5e07db612..e662b1f0b18 100644
--- a/gdb/testsuite/gdb.tui/new-layout.exp
+++ b/gdb/testsuite/gdb.tui/new-layout.exp
@@ -55,20 +55,47 @@ if { [tcl_version_at_least 8 6] } {
"Missing '\}' in layout specification"
}
-gdb_test_no_output "tui new-layout example asm 1 status 0 cmd 1"
-
-gdb_test "help layout example" \
- "Apply the \"example\" layout.*tui new-layout example asm 1 status 0 cmd 1"
-
-gdb_test_no_output "tui new-layout example2 {asm 1 status 0} 1 cmd 1"
-
-gdb_test "help layout example2" \
- "Apply the \"example2\" layout.*tui new-layout example2 {asm 1 status 0} 1 cmd 1"
-
-gdb_test_no_output "tui new-layout h {-horizontal asm 1 src 1} 1 status 0 cmd 1"
+# Each entry of this list describes a layout, and some associated
+# tests. The items within each entry are:
+# 1. layout name,
+# 2. a string used to create the layout,
+# 3. a list of boxes to check for once the layout is selected,
+# 4. a regexp to match against the whole screen contents, this
+# can be empty to skip this check.
+set layouts \
+ [list \
+ [list example "asm 1 status 0 cmd 1" \
+ {{0 0 80 15}} "$hex <main>"] \
+ [list example2 "{asm 1 status 0} 1 cmd 1" \
+ {{0 0 80 15}} ""] \
+ [list h "{-horizontal asm 1 src 1} 1 status 0 cmd 1" \
+ {{0 0 40 15} {39 0 41 15}} \
+ "$hex <main>.*21.*return 0"] \
+ [list example3 "{-horizontal src 1 cmd 1} 1 status 0 asm 1" \
+ {{0 0 40 11} {0 12 80 12}} \
+ "21.*return 0.*$hex <main>"] \
+ [list example4 "src 1 status 0 {-horizontal cmd 1 regs 1} 1" \
+ {{0 0 80 11} {40 12 40 12}} ""] \
+ [list example5 "{-horizontal src 1 cmd 1} 1 status 0" \
+ {{0 0 40 23}} ""] \
+ [list cmd_only "cmd 1" {} ""]]
+
+# Helper function to verify a list of boxes.
+proc check_boxes {boxes} {
+ set boxno 1
+ foreach box $boxes {
+ eval Term::check_box [list "box $boxno"] $box
+ incr boxno
+ }
+}
-gdb_test "help layout h" \
- "Apply the \"h\" layout.*tui new-layout h {-horizontal asm 1 src 1} 1 status 0 cmd 1"
+# Now create the layouts.
+foreach layout $layouts {
+ lassign $layout name desc
+ gdb_test_no_output "tui new-layout $name $desc"
+ gdb_test "help layout $name" \
+ "Apply the \"$name\" layout.*tui new-layout $name $desc"
+}
if {![Term::enter_tui]} {
unsupported "TUI not supported"
@@ -79,20 +106,39 @@ set text [Term::get_all_lines]
gdb_assert {![string match "No Source Available" $text]} \
"initial source listing"
-Term::command "layout example"
-Term::check_contents "example layout shows assembly" \
- "$hex <main>"
+foreach_with_prefix layout $layouts {
+ lassign $layout name desc boxes content_pattern
+
+ # Reset the layout to a known starting configuration.
+ Term::command "layout src"
+ Term::command "winheight cmd 8"
-Term::command "layout h"
-Term::check_box "left window box" 0 0 40 15
-Term::check_box "right window box" 39 0 41 15
-Term::check_contents "horizontal display" \
- "$hex <main>.*21.*return 0"
+ # Apply our test layout.
+ Term::command "layout $name"
+ check_boxes $boxes
-Term::command "winheight src - 5"
-Term::check_box "left window box after shrink" 0 0 40 10
-Term::check_box "right window box after shrink" 39 0 41 10
+ if {$content_pattern != ""} {
+ Term::check_contents "contents in layout $name" \
+ "${content_pattern}"
+ }
-Term::command "winheight src + 5"
-Term::check_box "left window box after grow" 0 0 40 15
-Term::check_box "right window box after grow" 39 0 41 15
+ # Some additional tests for the 'h' layout.
+ if {$name == "h"} {
+ Term::command "winheight src - 5"
+ Term::check_box "left window box after shrink" 0 0 40 10
+ Term::check_box "right window box after shrink" 39 0 41 10
+
+ Term::command "winheight src + 5"
+ Term::check_box "left window box after grow" 0 0 40 15
+ Term::check_box "right window box after grow" 39 0 41 15
+ } elseif {$name == "cmd_only"} {
+ Term::check_region_contents "bottom of cmd window is blank" \
+ 0 14 80 10 "^\\s+$"
+ Term::command "info win"
+ Term::check_region_contents "info win output" \
+ 0 0 80 24 [multi_line "info win\\s+" \
+ "Name\\s+Lines\\s+Columns\\s+Focus\\s+" \
+ "cmd\\s+24\\s+80\\s+\\(has focus\\)\\s+" \
+ "$gdb_prompt\\s+"]
+ }
+}
diff --git a/gdb/testsuite/gdb.tui/regs.exp b/gdb/testsuite/gdb.tui/regs.exp
index 178eba03f19..4f34ced990c 100644
--- a/gdb/testsuite/gdb.tui/regs.exp
+++ b/gdb/testsuite/gdb.tui/regs.exp
@@ -38,9 +38,35 @@ if {![Term::enter_tui]} {
Term::check_contents "source at startup" "\\|.*21 *return 0"
Term::command "layout regs"
-Term::check_box "register box" 0 0 80 7
-Term::check_box "source box in regs layout" 0 6 80 9
+Term::check_box "register box" 0 0 80 8
+Term::check_box "source box in regs layout" 0 7 80 8
set text [Term::get_line 1]
# Just check for any register window content at all.
Term::check_contents "any register contents" "\\|.*\[^ \].*\\|"
+
+
+# Check that we can successfully cause the register window to appear
+# using the 'tui reg next' and 'tui reg prev' commands.
+foreach_with_prefix cmd { next prev } {
+ Term::clean_restart 24 80 $testfile
+
+ if {![runto_main]} {
+ perror "test suppressed"
+ return
+ }
+
+ if {![Term::enter_tui]} {
+ unsupported "TUI not supported"
+ return
+ }
+
+ Term::command "tui reg ${cmd}"
+ Term::check_box "register box" 0 0 80 8
+ Term::check_box "source box in regs layout" 0 7 80 8
+ Term::check_region_contents "check register group title" \
+ 0 0 80 1 "Register group: "
+ set contents [Term::get_region 0 15 80 8 "\r\n"]
+ gdb_assert {![regexp -- "unknown register group '${cmd}'" $contents]} \
+ "check register group is known"
+}
diff --git a/gdb/testsuite/gdb.tui/scroll.exp b/gdb/testsuite/gdb.tui/scroll.exp
index 4eaee0c14ee..c23cd2b9abf 100644
--- a/gdb/testsuite/gdb.tui/scroll.exp
+++ b/gdb/testsuite/gdb.tui/scroll.exp
@@ -55,6 +55,10 @@ Term::check_region_contents "check cmd window" 0 16 80 8 \
Term::command "tui new-layout flip cmd 1 src 1"
Term::command "layout flip"
+Term::check_box "src window" 0 8 80 16
+Term::command "winheight cmd 8"
+Term::check_box "src window after resize" 0 8 80 16
+
for {set i 10} {$i < 20} {incr i 1} {
Term::command "p $i"
}
diff --git a/gdb/testsuite/gdb.tui/tuiterm.exp b/gdb/testsuite/gdb.tui/tuiterm.exp
new file mode 100644
index 00000000000..98f1cd7fe8c
--- /dev/null
+++ b/gdb/testsuite/gdb.tui/tuiterm.exp
@@ -0,0 +1,729 @@
+# Copyright 2022 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Unit-test Term, the testsuite's terminal implementation that is used to test
+# the TUI.
+
+tuiterm_env
+
+# Validate the cursor position.
+#
+# EXPECTED_CUR_COL and EXPECTED_CUR_ROW are the expected cursor column and row
+# positions.
+
+proc check_cursor_position { test expected_cur_col expected_cur_row } {
+ with_test_prefix $test {
+ gdb_assert {$expected_cur_col == ${Term::_cur_col}} "column"
+ gdb_assert {$expected_cur_row == ${Term::_cur_row}} "row"
+ }
+}
+
+# Validate the terminal contents and cursor position.
+#
+# EXPECTED_CONTENTS must be a list of strings, one element for each terminal
+# line.
+#
+# EXPECTED_CUR_COL and EXPECTED_CUR_ROW are passed to check_cursor_position.
+
+proc check { test expected_contents expected_cur_col expected_cur_row } {
+ with_test_prefix $test {
+ # Check term contents.
+ set regexp "^"
+
+ foreach line $expected_contents {
+ append regexp $line
+ append regexp "\n"
+ }
+
+ append regexp "$"
+ Term::check_contents "contents" $regexp
+ }
+
+ check_cursor_position $test $expected_cur_col $expected_cur_row
+}
+
+proc setup_terminal { cols rows } {
+ setenv TERM ansi
+ Term::_setup $rows $cols
+}
+
+# Most tests are fine with a small terminal. This proc initializes the terminal
+# with 8 columns and 4 rows, with the following content:
+#
+# abcdefgh
+# ijklmnop
+# qrstuvwx
+# yz01234
+#
+# The bottom right cell is left blank: trying to write to it using _insert
+# would move the cursor past the screen, causing a scroll, but scrolling is
+# not implemented at the moment.
+
+proc setup_small {} {
+ setup_terminal 8 4
+
+ Term::_insert "abcdefgh"
+ Term::_insert "ijklmnop"
+ Term::_insert "qrstuvwx"
+ Term::_insert "yz01234"
+
+ check "check after setup" {
+ "abcdefgh"
+ "ijklmnop"
+ "qrstuvwx"
+ "yz01234 "
+ } 7 3
+}
+
+# Some tests require a larger terminal. This proc initializes the terminal with
+# 80 columns and 25 rows, but leaves the content empty.
+
+proc setup_large {} {
+ setup_terminal 80 25
+}
+
+# Each proc below tests a control character or sequence individually.
+
+proc test_backspace {} {
+ # Note: the backspace (BS) control character only moves the cursor left,
+ # it does not delete characters.
+
+ Term::_move_cursor 1 2
+
+ Term::_ctl_0x08
+ check "backspace one" {
+ "abcdefgh"
+ "ijklmnop"
+ "qrstuvwx"
+ "yz01234 "
+ } 0 2
+
+ # Cursor should not move if it is already at column 0.
+ Term::_ctl_0x08
+ check "backspace 2" {
+ "abcdefgh"
+ "ijklmnop"
+ "qrstuvwx"
+ "yz01234 "
+ } 0 2
+}
+
+proc test_linefeed { } {
+ Term::_move_cursor 1 2
+ Term::_ctl_0x0a
+ check "linefeed" {
+ "abcdefgh"
+ "ijklmnop"
+ "qrstuvwx"
+ "yz01234 "
+ } 1 3
+}
+
+proc test_carriage_return { } {
+ Term::_move_cursor 1 2
+ Term::_ctl_0x0d
+ check "carriage return 1" {
+ "abcdefgh"
+ "ijklmnop"
+ "qrstuvwx"
+ "yz01234 "
+ } 0 2
+
+ Term::_ctl_0x0d
+ check "carriage return 2" {
+ "abcdefgh"
+ "ijklmnop"
+ "qrstuvwx"
+ "yz01234 "
+ } 0 2
+}
+
+proc test_insert_characters { } {
+ Term::_move_cursor 1 2
+
+ Term::_csi_@
+ check "insert characters 1" {
+ "abcdefgh"
+ "ijklmnop"
+ "q rstuvw"
+ "yz01234 "
+ } 1 2
+
+ Term::_csi_@ 20
+ check "insert characters 2" {
+ "abcdefgh"
+ "ijklmnop"
+ "q "
+ "yz01234 "
+ } 1 2
+
+ Term::_move_cursor 0 1
+ Term::_csi_@ 6
+ check "insert characters 3" {
+ "abcdefgh"
+ " ij"
+ "q "
+ "yz01234 "
+ } 0 1
+}
+
+proc test_pan_down { } {
+ Term::_move_cursor 1 2
+ Term::_csi_S
+ check "pan down, default arg" {
+ "ijklmnop"
+ "qrstuvwx"
+ "yz01234 "
+ " "
+ } 1 2
+
+ Term::_csi_S 2
+ check "pan down, explicit arg" {
+ "yz01234 "
+ " "
+ " "
+ " "
+ } 1 2
+
+ Term::_csi_S 100
+ check "pan down, excessive arg" {
+ " "
+ " "
+ " "
+ " "
+ } 1 2
+}
+
+proc test_pan_up { } {
+ Term::_move_cursor 1 2
+ Term::_csi_T
+ check "pan down, default arg" {
+ " "
+ "abcdefgh"
+ "ijklmnop"
+ "qrstuvwx"
+ } 1 2
+
+ Term::_csi_T 2
+ check "pan down, explicit arg" {
+ " "
+ " "
+ " "
+ "abcdefgh"
+ } 1 2
+
+ Term::_csi_T 100
+ check "pan down, excessive arg" {
+ " "
+ " "
+ " "
+ " "
+ } 1 2
+}
+
+proc test_cursor_up { } {
+ Term::_move_cursor 2 3
+
+ Term::_csi_A
+ check "cursor up 1" {
+ "abcdefgh"
+ "ijklmnop"
+ "qrstuvwx"
+ "yz01234 "
+ } 2 2
+
+ Term::_csi_A 2
+ check "cursor up 2" {
+ "abcdefgh"
+ "ijklmnop"
+ "qrstuvwx"
+ "yz01234 "
+ } 2 0
+
+ Term::_csi_A 1
+ check "cursor up 3" {
+ "abcdefgh"
+ "ijklmnop"
+ "qrstuvwx"
+ "yz01234 "
+ } 2 0
+}
+
+proc test_cursor_down { } {
+ Term::_move_cursor 1 0
+
+ Term::_csi_B
+ check "cursor down 1" {
+ "abcdefgh"
+ "ijklmnop"
+ "qrstuvwx"
+ "yz01234 "
+ } 1 1
+
+ Term::_csi_B 2
+ check "cursor down 2" {
+ "abcdefgh"
+ "ijklmnop"
+ "qrstuvwx"
+ "yz01234 "
+ } 1 3
+
+ Term::_csi_B 1
+ check "cursor down 3" {
+ "abcdefgh"
+ "ijklmnop"
+ "qrstuvwx"
+ "yz01234 "
+ } 1 3
+}
+
+proc test_cursor_forward { } {
+ Term::_move_cursor 0 1
+
+ Term::_csi_C
+ check "cursor forward 1" {
+ "abcdefgh"
+ "ijklmnop"
+ "qrstuvwx"
+ "yz01234 "
+ } 1 1
+
+ Term::_csi_C 6
+ check "cursor forward 2" {
+ "abcdefgh"
+ "ijklmnop"
+ "qrstuvwx"
+ "yz01234 "
+ } 7 1
+
+ Term::_csi_C 1
+ check "cursor forward 3" {
+ "abcdefgh"
+ "ijklmnop"
+ "qrstuvwx"
+ "yz01234 "
+ } 7 1
+}
+
+proc test_cursor_backward { } {
+ Term::_move_cursor 7 1
+
+ Term::_csi_D
+ check "cursor backward 1" {
+ "abcdefgh"
+ "ijklmnop"
+ "qrstuvwx"
+ "yz01234 "
+ } 6 1
+
+ Term::_csi_D 6
+ check "cursor backward 2" {
+ "abcdefgh"
+ "ijklmnop"
+ "qrstuvwx"
+ "yz01234 "
+ } 0 1
+
+ Term::_csi_D 1
+ check "cursor backward 3" {
+ "abcdefgh"
+ "ijklmnop"
+ "qrstuvwx"
+ "yz01234 "
+ } 0 1
+}
+
+proc test_cursor_next_line { } {
+ Term::_move_cursor 2 0
+
+ Term::_csi_E
+ check "cursor next line 1" {
+ "abcdefgh"
+ "ijklmnop"
+ "qrstuvwx"
+ "yz01234 "
+ } 0 1
+
+ Term::_move_cursor 2 1
+ Term::_csi_E 2
+ check "cursor next line 2" {
+ "abcdefgh"
+ "ijklmnop"
+ "qrstuvwx"
+ "yz01234 "
+ } 0 3
+
+ Term::_move_cursor 2 3
+ Term::_csi_E 1
+ check "cursor next line 3" {
+ "abcdefgh"
+ "ijklmnop"
+ "qrstuvwx"
+ "yz01234 "
+ } 0 3
+}
+
+proc test_cursor_previous_line { } {
+ Term::_move_cursor 2 3
+
+ Term::_csi_F
+ check "cursor previous line 1" {
+ "abcdefgh"
+ "ijklmnop"
+ "qrstuvwx"
+ "yz01234 "
+ } 0 2
+
+ Term::_move_cursor 2 2
+ Term::_csi_F 2
+ check "cursor previous line 2" {
+ "abcdefgh"
+ "ijklmnop"
+ "qrstuvwx"
+ "yz01234 "
+ } 0 0
+
+ Term::_move_cursor 2 0
+ Term::_csi_F 1
+ check "cursor previous line 3" {
+ "abcdefgh"
+ "ijklmnop"
+ "qrstuvwx"
+ "yz01234 "
+ } 0 0
+}
+
+proc test_horizontal_absolute { } {
+ Term::_move_cursor 2 2
+ Term::_csi_G
+ check "cursor horizontal absolute 1" {
+ "abcdefgh"
+ "ijklmnop"
+ "qrstuvwx"
+ "yz01234 "
+ } 0 2
+
+ Term::_move_cursor 2 2
+ Term::_csi_G 4
+ check "cursor horizontal absolute 2" {
+ "abcdefgh"
+ "ijklmnop"
+ "qrstuvwx"
+ "yz01234 "
+ } 3 2
+}
+
+proc test_cursor_position { } {
+ Term::_move_cursor 1 1
+
+ Term::_csi_H 3 5
+ check "cursor horizontal absolute 2" {
+ "abcdefgh"
+ "ijklmnop"
+ "qrstuvwx"
+ "yz01234 "
+ } 4 2
+}
+
+proc test_cursor_horizontal_forward_tabulation { } {
+ Term::_move_cursor 5 2
+ Term::_csi_I
+ check_cursor_position "default param" 8 2
+
+ Term::_csi_I 2
+ check_cursor_position "explicit param" 24 2
+
+ Term::_move_cursor 77 2
+ Term::_csi_I 5
+ check_cursor_position "try to go past the end" 79 2
+}
+
+proc test_erase_in_display { } {
+ Term::_move_cursor 5 2
+ Term::_csi_J
+ check "erase in display, cursor to end with default param" {
+ "abcdefgh"
+ "ijklmnop"
+ "qrstu "
+ " "
+ } 5 2
+
+ Term::_move_cursor 3 2
+ Term::_csi_J 0
+ check "erase in display, cursor to end with explicit param" {
+ "abcdefgh"
+ "ijklmnop"
+ "qrs "
+ " "
+ } 3 2
+
+ Term::_move_cursor 2 1
+ Term::_csi_J 1
+ check "erase in display, beginning to cursor" {
+ " "
+ " lmnop"
+ "qrs "
+ " "
+ } 2 1
+
+ Term::_move_cursor 5 1
+ Term::_csi_J 2
+ check "erase in display, entire display" {
+ " "
+ " "
+ " "
+ " "
+ } 5 1
+}
+
+proc test_erase_in_line { } {
+ Term::_move_cursor 5 2
+ Term::_csi_K
+ check "erase in line, cursor to end with default param" {
+ "abcdefgh"
+ "ijklmnop"
+ "qrstu "
+ "yz01234 "
+ } 5 2
+
+ Term::_move_cursor 3 2
+ Term::_csi_K 0
+ check "erase in line, cursor to end with explicit param" {
+ "abcdefgh"
+ "ijklmnop"
+ "qrs "
+ "yz01234 "
+ } 3 2
+
+ Term::_move_cursor 3 1
+ Term::_csi_K 1
+ check "erase in line, beginning to cursor" {
+ "abcdefgh"
+ " mnop"
+ "qrs "
+ "yz01234 "
+ } 3 1
+
+ Term::_move_cursor 3 0
+ Term::_csi_K 2
+ check "erase in line, entire line" {
+ " "
+ " mnop"
+ "qrs "
+ "yz01234 "
+ } 3 0
+}
+
+proc test_delete_line { } {
+ Term::_move_cursor 3 2
+ Term::_csi_M
+ check "delete line, default param" {
+ "abcdefgh"
+ "ijklmnop"
+ "yz01234 "
+ " "
+ } 3 2
+
+ Term::_move_cursor 3 0
+ Term::_csi_M 2
+ check "delete line, explicit param" {
+ "yz01234 "
+ " "
+ " "
+ " "
+ } 3 0
+}
+
+proc test_delete_character { } {
+ Term::_move_cursor 2 1
+
+ Term::_csi_P
+ check "delete character, default param" {
+ "abcdefgh"
+ "ijlmnop "
+ "qrstuvwx"
+ "yz01234 "
+ } 2 1
+
+ Term::_csi_P 3
+ check "delete character, explicit param" {
+ "abcdefgh"
+ "ijop "
+ "qrstuvwx"
+ "yz01234 "
+ } 2 1
+
+ Term::_csi_P 12
+ check "delete character, more than number of columns" {
+ "abcdefgh"
+ "ij "
+ "qrstuvwx"
+ "yz01234 "
+ } 2 1
+}
+
+proc test_erase_character { } {
+ Term::_move_cursor 3 2
+ Term::_csi_X
+ check "erase character, default param" {
+ "abcdefgh"
+ "ijklmnop"
+ "qrs uvwx"
+ "yz01234 "
+ } 3 2
+
+ Term::_move_cursor 1 3
+ Term::_csi_X 4
+ check "erase character, explicit param" {
+ "abcdefgh"
+ "ijklmnop"
+ "qrs uvwx"
+ "y 34 "
+ } 1 3
+}
+
+proc test_cursor_backward_tabulation { } {
+ Term::_move_cursor 77 2
+ Term::_csi_Z
+ check_cursor_position "default param" 72 2
+
+ Term::_csi_Z 2
+ check_cursor_position "explicit param" 56 2
+
+ Term::_move_cursor 6 2
+ Term::_csi_Z 12
+ check_cursor_position "try to go past the beginning" 0 2
+}
+
+proc test_repeat { } {
+ Term::_move_cursor 2 1
+ set Term::_last_char X
+
+ Term::_csi_b 3
+ check "repeat" {
+ "abcdefgh"
+ "ijXXXnop"
+ "qrstuvwx"
+ "yz01234 "
+ } 5 1
+}
+
+proc test_vertical_line_position_absolute { } {
+ Term::_move_cursor 2 1
+
+ Term::_csi_d
+ check "default param" {
+ "abcdefgh"
+ "ijklmnop"
+ "qrstuvwx"
+ "yz01234 "
+ } 2 0
+
+ Term::_csi_d 3
+ check "explicit param" {
+ "abcdefgh"
+ "ijklmnop"
+ "qrstuvwx"
+ "yz01234 "
+ } 2 2
+
+ Term::_csi_d 100
+ check "try to move off-display" {
+ "abcdefgh"
+ "ijklmnop"
+ "qrstuvwx"
+ "yz01234 "
+ } 2 3
+}
+
+proc test_insert_line { } {
+ Term::_move_cursor 2 1
+ Term::_csi_L
+ check "insert line, default param" {
+ "abcdefgh"
+ " "
+ "ijklmnop"
+ "qrstuvwx"
+ } 2 1
+
+ Term::_move_cursor 2 0
+ Term::_csi_L 2
+ check "insert line, explicit param" {
+ " "
+ " "
+ "abcdefgh"
+ " "
+ } 2 0
+
+ Term::_csi_L 12
+ check "insert line, insert more lines than display has" {
+ " "
+ " "
+ " "
+ " "
+ } 2 0
+}
+
+# Run proc TEST_PROC_NAME with a "small" terminal.
+
+proc run_one_test_small { test_proc_name } {
+ save_vars { env(TERM) stty_init } {
+ setup_small
+ eval $test_proc_name
+ }
+}
+
+# Run proc TEST_PROC_NAME with a "large" terminal.
+
+proc run_one_test_large { test_proc_name } {
+ save_vars { env(TERM) stty_init } {
+ setup_large
+ eval $test_proc_name
+ }
+}
+
+foreach_with_prefix test {
+ test_backspace
+ test_linefeed
+ test_carriage_return
+ test_insert_characters
+ test_cursor_up
+ test_cursor_down
+ test_cursor_forward
+ test_cursor_backward
+ test_cursor_next_line
+ test_cursor_previous_line
+ test_horizontal_absolute
+ test_cursor_position
+ test_erase_in_display
+ test_erase_in_line
+ test_delete_line
+ test_delete_character
+ test_erase_character
+ test_repeat
+ test_vertical_line_position_absolute
+ test_insert_line
+ test_pan_up
+ test_pan_down
+} {
+ run_one_test_small $test
+}
+
+foreach_with_prefix test {
+ test_cursor_horizontal_forward_tabulation
+ test_cursor_backward_tabulation
+} {
+ run_one_test_large $test
+}
diff --git a/gdb/testsuite/gdb.tui/winheight.exp b/gdb/testsuite/gdb.tui/winheight.exp
index 0d0c886304d..8296dd79513 100644
--- a/gdb/testsuite/gdb.tui/winheight.exp
+++ b/gdb/testsuite/gdb.tui/winheight.exp
@@ -43,10 +43,87 @@ Term::check_box "smaller source box again" 0 0 80 10
Term::command "winheight src +5"
Term::check_box "larger source box again" 0 0 80 15
+# Check that attempting a window to be too large gives an error.
+Term::command "winheight src 100"
+Term::check_box "source box has not changed" 0 0 80 15
+Term::check_region_contents "check error message about src size 100" 0 16 80 8 \
+ [multi_line "$gdb_prompt winheight src 100\\s+" \
+ "warning: Invalid window height specified\\s+" \
+ "$gdb_prompt"]
+
+# Check that incrementing to a size that is "too big" will trigger an
+# error, and that the window doesn't resize.
+Term::command "winheight src 20"
+Term::check_box "source box is at its max size" 0 0 80 20
+Term::command "winheight src +1"
+Term::check_box "source box is still at its max size" 0 0 80 20
+Term::check_region_contents "check error message about src +1" 0 21 80 3 \
+ [multi_line "$gdb_prompt winheight src \\+1\\s+" \
+ "warning: Invalid window height specified\\s+" \
+ "$gdb_prompt"]
+
+# Reset the cmd window to a sane size.
+Term::command "winheight cmd 8"
+
+Term::command "layout regs"
+Term::check_box "register window" 0 0 80 8
+Term::check_box "source window" 0 7 80 8
+
+Term::command "winheight cmd 10"
+Term::check_box "register window after resize" 0 0 80 7
+Term::check_box "source window after resize" 0 6 80 7
+
# At one point we had a bug where adjusting the winheight would result
# in GDB keeping hold of duplicate window pointers, which it might
# then try to delete when the layout was changed. Running this test
# under valgrind would expose that bug.
Term::command "layout asm"
+Term::command "winheight cmd 8"
Term::check_box "check for asm window" 0 0 80 15
+
+# Check what happens when we switch from src layout to split layout.
+# The interesting thing here is that the src layout has one flexible
+# window (the src), the status window, which is of fixed size, and the
+# cmd window, which tries to retain its size when a layout changes.
+#
+# In contrast, the split layout has both a src and asm window, plus
+# the same status and cmd windows.
+#
+# Of particular interest here is the first test, where we maximise the
+# cmd window before switching to split. This requires gdb to realise
+# that it has to shrink the cmd window, even though this is something
+# gdb usually avoids doing.
+#
+# Each test here is a size for the src window in the 'src' layout.
+# The test then switches to the 'split' layout, and calculates the
+# expected window sizes.
+foreach_with_prefix cmd_size {20 12 5} {
+ set src_size_before [expr 24 - ${cmd_size} - 1]
+ set split_size [expr (24 - ${cmd_size}) / 2]
+
+ if { $split_size < 3 } {
+ # The minimum window size is 3, so force that.
+ set src_size_after 3
+ set asm_size_after 3
+ } elseif { [expr $split_size % 2] == 0 } {
+ # The remaining space can be divided evenly between the two
+ # windows.
+ set src_size_after ${split_size}
+ set asm_size_after ${split_size}
+ } else {
+ # The space can't be divided evenly, the asm window will get
+ # the extra line.
+ set src_size_after ${split_size}
+ set asm_size_after [expr ${split_size} + 1]
+ }
+
+ Term::command "layout src"
+ Term::command "winheight cmd ${cmd_size}"
+ Term::check_box "check for src window" 0 0 80 ${src_size_before}
+
+ # Both windows should be of equal size, which will be their minimum.
+ Term::command "layout split"
+ Term::check_box "check for src window in split" 0 0 80 ${src_size_after}
+ Term::check_box "check for asm window in split" 0 [expr ${src_size_after} - 1] 80 ${asm_size_after}
+}
diff --git a/gdb/testsuite/gdb.tui/winwidth.exp b/gdb/testsuite/gdb.tui/winwidth.exp
new file mode 100644
index 00000000000..1767b25c8d3
--- /dev/null
+++ b/gdb/testsuite/gdb.tui/winwidth.exp
@@ -0,0 +1,63 @@
+# Copyright 2022 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Test the "winwidth" command.
+
+tuiterm_env
+
+standard_testfile tui-layout.c
+
+if {[build_executable "failed to prepare" ${testfile} ${srcfile}] == -1} {
+ return -1
+}
+
+Term::clean_restart 24 80 $testfile
+if {![Term::enter_tui]} {
+ unsupported "TUI not supported"
+ return
+}
+
+Term::command "tui new-layout h { -horizontal src 1 asm 1 } 1 status 0 cmd 1"
+Term::command "layout h"
+
+with_test_prefix "original window sizes" {
+ Term::check_box "source box" 0 0 40 15
+ Term::check_box "asm box" 39 0 41 15
+ Term::command "winwidth src +5"
+}
+
+with_test_prefix "after src +5" {
+ Term::check_box "source box" 0 0 45 15
+ Term::check_box "asm box" 44 0 36 15
+ Term::command "winwidth asm -5"
+}
+
+with_test_prefix "after asm -5" {
+ Term::dump_screen
+ Term::check_box "source box" 0 0 50 15
+ Term::check_box "asm box" 49 0 31 15
+ Term::command "winwidth asm +8"
+}
+
+with_test_prefix "after asm +8" {
+ Term::check_box "source box" 0 0 42 15
+ Term::check_box "asm box" 41 0 39 15
+ Term::command "winwidth src -2"
+}
+
+with_test_prefix "after src -2" {
+ Term::check_box "source box" 0 0 40 15
+ Term::check_box "asm box" 39 0 41 15
+}
diff --git a/gdb/testsuite/lib/ada.exp b/gdb/testsuite/lib/ada.exp
index 67581c89008..25f8193c974 100644
--- a/gdb/testsuite/lib/ada.exp
+++ b/gdb/testsuite/lib/ada.exp
@@ -18,8 +18,6 @@
# BUILDDIR.
proc target_compile_ada_from_dir {builddir source dest type options} {
- set saved_cwd [pwd]
-
global board
set board [target_info name]
set save_multilib_flag [board_info $board multilib_flags]
@@ -39,10 +37,10 @@ proc target_compile_ada_from_dir {builddir source dest type options} {
}
catch {
- cd $builddir
- return [target_compile $source $dest $type $options]
+ with_cwd $builddir {
+ return [target_compile $source $dest $type $options]
+ }
} result options
- cd $saved_cwd
if { $save_multilib_flag != "" } {
unset_board_info "multilib_flags"
diff --git a/gdb/testsuite/lib/compiler.c b/gdb/testsuite/lib/compiler.c
index 191bced0411..451cae38312 100644
--- a/gdb/testsuite/lib/compiler.c
+++ b/gdb/testsuite/lib/compiler.c
@@ -67,4 +67,13 @@ set icc_major [string range __ICL 0 1]
set icc_minor [format "%d" [string range __ICL 2 [expr {[string length __ICL] -1}]]]
set icc_update __INTEL_COMPILER_UPDATE
set compiler_info [join "icc $icc_major $icc_minor $icc_update" -]
+#elif defined(__INTEL_LLVM_COMPILER) && defined(__clang_version__)
+/* Intel Next Gen compiler defines preprocessor __INTEL_LLVM_COMPILER and
+ provides version info in __clang_version__ e.g. value:
+ "12.0.0 (icx 2020.10.0.1113)". */
+set total_length [string length __clang_version__]
+set version_start_index [string last "(" __clang_version__]
+set version_string [string range __clang_version__ $version_start_index+5 $total_length-2]
+set version_updated_string [string map {. -} $version_string]
+set compiler_info "intel-$version_updated_string"
#endif
diff --git a/gdb/testsuite/lib/compiler.cc b/gdb/testsuite/lib/compiler.cc
index ab36bea43ae..1dfefee057d 100755
--- a/gdb/testsuite/lib/compiler.cc
+++ b/gdb/testsuite/lib/compiler.cc
@@ -55,4 +55,13 @@ set icc_major [string range __ICL 0 1]
set icc_minor [format "%d" [string range __ICL 2 [expr {[string length __ICL] -1}]]]
set icc_update __INTEL_COMPILER_UPDATE
set compiler_info [join "icc $icc_major $icc_minor $icc_update" -]
+#elif defined(__INTEL_LLVM_COMPILER) && defined(__clang_version__)
+/* Intel Next Gen compiler defines preprocessor __INTEL_LLVM_COMPILER and
+ provides version info in __clang_version__ e.g. value:
+ "12.0.0 (icx 2020.10.0.1113)". */
+set total_length [string length __clang_version__]
+set version_start_index [string last "(" __clang_version__]
+set version_string [string range __clang_version__ $version_start_index+5 $total_length-2]
+set version_updated_string [string map {. -} $version_string]
+set compiler_info "intel-$version_updated_string"
#endif
diff --git a/gdb/testsuite/lib/dwarf.exp b/gdb/testsuite/lib/dwarf.exp
index 6e8b1ccbe7f..55e97c33a6e 100644
--- a/gdb/testsuite/lib/dwarf.exp
+++ b/gdb/testsuite/lib/dwarf.exp
@@ -569,12 +569,6 @@ namespace eval Dwarf {
# Current .debug_line unit count.
variable _line_count
- # Whether a file_name entry was seen.
- variable _line_saw_file
-
- # Whether a line table program has been seen.
- variable _line_saw_program
-
# A Label for line table header generation.
variable _line_header_end_label
@@ -2178,11 +2172,9 @@ namespace eval Dwarf {
proc lines {options label body} {
variable _line_count
- variable _line_saw_file
variable _line_include_dirs
variable _line_file_names
variable _line_header_finalized
- variable _line_saw_program
variable _line_header_end_label
variable _line_unit_version
variable _line_is_64
@@ -2192,8 +2184,6 @@ namespace eval Dwarf {
set _line_is_64 0
set _line_unit_version 4
set _unit_addr_size default
- set _line_saw_program 0
- set _line_saw_file 0
set _line_include_dirs {}
set _line_file_names {}
set _line_header_finalized 0
@@ -2269,14 +2259,13 @@ namespace eval Dwarf {
_op .byte $_default_is_stmt "default_is_stmt"
_op .byte 1 "line_base"
_op .byte 1 "line_range"
- _op .byte 10 "opcode_base"
+ _op .byte 11 "opcode_base"
# The standard_opcode_lengths table. The number of arguments
- # for each of the standard opcodes. Generating 9 entries here
- # matches the use of 10 in the opcode_base above. These 9
- # entries match the 9 standard opcodes for DWARF2, making use
- # of only 9 should be fine, even if we are generating DWARF3
- # or DWARF4.
+ # for each of the standard opcodes. Generating 10 entries here
+ # matches the use of 11 in the opcode_base above. These 10
+ # entries match the 9 standard opcodes for DWARF2 plus
+ # DW_LNS_prologue_end from DWARF3.
_op .byte 0 "standard opcode 1"
_op .byte 1 "standard opcode 2"
_op .byte 1 "standard opcode 3"
@@ -2286,18 +2275,34 @@ namespace eval Dwarf {
_op .byte 0 "standard opcode 7"
_op .byte 0 "standard opcode 8"
_op .byte 1 "standard opcode 9"
+ _op .byte 0 "standard opcode 10"
+ # Add a directory entry to the line table header's directory table.
+ #
+ # Return the index by which this entry can be referred to.
proc include_dir {dirname} {
variable _line_include_dirs
lappend _line_include_dirs $dirname
+
+ if { $Dwarf::_line_unit_version >= 5 } {
+ return [expr [llength $_line_include_dirs] - 1]
+ } else {
+ return [llength $_line_include_dirs]
+ }
}
+ # Add a file name entry to the line table header's file names table.
+ #
+ # Return the index by which this entry can be referred to.
proc file_name {filename diridx} {
variable _line_file_names
lappend _line_file_names $filename $diridx
- variable _line_saw_file 1
- set _line_saw_file 1
+ if { $Dwarf::_line_unit_version >= 5 } {
+ return [expr [llength $_line_file_names] - 1]
+ } else {
+ return [llength $_line_file_names]
+ }
}
proc _line_finalize_header {} {
@@ -2329,15 +2334,8 @@ namespace eval Dwarf {
}
set nr_dirs [llength $_line_include_dirs]
- # For entry 0.
- set nr_dirs [expr $nr_dirs + 1]
_op .byte $nr_dirs "directory_count"
- # Entry 0.
- set dirname [lindex $_line_include_dirs 0]
- set _line_include_dirs \
- [concat [list $dirname] $_line_include_dirs]
-
foreach dirname $_line_include_dirs {
switch $_line_string_form {
string {
@@ -2373,16 +2371,8 @@ namespace eval Dwarf {
"file_name_entry_format (form: DW_FORM_udata)"
set nr_files [expr [llength $_line_file_names] / 2]
- # For entry 0.
- set nr_files [expr $nr_files + 1]
_op .byte $nr_files "file_names_count"
- # Entry 0.
- set filename [lindex $_line_file_names 0]
- set diridx [lindex $_line_file_names 1]
- set _line_file_names \
- [concat [list $filename $diridx] $_line_file_names]
-
foreach { filename diridx } $_line_file_names {
switch $_line_string_form {
string {
@@ -2423,12 +2413,10 @@ namespace eval Dwarf {
define_label $_line_header_end_label
}
- proc program {statements} {
- variable _line_saw_program
+ proc program { body } {
variable _line_header_end_label
variable _line
- set _line_saw_program 1
set _line 1
@@ -2481,6 +2469,10 @@ namespace eval Dwarf {
_op .byte 6
}
+ proc DW_LNS_set_prologue_end {} {
+ _op .byte 0x0a
+ }
+
proc DW_LNS_advance_pc {offset} {
_op .byte 2
_op .uleb128 ${offset}
@@ -2513,9 +2505,7 @@ namespace eval Dwarf {
_op .sleb128 ${num}
}
- foreach statement $statements {
- uplevel 1 $statement
- }
+ uplevel $body
}
uplevel $body
@@ -2868,8 +2858,6 @@ namespace eval Dwarf {
variable _strings
variable _cu_count
variable _line_count
- variable _line_saw_file
- variable _line_saw_program
variable _line_header_end_label
variable _debug_ranges_64_bit
variable _debug_addr_index
@@ -2887,8 +2875,6 @@ namespace eval Dwarf {
_empty_array _strings
set _line_count 0
- set _line_saw_file 0
- set _line_saw_program 0
set _debug_ranges_64_bit [is_64_target]
set _debug_addr_index 0
diff --git a/gdb/testsuite/lib/fortran.exp b/gdb/testsuite/lib/fortran.exp
index ee7fe12ad9b..a97c6eeb4e3 100644
--- a/gdb/testsuite/lib/fortran.exp
+++ b/gdb/testsuite/lib/fortran.exp
@@ -160,7 +160,8 @@ proc fortran_character1 {} {
proc fortran_main {} {
if {[test_compiler_info {gcc-4-[012]-*}]
|| [test_compiler_info {gcc-*}]
- || [test_compiler_info {icc-*}]} {
+ || [test_compiler_info {icc-*}]
+ || [test_compiler_info {intel-*}]} {
return "MAIN__"
} elseif {[test_compiler_info {clang-*}]} {
return "MAIN_"
diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp
index 60f7b83571a..47cb2b23676 100644
--- a/gdb/testsuite/lib/gdb.exp
+++ b/gdb/testsuite/lib/gdb.exp
@@ -92,8 +92,13 @@ load_lib gdb-utils.exp
load_lib memory.exp
load_lib check-test-names.exp
+# The path to the GDB binary to test.
global GDB
+# The data directory to use for testing. If this is the empty string,
+# then we let GDB use its own configured data directory.
+global GDB_DATA_DIRECTORY
+
# The spawn ID used for I/O interaction with the inferior. For native
# targets, or remote targets that can do I/O through GDB
# (semi-hosting) this will be the same as the host/GDB's spawn ID.
@@ -111,9 +116,24 @@ if ![info exists GDB] {
} else {
set GDB [transform gdb]
}
+} else {
+ # If the user specifies GDB on the command line, and doesn't
+ # specify GDB_DATA_DIRECTORY, then assume we're testing an
+ # installed GDB, and let it use its own configured data directory.
+ if ![info exists GDB_DATA_DIRECTORY] {
+ set GDB_DATA_DIRECTORY ""
+ }
}
verbose "using GDB = $GDB" 2
+# The data directory the testing GDB will use. By default, assume
+# we're testing a non-installed GDB in the build directory. Users may
+# also explictly override the -data-directory from the command line.
+if ![info exists GDB_DATA_DIRECTORY] {
+ set GDB_DATA_DIRECTORY "[pwd]/../data-directory"
+}
+verbose "using GDB_DATA_DIRECTORY = $GDB_DATA_DIRECTORY" 2
+
# GDBFLAGS is available for the user to set on the command line.
# E.g. make check RUNTESTFLAGS=GDBFLAGS=mumble
# Testcases may use it to add additional flags, but they must:
@@ -125,19 +145,35 @@ if ![info exists GDBFLAGS] {
}
verbose "using GDBFLAGS = $GDBFLAGS" 2
-# Make the build data directory available to tests.
-set BUILD_DATA_DIRECTORY "[pwd]/../data-directory"
+# Append the -data-directory option to pass to GDB to CMDLINE and
+# return the resulting string. If GDB_DATA_DIRECTORY is empty,
+# nothing is appended.
+proc append_gdb_data_directory_option {cmdline} {
+ global GDB_DATA_DIRECTORY
+
+ if { $GDB_DATA_DIRECTORY != "" } {
+ return "$cmdline -data-directory $GDB_DATA_DIRECTORY"
+ } else {
+ return $cmdline
+ }
+}
# INTERNAL_GDBFLAGS contains flags that the testsuite requires.
+# `-nw' disables any of the windowed interfaces.
+# `-nx' disables ~/.gdbinit, so that it doesn't interfere with the tests.
+# `-iex "set {height,width} 0"' disables pagination.
+# `-data-directory' points to the data directory, usually in the build
+# directory.
global INTERNAL_GDBFLAGS
if ![info exists INTERNAL_GDBFLAGS] {
set INTERNAL_GDBFLAGS \
[join [list \
"-nw" \
"-nx" \
- "-data-directory $BUILD_DATA_DIRECTORY" \
{-iex "set height 0"} \
{-iex "set width 0"}]]
+
+ set INTERNAL_GDBFLAGS [append_gdb_data_directory_option $INTERNAL_GDBFLAGS]
}
# The variable gdb_prompt is a regexp which matches the gdb prompt.
@@ -510,9 +546,11 @@ proc gdb_starti_cmd { {inferior_args {}} } {
return -1
}
-# Set a breakpoint at FUNCTION. If there is an additional argument it is
-# a list of options; the supported options are allow-pending, temporary,
-# message, no-message and qualified.
+# Set a breakpoint using LINESPEC.
+#
+# If there is an additional argument it is a list of options; the supported
+# options are allow-pending, temporary, message, no-message and qualified.
+#
# The result is 1 for success, 0 for failure.
#
# Note: The handling of message vs no-message is messed up, but it's based
@@ -521,7 +559,7 @@ proc gdb_starti_cmd { {inferior_args {}} } {
# no-message: turns off printing of fails (and passes, but they're already off)
# message: turns on printing of passes (and fails, but they're already on)
-proc gdb_breakpoint { function args } {
+proc gdb_breakpoint { linespec args } {
global gdb_prompt
global decimal
@@ -552,9 +590,9 @@ proc gdb_breakpoint { function args } {
set print_pass 1
}
- set test_name "setting breakpoint at $function"
+ set test_name "gdb_breakpoint: set breakpoint at $linespec"
- send_gdb "$break_command $function\n"
+ send_gdb "$break_command $linespec\n"
# The first two regexps are what we get with -g, the third is without -g.
gdb_expect 30 {
-re "$break_message \[0-9\]* at .*: file .*, line $decimal.\r\n$gdb_prompt $" {}
@@ -622,7 +660,7 @@ proc gdb_breakpoint { function args } {
# no-message: turns off printing of fails (and passes, but they're already off)
# message: turns on printing of passes (and fails, but they're already on)
-proc runto { function args } {
+proc runto { linespec args } {
global gdb_prompt
global decimal
@@ -639,14 +677,14 @@ proc runto { function args } {
set print_pass 1
}
- set test_name "running to $function in runto"
+ set test_name "runto: run to $linespec"
# We need to use eval here to pass our varargs args to gdb_breakpoint
# which is also a varargs function.
- # But we also have to be careful because $function may have multiple
+ # But we also have to be careful because $linespec may have multiple
# elements, and we don't want Tcl to move the remaining elements after
- # the first to $args. That is why $function is wrapped in {}.
- if ![eval gdb_breakpoint {$function} $args] {
+ # the first to $args. That is why $linespec is wrapped in {}.
+ if ![eval gdb_breakpoint {$linespec} $args] {
return 0
}
@@ -766,6 +804,10 @@ proc gdb_internal_error_resync {} {
set count 0
while {$count < 10} {
gdb_expect {
+ -re "Recursive internal problem\\." {
+ perror "Could not resync from internal error (recursive internal problem)"
+ return 0
+ }
-re "Quit this debugging session\\? \\(y or n\\) $" {
send_gdb "n\n" answer
incr count
@@ -2143,6 +2185,15 @@ proc default_gdb_start { } {
-re "\[\r\n\]$gdb_prompt $" {
verbose "GDB initialized."
}
+ -re "\[\r\n\]\033\\\[.2004h$gdb_prompt $" {
+ # This special case detects what happens when GDB is
+ # started with bracketed paste mode enabled. This mode is
+ # usually forced off (see setting of INPUTRC in
+ # default_gdb_init), but for at least one test we turn
+ # bracketed paste mode back on, and then start GDB. In
+ # that case, this case is hit.
+ verbose "GDB initialized."
+ }
-re "$gdb_prompt $" {
perror "GDB never initialized."
unset gdb_spawn_id
@@ -2311,8 +2362,6 @@ proc skip_rust_tests {} {
# PROMPT_REGEXP is the expected prompt.
proc skip_python_tests_prompt { prompt_regexp } {
- global gdb_py_is_py3k
-
gdb_test_multiple "python print ('test')" "verify python support" \
-prompt "$prompt_regexp" {
-re "not supported.*$prompt_regexp" {
@@ -2322,16 +2371,6 @@ proc skip_python_tests_prompt { prompt_regexp } {
-re "$prompt_regexp" {}
}
- gdb_test_multiple "python print (sys.version_info\[0\])" "check if python 3" \
- -prompt "$prompt_regexp" {
- -re "3.*$prompt_regexp" {
- set gdb_py_is_py3k 1
- }
- -re ".*$prompt_regexp" {
- set gdb_py_is_py3k 0
- }
- }
-
return 0
}
@@ -3740,12 +3779,15 @@ proc skip_hw_watchpoint_tests {} {
}
# These targets support hardware watchpoints natively
+ # Note, not all Power 9 processors support hardware watchpoints due to a HW
+ # bug. Use has_hw_wp_support to check do a runtime check for hardware
+ # watchpoint support on Powerpc.
if { [istarget "i?86-*-*"]
|| [istarget "x86_64-*-*"]
|| [istarget "ia64-*-*"]
|| [istarget "arm*-*-*"]
|| [istarget "aarch64*-*-*"]
- || [istarget "powerpc*-*-linux*"]
+ || ([istarget "powerpc*-*-linux*"] && [has_hw_wp_support])
|| [istarget "s390*-*-*"] } {
return 0
}
@@ -3865,8 +3907,17 @@ proc skip_compile_feature_tests {} {
# is a regexp that will match the output of "maint print target-stack" if
# the target in question is currently pushed. PROMPT_REGEXP is a regexp
# matching the expected prompt after the command output.
+#
+# NOTE: GDB must be running BEFORE this procedure is called!
proc gdb_is_target_1 { target_name target_stack_regexp prompt_regexp } {
+ global gdb_spawn_id
+
+ # Throw a Tcl error if gdb isn't already started.
+ if {![info exists gdb_spawn_id]} {
+ error "gdb_is_target_1 called with no running gdb instance"
+ }
+
set test "probe for target ${target_name}"
gdb_test_multiple "maint print target-stack" $test \
-prompt "$prompt_regexp" {
@@ -3882,13 +3933,17 @@ proc gdb_is_target_1 { target_name target_stack_regexp prompt_regexp } {
}
# Helper for gdb_is_target_remote where the expected prompt is variable.
+#
+# NOTE: GDB must be running BEFORE this procedure is called!
proc gdb_is_target_remote_prompt { prompt_regexp } {
- return [gdb_is_target_1 "remote" ".*emote serial target in gdb-specific protocol.*" $prompt_regexp]
+ return [gdb_is_target_1 "remote" ".*emote target using gdb-specific protocol.*" $prompt_regexp]
}
# Check whether we're testing with the remote or extended-remote
# targets.
+#
+# NOTE: GDB must be running BEFORE this procedure is called!
proc gdb_is_target_remote { } {
global gdb_prompt
@@ -3897,6 +3952,8 @@ proc gdb_is_target_remote { } {
}
# Check whether we're testing with the native target.
+#
+# NOTE: GDB must be running BEFORE this procedure is called!
proc gdb_is_target_native { } {
global gdb_prompt
@@ -4292,6 +4349,9 @@ set gdb_saved_set_unbuffered_mode_obj ""
# - nowarnings: Inhibit all compiler warnings.
# - pie: Force creation of PIE executables.
# - nopie: Prevent creation of PIE executables.
+# - macros: Add the required compiler flag to include macro information in
+# debug information
+# - text_segment=addr: Tell the linker to place the text segment at ADDR.
#
# And here are some of the not too obscure options understood by DejaGnu that
# influence the compilation:
@@ -4411,6 +4471,19 @@ proc gdb_compile {source dest type options} {
} elseif { $opt == "getting_compiler_info" } {
# If this is set, calling test_compiler_info will cause recursion.
set getting_compiler_info 1
+ } elseif {[regexp "^text_segment=(.*)" $opt dummy_var addr]} {
+ if { [linker_supports_Ttext_segment_flag] } {
+ # For GNU ld.
+ lappend new_options "ldflags=-Wl,-Ttext-segment=$addr"
+ } elseif { [linker_supports_image_base_flag] } {
+ # For LLVM's lld.
+ lappend new_options "ldflags=-Wl,--image-base=$addr"
+ } elseif { [linker_supports_Ttext_flag] } {
+ # For old GNU gold versions.
+ lappend new_options "ldflags=-Wl,-Ttext=$addr"
+ } else {
+ error "Don't know how to handle text_segment option."
+ }
} else {
lappend new_options $opt
}
@@ -4519,6 +4592,17 @@ proc gdb_compile {source dest type options} {
lappend options "$flag"
}
+ set macros [lsearch -exact $options macros]
+ if {$macros != -1} {
+ if { [test_compiler_info "clang-*"] } {
+ set flag "additional_flags=-fdebug-macro"
+ } else {
+ set flag "additional_flags=-g3"
+ }
+
+ set options [lreplace $options $macros $macros $flag]
+ }
+
if { $type == "executable" } {
if { ([istarget "*-*-mingw*"]
|| [istarget "*-*-*djgpp"]
@@ -5060,6 +5144,7 @@ proc can_spawn_for_attach { } {
# back the pid of the program. On remote boards, that would give
# us instead the PID of e.g., the ssh client, etc.
if [is_remote target] then {
+ verbose -log "can't spawn for attach (target is remote)"
return 0
}
@@ -5067,6 +5152,7 @@ proc can_spawn_for_attach { } {
# stub-like, where GDB finds the program already started on
# initial connection.
if {[target_info exists use_gdb_stub]} {
+ verbose -log "can't spawn for attach (target is stub)"
return 0
}
@@ -5074,6 +5160,78 @@ proc can_spawn_for_attach { } {
return 1
}
+# Centralize the failure checking of "attach" command.
+# Return 0 if attach failed, otherwise return 1.
+
+proc gdb_attach { testpid args } {
+ parse_args {
+ {pattern ""}
+ }
+
+ if { [llength $args] != 0 } {
+ error "Unexpected arguments: $args"
+ }
+
+ gdb_test_multiple "attach $testpid" "attach" {
+ -re -wrap "Attaching to.*ptrace: Operation not permitted\\." {
+ unsupported "$gdb_test_name (Operation not permitted)"
+ return 0
+ }
+ -re -wrap "$pattern" {
+ pass $gdb_test_name
+ return 1
+ }
+ }
+
+ return 0
+}
+
+# Start gdb with "--pid $TESTPID" on the command line and wait for the prompt.
+# Return 1 if GDB managed to start and attach to the process, 0 otherwise.
+
+proc_with_prefix gdb_spawn_attach_cmdline { testpid } {
+ if ![can_spawn_for_attach] {
+ # The caller should have checked can_spawn_for_attach itself
+ # before getting here.
+ error "can't spawn for attach with this target/board"
+ }
+
+ set test "start gdb with --pid"
+ set res [gdb_spawn_with_cmdline_opts "-quiet --pid=$testpid"]
+ if { $res != 0 } {
+ fail $test
+ return 0
+ }
+
+ gdb_test_multiple "" "$test" {
+ -re -wrap "ptrace: Operation not permitted\\." {
+ unsupported "$gdb_test_name (operation not permitted)"
+ return 0
+ }
+ -re -wrap "ptrace: No such process\\." {
+ fail "$gdb_test_name (no such process)"
+ return 0
+ }
+ -re -wrap "Attaching to process $testpid\r\n.*" {
+ pass $gdb_test_name
+ }
+ }
+
+ # Check that we actually attached to a process, in case the
+ # error message is not caught by the patterns above.
+ gdb_test_multiple "info thread" "" {
+ -re -wrap "No threads\\." {
+ fail "$gdb_test_name (no thread)"
+ }
+ -re -wrap "Id.*" {
+ pass $gdb_test_name
+ return 1
+ }
+ }
+
+ return 0
+}
+
# Kill a progress previously started with spawn_wait_for_attach, and
# reap its wait status. PROC_SPAWN_ID is the spawn id associated with
# the process.
@@ -7950,9 +8108,9 @@ proc verify_psymtab_expanded { filename readin } {
# string (the default) means .gdb_index; "-dwarf-5" means .debug_names.
proc add_gdb_index { program {style ""} } {
- global srcdir GDB env BUILD_DATA_DIRECTORY
+ global srcdir GDB env
set contrib_dir "$srcdir/../contrib"
- set env(GDB) "$GDB --data-directory=$BUILD_DATA_DIRECTORY"
+ set env(GDB) [append_gdb_data_directory_option $GDB]
set result [catch "exec $contrib_dir/gdb-add-index.sh $style $program" output]
if { $result != 0 } {
verbose -log "result is $result"
@@ -7987,7 +8145,7 @@ proc ensure_gdb_index { binfile {style ""} } {
set has_index 1
gdb_test_lines "" $gdb_test_name ".*"
}
- -re "\r\nPsymtabs:(?=\r\n)" {
+ -re "\r\n(Cooked index in use|Psymtabs)(?=\r\n)" {
gdb_test_lines "" $gdb_test_name ".*"
}
-re ".gdb_index: faked for \"readnow\"" {
@@ -8137,6 +8295,31 @@ gdb_caching_proc have_fuse_ld_gold {
return [gdb_simple_compile $me $src executable $flags]
}
+# Return 1 if linker supports -Ttext-segment, otherwise return 0.
+gdb_caching_proc linker_supports_Ttext_segment_flag {
+ set me "linker_supports_Ttext_segment_flag"
+ set flags additional_flags="-Wl,-Ttext-segment=0x7000000"
+ set src { int main() { return 0; } }
+ return [gdb_simple_compile $me $src executable $flags]
+}
+
+# Return 1 if linker supports -Ttext, otherwise return 0.
+gdb_caching_proc linker_supports_Ttext_flag {
+ set me "linker_supports_Ttext_flag"
+ set flags additional_flags="-Wl,-Ttext=0x7000000"
+ set src { int main() { return 0; } }
+ return [gdb_simple_compile $me $src executable $flags]
+}
+
+# Return 1 if linker supports --image-base, otherwise 0.
+gdb_caching_proc linker_supports_image_base_flag {
+ set me "linker_supports_image_base_flag"
+ set flags additional_flags="-Wl,--image-base=0x7000000"
+ set src { int main() { return 0; } }
+ return [gdb_simple_compile $me $src executable $flags]
+}
+
+
# Return 1 if compiler supports scalar_storage_order attribute, otherwise
# return 0.
gdb_caching_proc supports_scalar_storage_order_attribute {
@@ -8231,6 +8414,29 @@ gdb_caching_proc have_mpx {
remote_file build delete $obj
+ if { $status == 0 } {
+ verbose "$me: returning $status" 2
+ return $status
+ }
+
+ # Compile program with -mmpx -fcheck-pointer-bounds, try to trigger
+ # 'No MPX support', in other words, see if kernel supports mpx.
+ set src { int main (void) { return 0; } }
+ set comp_flags {}
+ append comp_flags " additional_flags=-mmpx"
+ append comp_flags " additional_flags=-fcheck-pointer-bounds"
+ if {![gdb_simple_compile $me-2 $src executable $comp_flags]} {
+ return 0
+ }
+
+ set result [remote_exec target $obj]
+ set status [lindex $result 0]
+ set output [lindex $result 1]
+ set status [expr ($status == 0) \
+ && ![string equal $output "No MPX support\r\n"]]
+
+ remote_file build delete $obj
+
verbose "$me: returning $status" 2
return $status
}
@@ -8331,5 +8537,82 @@ proc target_file_exists_with_timeout { path } {
return 0
}
+gdb_caching_proc has_hw_wp_support {
+ # Power 9, proc rev 2.2 does not support HW watchpoints due to HW bug.
+ # Need to use a runtime test to determine if the Power processor has
+ # support for HW watchpoints.
+ global srcdir subdir gdb_prompt inferior_exited_re
+
+ set compile_flags {debug nowarnings quiet}
+ set me "has_hw_wp_support"
+
+ # Compile a test program to test if HW watchpoints are supported
+ set src {
+ int main (void) {
+ volatile int local;
+ local = 1;
+ if (local == 1)
+ return 1;
+ return 0;
+ }
+ }
+
+ if {![gdb_simple_compile $me $src executable $compile_flags]} {
+ return 0
+ }
+
+ gdb_exit
+ gdb_start
+ gdb_reinitialize_dir $srcdir/$subdir
+ gdb_load "$obj"
+
+ if ![runto_main] {
+ set has_hw_wp_support 0
+ return $has_hw_wp_support
+ }
+
+ # The goal is to determine if HW watchpoints are available in general.
+ # Use "watch" and then check if gdb responds with hardware watch point.
+ set test "watch local"
+
+ gdb_test_multiple $test "Check for HW watchpoint support" {
+ -re ".*Hardware watchpoint.*" {
+ # HW watchpoint supported by platform
+ verbose -log "\n$me: Hardware watchpoint detected"
+ set has_hw_wp_support 1
+ }
+ -re ".*$gdb_prompt $" {
+ set has_hw_wp_support 0
+ verbose -log "\n$me: Default, hardware watchpoint not deteced"
+ }
+ }
+
+ gdb_exit
+ remote_file build delete $obj
+
+ verbose "$me: returning $has_hw_wp_support" 2
+ return $has_hw_wp_support
+}
+
+# Return a list of all the accepted values of the set command SET_CMD.
+
+proc get_set_option_choices {set_cmd} {
+ global gdb_prompt
+
+ set values {}
+
+ set test "complete $set_cmd"
+ gdb_test_multiple "complete $set_cmd " "$test" {
+ -re "$set_cmd (\[^\r\n\]+)\r\n" {
+ lappend values $expect_out(1,string)
+ exp_continue
+ }
+ -re "$gdb_prompt " {
+ pass $test
+ }
+ }
+ return $values
+}
+
# Always load compatibility stuff.
load_lib future.exp
diff --git a/gdb/testsuite/lib/jit-elf-helpers.exp b/gdb/testsuite/lib/jit-elf-helpers.exp
index af70b11644c..b699917f209 100644
--- a/gdb/testsuite/lib/jit-elf-helpers.exp
+++ b/gdb/testsuite/lib/jit-elf-helpers.exp
@@ -88,14 +88,14 @@ proc compile_and_download_n_jit_so {jit_solib_basename jit_solib_srcfile count}
# wouldn't work for .debug sections. Also, output for "info
# function" changes when debug info is present.
set addr [format 0x%x [expr $jit_load_address + $jit_load_increment * [expr $i-1]]]
- # Using -Ttext-segment flag to ask linked to relocate everything
- # in the compiled shared library against a fixed base address. Combined
+
+ # Use "text_segment=..." to ask the linker to relocate everything in the
+ # compiled shared library against a fixed base address. Combined
# with mapping the resulting binary to the same fixed base it allows
# to dynamically execute functions from it without any further adjustments.
set options [list \
additional_flags=-DFUNCTION_NAME=[format "jit_function_%04d" $i] \
- additional_flags=-Xlinker \
- additional_flags=-Ttext-segment=$addr]
+ text_segment=$addr]
if { [gdb_compile_shlib ${jit_solib_srcfile} ${binfile} \
$options] != "" } {
set f [file tail $binfile]
diff --git a/gdb/testsuite/lib/mi-support.exp b/gdb/testsuite/lib/mi-support.exp
index 857a04519cf..e578a7e6f9b 100644
--- a/gdb/testsuite/lib/mi-support.exp
+++ b/gdb/testsuite/lib/mi-support.exp
@@ -131,7 +131,13 @@ proc mi_create_inferior_pty {} {
}
}
-proc mi_gdb_start_separate_mi_tty { args } {
+#
+# Like default_mi_gdb_start below, but the MI is created as a separate
+# ui in a new tty. The global MI_SPAWN_ID is updated to point at the
+# new tty created for the MI interface. The global GDB_MAIN_SPAWN_ID
+# is updated to the current value of the global GDB_SPAWN_ID.
+#
+proc mi_gdb_start_separate_mi_tty { { flags {} } } {
global gdb_prompt mi_gdb_prompt
global timeout
global gdb_spawn_id gdb_main_spawn_id mi_spawn_id
@@ -139,8 +145,8 @@ proc mi_gdb_start_separate_mi_tty { args } {
set separate_inferior_pty 0
- foreach arg $args {
- if {$arg == "separate-inferior-tty"} {
+ foreach flag $flags {
+ if {$flag == "separate-inferior-tty"} {
set separate_inferior_pty 1
}
}
@@ -183,6 +189,8 @@ proc mi_gdb_start_separate_mi_tty { args } {
#
# default_mi_gdb_start [FLAGS] -- start gdb running, default procedure
#
+# FLAGS is a list of flags, each flag is a string.
+#
# If "separate-inferior-tty" is specified, the inferior works with
# it's own PTY.
#
@@ -193,7 +201,7 @@ proc mi_gdb_start_separate_mi_tty { args } {
# tests on different hosts all using the same server, things can
# get really slow. Give gdb at least 3 minutes to start up.
#
-proc default_mi_gdb_start { args } {
+proc default_mi_gdb_start { { flags {} } } {
global use_gdb_stub
global GDB
global INTERNAL_GDBFLAGS GDBFLAGS
@@ -218,16 +226,16 @@ proc default_mi_gdb_start { args } {
set separate_inferior_pty 0
- foreach arg $args {
- if {$arg == "separate-mi-tty"} {
+ foreach flag $flags {
+ if {$flag == "separate-mi-tty"} {
set separate_mi_pty 1
- } elseif {$arg == "separate-inferior-tty"} {
+ } elseif {$flag == "separate-inferior-tty"} {
set separate_inferior_pty 1
}
}
if {$separate_mi_pty} {
- return [eval mi_gdb_start_separate_mi_tty $args]
+ return [mi_gdb_start_separate_mi_tty $flags]
}
set inferior_pty no-tty
@@ -1802,13 +1810,13 @@ proc mi_get_inline_test {testcase} {
}
# Sets temporary breakpoint at LOCATION.
-proc mi_tbreak {location} {
+proc mi_tbreak {location test} {
global mi_gdb_prompt
mi_gdb_test "-break-insert -t $location" \
{\^done,bkpt=.*} \
- "run to $location (set breakpoint)"
+ $test
}
# Send COMMAND that must be a command that resumes
@@ -1864,15 +1872,16 @@ proc mi_send_resuming_command {command test} {
# be determined.
# Does not check that the line is the same as requested.
# The caller can check itself if required.
-proc mi_continue_to_line {location test} {
-
- mi_tbreak $location
- mi_send_resuming_command "exec-continue" "run to $location (exec-continue)"
- return [mi_get_stop_line $test]
+proc_with_prefix mi_continue_to_line {location test} {
+ with_test_prefix $test {
+ mi_tbreak $location "set temporary breakpoint"
+ mi_send_resuming_command "exec-continue" "continue to breakpoint"
+ return [mi_get_stop_line]
+ }
}
# Wait until gdb prints the current line.
-proc mi_get_stop_line {test} {
+proc mi_get_stop_line {} {
global mi_gdb_prompt
global async
@@ -1888,10 +1897,10 @@ proc mi_get_stop_line {test} {
return $expect_out(1,string)
}
-re ".*$mi_gdb_prompt" {
- fail "wait for stop ($test)"
+ fail "wait for stop (unexpected output)"
}
timeout {
- fail "wait for stop ($test)"
+ fail "wait for stop (timeout)"
}
}
}
@@ -1954,11 +1963,11 @@ proc mi_run_inline_test { testcase } {
if {$first==1} {
# Start the program afresh.
- mi_tbreak "$mi_autotest_source:$line"
+ mi_tbreak "$mi_autotest_source:$line" "set temporary breakpoint"
if { [mi_run_cmd] < 0 } {
return -1
}
- set line_now [mi_get_stop_line "$testcase: step to $line"]
+ set line_now [mi_get_stop_line]
set first 0
} elseif {$line_now!=$line} {
set line_now [mi_continue_to_line "$mi_autotest_source:$line" "continue to $line"]
@@ -1976,7 +1985,7 @@ proc mi_run_inline_test { testcase } {
if { [mi_send_resuming_command "exec-next" "$testcase: step over $line"] != 0 } {
return -1
}
- set line_now [mi_get_stop_line "$testcase: step over $line"]
+ set line_now [mi_get_stop_line]
# We probably want to use 'uplevel' so that statements
# have direct access to global variables that the
diff --git a/gdb/testsuite/lib/rust-support.exp b/gdb/testsuite/lib/rust-support.exp
index 0d39566df73..85e5b021e21 100644
--- a/gdb/testsuite/lib/rust-support.exp
+++ b/gdb/testsuite/lib/rust-support.exp
@@ -104,7 +104,7 @@ gdb_caching_proc rust_compiler_version {
} else {
set output [lindex [remote_exec host "$rustc --version --verbose"] 1]
foreach line [split $output \n] {
- if {[regexp "rustc (\[0-9.\]+) .*\$" $output ignore version]} {
+ if {[regexp "rustc (\[0-9.\]+).*\$" $output ignore version]} {
return $version
}
}
diff --git a/gdb/testsuite/lib/tuiterm.exp b/gdb/testsuite/lib/tuiterm.exp
index 38948015e96..e660840eed9 100644
--- a/gdb/testsuite/lib/tuiterm.exp
+++ b/gdb/testsuite/lib/tuiterm.exp
@@ -88,16 +88,8 @@ namespace eval Term {
_log_cur "Backspace" {
variable _cur_col
- incr _cur_col -1
- if {$_cur_col < 0} {
- variable _cur_row
- variable _cols
-
- set _cur_col [expr {$_cols - 1}]
- incr _cur_row -1
- if {$_cur_row < 0} {
- set _cur_row 0
- }
+ if {$_cur_col > 0} {
+ incr _cur_col -1
}
}
}
@@ -133,15 +125,18 @@ namespace eval Term {
_log_cur "Insert Character ($n)" {
variable _cur_col
variable _cur_row
+ variable _cols
variable _chars
- set in_x $_cur_col
- set out_x [expr {$_cur_col + $n}]
- for {set i 0} {$i < $n} {incr i} {
- set _chars($out_x,$_cur_row) $_chars($in_x,$_cur_row)
- incr in_x
- incr out_x
+ # Move characters right of the cursor right by N positions,
+ # starting with the rightmost one.
+ for {set in_col [expr $_cols - $n - 1]} {$in_col >= $_cur_col} {incr in_col -1} {
+ set out_col [expr $in_col + $n]
+ set _chars($out_col,$_cur_row) $_chars($in_col,$_cur_row)
}
+
+ # Write N blank spaces starting from the cursor.
+ _clear_in_line $_cur_col [expr $_cur_col + $n] $_cur_row
}
}
@@ -168,7 +163,7 @@ namespace eval Term {
variable _cur_row
variable _rows
- set _cur_row [expr {min ($_cur_row + $arg, $_rows)}]
+ set _cur_row [expr {min ($_cur_row + $arg, $_rows - 1)}]
}
}
@@ -182,7 +177,7 @@ namespace eval Term {
variable _cur_col
variable _cols
- set _cur_col [expr {min ($_cur_col + $arg, $_cols)}]
+ set _cur_col [expr {min ($_cur_col + $arg, $_cols - 1)}]
}
}
@@ -211,7 +206,7 @@ namespace eval Term {
variable _rows
set _cur_col 0
- set _cur_row [expr {min ($_cur_row + $arg, $_rows)}]
+ set _cur_row [expr {min ($_cur_row + $arg, $_rows - 1)}]
}
}
@@ -291,12 +286,15 @@ namespace eval Term {
variable _cols
if {$arg == 0} {
+ # Cursor (inclusive) to end of display.
_clear_in_line $_cur_col $_cols $_cur_row
_clear_lines [expr {$_cur_row + 1}] $_rows
} elseif {$arg == 1} {
- _clear_lines 0 [expr {$_cur_row - 1}]
- _clear_in_line 0 $_cur_col $_cur_row
+ # Beginning of display to cursor (inclusive).
+ _clear_lines 0 $_cur_row
+ _clear_in_line 0 [expr $_cur_col + 1] $_cur_row
} elseif {$arg == 2} {
+ # Entire display.
_clear_lines 0 $_rows
}
}
@@ -314,16 +312,45 @@ namespace eval Term {
variable _cols
if {$arg == 0} {
- # From cursor to end.
+ # Cursor (inclusive) to end of line.
_clear_in_line $_cur_col $_cols $_cur_row
} elseif {$arg == 1} {
- _clear_in_line 0 $_cur_col $_cur_row
+ # Beginning of line to cursor (inclusive).
+ _clear_in_line 0 [expr $_cur_col + 1] $_cur_row
} elseif {$arg == 2} {
+ # Entire line.
_clear_in_line 0 $_cols $_cur_row
}
}
}
+ # Insert Line
+ #
+ # https://vt100.net/docs/vt510-rm/IL.html
+ proc _csi_L {args} {
+ set arg [_default [lindex $args 0] 1]
+
+ _log_cur "Insert Line ($arg)" {
+ variable _cur_col
+ variable _cur_row
+ variable _rows
+ variable _cols
+ variable _chars
+
+ set y [expr $_rows - 2]
+ set next_y [expr $y + $arg]
+ while {$y >= $_cur_row} {
+ for {set x 0} {$x < $_cols} {incr x} {
+ set _chars($x,$next_y) $_chars($x,$y)
+ }
+ incr y -1
+ incr next_y -1
+ }
+
+ _clear_lines $_cur_row [expr $_cur_row + $arg]
+ }
+ }
+
# Delete line.
#
# https://vt100.net/docs/vt510-rm/DL.html
@@ -349,6 +376,101 @@ namespace eval Term {
}
}
+ # Delete Character.
+ #
+ # https://vt100.net/docs/vt510-rm/DCH.html
+ proc _csi_P {args} {
+ set count [_default [lindex $args 0] 1]
+
+ _log_cur "Delete character ($count)" {
+ variable _cur_row
+ variable _cur_col
+ variable _chars
+ variable _cols
+
+ # Move all characters right of the cursor N positions left.
+ set out_col [expr $_cur_col]
+ set in_col [expr $_cur_col + $count]
+
+ while {$in_col < $_cols} {
+ set _chars($out_col,$_cur_row) $_chars($in_col,$_cur_row)
+ incr in_col
+ incr out_col
+ }
+
+ # Clear the rest of the line.
+ _clear_in_line $out_col $_cols $_cur_row
+ }
+ }
+
+ # Pan Down
+ #
+ # https://vt100.net/docs/vt510-rm/SU.html
+ proc _csi_S {args} {
+ set count [_default [lindex $args 0] 1]
+
+ _log_cur "Pan Down ($count)" {
+ variable _cur_col
+ variable _cur_row
+ variable _cols
+ variable _rows
+ variable _chars
+
+ # The following code is written without consideration for
+ # the scroll margins. At this time this comment was
+ # written the tuiterm library doesn't support the scroll
+ # margins. If/when that changes, then the following will
+ # need to be updated.
+
+ set dy 0
+ set y $count
+
+ while {$y < $_rows} {
+ for {set x 0} {$x < $_cols} {incr x} {
+ set _chars($x,$dy) $_chars($x,$y)
+ }
+ incr y 1
+ incr dy 1
+ }
+
+ _clear_lines $dy $_rows
+ }
+ }
+
+ # Pan Up
+ #
+ # https://vt100.net/docs/vt510-rm/SD.html
+ proc _csi_T {args} {
+ set count [_default [lindex $args 0] 1]
+
+ _log_cur "Pan Up ($count)" {
+ variable _cur_col
+ variable _cur_row
+ variable _cols
+ variable _rows
+ variable _chars
+
+ # The following code is written without consideration for
+ # the scroll margins. At this time this comment was
+ # written the tuiterm library doesn't support the scroll
+ # margins. If/when that changes, then the following will
+ # need to be updated.
+
+ set y [expr $_rows - $count]
+ set dy $_rows
+
+ while {$dy >= $count} {
+ for {set x 0} {$x < $_cols} {incr x} {
+ set _chars($x,$dy) $_chars($x,$y)
+ }
+ incr y -1
+ incr dy -1
+ }
+
+ _clear_lines 0 $count
+ }
+ }
+
# Erase chars.
#
# https://vt100.net/docs/vt510-rm/ECH.html
@@ -405,8 +527,9 @@ namespace eval Term {
_log_cur "Vertical Line Position Absolute ($row)" {
variable _cur_row
+ variable _rows
- set _cur_row [expr {$row - 1}]
+ set _cur_row [expr min ($row - 1, $_rows - 1)]
}
}
@@ -492,6 +615,26 @@ namespace eval Term {
}
}
+ # Move the cursor to the (0-based) COL and ROW positions.
+ proc _move_cursor { col row } {
+ variable _cols
+ variable _rows
+ variable _cur_col
+ variable _cur_row
+
+ if { $col < 0 || $col >= $_cols } {
+ error "_move_cursor: invalid col value: $col"
+ }
+
+ if { $row < 0 || $row >= $_rows } {
+ error "_move_cursor: invalid row value: $row"
+ }
+
+
+ set _cur_col $col
+ set _cur_row $row
+ }
+
# Initialize.
proc _setup {rows cols} {
global stty_init
@@ -833,7 +976,11 @@ namespace eval Term {
proc dump_screen {} {
variable _rows
variable _cols
- verbose -log "Screen Dump ($_cols x $_rows):"
+ variable _cur_row
+ variable _cur_col
+
+ verbose -log "Screen Dump (size $_cols columns x $_rows rows, cursor at column $_cur_col, row $_cur_row):"
+
for {set y 0} {$y < $_rows} {incr y} {
set fmt [format %5d $y]
verbose -log "$fmt [get_line $y]"
diff --git a/gdb/thread.c b/gdb/thread.c
index 8a7d142bab5..378c5ee2d13 100644
--- a/gdb/thread.c
+++ b/gdb/thread.c
@@ -40,7 +40,7 @@
#include "annotate.h"
#include "cli/cli-decode.h"
#include "cli/cli-option.h"
-#include "gdb_regex.h"
+#include "gdbsupport/gdb_regex.h"
#include "cli/cli-utils.h"
#include "thread-fsm.h"
#include "tid-parse.h"
@@ -59,7 +59,7 @@ static void
show_debug_threads (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Thread debugging is \"%s\".\n"), value);
+ gdb_printf (file, _("Thread debugging is \"%s\".\n"), value);
}
/* Definition of struct thread_info exported to gdbthread.h. */
@@ -160,11 +160,10 @@ thread_has_single_step_breakpoint_here (struct thread_info *tp,
void
thread_cancel_execution_command (struct thread_info *thr)
{
- if (thr->thread_fsm != NULL)
+ if (thr->thread_fsm () != nullptr)
{
- thr->thread_fsm->clean_up (thr);
- delete thr->thread_fsm;
- thr->thread_fsm = NULL;
+ std::unique_ptr<thread_fsm> fsm = thr->release_thread_fsm ();
+ fsm->clean_up (thr);
}
}
@@ -294,7 +293,7 @@ add_thread_with_info (process_stratum_target *targ, ptid_t ptid,
result->priv.reset (priv);
if (print_thread_events)
- printf_unfiltered (_("[New %s]\n"), target_pid_to_str (ptid).c_str ());
+ gdb_printf (_("[New %s]\n"), target_pid_to_str (ptid).c_str ());
annotate_new_thread ();
return result;
@@ -424,7 +423,7 @@ void
global_thread_step_over_chain_enqueue (struct thread_info *tp)
{
infrun_debug_printf ("enqueueing thread %s in global step over chain",
- target_pid_to_str (tp->ptid).c_str ());
+ tp->ptid.to_string ().c_str ());
gdb_assert (!thread_is_in_step_over_chain (tp));
global_thread_step_over_list.push_back (*tp);
@@ -444,7 +443,7 @@ void
global_thread_step_over_chain_remove (struct thread_info *tp)
{
infrun_debug_printf ("removing thread %s from global step over chain",
- target_pid_to_str (tp->ptid).c_str ());
+ tp->ptid.to_string ().c_str ());
gdb_assert (thread_is_in_step_over_chain (tp));
auto it = global_thread_step_over_list.iterator_to (*tp);
@@ -1485,8 +1484,8 @@ thread_try_catch_cmd (thread_info *thr, gdb::optional<int> ada_task,
if (!flags.silent || cmd_result.length () > 0)
{
if (!flags.quiet)
- printf_filtered ("%s", thr_header.c_str ());
- printf_filtered ("%s", cmd_result.c_str ());
+ gdb_printf ("%s", thr_header.c_str ());
+ gdb_printf ("%s", cmd_result.c_str ());
}
}
catch (const gdb_exception_error &ex)
@@ -1494,9 +1493,9 @@ thread_try_catch_cmd (thread_info *thr, gdb::optional<int> ada_task,
if (!flags.silent)
{
if (!flags.quiet)
- printf_filtered ("%s", thr_header.c_str ());
+ gdb_printf ("%s", thr_header.c_str ());
if (flags.cont)
- printf_filtered ("%s\n", ex.what ());
+ gdb_printf ("%s\n", ex.what ());
else
throw;
}
@@ -1812,13 +1811,13 @@ thread_command (const char *tidstr, int from_tty)
struct thread_info *tp = inferior_thread ();
if (tp->state == THREAD_EXITED)
- printf_filtered (_("[Current thread is %s (%s) (exited)]\n"),
- print_thread_id (tp),
- target_pid_to_str (inferior_ptid).c_str ());
+ gdb_printf (_("[Current thread is %s (%s) (exited)]\n"),
+ print_thread_id (tp),
+ target_pid_to_str (inferior_ptid).c_str ());
else
- printf_filtered (_("[Current thread is %s (%s)]\n"),
- print_thread_id (tp),
- target_pid_to_str (inferior_ptid).c_str ());
+ gdb_printf (_("[Current thread is %s (%s)]\n"),
+ print_thread_id (tp),
+ target_pid_to_str (inferior_ptid).c_str ());
}
else
error (_("No stack."));
@@ -1887,37 +1886,37 @@ thread_find_command (const char *arg, int from_tty)
if (tp->name () != nullptr && re_exec (tp->name ()))
{
- printf_filtered (_("Thread %s has name '%s'\n"),
- print_thread_id (tp), tp->name ());
+ gdb_printf (_("Thread %s has name '%s'\n"),
+ print_thread_id (tp), tp->name ());
match++;
}
tmp = target_thread_name (tp);
if (tmp != NULL && re_exec (tmp))
{
- printf_filtered (_("Thread %s has target name '%s'\n"),
- print_thread_id (tp), tmp);
+ gdb_printf (_("Thread %s has target name '%s'\n"),
+ print_thread_id (tp), tmp);
match++;
}
std::string name = target_pid_to_str (tp->ptid);
if (!name.empty () && re_exec (name.c_str ()))
{
- printf_filtered (_("Thread %s has target id '%s'\n"),
- print_thread_id (tp), name.c_str ());
+ gdb_printf (_("Thread %s has target id '%s'\n"),
+ print_thread_id (tp), name.c_str ());
match++;
}
tmp = target_extra_thread_info (tp);
if (tmp != NULL && re_exec (tmp))
{
- printf_filtered (_("Thread %s has extra info '%s'\n"),
- print_thread_id (tp), tmp);
+ gdb_printf (_("Thread %s has extra info '%s'\n"),
+ print_thread_id (tp), tmp);
match++;
}
}
if (!match)
- printf_filtered (_("No threads match '%s'\n"), arg);
+ gdb_printf (_("No threads match '%s'\n"), arg);
}
/* Print notices when new threads are attached and detached. */
@@ -1926,9 +1925,9 @@ static void
show_print_thread_events (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file,
- _("Printing of thread events is %s.\n"),
- value);
+ gdb_printf (file,
+ _("Printing of thread events is %s.\n"),
+ value);
}
/* See gdbthread.h. */
@@ -2050,6 +2049,26 @@ thread_name (thread_info *thread)
return target_thread_name (thread);
}
+/* See gdbthread.h. */
+
+const char *
+thread_state_string (enum thread_state state)
+{
+ switch (state)
+ {
+ case THREAD_STOPPED:
+ return "STOPPED";
+
+ case THREAD_RUNNING:
+ return "RUNNING";
+
+ case THREAD_EXITED:
+ return "EXITED";
+ }
+
+ gdb_assert_not_reached ("unknown thread state");
+}
+
/* Return a new value for the selected thread's id. Return a value of
0 if no thread is selected. If GLOBAL is true, return the thread's
global number. Otherwise return the per-inferior number. */
@@ -2104,7 +2123,6 @@ static const struct internalvar_funcs thread_funcs =
{
thread_id_per_inf_num_make_value,
NULL,
- NULL
};
/* Implementation of `gthread' variable. */
@@ -2113,7 +2131,6 @@ static const struct internalvar_funcs gthread_funcs =
{
global_thread_id_make_value,
NULL,
- NULL
};
void _initialize_thread ();
diff --git a/gdb/top.c b/gdb/top.c
index 07695f88fd4..86c9971fa6d 100644
--- a/gdb/top.c
+++ b/gdb/top.c
@@ -56,6 +56,7 @@
#include "gdbarch.h"
#include "gdbsupport/pathstuff.h"
#include "cli/cli-style.h"
+#include "pager.h"
/* readline include files. */
#include "readline/readline.h"
@@ -135,15 +136,11 @@ static void
show_confirm (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Whether to confirm potentially "
- "dangerous operations is %s.\n"),
- value);
+ gdb_printf (file, _("Whether to confirm potentially "
+ "dangerous operations is %s.\n"),
+ value);
}
-/* Current working directory. */
-
-char *current_directory;
-
/* The last command line executed on the console. Used for command
repetitions when the user enters an empty line. */
@@ -247,13 +244,6 @@ void (*deprecated_readline_end_hook) (void);
void (*deprecated_attach_hook) (void);
void (*deprecated_detach_hook) (void);
-/* Called when going to wait for the target. Usually allows the GUI
- to run while waiting for target events. */
-
-ptid_t (*deprecated_target_wait_hook) (ptid_t ptid,
- struct target_waitstatus *status,
- int options);
-
/* Used by UI as a wrapper around command execution. May do various
things like enabling/disabling buttons, etc... */
@@ -267,6 +257,41 @@ void (*deprecated_context_hook) (int id);
/* The highest UI number ever assigned. */
static int highest_ui_num;
+/* Unbuffer STREAM. This is a wrapper around setbuf(STREAM, nullptr)
+ which applies some special rules for MS-Windows hosts. */
+
+static void
+unbuffer_stream (FILE *stream)
+{
+ /* Unbuffer the input stream so that in gdb_readline_no_editing_callback,
+ the calls to fgetc fetch only one char at the time from STREAM.
+
+ This is important because gdb_readline_no_editing_callback will read
+ from STREAM up to the first '\n' character, after this GDB returns to
+ the event loop and relies on a select on STREAM indicating that more
+ input is pending.
+
+ If STREAM is buffered then the fgetc calls may have moved all the
+ pending input from the kernel into a local buffer, after which the
+ select will not indicate that more input is pending, and input after
+ the first '\n' will not be processed immediately.
+
+ Please ensure that any changes in this area run the MI tests with the
+ FORCE_SEPARATE_MI_TTY=1 flag being passed. */
+
+#ifdef __MINGW32__
+ /* With MS-Windows runtime, making stdin unbuffered when it's
+ connected to the terminal causes it to misbehave. */
+ if (!ISATTY (stream))
+ setbuf (stream, nullptr);
+#else
+ /* On GNU/Linux the issues described above can impact GDB even when
+ dealing with input from a terminal. For now we unbuffer the input
+ stream for everyone except MS-Windows. */
+ setbuf (stream, nullptr);
+#endif
+}
+
/* See top.h. */
ui::ui (FILE *instream_, FILE *outstream_, FILE *errstream_)
@@ -285,7 +310,7 @@ ui::ui (FILE *instream_, FILE *outstream_, FILE *errstream_)
input_fd (fileno (instream)),
input_interactive_p (ISATTY (instream)),
prompt_state (PROMPT_NEEDED),
- m_gdb_stdout (new stdio_file (outstream)),
+ m_gdb_stdout (new pager_file (new stdio_file (outstream))),
m_gdb_stdin (new stdio_file (instream)),
m_gdb_stderr (new stderr_file (errstream)),
m_gdb_stdlog (m_gdb_stderr),
@@ -293,6 +318,8 @@ ui::ui (FILE *instream_, FILE *outstream_, FILE *errstream_)
{
buffer_init (&line_buffer);
+ unbuffer_stream (instream_);
+
if (ui_list == NULL)
ui_list = this;
else
@@ -385,7 +412,7 @@ new_ui_command (const char *args, int from_tty)
ui.release ();
}
- printf_filtered ("New UI allocated\n");
+ gdb_printf ("New UI allocated\n");
}
/* Handler for SIGHUP. */
@@ -422,6 +449,8 @@ read_command_file (FILE *stream)
{
struct ui *ui = current_ui;
+ unbuffer_stream (stream);
+
scoped_restore save_instream
= make_scoped_restore (&ui->instream, stream);
@@ -499,7 +528,7 @@ check_frame_language_change (void)
&& flang != language_unknown
&& flang != current_language->la_language)
{
- printf_filtered ("%s\n", _(lang_frame_mismatch_warn));
+ gdb_printf ("%s\n", _(lang_frame_mismatch_warn));
warned = 1;
}
}
@@ -652,7 +681,7 @@ execute_command (const char *p, int from_tty)
std::string prefixname = c->prefixname ();
std::string prefixname_no_space
= prefixname.substr (0, prefixname.length () - 1);
- printf_filtered
+ gdb_printf
("\"%s\" must be followed by the name of a subcommand.\n",
prefixname_no_space.c_str ());
help_list (*c->subcommands, prefixname.c_str (), all_commands,
@@ -873,7 +902,7 @@ gdb_readline_no_editing (const char *prompt)
/* Don't use a _filtered function here. It causes the assumed
character position to be off, since the newline we read from
the user is not accounted for. */
- fputs_unfiltered (prompt, gdb_stdout);
+ printf_unfiltered ("%s", prompt);
gdb_flush (gdb_stdout);
}
@@ -952,11 +981,11 @@ show_write_history_p (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
if (!write_history_p || !history_filename.empty ())
- fprintf_filtered (file, _("Saving of the history record on exit is %s.\n"),
- value);
+ gdb_printf (file, _("Saving of the history record on exit is %s.\n"),
+ value);
else
- fprintf_filtered (file, _("Saving of the history is disabled due to "
- "the value of 'history filename'.\n"));
+ gdb_printf (file, _("Saving of the history is disabled due to "
+ "the value of 'history filename'.\n"));
}
/* The variable associated with the "set/show history size"
@@ -967,8 +996,8 @@ static void
show_history_size (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("The size of the command history is %s.\n"),
- value);
+ gdb_printf (file, _("The size of the command history is %s.\n"),
+ value);
}
/* Variable associated with the "history remove-duplicates" option.
@@ -979,10 +1008,10 @@ static void
show_history_remove_duplicates (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file,
- _("The number of history entries to look back at for "
- "duplicates is %s.\n"),
- value);
+ gdb_printf (file,
+ _("The number of history entries to look back at for "
+ "duplicates is %s.\n"),
+ value);
}
/* Implement 'show history filename'. */
@@ -991,12 +1020,12 @@ show_history_filename (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
if (!history_filename.empty ())
- fprintf_filtered (file, _("The filename in which to record "
- "the command history is \"%ps\".\n"),
- styled_string (file_name_style.style (), value));
+ gdb_printf (file, _("The filename in which to record "
+ "the command history is \"%ps\".\n"),
+ styled_string (file_name_style.style (), value));
else
- fprintf_filtered (file, _("There is no filename currently set for "
- "recording the command history in.\n"));
+ gdb_printf (file, _("There is no filename currently set for "
+ "recording the command history in.\n"));
}
/* This is like readline(), but it has some gdb-specific behavior.
@@ -1364,7 +1393,6 @@ command_line_input (const char *prompt_arg, const char *annotation_suffix)
/* Make sure that all output has been output. Some machines may
let you get away with leaving out some of the gdb_flush, but
not all. */
- wrap_here ("");
gdb_flush (gdb_stdout);
gdb_flush (gdb_stderr);
@@ -1372,11 +1400,7 @@ command_line_input (const char *prompt_arg, const char *annotation_suffix)
++source_line_number;
if (from_tty && annotation_level > 1)
- {
- puts_unfiltered ("\n\032\032pre-");
- puts_unfiltered (annotation_suffix);
- puts_unfiltered ("\n");
- }
+ printf_unfiltered ("\n\032\032pre-%s\n", annotation_suffix);
/* Don't use fancy stuff if not talking to stdin. */
if (deprecated_readline_hook
@@ -1429,60 +1453,66 @@ print_gdb_version (struct ui_file *stream, bool interactive)
number, which starts after last space. */
std::string v_str = string_printf ("GNU gdb %s%s", PKGVERSION, version);
- fprintf_filtered (stream, "%ps\n",
- styled_string (version_style.style (), v_str.c_str ()));
+ gdb_printf (stream, "%ps\n",
+ styled_string (version_style.style (), v_str.c_str ()));
/* Second line is a copyright notice. */
- fprintf_filtered (stream,
- "Copyright (C) 2022 Free Software Foundation, Inc.\n");
+ gdb_printf (stream,
+ "Copyright (C) 2022 Free Software Foundation, Inc.\n");
/* Following the copyright is a brief statement that the program is
free software, that users are free to copy and change it on
certain conditions, that it is covered by the GNU GPL, and that
there is no warranty. */
- fprintf_filtered (stream, "\
-License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\
+ gdb_printf (stream, "\
+License GPLv3+: GNU GPL version 3 or later <%ps>\
\nThis is free software: you are free to change and redistribute it.\n\
-There is NO WARRANTY, to the extent permitted by law.");
+There is NO WARRANTY, to the extent permitted by law.",
+ styled_string (file_name_style.style (),
+ "http://gnu.org/licenses/gpl.html"));
if (!interactive)
return;
- fprintf_filtered (stream, ("\nType \"show copying\" and "
- "\"show warranty\" for details.\n"));
+ gdb_printf (stream, ("\nType \"show copying\" and "
+ "\"show warranty\" for details.\n"));
/* After the required info we print the configuration information. */
- fprintf_filtered (stream, "This GDB was configured as \"");
+ gdb_printf (stream, "This GDB was configured as \"");
if (strcmp (host_name, target_name) != 0)
{
- fprintf_filtered (stream, "--host=%s --target=%s",
- host_name, target_name);
+ gdb_printf (stream, "--host=%s --target=%s",
+ host_name, target_name);
}
else
{
- fprintf_filtered (stream, "%s", host_name);
+ gdb_printf (stream, "%s", host_name);
}
- fprintf_filtered (stream, "\".\n");
+ gdb_printf (stream, "\".\n");
- fprintf_filtered (stream, _("Type \"show configuration\" "
- "for configuration details.\n"));
+ gdb_printf (stream, _("Type \"show configuration\" "
+ "for configuration details.\n"));
if (REPORT_BUGS_TO[0])
{
- fprintf_filtered (stream,
- _("For bug reporting instructions, please see:\n"));
- fprintf_filtered (stream, "%s.\n", REPORT_BUGS_TO);
+ gdb_printf (stream,
+ _("For bug reporting instructions, please see:\n"));
+ gdb_printf (stream, "%ps.\n",
+ styled_string (file_name_style.style (),
+ REPORT_BUGS_TO));
}
- fprintf_filtered (stream,
- _("Find the GDB manual and other documentation \
-resources online at:\n <http://www.gnu.org/software/gdb/documentation/>."));
- fprintf_filtered (stream, "\n\n");
- fprintf_filtered (stream, _("For help, type \"help\".\n"));
- fprintf_filtered (stream,
- _("Type \"apropos word\" to search for commands \
+ gdb_printf (stream,
+ _("Find the GDB manual and other documentation \
+resources online at:\n <%ps>."),
+ styled_string (file_name_style.style (),
+ "http://www.gnu.org/software/gdb/documentation/"));
+ gdb_printf (stream, "\n\n");
+ gdb_printf (stream, _("For help, type \"help\".\n"));
+ gdb_printf (stream,
+ _("Type \"apropos word\" to search for commands \
related to \"word\"."));
}
@@ -1490,178 +1520,188 @@ related to \"word\"."));
void
print_gdb_configuration (struct ui_file *stream)
{
- fprintf_filtered (stream, _("\
+ gdb_printf (stream, _("\
This GDB was configured as follows:\n\
configure --host=%s --target=%s\n\
"), host_name, target_name);
- fprintf_filtered (stream, _("\
+ gdb_printf (stream, _("\
--with-auto-load-dir=%s\n\
--with-auto-load-safe-path=%s\n\
"), AUTO_LOAD_DIR, AUTO_LOAD_SAFE_PATH);
#if HAVE_LIBEXPAT
- fprintf_filtered (stream, _("\
+ gdb_printf (stream, _("\
--with-expat\n\
"));
#else
- fprintf_filtered (stream, _("\
+ gdb_printf (stream, _("\
--without-expat\n\
"));
#endif
if (GDB_DATADIR[0])
- fprintf_filtered (stream, _("\
+ gdb_printf (stream, _("\
--with-gdb-datadir=%s%s\n\
"), GDB_DATADIR, GDB_DATADIR_RELOCATABLE ? " (relocatable)" : "");
#ifdef ICONV_BIN
- fprintf_filtered (stream, _("\
+ gdb_printf (stream, _("\
--with-iconv-bin=%s%s\n\
"), ICONV_BIN, ICONV_BIN_RELOCATABLE ? " (relocatable)" : "");
#endif
if (JIT_READER_DIR[0])
- fprintf_filtered (stream, _("\
+ gdb_printf (stream, _("\
--with-jit-reader-dir=%s%s\n\
"), JIT_READER_DIR, JIT_READER_DIR_RELOCATABLE ? " (relocatable)" : "");
#if HAVE_LIBUNWIND_IA64_H
- fprintf_filtered (stream, _("\
+ gdb_printf (stream, _("\
--with-libunwind-ia64\n\
"));
#else
- fprintf_filtered (stream, _("\
+ gdb_printf (stream, _("\
--without-libunwind-ia64\n\
"));
#endif
#if HAVE_LIBLZMA
- fprintf_filtered (stream, _("\
+ gdb_printf (stream, _("\
--with-lzma\n\
"));
#else
- fprintf_filtered (stream, _("\
+ gdb_printf (stream, _("\
--without-lzma\n\
"));
#endif
#if HAVE_LIBBABELTRACE
- fprintf_filtered (stream, _("\
+ gdb_printf (stream, _("\
--with-babeltrace\n\
"));
#else
- fprintf_filtered (stream, _("\
+ gdb_printf (stream, _("\
--without-babeltrace\n\
"));
#endif
#if HAVE_LIBIPT
- fprintf_filtered (stream, _("\
+ gdb_printf (stream, _("\
--with-intel-pt\n\
"));
#else
- fprintf_filtered (stream, _("\
+ gdb_printf (stream, _("\
--without-intel-pt\n\
"));
#endif
#if HAVE_LIBMPFR
- fprintf_filtered (stream, _("\
+ gdb_printf (stream, _("\
--with-mpfr\n\
"));
#else
- fprintf_filtered (stream, _("\
+ gdb_printf (stream, _("\
--without-mpfr\n\
"));
#endif
#if HAVE_LIBXXHASH
- fprintf_filtered (stream, _("\
+ gdb_printf (stream, _("\
--with-xxhash\n\
"));
#else
- fprintf_filtered (stream, _("\
+ gdb_printf (stream, _("\
--without-xxhash\n\
"));
#endif
#ifdef WITH_PYTHON_PATH
- fprintf_filtered (stream, _("\
+ gdb_printf (stream, _("\
--with-python=%s%s\n\
"), WITH_PYTHON_PATH, PYTHON_PATH_RELOCATABLE ? " (relocatable)" : "");
#else
- fprintf_filtered (stream, _("\
+ gdb_printf (stream, _("\
--without-python\n\
"));
#endif
#ifdef WITH_PYTHON_LIBDIR
- fprintf_filtered (stream, _("\
+ gdb_printf (stream, _("\
--with-python-libdir=%s%s\n\
"), WITH_PYTHON_LIBDIR, PYTHON_LIBDIR_RELOCATABLE ? " (relocatable)" : "");
#else
- fprintf_filtered (stream, _("\
+ gdb_printf (stream, _("\
--without-python-libdir\n\
"));
#endif
#if HAVE_LIBDEBUGINFOD
- fprintf_filtered (stream, _("\
+ gdb_printf (stream, _("\
--with-debuginfod\n\
"));
#else
- fprintf_filtered (stream, _("\
+ gdb_printf (stream, _("\
--without-debuginfod\n\
"));
#endif
#if HAVE_GUILE
- fprintf_filtered (stream, _("\
+ gdb_printf (stream, _("\
--with-guile\n\
"));
#else
- fprintf_filtered (stream, _("\
+ gdb_printf (stream, _("\
--without-guile\n\
"));
#endif
#if HAVE_SOURCE_HIGHLIGHT
- fprintf_filtered (stream, _("\
+ gdb_printf (stream, _("\
--enable-source-highlight\n\
"));
#else
- fprintf_filtered (stream, _("\
+ gdb_printf (stream, _("\
--disable-source-highlight\n\
"));
#endif
+#if CXX_STD_THREAD
+ gdb_printf (stream, _("\
+ --enable-threading\n\
+"));
+#else
+ gdb_printf (stream, _("\
+ --disable-threading\n\
+"));
+#endif
+
#ifdef RELOC_SRCDIR
- fprintf_filtered (stream, _("\
+ gdb_printf (stream, _("\
--with-relocated-sources=%s\n\
"), RELOC_SRCDIR);
#endif
if (DEBUGDIR[0])
- fprintf_filtered (stream, _("\
+ gdb_printf (stream, _("\
--with-separate-debug-dir=%s%s\n\
"), DEBUGDIR, DEBUGDIR_RELOCATABLE ? " (relocatable)" : "");
if (TARGET_SYSTEM_ROOT[0])
- fprintf_filtered (stream, _("\
+ gdb_printf (stream, _("\
--with-sysroot=%s%s\n\
"), TARGET_SYSTEM_ROOT, TARGET_SYSTEM_ROOT_RELOCATABLE ? " (relocatable)" : "");
if (SYSTEM_GDBINIT[0])
- fprintf_filtered (stream, _("\
+ gdb_printf (stream, _("\
--with-system-gdbinit=%s%s\n\
"), SYSTEM_GDBINIT, SYSTEM_GDBINIT_RELOCATABLE ? " (relocatable)" : "");
if (SYSTEM_GDBINIT_DIR[0])
- fprintf_filtered (stream, _("\
+ gdb_printf (stream, _("\
--with-system-gdbinit-dir=%s%s\n\
"), SYSTEM_GDBINIT_DIR, SYSTEM_GDBINIT_DIR_RELOCATABLE ? " (relocatable)" : "");
/* We assume "relocatable" will be printed at least once, thus we always
print this text. It's a reasonably safe assumption for now. */
- fprintf_filtered (stream, _("\n\
+ gdb_printf (stream, _("\n\
(\"Relocatable\" means the directory can be moved with the GDB installation\n\
tree, and GDB will still find it.)\n\
"));
@@ -1724,13 +1764,13 @@ print_inferior_quit_action (inferior *inf, ui_file *out)
return;
if (inf->attach_flag)
- fprintf_filtered (out,
- _("\tInferior %d [%s] will be detached.\n"), inf->num,
- target_pid_to_str (ptid_t (inf->pid)).c_str ());
+ gdb_printf (out,
+ _("\tInferior %d [%s] will be detached.\n"), inf->num,
+ target_pid_to_str (ptid_t (inf->pid)).c_str ());
else
- fprintf_filtered (out,
- _("\tInferior %d [%s] will be killed.\n"), inf->num,
- target_pid_to_str (ptid_t (inf->pid)).c_str ());
+ gdb_printf (out,
+ _("\tInferior %d [%s] will be killed.\n"), inf->num,
+ target_pid_to_str (ptid_t (inf->pid)).c_str ());
}
/* If necessary, make the user confirm that we should quit. Return
@@ -1881,11 +1921,11 @@ show_interactive_mode (struct ui_file *file, int from_tty,
const char *value)
{
if (interactive_mode == AUTO_BOOLEAN_AUTO)
- fprintf_filtered (file, "Debugger's interactive mode "
- "is %s (currently %s).\n",
- value, input_interactive_p (current_ui) ? "on" : "off");
+ gdb_printf (file, "Debugger's interactive mode "
+ "is %s (currently %s).\n",
+ value, input_interactive_p (current_ui) ? "on" : "off");
else
- fprintf_filtered (file, "Debugger's interactive mode is %s.\n", value);
+ gdb_printf (file, "Debugger's interactive mode is %s.\n", value);
}
/* Returns whether GDB is running on an interactive terminal. */
@@ -1957,8 +1997,8 @@ show_commands (const char *args, int from_tty)
offset < num + Hist_print && offset < history_length;
offset++)
{
- printf_filtered ("%5d %s\n", history_base + offset,
- (history_get (history_base + offset))->line);
+ gdb_printf ("%5d %s\n", history_base + offset,
+ (history_get (history_base + offset))->line);
}
/* The next command we want to display is the next one that we haven't
@@ -2083,7 +2123,7 @@ static void
show_prompt (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Gdb's prompt is \"%s\".\n"), value);
+ gdb_printf (file, _("Gdb's prompt is \"%s\".\n"), value);
}
/* "set editing" command. */
@@ -2101,25 +2141,25 @@ static void
show_editing (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Editing of command lines as "
- "they are typed is %s.\n"),
- current_ui->command_editing ? _("on") : _("off"));
+ gdb_printf (file, _("Editing of command lines as "
+ "they are typed is %s.\n"),
+ current_ui->command_editing ? _("on") : _("off"));
}
static void
show_annotation_level (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Annotation_level is %s.\n"), value);
+ gdb_printf (file, _("Annotation_level is %s.\n"), value);
}
static void
show_exec_done_display_p (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Notification of completion for "
- "asynchronous execution commands is %s.\n"),
- value);
+ gdb_printf (file, _("Notification of completion for "
+ "asynchronous execution commands is %s.\n"),
+ value);
}
/* New values of the "data-directory" parameter are staged here.
@@ -2150,9 +2190,9 @@ static void
show_gdb_datadir (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("GDB's data directory is \"%ps\".\n"),
- styled_string (file_name_style.style (),
- gdb_datadir.c_str ()));
+ gdb_printf (file, _("GDB's data directory is \"%ps\".\n"),
+ styled_string (file_name_style.style (),
+ gdb_datadir.c_str ()));
}
/* Implement 'set history filename'. */
@@ -2166,12 +2206,7 @@ set_history_filename (const char *args,
that was read. */
if (!history_filename.empty ()
&& !IS_ABSOLUTE_PATH (history_filename.c_str ()))
- {
- gdb::unique_xmalloc_ptr<char> temp
- (gdb_abspath (history_filename.c_str ()));
-
- history_filename = temp.get ();
- }
+ history_filename = gdb_abspath (history_filename.c_str ());
}
/* Whether we're in quiet startup mode. */
@@ -2192,8 +2227,8 @@ static void
show_startup_quiet (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Whether to start up quietly is %s.\n"),
- value);
+ gdb_printf (file, _("Whether to start up quietly is %s.\n"),
+ value);
}
static void
@@ -2229,6 +2264,7 @@ init_main (void)
rl_completion_display_matches_hook = cli_display_match_list;
rl_readline_name = "gdb";
rl_terminal_name = getenv ("TERM");
+ rl_deprep_term_function = gdb_rl_deprep_term_function;
/* The name for this defun comes from Bash, where it originated.
15 is Control-o, the same binding this function has in Bash. */
@@ -2443,7 +2479,6 @@ _initialize_top ()
const char *fname = ".gdb_history";
#endif
- gdb::unique_xmalloc_ptr<char> temp (gdb_abspath (fname));
- history_filename = temp.get ();
+ history_filename = gdb_abspath (fname);
}
}
diff --git a/gdb/top.h b/gdb/top.h
index 25361d0effa..b26209e8c8d 100644
--- a/gdb/top.h
+++ b/gdb/top.h
@@ -25,8 +25,6 @@
#include "gdbsupport/next-iterator.h"
#include "value.h"
-struct tl_interp_info;
-
/* Prompt state. */
enum prompt_state
diff --git a/gdb/tracectf.c b/gdb/tracectf.c
index f0cc5ce7bcb..155c8b7db06 100644
--- a/gdb/tracectf.c
+++ b/gdb/tracectf.c
@@ -1200,7 +1200,7 @@ ctf_target::close ()
void
ctf_target::files_info ()
{
- printf_filtered ("\t`%s'\n", trace_dirname);
+ gdb_printf ("\t`%s'\n", trace_dirname);
}
/* This is the implementation of target_ops method to_fetch_registers.
diff --git a/gdb/tracefile-tfile.c b/gdb/tracefile-tfile.c
index dae90bc439a..f84ad2f4a3f 100644
--- a/gdb/tracefile-tfile.c
+++ b/gdb/tracefile-tfile.c
@@ -471,7 +471,7 @@ tfile_target_open (const char *arg, int from_tty)
gdb::unique_xmalloc_ptr<char> filename (tilde_expand (arg));
if (!IS_ABSOLUTE_PATH (filename.get ()))
- filename = gdb_abspath (filename.get ());
+ filename = make_unique_xstrdup (gdb_abspath (filename.get ()).c_str ());
flags = O_BINARY | O_LARGEFILE;
flags |= O_RDONLY;
@@ -634,7 +634,7 @@ tfile_target::close ()
void
tfile_target::files_info ()
{
- printf_filtered ("\t`%s'\n", trace_filename);
+ gdb_printf ("\t`%s'\n", trace_filename);
}
void
diff --git a/gdb/tracefile.c b/gdb/tracefile.c
index 50510af9805..44d88103d4b 100644
--- a/gdb/tracefile.c
+++ b/gdb/tracefile.c
@@ -24,6 +24,7 @@
#include "regcache.h"
#include "gdbsupport/byte-vector.h"
#include "gdbarch.h"
+#include "gdbsupport/buildargv.h"
/* Helper macros. */
@@ -350,8 +351,8 @@ tsave_command (const char *args, int from_tty)
trace_save_tfile (filename, target_does_save);
if (from_tty)
- printf_filtered (_("Trace data saved to %s '%s'.\n"),
- generate_ctf ? "directory" : "file", filename);
+ gdb_printf (_("Trace data saved to %s '%s'.\n"),
+ generate_ctf ? "directory" : "file", filename);
}
/* Save the trace data to file FILENAME of tfile format. */
diff --git a/gdb/tracepoint.c b/gdb/tracepoint.c
index dc5e7f141cf..44d16b55bca 100644
--- a/gdb/tracepoint.c
+++ b/gdb/tracepoint.c
@@ -58,6 +58,7 @@
#include <algorithm>
#include "cli/cli-style.h"
#include "expop.h"
+#include "gdbsupport/buildargv.h"
#include <unistd.h>
@@ -71,11 +72,6 @@
large. (400 - 31)/2 == 184 */
#define MAX_AGENT_EXPR_LEN 184
-/* A hook used to notify the UI of tracepoint operations. */
-
-void (*deprecated_trace_find_hook) (char *arg, int from_tty);
-void (*deprecated_trace_start_stop_hook) (int start, int from_tty);
-
/*
Tracepoint.c:
@@ -366,9 +362,9 @@ trace_variable_command (const char *args, int from_tty)
tsv->initial_value = initval;
gdb::observers::tsv_modified.notify (tsv);
}
- printf_filtered (_("Trace state variable $%s "
- "now has initial value %s.\n"),
- tsv->name.c_str (), plongest (tsv->initial_value));
+ gdb_printf (_("Trace state variable $%s "
+ "now has initial value %s.\n"),
+ tsv->name.c_str (), plongest (tsv->initial_value));
return;
}
@@ -378,9 +374,9 @@ trace_variable_command (const char *args, int from_tty)
gdb::observers::tsv_created.notify (tsv);
- printf_filtered (_("Trace state variable $%s "
- "created, with initial value %s.\n"),
- tsv->name.c_str (), plongest (tsv->initial_value));
+ gdb_printf (_("Trace state variable $%s "
+ "created, with initial value %s.\n"),
+ tsv->name.c_str (), plongest (tsv->initial_value));
}
static void
@@ -481,10 +477,10 @@ save_trace_state_variables (struct ui_file *fp)
{
for (const trace_state_variable &tsv : tvariables)
{
- fprintf_unfiltered (fp, "tvariable $%s", tsv.name.c_str ());
+ gdb_printf (fp, "tvariable $%s", tsv.name.c_str ());
if (tsv.initial_value)
- fprintf_unfiltered (fp, " = %s", plongest (tsv.initial_value));
- fprintf_unfiltered (fp, "\n");
+ gdb_printf (fp, " = %s", plongest (tsv.initial_value));
+ gdb_printf (fp, "\n");
}
}
@@ -695,14 +691,14 @@ validate_actionline (const char *line, struct breakpoint *b)
(exp->op.get ()));
sym = vvop->get_symbol ();
- if (SYMBOL_CLASS (sym) == LOC_CONST)
+ if (sym->aclass () == LOC_CONST)
{
error (_("constant `%s' (value %s) "
"will not be collected."),
sym->print_name (),
- plongest (SYMBOL_VALUE (sym)));
+ plongest (sym->value_longest ()));
}
- else if (SYMBOL_CLASS (sym) == LOC_OPTIMIZED_OUT)
+ else if (sym->aclass () == LOC_OPTIMIZED_OUT)
{
error (_("`%s' is optimized away "
"and cannot be collected."),
@@ -826,7 +822,7 @@ void
collection_list::add_remote_register (unsigned int regno)
{
if (info_verbose)
- printf_filtered ("collect register %d\n", regno);
+ gdb_printf ("collect register %d\n", regno);
m_regs_mask.at (regno / 8) |= 1 << (regno % 8);
}
@@ -901,7 +897,7 @@ collection_list::add_memrange (struct gdbarch *gdbarch,
unsigned long len, CORE_ADDR scope)
{
if (info_verbose)
- printf_filtered ("(%d,%s,%ld)\n", type, paddress (gdbarch, base), len);
+ gdb_printf ("(%d,%s,%ld)\n", type, paddress (gdbarch, base), len);
/* type: memrange_absolute == memory, other n == basereg */
/* base: addr if memory, offset if reg relative. */
@@ -926,28 +922,28 @@ collection_list::collect_symbol (struct symbol *sym,
bfd_signed_vma offset;
int treat_as_expr = 0;
- len = TYPE_LENGTH (check_typedef (SYMBOL_TYPE (sym)));
- switch (SYMBOL_CLASS (sym))
+ len = TYPE_LENGTH (check_typedef (sym->type ()));
+ switch (sym->aclass ())
{
default:
- printf_filtered ("%s: don't know symbol class %d\n",
- sym->print_name (), SYMBOL_CLASS (sym));
+ gdb_printf ("%s: don't know symbol class %d\n",
+ sym->print_name (), sym->aclass ());
break;
case LOC_CONST:
- printf_filtered ("constant %s (value %s) will not be collected.\n",
- sym->print_name (), plongest (SYMBOL_VALUE (sym)));
+ gdb_printf ("constant %s (value %s) will not be collected.\n",
+ sym->print_name (), plongest (sym->value_longest ()));
break;
case LOC_STATIC:
- offset = SYMBOL_VALUE_ADDRESS (sym);
+ offset = sym->value_address ();
if (info_verbose)
{
- printf_filtered ("LOC_STATIC %s: collect %ld bytes at %s.\n",
- sym->print_name (), len,
- paddress (gdbarch, offset));
+ gdb_printf ("LOC_STATIC %s: collect %ld bytes at %s.\n",
+ sym->print_name (), len,
+ paddress (gdbarch, offset));
}
/* A struct may be a C++ class with static fields, go to general
expression handling. */
- if (SYMBOL_TYPE (sym)->code () == TYPE_CODE_STRUCT)
+ if (sym->type ()->code () == TYPE_CODE_STRUCT)
treat_as_expr = 1;
else
add_memrange (gdbarch, memrange_absolute, offset, len, scope);
@@ -955,48 +951,48 @@ collection_list::collect_symbol (struct symbol *sym,
case LOC_REGISTER:
reg = SYMBOL_REGISTER_OPS (sym)->register_number (sym, gdbarch);
if (info_verbose)
- printf_filtered ("LOC_REG[parm] %s: ", sym->print_name ());
+ gdb_printf ("LOC_REG[parm] %s: ", sym->print_name ());
add_local_register (gdbarch, reg, scope);
/* Check for doubles stored in two registers. */
/* FIXME: how about larger types stored in 3 or more regs? */
- if (SYMBOL_TYPE (sym)->code () == TYPE_CODE_FLT &&
+ if (sym->type ()->code () == TYPE_CODE_FLT &&
len > register_size (gdbarch, reg))
add_local_register (gdbarch, reg + 1, scope);
break;
case LOC_REF_ARG:
- printf_filtered ("Sorry, don't know how to do LOC_REF_ARG yet.\n");
- printf_filtered (" (will not collect %s)\n", sym->print_name ());
+ gdb_printf ("Sorry, don't know how to do LOC_REF_ARG yet.\n");
+ gdb_printf (" (will not collect %s)\n", sym->print_name ());
break;
case LOC_ARG:
reg = frame_regno;
- offset = frame_offset + SYMBOL_VALUE (sym);
+ offset = frame_offset + sym->value_longest ();
if (info_verbose)
{
- printf_filtered ("LOC_LOCAL %s: Collect %ld bytes at offset %s"
- " from frame ptr reg %d\n", sym->print_name (), len,
- paddress (gdbarch, offset), reg);
+ gdb_printf ("LOC_LOCAL %s: Collect %ld bytes at offset %s"
+ " from frame ptr reg %d\n", sym->print_name (), len,
+ paddress (gdbarch, offset), reg);
}
add_memrange (gdbarch, reg, offset, len, scope);
break;
case LOC_REGPARM_ADDR:
- reg = SYMBOL_VALUE (sym);
+ reg = sym->value_longest ();
offset = 0;
if (info_verbose)
{
- printf_filtered ("LOC_REGPARM_ADDR %s: Collect %ld bytes at offset %s"
- " from reg %d\n", sym->print_name (), len,
- paddress (gdbarch, offset), reg);
+ gdb_printf ("LOC_REGPARM_ADDR %s: Collect %ld bytes at offset %s"
+ " from reg %d\n", sym->print_name (), len,
+ paddress (gdbarch, offset), reg);
}
add_memrange (gdbarch, reg, offset, len, scope);
break;
case LOC_LOCAL:
reg = frame_regno;
- offset = frame_offset + SYMBOL_VALUE (sym);
+ offset = frame_offset + sym->value_longest ();
if (info_verbose)
{
- printf_filtered ("LOC_LOCAL %s: Collect %ld bytes at offset %s"
- " from frame ptr reg %d\n", sym->print_name (), len,
- paddress (gdbarch, offset), reg);
+ gdb_printf ("LOC_LOCAL %s: Collect %ld bytes at offset %s"
+ " from frame ptr reg %d\n", sym->print_name (), len,
+ paddress (gdbarch, offset), reg);
}
add_memrange (gdbarch, reg, offset, len, scope);
break;
@@ -1006,8 +1002,8 @@ collection_list::collect_symbol (struct symbol *sym,
break;
case LOC_OPTIMIZED_OUT:
- printf_filtered ("%s has been optimized out of existence.\n",
- sym->print_name ());
+ gdb_printf ("%s has been optimized out of existence.\n",
+ sym->print_name ());
break;
case LOC_COMPUTED:
@@ -1026,8 +1022,8 @@ collection_list::collect_symbol (struct symbol *sym,
have a location expression. */
if (!aexpr)
{
- printf_filtered ("%s has been optimized out of existence.\n",
- sym->print_name ());
+ gdb_printf ("%s has been optimized out of existence.\n",
+ sym->print_name ());
return;
}
@@ -1040,36 +1036,6 @@ collection_list::collect_symbol (struct symbol *sym,
}
}
-/* Data to be passed around in the calls to the locals and args
- iterators. */
-
-struct add_local_symbols_data
-{
- struct collection_list *collect;
- struct gdbarch *gdbarch;
- CORE_ADDR pc;
- long frame_regno;
- long frame_offset;
- int count;
- int trace_string;
-};
-
-/* The callback for the locals and args iterators. */
-
-static void
-do_collect_symbol (const char *print_name,
- struct symbol *sym,
- void *cb_data)
-{
- struct add_local_symbols_data *p = (struct add_local_symbols_data *) cb_data;
-
- p->collect->collect_symbol (sym, p->gdbarch, p->frame_regno,
- p->frame_offset, p->pc, p->trace_string);
- p->count++;
-
- p->collect->add_wholly_collected (print_name);
-}
-
void
collection_list::add_wholly_collected (const char *print_name)
{
@@ -1084,15 +1050,16 @@ collection_list::add_local_symbols (struct gdbarch *gdbarch, CORE_ADDR pc,
int trace_string)
{
const struct block *block;
- struct add_local_symbols_data cb_data;
+ int count = 0;
- cb_data.collect = this;
- cb_data.gdbarch = gdbarch;
- cb_data.pc = pc;
- cb_data.frame_regno = frame_regno;
- cb_data.frame_offset = frame_offset;
- cb_data.count = 0;
- cb_data.trace_string = trace_string;
+ auto do_collect_symbol = [&] (const char *print_name,
+ struct symbol *sym)
+ {
+ collect_symbol (sym, gdbarch, frame_regno,
+ frame_offset, pc, trace_string);
+ count++;
+ add_wholly_collected (print_name);
+ };
if (type == 'L')
{
@@ -1104,22 +1071,22 @@ collection_list::add_local_symbols (struct gdbarch *gdbarch, CORE_ADDR pc,
return;
}
- iterate_over_block_local_vars (block, do_collect_symbol, &cb_data);
- if (cb_data.count == 0)
+ iterate_over_block_local_vars (block, do_collect_symbol);
+ if (count == 0)
warning (_("No locals found in scope."));
}
else
{
- pc = get_pc_function_start (pc);
- block = block_for_pc (pc);
+ CORE_ADDR fn_pc = get_pc_function_start (pc);
+ block = block_for_pc (fn_pc);
if (block == NULL)
{
warning (_("Can't collect args; no symbol table info available."));
return;
}
- iterate_over_block_arg_vars (block, do_collect_symbol, &cb_data);
- if (cb_data.count == 0)
+ iterate_over_block_arg_vars (block, do_collect_symbol);
+ if (count == 0)
warning (_("No args found in scope."));
}
}
@@ -1128,7 +1095,7 @@ void
collection_list::add_static_trace_data ()
{
if (info_verbose)
- printf_filtered ("collect static trace data\n");
+ gdb_printf ("collect static trace data\n");
m_strace_data = true;
}
@@ -1166,7 +1133,7 @@ collection_list::stringify ()
if (m_strace_data)
{
if (info_verbose)
- printf_filtered ("\nCollecting static trace data\n");
+ gdb_printf ("\nCollecting static trace data\n");
end = temp_buf.data ();
*end++ = 'L';
str_list.emplace_back (temp_buf.data (), end - temp_buf.data ());
@@ -1178,7 +1145,7 @@ collection_list::stringify ()
if (m_regs_mask[i] != 0) /* Prepare to send regs_mask to the stub. */
{
if (info_verbose)
- printf_filtered ("\nCollecting registers (mask): 0x");
+ gdb_printf ("\nCollecting registers (mask): 0x");
/* One char for 'R', one for the null terminator and two per
mask byte. */
@@ -1192,7 +1159,7 @@ collection_list::stringify ()
{
QUIT; /* Allow user to bail out with ^C. */
if (info_verbose)
- printf_filtered ("%02X", m_regs_mask[i]);
+ gdb_printf ("%02X", m_regs_mask[i]);
end = pack_hex_byte (end, m_regs_mask[i]);
}
@@ -1201,21 +1168,21 @@ collection_list::stringify ()
str_list.emplace_back (temp_buf.data ());
}
if (info_verbose)
- printf_filtered ("\n");
+ gdb_printf ("\n");
if (!m_memranges.empty () && info_verbose)
- printf_filtered ("Collecting memranges: \n");
+ gdb_printf ("Collecting memranges: \n");
for (i = 0, count = 0, end = temp_buf.data ();
i < m_memranges.size (); i++)
{
QUIT; /* Allow user to bail out with ^C. */
if (info_verbose)
{
- printf_filtered ("(%d, %s, %ld)\n",
- m_memranges[i].type,
- paddress (target_gdbarch (),
- m_memranges[i].start),
- (long) (m_memranges[i].end
- - m_memranges[i].start));
+ gdb_printf ("(%d, %s, %ld)\n",
+ m_memranges[i].type,
+ paddress (target_gdbarch (),
+ m_memranges[i].start),
+ (long) (m_memranges[i].end
+ - m_memranges[i].start));
}
if (count + 27 > MAX_AGENT_EXPR_LEN)
{
@@ -1401,7 +1368,7 @@ encode_actions_1 (struct command_line *action,
_("Register $%s not available"),
name);
if (info_verbose)
- printf_filtered ("OP_REGISTER: ");
+ gdb_printf ("OP_REGISTER: ");
collect->add_local_register (target_gdbarch (),
i, tloc->address);
break;
@@ -1788,61 +1755,61 @@ tstatus_command (const char *args, int from_tty)
if (status == -1)
{
if (ts->filename != NULL)
- printf_filtered (_("Using a trace file.\n"));
+ gdb_printf (_("Using a trace file.\n"));
else
{
- printf_filtered (_("Trace can not be run on this target.\n"));
+ gdb_printf (_("Trace can not be run on this target.\n"));
return;
}
}
if (!ts->running_known)
{
- printf_filtered (_("Run/stop status is unknown.\n"));
+ gdb_printf (_("Run/stop status is unknown.\n"));
}
else if (ts->running)
{
- printf_filtered (_("Trace is running on the target.\n"));
+ gdb_printf (_("Trace is running on the target.\n"));
}
else
{
switch (ts->stop_reason)
{
case trace_never_run:
- printf_filtered (_("No trace has been run on the target.\n"));
+ gdb_printf (_("No trace has been run on the target.\n"));
break;
case trace_stop_command:
if (ts->stop_desc)
- printf_filtered (_("Trace stopped by a tstop command (%s).\n"),
- ts->stop_desc);
+ gdb_printf (_("Trace stopped by a tstop command (%s).\n"),
+ ts->stop_desc);
else
- printf_filtered (_("Trace stopped by a tstop command.\n"));
+ gdb_printf (_("Trace stopped by a tstop command.\n"));
break;
case trace_buffer_full:
- printf_filtered (_("Trace stopped because the buffer was full.\n"));
+ gdb_printf (_("Trace stopped because the buffer was full.\n"));
break;
case trace_disconnected:
- printf_filtered (_("Trace stopped because of disconnection.\n"));
+ gdb_printf (_("Trace stopped because of disconnection.\n"));
break;
case tracepoint_passcount:
- printf_filtered (_("Trace stopped by tracepoint %d.\n"),
- ts->stopping_tracepoint);
+ gdb_printf (_("Trace stopped by tracepoint %d.\n"),
+ ts->stopping_tracepoint);
break;
case tracepoint_error:
if (ts->stopping_tracepoint)
- printf_filtered (_("Trace stopped by an "
- "error (%s, tracepoint %d).\n"),
- ts->stop_desc, ts->stopping_tracepoint);
+ gdb_printf (_("Trace stopped by an "
+ "error (%s, tracepoint %d).\n"),
+ ts->stop_desc, ts->stopping_tracepoint);
else
- printf_filtered (_("Trace stopped by an error (%s).\n"),
- ts->stop_desc);
+ gdb_printf (_("Trace stopped by an error (%s).\n"),
+ ts->stop_desc);
break;
case trace_stop_reason_unknown:
- printf_filtered (_("Trace stopped for an unknown reason.\n"));
+ gdb_printf (_("Trace stopped for an unknown reason.\n"));
break;
default:
- printf_filtered (_("Trace stopped for some other reason (%d).\n"),
- ts->stop_reason);
+ gdb_printf (_("Trace stopped for some other reason (%d).\n"),
+ ts->stop_reason);
break;
}
}
@@ -1850,54 +1817,54 @@ tstatus_command (const char *args, int from_tty)
if (ts->traceframes_created >= 0
&& ts->traceframe_count != ts->traceframes_created)
{
- printf_filtered (_("Buffer contains %d trace "
- "frames (of %d created total).\n"),
- ts->traceframe_count, ts->traceframes_created);
+ gdb_printf (_("Buffer contains %d trace "
+ "frames (of %d created total).\n"),
+ ts->traceframe_count, ts->traceframes_created);
}
else if (ts->traceframe_count >= 0)
{
- printf_filtered (_("Collected %d trace frames.\n"),
- ts->traceframe_count);
+ gdb_printf (_("Collected %d trace frames.\n"),
+ ts->traceframe_count);
}
if (ts->buffer_free >= 0)
{
if (ts->buffer_size >= 0)
{
- printf_filtered (_("Trace buffer has %d bytes of %d bytes free"),
- ts->buffer_free, ts->buffer_size);
+ gdb_printf (_("Trace buffer has %d bytes of %d bytes free"),
+ ts->buffer_free, ts->buffer_size);
if (ts->buffer_size > 0)
- printf_filtered (_(" (%d%% full)"),
- ((int) ((((long long) (ts->buffer_size
- - ts->buffer_free)) * 100)
- / ts->buffer_size)));
- printf_filtered (_(".\n"));
+ gdb_printf (_(" (%d%% full)"),
+ ((int) ((((long long) (ts->buffer_size
+ - ts->buffer_free)) * 100)
+ / ts->buffer_size)));
+ gdb_printf (_(".\n"));
}
else
- printf_filtered (_("Trace buffer has %d bytes free.\n"),
- ts->buffer_free);
+ gdb_printf (_("Trace buffer has %d bytes free.\n"),
+ ts->buffer_free);
}
if (ts->disconnected_tracing)
- printf_filtered (_("Trace will continue if GDB disconnects.\n"));
+ gdb_printf (_("Trace will continue if GDB disconnects.\n"));
else
- printf_filtered (_("Trace will stop if GDB disconnects.\n"));
+ gdb_printf (_("Trace will stop if GDB disconnects.\n"));
if (ts->circular_buffer)
- printf_filtered (_("Trace buffer is circular.\n"));
+ gdb_printf (_("Trace buffer is circular.\n"));
if (ts->user_name && strlen (ts->user_name) > 0)
- printf_filtered (_("Trace user is %s.\n"), ts->user_name);
+ gdb_printf (_("Trace user is %s.\n"), ts->user_name);
if (ts->notes && strlen (ts->notes) > 0)
- printf_filtered (_("Trace notes: %s.\n"), ts->notes);
+ gdb_printf (_("Trace notes: %s.\n"), ts->notes);
/* Now report on what we're doing with tfind. */
if (traceframe_number >= 0)
- printf_filtered (_("Looking at trace frame %d, tracepoint %d.\n"),
- traceframe_number, tracepoint_number);
+ gdb_printf (_("Looking at trace frame %d, tracepoint %d.\n"),
+ traceframe_number, tracepoint_number);
else
- printf_filtered (_("Not looking at any trace frame.\n"));
+ gdb_printf (_("Not looking at any trace frame.\n"));
/* Report start/stop times if supplied. */
if (ts->start_time)
@@ -1907,21 +1874,21 @@ tstatus_command (const char *args, int from_tty)
LONGEST run_time = ts->stop_time - ts->start_time;
/* Reporting a run time is more readable than two long numbers. */
- printf_filtered (_("Trace started at %ld.%06ld secs, stopped %ld.%06ld secs later.\n"),
- (long int) (ts->start_time / 1000000),
- (long int) (ts->start_time % 1000000),
- (long int) (run_time / 1000000),
- (long int) (run_time % 1000000));
+ gdb_printf (_("Trace started at %ld.%06ld secs, stopped %ld.%06ld secs later.\n"),
+ (long int) (ts->start_time / 1000000),
+ (long int) (ts->start_time % 1000000),
+ (long int) (run_time / 1000000),
+ (long int) (run_time % 1000000));
}
else
- printf_filtered (_("Trace started at %ld.%06ld secs.\n"),
- (long int) (ts->start_time / 1000000),
- (long int) (ts->start_time % 1000000));
+ gdb_printf (_("Trace started at %ld.%06ld secs.\n"),
+ (long int) (ts->start_time / 1000000),
+ (long int) (ts->start_time % 1000000));
}
else if (ts->stop_time)
- printf_filtered (_("Trace stopped at %ld.%06ld secs.\n"),
- (long int) (ts->stop_time / 1000000),
- (long int) (ts->stop_time % 1000000));
+ gdb_printf (_("Trace stopped at %ld.%06ld secs.\n"),
+ (long int) (ts->stop_time / 1000000),
+ (long int) (ts->stop_time % 1000000));
/* Now report any per-tracepoint status available. */
for (breakpoint *t : all_tracepoints ())
@@ -2157,7 +2124,7 @@ tfind_1 (enum trace_find_type type, int num,
else
{
if (info_verbose)
- printf_filtered ("End of trace buffer.\n");
+ gdb_printf ("End of trace buffer.\n");
#if 0 /* dubious now? */
/* The following will not recurse, since it's
special-cased. */
@@ -2195,8 +2162,8 @@ tfind_1 (enum trace_find_type type, int num,
}
else
{
- printf_filtered (_("Found trace frame %d, tracepoint %d\n"),
- traceframe_number, tracepoint_number);
+ gdb_printf (_("Found trace frame %d, tracepoint %d\n"),
+ traceframe_number, tracepoint_number);
}
}
else
@@ -2204,9 +2171,9 @@ tfind_1 (enum trace_find_type type, int num,
if (uiout->is_mi_like_p ())
uiout->field_string ("found", "0");
else if (type == tfind_number && num == -1)
- printf_filtered (_("No longer looking at any trace frame\n"));
+ gdb_printf (_("No longer looking at any trace frame\n"));
else /* This case may never occur, check. */
- printf_filtered (_("No trace frame found\n"));
+ gdb_printf (_("No trace frame found\n"));
}
/* If we're in nonstop mode and getting out of looking at trace
@@ -2391,32 +2358,32 @@ tfind_line_command (const char *args, int from_tty)
{
if (start_pc == end_pc)
{
- printf_filtered ("Line %d of \"%s\"",
- sal.line,
- symtab_to_filename_for_display (sal.symtab));
- wrap_here (" ");
- printf_filtered (" is at address ");
+ gdb_printf ("Line %d of \"%s\"",
+ sal.line,
+ symtab_to_filename_for_display (sal.symtab));
+ gdb_stdout->wrap_here (2);
+ gdb_printf (" is at address ");
print_address (get_current_arch (), start_pc, gdb_stdout);
- wrap_here (" ");
- printf_filtered (" but contains no code.\n");
+ gdb_stdout->wrap_here (2);
+ gdb_printf (" but contains no code.\n");
sal = find_pc_line (start_pc, 0);
if (sal.line > 0
&& find_line_pc_range (sal, &start_pc, &end_pc)
&& start_pc != end_pc)
- printf_filtered ("Attempting to find line %d instead.\n",
- sal.line);
+ gdb_printf ("Attempting to find line %d instead.\n",
+ sal.line);
else
error (_("Cannot find a good line."));
}
}
- else
- {
- /* Is there any case in which we get here, and have an address
- which the user would want to see? If we have debugging
- symbols and no line numbers? */
- error (_("Line number %d is out of range for \"%s\"."),
- sal.line, symtab_to_filename_for_display (sal.symtab));
- }
+ else
+ {
+ /* Is there any case in which we get here, and have an address
+ which the user would want to see? If we have debugging
+ symbols and no line numbers? */
+ error (_("Line number %d is out of range for \"%s\"."),
+ sal.line, symtab_to_filename_for_display (sal.symtab));
+ }
/* Find within range of stated line. */
if (args && *args)
@@ -2436,7 +2403,7 @@ tfind_range_command (const char *args, int from_tty)
if (args == 0 || *args == 0)
{ /* XXX FIXME: what should default behavior be? */
- printf_filtered ("Usage: tfind range STARTADDR, ENDADDR\n");
+ gdb_printf ("Usage: tfind range STARTADDR, ENDADDR\n");
return;
}
@@ -2470,7 +2437,7 @@ tfind_outside_command (const char *args, int from_tty)
if (args == 0 || *args == 0)
{ /* XXX FIXME: what should default behavior be? */
- printf_filtered ("Usage: tfind outside STARTADDR, ENDADDR\n");
+ gdb_printf ("Usage: tfind outside STARTADDR, ENDADDR\n");
return;
}
@@ -2532,47 +2499,45 @@ info_scope_command (const char *args_in, int from_tty)
{
QUIT; /* Allow user to bail out with ^C. */
if (count == 0)
- printf_filtered ("Scope for %s:\n", save_args);
+ gdb_printf ("Scope for %s:\n", save_args);
count++;
symname = sym->print_name ();
if (symname == NULL || *symname == '\0')
continue; /* Probably botched, certainly useless. */
- gdbarch = symbol_arch (sym);
+ gdbarch = sym->arch ();
- printf_filtered ("Symbol %s is ", symname);
+ gdb_printf ("Symbol %s is ", symname);
if (SYMBOL_COMPUTED_OPS (sym) != NULL)
SYMBOL_COMPUTED_OPS (sym)->describe_location (sym,
- BLOCK_ENTRY_PC (block),
+ block->entry_pc (),
gdb_stdout);
else
{
- switch (SYMBOL_CLASS (sym))
+ switch (sym->aclass ())
{
default:
case LOC_UNDEF: /* Messed up symbol? */
- printf_filtered ("a bogus symbol, class %d.\n",
- SYMBOL_CLASS (sym));
+ gdb_printf ("a bogus symbol, class %d.\n",
+ sym->aclass ());
count--; /* Don't count this one. */
continue;
case LOC_CONST:
- printf_filtered ("a constant with value %s (%s)",
- plongest (SYMBOL_VALUE (sym)),
- hex_string (SYMBOL_VALUE (sym)));
+ gdb_printf ("a constant with value %s (%s)",
+ plongest (sym->value_longest ()),
+ hex_string (sym->value_longest ()));
break;
case LOC_CONST_BYTES:
- printf_filtered ("constant bytes: ");
- if (SYMBOL_TYPE (sym))
- for (j = 0; j < TYPE_LENGTH (SYMBOL_TYPE (sym)); j++)
- fprintf_filtered (gdb_stdout, " %02x",
- (unsigned) SYMBOL_VALUE_BYTES (sym)[j]);
+ gdb_printf ("constant bytes: ");
+ if (sym->type ())
+ for (j = 0; j < TYPE_LENGTH (sym->type ()); j++)
+ gdb_printf (" %02x", (unsigned) sym->value_bytes ()[j]);
break;
case LOC_STATIC:
- printf_filtered ("in static storage at address ");
- printf_filtered ("%s", paddress (gdbarch,
- SYMBOL_VALUE_ADDRESS (sym)));
+ gdb_printf ("in static storage at address ");
+ gdb_printf ("%s", paddress (gdbarch, sym->value_address ()));
break;
case LOC_REGISTER:
/* GDBARCH is the architecture associated with the objfile
@@ -2585,80 +2550,79 @@ info_scope_command (const char *args_in, int from_tty)
regno = SYMBOL_REGISTER_OPS (sym)->register_number (sym,
gdbarch);
- if (SYMBOL_IS_ARGUMENT (sym))
- printf_filtered ("an argument in register $%s",
- gdbarch_register_name (gdbarch, regno));
+ if (sym->is_argument ())
+ gdb_printf ("an argument in register $%s",
+ gdbarch_register_name (gdbarch, regno));
else
- printf_filtered ("a local variable in register $%s",
- gdbarch_register_name (gdbarch, regno));
+ gdb_printf ("a local variable in register $%s",
+ gdbarch_register_name (gdbarch, regno));
break;
case LOC_ARG:
- printf_filtered ("an argument at stack/frame offset %s",
- plongest (SYMBOL_VALUE (sym)));
+ gdb_printf ("an argument at stack/frame offset %s",
+ plongest (sym->value_longest ()));
break;
case LOC_LOCAL:
- printf_filtered ("a local variable at frame offset %s",
- plongest (SYMBOL_VALUE (sym)));
+ gdb_printf ("a local variable at frame offset %s",
+ plongest (sym->value_longest ()));
break;
case LOC_REF_ARG:
- printf_filtered ("a reference argument at offset %s",
- plongest (SYMBOL_VALUE (sym)));
+ gdb_printf ("a reference argument at offset %s",
+ plongest (sym->value_longest ()));
break;
case LOC_REGPARM_ADDR:
/* Note comment at LOC_REGISTER. */
regno = SYMBOL_REGISTER_OPS (sym)->register_number (sym,
gdbarch);
- printf_filtered ("the address of an argument, in register $%s",
- gdbarch_register_name (gdbarch, regno));
+ gdb_printf ("the address of an argument, in register $%s",
+ gdbarch_register_name (gdbarch, regno));
break;
case LOC_TYPEDEF:
- printf_filtered ("a typedef.\n");
+ gdb_printf ("a typedef.\n");
continue;
case LOC_LABEL:
- printf_filtered ("a label at address ");
- printf_filtered ("%s", paddress (gdbarch,
- SYMBOL_VALUE_ADDRESS (sym)));
+ gdb_printf ("a label at address ");
+ gdb_printf ("%s", paddress (gdbarch, sym->value_address ()));
break;
case LOC_BLOCK:
- printf_filtered ("a function at address ");
- printf_filtered ("%s",
- paddress (gdbarch, BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (sym))));
+ gdb_printf ("a function at address ");
+ gdb_printf ("%s",
+ paddress (gdbarch,
+ sym->value_block ()->entry_pc ()));
break;
case LOC_UNRESOLVED:
msym = lookup_minimal_symbol (sym->linkage_name (),
NULL, NULL);
if (msym.minsym == NULL)
- printf_filtered ("Unresolved Static");
+ gdb_printf ("Unresolved Static");
else
{
- printf_filtered ("static storage at address ");
- printf_filtered ("%s",
- paddress (gdbarch,
- BMSYMBOL_VALUE_ADDRESS (msym)));
+ gdb_printf ("static storage at address ");
+ gdb_printf ("%s",
+ paddress (gdbarch, msym.value_address ()));
}
break;
case LOC_OPTIMIZED_OUT:
- printf_filtered ("optimized out.\n");
+ gdb_printf ("optimized out.\n");
continue;
case LOC_COMPUTED:
gdb_assert_not_reached ("LOC_COMPUTED variable missing a method");
}
}
- if (SYMBOL_TYPE (sym))
+ if (sym->type ())
{
- struct type *t = check_typedef (SYMBOL_TYPE (sym));
+ struct type *t = check_typedef (sym->type ());
- printf_filtered (", length %s.\n", pulongest (TYPE_LENGTH (t)));
+ gdb_printf (", length %s.\n", pulongest (TYPE_LENGTH (t)));
}
}
- if (BLOCK_FUNCTION (block))
+ if (block->function ())
break;
else
- block = BLOCK_SUPERBLOCK (block);
+ block = block->superblock ();
}
if (count <= 0)
- printf_filtered ("Scope for %s contains no locals or arguments.\n",
- save_args);
+ gdb_printf ("Scope for %s contains no locals or arguments.\n",
+ save_args);
}
/* Helper for trace_dump_command. Dump the action list starting at
@@ -2741,9 +2705,9 @@ trace_dump_actions (struct command_line *action,
exp = contents.c_str ();
}
- printf_filtered ("%s = ", exp);
+ gdb_printf ("%s = ", exp);
output_command (exp, from_tty);
- printf_filtered ("\n");
+ gdb_printf ("\n");
}
action_exp = next_comma;
}
@@ -2831,8 +2795,8 @@ tdump_command (const char *args, int from_tty)
/* This throws an error is not inspecting a trace frame. */
loc = get_traceframe_location (&stepping_frame);
- printf_filtered ("Data collected at tracepoint %d, trace frame %d:\n",
- tracepoint_number, traceframe_number);
+ gdb_printf ("Data collected at tracepoint %d, trace frame %d:\n",
+ tracepoint_number, traceframe_number);
/* This command only makes sense for the current frame, not the
selected frame. */
@@ -3135,10 +3099,10 @@ merge_uploaded_tracepoints (struct uploaded_tp **uploaded_tps)
/* Mark this location as already inserted. */
loc->inserted = 1;
t = (struct tracepoint *) loc->owner;
- printf_filtered (_("Assuming tracepoint %d is same "
- "as target's tracepoint %d at %s.\n"),
- loc->owner->number, utp->number,
- paddress (loc->gdbarch, utp->addr));
+ gdb_printf (_("Assuming tracepoint %d is same "
+ "as target's tracepoint %d at %s.\n"),
+ loc->owner->number, utp->number,
+ paddress (loc->gdbarch, utp->addr));
/* The tracepoint LOC->owner was modified (the location LOC
was marked as inserted in the target). Save it in
@@ -3158,15 +3122,15 @@ merge_uploaded_tracepoints (struct uploaded_tp **uploaded_tps)
{
t = create_tracepoint_from_upload (utp);
if (t)
- printf_filtered (_("Created tracepoint %d for "
- "target's tracepoint %d at %s.\n"),
- t->number, utp->number,
- paddress (get_current_arch (), utp->addr));
+ gdb_printf (_("Created tracepoint %d for "
+ "target's tracepoint %d at %s.\n"),
+ t->number, utp->number,
+ paddress (get_current_arch (), utp->addr));
else
- printf_filtered (_("Failed to create tracepoint for target's "
- "tracepoint %d at %s, skipping it.\n"),
- utp->number,
- paddress (get_current_arch (), utp->addr));
+ gdb_printf (_("Failed to create tracepoint for target's "
+ "tracepoint %d at %s, skipping it.\n"),
+ utp->number,
+ paddress (get_current_arch (), utp->addr));
}
/* Whether found or created, record the number used by the
target, to help with mapping target tracepoints back to their
@@ -3249,17 +3213,17 @@ merge_uploaded_trace_state_variables (struct uploaded_tsv **uploaded_tsvs)
if (tsv)
{
if (info_verbose)
- printf_filtered (_("Assuming trace state variable $%s "
- "is same as target's variable %d.\n"),
- tsv->name.c_str (), utsv->number);
+ gdb_printf (_("Assuming trace state variable $%s "
+ "is same as target's variable %d.\n"),
+ tsv->name.c_str (), utsv->number);
}
else
{
tsv = create_tsv_from_upload (utsv);
if (info_verbose)
- printf_filtered (_("Created trace state variable "
- "$%s for target's variable %d.\n"),
- tsv->name.c_str (), utsv->number);
+ gdb_printf (_("Created trace state variable "
+ "$%s for target's variable %d.\n"),
+ tsv->name.c_str (), utsv->number);
}
/* Give precedence to numberings that come from the target. */
if (tsv)
@@ -3659,8 +3623,6 @@ print_one_static_tracepoint_marker (int count,
{
struct symbol *sym;
- char wrap_indent[80];
- char extra_field_indent[80];
struct ui_out *uiout = current_uiout;
symtab_and_line sal;
@@ -3681,14 +3643,13 @@ print_one_static_tracepoint_marker (int count,
!tracepoints.empty () ? 'y' : 'n');
uiout->spaces (2);
- strcpy (wrap_indent, " ");
-
+ int wrap_indent = 35;
if (gdbarch_addr_bit (marker.gdbarch) <= 32)
- strcat (wrap_indent, " ");
+ wrap_indent += 11;
else
- strcat (wrap_indent, " ");
+ wrap_indent += 19;
- strcpy (extra_field_indent, " ");
+ const char *extra_field_indent = " ";
uiout->field_core_addr ("addr", marker.gdbarch, marker.address);
@@ -3987,7 +3948,6 @@ traceframe_available_memory (std::vector<mem_range> *result,
static const struct internalvar_funcs sdata_funcs =
{
sdata_make_value,
- NULL,
NULL
};
diff --git a/gdb/tracepoint.h b/gdb/tracepoint.h
index c57afc08e6f..4aa8c054190 100644
--- a/gdb/tracepoint.h
+++ b/gdb/tracepoint.h
@@ -314,11 +314,6 @@ extern void
parse_static_tracepoint_marker_definition (const char *line, const char **pp,
static_tracepoint_marker *marker);
-/* A hook used to notify the UI of tracepoint operations. */
-
-extern void (*deprecated_trace_find_hook) (char *arg, int from_tty);
-extern void (*deprecated_trace_start_stop_hook) (int start, int from_tty);
-
/* Returns the current traceframe number. */
extern int get_traceframe_number (void);
diff --git a/gdb/tui/tui-command.c b/gdb/tui/tui-command.c
index fa8af970b0a..0f6c395f567 100644
--- a/gdb/tui/tui-command.c
+++ b/gdb/tui/tui-command.c
@@ -31,12 +31,6 @@
/* See tui-command.h. */
-int
-tui_cmd_window::max_height () const
-{
- return tui_term_height () - 4;
-}
-
void
tui_cmd_window::resize (int height_, int width_, int origin_x, int origin_y)
{
diff --git a/gdb/tui/tui-command.h b/gdb/tui/tui-command.h
index 06cc24f6faf..6c354361d1d 100644
--- a/gdb/tui/tui-command.h
+++ b/gdb/tui/tui-command.h
@@ -31,8 +31,6 @@ struct tui_cmd_window : public tui_win_info
DISABLE_COPY_AND_ASSIGN (tui_cmd_window);
- int max_height () const override;
-
void refresh_window () override
{
}
diff --git a/gdb/tui/tui-disasm.c b/gdb/tui/tui-disasm.c
index f40d4e2e9f1..2cb9c75ca8d 100644
--- a/gdb/tui/tui-disasm.c
+++ b/gdb/tui/tui-disasm.c
@@ -130,14 +130,12 @@ tui_disassemble (struct gdbarch *gdbarch,
}
/* Capture the disassembled instruction. */
- tal.insn = std::move (gdb_dis_out.string ());
- gdb_dis_out.clear ();
+ tal.insn = gdb_dis_out.release ();
/* And capture the address the instruction is at. */
tal.addr = orig_pc;
print_address (gdbarch, orig_pc, &gdb_dis_out);
- tal.addr_string = std::move (gdb_dis_out.string ());
- gdb_dis_out.clear ();
+ tal.addr_string = gdb_dis_out.release ();
if (addr_size != nullptr)
{
@@ -170,9 +168,9 @@ tui_find_backward_disassembly_start_address (CORE_ADDR addr)
lookup_msym_prefer::TEXT,
&msym_prev);
if (msym.minsym != nullptr)
- return BMSYMBOL_VALUE_ADDRESS (msym);
+ return msym.value_address ();
else if (msym_prev.minsym != nullptr)
- return BMSYMBOL_VALUE_ADDRESS (msym_prev);
+ return msym_prev.value_address ();
/* Find the section that ADDR is in, and look for the start of the
section. */
@@ -406,7 +404,7 @@ tui_get_begin_asm_address (struct gdbarch **gdbarch_p, CORE_ADDR *addr_p)
struct bound_minimal_symbol main_symbol
= lookup_minimal_symbol (main_name (), nullptr, nullptr);
if (main_symbol.minsym != nullptr)
- addr = BMSYMBOL_VALUE_ADDRESS (main_symbol);
+ addr = main_symbol.value_address ();
}
}
else /* The target is executing. */
diff --git a/gdb/tui/tui-interp.c b/gdb/tui/tui-interp.c
index 9b92194dac3..e867441afb0 100644
--- a/gdb/tui/tui-interp.c
+++ b/gdb/tui/tui-interp.c
@@ -84,6 +84,10 @@ tui_on_normal_stop (struct bpstat *bs, int print_frame)
if (!print_frame)
return;
+ /* This event is suppressed. */
+ if (cli_suppress_notification.normal_stop)
+ return;
+
SWITCH_THRU_ALL_UIS ()
{
struct interp *interp = top_level_interpreter ();
diff --git a/gdb/tui/tui-io.c b/gdb/tui/tui-io.c
index acd5e742d0b..22c234a0dc2 100644
--- a/gdb/tui/tui-io.c
+++ b/gdb/tui/tui-io.c
@@ -44,6 +44,7 @@
#include "completer.h"
#include "gdb_curses.h"
#include <map>
+#include "pager.h"
/* This redefines CTRL if it is not already defined, so it must come
after terminal state releated include files like <term.h> and
@@ -108,11 +109,13 @@ key_is_start_sequence (int ch)
/* TUI output files. */
static struct ui_file *tui_stdout;
static struct ui_file *tui_stderr;
+static struct ui_file *tui_stdlog;
struct ui_out *tui_out;
/* GDB output files in non-curses mode. */
static struct ui_file *tui_old_stdout;
static struct ui_file *tui_old_stderr;
+static struct ui_file *tui_old_stdlog;
cli_ui_out *tui_old_uiout;
/* Readline previous hooks. */
@@ -828,13 +831,14 @@ tui_setup_io (int mode)
/* Keep track of previous gdb output. */
tui_old_stdout = gdb_stdout;
tui_old_stderr = gdb_stderr;
+ tui_old_stdlog = gdb_stdlog;
tui_old_uiout = dynamic_cast<cli_ui_out *> (current_uiout);
gdb_assert (tui_old_uiout != nullptr);
/* Reconfigure gdb output. */
gdb_stdout = tui_stdout;
gdb_stderr = tui_stderr;
- gdb_stdlog = gdb_stdout; /* for moment */
+ gdb_stdlog = tui_stdlog;
gdb_stdtarg = gdb_stderr; /* for moment */
gdb_stdtargerr = gdb_stderr; /* for moment */
current_uiout = tui_out;
@@ -847,7 +851,7 @@ tui_setup_io (int mode)
/* Restore gdb output. */
gdb_stdout = tui_old_stdout;
gdb_stderr = tui_old_stderr;
- gdb_stdlog = gdb_stdout; /* for moment */
+ gdb_stdlog = tui_old_stdlog;
gdb_stdtarg = gdb_stderr; /* for moment */
gdb_stdtargerr = gdb_stderr; /* for moment */
current_uiout = tui_old_uiout;
@@ -900,8 +904,9 @@ tui_initialize_io (void)
#endif
/* Create tui output streams. */
- tui_stdout = new tui_file (stdout);
+ tui_stdout = new pager_file (new tui_file (stdout));
tui_stderr = new tui_file (stderr);
+ tui_stdlog = new timestamped_file (tui_stderr);
tui_out = tui_out_new (tui_stdout);
/* Create the default UI. */
@@ -1034,7 +1039,7 @@ tui_inject_newline_into_command_window ()
{
gdb_assert (tui_active);
- WINDOW *w= TUI_CMD_WIN->handle.get ();
+ WINDOW *w = TUI_CMD_WIN->handle.get ();
/* When hitting return with an empty input, gdb executes the last
command. If we emit a newline, this fills up the command window
diff --git a/gdb/tui/tui-layout.c b/gdb/tui/tui-layout.c
index cef9190c3e1..09887d3d594 100644
--- a/gdb/tui/tui-layout.c
+++ b/gdb/tui/tui-layout.c
@@ -67,7 +67,7 @@ std::vector<tui_win_info *> tui_windows;
/* See tui-layout.h. */
void
-tui_apply_current_layout ()
+tui_apply_current_layout (bool preserve_cmd_win_size_p)
{
struct gdbarch *gdbarch;
CORE_ADDR addr;
@@ -77,7 +77,8 @@ tui_apply_current_layout ()
for (tui_win_info *win_info : tui_windows)
win_info->make_visible (false);
- applied_layout->apply (0, 0, tui_term_width (), tui_term_height ());
+ applied_layout->apply (0, 0, tui_term_width (), tui_term_height (),
+ preserve_cmd_win_size_p);
/* Keep the list of internal windows up-to-date. */
for (int win_type = SRC_WIN; (win_type < MAX_MAJOR_WINDOWS); win_type++)
@@ -118,7 +119,15 @@ tui_apply_current_layout ()
void
tui_adjust_window_height (struct tui_win_info *win, int new_height)
{
- applied_layout->adjust_size (win->name (), new_height);
+ applied_layout->set_height (win->name (), new_height);
+}
+
+/* See tui-layout. */
+
+void
+tui_adjust_window_width (struct tui_win_info *win, int new_width)
+{
+ applied_layout->set_width (win->name (), new_width);
}
/* Set the current layout to LAYOUT. */
@@ -126,9 +135,18 @@ tui_adjust_window_height (struct tui_win_info *win, int new_height)
static void
tui_set_layout (tui_layout_split *layout)
{
+ std::string old_fingerprint;
+ if (applied_layout != nullptr)
+ old_fingerprint = applied_layout->layout_fingerprint ();
+
applied_skeleton = layout;
applied_layout = layout->clone ();
- tui_apply_current_layout ();
+
+ std::string new_fingerprint = applied_layout->layout_fingerprint ();
+ bool preserve_command_window_size
+ = (TUI_CMD_WIN != nullptr && old_fingerprint == new_fingerprint);
+
+ tui_apply_current_layout (preserve_command_window_size);
}
/* See tui-layout.h. */
@@ -150,7 +168,7 @@ tui_add_win_to_layout (enum tui_win_type type)
const char *name = type == SRC_WIN ? SRC_NAME : DISASSEM_NAME;
applied_layout->replace_window (tui_win_list[other]->name (), name);
- tui_apply_current_layout ();
+ tui_apply_current_layout (true);
}
/* Find LAYOUT in the "layouts" global and return its index. */
@@ -263,7 +281,7 @@ tui_remove_some_windows ()
}
applied_layout->remove_windows (focus->name ());
- tui_apply_current_layout ();
+ tui_apply_current_layout (true);
}
static void
@@ -403,7 +421,8 @@ tui_layout_window::clone () const
/* See tui-layout.h. */
void
-tui_layout_window::apply (int x_, int y_, int width_, int height_)
+tui_layout_window::apply (int x_, int y_, int width_, int height_,
+ bool preserve_cmd_win_size_p)
{
x = x_;
y = y_;
@@ -418,8 +437,14 @@ tui_layout_window::apply (int x_, int y_, int width_, int height_)
void
tui_layout_window::get_sizes (bool height, int *min_value, int *max_value)
{
+ TUI_SCOPED_DEBUG_ENTER_EXIT;
+
if (m_window == nullptr)
m_window = tui_get_window_by_name (m_contents);
+
+ tui_debug_printf ("window = %s, getting %s",
+ m_window->name (), (height ? "height" : "width"));
+
if (height)
{
*min_value = m_window->min_height ();
@@ -430,12 +455,14 @@ tui_layout_window::get_sizes (bool height, int *min_value, int *max_value)
*min_value = m_window->min_width ();
*max_value = m_window->max_width ();
}
+
+ tui_debug_printf ("min = %d, max = %d", *min_value, *max_value);
}
/* See tui-layout.h. */
bool
-tui_layout_window::top_boxed_p () const
+tui_layout_window::first_edge_has_border_p () const
{
gdb_assert (m_window != nullptr);
return m_window->can_box ();
@@ -444,7 +471,7 @@ tui_layout_window::top_boxed_p () const
/* See tui-layout.h. */
bool
-tui_layout_window::bottom_boxed_p () const
+tui_layout_window::last_edge_has_border_p () const
{
gdb_assert (m_window != nullptr);
return m_window->can_box ();
@@ -471,7 +498,18 @@ tui_layout_window::replace_window (const char *name, const char *new_window)
void
tui_layout_window::specification (ui_file *output, int depth)
{
- fputs_unfiltered (get_name (), output);
+ gdb_puts (get_name (), output);
+}
+
+/* See tui-layout.h. */
+
+std::string
+tui_layout_window::layout_fingerprint () const
+{
+ if (strcmp (get_name (), "cmd") == 0)
+ return "C";
+ else
+ return "";
}
/* See tui-layout.h. */
@@ -514,6 +552,8 @@ tui_layout_split::clone () const
void
tui_layout_split::get_sizes (bool height, int *min_value, int *max_value)
{
+ TUI_SCOPED_DEBUG_ENTER_EXIT;
+
*min_value = 0;
*max_value = 0;
bool first_time = true;
@@ -536,55 +576,98 @@ tui_layout_split::get_sizes (bool height, int *min_value, int *max_value)
}
first_time = false;
}
+
+ tui_debug_printf ("min_value = %d, max_value = %d", *min_value, *max_value);
}
/* See tui-layout.h. */
bool
-tui_layout_split::top_boxed_p () const
+tui_layout_split::first_edge_has_border_p () const
{
if (m_splits.empty ())
return false;
- return m_splits[0].layout->top_boxed_p ();
+ return m_splits[0].layout->first_edge_has_border_p ();
}
/* See tui-layout.h. */
bool
-tui_layout_split::bottom_boxed_p () const
+tui_layout_split::last_edge_has_border_p () const
{
if (m_splits.empty ())
return false;
- return m_splits.back ().layout->top_boxed_p ();
+ return m_splits.back ().layout->last_edge_has_border_p ();
}
/* See tui-layout.h. */
void
-tui_layout_split::set_weights_from_heights ()
+tui_layout_split::set_weights_from_sizes ()
+{
+ for (int i = 0; i < m_splits.size (); ++i)
+ m_splits[i].weight
+ = m_vertical ? m_splits[i].layout->height : m_splits[i].layout->width;
+}
+
+/* See tui-layout.h. */
+
+std::string
+tui_layout_split::tui_debug_weights_to_string () const
{
+ std::string str;
+
for (int i = 0; i < m_splits.size (); ++i)
- m_splits[i].weight = m_splits[i].layout->height;
+ {
+ if (i > 0)
+ str += ", ";
+ str += string_printf ("[%d] %d", i, m_splits[i].weight);
+ }
+
+ return str;
+}
+
+/* See tui-layout.h. */
+
+void
+tui_layout_split::tui_debug_print_size_info
+ (const std::vector<tui_layout_split::size_info> &info)
+{
+ gdb_assert (debug_tui);
+
+ tui_debug_printf ("current size info data:");
+ for (int i = 0; i < info.size (); ++i)
+ tui_debug_printf (" [%d] { size = %d, min = %d, max = %d, share_box = %d }",
+ i, info[i].size, info[i].min_size,
+ info[i].max_size, info[i].share_box);
}
/* See tui-layout.h. */
tui_adjust_result
-tui_layout_split::adjust_size (const char *name, int new_height)
+tui_layout_split::set_size (const char *name, int new_size, bool set_width_p)
{
+ TUI_SCOPED_DEBUG_ENTER_EXIT;
+
+ tui_debug_printf ("this = %p, name = %s, new_size = %d",
+ this, name, new_size);
+
/* Look through the children. If one is a layout holding the named
window, we're done; or if one actually is the named window,
update it. */
int found_index = -1;
for (int i = 0; i < m_splits.size (); ++i)
{
- tui_adjust_result adjusted
- = m_splits[i].layout->adjust_size (name, new_height);
+ tui_adjust_result adjusted;
+ if (set_width_p)
+ adjusted = m_splits[i].layout->set_width (name, new_size);
+ else
+ adjusted = m_splits[i].layout->set_height (name, new_size);
if (adjusted == HANDLED)
return HANDLED;
if (adjusted == FOUND)
{
- if (!m_vertical)
+ if (set_width_p ? m_vertical : !m_vertical)
return FOUND;
found_index = i;
break;
@@ -593,19 +676,36 @@ tui_layout_split::adjust_size (const char *name, int new_height)
if (found_index == -1)
return NOT_FOUND;
- if (m_splits[found_index].layout->height == new_height)
+ int curr_size = (set_width_p
+ ? m_splits[found_index].layout->width
+ : m_splits[found_index].layout->height);
+ if (curr_size == new_size)
return HANDLED;
- set_weights_from_heights ();
- int delta = m_splits[found_index].weight - new_height;
- m_splits[found_index].weight = new_height;
+ tui_debug_printf ("found window %s at index %d", name, found_index);
+
+ set_weights_from_sizes ();
+ int delta = m_splits[found_index].weight - new_size;
+ m_splits[found_index].weight = new_size;
- /* Distribute the "delta" over the next window; but if the next
- window cannot hold it all, keep going until we either find a
- window that does, or until we loop all the way around. */
- for (int i = 0; delta != 0 && i < m_splits.size () - 1; ++i)
+ tui_debug_printf ("before delta (%d) distribution, weights: %s",
+ delta, tui_debug_weights_to_string ().c_str ());
+
+ /* Distribute the "delta" over all other windows, while respecting their
+ min/max sizes. We grow each window by 1 line at a time continually
+ looping over all the windows. However, skip the window that the user
+ just resized, obviously we don't want to readjust that window. */
+ bool found_window_that_can_grow_p = true;
+ for (int i = 0; delta != 0; i = (i + 1) % m_splits.size ())
{
int index = (found_index + 1 + i) % m_splits.size ();
+ if (index == found_index)
+ {
+ if (!found_window_that_can_grow_p)
+ break;
+ found_window_that_can_grow_p = false;
+ continue;
+ }
int new_min, new_max;
m_splits[index].layout->get_sizes (m_vertical, &new_min, &new_max);
@@ -614,32 +714,48 @@ tui_layout_split::adjust_size (const char *name, int new_height)
{
/* The primary window grew, so we are trying to shrink other
windows. */
- int available = m_splits[index].weight - new_min;
- int shrink_by = std::min (available, -delta);
- m_splits[index].weight -= shrink_by;
- delta += shrink_by;
+ if (m_splits[index].weight > new_min)
+ {
+ m_splits[index].weight -= 1;
+ delta += 1;
+ found_window_that_can_grow_p = true;
+ }
}
else
{
/* The primary window shrank, so we are trying to grow other
windows. */
- int available = new_max - m_splits[index].weight;
- int grow_by = std::min (available, delta);
- m_splits[index].weight += grow_by;
- delta -= grow_by;
+ if (m_splits[index].weight < new_max)
+ {
+ m_splits[index].weight += 1;
+ delta -= 1;
+ found_window_that_can_grow_p = true;
+ }
}
+
+ tui_debug_printf ("index = %d, weight now: %d",
+ index, m_splits[index].weight);
}
+ tui_debug_printf ("after delta (%d) distribution, weights: %s",
+ delta, tui_debug_weights_to_string ().c_str ());
+
if (delta != 0)
{
- warning (_("Invalid window height specified"));
+ if (set_width_p)
+ warning (_("Invalid window width specified"));
+ else
+ warning (_("Invalid window height specified"));
/* Effectively undo any modifications made here. */
- set_weights_from_heights ();
+ set_weights_from_sizes ();
}
else
{
- /* Simply re-apply the updated layout. */
- apply (x, y, width, height);
+ /* Simply re-apply the updated layout. We pass false here so that
+ the cmd window can be resized. However, we should have already
+ resized everything above to be "just right", so the apply call
+ here should not end up changing the sizes at all. */
+ apply (x, y, width, height, false);
}
return HANDLED;
@@ -648,25 +764,45 @@ tui_layout_split::adjust_size (const char *name, int new_height)
/* See tui-layout.h. */
void
-tui_layout_split::apply (int x_, int y_, int width_, int height_)
+tui_layout_split::apply (int x_, int y_, int width_, int height_,
+ bool preserve_cmd_win_size_p)
{
+ TUI_SCOPED_DEBUG_ENTER_EXIT;
+
x = x_;
y = y_;
width = width_;
height = height_;
- struct size_info
+ /* In some situations we fix the size of the cmd window. However,
+ occasionally this turns out to be a mistake. This struct is used to
+ hold the original information about the cmd window, so we can restore
+ it if needed. */
+ struct old_size_info
{
- int size;
+ /* Constructor. */
+ old_size_info (int index_, int min_size_, int max_size_)
+ : index (index_),
+ min_size (min_size_),
+ max_size (max_size_)
+ { /* Nothing. */ }
+
+ /* The index in m_splits where the cmd window was found. */
+ int index;
+
+ /* The previous min/max size. */
int min_size;
int max_size;
- /* True if this window will share a box border with the previous
- window in the list. */
- bool share_box;
};
+ /* This is given a value only if we fix the size of the cmd window. */
+ gdb::optional<old_size_info> old_cmd_info;
+
std::vector<size_info> info (m_splits.size ());
+ tui_debug_printf ("weights are: %s",
+ tui_debug_weights_to_string ().c_str ());
+
/* Step 1: Find the min and max size of each sub-layout.
Fixed-sized layouts are given their desired size, and then the
remaining space is distributed among the remaining windows
@@ -684,11 +820,15 @@ tui_layout_split::apply (int x_, int y_, int width_, int height_)
m_splits[i].layout->get_sizes (m_vertical, &info[i].min_size,
&info[i].max_size);
- if (!m_applied
+ if (preserve_cmd_win_size_p
&& cmd_win_already_exists
&& m_splits[i].layout->get_name () != nullptr
&& strcmp (m_splits[i].layout->get_name (), "cmd") == 0)
{
+ /* Save the old cmd window information, in case we need to
+ restore it later. */
+ old_cmd_info.emplace (i, info[i].min_size, info[i].max_size);
+
/* If this layout has never been applied, then it means the
user just changed the layout. In this situation, it's
desirable to keep the size of the command window the
@@ -712,39 +852,144 @@ tui_layout_split::apply (int x_, int y_, int width_, int height_)
/* Two adjacent boxed windows will share a border, making a bit
more size available. */
if (i > 0
- && m_splits[i - 1].layout->bottom_boxed_p ()
- && m_splits[i].layout->top_boxed_p ())
+ && m_splits[i - 1].layout->last_edge_has_border_p ()
+ && m_splits[i].layout->first_edge_has_border_p ())
info[i].share_box = true;
}
+ /* If last_index is set then we have a window that is not of a fixed
+ size. This window will have its size calculated below, which requires
+ that the total_weight not be zero (we divide by total_weight, so don't
+ want a floating-point exception). */
+ gdb_assert (last_index == -1 || total_weight > 0);
+
/* Step 2: Compute the size of each sub-layout. Fixed-sized items
are given their fixed size, while others are resized according to
their weight. */
int used_size = 0;
for (int i = 0; i < m_splits.size (); ++i)
{
- /* Compute the height and clamp to the allowable range. */
- info[i].size = available_size * m_splits[i].weight / total_weight;
- if (info[i].size > info[i].max_size)
- info[i].size = info[i].max_size;
- if (info[i].size < info[i].min_size)
- info[i].size = info[i].min_size;
- /* If there is any leftover size, just redistribute it to the
- last resizeable window, by dropping it from the allocated
- size. We could try to be fancier here perhaps, by
- redistributing this size among all windows, not just the
- last window. */
if (info[i].min_size != info[i].max_size)
{
+ /* Compute the height and clamp to the allowable range. */
+ info[i].size = available_size * m_splits[i].weight / total_weight;
+ if (info[i].size > info[i].max_size)
+ info[i].size = info[i].max_size;
+ if (info[i].size < info[i].min_size)
+ info[i].size = info[i].min_size;
+ /* Keep a total of all the size we've used so far (we gain some
+ size back if this window can share a border with a preceding
+ window). Any unused space will be distributed between all of
+ the other windows (while respecting min/max sizes) later in
+ this function. */
used_size += info[i].size;
if (info[i].share_box)
--used_size;
}
+ else
+ info[i].size = info[i].min_size;
}
+ if (debug_tui)
+ {
+ tui_debug_printf ("after initial size calculation");
+ tui_debug_printf ("available_size = %d, used_size = %d",
+ available_size, used_size);
+ tui_debug_printf ("total_weight = %d, last_index = %d",
+ total_weight, last_index);
+ tui_debug_print_size_info (info);
+ }
+
+ /* If we didn't find any sub-layouts that were of a non-fixed size, but
+ we did find the cmd window, then we can consider that a sort-of
+ non-fixed size sub-layout.
+
+ The cmd window might, initially, be of a fixed size (see above), but,
+ we are willing to relax this constraint if required to correctly apply
+ this layout (see below). */
+ if (last_index == -1 && old_cmd_info.has_value ())
+ last_index = old_cmd_info->index;
+
/* Allocate any leftover size. */
- if (available_size >= used_size && last_index != -1)
- info[last_index].size += available_size - used_size;
+ if (available_size != used_size && last_index != -1)
+ {
+ /* Loop over all windows until the amount of used space is equal to
+ the amount of available space. There's an escape hatch within
+ the loop in case we can't find any sub-layouts to resize. */
+ bool found_window_that_can_grow_p = true;
+ for (int idx = last_index;
+ available_size != used_size;
+ idx = (idx + 1) % m_splits.size ())
+ {
+ /* Every time we get back to last_index, which is where the loop
+ started, we check to make sure that we did assign some space
+ to a window, bringing used_size closer to available_size.
+
+ If we didn't, but the cmd window is of a fixed size, then we
+ can make the console window non-fixed-size, and continue
+ around the loop, hopefully, this will allow the layout to be
+ applied correctly.
+
+ If we still make it around the loop without moving used_size
+ closer to available_size, then there's nothing more we can do,
+ and we break out of the loop. */
+ if (idx == last_index)
+ {
+ /* If the used_size is greater than the available_size then
+ this indicates that the fixed-sized sub-layouts claimed
+ more space than is available. This layout is not going to
+ work. Our only hope at this point is to make the cmd
+ window non-fixed-size (if possible), and hope we can
+ shrink this enough to fit the rest of the sub-layouts in.
+
+ Alternatively, we've made it around the loop without
+ adjusting any window's size. This likely means all
+ windows have hit their min or max size. Again, our only
+ hope is to make the cmd window non-fixed-size, and hope
+ this fixes all our problems. */
+ if (old_cmd_info.has_value ()
+ && ((available_size < used_size)
+ || !found_window_that_can_grow_p))
+ {
+ info[old_cmd_info->index].min_size = old_cmd_info->min_size;
+ info[old_cmd_info->index].max_size = old_cmd_info->max_size;
+ tui_debug_printf
+ ("restoring index %d (cmd) size limits, min = %d, max = %d",
+ old_cmd_info->index, old_cmd_info->min_size,
+ old_cmd_info->max_size);
+ old_cmd_info.reset ();
+ }
+ else if (!found_window_that_can_grow_p)
+ break;
+ found_window_that_can_grow_p = false;
+ }
+
+ if (available_size > used_size
+ && info[idx].size < info[idx].max_size)
+ {
+ found_window_that_can_grow_p = true;
+ info[idx].size += 1;
+ used_size += 1;
+ }
+ else if (available_size < used_size
+ && info[idx].size > info[idx].min_size)
+ {
+ found_window_that_can_grow_p = true;
+ info[idx].size -= 1;
+ used_size -= 1;
+ }
+ }
+
+ if (debug_tui)
+ {
+ tui_debug_printf ("after final size calculation");
+ tui_debug_printf ("available_size = %d, used_size = %d",
+ available_size, used_size);
+ tui_debug_printf ("total_weight = %d, last_index = %d",
+ total_weight, last_index);
+ tui_debug_print_size_info (info);
+ }
+ }
/* Step 3: Resize. */
int size_accum = 0;
@@ -758,13 +1003,13 @@ tui_layout_split::apply (int x_, int y_, int width_, int height_)
else if (info[i].share_box)
--size_accum;
if (m_vertical)
- m_splits[i].layout->apply (x, y + size_accum, width, info[i].size);
+ m_splits[i].layout->apply (x, y + size_accum, width, info[i].size,
+ preserve_cmd_win_size_p);
else
- m_splits[i].layout->apply (x + size_accum, y, info[i].size, height);
+ m_splits[i].layout->apply (x + size_accum, y, info[i].size, height,
+ preserve_cmd_win_size_p);
size_accum += info[i].size;
}
-
- m_applied = true;
}
/* See tui-layout.h. */
@@ -806,23 +1051,38 @@ void
tui_layout_split::specification (ui_file *output, int depth)
{
if (depth > 0)
- fputs_unfiltered ("{", output);
+ gdb_puts ("{", output);
if (!m_vertical)
- fputs_unfiltered ("-horizontal ", output);
+ gdb_puts ("-horizontal ", output);
bool first = true;
for (auto &item : m_splits)
{
if (!first)
- fputs_unfiltered (" ", output);
+ gdb_puts (" ", output);
first = false;
item.layout->specification (output, depth + 1);
- fprintf_unfiltered (output, " %d", item.weight);
+ gdb_printf (output, " %d", item.weight);
}
if (depth > 0)
- fputs_unfiltered ("}", output);
+ gdb_puts ("}", output);
+}
+
+/* See tui-layout.h. */
+
+std::string
+tui_layout_split::layout_fingerprint () const
+{
+ for (auto &item : m_splits)
+ {
+ std::string fp = item.layout->layout_fingerprint ();
+ if (!fp.empty ())
+ return std::string (m_vertical ? "V" : "H") + fp;
+ }
+
+ return "";
}
/* Destroy the layout associated with SELF. */
@@ -839,6 +1099,14 @@ destroy_layout (struct cmd_list_element *self, void *context)
static struct cmd_list_element *layout_list;
+/* Called to implement 'tui layout'. */
+
+static void
+tui_layout_command (const char *args, int from_tty)
+{
+ help_list (layout_list, "tui layout ", all_commands, gdb_stdout);
+}
+
/* Add a "layout" command with name NAME that switches to LAYOUT. */
static struct cmd_list_element *
@@ -1017,10 +1285,12 @@ void _initialize_tui_layout ();
void
_initialize_tui_layout ()
{
- add_basic_prefix_cmd ("layout", class_tui, _("\
+ struct cmd_list_element *layout_cmd
+ = add_prefix_cmd ("layout", class_tui, tui_layout_command, _("\
Change the layout of windows.\n\
-Usage: layout prev | next | LAYOUT-NAME"),
- &layout_list, 0, &cmdlist);
+Usage: tui layout prev | next | LAYOUT-NAME"),
+ &layout_list, 0, tui_get_cmd_list ());
+ add_com_alias ("layout", layout_cmd, class_tui, 0);
add_cmd ("next", class_tui, tui_next_layout_command,
_("Apply the next TUI layout."),
diff --git a/gdb/tui/tui-layout.h b/gdb/tui/tui-layout.h
index b9a5d9b898d..32bc95171bf 100644
--- a/gdb/tui/tui-layout.h
+++ b/gdb/tui/tui-layout.h
@@ -55,18 +55,24 @@ public:
"skeleton" layout. */
virtual std::unique_ptr<tui_layout_base> clone () const = 0;
- /* Change the size and location of this layout. */
- virtual void apply (int x, int y, int width, int height) = 0;
+ /* Change the size and location of this layout. When
+ PRESERVE_CMD_WIN_SIZE_P is true the current size of the TUI_CMD_WIN
+ is preserved, otherwise, the TUI_CMD_WIN will resize just like any
+ other window. */
+ virtual void apply (int x, int y, int width, int height,
+ bool preserve_cmd_win_size_p) = 0;
/* Return the minimum and maximum height or width of this layout.
HEIGHT is true to fetch height, false to fetch width. */
virtual void get_sizes (bool height, int *min_value, int *max_value) = 0;
- /* True if the topmost item in this layout is boxed. */
- virtual bool top_boxed_p () const = 0;
+ /* True if the topmost (for vertical layouts), or the leftmost (for
+ horizontal layouts) item in this layout is boxed. */
+ virtual bool first_edge_has_border_p () const = 0;
- /* True if the bottommost item in this layout is boxed. */
- virtual bool bottom_boxed_p () const = 0;
+ /* True if the bottommost (for vertical layouts), or the rightmost (for
+ horizontal layouts) item in this layout is boxed. */
+ virtual bool last_edge_has_border_p () const = 0;
/* Return the name of this layout's window, or nullptr if this
layout does not represent a single window. */
@@ -75,9 +81,13 @@ public:
return nullptr;
}
- /* Adjust the size of the window named NAME to NEW_HEIGHT, updating
+ /* Set the height of the window named NAME to NEW_HEIGHT, updating
the sizes of the other windows around it. */
- virtual tui_adjust_result adjust_size (const char *name, int new_height) = 0;
+ virtual tui_adjust_result set_height (const char *name, int new_height) = 0;
+
+ /* Set the width of the window named NAME to NEW_WIDTH, updating
+ the sizes of the other windows around it. */
+ virtual tui_adjust_result set_width (const char *name, int new_width) = 0;
/* Remove some windows from the layout, leaving the command window
and the window being passed in here. */
@@ -91,6 +101,26 @@ public:
depth of this layout in the hierarchy (zero-based). */
virtual void specification (ui_file *output, int depth) = 0;
+ /* Return a FINGERPRINT string containing an abstract representation of
+ the location of the cmd window in this layout.
+
+ When called on a complete, top-level layout, the fingerprint will be a
+ non-empty string made of 'V' and 'H' characters, followed by a single
+ 'C' character. Each 'V' and 'H' represents a vertical or horizontal
+ layout that must be passed through in order to find the cmd
+ window.
+
+ Of course, layouts are built recursively, so, when called on a partial
+ layout, if this object represents a single window, then either the
+ empty string is returned (for non-cmd windows), or a string
+ containing a single 'C' is returned.
+
+ For object representing layouts, if the layout contains the cmd
+ window then we will get back a valid fingerprint string (contains 'V'
+ and 'H', ends with 'C'), or, if this layout doesn't contain the cmd
+ window, an empty string is returned. */
+ virtual std::string layout_fingerprint () const = 0;
+
/* Add all windows to the WINDOWS vector. */
virtual void get_windows (std::vector<tui_win_info *> *windows) = 0;
@@ -120,21 +150,27 @@ public:
std::unique_ptr<tui_layout_base> clone () const override;
- void apply (int x, int y, int width, int height) override;
+ void apply (int x, int y, int width, int height,
+ bool preserve_cmd_win_size_p) override;
const char *get_name () const override
{
return m_contents.c_str ();
}
- tui_adjust_result adjust_size (const char *name, int new_height) override
+ tui_adjust_result set_height (const char *name, int new_height) override
{
return m_contents == name ? FOUND : NOT_FOUND;
}
- bool top_boxed_p () const override;
+ tui_adjust_result set_width (const char *name, int new_width) override
+ {
+ return m_contents == name ? FOUND : NOT_FOUND;
+ }
+
+ bool first_edge_has_border_p () const override;
- bool bottom_boxed_p () const override;
+ bool last_edge_has_border_p () const override;
void remove_windows (const char *name) override
{
@@ -144,6 +180,8 @@ public:
void specification (ui_file *output, int depth) override;
+ std::string layout_fingerprint () const override;
+
/* See tui_layout_base::get_windows. */
void get_windows (std::vector<tui_win_info *> *windows) override
{
@@ -190,13 +228,24 @@ public:
std::unique_ptr<tui_layout_base> clone () const override;
- void apply (int x, int y, int width, int height) override;
+ void apply (int x, int y, int width, int height,
+ bool preserve_cmd_win_size_p) override;
- tui_adjust_result adjust_size (const char *name, int new_height) override;
+ tui_adjust_result set_height (const char *name, int new_height) override
+ {
+ /* Pass false as the final argument to indicate change of height. */
+ return set_size (name, new_height, false);
+ }
- bool top_boxed_p () const override;
+ tui_adjust_result set_width (const char *name, int new_width) override
+ {
+ /* Pass true as the final argument to indicate change of width. */
+ return set_size (name, new_width, true);
+ }
+
+ bool first_edge_has_border_p () const override;
- bool bottom_boxed_p () const override;
+ bool last_edge_has_border_p () const override;
void remove_windows (const char *name) override;
@@ -204,6 +253,8 @@ public:
void specification (ui_file *output, int depth) override;
+ std::string layout_fingerprint () const override;
+
/* See tui_layout_base::get_windows. */
void get_windows (std::vector<tui_win_info *> *windows) override
{
@@ -217,8 +268,43 @@ protected:
private:
- /* Set the weights from the current heights. */
- void set_weights_from_heights ();
+ /* Used to implement set_height and set_width member functions. When
+ SET_WIDTH_P is true, set the width, otherwise, set the height of the
+ window named NAME to NEW_SIZE, updating the sizes of the other windows
+ around it as needed. The result indicates if the window NAME was
+ found and had its size adjusted, was found but was not adjusted, or
+ was not found at all. */
+ tui_adjust_result set_size (const char *name, int new_size,
+ bool set_width_p);
+
+ /* Set the weights from the current heights (when m_vertical is true) or
+ widths (when m_vertical is false). */
+ void set_weights_from_sizes ();
+
+ /* Structure used when resizing, or applying a layout. An instance of
+ this structure is created for each sub-layout. */
+ struct size_info
+ {
+ /* The calculated size for this sub-layout. */
+ int size;
+
+ /* The minimum and maximum sizes for this sub-layout, obtained by
+ calling the get_sizes member function. */
+ int min_size;
+ int max_size;
+
+ /* True if this window will share a box border with the previous
+ window in the list. */
+ bool share_box;
+ };
+
+ /* Used for debug, prints the contents of INFO using tui_debug_printf.
+ Only call this when the global debug_tui is true. */
+ static void tui_debug_print_size_info (const std::vector<size_info> &info);
+
+ /* Used for debug, returns a string describing the current weight of each
+ sub-layout. */
+ std::string tui_debug_weights_to_string () const;
struct split
{
@@ -233,9 +319,6 @@ private:
/* True if the windows in this split are arranged vertically. */
bool m_vertical;
-
- /* True if this layout has already been applied at least once. */
- bool m_applied = false;
};
/* Add the specified window to the layout in a logical way. This
@@ -258,13 +341,19 @@ extern void tui_regs_layout ();
some other window is chosen to remain. */
extern void tui_remove_some_windows ();
-/* Apply the current layout. */
-extern void tui_apply_current_layout ();
+/* Apply the current layout. When PRESERVE_CMD_WIN_SIZE_P is true the
+ current size of the TUI_CMD_WIN is preserved, otherwise, the TUI_CMD_WIN
+ will resize just like any other window. */
+extern void tui_apply_current_layout (bool);
/* Adjust the window height of WIN to NEW_HEIGHT. */
extern void tui_adjust_window_height (struct tui_win_info *win,
int new_height);
+/* Adjust the window width of WIN to NEW_WIDTH. */
+extern void tui_adjust_window_width (struct tui_win_info *win,
+ int new_width);
+
/* The type of a function that is used to create a TUI window. */
typedef std::function<tui_win_info * (const char *name)> window_factory;
diff --git a/gdb/tui/tui-regs.c b/gdb/tui/tui-regs.c
index 16b6c081253..5106a3b9670 100644
--- a/gdb/tui/tui-regs.c
+++ b/gdb/tui/tui-regs.c
@@ -100,7 +100,7 @@ tui_register_format (struct frame_info *frame, int regnum)
gdbarch_print_registers_info (gdbarch, &stream, frame, regnum, 1);
/* Remove the possible \n. */
- std::string &str = stream.string ();
+ std::string str = stream.release ();
if (!str.empty () && str.back () == '\n')
str.resize (str.size () - 1);
@@ -177,7 +177,7 @@ tui_data_window::first_reg_element_no_inline (int line_no) const
/* Show the registers of the given group in the data window
and refresh the window. */
void
-tui_data_window::show_registers (struct reggroup *group)
+tui_data_window::show_registers (const reggroup *group)
{
if (group == 0)
group = general_reggroup;
@@ -207,7 +207,7 @@ tui_data_window::show_registers (struct reggroup *group)
refresh_values_only is true. */
void
-tui_data_window::show_register_group (struct reggroup *group,
+tui_data_window::show_register_group (const reggroup *group,
struct frame_info *frame,
bool refresh_values_only)
{
@@ -216,7 +216,7 @@ tui_data_window::show_register_group (struct reggroup *group,
int regnum, pos;
/* Make a new title showing which group we display. */
- title = string_printf ("Register group: %s", reggroup_name (group));
+ title = string_printf ("Register group: %s", group->name ());
/* See how many registers must be displayed. */
nr_regs = 0;
@@ -514,40 +514,48 @@ tui_data_item_window::rerender (WINDOW *handle, int field_width)
(void) wstandend (handle);
}
-/* Helper for "tui reg next", wraps a call to REGGROUP_NEXT, but adds wrap
- around behaviour. Returns the next register group, or NULL if the
- register window is not currently being displayed. */
+/* Helper for "tui reg next", returns the next register group after
+ CURRENT_GROUP in the register group list for GDBARCH, with wrap around
+ behaviour.
-static struct reggroup *
-tui_reg_next (struct reggroup *current_group, struct gdbarch *gdbarch)
-{
- struct reggroup *group = NULL;
+ If CURRENT_GROUP is nullptr (e.g. if the tui register window has only
+ just been displayed and has no current group selected) or the currently
+ selected register group can't be found (e.g. if the architecture has
+ changed since the register window was last updated), then the first
+ register group will be returned. */
- if (current_group != NULL)
- {
- group = reggroup_next (gdbarch, current_group);
- if (group == NULL)
- group = reggroup_next (gdbarch, NULL);
- }
- return group;
+static const reggroup *
+tui_reg_next (const reggroup *current_group, struct gdbarch *gdbarch)
+{
+ const std::vector<const reggroup *> &groups = gdbarch_reggroups (gdbarch);
+ auto it = std::find (groups.begin (), groups.end (), current_group);
+ if (it != groups.end ())
+ it++;
+ if (it == groups.end ())
+ return groups.front ();
+ return *it;
}
-/* Helper for "tui reg prev", wraps a call to REGGROUP_PREV, but adds wrap
- around behaviour. Returns the previous register group, or NULL if the
- register window is not currently being displayed. */
+/* Helper for "tui reg prev", returns the register group previous to
+ CURRENT_GROUP in the register group list for GDBARCH, with wrap around
+ behaviour.
-static struct reggroup *
-tui_reg_prev (struct reggroup *current_group, struct gdbarch *gdbarch)
-{
- struct reggroup *group = NULL;
+ If CURRENT_GROUP is nullptr (e.g. if the tui register window has only
+ just been displayed and has no current group selected) or the currently
+ selected register group can't be found (e.g. if the architecture has
+ changed since the register window was last updated), then the last
+ register group will be returned. */
- if (current_group != NULL)
- {
- group = reggroup_prev (gdbarch, current_group);
- if (group == NULL)
- group = reggroup_prev (gdbarch, NULL);
- }
- return group;
+static const reggroup *
+tui_reg_prev (const reggroup *current_group, struct gdbarch *gdbarch)
+{
+ const std::vector<const reggroup *> &groups = gdbarch_reggroups (gdbarch);
+ auto it = std::find (groups.rbegin (), groups.rend (), current_group);
+ if (it != groups.rend ())
+ it++;
+ if (it == groups.rend ())
+ return groups.back ();
+ return *it;
}
/* Implement the 'tui reg' command. Changes the register group displayed
@@ -561,7 +569,6 @@ tui_reg_command (const char *args, int from_tty)
if (args != NULL)
{
- struct reggroup *group, *match = NULL;
size_t len = strlen (args);
/* Make sure the curses mode is enabled. */
@@ -575,24 +582,25 @@ tui_reg_command (const char *args, int from_tty)
if (TUI_DATA_WIN == NULL || !TUI_DATA_WIN->is_visible ())
tui_regs_layout ();
- struct reggroup *current_group = TUI_DATA_WIN->get_current_group ();
+ const reggroup *match = nullptr;
+ const reggroup *current_group = TUI_DATA_WIN->get_current_group ();
if (strncmp (args, "next", len) == 0)
match = tui_reg_next (current_group, gdbarch);
else if (strncmp (args, "prev", len) == 0)
match = tui_reg_prev (current_group, gdbarch);
-
- /* This loop matches on the initial part of a register group
- name. If this initial part in ARGS matches only one register
- group then the switch is made. */
- for (group = reggroup_next (gdbarch, NULL);
- group != NULL;
- group = reggroup_next (gdbarch, group))
+ else
{
- if (strncmp (reggroup_name (group), args, len) == 0)
+ /* This loop matches on the initial part of a register group
+ name. If this initial part in ARGS matches only one register
+ group then the switch is made. */
+ for (const struct reggroup *group : gdbarch_reggroups (gdbarch))
{
- if (match != NULL)
- error (_("ambiguous register group name '%s'"), args);
- match = group;
+ if (strncmp (group->name (), args, len) == 0)
+ {
+ if (match != NULL)
+ error (_("ambiguous register group name '%s'"), args);
+ match = group;
+ }
}
}
@@ -603,23 +611,20 @@ tui_reg_command (const char *args, int from_tty)
}
else
{
- struct reggroup *group;
- int first;
-
- printf_filtered (_("\"tui reg\" must be followed by the name of "
- "either a register group,\nor one of 'next' "
- "or 'prev'. Known register groups are:\n"));
+ gdb_printf (_("\"tui reg\" must be followed by the name of "
+ "either a register group,\nor one of 'next' "
+ "or 'prev'. Known register groups are:\n"));
- for (first = 1, group = reggroup_next (gdbarch, NULL);
- group != NULL;
- first = 0, group = reggroup_next (gdbarch, group))
+ bool first = true;
+ for (const struct reggroup *group : gdbarch_reggroups (gdbarch))
{
if (!first)
- printf_filtered (", ");
- printf_filtered ("%s", reggroup_name (group));
+ gdb_printf (", ");
+ first = false;
+ gdb_printf ("%s", group->name ());
}
- printf_filtered ("\n");
+ gdb_printf ("\n");
}
}
diff --git a/gdb/tui/tui-regs.h b/gdb/tui/tui-regs.h
index 9192a73b177..5289d3a892d 100644
--- a/gdb/tui/tui-regs.h
+++ b/gdb/tui/tui-regs.h
@@ -23,6 +23,7 @@
#define TUI_TUI_REGS_H
#include "tui/tui-data.h"
+#include "reggroups.h"
/* A data item window. */
@@ -60,9 +61,9 @@ struct tui_data_window : public tui_win_info
void check_register_values (struct frame_info *frame);
- void show_registers (struct reggroup *group);
+ void show_registers (const reggroup *group);
- struct reggroup *get_current_group () const
+ const reggroup *get_current_group () const
{
return m_current_group;
}
@@ -99,7 +100,7 @@ private:
display off the end of the register display. */
void display_reg_element_at_line (int start_element_no, int start_line_no);
- void show_register_group (struct reggroup *group,
+ void show_register_group (const reggroup *group,
struct frame_info *frame,
bool refresh_values_only);
@@ -125,7 +126,7 @@ private:
/* Windows that are used to display registers. */
std::vector<tui_data_item_window> m_regs_content;
int m_regs_column_count = 0;
- struct reggroup *m_current_group = nullptr;
+ const reggroup *m_current_group = nullptr;
/* Width of each register's display area. */
int m_item_width = 0;
diff --git a/gdb/tui/tui-source.c b/gdb/tui/tui-source.c
index bbdefbafb61..208889d0bf7 100644
--- a/gdb/tui/tui-source.c
+++ b/gdb/tui/tui-source.c
@@ -70,7 +70,7 @@ tui_source_window::set_contents (struct gdbarch *arch,
m_fullname = make_unique_xstrdup (symtab_to_fullname (s));
cur_line = 0;
- m_gdbarch = SYMTAB_OBJFILE (s)->arch ();
+ m_gdbarch = s->compunit ()->objfile ()->arch ();
m_start_line_or_addr.loa = LOA_LINE;
cur_line_no = m_start_line_or_addr.u.line_no = line_no;
diff --git a/gdb/tui/tui-stack.c b/gdb/tui/tui-stack.c
index 0489a5f3250..be8ffbd0c12 100644
--- a/gdb/tui/tui-stack.c
+++ b/gdb/tui/tui-stack.c
@@ -181,12 +181,14 @@ tui_locator_window::make_status_line () const
string.puts (pc_buf);
}
+ std::string string_val = string.release ();
+
if (string.size () < status_size)
- string.puts (n_spaces (status_size - string.size ()));
+ string_val.append (status_size - string.size (), ' ');
else if (string.size () > status_size)
- string.string ().erase (status_size, string.size ());
+ string_val.erase (status_size, string.size ());
- return std::move (string.string ());
+ return string_val;
}
/* Get a printable name for the function at the address. The symbol
diff --git a/gdb/tui/tui-win.c b/gdb/tui/tui-win.c
index c85dfd4e882..31b6606636a 100644
--- a/gdb/tui/tui-win.c
+++ b/gdb/tui/tui-win.c
@@ -190,9 +190,9 @@ show_tui_active_border_mode (struct ui_file *file,
struct cmd_list_element *c,
const char *value)
{
- fprintf_filtered (file, _("\
+ gdb_printf (file, _("\
The attribute mode to use for the active TUI window border is \"%s\".\n"),
- value);
+ value);
}
static const char *tui_border_mode = "normal";
@@ -202,9 +202,9 @@ show_tui_border_mode (struct ui_file *file,
struct cmd_list_element *c,
const char *value)
{
- fprintf_filtered (file, _("\
+ gdb_printf (file, _("\
The attribute mode to use for the TUI window borders is \"%s\".\n"),
- value);
+ value);
}
static const char *tui_border_kind = "acs";
@@ -214,8 +214,8 @@ show_tui_border_kind (struct ui_file *file,
struct cmd_list_element *c,
const char *value)
{
- fprintf_filtered (file, _("The kind of border for TUI windows is \"%s\".\n"),
- value);
+ gdb_printf (file, _("The kind of border for TUI windows is \"%s\".\n"),
+ value);
}
@@ -332,7 +332,7 @@ static void
show_tui_resize_message (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("TUI resize messaging is %s.\n"), value);
+ gdb_printf (file, _("TUI resize messaging is %s.\n"), value);
}
@@ -511,8 +511,10 @@ tui_resize_all (void)
AIX 5.3 does not define clear. */
erase ();
clearok (curscr, TRUE);
- tui_apply_current_layout ();
- /* Turn keypad back on. */
+ /* Apply the current layout. The 'false' here allows the command
+ window to resize proportionately with containing terminal, rather
+ than maintaining a fixed size. */
+ tui_apply_current_layout (false); /* Turn keypad back on. */
keypad (TUI_CMD_WIN->handle.get (), TRUE);
}
}
@@ -698,8 +700,8 @@ tui_set_focus_command (const char *arg, int from_tty)
error (_("Window \"%s\" is not visible"), arg);
tui_set_win_focus_to (win_info);
- printf_filtered (_("Focus set to %s window.\n"),
- tui_win_with_focus ()->name ());
+ gdb_printf (_("Focus set to %s window.\n"),
+ tui_win_with_focus ()->name ());
}
static void
@@ -707,16 +709,17 @@ tui_all_windows_info (const char *arg, int from_tty)
{
if (!tui_active)
{
- printf_filtered (_("The TUI is not active.\n"));
+ gdb_printf (_("The TUI is not active.\n"));
return;
}
struct tui_win_info *win_with_focus = tui_win_with_focus ();
struct ui_out *uiout = current_uiout;
- ui_out_emit_table table_emitter (uiout, 3, -1, "tui-windows");
+ ui_out_emit_table table_emitter (uiout, 4, -1, "tui-windows");
uiout->table_header (10, ui_left, "name", "Name");
uiout->table_header (5, ui_right, "lines", "Lines");
+ uiout->table_header (7, ui_right, "columns", "Columns");
uiout->table_header (10, ui_left, "focus", "Focus");
uiout->table_body ();
@@ -727,6 +730,7 @@ tui_all_windows_info (const char *arg, int from_tty)
uiout->field_string ("name", win_info->name ());
uiout->field_signed ("lines", win_info->height);
+ uiout->field_signed ("columns", win_info->width);
if (win_with_focus == win_info)
uiout->field_string ("focus", _("(has focus)"));
else
@@ -790,7 +794,7 @@ static void
tui_show_tab_width (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("TUI tab width is %s spaces.\n"), value);
+ gdb_printf (file, _("TUI tab width is %s spaces.\n"), value);
}
@@ -814,7 +818,7 @@ static void
tui_show_compact_source (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("TUI source window compactness is %s.\n"), value);
+ gdb_printf (file, _("TUI source window compactness is %s.\n"), value);
}
/* Set the tab width of the specified window. */
@@ -840,10 +844,21 @@ tui_set_tab_width_command (const char *arg, int from_tty)
}
}
+/* Helper function for the user commands to adjust a window's width or
+ height. The ARG string contains the command line arguments from the
+ user, which should give the name of a window, and how to adjust the
+ size.
+
+ When SET_WIDTH_P is true the width of the window is adjusted based on
+ ARG, and when SET_WIDTH_P is false, the height of the window is adjusted
+ based on ARG.
+
+ On invalid input, or if the size can't be adjusted as requested, then an
+ error is thrown, otherwise, the window sizes are adjusted, and the
+ windows redrawn. */
-/* Set the height of the specified window. */
static void
-tui_set_win_height_command (const char *arg, int from_tty)
+tui_set_win_size (const char *arg, bool set_width_p)
{
/* Make sure the curses mode is enabled. */
tui_enable ();
@@ -852,7 +867,7 @@ tui_set_win_height_command (const char *arg, int from_tty)
const char *buf = arg;
const char *buf_ptr = buf;
- int new_height;
+ int new_size;
struct tui_win_info *win_info;
buf_ptr = skip_to_space (buf_ptr);
@@ -888,26 +903,59 @@ tui_set_win_height_command (const char *arg, int from_tty)
if (negate)
input_no *= (-1);
if (fixed_size)
- new_height = input_no;
+ new_size = input_no;
else
- new_height = win_info->height + input_no;
+ {
+ int curr_size;
+ if (set_width_p)
+ curr_size = win_info->width;
+ else
+ curr_size = win_info->height;
+ new_size = curr_size + input_no;
+ }
/* Now change the window's height, and adjust
all other windows around it. */
- tui_adjust_window_height (win_info, new_height);
+ if (set_width_p)
+ tui_adjust_window_width (win_info, new_size);
+ else
+ tui_adjust_window_height (win_info, new_size);
tui_update_gdb_sizes ();
}
else
- error (_("Invalid window height specified"));
+ {
+ if (set_width_p)
+ error (_("Invalid window width specified"));
+ else
+ error (_("Invalid window height specified"));
+ }
}
}
+/* Implement the 'tui window height' command (alias 'winheight'). */
+
+static void
+tui_set_win_height_command (const char *arg, int from_tty)
+{
+ /* Pass false as the final argument to set the height. */
+ tui_set_win_size (arg, false);
+}
+
+/* Implement the 'tui window width' command (alias 'winwidth'). */
+
+static void
+tui_set_win_width_command (const char *arg, int from_tty)
+{
+ /* Pass true as the final argument to set the width. */
+ tui_set_win_size (arg, true);
+}
+
/* See tui-data.h. */
int
tui_win_info::max_height () const
{
- return tui_term_height () - 2;
+ return tui_term_height ();
}
/* See tui-data.h. */
@@ -915,7 +963,7 @@ tui_win_info::max_height () const
int
tui_win_info::max_width () const
{
- return tui_term_width () - 2;
+ return tui_term_width ();
}
static void
@@ -975,6 +1023,18 @@ parse_scrolling_args (const char *arg,
}
}
+/* The list of 'tui window' sub-commands. */
+
+static cmd_list_element *tui_window_cmds = nullptr;
+
+/* Called to implement 'tui window'. */
+
+static void
+tui_window_command (const char *args, int from_tty)
+{
+ help_list (tui_window_cmds, "tui window ", all_commands, gdb_stdout);
+}
+
/* Function to initialize gdb commands, for tui window
manipulation. */
@@ -993,8 +1053,11 @@ _initialize_tui_win ()
&tui_setlist, &tui_showlist,
&setlist, &showlist);
- add_com ("refresh", class_tui, tui_refresh_all_command,
- _("Refresh the terminal display."));
+ cmd_list_element *refresh_cmd
+ = add_cmd ("refresh", class_tui, tui_refresh_all_command,
+ _("Refresh the terminal display."),
+ tui_get_cmd_list ());
+ add_com_alias ("refresh", refresh_cmd, class_tui, 0);
cmd_list_element *tabset_cmd
= add_com ("tabset", class_tui, tui_set_tab_width_command, _("\
@@ -1002,21 +1065,40 @@ Set the width (in characters) of tab stops.\n\
Usage: tabset N"));
deprecate_cmd (tabset_cmd, "set tui tab-width");
+ /* Setup the 'tui window' list of command. */
+ add_prefix_cmd ("window", class_tui, tui_window_command,
+ _("Text User Interface window commands."),
+ &tui_window_cmds, 1, tui_get_cmd_list ());
+
cmd_list_element *winheight_cmd
- = add_com ("winheight", class_tui, tui_set_win_height_command, _("\
+ = add_cmd ("height", class_tui, tui_set_win_height_command, _("\
Set or modify the height of a specified window.\n\
-Usage: winheight WINDOW-NAME [+ | -] NUM-LINES\n\
-Use \"info win\" to see the names of the windows currently being displayed."));
+Usage: tui window height WINDOW-NAME [+ | -] NUM-LINES\n\
+Use \"info win\" to see the names of the windows currently being displayed."),
+ &tui_window_cmds);
+ add_com_alias ("winheight", winheight_cmd, class_tui, 0);
add_com_alias ("wh", winheight_cmd, class_tui, 0);
set_cmd_completer (winheight_cmd, winheight_completer);
+
+ cmd_list_element *winwidth_cmd
+ = add_cmd ("width", class_tui, tui_set_win_width_command, _("\
+Set or modify the width of a specified window.\n\
+Usage: tui window width WINDOW-NAME [+ | -] NUM-LINES\n\
+Use \"info win\" to see the names of the windows currently being displayed."),
+ &tui_window_cmds);
+ add_com_alias ("winwidth", winwidth_cmd, class_tui, 0);
+ set_cmd_completer (winwidth_cmd, winheight_completer);
+
add_info ("win", tui_all_windows_info,
_("List of all displayed windows.\n\
Usage: info win"));
cmd_list_element *focus_cmd
- = add_com ("focus", class_tui, tui_set_focus_command, _("\
+ = add_cmd ("focus", class_tui, tui_set_focus_command, _("\
Set focus to named window or next/prev window.\n\
-Usage: focus [WINDOW-NAME | next | prev]\n\
-Use \"info win\" to see the names of the windows currently being displayed."));
+Usage: tui focus [WINDOW-NAME | next | prev]\n\
+Use \"info win\" to see the names of the windows currently being displayed."),
+ tui_get_cmd_list ());
+ add_com_alias ("focus", focus_cmd, class_tui, 0);
add_com_alias ("fs", focus_cmd, class_tui, 0);
set_cmd_completer (focus_cmd, focus_completer);
add_com ("+", class_tui, tui_scroll_forward_command, _("\
diff --git a/gdb/tui/tui-winsource.c b/gdb/tui/tui-winsource.c
index 23c7ddae429..87b8dcff154 100644
--- a/gdb/tui/tui-winsource.c
+++ b/gdb/tui/tui-winsource.c
@@ -199,7 +199,7 @@ tui_update_source_windows_with_line (struct symtab_and_line sal)
if (sal.symtab != nullptr)
{
find_line_pc (sal.symtab, sal.line, &sal.pc);
- gdbarch = SYMTAB_OBJFILE (sal.symtab)->arch ();
+ gdbarch = sal.symtab->compunit ()->objfile ()->arch ();
}
for (struct tui_source_window_base *win_info : tui_source_windows ())
diff --git a/gdb/tui/tui.c b/gdb/tui/tui.c
index 776dccf0bb2..45be33786e3 100644
--- a/gdb/tui/tui.c
+++ b/gdb/tui/tui.c
@@ -50,6 +50,19 @@
#include "gdb_curses.h"
#include "interps.h"
+/* See tui.h. */
+
+bool debug_tui = false;
+
+/* Implement 'show debug tui'. */
+
+static void
+show_tui_debug (struct ui_file *file, int from_tty,
+ struct cmd_list_element *c, const char *value)
+{
+ gdb_printf (file, _("TUI debugging is \"%s\".\n"), value);
+}
+
/* This redefines CTRL if it is not already defined, so it must come
after terminal state releated include files like <term.h> and
"gdb_curses.h". */
@@ -354,6 +367,8 @@ gdb_getenv_term (void)
void
tui_enable (void)
{
+ TUI_SCOPED_DEBUG_ENTER_EXIT;
+
if (tui_active)
return;
@@ -494,6 +509,8 @@ tui_enable (void)
void
tui_disable (void)
{
+ TUI_SCOPED_DEBUG_ENTER_EXIT;
+
if (!tui_active)
return;
@@ -587,4 +604,13 @@ Usage: tui enable"),
_("Disable TUI display mode.\n\
Usage: tui disable"),
tuicmd);
+
+ /* Debug this tui internals. */
+ add_setshow_boolean_cmd ("tui", class_maintenance, &debug_tui, _("\
+Set tui debugging."), _("\
+Show tui debugging."), _("\
+When true, tui specific internal debugging is enabled."),
+ NULL,
+ show_tui_debug,
+ &setdebuglist, &showdebuglist);
}
diff --git a/gdb/tui/tui.h b/gdb/tui/tui.h
index a4df66f17fc..924d91daa7e 100644
--- a/gdb/tui/tui.h
+++ b/gdb/tui/tui.h
@@ -22,6 +22,20 @@
#ifndef TUI_TUI_H
#define TUI_TUI_H
+/* Flag to control tui debugging. */
+
+extern bool debug_tui;
+
+/* Print a "tui" debug statement. */
+
+#define tui_debug_printf(fmt, ...) \
+ debug_prefixed_printf_cond (debug_tui, "tui", fmt, ##__VA_ARGS__)
+
+/* Print "tui" enter/exit debug statements. */
+
+#define TUI_SCOPED_DEBUG_ENTER_EXIT \
+ scoped_debug_enter_exit (debug_tui, "tui")
+
struct ui_file;
/* Types of error returns. */
diff --git a/gdb/typeprint.c b/gdb/typeprint.c
index 2428aa2244f..3356bdde2e7 100644
--- a/gdb/typeprint.c
+++ b/gdb/typeprint.c
@@ -18,7 +18,7 @@
along with this program. If not, see <http://www.gnu.org/licenses/>. */
#include "defs.h"
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
#include "bfd.h" /* Binary File Description */
#include "symtab.h"
#include "gdbtypes.h"
@@ -107,14 +107,14 @@ print_offset_data::maybe_print_hole (struct ui_file *stream,
{
fprintf_styled (stream, highlight_style.style (),
"/* XXX %2u-bit %-7s */", hole_bit, for_what);
- fputs_filtered ("\n", stream);
+ gdb_puts ("\n", stream);
}
if (hole_byte > 0)
{
fprintf_styled (stream, highlight_style.style (),
"/* XXX %2u-byte %-7s */", hole_byte, for_what);
- fputs_filtered ("\n", stream);
+ gdb_puts ("\n", stream);
}
}
}
@@ -127,7 +127,7 @@ print_offset_data::update (struct type *type, unsigned int field_idx,
{
if (field_is_static (&type->field (field_idx)))
{
- print_spaces_filtered (indentation, stream);
+ print_spaces (indentation, stream);
return;
}
@@ -136,10 +136,10 @@ print_offset_data::update (struct type *type, unsigned int field_idx,
{
/* Since union fields don't have the concept of offsets, we just
print their sizes. */
- fprintf_filtered (stream, "/* %6s */",
- (print_in_hex ?
- hex_string_custom (TYPE_LENGTH (ftype), 4) :
- pulongest (TYPE_LENGTH (ftype))));
+ gdb_printf (stream, "/* %6s */",
+ (print_in_hex ?
+ hex_string_custom (TYPE_LENGTH (ftype), 4) :
+ pulongest (TYPE_LENGTH (ftype))));
return;
}
@@ -157,23 +157,23 @@ print_offset_data::update (struct type *type, unsigned int field_idx,
unsigned real_bitpos = bitpos + offset_bitpos;
- fprintf_filtered (stream,
- (print_in_hex ? "/* 0x%04x: 0x%x" : "/* %6u:%2u "),
- real_bitpos / TARGET_CHAR_BIT,
- real_bitpos % TARGET_CHAR_BIT);
+ gdb_printf (stream,
+ (print_in_hex ? "/* 0x%04x: 0x%x" : "/* %6u:%2u "),
+ real_bitpos / TARGET_CHAR_BIT,
+ real_bitpos % TARGET_CHAR_BIT);
}
else
{
/* The position of the field, relative to the beginning of the
struct. */
- fprintf_filtered (stream, (print_in_hex ? "/* 0x%04x" : "/* %6u"),
- (bitpos + offset_bitpos) / TARGET_CHAR_BIT);
+ gdb_printf (stream, (print_in_hex ? "/* 0x%04x" : "/* %6u"),
+ (bitpos + offset_bitpos) / TARGET_CHAR_BIT);
- fprintf_filtered (stream, " ");
+ gdb_printf (stream, " ");
}
- fprintf_filtered (stream, (print_in_hex ? " | 0x%04x */" : " | %6u */"),
- fieldsize_byte);
+ gdb_printf (stream, (print_in_hex ? " | 0x%04x */" : " | %6u */"),
+ fieldsize_byte);
end_bitpos = bitpos + fieldsize_bit;
}
@@ -187,10 +187,10 @@ print_offset_data::finish (struct type *type, int level,
unsigned int bitpos = TYPE_LENGTH (type) * TARGET_CHAR_BIT;
maybe_print_hole (stream, bitpos, "padding");
- fputs_filtered ("\n", stream);
- print_spaces_filtered (level + 4 + print_offset_data::indentation, stream);
- fprintf_filtered (stream, "/* total size (bytes): %4s */\n",
- pulongest (TYPE_LENGTH (type)));
+ gdb_puts ("\n", stream);
+ print_spaces (level + 4 + print_offset_data::indentation, stream);
+ gdb_printf (stream, "/* total size (bytes): %4s */\n",
+ pulongest (TYPE_LENGTH (type)));
}
@@ -201,9 +201,8 @@ static hashval_t
hash_typedef_field (const void *p)
{
const struct decl_field *tf = (const struct decl_field *) p;
- struct type *t = check_typedef (tf->type);
- return htab_hash_string (TYPE_SAFE_NAME (t));
+ return htab_hash_string (TYPE_SAFE_NAME (tf->type));
}
/* An equality function for a typedef field. */
@@ -255,12 +254,12 @@ typedef_hash_table::add_template_parameters (struct type *t)
void **slot;
/* We only want type-valued template parameters in the hash. */
- if (SYMBOL_CLASS (TYPE_TEMPLATE_ARGUMENT (t, i)) != LOC_TYPEDEF)
+ if (TYPE_TEMPLATE_ARGUMENT (t, i)->aclass () != LOC_TYPEDEF)
continue;
tf = XOBNEW (&m_storage, struct decl_field);
tf->name = TYPE_TEMPLATE_ARGUMENT (t, i)->linkage_name ();
- tf->type = SYMBOL_TYPE (TYPE_TEMPLATE_ARGUMENT (t, i));
+ tf->type = TYPE_TEMPLATE_ARGUMENT (t, i)->type ();
slot = htab_find_slot (m_table.get (), tf, INSERT);
if (*slot == NULL)
@@ -392,7 +391,8 @@ void
type_print (struct type *type, const char *varstring, struct ui_file *stream,
int show)
{
- LA_PRINT_TYPE (type, varstring, stream, show, 0, &default_ptype_flags);
+ current_language->print_type (type, varstring, stream, show, 0,
+ &default_ptype_flags);
}
/* Print TYPE to a string, returning it. The caller is responsible for
@@ -406,7 +406,7 @@ type_to_string (struct type *type)
string_file stb;
type_print (type, "", &stb, -1);
- return std::move (stb.string ());
+ return stb.release ();
}
catch (const gdb_exception &except)
{
@@ -554,9 +554,9 @@ whatis_exp (const char *exp, int show)
if (flags.print_offsets
&& (type->code () == TYPE_CODE_STRUCT
|| type->code () == TYPE_CODE_UNION))
- fprintf_filtered (gdb_stdout, "/* offset | size */ ");
+ gdb_printf ("/* offset | size */ ");
- printf_filtered ("type = ");
+ gdb_printf ("type = ");
std::unique_ptr<typedef_hash_table> table_holder;
std::unique_ptr<ext_lang_type_printers> printer_holder;
@@ -571,15 +571,15 @@ whatis_exp (const char *exp, int show)
if (real_type)
{
- printf_filtered ("/* real type = ");
+ gdb_printf ("/* real type = ");
type_print (real_type, "", gdb_stdout, -1);
if (! full)
- printf_filtered (" (incomplete object)");
- printf_filtered (" */\n");
+ gdb_printf (" (incomplete object)");
+ gdb_printf (" */\n");
}
- LA_PRINT_TYPE (type, "", gdb_stdout, show, 0, &flags);
- printf_filtered ("\n");
+ current_language->print_type (type, "", gdb_stdout, show, 0, &flags);
+ gdb_printf ("\n");
}
static void
@@ -633,7 +633,7 @@ print_type_scalar (struct type *type, LONGEST val, struct ui_file *stream)
}
if (i < len)
{
- fputs_filtered (type->field (i).name (), stream);
+ gdb_puts (type->field (i).name (), stream);
}
else
{
@@ -646,11 +646,11 @@ print_type_scalar (struct type *type, LONGEST val, struct ui_file *stream)
break;
case TYPE_CODE_CHAR:
- LA_PRINT_CHAR ((unsigned char) val, type, stream);
+ current_language->printchar ((unsigned char) val, type, stream);
break;
case TYPE_CODE_BOOL:
- fprintf_filtered (stream, val ? "TRUE" : "FALSE");
+ gdb_printf (stream, val ? "TRUE" : "FALSE");
break;
case TYPE_CODE_RANGE:
@@ -693,8 +693,8 @@ print_type_fixed_point (struct type *type, struct ui_file *stream)
{
std::string small_img = type->fixed_point_scaling_factor ().str ();
- fprintf_filtered (stream, "%s-byte fixed point (small = %s)",
- pulongest (TYPE_LENGTH (type)), small_img.c_str ());
+ gdb_printf (stream, "%s-byte fixed point (small = %s)",
+ pulongest (TYPE_LENGTH (type)), small_img.c_str ());
}
/* Dump details of a type specified either directly or indirectly.
@@ -733,8 +733,8 @@ static void
show_print_type_methods (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Printing of methods defined in a class in %s\n"),
- value);
+ gdb_printf (file, _("Printing of methods defined in a class in %s\n"),
+ value);
}
static bool print_typedefs = true;
@@ -750,8 +750,8 @@ static void
show_print_type_typedefs (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Printing of typedefs defined in a class in %s\n"),
- value);
+ gdb_printf (file, _("Printing of typedefs defined in a class in %s\n"),
+ value);
}
/* Limit on the number of nested type definitions to print or -1 to print
@@ -778,14 +778,14 @@ show_print_type_nested_types (struct ui_file *file, int from_tty,
{
if (*value == '0')
{
- fprintf_filtered (file,
- _("Will not print nested types defined in a class\n"));
+ gdb_printf (file,
+ _("Will not print nested types defined in a class\n"));
}
else
{
- fprintf_filtered (file,
- _("Will print %s nested types defined in a class\n"),
- value);
+ gdb_printf (file,
+ _("Will print %s nested types defined in a class\n"),
+ value);
}
}
@@ -813,9 +813,9 @@ show_print_offsets_and_sizes_in_hex (struct ui_file *file, int from_tty,
struct cmd_list_element *c,
const char *value)
{
- fprintf_filtered (file, _("\
+ gdb_printf (file, _("\
Display of struct members offsets and sizes in hexadecimal is %s\n"),
- value);
+ value);
}
void _initialize_typeprint ();
diff --git a/gdb/typeprint.h b/gdb/typeprint.h
index 97620a4caf2..29687234c7f 100644
--- a/gdb/typeprint.h
+++ b/gdb/typeprint.h
@@ -19,7 +19,7 @@
#ifndef TYPEPRINT_H
#define TYPEPRINT_H
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
enum language;
struct ui_file;
diff --git a/gdb/ui-file.c b/gdb/ui-file.c
index c6a4888ed48..47044e42a67 100644
--- a/gdb/ui-file.c
+++ b/gdb/ui-file.c
@@ -21,10 +21,12 @@
#include "defs.h"
#include "ui-file.h"
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
#include "gdbsupport/gdb_select.h"
#include "gdbsupport/filestuff.h"
+#include "cli-out.h"
#include "cli/cli-style.h"
+#include <chrono>
null_file null_stream;
@@ -40,7 +42,7 @@ ui_file::printf (const char *format, ...)
va_list args;
va_start (args, format);
- vfprintf_unfiltered (this, format, args);
+ vprintf (format, args);
va_end (args);
}
@@ -58,16 +60,42 @@ ui_file::putstrn (const char *str, int n, int quoter, bool async_safe)
printchar (str[i], quoter, async_safe);
}
-int
+void
ui_file::putc (int c)
{
- return fputc_unfiltered (c, this);
+ char copy = (char) c;
+ write (&copy, 1);
}
void
ui_file::vprintf (const char *format, va_list args)
{
- vfprintf_unfiltered (this, format, args);
+ ui_out_flags flags = disallow_ui_out_field;
+ cli_ui_out (this, flags).vmessage (m_applied_style, format, args);
+}
+
+/* See ui-file.h. */
+
+void
+ui_file::emit_style_escape (const ui_file_style &style)
+{
+ if (can_emit_style_escape () && style != m_applied_style)
+ {
+ m_applied_style = style;
+ this->puts (style.to_ansi ().c_str ());
+ }
+}
+
+/* See ui-file.h. */
+
+void
+ui_file::reset_style ()
+{
+ if (can_emit_style_escape ())
+ {
+ m_applied_style = ui_file_style ();
+ this->puts (m_applied_style.to_ansi ().c_str ());
+ }
}
/* See ui-file.h. */
@@ -324,8 +352,7 @@ stdio_file::isatty ()
bool
stdio_file::can_emit_style_escape ()
{
- return ((this == gdb_stdout || this == gdb_stderr)
- && this->isatty ()
+ return (this->isatty ()
&& term_cli_styling ());
}
@@ -413,8 +440,7 @@ tee_file::term_out ()
bool
tee_file::can_emit_style_escape ()
{
- return ((this == gdb_stdout || this == gdb_stderr)
- && m_one->term_out ()
+ return (m_one->term_out ()
&& term_cli_styling ());
}
@@ -449,3 +475,31 @@ no_terminal_escape_file::puts (const char *buf)
if (*buf != '\0')
this->stdio_file::write (buf, strlen (buf));
}
+
+void
+timestamped_file::write (const char *buf, long len)
+{
+ if (debug_timestamp)
+ {
+ /* Print timestamp if previous print ended with a \n. */
+ if (m_needs_timestamp)
+ {
+ using namespace std::chrono;
+
+ steady_clock::time_point now = steady_clock::now ();
+ seconds s = duration_cast<seconds> (now.time_since_epoch ());
+ microseconds us = duration_cast<microseconds> (now.time_since_epoch () - s);
+ std::string timestamp = string_printf ("%ld.%06ld ",
+ (long) s.count (),
+ (long) us.count ());
+ m_stream->puts (timestamp.c_str ());
+ }
+
+ /* Print the message. */
+ m_stream->write (buf, len);
+
+ m_needs_timestamp = (len > 0 && buf[len - 1] == '\n');
+ }
+ else
+ m_stream->write (buf, len);
+}
diff --git a/gdb/ui-file.h b/gdb/ui-file.h
index c097abf0c29..e33ae79e753 100644
--- a/gdb/ui-file.h
+++ b/gdb/ui-file.h
@@ -51,7 +51,7 @@ public:
write_async_safe method. */
void putstrn (const char *str, int n, int quoter, bool async_safe = false);
- int putc (int c);
+ void putc (int c);
void vprintf (const char *, va_list) ATTRIBUTE_PRINTF (2, 0);
@@ -99,14 +99,44 @@ public:
virtual int fd () const
{ return -1; }
- /* Return true if this object supports paging, false otherwise. */
- virtual bool can_page () const
+ /* Indicate that if the next sequence of characters overflows the
+ line, a newline should be inserted here rather than when it hits
+ the end. If INDENT is non-zero, it is a number of spaces to be
+ printed to indent the wrapped part on the next line.
+
+ If the line is already overfull, we immediately print a newline and
+ the indentation, and disable further wrapping.
+
+ If we don't know the width of lines, but we know the page height,
+ we must not wrap words, but should still keep track of newlines
+ that were explicitly printed.
+
+ This routine is guaranteed to force out any output which has been
+ squirreled away in the wrap_buffer, so wrap_here (0) can be
+ used to force out output from the wrap_buffer. */
+ virtual void wrap_here (int indent)
+ {
+ }
+
+ /* Emit an ANSI style escape for STYLE. */
+ virtual void emit_style_escape (const ui_file_style &style);
+
+ /* Rest the current output style to the empty style. */
+ virtual void reset_style ();
+
+ /* Print STR, bypassing any paging that might be done by this
+ ui_file. Note that nearly no code should call this -- it's
+ intended for use by gdb_printf, but nothing else. */
+ virtual void puts_unfiltered (const char *str)
{
- /* Almost no file supports paging, which is why this is the
- default. */
- return false;
+ this->puts (str);
}
+protected:
+
+ /* The currently applied style. */
+ ui_file_style m_applied_style;
+
private:
/* Helper function for putstr and putstrn. Print the character C on
@@ -160,17 +190,27 @@ public:
/* string_file-specific public API. */
/* Accesses the std::string containing the entire output collected
- so far.
+ so far. */
+ const std::string &string () { return m_string; }
- Returns a non-const reference so that it's easy to move the
- string contents out of the string_file. E.g.:
+ /* Return an std::string containing the entire output collected so far.
+
+ The internal buffer is cleared, such that it's ready to build a new
+ string. */
+ std::string release ()
+ {
+ std::string ret = std::move (m_string);
+ m_string.clear ();
+ return ret;
+ }
- string_file buf;
- buf.printf (....);
- buf.printf (....);
- return std::move (buf.string ());
- */
- std::string &string () { return m_string; }
+ /* Set the internal buffer contents to STR. Any existing contents are
+ discarded. */
+ string_file &operator= (std::string &&str)
+ {
+ m_string = std::move (str);
+ return *this;
+ }
/* Provide a few convenience methods with the same API as the
underlying std::string. */
@@ -229,11 +269,6 @@ public:
int fd () const override
{ return m_fd; }
- virtual bool can_page () const override
- {
- return m_file == stdout;
- }
-
private:
/* Sets the internal stream to FILE, and saves the FILE's file
descriptor in M_FD. */
@@ -308,11 +343,22 @@ public:
bool can_emit_style_escape () override;
void flush () override;
- virtual bool can_page () const override
+ void emit_style_escape (const ui_file_style &style) override
+ {
+ m_one->emit_style_escape (style);
+ m_two->emit_style_escape (style);
+ }
+
+ void reset_style () override
+ {
+ m_one->reset_style ();
+ m_two->reset_style ();
+ }
+
+ void puts_unfiltered (const char *str) override
{
- /* If one of the underlying files can page, then we allow it
- here. */
- return m_one->can_page () || m_two->can_page ();
+ m_one->puts_unfiltered (str);
+ m_two->puts_unfiltered (str);
}
private:
@@ -335,6 +381,86 @@ public:
sequences. */
void write (const char *buf, long length_buf) override;
void puts (const char *linebuffer) override;
+
+ void emit_style_escape (const ui_file_style &style) override
+ {
+ }
+
+ void reset_style () override
+ {
+ }
+};
+
+/* A base class for ui_file types that wrap another ui_file. */
+
+class wrapped_file : public ui_file
+{
+public:
+
+ bool isatty () override
+ { return m_stream->isatty (); }
+
+ bool term_out () override
+ { return m_stream->term_out (); }
+
+ bool can_emit_style_escape () override
+ { return m_stream->can_emit_style_escape (); }
+
+ void flush () override
+ { m_stream->flush (); }
+
+ void wrap_here (int indent) override
+ { m_stream->wrap_here (indent); }
+
+ void emit_style_escape (const ui_file_style &style) override
+ { m_stream->emit_style_escape (style); }
+
+ /* Rest the current output style to the empty style. */
+ void reset_style () override
+ { m_stream->reset_style (); }
+
+ int fd () const override
+ { return m_stream->fd (); }
+
+ void puts_unfiltered (const char *str) override
+ { m_stream->puts_unfiltered (str); }
+
+ void write_async_safe (const char *buf, long length_buf) override
+ { return m_stream->write_async_safe (buf, length_buf); }
+
+protected:
+
+ /* Note that this class does not assume ownership of the stream.
+ However, a subclass may choose to, by adding a 'delete' to its
+ destructor. */
+ explicit wrapped_file (ui_file *stream)
+ : m_stream (stream)
+ {
+ }
+
+ /* The underlying stream. */
+ ui_file *m_stream;
+};
+
+/* A ui_file that optionally puts a timestamp at the start of each
+ line of output. */
+
+class timestamped_file : public wrapped_file
+{
+public:
+ explicit timestamped_file (ui_file *stream)
+ : wrapped_file (stream)
+ {
+ }
+
+ DISABLE_COPY_AND_ASSIGN (timestamped_file);
+
+ void write (const char *buf, long len) override;
+
+private:
+
+ /* True if the next output should be timestamped. */
+ bool m_needs_timestamp = true;
};
#endif
diff --git a/gdb/ui-out.c b/gdb/ui-out.c
index 05d3515aa9a..e34e40fae76 100644
--- a/gdb/ui-out.c
+++ b/gdb/ui-out.c
@@ -790,9 +790,9 @@ ui_out::message (const char *format, ...)
}
void
-ui_out::wrap_hint (const char *identstring)
+ui_out::wrap_hint (int indent)
{
- do_wrap_hint (identstring);
+ do_wrap_hint (indent);
}
void
diff --git a/gdb/ui-out.h b/gdb/ui-out.h
index 175ff5fb156..21e7a2bfbe7 100644
--- a/gdb/ui-out.h
+++ b/gdb/ui-out.h
@@ -53,12 +53,9 @@ enum ui_out_flag
{
ui_source_list = (1 << 0),
fix_multi_location_breakpoint_output = (1 << 1),
- /* For CLI output, this flag is set if unfiltered output is desired.
- This should only be used by low-level formatting functions. */
- unfiltered_output = (1 << 2),
/* This indicates that %pF should be disallowed in a printf format
string. */
- disallow_ui_out_field = (1 << 3)
+ disallow_ui_out_field = (1 << 2)
};
DEF_ENUM_FLAGS_TYPE (ui_out_flag, ui_out_flags);
@@ -257,7 +254,7 @@ class ui_out
void vmessage (const ui_file_style &in_style,
const char *format, va_list args) ATTRIBUTE_PRINTF (3, 0);
- void wrap_hint (const char *identstring);
+ void wrap_hint (int indent);
void flush ();
@@ -312,6 +309,13 @@ class ui_out
progress_update (const progress_update &) = delete;
progress_update &operator= (const progress_update &) = delete;
+ /* Emit some progress for this progress meter. HOWMUCH may range
+ from 0.0 to 1.0. */
+ void progress (const std::string& msg, double howmuch)
+ {
+ m_uiout->do_progress_notify (msg, howmuch);
+ }
+
private:
struct ui_out *m_uiout;
@@ -356,7 +360,7 @@ class ui_out
virtual void do_message (const ui_file_style &style,
const char *format, va_list args)
ATTRIBUTE_PRINTF (3,0) = 0;
- virtual void do_wrap_hint (const char *identstring) = 0;
+ virtual void do_wrap_hint (int indent) = 0;
virtual void do_flush () = 0;
virtual void do_redirect (struct ui_file *outstream) = 0;
diff --git a/gdb/ui-style.c b/gdb/ui-style.c
index 253e796d57a..f1a5b8c4101 100644
--- a/gdb/ui-style.c
+++ b/gdb/ui-style.c
@@ -18,7 +18,7 @@
#include "defs.h"
#include "ui-style.h"
-#include "gdb_regex.h"
+#include "gdbsupport/gdb_regex.h"
/* A regular expression that is used for matching ANSI terminal escape
sequences. */
diff --git a/gdb/unittests/command-def-selftests.c b/gdb/unittests/command-def-selftests.c
index dc146a37b2d..da158d9e864 100644
--- a/gdb/unittests/command-def-selftests.c
+++ b/gdb/unittests/command-def-selftests.c
@@ -37,9 +37,8 @@ static unsigned int nr_failed_invariants;
static void
broken_doc_invariant (const char *prefix, const char *name, const char *msg)
{
- fprintf_filtered (gdb_stdout,
- "help doc broken invariant: command '%s%s' help doc %s\n",
- prefix, name, msg);
+ gdb_printf ("help doc broken invariant: command '%s%s' help doc %s\n",
+ prefix, name, msg);
nr_failed_invariants++;
}
@@ -130,13 +129,12 @@ traverse_command_structure (struct cmd_list_element **list,
auto dupl = lists.find (list);
if (dupl != lists.end ())
{
- fprintf_filtered (gdb_stdout,
- "list %p duplicated,"
- " reachable via prefix '%s' and '%s'."
- " Duplicated list first command is '%s'\n",
- list,
- prefix, dupl->second,
- (*list)->name);
+ gdb_printf ("list %p duplicated,"
+ " reachable via prefix '%s' and '%s'."
+ " Duplicated list first command is '%s'\n",
+ list,
+ prefix, dupl->second,
+ (*list)->name);
nr_duplicates++;
return;
}
@@ -165,17 +163,15 @@ traverse_command_structure (struct cmd_list_element **list,
|| (prefixcmd == nullptr && *list != cmdlist))
{
if (c->prefix == nullptr)
- fprintf_filtered (gdb_stdout,
- "list %p reachable via prefix '%s'."
- " command '%s' has null prefixcmd\n",
- list,
- prefix, c->name);
+ gdb_printf ("list %p reachable via prefix '%s'."
+ " command '%s' has null prefixcmd\n",
+ list,
+ prefix, c->name);
else
- fprintf_filtered (gdb_stdout,
- "list %p reachable via prefix '%s'."
- " command '%s' has a different prefixcmd\n",
- list,
- prefix, c->name);
+ gdb_printf ("list %p reachable via prefix '%s'."
+ " command '%s' has a different prefixcmd\n",
+ list,
+ prefix, c->name);
nr_invalid_prefixcmd++;
}
}
diff --git a/gdb/unittests/parallel-for-selftests.c b/gdb/unittests/parallel-for-selftests.c
index adfc82f82bd..e0c07e55e03 100644
--- a/gdb/unittests/parallel-for-selftests.c
+++ b/gdb/unittests/parallel-for-selftests.c
@@ -52,7 +52,7 @@ test (int n_threads)
#define NUMBER 10000
std::atomic<int> counter (0);
- gdb::parallel_for_each (0, NUMBER,
+ gdb::parallel_for_each (1, 0, NUMBER,
[&] (int start, int end)
{
counter += end - start;
diff --git a/gdb/unittests/path-join-selftests.c b/gdb/unittests/path-join-selftests.c
new file mode 100644
index 00000000000..d074cda3276
--- /dev/null
+++ b/gdb/unittests/path-join-selftests.c
@@ -0,0 +1,73 @@
+/* Self tests for path_join for GDB, the GNU debugger.
+
+ Copyright (C) 2022 Free Software Foundation, Inc.
+
+ This file is part of GDB.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#include "defs.h"
+#include "gdbsupport/pathstuff.h"
+#include "gdbsupport/selftest.h"
+
+namespace selftests {
+namespace path_join {
+
+template <typename ...Args>
+static void
+test_one (const char *expected, Args... paths)
+{
+ std::string actual = ::path_join (paths...);
+
+ SELF_CHECK (actual == expected);
+}
+
+/* Test path_join. */
+
+static void
+test ()
+{
+ test_one ("/foo/bar", "/foo", "bar");
+ test_one ("/bar", "/", "bar");
+ test_one ("foo/bar/", "foo", "bar", "");
+ test_one ("foo", "", "foo");
+ test_one ("foo/bar", "foo", "", "bar");
+ test_one ("foo/", "foo", "");
+ test_one ("foo/", "foo/", "");
+
+ test_one ("D:/foo/bar", "D:/foo", "bar");
+ test_one ("D:/foo/bar", "D:/foo/", "bar");
+
+#if defined(_WIN32)
+ /* The current implementation doesn't recognize backslashes as directory
+ separators on Unix-like systems, so only run these tests on Windows. If
+ we ever switch our implementation to use std::filesystem::path, they
+ should work anywhere, in theory. */
+ test_one ("D:\\foo/bar", "D:\\foo", "bar");
+ test_one ("D:\\foo\\bar", "D:\\foo\\", "bar");
+ test_one ("\\\\server\\dir\\file", "\\\\server\\dir\\", "file");
+ test_one ("\\\\server\\dir/file", "\\\\server\\dir", "file");
+#endif /* _WIN32 */
+}
+
+}
+}
+
+void _initialize_path_join_selftests ();
+void
+_initialize_path_join_selftests ()
+{
+ selftests::register_test ("path_join",
+ selftests::path_join::test);
+}
diff --git a/gdb/unittests/unique_xmalloc_ptr_char.c b/gdb/unittests/unique_xmalloc_ptr_char.c
new file mode 100644
index 00000000000..3eb1b7b4473
--- /dev/null
+++ b/gdb/unittests/unique_xmalloc_ptr_char.c
@@ -0,0 +1,57 @@
+/* Self tests for gdb::unique_xmalloc_ptr<char>.
+
+ Copyright (C) 2022 Free Software Foundation, Inc.
+
+ This file is part of GDB.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#include "defs.h"
+#include "gdbsupport/selftest.h"
+#include "selftest-arch.h"
+#include "gdbsupport/gdb_unique_ptr.h"
+
+namespace selftests {
+namespace unpack {
+
+static void
+unique_xmalloc_ptr_char ()
+{
+ gdb::unique_xmalloc_ptr<char> a = make_unique_xstrdup ("abc");
+ gdb::unique_xmalloc_ptr<char> b = make_unique_xstrndup ("defghi", 3);
+
+ SELF_CHECK (strcmp (a.get (), "abc") == 0);
+ SELF_CHECK (strcmp (b.get (), "def") == 0);
+
+ std::string str = "xxx";
+
+ /* Check the operator+= overload. */
+ str += a;
+ SELF_CHECK (str == "xxxabc");
+
+ /* Check the operator+ overload. */
+ str = str + b;
+ SELF_CHECK (str == "xxxabcdef");
+}
+
+}
+}
+
+void _initialize_unique_xmalloc_ptr_char ();
+void
+_initialize_unique_xmalloc_ptr_char ()
+{
+ selftests::register_test ("unique_xmalloc_ptr_char",
+ selftests::unpack::unique_xmalloc_ptr_char);
+}
diff --git a/gdb/user-regs.c b/gdb/user-regs.c
index e9a47be767d..8f1c6e62b97 100644
--- a/gdb/user-regs.c
+++ b/gdb/user-regs.c
@@ -223,9 +223,9 @@ maintenance_print_user_registers (const char *args, int from_tty)
regs = (struct gdb_user_regs *) gdbarch_data (gdbarch, user_regs_data);
regnum = gdbarch_num_cooked_regs (gdbarch);
- printf_filtered (" %-11s %3s\n", "Name", "Nr");
+ gdb_printf (" %-11s %3s\n", "Name", "Nr");
for (reg = regs->first; reg != NULL; reg = reg->next, ++regnum)
- printf_filtered (" %-11s %3d\n", reg->name, regnum);
+ gdb_printf (" %-11s %3d\n", reg->name, regnum);
}
void _initialize_user_regs ();
diff --git a/gdb/utils.c b/gdb/utils.c
index 3ee2b5444df..f9dc4f23431 100644
--- a/gdb/utils.c
+++ b/gdb/utils.c
@@ -48,7 +48,7 @@
#include "annotate.h"
#include "filenames.h"
#include "symfile.h"
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
#include "gdbcore.h"
#include "top.h"
#include "main.h"
@@ -63,7 +63,7 @@
#include <chrono>
#include "interps.h"
-#include "gdb_regex.h"
+#include "gdbsupport/gdb_regex.h"
#include "gdbsupport/job-control.h"
#include "gdbsupport/selftest.h"
#include "gdbsupport/gdb_optional.h"
@@ -76,19 +76,14 @@
#include "cli-out.h"
#include "gdbsupport/gdb-safe-ctype.h"
#include "bt-utils.h"
+#include "gdbsupport/buildargv.h"
+#include "pager.h"
+#include "run-on-main-thread.h"
void (*deprecated_error_begin_hook) (void);
/* Prototypes for local functions */
-static void vfprintf_maybe_filtered (struct ui_file *, const char *,
- va_list, bool)
- ATTRIBUTE_PRINTF (2, 0);
-
-static void fputs_maybe_filtered (const char *, struct ui_file *, int);
-
-static void prompt_for_continue (void);
-
static void set_screen_size (void);
static void set_width (void);
@@ -102,7 +97,7 @@ static std::chrono::steady_clock::duration prompt_for_continue_wait_time;
/* A flag indicating whether to timestamp debugging messages. */
-static bool debug_timestamp = false;
+bool debug_timestamp = false;
/* True means that strings with character values >0x7F should be printed
as octal escapes. False means just print the value (e.g. it's an
@@ -113,9 +108,9 @@ static void
show_sevenbit_strings (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Printing of 8-bit characters "
- "in strings as \\nnn is %s.\n"),
- value);
+ gdb_printf (file, _("Printing of 8-bit characters "
+ "in strings as \\nnn is %s.\n"),
+ value);
}
/* String to be printed before warning messages, if any. */
@@ -127,7 +122,7 @@ static void
show_pagination_enabled (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("State of pagination is %s.\n"), value);
+ gdb_printf (file, _("State of pagination is %s.\n"), value);
}
@@ -152,13 +147,10 @@ vwarning (const char *string, va_list args)
term_state.emplace ();
target_terminal::ours_for_output ();
}
- if (filtered_printing_initialized ())
- wrap_here (""); /* Force out any buffered output. */
- gdb_flush (gdb_stdout);
if (warning_pre_print)
- fputs_unfiltered (warning_pre_print, gdb_stderr);
- vfprintf_unfiltered (gdb_stderr, string, args);
- fprintf_unfiltered (gdb_stderr, "\n");
+ gdb_puts (warning_pre_print, gdb_stderr);
+ gdb_vprintf (gdb_stderr, string, args);
+ gdb_printf (gdb_stderr, "\n");
}
}
@@ -186,7 +178,7 @@ abort_with_message (const char *msg)
if (current_ui == NULL)
fputs (msg, stderr);
else
- fputs_unfiltered (msg, gdb_stderr);
+ gdb_puts (msg, gdb_stderr);
abort (); /* ARI: abort */
}
@@ -246,10 +238,10 @@ can_dump_core (enum resource_limit_kind limit_kind)
void
warn_cant_dump_core (const char *reason)
{
- fprintf_unfiltered (gdb_stderr,
- _("%s\nUnable to dump core, use `ulimit -c"
- " unlimited' before executing GDB next time.\n"),
- reason);
+ gdb_printf (gdb_stderr,
+ _("%s\nUnable to dump core, use `ulimit -c"
+ " unlimited' before executing GDB next time.\n"),
+ reason);
}
/* Check whether GDB will be able to dump core using the dump_core
@@ -314,6 +306,16 @@ struct internal_problem
bool should_print_backtrace;
};
+/* Return true if the readline callbacks have been initialized for UI.
+ This is always true once GDB is fully initialized, but during the early
+ startup phase this is initially false. */
+
+static bool
+readline_initialized (struct ui *ui)
+{
+ return ui->call_readline != nullptr;
+}
+
/* Report a problem, internal to GDB, to the user. Once the problem
has been reported, and assuming GDB didn't quit, the caller can
either allow execution to resume or throw an error. */
@@ -386,8 +388,9 @@ internal_vproblem (struct internal_problem *problem,
if (problem->should_quit != internal_problem_ask
|| !confirm
|| !filtered_printing_initialized ()
+ || !readline_initialized (current_ui)
|| problem->should_print_backtrace)
- fprintf_unfiltered (gdb_stderr, "%s\n", reason.c_str ());
+ gdb_printf (gdb_stderr, "%s\n", reason.c_str ());
if (problem->should_print_backtrace)
gdb_internal_backtrace ();
@@ -397,7 +400,8 @@ internal_vproblem (struct internal_problem *problem,
/* Default (yes/batch case) is to quit GDB. When in batch mode
this lessens the likelihood of GDB going into an infinite
loop. */
- if (!confirm || !filtered_printing_initialized ())
+ if (!confirm || !filtered_printing_initialized ()
+ || !readline_initialized (current_ui))
quit_p = 1;
else
quit_p = query (_("%s\nQuit this debugging session? "),
@@ -410,17 +414,19 @@ internal_vproblem (struct internal_problem *problem,
else
internal_error (__FILE__, __LINE__, _("bad switch"));
- fputs_unfiltered (_("\nThis is a bug, please report it."), gdb_stderr);
+ gdb_puts (_("\nThis is a bug, please report it."), gdb_stderr);
if (REPORT_BUGS_TO[0])
- fprintf_unfiltered (gdb_stderr, _(" For instructions, see:\n%s."),
- REPORT_BUGS_TO);
- fputs_unfiltered ("\n\n", gdb_stderr);
+ gdb_printf (gdb_stderr, _(" For instructions, see:\n%ps."),
+ styled_string (file_name_style.style (),
+ REPORT_BUGS_TO));
+ gdb_puts ("\n\n", gdb_stderr);
if (problem->should_dump_core == internal_problem_ask)
{
if (!can_dump_core_warn (LIMIT_MAX, reason.c_str ()))
dump_core_p = 0;
- else if (!filtered_printing_initialized ())
+ else if (!filtered_printing_initialized ()
+ || !readline_initialized (current_ui))
dump_core_p = 1;
else
{
@@ -656,10 +662,7 @@ void
print_sys_errmsg (const char *string, int errcode)
{
const char *err = safe_strerror (errcode);
- /* We want anything which was printed on stdout to come out first, before
- this message. */
- gdb_flush (gdb_stdout);
- fprintf_unfiltered (gdb_stderr, "%s: %s.\n", string, err);
+ gdb_printf (gdb_stderr, "%s: %s.\n", string, err);
}
/* Control C eventually causes this to be called, at a convenient time. */
@@ -693,6 +696,9 @@ quit (void)
void
maybe_quit (void)
{
+ if (!is_main_thread ())
+ return;
+
if (sync_quit_force_run)
quit ();
@@ -880,12 +886,12 @@ defaulted_query (const char *ctlstr, const char defchar, va_list args)
{
target_terminal::scoped_restore_terminal_state term_state;
target_terminal::ours_for_output ();
- wrap_here ("");
- vfprintf_filtered (gdb_stdout, ctlstr, args);
+ gdb_stdout->wrap_here (0);
+ gdb_vprintf (gdb_stdout, ctlstr, args);
- printf_filtered (_("(%s or %s) [answered %c; "
- "input not from terminal]\n"),
- y_string, n_string, def_answer);
+ gdb_printf (_("(%s or %s) [answered %c; "
+ "input not from terminal]\n"),
+ y_string, n_string, def_answer);
return def_value;
}
@@ -920,7 +926,7 @@ defaulted_query (const char *ctlstr, const char defchar, va_list args)
if (response == NULL) /* C-d */
{
- printf_filtered ("EOF [assumed %c]\n", def_answer);
+ gdb_printf ("EOF [assumed %c]\n", def_answer);
retval = def_value;
break;
}
@@ -947,15 +953,15 @@ defaulted_query (const char *ctlstr, const char defchar, va_list args)
break;
}
/* Invalid entries are not defaulted and require another selection. */
- printf_filtered (_("Please answer %s or %s.\n"),
- y_string, n_string);
+ gdb_printf (_("Please answer %s or %s.\n"),
+ y_string, n_string);
}
/* Add time spend in this routine to prompt_for_continue_wait_time. */
prompt_for_continue_wait_time += steady_clock::now () - prompt_started;
if (annotation_level > 1)
- printf_filtered (("\n\032\032post-query\n"));
+ gdb_printf (("\n\032\032post-query\n"));
return retval;
}
@@ -1077,7 +1083,7 @@ parse_escape (struct gdbarch *gdbarch, const char **string_ptr)
case '6':
case '7':
{
- int i = host_hex_value (c);
+ int i = fromhex (c);
int count = 0;
while (++count < 3)
{
@@ -1086,7 +1092,7 @@ parse_escape (struct gdbarch *gdbarch, const char **string_ptr)
{
(*string_ptr)++;
i *= 8;
- i += host_hex_value (c);
+ i += fromhex (c);
}
else
{
@@ -1136,9 +1142,9 @@ static void
show_lines_per_page (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file,
- _("Number of lines gdb thinks are in a page is %s.\n"),
- value);
+ gdb_printf (file,
+ _("Number of lines gdb thinks are in a page is %s.\n"),
+ value);
}
/* Number of chars per line or UINT_MAX if line folding is disabled. */
@@ -1147,10 +1153,10 @@ static void
show_chars_per_line (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file,
- _("Number of characters gdb thinks "
- "are in a line is %s.\n"),
- value);
+ gdb_printf (file,
+ _("Number of characters gdb thinks "
+ "are in a line is %s.\n"),
+ value);
}
/* Current count of lines printed on this page, chars on this line. */
@@ -1162,7 +1168,7 @@ static bool pagination_disabled_for_command;
/* Buffer and start column of buffered text, for doing smarter word-
wrapping. When someone calls wrap_here(), we start buffering output
- that comes through fputs_filtered(). If we see a newline, we just
+ that comes through gdb_puts(). If we see a newline, we just
spit it out and forget about the wrap_here(). If we see another
wrap_here(), we spit it out and remember the newer one. If we see
the end of the line, we spit out a newline, the indent, and then
@@ -1170,20 +1176,6 @@ static bool pagination_disabled_for_command;
static bool filter_initialized = false;
-/* Contains characters which are waiting to be output (they have
- already been counted in chars_printed). */
-static std::string wrap_buffer;
-
-/* String to indent by if the wrap occurs. Must not be NULL if wrap_column
- is non-zero. */
-static const char *wrap_indent;
-
-/* Column number on the screen where wrap_buffer begins, or 0 if wrapping
- is not in effect. */
-static int wrap_column;
-
-/* The style applied at the time that wrap_here was called. */
-static ui_file_style wrap_style;
/* Initialize the number of lines per page and chars per line. */
@@ -1315,7 +1307,6 @@ set_width (void)
if (chars_per_line == 0)
init_page_info ();
- wrap_buffer.clear ();
filter_initialized = true;
}
@@ -1344,55 +1335,28 @@ set_screen_width_and_height (int width, int height)
set_width ();
}
-/* The currently applied style. */
-
-static ui_file_style applied_style;
-
-/* Emit an ANSI style escape for STYLE. If STREAM is nullptr, emit to
- the wrap buffer; otherwise emit to STREAM. */
-
-static void
-emit_style_escape (const ui_file_style &style,
- struct ui_file *stream = nullptr)
+void
+pager_file::emit_style_escape (const ui_file_style &style)
{
- if (applied_style != style)
+ if (can_emit_style_escape () && style != m_applied_style)
{
- applied_style = style;
-
- if (stream == nullptr)
- wrap_buffer.append (style.to_ansi ());
+ m_applied_style = style;
+ if (m_paging)
+ m_stream->emit_style_escape (style);
else
- stream->puts (style.to_ansi ().c_str ());
+ m_wrap_buffer.append (style.to_ansi ());
}
}
-/* Set the current output style. This will affect future uses of the
- _filtered output functions. */
-
-static void
-set_output_style (struct ui_file *stream, const ui_file_style &style)
-{
- if (!stream->can_emit_style_escape ())
- return;
-
- /* Note that we may not pass STREAM here, when we want to emit to
- the wrap buffer, not directly to STREAM. */
- if (stream == gdb_stdout)
- stream = nullptr;
- emit_style_escape (style, stream);
-}
-
-/* See utils.h. */
+/* See pager.h. */
void
-reset_terminal_style (struct ui_file *stream)
+pager_file::reset_style ()
{
- if (stream->can_emit_style_escape ())
+ if (can_emit_style_escape ())
{
- /* Force the setting, regardless of what we think the setting
- might already be. */
- applied_style = ui_file_style ();
- wrap_buffer.append (applied_style.to_ansi ());
+ m_applied_style = ui_file_style ();
+ m_wrap_buffer.append (m_applied_style.to_ansi ());
}
}
@@ -1401,8 +1365,8 @@ reset_terminal_style (struct ui_file *stream)
telling users what to do in the prompt is more user-friendly than
expecting them to think of Ctrl-C/SIGINT. */
-static void
-prompt_for_continue (void)
+void
+pager_file::prompt_for_continue ()
{
char cont_prompt[120];
/* Used to add duration we waited for user to respond to
@@ -1411,12 +1375,13 @@ prompt_for_continue (void)
steady_clock::time_point prompt_started = steady_clock::now ();
bool disable_pagination = pagination_disabled_for_command;
+ scoped_restore save_paging = make_scoped_restore (&m_paging, true);
+
/* Clear the current styling. */
- if (gdb_stdout->can_emit_style_escape ())
- emit_style_escape (ui_file_style (), gdb_stdout);
+ m_stream->emit_style_escape (ui_file_style ());
if (annotation_level > 1)
- printf_unfiltered (("\n\032\032pre-prompt-for-continue\n"));
+ m_stream->puts (("\n\032\032pre-prompt-for-continue\n"));
strcpy (cont_prompt,
"--Type <RET> for more, q to quit, "
@@ -1439,7 +1404,7 @@ prompt_for_continue (void)
prompt_for_continue_wait_time += steady_clock::now () - prompt_started;
if (annotation_level > 1)
- printf_unfiltered (("\n\032\032post-prompt-for-continue\n"));
+ m_stream->puts (("\n\032\032post-prompt-for-continue\n"));
if (ignore != NULL)
{
@@ -1490,24 +1455,28 @@ reinitialize_more_filter (void)
pagination_disabled_for_command = false;
}
-/* Flush the wrap buffer to STREAM, if necessary. */
-
-static void
-flush_wrap_buffer (struct ui_file *stream)
+void
+pager_file::flush_wrap_buffer ()
{
- if (stream == gdb_stdout && !wrap_buffer.empty ())
+ if (!m_paging && !m_wrap_buffer.empty ())
{
- stream->puts (wrap_buffer.c_str ());
- wrap_buffer.clear ();
+ m_stream->puts (m_wrap_buffer.c_str ());
+ m_wrap_buffer.clear ();
}
}
+void
+pager_file::flush ()
+{
+ flush_wrap_buffer ();
+ m_stream->flush ();
+}
+
/* See utils.h. */
void
gdb_flush (struct ui_file *stream)
{
- flush_wrap_buffer (stream);
stream->flush ();
}
@@ -1519,65 +1488,42 @@ get_chars_per_line ()
return chars_per_line;
}
-/* Indicate that if the next sequence of characters overflows the line,
- a newline should be inserted here rather than when it hits the end.
- If INDENT is non-null, it is a string to be printed to indent the
- wrapped part on the next line. INDENT must remain accessible until
- the next call to wrap_here() or until a newline is printed through
- fputs_filtered().
-
- If the line is already overfull, we immediately print a newline and
- the indentation, and disable further wrapping.
-
- If we don't know the width of lines, but we know the page height,
- we must not wrap words, but should still keep track of newlines
- that were explicitly printed.
-
- INDENT should not contain tabs, as that will mess up the char count
- on the next line. FIXME.
-
- This routine is guaranteed to force out any output which has been
- squirreled away in the wrap_buffer, so wrap_here ((char *)0) can be
- used to force out output from the wrap_buffer. */
+/* See ui-file.h. */
void
-wrap_here (const char *indent)
+pager_file::wrap_here (int indent)
{
/* This should have been allocated, but be paranoid anyway. */
gdb_assert (filter_initialized);
- flush_wrap_buffer (gdb_stdout);
+ flush_wrap_buffer ();
if (chars_per_line == UINT_MAX) /* No line overflow checking. */
{
- wrap_column = 0;
+ m_wrap_column = 0;
}
else if (chars_printed >= chars_per_line)
{
- puts_filtered ("\n");
- if (indent != NULL)
- puts_filtered (indent);
- wrap_column = 0;
+ this->puts ("\n");
+ if (indent != 0)
+ this->puts (n_spaces (indent));
+ m_wrap_column = 0;
}
else
{
- wrap_column = chars_printed;
- if (indent == NULL)
- wrap_indent = "";
- else
- wrap_indent = indent;
- wrap_style = applied_style;
+ m_wrap_column = chars_printed;
+ m_wrap_indent = indent;
+ m_wrap_style = m_applied_style;
}
}
-/* Print input string to gdb_stdout, filtered, with wrap,
- arranging strings in columns of n chars. String can be
- right or left justified in the column. Never prints
- trailing spaces. String should never be longer than
- width. FIXME: this could be useful for the EXAMINE
- command, which currently doesn't tabulate very well. */
+/* Print input string to gdb_stdout arranging strings in columns of n
+ chars. String can be right or left justified in the column. Never
+ prints trailing spaces. String should never be longer than width.
+ FIXME: this could be useful for the EXAMINE command, which
+ currently doesn't tabulate very well. */
void
-puts_filtered_tabular (char *string, int width, int right)
+puts_tabular (char *string, int width, int right)
{
int spaces = 0;
int stringlen;
@@ -1586,13 +1532,13 @@ puts_filtered_tabular (char *string, int width, int right)
gdb_assert (chars_per_line > 0);
if (chars_per_line == UINT_MAX)
{
- fputs_filtered (string, gdb_stdout);
- fputs_filtered ("\n", gdb_stdout);
+ gdb_puts (string);
+ gdb_puts ("\n");
return;
}
if (((chars_printed - 1) / width + 2) * width >= chars_per_line)
- fputs_filtered ("\n", gdb_stdout);
+ gdb_puts ("\n");
if (width >= chars_per_line)
width = chars_per_line - 1;
@@ -1609,8 +1555,8 @@ puts_filtered_tabular (char *string, int width, int right)
while (spaces--)
spacebuf[spaces] = ' ';
- fputs_filtered (spacebuf, gdb_stdout);
- fputs_filtered (string, gdb_stdout);
+ gdb_puts (spacebuf);
+ gdb_puts (string);
}
@@ -1624,56 +1570,43 @@ begin_line (void)
{
if (chars_printed > 0)
{
- puts_filtered ("\n");
+ gdb_puts ("\n");
}
}
-
-/* Like fputs but if FILTER is true, pause after every screenful.
-
- Regardless of FILTER can wrap at points other than the final
- character of a line.
-
- Unlike fputs, fputs_maybe_filtered does not return a value.
- It is OK for LINEBUFFER to be NULL, in which case just don't print
- anything.
-
- Note that a longjmp to top level may occur in this routine (only if
- FILTER is true) (since prompt_for_continue may do so) so this
- routine should not be called when cleanups are not in place. */
-
-static void
-fputs_maybe_filtered (const char *linebuffer, struct ui_file *stream,
- int filter)
+void
+pager_file::puts (const char *linebuffer)
{
const char *lineptr;
if (linebuffer == 0)
return;
- /* Don't do any filtering if it is disabled. */
- if (!stream->can_page ()
- || stream != gdb_stdout
- || !pagination_enabled
- || pagination_disabled_for_command
- || batch_flag
+ /* Don't do any filtering or wrapping if both are disabled. */
+ if (batch_flag
|| (lines_per_page == UINT_MAX && chars_per_line == UINT_MAX)
|| top_level_interpreter () == NULL
|| top_level_interpreter ()->interp_ui_out ()->is_mi_like_p ())
{
- flush_wrap_buffer (stream);
- stream->puts (linebuffer);
+ flush_wrap_buffer ();
+ m_stream->puts (linebuffer);
return;
}
auto buffer_clearer
= make_scope_exit ([&] ()
{
- wrap_buffer.clear ();
- wrap_column = 0;
- wrap_indent = "";
+ m_wrap_buffer.clear ();
+ m_wrap_column = 0;
+ m_wrap_indent = 0;
});
+ /* If the user does "set height 1" then the pager will exhibit weird
+ behavior. This is pathological, though, so don't allow it. */
+ const unsigned int lines_allowed = (lines_per_page > 1
+ ? lines_per_page - 1
+ : 1);
+
/* Go through and output each character. Show line extension
when this is necessary; prompt user for new page when this is
necessary. */
@@ -1684,8 +1617,9 @@ fputs_maybe_filtered (const char *linebuffer, struct ui_file *stream,
/* Possible new page. Note that PAGINATION_DISABLED_FOR_COMMAND
might be set during this loop, so we must continue to check
it here. */
- if (filter && (lines_printed >= lines_per_page - 1)
- && !pagination_disabled_for_command)
+ if (pagination_enabled
+ && !pagination_disabled_for_command
+ && lines_printed >= lines_allowed)
prompt_for_continue ();
while (*lineptr && *lineptr != '\n')
@@ -1695,7 +1629,7 @@ fputs_maybe_filtered (const char *linebuffer, struct ui_file *stream,
/* Print a single line. */
if (*lineptr == '\t')
{
- wrap_buffer.push_back ('\t');
+ m_wrap_buffer.push_back ('\t');
/* Shifting right by 3 produces the number of tab stops
we have already passed, and then adding one and
shifting left 3 advances to the next tab stop. */
@@ -1705,20 +1639,20 @@ fputs_maybe_filtered (const char *linebuffer, struct ui_file *stream,
else if (*lineptr == '\033'
&& skip_ansi_escape (lineptr, &skip_bytes))
{
- wrap_buffer.append (lineptr, skip_bytes);
+ m_wrap_buffer.append (lineptr, skip_bytes);
/* Note that we don't consider this a character, so we
don't increment chars_printed here. */
lineptr += skip_bytes;
}
else if (*lineptr == '\r')
{
- wrap_buffer.push_back (*lineptr);
+ m_wrap_buffer.push_back (*lineptr);
chars_printed = 0;
lineptr++;
}
else
{
- wrap_buffer.push_back (*lineptr);
+ m_wrap_buffer.push_back (*lineptr);
chars_printed++;
lineptr++;
}
@@ -1733,12 +1667,12 @@ fputs_maybe_filtered (const char *linebuffer, struct ui_file *stream,
prompt is given; and to avoid emitting style
sequences in the middle of a run of text, we track
this as well. */
- ui_file_style save_style = applied_style;
+ ui_file_style save_style = m_applied_style;
bool did_paginate = false;
chars_printed = 0;
lines_printed++;
- if (wrap_column)
+ if (m_wrap_column)
{
/* We are about to insert a newline at an historic
location in the WRAP_BUFFER. Before we do we want to
@@ -1746,77 +1680,60 @@ fputs_maybe_filtered (const char *linebuffer, struct ui_file *stream,
need to insert an escape sequence we must restore the
current applied style to how it was at the WRAP_COLUMN
location. */
- applied_style = wrap_style;
- if (stream->can_emit_style_escape ())
- emit_style_escape (ui_file_style (), stream);
+ m_applied_style = m_wrap_style;
+ m_stream->emit_style_escape (ui_file_style ());
/* If we aren't actually wrapping, don't output
newline -- if chars_per_line is right, we
probably just overflowed anyway; if it's wrong,
let us keep going. */
- /* XXX: The ideal thing would be to call
- 'stream->putc' here, but we can't because it
- currently calls 'fputc_unfiltered', which ends up
- calling us, which generates an infinite
- recursion. */
- stream->puts ("\n");
+ m_stream->puts ("\n");
}
else
- flush_wrap_buffer (stream);
+ this->flush_wrap_buffer ();
/* Possible new page. Note that
PAGINATION_DISABLED_FOR_COMMAND might be set during
this loop, so we must continue to check it here. */
- if (lines_printed >= lines_per_page - 1
- && !pagination_disabled_for_command)
+ if (pagination_enabled
+ && !pagination_disabled_for_command
+ && lines_printed >= lines_allowed)
{
prompt_for_continue ();
did_paginate = true;
}
/* Now output indentation and wrapped string. */
- if (wrap_column)
+ if (m_wrap_column)
{
- stream->puts (wrap_indent);
+ m_stream->puts (n_spaces (m_wrap_indent));
/* Having finished inserting the wrapping we should
restore the style as it was at the WRAP_COLUMN. */
- if (stream->can_emit_style_escape ())
- emit_style_escape (wrap_style, stream);
+ m_stream->emit_style_escape (m_wrap_style);
/* The WRAP_BUFFER will still contain content, and that
content might set some alternative style. Restore
APPLIED_STYLE as it was before we started wrapping,
this reflects the current style for the last character
in WRAP_BUFFER. */
- applied_style = save_style;
+ m_applied_style = save_style;
- /* FIXME, this strlen is what prevents wrap_indent from
- containing tabs. However, if we recurse to print it
- and count its chars, we risk trouble if wrap_indent is
- longer than (the user settable) chars_per_line.
- Note also that this can set chars_printed > chars_per_line
+ /* Note that this can set chars_printed > chars_per_line
if we are printing a long string. */
- chars_printed = strlen (wrap_indent)
- + (save_chars - wrap_column);
- wrap_column = 0; /* And disable fancy wrap */
+ chars_printed = m_wrap_indent + (save_chars - m_wrap_column);
+ m_wrap_column = 0; /* And disable fancy wrap */
}
- else if (did_paginate && stream->can_emit_style_escape ())
- emit_style_escape (save_style, stream);
+ else if (did_paginate)
+ m_stream->emit_style_escape (save_style);
}
}
if (*lineptr == '\n')
{
chars_printed = 0;
- wrap_here ((char *) 0); /* Spit out chars, cancel
- further wraps. */
+ wrap_here (0); /* Spit out chars, cancel further wraps. */
lines_printed++;
- /* XXX: The ideal thing would be to call
- 'stream->putc' here, but we can't because it
- currently calls 'fputc_unfiltered', which ends up
- calling us, which generates an infinite
- recursion. */
- stream->puts ("\n");
+ m_stream->puts ("\n");
lineptr++;
}
}
@@ -1825,37 +1742,64 @@ fputs_maybe_filtered (const char *linebuffer, struct ui_file *stream,
}
void
-fputs_filtered (const char *linebuffer, struct ui_file *stream)
+pager_file::write (const char *buf, long length_buf)
{
- fputs_maybe_filtered (linebuffer, stream, 1);
+ /* We have to make a string here because the pager uses
+ skip_ansi_escape, which requires NUL-termination. */
+ std::string str (buf, length_buf);
+ this->puts (str.c_str ());
}
-void
-fputs_unfiltered (const char *linebuffer, struct ui_file *stream)
+#if GDB_SELF_TEST
+
+/* Test that disabling the pager does not also disable word
+ wrapping. */
+
+static void
+test_pager ()
{
- fputs_maybe_filtered (linebuffer, stream, 0);
+ string_file *strfile = new string_file ();
+ pager_file pager (strfile);
+
+ /* Make sure the pager is disabled. */
+ scoped_restore save_enabled
+ = make_scoped_restore (&pagination_enabled, false);
+ scoped_restore save_disabled
+ = make_scoped_restore (&pagination_disabled_for_command, false);
+ scoped_restore save_batch
+ = make_scoped_restore (&batch_flag, false);
+ scoped_restore save_lines
+ = make_scoped_restore (&lines_per_page, 50);
+ /* Make it easy to word wrap. */
+ scoped_restore save_chars
+ = make_scoped_restore (&chars_per_line, 15);
+ scoped_restore save_printed
+ = make_scoped_restore (&chars_printed, 0);
+
+ pager.puts ("aaaaaaaaaaaa");
+ pager.wrap_here (2);
+ pager.puts ("bbbbbbbbbbbb\n");
+
+ SELF_CHECK (strfile->string () == "aaaaaaaaaaaa\n bbbbbbbbbbbb\n");
}
-/* See utils.h. */
+#endif /* GDB_SELF_TEST */
void
-fputs_styled (const char *linebuffer, const ui_file_style &style,
- struct ui_file *stream)
+gdb_puts (const char *linebuffer, struct ui_file *stream)
{
- set_output_style (stream, style);
- fputs_maybe_filtered (linebuffer, stream, 1);
- set_output_style (stream, ui_file_style ());
+ stream->puts (linebuffer);
}
/* See utils.h. */
void
-fputs_styled_unfiltered (const char *linebuffer, const ui_file_style &style,
- struct ui_file *stream)
+fputs_styled (const char *linebuffer, const ui_file_style &style,
+ struct ui_file *stream)
{
- set_output_style (stream, style);
- fputs_maybe_filtered (linebuffer, stream, 0);
- set_output_style (stream, ui_file_style ());
+ stream->emit_style_escape (style);
+ gdb_puts (linebuffer, stream);
+ stream->emit_style_escape (ui_file_style ());
}
/* See utils.h. */
@@ -1873,157 +1817,58 @@ fputs_highlighted (const char *str, const compiled_regex &highlight,
/* Output the part before pmatch with current style. */
while (pmatch.rm_so > 0)
{
- fputc_filtered (*str, stream);
+ gdb_putc (*str, stream);
pmatch.rm_so--;
str++;
}
/* Output pmatch with the highlight style. */
- set_output_style (stream, highlight_style.style ());
+ stream->emit_style_escape (highlight_style.style ());
while (n_highlight > 0)
{
- fputc_filtered (*str, stream);
+ gdb_putc (*str, stream);
n_highlight--;
str++;
}
- set_output_style (stream, ui_file_style ());
+ stream->emit_style_escape (ui_file_style ());
}
/* Output the trailing part of STR not matching HIGHLIGHT. */
if (*str)
- fputs_filtered (str, stream);
-}
-
-int
-putchar_unfiltered (int c)
-{
- return fputc_unfiltered (c, gdb_stdout);
-}
-
-/* Write character C to gdb_stdout using GDB's paging mechanism and return C.
- May return nonlocally. */
-
-int
-putchar_filtered (int c)
-{
- return fputc_filtered (c, gdb_stdout);
-}
-
-int
-fputc_unfiltered (int c, struct ui_file *stream)
-{
- char buf[2];
-
- buf[0] = c;
- buf[1] = 0;
- fputs_unfiltered (buf, stream);
- return c;
-}
-
-int
-fputc_filtered (int c, struct ui_file *stream)
-{
- char buf[2];
-
- buf[0] = c;
- buf[1] = 0;
- fputs_filtered (buf, stream);
- return c;
+ gdb_puts (str, stream);
}
-/* Print a variable number of ARGS using format FORMAT. If this
- information is going to put the amount written (since the last call
- to REINITIALIZE_MORE_FILTER or the last page break) over the page size,
- call prompt_for_continue to get the users permission to continue.
-
- Unlike fprintf, this function does not return a value.
-
- We implement three variants, vfprintf (takes a vararg list and stream),
- fprintf (takes a stream to write on), and printf (the usual).
-
- Note also that this may throw a quit (since prompt_for_continue may
- do so). */
-
-static void
-vfprintf_maybe_filtered (struct ui_file *stream, const char *format,
- va_list args, bool filter)
-{
- ui_out_flags flags = disallow_ui_out_field;
- if (!filter)
- flags |= unfiltered_output;
- cli_ui_out (stream, flags).vmessage (applied_style, format, args);
-}
-
-
void
-vfprintf_filtered (struct ui_file *stream, const char *format, va_list args)
+gdb_putc (int c)
{
- vfprintf_maybe_filtered (stream, format, args, true);
+ return gdb_stdout->putc (c);
}
void
-vfprintf_unfiltered (struct ui_file *stream, const char *format, va_list args)
+gdb_putc (int c, struct ui_file *stream)
{
- if (debug_timestamp && stream == gdb_stdlog)
- {
- static bool needs_timestamp = true;
-
- /* Print timestamp if previous print ended with a \n. */
- if (needs_timestamp)
- {
- using namespace std::chrono;
-
- steady_clock::time_point now = steady_clock::now ();
- seconds s = duration_cast<seconds> (now.time_since_epoch ());
- microseconds us = duration_cast<microseconds> (now.time_since_epoch () - s);
- std::string timestamp = string_printf ("%ld.%06ld ",
- (long) s.count (),
- (long) us.count ());
- fputs_unfiltered (timestamp.c_str (), stream);
- }
-
- /* Print the message. */
- string_file sfile;
- cli_ui_out (&sfile, 0).vmessage (ui_file_style (), format, args);
- std::string linebuffer = std::move (sfile.string ());
- fputs_unfiltered (linebuffer.c_str (), stream);
-
- size_t len = linebuffer.length ();
- needs_timestamp = (len > 0 && linebuffer[len - 1] == '\n');
- }
- else
- vfprintf_maybe_filtered (stream, format, args, false);
-}
-
-void
-vprintf_filtered (const char *format, va_list args)
-{
- vfprintf_filtered (gdb_stdout, format, args);
+ return stream->putc (c);
}
void
-vprintf_unfiltered (const char *format, va_list args)
+gdb_vprintf (struct ui_file *stream, const char *format, va_list args)
{
- vfprintf_unfiltered (gdb_stdout, format, args);
+ stream->vprintf (format, args);
}
void
-fprintf_filtered (struct ui_file *stream, const char *format, ...)
+gdb_vprintf (const char *format, va_list args)
{
- va_list args;
-
- va_start (args, format);
- vfprintf_filtered (stream, format, args);
- va_end (args);
+ gdb_stdout->vprintf (format, args);
}
void
-fprintf_unfiltered (struct ui_file *stream, const char *format, ...)
+gdb_printf (struct ui_file *stream, const char *format, ...)
{
va_list args;
va_start (args, format);
- vfprintf_unfiltered (stream, format, args);
+ gdb_vprintf (stream, format, args);
va_end (args);
}
@@ -2035,46 +1880,20 @@ fprintf_styled (struct ui_file *stream, const ui_file_style &style,
{
va_list args;
- set_output_style (stream, style);
+ stream->emit_style_escape (style);
va_start (args, format);
- vfprintf_filtered (stream, format, args);
+ gdb_vprintf (stream, format, args);
va_end (args);
- set_output_style (stream, ui_file_style ());
-}
-
-/* See utils.h. */
-
-void
-vfprintf_styled (struct ui_file *stream, const ui_file_style &style,
- const char *format, va_list args)
-{
- set_output_style (stream, style);
- vfprintf_filtered (stream, format, args);
- set_output_style (stream, ui_file_style ());
-}
-
-/* See utils.h. */
-
-void
-vfprintf_styled_no_gdbfmt (struct ui_file *stream, const ui_file_style &style,
- bool filter, const char *format, va_list args)
-{
- std::string str = string_vprintf (format, args);
- if (!str.empty ())
- {
- set_output_style (stream, style);
- fputs_maybe_filtered (str.c_str (), stream, filter);
- set_output_style (stream, ui_file_style ());
- }
+ stream->emit_style_escape (ui_file_style ());
}
void
-printf_filtered (const char *format, ...)
+gdb_printf (const char *format, ...)
{
va_list args;
va_start (args, format);
- vfprintf_filtered (gdb_stdout, format, args);
+ gdb_vprintf (gdb_stdout, format, args);
va_end (args);
}
@@ -2085,7 +1904,9 @@ printf_unfiltered (const char *format, ...)
va_list args;
va_start (args, format);
- vfprintf_unfiltered (gdb_stdout, format, args);
+ string_file file (gdb_stdout->can_emit_style_escape ());
+ file.vprintf (format, args);
+ gdb_stdout->puts_unfiltered (file.string ().c_str ());
va_end (args);
}
@@ -2095,15 +1916,9 @@ printf_unfiltered (const char *format, ...)
This one doesn't, and had better not! */
void
-puts_filtered (const char *string)
-{
- fputs_filtered (string, gdb_stdout);
-}
-
-void
-puts_unfiltered (const char *string)
+gdb_puts (const char *string)
{
- fputs_unfiltered (string, gdb_stdout);
+ gdb_stdout->puts (string);
}
/* Return a pointer to N spaces and a null. The pointer is good
@@ -2130,34 +1945,34 @@ n_spaces (int n)
/* Print N spaces. */
void
-print_spaces_filtered (int n, struct ui_file *stream)
+print_spaces (int n, struct ui_file *stream)
{
- fputs_filtered (n_spaces (n), stream);
+ gdb_puts (n_spaces (n), stream);
}
/* C++/ObjC demangler stuff. */
-/* fprintf_symbol_filtered attempts to demangle NAME, a symbol in language
+/* fprintf_symbol attempts to demangle NAME, a symbol in language
LANG, using demangling args ARG_MODE, and print it filtered to STREAM.
If the name is not mangled, or the language for the name is unknown, or
demangling is off, the name is printed in its "raw" form. */
void
-fprintf_symbol_filtered (struct ui_file *stream, const char *name,
- enum language lang, int arg_mode)
+fprintf_symbol (struct ui_file *stream, const char *name,
+ enum language lang, int arg_mode)
{
if (name != NULL)
{
/* If user wants to see raw output, no problem. */
if (!demangle)
{
- fputs_filtered (name, stream);
+ gdb_puts (name, stream);
}
else
{
gdb::unique_xmalloc_ptr<char> demangled
= language_demangle (language_def (lang), name, arg_mode);
- fputs_filtered (demangled ? demangled.get () : name, stream);
+ gdb_puts (demangled ? demangled.get () : name, stream);
}
}
}
@@ -2278,13 +2093,45 @@ skip_abi_tag (const char **name)
return false;
}
+/* If *NAME points at a template parameter list, skip it and return true.
+ Otherwise do nothing and return false. */
+
+static bool
+skip_template_parameter_list (const char **name)
+{
+ const char *p = *name;
+
+ if (*p == '<')
+ {
+ const char *template_param_list_end = find_toplevel_char (p + 1, '>');
+
+ if (template_param_list_end == NULL)
+ return false;
+
+ p = template_param_list_end + 1;
+
+ /* Skip any whitespace that might occur after the closing of the
+ parameter list, but only if it is the end of parameter list. */
+ const char *q = p;
+ while (ISSPACE (*q))
+ ++q;
+ if (*q == '>')
+ p = q;
+ *name = p;
+ return true;
+ }
+
+ return false;
+}
+
/* See utils.h. */
int
strncmp_iw_with_mode (const char *string1, const char *string2,
size_t string2_len, strncmp_iw_mode mode,
enum language language,
- completion_match_for_lcd *match_for_lcd)
+ completion_match_for_lcd *match_for_lcd,
+ bool ignore_template_params)
{
const char *string1_start = string1;
const char *end_str2 = string2 + string2_len;
@@ -2334,6 +2181,48 @@ strncmp_iw_with_mode (const char *string1, const char *string2,
string1++;
}
+ /* Skip template parameters in STRING1 if STRING2 does not contain
+ any. E.g.:
+
+ Case 1: User is looking for all functions named "foo".
+ string1: foo <...> (...)
+ string2: foo
+
+ Case 2: User is looking for all methods named "foo" in all template
+ class instantiations.
+ string1: Foo<...>::foo <...> (...)
+ string2: Foo::foo (...)
+
+ Case 3: User is looking for a specific overload of a template
+ function or method.
+ string1: foo<...>
+ string2: foo(...)
+
+ Case 4: User is looking for a specific overload of a specific
+ template instantiation.
+ string1: foo<A> (...)
+ string2: foo<B> (...)
+
+ Case 5: User is looking wild parameter match.
+ string1: foo<A<a<b<...> > > > (...)
+ string2: foo<A
+ */
+ if (language == language_cplus && ignore_template_params
+ && *string1 == '<' && *string2 != '<')
+ {
+ /* Skip any parameter list in STRING1. */
+ const char *template_start = string1;
+
+ if (skip_template_parameter_list (&string1))
+ {
+ /* Don't mark the parameter list ignored if the user didn't
+ try to ignore it. [Case #5 above] */
+ if (*string2 != '\0'
+ && match_for_lcd != NULL && template_start != string1)
+ match_for_lcd->mark_ignored_range (template_start, string1);
+ }
+ }
+
if (*string1 == '\0' || string2 == end_str2)
break;
@@ -2442,6 +2331,12 @@ strncmp_iw_with_mode (const char *string1, const char *string2,
break;
if (*string1 == '(' || *string2 == '(')
break;
+
+ /* If STRING1 or STRING2 starts with a template
+ parameter list, break out of operator processing. */
+ skip_ws (string1, string2, end_str2);
+ if (*string1 == '<' || *string2 == '<')
+ break;
}
continue;
@@ -2509,6 +2404,569 @@ strncmp_iw_with_mode (const char *string1, const char *string2,
return 1;
}
+#if GDB_SELF_TEST
+
+/* Unit tests for strncmp_iw_with_mode. */
+
+#define CHECK_MATCH_LM(S1, S2, MODE, LANG, LCD) \
+ SELF_CHECK (strncmp_iw_with_mode ((S1), (S2), strlen ((S2)), \
+ strncmp_iw_mode::MODE, \
+ (LANG), (LCD)) == 0)
+
+#define CHECK_MATCH_LANG(S1, S2, MODE, LANG) \
+ CHECK_MATCH_LM ((S1), (S2), MODE, (LANG), nullptr)
+
+#define CHECK_MATCH(S1, S2, MODE) \
+ CHECK_MATCH_LANG ((S1), (S2), MODE, language_minimal)
+
+#define CHECK_NO_MATCH_LM(S1, S2, MODE, LANG, LCD) \
+ SELF_CHECK (strncmp_iw_with_mode ((S1), (S2), strlen ((S2)), \
+ strncmp_iw_mode::MODE, \
+ (LANG)) != 0)
+
+#define CHECK_NO_MATCH_LANG(S1, S2, MODE, LANG) \
+ CHECK_NO_MATCH_LM ((S1), (S2), MODE, (LANG), nullptr)
+
+#define CHECK_NO_MATCH(S1, S2, MODE) \
+ CHECK_NO_MATCH_LANG ((S1), (S2), MODE, language_minimal)
+
+static void
+check_scope_operator (enum language lang)
+{
+ CHECK_MATCH_LANG ("::", "::", NORMAL, lang);
+ CHECK_MATCH_LANG ("::foo", "::", NORMAL, lang);
+ CHECK_MATCH_LANG ("::foo", "::foo", NORMAL, lang);
+ CHECK_MATCH_LANG (" :: foo ", "::foo", NORMAL, lang);
+ CHECK_MATCH_LANG ("a::b", "a ::b", NORMAL, lang);
+ CHECK_MATCH_LANG ("a::b", "a\t::b", NORMAL, lang);
+ CHECK_MATCH_LANG ("a::b", "a \t::b", NORMAL, lang);
+ CHECK_MATCH_LANG ("a::b", "a\t ::b", NORMAL, lang);
+ CHECK_MATCH_LANG ("a::b", "a:: b", NORMAL, lang);
+ CHECK_MATCH_LANG ("a::b", "a::\tb", NORMAL, lang);
+ CHECK_MATCH_LANG ("a::b", "a:: \tb", NORMAL, lang);
+ CHECK_MATCH_LANG ("a::b", "a::\t b", NORMAL, lang);
+ CHECK_MATCH_LANG ("a::b", "a :: b", NORMAL, lang);
+ CHECK_MATCH_LANG ("a::b", "a ::\tb", NORMAL, lang);
+ CHECK_MATCH_LANG ("a::b", "a\t:: b", NORMAL, lang);
+ CHECK_MATCH_LANG ("a::b", "a \t::\t b", NORMAL, lang);
+ CHECK_MATCH_LANG ("a ::b", "a::b", NORMAL, lang);
+ CHECK_MATCH_LANG ("a\t::b", "a::b", NORMAL, lang);
+ CHECK_MATCH_LANG ("a \t::b", "a::b", NORMAL, lang);
+ CHECK_MATCH_LANG ("a\t ::b", "a::b", NORMAL, lang);
+ CHECK_MATCH_LANG ("a:: b", "a::b", NORMAL, lang);
+ CHECK_MATCH_LANG ("a::\tb", "a::b", NORMAL, lang);
+ CHECK_MATCH_LANG ("a:: \tb", "a::b", NORMAL, lang);
+ CHECK_MATCH_LANG ("a::\t b", "a::b", NORMAL, lang);
+ CHECK_MATCH_LANG ("a :: b", "a::b", NORMAL, lang);
+ CHECK_MATCH_LANG ("a ::\tb", "a::b", NORMAL, lang);
+ CHECK_MATCH_LANG ("a\t:: b", "a::b", NORMAL, lang);
+ CHECK_MATCH_LANG ("a \t::\t b", "a::b", NORMAL, lang);
+ CHECK_MATCH_LANG ("a::b::c", "a::b::c", NORMAL, lang);
+ CHECK_MATCH_LANG (" a:: b:: c", "a::b::c", NORMAL, lang);
+ CHECK_MATCH_LANG ("a::b::c", " a:: b:: c", NORMAL, lang);
+ CHECK_MATCH_LANG ("a ::b ::c", "a::b::c", NORMAL, lang);
+ CHECK_MATCH_LANG ("a::b::c", "a :: b:: c", NORMAL, lang);
+ CHECK_MATCH_LANG ("\ta::\tb::\tc", "\ta::\tb::\tc", NORMAL, lang);
+ CHECK_MATCH_LANG ("a\t::b\t::c\t", "a\t::b\t::c\t", NORMAL, lang);
+ CHECK_MATCH_LANG (" \ta:: \tb:: \tc", " \ta:: \tb:: \tc", NORMAL, lang);
+ CHECK_MATCH_LANG ("\t a::\t b::\t c", "\t a::\t b::\t c", NORMAL, lang);
+ CHECK_MATCH_LANG ("a::b::c", "\ta::\tb::\tc", NORMAL, lang);
+ CHECK_MATCH_LANG ("a::b::c", "a\t::b\t::c\t", NORMAL, lang);
+ CHECK_MATCH_LANG ("a::b::c", " \ta:: \tb:: \tc", NORMAL, lang);
+ CHECK_MATCH_LANG ("a::b::c", "\t a::\t b::\t c", NORMAL, lang);
+ CHECK_MATCH_LANG ("\ta::\tb::\tc", "a::b::c", NORMAL, lang);
+ CHECK_MATCH_LANG ("a\t::b\t::c\t", "a::b::c", NORMAL, lang);
+ CHECK_MATCH_LANG (" \ta:: \tb:: \tc", "a::b::c", NORMAL, lang);
+ CHECK_MATCH_LANG ("\t a::\t b::\t c", "a::b::c", NORMAL, lang);
+ CHECK_MATCH_LANG ("a :: b:: c\t", "\ta :: b\t:: c\t\t", NORMAL, lang);
+ CHECK_MATCH_LANG (" a::\t \t b:: c\t", "\ta ::b:: c\t\t",
+ NORMAL, lang);
+ CHECK_MATCH_LANG ("a :: b :: \t\t\tc\t",
+ "\t\t\t\ta :: \t\t\t b \t\t::c",
+ NORMAL, lang);
+ CHECK_MATCH_LANG ("a::b()", "a", NORMAL, lang);
+ CHECK_MATCH_LANG ("a::b()", "a::", NORMAL, lang);
+ CHECK_MATCH_LANG ("a::b()", "a::b", NORMAL, lang);
+ CHECK_MATCH_LANG ("a::b(a)", "a", NORMAL, lang);
+ CHECK_MATCH_LANG ("a::b(a)", "a::", NORMAL, lang);
+ CHECK_MATCH_LANG ("a::b(a)", "a::b", NORMAL, lang);
+ CHECK_MATCH_LANG ("a::b(a,b)", "a", NORMAL, lang);
+ CHECK_MATCH_LANG ("a::b(a,b)", "a::", NORMAL, lang);
+ CHECK_MATCH_LANG ("a::b(a,b)", "a::b", NORMAL, lang);
+ CHECK_MATCH_LANG ("a::b(a,b,c)", "a", NORMAL, lang);
+ CHECK_MATCH_LANG ("a::b(a,b,c)", "a::", NORMAL, lang);
+ CHECK_MATCH_LANG ("a::b(a,b,c)", "a::b", NORMAL, lang);
+
+ CHECK_NO_MATCH_LANG ("a::", "::a", NORMAL, lang);
+ CHECK_NO_MATCH_LANG ("::a", "::a()", NORMAL, lang);
+ CHECK_NO_MATCH_LANG ("::", "::a", NORMAL, lang);
+ CHECK_NO_MATCH_LANG ("a:::b", "a::b", NORMAL, lang);
+ CHECK_NO_MATCH_LANG ("a::b()", "a::b(a)", NORMAL, lang);
+ CHECK_NO_MATCH_LANG ("a::b(a)", "a::b()", NORMAL, lang);
+ CHECK_NO_MATCH_LANG ("a::b(a,b)", "a::b(a,a)", NORMAL, lang);
+ CHECK_NO_MATCH_LANG ("a::b", "a()", NORMAL, lang);
+ CHECK_NO_MATCH_LANG ("a::b", "a::()", NORMAL, lang);
+ CHECK_NO_MATCH_LANG ("a::b", "a::b()", NORMAL, lang);
+ CHECK_NO_MATCH_LANG ("a::b", "a(a)", NORMAL, lang);
+ CHECK_NO_MATCH_LANG ("a::b", "a::(a)", NORMAL, lang);
+ CHECK_NO_MATCH_LANG ("a::b", "a::b()", NORMAL, lang);
+ CHECK_NO_MATCH_LANG ("a::b", "a(a,b)", NORMAL, lang);
+ CHECK_NO_MATCH_LANG ("a::b", "a::(a,b)", NORMAL, lang);
+ CHECK_NO_MATCH_LANG ("a::b", "a::b(a,b)", NORMAL, lang);
+ CHECK_NO_MATCH_LANG ("a::b", "a(a,b,c)", NORMAL, lang);
+ CHECK_NO_MATCH_LANG ("a::b", "a::(a,b,c)", NORMAL, lang);
+ CHECK_NO_MATCH_LANG ("a::b", "a::b(a,b,c)", NORMAL, lang);
+}
+
+/* Callback for strncmp_iw_with_mode unit tests. */
+
+static void
+strncmp_iw_with_mode_tests ()
+{
+ /* Some of the following tests are nonsensical, but could be input by a
+ deranged script (or user). */
+
+ /* strncmp_iw_mode::NORMAL: strcmp()-like but ignore any whitespace... */
+
+ CHECK_MATCH ("", "", NORMAL);
+ CHECK_MATCH ("foo", "foo", NORMAL);
+ CHECK_MATCH (" foo", "foo", NORMAL);
+ CHECK_MATCH ("foo ", "foo", NORMAL);
+ CHECK_MATCH (" foo ", "foo", NORMAL);
+ CHECK_MATCH (" foo", "foo", NORMAL);
+ CHECK_MATCH ("foo ", "foo", NORMAL);
+ CHECK_MATCH (" foo ", "foo", NORMAL);
+ CHECK_MATCH ("\tfoo", "foo", NORMAL);
+ CHECK_MATCH ("foo\t", "foo", NORMAL);
+ CHECK_MATCH ("\tfoo\t", "foo", NORMAL);
+ CHECK_MATCH (" \tfoo \t", "foo", NORMAL);
+ CHECK_MATCH ("\t foo\t ", "foo", NORMAL);
+ CHECK_MATCH ("\t \t \t\t\t\t foo\t\t\t \t\t \t \t \t \t ",
+ "foo", NORMAL);
+ CHECK_MATCH ("foo",
+ "\t \t \t\t\t\t foo\t\t\t \t\t \t \t \t \t ",
+ NORMAL);
+ CHECK_MATCH ("foo bar", "foo", NORMAL);
+ CHECK_NO_MATCH ("foo", "bar", NORMAL);
+ CHECK_NO_MATCH ("foo bar", "foobar", NORMAL);
+ CHECK_NO_MATCH (" foo ", "bar", NORMAL);
+ CHECK_NO_MATCH ("foo", " bar ", NORMAL);
+ CHECK_NO_MATCH (" \t\t foo\t\t ", "\t \t \tbar\t", NORMAL);
+ CHECK_NO_MATCH ("@!%&", "@!%&foo", NORMAL);
+
+ /* ... and function parameters in STRING1. */
+ CHECK_MATCH ("foo()", "foo()", NORMAL);
+ CHECK_MATCH ("foo ()", "foo()", NORMAL);
+ CHECK_MATCH ("foo ()", "foo()", NORMAL);
+ CHECK_MATCH ("foo\t()", "foo()", NORMAL);
+ CHECK_MATCH ("foo\t ()", "foo()", NORMAL);
+ CHECK_MATCH ("foo \t()", "foo()", NORMAL);
+ CHECK_MATCH ("foo()", "foo ()", NORMAL);
+ CHECK_MATCH ("foo()", "foo ()", NORMAL);
+ CHECK_MATCH ("foo()", "foo\t()", NORMAL);
+ CHECK_MATCH ("foo()", "foo\t ()", NORMAL);
+ CHECK_MATCH ("foo()", "foo \t()", NORMAL);
+ CHECK_MATCH ("foo()", "foo()", NORMAL);
+ CHECK_MATCH ("foo ()", "foo ()", NORMAL);
+ CHECK_MATCH ("foo ()", "foo ()", NORMAL);
+ CHECK_MATCH ("foo\t()", "foo\t()", NORMAL);
+ CHECK_MATCH ("foo\t ()", "foo\t ()", NORMAL);
+ CHECK_MATCH ("foo \t()", "foo \t()", NORMAL);
+ CHECK_MATCH ("foo(a)", "foo(a)", NORMAL);
+ CHECK_MATCH ("foo( a)", "foo(a)", NORMAL);
+ CHECK_MATCH ("foo(a )", "foo(a)", NORMAL);
+ CHECK_MATCH ("foo(\ta)", "foo(a)", NORMAL);
+ CHECK_MATCH ("foo(a\t)", "foo(a)", NORMAL);
+ CHECK_MATCH ("foo(\t a)", "foo(a)", NORMAL);
+ CHECK_MATCH ("foo( \ta)", "foo(a)", NORMAL);
+ CHECK_MATCH ("foo(a\t )", "foo(a)", NORMAL);
+ CHECK_MATCH ("foo(a \t)", "foo(a)", NORMAL);
+ CHECK_MATCH ("foo( a )", "foo(a)", NORMAL);
+ CHECK_MATCH ("foo(\ta\t)", "foo(a)", NORMAL);
+ CHECK_MATCH ("foo(\t a\t )", "foo(a)", NORMAL);
+ CHECK_MATCH ("foo( \ta \t)", "foo(a)", NORMAL);
+ CHECK_MATCH ("foo(a)", "foo( a)", NORMAL);
+ CHECK_MATCH ("foo(a)", "foo(a )", NORMAL);
+ CHECK_MATCH ("foo(a)", "foo(\ta)", NORMAL);
+ CHECK_MATCH ("foo(a)", "foo(a\t)", NORMAL);
+ CHECK_MATCH ("foo(a)", "foo(\t a)", NORMAL);
+ CHECK_MATCH ("foo(a)", "foo( \ta)", NORMAL);
+ CHECK_MATCH ("foo(a)", "foo(a\t )", NORMAL);
+ CHECK_MATCH ("foo(a)", "foo(a \t)", NORMAL);
+ CHECK_MATCH ("foo(a)", "foo( a )", NORMAL);
+ CHECK_MATCH ("foo(a)", "foo(\ta\t)", NORMAL);
+ CHECK_MATCH ("foo(a)", "foo(\t a\t )", NORMAL);
+ CHECK_MATCH ("foo(a)", "foo( \ta \t)", NORMAL);
+ CHECK_MATCH ("foo(a,b)", "foo(a,b)", NORMAL);
+ CHECK_MATCH ("foo(a ,b)", "foo(a,b)", NORMAL);
+ CHECK_MATCH ("foo(a\t,b)", "foo(a,b)", NORMAL);
+ CHECK_MATCH ("foo(a,\tb)", "foo(a,b)", NORMAL);
+ CHECK_MATCH ("foo(a\t,\tb)", "foo(a,b)", NORMAL);
+ CHECK_MATCH ("foo(a \t,b)", "foo(a,b)", NORMAL);
+ CHECK_MATCH ("foo(a\t ,b)", "foo(a,b)", NORMAL);
+ CHECK_MATCH ("foo(a,\tb)", "foo(a,b)", NORMAL);
+ CHECK_MATCH ("foo(a, \tb)", "foo(a,b)", NORMAL);
+ CHECK_MATCH ("foo(a,\t b)", "foo(a,b)", NORMAL);
+ CHECK_MATCH ("foo(a,b)", "foo(a ,b)", NORMAL);
+ CHECK_MATCH ("foo(a,b)", "foo(a\t,b)", NORMAL);
+ CHECK_MATCH ("foo(a,b)", "foo(a,\tb)", NORMAL);
+ CHECK_MATCH ("foo(a,b)", "foo(a\t,\tb)", NORMAL);
+ CHECK_MATCH ("foo(a,b)", "foo(a \t,b)", NORMAL);
+ CHECK_MATCH ("foo(a,b)", "foo(a\t ,b)", NORMAL);
+ CHECK_MATCH ("foo(a,b)", "foo(a,\tb)", NORMAL);
+ CHECK_MATCH ("foo(a,b)", "foo(a, \tb)", NORMAL);
+ CHECK_MATCH ("foo(a,b)", "foo(a,\t b)", NORMAL);
+ CHECK_MATCH ("foo(a,b,c,d)", "foo(a,b,c,d)", NORMAL);
+ CHECK_MATCH (" foo ( a , b , c , d ) ", "foo(a,b,c,d)", NORMAL);
+ CHECK_MATCH (" foo ( a , b , c , d ) ", "foo( a , b , c , d )", NORMAL);
+ CHECK_MATCH ("foo &\t*(\ta b *\t\t&)", "foo", NORMAL);
+ CHECK_MATCH ("foo &\t*(\ta b *\t\t&)", "foo&*(a b * &)", NORMAL);
+ CHECK_MATCH ("foo(a) b", "foo(a)", NORMAL);
+ CHECK_MATCH ("*foo(*a&)", "*foo", NORMAL);
+ CHECK_MATCH ("*foo(*a&)", "*foo(*a&)", NORMAL);
+ CHECK_MATCH ("*a&b#c/^d$foo(*a&)", "*a&b#c/^d$foo", NORMAL);
+ CHECK_MATCH ("* foo", "*foo", NORMAL);
+ CHECK_MATCH ("foo&", "foo", NORMAL);
+ CHECK_MATCH ("foo*", "foo", NORMAL);
+ CHECK_MATCH ("foo.", "foo", NORMAL);
+ CHECK_MATCH ("foo->", "foo", NORMAL);
+
+ CHECK_NO_MATCH ("foo", "foo(", NORMAL);
+ CHECK_NO_MATCH ("foo", "foo()", NORMAL);
+ CHECK_NO_MATCH ("foo", "foo(a)", NORMAL);
+ CHECK_NO_MATCH ("foo", "foo(a)", NORMAL);
+ CHECK_NO_MATCH ("foo", "foo*", NORMAL);
+ CHECK_NO_MATCH ("foo", "foo (*", NORMAL);
+ CHECK_NO_MATCH ("foo*", "foo (*", NORMAL);
+ CHECK_NO_MATCH ("foo *", "foo (*", NORMAL);
+ CHECK_NO_MATCH ("foo&", "foo (*", NORMAL);
+ CHECK_NO_MATCH ("foo &", "foo (*", NORMAL);
+ CHECK_NO_MATCH ("foo &*", "foo (&)", NORMAL);
+ CHECK_NO_MATCH ("foo & \t *\t", "foo (*", NORMAL);
+ CHECK_NO_MATCH ("foo & \t *\t", "foo (*", NORMAL);
+ CHECK_NO_MATCH ("foo(a*) b", "foo(a) b", NORMAL);
+ CHECK_NO_MATCH ("foo[aqi:A](a)", "foo(b)", NORMAL);
+ CHECK_NO_MATCH ("*foo", "foo", NORMAL);
+ CHECK_NO_MATCH ("*foo", "foo*", NORMAL);
+ CHECK_NO_MATCH ("*foo*", "*foo&", NORMAL);
+ CHECK_NO_MATCH ("*foo*", "foo *", NORMAL);
+ CHECK_NO_MATCH ("&foo", "foo", NORMAL);
+ CHECK_NO_MATCH ("&foo", "foo&", NORMAL);
+ CHECK_NO_MATCH ("foo&", "&foo", NORMAL);
+ CHECK_NO_MATCH ("foo", "foo&", NORMAL);
+ CHECK_NO_MATCH ("foo", "foo*", NORMAL);
+ CHECK_NO_MATCH ("foo", "foo.", NORMAL);
+ CHECK_NO_MATCH ("foo", "foo->", NORMAL);
+ CHECK_NO_MATCH ("foo bar", "foo()", NORMAL);
+ CHECK_NO_MATCH ("foo bar", "foo bar()", NORMAL);
+ CHECK_NO_MATCH ("foo()", "foo(a)", NORMAL);
+ CHECK_NO_MATCH ("*(*)&", "*(*)*", NORMAL);
+ CHECK_NO_MATCH ("foo(a)", "foo()", NORMAL);
+ CHECK_NO_MATCH ("foo(a)", "foo(b)", NORMAL);
+ CHECK_NO_MATCH ("foo(a,b)", "foo(a,b,c)", NORMAL);
+ CHECK_NO_MATCH ("foo(a\\b)", "foo()", NORMAL);
+ CHECK_NO_MATCH ("foo bar(a b c d)", "foobar", NORMAL);
+ CHECK_NO_MATCH ("foo bar(a b c d)", "foobar ( a b c \td\t)\t", NORMAL);
+
+ /* Test scope operator. */
+ check_scope_operator (language_minimal);
+ check_scope_operator (language_cplus);
+ check_scope_operator (language_fortran);
+ check_scope_operator (language_rust);
+
+ /* Test C++ user-defined operators. */
+ CHECK_MATCH_LANG ("operator foo(int&)", "operator foo(int &)", NORMAL,
+ language_cplus);
+ CHECK_MATCH_LANG ("operator foo(int &)", "operator foo(int &)", NORMAL,
+ language_cplus);
+ CHECK_MATCH_LANG ("operator foo(int\t&)", "operator foo(int\t&)", NORMAL,
+ language_cplus);
+ CHECK_MATCH_LANG ("operator foo (int)", "operator foo(int)", NORMAL,
+ language_cplus);
+ CHECK_MATCH_LANG ("operator foo\t(int)", "operator foo(int)", NORMAL,
+ language_cplus);
+ CHECK_MATCH_LANG ("operator foo \t(int)", "operator foo(int)", NORMAL,
+ language_cplus);
+ CHECK_MATCH_LANG ("operator foo (int)", "operator foo \t(int)", NORMAL,
+ language_cplus);
+ CHECK_MATCH_LANG ("operator foo\t(int)", "operator foo \t(int)", NORMAL,
+ language_cplus);
+ CHECK_MATCH_LANG ("operator foo \t(int)", "operator foo \t(int)", NORMAL,
+ language_cplus);
+
+ CHECK_MATCH_LANG ("a::operator foo(int&)", "a::operator foo(int &)", NORMAL,
+ language_cplus);
+ CHECK_MATCH_LANG ("a :: operator foo(int &)", "a::operator foo(int &)", NORMAL,
+ language_cplus);
+ CHECK_MATCH_LANG ("a \t:: \toperator foo(int\t&)", "a::operator foo(int\t&)", NORMAL,
+ language_cplus);
+ CHECK_MATCH_LANG ("a::operator foo (int)", "a::operator foo(int)", NORMAL,
+ language_cplus);
+ CHECK_MATCH_LANG ("a::operator foo\t(int)", "a::operator foo(int)", NORMAL,
+ language_cplus);
+ CHECK_MATCH_LANG ("a::operator foo \t(int)", "a::operator foo(int)", NORMAL,
+ language_cplus);
+ CHECK_MATCH_LANG ("a::operator foo (int)", "a::operator foo \t(int)", NORMAL,
+ language_cplus);
+ CHECK_MATCH_LANG ("a::operator foo\t(int)", "a::operator foo \t(int)", NORMAL,
+ language_cplus);
+ CHECK_MATCH_LANG ("a::operator foo \t(int)", "a::operator foo \t(int)", NORMAL,
+ language_cplus);
+
+ CHECK_NO_MATCH_LANG ("operator foo(int)", "operator foo(char)", NORMAL,
+ language_cplus);
+ CHECK_NO_MATCH_LANG ("operator foo(int)", "operator foo(int *)", NORMAL,
+ language_cplus);
+ CHECK_NO_MATCH_LANG ("operator foo(int)", "operator foo(int &)", NORMAL,
+ language_cplus);
+ CHECK_NO_MATCH_LANG ("operator foo(int)", "operator foo(int, char *)", NORMAL,
+ language_cplus);
+ CHECK_NO_MATCH_LANG ("operator foo(int)", "operator bar(int)", NORMAL,
+ language_cplus);
+
+ CHECK_NO_MATCH_LANG ("a::operator b::foo(int)", "a::operator a::foo(char)", NORMAL,
+ language_cplus);
+ CHECK_NO_MATCH_LANG ("a::operator foo(int)", "a::operator foo(int *)", NORMAL,
+ language_cplus);
+ CHECK_NO_MATCH_LANG ("a::operator foo(int)", "a::operator foo(int &)", NORMAL,
+ language_cplus);
+ CHECK_NO_MATCH_LANG ("a::operator foo(int)", "a::operator foo(int, char *)", NORMAL,
+ language_cplus);
+ CHECK_NO_MATCH_LANG ("a::operator foo(int)", "a::operator bar(int)", NORMAL,
+ language_cplus);
+
+ /* Skip "[abi:cxx11]" tags in the symbol name if the lookup name
+ doesn't include them. These are not language-specific in
+ strncmp_iw_with_mode. */
+
+ CHECK_MATCH ("foo[abi:a]", "foo", NORMAL);
+ CHECK_MATCH ("foo[abi:a]()", "foo", NORMAL);
+ CHECK_MATCH ("foo[abi:a](a)", "foo", NORMAL);
+ CHECK_MATCH ("foo[abi:a](a&,b*)", "foo", NORMAL);
+ CHECK_MATCH ("foo[abi:a](a,b)", "foo(a,b)", NORMAL);
+ CHECK_MATCH ("foo[abi:a](a,b) c", "foo(a,b) c", NORMAL);
+ CHECK_MATCH ("foo[abi:a](a)", "foo(a)", NORMAL);
+ CHECK_MATCH ("foo[abi:a](a,b)", "foo(a,b)", NORMAL);
+ CHECK_MATCH ("foo[abi:a]", "foo[abi:a]", NORMAL);
+ CHECK_MATCH ("foo[ abi:a]", "foo[abi:a]", NORMAL);
+ CHECK_MATCH ("foo[\tabi:a]", "foo[abi:a]", NORMAL);
+ CHECK_MATCH ("foo[ \tabi:a]", "foo[abi:a]", NORMAL);
+ CHECK_MATCH ("foo[\t abi:a]", "foo[abi:a]", NORMAL);
+ CHECK_MATCH ("foo[abi :a]", "foo[abi:a]", NORMAL);
+ CHECK_MATCH ("foo[abi\t:a]", "foo[abi:a]", NORMAL);
+ CHECK_MATCH ("foo[abi \t:a]", "foo[abi:a]", NORMAL);
+ CHECK_MATCH ("foo[abi\t :a]", "foo[abi:a]", NORMAL);
+ CHECK_MATCH ("foo[abi:a]", "foo[ abi:a]", NORMAL);
+ CHECK_MATCH ("foo[abi:a]", "foo[\tabi:a]", NORMAL);
+ CHECK_MATCH ("foo[abi:a]", "foo[ \tabi:a]", NORMAL);
+ CHECK_MATCH ("foo[abi:a]", "foo[\t abi:a]", NORMAL);
+ CHECK_MATCH ("foo[abi:a]", "foo[abi :a]", NORMAL);
+ CHECK_MATCH ("foo[abi:a]", "foo[abi\t:a]", NORMAL);
+ CHECK_MATCH ("foo[abi:a]", "foo[abi \t:a]", NORMAL);
+ CHECK_MATCH ("foo[abi:a]", "foo[abi\t :a]", NORMAL);
+ CHECK_MATCH ("foo[abi:a]", "foo[abi:a ]", NORMAL);
+ CHECK_MATCH ("foo[abi:a]", "foo[abi:a\t]", NORMAL);
+ CHECK_MATCH ("foo[abi:a]", "foo[abi:a \t]", NORMAL);
+ CHECK_MATCH ("foo[abi:a]", "foo[abi:a\t ]", NORMAL);
+ CHECK_MATCH ("foo[abi:a,b]", "foo[abi:a,b]", NORMAL);
+ CHECK_MATCH ("foo[abi:::]", "foo[abi:::]", NORMAL);
+ CHECK_MATCH ("foo[abi : : : ]", "foo[abi:::]", NORMAL);
+ CHECK_MATCH ("foo[abi:::]", "foo[abi : : : ]", NORMAL);
+ CHECK_MATCH ("foo[ \t abi \t:\t: : \t]",
+ "foo[ abi : \t ::]",
+ NORMAL);
+ CHECK_MATCH ("foo< bar< baz< quxi > > >(int)", "foo<bar<baz<quxi>>>(int)",
+ NORMAL);
+ CHECK_MATCH ("\tfoo<\tbar<\tbaz\t<\tquxi\t>\t>\t>(int)",
+ "foo<bar<baz<quxi>>>(int)", NORMAL);
+ CHECK_MATCH (" \tfoo \t< \tbar \t< \tbaz \t< \tquxi \t> \t> \t> \t( \tint \t)",
+ "foo<bar<baz<quxi>>>(int)", NORMAL);
+ CHECK_MATCH ("foo<bar<baz<quxi>>>(int)",
+ "foo < bar < baz < quxi > > > (int)", NORMAL);
+ CHECK_MATCH ("foo<bar<baz<quxi>>>(int)",
+ "\tfoo\t<\tbar\t<\tbaz\t<\tquxi\t>\t>\t>\t(int)", NORMAL);
+ CHECK_MATCH ("foo<bar<baz<quxi>>>(int)",
+ " \tfoo \t< \tbar \t< \tbaz \t< \tquxi \t> \t> \t> \t( \tint \t)", NORMAL);
+ CHECK_MATCH ("foo<bar<baz>>::foo(quxi &)", "fo", NORMAL);
+ CHECK_MATCH ("foo<bar<baz>>::foo(quxi &)", "foo", NORMAL);
+ CHECK_MATCH ("foo<bar<baz>>::foo(quxi &)", "foo<bar<baz>>::", NORMAL);
+ CHECK_MATCH ("foo<bar<baz>>::foo(quxi &)", "foo<bar<baz> >::foo", NORMAL);
+ CHECK_MATCH ("foo[abi:a][abi:b](bar[abi:c][abi:d])", "foo[abi:a][abi:b](bar[abi:c][abi:d])",
+ NORMAL);
+ CHECK_MATCH ("foo[abi:a][abi:b](bar[abi:c][abi:d])", "foo", NORMAL);
+ CHECK_MATCH ("foo[abi:a][abi:b](bar[abi:c][abi:d])", "foo(bar)", NORMAL);
+ CHECK_MATCH ("foo[abi:a][abi:b](bar[abi:c][abi:d])", "foo[abi:a](bar)", NORMAL);
+ CHECK_MATCH ("foo[abi:a][abi:b](bar[abi:c][abi:d])", "foo(bar[abi:c])", NORMAL);
+ CHECK_MATCH ("foo[abi:a][abi:b](bar[abi:c][abi:d])", "foo[abi:a](bar[abi:c])", NORMAL);
+ CHECK_MATCH ("foo[abi:a][abi:b](bar[abi:c][abi:d])", "foo[abi:a][abi:b](bar)", NORMAL);
+ CHECK_MATCH ("foo[abi:a][abi:b](bar[abi:c][abi:d])", "foo[abi:a][abi:b](bar[abi:c])",
+ NORMAL);
+ CHECK_MATCH("foo<bar[abi:a]>(char *, baz[abi:b])", "foo", NORMAL);
+ CHECK_NO_MATCH("foo<bar[abi:a]>(char *, baz[abi:b])", "foo()", NORMAL);
+ CHECK_MATCH("foo<bar[abi:a]>(char *, baz[abi:b])", "foo<bar>", NORMAL);
+ CHECK_MATCH("foo<bar[abi:a]>(char *, baz[abi:b])", "foo<bar>(char*, baz)", NORMAL);
+ CHECK_MATCH("foo<bar[abi:a]>(char *, baz[abi:b])", "foo<bar>(char*, baz[abi:b])",
+ NORMAL);
+ CHECK_NO_MATCH("foo<bar[abi:a]>(char *, baz[abi:b])", "foo<bar>(char*, baz[abi:A])",
+ NORMAL);
+ CHECK_MATCH("foo<bar[abi:a]>(char *, baz[abi:b])", "foo<bar[abi:a]>(char*, baz)",
+ NORMAL);
+ CHECK_NO_MATCH("foo<bar[abi:a]>(char *, baz[abi:b])", "foo<bar[abi:A]>(char*, baz)",
+ NORMAL);
+ CHECK_MATCH("foo<bar[abi:a]>(char *, baz[abi:b])", "foo<bar[abi:a]>(char*, baz[abi:b])",
+ NORMAL);
+ CHECK_NO_MATCH("foo<bar[abi:a]>(char *, baz[abi:b])",
+ "foo<bar[abi:a]>(char*, baz[abi:B])", NORMAL);
+
+ CHECK_NO_MATCH ("foo", "foo[", NORMAL);
+ CHECK_NO_MATCH ("foo", "foo[]", NORMAL);
+ CHECK_NO_MATCH ("foo", "foo[ a]", NORMAL);
+ CHECK_NO_MATCH ("foo", "foo[a ]", NORMAL);
+ CHECK_NO_MATCH ("foo", "foo[ a ]", NORMAL);
+ CHECK_NO_MATCH ("foo", "foo[\ta]", NORMAL);
+ CHECK_NO_MATCH ("foo", "foo[a \t]", NORMAL);
+ CHECK_NO_MATCH ("foo", "foo[a\t ]", NORMAL);
+ CHECK_NO_MATCH ("foo", "foo[ \ta]", NORMAL);
+ CHECK_NO_MATCH ("foo", "foo[\t a]", NORMAL);
+ CHECK_NO_MATCH ("foo", "foo[ \ta \t]", NORMAL);
+ CHECK_NO_MATCH ("foo", "foo[\t a\t ]", NORMAL);
+ CHECK_NO_MATCH ("foo", "foo[abi]", NORMAL);
+ CHECK_NO_MATCH ("foo", "foo[ abi]", NORMAL);
+ CHECK_NO_MATCH ("foo", "foo[abi ]", NORMAL);
+ CHECK_NO_MATCH ("foo", "foo[\tabi]", NORMAL);
+ CHECK_NO_MATCH ("foo", "foo[abi\t]", NORMAL);
+ CHECK_NO_MATCH ("foo", "foo[ \tabi]", NORMAL);
+ CHECK_NO_MATCH ("foo", "foo[\t abi]", NORMAL);
+ CHECK_NO_MATCH ("foo", "foo[abi \t]", NORMAL);
+ CHECK_NO_MATCH ("foo", "foo[abi\t ]", NORMAL);
+ CHECK_NO_MATCH ("foo", "foo[abi :]", NORMAL);
+ CHECK_NO_MATCH ("foo", "foo[abi\t:]", NORMAL);
+ CHECK_NO_MATCH ("foo", "foo[abi \t:]", NORMAL);
+ CHECK_NO_MATCH ("foo", "foo[abi\t :]", NORMAL);
+ CHECK_NO_MATCH ("foo", "foo[abi: ]", NORMAL);
+ CHECK_NO_MATCH ("foo", "foo[abi:\t]", NORMAL);
+ CHECK_NO_MATCH ("foo", "foo[abi: \t]", NORMAL);
+ CHECK_NO_MATCH ("foo", "foo[abi:\t ]", NORMAL);
+ CHECK_NO_MATCH ("foo", "foo[abi: a]", NORMAL);
+ CHECK_NO_MATCH ("foo", "foo[abi:\ta]", NORMAL);
+ CHECK_NO_MATCH ("foo", "foo[abi: \ta]", NORMAL);
+ CHECK_NO_MATCH ("foo", "foo[abi:\t a]", NORMAL);
+ CHECK_NO_MATCH ("foo", "foo[abi:a ]", NORMAL);
+ CHECK_NO_MATCH ("foo", "foo[abi:a\t]", NORMAL);
+ CHECK_NO_MATCH ("foo", "foo[abi:a \t]", NORMAL);
+ CHECK_NO_MATCH ("foo", "foo[abi:a\t ]", NORMAL);
+ CHECK_NO_MATCH ("foo[abi:a]()", "foo(a)", NORMAL);
+ CHECK_NO_MATCH ("foo[abi:a]()", "foo(a)", NORMAL);
+ CHECK_NO_MATCH ("foo[abi:a]()", "foo(a)", NORMAL);
+ CHECK_NO_MATCH ("foo[abi:a]()", "foo(a)", NORMAL);
+ CHECK_NO_MATCH ("foo[abi:a]()", "foo(a) c", NORMAL);
+ CHECK_NO_MATCH ("foo[abi:a]()", "foo(a) .", NORMAL);
+ CHECK_NO_MATCH ("foo[abi:a]()", "foo(a) *", NORMAL);
+ CHECK_NO_MATCH ("foo[abi:a]()", "foo(a) &", NORMAL);
+ CHECK_NO_MATCH ("foo[abi:a](a,b)", "foo(a,b) c", NORMAL);
+ CHECK_NO_MATCH ("foo[abi:a](a,b)", "foo(a,b) .", NORMAL);
+ CHECK_NO_MATCH ("foo[abi:a](a,b)", "foo(a,b) *", NORMAL);
+ CHECK_NO_MATCH ("foo[abi:a](a,b)", "foo(a,b) &", NORMAL);
+ CHECK_NO_MATCH ("foo[abi:a](a,b)", "foo(a,b)c", NORMAL);
+ CHECK_NO_MATCH ("foo[abi:a](a,b)", "foo(a,b).", NORMAL);
+ CHECK_NO_MATCH ("foo[abi:a](a,b)", "foo(a,b)*", NORMAL);
+ CHECK_NO_MATCH ("foo[abi:a](a,b)", "foo(a,b)&", NORMAL);
+ CHECK_NO_MATCH ("foo[abi:a](a,b) d", "foo(a,b) c", NORMAL);
+ CHECK_NO_MATCH ("foo[abi:a](a)", "foo()", NORMAL);
+ CHECK_NO_MATCH ("foo[abi:a](a)", "foo(b)", NORMAL);
+ CHECK_NO_MATCH ("foo[abi:a](a)", "foo[abi:b](a)", NORMAL);
+ CHECK_NO_MATCH ("foo[abi:a](a)", "foo[abi:a](b)", NORMAL);
+ CHECK_NO_MATCH ("foo[abi:]", "foo[abi:a]", NORMAL);
+ CHECK_NO_MATCH ("foo[abi:", "foo[abi:a]", NORMAL);
+ CHECK_NO_MATCH ("foo[abi:]", "foo[abi:a", NORMAL);
+ CHECK_NO_MATCH ("foo[abi:,]", "foo[abi:a]", NORMAL);
+ CHECK_NO_MATCH ("foo[abi:a,b]", "foo[abi:a]", NORMAL);
+ CHECK_NO_MATCH ("foo[abi::a]", "foo[abi:a]", NORMAL);
+ CHECK_NO_MATCH ("foo[abi:,([a]", "foo[abi:a]", NORMAL);
+
+ CHECK_MATCH ("foo <a, b [, c (", "foo", NORMAL);
+ CHECK_MATCH ("foo >a, b ], c )", "foo", NORMAL);
+ CHECK_MATCH ("@!%&\\*", "@!%&\\*", NORMAL);
+ CHECK_MATCH ("()", "()", NORMAL);
+ CHECK_MATCH ("*(*)*", "*(*)*", NORMAL);
+ CHECK_MATCH ("[]", "[]", NORMAL);
+ CHECK_MATCH ("<>", "<>", NORMAL);
+
+ /* strncmp_iw_with_mode::MATCH_PARAMS: the "strcmp_iw hack." */
+ CHECK_MATCH ("foo2", "foo", NORMAL);
+ CHECK_NO_MATCH ("foo2", "foo", MATCH_PARAMS);
+ CHECK_NO_MATCH ("foo2", "foo ", MATCH_PARAMS);
+ CHECK_NO_MATCH ("foo2", "foo\t", MATCH_PARAMS);
+ CHECK_NO_MATCH ("foo2", "foo \t", MATCH_PARAMS);
+ CHECK_NO_MATCH ("foo2", "foo\t ", MATCH_PARAMS);
+ CHECK_NO_MATCH ("foo2", "foo \t", MATCH_PARAMS);
+ CHECK_NO_MATCH ("foo2", " foo", MATCH_PARAMS);
+ CHECK_NO_MATCH ("foo2", "\tfoo", MATCH_PARAMS);
+ CHECK_NO_MATCH ("foo2", " \tfoo", MATCH_PARAMS);
+ CHECK_NO_MATCH ("foo2", "\t foo", MATCH_PARAMS);
+ CHECK_NO_MATCH (" foo2", "foo", MATCH_PARAMS);
+ CHECK_NO_MATCH ("\tfoo2", "foo", MATCH_PARAMS);
+ CHECK_NO_MATCH (" \tfoo2", "foo", MATCH_PARAMS);
+ CHECK_NO_MATCH ("\t foo2", "foo", MATCH_PARAMS);
+ CHECK_NO_MATCH (" foo2 ", " foo ", MATCH_PARAMS);
+ CHECK_NO_MATCH ("\tfoo2\t", "\tfoo\t", MATCH_PARAMS);
+ CHECK_NO_MATCH (" \tfoo2 \t", " \tfoo \t", MATCH_PARAMS);
+ CHECK_NO_MATCH ("\t foo2\t ", "\t foo\t ", MATCH_PARAMS);
+ CHECK_NO_MATCH ("foo2 ", "foo", MATCH_PARAMS);
+ CHECK_NO_MATCH ("foo2\t", "foo", MATCH_PARAMS);
+ CHECK_NO_MATCH ("foo2 ", "foo", MATCH_PARAMS);
+ CHECK_NO_MATCH ("foo2 \t", "foo", MATCH_PARAMS);
+ CHECK_NO_MATCH ("foo2\t ", "foo", MATCH_PARAMS);
+ CHECK_NO_MATCH ("foo2 (args)", "foo", MATCH_PARAMS);
+ CHECK_NO_MATCH ("foo2 (args)", "foo", MATCH_PARAMS);
+ CHECK_NO_MATCH ("foo2\t(args)", "foo", MATCH_PARAMS);
+ CHECK_NO_MATCH ("foo2 \t(args)", "foo", MATCH_PARAMS);
+ CHECK_NO_MATCH ("foo2\t (args)", "foo", MATCH_PARAMS);
+ CHECK_NO_MATCH ("foo2 ( args)", "foo", MATCH_PARAMS);
+ CHECK_NO_MATCH ("foo2(args )", "foo", MATCH_PARAMS);
+ CHECK_NO_MATCH ("foo2(args\t)", "foo", MATCH_PARAMS);
+ CHECK_NO_MATCH ("foo2 (args \t)", "foo", MATCH_PARAMS);
+ CHECK_NO_MATCH ("foo2 (args\t )", "foo", MATCH_PARAMS);
+ CHECK_MATCH ("foo[abi:a][abi:b](bar[abi:c][abi:d])", "foo[abi:a][abi:b](bar[abi:c][abi:d])",
+ MATCH_PARAMS);
+ CHECK_MATCH ("foo[abi:a][abi:b](bar[abi:c][abi:d])", "foo", MATCH_PARAMS);
+
+ /* strncmp_iw_with_mode also supports case insensitivity. */
+ {
+ CHECK_NO_MATCH ("FoO", "foo", NORMAL);
+ CHECK_NO_MATCH ("FoO", "foo", MATCH_PARAMS);
+
+ scoped_restore restore_case = make_scoped_restore (&case_sensitivity);
+ case_sensitivity = case_sensitive_off;
+
+ CHECK_MATCH ("FoO", "foo", NORMAL);
+ CHECK_MATCH ("FoO", "foo", MATCH_PARAMS);
+ CHECK_MATCH ("foo", "FoO", NORMAL);
+ CHECK_MATCH ("foo", "FoO", MATCH_PARAMS);
+
+ CHECK_MATCH ("FoO[AbI:abC]()", "foo", NORMAL);
+ CHECK_NO_MATCH ("FoO[AbI:abC]()", "foo", MATCH_PARAMS);
+ CHECK_MATCH ("FoO2[AbI:abC]()", "foo", NORMAL);
+ CHECK_NO_MATCH ("FoO2[AbI:abC]()", "foo", MATCH_PARAMS);
+
+ CHECK_MATCH ("foo[abi:abc]()", "FoO[AbI:abC]()", NORMAL);
+ CHECK_MATCH ("foo[abi:abc]()", "FoO[AbI:AbC]()", MATCH_PARAMS);
+ CHECK_MATCH ("foo[abi:abc](xyz)", "FoO[AbI:abC](XyZ)", NORMAL);
+ CHECK_MATCH ("foo[abi:abc](xyz)", "FoO[AbI:abC](XyZ)", MATCH_PARAMS);
+ CHECK_MATCH ("foo[abi:abc][abi:def](xyz)", "FoO[AbI:abC](XyZ)", NORMAL);
+ CHECK_MATCH ("foo[abi:abc][abi:def](xyz)", "FoO[AbI:abC](XyZ)",
+ MATCH_PARAMS);
+ CHECK_MATCH ("foo<bar<baz>>(bar<baz>)", "FoO<bAr<BaZ>>(bAr<BaZ>)",
+ NORMAL);
+ CHECK_MATCH ("foo<bar<baz>>(bar<baz>)", "FoO<bAr<BaZ>>(bAr<BaZ>)",
+ MATCH_PARAMS);
+ }
+}
+
+#undef MATCH
+#undef NO_MATCH
+#endif
+
/* See utils.h. */
int
@@ -2676,8 +3134,8 @@ static void
show_debug_timestamp (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Timestamping debugging messages is %s.\n"),
- value);
+ gdb_printf (file, _("Timestamping debugging messages is %s.\n"),
+ value);
}
@@ -2840,30 +3298,6 @@ gdb_argv_as_array_view_test ()
#endif /* GDB_SELF_TEST */
-/* Allocation function for the libiberty hash table which uses an
- obstack. The obstack is passed as DATA. */
-
-void *
-hashtab_obstack_allocate (void *data, size_t size, size_t count)
-{
- size_t total = size * count;
- void *ptr = obstack_alloc ((struct obstack *) data, total);
-
- memset (ptr, 0, total);
- return ptr;
-}
-
-/* Trivial deallocation function for the libiberty splay tree and hash
- table - don't deallocate anything. Rely on later deletion of the
- obstack. DATA will be the obstack, although it is not needed
- here. */
-
-void
-dummy_obstack_deallocate (void *object, void *data)
-{
- return;
-}
-
/* Simple, portable version of dirname that does not modify its
argument. */
@@ -2890,17 +3324,6 @@ ldirname (const char *filename)
return dirname;
}
-/* See utils.h. */
-
-void
-gdb_argv::reset (const char *s)
-{
- char **argv = buildargv (s);
-
- freeargv (m_argv);
- m_argv = argv;
-}
-
/* Return ARGS parsed as a valid pid, or throw an error. */
int
@@ -3309,5 +3732,8 @@ When set, debugging messages will be marked with seconds and microseconds."),
#if GDB_SELF_TEST
selftests::register_test ("gdb_realpath", gdb_realpath_tests);
selftests::register_test ("gdb_argv_array_view", gdb_argv_as_array_view_test);
+ selftests::register_test ("strncmp_iw_with_mode",
+ strncmp_iw_with_mode_tests);
+ selftests::register_test ("pager", test_pager);
#endif
}
diff --git a/gdb/utils.h b/gdb/utils.h
index ac30fd5f114..7e2028580bf 100644
--- a/gdb/utils.h
+++ b/gdb/utils.h
@@ -63,11 +63,14 @@ enum class strncmp_iw_mode
MATCH_FOR_LCD is passed down so that the function can mark parts of
the symbol name as ignored for completion matching purposes (e.g.,
- to handle abi tags). */
+ to handle abi tags). If IGNORE_TEMPLATE_PARAMS is true, all template
+ parameter lists will be ignored when language is C++. */
+
extern int strncmp_iw_with_mode
(const char *string1, const char *string2, size_t string2_len,
strncmp_iw_mode mode, enum language language,
- completion_match_for_lcd *match_for_lcd = NULL);
+ completion_match_for_lcd *match_for_lcd = NULL,
+ bool ignore_template_params = false);
/* Do a strncmp() type operation on STRING1 and STRING2, ignoring any
differences in whitespace. STRING2_LEN is STRING2's length.
@@ -120,204 +123,9 @@ extern int parse_pid_to_attach (const char *args);
extern int parse_escape (struct gdbarch *, const char **);
-/* A wrapper for an array of char* that was allocated in the way that
- 'buildargv' does, and should be freed with 'freeargv'. */
-
-class gdb_argv
-{
-public:
-
- /* A constructor that initializes to NULL. */
-
- gdb_argv ()
- : m_argv (NULL)
- {
- }
-
- /* A constructor that calls buildargv on STR. STR may be NULL, in
- which case this object is initialized with a NULL array. */
-
- explicit gdb_argv (const char *str)
- : m_argv (NULL)
- {
- reset (str);
- }
-
- /* A constructor that takes ownership of an existing array. */
-
- explicit gdb_argv (char **array)
- : m_argv (array)
- {
- }
-
- gdb_argv (const gdb_argv &) = delete;
- gdb_argv &operator= (const gdb_argv &) = delete;
-
- gdb_argv &operator= (gdb_argv &&other)
- {
- freeargv (m_argv);
- m_argv = other.m_argv;
- other.m_argv = nullptr;
- return *this;
- }
-
- gdb_argv (gdb_argv &&other)
- {
- m_argv = other.m_argv;
- other.m_argv = nullptr;
- }
-
- ~gdb_argv ()
- {
- freeargv (m_argv);
- }
-
- /* Call buildargv on STR, storing the result in this object. Any
- previous state is freed. STR may be NULL, in which case this
- object is reset with a NULL array. If buildargv fails due to
- out-of-memory, call malloc_failure. Therefore, the value is
- guaranteed to be non-NULL, unless the parameter itself is
- NULL. */
-
- void reset (const char *str);
-
- /* Return the underlying array. */
-
- char **get ()
- {
- return m_argv;
- }
-
- const char * const * get () const
- {
- return m_argv;
- }
-
- /* Return the underlying array, transferring ownership to the
- caller. */
-
- ATTRIBUTE_UNUSED_RESULT char **release ()
- {
- char **result = m_argv;
- m_argv = NULL;
- return result;
- }
-
- /* Return the number of items in the array. */
-
- int count () const
- {
- return countargv (m_argv);
- }
-
- /* Index into the array. */
-
- char *operator[] (int arg)
- {
- gdb_assert (m_argv != NULL);
- return m_argv[arg];
- }
-
- /* Return the arguments array as an array view. */
-
- gdb::array_view<char *> as_array_view ()
- {
- return gdb::array_view<char *> (this->get (), this->count ());
- }
-
- gdb::array_view<const char * const> as_array_view () const
- {
- return gdb::array_view<const char * const> (this->get (), this->count ());
- }
-
- /* Append arguments to this array. */
- void append (gdb_argv &&other)
- {
- int size = count ();
- int argc = other.count ();
- m_argv = XRESIZEVEC (char *, m_argv, (size + argc + 1));
-
- for (int argi = 0; argi < argc; argi++)
- {
- /* Transfer ownership of the string. */
- m_argv[size++] = other.m_argv[argi];
- /* Ensure that destruction of OTHER works correctly. */
- other.m_argv[argi] = nullptr;
- }
- m_argv[size] = nullptr;
- }
-
- /* Append arguments to this array. */
- void append (const gdb_argv &other)
- {
- int size = count ();
- int argc = other.count ();
- m_argv = XRESIZEVEC (char *, m_argv, (size + argc + 1));
-
- for (int argi = 0; argi < argc; argi++)
- m_argv[size++] = xstrdup (other.m_argv[argi]);
- m_argv[size] = nullptr;
- }
-
- /* The iterator type. */
-
- typedef char **iterator;
-
- /* Return an iterator pointing to the start of the array. */
-
- iterator begin ()
- {
- return m_argv;
- }
-
- /* Return an iterator pointing to the end of the array. */
-
- iterator end ()
- {
- return m_argv + count ();
- }
-
- bool operator!= (std::nullptr_t)
- {
- return m_argv != NULL;
- }
-
- bool operator== (std::nullptr_t)
- {
- return m_argv == NULL;
- }
-
-private:
-
- /* The wrapped array. */
-
- char **m_argv;
-};
-
/* Cleanup utilities. */
-/* A deleter for a hash table. */
-struct htab_deleter
-{
- void operator() (htab *ptr) const
- {
- htab_delete (ptr);
- }
-};
-
-/* A unique_ptr wrapper for htab_t. */
-typedef std::unique_ptr<htab, htab_deleter> htab_up;
-
-/* A wrapper for 'delete' that can used as a hash table entry deletion
- function. */
-template<typename T>
-void
-htab_delete_entry (void *ptr)
-{
- delete (T *) ptr;
-}
-
extern void init_page_info (void);
/* Temporarily set BATCH_FLAG and the associated unlimited terminal size.
@@ -367,7 +175,7 @@ extern int yquery (const char *, ...) ATTRIBUTE_PRINTF (1, 2);
extern void begin_line (void);
-extern void wrap_here (const char *);
+extern void wrap_here (int);
extern void reinitialize_more_filter (void);
@@ -377,16 +185,16 @@ extern int get_chars_per_line ();
extern bool pagination_enabled;
+/* A flag indicating whether to timestamp debugging messages. */
+extern bool debug_timestamp;
+
extern struct ui_file **current_ui_gdb_stdout_ptr (void);
extern struct ui_file **current_ui_gdb_stdin_ptr (void);
extern struct ui_file **current_ui_gdb_stderr_ptr (void);
extern struct ui_file **current_ui_gdb_stdlog_ptr (void);
-/* Flush STREAM. This is a wrapper for ui_file_flush that also
- flushes any output pending from uses of the *_filtered output
- functions; that output is kept in a special buffer so that
- pagination and styling are handled properly. */
-extern void gdb_flush (struct ui_file *);
+/* Flush STREAM. */
+extern void gdb_flush (struct ui_file *stream);
/* The current top level's ui_file streams. */
@@ -394,20 +202,16 @@ extern void gdb_flush (struct ui_file *);
#define gdb_stdout (*current_ui_gdb_stdout_ptr ())
/* Input stream */
#define gdb_stdin (*current_ui_gdb_stdin_ptr ())
-/* Serious error notifications */
+/* Serious error notifications. This bypasses the pager, if one is in
+ use. */
#define gdb_stderr (*current_ui_gdb_stderr_ptr ())
-/* Log/debug/trace messages that should bypass normal stdout/stderr
- filtering. For moment, always call this stream using
- *_unfiltered. In the very near future that restriction shall be
- removed - either call shall be unfiltered. (cagney 1999-06-13). */
+/* Log/debug/trace messages that bypasses the pager, if one is in
+ use. */
#define gdb_stdlog (*current_ui_gdb_stdlog_ptr ())
/* Truly global ui_file streams. These are all defined in main.c. */
-/* Target output that should bypass normal stdout/stderr filtering.
- For moment, always call this stream using *_unfiltered. In the
- very near future that restriction shall be removed - either call
- shall be unfiltered. (cagney 1999-07-02). */
+/* Target output that should bypass the pager, if one is in use. */
extern struct ui_file *gdb_stdtarg;
extern struct ui_file *gdb_stdtargerr;
extern struct ui_file *gdb_stdtargin;
@@ -416,58 +220,43 @@ extern struct ui_file *gdb_stdtargin;
extern void set_screen_width_and_height (int width, int height);
-/* More generic printf like operations. Filtered versions may return
- non-locally on error. As an extension over plain printf, these
- support some GDB-specific format specifiers. Particularly useful
- here are the styling formatters: '%p[', '%p]' and '%ps'. See
- ui_out::message for details. */
-
-extern void fputs_filtered (const char *, struct ui_file *);
-
-extern void fputs_unfiltered (const char *, struct ui_file *);
-
-extern int fputc_filtered (int c, struct ui_file *);
+/* Generic stdio-like operations. */
-extern int fputc_unfiltered (int c, struct ui_file *);
+extern void gdb_puts (const char *, struct ui_file *);
-extern int putchar_filtered (int c);
+extern void gdb_putc (int c, struct ui_file *);
-extern int putchar_unfiltered (int c);
+extern void gdb_putc (int c);
-extern void puts_filtered (const char *);
+extern void gdb_puts (const char *);
-extern void puts_unfiltered (const char *);
+extern void puts_tabular (char *string, int width, int right);
-extern void puts_filtered_tabular (char *string, int width, int right);
+/* Generic printf-like operations. As an extension over plain
+ printf, these support some GDB-specific format specifiers.
+ Particularly useful here are the styling formatters: '%p[', '%p]'
+ and '%ps'. See ui_out::message for details. */
-extern void vprintf_filtered (const char *, va_list) ATTRIBUTE_PRINTF (1, 0);
+extern void gdb_vprintf (const char *, va_list) ATTRIBUTE_PRINTF (1, 0);
-extern void vfprintf_filtered (struct ui_file *, const char *, va_list)
+extern void gdb_vprintf (struct ui_file *, const char *, va_list)
ATTRIBUTE_PRINTF (2, 0);
-extern void fprintf_filtered (struct ui_file *, const char *, ...)
+extern void gdb_printf (struct ui_file *, const char *, ...)
ATTRIBUTE_PRINTF (2, 3);
-extern void printf_filtered (const char *, ...) ATTRIBUTE_PRINTF (1, 2);
-
-extern void vprintf_unfiltered (const char *, va_list) ATTRIBUTE_PRINTF (1, 0);
-
-extern void vfprintf_unfiltered (struct ui_file *, const char *, va_list)
- ATTRIBUTE_PRINTF (2, 0);
-
-extern void fprintf_unfiltered (struct ui_file *, const char *, ...)
- ATTRIBUTE_PRINTF (2, 3);
+extern void gdb_printf (const char *, ...) ATTRIBUTE_PRINTF (1, 2);
extern void printf_unfiltered (const char *, ...) ATTRIBUTE_PRINTF (1, 2);
-extern void print_spaces_filtered (int, struct ui_file *);
+extern void print_spaces (int, struct ui_file *);
extern const char *n_spaces (int);
/* Return nonzero if filtered printing is initialized. */
extern int filtered_printing_initialized (void);
-/* Like fprintf_filtered, but styles the output according to STYLE,
+/* Like gdb_printf, but styles the output according to STYLE,
when appropriate. */
extern void fprintf_styled (struct ui_file *stream,
@@ -476,43 +265,19 @@ extern void fprintf_styled (struct ui_file *stream,
...)
ATTRIBUTE_PRINTF (3, 4);
-extern void vfprintf_styled (struct ui_file *stream,
- const ui_file_style &style,
- const char *fmt,
- va_list args)
- ATTRIBUTE_PRINTF (3, 0);
-
-/* Like vfprintf_styled, but do not process gdb-specific format
- specifiers. */
-extern void vfprintf_styled_no_gdbfmt (struct ui_file *stream,
- const ui_file_style &style,
- bool filter,
- const char *fmt, va_list args)
- ATTRIBUTE_PRINTF (4, 0);
-
-/* Like fputs_filtered, but styles the output according to STYLE, when
+/* Like gdb_puts, but styles the output according to STYLE, when
appropriate. */
extern void fputs_styled (const char *linebuffer,
const ui_file_style &style,
struct ui_file *stream);
-/* Unfiltered variant of fputs_styled. */
-
-extern void fputs_styled_unfiltered (const char *linebuffer,
- const ui_file_style &style,
- struct ui_file *stream);
-
/* Like fputs_styled, but uses highlight_style to highlight the
parts of STR that match HIGHLIGHT. */
extern void fputs_highlighted (const char *str, const compiled_regex &highlight,
struct ui_file *stream);
-/* Reset the terminal style to the default, if needed. */
-
-extern void reset_terminal_style (struct ui_file *stream);
-
/* Return the address only having significant bits. */
extern CORE_ADDR address_significant (gdbarch *gdbarch, CORE_ADDR addr);
@@ -528,8 +293,8 @@ extern const char *print_core_address (struct gdbarch *gdbarch,
extern CORE_ADDR string_to_core_addr (const char *my_string);
-extern void fprintf_symbol_filtered (struct ui_file *, const char *,
- enum language, int);
+extern void fprintf_symbol (struct ui_file *, const char *,
+ enum language, int);
extern void throw_perror_with_name (enum errors errcode, const char *string)
ATTRIBUTE_NORETURN;
@@ -558,11 +323,6 @@ extern void demangler_warning (const char *file, int line,
/* Misc. utilities. */
-/* Allocation and deallocation functions for the libiberty hash table
- which use obstacks. */
-void *hashtab_obstack_allocate (void *data, size_t size, size_t count);
-void dummy_obstack_deallocate (void *object, void *data);
-
#ifdef HAVE_WAITPID
extern pid_t wait_to_die_with_timeout (pid_t pid, int *status, int timeout);
#endif
diff --git a/gdb/valarith.c b/gdb/valarith.c
index e13db10ab55..6210267826e 100644
--- a/gdb/valarith.c
+++ b/gdb/valarith.c
@@ -252,7 +252,7 @@ int
binop_types_user_defined_p (enum exp_opcode op,
struct type *type1, struct type *type2)
{
- if (op == BINOP_ASSIGN || op == BINOP_CONCAT)
+ if (op == BINOP_ASSIGN)
return 0;
type1 = check_typedef (type1);
@@ -651,153 +651,66 @@ value_x_unop (struct value *arg1, enum exp_opcode op, enum noside noside)
}
-/* Concatenate two values with the following conditions:
-
- (1) Both values must be either bitstring values or character string
- values and the resulting value consists of the concatenation of
- ARG1 followed by ARG2.
-
- or
-
- One value must be an integer value and the other value must be
- either a bitstring value or character string value, which is
- to be repeated by the number of times specified by the integer
- value.
-
-
- (2) Boolean values are also allowed and are treated as bit string
- values of length 1.
-
- (3) Character values are also allowed and are treated as character
- string values of length 1. */
+/* Concatenate two values. One value must be an array; and the other
+ value must either be an array with the same element type, or be of
+ the array's element type. */
struct value *
value_concat (struct value *arg1, struct value *arg2)
{
- struct value *inval1;
- struct value *inval2;
- struct value *outval = NULL;
- int inval1len, inval2len;
- int count, idx;
- char inchar;
struct type *type1 = check_typedef (value_type (arg1));
struct type *type2 = check_typedef (value_type (arg2));
- struct type *char_type;
- /* First figure out if we are dealing with two values to be concatenated
- or a repeat count and a value to be repeated. INVAL1 is set to the
- first of two concatenated values, or the repeat count. INVAL2 is set
- to the second of the two concatenated values or the value to be
- repeated. */
+ if (type1->code () != TYPE_CODE_ARRAY && type2->code () != TYPE_CODE_ARRAY)
+ error ("no array provided to concatenation");
- if (type2->code () == TYPE_CODE_INT)
+ LONGEST low1, high1;
+ struct type *elttype1 = type1;
+ if (elttype1->code () == TYPE_CODE_ARRAY)
{
- struct type *tmp = type1;
-
- type1 = tmp;
- tmp = type2;
- inval1 = arg2;
- inval2 = arg1;
+ elttype1 = TYPE_TARGET_TYPE (elttype1);
+ if (!get_array_bounds (type1, &low1, &high1))
+ error (_("could not determine array bounds on left-hand-side of "
+ "array concatenation"));
}
else
{
- inval1 = arg1;
- inval2 = arg2;
+ low1 = 0;
+ high1 = 0;
}
- /* Now process the input values. */
-
- if (type1->code () == TYPE_CODE_INT)
- {
- /* We have a repeat count. Validate the second value and then
- construct a value repeated that many times. */
- if (type2->code () == TYPE_CODE_STRING
- || type2->code () == TYPE_CODE_CHAR)
- {
- count = longest_to_int (value_as_long (inval1));
- inval2len = TYPE_LENGTH (type2);
- std::vector<char> ptr (count * inval2len);
- if (type2->code () == TYPE_CODE_CHAR)
- {
- char_type = type2;
-
- inchar = (char) unpack_long (type2,
- value_contents (inval2).data ());
- for (idx = 0; idx < count; idx++)
- {
- ptr[idx] = inchar;
- }
- }
- else
- {
- char_type = TYPE_TARGET_TYPE (type2);
-
- for (idx = 0; idx < count; idx++)
- memcpy (&ptr[idx * inval2len], value_contents (inval2).data (),
- inval2len);
- }
- outval = value_string (ptr.data (), count * inval2len, char_type);
- }
- else if (type2->code () == TYPE_CODE_BOOL)
- {
- error (_("unimplemented support for boolean repeats"));
- }
- else
- {
- error (_("can't repeat values of that type"));
- }
- }
- else if (type1->code () == TYPE_CODE_STRING
- || type1->code () == TYPE_CODE_CHAR)
- {
- /* We have two character strings to concatenate. */
- if (type2->code () != TYPE_CODE_STRING
- && type2->code () != TYPE_CODE_CHAR)
- {
- error (_("Strings can only be concatenated with other strings."));
- }
- inval1len = TYPE_LENGTH (type1);
- inval2len = TYPE_LENGTH (type2);
- std::vector<char> ptr (inval1len + inval2len);
- if (type1->code () == TYPE_CODE_CHAR)
- {
- char_type = type1;
-
- ptr[0] = (char) unpack_long (type1, value_contents (inval1).data ());
- }
- else
- {
- char_type = TYPE_TARGET_TYPE (type1);
-
- memcpy (ptr.data (), value_contents (inval1).data (), inval1len);
- }
- if (type2->code () == TYPE_CODE_CHAR)
- {
- ptr[inval1len] =
- (char) unpack_long (type2, value_contents (inval2).data ());
- }
- else
- {
- memcpy (&ptr[inval1len], value_contents (inval2).data (), inval2len);
- }
- outval = value_string (ptr.data (), inval1len + inval2len, char_type);
- }
- else if (type1->code () == TYPE_CODE_BOOL)
+ LONGEST low2, high2;
+ struct type *elttype2 = type2;
+ if (elttype2->code () == TYPE_CODE_ARRAY)
{
- /* We have two bitstrings to concatenate. */
- if (type2->code () != TYPE_CODE_BOOL)
- {
- error (_("Booleans can only be concatenated "
- "with other bitstrings or booleans."));
- }
- error (_("unimplemented support for boolean concatenation."));
+ elttype2 = TYPE_TARGET_TYPE (elttype2);
+ if (!get_array_bounds (type2, &low2, &high2))
+ error (_("could not determine array bounds on right-hand-side of "
+ "array concatenation"));
}
else
{
- /* We don't know how to concatenate these operands. */
- error (_("illegal operands for concatenation."));
+ low2 = 0;
+ high2 = 0;
}
- return (outval);
+
+ if (!types_equal (elttype1, elttype2))
+ error (_("concatenation with different element types"));
+
+ LONGEST lowbound = current_language->c_style_arrays_p () ? 0 : 1;
+ LONGEST n_elts = (high1 - low1 + 1) + (high2 - low2 + 1);
+ struct type *atype = lookup_array_range_type (elttype1,
+ lowbound,
+ lowbound + n_elts - 1);
+
+ struct value *result = allocate_value (atype);
+ gdb::array_view<gdb_byte> contents = value_contents_raw (result);
+ gdb::array_view<const gdb_byte> lhs_contents = value_contents (arg1);
+ gdb::array_view<const gdb_byte> rhs_contents = value_contents (arg2);
+ gdb::copy (lhs_contents, contents.slice (0, lhs_contents.size ()));
+ gdb::copy (rhs_contents, contents.slice (lhs_contents.size ()));
+
+ return result;
}
/* Integer exponentiation: V1**V2, where both arguments are
@@ -1157,6 +1070,66 @@ complex_binop (struct value *arg1, struct value *arg2, enum exp_opcode op)
return value_literal_complex (result_real, result_imag, result_type);
}
+/* Return the type's length in bits. */
+
+static int
+type_length_bits (type *type)
+{
+ int unit_size = gdbarch_addressable_memory_unit_size (type->arch ());
+ return unit_size * 8 * TYPE_LENGTH (type);
+}
+
+/* Check whether the RHS value of a shift is valid in C/C++ semantics.
+ SHIFT_COUNT is the shift amount, SHIFT_COUNT_TYPE is the type of
+ the shift count value, used to determine whether the type is
+ signed, and RESULT_TYPE is the result type. This is used to avoid
+ both negative and too-large shift amounts, which are undefined, and
+ would crash a GDB built with UBSan. Depending on the current
+ language, if the shift is not valid, this either warns and returns
+ false, or errors out. Returns true if valid. */
+
+static bool
+check_valid_shift_count (int op, type *result_type,
+ type *shift_count_type, ULONGEST shift_count)
+{
+ if (!shift_count_type->is_unsigned () && (LONGEST) shift_count < 0)
+ {
+ auto error_or_warning = [] (const char *msg)
+ {
+ /* Shifts by a negative amount are always an error in Go. Other
+ languages are more permissive and their compilers just warn or
+ have modes to disable the errors. */
+ if (current_language->la_language == language_go)
+ error (("%s"), msg);
+ else
+ warning (("%s"), msg);
+ };
+
+ if (op == BINOP_RSH)
+ error_or_warning (_("right shift count is negative"));
+ else
+ error_or_warning (_("left shift count is negative"));
+ return false;
+ }
+
+ if (shift_count >= type_length_bits (result_type))
+ {
+ /* In Go, shifting by large amounts is defined. Be silent and
+ still return false, as the caller's error path does the right
+ thing for Go. */
+ if (current_language->la_language != language_go)
+ {
+ if (op == BINOP_RSH)
+ warning (_("right shift count >= width of type"));
+ else
+ warning (_("left shift count >= width of type"));
+ }
+ return false;
+ }
+
+ return true;
+}
+
/* Perform a binary operation on two operands which have reasonable
representations as integers or floats. This includes booleans,
characters, integers, or floats.
@@ -1320,11 +1293,17 @@ scalar_binop (struct value *arg1, struct value *arg2, enum exp_opcode op)
break;
case BINOP_LSH:
- v = v1 << v2;
+ if (!check_valid_shift_count (op, result_type, type2, v2))
+ v = 0;
+ else
+ v = v1 << v2;
break;
case BINOP_RSH:
- v = v1 >> v2;
+ if (!check_valid_shift_count (op, result_type, type2, v2))
+ v = 0;
+ else
+ v = v1 >> v2;
break;
case BINOP_BITWISE_AND:
@@ -1449,11 +1428,40 @@ scalar_binop (struct value *arg1, struct value *arg2, enum exp_opcode op)
break;
case BINOP_LSH:
- v = v1 << v2;
+ if (!check_valid_shift_count (op, result_type, type2, v2))
+ v = 0;
+ else
+ {
+ /* Cast to unsigned to avoid undefined behavior on
+ signed shift overflow (unless C++20 or later),
+ which would crash GDB when built with UBSan.
+ Note we don't warn on left signed shift overflow,
+ because starting with C++20, that is actually
+ defined behavior. Also, note GDB assumes 2's
+ complement throughout. */
+ v = (ULONGEST) v1 << v2;
+ }
break;
case BINOP_RSH:
- v = v1 >> v2;
+ if (!check_valid_shift_count (op, result_type, type2, v2))
+ {
+ /* Pretend the too-large shift was decomposed in a
+ number of smaller shifts. An arithmetic signed
+ right shift of a negative number always yields -1
+ with such semantics. This is the right thing to
+ do for Go, and we might as well do it for
+ languages where it is undefined. Also, pretend a
+ shift by a negative number was a shift by the
+ negative number cast to unsigned, which is the
+ same as shifting by a too-large number. */
+ if (v1 < 0)
+ v = -1;
+ else
+ v = 0;
+ }
+ else
+ v = v1 >> v2;
break;
case BINOP_BITWISE_AND:
diff --git a/gdb/valops.c b/gdb/valops.c
index e091c445e79..27e84d9f6b3 100644
--- a/gdb/valops.c
+++ b/gdb/valops.c
@@ -103,9 +103,9 @@ show_overload_resolution (struct ui_file *file, int from_tty,
struct cmd_list_element *c,
const char *value)
{
- fprintf_filtered (file, _("Overload resolution in evaluating "
- "C++ functions is %s.\n"),
- value);
+ gdb_printf (file, _("Overload resolution in evaluating "
+ "C++ functions is %s.\n"),
+ value);
}
/* Find the address of function name NAME in the inferior. If OBJF_P
@@ -120,14 +120,14 @@ find_function_in_inferior (const char *name, struct objfile **objf_p)
sym = lookup_symbol (name, 0, VAR_DOMAIN, 0);
if (sym.symbol != NULL)
{
- if (SYMBOL_CLASS (sym.symbol) != LOC_BLOCK)
+ if (sym.symbol->aclass () != LOC_BLOCK)
{
error (_("\"%s\" exists in this program but is not a function."),
name);
}
if (objf_p)
- *objf_p = symbol_objfile (sym.symbol);
+ *objf_p = sym.symbol->objfile ();
return value_of_variable (sym.symbol, sym.block);
}
@@ -146,7 +146,7 @@ find_function_in_inferior (const char *name, struct objfile **objf_p)
type = lookup_pointer_type (builtin_type (gdbarch)->builtin_char);
type = lookup_function_type (type);
type = lookup_pointer_type (type);
- maddr = BMSYMBOL_VALUE_ADDRESS (msymbol);
+ maddr = msymbol.value_address ();
if (objf_p)
*objf_p = objfile;
@@ -274,7 +274,7 @@ value_cast_structs (struct type *type, struct value *v2)
if (v)
{
/* Downcasting is possible (t1 is superclass of v2). */
- CORE_ADDR addr2 = value_address (v2);
+ CORE_ADDR addr2 = value_address (v2) + value_embedded_offset (v2);
addr2 -= value_address (v) + value_embedded_offset (v);
return value_at (type, addr2);
@@ -1387,7 +1387,7 @@ value_of_variable (struct symbol *var, const struct block *b)
struct value *
address_of_variable (struct symbol *var, const struct block *b)
{
- struct type *type = SYMBOL_TYPE (var);
+ struct type *type = var->type ();
struct value *val;
/* Evaluate it first; if the result is a memory address, we're fine.
@@ -2374,6 +2374,15 @@ value_struct_elt (struct value **argp,
if (v)
return v;
+ if (current_language->la_language == language_fortran)
+ {
+ /* If it is not a field it is the type name of an inherited
+ structure. */
+ v = search_struct_field (name, *argp, t, 1);
+ if (v)
+ return v;
+ }
+
/* C++: If it was not found as a data field, then try to
return it as a pointer to a method. */
v = search_struct_method (name, argp, args, 0,
@@ -2833,7 +2842,7 @@ find_overload_match (gdb::array_view<value *> args,
the function part. Do not try this for non-functions (e.g.
function pointers). */
if (qualified_name
- && (check_typedef (SYMBOL_TYPE (fsym))->code ()
+ && (check_typedef (fsym->type ())->code ()
== TYPE_CODE_FUNC))
{
temp_func = cp_func_name (qualified_name);
@@ -3187,14 +3196,14 @@ find_oload_champ (gdb::array_view<value *> args,
static_offset = oload_method_static_p (methods, ix);
}
else
- nparms = SYMBOL_TYPE (functions[ix])->num_fields ();
+ nparms = functions[ix]->type ()->num_fields ();
parm_types.reserve (nparms);
for (jj = 0; jj < nparms; jj++)
{
type *t = (methods != NULL
? (TYPE_FN_FIELD_ARGS (methods, ix)[jj].type ())
- : SYMBOL_TYPE (functions[ix])->field (jj).type ());
+ : functions[ix]->type ()->field (jj).type ());
parm_types.push_back (t);
}
}
@@ -3207,28 +3216,28 @@ find_oload_champ (gdb::array_view<value *> args,
if (overload_debug)
{
if (methods != NULL)
- fprintf_filtered (gdb_stderr,
- "Overloaded method instance %s, # of parms %d\n",
- methods[ix].physname, (int) parm_types.size ());
+ gdb_printf (gdb_stderr,
+ "Overloaded method instance %s, # of parms %d\n",
+ methods[ix].physname, (int) parm_types.size ());
else if (xmethods != NULL)
- fprintf_filtered (gdb_stderr,
- "Xmethod worker, # of parms %d\n",
- (int) parm_types.size ());
+ gdb_printf (gdb_stderr,
+ "Xmethod worker, # of parms %d\n",
+ (int) parm_types.size ());
else
- fprintf_filtered (gdb_stderr,
- "Overloaded function instance "
- "%s # of parms %d\n",
- functions[ix]->demangled_name (),
- (int) parm_types.size ());
+ gdb_printf (gdb_stderr,
+ "Overloaded function instance "
+ "%s # of parms %d\n",
+ functions[ix]->demangled_name (),
+ (int) parm_types.size ());
- fprintf_filtered (gdb_stderr,
- "...Badness of length : {%d, %d}\n",
- bv[0].rank, bv[0].subrank);
+ gdb_printf (gdb_stderr,
+ "...Badness of length : {%d, %d}\n",
+ bv[0].rank, bv[0].subrank);
for (jj = 1; jj < bv.size (); jj++)
- fprintf_filtered (gdb_stderr,
- "...Badness of arg %d : {%d, %d}\n",
- jj, bv[jj].rank, bv[jj].subrank);
+ gdb_printf (gdb_stderr,
+ "...Badness of arg %d : {%d, %d}\n",
+ jj, bv[jj].rank, bv[jj].subrank);
}
if (oload_champ_bv->empty ())
@@ -3256,9 +3265,9 @@ find_oload_champ (gdb::array_view<value *> args,
break;
}
if (overload_debug)
- fprintf_filtered (gdb_stderr, "Overload resolution "
- "champion is %d, ambiguous? %d\n",
- oload_champ, oload_ambiguous);
+ gdb_printf (gdb_stderr, "Overload resolution "
+ "champion is %d, ambiguous? %d\n",
+ oload_champ, oload_ambiguous);
}
return oload_champ;
@@ -3779,8 +3788,8 @@ value_maybe_namespace_elt (const struct type *curtype,
if (sym.symbol == NULL)
return NULL;
else if ((noside == EVAL_AVOID_SIDE_EFFECTS)
- && (SYMBOL_CLASS (sym.symbol) == LOC_TYPEDEF))
- result = allocate_value (SYMBOL_TYPE (sym.symbol));
+ && (sym.symbol->aclass () == LOC_TYPEDEF))
+ result = allocate_value (sym.symbol->type ());
else
result = value_of_variable (sym.symbol, sym.block);
diff --git a/gdb/valprint.c b/gdb/valprint.c
index 0bc739cf2e2..47114676934 100644
--- a/gdb/valprint.c
+++ b/gdb/valprint.c
@@ -30,7 +30,7 @@
#include "target-float.h"
#include "extension.h"
#include "ada-lang.h"
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
#include "charset.h"
#include "typeprint.h"
#include <ctype.h>
@@ -85,9 +85,6 @@ struct cmd_list_element *showprintrawlist;
/* Prototypes for local functions */
-static int partial_memory_read (CORE_ADDR memaddr, gdb_byte *myaddr,
- int len, int *errptr);
-
static void set_input_radix_1 (int, unsigned);
static void set_output_radix_1 (int, unsigned);
@@ -156,10 +153,10 @@ static void
show_print_max (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file,
- _("Limit on string chars or array "
- "elements to print is %s.\n"),
- value);
+ gdb_printf (file,
+ _("Limit on string chars or array "
+ "elements to print is %s.\n"),
+ value);
}
@@ -170,9 +167,9 @@ static void
show_input_radix (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file,
- _("Default input radix for entering numbers is %s.\n"),
- value);
+ gdb_printf (file,
+ _("Default input radix for entering numbers is %s.\n"),
+ value);
}
unsigned output_radix = 10;
@@ -180,9 +177,9 @@ static void
show_output_radix (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file,
- _("Default output radix for printing of values is %s.\n"),
- value);
+ gdb_printf (file,
+ _("Default output radix for printing of values is %s.\n"),
+ value);
}
/* By default we print arrays without printing the index of each element in
@@ -192,7 +189,7 @@ static void
show_print_array_indexes (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Printing of array indexes is %s.\n"), value);
+ gdb_printf (file, _("Printing of array indexes is %s.\n"), value);
}
/* Print repeat counts if there are more than this many repetitions of an
@@ -203,8 +200,8 @@ static void
show_repeat_count_threshold (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Threshold for repeated print elements is %s.\n"),
- value);
+ gdb_printf (file, _("Threshold for repeated print elements is %s.\n"),
+ value);
}
/* If nonzero, prints memory tag violations for pointers. */
@@ -213,9 +210,9 @@ static void
show_memory_tag_violations (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file,
- _("Printing of memory tag violations is %s.\n"),
- value);
+ gdb_printf (file,
+ _("Printing of memory tag violations is %s.\n"),
+ value);
}
/* If nonzero, stops printing of char arrays at first null. */
@@ -224,10 +221,10 @@ static void
show_stop_print_at_null (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file,
- _("Printing of char arrays to stop "
- "at first null char is %s.\n"),
- value);
+ gdb_printf (file,
+ _("Printing of char arrays to stop "
+ "at first null char is %s.\n"),
+ value);
}
/* Controls pretty printing of structures. */
@@ -236,7 +233,7 @@ static void
show_prettyformat_structs (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Pretty formatting of structures is %s.\n"), value);
+ gdb_printf (file, _("Pretty formatting of structures is %s.\n"), value);
}
/* Controls pretty printing of arrays. */
@@ -245,7 +242,7 @@ static void
show_prettyformat_arrays (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Pretty formatting of arrays is %s.\n"), value);
+ gdb_printf (file, _("Pretty formatting of arrays is %s.\n"), value);
}
/* If nonzero, causes unions inside structures or other unions to be
@@ -255,9 +252,9 @@ static void
show_unionprint (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file,
- _("Printing of unions interior to structures is %s.\n"),
- value);
+ gdb_printf (file,
+ _("Printing of unions interior to structures is %s.\n"),
+ value);
}
/* If nonzero, causes machine addresses to be printed in certain contexts. */
@@ -266,16 +263,16 @@ static void
show_addressprint (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Printing of addresses is %s.\n"), value);
+ gdb_printf (file, _("Printing of addresses is %s.\n"), value);
}
static void
show_symbol_print (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file,
- _("Printing of symbols when printing pointers is %s.\n"),
- value);
+ gdb_printf (file,
+ _("Printing of symbols when printing pointers is %s.\n"),
+ value);
}
@@ -435,7 +432,7 @@ print_unpacked_pointer (struct type *type, struct type *elttype,
if (options->symbol_print)
print_address_demangle (options, gdbarch, address, stream, demangle);
else if (options->addressprint)
- fputs_filtered (paddress (gdbarch, address), stream);
+ gdb_puts (paddress (gdbarch, address), stream);
}
/* generic_val_print helper for TYPE_CODE_ARRAY. */
@@ -458,9 +455,9 @@ generic_val_print_array (struct value *val,
if (!get_array_bounds (type, &low_bound, &high_bound))
error (_("Could not determine the array high bound"));
- fputs_filtered (decorations->array_start, stream);
+ gdb_puts (decorations->array_start, stream);
value_print_array_elements (val, stream, recurse, options, 0);
- fputs_filtered (decorations->array_end, stream);
+ gdb_puts (decorations->array_end, stream);
}
else
{
@@ -505,8 +502,8 @@ print_ref_address (struct type *type, const gdb_byte *address_buffer,
CORE_ADDR address
= extract_typed_address (address_buffer + embedded_offset, type);
- fprintf_filtered (stream, "@");
- fputs_filtered (paddress (gdbarch, address), stream);
+ gdb_printf (stream, "@");
+ gdb_puts (paddress (gdbarch, address), stream);
}
/* Else: we have a non-addressable value, such as a DW_AT_const_value. */
}
@@ -581,7 +578,7 @@ generic_val_print_ref (struct type *type,
print_ref_address (type, address, embedded_offset, stream);
if (options->deref_ref)
- fputs_filtered (": ", stream);
+ gdb_puts (": ", stream);
}
if (options->deref_ref)
@@ -590,7 +587,7 @@ generic_val_print_ref (struct type *type,
common_val_print (deref_val, stream, recurse, options,
current_language);
else
- fputs_filtered ("???", stream);
+ gdb_puts ("???", stream);
}
}
@@ -639,11 +636,11 @@ generic_val_print_enum_1 (struct type *type, LONGEST val,
{
if (first)
{
- fputs_filtered ("(", stream);
+ gdb_puts ("(", stream);
first = 0;
}
else
- fputs_filtered (" | ", stream);
+ gdb_puts (" | ", stream);
val &= ~type->field (i).loc_enumval ();
fputs_styled (type->field (i).name (),
@@ -655,24 +652,24 @@ generic_val_print_enum_1 (struct type *type, LONGEST val,
{
/* There are leftover bits, print them. */
if (first)
- fputs_filtered ("(", stream);
+ gdb_puts ("(", stream);
else
- fputs_filtered (" | ", stream);
+ gdb_puts (" | ", stream);
- fputs_filtered ("unknown: 0x", stream);
+ gdb_puts ("unknown: 0x", stream);
print_longest (stream, 'x', 0, val);
- fputs_filtered (")", stream);
+ gdb_puts (")", stream);
}
else if (first)
{
/* Nothing has been printed and the value is 0, the enum value must
have been 0. */
- fputs_filtered ("0", stream);
+ gdb_puts ("0", stream);
}
else
{
/* Something has been printed, close the parenthesis. */
- fputs_filtered (")", stream);
+ gdb_puts (")", stream);
}
}
else
@@ -716,9 +713,9 @@ generic_val_print_func (struct type *type,
/* FIXME, we should consider, at least for ANSI C language,
eliminating the distinction made between FUNCs and POINTERs to
FUNCs. */
- fprintf_filtered (stream, "{");
+ gdb_printf (stream, "{");
type_print (type, "", stream, -1);
- fprintf_filtered (stream, "} ");
+ gdb_printf (stream, "} ");
/* Try to print what function it points to, and its address. */
print_address_demangle (options, gdbarch, address, stream, demangle);
}
@@ -744,9 +741,9 @@ generic_value_print_bool
struct type *type = check_typedef (value_type (value));
LONGEST val = unpack_long (type, valaddr);
if (val == 0)
- fputs_filtered (decorations->false_name, stream);
+ gdb_puts (decorations->false_name, stream);
else if (val == 1)
- fputs_filtered (decorations->true_name, stream);
+ gdb_puts (decorations->true_name, stream);
else
print_longest (stream, 'd', 0, val);
}
@@ -787,11 +784,11 @@ generic_value_print_char (struct value *value, struct ui_file *stream,
LONGEST val = unpack_long (type, valaddr);
if (type->is_unsigned ())
- fprintf_filtered (stream, "%u", (unsigned int) val);
+ gdb_printf (stream, "%u", (unsigned int) val);
else
- fprintf_filtered (stream, "%d", (int) val);
- fputs_filtered (" ", stream);
- LA_PRINT_CHAR (val, unresolved_type, stream);
+ gdb_printf (stream, "%d", (int) val);
+ gdb_puts (" ", stream);
+ current_language->printchar (val, unresolved_type, stream);
}
}
@@ -830,7 +827,7 @@ generic_val_print_fixed_point (struct value *val, struct ui_file *stream,
const char *fmt = TYPE_LENGTH (type) < 4 ? "%.11Fg" : "%.17Fg";
std::string str = gmp_string_printf (fmt, f.val);
- fprintf_filtered (stream, "%s", str.c_str ());
+ gdb_printf (stream, "%s", str.c_str ());
}
}
@@ -842,15 +839,15 @@ generic_value_print_complex (struct value *val, struct ui_file *stream,
const struct generic_val_print_decorations
*decorations)
{
- fprintf_filtered (stream, "%s", decorations->complex_prefix);
+ gdb_printf (stream, "%s", decorations->complex_prefix);
struct value *real_part = value_real_part (val);
value_print_scalar_formatted (real_part, options, 0, stream);
- fprintf_filtered (stream, "%s", decorations->complex_infix);
+ gdb_printf (stream, "%s", decorations->complex_infix);
struct value *imag_part = value_imaginary_part (val);
value_print_scalar_formatted (imag_part, options, 0, stream);
- fprintf_filtered (stream, "%s", decorations->complex_suffix);
+ gdb_printf (stream, "%s", decorations->complex_suffix);
}
/* generic_value_print helper for TYPE_CODE_MEMBERPTR. */
@@ -888,6 +885,14 @@ generic_value_print (struct value *val, struct ui_file *stream, int recurse,
if (is_fixed_point_type (type))
type = type->fixed_point_type_base_type ();
+ /* Widen a subrange to its target type, then use that type's
+ printer. */
+ while (type->code () == TYPE_CODE_RANGE)
+ {
+ type = check_typedef (TYPE_TARGET_TYPE (type));
+ val = value_cast (type, val);
+ }
+
switch (type->code ())
{
case TYPE_CODE_ARRAY:
@@ -936,7 +941,6 @@ generic_value_print (struct value *val, struct ui_file *stream, int recurse,
generic_value_print_bool (val, stream, options, decorations);
break;
- case TYPE_CODE_RANGE:
case TYPE_CODE_INT:
generic_value_print_int (val, stream, options);
break;
@@ -958,11 +962,11 @@ generic_value_print (struct value *val, struct ui_file *stream, int recurse,
break;
case TYPE_CODE_VOID:
- fputs_filtered (decorations->void_name, stream);
+ gdb_puts (decorations->void_name, stream);
break;
case TYPE_CODE_ERROR:
- fprintf_filtered (stream, "%s", TYPE_ERROR_NAME (type));
+ gdb_printf (stream, "%s", TYPE_ERROR_NAME (type));
break;
case TYPE_CODE_UNDEF:
@@ -989,16 +993,27 @@ generic_value_print (struct value *val, struct ui_file *stream, int recurse,
}
}
-/* Helper function for val_print and common_val_print that does the
- work. Arguments are as to val_print, but FULL_VALUE, if given, is
- the value to be printed. */
+/* Print using the given LANGUAGE the value VAL onto stream STREAM according
+ to OPTIONS.
-static void
-do_val_print (struct value *value, struct ui_file *stream, int recurse,
- const struct value_print_options *options,
- const struct language_defn *language)
+ This is a preferable interface to val_print, above, because it uses
+ GDB's value mechanism. */
+
+void
+common_val_print (struct value *value, struct ui_file *stream, int recurse,
+ const struct value_print_options *options,
+ const struct language_defn *language)
{
- int ret = 0;
+ if (language->la_language == language_ada)
+ /* The value might have a dynamic type, which would cause trouble
+ below when trying to extract the value contents (since the value
+ size is determined from the type size which is unknown). So
+ get a fixed representation of our value. */
+ value = ada_to_fixed_value (value);
+
+ if (value_lazy (value))
+ value_fetch_lazy (value);
+
struct value_print_options local_opts = *options;
struct type *type = value_type (value);
struct type *real_type = check_typedef (type);
@@ -1024,9 +1039,8 @@ do_val_print (struct value *value, struct ui_file *stream, int recurse,
if (!options->raw)
{
- ret = apply_ext_lang_val_pretty_printer (value, stream, recurse, options,
- language);
- if (ret)
+ if (apply_ext_lang_val_pretty_printer (value, stream, recurse, options,
+ language))
return;
}
@@ -1034,7 +1048,7 @@ do_val_print (struct value *value, struct ui_file *stream, int recurse,
otherwise, print an ellipsis. */
if (options->summary && !val_print_scalar_type_p (type))
{
- fprintf_filtered (stream, "...");
+ gdb_printf (stream, "...");
return;
}
@@ -1064,7 +1078,7 @@ val_print_check_max_depth (struct ui_file *stream, int recurse,
if (options->max_depth > -1 && recurse >= options->max_depth)
{
gdb_assert (language->struct_too_deep_ellipsis () != NULL);
- fputs_filtered (language->struct_too_deep_ellipsis (), stream);
+ gdb_puts (language->struct_too_deep_ellipsis (), stream);
return true;
}
@@ -1089,7 +1103,7 @@ value_check_printable (struct value *val, struct ui_file *stream,
if (value_entirely_optimized_out (val))
{
if (options->summary && !val_print_scalar_type_p (value_type (val)))
- fprintf_filtered (stream, "...");
+ gdb_printf (stream, "...");
else
val_print_optimized_out (val, stream);
return 0;
@@ -1098,7 +1112,7 @@ value_check_printable (struct value *val, struct ui_file *stream,
if (value_entirely_unavailable (val))
{
if (options->summary && !val_print_scalar_type_p (value_type (val)))
- fprintf_filtered (stream, "...");
+ gdb_printf (stream, "...");
else
val_print_unavailable (stream);
return 0;
@@ -1127,30 +1141,6 @@ value_check_printable (struct value *val, struct ui_file *stream,
return 1;
}
-/* Print using the given LANGUAGE the value VAL onto stream STREAM according
- to OPTIONS.
-
- This is a preferable interface to val_print, above, because it uses
- GDB's value mechanism. */
-
-void
-common_val_print (struct value *val, struct ui_file *stream, int recurse,
- const struct value_print_options *options,
- const struct language_defn *language)
-{
- if (language->la_language == language_ada)
- /* The value might have a dynamic type, which would cause trouble
- below when trying to extract the value contents (since the value
- size is determined from the type size which is unknown). So
- get a fixed representation of our value. */
- val = ada_to_fixed_value (val);
-
- if (value_lazy (val))
- value_fetch_lazy (val);
-
- do_val_print (val, stream, recurse, options, language);
-}
-
/* See valprint.h. */
void
@@ -1200,7 +1190,7 @@ val_print_type_code_flags (struct type *type, struct value *original_value,
struct gdbarch *gdbarch = type->arch ();
struct type *bool_type = builtin_type (gdbarch)->builtin_bool;
- fputs_filtered ("[", stream);
+ gdb_puts ("[", stream);
for (field = 0; field < nfields; field++)
{
if (type->field (field).name ()[0] != '\0')
@@ -1215,7 +1205,7 @@ val_print_type_code_flags (struct type *type, struct value *original_value,
&& TYPE_FIELD_BITSIZE (type, field) == 1)
{
if (val & ((ULONGEST)1 << type->field (field).loc_bitpos ()))
- fprintf_filtered
+ gdb_printf
(stream, " %ps",
styled_string (variable_name_style.style (),
type->field (field).name ()));
@@ -1227,9 +1217,9 @@ val_print_type_code_flags (struct type *type, struct value *original_value,
if (field_len < sizeof (ULONGEST) * TARGET_CHAR_BIT)
field_val &= ((ULONGEST) 1 << field_len) - 1;
- fprintf_filtered (stream, " %ps=",
- styled_string (variable_name_style.style (),
- type->field (field).name ()));
+ gdb_printf (stream, " %ps=",
+ styled_string (variable_name_style.style (),
+ type->field (field).name ()));
if (field_type->code () == TYPE_CODE_ENUM)
generic_val_print_enum_1 (field_type, field_val, stream);
else
@@ -1237,7 +1227,7 @@ val_print_type_code_flags (struct type *type, struct value *original_value,
}
}
}
- fputs_filtered (" ]", stream);
+ gdb_puts (" ]", stream);
}
/* See valprint.h. */
@@ -1328,7 +1318,7 @@ print_longest (struct ui_file *stream, int format, int use_c_format,
internal_error (__FILE__, __LINE__,
_("failed internal consistency check"));
}
- fputs_filtered (val, stream);
+ gdb_puts (val, stream);
}
/* This used to be a macro, but I don't think it is called often enough
@@ -1362,7 +1352,7 @@ print_floating (const gdb_byte *valaddr, struct type *type,
struct ui_file *stream)
{
std::string str = target_float_to_string (valaddr, type);
- fputs_filtered (str.c_str (), stream);
+ gdb_puts (str.c_str (), stream);
}
void
@@ -1396,7 +1386,7 @@ print_binary_chars (struct ui_file *stream, const gdb_byte *valaddr,
b = '0';
if (zero_pad || seen_a_one || b == '1')
- fputc_filtered (b, stream);
+ gdb_putc (b, stream);
if (b == '1')
seen_a_one = true;
}
@@ -1416,7 +1406,7 @@ print_binary_chars (struct ui_file *stream, const gdb_byte *valaddr,
b = '0';
if (zero_pad || seen_a_one || b == '1')
- fputc_filtered (b, stream);
+ gdb_putc (b, stream);
if (b == '1')
seen_a_one = true;
}
@@ -1426,7 +1416,7 @@ print_binary_chars (struct ui_file *stream, const gdb_byte *valaddr,
/* When not zero-padding, ensure that something is printed when the
input is 0. */
if (!zero_pad && !seen_a_one)
- fputc_filtered ('0', stream);
+ gdb_putc ('0', stream);
}
/* A helper for print_octal_chars that emits a single octal digit,
@@ -1436,7 +1426,7 @@ static void
emit_octal_digit (struct ui_file *stream, bool *seen_a_one, int digit)
{
if (*seen_a_one || digit != 0)
- fprintf_filtered (stream, "%o", digit);
+ gdb_printf (stream, "%o", digit);
if (digit != 0)
*seen_a_one = true;
}
@@ -1491,7 +1481,7 @@ print_octal_chars (struct ui_file *stream, const gdb_byte *valaddr,
cycle = (len * HOST_CHAR_BIT) % BITS_IN_OCTAL;
carry = 0;
- fputs_filtered ("0", stream);
+ gdb_puts ("0", stream);
bool seen_a_one = false;
if (byte_order == BFD_ENDIAN_BIG)
{
@@ -1668,7 +1658,7 @@ print_decimal_chars (struct ui_file *stream, const gdb_byte *valaddr,
if (is_signed
&& maybe_negate_by_bytes (valaddr, len, byte_order, &negated_bytes))
{
- fputs_filtered ("-", stream);
+ gdb_puts ("-", stream);
valaddr = negated_bytes.data ();
}
@@ -1775,7 +1765,7 @@ print_decimal_chars (struct ui_file *stream, const gdb_byte *valaddr,
for (; i >= 0; i--)
{
- fprintf_filtered (stream, "%1d", digits[i]);
+ gdb_printf (stream, "%1d", digits[i]);
}
}
@@ -1788,7 +1778,7 @@ print_hex_chars (struct ui_file *stream, const gdb_byte *valaddr,
{
const gdb_byte *p;
- fputs_filtered ("0x", stream);
+ gdb_puts ("0x", stream);
if (byte_order == BFD_ENDIAN_BIG)
{
p = valaddr;
@@ -1809,9 +1799,9 @@ print_hex_chars (struct ui_file *stream, const gdb_byte *valaddr,
/* When not zero-padding, use a different format for the
very first byte printed. */
if (!zero_pad && p == first)
- fprintf_filtered (stream, "%x", *p);
+ gdb_printf (stream, "%x", *p);
else
- fprintf_filtered (stream, "%02x", *p);
+ gdb_printf (stream, "%02x", *p);
}
}
else
@@ -1834,9 +1824,9 @@ print_hex_chars (struct ui_file *stream, const gdb_byte *valaddr,
/* When not zero-padding, use a different format for the
very first byte printed. */
if (!zero_pad && p == first)
- fprintf_filtered (stream, "%x", *p);
+ gdb_printf (stream, "%x", *p);
else
- fprintf_filtered (stream, "%02x", *p);
+ gdb_printf (stream, "%02x", *p);
}
}
}
@@ -1857,9 +1847,9 @@ print_function_pointer_address (const struct value_print_options *options,
the address of the description. */
if (options->addressprint && func_addr != address)
{
- fputs_filtered ("@", stream);
- fputs_filtered (paddress (gdbarch, address), stream);
- fputs_filtered (": ", stream);
+ gdb_puts ("@", stream);
+ gdb_puts (paddress (gdbarch, address), stream);
+ gdb_puts (": ", stream);
}
print_address_demangle (options, gdbarch, func_addr, stream, demangle);
}
@@ -1935,18 +1925,18 @@ value_print_array_elements (struct value *val, struct ui_file *stream,
{
if (options->prettyformat_arrays)
{
- fprintf_filtered (stream, ",\n");
- print_spaces_filtered (2 + 2 * recurse, stream);
+ gdb_printf (stream, ",\n");
+ print_spaces (2 + 2 * recurse, stream);
}
else
- fprintf_filtered (stream, ", ");
+ gdb_printf (stream, ", ");
}
else if (options->prettyformat_arrays)
{
- fprintf_filtered (stream, "\n");
- print_spaces_filtered (2 + 2 * recurse, stream);
+ gdb_printf (stream, "\n");
+ print_spaces (2 + 2 * recurse, stream);
}
- wrap_here (n_spaces (2 + 2 * recurse));
+ stream->wrap_here (2 + 2 * recurse);
maybe_print_array_index (index_type, i + low_bound,
stream, options);
@@ -1973,8 +1963,8 @@ value_print_array_elements (struct value *val, struct ui_file *stream,
if (reps > options->repeat_count_threshold)
{
annotate_elt_rep (reps);
- fprintf_filtered (stream, " %p[<repeats %u times>%p]",
- metadata_style.style ().ptr (), reps, nullptr);
+ gdb_printf (stream, " %p[<repeats %u times>%p]",
+ metadata_style.style ().ptr (), reps, nullptr);
annotate_elt_rep_end ();
i = rep1 - 1;
@@ -1988,180 +1978,12 @@ value_print_array_elements (struct value *val, struct ui_file *stream,
}
annotate_array_section_end ();
if (i < len)
- fprintf_filtered (stream, "...");
+ gdb_printf (stream, "...");
if (options->prettyformat_arrays)
{
- fprintf_filtered (stream, "\n");
- print_spaces_filtered (2 * recurse, stream);
- }
-}
-
-/* Read LEN bytes of target memory at address MEMADDR, placing the
- results in GDB's memory at MYADDR. Returns a count of the bytes
- actually read, and optionally a target_xfer_status value in the
- location pointed to by ERRPTR if ERRPTR is non-null. */
-
-/* FIXME: cagney/1999-10-14: Only used by val_print_string. Can this
- function be eliminated. */
-
-static int
-partial_memory_read (CORE_ADDR memaddr, gdb_byte *myaddr,
- int len, int *errptr)
-{
- int nread; /* Number of bytes actually read. */
- int errcode; /* Error from last read. */
-
- /* First try a complete read. */
- errcode = target_read_memory (memaddr, myaddr, len);
- if (errcode == 0)
- {
- /* Got it all. */
- nread = len;
- }
- else
- {
- /* Loop, reading one byte at a time until we get as much as we can. */
- for (errcode = 0, nread = 0; len > 0 && errcode == 0; nread++, len--)
- {
- errcode = target_read_memory (memaddr++, myaddr++, 1);
- }
- /* If an error, the last read was unsuccessful, so adjust count. */
- if (errcode != 0)
- {
- nread--;
- }
+ gdb_printf (stream, "\n");
+ print_spaces (2 * recurse, stream);
}
- if (errptr != NULL)
- {
- *errptr = errcode;
- }
- return (nread);
-}
-
-/* Read a string from the inferior, at ADDR, with LEN characters of
- WIDTH bytes each. Fetch at most FETCHLIMIT characters. BUFFER
- will be set to a newly allocated buffer containing the string, and
- BYTES_READ will be set to the number of bytes read. Returns 0 on
- success, or a target_xfer_status on failure.
-
- If LEN > 0, reads the lesser of LEN or FETCHLIMIT characters
- (including eventual NULs in the middle or end of the string).
-
- If LEN is -1, stops at the first null character (not necessarily
- the first null byte) up to a maximum of FETCHLIMIT characters. Set
- FETCHLIMIT to UINT_MAX to read as many characters as possible from
- the string.
-
- Unless an exception is thrown, BUFFER will always be allocated, even on
- failure. In this case, some characters might have been read before the
- failure happened. Check BYTES_READ to recognize this situation. */
-
-int
-read_string (CORE_ADDR addr, int len, int width, unsigned int fetchlimit,
- enum bfd_endian byte_order, gdb::unique_xmalloc_ptr<gdb_byte> *buffer,
- int *bytes_read)
-{
- int errcode; /* Errno returned from bad reads. */
- unsigned int nfetch; /* Chars to fetch / chars fetched. */
- gdb_byte *bufptr; /* Pointer to next available byte in
- buffer. */
-
- /* Loop until we either have all the characters, or we encounter
- some error, such as bumping into the end of the address space. */
-
- buffer->reset (nullptr);
-
- if (len > 0)
- {
- /* We want fetchlimit chars, so we might as well read them all in
- one operation. */
- unsigned int fetchlen = std::min ((unsigned) len, fetchlimit);
-
- buffer->reset ((gdb_byte *) xmalloc (fetchlen * width));
- bufptr = buffer->get ();
-
- nfetch = partial_memory_read (addr, bufptr, fetchlen * width, &errcode)
- / width;
- addr += nfetch * width;
- bufptr += nfetch * width;
- }
- else if (len == -1)
- {
- unsigned long bufsize = 0;
- unsigned int chunksize; /* Size of each fetch, in chars. */
- int found_nul; /* Non-zero if we found the nul char. */
- gdb_byte *limit; /* First location past end of fetch buffer. */
-
- found_nul = 0;
- /* We are looking for a NUL terminator to end the fetching, so we
- might as well read in blocks that are large enough to be efficient,
- but not so large as to be slow if fetchlimit happens to be large.
- So we choose the minimum of 8 and fetchlimit. We used to use 200
- instead of 8 but 200 is way too big for remote debugging over a
- serial line. */
- chunksize = std::min (8u, fetchlimit);
-
- do
- {
- QUIT;
- nfetch = std::min ((unsigned long) chunksize, fetchlimit - bufsize);
-
- if (*buffer == NULL)
- buffer->reset ((gdb_byte *) xmalloc (nfetch * width));
- else
- buffer->reset ((gdb_byte *) xrealloc (buffer->release (),
- (nfetch + bufsize) * width));
-
- bufptr = buffer->get () + bufsize * width;
- bufsize += nfetch;
-
- /* Read as much as we can. */
- nfetch = partial_memory_read (addr, bufptr, nfetch * width, &errcode)
- / width;
-
- /* Scan this chunk for the null character that terminates the string
- to print. If found, we don't need to fetch any more. Note
- that bufptr is explicitly left pointing at the next character
- after the null character, or at the next character after the end
- of the buffer. */
-
- limit = bufptr + nfetch * width;
- while (bufptr < limit)
- {
- unsigned long c;
-
- c = extract_unsigned_integer (bufptr, width, byte_order);
- addr += width;
- bufptr += width;
- if (c == 0)
- {
- /* We don't care about any error which happened after
- the NUL terminator. */
- errcode = 0;
- found_nul = 1;
- break;
- }
- }
- }
- while (errcode == 0 /* no error */
- && bufptr - buffer->get () < fetchlimit * width /* no overrun */
- && !found_nul); /* haven't found NUL yet */
- }
- else
- { /* Length of string is really 0! */
- /* We always allocate *buffer. */
- buffer->reset ((gdb_byte *) xmalloc (1));
- bufptr = buffer->get ();
- errcode = 0;
- }
-
- /* bufptr and addr now point immediately beyond the last byte which we
- consider part of the string (including a '\0' which ends the string). */
- *bytes_read = bufptr - buffer->get ();
-
- QUIT;
-
- return errcode;
}
/* Return true if print_wchar can display W without resorting to a
@@ -2360,7 +2182,7 @@ generic_emit_char (int c, struct type *type, struct ui_file *stream,
sizeof (gdb_wchar_t), &output, translit_char);
obstack_1grow (&output, '\0');
- fputs_filtered ((const char *) obstack_base (&output), stream);
+ gdb_puts ((const char *) obstack_base (&output), stream);
}
/* Return the repeat count of the next character/byte in ITER,
@@ -2646,7 +2468,7 @@ generic_printstr (struct ui_file *stream, struct type *type,
if (length == 0)
{
- fputs_filtered ("\"\"", stream);
+ gdb_puts ("\"\"", stream);
return;
}
@@ -2703,7 +2525,7 @@ generic_printstr (struct ui_file *stream, struct type *type,
sizeof (gdb_wchar_t), &output, translit_char);
obstack_1grow (&output, '\0');
- fputs_filtered ((const char *) obstack_base (&output), stream);
+ gdb_puts ((const char *) obstack_base (&output), stream);
}
/* Print a string from the inferior, starting at ADDR and printing up to LEN
@@ -2741,8 +2563,8 @@ val_print_string (struct type *elttype, const char *encoding,
fetchlimit = (len == -1 ? options->print_max : std::min ((unsigned) len,
options->print_max));
- err = read_string (addr, len, width, fetchlimit, byte_order,
- &buffer, &bytes_read);
+ err = target_read_string (addr, len, width, fetchlimit,
+ &buffer, &bytes_read);
addr += bytes_read;
@@ -2781,18 +2603,17 @@ val_print_string (struct type *elttype, const char *encoding,
But if we fetch something and then get an error, print the string
and then the error message. */
if (err == 0 || bytes_read > 0)
- {
- LA_PRINT_STRING (stream, elttype, buffer.get (), bytes_read / width,
- encoding, force_ellipsis, options);
- }
+ current_language->printstr (stream, elttype, buffer.get (),
+ bytes_read / width,
+ encoding, force_ellipsis, options);
if (err != 0)
{
std::string str = memory_error_message (TARGET_XFER_E_IO, gdbarch, addr);
- fprintf_filtered (stream, _("<error: %ps>"),
- styled_string (metadata_style.style (),
- str.c_str ()));
+ gdb_printf (stream, _("<error: %ps>"),
+ styled_string (metadata_style.style (),
+ str.c_str ()));
}
return (bytes_read / width);
@@ -2804,7 +2625,7 @@ static void
show_print_max_depth (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Maximum print depth is %s.\n"), value);
+ gdb_printf (file, _("Maximum print depth is %s.\n"), value);
}
@@ -2843,9 +2664,9 @@ set_input_radix_1 (int from_tty, unsigned radix)
input_radix_1 = input_radix = radix;
if (from_tty)
{
- printf_filtered (_("Input radix now set to "
- "decimal %u, hex %x, octal %o.\n"),
- radix, radix, radix);
+ gdb_printf (_("Input radix now set to "
+ "decimal %u, hex %x, octal %o.\n"),
+ radix, radix, radix);
}
}
@@ -2886,9 +2707,9 @@ set_output_radix_1 (int from_tty, unsigned radix)
output_radix_1 = output_radix = radix;
if (from_tty)
{
- printf_filtered (_("Output radix now set to "
- "decimal %u, hex %x, octal %o.\n"),
- radix, radix, radix);
+ gdb_printf (_("Output radix now set to "
+ "decimal %u, hex %x, octal %o.\n"),
+ radix, radix, radix);
}
}
@@ -2910,9 +2731,9 @@ set_radix (const char *arg, int from_tty)
set_input_radix_1 (0, radix);
if (from_tty)
{
- printf_filtered (_("Input and output radices now set to "
- "decimal %u, hex %x, octal %o.\n"),
- radix, radix, radix);
+ gdb_printf (_("Input and output radices now set to "
+ "decimal %u, hex %x, octal %o.\n"),
+ radix, radix, radix);
}
}
@@ -2925,18 +2746,18 @@ show_radix (const char *arg, int from_tty)
{
if (input_radix == output_radix)
{
- printf_filtered (_("Input and output radices set to "
- "decimal %u, hex %x, octal %o.\n"),
- input_radix, input_radix, input_radix);
+ gdb_printf (_("Input and output radices set to "
+ "decimal %u, hex %x, octal %o.\n"),
+ input_radix, input_radix, input_radix);
}
else
{
- printf_filtered (_("Input radix set to decimal "
- "%u, hex %x, octal %o.\n"),
- input_radix, input_radix, input_radix);
- printf_filtered (_("Output radix set to decimal "
- "%u, hex %x, octal %o.\n"),
- output_radix, output_radix, output_radix);
+ gdb_printf (_("Input radix set to decimal "
+ "%u, hex %x, octal %o.\n"),
+ input_radix, input_radix, input_radix);
+ gdb_printf (_("Output radix set to decimal "
+ "%u, hex %x, octal %o.\n"),
+ output_radix, output_radix, output_radix);
}
}
}
@@ -2947,9 +2768,9 @@ static void
show_vtblprint (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("\
+ gdb_printf (file, _("\
Printing of C++ virtual function tables is %s.\n"),
- value);
+ value);
}
/* Controls looking up an object's derived type using what we find in
@@ -2959,9 +2780,9 @@ show_objectprint (struct ui_file *file, int from_tty,
struct cmd_list_element *c,
const char *value)
{
- fprintf_filtered (file, _("\
+ gdb_printf (file, _("\
Printing of object's derived type based on vtable info is %s.\n"),
- value);
+ value);
}
static void
@@ -2969,9 +2790,9 @@ show_static_field_print (struct ui_file *file, int from_tty,
struct cmd_list_element *c,
const char *value)
{
- fprintf_filtered (file,
- _("Printing of C++ static members is %s.\n"),
- value);
+ gdb_printf (file,
+ _("Printing of C++ static members is %s.\n"),
+ value);
}
diff --git a/gdb/valprint.h b/gdb/valprint.h
index 0586836f9e6..ff536fbe4f0 100644
--- a/gdb/valprint.h
+++ b/gdb/valprint.h
@@ -165,12 +165,6 @@ extern void print_function_pointer_address (const struct value_print_options *op
CORE_ADDR address,
struct ui_file *stream);
-extern int read_string (CORE_ADDR addr, int len, int width,
- unsigned int fetchlimit,
- enum bfd_endian byte_order,
- gdb::unique_xmalloc_ptr<gdb_byte> *buffer,
- int *bytes_read);
-
/* Helper function to check the validity of some bits of a value.
If TYPE represents some aggregate type (e.g., a structure), return 1.
diff --git a/gdb/value.c b/gdb/value.c
index 37c949f0853..022fca91a42 100644
--- a/gdb/value.c
+++ b/gdb/value.c
@@ -343,8 +343,10 @@ struct value
LONGEST embedded_offset = 0;
LONGEST pointed_to_offset = 0;
- /* Actual contents of the value. Target byte-order. NULL or not
- valid if lazy is nonzero. */
+ /* Actual contents of the value. Target byte-order.
+
+ May be nullptr if the value is lazy or is entirely optimized out.
+ Guaranteed to be non-nullptr otherwise. */
gdb::unique_xmalloc_ptr<gdb_byte> contents;
/* Unavailable ranges in CONTENTS. We mark unavailable ranges,
@@ -989,10 +991,10 @@ show_max_value_size (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
if (max_value_size == -1)
- fprintf_filtered (file, _("Maximum value size is unlimited.\n"));
+ gdb_printf (file, _("Maximum value size is unlimited.\n"));
else
- fprintf_filtered (file, _("Maximum value size is %d bytes.\n"),
- max_value_size);
+ gdb_printf (file, _("Maximum value size is %d bytes.\n"),
+ max_value_size);
}
/* Called before we attempt to allocate or reallocate a buffer for the
@@ -1703,7 +1705,7 @@ value_release_to_mark (const struct value *mark)
but it's a different block of storage. */
struct value *
-value_copy (struct value *arg)
+value_copy (const value *arg)
{
struct type *encl_type = value_enclosing_type (arg);
struct value *val;
@@ -1713,7 +1715,7 @@ value_copy (struct value *arg)
else
val = allocate_value (encl_type);
val->type = arg->type;
- VALUE_LVAL (val) = VALUE_LVAL (arg);
+ VALUE_LVAL (val) = arg->lval;
val->location = arg->location;
val->offset = arg->offset;
val->bitpos = arg->bitpos;
@@ -1725,13 +1727,18 @@ value_copy (struct value *arg)
val->stack = arg->stack;
val->is_zero = arg->is_zero;
val->initialized = arg->initialized;
-
- if (!value_lazy (val))
- copy (value_contents_all_raw (arg),
- value_contents_all_raw (val));
-
val->unavailable = arg->unavailable;
val->optimized_out = arg->optimized_out;
+
+ if (!value_lazy (val) && !value_entirely_optimized_out (val))
+ {
+ gdb_assert (arg->contents != nullptr);
+ ULONGEST length = TYPE_LENGTH (value_enclosing_type (arg));
+ const auto &arg_view
+ = gdb::make_array_view (arg->contents.get (), length);
+ copy (arg_view, value_contents_all_raw (val));
+ }
+
val->parent = arg->parent;
if (VALUE_LVAL (val) == lval_computed)
{
@@ -1909,6 +1916,14 @@ access_value_history (int num)
return value_copy (value_history[absnum].get ());
}
+/* See value.h. */
+
+ULONGEST
+value_history_count ()
+{
+ return value_history.size ();
+}
+
static void
show_values (const char *num_exp, int from_tty)
{
@@ -1937,10 +1952,10 @@ show_values (const char *num_exp, int from_tty)
struct value_print_options opts;
val = access_value_history (i);
- printf_filtered (("$%d = "), i);
+ gdb_printf (("$%d = "), i);
get_user_print_options (&opts);
value_print (val, gdb_stdout, &opts);
- printf_filtered (("\n"));
+ gdb_printf (("\n"));
}
/* The next "show values +" should start after what we just printed. */
@@ -2441,11 +2456,6 @@ clear_internalvar (struct internalvar *var)
xfree (var->u.string);
break;
- case INTERNALVAR_MAKE_VALUE:
- if (var->u.make_value.functions->destroy != NULL)
- var->u.make_value.functions->destroy (var->u.make_value.data);
- break;
-
default:
break;
}
@@ -2626,7 +2636,7 @@ show_convenience (const char *ignore, int from_tty)
{
varseen = 1;
}
- printf_filtered (("$%s = "), var->name);
+ gdb_printf (("$%s = "), var->name);
try
{
@@ -2641,7 +2651,7 @@ show_convenience (const char *ignore, int from_tty)
_("<error: %s>"), ex.what ());
}
- printf_filtered (("\n"));
+ gdb_printf (("\n"));
}
if (!varseen)
{
@@ -2649,11 +2659,11 @@ show_convenience (const char *ignore, int from_tty)
The user can't create them except via Python, and if Python support
is installed this message will never be printed ($_streq will
exist). */
- printf_filtered (_("No debugger convenience variables now defined.\n"
- "Convenience variables have "
- "names starting with \"$\";\n"
- "use \"set\" as in \"set "
- "$foo = 5\" to define them.\n"));
+ gdb_printf (_("No debugger convenience variables now defined.\n"
+ "Convenience variables have "
+ "names starting with \"$\";\n"
+ "use \"set\" as in \"set "
+ "$foo = 5\" to define them.\n"));
}
}
@@ -2976,7 +2986,7 @@ value_static_field (struct type *type, int fieldno)
if (!msym.minsym)
retval = allocate_optimized_out_value (field_type);
else
- retval = value_at_lazy (field_type, BMSYMBOL_VALUE_ADDRESS (msym));
+ retval = value_at_lazy (field_type, msym.value_address ());
}
else
retval = value_of_variable (sym.symbol, sym.block);
@@ -3163,13 +3173,8 @@ value_fn_field (struct value **arg1p, struct fn_field *f,
struct bound_minimal_symbol msym;
sym = lookup_symbol (physname, 0, VAR_DOMAIN, 0).symbol;
- if (sym != NULL)
- {
- memset (&msym, 0, sizeof (msym));
- }
- else
+ if (sym == nullptr)
{
- gdb_assert (sym == NULL);
msym = lookup_bound_minimal_symbol (physname);
if (msym.minsym == NULL)
return NULL;
@@ -3179,7 +3184,7 @@ value_fn_field (struct value **arg1p, struct fn_field *f,
VALUE_LVAL (v) = lval_memory;
if (sym)
{
- set_value_address (v, BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (sym)));
+ set_value_address (v, sym->value_block ()->entry_pc ());
}
else
{
@@ -3190,7 +3195,7 @@ value_fn_field (struct value **arg1p, struct fn_field *f,
set_value_address (v,
gdbarch_convert_from_func_ptr_addr
- (gdbarch, BMSYMBOL_VALUE_ADDRESS (msym),
+ (gdbarch, msym.value_address (),
current_inferior ()->top_target ()));
}
@@ -3997,15 +4002,15 @@ value_fetch_lazy_register (struct value *val)
gdbarch = get_frame_arch (frame);
string_file debug_file;
- fprintf_unfiltered (&debug_file,
- "(frame=%d, regnum=%d(%s), ...) ",
- frame_relative_level (frame), regnum,
- user_reg_map_regnum_to_name (gdbarch, regnum));
+ gdb_printf (&debug_file,
+ "(frame=%d, regnum=%d(%s), ...) ",
+ frame_relative_level (frame), regnum,
+ user_reg_map_regnum_to_name (gdbarch, regnum));
- fprintf_unfiltered (&debug_file, "->");
+ gdb_printf (&debug_file, "->");
if (value_optimized_out (new_val))
{
- fprintf_unfiltered (&debug_file, " ");
+ gdb_printf (&debug_file, " ");
val_print_optimized_out (new_val, &debug_file);
}
else
@@ -4014,20 +4019,20 @@ value_fetch_lazy_register (struct value *val)
gdb::array_view<const gdb_byte> buf = value_contents (new_val);
if (VALUE_LVAL (new_val) == lval_register)
- fprintf_unfiltered (&debug_file, " register=%d",
- VALUE_REGNUM (new_val));
+ gdb_printf (&debug_file, " register=%d",
+ VALUE_REGNUM (new_val));
else if (VALUE_LVAL (new_val) == lval_memory)
- fprintf_unfiltered (&debug_file, " address=%s",
- paddress (gdbarch,
- value_address (new_val)));
+ gdb_printf (&debug_file, " address=%s",
+ paddress (gdbarch,
+ value_address (new_val)));
else
- fprintf_unfiltered (&debug_file, " computed");
+ gdb_printf (&debug_file, " computed");
- fprintf_unfiltered (&debug_file, " bytes=");
- fprintf_unfiltered (&debug_file, "[");
+ gdb_printf (&debug_file, " bytes=");
+ gdb_printf (&debug_file, "[");
for (i = 0; i < register_size (gdbarch, regnum); i++)
- fprintf_unfiltered (&debug_file, "%02x", buf[i]);
- fprintf_unfiltered (&debug_file, "]");
+ gdb_printf (&debug_file, "%02x", buf[i]);
+ gdb_printf (&debug_file, "]");
}
frame_debug_printf ("%s", debug_file.c_str ());
@@ -4268,6 +4273,20 @@ test_insert_into_bit_range_vector ()
}
}
+static void
+test_value_copy ()
+{
+ type *type = builtin_type (current_inferior ()->gdbarch)->builtin_int;
+
+ /* Verify that we can copy an entirely optimized out value, that may not have
+ its contents allocated. */
+ value_ref_ptr val = release_value (allocate_optimized_out_value (type));
+ value_ref_ptr copy = release_value (value_copy (val.get ()));
+
+ SELF_CHECK (value_entirely_optimized_out (val.get ()));
+ SELF_CHECK (value_entirely_optimized_out (copy.get ()));
+}
+
} /* namespace selftests */
#endif /* GDB_SELF_TEST */
@@ -4352,6 +4371,7 @@ and exceeds this limit will cause an error."),
selftests::register_test ("ranges_contain", selftests::test_ranges_contain);
selftests::register_test ("insert_into_bit_range_vector",
selftests::test_insert_into_bit_range_vector);
+ selftests::register_test ("value_copy", selftests::test_value_copy);
#endif
}
diff --git a/gdb/value.h b/gdb/value.h
index f91c5a56144..7e1eec22413 100644
--- a/gdb/value.h
+++ b/gdb/value.h
@@ -948,6 +948,10 @@ extern void binop_promote (const struct language_defn *language,
extern struct value *access_value_history (int num);
+/* Return the number of items in the value history. */
+
+extern ULONGEST value_history_count ();
+
extern struct value *value_of_internalvar (struct gdbarch *gdbarch,
struct internalvar *var);
@@ -998,12 +1002,6 @@ struct internalvar_funcs
struct agent_expr *expr,
struct axs_value *value,
void *data);
-
- /* If non-NULL, this is called to destroy DATA. The DATA argument
- passed to this function is the same argument that was passed to
- `create_internalvar_type_lazy'. */
-
- void (*destroy) (void *data);
};
extern struct internalvar *create_internalvar_type_lazy (const char *name,
@@ -1091,10 +1089,6 @@ extern void print_floating (const gdb_byte *valaddr, struct type *type,
extern void value_print (struct value *val, struct ui_file *stream,
const struct value_print_options *options);
-extern void value_print_array_elements (struct value *val,
- struct ui_file *stream, int format,
- enum val_prettyformat pretty);
-
/* Release values from the value chain and return them. Values
created after MARK are released. If MARK is nullptr, or if MARK is
not found on the value chain, then all values are released. Values
@@ -1129,7 +1123,7 @@ extern void preserve_values (struct objfile *);
/* From values.c */
-extern struct value *value_copy (struct value *);
+extern struct value *value_copy (const value *);
extern struct value *value_non_lval (struct value *);
diff --git a/gdb/varobj.c b/gdb/varobj.c
index b59ddc1e772..741fdb6a03b 100644
--- a/gdb/varobj.c
+++ b/gdb/varobj.c
@@ -23,7 +23,7 @@
#include "gdbcmd.h"
#include "block.h"
#include "valprint.h"
-#include "gdb_regex.h"
+#include "gdbsupport/gdb_regex.h"
#include "varobj.h"
#include "gdbthread.h"
@@ -47,7 +47,7 @@ static void
show_varobjdebug (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Varobj debugging is %s.\n"), value);
+ gdb_printf (file, _("Varobj debugging is %s.\n"), value);
}
/* String representations of gdb's format codes. */
@@ -316,8 +316,8 @@ varobj_create (const char *objname,
|| opcode == OP_TYPEOF
|| opcode == OP_DECLTYPE)
{
- fprintf_unfiltered (gdb_stderr, "Attempt to use a type name"
- " as an expression.\n");
+ gdb_printf (gdb_stderr, "Attempt to use a type name"
+ " as an expression.\n");
return NULL;
}
@@ -1755,7 +1755,7 @@ uninstall_variable (struct varobj *var)
htab_remove_elt_with_hash (varobj_table, var->obj_name.c_str (), hash);
if (varobjdebug)
- fprintf_unfiltered (gdb_stdlog, "Deleting %s\n", var->obj_name.c_str ());
+ gdb_printf (gdb_stdlog, "Deleting %s\n", var->obj_name.c_str ());
/* If root, remove varobj from root list. */
if (is_root_p (var))
@@ -1939,8 +1939,8 @@ check_scope (const struct varobj *var)
{
CORE_ADDR pc = get_frame_pc (fi);
- if (pc < BLOCK_START (var->root->valid_block) ||
- pc >= BLOCK_END (var->root->valid_block))
+ if (pc < var->root->valid_block->start () ||
+ pc >= var->root->valid_block->end ())
scope = false;
else
select_frame (fi);
@@ -2232,8 +2232,8 @@ varobj_value_get_print_value (struct value *value,
/* If the THEVALUE has contents, it is a regular string. */
if (!thevalue.empty ())
- LA_PRINT_STRING (&stb, type, (gdb_byte *) thevalue.c_str (),
- len, encoding.get (), 0, &opts);
+ current_language->printstr (&stb, type, (gdb_byte *) thevalue.c_str (),
+ len, encoding.get (), 0, &opts);
else if (string_print)
/* Otherwise, if string_print is set, and it is not a regular
string, it is a lazy string. */
@@ -2242,7 +2242,7 @@ varobj_value_get_print_value (struct value *value,
/* All other cases. */
common_val_print (value, &stb, 0, &opts, current_language);
- return std::move (stb.string ());
+ return stb.release ();
}
bool
diff --git a/gdb/version.in b/gdb/version.in
index 1b7015de587..c865eb9d98b 100644
--- a/gdb/version.in
+++ b/gdb/version.in
@@ -1 +1 @@
-12.0.50.DATE-git \ No newline at end of file
+13.0.50.DATE-git \ No newline at end of file
diff --git a/gdb/windows-nat.c b/gdb/windows-nat.c
index bdf6ac93c49..1068558cd21 100644
--- a/gdb/windows-nat.c
+++ b/gdb/windows-nat.c
@@ -48,7 +48,7 @@
#include "symfile.h"
#include "objfiles.h"
#include "gdb_bfd.h"
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
#include "gdbthread.h"
#include "gdbcmd.h"
#include <unistd.h>
@@ -74,6 +74,9 @@
using namespace windows_nat;
+/* The current process. */
+static windows_process_info windows_process;
+
#undef STARTUPINFO
#undef CreateProcess
#undef GetModuleFileNameEx
@@ -152,7 +155,7 @@ static CORE_ADDR cygwin_get_dr (int i);
static unsigned long cygwin_get_dr6 (void);
static unsigned long cygwin_get_dr7 (void);
-static std::vector<windows_thread_info *> thread_list;
+static std::vector<std::unique_ptr<windows_thread_info>> thread_list;
/* Counts of things. */
static int saw_create;
@@ -242,7 +245,7 @@ struct windows_nat_target final : public x86_nat_target<inf_child_target>
bool stopped_by_sw_breakpoint () override
{
windows_thread_info *th
- = thread_rec (inferior_ptid, DONT_INVALIDATE_CONTEXT);
+ = windows_process.thread_rec (inferior_ptid, DONT_INVALIDATE_CONTEXT);
return th->stopped_at_software_breakpoint;
}
@@ -310,16 +313,17 @@ static void
check (BOOL ok, const char *file, int line)
{
if (!ok)
- printf_filtered ("error return %s:%d was %u\n", file, line,
- (unsigned) GetLastError ());
+ gdb_printf ("error return %s:%d was %u\n", file, line,
+ (unsigned) GetLastError ());
}
/* See nat/windows-nat.h. */
windows_thread_info *
-windows_nat::thread_rec (ptid_t ptid, thread_disposition_type disposition)
+windows_nat::windows_process_info::thread_rec
+ (ptid_t ptid, thread_disposition_type disposition)
{
- for (windows_thread_info *th : thread_list)
+ for (auto &th : thread_list)
if (th->tid == ptid.lwp ())
{
if (!th->suspended)
@@ -340,7 +344,7 @@ windows_nat::thread_rec (ptid_t ptid, thread_disposition_type disposition)
break;
}
}
- return th;
+ return th.get ();
}
return NULL;
@@ -361,18 +365,18 @@ windows_add_thread (ptid_t ptid, HANDLE h, void *tlb, bool main_thread_p)
gdb_assert (ptid.lwp () != 0);
- if ((th = thread_rec (ptid, DONT_INVALIDATE_CONTEXT)))
+ if ((th = windows_process.thread_rec (ptid, DONT_INVALIDATE_CONTEXT)))
return th;
CORE_ADDR base = (CORE_ADDR) (uintptr_t) tlb;
#ifdef __x86_64__
/* For WOW64 processes, this is actually the pointer to the 64bit TIB,
and the 32bit TIB is exactly 2 pages after it. */
- if (wow64_process)
+ if (windows_process.wow64_process)
base += 0x2000;
#endif
th = new windows_thread_info (ptid.lwp (), h, base);
- thread_list.push_back (th);
+ thread_list.emplace_back (th);
/* Add this new thread to the list of threads.
@@ -397,11 +401,6 @@ static void
windows_init_thread_list (void)
{
DEBUG_EVENTS ("called");
- init_thread_list ();
-
- for (windows_thread_info *here : thread_list)
- delete here;
-
thread_list.clear ();
}
@@ -429,25 +428,22 @@ windows_delete_thread (ptid_t ptid, DWORD exit_code, bool main_thread_p)
here as well. */
if (info_verbose)
- printf_unfiltered ("[Deleting %s]\n", target_pid_to_str (ptid).c_str ());
+ gdb_printf ("[Deleting %s]\n", target_pid_to_str (ptid).c_str ());
else if (print_thread_events && !main_thread_p)
- printf_unfiltered (_("[%s exited with code %u]\n"),
- target_pid_to_str (ptid).c_str (),
- (unsigned) exit_code);
+ gdb_printf (_("[%s exited with code %u]\n"),
+ target_pid_to_str (ptid).c_str (),
+ (unsigned) exit_code);
delete_thread (find_thread_ptid (&the_windows_nat_target, ptid));
auto iter = std::find_if (thread_list.begin (), thread_list.end (),
- [=] (windows_thread_info *th)
+ [=] (auto &th)
{
return th->tid == id;
});
if (iter != thread_list.end ())
- {
- delete *iter;
- thread_list.erase (iter);
- }
+ thread_list.erase (iter);
}
/* Fetches register number R from the given windows_thread_info,
@@ -469,7 +465,7 @@ windows_fetch_one_register (struct regcache *regcache,
char *context_ptr = (char *) &th->context;
#ifdef __x86_64__
- if (wow64_process)
+ if (windows_process.wow64_process)
context_ptr = (char *) &th->wow64_context;
#endif
@@ -531,7 +527,8 @@ windows_fetch_one_register (struct regcache *regcache,
void
windows_nat_target::fetch_registers (struct regcache *regcache, int r)
{
- windows_thread_info *th = thread_rec (regcache->ptid (), INVALIDATE_CONTEXT);
+ windows_thread_info *th
+ = windows_process.thread_rec (regcache->ptid (), INVALIDATE_CONTEXT);
/* Check if TH exists. Windows sometimes uses a non-existent
thread id in its events. */
@@ -554,7 +551,7 @@ windows_nat_target::fetch_registers (struct regcache *regcache, int r)
else
#endif
#ifdef __x86_64__
- if (wow64_process)
+ if (windows_process.wow64_process)
{
th->wow64_context.ContextFlags = CONTEXT_DEBUGGER_DR;
CHECK (Wow64GetThreadContext (th->h, &th->wow64_context));
@@ -613,7 +610,7 @@ windows_store_one_register (const struct regcache *regcache,
char *context_ptr = (char *) &th->context;
#ifdef __x86_64__
- if (wow64_process)
+ if (windows_process.wow64_process)
context_ptr = (char *) &th->wow64_context;
#endif
@@ -626,7 +623,8 @@ windows_store_one_register (const struct regcache *regcache,
void
windows_nat_target::store_registers (struct regcache *regcache, int r)
{
- windows_thread_info *th = thread_rec (regcache->ptid (), INVALIDATE_CONTEXT);
+ windows_thread_info *th
+ = windows_process.thread_rec (regcache->ptid (), INVALIDATE_CONTEXT);
/* Check if TH exists. Windows sometimes uses a non-existent
thread id in its events. */
@@ -641,18 +639,24 @@ windows_nat_target::store_registers (struct regcache *regcache, int r)
}
/* Maintain a linked list of "so" information. */
-struct lm_info_windows : public lm_info_base
+struct windows_solib
{
LPVOID load_addr = 0;
CORE_ADDR text_offset = 0;
+
+ /* Original name. */
+ std::string original_name;
+ /* Expanded form of the name. */
+ std::string name;
};
-static struct so_list solib_start, *solib_end;
+static std::vector<windows_solib> solibs;
+
+/* See nat/windows-nat.h. */
-static struct so_list *
+static windows_solib *
windows_make_so (const char *name, LPVOID load_addr)
{
- struct so_list *so;
char *p;
#ifndef __CYGWIN__
char buf[__PMAX];
@@ -701,38 +705,43 @@ windows_make_so (const char *name, LPVOID load_addr)
#endif
}
#endif
- so = XCNEW (struct so_list);
- lm_info_windows *li = new lm_info_windows;
- so->lm_info = li;
- li->load_addr = load_addr;
- strcpy (so->so_original_name, name);
+ solibs.emplace_back ();
+ windows_solib *so = &solibs.back ();
+ so->load_addr = load_addr;
+ so->original_name = name;
#ifndef __CYGWIN__
- strcpy (so->so_name, buf);
+ so->name = buf;
#else
if (buf[0])
- cygwin_conv_path (CCP_WIN_W_TO_POSIX, buf, so->so_name,
- SO_NAME_MAX_PATH_SIZE);
+ {
+ char name[SO_NAME_MAX_PATH_SIZE];
+ cygwin_conv_path (CCP_WIN_W_TO_POSIX, buf, name,
+ SO_NAME_MAX_PATH_SIZE);
+ so->name = name;
+ }
else
{
char *rname = realpath (name, NULL);
if (rname && strlen (rname) < SO_NAME_MAX_PATH_SIZE)
{
- strcpy (so->so_name, rname);
+ so->name = rname;
free (rname);
}
else
{
warning (_("dll path for \"%s\" too long or inaccessible"), name);
- strcpy (so->so_name, so->so_original_name);
+ so->name = so->original_name;
}
}
/* Record cygwin1.dll .text start/end. */
- p = strchr (so->so_name, '\0') - (sizeof ("/cygwin1.dll") - 1);
- if (p >= so->so_name && strcasecmp (p, "/cygwin1.dll") == 0)
+ size_t len = sizeof ("/cygwin1.dll") - 1;
+ if (so->name.size () >= len
+ && strcasecmp (so->name.c_str () + so->name.size () - len,
+ "/cygwin1.dll") == 0)
{
asection *text = NULL;
- gdb_bfd_ref_ptr abfd (gdb_bfd_open (so->so_name, "pei-i386"));
+ gdb_bfd_ref_ptr abfd (gdb_bfd_open (so->name, "pei-i386"));
if (abfd == NULL)
return so;
@@ -758,50 +767,36 @@ windows_make_so (const char *name, LPVOID load_addr)
/* See nat/windows-nat.h. */
void
-windows_nat::handle_load_dll (const char *dll_name, LPVOID base)
-{
- solib_end->next = windows_make_so (dll_name, base);
- solib_end = solib_end->next;
-
- lm_info_windows *li = (lm_info_windows *) solib_end->lm_info;
-
- DEBUG_EVENTS ("Loading dll \"%s\" at %s.", solib_end->so_name,
- host_address_to_string (li->load_addr));
-}
-
-static void
-windows_free_so (struct so_list *so)
+windows_nat::windows_process_info::handle_load_dll (const char *dll_name,
+ LPVOID base)
{
- lm_info_windows *li = (lm_info_windows *) so->lm_info;
-
- delete li;
- xfree (so);
+ windows_solib *solib = windows_make_so (dll_name, base);
+ DEBUG_EVENTS ("Loading dll \"%s\" at %s.", solib->name.c_str (),
+ host_address_to_string (solib->load_addr));
}
/* See nat/windows-nat.h. */
void
-windows_nat::handle_unload_dll ()
+windows_nat::windows_process_info::handle_unload_dll ()
{
LPVOID lpBaseOfDll = current_event.u.UnloadDll.lpBaseOfDll;
- struct so_list *so;
- for (so = &solib_start; so->next != NULL; so = so->next)
+ auto iter = std::remove_if (solibs.begin (), solibs.end (),
+ [&] (windows_solib &lib)
{
- lm_info_windows *li_next = (lm_info_windows *) so->next->lm_info;
-
- if (li_next->load_addr == lpBaseOfDll)
+ if (lib.load_addr == lpBaseOfDll)
{
- struct so_list *sodel = so->next;
-
- so->next = sodel->next;
- if (!so->next)
- solib_end = so;
- DEBUG_EVENTS ("Unloading dll \"%s\".", sodel->so_name);
-
- windows_free_so (sodel);
- return;
+ DEBUG_EVENTS ("Unloading dll \"%s\".", lib.name.c_str ());
+ return true;
}
+ return false;
+ });
+
+ if (iter != solibs.end ())
+ {
+ solibs.erase (iter, solibs.end ());
+ return;
}
/* We did not find any DLL that was previously loaded at this address,
@@ -815,35 +810,11 @@ windows_nat::handle_unload_dll ()
host_address_to_string (lpBaseOfDll));
}
-/* Call FUNC wrapped in a TRY/CATCH that swallows all GDB
- exceptions. */
-
-static void
-catch_errors (void (*func) ())
-{
- try
- {
- func ();
- }
- catch (const gdb_exception &ex)
- {
- exception_print (gdb_stderr, ex);
- }
-}
-
/* Clear list of loaded DLLs. */
static void
windows_clear_solib (void)
{
- struct so_list *so;
-
- for (so = solib_start.next; so; so = solib_start.next)
- {
- solib_start.next = so->next;
- windows_free_so (so);
- }
-
- solib_end = &solib_start;
+ solibs.clear ();
}
static void
@@ -868,7 +839,8 @@ signal_event_command (const char *args, int from_tty)
/* See nat/windows-nat.h. */
int
-windows_nat::handle_output_debug_string (struct target_waitstatus *ourstatus)
+windows_nat::windows_process_info::handle_output_debug_string
+ (struct target_waitstatus *ourstatus)
{
int retval = 0;
@@ -933,7 +905,7 @@ display_selector (HANDLE thread, DWORD sel)
LDT_ENTRY info;
BOOL ret;
#ifdef __x86_64__
- if (wow64_process)
+ if (windows_process.wow64_process)
ret = Wow64GetThreadSelectorEntry (thread, sel, &info);
else
#endif
@@ -941,10 +913,10 @@ display_selector (HANDLE thread, DWORD sel)
if (ret)
{
int base, limit;
- printf_filtered ("0x%03x: ", (unsigned) sel);
+ gdb_printf ("0x%03x: ", (unsigned) sel);
if (!info.HighWord.Bits.Pres)
{
- puts_filtered ("Segment not present\n");
+ gdb_puts ("Segment not present\n");
return 0;
}
base = (info.HighWord.Bits.BaseHi << 24) +
@@ -953,61 +925,61 @@ display_selector (HANDLE thread, DWORD sel)
limit = (info.HighWord.Bits.LimitHi << 16) + info.LimitLow;
if (info.HighWord.Bits.Granularity)
limit = (limit << 12) | 0xfff;
- printf_filtered ("base=0x%08x limit=0x%08x", base, limit);
+ gdb_printf ("base=0x%08x limit=0x%08x", base, limit);
if (info.HighWord.Bits.Default_Big)
- puts_filtered(" 32-bit ");
+ gdb_puts(" 32-bit ");
else
- puts_filtered(" 16-bit ");
+ gdb_puts(" 16-bit ");
switch ((info.HighWord.Bits.Type & 0xf) >> 1)
{
case 0:
- puts_filtered ("Data (Read-Only, Exp-up");
+ gdb_puts ("Data (Read-Only, Exp-up");
break;
case 1:
- puts_filtered ("Data (Read/Write, Exp-up");
+ gdb_puts ("Data (Read/Write, Exp-up");
break;
case 2:
- puts_filtered ("Unused segment (");
+ gdb_puts ("Unused segment (");
break;
case 3:
- puts_filtered ("Data (Read/Write, Exp-down");
+ gdb_puts ("Data (Read/Write, Exp-down");
break;
case 4:
- puts_filtered ("Code (Exec-Only, N.Conf");
+ gdb_puts ("Code (Exec-Only, N.Conf");
break;
case 5:
- puts_filtered ("Code (Exec/Read, N.Conf");
+ gdb_puts ("Code (Exec/Read, N.Conf");
break;
case 6:
- puts_filtered ("Code (Exec-Only, Conf");
+ gdb_puts ("Code (Exec-Only, Conf");
break;
case 7:
- puts_filtered ("Code (Exec/Read, Conf");
+ gdb_puts ("Code (Exec/Read, Conf");
break;
default:
- printf_filtered ("Unknown type 0x%lx",
- (unsigned long) info.HighWord.Bits.Type);
+ gdb_printf ("Unknown type 0x%lx",
+ (unsigned long) info.HighWord.Bits.Type);
}
if ((info.HighWord.Bits.Type & 0x1) == 0)
- puts_filtered(", N.Acc");
- puts_filtered (")\n");
+ gdb_puts(", N.Acc");
+ gdb_puts (")\n");
if ((info.HighWord.Bits.Type & 0x10) == 0)
- puts_filtered("System selector ");
- printf_filtered ("Priviledge level = %ld. ",
- (unsigned long) info.HighWord.Bits.Dpl);
+ gdb_puts("System selector ");
+ gdb_printf ("Priviledge level = %ld. ",
+ (unsigned long) info.HighWord.Bits.Dpl);
if (info.HighWord.Bits.Granularity)
- puts_filtered ("Page granular.\n");
+ gdb_puts ("Page granular.\n");
else
- puts_filtered ("Byte granular.\n");
+ gdb_puts ("Byte granular.\n");
return 1;
}
else
{
DWORD err = GetLastError ();
if (err == ERROR_NOT_SUPPORTED)
- printf_filtered ("Function not supported\n");
+ gdb_printf ("Function not supported\n");
else
- printf_filtered ("Invalid selector 0x%x.\n", (unsigned) sel);
+ gdb_printf ("Invalid selector 0x%x.\n", (unsigned) sel);
return 0;
}
}
@@ -1017,56 +989,56 @@ display_selectors (const char * args, int from_tty)
{
if (inferior_ptid == null_ptid)
{
- puts_filtered ("Impossible to display selectors now.\n");
+ gdb_puts ("Impossible to display selectors now.\n");
return;
}
windows_thread_info *current_windows_thread
- = thread_rec (inferior_ptid, DONT_INVALIDATE_CONTEXT);
+ = windows_process.thread_rec (inferior_ptid, DONT_INVALIDATE_CONTEXT);
if (!args)
{
#ifdef __x86_64__
- if (wow64_process)
+ if (windows_process.wow64_process)
{
- puts_filtered ("Selector $cs\n");
+ gdb_puts ("Selector $cs\n");
display_selector (current_windows_thread->h,
current_windows_thread->wow64_context.SegCs);
- puts_filtered ("Selector $ds\n");
+ gdb_puts ("Selector $ds\n");
display_selector (current_windows_thread->h,
current_windows_thread->wow64_context.SegDs);
- puts_filtered ("Selector $es\n");
+ gdb_puts ("Selector $es\n");
display_selector (current_windows_thread->h,
current_windows_thread->wow64_context.SegEs);
- puts_filtered ("Selector $ss\n");
+ gdb_puts ("Selector $ss\n");
display_selector (current_windows_thread->h,
current_windows_thread->wow64_context.SegSs);
- puts_filtered ("Selector $fs\n");
+ gdb_puts ("Selector $fs\n");
display_selector (current_windows_thread->h,
current_windows_thread->wow64_context.SegFs);
- puts_filtered ("Selector $gs\n");
+ gdb_puts ("Selector $gs\n");
display_selector (current_windows_thread->h,
current_windows_thread->wow64_context.SegGs);
}
else
#endif
{
- puts_filtered ("Selector $cs\n");
+ gdb_puts ("Selector $cs\n");
display_selector (current_windows_thread->h,
current_windows_thread->context.SegCs);
- puts_filtered ("Selector $ds\n");
+ gdb_puts ("Selector $ds\n");
display_selector (current_windows_thread->h,
current_windows_thread->context.SegDs);
- puts_filtered ("Selector $es\n");
+ gdb_puts ("Selector $es\n");
display_selector (current_windows_thread->h,
current_windows_thread->context.SegEs);
- puts_filtered ("Selector $ss\n");
+ gdb_puts ("Selector $ss\n");
display_selector (current_windows_thread->h,
current_windows_thread->context.SegSs);
- puts_filtered ("Selector $fs\n");
+ gdb_puts ("Selector $fs\n");
display_selector (current_windows_thread->h,
current_windows_thread->context.SegFs);
- puts_filtered ("Selector $gs\n");
+ gdb_puts ("Selector $gs\n");
display_selector (current_windows_thread->h,
current_windows_thread->context.SegGs);
}
@@ -1075,7 +1047,7 @@ display_selectors (const char * args, int from_tty)
{
int sel;
sel = parse_and_eval_long (args);
- printf_filtered ("Selector \"%s\"\n",args);
+ gdb_printf ("Selector \"%s\"\n",args);
display_selector (current_windows_thread->h, sel);
}
}
@@ -1083,46 +1055,8 @@ display_selectors (const char * args, int from_tty)
/* See nat/windows-nat.h. */
bool
-windows_nat::handle_ms_vc_exception (const EXCEPTION_RECORD *rec)
-{
- if (rec->NumberParameters >= 3
- && (rec->ExceptionInformation[0] & 0xffffffff) == 0x1000)
- {
- DWORD named_thread_id;
- windows_thread_info *named_thread;
- CORE_ADDR thread_name_target;
-
- thread_name_target = rec->ExceptionInformation[1];
- named_thread_id = (DWORD) (0xffffffff & rec->ExceptionInformation[2]);
-
- if (named_thread_id == (DWORD) -1)
- named_thread_id = current_event.dwThreadId;
-
- named_thread = thread_rec (ptid_t (current_event.dwProcessId,
- named_thread_id, 0),
- DONT_INVALIDATE_CONTEXT);
- if (named_thread != NULL)
- {
- int thread_name_len;
- gdb::unique_xmalloc_ptr<char> thread_name
- = target_read_string (thread_name_target, 1025, &thread_name_len);
- if (thread_name_len > 0)
- {
- thread_name.get ()[thread_name_len - 1] = '\0';
- named_thread->name = std::move (thread_name);
- }
- }
-
- return true;
- }
-
- return false;
-}
-
-/* See nat/windows-nat.h. */
-
-bool
-windows_nat::handle_access_violation (const EXCEPTION_RECORD *rec)
+windows_nat::windows_process_info::handle_access_violation
+ (const EXCEPTION_RECORD *rec)
{
#ifdef __CYGWIN__
/* See if the access violation happened within the cygwin DLL
@@ -1153,16 +1087,16 @@ windows_continue (DWORD continue_status, int id, int killed)
{
BOOL res;
- desired_stop_thread_id = id;
+ windows_process.desired_stop_thread_id = id;
- if (matching_pending_stop (debug_events))
+ if (windows_process.matching_pending_stop (debug_events))
return TRUE;
- for (windows_thread_info *th : thread_list)
+ for (auto &th : thread_list)
if (id == -1 || id == (int) th->tid)
{
#ifdef __x86_64__
- if (wow64_process)
+ if (windows_process.wow64_process)
{
if (th->debug_registers_changed)
{
@@ -1244,9 +1178,10 @@ windows_continue (DWORD continue_status, int id, int killed)
static DWORD
fake_create_process (void)
{
- current_process_handle = OpenProcess (PROCESS_ALL_ACCESS, FALSE,
- current_event.dwProcessId);
- if (current_process_handle != NULL)
+ windows_process.handle
+ = OpenProcess (PROCESS_ALL_ACCESS, FALSE,
+ windows_process.current_event.dwProcessId);
+ if (windows_process.handle != NULL)
open_process_used = 1;
else
{
@@ -1254,12 +1189,12 @@ fake_create_process (void)
(unsigned) GetLastError ());
/* We can not debug anything in that case. */
}
- windows_add_thread (ptid_t (current_event.dwProcessId, 0,
- current_event.dwThreadId),
- current_event.u.CreateThread.hThread,
- current_event.u.CreateThread.lpThreadLocalBase,
+ windows_add_thread (ptid_t (windows_process.current_event.dwProcessId, 0,
+ windows_process.current_event.dwThreadId),
+ windows_process.current_event.u.CreateThread.hThread,
+ windows_process.current_event.u.CreateThread.lpThreadLocalBase,
true /* main_thread_p */);
- return current_event.dwThreadId;
+ return windows_process.current_event.dwThreadId;
}
void
@@ -1278,11 +1213,12 @@ windows_nat_target::resume (ptid_t ptid, int step, enum gdb_signal sig)
if (sig != GDB_SIGNAL_0)
{
- if (current_event.dwDebugEventCode != EXCEPTION_DEBUG_EVENT)
+ if (windows_process.current_event.dwDebugEventCode
+ != EXCEPTION_DEBUG_EVENT)
{
DEBUG_EXCEPT ("Cannot continue with signal %d here.", sig);
}
- else if (sig == last_sig)
+ else if (sig == windows_process.last_sig)
continue_status = DBG_EXCEPTION_NOT_HANDLED;
else
#if 0
@@ -1306,20 +1242,20 @@ windows_nat_target::resume (ptid_t ptid, int step, enum gdb_signal sig)
}
#endif
DEBUG_EXCEPT ("Can only continue with received signal %d.",
- last_sig);
+ windows_process.last_sig);
}
- last_sig = GDB_SIGNAL_0;
+ windows_process.last_sig = GDB_SIGNAL_0;
DEBUG_EXEC ("pid=%d, tid=0x%x, step=%d, sig=%d",
ptid.pid (), (unsigned) ptid.lwp (), step, sig);
/* Get context for currently selected thread. */
- th = thread_rec (inferior_ptid, DONT_INVALIDATE_CONTEXT);
+ th = windows_process.thread_rec (inferior_ptid, DONT_INVALIDATE_CONTEXT);
if (th)
{
#ifdef __x86_64__
- if (wow64_process)
+ if (windows_process.wow64_process)
{
if (step)
{
@@ -1404,7 +1340,7 @@ ctrl_c_handler (DWORD event_type)
return TRUE;
#ifdef __x86_64__
- if (wow64_process)
+ if (windows_process.wow64_process)
{
/* Call DbgUiRemoteBreakin of the 32bit ntdll.dll in the target process.
DebugBreakProcess would call the one of the 64bit ntdll.dll, which
@@ -1419,7 +1355,7 @@ ctrl_c_handler (DWORD event_type)
if (wow64_dbgbreak != nullptr)
{
- HANDLE thread = CreateRemoteThread (current_process_handle, NULL,
+ HANDLE thread = CreateRemoteThread (windows_process.handle, NULL,
0, (LPTHREAD_START_ROUTINE)
wow64_dbgbreak, NULL, 0, NULL);
if (thread)
@@ -1429,7 +1365,7 @@ ctrl_c_handler (DWORD event_type)
else
#endif
{
- if (!DebugBreakProcess (current_process_handle))
+ if (!DebugBreakProcess (windows_process.handle))
warning (_("Could not interrupt program. "
"Press Ctrl-c in the program console."));
}
@@ -1452,27 +1388,31 @@ windows_nat_target::get_windows_debug_event (int pid,
/* If there is a relevant pending stop, report it now. See the
comment by the definition of "pending_stops" for details on why
this is needed. */
- gdb::optional<pending_stop> stop = fetch_pending_stop (debug_events);
+ gdb::optional<pending_stop> stop
+ = windows_process.fetch_pending_stop (debug_events);
if (stop.has_value ())
{
thread_id = stop->thread_id;
*ourstatus = stop->status;
- ptid_t ptid (current_event.dwProcessId, thread_id);
- windows_thread_info *th = thread_rec (ptid, INVALIDATE_CONTEXT);
+ ptid_t ptid (windows_process.current_event.dwProcessId, thread_id);
+ windows_thread_info *th
+ = windows_process.thread_rec (ptid, INVALIDATE_CONTEXT);
th->reload_context = true;
return thread_id;
}
- last_sig = GDB_SIGNAL_0;
+ windows_process.last_sig = GDB_SIGNAL_0;
+ DEBUG_EVENT *current_event = &windows_process.current_event;
- if (!(debug_event = wait_for_debug_event (&current_event, 1000)))
+ if (!(debug_event = wait_for_debug_event (&windows_process.current_event,
+ 1000)))
goto out;
continue_status = DBG_CONTINUE;
- event_code = current_event.dwDebugEventCode;
+ event_code = windows_process.current_event.dwDebugEventCode;
ourstatus->set_spurious ();
have_saved_context = 0;
@@ -1480,12 +1420,12 @@ windows_nat_target::get_windows_debug_event (int pid,
{
case CREATE_THREAD_DEBUG_EVENT:
DEBUG_EVENTS ("kernel event for pid=%u tid=0x%x code=%s",
- (unsigned) current_event.dwProcessId,
- (unsigned) current_event.dwThreadId,
+ (unsigned) current_event->dwProcessId,
+ (unsigned) current_event->dwThreadId,
"CREATE_THREAD_DEBUG_EVENT");
if (saw_create != 1)
{
- inferior *inf = find_inferior_pid (this, current_event.dwProcessId);
+ inferior *inf = find_inferior_pid (this, current_event->dwProcessId);
if (!saw_create && inf->attach_flag)
{
/* Kludge around a Windows bug where first event is a create
@@ -1498,64 +1438,64 @@ windows_nat_target::get_windows_debug_event (int pid,
break;
}
/* Record the existence of this thread. */
- thread_id = current_event.dwThreadId;
+ thread_id = current_event->dwThreadId;
windows_add_thread
- (ptid_t (current_event.dwProcessId, current_event.dwThreadId, 0),
- current_event.u.CreateThread.hThread,
- current_event.u.CreateThread.lpThreadLocalBase,
+ (ptid_t (current_event->dwProcessId, current_event->dwThreadId, 0),
+ current_event->u.CreateThread.hThread,
+ current_event->u.CreateThread.lpThreadLocalBase,
false /* main_thread_p */);
break;
case EXIT_THREAD_DEBUG_EVENT:
DEBUG_EVENTS ("kernel event for pid=%u tid=0x%x code=%s",
- (unsigned) current_event.dwProcessId,
- (unsigned) current_event.dwThreadId,
+ (unsigned) current_event->dwProcessId,
+ (unsigned) current_event->dwThreadId,
"EXIT_THREAD_DEBUG_EVENT");
- windows_delete_thread (ptid_t (current_event.dwProcessId,
- current_event.dwThreadId, 0),
- current_event.u.ExitThread.dwExitCode,
+ windows_delete_thread (ptid_t (current_event->dwProcessId,
+ current_event->dwThreadId, 0),
+ current_event->u.ExitThread.dwExitCode,
false /* main_thread_p */);
break;
case CREATE_PROCESS_DEBUG_EVENT:
DEBUG_EVENTS ("kernel event for pid=%u tid=0x%x code=%s",
- (unsigned) current_event.dwProcessId,
- (unsigned) current_event.dwThreadId,
+ (unsigned) current_event->dwProcessId,
+ (unsigned) current_event->dwThreadId,
"CREATE_PROCESS_DEBUG_EVENT");
- CloseHandle (current_event.u.CreateProcessInfo.hFile);
+ CloseHandle (current_event->u.CreateProcessInfo.hFile);
if (++saw_create != 1)
break;
- current_process_handle = current_event.u.CreateProcessInfo.hProcess;
+ windows_process.handle = current_event->u.CreateProcessInfo.hProcess;
/* Add the main thread. */
windows_add_thread
- (ptid_t (current_event.dwProcessId,
- current_event.dwThreadId, 0),
- current_event.u.CreateProcessInfo.hThread,
- current_event.u.CreateProcessInfo.lpThreadLocalBase,
+ (ptid_t (current_event->dwProcessId,
+ current_event->dwThreadId, 0),
+ current_event->u.CreateProcessInfo.hThread,
+ current_event->u.CreateProcessInfo.lpThreadLocalBase,
true /* main_thread_p */);
- thread_id = current_event.dwThreadId;
+ thread_id = current_event->dwThreadId;
break;
case EXIT_PROCESS_DEBUG_EVENT:
DEBUG_EVENTS ("kernel event for pid=%u tid=0x%x code=%s",
- (unsigned) current_event.dwProcessId,
- (unsigned) current_event.dwThreadId,
+ (unsigned) current_event->dwProcessId,
+ (unsigned) current_event->dwThreadId,
"EXIT_PROCESS_DEBUG_EVENT");
if (!windows_initialization_done)
{
target_terminal::ours ();
target_mourn_inferior (inferior_ptid);
error (_("During startup program exited with code 0x%x."),
- (unsigned int) current_event.u.ExitProcess.dwExitCode);
+ (unsigned int) current_event->u.ExitProcess.dwExitCode);
}
else if (saw_create == 1)
{
- windows_delete_thread (ptid_t (current_event.dwProcessId,
- current_event.dwThreadId, 0),
+ windows_delete_thread (ptid_t (current_event->dwProcessId,
+ current_event->dwThreadId, 0),
0, true /* main_thread_p */);
- DWORD exit_status = current_event.u.ExitProcess.dwExitCode;
+ DWORD exit_status = current_event->u.ExitProcess.dwExitCode;
/* If the exit status looks like a fatal exception, but we
don't recognize the exception's code, make the original
exit status value available, to avoid losing
@@ -1567,50 +1507,64 @@ windows_nat_target::get_windows_debug_event (int pid,
else
ourstatus->set_signalled (gdb_signal_from_host (exit_signal));
- thread_id = current_event.dwThreadId;
+ thread_id = current_event->dwThreadId;
}
break;
case LOAD_DLL_DEBUG_EVENT:
DEBUG_EVENTS ("kernel event for pid=%u tid=0x%x code=%s",
- (unsigned) current_event.dwProcessId,
- (unsigned) current_event.dwThreadId,
+ (unsigned) current_event->dwProcessId,
+ (unsigned) current_event->dwThreadId,
"LOAD_DLL_DEBUG_EVENT");
- CloseHandle (current_event.u.LoadDll.hFile);
+ CloseHandle (current_event->u.LoadDll.hFile);
if (saw_create != 1 || ! windows_initialization_done)
break;
- catch_errors (dll_loaded_event);
+ try
+ {
+ windows_process.dll_loaded_event ();
+ }
+ catch (const gdb_exception &ex)
+ {
+ exception_print (gdb_stderr, ex);
+ }
ourstatus->set_loaded ();
- thread_id = current_event.dwThreadId;
+ thread_id = current_event->dwThreadId;
break;
case UNLOAD_DLL_DEBUG_EVENT:
DEBUG_EVENTS ("kernel event for pid=%u tid=0x%x code=%s",
- (unsigned) current_event.dwProcessId,
- (unsigned) current_event.dwThreadId,
+ (unsigned) current_event->dwProcessId,
+ (unsigned) current_event->dwThreadId,
"UNLOAD_DLL_DEBUG_EVENT");
if (saw_create != 1 || ! windows_initialization_done)
break;
- catch_errors (handle_unload_dll);
+ try
+ {
+ windows_process.handle_unload_dll ();
+ }
+ catch (const gdb_exception &ex)
+ {
+ exception_print (gdb_stderr, ex);
+ }
ourstatus->set_loaded ();
- thread_id = current_event.dwThreadId;
+ thread_id = current_event->dwThreadId;
break;
case EXCEPTION_DEBUG_EVENT:
DEBUG_EVENTS ("kernel event for pid=%u tid=0x%x code=%s",
- (unsigned) current_event.dwProcessId,
- (unsigned) current_event.dwThreadId,
+ (unsigned) current_event->dwProcessId,
+ (unsigned) current_event->dwThreadId,
"EXCEPTION_DEBUG_EVENT");
if (saw_create != 1)
break;
- switch (handle_exception (ourstatus, debug_exceptions))
+ switch (windows_process.handle_exception (ourstatus, debug_exceptions))
{
case HANDLE_EXCEPTION_UNHANDLED:
default:
continue_status = DBG_EXCEPTION_NOT_HANDLED;
break;
case HANDLE_EXCEPTION_HANDLED:
- thread_id = current_event.dwThreadId;
+ thread_id = current_event->dwThreadId;
break;
case HANDLE_EXCEPTION_IGNORED:
continue_status = DBG_CONTINUE;
@@ -1620,52 +1574,57 @@ windows_nat_target::get_windows_debug_event (int pid,
case OUTPUT_DEBUG_STRING_EVENT: /* Message from the kernel. */
DEBUG_EVENTS ("kernel event for pid=%u tid=0x%x code=%s",
- (unsigned) current_event.dwProcessId,
- (unsigned) current_event.dwThreadId,
+ (unsigned) current_event->dwProcessId,
+ (unsigned) current_event->dwThreadId,
"OUTPUT_DEBUG_STRING_EVENT");
if (saw_create != 1)
break;
- thread_id = handle_output_debug_string (ourstatus);
+ thread_id = windows_process.handle_output_debug_string (ourstatus);
break;
default:
if (saw_create != 1)
break;
- printf_unfiltered ("gdb: kernel event for pid=%u tid=0x%x\n",
- (unsigned) current_event.dwProcessId,
- (unsigned) current_event.dwThreadId);
- printf_unfiltered (" unknown event code %u\n",
- (unsigned) current_event.dwDebugEventCode);
+ gdb_printf ("gdb: kernel event for pid=%u tid=0x%x\n",
+ (unsigned) current_event->dwProcessId,
+ (unsigned) current_event->dwThreadId);
+ gdb_printf (" unknown event code %u\n",
+ (unsigned) current_event->dwDebugEventCode);
break;
}
if (!thread_id || saw_create != 1)
{
- CHECK (windows_continue (continue_status, desired_stop_thread_id, 0));
+ CHECK (windows_continue (continue_status,
+ windows_process.desired_stop_thread_id, 0));
}
- else if (desired_stop_thread_id != -1 && desired_stop_thread_id != thread_id)
+ else if (windows_process.desired_stop_thread_id != -1
+ && windows_process.desired_stop_thread_id != thread_id)
{
/* Pending stop. See the comment by the definition of
"pending_stops" for details on why this is needed. */
DEBUG_EVENTS ("get_windows_debug_event - "
"unexpected stop in 0x%x (expecting 0x%x)",
- thread_id, desired_stop_thread_id);
+ thread_id, windows_process.desired_stop_thread_id);
- if (current_event.dwDebugEventCode == EXCEPTION_DEBUG_EVENT
- && ((current_event.u.Exception.ExceptionRecord.ExceptionCode
+ if (current_event->dwDebugEventCode == EXCEPTION_DEBUG_EVENT
+ && ((current_event->u.Exception.ExceptionRecord.ExceptionCode
== EXCEPTION_BREAKPOINT)
- || (current_event.u.Exception.ExceptionRecord.ExceptionCode
+ || (current_event->u.Exception.ExceptionRecord.ExceptionCode
== STATUS_WX86_BREAKPOINT))
&& windows_initialization_done)
{
- ptid_t ptid = ptid_t (current_event.dwProcessId, thread_id, 0);
- windows_thread_info *th = thread_rec (ptid, INVALIDATE_CONTEXT);
+ ptid_t ptid = ptid_t (current_event->dwProcessId, thread_id, 0);
+ windows_thread_info *th
+ = windows_process.thread_rec (ptid, INVALIDATE_CONTEXT);
th->stopped_at_software_breakpoint = true;
th->pc_adjusted = false;
}
- pending_stops.push_back ({thread_id, *ourstatus, current_event});
+ windows_process.pending_stops.push_back
+ ({thread_id, *ourstatus, windows_process.current_event});
thread_id = 0;
- CHECK (windows_continue (continue_status, desired_stop_thread_id, 0));
+ CHECK (windows_continue (continue_status,
+ windows_process.desired_stop_thread_id, 0));
}
out:
@@ -1721,20 +1680,23 @@ windows_nat_target::wait (ptid_t ptid, struct target_waitstatus *ourstatus,
if (retval)
{
- ptid_t result = ptid_t (current_event.dwProcessId, retval, 0);
+ ptid_t result = ptid_t (windows_process.current_event.dwProcessId,
+ retval, 0);
if (ourstatus->kind () != TARGET_WAITKIND_EXITED
&& ourstatus->kind () != TARGET_WAITKIND_SIGNALLED)
{
- windows_thread_info *th = thread_rec (result, INVALIDATE_CONTEXT);
+ windows_thread_info *th
+ = windows_process.thread_rec (result, INVALIDATE_CONTEXT);
if (th != nullptr)
{
th->stopped_at_software_breakpoint = false;
- if (current_event.dwDebugEventCode == EXCEPTION_DEBUG_EVENT
- && ((current_event.u.Exception.ExceptionRecord.ExceptionCode
+ if (windows_process.current_event.dwDebugEventCode
+ == EXCEPTION_DEBUG_EVENT
+ && ((windows_process.current_event.u.Exception.ExceptionRecord.ExceptionCode
== EXCEPTION_BREAKPOINT)
- || (current_event.u.Exception.ExceptionRecord.ExceptionCode
+ || (windows_process.current_event.u.Exception.ExceptionRecord.ExceptionCode
== STATUS_WX86_BREAKPOINT))
&& windows_initialization_done)
{
@@ -1765,15 +1727,16 @@ windows_nat_target::do_initial_windows_stuff (DWORD pid, bool attaching)
int i;
struct inferior *inf;
- last_sig = GDB_SIGNAL_0;
+ windows_process.last_sig = GDB_SIGNAL_0;
open_process_used = 0;
for (i = 0; i < sizeof (dr) / sizeof (dr[0]); i++)
dr[i] = 0;
#ifdef __CYGWIN__
cygwin_load_start = cygwin_load_end = 0;
#endif
- current_event.dwProcessId = pid;
- memset (&current_event, 0, sizeof (current_event));
+ windows_process.current_event.dwProcessId = pid;
+ memset (&windows_process.current_event, 0,
+ sizeof (windows_process.current_event));
inf = current_inferior ();
if (!inf->target_is_pushed (this))
inf->push_target (this);
@@ -1783,9 +1746,10 @@ windows_nat_target::do_initial_windows_stuff (DWORD pid, bool attaching)
init_wait_for_inferior ();
#ifdef __x86_64__
- ignore_first_breakpoint = !attaching && wow64_process;
+ windows_process.ignore_first_breakpoint
+ = !attaching && windows_process.wow64_process;
- if (!wow64_process)
+ if (!windows_process.wow64_process)
{
windows_set_context_register_offsets (amd64_mappings);
windows_set_segment_register_p (amd64_windows_segment_register_p);
@@ -1839,7 +1803,7 @@ windows_nat_target::do_initial_windows_stuff (DWORD pid, bool attaching)
Rather than try to work around this sort of issue, it is much
simpler to just ignore DLL load/unload events during the startup
phase, and then process them all in one batch now. */
- windows_add_all_dlls ();
+ windows_process.add_all_dlls ();
windows_initialization_done = 1;
return;
@@ -1937,7 +1901,7 @@ windows_nat_target::attach (const char *args, int from_tty)
{
BOOL wow64;
if (IsWow64Process (h, &wow64))
- wow64_process = wow64;
+ windows_process.wow64_process = wow64;
CloseHandle (h);
}
#endif
@@ -1954,10 +1918,11 @@ windows_nat_target::detach (inferior *inf, int from_tty)
ptid_t ptid = minus_one_ptid;
resume (ptid, 0, GDB_SIGNAL_0);
- if (!DebugActiveProcessStop (current_event.dwProcessId))
+ if (!DebugActiveProcessStop (windows_process.current_event.dwProcessId))
{
error (_("Can't detach process %u (error %u)"),
- (unsigned) current_event.dwProcessId, (unsigned) GetLastError ());
+ (unsigned) windows_process.current_event.dwProcessId,
+ (unsigned) GetLastError ());
detached = 0;
}
DebugSetProcessKillOnExit (FALSE);
@@ -1991,18 +1956,20 @@ windows_get_exec_module_filename (char *exe_name_ret, size_t exe_name_max_len)
cbNeeded = 0;
#ifdef __x86_64__
- if (wow64_process)
+ if (windows_process.wow64_process)
{
- if (!EnumProcessModulesEx (current_process_handle, &dh_buf,
- sizeof (HMODULE), &cbNeeded,
- LIST_MODULES_32BIT) || !cbNeeded)
+ if (!EnumProcessModulesEx (windows_process.handle,
+ &dh_buf, sizeof (HMODULE), &cbNeeded,
+ LIST_MODULES_32BIT)
+ || !cbNeeded)
return 0;
}
else
#endif
{
- if (!EnumProcessModules (current_process_handle, &dh_buf,
- sizeof (HMODULE), &cbNeeded) || !cbNeeded)
+ if (!EnumProcessModules (windows_process.handle,
+ &dh_buf, sizeof (HMODULE), &cbNeeded)
+ || !cbNeeded)
return 0;
}
@@ -2026,7 +1993,7 @@ windows_get_exec_module_filename (char *exe_name_ret, size_t exe_name_max_len)
error (_("Error converting executable filename to POSIX: %d."), errno);
}
#else
- len = GetModuleFileNameEx (current_process_handle,
+ len = GetModuleFileNameEx (windows_process.handle,
dh_buf, exe_name_ret, exe_name_max_len);
if (len == 0)
error (_("Error getting executable filename: %u."),
@@ -2071,9 +2038,9 @@ windows_nat_target::files_info ()
{
struct inferior *inf = current_inferior ();
- printf_filtered ("\tUsing the running image of %s %s.\n",
- inf->attach_flag ? "attached" : "child",
- target_pid_to_str (inferior_ptid).c_str ());
+ gdb_printf ("\tUsing the running image of %s %s.\n",
+ inf->attach_flag ? "attached" : "child",
+ target_pid_to_str (inferior_ptid).c_str ());
}
/* Modify CreateProcess parameters for use of a new separate console.
@@ -2767,7 +2734,7 @@ windows_nat_target::create_inferior (const char *exec_file,
#ifdef __x86_64__
BOOL wow64;
if (IsWow64Process (pi.hProcess, &wow64))
- wow64_process = wow64;
+ windows_process.wow64_process = wow64;
#endif
CloseHandle (pi.hThread);
@@ -2790,10 +2757,10 @@ windows_nat_target::mourn_inferior ()
x86_cleanup_dregs();
if (open_process_used)
{
- CHECK (CloseHandle (current_process_handle));
+ CHECK (CloseHandle (windows_process.handle));
open_process_used = 0;
}
- siginfo_er.ExceptionCode = 0;
+ windows_process.siginfo_er.ExceptionCode = 0;
inf_child_target::mourn_inferior ();
}
@@ -2804,7 +2771,8 @@ void
windows_nat_target::interrupt ()
{
DEBUG_EVENTS ("GenerateConsoleCtrlEvent (CTRLC_EVENT, 0)");
- CHECK (GenerateConsoleCtrlEvent (CTRL_C_EVENT, current_event.dwProcessId));
+ CHECK (GenerateConsoleCtrlEvent (CTRL_C_EVENT,
+ windows_process.current_event.dwProcessId));
registers_changed (); /* refresh register state */
}
@@ -2823,19 +2791,19 @@ windows_xfer_memory (gdb_byte *readbuf, const gdb_byte *writebuf,
{
DEBUG_MEM ("write target memory, %s bytes at %s",
pulongest (len), core_addr_to_string (memaddr));
- success = WriteProcessMemory (current_process_handle,
+ success = WriteProcessMemory (windows_process.handle,
(LPVOID) (uintptr_t) memaddr, writebuf,
len, &done);
if (!success)
lasterror = GetLastError ();
- FlushInstructionCache (current_process_handle,
+ FlushInstructionCache (windows_process.handle,
(LPCVOID) (uintptr_t) memaddr, len);
}
else
{
DEBUG_MEM ("read target memory, %s bytes at %s",
pulongest (len), core_addr_to_string (memaddr));
- success = ReadProcessMemory (current_process_handle,
+ success = ReadProcessMemory (windows_process.handle,
(LPCVOID) (uintptr_t) memaddr, readbuf,
len, &done);
if (!success)
@@ -2851,15 +2819,16 @@ windows_xfer_memory (gdb_byte *readbuf, const gdb_byte *writebuf,
void
windows_nat_target::kill ()
{
- CHECK (TerminateProcess (current_process_handle, 0));
+ CHECK (TerminateProcess (windows_process.handle, 0));
for (;;)
{
if (!windows_continue (DBG_CONTINUE, -1, 1))
break;
- if (!wait_for_debug_event (&current_event, INFINITE))
+ if (!wait_for_debug_event (&windows_process.current_event, INFINITE))
break;
- if (current_event.dwDebugEventCode == EXIT_PROCESS_DEBUG_EVENT)
+ if (windows_process.current_event.dwDebugEventCode
+ == EXIT_PROCESS_DEBUG_EVENT)
break;
}
@@ -2889,25 +2858,19 @@ windows_xfer_shared_libraries (struct target_ops *ops,
ULONGEST offset, ULONGEST len,
ULONGEST *xfered_len)
{
- struct obstack obstack;
+ auto_obstack obstack;
const char *buf;
LONGEST len_avail;
- struct so_list *so;
if (writebuf)
return TARGET_XFER_E_IO;
- obstack_init (&obstack);
obstack_grow_str (&obstack, "<library-list>\n");
- for (so = solib_start.next; so; so = so->next)
- {
- lm_info_windows *li = (lm_info_windows *) so->lm_info;
-
- windows_xfer_shared_library (so->so_name, (CORE_ADDR)
- (uintptr_t) li->load_addr,
- &li->text_offset,
- target_gdbarch (), &obstack);
- }
+ for (windows_solib &so : solibs)
+ windows_xfer_shared_library (so.name.c_str (),
+ (CORE_ADDR) (uintptr_t) so.load_addr,
+ &so.text_offset,
+ target_gdbarch (), &obstack);
obstack_grow_str0 (&obstack, "</library-list>\n");
buf = (const char *) obstack_finish (&obstack);
@@ -2921,7 +2884,6 @@ windows_xfer_shared_libraries (struct target_ops *ops,
memcpy (readbuf, buf + offset, len);
}
- obstack_free (&obstack, NULL);
*xfered_len = (ULONGEST) len;
return len != 0 ? TARGET_XFER_OK : TARGET_XFER_EOF;
}
@@ -2932,28 +2894,31 @@ static enum target_xfer_status
windows_xfer_siginfo (gdb_byte *readbuf, ULONGEST offset, ULONGEST len,
ULONGEST *xfered_len)
{
- char *buf = (char *) &siginfo_er;
- size_t bufsize = sizeof (siginfo_er);
+ char *buf = (char *) &windows_process.siginfo_er;
+ size_t bufsize = sizeof (windows_process.siginfo_er);
#ifdef __x86_64__
EXCEPTION_RECORD32 er32;
- if (wow64_process)
+ if (windows_process.wow64_process)
{
buf = (char *) &er32;
bufsize = sizeof (er32);
- er32.ExceptionCode = siginfo_er.ExceptionCode;
- er32.ExceptionFlags = siginfo_er.ExceptionFlags;
- er32.ExceptionRecord = (uintptr_t) siginfo_er.ExceptionRecord;
- er32.ExceptionAddress = (uintptr_t) siginfo_er.ExceptionAddress;
- er32.NumberParameters = siginfo_er.NumberParameters;
+ er32.ExceptionCode = windows_process.siginfo_er.ExceptionCode;
+ er32.ExceptionFlags = windows_process.siginfo_er.ExceptionFlags;
+ er32.ExceptionRecord
+ = (uintptr_t) windows_process.siginfo_er.ExceptionRecord;
+ er32.ExceptionAddress
+ = (uintptr_t) windows_process.siginfo_er.ExceptionAddress;
+ er32.NumberParameters = windows_process.siginfo_er.NumberParameters;
int i;
for (i = 0; i < EXCEPTION_MAXIMUM_PARAMETERS; i++)
- er32.ExceptionInformation[i] = siginfo_er.ExceptionInformation[i];
+ er32.ExceptionInformation[i]
+ = windows_process.siginfo_er.ExceptionInformation[i];
}
#endif
- if (siginfo_er.ExceptionCode == 0)
+ if (windows_process.siginfo_er.ExceptionCode == 0)
return TARGET_XFER_E_IO;
if (readbuf == nullptr)
@@ -3011,7 +2976,7 @@ windows_nat_target::get_tib_address (ptid_t ptid, CORE_ADDR *addr)
{
windows_thread_info *th;
- th = thread_rec (ptid, DONT_INVALIDATE_CONTEXT);
+ th = windows_process.thread_rec (ptid, DONT_INVALIDATE_CONTEXT);
if (th == NULL)
return false;
@@ -3032,7 +2997,10 @@ windows_nat_target::get_ada_task_ptid (long lwp, ULONGEST thread)
const char *
windows_nat_target::thread_name (struct thread_info *thr)
{
- return thread_rec (thr->ptid, DONT_INVALIDATE_CONTEXT)->name.get ();
+ windows_thread_info *th
+ = windows_process.thread_rec (thr->ptid,
+ DONT_INVALIDATE_CONTEXT);
+ return th->thread_name ();
}
@@ -3152,7 +3120,7 @@ cygwin_set_dr (int i, CORE_ADDR addr)
_("Invalid register %d in cygwin_set_dr.\n"), i);
dr[i] = addr;
- for (windows_thread_info *th : thread_list)
+ for (auto &th : thread_list)
th->debug_registers_changed = true;
}
@@ -3164,7 +3132,7 @@ cygwin_set_dr7 (unsigned long val)
{
dr[7] = (CORE_ADDR) val;
- for (windows_thread_info *th : thread_list)
+ for (auto &th : thread_list)
th->debug_registers_changed = true;
}
@@ -3204,8 +3172,9 @@ windows_nat_target::thread_alive (ptid_t ptid)
{
gdb_assert (ptid.lwp () != 0);
- return (WaitForSingleObject (thread_rec (ptid, DONT_INVALIDATE_CONTEXT)->h, 0)
- != WAIT_OBJECT_0);
+ windows_thread_info *th
+ = windows_process.thread_rec (ptid, DONT_INVALIDATE_CONTEXT);
+ return WaitForSingleObject (th->h, 0) != WAIT_OBJECT_0;
}
void _initialize_check_for_gdb_ini ();
diff --git a/gdb/windows-tdep.c b/gdb/windows-tdep.c
index 78984d65fd6..9049f1e17f5 100644
--- a/gdb/windows-tdep.c
+++ b/gdb/windows-tdep.c
@@ -17,7 +17,7 @@
#include "defs.h"
#include "windows-tdep.h"
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
#include "xml-support.h"
#include "gdbarch.h"
#include "target.h"
@@ -481,24 +481,24 @@ display_one_tib (ptid_t ptid)
if (target_get_tib_address (ptid, &thread_local_base) == 0)
{
- printf_filtered (_("Unable to get thread local base for %s\n"),
- target_pid_to_str (ptid).c_str ());
+ gdb_printf (_("Unable to get thread local base for %s\n"),
+ target_pid_to_str (ptid).c_str ());
return -1;
}
if (target_read (current_inferior ()->top_target (), TARGET_OBJECT_MEMORY,
NULL, tib, thread_local_base, tib_size) != tib_size)
{
- printf_filtered (_("Unable to read thread information "
- "block for %s at address %s\n"),
- target_pid_to_str (ptid).c_str (),
- paddress (target_gdbarch (), thread_local_base));
+ gdb_printf (_("Unable to read thread information "
+ "block for %s at address %s\n"),
+ target_pid_to_str (ptid).c_str (),
+ paddress (target_gdbarch (), thread_local_base));
return -1;
}
- printf_filtered (_("Thread Information Block %s at %s\n"),
- target_pid_to_str (ptid).c_str (),
- paddress (target_gdbarch (), thread_local_base));
+ gdb_printf (_("Thread Information Block %s at %s\n"),
+ target_pid_to_str (ptid).c_str (),
+ paddress (target_gdbarch (), thread_local_base));
index = (gdb_byte *) tib;
@@ -508,10 +508,10 @@ display_one_tib (ptid_t ptid)
{
val = extract_unsigned_integer (index, size, byte_order);
if (i < max_name)
- printf_filtered (_("%s is 0x%s\n"), TIB_NAME[i], phex (val, size));
+ gdb_printf (_("%s is 0x%s\n"), TIB_NAME[i], phex (val, size));
else if (val != 0)
- printf_filtered (_("TIB[0x%s] is 0x%s\n"), phex (i * size, 2),
- phex (val, size));
+ gdb_printf (_("TIB[0x%s] is 0x%s\n"), phex (i * size, 2),
+ phex (val, size));
index += size;
}
return 1;
@@ -601,8 +601,8 @@ static void
show_maint_show_all_tib (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Show all non-zero elements of "
- "Thread Information Block is %s.\n"), value);
+ gdb_printf (file, _("Show all non-zero elements of "
+ "Thread Information Block is %s.\n"), value);
}
@@ -970,7 +970,6 @@ static const struct internalvar_funcs tlb_funcs =
{
tlb_make_value,
NULL,
- NULL
};
/* Layout of an element of a PE's Import Directory Table. Based on:
diff --git a/gdb/x86-bsd-nat.c b/gdb/x86-bsd-nat.c
index 06da979f83b..099059a5e0b 100644
--- a/gdb/x86-bsd-nat.c
+++ b/gdb/x86-bsd-nat.c
@@ -33,10 +33,6 @@
#include "inf-ptrace.h"
-#ifdef PT_GETXSTATE_INFO
-size_t x86bsd_xsave_len;
-#endif
-
/* Support for debug registers. */
#ifdef HAVE_PT_GETDBREGS
diff --git a/gdb/x86-bsd-nat.h b/gdb/x86-bsd-nat.h
index a545ee33306..8b6760e7169 100644
--- a/gdb/x86-bsd-nat.h
+++ b/gdb/x86-bsd-nat.h
@@ -22,9 +22,6 @@
#include "x86-nat.h"
-/* Low level x86 XSAVE info. */
-extern size_t x86bsd_xsave_len;
-
/* A prototype *BSD/x86 target. */
#ifdef HAVE_PT_GETDBREGS
diff --git a/gdb/x86-fbsd-nat.c b/gdb/x86-fbsd-nat.c
new file mode 100644
index 00000000000..ad8c693b68e
--- /dev/null
+++ b/gdb/x86-fbsd-nat.c
@@ -0,0 +1,45 @@
+/* Native-dependent code for FreeBSD x86.
+
+ Copyright (C) 2022 Free Software Foundation, Inc.
+
+ This file is part of GDB.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#include "defs.h"
+#include "x86-fbsd-nat.h"
+
+/* Implement the virtual fbsd_nat_target::low_new_fork method. */
+
+void
+x86_fbsd_nat_target::low_new_fork (ptid_t parent, pid_t child)
+{
+ struct x86_debug_reg_state *parent_state, *child_state;
+
+ /* If there is no parent state, no watchpoints nor breakpoints have
+ been set, so there is nothing to do. */
+ parent_state = x86_lookup_debug_reg_state (parent.pid ());
+ if (parent_state == nullptr)
+ return;
+
+ /* The kernel clears debug registers in the new child process after
+ fork, but GDB core assumes the child inherits the watchpoints/hw
+ breakpoints of the parent, and will remove them all from the
+ forked off process. Copy the debug registers mirrors into the
+ new process so that all breakpoints and watchpoints can be
+ removed together. */
+
+ child_state = x86_debug_reg_state (child);
+ *child_state = *parent_state;
+}
diff --git a/gdb/x86-fbsd-nat.h b/gdb/x86-fbsd-nat.h
new file mode 100644
index 00000000000..cdb8cd36a4c
--- /dev/null
+++ b/gdb/x86-fbsd-nat.h
@@ -0,0 +1,36 @@
+/* Native-dependent code for FreeBSD x86.
+
+ Copyright (C) 2022 Free Software Foundation, Inc.
+
+ This file is part of GDB.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#ifndef X86_FBSD_NAT_H
+#define X86_FBSD_NAT_H
+
+#include "fbsd-nat.h"
+#include "x86-bsd-nat.h"
+
+/* A prototype FreeBSD/x86 target. */
+
+class x86_fbsd_nat_target : public x86bsd_nat_target<fbsd_nat_target>
+{
+ bool supports_stopped_by_hw_breakpoint () override
+ { return true; }
+
+ void low_new_fork (ptid_t parent, pid_t child) override;
+};
+
+#endif /* x86-bsd-nat.h */
diff --git a/gdb/x86-linux-nat.c b/gdb/x86-linux-nat.c
index 55d2a1d9ab0..80be9733310 100644
--- a/gdb/x86-linux-nat.c
+++ b/gdb/x86-linux-nat.c
@@ -212,10 +212,11 @@ x86_linux_nat_target::read_description ()
/* Enable branch tracing. */
struct btrace_target_info *
-x86_linux_nat_target::enable_btrace (ptid_t ptid,
+x86_linux_nat_target::enable_btrace (thread_info *tp,
const struct btrace_config *conf)
{
struct btrace_target_info *tinfo = nullptr;
+ ptid_t ptid = tp->ptid;
try
{
tinfo = linux_enable_btrace (ptid, conf);
diff --git a/gdb/x86-linux-nat.h b/gdb/x86-linux-nat.h
index e0a78bf9f00..1a562349691 100644
--- a/gdb/x86-linux-nat.h
+++ b/gdb/x86-linux-nat.h
@@ -32,7 +32,7 @@ struct x86_linux_nat_target : public x86_nat_target<linux_nat_target>
/* Add the description reader. */
const struct target_desc *read_description () override;
- struct btrace_target_info *enable_btrace (ptid_t ptid,
+ struct btrace_target_info *enable_btrace (thread_info *tp,
const struct btrace_config *conf) override;
void disable_btrace (struct btrace_target_info *tinfo) override;
void teardown_btrace (struct btrace_target_info *tinfo) override;
diff --git a/gdb/x86-nat.c b/gdb/x86-nat.c
index d0d52a00265..36513dd8cfb 100644
--- a/gdb/x86-nat.c
+++ b/gdb/x86-nat.c
@@ -22,6 +22,8 @@
#include "gdbcmd.h"
#include "inferior.h"
+#include <unordered_map>
+
/* Support for hardware watchpoints and breakpoints using the x86
debug registers.
@@ -36,67 +38,24 @@
/* Low-level function vector. */
struct x86_dr_low_type x86_dr_low;
-/* Per-process data. We don't bind this to a per-inferior registry
- because of targets like x86 GNU/Linux that need to keep track of
- processes that aren't bound to any inferior (e.g., fork children,
- checkpoints). */
-
-struct x86_process_info
-{
- /* Linked list. */
- struct x86_process_info *next;
-
- /* The process identifier. */
- pid_t pid;
-
- /* Copy of x86 hardware debug registers. */
- struct x86_debug_reg_state state;
-};
-
-static struct x86_process_info *x86_process_list = NULL;
-
-/* Find process data for process PID. */
-
-static struct x86_process_info *
-x86_find_process_pid (pid_t pid)
-{
- struct x86_process_info *proc;
-
- for (proc = x86_process_list; proc; proc = proc->next)
- if (proc->pid == pid)
- return proc;
-
- return NULL;
-}
-
-/* Add process data for process PID. Returns newly allocated info
- object. */
-
-static struct x86_process_info *
-x86_add_process (pid_t pid)
-{
- struct x86_process_info *proc = XCNEW (struct x86_process_info);
-
- proc->pid = pid;
- proc->next = x86_process_list;
- x86_process_list = proc;
+/* Hash table storing per-process data. We don't bind this to a
+ per-inferior registry because of targets like x86 GNU/Linux that
+ need to keep track of processes that aren't bound to any inferior
+ (e.g., fork children, checkpoints). */
- return proc;
-}
+static std::unordered_map<pid_t,
+ struct x86_debug_reg_state> x86_debug_process_state;
-/* Get data specific info for process PID, creating it if necessary.
- Never returns NULL. */
+/* See x86-nat.h. */
-static struct x86_process_info *
-x86_process_info_get (pid_t pid)
+struct x86_debug_reg_state *
+x86_lookup_debug_reg_state (pid_t pid)
{
- struct x86_process_info *proc;
-
- proc = x86_find_process_pid (pid);
- if (proc == NULL)
- proc = x86_add_process (pid);
+ auto it = x86_debug_process_state.find (pid);
+ if (it != x86_debug_process_state.end ())
+ return &it->second;
- return proc;
+ return nullptr;
}
/* Get debug registers state for process PID. */
@@ -104,7 +63,7 @@ x86_process_info_get (pid_t pid)
struct x86_debug_reg_state *
x86_debug_reg_state (pid_t pid)
{
- return &x86_process_info_get (pid)->state;
+ return &x86_debug_process_state[pid];
}
/* See declaration in x86-nat.h. */
@@ -112,24 +71,7 @@ x86_debug_reg_state (pid_t pid)
void
x86_forget_process (pid_t pid)
{
- struct x86_process_info *proc, **proc_link;
-
- proc = x86_process_list;
- proc_link = &x86_process_list;
-
- while (proc != NULL)
- {
- if (proc->pid == pid)
- {
- *proc_link = proc->next;
-
- xfree (proc);
- return;
- }
-
- proc_link = &proc->next;
- proc = *proc_link;
- }
+ x86_debug_process_state.erase (pid);
}
/* Clear the reference counts and forget everything we knew about the
diff --git a/gdb/x86-nat.h b/gdb/x86-nat.h
index 913291a2305..d9c2a3f6e14 100644
--- a/gdb/x86-nat.h
+++ b/gdb/x86-nat.h
@@ -40,6 +40,11 @@ extern void x86_set_debug_register_length (int len);
extern void x86_cleanup_dregs (void);
+/* Return the debug register state for process PID. If no existing
+ state is found for this process, return nullptr. */
+
+struct x86_debug_reg_state *x86_lookup_debug_reg_state (pid_t pid);
+
/* Called whenever GDB is no longer debugging process PID. It deletes
data structures that keep track of debug register state. */
diff --git a/gdb/xcoffread.c b/gdb/xcoffread.c
index 33e9148f672..d8735d29ede 100644
--- a/gdb/xcoffread.c
+++ b/gdb/xcoffread.c
@@ -239,8 +239,6 @@ static void read_xcoff_symtab (struct objfile *, legacy_psymtab *);
static void add_stab_to_list (char *, struct pending_stabs **);
#endif
-static struct linetable *arrange_linetable (struct linetable *);
-
static void record_include_end (struct coff_symbol *);
static void process_linenos (CORE_ADDR, CORE_ADDR);
@@ -412,109 +410,81 @@ add_stab_to_list (char *stabname, struct pending_stabs **stabvector)
/* Given a line table with function entries are marked, arrange its
functions in ascending order and strip off function entry markers
- and return it in a newly created table. If the old one is good
- enough, return the old one. */
+ and return it in a newly created table. */
+
/* FIXME: I think all this stuff can be replaced by just passing
- sort_linevec = 1 to end_symtab. */
+ sort_linevec = 1 to end_compunit_symtab. */
-static struct linetable *
-arrange_linetable (struct linetable *oldLineTb)
+static void
+arrange_linetable (std::vector<linetable_entry> &old_linetable)
{
- int ii, jj, newline, /* new line count */
- function_count; /* # of functions */
-
- struct linetable_entry *fentry; /* function entry vector */
- int fentry_size; /* # of function entries */
- struct linetable *newLineTb; /* new line table */
int extra_lines = 0;
-#define NUM_OF_FUNCTIONS 20
-
- fentry_size = NUM_OF_FUNCTIONS;
- fentry = XNEWVEC (struct linetable_entry, fentry_size);
+ std::vector<linetable_entry> fentries;
- for (function_count = 0, ii = 0; ii < oldLineTb->nitems; ++ii)
+ for (int ii = 0; ii < old_linetable.size (); ++ii)
{
- if (oldLineTb->item[ii].is_stmt == 0)
+ if (old_linetable[ii].is_stmt == 0)
continue;
- if (oldLineTb->item[ii].line == 0)
- { /* Function entry found. */
- if (function_count >= fentry_size)
- { /* Make sure you have room. */
- fentry_size *= 2;
- fentry = (struct linetable_entry *)
- xrealloc (fentry,
- fentry_size * sizeof (struct linetable_entry));
- }
- fentry[function_count].line = ii;
- fentry[function_count].is_stmt = 1;
- fentry[function_count].pc = oldLineTb->item[ii].pc;
- ++function_count;
+ if (old_linetable[ii].line == 0)
+ {
+ /* Function entry found. */
+ fentries.emplace_back ();
+ linetable_entry &e = fentries.back ();
+ e.line = ii;
+ e.is_stmt = 1;
+ e.pc = old_linetable[ii].pc;
/* If the function was compiled with XLC, we may have to add an
extra line entry later. Reserve space for that. */
- if (ii + 1 < oldLineTb->nitems
- && oldLineTb->item[ii].pc != oldLineTb->item[ii + 1].pc)
+ if (ii + 1 < old_linetable.size ()
+ && old_linetable[ii].pc != old_linetable[ii + 1].pc)
extra_lines++;
}
}
- if (function_count == 0)
- {
- xfree (fentry);
- return oldLineTb;
- }
- else if (function_count > 1)
- std::sort (fentry, fentry + function_count,
- [] (const linetable_entry &lte1, const linetable_entry& lte2)
- { return lte1.pc < lte2.pc; });
+ if (fentries.empty ())
+ return;
+
+ std::sort (fentries.begin (), fentries.end (),
+ [] (const linetable_entry &lte1, const linetable_entry& lte2)
+ { return lte1.pc < lte2.pc; });
/* Allocate a new line table. */
- newLineTb = (struct linetable *)
- xmalloc
- (sizeof (struct linetable) +
- (oldLineTb->nitems - function_count + extra_lines) * sizeof (struct linetable_entry));
+ std::vector<linetable_entry> new_linetable;
+ new_linetable.reserve (old_linetable.size ());
/* If line table does not start with a function beginning, copy up until
a function begin. */
-
- newline = 0;
- if (oldLineTb->item[0].line != 0)
- for (newline = 0;
- newline < oldLineTb->nitems && oldLineTb->item[newline].line;
- ++newline)
- newLineTb->item[newline] = oldLineTb->item[newline];
+ for (int i = 0; i < old_linetable.size () && old_linetable[i].line != 0; ++i)
+ new_linetable.push_back (old_linetable[i]);
/* Now copy function lines one by one. */
-
- for (ii = 0; ii < function_count; ++ii)
+ for (const linetable_entry &entry : fentries)
{
/* If the function was compiled with XLC, we may have to add an
extra line to cover the function prologue. */
- jj = fentry[ii].line;
- if (jj + 1 < oldLineTb->nitems
- && oldLineTb->item[jj].pc != oldLineTb->item[jj + 1].pc)
+ int jj = entry.line;
+ if (jj + 1 < old_linetable.size ()
+ && old_linetable[jj].pc != old_linetable[jj + 1].pc)
{
- newLineTb->item[newline] = oldLineTb->item[jj];
- newLineTb->item[newline].line = oldLineTb->item[jj + 1].line;
- newline++;
+ new_linetable.push_back (old_linetable[jj]);
+ new_linetable.back ().line = old_linetable[jj + 1].line;
}
- for (jj = fentry[ii].line + 1;
- jj < oldLineTb->nitems && oldLineTb->item[jj].line != 0;
- ++jj, ++newline)
- newLineTb->item[newline] = oldLineTb->item[jj];
+ for (jj = entry.line + 1;
+ jj < old_linetable.size () && old_linetable[jj].line != 0;
+ ++jj)
+ new_linetable.push_back (old_linetable[jj]);
}
- xfree (fentry);
- /* The number of items in the line table must include these
- extra lines which were added in case of XLC compiled functions. */
- newLineTb->nitems = oldLineTb->nitems - function_count + extra_lines;
- return newLineTb;
+
+ new_linetable.shrink_to_fit ();
+ old_linetable = std::move (new_linetable);
}
/* include file support: C_BINCL/C_EINCL pairs will be kept in the
- following `IncludeChain'. At the end of each symtab (end_symtab),
+ following `IncludeChain'. At the end of each symtab (end_compunit_symtab),
we will determine if we should create additional symtab's to
represent if (the include files. */
@@ -611,7 +581,7 @@ static struct objfile *this_symtab_objfile;
static void
process_linenos (CORE_ADDR start, CORE_ADDR end)
{
- int offset, ii;
+ int offset;
file_ptr max_offset
= XCOFF_DATA (this_symtab_objfile)->max_lineno_offset;
@@ -632,8 +602,6 @@ process_linenos (CORE_ADDR start, CORE_ADDR end)
if (offset == 0)
goto return_after_cleanup;
- memset (&main_subfile, '\0', sizeof (main_subfile));
-
if (inclIndx == 0)
/* All source lines were in the main source file. None in include
files. */
@@ -649,10 +617,8 @@ process_linenos (CORE_ADDR start, CORE_ADDR end)
coff_data (this_symtab_objfile->obfd)->local_linesz;
main_source_baseline = 0;
- for (ii = 0; ii < inclIndx; ++ii)
+ for (int ii = 0; ii < inclIndx; ++ii)
{
- struct subfile *tmpSubfile;
-
/* If there is main file source before include file, enter it. */
if (offset < inclTable[ii].begin)
{
@@ -675,14 +641,12 @@ process_linenos (CORE_ADDR start, CORE_ADDR end)
else
{
/* Have a new subfile for the include file. */
+ inclTable[ii].subfile = new subfile;
- tmpSubfile = inclTable[ii].subfile = XNEW (struct subfile);
-
- memset (tmpSubfile, '\0', sizeof (struct subfile));
firstLine = &(inclTable[ii].funStartLine);
/* Enter include file's lines now. */
- enter_line_range (tmpSubfile, inclTable[ii].begin,
+ enter_line_range (inclTable[ii].subfile, inclTable[ii].begin,
inclTable[ii].end, start, 0, firstLine);
}
@@ -700,49 +664,23 @@ process_linenos (CORE_ADDR start, CORE_ADDR end)
}
/* Process main file's line numbers. */
- if (main_subfile.line_vector)
+ if (!main_subfile.line_vector_entries.empty ())
{
- struct linetable *lineTb, *lv;
-
- lv = main_subfile.line_vector;
-
/* Line numbers are not necessarily ordered. xlc compilation will
put static function to the end. */
-
- struct subfile *current_subfile = get_current_subfile ();
- lineTb = arrange_linetable (lv);
- if (lv == lineTb)
- {
- current_subfile->line_vector = (struct linetable *)
- xrealloc (lv, (sizeof (struct linetable)
- + lv->nitems * sizeof (struct linetable_entry)));
- }
- else
- {
- xfree (lv);
- current_subfile->line_vector = lineTb;
- }
-
- current_subfile->line_vector_length =
- current_subfile->line_vector->nitems;
+ arrange_linetable (main_subfile.line_vector_entries);
}
/* Now, process included files' line numbers. */
- for (ii = 0; ii < inclIndx; ++ii)
+ for (int ii = 0; ii < inclIndx; ++ii)
{
if (inclTable[ii].subfile != ((struct subfile *) &main_subfile)
- && (inclTable[ii].subfile)->line_vector) /* Useless if!!!
- FIXMEmgo */
+ && !inclTable[ii].subfile->line_vector_entries.empty ())
{
- struct linetable *lineTb, *lv;
-
- lv = (inclTable[ii].subfile)->line_vector;
-
/* Line numbers are not necessarily ordered. xlc compilation will
put static function to the end. */
-
- lineTb = arrange_linetable (lv);
+ arrange_linetable (inclTable[ii].subfile->line_vector_entries);
push_subfile ();
@@ -772,28 +710,11 @@ process_linenos (CORE_ADDR start, CORE_ADDR end)
if (fakename == NULL)
fakename = " ?";
start_subfile (fakename);
- xfree (get_current_subfile ()->name);
}
struct subfile *current_subfile = get_current_subfile ();
- current_subfile->name = xstrdup (inclTable[ii].name);
+ current_subfile->name = inclTable[ii].name;
#endif
- if (lv == lineTb)
- {
- current_subfile->line_vector =
- (struct linetable *) xrealloc
- (lv, (sizeof (struct linetable)
- + lv->nitems * sizeof (struct linetable_entry)));
-
- }
- else
- {
- xfree (lv);
- current_subfile->line_vector = lineTb;
- }
-
- current_subfile->line_vector_length =
- current_subfile->line_vector->nitems;
start_subfile (pop_subfile ());
}
}
@@ -1042,8 +963,8 @@ read_xcoff_symtab (struct objfile *objfile, legacy_psymtab *pst)
pst_symtab_language = deduce_language_from_filename (filestring);
start_stabs ();
- start_symtab (objfile, filestring, NULL, file_start_addr,
- pst_symtab_language);
+ start_compunit_symtab (objfile, filestring, NULL, file_start_addr,
+ pst_symtab_language);
record_debugformat (debugfmt);
symnum = ((struct symloc *) pst->read_symtab_private)->first_symnum;
max_symnum =
@@ -1130,14 +1051,14 @@ read_xcoff_symtab (struct objfile *objfile, legacy_psymtab *pst)
{
if (get_last_source_file ())
{
- pst->compunit_symtab = end_symtab (cur_src_end_addr,
- SECT_OFF_TEXT (objfile));
+ pst->compunit_symtab = end_compunit_symtab
+ (cur_src_end_addr, SECT_OFF_TEXT (objfile));
end_stabs ();
}
start_stabs ();
- start_symtab (objfile, "_globals_", NULL,
- 0, pst_symtab_language);
+ start_compunit_symtab (objfile, "_globals_", NULL,
+ 0, pst_symtab_language);
record_debugformat (debugfmt);
cur_src_end_addr = first_object_file_end;
/* Done with all files, everything from here on is globals. */
@@ -1221,12 +1142,13 @@ read_xcoff_symtab (struct objfile *objfile, legacy_psymtab *pst)
{
complete_symtab (filestring, file_start_addr);
cur_src_end_addr = file_end_addr;
- end_symtab (file_end_addr, SECT_OFF_TEXT (objfile));
+ end_compunit_symtab (file_end_addr,
+ SECT_OFF_TEXT (objfile));
end_stabs ();
start_stabs ();
/* Give all csects for this source file the same
name. */
- start_symtab (objfile, filestring, NULL,
+ start_compunit_symtab (objfile, filestring, NULL,
0, pst_symtab_language);
record_debugformat (debugfmt);
}
@@ -1327,7 +1249,7 @@ read_xcoff_symtab (struct objfile *objfile, legacy_psymtab *pst)
complete_symtab (filestring, file_start_addr);
cur_src_end_addr = file_end_addr;
- end_symtab (file_end_addr, SECT_OFF_TEXT (objfile));
+ end_compunit_symtab (file_end_addr, SECT_OFF_TEXT (objfile));
end_stabs ();
/* XCOFF, according to the AIX 3.2 documentation, puts the
@@ -1346,7 +1268,8 @@ read_xcoff_symtab (struct objfile *objfile, legacy_psymtab *pst)
filestring = cs->c_name;
start_stabs ();
- start_symtab (objfile, filestring, NULL, 0, pst_symtab_language);
+ start_compunit_symtab (objfile, filestring, NULL, 0,
+ pst_symtab_language);
record_debugformat (debugfmt);
last_csect_name = 0;
@@ -1514,7 +1437,7 @@ read_xcoff_symtab (struct objfile *objfile, legacy_psymtab *pst)
complete_symtab (filestring, file_start_addr);
cur_src_end_addr = file_end_addr;
- cust = end_symtab (file_end_addr, SECT_OFF_TEXT (objfile));
+ cust = end_compunit_symtab (file_end_addr, SECT_OFF_TEXT (objfile));
/* When reading symbols for the last C_FILE of the objfile, try
to make sure that we set pst->compunit_symtab to the symtab for the
file, not to the _globals_ symtab. I'm not sure whether this
@@ -1561,8 +1484,8 @@ process_xcoff_symbol (struct coff_symbol *cs, struct objfile *objfile)
++name;
/* default assumptions */
- SET_SYMBOL_VALUE_ADDRESS (sym, cs->c_value + off);
- SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
+ sym->set_value_address (cs->c_value + off);
+ sym->set_domain (VAR_DOMAIN);
sym->set_section_index (secnum_to_section (cs->c_secnum, objfile));
if (ISFCN (cs->c_type))
@@ -1572,9 +1495,9 @@ process_xcoff_symbol (struct coff_symbol *cs, struct objfile *objfile)
patch_block_stabs (), unless the file was compiled without -g. */
sym->set_linkage_name (SYMNAME_ALLOC (name, symname_alloced));
- SYMBOL_TYPE (sym) = objfile_type (objfile)->nodebug_text_symbol;
+ sym->set_type (objfile_type (objfile)->nodebug_text_symbol);
- SYMBOL_ACLASS_INDEX (sym) = LOC_BLOCK;
+ sym->set_aclass_index (LOC_BLOCK);
sym2 = new (&objfile->objfile_obstack) symbol (*sym);
if (cs->c_sclass == C_EXT || C_WEAKEXT)
@@ -1585,7 +1508,7 @@ process_xcoff_symbol (struct coff_symbol *cs, struct objfile *objfile)
else
{
/* In case we can't figure out the type, provide default. */
- SYMBOL_TYPE (sym) = objfile_type (objfile)->nodebug_data_symbol;
+ sym->set_type (objfile_type (objfile)->nodebug_data_symbol);
switch (cs->c_sclass)
{
@@ -1658,9 +1581,8 @@ process_xcoff_symbol (struct coff_symbol *cs, struct objfile *objfile)
cs->c_name, 0, 0, objfile);
if (sym != NULL)
{
- SET_SYMBOL_VALUE_ADDRESS (sym,
- SYMBOL_VALUE_ADDRESS (sym)
- + static_block_base);
+ sym->set_value_address
+ (sym->value_address () + static_block_base);
sym->set_section_index (static_block_section);
}
return sym;
@@ -2734,13 +2656,8 @@ scan_xcoff_symtab (minimal_symbol_reader &reader,
case 'f':
if (! pst)
{
- int name_len = p - namestring;
- char *name = (char *) xmalloc (name_len + 1);
-
- memcpy (name, namestring, name_len);
- name[name_len] = '\0';
- function_outside_compilation_unit_complaint (name);
- xfree (name);
+ std::string name (namestring, (p - namestring));
+ function_outside_compilation_unit_complaint (name.c_str ());
}
pst->add_psymbol (gdb::string_view (namestring,
p - namestring),
@@ -2758,13 +2675,8 @@ scan_xcoff_symtab (minimal_symbol_reader &reader,
case 'F':
if (! pst)
{
- int name_len = p - namestring;
- char *name = (char *) xmalloc (name_len + 1);
-
- memcpy (name, namestring, name_len);
- name[name_len] = '\0';
- function_outside_compilation_unit_complaint (name);
- xfree (name);
+ std::string name (namestring, (p - namestring));
+ function_outside_compilation_unit_complaint (name.c_str ());
}
/* We need only the minimal symbols for these
@@ -2960,9 +2872,7 @@ xcoff_initial_scan (struct objfile *objfile, symfile_add_flags symfile_flags)
/* DWARF2 sections. */
if (dwarf2_has_info (objfile, &dwarf2_xcoff_names))
- dwarf2_build_psymtabs (objfile);
-
- dwarf2_build_frame_info (objfile);
+ dwarf2_initialize_objfile (objfile);
}
static void
diff --git a/gdb/xml-support.c b/gdb/xml-support.c
index 8b514950bb4..9659fd0877a 100644
--- a/gdb/xml-support.c
+++ b/gdb/xml-support.c
@@ -183,11 +183,11 @@ gdb_xml_parser::vdebug (const char *format, va_list ap)
std::string message = string_vprintf (format, ap);
if (line)
- fprintf_unfiltered (gdb_stderr, "%s (line %d): %s\n",
- m_name, line, message.c_str ());
+ gdb_printf (gdb_stderr, "%s (line %d): %s\n",
+ m_name, line, message.c_str ());
else
- fprintf_unfiltered (gdb_stderr, "%s: %s\n",
- m_name, message.c_str ());
+ gdb_printf (gdb_stderr, "%s: %s\n",
+ m_name, message.c_str ());
}
void
@@ -959,7 +959,7 @@ static void
show_debug_xml (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("XML debugging is %s.\n"), value);
+ gdb_printf (file, _("XML debugging is %s.\n"), value);
}
gdb::optional<gdb::char_vector>
diff --git a/gdb/xml-support.h b/gdb/xml-support.h
index 1be77f8eaae..13edeaec910 100644
--- a/gdb/xml-support.h
+++ b/gdb/xml-support.h
@@ -21,7 +21,7 @@
#ifndef XML_SUPPORT_H
#define XML_SUPPORT_H
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
#include "gdbsupport/xml-utils.h"
#include "gdbsupport/byte-vector.h"
#include "gdbsupport/gdb_optional.h"
diff --git a/gdb/xtensa-tdep.c b/gdb/xtensa-tdep.c
index f00357f013a..b6558838e44 100644
--- a/gdb/xtensa-tdep.c
+++ b/gdb/xtensa-tdep.c
@@ -49,19 +49,19 @@ static unsigned int xtensa_debug_level = 0;
#define DEBUGWARN(args...) \
if (xtensa_debug_level > 0) \
- fprintf_unfiltered (gdb_stdlog, "(warn ) " args)
+ gdb_printf (gdb_stdlog, "(warn ) " args)
#define DEBUGINFO(args...) \
if (xtensa_debug_level > 1) \
- fprintf_unfiltered (gdb_stdlog, "(info ) " args)
+ gdb_printf (gdb_stdlog, "(info ) " args)
#define DEBUGTRACE(args...) \
if (xtensa_debug_level > 2) \
- fprintf_unfiltered (gdb_stdlog, "(trace) " args)
+ gdb_printf (gdb_stdlog, "(trace) " args)
#define DEBUGVERB(args...) \
if (xtensa_debug_level > 3) \
- fprintf_unfiltered (gdb_stdlog, "(verb ) " args)
+ gdb_printf (gdb_stdlog, "(verb ) " args)
/* According to the ABI, the SP must be aligned to 16-byte boundaries. */
@@ -712,10 +712,10 @@ xtensa_pseudo_register_write (struct gdbarch *gdbarch,
_("invalid register number %d"), regnum);
}
-static struct reggroup *xtensa_ar_reggroup;
-static struct reggroup *xtensa_user_reggroup;
-static struct reggroup *xtensa_vectra_reggroup;
-static struct reggroup *xtensa_cp[XTENSA_MAX_COPROCESSOR];
+static const reggroup *xtensa_ar_reggroup;
+static const reggroup *xtensa_user_reggroup;
+static const reggroup *xtensa_vectra_reggroup;
+static const reggroup *xtensa_cp[XTENSA_MAX_COPROCESSOR];
static void
xtensa_init_reggroups (void)
@@ -734,28 +734,17 @@ xtensa_init_reggroups (void)
static void
xtensa_add_reggroups (struct gdbarch *gdbarch)
{
- int i;
-
- /* Predefined groups. */
- reggroup_add (gdbarch, all_reggroup);
- reggroup_add (gdbarch, save_reggroup);
- reggroup_add (gdbarch, restore_reggroup);
- reggroup_add (gdbarch, system_reggroup);
- reggroup_add (gdbarch, vector_reggroup);
- reggroup_add (gdbarch, general_reggroup);
- reggroup_add (gdbarch, float_reggroup);
-
/* Xtensa-specific groups. */
reggroup_add (gdbarch, xtensa_ar_reggroup);
reggroup_add (gdbarch, xtensa_user_reggroup);
reggroup_add (gdbarch, xtensa_vectra_reggroup);
- for (i = 0; i < XTENSA_MAX_COPROCESSOR; i++)
+ for (int i = 0; i < XTENSA_MAX_COPROCESSOR; i++)
reggroup_add (gdbarch, xtensa_cp[i]);
}
static int
-xtensa_coprocessor_register_group (struct reggroup *group)
+xtensa_coprocessor_register_group (const struct reggroup *group)
{
int i;
@@ -776,7 +765,7 @@ xtensa_coprocessor_register_group (struct reggroup *group)
static int
xtensa_register_reggroup_p (struct gdbarch *gdbarch,
int regnum,
- struct reggroup *group)
+ const struct reggroup *group)
{
xtensa_gdbarch_tdep *tdep = (xtensa_gdbarch_tdep *) gdbarch_tdep (gdbarch);
xtensa_register_t* reg = &tdep->regmap[regnum];
@@ -1732,23 +1721,23 @@ xtensa_push_dummy_call (struct gdbarch *gdbarch,
{
struct value *arg = args[i];
struct type *arg_type = check_typedef (value_type (arg));
- fprintf_unfiltered (gdb_stdlog, "%2d: %s %3s ", i,
- host_address_to_string (arg),
- pulongest (TYPE_LENGTH (arg_type)));
+ gdb_printf (gdb_stdlog, "%2d: %s %3s ", i,
+ host_address_to_string (arg),
+ pulongest (TYPE_LENGTH (arg_type)));
switch (arg_type->code ())
{
case TYPE_CODE_INT:
- fprintf_unfiltered (gdb_stdlog, "int");
+ gdb_printf (gdb_stdlog, "int");
break;
case TYPE_CODE_STRUCT:
- fprintf_unfiltered (gdb_stdlog, "struct");
+ gdb_printf (gdb_stdlog, "struct");
break;
default:
- fprintf_unfiltered (gdb_stdlog, "%3d", arg_type->code ());
+ gdb_printf (gdb_stdlog, "%3d", arg_type->code ());
break;
}
- fprintf_unfiltered (gdb_stdlog, " %s\n",
- host_address_to_string (value_contents (arg).data ()));
+ gdb_printf (gdb_stdlog, " %s\n",
+ host_address_to_string (value_contents (arg).data ()));
}
}
@@ -2069,7 +2058,7 @@ call0_ret (CORE_ADDR start_pc, CORE_ADDR finish_pc)
The purpose of this is to simplify prologue analysis by separating
instruction decoding (libisa) from the semantics of prologue analysis. */
-typedef enum
+enum xtensa_insn_kind
{
c0opc_illegal, /* Unknown to libisa (invalid) or 'ill' opcode. */
c0opc_uninteresting, /* Not interesting for Call0 prologue analysis. */
@@ -2090,7 +2079,7 @@ typedef enum
c0opc_rfwo, /* RFWO instruction. */
c0opc_rfwu, /* RFWU instruction. */
c0opc_NrOf /* Number of opcode classifications. */
-} xtensa_insn_kind;
+};
/* Return true, if OPCNAME is RSR, WRS, or XSR instruction. */
@@ -2764,12 +2753,12 @@ execute_s32e (struct gdbarch *gdbarch, int at, int as, int offset, CORE_ADDR wb)
#define XTENSA_MAX_WINDOW_INTERRUPT_HANDLER_LEN 200
-typedef enum
+enum xtensa_exception_handler_t
{
xtWindowOverflow,
xtWindowUnderflow,
xtNoExceptionHandler
-} xtensa_exception_handler_t;
+};
/* Execute instruction stream from current PC until hitting RFWU or RFWO.
Return type of Xtensa Window Interrupt Handler on success. */
diff --git a/gdb/xtensa-tdep.h b/gdb/xtensa-tdep.h
index a1e7188d523..1840ef98b49 100644
--- a/gdb/xtensa-tdep.h
+++ b/gdb/xtensa-tdep.h
@@ -31,7 +31,7 @@
/* Xtensa register type. */
-typedef enum
+enum xtensa_register_type_t
{
xtRegisterTypeArRegfile = 1, /* Register File ar0..arXX. */
xtRegisterTypeSpecialReg, /* CPU states, such as PS, Booleans, (rsr). */
@@ -43,14 +43,14 @@ typedef enum
xtRegisterTypeWindow, /* Live window registers (a0..a15). */
xtRegisterTypeVirtual, /* PC, FP. */
xtRegisterTypeUnknown
-} xtensa_register_type_t;
+};
/* Xtensa register group. */
#define XTENSA_MAX_COPROCESSOR 0x10 /* Number of Xtensa coprocessors. */
-typedef enum
+enum xtensa_register_group_t
{
xtRegisterGroupUnknown = 0,
xtRegisterGroupRegFile = 0x0001, /* Register files without ARx. */
@@ -75,16 +75,16 @@ typedef enum
xtRegisterGroupCP6 = 0x40000000, /* CP6. */
xtRegisterGroupCP7 = 0x80000000, /* CP7. */
-} xtensa_register_group_t;
+};
/* Xtensa target flags. */
-typedef enum
+enum xtensa_target_flags_t
{
xtTargetFlagsNonVisibleRegs = 0x0001,
xtTargetFlagsUseFetchStore = 0x0002,
-} xtensa_target_flags_t;
+};
/* Mask. */
@@ -143,11 +143,11 @@ typedef struct
/* Call-ABI for stack frame. */
-typedef enum
+enum call_abi_t
{
CallAbiDefault = 0, /* Any 'callX' instructions; default stack. */
CallAbiCall0Only, /* Only 'call0' instructions; flat stack. */
-} call_abi_t;
+};
struct ctype_cache
diff --git a/gdb/z80-tdep.c b/gdb/z80-tdep.c
index 46fc64bd69b..c2d906d1402 100644
--- a/gdb/z80-tdep.c
+++ b/gdb/z80-tdep.c
@@ -360,7 +360,7 @@ z80_scan_prologue (struct gdbarch *gdbarch, CORE_ADDR pc_beg, CORE_ADDR pc_end,
msymbol = lookup_minimal_symbol ("__sdcc_enter_ix", NULL, NULL);
if (msymbol.minsym)
{
- value = BMSYMBOL_VALUE_ADDRESS (msymbol);
+ value = msymbol.value_address ();
if (value == extract_unsigned_integer (&prologue[pos+1], addr_len, byte_order))
{
pos += 1 + addr_len;
@@ -495,8 +495,8 @@ z80_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
if (prologue_end != 0)
{
struct symtab_and_line prologue_sal = find_pc_line (func_addr, 0);
- struct compunit_symtab *compunit = SYMTAB_COMPUNIT (prologue_sal.symtab);
- const char *debug_format = COMPUNIT_DEBUGFORMAT (compunit);
+ struct compunit_symtab *compunit = prologue_sal.symtab->compunit ();
+ const char *debug_format = compunit->debugformat ();
if (debug_format != NULL &&
!strncasecmp ("dwarf", debug_format, strlen("dwarf")))
@@ -625,7 +625,7 @@ z80_frame_unwind_cache (struct frame_info *this_frame,
msymbol = lookup_minimal_symbol (names[i], NULL, NULL);
if (!msymbol.minsym)
continue;
- if (addr == BMSYMBOL_VALUE_ADDRESS (msymbol))
+ if (addr == msymbol.value_address ())
break;
}
if (i >= 0)
@@ -722,7 +722,7 @@ z80_breakpoint_kind_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr)
struct bound_minimal_symbol bh;
bh = lookup_minimal_symbol ("_break_handler", NULL, NULL);
if (bh.minsym)
- addr = BMSYMBOL_VALUE_ADDRESS (bh);
+ addr = bh.value_address ();
else
{
warning(_("Unable to determine inferior's software breakpoint type: "
@@ -927,14 +927,13 @@ z80_read_overlay_region_table ()
word_size = gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT;
byte_order = gdbarch_byte_order (gdbarch);
- cache_novly_regions = read_memory_integer (
- BMSYMBOL_VALUE_ADDRESS (novly_regions_msym),
- 4, byte_order);
+ cache_novly_regions = read_memory_integer (novly_regions_msym.value_address (),
+ 4, byte_order);
cache_ovly_region_table
= (unsigned int (*)[3]) xmalloc (cache_novly_regions *
sizeof (*cache_ovly_region_table));
cache_ovly_region_table_base
- = BMSYMBOL_VALUE_ADDRESS (ovly_region_table_msym);
+ = ovly_region_table_msym.value_address ();
read_target_long_array (cache_ovly_region_table_base,
(unsigned int *) cache_ovly_region_table,
cache_novly_regions * 3, word_size, byte_order);
diff --git a/gdbserver/Makefile.in b/gdbserver/Makefile.in
index 47648b8d962..6e14278cd4b 100644
--- a/gdbserver/Makefile.in
+++ b/gdbserver/Makefile.in
@@ -223,6 +223,7 @@ SFILES = \
$(srcdir)/../gdb/nat/ppc-linux.c \
$(srcdir)/../gdb/nat/riscv-linux-tdesc.c \
$(srcdir)/../gdb/nat/fork-inferior.c \
+ $(srcdir)/../gdb/target/target.c \
$(srcdir)/../gdb/target/waitstatus.c
DEPFILES = @GDBSERVER_DEPFILES@
@@ -250,6 +251,7 @@ OBS = \
tracepoint.o \
utils.o \
version.o \
+ target/target.o \
target/waitstatus.o \
$(DEPFILES) \
$(LIBOBJS) \
@@ -468,7 +470,8 @@ UST_CFLAGS = $(ustinc) -DCONFIG_UST_GDB_INTEGRATION
# Undo gnulib replacements for the IPA shared library build.
# The gnulib headers are still needed, but gnulib is not linked
# into the IPA lib so replacement apis don't work.
-UNDO_GNULIB_CFLAGS = -Drpl_strerror_r=strerror_r -Drpl_free=free
+UNDO_GNULIB_CFLAGS = -Drpl_strerror_r=strerror_r -Drpl_free=free \
+ -Drpl_malloc=malloc -Drpl_realloc=realloc
# Note, we only build the IPA if -fvisibility=hidden is supported in
# the first place.
diff --git a/gdbserver/acinclude.m4 b/gdbserver/acinclude.m4
index d68e318229b..32d5d14ca6e 100644
--- a/gdbserver/acinclude.m4
+++ b/gdbserver/acinclude.m4
@@ -7,6 +7,9 @@ dnl system search paths.
dnl gdb/gdbserver/configure.in uses BFD_HAVE_SYS_PROCFS_TYPE.
m4_include(../bfd/bfd.m4)
+# This get AM_GDB_COMPILER_TYPE.
+m4_include(../gdbsupport/compiler-type.m4)
+
dnl This gets AM_GDB_WARNINGS.
m4_include(../gdbsupport/warning.m4)
diff --git a/gdbserver/ax.cc b/gdbserver/ax.cc
index d2d003377e0..365bd2195b2 100644
--- a/gdbserver/ax.cc
+++ b/gdbserver/ax.cc
@@ -39,20 +39,17 @@ ax_vdebug (const char *fmt, ...)
#ifdef IN_PROCESS_AGENT
fprintf (stderr, PROG "/ax: %s\n", buf);
#else
- debug_printf (PROG "/ax: %s\n", buf);
+ threads_debug_printf (PROG "/ax: %s", buf);
#endif
va_end (ap);
}
-#define ax_debug_1(level, fmt, args...) \
+#define ax_debug(fmt, args...) \
do { \
- if (level <= debug_threads) \
+ if (debug_threads) \
ax_vdebug ((fmt), ##args); \
} while (0)
-#define ax_debug(FMT, args...) \
- ax_debug_1 (1, FMT, ##args)
-
/* This enum must exactly match what is documented in
gdb/doc/agentexpr.texi, including all the numerical values. */
diff --git a/gdbserver/configure b/gdbserver/configure
index d90135be45c..e6b46c24588 100755
--- a/gdbserver/configure
+++ b/gdbserver/configure
@@ -7930,12 +7930,11 @@ ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ex
ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
- if test "$threads" = "yes"; then
- save_LIBS="$LIBS"
- LIBS="$PTHREAD_LIBS $LIBS"
- save_CXXFLAGS="$CXXFLAGS"
- CXXFLAGS="$PTHREAD_CFLAGS $save_CXXFLAGS"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for std::thread" >&5
+ save_LIBS="$LIBS"
+ LIBS="$PTHREAD_LIBS $LIBS"
+ save_CXXFLAGS="$CXXFLAGS"
+ CXXFLAGS="$PTHREAD_CFLAGS $save_CXXFLAGS"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for std::thread" >&5
$as_echo_n "checking for std::thread... " >&6; }
if ${gdb_cv_cxx_std_thread+:} false; then :
$as_echo_n "(cached) " >&6
@@ -7943,7 +7942,7 @@ else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <thread>
- void callback() { }
+ void callback() { }
int
main ()
{
@@ -7962,6 +7961,7 @@ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_cxx_std_thread" >&5
$as_echo "$gdb_cv_cxx_std_thread" >&6; }
+ if test "$threads" = "yes"; then
# This check must be here, while LIBS includes any necessary
# threading library.
for ac_func in pthread_sigmask pthread_setname_np
@@ -7976,10 +7976,9 @@ _ACEOF
fi
done
-
- LIBS="$save_LIBS"
- CXXFLAGS="$save_CXXFLAGS"
fi
+ LIBS="$save_LIBS"
+ CXXFLAGS="$save_CXXFLAGS"
if test "$want_threading" = "yes"; then
if test "$gdb_cv_cxx_std_thread" = "yes"; then
@@ -9707,6 +9706,64 @@ fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking the compiler type" >&5
+$as_echo_n "checking the compiler type... " >&6; }
+if ${gdb_cv_compiler_type+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ gdb_cv_compiler_type=unknown
+ if test "$gdb_cv_compiler_type" = unknown; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ #if !defined __GNUC__ || defined __clang__
+ #error not gcc
+ #endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ gdb_cv_compiler_type=gcc
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+
+ if test "$gdb_cv_compiler_type" = unknown; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ #ifndef __clang__
+ #error not clang
+ #endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ gdb_cv_compiler_type=clang
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_compiler_type" >&5
+$as_echo "$gdb_cv_compiler_type" >&6; }
+
+ GDB_COMPILER_TYPE="$gdb_cv_compiler_type"
+
+
# Check whether --enable-werror was given.
if test "${enable_werror+set}" = set; then :
enableval=$enable_werror; case "${enableval}" in
@@ -9743,10 +9800,16 @@ build_warnings="-Wall -Wpointer-arith \
-Wdeprecated-copy-dtor \
-Wredundant-move \
-Wmissing-declarations \
--Wmissing-prototypes \
-Wstrict-null-sentinel \
"
+# The -Wmissing-prototypes flag will be accepted by GCC, but results
+# in a warning being printed about the flag not being valid for C++,
+# this is something to do with using ccache, and argument ordering.
+if test "$GDB_COMPILER_TYPE" != gcc; then
+ build_warnings="$build_warnings -Wmissing-prototypes"
+fi
+
case "${host}" in
*-*-mingw32*)
# Enable -Wno-format by default when using gcc on mingw since many
diff --git a/gdbserver/configure.ac b/gdbserver/configure.ac
index 557654654b8..dc33f1a235b 100644
--- a/gdbserver/configure.ac
+++ b/gdbserver/configure.ac
@@ -146,6 +146,7 @@ fi
AC_SUBST(ustlibs)
AC_SUBST(ustinc)
+AM_GDB_COMPILER_TYPE
AM_GDB_WARNINGS
dnl dladdr is glibc-specific. It is used by thread-db.c but only for
diff --git a/gdbserver/configure.srv b/gdbserver/configure.srv
index 6e09b0eeb79..d37053628fc 100644
--- a/gdbserver/configure.srv
+++ b/gdbserver/configure.srv
@@ -39,6 +39,7 @@ fi
case "${gdbserver_host}" in
aarch64*-*-linux*) srv_tgtobj="linux-aarch64-low.o"
+ srv_tgtobj="$srv_tgtobj nat/aarch64-hw-point.o"
srv_tgtobj="$srv_tgtobj nat/aarch64-linux-hw-point.o"
srv_tgtobj="$srv_tgtobj linux-aarch32-low.o"
srv_tgtobj="$srv_tgtobj linux-aarch32-tdesc.o"
diff --git a/gdbserver/debug.cc b/gdbserver/debug.cc
index 202d315ab67..195c7e9a683 100644
--- a/gdbserver/debug.cc
+++ b/gdbserver/debug.cc
@@ -20,14 +20,14 @@
#include <chrono>
#if !defined (IN_PROCESS_AGENT)
-int remote_debug = 0;
+bool remote_debug = false;
#endif
/* Output file for debugging. Default to standard error. */
static FILE *debug_file = stderr;
/* See debug.h. */
-int debug_threads;
+bool debug_threads;
/* Include timestamps in debugging output. */
int debug_timestamp;
@@ -110,30 +110,6 @@ debug_flush (void)
fflush (debug_file);
}
-/* Notify the user that the code is entering FUNCTION_NAME.
- FUNCTION_NAME is the name of the calling function, or NULL if unknown.
-
- This is intended to be called via the debug_enter macro. */
-
-void
-do_debug_enter (const char *function_name)
-{
- if (function_name != NULL)
- debug_printf (">>>> entering %s\n", function_name);
-}
-
-/* Notify the user that the code is exiting FUNCTION_NAME.
- FUNCTION_NAME is the name of the calling function, or NULL if unknown.
-
- This is intended to be called via the debug_exit macro. */
-
-void
-do_debug_exit (const char *function_name)
-{
- if (function_name != NULL)
- debug_printf ("<<<< exiting %s\n", function_name);
-}
-
/* See debug.h. */
ssize_t
diff --git a/gdbserver/debug.h b/gdbserver/debug.h
index 6c5f997d09e..d9242752109 100644
--- a/gdbserver/debug.h
+++ b/gdbserver/debug.h
@@ -20,7 +20,13 @@
#define GDBSERVER_DEBUG_H
#if !defined (IN_PROCESS_AGENT)
-extern int remote_debug;
+extern bool remote_debug;
+
+/* Print a "remote" debug statement. */
+
+#define remote_debug_printf(fmt, ...) \
+ debug_prefixed_printf_cond (remote_debug, \
+ "remote", fmt, ##__VA_ARGS__)
/* Switch all debug output to DEBUG_FILE. If DEBUG_FILE is nullptr or an
empty string, or if the file cannot be opened, then debug output is sent to
@@ -33,33 +39,24 @@ extern int using_threads;
/* Enable miscellaneous debugging output. The name is historical - it
was originally used to debug LinuxThreads support. */
-extern int debug_threads;
+extern bool debug_threads;
+
+/* Print a "threads" debug statement. */
+
+#define threads_debug_printf(fmt, ...) \
+ debug_prefixed_printf_cond (debug_threads, \
+ "threads", fmt, ##__VA_ARGS__)
+
+/* Print "threads" enter/exit debug statements. */
+
+#define THREADS_SCOPED_DEBUG_ENTER_EXIT \
+ scoped_debug_enter_exit (debug_threads, "threads")
extern int debug_timestamp;
void debug_flush (void);
-void do_debug_enter (const char *function_name);
-void do_debug_exit (const char *function_name);
/* Async signal safe debug output function that calls write directly. */
ssize_t debug_write (const void *buf, size_t nbyte);
-/* These macros are for use in major functions that produce a lot of
- debugging output. They help identify in the mass of debugging output
- when these functions enter and exit. debug_enter is intended to be
- called at the start of a function, before any other debugging output.
- debug_exit is intended to be called at the end of the same function,
- after all debugging output. */
-#ifdef FUNCTION_NAME
-#define debug_enter() \
- do { do_debug_enter (FUNCTION_NAME); } while (0)
-#define debug_exit() \
- do { do_debug_exit (FUNCTION_NAME); } while (0)
-#else
-#define debug_enter() \
- do { } while (0)
-#define debug_exit() \
- do { } while (0)
-#endif
-
#endif /* GDBSERVER_DEBUG_H */
diff --git a/gdbserver/fork-child.cc b/gdbserver/fork-child.cc
index c991ce3a9d3..96dd4d009ab 100644
--- a/gdbserver/fork-child.cc
+++ b/gdbserver/fork-child.cc
@@ -45,11 +45,7 @@ void
prefork_hook (const char *args)
{
client_state &cs = get_client_state ();
- if (debug_threads)
- {
- debug_printf ("args: %s\n", args);
- debug_flush ();
- }
+ threads_debug_printf ("args: %s", args);
#ifdef SIGTTOU
signal (SIGTTOU, SIG_DFL);
diff --git a/gdbserver/gdbthread.h b/gdbserver/gdbthread.h
index 10ae1cb7c87..8b897e73d33 100644
--- a/gdbserver/gdbthread.h
+++ b/gdbserver/gdbthread.h
@@ -252,6 +252,7 @@ public:
private:
bool m_dont_restore = false;
+ process_info *m_process;
thread_info *m_thread;
};
diff --git a/gdbserver/inferiors.cc b/gdbserver/inferiors.cc
index 678d93c77a1..3d0a8b0e716 100644
--- a/gdbserver/inferiors.cc
+++ b/gdbserver/inferiors.cc
@@ -26,6 +26,11 @@
std::list<process_info *> all_processes;
std::list<thread_info *> all_threads;
+/* The current process. */
+static process_info *current_process_;
+
+/* The current thread. This is either a thread of CURRENT_PROCESS, or
+ NULL. */
struct thread_info *current_thread;
/* The current working directory used to start the inferior.
@@ -130,6 +135,7 @@ clear_inferiors (void)
clear_dlls ();
switch_to_thread (nullptr);
+ current_process_ = nullptr;
}
struct process_info *
@@ -153,6 +159,8 @@ remove_process (struct process_info *process)
free_all_breakpoints (process);
gdb_assert (find_thread_process (process) == NULL);
all_processes.remove (process);
+ if (current_process () == process)
+ switch_to_process (nullptr);
delete process;
}
@@ -205,8 +213,7 @@ get_thread_process (const struct thread_info *thread)
struct process_info *
current_process (void)
{
- gdb_assert (current_thread != NULL);
- return get_thread_process (current_thread);
+ return current_process_;
}
/* See gdbsupport/common-gdbthread.h. */
@@ -223,6 +230,10 @@ switch_to_thread (process_stratum_target *ops, ptid_t ptid)
void
switch_to_thread (thread_info *thread)
{
+ if (thread != nullptr)
+ current_process_ = get_thread_process (thread);
+ else
+ current_process_ = nullptr;
current_thread = thread;
}
@@ -231,9 +242,8 @@ switch_to_thread (thread_info *thread)
void
switch_to_process (process_info *proc)
{
- int pid = pid_of (proc);
-
- switch_to_thread (find_any_thread_of_pid (pid));
+ current_process_ = proc;
+ current_thread = nullptr;
}
/* See gdbsupport/common-inferior.h. */
@@ -254,6 +264,7 @@ set_inferior_cwd (std::string cwd)
scoped_restore_current_thread::scoped_restore_current_thread ()
{
+ m_process = current_process_;
m_thread = current_thread;
}
@@ -262,5 +273,8 @@ scoped_restore_current_thread::~scoped_restore_current_thread ()
if (m_dont_restore)
return;
- switch_to_thread (m_thread);
+ if (m_thread != nullptr)
+ switch_to_thread (m_thread);
+ else
+ switch_to_process (m_process);
}
diff --git a/gdbserver/linux-aarch64-ipa.cc b/gdbserver/linux-aarch64-ipa.cc
index 296c63534d8..dc907d3ff88 100644
--- a/gdbserver/linux-aarch64-ipa.cc
+++ b/gdbserver/linux-aarch64-ipa.cc
@@ -147,12 +147,12 @@ get_raw_reg (const unsigned char *raw_regs, int regnum)
/* Return target_desc to use for IPA, given the tdesc index passed by
gdbserver. Index is ignored, since we have only one tdesc
- at the moment. SVE, pauth and MTE not yet supported. */
+ at the moment. SVE, pauth, MTE and TLS not yet supported. */
const struct target_desc *
get_ipa_tdesc (int idx)
{
- return aarch64_linux_read_description (0, false, false);
+ return aarch64_linux_read_description (0, false, false, false);
}
/* Allocate buffer for the jump pads. The branch instruction has a reach
@@ -204,6 +204,6 @@ alloc_jump_pad_buffer (size_t size)
void
initialize_low_tracepoint (void)
{
- /* SVE, pauth and MTE not yet supported. */
- aarch64_linux_read_description (0, false, false);
+ /* SVE, pauth, MTE and TLS not yet supported. */
+ aarch64_linux_read_description (0, false, false, false);
}
diff --git a/gdbserver/linux-aarch64-low.cc b/gdbserver/linux-aarch64-low.cc
index 10aab52c228..ba0a810e0f9 100644
--- a/gdbserver/linux-aarch64-low.cc
+++ b/gdbserver/linux-aarch64-low.cc
@@ -191,9 +191,9 @@ struct arch_process_info
static int
is_64bit_tdesc (void)
{
- struct regcache *regcache = get_thread_regcache (current_thread, 0);
-
- return register_size (regcache->tdesc, 0) == 8;
+ /* We may not have a current thread at this point, so go straight to
+ the process's target description. */
+ return register_size (current_process ()->tdesc, 0) == 8;
}
static void
@@ -287,6 +287,26 @@ aarch64_store_mteregset (struct regcache *regcache, const void *buf)
supply_register (regcache, mte_base, mte_regset);
}
+/* Fill BUF with TLS register from the regcache. */
+
+static void
+aarch64_fill_tlsregset (struct regcache *regcache, void *buf)
+{
+ int tls_regnum = find_regno (regcache->tdesc, "tpidr");
+
+ collect_register (regcache, tls_regnum, buf);
+}
+
+/* Store TLS register to regcache. */
+
+static void
+aarch64_store_tlsregset (struct regcache *regcache, const void *buf)
+{
+ int tls_regnum = find_regno (regcache->tdesc, "tpidr");
+
+ supply_register (regcache, tls_regnum, buf);
+}
+
bool
aarch64_target::low_supports_breakpoints ()
{
@@ -413,9 +433,10 @@ aarch64_target::low_insert_point (raw_bkpt_type type, CORE_ADDR addr,
if (targ_type != hw_execute)
{
- if (aarch64_linux_region_ok_for_watchpoint (addr, len))
+ if (aarch64_region_ok_for_watchpoint (addr, len))
ret = aarch64_handle_watchpoint (targ_type, addr, len,
- 1 /* is_insert */, state);
+ 1 /* is_insert */,
+ current_lwp_ptid (), state);
else
ret = -1;
}
@@ -429,7 +450,8 @@ aarch64_target::low_insert_point (raw_bkpt_type type, CORE_ADDR addr,
len = 2;
}
ret = aarch64_handle_breakpoint (targ_type, addr, len,
- 1 /* is_insert */, state);
+ 1 /* is_insert */, current_lwp_ptid (),
+ state);
}
if (show_debug_regs)
@@ -464,7 +486,7 @@ aarch64_target::low_remove_point (raw_bkpt_type type, CORE_ADDR addr,
if (targ_type != hw_execute)
ret =
aarch64_handle_watchpoint (targ_type, addr, len, 0 /* is_insert */,
- state);
+ current_lwp_ptid (), state);
else
{
if (len == 3)
@@ -475,7 +497,8 @@ aarch64_target::low_remove_point (raw_bkpt_type type, CORE_ADDR addr,
len = 2;
}
ret = aarch64_handle_breakpoint (targ_type, addr, len,
- 0 /* is_insert */, state);
+ 0 /* is_insert */, current_lwp_ptid (),
+ state);
}
if (show_debug_regs)
@@ -716,6 +739,10 @@ static struct regset_info aarch64_regsets[] =
{ PTRACE_GETREGSET, PTRACE_SETREGSET, NT_ARM_TAGGED_ADDR_CTRL,
0, OPTIONAL_REGS,
aarch64_fill_mteregset, aarch64_store_mteregset },
+ /* TLS register. */
+ { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_ARM_TLS,
+ 0, OPTIONAL_REGS,
+ aarch64_fill_tlsregset, aarch64_store_tlsregset },
NULL_REGSET
};
@@ -767,6 +794,10 @@ aarch64_adjust_register_sets (const struct aarch64_features &features)
if (features.mte)
regset->size = AARCH64_LINUX_SIZEOF_MTE;
break;
+ case NT_ARM_TLS:
+ if (features.tls)
+ regset->size = AARCH64_TLS_REGS_SIZE;
+ break;
default:
gdb_assert_not_reached ("Unknown register set found.");
}
@@ -799,9 +830,11 @@ aarch64_target::low_arch_setup ()
features.pauth = linux_get_hwcap (8) & AARCH64_HWCAP_PACA;
/* A-profile MTE is 64-bit only. */
features.mte = linux_get_hwcap2 (8) & HWCAP2_MTE;
+ features.tls = true;
current_process ()->tdesc
- = aarch64_linux_read_description (vq, features.pauth, features.mte);
+ = aarch64_linux_read_description (vq, features.pauth, features.mte,
+ features.tls);
/* Adjust the register sets we should use for this particular set of
features. */
@@ -2467,9 +2500,8 @@ emit_ops_insns (const uint32_t *start, int len)
{
CORE_ADDR buildaddr = current_insn_ptr;
- if (debug_threads)
- debug_printf ("Adding %d instrucions at %s\n",
- len, paddress (buildaddr));
+ threads_debug_printf ("Adding %d instrucions at %s",
+ len, paddress (buildaddr));
append_insns (&buildaddr, len, start);
current_insn_ptr = buildaddr;
diff --git a/gdbserver/linux-aarch64-tdesc.cc b/gdbserver/linux-aarch64-tdesc.cc
index e982ab85067..be96612d571 100644
--- a/gdbserver/linux-aarch64-tdesc.cc
+++ b/gdbserver/linux-aarch64-tdesc.cc
@@ -27,22 +27,23 @@
#include <inttypes.h>
/* All possible aarch64 target descriptors. */
-struct target_desc *tdesc_aarch64_list[AARCH64_MAX_SVE_VQ + 1][2/*pauth*/][2 /* mte */];
+struct target_desc *tdesc_aarch64_list[AARCH64_MAX_SVE_VQ + 1][2/*pauth*/][2 /* mte */][2 /* tls */];
/* Create the aarch64 target description. */
const target_desc *
-aarch64_linux_read_description (uint64_t vq, bool pauth_p, bool mte_p)
+aarch64_linux_read_description (uint64_t vq, bool pauth_p, bool mte_p,
+ bool tls_p)
{
if (vq > AARCH64_MAX_SVE_VQ)
error (_("VQ is %" PRIu64 ", maximum supported value is %d"), vq,
AARCH64_MAX_SVE_VQ);
- struct target_desc *tdesc = tdesc_aarch64_list[vq][pauth_p][mte_p];
+ struct target_desc *tdesc = tdesc_aarch64_list[vq][pauth_p][mte_p][tls_p];
if (tdesc == NULL)
{
- tdesc = aarch64_create_target_description (vq, pauth_p, mte_p);
+ tdesc = aarch64_create_target_description (vq, pauth_p, mte_p, tls_p);
static const char *expedite_regs_aarch64[] = { "x29", "sp", "pc", NULL };
static const char *expedite_regs_aarch64_sve[] = { "x29", "sp", "pc",
@@ -53,7 +54,7 @@ aarch64_linux_read_description (uint64_t vq, bool pauth_p, bool mte_p)
else
init_target_desc (tdesc, expedite_regs_aarch64_sve);
- tdesc_aarch64_list[vq][pauth_p][mte_p] = tdesc;
+ tdesc_aarch64_list[vq][pauth_p][mte_p][tls_p] = tdesc;
}
return tdesc;
diff --git a/gdbserver/linux-aarch64-tdesc.h b/gdbserver/linux-aarch64-tdesc.h
index 66d6fa32f16..4ab658447a2 100644
--- a/gdbserver/linux-aarch64-tdesc.h
+++ b/gdbserver/linux-aarch64-tdesc.h
@@ -21,6 +21,6 @@
#define GDBSERVER_LINUX_AARCH64_TDESC_H
const target_desc * aarch64_linux_read_description (uint64_t vq, bool pauth_p,
- bool mte_p);
+ bool mte_p, bool tls_p);
#endif /* GDBSERVER_LINUX_AARCH64_TDESC_H */
diff --git a/gdbserver/linux-arm-tdesc.cc b/gdbserver/linux-arm-tdesc.cc
index 293e108a9cc..c636e6e5ea2 100644
--- a/gdbserver/linux-arm-tdesc.cc
+++ b/gdbserver/linux-arm-tdesc.cc
@@ -35,7 +35,7 @@ arm_linux_read_description (arm_fp_type fp_type)
if (tdesc == nullptr)
{
- tdesc = arm_create_target_description (fp_type);
+ tdesc = arm_create_target_description (fp_type, false);
static const char *expedite_regs[] = { "r11", "sp", "pc", 0 };
init_target_desc (tdesc, expedite_regs);
diff --git a/gdbserver/linux-low.cc b/gdbserver/linux-low.cc
index d7c7336ff1f..8b8614f6ed4 100644
--- a/gdbserver/linux-low.cc
+++ b/gdbserver/linux-low.cc
@@ -21,6 +21,8 @@
#include "nat/linux-osdata.h"
#include "gdbsupport/agent.h"
#include "tdesc.h"
+#include "gdbsupport/event-loop.h"
+#include "gdbsupport/event-pipe.h"
#include "gdbsupport/rsp-low.h"
#include "gdbsupport/signals-state-save-restore.h"
#include "nat/linux-nat.h"
@@ -133,6 +135,15 @@ typedef struct
/* Does the current host support PTRACE_GETREGSET? */
int have_ptrace_getregset = -1;
+/* Return TRUE if THREAD is the leader thread of the process. */
+
+static bool
+is_leader (thread_info *thread)
+{
+ ptid_t ptid = ptid_of (thread);
+ return ptid.pid () == ptid.lwp ();
+}
+
/* LWP accessors. */
/* See nat/linux-nat.h. */
@@ -308,12 +319,11 @@ lwp_in_step_range (struct lwp_info *lwp)
return (pc >= lwp->step_range_start && pc < lwp->step_range_end);
}
-/* The read/write ends of the pipe registered as waitable file in the
- event loop. */
-static int linux_event_pipe[2] = { -1, -1 };
+/* The event pipe registered as a waitable file in the event loop. */
+static event_pipe linux_event_pipe;
/* True if we're currently in async mode. */
-#define target_is_async_p() (linux_event_pipe[0] != -1)
+#define target_is_async_p() (linux_event_pipe.is_open ())
static void send_sigstop (struct lwp_info *lwp);
@@ -376,8 +386,7 @@ linux_process_target::delete_lwp (lwp_info *lwp)
{
struct thread_info *thr = get_lwp_thread (lwp);
- if (debug_threads)
- debug_printf ("deleting %ld\n", lwpid_of (thr));
+ threads_debug_printf ("deleting %ld", lwpid_of (thr));
remove_thread (thr);
@@ -394,8 +403,22 @@ linux_process_target::low_delete_thread (arch_lwp_info *info)
gdb_assert (info == nullptr);
}
+/* Open the /proc/PID/mem file for PROC. */
+
+static void
+open_proc_mem_file (process_info *proc)
+{
+ gdb_assert (proc->priv->mem_fd == -1);
+
+ char filename[64];
+ xsnprintf (filename, sizeof filename, "/proc/%d/mem", proc->pid);
+
+ proc->priv->mem_fd
+ = gdb_open_cloexec (filename, O_RDWR | O_LARGEFILE, 0).release ();
+}
+
process_info *
-linux_process_target::add_linux_process (int pid, int attached)
+linux_process_target::add_linux_process_no_mem_file (int pid, int attached)
{
struct process_info *proc;
@@ -403,10 +426,34 @@ linux_process_target::add_linux_process (int pid, int attached)
proc->priv = XCNEW (struct process_info_private);
proc->priv->arch_private = low_new_process ();
+ proc->priv->mem_fd = -1;
+
+ return proc;
+}
+
+process_info *
+linux_process_target::add_linux_process (int pid, int attached)
+{
+ process_info *proc = add_linux_process_no_mem_file (pid, attached);
+ open_proc_mem_file (proc);
return proc;
}
+void
+linux_process_target::remove_linux_process (process_info *proc)
+{
+ if (proc->priv->mem_fd >= 0)
+ close (proc->priv->mem_fd);
+
+ this->low_delete_process (proc->priv->arch_private);
+
+ xfree (proc->priv);
+ proc->priv = nullptr;
+
+ remove_process (proc);
+}
+
arch_process_info *
linux_process_target::low_new_process ()
{
@@ -489,13 +536,10 @@ linux_process_target::handle_extended_wait (lwp_info **orig_event_lwp,
ptid = ptid_t (new_pid, new_pid);
- if (debug_threads)
- {
- debug_printf ("HEW: Got fork event from LWP %ld, "
- "new child is %d\n",
- ptid_of (event_thr).lwp (),
- ptid.pid ());
- }
+ threads_debug_printf ("Got fork event from LWP %ld, "
+ "new child is %d",
+ ptid_of (event_thr).lwp (),
+ ptid.pid ());
/* Add the new process to the tables and clone the breakpoint
lists of the parent. We need to do this even if the new process
@@ -520,8 +564,7 @@ linux_process_target::handle_extended_wait (lwp_info **orig_event_lwp,
if (stopping_threads == STOPPING_AND_SUSPENDING_THREADS
|| event_lwp->bp_reinsert != 0)
{
- if (debug_threads)
- debug_printf ("HEW: leaving child suspended\n");
+ threads_debug_printf ("leaving child suspended");
child_lwp->suspended = 1;
}
@@ -586,10 +629,9 @@ linux_process_target::handle_extended_wait (lwp_info **orig_event_lwp,
return 0;
}
- if (debug_threads)
- debug_printf ("HEW: Got clone event "
- "from LWP %ld, new child is LWP %ld\n",
- lwpid_of (event_thr), new_pid);
+ threads_debug_printf
+ ("Got clone event from LWP %ld, new child is LWP %ld",
+ lwpid_of (event_thr), new_pid);
ptid = ptid_t (pid_of (event_thr), new_pid);
new_lwp = add_lwp (ptid);
@@ -652,11 +694,8 @@ linux_process_target::handle_extended_wait (lwp_info **orig_event_lwp,
ptid_t event_ptid;
pid_t event_pid;
- if (debug_threads)
- {
- debug_printf ("HEW: Got exec event from LWP %ld\n",
- lwpid_of (event_thr));
- }
+ threads_debug_printf ("Got exec event from LWP %ld",
+ lwpid_of (event_thr));
/* Get the event ptid. */
event_ptid = ptid_of (event_thr);
@@ -720,8 +759,7 @@ linux_process_target::get_pc (lwp_info *lwp)
regcache = get_thread_regcache (current_thread, 1);
pc = low_get_pc (regcache);
- if (debug_threads)
- debug_printf ("pc is 0x%lx\n", (long) pc);
+ threads_debug_printf ("pc is 0x%lx", (long) pc);
return pc;
}
@@ -737,8 +775,7 @@ linux_process_target::get_syscall_trapinfo (lwp_info *lwp, int *sysno)
regcache = get_thread_regcache (current_thread, 1);
low_get_syscall_trapinfo (regcache, sysno);
- if (debug_threads)
- debug_printf ("get_syscall_trapinfo sysno %d\n", *sysno);
+ threads_debug_printf ("get_syscall_trapinfo sysno %d", *sysno);
}
void
@@ -827,13 +864,9 @@ linux_process_target::save_stop_reason (lwp_info *lwp)
if (lwp->stop_reason == TARGET_STOPPED_BY_SW_BREAKPOINT)
{
- if (debug_threads)
- {
- struct thread_info *thr = get_lwp_thread (lwp);
-
- debug_printf ("CSBB: %s stopped by software breakpoint\n",
- target_pid_to_str (ptid_of (thr)).c_str ());
- }
+ threads_debug_printf
+ ("%s stopped by software breakpoint",
+ target_pid_to_str (ptid_of (get_lwp_thread (lwp))).c_str ());
/* Back up the PC if necessary. */
if (pc != sw_breakpoint_pc)
@@ -847,35 +880,17 @@ linux_process_target::save_stop_reason (lwp_info *lwp)
pc = sw_breakpoint_pc;
}
else if (lwp->stop_reason == TARGET_STOPPED_BY_HW_BREAKPOINT)
- {
- if (debug_threads)
- {
- struct thread_info *thr = get_lwp_thread (lwp);
-
- debug_printf ("CSBB: %s stopped by hardware breakpoint\n",
- target_pid_to_str (ptid_of (thr)).c_str ());
- }
- }
+ threads_debug_printf
+ ("%s stopped by hardware breakpoint",
+ target_pid_to_str (ptid_of (get_lwp_thread (lwp))).c_str ());
else if (lwp->stop_reason == TARGET_STOPPED_BY_WATCHPOINT)
- {
- if (debug_threads)
- {
- struct thread_info *thr = get_lwp_thread (lwp);
-
- debug_printf ("CSBB: %s stopped by hardware watchpoint\n",
- target_pid_to_str (ptid_of (thr)).c_str ());
- }
- }
+ threads_debug_printf
+ ("%s stopped by hardware watchpoint",
+ target_pid_to_str (ptid_of (get_lwp_thread (lwp))).c_str ());
else if (lwp->stop_reason == TARGET_STOPPED_BY_SINGLE_STEP)
- {
- if (debug_threads)
- {
- struct thread_info *thr = get_lwp_thread (lwp);
-
- debug_printf ("CSBB: %s stopped by trace\n",
- target_pid_to_str (ptid_of (thr)).c_str ());
- }
- }
+ threads_debug_printf
+ ("%s stopped by trace",
+ target_pid_to_str (ptid_of (get_lwp_thread (lwp))).c_str ());
lwp->stop_pc = pc;
return true;
@@ -955,7 +970,11 @@ linux_process_target::create_inferior (const char *program,
NULL, NULL, NULL, NULL);
}
- add_linux_process (pid, 0);
+ /* When spawning a new process, we can't open the mem file yet. We
+ still have to nurse the process through the shell, and that execs
+ a couple times. The address space a /proc/PID/mem file is
+ accessing is destroyed on exec. */
+ process_info *proc = add_linux_process_no_mem_file (pid, 0);
ptid = ptid_t (pid, pid);
new_lwp = add_lwp (ptid);
@@ -963,6 +982,10 @@ linux_process_target::create_inferior (const char *program,
post_fork_inferior (pid, program);
+ /* PROC is now past the shell running the program we want, so we can
+ open the /proc/PID/mem file. */
+ open_proc_mem_file (proc);
+
return pid;
}
@@ -1003,8 +1026,7 @@ linux_process_target::attach_lwp (ptid_t ptid)
if (linux_proc_pid_is_stopped (lwpid))
{
- if (debug_threads)
- debug_printf ("Attached to a stopped process\n");
+ threads_debug_printf ("Attached to a stopped process");
/* The process is definitely stopped. It is in a job control
stop, unless the kernel predates the TASK_STOPPED /
@@ -1080,8 +1102,7 @@ attach_proc_task_lwp_callback (ptid_t ptid)
int lwpid = ptid.lwp ();
int err;
- if (debug_threads)
- debug_printf ("Found new lwp %d\n", lwpid);
+ threads_debug_printf ("Found new lwp %d", lwpid);
err = the_linux_target->attach_lwp (ptid);
@@ -1091,14 +1112,9 @@ attach_proc_task_lwp_callback (ptid_t ptid)
case, confirm the status in /proc/PID/status. */
if (err == ESRCH
|| (err == EPERM && linux_proc_pid_is_gone (lwpid)))
- {
- if (debug_threads)
- {
- debug_printf ("Cannot attach to lwp %d: "
- "thread is gone (%d: %s)\n",
- lwpid, err, safe_strerror (err));
- }
- }
+ threads_debug_printf
+ ("Cannot attach to lwp %d: thread is gone (%d: %s)",
+ lwpid, err, safe_strerror (err));
else if (err != 0)
{
std::string reason
@@ -1125,19 +1141,23 @@ linux_process_target::attach (unsigned long pid)
ptid_t ptid = ptid_t (pid, pid);
int err;
- proc = add_linux_process (pid, 1);
+ /* Delay opening the /proc/PID/mem file until we've successfully
+ attached. */
+ proc = add_linux_process_no_mem_file (pid, 1);
/* Attach to PID. We will check for other threads
soon. */
err = attach_lwp (ptid);
if (err != 0)
{
- remove_process (proc);
+ this->remove_linux_process (proc);
std::string reason = linux_ptrace_attach_fail_reason_string (ptid, err);
error ("Cannot attach to process %ld: %s", pid, reason.c_str ());
}
+ open_proc_mem_file (proc);
+
/* Don't ignore the initial SIGSTOP if we just attached to this
process. It will be collected by wait shortly. */
initial_thread = find_thread_ptid (ptid_t (pid, pid));
@@ -1237,9 +1257,9 @@ linux_kill_one_lwp (struct lwp_info *lwp)
{
int save_errno = errno;
- debug_printf ("LKL: kill_lwp (SIGKILL) %s, 0, 0 (%s)\n",
- target_pid_to_str (ptid_of (thr)).c_str (),
- save_errno ? safe_strerror (save_errno) : "OK");
+ threads_debug_printf ("kill_lwp (SIGKILL) %s, 0, 0 (%s)",
+ target_pid_to_str (ptid_of (thr)).c_str (),
+ save_errno ? safe_strerror (save_errno) : "OK");
}
errno = 0;
@@ -1248,9 +1268,9 @@ linux_kill_one_lwp (struct lwp_info *lwp)
{
int save_errno = errno;
- debug_printf ("LKL: PTRACE_KILL %s, 0, 0 (%s)\n",
- target_pid_to_str (ptid_of (thr)).c_str (),
- save_errno ? safe_strerror (save_errno) : "OK");
+ threads_debug_printf ("PTRACE_KILL %s, 0, 0 (%s)",
+ target_pid_to_str (ptid_of (thr)).c_str (),
+ save_errno ? safe_strerror (save_errno) : "OK");
}
}
@@ -1265,8 +1285,7 @@ kill_wait_lwp (struct lwp_info *lwp)
int wstat;
int res;
- if (debug_threads)
- debug_printf ("kwl: killing lwp %d, for pid: %d\n", lwpid, pid);
+ threads_debug_printf ("killing lwp %d, for pid: %d", lwpid, pid);
do
{
@@ -1312,9 +1331,8 @@ kill_one_lwp_callback (thread_info *thread, int pid)
if (lwpid_of (thread) == pid)
{
- if (debug_threads)
- debug_printf ("lkop: is last of process %s\n",
- target_pid_to_str (thread->id).c_str ());
+ threads_debug_printf ("is last of process %s",
+ target_pid_to_str (thread->id).c_str ());
return;
}
@@ -1340,11 +1358,7 @@ linux_process_target::kill (process_info *process)
lwp_info *lwp = find_lwp_pid (ptid_t (pid));
if (lwp == NULL)
- {
- if (debug_threads)
- debug_printf ("lk_1: cannot find lwp for pid: %d\n",
- pid);
- }
+ threads_debug_printf ("cannot find lwp for pid: %d", pid);
else
kill_wait_lwp (lwp);
@@ -1386,19 +1400,17 @@ get_detach_signal (struct thread_info *thread)
if (!WIFSTOPPED (status))
{
- if (debug_threads)
- debug_printf ("GPS: lwp %s hasn't stopped: no pending signal\n",
- target_pid_to_str (ptid_of (thread)).c_str ());
+ threads_debug_printf ("lwp %s hasn't stopped: no pending signal",
+ target_pid_to_str (ptid_of (thread)).c_str ());
return 0;
}
/* Extended wait statuses aren't real SIGTRAPs. */
if (WSTOPSIG (status) == SIGTRAP && linux_is_extended_waitstatus (status))
{
- if (debug_threads)
- debug_printf ("GPS: lwp %s had stopped with extended "
- "status: no pending signal\n",
- target_pid_to_str (ptid_of (thread)).c_str ());
+ threads_debug_printf ("lwp %s had stopped with extended "
+ "status: no pending signal",
+ target_pid_to_str (ptid_of (thread)).c_str ());
return 0;
}
@@ -1406,10 +1418,9 @@ get_detach_signal (struct thread_info *thread)
if (cs.program_signals_p && !cs.program_signals[signo])
{
- if (debug_threads)
- debug_printf ("GPS: lwp %s had signal %s, but it is in nopass state\n",
- target_pid_to_str (ptid_of (thread)).c_str (),
- gdb_signal_to_string (signo));
+ threads_debug_printf ("lwp %s had signal %s, but it is in nopass state",
+ target_pid_to_str (ptid_of (thread)).c_str (),
+ gdb_signal_to_string (signo));
return 0;
}
else if (!cs.program_signals_p
@@ -1418,20 +1429,18 @@ get_detach_signal (struct thread_info *thread)
SIGTRAP/SIGINT, which is GDB's default. */
&& (signo == GDB_SIGNAL_TRAP || signo == GDB_SIGNAL_INT))
{
- if (debug_threads)
- debug_printf ("GPS: lwp %s had signal %s, "
- "but we don't know if we should pass it. "
- "Default to not.\n",
- target_pid_to_str (ptid_of (thread)).c_str (),
- gdb_signal_to_string (signo));
+ threads_debug_printf ("lwp %s had signal %s, "
+ "but we don't know if we should pass it. "
+ "Default to not.",
+ target_pid_to_str (ptid_of (thread)).c_str (),
+ gdb_signal_to_string (signo));
return 0;
}
else
{
- if (debug_threads)
- debug_printf ("GPS: lwp %s has pending signal %s: delivering it.\n",
- target_pid_to_str (ptid_of (thread)).c_str (),
- gdb_signal_to_string (signo));
+ threads_debug_printf ("lwp %s has pending signal %s: delivering it",
+ target_pid_to_str (ptid_of (thread)).c_str (),
+ gdb_signal_to_string (signo));
return WSTOPSIG (status);
}
@@ -1447,9 +1456,8 @@ linux_process_target::detach_one_lwp (lwp_info *lwp)
/* If there is a pending SIGSTOP, get rid of it. */
if (lwp->stop_expected)
{
- if (debug_threads)
- debug_printf ("Sending SIGCONT to %s\n",
- target_pid_to_str (ptid_of (thread)).c_str ());
+ threads_debug_printf ("Sending SIGCONT to %s",
+ target_pid_to_str (ptid_of (thread)).c_str ());
kill_lwp (lwpid_of (thread), SIGCONT);
lwp->stop_expected = 0;
@@ -1509,12 +1517,10 @@ linux_process_target::detach_one_lwp (lwp_info *lwp)
safe_strerror (save_errno));
}
}
- else if (debug_threads)
- {
- debug_printf ("PTRACE_DETACH (%s, %s, 0) (OK)\n",
- target_pid_to_str (ptid_of (thread)).c_str (),
- strsignal (sig));
- }
+ else
+ threads_debug_printf ("PTRACE_DETACH (%s, %s, 0) (OK)",
+ target_pid_to_str (ptid_of (thread)).c_str (),
+ strsignal (sig));
delete_lwp (lwp);
}
@@ -1573,8 +1579,6 @@ linux_process_target::detach (process_info *process)
void
linux_process_target::mourn (process_info *process)
{
- struct process_info_private *priv;
-
#ifdef USE_THREAD_DB
thread_db_mourn (process);
#endif
@@ -1584,13 +1588,7 @@ linux_process_target::mourn (process_info *process)
delete_lwp (get_thread_lwp (thread));
});
- /* Freeing all private data. */
- priv = process->priv;
- low_delete_process (priv->arch_private);
- free (priv);
- process->priv = NULL;
-
- remove_process (process);
+ this->remove_linux_process (process);
}
void
@@ -1645,9 +1643,8 @@ linux_process_target::thread_still_has_status_pending (thread_info *thread)
if (pc != lp->stop_pc)
{
- if (debug_threads)
- debug_printf ("PC of %ld changed\n",
- lwpid_of (thread));
+ threads_debug_printf ("PC of %ld changed",
+ lwpid_of (thread));
discard = 1;
}
@@ -1655,25 +1652,22 @@ linux_process_target::thread_still_has_status_pending (thread_info *thread)
else if (lp->stop_reason == TARGET_STOPPED_BY_SW_BREAKPOINT
&& !low_breakpoint_at (pc))
{
- if (debug_threads)
- debug_printf ("previous SW breakpoint of %ld gone\n",
- lwpid_of (thread));
+ threads_debug_printf ("previous SW breakpoint of %ld gone",
+ lwpid_of (thread));
discard = 1;
}
else if (lp->stop_reason == TARGET_STOPPED_BY_HW_BREAKPOINT
&& !hardware_breakpoint_inserted_here (pc))
{
- if (debug_threads)
- debug_printf ("previous HW breakpoint of %ld gone\n",
- lwpid_of (thread));
+ threads_debug_printf ("previous HW breakpoint of %ld gone",
+ lwpid_of (thread));
discard = 1;
}
#endif
if (discard)
{
- if (debug_threads)
- debug_printf ("discarding pending breakpoint status\n");
+ threads_debug_printf ("discarding pending breakpoint status");
lp->status_pending_p = 0;
return 0;
}
@@ -1778,59 +1772,77 @@ iterate_over_lwps (ptid_t filter,
void
linux_process_target::check_zombie_leaders ()
{
- for_each_process ([this] (process_info *proc) {
- pid_t leader_pid = pid_of (proc);
- struct lwp_info *leader_lp;
-
- leader_lp = find_lwp_pid (ptid_t (leader_pid));
-
- if (debug_threads)
- debug_printf ("leader_pid=%d, leader_lp!=NULL=%d, "
- "num_lwps=%d, zombie=%d\n",
- leader_pid, leader_lp!= NULL, num_lwps (leader_pid),
- linux_proc_pid_is_zombie (leader_pid));
-
- if (leader_lp != NULL && !leader_lp->stopped
- /* Check if there are other threads in the group, as we may
- have raced with the inferior simply exiting. */
- && !last_thread_of_process_p (leader_pid)
- && linux_proc_pid_is_zombie (leader_pid))
- {
- /* A leader zombie can mean one of two things:
-
- - It exited, and there's an exit status pending
- available, or only the leader exited (not the whole
- program). In the latter case, we can't waitpid the
- leader's exit status until all other threads are gone.
-
- - There are 3 or more threads in the group, and a thread
- other than the leader exec'd. On an exec, the Linux
- kernel destroys all other threads (except the execing
- one) in the thread group, and resets the execing thread's
- tid to the tgid. No exit notification is sent for the
- execing thread -- from the ptracer's perspective, it
- appears as though the execing thread just vanishes.
- Until we reap all other threads except the leader and the
- execing thread, the leader will be zombie, and the
- execing thread will be in `D (disc sleep)'. As soon as
- all other threads are reaped, the execing thread changes
- it's tid to the tgid, and the previous (zombie) leader
- vanishes, giving place to the "new" leader. We could try
- distinguishing the exit and exec cases, by waiting once
- more, and seeing if something comes out, but it doesn't
- sound useful. The previous leader _does_ go away, and
- we'll re-add the new one once we see the exec event
- (which is just the same as what would happen if the
- previous leader did exit voluntarily before some other
- thread execs). */
-
- if (debug_threads)
- debug_printf ("CZL: Thread group leader %d zombie "
- "(it exited, or another thread execd).\n",
- leader_pid);
-
- delete_lwp (leader_lp);
- }
+ for_each_process ([this] (process_info *proc)
+ {
+ pid_t leader_pid = pid_of (proc);
+ lwp_info *leader_lp = find_lwp_pid (ptid_t (leader_pid));
+
+ threads_debug_printf ("leader_pid=%d, leader_lp!=NULL=%d, "
+ "num_lwps=%d, zombie=%d",
+ leader_pid, leader_lp!= NULL, num_lwps (leader_pid),
+ linux_proc_pid_is_zombie (leader_pid));
+
+ if (leader_lp != NULL && !leader_lp->stopped
+ /* Check if there are other threads in the group, as we may
+ have raced with the inferior simply exiting. Note this
+ isn't a watertight check. If the inferior is
+ multi-threaded and is exiting, it may be we see the
+ leader as zombie before we reap all the non-leader
+ threads. See comments below. */
+ && !last_thread_of_process_p (leader_pid)
+ && linux_proc_pid_is_zombie (leader_pid))
+ {
+ /* A zombie leader in a multi-threaded program can mean one
+ of three things:
+
+ #1 - Only the leader exited, not the whole program, e.g.,
+ with pthread_exit. Since we can't reap the leader's exit
+ status until all other threads are gone and reaped too,
+ we want to delete the zombie leader right away, as it
+ can't be debugged, we can't read its registers, etc.
+ This is the main reason we check for zombie leaders
+ disappearing.
+
+ #2 - The whole thread-group/process exited (a group exit,
+ via e.g. exit(3), and there is (or will be shortly) an
+ exit reported for each thread in the process, and then
+ finally an exit for the leader once the non-leaders are
+ reaped.
+
+ #3 - There are 3 or more threads in the group, and a
+ thread other than the leader exec'd. See comments on
+ exec events at the top of the file.
+
+ Ideally we would never delete the leader for case #2.
+ Instead, we want to collect the exit status of each
+ non-leader thread, and then finally collect the exit
+ status of the leader as normal and use its exit code as
+ whole-process exit code. Unfortunately, there's no
+ race-free way to distinguish cases #1 and #2. We can't
+ assume the exit events for the non-leaders threads are
+ already pending in the kernel, nor can we assume the
+ non-leader threads are in zombie state already. Between
+ the leader becoming zombie and the non-leaders exiting
+ and becoming zombie themselves, there's a small time
+ window, so such a check would be racy. Temporarily
+ pausing all threads and checking to see if all threads
+ exit or not before re-resuming them would work in the
+ case that all threads are running right now, but it
+ wouldn't work if some thread is currently already
+ ptrace-stopped, e.g., due to scheduler-locking.
+
+ So what we do is we delete the leader anyhow, and then
+ later on when we see its exit status, we re-add it back.
+ We also make sure that we only report a whole-process
+ exit when we see the leader exiting, as opposed to when
+ the last LWP in the LWP list exits, which can be a
+ non-leader if we deleted the leader here. */
+ threads_debug_printf ("Thread group leader %d zombie "
+ "(it exited, or another thread execd), "
+ "deleting it.",
+ leader_pid);
+ delete_lwp (leader_lp);
+ }
});
}
@@ -1855,13 +1867,10 @@ lwp_suspended_inc (struct lwp_info *lwp)
{
lwp->suspended++;
- if (debug_threads && lwp->suspended > 4)
- {
- struct thread_info *thread = get_lwp_thread (lwp);
-
- debug_printf ("LWP %ld has a suspiciously high suspend count,"
- " suspended=%d\n", lwpid_of (thread), lwp->suspended);
- }
+ if (lwp->suspended > 4)
+ threads_debug_printf
+ ("LWP %ld has a suspiciously high suspend count, suspended=%d",
+ lwpid_of (get_lwp_thread (lwp)), lwp->suspended);
}
/* Decrement LWP's suspend count. */
@@ -1923,8 +1932,7 @@ handle_tracepoints (struct lwp_info *lwp)
if (tpoint_related_event)
{
- if (debug_threads)
- debug_printf ("got a tracepoint event\n");
+ threads_debug_printf ("got a tracepoint event");
return 1;
}
@@ -1967,10 +1975,9 @@ linux_process_target::maybe_move_out_of_jump_pad (lwp_info *lwp, int *wstat)
{
struct fast_tpoint_collect_status status;
- if (debug_threads)
- debug_printf ("Checking whether LWP %ld needs to move out of the "
- "jump pad.\n",
- lwpid_of (current_thread));
+ threads_debug_printf
+ ("Checking whether LWP %ld needs to move out of the jump pad.",
+ lwpid_of (current_thread));
fast_tpoint_collect_result r
= linux_fast_tracepoint_collecting (lwp, &status);
@@ -1995,10 +2002,9 @@ linux_process_target::maybe_move_out_of_jump_pad (lwp_info *lwp, int *wstat)
= set_breakpoint_at (status.adjusted_insn_addr, NULL);
}
- if (debug_threads)
- debug_printf ("Checking whether LWP %ld needs to move out of "
- "the jump pad...it does\n",
- lwpid_of (current_thread));
+ threads_debug_printf
+ ("Checking whether LWP %ld needs to move out of the jump pad..."
+ " it does", lwpid_of (current_thread));
return true;
}
@@ -2050,9 +2056,9 @@ linux_process_target::maybe_move_out_of_jump_pad (lwp_info *lwp, int *wstat)
if (lwp->exit_jump_pad_bkpt != NULL)
{
- if (debug_threads)
- debug_printf ("Cancelling fast exit-jump-pad: removing bkpt. "
- "stopping all threads momentarily.\n");
+ threads_debug_printf
+ ("Cancelling fast exit-jump-pad: removing bkpt."
+ "stopping all threads momentarily.");
stop_all_lwps (1, lwp);
@@ -2066,10 +2072,9 @@ linux_process_target::maybe_move_out_of_jump_pad (lwp_info *lwp, int *wstat)
}
}
- if (debug_threads)
- debug_printf ("Checking whether LWP %ld needs to move out of the "
- "jump pad...no\n",
- lwpid_of (current_thread));
+ threads_debug_printf
+ ("Checking whether LWP %ld needs to move out of the jump pad... no",
+ lwpid_of (current_thread));
return false;
}
@@ -2082,17 +2087,15 @@ enqueue_one_deferred_signal (struct lwp_info *lwp, int *wstat)
{
struct thread_info *thread = get_lwp_thread (lwp);
- if (debug_threads)
- debug_printf ("Deferring signal %d for LWP %ld.\n",
- WSTOPSIG (*wstat), lwpid_of (thread));
+ threads_debug_printf ("Deferring signal %d for LWP %ld.",
+ WSTOPSIG (*wstat), lwpid_of (thread));
if (debug_threads)
{
for (const auto &sig : lwp->pending_signals_to_report)
- debug_printf (" Already queued %d\n",
- sig.signal);
+ threads_debug_printf (" Already queued %d", sig.signal);
- debug_printf (" (no more currently queued signals)\n");
+ threads_debug_printf (" (no more currently queued signals)");
}
/* Don't enqueue non-RT signals if they are already in the deferred
@@ -2104,11 +2107,9 @@ enqueue_one_deferred_signal (struct lwp_info *lwp, int *wstat)
{
if (sig.signal == WSTOPSIG (*wstat))
{
- if (debug_threads)
- debug_printf ("Not requeuing already queued non-RT signal %d"
- " for LWP %ld\n",
- sig.signal,
- lwpid_of (thread));
+ threads_debug_printf
+ ("Not requeuing already queued non-RT signal %d for LWP %ld",
+ sig.signal, lwpid_of (thread));
return;
}
}
@@ -2139,17 +2140,15 @@ dequeue_one_deferred_signal (struct lwp_info *lwp, int *wstat)
lwp->pending_signals_to_report.pop_front ();
- if (debug_threads)
- debug_printf ("Reporting deferred signal %d for LWP %ld.\n",
- WSTOPSIG (*wstat), lwpid_of (thread));
+ threads_debug_printf ("Reporting deferred signal %d for LWP %ld.",
+ WSTOPSIG (*wstat), lwpid_of (thread));
if (debug_threads)
{
for (const auto &sig : lwp->pending_signals_to_report)
- debug_printf (" Still queued %d\n",
- sig.signal);
+ threads_debug_printf (" Still queued %d", sig.signal);
- debug_printf (" (no more queued signals)\n");
+ threads_debug_printf (" (no more queued signals)");
}
return 1;
@@ -2220,49 +2219,65 @@ linux_process_target::filter_event (int lwpid, int wstat)
child = find_lwp_pid (ptid_t (lwpid));
- /* Check for stop events reported by a process we didn't already
- know about - anything not already in our LWP list.
-
- If we're expecting to receive stopped processes after
- fork, vfork, and clone events, then we'll just add the
- new one to our list and go back to waiting for the event
- to be reported - the stopped process might be returned
- from waitpid before or after the event is.
-
- But note the case of a non-leader thread exec'ing after the
- leader having exited, and gone from our lists (because
- check_zombie_leaders deleted it). The non-leader thread
- changes its tid to the tgid. */
-
- if (WIFSTOPPED (wstat) && child == NULL && WSTOPSIG (wstat) == SIGTRAP
- && linux_ptrace_get_extended_event (wstat) == PTRACE_EVENT_EXEC)
+ /* Check for events reported by anything not in our LWP list. */
+ if (child == nullptr)
{
- ptid_t child_ptid;
-
- /* A multi-thread exec after we had seen the leader exiting. */
- if (debug_threads)
+ if (WIFSTOPPED (wstat))
{
- debug_printf ("LLW: Re-adding thread group leader LWP %d"
- "after exec.\n", lwpid);
+ if (WSTOPSIG (wstat) == SIGTRAP
+ && linux_ptrace_get_extended_event (wstat) == PTRACE_EVENT_EXEC)
+ {
+ /* A non-leader thread exec'ed after we've seen the
+ leader zombie, and removed it from our lists (in
+ check_zombie_leaders). The non-leader thread changes
+ its tid to the tgid. */
+ threads_debug_printf
+ ("Re-adding thread group leader LWP %d after exec.",
+ lwpid);
+
+ child = add_lwp (ptid_t (lwpid, lwpid));
+ child->stopped = 1;
+ switch_to_thread (child->thread);
+ }
+ else
+ {
+ /* A process we are controlling has forked and the new
+ child's stop was reported to us by the kernel. Save
+ its PID and go back to waiting for the fork event to
+ be reported - the stopped process might be returned
+ from waitpid before or after the fork event is. */
+ threads_debug_printf
+ ("Saving LWP %d status %s in stopped_pids list",
+ lwpid, status_to_str (wstat).c_str ());
+ add_to_pid_list (&stopped_pids, lwpid, wstat);
+ }
}
+ else
+ {
+ /* Don't report an event for the exit of an LWP not in our
+ list, i.e. not part of any inferior we're debugging.
+ This can happen if we detach from a program we originally
+ forked and then it exits. However, note that we may have
+ earlier deleted a leader of an inferior we're debugging,
+ in check_zombie_leaders. Re-add it back here if so. */
+ find_process ([&] (process_info *proc)
+ {
+ if (proc->pid == lwpid)
+ {
+ threads_debug_printf
+ ("Re-adding thread group leader LWP %d after exit.",
+ lwpid);
- child_ptid = ptid_t (lwpid, lwpid);
- child = add_lwp (child_ptid);
- child->stopped = 1;
- switch_to_thread (child->thread);
- }
+ child = add_lwp (ptid_t (lwpid, lwpid));
+ return true;
+ }
+ return false;
+ });
+ }
- /* If we didn't find a process, one of two things presumably happened:
- - A process we started and then detached from has exited. Ignore it.
- - A process we are controlling has forked and the new child's stop
- was reported to us by the kernel. Save its PID. */
- if (child == NULL && WIFSTOPPED (wstat))
- {
- add_to_pid_list (&stopped_pids, lwpid, wstat);
- return;
+ if (child == nullptr)
+ return;
}
- else if (child == NULL)
- return;
thread = get_lwp_thread (child);
@@ -2273,8 +2288,7 @@ linux_process_target::filter_event (int lwpid, int wstat)
/* Check if the thread has exited. */
if ((WIFEXITED (wstat) || WIFSIGNALED (wstat)))
{
- if (debug_threads)
- debug_printf ("LLFE: %d exited.\n", lwpid);
+ threads_debug_printf ("%d exited", lwpid);
if (finish_step_over (child))
{
@@ -2282,11 +2296,10 @@ linux_process_target::filter_event (int lwpid, int wstat)
unsuspend_all_lwps (child);
}
- /* If there is at least one more LWP, then the exit signal was
- not the end of the debugged application and should be
- ignored, unless GDB wants to hear about thread exits. */
- if (cs.report_thread_events
- || last_thread_of_process_p (pid_of (thread)))
+ /* If this is not the leader LWP, then the exit signal was not
+ the end of the debugged application and should be ignored,
+ unless GDB wants to hear about thread exits. */
+ if (cs.report_thread_events || is_leader (thread))
{
/* Since events are serialized to GDB core, and we can't
report this one right now. Leave the status pending for
@@ -2380,33 +2393,29 @@ linux_process_target::filter_event (int lwpid, int wstat)
if (WIFSTOPPED (wstat) && WSTOPSIG (wstat) == SIGSTOP
&& child->stop_expected)
{
- if (debug_threads)
- debug_printf ("Expected stop.\n");
+ threads_debug_printf ("Expected stop.");
+
child->stop_expected = 0;
if (thread->last_resume_kind == resume_stop)
{
/* We want to report the stop to the core. Treat the
SIGSTOP as a normal event. */
- if (debug_threads)
- debug_printf ("LLW: resume_stop SIGSTOP caught for %s.\n",
- target_pid_to_str (ptid_of (thread)).c_str ());
+ threads_debug_printf ("resume_stop SIGSTOP caught for %s.",
+ target_pid_to_str (ptid_of (thread)).c_str ());
}
else if (stopping_threads != NOT_STOPPING_THREADS)
{
/* Stopping threads. We don't want this SIGSTOP to end up
pending. */
- if (debug_threads)
- debug_printf ("LLW: SIGSTOP caught for %s "
- "while stopping threads.\n",
- target_pid_to_str (ptid_of (thread)).c_str ());
+ threads_debug_printf ("SIGSTOP caught for %s while stopping threads.",
+ target_pid_to_str (ptid_of (thread)).c_str ());
return;
}
else
{
/* This is a delayed SIGSTOP. Filter out the event. */
- if (debug_threads)
- debug_printf ("LLW: %s %s, 0, 0 (discard delayed SIGSTOP)\n",
+ threads_debug_printf ("%s %s, 0, 0 (discard delayed SIGSTOP)",
child->stepping ? "step" : "continue",
target_pid_to_str (ptid_of (thread)).c_str ());
@@ -2449,11 +2458,9 @@ linux_process_target::resume_stopped_resumed_lwps (thread_info *thread)
if (thread->last_resume_kind == resume_step)
step = maybe_hw_step (thread);
- if (debug_threads)
- debug_printf ("RSRL: resuming stopped-resumed LWP %s at %s: step=%d\n",
- target_pid_to_str (ptid_of (thread)).c_str (),
- paddress (lp->stop_pc),
- step);
+ threads_debug_printf ("resuming stopped-resumed LWP %s at %s: step=%d",
+ target_pid_to_str (ptid_of (thread)).c_str (),
+ paddress (lp->stop_pc), step);
resume_one_lwp (lp, step, GDB_SIGNAL_0, NULL);
}
@@ -2485,9 +2492,10 @@ linux_process_target::wait_for_event_filtered (ptid_t wait_ptid,
});
if (event_thread != NULL)
- event_child = get_thread_lwp (event_thread);
- if (debug_threads && event_thread)
- debug_printf ("Got a pending child %ld\n", lwpid_of (event_thread));
+ {
+ event_child = get_thread_lwp (event_thread);
+ threads_debug_printf ("Got a pending child %ld", lwpid_of (event_thread));
+ }
}
else if (filter_ptid != null_ptid)
{
@@ -2522,9 +2530,10 @@ linux_process_target::wait_for_event_filtered (ptid_t wait_ptid,
if (event_child != NULL)
{
- if (debug_threads)
- debug_printf ("Got an event from pending child %ld (%04x)\n",
- lwpid_of (event_thread), event_child->status_pending);
+ threads_debug_printf ("Got an event from pending child %ld (%04x)",
+ lwpid_of (event_thread),
+ event_child->status_pending);
+
*wstatp = event_child->status_pending;
event_child->status_pending_p = 0;
event_child->status_pending = 0;
@@ -2566,17 +2575,13 @@ linux_process_target::wait_for_event_filtered (ptid_t wait_ptid,
errno = 0;
ret = my_waitpid (-1, wstatp, options | WNOHANG);
- if (debug_threads)
- debug_printf ("LWFE: waitpid(-1, ...) returned %d, %s\n",
- ret, errno ? safe_strerror (errno) : "ERRNO-OK");
+ threads_debug_printf ("waitpid(-1, ...) returned %d, %s",
+ ret, errno ? safe_strerror (errno) : "ERRNO-OK");
if (ret > 0)
{
- if (debug_threads)
- {
- debug_printf ("LLW: waitpid %ld received %s\n",
- (long) ret, status_to_str (*wstatp).c_str ());
- }
+ threads_debug_printf ("waitpid %ld received %s",
+ (long) ret, status_to_str (*wstatp).c_str ());
/* Filter all events. IOW, leave all events pending. We'll
randomly select an event LWP out of all that have events
@@ -2629,8 +2634,8 @@ linux_process_target::wait_for_event_filtered (ptid_t wait_ptid,
over 0 (below), as it is more detailed. */
if (find_thread (not_stopped) == NULL)
{
- if (debug_threads)
- debug_printf ("LLW: exit (no unwaited-for LWP)\n");
+ threads_debug_printf ("exit (no unwaited-for LWP)");
+
gdb_sigmask (SIG_SETMASK, &prev_mask, NULL);
return -1;
}
@@ -2638,16 +2643,14 @@ linux_process_target::wait_for_event_filtered (ptid_t wait_ptid,
/* No interesting event to report to the caller. */
if ((options & WNOHANG))
{
- if (debug_threads)
- debug_printf ("WNOHANG set, no event found\n");
+ threads_debug_printf ("WNOHANG set, no event found");
gdb_sigmask (SIG_SETMASK, &prev_mask, NULL);
return 0;
}
/* Block until we get an event reported with SIGCHLD. */
- if (debug_threads)
- debug_printf ("sigsuspend'ing\n");
+ threads_debug_printf ("sigsuspend'ing");
sigsuspend (&prev_mask);
gdb_sigmask (SIG_SETMASK, &prev_mask, NULL);
@@ -2694,11 +2697,9 @@ select_event_lwp (struct lwp_info **orig_lp)
});
if (event_thread != NULL)
- {
- if (debug_threads)
- debug_printf ("SEL: Select single-step %s\n",
- target_pid_to_str (ptid_of (event_thread)).c_str ());
- }
+ threads_debug_printf
+ ("Select single-step %s",
+ target_pid_to_str (ptid_of (event_thread)).c_str ());
}
if (event_thread == NULL)
{
@@ -2781,9 +2782,8 @@ linux_process_target::stabilize_threads ()
if (thread_stuck != NULL)
{
- if (debug_threads)
- debug_printf ("can't stabilize, LWP %ld is stuck in jump pad\n",
- lwpid_of (thread_stuck));
+ threads_debug_printf ("can't stabilize, LWP %ld is stuck in jump pad",
+ lwpid_of (thread_stuck));
return;
}
@@ -2837,8 +2837,9 @@ linux_process_target::stabilize_threads ()
});
if (thread_stuck != NULL)
- debug_printf ("couldn't stabilize, LWP %ld got stuck in jump pad\n",
- lwpid_of (thread_stuck));
+ threads_debug_printf
+ ("couldn't stabilize, LWP %ld got stuck in jump pad",
+ lwpid_of (thread_stuck));
}
}
@@ -2865,7 +2866,7 @@ linux_process_target::filter_exit_event (lwp_info *event_child,
struct thread_info *thread = get_lwp_thread (event_child);
ptid_t ptid = ptid_of (thread);
- if (!last_thread_of_process_p (pid_of (thread)))
+ if (!is_leader (thread))
{
if (cs.report_thread_events)
ourstatus->set_thread_exited (0);
@@ -2914,6 +2915,8 @@ ptid_t
linux_process_target::wait_1 (ptid_t ptid, target_waitstatus *ourstatus,
target_wait_flags target_options)
{
+ THREADS_SCOPED_DEBUG_ENTER_EXIT;
+
client_state &cs = get_client_state ();
int w;
struct lwp_info *event_child;
@@ -2927,11 +2930,7 @@ linux_process_target::wait_1 (ptid_t ptid, target_waitstatus *ourstatus,
int in_step_range;
int any_resumed;
- if (debug_threads)
- {
- debug_enter ();
- debug_printf ("wait_1: [%s]\n", target_pid_to_str (ptid).c_str ());
- }
+ threads_debug_printf ("[%s]", target_pid_to_str (ptid).c_str ());
/* Translate generic target options into linux options. */
options = __WALL;
@@ -2965,9 +2964,8 @@ linux_process_target::wait_1 (ptid_t ptid, target_waitstatus *ourstatus,
pid = wait_for_event (ptid, &w, options);
else
{
- if (debug_threads)
- debug_printf ("step_over_bkpt set [%s], doing a blocking wait\n",
- target_pid_to_str (step_over_bkpt).c_str ());
+ threads_debug_printf ("step_over_bkpt set [%s], doing a blocking wait",
+ target_pid_to_str (step_over_bkpt).c_str ());
pid = wait_for_event (step_over_bkpt, &w, options & ~WNOHANG);
}
@@ -2975,24 +2973,14 @@ linux_process_target::wait_1 (ptid_t ptid, target_waitstatus *ourstatus,
{
gdb_assert (target_options & TARGET_WNOHANG);
- if (debug_threads)
- {
- debug_printf ("wait_1 ret = null_ptid, "
- "TARGET_WAITKIND_IGNORE\n");
- debug_exit ();
- }
+ threads_debug_printf ("ret = null_ptid, TARGET_WAITKIND_IGNORE");
ourstatus->set_ignore ();
return null_ptid;
}
else if (pid == -1)
{
- if (debug_threads)
- {
- debug_printf ("wait_1 ret = null_ptid, "
- "TARGET_WAITKIND_NO_RESUMED\n");
- debug_exit ();
- }
+ threads_debug_printf ("ret = null_ptid, TARGET_WAITKIND_NO_RESUMED");
ourstatus->set_no_resumed ();
return null_ptid;
@@ -3008,27 +2996,19 @@ linux_process_target::wait_1 (ptid_t ptid, target_waitstatus *ourstatus,
{
ourstatus->set_exited (WEXITSTATUS (w));
- if (debug_threads)
- {
- debug_printf ("wait_1 ret = %s, exited with "
- "retcode %d\n",
- target_pid_to_str (ptid_of (current_thread)).c_str (),
- WEXITSTATUS (w));
- debug_exit ();
- }
+ threads_debug_printf
+ ("ret = %s, exited with retcode %d",
+ target_pid_to_str (ptid_of (current_thread)).c_str (),
+ WEXITSTATUS (w));
}
else
{
ourstatus->set_signalled (gdb_signal_from_host (WTERMSIG (w)));
- if (debug_threads)
- {
- debug_printf ("wait_1 ret = %s, terminated with "
- "signal %d\n",
- target_pid_to_str (ptid_of (current_thread)).c_str (),
- WTERMSIG (w));
- debug_exit ();
- }
+ threads_debug_printf
+ ("ret = %s, terminated with signal %d",
+ target_pid_to_str (ptid_of (current_thread)).c_str (),
+ WTERMSIG (w));
}
if (ourstatus->kind () == TARGET_WAITKIND_EXITED)
@@ -3060,11 +3040,9 @@ linux_process_target::wait_1 (ptid_t ptid, target_waitstatus *ourstatus,
breakpoint_kind = breakpoint_kind_from_current_state (&stop_pc);
sw_breakpoint_from_kind (breakpoint_kind, &increment_pc);
- if (debug_threads)
- {
- debug_printf ("step-over for %s executed software breakpoint\n",
- target_pid_to_str (ptid_of (current_thread)).c_str ());
- }
+ threads_debug_printf
+ ("step-over for %s executed software breakpoint",
+ target_pid_to_str (ptid_of (current_thread)).c_str ());
if (increment_pc != 0)
{
@@ -3117,10 +3095,7 @@ linux_process_target::wait_1 (ptid_t ptid, target_waitstatus *ourstatus,
trace_event = handle_tracepoints (event_child);
if (bp_explains_trap)
- {
- if (debug_threads)
- debug_printf ("Hit a gdbserver breakpoint.\n");
- }
+ threads_debug_printf ("Hit a gdbserver breakpoint.");
}
else
{
@@ -3141,10 +3116,9 @@ linux_process_target::wait_1 (ptid_t ptid, target_waitstatus *ourstatus,
&& supports_fast_tracepoints ()
&& agent_loaded_p ())
{
- if (debug_threads)
- debug_printf ("Got signal %d for LWP %ld. Check if we need "
- "to defer or adjust it.\n",
- WSTOPSIG (w), lwpid_of (current_thread));
+ threads_debug_printf ("Got signal %d for LWP %ld. Check if we need "
+ "to defer or adjust it.",
+ WSTOPSIG (w), lwpid_of (current_thread));
/* Allow debugging the jump pad itself. */
if (current_thread->last_resume_kind != resume_step
@@ -3152,14 +3126,11 @@ linux_process_target::wait_1 (ptid_t ptid, target_waitstatus *ourstatus,
{
enqueue_one_deferred_signal (event_child, &w);
- if (debug_threads)
- debug_printf ("Signal %d for LWP %ld deferred (in jump pad)\n",
- WSTOPSIG (w), lwpid_of (current_thread));
+ threads_debug_printf ("Signal %d for LWP %ld deferred (in jump pad)",
+ WSTOPSIG (w), lwpid_of (current_thread));
resume_one_lwp (event_child, 0, 0, NULL);
- if (debug_threads)
- debug_exit ();
return ignore_event (ourstatus);
}
}
@@ -3167,11 +3138,11 @@ linux_process_target::wait_1 (ptid_t ptid, target_waitstatus *ourstatus,
if (event_child->collecting_fast_tracepoint
!= fast_tpoint_collect_result::not_collecting)
{
- if (debug_threads)
- debug_printf ("LWP %ld was trying to move out of the jump pad (%d). "
- "Check if we're already there.\n",
- lwpid_of (current_thread),
- (int) event_child->collecting_fast_tracepoint);
+ threads_debug_printf
+ ("LWP %ld was trying to move out of the jump pad (%d). "
+ "Check if we're already there.",
+ lwpid_of (current_thread),
+ (int) event_child->collecting_fast_tracepoint);
trace_event = 1;
@@ -3184,9 +3155,9 @@ linux_process_target::wait_1 (ptid_t ptid, target_waitstatus *ourstatus,
/* No longer need this breakpoint. */
if (event_child->exit_jump_pad_bkpt != NULL)
{
- if (debug_threads)
- debug_printf ("No longer need exit-jump-pad bkpt; removing it."
- "stopping all threads momentarily.\n");
+ threads_debug_printf
+ ("No longer need exit-jump-pad bkpt; removing it."
+ "stopping all threads momentarily.");
/* Other running threads could hit this breakpoint.
We don't handle moribund locations like GDB does,
@@ -3209,33 +3180,23 @@ linux_process_target::wait_1 (ptid_t ptid, target_waitstatus *ourstatus,
if (event_child->collecting_fast_tracepoint
== fast_tpoint_collect_result::not_collecting)
{
- if (debug_threads)
- debug_printf ("fast tracepoint finished "
- "collecting successfully.\n");
+ threads_debug_printf
+ ("fast tracepoint finished collecting successfully.");
/* We may have a deferred signal to report. */
if (dequeue_one_deferred_signal (event_child, &w))
- {
- if (debug_threads)
- debug_printf ("dequeued one signal.\n");
- }
+ threads_debug_printf ("dequeued one signal.");
else
{
- if (debug_threads)
- debug_printf ("no deferred signals.\n");
+ threads_debug_printf ("no deferred signals.");
if (stabilizing_threads)
{
ourstatus->set_stopped (GDB_SIGNAL_0);
- if (debug_threads)
- {
- debug_printf ("wait_1 ret = %s, stopped "
- "while stabilizing threads\n",
- target_pid_to_str
- (ptid_of (current_thread)).c_str ());
- debug_exit ();
- }
+ threads_debug_printf
+ ("ret = %s, stopped while stabilizing threads",
+ target_pid_to_str (ptid_of (current_thread)).c_str ());
return ptid_of (current_thread);
}
@@ -3250,16 +3211,11 @@ linux_process_target::wait_1 (ptid_t ptid, target_waitstatus *ourstatus,
&& WSTOPSIG (w) == SYSCALL_SIGTRAP
&& !gdb_catch_this_syscall (event_child))
{
- if (debug_threads)
- {
- debug_printf ("Ignored syscall for LWP %ld.\n",
- lwpid_of (current_thread));
- }
+ threads_debug_printf ("Ignored syscall for LWP %ld.",
+ lwpid_of (current_thread));
resume_one_lwp (event_child, event_child->stepping, 0, NULL);
- if (debug_threads)
- debug_exit ();
return ignore_event (ourstatus);
}
@@ -3287,9 +3243,8 @@ linux_process_target::wait_1 (ptid_t ptid, target_waitstatus *ourstatus,
{
siginfo_t info, *info_p;
- if (debug_threads)
- debug_printf ("Ignored signal %d for LWP %ld.\n",
- WSTOPSIG (w), lwpid_of (current_thread));
+ threads_debug_printf ("Ignored signal %d for LWP %ld.",
+ WSTOPSIG (w), lwpid_of (current_thread));
if (ptrace (PTRACE_GETSIGINFO, lwpid_of (current_thread),
(PTRACE_TYPE_ARG3) 0, &info) == 0)
@@ -3316,9 +3271,6 @@ linux_process_target::wait_1 (ptid_t ptid, target_waitstatus *ourstatus,
WSTOPSIG (w), info_p);
}
- if (debug_threads)
- debug_exit ();
-
return ignore_event (ourstatus);
}
@@ -3361,20 +3313,20 @@ linux_process_target::wait_1 (ptid_t ptid, target_waitstatus *ourstatus,
shouldn't know about. */
if (!report_to_gdb)
{
- if (debug_threads)
- {
- if (bp_explains_trap)
- debug_printf ("Hit a gdbserver breakpoint.\n");
- if (step_over_finished)
- debug_printf ("Step-over finished.\n");
- if (trace_event)
- debug_printf ("Tracepoint event.\n");
- if (lwp_in_step_range (event_child))
- debug_printf ("Range stepping pc 0x%s [0x%s, 0x%s).\n",
- paddress (event_child->stop_pc),
- paddress (event_child->step_range_start),
- paddress (event_child->step_range_end));
- }
+ if (bp_explains_trap)
+ threads_debug_printf ("Hit a gdbserver breakpoint.");
+
+ if (step_over_finished)
+ threads_debug_printf ("Step-over finished.");
+
+ if (trace_event)
+ threads_debug_printf ("Tracepoint event.");
+
+ if (lwp_in_step_range (event_child))
+ threads_debug_printf ("Range stepping pc 0x%s [0x%s, 0x%s).",
+ paddress (event_child->stop_pc),
+ paddress (event_child->step_range_start),
+ paddress (event_child->step_range_end));
/* We're not reporting this breakpoint to GDB, so apply the
decr_pc_after_break adjustment to the inferior's regcache
@@ -3410,36 +3362,36 @@ linux_process_target::wait_1 (ptid_t ptid, target_waitstatus *ourstatus,
}
}
- if (debug_threads)
- debug_printf ("proceeding all threads.\n");
- proceed_all_lwps ();
+ threads_debug_printf ("proceeding all threads.");
- if (debug_threads)
- debug_exit ();
+ proceed_all_lwps ();
return ignore_event (ourstatus);
}
- if (debug_threads)
- {
- if (event_child->waitstatus.kind () != TARGET_WAITKIND_IGNORE)
- debug_printf ("LWP %ld: extended event with waitstatus %s\n",
- lwpid_of (get_lwp_thread (event_child)),
- event_child->waitstatus.to_string ().c_str ());
- if (current_thread->last_resume_kind == resume_step)
- {
- if (event_child->step_range_start == event_child->step_range_end)
- debug_printf ("GDB wanted to single-step, reporting event.\n");
- else if (!lwp_in_step_range (event_child))
- debug_printf ("Out of step range, reporting event.\n");
- }
- if (event_child->stop_reason == TARGET_STOPPED_BY_WATCHPOINT)
- debug_printf ("Stopped by watchpoint.\n");
- else if (gdb_breakpoint_here (event_child->stop_pc))
- debug_printf ("Stopped by GDB breakpoint.\n");
- if (debug_threads)
- debug_printf ("Hit a non-gdbserver trap event.\n");
- }
+ if (debug_threads)
+ {
+ if (event_child->waitstatus.kind () != TARGET_WAITKIND_IGNORE)
+ threads_debug_printf ("LWP %ld: extended event with waitstatus %s",
+ lwpid_of (get_lwp_thread (event_child)),
+ event_child->waitstatus.to_string ().c_str ());
+
+ if (current_thread->last_resume_kind == resume_step)
+ {
+ if (event_child->step_range_start == event_child->step_range_end)
+ threads_debug_printf
+ ("GDB wanted to single-step, reporting event.");
+ else if (!lwp_in_step_range (event_child))
+ threads_debug_printf ("Out of step range, reporting event.");
+ }
+
+ if (event_child->stop_reason == TARGET_STOPPED_BY_WATCHPOINT)
+ threads_debug_printf ("Stopped by watchpoint.");
+ else if (gdb_breakpoint_here (event_child->stop_pc))
+ threads_debug_printf ("Stopped by GDB breakpoint.");
+ }
+
+ threads_debug_printf ("Hit a non-gdbserver trap event.");
/* Alright, we're going to report a stop. */
@@ -3559,6 +3511,9 @@ linux_process_target::wait_1 (ptid_t ptid, target_waitstatus *ourstatus,
unstop_all_lwps (1, event_child);
}
+ /* At this point, we haven't set OURSTATUS. This is where we do it. */
+ gdb_assert (ourstatus->kind () == TARGET_WAITKIND_IGNORE);
+
if (event_child->waitstatus.kind () != TARGET_WAITKIND_IGNORE)
{
/* If the reported event is an exit, fork, vfork or exec, let
@@ -3578,8 +3533,31 @@ linux_process_target::wait_1 (ptid_t ptid, target_waitstatus *ourstatus,
}
else
{
- /* The actual stop signal is overwritten below. */
- ourstatus->set_stopped (GDB_SIGNAL_0);
+ /* The LWP stopped due to a plain signal or a syscall signal. Either way,
+ event_chid->waitstatus wasn't filled in with the details, so look at
+ the wait status W. */
+ if (WSTOPSIG (w) == SYSCALL_SIGTRAP)
+ {
+ int syscall_number;
+
+ get_syscall_trapinfo (event_child, &syscall_number);
+ if (event_child->syscall_state == TARGET_WAITKIND_SYSCALL_ENTRY)
+ ourstatus->set_syscall_entry (syscall_number);
+ else if (event_child->syscall_state == TARGET_WAITKIND_SYSCALL_RETURN)
+ ourstatus->set_syscall_return (syscall_number);
+ else
+ gdb_assert_not_reached ("unexpected syscall state");
+ }
+ else if (current_thread->last_resume_kind == resume_stop
+ && WSTOPSIG (w) == SIGSTOP)
+ {
+ /* A thread that has been requested to stop by GDB with vCont;t,
+ and it stopped cleanly, so report as SIG0. The use of
+ SIGSTOP is an implementation detail. */
+ ourstatus->set_stopped (GDB_SIGNAL_0);
+ }
+ else
+ ourstatus->set_stopped (gdb_signal_from_host (WSTOPSIG (w)));
}
/* Now that we've selected our final event LWP, un-adjust its PC if
@@ -3598,45 +3576,11 @@ linux_process_target::wait_1 (ptid_t ptid, target_waitstatus *ourstatus,
}
}
- if (WSTOPSIG (w) == SYSCALL_SIGTRAP)
- {
- int syscall_number;
-
- get_syscall_trapinfo (event_child, &syscall_number);
- if (event_child->syscall_state == TARGET_WAITKIND_SYSCALL_ENTRY)
- ourstatus->set_syscall_entry (syscall_number);
- else if (event_child->syscall_state == TARGET_WAITKIND_SYSCALL_RETURN)
- ourstatus->set_syscall_return (syscall_number);
- else
- gdb_assert_not_reached ("unexpected syscall state");
- }
- else if (current_thread->last_resume_kind == resume_stop
- && WSTOPSIG (w) == SIGSTOP)
- {
- /* A thread that has been requested to stop by GDB with vCont;t,
- and it stopped cleanly, so report as SIG0. The use of
- SIGSTOP is an implementation detail. */
- ourstatus->set_stopped (GDB_SIGNAL_0);
- }
- else if (current_thread->last_resume_kind == resume_stop
- && WSTOPSIG (w) != SIGSTOP)
- {
- /* A thread that has been requested to stop by GDB with vCont;t,
- but, it stopped for other reasons. */
- ourstatus->set_stopped (gdb_signal_from_host (WSTOPSIG (w)));
- }
- else if (ourstatus->kind () == TARGET_WAITKIND_STOPPED)
- ourstatus->set_stopped (gdb_signal_from_host (WSTOPSIG (w)));
-
gdb_assert (step_over_bkpt == null_ptid);
- if (debug_threads)
- {
- debug_printf ("wait_1 ret = %s, %d, %d\n",
- target_pid_to_str (ptid_of (current_thread)).c_str (),
- ourstatus->kind (), ourstatus->sig ());
- debug_exit ();
- }
+ threads_debug_printf ("ret = %s, %s",
+ target_pid_to_str (ptid_of (current_thread)).c_str (),
+ ourstatus->to_string ().c_str ());
if (ourstatus->kind () == TARGET_WAITKIND_EXITED)
return filter_exit_event (event_child, ourstatus);
@@ -3648,28 +3592,14 @@ linux_process_target::wait_1 (ptid_t ptid, target_waitstatus *ourstatus,
static void
async_file_flush (void)
{
- int ret;
- char buf;
-
- do
- ret = read (linux_event_pipe[0], &buf, 1);
- while (ret >= 0 || (ret == -1 && errno == EINTR));
+ linux_event_pipe.flush ();
}
/* Put something in the pipe, so the event loop wakes up. */
static void
async_file_mark (void)
{
- int ret;
-
- async_file_flush ();
-
- do
- ret = write (linux_event_pipe[1], "+", 1);
- while (ret == 0 || (ret == -1 && errno == EINTR));
-
- /* Ignore EAGAIN. If the pipe is full, the event loop will already
- be awakened anyway. */
+ linux_event_pipe.mark ();
}
ptid_t
@@ -3736,14 +3666,12 @@ send_sigstop (struct lwp_info *lwp)
send another. */
if (lwp->stop_expected)
{
- if (debug_threads)
- debug_printf ("Have pending sigstop for lwp %d\n", pid);
+ threads_debug_printf ("Have pending sigstop for lwp %d", pid);
return;
}
- if (debug_threads)
- debug_printf ("Sending sigstop to lwp %d\n", pid);
+ threads_debug_printf ("Sending sigstop to lwp %d", pid);
lwp->stop_expected = 1;
kill_lwp (pid, SIGSTOP);
@@ -3828,8 +3756,7 @@ linux_process_target::wait_for_sigstop ()
scoped_restore_current_thread restore_thread;
- if (debug_threads)
- debug_printf ("wait_for_sigstop: pulling events\n");
+ threads_debug_printf ("pulling events");
/* Passing NULL_PTID as filter indicates we want all events to be
left pending. Eventually this returns when there are no
@@ -3841,8 +3768,7 @@ linux_process_target::wait_for_sigstop ()
return;
else
{
- if (debug_threads)
- debug_printf ("Previously current thread died.\n");
+ threads_debug_printf ("Previously current thread died.");
/* We can't change the current inferior behind GDB's back,
otherwise, a subsequent command may apply to the wrong
@@ -3901,19 +3827,16 @@ linux_process_target::move_out_of_jump_pad (thread_info *thread)
&& thread->last_resume_kind != resume_step
&& maybe_move_out_of_jump_pad (lwp, wstat))
{
- if (debug_threads)
- debug_printf ("LWP %ld needs stabilizing (in jump pad)\n",
- lwpid_of (thread));
+ threads_debug_printf ("LWP %ld needs stabilizing (in jump pad)",
+ lwpid_of (thread));
if (wstat)
{
lwp->status_pending_p = 0;
enqueue_one_deferred_signal (lwp, wstat);
- if (debug_threads)
- debug_printf ("Signal %d for LWP %ld deferred "
- "(in jump pad)\n",
- WSTOPSIG (*wstat), lwpid_of (thread));
+ threads_debug_printf ("Signal %d for LWP %ld deferred (in jump pad",
+ WSTOPSIG (*wstat), lwpid_of (thread));
}
resume_one_lwp (lwp, 0, 0, NULL);
@@ -3939,16 +3862,13 @@ linux_process_target::stop_all_lwps (int suspend, lwp_info *except)
/* Should not be called recursively. */
gdb_assert (stopping_threads == NOT_STOPPING_THREADS);
- if (debug_threads)
- {
- debug_enter ();
- debug_printf ("stop_all_lwps (%s, except=%s)\n",
- suspend ? "stop-and-suspend" : "stop",
- (except != NULL
- ? target_pid_to_str
- (ptid_of (get_lwp_thread (except))).c_str ()
- : "none"));
- }
+ THREADS_SCOPED_DEBUG_ENTER_EXIT;
+
+ threads_debug_printf
+ ("%s, except=%s", suspend ? "stop-and-suspend" : "stop",
+ (except != NULL
+ ? target_pid_to_str (ptid_of (get_lwp_thread (except))).c_str ()
+ : "none"));
stopping_threads = (suspend
? STOPPING_AND_SUSPENDING_THREADS
@@ -3968,12 +3888,7 @@ linux_process_target::stop_all_lwps (int suspend, lwp_info *except)
wait_for_sigstop ();
stopping_threads = NOT_STOPPING_THREADS;
- if (debug_threads)
- {
- debug_printf ("stop_all_lwps done, setting stopping_threads "
- "back to !stopping\n");
- debug_exit ();
- }
+ threads_debug_printf ("setting stopping_threads back to !stopping");
}
/* Enqueue one signal in the chain of signals which need to be
@@ -4019,10 +3934,7 @@ linux_process_target::single_step (lwp_info* lwp)
step = 0;
}
else
- {
- if (debug_threads)
- debug_printf ("stepping is not implemented on this target");
- }
+ threads_debug_printf ("stepping is not implemented on this target");
return step;
}
@@ -4092,11 +4004,10 @@ linux_process_target::resume_one_lwp_throw (lwp_info *lwp, int step,
if (lwp->status_pending_p)
{
- if (debug_threads)
- debug_printf ("Not resuming lwp %ld (%s, stop %s);"
- " has pending status\n",
- lwpid_of (thread), step ? "step" : "continue",
- lwp->stop_expected ? "expected" : "not expected");
+ threads_debug_printf
+ ("Not resuming lwp %ld (%s, stop %s); has pending status",
+ lwpid_of (thread), step ? "step" : "continue",
+ lwp->stop_expected ? "expected" : "not expected");
return;
}
@@ -4115,9 +4026,8 @@ linux_process_target::resume_one_lwp_throw (lwp_info *lwp, int step,
worthwhile just to solve this one, however. */
if (lwp->bp_reinsert != 0)
{
- if (debug_threads)
- debug_printf (" pending reinsert at 0x%s\n",
- paddress (lwp->bp_reinsert));
+ threads_debug_printf (" pending reinsert at 0x%s",
+ paddress (lwp->bp_reinsert));
if (supports_hardware_single_step ())
{
@@ -4135,18 +4045,15 @@ linux_process_target::resume_one_lwp_throw (lwp_info *lwp, int step,
}
if (fast_tp_collecting == fast_tpoint_collect_result::before_insn)
- {
- if (debug_threads)
- debug_printf ("lwp %ld wants to get out of fast tracepoint jump pad"
- " (exit-jump-pad-bkpt)\n",
- lwpid_of (thread));
- }
+ threads_debug_printf
+ ("lwp %ld wants to get out of fast tracepoint jump pad "
+ "(exit-jump-pad-bkpt)", lwpid_of (thread));
+
else if (fast_tp_collecting == fast_tpoint_collect_result::at_insn)
{
- if (debug_threads)
- debug_printf ("lwp %ld wants to get out of fast tracepoint jump pad"
- " single-stepping\n",
- lwpid_of (thread));
+ threads_debug_printf
+ ("lwp %ld wants to get out of fast tracepoint jump pad single-stepping",
+ lwpid_of (thread));
if (supports_hardware_single_step ())
step = 1;
@@ -4168,9 +4075,9 @@ linux_process_target::resume_one_lwp_throw (lwp_info *lwp, int step,
enhancement. */
if (thread->while_stepping != NULL)
{
- if (debug_threads)
- debug_printf ("lwp %ld has a while-stepping action -> forcing step.\n",
- lwpid_of (thread));
+ threads_debug_printf
+ ("lwp %ld has a while-stepping action -> forcing step.",
+ lwpid_of (thread));
step = single_step (lwp);
}
@@ -4181,11 +4088,8 @@ linux_process_target::resume_one_lwp_throw (lwp_info *lwp, int step,
lwp->stop_pc = low_get_pc (regcache);
- if (debug_threads)
- {
- debug_printf (" %s from pc 0x%lx\n", step ? "step" : "continue",
- (long) lwp->stop_pc);
- }
+ threads_debug_printf (" %s from pc 0x%lx", step ? "step" : "continue",
+ (long) lwp->stop_pc);
}
/* If we have pending signals, consume one if it can be delivered to
@@ -4202,10 +4106,9 @@ linux_process_target::resume_one_lwp_throw (lwp_info *lwp, int step,
lwp->pending_signals.pop_front ();
}
- if (debug_threads)
- debug_printf ("Resuming lwp %ld (%s, signal %d, stop %s)\n",
- lwpid_of (thread), step ? "step" : "continue", signal,
- lwp->stop_expected ? "expected" : "not expected");
+ threads_debug_printf ("Resuming lwp %ld (%s, signal %d, stop %s)",
+ lwpid_of (thread), step ? "step" : "continue", signal,
+ lwp->stop_expected ? "expected" : "not expected");
low_prepare_to_resume (lwp);
@@ -4226,7 +4129,15 @@ linux_process_target::resume_one_lwp_throw (lwp_info *lwp, int step,
(PTRACE_TYPE_ARG4) (uintptr_t) signal);
if (errno)
- perror_with_name ("resuming thread");
+ {
+ int saved_errno = errno;
+
+ threads_debug_printf ("ptrace errno = %d (%s)",
+ saved_errno, strerror (saved_errno));
+
+ errno = saved_errno;
+ perror_with_name ("resuming thread");
+ }
/* Successfully resumed. Clear state that no longer makes sense,
and mark the LWP as running. Must not do this before resuming
@@ -4287,7 +4198,15 @@ linux_process_target::resume_one_lwp (lwp_info *lwp, int step, int signal,
}
catch (const gdb_exception_error &ex)
{
- if (!check_ptrace_stopped_lwp_gone (lwp))
+ if (check_ptrace_stopped_lwp_gone (lwp))
+ {
+ /* This could because we tried to resume an LWP after its leader
+ exited. Mark it as resumed, so we can collect an exit event
+ from it. */
+ lwp->stopped = 0;
+ lwp->stop_reason = TARGET_STOPPED_BY_NO_REASON;
+ }
+ else
throw;
}
}
@@ -4319,13 +4238,11 @@ linux_set_resume_request (thread_info *thread, thread_resume *resume, size_t n)
if (resume[ndx].kind == resume_stop
&& thread->last_resume_kind == resume_stop)
{
- if (debug_threads)
- debug_printf ("already %s LWP %ld at GDB's request\n",
- (thread->last_status.kind ()
- == TARGET_WAITKIND_STOPPED)
- ? "stopped"
- : "stopping",
- lwpid_of (thread));
+ threads_debug_printf
+ ("already %s LWP %ld at GDB's request",
+ (thread->last_status.kind () == TARGET_WAITKIND_STOPPED
+ ? "stopped" : "stopping"),
+ lwpid_of (thread));
continue;
}
@@ -4335,13 +4252,11 @@ linux_set_resume_request (thread_info *thread, thread_resume *resume, size_t n)
if (resume[ndx].kind != resume_stop
&& thread->last_resume_kind != resume_stop)
{
- if (debug_threads)
- debug_printf ("already %s LWP %ld at GDB's request\n",
- (thread->last_resume_kind
- == resume_step)
- ? "stepping"
- : "continuing",
- lwpid_of (thread));
+ threads_debug_printf
+ ("already %s LWP %ld at GDB's request",
+ (thread->last_resume_kind == resume_step
+ ? "stepping" : "continuing"),
+ lwpid_of (thread));
continue;
}
@@ -4355,9 +4270,9 @@ linux_set_resume_request (thread_info *thread, thread_resume *resume, size_t n)
&& (rel->waitstatus.kind () == TARGET_WAITKIND_FORKED
|| rel->waitstatus.kind () == TARGET_WAITKIND_VFORKED))
{
- if (debug_threads)
- debug_printf ("not resuming LWP %ld: has queued stop reply\n",
- lwpid_of (thread));
+ threads_debug_printf
+ ("not resuming LWP %ld: has queued stop reply",
+ lwpid_of (thread));
continue;
}
}
@@ -4368,9 +4283,9 @@ linux_set_resume_request (thread_info *thread, thread_resume *resume, size_t n)
(wildcard) resume request. */
if (in_queued_stop_replies (thread->id))
{
- if (debug_threads)
- debug_printf ("not resuming LWP %ld: has queued stop reply\n",
- lwpid_of (thread));
+ threads_debug_printf
+ ("not resuming LWP %ld: has queued stop reply",
+ lwpid_of (thread));
continue;
}
@@ -4389,11 +4304,11 @@ linux_set_resume_request (thread_info *thread, thread_resume *resume, size_t n)
{
lwp->status_pending_p = 1;
- if (debug_threads)
- debug_printf ("Dequeueing deferred signal %d for LWP %ld, "
- "leaving status pending.\n",
- WSTOPSIG (lwp->status_pending),
- lwpid_of (thread));
+ threads_debug_printf
+ ("Dequeueing deferred signal %d for LWP %ld, "
+ "leaving status pending.",
+ WSTOPSIG (lwp->status_pending),
+ lwpid_of (thread));
}
return;
@@ -4434,18 +4349,16 @@ linux_process_target::thread_needs_step_over (thread_info *thread)
if (!lwp->stopped)
{
- if (debug_threads)
- debug_printf ("Need step over [LWP %ld]? Ignoring, not stopped\n",
- lwpid_of (thread));
+ threads_debug_printf ("Need step over [LWP %ld]? Ignoring, not stopped",
+ lwpid_of (thread));
return false;
}
if (thread->last_resume_kind == resume_stop)
{
- if (debug_threads)
- debug_printf ("Need step over [LWP %ld]? Ignoring, should remain"
- " stopped\n",
- lwpid_of (thread));
+ threads_debug_printf
+ ("Need step over [LWP %ld]? Ignoring, should remain stopped",
+ lwpid_of (thread));
return false;
}
@@ -4453,18 +4366,16 @@ linux_process_target::thread_needs_step_over (thread_info *thread)
if (lwp->suspended)
{
- if (debug_threads)
- debug_printf ("Need step over [LWP %ld]? Ignoring, suspended\n",
- lwpid_of (thread));
+ threads_debug_printf ("Need step over [LWP %ld]? Ignoring, suspended",
+ lwpid_of (thread));
return false;
}
if (lwp->status_pending_p)
{
- if (debug_threads)
- debug_printf ("Need step over [LWP %ld]? Ignoring, has pending"
- " status.\n",
- lwpid_of (thread));
+ threads_debug_printf
+ ("Need step over [LWP %ld]? Ignoring, has pending status.",
+ lwpid_of (thread));
return false;
}
@@ -4479,11 +4390,10 @@ linux_process_target::thread_needs_step_over (thread_info *thread)
command, or poked thread's registers herself. */
if (pc != lwp->stop_pc)
{
- if (debug_threads)
- debug_printf ("Need step over [LWP %ld]? Cancelling, PC was changed. "
- "Old stop_pc was 0x%s, PC is now 0x%s\n",
- lwpid_of (thread),
- paddress (lwp->stop_pc), paddress (pc));
+ threads_debug_printf
+ ("Need step over [LWP %ld]? Cancelling, PC was changed. "
+ "Old stop_pc was 0x%s, PC is now 0x%s", lwpid_of (thread),
+ paddress (lwp->stop_pc), paddress (pc));
return false;
}
@@ -4493,10 +4403,9 @@ linux_process_target::thread_needs_step_over (thread_info *thread)
&& !lwp->pending_signals.empty ()
&& lwp_signal_can_be_delivered (lwp))
{
- if (debug_threads)
- debug_printf ("Need step over [LWP %ld]? Ignoring, has pending"
- " signals.\n",
- lwpid_of (thread));
+ threads_debug_printf
+ ("Need step over [LWP %ld]? Ignoring, has pending signals.",
+ lwpid_of (thread));
return false;
}
@@ -4514,19 +4423,17 @@ linux_process_target::thread_needs_step_over (thread_info *thread)
&& gdb_condition_true_at_breakpoint (pc)
&& gdb_no_commands_at_breakpoint (pc))
{
- if (debug_threads)
- debug_printf ("Need step over [LWP %ld]? yes, but found"
- " GDB breakpoint at 0x%s; skipping step over\n",
- lwpid_of (thread), paddress (pc));
+ threads_debug_printf ("Need step over [LWP %ld]? yes, but found"
+ " GDB breakpoint at 0x%s; skipping step over",
+ lwpid_of (thread), paddress (pc));
return false;
}
else
{
- if (debug_threads)
- debug_printf ("Need step over [LWP %ld]? yes, "
- "found breakpoint at 0x%s\n",
- lwpid_of (thread), paddress (pc));
+ threads_debug_printf ("Need step over [LWP %ld]? yes, "
+ "found breakpoint at 0x%s",
+ lwpid_of (thread), paddress (pc));
/* We've found an lwp that needs stepping over --- return 1 so
that find_thread stops looking. */
@@ -4534,10 +4441,9 @@ linux_process_target::thread_needs_step_over (thread_info *thread)
}
}
- if (debug_threads)
- debug_printf ("Need step over [LWP %ld]? No, no breakpoint found"
- " at 0x%s\n",
- lwpid_of (thread), paddress (pc));
+ threads_debug_printf
+ ("Need step over [LWP %ld]? No, no breakpoint found at 0x%s",
+ lwpid_of (thread), paddress (pc));
return false;
}
@@ -4548,9 +4454,8 @@ linux_process_target::start_step_over (lwp_info *lwp)
struct thread_info *thread = get_lwp_thread (lwp);
CORE_ADDR pc;
- if (debug_threads)
- debug_printf ("Starting step-over on LWP %ld. Stopping all threads\n",
- lwpid_of (thread));
+ threads_debug_printf ("Starting step-over on LWP %ld. Stopping all threads",
+ lwpid_of (thread));
stop_all_lwps (1, lwp);
@@ -4561,8 +4466,7 @@ linux_process_target::start_step_over (lwp_info *lwp)
lwp->suspended);
}
- if (debug_threads)
- debug_printf ("Done stopping all threads for step-over.\n");
+ threads_debug_printf ("Done stopping all threads for step-over.");
/* Note, we should always reach here with an already adjusted PC,
either by GDB (if we're resuming due to GDB's request), or by our
@@ -4595,8 +4499,7 @@ linux_process_target::finish_step_over (lwp_info *lwp)
{
scoped_restore_current_thread restore_thread;
- if (debug_threads)
- debug_printf ("Finished step over.\n");
+ threads_debug_printf ("Finished step over.");
switch_to_thread (get_lwp_thread (lwp));
@@ -4634,8 +4537,7 @@ linux_process_target::complete_ongoing_step_over ()
int wstat;
int ret;
- if (debug_threads)
- debug_printf ("detach: step over in progress, finish it first\n");
+ threads_debug_printf ("detach: step over in progress, finish it first");
/* Passing NULL_PTID as filter indicates we want all events to
be left pending. Eventually this returns when there are no
@@ -4659,19 +4561,15 @@ linux_process_target::complete_ongoing_step_over ()
thread_info *thread = get_lwp_thread (lwp);
if (thread->last_resume_kind != resume_step)
{
- if (debug_threads)
- debug_printf ("detach: discard step-over SIGTRAP\n");
+ threads_debug_printf ("detach: discard step-over SIGTRAP");
lwp->status_pending_p = 0;
lwp->status_pending = 0;
resume_one_lwp (lwp, lwp->stepping, 0, NULL);
}
else
- {
- if (debug_threads)
- debug_printf ("detach: resume_step, "
- "not discarding step-over SIGTRAP\n");
- }
+ threads_debug_printf
+ ("detach: resume_step, not discarding step-over SIGTRAP");
}
}
step_over_bkpt = null_ptid;
@@ -4691,13 +4589,12 @@ linux_process_target::resume_one_thread (thread_info *thread,
if (lwp->resume->kind == resume_stop)
{
- if (debug_threads)
- debug_printf ("resume_stop request for LWP %ld\n", lwpid_of (thread));
+ threads_debug_printf ("resume_stop request for LWP %ld",
+ lwpid_of (thread));
if (!lwp->stopped)
{
- if (debug_threads)
- debug_printf ("stopping LWP %ld\n", lwpid_of (thread));
+ threads_debug_printf ("stopping LWP %ld", lwpid_of (thread));
/* Stop the thread, and wait for the event asynchronously,
through the event loop. */
@@ -4705,9 +4602,7 @@ linux_process_target::resume_one_thread (thread_info *thread,
}
else
{
- if (debug_threads)
- debug_printf ("already stopped LWP %ld\n",
- lwpid_of (thread));
+ threads_debug_printf ("already stopped LWP %ld", lwpid_of (thread));
/* The LWP may have been stopped in an internal event that
was not meant to be notified back to GDB (e.g., gdbserver
@@ -4769,16 +4664,12 @@ linux_process_target::resume_one_thread (thread_info *thread,
if (!leave_pending)
{
- if (debug_threads)
- debug_printf ("resuming LWP %ld\n", lwpid_of (thread));
+ threads_debug_printf ("resuming LWP %ld", lwpid_of (thread));
proceed_one_lwp (thread, NULL);
}
else
- {
- if (debug_threads)
- debug_printf ("leaving LWP %ld stopped\n", lwpid_of (thread));
- }
+ threads_debug_printf ("leaving LWP %ld stopped", lwpid_of (thread));
thread->last_status.set_ignore ();
lwp->resume = NULL;
@@ -4789,11 +4680,7 @@ linux_process_target::resume (thread_resume *resume_info, size_t n)
{
struct thread_info *need_step_over = NULL;
- if (debug_threads)
- {
- debug_enter ();
- debug_printf ("linux_resume:\n");
- }
+ THREADS_SCOPED_DEBUG_ENTER_EXIT;
for_each_thread ([&] (thread_info *thread)
{
@@ -4827,16 +4714,13 @@ linux_process_target::resume (thread_resume *resume_info, size_t n)
bool leave_all_stopped = (need_step_over != NULL || any_pending);
- if (debug_threads)
- {
- if (need_step_over != NULL)
- debug_printf ("Not resuming all, need step over\n");
- else if (any_pending)
- debug_printf ("Not resuming, all-stop and found "
- "an LWP with pending status\n");
- else
- debug_printf ("Resuming, no pending status or step over needed\n");
- }
+ if (need_step_over != NULL)
+ threads_debug_printf ("Not resuming all, need step over");
+ else if (any_pending)
+ threads_debug_printf ("Not resuming, all-stop and found "
+ "an LWP with pending status");
+ else
+ threads_debug_printf ("Resuming, no pending status or step over needed");
/* Even if we're leaving threads stopped, queue all signals we'd
otherwise deliver. */
@@ -4848,12 +4732,6 @@ linux_process_target::resume (thread_resume *resume_info, size_t n)
if (need_step_over)
start_step_over (get_thread_lwp (need_step_over));
- if (debug_threads)
- {
- debug_printf ("linux_resume done\n");
- debug_exit ();
- }
-
/* We may have events that were pending that can/should be sent to
the client now. Trigger a linux_wait call. */
if (target_is_async_p ())
@@ -4869,30 +4747,26 @@ linux_process_target::proceed_one_lwp (thread_info *thread, lwp_info *except)
if (lwp == except)
return;
- if (debug_threads)
- debug_printf ("proceed_one_lwp: lwp %ld\n", lwpid_of (thread));
+ threads_debug_printf ("lwp %ld", lwpid_of (thread));
if (!lwp->stopped)
{
- if (debug_threads)
- debug_printf (" LWP %ld already running\n", lwpid_of (thread));
+ threads_debug_printf (" LWP %ld already running", lwpid_of (thread));
return;
}
if (thread->last_resume_kind == resume_stop
&& thread->last_status.kind () != TARGET_WAITKIND_IGNORE)
{
- if (debug_threads)
- debug_printf (" client wants LWP to remain %ld stopped\n",
- lwpid_of (thread));
+ threads_debug_printf (" client wants LWP to remain %ld stopped",
+ lwpid_of (thread));
return;
}
if (lwp->status_pending_p)
{
- if (debug_threads)
- debug_printf (" LWP %ld has pending status, leaving stopped\n",
- lwpid_of (thread));
+ threads_debug_printf (" LWP %ld has pending status, leaving stopped",
+ lwpid_of (thread));
return;
}
@@ -4900,8 +4774,7 @@ linux_process_target::proceed_one_lwp (thread_info *thread, lwp_info *except)
if (lwp->suspended)
{
- if (debug_threads)
- debug_printf (" LWP %ld is suspended\n", lwpid_of (thread));
+ threads_debug_printf (" LWP %ld is suspended", lwpid_of (thread));
return;
}
@@ -4920,19 +4793,17 @@ linux_process_target::proceed_one_lwp (thread_info *thread, lwp_info *except)
another one here. Note that if the LWP already has a SIGSTOP
pending, this is a no-op. */
- if (debug_threads)
- debug_printf ("Client wants LWP %ld to stop. "
- "Making sure it has a SIGSTOP pending\n",
- lwpid_of (thread));
+ threads_debug_printf
+ ("Client wants LWP %ld to stop. Making sure it has a SIGSTOP pending",
+ lwpid_of (thread));
send_sigstop (lwp);
}
if (thread->last_resume_kind == resume_step)
{
- if (debug_threads)
- debug_printf (" stepping LWP %ld, client wants it stepping\n",
- lwpid_of (thread));
+ threads_debug_printf (" stepping LWP %ld, client wants it stepping",
+ lwpid_of (thread));
/* If resume_step is requested by GDB, install single-step
breakpoints when the thread is about to be actually resumed if
@@ -4945,9 +4816,8 @@ linux_process_target::proceed_one_lwp (thread_info *thread, lwp_info *except)
}
else if (lwp->bp_reinsert != 0)
{
- if (debug_threads)
- debug_printf (" stepping LWP %ld, reinsert set\n",
- lwpid_of (thread));
+ threads_debug_printf (" stepping LWP %ld, reinsert set",
+ lwpid_of (thread));
step = maybe_hw_step (thread);
}
@@ -4990,18 +4860,15 @@ linux_process_target::proceed_all_lwps ()
if (need_step_over != NULL)
{
- if (debug_threads)
- debug_printf ("proceed_all_lwps: found "
- "thread %ld needing a step-over\n",
- lwpid_of (need_step_over));
+ threads_debug_printf ("found thread %ld needing a step-over",
+ lwpid_of (need_step_over));
start_step_over (get_thread_lwp (need_step_over));
return;
}
}
- if (debug_threads)
- debug_printf ("Proceeding, no step-over needed\n");
+ threads_debug_printf ("Proceeding, no step-over needed");
for_each_thread ([this] (thread_info *thread)
{
@@ -5012,15 +4879,13 @@ linux_process_target::proceed_all_lwps ()
void
linux_process_target::unstop_all_lwps (int unsuspend, lwp_info *except)
{
- if (debug_threads)
- {
- debug_enter ();
- if (except)
- debug_printf ("unstopping all lwps, except=(LWP %ld)\n",
- lwpid_of (get_lwp_thread (except)));
- else
- debug_printf ("unstopping all lwps\n");
- }
+ THREADS_SCOPED_DEBUG_ENTER_EXIT;
+
+ if (except)
+ threads_debug_printf ("except=(LWP %ld)",
+ lwpid_of (get_lwp_thread (except)));
+ else
+ threads_debug_printf ("except=nullptr");
if (unsuspend)
for_each_thread ([&] (thread_info *thread)
@@ -5032,12 +4897,6 @@ linux_process_target::unstop_all_lwps (int unsuspend, lwp_info *except)
{
proceed_one_lwp (thread, except);
});
-
- if (debug_threads)
- {
- debug_printf ("unstop_all_lwps done\n");
- debug_exit ();
- }
}
@@ -5492,93 +5351,71 @@ linux_read_memory (CORE_ADDR memaddr, unsigned char *myaddr, int len)
return the_target->read_memory (memaddr, myaddr, len);
}
-/* Copy LEN bytes from inferior's memory starting at MEMADDR
- to debugger memory starting at MYADDR. */
-int
-linux_process_target::read_memory (CORE_ADDR memaddr,
- unsigned char *myaddr, int len)
+/* Helper for read_memory/write_memory using /proc/PID/mem. Because
+ we can use a single read/write call, this can be much more
+ efficient than banging away at PTRACE_PEEKTEXT. Also, unlike
+ PTRACE_PEEKTEXT/PTRACE_POKETEXT, this works with running threads.
+ One an only one of READBUF and WRITEBUF is non-null. If READBUF is
+ not null, then we're reading, otherwise we're writing. */
+
+static int
+proc_xfer_memory (CORE_ADDR memaddr, unsigned char *readbuf,
+ const gdb_byte *writebuf, int len)
{
- int pid = lwpid_of (current_thread);
- PTRACE_XFER_TYPE *buffer;
- CORE_ADDR addr;
- int count;
- char filename[64];
- int i;
- int ret;
- int fd;
+ gdb_assert ((readbuf == nullptr) != (writebuf == nullptr));
+
+ process_info *proc = current_process ();
- /* Try using /proc. Don't bother for one word. */
- if (len >= 3 * sizeof (long))
+ int fd = proc->priv->mem_fd;
+ if (fd == -1)
+ return EIO;
+
+ while (len > 0)
{
int bytes;
- /* We could keep this file open and cache it - possibly one per
- thread. That requires some juggling, but is even faster. */
- sprintf (filename, "/proc/%d/mem", pid);
- fd = open (filename, O_RDONLY | O_LARGEFILE);
- if (fd == -1)
- goto no_proc;
-
/* If pread64 is available, use it. It's faster if the kernel
supports it (only one syscall), and it's 64-bit safe even on
32-bit platforms (for instance, SPARC debugging a SPARC64
application). */
#ifdef HAVE_PREAD64
- bytes = pread64 (fd, myaddr, len, memaddr);
+ bytes = (readbuf != nullptr
+ ? pread64 (fd, readbuf, len, memaddr)
+ : pwrite64 (fd, writebuf, len, memaddr));
#else
bytes = -1;
if (lseek (fd, memaddr, SEEK_SET) != -1)
- bytes = read (fd, myaddr, len);
+ bytes = (readbuf != nullptr
+ ? read (fd, readbuf, len)
+ ? write (fd, writebuf, len));
#endif
- close (fd);
- if (bytes == len)
- return 0;
-
- /* Some data was read, we'll try to get the rest with ptrace. */
- if (bytes > 0)
+ if (bytes < 0)
+ return errno;
+ else if (bytes == 0)
{
- memaddr += bytes;
- myaddr += bytes;
- len -= bytes;
+ /* EOF means the address space is gone, the whole process
+ exited or execed. */
+ return EIO;
}
- }
-
- no_proc:
- /* Round starting address down to longword boundary. */
- addr = memaddr & -(CORE_ADDR) sizeof (PTRACE_XFER_TYPE);
- /* Round ending address up; get number of longwords that makes. */
- count = ((((memaddr + len) - addr) + sizeof (PTRACE_XFER_TYPE) - 1)
- / sizeof (PTRACE_XFER_TYPE));
- /* Allocate buffer of that many longwords. */
- buffer = XALLOCAVEC (PTRACE_XFER_TYPE, count);
- /* Read all the longwords */
- errno = 0;
- for (i = 0; i < count; i++, addr += sizeof (PTRACE_XFER_TYPE))
- {
- /* Coerce the 3rd arg to a uintptr_t first to avoid potential gcc warning
- about coercing an 8 byte integer to a 4 byte pointer. */
- buffer[i] = ptrace (PTRACE_PEEKTEXT, pid,
- (PTRACE_TYPE_ARG3) (uintptr_t) addr,
- (PTRACE_TYPE_ARG4) 0);
- if (errno)
- break;
+ memaddr += bytes;
+ if (readbuf != nullptr)
+ readbuf += bytes;
+ else
+ writebuf += bytes;
+ len -= bytes;
}
- ret = errno;
- /* Copy appropriate bytes out of the buffer. */
- if (i > 0)
- {
- i *= sizeof (PTRACE_XFER_TYPE);
- i -= memaddr & (sizeof (PTRACE_XFER_TYPE) - 1);
- memcpy (myaddr,
- (char *) buffer + (memaddr & (sizeof (PTRACE_XFER_TYPE) - 1)),
- i < len ? i : len);
- }
+ return 0;
+}
- return ret;
+int
+linux_process_target::read_memory (CORE_ADDR memaddr,
+ unsigned char *myaddr, int len)
+{
+ return proc_xfer_memory (memaddr, myaddr, nullptr, len);
}
/* Copy LEN bytes of data from debugger memory at MYADDR to inferior's
@@ -5589,25 +5426,6 @@ int
linux_process_target::write_memory (CORE_ADDR memaddr,
const unsigned char *myaddr, int len)
{
- int i;
- /* Round starting address down to longword boundary. */
- CORE_ADDR addr = memaddr & -(CORE_ADDR) sizeof (PTRACE_XFER_TYPE);
- /* Round ending address up; get number of longwords that makes. */
- int count
- = (((memaddr + len) - addr) + sizeof (PTRACE_XFER_TYPE) - 1)
- / sizeof (PTRACE_XFER_TYPE);
-
- /* Allocate buffer of that many longwords. */
- PTRACE_XFER_TYPE *buffer = XALLOCAVEC (PTRACE_XFER_TYPE, count);
-
- int pid = lwpid_of (current_thread);
-
- if (len == 0)
- {
- /* Zero length write always succeeds. */
- return 0;
- }
-
if (debug_threads)
{
/* Dump up to four bytes. */
@@ -5615,62 +5433,18 @@ linux_process_target::write_memory (CORE_ADDR memaddr,
char *p = str;
int dump = len < 4 ? len : 4;
- for (i = 0; i < dump; i++)
+ for (int i = 0; i < dump; i++)
{
sprintf (p, "%02x", myaddr[i]);
p += 2;
}
*p = '\0';
- debug_printf ("Writing %s to 0x%08lx in process %d\n",
- str, (long) memaddr, pid);
- }
-
- /* Fill start and end extra bytes of buffer with existing memory data. */
-
- errno = 0;
- /* Coerce the 3rd arg to a uintptr_t first to avoid potential gcc warning
- about coercing an 8 byte integer to a 4 byte pointer. */
- buffer[0] = ptrace (PTRACE_PEEKTEXT, pid,
- (PTRACE_TYPE_ARG3) (uintptr_t) addr,
- (PTRACE_TYPE_ARG4) 0);
- if (errno)
- return errno;
-
- if (count > 1)
- {
- errno = 0;
- buffer[count - 1]
- = ptrace (PTRACE_PEEKTEXT, pid,
- /* Coerce to a uintptr_t first to avoid potential gcc warning
- about coercing an 8 byte integer to a 4 byte pointer. */
- (PTRACE_TYPE_ARG3) (uintptr_t) (addr + (count - 1)
- * sizeof (PTRACE_XFER_TYPE)),
- (PTRACE_TYPE_ARG4) 0);
- if (errno)
- return errno;
- }
-
- /* Copy data to be written over corresponding part of buffer. */
-
- memcpy ((char *) buffer + (memaddr & (sizeof (PTRACE_XFER_TYPE) - 1)),
- myaddr, len);
-
- /* Write the entire buffer. */
-
- for (i = 0; i < count; i++, addr += sizeof (PTRACE_XFER_TYPE))
- {
- errno = 0;
- ptrace (PTRACE_POKETEXT, pid,
- /* Coerce to a uintptr_t first to avoid potential gcc warning
- about coercing an 8 byte integer to a 4 byte pointer. */
- (PTRACE_TYPE_ARG3) (uintptr_t) addr,
- (PTRACE_TYPE_ARG4) buffer[i]);
- if (errno)
- return errno;
+ threads_debug_printf ("Writing %s to 0x%08lx in process %d",
+ str, (long) memaddr, current_process ()->pid);
}
- return 0;
+ return proc_xfer_memory (memaddr, nullptr, myaddr, len);
}
void
@@ -5967,10 +5741,9 @@ linux_process_target::qxfer_siginfo (const char *annex,
pid = lwpid_of (current_thread);
- if (debug_threads)
- debug_printf ("%s siginfo for lwp %d.\n",
- readbuf != NULL ? "Reading" : "Writing",
- pid);
+ threads_debug_printf ("%s siginfo for lwp %d.",
+ readbuf != NULL ? "Reading" : "Writing",
+ pid);
if (offset >= sizeof (siginfo))
return -1;
@@ -6040,9 +5813,8 @@ linux_process_target::async (bool enable)
{
bool previous = target_is_async_p ();
- if (debug_threads)
- debug_printf ("linux_async (%d), previous=%d\n",
- enable, previous);
+ threads_debug_printf ("async (%d), previous=%d",
+ enable, previous);
if (previous != enable)
{
@@ -6054,21 +5826,16 @@ linux_process_target::async (bool enable)
if (enable)
{
- if (pipe (linux_event_pipe) == -1)
+ if (!linux_event_pipe.open_pipe ())
{
- linux_event_pipe[0] = -1;
- linux_event_pipe[1] = -1;
gdb_sigmask (SIG_UNBLOCK, &mask, NULL);
warning ("creating event pipe failed.");
return previous;
}
- fcntl (linux_event_pipe[0], F_SETFL, O_NONBLOCK);
- fcntl (linux_event_pipe[1], F_SETFL, O_NONBLOCK);
-
/* Register the event loop handler. */
- add_file_handler (linux_event_pipe[0],
+ add_file_handler (linux_event_pipe.event_fd (),
handle_target_event, NULL,
"linux-low");
@@ -6077,12 +5844,9 @@ linux_process_target::async (bool enable)
}
else
{
- delete_file_handler (linux_event_pipe[0]);
+ delete_file_handler (linux_event_pipe.event_fd ());
- close (linux_event_pipe[0]);
- close (linux_event_pipe[1]);
- linux_event_pipe[0] = -1;
- linux_event_pipe[1] = -1;
+ linux_event_pipe.close_pipe ();
}
gdb_sigmask (SIG_UNBLOCK, &mask, NULL);
@@ -6114,7 +5878,7 @@ linux_process_target::supports_multi_process ()
bool
linux_process_target::supports_fork_events ()
{
- return linux_supports_tracefork ();
+ return true;
}
/* Check if vfork events are supported. */
@@ -6122,7 +5886,7 @@ linux_process_target::supports_fork_events ()
bool
linux_process_target::supports_vfork_events ()
{
- return linux_supports_tracefork ();
+ return true;
}
/* Check if exec events are supported. */
@@ -6130,7 +5894,7 @@ linux_process_target::supports_vfork_events ()
bool
linux_process_target::supports_exec_events ()
{
- return linux_supports_traceexec ();
+ return true;
}
/* Target hook for 'handle_new_gdb_connection'. Causes a reset of the
@@ -6329,8 +6093,7 @@ linux_process_target::read_loadmap (const char *annex, CORE_ADDR offset,
bool
linux_process_target::supports_catch_syscall ()
{
- return (low_supports_catch_syscall ()
- && linux_supports_tracesysgood ());
+ return low_supports_catch_syscall ();
}
bool
@@ -6385,25 +6148,6 @@ linux_process_target::unpause_all (bool unfreeze)
unstop_all_lwps (unfreeze, NULL);
}
-int
-linux_process_target::prepare_to_access_memory ()
-{
- /* Neither ptrace nor /proc/PID/mem allow accessing memory through a
- running LWP. */
- if (non_stop)
- target_pause_all (true);
- return 0;
-}
-
-void
-linux_process_target::done_accessing_memory ()
-{
- /* Neither ptrace nor /proc/PID/mem allow accessing memory through a
- running LWP. */
- if (non_stop)
- target_unpause_all (true);
-}
-
/* Extract &phdr and num_phdr in the inferior. Return 0 on success. */
static int
@@ -6900,10 +6644,10 @@ linux_process_target::qxfer_libraries_svr4 (const char *annex,
#ifdef HAVE_LINUX_BTRACE
btrace_target_info *
-linux_process_target::enable_btrace (ptid_t ptid,
+linux_process_target::enable_btrace (thread_info *tp,
const btrace_config *conf)
{
- return linux_enable_btrace (ptid, conf);
+ return linux_enable_btrace (tp->id, conf);
}
/* See to_disable_btrace target method. */
@@ -7129,8 +6873,7 @@ linux_get_pc_32bit (struct regcache *regcache)
uint32_t pc;
collect_register_by_name (regcache, "pc", &pc);
- if (debug_threads)
- debug_printf ("stop pc is 0x%" PRIx32 "\n", pc);
+ threads_debug_printf ("stop pc is 0x%" PRIx32, pc);
return pc;
}
@@ -7154,8 +6897,7 @@ linux_get_pc_64bit (struct regcache *regcache)
uint64_t pc;
collect_register_by_name (regcache, "pc", &pc);
- if (debug_threads)
- debug_printf ("stop pc is 0x%" PRIx64 "\n", pc);
+ threads_debug_printf ("stop pc is 0x%" PRIx64, pc);
return pc;
}
diff --git a/gdbserver/linux-low.h b/gdbserver/linux-low.h
index 6ee72d7bd39..79be31b8f72 100644
--- a/gdbserver/linux-low.h
+++ b/gdbserver/linux-low.h
@@ -127,6 +127,9 @@ struct process_info_private
/* &_r_debug. 0 if not yet determined. -1 if no PT_DYNAMIC in Phdrs. */
CORE_ADDR r_debug;
+
+ /* The /proc/pid/mem file used for reading/writing memory. */
+ int mem_fd;
};
struct lwp_info;
@@ -163,10 +166,6 @@ public:
void store_registers (regcache *regcache, int regno) override;
- int prepare_to_access_memory () override;
-
- void done_accessing_memory () override;
-
int read_memory (CORE_ADDR memaddr, unsigned char *myaddr,
int len) override;
@@ -276,7 +275,7 @@ public:
bool supports_agent () override;
#ifdef HAVE_LINUX_BTRACE
- btrace_target_info *enable_btrace (ptid_t ptid,
+ btrace_target_info *enable_btrace (thread_info *tp,
const btrace_config *conf) override;
int disable_btrace (btrace_target_info *tinfo) override;
@@ -544,6 +543,13 @@ private:
data. */
process_info *add_linux_process (int pid, int attached);
+ /* Same as add_linux_process, but don't open the /proc/PID/mem file
+ yet. */
+ process_info *add_linux_process_no_mem_file (int pid, int attached);
+
+ /* Free resources associated to PROC and remove it. */
+ void remove_linux_process (process_info *proc);
+
/* Add a new thread. */
lwp_info *add_lwp (ptid_t ptid);
diff --git a/gdbserver/linux-s390-low.cc b/gdbserver/linux-s390-low.cc
index c1a8c18f13b..5adc2807057 100644
--- a/gdbserver/linux-s390-low.cc
+++ b/gdbserver/linux-s390-low.cc
@@ -1503,9 +1503,8 @@ add_insns (const unsigned char *start, int len)
{
CORE_ADDR buildaddr = current_insn_ptr;
- if (debug_threads)
- debug_printf ("Adding %d bytes of insn at %s\n",
- len, paddress (buildaddr));
+ threads_debug_printf ("Adding %d bytes of insn at %s",
+ len, paddress (buildaddr));
append_insns (&buildaddr, len, start);
current_insn_ptr = buildaddr;
diff --git a/gdbserver/linux-x86-low.cc b/gdbserver/linux-x86-low.cc
index 171f21c7997..d2b55f6f0d2 100644
--- a/gdbserver/linux-x86-low.cc
+++ b/gdbserver/linux-x86-low.cc
@@ -1628,9 +1628,8 @@ add_insns (unsigned char *start, int len)
{
CORE_ADDR buildaddr = current_insn_ptr;
- if (debug_threads)
- debug_printf ("Adding %d bytes of insn at %s\n",
- len, paddress (buildaddr));
+ threads_debug_printf ("Adding %d bytes of insn at %s",
+ len, paddress (buildaddr));
append_insns (&buildaddr, len, start);
current_insn_ptr = buildaddr;
diff --git a/gdbserver/mem-break.cc b/gdbserver/mem-break.cc
index 87d025c9b5c..72ce8c8a5cb 100644
--- a/gdbserver/mem-break.cc
+++ b/gdbserver/mem-break.cc
@@ -371,10 +371,9 @@ insert_memory_breakpoint (struct raw_breakpoint *bp)
err = read_inferior_memory (bp->pc, buf, bp_size (bp));
if (err != 0)
{
- if (debug_threads)
- debug_printf ("Failed to read shadow memory of"
- " breakpoint at 0x%s (%s).\n",
- paddress (bp->pc), safe_strerror (err));
+ threads_debug_printf ("Failed to read shadow memory of"
+ " breakpoint at 0x%s (%s).",
+ paddress (bp->pc), safe_strerror (err));
}
else
{
@@ -383,11 +382,8 @@ insert_memory_breakpoint (struct raw_breakpoint *bp)
err = the_target->write_memory (bp->pc, bp_opcode (bp),
bp_size (bp));
if (err != 0)
- {
- if (debug_threads)
- debug_printf ("Failed to insert breakpoint at 0x%s (%s).\n",
- paddress (bp->pc), safe_strerror (err));
- }
+ threads_debug_printf ("Failed to insert breakpoint at 0x%s (%s).",
+ paddress (bp->pc), safe_strerror (err));
}
return err != 0 ? -1 : 0;
}
@@ -411,12 +407,10 @@ remove_memory_breakpoint (struct raw_breakpoint *bp)
memcpy (buf, bp->old_data, bp_size (bp));
err = target_write_memory (bp->pc, buf, bp_size (bp));
if (err != 0)
- {
- if (debug_threads)
- debug_printf ("Failed to uninsert raw breakpoint "
- "at 0x%s (%s) while deleting it.\n",
- paddress (bp->pc), safe_strerror (err));
- }
+ threads_debug_printf ("Failed to uninsert raw breakpoint "
+ "at 0x%s (%s) while deleting it.",
+ paddress (bp->pc), safe_strerror (err));
+
return err != 0 ? -1 : 0;
}
@@ -438,9 +432,9 @@ set_raw_breakpoint_at (enum raw_bkpt_type type, CORE_ADDR where, int kind,
{
/* A different kind than previously seen. The previous
breakpoint must be gone then. */
- if (debug_threads)
- debug_printf ("Inconsistent breakpoint kind? Was %d, now %d.\n",
- bp->kind, kind);
+ threads_debug_printf
+ ("Inconsistent breakpoint kind? Was %d, now %d.",
+ bp->kind, kind);
bp->inserted = -1;
bp = NULL;
}
@@ -463,9 +457,8 @@ set_raw_breakpoint_at (enum raw_bkpt_type type, CORE_ADDR where, int kind,
*err = the_target->insert_point (bp->raw_type, bp->pc, bp->kind, bp);
if (*err != 0)
{
- if (debug_threads)
- debug_printf ("Failed to insert breakpoint at 0x%s (%d).\n",
- paddress (where), *err);
+ threads_debug_printf ("Failed to insert breakpoint at 0x%s (%d).",
+ paddress (where), *err);
return NULL;
}
@@ -594,10 +587,10 @@ delete_fast_tracepoint_jump (struct fast_tracepoint_jump *todel)
/* Something went wrong, relink the jump. */
*bp_link = prev_bp_link;
- if (debug_threads)
- debug_printf ("Failed to uninsert fast tracepoint jump "
- "at 0x%s (%s) while deleting it.\n",
- paddress (bp->pc), safe_strerror (ret));
+ threads_debug_printf
+ ("Failed to uninsert fast tracepoint jump "
+ "at 0x%s (%s) while deleting it.",
+ paddress (bp->pc), safe_strerror (ret));
return ret;
}
@@ -657,10 +650,9 @@ set_fast_tracepoint_jump (CORE_ADDR where,
err = read_inferior_memory (where, buf, length);
if (err != 0)
{
- if (debug_threads)
- debug_printf ("Failed to read shadow memory of"
- " fast tracepoint at 0x%s (%s).\n",
- paddress (where), safe_strerror (err));
+ threads_debug_printf ("Failed to read shadow memory of"
+ " fast tracepoint at 0x%s (%s).",
+ paddress (where), safe_strerror (err));
free (jp);
return NULL;
}
@@ -682,9 +674,9 @@ set_fast_tracepoint_jump (CORE_ADDR where,
err = target_write_memory (where, buf, length);
if (err != 0)
{
- if (debug_threads)
- debug_printf ("Failed to insert fast tracepoint jump at 0x%s (%s).\n",
- paddress (where), safe_strerror (err));
+ threads_debug_printf
+ ("Failed to insert fast tracepoint jump at 0x%s (%s).",
+ paddress (where), safe_strerror (err));
/* Unlink it. */
proc->fast_tracepoint_jumps = jp->next;
@@ -707,10 +699,9 @@ uninsert_fast_tracepoint_jumps_at (CORE_ADDR pc)
{
/* This can happen when we remove all breakpoints while handling
a step-over. */
- if (debug_threads)
- debug_printf ("Could not find fast tracepoint jump at 0x%s "
- "in list (uninserting).\n",
- paddress (pc));
+ threads_debug_printf ("Could not find fast tracepoint jump at 0x%s "
+ "in list (uninserting).",
+ paddress (pc));
return;
}
@@ -736,10 +727,9 @@ uninsert_fast_tracepoint_jumps_at (CORE_ADDR pc)
{
jp->inserted = 1;
- if (debug_threads)
- debug_printf ("Failed to uninsert fast tracepoint jump at"
- " 0x%s (%s).\n",
- paddress (pc), safe_strerror (err));
+ threads_debug_printf ("Failed to uninsert fast tracepoint jump at"
+ " 0x%s (%s).",
+ paddress (pc), safe_strerror (err));
}
}
}
@@ -756,10 +746,9 @@ reinsert_fast_tracepoint_jumps_at (CORE_ADDR where)
{
/* This can happen when we remove breakpoints when a tracepoint
hit causes a tracing stop, while handling a step-over. */
- if (debug_threads)
- debug_printf ("Could not find fast tracepoint jump at 0x%s "
- "in list (reinserting).\n",
- paddress (where));
+ threads_debug_printf ("Could not find fast tracepoint jump at 0x%s "
+ "in list (reinserting).",
+ paddress (where));
return;
}
@@ -783,10 +772,9 @@ reinsert_fast_tracepoint_jumps_at (CORE_ADDR where)
{
jp->inserted = 0;
- if (debug_threads)
- debug_printf ("Failed to reinsert fast tracepoint jump at"
- " 0x%s (%s).\n",
- paddress (where), safe_strerror (err));
+ threads_debug_printf ("Failed to reinsert fast tracepoint jump at"
+ " 0x%s (%s).",
+ paddress (where), safe_strerror (err));
}
}
@@ -897,10 +885,9 @@ delete_raw_breakpoint (struct process_info *proc, struct raw_breakpoint *todel)
/* Something went wrong, relink the breakpoint. */
*bp_link = prev_bp_link;
- if (debug_threads)
- debug_printf ("Failed to uninsert raw breakpoint "
- "at 0x%s while deleting it.\n",
- paddress (bp->pc));
+ threads_debug_printf ("Failed to uninsert raw breakpoint "
+ "at 0x%s while deleting it.",
+ paddress (bp->pc));
return ret;
}
}
@@ -1013,13 +1000,19 @@ z_type_supported (char z_type)
failure returns NULL and sets *ERR to either -1 for error, or 1 if
Z_TYPE breakpoints are not supported on this target. */
-static struct gdb_breakpoint *
-set_gdb_breakpoint_1 (char z_type, CORE_ADDR addr, int kind, int *err)
+struct gdb_breakpoint *
+set_gdb_breakpoint (char z_type, CORE_ADDR addr, int kind, int *err)
{
struct gdb_breakpoint *bp;
enum bkpt_type type;
enum raw_bkpt_type raw_type;
+ if (!z_type_supported (z_type))
+ {
+ *err = 1;
+ return nullptr;
+ }
+
/* If we see GDB inserting a second code breakpoint at the same
address, then either: GDB is updating the breakpoint's conditions
or commands; or, the first breakpoint must have disappeared due
@@ -1087,110 +1080,31 @@ set_gdb_breakpoint_1 (char z_type, CORE_ADDR addr, int kind, int *err)
kind, NULL, err);
}
-static int
-check_gdb_bp_preconditions (char z_type, int *err)
-{
- /* As software/memory breakpoints work by poking at memory, we need
- to prepare to access memory. If that operation fails, we need to
- return error. Seeing an error, if this is the first breakpoint
- of that type that GDB tries to insert, GDB would then assume the
- breakpoint type is supported, but it may actually not be. So we
- need to check whether the type is supported at all before
- preparing to access memory. */
- if (!z_type_supported (z_type))
- {
- *err = 1;
- return 0;
- }
-
- return 1;
-}
-
-/* See mem-break.h. This is a wrapper for set_gdb_breakpoint_1 that
- knows to prepare to access memory for Z0 breakpoints. */
-
-struct gdb_breakpoint *
-set_gdb_breakpoint (char z_type, CORE_ADDR addr, int kind, int *err)
-{
- struct gdb_breakpoint *bp;
-
- if (!check_gdb_bp_preconditions (z_type, err))
- return NULL;
-
- /* If inserting a software/memory breakpoint, need to prepare to
- access memory. */
- if (z_type == Z_PACKET_SW_BP)
- {
- if (prepare_to_access_memory () != 0)
- {
- *err = -1;
- return NULL;
- }
- }
-
- bp = set_gdb_breakpoint_1 (z_type, addr, kind, err);
-
- if (z_type == Z_PACKET_SW_BP)
- done_accessing_memory ();
-
- return bp;
-}
-
/* Delete a GDB breakpoint of type Z_TYPE and kind KIND previously
inserted at ADDR with set_gdb_breakpoint_at. Returns 0 on success,
-1 on error, and 1 if Z_TYPE breakpoints are not supported on this
target. */
-static int
-delete_gdb_breakpoint_1 (char z_type, CORE_ADDR addr, int kind)
+int
+delete_gdb_breakpoint (char z_type, CORE_ADDR addr, int kind)
{
- struct gdb_breakpoint *bp;
- int err;
+ if (!z_type_supported (z_type))
+ return 1;
- bp = find_gdb_breakpoint (z_type, addr, kind);
+ gdb_breakpoint *bp = find_gdb_breakpoint (z_type, addr, kind);
if (bp == NULL)
return -1;
/* Before deleting the breakpoint, make sure to free its condition
and command lists. */
clear_breakpoint_conditions_and_commands (bp);
- err = delete_breakpoint ((struct breakpoint *) bp);
+ int err = delete_breakpoint ((struct breakpoint *) bp);
if (err != 0)
return -1;
return 0;
}
-/* See mem-break.h. This is a wrapper for delete_gdb_breakpoint that
- knows to prepare to access memory for Z0 breakpoints. */
-
-int
-delete_gdb_breakpoint (char z_type, CORE_ADDR addr, int kind)
-{
- int ret;
-
- if (!check_gdb_bp_preconditions (z_type, &ret))
- return ret;
-
- /* If inserting a software/memory breakpoint, need to prepare to
- access memory. */
- if (z_type == Z_PACKET_SW_BP)
- {
- int err;
-
- err = prepare_to_access_memory ();
- if (err != 0)
- return -1;
- }
-
- ret = delete_gdb_breakpoint_1 (z_type, addr, kind);
-
- if (z_type == Z_PACKET_SW_BP)
- done_accessing_memory ();
-
- return ret;
-}
-
/* Clear all conditions associated with a breakpoint. */
static void
@@ -1404,10 +1318,9 @@ gdb_no_commands_at_breakpoint_z_type (char z_type, CORE_ADDR addr)
if (bp == NULL)
return 1;
- if (debug_threads)
- debug_printf ("at 0x%s, type Z%c, bp command_list is 0x%s\n",
- paddress (addr), z_type,
- phex_nz ((uintptr_t) bp->command_list, 0));
+ threads_debug_printf ("at 0x%s, type Z%c, bp command_list is 0x%s",
+ paddress (addr), z_type,
+ phex_nz ((uintptr_t) bp->command_list, 0));
return (bp->command_list == NULL);
}
@@ -1521,9 +1434,8 @@ uninsert_raw_breakpoint (struct raw_breakpoint *bp)
{
if (bp->inserted < 0)
{
- if (debug_threads)
- debug_printf ("Breakpoint at %s is marked insert-disabled.\n",
- paddress (bp->pc));
+ threads_debug_printf ("Breakpoint at %s is marked insert-disabled.",
+ paddress (bp->pc));
}
else if (bp->inserted > 0)
{
@@ -1536,9 +1448,8 @@ uninsert_raw_breakpoint (struct raw_breakpoint *bp)
{
bp->inserted = 1;
- if (debug_threads)
- debug_printf ("Failed to uninsert raw breakpoint at 0x%s.\n",
- paddress (bp->pc));
+ threads_debug_printf ("Failed to uninsert raw breakpoint at 0x%s.",
+ paddress (bp->pc));
}
}
}
@@ -1565,10 +1476,9 @@ uninsert_breakpoints_at (CORE_ADDR pc)
{
/* This can happen when we remove all breakpoints while handling
a step-over. */
- if (debug_threads)
- debug_printf ("Could not find breakpoint at 0x%s "
- "in list (uninserting).\n",
- paddress (pc));
+ threads_debug_printf ("Could not find breakpoint at 0x%s "
+ "in list (uninserting).",
+ paddress (pc));
}
}
@@ -1622,9 +1532,9 @@ reinsert_raw_breakpoint (struct raw_breakpoint *bp)
err = the_target->insert_point (bp->raw_type, bp->pc, bp->kind, bp);
if (err == 0)
bp->inserted = 1;
- else if (debug_threads)
- debug_printf ("Failed to reinsert breakpoint at 0x%s (%d).\n",
- paddress (bp->pc), err);
+ else
+ threads_debug_printf ("Failed to reinsert breakpoint at 0x%s (%d).",
+ paddress (bp->pc), err);
}
void
@@ -1648,10 +1558,9 @@ reinsert_breakpoints_at (CORE_ADDR pc)
{
/* This can happen when we remove all breakpoints while handling
a step-over. */
- if (debug_threads)
- debug_printf ("Could not find raw breakpoint at 0x%s "
- "in list (reinserting).\n",
- paddress (pc));
+ threads_debug_printf ("Could not find raw breakpoint at 0x%s "
+ "in list (reinserting).",
+ paddress (pc));
}
}
diff --git a/gdbserver/netbsd-aarch64-low.cc b/gdbserver/netbsd-aarch64-low.cc
index 202bf1cdac6..b371e599232 100644
--- a/gdbserver/netbsd-aarch64-low.cc
+++ b/gdbserver/netbsd-aarch64-low.cc
@@ -96,7 +96,7 @@ void
netbsd_aarch64_target::low_arch_setup ()
{
target_desc *tdesc
- = aarch64_create_target_description (0, false);
+ = aarch64_create_target_description (0, false, false, false);
static const char *expedite_regs_aarch64[] = { "x29", "sp", "pc", NULL };
init_target_desc (tdesc, expedite_regs_aarch64);
diff --git a/gdbserver/notif.cc b/gdbserver/notif.cc
index 9176a7111d0..3be733f76f9 100644
--- a/gdbserver/notif.cc
+++ b/gdbserver/notif.cc
@@ -102,9 +102,8 @@ handle_notif_ack (char *own_buf, int packet_len)
struct notif_event *head = np->queue.front ();
np->queue.pop_front ();
- if (remote_debug)
- debug_printf ("%s: acking %d\n", np->ack_name,
- (int) np->queue.size ());
+ remote_debug_printf ("%s: acking %d", np->ack_name,
+ (int) np->queue.size ());
delete head;
}
@@ -122,9 +121,8 @@ notif_event_enque (struct notif_server *notif,
{
notif->queue.push_back (event);
- if (remote_debug)
- debug_printf ("pending events: %s %d\n", notif->notif_name,
- (int) notif->queue.size ());
+ remote_debug_printf ("pending events: %s %d", notif->notif_name,
+ (int) notif->queue.size ());
}
diff --git a/gdbserver/remote-utils.cc b/gdbserver/remote-utils.cc
index 0faf5a91f2b..db9b2a66f3c 100644
--- a/gdbserver/remote-utils.cc
+++ b/gdbserver/remote-utils.cc
@@ -144,8 +144,7 @@ handle_accept_event (int err, gdb_client_data client_data)
struct sockaddr_storage sockaddr;
socklen_t len = sizeof (sockaddr);
- if (debug_threads)
- debug_printf ("handling possible accept event\n");
+ threads_debug_printf ("handling possible accept event");
remote_desc = accept (listen_desc, (struct sockaddr *) &sockaddr, &len);
if (remote_desc == -1)
@@ -671,22 +670,15 @@ putpkt_binary_1 (char *buf, int cnt, int is_notif)
if (cs.noack_mode || is_notif)
{
/* Don't expect an ack then. */
- if (remote_debug)
- {
- if (is_notif)
- debug_printf ("putpkt (\"%s\"); [notif]\n", buf2);
- else
- debug_printf ("putpkt (\"%s\"); [noack mode]\n", buf2);
- debug_flush ();
- }
+ if (is_notif)
+ remote_debug_printf ("putpkt (\"%s\"); [notif]", buf2);
+ else
+ remote_debug_printf ("putpkt (\"%s\"); [noack mode]", buf2);
+
break;
}
- if (remote_debug)
- {
- debug_printf ("putpkt (\"%s\"); [looking for ack]\n", buf2);
- debug_flush ();
- }
+ remote_debug_printf ("putpkt (\"%s\"); [looking for ack]", buf2);
cc = readchar ();
@@ -696,11 +688,7 @@ putpkt_binary_1 (char *buf, int cnt, int is_notif)
return -1;
}
- if (remote_debug)
- {
- debug_printf ("[received '%c' (0x%x)]\n", cc, cc);
- debug_flush ();
- }
+ remote_debug_printf ("[received '%c' (0x%x)]", cc, cc);
/* Check for an input interrupt while we're here. */
if (cc == '\003' && current_thread != NULL)
@@ -869,8 +857,7 @@ readchar (void)
{
if (readchar_bufcnt == 0)
{
- if (remote_debug)
- debug_printf ("readchar: Got EOF\n");
+ remote_debug_printf ("readchar: Got EOF");
}
else
perror ("readchar");
@@ -951,11 +938,8 @@ getpkt (char *buf)
if (c == '$')
break;
- if (remote_debug)
- {
- debug_printf ("[getpkt: discarding char '%c']\n", c);
- debug_flush ();
- }
+
+ remote_debug_printf ("[getpkt: discarding char '%c']", c);
if (c < 0)
return -1;
@@ -998,29 +982,15 @@ getpkt (char *buf)
if (!cs.noack_mode)
{
- if (remote_debug)
- {
- debug_printf ("getpkt (\"%s\"); [sending ack] \n", buf);
- debug_flush ();
- }
+ remote_debug_printf ("getpkt (\"%s\"); [sending ack]", buf);
if (write_prim ("+", 1) != 1)
return -1;
- if (remote_debug)
- {
- debug_printf ("[sent ack]\n");
- debug_flush ();
- }
+ remote_debug_printf ("[sent ack]");
}
else
- {
- if (remote_debug)
- {
- debug_printf ("getpkt (\"%s\"); [no ack sent] \n", buf);
- debug_flush ();
- }
- }
+ remote_debug_printf ("getpkt (\"%s\"); [no ack sent]", buf);
/* The readchar above may have already read a '\003' out of the socket
and moved it to the local buffer. For example, when GDB sends
@@ -1084,9 +1054,8 @@ void
prepare_resume_reply (char *buf, ptid_t ptid, const target_waitstatus &status)
{
client_state &cs = get_client_state ();
- if (debug_threads)
- debug_printf ("Writing resume reply for %s:%d\n",
- target_pid_to_str (ptid).c_str (), status.kind ());
+ threads_debug_printf ("Writing resume reply for %s:%d",
+ target_pid_to_str (ptid).c_str (), status.kind ());
switch (status.kind ())
{
@@ -1101,6 +1070,7 @@ prepare_resume_reply (char *buf, ptid_t ptid, const target_waitstatus &status)
{
const char **regp;
struct regcache *regcache;
+ char *buf_start = buf;
if ((status.kind () == TARGET_WAITKIND_FORKED && cs.report_fork_events)
|| (status.kind () == TARGET_WAITKIND_VFORKED
@@ -1171,11 +1141,11 @@ prepare_resume_reply (char *buf, ptid_t ptid, const target_waitstatus &status)
An 'S' stop packet always looks like 'Sxx', so all we do
here is convert the buffer from a T packet to an S packet
and the avoid adding any extra content by breaking out. */
- gdb_assert (*buf == 'T');
- gdb_assert (isxdigit (*(buf + 1)));
- gdb_assert (isxdigit (*(buf + 2)));
- *buf = 'S';
- *(buf + 3) = '\0';
+ gdb_assert (buf_start[0] == 'T');
+ gdb_assert (isxdigit (buf_start[1]));
+ gdb_assert (isxdigit (buf_start[2]));
+ buf_start[0] = 'S';
+ buf_start[3] = '\0';
break;
}
diff --git a/gdbserver/server.cc b/gdbserver/server.cc
index 07f119dc6a1..f9c02a9c6da 100644
--- a/gdbserver/server.cc
+++ b/gdbserver/server.cc
@@ -65,10 +65,6 @@
break; \
}
-/* String containing the current directory (what getwd would return). */
-
-char *current_directory;
-
/* The environment to pass to the inferior when creating it. */
static gdb_environ our_environ;
@@ -94,31 +90,31 @@ bool non_stop;
static struct {
/* Set the PROGRAM_PATH. Here we adjust the path of the provided
binary if needed. */
- void set (gdb::unique_xmalloc_ptr<char> &&path)
+ void set (const char *path)
{
- m_path = std::move (path);
+ m_path = path;
/* Make sure we're using the absolute path of the inferior when
creating it. */
- if (!contains_dir_separator (m_path.get ()))
+ if (!contains_dir_separator (m_path.c_str ()))
{
int reg_file_errno;
/* Check if the file is in our CWD. If it is, then we prefix
its name with CURRENT_DIRECTORY. Otherwise, we leave the
name as-is because we'll try searching for it in $PATH. */
- if (is_regular_file (m_path.get (), &reg_file_errno))
- m_path = gdb_abspath (m_path.get ());
+ if (is_regular_file (m_path.c_str (), &reg_file_errno))
+ m_path = gdb_abspath (m_path.c_str ());
}
}
/* Return the PROGRAM_PATH. */
- char *get ()
- { return m_path.get (); }
+ const char *get ()
+ { return m_path.empty () ? nullptr : m_path.c_str (); }
private:
/* The program name, adjusted if needed. */
- gdb::unique_xmalloc_ptr<char> m_path;
+ std::string m_path;
} program_path;
static std::vector<char *> program_args;
static std::string wrapper_argv;
@@ -409,7 +405,7 @@ handle_btrace_enable_bts (struct thread_info *thread)
error (_("Btrace already enabled."));
current_btrace_conf.format = BTRACE_FORMAT_BTS;
- thread->btrace = target_enable_btrace (thread->id, &current_btrace_conf);
+ thread->btrace = target_enable_btrace (thread, &current_btrace_conf);
}
/* Handle btrace enabling in Intel Processor Trace format. */
@@ -421,7 +417,7 @@ handle_btrace_enable_pt (struct thread_info *thread)
error (_("Btrace already enabled."));
current_btrace_conf.format = BTRACE_FORMAT_PT;
- thread->btrace = target_enable_btrace (thread->id, &current_btrace_conf);
+ thread->btrace = target_enable_btrace (thread, &current_btrace_conf);
}
/* Handle btrace disabling. */
@@ -736,13 +732,9 @@ handle_general_set (char *own_buf)
std::string final_var = hex2str (p);
std::string var_name, var_value;
- if (remote_debug)
- {
- debug_printf (_("[QEnvironmentHexEncoded received '%s']\n"), p);
- debug_printf (_("[Environment variable to be set: '%s']\n"),
- final_var.c_str ());
- debug_flush ();
- }
+ remote_debug_printf ("[QEnvironmentHexEncoded received '%s']", p);
+ remote_debug_printf ("[Environment variable to be set: '%s']",
+ final_var.c_str ());
size_t pos = final_var.find ('=');
if (pos == std::string::npos)
@@ -767,13 +759,9 @@ handle_general_set (char *own_buf)
const char *p = own_buf + sizeof ("QEnvironmentUnset:") - 1;
std::string varname = hex2str (p);
- if (remote_debug)
- {
- debug_printf (_("[QEnvironmentUnset received '%s']\n"), p);
- debug_printf (_("[Environment variable to be unset: '%s']\n"),
- varname.c_str ());
- debug_flush ();
- }
+ remote_debug_printf ("[QEnvironmentUnset received '%s']", p);
+ remote_debug_printf ("[Environment variable to be unset: '%s']",
+ varname.c_str ());
our_environ.unset (varname.c_str ());
@@ -783,11 +771,7 @@ handle_general_set (char *own_buf)
if (strcmp (own_buf, "QStartNoAckMode") == 0)
{
- if (remote_debug)
- {
- debug_printf ("[noack mode enabled]\n");
- debug_flush ();
- }
+ remote_debug_printf ("[noack mode enabled]");
cs.noack_mode = 1;
write_ok (own_buf);
@@ -824,8 +808,7 @@ handle_general_set (char *own_buf)
non_stop = (req != 0);
- if (remote_debug)
- debug_printf ("[%s mode enabled]\n", req_str);
+ remote_debug_printf ("[%s mode enabled]", req_str);
write_ok (own_buf);
return;
@@ -839,12 +822,9 @@ handle_general_set (char *own_buf)
unpack_varlen_hex (packet, &setting);
cs.disable_randomization = setting;
- if (remote_debug)
- {
- debug_printf (cs.disable_randomization
- ? "[address space randomization disabled]\n"
- : "[address space randomization enabled]\n");
- }
+ remote_debug_printf (cs.disable_randomization
+ ? "[address space randomization disabled]"
+ : "[address space randomization enabled]");
write_ok (own_buf);
return;
@@ -872,8 +852,7 @@ handle_general_set (char *own_buf)
/* Update the flag. */
use_agent = req;
- if (remote_debug)
- debug_printf ("[%s agent]\n", req ? "Enable" : "Disable");
+ remote_debug_printf ("[%s agent]", req ? "Enable" : "Disable");
write_ok (own_buf);
return;
}
@@ -905,12 +884,8 @@ handle_general_set (char *own_buf)
cs.report_thread_events = (req == TRIBOOL_TRUE);
- if (remote_debug)
- {
- const char *req_str = cs.report_thread_events ? "enabled" : "disabled";
-
- debug_printf ("[thread events are now %s]\n", req_str);
- }
+ remote_debug_printf ("[thread events are now %s]\n",
+ cs.report_thread_events ? "enabled" : "disabled");
write_ok (own_buf);
return;
@@ -933,9 +908,8 @@ handle_general_set (char *own_buf)
return;
}
- if (remote_debug)
- debug_printf (_("[Inferior will %s started with shell]"),
- startup_with_shell ? "be" : "not be");
+ remote_debug_printf ("[Inferior will %s started with shell]",
+ startup_with_shell ? "be" : "not be");
write_ok (own_buf);
return;
@@ -949,9 +923,8 @@ handle_general_set (char *own_buf)
{
std::string path = hex2str (p);
- if (remote_debug)
- debug_printf (_("[Set the inferior's current directory to %s]\n"),
- path.c_str ());
+ remote_debug_printf ("[Set the inferior's current directory to %s]",
+ path.c_str ());
set_inferior_cwd (std::move (path));
}
@@ -961,9 +934,8 @@ handle_general_set (char *own_buf)
previously set cwd for the inferior. */
set_inferior_cwd ("");
- if (remote_debug)
- debug_printf (_("\
-[Unset the inferior's current directory; will use gdbserver's cwd]\n"));
+ remote_debug_printf ("[Unset the inferior's current directory; will "
+ "use gdbserver's cwd]");
}
write_ok (own_buf);
@@ -1095,19 +1067,12 @@ gdb_read_memory (CORE_ADDR memaddr, unsigned char *myaddr, int len)
/* (assume no half-trace half-real blocks for now) */
}
- res = prepare_to_access_memory ();
- if (res == 0)
- {
- if (set_desired_thread ())
- res = read_inferior_memory (memaddr, myaddr, len);
- else
- res = 1;
- done_accessing_memory ();
-
- return res == 0 ? len : -1;
- }
+ if (set_desired_process ())
+ res = read_inferior_memory (memaddr, myaddr, len);
else
- return -1;
+ res = 1;
+
+ return res == 0 ? len : -1;
}
/* Write trace frame or inferior memory. Actually, writing to trace
@@ -1123,15 +1088,10 @@ gdb_write_memory (CORE_ADDR memaddr, const unsigned char *myaddr, int len)
{
int ret;
- ret = prepare_to_access_memory ();
- if (ret == 0)
- {
- if (set_desired_thread ())
- ret = target_write_memory (memaddr, myaddr, len);
- else
- ret = EIO;
- done_accessing_memory ();
- }
+ if (set_desired_process ())
+ ret = target_write_memory (memaddr, myaddr, len);
+ else
+ ret = EIO;
return ret;
}
}
@@ -1228,8 +1188,7 @@ handle_detach (char *own_buf)
pass signals down without informing GDB. */
if (!non_stop)
{
- if (debug_threads)
- debug_printf ("Forcing non-stop mode\n");
+ threads_debug_printf ("Forcing non-stop mode");
non_stop = true;
the_target->start_non_stop (true);
@@ -1380,12 +1339,12 @@ handle_monitor_command (char *mon, char *own_buf)
{
if (strcmp (mon, "set debug 1") == 0)
{
- debug_threads = 1;
+ debug_threads = true;
monitor_output ("Debug output enabled.\n");
}
else if (strcmp (mon, "set debug 0") == 0)
{
- debug_threads = 0;
+ debug_threads = false;
monitor_output ("Debug output disabled.\n");
}
else if (strcmp (mon, "set debug-hw-points 1") == 0)
@@ -1400,12 +1359,12 @@ handle_monitor_command (char *mon, char *own_buf)
}
else if (strcmp (mon, "set remote-debug 1") == 0)
{
- remote_debug = 1;
+ remote_debug = true;
monitor_output ("Protocol debug output enabled.\n");
}
else if (strcmp (mon, "set remote-debug 0") == 0)
{
- remote_debug = 0;
+ remote_debug = false;
monitor_output ("Protocol debug output disabled.\n");
}
else if (strcmp (mon, "set event-loop-debug 1") == 0)
@@ -1720,47 +1679,28 @@ handle_qxfer_threads_worker (thread_info *thread, struct buffer *buffer)
static bool
handle_qxfer_threads_proper (struct buffer *buffer)
{
- client_state &cs = get_client_state ();
-
- scoped_restore_current_thread restore_thread;
- scoped_restore save_current_general_thread
- = make_scoped_restore (&cs.general_thread);
-
buffer_grow_str (buffer, "<threads>\n");
- process_info *error_proc = find_process ([&] (process_info *process)
- {
- /* The target may need to access memory and registers (e.g. via
- libthread_db) to fetch thread properties. Prepare for memory
- access here, so that we potentially pause threads just once
- for all accesses. Note that even if someday we stop needing
- to pause threads to access memory, we will need to be able to
- access registers, or other ptrace accesses like
- PTRACE_GET_THREAD_AREA. */
-
- /* Need to switch to each process in turn, because
- prepare_to_access_memory prepares for an access in the
- current process pointed to by general_thread. */
- switch_to_process (process);
- cs.general_thread = current_thread->id;
-
- int res = prepare_to_access_memory ();
- if (res == 0)
- {
- for_each_thread (process->pid, [&] (thread_info *thread)
- {
- handle_qxfer_threads_worker (thread, buffer);
- });
+ /* The target may need to access memory and registers (e.g. via
+ libthread_db) to fetch thread properties. Even if don't need to
+ stop threads to access memory, we still will need to be able to
+ access registers, and other ptrace accesses like
+ PTRACE_GET_THREAD_AREA that require a paused thread. Pause all
+ threads here, so that we pause each thread at most once for all
+ accesses. */
+ if (non_stop)
+ target_pause_all (true);
- done_accessing_memory ();
- return false;
- }
- else
- return true;
+ for_each_thread ([&] (thread_info *thread)
+ {
+ handle_qxfer_threads_worker (thread, buffer);
});
+ if (non_stop)
+ target_unpause_all (true);
+
buffer_grow_str0 (buffer, "</threads>\n");
- return error_proc == nullptr;
+ return true;
}
/* Handle qXfer:threads:read. */
@@ -3136,7 +3076,7 @@ handle_v_run (char *own_buf)
}
}
else
- program_path.set (gdb::unique_xmalloc_ptr<char> (new_program_name));
+ program_path.set (new_program_name);
/* Free the old argv and install the new one. */
free_vector_argv (program_args);
@@ -3336,10 +3276,10 @@ queue_stop_reply_callback (thread_info *thread)
{
if (target_thread_stopped (thread))
{
- if (debug_threads)
- debug_printf ("Reporting thread %s as already stopped with %s\n",
- target_pid_to_str (thread->id).c_str (),
- thread->last_status.to_string ().c_str ());
+ threads_debug_printf
+ ("Reporting thread %s as already stopped with %s",
+ target_pid_to_str (thread->id).c_str (),
+ thread->last_status.to_string ().c_str ());
gdb_assert (thread->last_status.kind () != TARGET_WAITKIND_IGNORE);
@@ -3814,7 +3754,7 @@ captured_main (int argc, char *argv[])
*next_arg = NULL;
}
else if (strcmp (*next_arg, "--debug") == 0)
- debug_threads = 1;
+ debug_threads = true;
else if (startswith (*next_arg, "--debug-format="))
{
std::string error_msg
@@ -3828,7 +3768,7 @@ captured_main (int argc, char *argv[])
}
}
else if (strcmp (*next_arg, "--remote-debug") == 0)
- remote_debug = 1;
+ remote_debug = true;
else if (strcmp (*next_arg, "--event-loop-debug") == 0)
debug_event_loop = debug_event_loop_kind::ALL;
else if (startswith (*next_arg, "--debug-file="))
@@ -3993,7 +3933,7 @@ captured_main (int argc, char *argv[])
int i, n;
n = argc - (next_arg - argv);
- program_path.set (make_unique_xstrdup (next_arg[0]));
+ program_path.set (next_arg[0]);
for (i = 1; i < n; i++)
program_args.push_back (xstrdup (next_arg[i]));
@@ -4183,16 +4123,14 @@ process_point_options (struct gdb_breakpoint *bp, const char **packet)
if (*dataptr == 'X')
{
/* Conditional expression. */
- if (debug_threads)
- debug_printf ("Found breakpoint condition.\n");
+ threads_debug_printf ("Found breakpoint condition.");
if (!add_breakpoint_condition (bp, &dataptr))
dataptr = strchrnul (dataptr, ';');
}
else if (startswith (dataptr, "cmds:"))
{
dataptr += strlen ("cmds:");
- if (debug_threads)
- debug_printf ("Found breakpoint commands %s.\n", dataptr);
+ threads_debug_printf ("Found breakpoint commands %s.", dataptr);
persist = (*dataptr == '1');
dataptr += 2;
if (add_breakpoint_commands (bp, &dataptr, persist))
@@ -4576,8 +4514,7 @@ process_serial_event (void)
void
handle_serial_event (int err, gdb_client_data client_data)
{
- if (debug_threads)
- debug_printf ("handling possible serial event\n");
+ threads_debug_printf ("handling possible serial event");
/* Really handle it. */
if (process_serial_event () < 0)
@@ -4610,8 +4547,7 @@ void
handle_target_event (int err, gdb_client_data client_data)
{
client_state &cs = get_client_state ();
- if (debug_threads)
- debug_printf ("handling possible target event\n");
+ threads_debug_printf ("handling possible target event");
cs.last_ptid = mywait (minus_one_ptid, &cs.last_status,
TARGET_WNOHANG, 1);
@@ -4663,11 +4599,10 @@ handle_target_event (int err, gdb_client_data client_data)
inferior, as if it wasn't being traced. */
enum gdb_signal signal;
- if (debug_threads)
- debug_printf ("GDB not connected; forwarding event %d for"
- " [%s]\n",
- (int) cs.last_status.kind (),
- target_pid_to_str (cs.last_ptid).c_str ());
+ threads_debug_printf ("GDB not connected; forwarding event %d for"
+ " [%s]",
+ (int) cs.last_status.kind (),
+ target_pid_to_str (cs.last_ptid).c_str ());
if (cs.last_status.kind () == TARGET_WAITKIND_STOPPED)
signal = cs.last_status.sig ();
diff --git a/gdbserver/target.cc b/gdbserver/target.cc
index 5165957aed7..adcfe6e7bcc 100644
--- a/gdbserver/target.cc
+++ b/gdbserver/target.cc
@@ -29,103 +29,67 @@
process_stratum_target *the_target;
-int
-set_desired_thread ()
-{
- client_state &cs = get_client_state ();
- thread_info *found = find_thread_ptid (cs.general_thread);
-
- switch_to_thread (found);
- return (current_thread != NULL);
-}
-
-/* The thread that was current before prepare_to_access_memory was
- called. done_accessing_memory uses this to restore the previous
- selected thread. */
-static ptid_t prev_general_thread;
-
/* See target.h. */
-int
-prepare_to_access_memory (void)
+bool
+set_desired_thread ()
{
client_state &cs = get_client_state ();
+ thread_info *found = find_thread_ptid (cs.general_thread);
- /* The first thread found. */
- struct thread_info *first = NULL;
- /* The first stopped thread found. */
- struct thread_info *stopped = NULL;
- /* The current general thread, if found. */
- struct thread_info *current = NULL;
-
- /* Save the general thread value, since prepare_to_access_memory could change
- it. */
- prev_general_thread = cs.general_thread;
-
- int res = the_target->prepare_to_access_memory ();
- if (res != 0)
- return res;
-
- for_each_thread (prev_general_thread.pid (), [&] (thread_info *thread)
+ if (found == nullptr)
{
- if (mythread_alive (thread->id))
+ process_info *proc = find_process_pid (cs.general_thread.pid ());
+ if (proc == nullptr)
{
- if (stopped == NULL && the_target->supports_thread_stopped ()
- && target_thread_stopped (thread))
- stopped = thread;
-
- if (first == NULL)
- first = thread;
-
- if (current == NULL && prev_general_thread == thread->id)
- current = thread;
+ threads_debug_printf
+ ("did not find thread nor process for general_thread %s",
+ cs.general_thread.to_string ().c_str ());
}
- });
-
- /* The thread we end up choosing. */
- struct thread_info *thread;
-
- /* Prefer a stopped thread. If none is found, try the current
- thread. Otherwise, take the first thread in the process. If
- none is found, undo the effects of
- target->prepare_to_access_memory() and return error. */
- if (stopped != NULL)
- thread = stopped;
- else if (current != NULL)
- thread = current;
- else if (first != NULL)
- thread = first;
- else
- {
- done_accessing_memory ();
- return 1;
+ else
+ {
+ threads_debug_printf
+ ("did not find thread for general_thread %s, but found process",
+ cs.general_thread.to_string ().c_str ());
+ }
+ switch_to_process (proc);
}
+ else
+ switch_to_thread (found);
- switch_to_thread (thread);
- cs.general_thread = ptid_of (thread);
-
- return 0;
+ return (current_thread != NULL);
}
/* See target.h. */
-void
-done_accessing_memory (void)
+bool
+set_desired_process ()
{
client_state &cs = get_client_state ();
- the_target->done_accessing_memory ();
+ process_info *proc = find_process_pid (cs.general_thread.pid ());
+ if (proc == nullptr)
+ {
+ threads_debug_printf
+ ("did not find process for general_thread %s",
+ cs.general_thread.to_string ().c_str ());
+ }
+ switch_to_process (proc);
- /* Restore the previous selected thread. */
- cs.general_thread = prev_general_thread;
- switch_to_thread (the_target, cs.general_thread);
+ return proc != nullptr;
}
int
read_inferior_memory (CORE_ADDR memaddr, unsigned char *myaddr, int len)
{
- int res;
- res = the_target->read_memory (memaddr, myaddr, len);
+ /* At the time of writing, GDB only sends write packets with LEN==0,
+ not read packets (see comment in target_write_memory), but it
+ doesn't hurt to prevent problems if it ever does, or we're
+ connected to some client other than GDB that does. */
+ if (len == 0)
+ return 0;
+
+ int res = the_target->read_memory (memaddr, myaddr, len);
check_mem_read (memaddr, myaddr, len);
return res;
}
@@ -152,6 +116,13 @@ int
target_write_memory (CORE_ADDR memaddr, const unsigned char *myaddr,
ssize_t len)
{
+ /* GDB may send X packets with LEN==0, for probing packet support.
+ If we let such a request go through, then buffer.data() below may
+ return NULL, which may confuse target implementations. Handle it
+ here to avoid lower levels having to care about this case. */
+ if (len == 0)
+ return 0;
+
/* Make a copy of the data because check_mem_write may need to
update it. */
gdb::byte_vector buffer (myaddr, myaddr + len);
@@ -360,18 +331,6 @@ process_stratum_target::post_create_inferior ()
/* Nop. */
}
-int
-process_stratum_target::prepare_to_access_memory ()
-{
- return 0;
-}
-
-void
-process_stratum_target::done_accessing_memory ()
-{
- /* Nop. */
-}
-
void
process_stratum_target::look_up_symbols ()
{
@@ -736,7 +695,8 @@ process_stratum_target::supports_agent ()
}
btrace_target_info *
-process_stratum_target::enable_btrace (ptid_t ptid, const btrace_config *conf)
+process_stratum_target::enable_btrace (thread_info *tp,
+ const btrace_config *conf)
{
error (_("Target does not support branch tracing."));
}
diff --git a/gdbserver/target.h b/gdbserver/target.h
index f58ed9d08ff..6c536a30778 100644
--- a/gdbserver/target.h
+++ b/gdbserver/target.h
@@ -141,21 +141,6 @@ public:
If REGNO is -1, store all registers; otherwise, store at least REGNO. */
virtual void store_registers (regcache *regcache, int regno) = 0;
- /* Prepare to read or write memory from the inferior process.
- Targets use this to do what is necessary to get the state of the
- inferior such that it is possible to access memory.
-
- This should generally only be called from client facing routines,
- such as gdb_read_memory/gdb_write_memory, or the GDB breakpoint
- insertion routine.
-
- Like `read_memory' and `write_memory' below, returns 0 on success
- and errno on failure. */
- virtual int prepare_to_access_memory ();
-
- /* Undo the effects of prepare_to_access_memory. */
- virtual void done_accessing_memory ();
-
/* Read memory from the inferior process. This should generally be
called through read_inferior_memory, which handles breakpoint shadowing.
@@ -403,9 +388,9 @@ public:
/* Return true if target supports debugging agent. */
virtual bool supports_agent ();
- /* Enable branch tracing for PTID based on CONF and allocate a branch trace
+ /* Enable branch tracing for TP based on CONF and allocate a branch trace
target information struct for reading and for disabling branch trace. */
- virtual btrace_target_info *enable_btrace (ptid_t ptid,
+ virtual btrace_target_info *enable_btrace (thread_info *tp,
const btrace_config *conf);
/* Disable branch tracing.
@@ -635,9 +620,9 @@ int kill_inferior (process_info *proc);
the_target->supports_agent ()
static inline struct btrace_target_info *
-target_enable_btrace (ptid_t ptid, const struct btrace_config *conf)
+target_enable_btrace (thread_info *tp, const struct btrace_config *conf)
{
- return the_target->enable_btrace (ptid, conf);
+ return the_target->enable_btrace (tp, conf);
}
static inline int
@@ -691,12 +676,6 @@ target_read_btrace_conf (struct btrace_target_info *tinfo,
ptid_t mywait (ptid_t ptid, struct target_waitstatus *ourstatus,
target_wait_flags options, int connected_wait);
-/* Prepare to read or write memory from the inferior process. See the
- corresponding process_stratum_target methods for more details. */
-
-int prepare_to_access_memory (void);
-void done_accessing_memory (void);
-
#define target_core_of_thread(ptid) \
the_target->core_of_thread (ptid)
@@ -720,7 +699,20 @@ target_thread_pending_child (thread_info *thread)
int read_inferior_memory (CORE_ADDR memaddr, unsigned char *myaddr, int len);
-int set_desired_thread ();
+/* Set GDBserver's current thread to the thread the client requested
+ via Hg. Also switches the current process to the requested
+ process. If the requested thread is not found in the thread list,
+ then the current thread is set to NULL. Likewise, if the requested
+ process is not found in the process list, then the current process
+ is set to NULL. Returns true if the requested thread was found,
+ false otherwise. */
+
+bool set_desired_thread ();
+
+/* Set GDBserver's current process to the process the client requested
+ via Hg. The current thread is set to NULL. */
+
+bool set_desired_process ();
std::string target_pid_to_str (ptid_t);
diff --git a/gdbserver/thread-db.cc b/gdbserver/thread-db.cc
index 62ce23ce037..6e0e2228a5f 100644
--- a/gdbserver/thread-db.cc
+++ b/gdbserver/thread-db.cc
@@ -184,9 +184,8 @@ find_one_thread (ptid_t ptid)
error ("Cannot get thread info for LWP %d: %s",
lwpid, thread_db_err_str (err));
- if (debug_threads)
- debug_printf ("Found thread %ld (LWP %d)\n",
- (unsigned long) ti.ti_tid, ti.ti_lid);
+ threads_debug_printf ("Found thread %ld (LWP %d)",
+ (unsigned long) ti.ti_tid, ti.ti_lid);
if (lwpid != ti.ti_lid)
{
@@ -218,9 +217,8 @@ attach_thread (const td_thrhandle_t *th_p, td_thrinfo_t *ti_p)
struct lwp_info *lwp;
int err;
- if (debug_threads)
- debug_printf ("Attaching to thread %ld (LWP %d)\n",
- (unsigned long) ti_p->ti_tid, ti_p->ti_lid);
+ threads_debug_printf ("Attaching to thread %ld (LWP %d)",
+ (unsigned long) ti_p->ti_tid, ti_p->ti_lid);
err = the_linux_target->attach_lwp (ptid);
if (err != 0)
{
@@ -283,10 +281,9 @@ find_new_threads_callback (const td_thrhandle_t *th_p, void *data)
thread that previously exited and was joined. (glibc marks
terminated and joined threads with kernel thread ID -1. See
glibc PR17707. */
- if (debug_threads)
- debug_printf ("thread_db: skipping exited and "
- "joined thread (0x%lx)\n",
- (unsigned long) ti.ti_tid);
+ threads_debug_printf ("thread_db: skipping exited and "
+ "joined thread (0x%lx)",
+ (unsigned long) ti.ti_tid);
return 0;
}
@@ -333,9 +330,8 @@ thread_db_find_new_threads (void)
TD_THR_ANY_STATE,
TD_THR_LOWEST_PRIORITY,
TD_SIGNO_MASK, TD_THR_ANY_USER_FLAGS);
- if (debug_threads)
- debug_printf ("Found %d threads in iteration %d.\n",
- new_thread_count, iteration);
+ threads_debug_printf ("Found %d threads in iteration %d.",
+ new_thread_count, iteration);
if (new_thread_count != 0)
{
@@ -492,8 +488,7 @@ thread_db_load_search (void)
err = tdb->td_ta_new_p (&tdb->proc_handle, &tdb->thread_agent);
if (err != TD_OK)
{
- if (debug_threads)
- debug_printf ("td_ta_new(): %s\n", thread_db_err_str (err));
+ threads_debug_printf ("td_ta_new(): %s", thread_db_err_str (err));
free (tdb);
proc->priv->thread_db = NULL;
return 0;
@@ -535,8 +530,7 @@ try_thread_db_load_1 (void *handle)
{ \
if ((a) == NULL) \
{ \
- if (debug_threads) \
- debug_printf ("dlsym: %s\n", dlerror ()); \
+ threads_debug_printf ("dlsym: %s", dlerror ()); \
if (required) \
{ \
free (tdb); \
@@ -556,8 +550,7 @@ try_thread_db_load_1 (void *handle)
err = tdb->td_ta_new_p (&tdb->proc_handle, &tdb->thread_agent);
if (err != TD_OK)
{
- if (debug_threads)
- debug_printf ("td_ta_new(): %s\n", thread_db_err_str (err));
+ threads_debug_printf ("td_ta_new(): %s", thread_db_err_str (err));
free (tdb);
proc->priv->thread_db = NULL;
return 0;
@@ -601,14 +594,12 @@ try_thread_db_load (const char *library)
{
void *handle;
- if (debug_threads)
- debug_printf ("Trying host libthread_db library: %s.\n",
- library);
+ threads_debug_printf ("Trying host libthread_db library: %s.",
+ library);
handle = dlopen (library, RTLD_NOW);
if (handle == NULL)
{
- if (debug_threads)
- debug_printf ("dlopen failed: %s.\n", dlerror ());
+ threads_debug_printf ("dlopen failed: %s.", dlerror ());
return 0;
}
@@ -623,7 +614,7 @@ try_thread_db_load (const char *library)
const char *const libpath = dladdr_to_soname (td_init);
if (libpath != NULL)
- debug_printf ("Host %s resolved to: %s.\n", library, libpath);
+ threads_debug_printf ("Host %s resolved to: %s.", library, libpath);
}
}
#endif
@@ -722,8 +713,7 @@ thread_db_load_search (void)
}
}
- if (debug_threads)
- debug_printf ("thread_db_load_search returning %d\n", rc);
+ threads_debug_printf ("thread_db_load_search returning %d", rc);
return rc;
}
diff --git a/gdbserver/tracepoint.cc b/gdbserver/tracepoint.cc
index 8ccdf491b99..18b2b0b3d77 100644
--- a/gdbserver/tracepoint.cc
+++ b/gdbserver/tracepoint.cc
@@ -77,28 +77,21 @@ trace_vdebug (const char *fmt, ...)
va_end (ap);
}
-#define trace_debug_1(level, fmt, args...) \
+#define trace_debug(fmt, args...) \
do { \
- if (level <= debug_threads) \
+ if (debug_threads) \
trace_vdebug ((fmt), ##args); \
} while (0)
#else
-#define trace_debug_1(level, fmt, args...) \
+#define trace_debug(fmt, args...) \
do { \
- if (level <= debug_threads) \
- { \
- debug_printf ((fmt), ##args); \
- debug_printf ("\n"); \
- } \
+ threads_debug_printf ((fmt), ##args); \
} while (0)
#endif
-#define trace_debug(FMT, args...) \
- trace_debug_1 (1, FMT, ##args)
-
/* Prefix exported symbols, for good citizenship. All the symbols
that need exporting are defined in this module. Note that all
these symbols must be tagged with IP_AGENT_EXPORT_*. */
@@ -327,8 +320,7 @@ tracepoint_look_up_symbols (void)
if (look_up_one_symbol (symbol_list[i].name, addrp, 1) == 0)
{
- if (debug_threads)
- debug_printf ("symbol `%s' not found\n", symbol_list[i].name);
+ threads_debug_printf ("symbol `%s' not found", symbol_list[i].name);
return;
}
}
@@ -2792,21 +2784,10 @@ cmd_qtenable_disable (char *own_buf, int enable)
if (tp->type == fast_tracepoint || tp->type == static_tracepoint)
{
- int ret;
int offset = offsetof (struct tracepoint, enabled);
CORE_ADDR obj_addr = tp->obj_addr_on_target + offset;
- ret = prepare_to_access_memory ();
- if (ret)
- {
- trace_debug ("Failed to temporarily stop inferior threads");
- write_enn (own_buf);
- return;
- }
-
- ret = write_inferior_int8 (obj_addr, enable);
- done_accessing_memory ();
-
+ int ret = write_inferior_int8 (obj_addr, enable);
if (ret)
{
trace_debug ("Cannot write enabled flag into "
@@ -4522,15 +4503,14 @@ handle_tracepoint_bkpts (struct thread_info *tinfo, CORE_ADDR stop_pc)
ipa_expr_eval_result,
paddress (ipa_error_tracepoint));
- if (debug_threads)
- {
- if (ipa_trace_buffer_is_full)
- trace_debug ("lib stopped due to full buffer.");
- if (ipa_stopping_tracepoint)
- trace_debug ("lib stopped due to tpoint");
- if (ipa_error_tracepoint)
- trace_debug ("lib stopped due to error");
- }
+ if (ipa_trace_buffer_is_full)
+ trace_debug ("lib stopped due to full buffer.");
+
+ if (ipa_stopping_tracepoint)
+ trace_debug ("lib stopped due to tpoint");
+
+ if (ipa_error_tracepoint)
+ trace_debug ("lib stopped due to error");
if (ipa_stopping_tracepoint != 0)
{
diff --git a/gdbserver/win32-i386-low.cc b/gdbserver/win32-i386-low.cc
index 2b18c2cb1a3..856040801e8 100644
--- a/gdbserver/win32-i386-low.cc
+++ b/gdbserver/win32-i386-low.cc
@@ -85,7 +85,7 @@ win32_get_current_dr (int dr)
case DR: \
return th->wow64_context.Dr ## DR
- if (wow64_process)
+ if (windows_process.wow64_process)
{
switch (dr)
{
@@ -245,7 +245,7 @@ i386_get_thread_context (windows_thread_info *th)
again:
#ifdef __x86_64__
- if (wow64_process)
+ if (windows_process.wow64_process)
th->wow64_context.ContextFlags = (CONTEXT_FULL
| CONTEXT_FLOATING_POINT
| CONTEXT_DEBUG_REGISTERS
@@ -259,7 +259,7 @@ i386_get_thread_context (windows_thread_info *th)
BOOL ret;
#ifdef __x86_64__
- if (wow64_process)
+ if (windows_process.wow64_process)
ret = Wow64GetThreadContext (th->h, &th->wow64_context);
else
#endif
@@ -288,7 +288,7 @@ i386_prepare_to_resume (windows_thread_info *th)
win32_require_context (th);
#ifdef __x86_64__
- if (wow64_process)
+ if (windows_process.wow64_process)
{
th->wow64_context.Dr0 = dr->dr_mirror[0];
th->wow64_context.Dr1 = dr->dr_mirror[1];
@@ -324,7 +324,7 @@ static void
i386_single_step (windows_thread_info *th)
{
#ifdef __x86_64__
- if (wow64_process)
+ if (windows_process.wow64_process)
th->wow64_context.EFlags |= FLAG_TRACE_BIT;
else
#endif
@@ -466,7 +466,7 @@ i386_fetch_inferior_register (struct regcache *regcache,
{
const int *mappings;
#ifdef __x86_64__
- if (!wow64_process)
+ if (!windows_process.wow64_process)
mappings = amd64_mappings;
else
#endif
@@ -474,7 +474,7 @@ i386_fetch_inferior_register (struct regcache *regcache,
char *context_offset;
#ifdef __x86_64__
- if (wow64_process)
+ if (windows_process.wow64_process)
context_offset = (char *) &th->wow64_context + mappings[r];
else
#endif
@@ -502,7 +502,7 @@ i386_store_inferior_register (struct regcache *regcache,
{
const int *mappings;
#ifdef __x86_64__
- if (!wow64_process)
+ if (!windows_process.wow64_process)
mappings = amd64_mappings;
else
#endif
@@ -510,7 +510,7 @@ i386_store_inferior_register (struct regcache *regcache,
char *context_offset;
#ifdef __x86_64__
- if (wow64_process)
+ if (windows_process.wow64_process)
context_offset = (char *) &th->wow64_context + mappings[r];
else
#endif
@@ -550,7 +550,7 @@ i386_win32_num_regs (void)
{
int num_regs;
#ifdef __x86_64__
- if (!wow64_process)
+ if (!windows_process.wow64_process)
num_regs = sizeof (amd64_mappings) / sizeof (amd64_mappings[0]);
else
#endif
diff --git a/gdbserver/win32-low.cc b/gdbserver/win32-low.cc
index e19bc2bd6e8..192ea465e69 100644
--- a/gdbserver/win32-low.cc
+++ b/gdbserver/win32-low.cc
@@ -38,6 +38,9 @@
using namespace windows_nat;
+/* See win32-low.h. */
+windows_process_info windows_process;
+
#ifndef USE_WIN32API
#include <sys/cygwin.h>
#endif
@@ -111,7 +114,7 @@ static void
win32_get_thread_context (windows_thread_info *th)
{
#ifdef __x86_64__
- if (wow64_process)
+ if (windows_process.wow64_process)
memset (&th->wow64_context, 0, sizeof (WOW64_CONTEXT));
else
#endif
@@ -125,7 +128,7 @@ static void
win32_set_thread_context (windows_thread_info *th)
{
#ifdef __x86_64__
- if (wow64_process)
+ if (windows_process.wow64_process)
Wow64SetThreadContext (th->h, &th->wow64_context);
else
#endif
@@ -148,7 +151,7 @@ win32_require_context (windows_thread_info *th)
{
DWORD context_flags;
#ifdef __x86_64__
- if (wow64_process)
+ if (windows_process.wow64_process)
context_flags = th->wow64_context.ContextFlags;
else
#endif
@@ -163,7 +166,8 @@ win32_require_context (windows_thread_info *th)
/* See nat/windows-nat.h. */
windows_thread_info *
-windows_nat::thread_rec (ptid_t ptid, thread_disposition_type disposition)
+windows_nat::windows_process_info::thread_rec
+ (ptid_t ptid, thread_disposition_type disposition)
{
thread_info *thread = find_thread_ptid (ptid);
if (thread == NULL)
@@ -182,14 +186,14 @@ child_add_thread (DWORD pid, DWORD tid, HANDLE h, void *tlb)
windows_thread_info *th;
ptid_t ptid = ptid_t (pid, tid, 0);
- if ((th = thread_rec (ptid, DONT_INVALIDATE_CONTEXT)))
+ if ((th = windows_process.thread_rec (ptid, DONT_INVALIDATE_CONTEXT)))
return th;
CORE_ADDR base = (CORE_ADDR) (uintptr_t) tlb;
#ifdef __x86_64__
/* For WOW64 processes, this is actually the pointer to the 64bit TIB,
and the 32bit TIB is exactly 2 pages after it. */
- if (wow64_process)
+ if (windows_process.wow64_process)
base += 2 * 4096; /* page size = 4096 */
#endif
th = new windows_thread_info (tid, h, base);
@@ -295,15 +299,15 @@ child_xfer_memory (CORE_ADDR memaddr, char *our, int len,
if (write)
{
- success = WriteProcessMemory (current_process_handle, (LPVOID) addr,
+ success = WriteProcessMemory (windows_process.handle, (LPVOID) addr,
(LPCVOID) our, len, &done);
if (!success)
lasterror = GetLastError ();
- FlushInstructionCache (current_process_handle, (LPCVOID) addr, len);
+ FlushInstructionCache (windows_process.handle, (LPCVOID) addr, len);
}
else
{
- success = ReadProcessMemory (current_process_handle, (LPCVOID) addr,
+ success = ReadProcessMemory (windows_process.handle, (LPCVOID) addr,
(LPVOID) our, len, &done);
if (!success)
lasterror = GetLastError ();
@@ -331,17 +335,17 @@ do_initial_child_stuff (HANDLE proch, DWORD pid, int attached)
{
struct process_info *proc;
- last_sig = GDB_SIGNAL_0;
-
- current_process_handle = proch;
- current_process_id = pid;
- main_thread_id = 0;
+ windows_process.last_sig = GDB_SIGNAL_0;
+ windows_process.handle = proch;
+ windows_process.id = pid;
+ windows_process.main_thread_id = 0;
soft_interrupt_requested = 0;
faked_breakpoint = 0;
open_process_used = true;
- memset (&current_event, 0, sizeof (current_event));
+ memset (&windows_process.current_event, 0,
+ sizeof (windows_process.current_event));
#ifdef __x86_64__
BOOL wow64;
@@ -351,19 +355,20 @@ do_initial_child_stuff (HANDLE proch, DWORD pid, int attached)
error ("Check if WOW64 process failed (error %d): %s\n",
(int) err, strwinerror (err));
}
- wow64_process = wow64;
+ windows_process.wow64_process = wow64;
- if (wow64_process
+ if (windows_process.wow64_process
&& (Wow64GetThreadContext == nullptr
|| Wow64SetThreadContext == nullptr))
error ("WOW64 debugging is not supported on this system.\n");
- ignore_first_breakpoint = !attached && wow64_process;
+ windows_process.ignore_first_breakpoint
+ = !attached && windows_process.wow64_process;
#endif
proc = add_process (pid, attached);
#ifdef __x86_64__
- if (wow64_process)
+ if (windows_process.wow64_process)
proc->tdesc = wow64_win32_tdesc;
else
#endif
@@ -417,7 +422,7 @@ do_initial_child_stuff (HANDLE proch, DWORD pid, int attached)
Rather than try to work around this sort of issue, it is much
simpler to just ignore DLL load/unload events during the startup
phase, and then process them all in one batch now. */
- windows_add_all_dlls ();
+ windows_process.add_all_dlls ();
child_initialization_done = 1;
}
@@ -437,7 +442,7 @@ continue_one_thread (thread_info *thread, int thread_id)
{
DWORD *context_flags;
#ifdef __x86_64__
- if (wow64_process)
+ if (windows_process.wow64_process)
context_flags = &th->wow64_context.ContextFlags;
else
#endif
@@ -456,8 +461,8 @@ continue_one_thread (thread_info *thread, int thread_id)
static BOOL
child_continue (DWORD continue_status, int thread_id)
{
- desired_stop_thread_id = thread_id;
- if (matching_pending_stop (debug_threads))
+ windows_process.desired_stop_thread_id = thread_id;
+ if (windows_process.matching_pending_stop (debug_threads))
return TRUE;
/* The inferior will only continue after the ContinueDebugEvent
@@ -476,8 +481,9 @@ static void
child_fetch_inferior_registers (struct regcache *regcache, int r)
{
int regno;
- windows_thread_info *th = thread_rec (current_thread_ptid (),
- INVALIDATE_CONTEXT);
+ windows_thread_info *th
+ = windows_process.thread_rec (current_thread_ptid (),
+ INVALIDATE_CONTEXT);
if (r == -1 || r > NUM_REGS)
child_fetch_inferior_registers (regcache, NUM_REGS);
else
@@ -491,8 +497,9 @@ static void
child_store_inferior_registers (struct regcache *regcache, int r)
{
int regno;
- windows_thread_info *th = thread_rec (current_thread_ptid (),
- INVALIDATE_CONTEXT);
+ windows_thread_info *th
+ = windows_process.thread_rec (current_thread_ptid (),
+ INVALIDATE_CONTEXT);
if (r == -1 || r == 0 || r > NUM_REGS)
child_store_inferior_registers (regcache, NUM_REGS);
else
@@ -671,12 +678,12 @@ win32_process_target::create_inferior (const char *program,
/* Wait till we are at 1st instruction in program, return new pid
(assuming success). */
- cs.last_ptid = wait (ptid_t (current_process_id), &cs.last_status, 0);
+ cs.last_ptid = wait (ptid_t (windows_process.id), &cs.last_status, 0);
/* Necessary for handle_v_kill. */
- signal_pid = current_process_id;
+ signal_pid = windows_process.id;
- return current_process_id;
+ return windows_process.id;
}
/* Attach to a running process.
@@ -712,7 +719,8 @@ win32_process_target::attach (unsigned long pid)
/* See nat/windows-nat.h. */
int
-windows_nat::handle_output_debug_string (struct target_waitstatus *ourstatus)
+windows_nat::windows_process_info::handle_output_debug_string
+ (struct target_waitstatus *ourstatus)
{
#define READ_BUFFER_LEN 1024
CORE_ADDR addr;
@@ -762,12 +770,12 @@ win32_clear_inferiors (void)
{
if (open_process_used)
{
- CloseHandle (current_process_handle);
+ CloseHandle (windows_process.handle);
open_process_used = false;
}
for_each_thread (delete_thread_info);
- siginfo_er.ExceptionCode = 0;
+ windows_process.siginfo_er.ExceptionCode = 0;
clear_inferiors ();
}
@@ -776,17 +784,19 @@ win32_clear_inferiors (void)
int
win32_process_target::kill (process_info *process)
{
- TerminateProcess (current_process_handle, 0);
+ TerminateProcess (windows_process.handle, 0);
for (;;)
{
if (!child_continue (DBG_CONTINUE, -1))
break;
- if (!wait_for_debug_event (&current_event, INFINITE))
+ if (!wait_for_debug_event (&windows_process.current_event, INFINITE))
break;
- if (current_event.dwDebugEventCode == EXIT_PROCESS_DEBUG_EVENT)
+ if (windows_process.current_event.dwDebugEventCode
+ == EXIT_PROCESS_DEBUG_EVENT)
break;
- else if (current_event.dwDebugEventCode == OUTPUT_DEBUG_STRING_EVENT)
- handle_output_debug_string (nullptr);
+ else if (windows_process.current_event.dwDebugEventCode
+ == OUTPUT_DEBUG_STRING_EVENT)
+ windows_process.handle_output_debug_string (nullptr);
}
win32_clear_inferiors ();
@@ -806,7 +816,7 @@ win32_process_target::detach (process_info *process)
resume.sig = 0;
this->resume (&resume, 1);
- if (!DebugActiveProcessStop (current_process_id))
+ if (!DebugActiveProcessStop (windows_process.id))
return -1;
DebugSetProcessKillOnExit (FALSE);
@@ -866,7 +876,7 @@ win32_process_target::resume (thread_resume *resume_info, size_t n)
else
/* Yes, we're ignoring resume_info[0].thread. It'd be tricky to make
the Windows resume code do the right thing for thread switching. */
- tid = current_event.dwThreadId;
+ tid = windows_process.current_event.dwThreadId;
if (resume_info[0].thread != minus_one_ptid)
{
@@ -881,30 +891,31 @@ win32_process_target::resume (thread_resume *resume_info, size_t n)
if (sig != GDB_SIGNAL_0)
{
- if (current_event.dwDebugEventCode != EXCEPTION_DEBUG_EVENT)
+ if (windows_process.current_event.dwDebugEventCode
+ != EXCEPTION_DEBUG_EVENT)
{
OUTMSG (("Cannot continue with signal %s here.\n",
gdb_signal_to_string (sig)));
}
- else if (sig == last_sig)
+ else if (sig == windows_process.last_sig)
continue_status = DBG_EXCEPTION_NOT_HANDLED;
else
OUTMSG (("Can only continue with received signal %s.\n",
- gdb_signal_to_string (last_sig)));
+ gdb_signal_to_string (windows_process.last_sig)));
}
- last_sig = GDB_SIGNAL_0;
+ windows_process.last_sig = GDB_SIGNAL_0;
/* Get context for the currently selected thread. */
- ptid = debug_event_ptid (&current_event);
- th = thread_rec (ptid, DONT_INVALIDATE_CONTEXT);
+ ptid = debug_event_ptid (&windows_process.current_event);
+ th = windows_process.thread_rec (ptid, DONT_INVALIDATE_CONTEXT);
if (th)
{
win32_prepare_to_resume (th);
DWORD *context_flags;
#ifdef __x86_64__
- if (wow64_process)
+ if (windows_process.wow64_process)
context_flags = &th->wow64_context.ContextFlags;
else
#endif
@@ -938,7 +949,8 @@ win32_process_target::resume (thread_resume *resume_info, size_t n)
/* See nat/windows-nat.h. */
void
-windows_nat::handle_load_dll (const char *name, LPVOID base)
+windows_nat::windows_process_info::handle_load_dll (const char *name,
+ LPVOID base)
{
CORE_ADDR load_addr = (CORE_ADDR) (uintptr_t) base;
@@ -992,7 +1004,7 @@ windows_nat::handle_load_dll (const char *name, LPVOID base)
/* See nat/windows-nat.h. */
void
-windows_nat::handle_unload_dll ()
+windows_nat::windows_process_info::handle_unload_dll ()
{
CORE_ADDR load_addr =
(CORE_ADDR) (uintptr_t) current_event.u.UnloadDll.lpBaseOfDll;
@@ -1019,10 +1031,11 @@ fake_breakpoint_event (void)
faked_breakpoint = 1;
- memset (&current_event, 0, sizeof (current_event));
- current_event.dwThreadId = main_thread_id;
- current_event.dwDebugEventCode = EXCEPTION_DEBUG_EVENT;
- current_event.u.Exception.ExceptionRecord.ExceptionCode
+ memset (&windows_process.current_event, 0,
+ sizeof (windows_process.current_event));
+ windows_process.current_event.dwThreadId = windows_process.main_thread_id;
+ windows_process.current_event.dwDebugEventCode = EXCEPTION_DEBUG_EVENT;
+ windows_process.current_event.u.Exception.ExceptionRecord.ExceptionCode
= EXCEPTION_BREAKPOINT;
for_each_thread (suspend_one_thread);
@@ -1031,15 +1044,8 @@ fake_breakpoint_event (void)
/* See nat/windows-nat.h. */
bool
-windows_nat::handle_ms_vc_exception (const EXCEPTION_RECORD *rec)
-{
- return false;
-}
-
-/* See nat/windows-nat.h. */
-
-bool
-windows_nat::handle_access_violation (const EXCEPTION_RECORD *rec)
+windows_nat::windows_process_info::handle_access_violation
+ (const EXCEPTION_RECORD *rec)
{
return false;
}
@@ -1054,14 +1060,15 @@ maybe_adjust_pc ()
struct regcache *regcache = get_thread_regcache (current_thread, 1);
child_fetch_inferior_registers (regcache, -1);
- windows_thread_info *th = thread_rec (current_thread_ptid (),
- DONT_INVALIDATE_CONTEXT);
+ windows_thread_info *th
+ = windows_process.thread_rec (current_thread_ptid (),
+ DONT_INVALIDATE_CONTEXT);
th->stopped_at_software_breakpoint = false;
- if (current_event.dwDebugEventCode == EXCEPTION_DEBUG_EVENT
- && ((current_event.u.Exception.ExceptionRecord.ExceptionCode
+ if (windows_process.current_event.dwDebugEventCode == EXCEPTION_DEBUG_EVENT
+ && ((windows_process.current_event.u.Exception.ExceptionRecord.ExceptionCode
== EXCEPTION_BREAKPOINT)
- || (current_event.u.Exception.ExceptionRecord.ExceptionCode
+ || (windows_process.current_event.u.Exception.ExceptionRecord.ExceptionCode
== STATUS_WX86_BREAKPOINT))
&& child_initialization_done)
{
@@ -1080,13 +1087,15 @@ get_child_debug_event (DWORD *continue_status,
{
ptid_t ptid;
- last_sig = GDB_SIGNAL_0;
+ windows_process.last_sig = GDB_SIGNAL_0;
ourstatus->set_spurious ();
*continue_status = DBG_CONTINUE;
/* Check if GDB sent us an interrupt request. */
check_remote_input_interrupt_request ();
+ DEBUG_EVENT *current_event = &windows_process.current_event;
+
if (soft_interrupt_requested)
{
soft_interrupt_requested = 0;
@@ -1096,12 +1105,13 @@ get_child_debug_event (DWORD *continue_status,
attaching = 0;
{
- gdb::optional<pending_stop> stop = fetch_pending_stop (debug_threads);
+ gdb::optional<pending_stop> stop
+ = windows_process.fetch_pending_stop (debug_threads);
if (stop.has_value ())
{
*ourstatus = stop->status;
- current_event = stop->event;
- ptid = debug_event_ptid (&current_event);
+ windows_process.current_event = stop->event;
+ ptid = debug_event_ptid (&windows_process.current_event);
switch_to_thread (find_thread_ptid (ptid));
return 1;
}
@@ -1109,7 +1119,7 @@ get_child_debug_event (DWORD *continue_status,
/* Keep the wait time low enough for comfortable remote
interruption, but high enough so gdbserver doesn't become a
bottleneck. */
- if (!wait_for_debug_event (&current_event, 250))
+ if (!wait_for_debug_event (&windows_process.current_event, 250))
{
DWORD e = GetLastError();
@@ -1129,28 +1139,28 @@ get_child_debug_event (DWORD *continue_status,
gotevent:
- switch (current_event.dwDebugEventCode)
+ switch (current_event->dwDebugEventCode)
{
case CREATE_THREAD_DEBUG_EVENT:
OUTMSG2 (("gdbserver: kernel event CREATE_THREAD_DEBUG_EVENT "
"for pid=%u tid=%x)\n",
- (unsigned) current_event.dwProcessId,
- (unsigned) current_event.dwThreadId));
+ (unsigned) current_event->dwProcessId,
+ (unsigned) current_event->dwThreadId));
/* Record the existence of this thread. */
- child_add_thread (current_event.dwProcessId,
- current_event.dwThreadId,
- current_event.u.CreateThread.hThread,
- current_event.u.CreateThread.lpThreadLocalBase);
+ child_add_thread (current_event->dwProcessId,
+ current_event->dwThreadId,
+ current_event->u.CreateThread.hThread,
+ current_event->u.CreateThread.lpThreadLocalBase);
break;
case EXIT_THREAD_DEBUG_EVENT:
OUTMSG2 (("gdbserver: kernel event EXIT_THREAD_DEBUG_EVENT "
"for pid=%u tid=%x\n",
- (unsigned) current_event.dwProcessId,
- (unsigned) current_event.dwThreadId));
- child_delete_thread (current_event.dwProcessId,
- current_event.dwThreadId);
+ (unsigned) current_event->dwProcessId,
+ (unsigned) current_event->dwThreadId));
+ child_delete_thread (current_event->dwProcessId,
+ current_event->dwThreadId);
switch_to_thread (get_first_thread ());
return 1;
@@ -1158,33 +1168,33 @@ get_child_debug_event (DWORD *continue_status,
case CREATE_PROCESS_DEBUG_EVENT:
OUTMSG2 (("gdbserver: kernel event CREATE_PROCESS_DEBUG_EVENT "
"for pid=%u tid=%x\n",
- (unsigned) current_event.dwProcessId,
- (unsigned) current_event.dwThreadId));
- CloseHandle (current_event.u.CreateProcessInfo.hFile);
+ (unsigned) current_event->dwProcessId,
+ (unsigned) current_event->dwThreadId));
+ CloseHandle (current_event->u.CreateProcessInfo.hFile);
if (open_process_used)
{
- CloseHandle (current_process_handle);
+ CloseHandle (windows_process.handle);
open_process_used = false;
}
- current_process_handle = current_event.u.CreateProcessInfo.hProcess;
- main_thread_id = current_event.dwThreadId;
+ windows_process.handle = current_event->u.CreateProcessInfo.hProcess;
+ windows_process.main_thread_id = current_event->dwThreadId;
/* Add the main thread. */
- child_add_thread (current_event.dwProcessId,
- main_thread_id,
- current_event.u.CreateProcessInfo.hThread,
- current_event.u.CreateProcessInfo.lpThreadLocalBase);
+ child_add_thread (current_event->dwProcessId,
+ windows_process.main_thread_id,
+ current_event->u.CreateProcessInfo.hThread,
+ current_event->u.CreateProcessInfo.lpThreadLocalBase);
break;
case EXIT_PROCESS_DEBUG_EVENT:
OUTMSG2 (("gdbserver: kernel event EXIT_PROCESS_DEBUG_EVENT "
"for pid=%u tid=%x\n",
- (unsigned) current_event.dwProcessId,
- (unsigned) current_event.dwThreadId));
+ (unsigned) current_event->dwProcessId,
+ (unsigned) current_event->dwThreadId));
{
- DWORD exit_status = current_event.u.ExitProcess.dwExitCode;
+ DWORD exit_status = current_event->u.ExitProcess.dwExitCode;
/* If the exit status looks like a fatal exception, but we
don't recognize the exception's code, make the original
exit status value available, to avoid losing information. */
@@ -1195,18 +1205,18 @@ get_child_debug_event (DWORD *continue_status,
else
ourstatus->set_signalled (gdb_signal_from_host (exit_signal));
}
- child_continue (DBG_CONTINUE, desired_stop_thread_id);
+ child_continue (DBG_CONTINUE, windows_process.desired_stop_thread_id);
break;
case LOAD_DLL_DEBUG_EVENT:
OUTMSG2 (("gdbserver: kernel event LOAD_DLL_DEBUG_EVENT "
"for pid=%u tid=%x\n",
- (unsigned) current_event.dwProcessId,
- (unsigned) current_event.dwThreadId));
- CloseHandle (current_event.u.LoadDll.hFile);
+ (unsigned) current_event->dwProcessId,
+ (unsigned) current_event->dwThreadId));
+ CloseHandle (current_event->u.LoadDll.hFile);
if (! child_initialization_done)
break;
- dll_loaded_event ();
+ windows_process.dll_loaded_event ();
ourstatus->set_loaded ();
break;
@@ -1214,20 +1224,20 @@ get_child_debug_event (DWORD *continue_status,
case UNLOAD_DLL_DEBUG_EVENT:
OUTMSG2 (("gdbserver: kernel event UNLOAD_DLL_DEBUG_EVENT "
"for pid=%u tid=%x\n",
- (unsigned) current_event.dwProcessId,
- (unsigned) current_event.dwThreadId));
+ (unsigned) current_event->dwProcessId,
+ (unsigned) current_event->dwThreadId));
if (! child_initialization_done)
break;
- handle_unload_dll ();
+ windows_process.handle_unload_dll ();
ourstatus->set_loaded ();
break;
case EXCEPTION_DEBUG_EVENT:
OUTMSG2 (("gdbserver: kernel event EXCEPTION_DEBUG_EVENT "
"for pid=%u tid=%x\n",
- (unsigned) current_event.dwProcessId,
- (unsigned) current_event.dwThreadId));
- if (handle_exception (ourstatus, debug_threads)
+ (unsigned) current_event->dwProcessId,
+ (unsigned) current_event->dwThreadId));
+ if (windows_process.handle_exception (ourstatus, debug_threads)
== HANDLE_EXCEPTION_UNHANDLED)
*continue_status = DBG_EXCEPTION_NOT_HANDLED;
break;
@@ -1236,31 +1246,33 @@ get_child_debug_event (DWORD *continue_status,
/* A message from the kernel (or Cygwin). */
OUTMSG2 (("gdbserver: kernel event OUTPUT_DEBUG_STRING_EVENT "
"for pid=%u tid=%x\n",
- (unsigned) current_event.dwProcessId,
- (unsigned) current_event.dwThreadId));
- handle_output_debug_string (nullptr);
+ (unsigned) current_event->dwProcessId,
+ (unsigned) current_event->dwThreadId));
+ windows_process.handle_output_debug_string (nullptr);
break;
default:
OUTMSG2 (("gdbserver: kernel event unknown "
"for pid=%u tid=%x code=%x\n",
- (unsigned) current_event.dwProcessId,
- (unsigned) current_event.dwThreadId,
- (unsigned) current_event.dwDebugEventCode));
+ (unsigned) current_event->dwProcessId,
+ (unsigned) current_event->dwThreadId,
+ (unsigned) current_event->dwDebugEventCode));
break;
}
- ptid = debug_event_ptid (&current_event);
+ ptid = debug_event_ptid (&windows_process.current_event);
- if (desired_stop_thread_id != -1 && desired_stop_thread_id != ptid.lwp ())
+ if (windows_process.desired_stop_thread_id != -1
+ && windows_process.desired_stop_thread_id != ptid.lwp ())
{
/* Pending stop. See the comment by the definition of
"pending_stops" for details on why this is needed. */
OUTMSG2 (("get_windows_debug_event - "
"unexpected stop in 0x%lx (expecting 0x%x)\n",
- ptid.lwp (), desired_stop_thread_id));
+ ptid.lwp (), windows_process.desired_stop_thread_id));
maybe_adjust_pc ();
- pending_stops.push_back ({(DWORD) ptid.lwp (), *ourstatus, current_event});
+ windows_process.pending_stops.push_back
+ ({(DWORD) ptid.lwp (), *ourstatus, *current_event});
ourstatus->set_spurious ();
}
else
@@ -1284,7 +1296,7 @@ win32_process_target::wait (ptid_t ptid, target_waitstatus *ourstatus,
fails). Report it now. */
*ourstatus = cached_status;
cached_status.set_ignore ();
- return debug_event_ptid (&current_event);
+ return debug_event_ptid (&windows_process.current_event);
}
while (1)
@@ -1299,7 +1311,7 @@ win32_process_target::wait (ptid_t ptid, target_waitstatus *ourstatus,
OUTMSG2 (("Child exited with retcode = %x\n",
ourstatus->exit_status ()));
win32_clear_inferiors ();
- return ptid_t (current_event.dwProcessId);
+ return ptid_t (windows_process.current_event.dwProcessId);
case TARGET_WAITKIND_STOPPED:
case TARGET_WAITKIND_SIGNALLED:
case TARGET_WAITKIND_LOADED:
@@ -1307,7 +1319,7 @@ win32_process_target::wait (ptid_t ptid, target_waitstatus *ourstatus,
OUTMSG2 (("Child Stopped with signal = %d \n",
ourstatus->sig ()));
maybe_adjust_pc ();
- return debug_event_ptid (&current_event);
+ return debug_event_ptid (&windows_process.current_event);
}
default:
OUTMSG (("Ignoring unknown internal event, %d\n",
@@ -1315,7 +1327,8 @@ win32_process_target::wait (ptid_t ptid, target_waitstatus *ourstatus,
/* fall-through */
case TARGET_WAITKIND_SPURIOUS:
/* do nothing, just continue */
- child_continue (continue_status, desired_stop_thread_id);
+ child_continue (continue_status,
+ windows_process.desired_stop_thread_id);
break;
}
}
@@ -1362,7 +1375,7 @@ win32_process_target::write_memory (CORE_ADDR memaddr,
void
win32_process_target::request_interrupt ()
{
- if (GenerateConsoleCtrlEvent (CTRL_BREAK_EVENT, current_process_id))
+ if (GenerateConsoleCtrlEvent (CTRL_BREAK_EVENT, windows_process.id))
return;
/* GenerateConsoleCtrlEvent can fail if process id being debugged is
@@ -1370,7 +1383,7 @@ win32_process_target::request_interrupt ()
Fallback to XP/Vista 'DebugBreakProcess', which generates a
breakpoint exception in the interior process. */
- if (DebugBreakProcess (current_process_handle))
+ if (DebugBreakProcess (windows_process.handle))
return;
/* Last resort, suspend all threads manually. */
@@ -1397,30 +1410,33 @@ win32_process_target::qxfer_siginfo (const char *annex,
unsigned const char *writebuf,
CORE_ADDR offset, int len)
{
- if (siginfo_er.ExceptionCode == 0)
+ if (windows_process.siginfo_er.ExceptionCode == 0)
return -1;
if (readbuf == nullptr)
return -1;
- char *buf = (char *) &siginfo_er;
- size_t bufsize = sizeof (siginfo_er);
+ char *buf = (char *) &windows_process.siginfo_er;
+ size_t bufsize = sizeof (windows_process.siginfo_er);
#ifdef __x86_64__
EXCEPTION_RECORD32 er32;
- if (wow64_process)
+ if (windows_process.wow64_process)
{
buf = (char *) &er32;
bufsize = sizeof (er32);
- er32.ExceptionCode = siginfo_er.ExceptionCode;
- er32.ExceptionFlags = siginfo_er.ExceptionFlags;
- er32.ExceptionRecord = (uintptr_t) siginfo_er.ExceptionRecord;
- er32.ExceptionAddress = (uintptr_t) siginfo_er.ExceptionAddress;
- er32.NumberParameters = siginfo_er.NumberParameters;
+ er32.ExceptionCode = windows_process.siginfo_er.ExceptionCode;
+ er32.ExceptionFlags = windows_process.siginfo_er.ExceptionFlags;
+ er32.ExceptionRecord
+ = (uintptr_t) windows_process.siginfo_er.ExceptionRecord;
+ er32.ExceptionAddress
+ = (uintptr_t) windows_process.siginfo_er.ExceptionAddress;
+ er32.NumberParameters = windows_process.siginfo_er.NumberParameters;
int i;
for (i = 0; i < EXCEPTION_MAXIMUM_PARAMETERS; i++)
- er32.ExceptionInformation[i] = siginfo_er.ExceptionInformation[i];
+ er32.ExceptionInformation[i]
+ = windows_process.siginfo_er.ExceptionInformation[i];
}
#endif
@@ -1447,7 +1463,7 @@ int
win32_process_target::get_tib_address (ptid_t ptid, CORE_ADDR *addr)
{
windows_thread_info *th;
- th = thread_rec (ptid, DONT_INVALIDATE_CONTEXT);
+ th = windows_process.thread_rec (ptid, DONT_INVALIDATE_CONTEXT);
if (th == NULL)
return 0;
if (addr != NULL)
@@ -1467,8 +1483,9 @@ win32_process_target::sw_breakpoint_from_kind (int kind, int *size)
bool
win32_process_target::stopped_by_sw_breakpoint ()
{
- windows_thread_info *th = thread_rec (current_thread_ptid (),
- DONT_INVALIDATE_CONTEXT);
+ windows_thread_info *th
+ = windows_process.thread_rec (current_thread_ptid (),
+ DONT_INVALIDATE_CONTEXT);
return th == nullptr ? false : th->stopped_at_software_breakpoint;
}
@@ -1490,6 +1507,15 @@ win32_process_target::write_pc (struct regcache *regcache, CORE_ADDR pc)
return (*the_low_target.set_pc) (regcache, pc);
}
+const char *
+win32_process_target::thread_name (ptid_t thread)
+{
+ windows_thread_info *th
+ = windows_process.thread_rec (current_thread_ptid (),
+ DONT_INVALIDATE_CONTEXT);
+ return th->thread_name ();
+}
+
/* The win32 target ops object. */
static win32_process_target the_win32_target;
diff --git a/gdbserver/win32-low.h b/gdbserver/win32-low.h
index 8856a84baa3..c5f40dd8d0a 100644
--- a/gdbserver/win32-low.h
+++ b/gdbserver/win32-low.h
@@ -158,8 +158,13 @@ public:
bool stopped_by_sw_breakpoint () override;
bool supports_stopped_by_sw_breakpoint () override;
+
+ const char *thread_name (ptid_t thread) override;
};
+/* The sole Windows process. */
+extern windows_nat::windows_process_info windows_process;
+
/* Retrieve the context for this thread, if not already retrieved. */
extern void win32_require_context (windows_nat::windows_thread_info *th);
diff --git a/gdbsupport/Makefile.am b/gdbsupport/Makefile.am
index d8f204b824a..1416027e1c9 100644
--- a/gdbsupport/Makefile.am
+++ b/gdbsupport/Makefile.am
@@ -35,6 +35,10 @@ if SELFTEST
selftest = selftest.cc
endif
+if HAVE_PIPE_OR_PIPE2
+eventpipe = event-pipe.cc
+endif
+
libgdbsupport_a_SOURCES = \
agent.cc \
btrace-common.cc \
@@ -52,6 +56,9 @@ libgdbsupport_a_SOURCES = \
filestuff.cc \
format.cc \
gdb-dlfcn.cc \
+ gdb-hashtab.cc \
+ gdb_obstack.cc \
+ gdb_regex.cc \
gdb_tilde_expand.cc \
gdb_wait.cc \
gdb_vecs.cc \
@@ -71,6 +78,7 @@ libgdbsupport_a_SOURCES = \
tdesc.cc \
thread-pool.cc \
xml-utils.cc \
+ ${eventpipe} \
$(selftest)
# Double-check that no defines are missing from our configury.
diff --git a/gdbsupport/Makefile.in b/gdbsupport/Makefile.in
index 36c2e3ddd95..bdceff3b56a 100644
--- a/gdbsupport/Makefile.in
+++ b/gdbsupport/Makefile.in
@@ -123,8 +123,8 @@ am__aclocal_m4_deps = $(top_srcdir)/../config/codeset.m4 \
$(top_srcdir)/../config/ax_pthread.m4 \
$(top_srcdir)/../gdb/ax_cxx_compile_stdcxx.m4 \
$(top_srcdir)/../gdb/libiberty.m4 $(top_srcdir)/selftest.m4 \
- $(top_srcdir)/ptrace.m4 $(top_srcdir)/warning.m4 \
- $(top_srcdir)/configure.ac
+ $(top_srcdir)/ptrace.m4 $(top_srcdir)/compiler-type.m4 \
+ $(top_srcdir)/warning.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \
@@ -144,21 +144,24 @@ am__v_AR_0 = @echo " AR " $@;
am__v_AR_1 =
libgdbsupport_a_AR = $(AR) $(ARFLAGS)
libgdbsupport_a_LIBADD =
-@SELFTEST_TRUE@am__objects_1 = selftest.$(OBJEXT)
+@HAVE_PIPE_OR_PIPE2_TRUE@am__objects_1 = event-pipe.$(OBJEXT)
+@SELFTEST_TRUE@am__objects_2 = selftest.$(OBJEXT)
am_libgdbsupport_a_OBJECTS = agent.$(OBJEXT) btrace-common.$(OBJEXT) \
buffer.$(OBJEXT) cleanups.$(OBJEXT) common-debug.$(OBJEXT) \
common-exceptions.$(OBJEXT) common-inferior.$(OBJEXT) \
common-regcache.$(OBJEXT) common-utils.$(OBJEXT) \
environ.$(OBJEXT) errors.$(OBJEXT) event-loop.$(OBJEXT) \
fileio.$(OBJEXT) filestuff.$(OBJEXT) format.$(OBJEXT) \
- gdb-dlfcn.$(OBJEXT) gdb_tilde_expand.$(OBJEXT) \
- gdb_wait.$(OBJEXT) gdb_vecs.$(OBJEXT) job-control.$(OBJEXT) \
- netstuff.$(OBJEXT) new-op.$(OBJEXT) pathstuff.$(OBJEXT) \
- print-utils.$(OBJEXT) ptid.$(OBJEXT) rsp-low.$(OBJEXT) \
- run-time-clock.$(OBJEXT) safe-strerror.$(OBJEXT) \
- scoped_mmap.$(OBJEXT) search.$(OBJEXT) signals.$(OBJEXT) \
- signals-state-save-restore.$(OBJEXT) tdesc.$(OBJEXT) \
- thread-pool.$(OBJEXT) xml-utils.$(OBJEXT) $(am__objects_1)
+ gdb-dlfcn.$(OBJEXT) gdb-hashtab.$(OBJEXT) \
+ gdb_obstack.$(OBJEXT) gdb_regex.$(OBJEXT) \
+ gdb_tilde_expand.$(OBJEXT) gdb_wait.$(OBJEXT) \
+ gdb_vecs.$(OBJEXT) job-control.$(OBJEXT) netstuff.$(OBJEXT) \
+ new-op.$(OBJEXT) pathstuff.$(OBJEXT) print-utils.$(OBJEXT) \
+ ptid.$(OBJEXT) rsp-low.$(OBJEXT) run-time-clock.$(OBJEXT) \
+ safe-strerror.$(OBJEXT) scoped_mmap.$(OBJEXT) search.$(OBJEXT) \
+ signals.$(OBJEXT) signals-state-save-restore.$(OBJEXT) \
+ tdesc.$(OBJEXT) thread-pool.$(OBJEXT) xml-utils.$(OBJEXT) \
+ $(am__objects_1) $(am__objects_2)
libgdbsupport_a_OBJECTS = $(am_libgdbsupport_a_OBJECTS)
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
@@ -358,6 +361,7 @@ AM_CPPFLAGS = -I$(srcdir)/../include -I$(srcdir)/../gdb \
AM_CXXFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS)
noinst_LIBRARIES = libgdbsupport.a
@SELFTEST_TRUE@selftest = selftest.cc
+@HAVE_PIPE_OR_PIPE2_TRUE@eventpipe = event-pipe.cc
libgdbsupport_a_SOURCES = \
agent.cc \
btrace-common.cc \
@@ -375,6 +379,9 @@ libgdbsupport_a_SOURCES = \
filestuff.cc \
format.cc \
gdb-dlfcn.cc \
+ gdb-hashtab.cc \
+ gdb_obstack.cc \
+ gdb_regex.cc \
gdb_tilde_expand.cc \
gdb_wait.cc \
gdb_vecs.cc \
@@ -394,6 +401,7 @@ libgdbsupport_a_SOURCES = \
tdesc.cc \
thread-pool.cc \
xml-utils.cc \
+ ${eventpipe} \
$(selftest)
all: config.h
@@ -476,10 +484,14 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/environ.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/errors.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/event-loop.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/event-pipe.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fileio.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/filestuff.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/format.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gdb-dlfcn.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gdb-hashtab.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gdb_obstack.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gdb_regex.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gdb_tilde_expand.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gdb_vecs.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gdb_wait.Po@am__quote@
diff --git a/gdbsupport/acinclude.m4 b/gdbsupport/acinclude.m4
index cc9c2dcb32f..c6276149867 100644
--- a/gdbsupport/acinclude.m4
+++ b/gdbsupport/acinclude.m4
@@ -6,5 +6,8 @@ m4_include([../gdb/libiberty.m4])
m4_include([selftest.m4])
m4_include([ptrace.m4])
+dnl This gets AM_GDB_COMPILER_TYPE.
+m4_include(compiler-type.m4)
+
dnl This gets AM_GDB_WARNINGS.
m4_include(warning.m4)
diff --git a/gdbsupport/buildargv.h b/gdbsupport/buildargv.h
new file mode 100644
index 00000000000..7a34d9b509d
--- /dev/null
+++ b/gdbsupport/buildargv.h
@@ -0,0 +1,204 @@
+/* RAII wrapper for buildargv
+
+ Copyright (C) 2021 Free Software Foundation, Inc.
+
+ This file is part of GDB.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#ifndef GDBSUPPORT_BUILDARGV_H
+#define GDBSUPPORT_BUILDARGV_H
+
+#include "libiberty.h"
+
+/* A wrapper for an array of char* that was allocated in the way that
+ 'buildargv' does, and should be freed with 'freeargv'. */
+
+class gdb_argv
+{
+public:
+
+ /* A constructor that initializes to NULL. */
+
+ gdb_argv ()
+ : m_argv (NULL)
+ {
+ }
+
+ /* A constructor that calls buildargv on STR. STR may be NULL, in
+ which case this object is initialized with a NULL array. */
+
+ explicit gdb_argv (const char *str)
+ : m_argv (NULL)
+ {
+ reset (str);
+ }
+
+ /* A constructor that takes ownership of an existing array. */
+
+ explicit gdb_argv (char **array)
+ : m_argv (array)
+ {
+ }
+
+ gdb_argv (const gdb_argv &) = delete;
+ gdb_argv &operator= (const gdb_argv &) = delete;
+
+ gdb_argv &operator= (gdb_argv &&other)
+ {
+ freeargv (m_argv);
+ m_argv = other.m_argv;
+ other.m_argv = nullptr;
+ return *this;
+ }
+
+ gdb_argv (gdb_argv &&other)
+ {
+ m_argv = other.m_argv;
+ other.m_argv = nullptr;
+ }
+
+ ~gdb_argv ()
+ {
+ freeargv (m_argv);
+ }
+
+ /* Call buildargv on STR, storing the result in this object. Any
+ previous state is freed. STR may be NULL, in which case this
+ object is reset with a NULL array. If buildargv fails due to
+ out-of-memory, call malloc_failure. Therefore, the value is
+ guaranteed to be non-NULL, unless the parameter itself is
+ NULL. */
+
+ void reset (const char *str)
+ {
+ char **argv = buildargv (str);
+ freeargv (m_argv);
+ m_argv = argv;
+ }
+
+ /* Return the underlying array. */
+
+ char **get ()
+ {
+ return m_argv;
+ }
+
+ const char * const * get () const
+ {
+ return m_argv;
+ }
+
+ /* Return the underlying array, transferring ownership to the
+ caller. */
+
+ ATTRIBUTE_UNUSED_RESULT char **release ()
+ {
+ char **result = m_argv;
+ m_argv = NULL;
+ return result;
+ }
+
+ /* Return the number of items in the array. */
+
+ int count () const
+ {
+ return countargv (m_argv);
+ }
+
+ /* Index into the array. */
+
+ char *operator[] (int arg)
+ {
+ gdb_assert (m_argv != NULL);
+ return m_argv[arg];
+ }
+
+ /* Return the arguments array as an array view. */
+
+ gdb::array_view<char *> as_array_view ()
+ {
+ return gdb::array_view<char *> (this->get (), this->count ());
+ }
+
+ gdb::array_view<const char * const> as_array_view () const
+ {
+ return gdb::array_view<const char * const> (this->get (), this->count ());
+ }
+
+ /* Append arguments to this array. */
+ void append (gdb_argv &&other)
+ {
+ int size = count ();
+ int argc = other.count ();
+ m_argv = XRESIZEVEC (char *, m_argv, (size + argc + 1));
+
+ for (int argi = 0; argi < argc; argi++)
+ {
+ /* Transfer ownership of the string. */
+ m_argv[size++] = other.m_argv[argi];
+ /* Ensure that destruction of OTHER works correctly. */
+ other.m_argv[argi] = nullptr;
+ }
+ m_argv[size] = nullptr;
+ }
+
+ /* Append arguments to this array. */
+ void append (const gdb_argv &other)
+ {
+ int size = count ();
+ int argc = other.count ();
+ m_argv = XRESIZEVEC (char *, m_argv, (size + argc + 1));
+
+ for (int argi = 0; argi < argc; argi++)
+ m_argv[size++] = xstrdup (other.m_argv[argi]);
+ m_argv[size] = nullptr;
+ }
+
+ /* The iterator type. */
+
+ typedef char **iterator;
+
+ /* Return an iterator pointing to the start of the array. */
+
+ iterator begin ()
+ {
+ return m_argv;
+ }
+
+ /* Return an iterator pointing to the end of the array. */
+
+ iterator end ()
+ {
+ return m_argv + count ();
+ }
+
+ bool operator!= (std::nullptr_t)
+ {
+ return m_argv != NULL;
+ }
+
+ bool operator== (std::nullptr_t)
+ {
+ return m_argv == NULL;
+ }
+
+private:
+
+ /* The wrapped array. */
+
+ char **m_argv;
+};
+
+#endif /* GDBSUPPORT_BUILDARGV_H */
diff --git a/gdbsupport/common-defs.h b/gdbsupport/common-defs.h
index e263d948ee1..eed364a48ce 100644
--- a/gdbsupport/common-defs.h
+++ b/gdbsupport/common-defs.h
@@ -213,9 +213,6 @@
/* Pull in gdb::unique_xmalloc_ptr. */
#include "gdbsupport/gdb_unique_ptr.h"
-/* String containing the current directory (what getwd would return). */
-extern char *current_directory;
-
/* sbrk on macOS is not useful for our purposes, since sbrk(0) always
returns the same value. brk/sbrk on macOS is just an emulation
that always returns a pointer to a 4MB section reserved for
diff --git a/gdbsupport/common-exceptions.h b/gdbsupport/common-exceptions.h
index b7e6f2dd7ca..543afda508a 100644
--- a/gdbsupport/common-exceptions.h
+++ b/gdbsupport/common-exceptions.h
@@ -24,6 +24,7 @@
#include <new>
#include <memory>
#include <string>
+#include <functional>
/* Reasons for calling throw_exceptions(). NOTE: all reason values
must be different from zero. enum value 0 is reserved for internal
@@ -187,6 +188,24 @@ struct gdb_exception
std::shared_ptr<std::string> message;
};
+namespace std
+{
+
+/* Specialization of std::hash for gdb_exception. */
+template<>
+struct hash<gdb_exception>
+{
+ size_t operator() (const gdb_exception &exc) const
+ {
+ size_t result = exc.reason + exc.error;
+ if (exc.message != nullptr)
+ result += std::hash<std::string> {} (*exc.message);
+ return result;
+ }
+};
+
+}
+
/* Functions to drive the sjlj-based exceptions state machine. Though
declared here by necessity, these functions should be considered
internal to the exceptions subsystem and not used other than via
diff --git a/gdbsupport/common.m4 b/gdbsupport/common.m4
index 838c01c00da..d3e9ecbe823 100644
--- a/gdbsupport/common.m4
+++ b/gdbsupport/common.m4
@@ -93,27 +93,26 @@ AC_DEFUN([GDB_AC_COMMON], [
# mingw and DJGPP.
AC_LANG_PUSH([C++])
AX_PTHREAD([threads=yes], [threads=no])
- if test "$threads" = "yes"; then
- save_LIBS="$LIBS"
- LIBS="$PTHREAD_LIBS $LIBS"
- save_CXXFLAGS="$CXXFLAGS"
- CXXFLAGS="$PTHREAD_CFLAGS $save_CXXFLAGS"
- AC_CACHE_CHECK([for std::thread],
- gdb_cv_cxx_std_thread,
- [AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
- [[#include <thread>
- void callback() { }]],
- [[std::thread t(callback);]])],
- gdb_cv_cxx_std_thread=yes,
- gdb_cv_cxx_std_thread=no)])
+ save_LIBS="$LIBS"
+ LIBS="$PTHREAD_LIBS $LIBS"
+ save_CXXFLAGS="$CXXFLAGS"
+ CXXFLAGS="$PTHREAD_CFLAGS $save_CXXFLAGS"
+ AC_CACHE_CHECK([for std::thread],
+ gdb_cv_cxx_std_thread,
+ [AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
+ [[#include <thread>
+ void callback() { }]],
+ [[std::thread t(callback);]])],
+ gdb_cv_cxx_std_thread=yes,
+ gdb_cv_cxx_std_thread=no)])
+ if test "$threads" = "yes"; then
# This check must be here, while LIBS includes any necessary
# threading library.
AC_CHECK_FUNCS([pthread_sigmask pthread_setname_np])
-
- LIBS="$save_LIBS"
- CXXFLAGS="$save_CXXFLAGS"
fi
+ LIBS="$save_LIBS"
+ CXXFLAGS="$save_CXXFLAGS"
if test "$want_threading" = "yes"; then
if test "$gdb_cv_cxx_std_thread" = "yes"; then
diff --git a/gdbsupport/compiler-type.m4 b/gdbsupport/compiler-type.m4
new file mode 100644
index 00000000000..f943a987210
--- /dev/null
+++ b/gdbsupport/compiler-type.m4
@@ -0,0 +1,59 @@
+dnl Autoconf configure script for GDB, the GNU debugger.
+dnl Copyright (C) 2022 Free Software Foundation, Inc.
+dnl
+dnl This file is part of GDB.
+dnl
+dnl This program is free software; you can redistribute it and/or modify
+dnl it under the terms of the GNU General Public License as published by
+dnl the Free Software Foundation; either version 3 of the License, or
+dnl (at your option) any later version.
+dnl
+dnl This program is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+dnl GNU General Public License for more details.
+dnl
+dnl You should have received a copy of the GNU General Public License
+dnl along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Sets up GDB_COMPILER_TYPE to either 'gcc', 'clang', or 'unknown'.
+# The autoconf compiler check will set GCC=yes for clang as well as
+# gcc, it's really more of a "is gcc like" check.
+#
+# By contrast, this will set the GDB_COMPILER_TYPE to 'gcc' only for
+# versions of gcc.
+#
+# There's no reason why this can't be extended to identify other
+# compiler types if needed in the future, users of this variable
+# should therefore avoid relying on the 'unknown' value, instead
+# checks should be written in terms of the known compiler types.
+AC_DEFUN([AM_GDB_COMPILER_TYPE],[
+
+ AC_CACHE_CHECK([the compiler type],
+ [gdb_cv_compiler_type],
+ [gdb_cv_compiler_type=unknown
+ if test "$gdb_cv_compiler_type" = unknown; then
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM([],
+ [
+ #if !defined __GNUC__ || defined __clang__
+ #error not gcc
+ #endif
+ ])],
+ [gdb_cv_compiler_type=gcc], [])
+ fi
+
+ if test "$gdb_cv_compiler_type" = unknown; then
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM([],
+ [
+ #ifndef __clang__
+ #error not clang
+ #endif
+ ])],
+ [gdb_cv_compiler_type=clang], [])
+ fi
+ ])
+
+ GDB_COMPILER_TYPE="$gdb_cv_compiler_type"
+])
diff --git a/gdbsupport/configure b/gdbsupport/configure
index 8b4cb7e098d..618f487749f 100755
--- a/gdbsupport/configure
+++ b/gdbsupport/configure
@@ -626,6 +626,8 @@ LTLIBOBJS
LIBOBJS
WERROR_CFLAGS
WARN_CFLAGS
+HAVE_PIPE_OR_PIPE2_FALSE
+HAVE_PIPE_OR_PIPE2_TRUE
SELFTEST_FALSE
SELFTEST_TRUE
LTLIBIPT
@@ -8943,12 +8945,11 @@ ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ex
ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
- if test "$threads" = "yes"; then
- save_LIBS="$LIBS"
- LIBS="$PTHREAD_LIBS $LIBS"
- save_CXXFLAGS="$CXXFLAGS"
- CXXFLAGS="$PTHREAD_CFLAGS $save_CXXFLAGS"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for std::thread" >&5
+ save_LIBS="$LIBS"
+ LIBS="$PTHREAD_LIBS $LIBS"
+ save_CXXFLAGS="$CXXFLAGS"
+ CXXFLAGS="$PTHREAD_CFLAGS $save_CXXFLAGS"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for std::thread" >&5
$as_echo_n "checking for std::thread... " >&6; }
if ${gdb_cv_cxx_std_thread+:} false; then :
$as_echo_n "(cached) " >&6
@@ -8956,7 +8957,7 @@ else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <thread>
- void callback() { }
+ void callback() { }
int
main ()
{
@@ -8975,6 +8976,7 @@ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_cxx_std_thread" >&5
$as_echo "$gdb_cv_cxx_std_thread" >&6; }
+ if test "$threads" = "yes"; then
# This check must be here, while LIBS includes any necessary
# threading library.
for ac_func in pthread_sigmask pthread_setname_np
@@ -8989,10 +8991,9 @@ _ACEOF
fi
done
-
- LIBS="$save_LIBS"
- CXXFLAGS="$save_CXXFLAGS"
fi
+ LIBS="$save_LIBS"
+ CXXFLAGS="$save_CXXFLAGS"
if test "$want_threading" = "yes"; then
if test "$gdb_cv_cxx_std_thread" = "yes"; then
@@ -10002,6 +10003,15 @@ else
fi
+ if test x$ac_cv_func_pipe = xyes -o x$ac_cv_func_pipe2 = xyes ; then
+ HAVE_PIPE_OR_PIPE2_TRUE=
+ HAVE_PIPE_OR_PIPE2_FALSE='#'
+else
+ HAVE_PIPE_OR_PIPE2_TRUE='#'
+ HAVE_PIPE_OR_PIPE2_FALSE=
+fi
+
+
# Check the return and argument types of ptrace.
@@ -10192,6 +10202,64 @@ fi
# Detect support warning flags.
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking the compiler type" >&5
+$as_echo_n "checking the compiler type... " >&6; }
+if ${gdb_cv_compiler_type+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ gdb_cv_compiler_type=unknown
+ if test "$gdb_cv_compiler_type" = unknown; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ #if !defined __GNUC__ || defined __clang__
+ #error not gcc
+ #endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ gdb_cv_compiler_type=gcc
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+
+ if test "$gdb_cv_compiler_type" = unknown; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ #ifndef __clang__
+ #error not clang
+ #endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ gdb_cv_compiler_type=clang
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_compiler_type" >&5
+$as_echo "$gdb_cv_compiler_type" >&6; }
+
+ GDB_COMPILER_TYPE="$gdb_cv_compiler_type"
+
+
# Check whether --enable-werror was given.
if test "${enable_werror+set}" = set; then :
enableval=$enable_werror; case "${enableval}" in
@@ -10228,10 +10296,16 @@ build_warnings="-Wall -Wpointer-arith \
-Wdeprecated-copy-dtor \
-Wredundant-move \
-Wmissing-declarations \
--Wmissing-prototypes \
-Wstrict-null-sentinel \
"
+# The -Wmissing-prototypes flag will be accepted by GCC, but results
+# in a warning being printed about the flag not being valid for C++,
+# this is something to do with using ccache, and argument ordering.
+if test "$GDB_COMPILER_TYPE" != gcc; then
+ build_warnings="$build_warnings -Wmissing-prototypes"
+fi
+
case "${host}" in
*-*-mingw32*)
# Enable -Wno-format by default when using gcc on mingw since many
@@ -10533,6 +10607,10 @@ if test -z "${SELFTEST_TRUE}" && test -z "${SELFTEST_FALSE}"; then
as_fn_error $? "conditional \"SELFTEST\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
+if test -z "${HAVE_PIPE_OR_PIPE2_TRUE}" && test -z "${HAVE_PIPE_OR_PIPE2_FALSE}"; then
+ as_fn_error $? "conditional \"HAVE_PIPE_OR_PIPE2\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
: "${CONFIG_STATUS=./config.status}"
ac_write_fail=0
diff --git a/gdbsupport/configure.ac b/gdbsupport/configure.ac
index 4222bb76d5b..1f794605f3c 100644
--- a/gdbsupport/configure.ac
+++ b/gdbsupport/configure.ac
@@ -53,10 +53,14 @@ GDB_AC_COMMON
GDB_AC_SELFTEST
AM_CONDITIONAL(SELFTEST, $enable_unittests)
+AM_CONDITIONAL(HAVE_PIPE_OR_PIPE2,
+ [test x$ac_cv_func_pipe = xyes -o x$ac_cv_func_pipe2 = xyes ])
+
# Check the return and argument types of ptrace.
GDB_AC_PTRACE
# Detect support warning flags.
+AM_GDB_COMPILER_TYPE
AM_GDB_WARNINGS
case ${host} in
diff --git a/gdbsupport/event-pipe.cc b/gdbsupport/event-pipe.cc
new file mode 100644
index 00000000000..ed3b63e3382
--- /dev/null
+++ b/gdbsupport/event-pipe.cc
@@ -0,0 +1,101 @@
+/* Event pipe for GDB, the GNU debugger.
+
+ Copyright (C) 2021 Free Software Foundation, Inc.
+
+ This file is part of GDB.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#include "gdbsupport/common-defs.h"
+#include "gdbsupport/event-pipe.h"
+#include "gdbsupport/filestuff.h"
+
+#include <errno.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+event_pipe::~event_pipe ()
+{
+ if (is_open ())
+ close_pipe ();
+}
+
+/* See event-pipe.h. */
+
+bool
+event_pipe::open_pipe ()
+{
+ if (is_open ())
+ return false;
+
+ if (gdb_pipe_cloexec (m_fds) == -1)
+ return false;
+
+ if (fcntl (m_fds[0], F_SETFL, O_NONBLOCK) == -1
+ || fcntl (m_fds[1], F_SETFL, O_NONBLOCK) == -1)
+ {
+ close_pipe ();
+ return false;
+ }
+
+ return true;
+}
+
+/* See event-pipe.h. */
+
+void
+event_pipe::close_pipe ()
+{
+ ::close (m_fds[0]);
+ ::close (m_fds[1]);
+ m_fds[0] = -1;
+ m_fds[1] = -1;
+}
+
+/* See event-pipe.h. */
+
+void
+event_pipe::flush ()
+{
+ int ret;
+ char buf;
+
+ do
+ {
+ ret = read (m_fds[0], &buf, 1);
+ }
+ while (ret >= 0 || (ret == -1 && errno == EINTR));
+}
+
+/* See event-pipe.h. */
+
+void
+event_pipe::mark ()
+{
+ int ret;
+
+ /* It doesn't really matter what the pipe contains, as long we end
+ up with something in it. Might as well flush the previous
+ left-overs. */
+ flush ();
+
+ do
+ {
+ ret = write (m_fds[1], "+", 1);
+ }
+ while (ret == -1 && errno == EINTR);
+
+ /* Ignore EAGAIN. If the pipe is full, the event loop will already
+ be awakened anyway. */
+}
diff --git a/gdbsupport/event-pipe.h b/gdbsupport/event-pipe.h
new file mode 100644
index 00000000000..9a41089774d
--- /dev/null
+++ b/gdbsupport/event-pipe.h
@@ -0,0 +1,60 @@
+/* Event pipe for GDB, the GNU debugger.
+
+ Copyright (C) 2021 Free Software Foundation, Inc.
+
+ This file is part of GDB.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#ifndef COMMON_EVENT_PIPE_H
+#define COMMON_EVENT_PIPE_H
+
+/* An event pipe used as a waitable file in the event loop in place of
+ some other event associated with a signal. The handler for the
+ signal marks the event pipe to force a wakeup in the event loop.
+ This uses the well-known self-pipe trick. */
+
+class event_pipe
+{
+public:
+ event_pipe() = default;
+ ~event_pipe();
+
+ DISABLE_COPY_AND_ASSIGN (event_pipe);
+
+ /* Create a new pipe. */
+ bool open_pipe ();
+
+ /* Close the pipe. */
+ void close_pipe ();
+
+ /* True if the event pipe has been opened. */
+ bool is_open () const
+ { return m_fds[0] != -1; }
+
+ /* The file descriptor of the waitable file to use in the event
+ loop. */
+ int event_fd () const
+ { return m_fds[0]; }
+
+ /* Flush the event pipe. */
+ void flush ();
+
+ /* Put something in the pipe, so the event loop wakes up. */
+ void mark ();
+private:
+ int m_fds[2] = { -1, -1 };
+};
+
+#endif /* COMMON_EVENT_PIPE_H */
diff --git a/gdbsupport/gdb-hashtab.cc b/gdbsupport/gdb-hashtab.cc
new file mode 100644
index 00000000000..c42e8fec7b7
--- /dev/null
+++ b/gdbsupport/gdb-hashtab.cc
@@ -0,0 +1,44 @@
+/* Hash table wrappers for gdb.
+ Copyright (C) 2021 Free Software Foundation, Inc.
+
+ This file is part of GDB.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#include "common-defs.h"
+#include "gdb-hashtab.h"
+
+/* Allocation function for the libiberty hash table which uses an
+ obstack. The obstack is passed as DATA. */
+
+void *
+hashtab_obstack_allocate (void *data, size_t size, size_t count)
+{
+ size_t total = size * count;
+ void *ptr = obstack_alloc ((struct obstack *) data, total);
+
+ memset (ptr, 0, total);
+ return ptr;
+}
+
+/* Trivial deallocation function for the libiberty splay tree and hash
+ table - don't deallocate anything. Rely on later deletion of the
+ obstack. DATA will be the obstack, although it is not needed
+ here. */
+
+void
+dummy_obstack_deallocate (void *object, void *data)
+{
+ return;
+}
diff --git a/gdbsupport/gdb-hashtab.h b/gdbsupport/gdb-hashtab.h
new file mode 100644
index 00000000000..65c2dc59a79
--- /dev/null
+++ b/gdbsupport/gdb-hashtab.h
@@ -0,0 +1,50 @@
+/* Hash table wrappers for gdb.
+ Copyright (C) 2021 Free Software Foundation, Inc.
+
+ This file is part of GDB.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#ifndef GDBSUPPORT_GDB_HASHTAB_H
+#define GDBSUPPORT_GDB_HASHTAB_H
+
+#include "hashtab.h"
+
+/* A deleter for a hash table. */
+struct htab_deleter
+{
+ void operator() (htab *ptr) const
+ {
+ htab_delete (ptr);
+ }
+};
+
+/* A unique_ptr wrapper for htab_t. */
+typedef std::unique_ptr<htab, htab_deleter> htab_up;
+
+/* A wrapper for 'delete' that can used as a hash table entry deletion
+ function. */
+template<typename T>
+void
+htab_delete_entry (void *ptr)
+{
+ delete (T *) ptr;
+}
+
+/* Allocation and deallocation functions for the libiberty hash table
+ which use obstacks. */
+void *hashtab_obstack_allocate (void *data, size_t size, size_t count);
+void dummy_obstack_deallocate (void *object, void *data);
+
+#endif /* GDBSUPPORT_GDB_HASHTAB_H */
diff --git a/gdb/gdb_obstack.c b/gdbsupport/gdb_obstack.cc
index 3f8d82a245e..571f34a7add 100644
--- a/gdb/gdb_obstack.c
+++ b/gdbsupport/gdb_obstack.cc
@@ -17,7 +17,7 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
-#include "defs.h"
+#include "common-defs.h"
#include "gdb_obstack.h"
/* Concatenate NULL terminated variable argument list of `const char *'
diff --git a/gdb/gdb_obstack.h b/gdbsupport/gdb_obstack.h
index 5e870cb7981..5e870cb7981 100644
--- a/gdb/gdb_obstack.h
+++ b/gdbsupport/gdb_obstack.h
diff --git a/gdb/gdb_regex.c b/gdbsupport/gdb_regex.cc
index f4d23cf346f..ac4f0555534 100644
--- a/gdb/gdb_regex.c
+++ b/gdbsupport/gdb_regex.cc
@@ -15,7 +15,7 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
-#include "defs.h"
+#include "common-defs.h"
#include "gdb_regex.h"
#include "gdbsupport/def-vector.h"
diff --git a/gdb/gdb_regex.h b/gdbsupport/gdb_regex.h
index 1b31f5bdda4..1b31f5bdda4 100644
--- a/gdb/gdb_regex.h
+++ b/gdbsupport/gdb_regex.h
diff --git a/gdbsupport/gdb_tilde_expand.cc b/gdbsupport/gdb_tilde_expand.cc
index e3f9308a14f..177d296a14f 100644
--- a/gdbsupport/gdb_tilde_expand.cc
+++ b/gdbsupport/gdb_tilde_expand.cc
@@ -102,12 +102,3 @@ gdb_tilde_expand (const char *dir)
gdb_assert (glob.pathc () == 1);
return std::string (glob.pathv ()[0]) + remainder;
}
-
-/* See gdbsupport/gdb_tilde_expand.h. */
-
-gdb::unique_xmalloc_ptr<char>
-gdb_tilde_expand_up (const char *dir)
-{
- const std::string expanded = gdb_tilde_expand (dir);
- return make_unique_xstrdup (expanded.c_str ());
-}
diff --git a/gdbsupport/gdb_tilde_expand.h b/gdbsupport/gdb_tilde_expand.h
index c47cd6a214f..06b96517697 100644
--- a/gdbsupport/gdb_tilde_expand.h
+++ b/gdbsupport/gdb_tilde_expand.h
@@ -23,8 +23,4 @@
/* Perform tilde expansion on DIR, and return the full path. */
extern std::string gdb_tilde_expand (const char *dir);
-/* Same as GDB_TILDE_EXPAND, but return the full path as a
- gdb::unique_xmalloc_ptr<char>. */
-extern gdb::unique_xmalloc_ptr<char> gdb_tilde_expand_up (const char *dir);
-
#endif /* COMMON_GDB_TILDE_EXPAND_H */
diff --git a/gdbsupport/gdb_unique_ptr.h b/gdbsupport/gdb_unique_ptr.h
index d8a87a307ba..51ee7a4bc94 100644
--- a/gdbsupport/gdb_unique_ptr.h
+++ b/gdbsupport/gdb_unique_ptr.h
@@ -21,6 +21,7 @@
#define COMMON_GDB_UNIQUE_PTR_H
#include <memory>
+#include <string>
#include "gdbsupport/gdb-xfree.h"
namespace gdb
@@ -74,4 +75,22 @@ make_unique_xstrndup (const char *str, size_t n)
return gdb::unique_xmalloc_ptr<char> (xstrndup (str, n));
}
+/* An overload of operator+= fo adding gdb::unique_xmalloc_ptr<char> to a
+ std::string. */
+
+static inline std::string &
+operator+= (std::string &lhs, const gdb::unique_xmalloc_ptr<char> &rhs)
+{
+ return lhs += rhs.get ();
+}
+
+/* An overload of operator+ for adding gdb::unique_xmalloc_ptr<char> to a
+ std::string. */
+
+static inline std::string
+operator+ (const std::string &lhs, const gdb::unique_xmalloc_ptr<char> &rhs)
+{
+ return lhs + rhs.get ();
+}
+
#endif /* COMMON_GDB_UNIQUE_PTR_H */
diff --git a/gdbsupport/intrusive_list.h b/gdbsupport/intrusive_list.h
index 77eeeeec5fd..6812266159a 100644
--- a/gdbsupport/intrusive_list.h
+++ b/gdbsupport/intrusive_list.h
@@ -24,15 +24,26 @@
/* A list node. The elements put in an intrusive_list either inherit
from this, or have a field of this type. */
template<typename T>
-struct intrusive_list_node
+class intrusive_list_node
{
+public:
bool is_linked () const
{
return next != INTRUSIVE_LIST_UNLINKED_VALUE;
}
+private:
T *next = INTRUSIVE_LIST_UNLINKED_VALUE;
T *prev = INTRUSIVE_LIST_UNLINKED_VALUE;
+
+ template<typename T2, typename AsNode>
+ friend struct intrusive_list_iterator;
+
+ template<typename T2, typename AsNode>
+ friend struct intrusive_list_reverse_iterator;
+
+ template<typename T2, typename AsNode>
+ friend struct intrusive_list;
};
/* Follows a couple types used by intrusive_list as template parameter to find
diff --git a/gdbsupport/parallel-for.h b/gdbsupport/parallel-for.h
index ca03094bf12..713ec660306 100644
--- a/gdbsupport/parallel-for.h
+++ b/gdbsupport/parallel-for.h
@@ -21,64 +21,155 @@
#define GDBSUPPORT_PARALLEL_FOR_H
#include <algorithm>
-#if CXX_STD_THREAD
-#include <thread>
+#include <type_traits>
#include "gdbsupport/thread-pool.h"
-#endif
namespace gdb
{
+namespace detail
+{
+
+/* This is a helper class that is used to accumulate results for
+ parallel_for. There is a specialization for 'void', below. */
+template<typename T>
+struct par_for_accumulator
+{
+public:
+
+ explicit par_for_accumulator (size_t n_threads)
+ : m_futures (n_threads)
+ {
+ }
+
+ /* The result type that is accumulated. */
+ typedef std::vector<T> result_type;
+
+ /* Post the Ith task to a background thread, and store a future for
+ later. */
+ void post (size_t i, std::function<T ()> task)
+ {
+ m_futures[i]
+ = gdb::thread_pool::g_thread_pool->post_task (std::move (task));
+ }
+
+ /* Invoke TASK in the current thread, then compute all the results
+ from all background tasks and put them into a result vector,
+ which is returned. */
+ result_type finish (gdb::function_view<T ()> task)
+ {
+ result_type result (m_futures.size () + 1);
+
+ result.back () = task ();
+
+ for (size_t i = 0; i < m_futures.size (); ++i)
+ result[i] = m_futures[i].get ();
+
+ return result;
+ }
+
+private:
+
+ /* A vector of futures coming from the tasks run in the
+ background. */
+ std::vector<std::future<T>> m_futures;
+};
+
+/* See the generic template. */
+template<>
+struct par_for_accumulator<void>
+{
+public:
+
+ explicit par_for_accumulator (size_t n_threads)
+ : m_futures (n_threads)
+ {
+ }
+
+ /* This specialization does not compute results. */
+ typedef void result_type;
+
+ void post (size_t i, std::function<void ()> task)
+ {
+ m_futures[i]
+ = gdb::thread_pool::g_thread_pool->post_task (std::move (task));
+ }
+
+ result_type finish (gdb::function_view<void ()> task)
+ {
+ task ();
+
+ for (auto &future : m_futures)
+ {
+ /* Use 'get' and not 'wait', to propagate any exception. */
+ future.get ();
+ }
+ }
+
+private:
+
+ std::vector<std::future<void>> m_futures;
+};
+
+}
+
/* A very simple "parallel for". This splits the range of iterators
into subranges, and then passes each subrange to the callback. The
work may or may not be done in separate threads.
This approach was chosen over having the callback work on single
items because it makes it simple for the caller to do
- once-per-subrange initialization and destruction. */
+ once-per-subrange initialization and destruction.
+
+ The parameter N says how batching ought to be done -- there will be
+ at least N elements processed per thread. Setting N to 0 is not
+ allowed.
+
+ If the function returns a non-void type, then a vector of the
+ results is returned. The size of the resulting vector depends on
+ the number of threads that were used. */
template<class RandomIt, class RangeFunction>
-void
-parallel_for_each (RandomIt first, RandomIt last, RangeFunction callback)
+typename gdb::detail::par_for_accumulator<
+ typename std::result_of<RangeFunction (RandomIt, RandomIt)>::type
+ >::result_type
+parallel_for_each (unsigned n, RandomIt first, RandomIt last,
+ RangeFunction callback)
{
-#if CXX_STD_THREAD
- /* So we can use a local array below. */
- const size_t local_max = 16;
- size_t n_threads = std::min (thread_pool::g_thread_pool->thread_count (),
- local_max);
- size_t n_actual_threads = 0;
- std::future<void> futures[local_max];
+ using result_type
+ = typename std::result_of<RangeFunction (RandomIt, RandomIt)>::type;
+ size_t n_threads = thread_pool::g_thread_pool->thread_count ();
size_t n_elements = last - first;
+ size_t elts_per_thread = 0;
if (n_threads > 1)
{
- /* Arbitrarily require that there should be at least 10 elements
- in a thread. */
- if (n_elements / n_threads < 10)
- n_threads = std::max (n_elements / 10, (size_t) 1);
- size_t elts_per_thread = n_elements / n_threads;
- n_actual_threads = n_threads - 1;
- for (int i = 0; i < n_actual_threads; ++i)
- {
- RandomIt end = first + elts_per_thread;
- auto task = [=] ()
- {
- callback (first, end);
- };
-
- futures[i] = gdb::thread_pool::g_thread_pool->post_task (task);
- first = end;
- }
+ /* Require that there should be at least N elements in a
+ thread. */
+ gdb_assert (n > 0);
+ if (n_elements / n_threads < n)
+ n_threads = std::max (n_elements / n, (size_t) 1);
+ elts_per_thread = n_elements / n_threads;
}
-#endif /* CXX_STD_THREAD */
- /* Process all the remaining elements in the main thread. */
- callback (first, last);
+ size_t count = n_threads == 0 ? 0 : n_threads - 1;
+ gdb::detail::par_for_accumulator<result_type> results (count);
-#if CXX_STD_THREAD
- for (int i = 0; i < n_actual_threads; ++i)
- futures[i].wait ();
-#endif /* CXX_STD_THREAD */
+ for (int i = 0; i < count; ++i)
+ {
+ RandomIt end = first + elts_per_thread;
+ results.post (i, [=] ()
+ {
+ return callback (first, end);
+ });
+ first = end;
+ }
+
+ /* Process all the remaining elements in the main thread. */
+ return results.finish ([=] ()
+ {
+ return callback (first, last);
+ });
}
}
diff --git a/gdbsupport/pathstuff.cc b/gdbsupport/pathstuff.cc
index cb2dd4f5782..5b5a8eea904 100644
--- a/gdbsupport/pathstuff.cc
+++ b/gdbsupport/pathstuff.cc
@@ -29,6 +29,10 @@
/* See gdbsupport/pathstuff.h. */
+char *current_directory;
+
+/* See gdbsupport/pathstuff.h. */
+
gdb::unique_xmalloc_ptr<char>
gdb_realpath (const char *filename)
{
@@ -82,17 +86,16 @@ gdb_realpath (const char *filename)
/* See gdbsupport/pathstuff.h. */
-gdb::unique_xmalloc_ptr<char>
+std::string
gdb_realpath_keepfile (const char *filename)
{
const char *base_name = lbasename (filename);
char *dir_name;
- char *result;
/* Extract the basename of filename, and return immediately
a copy of filename if it does not contain any directory prefix. */
if (base_name == filename)
- return make_unique_xstrdup (filename);
+ return filename;
dir_name = (char *) alloca ((size_t) (base_name - filename + 2));
/* Allocate enough space to store the dir_name + plus one extra
@@ -116,33 +119,23 @@ gdb_realpath_keepfile (const char *filename)
directory separator, avoid doubling it. */
gdb::unique_xmalloc_ptr<char> path_storage = gdb_realpath (dir_name);
const char *real_path = path_storage.get ();
- if (IS_DIR_SEPARATOR (real_path[strlen (real_path) - 1]))
- result = concat (real_path, base_name, (char *) NULL);
- else
- result = concat (real_path, SLASH_STRING, base_name, (char *) NULL);
-
- return gdb::unique_xmalloc_ptr<char> (result);
+ return path_join (real_path, base_name);
}
/* See gdbsupport/pathstuff.h. */
-gdb::unique_xmalloc_ptr<char>
+std::string
gdb_abspath (const char *path)
{
gdb_assert (path != NULL && path[0] != '\0');
if (path[0] == '~')
- return gdb_tilde_expand_up (path);
+ return gdb_tilde_expand (path);
if (IS_ABSOLUTE_PATH (path) || current_directory == NULL)
- return make_unique_xstrdup (path);
-
- /* Beware the // my son, the Emacs barfs, the botch that catch... */
- return gdb::unique_xmalloc_ptr<char>
- (concat (current_directory,
- IS_DIR_SEPARATOR (current_directory[strlen (current_directory) - 1])
- ? "" : SLASH_STRING,
- path, (char *) NULL));
+ return path;
+
+ return path_join (current_directory, path);
}
/* See gdbsupport/pathstuff.h. */
@@ -197,6 +190,29 @@ child_path (const char *parent, const char *child)
/* See gdbsupport/pathstuff.h. */
+std::string
+path_join (gdb::array_view<const gdb::string_view> paths)
+{
+ std::string ret;
+
+ for (int i = 0; i < paths.size (); ++i)
+ {
+ const gdb::string_view path = paths[i];
+
+ if (i > 0)
+ gdb_assert (!IS_ABSOLUTE_PATH (path));
+
+ if (!ret.empty () && !IS_DIR_SEPARATOR (ret.back ()))
+ ret += '/';
+
+ ret.append (path.begin (), path.end ());
+ }
+
+ return ret;
+}
+
+/* See gdbsupport/pathstuff.h. */
+
bool
contains_dir_separator (const char *path)
{
@@ -225,8 +241,8 @@ get_standard_cache_dir ()
if (xdg_cache_home != NULL && xdg_cache_home[0] != '\0')
{
/* Make sure the path is absolute and tilde-expanded. */
- gdb::unique_xmalloc_ptr<char> abs (gdb_abspath (xdg_cache_home));
- return string_printf ("%s/gdb", abs.get ());
+ std::string abs = gdb_abspath (xdg_cache_home);
+ return path_join (abs.c_str (), "gdb");
}
#endif
@@ -234,8 +250,8 @@ get_standard_cache_dir ()
if (home != NULL && home[0] != '\0')
{
/* Make sure the path is absolute and tilde-expanded. */
- gdb::unique_xmalloc_ptr<char> abs (gdb_abspath (home));
- return string_printf ("%s/" HOME_CACHE_DIR "/gdb", abs.get ());
+ std::string abs = gdb_abspath (home);
+ return path_join (abs.c_str (), HOME_CACHE_DIR, "gdb");
}
#ifdef WIN32
@@ -243,8 +259,8 @@ get_standard_cache_dir ()
if (win_home != NULL && win_home[0] != '\0')
{
/* Make sure the path is absolute and tilde-expanded. */
- gdb::unique_xmalloc_ptr<char> abs (gdb_abspath (win_home));
- return string_printf ("%s/gdb", abs.get ());
+ std::string abs = gdb_abspath (win_home);
+ return path_join (abs.c_str (), "gdb");
}
#endif
@@ -292,8 +308,8 @@ get_standard_config_dir ()
if (xdg_config_home != NULL && xdg_config_home[0] != '\0')
{
/* Make sure the path is absolute and tilde-expanded. */
- gdb::unique_xmalloc_ptr<char> abs (gdb_abspath (xdg_config_home));
- return string_printf ("%s/gdb", abs.get ());
+ std::string abs = gdb_abspath (xdg_config_home);
+ return path_join (abs.c_str (), "gdb");
}
#endif
@@ -301,8 +317,8 @@ get_standard_config_dir ()
if (home != NULL && home[0] != '\0')
{
/* Make sure the path is absolute and tilde-expanded. */
- gdb::unique_xmalloc_ptr<char> abs (gdb_abspath (home));
- return string_printf ("%s/" HOME_CONFIG_DIR "/gdb", abs.get ());
+ std::string abs = gdb_abspath (home);
+ return path_join (abs.c_str (), HOME_CONFIG_DIR, "gdb");
}
return {};
@@ -343,9 +359,8 @@ find_gdb_home_config_file (const char *name, struct stat *buf)
if (homedir != nullptr && homedir[0] != '\0')
{
/* Make sure the path is absolute and tilde-expanded. */
- gdb::unique_xmalloc_ptr<char> abs (gdb_abspath (homedir));
- std::string path = (std::string (abs.get ()) + SLASH_STRING
- + std::string (name));
+ std::string abs = gdb_abspath (homedir);
+ std::string path = string_printf ("%s/%s", abs.c_str (), name);
if (stat (path.c_str (), buf) == 0)
return path;
}
diff --git a/gdbsupport/pathstuff.h b/gdbsupport/pathstuff.h
index 38828b7c4a3..d01db89e085 100644
--- a/gdbsupport/pathstuff.h
+++ b/gdbsupport/pathstuff.h
@@ -21,10 +21,12 @@
#define COMMON_PATHSTUFF_H
#include "gdbsupport/byte-vector.h"
+#include "gdbsupport/array-view.h"
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
+#include <array>
/* Path utilities. */
@@ -39,8 +41,7 @@ extern gdb::unique_xmalloc_ptr<char> gdb_realpath (const char *filename);
/* Return a copy of FILENAME, with its directory prefix canonicalized
by gdb_realpath. */
-extern gdb::unique_xmalloc_ptr<char>
- gdb_realpath_keepfile (const char *filename);
+extern std::string gdb_realpath_keepfile (const char *filename);
/* Return PATH in absolute form, performing tilde-expansion if necessary.
PATH cannot be NULL or the empty string.
@@ -53,7 +54,7 @@ extern gdb::unique_xmalloc_ptr<char>
If CURRENT_DIRECTORY is NULL, this function returns a copy of
PATH. */
-extern gdb::unique_xmalloc_ptr<char> gdb_abspath (const char *path);
+extern std::string gdb_abspath (const char *path);
/* If the path in CHILD is a child of the path in PARENT, return a
pointer to the first component in the CHILD's pathname below the
@@ -61,6 +62,28 @@ extern gdb::unique_xmalloc_ptr<char> gdb_abspath (const char *path);
extern const char *child_path (const char *parent, const char *child);
+/* Join elements in PATHS into a single path.
+
+ The first element can be absolute or relative. All the others must be
+ relative. */
+
+extern std::string path_join (gdb::array_view<const gdb::string_view> paths);
+
+/* Same as the above, but accept paths as distinct parameters. */
+
+template<typename ...Args>
+std::string
+path_join (Args... paths)
+{
+ /* It doesn't make sense to join less than two paths. */
+ gdb_static_assert (sizeof... (Args) >= 2);
+
+ std::array<gdb::string_view, sizeof... (Args)> views
+ { gdb::string_view (paths)... };
+
+ return path_join (gdb::array_view<const gdb::string_view> (views));
+}
+
/* Return whether PATH contains a directory separator character. */
extern bool contains_dir_separator (const char *path);
@@ -136,4 +159,7 @@ extern const char *get_shell ();
extern gdb::char_vector make_temp_filename (const std::string &f);
+/* String containing the current directory (what getwd would return). */
+extern char *current_directory;
+
#endif /* COMMON_PATHSTUFF_H */
diff --git a/gdbsupport/print-utils.cc b/gdbsupport/print-utils.cc
index 0ef8cb829a1..73ff1afda30 100644
--- a/gdbsupport/print-utils.cc
+++ b/gdbsupport/print-utils.cc
@@ -168,6 +168,10 @@ phex (ULONGEST l, int sizeof_l)
str = get_print_cell ();
xsnprintf (str, PRINT_CELL_SIZE, "%04x", (unsigned short) (l & 0xffff));
break;
+ case 1:
+ str = get_print_cell ();
+ xsnprintf (str, PRINT_CELL_SIZE, "%02x", (unsigned short) (l & 0xff));
+ break;
default:
str = phex (l, sizeof (l));
break;
@@ -206,6 +210,10 @@ phex_nz (ULONGEST l, int sizeof_l)
str = get_print_cell ();
xsnprintf (str, PRINT_CELL_SIZE, "%x", (unsigned short) (l & 0xffff));
break;
+ case 1:
+ str = get_print_cell ();
+ xsnprintf (str, PRINT_CELL_SIZE, "%x", (unsigned short) (l & 0xff));
+ break;
default:
str = phex_nz (l, sizeof (l));
break;
diff --git a/gdbsupport/selftest.cc b/gdbsupport/selftest.cc
index 466d7cfeab5..1b862bb9ce3 100644
--- a/gdbsupport/selftest.cc
+++ b/gdbsupport/selftest.cc
@@ -20,16 +20,20 @@
#include "common-exceptions.h"
#include "common-debug.h"
#include "selftest.h"
-#include <map>
#include <functional>
namespace selftests
{
-/* All the tests that have been registered. Using an std::map allows keeping
+/* All the tests that have been registered. Using an std::set allows keeping
the order of tests stable and easily looking up whether a test name
exists. */
-static std::map<std::string, std::function<void(void)>> tests;
+static selftests_registry tests;
+
+/* Set of callback functions used to register selftests after GDB is fully
+ initialized. */
+
+static std::vector<selftests_generator> lazy_generators;
/* See selftest.h. */
@@ -38,9 +42,17 @@ register_test (const std::string &name,
std::function<void(void)> function)
{
/* Check that no test with this name already exist. */
- gdb_assert (tests.find (name) == tests.end ());
+ auto status = tests.emplace (name, std::move (function));
+ if (!status.second)
+ gdb_assert_not_reached ("Test already registered");
+}
- tests[name] = function;
+/* See selftest.h. */
+
+void
+add_lazy_generator (selftests_generator generator)
+{
+ lazy_generators.push_back (std::move (generator));
}
/* See selftest.h. */
@@ -63,10 +75,8 @@ run_tests (gdb::array_view<const char *const> filters, bool verbose)
int ran = 0, failed = 0;
run_verbose_ = verbose;
- for (const auto &pair : tests)
+ for (const auto &test : all_selftests ())
{
- const std::string &name = pair.first;
- const auto &test = pair.second;
bool run = false;
if (filters.empty ())
@@ -75,7 +85,7 @@ run_tests (gdb::array_view<const char *const> filters, bool verbose)
{
for (const char *filter : filters)
{
- if (name.find (filter) != std::string::npos)
+ if (test.name.find (filter) != std::string::npos)
run = true;
}
}
@@ -85,9 +95,9 @@ run_tests (gdb::array_view<const char *const> filters, bool verbose)
try
{
- debug_printf (_("Running selftest %s.\n"), name.c_str ());
+ debug_printf (_("Running selftest %s.\n"), test.name.c_str ());
++ran;
- test ();
+ test.test ();
}
catch (const gdb_exception_error &ex)
{
@@ -104,10 +114,18 @@ run_tests (gdb::array_view<const char *const> filters, bool verbose)
/* See selftest.h. */
-void for_each_selftest (for_each_selftest_ftype func)
+selftests_range
+all_selftests ()
{
- for (const auto &pair : tests)
- func (pair.first);
+ /* Execute any function which might still want to register tests. Once each
+ function has been executed, clear lazy_generators to ensure that
+ callback functions are only executed once. */
+ for (const auto &generator : lazy_generators)
+ for (selftest &test : generator ())
+ register_test (std::move (test.name), std::move (test.test));
+ lazy_generators.clear ();
+
+ return selftests_range (tests.cbegin (), tests.cend ());
}
} // namespace selftests
diff --git a/gdbsupport/selftest.h b/gdbsupport/selftest.h
index 3c343e1a761..661431dbfca 100644
--- a/gdbsupport/selftest.h
+++ b/gdbsupport/selftest.h
@@ -21,6 +21,9 @@
#include "gdbsupport/array-view.h"
#include "gdbsupport/function-view.h"
+#include "gdbsupport/iterator-range.h"
+#include <set>
+#include <vector>
/* A test is just a function that does some checks and throws an
exception if something has gone wrong. */
@@ -28,6 +31,28 @@
namespace selftests
{
+/* Selftests are registered under a unique name. */
+
+struct selftest
+{
+ selftest (std::string name, std::function<void (void)> test)
+ : name { std::move (name) }, test { std::move (test) }
+ { }
+ bool operator< (const selftest &rhs) const
+ { return name < rhs.name; }
+
+ std::string name;
+ std::function<void (void)> test;
+};
+
+/* Type of the container of all the registered selftests. */
+using selftests_registry = std::set<selftest>;
+using selftests_range = iterator_range<selftests_registry::const_iterator>;
+
+/* Create a range to iterate over all registered tests. */
+
+selftests_range all_selftests ();
+
/* True if selftest should run verbosely. */
extern bool run_verbose ();
@@ -37,6 +62,16 @@ extern bool run_verbose ();
extern void register_test (const std::string &name,
std::function<void(void)> function);
+/* A selftest generator is a callback function used to delay the generation
+ of selftests. */
+
+using selftests_generator = std::function<std::vector<selftest> (void)>;
+
+/* Register a function which can lazily register selftests once GDB is fully
+ initialized. */
+
+extern void add_lazy_generator (selftests_generator generator);
+
/* Run all the self tests. This print a message describing the number
of test and the number of failures.
@@ -48,13 +83,6 @@ extern void run_tests (gdb::array_view<const char *const> filters,
/* Reset GDB or GDBserver's internal state. */
extern void reset ();
-
-using for_each_selftest_ftype
- = gdb::function_view<void(const std::string &name)>;
-
-/* Call FUNC for each registered selftest. */
-
-extern void for_each_selftest (for_each_selftest_ftype func);
}
/* Check that VALUE is true, and, if not, throw an exception. */
diff --git a/gdbsupport/thread-pool.cc b/gdbsupport/thread-pool.cc
index ce19ef23af5..3674e910f1d 100644
--- a/gdbsupport/thread-pool.cc
+++ b/gdbsupport/thread-pool.cc
@@ -18,10 +18,10 @@
along with this program. If not, see <http://www.gnu.org/licenses/>. */
#include "common-defs.h"
+#include "gdbsupport/thread-pool.h"
#if CXX_STD_THREAD
-#include "gdbsupport/thread-pool.h"
#include "gdbsupport/alt-stack.h"
#include "gdbsupport/block-signals.h"
#include <algorithm>
@@ -46,14 +46,15 @@
difference. */
ATTRIBUTE_UNUSED static void
-set_thread_name (int (*set_name) (pthread_t, const char *, void *),
- const char *name)
+do_set_thread_name (int (*set_name) (pthread_t, const char *, void *),
+ const char *name)
{
set_name (pthread_self (), "%s", const_cast<char *> (name));
}
ATTRIBUTE_UNUSED static void
-set_thread_name (int (*set_name) (pthread_t, const char *), const char *name)
+do_set_thread_name (int (*set_name) (pthread_t, const char *),
+ const char *name)
{
set_name (pthread_self (), name);
}
@@ -61,12 +62,70 @@ set_thread_name (int (*set_name) (pthread_t, const char *), const char *name)
/* The macOS man page says that pthread_setname_np returns "void", but
the headers actually declare it returning "int". */
ATTRIBUTE_UNUSED static void
-set_thread_name (int (*set_name) (const char *), const char *name)
+do_set_thread_name (int (*set_name) (const char *), const char *name)
{
set_name (name);
}
-#endif /* USE_PTHREAD_SETNAME_NP */
+static void
+set_thread_name (const char *name)
+{
+ do_set_thread_name (pthread_setname_np, name);
+}
+
+#elif defined (USE_WIN32API)
+
+#include <windows.h>
+
+typedef HRESULT WINAPI (SetThreadDescription_ftype) (HANDLE, PCWSTR);
+static SetThreadDescription_ftype *dyn_SetThreadDescription;
+static bool initialized;
+
+static void
+init_windows ()
+{
+ initialized = true;
+
+ HMODULE hm = LoadLibrary (TEXT ("kernel32.dll"));
+ if (hm)
+ dyn_SetThreadDescription
+ = (SetThreadDescription_ftype *) GetProcAddress (hm,
+ "SetThreadDescription");
+
+ /* On some versions of Windows, this function is only available in
+ KernelBase.dll, not kernel32.dll. */
+ if (dyn_SetThreadDescription == nullptr)
+ {
+ hm = LoadLibrary (TEXT ("KernelBase.dll"));
+ if (hm)
+ dyn_SetThreadDescription
+ = (SetThreadDescription_ftype *) GetProcAddress (hm,
+ "SetThreadDescription");
+ }
+}
+
+static void
+do_set_thread_name (const wchar_t *name)
+{
+ if (!initialized)
+ init_windows ();
+
+ if (dyn_SetThreadDescription != nullptr)
+ dyn_SetThreadDescription (GetCurrentThread (), name);
+}
+
+#define set_thread_name(NAME) do_set_thread_name (L ## NAME)
+
+#else /* USE_WIN32API */
+
+static void
+set_thread_name (const char *name)
+{
+}
+
+#endif
+
+#endif /* CXX_STD_THREAD */
namespace gdb
{
@@ -93,6 +152,7 @@ thread_pool::~thread_pool ()
void
thread_pool::set_thread_count (size_t num_threads)
{
+#if CXX_STD_THREAD
std::lock_guard<std::mutex> guard (m_tasks_mutex);
/* If the new size is larger, start some new threads. */
@@ -127,36 +187,39 @@ thread_pool::set_thread_count (size_t num_threads)
}
m_thread_count = num_threads;
+#else
+ /* No threads available, simply ignore the request. */
+#endif /* CXX_STD_THREAD */
}
-std::future<void>
-thread_pool::post_task (std::function<void ()> &&func)
+void
+thread_pool::do_post_task (std::packaged_task<void ()> &&func)
{
std::packaged_task<void ()> t (std::move (func));
- std::future<void> f = t.get_future ();
- if (m_thread_count == 0)
- {
- /* Just execute it now. */
- t ();
- }
- else
+#if CXX_STD_THREAD
+ if (m_thread_count != 0)
{
std::lock_guard<std::mutex> guard (m_tasks_mutex);
m_tasks.emplace (std::move (t));
m_tasks_cv.notify_one ();
}
- return f;
+ else
+#endif
+ {
+ /* Just execute it now. */
+ t ();
+ }
}
+#if CXX_STD_THREAD
+
void
thread_pool::thread_function ()
{
-#ifdef USE_PTHREAD_SETNAME_NP
/* This must be done here, because on macOS one can only set the
name of the current thread. */
- set_thread_name (pthread_setname_np, "gdb worker");
-#endif
+ set_thread_name ("gdb worker");
/* Ensure that SIGSEGV is delivered to an alternate signal
stack. */
@@ -164,7 +227,7 @@ thread_pool::thread_function ()
while (true)
{
- optional<task> t;
+ optional<task_t> t;
{
/* We want to hold the lock while examining the task list, but
@@ -182,6 +245,6 @@ thread_pool::thread_function ()
}
}
-}
-
#endif /* CXX_STD_THREAD */
+
+} /* namespace gdb */
diff --git a/gdbsupport/thread-pool.h b/gdbsupport/thread-pool.h
index 68210664525..5e203fd896c 100644
--- a/gdbsupport/thread-pool.h
+++ b/gdbsupport/thread-pool.h
@@ -21,11 +21,13 @@
#define GDBSUPPORT_THREAD_POOL_H
#include <queue>
-#include <thread>
#include <vector>
#include <functional>
+#if CXX_STD_THREAD
+#include <thread>
#include <mutex>
#include <condition_variable>
+#endif
#include <future>
#include "gdbsupport/gdb_optional.h"
@@ -53,36 +55,63 @@ public:
/* Return the number of executing threads. */
size_t thread_count () const
{
+#if CXX_STD_THREAD
return m_thread_count;
+#else
+ return 0;
+#endif
+ }
+
+ /* Post a task to the thread pool. A future is returned, which can
+ be used to wait for the result. */
+ std::future<void> post_task (std::function<void ()> &&func)
+ {
+ std::packaged_task<void ()> task (std::move (func));
+ std::future<void> result = task.get_future ();
+ do_post_task (std::packaged_task<void ()> (std::move (task)));
+ return result;
}
/* Post a task to the thread pool. A future is returned, which can
be used to wait for the result. */
- std::future<void> post_task (std::function<void ()> &&func);
+ template<typename T>
+ std::future<T> post_task (std::function<T ()> &&func)
+ {
+ std::packaged_task<T ()> task (std::move (func));
+ std::future<T> result = task.get_future ();
+ do_post_task (std::packaged_task<void ()> (std::move (task)));
+ return result;
+ }
private:
thread_pool () = default;
+#if CXX_STD_THREAD
/* The callback for each worker thread. */
void thread_function ();
+ /* Post a task to the thread pool. A future is returned, which can
+ be used to wait for the result. */
+ void do_post_task (std::packaged_task<void ()> &&func);
+
/* The current thread count. */
size_t m_thread_count = 0;
/* A convenience typedef for the type of a task. */
- typedef std::packaged_task<void ()> task;
+ typedef std::packaged_task<void ()> task_t;
/* The tasks that have not been processed yet. An optional is used
to represent a task. If the optional is empty, then this means
that the receiving thread should terminate. If the optional is
non-empty, then it is an actual task to evaluate. */
- std::queue<optional<task>> m_tasks;
+ std::queue<optional<task_t>> m_tasks;
/* A condition variable and mutex that are used for communication
between the main thread and the worker threads. */
std::condition_variable m_tasks_cv;
std::mutex m_tasks_mutex;
+#endif /* CXX_STD_THREAD */
};
}
diff --git a/gdbsupport/warning.m4 b/gdbsupport/warning.m4
index a6b06e880c2..e9025db7ece 100644
--- a/gdbsupport/warning.m4
+++ b/gdbsupport/warning.m4
@@ -51,10 +51,16 @@ build_warnings="-Wall -Wpointer-arith \
-Wdeprecated-copy-dtor \
-Wredundant-move \
-Wmissing-declarations \
--Wmissing-prototypes \
-Wstrict-null-sentinel \
"
+# The -Wmissing-prototypes flag will be accepted by GCC, but results
+# in a warning being printed about the flag not being valid for C++,
+# this is something to do with using ccache, and argument ordering.
+if test "$GDB_COMPILER_TYPE" != gcc; then
+ build_warnings="$build_warnings -Wmissing-prototypes"
+fi
+
case "${host}" in
*-*-mingw32*)
# Enable -Wno-format by default when using gcc on mingw since many
diff --git a/gnulib/Makefile.in b/gnulib/Makefile.in
index af264c3c12d..6a2091627d2 100644
--- a/gnulib/Makefile.in
+++ b/gnulib/Makefile.in
@@ -14,7 +14,7 @@
@SET_MAKE@
-# Copyright (C) 2019-2021 Free Software Foundation, Inc.
+# Copyright (C) 2019-2022 Free Software Foundation, Inc.
# This file is part of GDB.
@@ -126,7 +126,7 @@ am__aclocal_m4_deps = $(top_srcdir)/../config/depstand.m4 \
$(top_srcdir)/import/m4/close.m4 \
$(top_srcdir)/import/m4/closedir.m4 \
$(top_srcdir)/import/m4/codeset.m4 \
- $(top_srcdir)/import/m4/ctype.m4 \
+ $(top_srcdir)/import/m4/ctype_h.m4 \
$(top_srcdir)/import/m4/d-ino.m4 \
$(top_srcdir)/import/m4/d-type.m4 \
$(top_srcdir)/import/m4/dirent_h.m4 \
@@ -272,6 +272,7 @@ am__aclocal_m4_deps = $(top_srcdir)/../config/depstand.m4 \
$(top_srcdir)/import/m4/time_r.m4 \
$(top_srcdir)/import/m4/unistd-safer.m4 \
$(top_srcdir)/import/m4/unistd_h.m4 \
+ $(top_srcdir)/import/m4/vararrays.m4 \
$(top_srcdir)/import/m4/visibility.m4 \
$(top_srcdir)/import/m4/warn-on-use.m4 \
$(top_srcdir)/import/m4/wchar_h.m4 \
@@ -280,6 +281,7 @@ am__aclocal_m4_deps = $(top_srcdir)/../config/depstand.m4 \
$(top_srcdir)/import/m4/wint_t.m4 \
$(top_srcdir)/import/m4/wmemchr.m4 \
$(top_srcdir)/import/m4/wmempcpy.m4 \
+ $(top_srcdir)/import/m4/year2038.m4 \
$(top_srcdir)/import/m4/zzgnulib.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -390,471 +392,483 @@ FNMATCH_H = @FNMATCH_H@
FREXPL_LIBM = @FREXPL_LIBM@
FREXP_LIBM = @FREXP_LIBM@
GLOB_H = @GLOB_H@
-GNULIB_ACCEPT = @GNULIB_ACCEPT@
-GNULIB_ACCEPT4 = @GNULIB_ACCEPT4@
-GNULIB_ACCESS = @GNULIB_ACCESS@
-GNULIB_ACOSF = @GNULIB_ACOSF@
-GNULIB_ACOSL = @GNULIB_ACOSL@
-GNULIB_ALIGNED_ALLOC = @GNULIB_ALIGNED_ALLOC@
-GNULIB_ALPHASORT = @GNULIB_ALPHASORT@
-GNULIB_ASINF = @GNULIB_ASINF@
-GNULIB_ASINL = @GNULIB_ASINL@
-GNULIB_ATAN2F = @GNULIB_ATAN2F@
-GNULIB_ATANF = @GNULIB_ATANF@
-GNULIB_ATANL = @GNULIB_ATANL@
-GNULIB_ATOLL = @GNULIB_ATOLL@
-GNULIB_BIND = @GNULIB_BIND@
-GNULIB_BTOWC = @GNULIB_BTOWC@
-GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@
-GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@
-GNULIB_CBRT = @GNULIB_CBRT@
-GNULIB_CBRTF = @GNULIB_CBRTF@
-GNULIB_CBRTL = @GNULIB_CBRTL@
-GNULIB_CEIL = @GNULIB_CEIL@
-GNULIB_CEILF = @GNULIB_CEILF@
-GNULIB_CEILL = @GNULIB_CEILL@
-GNULIB_CHDIR = @GNULIB_CHDIR@
-GNULIB_CHOWN = @GNULIB_CHOWN@
-GNULIB_CLOSE = @GNULIB_CLOSE@
-GNULIB_CLOSEDIR = @GNULIB_CLOSEDIR@
-GNULIB_CONNECT = @GNULIB_CONNECT@
-GNULIB_COPYSIGN = @GNULIB_COPYSIGN@
-GNULIB_COPYSIGNF = @GNULIB_COPYSIGNF@
-GNULIB_COPYSIGNL = @GNULIB_COPYSIGNL@
-GNULIB_COPY_FILE_RANGE = @GNULIB_COPY_FILE_RANGE@
-GNULIB_COSF = @GNULIB_COSF@
-GNULIB_COSHF = @GNULIB_COSHF@
-GNULIB_COSL = @GNULIB_COSL@
-GNULIB_CREAT = @GNULIB_CREAT@
-GNULIB_CTIME = @GNULIB_CTIME@
-GNULIB_DIRFD = @GNULIB_DIRFD@
-GNULIB_DPRINTF = @GNULIB_DPRINTF@
-GNULIB_DUP = @GNULIB_DUP@
-GNULIB_DUP2 = @GNULIB_DUP2@
-GNULIB_DUP3 = @GNULIB_DUP3@
-GNULIB_DUPLOCALE = @GNULIB_DUPLOCALE@
-GNULIB_ENVIRON = @GNULIB_ENVIRON@
-GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@
-GNULIB_EXECL = @GNULIB_EXECL@
-GNULIB_EXECLE = @GNULIB_EXECLE@
-GNULIB_EXECLP = @GNULIB_EXECLP@
-GNULIB_EXECV = @GNULIB_EXECV@
-GNULIB_EXECVE = @GNULIB_EXECVE@
-GNULIB_EXECVP = @GNULIB_EXECVP@
-GNULIB_EXECVPE = @GNULIB_EXECVPE@
-GNULIB_EXP2 = @GNULIB_EXP2@
-GNULIB_EXP2F = @GNULIB_EXP2F@
-GNULIB_EXP2L = @GNULIB_EXP2L@
-GNULIB_EXPF = @GNULIB_EXPF@
-GNULIB_EXPL = @GNULIB_EXPL@
-GNULIB_EXPLICIT_BZERO = @GNULIB_EXPLICIT_BZERO@
-GNULIB_EXPM1 = @GNULIB_EXPM1@
-GNULIB_EXPM1F = @GNULIB_EXPM1F@
-GNULIB_EXPM1L = @GNULIB_EXPM1L@
-GNULIB_FABSF = @GNULIB_FABSF@
-GNULIB_FABSL = @GNULIB_FABSL@
-GNULIB_FACCESSAT = @GNULIB_FACCESSAT@
-GNULIB_FCHDIR = @GNULIB_FCHDIR@
-GNULIB_FCHMODAT = @GNULIB_FCHMODAT@
-GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@
-GNULIB_FCLOSE = @GNULIB_FCLOSE@
-GNULIB_FCNTL = @GNULIB_FCNTL@
-GNULIB_FDATASYNC = @GNULIB_FDATASYNC@
-GNULIB_FDOPEN = @GNULIB_FDOPEN@
-GNULIB_FDOPENDIR = @GNULIB_FDOPENDIR@
-GNULIB_FFLUSH = @GNULIB_FFLUSH@
-GNULIB_FFS = @GNULIB_FFS@
-GNULIB_FFSL = @GNULIB_FFSL@
-GNULIB_FFSLL = @GNULIB_FFSLL@
-GNULIB_FGETC = @GNULIB_FGETC@
-GNULIB_FGETS = @GNULIB_FGETS@
-GNULIB_FLOOR = @GNULIB_FLOOR@
-GNULIB_FLOORF = @GNULIB_FLOORF@
-GNULIB_FLOORL = @GNULIB_FLOORL@
-GNULIB_FMA = @GNULIB_FMA@
-GNULIB_FMAF = @GNULIB_FMAF@
-GNULIB_FMAL = @GNULIB_FMAL@
-GNULIB_FMOD = @GNULIB_FMOD@
-GNULIB_FMODF = @GNULIB_FMODF@
-GNULIB_FMODL = @GNULIB_FMODL@
-GNULIB_FNMATCH = @GNULIB_FNMATCH@
-GNULIB_FOPEN = @GNULIB_FOPEN@
-GNULIB_FPRINTF = @GNULIB_FPRINTF@
-GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@
-GNULIB_FPURGE = @GNULIB_FPURGE@
-GNULIB_FPUTC = @GNULIB_FPUTC@
-GNULIB_FPUTS = @GNULIB_FPUTS@
-GNULIB_FREAD = @GNULIB_FREAD@
-GNULIB_FREE_POSIX = @GNULIB_FREE_POSIX@
-GNULIB_FREOPEN = @GNULIB_FREOPEN@
-GNULIB_FREXP = @GNULIB_FREXP@
-GNULIB_FREXPF = @GNULIB_FREXPF@
-GNULIB_FREXPL = @GNULIB_FREXPL@
-GNULIB_FSCANF = @GNULIB_FSCANF@
-GNULIB_FSEEK = @GNULIB_FSEEK@
-GNULIB_FSEEKO = @GNULIB_FSEEKO@
-GNULIB_FSTAT = @GNULIB_FSTAT@
-GNULIB_FSTATAT = @GNULIB_FSTATAT@
-GNULIB_FSYNC = @GNULIB_FSYNC@
-GNULIB_FTELL = @GNULIB_FTELL@
-GNULIB_FTELLO = @GNULIB_FTELLO@
-GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@
-GNULIB_FUTIMENS = @GNULIB_FUTIMENS@
-GNULIB_FWRITE = @GNULIB_FWRITE@
-GNULIB_GETADDRINFO = @GNULIB_GETADDRINFO@
-GNULIB_GETC = @GNULIB_GETC@
-GNULIB_GETCHAR = @GNULIB_GETCHAR@
-GNULIB_GETCWD = @GNULIB_GETCWD@
-GNULIB_GETDELIM = @GNULIB_GETDELIM@
-GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@
-GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@
-GNULIB_GETENTROPY = @GNULIB_GETENTROPY@
-GNULIB_GETGROUPS = @GNULIB_GETGROUPS@
-GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@
-GNULIB_GETLINE = @GNULIB_GETLINE@
-GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@
-GNULIB_GETLOGIN = @GNULIB_GETLOGIN@
-GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@
-GNULIB_GETOPT_POSIX = @GNULIB_GETOPT_POSIX@
-GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@
-GNULIB_GETPASS = @GNULIB_GETPASS@
-GNULIB_GETPEERNAME = @GNULIB_GETPEERNAME@
-GNULIB_GETRANDOM = @GNULIB_GETRANDOM@
-GNULIB_GETSOCKNAME = @GNULIB_GETSOCKNAME@
-GNULIB_GETSOCKOPT = @GNULIB_GETSOCKOPT@
-GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@
+GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@
+GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@
+GL_GNULIB_ACCEPT = @GL_GNULIB_ACCEPT@
+GL_GNULIB_ACCEPT4 = @GL_GNULIB_ACCEPT4@
+GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@
+GL_GNULIB_ACOSF = @GL_GNULIB_ACOSF@
+GL_GNULIB_ACOSL = @GL_GNULIB_ACOSL@
+GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@
+GL_GNULIB_ALPHASORT = @GL_GNULIB_ALPHASORT@
+GL_GNULIB_ASINF = @GL_GNULIB_ASINF@
+GL_GNULIB_ASINL = @GL_GNULIB_ASINL@
+GL_GNULIB_ATAN2F = @GL_GNULIB_ATAN2F@
+GL_GNULIB_ATANF = @GL_GNULIB_ATANF@
+GL_GNULIB_ATANL = @GL_GNULIB_ATANL@
+GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@
+GL_GNULIB_BIND = @GL_GNULIB_BIND@
+GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@
+GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@
+GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@
+GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@
+GL_GNULIB_CBRT = @GL_GNULIB_CBRT@
+GL_GNULIB_CBRTF = @GL_GNULIB_CBRTF@
+GL_GNULIB_CBRTL = @GL_GNULIB_CBRTL@
+GL_GNULIB_CEIL = @GL_GNULIB_CEIL@
+GL_GNULIB_CEILF = @GL_GNULIB_CEILF@
+GL_GNULIB_CEILL = @GL_GNULIB_CEILL@
+GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@
+GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@
+GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@
+GL_GNULIB_CLOSEDIR = @GL_GNULIB_CLOSEDIR@
+GL_GNULIB_CONNECT = @GL_GNULIB_CONNECT@
+GL_GNULIB_COPYSIGN = @GL_GNULIB_COPYSIGN@
+GL_GNULIB_COPYSIGNF = @GL_GNULIB_COPYSIGNF@
+GL_GNULIB_COPYSIGNL = @GL_GNULIB_COPYSIGNL@
+GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@
+GL_GNULIB_COSF = @GL_GNULIB_COSF@
+GL_GNULIB_COSHF = @GL_GNULIB_COSHF@
+GL_GNULIB_COSL = @GL_GNULIB_COSL@
+GL_GNULIB_CREAT = @GL_GNULIB_CREAT@
+GL_GNULIB_CTIME = @GL_GNULIB_CTIME@
+GL_GNULIB_DIRFD = @GL_GNULIB_DIRFD@
+GL_GNULIB_DPRINTF = @GL_GNULIB_DPRINTF@
+GL_GNULIB_DUP = @GL_GNULIB_DUP@
+GL_GNULIB_DUP2 = @GL_GNULIB_DUP2@
+GL_GNULIB_DUP3 = @GL_GNULIB_DUP3@
+GL_GNULIB_DUPLOCALE = @GL_GNULIB_DUPLOCALE@
+GL_GNULIB_ENVIRON = @GL_GNULIB_ENVIRON@
+GL_GNULIB_EUIDACCESS = @GL_GNULIB_EUIDACCESS@
+GL_GNULIB_EXECL = @GL_GNULIB_EXECL@
+GL_GNULIB_EXECLE = @GL_GNULIB_EXECLE@
+GL_GNULIB_EXECLP = @GL_GNULIB_EXECLP@
+GL_GNULIB_EXECV = @GL_GNULIB_EXECV@
+GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@
+GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@
+GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@
+GL_GNULIB_EXP2 = @GL_GNULIB_EXP2@
+GL_GNULIB_EXP2F = @GL_GNULIB_EXP2F@
+GL_GNULIB_EXP2L = @GL_GNULIB_EXP2L@
+GL_GNULIB_EXPF = @GL_GNULIB_EXPF@
+GL_GNULIB_EXPL = @GL_GNULIB_EXPL@
+GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@
+GL_GNULIB_EXPM1 = @GL_GNULIB_EXPM1@
+GL_GNULIB_EXPM1F = @GL_GNULIB_EXPM1F@
+GL_GNULIB_EXPM1L = @GL_GNULIB_EXPM1L@
+GL_GNULIB_FABSF = @GL_GNULIB_FABSF@
+GL_GNULIB_FABSL = @GL_GNULIB_FABSL@
+GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@
+GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@
+GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@
+GL_GNULIB_FCHOWNAT = @GL_GNULIB_FCHOWNAT@
+GL_GNULIB_FCLOSE = @GL_GNULIB_FCLOSE@
+GL_GNULIB_FCNTL = @GL_GNULIB_FCNTL@
+GL_GNULIB_FDATASYNC = @GL_GNULIB_FDATASYNC@
+GL_GNULIB_FDOPEN = @GL_GNULIB_FDOPEN@
+GL_GNULIB_FDOPENDIR = @GL_GNULIB_FDOPENDIR@
+GL_GNULIB_FFLUSH = @GL_GNULIB_FFLUSH@
+GL_GNULIB_FFS = @GL_GNULIB_FFS@
+GL_GNULIB_FFSL = @GL_GNULIB_FFSL@
+GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@
+GL_GNULIB_FGETC = @GL_GNULIB_FGETC@
+GL_GNULIB_FGETS = @GL_GNULIB_FGETS@
+GL_GNULIB_FLOOR = @GL_GNULIB_FLOOR@
+GL_GNULIB_FLOORF = @GL_GNULIB_FLOORF@
+GL_GNULIB_FLOORL = @GL_GNULIB_FLOORL@
+GL_GNULIB_FMA = @GL_GNULIB_FMA@
+GL_GNULIB_FMAF = @GL_GNULIB_FMAF@
+GL_GNULIB_FMAL = @GL_GNULIB_FMAL@
+GL_GNULIB_FMOD = @GL_GNULIB_FMOD@
+GL_GNULIB_FMODF = @GL_GNULIB_FMODF@
+GL_GNULIB_FMODL = @GL_GNULIB_FMODL@
+GL_GNULIB_FNMATCH = @GL_GNULIB_FNMATCH@
+GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@
+GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@
+GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@
+GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@
+GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@
+GL_GNULIB_FPUTC = @GL_GNULIB_FPUTC@
+GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@
+GL_GNULIB_FREAD = @GL_GNULIB_FREAD@
+GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@
+GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@
+GL_GNULIB_FREXP = @GL_GNULIB_FREXP@
+GL_GNULIB_FREXPF = @GL_GNULIB_FREXPF@
+GL_GNULIB_FREXPL = @GL_GNULIB_FREXPL@
+GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@
+GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@
+GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@
+GL_GNULIB_FSTAT = @GL_GNULIB_FSTAT@
+GL_GNULIB_FSTATAT = @GL_GNULIB_FSTATAT@
+GL_GNULIB_FSYNC = @GL_GNULIB_FSYNC@
+GL_GNULIB_FTELL = @GL_GNULIB_FTELL@
+GL_GNULIB_FTELLO = @GL_GNULIB_FTELLO@
+GL_GNULIB_FTRUNCATE = @GL_GNULIB_FTRUNCATE@
+GL_GNULIB_FUTIMENS = @GL_GNULIB_FUTIMENS@
+GL_GNULIB_FWRITE = @GL_GNULIB_FWRITE@
+GL_GNULIB_GETADDRINFO = @GL_GNULIB_GETADDRINFO@
+GL_GNULIB_GETC = @GL_GNULIB_GETC@
+GL_GNULIB_GETCHAR = @GL_GNULIB_GETCHAR@
+GL_GNULIB_GETCWD = @GL_GNULIB_GETCWD@
+GL_GNULIB_GETDELIM = @GL_GNULIB_GETDELIM@
+GL_GNULIB_GETDOMAINNAME = @GL_GNULIB_GETDOMAINNAME@
+GL_GNULIB_GETDTABLESIZE = @GL_GNULIB_GETDTABLESIZE@
+GL_GNULIB_GETENTROPY = @GL_GNULIB_GETENTROPY@
+GL_GNULIB_GETGROUPS = @GL_GNULIB_GETGROUPS@
+GL_GNULIB_GETHOSTNAME = @GL_GNULIB_GETHOSTNAME@
+GL_GNULIB_GETLINE = @GL_GNULIB_GETLINE@
+GL_GNULIB_GETLOADAVG = @GL_GNULIB_GETLOADAVG@
+GL_GNULIB_GETLOGIN = @GL_GNULIB_GETLOGIN@
+GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@
+GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@
+GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@
+GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@
+GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@
+GL_GNULIB_GETPEERNAME = @GL_GNULIB_GETPEERNAME@
+GL_GNULIB_GETRANDOM = @GL_GNULIB_GETRANDOM@
+GL_GNULIB_GETSOCKNAME = @GL_GNULIB_GETSOCKNAME@
+GL_GNULIB_GETSOCKOPT = @GL_GNULIB_GETSOCKOPT@
+GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@
+GL_GNULIB_GETTIMEOFDAY = @GL_GNULIB_GETTIMEOFDAY@
+GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@
+GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@
+GL_GNULIB_GLOB = @GL_GNULIB_GLOB@
+GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@
+GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@
+GL_GNULIB_HYPOT = @GL_GNULIB_HYPOT@
+GL_GNULIB_HYPOTF = @GL_GNULIB_HYPOTF@
+GL_GNULIB_HYPOTL = @GL_GNULIB_HYPOTL@
+GL_GNULIB_ILOGB = @GL_GNULIB_ILOGB@
+GL_GNULIB_ILOGBF = @GL_GNULIB_ILOGBF@
+GL_GNULIB_ILOGBL = @GL_GNULIB_ILOGBL@
+GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@
+GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@
+GL_GNULIB_INET_NTOP = @GL_GNULIB_INET_NTOP@
+GL_GNULIB_INET_PTON = @GL_GNULIB_INET_PTON@
+GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@
+GL_GNULIB_ISBLANK = @GL_GNULIB_ISBLANK@
+GL_GNULIB_ISFINITE = @GL_GNULIB_ISFINITE@
+GL_GNULIB_ISINF = @GL_GNULIB_ISINF@
+GL_GNULIB_ISNAN = @GL_GNULIB_ISNAN@
+GL_GNULIB_ISNAND = @GL_GNULIB_ISNAND@
+GL_GNULIB_ISNANF = @GL_GNULIB_ISNANF@
+GL_GNULIB_ISNANL = @GL_GNULIB_ISNANL@
+GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@
+GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@
+GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@
+GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@
+GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@
+GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@
+GL_GNULIB_LDEXPF = @GL_GNULIB_LDEXPF@
+GL_GNULIB_LDEXPL = @GL_GNULIB_LDEXPL@
+GL_GNULIB_LINK = @GL_GNULIB_LINK@
+GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@
+GL_GNULIB_LISTEN = @GL_GNULIB_LISTEN@
+GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@
+GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@
+GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@
+GL_GNULIB_LOG = @GL_GNULIB_LOG@
+GL_GNULIB_LOG10 = @GL_GNULIB_LOG10@
+GL_GNULIB_LOG10F = @GL_GNULIB_LOG10F@
+GL_GNULIB_LOG10L = @GL_GNULIB_LOG10L@
+GL_GNULIB_LOG1P = @GL_GNULIB_LOG1P@
+GL_GNULIB_LOG1PF = @GL_GNULIB_LOG1PF@
+GL_GNULIB_LOG1PL = @GL_GNULIB_LOG1PL@
+GL_GNULIB_LOG2 = @GL_GNULIB_LOG2@
+GL_GNULIB_LOG2F = @GL_GNULIB_LOG2F@
+GL_GNULIB_LOG2L = @GL_GNULIB_LOG2L@
+GL_GNULIB_LOGB = @GL_GNULIB_LOGB@
+GL_GNULIB_LOGBF = @GL_GNULIB_LOGBF@
+GL_GNULIB_LOGBL = @GL_GNULIB_LOGBL@
+GL_GNULIB_LOGF = @GL_GNULIB_LOGF@
+GL_GNULIB_LOGL = @GL_GNULIB_LOGL@
+GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@
+GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@
+GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@
+GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@
+GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@
+GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@
+GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@
+GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@
+GL_GNULIB_MBSCHR = @GL_GNULIB_MBSCHR@
+GL_GNULIB_MBSCSPN = @GL_GNULIB_MBSCSPN@
+GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@
+GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@
+GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@
+GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@
+GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@
+GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@
+GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@
+GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@
+GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@
+GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@
+GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@
+GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@
+GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@
+GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@
+GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@
+GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@
+GL_GNULIB_MDA_CHMOD = @GL_GNULIB_MDA_CHMOD@
+GL_GNULIB_MDA_CLOSE = @GL_GNULIB_MDA_CLOSE@
+GL_GNULIB_MDA_CREAT = @GL_GNULIB_MDA_CREAT@
+GL_GNULIB_MDA_DUP = @GL_GNULIB_MDA_DUP@
+GL_GNULIB_MDA_DUP2 = @GL_GNULIB_MDA_DUP2@
+GL_GNULIB_MDA_ECVT = @GL_GNULIB_MDA_ECVT@
+GL_GNULIB_MDA_EXECL = @GL_GNULIB_MDA_EXECL@
+GL_GNULIB_MDA_EXECLE = @GL_GNULIB_MDA_EXECLE@
+GL_GNULIB_MDA_EXECLP = @GL_GNULIB_MDA_EXECLP@
+GL_GNULIB_MDA_EXECV = @GL_GNULIB_MDA_EXECV@
+GL_GNULIB_MDA_EXECVE = @GL_GNULIB_MDA_EXECVE@
+GL_GNULIB_MDA_EXECVP = @GL_GNULIB_MDA_EXECVP@
+GL_GNULIB_MDA_EXECVPE = @GL_GNULIB_MDA_EXECVPE@
+GL_GNULIB_MDA_FCLOSEALL = @GL_GNULIB_MDA_FCLOSEALL@
+GL_GNULIB_MDA_FCVT = @GL_GNULIB_MDA_FCVT@
+GL_GNULIB_MDA_FDOPEN = @GL_GNULIB_MDA_FDOPEN@
+GL_GNULIB_MDA_FILENO = @GL_GNULIB_MDA_FILENO@
+GL_GNULIB_MDA_GCVT = @GL_GNULIB_MDA_GCVT@
+GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@
+GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@
+GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@
+GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@
+GL_GNULIB_MDA_J0 = @GL_GNULIB_MDA_J0@
+GL_GNULIB_MDA_J1 = @GL_GNULIB_MDA_J1@
+GL_GNULIB_MDA_JN = @GL_GNULIB_MDA_JN@
+GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@
+GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@
+GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@
+GL_GNULIB_MDA_MKTEMP = @GL_GNULIB_MDA_MKTEMP@
+GL_GNULIB_MDA_OPEN = @GL_GNULIB_MDA_OPEN@
+GL_GNULIB_MDA_PUTENV = @GL_GNULIB_MDA_PUTENV@
+GL_GNULIB_MDA_PUTW = @GL_GNULIB_MDA_PUTW@
+GL_GNULIB_MDA_READ = @GL_GNULIB_MDA_READ@
+GL_GNULIB_MDA_RMDIR = @GL_GNULIB_MDA_RMDIR@
+GL_GNULIB_MDA_STRDUP = @GL_GNULIB_MDA_STRDUP@
+GL_GNULIB_MDA_SWAB = @GL_GNULIB_MDA_SWAB@
+GL_GNULIB_MDA_TEMPNAM = @GL_GNULIB_MDA_TEMPNAM@
+GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@
+GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@
+GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@
+GL_GNULIB_MDA_WCSDUP = @GL_GNULIB_MDA_WCSDUP@
+GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@
+GL_GNULIB_MDA_Y0 = @GL_GNULIB_MDA_Y0@
+GL_GNULIB_MDA_Y1 = @GL_GNULIB_MDA_Y1@
+GL_GNULIB_MDA_YN = @GL_GNULIB_MDA_YN@
+GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@
+GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@
+GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@
+GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@
+GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@
+GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@
+GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@
+GL_GNULIB_MKFIFO = @GL_GNULIB_MKFIFO@
+GL_GNULIB_MKFIFOAT = @GL_GNULIB_MKFIFOAT@
+GL_GNULIB_MKNOD = @GL_GNULIB_MKNOD@
+GL_GNULIB_MKNODAT = @GL_GNULIB_MKNODAT@
+GL_GNULIB_MKOSTEMP = @GL_GNULIB_MKOSTEMP@
+GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@
+GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@
+GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@
+GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@
+GL_GNULIB_MODF = @GL_GNULIB_MODF@
+GL_GNULIB_MODFF = @GL_GNULIB_MODFF@
+GL_GNULIB_MODFL = @GL_GNULIB_MODFL@
+GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@
+GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@
+GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@
+GL_GNULIB_OBSTACK_PRINTF_POSIX = @GL_GNULIB_OBSTACK_PRINTF_POSIX@
+GL_GNULIB_OPEN = @GL_GNULIB_OPEN@
+GL_GNULIB_OPENAT = @GL_GNULIB_OPENAT@
+GL_GNULIB_OPENDIR = @GL_GNULIB_OPENDIR@
+GL_GNULIB_OVERRIDES_STRUCT_STAT = @GL_GNULIB_OVERRIDES_STRUCT_STAT@
+GL_GNULIB_PCLOSE = @GL_GNULIB_PCLOSE@
+GL_GNULIB_PERROR = @GL_GNULIB_PERROR@
+GL_GNULIB_PIPE = @GL_GNULIB_PIPE@
+GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@
+GL_GNULIB_POPEN = @GL_GNULIB_POPEN@
+GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@
+GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@
+GL_GNULIB_POWF = @GL_GNULIB_POWF@
+GL_GNULIB_PREAD = @GL_GNULIB_PREAD@
+GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@
+GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@
+GL_GNULIB_PSELECT = @GL_GNULIB_PSELECT@
+GL_GNULIB_PTHREAD_SIGMASK = @GL_GNULIB_PTHREAD_SIGMASK@
+GL_GNULIB_PTSNAME = @GL_GNULIB_PTSNAME@
+GL_GNULIB_PTSNAME_R = @GL_GNULIB_PTSNAME_R@
+GL_GNULIB_PUTC = @GL_GNULIB_PUTC@
+GL_GNULIB_PUTCHAR = @GL_GNULIB_PUTCHAR@
+GL_GNULIB_PUTENV = @GL_GNULIB_PUTENV@
+GL_GNULIB_PUTS = @GL_GNULIB_PUTS@
+GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@
+GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@
+GL_GNULIB_RAISE = @GL_GNULIB_RAISE@
+GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@
+GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@
+GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@
+GL_GNULIB_READ = @GL_GNULIB_READ@
+GL_GNULIB_READDIR = @GL_GNULIB_READDIR@
+GL_GNULIB_READLINK = @GL_GNULIB_READLINK@
+GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@
+GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@
+GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@
+GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@
+GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@
+GL_GNULIB_RECV = @GL_GNULIB_RECV@
+GL_GNULIB_RECVFROM = @GL_GNULIB_RECVFROM@
+GL_GNULIB_REMAINDER = @GL_GNULIB_REMAINDER@
+GL_GNULIB_REMAINDERF = @GL_GNULIB_REMAINDERF@
+GL_GNULIB_REMAINDERL = @GL_GNULIB_REMAINDERL@
+GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@
+GL_GNULIB_RENAME = @GL_GNULIB_RENAME@
+GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@
+GL_GNULIB_REWINDDIR = @GL_GNULIB_REWINDDIR@
+GL_GNULIB_RINT = @GL_GNULIB_RINT@
+GL_GNULIB_RINTF = @GL_GNULIB_RINTF@
+GL_GNULIB_RINTL = @GL_GNULIB_RINTL@
+GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@
+GL_GNULIB_ROUND = @GL_GNULIB_ROUND@
+GL_GNULIB_ROUNDF = @GL_GNULIB_ROUNDF@
+GL_GNULIB_ROUNDL = @GL_GNULIB_ROUNDL@
+GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@
+GL_GNULIB_SCANDIR = @GL_GNULIB_SCANDIR@
+GL_GNULIB_SCANF = @GL_GNULIB_SCANF@
+GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@
+GL_GNULIB_SELECT = @GL_GNULIB_SELECT@
+GL_GNULIB_SEND = @GL_GNULIB_SEND@
+GL_GNULIB_SENDTO = @GL_GNULIB_SENDTO@
+GL_GNULIB_SETENV = @GL_GNULIB_SETENV@
+GL_GNULIB_SETHOSTNAME = @GL_GNULIB_SETHOSTNAME@
+GL_GNULIB_SETLOCALE = @GL_GNULIB_SETLOCALE@
+GL_GNULIB_SETLOCALE_NULL = @GL_GNULIB_SETLOCALE_NULL@
+GL_GNULIB_SETSOCKOPT = @GL_GNULIB_SETSOCKOPT@
+GL_GNULIB_SHUTDOWN = @GL_GNULIB_SHUTDOWN@
+GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@
+GL_GNULIB_SIGACTION = @GL_GNULIB_SIGACTION@
+GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@
+GL_GNULIB_SIGNAL_H_SIGPIPE = @GL_GNULIB_SIGNAL_H_SIGPIPE@
+GL_GNULIB_SIGNBIT = @GL_GNULIB_SIGNBIT@
+GL_GNULIB_SIGPROCMASK = @GL_GNULIB_SIGPROCMASK@
+GL_GNULIB_SINF = @GL_GNULIB_SINF@
+GL_GNULIB_SINHF = @GL_GNULIB_SINHF@
+GL_GNULIB_SINL = @GL_GNULIB_SINL@
+GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@
+GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@
+GL_GNULIB_SOCKET = @GL_GNULIB_SOCKET@
+GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@
+GL_GNULIB_SQRTF = @GL_GNULIB_SQRTF@
+GL_GNULIB_SQRTL = @GL_GNULIB_SQRTL@
+GL_GNULIB_STAT = @GL_GNULIB_STAT@
+GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@
+GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@
+GL_GNULIB_STPCPY = @GL_GNULIB_STPCPY@
+GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@
+GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@
+GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@
+GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@
+GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@
+GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@
+GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@
+GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@
+GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@
+GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@
+GL_GNULIB_STRNLEN = @GL_GNULIB_STRNLEN@
+GL_GNULIB_STRPBRK = @GL_GNULIB_STRPBRK@
+GL_GNULIB_STRPTIME = @GL_GNULIB_STRPTIME@
+GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@
+GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@
+GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@
+GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@
+GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@
+GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@
+GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@
+GL_GNULIB_STRTOLD = @GL_GNULIB_STRTOLD@
+GL_GNULIB_STRTOLL = @GL_GNULIB_STRTOLL@
+GL_GNULIB_STRTOUL = @GL_GNULIB_STRTOUL@
+GL_GNULIB_STRTOULL = @GL_GNULIB_STRTOULL@
+GL_GNULIB_STRTOUMAX = @GL_GNULIB_STRTOUMAX@
+GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@
+GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@
+GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@
+GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@
+GL_GNULIB_TANF = @GL_GNULIB_TANF@
+GL_GNULIB_TANHF = @GL_GNULIB_TANHF@
+GL_GNULIB_TANL = @GL_GNULIB_TANL@
+GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@
+GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@
+GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@
+GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@
+GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@
+GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@
+GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@
+GL_GNULIB_TRUNC = @GL_GNULIB_TRUNC@
+GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@
+GL_GNULIB_TRUNCF = @GL_GNULIB_TRUNCF@
+GL_GNULIB_TRUNCL = @GL_GNULIB_TRUNCL@
+GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@
+GL_GNULIB_TZSET = @GL_GNULIB_TZSET@
+GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@
+GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@
+GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@
+GL_GNULIB_UNLINK = @GL_GNULIB_UNLINK@
+GL_GNULIB_UNLINKAT = @GL_GNULIB_UNLINKAT@
+GL_GNULIB_UNLOCKPT = @GL_GNULIB_UNLOCKPT@
+GL_GNULIB_UNSETENV = @GL_GNULIB_UNSETENV@
+GL_GNULIB_USLEEP = @GL_GNULIB_USLEEP@
+GL_GNULIB_UTIMENSAT = @GL_GNULIB_UTIMENSAT@
+GL_GNULIB_VASPRINTF = @GL_GNULIB_VASPRINTF@
+GL_GNULIB_VDPRINTF = @GL_GNULIB_VDPRINTF@
+GL_GNULIB_VFPRINTF = @GL_GNULIB_VFPRINTF@
+GL_GNULIB_VFPRINTF_POSIX = @GL_GNULIB_VFPRINTF_POSIX@
+GL_GNULIB_VFSCANF = @GL_GNULIB_VFSCANF@
+GL_GNULIB_VPRINTF = @GL_GNULIB_VPRINTF@
+GL_GNULIB_VPRINTF_POSIX = @GL_GNULIB_VPRINTF_POSIX@
+GL_GNULIB_VSCANF = @GL_GNULIB_VSCANF@
+GL_GNULIB_VSNPRINTF = @GL_GNULIB_VSNPRINTF@
+GL_GNULIB_VSPRINTF_POSIX = @GL_GNULIB_VSPRINTF_POSIX@
+GL_GNULIB_WAITPID = @GL_GNULIB_WAITPID@
+GL_GNULIB_WCPCPY = @GL_GNULIB_WCPCPY@
+GL_GNULIB_WCPNCPY = @GL_GNULIB_WCPNCPY@
+GL_GNULIB_WCRTOMB = @GL_GNULIB_WCRTOMB@
+GL_GNULIB_WCSCASECMP = @GL_GNULIB_WCSCASECMP@
+GL_GNULIB_WCSCAT = @GL_GNULIB_WCSCAT@
+GL_GNULIB_WCSCHR = @GL_GNULIB_WCSCHR@
+GL_GNULIB_WCSCMP = @GL_GNULIB_WCSCMP@
+GL_GNULIB_WCSCOLL = @GL_GNULIB_WCSCOLL@
+GL_GNULIB_WCSCPY = @GL_GNULIB_WCSCPY@
+GL_GNULIB_WCSCSPN = @GL_GNULIB_WCSCSPN@
+GL_GNULIB_WCSDUP = @GL_GNULIB_WCSDUP@
+GL_GNULIB_WCSFTIME = @GL_GNULIB_WCSFTIME@
+GL_GNULIB_WCSLEN = @GL_GNULIB_WCSLEN@
+GL_GNULIB_WCSNCASECMP = @GL_GNULIB_WCSNCASECMP@
+GL_GNULIB_WCSNCAT = @GL_GNULIB_WCSNCAT@
+GL_GNULIB_WCSNCMP = @GL_GNULIB_WCSNCMP@
+GL_GNULIB_WCSNCPY = @GL_GNULIB_WCSNCPY@
+GL_GNULIB_WCSNLEN = @GL_GNULIB_WCSNLEN@
+GL_GNULIB_WCSNRTOMBS = @GL_GNULIB_WCSNRTOMBS@
+GL_GNULIB_WCSPBRK = @GL_GNULIB_WCSPBRK@
+GL_GNULIB_WCSRCHR = @GL_GNULIB_WCSRCHR@
+GL_GNULIB_WCSRTOMBS = @GL_GNULIB_WCSRTOMBS@
+GL_GNULIB_WCSSPN = @GL_GNULIB_WCSSPN@
+GL_GNULIB_WCSSTR = @GL_GNULIB_WCSSTR@
+GL_GNULIB_WCSTOK = @GL_GNULIB_WCSTOK@
+GL_GNULIB_WCSWIDTH = @GL_GNULIB_WCSWIDTH@
+GL_GNULIB_WCSXFRM = @GL_GNULIB_WCSXFRM@
+GL_GNULIB_WCTOB = @GL_GNULIB_WCTOB@
+GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@
+GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@
+GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@
+GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@
+GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@
+GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@
+GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@
+GL_GNULIB_WMEMMOVE = @GL_GNULIB_WMEMMOVE@
+GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@
+GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@
+GL_GNULIB_WRITE = @GL_GNULIB_WRITE@
+GL_GNULIB__EXIT = @GL_GNULIB__EXIT@
+GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@
GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@
-GNULIB_GETUMASK = @GNULIB_GETUMASK@
-GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@
-GNULIB_GLOB = @GNULIB_GLOB@
-GNULIB_GRANTPT = @GNULIB_GRANTPT@
-GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@
-GNULIB_HYPOT = @GNULIB_HYPOT@
-GNULIB_HYPOTF = @GNULIB_HYPOTF@
-GNULIB_HYPOTL = @GNULIB_HYPOTL@
-GNULIB_ILOGB = @GNULIB_ILOGB@
-GNULIB_ILOGBF = @GNULIB_ILOGBF@
-GNULIB_ILOGBL = @GNULIB_ILOGBL@
-GNULIB_IMAXABS = @GNULIB_IMAXABS@
-GNULIB_IMAXDIV = @GNULIB_IMAXDIV@
-GNULIB_INET_NTOP = @GNULIB_INET_NTOP@
-GNULIB_INET_PTON = @GNULIB_INET_PTON@
-GNULIB_ISATTY = @GNULIB_ISATTY@
-GNULIB_ISBLANK = @GNULIB_ISBLANK@
-GNULIB_ISFINITE = @GNULIB_ISFINITE@
-GNULIB_ISINF = @GNULIB_ISINF@
-GNULIB_ISNAN = @GNULIB_ISNAN@
-GNULIB_ISNAND = @GNULIB_ISNAND@
-GNULIB_ISNANF = @GNULIB_ISNANF@
-GNULIB_ISNANL = @GNULIB_ISNANL@
-GNULIB_ISWBLANK = @GNULIB_ISWBLANK@
-GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@
-GNULIB_ISWDIGIT = @GNULIB_ISWDIGIT@
-GNULIB_ISWXDIGIT = @GNULIB_ISWXDIGIT@
-GNULIB_LCHMOD = @GNULIB_LCHMOD@
-GNULIB_LCHOWN = @GNULIB_LCHOWN@
-GNULIB_LDEXPF = @GNULIB_LDEXPF@
-GNULIB_LDEXPL = @GNULIB_LDEXPL@
-GNULIB_LINK = @GNULIB_LINK@
-GNULIB_LINKAT = @GNULIB_LINKAT@
-GNULIB_LISTEN = @GNULIB_LISTEN@
-GNULIB_LOCALECONV = @GNULIB_LOCALECONV@
-GNULIB_LOCALENAME = @GNULIB_LOCALENAME@
-GNULIB_LOCALTIME = @GNULIB_LOCALTIME@
-GNULIB_LOG = @GNULIB_LOG@
-GNULIB_LOG10 = @GNULIB_LOG10@
-GNULIB_LOG10F = @GNULIB_LOG10F@
-GNULIB_LOG10L = @GNULIB_LOG10L@
-GNULIB_LOG1P = @GNULIB_LOG1P@
-GNULIB_LOG1PF = @GNULIB_LOG1PF@
-GNULIB_LOG1PL = @GNULIB_LOG1PL@
-GNULIB_LOG2 = @GNULIB_LOG2@
-GNULIB_LOG2F = @GNULIB_LOG2F@
-GNULIB_LOG2L = @GNULIB_LOG2L@
-GNULIB_LOGB = @GNULIB_LOGB@
-GNULIB_LOGBF = @GNULIB_LOGBF@
-GNULIB_LOGBL = @GNULIB_LOGBL@
-GNULIB_LOGF = @GNULIB_LOGF@
-GNULIB_LOGL = @GNULIB_LOGL@
-GNULIB_LSEEK = @GNULIB_LSEEK@
-GNULIB_LSTAT = @GNULIB_LSTAT@
-GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@
-GNULIB_MBRLEN = @GNULIB_MBRLEN@
-GNULIB_MBRTOWC = @GNULIB_MBRTOWC@
-GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@
-GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@
-GNULIB_MBSCHR = @GNULIB_MBSCHR@
-GNULIB_MBSCSPN = @GNULIB_MBSCSPN@
-GNULIB_MBSINIT = @GNULIB_MBSINIT@
-GNULIB_MBSLEN = @GNULIB_MBSLEN@
-GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@
-GNULIB_MBSNLEN = @GNULIB_MBSNLEN@
-GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@
-GNULIB_MBSPBRK = @GNULIB_MBSPBRK@
-GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@
-GNULIB_MBSRCHR = @GNULIB_MBSRCHR@
-GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@
-GNULIB_MBSSEP = @GNULIB_MBSSEP@
-GNULIB_MBSSPN = @GNULIB_MBSSPN@
-GNULIB_MBSSTR = @GNULIB_MBSSTR@
-GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@
-GNULIB_MBTOWC = @GNULIB_MBTOWC@
-GNULIB_MDA_ACCESS = @GNULIB_MDA_ACCESS@
-GNULIB_MDA_CHDIR = @GNULIB_MDA_CHDIR@
-GNULIB_MDA_CHMOD = @GNULIB_MDA_CHMOD@
-GNULIB_MDA_CLOSE = @GNULIB_MDA_CLOSE@
-GNULIB_MDA_CREAT = @GNULIB_MDA_CREAT@
-GNULIB_MDA_DUP = @GNULIB_MDA_DUP@
-GNULIB_MDA_DUP2 = @GNULIB_MDA_DUP2@
-GNULIB_MDA_ECVT = @GNULIB_MDA_ECVT@
-GNULIB_MDA_EXECL = @GNULIB_MDA_EXECL@
-GNULIB_MDA_EXECLE = @GNULIB_MDA_EXECLE@
-GNULIB_MDA_EXECLP = @GNULIB_MDA_EXECLP@
-GNULIB_MDA_EXECV = @GNULIB_MDA_EXECV@
-GNULIB_MDA_EXECVE = @GNULIB_MDA_EXECVE@
-GNULIB_MDA_EXECVP = @GNULIB_MDA_EXECVP@
-GNULIB_MDA_EXECVPE = @GNULIB_MDA_EXECVPE@
-GNULIB_MDA_FCLOSEALL = @GNULIB_MDA_FCLOSEALL@
-GNULIB_MDA_FCVT = @GNULIB_MDA_FCVT@
-GNULIB_MDA_FDOPEN = @GNULIB_MDA_FDOPEN@
-GNULIB_MDA_FILENO = @GNULIB_MDA_FILENO@
-GNULIB_MDA_GCVT = @GNULIB_MDA_GCVT@
-GNULIB_MDA_GETCWD = @GNULIB_MDA_GETCWD@
-GNULIB_MDA_GETPID = @GNULIB_MDA_GETPID@
-GNULIB_MDA_GETW = @GNULIB_MDA_GETW@
-GNULIB_MDA_ISATTY = @GNULIB_MDA_ISATTY@
-GNULIB_MDA_J0 = @GNULIB_MDA_J0@
-GNULIB_MDA_J1 = @GNULIB_MDA_J1@
-GNULIB_MDA_JN = @GNULIB_MDA_JN@
-GNULIB_MDA_LSEEK = @GNULIB_MDA_LSEEK@
-GNULIB_MDA_MEMCCPY = @GNULIB_MDA_MEMCCPY@
-GNULIB_MDA_MKDIR = @GNULIB_MDA_MKDIR@
-GNULIB_MDA_MKTEMP = @GNULIB_MDA_MKTEMP@
-GNULIB_MDA_OPEN = @GNULIB_MDA_OPEN@
-GNULIB_MDA_PUTENV = @GNULIB_MDA_PUTENV@
-GNULIB_MDA_PUTW = @GNULIB_MDA_PUTW@
-GNULIB_MDA_READ = @GNULIB_MDA_READ@
-GNULIB_MDA_RMDIR = @GNULIB_MDA_RMDIR@
-GNULIB_MDA_STRDUP = @GNULIB_MDA_STRDUP@
-GNULIB_MDA_SWAB = @GNULIB_MDA_SWAB@
-GNULIB_MDA_TEMPNAM = @GNULIB_MDA_TEMPNAM@
-GNULIB_MDA_TZSET = @GNULIB_MDA_TZSET@
-GNULIB_MDA_UMASK = @GNULIB_MDA_UMASK@
-GNULIB_MDA_UNLINK = @GNULIB_MDA_UNLINK@
-GNULIB_MDA_WCSDUP = @GNULIB_MDA_WCSDUP@
-GNULIB_MDA_WRITE = @GNULIB_MDA_WRITE@
-GNULIB_MDA_Y0 = @GNULIB_MDA_Y0@
-GNULIB_MDA_Y1 = @GNULIB_MDA_Y1@
-GNULIB_MDA_YN = @GNULIB_MDA_YN@
-GNULIB_MEMCHR = @GNULIB_MEMCHR@
-GNULIB_MEMMEM = @GNULIB_MEMMEM@
-GNULIB_MEMPCPY = @GNULIB_MEMPCPY@
-GNULIB_MEMRCHR = @GNULIB_MEMRCHR@
-GNULIB_MKDIR = @GNULIB_MKDIR@
-GNULIB_MKDIRAT = @GNULIB_MKDIRAT@
-GNULIB_MKDTEMP = @GNULIB_MKDTEMP@
-GNULIB_MKFIFO = @GNULIB_MKFIFO@
-GNULIB_MKFIFOAT = @GNULIB_MKFIFOAT@
-GNULIB_MKNOD = @GNULIB_MKNOD@
-GNULIB_MKNODAT = @GNULIB_MKNODAT@
-GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@
-GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@
-GNULIB_MKSTEMP = @GNULIB_MKSTEMP@
-GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@
-GNULIB_MKTIME = @GNULIB_MKTIME@
-GNULIB_MODF = @GNULIB_MODF@
-GNULIB_MODFF = @GNULIB_MODFF@
-GNULIB_MODFL = @GNULIB_MODFL@
-GNULIB_NANOSLEEP = @GNULIB_NANOSLEEP@
-GNULIB_NONBLOCKING = @GNULIB_NONBLOCKING@
-GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@
-GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@
-GNULIB_OPEN = @GNULIB_OPEN@
-GNULIB_OPENAT = @GNULIB_OPENAT@
-GNULIB_OPENDIR = @GNULIB_OPENDIR@
-GNULIB_OVERRIDES_STRUCT_STAT = @GNULIB_OVERRIDES_STRUCT_STAT@
-GNULIB_OVERRIDES_WINT_T = @GNULIB_OVERRIDES_WINT_T@
-GNULIB_PCLOSE = @GNULIB_PCLOSE@
-GNULIB_PERROR = @GNULIB_PERROR@
-GNULIB_PIPE = @GNULIB_PIPE@
-GNULIB_PIPE2 = @GNULIB_PIPE2@
-GNULIB_POPEN = @GNULIB_POPEN@
-GNULIB_POSIX_MEMALIGN = @GNULIB_POSIX_MEMALIGN@
-GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@
-GNULIB_POWF = @GNULIB_POWF@
-GNULIB_PREAD = @GNULIB_PREAD@
-GNULIB_PRINTF = @GNULIB_PRINTF@
-GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@
-GNULIB_PSELECT = @GNULIB_PSELECT@
-GNULIB_PTHREAD_SIGMASK = @GNULIB_PTHREAD_SIGMASK@
-GNULIB_PTSNAME = @GNULIB_PTSNAME@
-GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@
-GNULIB_PUTC = @GNULIB_PUTC@
-GNULIB_PUTCHAR = @GNULIB_PUTCHAR@
-GNULIB_PUTENV = @GNULIB_PUTENV@
-GNULIB_PUTS = @GNULIB_PUTS@
-GNULIB_PWRITE = @GNULIB_PWRITE@
-GNULIB_QSORT_R = @GNULIB_QSORT_R@
-GNULIB_RAISE = @GNULIB_RAISE@
-GNULIB_RANDOM = @GNULIB_RANDOM@
-GNULIB_RANDOM_R = @GNULIB_RANDOM_R@
-GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@
-GNULIB_READ = @GNULIB_READ@
-GNULIB_READDIR = @GNULIB_READDIR@
-GNULIB_READLINK = @GNULIB_READLINK@
-GNULIB_READLINKAT = @GNULIB_READLINKAT@
-GNULIB_REALLOCARRAY = @GNULIB_REALLOCARRAY@
-GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@
-GNULIB_REALPATH = @GNULIB_REALPATH@
-GNULIB_RECV = @GNULIB_RECV@
-GNULIB_RECVFROM = @GNULIB_RECVFROM@
-GNULIB_REMAINDER = @GNULIB_REMAINDER@
-GNULIB_REMAINDERF = @GNULIB_REMAINDERF@
-GNULIB_REMAINDERL = @GNULIB_REMAINDERL@
-GNULIB_REMOVE = @GNULIB_REMOVE@
-GNULIB_RENAME = @GNULIB_RENAME@
-GNULIB_RENAMEAT = @GNULIB_RENAMEAT@
-GNULIB_REWINDDIR = @GNULIB_REWINDDIR@
-GNULIB_RINT = @GNULIB_RINT@
-GNULIB_RINTF = @GNULIB_RINTF@
-GNULIB_RINTL = @GNULIB_RINTL@
-GNULIB_RMDIR = @GNULIB_RMDIR@
-GNULIB_ROUND = @GNULIB_ROUND@
-GNULIB_ROUNDF = @GNULIB_ROUNDF@
-GNULIB_ROUNDL = @GNULIB_ROUNDL@
-GNULIB_RPMATCH = @GNULIB_RPMATCH@
-GNULIB_SCANDIR = @GNULIB_SCANDIR@
-GNULIB_SCANF = @GNULIB_SCANF@
-GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@
-GNULIB_SELECT = @GNULIB_SELECT@
-GNULIB_SEND = @GNULIB_SEND@
-GNULIB_SENDTO = @GNULIB_SENDTO@
-GNULIB_SETENV = @GNULIB_SETENV@
-GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@
-GNULIB_SETLOCALE = @GNULIB_SETLOCALE@
-GNULIB_SETLOCALE_NULL = @GNULIB_SETLOCALE_NULL@
-GNULIB_SETSOCKOPT = @GNULIB_SETSOCKOPT@
-GNULIB_SHUTDOWN = @GNULIB_SHUTDOWN@
-GNULIB_SIGABBREV_NP = @GNULIB_SIGABBREV_NP@
-GNULIB_SIGACTION = @GNULIB_SIGACTION@
-GNULIB_SIGDESCR_NP = @GNULIB_SIGDESCR_NP@
-GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@
-GNULIB_SIGNBIT = @GNULIB_SIGNBIT@
-GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@
-GNULIB_SINF = @GNULIB_SINF@
-GNULIB_SINHF = @GNULIB_SINHF@
-GNULIB_SINL = @GNULIB_SINL@
-GNULIB_SLEEP = @GNULIB_SLEEP@
-GNULIB_SNPRINTF = @GNULIB_SNPRINTF@
-GNULIB_SOCKET = @GNULIB_SOCKET@
-GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@
-GNULIB_SQRTF = @GNULIB_SQRTF@
-GNULIB_SQRTL = @GNULIB_SQRTL@
-GNULIB_STAT = @GNULIB_STAT@
-GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@
-GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@
-GNULIB_STPCPY = @GNULIB_STPCPY@
-GNULIB_STPNCPY = @GNULIB_STPNCPY@
-GNULIB_STRCASESTR = @GNULIB_STRCASESTR@
-GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@
-GNULIB_STRDUP = @GNULIB_STRDUP@
-GNULIB_STRERROR = @GNULIB_STRERROR@
-GNULIB_STRERRORNAME_NP = @GNULIB_STRERRORNAME_NP@
-GNULIB_STRERROR_R = @GNULIB_STRERROR_R@
-GNULIB_STRFTIME = @GNULIB_STRFTIME@
-GNULIB_STRNCAT = @GNULIB_STRNCAT@
-GNULIB_STRNDUP = @GNULIB_STRNDUP@
-GNULIB_STRNLEN = @GNULIB_STRNLEN@
-GNULIB_STRPBRK = @GNULIB_STRPBRK@
-GNULIB_STRPTIME = @GNULIB_STRPTIME@
-GNULIB_STRSEP = @GNULIB_STRSEP@
-GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@
-GNULIB_STRSTR = @GNULIB_STRSTR@
-GNULIB_STRTOD = @GNULIB_STRTOD@
-GNULIB_STRTOIMAX = @GNULIB_STRTOIMAX@
-GNULIB_STRTOK_R = @GNULIB_STRTOK_R@
-GNULIB_STRTOLD = @GNULIB_STRTOLD@
-GNULIB_STRTOLL = @GNULIB_STRTOLL@
-GNULIB_STRTOULL = @GNULIB_STRTOULL@
-GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@
-GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@
-GNULIB_SYMLINK = @GNULIB_SYMLINK@
-GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@
-GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@
-GNULIB_TANF = @GNULIB_TANF@
-GNULIB_TANHF = @GNULIB_TANHF@
-GNULIB_TANL = @GNULIB_TANL@
-GNULIB_TIMEGM = @GNULIB_TIMEGM@
-GNULIB_TIMESPEC_GET = @GNULIB_TIMESPEC_GET@
-GNULIB_TIME_R = @GNULIB_TIME_R@
-GNULIB_TIME_RZ = @GNULIB_TIME_RZ@
-GNULIB_TMPFILE = @GNULIB_TMPFILE@
-GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@
-GNULIB_TRUNC = @GNULIB_TRUNC@
-GNULIB_TRUNCATE = @GNULIB_TRUNCATE@
-GNULIB_TRUNCF = @GNULIB_TRUNCF@
-GNULIB_TRUNCL = @GNULIB_TRUNCL@
-GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@
-GNULIB_TZSET = @GNULIB_TZSET@
-GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@
-GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@
-GNULIB_UNLINK = @GNULIB_UNLINK@
-GNULIB_UNLINKAT = @GNULIB_UNLINKAT@
-GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@
-GNULIB_UNSETENV = @GNULIB_UNSETENV@
-GNULIB_USLEEP = @GNULIB_USLEEP@
-GNULIB_UTIMENSAT = @GNULIB_UTIMENSAT@
-GNULIB_VASPRINTF = @GNULIB_VASPRINTF@
-GNULIB_VDPRINTF = @GNULIB_VDPRINTF@
-GNULIB_VFPRINTF = @GNULIB_VFPRINTF@
-GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@
-GNULIB_VFSCANF = @GNULIB_VFSCANF@
-GNULIB_VPRINTF = @GNULIB_VPRINTF@
-GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@
-GNULIB_VSCANF = @GNULIB_VSCANF@
-GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@
-GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@
-GNULIB_WAITPID = @GNULIB_WAITPID@
-GNULIB_WCPCPY = @GNULIB_WCPCPY@
-GNULIB_WCPNCPY = @GNULIB_WCPNCPY@
-GNULIB_WCRTOMB = @GNULIB_WCRTOMB@
-GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@
-GNULIB_WCSCAT = @GNULIB_WCSCAT@
-GNULIB_WCSCHR = @GNULIB_WCSCHR@
-GNULIB_WCSCMP = @GNULIB_WCSCMP@
-GNULIB_WCSCOLL = @GNULIB_WCSCOLL@
-GNULIB_WCSCPY = @GNULIB_WCSCPY@
-GNULIB_WCSCSPN = @GNULIB_WCSCSPN@
-GNULIB_WCSDUP = @GNULIB_WCSDUP@
-GNULIB_WCSFTIME = @GNULIB_WCSFTIME@
-GNULIB_WCSLEN = @GNULIB_WCSLEN@
-GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@
-GNULIB_WCSNCAT = @GNULIB_WCSNCAT@
-GNULIB_WCSNCMP = @GNULIB_WCSNCMP@
-GNULIB_WCSNCPY = @GNULIB_WCSNCPY@
-GNULIB_WCSNLEN = @GNULIB_WCSNLEN@
-GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@
-GNULIB_WCSPBRK = @GNULIB_WCSPBRK@
-GNULIB_WCSRCHR = @GNULIB_WCSRCHR@
-GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@
-GNULIB_WCSSPN = @GNULIB_WCSSPN@
-GNULIB_WCSSTR = @GNULIB_WCSSTR@
-GNULIB_WCSTOK = @GNULIB_WCSTOK@
-GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@
-GNULIB_WCSXFRM = @GNULIB_WCSXFRM@
-GNULIB_WCTOB = @GNULIB_WCTOB@
-GNULIB_WCTOMB = @GNULIB_WCTOMB@
-GNULIB_WCTRANS = @GNULIB_WCTRANS@
-GNULIB_WCTYPE = @GNULIB_WCTYPE@
-GNULIB_WCWIDTH = @GNULIB_WCWIDTH@
-GNULIB_WMEMCHR = @GNULIB_WMEMCHR@
-GNULIB_WMEMCMP = @GNULIB_WMEMCMP@
-GNULIB_WMEMCPY = @GNULIB_WMEMCPY@
-GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@
-GNULIB_WMEMPCPY = @GNULIB_WMEMPCPY@
-GNULIB_WMEMSET = @GNULIB_WMEMSET@
-GNULIB_WRITE = @GNULIB_WRITE@
-GNULIB__EXIT = @GNULIB__EXIT@
GREP = @GREP@
HAVE_ACCEPT4 = @HAVE_ACCEPT4@
HAVE_ACOSF = @HAVE_ACOSF@
@@ -1153,8 +1167,10 @@ HAVE_STRPBRK = @HAVE_STRPBRK@
HAVE_STRPTIME = @HAVE_STRPTIME@
HAVE_STRSEP = @HAVE_STRSEP@
HAVE_STRTOD = @HAVE_STRTOD@
+HAVE_STRTOL = @HAVE_STRTOL@
HAVE_STRTOLD = @HAVE_STRTOLD@
HAVE_STRTOLL = @HAVE_STRTOLL@
+HAVE_STRTOUL = @HAVE_STRTOUL@
HAVE_STRTOULL = @HAVE_STRTOULL@
HAVE_STRUCT_ADDRINFO = @HAVE_STRUCT_ADDRINFO@
HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@
@@ -1180,6 +1196,7 @@ HAVE_TANHF = @HAVE_TANHF@
HAVE_TANL = @HAVE_TANL@
HAVE_TIMEGM = @HAVE_TIMEGM@
HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@
+HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@
HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@
HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@
HAVE_UNISTD_H = @HAVE_UNISTD_H@
@@ -1268,6 +1285,7 @@ LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@
LIMITS_H = @LIMITS_H@
LN_S = @LN_S@
LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@
+LOCALENAME_ENHANCE_LOCALE_FUNCS = @LOCALENAME_ENHANCE_LOCALE_FUNCS@
LOCALE_FR = @LOCALE_FR@
LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@
LOCALE_JA = @LOCALE_JA@
@@ -1368,7 +1386,8 @@ REPLACE_ASINF = @REPLACE_ASINF@
REPLACE_ATAN2F = @REPLACE_ATAN2F@
REPLACE_ATANF = @REPLACE_ATANF@
REPLACE_BTOWC = @REPLACE_BTOWC@
-REPLACE_CALLOC = @REPLACE_CALLOC@
+REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@
+REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@
REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@
REPLACE_CBRTF = @REPLACE_CBRTF@
REPLACE_CBRTL = @REPLACE_CBRTL@
@@ -1378,6 +1397,7 @@ REPLACE_CEILL = @REPLACE_CEILL@
REPLACE_CHOWN = @REPLACE_CHOWN@
REPLACE_CLOSE = @REPLACE_CLOSE@
REPLACE_CLOSEDIR = @REPLACE_CLOSEDIR@
+REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@
REPLACE_COSF = @REPLACE_COSF@
REPLACE_COSHF = @REPLACE_COSHF@
REPLACE_CREAT = @REPLACE_CREAT@
@@ -1422,6 +1442,7 @@ REPLACE_FMODF = @REPLACE_FMODF@
REPLACE_FMODL = @REPLACE_FMODL@
REPLACE_FNMATCH = @REPLACE_FNMATCH@
REPLACE_FOPEN = @REPLACE_FOPEN@
+REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@
REPLACE_FPRINTF = @REPLACE_FPRINTF@
REPLACE_FPURGE = @REPLACE_FPURGE@
REPLACE_FREE = @REPLACE_FREE@
@@ -1449,6 +1470,7 @@ REPLACE_GETLINE = @REPLACE_GETLINE@
REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@
REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
REPLACE_GETPASS = @REPLACE_GETPASS@
+REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@
REPLACE_GETRANDOM = @REPLACE_GETRANDOM@
REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@
REPLACE_GLOB = @REPLACE_GLOB@
@@ -1497,7 +1519,8 @@ REPLACE_LOGF = @REPLACE_LOGF@
REPLACE_LOGL = @REPLACE_LOGL@
REPLACE_LSEEK = @REPLACE_LSEEK@
REPLACE_LSTAT = @REPLACE_LSTAT@
-REPLACE_MALLOC = @REPLACE_MALLOC@
+REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@
+REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@
REPLACE_MBRLEN = @REPLACE_MBRLEN@
REPLACE_MBRTOWC = @REPLACE_MBRTOWC@
REPLACE_MBSINIT = @REPLACE_MBSINIT@
@@ -1543,7 +1566,9 @@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@
REPLACE_READ = @REPLACE_READ@
REPLACE_READLINK = @REPLACE_READLINK@
REPLACE_READLINKAT = @REPLACE_READLINKAT@
-REPLACE_REALLOC = @REPLACE_REALLOC@
+REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@
+REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@
+REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@
REPLACE_REALPATH = @REPLACE_REALPATH@
REPLACE_REMAINDER = @REPLACE_REMAINDER@
REPLACE_REMAINDERF = @REPLACE_REMAINDERF@
@@ -1588,7 +1613,11 @@ REPLACE_STRSTR = @REPLACE_STRSTR@
REPLACE_STRTOD = @REPLACE_STRTOD@
REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@
REPLACE_STRTOK_R = @REPLACE_STRTOK_R@
+REPLACE_STRTOL = @REPLACE_STRTOL@
REPLACE_STRTOLD = @REPLACE_STRTOLD@
+REPLACE_STRTOLL = @REPLACE_STRTOLL@
+REPLACE_STRTOUL = @REPLACE_STRTOUL@
+REPLACE_STRTOULL = @REPLACE_STRTOULL@
REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@
REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@
REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@
@@ -1674,8 +1703,10 @@ datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
+gl_LIBOBJDEPS = @gl_LIBOBJDEPS@
gl_LIBOBJS = @gl_LIBOBJS@
gl_LTLIBOBJS = @gl_LTLIBOBJS@
+gltests_LIBOBJDEPS = @gltests_LIBOBJDEPS@
gltests_LIBOBJS = @gltests_LIBOBJS@
gltests_LTLIBOBJS = @gltests_LTLIBOBJS@
gltests_WITNESS = @gltests_WITNESS@
diff --git a/gnulib/aclocal.m4 b/gnulib/aclocal.m4
index c03dc8bcafa..707108d7abf 100644
--- a/gnulib/aclocal.m4
+++ b/gnulib/aclocal.m4
@@ -108,6 +108,43 @@ AC_DEFUN([AM_AUX_DIR_EXPAND],
am_aux_dir=`cd "$ac_aux_dir" && pwd`
])
+# AM_COND_IF -*- Autoconf -*-
+
+# Copyright (C) 2008-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_COND_IF
+# _AM_COND_ELSE
+# _AM_COND_ENDIF
+# --------------
+# These macros are only used for tracing.
+m4_define([_AM_COND_IF])
+m4_define([_AM_COND_ELSE])
+m4_define([_AM_COND_ENDIF])
+
+# AM_COND_IF(COND, [IF-TRUE], [IF-FALSE])
+# ---------------------------------------
+# If the shell condition COND is true, execute IF-TRUE, otherwise execute
+# IF-FALSE. Allow automake to learn about conditional instantiating macros
+# (the AC_CONFIG_FOOS).
+AC_DEFUN([AM_COND_IF],
+[m4_ifndef([_AM_COND_VALUE_$1],
+ [m4_fatal([$0: no such condition "$1"])])dnl
+_AM_COND_IF([$1])dnl
+if test -z "$$1_TRUE"; then :
+ m4_n([$2])[]dnl
+m4_ifval([$3],
+[_AM_COND_ELSE([$1])dnl
+else
+ $3
+])dnl
+_AM_COND_ENDIF([$1])dnl
+fi[]dnl
+])
+
# AM_CONDITIONAL -*- Autoconf -*-
# Copyright (C) 1997-2017 Free Software Foundation, Inc.
@@ -811,53 +848,6 @@ AC_DEFUN([_AM_SET_OPTIONS],
AC_DEFUN([_AM_IF_OPTION],
[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
-# Copyright (C) 1999-2017 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# _AM_PROG_CC_C_O
-# ---------------
-# Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC
-# to automatically call this.
-AC_DEFUN([_AM_PROG_CC_C_O],
-[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
-AC_REQUIRE_AUX_FILE([compile])dnl
-AC_LANG_PUSH([C])dnl
-AC_CACHE_CHECK(
- [whether $CC understands -c and -o together],
- [am_cv_prog_cc_c_o],
- [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])])
- # Make sure it works both with $CC and with simple cc.
- # Following AC_PROG_CC_C_O, we do the test twice because some
- # compilers refuse to overwrite an existing .o file with -o,
- # though they will create one.
- am_cv_prog_cc_c_o=yes
- for am_i in 1 2; do
- if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \
- && test -f conftest2.$ac_objext; then
- : OK
- else
- am_cv_prog_cc_c_o=no
- break
- fi
- done
- rm -f core conftest*
- unset am_i])
-if test "$am_cv_prog_cc_c_o" != yes; then
- # Losing compiler, so override with the script.
- # FIXME: It is wrong to rewrite CC.
- # But if we don't then we get into trouble of one sort or another.
- # A longer-term fix would be to have automake use am__CC in this case,
- # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
- CC="$am_aux_dir/compile $CC"
-fi
-AC_LANG_POP([C])])
-
-# For backward compatibility.
-AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])])
-
# Check to make sure that the build environment is sane. -*- Autoconf -*-
# Copyright (C) 1996-2017 Free Software Foundation, Inc.
@@ -1198,7 +1188,7 @@ m4_include([import/m4/clock_time.m4])
m4_include([import/m4/close.m4])
m4_include([import/m4/closedir.m4])
m4_include([import/m4/codeset.m4])
-m4_include([import/m4/ctype.m4])
+m4_include([import/m4/ctype_h.m4])
m4_include([import/m4/d-ino.m4])
m4_include([import/m4/d-type.m4])
m4_include([import/m4/dirent_h.m4])
@@ -1345,6 +1335,7 @@ m4_include([import/m4/time_h.m4])
m4_include([import/m4/time_r.m4])
m4_include([import/m4/unistd-safer.m4])
m4_include([import/m4/unistd_h.m4])
+m4_include([import/m4/vararrays.m4])
m4_include([import/m4/visibility.m4])
m4_include([import/m4/warn-on-use.m4])
m4_include([import/m4/wchar_h.m4])
@@ -1353,4 +1344,5 @@ m4_include([import/m4/wctype_h.m4])
m4_include([import/m4/wint_t.m4])
m4_include([import/m4/wmemchr.m4])
m4_include([import/m4/wmempcpy.m4])
+m4_include([import/m4/year2038.m4])
m4_include([import/m4/zzgnulib.m4])
diff --git a/gnulib/config.in b/gnulib/config.in
index dd960bf6e0b..07efd1334fa 100644
--- a/gnulib/config.in
+++ b/gnulib/config.in
@@ -72,7 +72,11 @@
#undef FUNC_MKDIR_DOT_BUG
/* Define to 1 if realpath() can malloc memory, always gives an absolute path,
- and handles trailing slash correctly. */
+ and handles a trailing slash correctly. */
+#undef FUNC_REALPATH_NEARLY_WORKS
+
+/* Define to 1 if realpath() can malloc memory, always gives an absolute path,
+ and handles leading slashes and a trailing slash correctly. */
#undef FUNC_REALPATH_WORKS
/* Define this to 'void' or 'struct timezone' to match the system's
@@ -195,9 +199,27 @@
/* Define to 1 when the gnulib module fdopendir should be tested. */
#undef GNULIB_TEST_FDOPENDIR
+/* Define to 1 when the gnulib module fgetc should be tested. */
+#undef GNULIB_TEST_FGETC
+
+/* Define to 1 when the gnulib module fgets should be tested. */
+#undef GNULIB_TEST_FGETS
+
/* Define to 1 when the gnulib module fnmatch should be tested. */
#undef GNULIB_TEST_FNMATCH
+/* Define to 1 when the gnulib module fprintf should be tested. */
+#undef GNULIB_TEST_FPRINTF
+
+/* Define to 1 when the gnulib module fputc should be tested. */
+#undef GNULIB_TEST_FPUTC
+
+/* Define to 1 when the gnulib module fputs should be tested. */
+#undef GNULIB_TEST_FPUTS
+
+/* Define to 1 when the gnulib module fread should be tested. */
+#undef GNULIB_TEST_FREAD
+
/* Define to 1 when the gnulib module free-posix should be tested. */
#undef GNULIB_TEST_FREE_POSIX
@@ -207,12 +229,24 @@
/* Define to 1 when the gnulib module frexpl should be tested. */
#undef GNULIB_TEST_FREXPL
+/* Define to 1 when the gnulib module fscanf should be tested. */
+#undef GNULIB_TEST_FSCANF
+
/* Define to 1 when the gnulib module fstat should be tested. */
#undef GNULIB_TEST_FSTAT
/* Define to 1 when the gnulib module fstatat should be tested. */
#undef GNULIB_TEST_FSTATAT
+/* Define to 1 when the gnulib module fwrite should be tested. */
+#undef GNULIB_TEST_FWRITE
+
+/* Define to 1 when the gnulib module getc should be tested. */
+#undef GNULIB_TEST_GETC
+
+/* Define to 1 when the gnulib module getchar should be tested. */
+#undef GNULIB_TEST_GETCHAR
+
/* Define to 1 when the gnulib module getcwd should be tested. */
#undef GNULIB_TEST_GETCWD
@@ -291,6 +325,18 @@
/* Define to 1 when the gnulib module pipe should be tested. */
#undef GNULIB_TEST_PIPE
+/* Define to 1 when the gnulib module printf should be tested. */
+#undef GNULIB_TEST_PRINTF
+
+/* Define to 1 when the gnulib module putc should be tested. */
+#undef GNULIB_TEST_PUTC
+
+/* Define to 1 when the gnulib module putchar should be tested. */
+#undef GNULIB_TEST_PUTCHAR
+
+/* Define to 1 when the gnulib module puts should be tested. */
+#undef GNULIB_TEST_PUTS
+
/* Define to 1 when the gnulib module rawmemchr should be tested. */
#undef GNULIB_TEST_RAWMEMCHR
@@ -315,6 +361,9 @@
/* Define to 1 when the gnulib module rmdir should be tested. */
#undef GNULIB_TEST_RMDIR
+/* Define to 1 when the gnulib module scanf should be tested. */
+#undef GNULIB_TEST_SCANF
+
/* Define to 1 when the gnulib module select should be tested. */
#undef GNULIB_TEST_SELECT
@@ -360,6 +409,12 @@
/* Define to 1 when the gnulib module unsetenv should be tested. */
#undef GNULIB_TEST_UNSETENV
+/* Define to 1 when the gnulib module vfprintf should be tested. */
+#undef GNULIB_TEST_VFPRINTF
+
+/* Define to 1 when the gnulib module vprintf should be tested. */
+#undef GNULIB_TEST_VPRINTF
+
/* Define to 1 when the gnulib module wmemchr should be tested. */
#undef GNULIB_TEST_WMEMCHR
@@ -395,6 +450,9 @@
/* Define to 1 if you have the `chown' function. */
#undef HAVE_CHOWN
+/* Define to 1 if you have the `clock_getres' function. */
+#undef HAVE_CLOCK_GETRES
+
/* Define to 1 if you have the `clock_gettime' function. */
#undef HAVE_CLOCK_GETTIME
@@ -407,6 +465,9 @@
/* Define to 1 if you have the <crtdefs.h> header file. */
#undef HAVE_CRTDEFS_H
+/* Define to 1 if C supports variable-length arrays. */
+#undef HAVE_C_VARARRAYS
+
/* Define to 1 if you have the declaration of `alarm', and to 0 if you don't.
*/
#undef HAVE_DECL_ALARM
@@ -582,6 +643,9 @@
/* Define to 1 if you have the <fnmatch.h> header file. */
#undef HAVE_FNMATCH_H
+/* Define if the 'free' function is guaranteed to preserve errno. */
+#undef HAVE_FREE_POSIX
+
/* Define if the frexp() function is available and works. */
#undef HAVE_FREXP
@@ -682,7 +746,7 @@
/* Define to 1 if you have the `lstat' function. */
#undef HAVE_LSTAT
-/* Define if the 'malloc' function is POSIX compliant. */
+/* Define if malloc, realloc, and calloc set errno on allocation failure. */
#undef HAVE_MALLOC_POSIX
/* Define to 1 if mmap()'s MAP_ANONYMOUS flag is available after including
@@ -786,9 +850,6 @@
/* Define to 1 if you have the `readlink' function. */
#undef HAVE_READLINK
-/* Define if the 'realloc' function is POSIX compliant. */
-#undef HAVE_REALLOC_POSIX
-
/* Define to 1 if you have the `realpath' function. */
#undef HAVE_REALPATH
@@ -1007,6 +1068,114 @@
#endif
+/* Define to 1 if ctype.h defines __header_inline. */
+#undef HAVE___HEADER_INLINE
+
+/* Please see the Gnulib manual for how to use these macros.
+
+ Suppress extern inline with HP-UX cc, as it appears to be broken; see
+ <https://lists.gnu.org/r/bug-texinfo/2013-02/msg00030.html>.
+
+ Suppress extern inline with Sun C in standards-conformance mode, as it
+ mishandles inline functions that call each other. E.g., for 'inline void f
+ (void) { } inline void g (void) { f (); }', c99 incorrectly complains
+ 'reference to static identifier "f" in extern inline function'.
+ This bug was observed with Oracle Developer Studio 12.6
+ (Sun C 5.15 SunOS_sparc 2017/05/30).
+
+ Suppress extern inline (with or without __attribute__ ((__gnu_inline__)))
+ on configurations that mistakenly use 'static inline' to implement
+ functions or macros in standard C headers like <ctype.h>. For example,
+ if isdigit is mistakenly implemented via a static inline function,
+ a program containing an extern inline function that calls isdigit
+ may not work since the C standard prohibits extern inline functions
+ from calling static functions (ISO C 99 section 6.7.4.(3).
+ This bug is known to occur on:
+
+ OS X 10.8 and earlier; see:
+ https://lists.gnu.org/r/bug-gnulib/2012-12/msg00023.html
+
+ DragonFly; see
+ http://muscles.dragonflybsd.org/bulk/clang-master-potential/20141111_102002/logs/ah-tty-0.3.12.log
+
+ FreeBSD; see:
+ https://lists.gnu.org/r/bug-gnulib/2014-07/msg00104.html
+
+ OS X 10.9 has a macro __header_inline indicating the bug is fixed for C and
+ for clang but remains for g++; see <https://trac.macports.org/ticket/41033>.
+ Assume DragonFly and FreeBSD will be similar.
+
+ GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99
+ inline semantics, unless -fgnu89-inline is used. It defines a macro
+ __GNUC_STDC_INLINE__ to indicate this situation or a macro
+ __GNUC_GNU_INLINE__ to indicate the opposite situation.
+ GCC 4.2 with -std=c99 or -std=gnu99 implements the GNU C inline
+ semantics but warns, unless -fgnu89-inline is used:
+ warning: C99 inline functions are not supported; using GNU89
+ warning: to disable this warning use -fgnu89-inline or the gnu_inline function attribute
+ It defines a macro __GNUC_GNU_INLINE__ to indicate this situation.
+ */
+#if (((defined __APPLE__ && defined __MACH__) \
+ || defined __DragonFly__ || defined __FreeBSD__) \
+ && (defined HAVE___HEADER_INLINE \
+ ? (defined __cplusplus && defined __GNUC_STDC_INLINE__ \
+ && ! defined __clang__) \
+ : ((! defined _DONT_USE_CTYPE_INLINE_ \
+ && (defined __GNUC__ || defined __cplusplus)) \
+ || (defined _FORTIFY_SOURCE && 0 < _FORTIFY_SOURCE \
+ && defined __GNUC__ && ! defined __cplusplus))))
+# define _GL_EXTERN_INLINE_STDHEADER_BUG
+#endif
+#if ((__GNUC__ \
+ ? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \
+ : (199901L <= __STDC_VERSION__ \
+ && !defined __HP_cc \
+ && !defined __PGI \
+ && !(defined __SUNPRO_C && __STDC__))) \
+ && !defined _GL_EXTERN_INLINE_STDHEADER_BUG)
+# define _GL_INLINE inline
+# define _GL_EXTERN_INLINE extern inline
+# define _GL_EXTERN_INLINE_IN_USE
+#elif (2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __STRICT_ANSI__ \
+ && !defined _GL_EXTERN_INLINE_STDHEADER_BUG)
+# if defined __GNUC_GNU_INLINE__ && __GNUC_GNU_INLINE__
+ /* __gnu_inline__ suppresses a GCC 4.2 diagnostic. */
+# define _GL_INLINE extern inline __attribute__ ((__gnu_inline__))
+# else
+# define _GL_INLINE extern inline
+# endif
+# define _GL_EXTERN_INLINE extern
+# define _GL_EXTERN_INLINE_IN_USE
+#else
+# define _GL_INLINE _GL_UNUSED static
+# define _GL_EXTERN_INLINE _GL_UNUSED static
+#endif
+
+/* In GCC 4.6 (inclusive) to 5.1 (exclusive),
+ suppress bogus "no previous prototype for 'FOO'"
+ and "no previous declaration for 'FOO'" diagnostics,
+ when FOO is an inline function in the header; see
+ <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=54113> and
+ <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63877>. */
+#if __GNUC__ == 4 && 6 <= __GNUC_MINOR__
+# if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__
+# define _GL_INLINE_HEADER_CONST_PRAGMA
+# else
+# define _GL_INLINE_HEADER_CONST_PRAGMA \
+ _Pragma ("GCC diagnostic ignored \"-Wsuggest-attribute=const\"")
+# endif
+# define _GL_INLINE_HEADER_BEGIN \
+ _Pragma ("GCC diagnostic push") \
+ _Pragma ("GCC diagnostic ignored \"-Wmissing-prototypes\"") \
+ _Pragma ("GCC diagnostic ignored \"-Wmissing-declarations\"") \
+ _GL_INLINE_HEADER_CONST_PRAGMA
+# define _GL_INLINE_HEADER_END \
+ _Pragma ("GCC diagnostic pop")
+#else
+# define _GL_INLINE_HEADER_BEGIN
+# define _GL_INLINE_HEADER_END
+#endif
+
/* Define to 1 if the compiler supports the keyword '__inline'. */
#undef HAVE___INLINE
@@ -1177,6 +1346,10 @@
/* Define if the POSIX multithreading library can be used. */
#undef USE_POSIX_THREADS
+/* Define if references to the POSIX multithreading library are satisfied by
+ libc. */
+#undef USE_POSIX_THREADS_FROM_LIBC
+
/* Define if references to the POSIX multithreading library should be made
weak. */
#undef USE_POSIX_THREADS_WEAK
@@ -1333,11 +1506,12 @@
this syntax with 'extern'. */
# define _Noreturn [[noreturn]]
# elif ((!defined __cplusplus || defined __clang__) \
- && (201112 <= (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) \
- || _GL_GNUC_PREREQ (4, 7) \
- || (defined __apple_build_version__ \
- ? 6000000 <= __apple_build_version__ \
- : 3 < __clang_major__ + (5 <= __clang_minor__))))
+ && (201112 <= (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) \
+ || (!defined __STRICT_ANSI__ \
+ && (_GL_GNUC_PREREQ (4, 7) \
+ || (defined __apple_build_version__ \
+ ? 6000000 <= __apple_build_version__ \
+ : 3 < __clang_major__ + (5 <= __clang_minor__))))))
/* _Noreturn works as-is. */
# elif _GL_GNUC_PREREQ (2, 8) || defined __clang__ || 0x5110 <= __SUNPRO_C
# define _Noreturn __attribute__ ((__noreturn__))
@@ -1353,15 +1527,25 @@
functions. */
#undef _POSIX_PII_SOCKET
+/* Number of bits in a timestamp, on hosts where this is settable. */
+#undef _TIME_BITS
+
/* For standard stat data types on VMS. */
#undef _USE_STD_STAT
+/* For 64-bit time_t on 32-bit mingw. */
+#undef __MINGW_USE_VC2005_COMPAT
+
/* Define to 1 if the system <stdint.h> predates C++11. */
#undef __STDC_CONSTANT_MACROS
/* Define to 1 if the system <stdint.h> predates C++11. */
#undef __STDC_LIMIT_MACROS
+/* Define to 1 if C does not support variable-length arrays, and if the
+ compiler does not already define this. */
+#undef __STDC_NO_VLA__
+
/* The _GL_ASYNC_SAFE marker should be attached to functions that are
signal handlers (for signals other than SIGABRT, SIGPIPE) or can be
invoked from such signal handlers. Such functions have some restrictions:
@@ -1390,7 +1574,11 @@
/* Attributes. */
-#ifdef __has_attribute
+#if (defined __has_attribute \
+ && (!defined __clang_minor__ \
+ || (defined __apple_build_version__ \
+ ? 6000000 <= __apple_build_version__ \
+ : 3 < __clang_major__ + (5 <= __clang_minor__))))
# define _GL_HAS_ATTRIBUTE(attr) __has_attribute (__##attr##__)
#else
# define _GL_HAS_ATTRIBUTE(attr) _GL_ATTR_##attr
@@ -1406,12 +1594,12 @@
# define _GL_ATTR_fallthrough _GL_GNUC_PREREQ (7, 0)
# define _GL_ATTR_format _GL_GNUC_PREREQ (2, 7)
# define _GL_ATTR_leaf _GL_GNUC_PREREQ (4, 6)
+# define _GL_ATTR_malloc _GL_GNUC_PREREQ (3, 0)
# ifdef _ICC
# define _GL_ATTR_may_alias 0
# else
# define _GL_ATTR_may_alias _GL_GNUC_PREREQ (3, 3)
# endif
-# define _GL_ATTR_malloc _GL_GNUC_PREREQ (3, 0)
# define _GL_ATTR_noinline _GL_GNUC_PREREQ (3, 1)
# define _GL_ATTR_nonnull _GL_GNUC_PREREQ (3, 3)
# define _GL_ATTR_nonstring _GL_GNUC_PREREQ (8, 0)
@@ -1424,25 +1612,50 @@
# define _GL_ATTR_warn_unused_result _GL_GNUC_PREREQ (3, 4)
#endif
+#ifdef __has_c_attribute
+# if ((defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) <= 201710 \
+ && _GL_GNUC_PREREQ (4, 6))
+# pragma GCC diagnostic ignored "-Wpedantic"
+# endif
+# define _GL_HAS_C_ATTRIBUTE(attr) __has_c_attribute (__##attr##__)
+#else
+# define _GL_HAS_C_ATTRIBUTE(attr) 0
+#endif
+
+/* _GL_ATTRIBUTE_ALLOC_SIZE ((N)) declares that the Nth argument of the function
+ is the size of the returned memory block.
+ _GL_ATTRIBUTE_ALLOC_SIZE ((M, N)) declares that the Mth argument multiplied
+ by the Nth argument of the function is the size of the returned memory block.
+ */
+/* Applies to: function, pointer to function, function types. */
#if _GL_HAS_ATTRIBUTE (alloc_size)
# define _GL_ATTRIBUTE_ALLOC_SIZE(args) __attribute__ ((__alloc_size__ args))
#else
# define _GL_ATTRIBUTE_ALLOC_SIZE(args)
#endif
+/* _GL_ATTRIBUTE_ALWAYS_INLINE tells that the compiler should always inline the
+ function and report an error if it cannot do so. */
+/* Applies to: function. */
#if _GL_HAS_ATTRIBUTE (always_inline)
# define _GL_ATTRIBUTE_ALWAYS_INLINE __attribute__ ((__always_inline__))
#else
# define _GL_ATTRIBUTE_ALWAYS_INLINE
#endif
+/* _GL_ATTRIBUTE_ARTIFICIAL declares that the function is not important to show
+ in stack traces when debugging. The compiler should omit the function from
+ stack traces. */
+/* Applies to: function. */
#if _GL_HAS_ATTRIBUTE (artificial)
# define _GL_ATTRIBUTE_ARTIFICIAL __attribute__ ((__artificial__))
#else
# define _GL_ATTRIBUTE_ARTIFICIAL
#endif
+/* _GL_ATTRIBUTE_COLD declares that the function is rarely executed. */
+/* Applies to: functions. */
/* Avoid __attribute__ ((cold)) on MinGW; see thread starting at
<https://lists.gnu.org/r/emacs-devel/2019-04/msg01152.html>.
Also, Oracle Studio 12.6 requires 'cold' not '__cold__'. */
@@ -1456,13 +1669,46 @@
# define _GL_ATTRIBUTE_COLD
#endif
+/* _GL_ATTRIBUTE_CONST declares that it is OK for a compiler to omit duplicate
+ calls to the function with the same arguments.
+ This attribute is safe for a function that neither depends on nor affects
+ observable state, and always returns exactly once - e.g., does not loop
+ forever, and does not call longjmp.
+ (This attribute is stricter than _GL_ATTRIBUTE_PURE.) */
+/* Applies to: functions. */
#if _GL_HAS_ATTRIBUTE (const)
# define _GL_ATTRIBUTE_CONST __attribute__ ((__const__))
#else
# define _GL_ATTRIBUTE_CONST
#endif
-#if 201710L < __STDC_VERSION__
+/* _GL_ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers
+ that can be freed by passing them as the Ith argument to the
+ function F.
+ _GL_ATTRIBUTE_DEALLOC_FREE declares that the function returns pointers that
+ can be freed via 'free'; it can be used only after declaring 'free'. */
+/* Applies to: functions. Cannot be used on inline functions. */
+#if _GL_GNUC_PREREQ (11, 0)
+# define _GL_ATTRIBUTE_DEALLOC(f, i) __attribute__ ((__malloc__ (f, i)))
+#else
+# define _GL_ATTRIBUTE_DEALLOC(f, i)
+#endif
+/* If gnulib's <string.h> or <wchar.h> has already defined this macro, continue
+ to use this earlier definition, since <stdlib.h> may not have been included
+ yet. */
+#ifndef _GL_ATTRIBUTE_DEALLOC_FREE
+# define _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_DEALLOC (free, 1)
+#endif
+
+/* _GL_ATTRIBUTE_DEPRECATED: Declares that an entity is deprecated.
+ The compiler may warn if the entity is used. */
+/* Applies to:
+ - function, variable,
+ - struct, union, struct/union member,
+ - enumeration, enumeration item,
+ - typedef,
+ in C++ also: namespace, class, template specialization. */
+#if _GL_HAS_C_ATTRIBUTE (deprecated)
# define _GL_ATTRIBUTE_DEPRECATED [[__deprecated__]]
#elif _GL_HAS_ATTRIBUTE (deprecated)
# define _GL_ATTRIBUTE_DEPRECATED __attribute__ ((__deprecated__))
@@ -1470,6 +1716,11 @@
# define _GL_ATTRIBUTE_DEPRECATED
#endif
+/* _GL_ATTRIBUTE_ERROR(msg) requests an error if a function is called and
+ the function call is not optimized away.
+ _GL_ATTRIBUTE_WARNING(msg) requests a warning if a function is called and
+ the function call is not optimized away. */
+/* Applies to: functions. */
#if _GL_HAS_ATTRIBUTE (error)
# define _GL_ATTRIBUTE_ERROR(msg) __attribute__ ((__error__ (msg)))
# define _GL_ATTRIBUTE_WARNING(msg) __attribute__ ((__warning__ (msg)))
@@ -1481,14 +1732,21 @@
# define _GL_ATTRIBUTE_WARNING(msg)
#endif
+/* _GL_ATTRIBUTE_EXTERNALLY_VISIBLE declares that the entity should remain
+ visible to debuggers etc., even with '-fwhole-program'. */
+/* Applies to: functions, variables. */
#if _GL_HAS_ATTRIBUTE (externally_visible)
# define _GL_ATTRIBUTE_EXTERNALLY_VISIBLE __attribute__ ((externally_visible))
#else
# define _GL_ATTRIBUTE_EXTERNALLY_VISIBLE
#endif
-/* FALLTHROUGH is special, because it always expands to something. */
-#if 201710L < __STDC_VERSION__
+/* _GL_ATTRIBUTE_FALLTHROUGH declares that it is not a programming mistake if
+ the control flow falls through to the immediately following 'case' or
+ 'default' label. The compiler should not warn in this case. */
+/* Applies to: Empty statement (;), inside a 'switch' statement. */
+/* Always expands to something. */
+#if _GL_HAS_C_ATTRIBUTE (fallthrough)
# define _GL_ATTRIBUTE_FALLTHROUGH [[__fallthrough__]]
#elif _GL_HAS_ATTRIBUTE (fallthrough)
# define _GL_ATTRIBUTE_FALLTHROUGH __attribute__ ((__fallthrough__))
@@ -1496,18 +1754,47 @@
# define _GL_ATTRIBUTE_FALLTHROUGH ((void) 0)
#endif
+/* _GL_ATTRIBUTE_FORMAT ((ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK))
+ declares that the STRING-INDEXth function argument is a format string of
+ style ARCHETYPE, which is one of:
+ printf, gnu_printf
+ scanf, gnu_scanf,
+ strftime, gnu_strftime,
+ strfmon,
+ or the same thing prefixed and suffixed with '__'.
+ If FIRST-TO-CHECK is not 0, arguments starting at FIRST-TO_CHECK
+ are suitable for the format string. */
+/* Applies to: functions. */
#if _GL_HAS_ATTRIBUTE (format)
# define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec))
#else
# define _GL_ATTRIBUTE_FORMAT(spec)
#endif
+/* _GL_ATTRIBUTE_LEAF declares that if the function is called from some other
+ compilation unit, it executes code from that unit only by return or by
+ exception handling. This declaration lets the compiler optimize that unit
+ more aggressively. */
+/* Applies to: functions. */
#if _GL_HAS_ATTRIBUTE (leaf)
# define _GL_ATTRIBUTE_LEAF __attribute__ ((__leaf__))
#else
# define _GL_ATTRIBUTE_LEAF
#endif
+/* _GL_ATTRIBUTE_MALLOC declares that the function returns a pointer to freshly
+ allocated memory. */
+/* Applies to: functions. */
+#if _GL_HAS_ATTRIBUTE (malloc)
+# define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__))
+#else
+# define _GL_ATTRIBUTE_MALLOC
+#endif
+
+/* _GL_ATTRIBUTE_MAY_ALIAS declares that pointers to the type may point to the
+ same storage as pointers to other types. Thus this declaration disables
+ strict aliasing optimization. */
+/* Applies to: types. */
/* Oracle Studio 12.6 mishandles may_alias despite __has_attribute OK. */
#if _GL_HAS_ATTRIBUTE (may_alias) && !defined __SUNPRO_C
# define _GL_ATTRIBUTE_MAY_ALIAS __attribute__ ((__may_alias__))
@@ -1515,24 +1802,33 @@
# define _GL_ATTRIBUTE_MAY_ALIAS
#endif
-#if 201710L < __STDC_VERSION__
+/* _GL_ATTRIBUTE_MAYBE_UNUSED declares that it is not a programming mistake if
+ the entity is not used. The compiler should not warn if the entity is not
+ used. */
+/* Applies to:
+ - function, variable,
+ - struct, union, struct/union member,
+ - enumeration, enumeration item,
+ - typedef,
+ in C++ also: class. */
+/* In C++ and C2x, this is spelled [[__maybe_unused__]].
+ GCC's syntax is __attribute__ ((__unused__)).
+ clang supports both syntaxes. */
+#if _GL_HAS_C_ATTRIBUTE (maybe_unused)
# define _GL_ATTRIBUTE_MAYBE_UNUSED [[__maybe_unused__]]
-#elif _GL_HAS_ATTRIBUTE (unused)
-# define _GL_ATTRIBUTE_MAYBE_UNUSED __attribute__ ((__unused__))
#else
-# define _GL_ATTRIBUTE_MAYBE_UNUSED
+# define _GL_ATTRIBUTE_MAYBE_UNUSED _GL_ATTRIBUTE_UNUSED
#endif
-/* Earlier spellings of this macro. */
+/* Alternative spelling of this macro, for convenience. */
#define _GL_UNUSED _GL_ATTRIBUTE_MAYBE_UNUSED
+/* Earlier spellings of this macro. */
#define _UNUSED_PARAMETER_ _GL_ATTRIBUTE_MAYBE_UNUSED
-#if _GL_HAS_ATTRIBUTE (malloc)
-# define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__))
-#else
-# define _GL_ATTRIBUTE_MALLOC
-#endif
-
-#if 201710L < __STDC_VERSION__
+/* _GL_ATTRIBUTE_NODISCARD declares that the caller of the function should not
+ discard the return value. The compiler may warn if the caller does not use
+ the return value, unless the caller uses something like ignore_value. */
+/* Applies to: function, enumeration, class. */
+#if _GL_HAS_C_ATTRIBUTE (nodiscard)
# define _GL_ATTRIBUTE_NODISCARD [[__nodiscard__]]
#elif _GL_HAS_ATTRIBUTE (warn_unused_result)
# define _GL_ATTRIBUTE_NODISCARD __attribute__ ((__warn_unused_result__))
@@ -1540,18 +1836,30 @@
# define _GL_ATTRIBUTE_NODISCARD
#endif
+/* _GL_ATTRIBUTE_NOINLINE tells that the compiler should not inline the
+ function. */
+/* Applies to: functions. */
#if _GL_HAS_ATTRIBUTE (noinline)
# define _GL_ATTRIBUTE_NOINLINE __attribute__ ((__noinline__))
#else
# define _GL_ATTRIBUTE_NOINLINE
#endif
+/* _GL_ATTRIBUTE_NONNULL ((N1, N2,...)) declares that the arguments N1, N2,...
+ must not be NULL.
+ _GL_ATTRIBUTE_NONNULL () declares that all pointer arguments must not be
+ null. */
+/* Applies to: functions. */
#if _GL_HAS_ATTRIBUTE (nonnull)
# define _GL_ATTRIBUTE_NONNULL(args) __attribute__ ((__nonnull__ args))
#else
# define _GL_ATTRIBUTE_NONNULL(args)
#endif
+/* _GL_ATTRIBUTE_NONSTRING declares that the contents of a character array is
+ not meant to be NUL-terminated. */
+/* Applies to: struct/union members and variables that are arrays of element
+ type '[[un]signed] char'. */
#if _GL_HAS_ATTRIBUTE (nonstring)
# define _GL_ATTRIBUTE_NONSTRING __attribute__ ((__nonstring__))
#else
@@ -1560,148 +1868,80 @@
/* There is no _GL_ATTRIBUTE_NORETURN; use _Noreturn instead. */
+/* _GL_ATTRIBUTE_NOTHROW declares that the function does not throw exceptions.
+ */
+/* Applies to: functions. */
#if _GL_HAS_ATTRIBUTE (nothrow) && !defined __cplusplus
# define _GL_ATTRIBUTE_NOTHROW __attribute__ ((__nothrow__))
#else
# define _GL_ATTRIBUTE_NOTHROW
#endif
+/* _GL_ATTRIBUTE_PACKED declares:
+ For struct members: The member has the smallest possible alignment.
+ For struct, union, class: All members have the smallest possible alignment,
+ minimizing the memory required. */
+/* Applies to: struct members, struct, union,
+ in C++ also: class. */
#if _GL_HAS_ATTRIBUTE (packed)
# define _GL_ATTRIBUTE_PACKED __attribute__ ((__packed__))
#else
# define _GL_ATTRIBUTE_PACKED
#endif
+/* _GL_ATTRIBUTE_PURE declares that It is OK for a compiler to omit duplicate
+ calls to the function with the same arguments if observable state is not
+ changed between calls.
+ This attribute is safe for a function that does not affect
+ observable state, and always returns exactly once.
+ (This attribute is looser than _GL_ATTRIBUTE_CONST.) */
+/* Applies to: functions. */
#if _GL_HAS_ATTRIBUTE (pure)
# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
#else
# define _GL_ATTRIBUTE_PURE
#endif
+/* _GL_ATTRIBUTE_RETURNS_NONNULL declares that the function's return value is
+ a non-NULL pointer. */
+/* Applies to: functions. */
#if _GL_HAS_ATTRIBUTE (returns_nonnull)
# define _GL_ATTRIBUTE_RETURNS_NONNULL __attribute__ ((__returns_nonnull__))
#else
# define _GL_ATTRIBUTE_RETURNS_NONNULL
#endif
+/* _GL_ATTRIBUTE_SENTINEL(pos) declares that the variadic function expects a
+ trailing NULL argument.
+ _GL_ATTRIBUTE_SENTINEL () - The last argument is NULL (requires C99).
+ _GL_ATTRIBUTE_SENTINEL ((N)) - The (N+1)st argument from the end is NULL. */
+/* Applies to: functions. */
#if _GL_HAS_ATTRIBUTE (sentinel)
# define _GL_ATTRIBUTE_SENTINEL(pos) __attribute__ ((__sentinel__ pos))
#else
# define _GL_ATTRIBUTE_SENTINEL(pos)
#endif
-
-/* To support C++ as well as C, use _GL_UNUSED_LABEL with trailing ';'. */
-#if !defined __cplusplus || _GL_GNUC_PREREQ (4, 5)
-# define _GL_UNUSED_LABEL _GL_ATTRIBUTE_MAYBE_UNUSED
+/* A helper macro. Don't use it directly. */
+#if _GL_HAS_ATTRIBUTE (unused)
+# define _GL_ATTRIBUTE_UNUSED __attribute__ ((__unused__))
#else
-# define _GL_UNUSED_LABEL
+# define _GL_ATTRIBUTE_UNUSED
#endif
-/* Please see the Gnulib manual for how to use these macros.
-
- Suppress extern inline with HP-UX cc, as it appears to be broken; see
- <https://lists.gnu.org/r/bug-texinfo/2013-02/msg00030.html>.
-
- Suppress extern inline with Sun C in standards-conformance mode, as it
- mishandles inline functions that call each other. E.g., for 'inline void f
- (void) { } inline void g (void) { f (); }', c99 incorrectly complains
- 'reference to static identifier "f" in extern inline function'.
- This bug was observed with Sun C 5.12 SunOS_i386 2011/11/16.
-
- Suppress extern inline (with or without __attribute__ ((__gnu_inline__)))
- on configurations that mistakenly use 'static inline' to implement
- functions or macros in standard C headers like <ctype.h>. For example,
- if isdigit is mistakenly implemented via a static inline function,
- a program containing an extern inline function that calls isdigit
- may not work since the C standard prohibits extern inline functions
- from calling static functions (ISO C 99 section 6.7.4.(3).
- This bug is known to occur on:
-
- OS X 10.8 and earlier; see:
- https://lists.gnu.org/r/bug-gnulib/2012-12/msg00023.html
-
- DragonFly; see
- http://muscles.dragonflybsd.org/bulk/clang-master-potential/20141111_102002/logs/ah-tty-0.3.12.log
-
- FreeBSD; see:
- https://lists.gnu.org/r/bug-gnulib/2014-07/msg00104.html
-
- OS X 10.9 has a macro __header_inline indicating the bug is fixed for C and
- for clang but remains for g++; see <https://trac.macports.org/ticket/41033>.
- Assume DragonFly and FreeBSD will be similar.
-
- GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99
- inline semantics, unless -fgnu89-inline is used. It defines a macro
- __GNUC_STDC_INLINE__ to indicate this situation or a macro
- __GNUC_GNU_INLINE__ to indicate the opposite situation.
- GCC 4.2 with -std=c99 or -std=gnu99 implements the GNU C inline
- semantics but warns, unless -fgnu89-inline is used:
- warning: C99 inline functions are not supported; using GNU89
- warning: to disable this warning use -fgnu89-inline or the gnu_inline function attribute
- It defines a macro __GNUC_GNU_INLINE__ to indicate this situation.
- */
-#if (((defined __APPLE__ && defined __MACH__) \
- || defined __DragonFly__ || defined __FreeBSD__) \
- && (defined __header_inline \
- ? (defined __cplusplus && defined __GNUC_STDC_INLINE__ \
- && ! defined __clang__) \
- : ((! defined _DONT_USE_CTYPE_INLINE_ \
- && (defined __GNUC__ || defined __cplusplus)) \
- || (defined _FORTIFY_SOURCE && 0 < _FORTIFY_SOURCE \
- && defined __GNUC__ && ! defined __cplusplus))))
-# define _GL_EXTERN_INLINE_STDHEADER_BUG
-#endif
-#if ((__GNUC__ \
- ? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \
- : (199901L <= __STDC_VERSION__ \
- && !defined __HP_cc \
- && !defined __PGI \
- && !(defined __SUNPRO_C && __STDC__))) \
- && !defined _GL_EXTERN_INLINE_STDHEADER_BUG)
-# define _GL_INLINE inline
-# define _GL_EXTERN_INLINE extern inline
-# define _GL_EXTERN_INLINE_IN_USE
-#elif (2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __STRICT_ANSI__ \
- && !defined _GL_EXTERN_INLINE_STDHEADER_BUG)
-# if defined __GNUC_GNU_INLINE__ && __GNUC_GNU_INLINE__
- /* __gnu_inline__ suppresses a GCC 4.2 diagnostic. */
-# define _GL_INLINE extern inline __attribute__ ((__gnu_inline__))
-# else
-# define _GL_INLINE extern inline
-# endif
-# define _GL_EXTERN_INLINE extern
-# define _GL_EXTERN_INLINE_IN_USE
+/* _GL_UNUSED_LABEL; declares that it is not a programming mistake if the
+ immediately preceding label is not used. The compiler should not warn
+ if the label is not used. */
+/* Applies to: label (both in C and C++). */
+/* Note that g++ < 4.5 does not support the '__attribute__ ((__unused__)) ;'
+ syntax. But clang does. */
+#if !(defined __cplusplus && !_GL_GNUC_PREREQ (4, 5)) || defined __clang__
+# define _GL_UNUSED_LABEL _GL_ATTRIBUTE_UNUSED
#else
-# define _GL_INLINE static _GL_UNUSED
-# define _GL_EXTERN_INLINE static _GL_UNUSED
+# define _GL_UNUSED_LABEL
#endif
-/* In GCC 4.6 (inclusive) to 5.1 (exclusive),
- suppress bogus "no previous prototype for 'FOO'"
- and "no previous declaration for 'FOO'" diagnostics,
- when FOO is an inline function in the header; see
- <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=54113> and
- <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63877>. */
-#if __GNUC__ == 4 && 6 <= __GNUC_MINOR__
-# if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__
-# define _GL_INLINE_HEADER_CONST_PRAGMA
-# else
-# define _GL_INLINE_HEADER_CONST_PRAGMA \
- _Pragma ("GCC diagnostic ignored \"-Wsuggest-attribute=const\"")
-# endif
-# define _GL_INLINE_HEADER_BEGIN \
- _Pragma ("GCC diagnostic push") \
- _Pragma ("GCC diagnostic ignored \"-Wmissing-prototypes\"") \
- _Pragma ("GCC diagnostic ignored \"-Wmissing-declarations\"") \
- _GL_INLINE_HEADER_CONST_PRAGMA
-# define _GL_INLINE_HEADER_END \
- _Pragma ("GCC diagnostic pop")
-#else
-# define _GL_INLINE_HEADER_BEGIN
-# define _GL_INLINE_HEADER_END
-#endif
/* Define to `int' if <sys/types.h> doesn't define. */
#undef gid_t
diff --git a/gnulib/configure b/gnulib/configure
index 39555afe9f0..cc7e8287d5a 100644
--- a/gnulib/configure
+++ b/gnulib/configure
@@ -622,12 +622,15 @@ ac_includes_default="\
gl_use_threads_default=
gl_use_winpthreads_default=
+ac_config_libobj_dir=import
ac_func_list=
gl_fnmatch_required=POSIX
ac_subst_vars='am__EXEEXT_FALSE
am__EXEEXT_TRUE
+gltests_LIBOBJDEPS
gltests_LTLIBOBJS
gltests_LIBOBJS
+gl_LIBOBJDEPS
gl_LTLIBOBJS
gl_LIBOBJS
LTLIBOBJS
@@ -671,7 +674,28 @@ INSTALL_SCRIPT
INSTALL_PROGRAM
LIBGNU_LTLIBDEPS
LIBGNU_LIBDEPS
+GL_CFLAG_GNULIB_WARNINGS
+GL_CFLAG_ALLOW_WARNINGS
gltests_WITNESS
+GL_COND_OBJ_WMEMPCPY_FALSE
+GL_COND_OBJ_WMEMPCPY_TRUE
+GL_COND_OBJ_WMEMCHR_FALSE
+GL_COND_OBJ_WMEMCHR_TRUE
+GL_COND_OBJ_WINDOWS_RWLOCK_FALSE
+GL_COND_OBJ_WINDOWS_RWLOCK_TRUE
+GL_COND_OBJ_WINDOWS_RECMUTEX_FALSE
+GL_COND_OBJ_WINDOWS_RECMUTEX_TRUE
+GL_COND_OBJ_WINDOWS_ONCE_FALSE
+GL_COND_OBJ_WINDOWS_ONCE_TRUE
+GL_COND_OBJ_WINDOWS_MUTEX_FALSE
+GL_COND_OBJ_WINDOWS_MUTEX_TRUE
+GL_GNULIB_TOWCTRANS
+GL_GNULIB_WCTRANS
+GL_GNULIB_ISWCTYPE
+GL_GNULIB_WCTYPE
+GL_GNULIB_ISWXDIGIT
+GL_GNULIB_ISWDIGIT
+GL_GNULIB_ISWBLANK
REPLACE_TOWLOWER
REPLACE_ISWCNTRL
HAVE_WCTYPE_H
@@ -684,20 +708,30 @@ REPLACE_ISWBLANK
HAVE_WCTRANS_T
HAVE_WCTYPE_T
HAVE_ISWBLANK
-GNULIB_TOWCTRANS
-GNULIB_WCTRANS
-GNULIB_ISWCTYPE
-GNULIB_WCTYPE
-GNULIB_ISWXDIGIT
-GNULIB_ISWDIGIT
-GNULIB_ISWBLANK
HAVE_CRTDEFS_H
HAVE_WINT_T
NEXT_AS_FIRST_DIRECTIVE_WCHAR_H
NEXT_WCHAR_H
+GL_COND_OBJ_UNSETENV_FALSE
+GL_COND_OBJ_UNSETENV_TRUE
HAVE_UNISTD_H
NEXT_AS_FIRST_DIRECTIVE_UNISTD_H
NEXT_UNISTD_H
+GL_COND_OBJ_TIME_R_FALSE
+GL_COND_OBJ_TIME_R_TRUE
+GL_GNULIB_MDA_TZSET
+GL_GNULIB_TZSET
+GL_GNULIB_TIME_RZ
+GL_GNULIB_TIME_R
+GL_GNULIB_TIMESPEC_GETRES
+GL_GNULIB_TIMESPEC_GET
+GL_GNULIB_TIMEGM
+GL_GNULIB_STRPTIME
+GL_GNULIB_STRFTIME
+GL_GNULIB_NANOSLEEP
+GL_GNULIB_LOCALTIME
+GL_GNULIB_MKTIME
+GL_GNULIB_CTIME
TIME_H_DEFINES_TIME_UTC
UNISTD_H_DEFINES_STRUCT_TIMESPEC
PTHREAD_H_DEFINES_STRUCT_TIMESPEC
@@ -707,6 +741,7 @@ NEXT_AS_FIRST_DIRECTIVE_TIME_H
NEXT_TIME_H
REPLACE_LOCALTIME
REPLACE_GMTIME
+GNULIB_GETTIMEOFDAY
REPLACE_TZSET
REPLACE_TIMEGM
REPLACE_STRFTIME
@@ -715,26 +750,15 @@ REPLACE_MKTIME
REPLACE_LOCALTIME_R
REPLACE_CTIME
HAVE_TIMEZONE_T
+HAVE_TIMESPEC_GETRES
HAVE_TIMESPEC_GET
HAVE_TIMEGM
HAVE_STRPTIME
HAVE_NANOSLEEP
HAVE_DECL_LOCALTIME_R
-GNULIB_MDA_TZSET
-GNULIB_TZSET
-GNULIB_TIME_RZ
-GNULIB_TIME_R
-GNULIB_TIMESPEC_GET
-GNULIB_TIMEGM
-GNULIB_STRPTIME
-GNULIB_STRFTIME
-GNULIB_NANOSLEEP
-GNULIB_LOCALTIME
-GNULIB_MKTIME
-GNULIB_CTIME
+GL_GNULIB_WAITPID
NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H
NEXT_SYS_WAIT_H
-GNULIB_WAITPID
HAVE_SYS_UIO_H
NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H
NEXT_SYS_UIO_H
@@ -745,22 +769,53 @@ NEXT_SYS_TYPES_H
HAVE_SYS_RANDOM_H
NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H
NEXT_SYS_RANDOM_H
+GL_COND_OBJ_STRTOK_R_FALSE
+GL_COND_OBJ_STRTOK_R_TRUE
+GL_COND_OBJ_STRNLEN_FALSE
+GL_COND_OBJ_STRNLEN_TRUE
HAVE_STRINGS_H
NEXT_AS_FIRST_DIRECTIVE_STRINGS_H
NEXT_STRINGS_H
NEXT_AS_FIRST_DIRECTIVE_STRING_H
NEXT_STRING_H
+GL_COND_OBJ_STRERROR_OVERRIDE_FALSE
+GL_COND_OBJ_STRERROR_OVERRIDE_TRUE
+GL_COND_OBJ_STRERROR_FALSE
+GL_COND_OBJ_STRERROR_TRUE
+GL_COND_OBJ_STRDUP_FALSE
+GL_COND_OBJ_STRDUP_TRUE
+GL_COND_OBJ_STRCHRNUL_FALSE
+GL_COND_OBJ_STRCHRNUL_TRUE
NEXT_AS_FIRST_DIRECTIVE_STDLIB_H
NEXT_STDLIB_H
+GL_COND_OBJ_STDIO_WRITE_FALSE
+GL_COND_OBJ_STDIO_WRITE_TRUE
+GL_COND_OBJ_STDIO_READ_FALSE
+GL_COND_OBJ_STDIO_READ_TRUE
NEXT_AS_FIRST_DIRECTIVE_STDIO_H
NEXT_STDIO_H
-HAVE__BOOL
+GL_GENERATE_STDINT_H_FALSE
+GL_GENERATE_STDINT_H_TRUE
+STDINT_H
+GL_GENERATE_STDDEF_H_FALSE
+GL_GENERATE_STDDEF_H_TRUE
+STDDEF_H
GL_GENERATE_STDBOOL_H_FALSE
GL_GENERATE_STDBOOL_H_TRUE
STDBOOL_H
+HAVE__BOOL
GL_GENERATE_STDALIGN_H_FALSE
GL_GENERATE_STDALIGN_H_TRUE
STDALIGN_H
+GL_COND_OBJ_STAT_FALSE
+GL_COND_OBJ_STAT_TRUE
+GL_COND_OBJ_SOCKET_FALSE
+GL_COND_OBJ_SOCKET_TRUE
+GL_GNULIB_SIGACTION
+GL_GNULIB_SIGPROCMASK
+GL_GNULIB_SIGNAL_H_SIGPIPE
+GL_GNULIB_RAISE
+GL_GNULIB_PTHREAD_SIGMASK
NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H
NEXT_SIGNAL_H
REPLACE_RAISE
@@ -774,11 +829,16 @@ HAVE_SIGSET_T
HAVE_RAISE
HAVE_PTHREAD_SIGMASK
HAVE_POSIX_SIGNALBLOCKING
-GNULIB_SIGACTION
-GNULIB_SIGPROCMASK
-GNULIB_SIGNAL_H_SIGPIPE
-GNULIB_RAISE
-GNULIB_PTHREAD_SIGMASK
+GL_COND_OBJ_SETSOCKOPT_FALSE
+GL_COND_OBJ_SETSOCKOPT_TRUE
+GL_COND_OBJ_SETLOCALE_LOCK_FALSE
+GL_COND_OBJ_SETLOCALE_LOCK_TRUE
+GL_COND_OBJ_SETENV_FALSE
+GL_COND_OBJ_SETENV_TRUE
+GL_GNULIB_SELECT
+GL_GNULIB_PSELECT
+GL_COND_OBJ_SELECT_FALSE
+GL_COND_OBJ_SELECT_TRUE
LIB_SELECT
LIBSOCKET
HAVE_SYS_SELECT_H
@@ -787,14 +847,33 @@ NEXT_SYS_SELECT_H
REPLACE_SELECT
REPLACE_PSELECT
HAVE_PSELECT
-GNULIB_SELECT
-GNULIB_PSELECT
+GL_COND_OBJ_RMDIR_FALSE
+GL_COND_OBJ_RMDIR_TRUE
+GL_COND_OBJ_REWINDDIR_FALSE
+GL_COND_OBJ_REWINDDIR_TRUE
+GL_COND_OBJ_RENAME_FALSE
+GL_COND_OBJ_RENAME_TRUE
+GL_COND_OBJ_READLINK_FALSE
+GL_COND_OBJ_READLINK_TRUE
+GL_COND_OBJ_READDIR_FALSE
+GL_COND_OBJ_READDIR_TRUE
+GL_COND_OBJ_RAWMEMCHR_FALSE
+GL_COND_OBJ_RAWMEMCHR_TRUE
+GL_COND_OBJ_PIPE_FALSE
+GL_COND_OBJ_PIPE_TRUE
+GL_COND_OBJ_OPENDIR_FALSE
+GL_COND_OBJ_OPENDIR_TRUE
+GL_COND_OBJ_OPENAT_FALSE
+GL_COND_OBJ_OPENAT_TRUE
+GL_COND_OBJ_OPEN_FALSE
+GL_COND_OBJ_OPEN_TRUE
GL_GENERATE_NETINET_IN_H_FALSE
GL_GENERATE_NETINET_IN_H_TRUE
NETINET_IN_H
HAVE_NETINET_IN_H
NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H
NEXT_NETINET_IN_H
+GL_GNULIB_GETADDRINFO
HAVE_NETDB_H
NEXT_AS_FIRST_DIRECTIVE_NETDB_H
NEXT_NETDB_H
@@ -805,7 +884,65 @@ HAVE_DECL_GETADDRINFO
HAVE_DECL_GAI_STRERROR
HAVE_DECL_FREEADDRINFO
HAVE_STRUCT_ADDRINFO
-GNULIB_GETADDRINFO
+GL_COND_OBJ_MSVC_NOTHROW_FALSE
+GL_COND_OBJ_MSVC_NOTHROW_TRUE
+GL_COND_OBJ_MSVC_INVAL_FALSE
+GL_COND_OBJ_MSVC_INVAL_TRUE
+GL_COND_OBJ_MKOSTEMP_FALSE
+GL_COND_OBJ_MKOSTEMP_TRUE
+GL_COND_OBJ_MKDTEMP_FALSE
+GL_COND_OBJ_MKDTEMP_TRUE
+GL_COND_OBJ_MKDIR_FALSE
+GL_COND_OBJ_MKDIR_TRUE
+GL_COND_OBJ_MEMRCHR_FALSE
+GL_COND_OBJ_MEMRCHR_TRUE
+GL_COND_OBJ_MEMPCPY_FALSE
+GL_COND_OBJ_MEMPCPY_TRUE
+GL_GNULIB_MDA_STRDUP
+GL_GNULIB_MDA_MEMCCPY
+GL_GNULIB_STRVERSCMP
+GL_GNULIB_STRSIGNAL
+GL_GNULIB_SIGDESCR_NP
+GL_GNULIB_SIGABBREV_NP
+GL_GNULIB_STRERRORNAME_NP
+GL_GNULIB_STRERROR_R
+GL_GNULIB_STRERROR
+GL_GNULIB_MBSTOK_R
+GL_GNULIB_MBSSEP
+GL_GNULIB_MBSSPN
+GL_GNULIB_MBSPBRK
+GL_GNULIB_MBSCSPN
+GL_GNULIB_MBSCASESTR
+GL_GNULIB_MBSPCASECMP
+GL_GNULIB_MBSNCASECMP
+GL_GNULIB_MBSCASECMP
+GL_GNULIB_MBSSTR
+GL_GNULIB_MBSRCHR
+GL_GNULIB_MBSCHR
+GL_GNULIB_MBSNLEN
+GL_GNULIB_MBSLEN
+GL_GNULIB_STRTOK_R
+GL_GNULIB_STRCASESTR
+GL_GNULIB_STRSTR
+GL_GNULIB_STRSEP
+GL_GNULIB_STRPBRK
+GL_GNULIB_STRNLEN
+GL_GNULIB_STRNDUP
+GL_GNULIB_STRNCAT
+GL_GNULIB_STRDUP
+GL_GNULIB_STRCHRNUL
+GL_GNULIB_STPNCPY
+GL_GNULIB_STPCPY
+GL_GNULIB_RAWMEMCHR
+GL_GNULIB_MEMRCHR
+GL_GNULIB_MEMPCPY
+GL_GNULIB_MEMMEM
+GL_GNULIB_MEMCHR
+GL_GNULIB_FFSLL
+GL_GNULIB_FFSL
+GL_GNULIB_EXPLICIT_BZERO
+GL_COND_OBJ_MEMCHR_FALSE
+GL_COND_OBJ_MEMCHR_TRUE
UNDEFINE_STRTOK_R
REPLACE_STRSIGNAL
REPLACE_STRERRORNAME_NP
@@ -846,74 +983,44 @@ HAVE_DECL_MEMMEM
HAVE_FFSLL
HAVE_FFSL
HAVE_EXPLICIT_BZERO
-GNULIB_MDA_STRDUP
-GNULIB_MDA_MEMCCPY
HAVE_MBSLEN
-GNULIB_STRVERSCMP
-GNULIB_STRSIGNAL
-GNULIB_SIGDESCR_NP
-GNULIB_SIGABBREV_NP
-GNULIB_STRERRORNAME_NP
-GNULIB_STRERROR_R
-GNULIB_STRERROR
-GNULIB_MBSTOK_R
-GNULIB_MBSSEP
-GNULIB_MBSSPN
-GNULIB_MBSPBRK
-GNULIB_MBSCSPN
-GNULIB_MBSCASESTR
-GNULIB_MBSPCASECMP
-GNULIB_MBSNCASECMP
-GNULIB_MBSCASECMP
-GNULIB_MBSSTR
-GNULIB_MBSRCHR
-GNULIB_MBSCHR
-GNULIB_MBSNLEN
-GNULIB_MBSLEN
-GNULIB_STRTOK_R
-GNULIB_STRCASESTR
-GNULIB_STRSTR
-GNULIB_STRSEP
-GNULIB_STRPBRK
-GNULIB_STRNLEN
-GNULIB_STRNDUP
-GNULIB_STRNCAT
-GNULIB_STRDUP
-GNULIB_STRCHRNUL
-GNULIB_STPNCPY
-GNULIB_STPCPY
-GNULIB_RAWMEMCHR
-GNULIB_MEMRCHR
-GNULIB_MEMPCPY
-GNULIB_MEMMEM
-GNULIB_MEMCHR
-GNULIB_FFSLL
-GNULIB_FFSL
-GNULIB_EXPLICIT_BZERO
+GL_COND_OBJ_MBTOWC_FALSE
+GL_COND_OBJ_MBTOWC_TRUE
+GL_COND_OBJ_MBSRTOWCS_FALSE
+GL_COND_OBJ_MBSRTOWCS_TRUE
+GL_COND_OBJ_MBSINIT_FALSE
+GL_COND_OBJ_MBSINIT_TRUE
HAVE_VISIBILITY
CFLAG_VISIBILITY
+GL_COND_OBJ_MBRTOWC_FALSE
+GL_COND_OBJ_MBRTOWC_TRUE
LIB_MBRTOWC
LOCALE_ZH_CN
LOCALE_FR_UTF8
LOCALE_JA
NEXT_AS_FIRST_DIRECTIVE_MATH_H
NEXT_MATH_H
+GL_COND_OBJ_LSTAT_FALSE
+GL_COND_OBJ_LSTAT_TRUE
LTLIBMULTITHREAD
LIBMULTITHREAD
LTLIBTHREAD
LIBTHREAD
LIBSTDTHREAD
+GL_GNULIB_LOCALENAME
+GL_GNULIB_DUPLOCALE
+GL_GNULIB_SETLOCALE_NULL
+GL_GNULIB_SETLOCALE
+GL_GNULIB_LOCALECONV
NEXT_AS_FIRST_DIRECTIVE_LOCALE_H
NEXT_LOCALE_H
HAVE_XLOCALE_H
NEXT_AS_FIRST_DIRECTIVE_STDDEF_H
NEXT_STDDEF_H
-GL_GENERATE_STDDEF_H_FALSE
-GL_GENERATE_STDDEF_H_TRUE
-STDDEF_H
HAVE_WCHAR_T
HAVE_MAX_ALIGN_T
REPLACE_NULL
+LOCALENAME_ENHANCE_LOCALE_FUNCS
REPLACE_STRUCT_LCONV
REPLACE_FREELOCALE
REPLACE_DUPLOCALE
@@ -923,12 +1030,18 @@ REPLACE_LOCALECONV
HAVE_FREELOCALE
HAVE_DUPLOCALE
HAVE_NEWLOCALE
-GNULIB_LOCALENAME
-GNULIB_DUPLOCALE
-GNULIB_SETLOCALE_NULL
-GNULIB_SETLOCALE
-GNULIB_LOCALECONV
LOCALCHARSET_TESTS_ENVIRONMENT
+GL_COND_OBJ_LISTEN_FALSE
+GL_COND_OBJ_LISTEN_TRUE
+GL_GENERATE_LIMITS_H_FALSE
+GL_GENERATE_LIMITS_H_TRUE
+LIMITS_H
+GL_COND_OBJ_ISBLANK_FALSE
+GL_COND_OBJ_ISBLANK_TRUE
+GL_GNULIB_STRTOUMAX
+GL_GNULIB_STRTOIMAX
+GL_GNULIB_IMAXDIV
+GL_GNULIB_IMAXABS
NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H
NEXT_INTTYPES_H
UINT64_MAX_EQ_ULONG_MAX
@@ -943,13 +1056,6 @@ HAVE_DECL_STRTOUMAX
HAVE_DECL_STRTOIMAX
HAVE_DECL_IMAXDIV
HAVE_DECL_IMAXABS
-GNULIB_STRTOUMAX
-GNULIB_STRTOIMAX
-GNULIB_IMAXDIV
-GNULIB_IMAXABS
-GL_GENERATE_STDINT_H_FALSE
-GL_GENERATE_STDINT_H_TRUE
-STDINT_H
HAVE_SYS_INTTYPES_H
HAVE_SYS_BITYPES_H
HAVE_C99_STDINT_H
@@ -973,21 +1079,25 @@ NEXT_STDINT_H
HAVE_SYS_TYPES_H
HAVE_INTTYPES_H
HAVE_WCHAR_H
-GNULIB_OVERRIDES_WINT_T
-GL_GENERATE_LIMITS_H_FALSE
-GL_GENERATE_LIMITS_H_TRUE
-LIMITS_H
+GNULIBHEADERS_OVERRIDE_WINT_T
NEXT_AS_FIRST_DIRECTIVE_LIMITS_H
NEXT_LIMITS_H
+GL_COND_OBJ_INET_NTOP_FALSE
+GL_COND_OBJ_INET_NTOP_TRUE
INET_NTOP_LIB
LIB_HARD_LOCALE
LIB_SETLOCALE_NULL
LIB_SCHED_YIELD
LIBPMULTITHREAD
LIBPTHREAD
+GL_COND_OBJ_GLOB_PATTERN_P_FALSE
+GL_COND_OBJ_GLOB_PATTERN_P_TRUE
+GL_COND_OBJ_GLOB_FALSE
+GL_COND_OBJ_GLOB_TRUE
GL_GENERATE_GLOB_H_FALSE
GL_GENERATE_GLOB_H_TRUE
GLOB_H
+GL_GNULIB_GLOB
HAVE_GLOB_H
NEXT_AS_FIRST_DIRECTIVE_GLOB_H
NEXT_GLOB_H
@@ -995,7 +1105,9 @@ REPLACE_GLOB_PATTERN_P
REPLACE_GLOB
HAVE_GLOB_PATTERN_P
HAVE_GLOB
-GNULIB_GLOB
+GL_GNULIB_GETTIMEOFDAY
+GL_COND_OBJ_GETTIMEOFDAY_FALSE
+GL_COND_OBJ_GETTIMEOFDAY_TRUE
NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H
NEXT_SYS_TIME_H
REPLACE_STRUCT_TIMEVAL
@@ -1003,14 +1115,83 @@ REPLACE_GETTIMEOFDAY
HAVE_SYS_TIME_H
HAVE_STRUCT_TIMEVAL
HAVE_GETTIMEOFDAY
-GNULIB_GETTIMEOFDAY
LTLIBINTL
LIBINTL
+GL_GNULIB_GETRANDOM
+GL_COND_OBJ_GETRANDOM_FALSE
+GL_COND_OBJ_GETRANDOM_TRUE
LIB_GETRANDOM
REPLACE_GETRANDOM
HAVE_GETRANDOM
-GNULIB_GETRANDOM
LIB_GETLOGIN
+GL_COND_OBJ_GETLOGIN_R_FALSE
+GL_COND_OBJ_GETLOGIN_R_TRUE
+GL_COND_OBJ_GETLINE_FALSE
+GL_COND_OBJ_GETLINE_TRUE
+GL_COND_OBJ_GETDTABLESIZE_FALSE
+GL_COND_OBJ_GETDTABLESIZE_TRUE
+GL_GNULIB_MDA_TEMPNAM
+GL_GNULIB_MDA_PUTW
+GL_GNULIB_MDA_GETW
+GL_GNULIB_MDA_FILENO
+GL_GNULIB_MDA_FDOPEN
+GL_GNULIB_MDA_FCLOSEALL
+GL_GNULIB_VSPRINTF_POSIX
+GL_GNULIB_VSNPRINTF
+GL_GNULIB_VPRINTF_POSIX
+GL_GNULIB_VPRINTF
+GL_GNULIB_VFPRINTF_POSIX
+GL_GNULIB_VFPRINTF
+GL_GNULIB_VDPRINTF
+GL_GNULIB_VSCANF
+GL_GNULIB_VFSCANF
+GL_GNULIB_VASPRINTF
+GL_GNULIB_TMPFILE
+GL_GNULIB_STDIO_H_SIGPIPE
+GL_GNULIB_STDIO_H_NONBLOCKING
+GL_GNULIB_SPRINTF_POSIX
+GL_GNULIB_SNPRINTF
+GL_GNULIB_SCANF
+GL_GNULIB_RENAMEAT
+GL_GNULIB_RENAME
+GL_GNULIB_REMOVE
+GL_GNULIB_PUTS
+GL_GNULIB_PUTCHAR
+GL_GNULIB_PUTC
+GL_GNULIB_PRINTF_POSIX
+GL_GNULIB_PRINTF
+GL_GNULIB_POPEN
+GL_GNULIB_PERROR
+GL_GNULIB_PCLOSE
+GL_GNULIB_OBSTACK_PRINTF_POSIX
+GL_GNULIB_OBSTACK_PRINTF
+GL_GNULIB_GETLINE
+GL_GNULIB_GETDELIM
+GL_GNULIB_GETCHAR
+GL_GNULIB_GETC
+GL_GNULIB_FWRITE
+GL_GNULIB_FTELLO
+GL_GNULIB_FTELL
+GL_GNULIB_FSEEKO
+GL_GNULIB_FSEEK
+GL_GNULIB_FSCANF
+GL_GNULIB_FREOPEN
+GL_GNULIB_FREAD
+GL_GNULIB_FPUTS
+GL_GNULIB_FPUTC
+GL_GNULIB_FPURGE
+GL_GNULIB_FPRINTF_POSIX
+GL_GNULIB_FPRINTF
+GL_GNULIB_FOPEN_GNU
+GL_GNULIB_FOPEN
+GL_GNULIB_FGETS
+GL_GNULIB_FGETC
+GL_GNULIB_FFLUSH
+GL_GNULIB_FDOPEN
+GL_GNULIB_FCLOSE
+GL_GNULIB_DPRINTF
+GL_COND_OBJ_GETDELIM_FALSE
+GL_COND_OBJ_GETDELIM_TRUE
REPLACE_VSPRINTF
REPLACE_VSNPRINTF
REPLACE_VPRINTF
@@ -1038,6 +1219,7 @@ REPLACE_FSEEK
REPLACE_FREOPEN
REPLACE_FPURGE
REPLACE_FPRINTF
+REPLACE_FOPEN_FOR_FOPEN_GNU
REPLACE_FOPEN
REPLACE_FFLUSH
REPLACE_FDOPEN
@@ -1060,69 +1242,37 @@ HAVE_DECL_FTELLO
HAVE_DECL_FSEEKO
HAVE_DECL_FPURGE
HAVE_DECL_FCLOSEALL
-GNULIB_MDA_TEMPNAM
-GNULIB_MDA_PUTW
-GNULIB_MDA_GETW
-GNULIB_MDA_FILENO
-GNULIB_MDA_FDOPEN
-GNULIB_MDA_FCLOSEALL
-GNULIB_VSPRINTF_POSIX
-GNULIB_VSNPRINTF
-GNULIB_VPRINTF_POSIX
-GNULIB_VPRINTF
-GNULIB_VFPRINTF_POSIX
-GNULIB_VFPRINTF
-GNULIB_VDPRINTF
-GNULIB_VSCANF
-GNULIB_VFSCANF
-GNULIB_VASPRINTF
-GNULIB_TMPFILE
-GNULIB_STDIO_H_SIGPIPE
-GNULIB_STDIO_H_NONBLOCKING
-GNULIB_SPRINTF_POSIX
-GNULIB_SNPRINTF
-GNULIB_SCANF
-GNULIB_RENAMEAT
-GNULIB_RENAME
-GNULIB_REMOVE
-GNULIB_PUTS
-GNULIB_PUTCHAR
-GNULIB_PUTC
-GNULIB_PRINTF_POSIX
-GNULIB_PRINTF
-GNULIB_POPEN
-GNULIB_PERROR
-GNULIB_PCLOSE
-GNULIB_OBSTACK_PRINTF_POSIX
-GNULIB_OBSTACK_PRINTF
-GNULIB_GETLINE
-GNULIB_GETDELIM
-GNULIB_GETCHAR
-GNULIB_GETC
-GNULIB_FWRITE
-GNULIB_FTELLO
-GNULIB_FTELL
-GNULIB_FSEEKO
-GNULIB_FSEEK
-GNULIB_FSCANF
-GNULIB_FREOPEN
-GNULIB_FREAD
-GNULIB_FPUTS
-GNULIB_FPUTC
-GNULIB_FPURGE
-GNULIB_FPRINTF_POSIX
-GNULIB_FPRINTF
-GNULIB_FOPEN
-GNULIB_FGETS
-GNULIB_FGETC
-GNULIB_FFLUSH
-GNULIB_FDOPEN
-GNULIB_FCLOSE
-GNULIB_DPRINTF
+GL_COND_OBJ_GETCWD_LGPL_FALSE
+GL_COND_OBJ_GETCWD_LGPL_TRUE
+GL_COND_OBJ_GETCWD_FALSE
+GL_COND_OBJ_GETCWD_TRUE
+GL_COND_OBJ_FSTATAT_FALSE
+GL_COND_OBJ_FSTATAT_TRUE
+GL_GNULIB_MDA_UMASK
+GL_GNULIB_MDA_MKDIR
+GL_GNULIB_MDA_CHMOD
+GL_GNULIB_OVERRIDES_STRUCT_STAT
+GL_GNULIB_UTIMENSAT
+GL_GNULIB_STAT
+GL_GNULIB_MKNODAT
+GL_GNULIB_MKNOD
+GL_GNULIB_MKFIFOAT
+GL_GNULIB_MKFIFO
+GL_GNULIB_MKDIRAT
+GL_GNULIB_MKDIR
+GL_GNULIB_LSTAT
+GL_GNULIB_LCHMOD
+GL_GNULIB_GETUMASK
+GL_GNULIB_FUTIMENS
+GL_GNULIB_FSTATAT
+GL_GNULIB_FSTAT
+GL_GNULIB_FCHMODAT
WINDOWS_64_BIT_ST_SIZE
WINDOWS_STAT_TIMESPEC
NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H
NEXT_SYS_STAT_H
+GL_COND_OBJ_FSTAT_FALSE
+GL_COND_OBJ_FSTAT_TRUE
REPLACE_UTIMENSAT
REPLACE_STAT
REPLACE_MKNODAT
@@ -1147,27 +1297,109 @@ HAVE_GETUMASK
HAVE_FUTIMENS
HAVE_FSTATAT
HAVE_FCHMODAT
-GNULIB_MDA_UMASK
-GNULIB_MDA_MKDIR
-GNULIB_MDA_CHMOD
-GNULIB_OVERRIDES_STRUCT_STAT
-GNULIB_UTIMENSAT
-GNULIB_STAT
-GNULIB_MKNODAT
-GNULIB_MKNOD
-GNULIB_MKFIFOAT
-GNULIB_MKFIFO
-GNULIB_MKDIRAT
-GNULIB_MKDIR
-GNULIB_LSTAT
-GNULIB_LCHMOD
-GNULIB_GETUMASK
-GNULIB_FUTIMENS
-GNULIB_FSTATAT
-GNULIB_FSTAT
-GNULIB_FCHMODAT
FREXPL_LIBM
HAVE_SAME_LONG_DOUBLE_AS_DOUBLE
+GL_GNULIB_MDA_YN
+GL_GNULIB_MDA_Y1
+GL_GNULIB_MDA_Y0
+GL_GNULIB_MDA_JN
+GL_GNULIB_MDA_J1
+GL_GNULIB_MDA_J0
+GL_GNULIB_TRUNCL
+GL_GNULIB_TRUNCF
+GL_GNULIB_TRUNC
+GL_GNULIB_TANHF
+GL_GNULIB_TANL
+GL_GNULIB_TANF
+GL_GNULIB_SQRTL
+GL_GNULIB_SQRTF
+GL_GNULIB_SINHF
+GL_GNULIB_SINL
+GL_GNULIB_SINF
+GL_GNULIB_SIGNBIT
+GL_GNULIB_ROUNDL
+GL_GNULIB_ROUNDF
+GL_GNULIB_ROUND
+GL_GNULIB_RINTL
+GL_GNULIB_RINTF
+GL_GNULIB_RINT
+GL_GNULIB_REMAINDERL
+GL_GNULIB_REMAINDERF
+GL_GNULIB_REMAINDER
+GL_GNULIB_POWF
+GL_GNULIB_MODFL
+GL_GNULIB_MODFF
+GL_GNULIB_MODF
+GL_GNULIB_LOGBL
+GL_GNULIB_LOGBF
+GL_GNULIB_LOGB
+GL_GNULIB_LOG2L
+GL_GNULIB_LOG2F
+GL_GNULIB_LOG2
+GL_GNULIB_LOG1PL
+GL_GNULIB_LOG1PF
+GL_GNULIB_LOG1P
+GL_GNULIB_LOG10L
+GL_GNULIB_LOG10F
+GL_GNULIB_LOG10
+GL_GNULIB_LOGL
+GL_GNULIB_LOGF
+GL_GNULIB_LOG
+GL_GNULIB_LDEXPL
+GL_GNULIB_LDEXPF
+GL_GNULIB_ISNANL
+GL_GNULIB_ISNAND
+GL_GNULIB_ISNANF
+GL_GNULIB_ISNAN
+GL_GNULIB_ISINF
+GL_GNULIB_ISFINITE
+GL_GNULIB_ILOGBL
+GL_GNULIB_ILOGBF
+GL_GNULIB_ILOGB
+GL_GNULIB_HYPOTL
+GL_GNULIB_HYPOTF
+GL_GNULIB_HYPOT
+GL_GNULIB_FREXPL
+GL_GNULIB_FREXP
+GL_GNULIB_FREXPF
+GL_GNULIB_FMODL
+GL_GNULIB_FMODF
+GL_GNULIB_FMOD
+GL_GNULIB_FMAL
+GL_GNULIB_FMAF
+GL_GNULIB_FMA
+GL_GNULIB_FLOORL
+GL_GNULIB_FLOORF
+GL_GNULIB_FLOOR
+GL_GNULIB_FABSL
+GL_GNULIB_FABSF
+GL_GNULIB_EXPM1L
+GL_GNULIB_EXPM1F
+GL_GNULIB_EXPM1
+GL_GNULIB_EXP2L
+GL_GNULIB_EXP2F
+GL_GNULIB_EXP2
+GL_GNULIB_EXPL
+GL_GNULIB_EXPF
+GL_GNULIB_COSHF
+GL_GNULIB_COSL
+GL_GNULIB_COSF
+GL_GNULIB_COPYSIGNL
+GL_GNULIB_COPYSIGNF
+GL_GNULIB_COPYSIGN
+GL_GNULIB_CEILL
+GL_GNULIB_CEILF
+GL_GNULIB_CEIL
+GL_GNULIB_CBRTL
+GL_GNULIB_CBRTF
+GL_GNULIB_CBRT
+GL_GNULIB_ATAN2F
+GL_GNULIB_ATANL
+GL_GNULIB_ATANF
+GL_GNULIB_ASINL
+GL_GNULIB_ASINF
+GL_GNULIB_ACOSL
+GL_GNULIB_ACOSF
FREXP_LIBM
REPLACE_TRUNCL
REPLACE_TRUNCF
@@ -1344,159 +1576,92 @@ HAVE_ASINL
HAVE_ASINF
HAVE_ACOSL
HAVE_ACOSF
-GNULIB_MDA_YN
-GNULIB_MDA_Y1
-GNULIB_MDA_Y0
-GNULIB_MDA_JN
-GNULIB_MDA_J1
-GNULIB_MDA_J0
-GNULIB_TRUNCL
-GNULIB_TRUNCF
-GNULIB_TRUNC
-GNULIB_TANHF
-GNULIB_TANL
-GNULIB_TANF
-GNULIB_SQRTL
-GNULIB_SQRTF
-GNULIB_SINHF
-GNULIB_SINL
-GNULIB_SINF
-GNULIB_SIGNBIT
-GNULIB_ROUNDL
-GNULIB_ROUNDF
-GNULIB_ROUND
-GNULIB_RINTL
-GNULIB_RINTF
-GNULIB_RINT
-GNULIB_REMAINDERL
-GNULIB_REMAINDERF
-GNULIB_REMAINDER
-GNULIB_POWF
-GNULIB_MODFL
-GNULIB_MODFF
-GNULIB_MODF
-GNULIB_LOGBL
-GNULIB_LOGBF
-GNULIB_LOGB
-GNULIB_LOG2L
-GNULIB_LOG2F
-GNULIB_LOG2
-GNULIB_LOG1PL
-GNULIB_LOG1PF
-GNULIB_LOG1P
-GNULIB_LOG10L
-GNULIB_LOG10F
-GNULIB_LOG10
-GNULIB_LOGL
-GNULIB_LOGF
-GNULIB_LOG
-GNULIB_LDEXPL
-GNULIB_LDEXPF
-GNULIB_ISNANL
-GNULIB_ISNAND
-GNULIB_ISNANF
-GNULIB_ISNAN
-GNULIB_ISINF
-GNULIB_ISFINITE
-GNULIB_ILOGBL
-GNULIB_ILOGBF
-GNULIB_ILOGB
-GNULIB_HYPOTL
-GNULIB_HYPOTF
-GNULIB_HYPOT
-GNULIB_FREXPL
-GNULIB_FREXP
-GNULIB_FREXPF
-GNULIB_FMODL
-GNULIB_FMODF
-GNULIB_FMOD
-GNULIB_FMAL
-GNULIB_FMAF
-GNULIB_FMA
-GNULIB_FLOORL
-GNULIB_FLOORF
-GNULIB_FLOOR
-GNULIB_FABSL
-GNULIB_FABSF
-GNULIB_EXPM1L
-GNULIB_EXPM1F
-GNULIB_EXPM1
-GNULIB_EXP2L
-GNULIB_EXP2F
-GNULIB_EXP2
-GNULIB_EXPL
-GNULIB_EXPF
-GNULIB_COSHF
-GNULIB_COSL
-GNULIB_COSF
-GNULIB_COPYSIGNL
-GNULIB_COPYSIGNF
-GNULIB_COPYSIGN
-GNULIB_CEILL
-GNULIB_CEILF
-GNULIB_CEIL
-GNULIB_CBRTL
-GNULIB_CBRTF
-GNULIB_CBRT
-GNULIB_ATAN2F
-GNULIB_ATANL
-GNULIB_ATANF
-GNULIB_ASINL
-GNULIB_ASINF
-GNULIB_ACOSL
-GNULIB_ACOSF
+GL_COND_OBJ_FREE_FALSE
+GL_COND_OBJ_FREE_TRUE
GL_GENERATE_FNMATCH_H_FALSE
GL_GENERATE_FNMATCH_H_TRUE
FNMATCH_H
+GL_GNULIB_FNMATCH
HAVE_FNMATCH_H
NEXT_AS_FIRST_DIRECTIVE_FNMATCH_H
NEXT_FNMATCH_H
REPLACE_FNMATCH
HAVE_FNMATCH
-GNULIB_FNMATCH
-REPLACE_ITOLD
+GL_COND_OBJ_ITOLD_FALSE
+GL_COND_OBJ_ITOLD_TRUE
+GL_COND_OBJ_FLOAT_FALSE
+GL_COND_OBJ_FLOAT_TRUE
GL_GENERATE_FLOAT_H_FALSE
GL_GENERATE_FLOAT_H_TRUE
FLOAT_H
+REPLACE_ITOLD
NEXT_AS_FIRST_DIRECTIVE_FLOAT_H
NEXT_FLOAT_H
+GL_GNULIB_FFS
+GL_COND_OBJ_FFS_FALSE
+GL_COND_OBJ_FFS_TRUE
HAVE_DECL_STRNCASECMP
HAVE_STRCASECMP
HAVE_FFS
-GNULIB_FFS
+GL_COND_OBJ_FDOPENDIR_FALSE
+GL_COND_OBJ_FDOPENDIR_TRUE
NEXT_AS_FIRST_DIRECTIVE_FCNTL_H
NEXT_FCNTL_H
+GL_GNULIB_MDA_OPEN
+GL_GNULIB_MDA_CREAT
+GL_GNULIB_OPENAT
+GL_GNULIB_OPEN
+GL_GNULIB_NONBLOCKING
+GL_GNULIB_FCNTL
+GL_GNULIB_CREAT
+GL_COND_OBJ_FCNTL_FALSE
+GL_COND_OBJ_FCNTL_TRUE
REPLACE_OPENAT
REPLACE_OPEN
REPLACE_FCNTL
REPLACE_CREAT
HAVE_OPENAT
HAVE_FCNTL
-GNULIB_MDA_OPEN
-GNULIB_MDA_CREAT
-GNULIB_OPENAT
-GNULIB_OPEN
-GNULIB_NONBLOCKING
-GNULIB_FCNTL
-GNULIB_CREAT
+GL_COND_OBJ_FCHDIR_FALSE
+GL_COND_OBJ_FCHDIR_TRUE
+GL_COND_OBJ_ERROR_FALSE
+GL_COND_OBJ_ERROR_TRUE
+GL_GENERATE_ERRNO_H_FALSE
+GL_GENERATE_ERRNO_H_TRUE
+ERRNO_H
EOVERFLOW_VALUE
EOVERFLOW_HIDDEN
ENOLINK_VALUE
ENOLINK_HIDDEN
EMULTIHOP_VALUE
EMULTIHOP_HIDDEN
-GL_GENERATE_ERRNO_H_FALSE
-GL_GENERATE_ERRNO_H_TRUE
-ERRNO_H
NEXT_AS_FIRST_DIRECTIVE_ERRNO_H
NEXT_ERRNO_H
+GL_COND_OBJ_DUP2_FALSE
+GL_COND_OBJ_DUP2_TRUE
+GL_COND_OBJ_DUP_FALSE
+GL_COND_OBJ_DUP_TRUE
+GL_COND_OBJ_DIRFD_FALSE
+GL_COND_OBJ_DIRFD_TRUE
HAVE_DIRENT_H
NEXT_AS_FIRST_DIRECTIVE_DIRENT_H
NEXT_DIRENT_H
+GL_GNULIB_ISBLANK
NEXT_AS_FIRST_DIRECTIVE_CTYPE_H
NEXT_CTYPE_H
HAVE_ISBLANK
-GNULIB_ISBLANK
+GL_COND_OBJ_CONNECT_FALSE
+GL_COND_OBJ_CONNECT_TRUE
+GL_GNULIB_ALPHASORT
+GL_GNULIB_SCANDIR
+GL_GNULIB_FDOPENDIR
+GL_GNULIB_DIRFD
+GL_GNULIB_CLOSEDIR
+GL_GNULIB_REWINDDIR
+GL_GNULIB_READDIR
+GL_GNULIB_OPENDIR
+GL_COND_OBJ_CLOSEDIR_FALSE
+GL_COND_OBJ_CLOSEDIR_TRUE
REPLACE_FDOPENDIR
REPLACE_DIRFD
REPLACE_CLOSEDIR
@@ -1510,24 +1675,116 @@ HAVE_CLOSEDIR
HAVE_REWINDDIR
HAVE_READDIR
HAVE_OPENDIR
-GNULIB_ALPHASORT
-GNULIB_SCANDIR
-GNULIB_FDOPENDIR
-GNULIB_DIRFD
-GNULIB_CLOSEDIR
-GNULIB_REWINDDIR
-GNULIB_READDIR
-GNULIB_OPENDIR
+GL_COND_OBJ_CLOSE_FALSE
+GL_COND_OBJ_CLOSE_TRUE
HAVE_MSVC_INVALID_PARAMETER_HANDLER
LIB_CLOCK_GETTIME
+GL_COND_OBJ_FCHOWN_STUB_FALSE
+GL_COND_OBJ_FCHOWN_STUB_TRUE
+GL_COND_OBJ_CHOWN_FALSE
+GL_COND_OBJ_CHOWN_TRUE
+GL_COND_OBJ_CHDIR_LONG_FALSE
+GL_COND_OBJ_CHDIR_LONG_TRUE
+GL_GNULIB_MDA_WRITE
+GL_GNULIB_MDA_UNLINK
+GL_GNULIB_MDA_SWAB
+GL_GNULIB_MDA_RMDIR
+GL_GNULIB_MDA_READ
+GL_GNULIB_MDA_LSEEK
+GL_GNULIB_MDA_ISATTY
+GL_GNULIB_MDA_GETPID
+GL_GNULIB_MDA_GETCWD
+GL_GNULIB_MDA_EXECVPE
+GL_GNULIB_MDA_EXECVP
+GL_GNULIB_MDA_EXECVE
+GL_GNULIB_MDA_EXECV
+GL_GNULIB_MDA_EXECLP
+GL_GNULIB_MDA_EXECLE
+GL_GNULIB_MDA_EXECL
+GL_GNULIB_MDA_DUP2
+GL_GNULIB_MDA_DUP
+GL_GNULIB_MDA_CLOSE
+GL_GNULIB_MDA_CHDIR
+GL_GNULIB_MDA_ACCESS
+GL_GNULIB_WRITE
+GL_GNULIB_USLEEP
+GL_GNULIB_UNLINKAT
+GL_GNULIB_UNLINK
+GL_GNULIB_UNISTD_H_SIGPIPE
+GL_GNULIB_UNISTD_H_NONBLOCKING
+GL_GNULIB_UNISTD_H_GETOPT
+GL_GNULIB_TTYNAME_R
+GL_GNULIB_TRUNCATE
+GL_GNULIB_SYMLINKAT
+GL_GNULIB_SYMLINK
+GL_GNULIB_SLEEP
+GL_GNULIB_SETHOSTNAME
+GL_GNULIB_RMDIR
+GL_GNULIB_READLINKAT
+GL_GNULIB_READLINK
+GL_GNULIB_READ
+GL_GNULIB_PWRITE
+GL_GNULIB_PREAD
+GL_GNULIB_PIPE2
+GL_GNULIB_PIPE
+GL_GNULIB_LSEEK
+GL_GNULIB_LINKAT
+GL_GNULIB_LINK
+GL_GNULIB_LCHOWN
+GL_GNULIB_ISATTY
+GL_GNULIB_GROUP_MEMBER
+GL_GNULIB_GETUSERSHELL
+GL_GNULIB_GETPASS_GNU
+GL_GNULIB_GETPASS
+GL_GNULIB_GETPAGESIZE
+GL_GNULIB_GETOPT_POSIX
+GL_GNULIB_GETLOGIN_R
+GL_GNULIB_GETLOGIN
+GL_GNULIB_GETHOSTNAME
+GL_GNULIB_GETGROUPS
+GL_GNULIB_GETENTROPY
+GL_GNULIB_GETDTABLESIZE
+GL_GNULIB_GETDOMAINNAME
+GL_GNULIB_GETCWD
+GL_GNULIB_FTRUNCATE
+GL_GNULIB_FSYNC
+GL_GNULIB_FDATASYNC
+GL_GNULIB_FCHOWNAT
+GL_GNULIB_FCHDIR
+GL_GNULIB_FACCESSAT
+GL_GNULIB_EXECVPE
+GL_GNULIB_EXECVP
+GL_GNULIB_EXECVE
+GL_GNULIB_EXECV
+GL_GNULIB_EXECLP
+GL_GNULIB_EXECLE
+GL_GNULIB_EXECL
+GL_GNULIB_EUIDACCESS
+GL_GNULIB_ENVIRON
+GL_GNULIB_DUP3
+GL_GNULIB_DUP2
+GL_GNULIB_DUP
+GL_GNULIB_COPY_FILE_RANGE
+GL_GNULIB_CLOSE
+GL_GNULIB_CHOWN
+GL_GNULIB_CHDIR
+GL_GNULIB_ACCESS
+GL_COND_OBJ_CANONICALIZE_LGPL_FALSE
+GL_COND_OBJ_CANONICALIZE_LGPL_TRUE
REPLACE_WCTOMB
REPLACE_UNSETENV
+REPLACE_STRTOULL
+REPLACE_STRTOUL
+REPLACE_STRTOLL
REPLACE_STRTOLD
+REPLACE_STRTOL
REPLACE_STRTOD
REPLACE_SETSTATE
REPLACE_SETENV
REPLACE_REALPATH
-REPLACE_REALLOC
+REPLACE_REALLOCARRAY
+REPLACE_REALLOC_FOR_REALLOC_POSIX
+REPLACE_REALLOC_FOR_REALLOC_GNU
REPLACE_RANDOM_R
REPLACE_RANDOM
REPLACE_QSORT_R
@@ -1537,19 +1794,23 @@ REPLACE_PTSNAME
REPLACE_POSIX_MEMALIGN
REPLACE_MKSTEMP
REPLACE_MBTOWC
-REPLACE_MALLOC
+REPLACE_MALLOC_FOR_MALLOC_POSIX
+REPLACE_MALLOC_FOR_MALLOC_GNU
REPLACE_INITSTATE
REPLACE_FREE
REPLACE_CANONICALIZE_FILE_NAME
-REPLACE_CALLOC
+REPLACE_CALLOC_FOR_CALLOC_POSIX
+REPLACE_CALLOC_FOR_CALLOC_GNU
REPLACE_ALIGNED_ALLOC
HAVE_DECL_UNSETENV
HAVE_UNLOCKPT
HAVE_SYS_LOADAVG_H
HAVE_STRUCT_RANDOM_DATA
HAVE_STRTOULL
+HAVE_STRTOUL
HAVE_STRTOLL
HAVE_STRTOLD
+HAVE_STRTOL
HAVE_STRTOD
HAVE_DECL_SETSTATE
HAVE_SETSTATE
@@ -1585,49 +1846,98 @@ HAVE_CANONICALIZE_FILE_NAME
HAVE_ATOLL
HAVE_ALIGNED_ALLOC
HAVE__EXIT
-GNULIB_MDA_PUTENV
-GNULIB_MDA_MKTEMP
-GNULIB_MDA_GCVT
-GNULIB_MDA_FCVT
-GNULIB_MDA_ECVT
-GNULIB_WCTOMB
-GNULIB_UNSETENV
-GNULIB_UNLOCKPT
-GNULIB_SYSTEM_POSIX
-GNULIB_STRTOULL
-GNULIB_STRTOLL
-GNULIB_STRTOLD
-GNULIB_STRTOD
-GNULIB_SETENV
-GNULIB_SECURE_GETENV
-GNULIB_RPMATCH
-GNULIB_REALPATH
-GNULIB_REALLOC_POSIX
-GNULIB_REALLOCARRAY
-GNULIB_RANDOM_R
-GNULIB_RANDOM
-GNULIB_QSORT_R
-GNULIB_PUTENV
-GNULIB_PTSNAME_R
-GNULIB_PTSNAME
-GNULIB_POSIX_OPENPT
-GNULIB_POSIX_MEMALIGN
-GNULIB_MKSTEMPS
-GNULIB_MKSTEMP
-GNULIB_MKOSTEMPS
-GNULIB_MKOSTEMP
-GNULIB_MKDTEMP
-GNULIB_MBTOWC
-GNULIB_MALLOC_POSIX
-GNULIB_GRANTPT
-GNULIB_GETSUBOPT
-GNULIB_GETLOADAVG
-GNULIB_FREE_POSIX
-GNULIB_CANONICALIZE_FILE_NAME
-GNULIB_CALLOC_POSIX
-GNULIB_ATOLL
-GNULIB_ALIGNED_ALLOC
-GNULIB__EXIT
+GL_GNULIB_MDA_PUTENV
+GL_GNULIB_MDA_MKTEMP
+GL_GNULIB_MDA_GCVT
+GL_GNULIB_MDA_FCVT
+GL_GNULIB_MDA_ECVT
+GL_GNULIB_WCTOMB
+GL_GNULIB_UNSETENV
+GL_GNULIB_UNLOCKPT
+GL_GNULIB_SYSTEM_POSIX
+GL_GNULIB_STRTOULL
+GL_GNULIB_STRTOUL
+GL_GNULIB_STRTOLL
+GL_GNULIB_STRTOLD
+GL_GNULIB_STRTOL
+GL_GNULIB_STRTOD
+GL_GNULIB_SETENV
+GL_GNULIB_SECURE_GETENV
+GL_GNULIB_RPMATCH
+GL_GNULIB_REALPATH
+GL_GNULIB_REALLOC_POSIX
+GL_GNULIB_REALLOC_GNU
+GL_GNULIB_REALLOCARRAY
+GL_GNULIB_RANDOM_R
+GL_GNULIB_RANDOM
+GL_GNULIB_QSORT_R
+GL_GNULIB_PUTENV
+GL_GNULIB_PTSNAME_R
+GL_GNULIB_PTSNAME
+GL_GNULIB_POSIX_OPENPT
+GL_GNULIB_POSIX_MEMALIGN
+GL_GNULIB_MKSTEMPS
+GL_GNULIB_MKSTEMP
+GL_GNULIB_MKOSTEMPS
+GL_GNULIB_MKOSTEMP
+GL_GNULIB_MKDTEMP
+GL_GNULIB_MBTOWC
+GL_GNULIB_MALLOC_POSIX
+GL_GNULIB_MALLOC_GNU
+GL_GNULIB_GRANTPT
+GL_GNULIB_GETSUBOPT
+GL_GNULIB_GETLOADAVG
+GL_GNULIB_FREE_POSIX
+GL_GNULIB_CANONICALIZE_FILE_NAME
+GL_GNULIB_CALLOC_POSIX
+GL_GNULIB_CALLOC_GNU
+GL_GNULIB_ATOLL
+GL_GNULIB_ALIGNED_ALLOC
+GL_GNULIB__EXIT
+GL_GNULIB_MDA_WCSDUP
+GL_GNULIB_WCSFTIME
+GL_GNULIB_WCSWIDTH
+GL_GNULIB_WCSTOK
+GL_GNULIB_WCSSTR
+GL_GNULIB_WCSPBRK
+GL_GNULIB_WCSSPN
+GL_GNULIB_WCSCSPN
+GL_GNULIB_WCSRCHR
+GL_GNULIB_WCSCHR
+GL_GNULIB_WCSDUP
+GL_GNULIB_WCSXFRM
+GL_GNULIB_WCSCOLL
+GL_GNULIB_WCSNCASECMP
+GL_GNULIB_WCSCASECMP
+GL_GNULIB_WCSNCMP
+GL_GNULIB_WCSCMP
+GL_GNULIB_WCSNCAT
+GL_GNULIB_WCSCAT
+GL_GNULIB_WCPNCPY
+GL_GNULIB_WCSNCPY
+GL_GNULIB_WCPCPY
+GL_GNULIB_WCSCPY
+GL_GNULIB_WCSNLEN
+GL_GNULIB_WCSLEN
+GL_GNULIB_WMEMSET
+GL_GNULIB_WMEMPCPY
+GL_GNULIB_WMEMMOVE
+GL_GNULIB_WMEMCPY
+GL_GNULIB_WMEMCMP
+GL_GNULIB_WMEMCHR
+GL_GNULIB_WCWIDTH
+GL_GNULIB_WCSNRTOMBS
+GL_GNULIB_WCSRTOMBS
+GL_GNULIB_WCRTOMB
+GL_GNULIB_MBSNRTOWCS
+GL_GNULIB_MBSRTOWCS
+GL_GNULIB_MBRLEN
+GL_GNULIB_MBRTOWC
+GL_GNULIB_MBSINIT
+GL_GNULIB_WCTOB
+GL_GNULIB_BTOWC
+GL_COND_OBJ_BTOWC_FALSE
+GL_COND_OBJ_BTOWC_TRUE
LOCALE_FR
REPLACE_WCSTOK
REPLACE_WCSFTIME
@@ -1686,49 +1996,10 @@ HAVE_MBRLEN
HAVE_MBRTOWC
HAVE_MBSINIT
HAVE_BTOWC
-GNULIB_MDA_WCSDUP
-GNULIB_WCSFTIME
-GNULIB_WCSWIDTH
-GNULIB_WCSTOK
-GNULIB_WCSSTR
-GNULIB_WCSPBRK
-GNULIB_WCSSPN
-GNULIB_WCSCSPN
-GNULIB_WCSRCHR
-GNULIB_WCSCHR
-GNULIB_WCSDUP
-GNULIB_WCSXFRM
-GNULIB_WCSCOLL
-GNULIB_WCSNCASECMP
-GNULIB_WCSCASECMP
-GNULIB_WCSNCMP
-GNULIB_WCSCMP
-GNULIB_WCSNCAT
-GNULIB_WCSCAT
-GNULIB_WCPNCPY
-GNULIB_WCSNCPY
-GNULIB_WCPCPY
-GNULIB_WCSCPY
-GNULIB_WCSNLEN
-GNULIB_WCSLEN
-GNULIB_WMEMSET
-GNULIB_WMEMPCPY
-GNULIB_WMEMMOVE
-GNULIB_WMEMCPY
-GNULIB_WMEMCMP
-GNULIB_WMEMCHR
-GNULIB_WCWIDTH
-GNULIB_WCSNRTOMBS
-GNULIB_WCSRTOMBS
-GNULIB_WCRTOMB
-GNULIB_MBSNRTOWCS
-GNULIB_MBSRTOWCS
-GNULIB_MBRLEN
-GNULIB_MBRTOWC
-GNULIB_MBSINIT
-GNULIB_WCTOB
-GNULIB_BTOWC
-MKDIR_P
+GL_COND_OBJ_BIND_FALSE
+GL_COND_OBJ_BIND_TRUE
+GL_GNULIB_INET_PTON
+GL_GNULIB_INET_NTOP
HAVE_FEATURES_H
NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H
NEXT_ARPA_INET_H
@@ -1737,13 +2008,29 @@ REPLACE_INET_PTON
REPLACE_INET_NTOP
HAVE_DECL_INET_PTON
HAVE_DECL_INET_NTOP
-GNULIB_INET_PTON
-GNULIB_INET_NTOP
-HAVE_ALLOCA_H
+MKDIR_P
GL_GENERATE_ALLOCA_H_FALSE
GL_GENERATE_ALLOCA_H_TRUE
ALLOCA_H
+HAVE_ALLOCA_H
ALLOCA
+GL_GNULIB_ACCEPT4
+GL_GNULIB_SHUTDOWN
+GL_GNULIB_SETSOCKOPT
+GL_GNULIB_SENDTO
+GL_GNULIB_RECVFROM
+GL_GNULIB_SEND
+GL_GNULIB_RECV
+GL_GNULIB_LISTEN
+GL_GNULIB_GETSOCKOPT
+GL_GNULIB_GETSOCKNAME
+GL_GNULIB_GETPEERNAME
+GL_GNULIB_BIND
+GL_GNULIB_ACCEPT
+GL_GNULIB_CONNECT
+GL_GNULIB_SOCKET
+GL_COND_OBJ_ACCEPT_FALSE
+GL_COND_OBJ_ACCEPT_TRUE
HAVE_WINSOCK2_H
UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS
UNISTD_H_HAVE_WINSOCK2_H
@@ -1768,6 +2055,7 @@ REPLACE_LINKAT
REPLACE_LINK
REPLACE_LCHOWN
REPLACE_ISATTY
+REPLACE_GETPASS_FOR_GETPASS_GNU
REPLACE_GETPASS
REPLACE_GETPAGESIZE
REPLACE_GETGROUPS
@@ -1787,6 +2075,7 @@ REPLACE_EXECLE
REPLACE_EXECL
REPLACE_DUP2
REPLACE_DUP
+REPLACE_COPY_FILE_RANGE
REPLACE_CLOSE
REPLACE_CHOWN
REPLACE_ACCESS
@@ -1838,88 +2127,6 @@ HAVE_EUIDACCESS
HAVE_DUP3
HAVE_COPY_FILE_RANGE
HAVE_CHOWN
-GNULIB_MDA_WRITE
-GNULIB_MDA_UNLINK
-GNULIB_MDA_SWAB
-GNULIB_MDA_RMDIR
-GNULIB_MDA_READ
-GNULIB_MDA_LSEEK
-GNULIB_MDA_ISATTY
-GNULIB_MDA_GETPID
-GNULIB_MDA_GETCWD
-GNULIB_MDA_EXECVPE
-GNULIB_MDA_EXECVP
-GNULIB_MDA_EXECVE
-GNULIB_MDA_EXECV
-GNULIB_MDA_EXECLP
-GNULIB_MDA_EXECLE
-GNULIB_MDA_EXECL
-GNULIB_MDA_DUP2
-GNULIB_MDA_DUP
-GNULIB_MDA_CLOSE
-GNULIB_MDA_CHDIR
-GNULIB_MDA_ACCESS
-GNULIB_WRITE
-GNULIB_USLEEP
-GNULIB_UNLINKAT
-GNULIB_UNLINK
-GNULIB_UNISTD_H_SIGPIPE
-GNULIB_UNISTD_H_NONBLOCKING
-GNULIB_TTYNAME_R
-GNULIB_TRUNCATE
-GNULIB_SYMLINKAT
-GNULIB_SYMLINK
-GNULIB_SLEEP
-GNULIB_SETHOSTNAME
-GNULIB_RMDIR
-GNULIB_READLINKAT
-GNULIB_READLINK
-GNULIB_READ
-GNULIB_PWRITE
-GNULIB_PREAD
-GNULIB_PIPE2
-GNULIB_PIPE
-GNULIB_LSEEK
-GNULIB_LINKAT
-GNULIB_LINK
-GNULIB_LCHOWN
-GNULIB_ISATTY
-GNULIB_GROUP_MEMBER
-GNULIB_GETUSERSHELL
-GNULIB_GETPASS
-GNULIB_GETPAGESIZE
-GNULIB_GETOPT_POSIX
-GNULIB_GETLOGIN_R
-GNULIB_GETLOGIN
-GNULIB_GETHOSTNAME
-GNULIB_GETGROUPS
-GNULIB_GETENTROPY
-GNULIB_GETDTABLESIZE
-GNULIB_GETDOMAINNAME
-GNULIB_GETCWD
-GNULIB_FTRUNCATE
-GNULIB_FSYNC
-GNULIB_FDATASYNC
-GNULIB_FCHOWNAT
-GNULIB_FCHDIR
-GNULIB_FACCESSAT
-GNULIB_EXECVPE
-GNULIB_EXECVP
-GNULIB_EXECVE
-GNULIB_EXECV
-GNULIB_EXECLP
-GNULIB_EXECLE
-GNULIB_EXECL
-GNULIB_EUIDACCESS
-GNULIB_ENVIRON
-GNULIB_DUP3
-GNULIB_DUP2
-GNULIB_DUP
-GNULIB_COPY_FILE_RANGE
-GNULIB_CLOSE
-GNULIB_CHOWN
-GNULIB_CHDIR
-GNULIB_ACCESS
HAVE_WS2TCPIP_H
HAVE_SYS_SOCKET_H
NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H
@@ -1932,21 +2139,6 @@ HAVE_ACCEPT4
HAVE_SA_FAMILY_T
HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY
HAVE_STRUCT_SOCKADDR_STORAGE
-GNULIB_ACCEPT4
-GNULIB_SHUTDOWN
-GNULIB_SETSOCKOPT
-GNULIB_SENDTO
-GNULIB_RECVFROM
-GNULIB_SEND
-GNULIB_RECV
-GNULIB_LISTEN
-GNULIB_GETSOCKOPT
-GNULIB_GETSOCKNAME
-GNULIB_GETPEERNAME
-GNULIB_BIND
-GNULIB_ACCEPT
-GNULIB_CONNECT
-GNULIB_SOCKET
GL_COND_LIBTOOL_FALSE
GL_COND_LIBTOOL_TRUE
RANLIB
@@ -2022,6 +2214,7 @@ enable_option_checking
enable_maintainer_mode
enable_plugins
enable_largefile
+enable_year2038
enable_threads
enable_cross_guesses
enable_dependency_tracking
@@ -2660,6 +2853,7 @@ Optional Features:
sometimes confusing) to the casual installer
--enable-plugins Enable support for plugins
--disable-largefile omit support for large files
+ --disable-year2038 omit support for timestamps past the year 2038
--enable-threads={isoc|posix|isoc+posix|windows}
specify multithreading API
--disable-threads build without multithread safety
@@ -3747,6 +3941,7 @@ as_fn_append ac_func_list " btowc"
as_fn_append ac_func_list " canonicalize_file_name"
as_fn_append ac_func_list " faccessat"
as_fn_append ac_func_list " realpath"
+as_fn_append ac_func_list " lstat"
as_fn_append ac_header_list " sys/param.h"
as_fn_append ac_header_list " unistd.h"
as_fn_append ac_func_list " chown"
@@ -3785,7 +3980,6 @@ as_fn_append ac_header_list " sys/types.h"
as_fn_append ac_header_list " stdint.h"
as_fn_append ac_func_list " isblank"
as_fn_append ac_header_list " xlocale.h"
-as_fn_append ac_func_list " lstat"
as_fn_append ac_header_list " math.h"
as_fn_append ac_func_list " mbsinit"
as_fn_append ac_func_list " mbrtowc"
@@ -6152,8 +6346,7 @@ if test "${enable_largefile+set}" = set; then :
enableval=$enable_largefile;
fi
-if test "$enable_largefile" != no; then
-
+if test "$enable_largefile" != no; then :
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5
$as_echo_n "checking for special C compiler options needed for large files... " >&6; }
if ${ac_cv_sys_largefile_CC+:} false; then :
@@ -6236,6 +6429,7 @@ fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
+#undef _FILE_OFFSET_BITS
#define _FILE_OFFSET_BITS 64
#include <sys/types.h>
/* Check that off_t can represent 2**63 - 1 correctly.
@@ -6273,7 +6467,8 @@ _ACEOF
;;
esac
rm -rf conftest*
- if test $ac_cv_sys_file_offset_bits = unknown; then
+ case $ac_cv_sys_file_offset_bits in #(
+ unknown) :
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5
$as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; }
if ${ac_cv_sys_large_files+:} false; then :
@@ -6305,6 +6500,7 @@ fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
+#undef _LARGE_FILES
#define _LARGE_FILES 1
#include <sys/types.h>
/* Check that off_t can represent 2**63 - 1 correctly.
@@ -6341,9 +6537,126 @@ cat >>confdefs.h <<_ACEOF
_ACEOF
;;
esac
-rm -rf conftest*
+rm -rf conftest* ;; #(
+ 64) :
+
+ # Check whether --enable-year2038 was given.
+if test "${enable_year2038+set}" = set; then :
+ enableval=$enable_year2038;
+fi
+
+ if test "$enable_year2038" != no; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for time_t past the year 2038" >&5
+$as_echo_n "checking for time_t past the year 2038... " >&6; }
+if ${gl_cv_type_time_t_y2038+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #include <time.h>
+ /* Check that time_t can represent 2**32 - 1 correctly. */
+ #define LARGE_TIME_T \\
+ ((time_t) (((time_t) 1 << 30) - 1 + 3 * ((time_t) 1 << 30)))
+ int verify_time_t_range[(LARGE_TIME_T / 65537 == 65535
+ && LARGE_TIME_T % 65537 == 0)
+ ? 1 : -1];
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ gl_cv_type_time_t_y2038=yes
+else
+ gl_cv_type_time_t_y2038=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_time_t_y2038" >&5
+$as_echo "$gl_cv_type_time_t_y2038" >&6; }
+ if test "$gl_cv_type_time_t_y2038" = no; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit time_t with _TIME_BITS=64" >&5
+$as_echo_n "checking for 64-bit time_t with _TIME_BITS=64... " >&6; }
+if ${gl_cv_type_time_t_bits_macro+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#define _TIME_BITS 64
+ #define _FILE_OFFSET_BITS 64
+
+ #include <time.h>
+ /* Check that time_t can represent 2**32 - 1 correctly. */
+ #define LARGE_TIME_T \\
+ ((time_t) (((time_t) 1 << 30) - 1 + 3 * ((time_t) 1 << 30)))
+ int verify_time_t_range[(LARGE_TIME_T / 65537 == 65535
+ && LARGE_TIME_T % 65537 == 0)
+ ? 1 : -1];
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ gl_cv_type_time_t_bits_macro=yes
+else
+ gl_cv_type_time_t_bits_macro=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_time_t_bits_macro" >&5
+$as_echo "$gl_cv_type_time_t_bits_macro" >&6; }
+ if test "$gl_cv_type_time_t_bits_macro" = yes; then
+
+$as_echo "#define _TIME_BITS 64" >>confdefs.h
+
+
+$as_echo "#define _FILE_OFFSET_BITS 64" >>confdefs.h
+
+ gl_cv_type_time_t_y2038=yes
+ fi
+ fi
+ if test $gl_cv_type_time_t_y2038 = no; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifdef _USE_32BIT_TIME_T
+ int ok;
+ #else
+ error fail
+ #endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "The 'time_t' type stops working after January 2038.
+ Remove _USE_32BIT_TIME_T from the compiler flags.
+See \`config.log' for more details" "$LINENO" 5; }
+else
+ # If not cross-compiling and says we should check,
+ # and 'touch' works with a large timestamp, then evidently wider time_t
+ # is desired and supported, so fail and ask the builder to fix the
+ # problem. Otherwise, just warn the builder.
+
+ if test "$gl_warned_about_y2038" != yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: The 'time_t' type stops working after January 2038,
+ and this package needs a wider 'time_t' type
+ if there is any way to access timestamps after that.
+ Configure with 'CC=\"${CC} -m64\"' perhaps?" >&5
+$as_echo "$as_me: WARNING: The 'time_t' type stops working after January 2038,
+ and this package needs a wider 'time_t' type
+ if there is any way to access timestamps after that.
+ Configure with 'CC=\"${CC} -m64\"' perhaps?" >&2;}
+ gl_warned_about_y2038=yes
+ fi
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
fi
+ ;; #(
+ *) :
+ ;;
+esac
+fi
@@ -6600,7 +6913,6 @@ fi
-
# IEEE behaviour is the default on all CPUs except Alpha and SH
# (according to the test results of Bruno Haible's ieeefp/fenv_default.m4
# and the GCC 4.1.2 manual).
@@ -6629,6 +6941,16 @@ fi
+ case "$host_os" in
+ mingw*)
+
+$as_echo "#define __MINGW_USE_VC2005_COMPAT 1" >>confdefs.h
+
+ ;;
+ esac
+
+
+
@@ -6698,7 +7020,6 @@ fi
-
# Code from module absolute-header:
# Code from module accept:
# Code from module alloca:
@@ -6760,6 +7081,7 @@ fi
# Code from module frexpl:
# Code from module fstat:
# Code from module fstatat:
+ # Code from module gen-header:
# Code from module gendocs:
# Code from module getcwd:
# Code from module getcwd-lgpl:
@@ -6786,6 +7108,7 @@ fi
# Code from module isnanl-nolibm:
# Code from module largefile:
+
# Code from module libc-config:
# Code from module limits-h:
# Code from module listen:
@@ -6887,6 +7210,7 @@ fi
# Code from module unistd-safer:
# Code from module unsetenv:
# Code from module update-copyright:
+ # Code from module vararrays:
# Code from module verify:
# Code from module wchar:
# Code from module wctype-h:
@@ -6941,6 +7265,7 @@ ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
+
# Check whether --enable-cross-guesses was given.
if test "${enable_cross_guesses+set}" = set; then :
enableval=$enable_cross_guesses; if test "x$enableval" != xconservative && test "x$enableval" != xrisky; then
@@ -6965,21 +7290,6 @@ fi
- GNULIB_SOCKET=0;
- GNULIB_CONNECT=0;
- GNULIB_ACCEPT=0;
- GNULIB_BIND=0;
- GNULIB_GETPEERNAME=0;
- GNULIB_GETSOCKNAME=0;
- GNULIB_GETSOCKOPT=0;
- GNULIB_LISTEN=0;
- GNULIB_RECV=0;
- GNULIB_SEND=0;
- GNULIB_RECVFROM=0;
- GNULIB_SENDTO=0;
- GNULIB_SETSOCKOPT=0;
- GNULIB_SHUTDOWN=0;
- GNULIB_ACCEPT4=0;
HAVE_STRUCT_SOCKADDR_STORAGE=1;
HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY=1;
@@ -7120,88 +7430,6 @@ $as_echo "$gl_cv_source_line_length_unlimited" >&6; }
- GNULIB_ACCESS=0;
- GNULIB_CHDIR=0;
- GNULIB_CHOWN=0;
- GNULIB_CLOSE=0;
- GNULIB_COPY_FILE_RANGE=0;
- GNULIB_DUP=0;
- GNULIB_DUP2=0;
- GNULIB_DUP3=0;
- GNULIB_ENVIRON=0;
- GNULIB_EUIDACCESS=0;
- GNULIB_EXECL=0;
- GNULIB_EXECLE=0;
- GNULIB_EXECLP=0;
- GNULIB_EXECV=0;
- GNULIB_EXECVE=0;
- GNULIB_EXECVP=0;
- GNULIB_EXECVPE=0;
- GNULIB_FACCESSAT=0;
- GNULIB_FCHDIR=0;
- GNULIB_FCHOWNAT=0;
- GNULIB_FDATASYNC=0;
- GNULIB_FSYNC=0;
- GNULIB_FTRUNCATE=0;
- GNULIB_GETCWD=0;
- GNULIB_GETDOMAINNAME=0;
- GNULIB_GETDTABLESIZE=0;
- GNULIB_GETENTROPY=0;
- GNULIB_GETGROUPS=0;
- GNULIB_GETHOSTNAME=0;
- GNULIB_GETLOGIN=0;
- GNULIB_GETLOGIN_R=0;
- GNULIB_GETOPT_POSIX=0;
- GNULIB_GETPAGESIZE=0;
- GNULIB_GETPASS=0;
- GNULIB_GETUSERSHELL=0;
- GNULIB_GROUP_MEMBER=0;
- GNULIB_ISATTY=0;
- GNULIB_LCHOWN=0;
- GNULIB_LINK=0;
- GNULIB_LINKAT=0;
- GNULIB_LSEEK=0;
- GNULIB_PIPE=0;
- GNULIB_PIPE2=0;
- GNULIB_PREAD=0;
- GNULIB_PWRITE=0;
- GNULIB_READ=0;
- GNULIB_READLINK=0;
- GNULIB_READLINKAT=0;
- GNULIB_RMDIR=0;
- GNULIB_SETHOSTNAME=0;
- GNULIB_SLEEP=0;
- GNULIB_SYMLINK=0;
- GNULIB_SYMLINKAT=0;
- GNULIB_TRUNCATE=0;
- GNULIB_TTYNAME_R=0;
- GNULIB_UNISTD_H_NONBLOCKING=0;
- GNULIB_UNISTD_H_SIGPIPE=0;
- GNULIB_UNLINK=0;
- GNULIB_UNLINKAT=0;
- GNULIB_USLEEP=0;
- GNULIB_WRITE=0;
- GNULIB_MDA_ACCESS=1;
- GNULIB_MDA_CHDIR=1;
- GNULIB_MDA_CLOSE=1;
- GNULIB_MDA_DUP=1;
- GNULIB_MDA_DUP2=1;
- GNULIB_MDA_EXECL=1;
- GNULIB_MDA_EXECLE=1;
- GNULIB_MDA_EXECLP=1;
- GNULIB_MDA_EXECV=1;
- GNULIB_MDA_EXECVE=1;
- GNULIB_MDA_EXECVP=1;
- GNULIB_MDA_EXECVPE=1;
- GNULIB_MDA_GETCWD=1;
- GNULIB_MDA_GETPID=1;
- GNULIB_MDA_ISATTY=1;
- GNULIB_MDA_LSEEK=1;
- GNULIB_MDA_READ=1;
- GNULIB_MDA_RMDIR=1;
- GNULIB_MDA_SWAB=1;
- GNULIB_MDA_UNLINK=1;
- GNULIB_MDA_WRITE=1;
HAVE_CHOWN=1;
HAVE_COPY_FILE_RANGE=1;
HAVE_DUP3=1;
@@ -7253,6 +7481,7 @@ $as_echo "$gl_cv_source_line_length_unlimited" >&6; }
REPLACE_ACCESS=0;
REPLACE_CHOWN=0;
REPLACE_CLOSE=0;
+ REPLACE_COPY_FILE_RANGE=0;
REPLACE_DUP=0;
REPLACE_DUP2=0;
REPLACE_EXECL=0;
@@ -7272,6 +7501,7 @@ $as_echo "$gl_cv_source_line_length_unlimited" >&6; }
REPLACE_GETGROUPS=0;
REPLACE_GETPAGESIZE=0;
REPLACE_GETPASS=0;
+ REPLACE_GETPASS_FOR_GETPASS_GNU=0;
REPLACE_ISATTY=0;
REPLACE_LCHOWN=0;
REPLACE_LINK=0;
@@ -7359,6 +7589,7 @@ $as_echo "#define _POSIX_PII_SOCKET 1" >>confdefs.h
;;
esac
+ GL_GENERATE_SYS_SOCKET_H=false
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether <sys/socket.h> is self-contained" >&5
$as_echo_n "checking whether <sys/socket.h> is self-contained... " >&6; }
if ${gl_cv_header_sys_socket_h_selfcontained+:} false; then :
@@ -7427,7 +7658,7 @@ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_sys_socket_h_shut" >&5
$as_echo "$gl_cv_header_sys_socket_h_shut" >&6; }
if test $gl_cv_header_sys_socket_h_shut = no; then
- SYS_SOCKET_H='sys/socket.h'
+ GL_GENERATE_SYS_SOCKET_H=true
fi
fi
fi
@@ -7487,8 +7718,8 @@ _ACEOF
gl_cv_absolute_sys_socket_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
sed -n "$gl_absolute_header_sed"`
- gl_header=$gl_cv_absolute_sys_socket_h
- gl_cv_next_sys_socket_h='"'$gl_header'"'
+ gl_header=$gl_cv_absolute_sys_socket_h
+ gl_cv_next_sys_socket_h='"'$gl_header'"'
else
gl_cv_next_sys_socket_h='<'sys/socket.h'>'
fi
@@ -7605,7 +7836,7 @@ fi
fi
if test $HAVE_STRUCT_SOCKADDR_STORAGE = 0 || test $HAVE_SA_FAMILY_T = 0 \
|| test $HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = 0; then
- SYS_SOCKET_H='sys/socket.h'
+ GL_GENERATE_SYS_SOCKET_H=true
fi
@@ -7641,6 +7872,68 @@ done
+
+
+ GL_GNULIB_SOCKET=0
+
+
+
+ GL_GNULIB_CONNECT=0
+
+
+
+ GL_GNULIB_ACCEPT=0
+
+
+
+ GL_GNULIB_BIND=0
+
+
+
+ GL_GNULIB_GETPEERNAME=0
+
+
+
+ GL_GNULIB_GETSOCKNAME=0
+
+
+
+ GL_GNULIB_GETSOCKOPT=0
+
+
+
+ GL_GNULIB_LISTEN=0
+
+
+
+ GL_GNULIB_RECV=0
+
+
+
+ GL_GNULIB_SEND=0
+
+
+
+ GL_GNULIB_RECVFROM=0
+
+
+
+ GL_GNULIB_SENDTO=0
+
+
+
+ GL_GNULIB_SETSOCKOPT=0
+
+
+
+ GL_GNULIB_SHUTDOWN=0
+
+
+
+ GL_GNULIB_ACCEPT4=0
+
+
+
ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
if test "x$ac_cv_type_size_t" = xyes; then :
@@ -7801,27 +8094,6 @@ _ACEOF
fi
-
- GNULIB_INET_NTOP=0;
- GNULIB_INET_PTON=0;
- HAVE_DECL_INET_NTOP=1;
- HAVE_DECL_INET_PTON=1;
- REPLACE_INET_NTOP=0;
- REPLACE_INET_PTON=0;
-
-
-
-
-
-
-
- if test $ac_cv_header_features_h = yes; then
- HAVE_FEATURES_H=1
- else
- HAVE_FEATURES_H=0
- fi
-
-
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
if test -z "$MKDIR_P"; then
@@ -7865,48 +8137,144 @@ fi
$as_echo "$MKDIR_P" >&6; }
- GNULIB_BTOWC=0;
- GNULIB_WCTOB=0;
- GNULIB_MBSINIT=0;
- GNULIB_MBRTOWC=0;
- GNULIB_MBRLEN=0;
- GNULIB_MBSRTOWCS=0;
- GNULIB_MBSNRTOWCS=0;
- GNULIB_WCRTOMB=0;
- GNULIB_WCSRTOMBS=0;
- GNULIB_WCSNRTOMBS=0;
- GNULIB_WCWIDTH=0;
- GNULIB_WMEMCHR=0;
- GNULIB_WMEMCMP=0;
- GNULIB_WMEMCPY=0;
- GNULIB_WMEMMOVE=0;
- GNULIB_WMEMPCPY=0;
- GNULIB_WMEMSET=0;
- GNULIB_WCSLEN=0;
- GNULIB_WCSNLEN=0;
- GNULIB_WCSCPY=0;
- GNULIB_WCPCPY=0;
- GNULIB_WCSNCPY=0;
- GNULIB_WCPNCPY=0;
- GNULIB_WCSCAT=0;
- GNULIB_WCSNCAT=0;
- GNULIB_WCSCMP=0;
- GNULIB_WCSNCMP=0;
- GNULIB_WCSCASECMP=0;
- GNULIB_WCSNCASECMP=0;
- GNULIB_WCSCOLL=0;
- GNULIB_WCSXFRM=0;
- GNULIB_WCSDUP=0;
- GNULIB_WCSCHR=0;
- GNULIB_WCSRCHR=0;
- GNULIB_WCSCSPN=0;
- GNULIB_WCSSPN=0;
- GNULIB_WCSPBRK=0;
- GNULIB_WCSSTR=0;
- GNULIB_WCSTOK=0;
- GNULIB_WCSWIDTH=0;
- GNULIB_WCSFTIME=0;
- GNULIB_MDA_WCSDUP=1;
+ HAVE_DECL_INET_NTOP=1;
+ HAVE_DECL_INET_PTON=1;
+ REPLACE_INET_NTOP=0;
+ REPLACE_INET_PTON=0;
+
+
+
+
+
+
+
+ if test $ac_cv_header_features_h = yes; then
+ HAVE_FEATURES_H=1
+ else
+ HAVE_FEATURES_H=0
+ fi
+
+
+
+
+
+
+ if test $ac_cv_header_arpa_inet_h = yes; then
+ HAVE_ARPA_INET_H=1
+ else
+ HAVE_ARPA_INET_H=0
+ fi
+
+
+
+
+
+
+
+
+
+
+ if test $gl_cv_have_include_next = yes; then
+ gl_cv_next_arpa_inet_h='<'arpa/inet.h'>'
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <arpa/inet.h>" >&5
+$as_echo_n "checking absolute name of <arpa/inet.h>... " >&6; }
+if ${gl_cv_next_arpa_inet_h+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ if test $ac_cv_header_arpa_inet_h = yes; then
+
+
+
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <arpa/inet.h>
+_ACEOF
+ case "$host_os" in
+ aix*) gl_absname_cpp="$ac_cpp -C" ;;
+ *) gl_absname_cpp="$ac_cpp" ;;
+ esac
+
+ case "$host_os" in
+ mingw*)
+ gl_dirsep_regex='[/\\]'
+ ;;
+ *)
+ gl_dirsep_regex='\/'
+ ;;
+ esac
+ gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+ gl_header_literal_regex=`echo 'arpa/inet.h' \
+ | sed -e "$gl_make_literal_regex_sed"`
+ gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+ s|^/[^/]|//&|
+ p
+ q
+ }'
+
+ gl_cv_absolute_arpa_inet_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+ sed -n "$gl_absolute_header_sed"`
+
+ gl_header=$gl_cv_absolute_arpa_inet_h
+ gl_cv_next_arpa_inet_h='"'$gl_header'"'
+ else
+ gl_cv_next_arpa_inet_h='<'arpa/inet.h'>'
+ fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_arpa_inet_h" >&5
+$as_echo "$gl_cv_next_arpa_inet_h" >&6; }
+ fi
+ NEXT_ARPA_INET_H=$gl_cv_next_arpa_inet_h
+
+ if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+ gl_next_as_first_directive='<'arpa/inet.h'>'
+ else
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+ gl_next_as_first_directive=$gl_cv_next_arpa_inet_h
+ fi
+ NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H=$gl_next_as_first_directive
+
+
+
+
+
+
+
+
+
+ if test $ac_cv_header_sys_socket_h = yes; then
+ HAVE_WS2TCPIP_H=0
+ else
+ if test $ac_cv_header_ws2tcpip_h = yes; then
+ HAVE_WS2TCPIP_H=1
+ else
+ HAVE_WS2TCPIP_H=0
+ fi
+ fi
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_INET_NTOP=0
+
+
+
+ GL_GNULIB_INET_PTON=0
+
+
+
+
HAVE_BTOWC=1;
HAVE_MBSINIT=1;
HAVE_MBRTOWC=1;
@@ -8230,49 +8598,370 @@ $as_echo "$gt_cv_locale_fr" >&6; }
- GNULIB__EXIT=0;
- GNULIB_ALIGNED_ALLOC=0;
- GNULIB_ATOLL=0;
- GNULIB_CALLOC_POSIX=0;
- GNULIB_CANONICALIZE_FILE_NAME=0;
- GNULIB_FREE_POSIX=0;
- GNULIB_GETLOADAVG=0;
- GNULIB_GETSUBOPT=0;
- GNULIB_GRANTPT=0;
- GNULIB_MALLOC_POSIX=0;
- GNULIB_MBTOWC=0;
- GNULIB_MKDTEMP=0;
- GNULIB_MKOSTEMP=0;
- GNULIB_MKOSTEMPS=0;
- GNULIB_MKSTEMP=0;
- GNULIB_MKSTEMPS=0;
- GNULIB_POSIX_MEMALIGN=0;
- GNULIB_POSIX_OPENPT=0;
- GNULIB_PTSNAME=0;
- GNULIB_PTSNAME_R=0;
- GNULIB_PUTENV=0;
- GNULIB_QSORT_R=0;
- GNULIB_RANDOM=0;
- GNULIB_RANDOM_R=0;
- GNULIB_REALLOCARRAY=0;
- GNULIB_REALLOC_POSIX=0;
- GNULIB_REALPATH=0;
- GNULIB_RPMATCH=0;
- GNULIB_SECURE_GETENV=0;
- GNULIB_SETENV=0;
- GNULIB_STRTOD=0;
- GNULIB_STRTOLD=0;
- GNULIB_STRTOLL=0;
- GNULIB_STRTOULL=0;
- GNULIB_SYSTEM_POSIX=0;
- GNULIB_UNLOCKPT=0;
- GNULIB_UNSETENV=0;
- GNULIB_WCTOMB=0;
- GNULIB_MDA_ECVT=1;
- GNULIB_MDA_FCVT=1;
- GNULIB_MDA_GCVT=1;
- GNULIB_MDA_MKTEMP=1;
- GNULIB_MDA_PUTENV=1;
+
+ GL_GNULIB_BTOWC=0
+
+
+
+ GL_GNULIB_WCTOB=0
+
+
+
+ GL_GNULIB_MBSINIT=0
+
+
+
+ GL_GNULIB_MBRTOWC=0
+
+
+
+ GL_GNULIB_MBRLEN=0
+
+
+
+ GL_GNULIB_MBSRTOWCS=0
+
+
+
+ GL_GNULIB_MBSNRTOWCS=0
+
+
+
+ GL_GNULIB_WCRTOMB=0
+
+
+
+ GL_GNULIB_WCSRTOMBS=0
+
+
+
+ GL_GNULIB_WCSNRTOMBS=0
+
+
+
+ GL_GNULIB_WCWIDTH=0
+
+
+
+ GL_GNULIB_WMEMCHR=0
+
+
+
+ GL_GNULIB_WMEMCMP=0
+
+
+
+ GL_GNULIB_WMEMCPY=0
+
+
+
+ GL_GNULIB_WMEMMOVE=0
+
+
+
+ GL_GNULIB_WMEMPCPY=0
+
+
+
+ GL_GNULIB_WMEMSET=0
+
+
+
+ GL_GNULIB_WCSLEN=0
+
+
+
+ GL_GNULIB_WCSNLEN=0
+
+
+
+ GL_GNULIB_WCSCPY=0
+
+
+
+ GL_GNULIB_WCPCPY=0
+
+
+
+ GL_GNULIB_WCSNCPY=0
+
+
+
+ GL_GNULIB_WCPNCPY=0
+
+
+
+ GL_GNULIB_WCSCAT=0
+
+
+
+ GL_GNULIB_WCSNCAT=0
+
+
+
+ GL_GNULIB_WCSCMP=0
+
+
+
+ GL_GNULIB_WCSNCMP=0
+
+
+
+ GL_GNULIB_WCSCASECMP=0
+
+
+
+ GL_GNULIB_WCSNCASECMP=0
+
+
+
+ GL_GNULIB_WCSCOLL=0
+
+
+
+ GL_GNULIB_WCSXFRM=0
+
+
+
+ GL_GNULIB_WCSDUP=0
+
+
+
+ GL_GNULIB_WCSCHR=0
+
+
+
+ GL_GNULIB_WCSRCHR=0
+
+
+
+ GL_GNULIB_WCSCSPN=0
+
+
+
+ GL_GNULIB_WCSSPN=0
+
+
+
+ GL_GNULIB_WCSPBRK=0
+
+
+
+ GL_GNULIB_WCSSTR=0
+
+
+
+ GL_GNULIB_WCSTOK=0
+
+
+
+ GL_GNULIB_WCSWIDTH=0
+
+
+
+ GL_GNULIB_WCSFTIME=0
+
+
+
+ GL_GNULIB_MDA_WCSDUP=1
+
+
+
+
+
+ GL_GNULIB__EXIT=0
+
+
+
+ GL_GNULIB_ALIGNED_ALLOC=0
+
+
+
+ GL_GNULIB_ATOLL=0
+
+
+
+ GL_GNULIB_CALLOC_GNU=0
+
+
+
+ GL_GNULIB_CALLOC_POSIX=0
+
+
+
+ GL_GNULIB_CANONICALIZE_FILE_NAME=0
+
+
+
+ GL_GNULIB_FREE_POSIX=0
+
+
+
+ GL_GNULIB_GETLOADAVG=0
+
+
+
+ GL_GNULIB_GETSUBOPT=0
+
+
+
+ GL_GNULIB_GRANTPT=0
+
+
+
+ GL_GNULIB_MALLOC_GNU=0
+
+
+
+ GL_GNULIB_MALLOC_POSIX=0
+
+
+
+ GL_GNULIB_MBTOWC=0
+
+
+
+ GL_GNULIB_MKDTEMP=0
+
+
+
+ GL_GNULIB_MKOSTEMP=0
+
+
+
+ GL_GNULIB_MKOSTEMPS=0
+
+
+
+ GL_GNULIB_MKSTEMP=0
+
+
+
+ GL_GNULIB_MKSTEMPS=0
+
+
+
+ GL_GNULIB_POSIX_MEMALIGN=0
+
+
+
+ GL_GNULIB_POSIX_OPENPT=0
+
+
+
+ GL_GNULIB_PTSNAME=0
+
+
+
+ GL_GNULIB_PTSNAME_R=0
+
+
+
+ GL_GNULIB_PUTENV=0
+
+
+
+ GL_GNULIB_QSORT_R=0
+
+
+
+ GL_GNULIB_RANDOM=0
+
+
+
+ GL_GNULIB_RANDOM_R=0
+
+
+
+ GL_GNULIB_REALLOCARRAY=0
+
+
+
+ GL_GNULIB_REALLOC_GNU=0
+
+
+
+ GL_GNULIB_REALLOC_POSIX=0
+
+
+
+ GL_GNULIB_REALPATH=0
+
+
+
+ GL_GNULIB_RPMATCH=0
+
+
+
+ GL_GNULIB_SECURE_GETENV=0
+
+
+
+ GL_GNULIB_SETENV=0
+
+
+
+ GL_GNULIB_STRTOD=0
+
+
+
+ GL_GNULIB_STRTOL=0
+
+
+
+ GL_GNULIB_STRTOLD=0
+
+
+
+ GL_GNULIB_STRTOLL=0
+
+
+
+ GL_GNULIB_STRTOUL=0
+
+
+
+ GL_GNULIB_STRTOULL=0
+
+
+
+ GL_GNULIB_SYSTEM_POSIX=0
+
+
+
+ GL_GNULIB_UNLOCKPT=0
+
+
+
+ GL_GNULIB_UNSETENV=0
+
+
+
+ GL_GNULIB_WCTOMB=0
+
+
+
+ GL_GNULIB_MDA_ECVT=1
+
+
+
+ GL_GNULIB_MDA_FCVT=1
+
+
+
+ GL_GNULIB_MDA_GCVT=1
+
+
+
+ GL_GNULIB_MDA_MKTEMP=1
+
+
+
+ GL_GNULIB_MDA_PUTENV=1
+
+
+
+
HAVE__EXIT=1;
HAVE_ALIGNED_ALLOC=1;
HAVE_ATOLL=1;
@@ -8308,19 +8997,23 @@ $as_echo "$gt_cv_locale_fr" >&6; }
HAVE_SETSTATE=1;
HAVE_DECL_SETSTATE=1;
HAVE_STRTOD=1;
+ HAVE_STRTOL=1;
HAVE_STRTOLD=1;
HAVE_STRTOLL=1;
+ HAVE_STRTOUL=1;
HAVE_STRTOULL=1;
HAVE_STRUCT_RANDOM_DATA=1;
HAVE_SYS_LOADAVG_H=0;
HAVE_UNLOCKPT=1;
HAVE_DECL_UNSETENV=1;
REPLACE_ALIGNED_ALLOC=0;
- REPLACE_CALLOC=0;
+ REPLACE_CALLOC_FOR_CALLOC_GNU=0;
+ REPLACE_CALLOC_FOR_CALLOC_POSIX=0;
REPLACE_CANONICALIZE_FILE_NAME=0;
REPLACE_FREE=0;
REPLACE_INITSTATE=0;
- REPLACE_MALLOC=0;
+ REPLACE_MALLOC_FOR_MALLOC_GNU=0;
+ REPLACE_MALLOC_FOR_MALLOC_POSIX=0;
REPLACE_MBTOWC=0;
REPLACE_MKSTEMP=0;
REPLACE_POSIX_MEMALIGN=0;
@@ -8330,12 +9023,18 @@ $as_echo "$gt_cv_locale_fr" >&6; }
REPLACE_QSORT_R=0;
REPLACE_RANDOM=0;
REPLACE_RANDOM_R=0;
- REPLACE_REALLOC=0;
+ REPLACE_REALLOC_FOR_REALLOC_GNU=0;
+ REPLACE_REALLOC_FOR_REALLOC_POSIX=0;
+ REPLACE_REALLOCARRAY=0;
REPLACE_REALPATH=0;
REPLACE_SETENV=0;
REPLACE_SETSTATE=0;
REPLACE_STRTOD=0;
+ REPLACE_STRTOL=0;
REPLACE_STRTOLD=0;
+ REPLACE_STRTOLL=0;
+ REPLACE_STRTOUL=0;
+ REPLACE_STRTOULL=0;
REPLACE_UNSETENV=0;
REPLACE_WCTOMB=0;
@@ -8453,6 +9152,8 @@ $as_echo "#define DOUBLE_SLASH_IS_DISTINCT_ROOT 1" >>confdefs.h
+
+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether realpath works" >&5
$as_echo_n "checking whether realpath works... " >&6; }
if ${gl_cv_func_realpath_works+:} false; then :
@@ -8461,13 +9162,19 @@ else
rm -rf conftest.a conftest.d
touch conftest.a
+ # Assume that if we have lstat, we can also check symlinks.
+ if test $ac_cv_func_lstat = yes; then
+ ln -s conftest.a conftest.l
+ fi
mkdir conftest.d
if test "$cross_compiling" = yes; then :
case "$host_os" in
# Guess yes on glibc systems.
*-gnu* | gnu*) gl_cv_func_realpath_works="guessing yes" ;;
- # Guess yes on musl systems.
- *-musl*) gl_cv_func_realpath_works="guessing yes" ;;
+ # Guess 'nearly' on musl systems.
+ *-musl*) gl_cv_func_realpath_works="guessing nearly" ;;
+ # Guess no on Cygwin.
+ cygwin*) gl_cv_func_realpath_works="guessing no" ;;
# Guess no on native Windows.
mingw*) gl_cv_func_realpath_works="guessing no" ;;
# If we don't know, obey --enable-cross-guesses.
@@ -8593,6 +9300,7 @@ nocrash_init (void)
}
#endif
+ #include <errno.h>
#include <stdlib.h>
#include <string.h>
@@ -8601,32 +9309,56 @@ main ()
{
int result = 0;
+ /* This test fails on Solaris 10. */
{
char *name = realpath ("conftest.a", NULL);
if (!(name && *name == '/'))
result |= 1;
free (name);
}
+ /* This test fails on older versions of Cygwin. */
{
char *name = realpath ("conftest.b/../conftest.a", NULL);
if (name != NULL)
result |= 2;
free (name);
}
+ /* This test fails on Cygwin 2.9. */
+ #if HAVE_LSTAT
+ {
+ char *name = realpath ("conftest.l/../conftest.a", NULL);
+ if (name != NULL || errno != ENOTDIR)
+ result |= 4;
+ free (name);
+ }
+ #endif
+ /* This test fails on Mac OS X 10.13, OpenBSD 6.0. */
{
char *name = realpath ("conftest.a/", NULL);
if (name != NULL)
- result |= 4;
+ result |= 8;
free (name);
}
+ /* This test fails on AIX 7, Solaris 10. */
{
char *name1 = realpath (".", NULL);
char *name2 = realpath ("conftest.d//./..", NULL);
if (! name1 || ! name2 || strcmp (name1, name2))
- result |= 8;
+ result |= 16;
free (name1);
free (name2);
}
+ #ifdef __linux__
+ /* On Linux, // is the same as /. See also double-slash-root.m4.
+ realpath() should respect this.
+ This test fails on musl libc 1.2.2. */
+ {
+ char *name = realpath ("//", NULL);
+ if (! name || strcmp (name, "/"))
+ result |= 32;
+ free (name);
+ }
+ #endif
return result;
;
@@ -8637,13 +9369,17 @@ _ACEOF
if ac_fn_c_try_run "$LINENO"; then :
gl_cv_func_realpath_works=yes
else
- gl_cv_func_realpath_works=no
+ case $? in
+ 32) gl_cv_func_realpath_works=nearly ;;
+ *) gl_cv_func_realpath_works=no ;;
+ esac
+
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
- rm -rf conftest.a conftest.d
+ rm -rf conftest.a conftest.l conftest.d
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_realpath_works" >&5
@@ -8654,6 +9390,11 @@ $as_echo "$gl_cv_func_realpath_works" >&6; }
$as_echo "#define FUNC_REALPATH_WORKS 1" >>confdefs.h
;;
+ *nearly)
+
+$as_echo "#define FUNC_REALPATH_NEARLY_WORKS 1" >>confdefs.h
+
+ ;;
esac
@@ -8685,6 +9426,344 @@ done
+ GL_GNULIB_ACCESS=0
+
+
+
+ GL_GNULIB_CHDIR=0
+
+
+
+ GL_GNULIB_CHOWN=0
+
+
+
+ GL_GNULIB_CLOSE=0
+
+
+
+ GL_GNULIB_COPY_FILE_RANGE=0
+
+
+
+ GL_GNULIB_DUP=0
+
+
+
+ GL_GNULIB_DUP2=0
+
+
+
+ GL_GNULIB_DUP3=0
+
+
+
+ GL_GNULIB_ENVIRON=0
+
+
+
+ GL_GNULIB_EUIDACCESS=0
+
+
+
+ GL_GNULIB_EXECL=0
+
+
+
+ GL_GNULIB_EXECLE=0
+
+
+
+ GL_GNULIB_EXECLP=0
+
+
+
+ GL_GNULIB_EXECV=0
+
+
+
+ GL_GNULIB_EXECVE=0
+
+
+
+ GL_GNULIB_EXECVP=0
+
+
+
+ GL_GNULIB_EXECVPE=0
+
+
+
+ GL_GNULIB_FACCESSAT=0
+
+
+
+ GL_GNULIB_FCHDIR=0
+
+
+
+ GL_GNULIB_FCHOWNAT=0
+
+
+
+ GL_GNULIB_FDATASYNC=0
+
+
+
+ GL_GNULIB_FSYNC=0
+
+
+
+ GL_GNULIB_FTRUNCATE=0
+
+
+
+ GL_GNULIB_GETCWD=0
+
+
+
+ GL_GNULIB_GETDOMAINNAME=0
+
+
+
+ GL_GNULIB_GETDTABLESIZE=0
+
+
+
+ GL_GNULIB_GETENTROPY=0
+
+
+
+ GL_GNULIB_GETGROUPS=0
+
+
+
+ GL_GNULIB_GETHOSTNAME=0
+
+
+
+ GL_GNULIB_GETLOGIN=0
+
+
+
+ GL_GNULIB_GETLOGIN_R=0
+
+
+
+ GL_GNULIB_GETOPT_POSIX=0
+
+
+
+ GL_GNULIB_GETPAGESIZE=0
+
+
+
+ GL_GNULIB_GETPASS=0
+
+
+
+ GL_GNULIB_GETPASS_GNU=0
+
+
+
+ GL_GNULIB_GETUSERSHELL=0
+
+
+
+ GL_GNULIB_GROUP_MEMBER=0
+
+
+
+ GL_GNULIB_ISATTY=0
+
+
+
+ GL_GNULIB_LCHOWN=0
+
+
+
+ GL_GNULIB_LINK=0
+
+
+
+ GL_GNULIB_LINKAT=0
+
+
+
+ GL_GNULIB_LSEEK=0
+
+
+
+ GL_GNULIB_PIPE=0
+
+
+
+ GL_GNULIB_PIPE2=0
+
+
+
+ GL_GNULIB_PREAD=0
+
+
+
+ GL_GNULIB_PWRITE=0
+
+
+
+ GL_GNULIB_READ=0
+
+
+
+ GL_GNULIB_READLINK=0
+
+
+
+ GL_GNULIB_READLINKAT=0
+
+
+
+ GL_GNULIB_RMDIR=0
+
+
+
+ GL_GNULIB_SETHOSTNAME=0
+
+
+
+ GL_GNULIB_SLEEP=0
+
+
+
+ GL_GNULIB_SYMLINK=0
+
+
+
+ GL_GNULIB_SYMLINKAT=0
+
+
+
+ GL_GNULIB_TRUNCATE=0
+
+
+
+ GL_GNULIB_TTYNAME_R=0
+
+
+
+ GL_GNULIB_UNISTD_H_GETOPT=0
+
+
+
+ GL_GNULIB_UNISTD_H_NONBLOCKING=0
+
+
+
+ GL_GNULIB_UNISTD_H_SIGPIPE=0
+
+
+
+ GL_GNULIB_UNLINK=0
+
+
+
+ GL_GNULIB_UNLINKAT=0
+
+
+
+ GL_GNULIB_USLEEP=0
+
+
+
+ GL_GNULIB_WRITE=0
+
+
+
+ GL_GNULIB_MDA_ACCESS=1
+
+
+
+ GL_GNULIB_MDA_CHDIR=1
+
+
+
+ GL_GNULIB_MDA_CLOSE=1
+
+
+
+ GL_GNULIB_MDA_DUP=1
+
+
+
+ GL_GNULIB_MDA_DUP2=1
+
+
+
+ GL_GNULIB_MDA_EXECL=1
+
+
+
+ GL_GNULIB_MDA_EXECLE=1
+
+
+
+ GL_GNULIB_MDA_EXECLP=1
+
+
+
+ GL_GNULIB_MDA_EXECV=1
+
+
+
+ GL_GNULIB_MDA_EXECVE=1
+
+
+
+ GL_GNULIB_MDA_EXECVP=1
+
+
+
+ GL_GNULIB_MDA_EXECVPE=1
+
+
+
+ GL_GNULIB_MDA_GETCWD=1
+
+
+
+ GL_GNULIB_MDA_GETPID=1
+
+
+
+ GL_GNULIB_MDA_ISATTY=1
+
+
+
+ GL_GNULIB_MDA_LSEEK=1
+
+
+
+ GL_GNULIB_MDA_READ=1
+
+
+
+ GL_GNULIB_MDA_RMDIR=1
+
+
+
+ GL_GNULIB_MDA_SWAB=1
+
+
+
+ GL_GNULIB_MDA_UNLINK=1
+
+
+
+ GL_GNULIB_MDA_WRITE=1
+
+
+
+
+
@@ -9093,14 +10172,6 @@ $as_echo "#define HAVE_MSVC_INVALID_PARAMETER_HANDLER 1" >>confdefs.h
- GNULIB_OPENDIR=0;
- GNULIB_READDIR=0;
- GNULIB_REWINDDIR=0;
- GNULIB_CLOSEDIR=0;
- GNULIB_DIRFD=0;
- GNULIB_FDOPENDIR=0;
- GNULIB_SCANDIR=0;
- GNULIB_ALPHASORT=0;
HAVE_OPENDIR=1;
HAVE_READDIR=1;
HAVE_REWINDDIR=1;
@@ -9116,7 +10187,44 @@ $as_echo "#define HAVE_MSVC_INVALID_PARAMETER_HANDLER 1" >>confdefs.h
REPLACE_FDOPENDIR=0;
- GNULIB_ISBLANK=0;
+
+
+
+
+
+ GL_GNULIB_OPENDIR=0
+
+
+
+ GL_GNULIB_READDIR=0
+
+
+
+ GL_GNULIB_REWINDDIR=0
+
+
+
+ GL_GNULIB_CLOSEDIR=0
+
+
+
+ GL_GNULIB_DIRFD=0
+
+
+
+ GL_GNULIB_FDOPENDIR=0
+
+
+
+ GL_GNULIB_SCANDIR=0
+
+
+
+ GL_GNULIB_ALPHASORT=0
+
+
+
+
HAVE_ISBLANK=1;
@@ -9128,6 +10236,183 @@ $as_echo "#define HAVE_MSVC_INVALID_PARAMETER_HANDLER 1" >>confdefs.h
+
+
+ if test $gl_cv_have_include_next = yes; then
+ gl_cv_next_ctype_h='<'ctype.h'>'
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <ctype.h>" >&5
+$as_echo_n "checking absolute name of <ctype.h>... " >&6; }
+if ${gl_cv_next_ctype_h+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ctype.h>
+_ACEOF
+ case "$host_os" in
+ aix*) gl_absname_cpp="$ac_cpp -C" ;;
+ *) gl_absname_cpp="$ac_cpp" ;;
+ esac
+
+ case "$host_os" in
+ mingw*)
+ gl_dirsep_regex='[/\\]'
+ ;;
+ *)
+ gl_dirsep_regex='\/'
+ ;;
+ esac
+ gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+ gl_header_literal_regex=`echo 'ctype.h' \
+ | sed -e "$gl_make_literal_regex_sed"`
+ gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+ s|^/[^/]|//&|
+ p
+ q
+ }'
+
+ gl_cv_absolute_ctype_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+ sed -n "$gl_absolute_header_sed"`
+
+ gl_header=$gl_cv_absolute_ctype_h
+ gl_cv_next_ctype_h='"'$gl_header'"'
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_ctype_h" >&5
+$as_echo "$gl_cv_next_ctype_h" >&6; }
+ fi
+ NEXT_CTYPE_H=$gl_cv_next_ctype_h
+
+ if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+ gl_next_as_first_directive='<'ctype.h'>'
+ else
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+ gl_next_as_first_directive=$gl_cv_next_ctype_h
+ fi
+ NEXT_AS_FIRST_DIRECTIVE_CTYPE_H=$gl_next_as_first_directive
+
+
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_ISBLANK=0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if test $gl_cv_have_include_next = yes; then
+ gl_cv_next_dirent_h='<'dirent.h'>'
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <dirent.h>" >&5
+$as_echo_n "checking absolute name of <dirent.h>... " >&6; }
+if ${gl_cv_next_dirent_h+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ if test $ac_cv_header_dirent_h = yes; then
+
+
+
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <dirent.h>
+_ACEOF
+ case "$host_os" in
+ aix*) gl_absname_cpp="$ac_cpp -C" ;;
+ *) gl_absname_cpp="$ac_cpp" ;;
+ esac
+
+ case "$host_os" in
+ mingw*)
+ gl_dirsep_regex='[/\\]'
+ ;;
+ *)
+ gl_dirsep_regex='\/'
+ ;;
+ esac
+ gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+ gl_header_literal_regex=`echo 'dirent.h' \
+ | sed -e "$gl_make_literal_regex_sed"`
+ gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+ s|^/[^/]|//&|
+ p
+ q
+ }'
+
+ gl_cv_absolute_dirent_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+ sed -n "$gl_absolute_header_sed"`
+
+ gl_header=$gl_cv_absolute_dirent_h
+ gl_cv_next_dirent_h='"'$gl_header'"'
+ else
+ gl_cv_next_dirent_h='<'dirent.h'>'
+ fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_dirent_h" >&5
+$as_echo "$gl_cv_next_dirent_h" >&6; }
+ fi
+ NEXT_DIRENT_H=$gl_cv_next_dirent_h
+
+ if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+ gl_next_as_first_directive='<'dirent.h'>'
+ else
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+ gl_next_as_first_directive=$gl_cv_next_dirent_h
+ fi
+ NEXT_AS_FIRST_DIRECTIVE_DIRENT_H=$gl_next_as_first_directive
+
+
+
+
+ if test $ac_cv_header_dirent_h = yes; then
+ HAVE_DIRENT_H=1
+ else
+ HAVE_DIRENT_H=0
+ fi
+
+
+
+
+
+
+
+
+
+
+
+
+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if environ is properly declared" >&5
$as_echo_n "checking if environ is properly declared... " >&6; }
if ${gt_cv_var_environ_declaration+:} false; then :
@@ -9141,7 +10426,8 @@ else
/* mingw, BeOS, Haiku declare environ in <stdlib.h>, not in <unistd.h>. */
#include <stdlib.h>
- extern struct { int foo; } environ;
+ typedef struct { int foo; } foo_t;
+ extern foo_t environ;
int
main ()
{
@@ -9248,7 +10534,7 @@ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_errno_h_complete" >&5
$as_echo "$gl_cv_header_errno_h_complete" >&6; }
if test $gl_cv_header_errno_h_complete = yes; then
- ERRNO_H=''
+ GL_GENERATE_ERRNO_H=false
else
@@ -9299,8 +10585,8 @@ _ACEOF
gl_cv_absolute_errno_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
sed -n "$gl_absolute_header_sed"`
- gl_header=$gl_cv_absolute_errno_h
- gl_cv_next_errno_h='"'$gl_header'"'
+ gl_header=$gl_cv_absolute_errno_h
+ gl_cv_next_errno_h='"'$gl_header'"'
fi
@@ -9321,19 +10607,10 @@ $as_echo "$gl_cv_next_errno_h" >&6; }
- ERRNO_H='errno.h'
+ GL_GENERATE_ERRNO_H=true
fi
- if test -n "$ERRNO_H"; then
- GL_GENERATE_ERRNO_H_TRUE=
- GL_GENERATE_ERRNO_H_FALSE='#'
-else
- GL_GENERATE_ERRNO_H_TRUE='#'
- GL_GENERATE_ERRNO_H_FALSE=
-fi
-
-
- if test -n "$ERRNO_H"; then
+ if $GL_GENERATE_ERRNO_H; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for EMULTIHOP value" >&5
$as_echo_n "checking for EMULTIHOP value... " >&6; }
if ${gl_cv_header_errno_h_EMULTIHOP+:} false; then :
@@ -9404,7 +10681,7 @@ $as_echo "$gl_cv_header_errno_h_EMULTIHOP" >&6; }
fi
- if test -n "$ERRNO_H"; then
+ if $GL_GENERATE_ERRNO_H; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ENOLINK value" >&5
$as_echo_n "checking for ENOLINK value... " >&6; }
if ${gl_cv_header_errno_h_ENOLINK+:} false; then :
@@ -9475,7 +10752,7 @@ $as_echo "$gl_cv_header_errno_h_ENOLINK" >&6; }
fi
- if test -n "$ERRNO_H"; then
+ if $GL_GENERATE_ERRNO_H; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for EOVERFLOW value" >&5
$as_echo_n "checking for EOVERFLOW value... " >&6; }
if ${gl_cv_header_errno_h_EOVERFLOW+:} false; then :
@@ -9639,6 +10916,34 @@ $as_echo "#define STRERROR_R_CHAR_P 1" >>confdefs.h
fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ctype.h defines __header_inline" >&5
+$as_echo_n "checking whether ctype.h defines __header_inline... " >&6; }
+if ${gl_cv_have___header_inline+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ctype.h>
+ #ifndef __header_inline
+ #error "<ctype.h> does not define __header_inline"
+ #endif
+
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+ gl_cv_have___header_inline=yes
+else
+ gl_cv_have___header_inline=no
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have___header_inline" >&5
+$as_echo "$gl_cv_have___header_inline" >&6; }
+ if test "$gl_cv_have___header_inline" = yes; then
+
+$as_echo "#define HAVE___HEADER_INLINE 1" >>confdefs.h
+
+ fi
+
ac_fn_c_check_decl "$LINENO" "fchdir" "ac_cv_have_decl_fchdir" "$ac_includes_default"
@@ -9653,13 +10958,6 @@ cat >>confdefs.h <<_ACEOF
_ACEOF
- GNULIB_CREAT=0;
- GNULIB_FCNTL=0;
- GNULIB_NONBLOCKING=0;
- GNULIB_OPEN=0;
- GNULIB_OPENAT=0;
- GNULIB_MDA_CREAT=1;
- GNULIB_MDA_OPEN=1;
HAVE_FCNTL=1;
HAVE_OPENAT=1;
REPLACE_CREAT=0;
@@ -9671,6 +10969,36 @@ _ACEOF
+ GL_GNULIB_CREAT=0
+
+
+
+ GL_GNULIB_FCNTL=0
+
+
+
+ GL_GNULIB_NONBLOCKING=0
+
+
+
+ GL_GNULIB_OPEN=0
+
+
+
+ GL_GNULIB_OPENAT=0
+
+
+
+ GL_GNULIB_MDA_CREAT=1
+
+
+
+ GL_GNULIB_MDA_OPEN=1
+
+
+
+
+
@@ -9878,15 +11206,102 @@ fi
- GNULIB_FFS=0;
+
+
+
+
+
+
+
+
+ if test $gl_cv_have_include_next = yes; then
+ gl_cv_next_fcntl_h='<'fcntl.h'>'
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <fcntl.h>" >&5
+$as_echo_n "checking absolute name of <fcntl.h>... " >&6; }
+if ${gl_cv_next_fcntl_h+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <fcntl.h>
+_ACEOF
+ case "$host_os" in
+ aix*) gl_absname_cpp="$ac_cpp -C" ;;
+ *) gl_absname_cpp="$ac_cpp" ;;
+ esac
+
+ case "$host_os" in
+ mingw*)
+ gl_dirsep_regex='[/\\]'
+ ;;
+ *)
+ gl_dirsep_regex='\/'
+ ;;
+ esac
+ gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+ gl_header_literal_regex=`echo 'fcntl.h' \
+ | sed -e "$gl_make_literal_regex_sed"`
+ gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+ s|^/[^/]|//&|
+ p
+ q
+ }'
+
+ gl_cv_absolute_fcntl_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+ sed -n "$gl_absolute_header_sed"`
+
+ gl_header=$gl_cv_absolute_fcntl_h
+ gl_cv_next_fcntl_h='"'$gl_header'"'
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_fcntl_h" >&5
+$as_echo "$gl_cv_next_fcntl_h" >&6; }
+ fi
+ NEXT_FCNTL_H=$gl_cv_next_fcntl_h
+
+ if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+ gl_next_as_first_directive='<'fcntl.h'>'
+ else
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+ gl_next_as_first_directive=$gl_cv_next_fcntl_h
+ fi
+ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H=$gl_next_as_first_directive
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
HAVE_FFS=1;
HAVE_STRCASECMP=1;
HAVE_DECL_STRNCASECMP=1;
+ GL_GNULIB_FFS=0
+
+
+
+
+
- GNULIB_FNMATCH=0;
HAVE_FNMATCH=1;
REPLACE_FNMATCH=0;
@@ -9949,8 +11364,8 @@ _ACEOF
gl_cv_absolute_fnmatch_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
sed -n "$gl_absolute_header_sed"`
- gl_header=$gl_cv_absolute_fnmatch_h
- gl_cv_next_fnmatch_h='"'$gl_header'"'
+ gl_header=$gl_cv_absolute_fnmatch_h
+ gl_cv_next_fnmatch_h='"'$gl_header'"'
else
gl_cv_next_fnmatch_h='<'fnmatch.h'>'
fi
@@ -9984,23 +11399,16 @@ $as_echo "$gl_cv_next_fnmatch_h" >&6; }
fi
- FNMATCH_H=''
+ GL_GENERATE_FNMATCH_H=false
if false; then
- FNMATCH_H=fnmatch.h
+ GL_GENERATE_FNMATCH_H=true
else
if test $ac_cv_header_fnmatch_h != yes; then
- FNMATCH_H=fnmatch.h
+ GL_GENERATE_FNMATCH_H=true
fi
fi
- if test -n "$FNMATCH_H"; then
- GL_GENERATE_FNMATCH_H_TRUE=
- GL_GENERATE_FNMATCH_H_FALSE='#'
-else
- GL_GENERATE_FNMATCH_H_TRUE='#'
- GL_GENERATE_FNMATCH_H_FALSE=
-fi
@@ -10009,6 +11417,10 @@ fi
+ GL_GNULIB_FNMATCH=0
+
+
+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for mbstate_t" >&5
@@ -10050,107 +11462,6 @@ $as_echo "#define mbstate_t int" >>confdefs.h
- GNULIB_ACOSF=0;
- GNULIB_ACOSL=0;
- GNULIB_ASINF=0;
- GNULIB_ASINL=0;
- GNULIB_ATANF=0;
- GNULIB_ATANL=0;
- GNULIB_ATAN2F=0;
- GNULIB_CBRT=0;
- GNULIB_CBRTF=0;
- GNULIB_CBRTL=0;
- GNULIB_CEIL=0;
- GNULIB_CEILF=0;
- GNULIB_CEILL=0;
- GNULIB_COPYSIGN=0;
- GNULIB_COPYSIGNF=0;
- GNULIB_COPYSIGNL=0;
- GNULIB_COSF=0;
- GNULIB_COSL=0;
- GNULIB_COSHF=0;
- GNULIB_EXPF=0;
- GNULIB_EXPL=0;
- GNULIB_EXP2=0;
- GNULIB_EXP2F=0;
- GNULIB_EXP2L=0;
- GNULIB_EXPM1=0;
- GNULIB_EXPM1F=0;
- GNULIB_EXPM1L=0;
- GNULIB_FABSF=0;
- GNULIB_FABSL=0;
- GNULIB_FLOOR=0;
- GNULIB_FLOORF=0;
- GNULIB_FLOORL=0;
- GNULIB_FMA=0;
- GNULIB_FMAF=0;
- GNULIB_FMAL=0;
- GNULIB_FMOD=0;
- GNULIB_FMODF=0;
- GNULIB_FMODL=0;
- GNULIB_FREXPF=0;
- GNULIB_FREXP=0;
- GNULIB_FREXPL=0;
- GNULIB_HYPOT=0;
- GNULIB_HYPOTF=0;
- GNULIB_HYPOTL=0;
- GNULIB_ILOGB=0;
- GNULIB_ILOGBF=0;
- GNULIB_ILOGBL=0;
- GNULIB_ISFINITE=0;
- GNULIB_ISINF=0;
- GNULIB_ISNAN=0;
- GNULIB_ISNANF=0;
- GNULIB_ISNAND=0;
- GNULIB_ISNANL=0;
- GNULIB_LDEXPF=0;
- GNULIB_LDEXPL=0;
- GNULIB_LOG=0;
- GNULIB_LOGF=0;
- GNULIB_LOGL=0;
- GNULIB_LOG10=0;
- GNULIB_LOG10F=0;
- GNULIB_LOG10L=0;
- GNULIB_LOG1P=0;
- GNULIB_LOG1PF=0;
- GNULIB_LOG1PL=0;
- GNULIB_LOG2=0;
- GNULIB_LOG2F=0;
- GNULIB_LOG2L=0;
- GNULIB_LOGB=0;
- GNULIB_LOGBF=0;
- GNULIB_LOGBL=0;
- GNULIB_MODF=0;
- GNULIB_MODFF=0;
- GNULIB_MODFL=0;
- GNULIB_POWF=0;
- GNULIB_REMAINDER=0;
- GNULIB_REMAINDERF=0;
- GNULIB_REMAINDERL=0;
- GNULIB_RINT=0;
- GNULIB_RINTF=0;
- GNULIB_RINTL=0;
- GNULIB_ROUND=0;
- GNULIB_ROUNDF=0;
- GNULIB_ROUNDL=0;
- GNULIB_SIGNBIT=0;
- GNULIB_SINF=0;
- GNULIB_SINL=0;
- GNULIB_SINHF=0;
- GNULIB_SQRTF=0;
- GNULIB_SQRTL=0;
- GNULIB_TANF=0;
- GNULIB_TANL=0;
- GNULIB_TANHF=0;
- GNULIB_TRUNC=0;
- GNULIB_TRUNCF=0;
- GNULIB_TRUNCL=0;
- GNULIB_MDA_J0=1;
- GNULIB_MDA_J1=1;
- GNULIB_MDA_JN=1;
- GNULIB_MDA_Y0=1;
- GNULIB_MDA_Y1=1;
- GNULIB_MDA_YN=1;
HAVE_ACOSF=1;
HAVE_ACOSL=1;
HAVE_ASINF=1;
@@ -10545,6 +11856,412 @@ $as_echo "#define HAVE_FREXP 1" >>confdefs.h
+
+ GL_GNULIB_ACOSF=0
+
+
+
+ GL_GNULIB_ACOSL=0
+
+
+
+ GL_GNULIB_ASINF=0
+
+
+
+ GL_GNULIB_ASINL=0
+
+
+
+ GL_GNULIB_ATANF=0
+
+
+
+ GL_GNULIB_ATANL=0
+
+
+
+ GL_GNULIB_ATAN2F=0
+
+
+
+ GL_GNULIB_CBRT=0
+
+
+
+ GL_GNULIB_CBRTF=0
+
+
+
+ GL_GNULIB_CBRTL=0
+
+
+
+ GL_GNULIB_CEIL=0
+
+
+
+ GL_GNULIB_CEILF=0
+
+
+
+ GL_GNULIB_CEILL=0
+
+
+
+ GL_GNULIB_COPYSIGN=0
+
+
+
+ GL_GNULIB_COPYSIGNF=0
+
+
+
+ GL_GNULIB_COPYSIGNL=0
+
+
+
+ GL_GNULIB_COSF=0
+
+
+
+ GL_GNULIB_COSL=0
+
+
+
+ GL_GNULIB_COSHF=0
+
+
+
+ GL_GNULIB_EXPF=0
+
+
+
+ GL_GNULIB_EXPL=0
+
+
+
+ GL_GNULIB_EXP2=0
+
+
+
+ GL_GNULIB_EXP2F=0
+
+
+
+ GL_GNULIB_EXP2L=0
+
+
+
+ GL_GNULIB_EXPM1=0
+
+
+
+ GL_GNULIB_EXPM1F=0
+
+
+
+ GL_GNULIB_EXPM1L=0
+
+
+
+ GL_GNULIB_FABSF=0
+
+
+
+ GL_GNULIB_FABSL=0
+
+
+
+ GL_GNULIB_FLOOR=0
+
+
+
+ GL_GNULIB_FLOORF=0
+
+
+
+ GL_GNULIB_FLOORL=0
+
+
+
+ GL_GNULIB_FMA=0
+
+
+
+ GL_GNULIB_FMAF=0
+
+
+
+ GL_GNULIB_FMAL=0
+
+
+
+ GL_GNULIB_FMOD=0
+
+
+
+ GL_GNULIB_FMODF=0
+
+
+
+ GL_GNULIB_FMODL=0
+
+
+
+ GL_GNULIB_FREXPF=0
+
+
+
+ GL_GNULIB_FREXP=0
+
+
+
+ GL_GNULIB_FREXPL=0
+
+
+
+ GL_GNULIB_HYPOT=0
+
+
+
+ GL_GNULIB_HYPOTF=0
+
+
+
+ GL_GNULIB_HYPOTL=0
+
+
+
+ GL_GNULIB_ILOGB=0
+
+
+
+ GL_GNULIB_ILOGBF=0
+
+
+
+ GL_GNULIB_ILOGBL=0
+
+
+
+ GL_GNULIB_ISFINITE=0
+
+
+
+ GL_GNULIB_ISINF=0
+
+
+
+ GL_GNULIB_ISNAN=0
+
+
+
+ GL_GNULIB_ISNANF=0
+
+
+
+ GL_GNULIB_ISNAND=0
+
+
+
+ GL_GNULIB_ISNANL=0
+
+
+
+ GL_GNULIB_LDEXPF=0
+
+
+
+ GL_GNULIB_LDEXPL=0
+
+
+
+ GL_GNULIB_LOG=0
+
+
+
+ GL_GNULIB_LOGF=0
+
+
+
+ GL_GNULIB_LOGL=0
+
+
+
+ GL_GNULIB_LOG10=0
+
+
+
+ GL_GNULIB_LOG10F=0
+
+
+
+ GL_GNULIB_LOG10L=0
+
+
+
+ GL_GNULIB_LOG1P=0
+
+
+
+ GL_GNULIB_LOG1PF=0
+
+
+
+ GL_GNULIB_LOG1PL=0
+
+
+
+ GL_GNULIB_LOG2=0
+
+
+
+ GL_GNULIB_LOG2F=0
+
+
+
+ GL_GNULIB_LOG2L=0
+
+
+
+ GL_GNULIB_LOGB=0
+
+
+
+ GL_GNULIB_LOGBF=0
+
+
+
+ GL_GNULIB_LOGBL=0
+
+
+
+ GL_GNULIB_MODF=0
+
+
+
+ GL_GNULIB_MODFF=0
+
+
+
+ GL_GNULIB_MODFL=0
+
+
+
+ GL_GNULIB_POWF=0
+
+
+
+ GL_GNULIB_REMAINDER=0
+
+
+
+ GL_GNULIB_REMAINDERF=0
+
+
+
+ GL_GNULIB_REMAINDERL=0
+
+
+
+ GL_GNULIB_RINT=0
+
+
+
+ GL_GNULIB_RINTF=0
+
+
+
+ GL_GNULIB_RINTL=0
+
+
+
+ GL_GNULIB_ROUND=0
+
+
+
+ GL_GNULIB_ROUNDF=0
+
+
+
+ GL_GNULIB_ROUNDL=0
+
+
+
+ GL_GNULIB_SIGNBIT=0
+
+
+
+ GL_GNULIB_SINF=0
+
+
+
+ GL_GNULIB_SINL=0
+
+
+
+ GL_GNULIB_SINHF=0
+
+
+
+ GL_GNULIB_SQRTF=0
+
+
+
+ GL_GNULIB_SQRTL=0
+
+
+
+ GL_GNULIB_TANF=0
+
+
+
+ GL_GNULIB_TANL=0
+
+
+
+ GL_GNULIB_TANHF=0
+
+
+
+ GL_GNULIB_TRUNC=0
+
+
+
+ GL_GNULIB_TRUNCF=0
+
+
+
+ GL_GNULIB_TRUNCL=0
+
+
+
+ GL_GNULIB_MDA_J0=1
+
+
+
+ GL_GNULIB_MDA_J1=1
+
+
+
+ GL_GNULIB_MDA_JN=1
+
+
+
+ GL_GNULIB_MDA_Y0=1
+
+
+
+ GL_GNULIB_MDA_Y1=1
+
+
+
+ GL_GNULIB_MDA_YN=1
+
+
+
+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether long double and double are the same" >&5
$as_echo_n "checking whether long double and double are the same... " >&6; }
if ${gl_cv_long_double_equals_double+:} false; then :
@@ -10829,25 +12546,6 @@ $as_echo "#define HAVE_FREXPL 1" >>confdefs.h
- GNULIB_FCHMODAT=0;
- GNULIB_FSTAT=0;
- GNULIB_FSTATAT=0;
- GNULIB_FUTIMENS=0;
- GNULIB_GETUMASK=0;
- GNULIB_LCHMOD=0;
- GNULIB_LSTAT=0;
- GNULIB_MKDIR=0;
- GNULIB_MKDIRAT=0;
- GNULIB_MKFIFO=0;
- GNULIB_MKFIFOAT=0;
- GNULIB_MKNOD=0;
- GNULIB_MKNODAT=0;
- GNULIB_STAT=0;
- GNULIB_UTIMENSAT=0;
- GNULIB_OVERRIDES_STRUCT_STAT=0;
- GNULIB_MDA_CHMOD=1;
- GNULIB_MDA_MKDIR=1;
- GNULIB_MDA_UMASK=1;
HAVE_FCHMODAT=1;
HAVE_FSTATAT=1;
HAVE_FUTIMENS=1;
@@ -11053,8 +12751,8 @@ _ACEOF
gl_cv_absolute_sys_stat_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
sed -n "$gl_absolute_header_sed"`
- gl_header=$gl_cv_absolute_sys_stat_h
- gl_cv_next_sys_stat_h='"'$gl_header'"'
+ gl_header=$gl_cv_absolute_sys_stat_h
+ gl_cv_next_sys_stat_h='"'$gl_header'"'
else
gl_cv_next_sys_stat_h='<'sys/stat.h'>'
fi
@@ -11132,6 +12830,88 @@ done
+
+
+ GL_GNULIB_FCHMODAT=0
+
+
+
+ GL_GNULIB_FSTAT=0
+
+
+
+ GL_GNULIB_FSTATAT=0
+
+
+
+ GL_GNULIB_FUTIMENS=0
+
+
+
+ GL_GNULIB_GETUMASK=0
+
+
+
+ GL_GNULIB_LCHMOD=0
+
+
+
+ GL_GNULIB_LSTAT=0
+
+
+
+ GL_GNULIB_MKDIR=0
+
+
+
+ GL_GNULIB_MKDIRAT=0
+
+
+
+ GL_GNULIB_MKFIFO=0
+
+
+
+ GL_GNULIB_MKFIFOAT=0
+
+
+
+ GL_GNULIB_MKNOD=0
+
+
+
+ GL_GNULIB_MKNODAT=0
+
+
+
+ GL_GNULIB_STAT=0
+
+
+
+ GL_GNULIB_UTIMENSAT=0
+
+
+
+ GL_GNULIB_OVERRIDES_STRUCT_STAT=0
+
+
+
+ GL_GNULIB_MDA_CHMOD=1
+
+
+
+ GL_GNULIB_MDA_MKDIR=1
+
+
+
+ GL_GNULIB_MDA_UMASK=1
+
+
+
+
+
+
+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether getcwd (NULL, 0) allocates memory for result" >&5
$as_echo_n "checking whether getcwd (NULL, 0) allocates memory for result... " >&6; }
if ${gl_cv_func_getcwd_null+:} false; then :
@@ -11258,65 +13038,6 @@ cat >>confdefs.h <<_ACEOF
_ACEOF
- GNULIB_DPRINTF=0;
- GNULIB_FCLOSE=0;
- GNULIB_FDOPEN=0;
- GNULIB_FFLUSH=0;
- GNULIB_FGETC=0;
- GNULIB_FGETS=0;
- GNULIB_FOPEN=0;
- GNULIB_FPRINTF=0;
- GNULIB_FPRINTF_POSIX=0;
- GNULIB_FPURGE=0;
- GNULIB_FPUTC=0;
- GNULIB_FPUTS=0;
- GNULIB_FREAD=0;
- GNULIB_FREOPEN=0;
- GNULIB_FSCANF=0;
- GNULIB_FSEEK=0;
- GNULIB_FSEEKO=0;
- GNULIB_FTELL=0;
- GNULIB_FTELLO=0;
- GNULIB_FWRITE=0;
- GNULIB_GETC=0;
- GNULIB_GETCHAR=0;
- GNULIB_GETDELIM=0;
- GNULIB_GETLINE=0;
- GNULIB_OBSTACK_PRINTF=0;
- GNULIB_OBSTACK_PRINTF_POSIX=0;
- GNULIB_PCLOSE=0;
- GNULIB_PERROR=0;
- GNULIB_POPEN=0;
- GNULIB_PRINTF=0;
- GNULIB_PRINTF_POSIX=0;
- GNULIB_PUTC=0;
- GNULIB_PUTCHAR=0;
- GNULIB_PUTS=0;
- GNULIB_REMOVE=0;
- GNULIB_RENAME=0;
- GNULIB_RENAMEAT=0;
- GNULIB_SCANF=0;
- GNULIB_SNPRINTF=0;
- GNULIB_SPRINTF_POSIX=0;
- GNULIB_STDIO_H_NONBLOCKING=0;
- GNULIB_STDIO_H_SIGPIPE=0;
- GNULIB_TMPFILE=0;
- GNULIB_VASPRINTF=0;
- GNULIB_VFSCANF=0;
- GNULIB_VSCANF=0;
- GNULIB_VDPRINTF=0;
- GNULIB_VFPRINTF=0;
- GNULIB_VFPRINTF_POSIX=0;
- GNULIB_VPRINTF=0;
- GNULIB_VPRINTF_POSIX=0;
- GNULIB_VSNPRINTF=0;
- GNULIB_VSPRINTF_POSIX=0;
- GNULIB_MDA_FCLOSEALL=1;
- GNULIB_MDA_FDOPEN=1;
- GNULIB_MDA_FILENO=1;
- GNULIB_MDA_GETW=1;
- GNULIB_MDA_PUTW=1;
- GNULIB_MDA_TEMPNAM=1;
HAVE_DECL_FCLOSEALL=1;
HAVE_DECL_FPURGE=1;
HAVE_DECL_FSEEKO=1;
@@ -11339,6 +13060,7 @@ _ACEOF
REPLACE_FDOPEN=0;
REPLACE_FFLUSH=0;
REPLACE_FOPEN=0;
+ REPLACE_FOPEN_FOR_FOPEN_GNU=0;
REPLACE_FPRINTF=0;
REPLACE_FPURGE=0;
REPLACE_FREOPEN=0;
@@ -11382,6 +13104,248 @@ _ACEOF
+ GL_GNULIB_DPRINTF=0
+
+
+
+ GL_GNULIB_FCLOSE=0
+
+
+
+ GL_GNULIB_FDOPEN=0
+
+
+
+ GL_GNULIB_FFLUSH=0
+
+
+
+ GL_GNULIB_FGETC=0
+
+
+
+ GL_GNULIB_FGETS=0
+
+
+
+ GL_GNULIB_FOPEN=0
+
+
+
+ GL_GNULIB_FOPEN_GNU=0
+
+
+
+ GL_GNULIB_FPRINTF=0
+
+
+
+ GL_GNULIB_FPRINTF_POSIX=0
+
+
+
+ GL_GNULIB_FPURGE=0
+
+
+
+ GL_GNULIB_FPUTC=0
+
+
+
+ GL_GNULIB_FPUTS=0
+
+
+
+ GL_GNULIB_FREAD=0
+
+
+
+ GL_GNULIB_FREOPEN=0
+
+
+
+ GL_GNULIB_FSCANF=0
+
+
+
+ GL_GNULIB_FSEEK=0
+
+
+
+ GL_GNULIB_FSEEKO=0
+
+
+
+ GL_GNULIB_FTELL=0
+
+
+
+ GL_GNULIB_FTELLO=0
+
+
+
+ GL_GNULIB_FWRITE=0
+
+
+
+ GL_GNULIB_GETC=0
+
+
+
+ GL_GNULIB_GETCHAR=0
+
+
+
+ GL_GNULIB_GETDELIM=0
+
+
+
+ GL_GNULIB_GETLINE=0
+
+
+
+ GL_GNULIB_OBSTACK_PRINTF=0
+
+
+
+ GL_GNULIB_OBSTACK_PRINTF_POSIX=0
+
+
+
+ GL_GNULIB_PCLOSE=0
+
+
+
+ GL_GNULIB_PERROR=0
+
+
+
+ GL_GNULIB_POPEN=0
+
+
+
+ GL_GNULIB_PRINTF=0
+
+
+
+ GL_GNULIB_PRINTF_POSIX=0
+
+
+
+ GL_GNULIB_PUTC=0
+
+
+
+ GL_GNULIB_PUTCHAR=0
+
+
+
+ GL_GNULIB_PUTS=0
+
+
+
+ GL_GNULIB_REMOVE=0
+
+
+
+ GL_GNULIB_RENAME=0
+
+
+
+ GL_GNULIB_RENAMEAT=0
+
+
+
+ GL_GNULIB_SCANF=0
+
+
+
+ GL_GNULIB_SNPRINTF=0
+
+
+
+ GL_GNULIB_SPRINTF_POSIX=0
+
+
+
+ GL_GNULIB_STDIO_H_NONBLOCKING=0
+
+
+
+ GL_GNULIB_STDIO_H_SIGPIPE=0
+
+
+
+ GL_GNULIB_TMPFILE=0
+
+
+
+ GL_GNULIB_VASPRINTF=0
+
+
+
+ GL_GNULIB_VFSCANF=0
+
+
+
+ GL_GNULIB_VSCANF=0
+
+
+
+ GL_GNULIB_VDPRINTF=0
+
+
+
+ GL_GNULIB_VFPRINTF=0
+
+
+
+ GL_GNULIB_VFPRINTF_POSIX=0
+
+
+
+ GL_GNULIB_VPRINTF=0
+
+
+
+ GL_GNULIB_VPRINTF_POSIX=0
+
+
+
+ GL_GNULIB_VSNPRINTF=0
+
+
+
+ GL_GNULIB_VSPRINTF_POSIX=0
+
+
+
+ GL_GNULIB_MDA_FCLOSEALL=1
+
+
+
+ GL_GNULIB_MDA_FDOPEN=1
+
+
+
+ GL_GNULIB_MDA_FILENO=1
+
+
+
+ GL_GNULIB_MDA_GETW=1
+
+
+
+ GL_GNULIB_MDA_PUTW=1
+
+
+
+ GL_GNULIB_MDA_TEMPNAM=1
+
+
+
+
+
ac_fn_c_check_decl "$LINENO" "getdtablesize" "ac_cv_have_decl_getdtablesize" "$ac_includes_default"
if test "x$ac_cv_have_decl_getdtablesize" = xyes; then :
ac_have_decl=1
@@ -11443,14 +13407,18 @@ _ACEOF
- GNULIB_GETRANDOM=0;
HAVE_GETRANDOM=1;
REPLACE_GETRANDOM=0;
- GNULIB_GETTIMEOFDAY=0;
+
+ GL_GNULIB_GETRANDOM=0
+
+
+
+
HAVE_GETTIMEOFDAY=1;
HAVE_STRUCT_TIMEVAL=1;
HAVE_SYS_TIME_H=1;
@@ -11516,8 +13484,8 @@ _ACEOF
gl_cv_absolute_sys_time_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
sed -n "$gl_absolute_header_sed"`
- gl_header=$gl_cv_absolute_sys_time_h
- gl_cv_next_sys_time_h='"'$gl_header'"'
+ gl_header=$gl_cv_absolute_sys_time_h
+ gl_cv_next_sys_time_h='"'$gl_header'"'
else
gl_cv_next_sys_time_h='<'sys/time.h'>'
fi
@@ -11659,9 +13627,11 @@ $as_echo "$gl_cv_sys_struct_timeval_tv_sec" >&6; }
+ GL_GNULIB_GETTIMEOFDAY=0
+
+
- GNULIB_GLOB=0;
HAVE_GLOB=1;
HAVE_GLOB_PATTERN_P=1;
REPLACE_GLOB=0;
@@ -11727,8 +13697,8 @@ _ACEOF
gl_cv_absolute_glob_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
sed -n "$gl_absolute_header_sed"`
- gl_header=$gl_cv_absolute_glob_h
- gl_cv_next_glob_h='"'$gl_header'"'
+ gl_header=$gl_cv_absolute_glob_h
+ gl_cv_next_glob_h='"'$gl_header'"'
else
gl_cv_next_glob_h='<'glob.h'>'
fi
@@ -11760,23 +13730,16 @@ $as_echo "$gl_cv_next_glob_h" >&6; }
fi
- GLOB_H=''
+ GL_GENERATE_GLOB_H=false
if false; then
- GLOB_H=glob.h
+ GL_GENERATE_GLOB_H=true
else
if test $ac_cv_header_glob_h != yes; then
- GLOB_H=glob.h
+ GL_GENERATE_GLOB_H=true
fi
fi
- if test -n "$GLOB_H"; then
- GL_GENERATE_GLOB_H_TRUE=
- GL_GENERATE_GLOB_H_FALSE='#'
-else
- GL_GENERATE_GLOB_H_TRUE='#'
- GL_GENERATE_GLOB_H_FALSE=
-fi
@@ -11787,6 +13750,10 @@ fi
+ GL_GNULIB_GLOB=0
+
+
+
@@ -11846,6 +13813,33 @@ rm -f core conftest.err conftest.$ac_objext \
LIBS=$save_LIBS
test $gl_pthread_api = yes && break
done
+ echo "$as_me:13816: gl_pthread_api=$gl_pthread_api" >&5
+ echo "$as_me:13817: LIBPTHREAD=$LIBPTHREAD" >&5
+
+ gl_pthread_in_glibc=no
+ # On Linux with glibc >= 2.34, libc contains the fully functional
+ # pthread functions.
+ case "$host_os" in
+ linux*)
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <features.h>
+ #ifdef __GNU_LIBRARY__
+ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 34) || (__GLIBC__ > 2)
+ Lucky user
+ #endif
+ #endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "Lucky user" >/dev/null 2>&1; then :
+ gl_pthread_in_glibc=yes
+fi
+rm -f conftest*
+
+ ;;
+ esac
+ echo "$as_me:13842: gl_pthread_in_glibc=$gl_pthread_in_glibc" >&5
# Test for libpthread by looking for pthread_kill. (Not pthread_self,
# since it is defined as a macro on OSF/1.)
@@ -11889,19 +13883,23 @@ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_kill" >&5
$as_echo "$ac_cv_lib_pthread_pthread_kill" >&6; }
if test "x$ac_cv_lib_pthread_pthread_kill" = xyes; then :
- LIBPMULTITHREAD=-lpthread
- # On Solaris and HP-UX, most pthread functions exist also in libc.
- # Therefore pthread_in_use() needs to actually try to create a
- # thread: pthread_create from libc will fail, whereas
- # pthread_create will actually create a thread.
- # On Solaris 10 or newer, this test is no longer needed, because
- # libc contains the fully functional pthread functions.
- case "$host_os" in
- solaris | solaris2.1-9 | solaris2.1-9.* | hpux*)
+ if test $gl_pthread_in_glibc = yes; then
+ LIBPMULTITHREAD=
+ else
+ LIBPMULTITHREAD=-lpthread
+ # On Solaris and HP-UX, most pthread functions exist also in libc.
+ # Therefore pthread_in_use() needs to actually try to create a
+ # thread: pthread_create from libc will fail, whereas
+ # pthread_create will actually create a thread.
+ # On Solaris 10 or newer, this test is no longer needed, because
+ # libc contains the fully functional pthread functions.
+ case "$host_os" in
+ solaris | solaris2.1-9 | solaris2.1-9.* | hpux*)
$as_echo "#define PTHREAD_IN_USE_DETECTION_HARD 1" >>confdefs.h
- esac
+ esac
+ fi
fi
@@ -11995,6 +13993,7 @@ fi
fi
fi
+ echo "$as_me:13996: LIBPMULTITHREAD=$LIBPMULTITHREAD" >&5
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether POSIX threads API is available" >&5
$as_echo_n "checking whether POSIX threads API is available... " >&6; }
@@ -12128,7 +14127,7 @@ if ${gl_cv_func_setlocale_null_all_mtsafe+:} false; then :
else
case "$host_os" in
# Guess no on musl libc, macOS, FreeBSD, NetBSD, OpenBSD, AIX, Haiku, Cygwin.
- *-musl* | darwin* | freebsd* | netbsd* | openbsd* | aix* | haiku* | cygwin*)
+ *-musl* | darwin* | freebsd* | midnightbsd* | netbsd* | openbsd* | aix* | haiku* | cygwin*)
gl_cv_func_setlocale_null_all_mtsafe=no ;;
# Guess yes on glibc, HP-UX, IRIX, Solaris, native Windows.
*-gnu* | gnu* | hpux* | irix* | solaris* | mingw*)
@@ -12169,7 +14168,7 @@ else
openbsd* | aix*)
gl_cv_func_setlocale_null_one_mtsafe=no ;;
# Guess yes on glibc, musl libc, macOS, FreeBSD, NetBSD, HP-UX, IRIX, Solaris, Haiku, Cygwin, native Windows.
- *-gnu* | gnu* | *-musl* | darwin* | freebsd* | netbsd* | hpux* | irix* | solaris* | haiku* | cygwin* | mingw*)
+ *-gnu* | gnu* | *-musl* | darwin* | freebsd* | midnightbsd* | netbsd* | hpux* | irix* | solaris* | haiku* | cygwin* | mingw*)
gl_cv_func_setlocale_null_one_mtsafe=yes ;;
# If we don't know, obey --enable-cross-guesses.
*)
@@ -12208,8 +14207,13 @@ $as_echo_n "checking whether imported symbols can be declared weak... " >&6; }
if ${gl_cv_have_weak+:} false; then :
$as_echo_n "(cached) " >&6
else
- gl_cv_have_weak=no
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ case "$host_os" in
+ cygwin*)
+ gl_cv_have_weak="guessing no"
+ ;;
+ *)
+ gl_cv_have_weak=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
extern void xyzzy ();
#pragma weak xyzzy
@@ -12226,13 +14230,13 @@ if ac_fn_c_try_link "$LINENO"; then :
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
- if test $gl_cv_have_weak = maybe; then
- if test "$cross_compiling" = yes; then :
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ if test $gl_cv_have_weak = maybe; then
+ if test "$cross_compiling" = yes; then :
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#ifdef __ELF__
- Extensible Linking Format
- #endif
+ Extensible Linking Format
+ #endif
_ACEOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
@@ -12264,14 +14268,16 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
- fi
+ fi
+ ;;
+ esac
case " $LDFLAGS " in
*" -static "*) gl_cv_have_weak=no ;;
esac
case "$gl_cv_have_weak" in
*yes)
case "$host_os" in
- freebsd* | dragonfly*)
+ freebsd* | dragonfly* | midnightbsd*)
: > conftest1.c
$CC $CPPFLAGS $CFLAGS $LDFLAGS -fPIC -shared -o libempty.so conftest1.c -lpthread >&5 2>&1
cat <<EOF > conftest2.c
@@ -12461,8 +14467,8 @@ _ACEOF
gl_cv_absolute_limits_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
sed -n "$gl_absolute_header_sed"`
- gl_header=$gl_cv_absolute_limits_h
- gl_cv_next_limits_h='"'$gl_header'"'
+ gl_header=$gl_cv_absolute_limits_h
+ gl_cv_next_limits_h='"'$gl_header'"'
else
gl_cv_next_limits_h='<'limits.h'>'
fi
@@ -12487,8 +14493,8 @@ $as_echo "$gl_cv_next_limits_h" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether limits.h has LLONG_MAX, WORD_BIT, ULLONG_WIDTH etc." >&5
-$as_echo_n "checking whether limits.h has LLONG_MAX, WORD_BIT, ULLONG_WIDTH etc.... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether limits.h has WORD_BIT, BOOL_WIDTH etc." >&5
+$as_echo_n "checking whether limits.h has WORD_BIT, BOOL_WIDTH etc.... " >&6; }
if ${gl_cv_header_limits_width+:} false; then :
$as_echo_n "(cached) " >&6
else
@@ -12501,6 +14507,7 @@ else
long long llm = LLONG_MAX;
int wb = WORD_BIT;
int ullw = ULLONG_WIDTH;
+ int bw = BOOL_WIDTH;
int
main ()
@@ -12520,20 +14527,11 @@ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_limits_width" >&5
$as_echo "$gl_cv_header_limits_width" >&6; }
if test "$gl_cv_header_limits_width" = yes; then
- LIMITS_H=
+ GL_GENERATE_LIMITS_H=false
else
- LIMITS_H=limits.h
+ GL_GENERATE_LIMITS_H=true
fi
- if test -n "$LIMITS_H"; then
- GL_GENERATE_LIMITS_H_TRUE=
- GL_GENERATE_LIMITS_H_FALSE='#'
-else
- GL_GENERATE_LIMITS_H_TRUE='#'
- GL_GENERATE_LIMITS_H_FALSE=
-fi
-
-
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for wint_t" >&5
$as_echo_n "checking for wint_t... " >&6; }
@@ -12594,12 +14592,12 @@ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_wint_t_large_enough" >&5
$as_echo "$gl_cv_type_wint_t_large_enough" >&6; }
if test $gl_cv_type_wint_t_large_enough = no; then
- GNULIB_OVERRIDES_WINT_T=1
+ GNULIBHEADERS_OVERRIDE_WINT_T=1
else
- GNULIB_OVERRIDES_WINT_T=0
+ GNULIBHEADERS_OVERRIDE_WINT_T=0
fi
else
- GNULIB_OVERRIDES_WINT_T=0
+ GNULIBHEADERS_OVERRIDE_WINT_T=0
fi
@@ -12749,8 +14747,8 @@ _ACEOF
gl_cv_absolute_stdint_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
sed -n "$gl_absolute_header_sed"`
- gl_header=$gl_cv_absolute_stdint_h
- gl_cv_next_stdint_h='"'$gl_header'"'
+ gl_header=$gl_cv_absolute_stdint_h
+ gl_cv_next_stdint_h='"'$gl_header'"'
else
gl_cv_next_stdint_h='<'stdint.h'>'
fi
@@ -12902,7 +14900,7 @@ struct s {
PTRDIFF_MIN == TYPE_MINIMUM (ptrdiff_t)
&& PTRDIFF_MAX == TYPE_MAXIMUM (ptrdiff_t)
? 1 : -1;
- /* Detect bug in FreeBSD 6.0 / ia64. */
+ /* Detect bug in FreeBSD 6.0/ia64 and FreeBSD 13.0/arm64. */
int check_SIG_ATOMIC:
SIG_ATOMIC_MIN == TYPE_MINIMUM (sig_atomic_t)
&& SIG_ATOMIC_MAX == TYPE_MAXIMUM (sig_atomic_t)
@@ -13060,7 +15058,7 @@ $as_echo "$gl_cv_header_working_stdint_h" >&6; }
HAVE_C99_STDINT_H=0
HAVE_SYS_BITYPES_H=0
HAVE_SYS_INTTYPES_H=0
- STDINT_H=stdint.h
+ GL_GENERATE_STDINT_H=true
case "$gl_cv_header_working_stdint_h" in
*yes)
HAVE_C99_STDINT_H=1
@@ -13153,7 +15151,7 @@ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_stdint_width" >&5
$as_echo "$gl_cv_header_stdint_width" >&6; }
if test "$gl_cv_header_stdint_width" = yes; then
- STDINT_H=
+ GL_GENERATE_STDINT_H=false
fi
;;
*)
@@ -13451,7 +15449,7 @@ _ACEOF
- if test $GNULIB_OVERRIDES_WINT_T = 1; then
+ if test $GNULIBHEADERS_OVERRIDE_WINT_T = 1; then
BITSIZEOF_WINT_T=32
fi
@@ -13460,35 +15458,14 @@ _ACEOF
- LIMITS_H='limits.h'
- if test -n "$LIMITS_H"; then
- GL_GENERATE_LIMITS_H_TRUE=
- GL_GENERATE_LIMITS_H_FALSE='#'
-else
- GL_GENERATE_LIMITS_H_TRUE='#'
- GL_GENERATE_LIMITS_H_FALSE=
-fi
-
-
-
+ GL_GENERATE_LIMITS_H=true
- if test -n "$STDINT_H"; then
- GL_GENERATE_STDINT_H_TRUE=
- GL_GENERATE_STDINT_H_FALSE='#'
-else
- GL_GENERATE_STDINT_H_TRUE='#'
- GL_GENERATE_STDINT_H_FALSE=
-fi
- GNULIB_IMAXABS=0;
- GNULIB_IMAXDIV=0;
- GNULIB_STRTOIMAX=0;
- GNULIB_STRTOUMAX=0;
HAVE_DECL_IMAXABS=1;
HAVE_DECL_IMAXDIV=1;
HAVE_DECL_STRTOIMAX=1;
@@ -13560,8 +15537,8 @@ _ACEOF
gl_cv_absolute_inttypes_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
sed -n "$gl_absolute_header_sed"`
- gl_header=$gl_cv_absolute_inttypes_h
- gl_cv_next_inttypes_h='"'$gl_header'"'
+ gl_header=$gl_cv_absolute_inttypes_h
+ gl_cv_next_inttypes_h='"'$gl_header'"'
else
gl_cv_next_inttypes_h='<'inttypes.h'>'
fi
@@ -13597,6 +15574,287 @@ $as_echo "$gl_cv_next_inttypes_h" >&6; }
+ PRIPTR_PREFIX=
+ if $GL_GENERATE_STDINT_H; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #ifdef _WIN64
+ LLP64
+ #endif
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ PRIPTR_PREFIX='"l"'
+else
+ PRIPTR_PREFIX='"ll"'
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ else
+ for glpfx in '' l ll I64; do
+ case $glpfx in
+ '') gltype1='int';;
+ l) gltype1='long int';;
+ ll) gltype1='long long int';;
+ I64) gltype1='__int64';;
+ esac
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdint.h>
+ extern intptr_t foo;
+ extern $gltype1 foo;
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ PRIPTR_PREFIX='"'$glpfx'"'
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ test -n "$PRIPTR_PREFIX" && break
+ done
+ fi
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether INT32_MAX < INTMAX_MAX" >&5
+$as_echo_n "checking whether INT32_MAX < INTMAX_MAX... " >&6; }
+if ${gl_cv_test_INT32_MAX_LT_INTMAX_MAX+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+/* Work also in C++ mode. */
+ #define __STDC_LIMIT_MACROS 1
+
+ /* Work if build is not clean. */
+ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H
+
+ #include <limits.h>
+ #if HAVE_STDINT_H
+ #include <stdint.h>
+ #endif
+
+ #if defined INT32_MAX && defined INTMAX_MAX
+ #define CONDITION (INT32_MAX < INTMAX_MAX)
+ #else
+ #define CONDITION (sizeof (int) < sizeof (long long int))
+ #endif
+ int test[CONDITION ? 1 : -1];
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ gl_cv_test_INT32_MAX_LT_INTMAX_MAX=yes
+else
+ gl_cv_test_INT32_MAX_LT_INTMAX_MAX=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_test_INT32_MAX_LT_INTMAX_MAX" >&5
+$as_echo "$gl_cv_test_INT32_MAX_LT_INTMAX_MAX" >&6; }
+ if test $gl_cv_test_INT32_MAX_LT_INTMAX_MAX = yes; then
+ INT32_MAX_LT_INTMAX_MAX=1;
+ else
+ INT32_MAX_LT_INTMAX_MAX=0;
+ fi
+
+
+ if test $APPLE_UNIVERSAL_BUILD = 0; then
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether INT64_MAX == LONG_MAX" >&5
+$as_echo_n "checking whether INT64_MAX == LONG_MAX... " >&6; }
+if ${gl_cv_test_INT64_MAX_EQ_LONG_MAX+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+/* Work also in C++ mode. */
+ #define __STDC_LIMIT_MACROS 1
+
+ /* Work if build is not clean. */
+ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H
+
+ #include <limits.h>
+ #if HAVE_STDINT_H
+ #include <stdint.h>
+ #endif
+
+ #if defined INT64_MAX
+ #define CONDITION (INT64_MAX == LONG_MAX)
+ #else
+ #define CONDITION (sizeof (long long int) == sizeof (long int))
+ #endif
+ int test[CONDITION ? 1 : -1];
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ gl_cv_test_INT64_MAX_EQ_LONG_MAX=yes
+else
+ gl_cv_test_INT64_MAX_EQ_LONG_MAX=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_test_INT64_MAX_EQ_LONG_MAX" >&5
+$as_echo "$gl_cv_test_INT64_MAX_EQ_LONG_MAX" >&6; }
+ if test $gl_cv_test_INT64_MAX_EQ_LONG_MAX = yes; then
+ INT64_MAX_EQ_LONG_MAX=1;
+ else
+ INT64_MAX_EQ_LONG_MAX=0;
+ fi
+
+
+ else
+ INT64_MAX_EQ_LONG_MAX=-1
+ fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether UINT32_MAX < UINTMAX_MAX" >&5
+$as_echo_n "checking whether UINT32_MAX < UINTMAX_MAX... " >&6; }
+if ${gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+/* Work also in C++ mode. */
+ #define __STDC_LIMIT_MACROS 1
+
+ /* Work if build is not clean. */
+ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H
+
+ #include <limits.h>
+ #if HAVE_STDINT_H
+ #include <stdint.h>
+ #endif
+
+ #if defined UINT32_MAX && defined UINTMAX_MAX
+ #define CONDITION (UINT32_MAX < UINTMAX_MAX)
+ #else
+ #define CONDITION (sizeof (unsigned int) < sizeof (unsigned long long int))
+ #endif
+ int test[CONDITION ? 1 : -1];
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX=yes
+else
+ gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX" >&5
+$as_echo "$gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX" >&6; }
+ if test $gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX = yes; then
+ UINT32_MAX_LT_UINTMAX_MAX=1;
+ else
+ UINT32_MAX_LT_UINTMAX_MAX=0;
+ fi
+
+
+ if test $APPLE_UNIVERSAL_BUILD = 0; then
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether UINT64_MAX == ULONG_MAX" >&5
+$as_echo_n "checking whether UINT64_MAX == ULONG_MAX... " >&6; }
+if ${gl_cv_test_UINT64_MAX_EQ_ULONG_MAX+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+/* Work also in C++ mode. */
+ #define __STDC_LIMIT_MACROS 1
+
+ /* Work if build is not clean. */
+ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H
+
+ #include <limits.h>
+ #if HAVE_STDINT_H
+ #include <stdint.h>
+ #endif
+
+ #if defined UINT64_MAX
+ #define CONDITION (UINT64_MAX == ULONG_MAX)
+ #else
+ #define CONDITION (sizeof (unsigned long long int) == sizeof (unsigned long int))
+ #endif
+ int test[CONDITION ? 1 : -1];
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ gl_cv_test_UINT64_MAX_EQ_ULONG_MAX=yes
+else
+ gl_cv_test_UINT64_MAX_EQ_ULONG_MAX=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_test_UINT64_MAX_EQ_ULONG_MAX" >&5
+$as_echo "$gl_cv_test_UINT64_MAX_EQ_ULONG_MAX" >&6; }
+ if test $gl_cv_test_UINT64_MAX_EQ_ULONG_MAX = yes; then
+ UINT64_MAX_EQ_ULONG_MAX=1;
+ else
+ UINT64_MAX_EQ_ULONG_MAX=0;
+ fi
+
+
+ else
+ UINT64_MAX_EQ_ULONG_MAX=-1
+ fi
+
+
+
+
+ GL_GNULIB_IMAXABS=0
+
+
+
+ GL_GNULIB_IMAXDIV=0
+
+
+
+ GL_GNULIB_STRTOIMAX=0
+
+
+
+ GL_GNULIB_STRTOUMAX=0
+
+
+
+
+
+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the exponent in a 'double'" >&5
$as_echo_n "checking where to find the exponent in a 'double'... " >&6; }
if ${gl_cv_cc_double_expbit0+:} false; then :
@@ -14169,11 +16427,6 @@ $as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h
- GNULIB_LOCALECONV=0;
- GNULIB_SETLOCALE=0;
- GNULIB_SETLOCALE_NULL=0;
- GNULIB_DUPLOCALE=0;
- GNULIB_LOCALENAME=0;
HAVE_NEWLOCALE=1;
HAVE_DUPLOCALE=1;
HAVE_FREELOCALE=1;
@@ -14183,6 +16436,7 @@ $as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h
REPLACE_DUPLOCALE=0;
REPLACE_FREELOCALE=0;
REPLACE_STRUCT_LCONV=0;
+ LOCALENAME_ENHANCE_LOCALE_FUNCS=0;
REPLACE_NULL=0;
@@ -14228,7 +16482,7 @@ $as_echo "#define HAVE_WCHAR_T 1" >>confdefs.h
- STDDEF_H=
+ GL_GENERATE_STDDEF_H=false
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for good max_align_t" >&5
$as_echo_n "checking for good max_align_t... " >&6; }
@@ -14271,12 +16525,12 @@ fi
$as_echo "$gl_cv_type_max_align_t" >&6; }
if test $gl_cv_type_max_align_t = no; then
HAVE_MAX_ALIGN_T=0
- STDDEF_H=stddef.h
+ GL_GENERATE_STDDEF_H=true
fi
if test $gt_cv_c_wchar_t = no; then
HAVE_WCHAR_T=0
- STDDEF_H=stddef.h
+ GL_GENERATE_STDDEF_H=true
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NULL can be used in arbitrary expressions" >&5
@@ -14308,19 +16562,10 @@ fi
$as_echo "$gl_cv_decl_null_works" >&6; }
if test $gl_cv_decl_null_works = no; then
REPLACE_NULL=1
- STDDEF_H=stddef.h
+ GL_GENERATE_STDDEF_H=true
fi
-
- if test -n "$STDDEF_H"; then
- GL_GENERATE_STDDEF_H_TRUE=
- GL_GENERATE_STDDEF_H_FALSE='#'
-else
- GL_GENERATE_STDDEF_H_TRUE='#'
- GL_GENERATE_STDDEF_H_FALSE=
-fi
-
- if test -n "$STDDEF_H"; then
+ if $GL_GENERATE_STDDEF_H; then
@@ -14370,8 +16615,8 @@ _ACEOF
gl_cv_absolute_stddef_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
sed -n "$gl_absolute_header_sed"`
- gl_header=$gl_cv_absolute_stddef_h
- gl_cv_next_stddef_h='"'$gl_header'"'
+ gl_header=$gl_cv_absolute_stddef_h
+ gl_cv_next_stddef_h='"'$gl_header'"'
fi
@@ -14449,6 +16694,203 @@ $as_echo "$gl_cv_header_locale_has_locale_t" >&6; }
+
+
+
+
+
+
+
+
+ case "$host_os" in
+ solaris*)
+
+$as_echo "#define _LCONV_C99 1" >>confdefs.h
+
+ ;;
+ esac
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether locale.h conforms to POSIX:2001" >&5
+$as_echo_n "checking whether locale.h conforms to POSIX:2001... " >&6; }
+if ${gl_cv_header_locale_h_posix2001+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <locale.h>
+ int x = LC_MESSAGES;
+ int y = sizeof (((struct lconv *) 0)->decimal_point);
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ gl_cv_header_locale_h_posix2001=yes
+else
+ gl_cv_header_locale_h_posix2001=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_locale_h_posix2001" >&5
+$as_echo "$gl_cv_header_locale_h_posix2001" >&6; }
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct lconv is properly defined" >&5
+$as_echo_n "checking whether struct lconv is properly defined... " >&6; }
+if ${gl_cv_sys_struct_lconv_ok+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <locale.h>
+ struct lconv l;
+ int x = sizeof (l.decimal_point);
+ int y = sizeof (l.int_p_cs_precedes);
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ gl_cv_sys_struct_lconv_ok=yes
+else
+ gl_cv_sys_struct_lconv_ok=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sys_struct_lconv_ok" >&5
+$as_echo "$gl_cv_sys_struct_lconv_ok" >&6; }
+ if test $gl_cv_sys_struct_lconv_ok = no; then
+ case "$host_os" in
+ mingw*)
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef _MSC_VER
+ Special
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "Special" >/dev/null 2>&1; then :
+
+else
+ REPLACE_STRUCT_LCONV=1
+fi
+rm -f conftest*
+
+ ;;
+ *) REPLACE_STRUCT_LCONV=1 ;;
+ esac
+ fi
+
+
+
+
+
+
+
+
+
+ if test $gl_cv_have_include_next = yes; then
+ gl_cv_next_locale_h='<'locale.h'>'
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <locale.h>" >&5
+$as_echo_n "checking absolute name of <locale.h>... " >&6; }
+if ${gl_cv_next_locale_h+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <locale.h>
+_ACEOF
+ case "$host_os" in
+ aix*) gl_absname_cpp="$ac_cpp -C" ;;
+ *) gl_absname_cpp="$ac_cpp" ;;
+ esac
+
+ case "$host_os" in
+ mingw*)
+ gl_dirsep_regex='[/\\]'
+ ;;
+ *)
+ gl_dirsep_regex='\/'
+ ;;
+ esac
+ gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+ gl_header_literal_regex=`echo 'locale.h' \
+ | sed -e "$gl_make_literal_regex_sed"`
+ gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+ s|^/[^/]|//&|
+ p
+ q
+ }'
+
+ gl_cv_absolute_locale_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+ sed -n "$gl_absolute_header_sed"`
+
+ gl_header=$gl_cv_absolute_locale_h
+ gl_cv_next_locale_h='"'$gl_header'"'
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_locale_h" >&5
+$as_echo "$gl_cv_next_locale_h" >&6; }
+ fi
+ NEXT_LOCALE_H=$gl_cv_next_locale_h
+
+ if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+ gl_next_as_first_directive='<'locale.h'>'
+ else
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+ gl_next_as_first_directive=$gl_cv_next_locale_h
+ fi
+ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H=$gl_next_as_first_directive
+
+
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_LOCALECONV=0
+
+
+
+ GL_GNULIB_SETLOCALE=0
+
+
+
+ GL_GNULIB_SETLOCALE_NULL=0
+
+
+
+ GL_GNULIB_DUPLOCALE=0
+
+
+
+ GL_GNULIB_LOCALENAME=0
+
+
+
+
+
gl_threads_api=none
LIBTHREAD=
LTLIBTHREAD=
@@ -14462,8 +16904,13 @@ $as_echo_n "checking whether imported symbols can be declared weak... " >&6; }
if ${gl_cv_have_weak+:} false; then :
$as_echo_n "(cached) " >&6
else
- gl_cv_have_weak=no
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ case "$host_os" in
+ cygwin*)
+ gl_cv_have_weak="guessing no"
+ ;;
+ *)
+ gl_cv_have_weak=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
extern void xyzzy ();
#pragma weak xyzzy
@@ -14480,13 +16927,13 @@ if ac_fn_c_try_link "$LINENO"; then :
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
- if test $gl_cv_have_weak = maybe; then
- if test "$cross_compiling" = yes; then :
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ if test $gl_cv_have_weak = maybe; then
+ if test "$cross_compiling" = yes; then :
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#ifdef __ELF__
- Extensible Linking Format
- #endif
+ Extensible Linking Format
+ #endif
_ACEOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
@@ -14518,14 +16965,16 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
- fi
+ fi
+ ;;
+ esac
case " $LDFLAGS " in
*" -static "*) gl_cv_have_weak=no ;;
esac
case "$gl_cv_have_weak" in
*yes)
case "$host_os" in
- freebsd* | dragonfly*)
+ freebsd* | dragonfly* | midnightbsd*)
: > conftest1.c
$CC $CPPFLAGS $CFLAGS $LDFLAGS -fPIC -shared -o libempty.so conftest1.c -lpthread >&5 2>&1
cat <<EOF > conftest2.c
@@ -14621,6 +17070,33 @@ rm -f core conftest.err conftest.$ac_objext \
LIBS=$save_LIBS
test $gl_pthread_api = yes && break
done
+ echo "$as_me:17073: gl_pthread_api=$gl_pthread_api" >&5
+ echo "$as_me:17074: LIBPTHREAD=$LIBPTHREAD" >&5
+
+ gl_pthread_in_glibc=no
+ # On Linux with glibc >= 2.34, libc contains the fully functional
+ # pthread functions.
+ case "$host_os" in
+ linux*)
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <features.h>
+ #ifdef __GNU_LIBRARY__
+ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 34) || (__GLIBC__ > 2)
+ Lucky user
+ #endif
+ #endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "Lucky user" >/dev/null 2>&1; then :
+ gl_pthread_in_glibc=yes
+fi
+rm -f conftest*
+
+ ;;
+ esac
+ echo "$as_me:17099: gl_pthread_in_glibc=$gl_pthread_in_glibc" >&5
# Test for libpthread by looking for pthread_kill. (Not pthread_self,
# since it is defined as a macro on OSF/1.)
@@ -14664,19 +17140,23 @@ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_kill" >&5
$as_echo "$ac_cv_lib_pthread_pthread_kill" >&6; }
if test "x$ac_cv_lib_pthread_pthread_kill" = xyes; then :
- LIBPMULTITHREAD=-lpthread
- # On Solaris and HP-UX, most pthread functions exist also in libc.
- # Therefore pthread_in_use() needs to actually try to create a
- # thread: pthread_create from libc will fail, whereas
- # pthread_create will actually create a thread.
- # On Solaris 10 or newer, this test is no longer needed, because
- # libc contains the fully functional pthread functions.
- case "$host_os" in
- solaris | solaris2.1-9 | solaris2.1-9.* | hpux*)
+ if test $gl_pthread_in_glibc = yes; then
+ LIBPMULTITHREAD=
+ else
+ LIBPMULTITHREAD=-lpthread
+ # On Solaris and HP-UX, most pthread functions exist also in libc.
+ # Therefore pthread_in_use() needs to actually try to create a
+ # thread: pthread_create from libc will fail, whereas
+ # pthread_create will actually create a thread.
+ # On Solaris 10 or newer, this test is no longer needed, because
+ # libc contains the fully functional pthread functions.
+ case "$host_os" in
+ solaris | solaris2.1-9 | solaris2.1-9.* | hpux*)
$as_echo "#define PTHREAD_IN_USE_DETECTION_HARD 1" >>confdefs.h
- esac
+ esac
+ fi
fi
@@ -14770,6 +17250,7 @@ fi
fi
fi
+ echo "$as_me:17253: LIBPMULTITHREAD=$LIBPMULTITHREAD" >&5
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether POSIX threads API is available" >&5
$as_echo_n "checking whether POSIX threads API is available... " >&6; }
@@ -14902,7 +17383,11 @@ $as_echo "#define USE_ISOC_AND_POSIX_THREADS 1" >>confdefs.h
$as_echo "#define USE_POSIX_THREADS 1" >>confdefs.h
- if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then
+ if test -z "$LIBMULTITHREAD" && test -z "$LTLIBMULTITHREAD"; then
+
+$as_echo "#define USE_POSIX_THREADS_FROM_LIBC 1" >>confdefs.h
+
+ else
if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then
$as_echo "#define USE_POSIX_THREADS_WEAK 1" >>confdefs.h
@@ -14910,7 +17395,7 @@ $as_echo "#define USE_POSIX_THREADS_WEAK 1" >>confdefs.h
LIBTHREAD= LTLIBTHREAD=
else
case "$host_os" in
- freebsd* | dragonfly*)
+ freebsd* | dragonfly* | midnightbsd*)
if test "x$LIBTHREAD" != "x$LIBMULTITHREAD"; then
$as_echo "#define PTHREAD_IN_USE_DETECTION_HARD 1" >>confdefs.h
@@ -14991,6 +17476,33 @@ rm -f core conftest.err conftest.$ac_objext \
LIBS=$save_LIBS
test $gl_pthread_api = yes && break
done
+ echo "$as_me:17479: gl_pthread_api=$gl_pthread_api" >&5
+ echo "$as_me:17480: LIBPTHREAD=$LIBPTHREAD" >&5
+
+ gl_pthread_in_glibc=no
+ # On Linux with glibc >= 2.34, libc contains the fully functional
+ # pthread functions.
+ case "$host_os" in
+ linux*)
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <features.h>
+ #ifdef __GNU_LIBRARY__
+ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 34) || (__GLIBC__ > 2)
+ Lucky user
+ #endif
+ #endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "Lucky user" >/dev/null 2>&1; then :
+ gl_pthread_in_glibc=yes
+fi
+rm -f conftest*
+
+ ;;
+ esac
+ echo "$as_me:17505: gl_pthread_in_glibc=$gl_pthread_in_glibc" >&5
# Test for libpthread by looking for pthread_kill. (Not pthread_self,
# since it is defined as a macro on OSF/1.)
@@ -15034,19 +17546,23 @@ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_kill" >&5
$as_echo "$ac_cv_lib_pthread_pthread_kill" >&6; }
if test "x$ac_cv_lib_pthread_pthread_kill" = xyes; then :
- LIBPMULTITHREAD=-lpthread
- # On Solaris and HP-UX, most pthread functions exist also in libc.
- # Therefore pthread_in_use() needs to actually try to create a
- # thread: pthread_create from libc will fail, whereas
- # pthread_create will actually create a thread.
- # On Solaris 10 or newer, this test is no longer needed, because
- # libc contains the fully functional pthread functions.
- case "$host_os" in
- solaris | solaris2.1-9 | solaris2.1-9.* | hpux*)
+ if test $gl_pthread_in_glibc = yes; then
+ LIBPMULTITHREAD=
+ else
+ LIBPMULTITHREAD=-lpthread
+ # On Solaris and HP-UX, most pthread functions exist also in libc.
+ # Therefore pthread_in_use() needs to actually try to create a
+ # thread: pthread_create from libc will fail, whereas
+ # pthread_create will actually create a thread.
+ # On Solaris 10 or newer, this test is no longer needed, because
+ # libc contains the fully functional pthread functions.
+ case "$host_os" in
+ solaris | solaris2.1-9 | solaris2.1-9.* | hpux*)
$as_echo "#define PTHREAD_IN_USE_DETECTION_HARD 1" >>confdefs.h
- esac
+ esac
+ fi
fi
@@ -15140,6 +17656,7 @@ fi
fi
fi
+ echo "$as_me:17659: LIBPMULTITHREAD=$LIBPMULTITHREAD" >&5
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether POSIX threads API is available" >&5
$as_echo_n "checking whether POSIX threads API is available... " >&6; }
@@ -15259,7 +17776,7 @@ rm -f core conftest.err conftest.$ac_objext \
fi
if test $ac_cv_header_threads_h = yes; then
- for ac_func in thrd_create
+ for ac_func in thrd_create
do :
ac_fn_c_check_func "$LINENO" "thrd_create" "ac_cv_func_thrd_create"
if test "x$ac_cv_func_thrd_create" = xyes; then :
@@ -15373,51 +17890,105 @@ $as_echo "$gl_threads_api" >&6; }
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether malloc, realloc, calloc are POSIX compliant" >&5
-$as_echo_n "checking whether malloc, realloc, calloc are POSIX compliant... " >&6; }
-if ${gl_cv_func_malloc_posix+:} false; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether malloc is ptrdiff_t safe" >&5
+$as_echo_n "checking whether malloc is ptrdiff_t safe... " >&6; }
+if ${gl_cv_malloc_ptrdiff+:} false; then :
$as_echo_n "(cached) " >&6
else
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
+#include <stdint.h>
int
main ()
{
-#if defined _WIN32 && ! defined __CYGWIN__
- choke me
- #endif
+/* 64-bit ptrdiff_t is so wide that no practical platform
+ can exceed it. */
+ #define WIDE_PTRDIFF (PTRDIFF_MAX >> 31 >> 31 != 0)
+
+ /* On rare machines where size_t fits in ptrdiff_t there
+ is no problem. */
+ #define NARROW_SIZE (SIZE_MAX <= PTRDIFF_MAX)
+
+ /* glibc 2.30 and later malloc refuses to exceed ptrdiff_t
+ bounds even on 32-bit platforms. We don't know which
+ non-glibc systems are safe. */
+ #define KNOWN_SAFE (2 < __GLIBC__ + (30 <= __GLIBC_MINOR__))
+
+ #if WIDE_PTRDIFF || NARROW_SIZE || KNOWN_SAFE
+ return 0;
+ #else
+ #error "malloc might not be ptrdiff_t safe"
+ syntax error
+ #endif
;
return 0;
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
- gl_cv_func_malloc_posix=yes
+ gl_cv_malloc_ptrdiff=yes
else
- gl_cv_func_malloc_posix=no
+ gl_cv_malloc_ptrdiff=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_malloc_ptrdiff" >&5
+$as_echo "$gl_cv_malloc_ptrdiff" >&6; }
+
+
+
+
+ test "$gl_cv_malloc_ptrdiff" = yes || REPLACE_MALLOC_FOR_MALLOC_POSIX=1
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether malloc, realloc, calloc set errno on failure" >&5
+$as_echo_n "checking whether malloc, realloc, calloc set errno on failure... " >&6; }
+if ${gl_cv_func_malloc_posix+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ case "$host_os" in
+ mingw*)
+ gl_cv_func_malloc_posix=no ;;
+ irix* | solaris*)
+
+ gl_cv_func_malloc_posix=no ;;
+ *)
+ gl_cv_func_malloc_posix=yes ;;
+ esac
+
+fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_malloc_posix" >&5
$as_echo "$gl_cv_func_malloc_posix" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5
-$as_echo_n "checking for GNU libc compatible malloc... " >&6; }
+
+
+ if test "$gl_cv_func_malloc_posix" = yes; then
+
+$as_echo "#define HAVE_MALLOC_POSIX 1" >>confdefs.h
+
+ else
+ REPLACE_MALLOC_FOR_MALLOC_POSIX=1
+ fi
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether malloc (0) returns nonnull" >&5
+$as_echo_n "checking whether malloc (0) returns nonnull... " >&6; }
if ${ac_cv_func_malloc_0_nonnull+:} false; then :
$as_echo_n "(cached) " >&6
else
if test "$cross_compiling" = yes; then :
case "$host_os" in
# Guess yes on platforms where we know the result.
- *-gnu* | gnu* | *-musl* | freebsd* | netbsd* | openbsd* \
- | hpux* | solaris* | cygwin* | mingw*)
+ *-gnu* | freebsd* | netbsd* | openbsd* | bitrig* \
+ | gnu* | *-musl* | midnightbsd* \
+ | hpux* | solaris* | cygwin* | mingw* | msys* )
ac_cv_func_malloc_0_nonnull="guessing yes" ;;
# If we don't know, obey --enable-cross-guesses.
*) ac_cv_func_malloc_0_nonnull="$gl_cross_guess_normal" ;;
@@ -15431,7 +18002,7 @@ else
int
main ()
{
-char *p = malloc (0);
+void *p = malloc (0);
int result = !p;
free (p);
return result;
@@ -15453,19 +18024,168 @@ fi
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5
$as_echo "$ac_cv_func_malloc_0_nonnull" >&6; }
- case "$ac_cv_func_malloc_0_nonnull" in
- *yes)
- gl_cv_func_malloc_0_nonnull=1
+ case $ac_cv_func_malloc_0_nonnull in #(
+ *yes) :
+ gl_cv_func_malloc_0_nonnull=1 ;; #(
+ *) :
+ gl_cv_func_malloc_0_nonnull=0 ;;
+esac
+
+
+cat >>confdefs.h <<_ACEOF
+#define MALLOC_0_IS_NONNULL $gl_cv_func_malloc_0_nonnull
+_ACEOF
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if test $gl_cv_have_include_next = yes; then
+ gl_cv_next_math_h='<'math.h'>'
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <math.h>" >&5
+$as_echo_n "checking absolute name of <math.h>... " >&6; }
+if ${gl_cv_next_math_h+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ if test $ac_cv_header_math_h = yes; then
+
+
+
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <math.h>
+_ACEOF
+ case "$host_os" in
+ aix*) gl_absname_cpp="$ac_cpp -C" ;;
+ *) gl_absname_cpp="$ac_cpp" ;;
+ esac
+
+ case "$host_os" in
+ mingw*)
+ gl_dirsep_regex='[/\\]'
;;
*)
- gl_cv_func_malloc_0_nonnull=0
+ gl_dirsep_regex='\/'
;;
esac
+ gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+ gl_header_literal_regex=`echo 'math.h' \
+ | sed -e "$gl_make_literal_regex_sed"`
+ gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+ s|^/[^/]|//&|
+ p
+ q
+ }'
+ gl_cv_absolute_math_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+ sed -n "$gl_absolute_header_sed"`
-cat >>confdefs.h <<_ACEOF
-#define MALLOC_0_IS_NONNULL $gl_cv_func_malloc_0_nonnull
+ gl_header=$gl_cv_absolute_math_h
+ gl_cv_next_math_h='"'$gl_header'"'
+ else
+ gl_cv_next_math_h='<'math.h'>'
+ fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_math_h" >&5
+$as_echo "$gl_cv_next_math_h" >&6; }
+ fi
+ NEXT_MATH_H=$gl_cv_next_math_h
+
+ if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+ gl_next_as_first_directive='<'math.h'>'
+ else
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+ gl_next_as_first_directive=$gl_cv_next_math_h
+ fi
+ NEXT_AS_FIRST_DIRECTIVE_MATH_H=$gl_next_as_first_directive
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NAN macro works" >&5
+$as_echo_n "checking whether NAN macro works... " >&6; }
+if ${gl_cv_header_math_nan_works+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <math.h>
+int
+main ()
+{
+/* Solaris 10 has a broken definition of NAN. Other platforms
+ fail to provide NAN, or provide it only in C99 mode; this
+ test only needs to fail when NAN is provided but wrong. */
+ float f = 1.0f;
+#ifdef NAN
+ f = NAN;
+#endif
+ return f == 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ gl_cv_header_math_nan_works=yes
+else
+ gl_cv_header_math_nan_works=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_math_nan_works" >&5
+$as_echo "$gl_cv_header_math_nan_works" >&6; }
+ if test $gl_cv_header_math_nan_works = no; then
+ REPLACE_NAN=1
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether HUGE_VAL works" >&5
+$as_echo_n "checking whether HUGE_VAL works... " >&6; }
+if ${gl_cv_header_math_huge_val_works+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <math.h>
+int
+main ()
+{
+/* Solaris 10 has a broken definition of HUGE_VAL. */
+ double d = HUGE_VAL;
+ return d == 0;
+ ;
+ return 0;
+}
_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ gl_cv_header_math_huge_val_works=yes
+else
+ gl_cv_header_math_huge_val_works=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_math_huge_val_works" >&5
+$as_echo "$gl_cv_header_math_huge_val_works" >&6; }
+ if test $gl_cv_header_math_huge_val_works = no; then
+ REPLACE_HUGE_VAL=1
+ fi
+
@@ -15937,98 +18657,6 @@ esac
-
-
- GNULIB_EXPLICIT_BZERO=0;
- GNULIB_FFSL=0;
- GNULIB_FFSLL=0;
- GNULIB_MEMCHR=0;
- GNULIB_MEMMEM=0;
- GNULIB_MEMPCPY=0;
- GNULIB_MEMRCHR=0;
- GNULIB_RAWMEMCHR=0;
- GNULIB_STPCPY=0;
- GNULIB_STPNCPY=0;
- GNULIB_STRCHRNUL=0;
- GNULIB_STRDUP=0;
- GNULIB_STRNCAT=0;
- GNULIB_STRNDUP=0;
- GNULIB_STRNLEN=0;
- GNULIB_STRPBRK=0;
- GNULIB_STRSEP=0;
- GNULIB_STRSTR=0;
- GNULIB_STRCASESTR=0;
- GNULIB_STRTOK_R=0;
- GNULIB_MBSLEN=0;
- GNULIB_MBSNLEN=0;
- GNULIB_MBSCHR=0;
- GNULIB_MBSRCHR=0;
- GNULIB_MBSSTR=0;
- GNULIB_MBSCASECMP=0;
- GNULIB_MBSNCASECMP=0;
- GNULIB_MBSPCASECMP=0;
- GNULIB_MBSCASESTR=0;
- GNULIB_MBSCSPN=0;
- GNULIB_MBSPBRK=0;
- GNULIB_MBSSPN=0;
- GNULIB_MBSSEP=0;
- GNULIB_MBSTOK_R=0;
- GNULIB_STRERROR=0;
- GNULIB_STRERROR_R=0;
- GNULIB_STRERRORNAME_NP=0;
- GNULIB_SIGABBREV_NP=0;
- GNULIB_SIGDESCR_NP=0;
- GNULIB_STRSIGNAL=0;
- GNULIB_STRVERSCMP=0;
- HAVE_MBSLEN=0;
- GNULIB_MDA_MEMCCPY=1;
- GNULIB_MDA_STRDUP=1;
- HAVE_EXPLICIT_BZERO=1;
- HAVE_FFSL=1;
- HAVE_FFSLL=1;
- HAVE_DECL_MEMMEM=1;
- HAVE_MEMPCPY=1;
- HAVE_DECL_MEMRCHR=1;
- HAVE_RAWMEMCHR=1;
- HAVE_STPCPY=1;
- HAVE_STPNCPY=1;
- HAVE_STRCHRNUL=1;
- HAVE_DECL_STRDUP=1;
- HAVE_DECL_STRNDUP=1;
- HAVE_DECL_STRNLEN=1;
- HAVE_STRPBRK=1;
- HAVE_STRSEP=1;
- HAVE_STRCASESTR=1;
- HAVE_DECL_STRTOK_R=1;
- HAVE_DECL_STRERROR_R=1;
- HAVE_STRERRORNAME_NP=1;
- HAVE_SIGABBREV_NP=1;
- HAVE_SIGDESCR_NP=1;
- HAVE_DECL_STRSIGNAL=1;
- HAVE_STRVERSCMP=1;
- REPLACE_FFSLL=0;
- REPLACE_MEMCHR=0;
- REPLACE_MEMMEM=0;
- REPLACE_STPNCPY=0;
- REPLACE_STRCHRNUL=0;
- REPLACE_STRDUP=0;
- REPLACE_STRNCAT=0;
- REPLACE_STRNDUP=0;
- REPLACE_STRNLEN=0;
- REPLACE_STRSTR=0;
- REPLACE_STRCASESTR=0;
- REPLACE_STRTOK_R=0;
- REPLACE_STRERROR=0;
- REPLACE_STRERROR_R=0;
- REPLACE_STRERRORNAME_NP=0;
- REPLACE_STRSIGNAL=0;
- UNDEFINE_STRTOK_R=0;
-
-
-
-
-
-
# Check for mmap(). Don't use AC_FUNC_MMAP, because it checks too much: it
# fails on HP-UX 11, because MAP_FIXED mappings do not work. But this is
# irrelevant for anonymous mappings.
@@ -16093,6 +18721,56 @@ $as_echo "#define HAVE_MAP_ANONYMOUS 1" >>confdefs.h
+
+ HAVE_MBSLEN=0;
+ HAVE_EXPLICIT_BZERO=1;
+ HAVE_FFSL=1;
+ HAVE_FFSLL=1;
+ HAVE_DECL_MEMMEM=1;
+ HAVE_MEMPCPY=1;
+ HAVE_DECL_MEMRCHR=1;
+ HAVE_RAWMEMCHR=1;
+ HAVE_STPCPY=1;
+ HAVE_STPNCPY=1;
+ HAVE_STRCHRNUL=1;
+ HAVE_DECL_STRDUP=1;
+ HAVE_DECL_STRNDUP=1;
+ HAVE_DECL_STRNLEN=1;
+ HAVE_STRPBRK=1;
+ HAVE_STRSEP=1;
+ HAVE_STRCASESTR=1;
+ HAVE_DECL_STRTOK_R=1;
+ HAVE_DECL_STRERROR_R=1;
+ HAVE_STRERRORNAME_NP=1;
+ HAVE_SIGABBREV_NP=1;
+ HAVE_SIGDESCR_NP=1;
+ HAVE_DECL_STRSIGNAL=1;
+ HAVE_STRVERSCMP=1;
+ REPLACE_FFSLL=0;
+ REPLACE_MEMCHR=0;
+ REPLACE_MEMMEM=0;
+ REPLACE_STPNCPY=0;
+ REPLACE_STRCHRNUL=0;
+ REPLACE_STRDUP=0;
+ REPLACE_STRNCAT=0;
+ REPLACE_STRNDUP=0;
+ REPLACE_STRNLEN=0;
+ REPLACE_STRSTR=0;
+ REPLACE_STRCASESTR=0;
+ REPLACE_STRTOK_R=0;
+ REPLACE_STRERROR=0;
+ REPLACE_STRERROR_R=0;
+ REPLACE_STRERRORNAME_NP=0;
+ REPLACE_STRSIGNAL=0;
+ UNDEFINE_STRTOK_R=0;
+
+
+
+
+
+
+
+
# Detect platform-specific bugs in some versions of glibc:
# memchr should not dereference anything with length 0
# https://bugzilla.redhat.com/show_bug.cgi?id=499689
@@ -16204,6 +18882,180 @@ $as_echo "$gl_cv_func_memchr_works" >&6; }
*) REPLACE_MEMCHR=1 ;;
esac
+
+
+ GL_GNULIB_EXPLICIT_BZERO=0
+
+
+
+ GL_GNULIB_FFSL=0
+
+
+
+ GL_GNULIB_FFSLL=0
+
+
+
+ GL_GNULIB_MEMCHR=0
+
+
+
+ GL_GNULIB_MEMMEM=0
+
+
+
+ GL_GNULIB_MEMPCPY=0
+
+
+
+ GL_GNULIB_MEMRCHR=0
+
+
+
+ GL_GNULIB_RAWMEMCHR=0
+
+
+
+ GL_GNULIB_STPCPY=0
+
+
+
+ GL_GNULIB_STPNCPY=0
+
+
+
+ GL_GNULIB_STRCHRNUL=0
+
+
+
+ GL_GNULIB_STRDUP=0
+
+
+
+ GL_GNULIB_STRNCAT=0
+
+
+
+ GL_GNULIB_STRNDUP=0
+
+
+
+ GL_GNULIB_STRNLEN=0
+
+
+
+ GL_GNULIB_STRPBRK=0
+
+
+
+ GL_GNULIB_STRSEP=0
+
+
+
+ GL_GNULIB_STRSTR=0
+
+
+
+ GL_GNULIB_STRCASESTR=0
+
+
+
+ GL_GNULIB_STRTOK_R=0
+
+
+
+ GL_GNULIB_MBSLEN=0
+
+
+
+ GL_GNULIB_MBSNLEN=0
+
+
+
+ GL_GNULIB_MBSCHR=0
+
+
+
+ GL_GNULIB_MBSRCHR=0
+
+
+
+ GL_GNULIB_MBSSTR=0
+
+
+
+ GL_GNULIB_MBSCASECMP=0
+
+
+
+ GL_GNULIB_MBSNCASECMP=0
+
+
+
+ GL_GNULIB_MBSPCASECMP=0
+
+
+
+ GL_GNULIB_MBSCASESTR=0
+
+
+
+ GL_GNULIB_MBSCSPN=0
+
+
+
+ GL_GNULIB_MBSPBRK=0
+
+
+
+ GL_GNULIB_MBSSPN=0
+
+
+
+ GL_GNULIB_MBSSEP=0
+
+
+
+ GL_GNULIB_MBSTOK_R=0
+
+
+
+ GL_GNULIB_STRERROR=0
+
+
+
+ GL_GNULIB_STRERROR_R=0
+
+
+
+ GL_GNULIB_STRERRORNAME_NP=0
+
+
+
+ GL_GNULIB_SIGABBREV_NP=0
+
+
+
+ GL_GNULIB_SIGDESCR_NP=0
+
+
+
+ GL_GNULIB_STRSIGNAL=0
+
+
+
+ GL_GNULIB_STRVERSCMP=0
+
+
+
+ GL_GNULIB_MDA_MEMCCPY=1
+
+
+
+ GL_GNULIB_MDA_STRDUP=1
+
+
+
ac_fn_c_check_decl "$LINENO" "memmem" "ac_cv_have_decl_memmem" "$ac_includes_default"
if test "x$ac_cv_have_decl_memmem" = xyes; then :
ac_have_decl=1
@@ -16248,6 +19100,7 @@ else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
+#include <string.h> /* for __GNU_LIBRARY__ */
#ifdef __GNU_LIBRARY__
#include <features.h>
#if ((__GLIBC__ == 2 && ((__GLIBC_MINOR > 0 && __GLIBC_MINOR__ < 9) \
@@ -16418,7 +19271,6 @@ $as_echo "#define HAVE_MINMAX_IN_SYS_PARAM_H 1" >>confdefs.h
- GNULIB_GETADDRINFO=0;
HAVE_STRUCT_ADDRINFO=1;
HAVE_DECL_FREEADDRINFO=1;
HAVE_DECL_GAI_STRERROR=1;
@@ -16428,6 +19280,103 @@ $as_echo "#define HAVE_MINMAX_IN_SYS_PARAM_H 1" >>confdefs.h
REPLACE_GETADDRINFO=0;
+
+
+
+
+
+
+
+
+
+
+ if test $gl_cv_have_include_next = yes; then
+ gl_cv_next_netdb_h='<'netdb.h'>'
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <netdb.h>" >&5
+$as_echo_n "checking absolute name of <netdb.h>... " >&6; }
+if ${gl_cv_next_netdb_h+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ if test $ac_cv_header_netdb_h = yes; then
+
+
+
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <netdb.h>
+_ACEOF
+ case "$host_os" in
+ aix*) gl_absname_cpp="$ac_cpp -C" ;;
+ *) gl_absname_cpp="$ac_cpp" ;;
+ esac
+
+ case "$host_os" in
+ mingw*)
+ gl_dirsep_regex='[/\\]'
+ ;;
+ *)
+ gl_dirsep_regex='\/'
+ ;;
+ esac
+ gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+ gl_header_literal_regex=`echo 'netdb.h' \
+ | sed -e "$gl_make_literal_regex_sed"`
+ gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+ s|^/[^/]|//&|
+ p
+ q
+ }'
+
+ gl_cv_absolute_netdb_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+ sed -n "$gl_absolute_header_sed"`
+
+ gl_header=$gl_cv_absolute_netdb_h
+ gl_cv_next_netdb_h='"'$gl_header'"'
+ else
+ gl_cv_next_netdb_h='<'netdb.h'>'
+ fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_netdb_h" >&5
+$as_echo "$gl_cv_next_netdb_h" >&6; }
+ fi
+ NEXT_NETDB_H=$gl_cv_next_netdb_h
+
+ if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+ gl_next_as_first_directive='<'netdb.h'>'
+ else
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+ gl_next_as_first_directive=$gl_cv_next_netdb_h
+ fi
+ NEXT_AS_FIRST_DIRECTIVE_NETDB_H=$gl_next_as_first_directive
+
+
+
+
+ if test $ac_cv_header_netdb_h = yes; then
+ HAVE_NETDB_H=1
+ else
+ HAVE_NETDB_H=0
+ fi
+
+
+
+
+
+
+
+
+ GL_GNULIB_GETADDRINFO=0
+
+
+
+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for O_CLOEXEC" >&5
$as_echo_n "checking for O_CLOEXEC... " >&6; }
if ${gl_cv_macro_O_CLOEXEC+:} false; then :
@@ -16502,8 +19451,6 @@ _ACEOF
- GNULIB_PSELECT=0;
- GNULIB_SELECT=0;
HAVE_PSELECT=1;
REPLACE_PSELECT=0;
REPLACE_SELECT=0;
@@ -16647,8 +19594,8 @@ _ACEOF
gl_cv_absolute_sys_select_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
sed -n "$gl_absolute_header_sed"`
- gl_header=$gl_cv_absolute_sys_select_h
- gl_cv_next_sys_select_h='"'$gl_header'"'
+ gl_header=$gl_cv_absolute_sys_select_h
+ gl_cv_next_sys_select_h='"'$gl_header'"'
else
gl_cv_next_sys_select_h='<'sys/select.h'>'
fi
@@ -16904,6 +19851,16 @@ $as_echo "$gl_cv_lib_socket" >&6; }
:
+
+
+ GL_GNULIB_PSELECT=0
+
+
+
+ GL_GNULIB_SELECT=0
+
+
+
ac_fn_c_check_decl "$LINENO" "setenv" "ac_cv_have_decl_setenv" "$ac_includes_default"
if test "x$ac_cv_have_decl_setenv" = xyes; then :
ac_have_decl=1
@@ -16954,11 +19911,6 @@ done
- GNULIB_PTHREAD_SIGMASK=0;
- GNULIB_RAISE=0;
- GNULIB_SIGNAL_H_SIGPIPE=0;
- GNULIB_SIGPROCMASK=0;
- GNULIB_SIGACTION=0;
HAVE_POSIX_SIGNALBLOCKING=1;
HAVE_PTHREAD_SIGMASK=1;
HAVE_RAISE=1;
@@ -16995,6 +19947,138 @@ fi
HAVE_SIGSET_T=0
fi
+
+
+
+
+
+
+
+
+
+
+
+ if test $gl_cv_have_include_next = yes; then
+ gl_cv_next_signal_h='<'signal.h'>'
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <signal.h>" >&5
+$as_echo_n "checking absolute name of <signal.h>... " >&6; }
+if ${gl_cv_next_signal_h+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <signal.h>
+_ACEOF
+ case "$host_os" in
+ aix*) gl_absname_cpp="$ac_cpp -C" ;;
+ *) gl_absname_cpp="$ac_cpp" ;;
+ esac
+
+ case "$host_os" in
+ mingw*)
+ gl_dirsep_regex='[/\\]'
+ ;;
+ *)
+ gl_dirsep_regex='\/'
+ ;;
+ esac
+ gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+ gl_header_literal_regex=`echo 'signal.h' \
+ | sed -e "$gl_make_literal_regex_sed"`
+ gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+ s|^/[^/]|//&|
+ p
+ q
+ }'
+
+ gl_cv_absolute_signal_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+ sed -n "$gl_absolute_header_sed"`
+
+ gl_header=$gl_cv_absolute_signal_h
+ gl_cv_next_signal_h='"'$gl_header'"'
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_signal_h" >&5
+$as_echo "$gl_cv_next_signal_h" >&6; }
+ fi
+ NEXT_SIGNAL_H=$gl_cv_next_signal_h
+
+ if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+ gl_next_as_first_directive='<'signal.h'>'
+ else
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+ gl_next_as_first_directive=$gl_cv_next_signal_h
+ fi
+ NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H=$gl_next_as_first_directive
+
+
+
+
+
+# AIX declares sig_atomic_t to already include volatile, and C89 compilers
+# then choke on 'volatile sig_atomic_t'. C99 requires that it compile.
+ ac_fn_c_check_type "$LINENO" "volatile sig_atomic_t" "ac_cv_type_volatile_sig_atomic_t" "
+#include <signal.h>
+
+"
+if test "x$ac_cv_type_volatile_sig_atomic_t" = xyes; then :
+
+else
+ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T=0
+fi
+
+
+
+
+
+
+
+ ac_fn_c_check_type "$LINENO" "sighandler_t" "ac_cv_type_sighandler_t" "
+#include <signal.h>
+
+"
+if test "x$ac_cv_type_sighandler_t" = xyes; then :
+
+else
+ HAVE_SIGHANDLER_T=0
+fi
+
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_PTHREAD_SIGMASK=0
+
+
+
+ GL_GNULIB_RAISE=0
+
+
+
+ GL_GNULIB_SIGNAL_H_SIGPIPE=0
+
+
+
+ GL_GNULIB_SIGPROCMASK=0
+
+
+
+ GL_GNULIB_SIGACTION=0
+
+
+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5
$as_echo_n "checking for stdbool.h that conforms to C99... " >&6; }
if ${ac_cv_header_stdbool_h+:} false; then :
@@ -17090,6 +20174,8 @@ _ACEOF
fi
+
+
ac_fn_c_check_decl "$LINENO" "fcloseall" "ac_cv_have_decl_fcloseall" "$ac_includes_default"
if test "x$ac_cv_have_decl_fcloseall" = xyes; then :
ac_have_decl=1
@@ -17101,6 +20187,141 @@ cat >>confdefs.h <<_ACEOF
#define HAVE_DECL_FCLOSEALL $ac_have_decl
_ACEOF
+
+
+
+ $as_echo "#define __USE_MINGW_ANSI_STDIO 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+ if test $gl_cv_have_include_next = yes; then
+ gl_cv_next_stdio_h='<'stdio.h'>'
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <stdio.h>" >&5
+$as_echo_n "checking absolute name of <stdio.h>... " >&6; }
+if ${gl_cv_next_stdio_h+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdio.h>
+_ACEOF
+ case "$host_os" in
+ aix*) gl_absname_cpp="$ac_cpp -C" ;;
+ *) gl_absname_cpp="$ac_cpp" ;;
+ esac
+
+ case "$host_os" in
+ mingw*)
+ gl_dirsep_regex='[/\\]'
+ ;;
+ *)
+ gl_dirsep_regex='\/'
+ ;;
+ esac
+ gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+ gl_header_literal_regex=`echo 'stdio.h' \
+ | sed -e "$gl_make_literal_regex_sed"`
+ gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+ s|^/[^/]|//&|
+ p
+ q
+ }'
+
+ gl_cv_absolute_stdio_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+ sed -n "$gl_absolute_header_sed"`
+
+ gl_header=$gl_cv_absolute_stdio_h
+ gl_cv_next_stdio_h='"'$gl_header'"'
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stdio_h" >&5
+$as_echo "$gl_cv_next_stdio_h" >&6; }
+ fi
+ NEXT_STDIO_H=$gl_cv_next_stdio_h
+
+ if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+ gl_next_as_first_directive='<'stdio.h'>'
+ else
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+ gl_next_as_first_directive=$gl_cv_next_stdio_h
+ fi
+ NEXT_AS_FIRST_DIRECTIVE_STDIO_H=$gl_next_as_first_directive
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking which flavor of printf attribute matches inttypes macros" >&5
+$as_echo_n "checking which flavor of printf attribute matches inttypes macros... " >&6; }
+if ${gl_cv_func_printf_attribute_flavor+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #define __STDC_FORMAT_MACROS 1
+ #include <stdio.h>
+ #include <inttypes.h>
+ /* For non-mingw systems, compilation will trivially succeed.
+ For mingw, compilation will succeed for older mingw (system
+ printf, "I64d") and fail for newer mingw (gnu printf, "lld"). */
+ #if (defined _WIN32 && ! defined __CYGWIN__) && \
+ (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+ extern char PRIdMAX_probe[sizeof PRIdMAX == sizeof "I64d" ? 1 : -1];
+ #endif
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ gl_cv_func_printf_attribute_flavor=system
+else
+ gl_cv_func_printf_attribute_flavor=gnu
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_attribute_flavor" >&5
+$as_echo "$gl_cv_func_printf_attribute_flavor" >&6; }
+ if test "$gl_cv_func_printf_attribute_flavor" = gnu; then
+
+$as_echo "#define GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU 1" >>confdefs.h
+
+ fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if test $ac_cv_have_decl_fcloseall = no; then
+ HAVE_DECL_FCLOSEALL=0
+ fi
+
ac_fn_c_check_decl "$LINENO" "ecvt" "ac_cv_have_decl_ecvt" "$ac_includes_default"
if test "x$ac_cv_have_decl_ecvt" = xyes; then :
ac_have_decl=1
@@ -17134,6 +20355,99 @@ cat >>confdefs.h <<_ACEOF
#define HAVE_DECL_GCVT $ac_have_decl
_ACEOF
+
+
+
+
+
+
+
+
+
+
+ if test $gl_cv_have_include_next = yes; then
+ gl_cv_next_stdlib_h='<'stdlib.h'>'
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <stdlib.h>" >&5
+$as_echo_n "checking absolute name of <stdlib.h>... " >&6; }
+if ${gl_cv_next_stdlib_h+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdlib.h>
+_ACEOF
+ case "$host_os" in
+ aix*) gl_absname_cpp="$ac_cpp -C" ;;
+ *) gl_absname_cpp="$ac_cpp" ;;
+ esac
+
+ case "$host_os" in
+ mingw*)
+ gl_dirsep_regex='[/\\]'
+ ;;
+ *)
+ gl_dirsep_regex='\/'
+ ;;
+ esac
+ gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+ gl_header_literal_regex=`echo 'stdlib.h' \
+ | sed -e "$gl_make_literal_regex_sed"`
+ gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+ s|^/[^/]|//&|
+ p
+ q
+ }'
+
+ gl_cv_absolute_stdlib_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+ sed -n "$gl_absolute_header_sed"`
+
+ gl_header=$gl_cv_absolute_stdlib_h
+ gl_cv_next_stdlib_h='"'$gl_header'"'
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stdlib_h" >&5
+$as_echo "$gl_cv_next_stdlib_h" >&6; }
+ fi
+ NEXT_STDLIB_H=$gl_cv_next_stdlib_h
+
+ if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+ gl_next_as_first_directive='<'stdlib.h'>'
+ else
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+ gl_next_as_first_directive=$gl_cv_next_stdlib_h
+ fi
+ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H=$gl_next_as_first_directive
+
+
+
+
+
+
+
+
+
+
+
+
+ if test $ac_cv_have_decl_ecvt = no; then
+ HAVE_DECL_ECVT=0
+ fi
+
+ if test $ac_cv_have_decl_fcvt = no; then
+ HAVE_DECL_FCVT=0
+ fi
+
+ if test $ac_cv_have_decl_gcvt = no; then
+ HAVE_DECL_GCVT=0
+ fi
+
ac_fn_c_check_decl "$LINENO" "strdup" "ac_cv_have_decl_strdup" "$ac_includes_default"
if test "x$ac_cv_have_decl_strdup" = xyes; then :
ac_have_decl=1
@@ -17218,8 +20532,11 @@ $as_echo "#define REPLACE_STRERROR_0 1" >>confdefs.h
+
+
+
if test $ac_cv_func_strerror_r = yes; then
- if test "$ERRNO_H:$REPLACE_STRERROR_0" = :0; then
+ if test "$GL_GENERATE_ERRNO_H:$REPLACE_STRERROR_0" = false:0; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for strerror_r with POSIX signature" >&5
$as_echo_n "checking for strerror_r with POSIX signature... " >&6; }
if ${gl_cv_func_strerror_r_posix_signature+:} false; then :
@@ -17444,8 +20761,8 @@ _ACEOF
gl_cv_absolute_string_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
sed -n "$gl_absolute_header_sed"`
- gl_header=$gl_cv_absolute_string_h
- gl_cv_next_string_h='"'$gl_header'"'
+ gl_header=$gl_cv_absolute_string_h
+ gl_cv_next_string_h='"'$gl_header'"'
fi
@@ -17531,8 +20848,8 @@ _ACEOF
gl_cv_absolute_strings_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
sed -n "$gl_absolute_header_sed"`
- gl_header=$gl_cv_absolute_strings_h
- gl_cv_next_strings_h='"'$gl_header'"'
+ gl_header=$gl_cv_absolute_strings_h
+ gl_cv_next_strings_h='"'$gl_header'"'
else
gl_cv_next_strings_h='<'strings.h'>'
fi
@@ -17593,6 +20910,7 @@ else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
+#include <string.h> /* for __GNU_LIBRARY__ */
#ifdef __GNU_LIBRARY__
#include <features.h>
#if ((__GLIBC__ == 2 && __GLIBC_MINOR__ > 12) || (__GLIBC__ > 2)) \
@@ -17622,7 +20940,7 @@ else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#include <string.h> /* for strstr */
+#include <string.h> /* for __GNU_LIBRARY__, strstr */
#ifdef __GNU_LIBRARY__
#include <features.h>
#if __GLIBC__ == 2 && __GLIBC_MINOR__ == 28
@@ -17686,9 +21004,106 @@ _ACEOF
-$as_echo "#define _USE_STD_STAT 1" >>confdefs.h
+
+ if test $gl_cv_have_include_next = yes; then
+ gl_cv_next_sys_random_h='<'sys/random.h'>'
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <sys/random.h>" >&5
+$as_echo_n "checking absolute name of <sys/random.h>... " >&6; }
+if ${gl_cv_next_sys_random_h+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ if test $ac_cv_header_sys_random_h = yes; then
+
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/random.h>
+_ACEOF
+ case "$host_os" in
+ aix*) gl_absname_cpp="$ac_cpp -C" ;;
+ *) gl_absname_cpp="$ac_cpp" ;;
+ esac
+
+ case "$host_os" in
+ mingw*)
+ gl_dirsep_regex='[/\\]'
+ ;;
+ *)
+ gl_dirsep_regex='\/'
+ ;;
+ esac
+ gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+ gl_header_literal_regex=`echo 'sys/random.h' \
+ | sed -e "$gl_make_literal_regex_sed"`
+ gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+ s|^/[^/]|//&|
+ p
+ q
+ }'
+
+ gl_cv_absolute_sys_random_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+ sed -n "$gl_absolute_header_sed"`
+
+ gl_header=$gl_cv_absolute_sys_random_h
+ gl_cv_next_sys_random_h='"'$gl_header'"'
+ else
+ gl_cv_next_sys_random_h='<'sys/random.h'>'
+ fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_random_h" >&5
+$as_echo "$gl_cv_next_sys_random_h" >&6; }
+ fi
+ NEXT_SYS_RANDOM_H=$gl_cv_next_sys_random_h
+
+ if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+ gl_next_as_first_directive='<'sys/random.h'>'
+ else
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+ gl_next_as_first_directive=$gl_cv_next_sys_random_h
+ fi
+ NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H=$gl_next_as_first_directive
+
+
+
+
+ if test $ac_cv_header_sys_random_h = yes; then
+ HAVE_SYS_RANDOM_H=1
+ else
+ HAVE_SYS_RANDOM_H=0
+ fi
+
+
+
+ if test $ac_cv_header_sys_random_h = yes; then
+ UNISTD_H_HAVE_SYS_RANDOM_H=1
+ fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+$as_echo "#define _USE_STD_STAT 1" >>confdefs.h
+
@@ -17739,8 +21154,8 @@ _ACEOF
gl_cv_absolute_sys_types_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
sed -n "$gl_absolute_header_sed"`
- gl_header=$gl_cv_absolute_sys_types_h
- gl_cv_next_sys_types_h='"'$gl_header'"'
+ gl_header=$gl_cv_absolute_sys_types_h
+ gl_cv_next_sys_types_h='"'$gl_header'"'
fi
@@ -17778,28 +21193,201 @@ $as_echo "$gl_cv_next_sys_types_h" >&6; }
- GNULIB_WAITPID=0;
- GNULIB_CTIME=0;
- GNULIB_MKTIME=0;
- GNULIB_LOCALTIME=0;
- GNULIB_NANOSLEEP=0;
- GNULIB_STRFTIME=0;
- GNULIB_STRPTIME=0;
- GNULIB_TIMEGM=0;
- GNULIB_TIMESPEC_GET=0;
- GNULIB_TIME_R=0;
- GNULIB_TIME_RZ=0;
- GNULIB_TZSET=0;
- GNULIB_MDA_TZSET=1;
+
+
+
+
+
+
+
+
+ if test $gl_cv_have_include_next = yes; then
+ gl_cv_next_sys_uio_h='<'sys/uio.h'>'
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <sys/uio.h>" >&5
+$as_echo_n "checking absolute name of <sys/uio.h>... " >&6; }
+if ${gl_cv_next_sys_uio_h+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ if test $ac_cv_header_sys_uio_h = yes; then
+
+
+
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/uio.h>
+_ACEOF
+ case "$host_os" in
+ aix*) gl_absname_cpp="$ac_cpp -C" ;;
+ *) gl_absname_cpp="$ac_cpp" ;;
+ esac
+
+ case "$host_os" in
+ mingw*)
+ gl_dirsep_regex='[/\\]'
+ ;;
+ *)
+ gl_dirsep_regex='\/'
+ ;;
+ esac
+ gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+ gl_header_literal_regex=`echo 'sys/uio.h' \
+ | sed -e "$gl_make_literal_regex_sed"`
+ gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+ s|^/[^/]|//&|
+ p
+ q
+ }'
+
+ gl_cv_absolute_sys_uio_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+ sed -n "$gl_absolute_header_sed"`
+
+ gl_header=$gl_cv_absolute_sys_uio_h
+ gl_cv_next_sys_uio_h='"'$gl_header'"'
+ else
+ gl_cv_next_sys_uio_h='<'sys/uio.h'>'
+ fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_uio_h" >&5
+$as_echo "$gl_cv_next_sys_uio_h" >&6; }
+ fi
+ NEXT_SYS_UIO_H=$gl_cv_next_sys_uio_h
+
+ if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+ gl_next_as_first_directive='<'sys/uio.h'>'
+ else
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+ gl_next_as_first_directive=$gl_cv_next_sys_uio_h
+ fi
+ NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H=$gl_next_as_first_directive
+
+
+
+
+ if test $ac_cv_header_sys_uio_h = yes; then
+ HAVE_SYS_UIO_H=1
+ else
+ HAVE_SYS_UIO_H=0
+ fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if test $gl_cv_have_include_next = yes; then
+ gl_cv_next_sys_wait_h='<'sys/wait.h'>'
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <sys/wait.h>" >&5
+$as_echo_n "checking absolute name of <sys/wait.h>... " >&6; }
+if ${gl_cv_next_sys_wait_h+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ if test $ac_cv_header_sys_wait_h = yes; then
+
+
+
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/wait.h>
+_ACEOF
+ case "$host_os" in
+ aix*) gl_absname_cpp="$ac_cpp -C" ;;
+ *) gl_absname_cpp="$ac_cpp" ;;
+ esac
+
+ case "$host_os" in
+ mingw*)
+ gl_dirsep_regex='[/\\]'
+ ;;
+ *)
+ gl_dirsep_regex='\/'
+ ;;
+ esac
+ gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+ gl_header_literal_regex=`echo 'sys/wait.h' \
+ | sed -e "$gl_make_literal_regex_sed"`
+ gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+ s|^/[^/]|//&|
+ p
+ q
+ }'
+
+ gl_cv_absolute_sys_wait_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+ sed -n "$gl_absolute_header_sed"`
+
+ gl_header=$gl_cv_absolute_sys_wait_h
+ gl_cv_next_sys_wait_h='"'$gl_header'"'
+ else
+ gl_cv_next_sys_wait_h='<'sys/wait.h'>'
+ fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_wait_h" >&5
+$as_echo "$gl_cv_next_sys_wait_h" >&6; }
+ fi
+ NEXT_SYS_WAIT_H=$gl_cv_next_sys_wait_h
+
+ if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+ gl_next_as_first_directive='<'sys/wait.h'>'
+ else
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+ gl_next_as_first_directive=$gl_cv_next_sys_wait_h
+ fi
+ NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H=$gl_next_as_first_directive
+
+
+
+
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_WAITPID=0
+
+
+
+
HAVE_DECL_LOCALTIME_R=1;
HAVE_NANOSLEEP=1;
HAVE_STRPTIME=1;
HAVE_TIMEGM=1;
HAVE_TIMESPEC_GET=1;
+ HAVE_TIMESPEC_GETRES=1;
HAVE_TIMEZONE_T=0;
REPLACE_CTIME=GNULIB_PORTCHECK;
REPLACE_LOCALTIME_R=GNULIB_PORTCHECK;
@@ -17996,8 +21584,8 @@ _ACEOF
gl_cv_absolute_time_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
sed -n "$gl_absolute_header_sed"`
- gl_header=$gl_cv_absolute_time_h
- gl_cv_next_time_h='"'$gl_header'"'
+ gl_header=$gl_cv_absolute_time_h
+ gl_cv_next_time_h='"'$gl_header'"'
fi
@@ -18057,6 +21645,60 @@ $as_echo "$gl_cv_time_h_has_TIME_UTC" >&6; }
+ GL_GNULIB_CTIME=0
+
+
+
+ GL_GNULIB_MKTIME=0
+
+
+
+ GL_GNULIB_LOCALTIME=0
+
+
+
+ GL_GNULIB_NANOSLEEP=0
+
+
+
+ GL_GNULIB_STRFTIME=0
+
+
+
+ GL_GNULIB_STRPTIME=0
+
+
+
+ GL_GNULIB_TIMEGM=0
+
+
+
+ GL_GNULIB_TIMESPEC_GET=0
+
+
+
+ GL_GNULIB_TIMESPEC_GETRES=0
+
+
+
+ GL_GNULIB_TIME_R=0
+
+
+
+ GL_GNULIB_TIME_RZ=0
+
+
+
+ GL_GNULIB_TZSET=0
+
+
+
+ GL_GNULIB_MDA_TZSET=1
+
+
+
+
+
ac_fn_c_check_decl "$LINENO" "execvpe" "ac_cv_have_decl_execvpe" "$ac_includes_default"
if test "x$ac_cv_have_decl_execvpe" = xyes; then :
ac_have_decl=1
@@ -18068,6 +21710,109 @@ cat >>confdefs.h <<_ACEOF
#define HAVE_DECL_EXECVPE $ac_have_decl
_ACEOF
+
+
+
+
+
+
+
+
+
+
+
+
+ if test $gl_cv_have_include_next = yes; then
+ gl_cv_next_unistd_h='<'unistd.h'>'
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <unistd.h>" >&5
+$as_echo_n "checking absolute name of <unistd.h>... " >&6; }
+if ${gl_cv_next_unistd_h+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ if test $ac_cv_header_unistd_h = yes; then
+
+
+
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <unistd.h>
+_ACEOF
+ case "$host_os" in
+ aix*) gl_absname_cpp="$ac_cpp -C" ;;
+ *) gl_absname_cpp="$ac_cpp" ;;
+ esac
+
+ case "$host_os" in
+ mingw*)
+ gl_dirsep_regex='[/\\]'
+ ;;
+ *)
+ gl_dirsep_regex='\/'
+ ;;
+ esac
+ gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+ gl_header_literal_regex=`echo 'unistd.h' \
+ | sed -e "$gl_make_literal_regex_sed"`
+ gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+ s|^/[^/]|//&|
+ p
+ q
+ }'
+
+ gl_cv_absolute_unistd_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+ sed -n "$gl_absolute_header_sed"`
+
+ gl_header=$gl_cv_absolute_unistd_h
+ gl_cv_next_unistd_h='"'$gl_header'"'
+ else
+ gl_cv_next_unistd_h='<'unistd.h'>'
+ fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_unistd_h" >&5
+$as_echo "$gl_cv_next_unistd_h" >&6; }
+ fi
+ NEXT_UNISTD_H=$gl_cv_next_unistd_h
+
+ if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+ gl_next_as_first_directive='<'unistd.h'>'
+ else
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+ gl_next_as_first_directive=$gl_cv_next_unistd_h
+ fi
+ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H=$gl_next_as_first_directive
+
+
+
+
+ if test $ac_cv_header_unistd_h = yes; then
+ HAVE_UNISTD_H=1
+ else
+ HAVE_UNISTD_H=0
+ fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if test $ac_cv_have_decl_execvpe = no; then
+ HAVE_DECL_EXECVPE=0
+ fi
+
ac_fn_c_check_decl "$LINENO" "unsetenv" "ac_cv_have_decl_unsetenv" "$ac_includes_default"
if test "x$ac_cv_have_decl_unsetenv" = xyes; then :
ac_have_decl=1
@@ -18091,19 +21836,6 @@ _ACEOF
- GNULIB_ISWBLANK=0;
- GNULIB_ISWDIGIT=0;
- GNULIB_ISWXDIGIT=0;
- GNULIB_WCTYPE=0;
- GNULIB_ISWCTYPE=0;
- GNULIB_WCTRANS=0;
- GNULIB_TOWCTRANS=0;
- HAVE_ISWBLANK=1;
- HAVE_WCTYPE_T=1;
- HAVE_WCTRANS_T=1;
- REPLACE_ISWBLANK=0;
- REPLACE_ISWDIGIT=0;
- REPLACE_ISWXDIGIT=0;
@@ -18112,128 +21844,154 @@ _ACEOF
- if false; then
- GL_COND_LIBTOOL_TRUE=
- GL_COND_LIBTOOL_FALSE='#'
-else
- GL_COND_LIBTOOL_TRUE='#'
- GL_COND_LIBTOOL_FALSE=
-fi
- gl_cond_libtool=false
- gl_libdeps=
- gl_ltlibdeps=
- gl_m4_base='import/m4'
+ if test $gl_cv_have_include_next = yes; then
+ gl_cv_next_wchar_h='<'wchar.h'>'
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <wchar.h>" >&5
+$as_echo_n "checking absolute name of <wchar.h>... " >&6; }
+if ${gl_cv_next_wchar_h+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test $ac_cv_header_wchar_h = yes; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <wchar.h>
+_ACEOF
+ case "$host_os" in
+ aix*) gl_absname_cpp="$ac_cpp -C" ;;
+ *) gl_absname_cpp="$ac_cpp" ;;
+ esac
+ case "$host_os" in
+ mingw*)
+ gl_dirsep_regex='[/\\]'
+ ;;
+ *)
+ gl_dirsep_regex='\/'
+ ;;
+ esac
+ gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+ gl_header_literal_regex=`echo 'wchar.h' \
+ | sed -e "$gl_make_literal_regex_sed"`
+ gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+ s|^/[^/]|//&|
+ p
+ q
+ }'
+ gl_cv_absolute_wchar_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+ sed -n "$gl_absolute_header_sed"`
- gl_source_base='import'
+ gl_header=$gl_cv_absolute_wchar_h
+ gl_cv_next_wchar_h='"'$gl_header'"'
+ else
+ gl_cv_next_wchar_h='<'wchar.h'>'
+ fi
- if test "$ac_cv_header_winsock2_h" = yes; then
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_wchar_h" >&5
+$as_echo "$gl_cv_next_wchar_h" >&6; }
+ fi
+ NEXT_WCHAR_H=$gl_cv_next_wchar_h
+ if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+ gl_next_as_first_directive='<'wchar.h'>'
+ else
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+ gl_next_as_first_directive=$gl_cv_next_wchar_h
+ fi
+ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H=$gl_next_as_first_directive
+ if test $ac_cv_header_wchar_h = yes; then
+ HAVE_WCHAR_H=1
+ else
+ HAVE_WCHAR_H=0
+ fi
- gl_LIBOBJS="$gl_LIBOBJS accept.$ac_objext"
- fi
+ if test $gt_cv_c_wint_t = yes; then
+ HAVE_WINT_T=1
+ else
+ HAVE_WINT_T=0
+ fi
- GNULIB_ACCEPT=1
-$as_echo "#define GNULIB_TEST_ACCEPT 1" >>confdefs.h
+ ac_fn_c_check_decl "$LINENO" "wcsdup" "ac_cv_have_decl_wcsdup" "
+ #include <wchar.h>
+"
+if test "x$ac_cv_have_decl_wcsdup" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_WCSDUP $ac_have_decl
+_ACEOF
- if test $ac_cv_func_alloca_works = no; then
- :
+ if test $ac_cv_have_decl_wcsdup = no; then
+ HAVE_DECL_WCSDUP=0
fi
- # Define an additional variable used in the Makefile substitution.
- if test $ac_cv_working_alloca_h = yes; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca as a compiler built-in" >&5
-$as_echo_n "checking for alloca as a compiler built-in... " >&6; }
-if ${gl_cv_rpl_alloca+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
+ HAVE_ISWBLANK=1;
+ HAVE_WCTYPE_T=1;
+ HAVE_WCTRANS_T=1;
+ REPLACE_ISWBLANK=0;
+ REPLACE_ISWDIGIT=0;
+ REPLACE_ISWXDIGIT=0;
-#if defined __GNUC__ || defined _AIX || defined _MSC_VER
- Need own alloca
-#endif
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "Need own alloca" >/dev/null 2>&1; then :
- gl_cv_rpl_alloca=yes
-else
- gl_cv_rpl_alloca=no
-fi
-rm -f conftest*
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_rpl_alloca" >&5
-$as_echo "$gl_cv_rpl_alloca" >&6; }
- if test $gl_cv_rpl_alloca = yes; then
-$as_echo "#define HAVE_ALLOCA 1" >>confdefs.h
- ALLOCA_H=alloca.h
- else
- ALLOCA_H=
- fi
- else
- ALLOCA_H=alloca.h
- fi
- if test -n "$ALLOCA_H"; then
- GL_GENERATE_ALLOCA_H_TRUE=
- GL_GENERATE_ALLOCA_H_FALSE='#'
-else
- GL_GENERATE_ALLOCA_H_TRUE='#'
- GL_GENERATE_ALLOCA_H_FALSE=
-fi
- if test $ac_cv_working_alloca_h = yes; then
- HAVE_ALLOCA_H=1
+
+ if test $ac_cv_func_iswcntrl = yes; then
+ HAVE_ISWCNTRL=1
else
- HAVE_ALLOCA_H=0
+ HAVE_ISWCNTRL=0
fi
+ if test $gt_cv_c_wint_t = yes; then
+ HAVE_WINT_T=1
+ else
+ HAVE_WINT_T=0
+ fi
- if test $ac_cv_header_arpa_inet_h = yes; then
- HAVE_ARPA_INET_H=1
- else
- HAVE_ARPA_INET_H=0
- fi
@@ -18245,22 +22003,22 @@ fi
if test $gl_cv_have_include_next = yes; then
- gl_cv_next_arpa_inet_h='<'arpa/inet.h'>'
+ gl_cv_next_wctype_h='<'wctype.h'>'
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <arpa/inet.h>" >&5
-$as_echo_n "checking absolute name of <arpa/inet.h>... " >&6; }
-if ${gl_cv_next_arpa_inet_h+:} false; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <wctype.h>" >&5
+$as_echo_n "checking absolute name of <wctype.h>... " >&6; }
+if ${gl_cv_next_wctype_h+:} false; then :
$as_echo_n "(cached) " >&6
else
- if test $ac_cv_header_arpa_inet_h = yes; then
+ if test $ac_cv_header_wctype_h = yes; then
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#include <arpa/inet.h>
+#include <wctype.h>
_ACEOF
case "$host_os" in
aix*) gl_absname_cpp="$ac_cpp -C" ;;
@@ -18276,7 +22034,7 @@ _ACEOF
;;
esac
gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
- gl_header_literal_regex=`echo 'arpa/inet.h' \
+ gl_header_literal_regex=`echo 'wctype.h' \
| sed -e "$gl_make_literal_regex_sed"`
gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
@@ -18285,76 +22043,521 @@ _ACEOF
q
}'
- gl_cv_absolute_arpa_inet_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+ gl_cv_absolute_wctype_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
sed -n "$gl_absolute_header_sed"`
- gl_header=$gl_cv_absolute_arpa_inet_h
- gl_cv_next_arpa_inet_h='"'$gl_header'"'
+ gl_header=$gl_cv_absolute_wctype_h
+ gl_cv_next_wctype_h='"'$gl_header'"'
else
- gl_cv_next_arpa_inet_h='<'arpa/inet.h'>'
+ gl_cv_next_wctype_h='<'wctype.h'>'
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_arpa_inet_h" >&5
-$as_echo "$gl_cv_next_arpa_inet_h" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_wctype_h" >&5
+$as_echo "$gl_cv_next_wctype_h" >&6; }
fi
- NEXT_ARPA_INET_H=$gl_cv_next_arpa_inet_h
+ NEXT_WCTYPE_H=$gl_cv_next_wctype_h
if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
# INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
- gl_next_as_first_directive='<'arpa/inet.h'>'
+ gl_next_as_first_directive='<'wctype.h'>'
else
# INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
- gl_next_as_first_directive=$gl_cv_next_arpa_inet_h
+ gl_next_as_first_directive=$gl_cv_next_wctype_h
fi
- NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H=$gl_next_as_first_directive
+ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H=$gl_next_as_first_directive
+
+ if test $ac_cv_header_wctype_h = yes; then
+ if test $ac_cv_func_iswcntrl = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether iswcntrl works" >&5
+$as_echo_n "checking whether iswcntrl works... " >&6; }
+if ${gl_cv_func_iswcntrl_works+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ if test "$cross_compiling" = yes; then :
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdlib.h>
+ #if __GNU_LIBRARY__ == 1
+ Linux libc5 i18n is broken.
+ #endif
+int
+main ()
+{
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ gl_cv_func_iswcntrl_works="guessing yes"
+else
+ gl_cv_func_iswcntrl_works="guessing no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+ #include <wchar.h>
+ #include <wctype.h>
+ int main () { return iswprint ('x') == 0; }
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+ gl_cv_func_iswcntrl_works=yes
+else
+ gl_cv_func_iswcntrl_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
- if test $ac_cv_header_sys_socket_h = yes; then
- HAVE_WS2TCPIP_H=0
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_iswcntrl_works" >&5
+$as_echo "$gl_cv_func_iswcntrl_works" >&6; }
+ fi
+ HAVE_WCTYPE_H=1
else
- if test $ac_cv_header_ws2tcpip_h = yes; then
- HAVE_WS2TCPIP_H=1
+ HAVE_WCTYPE_H=0
+ fi
+
+
+ if test $GNULIBHEADERS_OVERRIDE_WINT_T = 1; then
+ REPLACE_ISWCNTRL=1
+ else
+ case "$gl_cv_func_iswcntrl_works" in
+ *yes) REPLACE_ISWCNTRL=0 ;;
+ *) REPLACE_ISWCNTRL=1 ;;
+ esac
+ fi
+
+
+ if test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; then
+ :
+ fi
+
+ if test $REPLACE_ISWCNTRL = 1; then
+ REPLACE_TOWLOWER=1
+ else
+ for ac_func in towlower
+do :
+ ac_fn_c_check_func "$LINENO" "towlower" "ac_cv_func_towlower"
+if test "x$ac_cv_func_towlower" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_TOWLOWER 1
+_ACEOF
+
+fi
+done
+
+ if test $ac_cv_func_towlower = yes; then
+ REPLACE_TOWLOWER=0
else
- HAVE_WS2TCPIP_H=0
+ ac_fn_c_check_decl "$LINENO" "towlower" "ac_cv_have_decl_towlower" "#include <wchar.h>
+ #if HAVE_WCTYPE_H
+ # include <wctype.h>
+ #endif
+
+"
+if test "x$ac_cv_have_decl_towlower" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_TOWLOWER $ac_have_decl
+_ACEOF
+
+ if test $ac_cv_have_decl_towlower = yes; then
+ REPLACE_TOWLOWER=1
+ else
+ REPLACE_TOWLOWER=0
+ fi
fi
fi
+ if test $HAVE_ISWCNTRL = 0 || test $REPLACE_TOWLOWER = 1; then
+ :
+ fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wctype_t" >&5
+$as_echo_n "checking for wctype_t... " >&6; }
+if ${gl_cv_type_wctype_t+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <wchar.h>
+ #if HAVE_WCTYPE_H
+ # include <wctype.h>
+ #endif
+ wctype_t a;
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ gl_cv_type_wctype_t=yes
+else
+ gl_cv_type_wctype_t=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_wctype_t" >&5
+$as_echo "$gl_cv_type_wctype_t" >&6; }
+ if test $gl_cv_type_wctype_t = no; then
+ HAVE_WCTYPE_T=0
+ fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wctrans_t" >&5
+$as_echo_n "checking for wctrans_t... " >&6; }
+if ${gl_cv_type_wctrans_t+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <wchar.h>
+ #include <wctype.h>
+ wctrans_t a;
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ gl_cv_type_wctrans_t=yes
+else
+ gl_cv_type_wctrans_t=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_wctrans_t" >&5
+$as_echo "$gl_cv_type_wctrans_t" >&6; }
+ if test $gl_cv_type_wctrans_t = no; then
+ HAVE_WCTRANS_T=0
+ fi
+
+
+ GL_GNULIB_ISWBLANK=0
- if test "$ac_cv_header_winsock2_h" = yes; then
+ GL_GNULIB_ISWDIGIT=0
+
+
+
+ GL_GNULIB_ISWXDIGIT=0
+
+ GL_GNULIB_WCTYPE=0
+ GL_GNULIB_ISWCTYPE=0
+
+
+
+ GL_GNULIB_WCTRANS=0
+
+
+
+ GL_GNULIB_TOWCTRANS=0
+
+
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler option to allow warnings" >&5
+$as_echo_n "checking for C compiler option to allow warnings... " >&6; }
+if ${gl_cv_cc_wallow+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ rm -f conftest*
+ echo 'int dummy;' > conftest.c
+ { ac_try='${CC-cc} $CFLAGS $CPPFLAGS -c conftest.c 2>conftest1.err'
+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; } >/dev/null
+ { ac_try='${CC-cc} $CFLAGS $CPPFLAGS -Wno-error -c conftest.c 2>conftest2.err'
+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; } >/dev/null
+ if test $? = 0 && test `wc -l < conftest1.err` = `wc -l < conftest2.err`; then
+ gl_cv_cc_wallow='-Wno-error'
+ else
+ gl_cv_cc_wallow=none
+ fi
+ rm -f conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_wallow" >&5
+$as_echo "$gl_cv_cc_wallow" >&6; }
+ case "$gl_cv_cc_wallow" in
+ none) GL_CFLAG_ALLOW_WARNINGS='' ;;
+ *) GL_CFLAG_ALLOW_WARNINGS="$gl_cv_cc_wallow" ;;
+ esac
- gl_LIBOBJS="$gl_LIBOBJS bind.$ac_objext"
+ GL_CFLAG_GNULIB_WARNINGS=''
+ if test -n "$GL_CFLAG_ALLOW_WARNINGS"; then
+ cat > conftest.c <<\EOF
+ #if __GNUC__ >= 3 || (__clang_major__ + (__clang_minor__ >= 9) > 3)
+ -Wno-cast-qual
+ -Wno-conversion
+ -Wno-float-equal
+ -Wno-sign-compare
+ -Wno-undef
+ -Wno-unused-function
+ -Wno-unused-parameter
+ #endif
+ #if __GNUC__ + (__GNUC_MINOR__ >= 9) > 4 || (__clang_major__ + (__clang_minor__ >= 9) > 3)
+ -Wno-float-conversion
+ #endif
+ #if __GNUC__ >= 7 || (__clang_major__ + (__clang_minor__ >= 9) > 3)
+ -Wimplicit-fallthrough
+ #endif
+ #if __GNUC__ + (__GNUC_MINOR__ >= 8) > 4 || (__clang_major__ + (__clang_minor__ >= 9) > 3)
+ -Wno-pedantic
+ #endif
+ #if __GNUC__ + (__GNUC_MINOR__ >= 3) > 4 || (__clang_major__ + (__clang_minor__ >= 9) > 3)
+ -Wno-sign-conversion
+ -Wno-type-limits
+ #endif
+ #if __GNUC__ + (__GNUC_MINOR__ >= 5) > 4
+ -Wno-unsuffixed-float-constants
+ #endif
+EOF
+ gl_command="$CC $CFLAGS $CPPFLAGS -E conftest.c > conftest.out"
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gl_command\""; } >&5
+ (eval $gl_command) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ gl_options=`grep -v '#' conftest.out`
+ for word in $gl_options; do
+ GL_CFLAG_GNULIB_WARNINGS="$GL_CFLAG_GNULIB_WARNINGS $word"
+ done
+ fi
+ rm -f conftest.c conftest.out
fi
+ if false; then
+ GL_COND_LIBTOOL_TRUE=
+ GL_COND_LIBTOOL_FALSE='#'
+else
+ GL_COND_LIBTOOL_TRUE='#'
+ GL_COND_LIBTOOL_FALSE=
+fi
+
+ gl_cond_libtool=false
+ gl_libdeps=
+ gl_ltlibdeps=
+ gl_m4_base='import/m4'
+
+
+
+
+
+
+
+
+
+
+
+
+ gl_source_base='import'
+ gl_source_base_prefix=
+
+
+ if test "$ac_cv_header_winsock2_h" = yes; then
+ GL_COND_OBJ_ACCEPT_TRUE=
+ GL_COND_OBJ_ACCEPT_FALSE='#'
+else
+ GL_COND_OBJ_ACCEPT_TRUE='#'
+ GL_COND_OBJ_ACCEPT_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_ACCEPT_TRUE}" && test -z "${GL_COND_OBJ_ACCEPT_FALSE}"; then
+ GL_COND_OBJ_ACCEPT_TRUE='#'
+ GL_COND_OBJ_ACCEPT_FALSE='#'
+ fi
+
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_ACCEPT=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_ACCEPT 1" >>confdefs.h
+
+
+
+
+
+ if test $ac_cv_func_alloca_works = no; then
+ :
+ fi
+
+ # Define an additional variable used in the Makefile substitution.
+ if test $ac_cv_working_alloca_h = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca as a compiler built-in" >&5
+$as_echo_n "checking for alloca as a compiler built-in... " >&6; }
+if ${gl_cv_rpl_alloca+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#if defined __GNUC__ || defined _AIX || defined _MSC_VER
+ Need own alloca
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "Need own alloca" >/dev/null 2>&1; then :
+ gl_cv_rpl_alloca=yes
+else
+ gl_cv_rpl_alloca=no
+fi
+rm -f conftest*
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_rpl_alloca" >&5
+$as_echo "$gl_cv_rpl_alloca" >&6; }
+ if test $gl_cv_rpl_alloca = yes; then
+
+$as_echo "#define HAVE_ALLOCA 1" >>confdefs.h
+
+ GL_GENERATE_ALLOCA_H=true
+ else
+ GL_GENERATE_ALLOCA_H=false
+ fi
+ else
+ GL_GENERATE_ALLOCA_H=true
+ fi
+
+ if test $ac_cv_working_alloca_h = yes; then
+ HAVE_ALLOCA_H=1
+ else
+ HAVE_ALLOCA_H=0
+ fi
+
- GNULIB_BIND=1
+
+
+
+
+ case "$GL_GENERATE_ALLOCA_H" in
+ false) ALLOCA_H='' ;;
+ true)
+ if test -z "$ALLOCA_H"; then
+ ALLOCA_H="${gl_source_base_prefix}alloca.h"
+ fi
+ ;;
+ *) echo "*** GL_GENERATE_ALLOCA_H is not set correctly" 1>&2; exit 1 ;;
+ esac
+
+
+ if $GL_GENERATE_ALLOCA_H; then
+ GL_GENERATE_ALLOCA_H_TRUE=
+ GL_GENERATE_ALLOCA_H_FALSE='#'
+else
+ GL_GENERATE_ALLOCA_H_TRUE='#'
+ GL_GENERATE_ALLOCA_H_FALSE=
+fi
+:
+ if test -z "${GL_GENERATE_ALLOCA_H_TRUE}" && test -z "${GL_GENERATE_ALLOCA_H_FALSE}"; then
+ GL_GENERATE_ALLOCA_H_TRUE='#'
+ GL_GENERATE_ALLOCA_H_FALSE='#'
+ fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if test "$ac_cv_header_winsock2_h" = yes; then
+ GL_COND_OBJ_BIND_TRUE=
+ GL_COND_OBJ_BIND_FALSE='#'
+else
+ GL_COND_OBJ_BIND_TRUE='#'
+ GL_COND_OBJ_BIND_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_BIND_TRUE}" && test -z "${GL_COND_OBJ_BIND_FALSE}"; then
+ GL_COND_OBJ_BIND_TRUE='#'
+ GL_COND_OBJ_BIND_FALSE='#'
+ fi
+
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_BIND=1
@@ -18479,27 +22682,42 @@ $as_echo "$gl_cv_func_btowc_eof" >&6; }
esac
fi
- if test $HAVE_BTOWC = 0 || test $REPLACE_BTOWC = 1; then
+ if test $HAVE_BTOWC = 0 || test $REPLACE_BTOWC = 1; then
+ GL_COND_OBJ_BTOWC_TRUE=
+ GL_COND_OBJ_BTOWC_FALSE='#'
+else
+ GL_COND_OBJ_BTOWC_TRUE='#'
+ GL_COND_OBJ_BTOWC_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_BTOWC_TRUE}" && test -z "${GL_COND_OBJ_BTOWC_FALSE}"; then
+ GL_COND_OBJ_BTOWC_TRUE='#'
+ GL_COND_OBJ_BTOWC_FALSE='#'
+ fi
+ if test -z "$GL_COND_OBJ_BTOWC_TRUE"; then :
+ :
+
+
+fi
- gl_LIBOBJS="$gl_LIBOBJS btowc.$ac_objext"
- :
- fi
- GNULIB_BTOWC=1
+
+
+ GL_GNULIB_BTOWC=1
@@ -18585,37 +22803,47 @@ $as_echo "$gl_cv___builtin_expect" >&6; }
esac
fi
- if test $HAVE_CANONICALIZE_FILE_NAME = 0 || test $REPLACE_CANONICALIZE_FILE_NAME = 1; then
+
+ if test $HAVE_CANONICALIZE_FILE_NAME = 0 || test $REPLACE_CANONICALIZE_FILE_NAME = 1; then
+ GL_COND_OBJ_CANONICALIZE_LGPL_TRUE=
+ GL_COND_OBJ_CANONICALIZE_LGPL_FALSE='#'
+else
+ GL_COND_OBJ_CANONICALIZE_LGPL_TRUE='#'
+ GL_COND_OBJ_CANONICALIZE_LGPL_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_CANONICALIZE_LGPL_TRUE}" && test -z "${GL_COND_OBJ_CANONICALIZE_LGPL_FALSE}"; then
+ GL_COND_OBJ_CANONICALIZE_LGPL_TRUE='#'
+ GL_COND_OBJ_CANONICALIZE_LGPL_FALSE='#'
+ fi
+cat >>confdefs.h <<_ACEOF
+#define GNULIB_CANONICALIZE_LGPL 1
+_ACEOF
- gl_LIBOBJS="$gl_LIBOBJS canonicalize-lgpl.$ac_objext"
- fi
-cat >>confdefs.h <<_ACEOF
-#define GNULIB_CANONICALIZE_LGPL 1
-_ACEOF
+ GL_GNULIB_CANONICALIZE_FILE_NAME=1
- GNULIB_CANONICALIZE_FILE_NAME=1
+$as_echo "#define GNULIB_TEST_CANONICALIZE_FILE_NAME 1" >>confdefs.h
-$as_echo "#define GNULIB_TEST_CANONICALIZE_FILE_NAME 1" >>confdefs.h
@@ -18624,7 +22852,7 @@ $as_echo "#define GNULIB_TEST_CANONICALIZE_FILE_NAME 1" >>confdefs.h
- GNULIB_REALPATH=1
+ GL_GNULIB_REALPATH=1
@@ -18639,7 +22867,11 @@ $as_echo "#define GNULIB_TEST_REALPATH 1" >>confdefs.h
- GNULIB_CHDIR=1
+
+
+
+
+ GL_GNULIB_CHDIR=1
@@ -18695,50 +22927,64 @@ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have_unlimited_file_name_length" >&5
$as_echo "$gl_cv_have_unlimited_file_name_length" >&6; }
- if test $gl_cv_have_unlimited_file_name_length = no; then
-
-
-
-
-
-
-
- gl_LIBOBJS="$gl_LIBOBJS chdir-long.$ac_objext"
-
- :
+ if test $gl_cv_have_unlimited_file_name_length = no; then
+ GL_COND_OBJ_CHDIR_LONG_TRUE=
+ GL_COND_OBJ_CHDIR_LONG_FALSE='#'
+else
+ GL_COND_OBJ_CHDIR_LONG_TRUE='#'
+ GL_COND_OBJ_CHDIR_LONG_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_CHDIR_LONG_TRUE}" && test -z "${GL_COND_OBJ_CHDIR_LONG_FALSE}"; then
+ GL_COND_OBJ_CHDIR_LONG_TRUE='#'
+ GL_COND_OBJ_CHDIR_LONG_FALSE='#'
fi
- if test $HAVE_CHOWN = 0 || test $REPLACE_CHOWN = 1; then
-
-
-
-
-
+ if test -z "$GL_COND_OBJ_CHDIR_LONG_TRUE"; then :
+ :
+fi
- gl_LIBOBJS="$gl_LIBOBJS chown.$ac_objext"
+ if test $HAVE_CHOWN = 0 || test $REPLACE_CHOWN = 1; then
+ GL_COND_OBJ_CHOWN_TRUE=
+ GL_COND_OBJ_CHOWN_FALSE='#'
+else
+ GL_COND_OBJ_CHOWN_TRUE='#'
+ GL_COND_OBJ_CHOWN_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_CHOWN_TRUE}" && test -z "${GL_COND_OBJ_CHOWN_FALSE}"; then
+ GL_COND_OBJ_CHOWN_TRUE='#'
+ GL_COND_OBJ_CHOWN_FALSE='#'
fi
- if test $REPLACE_CHOWN = 1 && test $ac_cv_func_fchown = no; then
-
-
+ if test $REPLACE_CHOWN = 1 && test $ac_cv_func_fchown = no; then
+ GL_COND_OBJ_FCHOWN_STUB_TRUE=
+ GL_COND_OBJ_FCHOWN_STUB_FALSE='#'
+else
+ GL_COND_OBJ_FCHOWN_STUB_TRUE='#'
+ GL_COND_OBJ_FCHOWN_STUB_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_FCHOWN_STUB_TRUE}" && test -z "${GL_COND_OBJ_FCHOWN_STUB_FALSE}"; then
+ GL_COND_OBJ_FCHOWN_STUB_TRUE='#'
+ GL_COND_OBJ_FCHOWN_STUB_FALSE='#'
+ fi
- gl_LIBOBJS="$gl_LIBOBJS fchown-stub.$ac_objext"
- fi
- GNULIB_CHOWN=1
+ GL_GNULIB_CHOWN=1
@@ -18817,7 +23063,7 @@ if test "$ac_res" != no; then :
LIB_CLOCK_GETTIME=$ac_cv_search_clock_gettime
fi
- for ac_func in clock_gettime clock_settime
+ for ac_func in clock_getres clock_gettime clock_settime
do :
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
@@ -18891,24 +23137,30 @@ done
fi
- if test $REPLACE_CLOSE = 1; then
-
-
+ if test $REPLACE_CLOSE = 1; then
+ GL_COND_OBJ_CLOSE_TRUE=
+ GL_COND_OBJ_CLOSE_FALSE='#'
+else
+ GL_COND_OBJ_CLOSE_TRUE='#'
+ GL_COND_OBJ_CLOSE_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_CLOSE_TRUE}" && test -z "${GL_COND_OBJ_CLOSE_FALSE}"; then
+ GL_COND_OBJ_CLOSE_TRUE='#'
+ GL_COND_OBJ_CLOSE_FALSE='#'
+ fi
- gl_LIBOBJS="$gl_LIBOBJS close.$ac_objext"
- fi
-
- GNULIB_CLOSE=1
+ GL_GNULIB_CLOSE=1
@@ -18954,131 +23206,71 @@ done
REPLACE_CLOSEDIR=1;;
esac
- if test $HAVE_CLOSEDIR = 0 || test $REPLACE_CLOSEDIR = 1; then
-
-
-
-
-
-
-
-
- gl_LIBOBJS="$gl_LIBOBJS closedir.$ac_objext"
+ if test $HAVE_CLOSEDIR = 0 || test $REPLACE_CLOSEDIR = 1; then
+ GL_COND_OBJ_CLOSEDIR_TRUE=
+ GL_COND_OBJ_CLOSEDIR_FALSE='#'
+else
+ GL_COND_OBJ_CLOSEDIR_TRUE='#'
+ GL_COND_OBJ_CLOSEDIR_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_CLOSEDIR_TRUE}" && test -z "${GL_COND_OBJ_CLOSEDIR_FALSE}"; then
+ GL_COND_OBJ_CLOSEDIR_TRUE='#'
+ GL_COND_OBJ_CLOSEDIR_FALSE='#'
fi
- GNULIB_CLOSEDIR=1
-
-$as_echo "#define GNULIB_TEST_CLOSEDIR 1" >>confdefs.h
+ GL_GNULIB_CLOSEDIR=1
- if test "$ac_cv_header_winsock2_h" = yes; then
-
-
+$as_echo "#define GNULIB_TEST_CLOSEDIR 1" >>confdefs.h
- gl_LIBOBJS="$gl_LIBOBJS connect.$ac_objext"
+ if test "$ac_cv_header_winsock2_h" = yes; then
+ GL_COND_OBJ_CONNECT_TRUE=
+ GL_COND_OBJ_CONNECT_FALSE='#'
+else
+ GL_COND_OBJ_CONNECT_TRUE='#'
+ GL_COND_OBJ_CONNECT_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_CONNECT_TRUE}" && test -z "${GL_COND_OBJ_CONNECT_FALSE}"; then
+ GL_COND_OBJ_CONNECT_TRUE='#'
+ GL_COND_OBJ_CONNECT_FALSE='#'
fi
- GNULIB_CONNECT=1
-
-
-
-
-
-$as_echo "#define GNULIB_TEST_CONNECT 1" >>confdefs.h
-
-
-
-
-
-
-
-
-
- if test $gl_cv_have_include_next = yes; then
- gl_cv_next_ctype_h='<'ctype.h'>'
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <ctype.h>" >&5
-$as_echo_n "checking absolute name of <ctype.h>... " >&6; }
-if ${gl_cv_next_ctype_h+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <ctype.h>
-_ACEOF
- case "$host_os" in
- aix*) gl_absname_cpp="$ac_cpp -C" ;;
- *) gl_absname_cpp="$ac_cpp" ;;
- esac
+ GL_GNULIB_CONNECT=1
- case "$host_os" in
- mingw*)
- gl_dirsep_regex='[/\\]'
- ;;
- *)
- gl_dirsep_regex='\/'
- ;;
- esac
- gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
- gl_header_literal_regex=`echo 'ctype.h' \
- | sed -e "$gl_make_literal_regex_sed"`
- gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
- s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
- s|^/[^/]|//&|
- p
- q
- }'
- gl_cv_absolute_ctype_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
- sed -n "$gl_absolute_header_sed"`
- gl_header=$gl_cv_absolute_ctype_h
- gl_cv_next_ctype_h='"'$gl_header'"'
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_ctype_h" >&5
-$as_echo "$gl_cv_next_ctype_h" >&6; }
- fi
- NEXT_CTYPE_H=$gl_cv_next_ctype_h
+$as_echo "#define GNULIB_TEST_CONNECT 1" >>confdefs.h
- if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
- # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
- gl_next_as_first_directive='<'ctype.h'>'
- else
- # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
- gl_next_as_first_directive=$gl_cv_next_ctype_h
- fi
- NEXT_AS_FIRST_DIRECTIVE_CTYPE_H=$gl_next_as_first_directive
@@ -19205,91 +23397,6 @@ $as_echo "#define HAVE_STRUCT_DIRENT_D_TYPE 1" >>confdefs.h
- if test $gl_cv_have_include_next = yes; then
- gl_cv_next_dirent_h='<'dirent.h'>'
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <dirent.h>" >&5
-$as_echo_n "checking absolute name of <dirent.h>... " >&6; }
-if ${gl_cv_next_dirent_h+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
- if test $ac_cv_header_dirent_h = yes; then
-
-
-
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <dirent.h>
-_ACEOF
- case "$host_os" in
- aix*) gl_absname_cpp="$ac_cpp -C" ;;
- *) gl_absname_cpp="$ac_cpp" ;;
- esac
-
- case "$host_os" in
- mingw*)
- gl_dirsep_regex='[/\\]'
- ;;
- *)
- gl_dirsep_regex='\/'
- ;;
- esac
- gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
- gl_header_literal_regex=`echo 'dirent.h' \
- | sed -e "$gl_make_literal_regex_sed"`
- gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
- s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
- s|^/[^/]|//&|
- p
- q
- }'
-
- gl_cv_absolute_dirent_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
- sed -n "$gl_absolute_header_sed"`
-
- gl_header=$gl_cv_absolute_dirent_h
- gl_cv_next_dirent_h='"'$gl_header'"'
- else
- gl_cv_next_dirent_h='<'dirent.h'>'
- fi
-
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_dirent_h" >&5
-$as_echo "$gl_cv_next_dirent_h" >&6; }
- fi
- NEXT_DIRENT_H=$gl_cv_next_dirent_h
-
- if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
- # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
- gl_next_as_first_directive='<'dirent.h'>'
- else
- # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
- gl_next_as_first_directive=$gl_cv_next_dirent_h
- fi
- NEXT_AS_FIRST_DIRECTIVE_DIRENT_H=$gl_next_as_first_directive
-
-
-
-
- if test $ac_cv_header_dirent_h = yes; then
- HAVE_DIRENT_H=1
- else
- HAVE_DIRENT_H=0
- fi
-
-
-
-
-
-
-
-
-
-
-
for ac_func in dirfd
do :
ac_fn_c_check_func "$LINENO" "dirfd" "ac_cv_func_dirfd"
@@ -19355,17 +23462,21 @@ $as_echo "#define REPLACE_DIRFD 1" >>confdefs.h
;;
esac
- if test $ac_cv_func_dirfd = no && test $gl_cv_func_dirfd_macro = no \
- || test $REPLACE_DIRFD = 1; then
-
-
-
-
-
-
+ if test $ac_cv_func_dirfd = no && test $gl_cv_func_dirfd_macro = no || test $REPLACE_DIRFD = 1; then
+ GL_COND_OBJ_DIRFD_TRUE=
+ GL_COND_OBJ_DIRFD_FALSE='#'
+else
+ GL_COND_OBJ_DIRFD_TRUE='#'
+ GL_COND_OBJ_DIRFD_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_DIRFD_TRUE}" && test -z "${GL_COND_OBJ_DIRFD_FALSE}"; then
+ GL_COND_OBJ_DIRFD_TRUE='#'
+ GL_COND_OBJ_DIRFD_FALSE='#'
+ fi
- gl_LIBOBJS="$gl_LIBOBJS dirfd.$ac_objext"
+ if test -z "$GL_COND_OBJ_DIRFD_TRUE"; then :
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to get the file descriptor associated with an open DIR*" >&5
@@ -19416,13 +23527,18 @@ _ACEOF
fi
- fi
+
+fi
+
+
- GNULIB_DIRFD=1
+
+
+ GL_GNULIB_DIRFD=1
@@ -19545,25 +23661,35 @@ $as_echo "$gl_cv_func_dup_works" >&6; }
;;
esac
- if test $REPLACE_DUP = 1; then
-
+ if test $REPLACE_DUP = 1; then
+ GL_COND_OBJ_DUP_TRUE=
+ GL_COND_OBJ_DUP_FALSE='#'
+else
+ GL_COND_OBJ_DUP_TRUE='#'
+ GL_COND_OBJ_DUP_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_DUP_TRUE}" && test -z "${GL_COND_OBJ_DUP_FALSE}"; then
+ GL_COND_OBJ_DUP_TRUE='#'
+ GL_COND_OBJ_DUP_FALSE='#'
+ fi
+ if test -z "$GL_COND_OBJ_DUP_TRUE"; then :
+ :
+fi
- gl_LIBOBJS="$gl_LIBOBJS dup.$ac_objext"
- :
- fi
- GNULIB_DUP=1
+ GL_GNULIB_DUP=1
@@ -19710,25 +23836,35 @@ done
fi
- if test $REPLACE_DUP2 = 1; then
-
+ if test $REPLACE_DUP2 = 1; then
+ GL_COND_OBJ_DUP2_TRUE=
+ GL_COND_OBJ_DUP2_FALSE='#'
+else
+ GL_COND_OBJ_DUP2_TRUE='#'
+ GL_COND_OBJ_DUP2_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_DUP2_TRUE}" && test -z "${GL_COND_OBJ_DUP2_FALSE}"; then
+ GL_COND_OBJ_DUP2_TRUE='#'
+ GL_COND_OBJ_DUP2_FALSE='#'
+ fi
+ if test -z "$GL_COND_OBJ_DUP2_TRUE"; then :
+fi
- gl_LIBOBJS="$gl_LIBOBJS dup2.$ac_objext"
- fi
- GNULIB_DUP2=1
+ GL_GNULIB_DUP2=1
@@ -19744,7 +23880,11 @@ $as_echo "#define GNULIB_TEST_DUP2 1" >>confdefs.h
- GNULIB_ENVIRON=1
+
+
+
+
+ GL_GNULIB_ENVIRON=1
@@ -19756,6 +23896,39 @@ $as_echo "#define GNULIB_TEST_ENVIRON 1" >>confdefs.h
+
+
+
+ case "$GL_GENERATE_ERRNO_H" in
+ false) ERRNO_H='' ;;
+ true)
+ if test -z "$ERRNO_H"; then
+ ERRNO_H="${gl_source_base_prefix}errno.h"
+ fi
+ ;;
+ *) echo "*** GL_GENERATE_ERRNO_H is not set correctly" 1>&2; exit 1 ;;
+ esac
+
+
+ if $GL_GENERATE_ERRNO_H; then
+ GL_GENERATE_ERRNO_H_TRUE=
+ GL_GENERATE_ERRNO_H_FALSE='#'
+else
+ GL_GENERATE_ERRNO_H_TRUE='#'
+ GL_GENERATE_ERRNO_H_FALSE=
+fi
+:
+ if test -z "${GL_GENERATE_ERRNO_H_TRUE}" && test -z "${GL_GENERATE_ERRNO_H_FALSE}"; then
+ GL_GENERATE_ERRNO_H_TRUE='#'
+ GL_GENERATE_ERRNO_H_FALSE='#'
+ fi
+
+
+
+
+
+
+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for error_at_line" >&5
$as_echo_n "checking for error_at_line... " >&6; }
if ${ac_cv_lib_error_at_line+:} false; then :
@@ -19783,22 +23956,30 @@ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_error_at_line" >&5
$as_echo "$ac_cv_lib_error_at_line" >&6; }
- if test $ac_cv_lib_error_at_line = no; then
-
-
-
-
+ if test "$ac_cv_lib_error_at_line" = no; then
+ GL_COND_OBJ_ERROR_TRUE=
+ GL_COND_OBJ_ERROR_FALSE='#'
+else
+ GL_COND_OBJ_ERROR_TRUE='#'
+ GL_COND_OBJ_ERROR_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_ERROR_TRUE}" && test -z "${GL_COND_OBJ_ERROR_FALSE}"; then
+ GL_COND_OBJ_ERROR_TRUE='#'
+ GL_COND_OBJ_ERROR_FALSE='#'
+ fi
+ if test -z "$GL_COND_OBJ_ERROR_TRUE"; then :
- gl_LIBOBJS="$gl_LIBOBJS error.$ac_objext"
:
- fi
+
+fi
@@ -19813,17 +23994,6 @@ $as_echo "$ac_cv_lib_error_at_line" >&6; }
if test $HAVE_FCHDIR = 0; then
-
-
-
-
-
-
-
- gl_LIBOBJS="$gl_LIBOBJS fchdir.$ac_objext"
-
- :
-
$as_echo "#define REPLACE_FCHDIR 1" >>confdefs.h
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether open can visit directories" >&5
@@ -19882,11 +24052,34 @@ $as_echo "#define REPLACE_OPEN_DIRECTORY 1" >>confdefs.h
fi
+ if test $HAVE_FCHDIR = 0; then
+ GL_COND_OBJ_FCHDIR_TRUE=
+ GL_COND_OBJ_FCHDIR_FALSE='#'
+else
+ GL_COND_OBJ_FCHDIR_TRUE='#'
+ GL_COND_OBJ_FCHDIR_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_FCHDIR_TRUE}" && test -z "${GL_COND_OBJ_FCHDIR_FALSE}"; then
+ GL_COND_OBJ_FCHDIR_TRUE='#'
+ GL_COND_OBJ_FCHDIR_FALSE='#'
+ fi
+
+ if test -z "$GL_COND_OBJ_FCHDIR_TRUE"; then :
+
+ :
+
+fi
+
+
+
+
- GNULIB_FCHDIR=1
+
+ GL_GNULIB_FCHDIR=1
@@ -20106,106 +24299,36 @@ $as_echo "$gl_cv_func_fcntl_f_dupfd_cloexec" >&6; }
fi
- if test $HAVE_FCNTL = 0 || test $REPLACE_FCNTL = 1; then
-
-
-
-
-
-
-
-
- gl_LIBOBJS="$gl_LIBOBJS fcntl.$ac_objext"
+ if test $HAVE_FCNTL = 0 || test $REPLACE_FCNTL = 1; then
+ GL_COND_OBJ_FCNTL_TRUE=
+ GL_COND_OBJ_FCNTL_FALSE='#'
+else
+ GL_COND_OBJ_FCNTL_TRUE='#'
+ GL_COND_OBJ_FCNTL_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_FCNTL_TRUE}" && test -z "${GL_COND_OBJ_FCNTL_FALSE}"; then
+ GL_COND_OBJ_FCNTL_TRUE='#'
+ GL_COND_OBJ_FCNTL_FALSE='#'
fi
- GNULIB_FCNTL=1
-
-
-
-
-
-$as_echo "#define GNULIB_TEST_FCNTL 1" >>confdefs.h
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- if test $gl_cv_have_include_next = yes; then
- gl_cv_next_fcntl_h='<'fcntl.h'>'
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <fcntl.h>" >&5
-$as_echo_n "checking absolute name of <fcntl.h>... " >&6; }
-if ${gl_cv_next_fcntl_h+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <fcntl.h>
-_ACEOF
- case "$host_os" in
- aix*) gl_absname_cpp="$ac_cpp -C" ;;
- *) gl_absname_cpp="$ac_cpp" ;;
- esac
- case "$host_os" in
- mingw*)
- gl_dirsep_regex='[/\\]'
- ;;
- *)
- gl_dirsep_regex='\/'
- ;;
- esac
- gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
- gl_header_literal_regex=`echo 'fcntl.h' \
- | sed -e "$gl_make_literal_regex_sed"`
- gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
- s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
- s|^/[^/]|//&|
- p
- q
- }'
- gl_cv_absolute_fcntl_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
- sed -n "$gl_absolute_header_sed"`
- gl_header=$gl_cv_absolute_fcntl_h
- gl_cv_next_fcntl_h='"'$gl_header'"'
+ GL_GNULIB_FCNTL=1
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_fcntl_h" >&5
-$as_echo "$gl_cv_next_fcntl_h" >&6; }
- fi
- NEXT_FCNTL_H=$gl_cv_next_fcntl_h
- if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
- # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
- gl_next_as_first_directive='<'fcntl.h'>'
- else
- # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
- gl_next_as_first_directive=$gl_cv_next_fcntl_h
- fi
- NEXT_AS_FIRST_DIRECTIVE_FCNTL_H=$gl_next_as_first_directive
+$as_echo "#define GNULIB_TEST_FCNTL 1" >>confdefs.h
@@ -20319,24 +24442,30 @@ $as_echo "$gl_cv_func_fdopendir_works" >&6; }
esac
fi
- if test $HAVE_FDOPENDIR = 0 || test $REPLACE_FDOPENDIR = 1; then
-
-
-
+ if test $HAVE_FDOPENDIR = 0 || test $REPLACE_FDOPENDIR = 1; then
+ GL_COND_OBJ_FDOPENDIR_TRUE=
+ GL_COND_OBJ_FDOPENDIR_FALSE='#'
+else
+ GL_COND_OBJ_FDOPENDIR_TRUE='#'
+ GL_COND_OBJ_FDOPENDIR_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_FDOPENDIR_TRUE}" && test -z "${GL_COND_OBJ_FDOPENDIR_FALSE}"; then
+ GL_COND_OBJ_FDOPENDIR_TRUE='#'
+ GL_COND_OBJ_FDOPENDIR_FALSE='#'
+ fi
- gl_LIBOBJS="$gl_LIBOBJS fdopendir.$ac_objext"
- fi
- GNULIB_FDOPENDIR=1
+ GL_GNULIB_FDOPENDIR=1
@@ -20392,24 +24521,30 @@ $as_echo "$gl_cv_func_ffs" >&6; }
HAVE_FFS=0
fi
- if test $HAVE_FFS = 0; then
-
-
-
+ if test $HAVE_FFS = 0; then
+ GL_COND_OBJ_FFS_TRUE=
+ GL_COND_OBJ_FFS_FALSE='#'
+else
+ GL_COND_OBJ_FFS_TRUE='#'
+ GL_COND_OBJ_FFS_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_FFS_TRUE}" && test -z "${GL_COND_OBJ_FFS_FALSE}"; then
+ GL_COND_OBJ_FFS_TRUE='#'
+ GL_COND_OBJ_FFS_FALSE='#'
+ fi
- gl_LIBOBJS="$gl_LIBOBJS ffs.$ac_objext"
- fi
- GNULIB_FFS=1
+ GL_GNULIB_FFS=1
@@ -20467,16 +24602,16 @@ $as_echo "#define FLEXIBLE_ARRAY_MEMBER /**/" >>confdefs.h
- FLOAT_H=
+ GL_GENERATE_FLOAT_H=false
REPLACE_FLOAT_LDBL=0
case "$host_os" in
aix* | beos* | openbsd* | mirbsd* | irix*)
- FLOAT_H=float.h
+ GL_GENERATE_FLOAT_H=true
;;
freebsd* | dragonfly*)
case "$host_cpu" in
i[34567]86 )
- FLOAT_H=float.h
+ GL_GENERATE_FLOAT_H=true
;;
x86_64 )
# On x86_64 systems, the C compiler may still be generating
@@ -20493,7 +24628,7 @@ _ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
else
- FLOAT_H=float.h
+ GL_GENERATE_FLOAT_H=true
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
;;
@@ -20502,14 +24637,14 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
linux*)
case "$host_cpu" in
powerpc*)
- FLOAT_H=float.h
+ GL_GENERATE_FLOAT_H=true
;;
esac
;;
esac
case "$host_os" in
aix* | freebsd* | dragonfly* | linux*)
- if test -n "$FLOAT_H"; then
+ if $GL_GENERATE_FLOAT_H; then
REPLACE_FLOAT_LDBL=1
fi
;;
@@ -20576,11 +24711,11 @@ $as_echo "$gl_cv_func_itold_works" >&6; }
case "$gl_cv_func_itold_works" in
*no)
REPLACE_ITOLD=1
- FLOAT_H=float.h
+ GL_GENERATE_FLOAT_H=true
;;
esac
- if test -n "$FLOAT_H"; then
+ if $GL_GENERATE_FLOAT_H; then
@@ -20630,8 +24765,8 @@ _ACEOF
gl_cv_absolute_float_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
sed -n "$gl_absolute_header_sed"`
- gl_header=$gl_cv_absolute_float_h
- gl_cv_next_float_h='"'$gl_header'"'
+ gl_header=$gl_cv_absolute_float_h
+ gl_cv_next_float_h='"'$gl_header'"'
fi
@@ -20654,29 +24789,34 @@ $as_echo "$gl_cv_next_float_h" >&6; }
fi
- if test -n "$FLOAT_H"; then
- GL_GENERATE_FLOAT_H_TRUE=
- GL_GENERATE_FLOAT_H_FALSE='#'
-else
- GL_GENERATE_FLOAT_H_TRUE='#'
- GL_GENERATE_FLOAT_H_FALSE=
-fi
-
-
-
- if test $REPLACE_FLOAT_LDBL = 1; then
-
-
+ case "$GL_GENERATE_FLOAT_H" in
+ false) FLOAT_H='' ;;
+ true)
+ if test -z "$FLOAT_H"; then
+ FLOAT_H="${gl_source_base_prefix}float.h"
+ fi
+ ;;
+ *) echo "*** GL_GENERATE_FLOAT_H is not set correctly" 1>&2; exit 1 ;;
+ esac
- gl_LIBOBJS="$gl_LIBOBJS float.$ac_objext"
+ if $GL_GENERATE_FLOAT_H; then
+ GL_GENERATE_FLOAT_H_TRUE=
+ GL_GENERATE_FLOAT_H_FALSE='#'
+else
+ GL_GENERATE_FLOAT_H_TRUE='#'
+ GL_GENERATE_FLOAT_H_FALSE=
+fi
+:
+ if test -z "${GL_GENERATE_FLOAT_H_TRUE}" && test -z "${GL_GENERATE_FLOAT_H_FALSE}"; then
+ GL_GENERATE_FLOAT_H_TRUE='#'
+ GL_GENERATE_FLOAT_H_FALSE='#'
fi
- if test $REPLACE_ITOLD = 1; then
@@ -20684,14 +24824,37 @@ fi
+ if test $REPLACE_FLOAT_LDBL = 1; then
+ GL_COND_OBJ_FLOAT_TRUE=
+ GL_COND_OBJ_FLOAT_FALSE='#'
+else
+ GL_COND_OBJ_FLOAT_TRUE='#'
+ GL_COND_OBJ_FLOAT_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_FLOAT_TRUE}" && test -z "${GL_COND_OBJ_FLOAT_FALSE}"; then
+ GL_COND_OBJ_FLOAT_TRUE='#'
+ GL_COND_OBJ_FLOAT_FALSE='#'
+ fi
- gl_LIBOBJS="$gl_LIBOBJS itold.$ac_objext"
+ if test $REPLACE_ITOLD = 1; then
+ GL_COND_OBJ_ITOLD_TRUE=
+ GL_COND_OBJ_ITOLD_FALSE='#'
+else
+ GL_COND_OBJ_ITOLD_TRUE='#'
+ GL_COND_OBJ_ITOLD_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_ITOLD_TRUE}" && test -z "${GL_COND_OBJ_ITOLD_FALSE}"; then
+ GL_COND_OBJ_ITOLD_TRUE='#'
+ GL_COND_OBJ_ITOLD_FALSE='#'
fi
+
gl_fnmatch_required_lowercase=`
echo $gl_fnmatch_required | LC_ALL=C tr '[A-Z]' '[a-z]'
`
@@ -20830,17 +24993,45 @@ $as_echo "$ac_res" >&6; }
if test $HAVE_FNMATCH = 0 || test $REPLACE_FNMATCH = 1; then
- FNMATCH_H='fnmatch.h'
- if test -n "$FNMATCH_H"; then
+
+
+
+
+ GL_GENERATE_FNMATCH_H=true
+
+ fi
+
+
+
+
+
+ case "$GL_GENERATE_FNMATCH_H" in
+ false) FNMATCH_H='' ;;
+ true)
+ if test -z "$FNMATCH_H"; then
+ FNMATCH_H="${gl_source_base_prefix}fnmatch.h"
+ fi
+ ;;
+ *) echo "*** GL_GENERATE_FNMATCH_H is not set correctly" 1>&2; exit 1 ;;
+ esac
+
+
+ if $GL_GENERATE_FNMATCH_H; then
GL_GENERATE_FNMATCH_H_TRUE=
GL_GENERATE_FNMATCH_H_FALSE='#'
else
GL_GENERATE_FNMATCH_H_TRUE='#'
GL_GENERATE_FNMATCH_H_FALSE=
fi
+:
+ if test -z "${GL_GENERATE_FNMATCH_H_TRUE}" && test -z "${GL_GENERATE_FNMATCH_H_FALSE}"; then
+ GL_GENERATE_FNMATCH_H_TRUE='#'
+ GL_GENERATE_FNMATCH_H_FALSE='#'
+ fi
+
+
- fi
if test $HAVE_FNMATCH = 0 || test $REPLACE_FNMATCH = 1; then
@@ -20863,7 +25054,11 @@ fi
- GNULIB_FNMATCH=1
+
+
+
+
+ GL_GNULIB_FNMATCH=1
@@ -20905,6 +25100,44 @@ _ACEOF
+
+
+
+
+
+
+ case "$GL_GENERATE_FNMATCH_H" in
+ false) FNMATCH_H='' ;;
+ true)
+ if test -z "$FNMATCH_H"; then
+ FNMATCH_H="${gl_source_base_prefix}fnmatch.h"
+ fi
+ ;;
+ *) echo "*** GL_GENERATE_FNMATCH_H is not set correctly" 1>&2; exit 1 ;;
+ esac
+
+
+ if $GL_GENERATE_FNMATCH_H; then
+ GL_GENERATE_FNMATCH_H_TRUE=
+ GL_GENERATE_FNMATCH_H_FALSE='#'
+else
+ GL_GENERATE_FNMATCH_H_TRUE='#'
+ GL_GENERATE_FNMATCH_H_FALSE=
+fi
+:
+ if test -z "${GL_GENERATE_FNMATCH_H_TRUE}" && test -z "${GL_GENERATE_FNMATCH_H_FALSE}"; then
+ GL_GENERATE_FNMATCH_H_TRUE='#'
+ GL_GENERATE_FNMATCH_H_FALSE='#'
+ fi
+
+
+
+
+
+
+
+
+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether free is known to preserve errno" >&5
$as_echo_n "checking whether free is known to preserve errno... " >&6; }
if ${gl_cv_func_free_preserves_errno+:} false; then :
@@ -20940,29 +25173,43 @@ fi
$as_echo "$gl_cv_func_free_preserves_errno" >&6; }
case $gl_cv_func_free_preserves_errno in
- *yes) ;;
+ *yes)
+
+$as_echo "#define HAVE_FREE_POSIX 1" >>confdefs.h
+
+ ;;
*) REPLACE_FREE=1 ;;
esac
- if test $REPLACE_FREE = 1; then
+ if test $REPLACE_FREE = 1; then
+ GL_COND_OBJ_FREE_TRUE=
+ GL_COND_OBJ_FREE_FALSE='#'
+else
+ GL_COND_OBJ_FREE_TRUE='#'
+ GL_COND_OBJ_FREE_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_FREE_TRUE}" && test -z "${GL_COND_OBJ_FREE_FALSE}"; then
+ GL_COND_OBJ_FREE_TRUE='#'
+ GL_COND_OBJ_FREE_FALSE='#'
+ fi
+ if test -z "$GL_COND_OBJ_FREE_TRUE"; then :
+ :
+fi
- gl_LIBOBJS="$gl_LIBOBJS free.$ac_objext"
-
- :
- fi
- GNULIB_FREE_POSIX=1
+ GL_GNULIB_FREE_POSIX=1
@@ -20990,7 +25237,11 @@ $as_echo "#define GNULIB_TEST_FREE_POSIX 1" >>confdefs.h
- GNULIB_FREXP=1
+
+
+
+
+ GL_GNULIB_FREXP=1
@@ -21018,7 +25269,11 @@ $as_echo "#define GNULIB_TEST_FREXP 1" >>confdefs.h
- GNULIB_FREXPL=1
+
+
+
+
+ GL_GNULIB_FREXPL=1
@@ -21056,16 +25311,21 @@ $as_echo "#define GNULIB_TEST_FREXPL 1" >>confdefs.h
fi
- if test $REPLACE_FSTAT = 1; then
-
-
-
-
-
-
+ if test $REPLACE_FSTAT = 1; then
+ GL_COND_OBJ_FSTAT_TRUE=
+ GL_COND_OBJ_FSTAT_FALSE='#'
+else
+ GL_COND_OBJ_FSTAT_TRUE='#'
+ GL_COND_OBJ_FSTAT_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_FSTAT_TRUE}" && test -z "${GL_COND_OBJ_FSTAT_FALSE}"; then
+ GL_COND_OBJ_FSTAT_TRUE='#'
+ GL_COND_OBJ_FSTAT_FALSE='#'
+ fi
- gl_LIBOBJS="$gl_LIBOBJS fstat.$ac_objext"
+ if test -z "$GL_COND_OBJ_FSTAT_TRUE"; then :
case "$host_os" in
mingw*)
@@ -21086,13 +25346,18 @@ $as_echo "#define GNULIB_TEST_FREXPL 1" >>confdefs.h
:
- fi
+
+fi
- GNULIB_FSTAT=1
+
+
+
+
+ GL_GNULIB_FSTAT=1
@@ -21170,24 +25435,30 @@ $as_echo "#define HAVE_WORKING_FSTATAT_ZERO_FLAG 1" >>confdefs.h
esac
fi
- if test $HAVE_FSTATAT = 0 || test $REPLACE_FSTATAT = 1; then
-
-
-
+ if test $HAVE_FSTATAT = 0 || test $REPLACE_FSTATAT = 1; then
+ GL_COND_OBJ_FSTATAT_TRUE=
+ GL_COND_OBJ_FSTATAT_FALSE='#'
+else
+ GL_COND_OBJ_FSTATAT_TRUE='#'
+ GL_COND_OBJ_FSTATAT_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_FSTATAT_TRUE}" && test -z "${GL_COND_OBJ_FSTATAT_FALSE}"; then
+ GL_COND_OBJ_FSTATAT_TRUE='#'
+ GL_COND_OBJ_FSTATAT_FALSE='#'
+ fi
- gl_LIBOBJS="$gl_LIBOBJS fstatat.$ac_objext"
- fi
- GNULIB_FSTATAT=1
+ GL_GNULIB_FSTATAT=1
@@ -21521,10 +25792,8 @@ else
ac_clean_files="$ac_clean_files confdir-14B---"
if test "$cross_compiling" = yes; then :
case "$host_os" in
- # Guess yes on musl systems.
- *-musl*) gl_cv_func_getcwd_succeeds_beyond_4k="guessing yes" ;;
- # Guess no otherwise, even on glibc systems.
- *) gl_cv_func_getcwd_succeeds_beyond_4k="guessing no"
+ # Guess no otherwise, even on glibc systems and musl systems.
+ *) gl_cv_func_getcwd_succeeds_beyond_4k="guessing no"
esac
else
@@ -21650,7 +25919,7 @@ _ACEOF
if ac_fn_c_try_run "$LINENO"; then :
gl_cv_func_getcwd_succeeds_beyond_4k=yes
else
- ret=$?
+ ret=$?
if test $ret -ge 128 || test $ret = 4; then
gl_cv_func_getcwd_succeeds_beyond_4k=no
else
@@ -21707,36 +25976,46 @@ $as_echo "#define HAVE_GETCWD_SHORTER 1" >>confdefs.h
REPLACE_GETCWD=1
fi
- if test $REPLACE_GETCWD = 1; then
+ if test $REPLACE_GETCWD = 1; then
+ GL_COND_OBJ_GETCWD_TRUE=
+ GL_COND_OBJ_GETCWD_FALSE='#'
+else
+ GL_COND_OBJ_GETCWD_TRUE='#'
+ GL_COND_OBJ_GETCWD_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_GETCWD_TRUE}" && test -z "${GL_COND_OBJ_GETCWD_FALSE}"; then
+ GL_COND_OBJ_GETCWD_TRUE='#'
+ GL_COND_OBJ_GETCWD_FALSE='#'
+ fi
+ if test -z "$GL_COND_OBJ_GETCWD_TRUE"; then :
+ :
- gl_LIBOBJS="$gl_LIBOBJS getcwd.$ac_objext"
+fi
+cat >>confdefs.h <<_ACEOF
+#define GNULIB_GETCWD 1
+_ACEOF
- :
- fi
-cat >>confdefs.h <<_ACEOF
-#define GNULIB_GETCWD 1
-_ACEOF
-
- GNULIB_GETCWD=1
+ GL_GNULIB_GETCWD=1
@@ -21758,24 +26037,30 @@ $as_echo "#define GNULIB_TEST_GETCWD 1" >>confdefs.h
;;
esac
- if test $REPLACE_GETCWD = 1; then
-
-
-
+ if test $REPLACE_GETCWD = 1; then
+ GL_COND_OBJ_GETCWD_LGPL_TRUE=
+ GL_COND_OBJ_GETCWD_LGPL_FALSE='#'
+else
+ GL_COND_OBJ_GETCWD_LGPL_TRUE='#'
+ GL_COND_OBJ_GETCWD_LGPL_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_GETCWD_LGPL_TRUE}" && test -z "${GL_COND_OBJ_GETCWD_LGPL_FALSE}"; then
+ GL_COND_OBJ_GETCWD_LGPL_TRUE='#'
+ GL_COND_OBJ_GETCWD_LGPL_FALSE='#'
+ fi
- gl_LIBOBJS="$gl_LIBOBJS getcwd-lgpl.$ac_objext"
- fi
- GNULIB_GETCWD=1
+ GL_GNULIB_GETCWD=1
@@ -21887,16 +26172,21 @@ $as_echo "$gl_cv_func_working_getdelim" >&6; }
HAVE_DECL_GETDELIM=0
fi
- if test $HAVE_GETDELIM = 0 || test $REPLACE_GETDELIM = 1; then
-
-
-
-
-
-
+ if test $HAVE_GETDELIM = 0 || test $REPLACE_GETDELIM = 1; then
+ GL_COND_OBJ_GETDELIM_TRUE=
+ GL_COND_OBJ_GETDELIM_FALSE='#'
+else
+ GL_COND_OBJ_GETDELIM_TRUE='#'
+ GL_COND_OBJ_GETDELIM_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_GETDELIM_TRUE}" && test -z "${GL_COND_OBJ_GETDELIM_FALSE}"; then
+ GL_COND_OBJ_GETDELIM_TRUE='#'
+ GL_COND_OBJ_GETDELIM_FALSE='#'
+ fi
- gl_LIBOBJS="$gl_LIBOBJS getdelim.$ac_objext"
+ if test -z "$GL_COND_OBJ_GETDELIM_TRUE"; then :
for ac_func in flockfile funlockfile
@@ -21923,13 +26213,18 @@ cat >>confdefs.h <<_ACEOF
_ACEOF
- fi
+
+fi
+
+
+
- GNULIB_GETDELIM=1
+
+ GL_GNULIB_GETDELIM=1
@@ -22007,25 +26302,35 @@ $as_echo "$gl_cv_func_getdtablesize_works" >&6; }
HAVE_GETDTABLESIZE=0
fi
- if test $HAVE_GETDTABLESIZE = 0 || test $REPLACE_GETDTABLESIZE = 1; then
+ if test $HAVE_GETDTABLESIZE = 0 || test $REPLACE_GETDTABLESIZE = 1; then
+ GL_COND_OBJ_GETDTABLESIZE_TRUE=
+ GL_COND_OBJ_GETDTABLESIZE_FALSE='#'
+else
+ GL_COND_OBJ_GETDTABLESIZE_TRUE='#'
+ GL_COND_OBJ_GETDTABLESIZE_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_GETDTABLESIZE_TRUE}" && test -z "${GL_COND_OBJ_GETDTABLESIZE_FALSE}"; then
+ GL_COND_OBJ_GETDTABLESIZE_TRUE='#'
+ GL_COND_OBJ_GETDTABLESIZE_FALSE='#'
+ fi
+ if test -z "$GL_COND_OBJ_GETDTABLESIZE_TRUE"; then :
+ :
+fi
- gl_LIBOBJS="$gl_LIBOBJS getdtablesize.$ac_objext"
-
- :
- fi
- GNULIB_GETDTABLESIZE=1
+ GL_GNULIB_GETDTABLESIZE=1
@@ -22144,27 +26449,37 @@ $as_echo "$am_cv_func_working_getline" >&6; }
;;
esac
- if test $REPLACE_GETLINE = 1; then
-
+ if test $REPLACE_GETLINE = 1; then
+ GL_COND_OBJ_GETLINE_TRUE=
+ GL_COND_OBJ_GETLINE_FALSE='#'
+else
+ GL_COND_OBJ_GETLINE_TRUE='#'
+ GL_COND_OBJ_GETLINE_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_GETLINE_TRUE}" && test -z "${GL_COND_OBJ_GETLINE_FALSE}"; then
+ GL_COND_OBJ_GETLINE_TRUE='#'
+ GL_COND_OBJ_GETLINE_FALSE='#'
+ fi
+ if test -z "$GL_COND_OBJ_GETLINE_TRUE"; then :
+ :
+fi
- gl_LIBOBJS="$gl_LIBOBJS getline.$ac_objext"
- :
- fi
- GNULIB_GETLINE=1
+ GL_GNULIB_GETLINE=1
@@ -22256,27 +26571,37 @@ $as_echo "$gl_cv_func_getlogin_r_works" >&6; }
esac
fi
- if test $HAVE_GETLOGIN_R = 0 || test $REPLACE_GETLOGIN_R = 1; then
-
+ if test $HAVE_GETLOGIN_R = 0 || test $REPLACE_GETLOGIN_R = 1; then
+ GL_COND_OBJ_GETLOGIN_R_TRUE=
+ GL_COND_OBJ_GETLOGIN_R_FALSE='#'
+else
+ GL_COND_OBJ_GETLOGIN_R_TRUE='#'
+ GL_COND_OBJ_GETLOGIN_R_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_GETLOGIN_R_TRUE}" && test -z "${GL_COND_OBJ_GETLOGIN_R_FALSE}"; then
+ GL_COND_OBJ_GETLOGIN_R_TRUE='#'
+ GL_COND_OBJ_GETLOGIN_R_FALSE='#'
+ fi
+ if test -z "$GL_COND_OBJ_GETLOGIN_R_TRUE"; then :
- gl_LIBOBJS="$gl_LIBOBJS getlogin_r.$ac_objext"
+fi
- fi
- GNULIB_GETLOGIN_R=1
+ GL_GNULIB_GETLOGIN_R=1
@@ -22483,24 +26808,30 @@ $as_echo "#define HAVE_LIB_BCRYPT 1" >>confdefs.h
esac
- if test $HAVE_GETRANDOM = 0 || test $REPLACE_GETRANDOM = 1; then
-
-
-
+ if test $HAVE_GETRANDOM = 0 || test $REPLACE_GETRANDOM = 1; then
+ GL_COND_OBJ_GETRANDOM_TRUE=
+ GL_COND_OBJ_GETRANDOM_FALSE='#'
+else
+ GL_COND_OBJ_GETRANDOM_TRUE='#'
+ GL_COND_OBJ_GETRANDOM_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_GETRANDOM_TRUE}" && test -z "${GL_COND_OBJ_GETRANDOM_FALSE}"; then
+ GL_COND_OBJ_GETRANDOM_TRUE='#'
+ GL_COND_OBJ_GETRANDOM_FALSE='#'
+ fi
- gl_LIBOBJS="$gl_LIBOBJS getrandom.$ac_objext"
- fi
- GNULIB_GETRANDOM=1
+ GL_GNULIB_GETRANDOM=1
@@ -22596,25 +26927,35 @@ cat >>confdefs.h <<_ACEOF
_ACEOF
- if test $HAVE_GETTIMEOFDAY = 0 || test $REPLACE_GETTIMEOFDAY = 1; then
-
+ if test $HAVE_GETTIMEOFDAY = 0 || test $REPLACE_GETTIMEOFDAY = 1; then
+ GL_COND_OBJ_GETTIMEOFDAY_TRUE=
+ GL_COND_OBJ_GETTIMEOFDAY_FALSE='#'
+else
+ GL_COND_OBJ_GETTIMEOFDAY_TRUE='#'
+ GL_COND_OBJ_GETTIMEOFDAY_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_GETTIMEOFDAY_TRUE}" && test -z "${GL_COND_OBJ_GETTIMEOFDAY_FALSE}"; then
+ GL_COND_OBJ_GETTIMEOFDAY_TRUE='#'
+ GL_COND_OBJ_GETTIMEOFDAY_FALSE='#'
+ fi
+ if test -z "$GL_COND_OBJ_GETTIMEOFDAY_TRUE"; then :
+ :
+fi
- gl_LIBOBJS="$gl_LIBOBJS gettimeofday.$ac_objext"
- :
- fi
- GNULIB_GETTIMEOFDAY=1
+ GL_GNULIB_GETTIMEOFDAY=1
@@ -22714,6 +27055,66 @@ $as_echo "$gl_cv_glob_lists_symlinks" >&6; }
esac
fi
+ if test $REPLACE_GLOB = 0; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether glob NOTDIR*/ omits symlink to nondir" >&5
+$as_echo_n "checking whether glob NOTDIR*/ omits symlink to nondir... " >&6; }
+if ${gl_cv_glob_omit_nondir_symlinks+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test $cross_compiling != yes; then
+ if ln -s conf$$-file conf$$-globtest 2>/dev/null && touch conf$$-file
+ then
+ gl_cv_glob_omit_nondir_symlinks=maybe
+ else
+ # If we can't make a symlink, then we cannot test this issue. Be
+ # pessimistic about this.
+ gl_cv_glob_omit_nondir_symlinks=no
+ fi
+ if test $gl_cv_glob_omit_nondir_symlinks = maybe; then
+ if test "$cross_compiling" = yes; then :
+ :
+
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stddef.h>
+ #include <glob.h>
+int
+main ()
+{
+glob_t found;
+ if (glob ("conf*-globtest/", 0, NULL, &found) != GLOB_NOMATCH)
+ return 1;
+ globfree (&found);
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+ gl_cv_glob_omit_nondir_symlinks=yes
+else
+ gl_cv_glob_omit_nondir_symlinks=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ fi
+ rm -f conf$$-file conf$$-globtest
+ else
+ gl_cv_glob_omit_nondir_symlinks="$gl_cross_guess_normal"
+ fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_glob_omit_nondir_symlinks" >&5
+$as_echo "$gl_cv_glob_omit_nondir_symlinks" >&6; }
+ case "$gl_cv_glob_omit_nondir_symlinks" in
+ *yes) ;;
+ *) REPLACE_GLOB=1 ;;
+ esac
+ fi
+
fi
if test $ac_cv_func_glob_pattern_p = no; then
@@ -22727,69 +27128,137 @@ $as_echo "$gl_cv_glob_lists_symlinks" >&6; }
if test $HAVE_GLOB = 0 || test $REPLACE_GLOB = 1; then
- GLOB_H='glob.h'
- if test -n "$GLOB_H"; then
+
+
+
+
+ GL_GENERATE_GLOB_H=true
+
+ fi
+
+
+
+
+
+ case "$GL_GENERATE_GLOB_H" in
+ false) GLOB_H='' ;;
+ true)
+ if test -z "$GLOB_H"; then
+ GLOB_H="${gl_source_base_prefix}glob.h"
+ fi
+ ;;
+ *) echo "*** GL_GENERATE_GLOB_H is not set correctly" 1>&2; exit 1 ;;
+ esac
+
+
+ if $GL_GENERATE_GLOB_H; then
GL_GENERATE_GLOB_H_TRUE=
GL_GENERATE_GLOB_H_FALSE='#'
else
GL_GENERATE_GLOB_H_TRUE='#'
GL_GENERATE_GLOB_H_FALSE=
fi
+:
+ if test -z "${GL_GENERATE_GLOB_H_TRUE}" && test -z "${GL_GENERATE_GLOB_H_FALSE}"; then
+ GL_GENERATE_GLOB_H_TRUE='#'
+ GL_GENERATE_GLOB_H_FALSE='#'
+ fi
- fi
- if test $HAVE_GLOB = 0 || test $REPLACE_GLOB = 1; then
+ if test $HAVE_GLOB = 0 || test $REPLACE_GLOB = 1; then
+ GL_COND_OBJ_GLOB_TRUE=
+ GL_COND_OBJ_GLOB_FALSE='#'
+else
+ GL_COND_OBJ_GLOB_TRUE='#'
+ GL_COND_OBJ_GLOB_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_GLOB_TRUE}" && test -z "${GL_COND_OBJ_GLOB_FALSE}"; then
+ GL_COND_OBJ_GLOB_TRUE='#'
+ GL_COND_OBJ_GLOB_FALSE='#'
+ fi
+ if test -z "$GL_COND_OBJ_GLOB_TRUE"; then :
- gl_LIBOBJS="$gl_LIBOBJS glob.$ac_objext"
+fi
+ if test $HAVE_GLOB_PATTERN_P = 0 || test $REPLACE_GLOB_PATTERN_P = 1; then
+ GL_COND_OBJ_GLOB_PATTERN_P_TRUE=
+ GL_COND_OBJ_GLOB_PATTERN_P_FALSE='#'
+else
+ GL_COND_OBJ_GLOB_PATTERN_P_TRUE='#'
+ GL_COND_OBJ_GLOB_PATTERN_P_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_GLOB_PATTERN_P_TRUE}" && test -z "${GL_COND_OBJ_GLOB_PATTERN_P_FALSE}"; then
+ GL_COND_OBJ_GLOB_PATTERN_P_TRUE='#'
+ GL_COND_OBJ_GLOB_PATTERN_P_FALSE='#'
+ fi
- gl_LIBOBJS="$gl_LIBOBJS globfree.$ac_objext"
+ GL_GNULIB_GLOB=1
- fi
- if test $HAVE_GLOB_PATTERN_P = 0 || test $REPLACE_GLOB_PATTERN_P = 1; then
+$as_echo "#define GNULIB_TEST_GLOB 1" >>confdefs.h
+
- gl_LIBOBJS="$gl_LIBOBJS glob_pattern_p.$ac_objext"
- fi
- GNULIB_GLOB=1
+ case "$GL_GENERATE_GLOB_H" in
+ false) GLOB_H='' ;;
+ true)
+ if test -z "$GLOB_H"; then
+ GLOB_H="${gl_source_base_prefix}glob.h"
+ fi
+ ;;
+ *) echo "*** GL_GENERATE_GLOB_H is not set correctly" 1>&2; exit 1 ;;
+ esac
+ if $GL_GENERATE_GLOB_H; then
+ GL_GENERATE_GLOB_H_TRUE=
+ GL_GENERATE_GLOB_H_FALSE='#'
+else
+ GL_GENERATE_GLOB_H_TRUE='#'
+ GL_GENERATE_GLOB_H_FALSE=
+fi
+:
+ if test -z "${GL_GENERATE_GLOB_H_TRUE}" && test -z "${GL_GENERATE_GLOB_H_FALSE}"; then
+ GL_GENERATE_GLOB_H_TRUE='#'
+ GL_GENERATE_GLOB_H_FALSE='#'
+ fi
+
-$as_echo "#define GNULIB_TEST_GLOB 1" >>confdefs.h
@@ -22956,293 +27425,47 @@ _ACEOF
fi
- if test $HAVE_INET_NTOP = 0 || test $REPLACE_INET_NTOP = 1; then
-
-
-
-
-
-
-
-
- gl_LIBOBJS="$gl_LIBOBJS inet_ntop.$ac_objext"
-
-
-
-
- fi
-
-
-
-
-
- GNULIB_INET_NTOP=1
-
-
-
-
-
-
-
- PRIPTR_PREFIX=
- if test -n "$STDINT_H"; then
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
- #ifdef _WIN64
- LLP64
- #endif
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- PRIPTR_PREFIX='"l"'
+ if test $HAVE_INET_NTOP = 0 || test $REPLACE_INET_NTOP = 1; then
+ GL_COND_OBJ_INET_NTOP_TRUE=
+ GL_COND_OBJ_INET_NTOP_FALSE='#'
else
- PRIPTR_PREFIX='"ll"'
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- else
- for glpfx in '' l ll I64; do
- case $glpfx in
- '') gltype1='int';;
- l) gltype1='long int';;
- ll) gltype1='long long int';;
- I64) gltype1='__int64';;
- esac
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdint.h>
- extern intptr_t foo;
- extern $gltype1 foo;
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- PRIPTR_PREFIX='"'$glpfx'"'
+ GL_COND_OBJ_INET_NTOP_TRUE='#'
+ GL_COND_OBJ_INET_NTOP_FALSE=
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- test -n "$PRIPTR_PREFIX" && break
- done
+:
+ if test -z "${GL_COND_OBJ_INET_NTOP_TRUE}" && test -z "${GL_COND_OBJ_INET_NTOP_FALSE}"; then
+ GL_COND_OBJ_INET_NTOP_TRUE='#'
+ GL_COND_OBJ_INET_NTOP_FALSE='#'
fi
+ if test -z "$GL_COND_OBJ_INET_NTOP_TRUE"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether INT32_MAX < INTMAX_MAX" >&5
-$as_echo_n "checking whether INT32_MAX < INTMAX_MAX... " >&6; }
-if ${gl_cv_test_INT32_MAX_LT_INTMAX_MAX+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-/* Work also in C++ mode. */
- #define __STDC_LIMIT_MACROS 1
- /* Work if build is not clean. */
- #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H
- #include <limits.h>
- #if HAVE_STDINT_H
- #include <stdint.h>
- #endif
- #if defined INT32_MAX && defined INTMAX_MAX
- #define CONDITION (INT32_MAX < INTMAX_MAX)
- #else
- #define CONDITION (sizeof (int) < sizeof (long long int))
- #endif
- int test[CONDITION ? 1 : -1];
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- gl_cv_test_INT32_MAX_LT_INTMAX_MAX=yes
-else
- gl_cv_test_INT32_MAX_LT_INTMAX_MAX=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_test_INT32_MAX_LT_INTMAX_MAX" >&5
-$as_echo "$gl_cv_test_INT32_MAX_LT_INTMAX_MAX" >&6; }
- if test $gl_cv_test_INT32_MAX_LT_INTMAX_MAX = yes; then
- INT32_MAX_LT_INTMAX_MAX=1;
- else
- INT32_MAX_LT_INTMAX_MAX=0;
- fi
- if test $APPLE_UNIVERSAL_BUILD = 0; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether INT64_MAX == LONG_MAX" >&5
-$as_echo_n "checking whether INT64_MAX == LONG_MAX... " >&6; }
-if ${gl_cv_test_INT64_MAX_EQ_LONG_MAX+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-/* Work also in C++ mode. */
- #define __STDC_LIMIT_MACROS 1
- /* Work if build is not clean. */
- #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H
- #include <limits.h>
- #if HAVE_STDINT_H
- #include <stdint.h>
- #endif
- #if defined INT64_MAX
- #define CONDITION (INT64_MAX == LONG_MAX)
- #else
- #define CONDITION (sizeof (long long int) == sizeof (long int))
- #endif
- int test[CONDITION ? 1 : -1];
-int
-main ()
-{
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- gl_cv_test_INT64_MAX_EQ_LONG_MAX=yes
-else
- gl_cv_test_INT64_MAX_EQ_LONG_MAX=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_test_INT64_MAX_EQ_LONG_MAX" >&5
-$as_echo "$gl_cv_test_INT64_MAX_EQ_LONG_MAX" >&6; }
- if test $gl_cv_test_INT64_MAX_EQ_LONG_MAX = yes; then
- INT64_MAX_EQ_LONG_MAX=1;
- else
- INT64_MAX_EQ_LONG_MAX=0;
- fi
- else
- INT64_MAX_EQ_LONG_MAX=-1
- fi
+ GL_GNULIB_INET_NTOP=1
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether UINT32_MAX < UINTMAX_MAX" >&5
-$as_echo_n "checking whether UINT32_MAX < UINTMAX_MAX... " >&6; }
-if ${gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-/* Work also in C++ mode. */
- #define __STDC_LIMIT_MACROS 1
- /* Work if build is not clean. */
- #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H
- #include <limits.h>
- #if HAVE_STDINT_H
- #include <stdint.h>
- #endif
- #if defined UINT32_MAX && defined UINTMAX_MAX
- #define CONDITION (UINT32_MAX < UINTMAX_MAX)
- #else
- #define CONDITION (sizeof (unsigned int) < sizeof (unsigned long long int))
- #endif
- int test[CONDITION ? 1 : -1];
-int
-main ()
-{
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX=yes
-else
- gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX" >&5
-$as_echo "$gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX" >&6; }
- if test $gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX = yes; then
- UINT32_MAX_LT_UINTMAX_MAX=1;
- else
- UINT32_MAX_LT_UINTMAX_MAX=0;
- fi
- if test $APPLE_UNIVERSAL_BUILD = 0; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether UINT64_MAX == ULONG_MAX" >&5
-$as_echo_n "checking whether UINT64_MAX == ULONG_MAX... " >&6; }
-if ${gl_cv_test_UINT64_MAX_EQ_ULONG_MAX+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-/* Work also in C++ mode. */
- #define __STDC_LIMIT_MACROS 1
-
- /* Work if build is not clean. */
- #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H
-
- #include <limits.h>
- #if HAVE_STDINT_H
- #include <stdint.h>
- #endif
-
- #if defined UINT64_MAX
- #define CONDITION (UINT64_MAX == ULONG_MAX)
- #else
- #define CONDITION (sizeof (unsigned long long int) == sizeof (unsigned long int))
- #endif
- int test[CONDITION ? 1 : -1];
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- gl_cv_test_UINT64_MAX_EQ_ULONG_MAX=yes
-else
- gl_cv_test_UINT64_MAX_EQ_ULONG_MAX=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_test_UINT64_MAX_EQ_ULONG_MAX" >&5
-$as_echo "$gl_cv_test_UINT64_MAX_EQ_ULONG_MAX" >&6; }
- if test $gl_cv_test_UINT64_MAX_EQ_ULONG_MAX = yes; then
- UINT64_MAX_EQ_ULONG_MAX=1;
- else
- UINT64_MAX_EQ_ULONG_MAX=0;
- fi
- else
- UINT64_MAX_EQ_ULONG_MAX=-1
- fi
-
@@ -23254,23 +27477,29 @@ $as_echo "$gl_cv_test_UINT64_MAX_EQ_ULONG_MAX" >&6; }
HAVE_ISBLANK=0
fi
- if test $HAVE_ISBLANK = 0; then
-
-
-
+ if test $HAVE_ISBLANK = 0; then
+ GL_COND_OBJ_ISBLANK_TRUE=
+ GL_COND_OBJ_ISBLANK_FALSE='#'
+else
+ GL_COND_OBJ_ISBLANK_TRUE='#'
+ GL_COND_OBJ_ISBLANK_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_ISBLANK_TRUE}" && test -z "${GL_COND_OBJ_ISBLANK_FALSE}"; then
+ GL_COND_OBJ_ISBLANK_TRUE='#'
+ GL_COND_OBJ_ISBLANK_FALSE='#'
+ fi
+cat >>confdefs.h <<_ACEOF
+#define GNULIB_ISBLANK 1
+_ACEOF
- gl_LIBOBJS="$gl_LIBOBJS isblank.$ac_objext"
- fi
-cat >>confdefs.h <<_ACEOF
-#define GNULIB_ISBLANK 1
-_ACEOF
@@ -23278,7 +27507,7 @@ _ACEOF
- GNULIB_ISBLANK=1
+ GL_GNULIB_ISBLANK=1
@@ -23752,135 +27981,51 @@ $as_echo "#define HAVE___INLINE 1" >>confdefs.h
- if test "$ac_cv_header_winsock2_h" = yes; then
-
-
-
-
-
- gl_LIBOBJS="$gl_LIBOBJS listen.$ac_objext"
-
- fi
-
-
-
-
-
- GNULIB_LISTEN=1
-
-
-
-
-
-$as_echo "#define GNULIB_TEST_LISTEN 1" >>confdefs.h
-
-
-
-
-
-
- LOCALCHARSET_TESTS_ENVIRONMENT=
-
-
-
-
-
-
-
-
-
-
-
- case "$host_os" in
- solaris*)
-
-$as_echo "#define _LCONV_C99 1" >>confdefs.h
-
+ case "$GL_GENERATE_LIMITS_H" in
+ false) LIMITS_H='' ;;
+ true)
+ if test -z "$LIMITS_H"; then
+ LIMITS_H="${gl_source_base_prefix}limits.h"
+ fi
;;
+ *) echo "*** GL_GENERATE_LIMITS_H is not set correctly" 1>&2; exit 1 ;;
esac
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether locale.h conforms to POSIX:2001" >&5
-$as_echo_n "checking whether locale.h conforms to POSIX:2001... " >&6; }
-if ${gl_cv_header_locale_h_posix2001+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <locale.h>
- int x = LC_MESSAGES;
- int y = sizeof (((struct lconv *) 0)->decimal_point);
-int
-main ()
-{
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- gl_cv_header_locale_h_posix2001=yes
+ if $GL_GENERATE_LIMITS_H; then
+ GL_GENERATE_LIMITS_H_TRUE=
+ GL_GENERATE_LIMITS_H_FALSE='#'
else
- gl_cv_header_locale_h_posix2001=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ GL_GENERATE_LIMITS_H_TRUE='#'
+ GL_GENERATE_LIMITS_H_FALSE=
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_locale_h_posix2001" >&5
-$as_echo "$gl_cv_header_locale_h_posix2001" >&6; }
+:
+ if test -z "${GL_GENERATE_LIMITS_H_TRUE}" && test -z "${GL_GENERATE_LIMITS_H_FALSE}"; then
+ GL_GENERATE_LIMITS_H_TRUE='#'
+ GL_GENERATE_LIMITS_H_FALSE='#'
+ fi
+
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct lconv is properly defined" >&5
-$as_echo_n "checking whether struct lconv is properly defined... " >&6; }
-if ${gl_cv_sys_struct_lconv_ok+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <locale.h>
- struct lconv l;
- int x = sizeof (l.decimal_point);
- int y = sizeof (l.int_p_cs_precedes);
-int
-main ()
-{
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- gl_cv_sys_struct_lconv_ok=yes
-else
- gl_cv_sys_struct_lconv_ok=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sys_struct_lconv_ok" >&5
-$as_echo "$gl_cv_sys_struct_lconv_ok" >&6; }
- if test $gl_cv_sys_struct_lconv_ok = no; then
- case "$host_os" in
- mingw*)
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#ifdef _MSC_VER
- Special
-#endif
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "Special" >/dev/null 2>&1; then :
+
+ if test "$ac_cv_header_winsock2_h" = yes; then
+ GL_COND_OBJ_LISTEN_TRUE=
+ GL_COND_OBJ_LISTEN_FALSE='#'
else
- REPLACE_STRUCT_LCONV=1
+ GL_COND_OBJ_LISTEN_TRUE='#'
+ GL_COND_OBJ_LISTEN_FALSE=
fi
-rm -f conftest*
-
- ;;
- *) REPLACE_STRUCT_LCONV=1 ;;
- esac
+:
+ if test -z "${GL_COND_OBJ_LISTEN_TRUE}" && test -z "${GL_COND_OBJ_LISTEN_FALSE}"; then
+ GL_COND_OBJ_LISTEN_TRUE='#'
+ GL_COND_OBJ_LISTEN_FALSE='#'
fi
@@ -23891,67 +28036,22 @@ rm -f conftest*
- if test $gl_cv_have_include_next = yes; then
- gl_cv_next_locale_h='<'locale.h'>'
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <locale.h>" >&5
-$as_echo_n "checking absolute name of <locale.h>... " >&6; }
-if ${gl_cv_next_locale_h+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ GL_GNULIB_LISTEN=1
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <locale.h>
-_ACEOF
- case "$host_os" in
- aix*) gl_absname_cpp="$ac_cpp -C" ;;
- *) gl_absname_cpp="$ac_cpp" ;;
- esac
- case "$host_os" in
- mingw*)
- gl_dirsep_regex='[/\\]'
- ;;
- *)
- gl_dirsep_regex='\/'
- ;;
- esac
- gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
- gl_header_literal_regex=`echo 'locale.h' \
- | sed -e "$gl_make_literal_regex_sed"`
- gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
- s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
- s|^/[^/]|//&|
- p
- q
- }'
- gl_cv_absolute_locale_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
- sed -n "$gl_absolute_header_sed"`
- gl_header=$gl_cv_absolute_locale_h
- gl_cv_next_locale_h='"'$gl_header'"'
+$as_echo "#define GNULIB_TEST_LISTEN 1" >>confdefs.h
+
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_locale_h" >&5
-$as_echo "$gl_cv_next_locale_h" >&6; }
- fi
- NEXT_LOCALE_H=$gl_cv_next_locale_h
- if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
- # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
- gl_next_as_first_directive='<'locale.h'>'
- else
- # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
- gl_next_as_first_directive=$gl_cv_next_locale_h
- fi
- NEXT_AS_FIRST_DIRECTIVE_LOCALE_H=$gl_next_as_first_directive
+ LOCALCHARSET_TESTS_ENVIRONMENT=
+
@@ -24197,46 +28297,46 @@ _ACEOF
HAVE_LSTAT=0
fi
- if test $REPLACE_LSTAT = 1; then
-
-
-
-
-
-
+ if test $REPLACE_LSTAT = 1; then
+ GL_COND_OBJ_LSTAT_TRUE=
+ GL_COND_OBJ_LSTAT_FALSE='#'
+else
+ GL_COND_OBJ_LSTAT_TRUE='#'
+ GL_COND_OBJ_LSTAT_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_LSTAT_TRUE}" && test -z "${GL_COND_OBJ_LSTAT_FALSE}"; then
+ GL_COND_OBJ_LSTAT_TRUE='#'
+ GL_COND_OBJ_LSTAT_FALSE='#'
+ fi
- gl_LIBOBJS="$gl_LIBOBJS lstat.$ac_objext"
+ if test -z "$GL_COND_OBJ_LSTAT_TRUE"; then :
:
- fi
+fi
- GNULIB_LSTAT=1
-$as_echo "#define GNULIB_TEST_LSTAT 1" >>confdefs.h
+ GL_GNULIB_LSTAT=1
+$as_echo "#define GNULIB_TEST_LSTAT 1" >>confdefs.h
- if test $gl_cv_func_malloc_posix = yes; then
-$as_echo "#define HAVE_MALLOC_POSIX 1" >>confdefs.h
- else
- REPLACE_MALLOC=1
- fi
- if test $REPLACE_MALLOC = 1; then
+ if test $REPLACE_MALLOC_FOR_MALLOC_POSIX = 1; then
@@ -24253,20 +28353,17 @@ $as_echo "#define HAVE_MALLOC_POSIX 1" >>confdefs.h
- GNULIB_MALLOC_POSIX=1
-
-$as_echo "#define GNULIB_TEST_MALLOC_POSIX 1" >>confdefs.h
-
-
+ GL_GNULIB_MALLOC_POSIX=1
+$as_echo "#define GNULIB_TEST_MALLOC_POSIX 1" >>confdefs.h
@@ -24277,143 +28374,6 @@ $as_echo "#define GNULIB_TEST_MALLOC_POSIX 1" >>confdefs.h
- if test $gl_cv_have_include_next = yes; then
- gl_cv_next_math_h='<'math.h'>'
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <math.h>" >&5
-$as_echo_n "checking absolute name of <math.h>... " >&6; }
-if ${gl_cv_next_math_h+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
- if test $ac_cv_header_math_h = yes; then
-
-
-
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
-_ACEOF
- case "$host_os" in
- aix*) gl_absname_cpp="$ac_cpp -C" ;;
- *) gl_absname_cpp="$ac_cpp" ;;
- esac
-
- case "$host_os" in
- mingw*)
- gl_dirsep_regex='[/\\]'
- ;;
- *)
- gl_dirsep_regex='\/'
- ;;
- esac
- gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
- gl_header_literal_regex=`echo 'math.h' \
- | sed -e "$gl_make_literal_regex_sed"`
- gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
- s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
- s|^/[^/]|//&|
- p
- q
- }'
-
- gl_cv_absolute_math_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
- sed -n "$gl_absolute_header_sed"`
-
- gl_header=$gl_cv_absolute_math_h
- gl_cv_next_math_h='"'$gl_header'"'
- else
- gl_cv_next_math_h='<'math.h'>'
- fi
-
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_math_h" >&5
-$as_echo "$gl_cv_next_math_h" >&6; }
- fi
- NEXT_MATH_H=$gl_cv_next_math_h
-
- if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
- # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
- gl_next_as_first_directive='<'math.h'>'
- else
- # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
- gl_next_as_first_directive=$gl_cv_next_math_h
- fi
- NEXT_AS_FIRST_DIRECTIVE_MATH_H=$gl_next_as_first_directive
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NAN macro works" >&5
-$as_echo_n "checking whether NAN macro works... " >&6; }
-if ${gl_cv_header_math_nan_works+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
-/* Solaris 10 has a broken definition of NAN. Other platforms
- fail to provide NAN, or provide it only in C99 mode; this
- test only needs to fail when NAN is provided but wrong. */
- float f = 1.0f;
-#ifdef NAN
- f = NAN;
-#endif
- return f == 0;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- gl_cv_header_math_nan_works=yes
-else
- gl_cv_header_math_nan_works=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_math_nan_works" >&5
-$as_echo "$gl_cv_header_math_nan_works" >&6; }
- if test $gl_cv_header_math_nan_works = no; then
- REPLACE_NAN=1
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether HUGE_VAL works" >&5
-$as_echo_n "checking whether HUGE_VAL works... " >&6; }
-if ${gl_cv_header_math_huge_val_works+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
-/* Solaris 10 has a broken definition of HUGE_VAL. */
- double d = HUGE_VAL;
- return d == 0;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- gl_cv_header_math_huge_val_works=yes
-else
- gl_cv_header_math_huge_val_works=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_math_huge_val_works" >&5
-$as_echo "$gl_cv_header_math_huge_val_works" >&6; }
- if test $gl_cv_header_math_huge_val_works = no; then
- REPLACE_HUGE_VAL=1
- fi
-
-
@@ -25237,8 +29197,13 @@ $as_echo_n "checking whether imported symbols can be declared weak... " >&6; }
if ${gl_cv_have_weak+:} false; then :
$as_echo_n "(cached) " >&6
else
- gl_cv_have_weak=no
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ case "$host_os" in
+ cygwin*)
+ gl_cv_have_weak="guessing no"
+ ;;
+ *)
+ gl_cv_have_weak=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
extern void xyzzy ();
#pragma weak xyzzy
@@ -25255,13 +29220,13 @@ if ac_fn_c_try_link "$LINENO"; then :
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
- if test $gl_cv_have_weak = maybe; then
- if test "$cross_compiling" = yes; then :
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ if test $gl_cv_have_weak = maybe; then
+ if test "$cross_compiling" = yes; then :
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#ifdef __ELF__
- Extensible Linking Format
- #endif
+ Extensible Linking Format
+ #endif
_ACEOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
@@ -25293,14 +29258,16 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
- fi
+ fi
+ ;;
+ esac
case " $LDFLAGS " in
*" -static "*) gl_cv_have_weak=no ;;
esac
case "$gl_cv_have_weak" in
*yes)
case "$host_os" in
- freebsd* | dragonfly*)
+ freebsd* | dragonfly* | midnightbsd*)
: > conftest1.c
$CC $CPPFLAGS $CFLAGS $LDFLAGS -fPIC -shared -o libempty.so conftest1.c -lpthread >&5 2>&1
cat <<EOF > conftest2.c
@@ -25341,16 +29308,21 @@ $as_echo "#define HAVE_WEAK_SYMBOLS 1" >>confdefs.h
fi
- if test $HAVE_MBRTOWC = 0 || test $REPLACE_MBRTOWC = 1; then
-
-
-
-
-
-
+ if test $HAVE_MBRTOWC = 0 || test $REPLACE_MBRTOWC = 1; then
+ GL_COND_OBJ_MBRTOWC_TRUE=
+ GL_COND_OBJ_MBRTOWC_FALSE='#'
+else
+ GL_COND_OBJ_MBRTOWC_TRUE='#'
+ GL_COND_OBJ_MBRTOWC_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_MBRTOWC_TRUE}" && test -z "${GL_COND_OBJ_MBRTOWC_FALSE}"; then
+ GL_COND_OBJ_MBRTOWC_TRUE='#'
+ GL_COND_OBJ_MBRTOWC_FALSE='#'
+ fi
- gl_LIBOBJS="$gl_LIBOBJS mbrtowc.$ac_objext"
+ if test -z "$GL_COND_OBJ_MBRTOWC_TRUE"; then :
if test $REPLACE_MBSTATE_T = 1; then
@@ -25424,6 +29396,11 @@ extern __attribute__((__visibility__("hidden"))) int hiddenvar;
extern __attribute__((__visibility__("default"))) int exportedvar;
extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void);
extern __attribute__((__visibility__("default"))) int exportedfunc (void);
+ void dummyfunc (void);
+ int hiddenvar;
+ int exportedvar;
+ int hiddenfunc (void) { return 51; }
+ int exportedfunc (void) { return 1225736919; }
void dummyfunc (void) {}
int
@@ -25464,13 +29441,23 @@ _ACEOF
:
- fi
+
+fi
+
+
+
+
+
+
+
+
+
- GNULIB_MBRTOWC=1
+ GL_GNULIB_MBRTOWC=1
@@ -25695,27 +29682,42 @@ _ACEOF
fi
fi
- if test $HAVE_MBSINIT = 0 || test $REPLACE_MBSINIT = 1; then
+ if test $HAVE_MBSINIT = 0 || test $REPLACE_MBSINIT = 1; then
+ GL_COND_OBJ_MBSINIT_TRUE=
+ GL_COND_OBJ_MBSINIT_FALSE='#'
+else
+ GL_COND_OBJ_MBSINIT_TRUE='#'
+ GL_COND_OBJ_MBSINIT_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_MBSINIT_TRUE}" && test -z "${GL_COND_OBJ_MBSINIT_FALSE}"; then
+ GL_COND_OBJ_MBSINIT_TRUE='#'
+ GL_COND_OBJ_MBSINIT_FALSE='#'
+ fi
+ if test -z "$GL_COND_OBJ_MBSINIT_TRUE"; then :
+ :
+fi
- gl_LIBOBJS="$gl_LIBOBJS mbsinit.$ac_objext"
- :
- fi
- GNULIB_MBSINIT=1
+
+
+
+
+ GL_GNULIB_MBSINIT=1
@@ -26046,7 +30048,21 @@ $as_echo "$gl_cv_func_mbsrtowcs_works" >&6; }
fi
fi
- if test $HAVE_MBSRTOWCS = 0 || test $REPLACE_MBSRTOWCS = 1; then
+
+ if test $HAVE_MBSRTOWCS = 0 || test $REPLACE_MBSRTOWCS = 1; then
+ GL_COND_OBJ_MBSRTOWCS_TRUE=
+ GL_COND_OBJ_MBSRTOWCS_FALSE='#'
+else
+ GL_COND_OBJ_MBSRTOWCS_TRUE='#'
+ GL_COND_OBJ_MBSRTOWCS_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_MBSRTOWCS_TRUE}" && test -z "${GL_COND_OBJ_MBSRTOWCS_FALSE}"; then
+ GL_COND_OBJ_MBSRTOWCS_TRUE='#'
+ GL_COND_OBJ_MBSRTOWCS_FALSE='#'
+ fi
+
+ if test -z "$GL_COND_OBJ_MBSRTOWCS_TRUE"; then :
@@ -26055,28 +30071,29 @@ $as_echo "$gl_cv_func_mbsrtowcs_works" >&6; }
- gl_LIBOBJS="$gl_LIBOBJS mbsrtowcs.$ac_objext"
+ gl_LIBOBJS="$gl_LIBOBJS mbsrtowcs-state.$ac_objext"
+ :
+fi
+
- gl_LIBOBJS="$gl_LIBOBJS mbsrtowcs-state.$ac_objext"
- :
- fi
- GNULIB_MBSRTOWCS=1
+
+ GL_GNULIB_MBSRTOWCS=1
@@ -26108,47 +30125,62 @@ done
fi
fi
- if test $HAVE_MBTOWC = 0 || test $REPLACE_MBTOWC = 1; then
-
-
-
-
-
-
+ if test $HAVE_MBTOWC = 0 || test $REPLACE_MBTOWC = 1; then
+ GL_COND_OBJ_MBTOWC_TRUE=
+ GL_COND_OBJ_MBTOWC_FALSE='#'
+else
+ GL_COND_OBJ_MBTOWC_TRUE='#'
+ GL_COND_OBJ_MBTOWC_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_MBTOWC_TRUE}" && test -z "${GL_COND_OBJ_MBTOWC_FALSE}"; then
+ GL_COND_OBJ_MBTOWC_TRUE='#'
+ GL_COND_OBJ_MBTOWC_FALSE='#'
+ fi
- gl_LIBOBJS="$gl_LIBOBJS mbtowc.$ac_objext"
+ if test -z "$GL_COND_OBJ_MBTOWC_TRUE"; then :
:
- fi
-
+fi
- GNULIB_MBTOWC=1
-$as_echo "#define GNULIB_TEST_MBTOWC 1" >>confdefs.h
+ GL_GNULIB_MBTOWC=1
- if test $REPLACE_MEMCHR = 1; then
+$as_echo "#define GNULIB_TEST_MBTOWC 1" >>confdefs.h
+ if test $REPLACE_MEMCHR = 1; then
+ GL_COND_OBJ_MEMCHR_TRUE=
+ GL_COND_OBJ_MEMCHR_FALSE='#'
+else
+ GL_COND_OBJ_MEMCHR_TRUE='#'
+ GL_COND_OBJ_MEMCHR_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_MEMCHR_TRUE}" && test -z "${GL_COND_OBJ_MEMCHR_FALSE}"; then
+ GL_COND_OBJ_MEMCHR_TRUE='#'
+ GL_COND_OBJ_MEMCHR_FALSE='#'
+ fi
- gl_LIBOBJS="$gl_LIBOBJS memchr.$ac_objext"
+ if test -z "$GL_COND_OBJ_MEMCHR_TRUE"; then :
for ac_header in bp-sym.h
@@ -26164,13 +30196,23 @@ fi
done
- fi
+
+fi
+
+
+
+
- GNULIB_MEMCHR=1
+
+
+
+
+
+ GL_GNULIB_MEMCHR=1
@@ -26323,6 +30365,7 @@ else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
+#include <string.h> /* for __GNU_LIBRARY__ */
#ifdef __GNU_LIBRARY__
#include <features.h>
#if ((__GLIBC__ == 2 && ((__GLIBC_MINOR > 0 && __GLIBC_MINOR__ < 9) \
@@ -26417,7 +30460,16 @@ $as_echo "$gl_cv_func_memmem_works_always" >&6; }
- GNULIB_MEMMEM=1
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_MEMMEM=1
@@ -26448,27 +30500,42 @@ done
HAVE_MEMPCPY=0
fi
- if test $HAVE_MEMPCPY = 0; then
+ if test $HAVE_MEMPCPY = 0; then
+ GL_COND_OBJ_MEMPCPY_TRUE=
+ GL_COND_OBJ_MEMPCPY_FALSE='#'
+else
+ GL_COND_OBJ_MEMPCPY_TRUE='#'
+ GL_COND_OBJ_MEMPCPY_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_MEMPCPY_TRUE}" && test -z "${GL_COND_OBJ_MEMPCPY_FALSE}"; then
+ GL_COND_OBJ_MEMPCPY_TRUE='#'
+ GL_COND_OBJ_MEMPCPY_FALSE='#'
+ fi
+ if test -z "$GL_COND_OBJ_MEMPCPY_TRUE"; then :
+ :
+fi
- gl_LIBOBJS="$gl_LIBOBJS mempcpy.$ac_objext"
- :
- fi
- GNULIB_MEMPCPY=1
+
+
+
+
+ GL_GNULIB_MEMPCPY=1
@@ -26499,8 +30566,25 @@ fi
done
- if test $ac_cv_func_memrchr = no; then
+ if test $ac_cv_func_memrchr = no; then
+ GL_COND_OBJ_MEMRCHR_TRUE=
+ GL_COND_OBJ_MEMRCHR_FALSE='#'
+else
+ GL_COND_OBJ_MEMRCHR_TRUE='#'
+ GL_COND_OBJ_MEMRCHR_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_MEMRCHR_TRUE}" && test -z "${GL_COND_OBJ_MEMRCHR_FALSE}"; then
+ GL_COND_OBJ_MEMRCHR_TRUE='#'
+ GL_COND_OBJ_MEMRCHR_FALSE='#'
+ fi
+
+ if test -z "$GL_COND_OBJ_MEMRCHR_TRUE"; then :
+
+ :
+
+fi
@@ -26508,16 +30592,14 @@ done
- gl_LIBOBJS="$gl_LIBOBJS memrchr.$ac_objext"
- :
- fi
- GNULIB_MEMRCHR=1
+
+ GL_GNULIB_MEMRCHR=1
@@ -26666,24 +30748,30 @@ $as_echo "#define FUNC_MKDIR_DOT_BUG 1" >>confdefs.h
;;
esac
- if test $REPLACE_MKDIR = 1; then
-
-
+ if test $REPLACE_MKDIR = 1; then
+ GL_COND_OBJ_MKDIR_TRUE=
+ GL_COND_OBJ_MKDIR_FALSE='#'
+else
+ GL_COND_OBJ_MKDIR_TRUE='#'
+ GL_COND_OBJ_MKDIR_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_MKDIR_TRUE}" && test -z "${GL_COND_OBJ_MKDIR_FALSE}"; then
+ GL_COND_OBJ_MKDIR_TRUE='#'
+ GL_COND_OBJ_MKDIR_FALSE='#'
+ fi
- gl_LIBOBJS="$gl_LIBOBJS mkdir.$ac_objext"
- fi
-
- GNULIB_MKDIR=1
+ GL_GNULIB_MKDIR=1
@@ -26710,26 +30798,36 @@ done
HAVE_MKDTEMP=0
fi
- if test $HAVE_MKDTEMP = 0; then
-
+ if test $HAVE_MKDTEMP = 0; then
+ GL_COND_OBJ_MKDTEMP_TRUE=
+ GL_COND_OBJ_MKDTEMP_FALSE='#'
+else
+ GL_COND_OBJ_MKDTEMP_TRUE='#'
+ GL_COND_OBJ_MKDTEMP_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_MKDTEMP_TRUE}" && test -z "${GL_COND_OBJ_MKDTEMP_FALSE}"; then
+ GL_COND_OBJ_MKDTEMP_TRUE='#'
+ GL_COND_OBJ_MKDTEMP_FALSE='#'
+ fi
+ if test -z "$GL_COND_OBJ_MKDTEMP_TRUE"; then :
+ :
+fi
- gl_LIBOBJS="$gl_LIBOBJS mkdtemp.$ac_objext"
- :
- fi
- GNULIB_MKDTEMP=1
+ GL_GNULIB_MKDTEMP=1
@@ -26749,20 +30847,26 @@ $as_echo "#define GNULIB_TEST_MKDTEMP 1" >>confdefs.h
HAVE_MKOSTEMP=0
fi
- if test $HAVE_MKOSTEMP = 0; then
-
-
-
-
-
+ if test $HAVE_MKOSTEMP = 0; then
+ GL_COND_OBJ_MKOSTEMP_TRUE=
+ GL_COND_OBJ_MKOSTEMP_FALSE='#'
+else
+ GL_COND_OBJ_MKOSTEMP_TRUE='#'
+ GL_COND_OBJ_MKOSTEMP_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_MKOSTEMP_TRUE}" && test -z "${GL_COND_OBJ_MKOSTEMP_FALSE}"; then
+ GL_COND_OBJ_MKOSTEMP_TRUE='#'
+ GL_COND_OBJ_MKOSTEMP_FALSE='#'
+ fi
+ if test -z "$GL_COND_OBJ_MKOSTEMP_TRUE"; then :
- gl_LIBOBJS="$gl_LIBOBJS mkostemp.$ac_objext"
- fi
+fi
cat >>confdefs.h <<_ACEOF
@@ -26775,44 +30879,52 @@ _ACEOF
- GNULIB_MKOSTEMP=1
+ GL_GNULIB_MKOSTEMP=1
-$as_echo "#define GNULIB_TEST_MKOSTEMP 1" >>confdefs.h
-
-
-
-
- if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then
+$as_echo "#define GNULIB_TEST_MKOSTEMP 1" >>confdefs.h
- gl_LIBOBJS="$gl_LIBOBJS msvc-inval.$ac_objext"
+ if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then
+ GL_COND_OBJ_MSVC_INVAL_TRUE=
+ GL_COND_OBJ_MSVC_INVAL_FALSE='#'
+else
+ GL_COND_OBJ_MSVC_INVAL_TRUE='#'
+ GL_COND_OBJ_MSVC_INVAL_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_MSVC_INVAL_TRUE}" && test -z "${GL_COND_OBJ_MSVC_INVAL_FALSE}"; then
+ GL_COND_OBJ_MSVC_INVAL_TRUE='#'
+ GL_COND_OBJ_MSVC_INVAL_FALSE='#'
fi
- if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then
-
-
-
-
-
-
-
- gl_LIBOBJS="$gl_LIBOBJS msvc-nothrow.$ac_objext"
+ if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then
+ GL_COND_OBJ_MSVC_NOTHROW_TRUE=
+ GL_COND_OBJ_MSVC_NOTHROW_FALSE='#'
+else
+ GL_COND_OBJ_MSVC_NOTHROW_TRUE='#'
+ GL_COND_OBJ_MSVC_NOTHROW_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_MSVC_NOTHROW_TRUE}" && test -z "${GL_COND_OBJ_MSVC_NOTHROW_FALSE}"; then
+ GL_COND_OBJ_MSVC_NOTHROW_TRUE='#'
+ GL_COND_OBJ_MSVC_NOTHROW_FALSE='#'
fi
+
cat >>confdefs.h <<_ACEOF
#define GNULIB_MSVC_NOTHROW 1
_ACEOF
@@ -26827,90 +30939,6 @@ _ACEOF
-
-
-
- if test $gl_cv_have_include_next = yes; then
- gl_cv_next_netdb_h='<'netdb.h'>'
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <netdb.h>" >&5
-$as_echo_n "checking absolute name of <netdb.h>... " >&6; }
-if ${gl_cv_next_netdb_h+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
- if test $ac_cv_header_netdb_h = yes; then
-
-
-
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <netdb.h>
-_ACEOF
- case "$host_os" in
- aix*) gl_absname_cpp="$ac_cpp -C" ;;
- *) gl_absname_cpp="$ac_cpp" ;;
- esac
-
- case "$host_os" in
- mingw*)
- gl_dirsep_regex='[/\\]'
- ;;
- *)
- gl_dirsep_regex='\/'
- ;;
- esac
- gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
- gl_header_literal_regex=`echo 'netdb.h' \
- | sed -e "$gl_make_literal_regex_sed"`
- gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
- s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
- s|^/[^/]|//&|
- p
- q
- }'
-
- gl_cv_absolute_netdb_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
- sed -n "$gl_absolute_header_sed"`
-
- gl_header=$gl_cv_absolute_netdb_h
- gl_cv_next_netdb_h='"'$gl_header'"'
- else
- gl_cv_next_netdb_h='<'netdb.h'>'
- fi
-
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_netdb_h" >&5
-$as_echo "$gl_cv_next_netdb_h" >&6; }
- fi
- NEXT_NETDB_H=$gl_cv_next_netdb_h
-
- if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
- # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
- gl_next_as_first_directive='<'netdb.h'>'
- else
- # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
- gl_next_as_first_directive=$gl_cv_next_netdb_h
- fi
- NEXT_AS_FIRST_DIRECTIVE_NETDB_H=$gl_next_as_first_directive
-
-
-
-
- if test $ac_cv_header_netdb_h = yes; then
- HAVE_NETDB_H=1
- else
- HAVE_NETDB_H=0
- fi
-
-
-
-
-
-
-
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether <netinet/in.h> is self-contained" >&5
$as_echo_n "checking whether <netinet/in.h> is self-contained... " >&6; }
if ${gl_cv_header_netinet_in_h_selfcontained+:} false; then :
@@ -26939,9 +30967,9 @@ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_netinet_in_h_selfcontained" >&5
$as_echo "$gl_cv_header_netinet_in_h_selfcontained" >&6; }
if test $gl_cv_header_netinet_in_h_selfcontained = yes; then
- NETINET_IN_H=''
+ GL_GENERATE_NETINET_IN_H=false
else
- NETINET_IN_H='netinet/in.h'
+ GL_GENERATE_NETINET_IN_H=true
for ac_header in netinet/in.h
do :
ac_fn_c_check_header_mongrel "$LINENO" "netinet/in.h" "ac_cv_header_netinet_in_h" "$ac_includes_default"
@@ -27007,8 +31035,8 @@ _ACEOF
gl_cv_absolute_netinet_in_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
sed -n "$gl_absolute_header_sed"`
- gl_header=$gl_cv_absolute_netinet_in_h
- gl_cv_next_netinet_in_h='"'$gl_header'"'
+ gl_header=$gl_cv_absolute_netinet_in_h
+ gl_cv_next_netinet_in_h='"'$gl_header'"'
else
gl_cv_next_netinet_in_h='<'netinet/in.h'>'
fi
@@ -27040,13 +31068,36 @@ $as_echo "$gl_cv_next_netinet_in_h" >&6; }
fi
- if test -n "$NETINET_IN_H"; then
+
+
+
+
+ case "$GL_GENERATE_NETINET_IN_H" in
+ false) NETINET_IN_H='' ;;
+ true)
+ if test -z "$NETINET_IN_H"; then
+ NETINET_IN_H="${gl_source_base_prefix}netinet/in.h"
+ fi
+ ;;
+ *) echo "*** GL_GENERATE_NETINET_IN_H is not set correctly" 1>&2; exit 1 ;;
+ esac
+
+
+ if $GL_GENERATE_NETINET_IN_H; then
GL_GENERATE_NETINET_IN_H_TRUE=
GL_GENERATE_NETINET_IN_H_FALSE='#'
else
GL_GENERATE_NETINET_IN_H_TRUE='#'
GL_GENERATE_NETINET_IN_H_FALSE=
fi
+:
+ if test -z "${GL_GENERATE_NETINET_IN_H_TRUE}" && test -z "${GL_GENERATE_NETINET_IN_H_FALSE}"; then
+ GL_GENERATE_NETINET_IN_H_TRUE='#'
+ GL_GENERATE_NETINET_IN_H_FALSE='#'
+ fi
+
+
+
@@ -27152,28 +31203,38 @@ $as_echo "#define OPEN_TRAILING_SLASH_BUG 1" >>confdefs.h
- if test $REPLACE_OPEN = 1; then
-
+ if test $REPLACE_OPEN = 1; then
+ GL_COND_OBJ_OPEN_TRUE=
+ GL_COND_OBJ_OPEN_FALSE='#'
+else
+ GL_COND_OBJ_OPEN_TRUE='#'
+ GL_COND_OBJ_OPEN_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_OPEN_TRUE}" && test -z "${GL_COND_OBJ_OPEN_FALSE}"; then
+ GL_COND_OBJ_OPEN_TRUE='#'
+ GL_COND_OBJ_OPEN_FALSE='#'
+ fi
+ if test -z "$GL_COND_OBJ_OPEN_TRUE"; then :
+ :
- gl_LIBOBJS="$gl_LIBOBJS open.$ac_objext"
+fi
- :
- fi
- GNULIB_OPEN=1
+ GL_GNULIB_OPEN=1
@@ -27203,34 +31264,44 @@ $as_echo "#define GNULIB_TEST_OPEN 1" >>confdefs.h
;;
esac
- if test $HAVE_OPENAT = 0 || test $REPLACE_OPENAT = 1; then
-
+ if test $HAVE_OPENAT = 0 || test $REPLACE_OPENAT = 1; then
+ GL_COND_OBJ_OPENAT_TRUE=
+ GL_COND_OBJ_OPENAT_FALSE='#'
+else
+ GL_COND_OBJ_OPENAT_TRUE='#'
+ GL_COND_OBJ_OPENAT_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_OPENAT_TRUE}" && test -z "${GL_COND_OBJ_OPENAT_FALSE}"; then
+ GL_COND_OBJ_OPENAT_TRUE='#'
+ GL_COND_OBJ_OPENAT_FALSE='#'
+ fi
+ if test -z "$GL_COND_OBJ_OPENAT_TRUE"; then :
+ :
- gl_LIBOBJS="$gl_LIBOBJS openat.$ac_objext"
+fi
+cat >>confdefs.h <<_ACEOF
+#define GNULIB_OPENAT 1
+_ACEOF
- :
- fi
-cat >>confdefs.h <<_ACEOF
-#define GNULIB_OPENAT 1
-_ACEOF
- GNULIB_OPENAT=1
+ GL_GNULIB_OPENAT=1
@@ -27276,24 +31347,30 @@ done
REPLACE_OPENDIR=1;;
esac
- if test $HAVE_OPENDIR = 0 || test $REPLACE_OPENDIR = 1; then
-
-
-
+ if test $HAVE_OPENDIR = 0 || test $REPLACE_OPENDIR = 1; then
+ GL_COND_OBJ_OPENDIR_TRUE=
+ GL_COND_OBJ_OPENDIR_FALSE='#'
+else
+ GL_COND_OBJ_OPENDIR_TRUE='#'
+ GL_COND_OBJ_OPENDIR_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_OPENDIR_TRUE}" && test -z "${GL_COND_OBJ_OPENDIR_FALSE}"; then
+ GL_COND_OBJ_OPENDIR_TRUE='#'
+ GL_COND_OBJ_OPENDIR_FALSE='#'
+ fi
- gl_LIBOBJS="$gl_LIBOBJS opendir.$ac_objext"
- fi
- GNULIB_OPENDIR=1
+ GL_GNULIB_OPENDIR=1
@@ -27314,24 +31391,30 @@ $as_echo "#define GNULIB_TEST_OPENDIR 1" >>confdefs.h
HAVE_PIPE=0
fi
- if test $HAVE_PIPE = 0; then
-
-
-
+ if test $HAVE_PIPE = 0; then
+ GL_COND_OBJ_PIPE_TRUE=
+ GL_COND_OBJ_PIPE_FALSE='#'
+else
+ GL_COND_OBJ_PIPE_TRUE='#'
+ GL_COND_OBJ_PIPE_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_PIPE_TRUE}" && test -z "${GL_COND_OBJ_PIPE_FALSE}"; then
+ GL_COND_OBJ_PIPE_TRUE='#'
+ GL_COND_OBJ_PIPE_FALSE='#'
+ fi
- gl_LIBOBJS="$gl_LIBOBJS pipe.$ac_objext"
- fi
- GNULIB_PIPE=1
+ GL_GNULIB_PIPE=1
@@ -27360,25 +31443,40 @@ done
HAVE_RAWMEMCHR=0
fi
- if test $HAVE_RAWMEMCHR = 0; then
+ if test $HAVE_RAWMEMCHR = 0; then
+ GL_COND_OBJ_RAWMEMCHR_TRUE=
+ GL_COND_OBJ_RAWMEMCHR_FALSE='#'
+else
+ GL_COND_OBJ_RAWMEMCHR_TRUE='#'
+ GL_COND_OBJ_RAWMEMCHR_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_RAWMEMCHR_TRUE}" && test -z "${GL_COND_OBJ_RAWMEMCHR_FALSE}"; then
+ GL_COND_OBJ_RAWMEMCHR_TRUE='#'
+ GL_COND_OBJ_RAWMEMCHR_FALSE='#'
+ fi
+ if test -z "$GL_COND_OBJ_RAWMEMCHR_TRUE"; then :
+ :
+
+fi
- gl_LIBOBJS="$gl_LIBOBJS rawmemchr.$ac_objext"
- :
- fi
- GNULIB_RAWMEMCHR=1
+
+
+
+ GL_GNULIB_RAWMEMCHR=1
@@ -27406,24 +31504,30 @@ done
HAVE_READDIR=0
fi
- if test $HAVE_READDIR = 0; then
-
-
-
+ if test $HAVE_READDIR = 0; then
+ GL_COND_OBJ_READDIR_TRUE=
+ GL_COND_OBJ_READDIR_FALSE='#'
+else
+ GL_COND_OBJ_READDIR_TRUE='#'
+ GL_COND_OBJ_READDIR_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_READDIR_TRUE}" && test -z "${GL_COND_OBJ_READDIR_FALSE}"; then
+ GL_COND_OBJ_READDIR_TRUE='#'
+ GL_COND_OBJ_READDIR_FALSE='#'
+ fi
- gl_LIBOBJS="$gl_LIBOBJS readdir.$ac_objext"
- fi
- GNULIB_READDIR=1
+ GL_GNULIB_READDIR=1
@@ -27590,27 +31694,37 @@ $as_echo "#define READLINK_TRUNCATE_BUG 1" >>confdefs.h
esac
fi
- if test $HAVE_READLINK = 0 || test $REPLACE_READLINK = 1; then
-
+ if test $HAVE_READLINK = 0 || test $REPLACE_READLINK = 1; then
+ GL_COND_OBJ_READLINK_TRUE=
+ GL_COND_OBJ_READLINK_FALSE='#'
+else
+ GL_COND_OBJ_READLINK_TRUE='#'
+ GL_COND_OBJ_READLINK_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_READLINK_TRUE}" && test -z "${GL_COND_OBJ_READLINK_FALSE}"; then
+ GL_COND_OBJ_READLINK_TRUE='#'
+ GL_COND_OBJ_READLINK_FALSE='#'
+ fi
+ if test -z "$GL_COND_OBJ_READLINK_TRUE"; then :
+ :
+fi
- gl_LIBOBJS="$gl_LIBOBJS readlink.$ac_objext"
- :
- fi
- GNULIB_READLINK=1
+ GL_GNULIB_READLINK=1
@@ -27623,15 +31737,11 @@ $as_echo "#define GNULIB_TEST_READLINK 1" >>confdefs.h
- if test $gl_cv_func_malloc_posix = yes; then
-
-$as_echo "#define HAVE_REALLOC_POSIX 1" >>confdefs.h
-
- else
- REPLACE_REALLOC=1
+ if test $REPLACE_MALLOC_FOR_MALLOC_POSIX = 1; then
+ REPLACE_REALLOC_FOR_REALLOC_POSIX=1
fi
- if test $REPLACE_REALLOC = 1; then
+ if test $REPLACE_REALLOC_FOR_REALLOC_POSIX = 1; then
@@ -27648,7 +31758,11 @@ $as_echo "#define HAVE_REALLOC_POSIX 1" >>confdefs.h
- GNULIB_REALLOC_POSIX=1
+
+
+
+
+ GL_GNULIB_REALLOC_POSIX=1
@@ -27968,24 +32082,30 @@ $as_echo "#define RENAME_DEST_EXISTS_BUG 1" >>confdefs.h
;;
esac
- if test $REPLACE_RENAME = 1; then
-
-
-
+ if test $REPLACE_RENAME = 1; then
+ GL_COND_OBJ_RENAME_TRUE=
+ GL_COND_OBJ_RENAME_FALSE='#'
+else
+ GL_COND_OBJ_RENAME_TRUE='#'
+ GL_COND_OBJ_RENAME_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_RENAME_TRUE}" && test -z "${GL_COND_OBJ_RENAME_FALSE}"; then
+ GL_COND_OBJ_RENAME_TRUE='#'
+ GL_COND_OBJ_RENAME_FALSE='#'
+ fi
- gl_LIBOBJS="$gl_LIBOBJS rename.$ac_objext"
- fi
- GNULIB_RENAME=1
+ GL_GNULIB_RENAME=1
@@ -28013,24 +32133,30 @@ done
HAVE_REWINDDIR=0
fi
- if test $HAVE_REWINDDIR = 0; then
-
-
-
+ if test $HAVE_REWINDDIR = 0; then
+ GL_COND_OBJ_REWINDDIR_TRUE=
+ GL_COND_OBJ_REWINDDIR_FALSE='#'
+else
+ GL_COND_OBJ_REWINDDIR_TRUE='#'
+ GL_COND_OBJ_REWINDDIR_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_REWINDDIR_TRUE}" && test -z "${GL_COND_OBJ_REWINDDIR_FALSE}"; then
+ GL_COND_OBJ_REWINDDIR_TRUE='#'
+ GL_COND_OBJ_REWINDDIR_FALSE='#'
+ fi
- gl_LIBOBJS="$gl_LIBOBJS rewinddir.$ac_objext"
- fi
- GNULIB_REWINDDIR=1
+ GL_GNULIB_REWINDDIR=1
@@ -28112,24 +32238,30 @@ $as_echo "$gl_cv_func_rmdir_works" >&6; }
;;
esac
- if test $REPLACE_RMDIR = 1; then
-
-
-
+ if test $REPLACE_RMDIR = 1; then
+ GL_COND_OBJ_RMDIR_TRUE=
+ GL_COND_OBJ_RMDIR_FALSE='#'
+else
+ GL_COND_OBJ_RMDIR_TRUE='#'
+ GL_COND_OBJ_RMDIR_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_RMDIR_TRUE}" && test -z "${GL_COND_OBJ_RMDIR_FALSE}"; then
+ GL_COND_OBJ_RMDIR_TRUE='#'
+ GL_COND_OBJ_RMDIR_FALSE='#'
+ fi
- gl_LIBOBJS="$gl_LIBOBJS rmdir.$ac_objext"
- fi
- GNULIB_RMDIR=1
+ GL_GNULIB_RMDIR=1
@@ -28146,6 +32278,7 @@ $as_echo "#define GNULIB_TEST_RMDIR 1" >>confdefs.h
+
if test "$ac_cv_header_winsock2_h" = yes; then
REPLACE_SELECT=1
else
@@ -28297,24 +32430,30 @@ rm -f core conftest.err conftest.$ac_objext \
fi
- if test $REPLACE_SELECT = 1; then
-
-
-
+ if test $REPLACE_SELECT = 1; then
+ GL_COND_OBJ_SELECT_TRUE=
+ GL_COND_OBJ_SELECT_FALSE='#'
+else
+ GL_COND_OBJ_SELECT_TRUE='#'
+ GL_COND_OBJ_SELECT_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_SELECT_TRUE}" && test -z "${GL_COND_OBJ_SELECT_FALSE}"; then
+ GL_COND_OBJ_SELECT_TRUE='#'
+ GL_COND_OBJ_SELECT_FALSE='#'
+ fi
- gl_LIBOBJS="$gl_LIBOBJS select.$ac_objext"
- fi
- GNULIB_SELECT=1
+ GL_GNULIB_SELECT=1
@@ -28395,24 +32534,30 @@ $as_echo "$gl_cv_func_setenv_works" >&6; }
esac
fi
- if test $HAVE_SETENV = 0 || test $REPLACE_SETENV = 1; then
-
-
+ if test $HAVE_SETENV = 0 || test $REPLACE_SETENV = 1; then
+ GL_COND_OBJ_SETENV_TRUE=
+ GL_COND_OBJ_SETENV_FALSE='#'
+else
+ GL_COND_OBJ_SETENV_TRUE='#'
+ GL_COND_OBJ_SETENV_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_SETENV_TRUE}" && test -z "${GL_COND_OBJ_SETENV_FALSE}"; then
+ GL_COND_OBJ_SETENV_TRUE='#'
+ GL_COND_OBJ_SETENV_FALSE='#'
+ fi
- gl_LIBOBJS="$gl_LIBOBJS setenv.$ac_objext"
- fi
-
- GNULIB_SETENV=1
+ GL_GNULIB_SETENV=1
@@ -28434,7 +32579,7 @@ if ${gl_cv_func_setlocale_null_all_mtsafe+:} false; then :
else
case "$host_os" in
# Guess no on musl libc, macOS, FreeBSD, NetBSD, OpenBSD, AIX, Haiku, Cygwin.
- *-musl* | darwin* | freebsd* | netbsd* | openbsd* | aix* | haiku* | cygwin*)
+ *-musl* | darwin* | freebsd* | midnightbsd* | netbsd* | openbsd* | aix* | haiku* | cygwin*)
gl_cv_func_setlocale_null_all_mtsafe=no ;;
# Guess yes on glibc, HP-UX, IRIX, Solaris, native Windows.
*-gnu* | gnu* | hpux* | irix* | solaris* | mingw*)
@@ -28475,7 +32620,7 @@ else
openbsd* | aix*)
gl_cv_func_setlocale_null_one_mtsafe=no ;;
# Guess yes on glibc, musl libc, macOS, FreeBSD, NetBSD, HP-UX, IRIX, Solaris, Haiku, Cygwin, native Windows.
- *-gnu* | gnu* | *-musl* | darwin* | freebsd* | netbsd* | hpux* | irix* | solaris* | haiku* | cygwin* | mingw*)
+ *-gnu* | gnu* | *-musl* | darwin* | freebsd* | midnightbsd* | netbsd* | hpux* | irix* | solaris* | haiku* | cygwin* | mingw*)
gl_cv_func_setlocale_null_one_mtsafe=yes ;;
# If we don't know, obey --enable-cross-guesses.
*)
@@ -28514,8 +32659,13 @@ $as_echo_n "checking whether imported symbols can be declared weak... " >&6; }
if ${gl_cv_have_weak+:} false; then :
$as_echo_n "(cached) " >&6
else
- gl_cv_have_weak=no
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ case "$host_os" in
+ cygwin*)
+ gl_cv_have_weak="guessing no"
+ ;;
+ *)
+ gl_cv_have_weak=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
extern void xyzzy ();
#pragma weak xyzzy
@@ -28532,13 +32682,13 @@ if ac_fn_c_try_link "$LINENO"; then :
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
- if test $gl_cv_have_weak = maybe; then
- if test "$cross_compiling" = yes; then :
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ if test $gl_cv_have_weak = maybe; then
+ if test "$cross_compiling" = yes; then :
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#ifdef __ELF__
- Extensible Linking Format
- #endif
+ Extensible Linking Format
+ #endif
_ACEOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
@@ -28570,14 +32720,16 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
- fi
+ fi
+ ;;
+ esac
case " $LDFLAGS " in
*" -static "*) gl_cv_have_weak=no ;;
esac
case "$gl_cv_have_weak" in
*yes)
case "$host_os" in
- freebsd* | dragonfly*)
+ freebsd* | dragonfly* | midnightbsd*)
: > conftest1.c
$CC $CPPFLAGS $CFLAGS $LDFLAGS -fPIC -shared -o libempty.so conftest1.c -lpthread >&5 2>&1
cat <<EOF > conftest2.c
@@ -28618,16 +32770,21 @@ $as_echo "#define HAVE_WEAK_SYMBOLS 1" >>confdefs.h
fi
- if test $SETLOCALE_NULL_ALL_MTSAFE = 0 || test $SETLOCALE_NULL_ONE_MTSAFE = 0; then
-
-
-
-
-
-
+ if test $SETLOCALE_NULL_ALL_MTSAFE = 0 || test $SETLOCALE_NULL_ONE_MTSAFE = 0; then
+ GL_COND_OBJ_SETLOCALE_LOCK_TRUE=
+ GL_COND_OBJ_SETLOCALE_LOCK_FALSE='#'
+else
+ GL_COND_OBJ_SETLOCALE_LOCK_TRUE='#'
+ GL_COND_OBJ_SETLOCALE_LOCK_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_SETLOCALE_LOCK_TRUE}" && test -z "${GL_COND_OBJ_SETLOCALE_LOCK_FALSE}"; then
+ GL_COND_OBJ_SETLOCALE_LOCK_TRUE='#'
+ GL_COND_OBJ_SETLOCALE_LOCK_FALSE='#'
+ fi
- gl_LIBOBJS="$gl_LIBOBJS setlocale-lock.$ac_objext"
+ if test -z "$GL_COND_OBJ_SETLOCALE_LOCK_TRUE"; then :
@@ -28680,6 +32837,11 @@ extern __attribute__((__visibility__("hidden"))) int hiddenvar;
extern __attribute__((__visibility__("default"))) int exportedvar;
extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void);
extern __attribute__((__visibility__("default"))) int exportedfunc (void);
+ void dummyfunc (void);
+ int hiddenvar;
+ int exportedvar;
+ int hiddenfunc (void) { return 51; }
+ int exportedfunc (void) { return 1225736919; }
void dummyfunc (void) {}
int
@@ -28715,136 +32877,61 @@ _ACEOF
- fi
-
-
-
+fi
- GNULIB_SETLOCALE_NULL=1
-$as_echo "#define GNULIB_TEST_SETLOCALE_NULL 1" >>confdefs.h
+ GL_GNULIB_SETLOCALE_NULL=1
- if test "$ac_cv_header_winsock2_h" = yes; then
+$as_echo "#define GNULIB_TEST_SETLOCALE_NULL 1" >>confdefs.h
- gl_LIBOBJS="$gl_LIBOBJS setsockopt.$ac_objext"
+ if test "$ac_cv_header_winsock2_h" = yes; then
+ GL_COND_OBJ_SETSOCKOPT_TRUE=
+ GL_COND_OBJ_SETSOCKOPT_FALSE='#'
+else
+ GL_COND_OBJ_SETSOCKOPT_TRUE='#'
+ GL_COND_OBJ_SETSOCKOPT_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_SETSOCKOPT_TRUE}" && test -z "${GL_COND_OBJ_SETSOCKOPT_FALSE}"; then
+ GL_COND_OBJ_SETSOCKOPT_TRUE='#'
+ GL_COND_OBJ_SETSOCKOPT_FALSE='#'
fi
- GNULIB_SETSOCKOPT=1
-
-
-
-
-
-$as_echo "#define GNULIB_TEST_SETSOCKOPT 1" >>confdefs.h
-
-
-
-
-
+ GL_GNULIB_SETSOCKOPT=1
- if test $gl_cv_have_include_next = yes; then
- gl_cv_next_signal_h='<'signal.h'>'
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <signal.h>" >&5
-$as_echo_n "checking absolute name of <signal.h>... " >&6; }
-if ${gl_cv_next_signal_h+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <signal.h>
-_ACEOF
- case "$host_os" in
- aix*) gl_absname_cpp="$ac_cpp -C" ;;
- *) gl_absname_cpp="$ac_cpp" ;;
- esac
-
- case "$host_os" in
- mingw*)
- gl_dirsep_regex='[/\\]'
- ;;
- *)
- gl_dirsep_regex='\/'
- ;;
- esac
- gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
- gl_header_literal_regex=`echo 'signal.h' \
- | sed -e "$gl_make_literal_regex_sed"`
- gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
- s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
- s|^/[^/]|//&|
- p
- q
- }'
-
- gl_cv_absolute_signal_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
- sed -n "$gl_absolute_header_sed"`
-
- gl_header=$gl_cv_absolute_signal_h
- gl_cv_next_signal_h='"'$gl_header'"'
-
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_signal_h" >&5
-$as_echo "$gl_cv_next_signal_h" >&6; }
- fi
- NEXT_SIGNAL_H=$gl_cv_next_signal_h
-
- if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
- # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
- gl_next_as_first_directive='<'signal.h'>'
- else
- # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
- gl_next_as_first_directive=$gl_cv_next_signal_h
- fi
- NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H=$gl_next_as_first_directive
-
-
-
+$as_echo "#define GNULIB_TEST_SETSOCKOPT 1" >>confdefs.h
-# AIX declares sig_atomic_t to already include volatile, and C89 compilers
-# then choke on 'volatile sig_atomic_t'. C99 requires that it compile.
- ac_fn_c_check_type "$LINENO" "volatile sig_atomic_t" "ac_cv_type_volatile_sig_atomic_t" "
-#include <signal.h>
-"
-if test "x$ac_cv_type_volatile_sig_atomic_t" = xyes; then :
-else
- HAVE_TYPE_VOLATILE_SIG_ATOMIC_T=0
-fi
@@ -28852,17 +32939,23 @@ fi
- ac_fn_c_check_type "$LINENO" "sighandler_t" "ac_cv_type_sighandler_t" "
-#include <signal.h>
-"
-if test "x$ac_cv_type_sighandler_t" = xyes; then :
+ if test "$ac_cv_header_winsock2_h" = yes; then
+ GL_COND_OBJ_SOCKET_TRUE=
+ GL_COND_OBJ_SOCKET_FALSE='#'
else
- HAVE_SIGHANDLER_T=0
+ GL_COND_OBJ_SOCKET_TRUE='#'
+ GL_COND_OBJ_SOCKET_FALSE=
fi
+:
+ if test -z "${GL_COND_OBJ_SOCKET_TRUE}" && test -z "${GL_COND_OBJ_SOCKET_FALSE}"; then
+ GL_COND_OBJ_SOCKET_TRUE='#'
+ GL_COND_OBJ_SOCKET_FALSE='#'
+ fi
-
+ # When this module is used, sockets may actually occur as file descriptors,
+ # hence it is worth warning if the modules 'close' and 'ioctl' are not used.
@@ -28871,32 +32964,19 @@ fi
if test "$ac_cv_header_winsock2_h" = yes; then
-
-
-
-
-
-
-
-
- gl_LIBOBJS="$gl_LIBOBJS socket.$ac_objext"
-
+ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=1
+ SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=1
fi
- # When this module is used, sockets may actually occur as file descriptors,
- # hence it is worth warning if the modules 'close' and 'ioctl' are not used.
- if test "$ac_cv_header_winsock2_h" = yes; then
- UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=1
- SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=1
- fi
- GNULIB_SOCKET=1
+
+ GL_GNULIB_SOCKET=1
@@ -29080,16 +33160,21 @@ $as_echo "#define REPLACE_FUNC_STAT_FILE 1" >>confdefs.h
;;
esac
- if test $REPLACE_STAT = 1; then
-
-
-
-
-
-
+ if test $REPLACE_STAT = 1; then
+ GL_COND_OBJ_STAT_TRUE=
+ GL_COND_OBJ_STAT_FALSE='#'
+else
+ GL_COND_OBJ_STAT_TRUE='#'
+ GL_COND_OBJ_STAT_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_STAT_TRUE}" && test -z "${GL_COND_OBJ_STAT_FALSE}"; then
+ GL_COND_OBJ_STAT_TRUE='#'
+ GL_COND_OBJ_STAT_FALSE='#'
+ fi
- gl_LIBOBJS="$gl_LIBOBJS stat.$ac_objext"
+ if test -z "$GL_COND_OBJ_STAT_TRUE"; then :
case "$host_os" in
mingw*)
@@ -29110,13 +33195,18 @@ $as_echo "#define REPLACE_FUNC_STAT_FILE 1" >>confdefs.h
:
- fi
+
+fi
+
- GNULIB_STAT=1
+
+
+
+ GL_GNULIB_STAT=1
@@ -29272,7 +33362,8 @@ if ${gl_cv_header_working_stdalign_h+:} false; then :
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#include <stdalign.h>
+#include <stdint.h>
+ #include <stdalign.h>
#include <stddef.h>
/* Test that alignof yields a result consistent with offsetof.
@@ -29291,6 +33382,7 @@ else
/* Test _Alignas only on platforms where gnulib can help. */
#if \
((defined __cplusplus && 201103 <= __cplusplus) \
+ || (__TINYC__ && defined __attribute__) \
|| (defined __APPLE__ && defined __MACH__ \
? 4 < __GNUC__ + (1 <= __GNUC_MINOR__) \
: __GNUC__) \
@@ -29321,19 +33413,42 @@ fi
$as_echo "$gl_cv_header_working_stdalign_h" >&6; }
if test $gl_cv_header_working_stdalign_h = yes; then
- STDALIGN_H=''
+ GL_GENERATE_STDALIGN_H=false
else
- STDALIGN_H='stdalign.h'
+ GL_GENERATE_STDALIGN_H=true
fi
- if test -n "$STDALIGN_H"; then
+
+
+
+ case "$GL_GENERATE_STDALIGN_H" in
+ false) STDALIGN_H='' ;;
+ true)
+ if test -z "$STDALIGN_H"; then
+ STDALIGN_H="${gl_source_base_prefix}stdalign.h"
+ fi
+ ;;
+ *) echo "*** GL_GENERATE_STDALIGN_H is not set correctly" 1>&2; exit 1 ;;
+ esac
+
+
+ if $GL_GENERATE_STDALIGN_H; then
GL_GENERATE_STDALIGN_H_TRUE=
GL_GENERATE_STDALIGN_H_FALSE='#'
else
GL_GENERATE_STDALIGN_H_TRUE='#'
GL_GENERATE_STDALIGN_H_FALSE=
fi
+:
+ if test -z "${GL_GENERATE_STDALIGN_H_TRUE}" && test -z "${GL_GENERATE_STDALIGN_H_FALSE}"; then
+ GL_GENERATE_STDALIGN_H_TRUE='#'
+ GL_GENERATE_STDALIGN_H_FALSE='#'
+ fi
+
+
+
+
@@ -29344,32 +33459,52 @@ fi
case "$host_os" in
solaris*)
if test -z "$GCC"; then
- STDBOOL_H='stdbool.h'
+ GL_GENERATE_STDBOOL_H=true
else
- STDBOOL_H=''
+ GL_GENERATE_STDBOOL_H=false
fi
;;
*)
- STDBOOL_H=''
+ GL_GENERATE_STDBOOL_H=false
;;
esac
else
- STDBOOL_H='stdbool.h'
+ GL_GENERATE_STDBOOL_H=true
fi
- if test -n "$STDBOOL_H"; then
+ if test "$ac_cv_type__Bool" = yes; then
+ HAVE__BOOL=1
+ else
+ HAVE__BOOL=0
+ fi
+
+
+
+
+
+
+ case "$GL_GENERATE_STDBOOL_H" in
+ false) STDBOOL_H='' ;;
+ true)
+ if test -z "$STDBOOL_H"; then
+ STDBOOL_H="${gl_source_base_prefix}stdbool.h"
+ fi
+ ;;
+ *) echo "*** GL_GENERATE_STDBOOL_H is not set correctly" 1>&2; exit 1 ;;
+ esac
+
+
+ if $GL_GENERATE_STDBOOL_H; then
GL_GENERATE_STDBOOL_H_TRUE=
GL_GENERATE_STDBOOL_H_FALSE='#'
else
GL_GENERATE_STDBOOL_H_TRUE='#'
GL_GENERATE_STDBOOL_H_FALSE=
fi
-
-
- if test "$ac_cv_type__Bool" = yes; then
- HAVE__BOOL=1
- else
- HAVE__BOOL=0
+:
+ if test -z "${GL_GENERATE_STDBOOL_H_TRUE}" && test -z "${GL_GENERATE_STDBOOL_H_FALSE}"; then
+ GL_GENERATE_STDBOOL_H_TRUE='#'
+ GL_GENERATE_STDBOOL_H_FALSE='#'
fi
@@ -29379,99 +33514,38 @@ fi
- STDDEF_H=
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for good max_align_t" >&5
-$as_echo_n "checking for good max_align_t... " >&6; }
-if ${gl_cv_type_max_align_t+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stddef.h>
- unsigned int s = sizeof (max_align_t);
- #if defined __GNUC__ || defined __clang__ || defined __IBM__ALIGNOF__
- int check1[2 * (__alignof__ (double) <= __alignof__ (max_align_t)) - 1];
- int check2[2 * (__alignof__ (long double) <= __alignof__ (max_align_t)) - 1];
- #endif
- typedef struct { char a; max_align_t b; } max_helper;
- typedef struct { char a; long b; } long_helper;
- typedef struct { char a; double b; } double_helper;
- typedef struct { char a; long double b; } long_double_helper;
- int check3[2 * (offsetof (long_helper, b) <= offsetof (max_helper, b)) - 1];
- int check4[2 * (offsetof (double_helper, b) <= offsetof (max_helper, b)) - 1];
- int check5[2 * (offsetof (long_double_helper, b) <= offsetof (max_helper, b)) - 1];
-int
-main ()
-{
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- gl_cv_type_max_align_t=yes
-else
- gl_cv_type_max_align_t=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_max_align_t" >&5
-$as_echo "$gl_cv_type_max_align_t" >&6; }
- if test $gl_cv_type_max_align_t = no; then
- HAVE_MAX_ALIGN_T=0
- STDDEF_H=stddef.h
- fi
- if test $gt_cv_c_wchar_t = no; then
- HAVE_WCHAR_T=0
- STDDEF_H=stddef.h
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NULL can be used in arbitrary expressions" >&5
-$as_echo_n "checking whether NULL can be used in arbitrary expressions... " >&6; }
-if ${gl_cv_decl_null_works+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stddef.h>
- int test[2 * (sizeof NULL == sizeof (void *)) -1];
-int
-main ()
-{
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- gl_cv_decl_null_works=yes
-else
- gl_cv_decl_null_works=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_decl_null_works" >&5
-$as_echo "$gl_cv_decl_null_works" >&6; }
- if test $gl_cv_decl_null_works = no; then
- REPLACE_NULL=1
- STDDEF_H=stddef.h
- fi
+ case "$GL_GENERATE_STDDEF_H" in
+ false) STDDEF_H='' ;;
+ true)
+ if test -z "$STDDEF_H"; then
+ STDDEF_H="${gl_source_base_prefix}stddef.h"
+ fi
+ ;;
+ *) echo "*** GL_GENERATE_STDDEF_H is not set correctly" 1>&2; exit 1 ;;
+ esac
- if test -n "$STDDEF_H"; then
+ if $GL_GENERATE_STDDEF_H; then
GL_GENERATE_STDDEF_H_TRUE=
GL_GENERATE_STDDEF_H_FALSE='#'
else
GL_GENERATE_STDDEF_H_TRUE='#'
GL_GENERATE_STDDEF_H_FALSE=
fi
+:
+ if test -z "${GL_GENERATE_STDDEF_H_TRUE}" && test -z "${GL_GENERATE_STDDEF_H_FALSE}"; then
+ GL_GENERATE_STDDEF_H_TRUE='#'
+ GL_GENERATE_STDDEF_H_FALSE='#'
+ fi
- if test -n "$STDDEF_H"; then
@@ -29480,75 +33554,67 @@ fi
- if test $gl_cv_have_include_next = yes; then
- gl_cv_next_stddef_h='<'stddef.h'>'
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <stddef.h>" >&5
-$as_echo_n "checking absolute name of <stddef.h>... " >&6; }
-if ${gl_cv_next_stddef_h+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stddef.h>
-_ACEOF
- case "$host_os" in
- aix*) gl_absname_cpp="$ac_cpp -C" ;;
- *) gl_absname_cpp="$ac_cpp" ;;
- esac
-
- case "$host_os" in
- mingw*)
- gl_dirsep_regex='[/\\]'
- ;;
- *)
- gl_dirsep_regex='\/'
+ case "$GL_GENERATE_STDINT_H" in
+ false) STDINT_H='' ;;
+ true)
+ if test -z "$STDINT_H"; then
+ STDINT_H="${gl_source_base_prefix}stdint.h"
+ fi
;;
+ *) echo "*** GL_GENERATE_STDINT_H is not set correctly" 1>&2; exit 1 ;;
esac
- gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
- gl_header_literal_regex=`echo 'stddef.h' \
- | sed -e "$gl_make_literal_regex_sed"`
- gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
- s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
- s|^/[^/]|//&|
- p
- q
- }'
- gl_cv_absolute_stddef_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
- sed -n "$gl_absolute_header_sed"`
- gl_header=$gl_cv_absolute_stddef_h
- gl_cv_next_stddef_h='"'$gl_header'"'
+ if $GL_GENERATE_STDINT_H; then
+ GL_GENERATE_STDINT_H_TRUE=
+ GL_GENERATE_STDINT_H_FALSE='#'
+else
+ GL_GENERATE_STDINT_H_TRUE='#'
+ GL_GENERATE_STDINT_H_FALSE=
+fi
+:
+ if test -z "${GL_GENERATE_STDINT_H_TRUE}" && test -z "${GL_GENERATE_STDINT_H_FALSE}"; then
+ GL_GENERATE_STDINT_H_TRUE='#'
+ GL_GENERATE_STDINT_H_FALSE='#'
+ fi
+
+
+
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stddef_h" >&5
-$as_echo "$gl_cv_next_stddef_h" >&6; }
- fi
- NEXT_STDDEF_H=$gl_cv_next_stddef_h
- if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
- # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
- gl_next_as_first_directive='<'stddef.h'>'
- else
- # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
- gl_next_as_first_directive=$gl_cv_next_stddef_h
- fi
- NEXT_AS_FIRST_DIRECTIVE_STDDEF_H=$gl_next_as_first_directive
+ case "$GL_GENERATE_LIMITS_H" in
+ false) LIMITS_H='' ;;
+ true)
+ if test -z "$LIMITS_H"; then
+ LIMITS_H="${gl_source_base_prefix}limits.h"
+ fi
+ ;;
+ *) echo "*** GL_GENERATE_LIMITS_H is not set correctly" 1>&2; exit 1 ;;
+ esac
+
+ if $GL_GENERATE_LIMITS_H; then
+ GL_GENERATE_LIMITS_H_TRUE=
+ GL_GENERATE_LIMITS_H_FALSE='#'
+else
+ GL_GENERATE_LIMITS_H_TRUE='#'
+ GL_GENERATE_LIMITS_H_FALSE=
+fi
+:
+ if test -z "${GL_GENERATE_LIMITS_H_TRUE}" && test -z "${GL_GENERATE_LIMITS_H_FALSE}"; then
+ GL_GENERATE_LIMITS_H_TRUE='#'
+ GL_GENERATE_LIMITS_H_FALSE='#'
fi
- $as_echo "#define __USE_MINGW_ANSI_STDIO 1" >>confdefs.h
@@ -29559,113 +33625,52 @@ $as_echo "$gl_cv_next_stddef_h" >&6; }
- if test $gl_cv_have_include_next = yes; then
- gl_cv_next_stdio_h='<'stdio.h'>'
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <stdio.h>" >&5
-$as_echo_n "checking absolute name of <stdio.h>... " >&6; }
-if ${gl_cv_next_stdio_h+:} false; then :
- $as_echo_n "(cached) " >&6
+ if test $REPLACE_STDIO_READ_FUNCS = 1; then
+ GL_COND_OBJ_STDIO_READ_TRUE=
+ GL_COND_OBJ_STDIO_READ_FALSE='#'
else
+ GL_COND_OBJ_STDIO_READ_TRUE='#'
+ GL_COND_OBJ_STDIO_READ_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_STDIO_READ_TRUE}" && test -z "${GL_COND_OBJ_STDIO_READ_FALSE}"; then
+ GL_COND_OBJ_STDIO_READ_TRUE='#'
+ GL_COND_OBJ_STDIO_READ_FALSE='#'
+ fi
+ if test $REPLACE_STDIO_WRITE_FUNCS = 1; then
+ GL_COND_OBJ_STDIO_WRITE_TRUE=
+ GL_COND_OBJ_STDIO_WRITE_FALSE='#'
+else
+ GL_COND_OBJ_STDIO_WRITE_TRUE='#'
+ GL_COND_OBJ_STDIO_WRITE_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_STDIO_WRITE_TRUE}" && test -z "${GL_COND_OBJ_STDIO_WRITE_FALSE}"; then
+ GL_COND_OBJ_STDIO_WRITE_TRUE='#'
+ GL_COND_OBJ_STDIO_WRITE_FALSE='#'
+ fi
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdio.h>
-_ACEOF
- case "$host_os" in
- aix*) gl_absname_cpp="$ac_cpp -C" ;;
- *) gl_absname_cpp="$ac_cpp" ;;
- esac
- case "$host_os" in
- mingw*)
- gl_dirsep_regex='[/\\]'
- ;;
- *)
- gl_dirsep_regex='\/'
- ;;
- esac
- gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
- gl_header_literal_regex=`echo 'stdio.h' \
- | sed -e "$gl_make_literal_regex_sed"`
- gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
- s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
- s|^/[^/]|//&|
- p
- q
- }'
- gl_cv_absolute_stdio_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
- sed -n "$gl_absolute_header_sed"`
- gl_header=$gl_cv_absolute_stdio_h
- gl_cv_next_stdio_h='"'$gl_header'"'
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stdio_h" >&5
-$as_echo "$gl_cv_next_stdio_h" >&6; }
- fi
- NEXT_STDIO_H=$gl_cv_next_stdio_h
- if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
- # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
- gl_next_as_first_directive='<'stdio.h'>'
- else
- # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
- gl_next_as_first_directive=$gl_cv_next_stdio_h
- fi
- NEXT_AS_FIRST_DIRECTIVE_STDIO_H=$gl_next_as_first_directive
+ GL_GNULIB_FSCANF=1
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking which flavor of printf attribute matches inttypes macros" >&5
-$as_echo_n "checking which flavor of printf attribute matches inttypes macros... " >&6; }
-if ${gl_cv_func_printf_attribute_flavor+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
- #define __STDC_FORMAT_MACROS 1
- #include <stdio.h>
- #include <inttypes.h>
- /* For non-mingw systems, compilation will trivially succeed.
- For mingw, compilation will succeed for older mingw (system
- printf, "I64d") and fail for newer mingw (gnu printf, "lld"). */
- #if (defined _WIN32 && ! defined __CYGWIN__) && \
- (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
- extern char PRIdMAX_probe[sizeof PRIdMAX == sizeof "I64d" ? 1 : -1];
- #endif
-int
-main ()
-{
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- gl_cv_func_printf_attribute_flavor=system
-else
- gl_cv_func_printf_attribute_flavor=gnu
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_attribute_flavor" >&5
-$as_echo "$gl_cv_func_printf_attribute_flavor" >&6; }
- if test "$gl_cv_func_printf_attribute_flavor" = gnu; then
+$as_echo "#define GNULIB_TEST_FSCANF 1" >>confdefs.h
-$as_echo "#define GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU 1" >>confdefs.h
- fi
- GNULIB_FSCANF=1
cat >>confdefs.h <<_ACEOF
@@ -29673,7 +33678,25 @@ cat >>confdefs.h <<_ACEOF
_ACEOF
- GNULIB_SCANF=1
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_SCANF=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_SCANF 1" >>confdefs.h
+
+
+
cat >>confdefs.h <<_ACEOF
@@ -29681,23 +33704,8 @@ cat >>confdefs.h <<_ACEOF
_ACEOF
- GNULIB_FGETC=1
- GNULIB_GETC=1
- GNULIB_GETCHAR=1
- GNULIB_FGETS=1
- GNULIB_FREAD=1
- GNULIB_FPRINTF=1
- GNULIB_PRINTF=1
- GNULIB_VFPRINTF=1
- GNULIB_VPRINTF=1
- GNULIB_FPUTC=1
- GNULIB_PUTC=1
- GNULIB_PUTCHAR=1
- GNULIB_FPUTS=1
- GNULIB_PUTS=1
- GNULIB_FWRITE=1
@@ -29705,14 +33713,13 @@ _ACEOF
+ GL_GNULIB_FGETC=1
- if test $ac_cv_have_decl_fcloseall = no; then
- HAVE_DECL_FCLOSEALL=0
- fi
+$as_echo "#define GNULIB_TEST_FGETC 1" >>confdefs.h
@@ -29722,65 +33729,17 @@ _ACEOF
- if test $gl_cv_have_include_next = yes; then
- gl_cv_next_stdlib_h='<'stdlib.h'>'
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <stdlib.h>" >&5
-$as_echo_n "checking absolute name of <stdlib.h>... " >&6; }
-if ${gl_cv_next_stdlib_h+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdlib.h>
-_ACEOF
- case "$host_os" in
- aix*) gl_absname_cpp="$ac_cpp -C" ;;
- *) gl_absname_cpp="$ac_cpp" ;;
- esac
+ GL_GNULIB_GETC=1
- case "$host_os" in
- mingw*)
- gl_dirsep_regex='[/\\]'
- ;;
- *)
- gl_dirsep_regex='\/'
- ;;
- esac
- gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
- gl_header_literal_regex=`echo 'stdlib.h' \
- | sed -e "$gl_make_literal_regex_sed"`
- gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
- s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
- s|^/[^/]|//&|
- p
- q
- }'
- gl_cv_absolute_stdlib_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
- sed -n "$gl_absolute_header_sed"`
- gl_header=$gl_cv_absolute_stdlib_h
- gl_cv_next_stdlib_h='"'$gl_header'"'
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stdlib_h" >&5
-$as_echo "$gl_cv_next_stdlib_h" >&6; }
- fi
- NEXT_STDLIB_H=$gl_cv_next_stdlib_h
+$as_echo "#define GNULIB_TEST_GETC 1" >>confdefs.h
- if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
- # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
- gl_next_as_first_directive='<'stdlib.h'>'
- else
- # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
- gl_next_as_first_directive=$gl_cv_next_stdlib_h
- fi
- NEXT_AS_FIRST_DIRECTIVE_STDLIB_H=$gl_next_as_first_directive
@@ -29792,18 +33751,250 @@ $as_echo "$gl_cv_next_stdlib_h" >&6; }
+ GL_GNULIB_GETCHAR=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_GETCHAR 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_FGETS=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_FGETS 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_FREAD=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_FREAD 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_FPRINTF=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_FPRINTF 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_PRINTF=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_PRINTF 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_VFPRINTF=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_VFPRINTF 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_VPRINTF=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_VPRINTF 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_FPUTC=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_FPUTC 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_PUTC=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_PUTC 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_PUTCHAR=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_PUTCHAR 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_FPUTS=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_FPUTS 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_PUTS=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_PUTS 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_FWRITE=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_FWRITE 1" >>confdefs.h
+
+
+
+
+
+
- if test $ac_cv_have_decl_ecvt = no; then
- HAVE_DECL_ECVT=0
- fi
- if test $ac_cv_have_decl_fcvt = no; then
- HAVE_DECL_FCVT=0
- fi
- if test $ac_cv_have_decl_gcvt = no; then
- HAVE_DECL_GCVT=0
- fi
@@ -29886,8 +34077,25 @@ $as_echo "$gl_cv_func_strchrnul_works" >&6; }
esac
fi
- if test $HAVE_STRCHRNUL = 0 || test $REPLACE_STRCHRNUL = 1; then
+ if test $HAVE_STRCHRNUL = 0 || test $REPLACE_STRCHRNUL = 1; then
+ GL_COND_OBJ_STRCHRNUL_TRUE=
+ GL_COND_OBJ_STRCHRNUL_FALSE='#'
+else
+ GL_COND_OBJ_STRCHRNUL_TRUE='#'
+ GL_COND_OBJ_STRCHRNUL_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_STRCHRNUL_TRUE}" && test -z "${GL_COND_OBJ_STRCHRNUL_FALSE}"; then
+ GL_COND_OBJ_STRCHRNUL_TRUE='#'
+ GL_COND_OBJ_STRCHRNUL_FALSE='#'
+ fi
+
+ if test -z "$GL_COND_OBJ_STRCHRNUL_TRUE"; then :
+
+ :
+
+fi
@@ -29895,16 +34103,14 @@ $as_echo "$gl_cv_func_strchrnul_works" >&6; }
- gl_LIBOBJS="$gl_LIBOBJS strchrnul.$ac_objext"
- :
- fi
- GNULIB_STRCHRNUL=1
+
+ GL_GNULIB_STRCHRNUL=1
@@ -29925,25 +34131,40 @@ $as_echo "#define GNULIB_TEST_STRCHRNUL 1" >>confdefs.h
HAVE_DECL_STRDUP=0
fi
- if test $REPLACE_STRDUP = 1; then
+ if test $REPLACE_STRDUP = 1; then
+ GL_COND_OBJ_STRDUP_TRUE=
+ GL_COND_OBJ_STRDUP_FALSE='#'
+else
+ GL_COND_OBJ_STRDUP_TRUE='#'
+ GL_COND_OBJ_STRDUP_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_STRDUP_TRUE}" && test -z "${GL_COND_OBJ_STRDUP_FALSE}"; then
+ GL_COND_OBJ_STRDUP_TRUE='#'
+ GL_COND_OBJ_STRDUP_FALSE='#'
+ fi
+
+ if test -z "$GL_COND_OBJ_STRDUP_TRUE"; then :
+
+ :
+fi
- gl_LIBOBJS="$gl_LIBOBJS strdup.$ac_objext"
- :
- fi
- GNULIB_STRDUP=1
+
+
+ GL_GNULIB_STRDUP=1
@@ -29960,7 +34181,7 @@ $as_echo "#define GNULIB_TEST_STRDUP 1" >>confdefs.h
- if test "$ERRNO_H:$REPLACE_STRERROR_0" = :0; then
+ if test "$GL_GENERATE_ERRNO_H:$REPLACE_STRERROR_0" = false:0; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working strerror function" >&5
$as_echo_n "checking for working strerror function... " >&6; }
if ${gl_cv_func_working_strerror+:} false; then :
@@ -30017,20 +34238,22 @@ $as_echo "$gl_cv_func_working_strerror" >&6; }
REPLACE_STRERROR=1
fi
- if test $REPLACE_STRERROR = 1; then
-
-
-
-
-
-
-
-
- gl_LIBOBJS="$gl_LIBOBJS strerror.$ac_objext"
+ if test $REPLACE_STRERROR = 1; then
+ GL_COND_OBJ_STRERROR_TRUE=
+ GL_COND_OBJ_STRERROR_FALSE='#'
+else
+ GL_COND_OBJ_STRERROR_TRUE='#'
+ GL_COND_OBJ_STRERROR_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_STRERROR_TRUE}" && test -z "${GL_COND_OBJ_STRERROR_FALSE}"; then
+ GL_COND_OBJ_STRERROR_TRUE='#'
+ GL_COND_OBJ_STRERROR_FALSE='#'
fi
+
cat >>confdefs.h <<_ACEOF
#define GNULIB_STRERROR 1
_ACEOF
@@ -30041,28 +34264,42 @@ _ACEOF
- GNULIB_STRERROR=1
-$as_echo "#define GNULIB_TEST_STRERROR 1" >>confdefs.h
+ GL_GNULIB_STRERROR=1
- if test -n "$ERRNO_H" || test $REPLACE_STRERROR_0 = 1; then
+$as_echo "#define GNULIB_TEST_STRERROR 1" >>confdefs.h
+
- gl_LIBOBJS="$gl_LIBOBJS strerror-override.$ac_objext"
+
+ if test -n "$ERRNO_H" || test $REPLACE_STRERROR_0 = 1; then
+ GL_COND_OBJ_STRERROR_OVERRIDE_TRUE=
+ GL_COND_OBJ_STRERROR_OVERRIDE_FALSE='#'
+else
+ GL_COND_OBJ_STRERROR_OVERRIDE_TRUE='#'
+ GL_COND_OBJ_STRERROR_OVERRIDE_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_STRERROR_OVERRIDE_TRUE}" && test -z "${GL_COND_OBJ_STRERROR_OVERRIDE_FALSE}"; then
+ GL_COND_OBJ_STRERROR_OVERRIDE_TRUE='#'
+ GL_COND_OBJ_STRERROR_OVERRIDE_FALSE='#'
+ fi
+
+ if test -z "$GL_COND_OBJ_STRERROR_OVERRIDE_TRUE"; then :
@@ -30091,9 +34328,8 @@ done
fi
- fi
-
+fi
@@ -30104,7 +34340,7 @@ done
fi
if test $ac_cv_func_strerror_r = yes; then
- if test "$ERRNO_H:$REPLACE_STRERROR_0" = :0; then
+ if test "$GL_GENERATE_ERRNO_H:$REPLACE_STRERROR_0" = false:0; then
if test $gl_cv_func_strerror_r_posix_signature = yes; then
case "$gl_cv_func_strerror_r_works" in
*no) REPLACE_STRERROR_R=1 ;;
@@ -30117,7 +34353,8 @@ done
fi
fi
- if test $HAVE_DECL_STRERROR_R = 0 || test $REPLACE_STRERROR_R = 1; then
+ if test $HAVE_DECL_STRERROR_R = 0 || test $REPLACE_STRERROR_R = 1; then :
+
@@ -30133,13 +34370,24 @@ done
- fi
+
+
+fi
+
+
+
+
+
- GNULIB_STRERROR_R=1
+
+
+
+
+ GL_GNULIB_STRERROR_R=1
@@ -30168,6 +34416,19 @@ _ACEOF
+
+
+
+
+
+
+
+
+
+
+
+
+
if test $ac_cv_have_decl_strnlen = no; then
HAVE_DECL_STRNLEN=0
else
@@ -30230,25 +34491,40 @@ test $ac_cv_func_strnlen_working = no && :
fi
fi
- if test $HAVE_DECL_STRNLEN = 0 || test $REPLACE_STRNLEN = 1; then
+ if test $HAVE_DECL_STRNLEN = 0 || test $REPLACE_STRNLEN = 1; then
+ GL_COND_OBJ_STRNLEN_TRUE=
+ GL_COND_OBJ_STRNLEN_FALSE='#'
+else
+ GL_COND_OBJ_STRNLEN_TRUE='#'
+ GL_COND_OBJ_STRNLEN_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_STRNLEN_TRUE}" && test -z "${GL_COND_OBJ_STRNLEN_FALSE}"; then
+ GL_COND_OBJ_STRNLEN_TRUE='#'
+ GL_COND_OBJ_STRNLEN_FALSE='#'
+ fi
+ if test -z "$GL_COND_OBJ_STRNLEN_TRUE"; then :
+
+ :
+
+fi
- gl_LIBOBJS="$gl_LIBOBJS strnlen.$ac_objext"
- :
- fi
- GNULIB_STRNLEN=1
+
+
+ GL_GNULIB_STRNLEN=1
@@ -30392,6 +34668,7 @@ else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
+#include <string.h> /* for __GNU_LIBRARY__ */
#ifdef __GNU_LIBRARY__
#include <features.h>
#if ((__GLIBC__ == 2 && __GLIBC_MINOR__ > 12) || (__GLIBC__ > 2)) \
@@ -30421,7 +34698,7 @@ else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#include <string.h> /* for strstr */
+#include <string.h> /* for __GNU_LIBRARY__, strstr */
#ifdef __GNU_LIBRARY__
#include <features.h>
#if __GLIBC__ == 2 && __GLIBC_MINOR__ == 28
@@ -30479,7 +34756,16 @@ $as_echo "$gl_cv_func_strstr_works_always" >&6; }
- GNULIB_STRSTR=1
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_STRSTR=1
@@ -30573,242 +34859,26 @@ $as_echo "$gl_cv_func_strtok_r_works" >&6; }
HAVE_DECL_STRTOK_R=0
fi
- if test $HAVE_STRTOK_R = 0 || test $REPLACE_STRTOK_R = 1; then
-
-
-
-
-
-
-
-
- gl_LIBOBJS="$gl_LIBOBJS strtok_r.$ac_objext"
-
-
- :
-
- fi
-
-
-
-
-
- GNULIB_STRTOK_R=1
-
-
-
-
-$as_echo "#define GNULIB_TEST_STRTOK_R 1" >>confdefs.h
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- if test $gl_cv_have_include_next = yes; then
- gl_cv_next_sys_random_h='<'sys/random.h'>'
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <sys/random.h>" >&5
-$as_echo_n "checking absolute name of <sys/random.h>... " >&6; }
-if ${gl_cv_next_sys_random_h+:} false; then :
- $as_echo_n "(cached) " >&6
+ if test $HAVE_STRTOK_R = 0 || test $REPLACE_STRTOK_R = 1; then
+ GL_COND_OBJ_STRTOK_R_TRUE=
+ GL_COND_OBJ_STRTOK_R_FALSE='#'
else
-
- if test $ac_cv_header_sys_random_h = yes; then
-
-
-
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <sys/random.h>
-_ACEOF
- case "$host_os" in
- aix*) gl_absname_cpp="$ac_cpp -C" ;;
- *) gl_absname_cpp="$ac_cpp" ;;
- esac
-
- case "$host_os" in
- mingw*)
- gl_dirsep_regex='[/\\]'
- ;;
- *)
- gl_dirsep_regex='\/'
- ;;
- esac
- gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
- gl_header_literal_regex=`echo 'sys/random.h' \
- | sed -e "$gl_make_literal_regex_sed"`
- gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
- s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
- s|^/[^/]|//&|
- p
- q
- }'
-
- gl_cv_absolute_sys_random_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
- sed -n "$gl_absolute_header_sed"`
-
- gl_header=$gl_cv_absolute_sys_random_h
- gl_cv_next_sys_random_h='"'$gl_header'"'
- else
- gl_cv_next_sys_random_h='<'sys/random.h'>'
- fi
-
-
+ GL_COND_OBJ_STRTOK_R_TRUE='#'
+ GL_COND_OBJ_STRTOK_R_FALSE=
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_random_h" >&5
-$as_echo "$gl_cv_next_sys_random_h" >&6; }
- fi
- NEXT_SYS_RANDOM_H=$gl_cv_next_sys_random_h
-
- if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
- # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
- gl_next_as_first_directive='<'sys/random.h'>'
- else
- # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
- gl_next_as_first_directive=$gl_cv_next_sys_random_h
- fi
- NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H=$gl_next_as_first_directive
-
-
-
-
- if test $ac_cv_header_sys_random_h = yes; then
- HAVE_SYS_RANDOM_H=1
- else
- HAVE_SYS_RANDOM_H=0
- fi
-
-
-
- if test $ac_cv_header_sys_random_h = yes; then
- UNISTD_H_HAVE_SYS_RANDOM_H=1
+:
+ if test -z "${GL_COND_OBJ_STRTOK_R_TRUE}" && test -z "${GL_COND_OBJ_STRTOK_R_FALSE}"; then
+ GL_COND_OBJ_STRTOK_R_TRUE='#'
+ GL_COND_OBJ_STRTOK_R_FALSE='#'
fi
+ if test -z "$GL_COND_OBJ_STRTOK_R_TRUE"; then :
+ :
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- if test $gl_cv_have_include_next = yes; then
- gl_cv_next_sys_stat_h='<'sys/stat.h'>'
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <sys/stat.h>" >&5
-$as_echo_n "checking absolute name of <sys/stat.h>... " >&6; }
-if ${gl_cv_next_sys_stat_h+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
- if test $ac_cv_header_sys_stat_h = yes; then
-
-
-
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <sys/stat.h>
-_ACEOF
- case "$host_os" in
- aix*) gl_absname_cpp="$ac_cpp -C" ;;
- *) gl_absname_cpp="$ac_cpp" ;;
- esac
-
- case "$host_os" in
- mingw*)
- gl_dirsep_regex='[/\\]'
- ;;
- *)
- gl_dirsep_regex='\/'
- ;;
- esac
- gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
- gl_header_literal_regex=`echo 'sys/stat.h' \
- | sed -e "$gl_make_literal_regex_sed"`
- gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
- s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
- s|^/[^/]|//&|
- p
- q
- }'
-
- gl_cv_absolute_sys_stat_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
- sed -n "$gl_absolute_header_sed"`
-
- gl_header=$gl_cv_absolute_sys_stat_h
- gl_cv_next_sys_stat_h='"'$gl_header'"'
- else
- gl_cv_next_sys_stat_h='<'sys/stat.h'>'
- fi
-
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_stat_h" >&5
-$as_echo "$gl_cv_next_sys_stat_h" >&6; }
- fi
- NEXT_SYS_STAT_H=$gl_cv_next_sys_stat_h
-
- if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
- # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
- gl_next_as_first_directive='<'sys/stat.h'>'
- else
- # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
- gl_next_as_first_directive=$gl_cv_next_sys_stat_h
- fi
- NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H=$gl_next_as_first_directive
-
-
-
-
-
-
-
-
- WINDOWS_STAT_TIMESPEC=0
-
-
-
-
-
-
-
-
- ac_fn_c_check_type "$LINENO" "nlink_t" "ac_cv_type_nlink_t" "#include <sys/types.h>
- #include <sys/stat.h>
-"
-if test "x$ac_cv_type_nlink_t" = xyes; then :
-
-else
-
-$as_echo "#define nlink_t int" >>confdefs.h
-
fi
@@ -30824,11 +34894,13 @@ fi
+ GL_GNULIB_STRTOK_R=1
+$as_echo "#define GNULIB_TEST_STRTOK_R 1" >>confdefs.h
@@ -30836,80 +34908,21 @@ fi
- if test $gl_cv_have_include_next = yes; then
- gl_cv_next_sys_uio_h='<'sys/uio.h'>'
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <sys/uio.h>" >&5
-$as_echo_n "checking absolute name of <sys/uio.h>... " >&6; }
-if ${gl_cv_next_sys_uio_h+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test $ac_cv_header_sys_uio_h = yes; then
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <sys/uio.h>
-_ACEOF
- case "$host_os" in
- aix*) gl_absname_cpp="$ac_cpp -C" ;;
- *) gl_absname_cpp="$ac_cpp" ;;
- esac
- case "$host_os" in
- mingw*)
- gl_dirsep_regex='[/\\]'
- ;;
- *)
- gl_dirsep_regex='\/'
- ;;
- esac
- gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
- gl_header_literal_regex=`echo 'sys/uio.h' \
- | sed -e "$gl_make_literal_regex_sed"`
- gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
- s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
- s|^/[^/]|//&|
- p
- q
- }'
- gl_cv_absolute_sys_uio_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
- sed -n "$gl_absolute_header_sed"`
- gl_header=$gl_cv_absolute_sys_uio_h
- gl_cv_next_sys_uio_h='"'$gl_header'"'
- else
- gl_cv_next_sys_uio_h='<'sys/uio.h'>'
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_uio_h" >&5
-$as_echo "$gl_cv_next_sys_uio_h" >&6; }
- fi
- NEXT_SYS_UIO_H=$gl_cv_next_sys_uio_h
- if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
- # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
- gl_next_as_first_directive='<'sys/uio.h'>'
- else
- # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
- gl_next_as_first_directive=$gl_cv_next_sys_uio_h
- fi
- NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H=$gl_next_as_first_directive
- if test $ac_cv_header_sys_uio_h = yes; then
- HAVE_SYS_UIO_H=1
- else
- HAVE_SYS_UIO_H=0
- fi
@@ -30925,71 +34938,16 @@ $as_echo "$gl_cv_next_sys_uio_h" >&6; }
- if test $gl_cv_have_include_next = yes; then
- gl_cv_next_sys_wait_h='<'sys/wait.h'>'
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <sys/wait.h>" >&5
-$as_echo_n "checking absolute name of <sys/wait.h>... " >&6; }
-if ${gl_cv_next_sys_wait_h+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test $ac_cv_header_sys_wait_h = yes; then
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <sys/wait.h>
-_ACEOF
- case "$host_os" in
- aix*) gl_absname_cpp="$ac_cpp -C" ;;
- *) gl_absname_cpp="$ac_cpp" ;;
- esac
- case "$host_os" in
- mingw*)
- gl_dirsep_regex='[/\\]'
- ;;
- *)
- gl_dirsep_regex='\/'
- ;;
- esac
- gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
- gl_header_literal_regex=`echo 'sys/wait.h' \
- | sed -e "$gl_make_literal_regex_sed"`
- gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
- s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
- s|^/[^/]|//&|
- p
- q
- }'
- gl_cv_absolute_sys_wait_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
- sed -n "$gl_absolute_header_sed"`
- gl_header=$gl_cv_absolute_sys_wait_h
- gl_cv_next_sys_wait_h='"'$gl_header'"'
- else
- gl_cv_next_sys_wait_h='<'sys/wait.h'>'
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_wait_h" >&5
-$as_echo "$gl_cv_next_sys_wait_h" >&6; }
- fi
- NEXT_SYS_WAIT_H=$gl_cv_next_sys_wait_h
-
- if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
- # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
- gl_next_as_first_directive='<'sys/wait.h'>'
- else
- # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
- gl_next_as_first_directive=$gl_cv_next_sys_wait_h
- fi
- NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H=$gl_next_as_first_directive
@@ -31024,6 +34982,10 @@ _ACEOF
+
+
+
+
ac_fn_c_check_decl "$LINENO" "localtime_r" "ac_cv_have_decl_localtime_r" "/* mingw's <time.h> provides the functions asctime_r, ctime_r,
gmtime_r, localtime_r only if <unistd.h> or <pthread.h> has
been included before. */
@@ -31141,126 +35103,43 @@ $as_echo "$gl_cv_func_localtime_r_inline" >&6; }
fi
fi
- if test $HAVE_LOCALTIME_R = 0 || test $REPLACE_LOCALTIME_R = 1; then
-
-
-
-
-
-
-
-
- gl_LIBOBJS="$gl_LIBOBJS time_r.$ac_objext"
-
-
- :
-
- fi
-
-
-
-
- GNULIB_TIME_R=1
-
-
-
-
-
-$as_echo "#define GNULIB_TEST_TIME_R 1" >>confdefs.h
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- if test $gl_cv_have_include_next = yes; then
- gl_cv_next_unistd_h='<'unistd.h'>'
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <unistd.h>" >&5
-$as_echo_n "checking absolute name of <unistd.h>... " >&6; }
-if ${gl_cv_next_unistd_h+:} false; then :
- $as_echo_n "(cached) " >&6
+ if test $HAVE_LOCALTIME_R = 0 || test $REPLACE_LOCALTIME_R = 1; then
+ GL_COND_OBJ_TIME_R_TRUE=
+ GL_COND_OBJ_TIME_R_FALSE='#'
else
+ GL_COND_OBJ_TIME_R_TRUE='#'
+ GL_COND_OBJ_TIME_R_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_TIME_R_TRUE}" && test -z "${GL_COND_OBJ_TIME_R_FALSE}"; then
+ GL_COND_OBJ_TIME_R_TRUE='#'
+ GL_COND_OBJ_TIME_R_FALSE='#'
+ fi
- if test $ac_cv_header_unistd_h = yes; then
+ if test -z "$GL_COND_OBJ_TIME_R_TRUE"; then :
+ :
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <unistd.h>
-_ACEOF
- case "$host_os" in
- aix*) gl_absname_cpp="$ac_cpp -C" ;;
- *) gl_absname_cpp="$ac_cpp" ;;
- esac
+fi
- case "$host_os" in
- mingw*)
- gl_dirsep_regex='[/\\]'
- ;;
- *)
- gl_dirsep_regex='\/'
- ;;
- esac
- gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
- gl_header_literal_regex=`echo 'unistd.h' \
- | sed -e "$gl_make_literal_regex_sed"`
- gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
- s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
- s|^/[^/]|//&|
- p
- q
- }'
- gl_cv_absolute_unistd_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
- sed -n "$gl_absolute_header_sed"`
- gl_header=$gl_cv_absolute_unistd_h
- gl_cv_next_unistd_h='"'$gl_header'"'
- else
- gl_cv_next_unistd_h='<'unistd.h'>'
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_unistd_h" >&5
-$as_echo "$gl_cv_next_unistd_h" >&6; }
- fi
- NEXT_UNISTD_H=$gl_cv_next_unistd_h
- if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
- # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
- gl_next_as_first_directive='<'unistd.h'>'
- else
- # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
- gl_next_as_first_directive=$gl_cv_next_unistd_h
- fi
- NEXT_AS_FIRST_DIRECTIVE_UNISTD_H=$gl_next_as_first_directive
+ GL_GNULIB_TIME_R=1
- if test $ac_cv_header_unistd_h = yes; then
- HAVE_UNISTD_H=1
- else
- HAVE_UNISTD_H=0
- fi
+$as_echo "#define GNULIB_TEST_TIME_R 1" >>confdefs.h
@@ -31270,9 +35149,6 @@ $as_echo "$gl_cv_next_unistd_h" >&6; }
- if test $ac_cv_have_decl_execvpe = no; then
- HAVE_DECL_EXECVPE=0
- fi
@@ -31408,181 +35284,29 @@ $as_echo "$gl_cv_func_unsetenv_works" >&6; }
esac
fi
- if test $HAVE_UNSETENV = 0 || test $REPLACE_UNSETENV = 1; then
-
-
-
-
-
-
-
- gl_LIBOBJS="$gl_LIBOBJS unsetenv.$ac_objext"
-
-
-
-
-
- fi
-
-
-
-
-
- GNULIB_UNSETENV=1
-
-
-
-
-
-$as_echo "#define GNULIB_TEST_UNSETENV 1" >>confdefs.h
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- if test $gl_cv_have_include_next = yes; then
- gl_cv_next_wchar_h='<'wchar.h'>'
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <wchar.h>" >&5
-$as_echo_n "checking absolute name of <wchar.h>... " >&6; }
-if ${gl_cv_next_wchar_h+:} false; then :
- $as_echo_n "(cached) " >&6
+ if test $HAVE_UNSETENV = 0 || test $REPLACE_UNSETENV = 1; then
+ GL_COND_OBJ_UNSETENV_TRUE=
+ GL_COND_OBJ_UNSETENV_FALSE='#'
else
-
- if test $ac_cv_header_wchar_h = yes; then
-
-
-
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <wchar.h>
-_ACEOF
- case "$host_os" in
- aix*) gl_absname_cpp="$ac_cpp -C" ;;
- *) gl_absname_cpp="$ac_cpp" ;;
- esac
-
- case "$host_os" in
- mingw*)
- gl_dirsep_regex='[/\\]'
- ;;
- *)
- gl_dirsep_regex='\/'
- ;;
- esac
- gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
- gl_header_literal_regex=`echo 'wchar.h' \
- | sed -e "$gl_make_literal_regex_sed"`
- gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
- s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
- s|^/[^/]|//&|
- p
- q
- }'
-
- gl_cv_absolute_wchar_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
- sed -n "$gl_absolute_header_sed"`
-
- gl_header=$gl_cv_absolute_wchar_h
- gl_cv_next_wchar_h='"'$gl_header'"'
- else
- gl_cv_next_wchar_h='<'wchar.h'>'
- fi
-
-
+ GL_COND_OBJ_UNSETENV_TRUE='#'
+ GL_COND_OBJ_UNSETENV_FALSE=
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_wchar_h" >&5
-$as_echo "$gl_cv_next_wchar_h" >&6; }
- fi
- NEXT_WCHAR_H=$gl_cv_next_wchar_h
-
- if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
- # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
- gl_next_as_first_directive='<'wchar.h'>'
- else
- # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
- gl_next_as_first_directive=$gl_cv_next_wchar_h
- fi
- NEXT_AS_FIRST_DIRECTIVE_WCHAR_H=$gl_next_as_first_directive
-
-
-
-
- if test $ac_cv_header_wchar_h = yes; then
- HAVE_WCHAR_H=1
- else
- HAVE_WCHAR_H=0
- fi
-
-
-
-
-
- if test $gt_cv_c_wint_t = yes; then
- HAVE_WINT_T=1
- else
- HAVE_WINT_T=0
+:
+ if test -z "${GL_COND_OBJ_UNSETENV_TRUE}" && test -z "${GL_COND_OBJ_UNSETENV_FALSE}"; then
+ GL_COND_OBJ_UNSETENV_TRUE='#'
+ GL_COND_OBJ_UNSETENV_FALSE='#'
fi
+ if test -z "$GL_COND_OBJ_UNSETENV_TRUE"; then :
-
-
-
- ac_fn_c_check_decl "$LINENO" "wcsdup" "ac_cv_have_decl_wcsdup" "
- #include <wchar.h>
-
-"
-if test "x$ac_cv_have_decl_wcsdup" = xyes; then :
- ac_have_decl=1
-else
- ac_have_decl=0
fi
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_WCSDUP $ac_have_decl
-_ACEOF
-
- if test $ac_cv_have_decl_wcsdup = no; then
- HAVE_DECL_WCSDUP=0
- fi
-
-
-
-
-
-
- if test $ac_cv_func_iswcntrl = yes; then
- HAVE_ISWCNTRL=1
- else
- HAVE_ISWCNTRL=0
- fi
-
-
-
- if test $gt_cv_c_wint_t = yes; then
- HAVE_WINT_T=1
- else
- HAVE_WINT_T=0
- fi
-
-
@@ -31591,209 +35315,64 @@ _ACEOF
-
-
-
- if test $gl_cv_have_include_next = yes; then
- gl_cv_next_wctype_h='<'wctype.h'>'
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <wctype.h>" >&5
-$as_echo_n "checking absolute name of <wctype.h>... " >&6; }
-if ${gl_cv_next_wctype_h+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
- if test $ac_cv_header_wctype_h = yes; then
+ GL_GNULIB_UNSETENV=1
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <wctype.h>
-_ACEOF
- case "$host_os" in
- aix*) gl_absname_cpp="$ac_cpp -C" ;;
- *) gl_absname_cpp="$ac_cpp" ;;
- esac
- case "$host_os" in
- mingw*)
- gl_dirsep_regex='[/\\]'
- ;;
- *)
- gl_dirsep_regex='\/'
- ;;
- esac
- gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
- gl_header_literal_regex=`echo 'wctype.h' \
- | sed -e "$gl_make_literal_regex_sed"`
- gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
- s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
- s|^/[^/]|//&|
- p
- q
- }'
-
- gl_cv_absolute_wctype_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
- sed -n "$gl_absolute_header_sed"`
-
- gl_header=$gl_cv_absolute_wctype_h
- gl_cv_next_wctype_h='"'$gl_header'"'
- else
- gl_cv_next_wctype_h='<'wctype.h'>'
- fi
-
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_wctype_h" >&5
-$as_echo "$gl_cv_next_wctype_h" >&6; }
- fi
- NEXT_WCTYPE_H=$gl_cv_next_wctype_h
-
- if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
- # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
- gl_next_as_first_directive='<'wctype.h'>'
- else
- # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
- gl_next_as_first_directive=$gl_cv_next_wctype_h
- fi
- NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H=$gl_next_as_first_directive
+$as_echo "#define GNULIB_TEST_UNSETENV 1" >>confdefs.h
- if test $ac_cv_header_wctype_h = yes; then
- if test $ac_cv_func_iswcntrl = yes; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether iswcntrl works" >&5
-$as_echo_n "checking whether iswcntrl works... " >&6; }
-if ${gl_cv_func_iswcntrl_works+:} false; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for variable-length arrays" >&5
+$as_echo_n "checking for variable-length arrays... " >&6; }
+if ${ac_cv_c_vararrays+:} false; then :
$as_echo_n "(cached) " >&6
else
-
- if test "$cross_compiling" = yes; then :
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdlib.h>
- #if __GNU_LIBRARY__ == 1
- Linux libc5 i18n is broken.
- #endif
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- gl_cv_func_iswcntrl_works="guessing yes"
-else
- gl_cv_func_iswcntrl_works="guessing no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
+#ifdef __STDC_NO_VLA__
+ defined
+ #endif
- #include <wchar.h>
- #include <wctype.h>
- int main () { return iswprint ('x') == 0; }
-
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
- gl_cv_func_iswcntrl_works=yes
-else
- gl_cv_func_iswcntrl_works=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_iswcntrl_works" >&5
-$as_echo "$gl_cv_func_iswcntrl_works" >&6; }
- fi
- HAVE_WCTYPE_H=1
- else
- HAVE_WCTYPE_H=0
- fi
-
-
- if test $GNULIB_OVERRIDES_WINT_T = 1; then
- REPLACE_ISWCNTRL=1
- else
- case "$gl_cv_func_iswcntrl_works" in
- *yes) REPLACE_ISWCNTRL=0 ;;
- *) REPLACE_ISWCNTRL=1 ;;
- esac
- fi
-
-
- if test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; then
- :
- fi
-
- if test $REPLACE_ISWCNTRL = 1; then
- REPLACE_TOWLOWER=1
- else
- for ac_func in towlower
-do :
- ac_fn_c_check_func "$LINENO" "towlower" "ac_cv_func_towlower"
-if test "x$ac_cv_func_towlower" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_TOWLOWER 1
-_ACEOF
-
-fi
-done
-
- if test $ac_cv_func_towlower = yes; then
- REPLACE_TOWLOWER=0
- else
- ac_fn_c_check_decl "$LINENO" "towlower" "ac_cv_have_decl_towlower" "#include <wchar.h>
- #if HAVE_WCTYPE_H
- # include <wctype.h>
- #endif
-
-"
-if test "x$ac_cv_have_decl_towlower" = xyes; then :
- ac_have_decl=1
-else
- ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_TOWLOWER $ac_have_decl
_ACEOF
-
- if test $ac_cv_have_decl_towlower = yes; then
- REPLACE_TOWLOWER=1
- else
- REPLACE_TOWLOWER=0
- fi
- fi
- fi
-
-
- if test $HAVE_ISWCNTRL = 0 || test $REPLACE_TOWLOWER = 1; then
- :
- fi
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wctype_t" >&5
-$as_echo_n "checking for wctype_t... " >&6; }
-if ${gl_cv_type_wctype_t+:} false; then :
- $as_echo_n "(cached) " >&6
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "defined" >/dev/null 2>&1; then :
+ ac_cv_c_vararrays='no: __STDC_NO_VLA__ is defined'
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#include <wchar.h>
- #if HAVE_WCTYPE_H
- # include <wctype.h>
- #endif
- wctype_t a;
+/* Test for VLA support. This test is partly inspired
+ from examples in the C standard. Use at least two VLA
+ functions to detect the GCC 3.4.3 bug described in:
+ https://lists.gnu.org/archive/html/bug-gnulib/2014-08/msg00014.html
+ */
+ #ifdef __STDC_NO_VLA__
+ syntax error;
+ #else
+ extern int n;
+ int B[100];
+ int fvla (int m, int C[m][m]);
+
+ int
+ simple (int count, int all[static count])
+ {
+ return all[count - 1];
+ }
+
+ int
+ fvla (int m, int C[m][m])
+ {
+ typedef int VLA[m][m];
+ VLA x;
+ int D[m];
+ static int (*q)[m] = &B;
+ int (*s)[n] = q;
+ return C && &x[0][0] == &D[0] && &D[0] == s[0];
+ }
+ #endif
int
main ()
@@ -31804,74 +35383,32 @@ main ()
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
- gl_cv_type_wctype_t=yes
+ ac_cv_c_vararrays=yes
else
- gl_cv_type_wctype_t=no
+ ac_cv_c_vararrays=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_wctype_t" >&5
-$as_echo "$gl_cv_type_wctype_t" >&6; }
- if test $gl_cv_type_wctype_t = no; then
- HAVE_WCTYPE_T=0
- fi
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wctrans_t" >&5
-$as_echo_n "checking for wctrans_t... " >&6; }
-if ${gl_cv_type_wctrans_t+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <wchar.h>
- #include <wctype.h>
- wctrans_t a;
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- gl_cv_type_wctrans_t=yes
-else
- gl_cv_type_wctrans_t=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f conftest*
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_wctrans_t" >&5
-$as_echo "$gl_cv_type_wctrans_t" >&6; }
- if test $gl_cv_type_wctrans_t = no; then
- HAVE_WCTRANS_T=0
- fi
-
-
-
-
-
-
- case "$host_os" in
- mingw*)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_vararrays" >&5
+$as_echo "$ac_cv_c_vararrays" >&6; }
+ if test "$ac_cv_c_vararrays" = yes; then
+$as_echo "#define HAVE_C_VARARRAYS 1" >>confdefs.h
+ elif test "$ac_cv_c_vararrays" = no; then
+$as_echo "#define __STDC_NO_VLA__ 1" >>confdefs.h
+ fi
- gl_LIBOBJS="$gl_LIBOBJS windows-mutex.$ac_objext"
- ;;
- esac
- case "$host_os" in
- mingw*)
@@ -31880,13 +35417,7 @@ $as_echo "$gl_cv_type_wctrans_t" >&6; }
- gl_LIBOBJS="$gl_LIBOBJS windows-once.$ac_objext"
- ;;
- esac
-
- case "$host_os" in
- mingw*)
@@ -31894,26 +35425,64 @@ $as_echo "$gl_cv_type_wctrans_t" >&6; }
+ if case "$host_os" in mingw*) true;; *) false;; esac; then
+ GL_COND_OBJ_WINDOWS_MUTEX_TRUE=
+ GL_COND_OBJ_WINDOWS_MUTEX_FALSE='#'
+else
+ GL_COND_OBJ_WINDOWS_MUTEX_TRUE='#'
+ GL_COND_OBJ_WINDOWS_MUTEX_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_WINDOWS_MUTEX_TRUE}" && test -z "${GL_COND_OBJ_WINDOWS_MUTEX_FALSE}"; then
+ GL_COND_OBJ_WINDOWS_MUTEX_TRUE='#'
+ GL_COND_OBJ_WINDOWS_MUTEX_FALSE='#'
+ fi
- gl_LIBOBJS="$gl_LIBOBJS windows-recmutex.$ac_objext"
-
- ;;
- esac
-
- case "$host_os" in
- mingw*)
+ if case "$host_os" in mingw*) true;; *) false;; esac; then
+ GL_COND_OBJ_WINDOWS_ONCE_TRUE=
+ GL_COND_OBJ_WINDOWS_ONCE_FALSE='#'
+else
+ GL_COND_OBJ_WINDOWS_ONCE_TRUE='#'
+ GL_COND_OBJ_WINDOWS_ONCE_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_WINDOWS_ONCE_TRUE}" && test -z "${GL_COND_OBJ_WINDOWS_ONCE_FALSE}"; then
+ GL_COND_OBJ_WINDOWS_ONCE_TRUE='#'
+ GL_COND_OBJ_WINDOWS_ONCE_FALSE='#'
+ fi
+ if case "$host_os" in mingw*) true;; *) false;; esac; then
+ GL_COND_OBJ_WINDOWS_RECMUTEX_TRUE=
+ GL_COND_OBJ_WINDOWS_RECMUTEX_FALSE='#'
+else
+ GL_COND_OBJ_WINDOWS_RECMUTEX_TRUE='#'
+ GL_COND_OBJ_WINDOWS_RECMUTEX_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_WINDOWS_RECMUTEX_TRUE}" && test -z "${GL_COND_OBJ_WINDOWS_RECMUTEX_FALSE}"; then
+ GL_COND_OBJ_WINDOWS_RECMUTEX_TRUE='#'
+ GL_COND_OBJ_WINDOWS_RECMUTEX_FALSE='#'
+ fi
- gl_LIBOBJS="$gl_LIBOBJS windows-rwlock.$ac_objext"
+ if case "$host_os" in mingw*) true;; *) false;; esac; then
+ GL_COND_OBJ_WINDOWS_RWLOCK_TRUE=
+ GL_COND_OBJ_WINDOWS_RWLOCK_FALSE='#'
+else
+ GL_COND_OBJ_WINDOWS_RWLOCK_TRUE='#'
+ GL_COND_OBJ_WINDOWS_RWLOCK_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_WINDOWS_RWLOCK_TRUE}" && test -z "${GL_COND_OBJ_WINDOWS_RWLOCK_FALSE}"; then
+ GL_COND_OBJ_WINDOWS_RWLOCK_TRUE='#'
+ GL_COND_OBJ_WINDOWS_RWLOCK_FALSE='#'
+ fi
- ;;
- esac
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for wmemchr" >&5
@@ -31949,7 +35518,19 @@ $as_echo "$gl_cv_func_wmemchr" >&6; }
HAVE_WMEMCHR=0
fi
- if test $HAVE_WMEMCHR = 0; then
+
+ if test $HAVE_WMEMCHR = 0; then
+ GL_COND_OBJ_WMEMCHR_TRUE=
+ GL_COND_OBJ_WMEMCHR_FALSE='#'
+else
+ GL_COND_OBJ_WMEMCHR_TRUE='#'
+ GL_COND_OBJ_WMEMCHR_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_WMEMCHR_TRUE}" && test -z "${GL_COND_OBJ_WMEMCHR_FALSE}"; then
+ GL_COND_OBJ_WMEMCHR_TRUE='#'
+ GL_COND_OBJ_WMEMCHR_FALSE='#'
+ fi
@@ -31958,15 +35539,14 @@ $as_echo "$gl_cv_func_wmemchr" >&6; }
- gl_LIBOBJS="$gl_LIBOBJS wmemchr.$ac_objext"
- fi
- GNULIB_WMEMCHR=1
+
+ GL_GNULIB_WMEMCHR=1
@@ -31988,7 +35568,20 @@ $as_echo "#define GNULIB_TEST_WMEMCHR 1" >>confdefs.h
HAVE_WMEMPCPY=0
fi
- if test $HAVE_WMEMPCPY = 0; then
+
+ if test $HAVE_WMEMPCPY = 0; then
+ GL_COND_OBJ_WMEMPCPY_TRUE=
+ GL_COND_OBJ_WMEMPCPY_FALSE='#'
+else
+ GL_COND_OBJ_WMEMPCPY_TRUE='#'
+ GL_COND_OBJ_WMEMPCPY_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_WMEMPCPY_TRUE}" && test -z "${GL_COND_OBJ_WMEMPCPY_FALSE}"; then
+ GL_COND_OBJ_WMEMPCPY_TRUE='#'
+ GL_COND_OBJ_WMEMPCPY_FALSE='#'
+ fi
+
@@ -31997,15 +35590,13 @@ $as_echo "#define GNULIB_TEST_WMEMCHR 1" >>confdefs.h
- gl_LIBOBJS="$gl_LIBOBJS wmempcpy.$ac_objext"
- fi
- GNULIB_WMEMPCPY=1
+ GL_GNULIB_WMEMPCPY=1
@@ -32025,6 +35616,8 @@ $as_echo "#define GNULIB_TEST_WMEMPCPY 1" >>confdefs.h
+
+
gltests_libdeps=
gltests_ltlibdeps=
@@ -32037,7 +35630,10 @@ $as_echo "#define GNULIB_TEST_WMEMPCPY 1" >>confdefs.h
+
+
gl_source_base='tests'
+ gl_source_base_prefix=
gltests_WITNESS=IN_`echo "${PACKAGE-$PACKAGE_TARNAME}" | LC_ALL=C tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ | LC_ALL=C sed -e 's/[^A-Z0-9_]/_/g'`_GNULIB_TESTS
gl_module_indicator_condition=$gltests_WITNESS
@@ -32050,6 +35646,9 @@ $as_echo "#define GNULIB_TEST_WMEMPCPY 1" >>confdefs.h
+
+
+
LIBGNU_LIBDEPS="$gl_libdeps"
LIBGNU_LTLIBDEPS="$gl_ltlibdeps"
@@ -33145,99 +36744,61 @@ if test -z "${GL_COND_LIBTOOL_TRUE}" && test -z "${GL_COND_LIBTOOL_FALSE}"; then
as_fn_error $? "conditional \"GL_COND_LIBTOOL\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
-if test -z "${GL_GENERATE_ALLOCA_H_TRUE}" && test -z "${GL_GENERATE_ALLOCA_H_FALSE}"; then
- as_fn_error $? "conditional \"GL_GENERATE_ALLOCA_H\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${GL_GENERATE_ERRNO_H_TRUE}" && test -z "${GL_GENERATE_ERRNO_H_FALSE}"; then
- as_fn_error $? "conditional \"GL_GENERATE_ERRNO_H\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${GL_GENERATE_FLOAT_H_TRUE}" && test -z "${GL_GENERATE_FLOAT_H_FALSE}"; then
- as_fn_error $? "conditional \"GL_GENERATE_FLOAT_H\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${GL_GENERATE_FNMATCH_H_TRUE}" && test -z "${GL_GENERATE_FNMATCH_H_FALSE}"; then
- as_fn_error $? "conditional \"GL_GENERATE_FNMATCH_H\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${GL_GENERATE_FNMATCH_H_TRUE}" && test -z "${GL_GENERATE_FNMATCH_H_FALSE}"; then
- as_fn_error $? "conditional \"GL_GENERATE_FNMATCH_H\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${GL_GENERATE_GLOB_H_TRUE}" && test -z "${GL_GENERATE_GLOB_H_FALSE}"; then
- as_fn_error $? "conditional \"GL_GENERATE_GLOB_H\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${GL_GENERATE_GLOB_H_TRUE}" && test -z "${GL_GENERATE_GLOB_H_FALSE}"; then
- as_fn_error $? "conditional \"GL_GENERATE_GLOB_H\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${GL_GENERATE_LIMITS_H_TRUE}" && test -z "${GL_GENERATE_LIMITS_H_FALSE}"; then
- as_fn_error $? "conditional \"GL_GENERATE_LIMITS_H\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${GL_GENERATE_LIMITS_H_TRUE}" && test -z "${GL_GENERATE_LIMITS_H_FALSE}"; then
- as_fn_error $? "conditional \"GL_GENERATE_LIMITS_H\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${GL_GENERATE_STDINT_H_TRUE}" && test -z "${GL_GENERATE_STDINT_H_FALSE}"; then
- as_fn_error $? "conditional \"GL_GENERATE_STDINT_H\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${GL_GENERATE_STDDEF_H_TRUE}" && test -z "${GL_GENERATE_STDDEF_H_FALSE}"; then
- as_fn_error $? "conditional \"GL_GENERATE_STDDEF_H\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${GL_GENERATE_NETINET_IN_H_TRUE}" && test -z "${GL_GENERATE_NETINET_IN_H_FALSE}"; then
- as_fn_error $? "conditional \"GL_GENERATE_NETINET_IN_H\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${GL_GENERATE_STDALIGN_H_TRUE}" && test -z "${GL_GENERATE_STDALIGN_H_FALSE}"; then
- as_fn_error $? "conditional \"GL_GENERATE_STDALIGN_H\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${GL_GENERATE_STDBOOL_H_TRUE}" && test -z "${GL_GENERATE_STDBOOL_H_FALSE}"; then
- as_fn_error $? "conditional \"GL_GENERATE_STDBOOL_H\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${GL_GENERATE_STDDEF_H_TRUE}" && test -z "${GL_GENERATE_STDDEF_H_FALSE}"; then
- as_fn_error $? "conditional \"GL_GENERATE_STDDEF_H\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
gl_libobjs=
gl_ltlibobjs=
+ gl_libobjdeps=
if test -n "$gl_LIBOBJS"; then
# Remove the extension.
sed_drop_objext='s/\.o$//;s/\.obj$//'
+ sed_dirname1='s,//*,/,g'
+ sed_dirname2='s,\(.\)/$,\1,'
+ sed_dirname3='s,^[^/]*$,.,'
+ sed_dirname4='s,\(.\)/[^/]*$,\1,'
+ sed_basename1='s,.*/,,'
for i in `for i in $gl_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do
gl_libobjs="$gl_libobjs $i.$ac_objext"
gl_ltlibobjs="$gl_ltlibobjs $i.lo"
+ i_dir=`echo "$i" | sed -e "$sed_dirname1" -e "$sed_dirname2" -e "$sed_dirname3" -e "$sed_dirname4"`
+ i_base=`echo "$i" | sed -e "$sed_basename1"`
+ gl_libobjdeps="$gl_libobjdeps $i_dir/\$(DEPDIR)/$i_base.Po"
done
fi
gl_LIBOBJS=$gl_libobjs
gl_LTLIBOBJS=$gl_ltlibobjs
+ gl_LIBOBJDEPS=$gl_libobjdeps
+
gltests_libobjs=
gltests_ltlibobjs=
+ gltests_libobjdeps=
if test -n "$gltests_LIBOBJS"; then
# Remove the extension.
sed_drop_objext='s/\.o$//;s/\.obj$//'
+ sed_dirname1='s,//*,/,g'
+ sed_dirname2='s,\(.\)/$,\1,'
+ sed_dirname3='s,^[^/]*$,.,'
+ sed_dirname4='s,\(.\)/[^/]*$,\1,'
+ sed_basename1='s,.*/,,'
for i in `for i in $gltests_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do
gltests_libobjs="$gltests_libobjs $i.$ac_objext"
gltests_ltlibobjs="$gltests_ltlibobjs $i.lo"
+ i_dir=`echo "$i" | sed -e "$sed_dirname1" -e "$sed_dirname2" -e "$sed_dirname3" -e "$sed_dirname4"`
+ i_base=`echo "$i" | sed -e "$sed_basename1"`
+ gltests_libobjdeps="$gltests_libobjdeps $i_dir/\$(DEPDIR)/$i_base.Po"
done
fi
gltests_LIBOBJS=$gltests_libobjs
gltests_LTLIBOBJS=$gltests_ltlibobjs
+ gltests_LIBOBJDEPS=$gltests_libobjdeps
+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5
$as_echo_n "checking that generated files are newer than configure... " >&6; }
diff --git a/gnulib/doc/gendocs_template b/gnulib/doc/gendocs_template
index c8c8fc61001..0415d947be6 100644
--- a/gnulib/doc/gendocs_template
+++ b/gnulib/doc/gendocs_template
@@ -87,7 +87,7 @@ the FSF. Broken links and other corrections or suggestions can be sent
to <a href="mailto:%%EMAIL%%">&lt;%%EMAIL%%&gt;</a>.</p>
</div>
-<p>Copyright &copy; 2020 Free Software Foundation, Inc.</p>
+<p>Copyright &copy; 2022 Free Software Foundation, Inc.</p>
<p>This page is licensed under a <a rel="license"
href="https://creativecommons.org/licenses/by-nd/3.0/us/">Creative
diff --git a/gnulib/import/Makefile.am b/gnulib/import/Makefile.am
index 5a405cfc368..80b2bb49c08 100644
--- a/gnulib/import/Makefile.am
+++ b/gnulib/import/Makefile.am
@@ -1,10 +1,10 @@
## DO NOT EDIT! GENERATED AUTOMATICALLY!
## Process this file with automake to produce Makefile.in.
-# Copyright (C) 2002-2021 Free Software Foundation, Inc.
+# Copyright (C) 2002-2022 Free Software Foundation, Inc.
#
# This file is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
+# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This file is distributed in the hope that it will be useful,
@@ -85,7 +85,7 @@
# wchar \
# wctype-h
-AUTOMAKE_OPTIONS = 1.11 gnits subdir-objects
+AUTOMAKE_OPTIONS = 1.14 gnits subdir-objects
SUBDIRS =
noinst_HEADERS =
@@ -108,6 +108,7 @@ AM_CFLAGS =
noinst_LIBRARIES += libgnu.a
libgnu_a_SOURCES =
+libgnu_a_CFLAGS = $(AM_CFLAGS) $(GL_CFLAG_GNULIB_WARNINGS)
libgnu_a_LIBADD = $(gl_LIBOBJS)
libgnu_a_DEPENDENCIES = $(gl_LIBOBJS)
EXTRA_libgnu_a_SOURCES =
@@ -123,10 +124,11 @@ HAVE_INCLUDE_NEXT = (__GNUC__ || __clang__ || 60000000 <= __DECC_VER)
## begin gnulib module accept
+if GL_COND_OBJ_ACCEPT
+libgnu_a_SOURCES += accept.c
+endif
-EXTRA_DIST += accept.c w32sock.h
-
-EXTRA_libgnu_a_SOURCES += accept.c
+EXTRA_DIST += w32sock.h
## end gnulib module accept
@@ -149,11 +151,10 @@ BUILT_SOURCES += $(ALLOCA_H)
# doesn't have one that works with the given compiler.
if GL_GENERATE_ALLOCA_H
alloca.h: alloca.in.h $(top_builddir)/config.status
- $(AM_V_GEN)rm -f $@-t $@ && \
- { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
- sed -e 's|@''HAVE_ALLOCA_H''@|$(HAVE_ALLOCA_H)|g' < $(srcdir)/alloca.in.h; \
- } > $@-t && \
- mv -f $@-t $@
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''HAVE_ALLOCA_H''@|$(HAVE_ALLOCA_H)|g' \
+ $(srcdir)/alloca.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
else
alloca.h: $(top_builddir)/config.status
rm -f $@
@@ -171,18 +172,17 @@ BUILT_SOURCES += arpa/inet.h
# We need the following in order to create <arpa/inet.h> when the system
# doesn't have one.
arpa/inet.h: arpa_inet.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(ARG_NONNULL_H)
- $(AM_V_at)$(MKDIR_P) arpa
- $(AM_V_GEN)rm -f $@-t $@ && \
- { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
- sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+ $(AM_V_GEN)$(MKDIR_P) '%reldir%/arpa'
+ $(AM_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''HAVE_FEATURES_H''@|$(HAVE_FEATURES_H)|g' \
-e 's|@''NEXT_ARPA_INET_H''@|$(NEXT_ARPA_INET_H)|g' \
-e 's|@''HAVE_ARPA_INET_H''@|$(HAVE_ARPA_INET_H)|g' \
- -e 's/@''GNULIB_INET_NTOP''@/$(GNULIB_INET_NTOP)/g' \
- -e 's/@''GNULIB_INET_PTON''@/$(GNULIB_INET_PTON)/g' \
+ -e 's/@''GNULIB_INET_NTOP''@/$(GL_GNULIB_INET_NTOP)/g' \
+ -e 's/@''GNULIB_INET_PTON''@/$(GL_GNULIB_INET_PTON)/g' \
-e 's|@''HAVE_WS2TCPIP_H''@|$(HAVE_WS2TCPIP_H)|g' \
-e 's|@''HAVE_DECL_INET_NTOP''@|$(HAVE_DECL_INET_NTOP)|g' \
-e 's|@''HAVE_DECL_INET_PTON''@|$(HAVE_DECL_INET_PTON)|g' \
@@ -191,9 +191,8 @@ arpa/inet.h: arpa_inet.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON
-e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
-e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
- < $(srcdir)/arpa_inet.in.h; \
- } > $@-t && \
- mv $@-t $@
+ $(srcdir)/arpa_inet.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
MOSTLYCLEANFILES += arpa/inet.h arpa/inet.h-t
MOSTLYCLEANDIRS += arpa
@@ -231,46 +230,48 @@ EXTRA_DIST += basename-lgpl.h
## begin gnulib module bind
+if GL_COND_OBJ_BIND
+libgnu_a_SOURCES += bind.c
+endif
-EXTRA_DIST += bind.c w32sock.h
-
-EXTRA_libgnu_a_SOURCES += bind.c
+EXTRA_DIST += w32sock.h
## end gnulib module bind
## begin gnulib module btowc
-
-EXTRA_DIST += btowc.c
-
-EXTRA_libgnu_a_SOURCES += btowc.c
+if GL_COND_OBJ_BTOWC
+libgnu_a_SOURCES += btowc.c
+endif
## end gnulib module btowc
## begin gnulib module canonicalize-lgpl
-
-EXTRA_DIST += canonicalize-lgpl.c
-
-EXTRA_libgnu_a_SOURCES += canonicalize-lgpl.c
+if GL_COND_OBJ_CANONICALIZE_LGPL
+libgnu_a_SOURCES += canonicalize-lgpl.c
+endif
## end gnulib module canonicalize-lgpl
## begin gnulib module chdir-long
+if GL_COND_OBJ_CHDIR_LONG
+libgnu_a_SOURCES += chdir-long.c
+endif
-EXTRA_DIST += chdir-long.c chdir-long.h
-
-EXTRA_libgnu_a_SOURCES += chdir-long.c
+EXTRA_DIST += chdir-long.h
## end gnulib module chdir-long
## begin gnulib module chown
-
-EXTRA_DIST += chown.c fchown-stub.c
-
-EXTRA_libgnu_a_SOURCES += chown.c fchown-stub.c
+if GL_COND_OBJ_CHOWN
+libgnu_a_SOURCES += chown.c
+endif
+if GL_COND_OBJ_FCHOWN_STUB
+libgnu_a_SOURCES += fchown-stub.c
+endif
## end gnulib module chown
@@ -284,28 +285,29 @@ EXTRA_DIST += cloexec.h
## begin gnulib module close
-
-EXTRA_DIST += close.c
-
-EXTRA_libgnu_a_SOURCES += close.c
+if GL_COND_OBJ_CLOSE
+libgnu_a_SOURCES += close.c
+endif
## end gnulib module close
## begin gnulib module closedir
+if GL_COND_OBJ_CLOSEDIR
+libgnu_a_SOURCES += closedir.c
+endif
-EXTRA_DIST += closedir.c dirent-private.h
-
-EXTRA_libgnu_a_SOURCES += closedir.c
+EXTRA_DIST += dirent-private.h
## end gnulib module closedir
## begin gnulib module connect
+if GL_COND_OBJ_CONNECT
+libgnu_a_SOURCES += connect.c
+endif
-EXTRA_DIST += connect.c w32sock.h
-
-EXTRA_libgnu_a_SOURCES += connect.c
+EXTRA_DIST += w32sock.h
## end gnulib module connect
@@ -324,20 +326,18 @@ BUILT_SOURCES += ctype.h
# We need the following in order to create <ctype.h> when the system
# doesn't have one that works with the given compiler.
ctype.h: ctype.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H)
- $(AM_V_GEN)rm -f $@-t $@ && \
- { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
- sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_CTYPE_H''@|$(NEXT_CTYPE_H)|g' \
- -e 's/@''GNULIB_ISBLANK''@/$(GNULIB_ISBLANK)/g' \
+ -e 's/@''GNULIB_ISBLANK''@/$(GL_GNULIB_ISBLANK)/g' \
-e 's/@''HAVE_ISBLANK''@/$(HAVE_ISBLANK)/g' \
-e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
- < $(srcdir)/ctype.in.h; \
- } > $@-t && \
- mv $@-t $@
+ $(srcdir)/ctype.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
MOSTLYCLEANFILES += ctype.h ctype.h-t
EXTRA_DIST += ctype.in.h
@@ -351,22 +351,21 @@ BUILT_SOURCES += dirent.h
# We need the following in order to create <dirent.h> when the system
# doesn't have one that works with the given compiler.
dirent.h: dirent.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
- $(AM_V_GEN)rm -f $@-t $@ && \
- { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
- sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's|@''HAVE_DIRENT_H''@|$(HAVE_DIRENT_H)|g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_DIRENT_H''@|$(NEXT_DIRENT_H)|g' \
- -e 's/@''GNULIB_OPENDIR''@/$(GNULIB_OPENDIR)/g' \
- -e 's/@''GNULIB_READDIR''@/$(GNULIB_READDIR)/g' \
- -e 's/@''GNULIB_REWINDDIR''@/$(GNULIB_REWINDDIR)/g' \
- -e 's/@''GNULIB_CLOSEDIR''@/$(GNULIB_CLOSEDIR)/g' \
- -e 's/@''GNULIB_DIRFD''@/$(GNULIB_DIRFD)/g' \
- -e 's/@''GNULIB_FDOPENDIR''@/$(GNULIB_FDOPENDIR)/g' \
- -e 's/@''GNULIB_SCANDIR''@/$(GNULIB_SCANDIR)/g' \
- -e 's/@''GNULIB_ALPHASORT''@/$(GNULIB_ALPHASORT)/g' \
+ -e 's/@''GNULIB_OPENDIR''@/$(GL_GNULIB_OPENDIR)/g' \
+ -e 's/@''GNULIB_READDIR''@/$(GL_GNULIB_READDIR)/g' \
+ -e 's/@''GNULIB_REWINDDIR''@/$(GL_GNULIB_REWINDDIR)/g' \
+ -e 's/@''GNULIB_CLOSEDIR''@/$(GL_GNULIB_CLOSEDIR)/g' \
+ -e 's/@''GNULIB_DIRFD''@/$(GL_GNULIB_DIRFD)/g' \
+ -e 's/@''GNULIB_FDOPENDIR''@/$(GL_GNULIB_FDOPENDIR)/g' \
+ -e 's/@''GNULIB_SCANDIR''@/$(GL_GNULIB_SCANDIR)/g' \
+ -e 's/@''GNULIB_ALPHASORT''@/$(GL_GNULIB_ALPHASORT)/g' \
-e 's/@''HAVE_OPENDIR''@/$(HAVE_OPENDIR)/g' \
-e 's/@''HAVE_READDIR''@/$(HAVE_READDIR)/g' \
-e 's/@''HAVE_REWINDDIR''@/$(HAVE_REWINDDIR)/g' \
@@ -383,9 +382,8 @@ dirent.h: dirent.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H
-e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
-e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
- < $(srcdir)/dirent.in.h; \
- } > $@-t && \
- mv $@-t $@
+ $(srcdir)/dirent.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
MOSTLYCLEANFILES += dirent.h dirent.h-t
EXTRA_DIST += dirent.in.h
@@ -394,10 +392,9 @@ EXTRA_DIST += dirent.in.h
## begin gnulib module dirfd
-
-EXTRA_DIST += dirfd.c
-
-EXTRA_libgnu_a_SOURCES += dirfd.c
+if GL_COND_OBJ_DIRFD
+libgnu_a_SOURCES += dirfd.c
+endif
## end gnulib module dirfd
@@ -411,19 +408,17 @@ EXTRA_DIST += dirname.h
## begin gnulib module dup
-
-EXTRA_DIST += dup.c
-
-EXTRA_libgnu_a_SOURCES += dup.c
+if GL_COND_OBJ_DUP
+libgnu_a_SOURCES += dup.c
+endif
## end gnulib module dup
## begin gnulib module dup2
-
-EXTRA_DIST += dup2.c
-
-EXTRA_libgnu_a_SOURCES += dup2.c
+if GL_COND_OBJ_DUP2
+libgnu_a_SOURCES += dup2.c
+endif
## end gnulib module dup2
@@ -442,9 +437,8 @@ BUILT_SOURCES += $(ERRNO_H)
# doesn't have one that is POSIX compliant.
if GL_GENERATE_ERRNO_H
errno.h: errno.in.h $(top_builddir)/config.status
- $(AM_V_GEN)rm -f $@-t $@ && \
- { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
- sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
@@ -455,9 +449,8 @@ errno.h: errno.in.h $(top_builddir)/config.status
-e 's|@''ENOLINK_VALUE''@|$(ENOLINK_VALUE)|g' \
-e 's|@''EOVERFLOW_HIDDEN''@|$(EOVERFLOW_HIDDEN)|g' \
-e 's|@''EOVERFLOW_VALUE''@|$(EOVERFLOW_VALUE)|g' \
- < $(srcdir)/errno.in.h; \
- } > $@-t && \
- mv $@-t $@
+ $(srcdir)/errno.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
else
errno.h: $(top_builddir)/config.status
rm -f $@
@@ -470,10 +463,11 @@ EXTRA_DIST += errno.in.h
## begin gnulib module error
+if GL_COND_OBJ_ERROR
+libgnu_a_SOURCES += error.c
+endif
-EXTRA_DIST += error.c error.h
-
-EXTRA_libgnu_a_SOURCES += error.c
+EXTRA_DIST += error.h
## end gnulib module error
@@ -487,19 +481,17 @@ EXTRA_DIST += exitfail.h
## begin gnulib module fchdir
-
-EXTRA_DIST += fchdir.c
-
-EXTRA_libgnu_a_SOURCES += fchdir.c
+if GL_COND_OBJ_FCHDIR
+libgnu_a_SOURCES += fchdir.c
+endif
## end gnulib module fchdir
## begin gnulib module fcntl
-
-EXTRA_DIST += fcntl.c
-
-EXTRA_libgnu_a_SOURCES += fcntl.c
+if GL_COND_OBJ_FCNTL
+libgnu_a_SOURCES += fcntl.c
+endif
## end gnulib module fcntl
@@ -510,20 +502,19 @@ BUILT_SOURCES += fcntl.h
# We need the following in order to create <fcntl.h> when the system
# doesn't have one that works with the given compiler.
fcntl.h: fcntl.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
- $(AM_V_GEN)rm -f $@-t $@ && \
- { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
- sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_FCNTL_H''@|$(NEXT_FCNTL_H)|g' \
- -e 's/@''GNULIB_CREAT''@/$(GNULIB_CREAT)/g' \
- -e 's/@''GNULIB_FCNTL''@/$(GNULIB_FCNTL)/g' \
- -e 's/@''GNULIB_NONBLOCKING''@/$(GNULIB_NONBLOCKING)/g' \
- -e 's/@''GNULIB_OPEN''@/$(GNULIB_OPEN)/g' \
- -e 's/@''GNULIB_OPENAT''@/$(GNULIB_OPENAT)/g' \
- -e 's/@''GNULIB_MDA_CREAT''@/$(GNULIB_MDA_CREAT)/g' \
- -e 's/@''GNULIB_MDA_OPEN''@/$(GNULIB_MDA_OPEN)/g' \
+ -e 's/@''GNULIB_CREAT''@/$(GL_GNULIB_CREAT)/g' \
+ -e 's/@''GNULIB_FCNTL''@/$(GL_GNULIB_FCNTL)/g' \
+ -e 's/@''GNULIB_NONBLOCKING''@/$(GL_GNULIB_NONBLOCKING)/g' \
+ -e 's/@''GNULIB_OPEN''@/$(GL_GNULIB_OPEN)/g' \
+ -e 's/@''GNULIB_OPENAT''@/$(GL_GNULIB_OPENAT)/g' \
+ -e 's/@''GNULIB_MDA_CREAT''@/$(GL_GNULIB_MDA_CREAT)/g' \
+ -e 's/@''GNULIB_MDA_OPEN''@/$(GL_GNULIB_MDA_OPEN)/g' \
-e 's|@''HAVE_FCNTL''@|$(HAVE_FCNTL)|g' \
-e 's|@''HAVE_OPENAT''@|$(HAVE_OPENAT)|g' \
-e 's|@''REPLACE_CREAT''@|$(REPLACE_CREAT)|g' \
@@ -533,9 +524,8 @@ fcntl.h: fcntl.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H)
-e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
-e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
- < $(srcdir)/fcntl.in.h; \
- } > $@-t && \
- mv $@-t $@
+ $(srcdir)/fcntl.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
MOSTLYCLEANFILES += fcntl.h fcntl.h-t
EXTRA_DIST += fcntl.in.h
@@ -558,19 +548,17 @@ libgnu_a_SOURCES += fd-safer-flag.c dup-safer-flag.c
## begin gnulib module fdopendir
-
-EXTRA_DIST += fdopendir.c
-
-EXTRA_libgnu_a_SOURCES += fdopendir.c
+if GL_COND_OBJ_FDOPENDIR
+libgnu_a_SOURCES += fdopendir.c
+endif
## end gnulib module fdopendir
## begin gnulib module ffs
-
-EXTRA_DIST += ffs.c
-
-EXTRA_libgnu_a_SOURCES += ffs.c
+if GL_COND_OBJ_FFS
+libgnu_a_SOURCES += ffs.c
+endif
## end gnulib module ffs
@@ -604,26 +592,29 @@ BUILT_SOURCES += $(FLOAT_H)
# doesn't have one that works with the given compiler.
if GL_GENERATE_FLOAT_H
float.h: float.in.h $(top_builddir)/config.status
- $(AM_V_GEN)rm -f $@-t $@ && \
- { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
- sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_FLOAT_H''@|$(NEXT_FLOAT_H)|g' \
-e 's|@''REPLACE_ITOLD''@|$(REPLACE_ITOLD)|g' \
- < $(srcdir)/float.in.h; \
- } > $@-t && \
- mv $@-t $@
+ $(srcdir)/float.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
else
float.h: $(top_builddir)/config.status
rm -f $@
endif
MOSTLYCLEANFILES += float.h float.h-t
-EXTRA_DIST += float.c float.in.h itold.c
+if GL_COND_OBJ_FLOAT
+libgnu_a_SOURCES += float.c
+endif
+if GL_COND_OBJ_ITOLD
+libgnu_a_SOURCES += itold.c
+endif
-EXTRA_libgnu_a_SOURCES += float.c itold.c
+EXTRA_DIST += float.in.h
## end gnulib module float
@@ -652,23 +643,21 @@ BUILT_SOURCES += $(FNMATCH_H)
# We need the following in order to create <fnmatch.h>.
if GL_GENERATE_FNMATCH_H
fnmatch.h: fnmatch.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
- $(AM_V_GEN)rm -f $@-t $@ && \
- { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
- sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's|@''HAVE_FNMATCH_H''@|$(HAVE_FNMATCH_H)|g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_FNMATCH_H''@|$(NEXT_FNMATCH_H)|g' \
- -e 's/@''GNULIB_FNMATCH''@/$(GNULIB_FNMATCH)/g' \
+ -e 's/@''GNULIB_FNMATCH''@/$(GL_GNULIB_FNMATCH)/g' \
-e 's|@''HAVE_FNMATCH''@|$(HAVE_FNMATCH)|g' \
-e 's|@''REPLACE_FNMATCH''@|$(REPLACE_FNMATCH)|g' \
-e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
-e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
- < $(srcdir)/fnmatch.in.h; \
- } > $@-t && \
- mv $@-t $@
+ $(srcdir)/fnmatch.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
else
fnmatch.h: $(top_builddir)/config.status
rm -f $@
@@ -688,10 +677,9 @@ EXTRA_DIST += fpucw.h
## begin gnulib module free-posix
-
-EXTRA_DIST += free.c
-
-EXTRA_libgnu_a_SOURCES += free.c
+if GL_COND_OBJ_FREE
+libgnu_a_SOURCES += free.c
+endif
## end gnulib module free-posix
@@ -715,22 +703,47 @@ EXTRA_libgnu_a_SOURCES += frexp.c frexpl.c
## begin gnulib module fstat
+if GL_COND_OBJ_FSTAT
+libgnu_a_SOURCES += fstat.c
+endif
-EXTRA_DIST += fstat.c stat-w32.c stat-w32.h
+EXTRA_DIST += stat-w32.c stat-w32.h
-EXTRA_libgnu_a_SOURCES += fstat.c stat-w32.c
+EXTRA_libgnu_a_SOURCES += stat-w32.c
## end gnulib module fstat
## begin gnulib module fstatat
+if GL_COND_OBJ_FSTATAT
+libgnu_a_SOURCES += fstatat.c
+endif
-EXTRA_DIST += at-func.c fstatat.c
+EXTRA_DIST += at-func.c
-EXTRA_libgnu_a_SOURCES += at-func.c fstatat.c
+EXTRA_libgnu_a_SOURCES += at-func.c
## end gnulib module fstatat
+## begin gnulib module gen-header
+
+# In 'sed', replace the pattern space with a "DO NOT EDIT" comment.
+SED_HEADER_NOEDIT = s,.*,/* DO NOT EDIT! GENERATED AUTOMATICALLY! */,
+
+# '$(SED_HEADER_STDOUT) -e "..."' runs 'sed' but first outputs "DO NOT EDIT".
+SED_HEADER_STDOUT = sed -e 1h -e '1$(SED_HEADER_NOEDIT)' -e 1G
+
+# '$(SED_HEADER_TO_AT_t) FILE' copies FILE to $@-t, prepending a leading
+# "DO_NOT_EDIT". Although this could be done more simply via:
+# SED_HEADER_TO_AT_t = $(SED_HEADER_STDOUT) > $@-t
+# the -n and 'w' avoid a fork+exec, at least when GNU Make is used.
+SED_HEADER_TO_AT_t = $(SED_HEADER_STDOUT) -n -e 'w $@-t'
+
+# Use $(gl_V_at) instead of $(AM_V_GEN) or $(AM_V_at) on a line that
+gl_V_at = $(AM_V_GEN)
+
+## end gnulib module gen-header
+
## begin gnulib module gendocs
@@ -740,55 +753,49 @@ EXTRA_DIST += $(top_srcdir)/import/extra/gendocs.sh
## begin gnulib module getcwd
-
-EXTRA_DIST += getcwd.c
-
-EXTRA_libgnu_a_SOURCES += getcwd.c
+if GL_COND_OBJ_GETCWD
+libgnu_a_SOURCES += getcwd.c
+endif
## end gnulib module getcwd
## begin gnulib module getcwd-lgpl
-
-EXTRA_DIST += getcwd-lgpl.c
-
-EXTRA_libgnu_a_SOURCES += getcwd-lgpl.c
+if GL_COND_OBJ_GETCWD_LGPL
+libgnu_a_SOURCES += getcwd-lgpl.c
+endif
## end gnulib module getcwd-lgpl
## begin gnulib module getdelim
-
-EXTRA_DIST += getdelim.c
-
-EXTRA_libgnu_a_SOURCES += getdelim.c
+if GL_COND_OBJ_GETDELIM
+libgnu_a_SOURCES += getdelim.c
+endif
## end gnulib module getdelim
## begin gnulib module getdtablesize
-
-EXTRA_DIST += getdtablesize.c
-
-EXTRA_libgnu_a_SOURCES += getdtablesize.c
+if GL_COND_OBJ_GETDTABLESIZE
+libgnu_a_SOURCES += getdtablesize.c
+endif
## end gnulib module getdtablesize
## begin gnulib module getline
-
-EXTRA_DIST += getline.c
-
-EXTRA_libgnu_a_SOURCES += getline.c
+if GL_COND_OBJ_GETLINE
+libgnu_a_SOURCES += getline.c
+endif
## end gnulib module getline
## begin gnulib module getlogin_r
-
-EXTRA_DIST += getlogin_r.c
-
-EXTRA_libgnu_a_SOURCES += getlogin_r.c
+if GL_COND_OBJ_GETLOGIN_R
+libgnu_a_SOURCES += getlogin_r.c
+endif
## end gnulib module getlogin_r
@@ -800,10 +807,9 @@ libgnu_a_SOURCES += getprogname.h getprogname.c
## begin gnulib module getrandom
-
-EXTRA_DIST += getrandom.c
-
-EXTRA_libgnu_a_SOURCES += getrandom.c
+if GL_COND_OBJ_GETRANDOM
+libgnu_a_SOURCES += getrandom.c
+endif
## end gnulib module getrandom
@@ -815,10 +821,9 @@ libgnu_a_SOURCES += gettext.h
## begin gnulib module gettimeofday
-
-EXTRA_DIST += gettimeofday.c
-
-EXTRA_libgnu_a_SOURCES += gettimeofday.c
+if GL_COND_OBJ_GETTIMEOFDAY
+libgnu_a_SOURCES += gettimeofday.c
+endif
## end gnulib module gettimeofday
@@ -831,10 +836,14 @@ EXTRA_DIST += $(top_srcdir)/import/extra/gitlog-to-changelog
## begin gnulib module glob
+if GL_COND_OBJ_GLOB
+libgnu_a_SOURCES += glob.c globfree.c
+endif
+if GL_COND_OBJ_GLOB_PATTERN_P
+libgnu_a_SOURCES += glob_pattern_p.c
+endif
-EXTRA_DIST += glob.c glob_internal.h glob_pattern_p.c globfree.c
-
-EXTRA_libgnu_a_SOURCES += glob.c glob_pattern_p.c globfree.c
+EXTRA_DIST += glob_internal.h
## end gnulib module glob
@@ -845,15 +854,14 @@ BUILT_SOURCES += $(GLOB_H)
# We need the following in order to create <glob.h>.
if GL_GENERATE_GLOB_H
glob.h: glob.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
- $(AM_V_GEN)rm -f $@-t $@ && \
- { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
- sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's|@''HAVE_GLOB_H''@|$(HAVE_GLOB_H)|g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_GLOB_H''@|$(NEXT_GLOB_H)|g' \
- -e 's/@''GNULIB_GLOB''@/$(GNULIB_GLOB)/g' \
+ -e 's/@''GNULIB_GLOB''@/$(GL_GNULIB_GLOB)/g' \
-e 's|@''HAVE_GLOB''@|$(HAVE_GLOB)|g' \
-e 's|@''HAVE_GLOB_PATTERN_P''@|$(HAVE_GLOB_PATTERN_P)|g' \
-e 's|@''REPLACE_GLOB''@|$(REPLACE_GLOB)|g' \
@@ -861,15 +869,31 @@ glob.h: glob.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(
-e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
-e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
- < $(srcdir)/glob.in.h; \
- } > $@-t && \
- mv $@-t $@
+ $(srcdir)/glob.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
else
glob.h: $(top_builddir)/config.status
rm -f $@
endif
MOSTLYCLEANFILES += glob.h glob.h-t
+BUILT_SOURCES += glob-libc.gl.h
+
+glob-libc.gl.h: glob-libc.h
+ $(AM_V_GEN)$(SED_HEADER_STDOUT) \
+ -e '/__BEGIN_DECLS/{ s/__BEGIN_DECLS/#ifdef __cplusplus%extern "C" {%#endif/; y/%/\n/; }' \
+ -e '/__END_DECLS/{ s/__END_DECLS/#ifdef __cplusplus%}%#endif/; y/%/\n/; }' \
+ -e 's|__THROWNL||g' \
+ -e 's|__THROW||g' \
+ -e 's|__restrict|restrict|g' \
+ -e 's|defined __USE_MISC|1|' \
+ -e 's|ifdef __USE_GNU|if 1|' \
+ -e 's|ifdef __USE_LARGEFILE64|if 0|' \
+ $(srcdir)/glob-libc.h > $@-t
+ $(AM_V_at)mv $@-t $@
+MOSTLYCLEANFILES += glob-libc.gl.h glob-libc.gl.h-t
+
+
EXTRA_DIST += glob-libc.h glob.in.h
## end gnulib module glob-h
@@ -890,10 +914,9 @@ libgnu_a_SOURCES += idx.h
## begin gnulib module inet_ntop
-
-EXTRA_DIST += inet_ntop.c
-
-EXTRA_libgnu_a_SOURCES += inet_ntop.c
+if GL_COND_OBJ_INET_NTOP
+libgnu_a_SOURCES += inet_ntop.c
+endif
## end gnulib module inet_ntop
@@ -911,19 +934,18 @@ BUILT_SOURCES += inttypes.h
# We need the following in order to create <inttypes.h> when the system
# doesn't have one that works with the given compiler.
inttypes.h: inttypes.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(ARG_NONNULL_H)
- $(AM_V_GEN)rm -f $@-t $@ && \
- { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
- sed -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_INTTYPES_H''@|$(NEXT_INTTYPES_H)|g' \
-e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \
-e 's/@''PRIPTR_PREFIX''@/$(PRIPTR_PREFIX)/g' \
- -e 's/@''GNULIB_IMAXABS''@/$(GNULIB_IMAXABS)/g' \
- -e 's/@''GNULIB_IMAXDIV''@/$(GNULIB_IMAXDIV)/g' \
- -e 's/@''GNULIB_STRTOIMAX''@/$(GNULIB_STRTOIMAX)/g' \
- -e 's/@''GNULIB_STRTOUMAX''@/$(GNULIB_STRTOUMAX)/g' \
+ -e 's/@''GNULIB_IMAXABS''@/$(GL_GNULIB_IMAXABS)/g' \
+ -e 's/@''GNULIB_IMAXDIV''@/$(GL_GNULIB_IMAXDIV)/g' \
+ -e 's/@''GNULIB_STRTOIMAX''@/$(GL_GNULIB_STRTOIMAX)/g' \
+ -e 's/@''GNULIB_STRTOUMAX''@/$(GL_GNULIB_STRTOUMAX)/g' \
-e 's/@''HAVE_DECL_IMAXABS''@/$(HAVE_DECL_IMAXABS)/g' \
-e 's/@''HAVE_DECL_IMAXDIV''@/$(HAVE_DECL_IMAXDIV)/g' \
-e 's/@''HAVE_DECL_STRTOIMAX''@/$(HAVE_DECL_STRTOIMAX)/g' \
@@ -938,9 +960,8 @@ inttypes.h: inttypes.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_U
-e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
-e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
- < $(srcdir)/inttypes.in.h; \
- } > $@-t && \
- mv $@-t $@
+ $(srcdir)/inttypes.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
MOSTLYCLEANFILES += inttypes.h inttypes.h-t
EXTRA_DIST += inttypes.in.h
@@ -949,10 +970,9 @@ EXTRA_DIST += inttypes.in.h
## begin gnulib module isblank
-
-EXTRA_DIST += isblank.c
-
-EXTRA_libgnu_a_SOURCES += isblank.c
+if GL_COND_OBJ_ISBLANK
+libgnu_a_SOURCES += isblank.c
+endif
## end gnulib module isblank
@@ -989,16 +1009,14 @@ BUILT_SOURCES += $(LIMITS_H)
# doesn't have one that is compatible with GNU.
if GL_GENERATE_LIMITS_H
limits.h: limits.in.h $(top_builddir)/config.status
- $(AM_V_GEN)rm -f $@-t $@ && \
- { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
- sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_LIMITS_H''@|$(NEXT_LIMITS_H)|g' \
- < $(srcdir)/limits.in.h; \
- } > $@-t && \
- mv $@-t $@
+ $(srcdir)/limits.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
else
limits.h: $(top_builddir)/config.status
rm -f $@
@@ -1011,10 +1029,11 @@ EXTRA_DIST += limits.in.h
## begin gnulib module listen
+if GL_COND_OBJ_LISTEN
+libgnu_a_SOURCES += listen.c
+endif
-EXTRA_DIST += listen.c w32sock.h
-
-EXTRA_libgnu_a_SOURCES += listen.c
+EXTRA_DIST += w32sock.h
## end gnulib module listen
@@ -1033,18 +1052,17 @@ BUILT_SOURCES += locale.h
# We need the following in order to create <locale.h> when the system
# doesn't have one that provides all definitions.
locale.h: locale.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
- $(AM_V_GEN)rm -f $@-t $@ && \
- { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
- sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_LOCALE_H''@|$(NEXT_LOCALE_H)|g' \
- -e 's/@''GNULIB_LOCALECONV''@/$(GNULIB_LOCALECONV)/g' \
- -e 's/@''GNULIB_SETLOCALE''@/$(GNULIB_SETLOCALE)/g' \
- -e 's/@''GNULIB_SETLOCALE_NULL''@/$(GNULIB_SETLOCALE_NULL)/g' \
- -e 's/@''GNULIB_DUPLOCALE''@/$(GNULIB_DUPLOCALE)/g' \
- -e 's/@''GNULIB_LOCALENAME''@/$(GNULIB_LOCALENAME)/g' \
+ -e 's/@''GNULIB_LOCALECONV''@/$(GL_GNULIB_LOCALECONV)/g' \
+ -e 's/@''GNULIB_SETLOCALE''@/$(GL_GNULIB_SETLOCALE)/g' \
+ -e 's/@''GNULIB_SETLOCALE_NULL''@/$(GL_GNULIB_SETLOCALE_NULL)/g' \
+ -e 's/@''GNULIB_DUPLOCALE''@/$(GL_GNULIB_DUPLOCALE)/g' \
+ -e 's/@''GNULIB_LOCALENAME''@/$(GL_GNULIB_LOCALENAME)/g' \
-e 's|@''HAVE_NEWLOCALE''@|$(HAVE_NEWLOCALE)|g' \
-e 's|@''HAVE_DUPLOCALE''@|$(HAVE_DUPLOCALE)|g' \
-e 's|@''HAVE_FREELOCALE''@|$(HAVE_FREELOCALE)|g' \
@@ -1055,12 +1073,12 @@ locale.h: locale.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H
-e 's|@''REPLACE_DUPLOCALE''@|$(REPLACE_DUPLOCALE)|g' \
-e 's|@''REPLACE_FREELOCALE''@|$(REPLACE_FREELOCALE)|g' \
-e 's|@''REPLACE_STRUCT_LCONV''@|$(REPLACE_STRUCT_LCONV)|g' \
+ -e 's|@''LOCALENAME_ENHANCE_LOCALE_FUNCS''@|$(LOCALENAME_ENHANCE_LOCALE_FUNCS)|g' \
-e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
-e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
- < $(srcdir)/locale.in.h; \
- } > $@-t && \
- mv $@-t $@
+ $(srcdir)/locale.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
MOSTLYCLEANFILES += locale.h locale.h-t
EXTRA_DIST += locale.in.h
@@ -1075,10 +1093,9 @@ libgnu_a_SOURCES += glthread/lock.h glthread/lock.c
## begin gnulib module lstat
-
-EXTRA_DIST += lstat.c
-
-EXTRA_libgnu_a_SOURCES += lstat.c
+if GL_COND_OBJ_LSTAT
+libgnu_a_SOURCES += lstat.c
+endif
## end gnulib module lstat
@@ -1107,115 +1124,114 @@ libgnu_a_SOURCES += math.c
# We need the following in order to create <math.h> when the system
# doesn't have one that works with the given compiler.
math.h: math.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
- $(AM_V_GEN)rm -f $@-t $@ && \
- { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
- sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's|@''INCLUDE_NEXT_AS_FIRST_DIRECTIVE''@|$(INCLUDE_NEXT_AS_FIRST_DIRECTIVE)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_AS_FIRST_DIRECTIVE_MATH_H''@|$(NEXT_AS_FIRST_DIRECTIVE_MATH_H)|g' \
- -e 's/@''GNULIB_ACOSF''@/$(GNULIB_ACOSF)/g' \
- -e 's/@''GNULIB_ACOSL''@/$(GNULIB_ACOSL)/g' \
- -e 's/@''GNULIB_ASINF''@/$(GNULIB_ASINF)/g' \
- -e 's/@''GNULIB_ASINL''@/$(GNULIB_ASINL)/g' \
- -e 's/@''GNULIB_ATANF''@/$(GNULIB_ATANF)/g' \
- -e 's/@''GNULIB_ATANL''@/$(GNULIB_ATANL)/g' \
- -e 's/@''GNULIB_ATAN2F''@/$(GNULIB_ATAN2F)/g' \
- -e 's/@''GNULIB_CBRT''@/$(GNULIB_CBRT)/g' \
- -e 's/@''GNULIB_CBRTF''@/$(GNULIB_CBRTF)/g' \
- -e 's/@''GNULIB_CBRTL''@/$(GNULIB_CBRTL)/g' \
- -e 's/@''GNULIB_CEIL''@/$(GNULIB_CEIL)/g' \
- -e 's/@''GNULIB_CEILF''@/$(GNULIB_CEILF)/g' \
- -e 's/@''GNULIB_CEILL''@/$(GNULIB_CEILL)/g' \
- -e 's/@''GNULIB_COPYSIGN''@/$(GNULIB_COPYSIGN)/g' \
- -e 's/@''GNULIB_COPYSIGNF''@/$(GNULIB_COPYSIGNF)/g' \
- -e 's/@''GNULIB_COPYSIGNL''@/$(GNULIB_COPYSIGNL)/g' \
- -e 's/@''GNULIB_COSF''@/$(GNULIB_COSF)/g' \
- -e 's/@''GNULIB_COSL''@/$(GNULIB_COSL)/g' \
- -e 's/@''GNULIB_COSHF''@/$(GNULIB_COSHF)/g' \
- -e 's/@''GNULIB_EXPF''@/$(GNULIB_EXPF)/g' \
- -e 's/@''GNULIB_EXPL''@/$(GNULIB_EXPL)/g' \
- -e 's/@''GNULIB_EXP2''@/$(GNULIB_EXP2)/g' \
- -e 's/@''GNULIB_EXP2F''@/$(GNULIB_EXP2F)/g' \
- -e 's/@''GNULIB_EXP2L''@/$(GNULIB_EXP2L)/g' \
- -e 's/@''GNULIB_EXPM1''@/$(GNULIB_EXPM1)/g' \
- -e 's/@''GNULIB_EXPM1F''@/$(GNULIB_EXPM1F)/g' \
- -e 's/@''GNULIB_EXPM1L''@/$(GNULIB_EXPM1L)/g' \
- -e 's/@''GNULIB_FABSF''@/$(GNULIB_FABSF)/g' \
- -e 's/@''GNULIB_FABSL''@/$(GNULIB_FABSL)/g' \
- -e 's/@''GNULIB_FLOOR''@/$(GNULIB_FLOOR)/g' \
- -e 's/@''GNULIB_FLOORF''@/$(GNULIB_FLOORF)/g' \
- -e 's/@''GNULIB_FLOORL''@/$(GNULIB_FLOORL)/g' \
- -e 's/@''GNULIB_FMA''@/$(GNULIB_FMA)/g' \
- -e 's/@''GNULIB_FMAF''@/$(GNULIB_FMAF)/g' \
- -e 's/@''GNULIB_FMAL''@/$(GNULIB_FMAL)/g' \
- -e 's/@''GNULIB_FMOD''@/$(GNULIB_FMOD)/g' \
- -e 's/@''GNULIB_FMODF''@/$(GNULIB_FMODF)/g' \
- -e 's/@''GNULIB_FMODL''@/$(GNULIB_FMODL)/g' \
- -e 's/@''GNULIB_FREXPF''@/$(GNULIB_FREXPF)/g' \
- -e 's/@''GNULIB_FREXP''@/$(GNULIB_FREXP)/g' \
- -e 's/@''GNULIB_FREXPL''@/$(GNULIB_FREXPL)/g' \
- -e 's/@''GNULIB_HYPOT''@/$(GNULIB_HYPOT)/g' \
- -e 's/@''GNULIB_HYPOTF''@/$(GNULIB_HYPOTF)/g' \
- -e 's/@''GNULIB_HYPOTL''@/$(GNULIB_HYPOTL)/g' \
+ -e 's/@''GNULIB_ACOSF''@/$(GL_GNULIB_ACOSF)/g' \
+ -e 's/@''GNULIB_ACOSL''@/$(GL_GNULIB_ACOSL)/g' \
+ -e 's/@''GNULIB_ASINF''@/$(GL_GNULIB_ASINF)/g' \
+ -e 's/@''GNULIB_ASINL''@/$(GL_GNULIB_ASINL)/g' \
+ -e 's/@''GNULIB_ATANF''@/$(GL_GNULIB_ATANF)/g' \
+ -e 's/@''GNULIB_ATANL''@/$(GL_GNULIB_ATANL)/g' \
+ -e 's/@''GNULIB_ATAN2F''@/$(GL_GNULIB_ATAN2F)/g' \
+ -e 's/@''GNULIB_CBRT''@/$(GL_GNULIB_CBRT)/g' \
+ -e 's/@''GNULIB_CBRTF''@/$(GL_GNULIB_CBRTF)/g' \
+ -e 's/@''GNULIB_CBRTL''@/$(GL_GNULIB_CBRTL)/g' \
+ -e 's/@''GNULIB_CEIL''@/$(GL_GNULIB_CEIL)/g' \
+ -e 's/@''GNULIB_CEILF''@/$(GL_GNULIB_CEILF)/g' \
+ -e 's/@''GNULIB_CEILL''@/$(GL_GNULIB_CEILL)/g' \
+ -e 's/@''GNULIB_COPYSIGN''@/$(GL_GNULIB_COPYSIGN)/g' \
+ -e 's/@''GNULIB_COPYSIGNF''@/$(GL_GNULIB_COPYSIGNF)/g' \
+ -e 's/@''GNULIB_COPYSIGNL''@/$(GL_GNULIB_COPYSIGNL)/g' \
+ -e 's/@''GNULIB_COSF''@/$(GL_GNULIB_COSF)/g' \
+ -e 's/@''GNULIB_COSL''@/$(GL_GNULIB_COSL)/g' \
+ -e 's/@''GNULIB_COSHF''@/$(GL_GNULIB_COSHF)/g' \
+ -e 's/@''GNULIB_EXPF''@/$(GL_GNULIB_EXPF)/g' \
+ -e 's/@''GNULIB_EXPL''@/$(GL_GNULIB_EXPL)/g' \
+ -e 's/@''GNULIB_EXP2''@/$(GL_GNULIB_EXP2)/g' \
+ -e 's/@''GNULIB_EXP2F''@/$(GL_GNULIB_EXP2F)/g' \
+ -e 's/@''GNULIB_EXP2L''@/$(GL_GNULIB_EXP2L)/g' \
+ -e 's/@''GNULIB_EXPM1''@/$(GL_GNULIB_EXPM1)/g' \
+ -e 's/@''GNULIB_EXPM1F''@/$(GL_GNULIB_EXPM1F)/g' \
+ -e 's/@''GNULIB_EXPM1L''@/$(GL_GNULIB_EXPM1L)/g' \
+ -e 's/@''GNULIB_FABSF''@/$(GL_GNULIB_FABSF)/g' \
+ -e 's/@''GNULIB_FABSL''@/$(GL_GNULIB_FABSL)/g' \
+ -e 's/@''GNULIB_FLOOR''@/$(GL_GNULIB_FLOOR)/g' \
+ -e 's/@''GNULIB_FLOORF''@/$(GL_GNULIB_FLOORF)/g' \
+ -e 's/@''GNULIB_FLOORL''@/$(GL_GNULIB_FLOORL)/g' \
+ -e 's/@''GNULIB_FMA''@/$(GL_GNULIB_FMA)/g' \
+ -e 's/@''GNULIB_FMAF''@/$(GL_GNULIB_FMAF)/g' \
+ -e 's/@''GNULIB_FMAL''@/$(GL_GNULIB_FMAL)/g' \
+ -e 's/@''GNULIB_FMOD''@/$(GL_GNULIB_FMOD)/g' \
+ -e 's/@''GNULIB_FMODF''@/$(GL_GNULIB_FMODF)/g' \
+ -e 's/@''GNULIB_FMODL''@/$(GL_GNULIB_FMODL)/g' \
+ -e 's/@''GNULIB_FREXPF''@/$(GL_GNULIB_FREXPF)/g' \
+ -e 's/@''GNULIB_FREXP''@/$(GL_GNULIB_FREXP)/g' \
+ -e 's/@''GNULIB_FREXPL''@/$(GL_GNULIB_FREXPL)/g' \
+ -e 's/@''GNULIB_HYPOT''@/$(GL_GNULIB_HYPOT)/g' \
+ -e 's/@''GNULIB_HYPOTF''@/$(GL_GNULIB_HYPOTF)/g' \
+ -e 's/@''GNULIB_HYPOTL''@/$(GL_GNULIB_HYPOTL)/g' \
< $(srcdir)/math.in.h | \
- sed -e 's/@''GNULIB_ILOGB''@/$(GNULIB_ILOGB)/g' \
- -e 's/@''GNULIB_ILOGBF''@/$(GNULIB_ILOGBF)/g' \
- -e 's/@''GNULIB_ILOGBL''@/$(GNULIB_ILOGBL)/g' \
- -e 's/@''GNULIB_ISFINITE''@/$(GNULIB_ISFINITE)/g' \
- -e 's/@''GNULIB_ISINF''@/$(GNULIB_ISINF)/g' \
- -e 's/@''GNULIB_ISNAN''@/$(GNULIB_ISNAN)/g' \
- -e 's/@''GNULIB_ISNANF''@/$(GNULIB_ISNANF)/g' \
- -e 's/@''GNULIB_ISNAND''@/$(GNULIB_ISNAND)/g' \
- -e 's/@''GNULIB_ISNANL''@/$(GNULIB_ISNANL)/g' \
- -e 's/@''GNULIB_LDEXPF''@/$(GNULIB_LDEXPF)/g' \
- -e 's/@''GNULIB_LDEXPL''@/$(GNULIB_LDEXPL)/g' \
- -e 's/@''GNULIB_LOG''@/$(GNULIB_LOG)/g' \
- -e 's/@''GNULIB_LOGF''@/$(GNULIB_LOGF)/g' \
- -e 's/@''GNULIB_LOGL''@/$(GNULIB_LOGL)/g' \
- -e 's/@''GNULIB_LOG10''@/$(GNULIB_LOG10)/g' \
- -e 's/@''GNULIB_LOG10F''@/$(GNULIB_LOG10F)/g' \
- -e 's/@''GNULIB_LOG10L''@/$(GNULIB_LOG10L)/g' \
- -e 's/@''GNULIB_LOG1P''@/$(GNULIB_LOG1P)/g' \
- -e 's/@''GNULIB_LOG1PF''@/$(GNULIB_LOG1PF)/g' \
- -e 's/@''GNULIB_LOG1PL''@/$(GNULIB_LOG1PL)/g' \
- -e 's/@''GNULIB_LOG2''@/$(GNULIB_LOG2)/g' \
- -e 's/@''GNULIB_LOG2F''@/$(GNULIB_LOG2F)/g' \
- -e 's/@''GNULIB_LOG2L''@/$(GNULIB_LOG2L)/g' \
- -e 's/@''GNULIB_LOGB''@/$(GNULIB_LOGB)/g' \
- -e 's/@''GNULIB_LOGBF''@/$(GNULIB_LOGBF)/g' \
- -e 's/@''GNULIB_LOGBL''@/$(GNULIB_LOGBL)/g' \
- -e 's/@''GNULIB_MODF''@/$(GNULIB_MODF)/g' \
- -e 's/@''GNULIB_MODFF''@/$(GNULIB_MODFF)/g' \
- -e 's/@''GNULIB_MODFL''@/$(GNULIB_MODFL)/g' \
- -e 's/@''GNULIB_POWF''@/$(GNULIB_POWF)/g' \
- -e 's/@''GNULIB_REMAINDER''@/$(GNULIB_REMAINDER)/g' \
- -e 's/@''GNULIB_REMAINDERF''@/$(GNULIB_REMAINDERF)/g' \
- -e 's/@''GNULIB_REMAINDERL''@/$(GNULIB_REMAINDERL)/g' \
- -e 's/@''GNULIB_RINT''@/$(GNULIB_RINT)/g' \
- -e 's/@''GNULIB_RINTF''@/$(GNULIB_RINTF)/g' \
- -e 's/@''GNULIB_RINTL''@/$(GNULIB_RINTL)/g' \
- -e 's/@''GNULIB_ROUND''@/$(GNULIB_ROUND)/g' \
- -e 's/@''GNULIB_ROUNDF''@/$(GNULIB_ROUNDF)/g' \
- -e 's/@''GNULIB_ROUNDL''@/$(GNULIB_ROUNDL)/g' \
- -e 's/@''GNULIB_SIGNBIT''@/$(GNULIB_SIGNBIT)/g' \
- -e 's/@''GNULIB_SINF''@/$(GNULIB_SINF)/g' \
- -e 's/@''GNULIB_SINL''@/$(GNULIB_SINL)/g' \
- -e 's/@''GNULIB_SINHF''@/$(GNULIB_SINHF)/g' \
- -e 's/@''GNULIB_SQRTF''@/$(GNULIB_SQRTF)/g' \
- -e 's/@''GNULIB_SQRTL''@/$(GNULIB_SQRTL)/g' \
- -e 's/@''GNULIB_TANF''@/$(GNULIB_TANF)/g' \
- -e 's/@''GNULIB_TANL''@/$(GNULIB_TANL)/g' \
- -e 's/@''GNULIB_TANHF''@/$(GNULIB_TANHF)/g' \
- -e 's/@''GNULIB_TRUNC''@/$(GNULIB_TRUNC)/g' \
- -e 's/@''GNULIB_TRUNCF''@/$(GNULIB_TRUNCF)/g' \
- -e 's/@''GNULIB_TRUNCL''@/$(GNULIB_TRUNCL)/g' \
- -e 's/@''GNULIB_MDA_J0''@/$(GNULIB_MDA_J0)/g' \
- -e 's/@''GNULIB_MDA_J1''@/$(GNULIB_MDA_J1)/g' \
- -e 's/@''GNULIB_MDA_JN''@/$(GNULIB_MDA_JN)/g' \
- -e 's/@''GNULIB_MDA_Y0''@/$(GNULIB_MDA_Y0)/g' \
- -e 's/@''GNULIB_MDA_Y1''@/$(GNULIB_MDA_Y1)/g' \
- -e 's/@''GNULIB_MDA_YN''@/$(GNULIB_MDA_YN)/g' \
+ sed -e 's/@''GNULIB_ILOGB''@/$(GL_GNULIB_ILOGB)/g' \
+ -e 's/@''GNULIB_ILOGBF''@/$(GL_GNULIB_ILOGBF)/g' \
+ -e 's/@''GNULIB_ILOGBL''@/$(GL_GNULIB_ILOGBL)/g' \
+ -e 's/@''GNULIB_ISFINITE''@/$(GL_GNULIB_ISFINITE)/g' \
+ -e 's/@''GNULIB_ISINF''@/$(GL_GNULIB_ISINF)/g' \
+ -e 's/@''GNULIB_ISNAN''@/$(GL_GNULIB_ISNAN)/g' \
+ -e 's/@''GNULIB_ISNANF''@/$(GL_GNULIB_ISNANF)/g' \
+ -e 's/@''GNULIB_ISNAND''@/$(GL_GNULIB_ISNAND)/g' \
+ -e 's/@''GNULIB_ISNANL''@/$(GL_GNULIB_ISNANL)/g' \
+ -e 's/@''GNULIB_LDEXPF''@/$(GL_GNULIB_LDEXPF)/g' \
+ -e 's/@''GNULIB_LDEXPL''@/$(GL_GNULIB_LDEXPL)/g' \
+ -e 's/@''GNULIB_LOG''@/$(GL_GNULIB_LOG)/g' \
+ -e 's/@''GNULIB_LOGF''@/$(GL_GNULIB_LOGF)/g' \
+ -e 's/@''GNULIB_LOGL''@/$(GL_GNULIB_LOGL)/g' \
+ -e 's/@''GNULIB_LOG10''@/$(GL_GNULIB_LOG10)/g' \
+ -e 's/@''GNULIB_LOG10F''@/$(GL_GNULIB_LOG10F)/g' \
+ -e 's/@''GNULIB_LOG10L''@/$(GL_GNULIB_LOG10L)/g' \
+ -e 's/@''GNULIB_LOG1P''@/$(GL_GNULIB_LOG1P)/g' \
+ -e 's/@''GNULIB_LOG1PF''@/$(GL_GNULIB_LOG1PF)/g' \
+ -e 's/@''GNULIB_LOG1PL''@/$(GL_GNULIB_LOG1PL)/g' \
+ -e 's/@''GNULIB_LOG2''@/$(GL_GNULIB_LOG2)/g' \
+ -e 's/@''GNULIB_LOG2F''@/$(GL_GNULIB_LOG2F)/g' \
+ -e 's/@''GNULIB_LOG2L''@/$(GL_GNULIB_LOG2L)/g' \
+ -e 's/@''GNULIB_LOGB''@/$(GL_GNULIB_LOGB)/g' \
+ -e 's/@''GNULIB_LOGBF''@/$(GL_GNULIB_LOGBF)/g' \
+ -e 's/@''GNULIB_LOGBL''@/$(GL_GNULIB_LOGBL)/g' \
+ -e 's/@''GNULIB_MODF''@/$(GL_GNULIB_MODF)/g' \
+ -e 's/@''GNULIB_MODFF''@/$(GL_GNULIB_MODFF)/g' \
+ -e 's/@''GNULIB_MODFL''@/$(GL_GNULIB_MODFL)/g' \
+ -e 's/@''GNULIB_POWF''@/$(GL_GNULIB_POWF)/g' \
+ -e 's/@''GNULIB_REMAINDER''@/$(GL_GNULIB_REMAINDER)/g' \
+ -e 's/@''GNULIB_REMAINDERF''@/$(GL_GNULIB_REMAINDERF)/g' \
+ -e 's/@''GNULIB_REMAINDERL''@/$(GL_GNULIB_REMAINDERL)/g' \
+ -e 's/@''GNULIB_RINT''@/$(GL_GNULIB_RINT)/g' \
+ -e 's/@''GNULIB_RINTF''@/$(GL_GNULIB_RINTF)/g' \
+ -e 's/@''GNULIB_RINTL''@/$(GL_GNULIB_RINTL)/g' \
+ -e 's/@''GNULIB_ROUND''@/$(GL_GNULIB_ROUND)/g' \
+ -e 's/@''GNULIB_ROUNDF''@/$(GL_GNULIB_ROUNDF)/g' \
+ -e 's/@''GNULIB_ROUNDL''@/$(GL_GNULIB_ROUNDL)/g' \
+ -e 's/@''GNULIB_SIGNBIT''@/$(GL_GNULIB_SIGNBIT)/g' \
+ -e 's/@''GNULIB_SINF''@/$(GL_GNULIB_SINF)/g' \
+ -e 's/@''GNULIB_SINL''@/$(GL_GNULIB_SINL)/g' \
+ -e 's/@''GNULIB_SINHF''@/$(GL_GNULIB_SINHF)/g' \
+ -e 's/@''GNULIB_SQRTF''@/$(GL_GNULIB_SQRTF)/g' \
+ -e 's/@''GNULIB_SQRTL''@/$(GL_GNULIB_SQRTL)/g' \
+ -e 's/@''GNULIB_TANF''@/$(GL_GNULIB_TANF)/g' \
+ -e 's/@''GNULIB_TANL''@/$(GL_GNULIB_TANL)/g' \
+ -e 's/@''GNULIB_TANHF''@/$(GL_GNULIB_TANHF)/g' \
+ -e 's/@''GNULIB_TRUNC''@/$(GL_GNULIB_TRUNC)/g' \
+ -e 's/@''GNULIB_TRUNCF''@/$(GL_GNULIB_TRUNCF)/g' \
+ -e 's/@''GNULIB_TRUNCL''@/$(GL_GNULIB_TRUNCL)/g' \
+ -e 's/@''GNULIB_MDA_J0''@/$(GL_GNULIB_MDA_J0)/g' \
+ -e 's/@''GNULIB_MDA_J1''@/$(GL_GNULIB_MDA_J1)/g' \
+ -e 's/@''GNULIB_MDA_JN''@/$(GL_GNULIB_MDA_JN)/g' \
+ -e 's/@''GNULIB_MDA_Y0''@/$(GL_GNULIB_MDA_Y0)/g' \
+ -e 's/@''GNULIB_MDA_Y1''@/$(GL_GNULIB_MDA_Y1)/g' \
+ -e 's/@''GNULIB_MDA_YN''@/$(GL_GNULIB_MDA_YN)/g' \
| \
sed -e 's|@''HAVE_ACOSF''@|$(HAVE_ACOSF)|g' \
-e 's|@''HAVE_ACOSL''@|$(HAVE_ACOSL)|g' \
@@ -1396,9 +1412,9 @@ math.h: math.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(
-e 's|@''REPLACE_TRUNCL''@|$(REPLACE_TRUNCL)|g' \
-e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
- -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
- } > $@-t && \
- mv $@-t $@
+ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+ > $@-t
+ $(AM_V_at)mv $@-t $@
MOSTLYCLEANFILES += math.h math.h-t
EXTRA_DIST += math.in.h
@@ -1407,46 +1423,53 @@ EXTRA_DIST += math.in.h
## begin gnulib module mbrtowc
+if GL_COND_OBJ_MBRTOWC
+libgnu_a_SOURCES += mbrtowc.c
+endif
-EXTRA_DIST += lc-charset-dispatch.c lc-charset-dispatch.h mbrtowc-impl-utf8.h mbrtowc-impl.h mbrtowc.c mbtowc-lock.c mbtowc-lock.h windows-initguard.h
+EXTRA_DIST += lc-charset-dispatch.c lc-charset-dispatch.h mbrtowc-impl-utf8.h mbrtowc-impl.h mbtowc-lock.c mbtowc-lock.h windows-initguard.h
-EXTRA_libgnu_a_SOURCES += lc-charset-dispatch.c mbrtowc.c mbtowc-lock.c
+EXTRA_libgnu_a_SOURCES += lc-charset-dispatch.c mbtowc-lock.c
## end gnulib module mbrtowc
## begin gnulib module mbsinit
-
-EXTRA_DIST += mbsinit.c
-
-EXTRA_libgnu_a_SOURCES += mbsinit.c
+if GL_COND_OBJ_MBSINIT
+libgnu_a_SOURCES += mbsinit.c
+endif
## end gnulib module mbsinit
## begin gnulib module mbsrtowcs
+if GL_COND_OBJ_MBSRTOWCS
+libgnu_a_SOURCES += mbsrtowcs.c
+endif
-EXTRA_DIST += mbsrtowcs-impl.h mbsrtowcs-state.c mbsrtowcs.c
+EXTRA_DIST += mbsrtowcs-impl.h mbsrtowcs-state.c
-EXTRA_libgnu_a_SOURCES += mbsrtowcs-state.c mbsrtowcs.c
+EXTRA_libgnu_a_SOURCES += mbsrtowcs-state.c
## end gnulib module mbsrtowcs
## begin gnulib module mbtowc
+if GL_COND_OBJ_MBTOWC
+libgnu_a_SOURCES += mbtowc.c
+endif
-EXTRA_DIST += mbtowc-impl.h mbtowc.c
-
-EXTRA_libgnu_a_SOURCES += mbtowc.c
+EXTRA_DIST += mbtowc-impl.h
## end gnulib module mbtowc
## begin gnulib module memchr
+if GL_COND_OBJ_MEMCHR
+libgnu_a_SOURCES += memchr.c
+endif
-EXTRA_DIST += memchr.c memchr.valgrind
-
-EXTRA_libgnu_a_SOURCES += memchr.c
+EXTRA_DIST += memchr.valgrind
## end gnulib module memchr
@@ -1470,19 +1493,17 @@ EXTRA_libgnu_a_SOURCES += memmem.c
## begin gnulib module mempcpy
-
-EXTRA_DIST += mempcpy.c
-
-EXTRA_libgnu_a_SOURCES += mempcpy.c
+if GL_COND_OBJ_MEMPCPY
+libgnu_a_SOURCES += mempcpy.c
+endif
## end gnulib module mempcpy
## begin gnulib module memrchr
-
-EXTRA_DIST += memrchr.c
-
-EXTRA_libgnu_a_SOURCES += memrchr.c
+if GL_COND_OBJ_MEMRCHR
+libgnu_a_SOURCES += memrchr.c
+endif
## end gnulib module memrchr
@@ -1494,46 +1515,45 @@ libgnu_a_SOURCES += minmax.h
## begin gnulib module mkdir
-
-EXTRA_DIST += mkdir.c
-
-EXTRA_libgnu_a_SOURCES += mkdir.c
+if GL_COND_OBJ_MKDIR
+libgnu_a_SOURCES += mkdir.c
+endif
## end gnulib module mkdir
## begin gnulib module mkdtemp
-
-EXTRA_DIST += mkdtemp.c
-
-EXTRA_libgnu_a_SOURCES += mkdtemp.c
+if GL_COND_OBJ_MKDTEMP
+libgnu_a_SOURCES += mkdtemp.c
+endif
## end gnulib module mkdtemp
## begin gnulib module mkostemp
-
-EXTRA_DIST += mkostemp.c
-
-EXTRA_libgnu_a_SOURCES += mkostemp.c
+if GL_COND_OBJ_MKOSTEMP
+libgnu_a_SOURCES += mkostemp.c
+endif
## end gnulib module mkostemp
## begin gnulib module msvc-inval
+if GL_COND_OBJ_MSVC_INVAL
+libgnu_a_SOURCES += msvc-inval.c
+endif
-EXTRA_DIST += msvc-inval.c msvc-inval.h
-
-EXTRA_libgnu_a_SOURCES += msvc-inval.c
+EXTRA_DIST += msvc-inval.h
## end gnulib module msvc-inval
## begin gnulib module msvc-nothrow
+if GL_COND_OBJ_MSVC_NOTHROW
+libgnu_a_SOURCES += msvc-nothrow.c
+endif
-EXTRA_DIST += msvc-nothrow.c msvc-nothrow.h
-
-EXTRA_libgnu_a_SOURCES += msvc-nothrow.c
+EXTRA_DIST += msvc-nothrow.h
## end gnulib module msvc-nothrow
@@ -1544,15 +1564,14 @@ BUILT_SOURCES += netdb.h
# We need the following in order to create <netdb.h> when the system
# doesn't have one that works with the given compiler.
netdb.h: netdb.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
- $(AM_V_GEN)rm -f $@-t $@ && \
- { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
- sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_NETDB_H''@|$(NEXT_NETDB_H)|g' \
-e 's|@''HAVE_NETDB_H''@|$(HAVE_NETDB_H)|g' \
- -e 's/@''GNULIB_GETADDRINFO''@/$(GNULIB_GETADDRINFO)/g' \
+ -e 's/@''GNULIB_GETADDRINFO''@/$(GL_GNULIB_GETADDRINFO)/g' \
-e 's|@''HAVE_STRUCT_ADDRINFO''@|$(HAVE_STRUCT_ADDRINFO)|g' \
-e 's|@''HAVE_DECL_FREEADDRINFO''@|$(HAVE_DECL_FREEADDRINFO)|g' \
-e 's|@''HAVE_DECL_GAI_STRERROR''@|$(HAVE_DECL_GAI_STRERROR)|g' \
@@ -1563,9 +1582,8 @@ netdb.h: netdb.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H)
-e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
-e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
- < $(srcdir)/netdb.in.h; \
- } > $@-t && \
- mv $@-t $@
+ $(srcdir)/netdb.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
MOSTLYCLEANFILES += netdb.h netdb.h-t
EXTRA_DIST += netdb.in.h
@@ -1580,18 +1598,16 @@ BUILT_SOURCES += $(NETINET_IN_H)
# doesn't have one.
if GL_GENERATE_NETINET_IN_H
netinet/in.h: netinet_in.in.h $(top_builddir)/config.status
- $(AM_V_at)$(MKDIR_P) netinet
- $(AM_V_GEN)rm -f $@-t $@ && \
- { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
- sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+ $(AM_V_GEN)$(MKDIR_P) '%reldir%/netinet'
+ $(AM_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_NETINET_IN_H''@|$(NEXT_NETINET_IN_H)|g' \
-e 's|@''HAVE_NETINET_IN_H''@|$(HAVE_NETINET_IN_H)|g' \
- < $(srcdir)/netinet_in.in.h; \
- } > $@-t && \
- mv $@-t $@
+ $(srcdir)/netinet_in.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
else
netinet/in.h: $(top_builddir)/config.status
rm -f $@
@@ -1605,19 +1621,17 @@ EXTRA_DIST += netinet_in.in.h
## begin gnulib module open
-
-EXTRA_DIST += open.c
-
-EXTRA_libgnu_a_SOURCES += open.c
+if GL_COND_OBJ_OPEN
+libgnu_a_SOURCES += open.c
+endif
## end gnulib module open
## begin gnulib module openat
-
-EXTRA_DIST += openat.c
-
-EXTRA_libgnu_a_SOURCES += openat.c
+if GL_COND_OBJ_OPENAT
+libgnu_a_SOURCES += openat.c
+endif
## end gnulib module openat
@@ -1636,10 +1650,11 @@ EXTRA_DIST += openat.h
## begin gnulib module opendir
+if GL_COND_OBJ_OPENDIR
+libgnu_a_SOURCES += opendir.c
+endif
-EXTRA_DIST += dirent-private.h opendir.c
-
-EXTRA_libgnu_a_SOURCES += opendir.c
+EXTRA_DIST += dirent-private.h
## end gnulib module opendir
@@ -1652,37 +1667,37 @@ EXTRA_DIST += pathmax.h
## begin gnulib module pipe-posix
-
-EXTRA_DIST += pipe.c
-
-EXTRA_libgnu_a_SOURCES += pipe.c
+if GL_COND_OBJ_PIPE
+libgnu_a_SOURCES += pipe.c
+endif
## end gnulib module pipe-posix
## begin gnulib module rawmemchr
+if GL_COND_OBJ_RAWMEMCHR
+libgnu_a_SOURCES += rawmemchr.c
+endif
-EXTRA_DIST += rawmemchr.c rawmemchr.valgrind
-
-EXTRA_libgnu_a_SOURCES += rawmemchr.c
+EXTRA_DIST += rawmemchr.valgrind
## end gnulib module rawmemchr
## begin gnulib module readdir
+if GL_COND_OBJ_READDIR
+libgnu_a_SOURCES += readdir.c
+endif
-EXTRA_DIST += dirent-private.h readdir.c
-
-EXTRA_libgnu_a_SOURCES += readdir.c
+EXTRA_DIST += dirent-private.h
## end gnulib module readdir
## begin gnulib module readlink
-
-EXTRA_DIST += readlink.c
-
-EXTRA_libgnu_a_SOURCES += readlink.c
+if GL_COND_OBJ_READLINK
+libgnu_a_SOURCES += readlink.c
+endif
## end gnulib module readlink
@@ -1697,28 +1712,27 @@ EXTRA_libgnu_a_SOURCES += realloc.c
## begin gnulib module rename
-
-EXTRA_DIST += rename.c
-
-EXTRA_libgnu_a_SOURCES += rename.c
+if GL_COND_OBJ_RENAME
+libgnu_a_SOURCES += rename.c
+endif
## end gnulib module rename
## begin gnulib module rewinddir
+if GL_COND_OBJ_REWINDDIR
+libgnu_a_SOURCES += rewinddir.c
+endif
-EXTRA_DIST += dirent-private.h rewinddir.c
-
-EXTRA_libgnu_a_SOURCES += rewinddir.c
+EXTRA_DIST += dirent-private.h
## end gnulib module rewinddir
## begin gnulib module rmdir
-
-EXTRA_DIST += rmdir.c
-
-EXTRA_libgnu_a_SOURCES += rmdir.c
+if GL_COND_OBJ_RMDIR
+libgnu_a_SOURCES += rmdir.c
+endif
## end gnulib module rmdir
@@ -1739,6 +1753,19 @@ EXTRA_DIST += save-cwd.h
## begin gnulib module scratch_buffer
+BUILT_SOURCES += malloc/scratch_buffer.gl.h
+
+malloc/scratch_buffer.gl.h: malloc/scratch_buffer.h
+ $(AM_V_GEN)$(MKDIR_P) '%reldir%/malloc'
+ $(AM_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|__always_inline|inline _GL_ATTRIBUTE_ALWAYS_INLINE|g' \
+ -e 's|__glibc_likely|_GL_LIKELY|g' \
+ -e 's|__glibc_unlikely|_GL_UNLIKELY|g' \
+ -e '/libc_hidden_proto/d' \
+ $(srcdir)/malloc/scratch_buffer.h > $@-t
+ $(AM_V_at)mv $@-t $@
+MOSTLYCLEANFILES += malloc/scratch_buffer.gl.h malloc/scratch_buffer.gl.h-t
+
libgnu_a_SOURCES += malloc/scratch_buffer_dupfree.c malloc/scratch_buffer_grow.c malloc/scratch_buffer_grow_preserve.c malloc/scratch_buffer_set_array_size.c
EXTRA_DIST += malloc/scratch_buffer.h scratch_buffer.h
@@ -1747,38 +1774,38 @@ EXTRA_DIST += malloc/scratch_buffer.h scratch_buffer.h
## begin gnulib module select
-
-EXTRA_DIST += select.c
-
-EXTRA_libgnu_a_SOURCES += select.c
+if GL_COND_OBJ_SELECT
+libgnu_a_SOURCES += select.c
+endif
## end gnulib module select
## begin gnulib module setenv
-
-EXTRA_DIST += setenv.c
-
-EXTRA_libgnu_a_SOURCES += setenv.c
+if GL_COND_OBJ_SETENV
+libgnu_a_SOURCES += setenv.c
+endif
## end gnulib module setenv
## begin gnulib module setlocale-null
libgnu_a_SOURCES += setlocale_null.c
+if GL_COND_OBJ_SETLOCALE_LOCK
+libgnu_a_SOURCES += setlocale-lock.c
+endif
-EXTRA_DIST += setlocale-lock.c setlocale_null.h windows-initguard.h
-
-EXTRA_libgnu_a_SOURCES += setlocale-lock.c
+EXTRA_DIST += setlocale_null.h windows-initguard.h
## end gnulib module setlocale-null
## begin gnulib module setsockopt
+if GL_COND_OBJ_SETSOCKOPT
+libgnu_a_SOURCES += setsockopt.c
+endif
-EXTRA_DIST += setsockopt.c w32sock.h
-
-EXTRA_libgnu_a_SOURCES += setsockopt.c
+EXTRA_DIST += w32sock.h
## end gnulib module setsockopt
@@ -1789,18 +1816,17 @@ BUILT_SOURCES += signal.h
# We need the following in order to create <signal.h> when the system
# doesn't have a complete one.
signal.h: signal.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
- $(AM_V_GEN)rm -f $@-t $@ && \
- { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
- sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_SIGNAL_H''@|$(NEXT_SIGNAL_H)|g' \
- -e 's/@''GNULIB_PTHREAD_SIGMASK''@/$(GNULIB_PTHREAD_SIGMASK)/g' \
- -e 's/@''GNULIB_RAISE''@/$(GNULIB_RAISE)/g' \
- -e 's/@''GNULIB_SIGNAL_H_SIGPIPE''@/$(GNULIB_SIGNAL_H_SIGPIPE)/g' \
- -e 's/@''GNULIB_SIGPROCMASK''@/$(GNULIB_SIGPROCMASK)/g' \
- -e 's/@''GNULIB_SIGACTION''@/$(GNULIB_SIGACTION)/g' \
+ -e 's/@''GNULIB_PTHREAD_SIGMASK''@/$(GL_GNULIB_PTHREAD_SIGMASK)/g' \
+ -e 's/@''GNULIB_RAISE''@/$(GL_GNULIB_RAISE)/g' \
+ -e 's/@''GNULIB_SIGNAL_H_SIGPIPE''@/$(GL_GNULIB_SIGNAL_H_SIGPIPE)/g' \
+ -e 's/@''GNULIB_SIGPROCMASK''@/$(GL_GNULIB_SIGPROCMASK)/g' \
+ -e 's/@''GNULIB_SIGACTION''@/$(GL_GNULIB_SIGACTION)/g' \
-e 's|@''HAVE_POSIX_SIGNALBLOCKING''@|$(HAVE_POSIX_SIGNALBLOCKING)|g' \
-e 's|@''HAVE_PTHREAD_SIGMASK''@|$(HAVE_PTHREAD_SIGMASK)|g' \
-e 's|@''HAVE_RAISE''@|$(HAVE_RAISE)|g' \
@@ -1815,9 +1841,8 @@ signal.h: signal.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H
-e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
-e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
- < $(srcdir)/signal.in.h; \
- } > $@-t && \
- mv $@-t $@
+ $(srcdir)/signal.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
MOSTLYCLEANFILES += signal.h signal.h-t
EXTRA_DIST += signal.in.h
@@ -1874,10 +1899,11 @@ EXTRA_DIST += warn-on-use.h
## begin gnulib module socket
+if GL_COND_OBJ_SOCKET
+libgnu_a_SOURCES += socket.c
+endif
-EXTRA_DIST += socket.c w32sock.h
-
-EXTRA_libgnu_a_SOURCES += socket.c
+EXTRA_DIST += w32sock.h
## end gnulib module socket
@@ -1891,10 +1917,13 @@ EXTRA_DIST += w32sock.h
## begin gnulib module stat
+if GL_COND_OBJ_STAT
+libgnu_a_SOURCES += stat.c
+endif
-EXTRA_DIST += stat-w32.c stat-w32.h stat.c
+EXTRA_DIST += stat-w32.c stat-w32.h
-EXTRA_libgnu_a_SOURCES += stat-w32.c stat.c
+EXTRA_libgnu_a_SOURCES += stat-w32.c
## end gnulib module stat
@@ -1914,11 +1943,8 @@ BUILT_SOURCES += $(STDALIGN_H)
# doesn't have one that works.
if GL_GENERATE_STDALIGN_H
stdalign.h: stdalign.in.h $(top_builddir)/config.status
- $(AM_V_GEN)rm -f $@-t $@ && \
- { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
- cat $(srcdir)/stdalign.in.h; \
- } > $@-t && \
- mv $@-t $@
+ $(gl_V_at)$(SED_HEADER_TO_AT_t) $(srcdir)/stdalign.in.h
+ $(AM_V_at)mv $@-t $@
else
stdalign.h: $(top_builddir)/config.status
rm -f $@
@@ -1937,11 +1963,10 @@ BUILT_SOURCES += $(STDBOOL_H)
# doesn't have one that works.
if GL_GENERATE_STDBOOL_H
stdbool.h: stdbool.in.h $(top_builddir)/config.status
- $(AM_V_GEN)rm -f $@-t $@ && \
- { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
- sed -e 's/@''HAVE__BOOL''@/$(HAVE__BOOL)/g' < $(srcdir)/stdbool.in.h; \
- } > $@-t && \
- mv $@-t $@
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's/@''HAVE__BOOL''@/$(HAVE__BOOL)/g' \
+ $(srcdir)/stdbool.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
else
stdbool.h: $(top_builddir)/config.status
rm -f $@
@@ -1960,9 +1985,8 @@ BUILT_SOURCES += $(STDDEF_H)
# doesn't have one that works with the given compiler.
if GL_GENERATE_STDDEF_H
stddef.h: stddef.in.h $(top_builddir)/config.status
- $(AM_V_GEN)rm -f $@-t $@ && \
- { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
- sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
@@ -1970,9 +1994,8 @@ stddef.h: stddef.in.h $(top_builddir)/config.status
-e 's|@''HAVE_MAX_ALIGN_T''@|$(HAVE_MAX_ALIGN_T)|g' \
-e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \
-e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \
- < $(srcdir)/stddef.in.h; \
- } > $@-t && \
- mv $@-t $@
+ $(srcdir)/stddef.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
else
stddef.h: $(top_builddir)/config.status
rm -f $@
@@ -1991,9 +2014,8 @@ BUILT_SOURCES += $(STDINT_H)
# doesn't have one that works with the given compiler.
if GL_GENERATE_STDINT_H
stdint.h: stdint.in.h $(top_builddir)/config.status
- $(AM_V_GEN)rm -f $@-t $@ && \
- { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
- sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
@@ -2019,10 +2041,9 @@ stdint.h: stdint.in.h $(top_builddir)/config.status
-e 's/@''BITSIZEOF_WINT_T''@/$(BITSIZEOF_WINT_T)/g' \
-e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \
-e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \
- -e 's/@''GNULIB_OVERRIDES_WINT_T''@/$(GNULIB_OVERRIDES_WINT_T)/g' \
- < $(srcdir)/stdint.in.h; \
- } > $@-t && \
- mv $@-t $@
+ -e 's/@''GNULIBHEADERS_OVERRIDE_WINT_T''@/$(GNULIBHEADERS_OVERRIDE_WINT_T)/g' \
+ $(srcdir)/stdint.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
else
stdint.h: $(top_builddir)/config.status
rm -f $@
@@ -2040,72 +2061,72 @@ BUILT_SOURCES += stdio.h
# We need the following in order to create <stdio.h> when the system
# doesn't have one that works with the given compiler.
stdio.h: stdio.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
- $(AM_V_GEN)rm -f $@-t $@ && \
- { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
- sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_STDIO_H''@|$(NEXT_STDIO_H)|g' \
- -e 's/@''GNULIB_DPRINTF''@/$(GNULIB_DPRINTF)/g' \
- -e 's/@''GNULIB_FCLOSE''@/$(GNULIB_FCLOSE)/g' \
- -e 's/@''GNULIB_FDOPEN''@/$(GNULIB_FDOPEN)/g' \
- -e 's/@''GNULIB_FFLUSH''@/$(GNULIB_FFLUSH)/g' \
- -e 's/@''GNULIB_FGETC''@/$(GNULIB_FGETC)/g' \
- -e 's/@''GNULIB_FGETS''@/$(GNULIB_FGETS)/g' \
- -e 's/@''GNULIB_FOPEN''@/$(GNULIB_FOPEN)/g' \
- -e 's/@''GNULIB_FPRINTF''@/$(GNULIB_FPRINTF)/g' \
- -e 's/@''GNULIB_FPRINTF_POSIX''@/$(GNULIB_FPRINTF_POSIX)/g' \
- -e 's/@''GNULIB_FPURGE''@/$(GNULIB_FPURGE)/g' \
- -e 's/@''GNULIB_FPUTC''@/$(GNULIB_FPUTC)/g' \
- -e 's/@''GNULIB_FPUTS''@/$(GNULIB_FPUTS)/g' \
- -e 's/@''GNULIB_FREAD''@/$(GNULIB_FREAD)/g' \
- -e 's/@''GNULIB_FREOPEN''@/$(GNULIB_FREOPEN)/g' \
- -e 's/@''GNULIB_FSCANF''@/$(GNULIB_FSCANF)/g' \
- -e 's/@''GNULIB_FSEEK''@/$(GNULIB_FSEEK)/g' \
- -e 's/@''GNULIB_FSEEKO''@/$(GNULIB_FSEEKO)/g' \
- -e 's/@''GNULIB_FTELL''@/$(GNULIB_FTELL)/g' \
- -e 's/@''GNULIB_FTELLO''@/$(GNULIB_FTELLO)/g' \
- -e 's/@''GNULIB_FWRITE''@/$(GNULIB_FWRITE)/g' \
- -e 's/@''GNULIB_GETC''@/$(GNULIB_GETC)/g' \
- -e 's/@''GNULIB_GETCHAR''@/$(GNULIB_GETCHAR)/g' \
- -e 's/@''GNULIB_GETDELIM''@/$(GNULIB_GETDELIM)/g' \
- -e 's/@''GNULIB_GETLINE''@/$(GNULIB_GETLINE)/g' \
- -e 's/@''GNULIB_OBSTACK_PRINTF''@/$(GNULIB_OBSTACK_PRINTF)/g' \
- -e 's/@''GNULIB_OBSTACK_PRINTF_POSIX''@/$(GNULIB_OBSTACK_PRINTF_POSIX)/g' \
- -e 's/@''GNULIB_PCLOSE''@/$(GNULIB_PCLOSE)/g' \
- -e 's/@''GNULIB_PERROR''@/$(GNULIB_PERROR)/g' \
- -e 's/@''GNULIB_POPEN''@/$(GNULIB_POPEN)/g' \
- -e 's/@''GNULIB_PRINTF''@/$(GNULIB_PRINTF)/g' \
- -e 's/@''GNULIB_PRINTF_POSIX''@/$(GNULIB_PRINTF_POSIX)/g' \
- -e 's/@''GNULIB_PUTC''@/$(GNULIB_PUTC)/g' \
- -e 's/@''GNULIB_PUTCHAR''@/$(GNULIB_PUTCHAR)/g' \
- -e 's/@''GNULIB_PUTS''@/$(GNULIB_PUTS)/g' \
- -e 's/@''GNULIB_REMOVE''@/$(GNULIB_REMOVE)/g' \
- -e 's/@''GNULIB_RENAME''@/$(GNULIB_RENAME)/g' \
- -e 's/@''GNULIB_RENAMEAT''@/$(GNULIB_RENAMEAT)/g' \
- -e 's/@''GNULIB_SCANF''@/$(GNULIB_SCANF)/g' \
- -e 's/@''GNULIB_SNPRINTF''@/$(GNULIB_SNPRINTF)/g' \
- -e 's/@''GNULIB_SPRINTF_POSIX''@/$(GNULIB_SPRINTF_POSIX)/g' \
- -e 's/@''GNULIB_STDIO_H_NONBLOCKING''@/$(GNULIB_STDIO_H_NONBLOCKING)/g' \
- -e 's/@''GNULIB_STDIO_H_SIGPIPE''@/$(GNULIB_STDIO_H_SIGPIPE)/g' \
- -e 's/@''GNULIB_TMPFILE''@/$(GNULIB_TMPFILE)/g' \
- -e 's/@''GNULIB_VASPRINTF''@/$(GNULIB_VASPRINTF)/g' \
- -e 's/@''GNULIB_VDPRINTF''@/$(GNULIB_VDPRINTF)/g' \
- -e 's/@''GNULIB_VFPRINTF''@/$(GNULIB_VFPRINTF)/g' \
- -e 's/@''GNULIB_VFPRINTF_POSIX''@/$(GNULIB_VFPRINTF_POSIX)/g' \
- -e 's/@''GNULIB_VFSCANF''@/$(GNULIB_VFSCANF)/g' \
- -e 's/@''GNULIB_VSCANF''@/$(GNULIB_VSCANF)/g' \
- -e 's/@''GNULIB_VPRINTF''@/$(GNULIB_VPRINTF)/g' \
- -e 's/@''GNULIB_VPRINTF_POSIX''@/$(GNULIB_VPRINTF_POSIX)/g' \
- -e 's/@''GNULIB_VSNPRINTF''@/$(GNULIB_VSNPRINTF)/g' \
- -e 's/@''GNULIB_VSPRINTF_POSIX''@/$(GNULIB_VSPRINTF_POSIX)/g' \
- -e 's/@''GNULIB_MDA_FCLOSEALL''@/$(GNULIB_MDA_FCLOSEALL)/g' \
- -e 's/@''GNULIB_MDA_FDOPEN''@/$(GNULIB_MDA_FDOPEN)/g' \
- -e 's/@''GNULIB_MDA_FILENO''@/$(GNULIB_MDA_FILENO)/g' \
- -e 's/@''GNULIB_MDA_GETW''@/$(GNULIB_MDA_GETW)/g' \
- -e 's/@''GNULIB_MDA_PUTW''@/$(GNULIB_MDA_PUTW)/g' \
- -e 's/@''GNULIB_MDA_TEMPNAM''@/$(GNULIB_MDA_TEMPNAM)/g' \
+ -e 's/@''GNULIB_DPRINTF''@/$(GL_GNULIB_DPRINTF)/g' \
+ -e 's/@''GNULIB_FCLOSE''@/$(GL_GNULIB_FCLOSE)/g' \
+ -e 's/@''GNULIB_FDOPEN''@/$(GL_GNULIB_FDOPEN)/g' \
+ -e 's/@''GNULIB_FFLUSH''@/$(GL_GNULIB_FFLUSH)/g' \
+ -e 's/@''GNULIB_FGETC''@/$(GL_GNULIB_FGETC)/g' \
+ -e 's/@''GNULIB_FGETS''@/$(GL_GNULIB_FGETS)/g' \
+ -e 's/@''GNULIB_FOPEN''@/$(GL_GNULIB_FOPEN)/g' \
+ -e 's/@''GNULIB_FOPEN_GNU''@/$(GL_GNULIB_FOPEN_GNU)/g' \
+ -e 's/@''GNULIB_FPRINTF''@/$(GL_GNULIB_FPRINTF)/g' \
+ -e 's/@''GNULIB_FPRINTF_POSIX''@/$(GL_GNULIB_FPRINTF_POSIX)/g' \
+ -e 's/@''GNULIB_FPURGE''@/$(GL_GNULIB_FPURGE)/g' \
+ -e 's/@''GNULIB_FPUTC''@/$(GL_GNULIB_FPUTC)/g' \
+ -e 's/@''GNULIB_FPUTS''@/$(GL_GNULIB_FPUTS)/g' \
+ -e 's/@''GNULIB_FREAD''@/$(GL_GNULIB_FREAD)/g' \
+ -e 's/@''GNULIB_FREOPEN''@/$(GL_GNULIB_FREOPEN)/g' \
+ -e 's/@''GNULIB_FSCANF''@/$(GL_GNULIB_FSCANF)/g' \
+ -e 's/@''GNULIB_FSEEK''@/$(GL_GNULIB_FSEEK)/g' \
+ -e 's/@''GNULIB_FSEEKO''@/$(GL_GNULIB_FSEEKO)/g' \
+ -e 's/@''GNULIB_FTELL''@/$(GL_GNULIB_FTELL)/g' \
+ -e 's/@''GNULIB_FTELLO''@/$(GL_GNULIB_FTELLO)/g' \
+ -e 's/@''GNULIB_FWRITE''@/$(GL_GNULIB_FWRITE)/g' \
+ -e 's/@''GNULIB_GETC''@/$(GL_GNULIB_GETC)/g' \
+ -e 's/@''GNULIB_GETCHAR''@/$(GL_GNULIB_GETCHAR)/g' \
+ -e 's/@''GNULIB_GETDELIM''@/$(GL_GNULIB_GETDELIM)/g' \
+ -e 's/@''GNULIB_GETLINE''@/$(GL_GNULIB_GETLINE)/g' \
+ -e 's/@''GNULIB_OBSTACK_PRINTF''@/$(GL_GNULIB_OBSTACK_PRINTF)/g' \
+ -e 's/@''GNULIB_OBSTACK_PRINTF_POSIX''@/$(GL_GNULIB_OBSTACK_PRINTF_POSIX)/g' \
+ -e 's/@''GNULIB_PCLOSE''@/$(GL_GNULIB_PCLOSE)/g' \
+ -e 's/@''GNULIB_PERROR''@/$(GL_GNULIB_PERROR)/g' \
+ -e 's/@''GNULIB_POPEN''@/$(GL_GNULIB_POPEN)/g' \
+ -e 's/@''GNULIB_PRINTF''@/$(GL_GNULIB_PRINTF)/g' \
+ -e 's/@''GNULIB_PRINTF_POSIX''@/$(GL_GNULIB_PRINTF_POSIX)/g' \
+ -e 's/@''GNULIB_PUTC''@/$(GL_GNULIB_PUTC)/g' \
+ -e 's/@''GNULIB_PUTCHAR''@/$(GL_GNULIB_PUTCHAR)/g' \
+ -e 's/@''GNULIB_PUTS''@/$(GL_GNULIB_PUTS)/g' \
+ -e 's/@''GNULIB_REMOVE''@/$(GL_GNULIB_REMOVE)/g' \
+ -e 's/@''GNULIB_RENAME''@/$(GL_GNULIB_RENAME)/g' \
+ -e 's/@''GNULIB_RENAMEAT''@/$(GL_GNULIB_RENAMEAT)/g' \
+ -e 's/@''GNULIB_SCANF''@/$(GL_GNULIB_SCANF)/g' \
+ -e 's/@''GNULIB_SNPRINTF''@/$(GL_GNULIB_SNPRINTF)/g' \
+ -e 's/@''GNULIB_SPRINTF_POSIX''@/$(GL_GNULIB_SPRINTF_POSIX)/g' \
+ -e 's/@''GNULIB_STDIO_H_NONBLOCKING''@/$(GL_GNULIB_STDIO_H_NONBLOCKING)/g' \
+ -e 's/@''GNULIB_STDIO_H_SIGPIPE''@/$(GL_GNULIB_STDIO_H_SIGPIPE)/g' \
+ -e 's/@''GNULIB_TMPFILE''@/$(GL_GNULIB_TMPFILE)/g' \
+ -e 's/@''GNULIB_VASPRINTF''@/$(GL_GNULIB_VASPRINTF)/g' \
+ -e 's/@''GNULIB_VDPRINTF''@/$(GL_GNULIB_VDPRINTF)/g' \
+ -e 's/@''GNULIB_VFPRINTF''@/$(GL_GNULIB_VFPRINTF)/g' \
+ -e 's/@''GNULIB_VFPRINTF_POSIX''@/$(GL_GNULIB_VFPRINTF_POSIX)/g' \
+ -e 's/@''GNULIB_VFSCANF''@/$(GL_GNULIB_VFSCANF)/g' \
+ -e 's/@''GNULIB_VSCANF''@/$(GL_GNULIB_VSCANF)/g' \
+ -e 's/@''GNULIB_VPRINTF''@/$(GL_GNULIB_VPRINTF)/g' \
+ -e 's/@''GNULIB_VPRINTF_POSIX''@/$(GL_GNULIB_VPRINTF_POSIX)/g' \
+ -e 's/@''GNULIB_VSNPRINTF''@/$(GL_GNULIB_VSNPRINTF)/g' \
+ -e 's/@''GNULIB_VSPRINTF_POSIX''@/$(GL_GNULIB_VSPRINTF_POSIX)/g' \
+ -e 's/@''GNULIB_MDA_FCLOSEALL''@/$(GL_GNULIB_MDA_FCLOSEALL)/g' \
+ -e 's/@''GNULIB_MDA_FDOPEN''@/$(GL_GNULIB_MDA_FDOPEN)/g' \
+ -e 's/@''GNULIB_MDA_FILENO''@/$(GL_GNULIB_MDA_FILENO)/g' \
+ -e 's/@''GNULIB_MDA_GETW''@/$(GL_GNULIB_MDA_GETW)/g' \
+ -e 's/@''GNULIB_MDA_PUTW''@/$(GL_GNULIB_MDA_PUTW)/g' \
+ -e 's/@''GNULIB_MDA_TEMPNAM''@/$(GL_GNULIB_MDA_TEMPNAM)/g' \
< $(srcdir)/stdio.in.h | \
sed -e 's|@''HAVE_DECL_FCLOSEALL''@|$(HAVE_DECL_FCLOSEALL)|g' \
-e 's|@''HAVE_DECL_FPURGE''@|$(HAVE_DECL_FPURGE)|g' \
@@ -2129,6 +2150,7 @@ stdio.h: stdio.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H)
-e 's|@''REPLACE_FDOPEN''@|$(REPLACE_FDOPEN)|g' \
-e 's|@''REPLACE_FFLUSH''@|$(REPLACE_FFLUSH)|g' \
-e 's|@''REPLACE_FOPEN''@|$(REPLACE_FOPEN)|g' \
+ -e 's|@''REPLACE_FOPEN_FOR_FOPEN_GNU''@|$(REPLACE_FOPEN_FOR_FOPEN_GNU)|g' \
-e 's|@''REPLACE_FPRINTF''@|$(REPLACE_FPRINTF)|g' \
-e 's|@''REPLACE_FPURGE''@|$(REPLACE_FPURGE)|g' \
-e 's|@''REPLACE_FREOPEN''@|$(REPLACE_FREOPEN)|g' \
@@ -2159,11 +2181,18 @@ stdio.h: stdio.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H)
-e 's|@''ASM_SYMBOL_PREFIX''@|$(ASM_SYMBOL_PREFIX)|g' \
-e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
- -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
- } > $@-t && \
- mv $@-t $@
+ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+ > $@-t
+ $(AM_V_at)mv $@-t $@
MOSTLYCLEANFILES += stdio.h stdio.h-t
+if GL_COND_OBJ_STDIO_READ
+libgnu_a_SOURCES += stdio-read.c
+endif
+if GL_COND_OBJ_STDIO_WRITE
+libgnu_a_SOURCES += stdio-write.c
+endif
+
EXTRA_DIST += stdio.in.h
## end gnulib module stdio
@@ -2176,56 +2205,60 @@ BUILT_SOURCES += stdlib.h
# doesn't have one that works with the given compiler.
stdlib.h: stdlib.in.h $(top_builddir)/config.status $(CXXDEFS_H) \
$(_NORETURN_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
- $(AM_V_GEN)rm -f $@-t $@ && \
- { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
- sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_STDLIB_H''@|$(NEXT_STDLIB_H)|g' \
- -e 's/@''GNULIB__EXIT''@/$(GNULIB__EXIT)/g' \
- -e 's/@''GNULIB_ALIGNED_ALLOC''@/$(GNULIB_ALIGNED_ALLOC)/g' \
- -e 's/@''GNULIB_ATOLL''@/$(GNULIB_ATOLL)/g' \
- -e 's/@''GNULIB_CALLOC_POSIX''@/$(GNULIB_CALLOC_POSIX)/g' \
- -e 's/@''GNULIB_CANONICALIZE_FILE_NAME''@/$(GNULIB_CANONICALIZE_FILE_NAME)/g' \
- -e 's/@''GNULIB_FREE_POSIX''@/$(GNULIB_FREE_POSIX)/g' \
- -e 's/@''GNULIB_GETLOADAVG''@/$(GNULIB_GETLOADAVG)/g' \
- -e 's/@''GNULIB_GETSUBOPT''@/$(GNULIB_GETSUBOPT)/g' \
- -e 's/@''GNULIB_GRANTPT''@/$(GNULIB_GRANTPT)/g' \
- -e 's/@''GNULIB_MALLOC_POSIX''@/$(GNULIB_MALLOC_POSIX)/g' \
- -e 's/@''GNULIB_MBTOWC''@/$(GNULIB_MBTOWC)/g' \
- -e 's/@''GNULIB_MKDTEMP''@/$(GNULIB_MKDTEMP)/g' \
- -e 's/@''GNULIB_MKOSTEMP''@/$(GNULIB_MKOSTEMP)/g' \
- -e 's/@''GNULIB_MKOSTEMPS''@/$(GNULIB_MKOSTEMPS)/g' \
- -e 's/@''GNULIB_MKSTEMP''@/$(GNULIB_MKSTEMP)/g' \
- -e 's/@''GNULIB_MKSTEMPS''@/$(GNULIB_MKSTEMPS)/g' \
- -e 's/@''GNULIB_POSIX_MEMALIGN''@/$(GNULIB_POSIX_MEMALIGN)/g' \
- -e 's/@''GNULIB_POSIX_OPENPT''@/$(GNULIB_POSIX_OPENPT)/g' \
- -e 's/@''GNULIB_PTSNAME''@/$(GNULIB_PTSNAME)/g' \
- -e 's/@''GNULIB_PTSNAME_R''@/$(GNULIB_PTSNAME_R)/g' \
- -e 's/@''GNULIB_PUTENV''@/$(GNULIB_PUTENV)/g' \
- -e 's/@''GNULIB_QSORT_R''@/$(GNULIB_QSORT_R)/g' \
- -e 's/@''GNULIB_RANDOM''@/$(GNULIB_RANDOM)/g' \
- -e 's/@''GNULIB_RANDOM_R''@/$(GNULIB_RANDOM_R)/g' \
- -e 's/@''GNULIB_REALLOC_POSIX''@/$(GNULIB_REALLOC_POSIX)/g' \
- -e 's/@''GNULIB_REALLOCARRAY''@/$(GNULIB_REALLOCARRAY)/g' \
- -e 's/@''GNULIB_REALPATH''@/$(GNULIB_REALPATH)/g' \
- -e 's/@''GNULIB_RPMATCH''@/$(GNULIB_RPMATCH)/g' \
- -e 's/@''GNULIB_SECURE_GETENV''@/$(GNULIB_SECURE_GETENV)/g' \
- -e 's/@''GNULIB_SETENV''@/$(GNULIB_SETENV)/g' \
- -e 's/@''GNULIB_STRTOD''@/$(GNULIB_STRTOD)/g' \
- -e 's/@''GNULIB_STRTOLD''@/$(GNULIB_STRTOLD)/g' \
- -e 's/@''GNULIB_STRTOLL''@/$(GNULIB_STRTOLL)/g' \
- -e 's/@''GNULIB_STRTOULL''@/$(GNULIB_STRTOULL)/g' \
- -e 's/@''GNULIB_SYSTEM_POSIX''@/$(GNULIB_SYSTEM_POSIX)/g' \
- -e 's/@''GNULIB_UNLOCKPT''@/$(GNULIB_UNLOCKPT)/g' \
- -e 's/@''GNULIB_UNSETENV''@/$(GNULIB_UNSETENV)/g' \
- -e 's/@''GNULIB_WCTOMB''@/$(GNULIB_WCTOMB)/g' \
- -e 's/@''GNULIB_MDA_ECVT''@/$(GNULIB_MDA_ECVT)/g' \
- -e 's/@''GNULIB_MDA_FCVT''@/$(GNULIB_MDA_FCVT)/g' \
- -e 's/@''GNULIB_MDA_GCVT''@/$(GNULIB_MDA_GCVT)/g' \
- -e 's/@''GNULIB_MDA_MKTEMP''@/$(GNULIB_MDA_MKTEMP)/g' \
- -e 's/@''GNULIB_MDA_PUTENV''@/$(GNULIB_MDA_PUTENV)/g' \
+ -e 's/@''GNULIB__EXIT''@/$(GL_GNULIB__EXIT)/g' \
+ -e 's/@''GNULIB_ALIGNED_ALLOC''@/$(GL_GNULIB_ALIGNED_ALLOC)/g' \
+ -e 's/@''GNULIB_ATOLL''@/$(GL_GNULIB_ATOLL)/g' \
+ -e 's/@''GNULIB_CALLOC_GNU''@/$(GL_GNULIB_CALLOC_GNU)/g' \
+ -e 's/@''GNULIB_CALLOC_POSIX''@/$(GL_GNULIB_CALLOC_POSIX)/g' \
+ -e 's/@''GNULIB_CANONICALIZE_FILE_NAME''@/$(GL_GNULIB_CANONICALIZE_FILE_NAME)/g' \
+ -e 's/@''GNULIB_FREE_POSIX''@/$(GL_GNULIB_FREE_POSIX)/g' \
+ -e 's/@''GNULIB_GETLOADAVG''@/$(GL_GNULIB_GETLOADAVG)/g' \
+ -e 's/@''GNULIB_GETSUBOPT''@/$(GL_GNULIB_GETSUBOPT)/g' \
+ -e 's/@''GNULIB_GRANTPT''@/$(GL_GNULIB_GRANTPT)/g' \
+ -e 's/@''GNULIB_MALLOC_GNU''@/$(GL_GNULIB_MALLOC_GNU)/g' \
+ -e 's/@''GNULIB_MALLOC_POSIX''@/$(GL_GNULIB_MALLOC_POSIX)/g' \
+ -e 's/@''GNULIB_MBTOWC''@/$(GL_GNULIB_MBTOWC)/g' \
+ -e 's/@''GNULIB_MKDTEMP''@/$(GL_GNULIB_MKDTEMP)/g' \
+ -e 's/@''GNULIB_MKOSTEMP''@/$(GL_GNULIB_MKOSTEMP)/g' \
+ -e 's/@''GNULIB_MKOSTEMPS''@/$(GL_GNULIB_MKOSTEMPS)/g' \
+ -e 's/@''GNULIB_MKSTEMP''@/$(GL_GNULIB_MKSTEMP)/g' \
+ -e 's/@''GNULIB_MKSTEMPS''@/$(GL_GNULIB_MKSTEMPS)/g' \
+ -e 's/@''GNULIB_POSIX_MEMALIGN''@/$(GL_GNULIB_POSIX_MEMALIGN)/g' \
+ -e 's/@''GNULIB_POSIX_OPENPT''@/$(GL_GNULIB_POSIX_OPENPT)/g' \
+ -e 's/@''GNULIB_PTSNAME''@/$(GL_GNULIB_PTSNAME)/g' \
+ -e 's/@''GNULIB_PTSNAME_R''@/$(GL_GNULIB_PTSNAME_R)/g' \
+ -e 's/@''GNULIB_PUTENV''@/$(GL_GNULIB_PUTENV)/g' \
+ -e 's/@''GNULIB_QSORT_R''@/$(GL_GNULIB_QSORT_R)/g' \
+ -e 's/@''GNULIB_RANDOM''@/$(GL_GNULIB_RANDOM)/g' \
+ -e 's/@''GNULIB_RANDOM_R''@/$(GL_GNULIB_RANDOM_R)/g' \
+ -e 's/@''GNULIB_REALLOC_GNU''@/$(GL_GNULIB_REALLOC_GNU)/g' \
+ -e 's/@''GNULIB_REALLOC_POSIX''@/$(GL_GNULIB_REALLOC_POSIX)/g' \
+ -e 's/@''GNULIB_REALLOCARRAY''@/$(GL_GNULIB_REALLOCARRAY)/g' \
+ -e 's/@''GNULIB_REALPATH''@/$(GL_GNULIB_REALPATH)/g' \
+ -e 's/@''GNULIB_RPMATCH''@/$(GL_GNULIB_RPMATCH)/g' \
+ -e 's/@''GNULIB_SECURE_GETENV''@/$(GL_GNULIB_SECURE_GETENV)/g' \
+ -e 's/@''GNULIB_SETENV''@/$(GL_GNULIB_SETENV)/g' \
+ -e 's/@''GNULIB_STRTOD''@/$(GL_GNULIB_STRTOD)/g' \
+ -e 's/@''GNULIB_STRTOL''@/$(GL_GNULIB_STRTOL)/g' \
+ -e 's/@''GNULIB_STRTOLD''@/$(GL_GNULIB_STRTOLD)/g' \
+ -e 's/@''GNULIB_STRTOLL''@/$(GL_GNULIB_STRTOLL)/g' \
+ -e 's/@''GNULIB_STRTOUL''@/$(GL_GNULIB_STRTOUL)/g' \
+ -e 's/@''GNULIB_STRTOULL''@/$(GL_GNULIB_STRTOULL)/g' \
+ -e 's/@''GNULIB_SYSTEM_POSIX''@/$(GL_GNULIB_SYSTEM_POSIX)/g' \
+ -e 's/@''GNULIB_UNLOCKPT''@/$(GL_GNULIB_UNLOCKPT)/g' \
+ -e 's/@''GNULIB_UNSETENV''@/$(GL_GNULIB_UNSETENV)/g' \
+ -e 's/@''GNULIB_WCTOMB''@/$(GL_GNULIB_WCTOMB)/g' \
+ -e 's/@''GNULIB_MDA_ECVT''@/$(GL_GNULIB_MDA_ECVT)/g' \
+ -e 's/@''GNULIB_MDA_FCVT''@/$(GL_GNULIB_MDA_FCVT)/g' \
+ -e 's/@''GNULIB_MDA_GCVT''@/$(GL_GNULIB_MDA_GCVT)/g' \
+ -e 's/@''GNULIB_MDA_MKTEMP''@/$(GL_GNULIB_MDA_MKTEMP)/g' \
+ -e 's/@''GNULIB_MDA_PUTENV''@/$(GL_GNULIB_MDA_PUTENV)/g' \
< $(srcdir)/stdlib.in.h | \
sed -e 's|@''HAVE__EXIT''@|$(HAVE__EXIT)|g' \
-e 's|@''HAVE_ALIGNED_ALLOC''@|$(HAVE_ALIGNED_ALLOC)|g' \
@@ -2261,19 +2294,23 @@ stdlib.h: stdlib.in.h $(top_builddir)/config.status $(CXXDEFS_H) \
-e 's|@''HAVE_SETSTATE''@|$(HAVE_SETSTATE)|g' \
-e 's|@''HAVE_DECL_SETSTATE''@|$(HAVE_DECL_SETSTATE)|g' \
-e 's|@''HAVE_STRTOD''@|$(HAVE_STRTOD)|g' \
+ -e 's|@''HAVE_STRTOL''@|$(HAVE_STRTOL)|g' \
-e 's|@''HAVE_STRTOLD''@|$(HAVE_STRTOLD)|g' \
-e 's|@''HAVE_STRTOLL''@|$(HAVE_STRTOLL)|g' \
+ -e 's|@''HAVE_STRTOUL''@|$(HAVE_STRTOUL)|g' \
-e 's|@''HAVE_STRTOULL''@|$(HAVE_STRTOULL)|g' \
-e 's|@''HAVE_STRUCT_RANDOM_DATA''@|$(HAVE_STRUCT_RANDOM_DATA)|g' \
-e 's|@''HAVE_SYS_LOADAVG_H''@|$(HAVE_SYS_LOADAVG_H)|g' \
-e 's|@''HAVE_UNLOCKPT''@|$(HAVE_UNLOCKPT)|g' \
-e 's|@''HAVE_DECL_UNSETENV''@|$(HAVE_DECL_UNSETENV)|g' \
-e 's|@''REPLACE_ALIGNED_ALLOC''@|$(REPLACE_ALIGNED_ALLOC)|g' \
- -e 's|@''REPLACE_CALLOC''@|$(REPLACE_CALLOC)|g' \
+ -e 's|@''REPLACE_CALLOC_FOR_CALLOC_GNU''@|$(REPLACE_CALLOC_FOR_CALLOC_GNU)|g' \
+ -e 's|@''REPLACE_CALLOC_FOR_CALLOC_POSIX''@|$(REPLACE_CALLOC_FOR_CALLOC_POSIX)|g' \
-e 's|@''REPLACE_CANONICALIZE_FILE_NAME''@|$(REPLACE_CANONICALIZE_FILE_NAME)|g' \
-e 's|@''REPLACE_FREE''@|$(REPLACE_FREE)|g' \
-e 's|@''REPLACE_INITSTATE''@|$(REPLACE_INITSTATE)|g' \
- -e 's|@''REPLACE_MALLOC''@|$(REPLACE_MALLOC)|g' \
+ -e 's|@''REPLACE_MALLOC_FOR_MALLOC_GNU''@|$(REPLACE_MALLOC_FOR_MALLOC_GNU)|g' \
+ -e 's|@''REPLACE_MALLOC_FOR_MALLOC_POSIX''@|$(REPLACE_MALLOC_FOR_MALLOC_POSIX)|g' \
-e 's|@''REPLACE_MBTOWC''@|$(REPLACE_MBTOWC)|g' \
-e 's|@''REPLACE_MKSTEMP''@|$(REPLACE_MKSTEMP)|g' \
-e 's|@''REPLACE_POSIX_MEMALIGN''@|$(REPLACE_POSIX_MEMALIGN)|g' \
@@ -2283,20 +2320,26 @@ stdlib.h: stdlib.in.h $(top_builddir)/config.status $(CXXDEFS_H) \
-e 's|@''REPLACE_QSORT_R''@|$(REPLACE_QSORT_R)|g' \
-e 's|@''REPLACE_RANDOM''@|$(REPLACE_RANDOM)|g' \
-e 's|@''REPLACE_RANDOM_R''@|$(REPLACE_RANDOM_R)|g' \
- -e 's|@''REPLACE_REALLOC''@|$(REPLACE_REALLOC)|g' \
+ -e 's|@''REPLACE_REALLOC_FOR_REALLOC_GNU''@|$(REPLACE_REALLOC_FOR_REALLOC_GNU)|g' \
+ -e 's|@''REPLACE_REALLOC_FOR_REALLOC_POSIX''@|$(REPLACE_REALLOC_FOR_REALLOC_POSIX)|g' \
+ -e 's|@''REPLACE_REALLOCARRAY''@|$(REPLACE_REALLOCARRAY)|g' \
-e 's|@''REPLACE_REALPATH''@|$(REPLACE_REALPATH)|g' \
-e 's|@''REPLACE_SETENV''@|$(REPLACE_SETENV)|g' \
-e 's|@''REPLACE_SETSTATE''@|$(REPLACE_SETSTATE)|g' \
-e 's|@''REPLACE_STRTOD''@|$(REPLACE_STRTOD)|g' \
+ -e 's|@''REPLACE_STRTOL''@|$(REPLACE_STRTOL)|g' \
-e 's|@''REPLACE_STRTOLD''@|$(REPLACE_STRTOLD)|g' \
+ -e 's|@''REPLACE_STRTOLL''@|$(REPLACE_STRTOLL)|g' \
+ -e 's|@''REPLACE_STRTOUL''@|$(REPLACE_STRTOUL)|g' \
+ -e 's|@''REPLACE_STRTOULL''@|$(REPLACE_STRTOULL)|g' \
-e 's|@''REPLACE_UNSETENV''@|$(REPLACE_UNSETENV)|g' \
-e 's|@''REPLACE_WCTOMB''@|$(REPLACE_WCTOMB)|g' \
-e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-e '/definition of _Noreturn/r $(_NORETURN_H)' \
-e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
- -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
- } > $@-t && \
- mv $@-t $@
+ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+ > $@-t
+ $(AM_V_at)mv $@-t $@
MOSTLYCLEANFILES += stdlib.h stdlib.h-t
EXTRA_DIST += stdlib.in.h
@@ -2305,19 +2348,19 @@ EXTRA_DIST += stdlib.in.h
## begin gnulib module strchrnul
+if GL_COND_OBJ_STRCHRNUL
+libgnu_a_SOURCES += strchrnul.c
+endif
-EXTRA_DIST += strchrnul.c strchrnul.valgrind
-
-EXTRA_libgnu_a_SOURCES += strchrnul.c
+EXTRA_DIST += strchrnul.valgrind
## end gnulib module strchrnul
## begin gnulib module strdup-posix
-
-EXTRA_DIST += strdup.c
-
-EXTRA_libgnu_a_SOURCES += strdup.c
+if GL_COND_OBJ_STRDUP
+libgnu_a_SOURCES += strdup.c
+endif
## end gnulib module strdup-posix
@@ -2330,19 +2373,19 @@ EXTRA_DIST += streq.h
## begin gnulib module strerror
-
-EXTRA_DIST += strerror.c
-
-EXTRA_libgnu_a_SOURCES += strerror.c
+if GL_COND_OBJ_STRERROR
+libgnu_a_SOURCES += strerror.c
+endif
## end gnulib module strerror
## begin gnulib module strerror-override
+if GL_COND_OBJ_STRERROR_OVERRIDE
+libgnu_a_SOURCES += strerror-override.c
+endif
-EXTRA_DIST += strerror-override.c strerror-override.h
-
-EXTRA_libgnu_a_SOURCES += strerror-override.c
+EXTRA_DIST += strerror-override.h
## end gnulib module strerror-override
@@ -2362,56 +2405,56 @@ BUILT_SOURCES += string.h
# We need the following in order to create <string.h> when the system
# doesn't have one that works with the given compiler.
string.h: string.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
- $(AM_V_GEN)rm -f $@-t $@ && \
- { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
- sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \
- -e 's/@''GNULIB_EXPLICIT_BZERO''@/$(GNULIB_EXPLICIT_BZERO)/g' \
- -e 's/@''GNULIB_FFSL''@/$(GNULIB_FFSL)/g' \
- -e 's/@''GNULIB_FFSLL''@/$(GNULIB_FFSLL)/g' \
- -e 's/@''GNULIB_MBSLEN''@/$(GNULIB_MBSLEN)/g' \
- -e 's/@''GNULIB_MBSNLEN''@/$(GNULIB_MBSNLEN)/g' \
- -e 's/@''GNULIB_MBSCHR''@/$(GNULIB_MBSCHR)/g' \
- -e 's/@''GNULIB_MBSRCHR''@/$(GNULIB_MBSRCHR)/g' \
- -e 's/@''GNULIB_MBSSTR''@/$(GNULIB_MBSSTR)/g' \
- -e 's/@''GNULIB_MBSCASECMP''@/$(GNULIB_MBSCASECMP)/g' \
- -e 's/@''GNULIB_MBSNCASECMP''@/$(GNULIB_MBSNCASECMP)/g' \
- -e 's/@''GNULIB_MBSPCASECMP''@/$(GNULIB_MBSPCASECMP)/g' \
- -e 's/@''GNULIB_MBSCASESTR''@/$(GNULIB_MBSCASESTR)/g' \
- -e 's/@''GNULIB_MBSCSPN''@/$(GNULIB_MBSCSPN)/g' \
- -e 's/@''GNULIB_MBSPBRK''@/$(GNULIB_MBSPBRK)/g' \
- -e 's/@''GNULIB_MBSSPN''@/$(GNULIB_MBSSPN)/g' \
- -e 's/@''GNULIB_MBSSEP''@/$(GNULIB_MBSSEP)/g' \
- -e 's/@''GNULIB_MBSTOK_R''@/$(GNULIB_MBSTOK_R)/g' \
- -e 's/@''GNULIB_MEMCHR''@/$(GNULIB_MEMCHR)/g' \
- -e 's/@''GNULIB_MEMMEM''@/$(GNULIB_MEMMEM)/g' \
- -e 's/@''GNULIB_MEMPCPY''@/$(GNULIB_MEMPCPY)/g' \
- -e 's/@''GNULIB_MEMRCHR''@/$(GNULIB_MEMRCHR)/g' \
- -e 's/@''GNULIB_RAWMEMCHR''@/$(GNULIB_RAWMEMCHR)/g' \
- -e 's/@''GNULIB_STPCPY''@/$(GNULIB_STPCPY)/g' \
- -e 's/@''GNULIB_STPNCPY''@/$(GNULIB_STPNCPY)/g' \
- -e 's/@''GNULIB_STRCHRNUL''@/$(GNULIB_STRCHRNUL)/g' \
- -e 's/@''GNULIB_STRDUP''@/$(GNULIB_STRDUP)/g' \
- -e 's/@''GNULIB_STRNCAT''@/$(GNULIB_STRNCAT)/g' \
- -e 's/@''GNULIB_STRNDUP''@/$(GNULIB_STRNDUP)/g' \
- -e 's/@''GNULIB_STRNLEN''@/$(GNULIB_STRNLEN)/g' \
- -e 's/@''GNULIB_STRPBRK''@/$(GNULIB_STRPBRK)/g' \
- -e 's/@''GNULIB_STRSEP''@/$(GNULIB_STRSEP)/g' \
- -e 's/@''GNULIB_STRSTR''@/$(GNULIB_STRSTR)/g' \
- -e 's/@''GNULIB_STRCASESTR''@/$(GNULIB_STRCASESTR)/g' \
- -e 's/@''GNULIB_STRTOK_R''@/$(GNULIB_STRTOK_R)/g' \
- -e 's/@''GNULIB_STRERROR''@/$(GNULIB_STRERROR)/g' \
- -e 's/@''GNULIB_STRERROR_R''@/$(GNULIB_STRERROR_R)/g' \
- -e 's/@''GNULIB_STRERRORNAME_NP''@/$(GNULIB_STRERRORNAME_NP)/g' \
- -e 's/@''GNULIB_SIGABBREV_NP''@/$(GNULIB_SIGABBREV_NP)/g' \
- -e 's/@''GNULIB_SIGDESCR_NP''@/$(GNULIB_SIGDESCR_NP)/g' \
- -e 's/@''GNULIB_STRSIGNAL''@/$(GNULIB_STRSIGNAL)/g' \
- -e 's/@''GNULIB_STRVERSCMP''@/$(GNULIB_STRVERSCMP)/g' \
- -e 's/@''GNULIB_MDA_MEMCCPY''@/$(GNULIB_MDA_MEMCCPY)/g' \
- -e 's/@''GNULIB_MDA_STRDUP''@/$(GNULIB_MDA_STRDUP)/g' \
+ -e 's/@''GNULIB_EXPLICIT_BZERO''@/$(GL_GNULIB_EXPLICIT_BZERO)/g' \
+ -e 's/@''GNULIB_FFSL''@/$(GL_GNULIB_FFSL)/g' \
+ -e 's/@''GNULIB_FFSLL''@/$(GL_GNULIB_FFSLL)/g' \
+ -e 's/@''GNULIB_MBSLEN''@/$(GL_GNULIB_MBSLEN)/g' \
+ -e 's/@''GNULIB_MBSNLEN''@/$(GL_GNULIB_MBSNLEN)/g' \
+ -e 's/@''GNULIB_MBSCHR''@/$(GL_GNULIB_MBSCHR)/g' \
+ -e 's/@''GNULIB_MBSRCHR''@/$(GL_GNULIB_MBSRCHR)/g' \
+ -e 's/@''GNULIB_MBSSTR''@/$(GL_GNULIB_MBSSTR)/g' \
+ -e 's/@''GNULIB_MBSCASECMP''@/$(GL_GNULIB_MBSCASECMP)/g' \
+ -e 's/@''GNULIB_MBSNCASECMP''@/$(GL_GNULIB_MBSNCASECMP)/g' \
+ -e 's/@''GNULIB_MBSPCASECMP''@/$(GL_GNULIB_MBSPCASECMP)/g' \
+ -e 's/@''GNULIB_MBSCASESTR''@/$(GL_GNULIB_MBSCASESTR)/g' \
+ -e 's/@''GNULIB_MBSCSPN''@/$(GL_GNULIB_MBSCSPN)/g' \
+ -e 's/@''GNULIB_MBSPBRK''@/$(GL_GNULIB_MBSPBRK)/g' \
+ -e 's/@''GNULIB_MBSSPN''@/$(GL_GNULIB_MBSSPN)/g' \
+ -e 's/@''GNULIB_MBSSEP''@/$(GL_GNULIB_MBSSEP)/g' \
+ -e 's/@''GNULIB_MBSTOK_R''@/$(GL_GNULIB_MBSTOK_R)/g' \
+ -e 's/@''GNULIB_MEMCHR''@/$(GL_GNULIB_MEMCHR)/g' \
+ -e 's/@''GNULIB_MEMMEM''@/$(GL_GNULIB_MEMMEM)/g' \
+ -e 's/@''GNULIB_MEMPCPY''@/$(GL_GNULIB_MEMPCPY)/g' \
+ -e 's/@''GNULIB_MEMRCHR''@/$(GL_GNULIB_MEMRCHR)/g' \
+ -e 's/@''GNULIB_RAWMEMCHR''@/$(GL_GNULIB_RAWMEMCHR)/g' \
+ -e 's/@''GNULIB_STPCPY''@/$(GL_GNULIB_STPCPY)/g' \
+ -e 's/@''GNULIB_STPNCPY''@/$(GL_GNULIB_STPNCPY)/g' \
+ -e 's/@''GNULIB_STRCHRNUL''@/$(GL_GNULIB_STRCHRNUL)/g' \
+ -e 's/@''GNULIB_STRDUP''@/$(GL_GNULIB_STRDUP)/g' \
+ -e 's/@''GNULIB_STRNCAT''@/$(GL_GNULIB_STRNCAT)/g' \
+ -e 's/@''GNULIB_STRNDUP''@/$(GL_GNULIB_STRNDUP)/g' \
+ -e 's/@''GNULIB_STRNLEN''@/$(GL_GNULIB_STRNLEN)/g' \
+ -e 's/@''GNULIB_STRPBRK''@/$(GL_GNULIB_STRPBRK)/g' \
+ -e 's/@''GNULIB_STRSEP''@/$(GL_GNULIB_STRSEP)/g' \
+ -e 's/@''GNULIB_STRSTR''@/$(GL_GNULIB_STRSTR)/g' \
+ -e 's/@''GNULIB_STRCASESTR''@/$(GL_GNULIB_STRCASESTR)/g' \
+ -e 's/@''GNULIB_STRTOK_R''@/$(GL_GNULIB_STRTOK_R)/g' \
+ -e 's/@''GNULIB_STRERROR''@/$(GL_GNULIB_STRERROR)/g' \
+ -e 's/@''GNULIB_STRERROR_R''@/$(GL_GNULIB_STRERROR_R)/g' \
+ -e 's/@''GNULIB_STRERRORNAME_NP''@/$(GL_GNULIB_STRERRORNAME_NP)/g' \
+ -e 's/@''GNULIB_SIGABBREV_NP''@/$(GL_GNULIB_SIGABBREV_NP)/g' \
+ -e 's/@''GNULIB_SIGDESCR_NP''@/$(GL_GNULIB_SIGDESCR_NP)/g' \
+ -e 's/@''GNULIB_STRSIGNAL''@/$(GL_GNULIB_STRSIGNAL)/g' \
+ -e 's/@''GNULIB_STRVERSCMP''@/$(GL_GNULIB_STRVERSCMP)/g' \
+ -e 's/@''GNULIB_MDA_MEMCCPY''@/$(GL_GNULIB_MDA_MEMCCPY)/g' \
+ -e 's/@''GNULIB_MDA_STRDUP''@/$(GL_GNULIB_MDA_STRDUP)/g' \
+ -e 's/@''GNULIB_FREE_POSIX''@/$(GL_GNULIB_FREE_POSIX)/g' \
< $(srcdir)/string.in.h | \
sed -e 's|@''HAVE_EXPLICIT_BZERO''@|$(HAVE_EXPLICIT_BZERO)|g' \
-e 's|@''HAVE_FFSL''@|$(HAVE_FFSL)|g' \
@@ -2440,6 +2483,7 @@ string.h: string.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H
-e 's|@''REPLACE_FFSLL''@|$(REPLACE_FFSLL)|g' \
-e 's|@''REPLACE_MEMCHR''@|$(REPLACE_MEMCHR)|g' \
-e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \
+ -e 's|@''REPLACE_FREE''@|$(REPLACE_FREE)|g' \
-e 's|@''REPLACE_STPNCPY''@|$(REPLACE_STPNCPY)|g' \
-e 's|@''REPLACE_STRCHRNUL''@|$(REPLACE_STRCHRNUL)|g' \
-e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|g' \
@@ -2456,10 +2500,9 @@ string.h: string.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H
-e 's|@''UNDEFINE_STRTOK_R''@|$(UNDEFINE_STRTOK_R)|g' \
-e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
- -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
- < $(srcdir)/string.in.h; \
- } > $@-t && \
- mv $@-t $@
+ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+ > $@-t
+ $(AM_V_at)mv $@-t $@
MOSTLYCLEANFILES += string.h string.h-t
EXTRA_DIST += string.in.h
@@ -2473,24 +2516,22 @@ BUILT_SOURCES += strings.h
# We need the following in order to create <strings.h> when the system
# doesn't have one that works with the given compiler.
strings.h: strings.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(ARG_NONNULL_H)
- $(AM_V_GEN)rm -f $@-t $@ && \
- { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
- sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's|@''HAVE_STRINGS_H''@|$(HAVE_STRINGS_H)|g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_STRINGS_H''@|$(NEXT_STRINGS_H)|g' \
- -e 's/@''GNULIB_FFS''@/$(GNULIB_FFS)/g' \
+ -e 's/@''GNULIB_FFS''@/$(GL_GNULIB_FFS)/g' \
-e 's|@''HAVE_FFS''@|$(HAVE_FFS)|g' \
-e 's|@''HAVE_STRCASECMP''@|$(HAVE_STRCASECMP)|g' \
-e 's|@''HAVE_DECL_STRNCASECMP''@|$(HAVE_DECL_STRNCASECMP)|g' \
-e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
-e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
- < $(srcdir)/strings.in.h; \
- } > $@-t && \
- mv $@-t $@
+ $(srcdir)/strings.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
MOSTLYCLEANFILES += strings.h strings.h-t
EXTRA_DIST += strings.in.h
@@ -2499,10 +2540,9 @@ EXTRA_DIST += strings.in.h
## begin gnulib module strnlen
-
-EXTRA_DIST += strnlen.c
-
-EXTRA_libgnu_a_SOURCES += strnlen.c
+if GL_COND_OBJ_STRNLEN
+libgnu_a_SOURCES += strnlen.c
+endif
## end gnulib module strnlen
@@ -2532,10 +2572,9 @@ EXTRA_libgnu_a_SOURCES += strstr.c
## begin gnulib module strtok_r
-
-EXTRA_DIST += strtok_r.c
-
-EXTRA_libgnu_a_SOURCES += strtok_r.c
+if GL_COND_OBJ_STRTOK_R
+libgnu_a_SOURCES += strtok_r.c
+endif
## end gnulib module strtok_r
@@ -2546,24 +2585,22 @@ BUILT_SOURCES += sys/random.h
# We need the following in order to create <sys/random.h> when the system
# doesn't have one.
sys/random.h: sys_random.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
- $(AM_V_at)$(MKDIR_P) sys
- $(AM_V_GEN)rm -f $@-t $@ && \
- { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
- sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+ $(AM_V_GEN)$(MKDIR_P) '%reldir%/sys'
+ $(AM_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_SYS_RANDOM_H''@|$(NEXT_SYS_RANDOM_H)|g' \
-e 's|@''HAVE_SYS_RANDOM_H''@|$(HAVE_SYS_RANDOM_H)|g' \
- -e 's/@''GNULIB_GETRANDOM''@/$(GNULIB_GETRANDOM)/g' \
+ -e 's/@''GNULIB_GETRANDOM''@/$(GL_GNULIB_GETRANDOM)/g' \
-e 's/@''HAVE_GETRANDOM''@/$(HAVE_GETRANDOM)/g' \
-e 's/@''REPLACE_GETRANDOM''@/$(REPLACE_GETRANDOM)/g' \
-e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
-e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
- < $(srcdir)/sys_random.in.h; \
- } > $@-t && \
- mv -f $@-t $@
+ $(srcdir)/sys_random.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
MOSTLYCLEANFILES += sys/random.h sys/random.h-t
MOSTLYCLEANDIRS += sys
@@ -2578,26 +2615,24 @@ BUILT_SOURCES += sys/select.h
# We need the following in order to create <sys/select.h> when the system
# doesn't have one that works with the given compiler.
sys/select.h: sys_select.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H)
- $(AM_V_at)$(MKDIR_P) sys
- $(AM_V_GEN)rm -f $@-t $@ && \
- { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
- sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+ $(AM_V_GEN)$(MKDIR_P) '%reldir%/sys'
+ $(AM_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_SYS_SELECT_H''@|$(NEXT_SYS_SELECT_H)|g' \
-e 's|@''HAVE_SYS_SELECT_H''@|$(HAVE_SYS_SELECT_H)|g' \
- -e 's/@''GNULIB_PSELECT''@/$(GNULIB_PSELECT)/g' \
- -e 's/@''GNULIB_SELECT''@/$(GNULIB_SELECT)/g' \
+ -e 's/@''GNULIB_PSELECT''@/$(GL_GNULIB_PSELECT)/g' \
+ -e 's/@''GNULIB_SELECT''@/$(GL_GNULIB_SELECT)/g' \
-e 's|@''HAVE_WINSOCK2_H''@|$(HAVE_WINSOCK2_H)|g' \
-e 's|@''HAVE_PSELECT''@|$(HAVE_PSELECT)|g' \
-e 's|@''REPLACE_PSELECT''@|$(REPLACE_PSELECT)|g' \
-e 's|@''REPLACE_SELECT''@|$(REPLACE_SELECT)|g' \
-e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
- < $(srcdir)/sys_select.in.h; \
- } > $@-t && \
- mv $@-t $@
+ $(srcdir)/sys_select.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
MOSTLYCLEANFILES += sys/select.h sys/select.h-t
MOSTLYCLEANDIRS += sys
@@ -2613,31 +2648,30 @@ libgnu_a_SOURCES += sys_socket.c
# We need the following in order to create <sys/socket.h> when the system
# doesn't have one that works with the given compiler.
sys/socket.h: sys_socket.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(ARG_NONNULL_H)
- $(AM_V_at)$(MKDIR_P) sys
- $(AM_V_GEN)rm -f $@-t $@ && \
- { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
- sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+ $(AM_V_GEN)$(MKDIR_P) '%reldir%/sys'
+ $(AM_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_SYS_SOCKET_H''@|$(NEXT_SYS_SOCKET_H)|g' \
-e 's|@''HAVE_SYS_SOCKET_H''@|$(HAVE_SYS_SOCKET_H)|g' \
- -e 's/@''GNULIB_CLOSE''@/$(GNULIB_CLOSE)/g' \
- -e 's/@''GNULIB_SOCKET''@/$(GNULIB_SOCKET)/g' \
- -e 's/@''GNULIB_CONNECT''@/$(GNULIB_CONNECT)/g' \
- -e 's/@''GNULIB_ACCEPT''@/$(GNULIB_ACCEPT)/g' \
- -e 's/@''GNULIB_BIND''@/$(GNULIB_BIND)/g' \
- -e 's/@''GNULIB_GETPEERNAME''@/$(GNULIB_GETPEERNAME)/g' \
- -e 's/@''GNULIB_GETSOCKNAME''@/$(GNULIB_GETSOCKNAME)/g' \
- -e 's/@''GNULIB_GETSOCKOPT''@/$(GNULIB_GETSOCKOPT)/g' \
- -e 's/@''GNULIB_LISTEN''@/$(GNULIB_LISTEN)/g' \
- -e 's/@''GNULIB_RECV''@/$(GNULIB_RECV)/g' \
- -e 's/@''GNULIB_SEND''@/$(GNULIB_SEND)/g' \
- -e 's/@''GNULIB_RECVFROM''@/$(GNULIB_RECVFROM)/g' \
- -e 's/@''GNULIB_SENDTO''@/$(GNULIB_SENDTO)/g' \
- -e 's/@''GNULIB_SETSOCKOPT''@/$(GNULIB_SETSOCKOPT)/g' \
- -e 's/@''GNULIB_SHUTDOWN''@/$(GNULIB_SHUTDOWN)/g' \
- -e 's/@''GNULIB_ACCEPT4''@/$(GNULIB_ACCEPT4)/g' \
+ -e 's/@''GNULIB_CLOSE''@/$(GL_GNULIB_CLOSE)/g' \
+ -e 's/@''GNULIB_SOCKET''@/$(GL_GNULIB_SOCKET)/g' \
+ -e 's/@''GNULIB_CONNECT''@/$(GL_GNULIB_CONNECT)/g' \
+ -e 's/@''GNULIB_ACCEPT''@/$(GL_GNULIB_ACCEPT)/g' \
+ -e 's/@''GNULIB_BIND''@/$(GL_GNULIB_BIND)/g' \
+ -e 's/@''GNULIB_GETPEERNAME''@/$(GL_GNULIB_GETPEERNAME)/g' \
+ -e 's/@''GNULIB_GETSOCKNAME''@/$(GL_GNULIB_GETSOCKNAME)/g' \
+ -e 's/@''GNULIB_GETSOCKOPT''@/$(GL_GNULIB_GETSOCKOPT)/g' \
+ -e 's/@''GNULIB_LISTEN''@/$(GL_GNULIB_LISTEN)/g' \
+ -e 's/@''GNULIB_RECV''@/$(GL_GNULIB_RECV)/g' \
+ -e 's/@''GNULIB_SEND''@/$(GL_GNULIB_SEND)/g' \
+ -e 's/@''GNULIB_RECVFROM''@/$(GL_GNULIB_RECVFROM)/g' \
+ -e 's/@''GNULIB_SENDTO''@/$(GL_GNULIB_SENDTO)/g' \
+ -e 's/@''GNULIB_SETSOCKOPT''@/$(GL_GNULIB_SETSOCKOPT)/g' \
+ -e 's/@''GNULIB_SHUTDOWN''@/$(GL_GNULIB_SHUTDOWN)/g' \
+ -e 's/@''GNULIB_ACCEPT4''@/$(GL_GNULIB_ACCEPT4)/g' \
-e 's|@''HAVE_WINSOCK2_H''@|$(HAVE_WINSOCK2_H)|g' \
-e 's|@''HAVE_WS2TCPIP_H''@|$(HAVE_WS2TCPIP_H)|g' \
-e 's|@''HAVE_STRUCT_SOCKADDR_STORAGE''@|$(HAVE_STRUCT_SOCKADDR_STORAGE)|g' \
@@ -2647,9 +2681,8 @@ sys/socket.h: sys_socket.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_
-e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
-e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
- < $(srcdir)/sys_socket.in.h; \
- } > $@-t && \
- mv -f $@-t $@
+ $(srcdir)/sys_socket.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
MOSTLYCLEANFILES += sys/socket.h sys/socket.h-t
MOSTLYCLEANDIRS += sys
@@ -2664,35 +2697,34 @@ BUILT_SOURCES += sys/stat.h
# We need the following in order to create <sys/stat.h> when the system
# has one that is incomplete.
sys/stat.h: sys_stat.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
- $(AM_V_at)$(MKDIR_P) sys
- $(AM_V_GEN)rm -f $@-t $@ && \
- { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
- sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+ $(AM_V_GEN)$(MKDIR_P) '%reldir%/sys'
+ $(AM_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_SYS_STAT_H''@|$(NEXT_SYS_STAT_H)|g' \
-e 's|@''WINDOWS_64_BIT_ST_SIZE''@|$(WINDOWS_64_BIT_ST_SIZE)|g' \
-e 's|@''WINDOWS_STAT_TIMESPEC''@|$(WINDOWS_STAT_TIMESPEC)|g' \
- -e 's/@''GNULIB_FCHMODAT''@/$(GNULIB_FCHMODAT)/g' \
- -e 's/@''GNULIB_FSTAT''@/$(GNULIB_FSTAT)/g' \
- -e 's/@''GNULIB_FSTATAT''@/$(GNULIB_FSTATAT)/g' \
- -e 's/@''GNULIB_FUTIMENS''@/$(GNULIB_FUTIMENS)/g' \
- -e 's/@''GNULIB_GETUMASK''@/$(GNULIB_GETUMASK)/g' \
- -e 's/@''GNULIB_LCHMOD''@/$(GNULIB_LCHMOD)/g' \
- -e 's/@''GNULIB_LSTAT''@/$(GNULIB_LSTAT)/g' \
- -e 's/@''GNULIB_MKDIR''@/$(GNULIB_MKDIR)/g' \
- -e 's/@''GNULIB_MKDIRAT''@/$(GNULIB_MKDIRAT)/g' \
- -e 's/@''GNULIB_MKFIFO''@/$(GNULIB_MKFIFO)/g' \
- -e 's/@''GNULIB_MKFIFOAT''@/$(GNULIB_MKFIFOAT)/g' \
- -e 's/@''GNULIB_MKNOD''@/$(GNULIB_MKNOD)/g' \
- -e 's/@''GNULIB_MKNODAT''@/$(GNULIB_MKNODAT)/g' \
- -e 's/@''GNULIB_STAT''@/$(GNULIB_STAT)/g' \
- -e 's/@''GNULIB_UTIMENSAT''@/$(GNULIB_UTIMENSAT)/g' \
- -e 's/@''GNULIB_OVERRIDES_STRUCT_STAT''@/$(GNULIB_OVERRIDES_STRUCT_STAT)/g' \
- -e 's/@''GNULIB_MDA_CHMOD''@/$(GNULIB_MDA_CHMOD)/g' \
- -e 's/@''GNULIB_MDA_MKDIR''@/$(GNULIB_MDA_MKDIR)/g' \
- -e 's/@''GNULIB_MDA_UMASK''@/$(GNULIB_MDA_UMASK)/g' \
+ -e 's/@''GNULIB_FCHMODAT''@/$(GL_GNULIB_FCHMODAT)/g' \
+ -e 's/@''GNULIB_FSTAT''@/$(GL_GNULIB_FSTAT)/g' \
+ -e 's/@''GNULIB_FSTATAT''@/$(GL_GNULIB_FSTATAT)/g' \
+ -e 's/@''GNULIB_FUTIMENS''@/$(GL_GNULIB_FUTIMENS)/g' \
+ -e 's/@''GNULIB_GETUMASK''@/$(GL_GNULIB_GETUMASK)/g' \
+ -e 's/@''GNULIB_LCHMOD''@/$(GL_GNULIB_LCHMOD)/g' \
+ -e 's/@''GNULIB_LSTAT''@/$(GL_GNULIB_LSTAT)/g' \
+ -e 's/@''GNULIB_MKDIR''@/$(GL_GNULIB_MKDIR)/g' \
+ -e 's/@''GNULIB_MKDIRAT''@/$(GL_GNULIB_MKDIRAT)/g' \
+ -e 's/@''GNULIB_MKFIFO''@/$(GL_GNULIB_MKFIFO)/g' \
+ -e 's/@''GNULIB_MKFIFOAT''@/$(GL_GNULIB_MKFIFOAT)/g' \
+ -e 's/@''GNULIB_MKNOD''@/$(GL_GNULIB_MKNOD)/g' \
+ -e 's/@''GNULIB_MKNODAT''@/$(GL_GNULIB_MKNODAT)/g' \
+ -e 's/@''GNULIB_STAT''@/$(GL_GNULIB_STAT)/g' \
+ -e 's/@''GNULIB_UTIMENSAT''@/$(GL_GNULIB_UTIMENSAT)/g' \
+ -e 's/@''GNULIB_OVERRIDES_STRUCT_STAT''@/$(GL_GNULIB_OVERRIDES_STRUCT_STAT)/g' \
+ -e 's/@''GNULIB_MDA_CHMOD''@/$(GL_GNULIB_MDA_CHMOD)/g' \
+ -e 's/@''GNULIB_MDA_MKDIR''@/$(GL_GNULIB_MDA_MKDIR)/g' \
+ -e 's/@''GNULIB_MDA_UMASK''@/$(GL_GNULIB_MDA_UMASK)/g' \
-e 's|@''HAVE_FCHMODAT''@|$(HAVE_FCHMODAT)|g' \
-e 's|@''HAVE_FSTATAT''@|$(HAVE_FSTATAT)|g' \
-e 's|@''HAVE_FUTIMENS''@|$(HAVE_FUTIMENS)|g' \
@@ -2720,9 +2752,8 @@ sys/stat.h: sys_stat.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNU
-e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
-e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
- < $(srcdir)/sys_stat.in.h; \
- } > $@-t && \
- mv $@-t $@
+ $(srcdir)/sys_stat.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
MOSTLYCLEANFILES += sys/stat.h sys/stat.h-t
MOSTLYCLEANDIRS += sys
@@ -2737,16 +2768,15 @@ BUILT_SOURCES += sys/time.h
# We need the following in order to create <sys/time.h> when the system
# doesn't have one that works with the given compiler.
sys/time.h: sys_time.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
- $(AM_V_at)$(MKDIR_P) sys
- $(AM_V_GEN)rm -f $@-t $@ && \
- { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
- sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+ $(AM_V_GEN)$(MKDIR_P) '%reldir%/sys'
+ $(AM_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's/@''HAVE_SYS_TIME_H''@/$(HAVE_SYS_TIME_H)/g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_SYS_TIME_H''@|$(NEXT_SYS_TIME_H)|g' \
- -e 's/@''GNULIB_GETTIMEOFDAY''@/$(GNULIB_GETTIMEOFDAY)/g' \
+ -e 's/@''GNULIB_GETTIMEOFDAY''@/$(GL_GNULIB_GETTIMEOFDAY)/g' \
-e 's|@''HAVE_WINSOCK2_H''@|$(HAVE_WINSOCK2_H)|g' \
-e 's/@''HAVE_GETTIMEOFDAY''@/$(HAVE_GETTIMEOFDAY)/g' \
-e 's/@''HAVE_STRUCT_TIMEVAL''@/$(HAVE_STRUCT_TIMEVAL)/g' \
@@ -2755,9 +2785,8 @@ sys/time.h: sys_time.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNU
-e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
-e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
- < $(srcdir)/sys_time.in.h; \
- } > $@-t && \
- mv $@-t $@
+ $(srcdir)/sys_time.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
MOSTLYCLEANFILES += sys/time.h sys/time.h-t
EXTRA_DIST += sys_time.in.h
@@ -2771,19 +2800,17 @@ BUILT_SOURCES += sys/types.h
# We need the following in order to create <sys/types.h> when the system
# doesn't have one that works with the given compiler.
sys/types.h: sys_types.in.h $(top_builddir)/config.status
- $(AM_V_at)$(MKDIR_P) sys
- $(AM_V_GEN)rm -f $@-t $@ && \
- { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
- sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+ $(AM_V_GEN)$(MKDIR_P) '%reldir%/sys'
+ $(AM_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_SYS_TYPES_H''@|$(NEXT_SYS_TYPES_H)|g' \
-e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \
-e 's|@''WINDOWS_STAT_INODES''@|$(WINDOWS_STAT_INODES)|g' \
- < $(srcdir)/sys_types.in.h; \
- } > $@-t && \
- mv $@-t $@
+ $(srcdir)/sys_types.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
MOSTLYCLEANFILES += sys/types.h sys/types.h-t
EXTRA_DIST += sys_types.in.h
@@ -2797,18 +2824,16 @@ BUILT_SOURCES += sys/uio.h
# We need the following in order to create <sys/uio.h> when the system
# doesn't have one that works with the given compiler.
sys/uio.h: sys_uio.in.h $(top_builddir)/config.status
- $(AM_V_at)$(MKDIR_P) sys
- $(AM_V_GEN)rm -f $@-t $@ && \
- { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
- sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+ $(AM_V_GEN)$(MKDIR_P) '%reldir%/sys'
+ $(AM_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_SYS_UIO_H''@|$(NEXT_SYS_UIO_H)|g' \
-e 's|@''HAVE_SYS_UIO_H''@|$(HAVE_SYS_UIO_H)|g' \
- < $(srcdir)/sys_uio.in.h; \
- } > $@-t && \
- mv -f $@-t $@
+ $(srcdir)/sys_uio.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
MOSTLYCLEANFILES += sys/uio.h sys/uio.h-t
MOSTLYCLEANDIRS += sys
@@ -2823,20 +2848,18 @@ BUILT_SOURCES += sys/wait.h
# We need the following in order to create <sys/wait.h> when the system
# has one that is incomplete.
sys/wait.h: sys_wait.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H)
- $(AM_V_at)$(MKDIR_P) sys
- $(AM_V_GEN)rm -f $@-t $@ && \
- { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
- sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+ $(AM_V_GEN)$(MKDIR_P) '%reldir%/sys'
+ $(AM_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_SYS_WAIT_H''@|$(NEXT_SYS_WAIT_H)|g' \
- -e 's/@''GNULIB_WAITPID''@/$(GNULIB_WAITPID)/g' \
+ -e 's/@''GNULIB_WAITPID''@/$(GL_GNULIB_WAITPID)/g' \
-e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
- < $(srcdir)/sys_wait.in.h; \
- } > $@-t && \
- mv $@-t $@
+ $(srcdir)/sys_wait.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
MOSTLYCLEANFILES += sys/wait.h sys/wait.h-t
MOSTLYCLEANDIRS += sys
@@ -2865,30 +2888,31 @@ BUILT_SOURCES += time.h
# We need the following in order to create <time.h> when the system
# doesn't have one that works with the given compiler.
time.h: time.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
- $(AM_V_GEN)rm -f $@-t $@ && \
- { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
- sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_TIME_H''@|$(NEXT_TIME_H)|g' \
- -e 's/@''GNULIB_CTIME''@/$(GNULIB_CTIME)/g' \
- -e 's/@''GNULIB_LOCALTIME''@/$(GNULIB_LOCALTIME)/g' \
- -e 's/@''GNULIB_MKTIME''@/$(GNULIB_MKTIME)/g' \
- -e 's/@''GNULIB_NANOSLEEP''@/$(GNULIB_NANOSLEEP)/g' \
- -e 's/@''GNULIB_STRFTIME''@/$(GNULIB_STRFTIME)/g' \
- -e 's/@''GNULIB_STRPTIME''@/$(GNULIB_STRPTIME)/g' \
- -e 's/@''GNULIB_TIMEGM''@/$(GNULIB_TIMEGM)/g' \
- -e 's/@''GNULIB_TIMESPEC_GET''@/$(GNULIB_TIMESPEC_GET)/g' \
- -e 's/@''GNULIB_TIME_R''@/$(GNULIB_TIME_R)/g' \
- -e 's/@''GNULIB_TIME_RZ''@/$(GNULIB_TIME_RZ)/g' \
- -e 's/@''GNULIB_TZSET''@/$(GNULIB_TZSET)/g' \
- -e 's/@''GNULIB_MDA_TZSET''@/$(GNULIB_MDA_TZSET)/g' \
+ -e 's/@''GNULIB_CTIME''@/$(GL_GNULIB_CTIME)/g' \
+ -e 's/@''GNULIB_LOCALTIME''@/$(GL_GNULIB_LOCALTIME)/g' \
+ -e 's/@''GNULIB_MKTIME''@/$(GL_GNULIB_MKTIME)/g' \
+ -e 's/@''GNULIB_NANOSLEEP''@/$(GL_GNULIB_NANOSLEEP)/g' \
+ -e 's/@''GNULIB_STRFTIME''@/$(GL_GNULIB_STRFTIME)/g' \
+ -e 's/@''GNULIB_STRPTIME''@/$(GL_GNULIB_STRPTIME)/g' \
+ -e 's/@''GNULIB_TIMEGM''@/$(GL_GNULIB_TIMEGM)/g' \
+ -e 's/@''GNULIB_TIMESPEC_GET''@/$(GL_GNULIB_TIMESPEC_GET)/g' \
+ -e 's/@''GNULIB_TIMESPEC_GETRES''@/$(GL_GNULIB_TIMESPEC_GETRES)/g' \
+ -e 's/@''GNULIB_TIME_R''@/$(GL_GNULIB_TIME_R)/g' \
+ -e 's/@''GNULIB_TIME_RZ''@/$(GL_GNULIB_TIME_RZ)/g' \
+ -e 's/@''GNULIB_TZSET''@/$(GL_GNULIB_TZSET)/g' \
+ -e 's/@''GNULIB_MDA_TZSET''@/$(GL_GNULIB_MDA_TZSET)/g' \
-e 's|@''HAVE_DECL_LOCALTIME_R''@|$(HAVE_DECL_LOCALTIME_R)|g' \
-e 's|@''HAVE_NANOSLEEP''@|$(HAVE_NANOSLEEP)|g' \
-e 's|@''HAVE_STRPTIME''@|$(HAVE_STRPTIME)|g' \
-e 's|@''HAVE_TIMEGM''@|$(HAVE_TIMEGM)|g' \
-e 's|@''HAVE_TIMESPEC_GET''@|$(HAVE_TIMESPEC_GET)|g' \
+ -e 's|@''HAVE_TIMESPEC_GETRES''@|$(HAVE_TIMESPEC_GETRES)|g' \
-e 's|@''HAVE_TIMEZONE_T''@|$(HAVE_TIMEZONE_T)|g' \
-e 's|@''REPLACE_CTIME''@|$(REPLACE_CTIME)|g' \
-e 's|@''REPLACE_GMTIME''@|$(REPLACE_GMTIME)|g' \
@@ -2907,9 +2931,8 @@ time.h: time.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(
-e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
-e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
- < $(srcdir)/time.in.h; \
- } > $@-t && \
- mv $@-t $@
+ $(srcdir)/time.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
MOSTLYCLEANFILES += time.h time.h-t
EXTRA_DIST += time.in.h
@@ -2918,10 +2941,9 @@ EXTRA_DIST += time.in.h
## begin gnulib module time_r
-
-EXTRA_DIST += time_r.c
-
-EXTRA_libgnu_a_SOURCES += time_r.c
+if GL_COND_OBJ_TIME_R
+libgnu_a_SOURCES += time_r.c
+endif
## end gnulib module time_r
@@ -2933,98 +2955,98 @@ libgnu_a_SOURCES += unistd.c
# We need the following in order to create an empty placeholder for
# <unistd.h> when the system doesn't have one.
unistd.h: unistd.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
- $(AM_V_GEN)rm -f $@-t $@ && \
- { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
- sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's|@''HAVE_UNISTD_H''@|$(HAVE_UNISTD_H)|g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_UNISTD_H''@|$(NEXT_UNISTD_H)|g' \
-e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \
- -e 's/@''GNULIB_ACCESS''@/$(GNULIB_ACCESS)/g' \
- -e 's/@''GNULIB_CHDIR''@/$(GNULIB_CHDIR)/g' \
- -e 's/@''GNULIB_CHOWN''@/$(GNULIB_CHOWN)/g' \
- -e 's/@''GNULIB_CLOSE''@/$(GNULIB_CLOSE)/g' \
- -e 's/@''GNULIB_COPY_FILE_RANGE''@/$(GNULIB_COPY_FILE_RANGE)/g' \
- -e 's/@''GNULIB_DUP''@/$(GNULIB_DUP)/g' \
- -e 's/@''GNULIB_DUP2''@/$(GNULIB_DUP2)/g' \
- -e 's/@''GNULIB_DUP3''@/$(GNULIB_DUP3)/g' \
- -e 's/@''GNULIB_ENVIRON''@/$(GNULIB_ENVIRON)/g' \
- -e 's/@''GNULIB_EUIDACCESS''@/$(GNULIB_EUIDACCESS)/g' \
- -e 's/@''GNULIB_EXECL''@/$(GNULIB_EXECL)/g' \
- -e 's/@''GNULIB_EXECLE''@/$(GNULIB_EXECLE)/g' \
- -e 's/@''GNULIB_EXECLP''@/$(GNULIB_EXECLP)/g' \
- -e 's/@''GNULIB_EXECV''@/$(GNULIB_EXECV)/g' \
- -e 's/@''GNULIB_EXECVE''@/$(GNULIB_EXECVE)/g' \
- -e 's/@''GNULIB_EXECVP''@/$(GNULIB_EXECVP)/g' \
- -e 's/@''GNULIB_EXECVPE''@/$(GNULIB_EXECVPE)/g' \
- -e 's/@''GNULIB_FACCESSAT''@/$(GNULIB_FACCESSAT)/g' \
- -e 's/@''GNULIB_FCHDIR''@/$(GNULIB_FCHDIR)/g' \
- -e 's/@''GNULIB_FCHOWNAT''@/$(GNULIB_FCHOWNAT)/g' \
- -e 's/@''GNULIB_FDATASYNC''@/$(GNULIB_FDATASYNC)/g' \
- -e 's/@''GNULIB_FSYNC''@/$(GNULIB_FSYNC)/g' \
- -e 's/@''GNULIB_FTRUNCATE''@/$(GNULIB_FTRUNCATE)/g' \
- -e 's/@''GNULIB_GETCWD''@/$(GNULIB_GETCWD)/g' \
- -e 's/@''GNULIB_GETDOMAINNAME''@/$(GNULIB_GETDOMAINNAME)/g' \
- -e 's/@''GNULIB_GETDTABLESIZE''@/$(GNULIB_GETDTABLESIZE)/g' \
- -e 's/@''GNULIB_GETENTROPY''@/$(GNULIB_GETENTROPY)/g' \
- -e 's/@''GNULIB_GETGROUPS''@/$(GNULIB_GETGROUPS)/g' \
- -e 's/@''GNULIB_GETHOSTNAME''@/$(GNULIB_GETHOSTNAME)/g' \
- -e 's/@''GNULIB_GETLOGIN''@/$(GNULIB_GETLOGIN)/g' \
- -e 's/@''GNULIB_GETLOGIN_R''@/$(GNULIB_GETLOGIN_R)/g' \
- -e 's/@''GNULIB_GETOPT_POSIX''@/$(GNULIB_GETOPT_POSIX)/g' \
- -e 's/@''GNULIB_GETPAGESIZE''@/$(GNULIB_GETPAGESIZE)/g' \
- -e 's/@''GNULIB_GETPASS''@/$(GNULIB_GETPASS)/g' \
- -e 's/@''GNULIB_GETUSERSHELL''@/$(GNULIB_GETUSERSHELL)/g' \
- -e 's/@''GNULIB_GROUP_MEMBER''@/$(GNULIB_GROUP_MEMBER)/g' \
- -e 's/@''GNULIB_ISATTY''@/$(GNULIB_ISATTY)/g' \
- -e 's/@''GNULIB_LCHOWN''@/$(GNULIB_LCHOWN)/g' \
- -e 's/@''GNULIB_LINK''@/$(GNULIB_LINK)/g' \
- -e 's/@''GNULIB_LINKAT''@/$(GNULIB_LINKAT)/g' \
- -e 's/@''GNULIB_LSEEK''@/$(GNULIB_LSEEK)/g' \
- -e 's/@''GNULIB_PIPE''@/$(GNULIB_PIPE)/g' \
- -e 's/@''GNULIB_PIPE2''@/$(GNULIB_PIPE2)/g' \
- -e 's/@''GNULIB_PREAD''@/$(GNULIB_PREAD)/g' \
- -e 's/@''GNULIB_PWRITE''@/$(GNULIB_PWRITE)/g' \
- -e 's/@''GNULIB_READ''@/$(GNULIB_READ)/g' \
- -e 's/@''GNULIB_READLINK''@/$(GNULIB_READLINK)/g' \
- -e 's/@''GNULIB_READLINKAT''@/$(GNULIB_READLINKAT)/g' \
- -e 's/@''GNULIB_RMDIR''@/$(GNULIB_RMDIR)/g' \
- -e 's/@''GNULIB_SETHOSTNAME''@/$(GNULIB_SETHOSTNAME)/g' \
- -e 's/@''GNULIB_SLEEP''@/$(GNULIB_SLEEP)/g' \
- -e 's/@''GNULIB_SYMLINK''@/$(GNULIB_SYMLINK)/g' \
- -e 's/@''GNULIB_SYMLINKAT''@/$(GNULIB_SYMLINKAT)/g' \
- -e 's/@''GNULIB_TRUNCATE''@/$(GNULIB_TRUNCATE)/g' \
- -e 's/@''GNULIB_TTYNAME_R''@/$(GNULIB_TTYNAME_R)/g' \
- -e 's/@''GNULIB_UNISTD_H_GETOPT''@/0$(GNULIB_GL_UNISTD_H_GETOPT)/g' \
- -e 's/@''GNULIB_UNISTD_H_NONBLOCKING''@/$(GNULIB_UNISTD_H_NONBLOCKING)/g' \
- -e 's/@''GNULIB_UNISTD_H_SIGPIPE''@/$(GNULIB_UNISTD_H_SIGPIPE)/g' \
- -e 's/@''GNULIB_UNLINK''@/$(GNULIB_UNLINK)/g' \
- -e 's/@''GNULIB_UNLINKAT''@/$(GNULIB_UNLINKAT)/g' \
- -e 's/@''GNULIB_USLEEP''@/$(GNULIB_USLEEP)/g' \
- -e 's/@''GNULIB_WRITE''@/$(GNULIB_WRITE)/g' \
- -e 's/@''GNULIB_MDA_ACCESS''@/$(GNULIB_MDA_ACCESS)/g' \
- -e 's/@''GNULIB_MDA_CHDIR''@/$(GNULIB_MDA_CHDIR)/g' \
- -e 's/@''GNULIB_MDA_CLOSE''@/$(GNULIB_MDA_CLOSE)/g' \
- -e 's/@''GNULIB_MDA_DUP''@/$(GNULIB_MDA_DUP)/g' \
- -e 's/@''GNULIB_MDA_DUP2''@/$(GNULIB_MDA_DUP2)/g' \
- -e 's/@''GNULIB_MDA_EXECL''@/$(GNULIB_MDA_EXECL)/g' \
- -e 's/@''GNULIB_MDA_EXECLE''@/$(GNULIB_MDA_EXECLE)/g' \
- -e 's/@''GNULIB_MDA_EXECLP''@/$(GNULIB_MDA_EXECLP)/g' \
- -e 's/@''GNULIB_MDA_EXECV''@/$(GNULIB_MDA_EXECV)/g' \
- -e 's/@''GNULIB_MDA_EXECVE''@/$(GNULIB_MDA_EXECVE)/g' \
- -e 's/@''GNULIB_MDA_EXECVP''@/$(GNULIB_MDA_EXECVP)/g' \
- -e 's/@''GNULIB_MDA_EXECVPE''@/$(GNULIB_MDA_EXECVPE)/g' \
- -e 's/@''GNULIB_MDA_GETCWD''@/$(GNULIB_MDA_GETCWD)/g' \
- -e 's/@''GNULIB_MDA_GETPID''@/$(GNULIB_MDA_GETPID)/g' \
- -e 's/@''GNULIB_MDA_ISATTY''@/$(GNULIB_MDA_ISATTY)/g' \
- -e 's/@''GNULIB_MDA_LSEEK''@/$(GNULIB_MDA_LSEEK)/g' \
- -e 's/@''GNULIB_MDA_READ''@/$(GNULIB_MDA_READ)/g' \
- -e 's/@''GNULIB_MDA_RMDIR''@/$(GNULIB_MDA_RMDIR)/g' \
- -e 's/@''GNULIB_MDA_SWAB''@/$(GNULIB_MDA_SWAB)/g' \
- -e 's/@''GNULIB_MDA_UNLINK''@/$(GNULIB_MDA_UNLINK)/g' \
- -e 's/@''GNULIB_MDA_WRITE''@/$(GNULIB_MDA_WRITE)/g' \
+ -e 's/@''GNULIB_ACCESS''@/$(GL_GNULIB_ACCESS)/g' \
+ -e 's/@''GNULIB_CHDIR''@/$(GL_GNULIB_CHDIR)/g' \
+ -e 's/@''GNULIB_CHOWN''@/$(GL_GNULIB_CHOWN)/g' \
+ -e 's/@''GNULIB_CLOSE''@/$(GL_GNULIB_CLOSE)/g' \
+ -e 's/@''GNULIB_COPY_FILE_RANGE''@/$(GL_GNULIB_COPY_FILE_RANGE)/g' \
+ -e 's/@''GNULIB_DUP''@/$(GL_GNULIB_DUP)/g' \
+ -e 's/@''GNULIB_DUP2''@/$(GL_GNULIB_DUP2)/g' \
+ -e 's/@''GNULIB_DUP3''@/$(GL_GNULIB_DUP3)/g' \
+ -e 's/@''GNULIB_ENVIRON''@/$(GL_GNULIB_ENVIRON)/g' \
+ -e 's/@''GNULIB_EUIDACCESS''@/$(GL_GNULIB_EUIDACCESS)/g' \
+ -e 's/@''GNULIB_EXECL''@/$(GL_GNULIB_EXECL)/g' \
+ -e 's/@''GNULIB_EXECLE''@/$(GL_GNULIB_EXECLE)/g' \
+ -e 's/@''GNULIB_EXECLP''@/$(GL_GNULIB_EXECLP)/g' \
+ -e 's/@''GNULIB_EXECV''@/$(GL_GNULIB_EXECV)/g' \
+ -e 's/@''GNULIB_EXECVE''@/$(GL_GNULIB_EXECVE)/g' \
+ -e 's/@''GNULIB_EXECVP''@/$(GL_GNULIB_EXECVP)/g' \
+ -e 's/@''GNULIB_EXECVPE''@/$(GL_GNULIB_EXECVPE)/g' \
+ -e 's/@''GNULIB_FACCESSAT''@/$(GL_GNULIB_FACCESSAT)/g' \
+ -e 's/@''GNULIB_FCHDIR''@/$(GL_GNULIB_FCHDIR)/g' \
+ -e 's/@''GNULIB_FCHOWNAT''@/$(GL_GNULIB_FCHOWNAT)/g' \
+ -e 's/@''GNULIB_FDATASYNC''@/$(GL_GNULIB_FDATASYNC)/g' \
+ -e 's/@''GNULIB_FSYNC''@/$(GL_GNULIB_FSYNC)/g' \
+ -e 's/@''GNULIB_FTRUNCATE''@/$(GL_GNULIB_FTRUNCATE)/g' \
+ -e 's/@''GNULIB_GETCWD''@/$(GL_GNULIB_GETCWD)/g' \
+ -e 's/@''GNULIB_GETDOMAINNAME''@/$(GL_GNULIB_GETDOMAINNAME)/g' \
+ -e 's/@''GNULIB_GETDTABLESIZE''@/$(GL_GNULIB_GETDTABLESIZE)/g' \
+ -e 's/@''GNULIB_GETENTROPY''@/$(GL_GNULIB_GETENTROPY)/g' \
+ -e 's/@''GNULIB_GETGROUPS''@/$(GL_GNULIB_GETGROUPS)/g' \
+ -e 's/@''GNULIB_GETHOSTNAME''@/$(GL_GNULIB_GETHOSTNAME)/g' \
+ -e 's/@''GNULIB_GETLOGIN''@/$(GL_GNULIB_GETLOGIN)/g' \
+ -e 's/@''GNULIB_GETLOGIN_R''@/$(GL_GNULIB_GETLOGIN_R)/g' \
+ -e 's/@''GNULIB_GETOPT_POSIX''@/$(GL_GNULIB_GETOPT_POSIX)/g' \
+ -e 's/@''GNULIB_GETPAGESIZE''@/$(GL_GNULIB_GETPAGESIZE)/g' \
+ -e 's/@''GNULIB_GETPASS''@/$(GL_GNULIB_GETPASS)/g' \
+ -e 's/@''GNULIB_GETPASS_GNU''@/$(GL_GNULIB_GETPASS_GNU)/g' \
+ -e 's/@''GNULIB_GETUSERSHELL''@/$(GL_GNULIB_GETUSERSHELL)/g' \
+ -e 's/@''GNULIB_GROUP_MEMBER''@/$(GL_GNULIB_GROUP_MEMBER)/g' \
+ -e 's/@''GNULIB_ISATTY''@/$(GL_GNULIB_ISATTY)/g' \
+ -e 's/@''GNULIB_LCHOWN''@/$(GL_GNULIB_LCHOWN)/g' \
+ -e 's/@''GNULIB_LINK''@/$(GL_GNULIB_LINK)/g' \
+ -e 's/@''GNULIB_LINKAT''@/$(GL_GNULIB_LINKAT)/g' \
+ -e 's/@''GNULIB_LSEEK''@/$(GL_GNULIB_LSEEK)/g' \
+ -e 's/@''GNULIB_PIPE''@/$(GL_GNULIB_PIPE)/g' \
+ -e 's/@''GNULIB_PIPE2''@/$(GL_GNULIB_PIPE2)/g' \
+ -e 's/@''GNULIB_PREAD''@/$(GL_GNULIB_PREAD)/g' \
+ -e 's/@''GNULIB_PWRITE''@/$(GL_GNULIB_PWRITE)/g' \
+ -e 's/@''GNULIB_READ''@/$(GL_GNULIB_READ)/g' \
+ -e 's/@''GNULIB_READLINK''@/$(GL_GNULIB_READLINK)/g' \
+ -e 's/@''GNULIB_READLINKAT''@/$(GL_GNULIB_READLINKAT)/g' \
+ -e 's/@''GNULIB_RMDIR''@/$(GL_GNULIB_RMDIR)/g' \
+ -e 's/@''GNULIB_SETHOSTNAME''@/$(GL_GNULIB_SETHOSTNAME)/g' \
+ -e 's/@''GNULIB_SLEEP''@/$(GL_GNULIB_SLEEP)/g' \
+ -e 's/@''GNULIB_SYMLINK''@/$(GL_GNULIB_SYMLINK)/g' \
+ -e 's/@''GNULIB_SYMLINKAT''@/$(GL_GNULIB_SYMLINKAT)/g' \
+ -e 's/@''GNULIB_TRUNCATE''@/$(GL_GNULIB_TRUNCATE)/g' \
+ -e 's/@''GNULIB_TTYNAME_R''@/$(GL_GNULIB_TTYNAME_R)/g' \
+ -e 's/@''GNULIB_UNISTD_H_GETOPT''@/0$(GL_GNULIB_UNISTD_H_GETOPT)/g' \
+ -e 's/@''GNULIB_UNISTD_H_NONBLOCKING''@/$(GL_GNULIB_UNISTD_H_NONBLOCKING)/g' \
+ -e 's/@''GNULIB_UNISTD_H_SIGPIPE''@/$(GL_GNULIB_UNISTD_H_SIGPIPE)/g' \
+ -e 's/@''GNULIB_UNLINK''@/$(GL_GNULIB_UNLINK)/g' \
+ -e 's/@''GNULIB_UNLINKAT''@/$(GL_GNULIB_UNLINKAT)/g' \
+ -e 's/@''GNULIB_USLEEP''@/$(GL_GNULIB_USLEEP)/g' \
+ -e 's/@''GNULIB_WRITE''@/$(GL_GNULIB_WRITE)/g' \
+ -e 's/@''GNULIB_MDA_ACCESS''@/$(GL_GNULIB_MDA_ACCESS)/g' \
+ -e 's/@''GNULIB_MDA_CHDIR''@/$(GL_GNULIB_MDA_CHDIR)/g' \
+ -e 's/@''GNULIB_MDA_CLOSE''@/$(GL_GNULIB_MDA_CLOSE)/g' \
+ -e 's/@''GNULIB_MDA_DUP''@/$(GL_GNULIB_MDA_DUP)/g' \
+ -e 's/@''GNULIB_MDA_DUP2''@/$(GL_GNULIB_MDA_DUP2)/g' \
+ -e 's/@''GNULIB_MDA_EXECL''@/$(GL_GNULIB_MDA_EXECL)/g' \
+ -e 's/@''GNULIB_MDA_EXECLE''@/$(GL_GNULIB_MDA_EXECLE)/g' \
+ -e 's/@''GNULIB_MDA_EXECLP''@/$(GL_GNULIB_MDA_EXECLP)/g' \
+ -e 's/@''GNULIB_MDA_EXECV''@/$(GL_GNULIB_MDA_EXECV)/g' \
+ -e 's/@''GNULIB_MDA_EXECVE''@/$(GL_GNULIB_MDA_EXECVE)/g' \
+ -e 's/@''GNULIB_MDA_EXECVP''@/$(GL_GNULIB_MDA_EXECVP)/g' \
+ -e 's/@''GNULIB_MDA_EXECVPE''@/$(GL_GNULIB_MDA_EXECVPE)/g' \
+ -e 's/@''GNULIB_MDA_GETCWD''@/$(GL_GNULIB_MDA_GETCWD)/g' \
+ -e 's/@''GNULIB_MDA_GETPID''@/$(GL_GNULIB_MDA_GETPID)/g' \
+ -e 's/@''GNULIB_MDA_ISATTY''@/$(GL_GNULIB_MDA_ISATTY)/g' \
+ -e 's/@''GNULIB_MDA_LSEEK''@/$(GL_GNULIB_MDA_LSEEK)/g' \
+ -e 's/@''GNULIB_MDA_READ''@/$(GL_GNULIB_MDA_READ)/g' \
+ -e 's/@''GNULIB_MDA_RMDIR''@/$(GL_GNULIB_MDA_RMDIR)/g' \
+ -e 's/@''GNULIB_MDA_SWAB''@/$(GL_GNULIB_MDA_SWAB)/g' \
+ -e 's/@''GNULIB_MDA_UNLINK''@/$(GL_GNULIB_MDA_UNLINK)/g' \
+ -e 's/@''GNULIB_MDA_WRITE''@/$(GL_GNULIB_MDA_WRITE)/g' \
< $(srcdir)/unistd.in.h | \
sed -e 's|@''HAVE_CHOWN''@|$(HAVE_CHOWN)|g' \
-e 's|@''HAVE_COPY_FILE_RANGE''@|$(HAVE_COPY_FILE_RANGE)|g' \
@@ -3077,6 +3099,7 @@ unistd.h: unistd.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H
sed -e 's|@''REPLACE_ACCESS''@|$(REPLACE_ACCESS)|g' \
-e 's|@''REPLACE_CHOWN''@|$(REPLACE_CHOWN)|g' \
-e 's|@''REPLACE_CLOSE''@|$(REPLACE_CLOSE)|g' \
+ -e 's|@''REPLACE_COPY_FILE_RANGE''@|$(REPLACE_COPY_FILE_RANGE)|g' \
-e 's|@''REPLACE_DUP''@|$(REPLACE_DUP)|g' \
-e 's|@''REPLACE_DUP2''@|$(REPLACE_DUP2)|g' \
-e 's|@''REPLACE_EXECL''@|$(REPLACE_EXECL)|g' \
@@ -3096,6 +3119,7 @@ unistd.h: unistd.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H
-e 's|@''REPLACE_GETGROUPS''@|$(REPLACE_GETGROUPS)|g' \
-e 's|@''REPLACE_GETPAGESIZE''@|$(REPLACE_GETPAGESIZE)|g' \
-e 's|@''REPLACE_GETPASS''@|$(REPLACE_GETPASS)|g' \
+ -e 's|@''REPLACE_GETPASS_FOR_GETPASS_GNU''@|$(REPLACE_GETPASS_FOR_GETPASS_GNU)|g' \
-e 's|@''REPLACE_ISATTY''@|$(REPLACE_ISATTY)|g' \
-e 's|@''REPLACE_LCHOWN''@|$(REPLACE_LCHOWN)|g' \
-e 's|@''REPLACE_LINK''@|$(REPLACE_LINK)|g' \
@@ -3121,9 +3145,9 @@ unistd.h: unistd.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H
-e 's|@''UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS''@|$(UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS)|g' \
-e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
- -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
- } > $@-t && \
- mv $@-t $@
+ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+ > $@-t
+ $(AM_V_at)mv $@-t $@
MOSTLYCLEANFILES += unistd.h unistd.h-t
EXTRA_DIST += unistd.in.h
@@ -3140,10 +3164,9 @@ EXTRA_DIST += unistd--.h unistd-safer.h
## begin gnulib module unsetenv
-
-EXTRA_DIST += unsetenv.c
-
-EXTRA_libgnu_a_SOURCES += unsetenv.c
+if GL_COND_OBJ_UNSETENV
+libgnu_a_SOURCES += unsetenv.c
+endif
## end gnulib module unsetenv
@@ -3168,9 +3191,8 @@ BUILT_SOURCES += wchar.h
# We need the following in order to create <wchar.h> when the system
# version does not work standalone.
wchar.h: wchar.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
- $(AM_V_GEN)rm -f $@-t $@ && \
- { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
- sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
@@ -3178,49 +3200,50 @@ wchar.h: wchar.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H)
-e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \
-e 's|@''HAVE_WCHAR_H''@|$(HAVE_WCHAR_H)|g' \
-e 's/@''HAVE_CRTDEFS_H''@/$(HAVE_CRTDEFS_H)/g' \
- -e 's/@''GNULIB_OVERRIDES_WINT_T''@/$(GNULIB_OVERRIDES_WINT_T)/g' \
- -e 's/@''GNULIB_BTOWC''@/$(GNULIB_BTOWC)/g' \
- -e 's/@''GNULIB_WCTOB''@/$(GNULIB_WCTOB)/g' \
- -e 's/@''GNULIB_MBSINIT''@/$(GNULIB_MBSINIT)/g' \
- -e 's/@''GNULIB_MBRTOWC''@/$(GNULIB_MBRTOWC)/g' \
- -e 's/@''GNULIB_MBRLEN''@/$(GNULIB_MBRLEN)/g' \
- -e 's/@''GNULIB_MBSRTOWCS''@/$(GNULIB_MBSRTOWCS)/g' \
- -e 's/@''GNULIB_MBSNRTOWCS''@/$(GNULIB_MBSNRTOWCS)/g' \
- -e 's/@''GNULIB_WCRTOMB''@/$(GNULIB_WCRTOMB)/g' \
- -e 's/@''GNULIB_WCSRTOMBS''@/$(GNULIB_WCSRTOMBS)/g' \
- -e 's/@''GNULIB_WCSNRTOMBS''@/$(GNULIB_WCSNRTOMBS)/g' \
- -e 's/@''GNULIB_WCWIDTH''@/$(GNULIB_WCWIDTH)/g' \
- -e 's/@''GNULIB_WMEMCHR''@/$(GNULIB_WMEMCHR)/g' \
- -e 's/@''GNULIB_WMEMCMP''@/$(GNULIB_WMEMCMP)/g' \
- -e 's/@''GNULIB_WMEMCPY''@/$(GNULIB_WMEMCPY)/g' \
- -e 's/@''GNULIB_WMEMMOVE''@/$(GNULIB_WMEMMOVE)/g' \
- -e 's/@''GNULIB_WMEMPCPY''@/$(GNULIB_WMEMPCPY)/g' \
- -e 's/@''GNULIB_WMEMSET''@/$(GNULIB_WMEMSET)/g' \
- -e 's/@''GNULIB_WCSLEN''@/$(GNULIB_WCSLEN)/g' \
- -e 's/@''GNULIB_WCSNLEN''@/$(GNULIB_WCSNLEN)/g' \
- -e 's/@''GNULIB_WCSCPY''@/$(GNULIB_WCSCPY)/g' \
- -e 's/@''GNULIB_WCPCPY''@/$(GNULIB_WCPCPY)/g' \
- -e 's/@''GNULIB_WCSNCPY''@/$(GNULIB_WCSNCPY)/g' \
- -e 's/@''GNULIB_WCPNCPY''@/$(GNULIB_WCPNCPY)/g' \
- -e 's/@''GNULIB_WCSCAT''@/$(GNULIB_WCSCAT)/g' \
- -e 's/@''GNULIB_WCSNCAT''@/$(GNULIB_WCSNCAT)/g' \
- -e 's/@''GNULIB_WCSCMP''@/$(GNULIB_WCSCMP)/g' \
- -e 's/@''GNULIB_WCSNCMP''@/$(GNULIB_WCSNCMP)/g' \
- -e 's/@''GNULIB_WCSCASECMP''@/$(GNULIB_WCSCASECMP)/g' \
- -e 's/@''GNULIB_WCSNCASECMP''@/$(GNULIB_WCSNCASECMP)/g' \
- -e 's/@''GNULIB_WCSCOLL''@/$(GNULIB_WCSCOLL)/g' \
- -e 's/@''GNULIB_WCSXFRM''@/$(GNULIB_WCSXFRM)/g' \
- -e 's/@''GNULIB_WCSDUP''@/$(GNULIB_WCSDUP)/g' \
- -e 's/@''GNULIB_WCSCHR''@/$(GNULIB_WCSCHR)/g' \
- -e 's/@''GNULIB_WCSRCHR''@/$(GNULIB_WCSRCHR)/g' \
- -e 's/@''GNULIB_WCSCSPN''@/$(GNULIB_WCSCSPN)/g' \
- -e 's/@''GNULIB_WCSSPN''@/$(GNULIB_WCSSPN)/g' \
- -e 's/@''GNULIB_WCSPBRK''@/$(GNULIB_WCSPBRK)/g' \
- -e 's/@''GNULIB_WCSSTR''@/$(GNULIB_WCSSTR)/g' \
- -e 's/@''GNULIB_WCSTOK''@/$(GNULIB_WCSTOK)/g' \
- -e 's/@''GNULIB_WCSWIDTH''@/$(GNULIB_WCSWIDTH)/g' \
- -e 's/@''GNULIB_WCSFTIME''@/$(GNULIB_WCSFTIME)/g' \
- -e 's/@''GNULIB_MDA_WCSDUP''@/$(GNULIB_MDA_WCSDUP)/g' \
+ -e 's/@''GNULIBHEADERS_OVERRIDE_WINT_T''@/$(GNULIBHEADERS_OVERRIDE_WINT_T)/g' \
+ -e 's/@''GNULIB_BTOWC''@/$(GL_GNULIB_BTOWC)/g' \
+ -e 's/@''GNULIB_WCTOB''@/$(GL_GNULIB_WCTOB)/g' \
+ -e 's/@''GNULIB_MBSINIT''@/$(GL_GNULIB_MBSINIT)/g' \
+ -e 's/@''GNULIB_MBRTOWC''@/$(GL_GNULIB_MBRTOWC)/g' \
+ -e 's/@''GNULIB_MBRLEN''@/$(GL_GNULIB_MBRLEN)/g' \
+ -e 's/@''GNULIB_MBSRTOWCS''@/$(GL_GNULIB_MBSRTOWCS)/g' \
+ -e 's/@''GNULIB_MBSNRTOWCS''@/$(GL_GNULIB_MBSNRTOWCS)/g' \
+ -e 's/@''GNULIB_WCRTOMB''@/$(GL_GNULIB_WCRTOMB)/g' \
+ -e 's/@''GNULIB_WCSRTOMBS''@/$(GL_GNULIB_WCSRTOMBS)/g' \
+ -e 's/@''GNULIB_WCSNRTOMBS''@/$(GL_GNULIB_WCSNRTOMBS)/g' \
+ -e 's/@''GNULIB_WCWIDTH''@/$(GL_GNULIB_WCWIDTH)/g' \
+ -e 's/@''GNULIB_WMEMCHR''@/$(GL_GNULIB_WMEMCHR)/g' \
+ -e 's/@''GNULIB_WMEMCMP''@/$(GL_GNULIB_WMEMCMP)/g' \
+ -e 's/@''GNULIB_WMEMCPY''@/$(GL_GNULIB_WMEMCPY)/g' \
+ -e 's/@''GNULIB_WMEMMOVE''@/$(GL_GNULIB_WMEMMOVE)/g' \
+ -e 's/@''GNULIB_WMEMPCPY''@/$(GL_GNULIB_WMEMPCPY)/g' \
+ -e 's/@''GNULIB_WMEMSET''@/$(GL_GNULIB_WMEMSET)/g' \
+ -e 's/@''GNULIB_WCSLEN''@/$(GL_GNULIB_WCSLEN)/g' \
+ -e 's/@''GNULIB_WCSNLEN''@/$(GL_GNULIB_WCSNLEN)/g' \
+ -e 's/@''GNULIB_WCSCPY''@/$(GL_GNULIB_WCSCPY)/g' \
+ -e 's/@''GNULIB_WCPCPY''@/$(GL_GNULIB_WCPCPY)/g' \
+ -e 's/@''GNULIB_WCSNCPY''@/$(GL_GNULIB_WCSNCPY)/g' \
+ -e 's/@''GNULIB_WCPNCPY''@/$(GL_GNULIB_WCPNCPY)/g' \
+ -e 's/@''GNULIB_WCSCAT''@/$(GL_GNULIB_WCSCAT)/g' \
+ -e 's/@''GNULIB_WCSNCAT''@/$(GL_GNULIB_WCSNCAT)/g' \
+ -e 's/@''GNULIB_WCSCMP''@/$(GL_GNULIB_WCSCMP)/g' \
+ -e 's/@''GNULIB_WCSNCMP''@/$(GL_GNULIB_WCSNCMP)/g' \
+ -e 's/@''GNULIB_WCSCASECMP''@/$(GL_GNULIB_WCSCASECMP)/g' \
+ -e 's/@''GNULIB_WCSNCASECMP''@/$(GL_GNULIB_WCSNCASECMP)/g' \
+ -e 's/@''GNULIB_WCSCOLL''@/$(GL_GNULIB_WCSCOLL)/g' \
+ -e 's/@''GNULIB_WCSXFRM''@/$(GL_GNULIB_WCSXFRM)/g' \
+ -e 's/@''GNULIB_WCSDUP''@/$(GL_GNULIB_WCSDUP)/g' \
+ -e 's/@''GNULIB_WCSCHR''@/$(GL_GNULIB_WCSCHR)/g' \
+ -e 's/@''GNULIB_WCSRCHR''@/$(GL_GNULIB_WCSRCHR)/g' \
+ -e 's/@''GNULIB_WCSCSPN''@/$(GL_GNULIB_WCSCSPN)/g' \
+ -e 's/@''GNULIB_WCSSPN''@/$(GL_GNULIB_WCSSPN)/g' \
+ -e 's/@''GNULIB_WCSPBRK''@/$(GL_GNULIB_WCSPBRK)/g' \
+ -e 's/@''GNULIB_WCSSTR''@/$(GL_GNULIB_WCSSTR)/g' \
+ -e 's/@''GNULIB_WCSTOK''@/$(GL_GNULIB_WCSTOK)/g' \
+ -e 's/@''GNULIB_WCSWIDTH''@/$(GL_GNULIB_WCSWIDTH)/g' \
+ -e 's/@''GNULIB_WCSFTIME''@/$(GL_GNULIB_WCSFTIME)/g' \
+ -e 's/@''GNULIB_MDA_WCSDUP''@/$(GL_GNULIB_MDA_WCSDUP)/g' \
+ -e 's/@''GNULIB_FREE_POSIX''@/$(GL_GNULIB_FREE_POSIX)/g' \
< $(srcdir)/wchar.in.h | \
sed -e 's|@''HAVE_WINT_T''@|$(HAVE_WINT_T)|g' \
-e 's|@''HAVE_BTOWC''@|$(HAVE_BTOWC)|g' \
@@ -3269,6 +3292,7 @@ wchar.h: wchar.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H)
sed -e 's|@''REPLACE_MBSTATE_T''@|$(REPLACE_MBSTATE_T)|g' \
-e 's|@''REPLACE_BTOWC''@|$(REPLACE_BTOWC)|g' \
-e 's|@''REPLACE_WCTOB''@|$(REPLACE_WCTOB)|g' \
+ -e 's|@''REPLACE_FREE''@|$(REPLACE_FREE)|g' \
-e 's|@''REPLACE_MBSINIT''@|$(REPLACE_MBSINIT)|g' \
-e 's|@''REPLACE_MBRTOWC''@|$(REPLACE_MBRTOWC)|g' \
-e 's|@''REPLACE_MBRLEN''@|$(REPLACE_MBRLEN)|g' \
@@ -3283,9 +3307,9 @@ wchar.h: wchar.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H)
-e 's|@''REPLACE_WCSTOK''@|$(REPLACE_WCSTOK)|g' \
-e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
- -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
- } > $@-t && \
- mv $@-t $@
+ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+ > $@-t
+ $(AM_V_at)mv $@-t $@
MOSTLYCLEANFILES += wchar.h wchar.h-t
EXTRA_DIST += wchar.in.h
@@ -3300,23 +3324,22 @@ libgnu_a_SOURCES += wctype-h.c
# We need the following in order to create <wctype.h> when the system
# doesn't have one that works with the given compiler.
wctype.h: wctype.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H)
- $(AM_V_GEN)rm -f $@-t $@ && \
- { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
- sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's/@''HAVE_WCTYPE_H''@/$(HAVE_WCTYPE_H)/g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_WCTYPE_H''@|$(NEXT_WCTYPE_H)|g' \
-e 's/@''HAVE_CRTDEFS_H''@/$(HAVE_CRTDEFS_H)/g' \
- -e 's/@''GNULIB_OVERRIDES_WINT_T''@/$(GNULIB_OVERRIDES_WINT_T)/g' \
- -e 's/@''GNULIB_ISWBLANK''@/$(GNULIB_ISWBLANK)/g' \
- -e 's/@''GNULIB_ISWDIGIT''@/$(GNULIB_ISWDIGIT)/g' \
- -e 's/@''GNULIB_ISWXDIGIT''@/$(GNULIB_ISWXDIGIT)/g' \
- -e 's/@''GNULIB_WCTYPE''@/$(GNULIB_WCTYPE)/g' \
- -e 's/@''GNULIB_ISWCTYPE''@/$(GNULIB_ISWCTYPE)/g' \
- -e 's/@''GNULIB_WCTRANS''@/$(GNULIB_WCTRANS)/g' \
- -e 's/@''GNULIB_TOWCTRANS''@/$(GNULIB_TOWCTRANS)/g' \
+ -e 's/@''GNULIBHEADERS_OVERRIDE_WINT_T''@/$(GNULIBHEADERS_OVERRIDE_WINT_T)/g' \
+ -e 's/@''GNULIB_ISWBLANK''@/$(GL_GNULIB_ISWBLANK)/g' \
+ -e 's/@''GNULIB_ISWDIGIT''@/$(GL_GNULIB_ISWDIGIT)/g' \
+ -e 's/@''GNULIB_ISWXDIGIT''@/$(GL_GNULIB_ISWXDIGIT)/g' \
+ -e 's/@''GNULIB_WCTYPE''@/$(GL_GNULIB_WCTYPE)/g' \
+ -e 's/@''GNULIB_ISWCTYPE''@/$(GL_GNULIB_ISWCTYPE)/g' \
+ -e 's/@''GNULIB_WCTRANS''@/$(GL_GNULIB_WCTRANS)/g' \
+ -e 's/@''GNULIB_TOWCTRANS''@/$(GL_GNULIB_TOWCTRANS)/g' \
-e 's/@''HAVE_ISWBLANK''@/$(HAVE_ISWBLANK)/g' \
-e 's/@''HAVE_ISWCNTRL''@/$(HAVE_ISWCNTRL)/g' \
-e 's/@''HAVE_WCTYPE_T''@/$(HAVE_WCTYPE_T)/g' \
@@ -3329,9 +3352,8 @@ wctype.h: wctype.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H
-e 's/@''REPLACE_TOWLOWER''@/$(REPLACE_TOWLOWER)/g' \
-e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
- < $(srcdir)/wctype.in.h; \
- } > $@-t && \
- mv $@-t $@
+ $(srcdir)/wctype.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
MOSTLYCLEANFILES += wctype.h wctype.h-t
EXTRA_DIST += wctype.in.h
@@ -3340,55 +3362,59 @@ EXTRA_DIST += wctype.in.h
## begin gnulib module windows-mutex
+if GL_COND_OBJ_WINDOWS_MUTEX
+libgnu_a_SOURCES += windows-mutex.c
+endif
-EXTRA_DIST += windows-initguard.h windows-mutex.c windows-mutex.h
-
-EXTRA_libgnu_a_SOURCES += windows-mutex.c
+EXTRA_DIST += windows-initguard.h windows-mutex.h
## end gnulib module windows-mutex
## begin gnulib module windows-once
+if GL_COND_OBJ_WINDOWS_ONCE
+libgnu_a_SOURCES += windows-once.c
+endif
-EXTRA_DIST += windows-once.c windows-once.h
-
-EXTRA_libgnu_a_SOURCES += windows-once.c
+EXTRA_DIST += windows-once.h
## end gnulib module windows-once
## begin gnulib module windows-recmutex
+if GL_COND_OBJ_WINDOWS_RECMUTEX
+libgnu_a_SOURCES += windows-recmutex.c
+endif
-EXTRA_DIST += windows-initguard.h windows-recmutex.c windows-recmutex.h
-
-EXTRA_libgnu_a_SOURCES += windows-recmutex.c
+EXTRA_DIST += windows-initguard.h windows-recmutex.h
## end gnulib module windows-recmutex
## begin gnulib module windows-rwlock
+if GL_COND_OBJ_WINDOWS_RWLOCK
+libgnu_a_SOURCES += windows-rwlock.c
+endif
-EXTRA_DIST += windows-initguard.h windows-rwlock.c windows-rwlock.h
-
-EXTRA_libgnu_a_SOURCES += windows-rwlock.c
+EXTRA_DIST += windows-initguard.h windows-rwlock.h
## end gnulib module windows-rwlock
## begin gnulib module wmemchr
+if GL_COND_OBJ_WMEMCHR
+libgnu_a_SOURCES += wmemchr.c
+endif
-EXTRA_DIST += wmemchr-impl.h wmemchr.c
-
-EXTRA_libgnu_a_SOURCES += wmemchr.c
+EXTRA_DIST += wmemchr-impl.h
## end gnulib module wmemchr
## begin gnulib module wmempcpy
-
-EXTRA_DIST += wmempcpy.c
-
-EXTRA_libgnu_a_SOURCES += wmempcpy.c
+if GL_COND_OBJ_WMEMPCPY
+libgnu_a_SOURCES += wmempcpy.c
+endif
## end gnulib module wmempcpy
@@ -3407,3 +3433,7 @@ mostlyclean-local: mostlyclean-generic
fi; \
done; \
:
+distclean-local: distclean-gnulib-libobjs
+distclean-gnulib-libobjs:
+ -rm -f @gl_LIBOBJDEPS@
+maintainer-clean-local: distclean-gnulib-libobjs
diff --git a/gnulib/import/Makefile.in b/gnulib/import/Makefile.in
index 3393458f4e6..9893d17c28b 100644
--- a/gnulib/import/Makefile.in
+++ b/gnulib/import/Makefile.in
@@ -14,11 +14,11 @@
@SET_MAKE@
-# Copyright (C) 2002-2021 Free Software Foundation, Inc.
+# Copyright (C) 2002-2022 Free Software Foundation, Inc.
#
# This file is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
+# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This file is distributed in the hope that it will be useful,
@@ -176,6 +176,87 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
target_triplet = @target@
+@GL_COND_OBJ_ACCEPT_TRUE@am__append_1 = accept.c
+@GL_COND_OBJ_BIND_TRUE@am__append_2 = bind.c
+@GL_COND_OBJ_BTOWC_TRUE@am__append_3 = btowc.c
+@GL_COND_OBJ_CANONICALIZE_LGPL_TRUE@am__append_4 = canonicalize-lgpl.c
+@GL_COND_OBJ_CHDIR_LONG_TRUE@am__append_5 = chdir-long.c
+@GL_COND_OBJ_CHOWN_TRUE@am__append_6 = chown.c
+@GL_COND_OBJ_FCHOWN_STUB_TRUE@am__append_7 = fchown-stub.c
+@GL_COND_OBJ_CLOSE_TRUE@am__append_8 = close.c
+@GL_COND_OBJ_CLOSEDIR_TRUE@am__append_9 = closedir.c
+@GL_COND_OBJ_CONNECT_TRUE@am__append_10 = connect.c
+@GL_COND_OBJ_DIRFD_TRUE@am__append_11 = dirfd.c
+@GL_COND_OBJ_DUP_TRUE@am__append_12 = dup.c
+@GL_COND_OBJ_DUP2_TRUE@am__append_13 = dup2.c
+@GL_COND_OBJ_ERROR_TRUE@am__append_14 = error.c
+@GL_COND_OBJ_FCHDIR_TRUE@am__append_15 = fchdir.c
+@GL_COND_OBJ_FCNTL_TRUE@am__append_16 = fcntl.c
+@GL_COND_OBJ_FDOPENDIR_TRUE@am__append_17 = fdopendir.c
+@GL_COND_OBJ_FFS_TRUE@am__append_18 = ffs.c
+@GL_COND_OBJ_FLOAT_TRUE@am__append_19 = float.c
+@GL_COND_OBJ_ITOLD_TRUE@am__append_20 = itold.c
+@GL_COND_OBJ_FREE_TRUE@am__append_21 = free.c
+@GL_COND_OBJ_FSTAT_TRUE@am__append_22 = fstat.c
+@GL_COND_OBJ_FSTATAT_TRUE@am__append_23 = fstatat.c
+@GL_COND_OBJ_GETCWD_TRUE@am__append_24 = getcwd.c
+@GL_COND_OBJ_GETCWD_LGPL_TRUE@am__append_25 = getcwd-lgpl.c
+@GL_COND_OBJ_GETDELIM_TRUE@am__append_26 = getdelim.c
+@GL_COND_OBJ_GETDTABLESIZE_TRUE@am__append_27 = getdtablesize.c
+@GL_COND_OBJ_GETLINE_TRUE@am__append_28 = getline.c
+@GL_COND_OBJ_GETLOGIN_R_TRUE@am__append_29 = getlogin_r.c
+@GL_COND_OBJ_GETRANDOM_TRUE@am__append_30 = getrandom.c
+@GL_COND_OBJ_GETTIMEOFDAY_TRUE@am__append_31 = gettimeofday.c
+@GL_COND_OBJ_GLOB_TRUE@am__append_32 = glob.c globfree.c
+@GL_COND_OBJ_GLOB_PATTERN_P_TRUE@am__append_33 = glob_pattern_p.c
+@GL_COND_OBJ_INET_NTOP_TRUE@am__append_34 = inet_ntop.c
+@GL_COND_OBJ_ISBLANK_TRUE@am__append_35 = isblank.c
+@GL_COND_OBJ_LISTEN_TRUE@am__append_36 = listen.c
+@GL_COND_OBJ_LSTAT_TRUE@am__append_37 = lstat.c
+@GL_COND_OBJ_MBRTOWC_TRUE@am__append_38 = mbrtowc.c
+@GL_COND_OBJ_MBSINIT_TRUE@am__append_39 = mbsinit.c
+@GL_COND_OBJ_MBSRTOWCS_TRUE@am__append_40 = mbsrtowcs.c
+@GL_COND_OBJ_MBTOWC_TRUE@am__append_41 = mbtowc.c
+@GL_COND_OBJ_MEMCHR_TRUE@am__append_42 = memchr.c
+@GL_COND_OBJ_MEMPCPY_TRUE@am__append_43 = mempcpy.c
+@GL_COND_OBJ_MEMRCHR_TRUE@am__append_44 = memrchr.c
+@GL_COND_OBJ_MKDIR_TRUE@am__append_45 = mkdir.c
+@GL_COND_OBJ_MKDTEMP_TRUE@am__append_46 = mkdtemp.c
+@GL_COND_OBJ_MKOSTEMP_TRUE@am__append_47 = mkostemp.c
+@GL_COND_OBJ_MSVC_INVAL_TRUE@am__append_48 = msvc-inval.c
+@GL_COND_OBJ_MSVC_NOTHROW_TRUE@am__append_49 = msvc-nothrow.c
+@GL_COND_OBJ_OPEN_TRUE@am__append_50 = open.c
+@GL_COND_OBJ_OPENAT_TRUE@am__append_51 = openat.c
+@GL_COND_OBJ_OPENDIR_TRUE@am__append_52 = opendir.c
+@GL_COND_OBJ_PIPE_TRUE@am__append_53 = pipe.c
+@GL_COND_OBJ_RAWMEMCHR_TRUE@am__append_54 = rawmemchr.c
+@GL_COND_OBJ_READDIR_TRUE@am__append_55 = readdir.c
+@GL_COND_OBJ_READLINK_TRUE@am__append_56 = readlink.c
+@GL_COND_OBJ_RENAME_TRUE@am__append_57 = rename.c
+@GL_COND_OBJ_REWINDDIR_TRUE@am__append_58 = rewinddir.c
+@GL_COND_OBJ_RMDIR_TRUE@am__append_59 = rmdir.c
+@GL_COND_OBJ_SELECT_TRUE@am__append_60 = select.c
+@GL_COND_OBJ_SETENV_TRUE@am__append_61 = setenv.c
+@GL_COND_OBJ_SETLOCALE_LOCK_TRUE@am__append_62 = setlocale-lock.c
+@GL_COND_OBJ_SETSOCKOPT_TRUE@am__append_63 = setsockopt.c
+@GL_COND_OBJ_SOCKET_TRUE@am__append_64 = socket.c
+@GL_COND_OBJ_STAT_TRUE@am__append_65 = stat.c
+@GL_COND_OBJ_STDIO_READ_TRUE@am__append_66 = stdio-read.c
+@GL_COND_OBJ_STDIO_WRITE_TRUE@am__append_67 = stdio-write.c
+@GL_COND_OBJ_STRCHRNUL_TRUE@am__append_68 = strchrnul.c
+@GL_COND_OBJ_STRDUP_TRUE@am__append_69 = strdup.c
+@GL_COND_OBJ_STRERROR_TRUE@am__append_70 = strerror.c
+@GL_COND_OBJ_STRERROR_OVERRIDE_TRUE@am__append_71 = strerror-override.c
+@GL_COND_OBJ_STRNLEN_TRUE@am__append_72 = strnlen.c
+@GL_COND_OBJ_STRTOK_R_TRUE@am__append_73 = strtok_r.c
+@GL_COND_OBJ_TIME_R_TRUE@am__append_74 = time_r.c
+@GL_COND_OBJ_UNSETENV_TRUE@am__append_75 = unsetenv.c
+@GL_COND_OBJ_WINDOWS_MUTEX_TRUE@am__append_76 = windows-mutex.c
+@GL_COND_OBJ_WINDOWS_ONCE_TRUE@am__append_77 = windows-once.c
+@GL_COND_OBJ_WINDOWS_RECMUTEX_TRUE@am__append_78 = windows-recmutex.c
+@GL_COND_OBJ_WINDOWS_RWLOCK_TRUE@am__append_79 = windows-rwlock.c
+@GL_COND_OBJ_WMEMCHR_TRUE@am__append_80 = wmemchr.c
+@GL_COND_OBJ_WMEMPCPY_TRUE@am__append_81 = wmempcpy.c
subdir = import
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/../config/depstand.m4 \
@@ -197,7 +278,7 @@ am__aclocal_m4_deps = $(top_srcdir)/../config/depstand.m4 \
$(top_srcdir)/import/m4/close.m4 \
$(top_srcdir)/import/m4/closedir.m4 \
$(top_srcdir)/import/m4/codeset.m4 \
- $(top_srcdir)/import/m4/ctype.m4 \
+ $(top_srcdir)/import/m4/ctype_h.m4 \
$(top_srcdir)/import/m4/d-ino.m4 \
$(top_srcdir)/import/m4/d-type.m4 \
$(top_srcdir)/import/m4/dirent_h.m4 \
@@ -343,6 +424,7 @@ am__aclocal_m4_deps = $(top_srcdir)/../config/depstand.m4 \
$(top_srcdir)/import/m4/time_r.m4 \
$(top_srcdir)/import/m4/unistd-safer.m4 \
$(top_srcdir)/import/m4/unistd_h.m4 \
+ $(top_srcdir)/import/m4/vararrays.m4 \
$(top_srcdir)/import/m4/visibility.m4 \
$(top_srcdir)/import/m4/warn-on-use.m4 \
$(top_srcdir)/import/m4/wchar_h.m4 \
@@ -351,6 +433,7 @@ am__aclocal_m4_deps = $(top_srcdir)/../config/depstand.m4 \
$(top_srcdir)/import/m4/wint_t.m4 \
$(top_srcdir)/import/m4/wmemchr.m4 \
$(top_srcdir)/import/m4/wmempcpy.m4 \
+ $(top_srcdir)/import/m4/year2038.m4 \
$(top_srcdir)/import/m4/zzgnulib.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -366,24 +449,164 @@ am__v_AR_0 = @echo " AR " $@;
am__v_AR_1 =
libgnu_a_AR = $(AR) $(ARFLAGS)
am__DEPENDENCIES_1 =
+@GL_COND_OBJ_ACCEPT_TRUE@am__objects_1 = libgnu_a-accept.$(OBJEXT)
+@GL_COND_OBJ_BIND_TRUE@am__objects_2 = libgnu_a-bind.$(OBJEXT)
+@GL_COND_OBJ_BTOWC_TRUE@am__objects_3 = libgnu_a-btowc.$(OBJEXT)
+@GL_COND_OBJ_CANONICALIZE_LGPL_TRUE@am__objects_4 = libgnu_a-canonicalize-lgpl.$(OBJEXT)
+@GL_COND_OBJ_CHDIR_LONG_TRUE@am__objects_5 = \
+@GL_COND_OBJ_CHDIR_LONG_TRUE@ libgnu_a-chdir-long.$(OBJEXT)
+@GL_COND_OBJ_CHOWN_TRUE@am__objects_6 = libgnu_a-chown.$(OBJEXT)
+@GL_COND_OBJ_FCHOWN_STUB_TRUE@am__objects_7 = \
+@GL_COND_OBJ_FCHOWN_STUB_TRUE@ libgnu_a-fchown-stub.$(OBJEXT)
+@GL_COND_OBJ_CLOSE_TRUE@am__objects_8 = libgnu_a-close.$(OBJEXT)
+@GL_COND_OBJ_CLOSEDIR_TRUE@am__objects_9 = \
+@GL_COND_OBJ_CLOSEDIR_TRUE@ libgnu_a-closedir.$(OBJEXT)
+@GL_COND_OBJ_CONNECT_TRUE@am__objects_10 = libgnu_a-connect.$(OBJEXT)
+@GL_COND_OBJ_DIRFD_TRUE@am__objects_11 = libgnu_a-dirfd.$(OBJEXT)
+@GL_COND_OBJ_DUP_TRUE@am__objects_12 = libgnu_a-dup.$(OBJEXT)
+@GL_COND_OBJ_DUP2_TRUE@am__objects_13 = libgnu_a-dup2.$(OBJEXT)
+@GL_COND_OBJ_ERROR_TRUE@am__objects_14 = libgnu_a-error.$(OBJEXT)
+@GL_COND_OBJ_FCHDIR_TRUE@am__objects_15 = libgnu_a-fchdir.$(OBJEXT)
+@GL_COND_OBJ_FCNTL_TRUE@am__objects_16 = libgnu_a-fcntl.$(OBJEXT)
+@GL_COND_OBJ_FDOPENDIR_TRUE@am__objects_17 = \
+@GL_COND_OBJ_FDOPENDIR_TRUE@ libgnu_a-fdopendir.$(OBJEXT)
+@GL_COND_OBJ_FFS_TRUE@am__objects_18 = libgnu_a-ffs.$(OBJEXT)
+@GL_COND_OBJ_FLOAT_TRUE@am__objects_19 = libgnu_a-float.$(OBJEXT)
+@GL_COND_OBJ_ITOLD_TRUE@am__objects_20 = libgnu_a-itold.$(OBJEXT)
+@GL_COND_OBJ_FREE_TRUE@am__objects_21 = libgnu_a-free.$(OBJEXT)
+@GL_COND_OBJ_FSTAT_TRUE@am__objects_22 = libgnu_a-fstat.$(OBJEXT)
+@GL_COND_OBJ_FSTATAT_TRUE@am__objects_23 = libgnu_a-fstatat.$(OBJEXT)
+@GL_COND_OBJ_GETCWD_TRUE@am__objects_24 = libgnu_a-getcwd.$(OBJEXT)
+@GL_COND_OBJ_GETCWD_LGPL_TRUE@am__objects_25 = \
+@GL_COND_OBJ_GETCWD_LGPL_TRUE@ libgnu_a-getcwd-lgpl.$(OBJEXT)
+@GL_COND_OBJ_GETDELIM_TRUE@am__objects_26 = \
+@GL_COND_OBJ_GETDELIM_TRUE@ libgnu_a-getdelim.$(OBJEXT)
+@GL_COND_OBJ_GETDTABLESIZE_TRUE@am__objects_27 = libgnu_a-getdtablesize.$(OBJEXT)
+@GL_COND_OBJ_GETLINE_TRUE@am__objects_28 = libgnu_a-getline.$(OBJEXT)
+@GL_COND_OBJ_GETLOGIN_R_TRUE@am__objects_29 = \
+@GL_COND_OBJ_GETLOGIN_R_TRUE@ libgnu_a-getlogin_r.$(OBJEXT)
+@GL_COND_OBJ_GETRANDOM_TRUE@am__objects_30 = \
+@GL_COND_OBJ_GETRANDOM_TRUE@ libgnu_a-getrandom.$(OBJEXT)
+@GL_COND_OBJ_GETTIMEOFDAY_TRUE@am__objects_31 = libgnu_a-gettimeofday.$(OBJEXT)
+@GL_COND_OBJ_GLOB_TRUE@am__objects_32 = libgnu_a-glob.$(OBJEXT) \
+@GL_COND_OBJ_GLOB_TRUE@ libgnu_a-globfree.$(OBJEXT)
+@GL_COND_OBJ_GLOB_PATTERN_P_TRUE@am__objects_33 = libgnu_a-glob_pattern_p.$(OBJEXT)
+@GL_COND_OBJ_INET_NTOP_TRUE@am__objects_34 = \
+@GL_COND_OBJ_INET_NTOP_TRUE@ libgnu_a-inet_ntop.$(OBJEXT)
+@GL_COND_OBJ_ISBLANK_TRUE@am__objects_35 = libgnu_a-isblank.$(OBJEXT)
+@GL_COND_OBJ_LISTEN_TRUE@am__objects_36 = libgnu_a-listen.$(OBJEXT)
am__dirstamp = $(am__leading_dot)dirstamp
-am_libgnu_a_OBJECTS = openat-proc.$(OBJEXT) basename-lgpl.$(OBJEXT) \
- cloexec.$(OBJEXT) count-one-bits.$(OBJEXT) \
- dirname-lgpl.$(OBJEXT) stripslash.$(OBJEXT) exitfail.$(OBJEXT) \
- fd-hook.$(OBJEXT) fd-safer-flag.$(OBJEXT) \
- dup-safer-flag.$(OBJEXT) filenamecat-lgpl.$(OBJEXT) \
- getprogname.$(OBJEXT) hard-locale.$(OBJEXT) \
- localcharset.$(OBJEXT) glthread/lock.$(OBJEXT) \
- malloca.$(OBJEXT) math.$(OBJEXT) openat-die.$(OBJEXT) \
- save-cwd.$(OBJEXT) malloc/scratch_buffer_dupfree.$(OBJEXT) \
- malloc/scratch_buffer_grow.$(OBJEXT) \
- malloc/scratch_buffer_grow_preserve.$(OBJEXT) \
- malloc/scratch_buffer_set_array_size.$(OBJEXT) \
- setlocale_null.$(OBJEXT) sockets.$(OBJEXT) stat-time.$(OBJEXT) \
- strnlen1.$(OBJEXT) sys_socket.$(OBJEXT) tempname.$(OBJEXT) \
- glthread/threadlib.$(OBJEXT) unistd.$(OBJEXT) \
- dup-safer.$(OBJEXT) fd-safer.$(OBJEXT) pipe-safer.$(OBJEXT) \
- wctype-h.$(OBJEXT)
+@GL_COND_OBJ_LSTAT_TRUE@am__objects_37 = libgnu_a-lstat.$(OBJEXT)
+@GL_COND_OBJ_MBRTOWC_TRUE@am__objects_38 = libgnu_a-mbrtowc.$(OBJEXT)
+@GL_COND_OBJ_MBSINIT_TRUE@am__objects_39 = libgnu_a-mbsinit.$(OBJEXT)
+@GL_COND_OBJ_MBSRTOWCS_TRUE@am__objects_40 = \
+@GL_COND_OBJ_MBSRTOWCS_TRUE@ libgnu_a-mbsrtowcs.$(OBJEXT)
+@GL_COND_OBJ_MBTOWC_TRUE@am__objects_41 = libgnu_a-mbtowc.$(OBJEXT)
+@GL_COND_OBJ_MEMCHR_TRUE@am__objects_42 = libgnu_a-memchr.$(OBJEXT)
+@GL_COND_OBJ_MEMPCPY_TRUE@am__objects_43 = libgnu_a-mempcpy.$(OBJEXT)
+@GL_COND_OBJ_MEMRCHR_TRUE@am__objects_44 = libgnu_a-memrchr.$(OBJEXT)
+@GL_COND_OBJ_MKDIR_TRUE@am__objects_45 = libgnu_a-mkdir.$(OBJEXT)
+@GL_COND_OBJ_MKDTEMP_TRUE@am__objects_46 = libgnu_a-mkdtemp.$(OBJEXT)
+@GL_COND_OBJ_MKOSTEMP_TRUE@am__objects_47 = \
+@GL_COND_OBJ_MKOSTEMP_TRUE@ libgnu_a-mkostemp.$(OBJEXT)
+@GL_COND_OBJ_MSVC_INVAL_TRUE@am__objects_48 = \
+@GL_COND_OBJ_MSVC_INVAL_TRUE@ libgnu_a-msvc-inval.$(OBJEXT)
+@GL_COND_OBJ_MSVC_NOTHROW_TRUE@am__objects_49 = libgnu_a-msvc-nothrow.$(OBJEXT)
+@GL_COND_OBJ_OPEN_TRUE@am__objects_50 = libgnu_a-open.$(OBJEXT)
+@GL_COND_OBJ_OPENAT_TRUE@am__objects_51 = libgnu_a-openat.$(OBJEXT)
+@GL_COND_OBJ_OPENDIR_TRUE@am__objects_52 = libgnu_a-opendir.$(OBJEXT)
+@GL_COND_OBJ_PIPE_TRUE@am__objects_53 = libgnu_a-pipe.$(OBJEXT)
+@GL_COND_OBJ_RAWMEMCHR_TRUE@am__objects_54 = \
+@GL_COND_OBJ_RAWMEMCHR_TRUE@ libgnu_a-rawmemchr.$(OBJEXT)
+@GL_COND_OBJ_READDIR_TRUE@am__objects_55 = libgnu_a-readdir.$(OBJEXT)
+@GL_COND_OBJ_READLINK_TRUE@am__objects_56 = \
+@GL_COND_OBJ_READLINK_TRUE@ libgnu_a-readlink.$(OBJEXT)
+@GL_COND_OBJ_RENAME_TRUE@am__objects_57 = libgnu_a-rename.$(OBJEXT)
+@GL_COND_OBJ_REWINDDIR_TRUE@am__objects_58 = \
+@GL_COND_OBJ_REWINDDIR_TRUE@ libgnu_a-rewinddir.$(OBJEXT)
+@GL_COND_OBJ_RMDIR_TRUE@am__objects_59 = libgnu_a-rmdir.$(OBJEXT)
+@GL_COND_OBJ_SELECT_TRUE@am__objects_60 = libgnu_a-select.$(OBJEXT)
+@GL_COND_OBJ_SETENV_TRUE@am__objects_61 = libgnu_a-setenv.$(OBJEXT)
+@GL_COND_OBJ_SETLOCALE_LOCK_TRUE@am__objects_62 = libgnu_a-setlocale-lock.$(OBJEXT)
+@GL_COND_OBJ_SETSOCKOPT_TRUE@am__objects_63 = \
+@GL_COND_OBJ_SETSOCKOPT_TRUE@ libgnu_a-setsockopt.$(OBJEXT)
+@GL_COND_OBJ_SOCKET_TRUE@am__objects_64 = libgnu_a-socket.$(OBJEXT)
+@GL_COND_OBJ_STAT_TRUE@am__objects_65 = libgnu_a-stat.$(OBJEXT)
+@GL_COND_OBJ_STDIO_READ_TRUE@am__objects_66 = \
+@GL_COND_OBJ_STDIO_READ_TRUE@ libgnu_a-stdio-read.$(OBJEXT)
+@GL_COND_OBJ_STDIO_WRITE_TRUE@am__objects_67 = \
+@GL_COND_OBJ_STDIO_WRITE_TRUE@ libgnu_a-stdio-write.$(OBJEXT)
+@GL_COND_OBJ_STRCHRNUL_TRUE@am__objects_68 = \
+@GL_COND_OBJ_STRCHRNUL_TRUE@ libgnu_a-strchrnul.$(OBJEXT)
+@GL_COND_OBJ_STRDUP_TRUE@am__objects_69 = libgnu_a-strdup.$(OBJEXT)
+@GL_COND_OBJ_STRERROR_TRUE@am__objects_70 = \
+@GL_COND_OBJ_STRERROR_TRUE@ libgnu_a-strerror.$(OBJEXT)
+@GL_COND_OBJ_STRERROR_OVERRIDE_TRUE@am__objects_71 = libgnu_a-strerror-override.$(OBJEXT)
+@GL_COND_OBJ_STRNLEN_TRUE@am__objects_72 = libgnu_a-strnlen.$(OBJEXT)
+@GL_COND_OBJ_STRTOK_R_TRUE@am__objects_73 = \
+@GL_COND_OBJ_STRTOK_R_TRUE@ libgnu_a-strtok_r.$(OBJEXT)
+@GL_COND_OBJ_TIME_R_TRUE@am__objects_74 = libgnu_a-time_r.$(OBJEXT)
+@GL_COND_OBJ_UNSETENV_TRUE@am__objects_75 = \
+@GL_COND_OBJ_UNSETENV_TRUE@ libgnu_a-unsetenv.$(OBJEXT)
+@GL_COND_OBJ_WINDOWS_MUTEX_TRUE@am__objects_76 = libgnu_a-windows-mutex.$(OBJEXT)
+@GL_COND_OBJ_WINDOWS_ONCE_TRUE@am__objects_77 = libgnu_a-windows-once.$(OBJEXT)
+@GL_COND_OBJ_WINDOWS_RECMUTEX_TRUE@am__objects_78 = libgnu_a-windows-recmutex.$(OBJEXT)
+@GL_COND_OBJ_WINDOWS_RWLOCK_TRUE@am__objects_79 = libgnu_a-windows-rwlock.$(OBJEXT)
+@GL_COND_OBJ_WMEMCHR_TRUE@am__objects_80 = libgnu_a-wmemchr.$(OBJEXT)
+@GL_COND_OBJ_WMEMPCPY_TRUE@am__objects_81 = \
+@GL_COND_OBJ_WMEMPCPY_TRUE@ libgnu_a-wmempcpy.$(OBJEXT)
+am_libgnu_a_OBJECTS = $(am__objects_1) libgnu_a-openat-proc.$(OBJEXT) \
+ libgnu_a-basename-lgpl.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4) $(am__objects_5) \
+ $(am__objects_6) $(am__objects_7) libgnu_a-cloexec.$(OBJEXT) \
+ $(am__objects_8) $(am__objects_9) $(am__objects_10) \
+ libgnu_a-count-one-bits.$(OBJEXT) $(am__objects_11) \
+ libgnu_a-dirname-lgpl.$(OBJEXT) libgnu_a-stripslash.$(OBJEXT) \
+ $(am__objects_12) $(am__objects_13) $(am__objects_14) \
+ libgnu_a-exitfail.$(OBJEXT) $(am__objects_15) \
+ $(am__objects_16) libgnu_a-fd-hook.$(OBJEXT) \
+ libgnu_a-fd-safer-flag.$(OBJEXT) \
+ libgnu_a-dup-safer-flag.$(OBJEXT) $(am__objects_17) \
+ $(am__objects_18) libgnu_a-filenamecat-lgpl.$(OBJEXT) \
+ $(am__objects_19) $(am__objects_20) $(am__objects_21) \
+ $(am__objects_22) $(am__objects_23) $(am__objects_24) \
+ $(am__objects_25) $(am__objects_26) $(am__objects_27) \
+ $(am__objects_28) $(am__objects_29) \
+ libgnu_a-getprogname.$(OBJEXT) $(am__objects_30) \
+ $(am__objects_31) $(am__objects_32) $(am__objects_33) \
+ libgnu_a-hard-locale.$(OBJEXT) $(am__objects_34) \
+ $(am__objects_35) $(am__objects_36) \
+ libgnu_a-localcharset.$(OBJEXT) \
+ glthread/libgnu_a-lock.$(OBJEXT) $(am__objects_37) \
+ libgnu_a-malloca.$(OBJEXT) libgnu_a-math.$(OBJEXT) \
+ $(am__objects_38) $(am__objects_39) $(am__objects_40) \
+ $(am__objects_41) $(am__objects_42) $(am__objects_43) \
+ $(am__objects_44) $(am__objects_45) $(am__objects_46) \
+ $(am__objects_47) $(am__objects_48) $(am__objects_49) \
+ $(am__objects_50) $(am__objects_51) \
+ libgnu_a-openat-die.$(OBJEXT) $(am__objects_52) \
+ $(am__objects_53) $(am__objects_54) $(am__objects_55) \
+ $(am__objects_56) $(am__objects_57) $(am__objects_58) \
+ $(am__objects_59) libgnu_a-save-cwd.$(OBJEXT) \
+ malloc/libgnu_a-scratch_buffer_dupfree.$(OBJEXT) \
+ malloc/libgnu_a-scratch_buffer_grow.$(OBJEXT) \
+ malloc/libgnu_a-scratch_buffer_grow_preserve.$(OBJEXT) \
+ malloc/libgnu_a-scratch_buffer_set_array_size.$(OBJEXT) \
+ $(am__objects_60) $(am__objects_61) \
+ libgnu_a-setlocale_null.$(OBJEXT) $(am__objects_62) \
+ $(am__objects_63) $(am__objects_64) libgnu_a-sockets.$(OBJEXT) \
+ $(am__objects_65) libgnu_a-stat-time.$(OBJEXT) \
+ $(am__objects_66) $(am__objects_67) $(am__objects_68) \
+ $(am__objects_69) $(am__objects_70) $(am__objects_71) \
+ $(am__objects_72) libgnu_a-strnlen1.$(OBJEXT) \
+ $(am__objects_73) libgnu_a-sys_socket.$(OBJEXT) \
+ libgnu_a-tempname.$(OBJEXT) \
+ glthread/libgnu_a-threadlib.$(OBJEXT) $(am__objects_74) \
+ libgnu_a-unistd.$(OBJEXT) libgnu_a-dup-safer.$(OBJEXT) \
+ libgnu_a-fd-safer.$(OBJEXT) libgnu_a-pipe-safer.$(OBJEXT) \
+ $(am__objects_75) libgnu_a-wctype-h.$(OBJEXT) \
+ $(am__objects_76) $(am__objects_77) $(am__objects_78) \
+ $(am__objects_79) $(am__objects_80) $(am__objects_81)
libgnu_a_OBJECTS = $(am_libgnu_a_OBJECTS)
LTLIBRARIES = $(noinst_LTLIBRARIES)
AM_V_P = $(am__v_P_@AM_V@)
@@ -402,6 +625,10 @@ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/../depcomp
am__depfiles_maybe = depfiles
am__mv = mv -f
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
AM_V_CC = $(am__v_CC_@AM_V@)
@@ -499,471 +726,483 @@ FNMATCH_H = @FNMATCH_H@
FREXPL_LIBM = @FREXPL_LIBM@
FREXP_LIBM = @FREXP_LIBM@
GLOB_H = @GLOB_H@
-GNULIB_ACCEPT = @GNULIB_ACCEPT@
-GNULIB_ACCEPT4 = @GNULIB_ACCEPT4@
-GNULIB_ACCESS = @GNULIB_ACCESS@
-GNULIB_ACOSF = @GNULIB_ACOSF@
-GNULIB_ACOSL = @GNULIB_ACOSL@
-GNULIB_ALIGNED_ALLOC = @GNULIB_ALIGNED_ALLOC@
-GNULIB_ALPHASORT = @GNULIB_ALPHASORT@
-GNULIB_ASINF = @GNULIB_ASINF@
-GNULIB_ASINL = @GNULIB_ASINL@
-GNULIB_ATAN2F = @GNULIB_ATAN2F@
-GNULIB_ATANF = @GNULIB_ATANF@
-GNULIB_ATANL = @GNULIB_ATANL@
-GNULIB_ATOLL = @GNULIB_ATOLL@
-GNULIB_BIND = @GNULIB_BIND@
-GNULIB_BTOWC = @GNULIB_BTOWC@
-GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@
-GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@
-GNULIB_CBRT = @GNULIB_CBRT@
-GNULIB_CBRTF = @GNULIB_CBRTF@
-GNULIB_CBRTL = @GNULIB_CBRTL@
-GNULIB_CEIL = @GNULIB_CEIL@
-GNULIB_CEILF = @GNULIB_CEILF@
-GNULIB_CEILL = @GNULIB_CEILL@
-GNULIB_CHDIR = @GNULIB_CHDIR@
-GNULIB_CHOWN = @GNULIB_CHOWN@
-GNULIB_CLOSE = @GNULIB_CLOSE@
-GNULIB_CLOSEDIR = @GNULIB_CLOSEDIR@
-GNULIB_CONNECT = @GNULIB_CONNECT@
-GNULIB_COPYSIGN = @GNULIB_COPYSIGN@
-GNULIB_COPYSIGNF = @GNULIB_COPYSIGNF@
-GNULIB_COPYSIGNL = @GNULIB_COPYSIGNL@
-GNULIB_COPY_FILE_RANGE = @GNULIB_COPY_FILE_RANGE@
-GNULIB_COSF = @GNULIB_COSF@
-GNULIB_COSHF = @GNULIB_COSHF@
-GNULIB_COSL = @GNULIB_COSL@
-GNULIB_CREAT = @GNULIB_CREAT@
-GNULIB_CTIME = @GNULIB_CTIME@
-GNULIB_DIRFD = @GNULIB_DIRFD@
-GNULIB_DPRINTF = @GNULIB_DPRINTF@
-GNULIB_DUP = @GNULIB_DUP@
-GNULIB_DUP2 = @GNULIB_DUP2@
-GNULIB_DUP3 = @GNULIB_DUP3@
-GNULIB_DUPLOCALE = @GNULIB_DUPLOCALE@
-GNULIB_ENVIRON = @GNULIB_ENVIRON@
-GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@
-GNULIB_EXECL = @GNULIB_EXECL@
-GNULIB_EXECLE = @GNULIB_EXECLE@
-GNULIB_EXECLP = @GNULIB_EXECLP@
-GNULIB_EXECV = @GNULIB_EXECV@
-GNULIB_EXECVE = @GNULIB_EXECVE@
-GNULIB_EXECVP = @GNULIB_EXECVP@
-GNULIB_EXECVPE = @GNULIB_EXECVPE@
-GNULIB_EXP2 = @GNULIB_EXP2@
-GNULIB_EXP2F = @GNULIB_EXP2F@
-GNULIB_EXP2L = @GNULIB_EXP2L@
-GNULIB_EXPF = @GNULIB_EXPF@
-GNULIB_EXPL = @GNULIB_EXPL@
-GNULIB_EXPLICIT_BZERO = @GNULIB_EXPLICIT_BZERO@
-GNULIB_EXPM1 = @GNULIB_EXPM1@
-GNULIB_EXPM1F = @GNULIB_EXPM1F@
-GNULIB_EXPM1L = @GNULIB_EXPM1L@
-GNULIB_FABSF = @GNULIB_FABSF@
-GNULIB_FABSL = @GNULIB_FABSL@
-GNULIB_FACCESSAT = @GNULIB_FACCESSAT@
-GNULIB_FCHDIR = @GNULIB_FCHDIR@
-GNULIB_FCHMODAT = @GNULIB_FCHMODAT@
-GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@
-GNULIB_FCLOSE = @GNULIB_FCLOSE@
-GNULIB_FCNTL = @GNULIB_FCNTL@
-GNULIB_FDATASYNC = @GNULIB_FDATASYNC@
-GNULIB_FDOPEN = @GNULIB_FDOPEN@
-GNULIB_FDOPENDIR = @GNULIB_FDOPENDIR@
-GNULIB_FFLUSH = @GNULIB_FFLUSH@
-GNULIB_FFS = @GNULIB_FFS@
-GNULIB_FFSL = @GNULIB_FFSL@
-GNULIB_FFSLL = @GNULIB_FFSLL@
-GNULIB_FGETC = @GNULIB_FGETC@
-GNULIB_FGETS = @GNULIB_FGETS@
-GNULIB_FLOOR = @GNULIB_FLOOR@
-GNULIB_FLOORF = @GNULIB_FLOORF@
-GNULIB_FLOORL = @GNULIB_FLOORL@
-GNULIB_FMA = @GNULIB_FMA@
-GNULIB_FMAF = @GNULIB_FMAF@
-GNULIB_FMAL = @GNULIB_FMAL@
-GNULIB_FMOD = @GNULIB_FMOD@
-GNULIB_FMODF = @GNULIB_FMODF@
-GNULIB_FMODL = @GNULIB_FMODL@
-GNULIB_FNMATCH = @GNULIB_FNMATCH@
-GNULIB_FOPEN = @GNULIB_FOPEN@
-GNULIB_FPRINTF = @GNULIB_FPRINTF@
-GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@
-GNULIB_FPURGE = @GNULIB_FPURGE@
-GNULIB_FPUTC = @GNULIB_FPUTC@
-GNULIB_FPUTS = @GNULIB_FPUTS@
-GNULIB_FREAD = @GNULIB_FREAD@
-GNULIB_FREE_POSIX = @GNULIB_FREE_POSIX@
-GNULIB_FREOPEN = @GNULIB_FREOPEN@
-GNULIB_FREXP = @GNULIB_FREXP@
-GNULIB_FREXPF = @GNULIB_FREXPF@
-GNULIB_FREXPL = @GNULIB_FREXPL@
-GNULIB_FSCANF = @GNULIB_FSCANF@
-GNULIB_FSEEK = @GNULIB_FSEEK@
-GNULIB_FSEEKO = @GNULIB_FSEEKO@
-GNULIB_FSTAT = @GNULIB_FSTAT@
-GNULIB_FSTATAT = @GNULIB_FSTATAT@
-GNULIB_FSYNC = @GNULIB_FSYNC@
-GNULIB_FTELL = @GNULIB_FTELL@
-GNULIB_FTELLO = @GNULIB_FTELLO@
-GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@
-GNULIB_FUTIMENS = @GNULIB_FUTIMENS@
-GNULIB_FWRITE = @GNULIB_FWRITE@
-GNULIB_GETADDRINFO = @GNULIB_GETADDRINFO@
-GNULIB_GETC = @GNULIB_GETC@
-GNULIB_GETCHAR = @GNULIB_GETCHAR@
-GNULIB_GETCWD = @GNULIB_GETCWD@
-GNULIB_GETDELIM = @GNULIB_GETDELIM@
-GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@
-GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@
-GNULIB_GETENTROPY = @GNULIB_GETENTROPY@
-GNULIB_GETGROUPS = @GNULIB_GETGROUPS@
-GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@
-GNULIB_GETLINE = @GNULIB_GETLINE@
-GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@
-GNULIB_GETLOGIN = @GNULIB_GETLOGIN@
-GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@
-GNULIB_GETOPT_POSIX = @GNULIB_GETOPT_POSIX@
-GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@
-GNULIB_GETPASS = @GNULIB_GETPASS@
-GNULIB_GETPEERNAME = @GNULIB_GETPEERNAME@
-GNULIB_GETRANDOM = @GNULIB_GETRANDOM@
-GNULIB_GETSOCKNAME = @GNULIB_GETSOCKNAME@
-GNULIB_GETSOCKOPT = @GNULIB_GETSOCKOPT@
-GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@
+GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@
+GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@
+GL_GNULIB_ACCEPT = @GL_GNULIB_ACCEPT@
+GL_GNULIB_ACCEPT4 = @GL_GNULIB_ACCEPT4@
+GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@
+GL_GNULIB_ACOSF = @GL_GNULIB_ACOSF@
+GL_GNULIB_ACOSL = @GL_GNULIB_ACOSL@
+GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@
+GL_GNULIB_ALPHASORT = @GL_GNULIB_ALPHASORT@
+GL_GNULIB_ASINF = @GL_GNULIB_ASINF@
+GL_GNULIB_ASINL = @GL_GNULIB_ASINL@
+GL_GNULIB_ATAN2F = @GL_GNULIB_ATAN2F@
+GL_GNULIB_ATANF = @GL_GNULIB_ATANF@
+GL_GNULIB_ATANL = @GL_GNULIB_ATANL@
+GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@
+GL_GNULIB_BIND = @GL_GNULIB_BIND@
+GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@
+GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@
+GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@
+GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@
+GL_GNULIB_CBRT = @GL_GNULIB_CBRT@
+GL_GNULIB_CBRTF = @GL_GNULIB_CBRTF@
+GL_GNULIB_CBRTL = @GL_GNULIB_CBRTL@
+GL_GNULIB_CEIL = @GL_GNULIB_CEIL@
+GL_GNULIB_CEILF = @GL_GNULIB_CEILF@
+GL_GNULIB_CEILL = @GL_GNULIB_CEILL@
+GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@
+GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@
+GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@
+GL_GNULIB_CLOSEDIR = @GL_GNULIB_CLOSEDIR@
+GL_GNULIB_CONNECT = @GL_GNULIB_CONNECT@
+GL_GNULIB_COPYSIGN = @GL_GNULIB_COPYSIGN@
+GL_GNULIB_COPYSIGNF = @GL_GNULIB_COPYSIGNF@
+GL_GNULIB_COPYSIGNL = @GL_GNULIB_COPYSIGNL@
+GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@
+GL_GNULIB_COSF = @GL_GNULIB_COSF@
+GL_GNULIB_COSHF = @GL_GNULIB_COSHF@
+GL_GNULIB_COSL = @GL_GNULIB_COSL@
+GL_GNULIB_CREAT = @GL_GNULIB_CREAT@
+GL_GNULIB_CTIME = @GL_GNULIB_CTIME@
+GL_GNULIB_DIRFD = @GL_GNULIB_DIRFD@
+GL_GNULIB_DPRINTF = @GL_GNULIB_DPRINTF@
+GL_GNULIB_DUP = @GL_GNULIB_DUP@
+GL_GNULIB_DUP2 = @GL_GNULIB_DUP2@
+GL_GNULIB_DUP3 = @GL_GNULIB_DUP3@
+GL_GNULIB_DUPLOCALE = @GL_GNULIB_DUPLOCALE@
+GL_GNULIB_ENVIRON = @GL_GNULIB_ENVIRON@
+GL_GNULIB_EUIDACCESS = @GL_GNULIB_EUIDACCESS@
+GL_GNULIB_EXECL = @GL_GNULIB_EXECL@
+GL_GNULIB_EXECLE = @GL_GNULIB_EXECLE@
+GL_GNULIB_EXECLP = @GL_GNULIB_EXECLP@
+GL_GNULIB_EXECV = @GL_GNULIB_EXECV@
+GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@
+GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@
+GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@
+GL_GNULIB_EXP2 = @GL_GNULIB_EXP2@
+GL_GNULIB_EXP2F = @GL_GNULIB_EXP2F@
+GL_GNULIB_EXP2L = @GL_GNULIB_EXP2L@
+GL_GNULIB_EXPF = @GL_GNULIB_EXPF@
+GL_GNULIB_EXPL = @GL_GNULIB_EXPL@
+GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@
+GL_GNULIB_EXPM1 = @GL_GNULIB_EXPM1@
+GL_GNULIB_EXPM1F = @GL_GNULIB_EXPM1F@
+GL_GNULIB_EXPM1L = @GL_GNULIB_EXPM1L@
+GL_GNULIB_FABSF = @GL_GNULIB_FABSF@
+GL_GNULIB_FABSL = @GL_GNULIB_FABSL@
+GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@
+GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@
+GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@
+GL_GNULIB_FCHOWNAT = @GL_GNULIB_FCHOWNAT@
+GL_GNULIB_FCLOSE = @GL_GNULIB_FCLOSE@
+GL_GNULIB_FCNTL = @GL_GNULIB_FCNTL@
+GL_GNULIB_FDATASYNC = @GL_GNULIB_FDATASYNC@
+GL_GNULIB_FDOPEN = @GL_GNULIB_FDOPEN@
+GL_GNULIB_FDOPENDIR = @GL_GNULIB_FDOPENDIR@
+GL_GNULIB_FFLUSH = @GL_GNULIB_FFLUSH@
+GL_GNULIB_FFS = @GL_GNULIB_FFS@
+GL_GNULIB_FFSL = @GL_GNULIB_FFSL@
+GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@
+GL_GNULIB_FGETC = @GL_GNULIB_FGETC@
+GL_GNULIB_FGETS = @GL_GNULIB_FGETS@
+GL_GNULIB_FLOOR = @GL_GNULIB_FLOOR@
+GL_GNULIB_FLOORF = @GL_GNULIB_FLOORF@
+GL_GNULIB_FLOORL = @GL_GNULIB_FLOORL@
+GL_GNULIB_FMA = @GL_GNULIB_FMA@
+GL_GNULIB_FMAF = @GL_GNULIB_FMAF@
+GL_GNULIB_FMAL = @GL_GNULIB_FMAL@
+GL_GNULIB_FMOD = @GL_GNULIB_FMOD@
+GL_GNULIB_FMODF = @GL_GNULIB_FMODF@
+GL_GNULIB_FMODL = @GL_GNULIB_FMODL@
+GL_GNULIB_FNMATCH = @GL_GNULIB_FNMATCH@
+GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@
+GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@
+GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@
+GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@
+GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@
+GL_GNULIB_FPUTC = @GL_GNULIB_FPUTC@
+GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@
+GL_GNULIB_FREAD = @GL_GNULIB_FREAD@
+GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@
+GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@
+GL_GNULIB_FREXP = @GL_GNULIB_FREXP@
+GL_GNULIB_FREXPF = @GL_GNULIB_FREXPF@
+GL_GNULIB_FREXPL = @GL_GNULIB_FREXPL@
+GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@
+GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@
+GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@
+GL_GNULIB_FSTAT = @GL_GNULIB_FSTAT@
+GL_GNULIB_FSTATAT = @GL_GNULIB_FSTATAT@
+GL_GNULIB_FSYNC = @GL_GNULIB_FSYNC@
+GL_GNULIB_FTELL = @GL_GNULIB_FTELL@
+GL_GNULIB_FTELLO = @GL_GNULIB_FTELLO@
+GL_GNULIB_FTRUNCATE = @GL_GNULIB_FTRUNCATE@
+GL_GNULIB_FUTIMENS = @GL_GNULIB_FUTIMENS@
+GL_GNULIB_FWRITE = @GL_GNULIB_FWRITE@
+GL_GNULIB_GETADDRINFO = @GL_GNULIB_GETADDRINFO@
+GL_GNULIB_GETC = @GL_GNULIB_GETC@
+GL_GNULIB_GETCHAR = @GL_GNULIB_GETCHAR@
+GL_GNULIB_GETCWD = @GL_GNULIB_GETCWD@
+GL_GNULIB_GETDELIM = @GL_GNULIB_GETDELIM@
+GL_GNULIB_GETDOMAINNAME = @GL_GNULIB_GETDOMAINNAME@
+GL_GNULIB_GETDTABLESIZE = @GL_GNULIB_GETDTABLESIZE@
+GL_GNULIB_GETENTROPY = @GL_GNULIB_GETENTROPY@
+GL_GNULIB_GETGROUPS = @GL_GNULIB_GETGROUPS@
+GL_GNULIB_GETHOSTNAME = @GL_GNULIB_GETHOSTNAME@
+GL_GNULIB_GETLINE = @GL_GNULIB_GETLINE@
+GL_GNULIB_GETLOADAVG = @GL_GNULIB_GETLOADAVG@
+GL_GNULIB_GETLOGIN = @GL_GNULIB_GETLOGIN@
+GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@
+GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@
+GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@
+GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@
+GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@
+GL_GNULIB_GETPEERNAME = @GL_GNULIB_GETPEERNAME@
+GL_GNULIB_GETRANDOM = @GL_GNULIB_GETRANDOM@
+GL_GNULIB_GETSOCKNAME = @GL_GNULIB_GETSOCKNAME@
+GL_GNULIB_GETSOCKOPT = @GL_GNULIB_GETSOCKOPT@
+GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@
+GL_GNULIB_GETTIMEOFDAY = @GL_GNULIB_GETTIMEOFDAY@
+GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@
+GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@
+GL_GNULIB_GLOB = @GL_GNULIB_GLOB@
+GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@
+GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@
+GL_GNULIB_HYPOT = @GL_GNULIB_HYPOT@
+GL_GNULIB_HYPOTF = @GL_GNULIB_HYPOTF@
+GL_GNULIB_HYPOTL = @GL_GNULIB_HYPOTL@
+GL_GNULIB_ILOGB = @GL_GNULIB_ILOGB@
+GL_GNULIB_ILOGBF = @GL_GNULIB_ILOGBF@
+GL_GNULIB_ILOGBL = @GL_GNULIB_ILOGBL@
+GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@
+GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@
+GL_GNULIB_INET_NTOP = @GL_GNULIB_INET_NTOP@
+GL_GNULIB_INET_PTON = @GL_GNULIB_INET_PTON@
+GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@
+GL_GNULIB_ISBLANK = @GL_GNULIB_ISBLANK@
+GL_GNULIB_ISFINITE = @GL_GNULIB_ISFINITE@
+GL_GNULIB_ISINF = @GL_GNULIB_ISINF@
+GL_GNULIB_ISNAN = @GL_GNULIB_ISNAN@
+GL_GNULIB_ISNAND = @GL_GNULIB_ISNAND@
+GL_GNULIB_ISNANF = @GL_GNULIB_ISNANF@
+GL_GNULIB_ISNANL = @GL_GNULIB_ISNANL@
+GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@
+GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@
+GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@
+GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@
+GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@
+GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@
+GL_GNULIB_LDEXPF = @GL_GNULIB_LDEXPF@
+GL_GNULIB_LDEXPL = @GL_GNULIB_LDEXPL@
+GL_GNULIB_LINK = @GL_GNULIB_LINK@
+GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@
+GL_GNULIB_LISTEN = @GL_GNULIB_LISTEN@
+GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@
+GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@
+GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@
+GL_GNULIB_LOG = @GL_GNULIB_LOG@
+GL_GNULIB_LOG10 = @GL_GNULIB_LOG10@
+GL_GNULIB_LOG10F = @GL_GNULIB_LOG10F@
+GL_GNULIB_LOG10L = @GL_GNULIB_LOG10L@
+GL_GNULIB_LOG1P = @GL_GNULIB_LOG1P@
+GL_GNULIB_LOG1PF = @GL_GNULIB_LOG1PF@
+GL_GNULIB_LOG1PL = @GL_GNULIB_LOG1PL@
+GL_GNULIB_LOG2 = @GL_GNULIB_LOG2@
+GL_GNULIB_LOG2F = @GL_GNULIB_LOG2F@
+GL_GNULIB_LOG2L = @GL_GNULIB_LOG2L@
+GL_GNULIB_LOGB = @GL_GNULIB_LOGB@
+GL_GNULIB_LOGBF = @GL_GNULIB_LOGBF@
+GL_GNULIB_LOGBL = @GL_GNULIB_LOGBL@
+GL_GNULIB_LOGF = @GL_GNULIB_LOGF@
+GL_GNULIB_LOGL = @GL_GNULIB_LOGL@
+GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@
+GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@
+GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@
+GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@
+GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@
+GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@
+GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@
+GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@
+GL_GNULIB_MBSCHR = @GL_GNULIB_MBSCHR@
+GL_GNULIB_MBSCSPN = @GL_GNULIB_MBSCSPN@
+GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@
+GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@
+GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@
+GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@
+GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@
+GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@
+GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@
+GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@
+GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@
+GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@
+GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@
+GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@
+GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@
+GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@
+GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@
+GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@
+GL_GNULIB_MDA_CHMOD = @GL_GNULIB_MDA_CHMOD@
+GL_GNULIB_MDA_CLOSE = @GL_GNULIB_MDA_CLOSE@
+GL_GNULIB_MDA_CREAT = @GL_GNULIB_MDA_CREAT@
+GL_GNULIB_MDA_DUP = @GL_GNULIB_MDA_DUP@
+GL_GNULIB_MDA_DUP2 = @GL_GNULIB_MDA_DUP2@
+GL_GNULIB_MDA_ECVT = @GL_GNULIB_MDA_ECVT@
+GL_GNULIB_MDA_EXECL = @GL_GNULIB_MDA_EXECL@
+GL_GNULIB_MDA_EXECLE = @GL_GNULIB_MDA_EXECLE@
+GL_GNULIB_MDA_EXECLP = @GL_GNULIB_MDA_EXECLP@
+GL_GNULIB_MDA_EXECV = @GL_GNULIB_MDA_EXECV@
+GL_GNULIB_MDA_EXECVE = @GL_GNULIB_MDA_EXECVE@
+GL_GNULIB_MDA_EXECVP = @GL_GNULIB_MDA_EXECVP@
+GL_GNULIB_MDA_EXECVPE = @GL_GNULIB_MDA_EXECVPE@
+GL_GNULIB_MDA_FCLOSEALL = @GL_GNULIB_MDA_FCLOSEALL@
+GL_GNULIB_MDA_FCVT = @GL_GNULIB_MDA_FCVT@
+GL_GNULIB_MDA_FDOPEN = @GL_GNULIB_MDA_FDOPEN@
+GL_GNULIB_MDA_FILENO = @GL_GNULIB_MDA_FILENO@
+GL_GNULIB_MDA_GCVT = @GL_GNULIB_MDA_GCVT@
+GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@
+GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@
+GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@
+GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@
+GL_GNULIB_MDA_J0 = @GL_GNULIB_MDA_J0@
+GL_GNULIB_MDA_J1 = @GL_GNULIB_MDA_J1@
+GL_GNULIB_MDA_JN = @GL_GNULIB_MDA_JN@
+GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@
+GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@
+GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@
+GL_GNULIB_MDA_MKTEMP = @GL_GNULIB_MDA_MKTEMP@
+GL_GNULIB_MDA_OPEN = @GL_GNULIB_MDA_OPEN@
+GL_GNULIB_MDA_PUTENV = @GL_GNULIB_MDA_PUTENV@
+GL_GNULIB_MDA_PUTW = @GL_GNULIB_MDA_PUTW@
+GL_GNULIB_MDA_READ = @GL_GNULIB_MDA_READ@
+GL_GNULIB_MDA_RMDIR = @GL_GNULIB_MDA_RMDIR@
+GL_GNULIB_MDA_STRDUP = @GL_GNULIB_MDA_STRDUP@
+GL_GNULIB_MDA_SWAB = @GL_GNULIB_MDA_SWAB@
+GL_GNULIB_MDA_TEMPNAM = @GL_GNULIB_MDA_TEMPNAM@
+GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@
+GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@
+GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@
+GL_GNULIB_MDA_WCSDUP = @GL_GNULIB_MDA_WCSDUP@
+GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@
+GL_GNULIB_MDA_Y0 = @GL_GNULIB_MDA_Y0@
+GL_GNULIB_MDA_Y1 = @GL_GNULIB_MDA_Y1@
+GL_GNULIB_MDA_YN = @GL_GNULIB_MDA_YN@
+GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@
+GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@
+GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@
+GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@
+GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@
+GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@
+GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@
+GL_GNULIB_MKFIFO = @GL_GNULIB_MKFIFO@
+GL_GNULIB_MKFIFOAT = @GL_GNULIB_MKFIFOAT@
+GL_GNULIB_MKNOD = @GL_GNULIB_MKNOD@
+GL_GNULIB_MKNODAT = @GL_GNULIB_MKNODAT@
+GL_GNULIB_MKOSTEMP = @GL_GNULIB_MKOSTEMP@
+GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@
+GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@
+GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@
+GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@
+GL_GNULIB_MODF = @GL_GNULIB_MODF@
+GL_GNULIB_MODFF = @GL_GNULIB_MODFF@
+GL_GNULIB_MODFL = @GL_GNULIB_MODFL@
+GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@
+GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@
+GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@
+GL_GNULIB_OBSTACK_PRINTF_POSIX = @GL_GNULIB_OBSTACK_PRINTF_POSIX@
+GL_GNULIB_OPEN = @GL_GNULIB_OPEN@
+GL_GNULIB_OPENAT = @GL_GNULIB_OPENAT@
+GL_GNULIB_OPENDIR = @GL_GNULIB_OPENDIR@
+GL_GNULIB_OVERRIDES_STRUCT_STAT = @GL_GNULIB_OVERRIDES_STRUCT_STAT@
+GL_GNULIB_PCLOSE = @GL_GNULIB_PCLOSE@
+GL_GNULIB_PERROR = @GL_GNULIB_PERROR@
+GL_GNULIB_PIPE = @GL_GNULIB_PIPE@
+GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@
+GL_GNULIB_POPEN = @GL_GNULIB_POPEN@
+GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@
+GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@
+GL_GNULIB_POWF = @GL_GNULIB_POWF@
+GL_GNULIB_PREAD = @GL_GNULIB_PREAD@
+GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@
+GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@
+GL_GNULIB_PSELECT = @GL_GNULIB_PSELECT@
+GL_GNULIB_PTHREAD_SIGMASK = @GL_GNULIB_PTHREAD_SIGMASK@
+GL_GNULIB_PTSNAME = @GL_GNULIB_PTSNAME@
+GL_GNULIB_PTSNAME_R = @GL_GNULIB_PTSNAME_R@
+GL_GNULIB_PUTC = @GL_GNULIB_PUTC@
+GL_GNULIB_PUTCHAR = @GL_GNULIB_PUTCHAR@
+GL_GNULIB_PUTENV = @GL_GNULIB_PUTENV@
+GL_GNULIB_PUTS = @GL_GNULIB_PUTS@
+GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@
+GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@
+GL_GNULIB_RAISE = @GL_GNULIB_RAISE@
+GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@
+GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@
+GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@
+GL_GNULIB_READ = @GL_GNULIB_READ@
+GL_GNULIB_READDIR = @GL_GNULIB_READDIR@
+GL_GNULIB_READLINK = @GL_GNULIB_READLINK@
+GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@
+GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@
+GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@
+GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@
+GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@
+GL_GNULIB_RECV = @GL_GNULIB_RECV@
+GL_GNULIB_RECVFROM = @GL_GNULIB_RECVFROM@
+GL_GNULIB_REMAINDER = @GL_GNULIB_REMAINDER@
+GL_GNULIB_REMAINDERF = @GL_GNULIB_REMAINDERF@
+GL_GNULIB_REMAINDERL = @GL_GNULIB_REMAINDERL@
+GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@
+GL_GNULIB_RENAME = @GL_GNULIB_RENAME@
+GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@
+GL_GNULIB_REWINDDIR = @GL_GNULIB_REWINDDIR@
+GL_GNULIB_RINT = @GL_GNULIB_RINT@
+GL_GNULIB_RINTF = @GL_GNULIB_RINTF@
+GL_GNULIB_RINTL = @GL_GNULIB_RINTL@
+GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@
+GL_GNULIB_ROUND = @GL_GNULIB_ROUND@
+GL_GNULIB_ROUNDF = @GL_GNULIB_ROUNDF@
+GL_GNULIB_ROUNDL = @GL_GNULIB_ROUNDL@
+GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@
+GL_GNULIB_SCANDIR = @GL_GNULIB_SCANDIR@
+GL_GNULIB_SCANF = @GL_GNULIB_SCANF@
+GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@
+GL_GNULIB_SELECT = @GL_GNULIB_SELECT@
+GL_GNULIB_SEND = @GL_GNULIB_SEND@
+GL_GNULIB_SENDTO = @GL_GNULIB_SENDTO@
+GL_GNULIB_SETENV = @GL_GNULIB_SETENV@
+GL_GNULIB_SETHOSTNAME = @GL_GNULIB_SETHOSTNAME@
+GL_GNULIB_SETLOCALE = @GL_GNULIB_SETLOCALE@
+GL_GNULIB_SETLOCALE_NULL = @GL_GNULIB_SETLOCALE_NULL@
+GL_GNULIB_SETSOCKOPT = @GL_GNULIB_SETSOCKOPT@
+GL_GNULIB_SHUTDOWN = @GL_GNULIB_SHUTDOWN@
+GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@
+GL_GNULIB_SIGACTION = @GL_GNULIB_SIGACTION@
+GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@
+GL_GNULIB_SIGNAL_H_SIGPIPE = @GL_GNULIB_SIGNAL_H_SIGPIPE@
+GL_GNULIB_SIGNBIT = @GL_GNULIB_SIGNBIT@
+GL_GNULIB_SIGPROCMASK = @GL_GNULIB_SIGPROCMASK@
+GL_GNULIB_SINF = @GL_GNULIB_SINF@
+GL_GNULIB_SINHF = @GL_GNULIB_SINHF@
+GL_GNULIB_SINL = @GL_GNULIB_SINL@
+GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@
+GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@
+GL_GNULIB_SOCKET = @GL_GNULIB_SOCKET@
+GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@
+GL_GNULIB_SQRTF = @GL_GNULIB_SQRTF@
+GL_GNULIB_SQRTL = @GL_GNULIB_SQRTL@
+GL_GNULIB_STAT = @GL_GNULIB_STAT@
+GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@
+GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@
+GL_GNULIB_STPCPY = @GL_GNULIB_STPCPY@
+GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@
+GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@
+GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@
+GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@
+GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@
+GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@
+GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@
+GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@
+GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@
+GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@
+GL_GNULIB_STRNLEN = @GL_GNULIB_STRNLEN@
+GL_GNULIB_STRPBRK = @GL_GNULIB_STRPBRK@
+GL_GNULIB_STRPTIME = @GL_GNULIB_STRPTIME@
+GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@
+GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@
+GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@
+GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@
+GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@
+GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@
+GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@
+GL_GNULIB_STRTOLD = @GL_GNULIB_STRTOLD@
+GL_GNULIB_STRTOLL = @GL_GNULIB_STRTOLL@
+GL_GNULIB_STRTOUL = @GL_GNULIB_STRTOUL@
+GL_GNULIB_STRTOULL = @GL_GNULIB_STRTOULL@
+GL_GNULIB_STRTOUMAX = @GL_GNULIB_STRTOUMAX@
+GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@
+GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@
+GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@
+GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@
+GL_GNULIB_TANF = @GL_GNULIB_TANF@
+GL_GNULIB_TANHF = @GL_GNULIB_TANHF@
+GL_GNULIB_TANL = @GL_GNULIB_TANL@
+GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@
+GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@
+GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@
+GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@
+GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@
+GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@
+GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@
+GL_GNULIB_TRUNC = @GL_GNULIB_TRUNC@
+GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@
+GL_GNULIB_TRUNCF = @GL_GNULIB_TRUNCF@
+GL_GNULIB_TRUNCL = @GL_GNULIB_TRUNCL@
+GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@
+GL_GNULIB_TZSET = @GL_GNULIB_TZSET@
+GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@
+GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@
+GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@
+GL_GNULIB_UNLINK = @GL_GNULIB_UNLINK@
+GL_GNULIB_UNLINKAT = @GL_GNULIB_UNLINKAT@
+GL_GNULIB_UNLOCKPT = @GL_GNULIB_UNLOCKPT@
+GL_GNULIB_UNSETENV = @GL_GNULIB_UNSETENV@
+GL_GNULIB_USLEEP = @GL_GNULIB_USLEEP@
+GL_GNULIB_UTIMENSAT = @GL_GNULIB_UTIMENSAT@
+GL_GNULIB_VASPRINTF = @GL_GNULIB_VASPRINTF@
+GL_GNULIB_VDPRINTF = @GL_GNULIB_VDPRINTF@
+GL_GNULIB_VFPRINTF = @GL_GNULIB_VFPRINTF@
+GL_GNULIB_VFPRINTF_POSIX = @GL_GNULIB_VFPRINTF_POSIX@
+GL_GNULIB_VFSCANF = @GL_GNULIB_VFSCANF@
+GL_GNULIB_VPRINTF = @GL_GNULIB_VPRINTF@
+GL_GNULIB_VPRINTF_POSIX = @GL_GNULIB_VPRINTF_POSIX@
+GL_GNULIB_VSCANF = @GL_GNULIB_VSCANF@
+GL_GNULIB_VSNPRINTF = @GL_GNULIB_VSNPRINTF@
+GL_GNULIB_VSPRINTF_POSIX = @GL_GNULIB_VSPRINTF_POSIX@
+GL_GNULIB_WAITPID = @GL_GNULIB_WAITPID@
+GL_GNULIB_WCPCPY = @GL_GNULIB_WCPCPY@
+GL_GNULIB_WCPNCPY = @GL_GNULIB_WCPNCPY@
+GL_GNULIB_WCRTOMB = @GL_GNULIB_WCRTOMB@
+GL_GNULIB_WCSCASECMP = @GL_GNULIB_WCSCASECMP@
+GL_GNULIB_WCSCAT = @GL_GNULIB_WCSCAT@
+GL_GNULIB_WCSCHR = @GL_GNULIB_WCSCHR@
+GL_GNULIB_WCSCMP = @GL_GNULIB_WCSCMP@
+GL_GNULIB_WCSCOLL = @GL_GNULIB_WCSCOLL@
+GL_GNULIB_WCSCPY = @GL_GNULIB_WCSCPY@
+GL_GNULIB_WCSCSPN = @GL_GNULIB_WCSCSPN@
+GL_GNULIB_WCSDUP = @GL_GNULIB_WCSDUP@
+GL_GNULIB_WCSFTIME = @GL_GNULIB_WCSFTIME@
+GL_GNULIB_WCSLEN = @GL_GNULIB_WCSLEN@
+GL_GNULIB_WCSNCASECMP = @GL_GNULIB_WCSNCASECMP@
+GL_GNULIB_WCSNCAT = @GL_GNULIB_WCSNCAT@
+GL_GNULIB_WCSNCMP = @GL_GNULIB_WCSNCMP@
+GL_GNULIB_WCSNCPY = @GL_GNULIB_WCSNCPY@
+GL_GNULIB_WCSNLEN = @GL_GNULIB_WCSNLEN@
+GL_GNULIB_WCSNRTOMBS = @GL_GNULIB_WCSNRTOMBS@
+GL_GNULIB_WCSPBRK = @GL_GNULIB_WCSPBRK@
+GL_GNULIB_WCSRCHR = @GL_GNULIB_WCSRCHR@
+GL_GNULIB_WCSRTOMBS = @GL_GNULIB_WCSRTOMBS@
+GL_GNULIB_WCSSPN = @GL_GNULIB_WCSSPN@
+GL_GNULIB_WCSSTR = @GL_GNULIB_WCSSTR@
+GL_GNULIB_WCSTOK = @GL_GNULIB_WCSTOK@
+GL_GNULIB_WCSWIDTH = @GL_GNULIB_WCSWIDTH@
+GL_GNULIB_WCSXFRM = @GL_GNULIB_WCSXFRM@
+GL_GNULIB_WCTOB = @GL_GNULIB_WCTOB@
+GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@
+GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@
+GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@
+GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@
+GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@
+GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@
+GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@
+GL_GNULIB_WMEMMOVE = @GL_GNULIB_WMEMMOVE@
+GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@
+GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@
+GL_GNULIB_WRITE = @GL_GNULIB_WRITE@
+GL_GNULIB__EXIT = @GL_GNULIB__EXIT@
+GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@
GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@
-GNULIB_GETUMASK = @GNULIB_GETUMASK@
-GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@
-GNULIB_GLOB = @GNULIB_GLOB@
-GNULIB_GRANTPT = @GNULIB_GRANTPT@
-GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@
-GNULIB_HYPOT = @GNULIB_HYPOT@
-GNULIB_HYPOTF = @GNULIB_HYPOTF@
-GNULIB_HYPOTL = @GNULIB_HYPOTL@
-GNULIB_ILOGB = @GNULIB_ILOGB@
-GNULIB_ILOGBF = @GNULIB_ILOGBF@
-GNULIB_ILOGBL = @GNULIB_ILOGBL@
-GNULIB_IMAXABS = @GNULIB_IMAXABS@
-GNULIB_IMAXDIV = @GNULIB_IMAXDIV@
-GNULIB_INET_NTOP = @GNULIB_INET_NTOP@
-GNULIB_INET_PTON = @GNULIB_INET_PTON@
-GNULIB_ISATTY = @GNULIB_ISATTY@
-GNULIB_ISBLANK = @GNULIB_ISBLANK@
-GNULIB_ISFINITE = @GNULIB_ISFINITE@
-GNULIB_ISINF = @GNULIB_ISINF@
-GNULIB_ISNAN = @GNULIB_ISNAN@
-GNULIB_ISNAND = @GNULIB_ISNAND@
-GNULIB_ISNANF = @GNULIB_ISNANF@
-GNULIB_ISNANL = @GNULIB_ISNANL@
-GNULIB_ISWBLANK = @GNULIB_ISWBLANK@
-GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@
-GNULIB_ISWDIGIT = @GNULIB_ISWDIGIT@
-GNULIB_ISWXDIGIT = @GNULIB_ISWXDIGIT@
-GNULIB_LCHMOD = @GNULIB_LCHMOD@
-GNULIB_LCHOWN = @GNULIB_LCHOWN@
-GNULIB_LDEXPF = @GNULIB_LDEXPF@
-GNULIB_LDEXPL = @GNULIB_LDEXPL@
-GNULIB_LINK = @GNULIB_LINK@
-GNULIB_LINKAT = @GNULIB_LINKAT@
-GNULIB_LISTEN = @GNULIB_LISTEN@
-GNULIB_LOCALECONV = @GNULIB_LOCALECONV@
-GNULIB_LOCALENAME = @GNULIB_LOCALENAME@
-GNULIB_LOCALTIME = @GNULIB_LOCALTIME@
-GNULIB_LOG = @GNULIB_LOG@
-GNULIB_LOG10 = @GNULIB_LOG10@
-GNULIB_LOG10F = @GNULIB_LOG10F@
-GNULIB_LOG10L = @GNULIB_LOG10L@
-GNULIB_LOG1P = @GNULIB_LOG1P@
-GNULIB_LOG1PF = @GNULIB_LOG1PF@
-GNULIB_LOG1PL = @GNULIB_LOG1PL@
-GNULIB_LOG2 = @GNULIB_LOG2@
-GNULIB_LOG2F = @GNULIB_LOG2F@
-GNULIB_LOG2L = @GNULIB_LOG2L@
-GNULIB_LOGB = @GNULIB_LOGB@
-GNULIB_LOGBF = @GNULIB_LOGBF@
-GNULIB_LOGBL = @GNULIB_LOGBL@
-GNULIB_LOGF = @GNULIB_LOGF@
-GNULIB_LOGL = @GNULIB_LOGL@
-GNULIB_LSEEK = @GNULIB_LSEEK@
-GNULIB_LSTAT = @GNULIB_LSTAT@
-GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@
-GNULIB_MBRLEN = @GNULIB_MBRLEN@
-GNULIB_MBRTOWC = @GNULIB_MBRTOWC@
-GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@
-GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@
-GNULIB_MBSCHR = @GNULIB_MBSCHR@
-GNULIB_MBSCSPN = @GNULIB_MBSCSPN@
-GNULIB_MBSINIT = @GNULIB_MBSINIT@
-GNULIB_MBSLEN = @GNULIB_MBSLEN@
-GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@
-GNULIB_MBSNLEN = @GNULIB_MBSNLEN@
-GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@
-GNULIB_MBSPBRK = @GNULIB_MBSPBRK@
-GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@
-GNULIB_MBSRCHR = @GNULIB_MBSRCHR@
-GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@
-GNULIB_MBSSEP = @GNULIB_MBSSEP@
-GNULIB_MBSSPN = @GNULIB_MBSSPN@
-GNULIB_MBSSTR = @GNULIB_MBSSTR@
-GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@
-GNULIB_MBTOWC = @GNULIB_MBTOWC@
-GNULIB_MDA_ACCESS = @GNULIB_MDA_ACCESS@
-GNULIB_MDA_CHDIR = @GNULIB_MDA_CHDIR@
-GNULIB_MDA_CHMOD = @GNULIB_MDA_CHMOD@
-GNULIB_MDA_CLOSE = @GNULIB_MDA_CLOSE@
-GNULIB_MDA_CREAT = @GNULIB_MDA_CREAT@
-GNULIB_MDA_DUP = @GNULIB_MDA_DUP@
-GNULIB_MDA_DUP2 = @GNULIB_MDA_DUP2@
-GNULIB_MDA_ECVT = @GNULIB_MDA_ECVT@
-GNULIB_MDA_EXECL = @GNULIB_MDA_EXECL@
-GNULIB_MDA_EXECLE = @GNULIB_MDA_EXECLE@
-GNULIB_MDA_EXECLP = @GNULIB_MDA_EXECLP@
-GNULIB_MDA_EXECV = @GNULIB_MDA_EXECV@
-GNULIB_MDA_EXECVE = @GNULIB_MDA_EXECVE@
-GNULIB_MDA_EXECVP = @GNULIB_MDA_EXECVP@
-GNULIB_MDA_EXECVPE = @GNULIB_MDA_EXECVPE@
-GNULIB_MDA_FCLOSEALL = @GNULIB_MDA_FCLOSEALL@
-GNULIB_MDA_FCVT = @GNULIB_MDA_FCVT@
-GNULIB_MDA_FDOPEN = @GNULIB_MDA_FDOPEN@
-GNULIB_MDA_FILENO = @GNULIB_MDA_FILENO@
-GNULIB_MDA_GCVT = @GNULIB_MDA_GCVT@
-GNULIB_MDA_GETCWD = @GNULIB_MDA_GETCWD@
-GNULIB_MDA_GETPID = @GNULIB_MDA_GETPID@
-GNULIB_MDA_GETW = @GNULIB_MDA_GETW@
-GNULIB_MDA_ISATTY = @GNULIB_MDA_ISATTY@
-GNULIB_MDA_J0 = @GNULIB_MDA_J0@
-GNULIB_MDA_J1 = @GNULIB_MDA_J1@
-GNULIB_MDA_JN = @GNULIB_MDA_JN@
-GNULIB_MDA_LSEEK = @GNULIB_MDA_LSEEK@
-GNULIB_MDA_MEMCCPY = @GNULIB_MDA_MEMCCPY@
-GNULIB_MDA_MKDIR = @GNULIB_MDA_MKDIR@
-GNULIB_MDA_MKTEMP = @GNULIB_MDA_MKTEMP@
-GNULIB_MDA_OPEN = @GNULIB_MDA_OPEN@
-GNULIB_MDA_PUTENV = @GNULIB_MDA_PUTENV@
-GNULIB_MDA_PUTW = @GNULIB_MDA_PUTW@
-GNULIB_MDA_READ = @GNULIB_MDA_READ@
-GNULIB_MDA_RMDIR = @GNULIB_MDA_RMDIR@
-GNULIB_MDA_STRDUP = @GNULIB_MDA_STRDUP@
-GNULIB_MDA_SWAB = @GNULIB_MDA_SWAB@
-GNULIB_MDA_TEMPNAM = @GNULIB_MDA_TEMPNAM@
-GNULIB_MDA_TZSET = @GNULIB_MDA_TZSET@
-GNULIB_MDA_UMASK = @GNULIB_MDA_UMASK@
-GNULIB_MDA_UNLINK = @GNULIB_MDA_UNLINK@
-GNULIB_MDA_WCSDUP = @GNULIB_MDA_WCSDUP@
-GNULIB_MDA_WRITE = @GNULIB_MDA_WRITE@
-GNULIB_MDA_Y0 = @GNULIB_MDA_Y0@
-GNULIB_MDA_Y1 = @GNULIB_MDA_Y1@
-GNULIB_MDA_YN = @GNULIB_MDA_YN@
-GNULIB_MEMCHR = @GNULIB_MEMCHR@
-GNULIB_MEMMEM = @GNULIB_MEMMEM@
-GNULIB_MEMPCPY = @GNULIB_MEMPCPY@
-GNULIB_MEMRCHR = @GNULIB_MEMRCHR@
-GNULIB_MKDIR = @GNULIB_MKDIR@
-GNULIB_MKDIRAT = @GNULIB_MKDIRAT@
-GNULIB_MKDTEMP = @GNULIB_MKDTEMP@
-GNULIB_MKFIFO = @GNULIB_MKFIFO@
-GNULIB_MKFIFOAT = @GNULIB_MKFIFOAT@
-GNULIB_MKNOD = @GNULIB_MKNOD@
-GNULIB_MKNODAT = @GNULIB_MKNODAT@
-GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@
-GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@
-GNULIB_MKSTEMP = @GNULIB_MKSTEMP@
-GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@
-GNULIB_MKTIME = @GNULIB_MKTIME@
-GNULIB_MODF = @GNULIB_MODF@
-GNULIB_MODFF = @GNULIB_MODFF@
-GNULIB_MODFL = @GNULIB_MODFL@
-GNULIB_NANOSLEEP = @GNULIB_NANOSLEEP@
-GNULIB_NONBLOCKING = @GNULIB_NONBLOCKING@
-GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@
-GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@
-GNULIB_OPEN = @GNULIB_OPEN@
-GNULIB_OPENAT = @GNULIB_OPENAT@
-GNULIB_OPENDIR = @GNULIB_OPENDIR@
-GNULIB_OVERRIDES_STRUCT_STAT = @GNULIB_OVERRIDES_STRUCT_STAT@
-GNULIB_OVERRIDES_WINT_T = @GNULIB_OVERRIDES_WINT_T@
-GNULIB_PCLOSE = @GNULIB_PCLOSE@
-GNULIB_PERROR = @GNULIB_PERROR@
-GNULIB_PIPE = @GNULIB_PIPE@
-GNULIB_PIPE2 = @GNULIB_PIPE2@
-GNULIB_POPEN = @GNULIB_POPEN@
-GNULIB_POSIX_MEMALIGN = @GNULIB_POSIX_MEMALIGN@
-GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@
-GNULIB_POWF = @GNULIB_POWF@
-GNULIB_PREAD = @GNULIB_PREAD@
-GNULIB_PRINTF = @GNULIB_PRINTF@
-GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@
-GNULIB_PSELECT = @GNULIB_PSELECT@
-GNULIB_PTHREAD_SIGMASK = @GNULIB_PTHREAD_SIGMASK@
-GNULIB_PTSNAME = @GNULIB_PTSNAME@
-GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@
-GNULIB_PUTC = @GNULIB_PUTC@
-GNULIB_PUTCHAR = @GNULIB_PUTCHAR@
-GNULIB_PUTENV = @GNULIB_PUTENV@
-GNULIB_PUTS = @GNULIB_PUTS@
-GNULIB_PWRITE = @GNULIB_PWRITE@
-GNULIB_QSORT_R = @GNULIB_QSORT_R@
-GNULIB_RAISE = @GNULIB_RAISE@
-GNULIB_RANDOM = @GNULIB_RANDOM@
-GNULIB_RANDOM_R = @GNULIB_RANDOM_R@
-GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@
-GNULIB_READ = @GNULIB_READ@
-GNULIB_READDIR = @GNULIB_READDIR@
-GNULIB_READLINK = @GNULIB_READLINK@
-GNULIB_READLINKAT = @GNULIB_READLINKAT@
-GNULIB_REALLOCARRAY = @GNULIB_REALLOCARRAY@
-GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@
-GNULIB_REALPATH = @GNULIB_REALPATH@
-GNULIB_RECV = @GNULIB_RECV@
-GNULIB_RECVFROM = @GNULIB_RECVFROM@
-GNULIB_REMAINDER = @GNULIB_REMAINDER@
-GNULIB_REMAINDERF = @GNULIB_REMAINDERF@
-GNULIB_REMAINDERL = @GNULIB_REMAINDERL@
-GNULIB_REMOVE = @GNULIB_REMOVE@
-GNULIB_RENAME = @GNULIB_RENAME@
-GNULIB_RENAMEAT = @GNULIB_RENAMEAT@
-GNULIB_REWINDDIR = @GNULIB_REWINDDIR@
-GNULIB_RINT = @GNULIB_RINT@
-GNULIB_RINTF = @GNULIB_RINTF@
-GNULIB_RINTL = @GNULIB_RINTL@
-GNULIB_RMDIR = @GNULIB_RMDIR@
-GNULIB_ROUND = @GNULIB_ROUND@
-GNULIB_ROUNDF = @GNULIB_ROUNDF@
-GNULIB_ROUNDL = @GNULIB_ROUNDL@
-GNULIB_RPMATCH = @GNULIB_RPMATCH@
-GNULIB_SCANDIR = @GNULIB_SCANDIR@
-GNULIB_SCANF = @GNULIB_SCANF@
-GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@
-GNULIB_SELECT = @GNULIB_SELECT@
-GNULIB_SEND = @GNULIB_SEND@
-GNULIB_SENDTO = @GNULIB_SENDTO@
-GNULIB_SETENV = @GNULIB_SETENV@
-GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@
-GNULIB_SETLOCALE = @GNULIB_SETLOCALE@
-GNULIB_SETLOCALE_NULL = @GNULIB_SETLOCALE_NULL@
-GNULIB_SETSOCKOPT = @GNULIB_SETSOCKOPT@
-GNULIB_SHUTDOWN = @GNULIB_SHUTDOWN@
-GNULIB_SIGABBREV_NP = @GNULIB_SIGABBREV_NP@
-GNULIB_SIGACTION = @GNULIB_SIGACTION@
-GNULIB_SIGDESCR_NP = @GNULIB_SIGDESCR_NP@
-GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@
-GNULIB_SIGNBIT = @GNULIB_SIGNBIT@
-GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@
-GNULIB_SINF = @GNULIB_SINF@
-GNULIB_SINHF = @GNULIB_SINHF@
-GNULIB_SINL = @GNULIB_SINL@
-GNULIB_SLEEP = @GNULIB_SLEEP@
-GNULIB_SNPRINTF = @GNULIB_SNPRINTF@
-GNULIB_SOCKET = @GNULIB_SOCKET@
-GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@
-GNULIB_SQRTF = @GNULIB_SQRTF@
-GNULIB_SQRTL = @GNULIB_SQRTL@
-GNULIB_STAT = @GNULIB_STAT@
-GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@
-GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@
-GNULIB_STPCPY = @GNULIB_STPCPY@
-GNULIB_STPNCPY = @GNULIB_STPNCPY@
-GNULIB_STRCASESTR = @GNULIB_STRCASESTR@
-GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@
-GNULIB_STRDUP = @GNULIB_STRDUP@
-GNULIB_STRERROR = @GNULIB_STRERROR@
-GNULIB_STRERRORNAME_NP = @GNULIB_STRERRORNAME_NP@
-GNULIB_STRERROR_R = @GNULIB_STRERROR_R@
-GNULIB_STRFTIME = @GNULIB_STRFTIME@
-GNULIB_STRNCAT = @GNULIB_STRNCAT@
-GNULIB_STRNDUP = @GNULIB_STRNDUP@
-GNULIB_STRNLEN = @GNULIB_STRNLEN@
-GNULIB_STRPBRK = @GNULIB_STRPBRK@
-GNULIB_STRPTIME = @GNULIB_STRPTIME@
-GNULIB_STRSEP = @GNULIB_STRSEP@
-GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@
-GNULIB_STRSTR = @GNULIB_STRSTR@
-GNULIB_STRTOD = @GNULIB_STRTOD@
-GNULIB_STRTOIMAX = @GNULIB_STRTOIMAX@
-GNULIB_STRTOK_R = @GNULIB_STRTOK_R@
-GNULIB_STRTOLD = @GNULIB_STRTOLD@
-GNULIB_STRTOLL = @GNULIB_STRTOLL@
-GNULIB_STRTOULL = @GNULIB_STRTOULL@
-GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@
-GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@
-GNULIB_SYMLINK = @GNULIB_SYMLINK@
-GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@
-GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@
-GNULIB_TANF = @GNULIB_TANF@
-GNULIB_TANHF = @GNULIB_TANHF@
-GNULIB_TANL = @GNULIB_TANL@
-GNULIB_TIMEGM = @GNULIB_TIMEGM@
-GNULIB_TIMESPEC_GET = @GNULIB_TIMESPEC_GET@
-GNULIB_TIME_R = @GNULIB_TIME_R@
-GNULIB_TIME_RZ = @GNULIB_TIME_RZ@
-GNULIB_TMPFILE = @GNULIB_TMPFILE@
-GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@
-GNULIB_TRUNC = @GNULIB_TRUNC@
-GNULIB_TRUNCATE = @GNULIB_TRUNCATE@
-GNULIB_TRUNCF = @GNULIB_TRUNCF@
-GNULIB_TRUNCL = @GNULIB_TRUNCL@
-GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@
-GNULIB_TZSET = @GNULIB_TZSET@
-GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@
-GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@
-GNULIB_UNLINK = @GNULIB_UNLINK@
-GNULIB_UNLINKAT = @GNULIB_UNLINKAT@
-GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@
-GNULIB_UNSETENV = @GNULIB_UNSETENV@
-GNULIB_USLEEP = @GNULIB_USLEEP@
-GNULIB_UTIMENSAT = @GNULIB_UTIMENSAT@
-GNULIB_VASPRINTF = @GNULIB_VASPRINTF@
-GNULIB_VDPRINTF = @GNULIB_VDPRINTF@
-GNULIB_VFPRINTF = @GNULIB_VFPRINTF@
-GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@
-GNULIB_VFSCANF = @GNULIB_VFSCANF@
-GNULIB_VPRINTF = @GNULIB_VPRINTF@
-GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@
-GNULIB_VSCANF = @GNULIB_VSCANF@
-GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@
-GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@
-GNULIB_WAITPID = @GNULIB_WAITPID@
-GNULIB_WCPCPY = @GNULIB_WCPCPY@
-GNULIB_WCPNCPY = @GNULIB_WCPNCPY@
-GNULIB_WCRTOMB = @GNULIB_WCRTOMB@
-GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@
-GNULIB_WCSCAT = @GNULIB_WCSCAT@
-GNULIB_WCSCHR = @GNULIB_WCSCHR@
-GNULIB_WCSCMP = @GNULIB_WCSCMP@
-GNULIB_WCSCOLL = @GNULIB_WCSCOLL@
-GNULIB_WCSCPY = @GNULIB_WCSCPY@
-GNULIB_WCSCSPN = @GNULIB_WCSCSPN@
-GNULIB_WCSDUP = @GNULIB_WCSDUP@
-GNULIB_WCSFTIME = @GNULIB_WCSFTIME@
-GNULIB_WCSLEN = @GNULIB_WCSLEN@
-GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@
-GNULIB_WCSNCAT = @GNULIB_WCSNCAT@
-GNULIB_WCSNCMP = @GNULIB_WCSNCMP@
-GNULIB_WCSNCPY = @GNULIB_WCSNCPY@
-GNULIB_WCSNLEN = @GNULIB_WCSNLEN@
-GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@
-GNULIB_WCSPBRK = @GNULIB_WCSPBRK@
-GNULIB_WCSRCHR = @GNULIB_WCSRCHR@
-GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@
-GNULIB_WCSSPN = @GNULIB_WCSSPN@
-GNULIB_WCSSTR = @GNULIB_WCSSTR@
-GNULIB_WCSTOK = @GNULIB_WCSTOK@
-GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@
-GNULIB_WCSXFRM = @GNULIB_WCSXFRM@
-GNULIB_WCTOB = @GNULIB_WCTOB@
-GNULIB_WCTOMB = @GNULIB_WCTOMB@
-GNULIB_WCTRANS = @GNULIB_WCTRANS@
-GNULIB_WCTYPE = @GNULIB_WCTYPE@
-GNULIB_WCWIDTH = @GNULIB_WCWIDTH@
-GNULIB_WMEMCHR = @GNULIB_WMEMCHR@
-GNULIB_WMEMCMP = @GNULIB_WMEMCMP@
-GNULIB_WMEMCPY = @GNULIB_WMEMCPY@
-GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@
-GNULIB_WMEMPCPY = @GNULIB_WMEMPCPY@
-GNULIB_WMEMSET = @GNULIB_WMEMSET@
-GNULIB_WRITE = @GNULIB_WRITE@
-GNULIB__EXIT = @GNULIB__EXIT@
GREP = @GREP@
HAVE_ACCEPT4 = @HAVE_ACCEPT4@
HAVE_ACOSF = @HAVE_ACOSF@
@@ -1262,8 +1501,10 @@ HAVE_STRPBRK = @HAVE_STRPBRK@
HAVE_STRPTIME = @HAVE_STRPTIME@
HAVE_STRSEP = @HAVE_STRSEP@
HAVE_STRTOD = @HAVE_STRTOD@
+HAVE_STRTOL = @HAVE_STRTOL@
HAVE_STRTOLD = @HAVE_STRTOLD@
HAVE_STRTOLL = @HAVE_STRTOLL@
+HAVE_STRTOUL = @HAVE_STRTOUL@
HAVE_STRTOULL = @HAVE_STRTOULL@
HAVE_STRUCT_ADDRINFO = @HAVE_STRUCT_ADDRINFO@
HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@
@@ -1289,6 +1530,7 @@ HAVE_TANHF = @HAVE_TANHF@
HAVE_TANL = @HAVE_TANL@
HAVE_TIMEGM = @HAVE_TIMEGM@
HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@
+HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@
HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@
HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@
HAVE_UNISTD_H = @HAVE_UNISTD_H@
@@ -1377,6 +1619,7 @@ LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@
LIMITS_H = @LIMITS_H@
LN_S = @LN_S@
LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@
+LOCALENAME_ENHANCE_LOCALE_FUNCS = @LOCALENAME_ENHANCE_LOCALE_FUNCS@
LOCALE_FR = @LOCALE_FR@
LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@
LOCALE_JA = @LOCALE_JA@
@@ -1477,7 +1720,8 @@ REPLACE_ASINF = @REPLACE_ASINF@
REPLACE_ATAN2F = @REPLACE_ATAN2F@
REPLACE_ATANF = @REPLACE_ATANF@
REPLACE_BTOWC = @REPLACE_BTOWC@
-REPLACE_CALLOC = @REPLACE_CALLOC@
+REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@
+REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@
REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@
REPLACE_CBRTF = @REPLACE_CBRTF@
REPLACE_CBRTL = @REPLACE_CBRTL@
@@ -1487,6 +1731,7 @@ REPLACE_CEILL = @REPLACE_CEILL@
REPLACE_CHOWN = @REPLACE_CHOWN@
REPLACE_CLOSE = @REPLACE_CLOSE@
REPLACE_CLOSEDIR = @REPLACE_CLOSEDIR@
+REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@
REPLACE_COSF = @REPLACE_COSF@
REPLACE_COSHF = @REPLACE_COSHF@
REPLACE_CREAT = @REPLACE_CREAT@
@@ -1531,6 +1776,7 @@ REPLACE_FMODF = @REPLACE_FMODF@
REPLACE_FMODL = @REPLACE_FMODL@
REPLACE_FNMATCH = @REPLACE_FNMATCH@
REPLACE_FOPEN = @REPLACE_FOPEN@
+REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@
REPLACE_FPRINTF = @REPLACE_FPRINTF@
REPLACE_FPURGE = @REPLACE_FPURGE@
REPLACE_FREE = @REPLACE_FREE@
@@ -1558,6 +1804,7 @@ REPLACE_GETLINE = @REPLACE_GETLINE@
REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@
REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
REPLACE_GETPASS = @REPLACE_GETPASS@
+REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@
REPLACE_GETRANDOM = @REPLACE_GETRANDOM@
REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@
REPLACE_GLOB = @REPLACE_GLOB@
@@ -1606,7 +1853,8 @@ REPLACE_LOGF = @REPLACE_LOGF@
REPLACE_LOGL = @REPLACE_LOGL@
REPLACE_LSEEK = @REPLACE_LSEEK@
REPLACE_LSTAT = @REPLACE_LSTAT@
-REPLACE_MALLOC = @REPLACE_MALLOC@
+REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@
+REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@
REPLACE_MBRLEN = @REPLACE_MBRLEN@
REPLACE_MBRTOWC = @REPLACE_MBRTOWC@
REPLACE_MBSINIT = @REPLACE_MBSINIT@
@@ -1652,7 +1900,9 @@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@
REPLACE_READ = @REPLACE_READ@
REPLACE_READLINK = @REPLACE_READLINK@
REPLACE_READLINKAT = @REPLACE_READLINKAT@
-REPLACE_REALLOC = @REPLACE_REALLOC@
+REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@
+REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@
+REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@
REPLACE_REALPATH = @REPLACE_REALPATH@
REPLACE_REMAINDER = @REPLACE_REMAINDER@
REPLACE_REMAINDERF = @REPLACE_REMAINDERF@
@@ -1697,7 +1947,11 @@ REPLACE_STRSTR = @REPLACE_STRSTR@
REPLACE_STRTOD = @REPLACE_STRTOD@
REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@
REPLACE_STRTOK_R = @REPLACE_STRTOK_R@
+REPLACE_STRTOL = @REPLACE_STRTOL@
REPLACE_STRTOLD = @REPLACE_STRTOLD@
+REPLACE_STRTOLL = @REPLACE_STRTOLL@
+REPLACE_STRTOUL = @REPLACE_STRTOUL@
+REPLACE_STRTOULL = @REPLACE_STRTOULL@
REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@
REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@
REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@
@@ -1783,8 +2037,10 @@ datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
+gl_LIBOBJDEPS = @gl_LIBOBJDEPS@
gl_LIBOBJS = @gl_LIBOBJS@
gl_LTLIBOBJS = @gl_LTLIBOBJS@
+gltests_LIBOBJDEPS = @gltests_LIBOBJDEPS@
gltests_LIBOBJS = @gltests_LIBOBJS@
gltests_LTLIBOBJS = @gltests_LTLIBOBJS@
gltests_WITNESS = @gltests_WITNESS@
@@ -1820,131 +2076,146 @@ target_vendor = @target_vendor@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
-AUTOMAKE_OPTIONS = 1.11 gnits subdir-objects
+AUTOMAKE_OPTIONS = 1.14 gnits subdir-objects
SUBDIRS =
noinst_HEADERS =
noinst_LIBRARIES = libgnu.a
noinst_LTLIBRARIES =
# No GNU Make output.
-EXTRA_DIST = m4/gnulib-cache.m4 accept.c w32sock.h alloca.c \
- alloca.in.h arpa_inet.in.h assure.h attribute.h \
- basename-lgpl.h bind.c w32sock.h btowc.c canonicalize-lgpl.c \
- chdir-long.c chdir-long.h chown.c fchown-stub.c cloexec.h \
- close.c closedir.c dirent-private.h connect.c w32sock.h \
- count-one-bits.h ctype.in.h dirent.in.h dirfd.c dirname.h \
- dup.c dup2.c eloop-threshold.h errno.in.h error.c error.h \
- exitfail.h fchdir.c fcntl.c fcntl.in.h fd-hook.h fdopendir.c \
- ffs.c filename.h filenamecat.h flexmember.h float.c float.in.h \
- itold.c fnmatch.c fnmatch_loop.c fnmatch.c fnmatch.in.h \
- fpucw.h free.c frexp.c frexp.c frexpl.c fstat.c stat-w32.c \
- stat-w32.h at-func.c fstatat.c \
- $(top_srcdir)/import/extra/gendocs.sh getcwd.c getcwd-lgpl.c \
- getdelim.c getdtablesize.c getline.c getlogin_r.c getrandom.c \
- gettimeofday.c $(top_srcdir)/import/extra/gitlog-to-changelog \
- glob.c glob_internal.h glob_pattern_p.c globfree.c glob-libc.h \
- glob.in.h hard-locale.h inet_ntop.c intprops.h inttypes.in.h \
- isblank.c float+.h isnan.c isnand-nolibm.h isnand.c float+.h \
- isnan.c isnanl-nolibm.h isnanl.c cdefs.h libc-config.h \
- limits.in.h listen.c w32sock.h localcharset.h locale.in.h \
- lstat.c malloc.c malloca.h math.in.h lc-charset-dispatch.c \
- lc-charset-dispatch.h mbrtowc-impl-utf8.h mbrtowc-impl.h \
- mbrtowc.c mbtowc-lock.c mbtowc-lock.h windows-initguard.h \
- mbsinit.c mbsrtowcs-impl.h mbsrtowcs-state.c mbsrtowcs.c \
- mbtowc-impl.h mbtowc.c memchr.c memchr.valgrind memmem.c \
- memmem.c str-two-way.h mempcpy.c memrchr.c mkdir.c mkdtemp.c \
- mkostemp.c msvc-inval.c msvc-inval.h msvc-nothrow.c \
- msvc-nothrow.h netdb.in.h netinet_in.in.h open.c openat.c \
- openat.h dirent-private.h opendir.c pathmax.h pipe.c \
- rawmemchr.c rawmemchr.valgrind dirent-private.h readdir.c \
- readlink.c realloc.c rename.c dirent-private.h rewinddir.c \
- rmdir.c same-inode.h save-cwd.h malloc/scratch_buffer.h \
- scratch_buffer.h select.c setenv.c setlocale-lock.c \
- setlocale_null.h windows-initguard.h setsockopt.c w32sock.h \
- signal.in.h _Noreturn.h arg-nonnull.h c++defs.h warn-on-use.h \
- socket.c w32sock.h w32sock.h stat-w32.c stat-w32.h stat.c \
- stat-time.h stdalign.in.h stdbool.in.h stddef.in.h stdint.in.h \
- stdio.in.h stdlib.in.h strchrnul.c strchrnul.valgrind strdup.c \
- streq.h strerror.c strerror-override.c strerror-override.h \
- strerror_r.c string.in.h strings.in.h strnlen.c strstr.c \
- str-two-way.h strstr.c strtok_r.c sys_random.in.h \
- sys_select.in.h sys_socket.in.h sys_stat.in.h sys_time.in.h \
- sys_types.in.h sys_uio.in.h sys_wait.in.h tempname.h time.in.h \
- time_r.c unistd.in.h unistd--.h unistd-safer.h unsetenv.c \
+EXTRA_DIST = m4/gnulib-cache.m4 w32sock.h alloca.c alloca.in.h \
+ arpa_inet.in.h assure.h attribute.h basename-lgpl.h w32sock.h \
+ chdir-long.h cloexec.h dirent-private.h w32sock.h \
+ count-one-bits.h ctype.in.h dirent.in.h dirname.h \
+ eloop-threshold.h errno.in.h error.h exitfail.h fcntl.in.h \
+ fd-hook.h filename.h filenamecat.h flexmember.h float.in.h \
+ fnmatch.c fnmatch_loop.c fnmatch.c fnmatch.in.h fpucw.h \
+ frexp.c frexp.c frexpl.c stat-w32.c stat-w32.h at-func.c \
+ $(top_srcdir)/import/extra/gendocs.sh \
+ $(top_srcdir)/import/extra/gitlog-to-changelog glob_internal.h \
+ glob-libc.h glob.in.h hard-locale.h intprops.h inttypes.in.h \
+ float+.h isnan.c isnand-nolibm.h isnand.c float+.h isnan.c \
+ isnanl-nolibm.h isnanl.c cdefs.h libc-config.h limits.in.h \
+ w32sock.h localcharset.h locale.in.h malloc.c malloca.h \
+ math.in.h lc-charset-dispatch.c lc-charset-dispatch.h \
+ mbrtowc-impl-utf8.h mbrtowc-impl.h mbtowc-lock.c mbtowc-lock.h \
+ windows-initguard.h mbsrtowcs-impl.h mbsrtowcs-state.c \
+ mbtowc-impl.h memchr.valgrind memmem.c memmem.c str-two-way.h \
+ msvc-inval.h msvc-nothrow.h netdb.in.h netinet_in.in.h \
+ openat.h dirent-private.h pathmax.h rawmemchr.valgrind \
+ dirent-private.h realloc.c dirent-private.h same-inode.h \
+ save-cwd.h malloc/scratch_buffer.h scratch_buffer.h \
+ setlocale_null.h windows-initguard.h w32sock.h signal.in.h \
+ _Noreturn.h arg-nonnull.h c++defs.h warn-on-use.h w32sock.h \
+ w32sock.h stat-w32.c stat-w32.h stat-time.h stdalign.in.h \
+ stdbool.in.h stddef.in.h stdint.in.h stdio.in.h stdlib.in.h \
+ strchrnul.valgrind streq.h strerror-override.h strerror_r.c \
+ string.in.h strings.in.h strstr.c str-two-way.h strstr.c \
+ sys_random.in.h sys_select.in.h sys_socket.in.h sys_stat.in.h \
+ sys_time.in.h sys_types.in.h sys_uio.in.h sys_wait.in.h \
+ tempname.h time.in.h unistd.in.h unistd--.h unistd-safer.h \
$(top_srcdir)/import/extra/update-copyright verify.h \
- wchar.in.h wctype.in.h windows-initguard.h windows-mutex.c \
- windows-mutex.h windows-once.c windows-once.h \
- windows-initguard.h windows-recmutex.c windows-recmutex.h \
- windows-initguard.h windows-rwlock.c windows-rwlock.h \
- wmemchr-impl.h wmemchr.c wmempcpy.c xalloc-oversized.h
+ wchar.in.h wctype.in.h windows-initguard.h windows-mutex.h \
+ windows-once.h windows-initguard.h windows-recmutex.h \
+ windows-initguard.h windows-rwlock.h wmemchr-impl.h \
+ xalloc-oversized.h
BUILT_SOURCES = $(ALLOCA_H) arpa/inet.h ctype.h dirent.h $(ERRNO_H) \
- fcntl.h $(FLOAT_H) $(FNMATCH_H) $(GLOB_H) inttypes.h \
- $(LIMITS_H) locale.h math.h netdb.h $(NETINET_IN_H) signal.h \
- $(STDALIGN_H) $(STDBOOL_H) $(STDDEF_H) $(STDINT_H) stdio.h \
- stdlib.h string.h strings.h sys/random.h sys/select.h \
- sys/socket.h sys/stat.h sys/time.h sys/types.h sys/uio.h \
- sys/wait.h time.h unistd.h wchar.h wctype.h
+ fcntl.h $(FLOAT_H) $(FNMATCH_H) $(GLOB_H) glob-libc.gl.h \
+ inttypes.h $(LIMITS_H) locale.h math.h netdb.h $(NETINET_IN_H) \
+ malloc/scratch_buffer.gl.h signal.h $(STDALIGN_H) $(STDBOOL_H) \
+ $(STDDEF_H) $(STDINT_H) stdio.h stdlib.h string.h strings.h \
+ sys/random.h sys/select.h sys/socket.h sys/stat.h sys/time.h \
+ sys/types.h sys/uio.h sys/wait.h time.h unistd.h wchar.h \
+ wctype.h
SUFFIXES =
MOSTLYCLEANFILES = core *.stackdump alloca.h alloca.h-t arpa/inet.h \
arpa/inet.h-t ctype.h ctype.h-t dirent.h dirent.h-t errno.h \
errno.h-t fcntl.h fcntl.h-t float.h float.h-t fnmatch.h \
- fnmatch.h-t glob.h glob.h-t inttypes.h inttypes.h-t limits.h \
- limits.h-t locale.h locale.h-t math.h math.h-t netdb.h \
- netdb.h-t netinet/in.h netinet/in.h-t signal.h signal.h-t \
- stdalign.h stdalign.h-t stdbool.h stdbool.h-t stddef.h \
- stddef.h-t stdint.h stdint.h-t stdio.h stdio.h-t stdlib.h \
- stdlib.h-t string.h string.h-t strings.h strings.h-t \
- sys/random.h sys/random.h-t sys/select.h sys/select.h-t \
- sys/socket.h sys/socket.h-t sys/stat.h sys/stat.h-t sys/time.h \
- sys/time.h-t sys/types.h sys/types.h-t sys/uio.h sys/uio.h-t \
- sys/wait.h sys/wait.h-t time.h time.h-t unistd.h unistd.h-t \
- wchar.h wchar.h-t wctype.h wctype.h-t
+ fnmatch.h-t glob.h glob.h-t glob-libc.gl.h glob-libc.gl.h-t \
+ inttypes.h inttypes.h-t limits.h limits.h-t locale.h \
+ locale.h-t math.h math.h-t netdb.h netdb.h-t netinet/in.h \
+ netinet/in.h-t malloc/scratch_buffer.gl.h \
+ malloc/scratch_buffer.gl.h-t signal.h signal.h-t stdalign.h \
+ stdalign.h-t stdbool.h stdbool.h-t stddef.h stddef.h-t \
+ stdint.h stdint.h-t stdio.h stdio.h-t stdlib.h stdlib.h-t \
+ string.h string.h-t strings.h strings.h-t sys/random.h \
+ sys/random.h-t sys/select.h sys/select.h-t sys/socket.h \
+ sys/socket.h-t sys/stat.h sys/stat.h-t sys/time.h sys/time.h-t \
+ sys/types.h sys/types.h-t sys/uio.h sys/uio.h-t sys/wait.h \
+ sys/wait.h-t time.h time.h-t unistd.h unistd.h-t wchar.h \
+ wchar.h-t wctype.h wctype.h-t
MOSTLYCLEANDIRS = arpa netinet sys sys sys sys sys sys
CLEANFILES =
DISTCLEANFILES =
MAINTAINERCLEANFILES =
AM_CPPFLAGS =
AM_CFLAGS =
-libgnu_a_SOURCES = openat-priv.h openat-proc.c basename-lgpl.c \
- cloexec.c count-one-bits.c dirname-lgpl.c stripslash.c \
- exitfail.c fd-hook.c fd-safer-flag.c dup-safer-flag.c \
- filenamecat-lgpl.c getprogname.h getprogname.c gettext.h \
- hard-locale.c idx.h localcharset.c glthread/lock.h \
- glthread/lock.c malloca.c math.c minmax.h openat-die.c \
- save-cwd.c malloc/scratch_buffer_dupfree.c \
- malloc/scratch_buffer_grow.c \
+libgnu_a_SOURCES = $(am__append_1) openat-priv.h openat-proc.c \
+ basename-lgpl.c $(am__append_2) $(am__append_3) \
+ $(am__append_4) $(am__append_5) $(am__append_6) \
+ $(am__append_7) cloexec.c $(am__append_8) $(am__append_9) \
+ $(am__append_10) count-one-bits.c $(am__append_11) \
+ dirname-lgpl.c stripslash.c $(am__append_12) $(am__append_13) \
+ $(am__append_14) exitfail.c $(am__append_15) $(am__append_16) \
+ fd-hook.c fd-safer-flag.c dup-safer-flag.c $(am__append_17) \
+ $(am__append_18) filenamecat-lgpl.c $(am__append_19) \
+ $(am__append_20) $(am__append_21) $(am__append_22) \
+ $(am__append_23) $(am__append_24) $(am__append_25) \
+ $(am__append_26) $(am__append_27) $(am__append_28) \
+ $(am__append_29) getprogname.h getprogname.c $(am__append_30) \
+ gettext.h $(am__append_31) $(am__append_32) $(am__append_33) \
+ hard-locale.c idx.h $(am__append_34) $(am__append_35) \
+ $(am__append_36) localcharset.c glthread/lock.h \
+ glthread/lock.c $(am__append_37) malloca.c math.c \
+ $(am__append_38) $(am__append_39) $(am__append_40) \
+ $(am__append_41) $(am__append_42) $(am__append_43) \
+ $(am__append_44) minmax.h $(am__append_45) $(am__append_46) \
+ $(am__append_47) $(am__append_48) $(am__append_49) \
+ $(am__append_50) $(am__append_51) openat-die.c \
+ $(am__append_52) $(am__append_53) $(am__append_54) \
+ $(am__append_55) $(am__append_56) $(am__append_57) \
+ $(am__append_58) $(am__append_59) save-cwd.c \
+ malloc/scratch_buffer_dupfree.c malloc/scratch_buffer_grow.c \
malloc/scratch_buffer_grow_preserve.c \
- malloc/scratch_buffer_set_array_size.c setlocale_null.c \
- sockets.h sockets.c stat-time.c strnlen1.h strnlen1.c \
- sys_socket.c tempname.c glthread/threadlib.c unistd.c \
- dup-safer.c fd-safer.c pipe-safer.c wctype-h.c
+ malloc/scratch_buffer_set_array_size.c $(am__append_60) \
+ $(am__append_61) setlocale_null.c $(am__append_62) \
+ $(am__append_63) $(am__append_64) sockets.h sockets.c \
+ $(am__append_65) stat-time.c $(am__append_66) $(am__append_67) \
+ $(am__append_68) $(am__append_69) $(am__append_70) \
+ $(am__append_71) $(am__append_72) strnlen1.h strnlen1.c \
+ $(am__append_73) sys_socket.c tempname.c glthread/threadlib.c \
+ $(am__append_74) unistd.c dup-safer.c fd-safer.c pipe-safer.c \
+ $(am__append_75) wctype-h.c $(am__append_76) $(am__append_77) \
+ $(am__append_78) $(am__append_79) $(am__append_80) \
+ $(am__append_81)
+libgnu_a_CFLAGS = $(AM_CFLAGS) $(GL_CFLAG_GNULIB_WARNINGS)
libgnu_a_LIBADD = $(gl_LIBOBJS) @ALLOCA@
libgnu_a_DEPENDENCIES = $(gl_LIBOBJS) @ALLOCA@
-EXTRA_libgnu_a_SOURCES = accept.c alloca.c bind.c btowc.c \
- canonicalize-lgpl.c chdir-long.c chown.c fchown-stub.c close.c \
- closedir.c connect.c dirfd.c dup.c dup2.c error.c fchdir.c \
- fcntl.c fdopendir.c ffs.c float.c itold.c fnmatch.c \
- fnmatch_loop.c fnmatch.c free.c frexp.c frexp.c frexpl.c \
- fstat.c stat-w32.c at-func.c fstatat.c getcwd.c getcwd-lgpl.c \
- getdelim.c getdtablesize.c getline.c getlogin_r.c getrandom.c \
- gettimeofday.c glob.c glob_pattern_p.c globfree.c inet_ntop.c \
- isblank.c isnan.c isnand.c isnan.c isnanl.c listen.c lstat.c \
- malloc.c lc-charset-dispatch.c mbrtowc.c mbtowc-lock.c \
- mbsinit.c mbsrtowcs-state.c mbsrtowcs.c mbtowc.c memchr.c \
- memmem.c memmem.c mempcpy.c memrchr.c mkdir.c mkdtemp.c \
- mkostemp.c msvc-inval.c msvc-nothrow.c open.c openat.c \
- opendir.c pipe.c rawmemchr.c readdir.c readlink.c realloc.c \
- rename.c rewinddir.c rmdir.c select.c setenv.c \
- setlocale-lock.c setsockopt.c socket.c stat-w32.c stat.c \
- strchrnul.c strdup.c strerror.c strerror-override.c \
- strerror_r.c strnlen.c strstr.c strstr.c strtok_r.c time_r.c \
- unsetenv.c windows-mutex.c windows-once.c windows-recmutex.c \
- windows-rwlock.c wmemchr.c wmempcpy.c
+EXTRA_libgnu_a_SOURCES = alloca.c fnmatch.c fnmatch_loop.c fnmatch.c \
+ frexp.c frexp.c frexpl.c stat-w32.c at-func.c isnan.c isnand.c \
+ isnan.c isnanl.c malloc.c lc-charset-dispatch.c mbtowc-lock.c \
+ mbsrtowcs-state.c memmem.c memmem.c realloc.c stat-w32.c \
+ strerror_r.c strstr.c strstr.c
# Use this preprocessor expression to decide whether #include_next works.
# Do not rely on a 'configure'-time test for this, since the expression
# might appear in an installed header, which is used by some other compiler.
HAVE_INCLUDE_NEXT = (__GNUC__ || __clang__ || 60000000 <= __DECC_VER)
+# In 'sed', replace the pattern space with a "DO NOT EDIT" comment.
+SED_HEADER_NOEDIT = s,.*,/* DO NOT EDIT! GENERATED AUTOMATICALLY! */,
+
+# '$(SED_HEADER_STDOUT) -e "..."' runs 'sed' but first outputs "DO NOT EDIT".
+SED_HEADER_STDOUT = sed -e 1h -e '1$(SED_HEADER_NOEDIT)' -e 1G
+
+# '$(SED_HEADER_TO_AT_t) FILE' copies FILE to $@-t, prepending a leading
+# "DO_NOT_EDIT". Although this could be done more simply via:
+# SED_HEADER_TO_AT_t = $(SED_HEADER_STDOUT) > $@-t
+# the -n and 'w' avoid a fork+exec, at least when GNU Make is used.
+SED_HEADER_TO_AT_t = $(SED_HEADER_STDOUT) -n -e 'w $@-t'
+
+# Use $(gl_V_at) instead of $(AM_V_GEN) or $(AM_V_at) on a line that
+gl_V_at = $(AM_V_GEN)
+
# Because this Makefile snippet defines a variable used by other
# gnulib Makefile snippets, it must be present in all makefiles that
# need it. This is ensured by the applicability 'all' defined above.
@@ -2007,7 +2278,7 @@ glthread/$(am__dirstamp):
glthread/$(DEPDIR)/$(am__dirstamp):
@$(MKDIR_P) glthread/$(DEPDIR)
@: > glthread/$(DEPDIR)/$(am__dirstamp)
-glthread/lock.$(OBJEXT): glthread/$(am__dirstamp) \
+glthread/libgnu_a-lock.$(OBJEXT): glthread/$(am__dirstamp) \
glthread/$(DEPDIR)/$(am__dirstamp)
malloc/$(am__dirstamp):
@$(MKDIR_P) malloc
@@ -2015,15 +2286,15 @@ malloc/$(am__dirstamp):
malloc/$(DEPDIR)/$(am__dirstamp):
@$(MKDIR_P) malloc/$(DEPDIR)
@: > malloc/$(DEPDIR)/$(am__dirstamp)
-malloc/scratch_buffer_dupfree.$(OBJEXT): malloc/$(am__dirstamp) \
- malloc/$(DEPDIR)/$(am__dirstamp)
-malloc/scratch_buffer_grow.$(OBJEXT): malloc/$(am__dirstamp) \
- malloc/$(DEPDIR)/$(am__dirstamp)
-malloc/scratch_buffer_grow_preserve.$(OBJEXT): malloc/$(am__dirstamp) \
+malloc/libgnu_a-scratch_buffer_dupfree.$(OBJEXT): \
+ malloc/$(am__dirstamp) malloc/$(DEPDIR)/$(am__dirstamp)
+malloc/libgnu_a-scratch_buffer_grow.$(OBJEXT): malloc/$(am__dirstamp) \
malloc/$(DEPDIR)/$(am__dirstamp)
-malloc/scratch_buffer_set_array_size.$(OBJEXT): \
+malloc/libgnu_a-scratch_buffer_grow_preserve.$(OBJEXT): \
malloc/$(am__dirstamp) malloc/$(DEPDIR)/$(am__dirstamp)
-glthread/threadlib.$(OBJEXT): glthread/$(am__dirstamp) \
+malloc/libgnu_a-scratch_buffer_set_array_size.$(OBJEXT): \
+ malloc/$(am__dirstamp) malloc/$(DEPDIR)/$(am__dirstamp)
+glthread/libgnu_a-threadlib.$(OBJEXT): glthread/$(am__dirstamp) \
glthread/$(DEPDIR)/$(am__dirstamp)
libgnu.a: $(libgnu_a_OBJECTS) $(libgnu_a_DEPENDENCIES) $(EXTRA_libgnu_a_DEPENDENCIES)
@@ -2050,139 +2321,142 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/accept.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alloca.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/at-func.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/basename-lgpl.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bind.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/btowc.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/canonicalize-lgpl.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chdir-long.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chown.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cloexec.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/close.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/closedir.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/connect.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/count-one-bits.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dirfd.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dirname-lgpl.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dup-safer-flag.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dup-safer.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dup.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dup2.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/error.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/exitfail.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fchdir.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fchown-stub.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcntl.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fd-hook.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fd-safer-flag.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fd-safer.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fdopendir.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ffs.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/filenamecat-lgpl.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/float.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fnmatch.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fnmatch_loop.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/free.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/frexp.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/frexpl.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fstat.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fstatat.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getcwd-lgpl.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getcwd.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getdelim.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getdtablesize.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getline.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getlogin_r.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getprogname.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getrandom.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gettimeofday.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/glob.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/glob_pattern_p.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/globfree.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hard-locale.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/inet_ntop.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isblank.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isnan.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isnand.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isnanl.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/itold.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lc-charset-dispatch.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/listen.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/localcharset.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lstat.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/malloc.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/malloca.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/math.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbrtowc.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbsinit.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbsrtowcs-state.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbsrtowcs.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbtowc-lock.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbtowc.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memchr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memmem.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mempcpy.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memrchr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mkdir.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mkdtemp.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mkostemp.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/msvc-inval.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/msvc-nothrow.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/open.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/openat-die.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/openat-proc.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/openat.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/opendir.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pipe-safer.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pipe.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rawmemchr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/readdir.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/readlink.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/realloc.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rename.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rewinddir.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rmdir.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/save-cwd.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/select.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setenv.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setlocale-lock.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setlocale_null.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setsockopt.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/socket.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sockets.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stat-time.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stat-w32.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stat.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strchrnul.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strdup.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strerror-override.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strerror.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strerror_r.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stripslash.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strnlen.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strnlen1.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strstr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strtok_r.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sys_socket.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tempname.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/time_r.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unistd.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unsetenv.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wctype-h.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/windows-mutex.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/windows-once.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/windows-recmutex.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/windows-rwlock.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wmemchr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wmempcpy.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@glthread/$(DEPDIR)/lock.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@glthread/$(DEPDIR)/threadlib.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@malloc/$(DEPDIR)/scratch_buffer_dupfree.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@malloc/$(DEPDIR)/scratch_buffer_grow.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@malloc/$(DEPDIR)/scratch_buffer_grow_preserve.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@malloc/$(DEPDIR)/scratch_buffer_set_array_size.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-accept.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-alloca.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-at-func.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-basename-lgpl.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-bind.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-btowc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-canonicalize-lgpl.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-chdir-long.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-chown.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-cloexec.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-close.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-closedir.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-connect.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-count-one-bits.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-dirfd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-dirname-lgpl.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-dup-safer-flag.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-dup-safer.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-dup.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-dup2.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-error.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-exitfail.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-fchdir.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-fchown-stub.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-fcntl.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-fd-hook.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-fd-safer-flag.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-fd-safer.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-fdopendir.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-ffs.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-filenamecat-lgpl.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-float.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-fnmatch.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-fnmatch_loop.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-free.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-frexp.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-frexpl.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-fstat.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-fstatat.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-getcwd-lgpl.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-getcwd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-getdelim.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-getdtablesize.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-getline.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-getlogin_r.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-getprogname.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-getrandom.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-gettimeofday.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-glob.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-glob_pattern_p.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-globfree.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-hard-locale.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-inet_ntop.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-isblank.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-isnan.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-isnand.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-isnanl.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-itold.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-lc-charset-dispatch.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-listen.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-localcharset.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-lstat.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-malloc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-malloca.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-math.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-mbrtowc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-mbsinit.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-mbsrtowcs-state.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-mbsrtowcs.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-mbtowc-lock.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-mbtowc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-memchr.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-memmem.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-mempcpy.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-memrchr.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-mkdir.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-mkdtemp.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-mkostemp.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-msvc-inval.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-msvc-nothrow.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-open.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-openat-die.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-openat-proc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-openat.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-opendir.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-pipe-safer.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-pipe.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-rawmemchr.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-readdir.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-readlink.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-realloc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-rename.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-rewinddir.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-rmdir.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-save-cwd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-select.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-setenv.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-setlocale-lock.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-setlocale_null.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-setsockopt.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-socket.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-sockets.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-stat-time.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-stat-w32.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-stat.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-stdio-read.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-stdio-write.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-strchrnul.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-strdup.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-strerror-override.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-strerror.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-strerror_r.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-stripslash.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-strnlen.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-strnlen1.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-strstr.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-strtok_r.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-sys_socket.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-tempname.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-time_r.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-unistd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-unsetenv.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-wctype-h.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-windows-mutex.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-windows-once.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-windows-recmutex.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-windows-rwlock.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-wmemchr.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-wmempcpy.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@glthread/$(DEPDIR)/libgnu_a-lock.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@glthread/$(DEPDIR)/libgnu_a-threadlib.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@malloc/$(DEPDIR)/libgnu_a-scratch_buffer_dupfree.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@malloc/$(DEPDIR)/libgnu_a-scratch_buffer_grow.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@malloc/$(DEPDIR)/libgnu_a-scratch_buffer_grow_preserve.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@malloc/$(DEPDIR)/libgnu_a-scratch_buffer_set_array_size.Po@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
@@ -2200,6 +2474,1896 @@ distclean-compile:
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+libgnu_a-accept.o: accept.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-accept.o -MD -MP -MF $(DEPDIR)/libgnu_a-accept.Tpo -c -o libgnu_a-accept.o `test -f 'accept.c' || echo '$(srcdir)/'`accept.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-accept.Tpo $(DEPDIR)/libgnu_a-accept.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='accept.c' object='libgnu_a-accept.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-accept.o `test -f 'accept.c' || echo '$(srcdir)/'`accept.c
+
+libgnu_a-accept.obj: accept.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-accept.obj -MD -MP -MF $(DEPDIR)/libgnu_a-accept.Tpo -c -o libgnu_a-accept.obj `if test -f 'accept.c'; then $(CYGPATH_W) 'accept.c'; else $(CYGPATH_W) '$(srcdir)/accept.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-accept.Tpo $(DEPDIR)/libgnu_a-accept.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='accept.c' object='libgnu_a-accept.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-accept.obj `if test -f 'accept.c'; then $(CYGPATH_W) 'accept.c'; else $(CYGPATH_W) '$(srcdir)/accept.c'; fi`
+
+libgnu_a-openat-proc.o: openat-proc.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-openat-proc.o -MD -MP -MF $(DEPDIR)/libgnu_a-openat-proc.Tpo -c -o libgnu_a-openat-proc.o `test -f 'openat-proc.c' || echo '$(srcdir)/'`openat-proc.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-openat-proc.Tpo $(DEPDIR)/libgnu_a-openat-proc.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='openat-proc.c' object='libgnu_a-openat-proc.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-openat-proc.o `test -f 'openat-proc.c' || echo '$(srcdir)/'`openat-proc.c
+
+libgnu_a-openat-proc.obj: openat-proc.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-openat-proc.obj -MD -MP -MF $(DEPDIR)/libgnu_a-openat-proc.Tpo -c -o libgnu_a-openat-proc.obj `if test -f 'openat-proc.c'; then $(CYGPATH_W) 'openat-proc.c'; else $(CYGPATH_W) '$(srcdir)/openat-proc.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-openat-proc.Tpo $(DEPDIR)/libgnu_a-openat-proc.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='openat-proc.c' object='libgnu_a-openat-proc.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-openat-proc.obj `if test -f 'openat-proc.c'; then $(CYGPATH_W) 'openat-proc.c'; else $(CYGPATH_W) '$(srcdir)/openat-proc.c'; fi`
+
+libgnu_a-basename-lgpl.o: basename-lgpl.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-basename-lgpl.o -MD -MP -MF $(DEPDIR)/libgnu_a-basename-lgpl.Tpo -c -o libgnu_a-basename-lgpl.o `test -f 'basename-lgpl.c' || echo '$(srcdir)/'`basename-lgpl.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-basename-lgpl.Tpo $(DEPDIR)/libgnu_a-basename-lgpl.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='basename-lgpl.c' object='libgnu_a-basename-lgpl.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-basename-lgpl.o `test -f 'basename-lgpl.c' || echo '$(srcdir)/'`basename-lgpl.c
+
+libgnu_a-basename-lgpl.obj: basename-lgpl.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-basename-lgpl.obj -MD -MP -MF $(DEPDIR)/libgnu_a-basename-lgpl.Tpo -c -o libgnu_a-basename-lgpl.obj `if test -f 'basename-lgpl.c'; then $(CYGPATH_W) 'basename-lgpl.c'; else $(CYGPATH_W) '$(srcdir)/basename-lgpl.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-basename-lgpl.Tpo $(DEPDIR)/libgnu_a-basename-lgpl.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='basename-lgpl.c' object='libgnu_a-basename-lgpl.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-basename-lgpl.obj `if test -f 'basename-lgpl.c'; then $(CYGPATH_W) 'basename-lgpl.c'; else $(CYGPATH_W) '$(srcdir)/basename-lgpl.c'; fi`
+
+libgnu_a-bind.o: bind.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-bind.o -MD -MP -MF $(DEPDIR)/libgnu_a-bind.Tpo -c -o libgnu_a-bind.o `test -f 'bind.c' || echo '$(srcdir)/'`bind.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-bind.Tpo $(DEPDIR)/libgnu_a-bind.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bind.c' object='libgnu_a-bind.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-bind.o `test -f 'bind.c' || echo '$(srcdir)/'`bind.c
+
+libgnu_a-bind.obj: bind.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-bind.obj -MD -MP -MF $(DEPDIR)/libgnu_a-bind.Tpo -c -o libgnu_a-bind.obj `if test -f 'bind.c'; then $(CYGPATH_W) 'bind.c'; else $(CYGPATH_W) '$(srcdir)/bind.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-bind.Tpo $(DEPDIR)/libgnu_a-bind.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bind.c' object='libgnu_a-bind.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-bind.obj `if test -f 'bind.c'; then $(CYGPATH_W) 'bind.c'; else $(CYGPATH_W) '$(srcdir)/bind.c'; fi`
+
+libgnu_a-btowc.o: btowc.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-btowc.o -MD -MP -MF $(DEPDIR)/libgnu_a-btowc.Tpo -c -o libgnu_a-btowc.o `test -f 'btowc.c' || echo '$(srcdir)/'`btowc.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-btowc.Tpo $(DEPDIR)/libgnu_a-btowc.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='btowc.c' object='libgnu_a-btowc.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-btowc.o `test -f 'btowc.c' || echo '$(srcdir)/'`btowc.c
+
+libgnu_a-btowc.obj: btowc.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-btowc.obj -MD -MP -MF $(DEPDIR)/libgnu_a-btowc.Tpo -c -o libgnu_a-btowc.obj `if test -f 'btowc.c'; then $(CYGPATH_W) 'btowc.c'; else $(CYGPATH_W) '$(srcdir)/btowc.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-btowc.Tpo $(DEPDIR)/libgnu_a-btowc.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='btowc.c' object='libgnu_a-btowc.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-btowc.obj `if test -f 'btowc.c'; then $(CYGPATH_W) 'btowc.c'; else $(CYGPATH_W) '$(srcdir)/btowc.c'; fi`
+
+libgnu_a-canonicalize-lgpl.o: canonicalize-lgpl.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-canonicalize-lgpl.o -MD -MP -MF $(DEPDIR)/libgnu_a-canonicalize-lgpl.Tpo -c -o libgnu_a-canonicalize-lgpl.o `test -f 'canonicalize-lgpl.c' || echo '$(srcdir)/'`canonicalize-lgpl.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-canonicalize-lgpl.Tpo $(DEPDIR)/libgnu_a-canonicalize-lgpl.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='canonicalize-lgpl.c' object='libgnu_a-canonicalize-lgpl.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-canonicalize-lgpl.o `test -f 'canonicalize-lgpl.c' || echo '$(srcdir)/'`canonicalize-lgpl.c
+
+libgnu_a-canonicalize-lgpl.obj: canonicalize-lgpl.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-canonicalize-lgpl.obj -MD -MP -MF $(DEPDIR)/libgnu_a-canonicalize-lgpl.Tpo -c -o libgnu_a-canonicalize-lgpl.obj `if test -f 'canonicalize-lgpl.c'; then $(CYGPATH_W) 'canonicalize-lgpl.c'; else $(CYGPATH_W) '$(srcdir)/canonicalize-lgpl.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-canonicalize-lgpl.Tpo $(DEPDIR)/libgnu_a-canonicalize-lgpl.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='canonicalize-lgpl.c' object='libgnu_a-canonicalize-lgpl.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-canonicalize-lgpl.obj `if test -f 'canonicalize-lgpl.c'; then $(CYGPATH_W) 'canonicalize-lgpl.c'; else $(CYGPATH_W) '$(srcdir)/canonicalize-lgpl.c'; fi`
+
+libgnu_a-chdir-long.o: chdir-long.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-chdir-long.o -MD -MP -MF $(DEPDIR)/libgnu_a-chdir-long.Tpo -c -o libgnu_a-chdir-long.o `test -f 'chdir-long.c' || echo '$(srcdir)/'`chdir-long.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-chdir-long.Tpo $(DEPDIR)/libgnu_a-chdir-long.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='chdir-long.c' object='libgnu_a-chdir-long.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-chdir-long.o `test -f 'chdir-long.c' || echo '$(srcdir)/'`chdir-long.c
+
+libgnu_a-chdir-long.obj: chdir-long.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-chdir-long.obj -MD -MP -MF $(DEPDIR)/libgnu_a-chdir-long.Tpo -c -o libgnu_a-chdir-long.obj `if test -f 'chdir-long.c'; then $(CYGPATH_W) 'chdir-long.c'; else $(CYGPATH_W) '$(srcdir)/chdir-long.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-chdir-long.Tpo $(DEPDIR)/libgnu_a-chdir-long.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='chdir-long.c' object='libgnu_a-chdir-long.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-chdir-long.obj `if test -f 'chdir-long.c'; then $(CYGPATH_W) 'chdir-long.c'; else $(CYGPATH_W) '$(srcdir)/chdir-long.c'; fi`
+
+libgnu_a-chown.o: chown.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-chown.o -MD -MP -MF $(DEPDIR)/libgnu_a-chown.Tpo -c -o libgnu_a-chown.o `test -f 'chown.c' || echo '$(srcdir)/'`chown.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-chown.Tpo $(DEPDIR)/libgnu_a-chown.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='chown.c' object='libgnu_a-chown.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-chown.o `test -f 'chown.c' || echo '$(srcdir)/'`chown.c
+
+libgnu_a-chown.obj: chown.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-chown.obj -MD -MP -MF $(DEPDIR)/libgnu_a-chown.Tpo -c -o libgnu_a-chown.obj `if test -f 'chown.c'; then $(CYGPATH_W) 'chown.c'; else $(CYGPATH_W) '$(srcdir)/chown.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-chown.Tpo $(DEPDIR)/libgnu_a-chown.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='chown.c' object='libgnu_a-chown.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-chown.obj `if test -f 'chown.c'; then $(CYGPATH_W) 'chown.c'; else $(CYGPATH_W) '$(srcdir)/chown.c'; fi`
+
+libgnu_a-fchown-stub.o: fchown-stub.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-fchown-stub.o -MD -MP -MF $(DEPDIR)/libgnu_a-fchown-stub.Tpo -c -o libgnu_a-fchown-stub.o `test -f 'fchown-stub.c' || echo '$(srcdir)/'`fchown-stub.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-fchown-stub.Tpo $(DEPDIR)/libgnu_a-fchown-stub.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fchown-stub.c' object='libgnu_a-fchown-stub.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-fchown-stub.o `test -f 'fchown-stub.c' || echo '$(srcdir)/'`fchown-stub.c
+
+libgnu_a-fchown-stub.obj: fchown-stub.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-fchown-stub.obj -MD -MP -MF $(DEPDIR)/libgnu_a-fchown-stub.Tpo -c -o libgnu_a-fchown-stub.obj `if test -f 'fchown-stub.c'; then $(CYGPATH_W) 'fchown-stub.c'; else $(CYGPATH_W) '$(srcdir)/fchown-stub.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-fchown-stub.Tpo $(DEPDIR)/libgnu_a-fchown-stub.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fchown-stub.c' object='libgnu_a-fchown-stub.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-fchown-stub.obj `if test -f 'fchown-stub.c'; then $(CYGPATH_W) 'fchown-stub.c'; else $(CYGPATH_W) '$(srcdir)/fchown-stub.c'; fi`
+
+libgnu_a-cloexec.o: cloexec.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-cloexec.o -MD -MP -MF $(DEPDIR)/libgnu_a-cloexec.Tpo -c -o libgnu_a-cloexec.o `test -f 'cloexec.c' || echo '$(srcdir)/'`cloexec.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-cloexec.Tpo $(DEPDIR)/libgnu_a-cloexec.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cloexec.c' object='libgnu_a-cloexec.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-cloexec.o `test -f 'cloexec.c' || echo '$(srcdir)/'`cloexec.c
+
+libgnu_a-cloexec.obj: cloexec.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-cloexec.obj -MD -MP -MF $(DEPDIR)/libgnu_a-cloexec.Tpo -c -o libgnu_a-cloexec.obj `if test -f 'cloexec.c'; then $(CYGPATH_W) 'cloexec.c'; else $(CYGPATH_W) '$(srcdir)/cloexec.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-cloexec.Tpo $(DEPDIR)/libgnu_a-cloexec.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cloexec.c' object='libgnu_a-cloexec.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-cloexec.obj `if test -f 'cloexec.c'; then $(CYGPATH_W) 'cloexec.c'; else $(CYGPATH_W) '$(srcdir)/cloexec.c'; fi`
+
+libgnu_a-close.o: close.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-close.o -MD -MP -MF $(DEPDIR)/libgnu_a-close.Tpo -c -o libgnu_a-close.o `test -f 'close.c' || echo '$(srcdir)/'`close.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-close.Tpo $(DEPDIR)/libgnu_a-close.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='close.c' object='libgnu_a-close.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-close.o `test -f 'close.c' || echo '$(srcdir)/'`close.c
+
+libgnu_a-close.obj: close.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-close.obj -MD -MP -MF $(DEPDIR)/libgnu_a-close.Tpo -c -o libgnu_a-close.obj `if test -f 'close.c'; then $(CYGPATH_W) 'close.c'; else $(CYGPATH_W) '$(srcdir)/close.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-close.Tpo $(DEPDIR)/libgnu_a-close.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='close.c' object='libgnu_a-close.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-close.obj `if test -f 'close.c'; then $(CYGPATH_W) 'close.c'; else $(CYGPATH_W) '$(srcdir)/close.c'; fi`
+
+libgnu_a-closedir.o: closedir.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-closedir.o -MD -MP -MF $(DEPDIR)/libgnu_a-closedir.Tpo -c -o libgnu_a-closedir.o `test -f 'closedir.c' || echo '$(srcdir)/'`closedir.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-closedir.Tpo $(DEPDIR)/libgnu_a-closedir.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='closedir.c' object='libgnu_a-closedir.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-closedir.o `test -f 'closedir.c' || echo '$(srcdir)/'`closedir.c
+
+libgnu_a-closedir.obj: closedir.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-closedir.obj -MD -MP -MF $(DEPDIR)/libgnu_a-closedir.Tpo -c -o libgnu_a-closedir.obj `if test -f 'closedir.c'; then $(CYGPATH_W) 'closedir.c'; else $(CYGPATH_W) '$(srcdir)/closedir.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-closedir.Tpo $(DEPDIR)/libgnu_a-closedir.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='closedir.c' object='libgnu_a-closedir.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-closedir.obj `if test -f 'closedir.c'; then $(CYGPATH_W) 'closedir.c'; else $(CYGPATH_W) '$(srcdir)/closedir.c'; fi`
+
+libgnu_a-connect.o: connect.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-connect.o -MD -MP -MF $(DEPDIR)/libgnu_a-connect.Tpo -c -o libgnu_a-connect.o `test -f 'connect.c' || echo '$(srcdir)/'`connect.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-connect.Tpo $(DEPDIR)/libgnu_a-connect.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='connect.c' object='libgnu_a-connect.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-connect.o `test -f 'connect.c' || echo '$(srcdir)/'`connect.c
+
+libgnu_a-connect.obj: connect.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-connect.obj -MD -MP -MF $(DEPDIR)/libgnu_a-connect.Tpo -c -o libgnu_a-connect.obj `if test -f 'connect.c'; then $(CYGPATH_W) 'connect.c'; else $(CYGPATH_W) '$(srcdir)/connect.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-connect.Tpo $(DEPDIR)/libgnu_a-connect.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='connect.c' object='libgnu_a-connect.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-connect.obj `if test -f 'connect.c'; then $(CYGPATH_W) 'connect.c'; else $(CYGPATH_W) '$(srcdir)/connect.c'; fi`
+
+libgnu_a-count-one-bits.o: count-one-bits.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-count-one-bits.o -MD -MP -MF $(DEPDIR)/libgnu_a-count-one-bits.Tpo -c -o libgnu_a-count-one-bits.o `test -f 'count-one-bits.c' || echo '$(srcdir)/'`count-one-bits.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-count-one-bits.Tpo $(DEPDIR)/libgnu_a-count-one-bits.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='count-one-bits.c' object='libgnu_a-count-one-bits.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-count-one-bits.o `test -f 'count-one-bits.c' || echo '$(srcdir)/'`count-one-bits.c
+
+libgnu_a-count-one-bits.obj: count-one-bits.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-count-one-bits.obj -MD -MP -MF $(DEPDIR)/libgnu_a-count-one-bits.Tpo -c -o libgnu_a-count-one-bits.obj `if test -f 'count-one-bits.c'; then $(CYGPATH_W) 'count-one-bits.c'; else $(CYGPATH_W) '$(srcdir)/count-one-bits.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-count-one-bits.Tpo $(DEPDIR)/libgnu_a-count-one-bits.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='count-one-bits.c' object='libgnu_a-count-one-bits.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-count-one-bits.obj `if test -f 'count-one-bits.c'; then $(CYGPATH_W) 'count-one-bits.c'; else $(CYGPATH_W) '$(srcdir)/count-one-bits.c'; fi`
+
+libgnu_a-dirfd.o: dirfd.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-dirfd.o -MD -MP -MF $(DEPDIR)/libgnu_a-dirfd.Tpo -c -o libgnu_a-dirfd.o `test -f 'dirfd.c' || echo '$(srcdir)/'`dirfd.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-dirfd.Tpo $(DEPDIR)/libgnu_a-dirfd.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dirfd.c' object='libgnu_a-dirfd.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-dirfd.o `test -f 'dirfd.c' || echo '$(srcdir)/'`dirfd.c
+
+libgnu_a-dirfd.obj: dirfd.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-dirfd.obj -MD -MP -MF $(DEPDIR)/libgnu_a-dirfd.Tpo -c -o libgnu_a-dirfd.obj `if test -f 'dirfd.c'; then $(CYGPATH_W) 'dirfd.c'; else $(CYGPATH_W) '$(srcdir)/dirfd.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-dirfd.Tpo $(DEPDIR)/libgnu_a-dirfd.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dirfd.c' object='libgnu_a-dirfd.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-dirfd.obj `if test -f 'dirfd.c'; then $(CYGPATH_W) 'dirfd.c'; else $(CYGPATH_W) '$(srcdir)/dirfd.c'; fi`
+
+libgnu_a-dirname-lgpl.o: dirname-lgpl.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-dirname-lgpl.o -MD -MP -MF $(DEPDIR)/libgnu_a-dirname-lgpl.Tpo -c -o libgnu_a-dirname-lgpl.o `test -f 'dirname-lgpl.c' || echo '$(srcdir)/'`dirname-lgpl.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-dirname-lgpl.Tpo $(DEPDIR)/libgnu_a-dirname-lgpl.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dirname-lgpl.c' object='libgnu_a-dirname-lgpl.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-dirname-lgpl.o `test -f 'dirname-lgpl.c' || echo '$(srcdir)/'`dirname-lgpl.c
+
+libgnu_a-dirname-lgpl.obj: dirname-lgpl.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-dirname-lgpl.obj -MD -MP -MF $(DEPDIR)/libgnu_a-dirname-lgpl.Tpo -c -o libgnu_a-dirname-lgpl.obj `if test -f 'dirname-lgpl.c'; then $(CYGPATH_W) 'dirname-lgpl.c'; else $(CYGPATH_W) '$(srcdir)/dirname-lgpl.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-dirname-lgpl.Tpo $(DEPDIR)/libgnu_a-dirname-lgpl.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dirname-lgpl.c' object='libgnu_a-dirname-lgpl.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-dirname-lgpl.obj `if test -f 'dirname-lgpl.c'; then $(CYGPATH_W) 'dirname-lgpl.c'; else $(CYGPATH_W) '$(srcdir)/dirname-lgpl.c'; fi`
+
+libgnu_a-stripslash.o: stripslash.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-stripslash.o -MD -MP -MF $(DEPDIR)/libgnu_a-stripslash.Tpo -c -o libgnu_a-stripslash.o `test -f 'stripslash.c' || echo '$(srcdir)/'`stripslash.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-stripslash.Tpo $(DEPDIR)/libgnu_a-stripslash.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='stripslash.c' object='libgnu_a-stripslash.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-stripslash.o `test -f 'stripslash.c' || echo '$(srcdir)/'`stripslash.c
+
+libgnu_a-stripslash.obj: stripslash.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-stripslash.obj -MD -MP -MF $(DEPDIR)/libgnu_a-stripslash.Tpo -c -o libgnu_a-stripslash.obj `if test -f 'stripslash.c'; then $(CYGPATH_W) 'stripslash.c'; else $(CYGPATH_W) '$(srcdir)/stripslash.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-stripslash.Tpo $(DEPDIR)/libgnu_a-stripslash.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='stripslash.c' object='libgnu_a-stripslash.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-stripslash.obj `if test -f 'stripslash.c'; then $(CYGPATH_W) 'stripslash.c'; else $(CYGPATH_W) '$(srcdir)/stripslash.c'; fi`
+
+libgnu_a-dup.o: dup.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-dup.o -MD -MP -MF $(DEPDIR)/libgnu_a-dup.Tpo -c -o libgnu_a-dup.o `test -f 'dup.c' || echo '$(srcdir)/'`dup.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-dup.Tpo $(DEPDIR)/libgnu_a-dup.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dup.c' object='libgnu_a-dup.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-dup.o `test -f 'dup.c' || echo '$(srcdir)/'`dup.c
+
+libgnu_a-dup.obj: dup.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-dup.obj -MD -MP -MF $(DEPDIR)/libgnu_a-dup.Tpo -c -o libgnu_a-dup.obj `if test -f 'dup.c'; then $(CYGPATH_W) 'dup.c'; else $(CYGPATH_W) '$(srcdir)/dup.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-dup.Tpo $(DEPDIR)/libgnu_a-dup.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dup.c' object='libgnu_a-dup.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-dup.obj `if test -f 'dup.c'; then $(CYGPATH_W) 'dup.c'; else $(CYGPATH_W) '$(srcdir)/dup.c'; fi`
+
+libgnu_a-dup2.o: dup2.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-dup2.o -MD -MP -MF $(DEPDIR)/libgnu_a-dup2.Tpo -c -o libgnu_a-dup2.o `test -f 'dup2.c' || echo '$(srcdir)/'`dup2.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-dup2.Tpo $(DEPDIR)/libgnu_a-dup2.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dup2.c' object='libgnu_a-dup2.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-dup2.o `test -f 'dup2.c' || echo '$(srcdir)/'`dup2.c
+
+libgnu_a-dup2.obj: dup2.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-dup2.obj -MD -MP -MF $(DEPDIR)/libgnu_a-dup2.Tpo -c -o libgnu_a-dup2.obj `if test -f 'dup2.c'; then $(CYGPATH_W) 'dup2.c'; else $(CYGPATH_W) '$(srcdir)/dup2.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-dup2.Tpo $(DEPDIR)/libgnu_a-dup2.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dup2.c' object='libgnu_a-dup2.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-dup2.obj `if test -f 'dup2.c'; then $(CYGPATH_W) 'dup2.c'; else $(CYGPATH_W) '$(srcdir)/dup2.c'; fi`
+
+libgnu_a-error.o: error.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-error.o -MD -MP -MF $(DEPDIR)/libgnu_a-error.Tpo -c -o libgnu_a-error.o `test -f 'error.c' || echo '$(srcdir)/'`error.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-error.Tpo $(DEPDIR)/libgnu_a-error.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='error.c' object='libgnu_a-error.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-error.o `test -f 'error.c' || echo '$(srcdir)/'`error.c
+
+libgnu_a-error.obj: error.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-error.obj -MD -MP -MF $(DEPDIR)/libgnu_a-error.Tpo -c -o libgnu_a-error.obj `if test -f 'error.c'; then $(CYGPATH_W) 'error.c'; else $(CYGPATH_W) '$(srcdir)/error.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-error.Tpo $(DEPDIR)/libgnu_a-error.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='error.c' object='libgnu_a-error.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-error.obj `if test -f 'error.c'; then $(CYGPATH_W) 'error.c'; else $(CYGPATH_W) '$(srcdir)/error.c'; fi`
+
+libgnu_a-exitfail.o: exitfail.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-exitfail.o -MD -MP -MF $(DEPDIR)/libgnu_a-exitfail.Tpo -c -o libgnu_a-exitfail.o `test -f 'exitfail.c' || echo '$(srcdir)/'`exitfail.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-exitfail.Tpo $(DEPDIR)/libgnu_a-exitfail.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='exitfail.c' object='libgnu_a-exitfail.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-exitfail.o `test -f 'exitfail.c' || echo '$(srcdir)/'`exitfail.c
+
+libgnu_a-exitfail.obj: exitfail.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-exitfail.obj -MD -MP -MF $(DEPDIR)/libgnu_a-exitfail.Tpo -c -o libgnu_a-exitfail.obj `if test -f 'exitfail.c'; then $(CYGPATH_W) 'exitfail.c'; else $(CYGPATH_W) '$(srcdir)/exitfail.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-exitfail.Tpo $(DEPDIR)/libgnu_a-exitfail.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='exitfail.c' object='libgnu_a-exitfail.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-exitfail.obj `if test -f 'exitfail.c'; then $(CYGPATH_W) 'exitfail.c'; else $(CYGPATH_W) '$(srcdir)/exitfail.c'; fi`
+
+libgnu_a-fchdir.o: fchdir.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-fchdir.o -MD -MP -MF $(DEPDIR)/libgnu_a-fchdir.Tpo -c -o libgnu_a-fchdir.o `test -f 'fchdir.c' || echo '$(srcdir)/'`fchdir.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-fchdir.Tpo $(DEPDIR)/libgnu_a-fchdir.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fchdir.c' object='libgnu_a-fchdir.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-fchdir.o `test -f 'fchdir.c' || echo '$(srcdir)/'`fchdir.c
+
+libgnu_a-fchdir.obj: fchdir.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-fchdir.obj -MD -MP -MF $(DEPDIR)/libgnu_a-fchdir.Tpo -c -o libgnu_a-fchdir.obj `if test -f 'fchdir.c'; then $(CYGPATH_W) 'fchdir.c'; else $(CYGPATH_W) '$(srcdir)/fchdir.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-fchdir.Tpo $(DEPDIR)/libgnu_a-fchdir.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fchdir.c' object='libgnu_a-fchdir.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-fchdir.obj `if test -f 'fchdir.c'; then $(CYGPATH_W) 'fchdir.c'; else $(CYGPATH_W) '$(srcdir)/fchdir.c'; fi`
+
+libgnu_a-fcntl.o: fcntl.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-fcntl.o -MD -MP -MF $(DEPDIR)/libgnu_a-fcntl.Tpo -c -o libgnu_a-fcntl.o `test -f 'fcntl.c' || echo '$(srcdir)/'`fcntl.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-fcntl.Tpo $(DEPDIR)/libgnu_a-fcntl.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fcntl.c' object='libgnu_a-fcntl.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-fcntl.o `test -f 'fcntl.c' || echo '$(srcdir)/'`fcntl.c
+
+libgnu_a-fcntl.obj: fcntl.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-fcntl.obj -MD -MP -MF $(DEPDIR)/libgnu_a-fcntl.Tpo -c -o libgnu_a-fcntl.obj `if test -f 'fcntl.c'; then $(CYGPATH_W) 'fcntl.c'; else $(CYGPATH_W) '$(srcdir)/fcntl.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-fcntl.Tpo $(DEPDIR)/libgnu_a-fcntl.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fcntl.c' object='libgnu_a-fcntl.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-fcntl.obj `if test -f 'fcntl.c'; then $(CYGPATH_W) 'fcntl.c'; else $(CYGPATH_W) '$(srcdir)/fcntl.c'; fi`
+
+libgnu_a-fd-hook.o: fd-hook.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-fd-hook.o -MD -MP -MF $(DEPDIR)/libgnu_a-fd-hook.Tpo -c -o libgnu_a-fd-hook.o `test -f 'fd-hook.c' || echo '$(srcdir)/'`fd-hook.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-fd-hook.Tpo $(DEPDIR)/libgnu_a-fd-hook.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fd-hook.c' object='libgnu_a-fd-hook.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-fd-hook.o `test -f 'fd-hook.c' || echo '$(srcdir)/'`fd-hook.c
+
+libgnu_a-fd-hook.obj: fd-hook.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-fd-hook.obj -MD -MP -MF $(DEPDIR)/libgnu_a-fd-hook.Tpo -c -o libgnu_a-fd-hook.obj `if test -f 'fd-hook.c'; then $(CYGPATH_W) 'fd-hook.c'; else $(CYGPATH_W) '$(srcdir)/fd-hook.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-fd-hook.Tpo $(DEPDIR)/libgnu_a-fd-hook.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fd-hook.c' object='libgnu_a-fd-hook.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-fd-hook.obj `if test -f 'fd-hook.c'; then $(CYGPATH_W) 'fd-hook.c'; else $(CYGPATH_W) '$(srcdir)/fd-hook.c'; fi`
+
+libgnu_a-fd-safer-flag.o: fd-safer-flag.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-fd-safer-flag.o -MD -MP -MF $(DEPDIR)/libgnu_a-fd-safer-flag.Tpo -c -o libgnu_a-fd-safer-flag.o `test -f 'fd-safer-flag.c' || echo '$(srcdir)/'`fd-safer-flag.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-fd-safer-flag.Tpo $(DEPDIR)/libgnu_a-fd-safer-flag.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fd-safer-flag.c' object='libgnu_a-fd-safer-flag.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-fd-safer-flag.o `test -f 'fd-safer-flag.c' || echo '$(srcdir)/'`fd-safer-flag.c
+
+libgnu_a-fd-safer-flag.obj: fd-safer-flag.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-fd-safer-flag.obj -MD -MP -MF $(DEPDIR)/libgnu_a-fd-safer-flag.Tpo -c -o libgnu_a-fd-safer-flag.obj `if test -f 'fd-safer-flag.c'; then $(CYGPATH_W) 'fd-safer-flag.c'; else $(CYGPATH_W) '$(srcdir)/fd-safer-flag.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-fd-safer-flag.Tpo $(DEPDIR)/libgnu_a-fd-safer-flag.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fd-safer-flag.c' object='libgnu_a-fd-safer-flag.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-fd-safer-flag.obj `if test -f 'fd-safer-flag.c'; then $(CYGPATH_W) 'fd-safer-flag.c'; else $(CYGPATH_W) '$(srcdir)/fd-safer-flag.c'; fi`
+
+libgnu_a-dup-safer-flag.o: dup-safer-flag.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-dup-safer-flag.o -MD -MP -MF $(DEPDIR)/libgnu_a-dup-safer-flag.Tpo -c -o libgnu_a-dup-safer-flag.o `test -f 'dup-safer-flag.c' || echo '$(srcdir)/'`dup-safer-flag.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-dup-safer-flag.Tpo $(DEPDIR)/libgnu_a-dup-safer-flag.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dup-safer-flag.c' object='libgnu_a-dup-safer-flag.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-dup-safer-flag.o `test -f 'dup-safer-flag.c' || echo '$(srcdir)/'`dup-safer-flag.c
+
+libgnu_a-dup-safer-flag.obj: dup-safer-flag.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-dup-safer-flag.obj -MD -MP -MF $(DEPDIR)/libgnu_a-dup-safer-flag.Tpo -c -o libgnu_a-dup-safer-flag.obj `if test -f 'dup-safer-flag.c'; then $(CYGPATH_W) 'dup-safer-flag.c'; else $(CYGPATH_W) '$(srcdir)/dup-safer-flag.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-dup-safer-flag.Tpo $(DEPDIR)/libgnu_a-dup-safer-flag.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dup-safer-flag.c' object='libgnu_a-dup-safer-flag.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-dup-safer-flag.obj `if test -f 'dup-safer-flag.c'; then $(CYGPATH_W) 'dup-safer-flag.c'; else $(CYGPATH_W) '$(srcdir)/dup-safer-flag.c'; fi`
+
+libgnu_a-fdopendir.o: fdopendir.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-fdopendir.o -MD -MP -MF $(DEPDIR)/libgnu_a-fdopendir.Tpo -c -o libgnu_a-fdopendir.o `test -f 'fdopendir.c' || echo '$(srcdir)/'`fdopendir.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-fdopendir.Tpo $(DEPDIR)/libgnu_a-fdopendir.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fdopendir.c' object='libgnu_a-fdopendir.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-fdopendir.o `test -f 'fdopendir.c' || echo '$(srcdir)/'`fdopendir.c
+
+libgnu_a-fdopendir.obj: fdopendir.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-fdopendir.obj -MD -MP -MF $(DEPDIR)/libgnu_a-fdopendir.Tpo -c -o libgnu_a-fdopendir.obj `if test -f 'fdopendir.c'; then $(CYGPATH_W) 'fdopendir.c'; else $(CYGPATH_W) '$(srcdir)/fdopendir.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-fdopendir.Tpo $(DEPDIR)/libgnu_a-fdopendir.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fdopendir.c' object='libgnu_a-fdopendir.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-fdopendir.obj `if test -f 'fdopendir.c'; then $(CYGPATH_W) 'fdopendir.c'; else $(CYGPATH_W) '$(srcdir)/fdopendir.c'; fi`
+
+libgnu_a-ffs.o: ffs.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-ffs.o -MD -MP -MF $(DEPDIR)/libgnu_a-ffs.Tpo -c -o libgnu_a-ffs.o `test -f 'ffs.c' || echo '$(srcdir)/'`ffs.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-ffs.Tpo $(DEPDIR)/libgnu_a-ffs.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ffs.c' object='libgnu_a-ffs.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-ffs.o `test -f 'ffs.c' || echo '$(srcdir)/'`ffs.c
+
+libgnu_a-ffs.obj: ffs.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-ffs.obj -MD -MP -MF $(DEPDIR)/libgnu_a-ffs.Tpo -c -o libgnu_a-ffs.obj `if test -f 'ffs.c'; then $(CYGPATH_W) 'ffs.c'; else $(CYGPATH_W) '$(srcdir)/ffs.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-ffs.Tpo $(DEPDIR)/libgnu_a-ffs.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ffs.c' object='libgnu_a-ffs.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-ffs.obj `if test -f 'ffs.c'; then $(CYGPATH_W) 'ffs.c'; else $(CYGPATH_W) '$(srcdir)/ffs.c'; fi`
+
+libgnu_a-filenamecat-lgpl.o: filenamecat-lgpl.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-filenamecat-lgpl.o -MD -MP -MF $(DEPDIR)/libgnu_a-filenamecat-lgpl.Tpo -c -o libgnu_a-filenamecat-lgpl.o `test -f 'filenamecat-lgpl.c' || echo '$(srcdir)/'`filenamecat-lgpl.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-filenamecat-lgpl.Tpo $(DEPDIR)/libgnu_a-filenamecat-lgpl.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='filenamecat-lgpl.c' object='libgnu_a-filenamecat-lgpl.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-filenamecat-lgpl.o `test -f 'filenamecat-lgpl.c' || echo '$(srcdir)/'`filenamecat-lgpl.c
+
+libgnu_a-filenamecat-lgpl.obj: filenamecat-lgpl.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-filenamecat-lgpl.obj -MD -MP -MF $(DEPDIR)/libgnu_a-filenamecat-lgpl.Tpo -c -o libgnu_a-filenamecat-lgpl.obj `if test -f 'filenamecat-lgpl.c'; then $(CYGPATH_W) 'filenamecat-lgpl.c'; else $(CYGPATH_W) '$(srcdir)/filenamecat-lgpl.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-filenamecat-lgpl.Tpo $(DEPDIR)/libgnu_a-filenamecat-lgpl.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='filenamecat-lgpl.c' object='libgnu_a-filenamecat-lgpl.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-filenamecat-lgpl.obj `if test -f 'filenamecat-lgpl.c'; then $(CYGPATH_W) 'filenamecat-lgpl.c'; else $(CYGPATH_W) '$(srcdir)/filenamecat-lgpl.c'; fi`
+
+libgnu_a-float.o: float.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-float.o -MD -MP -MF $(DEPDIR)/libgnu_a-float.Tpo -c -o libgnu_a-float.o `test -f 'float.c' || echo '$(srcdir)/'`float.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-float.Tpo $(DEPDIR)/libgnu_a-float.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='float.c' object='libgnu_a-float.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-float.o `test -f 'float.c' || echo '$(srcdir)/'`float.c
+
+libgnu_a-float.obj: float.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-float.obj -MD -MP -MF $(DEPDIR)/libgnu_a-float.Tpo -c -o libgnu_a-float.obj `if test -f 'float.c'; then $(CYGPATH_W) 'float.c'; else $(CYGPATH_W) '$(srcdir)/float.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-float.Tpo $(DEPDIR)/libgnu_a-float.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='float.c' object='libgnu_a-float.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-float.obj `if test -f 'float.c'; then $(CYGPATH_W) 'float.c'; else $(CYGPATH_W) '$(srcdir)/float.c'; fi`
+
+libgnu_a-itold.o: itold.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-itold.o -MD -MP -MF $(DEPDIR)/libgnu_a-itold.Tpo -c -o libgnu_a-itold.o `test -f 'itold.c' || echo '$(srcdir)/'`itold.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-itold.Tpo $(DEPDIR)/libgnu_a-itold.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='itold.c' object='libgnu_a-itold.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-itold.o `test -f 'itold.c' || echo '$(srcdir)/'`itold.c
+
+libgnu_a-itold.obj: itold.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-itold.obj -MD -MP -MF $(DEPDIR)/libgnu_a-itold.Tpo -c -o libgnu_a-itold.obj `if test -f 'itold.c'; then $(CYGPATH_W) 'itold.c'; else $(CYGPATH_W) '$(srcdir)/itold.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-itold.Tpo $(DEPDIR)/libgnu_a-itold.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='itold.c' object='libgnu_a-itold.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-itold.obj `if test -f 'itold.c'; then $(CYGPATH_W) 'itold.c'; else $(CYGPATH_W) '$(srcdir)/itold.c'; fi`
+
+libgnu_a-free.o: free.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-free.o -MD -MP -MF $(DEPDIR)/libgnu_a-free.Tpo -c -o libgnu_a-free.o `test -f 'free.c' || echo '$(srcdir)/'`free.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-free.Tpo $(DEPDIR)/libgnu_a-free.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='free.c' object='libgnu_a-free.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-free.o `test -f 'free.c' || echo '$(srcdir)/'`free.c
+
+libgnu_a-free.obj: free.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-free.obj -MD -MP -MF $(DEPDIR)/libgnu_a-free.Tpo -c -o libgnu_a-free.obj `if test -f 'free.c'; then $(CYGPATH_W) 'free.c'; else $(CYGPATH_W) '$(srcdir)/free.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-free.Tpo $(DEPDIR)/libgnu_a-free.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='free.c' object='libgnu_a-free.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-free.obj `if test -f 'free.c'; then $(CYGPATH_W) 'free.c'; else $(CYGPATH_W) '$(srcdir)/free.c'; fi`
+
+libgnu_a-fstat.o: fstat.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-fstat.o -MD -MP -MF $(DEPDIR)/libgnu_a-fstat.Tpo -c -o libgnu_a-fstat.o `test -f 'fstat.c' || echo '$(srcdir)/'`fstat.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-fstat.Tpo $(DEPDIR)/libgnu_a-fstat.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fstat.c' object='libgnu_a-fstat.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-fstat.o `test -f 'fstat.c' || echo '$(srcdir)/'`fstat.c
+
+libgnu_a-fstat.obj: fstat.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-fstat.obj -MD -MP -MF $(DEPDIR)/libgnu_a-fstat.Tpo -c -o libgnu_a-fstat.obj `if test -f 'fstat.c'; then $(CYGPATH_W) 'fstat.c'; else $(CYGPATH_W) '$(srcdir)/fstat.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-fstat.Tpo $(DEPDIR)/libgnu_a-fstat.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fstat.c' object='libgnu_a-fstat.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-fstat.obj `if test -f 'fstat.c'; then $(CYGPATH_W) 'fstat.c'; else $(CYGPATH_W) '$(srcdir)/fstat.c'; fi`
+
+libgnu_a-fstatat.o: fstatat.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-fstatat.o -MD -MP -MF $(DEPDIR)/libgnu_a-fstatat.Tpo -c -o libgnu_a-fstatat.o `test -f 'fstatat.c' || echo '$(srcdir)/'`fstatat.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-fstatat.Tpo $(DEPDIR)/libgnu_a-fstatat.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fstatat.c' object='libgnu_a-fstatat.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-fstatat.o `test -f 'fstatat.c' || echo '$(srcdir)/'`fstatat.c
+
+libgnu_a-fstatat.obj: fstatat.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-fstatat.obj -MD -MP -MF $(DEPDIR)/libgnu_a-fstatat.Tpo -c -o libgnu_a-fstatat.obj `if test -f 'fstatat.c'; then $(CYGPATH_W) 'fstatat.c'; else $(CYGPATH_W) '$(srcdir)/fstatat.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-fstatat.Tpo $(DEPDIR)/libgnu_a-fstatat.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fstatat.c' object='libgnu_a-fstatat.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-fstatat.obj `if test -f 'fstatat.c'; then $(CYGPATH_W) 'fstatat.c'; else $(CYGPATH_W) '$(srcdir)/fstatat.c'; fi`
+
+libgnu_a-getcwd.o: getcwd.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-getcwd.o -MD -MP -MF $(DEPDIR)/libgnu_a-getcwd.Tpo -c -o libgnu_a-getcwd.o `test -f 'getcwd.c' || echo '$(srcdir)/'`getcwd.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-getcwd.Tpo $(DEPDIR)/libgnu_a-getcwd.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='getcwd.c' object='libgnu_a-getcwd.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-getcwd.o `test -f 'getcwd.c' || echo '$(srcdir)/'`getcwd.c
+
+libgnu_a-getcwd.obj: getcwd.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-getcwd.obj -MD -MP -MF $(DEPDIR)/libgnu_a-getcwd.Tpo -c -o libgnu_a-getcwd.obj `if test -f 'getcwd.c'; then $(CYGPATH_W) 'getcwd.c'; else $(CYGPATH_W) '$(srcdir)/getcwd.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-getcwd.Tpo $(DEPDIR)/libgnu_a-getcwd.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='getcwd.c' object='libgnu_a-getcwd.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-getcwd.obj `if test -f 'getcwd.c'; then $(CYGPATH_W) 'getcwd.c'; else $(CYGPATH_W) '$(srcdir)/getcwd.c'; fi`
+
+libgnu_a-getcwd-lgpl.o: getcwd-lgpl.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-getcwd-lgpl.o -MD -MP -MF $(DEPDIR)/libgnu_a-getcwd-lgpl.Tpo -c -o libgnu_a-getcwd-lgpl.o `test -f 'getcwd-lgpl.c' || echo '$(srcdir)/'`getcwd-lgpl.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-getcwd-lgpl.Tpo $(DEPDIR)/libgnu_a-getcwd-lgpl.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='getcwd-lgpl.c' object='libgnu_a-getcwd-lgpl.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-getcwd-lgpl.o `test -f 'getcwd-lgpl.c' || echo '$(srcdir)/'`getcwd-lgpl.c
+
+libgnu_a-getcwd-lgpl.obj: getcwd-lgpl.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-getcwd-lgpl.obj -MD -MP -MF $(DEPDIR)/libgnu_a-getcwd-lgpl.Tpo -c -o libgnu_a-getcwd-lgpl.obj `if test -f 'getcwd-lgpl.c'; then $(CYGPATH_W) 'getcwd-lgpl.c'; else $(CYGPATH_W) '$(srcdir)/getcwd-lgpl.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-getcwd-lgpl.Tpo $(DEPDIR)/libgnu_a-getcwd-lgpl.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='getcwd-lgpl.c' object='libgnu_a-getcwd-lgpl.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-getcwd-lgpl.obj `if test -f 'getcwd-lgpl.c'; then $(CYGPATH_W) 'getcwd-lgpl.c'; else $(CYGPATH_W) '$(srcdir)/getcwd-lgpl.c'; fi`
+
+libgnu_a-getdelim.o: getdelim.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-getdelim.o -MD -MP -MF $(DEPDIR)/libgnu_a-getdelim.Tpo -c -o libgnu_a-getdelim.o `test -f 'getdelim.c' || echo '$(srcdir)/'`getdelim.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-getdelim.Tpo $(DEPDIR)/libgnu_a-getdelim.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='getdelim.c' object='libgnu_a-getdelim.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-getdelim.o `test -f 'getdelim.c' || echo '$(srcdir)/'`getdelim.c
+
+libgnu_a-getdelim.obj: getdelim.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-getdelim.obj -MD -MP -MF $(DEPDIR)/libgnu_a-getdelim.Tpo -c -o libgnu_a-getdelim.obj `if test -f 'getdelim.c'; then $(CYGPATH_W) 'getdelim.c'; else $(CYGPATH_W) '$(srcdir)/getdelim.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-getdelim.Tpo $(DEPDIR)/libgnu_a-getdelim.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='getdelim.c' object='libgnu_a-getdelim.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-getdelim.obj `if test -f 'getdelim.c'; then $(CYGPATH_W) 'getdelim.c'; else $(CYGPATH_W) '$(srcdir)/getdelim.c'; fi`
+
+libgnu_a-getdtablesize.o: getdtablesize.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-getdtablesize.o -MD -MP -MF $(DEPDIR)/libgnu_a-getdtablesize.Tpo -c -o libgnu_a-getdtablesize.o `test -f 'getdtablesize.c' || echo '$(srcdir)/'`getdtablesize.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-getdtablesize.Tpo $(DEPDIR)/libgnu_a-getdtablesize.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='getdtablesize.c' object='libgnu_a-getdtablesize.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-getdtablesize.o `test -f 'getdtablesize.c' || echo '$(srcdir)/'`getdtablesize.c
+
+libgnu_a-getdtablesize.obj: getdtablesize.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-getdtablesize.obj -MD -MP -MF $(DEPDIR)/libgnu_a-getdtablesize.Tpo -c -o libgnu_a-getdtablesize.obj `if test -f 'getdtablesize.c'; then $(CYGPATH_W) 'getdtablesize.c'; else $(CYGPATH_W) '$(srcdir)/getdtablesize.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-getdtablesize.Tpo $(DEPDIR)/libgnu_a-getdtablesize.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='getdtablesize.c' object='libgnu_a-getdtablesize.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-getdtablesize.obj `if test -f 'getdtablesize.c'; then $(CYGPATH_W) 'getdtablesize.c'; else $(CYGPATH_W) '$(srcdir)/getdtablesize.c'; fi`
+
+libgnu_a-getline.o: getline.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-getline.o -MD -MP -MF $(DEPDIR)/libgnu_a-getline.Tpo -c -o libgnu_a-getline.o `test -f 'getline.c' || echo '$(srcdir)/'`getline.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-getline.Tpo $(DEPDIR)/libgnu_a-getline.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='getline.c' object='libgnu_a-getline.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-getline.o `test -f 'getline.c' || echo '$(srcdir)/'`getline.c
+
+libgnu_a-getline.obj: getline.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-getline.obj -MD -MP -MF $(DEPDIR)/libgnu_a-getline.Tpo -c -o libgnu_a-getline.obj `if test -f 'getline.c'; then $(CYGPATH_W) 'getline.c'; else $(CYGPATH_W) '$(srcdir)/getline.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-getline.Tpo $(DEPDIR)/libgnu_a-getline.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='getline.c' object='libgnu_a-getline.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-getline.obj `if test -f 'getline.c'; then $(CYGPATH_W) 'getline.c'; else $(CYGPATH_W) '$(srcdir)/getline.c'; fi`
+
+libgnu_a-getlogin_r.o: getlogin_r.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-getlogin_r.o -MD -MP -MF $(DEPDIR)/libgnu_a-getlogin_r.Tpo -c -o libgnu_a-getlogin_r.o `test -f 'getlogin_r.c' || echo '$(srcdir)/'`getlogin_r.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-getlogin_r.Tpo $(DEPDIR)/libgnu_a-getlogin_r.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='getlogin_r.c' object='libgnu_a-getlogin_r.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-getlogin_r.o `test -f 'getlogin_r.c' || echo '$(srcdir)/'`getlogin_r.c
+
+libgnu_a-getlogin_r.obj: getlogin_r.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-getlogin_r.obj -MD -MP -MF $(DEPDIR)/libgnu_a-getlogin_r.Tpo -c -o libgnu_a-getlogin_r.obj `if test -f 'getlogin_r.c'; then $(CYGPATH_W) 'getlogin_r.c'; else $(CYGPATH_W) '$(srcdir)/getlogin_r.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-getlogin_r.Tpo $(DEPDIR)/libgnu_a-getlogin_r.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='getlogin_r.c' object='libgnu_a-getlogin_r.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-getlogin_r.obj `if test -f 'getlogin_r.c'; then $(CYGPATH_W) 'getlogin_r.c'; else $(CYGPATH_W) '$(srcdir)/getlogin_r.c'; fi`
+
+libgnu_a-getprogname.o: getprogname.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-getprogname.o -MD -MP -MF $(DEPDIR)/libgnu_a-getprogname.Tpo -c -o libgnu_a-getprogname.o `test -f 'getprogname.c' || echo '$(srcdir)/'`getprogname.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-getprogname.Tpo $(DEPDIR)/libgnu_a-getprogname.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='getprogname.c' object='libgnu_a-getprogname.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-getprogname.o `test -f 'getprogname.c' || echo '$(srcdir)/'`getprogname.c
+
+libgnu_a-getprogname.obj: getprogname.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-getprogname.obj -MD -MP -MF $(DEPDIR)/libgnu_a-getprogname.Tpo -c -o libgnu_a-getprogname.obj `if test -f 'getprogname.c'; then $(CYGPATH_W) 'getprogname.c'; else $(CYGPATH_W) '$(srcdir)/getprogname.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-getprogname.Tpo $(DEPDIR)/libgnu_a-getprogname.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='getprogname.c' object='libgnu_a-getprogname.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-getprogname.obj `if test -f 'getprogname.c'; then $(CYGPATH_W) 'getprogname.c'; else $(CYGPATH_W) '$(srcdir)/getprogname.c'; fi`
+
+libgnu_a-getrandom.o: getrandom.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-getrandom.o -MD -MP -MF $(DEPDIR)/libgnu_a-getrandom.Tpo -c -o libgnu_a-getrandom.o `test -f 'getrandom.c' || echo '$(srcdir)/'`getrandom.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-getrandom.Tpo $(DEPDIR)/libgnu_a-getrandom.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='getrandom.c' object='libgnu_a-getrandom.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-getrandom.o `test -f 'getrandom.c' || echo '$(srcdir)/'`getrandom.c
+
+libgnu_a-getrandom.obj: getrandom.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-getrandom.obj -MD -MP -MF $(DEPDIR)/libgnu_a-getrandom.Tpo -c -o libgnu_a-getrandom.obj `if test -f 'getrandom.c'; then $(CYGPATH_W) 'getrandom.c'; else $(CYGPATH_W) '$(srcdir)/getrandom.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-getrandom.Tpo $(DEPDIR)/libgnu_a-getrandom.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='getrandom.c' object='libgnu_a-getrandom.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-getrandom.obj `if test -f 'getrandom.c'; then $(CYGPATH_W) 'getrandom.c'; else $(CYGPATH_W) '$(srcdir)/getrandom.c'; fi`
+
+libgnu_a-gettimeofday.o: gettimeofday.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-gettimeofday.o -MD -MP -MF $(DEPDIR)/libgnu_a-gettimeofday.Tpo -c -o libgnu_a-gettimeofday.o `test -f 'gettimeofday.c' || echo '$(srcdir)/'`gettimeofday.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-gettimeofday.Tpo $(DEPDIR)/libgnu_a-gettimeofday.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gettimeofday.c' object='libgnu_a-gettimeofday.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-gettimeofday.o `test -f 'gettimeofday.c' || echo '$(srcdir)/'`gettimeofday.c
+
+libgnu_a-gettimeofday.obj: gettimeofday.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-gettimeofday.obj -MD -MP -MF $(DEPDIR)/libgnu_a-gettimeofday.Tpo -c -o libgnu_a-gettimeofday.obj `if test -f 'gettimeofday.c'; then $(CYGPATH_W) 'gettimeofday.c'; else $(CYGPATH_W) '$(srcdir)/gettimeofday.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-gettimeofday.Tpo $(DEPDIR)/libgnu_a-gettimeofday.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gettimeofday.c' object='libgnu_a-gettimeofday.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-gettimeofday.obj `if test -f 'gettimeofday.c'; then $(CYGPATH_W) 'gettimeofday.c'; else $(CYGPATH_W) '$(srcdir)/gettimeofday.c'; fi`
+
+libgnu_a-glob.o: glob.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-glob.o -MD -MP -MF $(DEPDIR)/libgnu_a-glob.Tpo -c -o libgnu_a-glob.o `test -f 'glob.c' || echo '$(srcdir)/'`glob.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-glob.Tpo $(DEPDIR)/libgnu_a-glob.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='glob.c' object='libgnu_a-glob.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-glob.o `test -f 'glob.c' || echo '$(srcdir)/'`glob.c
+
+libgnu_a-glob.obj: glob.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-glob.obj -MD -MP -MF $(DEPDIR)/libgnu_a-glob.Tpo -c -o libgnu_a-glob.obj `if test -f 'glob.c'; then $(CYGPATH_W) 'glob.c'; else $(CYGPATH_W) '$(srcdir)/glob.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-glob.Tpo $(DEPDIR)/libgnu_a-glob.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='glob.c' object='libgnu_a-glob.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-glob.obj `if test -f 'glob.c'; then $(CYGPATH_W) 'glob.c'; else $(CYGPATH_W) '$(srcdir)/glob.c'; fi`
+
+libgnu_a-globfree.o: globfree.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-globfree.o -MD -MP -MF $(DEPDIR)/libgnu_a-globfree.Tpo -c -o libgnu_a-globfree.o `test -f 'globfree.c' || echo '$(srcdir)/'`globfree.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-globfree.Tpo $(DEPDIR)/libgnu_a-globfree.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='globfree.c' object='libgnu_a-globfree.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-globfree.o `test -f 'globfree.c' || echo '$(srcdir)/'`globfree.c
+
+libgnu_a-globfree.obj: globfree.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-globfree.obj -MD -MP -MF $(DEPDIR)/libgnu_a-globfree.Tpo -c -o libgnu_a-globfree.obj `if test -f 'globfree.c'; then $(CYGPATH_W) 'globfree.c'; else $(CYGPATH_W) '$(srcdir)/globfree.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-globfree.Tpo $(DEPDIR)/libgnu_a-globfree.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='globfree.c' object='libgnu_a-globfree.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-globfree.obj `if test -f 'globfree.c'; then $(CYGPATH_W) 'globfree.c'; else $(CYGPATH_W) '$(srcdir)/globfree.c'; fi`
+
+libgnu_a-glob_pattern_p.o: glob_pattern_p.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-glob_pattern_p.o -MD -MP -MF $(DEPDIR)/libgnu_a-glob_pattern_p.Tpo -c -o libgnu_a-glob_pattern_p.o `test -f 'glob_pattern_p.c' || echo '$(srcdir)/'`glob_pattern_p.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-glob_pattern_p.Tpo $(DEPDIR)/libgnu_a-glob_pattern_p.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='glob_pattern_p.c' object='libgnu_a-glob_pattern_p.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-glob_pattern_p.o `test -f 'glob_pattern_p.c' || echo '$(srcdir)/'`glob_pattern_p.c
+
+libgnu_a-glob_pattern_p.obj: glob_pattern_p.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-glob_pattern_p.obj -MD -MP -MF $(DEPDIR)/libgnu_a-glob_pattern_p.Tpo -c -o libgnu_a-glob_pattern_p.obj `if test -f 'glob_pattern_p.c'; then $(CYGPATH_W) 'glob_pattern_p.c'; else $(CYGPATH_W) '$(srcdir)/glob_pattern_p.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-glob_pattern_p.Tpo $(DEPDIR)/libgnu_a-glob_pattern_p.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='glob_pattern_p.c' object='libgnu_a-glob_pattern_p.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-glob_pattern_p.obj `if test -f 'glob_pattern_p.c'; then $(CYGPATH_W) 'glob_pattern_p.c'; else $(CYGPATH_W) '$(srcdir)/glob_pattern_p.c'; fi`
+
+libgnu_a-hard-locale.o: hard-locale.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-hard-locale.o -MD -MP -MF $(DEPDIR)/libgnu_a-hard-locale.Tpo -c -o libgnu_a-hard-locale.o `test -f 'hard-locale.c' || echo '$(srcdir)/'`hard-locale.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-hard-locale.Tpo $(DEPDIR)/libgnu_a-hard-locale.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hard-locale.c' object='libgnu_a-hard-locale.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-hard-locale.o `test -f 'hard-locale.c' || echo '$(srcdir)/'`hard-locale.c
+
+libgnu_a-hard-locale.obj: hard-locale.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-hard-locale.obj -MD -MP -MF $(DEPDIR)/libgnu_a-hard-locale.Tpo -c -o libgnu_a-hard-locale.obj `if test -f 'hard-locale.c'; then $(CYGPATH_W) 'hard-locale.c'; else $(CYGPATH_W) '$(srcdir)/hard-locale.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-hard-locale.Tpo $(DEPDIR)/libgnu_a-hard-locale.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hard-locale.c' object='libgnu_a-hard-locale.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-hard-locale.obj `if test -f 'hard-locale.c'; then $(CYGPATH_W) 'hard-locale.c'; else $(CYGPATH_W) '$(srcdir)/hard-locale.c'; fi`
+
+libgnu_a-inet_ntop.o: inet_ntop.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-inet_ntop.o -MD -MP -MF $(DEPDIR)/libgnu_a-inet_ntop.Tpo -c -o libgnu_a-inet_ntop.o `test -f 'inet_ntop.c' || echo '$(srcdir)/'`inet_ntop.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-inet_ntop.Tpo $(DEPDIR)/libgnu_a-inet_ntop.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='inet_ntop.c' object='libgnu_a-inet_ntop.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-inet_ntop.o `test -f 'inet_ntop.c' || echo '$(srcdir)/'`inet_ntop.c
+
+libgnu_a-inet_ntop.obj: inet_ntop.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-inet_ntop.obj -MD -MP -MF $(DEPDIR)/libgnu_a-inet_ntop.Tpo -c -o libgnu_a-inet_ntop.obj `if test -f 'inet_ntop.c'; then $(CYGPATH_W) 'inet_ntop.c'; else $(CYGPATH_W) '$(srcdir)/inet_ntop.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-inet_ntop.Tpo $(DEPDIR)/libgnu_a-inet_ntop.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='inet_ntop.c' object='libgnu_a-inet_ntop.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-inet_ntop.obj `if test -f 'inet_ntop.c'; then $(CYGPATH_W) 'inet_ntop.c'; else $(CYGPATH_W) '$(srcdir)/inet_ntop.c'; fi`
+
+libgnu_a-isblank.o: isblank.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-isblank.o -MD -MP -MF $(DEPDIR)/libgnu_a-isblank.Tpo -c -o libgnu_a-isblank.o `test -f 'isblank.c' || echo '$(srcdir)/'`isblank.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-isblank.Tpo $(DEPDIR)/libgnu_a-isblank.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='isblank.c' object='libgnu_a-isblank.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-isblank.o `test -f 'isblank.c' || echo '$(srcdir)/'`isblank.c
+
+libgnu_a-isblank.obj: isblank.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-isblank.obj -MD -MP -MF $(DEPDIR)/libgnu_a-isblank.Tpo -c -o libgnu_a-isblank.obj `if test -f 'isblank.c'; then $(CYGPATH_W) 'isblank.c'; else $(CYGPATH_W) '$(srcdir)/isblank.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-isblank.Tpo $(DEPDIR)/libgnu_a-isblank.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='isblank.c' object='libgnu_a-isblank.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-isblank.obj `if test -f 'isblank.c'; then $(CYGPATH_W) 'isblank.c'; else $(CYGPATH_W) '$(srcdir)/isblank.c'; fi`
+
+libgnu_a-listen.o: listen.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-listen.o -MD -MP -MF $(DEPDIR)/libgnu_a-listen.Tpo -c -o libgnu_a-listen.o `test -f 'listen.c' || echo '$(srcdir)/'`listen.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-listen.Tpo $(DEPDIR)/libgnu_a-listen.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='listen.c' object='libgnu_a-listen.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-listen.o `test -f 'listen.c' || echo '$(srcdir)/'`listen.c
+
+libgnu_a-listen.obj: listen.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-listen.obj -MD -MP -MF $(DEPDIR)/libgnu_a-listen.Tpo -c -o libgnu_a-listen.obj `if test -f 'listen.c'; then $(CYGPATH_W) 'listen.c'; else $(CYGPATH_W) '$(srcdir)/listen.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-listen.Tpo $(DEPDIR)/libgnu_a-listen.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='listen.c' object='libgnu_a-listen.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-listen.obj `if test -f 'listen.c'; then $(CYGPATH_W) 'listen.c'; else $(CYGPATH_W) '$(srcdir)/listen.c'; fi`
+
+libgnu_a-localcharset.o: localcharset.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-localcharset.o -MD -MP -MF $(DEPDIR)/libgnu_a-localcharset.Tpo -c -o libgnu_a-localcharset.o `test -f 'localcharset.c' || echo '$(srcdir)/'`localcharset.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-localcharset.Tpo $(DEPDIR)/libgnu_a-localcharset.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='localcharset.c' object='libgnu_a-localcharset.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-localcharset.o `test -f 'localcharset.c' || echo '$(srcdir)/'`localcharset.c
+
+libgnu_a-localcharset.obj: localcharset.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-localcharset.obj -MD -MP -MF $(DEPDIR)/libgnu_a-localcharset.Tpo -c -o libgnu_a-localcharset.obj `if test -f 'localcharset.c'; then $(CYGPATH_W) 'localcharset.c'; else $(CYGPATH_W) '$(srcdir)/localcharset.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-localcharset.Tpo $(DEPDIR)/libgnu_a-localcharset.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='localcharset.c' object='libgnu_a-localcharset.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-localcharset.obj `if test -f 'localcharset.c'; then $(CYGPATH_W) 'localcharset.c'; else $(CYGPATH_W) '$(srcdir)/localcharset.c'; fi`
+
+glthread/libgnu_a-lock.o: glthread/lock.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT glthread/libgnu_a-lock.o -MD -MP -MF glthread/$(DEPDIR)/libgnu_a-lock.Tpo -c -o glthread/libgnu_a-lock.o `test -f 'glthread/lock.c' || echo '$(srcdir)/'`glthread/lock.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) glthread/$(DEPDIR)/libgnu_a-lock.Tpo glthread/$(DEPDIR)/libgnu_a-lock.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='glthread/lock.c' object='glthread/libgnu_a-lock.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o glthread/libgnu_a-lock.o `test -f 'glthread/lock.c' || echo '$(srcdir)/'`glthread/lock.c
+
+glthread/libgnu_a-lock.obj: glthread/lock.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT glthread/libgnu_a-lock.obj -MD -MP -MF glthread/$(DEPDIR)/libgnu_a-lock.Tpo -c -o glthread/libgnu_a-lock.obj `if test -f 'glthread/lock.c'; then $(CYGPATH_W) 'glthread/lock.c'; else $(CYGPATH_W) '$(srcdir)/glthread/lock.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) glthread/$(DEPDIR)/libgnu_a-lock.Tpo glthread/$(DEPDIR)/libgnu_a-lock.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='glthread/lock.c' object='glthread/libgnu_a-lock.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o glthread/libgnu_a-lock.obj `if test -f 'glthread/lock.c'; then $(CYGPATH_W) 'glthread/lock.c'; else $(CYGPATH_W) '$(srcdir)/glthread/lock.c'; fi`
+
+libgnu_a-lstat.o: lstat.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-lstat.o -MD -MP -MF $(DEPDIR)/libgnu_a-lstat.Tpo -c -o libgnu_a-lstat.o `test -f 'lstat.c' || echo '$(srcdir)/'`lstat.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-lstat.Tpo $(DEPDIR)/libgnu_a-lstat.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lstat.c' object='libgnu_a-lstat.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-lstat.o `test -f 'lstat.c' || echo '$(srcdir)/'`lstat.c
+
+libgnu_a-lstat.obj: lstat.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-lstat.obj -MD -MP -MF $(DEPDIR)/libgnu_a-lstat.Tpo -c -o libgnu_a-lstat.obj `if test -f 'lstat.c'; then $(CYGPATH_W) 'lstat.c'; else $(CYGPATH_W) '$(srcdir)/lstat.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-lstat.Tpo $(DEPDIR)/libgnu_a-lstat.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lstat.c' object='libgnu_a-lstat.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-lstat.obj `if test -f 'lstat.c'; then $(CYGPATH_W) 'lstat.c'; else $(CYGPATH_W) '$(srcdir)/lstat.c'; fi`
+
+libgnu_a-malloca.o: malloca.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-malloca.o -MD -MP -MF $(DEPDIR)/libgnu_a-malloca.Tpo -c -o libgnu_a-malloca.o `test -f 'malloca.c' || echo '$(srcdir)/'`malloca.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-malloca.Tpo $(DEPDIR)/libgnu_a-malloca.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='malloca.c' object='libgnu_a-malloca.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-malloca.o `test -f 'malloca.c' || echo '$(srcdir)/'`malloca.c
+
+libgnu_a-malloca.obj: malloca.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-malloca.obj -MD -MP -MF $(DEPDIR)/libgnu_a-malloca.Tpo -c -o libgnu_a-malloca.obj `if test -f 'malloca.c'; then $(CYGPATH_W) 'malloca.c'; else $(CYGPATH_W) '$(srcdir)/malloca.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-malloca.Tpo $(DEPDIR)/libgnu_a-malloca.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='malloca.c' object='libgnu_a-malloca.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-malloca.obj `if test -f 'malloca.c'; then $(CYGPATH_W) 'malloca.c'; else $(CYGPATH_W) '$(srcdir)/malloca.c'; fi`
+
+libgnu_a-math.o: math.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-math.o -MD -MP -MF $(DEPDIR)/libgnu_a-math.Tpo -c -o libgnu_a-math.o `test -f 'math.c' || echo '$(srcdir)/'`math.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-math.Tpo $(DEPDIR)/libgnu_a-math.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='math.c' object='libgnu_a-math.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-math.o `test -f 'math.c' || echo '$(srcdir)/'`math.c
+
+libgnu_a-math.obj: math.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-math.obj -MD -MP -MF $(DEPDIR)/libgnu_a-math.Tpo -c -o libgnu_a-math.obj `if test -f 'math.c'; then $(CYGPATH_W) 'math.c'; else $(CYGPATH_W) '$(srcdir)/math.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-math.Tpo $(DEPDIR)/libgnu_a-math.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='math.c' object='libgnu_a-math.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-math.obj `if test -f 'math.c'; then $(CYGPATH_W) 'math.c'; else $(CYGPATH_W) '$(srcdir)/math.c'; fi`
+
+libgnu_a-mbrtowc.o: mbrtowc.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-mbrtowc.o -MD -MP -MF $(DEPDIR)/libgnu_a-mbrtowc.Tpo -c -o libgnu_a-mbrtowc.o `test -f 'mbrtowc.c' || echo '$(srcdir)/'`mbrtowc.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-mbrtowc.Tpo $(DEPDIR)/libgnu_a-mbrtowc.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mbrtowc.c' object='libgnu_a-mbrtowc.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-mbrtowc.o `test -f 'mbrtowc.c' || echo '$(srcdir)/'`mbrtowc.c
+
+libgnu_a-mbrtowc.obj: mbrtowc.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-mbrtowc.obj -MD -MP -MF $(DEPDIR)/libgnu_a-mbrtowc.Tpo -c -o libgnu_a-mbrtowc.obj `if test -f 'mbrtowc.c'; then $(CYGPATH_W) 'mbrtowc.c'; else $(CYGPATH_W) '$(srcdir)/mbrtowc.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-mbrtowc.Tpo $(DEPDIR)/libgnu_a-mbrtowc.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mbrtowc.c' object='libgnu_a-mbrtowc.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-mbrtowc.obj `if test -f 'mbrtowc.c'; then $(CYGPATH_W) 'mbrtowc.c'; else $(CYGPATH_W) '$(srcdir)/mbrtowc.c'; fi`
+
+libgnu_a-mbsinit.o: mbsinit.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-mbsinit.o -MD -MP -MF $(DEPDIR)/libgnu_a-mbsinit.Tpo -c -o libgnu_a-mbsinit.o `test -f 'mbsinit.c' || echo '$(srcdir)/'`mbsinit.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-mbsinit.Tpo $(DEPDIR)/libgnu_a-mbsinit.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mbsinit.c' object='libgnu_a-mbsinit.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-mbsinit.o `test -f 'mbsinit.c' || echo '$(srcdir)/'`mbsinit.c
+
+libgnu_a-mbsinit.obj: mbsinit.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-mbsinit.obj -MD -MP -MF $(DEPDIR)/libgnu_a-mbsinit.Tpo -c -o libgnu_a-mbsinit.obj `if test -f 'mbsinit.c'; then $(CYGPATH_W) 'mbsinit.c'; else $(CYGPATH_W) '$(srcdir)/mbsinit.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-mbsinit.Tpo $(DEPDIR)/libgnu_a-mbsinit.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mbsinit.c' object='libgnu_a-mbsinit.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-mbsinit.obj `if test -f 'mbsinit.c'; then $(CYGPATH_W) 'mbsinit.c'; else $(CYGPATH_W) '$(srcdir)/mbsinit.c'; fi`
+
+libgnu_a-mbsrtowcs.o: mbsrtowcs.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-mbsrtowcs.o -MD -MP -MF $(DEPDIR)/libgnu_a-mbsrtowcs.Tpo -c -o libgnu_a-mbsrtowcs.o `test -f 'mbsrtowcs.c' || echo '$(srcdir)/'`mbsrtowcs.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-mbsrtowcs.Tpo $(DEPDIR)/libgnu_a-mbsrtowcs.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mbsrtowcs.c' object='libgnu_a-mbsrtowcs.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-mbsrtowcs.o `test -f 'mbsrtowcs.c' || echo '$(srcdir)/'`mbsrtowcs.c
+
+libgnu_a-mbsrtowcs.obj: mbsrtowcs.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-mbsrtowcs.obj -MD -MP -MF $(DEPDIR)/libgnu_a-mbsrtowcs.Tpo -c -o libgnu_a-mbsrtowcs.obj `if test -f 'mbsrtowcs.c'; then $(CYGPATH_W) 'mbsrtowcs.c'; else $(CYGPATH_W) '$(srcdir)/mbsrtowcs.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-mbsrtowcs.Tpo $(DEPDIR)/libgnu_a-mbsrtowcs.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mbsrtowcs.c' object='libgnu_a-mbsrtowcs.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-mbsrtowcs.obj `if test -f 'mbsrtowcs.c'; then $(CYGPATH_W) 'mbsrtowcs.c'; else $(CYGPATH_W) '$(srcdir)/mbsrtowcs.c'; fi`
+
+libgnu_a-mbtowc.o: mbtowc.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-mbtowc.o -MD -MP -MF $(DEPDIR)/libgnu_a-mbtowc.Tpo -c -o libgnu_a-mbtowc.o `test -f 'mbtowc.c' || echo '$(srcdir)/'`mbtowc.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-mbtowc.Tpo $(DEPDIR)/libgnu_a-mbtowc.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mbtowc.c' object='libgnu_a-mbtowc.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-mbtowc.o `test -f 'mbtowc.c' || echo '$(srcdir)/'`mbtowc.c
+
+libgnu_a-mbtowc.obj: mbtowc.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-mbtowc.obj -MD -MP -MF $(DEPDIR)/libgnu_a-mbtowc.Tpo -c -o libgnu_a-mbtowc.obj `if test -f 'mbtowc.c'; then $(CYGPATH_W) 'mbtowc.c'; else $(CYGPATH_W) '$(srcdir)/mbtowc.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-mbtowc.Tpo $(DEPDIR)/libgnu_a-mbtowc.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mbtowc.c' object='libgnu_a-mbtowc.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-mbtowc.obj `if test -f 'mbtowc.c'; then $(CYGPATH_W) 'mbtowc.c'; else $(CYGPATH_W) '$(srcdir)/mbtowc.c'; fi`
+
+libgnu_a-memchr.o: memchr.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-memchr.o -MD -MP -MF $(DEPDIR)/libgnu_a-memchr.Tpo -c -o libgnu_a-memchr.o `test -f 'memchr.c' || echo '$(srcdir)/'`memchr.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-memchr.Tpo $(DEPDIR)/libgnu_a-memchr.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='memchr.c' object='libgnu_a-memchr.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-memchr.o `test -f 'memchr.c' || echo '$(srcdir)/'`memchr.c
+
+libgnu_a-memchr.obj: memchr.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-memchr.obj -MD -MP -MF $(DEPDIR)/libgnu_a-memchr.Tpo -c -o libgnu_a-memchr.obj `if test -f 'memchr.c'; then $(CYGPATH_W) 'memchr.c'; else $(CYGPATH_W) '$(srcdir)/memchr.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-memchr.Tpo $(DEPDIR)/libgnu_a-memchr.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='memchr.c' object='libgnu_a-memchr.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-memchr.obj `if test -f 'memchr.c'; then $(CYGPATH_W) 'memchr.c'; else $(CYGPATH_W) '$(srcdir)/memchr.c'; fi`
+
+libgnu_a-mempcpy.o: mempcpy.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-mempcpy.o -MD -MP -MF $(DEPDIR)/libgnu_a-mempcpy.Tpo -c -o libgnu_a-mempcpy.o `test -f 'mempcpy.c' || echo '$(srcdir)/'`mempcpy.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-mempcpy.Tpo $(DEPDIR)/libgnu_a-mempcpy.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mempcpy.c' object='libgnu_a-mempcpy.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-mempcpy.o `test -f 'mempcpy.c' || echo '$(srcdir)/'`mempcpy.c
+
+libgnu_a-mempcpy.obj: mempcpy.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-mempcpy.obj -MD -MP -MF $(DEPDIR)/libgnu_a-mempcpy.Tpo -c -o libgnu_a-mempcpy.obj `if test -f 'mempcpy.c'; then $(CYGPATH_W) 'mempcpy.c'; else $(CYGPATH_W) '$(srcdir)/mempcpy.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-mempcpy.Tpo $(DEPDIR)/libgnu_a-mempcpy.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mempcpy.c' object='libgnu_a-mempcpy.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-mempcpy.obj `if test -f 'mempcpy.c'; then $(CYGPATH_W) 'mempcpy.c'; else $(CYGPATH_W) '$(srcdir)/mempcpy.c'; fi`
+
+libgnu_a-memrchr.o: memrchr.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-memrchr.o -MD -MP -MF $(DEPDIR)/libgnu_a-memrchr.Tpo -c -o libgnu_a-memrchr.o `test -f 'memrchr.c' || echo '$(srcdir)/'`memrchr.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-memrchr.Tpo $(DEPDIR)/libgnu_a-memrchr.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='memrchr.c' object='libgnu_a-memrchr.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-memrchr.o `test -f 'memrchr.c' || echo '$(srcdir)/'`memrchr.c
+
+libgnu_a-memrchr.obj: memrchr.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-memrchr.obj -MD -MP -MF $(DEPDIR)/libgnu_a-memrchr.Tpo -c -o libgnu_a-memrchr.obj `if test -f 'memrchr.c'; then $(CYGPATH_W) 'memrchr.c'; else $(CYGPATH_W) '$(srcdir)/memrchr.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-memrchr.Tpo $(DEPDIR)/libgnu_a-memrchr.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='memrchr.c' object='libgnu_a-memrchr.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-memrchr.obj `if test -f 'memrchr.c'; then $(CYGPATH_W) 'memrchr.c'; else $(CYGPATH_W) '$(srcdir)/memrchr.c'; fi`
+
+libgnu_a-mkdir.o: mkdir.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-mkdir.o -MD -MP -MF $(DEPDIR)/libgnu_a-mkdir.Tpo -c -o libgnu_a-mkdir.o `test -f 'mkdir.c' || echo '$(srcdir)/'`mkdir.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-mkdir.Tpo $(DEPDIR)/libgnu_a-mkdir.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mkdir.c' object='libgnu_a-mkdir.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-mkdir.o `test -f 'mkdir.c' || echo '$(srcdir)/'`mkdir.c
+
+libgnu_a-mkdir.obj: mkdir.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-mkdir.obj -MD -MP -MF $(DEPDIR)/libgnu_a-mkdir.Tpo -c -o libgnu_a-mkdir.obj `if test -f 'mkdir.c'; then $(CYGPATH_W) 'mkdir.c'; else $(CYGPATH_W) '$(srcdir)/mkdir.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-mkdir.Tpo $(DEPDIR)/libgnu_a-mkdir.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mkdir.c' object='libgnu_a-mkdir.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-mkdir.obj `if test -f 'mkdir.c'; then $(CYGPATH_W) 'mkdir.c'; else $(CYGPATH_W) '$(srcdir)/mkdir.c'; fi`
+
+libgnu_a-mkdtemp.o: mkdtemp.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-mkdtemp.o -MD -MP -MF $(DEPDIR)/libgnu_a-mkdtemp.Tpo -c -o libgnu_a-mkdtemp.o `test -f 'mkdtemp.c' || echo '$(srcdir)/'`mkdtemp.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-mkdtemp.Tpo $(DEPDIR)/libgnu_a-mkdtemp.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mkdtemp.c' object='libgnu_a-mkdtemp.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-mkdtemp.o `test -f 'mkdtemp.c' || echo '$(srcdir)/'`mkdtemp.c
+
+libgnu_a-mkdtemp.obj: mkdtemp.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-mkdtemp.obj -MD -MP -MF $(DEPDIR)/libgnu_a-mkdtemp.Tpo -c -o libgnu_a-mkdtemp.obj `if test -f 'mkdtemp.c'; then $(CYGPATH_W) 'mkdtemp.c'; else $(CYGPATH_W) '$(srcdir)/mkdtemp.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-mkdtemp.Tpo $(DEPDIR)/libgnu_a-mkdtemp.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mkdtemp.c' object='libgnu_a-mkdtemp.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-mkdtemp.obj `if test -f 'mkdtemp.c'; then $(CYGPATH_W) 'mkdtemp.c'; else $(CYGPATH_W) '$(srcdir)/mkdtemp.c'; fi`
+
+libgnu_a-mkostemp.o: mkostemp.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-mkostemp.o -MD -MP -MF $(DEPDIR)/libgnu_a-mkostemp.Tpo -c -o libgnu_a-mkostemp.o `test -f 'mkostemp.c' || echo '$(srcdir)/'`mkostemp.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-mkostemp.Tpo $(DEPDIR)/libgnu_a-mkostemp.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mkostemp.c' object='libgnu_a-mkostemp.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-mkostemp.o `test -f 'mkostemp.c' || echo '$(srcdir)/'`mkostemp.c
+
+libgnu_a-mkostemp.obj: mkostemp.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-mkostemp.obj -MD -MP -MF $(DEPDIR)/libgnu_a-mkostemp.Tpo -c -o libgnu_a-mkostemp.obj `if test -f 'mkostemp.c'; then $(CYGPATH_W) 'mkostemp.c'; else $(CYGPATH_W) '$(srcdir)/mkostemp.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-mkostemp.Tpo $(DEPDIR)/libgnu_a-mkostemp.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mkostemp.c' object='libgnu_a-mkostemp.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-mkostemp.obj `if test -f 'mkostemp.c'; then $(CYGPATH_W) 'mkostemp.c'; else $(CYGPATH_W) '$(srcdir)/mkostemp.c'; fi`
+
+libgnu_a-msvc-inval.o: msvc-inval.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-msvc-inval.o -MD -MP -MF $(DEPDIR)/libgnu_a-msvc-inval.Tpo -c -o libgnu_a-msvc-inval.o `test -f 'msvc-inval.c' || echo '$(srcdir)/'`msvc-inval.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-msvc-inval.Tpo $(DEPDIR)/libgnu_a-msvc-inval.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='msvc-inval.c' object='libgnu_a-msvc-inval.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-msvc-inval.o `test -f 'msvc-inval.c' || echo '$(srcdir)/'`msvc-inval.c
+
+libgnu_a-msvc-inval.obj: msvc-inval.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-msvc-inval.obj -MD -MP -MF $(DEPDIR)/libgnu_a-msvc-inval.Tpo -c -o libgnu_a-msvc-inval.obj `if test -f 'msvc-inval.c'; then $(CYGPATH_W) 'msvc-inval.c'; else $(CYGPATH_W) '$(srcdir)/msvc-inval.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-msvc-inval.Tpo $(DEPDIR)/libgnu_a-msvc-inval.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='msvc-inval.c' object='libgnu_a-msvc-inval.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-msvc-inval.obj `if test -f 'msvc-inval.c'; then $(CYGPATH_W) 'msvc-inval.c'; else $(CYGPATH_W) '$(srcdir)/msvc-inval.c'; fi`
+
+libgnu_a-msvc-nothrow.o: msvc-nothrow.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-msvc-nothrow.o -MD -MP -MF $(DEPDIR)/libgnu_a-msvc-nothrow.Tpo -c -o libgnu_a-msvc-nothrow.o `test -f 'msvc-nothrow.c' || echo '$(srcdir)/'`msvc-nothrow.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-msvc-nothrow.Tpo $(DEPDIR)/libgnu_a-msvc-nothrow.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='msvc-nothrow.c' object='libgnu_a-msvc-nothrow.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-msvc-nothrow.o `test -f 'msvc-nothrow.c' || echo '$(srcdir)/'`msvc-nothrow.c
+
+libgnu_a-msvc-nothrow.obj: msvc-nothrow.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-msvc-nothrow.obj -MD -MP -MF $(DEPDIR)/libgnu_a-msvc-nothrow.Tpo -c -o libgnu_a-msvc-nothrow.obj `if test -f 'msvc-nothrow.c'; then $(CYGPATH_W) 'msvc-nothrow.c'; else $(CYGPATH_W) '$(srcdir)/msvc-nothrow.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-msvc-nothrow.Tpo $(DEPDIR)/libgnu_a-msvc-nothrow.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='msvc-nothrow.c' object='libgnu_a-msvc-nothrow.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-msvc-nothrow.obj `if test -f 'msvc-nothrow.c'; then $(CYGPATH_W) 'msvc-nothrow.c'; else $(CYGPATH_W) '$(srcdir)/msvc-nothrow.c'; fi`
+
+libgnu_a-open.o: open.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-open.o -MD -MP -MF $(DEPDIR)/libgnu_a-open.Tpo -c -o libgnu_a-open.o `test -f 'open.c' || echo '$(srcdir)/'`open.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-open.Tpo $(DEPDIR)/libgnu_a-open.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='open.c' object='libgnu_a-open.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-open.o `test -f 'open.c' || echo '$(srcdir)/'`open.c
+
+libgnu_a-open.obj: open.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-open.obj -MD -MP -MF $(DEPDIR)/libgnu_a-open.Tpo -c -o libgnu_a-open.obj `if test -f 'open.c'; then $(CYGPATH_W) 'open.c'; else $(CYGPATH_W) '$(srcdir)/open.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-open.Tpo $(DEPDIR)/libgnu_a-open.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='open.c' object='libgnu_a-open.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-open.obj `if test -f 'open.c'; then $(CYGPATH_W) 'open.c'; else $(CYGPATH_W) '$(srcdir)/open.c'; fi`
+
+libgnu_a-openat.o: openat.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-openat.o -MD -MP -MF $(DEPDIR)/libgnu_a-openat.Tpo -c -o libgnu_a-openat.o `test -f 'openat.c' || echo '$(srcdir)/'`openat.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-openat.Tpo $(DEPDIR)/libgnu_a-openat.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='openat.c' object='libgnu_a-openat.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-openat.o `test -f 'openat.c' || echo '$(srcdir)/'`openat.c
+
+libgnu_a-openat.obj: openat.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-openat.obj -MD -MP -MF $(DEPDIR)/libgnu_a-openat.Tpo -c -o libgnu_a-openat.obj `if test -f 'openat.c'; then $(CYGPATH_W) 'openat.c'; else $(CYGPATH_W) '$(srcdir)/openat.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-openat.Tpo $(DEPDIR)/libgnu_a-openat.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='openat.c' object='libgnu_a-openat.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-openat.obj `if test -f 'openat.c'; then $(CYGPATH_W) 'openat.c'; else $(CYGPATH_W) '$(srcdir)/openat.c'; fi`
+
+libgnu_a-openat-die.o: openat-die.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-openat-die.o -MD -MP -MF $(DEPDIR)/libgnu_a-openat-die.Tpo -c -o libgnu_a-openat-die.o `test -f 'openat-die.c' || echo '$(srcdir)/'`openat-die.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-openat-die.Tpo $(DEPDIR)/libgnu_a-openat-die.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='openat-die.c' object='libgnu_a-openat-die.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-openat-die.o `test -f 'openat-die.c' || echo '$(srcdir)/'`openat-die.c
+
+libgnu_a-openat-die.obj: openat-die.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-openat-die.obj -MD -MP -MF $(DEPDIR)/libgnu_a-openat-die.Tpo -c -o libgnu_a-openat-die.obj `if test -f 'openat-die.c'; then $(CYGPATH_W) 'openat-die.c'; else $(CYGPATH_W) '$(srcdir)/openat-die.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-openat-die.Tpo $(DEPDIR)/libgnu_a-openat-die.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='openat-die.c' object='libgnu_a-openat-die.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-openat-die.obj `if test -f 'openat-die.c'; then $(CYGPATH_W) 'openat-die.c'; else $(CYGPATH_W) '$(srcdir)/openat-die.c'; fi`
+
+libgnu_a-opendir.o: opendir.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-opendir.o -MD -MP -MF $(DEPDIR)/libgnu_a-opendir.Tpo -c -o libgnu_a-opendir.o `test -f 'opendir.c' || echo '$(srcdir)/'`opendir.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-opendir.Tpo $(DEPDIR)/libgnu_a-opendir.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='opendir.c' object='libgnu_a-opendir.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-opendir.o `test -f 'opendir.c' || echo '$(srcdir)/'`opendir.c
+
+libgnu_a-opendir.obj: opendir.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-opendir.obj -MD -MP -MF $(DEPDIR)/libgnu_a-opendir.Tpo -c -o libgnu_a-opendir.obj `if test -f 'opendir.c'; then $(CYGPATH_W) 'opendir.c'; else $(CYGPATH_W) '$(srcdir)/opendir.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-opendir.Tpo $(DEPDIR)/libgnu_a-opendir.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='opendir.c' object='libgnu_a-opendir.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-opendir.obj `if test -f 'opendir.c'; then $(CYGPATH_W) 'opendir.c'; else $(CYGPATH_W) '$(srcdir)/opendir.c'; fi`
+
+libgnu_a-pipe.o: pipe.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-pipe.o -MD -MP -MF $(DEPDIR)/libgnu_a-pipe.Tpo -c -o libgnu_a-pipe.o `test -f 'pipe.c' || echo '$(srcdir)/'`pipe.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-pipe.Tpo $(DEPDIR)/libgnu_a-pipe.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pipe.c' object='libgnu_a-pipe.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-pipe.o `test -f 'pipe.c' || echo '$(srcdir)/'`pipe.c
+
+libgnu_a-pipe.obj: pipe.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-pipe.obj -MD -MP -MF $(DEPDIR)/libgnu_a-pipe.Tpo -c -o libgnu_a-pipe.obj `if test -f 'pipe.c'; then $(CYGPATH_W) 'pipe.c'; else $(CYGPATH_W) '$(srcdir)/pipe.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-pipe.Tpo $(DEPDIR)/libgnu_a-pipe.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pipe.c' object='libgnu_a-pipe.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-pipe.obj `if test -f 'pipe.c'; then $(CYGPATH_W) 'pipe.c'; else $(CYGPATH_W) '$(srcdir)/pipe.c'; fi`
+
+libgnu_a-rawmemchr.o: rawmemchr.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-rawmemchr.o -MD -MP -MF $(DEPDIR)/libgnu_a-rawmemchr.Tpo -c -o libgnu_a-rawmemchr.o `test -f 'rawmemchr.c' || echo '$(srcdir)/'`rawmemchr.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-rawmemchr.Tpo $(DEPDIR)/libgnu_a-rawmemchr.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rawmemchr.c' object='libgnu_a-rawmemchr.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-rawmemchr.o `test -f 'rawmemchr.c' || echo '$(srcdir)/'`rawmemchr.c
+
+libgnu_a-rawmemchr.obj: rawmemchr.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-rawmemchr.obj -MD -MP -MF $(DEPDIR)/libgnu_a-rawmemchr.Tpo -c -o libgnu_a-rawmemchr.obj `if test -f 'rawmemchr.c'; then $(CYGPATH_W) 'rawmemchr.c'; else $(CYGPATH_W) '$(srcdir)/rawmemchr.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-rawmemchr.Tpo $(DEPDIR)/libgnu_a-rawmemchr.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rawmemchr.c' object='libgnu_a-rawmemchr.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-rawmemchr.obj `if test -f 'rawmemchr.c'; then $(CYGPATH_W) 'rawmemchr.c'; else $(CYGPATH_W) '$(srcdir)/rawmemchr.c'; fi`
+
+libgnu_a-readdir.o: readdir.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-readdir.o -MD -MP -MF $(DEPDIR)/libgnu_a-readdir.Tpo -c -o libgnu_a-readdir.o `test -f 'readdir.c' || echo '$(srcdir)/'`readdir.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-readdir.Tpo $(DEPDIR)/libgnu_a-readdir.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='readdir.c' object='libgnu_a-readdir.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-readdir.o `test -f 'readdir.c' || echo '$(srcdir)/'`readdir.c
+
+libgnu_a-readdir.obj: readdir.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-readdir.obj -MD -MP -MF $(DEPDIR)/libgnu_a-readdir.Tpo -c -o libgnu_a-readdir.obj `if test -f 'readdir.c'; then $(CYGPATH_W) 'readdir.c'; else $(CYGPATH_W) '$(srcdir)/readdir.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-readdir.Tpo $(DEPDIR)/libgnu_a-readdir.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='readdir.c' object='libgnu_a-readdir.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-readdir.obj `if test -f 'readdir.c'; then $(CYGPATH_W) 'readdir.c'; else $(CYGPATH_W) '$(srcdir)/readdir.c'; fi`
+
+libgnu_a-readlink.o: readlink.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-readlink.o -MD -MP -MF $(DEPDIR)/libgnu_a-readlink.Tpo -c -o libgnu_a-readlink.o `test -f 'readlink.c' || echo '$(srcdir)/'`readlink.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-readlink.Tpo $(DEPDIR)/libgnu_a-readlink.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='readlink.c' object='libgnu_a-readlink.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-readlink.o `test -f 'readlink.c' || echo '$(srcdir)/'`readlink.c
+
+libgnu_a-readlink.obj: readlink.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-readlink.obj -MD -MP -MF $(DEPDIR)/libgnu_a-readlink.Tpo -c -o libgnu_a-readlink.obj `if test -f 'readlink.c'; then $(CYGPATH_W) 'readlink.c'; else $(CYGPATH_W) '$(srcdir)/readlink.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-readlink.Tpo $(DEPDIR)/libgnu_a-readlink.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='readlink.c' object='libgnu_a-readlink.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-readlink.obj `if test -f 'readlink.c'; then $(CYGPATH_W) 'readlink.c'; else $(CYGPATH_W) '$(srcdir)/readlink.c'; fi`
+
+libgnu_a-rename.o: rename.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-rename.o -MD -MP -MF $(DEPDIR)/libgnu_a-rename.Tpo -c -o libgnu_a-rename.o `test -f 'rename.c' || echo '$(srcdir)/'`rename.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-rename.Tpo $(DEPDIR)/libgnu_a-rename.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rename.c' object='libgnu_a-rename.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-rename.o `test -f 'rename.c' || echo '$(srcdir)/'`rename.c
+
+libgnu_a-rename.obj: rename.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-rename.obj -MD -MP -MF $(DEPDIR)/libgnu_a-rename.Tpo -c -o libgnu_a-rename.obj `if test -f 'rename.c'; then $(CYGPATH_W) 'rename.c'; else $(CYGPATH_W) '$(srcdir)/rename.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-rename.Tpo $(DEPDIR)/libgnu_a-rename.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rename.c' object='libgnu_a-rename.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-rename.obj `if test -f 'rename.c'; then $(CYGPATH_W) 'rename.c'; else $(CYGPATH_W) '$(srcdir)/rename.c'; fi`
+
+libgnu_a-rewinddir.o: rewinddir.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-rewinddir.o -MD -MP -MF $(DEPDIR)/libgnu_a-rewinddir.Tpo -c -o libgnu_a-rewinddir.o `test -f 'rewinddir.c' || echo '$(srcdir)/'`rewinddir.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-rewinddir.Tpo $(DEPDIR)/libgnu_a-rewinddir.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rewinddir.c' object='libgnu_a-rewinddir.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-rewinddir.o `test -f 'rewinddir.c' || echo '$(srcdir)/'`rewinddir.c
+
+libgnu_a-rewinddir.obj: rewinddir.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-rewinddir.obj -MD -MP -MF $(DEPDIR)/libgnu_a-rewinddir.Tpo -c -o libgnu_a-rewinddir.obj `if test -f 'rewinddir.c'; then $(CYGPATH_W) 'rewinddir.c'; else $(CYGPATH_W) '$(srcdir)/rewinddir.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-rewinddir.Tpo $(DEPDIR)/libgnu_a-rewinddir.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rewinddir.c' object='libgnu_a-rewinddir.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-rewinddir.obj `if test -f 'rewinddir.c'; then $(CYGPATH_W) 'rewinddir.c'; else $(CYGPATH_W) '$(srcdir)/rewinddir.c'; fi`
+
+libgnu_a-rmdir.o: rmdir.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-rmdir.o -MD -MP -MF $(DEPDIR)/libgnu_a-rmdir.Tpo -c -o libgnu_a-rmdir.o `test -f 'rmdir.c' || echo '$(srcdir)/'`rmdir.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-rmdir.Tpo $(DEPDIR)/libgnu_a-rmdir.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rmdir.c' object='libgnu_a-rmdir.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-rmdir.o `test -f 'rmdir.c' || echo '$(srcdir)/'`rmdir.c
+
+libgnu_a-rmdir.obj: rmdir.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-rmdir.obj -MD -MP -MF $(DEPDIR)/libgnu_a-rmdir.Tpo -c -o libgnu_a-rmdir.obj `if test -f 'rmdir.c'; then $(CYGPATH_W) 'rmdir.c'; else $(CYGPATH_W) '$(srcdir)/rmdir.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-rmdir.Tpo $(DEPDIR)/libgnu_a-rmdir.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rmdir.c' object='libgnu_a-rmdir.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-rmdir.obj `if test -f 'rmdir.c'; then $(CYGPATH_W) 'rmdir.c'; else $(CYGPATH_W) '$(srcdir)/rmdir.c'; fi`
+
+libgnu_a-save-cwd.o: save-cwd.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-save-cwd.o -MD -MP -MF $(DEPDIR)/libgnu_a-save-cwd.Tpo -c -o libgnu_a-save-cwd.o `test -f 'save-cwd.c' || echo '$(srcdir)/'`save-cwd.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-save-cwd.Tpo $(DEPDIR)/libgnu_a-save-cwd.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='save-cwd.c' object='libgnu_a-save-cwd.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-save-cwd.o `test -f 'save-cwd.c' || echo '$(srcdir)/'`save-cwd.c
+
+libgnu_a-save-cwd.obj: save-cwd.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-save-cwd.obj -MD -MP -MF $(DEPDIR)/libgnu_a-save-cwd.Tpo -c -o libgnu_a-save-cwd.obj `if test -f 'save-cwd.c'; then $(CYGPATH_W) 'save-cwd.c'; else $(CYGPATH_W) '$(srcdir)/save-cwd.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-save-cwd.Tpo $(DEPDIR)/libgnu_a-save-cwd.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='save-cwd.c' object='libgnu_a-save-cwd.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-save-cwd.obj `if test -f 'save-cwd.c'; then $(CYGPATH_W) 'save-cwd.c'; else $(CYGPATH_W) '$(srcdir)/save-cwd.c'; fi`
+
+malloc/libgnu_a-scratch_buffer_dupfree.o: malloc/scratch_buffer_dupfree.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT malloc/libgnu_a-scratch_buffer_dupfree.o -MD -MP -MF malloc/$(DEPDIR)/libgnu_a-scratch_buffer_dupfree.Tpo -c -o malloc/libgnu_a-scratch_buffer_dupfree.o `test -f 'malloc/scratch_buffer_dupfree.c' || echo '$(srcdir)/'`malloc/scratch_buffer_dupfree.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) malloc/$(DEPDIR)/libgnu_a-scratch_buffer_dupfree.Tpo malloc/$(DEPDIR)/libgnu_a-scratch_buffer_dupfree.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='malloc/scratch_buffer_dupfree.c' object='malloc/libgnu_a-scratch_buffer_dupfree.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o malloc/libgnu_a-scratch_buffer_dupfree.o `test -f 'malloc/scratch_buffer_dupfree.c' || echo '$(srcdir)/'`malloc/scratch_buffer_dupfree.c
+
+malloc/libgnu_a-scratch_buffer_dupfree.obj: malloc/scratch_buffer_dupfree.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT malloc/libgnu_a-scratch_buffer_dupfree.obj -MD -MP -MF malloc/$(DEPDIR)/libgnu_a-scratch_buffer_dupfree.Tpo -c -o malloc/libgnu_a-scratch_buffer_dupfree.obj `if test -f 'malloc/scratch_buffer_dupfree.c'; then $(CYGPATH_W) 'malloc/scratch_buffer_dupfree.c'; else $(CYGPATH_W) '$(srcdir)/malloc/scratch_buffer_dupfree.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) malloc/$(DEPDIR)/libgnu_a-scratch_buffer_dupfree.Tpo malloc/$(DEPDIR)/libgnu_a-scratch_buffer_dupfree.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='malloc/scratch_buffer_dupfree.c' object='malloc/libgnu_a-scratch_buffer_dupfree.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o malloc/libgnu_a-scratch_buffer_dupfree.obj `if test -f 'malloc/scratch_buffer_dupfree.c'; then $(CYGPATH_W) 'malloc/scratch_buffer_dupfree.c'; else $(CYGPATH_W) '$(srcdir)/malloc/scratch_buffer_dupfree.c'; fi`
+
+malloc/libgnu_a-scratch_buffer_grow.o: malloc/scratch_buffer_grow.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT malloc/libgnu_a-scratch_buffer_grow.o -MD -MP -MF malloc/$(DEPDIR)/libgnu_a-scratch_buffer_grow.Tpo -c -o malloc/libgnu_a-scratch_buffer_grow.o `test -f 'malloc/scratch_buffer_grow.c' || echo '$(srcdir)/'`malloc/scratch_buffer_grow.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) malloc/$(DEPDIR)/libgnu_a-scratch_buffer_grow.Tpo malloc/$(DEPDIR)/libgnu_a-scratch_buffer_grow.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='malloc/scratch_buffer_grow.c' object='malloc/libgnu_a-scratch_buffer_grow.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o malloc/libgnu_a-scratch_buffer_grow.o `test -f 'malloc/scratch_buffer_grow.c' || echo '$(srcdir)/'`malloc/scratch_buffer_grow.c
+
+malloc/libgnu_a-scratch_buffer_grow.obj: malloc/scratch_buffer_grow.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT malloc/libgnu_a-scratch_buffer_grow.obj -MD -MP -MF malloc/$(DEPDIR)/libgnu_a-scratch_buffer_grow.Tpo -c -o malloc/libgnu_a-scratch_buffer_grow.obj `if test -f 'malloc/scratch_buffer_grow.c'; then $(CYGPATH_W) 'malloc/scratch_buffer_grow.c'; else $(CYGPATH_W) '$(srcdir)/malloc/scratch_buffer_grow.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) malloc/$(DEPDIR)/libgnu_a-scratch_buffer_grow.Tpo malloc/$(DEPDIR)/libgnu_a-scratch_buffer_grow.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='malloc/scratch_buffer_grow.c' object='malloc/libgnu_a-scratch_buffer_grow.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o malloc/libgnu_a-scratch_buffer_grow.obj `if test -f 'malloc/scratch_buffer_grow.c'; then $(CYGPATH_W) 'malloc/scratch_buffer_grow.c'; else $(CYGPATH_W) '$(srcdir)/malloc/scratch_buffer_grow.c'; fi`
+
+malloc/libgnu_a-scratch_buffer_grow_preserve.o: malloc/scratch_buffer_grow_preserve.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT malloc/libgnu_a-scratch_buffer_grow_preserve.o -MD -MP -MF malloc/$(DEPDIR)/libgnu_a-scratch_buffer_grow_preserve.Tpo -c -o malloc/libgnu_a-scratch_buffer_grow_preserve.o `test -f 'malloc/scratch_buffer_grow_preserve.c' || echo '$(srcdir)/'`malloc/scratch_buffer_grow_preserve.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) malloc/$(DEPDIR)/libgnu_a-scratch_buffer_grow_preserve.Tpo malloc/$(DEPDIR)/libgnu_a-scratch_buffer_grow_preserve.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='malloc/scratch_buffer_grow_preserve.c' object='malloc/libgnu_a-scratch_buffer_grow_preserve.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o malloc/libgnu_a-scratch_buffer_grow_preserve.o `test -f 'malloc/scratch_buffer_grow_preserve.c' || echo '$(srcdir)/'`malloc/scratch_buffer_grow_preserve.c
+
+malloc/libgnu_a-scratch_buffer_grow_preserve.obj: malloc/scratch_buffer_grow_preserve.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT malloc/libgnu_a-scratch_buffer_grow_preserve.obj -MD -MP -MF malloc/$(DEPDIR)/libgnu_a-scratch_buffer_grow_preserve.Tpo -c -o malloc/libgnu_a-scratch_buffer_grow_preserve.obj `if test -f 'malloc/scratch_buffer_grow_preserve.c'; then $(CYGPATH_W) 'malloc/scratch_buffer_grow_preserve.c'; else $(CYGPATH_W) '$(srcdir)/malloc/scratch_buffer_grow_preserve.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) malloc/$(DEPDIR)/libgnu_a-scratch_buffer_grow_preserve.Tpo malloc/$(DEPDIR)/libgnu_a-scratch_buffer_grow_preserve.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='malloc/scratch_buffer_grow_preserve.c' object='malloc/libgnu_a-scratch_buffer_grow_preserve.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o malloc/libgnu_a-scratch_buffer_grow_preserve.obj `if test -f 'malloc/scratch_buffer_grow_preserve.c'; then $(CYGPATH_W) 'malloc/scratch_buffer_grow_preserve.c'; else $(CYGPATH_W) '$(srcdir)/malloc/scratch_buffer_grow_preserve.c'; fi`
+
+malloc/libgnu_a-scratch_buffer_set_array_size.o: malloc/scratch_buffer_set_array_size.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT malloc/libgnu_a-scratch_buffer_set_array_size.o -MD -MP -MF malloc/$(DEPDIR)/libgnu_a-scratch_buffer_set_array_size.Tpo -c -o malloc/libgnu_a-scratch_buffer_set_array_size.o `test -f 'malloc/scratch_buffer_set_array_size.c' || echo '$(srcdir)/'`malloc/scratch_buffer_set_array_size.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) malloc/$(DEPDIR)/libgnu_a-scratch_buffer_set_array_size.Tpo malloc/$(DEPDIR)/libgnu_a-scratch_buffer_set_array_size.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='malloc/scratch_buffer_set_array_size.c' object='malloc/libgnu_a-scratch_buffer_set_array_size.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o malloc/libgnu_a-scratch_buffer_set_array_size.o `test -f 'malloc/scratch_buffer_set_array_size.c' || echo '$(srcdir)/'`malloc/scratch_buffer_set_array_size.c
+
+malloc/libgnu_a-scratch_buffer_set_array_size.obj: malloc/scratch_buffer_set_array_size.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT malloc/libgnu_a-scratch_buffer_set_array_size.obj -MD -MP -MF malloc/$(DEPDIR)/libgnu_a-scratch_buffer_set_array_size.Tpo -c -o malloc/libgnu_a-scratch_buffer_set_array_size.obj `if test -f 'malloc/scratch_buffer_set_array_size.c'; then $(CYGPATH_W) 'malloc/scratch_buffer_set_array_size.c'; else $(CYGPATH_W) '$(srcdir)/malloc/scratch_buffer_set_array_size.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) malloc/$(DEPDIR)/libgnu_a-scratch_buffer_set_array_size.Tpo malloc/$(DEPDIR)/libgnu_a-scratch_buffer_set_array_size.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='malloc/scratch_buffer_set_array_size.c' object='malloc/libgnu_a-scratch_buffer_set_array_size.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o malloc/libgnu_a-scratch_buffer_set_array_size.obj `if test -f 'malloc/scratch_buffer_set_array_size.c'; then $(CYGPATH_W) 'malloc/scratch_buffer_set_array_size.c'; else $(CYGPATH_W) '$(srcdir)/malloc/scratch_buffer_set_array_size.c'; fi`
+
+libgnu_a-select.o: select.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-select.o -MD -MP -MF $(DEPDIR)/libgnu_a-select.Tpo -c -o libgnu_a-select.o `test -f 'select.c' || echo '$(srcdir)/'`select.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-select.Tpo $(DEPDIR)/libgnu_a-select.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='select.c' object='libgnu_a-select.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-select.o `test -f 'select.c' || echo '$(srcdir)/'`select.c
+
+libgnu_a-select.obj: select.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-select.obj -MD -MP -MF $(DEPDIR)/libgnu_a-select.Tpo -c -o libgnu_a-select.obj `if test -f 'select.c'; then $(CYGPATH_W) 'select.c'; else $(CYGPATH_W) '$(srcdir)/select.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-select.Tpo $(DEPDIR)/libgnu_a-select.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='select.c' object='libgnu_a-select.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-select.obj `if test -f 'select.c'; then $(CYGPATH_W) 'select.c'; else $(CYGPATH_W) '$(srcdir)/select.c'; fi`
+
+libgnu_a-setenv.o: setenv.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-setenv.o -MD -MP -MF $(DEPDIR)/libgnu_a-setenv.Tpo -c -o libgnu_a-setenv.o `test -f 'setenv.c' || echo '$(srcdir)/'`setenv.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-setenv.Tpo $(DEPDIR)/libgnu_a-setenv.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='setenv.c' object='libgnu_a-setenv.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-setenv.o `test -f 'setenv.c' || echo '$(srcdir)/'`setenv.c
+
+libgnu_a-setenv.obj: setenv.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-setenv.obj -MD -MP -MF $(DEPDIR)/libgnu_a-setenv.Tpo -c -o libgnu_a-setenv.obj `if test -f 'setenv.c'; then $(CYGPATH_W) 'setenv.c'; else $(CYGPATH_W) '$(srcdir)/setenv.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-setenv.Tpo $(DEPDIR)/libgnu_a-setenv.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='setenv.c' object='libgnu_a-setenv.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-setenv.obj `if test -f 'setenv.c'; then $(CYGPATH_W) 'setenv.c'; else $(CYGPATH_W) '$(srcdir)/setenv.c'; fi`
+
+libgnu_a-setlocale_null.o: setlocale_null.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-setlocale_null.o -MD -MP -MF $(DEPDIR)/libgnu_a-setlocale_null.Tpo -c -o libgnu_a-setlocale_null.o `test -f 'setlocale_null.c' || echo '$(srcdir)/'`setlocale_null.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-setlocale_null.Tpo $(DEPDIR)/libgnu_a-setlocale_null.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='setlocale_null.c' object='libgnu_a-setlocale_null.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-setlocale_null.o `test -f 'setlocale_null.c' || echo '$(srcdir)/'`setlocale_null.c
+
+libgnu_a-setlocale_null.obj: setlocale_null.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-setlocale_null.obj -MD -MP -MF $(DEPDIR)/libgnu_a-setlocale_null.Tpo -c -o libgnu_a-setlocale_null.obj `if test -f 'setlocale_null.c'; then $(CYGPATH_W) 'setlocale_null.c'; else $(CYGPATH_W) '$(srcdir)/setlocale_null.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-setlocale_null.Tpo $(DEPDIR)/libgnu_a-setlocale_null.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='setlocale_null.c' object='libgnu_a-setlocale_null.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-setlocale_null.obj `if test -f 'setlocale_null.c'; then $(CYGPATH_W) 'setlocale_null.c'; else $(CYGPATH_W) '$(srcdir)/setlocale_null.c'; fi`
+
+libgnu_a-setlocale-lock.o: setlocale-lock.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-setlocale-lock.o -MD -MP -MF $(DEPDIR)/libgnu_a-setlocale-lock.Tpo -c -o libgnu_a-setlocale-lock.o `test -f 'setlocale-lock.c' || echo '$(srcdir)/'`setlocale-lock.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-setlocale-lock.Tpo $(DEPDIR)/libgnu_a-setlocale-lock.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='setlocale-lock.c' object='libgnu_a-setlocale-lock.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-setlocale-lock.o `test -f 'setlocale-lock.c' || echo '$(srcdir)/'`setlocale-lock.c
+
+libgnu_a-setlocale-lock.obj: setlocale-lock.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-setlocale-lock.obj -MD -MP -MF $(DEPDIR)/libgnu_a-setlocale-lock.Tpo -c -o libgnu_a-setlocale-lock.obj `if test -f 'setlocale-lock.c'; then $(CYGPATH_W) 'setlocale-lock.c'; else $(CYGPATH_W) '$(srcdir)/setlocale-lock.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-setlocale-lock.Tpo $(DEPDIR)/libgnu_a-setlocale-lock.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='setlocale-lock.c' object='libgnu_a-setlocale-lock.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-setlocale-lock.obj `if test -f 'setlocale-lock.c'; then $(CYGPATH_W) 'setlocale-lock.c'; else $(CYGPATH_W) '$(srcdir)/setlocale-lock.c'; fi`
+
+libgnu_a-setsockopt.o: setsockopt.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-setsockopt.o -MD -MP -MF $(DEPDIR)/libgnu_a-setsockopt.Tpo -c -o libgnu_a-setsockopt.o `test -f 'setsockopt.c' || echo '$(srcdir)/'`setsockopt.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-setsockopt.Tpo $(DEPDIR)/libgnu_a-setsockopt.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='setsockopt.c' object='libgnu_a-setsockopt.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-setsockopt.o `test -f 'setsockopt.c' || echo '$(srcdir)/'`setsockopt.c
+
+libgnu_a-setsockopt.obj: setsockopt.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-setsockopt.obj -MD -MP -MF $(DEPDIR)/libgnu_a-setsockopt.Tpo -c -o libgnu_a-setsockopt.obj `if test -f 'setsockopt.c'; then $(CYGPATH_W) 'setsockopt.c'; else $(CYGPATH_W) '$(srcdir)/setsockopt.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-setsockopt.Tpo $(DEPDIR)/libgnu_a-setsockopt.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='setsockopt.c' object='libgnu_a-setsockopt.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-setsockopt.obj `if test -f 'setsockopt.c'; then $(CYGPATH_W) 'setsockopt.c'; else $(CYGPATH_W) '$(srcdir)/setsockopt.c'; fi`
+
+libgnu_a-socket.o: socket.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-socket.o -MD -MP -MF $(DEPDIR)/libgnu_a-socket.Tpo -c -o libgnu_a-socket.o `test -f 'socket.c' || echo '$(srcdir)/'`socket.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-socket.Tpo $(DEPDIR)/libgnu_a-socket.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='socket.c' object='libgnu_a-socket.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-socket.o `test -f 'socket.c' || echo '$(srcdir)/'`socket.c
+
+libgnu_a-socket.obj: socket.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-socket.obj -MD -MP -MF $(DEPDIR)/libgnu_a-socket.Tpo -c -o libgnu_a-socket.obj `if test -f 'socket.c'; then $(CYGPATH_W) 'socket.c'; else $(CYGPATH_W) '$(srcdir)/socket.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-socket.Tpo $(DEPDIR)/libgnu_a-socket.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='socket.c' object='libgnu_a-socket.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-socket.obj `if test -f 'socket.c'; then $(CYGPATH_W) 'socket.c'; else $(CYGPATH_W) '$(srcdir)/socket.c'; fi`
+
+libgnu_a-sockets.o: sockets.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-sockets.o -MD -MP -MF $(DEPDIR)/libgnu_a-sockets.Tpo -c -o libgnu_a-sockets.o `test -f 'sockets.c' || echo '$(srcdir)/'`sockets.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-sockets.Tpo $(DEPDIR)/libgnu_a-sockets.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sockets.c' object='libgnu_a-sockets.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-sockets.o `test -f 'sockets.c' || echo '$(srcdir)/'`sockets.c
+
+libgnu_a-sockets.obj: sockets.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-sockets.obj -MD -MP -MF $(DEPDIR)/libgnu_a-sockets.Tpo -c -o libgnu_a-sockets.obj `if test -f 'sockets.c'; then $(CYGPATH_W) 'sockets.c'; else $(CYGPATH_W) '$(srcdir)/sockets.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-sockets.Tpo $(DEPDIR)/libgnu_a-sockets.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sockets.c' object='libgnu_a-sockets.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-sockets.obj `if test -f 'sockets.c'; then $(CYGPATH_W) 'sockets.c'; else $(CYGPATH_W) '$(srcdir)/sockets.c'; fi`
+
+libgnu_a-stat.o: stat.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-stat.o -MD -MP -MF $(DEPDIR)/libgnu_a-stat.Tpo -c -o libgnu_a-stat.o `test -f 'stat.c' || echo '$(srcdir)/'`stat.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-stat.Tpo $(DEPDIR)/libgnu_a-stat.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='stat.c' object='libgnu_a-stat.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-stat.o `test -f 'stat.c' || echo '$(srcdir)/'`stat.c
+
+libgnu_a-stat.obj: stat.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-stat.obj -MD -MP -MF $(DEPDIR)/libgnu_a-stat.Tpo -c -o libgnu_a-stat.obj `if test -f 'stat.c'; then $(CYGPATH_W) 'stat.c'; else $(CYGPATH_W) '$(srcdir)/stat.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-stat.Tpo $(DEPDIR)/libgnu_a-stat.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='stat.c' object='libgnu_a-stat.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-stat.obj `if test -f 'stat.c'; then $(CYGPATH_W) 'stat.c'; else $(CYGPATH_W) '$(srcdir)/stat.c'; fi`
+
+libgnu_a-stat-time.o: stat-time.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-stat-time.o -MD -MP -MF $(DEPDIR)/libgnu_a-stat-time.Tpo -c -o libgnu_a-stat-time.o `test -f 'stat-time.c' || echo '$(srcdir)/'`stat-time.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-stat-time.Tpo $(DEPDIR)/libgnu_a-stat-time.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='stat-time.c' object='libgnu_a-stat-time.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-stat-time.o `test -f 'stat-time.c' || echo '$(srcdir)/'`stat-time.c
+
+libgnu_a-stat-time.obj: stat-time.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-stat-time.obj -MD -MP -MF $(DEPDIR)/libgnu_a-stat-time.Tpo -c -o libgnu_a-stat-time.obj `if test -f 'stat-time.c'; then $(CYGPATH_W) 'stat-time.c'; else $(CYGPATH_W) '$(srcdir)/stat-time.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-stat-time.Tpo $(DEPDIR)/libgnu_a-stat-time.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='stat-time.c' object='libgnu_a-stat-time.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-stat-time.obj `if test -f 'stat-time.c'; then $(CYGPATH_W) 'stat-time.c'; else $(CYGPATH_W) '$(srcdir)/stat-time.c'; fi`
+
+libgnu_a-stdio-read.o: stdio-read.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-stdio-read.o -MD -MP -MF $(DEPDIR)/libgnu_a-stdio-read.Tpo -c -o libgnu_a-stdio-read.o `test -f 'stdio-read.c' || echo '$(srcdir)/'`stdio-read.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-stdio-read.Tpo $(DEPDIR)/libgnu_a-stdio-read.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='stdio-read.c' object='libgnu_a-stdio-read.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-stdio-read.o `test -f 'stdio-read.c' || echo '$(srcdir)/'`stdio-read.c
+
+libgnu_a-stdio-read.obj: stdio-read.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-stdio-read.obj -MD -MP -MF $(DEPDIR)/libgnu_a-stdio-read.Tpo -c -o libgnu_a-stdio-read.obj `if test -f 'stdio-read.c'; then $(CYGPATH_W) 'stdio-read.c'; else $(CYGPATH_W) '$(srcdir)/stdio-read.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-stdio-read.Tpo $(DEPDIR)/libgnu_a-stdio-read.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='stdio-read.c' object='libgnu_a-stdio-read.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-stdio-read.obj `if test -f 'stdio-read.c'; then $(CYGPATH_W) 'stdio-read.c'; else $(CYGPATH_W) '$(srcdir)/stdio-read.c'; fi`
+
+libgnu_a-stdio-write.o: stdio-write.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-stdio-write.o -MD -MP -MF $(DEPDIR)/libgnu_a-stdio-write.Tpo -c -o libgnu_a-stdio-write.o `test -f 'stdio-write.c' || echo '$(srcdir)/'`stdio-write.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-stdio-write.Tpo $(DEPDIR)/libgnu_a-stdio-write.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='stdio-write.c' object='libgnu_a-stdio-write.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-stdio-write.o `test -f 'stdio-write.c' || echo '$(srcdir)/'`stdio-write.c
+
+libgnu_a-stdio-write.obj: stdio-write.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-stdio-write.obj -MD -MP -MF $(DEPDIR)/libgnu_a-stdio-write.Tpo -c -o libgnu_a-stdio-write.obj `if test -f 'stdio-write.c'; then $(CYGPATH_W) 'stdio-write.c'; else $(CYGPATH_W) '$(srcdir)/stdio-write.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-stdio-write.Tpo $(DEPDIR)/libgnu_a-stdio-write.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='stdio-write.c' object='libgnu_a-stdio-write.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-stdio-write.obj `if test -f 'stdio-write.c'; then $(CYGPATH_W) 'stdio-write.c'; else $(CYGPATH_W) '$(srcdir)/stdio-write.c'; fi`
+
+libgnu_a-strchrnul.o: strchrnul.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-strchrnul.o -MD -MP -MF $(DEPDIR)/libgnu_a-strchrnul.Tpo -c -o libgnu_a-strchrnul.o `test -f 'strchrnul.c' || echo '$(srcdir)/'`strchrnul.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-strchrnul.Tpo $(DEPDIR)/libgnu_a-strchrnul.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='strchrnul.c' object='libgnu_a-strchrnul.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-strchrnul.o `test -f 'strchrnul.c' || echo '$(srcdir)/'`strchrnul.c
+
+libgnu_a-strchrnul.obj: strchrnul.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-strchrnul.obj -MD -MP -MF $(DEPDIR)/libgnu_a-strchrnul.Tpo -c -o libgnu_a-strchrnul.obj `if test -f 'strchrnul.c'; then $(CYGPATH_W) 'strchrnul.c'; else $(CYGPATH_W) '$(srcdir)/strchrnul.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-strchrnul.Tpo $(DEPDIR)/libgnu_a-strchrnul.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='strchrnul.c' object='libgnu_a-strchrnul.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-strchrnul.obj `if test -f 'strchrnul.c'; then $(CYGPATH_W) 'strchrnul.c'; else $(CYGPATH_W) '$(srcdir)/strchrnul.c'; fi`
+
+libgnu_a-strdup.o: strdup.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-strdup.o -MD -MP -MF $(DEPDIR)/libgnu_a-strdup.Tpo -c -o libgnu_a-strdup.o `test -f 'strdup.c' || echo '$(srcdir)/'`strdup.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-strdup.Tpo $(DEPDIR)/libgnu_a-strdup.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='strdup.c' object='libgnu_a-strdup.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-strdup.o `test -f 'strdup.c' || echo '$(srcdir)/'`strdup.c
+
+libgnu_a-strdup.obj: strdup.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-strdup.obj -MD -MP -MF $(DEPDIR)/libgnu_a-strdup.Tpo -c -o libgnu_a-strdup.obj `if test -f 'strdup.c'; then $(CYGPATH_W) 'strdup.c'; else $(CYGPATH_W) '$(srcdir)/strdup.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-strdup.Tpo $(DEPDIR)/libgnu_a-strdup.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='strdup.c' object='libgnu_a-strdup.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-strdup.obj `if test -f 'strdup.c'; then $(CYGPATH_W) 'strdup.c'; else $(CYGPATH_W) '$(srcdir)/strdup.c'; fi`
+
+libgnu_a-strerror.o: strerror.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-strerror.o -MD -MP -MF $(DEPDIR)/libgnu_a-strerror.Tpo -c -o libgnu_a-strerror.o `test -f 'strerror.c' || echo '$(srcdir)/'`strerror.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-strerror.Tpo $(DEPDIR)/libgnu_a-strerror.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='strerror.c' object='libgnu_a-strerror.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-strerror.o `test -f 'strerror.c' || echo '$(srcdir)/'`strerror.c
+
+libgnu_a-strerror.obj: strerror.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-strerror.obj -MD -MP -MF $(DEPDIR)/libgnu_a-strerror.Tpo -c -o libgnu_a-strerror.obj `if test -f 'strerror.c'; then $(CYGPATH_W) 'strerror.c'; else $(CYGPATH_W) '$(srcdir)/strerror.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-strerror.Tpo $(DEPDIR)/libgnu_a-strerror.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='strerror.c' object='libgnu_a-strerror.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-strerror.obj `if test -f 'strerror.c'; then $(CYGPATH_W) 'strerror.c'; else $(CYGPATH_W) '$(srcdir)/strerror.c'; fi`
+
+libgnu_a-strerror-override.o: strerror-override.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-strerror-override.o -MD -MP -MF $(DEPDIR)/libgnu_a-strerror-override.Tpo -c -o libgnu_a-strerror-override.o `test -f 'strerror-override.c' || echo '$(srcdir)/'`strerror-override.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-strerror-override.Tpo $(DEPDIR)/libgnu_a-strerror-override.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='strerror-override.c' object='libgnu_a-strerror-override.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-strerror-override.o `test -f 'strerror-override.c' || echo '$(srcdir)/'`strerror-override.c
+
+libgnu_a-strerror-override.obj: strerror-override.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-strerror-override.obj -MD -MP -MF $(DEPDIR)/libgnu_a-strerror-override.Tpo -c -o libgnu_a-strerror-override.obj `if test -f 'strerror-override.c'; then $(CYGPATH_W) 'strerror-override.c'; else $(CYGPATH_W) '$(srcdir)/strerror-override.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-strerror-override.Tpo $(DEPDIR)/libgnu_a-strerror-override.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='strerror-override.c' object='libgnu_a-strerror-override.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-strerror-override.obj `if test -f 'strerror-override.c'; then $(CYGPATH_W) 'strerror-override.c'; else $(CYGPATH_W) '$(srcdir)/strerror-override.c'; fi`
+
+libgnu_a-strnlen.o: strnlen.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-strnlen.o -MD -MP -MF $(DEPDIR)/libgnu_a-strnlen.Tpo -c -o libgnu_a-strnlen.o `test -f 'strnlen.c' || echo '$(srcdir)/'`strnlen.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-strnlen.Tpo $(DEPDIR)/libgnu_a-strnlen.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='strnlen.c' object='libgnu_a-strnlen.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-strnlen.o `test -f 'strnlen.c' || echo '$(srcdir)/'`strnlen.c
+
+libgnu_a-strnlen.obj: strnlen.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-strnlen.obj -MD -MP -MF $(DEPDIR)/libgnu_a-strnlen.Tpo -c -o libgnu_a-strnlen.obj `if test -f 'strnlen.c'; then $(CYGPATH_W) 'strnlen.c'; else $(CYGPATH_W) '$(srcdir)/strnlen.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-strnlen.Tpo $(DEPDIR)/libgnu_a-strnlen.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='strnlen.c' object='libgnu_a-strnlen.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-strnlen.obj `if test -f 'strnlen.c'; then $(CYGPATH_W) 'strnlen.c'; else $(CYGPATH_W) '$(srcdir)/strnlen.c'; fi`
+
+libgnu_a-strnlen1.o: strnlen1.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-strnlen1.o -MD -MP -MF $(DEPDIR)/libgnu_a-strnlen1.Tpo -c -o libgnu_a-strnlen1.o `test -f 'strnlen1.c' || echo '$(srcdir)/'`strnlen1.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-strnlen1.Tpo $(DEPDIR)/libgnu_a-strnlen1.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='strnlen1.c' object='libgnu_a-strnlen1.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-strnlen1.o `test -f 'strnlen1.c' || echo '$(srcdir)/'`strnlen1.c
+
+libgnu_a-strnlen1.obj: strnlen1.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-strnlen1.obj -MD -MP -MF $(DEPDIR)/libgnu_a-strnlen1.Tpo -c -o libgnu_a-strnlen1.obj `if test -f 'strnlen1.c'; then $(CYGPATH_W) 'strnlen1.c'; else $(CYGPATH_W) '$(srcdir)/strnlen1.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-strnlen1.Tpo $(DEPDIR)/libgnu_a-strnlen1.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='strnlen1.c' object='libgnu_a-strnlen1.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-strnlen1.obj `if test -f 'strnlen1.c'; then $(CYGPATH_W) 'strnlen1.c'; else $(CYGPATH_W) '$(srcdir)/strnlen1.c'; fi`
+
+libgnu_a-strtok_r.o: strtok_r.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-strtok_r.o -MD -MP -MF $(DEPDIR)/libgnu_a-strtok_r.Tpo -c -o libgnu_a-strtok_r.o `test -f 'strtok_r.c' || echo '$(srcdir)/'`strtok_r.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-strtok_r.Tpo $(DEPDIR)/libgnu_a-strtok_r.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='strtok_r.c' object='libgnu_a-strtok_r.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-strtok_r.o `test -f 'strtok_r.c' || echo '$(srcdir)/'`strtok_r.c
+
+libgnu_a-strtok_r.obj: strtok_r.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-strtok_r.obj -MD -MP -MF $(DEPDIR)/libgnu_a-strtok_r.Tpo -c -o libgnu_a-strtok_r.obj `if test -f 'strtok_r.c'; then $(CYGPATH_W) 'strtok_r.c'; else $(CYGPATH_W) '$(srcdir)/strtok_r.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-strtok_r.Tpo $(DEPDIR)/libgnu_a-strtok_r.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='strtok_r.c' object='libgnu_a-strtok_r.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-strtok_r.obj `if test -f 'strtok_r.c'; then $(CYGPATH_W) 'strtok_r.c'; else $(CYGPATH_W) '$(srcdir)/strtok_r.c'; fi`
+
+libgnu_a-sys_socket.o: sys_socket.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-sys_socket.o -MD -MP -MF $(DEPDIR)/libgnu_a-sys_socket.Tpo -c -o libgnu_a-sys_socket.o `test -f 'sys_socket.c' || echo '$(srcdir)/'`sys_socket.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-sys_socket.Tpo $(DEPDIR)/libgnu_a-sys_socket.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sys_socket.c' object='libgnu_a-sys_socket.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-sys_socket.o `test -f 'sys_socket.c' || echo '$(srcdir)/'`sys_socket.c
+
+libgnu_a-sys_socket.obj: sys_socket.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-sys_socket.obj -MD -MP -MF $(DEPDIR)/libgnu_a-sys_socket.Tpo -c -o libgnu_a-sys_socket.obj `if test -f 'sys_socket.c'; then $(CYGPATH_W) 'sys_socket.c'; else $(CYGPATH_W) '$(srcdir)/sys_socket.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-sys_socket.Tpo $(DEPDIR)/libgnu_a-sys_socket.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sys_socket.c' object='libgnu_a-sys_socket.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-sys_socket.obj `if test -f 'sys_socket.c'; then $(CYGPATH_W) 'sys_socket.c'; else $(CYGPATH_W) '$(srcdir)/sys_socket.c'; fi`
+
+libgnu_a-tempname.o: tempname.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-tempname.o -MD -MP -MF $(DEPDIR)/libgnu_a-tempname.Tpo -c -o libgnu_a-tempname.o `test -f 'tempname.c' || echo '$(srcdir)/'`tempname.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-tempname.Tpo $(DEPDIR)/libgnu_a-tempname.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tempname.c' object='libgnu_a-tempname.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-tempname.o `test -f 'tempname.c' || echo '$(srcdir)/'`tempname.c
+
+libgnu_a-tempname.obj: tempname.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-tempname.obj -MD -MP -MF $(DEPDIR)/libgnu_a-tempname.Tpo -c -o libgnu_a-tempname.obj `if test -f 'tempname.c'; then $(CYGPATH_W) 'tempname.c'; else $(CYGPATH_W) '$(srcdir)/tempname.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-tempname.Tpo $(DEPDIR)/libgnu_a-tempname.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tempname.c' object='libgnu_a-tempname.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-tempname.obj `if test -f 'tempname.c'; then $(CYGPATH_W) 'tempname.c'; else $(CYGPATH_W) '$(srcdir)/tempname.c'; fi`
+
+glthread/libgnu_a-threadlib.o: glthread/threadlib.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT glthread/libgnu_a-threadlib.o -MD -MP -MF glthread/$(DEPDIR)/libgnu_a-threadlib.Tpo -c -o glthread/libgnu_a-threadlib.o `test -f 'glthread/threadlib.c' || echo '$(srcdir)/'`glthread/threadlib.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) glthread/$(DEPDIR)/libgnu_a-threadlib.Tpo glthread/$(DEPDIR)/libgnu_a-threadlib.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='glthread/threadlib.c' object='glthread/libgnu_a-threadlib.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o glthread/libgnu_a-threadlib.o `test -f 'glthread/threadlib.c' || echo '$(srcdir)/'`glthread/threadlib.c
+
+glthread/libgnu_a-threadlib.obj: glthread/threadlib.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT glthread/libgnu_a-threadlib.obj -MD -MP -MF glthread/$(DEPDIR)/libgnu_a-threadlib.Tpo -c -o glthread/libgnu_a-threadlib.obj `if test -f 'glthread/threadlib.c'; then $(CYGPATH_W) 'glthread/threadlib.c'; else $(CYGPATH_W) '$(srcdir)/glthread/threadlib.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) glthread/$(DEPDIR)/libgnu_a-threadlib.Tpo glthread/$(DEPDIR)/libgnu_a-threadlib.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='glthread/threadlib.c' object='glthread/libgnu_a-threadlib.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o glthread/libgnu_a-threadlib.obj `if test -f 'glthread/threadlib.c'; then $(CYGPATH_W) 'glthread/threadlib.c'; else $(CYGPATH_W) '$(srcdir)/glthread/threadlib.c'; fi`
+
+libgnu_a-time_r.o: time_r.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-time_r.o -MD -MP -MF $(DEPDIR)/libgnu_a-time_r.Tpo -c -o libgnu_a-time_r.o `test -f 'time_r.c' || echo '$(srcdir)/'`time_r.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-time_r.Tpo $(DEPDIR)/libgnu_a-time_r.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='time_r.c' object='libgnu_a-time_r.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-time_r.o `test -f 'time_r.c' || echo '$(srcdir)/'`time_r.c
+
+libgnu_a-time_r.obj: time_r.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-time_r.obj -MD -MP -MF $(DEPDIR)/libgnu_a-time_r.Tpo -c -o libgnu_a-time_r.obj `if test -f 'time_r.c'; then $(CYGPATH_W) 'time_r.c'; else $(CYGPATH_W) '$(srcdir)/time_r.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-time_r.Tpo $(DEPDIR)/libgnu_a-time_r.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='time_r.c' object='libgnu_a-time_r.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-time_r.obj `if test -f 'time_r.c'; then $(CYGPATH_W) 'time_r.c'; else $(CYGPATH_W) '$(srcdir)/time_r.c'; fi`
+
+libgnu_a-unistd.o: unistd.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-unistd.o -MD -MP -MF $(DEPDIR)/libgnu_a-unistd.Tpo -c -o libgnu_a-unistd.o `test -f 'unistd.c' || echo '$(srcdir)/'`unistd.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-unistd.Tpo $(DEPDIR)/libgnu_a-unistd.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unistd.c' object='libgnu_a-unistd.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-unistd.o `test -f 'unistd.c' || echo '$(srcdir)/'`unistd.c
+
+libgnu_a-unistd.obj: unistd.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-unistd.obj -MD -MP -MF $(DEPDIR)/libgnu_a-unistd.Tpo -c -o libgnu_a-unistd.obj `if test -f 'unistd.c'; then $(CYGPATH_W) 'unistd.c'; else $(CYGPATH_W) '$(srcdir)/unistd.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-unistd.Tpo $(DEPDIR)/libgnu_a-unistd.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unistd.c' object='libgnu_a-unistd.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-unistd.obj `if test -f 'unistd.c'; then $(CYGPATH_W) 'unistd.c'; else $(CYGPATH_W) '$(srcdir)/unistd.c'; fi`
+
+libgnu_a-dup-safer.o: dup-safer.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-dup-safer.o -MD -MP -MF $(DEPDIR)/libgnu_a-dup-safer.Tpo -c -o libgnu_a-dup-safer.o `test -f 'dup-safer.c' || echo '$(srcdir)/'`dup-safer.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-dup-safer.Tpo $(DEPDIR)/libgnu_a-dup-safer.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dup-safer.c' object='libgnu_a-dup-safer.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-dup-safer.o `test -f 'dup-safer.c' || echo '$(srcdir)/'`dup-safer.c
+
+libgnu_a-dup-safer.obj: dup-safer.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-dup-safer.obj -MD -MP -MF $(DEPDIR)/libgnu_a-dup-safer.Tpo -c -o libgnu_a-dup-safer.obj `if test -f 'dup-safer.c'; then $(CYGPATH_W) 'dup-safer.c'; else $(CYGPATH_W) '$(srcdir)/dup-safer.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-dup-safer.Tpo $(DEPDIR)/libgnu_a-dup-safer.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dup-safer.c' object='libgnu_a-dup-safer.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-dup-safer.obj `if test -f 'dup-safer.c'; then $(CYGPATH_W) 'dup-safer.c'; else $(CYGPATH_W) '$(srcdir)/dup-safer.c'; fi`
+
+libgnu_a-fd-safer.o: fd-safer.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-fd-safer.o -MD -MP -MF $(DEPDIR)/libgnu_a-fd-safer.Tpo -c -o libgnu_a-fd-safer.o `test -f 'fd-safer.c' || echo '$(srcdir)/'`fd-safer.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-fd-safer.Tpo $(DEPDIR)/libgnu_a-fd-safer.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fd-safer.c' object='libgnu_a-fd-safer.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-fd-safer.o `test -f 'fd-safer.c' || echo '$(srcdir)/'`fd-safer.c
+
+libgnu_a-fd-safer.obj: fd-safer.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-fd-safer.obj -MD -MP -MF $(DEPDIR)/libgnu_a-fd-safer.Tpo -c -o libgnu_a-fd-safer.obj `if test -f 'fd-safer.c'; then $(CYGPATH_W) 'fd-safer.c'; else $(CYGPATH_W) '$(srcdir)/fd-safer.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-fd-safer.Tpo $(DEPDIR)/libgnu_a-fd-safer.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fd-safer.c' object='libgnu_a-fd-safer.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-fd-safer.obj `if test -f 'fd-safer.c'; then $(CYGPATH_W) 'fd-safer.c'; else $(CYGPATH_W) '$(srcdir)/fd-safer.c'; fi`
+
+libgnu_a-pipe-safer.o: pipe-safer.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-pipe-safer.o -MD -MP -MF $(DEPDIR)/libgnu_a-pipe-safer.Tpo -c -o libgnu_a-pipe-safer.o `test -f 'pipe-safer.c' || echo '$(srcdir)/'`pipe-safer.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-pipe-safer.Tpo $(DEPDIR)/libgnu_a-pipe-safer.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pipe-safer.c' object='libgnu_a-pipe-safer.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-pipe-safer.o `test -f 'pipe-safer.c' || echo '$(srcdir)/'`pipe-safer.c
+
+libgnu_a-pipe-safer.obj: pipe-safer.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-pipe-safer.obj -MD -MP -MF $(DEPDIR)/libgnu_a-pipe-safer.Tpo -c -o libgnu_a-pipe-safer.obj `if test -f 'pipe-safer.c'; then $(CYGPATH_W) 'pipe-safer.c'; else $(CYGPATH_W) '$(srcdir)/pipe-safer.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-pipe-safer.Tpo $(DEPDIR)/libgnu_a-pipe-safer.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pipe-safer.c' object='libgnu_a-pipe-safer.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-pipe-safer.obj `if test -f 'pipe-safer.c'; then $(CYGPATH_W) 'pipe-safer.c'; else $(CYGPATH_W) '$(srcdir)/pipe-safer.c'; fi`
+
+libgnu_a-unsetenv.o: unsetenv.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-unsetenv.o -MD -MP -MF $(DEPDIR)/libgnu_a-unsetenv.Tpo -c -o libgnu_a-unsetenv.o `test -f 'unsetenv.c' || echo '$(srcdir)/'`unsetenv.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-unsetenv.Tpo $(DEPDIR)/libgnu_a-unsetenv.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unsetenv.c' object='libgnu_a-unsetenv.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-unsetenv.o `test -f 'unsetenv.c' || echo '$(srcdir)/'`unsetenv.c
+
+libgnu_a-unsetenv.obj: unsetenv.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-unsetenv.obj -MD -MP -MF $(DEPDIR)/libgnu_a-unsetenv.Tpo -c -o libgnu_a-unsetenv.obj `if test -f 'unsetenv.c'; then $(CYGPATH_W) 'unsetenv.c'; else $(CYGPATH_W) '$(srcdir)/unsetenv.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-unsetenv.Tpo $(DEPDIR)/libgnu_a-unsetenv.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unsetenv.c' object='libgnu_a-unsetenv.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-unsetenv.obj `if test -f 'unsetenv.c'; then $(CYGPATH_W) 'unsetenv.c'; else $(CYGPATH_W) '$(srcdir)/unsetenv.c'; fi`
+
+libgnu_a-wctype-h.o: wctype-h.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-wctype-h.o -MD -MP -MF $(DEPDIR)/libgnu_a-wctype-h.Tpo -c -o libgnu_a-wctype-h.o `test -f 'wctype-h.c' || echo '$(srcdir)/'`wctype-h.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-wctype-h.Tpo $(DEPDIR)/libgnu_a-wctype-h.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='wctype-h.c' object='libgnu_a-wctype-h.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-wctype-h.o `test -f 'wctype-h.c' || echo '$(srcdir)/'`wctype-h.c
+
+libgnu_a-wctype-h.obj: wctype-h.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-wctype-h.obj -MD -MP -MF $(DEPDIR)/libgnu_a-wctype-h.Tpo -c -o libgnu_a-wctype-h.obj `if test -f 'wctype-h.c'; then $(CYGPATH_W) 'wctype-h.c'; else $(CYGPATH_W) '$(srcdir)/wctype-h.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-wctype-h.Tpo $(DEPDIR)/libgnu_a-wctype-h.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='wctype-h.c' object='libgnu_a-wctype-h.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-wctype-h.obj `if test -f 'wctype-h.c'; then $(CYGPATH_W) 'wctype-h.c'; else $(CYGPATH_W) '$(srcdir)/wctype-h.c'; fi`
+
+libgnu_a-windows-mutex.o: windows-mutex.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-windows-mutex.o -MD -MP -MF $(DEPDIR)/libgnu_a-windows-mutex.Tpo -c -o libgnu_a-windows-mutex.o `test -f 'windows-mutex.c' || echo '$(srcdir)/'`windows-mutex.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-windows-mutex.Tpo $(DEPDIR)/libgnu_a-windows-mutex.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='windows-mutex.c' object='libgnu_a-windows-mutex.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-windows-mutex.o `test -f 'windows-mutex.c' || echo '$(srcdir)/'`windows-mutex.c
+
+libgnu_a-windows-mutex.obj: windows-mutex.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-windows-mutex.obj -MD -MP -MF $(DEPDIR)/libgnu_a-windows-mutex.Tpo -c -o libgnu_a-windows-mutex.obj `if test -f 'windows-mutex.c'; then $(CYGPATH_W) 'windows-mutex.c'; else $(CYGPATH_W) '$(srcdir)/windows-mutex.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-windows-mutex.Tpo $(DEPDIR)/libgnu_a-windows-mutex.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='windows-mutex.c' object='libgnu_a-windows-mutex.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-windows-mutex.obj `if test -f 'windows-mutex.c'; then $(CYGPATH_W) 'windows-mutex.c'; else $(CYGPATH_W) '$(srcdir)/windows-mutex.c'; fi`
+
+libgnu_a-windows-once.o: windows-once.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-windows-once.o -MD -MP -MF $(DEPDIR)/libgnu_a-windows-once.Tpo -c -o libgnu_a-windows-once.o `test -f 'windows-once.c' || echo '$(srcdir)/'`windows-once.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-windows-once.Tpo $(DEPDIR)/libgnu_a-windows-once.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='windows-once.c' object='libgnu_a-windows-once.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-windows-once.o `test -f 'windows-once.c' || echo '$(srcdir)/'`windows-once.c
+
+libgnu_a-windows-once.obj: windows-once.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-windows-once.obj -MD -MP -MF $(DEPDIR)/libgnu_a-windows-once.Tpo -c -o libgnu_a-windows-once.obj `if test -f 'windows-once.c'; then $(CYGPATH_W) 'windows-once.c'; else $(CYGPATH_W) '$(srcdir)/windows-once.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-windows-once.Tpo $(DEPDIR)/libgnu_a-windows-once.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='windows-once.c' object='libgnu_a-windows-once.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-windows-once.obj `if test -f 'windows-once.c'; then $(CYGPATH_W) 'windows-once.c'; else $(CYGPATH_W) '$(srcdir)/windows-once.c'; fi`
+
+libgnu_a-windows-recmutex.o: windows-recmutex.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-windows-recmutex.o -MD -MP -MF $(DEPDIR)/libgnu_a-windows-recmutex.Tpo -c -o libgnu_a-windows-recmutex.o `test -f 'windows-recmutex.c' || echo '$(srcdir)/'`windows-recmutex.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-windows-recmutex.Tpo $(DEPDIR)/libgnu_a-windows-recmutex.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='windows-recmutex.c' object='libgnu_a-windows-recmutex.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-windows-recmutex.o `test -f 'windows-recmutex.c' || echo '$(srcdir)/'`windows-recmutex.c
+
+libgnu_a-windows-recmutex.obj: windows-recmutex.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-windows-recmutex.obj -MD -MP -MF $(DEPDIR)/libgnu_a-windows-recmutex.Tpo -c -o libgnu_a-windows-recmutex.obj `if test -f 'windows-recmutex.c'; then $(CYGPATH_W) 'windows-recmutex.c'; else $(CYGPATH_W) '$(srcdir)/windows-recmutex.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-windows-recmutex.Tpo $(DEPDIR)/libgnu_a-windows-recmutex.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='windows-recmutex.c' object='libgnu_a-windows-recmutex.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-windows-recmutex.obj `if test -f 'windows-recmutex.c'; then $(CYGPATH_W) 'windows-recmutex.c'; else $(CYGPATH_W) '$(srcdir)/windows-recmutex.c'; fi`
+
+libgnu_a-windows-rwlock.o: windows-rwlock.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-windows-rwlock.o -MD -MP -MF $(DEPDIR)/libgnu_a-windows-rwlock.Tpo -c -o libgnu_a-windows-rwlock.o `test -f 'windows-rwlock.c' || echo '$(srcdir)/'`windows-rwlock.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-windows-rwlock.Tpo $(DEPDIR)/libgnu_a-windows-rwlock.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='windows-rwlock.c' object='libgnu_a-windows-rwlock.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-windows-rwlock.o `test -f 'windows-rwlock.c' || echo '$(srcdir)/'`windows-rwlock.c
+
+libgnu_a-windows-rwlock.obj: windows-rwlock.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-windows-rwlock.obj -MD -MP -MF $(DEPDIR)/libgnu_a-windows-rwlock.Tpo -c -o libgnu_a-windows-rwlock.obj `if test -f 'windows-rwlock.c'; then $(CYGPATH_W) 'windows-rwlock.c'; else $(CYGPATH_W) '$(srcdir)/windows-rwlock.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-windows-rwlock.Tpo $(DEPDIR)/libgnu_a-windows-rwlock.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='windows-rwlock.c' object='libgnu_a-windows-rwlock.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-windows-rwlock.obj `if test -f 'windows-rwlock.c'; then $(CYGPATH_W) 'windows-rwlock.c'; else $(CYGPATH_W) '$(srcdir)/windows-rwlock.c'; fi`
+
+libgnu_a-wmemchr.o: wmemchr.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-wmemchr.o -MD -MP -MF $(DEPDIR)/libgnu_a-wmemchr.Tpo -c -o libgnu_a-wmemchr.o `test -f 'wmemchr.c' || echo '$(srcdir)/'`wmemchr.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-wmemchr.Tpo $(DEPDIR)/libgnu_a-wmemchr.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='wmemchr.c' object='libgnu_a-wmemchr.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-wmemchr.o `test -f 'wmemchr.c' || echo '$(srcdir)/'`wmemchr.c
+
+libgnu_a-wmemchr.obj: wmemchr.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-wmemchr.obj -MD -MP -MF $(DEPDIR)/libgnu_a-wmemchr.Tpo -c -o libgnu_a-wmemchr.obj `if test -f 'wmemchr.c'; then $(CYGPATH_W) 'wmemchr.c'; else $(CYGPATH_W) '$(srcdir)/wmemchr.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-wmemchr.Tpo $(DEPDIR)/libgnu_a-wmemchr.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='wmemchr.c' object='libgnu_a-wmemchr.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-wmemchr.obj `if test -f 'wmemchr.c'; then $(CYGPATH_W) 'wmemchr.c'; else $(CYGPATH_W) '$(srcdir)/wmemchr.c'; fi`
+
+libgnu_a-wmempcpy.o: wmempcpy.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-wmempcpy.o -MD -MP -MF $(DEPDIR)/libgnu_a-wmempcpy.Tpo -c -o libgnu_a-wmempcpy.o `test -f 'wmempcpy.c' || echo '$(srcdir)/'`wmempcpy.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-wmempcpy.Tpo $(DEPDIR)/libgnu_a-wmempcpy.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='wmempcpy.c' object='libgnu_a-wmempcpy.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-wmempcpy.o `test -f 'wmempcpy.c' || echo '$(srcdir)/'`wmempcpy.c
+
+libgnu_a-wmempcpy.obj: wmempcpy.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-wmempcpy.obj -MD -MP -MF $(DEPDIR)/libgnu_a-wmempcpy.Tpo -c -o libgnu_a-wmempcpy.obj `if test -f 'wmempcpy.c'; then $(CYGPATH_W) 'wmempcpy.c'; else $(CYGPATH_W) '$(srcdir)/wmempcpy.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-wmempcpy.Tpo $(DEPDIR)/libgnu_a-wmempcpy.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='wmempcpy.c' object='libgnu_a-wmempcpy.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-wmempcpy.obj `if test -f 'wmempcpy.c'; then $(CYGPATH_W) 'wmempcpy.c'; else $(CYGPATH_W) '$(srcdir)/wmempcpy.c'; fi`
+
+libgnu_a-alloca.o: alloca.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-alloca.o -MD -MP -MF $(DEPDIR)/libgnu_a-alloca.Tpo -c -o libgnu_a-alloca.o `test -f 'alloca.c' || echo '$(srcdir)/'`alloca.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-alloca.Tpo $(DEPDIR)/libgnu_a-alloca.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='alloca.c' object='libgnu_a-alloca.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-alloca.o `test -f 'alloca.c' || echo '$(srcdir)/'`alloca.c
+
+libgnu_a-alloca.obj: alloca.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-alloca.obj -MD -MP -MF $(DEPDIR)/libgnu_a-alloca.Tpo -c -o libgnu_a-alloca.obj `if test -f 'alloca.c'; then $(CYGPATH_W) 'alloca.c'; else $(CYGPATH_W) '$(srcdir)/alloca.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-alloca.Tpo $(DEPDIR)/libgnu_a-alloca.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='alloca.c' object='libgnu_a-alloca.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-alloca.obj `if test -f 'alloca.c'; then $(CYGPATH_W) 'alloca.c'; else $(CYGPATH_W) '$(srcdir)/alloca.c'; fi`
+
+libgnu_a-fnmatch.o: fnmatch.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-fnmatch.o -MD -MP -MF $(DEPDIR)/libgnu_a-fnmatch.Tpo -c -o libgnu_a-fnmatch.o `test -f 'fnmatch.c' || echo '$(srcdir)/'`fnmatch.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-fnmatch.Tpo $(DEPDIR)/libgnu_a-fnmatch.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fnmatch.c' object='libgnu_a-fnmatch.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-fnmatch.o `test -f 'fnmatch.c' || echo '$(srcdir)/'`fnmatch.c
+
+libgnu_a-fnmatch.obj: fnmatch.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-fnmatch.obj -MD -MP -MF $(DEPDIR)/libgnu_a-fnmatch.Tpo -c -o libgnu_a-fnmatch.obj `if test -f 'fnmatch.c'; then $(CYGPATH_W) 'fnmatch.c'; else $(CYGPATH_W) '$(srcdir)/fnmatch.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-fnmatch.Tpo $(DEPDIR)/libgnu_a-fnmatch.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fnmatch.c' object='libgnu_a-fnmatch.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-fnmatch.obj `if test -f 'fnmatch.c'; then $(CYGPATH_W) 'fnmatch.c'; else $(CYGPATH_W) '$(srcdir)/fnmatch.c'; fi`
+
+libgnu_a-fnmatch_loop.o: fnmatch_loop.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-fnmatch_loop.o -MD -MP -MF $(DEPDIR)/libgnu_a-fnmatch_loop.Tpo -c -o libgnu_a-fnmatch_loop.o `test -f 'fnmatch_loop.c' || echo '$(srcdir)/'`fnmatch_loop.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-fnmatch_loop.Tpo $(DEPDIR)/libgnu_a-fnmatch_loop.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fnmatch_loop.c' object='libgnu_a-fnmatch_loop.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-fnmatch_loop.o `test -f 'fnmatch_loop.c' || echo '$(srcdir)/'`fnmatch_loop.c
+
+libgnu_a-fnmatch_loop.obj: fnmatch_loop.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-fnmatch_loop.obj -MD -MP -MF $(DEPDIR)/libgnu_a-fnmatch_loop.Tpo -c -o libgnu_a-fnmatch_loop.obj `if test -f 'fnmatch_loop.c'; then $(CYGPATH_W) 'fnmatch_loop.c'; else $(CYGPATH_W) '$(srcdir)/fnmatch_loop.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-fnmatch_loop.Tpo $(DEPDIR)/libgnu_a-fnmatch_loop.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fnmatch_loop.c' object='libgnu_a-fnmatch_loop.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-fnmatch_loop.obj `if test -f 'fnmatch_loop.c'; then $(CYGPATH_W) 'fnmatch_loop.c'; else $(CYGPATH_W) '$(srcdir)/fnmatch_loop.c'; fi`
+
+libgnu_a-frexp.o: frexp.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-frexp.o -MD -MP -MF $(DEPDIR)/libgnu_a-frexp.Tpo -c -o libgnu_a-frexp.o `test -f 'frexp.c' || echo '$(srcdir)/'`frexp.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-frexp.Tpo $(DEPDIR)/libgnu_a-frexp.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='frexp.c' object='libgnu_a-frexp.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-frexp.o `test -f 'frexp.c' || echo '$(srcdir)/'`frexp.c
+
+libgnu_a-frexp.obj: frexp.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-frexp.obj -MD -MP -MF $(DEPDIR)/libgnu_a-frexp.Tpo -c -o libgnu_a-frexp.obj `if test -f 'frexp.c'; then $(CYGPATH_W) 'frexp.c'; else $(CYGPATH_W) '$(srcdir)/frexp.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-frexp.Tpo $(DEPDIR)/libgnu_a-frexp.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='frexp.c' object='libgnu_a-frexp.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-frexp.obj `if test -f 'frexp.c'; then $(CYGPATH_W) 'frexp.c'; else $(CYGPATH_W) '$(srcdir)/frexp.c'; fi`
+
+libgnu_a-frexpl.o: frexpl.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-frexpl.o -MD -MP -MF $(DEPDIR)/libgnu_a-frexpl.Tpo -c -o libgnu_a-frexpl.o `test -f 'frexpl.c' || echo '$(srcdir)/'`frexpl.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-frexpl.Tpo $(DEPDIR)/libgnu_a-frexpl.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='frexpl.c' object='libgnu_a-frexpl.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-frexpl.o `test -f 'frexpl.c' || echo '$(srcdir)/'`frexpl.c
+
+libgnu_a-frexpl.obj: frexpl.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-frexpl.obj -MD -MP -MF $(DEPDIR)/libgnu_a-frexpl.Tpo -c -o libgnu_a-frexpl.obj `if test -f 'frexpl.c'; then $(CYGPATH_W) 'frexpl.c'; else $(CYGPATH_W) '$(srcdir)/frexpl.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-frexpl.Tpo $(DEPDIR)/libgnu_a-frexpl.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='frexpl.c' object='libgnu_a-frexpl.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-frexpl.obj `if test -f 'frexpl.c'; then $(CYGPATH_W) 'frexpl.c'; else $(CYGPATH_W) '$(srcdir)/frexpl.c'; fi`
+
+libgnu_a-stat-w32.o: stat-w32.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-stat-w32.o -MD -MP -MF $(DEPDIR)/libgnu_a-stat-w32.Tpo -c -o libgnu_a-stat-w32.o `test -f 'stat-w32.c' || echo '$(srcdir)/'`stat-w32.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-stat-w32.Tpo $(DEPDIR)/libgnu_a-stat-w32.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='stat-w32.c' object='libgnu_a-stat-w32.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-stat-w32.o `test -f 'stat-w32.c' || echo '$(srcdir)/'`stat-w32.c
+
+libgnu_a-stat-w32.obj: stat-w32.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-stat-w32.obj -MD -MP -MF $(DEPDIR)/libgnu_a-stat-w32.Tpo -c -o libgnu_a-stat-w32.obj `if test -f 'stat-w32.c'; then $(CYGPATH_W) 'stat-w32.c'; else $(CYGPATH_W) '$(srcdir)/stat-w32.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-stat-w32.Tpo $(DEPDIR)/libgnu_a-stat-w32.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='stat-w32.c' object='libgnu_a-stat-w32.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-stat-w32.obj `if test -f 'stat-w32.c'; then $(CYGPATH_W) 'stat-w32.c'; else $(CYGPATH_W) '$(srcdir)/stat-w32.c'; fi`
+
+libgnu_a-at-func.o: at-func.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-at-func.o -MD -MP -MF $(DEPDIR)/libgnu_a-at-func.Tpo -c -o libgnu_a-at-func.o `test -f 'at-func.c' || echo '$(srcdir)/'`at-func.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-at-func.Tpo $(DEPDIR)/libgnu_a-at-func.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='at-func.c' object='libgnu_a-at-func.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-at-func.o `test -f 'at-func.c' || echo '$(srcdir)/'`at-func.c
+
+libgnu_a-at-func.obj: at-func.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-at-func.obj -MD -MP -MF $(DEPDIR)/libgnu_a-at-func.Tpo -c -o libgnu_a-at-func.obj `if test -f 'at-func.c'; then $(CYGPATH_W) 'at-func.c'; else $(CYGPATH_W) '$(srcdir)/at-func.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-at-func.Tpo $(DEPDIR)/libgnu_a-at-func.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='at-func.c' object='libgnu_a-at-func.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-at-func.obj `if test -f 'at-func.c'; then $(CYGPATH_W) 'at-func.c'; else $(CYGPATH_W) '$(srcdir)/at-func.c'; fi`
+
+libgnu_a-isnan.o: isnan.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-isnan.o -MD -MP -MF $(DEPDIR)/libgnu_a-isnan.Tpo -c -o libgnu_a-isnan.o `test -f 'isnan.c' || echo '$(srcdir)/'`isnan.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-isnan.Tpo $(DEPDIR)/libgnu_a-isnan.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='isnan.c' object='libgnu_a-isnan.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-isnan.o `test -f 'isnan.c' || echo '$(srcdir)/'`isnan.c
+
+libgnu_a-isnan.obj: isnan.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-isnan.obj -MD -MP -MF $(DEPDIR)/libgnu_a-isnan.Tpo -c -o libgnu_a-isnan.obj `if test -f 'isnan.c'; then $(CYGPATH_W) 'isnan.c'; else $(CYGPATH_W) '$(srcdir)/isnan.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-isnan.Tpo $(DEPDIR)/libgnu_a-isnan.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='isnan.c' object='libgnu_a-isnan.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-isnan.obj `if test -f 'isnan.c'; then $(CYGPATH_W) 'isnan.c'; else $(CYGPATH_W) '$(srcdir)/isnan.c'; fi`
+
+libgnu_a-isnand.o: isnand.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-isnand.o -MD -MP -MF $(DEPDIR)/libgnu_a-isnand.Tpo -c -o libgnu_a-isnand.o `test -f 'isnand.c' || echo '$(srcdir)/'`isnand.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-isnand.Tpo $(DEPDIR)/libgnu_a-isnand.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='isnand.c' object='libgnu_a-isnand.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-isnand.o `test -f 'isnand.c' || echo '$(srcdir)/'`isnand.c
+
+libgnu_a-isnand.obj: isnand.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-isnand.obj -MD -MP -MF $(DEPDIR)/libgnu_a-isnand.Tpo -c -o libgnu_a-isnand.obj `if test -f 'isnand.c'; then $(CYGPATH_W) 'isnand.c'; else $(CYGPATH_W) '$(srcdir)/isnand.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-isnand.Tpo $(DEPDIR)/libgnu_a-isnand.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='isnand.c' object='libgnu_a-isnand.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-isnand.obj `if test -f 'isnand.c'; then $(CYGPATH_W) 'isnand.c'; else $(CYGPATH_W) '$(srcdir)/isnand.c'; fi`
+
+libgnu_a-isnanl.o: isnanl.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-isnanl.o -MD -MP -MF $(DEPDIR)/libgnu_a-isnanl.Tpo -c -o libgnu_a-isnanl.o `test -f 'isnanl.c' || echo '$(srcdir)/'`isnanl.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-isnanl.Tpo $(DEPDIR)/libgnu_a-isnanl.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='isnanl.c' object='libgnu_a-isnanl.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-isnanl.o `test -f 'isnanl.c' || echo '$(srcdir)/'`isnanl.c
+
+libgnu_a-isnanl.obj: isnanl.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-isnanl.obj -MD -MP -MF $(DEPDIR)/libgnu_a-isnanl.Tpo -c -o libgnu_a-isnanl.obj `if test -f 'isnanl.c'; then $(CYGPATH_W) 'isnanl.c'; else $(CYGPATH_W) '$(srcdir)/isnanl.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-isnanl.Tpo $(DEPDIR)/libgnu_a-isnanl.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='isnanl.c' object='libgnu_a-isnanl.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-isnanl.obj `if test -f 'isnanl.c'; then $(CYGPATH_W) 'isnanl.c'; else $(CYGPATH_W) '$(srcdir)/isnanl.c'; fi`
+
+libgnu_a-malloc.o: malloc.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-malloc.o -MD -MP -MF $(DEPDIR)/libgnu_a-malloc.Tpo -c -o libgnu_a-malloc.o `test -f 'malloc.c' || echo '$(srcdir)/'`malloc.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-malloc.Tpo $(DEPDIR)/libgnu_a-malloc.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='malloc.c' object='libgnu_a-malloc.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-malloc.o `test -f 'malloc.c' || echo '$(srcdir)/'`malloc.c
+
+libgnu_a-malloc.obj: malloc.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-malloc.obj -MD -MP -MF $(DEPDIR)/libgnu_a-malloc.Tpo -c -o libgnu_a-malloc.obj `if test -f 'malloc.c'; then $(CYGPATH_W) 'malloc.c'; else $(CYGPATH_W) '$(srcdir)/malloc.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-malloc.Tpo $(DEPDIR)/libgnu_a-malloc.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='malloc.c' object='libgnu_a-malloc.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-malloc.obj `if test -f 'malloc.c'; then $(CYGPATH_W) 'malloc.c'; else $(CYGPATH_W) '$(srcdir)/malloc.c'; fi`
+
+libgnu_a-lc-charset-dispatch.o: lc-charset-dispatch.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-lc-charset-dispatch.o -MD -MP -MF $(DEPDIR)/libgnu_a-lc-charset-dispatch.Tpo -c -o libgnu_a-lc-charset-dispatch.o `test -f 'lc-charset-dispatch.c' || echo '$(srcdir)/'`lc-charset-dispatch.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-lc-charset-dispatch.Tpo $(DEPDIR)/libgnu_a-lc-charset-dispatch.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lc-charset-dispatch.c' object='libgnu_a-lc-charset-dispatch.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-lc-charset-dispatch.o `test -f 'lc-charset-dispatch.c' || echo '$(srcdir)/'`lc-charset-dispatch.c
+
+libgnu_a-lc-charset-dispatch.obj: lc-charset-dispatch.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-lc-charset-dispatch.obj -MD -MP -MF $(DEPDIR)/libgnu_a-lc-charset-dispatch.Tpo -c -o libgnu_a-lc-charset-dispatch.obj `if test -f 'lc-charset-dispatch.c'; then $(CYGPATH_W) 'lc-charset-dispatch.c'; else $(CYGPATH_W) '$(srcdir)/lc-charset-dispatch.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-lc-charset-dispatch.Tpo $(DEPDIR)/libgnu_a-lc-charset-dispatch.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lc-charset-dispatch.c' object='libgnu_a-lc-charset-dispatch.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-lc-charset-dispatch.obj `if test -f 'lc-charset-dispatch.c'; then $(CYGPATH_W) 'lc-charset-dispatch.c'; else $(CYGPATH_W) '$(srcdir)/lc-charset-dispatch.c'; fi`
+
+libgnu_a-mbtowc-lock.o: mbtowc-lock.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-mbtowc-lock.o -MD -MP -MF $(DEPDIR)/libgnu_a-mbtowc-lock.Tpo -c -o libgnu_a-mbtowc-lock.o `test -f 'mbtowc-lock.c' || echo '$(srcdir)/'`mbtowc-lock.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-mbtowc-lock.Tpo $(DEPDIR)/libgnu_a-mbtowc-lock.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mbtowc-lock.c' object='libgnu_a-mbtowc-lock.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-mbtowc-lock.o `test -f 'mbtowc-lock.c' || echo '$(srcdir)/'`mbtowc-lock.c
+
+libgnu_a-mbtowc-lock.obj: mbtowc-lock.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-mbtowc-lock.obj -MD -MP -MF $(DEPDIR)/libgnu_a-mbtowc-lock.Tpo -c -o libgnu_a-mbtowc-lock.obj `if test -f 'mbtowc-lock.c'; then $(CYGPATH_W) 'mbtowc-lock.c'; else $(CYGPATH_W) '$(srcdir)/mbtowc-lock.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-mbtowc-lock.Tpo $(DEPDIR)/libgnu_a-mbtowc-lock.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mbtowc-lock.c' object='libgnu_a-mbtowc-lock.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-mbtowc-lock.obj `if test -f 'mbtowc-lock.c'; then $(CYGPATH_W) 'mbtowc-lock.c'; else $(CYGPATH_W) '$(srcdir)/mbtowc-lock.c'; fi`
+
+libgnu_a-mbsrtowcs-state.o: mbsrtowcs-state.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-mbsrtowcs-state.o -MD -MP -MF $(DEPDIR)/libgnu_a-mbsrtowcs-state.Tpo -c -o libgnu_a-mbsrtowcs-state.o `test -f 'mbsrtowcs-state.c' || echo '$(srcdir)/'`mbsrtowcs-state.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-mbsrtowcs-state.Tpo $(DEPDIR)/libgnu_a-mbsrtowcs-state.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mbsrtowcs-state.c' object='libgnu_a-mbsrtowcs-state.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-mbsrtowcs-state.o `test -f 'mbsrtowcs-state.c' || echo '$(srcdir)/'`mbsrtowcs-state.c
+
+libgnu_a-mbsrtowcs-state.obj: mbsrtowcs-state.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-mbsrtowcs-state.obj -MD -MP -MF $(DEPDIR)/libgnu_a-mbsrtowcs-state.Tpo -c -o libgnu_a-mbsrtowcs-state.obj `if test -f 'mbsrtowcs-state.c'; then $(CYGPATH_W) 'mbsrtowcs-state.c'; else $(CYGPATH_W) '$(srcdir)/mbsrtowcs-state.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-mbsrtowcs-state.Tpo $(DEPDIR)/libgnu_a-mbsrtowcs-state.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mbsrtowcs-state.c' object='libgnu_a-mbsrtowcs-state.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-mbsrtowcs-state.obj `if test -f 'mbsrtowcs-state.c'; then $(CYGPATH_W) 'mbsrtowcs-state.c'; else $(CYGPATH_W) '$(srcdir)/mbsrtowcs-state.c'; fi`
+
+libgnu_a-memmem.o: memmem.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-memmem.o -MD -MP -MF $(DEPDIR)/libgnu_a-memmem.Tpo -c -o libgnu_a-memmem.o `test -f 'memmem.c' || echo '$(srcdir)/'`memmem.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-memmem.Tpo $(DEPDIR)/libgnu_a-memmem.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='memmem.c' object='libgnu_a-memmem.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-memmem.o `test -f 'memmem.c' || echo '$(srcdir)/'`memmem.c
+
+libgnu_a-memmem.obj: memmem.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-memmem.obj -MD -MP -MF $(DEPDIR)/libgnu_a-memmem.Tpo -c -o libgnu_a-memmem.obj `if test -f 'memmem.c'; then $(CYGPATH_W) 'memmem.c'; else $(CYGPATH_W) '$(srcdir)/memmem.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-memmem.Tpo $(DEPDIR)/libgnu_a-memmem.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='memmem.c' object='libgnu_a-memmem.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-memmem.obj `if test -f 'memmem.c'; then $(CYGPATH_W) 'memmem.c'; else $(CYGPATH_W) '$(srcdir)/memmem.c'; fi`
+
+libgnu_a-realloc.o: realloc.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-realloc.o -MD -MP -MF $(DEPDIR)/libgnu_a-realloc.Tpo -c -o libgnu_a-realloc.o `test -f 'realloc.c' || echo '$(srcdir)/'`realloc.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-realloc.Tpo $(DEPDIR)/libgnu_a-realloc.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='realloc.c' object='libgnu_a-realloc.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-realloc.o `test -f 'realloc.c' || echo '$(srcdir)/'`realloc.c
+
+libgnu_a-realloc.obj: realloc.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-realloc.obj -MD -MP -MF $(DEPDIR)/libgnu_a-realloc.Tpo -c -o libgnu_a-realloc.obj `if test -f 'realloc.c'; then $(CYGPATH_W) 'realloc.c'; else $(CYGPATH_W) '$(srcdir)/realloc.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-realloc.Tpo $(DEPDIR)/libgnu_a-realloc.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='realloc.c' object='libgnu_a-realloc.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-realloc.obj `if test -f 'realloc.c'; then $(CYGPATH_W) 'realloc.c'; else $(CYGPATH_W) '$(srcdir)/realloc.c'; fi`
+
+libgnu_a-strerror_r.o: strerror_r.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-strerror_r.o -MD -MP -MF $(DEPDIR)/libgnu_a-strerror_r.Tpo -c -o libgnu_a-strerror_r.o `test -f 'strerror_r.c' || echo '$(srcdir)/'`strerror_r.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-strerror_r.Tpo $(DEPDIR)/libgnu_a-strerror_r.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='strerror_r.c' object='libgnu_a-strerror_r.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-strerror_r.o `test -f 'strerror_r.c' || echo '$(srcdir)/'`strerror_r.c
+
+libgnu_a-strerror_r.obj: strerror_r.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-strerror_r.obj -MD -MP -MF $(DEPDIR)/libgnu_a-strerror_r.Tpo -c -o libgnu_a-strerror_r.obj `if test -f 'strerror_r.c'; then $(CYGPATH_W) 'strerror_r.c'; else $(CYGPATH_W) '$(srcdir)/strerror_r.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-strerror_r.Tpo $(DEPDIR)/libgnu_a-strerror_r.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='strerror_r.c' object='libgnu_a-strerror_r.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-strerror_r.obj `if test -f 'strerror_r.c'; then $(CYGPATH_W) 'strerror_r.c'; else $(CYGPATH_W) '$(srcdir)/strerror_r.c'; fi`
+
+libgnu_a-strstr.o: strstr.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-strstr.o -MD -MP -MF $(DEPDIR)/libgnu_a-strstr.Tpo -c -o libgnu_a-strstr.o `test -f 'strstr.c' || echo '$(srcdir)/'`strstr.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-strstr.Tpo $(DEPDIR)/libgnu_a-strstr.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='strstr.c' object='libgnu_a-strstr.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-strstr.o `test -f 'strstr.c' || echo '$(srcdir)/'`strstr.c
+
+libgnu_a-strstr.obj: strstr.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-strstr.obj -MD -MP -MF $(DEPDIR)/libgnu_a-strstr.Tpo -c -o libgnu_a-strstr.obj `if test -f 'strstr.c'; then $(CYGPATH_W) 'strstr.c'; else $(CYGPATH_W) '$(srcdir)/strstr.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-strstr.Tpo $(DEPDIR)/libgnu_a-strstr.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='strstr.c' object='libgnu_a-strstr.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-strstr.obj `if test -f 'strstr.c'; then $(CYGPATH_W) 'strstr.c'; else $(CYGPATH_W) '$(srcdir)/strstr.c'; fi`
+
# This directory's subdirectories are mostly independent; you can cd
# into them and run 'make' without going through this Makefile.
# To change the values of 'make' variables: instead of editing Makefiles,
@@ -2353,7 +4517,7 @@ distclean: distclean-recursive
-rm -rf ./$(DEPDIR) glthread/$(DEPDIR) malloc/$(DEPDIR)
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
- distclean-tags
+ distclean-local distclean-tags
dvi: dvi-recursive
@@ -2398,7 +4562,8 @@ installcheck-am:
maintainer-clean: maintainer-clean-recursive
-rm -rf ./$(DEPDIR) glthread/$(DEPDIR) malloc/$(DEPDIR)
-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
+maintainer-clean-am: distclean-am maintainer-clean-generic \
+ maintainer-clean-local
mostlyclean: mostlyclean-recursive
@@ -2421,14 +4586,15 @@ uninstall-am:
.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
check-am clean clean-generic clean-noinstLIBRARIES \
clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \
- distclean-compile distclean-generic distclean-tags dvi dvi-am \
- html html-am info info-am install install-am install-data \
- install-data-am install-dvi install-dvi-am install-exec \
- install-exec-am install-html install-html-am install-info \
- install-info-am install-man install-pdf install-pdf-am \
- install-ps install-ps-am install-strip installcheck \
- installcheck-am installdirs installdirs-am maintainer-clean \
- maintainer-clean-generic mostlyclean mostlyclean-compile \
+ distclean-compile distclean-generic distclean-local \
+ distclean-tags dvi dvi-am html html-am info info-am install \
+ install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ installdirs-am maintainer-clean maintainer-clean-generic \
+ maintainer-clean-local mostlyclean mostlyclean-compile \
mostlyclean-generic mostlyclean-local pdf pdf-am ps ps-am tags \
tags-am uninstall uninstall-am
@@ -2438,29 +4604,27 @@ uninstall-am:
# We need the following in order to create <alloca.h> when the system
# doesn't have one that works with the given compiler.
@GL_GENERATE_ALLOCA_H_TRUE@alloca.h: alloca.in.h $(top_builddir)/config.status
-@GL_GENERATE_ALLOCA_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \
-@GL_GENERATE_ALLOCA_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-@GL_GENERATE_ALLOCA_H_TRUE@ sed -e 's|@''HAVE_ALLOCA_H''@|$(HAVE_ALLOCA_H)|g' < $(srcdir)/alloca.in.h; \
-@GL_GENERATE_ALLOCA_H_TRUE@ } > $@-t && \
-@GL_GENERATE_ALLOCA_H_TRUE@ mv -f $@-t $@
+@GL_GENERATE_ALLOCA_H_TRUE@ $(gl_V_at)$(SED_HEADER_STDOUT) \
+@GL_GENERATE_ALLOCA_H_TRUE@ -e 's|@''HAVE_ALLOCA_H''@|$(HAVE_ALLOCA_H)|g' \
+@GL_GENERATE_ALLOCA_H_TRUE@ $(srcdir)/alloca.in.h > $@-t
+@GL_GENERATE_ALLOCA_H_TRUE@ $(AM_V_at)mv $@-t $@
@GL_GENERATE_ALLOCA_H_FALSE@alloca.h: $(top_builddir)/config.status
@GL_GENERATE_ALLOCA_H_FALSE@ rm -f $@
# We need the following in order to create <arpa/inet.h> when the system
# doesn't have one.
arpa/inet.h: arpa_inet.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(ARG_NONNULL_H)
- $(AM_V_at)$(MKDIR_P) arpa
- $(AM_V_GEN)rm -f $@-t $@ && \
- { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
- sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+ $(AM_V_GEN)$(MKDIR_P) 'arpa'
+ $(AM_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''HAVE_FEATURES_H''@|$(HAVE_FEATURES_H)|g' \
-e 's|@''NEXT_ARPA_INET_H''@|$(NEXT_ARPA_INET_H)|g' \
-e 's|@''HAVE_ARPA_INET_H''@|$(HAVE_ARPA_INET_H)|g' \
- -e 's/@''GNULIB_INET_NTOP''@/$(GNULIB_INET_NTOP)/g' \
- -e 's/@''GNULIB_INET_PTON''@/$(GNULIB_INET_PTON)/g' \
+ -e 's/@''GNULIB_INET_NTOP''@/$(GL_GNULIB_INET_NTOP)/g' \
+ -e 's/@''GNULIB_INET_PTON''@/$(GL_GNULIB_INET_PTON)/g' \
-e 's|@''HAVE_WS2TCPIP_H''@|$(HAVE_WS2TCPIP_H)|g' \
-e 's|@''HAVE_DECL_INET_NTOP''@|$(HAVE_DECL_INET_NTOP)|g' \
-e 's|@''HAVE_DECL_INET_PTON''@|$(HAVE_DECL_INET_PTON)|g' \
@@ -2469,47 +4633,43 @@ arpa/inet.h: arpa_inet.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON
-e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
-e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
- < $(srcdir)/arpa_inet.in.h; \
- } > $@-t && \
- mv $@-t $@
+ $(srcdir)/arpa_inet.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
# We need the following in order to create <ctype.h> when the system
# doesn't have one that works with the given compiler.
ctype.h: ctype.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H)
- $(AM_V_GEN)rm -f $@-t $@ && \
- { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
- sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_CTYPE_H''@|$(NEXT_CTYPE_H)|g' \
- -e 's/@''GNULIB_ISBLANK''@/$(GNULIB_ISBLANK)/g' \
+ -e 's/@''GNULIB_ISBLANK''@/$(GL_GNULIB_ISBLANK)/g' \
-e 's/@''HAVE_ISBLANK''@/$(HAVE_ISBLANK)/g' \
-e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
- < $(srcdir)/ctype.in.h; \
- } > $@-t && \
- mv $@-t $@
+ $(srcdir)/ctype.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
# We need the following in order to create <dirent.h> when the system
# doesn't have one that works with the given compiler.
dirent.h: dirent.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
- $(AM_V_GEN)rm -f $@-t $@ && \
- { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
- sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's|@''HAVE_DIRENT_H''@|$(HAVE_DIRENT_H)|g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_DIRENT_H''@|$(NEXT_DIRENT_H)|g' \
- -e 's/@''GNULIB_OPENDIR''@/$(GNULIB_OPENDIR)/g' \
- -e 's/@''GNULIB_READDIR''@/$(GNULIB_READDIR)/g' \
- -e 's/@''GNULIB_REWINDDIR''@/$(GNULIB_REWINDDIR)/g' \
- -e 's/@''GNULIB_CLOSEDIR''@/$(GNULIB_CLOSEDIR)/g' \
- -e 's/@''GNULIB_DIRFD''@/$(GNULIB_DIRFD)/g' \
- -e 's/@''GNULIB_FDOPENDIR''@/$(GNULIB_FDOPENDIR)/g' \
- -e 's/@''GNULIB_SCANDIR''@/$(GNULIB_SCANDIR)/g' \
- -e 's/@''GNULIB_ALPHASORT''@/$(GNULIB_ALPHASORT)/g' \
+ -e 's/@''GNULIB_OPENDIR''@/$(GL_GNULIB_OPENDIR)/g' \
+ -e 's/@''GNULIB_READDIR''@/$(GL_GNULIB_READDIR)/g' \
+ -e 's/@''GNULIB_REWINDDIR''@/$(GL_GNULIB_REWINDDIR)/g' \
+ -e 's/@''GNULIB_CLOSEDIR''@/$(GL_GNULIB_CLOSEDIR)/g' \
+ -e 's/@''GNULIB_DIRFD''@/$(GL_GNULIB_DIRFD)/g' \
+ -e 's/@''GNULIB_FDOPENDIR''@/$(GL_GNULIB_FDOPENDIR)/g' \
+ -e 's/@''GNULIB_SCANDIR''@/$(GL_GNULIB_SCANDIR)/g' \
+ -e 's/@''GNULIB_ALPHASORT''@/$(GL_GNULIB_ALPHASORT)/g' \
-e 's/@''HAVE_OPENDIR''@/$(HAVE_OPENDIR)/g' \
-e 's/@''HAVE_READDIR''@/$(HAVE_READDIR)/g' \
-e 's/@''HAVE_REWINDDIR''@/$(HAVE_REWINDDIR)/g' \
@@ -2526,16 +4686,14 @@ dirent.h: dirent.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H
-e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
-e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
- < $(srcdir)/dirent.in.h; \
- } > $@-t && \
- mv $@-t $@
+ $(srcdir)/dirent.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
# We need the following in order to create <errno.h> when the system
# doesn't have one that is POSIX compliant.
@GL_GENERATE_ERRNO_H_TRUE@errno.h: errno.in.h $(top_builddir)/config.status
-@GL_GENERATE_ERRNO_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \
-@GL_GENERATE_ERRNO_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
-@GL_GENERATE_ERRNO_H_TRUE@ sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+@GL_GENERATE_ERRNO_H_TRUE@ $(gl_V_at)$(SED_HEADER_STDOUT) \
+@GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''GUARD_PREFIX''@|GL|g' \
@GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
@GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
@GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
@@ -2546,29 +4704,27 @@ dirent.h: dirent.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H
@GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''ENOLINK_VALUE''@|$(ENOLINK_VALUE)|g' \
@GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''EOVERFLOW_HIDDEN''@|$(EOVERFLOW_HIDDEN)|g' \
@GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''EOVERFLOW_VALUE''@|$(EOVERFLOW_VALUE)|g' \
-@GL_GENERATE_ERRNO_H_TRUE@ < $(srcdir)/errno.in.h; \
-@GL_GENERATE_ERRNO_H_TRUE@ } > $@-t && \
-@GL_GENERATE_ERRNO_H_TRUE@ mv $@-t $@
+@GL_GENERATE_ERRNO_H_TRUE@ $(srcdir)/errno.in.h > $@-t
+@GL_GENERATE_ERRNO_H_TRUE@ $(AM_V_at)mv $@-t $@
@GL_GENERATE_ERRNO_H_FALSE@errno.h: $(top_builddir)/config.status
@GL_GENERATE_ERRNO_H_FALSE@ rm -f $@
# We need the following in order to create <fcntl.h> when the system
# doesn't have one that works with the given compiler.
fcntl.h: fcntl.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
- $(AM_V_GEN)rm -f $@-t $@ && \
- { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
- sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_FCNTL_H''@|$(NEXT_FCNTL_H)|g' \
- -e 's/@''GNULIB_CREAT''@/$(GNULIB_CREAT)/g' \
- -e 's/@''GNULIB_FCNTL''@/$(GNULIB_FCNTL)/g' \
- -e 's/@''GNULIB_NONBLOCKING''@/$(GNULIB_NONBLOCKING)/g' \
- -e 's/@''GNULIB_OPEN''@/$(GNULIB_OPEN)/g' \
- -e 's/@''GNULIB_OPENAT''@/$(GNULIB_OPENAT)/g' \
- -e 's/@''GNULIB_MDA_CREAT''@/$(GNULIB_MDA_CREAT)/g' \
- -e 's/@''GNULIB_MDA_OPEN''@/$(GNULIB_MDA_OPEN)/g' \
+ -e 's/@''GNULIB_CREAT''@/$(GL_GNULIB_CREAT)/g' \
+ -e 's/@''GNULIB_FCNTL''@/$(GL_GNULIB_FCNTL)/g' \
+ -e 's/@''GNULIB_NONBLOCKING''@/$(GL_GNULIB_NONBLOCKING)/g' \
+ -e 's/@''GNULIB_OPEN''@/$(GL_GNULIB_OPEN)/g' \
+ -e 's/@''GNULIB_OPENAT''@/$(GL_GNULIB_OPENAT)/g' \
+ -e 's/@''GNULIB_MDA_CREAT''@/$(GL_GNULIB_MDA_CREAT)/g' \
+ -e 's/@''GNULIB_MDA_OPEN''@/$(GL_GNULIB_MDA_OPEN)/g' \
-e 's|@''HAVE_FCNTL''@|$(HAVE_FCNTL)|g' \
-e 's|@''HAVE_OPENAT''@|$(HAVE_OPENAT)|g' \
-e 's|@''REPLACE_CREAT''@|$(REPLACE_CREAT)|g' \
@@ -2578,60 +4734,54 @@ fcntl.h: fcntl.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H)
-e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
-e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
- < $(srcdir)/fcntl.in.h; \
- } > $@-t && \
- mv $@-t $@
+ $(srcdir)/fcntl.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
# We need the following in order to create <float.h> when the system
# doesn't have one that works with the given compiler.
@GL_GENERATE_FLOAT_H_TRUE@float.h: float.in.h $(top_builddir)/config.status
-@GL_GENERATE_FLOAT_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \
-@GL_GENERATE_FLOAT_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
-@GL_GENERATE_FLOAT_H_TRUE@ sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+@GL_GENERATE_FLOAT_H_TRUE@ $(gl_V_at)$(SED_HEADER_STDOUT) \
+@GL_GENERATE_FLOAT_H_TRUE@ -e 's|@''GUARD_PREFIX''@|GL|g' \
@GL_GENERATE_FLOAT_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
@GL_GENERATE_FLOAT_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
@GL_GENERATE_FLOAT_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
@GL_GENERATE_FLOAT_H_TRUE@ -e 's|@''NEXT_FLOAT_H''@|$(NEXT_FLOAT_H)|g' \
@GL_GENERATE_FLOAT_H_TRUE@ -e 's|@''REPLACE_ITOLD''@|$(REPLACE_ITOLD)|g' \
-@GL_GENERATE_FLOAT_H_TRUE@ < $(srcdir)/float.in.h; \
-@GL_GENERATE_FLOAT_H_TRUE@ } > $@-t && \
-@GL_GENERATE_FLOAT_H_TRUE@ mv $@-t $@
+@GL_GENERATE_FLOAT_H_TRUE@ $(srcdir)/float.in.h > $@-t
+@GL_GENERATE_FLOAT_H_TRUE@ $(AM_V_at)mv $@-t $@
@GL_GENERATE_FLOAT_H_FALSE@float.h: $(top_builddir)/config.status
@GL_GENERATE_FLOAT_H_FALSE@ rm -f $@
# We need the following in order to create <fnmatch.h>.
@GL_GENERATE_FNMATCH_H_TRUE@fnmatch.h: fnmatch.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
-@GL_GENERATE_FNMATCH_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \
-@GL_GENERATE_FNMATCH_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
-@GL_GENERATE_FNMATCH_H_TRUE@ sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+@GL_GENERATE_FNMATCH_H_TRUE@ $(gl_V_at)$(SED_HEADER_STDOUT) \
+@GL_GENERATE_FNMATCH_H_TRUE@ -e 's|@''GUARD_PREFIX''@|GL|g' \
@GL_GENERATE_FNMATCH_H_TRUE@ -e 's|@''HAVE_FNMATCH_H''@|$(HAVE_FNMATCH_H)|g' \
@GL_GENERATE_FNMATCH_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
@GL_GENERATE_FNMATCH_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
@GL_GENERATE_FNMATCH_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
@GL_GENERATE_FNMATCH_H_TRUE@ -e 's|@''NEXT_FNMATCH_H''@|$(NEXT_FNMATCH_H)|g' \
-@GL_GENERATE_FNMATCH_H_TRUE@ -e 's/@''GNULIB_FNMATCH''@/$(GNULIB_FNMATCH)/g' \
+@GL_GENERATE_FNMATCH_H_TRUE@ -e 's/@''GNULIB_FNMATCH''@/$(GL_GNULIB_FNMATCH)/g' \
@GL_GENERATE_FNMATCH_H_TRUE@ -e 's|@''HAVE_FNMATCH''@|$(HAVE_FNMATCH)|g' \
@GL_GENERATE_FNMATCH_H_TRUE@ -e 's|@''REPLACE_FNMATCH''@|$(REPLACE_FNMATCH)|g' \
@GL_GENERATE_FNMATCH_H_TRUE@ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
@GL_GENERATE_FNMATCH_H_TRUE@ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
@GL_GENERATE_FNMATCH_H_TRUE@ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
-@GL_GENERATE_FNMATCH_H_TRUE@ < $(srcdir)/fnmatch.in.h; \
-@GL_GENERATE_FNMATCH_H_TRUE@ } > $@-t && \
-@GL_GENERATE_FNMATCH_H_TRUE@ mv $@-t $@
+@GL_GENERATE_FNMATCH_H_TRUE@ $(srcdir)/fnmatch.in.h > $@-t
+@GL_GENERATE_FNMATCH_H_TRUE@ $(AM_V_at)mv $@-t $@
@GL_GENERATE_FNMATCH_H_FALSE@fnmatch.h: $(top_builddir)/config.status
@GL_GENERATE_FNMATCH_H_FALSE@ rm -f $@
# We need the following in order to create <glob.h>.
@GL_GENERATE_GLOB_H_TRUE@glob.h: glob.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
-@GL_GENERATE_GLOB_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \
-@GL_GENERATE_GLOB_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
-@GL_GENERATE_GLOB_H_TRUE@ sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+@GL_GENERATE_GLOB_H_TRUE@ $(gl_V_at)$(SED_HEADER_STDOUT) \
+@GL_GENERATE_GLOB_H_TRUE@ -e 's|@''GUARD_PREFIX''@|GL|g' \
@GL_GENERATE_GLOB_H_TRUE@ -e 's|@''HAVE_GLOB_H''@|$(HAVE_GLOB_H)|g' \
@GL_GENERATE_GLOB_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
@GL_GENERATE_GLOB_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
@GL_GENERATE_GLOB_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
@GL_GENERATE_GLOB_H_TRUE@ -e 's|@''NEXT_GLOB_H''@|$(NEXT_GLOB_H)|g' \
-@GL_GENERATE_GLOB_H_TRUE@ -e 's/@''GNULIB_GLOB''@/$(GNULIB_GLOB)/g' \
+@GL_GENERATE_GLOB_H_TRUE@ -e 's/@''GNULIB_GLOB''@/$(GL_GNULIB_GLOB)/g' \
@GL_GENERATE_GLOB_H_TRUE@ -e 's|@''HAVE_GLOB''@|$(HAVE_GLOB)|g' \
@GL_GENERATE_GLOB_H_TRUE@ -e 's|@''HAVE_GLOB_PATTERN_P''@|$(HAVE_GLOB_PATTERN_P)|g' \
@GL_GENERATE_GLOB_H_TRUE@ -e 's|@''REPLACE_GLOB''@|$(REPLACE_GLOB)|g' \
@@ -2639,28 +4789,39 @@ fcntl.h: fcntl.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H)
@GL_GENERATE_GLOB_H_TRUE@ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
@GL_GENERATE_GLOB_H_TRUE@ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
@GL_GENERATE_GLOB_H_TRUE@ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
-@GL_GENERATE_GLOB_H_TRUE@ < $(srcdir)/glob.in.h; \
-@GL_GENERATE_GLOB_H_TRUE@ } > $@-t && \
-@GL_GENERATE_GLOB_H_TRUE@ mv $@-t $@
+@GL_GENERATE_GLOB_H_TRUE@ $(srcdir)/glob.in.h > $@-t
+@GL_GENERATE_GLOB_H_TRUE@ $(AM_V_at)mv $@-t $@
@GL_GENERATE_GLOB_H_FALSE@glob.h: $(top_builddir)/config.status
@GL_GENERATE_GLOB_H_FALSE@ rm -f $@
+glob-libc.gl.h: glob-libc.h
+ $(AM_V_GEN)$(SED_HEADER_STDOUT) \
+ -e '/__BEGIN_DECLS/{ s/__BEGIN_DECLS/#ifdef __cplusplus%extern "C" {%#endif/; y/%/\n/; }' \
+ -e '/__END_DECLS/{ s/__END_DECLS/#ifdef __cplusplus%}%#endif/; y/%/\n/; }' \
+ -e 's|__THROWNL||g' \
+ -e 's|__THROW||g' \
+ -e 's|__restrict|restrict|g' \
+ -e 's|defined __USE_MISC|1|' \
+ -e 's|ifdef __USE_GNU|if 1|' \
+ -e 's|ifdef __USE_LARGEFILE64|if 0|' \
+ $(srcdir)/glob-libc.h > $@-t
+ $(AM_V_at)mv $@-t $@
+
# We need the following in order to create <inttypes.h> when the system
# doesn't have one that works with the given compiler.
inttypes.h: inttypes.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(ARG_NONNULL_H)
- $(AM_V_GEN)rm -f $@-t $@ && \
- { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
- sed -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_INTTYPES_H''@|$(NEXT_INTTYPES_H)|g' \
-e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \
-e 's/@''PRIPTR_PREFIX''@/$(PRIPTR_PREFIX)/g' \
- -e 's/@''GNULIB_IMAXABS''@/$(GNULIB_IMAXABS)/g' \
- -e 's/@''GNULIB_IMAXDIV''@/$(GNULIB_IMAXDIV)/g' \
- -e 's/@''GNULIB_STRTOIMAX''@/$(GNULIB_STRTOIMAX)/g' \
- -e 's/@''GNULIB_STRTOUMAX''@/$(GNULIB_STRTOUMAX)/g' \
+ -e 's/@''GNULIB_IMAXABS''@/$(GL_GNULIB_IMAXABS)/g' \
+ -e 's/@''GNULIB_IMAXDIV''@/$(GL_GNULIB_IMAXDIV)/g' \
+ -e 's/@''GNULIB_STRTOIMAX''@/$(GL_GNULIB_STRTOIMAX)/g' \
+ -e 's/@''GNULIB_STRTOUMAX''@/$(GL_GNULIB_STRTOUMAX)/g' \
-e 's/@''HAVE_DECL_IMAXABS''@/$(HAVE_DECL_IMAXABS)/g' \
-e 's/@''HAVE_DECL_IMAXDIV''@/$(HAVE_DECL_IMAXDIV)/g' \
-e 's/@''HAVE_DECL_STRTOIMAX''@/$(HAVE_DECL_STRTOIMAX)/g' \
@@ -2675,41 +4836,37 @@ inttypes.h: inttypes.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_U
-e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
-e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
- < $(srcdir)/inttypes.in.h; \
- } > $@-t && \
- mv $@-t $@
+ $(srcdir)/inttypes.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
# We need the following in order to create <limits.h> when the system
# doesn't have one that is compatible with GNU.
@GL_GENERATE_LIMITS_H_TRUE@limits.h: limits.in.h $(top_builddir)/config.status
-@GL_GENERATE_LIMITS_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \
-@GL_GENERATE_LIMITS_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
-@GL_GENERATE_LIMITS_H_TRUE@ sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+@GL_GENERATE_LIMITS_H_TRUE@ $(gl_V_at)$(SED_HEADER_STDOUT) \
+@GL_GENERATE_LIMITS_H_TRUE@ -e 's|@''GUARD_PREFIX''@|GL|g' \
@GL_GENERATE_LIMITS_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
@GL_GENERATE_LIMITS_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
@GL_GENERATE_LIMITS_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
@GL_GENERATE_LIMITS_H_TRUE@ -e 's|@''NEXT_LIMITS_H''@|$(NEXT_LIMITS_H)|g' \
-@GL_GENERATE_LIMITS_H_TRUE@ < $(srcdir)/limits.in.h; \
-@GL_GENERATE_LIMITS_H_TRUE@ } > $@-t && \
-@GL_GENERATE_LIMITS_H_TRUE@ mv $@-t $@
+@GL_GENERATE_LIMITS_H_TRUE@ $(srcdir)/limits.in.h > $@-t
+@GL_GENERATE_LIMITS_H_TRUE@ $(AM_V_at)mv $@-t $@
@GL_GENERATE_LIMITS_H_FALSE@limits.h: $(top_builddir)/config.status
@GL_GENERATE_LIMITS_H_FALSE@ rm -f $@
# We need the following in order to create <locale.h> when the system
# doesn't have one that provides all definitions.
locale.h: locale.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
- $(AM_V_GEN)rm -f $@-t $@ && \
- { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
- sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_LOCALE_H''@|$(NEXT_LOCALE_H)|g' \
- -e 's/@''GNULIB_LOCALECONV''@/$(GNULIB_LOCALECONV)/g' \
- -e 's/@''GNULIB_SETLOCALE''@/$(GNULIB_SETLOCALE)/g' \
- -e 's/@''GNULIB_SETLOCALE_NULL''@/$(GNULIB_SETLOCALE_NULL)/g' \
- -e 's/@''GNULIB_DUPLOCALE''@/$(GNULIB_DUPLOCALE)/g' \
- -e 's/@''GNULIB_LOCALENAME''@/$(GNULIB_LOCALENAME)/g' \
+ -e 's/@''GNULIB_LOCALECONV''@/$(GL_GNULIB_LOCALECONV)/g' \
+ -e 's/@''GNULIB_SETLOCALE''@/$(GL_GNULIB_SETLOCALE)/g' \
+ -e 's/@''GNULIB_SETLOCALE_NULL''@/$(GL_GNULIB_SETLOCALE_NULL)/g' \
+ -e 's/@''GNULIB_DUPLOCALE''@/$(GL_GNULIB_DUPLOCALE)/g' \
+ -e 's/@''GNULIB_LOCALENAME''@/$(GL_GNULIB_LOCALENAME)/g' \
-e 's|@''HAVE_NEWLOCALE''@|$(HAVE_NEWLOCALE)|g' \
-e 's|@''HAVE_DUPLOCALE''@|$(HAVE_DUPLOCALE)|g' \
-e 's|@''HAVE_FREELOCALE''@|$(HAVE_FREELOCALE)|g' \
@@ -2720,125 +4877,124 @@ locale.h: locale.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H
-e 's|@''REPLACE_DUPLOCALE''@|$(REPLACE_DUPLOCALE)|g' \
-e 's|@''REPLACE_FREELOCALE''@|$(REPLACE_FREELOCALE)|g' \
-e 's|@''REPLACE_STRUCT_LCONV''@|$(REPLACE_STRUCT_LCONV)|g' \
+ -e 's|@''LOCALENAME_ENHANCE_LOCALE_FUNCS''@|$(LOCALENAME_ENHANCE_LOCALE_FUNCS)|g' \
-e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
-e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
- < $(srcdir)/locale.in.h; \
- } > $@-t && \
- mv $@-t $@
+ $(srcdir)/locale.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
# We need the following in order to create <math.h> when the system
# doesn't have one that works with the given compiler.
math.h: math.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
- $(AM_V_GEN)rm -f $@-t $@ && \
- { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
- sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's|@''INCLUDE_NEXT_AS_FIRST_DIRECTIVE''@|$(INCLUDE_NEXT_AS_FIRST_DIRECTIVE)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_AS_FIRST_DIRECTIVE_MATH_H''@|$(NEXT_AS_FIRST_DIRECTIVE_MATH_H)|g' \
- -e 's/@''GNULIB_ACOSF''@/$(GNULIB_ACOSF)/g' \
- -e 's/@''GNULIB_ACOSL''@/$(GNULIB_ACOSL)/g' \
- -e 's/@''GNULIB_ASINF''@/$(GNULIB_ASINF)/g' \
- -e 's/@''GNULIB_ASINL''@/$(GNULIB_ASINL)/g' \
- -e 's/@''GNULIB_ATANF''@/$(GNULIB_ATANF)/g' \
- -e 's/@''GNULIB_ATANL''@/$(GNULIB_ATANL)/g' \
- -e 's/@''GNULIB_ATAN2F''@/$(GNULIB_ATAN2F)/g' \
- -e 's/@''GNULIB_CBRT''@/$(GNULIB_CBRT)/g' \
- -e 's/@''GNULIB_CBRTF''@/$(GNULIB_CBRTF)/g' \
- -e 's/@''GNULIB_CBRTL''@/$(GNULIB_CBRTL)/g' \
- -e 's/@''GNULIB_CEIL''@/$(GNULIB_CEIL)/g' \
- -e 's/@''GNULIB_CEILF''@/$(GNULIB_CEILF)/g' \
- -e 's/@''GNULIB_CEILL''@/$(GNULIB_CEILL)/g' \
- -e 's/@''GNULIB_COPYSIGN''@/$(GNULIB_COPYSIGN)/g' \
- -e 's/@''GNULIB_COPYSIGNF''@/$(GNULIB_COPYSIGNF)/g' \
- -e 's/@''GNULIB_COPYSIGNL''@/$(GNULIB_COPYSIGNL)/g' \
- -e 's/@''GNULIB_COSF''@/$(GNULIB_COSF)/g' \
- -e 's/@''GNULIB_COSL''@/$(GNULIB_COSL)/g' \
- -e 's/@''GNULIB_COSHF''@/$(GNULIB_COSHF)/g' \
- -e 's/@''GNULIB_EXPF''@/$(GNULIB_EXPF)/g' \
- -e 's/@''GNULIB_EXPL''@/$(GNULIB_EXPL)/g' \
- -e 's/@''GNULIB_EXP2''@/$(GNULIB_EXP2)/g' \
- -e 's/@''GNULIB_EXP2F''@/$(GNULIB_EXP2F)/g' \
- -e 's/@''GNULIB_EXP2L''@/$(GNULIB_EXP2L)/g' \
- -e 's/@''GNULIB_EXPM1''@/$(GNULIB_EXPM1)/g' \
- -e 's/@''GNULIB_EXPM1F''@/$(GNULIB_EXPM1F)/g' \
- -e 's/@''GNULIB_EXPM1L''@/$(GNULIB_EXPM1L)/g' \
- -e 's/@''GNULIB_FABSF''@/$(GNULIB_FABSF)/g' \
- -e 's/@''GNULIB_FABSL''@/$(GNULIB_FABSL)/g' \
- -e 's/@''GNULIB_FLOOR''@/$(GNULIB_FLOOR)/g' \
- -e 's/@''GNULIB_FLOORF''@/$(GNULIB_FLOORF)/g' \
- -e 's/@''GNULIB_FLOORL''@/$(GNULIB_FLOORL)/g' \
- -e 's/@''GNULIB_FMA''@/$(GNULIB_FMA)/g' \
- -e 's/@''GNULIB_FMAF''@/$(GNULIB_FMAF)/g' \
- -e 's/@''GNULIB_FMAL''@/$(GNULIB_FMAL)/g' \
- -e 's/@''GNULIB_FMOD''@/$(GNULIB_FMOD)/g' \
- -e 's/@''GNULIB_FMODF''@/$(GNULIB_FMODF)/g' \
- -e 's/@''GNULIB_FMODL''@/$(GNULIB_FMODL)/g' \
- -e 's/@''GNULIB_FREXPF''@/$(GNULIB_FREXPF)/g' \
- -e 's/@''GNULIB_FREXP''@/$(GNULIB_FREXP)/g' \
- -e 's/@''GNULIB_FREXPL''@/$(GNULIB_FREXPL)/g' \
- -e 's/@''GNULIB_HYPOT''@/$(GNULIB_HYPOT)/g' \
- -e 's/@''GNULIB_HYPOTF''@/$(GNULIB_HYPOTF)/g' \
- -e 's/@''GNULIB_HYPOTL''@/$(GNULIB_HYPOTL)/g' \
+ -e 's/@''GNULIB_ACOSF''@/$(GL_GNULIB_ACOSF)/g' \
+ -e 's/@''GNULIB_ACOSL''@/$(GL_GNULIB_ACOSL)/g' \
+ -e 's/@''GNULIB_ASINF''@/$(GL_GNULIB_ASINF)/g' \
+ -e 's/@''GNULIB_ASINL''@/$(GL_GNULIB_ASINL)/g' \
+ -e 's/@''GNULIB_ATANF''@/$(GL_GNULIB_ATANF)/g' \
+ -e 's/@''GNULIB_ATANL''@/$(GL_GNULIB_ATANL)/g' \
+ -e 's/@''GNULIB_ATAN2F''@/$(GL_GNULIB_ATAN2F)/g' \
+ -e 's/@''GNULIB_CBRT''@/$(GL_GNULIB_CBRT)/g' \
+ -e 's/@''GNULIB_CBRTF''@/$(GL_GNULIB_CBRTF)/g' \
+ -e 's/@''GNULIB_CBRTL''@/$(GL_GNULIB_CBRTL)/g' \
+ -e 's/@''GNULIB_CEIL''@/$(GL_GNULIB_CEIL)/g' \
+ -e 's/@''GNULIB_CEILF''@/$(GL_GNULIB_CEILF)/g' \
+ -e 's/@''GNULIB_CEILL''@/$(GL_GNULIB_CEILL)/g' \
+ -e 's/@''GNULIB_COPYSIGN''@/$(GL_GNULIB_COPYSIGN)/g' \
+ -e 's/@''GNULIB_COPYSIGNF''@/$(GL_GNULIB_COPYSIGNF)/g' \
+ -e 's/@''GNULIB_COPYSIGNL''@/$(GL_GNULIB_COPYSIGNL)/g' \
+ -e 's/@''GNULIB_COSF''@/$(GL_GNULIB_COSF)/g' \
+ -e 's/@''GNULIB_COSL''@/$(GL_GNULIB_COSL)/g' \
+ -e 's/@''GNULIB_COSHF''@/$(GL_GNULIB_COSHF)/g' \
+ -e 's/@''GNULIB_EXPF''@/$(GL_GNULIB_EXPF)/g' \
+ -e 's/@''GNULIB_EXPL''@/$(GL_GNULIB_EXPL)/g' \
+ -e 's/@''GNULIB_EXP2''@/$(GL_GNULIB_EXP2)/g' \
+ -e 's/@''GNULIB_EXP2F''@/$(GL_GNULIB_EXP2F)/g' \
+ -e 's/@''GNULIB_EXP2L''@/$(GL_GNULIB_EXP2L)/g' \
+ -e 's/@''GNULIB_EXPM1''@/$(GL_GNULIB_EXPM1)/g' \
+ -e 's/@''GNULIB_EXPM1F''@/$(GL_GNULIB_EXPM1F)/g' \
+ -e 's/@''GNULIB_EXPM1L''@/$(GL_GNULIB_EXPM1L)/g' \
+ -e 's/@''GNULIB_FABSF''@/$(GL_GNULIB_FABSF)/g' \
+ -e 's/@''GNULIB_FABSL''@/$(GL_GNULIB_FABSL)/g' \
+ -e 's/@''GNULIB_FLOOR''@/$(GL_GNULIB_FLOOR)/g' \
+ -e 's/@''GNULIB_FLOORF''@/$(GL_GNULIB_FLOORF)/g' \
+ -e 's/@''GNULIB_FLOORL''@/$(GL_GNULIB_FLOORL)/g' \
+ -e 's/@''GNULIB_FMA''@/$(GL_GNULIB_FMA)/g' \
+ -e 's/@''GNULIB_FMAF''@/$(GL_GNULIB_FMAF)/g' \
+ -e 's/@''GNULIB_FMAL''@/$(GL_GNULIB_FMAL)/g' \
+ -e 's/@''GNULIB_FMOD''@/$(GL_GNULIB_FMOD)/g' \
+ -e 's/@''GNULIB_FMODF''@/$(GL_GNULIB_FMODF)/g' \
+ -e 's/@''GNULIB_FMODL''@/$(GL_GNULIB_FMODL)/g' \
+ -e 's/@''GNULIB_FREXPF''@/$(GL_GNULIB_FREXPF)/g' \
+ -e 's/@''GNULIB_FREXP''@/$(GL_GNULIB_FREXP)/g' \
+ -e 's/@''GNULIB_FREXPL''@/$(GL_GNULIB_FREXPL)/g' \
+ -e 's/@''GNULIB_HYPOT''@/$(GL_GNULIB_HYPOT)/g' \
+ -e 's/@''GNULIB_HYPOTF''@/$(GL_GNULIB_HYPOTF)/g' \
+ -e 's/@''GNULIB_HYPOTL''@/$(GL_GNULIB_HYPOTL)/g' \
< $(srcdir)/math.in.h | \
- sed -e 's/@''GNULIB_ILOGB''@/$(GNULIB_ILOGB)/g' \
- -e 's/@''GNULIB_ILOGBF''@/$(GNULIB_ILOGBF)/g' \
- -e 's/@''GNULIB_ILOGBL''@/$(GNULIB_ILOGBL)/g' \
- -e 's/@''GNULIB_ISFINITE''@/$(GNULIB_ISFINITE)/g' \
- -e 's/@''GNULIB_ISINF''@/$(GNULIB_ISINF)/g' \
- -e 's/@''GNULIB_ISNAN''@/$(GNULIB_ISNAN)/g' \
- -e 's/@''GNULIB_ISNANF''@/$(GNULIB_ISNANF)/g' \
- -e 's/@''GNULIB_ISNAND''@/$(GNULIB_ISNAND)/g' \
- -e 's/@''GNULIB_ISNANL''@/$(GNULIB_ISNANL)/g' \
- -e 's/@''GNULIB_LDEXPF''@/$(GNULIB_LDEXPF)/g' \
- -e 's/@''GNULIB_LDEXPL''@/$(GNULIB_LDEXPL)/g' \
- -e 's/@''GNULIB_LOG''@/$(GNULIB_LOG)/g' \
- -e 's/@''GNULIB_LOGF''@/$(GNULIB_LOGF)/g' \
- -e 's/@''GNULIB_LOGL''@/$(GNULIB_LOGL)/g' \
- -e 's/@''GNULIB_LOG10''@/$(GNULIB_LOG10)/g' \
- -e 's/@''GNULIB_LOG10F''@/$(GNULIB_LOG10F)/g' \
- -e 's/@''GNULIB_LOG10L''@/$(GNULIB_LOG10L)/g' \
- -e 's/@''GNULIB_LOG1P''@/$(GNULIB_LOG1P)/g' \
- -e 's/@''GNULIB_LOG1PF''@/$(GNULIB_LOG1PF)/g' \
- -e 's/@''GNULIB_LOG1PL''@/$(GNULIB_LOG1PL)/g' \
- -e 's/@''GNULIB_LOG2''@/$(GNULIB_LOG2)/g' \
- -e 's/@''GNULIB_LOG2F''@/$(GNULIB_LOG2F)/g' \
- -e 's/@''GNULIB_LOG2L''@/$(GNULIB_LOG2L)/g' \
- -e 's/@''GNULIB_LOGB''@/$(GNULIB_LOGB)/g' \
- -e 's/@''GNULIB_LOGBF''@/$(GNULIB_LOGBF)/g' \
- -e 's/@''GNULIB_LOGBL''@/$(GNULIB_LOGBL)/g' \
- -e 's/@''GNULIB_MODF''@/$(GNULIB_MODF)/g' \
- -e 's/@''GNULIB_MODFF''@/$(GNULIB_MODFF)/g' \
- -e 's/@''GNULIB_MODFL''@/$(GNULIB_MODFL)/g' \
- -e 's/@''GNULIB_POWF''@/$(GNULIB_POWF)/g' \
- -e 's/@''GNULIB_REMAINDER''@/$(GNULIB_REMAINDER)/g' \
- -e 's/@''GNULIB_REMAINDERF''@/$(GNULIB_REMAINDERF)/g' \
- -e 's/@''GNULIB_REMAINDERL''@/$(GNULIB_REMAINDERL)/g' \
- -e 's/@''GNULIB_RINT''@/$(GNULIB_RINT)/g' \
- -e 's/@''GNULIB_RINTF''@/$(GNULIB_RINTF)/g' \
- -e 's/@''GNULIB_RINTL''@/$(GNULIB_RINTL)/g' \
- -e 's/@''GNULIB_ROUND''@/$(GNULIB_ROUND)/g' \
- -e 's/@''GNULIB_ROUNDF''@/$(GNULIB_ROUNDF)/g' \
- -e 's/@''GNULIB_ROUNDL''@/$(GNULIB_ROUNDL)/g' \
- -e 's/@''GNULIB_SIGNBIT''@/$(GNULIB_SIGNBIT)/g' \
- -e 's/@''GNULIB_SINF''@/$(GNULIB_SINF)/g' \
- -e 's/@''GNULIB_SINL''@/$(GNULIB_SINL)/g' \
- -e 's/@''GNULIB_SINHF''@/$(GNULIB_SINHF)/g' \
- -e 's/@''GNULIB_SQRTF''@/$(GNULIB_SQRTF)/g' \
- -e 's/@''GNULIB_SQRTL''@/$(GNULIB_SQRTL)/g' \
- -e 's/@''GNULIB_TANF''@/$(GNULIB_TANF)/g' \
- -e 's/@''GNULIB_TANL''@/$(GNULIB_TANL)/g' \
- -e 's/@''GNULIB_TANHF''@/$(GNULIB_TANHF)/g' \
- -e 's/@''GNULIB_TRUNC''@/$(GNULIB_TRUNC)/g' \
- -e 's/@''GNULIB_TRUNCF''@/$(GNULIB_TRUNCF)/g' \
- -e 's/@''GNULIB_TRUNCL''@/$(GNULIB_TRUNCL)/g' \
- -e 's/@''GNULIB_MDA_J0''@/$(GNULIB_MDA_J0)/g' \
- -e 's/@''GNULIB_MDA_J1''@/$(GNULIB_MDA_J1)/g' \
- -e 's/@''GNULIB_MDA_JN''@/$(GNULIB_MDA_JN)/g' \
- -e 's/@''GNULIB_MDA_Y0''@/$(GNULIB_MDA_Y0)/g' \
- -e 's/@''GNULIB_MDA_Y1''@/$(GNULIB_MDA_Y1)/g' \
- -e 's/@''GNULIB_MDA_YN''@/$(GNULIB_MDA_YN)/g' \
+ sed -e 's/@''GNULIB_ILOGB''@/$(GL_GNULIB_ILOGB)/g' \
+ -e 's/@''GNULIB_ILOGBF''@/$(GL_GNULIB_ILOGBF)/g' \
+ -e 's/@''GNULIB_ILOGBL''@/$(GL_GNULIB_ILOGBL)/g' \
+ -e 's/@''GNULIB_ISFINITE''@/$(GL_GNULIB_ISFINITE)/g' \
+ -e 's/@''GNULIB_ISINF''@/$(GL_GNULIB_ISINF)/g' \
+ -e 's/@''GNULIB_ISNAN''@/$(GL_GNULIB_ISNAN)/g' \
+ -e 's/@''GNULIB_ISNANF''@/$(GL_GNULIB_ISNANF)/g' \
+ -e 's/@''GNULIB_ISNAND''@/$(GL_GNULIB_ISNAND)/g' \
+ -e 's/@''GNULIB_ISNANL''@/$(GL_GNULIB_ISNANL)/g' \
+ -e 's/@''GNULIB_LDEXPF''@/$(GL_GNULIB_LDEXPF)/g' \
+ -e 's/@''GNULIB_LDEXPL''@/$(GL_GNULIB_LDEXPL)/g' \
+ -e 's/@''GNULIB_LOG''@/$(GL_GNULIB_LOG)/g' \
+ -e 's/@''GNULIB_LOGF''@/$(GL_GNULIB_LOGF)/g' \
+ -e 's/@''GNULIB_LOGL''@/$(GL_GNULIB_LOGL)/g' \
+ -e 's/@''GNULIB_LOG10''@/$(GL_GNULIB_LOG10)/g' \
+ -e 's/@''GNULIB_LOG10F''@/$(GL_GNULIB_LOG10F)/g' \
+ -e 's/@''GNULIB_LOG10L''@/$(GL_GNULIB_LOG10L)/g' \
+ -e 's/@''GNULIB_LOG1P''@/$(GL_GNULIB_LOG1P)/g' \
+ -e 's/@''GNULIB_LOG1PF''@/$(GL_GNULIB_LOG1PF)/g' \
+ -e 's/@''GNULIB_LOG1PL''@/$(GL_GNULIB_LOG1PL)/g' \
+ -e 's/@''GNULIB_LOG2''@/$(GL_GNULIB_LOG2)/g' \
+ -e 's/@''GNULIB_LOG2F''@/$(GL_GNULIB_LOG2F)/g' \
+ -e 's/@''GNULIB_LOG2L''@/$(GL_GNULIB_LOG2L)/g' \
+ -e 's/@''GNULIB_LOGB''@/$(GL_GNULIB_LOGB)/g' \
+ -e 's/@''GNULIB_LOGBF''@/$(GL_GNULIB_LOGBF)/g' \
+ -e 's/@''GNULIB_LOGBL''@/$(GL_GNULIB_LOGBL)/g' \
+ -e 's/@''GNULIB_MODF''@/$(GL_GNULIB_MODF)/g' \
+ -e 's/@''GNULIB_MODFF''@/$(GL_GNULIB_MODFF)/g' \
+ -e 's/@''GNULIB_MODFL''@/$(GL_GNULIB_MODFL)/g' \
+ -e 's/@''GNULIB_POWF''@/$(GL_GNULIB_POWF)/g' \
+ -e 's/@''GNULIB_REMAINDER''@/$(GL_GNULIB_REMAINDER)/g' \
+ -e 's/@''GNULIB_REMAINDERF''@/$(GL_GNULIB_REMAINDERF)/g' \
+ -e 's/@''GNULIB_REMAINDERL''@/$(GL_GNULIB_REMAINDERL)/g' \
+ -e 's/@''GNULIB_RINT''@/$(GL_GNULIB_RINT)/g' \
+ -e 's/@''GNULIB_RINTF''@/$(GL_GNULIB_RINTF)/g' \
+ -e 's/@''GNULIB_RINTL''@/$(GL_GNULIB_RINTL)/g' \
+ -e 's/@''GNULIB_ROUND''@/$(GL_GNULIB_ROUND)/g' \
+ -e 's/@''GNULIB_ROUNDF''@/$(GL_GNULIB_ROUNDF)/g' \
+ -e 's/@''GNULIB_ROUNDL''@/$(GL_GNULIB_ROUNDL)/g' \
+ -e 's/@''GNULIB_SIGNBIT''@/$(GL_GNULIB_SIGNBIT)/g' \
+ -e 's/@''GNULIB_SINF''@/$(GL_GNULIB_SINF)/g' \
+ -e 's/@''GNULIB_SINL''@/$(GL_GNULIB_SINL)/g' \
+ -e 's/@''GNULIB_SINHF''@/$(GL_GNULIB_SINHF)/g' \
+ -e 's/@''GNULIB_SQRTF''@/$(GL_GNULIB_SQRTF)/g' \
+ -e 's/@''GNULIB_SQRTL''@/$(GL_GNULIB_SQRTL)/g' \
+ -e 's/@''GNULIB_TANF''@/$(GL_GNULIB_TANF)/g' \
+ -e 's/@''GNULIB_TANL''@/$(GL_GNULIB_TANL)/g' \
+ -e 's/@''GNULIB_TANHF''@/$(GL_GNULIB_TANHF)/g' \
+ -e 's/@''GNULIB_TRUNC''@/$(GL_GNULIB_TRUNC)/g' \
+ -e 's/@''GNULIB_TRUNCF''@/$(GL_GNULIB_TRUNCF)/g' \
+ -e 's/@''GNULIB_TRUNCL''@/$(GL_GNULIB_TRUNCL)/g' \
+ -e 's/@''GNULIB_MDA_J0''@/$(GL_GNULIB_MDA_J0)/g' \
+ -e 's/@''GNULIB_MDA_J1''@/$(GL_GNULIB_MDA_J1)/g' \
+ -e 's/@''GNULIB_MDA_JN''@/$(GL_GNULIB_MDA_JN)/g' \
+ -e 's/@''GNULIB_MDA_Y0''@/$(GL_GNULIB_MDA_Y0)/g' \
+ -e 's/@''GNULIB_MDA_Y1''@/$(GL_GNULIB_MDA_Y1)/g' \
+ -e 's/@''GNULIB_MDA_YN''@/$(GL_GNULIB_MDA_YN)/g' \
| \
sed -e 's|@''HAVE_ACOSF''@|$(HAVE_ACOSF)|g' \
-e 's|@''HAVE_ACOSL''@|$(HAVE_ACOSL)|g' \
@@ -3019,22 +5175,21 @@ math.h: math.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(
-e 's|@''REPLACE_TRUNCL''@|$(REPLACE_TRUNCL)|g' \
-e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
- -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
- } > $@-t && \
- mv $@-t $@
+ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+ > $@-t
+ $(AM_V_at)mv $@-t $@
# We need the following in order to create <netdb.h> when the system
# doesn't have one that works with the given compiler.
netdb.h: netdb.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
- $(AM_V_GEN)rm -f $@-t $@ && \
- { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
- sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_NETDB_H''@|$(NEXT_NETDB_H)|g' \
-e 's|@''HAVE_NETDB_H''@|$(HAVE_NETDB_H)|g' \
- -e 's/@''GNULIB_GETADDRINFO''@/$(GNULIB_GETADDRINFO)/g' \
+ -e 's/@''GNULIB_GETADDRINFO''@/$(GL_GNULIB_GETADDRINFO)/g' \
-e 's|@''HAVE_STRUCT_ADDRINFO''@|$(HAVE_STRUCT_ADDRINFO)|g' \
-e 's|@''HAVE_DECL_FREEADDRINFO''@|$(HAVE_DECL_FREEADDRINFO)|g' \
-e 's|@''HAVE_DECL_GAI_STRERROR''@|$(HAVE_DECL_GAI_STRERROR)|g' \
@@ -3045,43 +5200,49 @@ netdb.h: netdb.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H)
-e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
-e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
- < $(srcdir)/netdb.in.h; \
- } > $@-t && \
- mv $@-t $@
+ $(srcdir)/netdb.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
# We need the following in order to create <netinet/in.h> when the system
# doesn't have one.
@GL_GENERATE_NETINET_IN_H_TRUE@netinet/in.h: netinet_in.in.h $(top_builddir)/config.status
-@GL_GENERATE_NETINET_IN_H_TRUE@ $(AM_V_at)$(MKDIR_P) netinet
-@GL_GENERATE_NETINET_IN_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \
-@GL_GENERATE_NETINET_IN_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-@GL_GENERATE_NETINET_IN_H_TRUE@ sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+@GL_GENERATE_NETINET_IN_H_TRUE@ $(AM_V_GEN)$(MKDIR_P) 'netinet'
+@GL_GENERATE_NETINET_IN_H_TRUE@ $(AM_V_at)$(SED_HEADER_STDOUT) \
+@GL_GENERATE_NETINET_IN_H_TRUE@ -e 's|@''GUARD_PREFIX''@|GL|g' \
@GL_GENERATE_NETINET_IN_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
@GL_GENERATE_NETINET_IN_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
@GL_GENERATE_NETINET_IN_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
@GL_GENERATE_NETINET_IN_H_TRUE@ -e 's|@''NEXT_NETINET_IN_H''@|$(NEXT_NETINET_IN_H)|g' \
@GL_GENERATE_NETINET_IN_H_TRUE@ -e 's|@''HAVE_NETINET_IN_H''@|$(HAVE_NETINET_IN_H)|g' \
-@GL_GENERATE_NETINET_IN_H_TRUE@ < $(srcdir)/netinet_in.in.h; \
-@GL_GENERATE_NETINET_IN_H_TRUE@ } > $@-t && \
-@GL_GENERATE_NETINET_IN_H_TRUE@ mv $@-t $@
+@GL_GENERATE_NETINET_IN_H_TRUE@ $(srcdir)/netinet_in.in.h > $@-t
+@GL_GENERATE_NETINET_IN_H_TRUE@ $(AM_V_at)mv $@-t $@
@GL_GENERATE_NETINET_IN_H_FALSE@netinet/in.h: $(top_builddir)/config.status
@GL_GENERATE_NETINET_IN_H_FALSE@ rm -f $@
+malloc/scratch_buffer.gl.h: malloc/scratch_buffer.h
+ $(AM_V_GEN)$(MKDIR_P) 'malloc'
+ $(AM_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|__always_inline|inline _GL_ATTRIBUTE_ALWAYS_INLINE|g' \
+ -e 's|__glibc_likely|_GL_LIKELY|g' \
+ -e 's|__glibc_unlikely|_GL_UNLIKELY|g' \
+ -e '/libc_hidden_proto/d' \
+ $(srcdir)/malloc/scratch_buffer.h > $@-t
+ $(AM_V_at)mv $@-t $@
+
# We need the following in order to create <signal.h> when the system
# doesn't have a complete one.
signal.h: signal.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
- $(AM_V_GEN)rm -f $@-t $@ && \
- { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
- sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_SIGNAL_H''@|$(NEXT_SIGNAL_H)|g' \
- -e 's/@''GNULIB_PTHREAD_SIGMASK''@/$(GNULIB_PTHREAD_SIGMASK)/g' \
- -e 's/@''GNULIB_RAISE''@/$(GNULIB_RAISE)/g' \
- -e 's/@''GNULIB_SIGNAL_H_SIGPIPE''@/$(GNULIB_SIGNAL_H_SIGPIPE)/g' \
- -e 's/@''GNULIB_SIGPROCMASK''@/$(GNULIB_SIGPROCMASK)/g' \
- -e 's/@''GNULIB_SIGACTION''@/$(GNULIB_SIGACTION)/g' \
+ -e 's/@''GNULIB_PTHREAD_SIGMASK''@/$(GL_GNULIB_PTHREAD_SIGMASK)/g' \
+ -e 's/@''GNULIB_RAISE''@/$(GL_GNULIB_RAISE)/g' \
+ -e 's/@''GNULIB_SIGNAL_H_SIGPIPE''@/$(GL_GNULIB_SIGNAL_H_SIGPIPE)/g' \
+ -e 's/@''GNULIB_SIGPROCMASK''@/$(GL_GNULIB_SIGPROCMASK)/g' \
+ -e 's/@''GNULIB_SIGACTION''@/$(GL_GNULIB_SIGACTION)/g' \
-e 's|@''HAVE_POSIX_SIGNALBLOCKING''@|$(HAVE_POSIX_SIGNALBLOCKING)|g' \
-e 's|@''HAVE_PTHREAD_SIGMASK''@|$(HAVE_PTHREAD_SIGMASK)|g' \
-e 's|@''HAVE_RAISE''@|$(HAVE_RAISE)|g' \
@@ -3096,38 +5257,32 @@ signal.h: signal.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H
-e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
-e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
- < $(srcdir)/signal.in.h; \
- } > $@-t && \
- mv $@-t $@
+ $(srcdir)/signal.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
# We need the following in order to create <stdalign.h> when the system
# doesn't have one that works.
@GL_GENERATE_STDALIGN_H_TRUE@stdalign.h: stdalign.in.h $(top_builddir)/config.status
-@GL_GENERATE_STDALIGN_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \
-@GL_GENERATE_STDALIGN_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-@GL_GENERATE_STDALIGN_H_TRUE@ cat $(srcdir)/stdalign.in.h; \
-@GL_GENERATE_STDALIGN_H_TRUE@ } > $@-t && \
-@GL_GENERATE_STDALIGN_H_TRUE@ mv $@-t $@
+@GL_GENERATE_STDALIGN_H_TRUE@ $(gl_V_at)$(SED_HEADER_TO_AT_t) $(srcdir)/stdalign.in.h
+@GL_GENERATE_STDALIGN_H_TRUE@ $(AM_V_at)mv $@-t $@
@GL_GENERATE_STDALIGN_H_FALSE@stdalign.h: $(top_builddir)/config.status
@GL_GENERATE_STDALIGN_H_FALSE@ rm -f $@
# We need the following in order to create <stdbool.h> when the system
# doesn't have one that works.
@GL_GENERATE_STDBOOL_H_TRUE@stdbool.h: stdbool.in.h $(top_builddir)/config.status
-@GL_GENERATE_STDBOOL_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \
-@GL_GENERATE_STDBOOL_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-@GL_GENERATE_STDBOOL_H_TRUE@ sed -e 's/@''HAVE__BOOL''@/$(HAVE__BOOL)/g' < $(srcdir)/stdbool.in.h; \
-@GL_GENERATE_STDBOOL_H_TRUE@ } > $@-t && \
-@GL_GENERATE_STDBOOL_H_TRUE@ mv $@-t $@
+@GL_GENERATE_STDBOOL_H_TRUE@ $(gl_V_at)$(SED_HEADER_STDOUT) \
+@GL_GENERATE_STDBOOL_H_TRUE@ -e 's/@''HAVE__BOOL''@/$(HAVE__BOOL)/g' \
+@GL_GENERATE_STDBOOL_H_TRUE@ $(srcdir)/stdbool.in.h > $@-t
+@GL_GENERATE_STDBOOL_H_TRUE@ $(AM_V_at)mv $@-t $@
@GL_GENERATE_STDBOOL_H_FALSE@stdbool.h: $(top_builddir)/config.status
@GL_GENERATE_STDBOOL_H_FALSE@ rm -f $@
# We need the following in order to create <stddef.h> when the system
# doesn't have one that works with the given compiler.
@GL_GENERATE_STDDEF_H_TRUE@stddef.h: stddef.in.h $(top_builddir)/config.status
-@GL_GENERATE_STDDEF_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \
-@GL_GENERATE_STDDEF_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
-@GL_GENERATE_STDDEF_H_TRUE@ sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+@GL_GENERATE_STDDEF_H_TRUE@ $(gl_V_at)$(SED_HEADER_STDOUT) \
+@GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''GUARD_PREFIX''@|GL|g' \
@GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
@GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
@GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
@@ -3135,18 +5290,16 @@ signal.h: signal.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H
@GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''HAVE_MAX_ALIGN_T''@|$(HAVE_MAX_ALIGN_T)|g' \
@GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \
@GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \
-@GL_GENERATE_STDDEF_H_TRUE@ < $(srcdir)/stddef.in.h; \
-@GL_GENERATE_STDDEF_H_TRUE@ } > $@-t && \
-@GL_GENERATE_STDDEF_H_TRUE@ mv $@-t $@
+@GL_GENERATE_STDDEF_H_TRUE@ $(srcdir)/stddef.in.h > $@-t
+@GL_GENERATE_STDDEF_H_TRUE@ $(AM_V_at)mv $@-t $@
@GL_GENERATE_STDDEF_H_FALSE@stddef.h: $(top_builddir)/config.status
@GL_GENERATE_STDDEF_H_FALSE@ rm -f $@
# We need the following in order to create <stdint.h> when the system
# doesn't have one that works with the given compiler.
@GL_GENERATE_STDINT_H_TRUE@stdint.h: stdint.in.h $(top_builddir)/config.status
-@GL_GENERATE_STDINT_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \
-@GL_GENERATE_STDINT_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-@GL_GENERATE_STDINT_H_TRUE@ sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+@GL_GENERATE_STDINT_H_TRUE@ $(gl_V_at)$(SED_HEADER_STDOUT) \
+@GL_GENERATE_STDINT_H_TRUE@ -e 's|@''GUARD_PREFIX''@|GL|g' \
@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \
@GL_GENERATE_STDINT_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
@GL_GENERATE_STDINT_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
@@ -3172,82 +5325,81 @@ signal.h: signal.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H
@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''BITSIZEOF_WINT_T''@/$(BITSIZEOF_WINT_T)/g' \
@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \
@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \
-@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''GNULIB_OVERRIDES_WINT_T''@/$(GNULIB_OVERRIDES_WINT_T)/g' \
-@GL_GENERATE_STDINT_H_TRUE@ < $(srcdir)/stdint.in.h; \
-@GL_GENERATE_STDINT_H_TRUE@ } > $@-t && \
-@GL_GENERATE_STDINT_H_TRUE@ mv $@-t $@
+@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''GNULIBHEADERS_OVERRIDE_WINT_T''@/$(GNULIBHEADERS_OVERRIDE_WINT_T)/g' \
+@GL_GENERATE_STDINT_H_TRUE@ $(srcdir)/stdint.in.h > $@-t
+@GL_GENERATE_STDINT_H_TRUE@ $(AM_V_at)mv $@-t $@
@GL_GENERATE_STDINT_H_FALSE@stdint.h: $(top_builddir)/config.status
@GL_GENERATE_STDINT_H_FALSE@ rm -f $@
# We need the following in order to create <stdio.h> when the system
# doesn't have one that works with the given compiler.
stdio.h: stdio.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
- $(AM_V_GEN)rm -f $@-t $@ && \
- { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
- sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_STDIO_H''@|$(NEXT_STDIO_H)|g' \
- -e 's/@''GNULIB_DPRINTF''@/$(GNULIB_DPRINTF)/g' \
- -e 's/@''GNULIB_FCLOSE''@/$(GNULIB_FCLOSE)/g' \
- -e 's/@''GNULIB_FDOPEN''@/$(GNULIB_FDOPEN)/g' \
- -e 's/@''GNULIB_FFLUSH''@/$(GNULIB_FFLUSH)/g' \
- -e 's/@''GNULIB_FGETC''@/$(GNULIB_FGETC)/g' \
- -e 's/@''GNULIB_FGETS''@/$(GNULIB_FGETS)/g' \
- -e 's/@''GNULIB_FOPEN''@/$(GNULIB_FOPEN)/g' \
- -e 's/@''GNULIB_FPRINTF''@/$(GNULIB_FPRINTF)/g' \
- -e 's/@''GNULIB_FPRINTF_POSIX''@/$(GNULIB_FPRINTF_POSIX)/g' \
- -e 's/@''GNULIB_FPURGE''@/$(GNULIB_FPURGE)/g' \
- -e 's/@''GNULIB_FPUTC''@/$(GNULIB_FPUTC)/g' \
- -e 's/@''GNULIB_FPUTS''@/$(GNULIB_FPUTS)/g' \
- -e 's/@''GNULIB_FREAD''@/$(GNULIB_FREAD)/g' \
- -e 's/@''GNULIB_FREOPEN''@/$(GNULIB_FREOPEN)/g' \
- -e 's/@''GNULIB_FSCANF''@/$(GNULIB_FSCANF)/g' \
- -e 's/@''GNULIB_FSEEK''@/$(GNULIB_FSEEK)/g' \
- -e 's/@''GNULIB_FSEEKO''@/$(GNULIB_FSEEKO)/g' \
- -e 's/@''GNULIB_FTELL''@/$(GNULIB_FTELL)/g' \
- -e 's/@''GNULIB_FTELLO''@/$(GNULIB_FTELLO)/g' \
- -e 's/@''GNULIB_FWRITE''@/$(GNULIB_FWRITE)/g' \
- -e 's/@''GNULIB_GETC''@/$(GNULIB_GETC)/g' \
- -e 's/@''GNULIB_GETCHAR''@/$(GNULIB_GETCHAR)/g' \
- -e 's/@''GNULIB_GETDELIM''@/$(GNULIB_GETDELIM)/g' \
- -e 's/@''GNULIB_GETLINE''@/$(GNULIB_GETLINE)/g' \
- -e 's/@''GNULIB_OBSTACK_PRINTF''@/$(GNULIB_OBSTACK_PRINTF)/g' \
- -e 's/@''GNULIB_OBSTACK_PRINTF_POSIX''@/$(GNULIB_OBSTACK_PRINTF_POSIX)/g' \
- -e 's/@''GNULIB_PCLOSE''@/$(GNULIB_PCLOSE)/g' \
- -e 's/@''GNULIB_PERROR''@/$(GNULIB_PERROR)/g' \
- -e 's/@''GNULIB_POPEN''@/$(GNULIB_POPEN)/g' \
- -e 's/@''GNULIB_PRINTF''@/$(GNULIB_PRINTF)/g' \
- -e 's/@''GNULIB_PRINTF_POSIX''@/$(GNULIB_PRINTF_POSIX)/g' \
- -e 's/@''GNULIB_PUTC''@/$(GNULIB_PUTC)/g' \
- -e 's/@''GNULIB_PUTCHAR''@/$(GNULIB_PUTCHAR)/g' \
- -e 's/@''GNULIB_PUTS''@/$(GNULIB_PUTS)/g' \
- -e 's/@''GNULIB_REMOVE''@/$(GNULIB_REMOVE)/g' \
- -e 's/@''GNULIB_RENAME''@/$(GNULIB_RENAME)/g' \
- -e 's/@''GNULIB_RENAMEAT''@/$(GNULIB_RENAMEAT)/g' \
- -e 's/@''GNULIB_SCANF''@/$(GNULIB_SCANF)/g' \
- -e 's/@''GNULIB_SNPRINTF''@/$(GNULIB_SNPRINTF)/g' \
- -e 's/@''GNULIB_SPRINTF_POSIX''@/$(GNULIB_SPRINTF_POSIX)/g' \
- -e 's/@''GNULIB_STDIO_H_NONBLOCKING''@/$(GNULIB_STDIO_H_NONBLOCKING)/g' \
- -e 's/@''GNULIB_STDIO_H_SIGPIPE''@/$(GNULIB_STDIO_H_SIGPIPE)/g' \
- -e 's/@''GNULIB_TMPFILE''@/$(GNULIB_TMPFILE)/g' \
- -e 's/@''GNULIB_VASPRINTF''@/$(GNULIB_VASPRINTF)/g' \
- -e 's/@''GNULIB_VDPRINTF''@/$(GNULIB_VDPRINTF)/g' \
- -e 's/@''GNULIB_VFPRINTF''@/$(GNULIB_VFPRINTF)/g' \
- -e 's/@''GNULIB_VFPRINTF_POSIX''@/$(GNULIB_VFPRINTF_POSIX)/g' \
- -e 's/@''GNULIB_VFSCANF''@/$(GNULIB_VFSCANF)/g' \
- -e 's/@''GNULIB_VSCANF''@/$(GNULIB_VSCANF)/g' \
- -e 's/@''GNULIB_VPRINTF''@/$(GNULIB_VPRINTF)/g' \
- -e 's/@''GNULIB_VPRINTF_POSIX''@/$(GNULIB_VPRINTF_POSIX)/g' \
- -e 's/@''GNULIB_VSNPRINTF''@/$(GNULIB_VSNPRINTF)/g' \
- -e 's/@''GNULIB_VSPRINTF_POSIX''@/$(GNULIB_VSPRINTF_POSIX)/g' \
- -e 's/@''GNULIB_MDA_FCLOSEALL''@/$(GNULIB_MDA_FCLOSEALL)/g' \
- -e 's/@''GNULIB_MDA_FDOPEN''@/$(GNULIB_MDA_FDOPEN)/g' \
- -e 's/@''GNULIB_MDA_FILENO''@/$(GNULIB_MDA_FILENO)/g' \
- -e 's/@''GNULIB_MDA_GETW''@/$(GNULIB_MDA_GETW)/g' \
- -e 's/@''GNULIB_MDA_PUTW''@/$(GNULIB_MDA_PUTW)/g' \
- -e 's/@''GNULIB_MDA_TEMPNAM''@/$(GNULIB_MDA_TEMPNAM)/g' \
+ -e 's/@''GNULIB_DPRINTF''@/$(GL_GNULIB_DPRINTF)/g' \
+ -e 's/@''GNULIB_FCLOSE''@/$(GL_GNULIB_FCLOSE)/g' \
+ -e 's/@''GNULIB_FDOPEN''@/$(GL_GNULIB_FDOPEN)/g' \
+ -e 's/@''GNULIB_FFLUSH''@/$(GL_GNULIB_FFLUSH)/g' \
+ -e 's/@''GNULIB_FGETC''@/$(GL_GNULIB_FGETC)/g' \
+ -e 's/@''GNULIB_FGETS''@/$(GL_GNULIB_FGETS)/g' \
+ -e 's/@''GNULIB_FOPEN''@/$(GL_GNULIB_FOPEN)/g' \
+ -e 's/@''GNULIB_FOPEN_GNU''@/$(GL_GNULIB_FOPEN_GNU)/g' \
+ -e 's/@''GNULIB_FPRINTF''@/$(GL_GNULIB_FPRINTF)/g' \
+ -e 's/@''GNULIB_FPRINTF_POSIX''@/$(GL_GNULIB_FPRINTF_POSIX)/g' \
+ -e 's/@''GNULIB_FPURGE''@/$(GL_GNULIB_FPURGE)/g' \
+ -e 's/@''GNULIB_FPUTC''@/$(GL_GNULIB_FPUTC)/g' \
+ -e 's/@''GNULIB_FPUTS''@/$(GL_GNULIB_FPUTS)/g' \
+ -e 's/@''GNULIB_FREAD''@/$(GL_GNULIB_FREAD)/g' \
+ -e 's/@''GNULIB_FREOPEN''@/$(GL_GNULIB_FREOPEN)/g' \
+ -e 's/@''GNULIB_FSCANF''@/$(GL_GNULIB_FSCANF)/g' \
+ -e 's/@''GNULIB_FSEEK''@/$(GL_GNULIB_FSEEK)/g' \
+ -e 's/@''GNULIB_FSEEKO''@/$(GL_GNULIB_FSEEKO)/g' \
+ -e 's/@''GNULIB_FTELL''@/$(GL_GNULIB_FTELL)/g' \
+ -e 's/@''GNULIB_FTELLO''@/$(GL_GNULIB_FTELLO)/g' \
+ -e 's/@''GNULIB_FWRITE''@/$(GL_GNULIB_FWRITE)/g' \
+ -e 's/@''GNULIB_GETC''@/$(GL_GNULIB_GETC)/g' \
+ -e 's/@''GNULIB_GETCHAR''@/$(GL_GNULIB_GETCHAR)/g' \
+ -e 's/@''GNULIB_GETDELIM''@/$(GL_GNULIB_GETDELIM)/g' \
+ -e 's/@''GNULIB_GETLINE''@/$(GL_GNULIB_GETLINE)/g' \
+ -e 's/@''GNULIB_OBSTACK_PRINTF''@/$(GL_GNULIB_OBSTACK_PRINTF)/g' \
+ -e 's/@''GNULIB_OBSTACK_PRINTF_POSIX''@/$(GL_GNULIB_OBSTACK_PRINTF_POSIX)/g' \
+ -e 's/@''GNULIB_PCLOSE''@/$(GL_GNULIB_PCLOSE)/g' \
+ -e 's/@''GNULIB_PERROR''@/$(GL_GNULIB_PERROR)/g' \
+ -e 's/@''GNULIB_POPEN''@/$(GL_GNULIB_POPEN)/g' \
+ -e 's/@''GNULIB_PRINTF''@/$(GL_GNULIB_PRINTF)/g' \
+ -e 's/@''GNULIB_PRINTF_POSIX''@/$(GL_GNULIB_PRINTF_POSIX)/g' \
+ -e 's/@''GNULIB_PUTC''@/$(GL_GNULIB_PUTC)/g' \
+ -e 's/@''GNULIB_PUTCHAR''@/$(GL_GNULIB_PUTCHAR)/g' \
+ -e 's/@''GNULIB_PUTS''@/$(GL_GNULIB_PUTS)/g' \
+ -e 's/@''GNULIB_REMOVE''@/$(GL_GNULIB_REMOVE)/g' \
+ -e 's/@''GNULIB_RENAME''@/$(GL_GNULIB_RENAME)/g' \
+ -e 's/@''GNULIB_RENAMEAT''@/$(GL_GNULIB_RENAMEAT)/g' \
+ -e 's/@''GNULIB_SCANF''@/$(GL_GNULIB_SCANF)/g' \
+ -e 's/@''GNULIB_SNPRINTF''@/$(GL_GNULIB_SNPRINTF)/g' \
+ -e 's/@''GNULIB_SPRINTF_POSIX''@/$(GL_GNULIB_SPRINTF_POSIX)/g' \
+ -e 's/@''GNULIB_STDIO_H_NONBLOCKING''@/$(GL_GNULIB_STDIO_H_NONBLOCKING)/g' \
+ -e 's/@''GNULIB_STDIO_H_SIGPIPE''@/$(GL_GNULIB_STDIO_H_SIGPIPE)/g' \
+ -e 's/@''GNULIB_TMPFILE''@/$(GL_GNULIB_TMPFILE)/g' \
+ -e 's/@''GNULIB_VASPRINTF''@/$(GL_GNULIB_VASPRINTF)/g' \
+ -e 's/@''GNULIB_VDPRINTF''@/$(GL_GNULIB_VDPRINTF)/g' \
+ -e 's/@''GNULIB_VFPRINTF''@/$(GL_GNULIB_VFPRINTF)/g' \
+ -e 's/@''GNULIB_VFPRINTF_POSIX''@/$(GL_GNULIB_VFPRINTF_POSIX)/g' \
+ -e 's/@''GNULIB_VFSCANF''@/$(GL_GNULIB_VFSCANF)/g' \
+ -e 's/@''GNULIB_VSCANF''@/$(GL_GNULIB_VSCANF)/g' \
+ -e 's/@''GNULIB_VPRINTF''@/$(GL_GNULIB_VPRINTF)/g' \
+ -e 's/@''GNULIB_VPRINTF_POSIX''@/$(GL_GNULIB_VPRINTF_POSIX)/g' \
+ -e 's/@''GNULIB_VSNPRINTF''@/$(GL_GNULIB_VSNPRINTF)/g' \
+ -e 's/@''GNULIB_VSPRINTF_POSIX''@/$(GL_GNULIB_VSPRINTF_POSIX)/g' \
+ -e 's/@''GNULIB_MDA_FCLOSEALL''@/$(GL_GNULIB_MDA_FCLOSEALL)/g' \
+ -e 's/@''GNULIB_MDA_FDOPEN''@/$(GL_GNULIB_MDA_FDOPEN)/g' \
+ -e 's/@''GNULIB_MDA_FILENO''@/$(GL_GNULIB_MDA_FILENO)/g' \
+ -e 's/@''GNULIB_MDA_GETW''@/$(GL_GNULIB_MDA_GETW)/g' \
+ -e 's/@''GNULIB_MDA_PUTW''@/$(GL_GNULIB_MDA_PUTW)/g' \
+ -e 's/@''GNULIB_MDA_TEMPNAM''@/$(GL_GNULIB_MDA_TEMPNAM)/g' \
< $(srcdir)/stdio.in.h | \
sed -e 's|@''HAVE_DECL_FCLOSEALL''@|$(HAVE_DECL_FCLOSEALL)|g' \
-e 's|@''HAVE_DECL_FPURGE''@|$(HAVE_DECL_FPURGE)|g' \
@@ -3271,6 +5423,7 @@ stdio.h: stdio.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H)
-e 's|@''REPLACE_FDOPEN''@|$(REPLACE_FDOPEN)|g' \
-e 's|@''REPLACE_FFLUSH''@|$(REPLACE_FFLUSH)|g' \
-e 's|@''REPLACE_FOPEN''@|$(REPLACE_FOPEN)|g' \
+ -e 's|@''REPLACE_FOPEN_FOR_FOPEN_GNU''@|$(REPLACE_FOPEN_FOR_FOPEN_GNU)|g' \
-e 's|@''REPLACE_FPRINTF''@|$(REPLACE_FPRINTF)|g' \
-e 's|@''REPLACE_FPURGE''@|$(REPLACE_FPURGE)|g' \
-e 's|@''REPLACE_FREOPEN''@|$(REPLACE_FREOPEN)|g' \
@@ -3301,64 +5454,68 @@ stdio.h: stdio.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H)
-e 's|@''ASM_SYMBOL_PREFIX''@|$(ASM_SYMBOL_PREFIX)|g' \
-e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
- -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
- } > $@-t && \
- mv $@-t $@
+ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+ > $@-t
+ $(AM_V_at)mv $@-t $@
# We need the following in order to create <stdlib.h> when the system
# doesn't have one that works with the given compiler.
stdlib.h: stdlib.in.h $(top_builddir)/config.status $(CXXDEFS_H) \
$(_NORETURN_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
- $(AM_V_GEN)rm -f $@-t $@ && \
- { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
- sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_STDLIB_H''@|$(NEXT_STDLIB_H)|g' \
- -e 's/@''GNULIB__EXIT''@/$(GNULIB__EXIT)/g' \
- -e 's/@''GNULIB_ALIGNED_ALLOC''@/$(GNULIB_ALIGNED_ALLOC)/g' \
- -e 's/@''GNULIB_ATOLL''@/$(GNULIB_ATOLL)/g' \
- -e 's/@''GNULIB_CALLOC_POSIX''@/$(GNULIB_CALLOC_POSIX)/g' \
- -e 's/@''GNULIB_CANONICALIZE_FILE_NAME''@/$(GNULIB_CANONICALIZE_FILE_NAME)/g' \
- -e 's/@''GNULIB_FREE_POSIX''@/$(GNULIB_FREE_POSIX)/g' \
- -e 's/@''GNULIB_GETLOADAVG''@/$(GNULIB_GETLOADAVG)/g' \
- -e 's/@''GNULIB_GETSUBOPT''@/$(GNULIB_GETSUBOPT)/g' \
- -e 's/@''GNULIB_GRANTPT''@/$(GNULIB_GRANTPT)/g' \
- -e 's/@''GNULIB_MALLOC_POSIX''@/$(GNULIB_MALLOC_POSIX)/g' \
- -e 's/@''GNULIB_MBTOWC''@/$(GNULIB_MBTOWC)/g' \
- -e 's/@''GNULIB_MKDTEMP''@/$(GNULIB_MKDTEMP)/g' \
- -e 's/@''GNULIB_MKOSTEMP''@/$(GNULIB_MKOSTEMP)/g' \
- -e 's/@''GNULIB_MKOSTEMPS''@/$(GNULIB_MKOSTEMPS)/g' \
- -e 's/@''GNULIB_MKSTEMP''@/$(GNULIB_MKSTEMP)/g' \
- -e 's/@''GNULIB_MKSTEMPS''@/$(GNULIB_MKSTEMPS)/g' \
- -e 's/@''GNULIB_POSIX_MEMALIGN''@/$(GNULIB_POSIX_MEMALIGN)/g' \
- -e 's/@''GNULIB_POSIX_OPENPT''@/$(GNULIB_POSIX_OPENPT)/g' \
- -e 's/@''GNULIB_PTSNAME''@/$(GNULIB_PTSNAME)/g' \
- -e 's/@''GNULIB_PTSNAME_R''@/$(GNULIB_PTSNAME_R)/g' \
- -e 's/@''GNULIB_PUTENV''@/$(GNULIB_PUTENV)/g' \
- -e 's/@''GNULIB_QSORT_R''@/$(GNULIB_QSORT_R)/g' \
- -e 's/@''GNULIB_RANDOM''@/$(GNULIB_RANDOM)/g' \
- -e 's/@''GNULIB_RANDOM_R''@/$(GNULIB_RANDOM_R)/g' \
- -e 's/@''GNULIB_REALLOC_POSIX''@/$(GNULIB_REALLOC_POSIX)/g' \
- -e 's/@''GNULIB_REALLOCARRAY''@/$(GNULIB_REALLOCARRAY)/g' \
- -e 's/@''GNULIB_REALPATH''@/$(GNULIB_REALPATH)/g' \
- -e 's/@''GNULIB_RPMATCH''@/$(GNULIB_RPMATCH)/g' \
- -e 's/@''GNULIB_SECURE_GETENV''@/$(GNULIB_SECURE_GETENV)/g' \
- -e 's/@''GNULIB_SETENV''@/$(GNULIB_SETENV)/g' \
- -e 's/@''GNULIB_STRTOD''@/$(GNULIB_STRTOD)/g' \
- -e 's/@''GNULIB_STRTOLD''@/$(GNULIB_STRTOLD)/g' \
- -e 's/@''GNULIB_STRTOLL''@/$(GNULIB_STRTOLL)/g' \
- -e 's/@''GNULIB_STRTOULL''@/$(GNULIB_STRTOULL)/g' \
- -e 's/@''GNULIB_SYSTEM_POSIX''@/$(GNULIB_SYSTEM_POSIX)/g' \
- -e 's/@''GNULIB_UNLOCKPT''@/$(GNULIB_UNLOCKPT)/g' \
- -e 's/@''GNULIB_UNSETENV''@/$(GNULIB_UNSETENV)/g' \
- -e 's/@''GNULIB_WCTOMB''@/$(GNULIB_WCTOMB)/g' \
- -e 's/@''GNULIB_MDA_ECVT''@/$(GNULIB_MDA_ECVT)/g' \
- -e 's/@''GNULIB_MDA_FCVT''@/$(GNULIB_MDA_FCVT)/g' \
- -e 's/@''GNULIB_MDA_GCVT''@/$(GNULIB_MDA_GCVT)/g' \
- -e 's/@''GNULIB_MDA_MKTEMP''@/$(GNULIB_MDA_MKTEMP)/g' \
- -e 's/@''GNULIB_MDA_PUTENV''@/$(GNULIB_MDA_PUTENV)/g' \
+ -e 's/@''GNULIB__EXIT''@/$(GL_GNULIB__EXIT)/g' \
+ -e 's/@''GNULIB_ALIGNED_ALLOC''@/$(GL_GNULIB_ALIGNED_ALLOC)/g' \
+ -e 's/@''GNULIB_ATOLL''@/$(GL_GNULIB_ATOLL)/g' \
+ -e 's/@''GNULIB_CALLOC_GNU''@/$(GL_GNULIB_CALLOC_GNU)/g' \
+ -e 's/@''GNULIB_CALLOC_POSIX''@/$(GL_GNULIB_CALLOC_POSIX)/g' \
+ -e 's/@''GNULIB_CANONICALIZE_FILE_NAME''@/$(GL_GNULIB_CANONICALIZE_FILE_NAME)/g' \
+ -e 's/@''GNULIB_FREE_POSIX''@/$(GL_GNULIB_FREE_POSIX)/g' \
+ -e 's/@''GNULIB_GETLOADAVG''@/$(GL_GNULIB_GETLOADAVG)/g' \
+ -e 's/@''GNULIB_GETSUBOPT''@/$(GL_GNULIB_GETSUBOPT)/g' \
+ -e 's/@''GNULIB_GRANTPT''@/$(GL_GNULIB_GRANTPT)/g' \
+ -e 's/@''GNULIB_MALLOC_GNU''@/$(GL_GNULIB_MALLOC_GNU)/g' \
+ -e 's/@''GNULIB_MALLOC_POSIX''@/$(GL_GNULIB_MALLOC_POSIX)/g' \
+ -e 's/@''GNULIB_MBTOWC''@/$(GL_GNULIB_MBTOWC)/g' \
+ -e 's/@''GNULIB_MKDTEMP''@/$(GL_GNULIB_MKDTEMP)/g' \
+ -e 's/@''GNULIB_MKOSTEMP''@/$(GL_GNULIB_MKOSTEMP)/g' \
+ -e 's/@''GNULIB_MKOSTEMPS''@/$(GL_GNULIB_MKOSTEMPS)/g' \
+ -e 's/@''GNULIB_MKSTEMP''@/$(GL_GNULIB_MKSTEMP)/g' \
+ -e 's/@''GNULIB_MKSTEMPS''@/$(GL_GNULIB_MKSTEMPS)/g' \
+ -e 's/@''GNULIB_POSIX_MEMALIGN''@/$(GL_GNULIB_POSIX_MEMALIGN)/g' \
+ -e 's/@''GNULIB_POSIX_OPENPT''@/$(GL_GNULIB_POSIX_OPENPT)/g' \
+ -e 's/@''GNULIB_PTSNAME''@/$(GL_GNULIB_PTSNAME)/g' \
+ -e 's/@''GNULIB_PTSNAME_R''@/$(GL_GNULIB_PTSNAME_R)/g' \
+ -e 's/@''GNULIB_PUTENV''@/$(GL_GNULIB_PUTENV)/g' \
+ -e 's/@''GNULIB_QSORT_R''@/$(GL_GNULIB_QSORT_R)/g' \
+ -e 's/@''GNULIB_RANDOM''@/$(GL_GNULIB_RANDOM)/g' \
+ -e 's/@''GNULIB_RANDOM_R''@/$(GL_GNULIB_RANDOM_R)/g' \
+ -e 's/@''GNULIB_REALLOC_GNU''@/$(GL_GNULIB_REALLOC_GNU)/g' \
+ -e 's/@''GNULIB_REALLOC_POSIX''@/$(GL_GNULIB_REALLOC_POSIX)/g' \
+ -e 's/@''GNULIB_REALLOCARRAY''@/$(GL_GNULIB_REALLOCARRAY)/g' \
+ -e 's/@''GNULIB_REALPATH''@/$(GL_GNULIB_REALPATH)/g' \
+ -e 's/@''GNULIB_RPMATCH''@/$(GL_GNULIB_RPMATCH)/g' \
+ -e 's/@''GNULIB_SECURE_GETENV''@/$(GL_GNULIB_SECURE_GETENV)/g' \
+ -e 's/@''GNULIB_SETENV''@/$(GL_GNULIB_SETENV)/g' \
+ -e 's/@''GNULIB_STRTOD''@/$(GL_GNULIB_STRTOD)/g' \
+ -e 's/@''GNULIB_STRTOL''@/$(GL_GNULIB_STRTOL)/g' \
+ -e 's/@''GNULIB_STRTOLD''@/$(GL_GNULIB_STRTOLD)/g' \
+ -e 's/@''GNULIB_STRTOLL''@/$(GL_GNULIB_STRTOLL)/g' \
+ -e 's/@''GNULIB_STRTOUL''@/$(GL_GNULIB_STRTOUL)/g' \
+ -e 's/@''GNULIB_STRTOULL''@/$(GL_GNULIB_STRTOULL)/g' \
+ -e 's/@''GNULIB_SYSTEM_POSIX''@/$(GL_GNULIB_SYSTEM_POSIX)/g' \
+ -e 's/@''GNULIB_UNLOCKPT''@/$(GL_GNULIB_UNLOCKPT)/g' \
+ -e 's/@''GNULIB_UNSETENV''@/$(GL_GNULIB_UNSETENV)/g' \
+ -e 's/@''GNULIB_WCTOMB''@/$(GL_GNULIB_WCTOMB)/g' \
+ -e 's/@''GNULIB_MDA_ECVT''@/$(GL_GNULIB_MDA_ECVT)/g' \
+ -e 's/@''GNULIB_MDA_FCVT''@/$(GL_GNULIB_MDA_FCVT)/g' \
+ -e 's/@''GNULIB_MDA_GCVT''@/$(GL_GNULIB_MDA_GCVT)/g' \
+ -e 's/@''GNULIB_MDA_MKTEMP''@/$(GL_GNULIB_MDA_MKTEMP)/g' \
+ -e 's/@''GNULIB_MDA_PUTENV''@/$(GL_GNULIB_MDA_PUTENV)/g' \
< $(srcdir)/stdlib.in.h | \
sed -e 's|@''HAVE__EXIT''@|$(HAVE__EXIT)|g' \
-e 's|@''HAVE_ALIGNED_ALLOC''@|$(HAVE_ALIGNED_ALLOC)|g' \
@@ -3394,19 +5551,23 @@ stdlib.h: stdlib.in.h $(top_builddir)/config.status $(CXXDEFS_H) \
-e 's|@''HAVE_SETSTATE''@|$(HAVE_SETSTATE)|g' \
-e 's|@''HAVE_DECL_SETSTATE''@|$(HAVE_DECL_SETSTATE)|g' \
-e 's|@''HAVE_STRTOD''@|$(HAVE_STRTOD)|g' \
+ -e 's|@''HAVE_STRTOL''@|$(HAVE_STRTOL)|g' \
-e 's|@''HAVE_STRTOLD''@|$(HAVE_STRTOLD)|g' \
-e 's|@''HAVE_STRTOLL''@|$(HAVE_STRTOLL)|g' \
+ -e 's|@''HAVE_STRTOUL''@|$(HAVE_STRTOUL)|g' \
-e 's|@''HAVE_STRTOULL''@|$(HAVE_STRTOULL)|g' \
-e 's|@''HAVE_STRUCT_RANDOM_DATA''@|$(HAVE_STRUCT_RANDOM_DATA)|g' \
-e 's|@''HAVE_SYS_LOADAVG_H''@|$(HAVE_SYS_LOADAVG_H)|g' \
-e 's|@''HAVE_UNLOCKPT''@|$(HAVE_UNLOCKPT)|g' \
-e 's|@''HAVE_DECL_UNSETENV''@|$(HAVE_DECL_UNSETENV)|g' \
-e 's|@''REPLACE_ALIGNED_ALLOC''@|$(REPLACE_ALIGNED_ALLOC)|g' \
- -e 's|@''REPLACE_CALLOC''@|$(REPLACE_CALLOC)|g' \
+ -e 's|@''REPLACE_CALLOC_FOR_CALLOC_GNU''@|$(REPLACE_CALLOC_FOR_CALLOC_GNU)|g' \
+ -e 's|@''REPLACE_CALLOC_FOR_CALLOC_POSIX''@|$(REPLACE_CALLOC_FOR_CALLOC_POSIX)|g' \
-e 's|@''REPLACE_CANONICALIZE_FILE_NAME''@|$(REPLACE_CANONICALIZE_FILE_NAME)|g' \
-e 's|@''REPLACE_FREE''@|$(REPLACE_FREE)|g' \
-e 's|@''REPLACE_INITSTATE''@|$(REPLACE_INITSTATE)|g' \
- -e 's|@''REPLACE_MALLOC''@|$(REPLACE_MALLOC)|g' \
+ -e 's|@''REPLACE_MALLOC_FOR_MALLOC_GNU''@|$(REPLACE_MALLOC_FOR_MALLOC_GNU)|g' \
+ -e 's|@''REPLACE_MALLOC_FOR_MALLOC_POSIX''@|$(REPLACE_MALLOC_FOR_MALLOC_POSIX)|g' \
-e 's|@''REPLACE_MBTOWC''@|$(REPLACE_MBTOWC)|g' \
-e 's|@''REPLACE_MKSTEMP''@|$(REPLACE_MKSTEMP)|g' \
-e 's|@''REPLACE_POSIX_MEMALIGN''@|$(REPLACE_POSIX_MEMALIGN)|g' \
@@ -3416,74 +5577,80 @@ stdlib.h: stdlib.in.h $(top_builddir)/config.status $(CXXDEFS_H) \
-e 's|@''REPLACE_QSORT_R''@|$(REPLACE_QSORT_R)|g' \
-e 's|@''REPLACE_RANDOM''@|$(REPLACE_RANDOM)|g' \
-e 's|@''REPLACE_RANDOM_R''@|$(REPLACE_RANDOM_R)|g' \
- -e 's|@''REPLACE_REALLOC''@|$(REPLACE_REALLOC)|g' \
+ -e 's|@''REPLACE_REALLOC_FOR_REALLOC_GNU''@|$(REPLACE_REALLOC_FOR_REALLOC_GNU)|g' \
+ -e 's|@''REPLACE_REALLOC_FOR_REALLOC_POSIX''@|$(REPLACE_REALLOC_FOR_REALLOC_POSIX)|g' \
+ -e 's|@''REPLACE_REALLOCARRAY''@|$(REPLACE_REALLOCARRAY)|g' \
-e 's|@''REPLACE_REALPATH''@|$(REPLACE_REALPATH)|g' \
-e 's|@''REPLACE_SETENV''@|$(REPLACE_SETENV)|g' \
-e 's|@''REPLACE_SETSTATE''@|$(REPLACE_SETSTATE)|g' \
-e 's|@''REPLACE_STRTOD''@|$(REPLACE_STRTOD)|g' \
+ -e 's|@''REPLACE_STRTOL''@|$(REPLACE_STRTOL)|g' \
-e 's|@''REPLACE_STRTOLD''@|$(REPLACE_STRTOLD)|g' \
+ -e 's|@''REPLACE_STRTOLL''@|$(REPLACE_STRTOLL)|g' \
+ -e 's|@''REPLACE_STRTOUL''@|$(REPLACE_STRTOUL)|g' \
+ -e 's|@''REPLACE_STRTOULL''@|$(REPLACE_STRTOULL)|g' \
-e 's|@''REPLACE_UNSETENV''@|$(REPLACE_UNSETENV)|g' \
-e 's|@''REPLACE_WCTOMB''@|$(REPLACE_WCTOMB)|g' \
-e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-e '/definition of _Noreturn/r $(_NORETURN_H)' \
-e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
- -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
- } > $@-t && \
- mv $@-t $@
+ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+ > $@-t
+ $(AM_V_at)mv $@-t $@
# We need the following in order to create <string.h> when the system
# doesn't have one that works with the given compiler.
string.h: string.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
- $(AM_V_GEN)rm -f $@-t $@ && \
- { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
- sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \
- -e 's/@''GNULIB_EXPLICIT_BZERO''@/$(GNULIB_EXPLICIT_BZERO)/g' \
- -e 's/@''GNULIB_FFSL''@/$(GNULIB_FFSL)/g' \
- -e 's/@''GNULIB_FFSLL''@/$(GNULIB_FFSLL)/g' \
- -e 's/@''GNULIB_MBSLEN''@/$(GNULIB_MBSLEN)/g' \
- -e 's/@''GNULIB_MBSNLEN''@/$(GNULIB_MBSNLEN)/g' \
- -e 's/@''GNULIB_MBSCHR''@/$(GNULIB_MBSCHR)/g' \
- -e 's/@''GNULIB_MBSRCHR''@/$(GNULIB_MBSRCHR)/g' \
- -e 's/@''GNULIB_MBSSTR''@/$(GNULIB_MBSSTR)/g' \
- -e 's/@''GNULIB_MBSCASECMP''@/$(GNULIB_MBSCASECMP)/g' \
- -e 's/@''GNULIB_MBSNCASECMP''@/$(GNULIB_MBSNCASECMP)/g' \
- -e 's/@''GNULIB_MBSPCASECMP''@/$(GNULIB_MBSPCASECMP)/g' \
- -e 's/@''GNULIB_MBSCASESTR''@/$(GNULIB_MBSCASESTR)/g' \
- -e 's/@''GNULIB_MBSCSPN''@/$(GNULIB_MBSCSPN)/g' \
- -e 's/@''GNULIB_MBSPBRK''@/$(GNULIB_MBSPBRK)/g' \
- -e 's/@''GNULIB_MBSSPN''@/$(GNULIB_MBSSPN)/g' \
- -e 's/@''GNULIB_MBSSEP''@/$(GNULIB_MBSSEP)/g' \
- -e 's/@''GNULIB_MBSTOK_R''@/$(GNULIB_MBSTOK_R)/g' \
- -e 's/@''GNULIB_MEMCHR''@/$(GNULIB_MEMCHR)/g' \
- -e 's/@''GNULIB_MEMMEM''@/$(GNULIB_MEMMEM)/g' \
- -e 's/@''GNULIB_MEMPCPY''@/$(GNULIB_MEMPCPY)/g' \
- -e 's/@''GNULIB_MEMRCHR''@/$(GNULIB_MEMRCHR)/g' \
- -e 's/@''GNULIB_RAWMEMCHR''@/$(GNULIB_RAWMEMCHR)/g' \
- -e 's/@''GNULIB_STPCPY''@/$(GNULIB_STPCPY)/g' \
- -e 's/@''GNULIB_STPNCPY''@/$(GNULIB_STPNCPY)/g' \
- -e 's/@''GNULIB_STRCHRNUL''@/$(GNULIB_STRCHRNUL)/g' \
- -e 's/@''GNULIB_STRDUP''@/$(GNULIB_STRDUP)/g' \
- -e 's/@''GNULIB_STRNCAT''@/$(GNULIB_STRNCAT)/g' \
- -e 's/@''GNULIB_STRNDUP''@/$(GNULIB_STRNDUP)/g' \
- -e 's/@''GNULIB_STRNLEN''@/$(GNULIB_STRNLEN)/g' \
- -e 's/@''GNULIB_STRPBRK''@/$(GNULIB_STRPBRK)/g' \
- -e 's/@''GNULIB_STRSEP''@/$(GNULIB_STRSEP)/g' \
- -e 's/@''GNULIB_STRSTR''@/$(GNULIB_STRSTR)/g' \
- -e 's/@''GNULIB_STRCASESTR''@/$(GNULIB_STRCASESTR)/g' \
- -e 's/@''GNULIB_STRTOK_R''@/$(GNULIB_STRTOK_R)/g' \
- -e 's/@''GNULIB_STRERROR''@/$(GNULIB_STRERROR)/g' \
- -e 's/@''GNULIB_STRERROR_R''@/$(GNULIB_STRERROR_R)/g' \
- -e 's/@''GNULIB_STRERRORNAME_NP''@/$(GNULIB_STRERRORNAME_NP)/g' \
- -e 's/@''GNULIB_SIGABBREV_NP''@/$(GNULIB_SIGABBREV_NP)/g' \
- -e 's/@''GNULIB_SIGDESCR_NP''@/$(GNULIB_SIGDESCR_NP)/g' \
- -e 's/@''GNULIB_STRSIGNAL''@/$(GNULIB_STRSIGNAL)/g' \
- -e 's/@''GNULIB_STRVERSCMP''@/$(GNULIB_STRVERSCMP)/g' \
- -e 's/@''GNULIB_MDA_MEMCCPY''@/$(GNULIB_MDA_MEMCCPY)/g' \
- -e 's/@''GNULIB_MDA_STRDUP''@/$(GNULIB_MDA_STRDUP)/g' \
+ -e 's/@''GNULIB_EXPLICIT_BZERO''@/$(GL_GNULIB_EXPLICIT_BZERO)/g' \
+ -e 's/@''GNULIB_FFSL''@/$(GL_GNULIB_FFSL)/g' \
+ -e 's/@''GNULIB_FFSLL''@/$(GL_GNULIB_FFSLL)/g' \
+ -e 's/@''GNULIB_MBSLEN''@/$(GL_GNULIB_MBSLEN)/g' \
+ -e 's/@''GNULIB_MBSNLEN''@/$(GL_GNULIB_MBSNLEN)/g' \
+ -e 's/@''GNULIB_MBSCHR''@/$(GL_GNULIB_MBSCHR)/g' \
+ -e 's/@''GNULIB_MBSRCHR''@/$(GL_GNULIB_MBSRCHR)/g' \
+ -e 's/@''GNULIB_MBSSTR''@/$(GL_GNULIB_MBSSTR)/g' \
+ -e 's/@''GNULIB_MBSCASECMP''@/$(GL_GNULIB_MBSCASECMP)/g' \
+ -e 's/@''GNULIB_MBSNCASECMP''@/$(GL_GNULIB_MBSNCASECMP)/g' \
+ -e 's/@''GNULIB_MBSPCASECMP''@/$(GL_GNULIB_MBSPCASECMP)/g' \
+ -e 's/@''GNULIB_MBSCASESTR''@/$(GL_GNULIB_MBSCASESTR)/g' \
+ -e 's/@''GNULIB_MBSCSPN''@/$(GL_GNULIB_MBSCSPN)/g' \
+ -e 's/@''GNULIB_MBSPBRK''@/$(GL_GNULIB_MBSPBRK)/g' \
+ -e 's/@''GNULIB_MBSSPN''@/$(GL_GNULIB_MBSSPN)/g' \
+ -e 's/@''GNULIB_MBSSEP''@/$(GL_GNULIB_MBSSEP)/g' \
+ -e 's/@''GNULIB_MBSTOK_R''@/$(GL_GNULIB_MBSTOK_R)/g' \
+ -e 's/@''GNULIB_MEMCHR''@/$(GL_GNULIB_MEMCHR)/g' \
+ -e 's/@''GNULIB_MEMMEM''@/$(GL_GNULIB_MEMMEM)/g' \
+ -e 's/@''GNULIB_MEMPCPY''@/$(GL_GNULIB_MEMPCPY)/g' \
+ -e 's/@''GNULIB_MEMRCHR''@/$(GL_GNULIB_MEMRCHR)/g' \
+ -e 's/@''GNULIB_RAWMEMCHR''@/$(GL_GNULIB_RAWMEMCHR)/g' \
+ -e 's/@''GNULIB_STPCPY''@/$(GL_GNULIB_STPCPY)/g' \
+ -e 's/@''GNULIB_STPNCPY''@/$(GL_GNULIB_STPNCPY)/g' \
+ -e 's/@''GNULIB_STRCHRNUL''@/$(GL_GNULIB_STRCHRNUL)/g' \
+ -e 's/@''GNULIB_STRDUP''@/$(GL_GNULIB_STRDUP)/g' \
+ -e 's/@''GNULIB_STRNCAT''@/$(GL_GNULIB_STRNCAT)/g' \
+ -e 's/@''GNULIB_STRNDUP''@/$(GL_GNULIB_STRNDUP)/g' \
+ -e 's/@''GNULIB_STRNLEN''@/$(GL_GNULIB_STRNLEN)/g' \
+ -e 's/@''GNULIB_STRPBRK''@/$(GL_GNULIB_STRPBRK)/g' \
+ -e 's/@''GNULIB_STRSEP''@/$(GL_GNULIB_STRSEP)/g' \
+ -e 's/@''GNULIB_STRSTR''@/$(GL_GNULIB_STRSTR)/g' \
+ -e 's/@''GNULIB_STRCASESTR''@/$(GL_GNULIB_STRCASESTR)/g' \
+ -e 's/@''GNULIB_STRTOK_R''@/$(GL_GNULIB_STRTOK_R)/g' \
+ -e 's/@''GNULIB_STRERROR''@/$(GL_GNULIB_STRERROR)/g' \
+ -e 's/@''GNULIB_STRERROR_R''@/$(GL_GNULIB_STRERROR_R)/g' \
+ -e 's/@''GNULIB_STRERRORNAME_NP''@/$(GL_GNULIB_STRERRORNAME_NP)/g' \
+ -e 's/@''GNULIB_SIGABBREV_NP''@/$(GL_GNULIB_SIGABBREV_NP)/g' \
+ -e 's/@''GNULIB_SIGDESCR_NP''@/$(GL_GNULIB_SIGDESCR_NP)/g' \
+ -e 's/@''GNULIB_STRSIGNAL''@/$(GL_GNULIB_STRSIGNAL)/g' \
+ -e 's/@''GNULIB_STRVERSCMP''@/$(GL_GNULIB_STRVERSCMP)/g' \
+ -e 's/@''GNULIB_MDA_MEMCCPY''@/$(GL_GNULIB_MDA_MEMCCPY)/g' \
+ -e 's/@''GNULIB_MDA_STRDUP''@/$(GL_GNULIB_MDA_STRDUP)/g' \
+ -e 's/@''GNULIB_FREE_POSIX''@/$(GL_GNULIB_FREE_POSIX)/g' \
< $(srcdir)/string.in.h | \
sed -e 's|@''HAVE_EXPLICIT_BZERO''@|$(HAVE_EXPLICIT_BZERO)|g' \
-e 's|@''HAVE_FFSL''@|$(HAVE_FFSL)|g' \
@@ -3512,6 +5679,7 @@ string.h: string.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H
-e 's|@''REPLACE_FFSLL''@|$(REPLACE_FFSLL)|g' \
-e 's|@''REPLACE_MEMCHR''@|$(REPLACE_MEMCHR)|g' \
-e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \
+ -e 's|@''REPLACE_FREE''@|$(REPLACE_FREE)|g' \
-e 's|@''REPLACE_STPNCPY''@|$(REPLACE_STPNCPY)|g' \
-e 's|@''REPLACE_STRCHRNUL''@|$(REPLACE_STRCHRNUL)|g' \
-e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|g' \
@@ -3528,107 +5696,99 @@ string.h: string.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H
-e 's|@''UNDEFINE_STRTOK_R''@|$(UNDEFINE_STRTOK_R)|g' \
-e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
- -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
- < $(srcdir)/string.in.h; \
- } > $@-t && \
- mv $@-t $@
+ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+ > $@-t
+ $(AM_V_at)mv $@-t $@
# We need the following in order to create <strings.h> when the system
# doesn't have one that works with the given compiler.
strings.h: strings.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(ARG_NONNULL_H)
- $(AM_V_GEN)rm -f $@-t $@ && \
- { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
- sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's|@''HAVE_STRINGS_H''@|$(HAVE_STRINGS_H)|g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_STRINGS_H''@|$(NEXT_STRINGS_H)|g' \
- -e 's/@''GNULIB_FFS''@/$(GNULIB_FFS)/g' \
+ -e 's/@''GNULIB_FFS''@/$(GL_GNULIB_FFS)/g' \
-e 's|@''HAVE_FFS''@|$(HAVE_FFS)|g' \
-e 's|@''HAVE_STRCASECMP''@|$(HAVE_STRCASECMP)|g' \
-e 's|@''HAVE_DECL_STRNCASECMP''@|$(HAVE_DECL_STRNCASECMP)|g' \
-e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
-e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
- < $(srcdir)/strings.in.h; \
- } > $@-t && \
- mv $@-t $@
+ $(srcdir)/strings.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
# We need the following in order to create <sys/random.h> when the system
# doesn't have one.
sys/random.h: sys_random.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
- $(AM_V_at)$(MKDIR_P) sys
- $(AM_V_GEN)rm -f $@-t $@ && \
- { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
- sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+ $(AM_V_GEN)$(MKDIR_P) 'sys'
+ $(AM_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_SYS_RANDOM_H''@|$(NEXT_SYS_RANDOM_H)|g' \
-e 's|@''HAVE_SYS_RANDOM_H''@|$(HAVE_SYS_RANDOM_H)|g' \
- -e 's/@''GNULIB_GETRANDOM''@/$(GNULIB_GETRANDOM)/g' \
+ -e 's/@''GNULIB_GETRANDOM''@/$(GL_GNULIB_GETRANDOM)/g' \
-e 's/@''HAVE_GETRANDOM''@/$(HAVE_GETRANDOM)/g' \
-e 's/@''REPLACE_GETRANDOM''@/$(REPLACE_GETRANDOM)/g' \
-e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
-e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
- < $(srcdir)/sys_random.in.h; \
- } > $@-t && \
- mv -f $@-t $@
+ $(srcdir)/sys_random.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
# We need the following in order to create <sys/select.h> when the system
# doesn't have one that works with the given compiler.
sys/select.h: sys_select.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H)
- $(AM_V_at)$(MKDIR_P) sys
- $(AM_V_GEN)rm -f $@-t $@ && \
- { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
- sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+ $(AM_V_GEN)$(MKDIR_P) 'sys'
+ $(AM_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_SYS_SELECT_H''@|$(NEXT_SYS_SELECT_H)|g' \
-e 's|@''HAVE_SYS_SELECT_H''@|$(HAVE_SYS_SELECT_H)|g' \
- -e 's/@''GNULIB_PSELECT''@/$(GNULIB_PSELECT)/g' \
- -e 's/@''GNULIB_SELECT''@/$(GNULIB_SELECT)/g' \
+ -e 's/@''GNULIB_PSELECT''@/$(GL_GNULIB_PSELECT)/g' \
+ -e 's/@''GNULIB_SELECT''@/$(GL_GNULIB_SELECT)/g' \
-e 's|@''HAVE_WINSOCK2_H''@|$(HAVE_WINSOCK2_H)|g' \
-e 's|@''HAVE_PSELECT''@|$(HAVE_PSELECT)|g' \
-e 's|@''REPLACE_PSELECT''@|$(REPLACE_PSELECT)|g' \
-e 's|@''REPLACE_SELECT''@|$(REPLACE_SELECT)|g' \
-e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
- < $(srcdir)/sys_select.in.h; \
- } > $@-t && \
- mv $@-t $@
+ $(srcdir)/sys_select.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
# We need the following in order to create <sys/socket.h> when the system
# doesn't have one that works with the given compiler.
sys/socket.h: sys_socket.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(ARG_NONNULL_H)
- $(AM_V_at)$(MKDIR_P) sys
- $(AM_V_GEN)rm -f $@-t $@ && \
- { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
- sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+ $(AM_V_GEN)$(MKDIR_P) 'sys'
+ $(AM_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_SYS_SOCKET_H''@|$(NEXT_SYS_SOCKET_H)|g' \
-e 's|@''HAVE_SYS_SOCKET_H''@|$(HAVE_SYS_SOCKET_H)|g' \
- -e 's/@''GNULIB_CLOSE''@/$(GNULIB_CLOSE)/g' \
- -e 's/@''GNULIB_SOCKET''@/$(GNULIB_SOCKET)/g' \
- -e 's/@''GNULIB_CONNECT''@/$(GNULIB_CONNECT)/g' \
- -e 's/@''GNULIB_ACCEPT''@/$(GNULIB_ACCEPT)/g' \
- -e 's/@''GNULIB_BIND''@/$(GNULIB_BIND)/g' \
- -e 's/@''GNULIB_GETPEERNAME''@/$(GNULIB_GETPEERNAME)/g' \
- -e 's/@''GNULIB_GETSOCKNAME''@/$(GNULIB_GETSOCKNAME)/g' \
- -e 's/@''GNULIB_GETSOCKOPT''@/$(GNULIB_GETSOCKOPT)/g' \
- -e 's/@''GNULIB_LISTEN''@/$(GNULIB_LISTEN)/g' \
- -e 's/@''GNULIB_RECV''@/$(GNULIB_RECV)/g' \
- -e 's/@''GNULIB_SEND''@/$(GNULIB_SEND)/g' \
- -e 's/@''GNULIB_RECVFROM''@/$(GNULIB_RECVFROM)/g' \
- -e 's/@''GNULIB_SENDTO''@/$(GNULIB_SENDTO)/g' \
- -e 's/@''GNULIB_SETSOCKOPT''@/$(GNULIB_SETSOCKOPT)/g' \
- -e 's/@''GNULIB_SHUTDOWN''@/$(GNULIB_SHUTDOWN)/g' \
- -e 's/@''GNULIB_ACCEPT4''@/$(GNULIB_ACCEPT4)/g' \
+ -e 's/@''GNULIB_CLOSE''@/$(GL_GNULIB_CLOSE)/g' \
+ -e 's/@''GNULIB_SOCKET''@/$(GL_GNULIB_SOCKET)/g' \
+ -e 's/@''GNULIB_CONNECT''@/$(GL_GNULIB_CONNECT)/g' \
+ -e 's/@''GNULIB_ACCEPT''@/$(GL_GNULIB_ACCEPT)/g' \
+ -e 's/@''GNULIB_BIND''@/$(GL_GNULIB_BIND)/g' \
+ -e 's/@''GNULIB_GETPEERNAME''@/$(GL_GNULIB_GETPEERNAME)/g' \
+ -e 's/@''GNULIB_GETSOCKNAME''@/$(GL_GNULIB_GETSOCKNAME)/g' \
+ -e 's/@''GNULIB_GETSOCKOPT''@/$(GL_GNULIB_GETSOCKOPT)/g' \
+ -e 's/@''GNULIB_LISTEN''@/$(GL_GNULIB_LISTEN)/g' \
+ -e 's/@''GNULIB_RECV''@/$(GL_GNULIB_RECV)/g' \
+ -e 's/@''GNULIB_SEND''@/$(GL_GNULIB_SEND)/g' \
+ -e 's/@''GNULIB_RECVFROM''@/$(GL_GNULIB_RECVFROM)/g' \
+ -e 's/@''GNULIB_SENDTO''@/$(GL_GNULIB_SENDTO)/g' \
+ -e 's/@''GNULIB_SETSOCKOPT''@/$(GL_GNULIB_SETSOCKOPT)/g' \
+ -e 's/@''GNULIB_SHUTDOWN''@/$(GL_GNULIB_SHUTDOWN)/g' \
+ -e 's/@''GNULIB_ACCEPT4''@/$(GL_GNULIB_ACCEPT4)/g' \
-e 's|@''HAVE_WINSOCK2_H''@|$(HAVE_WINSOCK2_H)|g' \
-e 's|@''HAVE_WS2TCPIP_H''@|$(HAVE_WS2TCPIP_H)|g' \
-e 's|@''HAVE_STRUCT_SOCKADDR_STORAGE''@|$(HAVE_STRUCT_SOCKADDR_STORAGE)|g' \
@@ -3638,42 +5798,40 @@ sys/socket.h: sys_socket.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_
-e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
-e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
- < $(srcdir)/sys_socket.in.h; \
- } > $@-t && \
- mv -f $@-t $@
+ $(srcdir)/sys_socket.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
# We need the following in order to create <sys/stat.h> when the system
# has one that is incomplete.
sys/stat.h: sys_stat.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
- $(AM_V_at)$(MKDIR_P) sys
- $(AM_V_GEN)rm -f $@-t $@ && \
- { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
- sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+ $(AM_V_GEN)$(MKDIR_P) 'sys'
+ $(AM_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_SYS_STAT_H''@|$(NEXT_SYS_STAT_H)|g' \
-e 's|@''WINDOWS_64_BIT_ST_SIZE''@|$(WINDOWS_64_BIT_ST_SIZE)|g' \
-e 's|@''WINDOWS_STAT_TIMESPEC''@|$(WINDOWS_STAT_TIMESPEC)|g' \
- -e 's/@''GNULIB_FCHMODAT''@/$(GNULIB_FCHMODAT)/g' \
- -e 's/@''GNULIB_FSTAT''@/$(GNULIB_FSTAT)/g' \
- -e 's/@''GNULIB_FSTATAT''@/$(GNULIB_FSTATAT)/g' \
- -e 's/@''GNULIB_FUTIMENS''@/$(GNULIB_FUTIMENS)/g' \
- -e 's/@''GNULIB_GETUMASK''@/$(GNULIB_GETUMASK)/g' \
- -e 's/@''GNULIB_LCHMOD''@/$(GNULIB_LCHMOD)/g' \
- -e 's/@''GNULIB_LSTAT''@/$(GNULIB_LSTAT)/g' \
- -e 's/@''GNULIB_MKDIR''@/$(GNULIB_MKDIR)/g' \
- -e 's/@''GNULIB_MKDIRAT''@/$(GNULIB_MKDIRAT)/g' \
- -e 's/@''GNULIB_MKFIFO''@/$(GNULIB_MKFIFO)/g' \
- -e 's/@''GNULIB_MKFIFOAT''@/$(GNULIB_MKFIFOAT)/g' \
- -e 's/@''GNULIB_MKNOD''@/$(GNULIB_MKNOD)/g' \
- -e 's/@''GNULIB_MKNODAT''@/$(GNULIB_MKNODAT)/g' \
- -e 's/@''GNULIB_STAT''@/$(GNULIB_STAT)/g' \
- -e 's/@''GNULIB_UTIMENSAT''@/$(GNULIB_UTIMENSAT)/g' \
- -e 's/@''GNULIB_OVERRIDES_STRUCT_STAT''@/$(GNULIB_OVERRIDES_STRUCT_STAT)/g' \
- -e 's/@''GNULIB_MDA_CHMOD''@/$(GNULIB_MDA_CHMOD)/g' \
- -e 's/@''GNULIB_MDA_MKDIR''@/$(GNULIB_MDA_MKDIR)/g' \
- -e 's/@''GNULIB_MDA_UMASK''@/$(GNULIB_MDA_UMASK)/g' \
+ -e 's/@''GNULIB_FCHMODAT''@/$(GL_GNULIB_FCHMODAT)/g' \
+ -e 's/@''GNULIB_FSTAT''@/$(GL_GNULIB_FSTAT)/g' \
+ -e 's/@''GNULIB_FSTATAT''@/$(GL_GNULIB_FSTATAT)/g' \
+ -e 's/@''GNULIB_FUTIMENS''@/$(GL_GNULIB_FUTIMENS)/g' \
+ -e 's/@''GNULIB_GETUMASK''@/$(GL_GNULIB_GETUMASK)/g' \
+ -e 's/@''GNULIB_LCHMOD''@/$(GL_GNULIB_LCHMOD)/g' \
+ -e 's/@''GNULIB_LSTAT''@/$(GL_GNULIB_LSTAT)/g' \
+ -e 's/@''GNULIB_MKDIR''@/$(GL_GNULIB_MKDIR)/g' \
+ -e 's/@''GNULIB_MKDIRAT''@/$(GL_GNULIB_MKDIRAT)/g' \
+ -e 's/@''GNULIB_MKFIFO''@/$(GL_GNULIB_MKFIFO)/g' \
+ -e 's/@''GNULIB_MKFIFOAT''@/$(GL_GNULIB_MKFIFOAT)/g' \
+ -e 's/@''GNULIB_MKNOD''@/$(GL_GNULIB_MKNOD)/g' \
+ -e 's/@''GNULIB_MKNODAT''@/$(GL_GNULIB_MKNODAT)/g' \
+ -e 's/@''GNULIB_STAT''@/$(GL_GNULIB_STAT)/g' \
+ -e 's/@''GNULIB_UTIMENSAT''@/$(GL_GNULIB_UTIMENSAT)/g' \
+ -e 's/@''GNULIB_OVERRIDES_STRUCT_STAT''@/$(GL_GNULIB_OVERRIDES_STRUCT_STAT)/g' \
+ -e 's/@''GNULIB_MDA_CHMOD''@/$(GL_GNULIB_MDA_CHMOD)/g' \
+ -e 's/@''GNULIB_MDA_MKDIR''@/$(GL_GNULIB_MDA_MKDIR)/g' \
+ -e 's/@''GNULIB_MDA_UMASK''@/$(GL_GNULIB_MDA_UMASK)/g' \
-e 's|@''HAVE_FCHMODAT''@|$(HAVE_FCHMODAT)|g' \
-e 's|@''HAVE_FSTATAT''@|$(HAVE_FSTATAT)|g' \
-e 's|@''HAVE_FUTIMENS''@|$(HAVE_FUTIMENS)|g' \
@@ -3701,23 +5859,21 @@ sys/stat.h: sys_stat.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNU
-e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
-e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
- < $(srcdir)/sys_stat.in.h; \
- } > $@-t && \
- mv $@-t $@
+ $(srcdir)/sys_stat.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
# We need the following in order to create <sys/time.h> when the system
# doesn't have one that works with the given compiler.
sys/time.h: sys_time.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
- $(AM_V_at)$(MKDIR_P) sys
- $(AM_V_GEN)rm -f $@-t $@ && \
- { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
- sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+ $(AM_V_GEN)$(MKDIR_P) 'sys'
+ $(AM_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's/@''HAVE_SYS_TIME_H''@/$(HAVE_SYS_TIME_H)/g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_SYS_TIME_H''@|$(NEXT_SYS_TIME_H)|g' \
- -e 's/@''GNULIB_GETTIMEOFDAY''@/$(GNULIB_GETTIMEOFDAY)/g' \
+ -e 's/@''GNULIB_GETTIMEOFDAY''@/$(GL_GNULIB_GETTIMEOFDAY)/g' \
-e 's|@''HAVE_WINSOCK2_H''@|$(HAVE_WINSOCK2_H)|g' \
-e 's/@''HAVE_GETTIMEOFDAY''@/$(HAVE_GETTIMEOFDAY)/g' \
-e 's/@''HAVE_STRUCT_TIMEVAL''@/$(HAVE_STRUCT_TIMEVAL)/g' \
@@ -3726,88 +5882,82 @@ sys/time.h: sys_time.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNU
-e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
-e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
- < $(srcdir)/sys_time.in.h; \
- } > $@-t && \
- mv $@-t $@
+ $(srcdir)/sys_time.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
# We need the following in order to create <sys/types.h> when the system
# doesn't have one that works with the given compiler.
sys/types.h: sys_types.in.h $(top_builddir)/config.status
- $(AM_V_at)$(MKDIR_P) sys
- $(AM_V_GEN)rm -f $@-t $@ && \
- { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
- sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+ $(AM_V_GEN)$(MKDIR_P) 'sys'
+ $(AM_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_SYS_TYPES_H''@|$(NEXT_SYS_TYPES_H)|g' \
-e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \
-e 's|@''WINDOWS_STAT_INODES''@|$(WINDOWS_STAT_INODES)|g' \
- < $(srcdir)/sys_types.in.h; \
- } > $@-t && \
- mv $@-t $@
+ $(srcdir)/sys_types.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
# We need the following in order to create <sys/uio.h> when the system
# doesn't have one that works with the given compiler.
sys/uio.h: sys_uio.in.h $(top_builddir)/config.status
- $(AM_V_at)$(MKDIR_P) sys
- $(AM_V_GEN)rm -f $@-t $@ && \
- { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
- sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+ $(AM_V_GEN)$(MKDIR_P) 'sys'
+ $(AM_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_SYS_UIO_H''@|$(NEXT_SYS_UIO_H)|g' \
-e 's|@''HAVE_SYS_UIO_H''@|$(HAVE_SYS_UIO_H)|g' \
- < $(srcdir)/sys_uio.in.h; \
- } > $@-t && \
- mv -f $@-t $@
+ $(srcdir)/sys_uio.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
# We need the following in order to create <sys/wait.h> when the system
# has one that is incomplete.
sys/wait.h: sys_wait.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H)
- $(AM_V_at)$(MKDIR_P) sys
- $(AM_V_GEN)rm -f $@-t $@ && \
- { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
- sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+ $(AM_V_GEN)$(MKDIR_P) 'sys'
+ $(AM_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_SYS_WAIT_H''@|$(NEXT_SYS_WAIT_H)|g' \
- -e 's/@''GNULIB_WAITPID''@/$(GNULIB_WAITPID)/g' \
+ -e 's/@''GNULIB_WAITPID''@/$(GL_GNULIB_WAITPID)/g' \
-e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
- < $(srcdir)/sys_wait.in.h; \
- } > $@-t && \
- mv $@-t $@
+ $(srcdir)/sys_wait.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
# We need the following in order to create <time.h> when the system
# doesn't have one that works with the given compiler.
time.h: time.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
- $(AM_V_GEN)rm -f $@-t $@ && \
- { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
- sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_TIME_H''@|$(NEXT_TIME_H)|g' \
- -e 's/@''GNULIB_CTIME''@/$(GNULIB_CTIME)/g' \
- -e 's/@''GNULIB_LOCALTIME''@/$(GNULIB_LOCALTIME)/g' \
- -e 's/@''GNULIB_MKTIME''@/$(GNULIB_MKTIME)/g' \
- -e 's/@''GNULIB_NANOSLEEP''@/$(GNULIB_NANOSLEEP)/g' \
- -e 's/@''GNULIB_STRFTIME''@/$(GNULIB_STRFTIME)/g' \
- -e 's/@''GNULIB_STRPTIME''@/$(GNULIB_STRPTIME)/g' \
- -e 's/@''GNULIB_TIMEGM''@/$(GNULIB_TIMEGM)/g' \
- -e 's/@''GNULIB_TIMESPEC_GET''@/$(GNULIB_TIMESPEC_GET)/g' \
- -e 's/@''GNULIB_TIME_R''@/$(GNULIB_TIME_R)/g' \
- -e 's/@''GNULIB_TIME_RZ''@/$(GNULIB_TIME_RZ)/g' \
- -e 's/@''GNULIB_TZSET''@/$(GNULIB_TZSET)/g' \
- -e 's/@''GNULIB_MDA_TZSET''@/$(GNULIB_MDA_TZSET)/g' \
+ -e 's/@''GNULIB_CTIME''@/$(GL_GNULIB_CTIME)/g' \
+ -e 's/@''GNULIB_LOCALTIME''@/$(GL_GNULIB_LOCALTIME)/g' \
+ -e 's/@''GNULIB_MKTIME''@/$(GL_GNULIB_MKTIME)/g' \
+ -e 's/@''GNULIB_NANOSLEEP''@/$(GL_GNULIB_NANOSLEEP)/g' \
+ -e 's/@''GNULIB_STRFTIME''@/$(GL_GNULIB_STRFTIME)/g' \
+ -e 's/@''GNULIB_STRPTIME''@/$(GL_GNULIB_STRPTIME)/g' \
+ -e 's/@''GNULIB_TIMEGM''@/$(GL_GNULIB_TIMEGM)/g' \
+ -e 's/@''GNULIB_TIMESPEC_GET''@/$(GL_GNULIB_TIMESPEC_GET)/g' \
+ -e 's/@''GNULIB_TIMESPEC_GETRES''@/$(GL_GNULIB_TIMESPEC_GETRES)/g' \
+ -e 's/@''GNULIB_TIME_R''@/$(GL_GNULIB_TIME_R)/g' \
+ -e 's/@''GNULIB_TIME_RZ''@/$(GL_GNULIB_TIME_RZ)/g' \
+ -e 's/@''GNULIB_TZSET''@/$(GL_GNULIB_TZSET)/g' \
+ -e 's/@''GNULIB_MDA_TZSET''@/$(GL_GNULIB_MDA_TZSET)/g' \
-e 's|@''HAVE_DECL_LOCALTIME_R''@|$(HAVE_DECL_LOCALTIME_R)|g' \
-e 's|@''HAVE_NANOSLEEP''@|$(HAVE_NANOSLEEP)|g' \
-e 's|@''HAVE_STRPTIME''@|$(HAVE_STRPTIME)|g' \
-e 's|@''HAVE_TIMEGM''@|$(HAVE_TIMEGM)|g' \
-e 's|@''HAVE_TIMESPEC_GET''@|$(HAVE_TIMESPEC_GET)|g' \
+ -e 's|@''HAVE_TIMESPEC_GETRES''@|$(HAVE_TIMESPEC_GETRES)|g' \
-e 's|@''HAVE_TIMEZONE_T''@|$(HAVE_TIMEZONE_T)|g' \
-e 's|@''REPLACE_CTIME''@|$(REPLACE_CTIME)|g' \
-e 's|@''REPLACE_GMTIME''@|$(REPLACE_GMTIME)|g' \
@@ -3826,105 +5976,104 @@ time.h: time.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(
-e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
-e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
- < $(srcdir)/time.in.h; \
- } > $@-t && \
- mv $@-t $@
+ $(srcdir)/time.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
# We need the following in order to create an empty placeholder for
# <unistd.h> when the system doesn't have one.
unistd.h: unistd.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
- $(AM_V_GEN)rm -f $@-t $@ && \
- { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
- sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's|@''HAVE_UNISTD_H''@|$(HAVE_UNISTD_H)|g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_UNISTD_H''@|$(NEXT_UNISTD_H)|g' \
-e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \
- -e 's/@''GNULIB_ACCESS''@/$(GNULIB_ACCESS)/g' \
- -e 's/@''GNULIB_CHDIR''@/$(GNULIB_CHDIR)/g' \
- -e 's/@''GNULIB_CHOWN''@/$(GNULIB_CHOWN)/g' \
- -e 's/@''GNULIB_CLOSE''@/$(GNULIB_CLOSE)/g' \
- -e 's/@''GNULIB_COPY_FILE_RANGE''@/$(GNULIB_COPY_FILE_RANGE)/g' \
- -e 's/@''GNULIB_DUP''@/$(GNULIB_DUP)/g' \
- -e 's/@''GNULIB_DUP2''@/$(GNULIB_DUP2)/g' \
- -e 's/@''GNULIB_DUP3''@/$(GNULIB_DUP3)/g' \
- -e 's/@''GNULIB_ENVIRON''@/$(GNULIB_ENVIRON)/g' \
- -e 's/@''GNULIB_EUIDACCESS''@/$(GNULIB_EUIDACCESS)/g' \
- -e 's/@''GNULIB_EXECL''@/$(GNULIB_EXECL)/g' \
- -e 's/@''GNULIB_EXECLE''@/$(GNULIB_EXECLE)/g' \
- -e 's/@''GNULIB_EXECLP''@/$(GNULIB_EXECLP)/g' \
- -e 's/@''GNULIB_EXECV''@/$(GNULIB_EXECV)/g' \
- -e 's/@''GNULIB_EXECVE''@/$(GNULIB_EXECVE)/g' \
- -e 's/@''GNULIB_EXECVP''@/$(GNULIB_EXECVP)/g' \
- -e 's/@''GNULIB_EXECVPE''@/$(GNULIB_EXECVPE)/g' \
- -e 's/@''GNULIB_FACCESSAT''@/$(GNULIB_FACCESSAT)/g' \
- -e 's/@''GNULIB_FCHDIR''@/$(GNULIB_FCHDIR)/g' \
- -e 's/@''GNULIB_FCHOWNAT''@/$(GNULIB_FCHOWNAT)/g' \
- -e 's/@''GNULIB_FDATASYNC''@/$(GNULIB_FDATASYNC)/g' \
- -e 's/@''GNULIB_FSYNC''@/$(GNULIB_FSYNC)/g' \
- -e 's/@''GNULIB_FTRUNCATE''@/$(GNULIB_FTRUNCATE)/g' \
- -e 's/@''GNULIB_GETCWD''@/$(GNULIB_GETCWD)/g' \
- -e 's/@''GNULIB_GETDOMAINNAME''@/$(GNULIB_GETDOMAINNAME)/g' \
- -e 's/@''GNULIB_GETDTABLESIZE''@/$(GNULIB_GETDTABLESIZE)/g' \
- -e 's/@''GNULIB_GETENTROPY''@/$(GNULIB_GETENTROPY)/g' \
- -e 's/@''GNULIB_GETGROUPS''@/$(GNULIB_GETGROUPS)/g' \
- -e 's/@''GNULIB_GETHOSTNAME''@/$(GNULIB_GETHOSTNAME)/g' \
- -e 's/@''GNULIB_GETLOGIN''@/$(GNULIB_GETLOGIN)/g' \
- -e 's/@''GNULIB_GETLOGIN_R''@/$(GNULIB_GETLOGIN_R)/g' \
- -e 's/@''GNULIB_GETOPT_POSIX''@/$(GNULIB_GETOPT_POSIX)/g' \
- -e 's/@''GNULIB_GETPAGESIZE''@/$(GNULIB_GETPAGESIZE)/g' \
- -e 's/@''GNULIB_GETPASS''@/$(GNULIB_GETPASS)/g' \
- -e 's/@''GNULIB_GETUSERSHELL''@/$(GNULIB_GETUSERSHELL)/g' \
- -e 's/@''GNULIB_GROUP_MEMBER''@/$(GNULIB_GROUP_MEMBER)/g' \
- -e 's/@''GNULIB_ISATTY''@/$(GNULIB_ISATTY)/g' \
- -e 's/@''GNULIB_LCHOWN''@/$(GNULIB_LCHOWN)/g' \
- -e 's/@''GNULIB_LINK''@/$(GNULIB_LINK)/g' \
- -e 's/@''GNULIB_LINKAT''@/$(GNULIB_LINKAT)/g' \
- -e 's/@''GNULIB_LSEEK''@/$(GNULIB_LSEEK)/g' \
- -e 's/@''GNULIB_PIPE''@/$(GNULIB_PIPE)/g' \
- -e 's/@''GNULIB_PIPE2''@/$(GNULIB_PIPE2)/g' \
- -e 's/@''GNULIB_PREAD''@/$(GNULIB_PREAD)/g' \
- -e 's/@''GNULIB_PWRITE''@/$(GNULIB_PWRITE)/g' \
- -e 's/@''GNULIB_READ''@/$(GNULIB_READ)/g' \
- -e 's/@''GNULIB_READLINK''@/$(GNULIB_READLINK)/g' \
- -e 's/@''GNULIB_READLINKAT''@/$(GNULIB_READLINKAT)/g' \
- -e 's/@''GNULIB_RMDIR''@/$(GNULIB_RMDIR)/g' \
- -e 's/@''GNULIB_SETHOSTNAME''@/$(GNULIB_SETHOSTNAME)/g' \
- -e 's/@''GNULIB_SLEEP''@/$(GNULIB_SLEEP)/g' \
- -e 's/@''GNULIB_SYMLINK''@/$(GNULIB_SYMLINK)/g' \
- -e 's/@''GNULIB_SYMLINKAT''@/$(GNULIB_SYMLINKAT)/g' \
- -e 's/@''GNULIB_TRUNCATE''@/$(GNULIB_TRUNCATE)/g' \
- -e 's/@''GNULIB_TTYNAME_R''@/$(GNULIB_TTYNAME_R)/g' \
- -e 's/@''GNULIB_UNISTD_H_GETOPT''@/0$(GNULIB_GL_UNISTD_H_GETOPT)/g' \
- -e 's/@''GNULIB_UNISTD_H_NONBLOCKING''@/$(GNULIB_UNISTD_H_NONBLOCKING)/g' \
- -e 's/@''GNULIB_UNISTD_H_SIGPIPE''@/$(GNULIB_UNISTD_H_SIGPIPE)/g' \
- -e 's/@''GNULIB_UNLINK''@/$(GNULIB_UNLINK)/g' \
- -e 's/@''GNULIB_UNLINKAT''@/$(GNULIB_UNLINKAT)/g' \
- -e 's/@''GNULIB_USLEEP''@/$(GNULIB_USLEEP)/g' \
- -e 's/@''GNULIB_WRITE''@/$(GNULIB_WRITE)/g' \
- -e 's/@''GNULIB_MDA_ACCESS''@/$(GNULIB_MDA_ACCESS)/g' \
- -e 's/@''GNULIB_MDA_CHDIR''@/$(GNULIB_MDA_CHDIR)/g' \
- -e 's/@''GNULIB_MDA_CLOSE''@/$(GNULIB_MDA_CLOSE)/g' \
- -e 's/@''GNULIB_MDA_DUP''@/$(GNULIB_MDA_DUP)/g' \
- -e 's/@''GNULIB_MDA_DUP2''@/$(GNULIB_MDA_DUP2)/g' \
- -e 's/@''GNULIB_MDA_EXECL''@/$(GNULIB_MDA_EXECL)/g' \
- -e 's/@''GNULIB_MDA_EXECLE''@/$(GNULIB_MDA_EXECLE)/g' \
- -e 's/@''GNULIB_MDA_EXECLP''@/$(GNULIB_MDA_EXECLP)/g' \
- -e 's/@''GNULIB_MDA_EXECV''@/$(GNULIB_MDA_EXECV)/g' \
- -e 's/@''GNULIB_MDA_EXECVE''@/$(GNULIB_MDA_EXECVE)/g' \
- -e 's/@''GNULIB_MDA_EXECVP''@/$(GNULIB_MDA_EXECVP)/g' \
- -e 's/@''GNULIB_MDA_EXECVPE''@/$(GNULIB_MDA_EXECVPE)/g' \
- -e 's/@''GNULIB_MDA_GETCWD''@/$(GNULIB_MDA_GETCWD)/g' \
- -e 's/@''GNULIB_MDA_GETPID''@/$(GNULIB_MDA_GETPID)/g' \
- -e 's/@''GNULIB_MDA_ISATTY''@/$(GNULIB_MDA_ISATTY)/g' \
- -e 's/@''GNULIB_MDA_LSEEK''@/$(GNULIB_MDA_LSEEK)/g' \
- -e 's/@''GNULIB_MDA_READ''@/$(GNULIB_MDA_READ)/g' \
- -e 's/@''GNULIB_MDA_RMDIR''@/$(GNULIB_MDA_RMDIR)/g' \
- -e 's/@''GNULIB_MDA_SWAB''@/$(GNULIB_MDA_SWAB)/g' \
- -e 's/@''GNULIB_MDA_UNLINK''@/$(GNULIB_MDA_UNLINK)/g' \
- -e 's/@''GNULIB_MDA_WRITE''@/$(GNULIB_MDA_WRITE)/g' \
+ -e 's/@''GNULIB_ACCESS''@/$(GL_GNULIB_ACCESS)/g' \
+ -e 's/@''GNULIB_CHDIR''@/$(GL_GNULIB_CHDIR)/g' \
+ -e 's/@''GNULIB_CHOWN''@/$(GL_GNULIB_CHOWN)/g' \
+ -e 's/@''GNULIB_CLOSE''@/$(GL_GNULIB_CLOSE)/g' \
+ -e 's/@''GNULIB_COPY_FILE_RANGE''@/$(GL_GNULIB_COPY_FILE_RANGE)/g' \
+ -e 's/@''GNULIB_DUP''@/$(GL_GNULIB_DUP)/g' \
+ -e 's/@''GNULIB_DUP2''@/$(GL_GNULIB_DUP2)/g' \
+ -e 's/@''GNULIB_DUP3''@/$(GL_GNULIB_DUP3)/g' \
+ -e 's/@''GNULIB_ENVIRON''@/$(GL_GNULIB_ENVIRON)/g' \
+ -e 's/@''GNULIB_EUIDACCESS''@/$(GL_GNULIB_EUIDACCESS)/g' \
+ -e 's/@''GNULIB_EXECL''@/$(GL_GNULIB_EXECL)/g' \
+ -e 's/@''GNULIB_EXECLE''@/$(GL_GNULIB_EXECLE)/g' \
+ -e 's/@''GNULIB_EXECLP''@/$(GL_GNULIB_EXECLP)/g' \
+ -e 's/@''GNULIB_EXECV''@/$(GL_GNULIB_EXECV)/g' \
+ -e 's/@''GNULIB_EXECVE''@/$(GL_GNULIB_EXECVE)/g' \
+ -e 's/@''GNULIB_EXECVP''@/$(GL_GNULIB_EXECVP)/g' \
+ -e 's/@''GNULIB_EXECVPE''@/$(GL_GNULIB_EXECVPE)/g' \
+ -e 's/@''GNULIB_FACCESSAT''@/$(GL_GNULIB_FACCESSAT)/g' \
+ -e 's/@''GNULIB_FCHDIR''@/$(GL_GNULIB_FCHDIR)/g' \
+ -e 's/@''GNULIB_FCHOWNAT''@/$(GL_GNULIB_FCHOWNAT)/g' \
+ -e 's/@''GNULIB_FDATASYNC''@/$(GL_GNULIB_FDATASYNC)/g' \
+ -e 's/@''GNULIB_FSYNC''@/$(GL_GNULIB_FSYNC)/g' \
+ -e 's/@''GNULIB_FTRUNCATE''@/$(GL_GNULIB_FTRUNCATE)/g' \
+ -e 's/@''GNULIB_GETCWD''@/$(GL_GNULIB_GETCWD)/g' \
+ -e 's/@''GNULIB_GETDOMAINNAME''@/$(GL_GNULIB_GETDOMAINNAME)/g' \
+ -e 's/@''GNULIB_GETDTABLESIZE''@/$(GL_GNULIB_GETDTABLESIZE)/g' \
+ -e 's/@''GNULIB_GETENTROPY''@/$(GL_GNULIB_GETENTROPY)/g' \
+ -e 's/@''GNULIB_GETGROUPS''@/$(GL_GNULIB_GETGROUPS)/g' \
+ -e 's/@''GNULIB_GETHOSTNAME''@/$(GL_GNULIB_GETHOSTNAME)/g' \
+ -e 's/@''GNULIB_GETLOGIN''@/$(GL_GNULIB_GETLOGIN)/g' \
+ -e 's/@''GNULIB_GETLOGIN_R''@/$(GL_GNULIB_GETLOGIN_R)/g' \
+ -e 's/@''GNULIB_GETOPT_POSIX''@/$(GL_GNULIB_GETOPT_POSIX)/g' \
+ -e 's/@''GNULIB_GETPAGESIZE''@/$(GL_GNULIB_GETPAGESIZE)/g' \
+ -e 's/@''GNULIB_GETPASS''@/$(GL_GNULIB_GETPASS)/g' \
+ -e 's/@''GNULIB_GETPASS_GNU''@/$(GL_GNULIB_GETPASS_GNU)/g' \
+ -e 's/@''GNULIB_GETUSERSHELL''@/$(GL_GNULIB_GETUSERSHELL)/g' \
+ -e 's/@''GNULIB_GROUP_MEMBER''@/$(GL_GNULIB_GROUP_MEMBER)/g' \
+ -e 's/@''GNULIB_ISATTY''@/$(GL_GNULIB_ISATTY)/g' \
+ -e 's/@''GNULIB_LCHOWN''@/$(GL_GNULIB_LCHOWN)/g' \
+ -e 's/@''GNULIB_LINK''@/$(GL_GNULIB_LINK)/g' \
+ -e 's/@''GNULIB_LINKAT''@/$(GL_GNULIB_LINKAT)/g' \
+ -e 's/@''GNULIB_LSEEK''@/$(GL_GNULIB_LSEEK)/g' \
+ -e 's/@''GNULIB_PIPE''@/$(GL_GNULIB_PIPE)/g' \
+ -e 's/@''GNULIB_PIPE2''@/$(GL_GNULIB_PIPE2)/g' \
+ -e 's/@''GNULIB_PREAD''@/$(GL_GNULIB_PREAD)/g' \
+ -e 's/@''GNULIB_PWRITE''@/$(GL_GNULIB_PWRITE)/g' \
+ -e 's/@''GNULIB_READ''@/$(GL_GNULIB_READ)/g' \
+ -e 's/@''GNULIB_READLINK''@/$(GL_GNULIB_READLINK)/g' \
+ -e 's/@''GNULIB_READLINKAT''@/$(GL_GNULIB_READLINKAT)/g' \
+ -e 's/@''GNULIB_RMDIR''@/$(GL_GNULIB_RMDIR)/g' \
+ -e 's/@''GNULIB_SETHOSTNAME''@/$(GL_GNULIB_SETHOSTNAME)/g' \
+ -e 's/@''GNULIB_SLEEP''@/$(GL_GNULIB_SLEEP)/g' \
+ -e 's/@''GNULIB_SYMLINK''@/$(GL_GNULIB_SYMLINK)/g' \
+ -e 's/@''GNULIB_SYMLINKAT''@/$(GL_GNULIB_SYMLINKAT)/g' \
+ -e 's/@''GNULIB_TRUNCATE''@/$(GL_GNULIB_TRUNCATE)/g' \
+ -e 's/@''GNULIB_TTYNAME_R''@/$(GL_GNULIB_TTYNAME_R)/g' \
+ -e 's/@''GNULIB_UNISTD_H_GETOPT''@/0$(GL_GNULIB_UNISTD_H_GETOPT)/g' \
+ -e 's/@''GNULIB_UNISTD_H_NONBLOCKING''@/$(GL_GNULIB_UNISTD_H_NONBLOCKING)/g' \
+ -e 's/@''GNULIB_UNISTD_H_SIGPIPE''@/$(GL_GNULIB_UNISTD_H_SIGPIPE)/g' \
+ -e 's/@''GNULIB_UNLINK''@/$(GL_GNULIB_UNLINK)/g' \
+ -e 's/@''GNULIB_UNLINKAT''@/$(GL_GNULIB_UNLINKAT)/g' \
+ -e 's/@''GNULIB_USLEEP''@/$(GL_GNULIB_USLEEP)/g' \
+ -e 's/@''GNULIB_WRITE''@/$(GL_GNULIB_WRITE)/g' \
+ -e 's/@''GNULIB_MDA_ACCESS''@/$(GL_GNULIB_MDA_ACCESS)/g' \
+ -e 's/@''GNULIB_MDA_CHDIR''@/$(GL_GNULIB_MDA_CHDIR)/g' \
+ -e 's/@''GNULIB_MDA_CLOSE''@/$(GL_GNULIB_MDA_CLOSE)/g' \
+ -e 's/@''GNULIB_MDA_DUP''@/$(GL_GNULIB_MDA_DUP)/g' \
+ -e 's/@''GNULIB_MDA_DUP2''@/$(GL_GNULIB_MDA_DUP2)/g' \
+ -e 's/@''GNULIB_MDA_EXECL''@/$(GL_GNULIB_MDA_EXECL)/g' \
+ -e 's/@''GNULIB_MDA_EXECLE''@/$(GL_GNULIB_MDA_EXECLE)/g' \
+ -e 's/@''GNULIB_MDA_EXECLP''@/$(GL_GNULIB_MDA_EXECLP)/g' \
+ -e 's/@''GNULIB_MDA_EXECV''@/$(GL_GNULIB_MDA_EXECV)/g' \
+ -e 's/@''GNULIB_MDA_EXECVE''@/$(GL_GNULIB_MDA_EXECVE)/g' \
+ -e 's/@''GNULIB_MDA_EXECVP''@/$(GL_GNULIB_MDA_EXECVP)/g' \
+ -e 's/@''GNULIB_MDA_EXECVPE''@/$(GL_GNULIB_MDA_EXECVPE)/g' \
+ -e 's/@''GNULIB_MDA_GETCWD''@/$(GL_GNULIB_MDA_GETCWD)/g' \
+ -e 's/@''GNULIB_MDA_GETPID''@/$(GL_GNULIB_MDA_GETPID)/g' \
+ -e 's/@''GNULIB_MDA_ISATTY''@/$(GL_GNULIB_MDA_ISATTY)/g' \
+ -e 's/@''GNULIB_MDA_LSEEK''@/$(GL_GNULIB_MDA_LSEEK)/g' \
+ -e 's/@''GNULIB_MDA_READ''@/$(GL_GNULIB_MDA_READ)/g' \
+ -e 's/@''GNULIB_MDA_RMDIR''@/$(GL_GNULIB_MDA_RMDIR)/g' \
+ -e 's/@''GNULIB_MDA_SWAB''@/$(GL_GNULIB_MDA_SWAB)/g' \
+ -e 's/@''GNULIB_MDA_UNLINK''@/$(GL_GNULIB_MDA_UNLINK)/g' \
+ -e 's/@''GNULIB_MDA_WRITE''@/$(GL_GNULIB_MDA_WRITE)/g' \
< $(srcdir)/unistd.in.h | \
sed -e 's|@''HAVE_CHOWN''@|$(HAVE_CHOWN)|g' \
-e 's|@''HAVE_COPY_FILE_RANGE''@|$(HAVE_COPY_FILE_RANGE)|g' \
@@ -3977,6 +6126,7 @@ unistd.h: unistd.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H
sed -e 's|@''REPLACE_ACCESS''@|$(REPLACE_ACCESS)|g' \
-e 's|@''REPLACE_CHOWN''@|$(REPLACE_CHOWN)|g' \
-e 's|@''REPLACE_CLOSE''@|$(REPLACE_CLOSE)|g' \
+ -e 's|@''REPLACE_COPY_FILE_RANGE''@|$(REPLACE_COPY_FILE_RANGE)|g' \
-e 's|@''REPLACE_DUP''@|$(REPLACE_DUP)|g' \
-e 's|@''REPLACE_DUP2''@|$(REPLACE_DUP2)|g' \
-e 's|@''REPLACE_EXECL''@|$(REPLACE_EXECL)|g' \
@@ -3996,6 +6146,7 @@ unistd.h: unistd.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H
-e 's|@''REPLACE_GETGROUPS''@|$(REPLACE_GETGROUPS)|g' \
-e 's|@''REPLACE_GETPAGESIZE''@|$(REPLACE_GETPAGESIZE)|g' \
-e 's|@''REPLACE_GETPASS''@|$(REPLACE_GETPASS)|g' \
+ -e 's|@''REPLACE_GETPASS_FOR_GETPASS_GNU''@|$(REPLACE_GETPASS_FOR_GETPASS_GNU)|g' \
-e 's|@''REPLACE_ISATTY''@|$(REPLACE_ISATTY)|g' \
-e 's|@''REPLACE_LCHOWN''@|$(REPLACE_LCHOWN)|g' \
-e 's|@''REPLACE_LINK''@|$(REPLACE_LINK)|g' \
@@ -4021,16 +6172,15 @@ unistd.h: unistd.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H
-e 's|@''UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS''@|$(UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS)|g' \
-e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
- -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
- } > $@-t && \
- mv $@-t $@
+ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+ > $@-t
+ $(AM_V_at)mv $@-t $@
# We need the following in order to create <wchar.h> when the system
# version does not work standalone.
wchar.h: wchar.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
- $(AM_V_GEN)rm -f $@-t $@ && \
- { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
- sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
@@ -4038,49 +6188,50 @@ wchar.h: wchar.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H)
-e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \
-e 's|@''HAVE_WCHAR_H''@|$(HAVE_WCHAR_H)|g' \
-e 's/@''HAVE_CRTDEFS_H''@/$(HAVE_CRTDEFS_H)/g' \
- -e 's/@''GNULIB_OVERRIDES_WINT_T''@/$(GNULIB_OVERRIDES_WINT_T)/g' \
- -e 's/@''GNULIB_BTOWC''@/$(GNULIB_BTOWC)/g' \
- -e 's/@''GNULIB_WCTOB''@/$(GNULIB_WCTOB)/g' \
- -e 's/@''GNULIB_MBSINIT''@/$(GNULIB_MBSINIT)/g' \
- -e 's/@''GNULIB_MBRTOWC''@/$(GNULIB_MBRTOWC)/g' \
- -e 's/@''GNULIB_MBRLEN''@/$(GNULIB_MBRLEN)/g' \
- -e 's/@''GNULIB_MBSRTOWCS''@/$(GNULIB_MBSRTOWCS)/g' \
- -e 's/@''GNULIB_MBSNRTOWCS''@/$(GNULIB_MBSNRTOWCS)/g' \
- -e 's/@''GNULIB_WCRTOMB''@/$(GNULIB_WCRTOMB)/g' \
- -e 's/@''GNULIB_WCSRTOMBS''@/$(GNULIB_WCSRTOMBS)/g' \
- -e 's/@''GNULIB_WCSNRTOMBS''@/$(GNULIB_WCSNRTOMBS)/g' \
- -e 's/@''GNULIB_WCWIDTH''@/$(GNULIB_WCWIDTH)/g' \
- -e 's/@''GNULIB_WMEMCHR''@/$(GNULIB_WMEMCHR)/g' \
- -e 's/@''GNULIB_WMEMCMP''@/$(GNULIB_WMEMCMP)/g' \
- -e 's/@''GNULIB_WMEMCPY''@/$(GNULIB_WMEMCPY)/g' \
- -e 's/@''GNULIB_WMEMMOVE''@/$(GNULIB_WMEMMOVE)/g' \
- -e 's/@''GNULIB_WMEMPCPY''@/$(GNULIB_WMEMPCPY)/g' \
- -e 's/@''GNULIB_WMEMSET''@/$(GNULIB_WMEMSET)/g' \
- -e 's/@''GNULIB_WCSLEN''@/$(GNULIB_WCSLEN)/g' \
- -e 's/@''GNULIB_WCSNLEN''@/$(GNULIB_WCSNLEN)/g' \
- -e 's/@''GNULIB_WCSCPY''@/$(GNULIB_WCSCPY)/g' \
- -e 's/@''GNULIB_WCPCPY''@/$(GNULIB_WCPCPY)/g' \
- -e 's/@''GNULIB_WCSNCPY''@/$(GNULIB_WCSNCPY)/g' \
- -e 's/@''GNULIB_WCPNCPY''@/$(GNULIB_WCPNCPY)/g' \
- -e 's/@''GNULIB_WCSCAT''@/$(GNULIB_WCSCAT)/g' \
- -e 's/@''GNULIB_WCSNCAT''@/$(GNULIB_WCSNCAT)/g' \
- -e 's/@''GNULIB_WCSCMP''@/$(GNULIB_WCSCMP)/g' \
- -e 's/@''GNULIB_WCSNCMP''@/$(GNULIB_WCSNCMP)/g' \
- -e 's/@''GNULIB_WCSCASECMP''@/$(GNULIB_WCSCASECMP)/g' \
- -e 's/@''GNULIB_WCSNCASECMP''@/$(GNULIB_WCSNCASECMP)/g' \
- -e 's/@''GNULIB_WCSCOLL''@/$(GNULIB_WCSCOLL)/g' \
- -e 's/@''GNULIB_WCSXFRM''@/$(GNULIB_WCSXFRM)/g' \
- -e 's/@''GNULIB_WCSDUP''@/$(GNULIB_WCSDUP)/g' \
- -e 's/@''GNULIB_WCSCHR''@/$(GNULIB_WCSCHR)/g' \
- -e 's/@''GNULIB_WCSRCHR''@/$(GNULIB_WCSRCHR)/g' \
- -e 's/@''GNULIB_WCSCSPN''@/$(GNULIB_WCSCSPN)/g' \
- -e 's/@''GNULIB_WCSSPN''@/$(GNULIB_WCSSPN)/g' \
- -e 's/@''GNULIB_WCSPBRK''@/$(GNULIB_WCSPBRK)/g' \
- -e 's/@''GNULIB_WCSSTR''@/$(GNULIB_WCSSTR)/g' \
- -e 's/@''GNULIB_WCSTOK''@/$(GNULIB_WCSTOK)/g' \
- -e 's/@''GNULIB_WCSWIDTH''@/$(GNULIB_WCSWIDTH)/g' \
- -e 's/@''GNULIB_WCSFTIME''@/$(GNULIB_WCSFTIME)/g' \
- -e 's/@''GNULIB_MDA_WCSDUP''@/$(GNULIB_MDA_WCSDUP)/g' \
+ -e 's/@''GNULIBHEADERS_OVERRIDE_WINT_T''@/$(GNULIBHEADERS_OVERRIDE_WINT_T)/g' \
+ -e 's/@''GNULIB_BTOWC''@/$(GL_GNULIB_BTOWC)/g' \
+ -e 's/@''GNULIB_WCTOB''@/$(GL_GNULIB_WCTOB)/g' \
+ -e 's/@''GNULIB_MBSINIT''@/$(GL_GNULIB_MBSINIT)/g' \
+ -e 's/@''GNULIB_MBRTOWC''@/$(GL_GNULIB_MBRTOWC)/g' \
+ -e 's/@''GNULIB_MBRLEN''@/$(GL_GNULIB_MBRLEN)/g' \
+ -e 's/@''GNULIB_MBSRTOWCS''@/$(GL_GNULIB_MBSRTOWCS)/g' \
+ -e 's/@''GNULIB_MBSNRTOWCS''@/$(GL_GNULIB_MBSNRTOWCS)/g' \
+ -e 's/@''GNULIB_WCRTOMB''@/$(GL_GNULIB_WCRTOMB)/g' \
+ -e 's/@''GNULIB_WCSRTOMBS''@/$(GL_GNULIB_WCSRTOMBS)/g' \
+ -e 's/@''GNULIB_WCSNRTOMBS''@/$(GL_GNULIB_WCSNRTOMBS)/g' \
+ -e 's/@''GNULIB_WCWIDTH''@/$(GL_GNULIB_WCWIDTH)/g' \
+ -e 's/@''GNULIB_WMEMCHR''@/$(GL_GNULIB_WMEMCHR)/g' \
+ -e 's/@''GNULIB_WMEMCMP''@/$(GL_GNULIB_WMEMCMP)/g' \
+ -e 's/@''GNULIB_WMEMCPY''@/$(GL_GNULIB_WMEMCPY)/g' \
+ -e 's/@''GNULIB_WMEMMOVE''@/$(GL_GNULIB_WMEMMOVE)/g' \
+ -e 's/@''GNULIB_WMEMPCPY''@/$(GL_GNULIB_WMEMPCPY)/g' \
+ -e 's/@''GNULIB_WMEMSET''@/$(GL_GNULIB_WMEMSET)/g' \
+ -e 's/@''GNULIB_WCSLEN''@/$(GL_GNULIB_WCSLEN)/g' \
+ -e 's/@''GNULIB_WCSNLEN''@/$(GL_GNULIB_WCSNLEN)/g' \
+ -e 's/@''GNULIB_WCSCPY''@/$(GL_GNULIB_WCSCPY)/g' \
+ -e 's/@''GNULIB_WCPCPY''@/$(GL_GNULIB_WCPCPY)/g' \
+ -e 's/@''GNULIB_WCSNCPY''@/$(GL_GNULIB_WCSNCPY)/g' \
+ -e 's/@''GNULIB_WCPNCPY''@/$(GL_GNULIB_WCPNCPY)/g' \
+ -e 's/@''GNULIB_WCSCAT''@/$(GL_GNULIB_WCSCAT)/g' \
+ -e 's/@''GNULIB_WCSNCAT''@/$(GL_GNULIB_WCSNCAT)/g' \
+ -e 's/@''GNULIB_WCSCMP''@/$(GL_GNULIB_WCSCMP)/g' \
+ -e 's/@''GNULIB_WCSNCMP''@/$(GL_GNULIB_WCSNCMP)/g' \
+ -e 's/@''GNULIB_WCSCASECMP''@/$(GL_GNULIB_WCSCASECMP)/g' \
+ -e 's/@''GNULIB_WCSNCASECMP''@/$(GL_GNULIB_WCSNCASECMP)/g' \
+ -e 's/@''GNULIB_WCSCOLL''@/$(GL_GNULIB_WCSCOLL)/g' \
+ -e 's/@''GNULIB_WCSXFRM''@/$(GL_GNULIB_WCSXFRM)/g' \
+ -e 's/@''GNULIB_WCSDUP''@/$(GL_GNULIB_WCSDUP)/g' \
+ -e 's/@''GNULIB_WCSCHR''@/$(GL_GNULIB_WCSCHR)/g' \
+ -e 's/@''GNULIB_WCSRCHR''@/$(GL_GNULIB_WCSRCHR)/g' \
+ -e 's/@''GNULIB_WCSCSPN''@/$(GL_GNULIB_WCSCSPN)/g' \
+ -e 's/@''GNULIB_WCSSPN''@/$(GL_GNULIB_WCSSPN)/g' \
+ -e 's/@''GNULIB_WCSPBRK''@/$(GL_GNULIB_WCSPBRK)/g' \
+ -e 's/@''GNULIB_WCSSTR''@/$(GL_GNULIB_WCSSTR)/g' \
+ -e 's/@''GNULIB_WCSTOK''@/$(GL_GNULIB_WCSTOK)/g' \
+ -e 's/@''GNULIB_WCSWIDTH''@/$(GL_GNULIB_WCSWIDTH)/g' \
+ -e 's/@''GNULIB_WCSFTIME''@/$(GL_GNULIB_WCSFTIME)/g' \
+ -e 's/@''GNULIB_MDA_WCSDUP''@/$(GL_GNULIB_MDA_WCSDUP)/g' \
+ -e 's/@''GNULIB_FREE_POSIX''@/$(GL_GNULIB_FREE_POSIX)/g' \
< $(srcdir)/wchar.in.h | \
sed -e 's|@''HAVE_WINT_T''@|$(HAVE_WINT_T)|g' \
-e 's|@''HAVE_BTOWC''@|$(HAVE_BTOWC)|g' \
@@ -4129,6 +6280,7 @@ wchar.h: wchar.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H)
sed -e 's|@''REPLACE_MBSTATE_T''@|$(REPLACE_MBSTATE_T)|g' \
-e 's|@''REPLACE_BTOWC''@|$(REPLACE_BTOWC)|g' \
-e 's|@''REPLACE_WCTOB''@|$(REPLACE_WCTOB)|g' \
+ -e 's|@''REPLACE_FREE''@|$(REPLACE_FREE)|g' \
-e 's|@''REPLACE_MBSINIT''@|$(REPLACE_MBSINIT)|g' \
-e 's|@''REPLACE_MBRTOWC''@|$(REPLACE_MBRTOWC)|g' \
-e 's|@''REPLACE_MBRLEN''@|$(REPLACE_MBRLEN)|g' \
@@ -4143,30 +6295,29 @@ wchar.h: wchar.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H)
-e 's|@''REPLACE_WCSTOK''@|$(REPLACE_WCSTOK)|g' \
-e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
- -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
- } > $@-t && \
- mv $@-t $@
+ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+ > $@-t
+ $(AM_V_at)mv $@-t $@
# We need the following in order to create <wctype.h> when the system
# doesn't have one that works with the given compiler.
wctype.h: wctype.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H)
- $(AM_V_GEN)rm -f $@-t $@ && \
- { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
- sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's/@''HAVE_WCTYPE_H''@/$(HAVE_WCTYPE_H)/g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_WCTYPE_H''@|$(NEXT_WCTYPE_H)|g' \
-e 's/@''HAVE_CRTDEFS_H''@/$(HAVE_CRTDEFS_H)/g' \
- -e 's/@''GNULIB_OVERRIDES_WINT_T''@/$(GNULIB_OVERRIDES_WINT_T)/g' \
- -e 's/@''GNULIB_ISWBLANK''@/$(GNULIB_ISWBLANK)/g' \
- -e 's/@''GNULIB_ISWDIGIT''@/$(GNULIB_ISWDIGIT)/g' \
- -e 's/@''GNULIB_ISWXDIGIT''@/$(GNULIB_ISWXDIGIT)/g' \
- -e 's/@''GNULIB_WCTYPE''@/$(GNULIB_WCTYPE)/g' \
- -e 's/@''GNULIB_ISWCTYPE''@/$(GNULIB_ISWCTYPE)/g' \
- -e 's/@''GNULIB_WCTRANS''@/$(GNULIB_WCTRANS)/g' \
- -e 's/@''GNULIB_TOWCTRANS''@/$(GNULIB_TOWCTRANS)/g' \
+ -e 's/@''GNULIBHEADERS_OVERRIDE_WINT_T''@/$(GNULIBHEADERS_OVERRIDE_WINT_T)/g' \
+ -e 's/@''GNULIB_ISWBLANK''@/$(GL_GNULIB_ISWBLANK)/g' \
+ -e 's/@''GNULIB_ISWDIGIT''@/$(GL_GNULIB_ISWDIGIT)/g' \
+ -e 's/@''GNULIB_ISWXDIGIT''@/$(GL_GNULIB_ISWXDIGIT)/g' \
+ -e 's/@''GNULIB_WCTYPE''@/$(GL_GNULIB_WCTYPE)/g' \
+ -e 's/@''GNULIB_ISWCTYPE''@/$(GL_GNULIB_ISWCTYPE)/g' \
+ -e 's/@''GNULIB_WCTRANS''@/$(GL_GNULIB_WCTRANS)/g' \
+ -e 's/@''GNULIB_TOWCTRANS''@/$(GL_GNULIB_TOWCTRANS)/g' \
-e 's/@''HAVE_ISWBLANK''@/$(HAVE_ISWBLANK)/g' \
-e 's/@''HAVE_ISWCNTRL''@/$(HAVE_ISWCNTRL)/g' \
-e 's/@''HAVE_WCTYPE_T''@/$(HAVE_WCTYPE_T)/g' \
@@ -4179,9 +6330,8 @@ wctype.h: wctype.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H
-e 's/@''REPLACE_TOWLOWER''@/$(REPLACE_TOWLOWER)/g' \
-e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
- < $(srcdir)/wctype.in.h; \
- } > $@-t && \
- mv $@-t $@
+ $(srcdir)/wctype.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
mostlyclean-local: mostlyclean-generic
@for dir in '' $(MOSTLYCLEANDIRS); do \
@@ -4190,6 +6340,10 @@ mostlyclean-local: mostlyclean-generic
fi; \
done; \
:
+distclean-local: distclean-gnulib-libobjs
+distclean-gnulib-libobjs:
+ -rm -f @gl_LIBOBJDEPS@
+maintainer-clean-local: distclean-gnulib-libobjs
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/gnulib/import/_Noreturn.h b/gnulib/import/_Noreturn.h
index 38afe1d5672..e914627a887 100644
--- a/gnulib/import/_Noreturn.h
+++ b/gnulib/import/_Noreturn.h
@@ -1,17 +1,17 @@
/* A C macro for declaring that a function does not return.
- Copyright (C) 2011-2021 Free Software Foundation, Inc.
+ Copyright (C) 2011-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published
- by the Free Software Foundation; either version 3 of the License, or
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
+ Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#ifndef _Noreturn
@@ -26,14 +26,16 @@
AIX system header files and several gnulib header files use precisely
this syntax with 'extern'. */
# define _Noreturn [[noreturn]]
-# elif ((!defined __cplusplus || defined __clang__) \
- && (201112 <= (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) \
- || 4 < __GNUC__ + (7 <= __GNUC_MINOR__) \
- || (defined __apple_build_version__ \
- ? 6000000 <= __apple_build_version__ \
- : 3 < __clang_major__ + (5 <= __clang_minor__))))
+# elif ((!defined __cplusplus || defined __clang__) \
+ && (201112 <= (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) \
+ || (!defined __STRICT_ANSI__ \
+ && (4 < __GNUC__ + (7 <= __GNUC_MINOR__) \
+ || (defined __apple_build_version__ \
+ ? 6000000 <= __apple_build_version__ \
+ : 3 < __clang_major__ + (5 <= __clang_minor__))))))
/* _Noreturn works as-is. */
-# elif 2 < __GNUC__ + (8 <= __GNUC_MINOR__) || 0x5110 <= __SUNPRO_C
+# elif (2 < __GNUC__ + (8 <= __GNUC_MINOR__) || defined __clang__ \
+ || 0x5110 <= __SUNPRO_C)
# define _Noreturn __attribute__ ((__noreturn__))
# elif 1200 <= (defined _MSC_VER ? _MSC_VER : 0)
# define _Noreturn __declspec (noreturn)
diff --git a/gnulib/import/accept.c b/gnulib/import/accept.c
index a7d5743c5bb..5c4d1f352f0 100644
--- a/gnulib/import/accept.c
+++ b/gnulib/import/accept.c
@@ -1,18 +1,18 @@
/* accept.c --- wrappers for Windows accept function
- Copyright (C) 2008-2021 Free Software Foundation, Inc.
+ Copyright (C) 2008-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Paolo Bonzini */
diff --git a/gnulib/import/alloca.c b/gnulib/import/alloca.c
index 91b9ec38916..48802832a85 100644
--- a/gnulib/import/alloca.c
+++ b/gnulib/import/alloca.c
@@ -1,5 +1,7 @@
/* alloca.c -- allocate automatically reclaimed memory
- (Mostly) portable public-domain implementation -- D A Gwyn
+ This file is in the public domain. */
+
+/* (Mostly) portable implementation -- D A Gwyn
This implementation of the PWB library alloca function,
which is used to allocate space off the run-time stack so
diff --git a/gnulib/import/alloca.in.h b/gnulib/import/alloca.in.h
index 0a6137e037c..e2b146138d7 100644
--- a/gnulib/import/alloca.in.h
+++ b/gnulib/import/alloca.in.h
@@ -1,22 +1,20 @@
/* Memory allocation on the stack.
- Copyright (C) 1995, 1999, 2001-2004, 2006-2021 Free Software Foundation,
+ Copyright (C) 1995, 1999, 2001-2004, 2006-2022 Free Software Foundation,
Inc.
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published
- by the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public
- License along with this program; if not, see
- <https://www.gnu.org/licenses/>.
- */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Avoid using the symbol _ALLOCA_H here, as Bison assumes _ALLOCA_H
means there is a real alloca function. */
diff --git a/gnulib/import/arg-nonnull.h b/gnulib/import/arg-nonnull.h
index 5b81b50a87d..e4513efe955 100644
--- a/gnulib/import/arg-nonnull.h
+++ b/gnulib/import/arg-nonnull.h
@@ -1,17 +1,17 @@
/* A C macro for declaring that specific arguments must not be NULL.
- Copyright (C) 2009-2021 Free Software Foundation, Inc.
+ Copyright (C) 2009-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published
- by the Free Software Foundation; either version 3 of the License, or
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
+ Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools
diff --git a/gnulib/import/arpa_inet.in.h b/gnulib/import/arpa_inet.in.h
index 5b103da825c..f5d7db2df7f 100644
--- a/gnulib/import/arpa_inet.in.h
+++ b/gnulib/import/arpa_inet.in.h
@@ -1,19 +1,19 @@
/* A GNU-like <arpa/inet.h>.
- Copyright (C) 2005-2006, 2008-2021 Free Software Foundation, Inc.
+ Copyright (C) 2005-2006, 2008-2022 Free Software Foundation, Inc.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
#ifndef _@GUARD_PREFIX@_ARPA_INET_H
diff --git a/gnulib/import/assure.h b/gnulib/import/assure.h
index b6f40763aba..20e806aa4c1 100644
--- a/gnulib/import/assure.h
+++ b/gnulib/import/assure.h
@@ -1,18 +1,18 @@
/* Run-time assert-like macros.
- Copyright (C) 2014-2021 Free Software Foundation, Inc.
+ Copyright (C) 2014-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Paul Eggert. */
diff --git a/gnulib/import/at-func.c b/gnulib/import/at-func.c
index b6d9de754d1..afcc819beb0 100644
--- a/gnulib/import/at-func.c
+++ b/gnulib/import/at-func.c
@@ -1,9 +1,9 @@
/* Define at-style functions like fstatat, unlinkat, fchownat, etc.
- Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc.
+ Copyright (C) 2006, 2009-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
+ 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,
diff --git a/gnulib/import/attribute.h b/gnulib/import/attribute.h
index 82245279eb1..378d4f0a80e 100644
--- a/gnulib/import/attribute.h
+++ b/gnulib/import/attribute.h
@@ -1,18 +1,18 @@
/* ATTRIBUTE_* macros for using attributes in GCC and similar compilers
- Copyright 2020-2021 Free Software Foundation, Inc.
+ Copyright 2020-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published
- by the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Paul Eggert. */
@@ -32,7 +32,7 @@
/* This file defines two types of attributes:
- * C2X standard attributes. These have macro names that do not begin with
+ * C2x standard attributes. These have macro names that do not begin with
'ATTRIBUTE_'.
* Selected GCC attributes; see:
https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html
@@ -76,6 +76,14 @@
/* Applies to: function, pointer to function, function types. */
#define ATTRIBUTE_ALLOC_SIZE(args) _GL_ATTRIBUTE_ALLOC_SIZE (args)
+/* ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers
+ that can be freed by passing them as the Ith argument to the
+ function F.
+ ATTRIBUTE_DEALLOC_FREE declares that the function returns pointers that
+ can be freed via 'free'; it can be used only after declaring 'free'. */
+/* Applies to: functions. Cannot be used on inline functions. */
+#define ATTRIBUTE_DEALLOC(f, i) _GL_ATTRIBUTE_DEALLOC(f, i)
+#define ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_DEALLOC_FREE
/* Attributes for variadic functions. */
diff --git a/gnulib/import/basename-lgpl.c b/gnulib/import/basename-lgpl.c
index f8394ede74d..eb07e254132 100644
--- a/gnulib/import/basename-lgpl.c
+++ b/gnulib/import/basename-lgpl.c
@@ -1,19 +1,19 @@
/* basename.c -- return the last element in a file name
- Copyright (C) 1990, 1998-2001, 2003-2006, 2009-2021 Free Software
+ Copyright (C) 1990, 1998-2001, 2003-2006, 2009-2022 Free Software
Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#include <config.h>
diff --git a/gnulib/import/basename-lgpl.h b/gnulib/import/basename-lgpl.h
index 1e9631a20dc..5569f219336 100644
--- a/gnulib/import/basename-lgpl.h
+++ b/gnulib/import/basename-lgpl.h
@@ -1,20 +1,20 @@
-/* Extract the last component (base name) of a file name.
+/* Extract the last component (base name) of a file name.
- Copyright (C) 1998, 2001, 2003-2006, 2009-2021 Free Software Foundation,
- Inc.
+ Copyright (C) 1998, 2001, 2003-2006, 2009-2022 Free Software Foundation,
+ Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
#ifndef _BASENAME_LGPL_H
#define _BASENAME_LGPL_H
diff --git a/gnulib/import/bind.c b/gnulib/import/bind.c
index 467da951e45..199e0ba99c2 100644
--- a/gnulib/import/bind.c
+++ b/gnulib/import/bind.c
@@ -1,18 +1,18 @@
/* bind.c --- wrappers for Windows bind function
- Copyright (C) 2008-2021 Free Software Foundation, Inc.
+ Copyright (C) 2008-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Paolo Bonzini */
diff --git a/gnulib/import/btowc.c b/gnulib/import/btowc.c
index 58186c44d7c..4af58bb02d0 100644
--- a/gnulib/import/btowc.c
+++ b/gnulib/import/btowc.c
@@ -1,18 +1,18 @@
/* Convert unibyte character to wide character.
- Copyright (C) 2008, 2010-2021 Free Software Foundation, Inc.
+ Copyright (C) 2008, 2010-2022 Free Software Foundation, Inc.
Written by Bruno Haible <bruno@clisp.org>, 2008.
- This program is free software: you can 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 file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#include <config.h>
diff --git a/gnulib/import/c++defs.h b/gnulib/import/c++defs.h
index 39df1bc76bc..ad181558fbd 100644
--- a/gnulib/import/c++defs.h
+++ b/gnulib/import/c++defs.h
@@ -1,17 +1,17 @@
/* C++ compatible function declaration macros.
- Copyright (C) 2010-2021 Free Software Foundation, Inc.
+ Copyright (C) 2010-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published
- by the Free Software Foundation; either version 3 of the License, or
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
+ Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#ifndef _GL_CXXDEFS_H
diff --git a/gnulib/import/canonicalize-lgpl.c b/gnulib/import/canonicalize-lgpl.c
index 4bb4c0c2d96..a7fa7feb62e 100644
--- a/gnulib/import/canonicalize-lgpl.c
+++ b/gnulib/import/canonicalize-lgpl.c
@@ -1,18 +1,18 @@
/* Return the canonical absolute name of a given file.
- Copyright (C) 1996-2021 Free Software Foundation, Inc.
+ Copyright (C) 1996-2022 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public
+ modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
- version 3 of the License, or (at your option) any later version.
+ version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
+ Lesser General Public License for more details.
- You should have received a copy of the GNU General Public
+ You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
@@ -21,7 +21,6 @@
optimizes away the name == NULL test below. */
# define _GL_ARG_NONNULL(params)
-# define _GL_USE_STDLIB_ALLOC 1
# include <libc-config.h>
#endif
@@ -75,7 +74,12 @@
# define __pathconf pathconf
# define __rawmemchr rawmemchr
# define __readlink readlink
-# define __stat stat
+# if IN_RELOCWRAPPER
+ /* When building the relocatable program wrapper, use the system's memmove
+ function, not the gnulib override, otherwise we would get a link error.
+ */
+# undef memmove
+# endif
#endif
/* Suppress bogus GCC -Wmaybe-uninitialized warnings. */
@@ -100,7 +104,7 @@ file_accessible (char const *file)
return __faccessat (AT_FDCWD, file, F_OK, AT_EACCESS) == 0;
# else
struct stat st;
- return __stat (file, &st) == 0 || errno == EOVERFLOW;
+ return stat (file, &st) == 0 || errno == EOVERFLOW;
# endif
}
@@ -141,11 +145,11 @@ suffix_requires_dir_check (char const *end)
macOS 10.13 <https://bugs.gnu.org/30350>, and should also work on
platforms like AIX 7.2 that need at least "/.". */
-#if defined _LIBC || defined LSTAT_FOLLOWS_SLASHED_SYMLINK
+# if defined _LIBC || defined LSTAT_FOLLOWS_SLASHED_SYMLINK
static char const dir_suffix[] = "/";
-#else
+# else
static char const dir_suffix[] = "/./";
-#endif
+# endif
/* Return true if DIR is a searchable dir, false (setting errno) otherwise.
DIREND points to the NUL byte at the end of the DIR string.
@@ -187,13 +191,13 @@ get_path_max (void)
to pacify GCC is known; even an explicit #pragma does not pacify GCC.
When the GCC bug is fixed this workaround should be limited to the
broken GCC versions. */
-#if __GNUC_PREREQ (10, 1)
-# if defined GCC_LINT || defined lint
+# if __GNUC_PREREQ (10, 1)
+# if defined GCC_LINT || defined lint
__attribute__ ((__noinline__))
-# elif __OPTIMIZE__ && !__NO_INLINE__
-# define GCC_BOGUS_WRETURN_LOCAL_ADDR
+# elif __OPTIMIZE__ && !__NO_INLINE__
+# define GCC_BOGUS_WRETURN_LOCAL_ADDR
+# endif
# endif
-#endif
static char *
realpath_stk (const char *name, char *resolved,
struct scratch_buffer *rname_buf)
@@ -439,7 +443,8 @@ __realpath (const char *name, char *resolved)
}
libc_hidden_def (__realpath)
versioned_symbol (libc, __realpath, realpath, GLIBC_2_3);
-#endif /* !FUNC_REALPATH_WORKS || defined _LIBC */
+
+#endif /* defined _LIBC || !FUNC_REALPATH_WORKS */
#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_3)
diff --git a/gnulib/import/cdefs.h b/gnulib/import/cdefs.h
index 03e26d47dcb..cb2514504f1 100644
--- a/gnulib/import/cdefs.h
+++ b/gnulib/import/cdefs.h
@@ -1,17 +1,18 @@
-/* Copyright (C) 1992-2021 Free Software Foundation, Inc.
+/* Copyright (C) 1992-2022 Free Software Foundation, Inc.
+ Copyright The GNU Toolchain Authors.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public
+ modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
- version 3 of the License, or (at your option) any later version.
+ version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
+ Lesser General Public License for more details.
- You should have received a copy of the GNU General Public
+ You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
@@ -34,31 +35,28 @@
#undef __P
#undef __PMT
-/* Compilers that are not clang may object to
- #if defined __clang__ && __has_attribute(...)
- even though they do not need to evaluate the right-hand side of the &&. */
-#if defined __clang__ && defined __has_attribute
-# define __glibc_clang_has_attribute(name) __has_attribute (name)
+/* Compilers that lack __has_attribute may object to
+ #if defined __has_attribute && __has_attribute (...)
+ even though they do not need to evaluate the right-hand side of the &&.
+ Similarly for __has_builtin, etc. */
+#if (defined __has_attribute \
+ && (!defined __clang_minor__ \
+ || (defined __apple_build_version__ \
+ ? 6000000 <= __apple_build_version__ \
+ : 3 < __clang_major__ + (5 <= __clang_minor__))))
+# define __glibc_has_attribute(attr) __has_attribute (attr)
#else
-# define __glibc_clang_has_attribute(name) 0
+# define __glibc_has_attribute(attr) 0
#endif
-
-/* Compilers that are not clang may object to
- #if defined __clang__ && __has_builtin(...)
- even though they do not need to evaluate the right-hand side of the &&. */
-#if defined __clang__ && defined __has_builtin
-# define __glibc_clang_has_builtin(name) __has_builtin (name)
+#ifdef __has_builtin
+# define __glibc_has_builtin(name) __has_builtin (name)
#else
-# define __glibc_clang_has_builtin(name) 0
+# define __glibc_has_builtin(name) 0
#endif
-
-/* Compilers that are not clang may object to
- #if defined __clang__ && __has_extension(...)
- even though they do not need to evaluate the right-hand side of the &&. */
-#if defined __clang__ && defined __has_extension
-# define __glibc_clang_has_extension(ext) __has_extension (ext)
+#ifdef __has_extension
+# define __glibc_has_extension(ext) __has_extension (ext)
#else
-# define __glibc_clang_has_extension(ext) 0
+# define __glibc_has_extension(ext) 0
#endif
#if defined __GNUC__ || defined __clang__
@@ -79,7 +77,7 @@
as non-throwing using a function attribute since programs can use
the -fexceptions options for C code as well. */
# if !defined __cplusplus \
- && (__GNUC_PREREQ (3, 4) || __glibc_clang_has_attribute (__nothrow__))
+ && (__GNUC_PREREQ (3, 4) || __glibc_has_attribute (__nothrow__))
# define __THROW __attribute__ ((__nothrow__ __LEAF))
# define __THROWNL __attribute__ ((__nothrow__))
# define __NTH(fct) __attribute__ ((__nothrow__ __LEAF)) fct
@@ -147,7 +145,8 @@
#define __bos0(ptr) __builtin_object_size (ptr, 0)
/* Use __builtin_dynamic_object_size at _FORTIFY_SOURCE=3 when available. */
-#if __USE_FORTIFY_LEVEL == 3 && __glibc_clang_prereq (9, 0)
+#if __USE_FORTIFY_LEVEL == 3 && (__glibc_clang_prereq (9, 0) \
+ || __GNUC_PREREQ (12, 0))
# define __glibc_objsize0(__o) __builtin_dynamic_object_size (__o, 0)
# define __glibc_objsize(__o) __builtin_dynamic_object_size (__o, 1)
#else
@@ -155,6 +154,53 @@
# define __glibc_objsize(__o) __bos (__o)
#endif
+/* Compile time conditions to choose between the regular, _chk and _chk_warn
+ variants. These conditions should get evaluated to constant and optimized
+ away. */
+
+#define __glibc_safe_len_cond(__l, __s, __osz) ((__l) <= (__osz) / (__s))
+#define __glibc_unsigned_or_positive(__l) \
+ ((__typeof (__l)) 0 < (__typeof (__l)) -1 \
+ || (__builtin_constant_p (__l) && (__l) > 0))
+
+/* Length is known to be safe at compile time if the __L * __S <= __OBJSZ
+ condition can be folded to a constant and if it is true. The -1 check is
+ redundant because since it implies that __glibc_safe_len_cond is true. */
+#define __glibc_safe_or_unknown_len(__l, __s, __osz) \
+ (__glibc_unsigned_or_positive (__l) \
+ && __builtin_constant_p (__glibc_safe_len_cond ((__SIZE_TYPE__) (__l), \
+ __s, __osz)) \
+ && __glibc_safe_len_cond ((__SIZE_TYPE__) (__l), __s, __osz))
+
+/* Conversely, we know at compile time that the length is unsafe if the
+ __L * __S <= __OBJSZ condition can be folded to a constant and if it is
+ false. */
+#define __glibc_unsafe_len(__l, __s, __osz) \
+ (__glibc_unsigned_or_positive (__l) \
+ && __builtin_constant_p (__glibc_safe_len_cond ((__SIZE_TYPE__) (__l), \
+ __s, __osz)) \
+ && !__glibc_safe_len_cond ((__SIZE_TYPE__) (__l), __s, __osz))
+
+/* Fortify function f. __f_alias, __f_chk and __f_chk_warn must be
+ declared. */
+
+#define __glibc_fortify(f, __l, __s, __osz, ...) \
+ (__glibc_safe_or_unknown_len (__l, __s, __osz) \
+ ? __ ## f ## _alias (__VA_ARGS__) \
+ : (__glibc_unsafe_len (__l, __s, __osz) \
+ ? __ ## f ## _chk_warn (__VA_ARGS__, __osz) \
+ : __ ## f ## _chk (__VA_ARGS__, __osz))) \
+
+/* Fortify function f, where object size argument passed to f is the number of
+ elements and not total size. */
+
+#define __glibc_fortify_n(f, __l, __s, __osz, ...) \
+ (__glibc_safe_or_unknown_len (__l, __s, __osz) \
+ ? __ ## f ## _alias (__VA_ARGS__) \
+ : (__glibc_unsafe_len (__l, __s, __osz) \
+ ? __ ## f ## _chk_warn (__VA_ARGS__, (__osz) / (__s)) \
+ : __ ## f ## _chk (__VA_ARGS__, (__osz) / (__s)))) \
+
#if __GNUC_PREREQ (4,3)
# define __warnattr(msg) __attribute__((__warning__ (msg)))
# define __errordecl(name, msg) \
@@ -233,7 +279,7 @@
/* At some point during the gcc 2.96 development the `malloc' attribute
for functions was introduced. We don't want to use it unconditionally
(although this would be possible) since it generates warnings. */
-#if __GNUC_PREREQ (2,96) || __glibc_clang_has_attribute (__malloc__)
+#if __GNUC_PREREQ (2,96) || __glibc_has_attribute (__malloc__)
# define __attribute_malloc__ __attribute__ ((__malloc__))
#else
# define __attribute_malloc__ /* Ignore */
@@ -248,26 +294,41 @@
# define __attribute_alloc_size__(params) /* Ignore. */
#endif
+/* Tell the compiler which argument to an allocation function
+ indicates the alignment of the allocation. */
+#if __GNUC_PREREQ (4, 9) || __glibc_has_attribute (__alloc_align__)
+# define __attribute_alloc_align__(param) \
+ __attribute__ ((__alloc_align__ param))
+#else
+# define __attribute_alloc_align__(param) /* Ignore. */
+#endif
+
/* At some point during the gcc 2.96 development the `pure' attribute
for functions was introduced. We don't want to use it unconditionally
(although this would be possible) since it generates warnings. */
-#if __GNUC_PREREQ (2,96) || __glibc_clang_has_attribute (__pure__)
+#if __GNUC_PREREQ (2,96) || __glibc_has_attribute (__pure__)
# define __attribute_pure__ __attribute__ ((__pure__))
#else
# define __attribute_pure__ /* Ignore */
#endif
/* This declaration tells the compiler that the value is constant. */
-#if __GNUC_PREREQ (2,5) || __glibc_clang_has_attribute (__const__)
+#if __GNUC_PREREQ (2,5) || __glibc_has_attribute (__const__)
# define __attribute_const__ __attribute__ ((__const__))
#else
# define __attribute_const__ /* Ignore */
#endif
+#if __GNUC_PREREQ (2,7) || __glibc_has_attribute (__unused__)
+# define __attribute_maybe_unused__ __attribute__ ((__unused__))
+#else
+# define __attribute_maybe_unused__ /* Ignore */
+#endif
+
/* At some point during the gcc 3.1 development the `used' attribute
for functions was introduced. We don't want to use it unconditionally
(although this would be possible) since it generates warnings. */
-#if __GNUC_PREREQ (3,1) || __glibc_clang_has_attribute (__used__)
+#if __GNUC_PREREQ (3,1) || __glibc_has_attribute (__used__)
# define __attribute_used__ __attribute__ ((__used__))
# define __attribute_noinline__ __attribute__ ((__noinline__))
#else
@@ -276,7 +337,7 @@
#endif
/* Since version 3.2, gcc allows marking deprecated functions. */
-#if __GNUC_PREREQ (3,2) || __glibc_clang_has_attribute (__deprecated__)
+#if __GNUC_PREREQ (3,2) || __glibc_has_attribute (__deprecated__)
# define __attribute_deprecated__ __attribute__ ((__deprecated__))
#else
# define __attribute_deprecated__ /* Ignore */
@@ -286,7 +347,7 @@
when a deprecated function is used. clang claims to be gcc 4.2, but
may also support this feature. */
#if __GNUC_PREREQ (4,5) \
- || __glibc_clang_has_extension (__attribute_deprecated_with_message__)
+ || __glibc_has_extension (__attribute_deprecated_with_message__)
# define __attribute_deprecated_msg__(msg) \
__attribute__ ((__deprecated__ (msg)))
#else
@@ -299,7 +360,7 @@
If several `format_arg' attributes are given for the same function, in
gcc-3.0 and older, all but the last one are ignored. In newer gccs,
all designated arguments are considered. */
-#if __GNUC_PREREQ (2,8) || __glibc_clang_has_attribute (__format_arg__)
+#if __GNUC_PREREQ (2,8) || __glibc_has_attribute (__format_arg__)
# define __attribute_format_arg__(x) __attribute__ ((__format_arg__ (x)))
#else
# define __attribute_format_arg__(x) /* Ignore */
@@ -309,7 +370,7 @@
attribute for functions was introduced. We don't want to use it
unconditionally (although this would be possible) since it
generates warnings. */
-#if __GNUC_PREREQ (2,97) || __glibc_clang_has_attribute (__format__)
+#if __GNUC_PREREQ (2,97) || __glibc_has_attribute (__format__)
# define __attribute_format_strfmon__(a,b) \
__attribute__ ((__format__ (__strfmon__, a, b)))
#else
@@ -317,19 +378,33 @@
#endif
/* The nonnull function attribute marks pointer parameters that
- must not be NULL. Do not define __nonnull if it is already defined,
- for portability when this file is used in Gnulib. */
+ must not be NULL. This has the name __nonnull in glibc,
+ and __attribute_nonnull__ in files shared with Gnulib to avoid
+ collision with a different __nonnull in DragonFlyBSD 5.9. */
+#ifndef __attribute_nonnull__
+# if __GNUC_PREREQ (3,3) || __glibc_has_attribute (__nonnull__)
+# define __attribute_nonnull__(params) __attribute__ ((__nonnull__ params))
+# else
+# define __attribute_nonnull__(params)
+# endif
+#endif
#ifndef __nonnull
-# if __GNUC_PREREQ (3,3) || __glibc_clang_has_attribute (__nonnull__)
-# define __nonnull(params) __attribute__ ((__nonnull__ params))
+# define __nonnull(params) __attribute_nonnull__ (params)
+#endif
+
+/* The returns_nonnull function attribute marks the return type of the function
+ as always being non-null. */
+#ifndef __returns_nonnull
+# if __GNUC_PREREQ (4, 9) || __glibc_has_attribute (__returns_nonnull__)
+# define __returns_nonnull __attribute__ ((__returns_nonnull__))
# else
-# define __nonnull(params)
+# define __returns_nonnull
# endif
#endif
/* If fortification mode, we warn about unused results of certain
function calls which can lead to problems. */
-#if __GNUC_PREREQ (3,4) || __glibc_clang_has_attribute (__warn_unused_result__)
+#if __GNUC_PREREQ (3,4) || __glibc_has_attribute (__warn_unused_result__)
# define __attribute_warn_unused_result__ \
__attribute__ ((__warn_unused_result__))
# if defined __USE_FORTIFY_LEVEL && __USE_FORTIFY_LEVEL > 0
@@ -343,7 +418,7 @@
#endif
/* Forces a function to be always inlined. */
-#if __GNUC_PREREQ (3,2) || __glibc_clang_has_attribute (__always_inline__)
+#if __GNUC_PREREQ (3,2) || __glibc_has_attribute (__always_inline__)
/* The Linux kernel defines __always_inline in stddef.h (283d7573), and
it conflicts with this definition. Therefore undefine it first to
allow either header to be included first. */
@@ -356,7 +431,7 @@
/* Associate error messages with the source location of the call site rather
than with the source location inside the function. */
-#if __GNUC_PREREQ (4,3) || __glibc_clang_has_attribute (__artificial__)
+#if __GNUC_PREREQ (4,3) || __glibc_has_attribute (__artificial__)
# define __attribute_artificial__ __attribute__ ((__artificial__))
#else
# define __attribute_artificial__ /* Ignore */
@@ -433,7 +508,7 @@
# endif
#endif
-#if (__GNUC__ >= 3) || __glibc_clang_has_builtin (__builtin_expect)
+#if (__GNUC__ >= 3) || __glibc_has_builtin (__builtin_expect)
# define __glibc_unlikely(cond) __builtin_expect ((cond), 0)
# define __glibc_likely(cond) __builtin_expect ((cond), 1)
#else
@@ -441,12 +516,6 @@
# define __glibc_likely(cond) (cond)
#endif
-#ifdef __has_attribute
-# define __glibc_has_attribute(attr) __has_attribute (attr)
-#else
-# define __glibc_has_attribute(attr) 0
-#endif
-
#if (!defined _Noreturn \
&& (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) < 201112 \
&& !(__GNUC_PREREQ (4,7) \
@@ -486,9 +555,9 @@
[!!sizeof (struct { int __error_if_negative: (expr) ? 2 : -1; })]
#endif
-/* The #ifndef lets Gnulib avoid including these on non-glibc
- platforms, where the includes typically do not exist. */
-#ifndef __WORDSIZE
+/* Gnulib avoids including these, as they don't work on non-glibc or
+ older glibc platforms. */
+#ifndef __GNULIB_CDEFS
# include <bits/wordsize.h>
# include <bits/long-double.h>
#endif
@@ -581,7 +650,7 @@ _Static_assert (0, "IEEE 128-bits long double requires redirection on this platf
check is required to enable the use of generic selection. */
#if !defined __cplusplus \
&& (__GNUC_PREREQ (4, 9) \
- || __glibc_clang_has_extension (c_generic_selections) \
+ || __glibc_has_extension (c_generic_selections) \
|| (!defined __GNUC__ && defined __STDC_VERSION__ \
&& __STDC_VERSION__ >= 201112L))
# define __HAVE_GENERIC_SELECTION 1
@@ -595,9 +664,36 @@ _Static_assert (0, "IEEE 128-bits long double requires redirection on this platf
array according to access mode, or at least one element when
size-index is not provided:
access (access-mode, <ref-index> [, <size-index>]) */
-#define __attr_access(x) __attribute__ ((__access__ x))
+# define __attr_access(x) __attribute__ ((__access__ x))
+/* For _FORTIFY_SOURCE == 3 we use __builtin_dynamic_object_size, which may
+ use the access attribute to get object sizes from function definition
+ arguments, so we can't use them on functions we fortify. Drop the object
+ size hints for such functions. */
+# if __USE_FORTIFY_LEVEL == 3
+# define __fortified_attr_access(a, o, s) __attribute__ ((__access__ (a, o)))
+# else
+# define __fortified_attr_access(a, o, s) __attr_access ((a, o, s))
+# endif
+# if __GNUC_PREREQ (11, 0)
+# define __attr_access_none(argno) __attribute__ ((__access__ (__none__, argno)))
+# else
+# define __attr_access_none(argno)
+# endif
#else
+# define __fortified_attr_access(a, o, s)
# define __attr_access(x)
+# define __attr_access_none(argno)
+#endif
+
+#if __GNUC_PREREQ (11, 0)
+/* Designates dealloc as a function to call to deallocate objects
+ allocated by the declared function. */
+# define __attr_dealloc(dealloc, argno) \
+ __attribute__ ((__malloc__ (dealloc, argno)))
+# define __attr_dealloc_free __attr_dealloc (__builtin_free, 1)
+#else
+# define __attr_dealloc(dealloc, argno)
+# define __attr_dealloc_free
#endif
/* Specify that a function such as setjmp or vfork may return
diff --git a/gnulib/import/chdir-long.c b/gnulib/import/chdir-long.c
index 0d693b023a1..f4efb209894 100644
--- a/gnulib/import/chdir-long.c
+++ b/gnulib/import/chdir-long.c
@@ -1,9 +1,9 @@
/* provide a chdir function that tries not to fail due to ENAMETOOLONG
- Copyright (C) 2004-2021 Free Software Foundation, Inc.
+ Copyright (C) 2004-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
+ 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,
diff --git a/gnulib/import/chdir-long.h b/gnulib/import/chdir-long.h
index 17d9aa5285e..84a72989624 100644
--- a/gnulib/import/chdir-long.h
+++ b/gnulib/import/chdir-long.h
@@ -1,9 +1,9 @@
/* provide a chdir function that tries not to fail due to ENAMETOOLONG
- Copyright (C) 2004-2005, 2009-2021 Free Software Foundation, Inc.
+ Copyright (C) 2004-2005, 2009-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
+ 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,
diff --git a/gnulib/import/chown.c b/gnulib/import/chown.c
index 9b8b36192c9..705ca85874d 100644
--- a/gnulib/import/chown.c
+++ b/gnulib/import/chown.c
@@ -1,19 +1,19 @@
/* provide consistent interface to chown for systems that don't interpret
an ID of -1 as meaning "don't change the corresponding ID".
- Copyright (C) 1997, 2004-2007, 2009-2021 Free Software Foundation, Inc.
+ Copyright (C) 1997, 2004-2007, 2009-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* written by Jim Meyering */
@@ -33,8 +33,8 @@
/* Simple stub that always fails with ENOSYS, for mingw. */
int
-chown (const char *file _GL_UNUSED, uid_t uid _GL_UNUSED,
- gid_t gid _GL_UNUSED)
+chown (_GL_UNUSED const char *file, _GL_UNUSED uid_t uid,
+ _GL_UNUSED gid_t gid)
{
errno = ENOSYS;
return -1;
diff --git a/gnulib/import/cloexec.c b/gnulib/import/cloexec.c
index 8363ddaa609..812be01a06c 100644
--- a/gnulib/import/cloexec.c
+++ b/gnulib/import/cloexec.c
@@ -1,21 +1,21 @@
/* cloexec.c - set or clear the close-on-exec descriptor flag
- Copyright (C) 1991, 2004-2006, 2009-2021 Free Software Foundation, Inc.
+ Copyright (C) 1991, 2004-2006, 2009-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <https://www.gnu.org/licenses/>.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
- The code is taken from glibc/manual/llio.texi */
+/* The code is taken from glibc/manual/llio.texi */
#include <config.h>
diff --git a/gnulib/import/cloexec.h b/gnulib/import/cloexec.h
index 5ca0e6413e7..7a22d775327 100644
--- a/gnulib/import/cloexec.h
+++ b/gnulib/import/cloexec.h
@@ -1,21 +1,19 @@
/* cloexec.c - set or clear the close-on-exec descriptor flag
- Copyright (C) 2004, 2009-2021 Free Software Foundation, Inc.
+ Copyright (C) 2004, 2009-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-*/
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
#include <stdbool.h>
diff --git a/gnulib/import/close.c b/gnulib/import/close.c
index e1264d52342..44990ba71fc 100644
--- a/gnulib/import/close.c
+++ b/gnulib/import/close.c
@@ -1,17 +1,17 @@
/* close replacement.
- Copyright (C) 2008-2021 Free Software Foundation, Inc.
+ Copyright (C) 2008-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#include <config.h>
diff --git a/gnulib/import/closedir.c b/gnulib/import/closedir.c
index 0847422c731..a2731220fc1 100644
--- a/gnulib/import/closedir.c
+++ b/gnulib/import/closedir.c
@@ -1,17 +1,17 @@
/* Stop reading the entries of a directory.
- Copyright (C) 2006-2021 Free Software Foundation, Inc.
+ Copyright (C) 2006-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#include <config.h>
diff --git a/gnulib/import/connect.c b/gnulib/import/connect.c
index 6dc11075e1d..d1600634e2e 100644
--- a/gnulib/import/connect.c
+++ b/gnulib/import/connect.c
@@ -1,18 +1,18 @@
/* connect.c --- wrappers for Windows connect function
- Copyright (C) 2008-2021 Free Software Foundation, Inc.
+ Copyright (C) 2008-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Paolo Bonzini */
diff --git a/gnulib/import/count-one-bits.c b/gnulib/import/count-one-bits.c
index 66341d77cda..67a61dad61e 100644
--- a/gnulib/import/count-one-bits.c
+++ b/gnulib/import/count-one-bits.c
@@ -1,4 +1,22 @@
+/* Count the number of 1-bits in a word.
+
+ Copyright (C) 2012-2022 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
#include <config.h>
+
#define COUNT_ONE_BITS_INLINE _GL_EXTERN_INLINE
#include "count-one-bits.h"
diff --git a/gnulib/import/count-one-bits.h b/gnulib/import/count-one-bits.h
index 1a14f11f152..7d24c45a0d3 100644
--- a/gnulib/import/count-one-bits.h
+++ b/gnulib/import/count-one-bits.h
@@ -1,17 +1,17 @@
/* count-one-bits.h -- counts the number of 1-bits in a word.
- Copyright (C) 2007-2021 Free Software Foundation, Inc.
+ Copyright (C) 2007-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Ben Pfaff. */
diff --git a/gnulib/import/ctype.in.h b/gnulib/import/ctype.in.h
index 511a362188e..dc81170d5e7 100644
--- a/gnulib/import/ctype.in.h
+++ b/gnulib/import/ctype.in.h
@@ -1,19 +1,19 @@
/* A substitute for ISO C99 <ctype.h>, for platforms on which it is incomplete.
- Copyright (C) 2009-2021 Free Software Foundation, Inc.
+ Copyright (C) 2009-2022 Free Software Foundation, Inc.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Bruno Haible. */
diff --git a/gnulib/import/dirent-private.h b/gnulib/import/dirent-private.h
index eaba1b9fe49..30cf5d90b48 100644
--- a/gnulib/import/dirent-private.h
+++ b/gnulib/import/dirent-private.h
@@ -1,17 +1,17 @@
/* Private details of the DIR type.
- Copyright (C) 2011-2021 Free Software Foundation, Inc.
+ Copyright (C) 2011-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#ifndef _DIRENT_PRIVATE_H
diff --git a/gnulib/import/dirent.in.h b/gnulib/import/dirent.in.h
index 2e2c5119a11..f28288d1acc 100644
--- a/gnulib/import/dirent.in.h
+++ b/gnulib/import/dirent.in.h
@@ -1,17 +1,17 @@
/* A GNU-like <dirent.h>.
- Copyright (C) 2006-2021 Free Software Foundation, Inc.
+ Copyright (C) 2006-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#ifndef _@GUARD_PREFIX@_DIRENT_H
@@ -55,6 +55,28 @@ typedef struct gl_directory DIR;
# endif
#endif
+/* _GL_ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers
+ that can be freed by passing them as the Ith argument to the
+ function F. */
+#ifndef _GL_ATTRIBUTE_DEALLOC
+# if __GNUC__ >= 11
+# define _GL_ATTRIBUTE_DEALLOC(f, i) __attribute__ ((__malloc__ (f, i)))
+# else
+# define _GL_ATTRIBUTE_DEALLOC(f, i)
+# endif
+#endif
+
+/* _GL_ATTRIBUTE_MALLOC declares that the function returns a pointer to freshly
+ allocated memory. */
+/* Applies to: functions. */
+#ifndef _GL_ATTRIBUTE_MALLOC
+# if __GNUC__ >= 3 || defined __clang__
+# define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__))
+# else
+# define _GL_ATTRIBUTE_MALLOC
+# endif
+#endif
+
/* The __attribute__ feature is available in gcc versions 2.5 and later.
The attribute __pure__ was added in gcc 2.96. */
#ifndef _GL_ATTRIBUTE_PURE
@@ -74,6 +96,30 @@ typedef struct gl_directory DIR;
/* Declare overridden functions. */
+#if @GNULIB_CLOSEDIR@
+# if @REPLACE_CLOSEDIR@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef closedir
+# define closedir rpl_closedir
+# define GNULIB_defined_closedir 1
+# endif
+_GL_FUNCDECL_RPL (closedir, int, (DIR *dirp) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (closedir, int, (DIR *dirp));
+# else
+# if !@HAVE_CLOSEDIR@
+_GL_FUNCDECL_SYS (closedir, int, (DIR *dirp) _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (closedir, int, (DIR *dirp));
+# endif
+_GL_CXXALIASWARN (closedir);
+#elif defined GNULIB_POSIXCHECK
+# undef closedir
+# if HAVE_RAW_DECL_CLOSEDIR
+_GL_WARN_ON_USE (closedir, "closedir is not portable - "
+ "use gnulib module closedir for portability");
+# endif
+#endif
+
#if @GNULIB_OPENDIR@
# if @REPLACE_OPENDIR@
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
@@ -81,20 +127,36 @@ typedef struct gl_directory DIR;
# define opendir rpl_opendir
# define GNULIB_defined_opendir 1
# endif
-_GL_FUNCDECL_RPL (opendir, DIR *, (const char *dir_name) _GL_ARG_NONNULL ((1)));
+_GL_FUNCDECL_RPL (opendir, DIR *,
+ (const char *dir_name)
+ _GL_ARG_NONNULL ((1))
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC (closedir, 1));
_GL_CXXALIAS_RPL (opendir, DIR *, (const char *dir_name));
# else
-# if !@HAVE_OPENDIR@
-_GL_FUNCDECL_SYS (opendir, DIR *, (const char *dir_name) _GL_ARG_NONNULL ((1)));
+# if !@HAVE_OPENDIR@ || __GNUC__ >= 11
+_GL_FUNCDECL_SYS (opendir, DIR *,
+ (const char *dir_name)
+ _GL_ARG_NONNULL ((1))
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC (closedir, 1));
# endif
_GL_CXXALIAS_SYS (opendir, DIR *, (const char *dir_name));
# endif
_GL_CXXALIASWARN (opendir);
-#elif defined GNULIB_POSIXCHECK
-# undef opendir
-# if HAVE_RAW_DECL_OPENDIR
+#else
+# if @GNULIB_CLOSEDIR@ && __GNUC__ >= 11 && !defined opendir
+/* For -Wmismatched-dealloc: Associate opendir with closedir or
+ rpl_closedir. */
+_GL_FUNCDECL_SYS (opendir, DIR *,
+ (const char *dir_name)
+ _GL_ARG_NONNULL ((1))
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC (closedir, 1));
+# endif
+# if defined GNULIB_POSIXCHECK
+# undef opendir
+# if HAVE_RAW_DECL_OPENDIR
_GL_WARN_ON_USE (opendir, "opendir is not portable - "
"use gnulib module opendir for portability");
+# endif
# endif
#endif
@@ -126,35 +188,12 @@ _GL_WARN_ON_USE (rewinddir, "rewinddir is not portable - "
# endif
#endif
-#if @GNULIB_CLOSEDIR@
-# if @REPLACE_CLOSEDIR@
-# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-# undef closedir
-# define closedir rpl_closedir
-# define GNULIB_defined_closedir 1
-# endif
-_GL_FUNCDECL_RPL (closedir, int, (DIR *dirp) _GL_ARG_NONNULL ((1)));
-_GL_CXXALIAS_RPL (closedir, int, (DIR *dirp));
-# else
-# if !@HAVE_CLOSEDIR@
-_GL_FUNCDECL_SYS (closedir, int, (DIR *dirp) _GL_ARG_NONNULL ((1)));
-# endif
-_GL_CXXALIAS_SYS (closedir, int, (DIR *dirp));
-# endif
-_GL_CXXALIASWARN (closedir);
-#elif defined GNULIB_POSIXCHECK
-# undef closedir
-# if HAVE_RAW_DECL_CLOSEDIR
-_GL_WARN_ON_USE (closedir, "closedir is not portable - "
- "use gnulib module closedir for portability");
-# endif
-#endif
-
#if @GNULIB_DIRFD@
/* Return the file descriptor associated with the given directory stream,
or -1 if none exists. */
# if @REPLACE_DIRFD@
-# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+/* On kLIBC, dirfd() is a macro that does not work. Undefine it. */
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE) || defined dirfd
# undef dirfd
# define dirfd rpl_dirfd
# endif
@@ -199,20 +238,33 @@ _GL_WARN_ON_USE (dirfd, "dirfd is unportable - "
# undef fdopendir
# define fdopendir rpl_fdopendir
# endif
-_GL_FUNCDECL_RPL (fdopendir, DIR *, (int fd));
+_GL_FUNCDECL_RPL (fdopendir, DIR *,
+ (int fd)
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC (closedir, 1));
_GL_CXXALIAS_RPL (fdopendir, DIR *, (int fd));
# else
-# if !@HAVE_FDOPENDIR@ || !@HAVE_DECL_FDOPENDIR@
-_GL_FUNCDECL_SYS (fdopendir, DIR *, (int fd));
+# if !@HAVE_FDOPENDIR@ || !@HAVE_DECL_FDOPENDIR@ || __GNUC__ >= 11
+_GL_FUNCDECL_SYS (fdopendir, DIR *,
+ (int fd)
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC (closedir, 1));
# endif
_GL_CXXALIAS_SYS (fdopendir, DIR *, (int fd));
# endif
_GL_CXXALIASWARN (fdopendir);
-#elif defined GNULIB_POSIXCHECK
-# undef fdopendir
-# if HAVE_RAW_DECL_FDOPENDIR
+#else
+# if @GNULIB_CLOSEDIR@ && __GNUC__ >= 11 && !defined fdopendir
+/* For -Wmismatched-dealloc: Associate fdopendir with closedir or
+ rpl_closedir. */
+_GL_FUNCDECL_SYS (fdopendir, DIR *,
+ (int fd)
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC (closedir, 1));
+# endif
+# if defined GNULIB_POSIXCHECK
+# undef fdopendir
+# if HAVE_RAW_DECL_FDOPENDIR
_GL_WARN_ON_USE (fdopendir, "fdopendir is unportable - "
"use gnulib module fdopendir for portability");
+# endif
# endif
#endif
diff --git a/gnulib/import/dirfd.c b/gnulib/import/dirfd.c
index ced7531c5e0..4104683fbf0 100644
--- a/gnulib/import/dirfd.c
+++ b/gnulib/import/dirfd.c
@@ -1,18 +1,18 @@
/* dirfd.c -- return the file descriptor associated with an open DIR*
- Copyright (C) 2001, 2006, 2008-2021 Free Software Foundation, Inc.
+ Copyright (C) 2001, 2006, 2008-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Jim Meyering. */
diff --git a/gnulib/import/dirname-lgpl.c b/gnulib/import/dirname-lgpl.c
index cfdac0391df..d54f6a910ff 100644
--- a/gnulib/import/dirname-lgpl.c
+++ b/gnulib/import/dirname-lgpl.c
@@ -1,19 +1,19 @@
/* dirname.c -- return all but the last element in a file name
- Copyright (C) 1990, 1998, 2000-2001, 2003-2006, 2009-2021 Free Software
+ Copyright (C) 1990, 1998, 2000-2001, 2003-2006, 2009-2022 Free Software
Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#include <config.h>
diff --git a/gnulib/import/dirname.h b/gnulib/import/dirname.h
index 25116ab56f4..e18a97ea1c9 100644
--- a/gnulib/import/dirname.h
+++ b/gnulib/import/dirname.h
@@ -1,26 +1,26 @@
-/* Take file names apart into directory and base names.
+/* Take file names apart into directory and base names.
- Copyright (C) 1998, 2001, 2003-2006, 2009-2021 Free Software Foundation,
- Inc.
+ Copyright (C) 1998, 2001, 2003-2006, 2009-2022 Free Software Foundation,
+ Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
#ifndef DIRNAME_H_
# define DIRNAME_H_ 1
# include <stdbool.h>
-# include <stddef.h>
+# include <stdlib.h>
# include "filename.h"
# include "basename-lgpl.h"
@@ -33,11 +33,16 @@ extern "C" {
#endif
# if GNULIB_DIRNAME
-char *base_name (char const *file) _GL_ATTRIBUTE_MALLOC;
-char *dir_name (char const *file);
+char *base_name (char const *file)
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE
+ _GL_ATTRIBUTE_RETURNS_NONNULL;
+char *dir_name (char const *file)
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE
+ _GL_ATTRIBUTE_RETURNS_NONNULL;
# endif
-char *mdir_name (char const *file);
+char *mdir_name (char const *file)
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE;
size_t dir_len (char const *file) _GL_ATTRIBUTE_PURE;
bool strip_trailing_slashes (char *file);
diff --git a/gnulib/import/dup-safer-flag.c b/gnulib/import/dup-safer-flag.c
index bba13544064..f87792a307b 100644
--- a/gnulib/import/dup-safer-flag.c
+++ b/gnulib/import/dup-safer-flag.c
@@ -1,11 +1,11 @@
/* Duplicate a file descriptor result, avoiding clobbering
STD{IN,OUT,ERR}_FILENO, with specific flags.
- Copyright (C) 2001, 2004-2006, 2009-2021 Free Software Foundation, Inc.
+ Copyright (C) 2001, 2004-2006, 2009-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
+ 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,
diff --git a/gnulib/import/dup-safer.c b/gnulib/import/dup-safer.c
index 2db1520004a..38ff74cc7e8 100644
--- a/gnulib/import/dup-safer.c
+++ b/gnulib/import/dup-safer.c
@@ -1,10 +1,10 @@
/* Invoke dup, but avoid some glitches.
- Copyright (C) 2001, 2004-2006, 2009-2021 Free Software Foundation, Inc.
+ Copyright (C) 2001, 2004-2006, 2009-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
+ 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,
diff --git a/gnulib/import/dup.c b/gnulib/import/dup.c
index 104d4827c6a..17a9c582ad5 100644
--- a/gnulib/import/dup.c
+++ b/gnulib/import/dup.c
@@ -1,18 +1,18 @@
/* Duplicate an open file descriptor.
- Copyright (C) 2011-2021 Free Software Foundation, Inc.
+ Copyright (C) 2011-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#include <config.h>
diff --git a/gnulib/import/dup2.c b/gnulib/import/dup2.c
index c4a0a29fbd0..1c766ab38ec 100644
--- a/gnulib/import/dup2.c
+++ b/gnulib/import/dup2.c
@@ -1,18 +1,18 @@
/* Duplicate an open file descriptor to a specified file descriptor.
- Copyright (C) 1999, 2004-2007, 2009-2021 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2004-2007, 2009-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* written by Paul Eggert */
diff --git a/gnulib/import/eloop-threshold.h b/gnulib/import/eloop-threshold.h
index 27d07a72960..8b314571198 100644
--- a/gnulib/import/eloop-threshold.h
+++ b/gnulib/import/eloop-threshold.h
@@ -1,18 +1,18 @@
/* Threshold at which to diagnose ELOOP. Generic version.
- Copyright (C) 2012-2021 Free Software Foundation, Inc.
+ Copyright (C) 2012-2022 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public
+ modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
- version 3 of the License, or (at your option) any later version.
+ version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
+ Lesser General Public License for more details.
- You should have received a copy of the GNU General Public
+ You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
diff --git a/gnulib/import/errno.in.h b/gnulib/import/errno.in.h
index c6ab4e88e15..3ec18456940 100644
--- a/gnulib/import/errno.in.h
+++ b/gnulib/import/errno.in.h
@@ -1,19 +1,19 @@
/* A POSIX-like <errno.h>.
- Copyright (C) 2008-2021 Free Software Foundation, Inc.
+ Copyright (C) 2008-2022 Free Software Foundation, Inc.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
#ifndef _@GUARD_PREFIX@_ERRNO_H
diff --git a/gnulib/import/error.c b/gnulib/import/error.c
index d17b5a667ef..272d45e408f 100644
--- a/gnulib/import/error.c
+++ b/gnulib/import/error.c
@@ -1,18 +1,18 @@
/* Error handler for noninteractive utilities
- Copyright (C) 1990-1998, 2000-2007, 2009-2021 Free Software Foundation, Inc.
+ Copyright (C) 1990-1998, 2000-2007, 2009-2022 Free Software Foundation, Inc.
This file is part of the GNU C 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 file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by David MacKenzie <djm@gnu.ai.mit.edu>. */
diff --git a/gnulib/import/error.h b/gnulib/import/error.h
index f65d0727c0f..45ec2a5e3d1 100644
--- a/gnulib/import/error.h
+++ b/gnulib/import/error.h
@@ -1,19 +1,19 @@
/* Declaration for error-reporting function
- Copyright (C) 1995-1997, 2003, 2006, 2008-2021 Free Software Foundation,
+ Copyright (C) 1995-1997, 2003, 2006, 2008-2022 Free Software Foundation,
Inc.
This file is part of the GNU C 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 file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#ifndef _ERROR_H
diff --git a/gnulib/import/exitfail.c b/gnulib/import/exitfail.c
index 15ce2e6cf67..84fb0eff531 100644
--- a/gnulib/import/exitfail.c
+++ b/gnulib/import/exitfail.c
@@ -1,18 +1,18 @@
/* Failure exit status
- Copyright (C) 2002-2003, 2005-2007, 2009-2021 Free Software Foundation, Inc.
+ Copyright (C) 2002-2003, 2005-2007, 2009-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#include <config.h>
diff --git a/gnulib/import/exitfail.h b/gnulib/import/exitfail.h
index 571729c611d..865f096a5ee 100644
--- a/gnulib/import/exitfail.h
+++ b/gnulib/import/exitfail.h
@@ -1,18 +1,18 @@
/* Failure exit status
- Copyright (C) 2002, 2009-2021 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2009-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
extern int volatile exit_failure;
diff --git a/gnulib/import/extra/gendocs.sh b/gnulib/import/extra/gendocs.sh
index 1872de9d56a..8dbac3021a1 100755
--- a/gnulib/import/extra/gendocs.sh
+++ b/gnulib/import/extra/gendocs.sh
@@ -2,13 +2,13 @@
# gendocs.sh -- generate a GNU manual in many formats. This script is
# mentioned in maintain.texi. See the help message below for usage details.
-scriptversion=2021-01-01.00
+scriptversion=2022-01-01.00
-# Copyright 2003-2021 Free Software Foundation, Inc.
+# Copyright 2003-2022 Free Software Foundation, Inc.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
+# 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,
@@ -58,7 +58,7 @@ EMAIL=webmasters@gnu.org # please override with --email
commonarg= # passed to all makeinfo/texi2html invcations.
dirargs= # passed to all tools (-I dir).
dirs= # -I directories.
-htmlarg="--css-ref=/software/gnulib/manual.css -c TOP_NODE_UP_URL=/manual"
+htmlarg="--css-ref=https://www.gnu.org/software/gnulib/manual.css -c TOP_NODE_UP_URL=/manual"
default_htmlarg=true
infoarg=--no-split
generate_ascii=true
@@ -73,7 +73,7 @@ texarg="-t @finalout"
version="gendocs.sh $scriptversion
-Copyright 2021 Free Software Foundation, Inc.
+Copyright 2022 Free Software Foundation, Inc.
There is NO warranty. You may redistribute this software
under the terms of the GNU General Public License.
For more information about these matters, see the files named COPYING."
@@ -202,7 +202,7 @@ base=$PACKAGE
if $default_htmlarg && test -n "$use_texi2html"; then
# The legacy texi2html doesn't support TOP_NODE_UP_URL
- htmlarg="--css-ref=/software/gnulib/manual.css"
+ htmlarg="--css-ref=https://www.gnu.org/software/gnulib/manual.css"
fi
if test -n "$srcfile"; then
diff --git a/gnulib/import/extra/gitlog-to-changelog b/gnulib/import/extra/gitlog-to-changelog
index de76f658d48..82d9f973366 100755
--- a/gnulib/import/extra/gitlog-to-changelog
+++ b/gnulib/import/extra/gitlog-to-changelog
@@ -3,7 +3,7 @@
# Convert git log output to ChangeLog format.
-# Copyright (C) 2008-2021 Free Software Foundation, Inc.
+# Copyright (C) 2008-2022 Free Software Foundation, Inc.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -35,7 +35,7 @@
eval 'exec perl -wSx "$0" "$@"'
if 0;
-my $VERSION = '2020-04-04 15:07'; # UTC
+my $VERSION = '2022-01-27 18:49'; # UTC
# The definition above must lie within the first 8 lines in order
# for the Emacs time-stamp write hook (at end) to update it.
# If you change this file with Emacs, please let the write hook
@@ -455,7 +455,8 @@ sub git_dir_option($)
# If there were any lines
if (@line == 0)
{
- warn "$ME: warning: empty commit message:\n $date_line\n";
+ warn "$ME: warning: empty commit message:\n"
+ . " commit $sha\n $date_line\n";
}
else
{
diff --git a/gnulib/import/extra/update-copyright b/gnulib/import/extra/update-copyright
index fae3a5fb33b..81b691e8570 100755
--- a/gnulib/import/extra/update-copyright
+++ b/gnulib/import/extra/update-copyright
@@ -3,11 +3,11 @@
# Update an FSF copyright year list to include the current year.
-# Copyright (C) 2009-2021 Free Software Foundation, Inc.
+# Copyright (C) 2009-2022 Free Software Foundation, Inc.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
+# the Free Software Foundation, either version 3, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful,
diff --git a/gnulib/import/fchdir.c b/gnulib/import/fchdir.c
index c6294cb9eda..99e4aa851c9 100644
--- a/gnulib/import/fchdir.c
+++ b/gnulib/import/fchdir.c
@@ -1,17 +1,17 @@
/* fchdir replacement.
- Copyright (C) 2006-2021 Free Software Foundation, Inc.
+ Copyright (C) 2006-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation, either version 3 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#include <config.h>
@@ -91,7 +91,6 @@ get_name (char const *dir)
{
char *cwd;
char *result;
- int saved_errno;
if (IS_ABSOLUTE_FILE_NAME (dir))
return strdup (dir);
@@ -102,9 +101,7 @@ get_name (char const *dir)
return cwd;
result = mfile_name_concat (cwd, dir, NULL);
- saved_errno = errno;
free (cwd);
- errno = saved_errno;
return result;
}
diff --git a/gnulib/import/fchown-stub.c b/gnulib/import/fchown-stub.c
index f549ff300a4..74df86ae72f 100644
--- a/gnulib/import/fchown-stub.c
+++ b/gnulib/import/fchown-stub.c
@@ -1,17 +1,17 @@
/* Change ownership of a file.
- Copyright (C) 2004-2021 Free Software Foundation, Inc.
+ Copyright (C) 2004-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Paul Eggert, 2004. */
diff --git a/gnulib/import/fcntl.c b/gnulib/import/fcntl.c
index 9d6b10fa303..f9753c4035f 100644
--- a/gnulib/import/fcntl.c
+++ b/gnulib/import/fcntl.c
@@ -1,18 +1,18 @@
/* Provide file descriptor control.
- Copyright (C) 2009-2021 Free Software Foundation, Inc.
+ Copyright (C) 2009-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Eric Blake <ebb9@byu.net>. */
diff --git a/gnulib/import/fcntl.in.h b/gnulib/import/fcntl.in.h
index 0b14467c54d..9270ced8973 100644
--- a/gnulib/import/fcntl.in.h
+++ b/gnulib/import/fcntl.in.h
@@ -1,18 +1,18 @@
/* Like <fcntl.h>, but with non-working flags defined to 0.
- Copyright (C) 2006-2021 Free Software Foundation, Inc.
+ Copyright (C) 2006-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* written by Paul Eggert */
@@ -435,6 +435,10 @@ _GL_WARN_ON_USE (openat, "openat is not portable - "
# define AT_EACCESS 4
#endif
+/* Ignore this flag if not supported. */
+#ifndef AT_NO_AUTOMOUNT
+# define AT_NO_AUTOMOUNT 0
+#endif
#endif /* _@GUARD_PREFIX@_FCNTL_H */
#endif /* _@GUARD_PREFIX@_FCNTL_H */
diff --git a/gnulib/import/fd-hook.c b/gnulib/import/fd-hook.c
index d8113eb63df..64a7a80c062 100644
--- a/gnulib/import/fd-hook.c
+++ b/gnulib/import/fd-hook.c
@@ -1,18 +1,18 @@
/* Hook for making file descriptor functions close(), ioctl() extensible.
- Copyright (C) 2009-2021 Free Software Foundation, Inc.
+ Copyright (C) 2009-2022 Free Software Foundation, Inc.
Written by Bruno Haible <bruno@clisp.org>, 2009.
- This program is free software: you can 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 file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#include <config.h>
diff --git a/gnulib/import/fd-hook.h b/gnulib/import/fd-hook.h
index bf1f39449d8..d6c4964d1c6 100644
--- a/gnulib/import/fd-hook.h
+++ b/gnulib/import/fd-hook.h
@@ -1,17 +1,17 @@
/* Hook for making file descriptor functions close(), ioctl() extensible.
- Copyright (C) 2009-2021 Free Software Foundation, Inc.
+ Copyright (C) 2009-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published
- by the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
diff --git a/gnulib/import/fd-safer-flag.c b/gnulib/import/fd-safer-flag.c
index bfaef4de235..2e07cb9bf08 100644
--- a/gnulib/import/fd-safer-flag.c
+++ b/gnulib/import/fd-safer-flag.c
@@ -1,11 +1,11 @@
/* Adjust a file descriptor result so that it avoids clobbering
STD{IN,OUT,ERR}_FILENO, with specific flags.
- Copyright (C) 2005-2006, 2009-2021 Free Software Foundation, Inc.
+ Copyright (C) 2005-2006, 2009-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
+ 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,
diff --git a/gnulib/import/fd-safer.c b/gnulib/import/fd-safer.c
index 487b039f0d3..e37b7b3ade3 100644
--- a/gnulib/import/fd-safer.c
+++ b/gnulib/import/fd-safer.c
@@ -1,10 +1,10 @@
/* Return a safer copy of a file descriptor.
- Copyright (C) 2005-2006, 2009-2021 Free Software Foundation, Inc.
+ Copyright (C) 2005-2006, 2009-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
+ 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,
diff --git a/gnulib/import/fdopendir.c b/gnulib/import/fdopendir.c
index 451b4e1321e..c2b0e1ed347 100644
--- a/gnulib/import/fdopendir.c
+++ b/gnulib/import/fdopendir.c
@@ -1,9 +1,9 @@
/* provide a replacement fdopendir function
- Copyright (C) 2004-2021 Free Software Foundation, Inc.
+ Copyright (C) 2004-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
+ 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,
diff --git a/gnulib/import/ffs.c b/gnulib/import/ffs.c
index 68d5d48daf2..706d284cd9c 100644
--- a/gnulib/import/ffs.c
+++ b/gnulib/import/ffs.c
@@ -1,17 +1,17 @@
/* ffs.c -- find the first set bit in a word.
- Copyright (C) 2011-2021 Free Software Foundation, Inc.
+ Copyright (C) 2011-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Eric Blake. */
diff --git a/gnulib/import/filename.h b/gnulib/import/filename.h
index 541ffec0d53..ab77ca2df91 100644
--- a/gnulib/import/filename.h
+++ b/gnulib/import/filename.h
@@ -1,18 +1,18 @@
/* Basic filename support macros.
- Copyright (C) 2001-2004, 2007-2021 Free Software Foundation, Inc.
+ Copyright (C) 2001-2022 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public
+ modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
- version 3 of the License, or (at your option) any later version.
+ version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
+ Lesser General Public License for more details.
- You should have received a copy of the GNU General Public
+ You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
diff --git a/gnulib/import/filenamecat-lgpl.c b/gnulib/import/filenamecat-lgpl.c
index 008a6407b50..56981aac169 100644
--- a/gnulib/import/filenamecat-lgpl.c
+++ b/gnulib/import/filenamecat-lgpl.c
@@ -1,18 +1,18 @@
/* Concatenate two arbitrary file names.
- Copyright (C) 1996-2007, 2009-2021 Free Software Foundation, Inc.
+ Copyright (C) 1996-2007, 2009-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Jim Meyering. */
diff --git a/gnulib/import/filenamecat.h b/gnulib/import/filenamecat.h
index 15c5cf84723..f11bd289fe1 100644
--- a/gnulib/import/filenamecat.h
+++ b/gnulib/import/filenamecat.h
@@ -1,27 +1,32 @@
/* Concatenate two arbitrary file names.
- Copyright (C) 1996-1997, 2003, 2005, 2007, 2009-2021 Free Software
+ Copyright (C) 1996-1997, 2003, 2005, 2007, 2009-2022 Free Software
Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Jim Meyering. */
+#include <stdlib.h>
+
#if GNULIB_FILENAMECAT
char *file_name_concat (char const *dir, char const *base,
- char **base_in_result);
+ char **base_in_result)
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE
+ _GL_ATTRIBUTE_RETURNS_NONNULL;
#endif
char *mfile_name_concat (char const *dir, char const *base,
- char **base_in_result);
+ char **base_in_result)
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE;
diff --git a/gnulib/import/flexmember.h b/gnulib/import/flexmember.h
index 9f6e1bf1105..1545639f754 100644
--- a/gnulib/import/flexmember.h
+++ b/gnulib/import/flexmember.h
@@ -1,20 +1,20 @@
/* Sizes of structs with flexible array members.
- Copyright 2016-2021 Free Software Foundation, Inc.
+ Copyright 2016-2022 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public
+ modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
- version 3 of the License, or (at your option) any later version.
+ version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
+ Lesser General Public License for more details.
- You should have received a copy of the GNU General Public
+ You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>.
diff --git a/gnulib/import/float+.h b/gnulib/import/float+.h
index 97c0b0aa25d..9ab45208d88 100644
--- a/gnulib/import/float+.h
+++ b/gnulib/import/float+.h
@@ -1,19 +1,19 @@
/* Supplemental information about the floating-point formats.
- Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc.
+ Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc.
Written by Bruno Haible <bruno@clisp.org>, 2007.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
#ifndef _FLOATPLUS_H
#define _FLOATPLUS_H
diff --git a/gnulib/import/float.c b/gnulib/import/float.c
index 6ef47a440eb..de8506450e5 100644
--- a/gnulib/import/float.c
+++ b/gnulib/import/float.c
@@ -1,18 +1,18 @@
/* Auxiliary definitions for <float.h>.
- Copyright (C) 2011-2021 Free Software Foundation, Inc.
+ Copyright (C) 2011-2022 Free Software Foundation, Inc.
Written by Bruno Haible <bruno@clisp.org>, 2011.
- This program is free software: you can 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 file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#include <config.h>
diff --git a/gnulib/import/float.in.h b/gnulib/import/float.in.h
index d2ac0cd26f7..a4183765dff 100644
--- a/gnulib/import/float.in.h
+++ b/gnulib/import/float.in.h
@@ -1,18 +1,18 @@
/* A correct <float.h>.
- Copyright (C) 2007-2021 Free Software Foundation, Inc.
+ Copyright (C) 2007-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#ifndef _@GUARD_PREFIX@_FLOAT_H
diff --git a/gnulib/import/fnmatch.c b/gnulib/import/fnmatch.c
index 2db2a3b3d6b..b33a127d980 100644
--- a/gnulib/import/fnmatch.c
+++ b/gnulib/import/fnmatch.c
@@ -1,17 +1,17 @@
-/* Copyright (C) 1991-2021 Free Software Foundation, Inc.
+/* Copyright (C) 1991-2022 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public
+ modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
- version 3 of the License, or (at your option) any later version.
+ version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
+ Lesser General Public License for more details.
- You should have received a copy of the GNU General Public
+ You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
@@ -64,7 +64,7 @@ extern int fnmatch (const char *pattern, const char *string, int flags);
#endif
#ifdef _LIBC
-# if (__GNUC__ >= 7) || (__clang_major__ >= 10)
+# if __GNUC__ >= 7
# define FALLTHROUGH __attribute__ ((__fallthrough__))
# else
# define FALLTHROUGH ((void) 0)
diff --git a/gnulib/import/fnmatch.in.h b/gnulib/import/fnmatch.in.h
index 4183d5eca46..a282c09f1d0 100644
--- a/gnulib/import/fnmatch.in.h
+++ b/gnulib/import/fnmatch.in.h
@@ -1,21 +1,21 @@
/* Substitute for and wrapper around <fnmatch.h>.
- Copyright (C) 1991-1993, 1996-1999, 2001-2003, 2005, 2007, 2009-2021 Free
+ Copyright (C) 1991-1993, 1996-1999, 2001-2003, 2005, 2007, 2009-2022 Free
Software Foundation, Inc.
This file is part of the GNU C 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, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
#ifndef _@GUARD_PREFIX@_FNMATCH_H
diff --git a/gnulib/import/fnmatch_loop.c b/gnulib/import/fnmatch_loop.c
index f3e572355ee..e635953758b 100644
--- a/gnulib/import/fnmatch_loop.c
+++ b/gnulib/import/fnmatch_loop.c
@@ -1,17 +1,17 @@
-/* Copyright (C) 1991-2021 Free Software Foundation, Inc.
+/* Copyright (C) 1991-2022 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public
+ modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
- version 3 of the License, or (at your option) any later version.
+ version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
+ Lesser General Public License for more details.
- You should have received a copy of the GNU General Public
+ You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
diff --git a/gnulib/import/fpucw.h b/gnulib/import/fpucw.h
index f6ed550ddcc..1921836670e 100644
--- a/gnulib/import/fpucw.h
+++ b/gnulib/import/fpucw.h
@@ -1,18 +1,18 @@
/* Manipulating the FPU control word. -*- coding: utf-8 -*-
- Copyright (C) 2007-2021 Free Software Foundation, Inc.
+ Copyright (C) 2007-2022 Free Software Foundation, Inc.
Written by Bruno Haible <bruno@clisp.org>, 2007.
- This program is free software: you can 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 file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#ifndef _FPUCW_H
diff --git a/gnulib/import/free.c b/gnulib/import/free.c
index 5c89787aba1..86ebe6c6300 100644
--- a/gnulib/import/free.c
+++ b/gnulib/import/free.c
@@ -1,33 +1,37 @@
/* Make free() preserve errno.
- Copyright (C) 2003, 2006, 2009-2021 Free Software Foundation, Inc.
+ Copyright (C) 2003, 2006, 2009-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* written by Paul Eggert */
#include <config.h>
+/* Specification. */
#include <stdlib.h>
-#include <errno.h>
+/* A function definition is only needed if HAVE_FREE_POSIX is not defined. */
+#if !HAVE_FREE_POSIX
+
+# include <errno.h>
void
rpl_free (void *p)
-#undef free
+# undef free
{
-#if defined __GNUC__ && !defined __clang__
+# if defined __GNUC__ && !defined __clang__
/* An invalid GCC optimization
<https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98396>
would optimize away the assignments in the code below, when link-time
@@ -39,9 +43,11 @@ rpl_free (void *p)
errno = 0;
free (p);
errno = err[errno == 0];
-#else
+# else
int err = errno;
free (p);
errno = err;
-#endif
+# endif
}
+
+#endif
diff --git a/gnulib/import/frexp.c b/gnulib/import/frexp.c
index 288ca66fe7b..2c15733e2a8 100644
--- a/gnulib/import/frexp.c
+++ b/gnulib/import/frexp.c
@@ -1,17 +1,17 @@
/* Split a double into fraction and mantissa.
- Copyright (C) 2007-2021 Free Software Foundation, Inc.
+ Copyright (C) 2007-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Paolo Bonzini <bonzini@gnu.org>, 2003, and
diff --git a/gnulib/import/frexpl.c b/gnulib/import/frexpl.c
index a5b1fd98e0e..55ca0109b10 100644
--- a/gnulib/import/frexpl.c
+++ b/gnulib/import/frexpl.c
@@ -1,17 +1,17 @@
/* Split a 'long double' into fraction and mantissa.
- Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc.
+ Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#include <config.h>
diff --git a/gnulib/import/fstat.c b/gnulib/import/fstat.c
index 05b9c86ef8e..3928c8602ba 100644
--- a/gnulib/import/fstat.c
+++ b/gnulib/import/fstat.c
@@ -1,17 +1,17 @@
/* fstat() replacement.
- Copyright (C) 2011-2021 Free Software Foundation, Inc.
+ Copyright (C) 2011-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* If the user's config.h happens to include <sys/stat.h>, let it include only
diff --git a/gnulib/import/fstatat.c b/gnulib/import/fstatat.c
index 640a3754309..6e8344964bc 100644
--- a/gnulib/import/fstatat.c
+++ b/gnulib/import/fstatat.c
@@ -1,10 +1,10 @@
/* Work around an fstatat bug on Solaris 9.
- Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc.
+ Copyright (C) 2006, 2009-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
+ 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,
diff --git a/gnulib/import/getcwd-lgpl.c b/gnulib/import/getcwd-lgpl.c
index e8c9e08cb33..f449ac85cdb 100644
--- a/gnulib/import/getcwd-lgpl.c
+++ b/gnulib/import/getcwd-lgpl.c
@@ -1,17 +1,17 @@
-/* Copyright (C) 2011-2021 Free Software Foundation, Inc.
+/* Copyright (C) 2011-2022 Free Software Foundation, Inc.
This file is part of gnulib.
- This program is free software: you can 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 file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#include <config.h>
@@ -69,11 +69,7 @@ rpl_getcwd (char *buf, size_t size)
}
result = getcwd (buf, size);
if (!result)
- {
- int saved_errno = errno;
- free (buf);
- errno = saved_errno;
- }
+ free (buf);
return result;
}
@@ -112,11 +108,7 @@ rpl_getcwd (char *buf, size_t size)
while (!result && errno == ERANGE);
if (!result)
- {
- int saved_errno = errno;
- free (buf);
- errno = saved_errno;
- }
+ free (buf);
else
{
/* Here result == buf. */
diff --git a/gnulib/import/getcwd.c b/gnulib/import/getcwd.c
index 6b2ac73446d..113332f1c99 100644
--- a/gnulib/import/getcwd.c
+++ b/gnulib/import/getcwd.c
@@ -1,19 +1,18 @@
-/* Copyright (C) 1991-2021 Free Software Foundation, Inc.
+/* Copyright (C) 1991-2022 Free Software Foundation, Inc.
This file is part of the GNU C Library.
- The GNU C Library is free software; you can 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 file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published
+ by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
- The GNU C Library is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
- You should have received a copy of the GNU General Public
- License along with the GNU C Library; if not, see
- <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
#if !_LIBC
# include <config.h>
diff --git a/gnulib/import/getdelim.c b/gnulib/import/getdelim.c
index 4bebc004da2..9eb0483cafa 100644
--- a/gnulib/import/getdelim.c
+++ b/gnulib/import/getdelim.c
@@ -1,19 +1,19 @@
/* getdelim.c --- Implementation of replacement getdelim function.
- Copyright (C) 1994, 1996-1998, 2001, 2003, 2005-2021 Free Software
+ Copyright (C) 1994, 1996-1998, 2001, 2003, 2005-2022 Free Software
Foundation, Inc.
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 3, or (at
- your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Ported from glibc by Simon Josefsson. */
diff --git a/gnulib/import/getdtablesize.c b/gnulib/import/getdtablesize.c
index 56eaf5d32cf..793e0f8894e 100644
--- a/gnulib/import/getdtablesize.c
+++ b/gnulib/import/getdtablesize.c
@@ -1,18 +1,18 @@
/* getdtablesize() function: Return maximum possible file descriptor value + 1.
- Copyright (C) 2008-2021 Free Software Foundation, Inc.
+ Copyright (C) 2008-2022 Free Software Foundation, Inc.
Written by Bruno Haible <bruno@clisp.org>, 2008.
- This program is free software: you can 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 file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#include <config.h>
diff --git a/gnulib/import/getline.c b/gnulib/import/getline.c
index a72cb180449..34b91177d09 100644
--- a/gnulib/import/getline.c
+++ b/gnulib/import/getline.c
@@ -1,18 +1,18 @@
/* getline.c --- Implementation of replacement getline function.
- Copyright (C) 2005-2007, 2009-2021 Free Software Foundation, Inc.
+ Copyright (C) 2005-2007, 2009-2022 Free Software Foundation, Inc.
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 3, or (at
- your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Simon Josefsson. */
diff --git a/gnulib/import/getlogin_r.c b/gnulib/import/getlogin_r.c
index f9263294673..6bdf05853ac 100644
--- a/gnulib/import/getlogin_r.c
+++ b/gnulib/import/getlogin_r.c
@@ -1,19 +1,19 @@
/* Provide a working getlogin_r for systems which lack it.
- Copyright (C) 2005-2007, 2010-2021 Free Software Foundation, Inc.
+ Copyright (C) 2005-2007, 2010-2022 Free Software Foundation, Inc.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Paul Eggert, Derek Price, and Bruno Haible. */
diff --git a/gnulib/import/getprogname.c b/gnulib/import/getprogname.c
index 500619dd16c..62a480046e9 100644
--- a/gnulib/import/getprogname.c
+++ b/gnulib/import/getprogname.c
@@ -1,17 +1,17 @@
/* Program name management.
- Copyright (C) 2016-2021 Free Software Foundation, Inc.
+ Copyright (C) 2016-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
+ it under the terms of the GNU Lesser General Public License as published by
+ the Free Software Foundation; either version 2.1 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#include <config.h>
@@ -43,7 +43,7 @@
# include <string.h>
#endif
-#ifdef __sgi
+#if defined __sgi || defined __osf__
# include <string.h>
# include <unistd.h>
# include <stdio.h>
@@ -224,11 +224,15 @@ getprogname (void)
free (buf.ps_pathptr);
}
return p;
-# elif defined __sgi /* IRIX */
+# elif defined __sgi || defined __osf__ /* IRIX or Tru64 */
char filename[50];
int fd;
- sprintf (filename, "/proc/pinfo/%d", (int) getpid ());
+ # if defined __sgi
+ sprintf (filename, "/proc/pinfo/%d", (int) getpid ());
+ # else
+ sprintf (filename, "/proc/%d", (int) getpid ());
+ # endif
fd = open (filename, O_RDONLY | O_CLOEXEC);
if (0 <= fd)
{
diff --git a/gnulib/import/getprogname.h b/gnulib/import/getprogname.h
index 502f2cd9a12..9a35e584eed 100644
--- a/gnulib/import/getprogname.h
+++ b/gnulib/import/getprogname.h
@@ -1,17 +1,17 @@
/* Program name management.
- Copyright (C) 2016-2021 Free Software Foundation, Inc.
+ Copyright (C) 2016-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
+ it under the terms of the GNU Lesser General Public License as published by
+ the Free Software Foundation; either version 2.1 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#ifndef _GL_GETPROGNAME_H
diff --git a/gnulib/import/getrandom.c b/gnulib/import/getrandom.c
index 41212fb329d..e1468730933 100644
--- a/gnulib/import/getrandom.c
+++ b/gnulib/import/getrandom.c
@@ -1,18 +1,18 @@
/* Obtain a series of random bytes.
- Copyright 2020-2021 Free Software Foundation, Inc.
+ Copyright 2020-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Paul Eggert. */
@@ -178,7 +178,11 @@ getrandom (void *buffer, size_t length, unsigned int flags)
+ (flags & GRND_NONBLOCK ? O_NONBLOCK : 0));
fd = open (randdevice[devrandom], oflags);
if (fd < 0)
- return fd;
+ {
+ if (errno == ENOENT || errno == ENOTDIR)
+ errno = ENOSYS;
+ return -1;
+ }
randfd[devrandom] = fd;
}
diff --git a/gnulib/import/gettext.h b/gnulib/import/gettext.h
index 3552157efd9..b3577a043f8 100644
--- a/gnulib/import/gettext.h
+++ b/gnulib/import/gettext.h
@@ -1,19 +1,19 @@
/* Convenience header for conditional use of GNU <libintl.h>.
- Copyright (C) 1995-1998, 2000-2002, 2004-2006, 2009-2021 Free Software
+ Copyright (C) 1995-1998, 2000-2002, 2004-2006, 2009-2022 Free Software
Foundation, Inc.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License along
- with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
#ifndef _LIBGETTEXT_H
#define _LIBGETTEXT_H 1
@@ -138,7 +138,7 @@
#define dcnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N, Category) \
npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, Category)
-#ifdef __GNUC__
+#if defined __GNUC__ || defined __clang__
__inline
#else
#ifdef __cplusplus
@@ -157,7 +157,7 @@ pgettext_aux (const char *domain,
return translation;
}
-#ifdef __GNUC__
+#if defined __GNUC__ || defined __clang__
__inline
#else
#ifdef __cplusplus
@@ -191,9 +191,8 @@ npgettext_aux (const char *domain,
or may have security implications due to non-deterministic stack usage. */
#if (!defined GNULIB_NO_VLA \
- && (((__GNUC__ >= 3 || __GNUG__ >= 2) && !defined __STRICT_ANSI__) \
- /* || (__STDC_VERSION__ == 199901L && !defined __HP_cc)
- || (__STDC_VERSION__ >= 201112L && !defined __STDC_NO_VLA__) */ ))
+ && defined __STDC_VERSION__ && 199901L <= __STDC_VERSION__ \
+ && !defined __STDC_NO_VLA__)
# define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS 1
#else
# define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS 0
@@ -208,7 +207,7 @@ npgettext_aux (const char *domain,
#define dpgettext_expr(Domainname, Msgctxt, Msgid) \
dcpgettext_expr (Domainname, Msgctxt, Msgid, LC_MESSAGES)
-#ifdef __GNUC__
+#if defined __GNUC__ || defined __clang__
__inline
#else
#ifdef __cplusplus
@@ -255,7 +254,7 @@ dcpgettext_expr (const char *domain,
#define dnpgettext_expr(Domainname, Msgctxt, Msgid, MsgidPlural, N) \
dcnpgettext_expr (Domainname, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES)
-#ifdef __GNUC__
+#if defined __GNUC__ || defined __clang__
__inline
#else
#ifdef __cplusplus
diff --git a/gnulib/import/gettimeofday.c b/gnulib/import/gettimeofday.c
index b1c93e1c3a3..36c7920afe6 100644
--- a/gnulib/import/gettimeofday.c
+++ b/gnulib/import/gettimeofday.c
@@ -1,19 +1,19 @@
/* Provide gettimeofday for systems that don't have it or for which it's broken.
- Copyright (C) 2001-2003, 2005-2007, 2009-2021 Free Software Foundation, Inc.
+ Copyright (C) 2001-2003, 2005-2007, 2009-2022 Free Software Foundation, Inc.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* written by Jim Meyering */
diff --git a/gnulib/import/glob-libc.h b/gnulib/import/glob-libc.h
index 97bf1ece357..efef63d328c 100644
--- a/gnulib/import/glob-libc.h
+++ b/gnulib/import/glob-libc.h
@@ -1,17 +1,17 @@
-/* Copyright (C) 1991-2021 Free Software Foundation, Inc.
+/* Copyright (C) 1991-2022 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public
+ modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
- version 3 of the License, or (at your option) any later version.
+ version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
+ Lesser General Public License for more details.
- You should have received a copy of the GNU General Public
+ You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
@@ -46,14 +46,14 @@ __BEGIN_DECLS
# define GLOB_ONLYDIR (1 << 13)/* Match only directories. */
# define GLOB_TILDE_CHECK (1 << 14)/* Like GLOB_TILDE but return an error
if the user name is not available. */
-# define __GLOB_FLAGS (GLOB_ERR|GLOB_MARK|GLOB_NOSORT|GLOB_DOOFFS| \
- GLOB_NOESCAPE|GLOB_NOCHECK|GLOB_APPEND| \
- GLOB_PERIOD|GLOB_ALTDIRFUNC|GLOB_BRACE| \
- GLOB_NOMAGIC|GLOB_TILDE|GLOB_ONLYDIR|GLOB_TILDE_CHECK)
+# define __GLOB_FLAGS (GLOB_ERR|GLOB_MARK|GLOB_NOSORT|GLOB_DOOFFS \
+ |GLOB_NOESCAPE|GLOB_NOCHECK|GLOB_APPEND \
+ |GLOB_PERIOD|GLOB_ALTDIRFUNC|GLOB_BRACE \
+ |GLOB_NOMAGIC|GLOB_TILDE|GLOB_ONLYDIR|GLOB_TILDE_CHECK)
#else
-# define __GLOB_FLAGS (GLOB_ERR|GLOB_MARK|GLOB_NOSORT|GLOB_DOOFFS| \
- GLOB_NOESCAPE|GLOB_NOCHECK|GLOB_APPEND| \
- GLOB_PERIOD)
+# define __GLOB_FLAGS (GLOB_ERR|GLOB_MARK|GLOB_NOSORT|GLOB_DOOFFS \
+ |GLOB_NOESCAPE|GLOB_NOCHECK|GLOB_APPEND \
+ |GLOB_PERIOD)
#endif
/* Error returns from 'glob'. */
@@ -137,25 +137,47 @@ typedef struct
#if !defined __USE_FILE_OFFSET64 || defined __GLOB_GNULIB
extern int glob (const char *__restrict __pattern, int __flags,
int (*__errfunc) (const char *, int),
- glob_t *__restrict __pglob) __THROW;
+ glob_t *__restrict __pglob) __THROWNL;
/* Free storage allocated in PGLOB by a previous 'glob' call. */
extern void globfree (glob_t *__pglob) __THROW;
#else
-extern int __REDIRECT_NTH (glob, (const char *__restrict __pattern,
- int __flags,
- int (*__errfunc) (const char *, int),
- glob_t *__restrict __pglob), glob64);
+# ifdef __USE_TIME_BITS64
+extern int __REDIRECT_NTHNL (glob, (const char *__restrict __pattern,
+ int __flags,
+ int (*__errfunc) (const char *, int),
+ glob_t *__restrict __pglob),
+ __glob64_time64);
+
+extern void __REDIRECT_NTH (globfree, (glob_t *__pglob),
+ __globfree64_time64);
+# else
+extern int __REDIRECT_NTHNL (glob, (const char *__restrict __pattern,
+ int __flags,
+ int (*__errfunc) (const char *, int),
+ glob_t *__restrict __pglob), glob64);
extern void __REDIRECT_NTH (globfree, (glob_t *__pglob), globfree64);
+# endif
#endif
#ifdef __USE_LARGEFILE64
+# ifdef __USE_TIME_BITS64
+extern int __REDIRECT_NTHNL (glob64, (const char *__restrict __pattern,
+ int __flags,
+ int (*__errfunc) (const char *, int),
+ glob64_t *__restrict __pglob),
+ __glob64_time64);
+
+extern void __REDIRECT_NTH (globfree64, (glob64_t *__pglob),
+ __globfree64_time64);
+# else
extern int glob64 (const char *__restrict __pattern, int __flags,
int (*__errfunc) (const char *, int),
- glob64_t *__restrict __pglob) __THROW;
+ glob64_t *__restrict __pglob) __THROWNL;
extern void globfree64 (glob64_t *__pglob) __THROW;
+# endif
#endif
diff --git a/gnulib/import/glob.c b/gnulib/import/glob.c
index 1bfcafb7b36..57cb3bd1d1c 100644
--- a/gnulib/import/glob.c
+++ b/gnulib/import/glob.c
@@ -1,17 +1,17 @@
-/* Copyright (C) 1991-2021 Free Software Foundation, Inc.
+/* Copyright (C) 1991-2022 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public
+ modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
- version 3 of the License, or (at your option) any later version.
+ version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
+ Lesser General Public License for more details.
- You should have received a copy of the GNU General Public
+ You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
@@ -21,13 +21,14 @@
optimizes away the pattern == NULL test below. */
# define _GL_ARG_NONNULL(params)
-# include <config.h>
+# include <libc-config.h>
#endif
#include <glob.h>
#include <errno.h>
+#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdbool.h>
@@ -56,28 +57,38 @@
# define sysconf(id) __sysconf (id)
# define closedir(dir) __closedir (dir)
# define opendir(name) __opendir (name)
+# undef dirfd
+# define dirfd(str) __dirfd (str)
# define readdir(str) __readdir64 (str)
# define getpwnam_r(name, bufp, buf, len, res) \
__getpwnam_r (name, bufp, buf, len, res)
-# define struct_stat64 struct stat64
# define FLEXIBLE_ARRAY_MEMBER
+# ifndef struct_stat
+# define struct_stat struct stat
+# endif
+# ifndef struct_stat64
+# define struct_stat64 struct stat64
+# endif
+# ifndef GLOB_LSTAT
+# define GLOB_LSTAT gl_lstat
+# endif
+# ifndef GLOB_FSTATAT64
+# define GLOB_FSTATAT64 __fstatat64
+# endif
# include <shlib-compat.h>
#else /* !_LIBC */
# define __glob glob
# define __getlogin_r(buf, len) getlogin_r (buf, len)
-# define __lstat64(fname, buf) lstat (fname, buf)
-# if defined _WIN32 && !defined __CYGWIN__
- /* Avoid GCC or clang warning. The original __stat64 macro is unused. */
-# undef __stat64
-# endif
-# define __stat64(fname, buf) stat (fname, buf)
# define __fxstatat64(_, d, f, st, flag) fstatat (d, f, st, flag)
-# define struct_stat64 struct stat
# ifndef __MVS__
# define __alloca alloca
# endif
# define __readdir readdir
# define COMPILE_GLOB64
+# define struct_stat struct stat
+# define struct_stat64 struct stat
+# define GLOB_LSTAT gl_lstat
+# define GLOB_FSTATAT64 fstatat
#endif /* _LIBC */
#include <fnmatch.h>
@@ -196,22 +207,15 @@ glob_lstat (glob_t *pglob, int flags, const char *fullname)
{
/* Use on glob-lstat-compat.c to provide a compat symbol which does not
use lstat / gl_lstat. */
-#ifdef GLOB_NO_LSTAT
-# define GL_LSTAT gl_stat
-# define LSTAT64 __stat64
-#else
-# define GL_LSTAT gl_lstat
-# define LSTAT64 __lstat64
-#endif
-
union
{
- struct stat st;
+ struct_stat st;
struct_stat64 st64;
} ust;
return (__glibc_unlikely (flags & GLOB_ALTDIRFUNC)
- ? pglob->GL_LSTAT (fullname, &ust.st)
- : LSTAT64 (fullname, &ust.st64));
+ ? pglob->GLOB_LSTAT (fullname, &ust.st)
+ : GLOB_FSTATAT64 (AT_FDCWD, fullname, &ust.st64,
+ AT_SYMLINK_NOFOLLOW));
}
/* Set *R = A + B. Return true if the answer is mathematically
@@ -249,11 +253,12 @@ static int collated_compare (const void *, const void *) __THROWNL;
static bool
is_dir (char const *filename, int flags, glob_t const *pglob)
{
- struct stat st;
+ struct_stat st;
struct_stat64 st64;
return (__glibc_unlikely (flags & GLOB_ALTDIRFUNC)
? pglob->gl_stat (filename, &st) == 0 && S_ISDIR (st.st_mode)
- : __stat64 (filename, &st64) == 0 && S_ISDIR (st64.st_mode));
+ : (GLOB_FSTATAT64 (AT_FDCWD, filename, &st64, 0) == 0
+ && S_ISDIR (st64.st_mode)));
}
/* Find the end of the sub-pattern in a brace expression. */
@@ -743,6 +748,8 @@ __glob (const char *pattern, int flags, int (*errfunc) (const char *, int),
else
{
#ifndef WINDOWS32
+ /* Recognize ~user as a shorthand for the specified user's home
+ directory. */
char *end_name = strchr (dirname, '/');
char *user_name;
int malloc_user_name = 0;
@@ -881,7 +888,22 @@ __glob (const char *pattern, int flags, int (*errfunc) (const char *, int),
}
scratch_buffer_free (&pwtmpbuf);
}
-#endif /* !WINDOWS32 */
+#else /* WINDOWS32 */
+ /* On native Windows, access to a user's home directory
+ (via GetUserProfileDirectory) or to a user's environment
+ variables (via ExpandEnvironmentStringsForUser) requires
+ the credentials of the user. Therefore we cannot support
+ the ~user syntax on this platform.
+ Handling ~user specially (and treat it like plain ~) if
+ user is getenv ("USERNAME") would not be a good idea,
+ since it would make people think that ~user is supported
+ in general. */
+ if (flags & GLOB_TILDE_CHECK)
+ {
+ retval = GLOB_NOMATCH;
+ goto out;
+ }
+#endif /* WINDOWS32 */
}
}
@@ -1262,6 +1284,8 @@ glob_in_dir (const char *pattern, const char *directory, int flags,
{
size_t dirlen = strlen (directory);
void *stream = NULL;
+ struct scratch_buffer s;
+ scratch_buffer_init (&s);
# define GLOBNAMES_MEMBERS(nnames) \
struct globnames *next; size_t count; char *name[nnames];
struct globnames { GLOBNAMES_MEMBERS (FLEXIBLE_ARRAY_MEMBER) };
@@ -1333,6 +1357,8 @@ glob_in_dir (const char *pattern, const char *directory, int flags,
}
else
{
+ DIR *dirp = stream;
+ int dfd = dirfd (dirp);
int fnm_flags = ((!(flags & GLOB_PERIOD) ? FNM_PERIOD : 0)
| ((flags & GLOB_NOESCAPE) ? FNM_NOESCAPE : 0));
flags |= GLOB_MAGCHAR;
@@ -1360,8 +1386,32 @@ glob_in_dir (const char *pattern, const char *directory, int flags,
if (flags & GLOB_ONLYDIR)
switch (readdir_result_type (d))
{
- case DT_DIR: case DT_LNK: case DT_UNKNOWN: break;
default: continue;
+ case DT_DIR: break;
+ case DT_LNK: case DT_UNKNOWN:
+ /* The filesystem was too lazy to give us a hint,
+ so we have to do it the hard way. */
+ if (__glibc_unlikely (dfd < 0 || flags & GLOB_ALTDIRFUNC))
+ {
+ size_t namelen = strlen (d.name);
+ size_t need = dirlen + 1 + namelen + 1;
+ if (s.length < need
+ && !scratch_buffer_set_array_size (&s, need, 1))
+ goto memory_error;
+ char *p = mempcpy (s.data, directory, dirlen);
+ *p = '/';
+ p += p[-1] != '/';
+ memcpy (p, d.name, namelen + 1);
+ if (! is_dir (s.data, flags, pglob))
+ continue;
+ }
+ else
+ {
+ struct_stat64 st64;
+ if (! (GLOB_FSTATAT64 (dfd, d.name, &st64, 0) == 0
+ && S_ISDIR (st64.st_mode)))
+ continue;
+ }
}
if (fnmatch (pattern, d.name, fnm_flags) == 0)
@@ -1493,5 +1543,6 @@ glob_in_dir (const char *pattern, const char *directory, int flags,
__set_errno (save);
}
+ scratch_buffer_free (&s);
return result;
}
diff --git a/gnulib/import/glob.in.h b/gnulib/import/glob.in.h
index f46ddcfd93d..a0a3156cd75 100644
--- a/gnulib/import/glob.in.h
+++ b/gnulib/import/glob.in.h
@@ -1,21 +1,21 @@
/* glob.h -- Find a path matching a pattern.
- Copyright (C) 2005-2007, 2009-2021 Free Software Foundation, Inc.
+ Copyright (C) 2005-2007, 2009-2022 Free Software Foundation, Inc.
Written by Derek Price <derek@ximbiot.com> & Paul Eggert <eggert@CS.UCLA.EDU>
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
#ifndef _@GUARD_PREFIX@_GLOB_H
@@ -70,8 +70,6 @@ typedef int (*_gl_glob_errfunc_fn) (const char *, int);
/* Preparations for including the standard GNU C Library header. */
-# include <libc-config.h>
-
# include <stddef.h>
/* On some systems, such as AIX 5.1, <sys/stat.h> does a "#define stat stat64".
@@ -79,10 +77,6 @@ typedef int (*_gl_glob_errfunc_fn) (const char *, int);
rely on 'struct stat'. */
# include <sys/stat.h>
-# ifndef __USE_GNU
-# define __USE_GNU 1
-# endif
-
# if @REPLACE_GLOB@
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# define glob rpl_glob
@@ -100,7 +94,7 @@ typedef int (*_gl_glob_errfunc_fn) (const char *, int);
/* Now the standard GNU C Library header should work. */
-# include "glob-libc.h"
+# include "glob-libc.gl.h"
#endif
diff --git a/gnulib/import/glob_internal.h b/gnulib/import/glob_internal.h
index 46df7315286..bd023927b0f 100644
--- a/gnulib/import/glob_internal.h
+++ b/gnulib/import/glob_internal.h
@@ -1,18 +1,18 @@
/* Shared definition for glob and glob_pattern_p.
- Copyright (C) 2017-2021 Free Software Foundation, Inc.
+ Copyright (C) 2017-2022 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public
+ modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
- version 3 of the License, or (at your option) any later version.
+ version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
+ Lesser General Public License for more details.
- You should have received a copy of the GNU General Public
+ You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
diff --git a/gnulib/import/glob_pattern_p.c b/gnulib/import/glob_pattern_p.c
index e6a3bc7c584..4044a508462 100644
--- a/gnulib/import/glob_pattern_p.c
+++ b/gnulib/import/glob_pattern_p.c
@@ -1,18 +1,18 @@
/* Return nonzero if PATTERN contains any metacharacters.
- Copyright (C) 2017-2021 Free Software Foundation, Inc.
+ Copyright (C) 2017-2022 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public
+ modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
- version 3 of the License, or (at your option) any later version.
+ version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
+ Lesser General Public License for more details.
- You should have received a copy of the GNU General Public
+ You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
diff --git a/gnulib/import/globfree.c b/gnulib/import/globfree.c
index 2dfdb70a18e..f034becfb43 100644
--- a/gnulib/import/globfree.c
+++ b/gnulib/import/globfree.c
@@ -1,18 +1,18 @@
/* Frees the dynamically allocated storage from an earlier call to glob.
- Copyright (C) 2017-2021 Free Software Foundation, Inc.
+ Copyright (C) 2017-2022 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public
+ modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
- version 3 of the License, or (at your option) any later version.
+ version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
+ Lesser General Public License for more details.
- You should have received a copy of the GNU General Public
+ You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
diff --git a/gnulib/import/glthread/lock.c b/gnulib/import/glthread/lock.c
index 83f75659b11..b650c219303 100644
--- a/gnulib/import/glthread/lock.c
+++ b/gnulib/import/glthread/lock.c
@@ -1,18 +1,18 @@
/* Locking in multithreaded situations.
- Copyright (C) 2005-2021 Free Software Foundation, Inc.
+ Copyright (C) 2005-2022 Free Software Foundation, Inc.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Bruno Haible <bruno@clisp.org>, 2005.
Based on GCC's gthr-posix.h, gthr-posix95.h. */
diff --git a/gnulib/import/glthread/lock.h b/gnulib/import/glthread/lock.h
index fe43d6e38f1..47eed8fea33 100644
--- a/gnulib/import/glthread/lock.h
+++ b/gnulib/import/glthread/lock.h
@@ -1,18 +1,18 @@
/* Locking in multithreaded situations.
- Copyright (C) 2005-2021 Free Software Foundation, Inc.
+ Copyright (C) 2005-2022 Free Software Foundation, Inc.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Bruno Haible <bruno@clisp.org>, 2005.
Based on GCC's gthr-posix.h, gthr-posix95.h, gthr-win32.h. */
@@ -81,7 +81,9 @@
#include <stdlib.h>
#if !defined c11_threads_in_use
-# if HAVE_THREADS_H && USE_POSIX_THREADS_WEAK
+# if HAVE_THREADS_H && USE_POSIX_THREADS_FROM_LIBC
+# define c11_threads_in_use() 1
+# elif HAVE_THREADS_H && USE_POSIX_THREADS_WEAK
# include <threads.h>
# pragma weak thrd_exit
# define c11_threads_in_use() (thrd_exit != NULL)
diff --git a/gnulib/import/glthread/threadlib.c b/gnulib/import/glthread/threadlib.c
index 373806ee276..88a76bad78a 100644
--- a/gnulib/import/glthread/threadlib.c
+++ b/gnulib/import/glthread/threadlib.c
@@ -1,18 +1,18 @@
/* Multithreading primitives.
- Copyright (C) 2005-2021 Free Software Foundation, Inc.
+ Copyright (C) 2005-2022 Free Software Foundation, Inc.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Bruno Haible <bruno@clisp.org>, 2005. */
diff --git a/gnulib/import/hard-locale.c b/gnulib/import/hard-locale.c
index ccb75eed74c..f7fbc470b15 100644
--- a/gnulib/import/hard-locale.c
+++ b/gnulib/import/hard-locale.c
@@ -1,19 +1,19 @@
/* hard-locale.c -- Determine whether a locale is hard.
- Copyright (C) 1997-1999, 2002-2004, 2006-2007, 2009-2021 Free Software
+ Copyright (C) 1997-1999, 2002-2004, 2006-2007, 2009-2022 Free Software
Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#include <config.h>
diff --git a/gnulib/import/hard-locale.h b/gnulib/import/hard-locale.h
index af09e26f53d..6066f4ed447 100644
--- a/gnulib/import/hard-locale.h
+++ b/gnulib/import/hard-locale.h
@@ -1,18 +1,18 @@
/* Determine whether a locale is hard.
- Copyright (C) 1999, 2003-2004, 2009-2021 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2003-2004, 2009-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#ifndef HARD_LOCALE_H_
diff --git a/gnulib/import/idx.h b/gnulib/import/idx.h
index 681c8c90f10..c3669ddaca8 100644
--- a/gnulib/import/idx.h
+++ b/gnulib/import/idx.h
@@ -1,18 +1,18 @@
/* A type for indices and sizes.
- Copyright (C) 2020-2021 Free Software Foundation, Inc.
+ Copyright (C) 2020-2022 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public
+ modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
- version 3 of the License, or (at your option) any later version.
+ version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
+ Lesser General Public License for more details.
- You should have received a copy of the GNU General Public
+ You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
@@ -56,6 +56,26 @@
* Because 'size_t' is an unsigned type, and a signed type is better.
See above.
+ Why not use 'ssize_t'?
+
+ * 'ptrdiff_t' is more portable; it is standardized by ISO C
+ whereas 'ssize_t' is standardized only by POSIX.
+
+ * 'ssize_t' is not required to be as wide as 'size_t', and some
+ now-obsolete POSIX platforms had 'size_t' wider than 'ssize_t'.
+
+ * Conversely, some now-obsolete platforms had 'ptrdiff_t' wider
+ than 'size_t', which can be a win and conforms to POSIX.
+
+ Won't this cause a problem with objects larger than PTRDIFF_MAX?
+
+ * Typical modern or large platforms do not allocate such objects,
+ so this is not much of a problem in practice; for example, you
+ can safely write 'idx_t len = strlen (s);'. To port to older
+ small platforms where allocations larger than PTRDIFF_MAX could
+ in theory be a problem, you can use Gnulib's ialloc module, or
+ functions like ximalloc in Gnulib's xalloc module.
+
Why not use 'ptrdiff_t' directly?
* Maintainability: When reading and modifying code, it helps to know that
diff --git a/gnulib/import/inet_ntop.c b/gnulib/import/inet_ntop.c
index 9414db19e30..2d401d22bfa 100644
--- a/gnulib/import/inet_ntop.c
+++ b/gnulib/import/inet_ntop.c
@@ -1,19 +1,19 @@
/* inet_ntop.c -- convert IPv4 and IPv6 addresses from binary to text form
- Copyright (C) 2005-2006, 2008-2021 Free Software Foundation, Inc.
+ Copyright (C) 2005-2006, 2008-2022 Free Software Foundation, Inc.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
/*
* Copyright (c) 1996-1999 by Internet Software Consortium.
diff --git a/gnulib/import/intprops.h b/gnulib/import/intprops.h
index 2a420ac8319..d4a917f72a0 100644
--- a/gnulib/import/intprops.h
+++ b/gnulib/import/intprops.h
@@ -1,21 +1,20 @@
/* intprops.h -- properties of integer types
- Copyright (C) 2001-2021 Free Software Foundation, Inc.
+ Copyright (C) 2001-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published
- by the Free Software Foundation; either version 3 of the License, or
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 2.1 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
-/* Written by Paul Eggert. */
#ifndef _GL_INTPROPS_H
#define _GL_INTPROPS_H
@@ -133,7 +132,8 @@
operators might not yield numerically correct answers due to
arithmetic overflow. They do not rely on undefined or
implementation-defined behavior. Their implementations are simple
- and straightforward, but they are a bit harder to use than the
+ and straightforward, but they are harder to use and may be less
+ efficient than the INT_<op>_WRAPV, INT_<op>_OK, and
INT_<op>_OVERFLOW macros described below.
Example usage:
@@ -158,6 +158,9 @@
must have minimum value MIN and maximum MAX. Unsigned types should
use a zero MIN of the proper type.
+ Because all arguments are subject to integer promotions, these
+ macros typically do not work on types narrower than 'int'.
+
These macros are tuned for constant MIN and MAX. For commutative
operations such as A + B, they are also tuned for constant B. */
@@ -226,18 +229,22 @@
/* True if __builtin_add_overflow (A, B, P) and __builtin_sub_overflow
(A, B, P) work when P is non-null. */
+#ifdef __EDG__
+/* EDG-based compilers like nvc 22.1 cannot add 64-bit signed to unsigned
+ <https://bugs.gnu.org/53256>. */
+# define _GL_HAS_BUILTIN_ADD_OVERFLOW 0
+#elif defined __has_builtin
+# define _GL_HAS_BUILTIN_ADD_OVERFLOW __has_builtin (__builtin_add_overflow)
/* __builtin_{add,sub}_overflow exists but is not reliable in GCC 5.x and 6.x,
see <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98269>. */
-#if 7 <= __GNUC__ && !defined __ICC
+#elif 7 <= __GNUC__
# define _GL_HAS_BUILTIN_ADD_OVERFLOW 1
-#elif defined __has_builtin
-# define _GL_HAS_BUILTIN_ADD_OVERFLOW __has_builtin (__builtin_add_overflow)
#else
# define _GL_HAS_BUILTIN_ADD_OVERFLOW 0
#endif
/* True if __builtin_mul_overflow (A, B, P) works when P is non-null. */
-#ifdef __clang__
+#if defined __clang_major__ && __clang_major__ < 14
/* Work around Clang bug <https://bugs.llvm.org/show_bug.cgi?id=16404>. */
# define _GL_HAS_BUILTIN_MUL_OVERFLOW 0
#else
@@ -246,9 +253,8 @@
/* True if __builtin_add_overflow_p (A, B, C) works, and similarly for
__builtin_sub_overflow_p and __builtin_mul_overflow_p. */
-#if defined __clang__ || defined __ICC
-/* Clang 11 lacks __builtin_mul_overflow_p, and even if it did it
- would presumably run afoul of Clang bug 16404. ICC 2021.1's
+#ifdef __EDG__
+/* In EDG-based compilers like ICC 2021.3 and earlier,
__builtin_add_overflow_p etc. are not treated as integral constant
expressions even when all arguments are. */
# define _GL_HAS_BUILTIN_OVERFLOW_P 0
@@ -339,9 +345,15 @@
arguments should not have side effects.
The WRAPV macros are not constant expressions. They support only
- +, binary -, and *. Because the WRAPV macros convert the result,
- they report overflow in different circumstances than the OVERFLOW
- macros do.
+ +, binary -, and *.
+
+ Because the WRAPV macros convert the result, they report overflow
+ in different circumstances than the OVERFLOW macros do. For
+ example, in the typical case with 16-bit 'short' and 32-bit 'int',
+ if A, B and R are all of type 'short' then INT_ADD_OVERFLOW (A, B)
+ returns false because the addition cannot overflow after A and B
+ are converted to 'int', whereas INT_ADD_WRAPV (A, B, &R) returns
+ true or false depending on whether the sum fits into 'short'.
These macros are tuned for their last input argument being a constant.
@@ -391,7 +403,7 @@
#if _GL_HAS_BUILTIN_MUL_OVERFLOW
# if ((9 < __GNUC__ + (3 <= __GNUC_MINOR__) \
|| (__GNUC__ == 8 && 4 <= __GNUC_MINOR__)) \
- && !defined __ICC)
+ && !defined __EDG__)
# define INT_MULTIPLY_WRAPV(a, b, r) __builtin_mul_overflow (a, b, r)
# else
/* Work around GCC bug 91450. */
diff --git a/gnulib/import/inttypes.in.h b/gnulib/import/inttypes.in.h
index e9ee500e3e6..853eca087c5 100644
--- a/gnulib/import/inttypes.in.h
+++ b/gnulib/import/inttypes.in.h
@@ -1,18 +1,18 @@
-/* Copyright (C) 2006-2021 Free Software Foundation, Inc.
+/* Copyright (C) 2006-2022 Free Software Foundation, Inc.
Written by Paul Eggert, Bruno Haible, Derek Price.
This file is part of gnulib.
- This program is free software: you can 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 file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/*
diff --git a/gnulib/import/isblank.c b/gnulib/import/isblank.c
index 44a9a20e3f5..e3545593780 100644
--- a/gnulib/import/isblank.c
+++ b/gnulib/import/isblank.c
@@ -1,18 +1,18 @@
/* Test whether a character is a blank.
- Copyright (C) 2009-2021 Free Software Foundation, Inc.
+ Copyright (C) 2009-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#include <config.h>
diff --git a/gnulib/import/isnan.c b/gnulib/import/isnan.c
index 434e5df4972..bd119f691c1 100644
--- a/gnulib/import/isnan.c
+++ b/gnulib/import/isnan.c
@@ -1,17 +1,17 @@
/* Test for NaN that does not need libm.
- Copyright (C) 2007-2021 Free Software Foundation, Inc.
+ Copyright (C) 2007-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Bruno Haible <bruno@clisp.org>, 2007. */
diff --git a/gnulib/import/isnand-nolibm.h b/gnulib/import/isnand-nolibm.h
index c299130a368..aad1391595e 100644
--- a/gnulib/import/isnand-nolibm.h
+++ b/gnulib/import/isnand-nolibm.h
@@ -1,17 +1,17 @@
/* Test for NaN that does not need libm.
- Copyright (C) 2007-2021 Free Software Foundation, Inc.
+ Copyright (C) 2007-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#if HAVE_ISNAND_IN_LIBC
diff --git a/gnulib/import/isnand.c b/gnulib/import/isnand.c
index 3c7e8e8296b..26501b5d636 100644
--- a/gnulib/import/isnand.c
+++ b/gnulib/import/isnand.c
@@ -1,17 +1,17 @@
/* Test for NaN that does not need libm.
- Copyright (C) 2008-2021 Free Software Foundation, Inc.
+ Copyright (C) 2008-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Bruno Haible <bruno@clisp.org>, 2008. */
diff --git a/gnulib/import/isnanl-nolibm.h b/gnulib/import/isnanl-nolibm.h
index f9f5efd7860..a4374e70dc4 100644
--- a/gnulib/import/isnanl-nolibm.h
+++ b/gnulib/import/isnanl-nolibm.h
@@ -1,17 +1,17 @@
/* Test for NaN that does not need libm.
- Copyright (C) 2007-2021 Free Software Foundation, Inc.
+ Copyright (C) 2007-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#if HAVE_ISNANL_IN_LIBC
diff --git a/gnulib/import/isnanl.c b/gnulib/import/isnanl.c
index 5dc9cb76721..2f71d6c3e1e 100644
--- a/gnulib/import/isnanl.c
+++ b/gnulib/import/isnanl.c
@@ -1,17 +1,17 @@
/* Test for NaN that does not need libm.
- Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc.
+ Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Bruno Haible <bruno@clisp.org>, 2007. */
diff --git a/gnulib/import/itold.c b/gnulib/import/itold.c
index 9a6682d4851..fe4a384237c 100644
--- a/gnulib/import/itold.c
+++ b/gnulib/import/itold.c
@@ -1,18 +1,18 @@
/* Replacement for 'int' to 'long double' conversion routine.
- Copyright (C) 2011-2021 Free Software Foundation, Inc.
+ Copyright (C) 2011-2022 Free Software Foundation, Inc.
Written by Bruno Haible <bruno@clisp.org>, 2011.
- This program is free software: you can 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 file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#include <config.h>
diff --git a/gnulib/import/lc-charset-dispatch.c b/gnulib/import/lc-charset-dispatch.c
index 879f71ad012..66d78fd3e80 100644
--- a/gnulib/import/lc-charset-dispatch.c
+++ b/gnulib/import/lc-charset-dispatch.c
@@ -1,17 +1,17 @@
/* Dispatching based on the current locale's character encoding.
- Copyright (C) 2018-2021 Free Software Foundation, Inc.
+ Copyright (C) 2018-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Bruno Haible <bruno@clisp.org>, 2018. */
@@ -26,7 +26,7 @@
# include "localcharset.h"
# include "streq.h"
-# if GNULIB_WCHAR_SINGLE
+# if GNULIB_WCHAR_SINGLE_LOCALE
/* When we know that the locale does not change, provide a speedup by
caching the value of locale_encoding_classification. */
# define locale_encoding_classification_cached locale_encoding_classification
@@ -35,7 +35,7 @@
# define locale_encoding_classification_uncached locale_encoding_classification
# endif
-# if GNULIB_WCHAR_SINGLE
+# if GNULIB_WCHAR_SINGLE_LOCALE
static inline
# endif
enc_t
@@ -59,7 +59,7 @@ locale_encoding_classification_uncached (void)
return enc_other;
}
-# if GNULIB_WCHAR_SINGLE
+# if GNULIB_WCHAR_SINGLE_LOCALE
static int cached_locale_enc = -1;
diff --git a/gnulib/import/lc-charset-dispatch.h b/gnulib/import/lc-charset-dispatch.h
index 9c308fedaee..3867c3232ba 100644
--- a/gnulib/import/lc-charset-dispatch.h
+++ b/gnulib/import/lc-charset-dispatch.h
@@ -1,17 +1,17 @@
/* Dispatching based on the current locale's character encoding.
- Copyright (C) 2018-2021 Free Software Foundation, Inc.
+ Copyright (C) 2018-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Bruno Haible <bruno@clisp.org>, 2018. */
diff --git a/gnulib/import/libc-config.h b/gnulib/import/libc-config.h
index e3571ee4c94..8fec4893787 100644
--- a/gnulib/import/libc-config.h
+++ b/gnulib/import/libc-config.h
@@ -1,18 +1,18 @@
/* System definitions for code taken from the GNU C Library
- Copyright 2017-2021 Free Software Foundation, Inc.
+ Copyright 2017-2022 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public
+ modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
- version 3 of the License, or (at your option) any later version.
+ version 2.1 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
+ Lesser General Public License for more details.
- You should have received a copy of the GNU General Public
+ You should have received a copy of the GNU Lesser General Public
License along with this program; if not, see
<https://www.gnu.org/licenses/>. */
@@ -28,14 +28,17 @@
When compiled as part of glibc this is a no-op; when compiled as
part of Gnulib this includes Gnulib's <config.h> and defines macros
- that glibc library code would normally assume. */
+ that glibc library code would normally assume.
+
+ Note: This header file MUST NOT be included by public header files
+ of Gnulib. */
#include <config.h>
/* On glibc this includes <features.h> and <sys/cdefs.h> and #defines
- _FEATURES_H, __WORDSIZE, and __set_errno. On FreeBSD 11 it
- includes <sys/cdefs.h> which defines __nonnull. Elsewhere it
- is harmless. */
+ _FEATURES_H, __WORDSIZE, and __set_errno. On FreeBSD 11 and
+ DragonFlyBSD 5.9 it includes <sys/cdefs.h> which defines __nonnull.
+ Elsewhere it is harmless. */
#include <errno.h>
/* From glibc <errno.h>. */
@@ -71,24 +74,18 @@
# endif
#endif
-#ifndef __glibc_likely
-/* <sys/cdefs.h> either does not exist, or predates glibc commit
- 2012-12-28T06:33:01Z!siddhesh@redhat.com
- (91998e449e0ce758db55aecf2abc3ee510fcbc8f)
- and so does not suffice for Gnulib. Prepare to include <cdefs.h>,
- which is Gnulib's copy of a more-recent glibc <sys/cdefs.h>. */
+#ifndef __attribute_nonnull__
+/* <sys/cdefs.h> either does not exist, or is too old for Gnulib.
+ Prepare to include <cdefs.h>, which is Gnulib's version of a
+ more-recent glibc <sys/cdefs.h>. */
/* Define _FEATURES_H so that <cdefs.h> does not include <features.h>. */
# ifndef _FEATURES_H
# define _FEATURES_H 1
# endif
-/* Define __WORDSIZE so that <cdefs.h> does not attempt to include
- nonexistent files. Make it a syntax error, since Gnulib does not
- use __WORDSIZE now, and if Gnulib uses it later the syntax error
- will let us know that __WORDSIZE needs configuring. */
-# ifndef __WORDSIZE
-# define __WORDSIZE %%%
-# endif
+/* Define __GNULIB_CDEFS so that <cdefs.h> does not attempt to include
+ nonexistent files. */
+# define __GNULIB_CDEFS
/* Undef the macros unconditionally defined by our copy of glibc
<sys/cdefs.h>, so that they do not clash with any system-defined
versions. */
@@ -120,6 +117,9 @@
# undef __THROW
# undef __THROWNL
# undef __attr_access
+# undef __attr_access_none
+# undef __attr_dealloc
+# undef __attr_dealloc_free
# undef __attribute__
# undef __attribute_alloc_size__
# undef __attribute_artificial__
@@ -144,9 +144,9 @@
# undef __flexarr
# undef __fortify_function
# undef __glibc_c99_flexarr_available
-# undef __glibc_clang_has_attribute
-# undef __glibc_clang_has_builtin
-# undef __glibc_clang_has_extension
+# undef __glibc_has_attribute
+# undef __glibc_has_builtin
+# undef __glibc_has_extension
# undef __glibc_macro_warning
# undef __glibc_macro_warning1
# undef __glibc_objsize
diff --git a/gnulib/import/limits.in.h b/gnulib/import/limits.in.h
index 076ab9ef548..b77bf75c5fe 100644
--- a/gnulib/import/limits.in.h
+++ b/gnulib/import/limits.in.h
@@ -1,19 +1,19 @@
/* A GNU-like <limits.h>.
- Copyright 2016-2021 Free Software Foundation, Inc.
+ Copyright 2016-2022 Free Software Foundation, Inc.
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License
- as published by the Free Software Foundation; either version 3, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
#if __GNUC__ >= 3
@PRAGMA_SYSTEM_HEADER@
@@ -99,10 +99,11 @@
# endif
#endif
-/* Macros specified by ISO/IEC TS 18661-1:2014. */
+/* Macros specified by C2x and by ISO/IEC TS 18661-1:2014. */
#if (! defined ULLONG_WIDTH \
- && (defined _GNU_SOURCE || defined __STDC_WANT_IEC_60559_BFP_EXT__))
+ && (defined _GNU_SOURCE || defined __STDC_WANT_IEC_60559_BFP_EXT__ \
+ || (defined __STDC_VERSION__ && 201710 < __STDC_VERSION__)))
# define CHAR_WIDTH _GL_INTEGER_WIDTH (CHAR_MIN, CHAR_MAX)
# define SCHAR_WIDTH _GL_INTEGER_WIDTH (SCHAR_MIN, SCHAR_MAX)
# define UCHAR_WIDTH _GL_INTEGER_WIDTH (0, UCHAR_MAX)
@@ -114,7 +115,16 @@
# define ULONG_WIDTH _GL_INTEGER_WIDTH (0, ULONG_MAX)
# define LLONG_WIDTH _GL_INTEGER_WIDTH (LLONG_MIN, LLONG_MAX)
# define ULLONG_WIDTH _GL_INTEGER_WIDTH (0, ULLONG_MAX)
-#endif /* !ULLONG_WIDTH && (_GNU_SOURCE || __STDC_WANT_IEC_60559_BFP_EXT__) */
+#endif
+
+/* Macros specified by C2x. */
+
+#if (! defined BOOL_WIDTH \
+ && (defined _GNU_SOURCE \
+ || (defined __STDC_VERSION__ && 201710 < __STDC_VERSION__)))
+# define BOOL_MAX 1
+# define BOOL_WIDTH 1
+#endif
#endif /* _@GUARD_PREFIX@_LIMITS_H */
#endif /* _@GUARD_PREFIX@_LIMITS_H */
diff --git a/gnulib/import/listen.c b/gnulib/import/listen.c
index 0645e2ee6cc..e67bdc9e9fd 100644
--- a/gnulib/import/listen.c
+++ b/gnulib/import/listen.c
@@ -1,18 +1,18 @@
/* listen.c --- wrappers for Windows listen function
- Copyright (C) 2008-2021 Free Software Foundation, Inc.
+ Copyright (C) 2008-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Paolo Bonzini */
diff --git a/gnulib/import/localcharset.c b/gnulib/import/localcharset.c
index cba0e2b2078..17a4a1efa03 100644
--- a/gnulib/import/localcharset.c
+++ b/gnulib/import/localcharset.c
@@ -1,19 +1,19 @@
/* Determine a canonical name for the current locale's character encoding.
- Copyright (C) 2000-2006, 2008-2021 Free Software Foundation, Inc.
+ Copyright (C) 2000-2006, 2008-2022 Free Software Foundation, Inc.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License along
- with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Bruno Haible <bruno@clisp.org>. */
diff --git a/gnulib/import/localcharset.h b/gnulib/import/localcharset.h
index 6e664940200..62efbf329c6 100644
--- a/gnulib/import/localcharset.h
+++ b/gnulib/import/localcharset.h
@@ -1,19 +1,19 @@
/* Determine a canonical name for the current locale's character encoding.
- Copyright (C) 2000-2003, 2009-2021 Free Software Foundation, Inc.
+ Copyright (C) 2000-2003, 2009-2022 Free Software Foundation, Inc.
This file is part of the GNU CHARSET Library.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License along
- with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
#ifndef _LOCALCHARSET_H
#define _LOCALCHARSET_H
diff --git a/gnulib/import/locale.in.h b/gnulib/import/locale.in.h
index df8474798c2..4aef74d4872 100644
--- a/gnulib/import/locale.in.h
+++ b/gnulib/import/locale.in.h
@@ -1,17 +1,17 @@
/* A POSIX <locale.h>.
- Copyright (C) 2007-2021 Free Software Foundation, Inc.
+ Copyright (C) 2007-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#if __GNUC__ >= 3
@@ -211,7 +211,7 @@ _GL_WARN_ON_USE (setlocale, "setlocale works differently on native Windows - "
# include "setlocale_null.h"
#endif
-#if /*@GNULIB_NEWLOCALE@ ||*/ (@GNULIB_LOCALENAME@ && @HAVE_NEWLOCALE@)
+#if /*@GNULIB_NEWLOCALE@ ||*/ (@GNULIB_LOCALENAME@ && @LOCALENAME_ENHANCE_LOCALE_FUNCS@ && @HAVE_NEWLOCALE@)
# if @REPLACE_NEWLOCALE@
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# undef newlocale
@@ -244,7 +244,7 @@ _GL_WARN_ON_USE (newlocale, "newlocale is not portable");
# endif
#endif
-#if @GNULIB_DUPLOCALE@ || (@GNULIB_LOCALENAME@ && @HAVE_DUPLOCALE@)
+#if @GNULIB_DUPLOCALE@ || (@GNULIB_LOCALENAME@ && @LOCALENAME_ENHANCE_LOCALE_FUNCS@ && @HAVE_DUPLOCALE@)
# if @REPLACE_DUPLOCALE@
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# undef duplocale
@@ -274,7 +274,7 @@ _GL_WARN_ON_USE (duplocale, "duplocale is buggy on some glibc systems - "
# endif
#endif
-#if /*@GNULIB_FREELOCALE@ ||*/ (@GNULIB_LOCALENAME@ && @HAVE_FREELOCALE@)
+#if /*@GNULIB_FREELOCALE@ ||*/ (@GNULIB_LOCALENAME@ && @LOCALENAME_ENHANCE_LOCALE_FUNCS@ && @HAVE_FREELOCALE@)
# if @REPLACE_FREELOCALE@
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# undef freelocale
diff --git a/gnulib/import/lstat.c b/gnulib/import/lstat.c
index a584c6aa069..472bfbceb93 100644
--- a/gnulib/import/lstat.c
+++ b/gnulib/import/lstat.c
@@ -1,18 +1,18 @@
/* Work around a bug of lstat on some systems
- Copyright (C) 1997-2006, 2008-2021 Free Software Foundation, Inc.
+ Copyright (C) 1997-2006, 2008-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* written by Jim Meyering */
diff --git a/gnulib/import/m4/00gnulib.m4 b/gnulib/import/m4/00gnulib.m4
index 9ba1743e652..dea34e8341d 100644
--- a/gnulib/import/m4/00gnulib.m4
+++ b/gnulib/import/m4/00gnulib.m4
@@ -1,5 +1,5 @@
# 00gnulib.m4 serial 8
-dnl Copyright (C) 2009-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2009-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/__inline.m4 b/gnulib/import/m4/__inline.m4
index b28cc6abc51..fbe2098e86a 100644
--- a/gnulib/import/m4/__inline.m4
+++ b/gnulib/import/m4/__inline.m4
@@ -1,5 +1,5 @@
# Test for __inline keyword
-dnl Copyright 2017-2021 Free Software Foundation, Inc.
+dnl Copyright 2017-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/absolute-header.m4 b/gnulib/import/m4/absolute-header.m4
index 52d80d0428e..67d6507c3e6 100644
--- a/gnulib/import/m4/absolute-header.m4
+++ b/gnulib/import/m4/absolute-header.m4
@@ -1,5 +1,5 @@
# absolute-header.m4 serial 17
-dnl Copyright (C) 2006-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2006-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/alloca.m4 b/gnulib/import/m4/alloca.m4
index ba2f679d8e0..dc6f47e3306 100644
--- a/gnulib/import/m4/alloca.m4
+++ b/gnulib/import/m4/alloca.m4
@@ -1,5 +1,5 @@
-# alloca.m4 serial 20
-dnl Copyright (C) 2002-2004, 2006-2007, 2009-2021 Free Software Foundation,
+# alloca.m4 serial 21
+dnl Copyright (C) 2002-2004, 2006-2007, 2009-2022 Free Software Foundation,
dnl Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
@@ -26,17 +26,15 @@ AC_DEFUN([gl_FUNC_ALLOCA],
AC_DEFINE([HAVE_ALLOCA], [1],
[Define to 1 if you have 'alloca' after including <alloca.h>,
a header that may be supplied by this distribution.])
- ALLOCA_H=alloca.h
+ GL_GENERATE_ALLOCA_H=true
else
dnl alloca exists as a library function, i.e. it is slow and probably
dnl a memory leak. Don't define HAVE_ALLOCA in this case.
- ALLOCA_H=
+ GL_GENERATE_ALLOCA_H=false
fi
else
- ALLOCA_H=alloca.h
+ GL_GENERATE_ALLOCA_H=true
fi
- AC_SUBST([ALLOCA_H])
- AM_CONDITIONAL([GL_GENERATE_ALLOCA_H], [test -n "$ALLOCA_H"])
if test $ac_cv_working_alloca_h = yes; then
HAVE_ALLOCA_H=1
diff --git a/gnulib/import/m4/arpa_inet_h.m4 b/gnulib/import/m4/arpa_inet_h.m4
index c4e386d1f8f..057e13fc424 100644
--- a/gnulib/import/m4/arpa_inet_h.m4
+++ b/gnulib/import/m4/arpa_inet_h.m4
@@ -1,15 +1,15 @@
-# arpa_inet_h.m4 serial 14
-dnl Copyright (C) 2006, 2008-2021 Free Software Foundation, Inc.
+# arpa_inet_h.m4 serial 17
+dnl Copyright (C) 2006, 2008-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl Written by Simon Josefsson and Bruno Haible
-AC_DEFUN([gl_HEADER_ARPA_INET],
+AC_DEFUN_ONCE([gl_ARPA_INET_H],
[
- dnl Use AC_REQUIRE here, so that the default behavior below is expanded
- dnl once only, before all statements that occur in other macros.
+ dnl Ensure to expand the default settings once only, before all statements
+ dnl that occur in other macros.
AC_REQUIRE([gl_ARPA_INET_H_DEFAULTS])
AC_CHECK_HEADERS_ONCE([arpa/inet.h])
@@ -40,17 +40,32 @@ AC_DEFUN([gl_HEADER_ARPA_INET],
]], [inet_ntop inet_pton])
])
+# gl_ARPA_INET_MODULE_INDICATOR([modulename])
+# sets the shell variable that indicates the presence of the given module
+# to a C preprocessor expression that will evaluate to 1.
+# This macro invocation must not occur in macros that are AC_REQUIREd.
AC_DEFUN([gl_ARPA_INET_MODULE_INDICATOR],
[
- dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
- AC_REQUIRE([gl_ARPA_INET_H_DEFAULTS])
+ dnl Ensure to expand the default settings once only.
+ gl_ARPA_INET_H_REQUIRE_DEFAULTS
gl_MODULE_INDICATOR_SET_VARIABLE([$1])
])
+# Initializes the default values for AC_SUBSTed shell variables.
+# This macro must not be AC_REQUIREd. It must only be invoked, and only
+# outside of macros or in macros that are not AC_REQUIREd.
+AC_DEFUN([gl_ARPA_INET_H_REQUIRE_DEFAULTS],
+[
+ m4_defun(GL_MODULE_INDICATOR_PREFIX[_ARPA_INET_H_MODULE_INDICATOR_DEFAULTS], [
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_INET_NTOP])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_INET_PTON])
+ ])
+ m4_require(GL_MODULE_INDICATOR_PREFIX[_ARPA_INET_H_MODULE_INDICATOR_DEFAULTS])
+ AC_REQUIRE([gl_ARPA_INET_H_DEFAULTS])
+])
+
AC_DEFUN([gl_ARPA_INET_H_DEFAULTS],
[
- GNULIB_INET_NTOP=0; AC_SUBST([GNULIB_INET_NTOP])
- GNULIB_INET_PTON=0; AC_SUBST([GNULIB_INET_PTON])
dnl Assume proper GNU behavior unless another module says otherwise.
HAVE_DECL_INET_NTOP=1; AC_SUBST([HAVE_DECL_INET_NTOP])
HAVE_DECL_INET_PTON=1; AC_SUBST([HAVE_DECL_INET_PTON])
diff --git a/gnulib/import/m4/btowc.m4 b/gnulib/import/m4/btowc.m4
index d2b2fe85aee..45a61f5ed0f 100644
--- a/gnulib/import/m4/btowc.m4
+++ b/gnulib/import/m4/btowc.m4
@@ -1,5 +1,5 @@
# btowc.m4 serial 12
-dnl Copyright (C) 2008-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2008-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/builtin-expect.m4 b/gnulib/import/m4/builtin-expect.m4
index c58411643ca..b1fb12a3fbd 100644
--- a/gnulib/import/m4/builtin-expect.m4
+++ b/gnulib/import/m4/builtin-expect.m4
@@ -1,6 +1,6 @@
dnl Check for __builtin_expect.
-dnl Copyright 2016-2021 Free Software Foundation, Inc.
+dnl Copyright 2016-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/canonicalize.m4 b/gnulib/import/m4/canonicalize.m4
index 475fa15d6bd..b55d5c06e26 100644
--- a/gnulib/import/m4/canonicalize.m4
+++ b/gnulib/import/m4/canonicalize.m4
@@ -1,6 +1,6 @@
-# canonicalize.m4 serial 35
+# canonicalize.m4 serial 37
-dnl Copyright (C) 2003-2007, 2009-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2003-2007, 2009-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
@@ -78,68 +78,106 @@ AC_DEFUN([gl_CANONICALIZE_LGPL_SEPARATE],
# so is the latter.
AC_DEFUN([gl_FUNC_REALPATH_WORKS],
[
- AC_CHECK_FUNCS_ONCE([realpath])
+ AC_CHECK_FUNCS_ONCE([realpath lstat])
AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
AC_CACHE_CHECK([whether realpath works], [gl_cv_func_realpath_works], [
rm -rf conftest.a conftest.d
touch conftest.a
+ # Assume that if we have lstat, we can also check symlinks.
+ if test $ac_cv_func_lstat = yes; then
+ ln -s conftest.a conftest.l
+ fi
mkdir conftest.d
AC_RUN_IFELSE([
AC_LANG_PROGRAM([[
]GL_NOCRASH[
+ #include <errno.h>
#include <stdlib.h>
#include <string.h>
]], [[
int result = 0;
+ /* This test fails on Solaris 10. */
{
char *name = realpath ("conftest.a", NULL);
if (!(name && *name == '/'))
result |= 1;
free (name);
}
+ /* This test fails on older versions of Cygwin. */
{
char *name = realpath ("conftest.b/../conftest.a", NULL);
if (name != NULL)
result |= 2;
free (name);
}
+ /* This test fails on Cygwin 2.9. */
+ #if HAVE_LSTAT
+ {
+ char *name = realpath ("conftest.l/../conftest.a", NULL);
+ if (name != NULL || errno != ENOTDIR)
+ result |= 4;
+ free (name);
+ }
+ #endif
+ /* This test fails on Mac OS X 10.13, OpenBSD 6.0. */
{
char *name = realpath ("conftest.a/", NULL);
if (name != NULL)
- result |= 4;
+ result |= 8;
free (name);
}
+ /* This test fails on AIX 7, Solaris 10. */
{
char *name1 = realpath (".", NULL);
char *name2 = realpath ("conftest.d//./..", NULL);
if (! name1 || ! name2 || strcmp (name1, name2))
- result |= 8;
+ result |= 16;
free (name1);
free (name2);
}
+ #ifdef __linux__
+ /* On Linux, // is the same as /. See also double-slash-root.m4.
+ realpath() should respect this.
+ This test fails on musl libc 1.2.2. */
+ {
+ char *name = realpath ("//", NULL);
+ if (! name || strcmp (name, "/"))
+ result |= 32;
+ free (name);
+ }
+ #endif
return result;
]])
],
[gl_cv_func_realpath_works=yes],
- [gl_cv_func_realpath_works=no],
+ [case $? in
+ 32) gl_cv_func_realpath_works=nearly ;;
+ *) gl_cv_func_realpath_works=no ;;
+ esac
+ ],
[case "$host_os" in
# Guess yes on glibc systems.
*-gnu* | gnu*) gl_cv_func_realpath_works="guessing yes" ;;
- # Guess yes on musl systems.
- *-musl*) gl_cv_func_realpath_works="guessing yes" ;;
+ # Guess 'nearly' on musl systems.
+ *-musl*) gl_cv_func_realpath_works="guessing nearly" ;;
+ # Guess no on Cygwin.
+ cygwin*) gl_cv_func_realpath_works="guessing no" ;;
# Guess no on native Windows.
mingw*) gl_cv_func_realpath_works="guessing no" ;;
# If we don't know, obey --enable-cross-guesses.
*) gl_cv_func_realpath_works="$gl_cross_guess_normal" ;;
esac
])
- rm -rf conftest.a conftest.d
+ rm -rf conftest.a conftest.l conftest.d
])
case "$gl_cv_func_realpath_works" in
*yes)
- AC_DEFINE([FUNC_REALPATH_WORKS], [1], [Define to 1 if realpath()
- can malloc memory, always gives an absolute path, and handles
- trailing slash correctly.])
+ AC_DEFINE([FUNC_REALPATH_WORKS], [1],
+ [Define to 1 if realpath() can malloc memory, always gives an absolute path, and handles leading slashes and a trailing slash correctly.])
+ ;;
+ *nearly)
+ AC_DEFINE([FUNC_REALPATH_NEARLY_WORKS], [1],
+ [Define to 1 if realpath() can malloc memory, always gives an absolute path, and handles a trailing slash correctly.])
;;
esac
])
diff --git a/gnulib/import/m4/chdir-long.m4 b/gnulib/import/m4/chdir-long.m4
index e5cd8dfa8d0..4cadc3ff2a2 100644
--- a/gnulib/import/m4/chdir-long.m4
+++ b/gnulib/import/m4/chdir-long.m4
@@ -6,7 +6,7 @@
# never fails with ENAMETOOLONG.
# Arrange to compile chdir-long.c only on systems that define PATH_MAX.
-dnl Copyright (C) 2004-2007, 2009-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2004-2007, 2009-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/chown.m4 b/gnulib/import/m4/chown.m4
index d1c083175e6..56dda0a632d 100644
--- a/gnulib/import/m4/chown.m4
+++ b/gnulib/import/m4/chown.m4
@@ -1,7 +1,7 @@
# serial 35
# Determine whether we need the chown wrapper.
-dnl Copyright (C) 1997-2001, 2003-2005, 2007, 2009-2021 Free Software
+dnl Copyright (C) 1997-2001, 2003-2005, 2007, 2009-2022 Free Software
dnl Foundation, Inc.
dnl This file is free software; the Free Software Foundation
diff --git a/gnulib/import/m4/clock_time.m4 b/gnulib/import/m4/clock_time.m4
index c3b9e7ea408..22535533135 100644
--- a/gnulib/import/m4/clock_time.m4
+++ b/gnulib/import/m4/clock_time.m4
@@ -1,10 +1,11 @@
-# clock_time.m4 serial 10
-dnl Copyright (C) 2002-2006, 2009-2021 Free Software Foundation, Inc.
+# clock_time.m4 serial 11
+dnl Copyright (C) 2002-2006, 2009-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
-# Check for clock_gettime and clock_settime, and set LIB_CLOCK_GETTIME.
+# Check for clock_getres, clock_gettime and clock_settime,
+# and set LIB_CLOCK_GETTIME.
# For a program named, say foo, you should add a line like the following
# in the corresponding Makefile.am file:
# foo_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME)
@@ -26,6 +27,6 @@ AC_DEFUN([gl_CLOCK_TIME],
AC_SEARCH_LIBS([clock_gettime], [rt posix4],
[test "$ac_cv_search_clock_gettime" = "none required" ||
LIB_CLOCK_GETTIME=$ac_cv_search_clock_gettime])
- AC_CHECK_FUNCS([clock_gettime clock_settime])
+ AC_CHECK_FUNCS([clock_getres clock_gettime clock_settime])
LIBS=$gl_saved_libs
])
diff --git a/gnulib/import/m4/close.m4 b/gnulib/import/m4/close.m4
index 77a504717a4..f95dbc9d97e 100644
--- a/gnulib/import/m4/close.m4
+++ b/gnulib/import/m4/close.m4
@@ -1,5 +1,5 @@
# close.m4 serial 9
-dnl Copyright (C) 2008-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2008-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/closedir.m4 b/gnulib/import/m4/closedir.m4
index fc55a215dd8..cac29d6dc98 100644
--- a/gnulib/import/m4/closedir.m4
+++ b/gnulib/import/m4/closedir.m4
@@ -1,5 +1,5 @@
# closedir.m4 serial 6
-dnl Copyright (C) 2011-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2011-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/codeset.m4 b/gnulib/import/m4/codeset.m4
index 629f4ee310e..eb7326013d3 100644
--- a/gnulib/import/m4/codeset.m4
+++ b/gnulib/import/m4/codeset.m4
@@ -1,5 +1,5 @@
# codeset.m4 serial 5 (gettext-0.18.2)
-dnl Copyright (C) 2000-2002, 2006, 2008-2014, 2016, 2019-2021 Free Software
+dnl Copyright (C) 2000-2002, 2006, 2008-2014, 2016, 2019-2022 Free Software
dnl Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
diff --git a/gnulib/import/m4/ctype.m4 b/gnulib/import/m4/ctype.m4
deleted file mode 100644
index 06efe611aeb..00000000000
--- a/gnulib/import/m4/ctype.m4
+++ /dev/null
@@ -1,32 +0,0 @@
-# ctype_h.m4 serial 6
-dnl Copyright (C) 2009-2021 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-AC_DEFUN([gl_CTYPE_H],
-[
- AC_REQUIRE([gl_CTYPE_H_DEFAULTS])
-
- dnl <ctype.h> is always overridden, because of GNULIB_POSIXCHECK.
- gl_NEXT_HEADERS([ctype.h])
-
- dnl Check for declarations of anything we want to poison if the
- dnl corresponding gnulib module is not in use.
- gl_WARN_ON_USE_PREPARE([[#include <ctype.h>
- ]], [isblank])
-])
-
-AC_DEFUN([gl_CTYPE_MODULE_INDICATOR],
-[
- dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
- AC_REQUIRE([gl_CTYPE_H_DEFAULTS])
- gl_MODULE_INDICATOR_SET_VARIABLE([$1])
-])
-
-AC_DEFUN([gl_CTYPE_H_DEFAULTS],
-[
- GNULIB_ISBLANK=0; AC_SUBST([GNULIB_ISBLANK])
- dnl Assume proper GNU behavior unless another module says otherwise.
- HAVE_ISBLANK=1; AC_SUBST([HAVE_ISBLANK])
-])
diff --git a/gnulib/import/m4/ctype_h.m4 b/gnulib/import/m4/ctype_h.m4
new file mode 100644
index 00000000000..6f420de3f9c
--- /dev/null
+++ b/gnulib/import/m4/ctype_h.m4
@@ -0,0 +1,47 @@
+# ctype_h.m4 serial 9
+dnl Copyright (C) 2009-2022 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN_ONCE([gl_CTYPE_H],
+[
+ AC_REQUIRE([gl_CTYPE_H_DEFAULTS])
+
+ dnl <ctype.h> is always overridden, because of GNULIB_POSIXCHECK.
+ gl_NEXT_HEADERS([ctype.h])
+
+ dnl Check for declarations of anything we want to poison if the
+ dnl corresponding gnulib module is not in use.
+ gl_WARN_ON_USE_PREPARE([[#include <ctype.h>
+ ]], [isblank])
+])
+
+# gl_CTYPE_MODULE_INDICATOR([modulename])
+# sets the shell variable that indicates the presence of the given module
+# to a C preprocessor expression that will evaluate to 1.
+# This macro invocation must not occur in macros that are AC_REQUIREd.
+AC_DEFUN([gl_CTYPE_MODULE_INDICATOR],
+[
+ dnl Ensure to expand the default settings once only.
+ gl_CTYPE_H_REQUIRE_DEFAULTS
+ gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+])
+
+# Initializes the default values for AC_SUBSTed shell variables.
+# This macro must not be AC_REQUIREd. It must only be invoked, and only
+# outside of macros or in macros that are not AC_REQUIREd.
+AC_DEFUN([gl_CTYPE_H_REQUIRE_DEFAULTS],
+[
+ m4_defun(GL_MODULE_INDICATOR_PREFIX[_CTYPE_H_MODULE_INDICATOR_DEFAULTS], [
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISBLANK])
+ ])
+ m4_require(GL_MODULE_INDICATOR_PREFIX[_CTYPE_H_MODULE_INDICATOR_DEFAULTS])
+ AC_REQUIRE([gl_CTYPE_H_DEFAULTS])
+])
+
+AC_DEFUN([gl_CTYPE_H_DEFAULTS],
+[
+ dnl Assume proper GNU behavior unless another module says otherwise.
+ HAVE_ISBLANK=1; AC_SUBST([HAVE_ISBLANK])
+])
diff --git a/gnulib/import/m4/d-ino.m4 b/gnulib/import/m4/d-ino.m4
index e4dcfeb3575..daefce9ebae 100644
--- a/gnulib/import/m4/d-ino.m4
+++ b/gnulib/import/m4/d-ino.m4
@@ -5,7 +5,7 @@ dnl
dnl Check whether struct dirent has a member named d_ino.
dnl
-# Copyright (C) 1997, 1999-2001, 2003-2004, 2006-2007, 2009-2021 Free Software
+# Copyright (C) 1997, 1999-2001, 2003-2004, 2006-2007, 2009-2022 Free Software
# Foundation, Inc.
# This file is free software; the Free Software Foundation
diff --git a/gnulib/import/m4/d-type.m4 b/gnulib/import/m4/d-type.m4
index 534a59e3e5b..b8858b19180 100644
--- a/gnulib/import/m4/d-type.m4
+++ b/gnulib/import/m4/d-type.m4
@@ -5,7 +5,7 @@ dnl
dnl Check whether struct dirent has a member named d_type.
dnl
-# Copyright (C) 1997, 1999-2004, 2006, 2009-2021 Free Software Foundation, Inc.
+# Copyright (C) 1997, 1999-2004, 2006, 2009-2022 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
diff --git a/gnulib/import/m4/dirent_h.m4 b/gnulib/import/m4/dirent_h.m4
index 6d861425855..ddaca1680de 100644
--- a/gnulib/import/m4/dirent_h.m4
+++ b/gnulib/import/m4/dirent_h.m4
@@ -1,15 +1,15 @@
-# dirent_h.m4 serial 16
-dnl Copyright (C) 2008-2021 Free Software Foundation, Inc.
+# dirent_h.m4 serial 19
+dnl Copyright (C) 2008-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl Written by Bruno Haible.
-AC_DEFUN([gl_DIRENT_H],
+AC_DEFUN_ONCE([gl_DIRENT_H],
[
- dnl Use AC_REQUIRE here, so that the default behavior below is expanded
- dnl once only, before all statements that occur in other macros.
+ dnl Ensure to expand the default settings once only, before all statements
+ dnl that occur in other macros.
AC_REQUIRE([gl_DIRENT_H_DEFAULTS])
dnl <dirent.h> is always overridden, because of GNULIB_POSIXCHECK.
@@ -27,26 +27,41 @@ AC_DEFUN([gl_DIRENT_H],
]], [alphasort closedir dirfd fdopendir opendir readdir rewinddir scandir])
])
+# gl_DIRENT_MODULE_INDICATOR([modulename])
+# sets the shell variable that indicates the presence of the given module
+# to a C preprocessor expression that will evaluate to 1.
+# This macro invocation must not occur in macros that are AC_REQUIREd.
AC_DEFUN([gl_DIRENT_MODULE_INDICATOR],
[
- dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
- AC_REQUIRE([gl_DIRENT_H_DEFAULTS])
+ dnl Ensure to expand the default settings once only.
+ gl_DIRENT_H_REQUIRE_DEFAULTS
gl_MODULE_INDICATOR_SET_VARIABLE([$1])
dnl Define it also as a C macro, for the benefit of the unit tests.
gl_MODULE_INDICATOR_FOR_TESTS([$1])
])
+# Initializes the default values for AC_SUBSTed shell variables.
+# This macro must not be AC_REQUIREd. It must only be invoked, and only
+# outside of macros or in macros that are not AC_REQUIREd.
+AC_DEFUN([gl_DIRENT_H_REQUIRE_DEFAULTS],
+[
+ m4_defun(GL_MODULE_INDICATOR_PREFIX[_DIRENT_H_MODULE_INDICATOR_DEFAULTS], [
+ gl_UNISTD_H_REQUIRE_DEFAULTS dnl for REPLACE_FCHDIR
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_OPENDIR])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_READDIR])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REWINDDIR])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CLOSEDIR])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_DIRFD])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FDOPENDIR])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SCANDIR])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ALPHASORT])
+ ])
+ m4_require(GL_MODULE_INDICATOR_PREFIX[_DIRENT_H_MODULE_INDICATOR_DEFAULTS])
+ AC_REQUIRE([gl_DIRENT_H_DEFAULTS])
+])
+
AC_DEFUN([gl_DIRENT_H_DEFAULTS],
[
- AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) dnl for REPLACE_FCHDIR
- GNULIB_OPENDIR=0; AC_SUBST([GNULIB_OPENDIR])
- GNULIB_READDIR=0; AC_SUBST([GNULIB_READDIR])
- GNULIB_REWINDDIR=0; AC_SUBST([GNULIB_REWINDDIR])
- GNULIB_CLOSEDIR=0; AC_SUBST([GNULIB_CLOSEDIR])
- GNULIB_DIRFD=0; AC_SUBST([GNULIB_DIRFD])
- GNULIB_FDOPENDIR=0; AC_SUBST([GNULIB_FDOPENDIR])
- GNULIB_SCANDIR=0; AC_SUBST([GNULIB_SCANDIR])
- GNULIB_ALPHASORT=0; AC_SUBST([GNULIB_ALPHASORT])
dnl Assume proper GNU behavior unless another module says otherwise.
HAVE_OPENDIR=1; AC_SUBST([HAVE_OPENDIR])
HAVE_READDIR=1; AC_SUBST([HAVE_READDIR])
diff --git a/gnulib/import/m4/dirfd.m4 b/gnulib/import/m4/dirfd.m4
index 3c9ce5dc65f..92001700ef1 100644
--- a/gnulib/import/m4/dirfd.m4
+++ b/gnulib/import/m4/dirfd.m4
@@ -2,7 +2,7 @@
dnl Find out how to get the file descriptor associated with an open DIR*.
-# Copyright (C) 2001-2006, 2008-2021 Free Software Foundation, Inc.
+# Copyright (C) 2001-2006, 2008-2022 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.
diff --git a/gnulib/import/m4/double-slash-root.m4 b/gnulib/import/m4/double-slash-root.m4
index c9bbcef6781..09ff5f0d17a 100644
--- a/gnulib/import/m4/double-slash-root.m4
+++ b/gnulib/import/m4/double-slash-root.m4
@@ -1,5 +1,5 @@
# double-slash-root.m4 serial 4 -*- Autoconf -*-
-dnl Copyright (C) 2006, 2008-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2006, 2008-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/dup.m4 b/gnulib/import/m4/dup.m4
index 433a4660524..3109a651cad 100644
--- a/gnulib/import/m4/dup.m4
+++ b/gnulib/import/m4/dup.m4
@@ -1,5 +1,5 @@
# dup.m4 serial 7
-dnl Copyright (C) 2011-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2011-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/dup2.m4 b/gnulib/import/m4/dup2.m4
index 0753a32491e..7e777cdee6a 100644
--- a/gnulib/import/m4/dup2.m4
+++ b/gnulib/import/m4/dup2.m4
@@ -1,5 +1,5 @@
#serial 27
-dnl Copyright (C) 2002, 2005, 2007, 2009-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2002, 2005, 2007, 2009-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/eealloc.m4 b/gnulib/import/m4/eealloc.m4
index 002f0c86713..a6aa2f88d0c 100644
--- a/gnulib/import/m4/eealloc.m4
+++ b/gnulib/import/m4/eealloc.m4
@@ -1,5 +1,5 @@
# eealloc.m4 serial 3
-dnl Copyright (C) 2003, 2009-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2003, 2009-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/environ.m4 b/gnulib/import/m4/environ.m4
index d971770860c..583dac39326 100644
--- a/gnulib/import/m4/environ.m4
+++ b/gnulib/import/m4/environ.m4
@@ -1,5 +1,5 @@
-# environ.m4 serial 7
-dnl Copyright (C) 2001-2004, 2006-2021 Free Software Foundation, Inc.
+# environ.m4 serial 8
+dnl Copyright (C) 2001-2004, 2006-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
@@ -33,7 +33,8 @@ AC_DEFUN([gt_CHECK_VAR_DECL],
[AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM(
[[$1
- extern struct { int foo; } $2;]],
+ typedef struct { int foo; } foo_t;
+ extern foo_t $2;]],
[[$2.foo = 1;]])],
[gt_cv_var=no],
[gt_cv_var=yes])])
diff --git a/gnulib/import/m4/errno_h.m4 b/gnulib/import/m4/errno_h.m4
index 51dfe92938d..4be9780a7e4 100644
--- a/gnulib/import/m4/errno_h.m4
+++ b/gnulib/import/m4/errno_h.m4
@@ -1,5 +1,5 @@
-# errno_h.m4 serial 13
-dnl Copyright (C) 2004, 2006, 2008-2021 Free Software Foundation, Inc.
+# errno_h.m4 serial 14
+dnl Copyright (C) 2004, 2006, 2008-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
@@ -68,13 +68,11 @@ booboo
[gl_cv_header_errno_h_complete=yes])
])
if test $gl_cv_header_errno_h_complete = yes; then
- ERRNO_H=''
+ GL_GENERATE_ERRNO_H=false
else
gl_NEXT_HEADERS([errno.h])
- ERRNO_H='errno.h'
+ GL_GENERATE_ERRNO_H=true
fi
- AC_SUBST([ERRNO_H])
- AM_CONDITIONAL([GL_GENERATE_ERRNO_H], [test -n "$ERRNO_H"])
gl_REPLACE_ERRNO_VALUE([EMULTIHOP])
gl_REPLACE_ERRNO_VALUE([ENOLINK])
gl_REPLACE_ERRNO_VALUE([EOVERFLOW])
@@ -88,7 +86,7 @@ booboo
# Set the variables EOVERFLOW_HIDDEN and EOVERFLOW_VALUE.
AC_DEFUN([gl_REPLACE_ERRNO_VALUE],
[
- if test -n "$ERRNO_H"; then
+ if $GL_GENERATE_ERRNO_H; then
AC_CACHE_CHECK([for ]$1[ value], [gl_cv_header_errno_h_]$1, [
AC_EGREP_CPP([yes],[
#include <errno.h>
diff --git a/gnulib/import/m4/error.m4 b/gnulib/import/m4/error.m4
index 77f67f78b02..7a103446beb 100644
--- a/gnulib/import/m4/error.m4
+++ b/gnulib/import/m4/error.m4
@@ -1,6 +1,6 @@
-#serial 14
+#serial 15
-# Copyright (C) 1996-1998, 2001-2004, 2009-2021 Free Software Foundation, Inc.
+# Copyright (C) 1996-1998, 2001-2004, 2009-2022 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -22,6 +22,10 @@ AC_DEFUN([gl_ERROR],
# Prerequisites of lib/error.c.
AC_DEFUN([gl_PREREQ_ERROR],
[
+ dnl Use system extensions on Android, so that AC_FUNC_STRERROR_R
+ dnl discovers the GNU API for strerror_r on Android API level 23 and later.
+ AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+
AC_REQUIRE([AC_FUNC_STRERROR_R])
:
])
diff --git a/gnulib/import/m4/exponentd.m4 b/gnulib/import/m4/exponentd.m4
index fb136f47746..83ac08bf26a 100644
--- a/gnulib/import/m4/exponentd.m4
+++ b/gnulib/import/m4/exponentd.m4
@@ -1,5 +1,5 @@
# exponentd.m4 serial 3
-dnl Copyright (C) 2007-2008, 2010-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2007-2008, 2010-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/exponentl.m4 b/gnulib/import/m4/exponentl.m4
index 508fe9315a5..653ad5a9451 100644
--- a/gnulib/import/m4/exponentl.m4
+++ b/gnulib/import/m4/exponentl.m4
@@ -1,5 +1,5 @@
# exponentl.m4 serial 5
-dnl Copyright (C) 2007-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2007-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/extensions.m4 b/gnulib/import/m4/extensions.m4
index 5792a9557a8..0b3e4b5af7e 100644
--- a/gnulib/import/m4/extensions.m4
+++ b/gnulib/import/m4/extensions.m4
@@ -1,7 +1,7 @@
# serial 22 -*- Autoconf -*-
# Enable extensions on systems that normally disable them.
-# Copyright (C) 2003, 2006-2021 Free Software Foundation, Inc.
+# Copyright (C) 2003, 2006-2022 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.
diff --git a/gnulib/import/m4/extern-inline.m4 b/gnulib/import/m4/extern-inline.m4
index a2acf126c87..8a12bddd571 100644
--- a/gnulib/import/m4/extern-inline.m4
+++ b/gnulib/import/m4/extern-inline.m4
@@ -1,13 +1,28 @@
dnl 'extern inline' a la ISO C99.
-dnl Copyright 2012-2021 Free Software Foundation, Inc.
+dnl Copyright 2012-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
AC_DEFUN([gl_EXTERN_INLINE],
[
- AH_VERBATIM([extern_inline],
+ AC_CACHE_CHECK([whether ctype.h defines __header_inline],
+ [gl_cv_have___header_inline],
+ [AC_PREPROC_IFELSE(
+ [AC_LANG_SOURCE([[#include <ctype.h>
+ #ifndef __header_inline
+ #error "<ctype.h> does not define __header_inline"
+ #endif
+ ]])],
+ [gl_cv_have___header_inline=yes],
+ [gl_cv_have___header_inline=no])])
+ if test "$gl_cv_have___header_inline" = yes; then
+ AC_DEFINE([HAVE___HEADER_INLINE], [1],
+ [Define to 1 if ctype.h defines __header_inline.])
+ fi
+
+ AH_VERBATIM([HAVE___HEADER_INLINE_1],
[/* Please see the Gnulib manual for how to use these macros.
Suppress extern inline with HP-UX cc, as it appears to be broken; see
@@ -17,7 +32,8 @@ AC_DEFUN([gl_EXTERN_INLINE],
mishandles inline functions that call each other. E.g., for 'inline void f
(void) { } inline void g (void) { f (); }', c99 incorrectly complains
'reference to static identifier "f" in extern inline function'.
- This bug was observed with Sun C 5.12 SunOS_i386 2011/11/16.
+ This bug was observed with Oracle Developer Studio 12.6
+ (Sun C 5.15 SunOS_sparc 2017/05/30).
Suppress extern inline (with or without __attribute__ ((__gnu_inline__)))
on configurations that mistakenly use 'static inline' to implement
@@ -53,7 +69,7 @@ AC_DEFUN([gl_EXTERN_INLINE],
*/
#if (((defined __APPLE__ && defined __MACH__) \
|| defined __DragonFly__ || defined __FreeBSD__) \
- && (defined __header_inline \
+ && (defined HAVE___HEADER_INLINE \
? (defined __cplusplus && defined __GNUC_STDC_INLINE__ \
&& ! defined __clang__) \
: ((! defined _DONT_USE_CTYPE_INLINE_ \
@@ -83,8 +99,8 @@ AC_DEFUN([gl_EXTERN_INLINE],
# define _GL_EXTERN_INLINE extern
# define _GL_EXTERN_INLINE_IN_USE
#else
-# define _GL_INLINE static _GL_UNUSED
-# define _GL_EXTERN_INLINE static _GL_UNUSED
+# define _GL_INLINE _GL_UNUSED static
+# define _GL_EXTERN_INLINE _GL_UNUSED static
#endif
/* In GCC 4.6 (inclusive) to 5.1 (exclusive),
diff --git a/gnulib/import/m4/fchdir.m4 b/gnulib/import/m4/fchdir.m4
index 5d2fab72621..f85549a3ed6 100644
--- a/gnulib/import/m4/fchdir.m4
+++ b/gnulib/import/m4/fchdir.m4
@@ -1,5 +1,5 @@
-# fchdir.m4 serial 26
-dnl Copyright (C) 2006-2021 Free Software Foundation, Inc.
+# fchdir.m4 serial 27
+dnl Copyright (C) 2006-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
@@ -17,8 +17,6 @@ AC_DEFUN([gl_FUNC_FCHDIR],
AC_REQUIRE([gl_TEST_FCHDIR])
if test $HAVE_FCHDIR = 0; then
- AC_LIBOBJ([fchdir])
- gl_PREREQ_FCHDIR
AC_DEFINE([REPLACE_FCHDIR], [1],
[Define to 1 if gnulib's fchdir() replacement is used.])
dnl We must also replace anything that can manipulate a directory fd,
diff --git a/gnulib/import/m4/fcntl-o.m4 b/gnulib/import/m4/fcntl-o.m4
index 7c459ad13a7..4dcde9e062e 100644
--- a/gnulib/import/m4/fcntl-o.m4
+++ b/gnulib/import/m4/fcntl-o.m4
@@ -1,5 +1,5 @@
# fcntl-o.m4 serial 7
-dnl Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2006, 2009-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/fcntl.m4 b/gnulib/import/m4/fcntl.m4
index f6264345c1b..428e5709d30 100644
--- a/gnulib/import/m4/fcntl.m4
+++ b/gnulib/import/m4/fcntl.m4
@@ -1,5 +1,5 @@
# fcntl.m4 serial 11
-dnl Copyright (C) 2009-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2009-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/fcntl_h.m4 b/gnulib/import/m4/fcntl_h.m4
index e63a82f10a2..267f98bf52d 100644
--- a/gnulib/import/m4/fcntl_h.m4
+++ b/gnulib/import/m4/fcntl_h.m4
@@ -1,13 +1,13 @@
-# serial 17
+# serial 20
# Configure fcntl.h.
-dnl Copyright (C) 2006-2007, 2009-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2006-2007, 2009-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl Written by Paul Eggert.
-AC_DEFUN([gl_FCNTL_H],
+AC_DEFUN_ONCE([gl_FCNTL_H],
[
AC_REQUIRE([gl_FCNTL_H_DEFAULTS])
AC_REQUIRE([gl_FCNTL_O_FLAGS])
@@ -26,25 +26,40 @@ AC_DEFUN([gl_FCNTL_H],
]], [fcntl openat])
])
+# gl_FCNTL_MODULE_INDICATOR([modulename])
+# sets the shell variable that indicates the presence of the given module
+# to a C preprocessor expression that will evaluate to 1.
+# This macro invocation must not occur in macros that are AC_REQUIREd.
AC_DEFUN([gl_FCNTL_MODULE_INDICATOR],
[
- dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
- AC_REQUIRE([gl_FCNTL_H_DEFAULTS])
+ dnl Ensure to expand the default settings once only.
+ gl_FCNTL_H_REQUIRE_DEFAULTS
gl_MODULE_INDICATOR_SET_VARIABLE([$1])
dnl Define it also as a C macro, for the benefit of the unit tests.
gl_MODULE_INDICATOR_FOR_TESTS([$1])
])
+# Initializes the default values for AC_SUBSTed shell variables.
+# This macro must not be AC_REQUIREd. It must only be invoked, and only
+# outside of macros or in macros that are not AC_REQUIREd.
+AC_DEFUN([gl_FCNTL_H_REQUIRE_DEFAULTS],
+[
+ m4_defun(GL_MODULE_INDICATOR_PREFIX[_FCNTL_H_MODULE_INDICATOR_DEFAULTS], [
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CREAT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FCNTL])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_NONBLOCKING])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_OPEN])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_OPENAT])
+ dnl Support Microsoft deprecated alias function names by default.
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_CREAT], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_OPEN], [1])
+ ])
+ m4_require(GL_MODULE_INDICATOR_PREFIX[_FCNTL_H_MODULE_INDICATOR_DEFAULTS])
+ AC_REQUIRE([gl_FCNTL_H_DEFAULTS])
+])
+
AC_DEFUN([gl_FCNTL_H_DEFAULTS],
[
- GNULIB_CREAT=0; AC_SUBST([GNULIB_CREAT])
- GNULIB_FCNTL=0; AC_SUBST([GNULIB_FCNTL])
- GNULIB_NONBLOCKING=0; AC_SUBST([GNULIB_NONBLOCKING])
- GNULIB_OPEN=0; AC_SUBST([GNULIB_OPEN])
- GNULIB_OPENAT=0; AC_SUBST([GNULIB_OPENAT])
- dnl Support Microsoft deprecated alias function names by default.
- GNULIB_MDA_CREAT=1; AC_SUBST([GNULIB_MDA_CREAT])
- GNULIB_MDA_OPEN=1; AC_SUBST([GNULIB_MDA_OPEN])
dnl Assume proper GNU behavior unless another module says otherwise.
HAVE_FCNTL=1; AC_SUBST([HAVE_FCNTL])
HAVE_OPENAT=1; AC_SUBST([HAVE_OPENAT])
diff --git a/gnulib/import/m4/fdopendir.m4 b/gnulib/import/m4/fdopendir.m4
index d42838087b5..30016084082 100644
--- a/gnulib/import/m4/fdopendir.m4
+++ b/gnulib/import/m4/fdopendir.m4
@@ -1,7 +1,7 @@
# serial 14
# See if we need to provide fdopendir.
-dnl Copyright (C) 2009-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2009-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/ffs.m4 b/gnulib/import/m4/ffs.m4
index b6e6b3141f3..8fa4fc22e61 100644
--- a/gnulib/import/m4/ffs.m4
+++ b/gnulib/import/m4/ffs.m4
@@ -1,12 +1,12 @@
-# ffs.m4 serial 4
-dnl Copyright (C) 2011-2021 Free Software Foundation, Inc.
+# ffs.m4 serial 5
+dnl Copyright (C) 2011-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
AC_DEFUN([gl_FUNC_FFS],
[
- AC_REQUIRE([gl_HEADER_STRINGS_H_DEFAULTS])
+ AC_REQUIRE([gl_STRINGS_H_DEFAULTS])
dnl We can't use AC_CHECK_FUNC here, because ffs() is defined as a
dnl static inline function when compiling for Android 4.2 or older.
diff --git a/gnulib/import/m4/filenamecat.m4 b/gnulib/import/m4/filenamecat.m4
index e6eac127d2e..4546b8329db 100644
--- a/gnulib/import/m4/filenamecat.m4
+++ b/gnulib/import/m4/filenamecat.m4
@@ -1,5 +1,5 @@
# filenamecat.m4 serial 11
-dnl Copyright (C) 2002-2006, 2009-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2002-2006, 2009-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/flexmember.m4 b/gnulib/import/m4/flexmember.m4
index 49b1c752dae..3b4237e9f79 100644
--- a/gnulib/import/m4/flexmember.m4
+++ b/gnulib/import/m4/flexmember.m4
@@ -1,7 +1,7 @@
# serial 5
# Check for flexible array member support.
-# Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc.
+# Copyright (C) 2006, 2009-2022 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.
diff --git a/gnulib/import/m4/float_h.m4 b/gnulib/import/m4/float_h.m4
index ba38a28901b..0e845726161 100644
--- a/gnulib/import/m4/float_h.m4
+++ b/gnulib/import/m4/float_h.m4
@@ -1,5 +1,5 @@
-# float_h.m4 serial 12
-dnl Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc.
+# float_h.m4 serial 13
+dnl Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
@@ -8,18 +8,18 @@ AC_DEFUN([gl_FLOAT_H],
[
AC_REQUIRE([AC_PROG_CC])
AC_REQUIRE([AC_CANONICAL_HOST])
- FLOAT_H=
+ GL_GENERATE_FLOAT_H=false
REPLACE_FLOAT_LDBL=0
case "$host_os" in
aix* | beos* | openbsd* | mirbsd* | irix*)
- FLOAT_H=float.h
+ GL_GENERATE_FLOAT_H=true
;;
freebsd* | dragonfly*)
case "$host_cpu" in
changequote(,)dnl
i[34567]86 )
changequote([,])dnl
- FLOAT_H=float.h
+ GL_GENERATE_FLOAT_H=true
;;
x86_64 )
# On x86_64 systems, the C compiler may still be generating
@@ -33,21 +33,21 @@ changequote([,])dnl
#endif
]])],
[],
- [FLOAT_H=float.h])
+ [GL_GENERATE_FLOAT_H=true])
;;
esac
;;
linux*)
case "$host_cpu" in
powerpc*)
- FLOAT_H=float.h
+ GL_GENERATE_FLOAT_H=true
;;
esac
;;
esac
case "$host_os" in
aix* | freebsd* | dragonfly* | linux*)
- if test -n "$FLOAT_H"; then
+ if $GL_GENERATE_FLOAT_H; then
REPLACE_FLOAT_LDBL=1
fi
;;
@@ -95,14 +95,12 @@ int main ()
REPLACE_ITOLD=1
dnl We add the workaround to <float.h> but also to <math.h>,
dnl to increase the chances that the fix function gets pulled in.
- FLOAT_H=float.h
+ GL_GENERATE_FLOAT_H=true
;;
esac
- if test -n "$FLOAT_H"; then
+ if $GL_GENERATE_FLOAT_H; then
gl_NEXT_HEADERS([float.h])
fi
- AC_SUBST([FLOAT_H])
- AM_CONDITIONAL([GL_GENERATE_FLOAT_H], [test -n "$FLOAT_H"])
AC_SUBST([REPLACE_ITOLD])
])
diff --git a/gnulib/import/m4/fnmatch.m4 b/gnulib/import/m4/fnmatch.m4
index 81589ca4ccc..9c605595740 100644
--- a/gnulib/import/m4/fnmatch.m4
+++ b/gnulib/import/m4/fnmatch.m4
@@ -1,6 +1,6 @@
# Check for fnmatch - serial 15. -*- coding: utf-8 -*-
-# Copyright (C) 2000-2007, 2009-2021 Free Software Foundation, Inc.
+# Copyright (C) 2000-2007, 2009-2022 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.
diff --git a/gnulib/import/m4/fnmatch_h.m4 b/gnulib/import/m4/fnmatch_h.m4
index 7840b4a4439..ae5cd869cff 100644
--- a/gnulib/import/m4/fnmatch_h.m4
+++ b/gnulib/import/m4/fnmatch_h.m4
@@ -1,5 +1,5 @@
-# fnmatch_h.m4 serial 4
-dnl Copyright (C) 2009-2021 Free Software Foundation, Inc.
+# fnmatch_h.m4 serial 8
+dnl Copyright (C) 2009-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
@@ -27,20 +27,18 @@ AC_DEFUN_ONCE([gl_FNMATCH_H],
AC_SUBST([HAVE_FNMATCH_H])
m4_ifdef([gl_POSIXCHECK],
- [FNMATCH_H=fnmatch.h],
- [FNMATCH_H=''
+ [GL_GENERATE_FNMATCH_H=true],
+ [GL_GENERATE_FNMATCH_H=false
if m4_ifdef([gl_ANSI_CXX], [test "$CXX" != no], [false]); then
dnl Override <fnmatch.h> always, to support the C++ GNULIB_NAMESPACE.
- FNMATCH_H=fnmatch.h
+ GL_GENERATE_FNMATCH_H=true
else
if test $ac_cv_header_fnmatch_h != yes; then
dnl Provide a substitute <fnmatch.h> file.
- FNMATCH_H=fnmatch.h
+ GL_GENERATE_FNMATCH_H=true
fi
fi
])
- AC_SUBST([FNMATCH_H])
- AM_CONDITIONAL([GL_GENERATE_FNMATCH_H], [test -n "$FNMATCH_H"])
dnl Check for declarations of anything we want to poison if the
dnl corresponding gnulib module is not in use.
@@ -52,23 +50,37 @@ AC_DEFUN_ONCE([gl_FNMATCH_H],
dnl Unconditionally enables the replacement of <fnmatch.h>.
AC_DEFUN([gl_REPLACE_FNMATCH_H],
[
- AC_REQUIRE([gl_FNMATCH_H_DEFAULTS])
- FNMATCH_H='fnmatch.h'
- AM_CONDITIONAL([GL_GENERATE_FNMATCH_H], [test -n "$FNMATCH_H"])
+ gl_FNMATCH_H_REQUIRE_DEFAULTS
+ GL_GENERATE_FNMATCH_H=true
])
+# gl_FNMATCH_MODULE_INDICATOR([modulename])
+# sets the shell variable that indicates the presence of the given module
+# to a C preprocessor expression that will evaluate to 1.
+# This macro invocation must not occur in macros that are AC_REQUIREd.
AC_DEFUN([gl_FNMATCH_MODULE_INDICATOR],
[
- dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
- AC_REQUIRE([gl_FNMATCH_H_DEFAULTS])
+ dnl Ensure to expand the default settings once only.
+ gl_FNMATCH_H_REQUIRE_DEFAULTS
gl_MODULE_INDICATOR_SET_VARIABLE([$1])
dnl Define it also as a C macro, for the benefit of the unit tests.
gl_MODULE_INDICATOR_FOR_TESTS([$1])
])
+# Initializes the default values for AC_SUBSTed shell variables.
+# This macro must not be AC_REQUIREd. It must only be invoked, and only
+# outside of macros or in macros that are not AC_REQUIREd.
+AC_DEFUN([gl_FNMATCH_H_REQUIRE_DEFAULTS],
+[
+ m4_defun(GL_MODULE_INDICATOR_PREFIX[_FNMATCH_H_MODULE_INDICATOR_DEFAULTS], [
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FNMATCH])
+ ])
+ m4_require(GL_MODULE_INDICATOR_PREFIX[_FNMATCH_H_MODULE_INDICATOR_DEFAULTS])
+ AC_REQUIRE([gl_FNMATCH_H_DEFAULTS])
+])
+
AC_DEFUN([gl_FNMATCH_H_DEFAULTS],
[
- GNULIB_FNMATCH=0; AC_SUBST([GNULIB_FNMATCH])
dnl Assume POSIX behavior unless another module says otherwise.
HAVE_FNMATCH=1; AC_SUBST([HAVE_FNMATCH])
REPLACE_FNMATCH=0; AC_SUBST([REPLACE_FNMATCH])
diff --git a/gnulib/import/m4/fpieee.m4 b/gnulib/import/m4/fpieee.m4
index 3f16957fbd2..c0c23e95650 100644
--- a/gnulib/import/m4/fpieee.m4
+++ b/gnulib/import/m4/fpieee.m4
@@ -1,5 +1,5 @@
# fpieee.m4 serial 2 -*- coding: utf-8 -*-
-dnl Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/free.m4 b/gnulib/import/m4/free.m4
index d671376b0bb..dfeecd2bf14 100644
--- a/gnulib/import/m4/free.m4
+++ b/gnulib/import/m4/free.m4
@@ -1,5 +1,5 @@
-# free.m4 serial 5
-# Copyright (C) 2003-2005, 2009-2021 Free Software Foundation, Inc.
+# free.m4 serial 6
+# Copyright (C) 2003-2005, 2009-2022 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.
@@ -40,7 +40,10 @@ AC_DEFUN([gl_FUNC_FREE],
])
case $gl_cv_func_free_preserves_errno in
- *yes) ;;
+ *yes)
+ AC_DEFINE([HAVE_FREE_POSIX], [1],
+ [Define if the 'free' function is guaranteed to preserve errno.])
+ ;;
*) REPLACE_FREE=1 ;;
esac
])
diff --git a/gnulib/import/m4/frexp.m4 b/gnulib/import/m4/frexp.m4
index 04248b04fc3..d8f3cef44be 100644
--- a/gnulib/import/m4/frexp.m4
+++ b/gnulib/import/m4/frexp.m4
@@ -1,5 +1,5 @@
# frexp.m4 serial 16
-dnl Copyright (C) 2007-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2007-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/frexpl.m4 b/gnulib/import/m4/frexpl.m4
index 32f1eac99c3..4557613133c 100644
--- a/gnulib/import/m4/frexpl.m4
+++ b/gnulib/import/m4/frexpl.m4
@@ -1,5 +1,5 @@
# frexpl.m4 serial 22
-dnl Copyright (C) 2007-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2007-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/fstat.m4 b/gnulib/import/m4/fstat.m4
index 3b5b238fa6f..9e61bcce8a4 100644
--- a/gnulib/import/m4/fstat.m4
+++ b/gnulib/import/m4/fstat.m4
@@ -1,5 +1,5 @@
-# fstat.m4 serial 7
-dnl Copyright (C) 2011-2021 Free Software Foundation, Inc.
+# fstat.m4 serial 8
+dnl Copyright (C) 2011-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
@@ -34,7 +34,7 @@ AC_DEFUN([gl_FUNC_FSTAT],
# Prerequisites of lib/fstat.c and lib/stat-w32.c.
AC_DEFUN([gl_PREREQ_FSTAT], [
- AC_REQUIRE([gl_HEADER_SYS_STAT_H])
+ AC_REQUIRE([gl_SYS_STAT_H])
AC_REQUIRE([gl_PREREQ_STAT_W32])
:
])
diff --git a/gnulib/import/m4/fstatat.m4 b/gnulib/import/m4/fstatat.m4
index d730e46d303..e8604a6ad3a 100644
--- a/gnulib/import/m4/fstatat.m4
+++ b/gnulib/import/m4/fstatat.m4
@@ -1,5 +1,5 @@
# fstatat.m4 serial 4
-dnl Copyright (C) 2004-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2004-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/getcwd-abort-bug.m4 b/gnulib/import/m4/getcwd-abort-bug.m4
index 89d068996b4..2174e3f9c6a 100644
--- a/gnulib/import/m4/getcwd-abort-bug.m4
+++ b/gnulib/import/m4/getcwd-abort-bug.m4
@@ -1,9 +1,9 @@
-# serial 15
+# serial 16
# Determine whether getcwd aborts when the length of the working directory
# name is unusually large. Any length between 4k and 16k trigger the bug
# when using glibc-2.4.90-9 or older.
-# Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc.
+# Copyright (C) 2006, 2009-2022 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.
@@ -128,11 +128,12 @@ main ()
]])],
[gl_cv_func_getcwd_succeeds_beyond_4k=yes],
[dnl An abort will provoke an exit code of something like 134 (128 + 6).
- dnl An exit code of 4 can also occur (in OpenBSD 6.7, NetBSD 5.1 for
- dnl example): getcwd (NULL, 0) fails rather than returning a string
- dnl longer than PATH_MAX. This may be POSIX compliant (in some
- dnl interpretations of POSIX). But gnulib's getcwd module wants to
- dnl provide a non-NULL value in this case.
+ dnl An exit code of 4 can also occur (for example in
+ dnl musl libc 1.2.2/powerpc64le, NetBSD 9.0, OpenBSD 6.7:
+ dnl getcwd (NULL, 0) fails rather than returning a string longer than
+ dnl PATH_MAX. This may be POSIX compliant (in some interpretations of
+ dnl POSIX). But gnulib's getcwd module wants to provide a non-NULL
+ dnl value in this case.
ret=$?
if test $ret -ge 128 || test $ret = 4; then
gl_cv_func_getcwd_succeeds_beyond_4k=no
@@ -141,10 +142,8 @@ main ()
fi
],
[case "$host_os" in
- # Guess yes on musl systems.
- *-musl*) gl_cv_func_getcwd_succeeds_beyond_4k="guessing yes" ;;
- # Guess no otherwise, even on glibc systems.
- *) gl_cv_func_getcwd_succeeds_beyond_4k="guessing no"
+ # Guess no otherwise, even on glibc systems and musl systems.
+ *) gl_cv_func_getcwd_succeeds_beyond_4k="guessing no"
esac
])
])
diff --git a/gnulib/import/m4/getcwd-path-max.m4 b/gnulib/import/m4/getcwd-path-max.m4
index 4238ae7c06c..e12045596b1 100644
--- a/gnulib/import/m4/getcwd-path-max.m4
+++ b/gnulib/import/m4/getcwd-path-max.m4
@@ -6,7 +6,7 @@
# I've heard that this is due to a Linux kernel bug, and that it has
# been fixed between 2.4.21-pre3 and 2.4.21-pre4.
-# Copyright (C) 2003-2007, 2009-2021 Free Software Foundation, Inc.
+# Copyright (C) 2003-2007, 2009-2022 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.
diff --git a/gnulib/import/m4/getcwd.m4 b/gnulib/import/m4/getcwd.m4
index 6ec7a94e215..076ca314858 100644
--- a/gnulib/import/m4/getcwd.m4
+++ b/gnulib/import/m4/getcwd.m4
@@ -1,6 +1,6 @@
# getcwd.m4 - check for working getcwd that is compatible with glibc
-# Copyright (C) 2001, 2003-2007, 2009-2021 Free Software Foundation, Inc.
+# Copyright (C) 2001, 2003-2007, 2009-2022 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.
diff --git a/gnulib/import/m4/getdelim.m4 b/gnulib/import/m4/getdelim.m4
index 244a7319254..0b63b55351e 100644
--- a/gnulib/import/m4/getdelim.m4
+++ b/gnulib/import/m4/getdelim.m4
@@ -1,6 +1,6 @@
# getdelim.m4 serial 15
-dnl Copyright (C) 2005-2007, 2009-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2005-2007, 2009-2022 Free Software Foundation, Inc.
dnl
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
diff --git a/gnulib/import/m4/getdtablesize.m4 b/gnulib/import/m4/getdtablesize.m4
index 8fbc941898f..6134eaace01 100644
--- a/gnulib/import/m4/getdtablesize.m4
+++ b/gnulib/import/m4/getdtablesize.m4
@@ -1,5 +1,5 @@
# getdtablesize.m4 serial 8
-dnl Copyright (C) 2008-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2008-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/getline.m4 b/gnulib/import/m4/getline.m4
index 58b27c73f0f..ca0301d2c12 100644
--- a/gnulib/import/m4/getline.m4
+++ b/gnulib/import/m4/getline.m4
@@ -1,6 +1,6 @@
# getline.m4 serial 30
-dnl Copyright (C) 1998-2003, 2005-2007, 2009-2021 Free Software Foundation,
+dnl Copyright (C) 1998-2003, 2005-2007, 2009-2022 Free Software Foundation,
dnl Inc.
dnl
dnl This file is free software; the Free Software Foundation
diff --git a/gnulib/import/m4/getlogin.m4 b/gnulib/import/m4/getlogin.m4
index c5b7f1aaea6..d51d6cfdcd4 100644
--- a/gnulib/import/m4/getlogin.m4
+++ b/gnulib/import/m4/getlogin.m4
@@ -1,5 +1,5 @@
# getlogin.m4 serial 5
-dnl Copyright (C) 2010-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2010-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/getlogin_r.m4 b/gnulib/import/m4/getlogin_r.m4
index 3e8a2f0b218..c60ef34db30 100644
--- a/gnulib/import/m4/getlogin_r.m4
+++ b/gnulib/import/m4/getlogin_r.m4
@@ -1,6 +1,6 @@
#serial 13
-# Copyright (C) 2005-2007, 2009-2021 Free Software Foundation, Inc.
+# Copyright (C) 2005-2007, 2009-2022 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
diff --git a/gnulib/import/m4/getpagesize.m4 b/gnulib/import/m4/getpagesize.m4
index 7e618019171..19f894caacb 100644
--- a/gnulib/import/m4/getpagesize.m4
+++ b/gnulib/import/m4/getpagesize.m4
@@ -1,5 +1,5 @@
# getpagesize.m4 serial 10
-dnl Copyright (C) 2002, 2004-2005, 2007, 2009-2021 Free Software Foundation,
+dnl Copyright (C) 2002, 2004-2005, 2007, 2009-2022 Free Software Foundation,
dnl Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
diff --git a/gnulib/import/m4/getprogname.m4 b/gnulib/import/m4/getprogname.m4
index 65917d6a53a..b26146e9a9f 100644
--- a/gnulib/import/m4/getprogname.m4
+++ b/gnulib/import/m4/getprogname.m4
@@ -1,6 +1,6 @@
# getprogname.m4 - check for getprogname or replacements for it
-# Copyright (C) 2016-2021 Free Software Foundation, Inc.
+# Copyright (C) 2016-2022 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.
diff --git a/gnulib/import/m4/getrandom.m4 b/gnulib/import/m4/getrandom.m4
index 5f174dc7eb3..6ca715005db 100644
--- a/gnulib/import/m4/getrandom.m4
+++ b/gnulib/import/m4/getrandom.m4
@@ -1,5 +1,5 @@
# getrandom.m4 serial 8
-dnl Copyright 2020-2021 Free Software Foundation, Inc.
+dnl Copyright 2020-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/gettimeofday.m4 b/gnulib/import/m4/gettimeofday.m4
index 3c200815740..f729601b1d4 100644
--- a/gnulib/import/m4/gettimeofday.m4
+++ b/gnulib/import/m4/gettimeofday.m4
@@ -1,6 +1,6 @@
-# serial 28
+# serial 29
-# Copyright (C) 2001-2003, 2005, 2007, 2009-2021 Free Software Foundation, Inc.
+# Copyright (C) 2001-2003, 2005, 2007, 2009-2022 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.
@@ -9,10 +9,10 @@ dnl From Jim Meyering.
AC_DEFUN([gl_FUNC_GETTIMEOFDAY],
[
- AC_REQUIRE([gl_HEADER_SYS_TIME_H_DEFAULTS])
+ AC_REQUIRE([gl_SYS_TIME_H_DEFAULTS])
AC_REQUIRE([AC_C_RESTRICT])
AC_REQUIRE([AC_CANONICAL_HOST])
- AC_REQUIRE([gl_HEADER_SYS_TIME_H])
+ AC_REQUIRE([gl_SYS_TIME_H])
AC_CHECK_FUNCS_ONCE([gettimeofday])
gl_gettimeofday_timezone=void
diff --git a/gnulib/import/m4/glob.m4 b/gnulib/import/m4/glob.m4
index 232136ef372..f59b84ff057 100644
--- a/gnulib/import/m4/glob.m4
+++ b/gnulib/import/m4/glob.m4
@@ -1,5 +1,5 @@
-# glob.m4 serial 24
-dnl Copyright (C) 2005-2007, 2009-2021 Free Software Foundation, Inc.
+# glob.m4 serial 26
+dnl Copyright (C) 2005-2007, 2009-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
@@ -66,6 +66,45 @@ char a[_GNU_GLOB_INTERFACE_VERSION == 1 || _GNU_GLOB_INTERFACE_VERSION == 2 ? 1
esac
fi
+ if test $REPLACE_GLOB = 0; then
+ AC_CACHE_CHECK([whether glob NOTDIR*/ omits symlink to nondir],
+ [gl_cv_glob_omit_nondir_symlinks],
+ [if test $cross_compiling != yes; then
+ if ln -s conf$$-file conf$$-globtest 2>/dev/null && touch conf$$-file
+ then
+ gl_cv_glob_omit_nondir_symlinks=maybe
+ else
+ # If we can't make a symlink, then we cannot test this issue. Be
+ # pessimistic about this.
+ gl_cv_glob_omit_nondir_symlinks=no
+ fi
+ if test $gl_cv_glob_omit_nondir_symlinks = maybe; then
+ AC_RUN_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <stddef.h>
+ #include <glob.h>]],
+ [[glob_t found;
+ if (glob ("conf*-globtest/", 0, NULL, &found) != GLOB_NOMATCH)
+ return 1;
+ globfree (&found);
+ ]])],
+ [gl_cv_glob_omit_nondir_symlinks=yes],
+ [gl_cv_glob_omit_nondir_symlinks=no],
+ [dnl We don't get here.
+ :
+ ])
+ fi
+ rm -f conf$$-file conf$$-globtest
+ else
+ gl_cv_glob_omit_nondir_symlinks="$gl_cross_guess_normal"
+ fi
+ ])
+ case "$gl_cv_glob_omit_nondir_symlinks" in
+ *yes) ;;
+ *) REPLACE_GLOB=1 ;;
+ esac
+ fi
+
fi
if test $ac_cv_func_glob_pattern_p = no; then
diff --git a/gnulib/import/m4/glob_h.m4 b/gnulib/import/m4/glob_h.m4
index ef4c9cc2469..41ffde236fa 100644
--- a/gnulib/import/m4/glob_h.m4
+++ b/gnulib/import/m4/glob_h.m4
@@ -1,5 +1,5 @@
-# glob_h.m4 serial 5
-dnl Copyright (C) 2018-2021 Free Software Foundation, Inc.
+# glob_h.m4 serial 9
+dnl Copyright (C) 2018-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
@@ -22,20 +22,18 @@ AC_DEFUN_ONCE([gl_GLOB_H],
AC_SUBST([HAVE_GLOB_H])
m4_ifdef([gl_POSIXCHECK],
- [GLOB_H=glob.h],
- [GLOB_H=''
+ [GL_GENERATE_GLOB_H=true],
+ [GL_GENERATE_GLOB_H=false
if m4_ifdef([gl_ANSI_CXX], [test "$CXX" != no], [false]); then
dnl Override <glob.h> always, to support the C++ GNULIB_NAMESPACE.
- GLOB_H=glob.h
+ GL_GENERATE_GLOB_H=true
else
if test $ac_cv_header_glob_h != yes; then
dnl Provide a substitute <glob.h> file.
- GLOB_H=glob.h
+ GL_GENERATE_GLOB_H=true
fi
fi
])
- AC_SUBST([GLOB_H])
- AM_CONDITIONAL([GL_GENERATE_GLOB_H], [test -n "$GLOB_H"])
dnl Check for declarations of anything we want to poison if the
dnl corresponding gnulib module is not in use.
@@ -47,23 +45,37 @@ AC_DEFUN_ONCE([gl_GLOB_H],
dnl Unconditionally enables the replacement of <glob.h>.
AC_DEFUN([gl_REPLACE_GLOB_H],
[
- AC_REQUIRE([gl_GLOB_H_DEFAULTS])
- GLOB_H='glob.h'
- AM_CONDITIONAL([GL_GENERATE_GLOB_H], [test -n "$GLOB_H"])
+ gl_GLOB_H_REQUIRE_DEFAULTS
+ GL_GENERATE_GLOB_H=true
])
+# gl_GLOB_MODULE_INDICATOR([modulename])
+# sets the shell variable that indicates the presence of the given module
+# to a C preprocessor expression that will evaluate to 1.
+# This macro invocation must not occur in macros that are AC_REQUIREd.
AC_DEFUN([gl_GLOB_MODULE_INDICATOR],
[
- dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
- AC_REQUIRE([gl_GLOB_H_DEFAULTS])
+ dnl Ensure to expand the default settings once only.
+ gl_GLOB_H_REQUIRE_DEFAULTS
gl_MODULE_INDICATOR_SET_VARIABLE([$1])
dnl Define it also as a C macro, for the benefit of the unit tests.
gl_MODULE_INDICATOR_FOR_TESTS([$1])
])
+# Initializes the default values for AC_SUBSTed shell variables.
+# This macro must not be AC_REQUIREd. It must only be invoked, and only
+# outside of macros or in macros that are not AC_REQUIREd.
+AC_DEFUN([gl_GLOB_H_REQUIRE_DEFAULTS],
+[
+ m4_defun(GL_MODULE_INDICATOR_PREFIX[_GLOB_H_MODULE_INDICATOR_DEFAULTS], [
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GLOB])
+ ])
+ m4_require(GL_MODULE_INDICATOR_PREFIX[_GLOB_H_MODULE_INDICATOR_DEFAULTS])
+ AC_REQUIRE([gl_GLOB_H_DEFAULTS])
+])
+
AC_DEFUN([gl_GLOB_H_DEFAULTS],
[
- GNULIB_GLOB=0; AC_SUBST([GNULIB_GLOB])
dnl Assume POSIX and GNU behavior unless another module says otherwise.
HAVE_GLOB=1; AC_SUBST([HAVE_GLOB])
HAVE_GLOB_PATTERN_P=1; AC_SUBST([HAVE_GLOB_PATTERN_P])
diff --git a/gnulib/import/m4/gnulib-cache.m4 b/gnulib/import/m4/gnulib-cache.m4
index 381cdde68f2..a5f8e300ffc 100644
--- a/gnulib/import/m4/gnulib-cache.m4
+++ b/gnulib/import/m4/gnulib-cache.m4
@@ -1,8 +1,8 @@
-# Copyright (C) 2002-2021 Free Software Foundation, Inc.
+# Copyright (C) 2002-2022 Free Software Foundation, Inc.
#
# This file is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
+# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This file is distributed in the hope that it will be useful,
diff --git a/gnulib/import/m4/gnulib-common.m4 b/gnulib/import/m4/gnulib-common.m4
index 535359b2cf6..30911d1581a 100644
--- a/gnulib/import/m4/gnulib-common.m4
+++ b/gnulib/import/m4/gnulib-common.m4
@@ -1,5 +1,5 @@
-# gnulib-common.m4 serial 63
-dnl Copyright (C) 2007-2021 Free Software Foundation, Inc.
+# gnulib-common.m4 serial 73
+dnl Copyright (C) 2007-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
@@ -39,11 +39,12 @@ AC_DEFUN([gl_COMMON_BODY], [
this syntax with 'extern'. */
# define _Noreturn [[noreturn]]
# elif ((!defined __cplusplus || defined __clang__) \
- && (201112 <= (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) \
- || _GL_GNUC_PREREQ (4, 7) \
- || (defined __apple_build_version__ \
- ? 6000000 <= __apple_build_version__ \
- : 3 < __clang_major__ + (5 <= __clang_minor__))))
+ && (201112 <= (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) \
+ || (!defined __STRICT_ANSI__ \
+ && (_GL_GNUC_PREREQ (4, 7) \
+ || (defined __apple_build_version__ \
+ ? 6000000 <= __apple_build_version__ \
+ : 3 < __clang_major__ + (5 <= __clang_minor__))))))
/* _Noreturn works as-is. */
# elif _GL_GNUC_PREREQ (2, 8) || defined __clang__ || 0x5110 <= __SUNPRO_C
# define _Noreturn __attribute__ ((__noreturn__))
@@ -66,7 +67,11 @@ AC_DEFUN([gl_COMMON_BODY], [
#endif])
AH_VERBATIM([attribute],
[/* Attributes. */
-#ifdef __has_attribute
+#if (defined __has_attribute \
+ && (!defined __clang_minor__ \
+ || (defined __apple_build_version__ \
+ ? 6000000 <= __apple_build_version__ \
+ : 3 < __clang_major__ + (5 <= __clang_minor__))))
# define _GL_HAS_ATTRIBUTE(attr) __has_attribute (__##attr##__)
#else
# define _GL_HAS_ATTRIBUTE(attr) _GL_ATTR_##attr
@@ -82,12 +87,12 @@ AC_DEFUN([gl_COMMON_BODY], [
# define _GL_ATTR_fallthrough _GL_GNUC_PREREQ (7, 0)
# define _GL_ATTR_format _GL_GNUC_PREREQ (2, 7)
# define _GL_ATTR_leaf _GL_GNUC_PREREQ (4, 6)
+# define _GL_ATTR_malloc _GL_GNUC_PREREQ (3, 0)
# ifdef _ICC
# define _GL_ATTR_may_alias 0
# else
# define _GL_ATTR_may_alias _GL_GNUC_PREREQ (3, 3)
# endif
-# define _GL_ATTR_malloc _GL_GNUC_PREREQ (3, 0)
# define _GL_ATTR_noinline _GL_GNUC_PREREQ (3, 1)
# define _GL_ATTR_nonnull _GL_GNUC_PREREQ (3, 3)
# define _GL_ATTR_nonstring _GL_GNUC_PREREQ (8, 0)
@@ -100,26 +105,51 @@ AC_DEFUN([gl_COMMON_BODY], [
# define _GL_ATTR_warn_unused_result _GL_GNUC_PREREQ (3, 4)
#endif
+#ifdef __has_c_attribute
+# if ((defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) <= 201710 \
+ && _GL_GNUC_PREREQ (4, 6))
+# pragma GCC diagnostic ignored "-Wpedantic"
+# endif
+# define _GL_HAS_C_ATTRIBUTE(attr) __has_c_attribute (__##attr##__)
+#else
+# define _GL_HAS_C_ATTRIBUTE(attr) 0
+#endif
+
]dnl There is no _GL_ATTRIBUTE_ALIGNED; use stdalign's _Alignas instead.
[
+/* _GL_ATTRIBUTE_ALLOC_SIZE ((N)) declares that the Nth argument of the function
+ is the size of the returned memory block.
+ _GL_ATTRIBUTE_ALLOC_SIZE ((M, N)) declares that the Mth argument multiplied
+ by the Nth argument of the function is the size of the returned memory block.
+ */
+/* Applies to: function, pointer to function, function types. */
#if _GL_HAS_ATTRIBUTE (alloc_size)
# define _GL_ATTRIBUTE_ALLOC_SIZE(args) __attribute__ ((__alloc_size__ args))
#else
# define _GL_ATTRIBUTE_ALLOC_SIZE(args)
#endif
+/* _GL_ATTRIBUTE_ALWAYS_INLINE tells that the compiler should always inline the
+ function and report an error if it cannot do so. */
+/* Applies to: function. */
#if _GL_HAS_ATTRIBUTE (always_inline)
# define _GL_ATTRIBUTE_ALWAYS_INLINE __attribute__ ((__always_inline__))
#else
# define _GL_ATTRIBUTE_ALWAYS_INLINE
#endif
+/* _GL_ATTRIBUTE_ARTIFICIAL declares that the function is not important to show
+ in stack traces when debugging. The compiler should omit the function from
+ stack traces. */
+/* Applies to: function. */
#if _GL_HAS_ATTRIBUTE (artificial)
# define _GL_ATTRIBUTE_ARTIFICIAL __attribute__ ((__artificial__))
#else
# define _GL_ATTRIBUTE_ARTIFICIAL
#endif
+/* _GL_ATTRIBUTE_COLD declares that the function is rarely executed. */
+/* Applies to: functions. */
/* Avoid __attribute__ ((cold)) on MinGW; see thread starting at
<https://lists.gnu.org/r/emacs-devel/2019-04/msg01152.html>.
Also, Oracle Studio 12.6 requires 'cold' not '__cold__'. */
@@ -133,13 +163,46 @@ AC_DEFUN([gl_COMMON_BODY], [
# define _GL_ATTRIBUTE_COLD
#endif
+/* _GL_ATTRIBUTE_CONST declares that it is OK for a compiler to omit duplicate
+ calls to the function with the same arguments.
+ This attribute is safe for a function that neither depends on nor affects
+ observable state, and always returns exactly once - e.g., does not loop
+ forever, and does not call longjmp.
+ (This attribute is stricter than _GL_ATTRIBUTE_PURE.) */
+/* Applies to: functions. */
#if _GL_HAS_ATTRIBUTE (const)
# define _GL_ATTRIBUTE_CONST __attribute__ ((__const__))
#else
# define _GL_ATTRIBUTE_CONST
#endif
-#if 201710L < __STDC_VERSION__
+/* _GL_ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers
+ that can be freed by passing them as the Ith argument to the
+ function F.
+ _GL_ATTRIBUTE_DEALLOC_FREE declares that the function returns pointers that
+ can be freed via 'free'; it can be used only after declaring 'free'. */
+/* Applies to: functions. Cannot be used on inline functions. */
+#if _GL_GNUC_PREREQ (11, 0)
+# define _GL_ATTRIBUTE_DEALLOC(f, i) __attribute__ ((__malloc__ (f, i)))
+#else
+# define _GL_ATTRIBUTE_DEALLOC(f, i)
+#endif
+/* If gnulib's <string.h> or <wchar.h> has already defined this macro, continue
+ to use this earlier definition, since <stdlib.h> may not have been included
+ yet. */
+#ifndef _GL_ATTRIBUTE_DEALLOC_FREE
+# define _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_DEALLOC (free, 1)
+#endif
+
+/* _GL_ATTRIBUTE_DEPRECATED: Declares that an entity is deprecated.
+ The compiler may warn if the entity is used. */
+/* Applies to:
+ - function, variable,
+ - struct, union, struct/union member,
+ - enumeration, enumeration item,
+ - typedef,
+ in C++ also: namespace, class, template specialization. */
+#if _GL_HAS_C_ATTRIBUTE (deprecated)
# define _GL_ATTRIBUTE_DEPRECATED [[__deprecated__]]
#elif _GL_HAS_ATTRIBUTE (deprecated)
# define _GL_ATTRIBUTE_DEPRECATED __attribute__ ((__deprecated__))
@@ -147,6 +210,11 @@ AC_DEFUN([gl_COMMON_BODY], [
# define _GL_ATTRIBUTE_DEPRECATED
#endif
+/* _GL_ATTRIBUTE_ERROR(msg) requests an error if a function is called and
+ the function call is not optimized away.
+ _GL_ATTRIBUTE_WARNING(msg) requests a warning if a function is called and
+ the function call is not optimized away. */
+/* Applies to: functions. */
#if _GL_HAS_ATTRIBUTE (error)
# define _GL_ATTRIBUTE_ERROR(msg) __attribute__ ((__error__ (msg)))
# define _GL_ATTRIBUTE_WARNING(msg) __attribute__ ((__warning__ (msg)))
@@ -158,14 +226,21 @@ AC_DEFUN([gl_COMMON_BODY], [
# define _GL_ATTRIBUTE_WARNING(msg)
#endif
+/* _GL_ATTRIBUTE_EXTERNALLY_VISIBLE declares that the entity should remain
+ visible to debuggers etc., even with '-fwhole-program'. */
+/* Applies to: functions, variables. */
#if _GL_HAS_ATTRIBUTE (externally_visible)
# define _GL_ATTRIBUTE_EXTERNALLY_VISIBLE __attribute__ ((externally_visible))
#else
# define _GL_ATTRIBUTE_EXTERNALLY_VISIBLE
#endif
-/* FALLTHROUGH is special, because it always expands to something. */
-#if 201710L < __STDC_VERSION__
+/* _GL_ATTRIBUTE_FALLTHROUGH declares that it is not a programming mistake if
+ the control flow falls through to the immediately following 'case' or
+ 'default' label. The compiler should not warn in this case. */
+/* Applies to: Empty statement (;), inside a 'switch' statement. */
+/* Always expands to something. */
+#if _GL_HAS_C_ATTRIBUTE (fallthrough)
# define _GL_ATTRIBUTE_FALLTHROUGH [[__fallthrough__]]
#elif _GL_HAS_ATTRIBUTE (fallthrough)
# define _GL_ATTRIBUTE_FALLTHROUGH __attribute__ ((__fallthrough__))
@@ -173,18 +248,47 @@ AC_DEFUN([gl_COMMON_BODY], [
# define _GL_ATTRIBUTE_FALLTHROUGH ((void) 0)
#endif
+/* _GL_ATTRIBUTE_FORMAT ((ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK))
+ declares that the STRING-INDEXth function argument is a format string of
+ style ARCHETYPE, which is one of:
+ printf, gnu_printf
+ scanf, gnu_scanf,
+ strftime, gnu_strftime,
+ strfmon,
+ or the same thing prefixed and suffixed with '__'.
+ If FIRST-TO-CHECK is not 0, arguments starting at FIRST-TO_CHECK
+ are suitable for the format string. */
+/* Applies to: functions. */
#if _GL_HAS_ATTRIBUTE (format)
# define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec))
#else
# define _GL_ATTRIBUTE_FORMAT(spec)
#endif
+/* _GL_ATTRIBUTE_LEAF declares that if the function is called from some other
+ compilation unit, it executes code from that unit only by return or by
+ exception handling. This declaration lets the compiler optimize that unit
+ more aggressively. */
+/* Applies to: functions. */
#if _GL_HAS_ATTRIBUTE (leaf)
# define _GL_ATTRIBUTE_LEAF __attribute__ ((__leaf__))
#else
# define _GL_ATTRIBUTE_LEAF
#endif
+/* _GL_ATTRIBUTE_MALLOC declares that the function returns a pointer to freshly
+ allocated memory. */
+/* Applies to: functions. */
+#if _GL_HAS_ATTRIBUTE (malloc)
+# define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__))
+#else
+# define _GL_ATTRIBUTE_MALLOC
+#endif
+
+/* _GL_ATTRIBUTE_MAY_ALIAS declares that pointers to the type may point to the
+ same storage as pointers to other types. Thus this declaration disables
+ strict aliasing optimization. */
+/* Applies to: types. */
/* Oracle Studio 12.6 mishandles may_alias despite __has_attribute OK. */
#if _GL_HAS_ATTRIBUTE (may_alias) && !defined __SUNPRO_C
# define _GL_ATTRIBUTE_MAY_ALIAS __attribute__ ((__may_alias__))
@@ -192,24 +296,33 @@ AC_DEFUN([gl_COMMON_BODY], [
# define _GL_ATTRIBUTE_MAY_ALIAS
#endif
-#if 201710L < __STDC_VERSION__
+/* _GL_ATTRIBUTE_MAYBE_UNUSED declares that it is not a programming mistake if
+ the entity is not used. The compiler should not warn if the entity is not
+ used. */
+/* Applies to:
+ - function, variable,
+ - struct, union, struct/union member,
+ - enumeration, enumeration item,
+ - typedef,
+ in C++ also: class. */
+/* In C++ and C2x, this is spelled [[__maybe_unused__]].
+ GCC's syntax is __attribute__ ((__unused__)).
+ clang supports both syntaxes. */
+#if _GL_HAS_C_ATTRIBUTE (maybe_unused)
# define _GL_ATTRIBUTE_MAYBE_UNUSED [[__maybe_unused__]]
-#elif _GL_HAS_ATTRIBUTE (unused)
-# define _GL_ATTRIBUTE_MAYBE_UNUSED __attribute__ ((__unused__))
#else
-# define _GL_ATTRIBUTE_MAYBE_UNUSED
+# define _GL_ATTRIBUTE_MAYBE_UNUSED _GL_ATTRIBUTE_UNUSED
#endif
-/* Earlier spellings of this macro. */
+/* Alternative spelling of this macro, for convenience. */
#define _GL_UNUSED _GL_ATTRIBUTE_MAYBE_UNUSED
+/* Earlier spellings of this macro. */
#define _UNUSED_PARAMETER_ _GL_ATTRIBUTE_MAYBE_UNUSED
-#if _GL_HAS_ATTRIBUTE (malloc)
-# define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__))
-#else
-# define _GL_ATTRIBUTE_MALLOC
-#endif
-
-#if 201710L < __STDC_VERSION__
+/* _GL_ATTRIBUTE_NODISCARD declares that the caller of the function should not
+ discard the return value. The compiler may warn if the caller does not use
+ the return value, unless the caller uses something like ignore_value. */
+/* Applies to: function, enumeration, class. */
+#if _GL_HAS_C_ATTRIBUTE (nodiscard)
# define _GL_ATTRIBUTE_NODISCARD [[__nodiscard__]]
#elif _GL_HAS_ATTRIBUTE (warn_unused_result)
# define _GL_ATTRIBUTE_NODISCARD __attribute__ ((__warn_unused_result__))
@@ -217,18 +330,30 @@ AC_DEFUN([gl_COMMON_BODY], [
# define _GL_ATTRIBUTE_NODISCARD
#endif
+/* _GL_ATTRIBUTE_NOINLINE tells that the compiler should not inline the
+ function. */
+/* Applies to: functions. */
#if _GL_HAS_ATTRIBUTE (noinline)
# define _GL_ATTRIBUTE_NOINLINE __attribute__ ((__noinline__))
#else
# define _GL_ATTRIBUTE_NOINLINE
#endif
+/* _GL_ATTRIBUTE_NONNULL ((N1, N2,...)) declares that the arguments N1, N2,...
+ must not be NULL.
+ _GL_ATTRIBUTE_NONNULL () declares that all pointer arguments must not be
+ null. */
+/* Applies to: functions. */
#if _GL_HAS_ATTRIBUTE (nonnull)
# define _GL_ATTRIBUTE_NONNULL(args) __attribute__ ((__nonnull__ args))
#else
# define _GL_ATTRIBUTE_NONNULL(args)
#endif
+/* _GL_ATTRIBUTE_NONSTRING declares that the contents of a character array is
+ not meant to be NUL-terminated. */
+/* Applies to: struct/union members and variables that are arrays of element
+ type '[[un]signed] char'. */
#if _GL_HAS_ATTRIBUTE (nonstring)
# define _GL_ATTRIBUTE_NONSTRING __attribute__ ((__nonstring__))
#else
@@ -237,41 +362,77 @@ AC_DEFUN([gl_COMMON_BODY], [
/* There is no _GL_ATTRIBUTE_NORETURN; use _Noreturn instead. */
+/* _GL_ATTRIBUTE_NOTHROW declares that the function does not throw exceptions.
+ */
+/* Applies to: functions. */
#if _GL_HAS_ATTRIBUTE (nothrow) && !defined __cplusplus
# define _GL_ATTRIBUTE_NOTHROW __attribute__ ((__nothrow__))
#else
# define _GL_ATTRIBUTE_NOTHROW
#endif
+/* _GL_ATTRIBUTE_PACKED declares:
+ For struct members: The member has the smallest possible alignment.
+ For struct, union, class: All members have the smallest possible alignment,
+ minimizing the memory required. */
+/* Applies to: struct members, struct, union,
+ in C++ also: class. */
#if _GL_HAS_ATTRIBUTE (packed)
# define _GL_ATTRIBUTE_PACKED __attribute__ ((__packed__))
#else
# define _GL_ATTRIBUTE_PACKED
#endif
+/* _GL_ATTRIBUTE_PURE declares that It is OK for a compiler to omit duplicate
+ calls to the function with the same arguments if observable state is not
+ changed between calls.
+ This attribute is safe for a function that does not affect
+ observable state, and always returns exactly once.
+ (This attribute is looser than _GL_ATTRIBUTE_CONST.) */
+/* Applies to: functions. */
#if _GL_HAS_ATTRIBUTE (pure)
# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
#else
# define _GL_ATTRIBUTE_PURE
#endif
+/* _GL_ATTRIBUTE_RETURNS_NONNULL declares that the function's return value is
+ a non-NULL pointer. */
+/* Applies to: functions. */
#if _GL_HAS_ATTRIBUTE (returns_nonnull)
# define _GL_ATTRIBUTE_RETURNS_NONNULL __attribute__ ((__returns_nonnull__))
#else
# define _GL_ATTRIBUTE_RETURNS_NONNULL
#endif
+/* _GL_ATTRIBUTE_SENTINEL(pos) declares that the variadic function expects a
+ trailing NULL argument.
+ _GL_ATTRIBUTE_SENTINEL () - The last argument is NULL (requires C99).
+ _GL_ATTRIBUTE_SENTINEL ((N)) - The (N+1)st argument from the end is NULL. */
+/* Applies to: functions. */
#if _GL_HAS_ATTRIBUTE (sentinel)
# define _GL_ATTRIBUTE_SENTINEL(pos) __attribute__ ((__sentinel__ pos))
#else
# define _GL_ATTRIBUTE_SENTINEL(pos)
#endif
+/* A helper macro. Don't use it directly. */
+#if _GL_HAS_ATTRIBUTE (unused)
+# define _GL_ATTRIBUTE_UNUSED __attribute__ ((__unused__))
+#else
+# define _GL_ATTRIBUTE_UNUSED
+#endif
+
]dnl There is no _GL_ATTRIBUTE_VISIBILITY; see m4/visibility.m4 instead.
[
-/* To support C++ as well as C, use _GL_UNUSED_LABEL with trailing ';'. */
-#if !defined __cplusplus || _GL_GNUC_PREREQ (4, 5)
-# define _GL_UNUSED_LABEL _GL_ATTRIBUTE_MAYBE_UNUSED
+/* _GL_UNUSED_LABEL; declares that it is not a programming mistake if the
+ immediately preceding label is not used. The compiler should not warn
+ if the label is not used. */
+/* Applies to: label (both in C and C++). */
+/* Note that g++ < 4.5 does not support the '__attribute__ ((__unused__)) ;'
+ syntax. But clang does. */
+#if !(defined __cplusplus && !_GL_GNUC_PREREQ (4, 5)) || defined __clang__
+# define _GL_UNUSED_LABEL _GL_ATTRIBUTE_UNUSED
#else
# define _GL_UNUSED_LABEL
#endif
@@ -354,6 +515,16 @@ AC_DEFUN([gl_COMMON_BODY], [
export LIBC_FATAL_STDERR_
])
+# gl_MODULE_INDICATOR_INIT_VARIABLE([variablename])
+# gl_MODULE_INDICATOR_INIT_VARIABLE([variablename], [initialvalue])
+# initializes the shell variable that indicates the presence of the given module
+# as a C preprocessor expression.
+AC_DEFUN([gl_MODULE_INDICATOR_INIT_VARIABLE],
+[
+ GL_MODULE_INDICATOR_PREFIX[]_[$1]=m4_if([$2], , [0], [$2])
+ AC_SUBST(GL_MODULE_INDICATOR_PREFIX[]_[$1])
+])
+
# gl_MODULE_INDICATOR_CONDITION
# expands to a C preprocessor expression that evaluates to 1 or 0, depending
# whether a gnulib module that has been requested shall be considered present
@@ -366,9 +537,9 @@ m4_define([gl_MODULE_INDICATOR_CONDITION], [1])
AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE],
[
gl_MODULE_INDICATOR_SET_VARIABLE_AUX(
- [GNULIB_[]m4_translit([[$1]],
- [abcdefghijklmnopqrstuvwxyz./-],
- [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])],
+ [GL_MODULE_INDICATOR_PREFIX[]_GNULIB_[]m4_translit([[$1]],
+ [abcdefghijklmnopqrstuvwxyz./-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])],
[gl_MODULE_INDICATOR_CONDITION])
])
@@ -653,6 +824,186 @@ AC_DEFUN([gl_CACHE_VAL_SILENT],
])
])
+# gl_CONDITIONAL(conditional, condition)
+# is like AM_CONDITIONAL(conditional, condition), except that it does not
+# produce an error
+# configure: error: conditional "..." was never defined.
+# Usually this means the macro was only invoked conditionally.
+# when only invoked conditionally. Instead, in that case, both the _TRUE
+# and the _FALSE case are disabled.
+AC_DEFUN([gl_CONDITIONAL],
+[
+ pushdef([AC_CONFIG_COMMANDS_PRE], [:])dnl
+ AM_CONDITIONAL([$1], [$2])
+ popdef([AC_CONFIG_COMMANDS_PRE])dnl
+ if test -z "${[$1]_TRUE}" && test -z "${[$1]_FALSE}"; then
+ [$1]_TRUE='#'
+ [$1]_FALSE='#'
+ fi
+])
+
+# gl_CC_ALLOW_WARNINGS
+# sets and substitutes a variable GL_CFLAG_ALLOW_WARNINGS, to a $(CC) option
+# that reverts a preceding '-Werror' option, if available.
+# This is expected to be '-Wno-error' on gcc, clang (except clang/MSVC), xlclang
+# and empty otherwise.
+AC_DEFUN([gl_CC_ALLOW_WARNINGS],
+[
+ AC_REQUIRE([AC_PROG_CC])
+ AC_CACHE_CHECK([for C compiler option to allow warnings],
+ [gl_cv_cc_wallow],
+ [rm -f conftest*
+ echo 'int dummy;' > conftest.c
+ AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -c conftest.c 2>conftest1.err]) >/dev/null
+ AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -Wno-error -c conftest.c 2>conftest2.err]) >/dev/null
+ dnl Test the number of error output lines, because AIX xlc accepts the
+ dnl option '-Wno-error', just to produce a warning
+ dnl "Option -Wno-error was incorrectly specified. The option will be ignored."
+ dnl afterwards.
+ if test $? = 0 && test `wc -l < conftest1.err` = `wc -l < conftest2.err`; then
+ gl_cv_cc_wallow='-Wno-error'
+ else
+ gl_cv_cc_wallow=none
+ fi
+ rm -f conftest*
+ ])
+ case "$gl_cv_cc_wallow" in
+ none) GL_CFLAG_ALLOW_WARNINGS='' ;;
+ *) GL_CFLAG_ALLOW_WARNINGS="$gl_cv_cc_wallow" ;;
+ esac
+ AC_SUBST([GL_CFLAG_ALLOW_WARNINGS])
+])
+
+# gl_CXX_ALLOW_WARNINGS
+# sets and substitutes a variable GL_CXXFLAG_ALLOW_WARNINGS, to a $(CC) option
+# that reverts a preceding '-Werror' option, if available.
+AC_DEFUN([gl_CXX_ALLOW_WARNINGS],
+[
+ dnl Requires AC_PROG_CXX or gl_PROG_ANSI_CXX.
+ if test -n "$CXX" && test "$CXX" != no; then
+ AC_CACHE_CHECK([for C++ compiler option to allow warnings],
+ [gl_cv_cxx_wallow],
+ [rm -f conftest*
+ echo 'int dummy;' > conftest.cc
+ AC_TRY_COMMAND([${CXX-c++} $CXXFLAGS $CPPFLAGS -c conftest.cc 2>conftest1.err]) >/dev/null
+ AC_TRY_COMMAND([${CXX-c++} $CXXFLAGS $CPPFLAGS -Wno-error -c conftest.cc 2>conftest2.err]) >/dev/null
+ dnl Test the number of error output lines, because AIX xlC accepts the
+ dnl option '-Wno-error', just to produce a warning
+ dnl "Option -Wno-error was incorrectly specified. The option will be ignored."
+ dnl afterwards.
+ if test $? = 0 && test `wc -l < conftest1.err` = `wc -l < conftest2.err`; then
+ gl_cv_cxx_wallow='-Wno-error'
+ else
+ gl_cv_cxx_wallow=none
+ fi
+ rm -f conftest*
+ ])
+ case "$gl_cv_cxx_wallow" in
+ none) GL_CXXFLAG_ALLOW_WARNINGS='' ;;
+ *) GL_CXXFLAG_ALLOW_WARNINGS="$gl_cv_cxx_wallow" ;;
+ esac
+ else
+ GL_CXXFLAG_ALLOW_WARNINGS=''
+ fi
+ AC_SUBST([GL_CXXFLAG_ALLOW_WARNINGS])
+])
+
+# gl_CC_GNULIB_WARNINGS
+# sets and substitutes a variable GL_CFLAG_GNULIB_WARNINGS, to a $(CC) option
+# set that enables or disables warnings as suitable for the Gnulib coding style.
+AC_DEFUN([gl_CC_GNULIB_WARNINGS],
+[
+ AC_REQUIRE([gl_CC_ALLOW_WARNINGS])
+ dnl Assume that the compiler supports -Wno-* options only if it also supports
+ dnl -Wno-error.
+ GL_CFLAG_GNULIB_WARNINGS=''
+ if test -n "$GL_CFLAG_ALLOW_WARNINGS"; then
+ dnl Enable these warning options:
+ dnl
+ dnl GCC clang
+ dnl -Wno-cast-qual >= 3 >= 3.9
+ dnl -Wno-conversion >= 3 >= 3.9
+ dnl -Wno-float-conversion >= 4.9 >= 3.9
+ dnl -Wno-float-equal >= 3 >= 3.9
+ dnl -Wimplicit-fallthrough >= 7 >= 3.9
+ dnl -Wno-pedantic >= 4.8 >= 3.9
+ dnl -Wno-sign-compare >= 3 >= 3.9
+ dnl -Wno-sign-conversion >= 4.3 >= 3.9
+ dnl -Wno-type-limits >= 4.3 >= 3.9
+ dnl -Wno-undef >= 3 >= 3.9
+ dnl -Wno-unsuffixed-float-constants >= 4.5
+ dnl -Wno-unused-function >= 3 >= 3.9
+ dnl -Wno-unused-parameter >= 3 >= 3.9
+ dnl
+ cat > conftest.c <<\EOF
+ #if __GNUC__ >= 3 || (__clang_major__ + (__clang_minor__ >= 9) > 3)
+ -Wno-cast-qual
+ -Wno-conversion
+ -Wno-float-equal
+ -Wno-sign-compare
+ -Wno-undef
+ -Wno-unused-function
+ -Wno-unused-parameter
+ #endif
+ #if __GNUC__ + (__GNUC_MINOR__ >= 9) > 4 || (__clang_major__ + (__clang_minor__ >= 9) > 3)
+ -Wno-float-conversion
+ #endif
+ #if __GNUC__ >= 7 || (__clang_major__ + (__clang_minor__ >= 9) > 3)
+ -Wimplicit-fallthrough
+ #endif
+ #if __GNUC__ + (__GNUC_MINOR__ >= 8) > 4 || (__clang_major__ + (__clang_minor__ >= 9) > 3)
+ -Wno-pedantic
+ #endif
+ #if __GNUC__ + (__GNUC_MINOR__ >= 3) > 4 || (__clang_major__ + (__clang_minor__ >= 9) > 3)
+ -Wno-sign-conversion
+ -Wno-type-limits
+ #endif
+ #if __GNUC__ + (__GNUC_MINOR__ >= 5) > 4
+ -Wno-unsuffixed-float-constants
+ #endif
+EOF
+ gl_command="$CC $CFLAGS $CPPFLAGS -E conftest.c > conftest.out"
+ if AC_TRY_EVAL([gl_command]); then
+ gl_options=`grep -v '#' conftest.out`
+ for word in $gl_options; do
+ GL_CFLAG_GNULIB_WARNINGS="$GL_CFLAG_GNULIB_WARNINGS $word"
+ done
+ fi
+ rm -f conftest.c conftest.out
+ fi
+ AC_SUBST([GL_CFLAG_GNULIB_WARNINGS])
+])
+
+dnl gl_CONDITIONAL_HEADER([foo.h])
+dnl takes a shell variable GL_GENERATE_FOO_H (with value true or false) as input
+dnl and produces
+dnl - an AC_SUBSTed variable FOO_H that is either a file name or empty, based
+dnl on whether GL_GENERATE_FOO_H is true or false,
+dnl - an Automake conditional GL_GENERATE_FOO_H that evaluates to the value of
+dnl the shell variable GL_GENERATE_FOO_H.
+AC_DEFUN([gl_CONDITIONAL_HEADER],
+[
+ m4_pushdef([gl_header_name], AS_TR_SH(m4_toupper($1)))
+ m4_pushdef([gl_generate_var], [GL_GENERATE_]AS_TR_SH(m4_toupper($1)))
+ m4_pushdef([gl_generate_cond], [GL_GENERATE_]AS_TR_SH(m4_toupper($1)))
+ case "$gl_generate_var" in
+ false) gl_header_name='' ;;
+ true)
+ dnl It is OK to use a .h file in lib/ from within tests/, but not vice
+ dnl versa.
+ if test -z "$gl_header_name"; then
+ gl_header_name="${gl_source_base_prefix}$1"
+ fi
+ ;;
+ *) echo "*** gl_generate_var is not set correctly" 1>&2; exit 1 ;;
+ esac
+ AC_SUBST(gl_header_name)
+ gl_CONDITIONAL(gl_generate_cond, [$gl_generate_var])
+ m4_popdef([gl_generate_cond])
+ m4_popdef([gl_generate_var])
+ m4_popdef([gl_header_name])
+])
+
dnl Expands to some code for use in .c programs that, on native Windows, defines
dnl the Microsoft deprecated alias function names to the underscore-prefixed
dnl actual function names. With this macro, these function names are available
diff --git a/gnulib/import/m4/gnulib-comp.m4 b/gnulib/import/m4/gnulib-comp.m4
index 5376a93c792..94e2cfe1a52 100644
--- a/gnulib/import/m4/gnulib-comp.m4
+++ b/gnulib/import/m4/gnulib-comp.m4
@@ -1,9 +1,9 @@
# DO NOT EDIT! GENERATED AUTOMATICALLY!
-# Copyright (C) 2002-2021 Free Software Foundation, Inc.
+# Copyright (C) 2002-2022 Free Software Foundation, Inc.
#
# This file is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
+# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This file is distributed in the hope that it will be useful,
@@ -42,7 +42,6 @@ AC_DEFUN([gl_EARLY],
AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
AC_REQUIRE([gl_PROG_AR_RANLIB])
- AC_REQUIRE([AM_PROG_CC_C_O])
# Code from module absolute-header:
# Code from module accept:
# Code from module alloca:
@@ -104,6 +103,7 @@ AC_DEFUN([gl_EARLY],
# Code from module frexpl:
# Code from module fstat:
# Code from module fstatat:
+ # Code from module gen-header:
# Code from module gendocs:
# Code from module getcwd:
# Code from module getcwd-lgpl:
@@ -130,6 +130,7 @@ AC_DEFUN([gl_EARLY],
# Code from module isnanl-nolibm:
# Code from module largefile:
AC_REQUIRE([AC_SYS_LARGEFILE])
+ AC_REQUIRE([gl_YEAR2038_EARLY])
# Code from module libc-config:
# Code from module limits-h:
# Code from module listen:
@@ -229,6 +230,7 @@ AC_DEFUN([gl_EARLY],
# Code from module unistd-safer:
# Code from module unsetenv:
# Code from module update-copyright:
+ # Code from module vararrays:
# Code from module verify:
# Code from module wchar:
# Code from module wctype-h:
@@ -245,6 +247,7 @@ AC_DEFUN([gl_EARLY],
# "Check for header files, types and library functions".
AC_DEFUN([gl_INIT],
[
+ AC_CONFIG_LIBOBJ_DIR([import])
AM_CONDITIONAL([GL_COND_LIBTOOL], [false])
gl_cond_libtool=false
gl_libdeps=
@@ -255,133 +258,137 @@ AC_DEFUN([gl_INIT],
m4_pushdef([AC_LIBSOURCES], m4_defn([gl_LIBSOURCES]))
m4_pushdef([gl_LIBSOURCES_LIST], [])
m4_pushdef([gl_LIBSOURCES_DIR], [])
+ m4_pushdef([GL_MACRO_PREFIX], [gl])
+ m4_pushdef([GL_MODULE_INDICATOR_PREFIX], [GL])
gl_COMMON
gl_source_base='import'
- AC_REQUIRE([gl_HEADER_SYS_SOCKET])
- if test "$ac_cv_header_winsock2_h" = yes; then
- AC_LIBOBJ([accept])
- fi
+ gl_source_base_prefix=
+ AC_REQUIRE([gl_SYS_SOCKET_H])
+ gl_CONDITIONAL([GL_COND_OBJ_ACCEPT], [test "$ac_cv_header_winsock2_h" = yes])
gl_SYS_SOCKET_MODULE_INDICATOR([accept])
gl_FUNC_ALLOCA
- gl_HEADER_ARPA_INET
+ gl_CONDITIONAL_HEADER([alloca.h])
+ AC_PROG_MKDIR_P
+ gl_ARPA_INET_H
+ gl_ARPA_INET_H_REQUIRE_DEFAULTS
AC_PROG_MKDIR_P
AC_REQUIRE([AC_CANONICAL_HOST])
- AC_REQUIRE([gl_HEADER_SYS_SOCKET])
- if test "$ac_cv_header_winsock2_h" = yes; then
- AC_LIBOBJ([bind])
- fi
+ AC_REQUIRE([gl_SYS_SOCKET_H])
+ gl_CONDITIONAL([GL_COND_OBJ_BIND], [test "$ac_cv_header_winsock2_h" = yes])
gl_SYS_SOCKET_MODULE_INDICATOR([bind])
gl_FUNC_BTOWC
- if test $HAVE_BTOWC = 0 || test $REPLACE_BTOWC = 1; then
- AC_LIBOBJ([btowc])
+ gl_CONDITIONAL([GL_COND_OBJ_BTOWC],
+ [test $HAVE_BTOWC = 0 || test $REPLACE_BTOWC = 1])
+ AM_COND_IF([GL_COND_OBJ_BTOWC], [
gl_PREREQ_BTOWC
- fi
+ ])
gl_WCHAR_MODULE_INDICATOR([btowc])
gl___BUILTIN_EXPECT
gl_CANONICALIZE_LGPL
- if test $HAVE_CANONICALIZE_FILE_NAME = 0 || test $REPLACE_CANONICALIZE_FILE_NAME = 1; then
- AC_LIBOBJ([canonicalize-lgpl])
- fi
+ gl_CONDITIONAL([GL_COND_OBJ_CANONICALIZE_LGPL],
+ [test $HAVE_CANONICALIZE_FILE_NAME = 0 || test $REPLACE_CANONICALIZE_FILE_NAME = 1])
gl_MODULE_INDICATOR([canonicalize-lgpl])
gl_STDLIB_MODULE_INDICATOR([canonicalize_file_name])
gl_STDLIB_MODULE_INDICATOR([realpath])
gl_UNISTD_MODULE_INDICATOR([chdir])
gl_FUNC_CHDIR_LONG
- if test $gl_cv_have_unlimited_file_name_length = no; then
- AC_LIBOBJ([chdir-long])
+ gl_CONDITIONAL([GL_COND_OBJ_CHDIR_LONG],
+ [test $gl_cv_have_unlimited_file_name_length = no])
+ AM_COND_IF([GL_COND_OBJ_CHDIR_LONG], [
gl_PREREQ_CHDIR_LONG
- fi
+ ])
gl_FUNC_CHOWN
- if test $HAVE_CHOWN = 0 || test $REPLACE_CHOWN = 1; then
- AC_LIBOBJ([chown])
- fi
- if test $REPLACE_CHOWN = 1 && test $ac_cv_func_fchown = no; then
- AC_LIBOBJ([fchown-stub])
- fi
+ gl_CONDITIONAL([GL_COND_OBJ_CHOWN],
+ [test $HAVE_CHOWN = 0 || test $REPLACE_CHOWN = 1])
+ gl_CONDITIONAL([GL_COND_OBJ_FCHOWN_STUB],
+ [test $REPLACE_CHOWN = 1 && test $ac_cv_func_fchown = no])
gl_UNISTD_MODULE_INDICATOR([chown])
gl_CLOCK_TIME
gl_MODULE_INDICATOR_FOR_TESTS([cloexec])
gl_FUNC_CLOSE
- if test $REPLACE_CLOSE = 1; then
- AC_LIBOBJ([close])
- fi
+ gl_CONDITIONAL([GL_COND_OBJ_CLOSE], [test $REPLACE_CLOSE = 1])
gl_UNISTD_MODULE_INDICATOR([close])
gl_FUNC_CLOSEDIR
- if test $HAVE_CLOSEDIR = 0 || test $REPLACE_CLOSEDIR = 1; then
- AC_LIBOBJ([closedir])
- fi
+ gl_CONDITIONAL([GL_COND_OBJ_CLOSEDIR],
+ [test $HAVE_CLOSEDIR = 0 || test $REPLACE_CLOSEDIR = 1])
gl_DIRENT_MODULE_INDICATOR([closedir])
- AC_REQUIRE([gl_HEADER_SYS_SOCKET])
- if test "$ac_cv_header_winsock2_h" = yes; then
- AC_LIBOBJ([connect])
- fi
+ AC_REQUIRE([gl_SYS_SOCKET_H])
+ gl_CONDITIONAL([GL_COND_OBJ_CONNECT], [test "$ac_cv_header_winsock2_h" = yes])
gl_SYS_SOCKET_MODULE_INDICATOR([connect])
gl_CTYPE_H
+ gl_CTYPE_H_REQUIRE_DEFAULTS
+ AC_PROG_MKDIR_P
gl_CHECK_TYPE_STRUCT_DIRENT_D_INO
gl_CHECK_TYPE_STRUCT_DIRENT_D_TYPE
gl_DIRENT_H
+ gl_DIRENT_H_REQUIRE_DEFAULTS
+ AC_PROG_MKDIR_P
gl_FUNC_DIRFD
- if test $ac_cv_func_dirfd = no && test $gl_cv_func_dirfd_macro = no \
- || test $REPLACE_DIRFD = 1; then
- AC_LIBOBJ([dirfd])
+ gl_CONDITIONAL([GL_COND_OBJ_DIRFD],
+ [test $ac_cv_func_dirfd = no && test $gl_cv_func_dirfd_macro = no || test $REPLACE_DIRFD = 1])
+ AM_COND_IF([GL_COND_OBJ_DIRFD], [
gl_PREREQ_DIRFD
- fi
+ ])
gl_DIRENT_MODULE_INDICATOR([dirfd])
gl_DOUBLE_SLASH_ROOT
gl_FUNC_DUP
- if test $REPLACE_DUP = 1; then
- AC_LIBOBJ([dup])
+ gl_CONDITIONAL([GL_COND_OBJ_DUP], [test $REPLACE_DUP = 1])
+ AM_COND_IF([GL_COND_OBJ_DUP], [
gl_PREREQ_DUP
- fi
+ ])
gl_UNISTD_MODULE_INDICATOR([dup])
gl_FUNC_DUP2
- if test $REPLACE_DUP2 = 1; then
- AC_LIBOBJ([dup2])
+ gl_CONDITIONAL([GL_COND_OBJ_DUP2], [test $REPLACE_DUP2 = 1])
+ AM_COND_IF([GL_COND_OBJ_DUP2], [
gl_PREREQ_DUP2
- fi
+ ])
gl_UNISTD_MODULE_INDICATOR([dup2])
gl_ENVIRON
gl_UNISTD_MODULE_INDICATOR([environ])
gl_HEADER_ERRNO_H
+ gl_CONDITIONAL_HEADER([errno.h])
+ AC_PROG_MKDIR_P
gl_ERROR
- if test $ac_cv_lib_error_at_line = no; then
- AC_LIBOBJ([error])
+ gl_CONDITIONAL([GL_COND_OBJ_ERROR], [test "$ac_cv_lib_error_at_line" = no])
+ AM_COND_IF([GL_COND_OBJ_ERROR], [
gl_PREREQ_ERROR
- fi
+ ])
m4_ifdef([AM_XGETTEXT_OPTION],
[AM_][XGETTEXT_OPTION([--flag=error:3:c-format])
AM_][XGETTEXT_OPTION([--flag=error_at_line:5:c-format])])
AC_REQUIRE([gl_EXTERN_INLINE])
gl_FUNC_FCHDIR
+ gl_CONDITIONAL([GL_COND_OBJ_FCHDIR], [test $HAVE_FCHDIR = 0])
+ AM_COND_IF([GL_COND_OBJ_FCHDIR], [
+ gl_PREREQ_FCHDIR
+ ])
gl_UNISTD_MODULE_INDICATOR([fchdir])
gl_FUNC_FCNTL
- if test $HAVE_FCNTL = 0 || test $REPLACE_FCNTL = 1; then
- AC_LIBOBJ([fcntl])
- fi
+ gl_CONDITIONAL([GL_COND_OBJ_FCNTL],
+ [test $HAVE_FCNTL = 0 || test $REPLACE_FCNTL = 1])
gl_FCNTL_MODULE_INDICATOR([fcntl])
gl_FCNTL_H
+ gl_FCNTL_H_REQUIRE_DEFAULTS
+ AC_PROG_MKDIR_P
gl_MODULE_INDICATOR([fd-safer-flag])
gl_FUNC_FDOPENDIR
- if test $HAVE_FDOPENDIR = 0 || test $REPLACE_FDOPENDIR = 1; then
- AC_LIBOBJ([fdopendir])
- fi
+ gl_CONDITIONAL([GL_COND_OBJ_FDOPENDIR],
+ [test $HAVE_FDOPENDIR = 0 || test $REPLACE_FDOPENDIR = 1])
gl_DIRENT_MODULE_INDICATOR([fdopendir])
gl_MODULE_INDICATOR([fdopendir])
gl_FUNC_FFS
- if test $HAVE_FFS = 0; then
- AC_LIBOBJ([ffs])
- fi
+ gl_CONDITIONAL([GL_COND_OBJ_FFS], [test $HAVE_FFS = 0])
gl_STRINGS_MODULE_INDICATOR([ffs])
gl_FILE_NAME_CONCAT_LGPL
AC_C_FLEXIBLE_ARRAY_MEMBER
gl_FLOAT_H
- if test $REPLACE_FLOAT_LDBL = 1; then
- AC_LIBOBJ([float])
- fi
- if test $REPLACE_ITOLD = 1; then
- AC_LIBOBJ([itold])
- fi
+ gl_CONDITIONAL_HEADER([float.h])
+ AC_PROG_MKDIR_P
+ gl_CONDITIONAL([GL_COND_OBJ_FLOAT], [test $REPLACE_FLOAT_LDBL = 1])
+ gl_CONDITIONAL([GL_COND_OBJ_ITOLD], [test $REPLACE_ITOLD = 1])
gl_FUNC_FNMATCH_POSIX
+ dnl Because of gl_REPLACE_FNMATCH_H:
+ gl_CONDITIONAL_HEADER([fnmatch.h])
if test $HAVE_FNMATCH = 0 || test $REPLACE_FNMATCH = 1; then
AC_LIBOBJ([fnmatch])
gl_PREREQ_FNMATCH
@@ -394,11 +401,14 @@ AC_DEFUN([gl_INIT],
fi
gl_MODULE_INDICATOR([fnmatch-gnu])
gl_FNMATCH_H
+ gl_FNMATCH_H_REQUIRE_DEFAULTS
+ gl_CONDITIONAL_HEADER([fnmatch.h])
+ AC_PROG_MKDIR_P
gl_FUNC_FREE
- if test $REPLACE_FREE = 1; then
- AC_LIBOBJ([free])
+ gl_CONDITIONAL([GL_COND_OBJ_FREE], [test $REPLACE_FREE = 1])
+ AM_COND_IF([GL_COND_OBJ_FREE], [
gl_PREREQ_FREE
- fi
+ ])
gl_STDLIB_MODULE_INDICATOR([free-posix])
AC_REQUIRE([gl_FUNC_FREXP])
if test $gl_func_frexp != yes; then
@@ -411,99 +421,104 @@ AC_DEFUN([gl_INIT],
fi
gl_MATH_MODULE_INDICATOR([frexpl])
gl_FUNC_FSTAT
- if test $REPLACE_FSTAT = 1; then
- AC_LIBOBJ([fstat])
+ gl_CONDITIONAL([GL_COND_OBJ_FSTAT], [test $REPLACE_FSTAT = 1])
+ AM_COND_IF([GL_COND_OBJ_FSTAT], [
case "$host_os" in
mingw*)
AC_LIBOBJ([stat-w32])
;;
esac
gl_PREREQ_FSTAT
- fi
+ ])
gl_SYS_STAT_MODULE_INDICATOR([fstat])
gl_FUNC_FSTATAT
- if test $HAVE_FSTATAT = 0 || test $REPLACE_FSTATAT = 1; then
- AC_LIBOBJ([fstatat])
- fi
+ gl_CONDITIONAL([GL_COND_OBJ_FSTATAT],
+ [test $HAVE_FSTATAT = 0 || test $REPLACE_FSTATAT = 1])
gl_SYS_STAT_MODULE_INDICATOR([fstatat])
gl_FUNC_GETCWD
- if test $REPLACE_GETCWD = 1; then
- AC_LIBOBJ([getcwd])
+ gl_CONDITIONAL([GL_COND_OBJ_GETCWD], [test $REPLACE_GETCWD = 1])
+ AM_COND_IF([GL_COND_OBJ_GETCWD], [
gl_PREREQ_GETCWD
- fi
+ ])
gl_MODULE_INDICATOR([getcwd])
gl_UNISTD_MODULE_INDICATOR([getcwd])
gl_FUNC_GETCWD_LGPL
- if test $REPLACE_GETCWD = 1; then
- AC_LIBOBJ([getcwd-lgpl])
- fi
+ gl_CONDITIONAL([GL_COND_OBJ_GETCWD_LGPL], [test $REPLACE_GETCWD = 1])
gl_UNISTD_MODULE_INDICATOR([getcwd])
gl_FUNC_GETDELIM
- if test $HAVE_GETDELIM = 0 || test $REPLACE_GETDELIM = 1; then
- AC_LIBOBJ([getdelim])
+ gl_CONDITIONAL([GL_COND_OBJ_GETDELIM],
+ [test $HAVE_GETDELIM = 0 || test $REPLACE_GETDELIM = 1])
+ AM_COND_IF([GL_COND_OBJ_GETDELIM], [
gl_PREREQ_GETDELIM
- fi
+ ])
gl_STDIO_MODULE_INDICATOR([getdelim])
gl_FUNC_GETDTABLESIZE
- if test $HAVE_GETDTABLESIZE = 0 || test $REPLACE_GETDTABLESIZE = 1; then
- AC_LIBOBJ([getdtablesize])
+ gl_CONDITIONAL([GL_COND_OBJ_GETDTABLESIZE],
+ [test $HAVE_GETDTABLESIZE = 0 || test $REPLACE_GETDTABLESIZE = 1])
+ AM_COND_IF([GL_COND_OBJ_GETDTABLESIZE], [
gl_PREREQ_GETDTABLESIZE
- fi
+ ])
gl_UNISTD_MODULE_INDICATOR([getdtablesize])
gl_FUNC_GETLINE
- if test $REPLACE_GETLINE = 1; then
- AC_LIBOBJ([getline])
+ gl_CONDITIONAL([GL_COND_OBJ_GETLINE], [test $REPLACE_GETLINE = 1])
+ AM_COND_IF([GL_COND_OBJ_GETLINE], [
gl_PREREQ_GETLINE
- fi
+ ])
gl_STDIO_MODULE_INDICATOR([getline])
gl_FUNC_GETLOGIN_R
- if test $HAVE_GETLOGIN_R = 0 || test $REPLACE_GETLOGIN_R = 1; then
- AC_LIBOBJ([getlogin_r])
+ gl_CONDITIONAL([GL_COND_OBJ_GETLOGIN_R],
+ [test $HAVE_GETLOGIN_R = 0 || test $REPLACE_GETLOGIN_R = 1])
+ AM_COND_IF([GL_COND_OBJ_GETLOGIN_R], [
gl_PREREQ_GETLOGIN_R
- fi
+ ])
gl_UNISTD_MODULE_INDICATOR([getlogin_r])
AC_REQUIRE([gl_LIB_GETLOGIN])
gl_FUNC_GETPROGNAME
AC_REQUIRE([AC_CANONICAL_HOST])
gl_FUNC_GETRANDOM
- if test $HAVE_GETRANDOM = 0 || test $REPLACE_GETRANDOM = 1; then
- AC_LIBOBJ([getrandom])
- fi
+ gl_CONDITIONAL([GL_COND_OBJ_GETRANDOM],
+ [test $HAVE_GETRANDOM = 0 || test $REPLACE_GETRANDOM = 1])
gl_SYS_RANDOM_MODULE_INDICATOR([getrandom])
AC_SUBST([LIBINTL])
AC_SUBST([LTLIBINTL])
gl_FUNC_GETTIMEOFDAY
- if test $HAVE_GETTIMEOFDAY = 0 || test $REPLACE_GETTIMEOFDAY = 1; then
- AC_LIBOBJ([gettimeofday])
+ gl_CONDITIONAL([GL_COND_OBJ_GETTIMEOFDAY],
+ [test $HAVE_GETTIMEOFDAY = 0 || test $REPLACE_GETTIMEOFDAY = 1])
+ AM_COND_IF([GL_COND_OBJ_GETTIMEOFDAY], [
gl_PREREQ_GETTIMEOFDAY
- fi
+ ])
gl_SYS_TIME_MODULE_INDICATOR([gettimeofday])
gl_GLOB
- if test $HAVE_GLOB = 0 || test $REPLACE_GLOB = 1; then
- AC_LIBOBJ([glob])
- AC_LIBOBJ([globfree])
+ dnl Because of gl_REPLACE_GLOB_H:
+ gl_CONDITIONAL_HEADER([glob.h])
+ gl_CONDITIONAL([GL_COND_OBJ_GLOB],
+ [test $HAVE_GLOB = 0 || test $REPLACE_GLOB = 1])
+ AM_COND_IF([GL_COND_OBJ_GLOB], [
gl_PREREQ_GLOB
- fi
- if test $HAVE_GLOB_PATTERN_P = 0 || test $REPLACE_GLOB_PATTERN_P = 1; then
- AC_LIBOBJ([glob_pattern_p])
- fi
+ ])
+ gl_CONDITIONAL([GL_COND_OBJ_GLOB_PATTERN_P],
+ [test $HAVE_GLOB_PATTERN_P = 0 || test $REPLACE_GLOB_PATTERN_P = 1])
gl_GLOB_MODULE_INDICATOR([glob])
gl_GLOB_H
+ gl_GLOB_H_REQUIRE_DEFAULTS
+ gl_CONDITIONAL_HEADER([glob.h])
+ AC_PROG_MKDIR_P
AC_REQUIRE([gl_FUNC_SETLOCALE_NULL])
LIB_HARD_LOCALE="$LIB_SETLOCALE_NULL"
AC_SUBST([LIB_HARD_LOCALE])
gl_FUNC_INET_NTOP
- if test $HAVE_INET_NTOP = 0 || test $REPLACE_INET_NTOP = 1; then
- AC_LIBOBJ([inet_ntop])
+ gl_CONDITIONAL([GL_COND_OBJ_INET_NTOP],
+ [test $HAVE_INET_NTOP = 0 || test $REPLACE_INET_NTOP = 1])
+ AM_COND_IF([GL_COND_OBJ_INET_NTOP], [
gl_PREREQ_INET_NTOP
- fi
+ ])
gl_ARPA_INET_MODULE_INDICATOR([inet_ntop])
gl_INTTYPES_H
gl_INTTYPES_INCOMPLETE
+ gl_INTTYPES_H_REQUIRE_DEFAULTS
+ AC_PROG_MKDIR_P
gl_FUNC_ISBLANK
- if test $HAVE_ISBLANK = 0; then
- AC_LIBOBJ([isblank])
- fi
+ gl_CONDITIONAL([GL_COND_OBJ_ISBLANK], [test $HAVE_ISBLANK = 0])
gl_MODULE_INDICATOR([isblank])
gl_CTYPE_MODULE_INDICATOR([isblank])
gl_FUNC_ISNAND_NO_LIBM
@@ -519,66 +534,74 @@ AC_DEFUN([gl_INIT],
AC_REQUIRE([gl_LARGEFILE])
gl___INLINE
gl_LIMITS_H
- AC_REQUIRE([gl_HEADER_SYS_SOCKET])
- if test "$ac_cv_header_winsock2_h" = yes; then
- AC_LIBOBJ([listen])
- fi
+ gl_CONDITIONAL_HEADER([limits.h])
+ AC_PROG_MKDIR_P
+ AC_REQUIRE([gl_SYS_SOCKET_H])
+ gl_CONDITIONAL([GL_COND_OBJ_LISTEN], [test "$ac_cv_header_winsock2_h" = yes])
gl_SYS_SOCKET_MODULE_INDICATOR([listen])
gl_LOCALCHARSET
dnl For backward compatibility. Some packages still use this.
LOCALCHARSET_TESTS_ENVIRONMENT=
AC_SUBST([LOCALCHARSET_TESTS_ENVIRONMENT])
gl_LOCALE_H
+ gl_LOCALE_H_REQUIRE_DEFAULTS
+ AC_PROG_MKDIR_P
gl_LOCK
gl_MODULE_INDICATOR([lock])
gl_FUNC_LSTAT
- if test $REPLACE_LSTAT = 1; then
- AC_LIBOBJ([lstat])
+ gl_CONDITIONAL([GL_COND_OBJ_LSTAT], [test $REPLACE_LSTAT = 1])
+ AM_COND_IF([GL_COND_OBJ_LSTAT], [
gl_PREREQ_LSTAT
- fi
+ ])
gl_SYS_STAT_MODULE_INDICATOR([lstat])
- gl_FUNC_MALLOC_POSIX
- if test $REPLACE_MALLOC = 1; then
+ AC_REQUIRE([gl_FUNC_MALLOC_POSIX])
+ if test $REPLACE_MALLOC_FOR_MALLOC_POSIX = 1; then
AC_LIBOBJ([malloc])
fi
gl_STDLIB_MODULE_INDICATOR([malloc-posix])
gl_MALLOCA
gl_MATH_H
+ gl_MATH_H_REQUIRE_DEFAULTS
+ AC_PROG_MKDIR_P
gl_FUNC_MBRTOWC
- if test $HAVE_MBRTOWC = 0 || test $REPLACE_MBRTOWC = 1; then
- AC_LIBOBJ([mbrtowc])
+ gl_CONDITIONAL([GL_COND_OBJ_MBRTOWC],
+ [test $HAVE_MBRTOWC = 0 || test $REPLACE_MBRTOWC = 1])
+ AM_COND_IF([GL_COND_OBJ_MBRTOWC], [
if test $REPLACE_MBSTATE_T = 1; then
AC_LIBOBJ([lc-charset-dispatch])
AC_LIBOBJ([mbtowc-lock])
gl_PREREQ_MBTOWC_LOCK
fi
gl_PREREQ_MBRTOWC
- fi
+ ])
gl_WCHAR_MODULE_INDICATOR([mbrtowc])
gl_FUNC_MBSINIT
- if test $HAVE_MBSINIT = 0 || test $REPLACE_MBSINIT = 1; then
- AC_LIBOBJ([mbsinit])
+ gl_CONDITIONAL([GL_COND_OBJ_MBSINIT],
+ [test $HAVE_MBSINIT = 0 || test $REPLACE_MBSINIT = 1])
+ AM_COND_IF([GL_COND_OBJ_MBSINIT], [
gl_PREREQ_MBSINIT
- fi
+ ])
gl_WCHAR_MODULE_INDICATOR([mbsinit])
gl_FUNC_MBSRTOWCS
- if test $HAVE_MBSRTOWCS = 0 || test $REPLACE_MBSRTOWCS = 1; then
- AC_LIBOBJ([mbsrtowcs])
+ gl_CONDITIONAL([GL_COND_OBJ_MBSRTOWCS],
+ [test $HAVE_MBSRTOWCS = 0 || test $REPLACE_MBSRTOWCS = 1])
+ AM_COND_IF([GL_COND_OBJ_MBSRTOWCS], [
AC_LIBOBJ([mbsrtowcs-state])
gl_PREREQ_MBSRTOWCS
- fi
+ ])
gl_WCHAR_MODULE_INDICATOR([mbsrtowcs])
gl_FUNC_MBTOWC
- if test $HAVE_MBTOWC = 0 || test $REPLACE_MBTOWC = 1; then
- AC_LIBOBJ([mbtowc])
+ gl_CONDITIONAL([GL_COND_OBJ_MBTOWC],
+ [test $HAVE_MBTOWC = 0 || test $REPLACE_MBTOWC = 1])
+ AM_COND_IF([GL_COND_OBJ_MBTOWC], [
gl_PREREQ_MBTOWC
- fi
+ ])
gl_STDLIB_MODULE_INDICATOR([mbtowc])
gl_FUNC_MEMCHR
- if test $REPLACE_MEMCHR = 1; then
- AC_LIBOBJ([memchr])
+ gl_CONDITIONAL([GL_COND_OBJ_MEMCHR], [test $REPLACE_MEMCHR = 1])
+ AM_COND_IF([GL_COND_OBJ_MEMCHR], [
gl_PREREQ_MEMCHR
- fi
+ ])
gl_STRING_MODULE_INDICATOR([memchr])
gl_FUNC_MEMMEM
if test $HAVE_MEMMEM = 0 || test $REPLACE_MEMMEM = 1; then
@@ -590,141 +613,129 @@ AC_DEFUN([gl_INIT],
fi
gl_STRING_MODULE_INDICATOR([memmem])
gl_FUNC_MEMPCPY
- if test $HAVE_MEMPCPY = 0; then
- AC_LIBOBJ([mempcpy])
+ gl_CONDITIONAL([GL_COND_OBJ_MEMPCPY], [test $HAVE_MEMPCPY = 0])
+ AM_COND_IF([GL_COND_OBJ_MEMPCPY], [
gl_PREREQ_MEMPCPY
- fi
+ ])
gl_STRING_MODULE_INDICATOR([mempcpy])
gl_FUNC_MEMRCHR
- if test $ac_cv_func_memrchr = no; then
- AC_LIBOBJ([memrchr])
+ gl_CONDITIONAL([GL_COND_OBJ_MEMRCHR], [test $ac_cv_func_memrchr = no])
+ AM_COND_IF([GL_COND_OBJ_MEMRCHR], [
gl_PREREQ_MEMRCHR
- fi
+ ])
gl_STRING_MODULE_INDICATOR([memrchr])
gl_MINMAX
gl_FUNC_MKDIR
- if test $REPLACE_MKDIR = 1; then
- AC_LIBOBJ([mkdir])
- fi
+ gl_CONDITIONAL([GL_COND_OBJ_MKDIR], [test $REPLACE_MKDIR = 1])
gl_SYS_STAT_MODULE_INDICATOR([mkdir])
gl_FUNC_MKDTEMP
- if test $HAVE_MKDTEMP = 0; then
- AC_LIBOBJ([mkdtemp])
+ gl_CONDITIONAL([GL_COND_OBJ_MKDTEMP], [test $HAVE_MKDTEMP = 0])
+ AM_COND_IF([GL_COND_OBJ_MKDTEMP], [
gl_PREREQ_MKDTEMP
- fi
+ ])
gl_STDLIB_MODULE_INDICATOR([mkdtemp])
gl_FUNC_MKOSTEMP
- if test $HAVE_MKOSTEMP = 0; then
- AC_LIBOBJ([mkostemp])
+ gl_CONDITIONAL([GL_COND_OBJ_MKOSTEMP], [test $HAVE_MKOSTEMP = 0])
+ AM_COND_IF([GL_COND_OBJ_MKOSTEMP], [
gl_PREREQ_MKOSTEMP
- fi
+ ])
gl_MODULE_INDICATOR([mkostemp])
gl_STDLIB_MODULE_INDICATOR([mkostemp])
AC_REQUIRE([gl_MSVC_INVAL])
- if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then
- AC_LIBOBJ([msvc-inval])
- fi
+ gl_CONDITIONAL([GL_COND_OBJ_MSVC_INVAL],
+ [test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1])
AC_REQUIRE([gl_MSVC_NOTHROW])
- if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then
- AC_LIBOBJ([msvc-nothrow])
- fi
+ gl_CONDITIONAL([GL_COND_OBJ_MSVC_NOTHROW],
+ [test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1])
gl_MODULE_INDICATOR([msvc-nothrow])
gl_MULTIARCH
- gl_HEADER_NETDB
+ gl_NETDB_H
+ gl_NETDB_H_REQUIRE_DEFAULTS
+ AC_PROG_MKDIR_P
gl_HEADER_NETINET_IN
+ gl_CONDITIONAL_HEADER([netinet/in.h])
AC_PROG_MKDIR_P
gl_FUNC_OPEN
- if test $REPLACE_OPEN = 1; then
- AC_LIBOBJ([open])
+ gl_CONDITIONAL([GL_COND_OBJ_OPEN], [test $REPLACE_OPEN = 1])
+ AM_COND_IF([GL_COND_OBJ_OPEN], [
gl_PREREQ_OPEN
- fi
+ ])
gl_FCNTL_MODULE_INDICATOR([open])
gl_FUNC_OPENAT
- if test $HAVE_OPENAT = 0 || test $REPLACE_OPENAT = 1; then
- AC_LIBOBJ([openat])
+ gl_CONDITIONAL([GL_COND_OBJ_OPENAT],
+ [test $HAVE_OPENAT = 0 || test $REPLACE_OPENAT = 1])
+ AM_COND_IF([GL_COND_OBJ_OPENAT], [
gl_PREREQ_OPENAT
- fi
+ ])
gl_MODULE_INDICATOR([openat]) dnl for lib/getcwd.c
gl_FCNTL_MODULE_INDICATOR([openat])
gl_FUNC_OPENDIR
- if test $HAVE_OPENDIR = 0 || test $REPLACE_OPENDIR = 1; then
- AC_LIBOBJ([opendir])
- fi
+ gl_CONDITIONAL([GL_COND_OBJ_OPENDIR],
+ [test $HAVE_OPENDIR = 0 || test $REPLACE_OPENDIR = 1])
gl_DIRENT_MODULE_INDICATOR([opendir])
gl_PATHMAX
gl_FUNC_PIPE
- if test $HAVE_PIPE = 0; then
- AC_LIBOBJ([pipe])
- fi
+ gl_CONDITIONAL([GL_COND_OBJ_PIPE], [test $HAVE_PIPE = 0])
gl_UNISTD_MODULE_INDICATOR([pipe])
gl_FUNC_RAWMEMCHR
- if test $HAVE_RAWMEMCHR = 0; then
- AC_LIBOBJ([rawmemchr])
+ gl_CONDITIONAL([GL_COND_OBJ_RAWMEMCHR], [test $HAVE_RAWMEMCHR = 0])
+ AM_COND_IF([GL_COND_OBJ_RAWMEMCHR], [
gl_PREREQ_RAWMEMCHR
- fi
+ ])
gl_STRING_MODULE_INDICATOR([rawmemchr])
gl_FUNC_READDIR
- if test $HAVE_READDIR = 0; then
- AC_LIBOBJ([readdir])
- fi
+ gl_CONDITIONAL([GL_COND_OBJ_READDIR], [test $HAVE_READDIR = 0])
gl_DIRENT_MODULE_INDICATOR([readdir])
gl_FUNC_READLINK
- if test $HAVE_READLINK = 0 || test $REPLACE_READLINK = 1; then
- AC_LIBOBJ([readlink])
+ gl_CONDITIONAL([GL_COND_OBJ_READLINK],
+ [test $HAVE_READLINK = 0 || test $REPLACE_READLINK = 1])
+ AM_COND_IF([GL_COND_OBJ_READLINK], [
gl_PREREQ_READLINK
- fi
+ ])
gl_UNISTD_MODULE_INDICATOR([readlink])
gl_FUNC_REALLOC_POSIX
- if test $REPLACE_REALLOC = 1; then
+ if test $REPLACE_REALLOC_FOR_REALLOC_POSIX = 1; then
AC_LIBOBJ([realloc])
fi
gl_STDLIB_MODULE_INDICATOR([realloc-posix])
gl_FUNC_RENAME
- if test $REPLACE_RENAME = 1; then
- AC_LIBOBJ([rename])
- fi
+ gl_CONDITIONAL([GL_COND_OBJ_RENAME], [test $REPLACE_RENAME = 1])
gl_STDIO_MODULE_INDICATOR([rename])
gl_FUNC_REWINDDIR
- if test $HAVE_REWINDDIR = 0; then
- AC_LIBOBJ([rewinddir])
- fi
+ gl_CONDITIONAL([GL_COND_OBJ_REWINDDIR], [test $HAVE_REWINDDIR = 0])
gl_DIRENT_MODULE_INDICATOR([rewinddir])
gl_FUNC_RMDIR
- if test $REPLACE_RMDIR = 1; then
- AC_LIBOBJ([rmdir])
- fi
+ gl_CONDITIONAL([GL_COND_OBJ_RMDIR], [test $REPLACE_RMDIR = 1])
gl_UNISTD_MODULE_INDICATOR([rmdir])
gl_SAVE_CWD
+ AC_PROG_MKDIR_P
gl_FUNC_SELECT
- if test $REPLACE_SELECT = 1; then
- AC_LIBOBJ([select])
- fi
+ gl_CONDITIONAL([GL_COND_OBJ_SELECT], [test $REPLACE_SELECT = 1])
gl_SYS_SELECT_MODULE_INDICATOR([select])
gl_FUNC_SETENV
- if test $HAVE_SETENV = 0 || test $REPLACE_SETENV = 1; then
- AC_LIBOBJ([setenv])
- fi
+ gl_CONDITIONAL([GL_COND_OBJ_SETENV],
+ [test $HAVE_SETENV = 0 || test $REPLACE_SETENV = 1])
gl_STDLIB_MODULE_INDICATOR([setenv])
gl_FUNC_SETLOCALE_NULL
- if test $SETLOCALE_NULL_ALL_MTSAFE = 0 || test $SETLOCALE_NULL_ONE_MTSAFE = 0; then
- AC_LIBOBJ([setlocale-lock])
+ gl_CONDITIONAL([GL_COND_OBJ_SETLOCALE_LOCK],
+ [test $SETLOCALE_NULL_ALL_MTSAFE = 0 || test $SETLOCALE_NULL_ONE_MTSAFE = 0])
+ AM_COND_IF([GL_COND_OBJ_SETLOCALE_LOCK], [
gl_PREREQ_SETLOCALE_LOCK
- fi
+ ])
gl_LOCALE_MODULE_INDICATOR([setlocale_null])
- AC_REQUIRE([gl_HEADER_SYS_SOCKET])
- if test "$ac_cv_header_winsock2_h" = yes; then
- AC_LIBOBJ([setsockopt])
- fi
+ AC_REQUIRE([gl_SYS_SOCKET_H])
+ gl_CONDITIONAL([GL_COND_OBJ_SETSOCKOPT],
+ [test "$ac_cv_header_winsock2_h" = yes])
gl_SYS_SOCKET_MODULE_INDICATOR([setsockopt])
gl_SIGNAL_H
- AC_REQUIRE([gl_HEADER_SYS_SOCKET])
- if test "$ac_cv_header_winsock2_h" = yes; then
- AC_LIBOBJ([socket])
- fi
+ gl_SIGNAL_H_REQUIRE_DEFAULTS
+ AC_PROG_MKDIR_P
+ AC_REQUIRE([gl_SYS_SOCKET_H])
+ gl_CONDITIONAL([GL_COND_OBJ_SOCKET], [test "$ac_cv_header_winsock2_h" = yes])
# When this module is used, sockets may actually occur as file descriptors,
# hence it is worth warning if the modules 'close' and 'ioctl' are not used.
- m4_ifdef([gl_UNISTD_H_DEFAULTS], [AC_REQUIRE([gl_UNISTD_H_DEFAULTS])])
- m4_ifdef([gl_SYS_IOCTL_H_DEFAULTS], [AC_REQUIRE([gl_SYS_IOCTL_H_DEFAULTS])])
+ m4_ifdef([gl_UNISTD_H_DEFAULTS], [gl_UNISTD_H_REQUIRE_DEFAULTS])
+ m4_ifdef([gl_SYS_IOCTL_H_DEFAULTS], [gl_SYS_IOCTL_H_REQUIRE_DEFAULTS])
AC_REQUIRE([gl_PREREQ_SYS_H_WINSOCK2])
if test "$ac_cv_header_winsock2_h" = yes; then
UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=1
@@ -736,63 +747,108 @@ AC_DEFUN([gl_INIT],
gl_TYPE_SOCKLEN_T
gt_TYPE_SSIZE_T
gl_FUNC_STAT
- if test $REPLACE_STAT = 1; then
- AC_LIBOBJ([stat])
+ gl_CONDITIONAL([GL_COND_OBJ_STAT], [test $REPLACE_STAT = 1])
+ AM_COND_IF([GL_COND_OBJ_STAT], [
case "$host_os" in
mingw*)
AC_LIBOBJ([stat-w32])
;;
esac
gl_PREREQ_STAT
- fi
+ ])
gl_SYS_STAT_MODULE_INDICATOR([stat])
gl_STAT_TIME
gl_STAT_BIRTHTIME
gl_STDALIGN_H
- AM_STDBOOL_H
+ gl_CONDITIONAL_HEADER([stdalign.h])
+ AC_PROG_MKDIR_P
+ gl_STDBOOL_H
+ gl_CONDITIONAL_HEADER([stdbool.h])
+ AC_PROG_MKDIR_P
gl_STDDEF_H
+ gl_STDDEF_H_REQUIRE_DEFAULTS
+ gl_CONDITIONAL_HEADER([stddef.h])
+ AC_PROG_MKDIR_P
gl_STDINT_H
+ gl_CONDITIONAL_HEADER([stdint.h])
+ dnl Because of gl_REPLACE_LIMITS_H:
+ gl_CONDITIONAL_HEADER([limits.h])
+ AC_PROG_MKDIR_P
gl_STDIO_H
+ gl_STDIO_H_REQUIRE_DEFAULTS
+ AC_PROG_MKDIR_P
+ gl_CONDITIONAL([GL_COND_OBJ_STDIO_READ], [test $REPLACE_STDIO_READ_FUNCS = 1])
+ gl_CONDITIONAL([GL_COND_OBJ_STDIO_WRITE], [test $REPLACE_STDIO_WRITE_FUNCS = 1])
+ dnl No need to create extra modules for these functions. Everyone who uses
+ dnl <stdio.h> likely needs them.
+ gl_STDIO_MODULE_INDICATOR([fscanf])
+ gl_MODULE_INDICATOR([fscanf])
+ gl_STDIO_MODULE_INDICATOR([scanf])
+ gl_MODULE_INDICATOR([scanf])
+ gl_STDIO_MODULE_INDICATOR([fgetc])
+ gl_STDIO_MODULE_INDICATOR([getc])
+ gl_STDIO_MODULE_INDICATOR([getchar])
+ gl_STDIO_MODULE_INDICATOR([fgets])
+ gl_STDIO_MODULE_INDICATOR([fread])
+ dnl No need to create extra modules for these functions. Everyone who uses
+ dnl <stdio.h> likely needs them.
+ gl_STDIO_MODULE_INDICATOR([fprintf])
+ gl_STDIO_MODULE_INDICATOR([printf])
+ gl_STDIO_MODULE_INDICATOR([vfprintf])
+ gl_STDIO_MODULE_INDICATOR([vprintf])
+ gl_STDIO_MODULE_INDICATOR([fputc])
+ gl_STDIO_MODULE_INDICATOR([putc])
+ gl_STDIO_MODULE_INDICATOR([putchar])
+ gl_STDIO_MODULE_INDICATOR([fputs])
+ gl_STDIO_MODULE_INDICATOR([puts])
+ gl_STDIO_MODULE_INDICATOR([fwrite])
gl_STDLIB_H
+ gl_STDLIB_H_REQUIRE_DEFAULTS
+ AC_PROG_MKDIR_P
gl_FUNC_STRCHRNUL
- if test $HAVE_STRCHRNUL = 0 || test $REPLACE_STRCHRNUL = 1; then
- AC_LIBOBJ([strchrnul])
+ gl_CONDITIONAL([GL_COND_OBJ_STRCHRNUL],
+ [test $HAVE_STRCHRNUL = 0 || test $REPLACE_STRCHRNUL = 1])
+ AM_COND_IF([GL_COND_OBJ_STRCHRNUL], [
gl_PREREQ_STRCHRNUL
- fi
+ ])
gl_STRING_MODULE_INDICATOR([strchrnul])
gl_FUNC_STRDUP_POSIX
- if test $REPLACE_STRDUP = 1; then
- AC_LIBOBJ([strdup])
+ gl_CONDITIONAL([GL_COND_OBJ_STRDUP], [test $REPLACE_STRDUP = 1])
+ AM_COND_IF([GL_COND_OBJ_STRDUP], [
gl_PREREQ_STRDUP
- fi
+ ])
gl_STRING_MODULE_INDICATOR([strdup])
gl_FUNC_STRERROR
- if test $REPLACE_STRERROR = 1; then
- AC_LIBOBJ([strerror])
- fi
+ gl_CONDITIONAL([GL_COND_OBJ_STRERROR], [test $REPLACE_STRERROR = 1])
gl_MODULE_INDICATOR([strerror])
gl_STRING_MODULE_INDICATOR([strerror])
AC_REQUIRE([gl_HEADER_ERRNO_H])
AC_REQUIRE([gl_FUNC_STRERROR_0])
- if test -n "$ERRNO_H" || test $REPLACE_STRERROR_0 = 1; then
- AC_LIBOBJ([strerror-override])
+ gl_CONDITIONAL([GL_COND_OBJ_STRERROR_OVERRIDE],
+ [test -n "$ERRNO_H" || test $REPLACE_STRERROR_0 = 1])
+ AM_COND_IF([GL_COND_OBJ_STRERROR_OVERRIDE], [
gl_PREREQ_SYS_H_WINSOCK2
- fi
+ ])
gl_FUNC_STRERROR_R
- if test $HAVE_DECL_STRERROR_R = 0 || test $REPLACE_STRERROR_R = 1; then
+ AS_IF([test $HAVE_DECL_STRERROR_R = 0 || test $REPLACE_STRERROR_R = 1], [
AC_LIBOBJ([strerror_r])
gl_PREREQ_STRERROR_R
- fi
+ ])
gl_STRING_MODULE_INDICATOR([strerror_r])
dnl For the modules argp, error.
gl_MODULE_INDICATOR([strerror_r-posix])
- gl_HEADER_STRING_H
- gl_HEADER_STRINGS_H
+ gl_STRING_H
+ gl_STRING_H_REQUIRE_DEFAULTS
+ AC_PROG_MKDIR_P
+ gl_STRINGS_H
+ gl_STRINGS_H_REQUIRE_DEFAULTS
+ AC_PROG_MKDIR_P
gl_FUNC_STRNLEN
- if test $HAVE_DECL_STRNLEN = 0 || test $REPLACE_STRNLEN = 1; then
- AC_LIBOBJ([strnlen])
+ gl_CONDITIONAL([GL_COND_OBJ_STRNLEN],
+ [test $HAVE_DECL_STRNLEN = 0 || test $REPLACE_STRNLEN = 1])
+ AM_COND_IF([GL_COND_OBJ_STRNLEN], [
gl_PREREQ_STRNLEN
- fi
+ ])
gl_STRING_MODULE_INDICATOR([strnlen])
gl_FUNC_STRSTR
if test $REPLACE_STRSTR = 1; then
@@ -804,80 +860,84 @@ AC_DEFUN([gl_INIT],
fi
gl_STRING_MODULE_INDICATOR([strstr])
gl_FUNC_STRTOK_R
- if test $HAVE_STRTOK_R = 0 || test $REPLACE_STRTOK_R = 1; then
- AC_LIBOBJ([strtok_r])
+ gl_CONDITIONAL([GL_COND_OBJ_STRTOK_R],
+ [test $HAVE_STRTOK_R = 0 || test $REPLACE_STRTOK_R = 1])
+ AM_COND_IF([GL_COND_OBJ_STRTOK_R], [
gl_PREREQ_STRTOK_R
- fi
+ ])
gl_STRING_MODULE_INDICATOR([strtok_r])
- gl_HEADER_SYS_RANDOM
+ gl_SYS_RANDOM_H
+ gl_SYS_RANDOM_H_REQUIRE_DEFAULTS
AC_PROG_MKDIR_P
- AC_REQUIRE([gl_HEADER_SYS_SELECT])
+ gl_SYS_SELECT_H
+ gl_SYS_SELECT_H_REQUIRE_DEFAULTS
AC_PROG_MKDIR_P
- AC_REQUIRE([gl_HEADER_SYS_SOCKET])
+ gl_SYS_SOCKET_H
+ gl_SYS_SOCKET_H_REQUIRE_DEFAULTS
AC_PROG_MKDIR_P
- gl_HEADER_SYS_STAT_H
+ gl_SYS_STAT_H
+ gl_SYS_STAT_H_REQUIRE_DEFAULTS
AC_PROG_MKDIR_P
- gl_HEADER_SYS_TIME_H
+ gl_SYS_TIME_H
+ gl_SYS_TIME_H_REQUIRE_DEFAULTS
AC_PROG_MKDIR_P
gl_SYS_TYPES_H
+ gl_SYS_TYPES_H_REQUIRE_DEFAULTS
AC_PROG_MKDIR_P
- gl_HEADER_SYS_UIO
+ gl_SYS_UIO_H
+ gl_SYS_UIO_H_REQUIRE_DEFAULTS
AC_PROG_MKDIR_P
gl_SYS_WAIT_H
+ gl_SYS_WAIT_H_REQUIRE_DEFAULTS
AC_PROG_MKDIR_P
gl_FUNC_GEN_TEMPNAME
gl_MODULE_INDICATOR([tempname])
AC_REQUIRE([gl_THREADLIB])
- gl_HEADER_TIME_H
+ gl_TIME_H
+ gl_TIME_H_REQUIRE_DEFAULTS
+ AC_PROG_MKDIR_P
gl_TIME_R
- if test $HAVE_LOCALTIME_R = 0 || test $REPLACE_LOCALTIME_R = 1; then
- AC_LIBOBJ([time_r])
+ gl_CONDITIONAL([GL_COND_OBJ_TIME_R],
+ [test $HAVE_LOCALTIME_R = 0 || test $REPLACE_LOCALTIME_R = 1])
+ AM_COND_IF([GL_COND_OBJ_TIME_R], [
gl_PREREQ_TIME_R
- fi
+ ])
gl_TIME_MODULE_INDICATOR([time_r])
gl_UNISTD_H
+ gl_UNISTD_H_REQUIRE_DEFAULTS
+ AC_PROG_MKDIR_P
gl_UNISTD_SAFER
gl_FUNC_UNSETENV
- if test $HAVE_UNSETENV = 0 || test $REPLACE_UNSETENV = 1; then
- AC_LIBOBJ([unsetenv])
+ gl_CONDITIONAL([GL_COND_OBJ_UNSETENV],
+ [test $HAVE_UNSETENV = 0 || test $REPLACE_UNSETENV = 1])
+ AM_COND_IF([GL_COND_OBJ_UNSETENV], [
gl_PREREQ_UNSETENV
- fi
+ ])
gl_STDLIB_MODULE_INDICATOR([unsetenv])
+ AC_C_VARARRAYS
gl_WCHAR_H
+ gl_WCHAR_H_REQUIRE_DEFAULTS
+ AC_PROG_MKDIR_P
gl_WCTYPE_H
+ gl_WCTYPE_H_REQUIRE_DEFAULTS
+ AC_PROG_MKDIR_P
AC_REQUIRE([AC_CANONICAL_HOST])
- case "$host_os" in
- mingw*)
- AC_LIBOBJ([windows-mutex])
- ;;
- esac
+ gl_CONDITIONAL([GL_COND_OBJ_WINDOWS_MUTEX],
+ [case "$host_os" in mingw*) true;; *) false;; esac])
AC_REQUIRE([AC_CANONICAL_HOST])
- case "$host_os" in
- mingw*)
- AC_LIBOBJ([windows-once])
- ;;
- esac
+ gl_CONDITIONAL([GL_COND_OBJ_WINDOWS_ONCE],
+ [case "$host_os" in mingw*) true;; *) false;; esac])
AC_REQUIRE([AC_CANONICAL_HOST])
- case "$host_os" in
- mingw*)
- AC_LIBOBJ([windows-recmutex])
- ;;
- esac
+ gl_CONDITIONAL([GL_COND_OBJ_WINDOWS_RECMUTEX],
+ [case "$host_os" in mingw*) true;; *) false;; esac])
AC_REQUIRE([AC_CANONICAL_HOST])
- case "$host_os" in
- mingw*)
- AC_LIBOBJ([windows-rwlock])
- ;;
- esac
+ gl_CONDITIONAL([GL_COND_OBJ_WINDOWS_RWLOCK],
+ [case "$host_os" in mingw*) true;; *) false;; esac])
gl_FUNC_WMEMCHR
- if test $HAVE_WMEMCHR = 0; then
- AC_LIBOBJ([wmemchr])
- fi
+ gl_CONDITIONAL([GL_COND_OBJ_WMEMCHR], [test $HAVE_WMEMCHR = 0])
gl_WCHAR_MODULE_INDICATOR([wmemchr])
gl_FUNC_WMEMPCPY
- if test $HAVE_WMEMPCPY = 0; then
- AC_LIBOBJ([wmempcpy])
- fi
+ gl_CONDITIONAL([GL_COND_OBJ_WMEMPCPY], [test $HAVE_WMEMPCPY = 0])
gl_WCHAR_MODULE_INDICATOR([wmempcpy])
# End of code from modules
m4_ifval(gl_LIBSOURCES_LIST, [
@@ -891,6 +951,8 @@ AC_DEFUN([gl_INIT],
m4_if(m4_sysval, [0], [],
[AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])])
])
+ m4_popdef([GL_MODULE_INDICATOR_PREFIX])
+ m4_popdef([GL_MACRO_PREFIX])
m4_popdef([gl_LIBSOURCES_DIR])
m4_popdef([gl_LIBSOURCES_LIST])
m4_popdef([AC_LIBSOURCES])
@@ -899,16 +961,28 @@ AC_DEFUN([gl_INIT],
AC_CONFIG_COMMANDS_PRE([
gl_libobjs=
gl_ltlibobjs=
+ gl_libobjdeps=
if test -n "$gl_LIBOBJS"; then
# Remove the extension.
+changequote(,)dnl
sed_drop_objext='s/\.o$//;s/\.obj$//'
+ sed_dirname1='s,//*,/,g'
+ sed_dirname2='s,\(.\)/$,\1,'
+ sed_dirname3='s,^[^/]*$,.,'
+ sed_dirname4='s,\(.\)/[^/]*$,\1,'
+ sed_basename1='s,.*/,,'
+changequote([, ])dnl
for i in `for i in $gl_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do
gl_libobjs="$gl_libobjs $i.$ac_objext"
gl_ltlibobjs="$gl_ltlibobjs $i.lo"
+ i_dir=`echo "$i" | sed -e "$sed_dirname1" -e "$sed_dirname2" -e "$sed_dirname3" -e "$sed_dirname4"`
+ i_base=`echo "$i" | sed -e "$sed_basename1"`
+ gl_libobjdeps="$gl_libobjdeps $i_dir/\$(DEPDIR)/$i_base.Po"
done
fi
AC_SUBST([gl_LIBOBJS], [$gl_libobjs])
AC_SUBST([gl_LTLIBOBJS], [$gl_ltlibobjs])
+ AC_SUBST([gl_LIBOBJDEPS], [$gl_libobjdeps])
])
gltests_libdeps=
gltests_ltlibdeps=
@@ -917,8 +991,11 @@ AC_DEFUN([gl_INIT],
m4_pushdef([AC_LIBSOURCES], m4_defn([gltests_LIBSOURCES]))
m4_pushdef([gltests_LIBSOURCES_LIST], [])
m4_pushdef([gltests_LIBSOURCES_DIR], [])
+ m4_pushdef([GL_MACRO_PREFIX], [gltests])
+ m4_pushdef([GL_MODULE_INDICATOR_PREFIX], [GL])
gl_COMMON
gl_source_base='tests'
+ gl_source_base_prefix=
changequote(,)dnl
gltests_WITNESS=IN_`echo "${PACKAGE-$PACKAGE_TARNAME}" | LC_ALL=C tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ | LC_ALL=C sed -e 's/[^A-Z0-9_]/_/g'`_GNULIB_TESTS
changequote([, ])dnl
@@ -937,6 +1014,8 @@ changequote([, ])dnl
m4_if(m4_sysval, [0], [],
[AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])])
])
+ m4_popdef([GL_MODULE_INDICATOR_PREFIX])
+ m4_popdef([GL_MACRO_PREFIX])
m4_popdef([gltests_LIBSOURCES_DIR])
m4_popdef([gltests_LIBSOURCES_LIST])
m4_popdef([AC_LIBSOURCES])
@@ -945,17 +1024,30 @@ changequote([, ])dnl
AC_CONFIG_COMMANDS_PRE([
gltests_libobjs=
gltests_ltlibobjs=
+ gltests_libobjdeps=
if test -n "$gltests_LIBOBJS"; then
# Remove the extension.
+changequote(,)dnl
sed_drop_objext='s/\.o$//;s/\.obj$//'
+ sed_dirname1='s,//*,/,g'
+ sed_dirname2='s,\(.\)/$,\1,'
+ sed_dirname3='s,^[^/]*$,.,'
+ sed_dirname4='s,\(.\)/[^/]*$,\1,'
+ sed_basename1='s,.*/,,'
+changequote([, ])dnl
for i in `for i in $gltests_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do
gltests_libobjs="$gltests_libobjs $i.$ac_objext"
gltests_ltlibobjs="$gltests_ltlibobjs $i.lo"
+ i_dir=`echo "$i" | sed -e "$sed_dirname1" -e "$sed_dirname2" -e "$sed_dirname3" -e "$sed_dirname4"`
+ i_base=`echo "$i" | sed -e "$sed_basename1"`
+ gltests_libobjdeps="$gltests_libobjdeps $i_dir/\$(DEPDIR)/$i_base.Po"
done
fi
AC_SUBST([gltests_LIBOBJS], [$gltests_libobjs])
AC_SUBST([gltests_LTLIBOBJS], [$gltests_ltlibobjs])
+ AC_SUBST([gltests_LIBOBJDEPS], [$gltests_libobjdeps])
])
+ AC_REQUIRE([gl_CC_GNULIB_WARNINGS])
LIBGNU_LIBDEPS="$gl_libdeps"
AC_SUBST([LIBGNU_LIBDEPS])
LIBGNU_LTLIBDEPS="$gl_ltlibdeps"
@@ -1211,6 +1303,8 @@ AC_DEFUN([gl_FILE_LIST], [
lib/stdbool.in.h
lib/stddef.in.h
lib/stdint.in.h
+ lib/stdio-read.c
+ lib/stdio-write.c
lib/stdio.in.h
lib/stdlib.in.h
lib/str-two-way.h
@@ -1281,7 +1375,7 @@ AC_DEFUN([gl_FILE_LIST], [
m4/close.m4
m4/closedir.m4
m4/codeset.m4
- m4/ctype.m4
+ m4/ctype_h.m4
m4/d-ino.m4
m4/d-type.m4
m4/dirent_h.m4
@@ -1427,6 +1521,7 @@ AC_DEFUN([gl_FILE_LIST], [
m4/time_r.m4
m4/unistd-safer.m4
m4/unistd_h.m4
+ m4/vararrays.m4
m4/visibility.m4
m4/warn-on-use.m4
m4/wchar_h.m4
@@ -1435,5 +1530,6 @@ AC_DEFUN([gl_FILE_LIST], [
m4/wint_t.m4
m4/wmemchr.m4
m4/wmempcpy.m4
+ m4/year2038.m4
m4/zzgnulib.m4
])
diff --git a/gnulib/import/m4/gnulib-tool.m4 b/gnulib/import/m4/gnulib-tool.m4
index 3d56d83f128..8428901c343 100644
--- a/gnulib/import/m4/gnulib-tool.m4
+++ b/gnulib/import/m4/gnulib-tool.m4
@@ -1,5 +1,5 @@
-# gnulib-tool.m4 serial 2
-dnl Copyright (C) 2004-2005, 2009-2021 Free Software Foundation, Inc.
+# gnulib-tool.m4 serial 4
+dnl Copyright (C) 2004-2005, 2009-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
@@ -44,6 +44,12 @@ AC_DEFUN([gl_LGPL], [])
dnl Usage: gl_MAKEFILE_NAME([FILENAME])
AC_DEFUN([gl_MAKEFILE_NAME], [])
+dnl Usage: gl_TESTS_MAKEFILE_NAME([FILENAME])
+AC_DEFUN([gl_TESTS_MAKEFILE_NAME], [])
+
+dnl Usage: gl_AUTOMAKE_SUBDIR
+AC_DEFUN([gl_AUTOMAKE_SUBDIR], [])
+
dnl Usage: gl_LIBTOOL
AC_DEFUN([gl_LIBTOOL], [])
diff --git a/gnulib/import/m4/include_next.m4 b/gnulib/import/m4/include_next.m4
index bdd542bc64d..a9247f6f114 100644
--- a/gnulib/import/m4/include_next.m4
+++ b/gnulib/import/m4/include_next.m4
@@ -1,5 +1,5 @@
# include_next.m4 serial 26
-dnl Copyright (C) 2006-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2006-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
@@ -193,9 +193,9 @@ AC_DEFUN([gl_NEXT_HEADERS_INTERNAL],
if test AS_VAR_GET([gl_header_exists]) = yes; then
AS_VAR_POPDEF([gl_header_exists])
])
- gl_ABSOLUTE_HEADER_ONE(gl_HEADER_NAME)
- AS_VAR_COPY([gl_header], [gl_cv_absolute_]AS_TR_SH(gl_HEADER_NAME))
- AS_VAR_SET([gl_next_header], ['"'$gl_header'"'])
+ gl_ABSOLUTE_HEADER_ONE(gl_HEADER_NAME)
+ AS_VAR_COPY([gl_header], [gl_cv_absolute_]AS_TR_SH(gl_HEADER_NAME))
+ AS_VAR_SET([gl_next_header], ['"'$gl_header'"'])
m4_if([$2], [check],
[else
AS_VAR_SET([gl_next_header], ['<'gl_HEADER_NAME'>'])
diff --git a/gnulib/import/m4/inet_ntop.m4 b/gnulib/import/m4/inet_ntop.m4
index 171f53ee73f..c335cae7e7a 100644
--- a/gnulib/import/m4/inet_ntop.m4
+++ b/gnulib/import/m4/inet_ntop.m4
@@ -1,5 +1,5 @@
# inet_ntop.m4 serial 21
-dnl Copyright (C) 2005-2006, 2008-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2005-2006, 2008-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/inttypes.m4 b/gnulib/import/m4/inttypes.m4
index f56e94a8881..df25a21eb9b 100644
--- a/gnulib/import/m4/inttypes.m4
+++ b/gnulib/import/m4/inttypes.m4
@@ -1,5 +1,5 @@
-# inttypes.m4 serial 32
-dnl Copyright (C) 2006-2021 Free Software Foundation, Inc.
+# inttypes.m4 serial 36
+dnl Copyright (C) 2006-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
@@ -7,7 +7,7 @@ dnl with or without modifications, as long as this notice is preserved.
dnl From Derek Price, Bruno Haible.
dnl Test whether <inttypes.h> is supported or must be substituted.
-AC_DEFUN([gl_INTTYPES_H],
+AC_DEFUN_ONCE([gl_INTTYPES_H],
[
AC_REQUIRE([gl_INTTYPES_INCOMPLETE])
gl_INTTYPES_PRI_SCN
@@ -36,7 +36,7 @@ AC_DEFUN_ONCE([gl_INTTYPES_INCOMPLETE],
AC_DEFUN([gl_INTTYPES_PRI_SCN],
[
PRIPTR_PREFIX=
- if test -n "$STDINT_H"; then
+ if $GL_GENERATE_STDINT_H; then
dnl Using the gnulib <stdint.h>. It defines intptr_t to 'long' or
dnl 'long long', depending on _WIN64.
AC_COMPILE_IFELSE(
@@ -136,19 +136,34 @@ AC_DEFUN([gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION],
AC_SUBST([$1])
])
+# gl_INTTYPES_MODULE_INDICATOR([modulename])
+# sets the shell variable that indicates the presence of the given module
+# to a C preprocessor expression that will evaluate to 1.
+# This macro invocation must not occur in macros that are AC_REQUIREd.
AC_DEFUN([gl_INTTYPES_MODULE_INDICATOR],
[
- dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
- AC_REQUIRE([gl_INTTYPES_H_DEFAULTS])
+ dnl Ensure to expand the default settings once only.
+ gl_INTTYPES_H_REQUIRE_DEFAULTS
gl_MODULE_INDICATOR_SET_VARIABLE([$1])
])
+# Initializes the default values for AC_SUBSTed shell variables.
+# This macro must not be AC_REQUIREd. It must only be invoked, and only
+# outside of macros or in macros that are not AC_REQUIREd.
+AC_DEFUN([gl_INTTYPES_H_REQUIRE_DEFAULTS],
+[
+ m4_defun(GL_MODULE_INDICATOR_PREFIX[_INTTYPES_H_MODULE_INDICATOR_DEFAULTS], [
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_IMAXABS])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_IMAXDIV])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOIMAX])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOUMAX])
+ ])
+ m4_require(GL_MODULE_INDICATOR_PREFIX[_INTTYPES_H_MODULE_INDICATOR_DEFAULTS])
+ AC_REQUIRE([gl_INTTYPES_H_DEFAULTS])
+])
+
AC_DEFUN([gl_INTTYPES_H_DEFAULTS],
[
- GNULIB_IMAXABS=0; AC_SUBST([GNULIB_IMAXABS])
- GNULIB_IMAXDIV=0; AC_SUBST([GNULIB_IMAXDIV])
- GNULIB_STRTOIMAX=0; AC_SUBST([GNULIB_STRTOIMAX])
- GNULIB_STRTOUMAX=0; AC_SUBST([GNULIB_STRTOUMAX])
dnl Assume proper GNU behavior unless another module says otherwise.
HAVE_DECL_IMAXABS=1; AC_SUBST([HAVE_DECL_IMAXABS])
HAVE_DECL_IMAXDIV=1; AC_SUBST([HAVE_DECL_IMAXDIV])
diff --git a/gnulib/import/m4/isblank.m4 b/gnulib/import/m4/isblank.m4
index e77e1a87302..1d0ed6ce413 100644
--- a/gnulib/import/m4/isblank.m4
+++ b/gnulib/import/m4/isblank.m4
@@ -1,5 +1,5 @@
# isblank.m4 serial 3
-dnl Copyright (C) 2009-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2009-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/isnand.m4 b/gnulib/import/m4/isnand.m4
index fc79f0b0c26..4eadde7cb72 100644
--- a/gnulib/import/m4/isnand.m4
+++ b/gnulib/import/m4/isnand.m4
@@ -1,5 +1,5 @@
# isnand.m4 serial 12
-dnl Copyright (C) 2007-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2007-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/isnanl.m4 b/gnulib/import/m4/isnanl.m4
index 1ef16f5e350..fa49a644fec 100644
--- a/gnulib/import/m4/isnanl.m4
+++ b/gnulib/import/m4/isnanl.m4
@@ -1,5 +1,5 @@
# isnanl.m4 serial 22
-dnl Copyright (C) 2007-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2007-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/largefile.m4 b/gnulib/import/m4/largefile.m4
index cadb16dc972..3e8b5e39a72 100644
--- a/gnulib/import/m4/largefile.m4
+++ b/gnulib/import/m4/largefile.m4
@@ -1,7 +1,7 @@
# Enable large files on systems where this is not the default.
# Enable support for files on Linux file systems with 64-bit inode numbers.
-# Copyright 1992-1996, 1998-2021 Free Software Foundation, Inc.
+# Copyright 1992-1996, 1998-2022 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.
@@ -22,7 +22,8 @@ AC_DEFUN([gl_SET_LARGEFILE_SOURCE],
esac
])
-# The following implementation works around a problem in autoconf <= 2.69;
+# Work around a problem in Autoconf through at least 2.71 on glibc 2.34+
+# with _TIME_BITS. Also, work around a problem in autoconf <= 2.69:
# AC_SYS_LARGEFILE does not configure for large inodes on Mac OS X 10.5,
# or configures them incorrectly in some cases.
m4_version_prereq([2.70], [], [
@@ -40,6 +41,7 @@ m4_define([_AC_SYS_LARGEFILE_TEST_INCLUDES],
&& LARGE_OFF_T % 2147483647 == 1)
? 1 : -1]];[]dnl
])
+])# m4_version_prereq 2.70
# _AC_SYS_LARGEFILE_MACRO_VALUE(C-MACRO, VALUE,
@@ -54,7 +56,8 @@ m4_define([_AC_SYS_LARGEFILE_MACRO_VALUE],
[AC_LANG_PROGRAM([$5], [$6])],
[$3=no; break])
m4_ifval([$6], [AC_LINK_IFELSE], [AC_COMPILE_IFELSE])(
- [AC_LANG_PROGRAM([#define $1 $2
+ [AC_LANG_PROGRAM([#undef $1
+#define $1 $2
$5], [$6])],
[$3=$2; break])
$3=unknown
@@ -80,9 +83,8 @@ rm -rf conftest*[]dnl
AC_DEFUN([AC_SYS_LARGEFILE],
[AC_ARG_ENABLE(largefile,
[ --disable-largefile omit support for large files])
-if test "$enable_largefile" != no; then
-
- AC_CACHE_CHECK([for special C compiler options needed for large files],
+AS_IF([test "$enable_largefile" != no],
+ [AC_CACHE_CHECK([for special C compiler options needed for large files],
ac_cv_sys_largefile_CC,
[ac_cv_sys_largefile_CC=no
if test "$GCC" != yes; then
@@ -107,15 +109,15 @@ if test "$enable_largefile" != no; then
ac_cv_sys_file_offset_bits,
[Number of bits in a file offset, on hosts where this is settable.],
[_AC_SYS_LARGEFILE_TEST_INCLUDES])
- if test $ac_cv_sys_file_offset_bits = unknown; then
- _AC_SYS_LARGEFILE_MACRO_VALUE(_LARGE_FILES, 1,
- ac_cv_sys_large_files,
- [Define for large files, on AIX-style hosts.],
- [_AC_SYS_LARGEFILE_TEST_INCLUDES])
- fi
-fi
+ AS_CASE([$ac_cv_sys_file_offset_bits],
+ [unknown],
+ [_AC_SYS_LARGEFILE_MACRO_VALUE([_LARGE_FILES], [1],
+ [ac_cv_sys_large_files],
+ [Define for large files, on AIX-style hosts.],
+ [_AC_SYS_LARGEFILE_TEST_INCLUDES])],
+ [64],
+ [gl_YEAR2038_BODY([])])])
])# AC_SYS_LARGEFILE
-])# m4_version_prereq 2.70
# Enable large files on systems where this is implemented by Gnulib, not by the
# system headers.
diff --git a/gnulib/import/m4/limits-h.m4 b/gnulib/import/m4/limits-h.m4
index 70dbb7dcfa0..5d5a5bf584d 100644
--- a/gnulib/import/m4/limits-h.m4
+++ b/gnulib/import/m4/limits-h.m4
@@ -1,6 +1,6 @@
dnl Check whether limits.h has needed features.
-dnl Copyright 2016-2021 Free Software Foundation, Inc.
+dnl Copyright 2016-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
@@ -11,7 +11,7 @@ AC_DEFUN_ONCE([gl_LIMITS_H],
[
gl_CHECK_NEXT_HEADERS([limits.h])
- AC_CACHE_CHECK([whether limits.h has LLONG_MAX, WORD_BIT, ULLONG_WIDTH etc.],
+ AC_CACHE_CHECK([whether limits.h has WORD_BIT, BOOL_WIDTH etc.],
[gl_cv_header_limits_width],
[AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM(
@@ -22,22 +22,20 @@ AC_DEFUN_ONCE([gl_LIMITS_H],
long long llm = LLONG_MAX;
int wb = WORD_BIT;
int ullw = ULLONG_WIDTH;
+ int bw = BOOL_WIDTH;
]])],
[gl_cv_header_limits_width=yes],
[gl_cv_header_limits_width=no])])
if test "$gl_cv_header_limits_width" = yes; then
- LIMITS_H=
+ GL_GENERATE_LIMITS_H=false
else
- LIMITS_H=limits.h
+ GL_GENERATE_LIMITS_H=true
fi
- AC_SUBST([LIMITS_H])
- AM_CONDITIONAL([GL_GENERATE_LIMITS_H], [test -n "$LIMITS_H"])
])
dnl Unconditionally enables the replacement of <limits.h>.
AC_DEFUN([gl_REPLACE_LIMITS_H],
[
AC_REQUIRE([gl_LIMITS_H])
- LIMITS_H='limits.h'
- AM_CONDITIONAL([GL_GENERATE_LIMITS_H], [test -n "$LIMITS_H"])
+ GL_GENERATE_LIMITS_H=true
])
diff --git a/gnulib/import/m4/localcharset.m4 b/gnulib/import/m4/localcharset.m4
index 04389fcbd61..f5dbbd4f369 100644
--- a/gnulib/import/m4/localcharset.m4
+++ b/gnulib/import/m4/localcharset.m4
@@ -1,5 +1,5 @@
# localcharset.m4 serial 8
-dnl Copyright (C) 2002, 2004, 2006, 2009-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2002, 2004, 2006, 2009-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/locale-fr.m4 b/gnulib/import/m4/locale-fr.m4
index b61df7ec90a..3753891f35c 100644
--- a/gnulib/import/m4/locale-fr.m4
+++ b/gnulib/import/m4/locale-fr.m4
@@ -1,5 +1,5 @@
# locale-fr.m4 serial 20
-dnl Copyright (C) 2003, 2005-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2003, 2005-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/locale-ja.m4 b/gnulib/import/m4/locale-ja.m4
index cd94288cc47..73a5d1aebd2 100644
--- a/gnulib/import/m4/locale-ja.m4
+++ b/gnulib/import/m4/locale-ja.m4
@@ -1,5 +1,5 @@
# locale-ja.m4 serial 15
-dnl Copyright (C) 2003, 2005-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2003, 2005-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/locale-zh.m4 b/gnulib/import/m4/locale-zh.m4
index 1228be82850..c997971fad5 100644
--- a/gnulib/import/m4/locale-zh.m4
+++ b/gnulib/import/m4/locale-zh.m4
@@ -1,5 +1,5 @@
# locale-zh.m4 serial 15
-dnl Copyright (C) 2003, 2005-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2003, 2005-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/locale_h.m4 b/gnulib/import/m4/locale_h.m4
index a95379a86ee..ca5d0d0fd0f 100644
--- a/gnulib/import/m4/locale_h.m4
+++ b/gnulib/import/m4/locale_h.m4
@@ -1,13 +1,13 @@
-# locale_h.m4 serial 24
-dnl Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc.
+# locale_h.m4 serial 28
+dnl Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
-AC_DEFUN([gl_LOCALE_H],
+AC_DEFUN_ONCE([gl_LOCALE_H],
[
- dnl Use AC_REQUIRE here, so that the default behavior below is expanded
- dnl once only, before all statements that occur in other macros.
+ dnl Ensure to expand the default settings once only, before all statements
+ dnl that occur in other macros.
AC_REQUIRE([gl_LOCALE_H_DEFAULTS])
dnl Persuade glibc <locale.h> to define locale_t and the int_p_*, int_n_*
@@ -129,22 +129,37 @@ AC_DEFUN([gl_LOCALE_T],
AC_SUBST([HAVE_XLOCALE_H])
])
+# gl_LOCALE_MODULE_INDICATOR([modulename])
+# sets the shell variable that indicates the presence of the given module
+# to a C preprocessor expression that will evaluate to 1.
+# This macro invocation must not occur in macros that are AC_REQUIREd.
AC_DEFUN([gl_LOCALE_MODULE_INDICATOR],
[
- dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
- AC_REQUIRE([gl_LOCALE_H_DEFAULTS])
+ dnl Ensure to expand the default settings once only.
+ gl_LOCALE_H_REQUIRE_DEFAULTS
gl_MODULE_INDICATOR_SET_VARIABLE([$1])
dnl Define it also as a C macro, for the benefit of the unit tests.
gl_MODULE_INDICATOR_FOR_TESTS([$1])
])
+# Initializes the default values for AC_SUBSTed shell variables.
+# This macro must not be AC_REQUIREd. It must only be invoked, and only
+# outside of macros or in macros that are not AC_REQUIREd.
+AC_DEFUN([gl_LOCALE_H_REQUIRE_DEFAULTS],
+[
+ m4_defun(GL_MODULE_INDICATOR_PREFIX[_LOCALE_H_MODULE_INDICATOR_DEFAULTS], [
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOCALECONV])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SETLOCALE])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SETLOCALE_NULL])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_DUPLOCALE])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOCALENAME])
+ ])
+ m4_require(GL_MODULE_INDICATOR_PREFIX[_LOCALE_H_MODULE_INDICATOR_DEFAULTS])
+ AC_REQUIRE([gl_LOCALE_H_DEFAULTS])
+])
+
AC_DEFUN([gl_LOCALE_H_DEFAULTS],
[
- GNULIB_LOCALECONV=0; AC_SUBST([GNULIB_LOCALECONV])
- GNULIB_SETLOCALE=0; AC_SUBST([GNULIB_SETLOCALE])
- GNULIB_SETLOCALE_NULL=0; AC_SUBST([GNULIB_SETLOCALE_NULL])
- GNULIB_DUPLOCALE=0; AC_SUBST([GNULIB_DUPLOCALE])
- GNULIB_LOCALENAME=0; AC_SUBST([GNULIB_LOCALENAME])
dnl Assume proper GNU behavior unless another module says otherwise.
HAVE_NEWLOCALE=1; AC_SUBST([HAVE_NEWLOCALE])
HAVE_DUPLOCALE=1; AC_SUBST([HAVE_DUPLOCALE])
@@ -155,4 +170,5 @@ AC_DEFUN([gl_LOCALE_H_DEFAULTS],
REPLACE_DUPLOCALE=0; AC_SUBST([REPLACE_DUPLOCALE])
REPLACE_FREELOCALE=0; AC_SUBST([REPLACE_FREELOCALE])
REPLACE_STRUCT_LCONV=0; AC_SUBST([REPLACE_STRUCT_LCONV])
+ LOCALENAME_ENHANCE_LOCALE_FUNCS=0; AC_SUBST([LOCALENAME_ENHANCE_LOCALE_FUNCS])
])
diff --git a/gnulib/import/m4/lock.m4 b/gnulib/import/m4/lock.m4
index d68c12d0422..c4cbf07bda5 100644
--- a/gnulib/import/m4/lock.m4
+++ b/gnulib/import/m4/lock.m4
@@ -1,5 +1,5 @@
# lock.m4 serial 14
-dnl Copyright (C) 2005-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2005-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/lstat.m4 b/gnulib/import/m4/lstat.m4
index 62e9db29a73..d987060bd14 100644
--- a/gnulib/import/m4/lstat.m4
+++ b/gnulib/import/m4/lstat.m4
@@ -1,6 +1,6 @@
# serial 33
-# Copyright (C) 1997-2001, 2003-2021 Free Software Foundation, Inc.
+# Copyright (C) 1997-2001, 2003-2022 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
diff --git a/gnulib/import/m4/malloc.m4 b/gnulib/import/m4/malloc.m4
index 514d19a90fa..6b76c1e64dd 100644
--- a/gnulib/import/m4/malloc.m4
+++ b/gnulib/import/m4/malloc.m4
@@ -1,21 +1,21 @@
-# malloc.m4 serial 21
-dnl Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc.
+# malloc.m4 serial 28
+dnl Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
# This is adapted with modifications from upstream Autoconf here:
-# https://git.savannah.gnu.org/cgit/autoconf.git/commit/?id=04be2b7a29d65d9a08e64e8e56e594c91749598c
+# https://git.savannah.gnu.org/cgit/autoconf.git/tree/lib/autoconf/functions.m4?id=v2.70#n949
AC_DEFUN([_AC_FUNC_MALLOC_IF],
[
AC_REQUIRE([AC_CANONICAL_HOST])dnl for cross-compiles
- AC_CACHE_CHECK([for GNU libc compatible malloc],
+ AC_CACHE_CHECK([whether malloc (0) returns nonnull],
[ac_cv_func_malloc_0_nonnull],
[AC_RUN_IFELSE(
[AC_LANG_PROGRAM(
[[#include <stdlib.h>
]],
- [[char *p = malloc (0);
+ [[void *p = malloc (0);
int result = !p;
free (p);
return result;]])
@@ -24,75 +24,152 @@ AC_DEFUN([_AC_FUNC_MALLOC_IF],
[ac_cv_func_malloc_0_nonnull=no],
[case "$host_os" in
# Guess yes on platforms where we know the result.
- *-gnu* | gnu* | *-musl* | freebsd* | netbsd* | openbsd* \
- | hpux* | solaris* | cygwin* | mingw*)
+ *-gnu* | freebsd* | netbsd* | openbsd* | bitrig* \
+ | gnu* | *-musl* | midnightbsd* \
+ | hpux* | solaris* | cygwin* | mingw* | msys* )
ac_cv_func_malloc_0_nonnull="guessing yes" ;;
# If we don't know, obey --enable-cross-guesses.
*) ac_cv_func_malloc_0_nonnull="$gl_cross_guess_normal" ;;
esac
])
])
- case "$ac_cv_func_malloc_0_nonnull" in
- *yes)
- $1
- ;;
- *)
- $2
- ;;
- esac
+ AS_CASE([$ac_cv_func_malloc_0_nonnull], [*yes], [$1], [$2])
])# _AC_FUNC_MALLOC_IF
# gl_FUNC_MALLOC_GNU
# ------------------
-# Test whether 'malloc (0)' is handled like in GNU libc, and replace malloc if
-# it is not.
+# Replace malloc if it is not compatible with GNU libc.
AC_DEFUN([gl_FUNC_MALLOC_GNU],
[
AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
- dnl _AC_FUNC_MALLOC_IF is defined in Autoconf.
- _AC_FUNC_MALLOC_IF(
- [AC_DEFINE([HAVE_MALLOC_GNU], [1],
- [Define to 1 if your system has a GNU libc compatible 'malloc'
- function, and to 0 otherwise.])],
- [AC_DEFINE([HAVE_MALLOC_GNU], [0])
- REPLACE_MALLOC=1
+ AC_REQUIRE([gl_FUNC_MALLOC_POSIX])
+ REPLACE_MALLOC_FOR_MALLOC_GNU="$REPLACE_MALLOC_FOR_MALLOC_POSIX"
+ if test $REPLACE_MALLOC_FOR_MALLOC_GNU = 0; then
+ _AC_FUNC_MALLOC_IF([], [REPLACE_MALLOC_FOR_MALLOC_GNU=1])
+ fi
+])
+
+# gl_FUNC_MALLOC_PTRDIFF
+# ----------------------
+# Test whether malloc (N) reliably fails when N exceeds PTRDIFF_MAX,
+# and replace malloc otherwise.
+AC_DEFUN([gl_FUNC_MALLOC_PTRDIFF],
+[
+ AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+ AC_REQUIRE([gl_CHECK_MALLOC_PTRDIFF])
+ test "$gl_cv_malloc_ptrdiff" = yes || REPLACE_MALLOC_FOR_MALLOC_POSIX=1
+])
+
+# Test whether malloc, realloc, calloc refuse to create objects
+# larger than what can be expressed in ptrdiff_t.
+# Set gl_cv_func_malloc_gnu to yes or no accordingly.
+AC_DEFUN([gl_CHECK_MALLOC_PTRDIFF],
+[
+ AC_CACHE_CHECK([whether malloc is ptrdiff_t safe],
+ [gl_cv_malloc_ptrdiff],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <stdint.h>
+ ]],
+ [[/* 64-bit ptrdiff_t is so wide that no practical platform
+ can exceed it. */
+ #define WIDE_PTRDIFF (PTRDIFF_MAX >> 31 >> 31 != 0)
+
+ /* On rare machines where size_t fits in ptrdiff_t there
+ is no problem. */
+ #define NARROW_SIZE (SIZE_MAX <= PTRDIFF_MAX)
+
+ /* glibc 2.30 and later malloc refuses to exceed ptrdiff_t
+ bounds even on 32-bit platforms. We don't know which
+ non-glibc systems are safe. */
+ #define KNOWN_SAFE (2 < __GLIBC__ + (30 <= __GLIBC_MINOR__))
+
+ #if WIDE_PTRDIFF || NARROW_SIZE || KNOWN_SAFE
+ return 0;
+ #else
+ #error "malloc might not be ptrdiff_t safe"
+ syntax error
+ #endif
+ ]])],
+ [gl_cv_malloc_ptrdiff=yes],
+ [gl_cv_malloc_ptrdiff=no])
])
])
# gl_FUNC_MALLOC_POSIX
# --------------------
# Test whether 'malloc' is POSIX compliant (sets errno to ENOMEM when it
-# fails), and replace malloc if it is not.
+# fails, and doesn't mess up with ptrdiff_t overflow), and replace
+# malloc if it is not.
AC_DEFUN([gl_FUNC_MALLOC_POSIX],
[
AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+ AC_REQUIRE([gl_FUNC_MALLOC_PTRDIFF])
AC_REQUIRE([gl_CHECK_MALLOC_POSIX])
- if test $gl_cv_func_malloc_posix = yes; then
+ if test "$gl_cv_func_malloc_posix" = yes; then
AC_DEFINE([HAVE_MALLOC_POSIX], [1],
- [Define if the 'malloc' function is POSIX compliant.])
+ [Define if malloc, realloc, and calloc set errno on allocation failure.])
else
- REPLACE_MALLOC=1
+ REPLACE_MALLOC_FOR_MALLOC_POSIX=1
fi
])
-# Test whether malloc, realloc, calloc are POSIX compliant,
+# Test whether malloc, realloc, calloc set errno to ENOMEM on failure.
# Set gl_cv_func_malloc_posix to yes or no accordingly.
AC_DEFUN([gl_CHECK_MALLOC_POSIX],
[
- AC_CACHE_CHECK([whether malloc, realloc, calloc are POSIX compliant],
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ AC_CACHE_CHECK([whether malloc, realloc, calloc set errno on failure],
[gl_cv_func_malloc_posix],
[
dnl It is too dangerous to try to allocate a large amount of memory:
dnl some systems go to their knees when you do that. So assume that
- dnl all Unix implementations of the function are POSIX compliant.
- AC_COMPILE_IFELSE(
- [AC_LANG_PROGRAM(
- [[]],
- [[#if defined _WIN32 && ! defined __CYGWIN__
- choke me
- #endif
- ]])],
- [gl_cv_func_malloc_posix=yes],
- [gl_cv_func_malloc_posix=no])
+ dnl all Unix implementations of the function set errno on failure,
+ dnl except on those platforms where we have seen 'test-malloc-gnu',
+ dnl 'test-realloc-gnu', 'test-calloc-gnu' fail.
+ case "$host_os" in
+ mingw*)
+ gl_cv_func_malloc_posix=no ;;
+ irix* | solaris*)
+ dnl On IRIX 6.5, the three functions return NULL with errno unset
+ dnl when the argument is larger than PTRDIFF_MAX.
+ dnl On Solaris 11.3, the three functions return NULL with errno set
+ dnl to EAGAIN, not ENOMEM, when the argument is larger than
+ dnl PTRDIFF_MAX.
+ dnl Here is a test program:
+m4_divert_push([KILL])
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#define ptrdiff_t long
+#ifndef PTRDIFF_MAX
+# define PTRDIFF_MAX ((ptrdiff_t) ((1UL << (8 * sizeof (ptrdiff_t) - 1)) - 1))
+#endif
+
+int main ()
+{
+ void *p;
+
+ fprintf (stderr, "PTRDIFF_MAX = %lu\n", (unsigned long) PTRDIFF_MAX);
+
+ errno = 0;
+ p = malloc ((unsigned long) PTRDIFF_MAX + 1);
+ fprintf (stderr, "p=%p errno=%d\n", p, errno);
+
+ errno = 0;
+ p = calloc (PTRDIFF_MAX / 2 + 1, 2);
+ fprintf (stderr, "p=%p errno=%d\n", p, errno);
+
+ errno = 0;
+ p = realloc (NULL, (unsigned long) PTRDIFF_MAX + 1);
+ fprintf (stderr, "p=%p errno=%d\n", p, errno);
+
+ return 0;
+}
+m4_divert_pop([KILL])
+ gl_cv_func_malloc_posix=no ;;
+ *)
+ gl_cv_func_malloc_posix=yes ;;
+ esac
])
])
diff --git a/gnulib/import/m4/malloca.m4 b/gnulib/import/m4/malloca.m4
index 06ed2c6b711..77eb96a0914 100644
--- a/gnulib/import/m4/malloca.m4
+++ b/gnulib/import/m4/malloca.m4
@@ -1,5 +1,5 @@
# malloca.m4 serial 2
-dnl Copyright (C) 2003-2004, 2006-2007, 2009-2021 Free Software Foundation,
+dnl Copyright (C) 2003-2004, 2006-2007, 2009-2022 Free Software Foundation,
dnl Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
diff --git a/gnulib/import/m4/math_h.m4 b/gnulib/import/m4/math_h.m4
index a9ba5e655f6..a08526a7a52 100644
--- a/gnulib/import/m4/math_h.m4
+++ b/gnulib/import/m4/math_h.m4
@@ -1,10 +1,10 @@
-# math_h.m4 serial 122
-dnl Copyright (C) 2007-2021 Free Software Foundation, Inc.
+# math_h.m4 serial 125
+dnl Copyright (C) 2007-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
-AC_DEFUN([gl_MATH_H],
+AC_DEFUN_ONCE([gl_MATH_H],
[
AC_REQUIRE([gl_MATH_H_DEFAULTS])
gl_CHECK_NEXT_HEADERS([math.h])
@@ -53,119 +53,134 @@ AC_DEFUN([gl_MATH_H],
tanf tanl tanhf trunc truncf truncl])
])
+# gl_MATH_MODULE_INDICATOR([modulename])
+# sets the shell variable that indicates the presence of the given module
+# to a C preprocessor expression that will evaluate to 1.
+# This macro invocation must not occur in macros that are AC_REQUIREd.
AC_DEFUN([gl_MATH_MODULE_INDICATOR],
[
- dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
- AC_REQUIRE([gl_MATH_H_DEFAULTS])
+ dnl Ensure to expand the default settings once only.
+ gl_MATH_H_REQUIRE_DEFAULTS
gl_MODULE_INDICATOR_SET_VARIABLE([$1])
dnl Define it also as a C macro, for the benefit of the unit tests.
gl_MODULE_INDICATOR_FOR_TESTS([$1])
])
+# Initializes the default values for AC_SUBSTed shell variables.
+# This macro must not be AC_REQUIREd. It must only be invoked, and only
+# outside of macros or in macros that are not AC_REQUIREd.
+AC_DEFUN([gl_MATH_H_REQUIRE_DEFAULTS],
+[
+ m4_defun(GL_MODULE_INDICATOR_PREFIX[_MATH_H_MODULE_INDICATOR_DEFAULTS], [
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ACOSF])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ACOSL])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ASINF])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ASINL])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ATANF])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ATANL])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ATAN2F])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CBRT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CBRTF])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CBRTL])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CEIL])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CEILF])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CEILL])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_COPYSIGN])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_COPYSIGNF])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_COPYSIGNL])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_COSF])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_COSL])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_COSHF])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXPF])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXPL])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXP2])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXP2F])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXP2L])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXPM1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXPM1F])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXPM1L])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FABSF])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FABSL])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FLOOR])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FLOORF])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FLOORL])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FMA])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FMAF])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FMAL])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FMOD])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FMODF])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FMODL])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FREXPF])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FREXP])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FREXPL])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_HYPOT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_HYPOTF])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_HYPOTL])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ILOGB])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ILOGBF])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ILOGBL])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISFINITE])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISINF])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISNAN])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISNANF])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISNAND])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISNANL])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LDEXPF])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LDEXPL])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOG])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOGF])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOGL])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOG10])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOG10F])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOG10L])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOG1P])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOG1PF])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOG1PL])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOG2])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOG2F])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOG2L])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOGB])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOGBF])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOGBL])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MODF])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MODFF])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MODFL])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POWF])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REMAINDER])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REMAINDERF])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REMAINDERL])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RINT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RINTF])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RINTL])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ROUND])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ROUNDF])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ROUNDL])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SIGNBIT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SINF])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SINL])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SINHF])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SQRTF])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SQRTL])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TANF])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TANL])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TANHF])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TRUNC])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TRUNCF])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TRUNCL])
+ dnl Support Microsoft deprecated alias function names by default.
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_J0], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_J1], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_JN], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_Y0], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_Y1], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_YN], [1])
+ ])
+ m4_require(GL_MODULE_INDICATOR_PREFIX[_MATH_H_MODULE_INDICATOR_DEFAULTS])
+ AC_REQUIRE([gl_MATH_H_DEFAULTS])
+])
+
AC_DEFUN([gl_MATH_H_DEFAULTS],
[
- GNULIB_ACOSF=0; AC_SUBST([GNULIB_ACOSF])
- GNULIB_ACOSL=0; AC_SUBST([GNULIB_ACOSL])
- GNULIB_ASINF=0; AC_SUBST([GNULIB_ASINF])
- GNULIB_ASINL=0; AC_SUBST([GNULIB_ASINL])
- GNULIB_ATANF=0; AC_SUBST([GNULIB_ATANF])
- GNULIB_ATANL=0; AC_SUBST([GNULIB_ATANL])
- GNULIB_ATAN2F=0; AC_SUBST([GNULIB_ATAN2F])
- GNULIB_CBRT=0; AC_SUBST([GNULIB_CBRT])
- GNULIB_CBRTF=0; AC_SUBST([GNULIB_CBRTF])
- GNULIB_CBRTL=0; AC_SUBST([GNULIB_CBRTL])
- GNULIB_CEIL=0; AC_SUBST([GNULIB_CEIL])
- GNULIB_CEILF=0; AC_SUBST([GNULIB_CEILF])
- GNULIB_CEILL=0; AC_SUBST([GNULIB_CEILL])
- GNULIB_COPYSIGN=0; AC_SUBST([GNULIB_COPYSIGN])
- GNULIB_COPYSIGNF=0; AC_SUBST([GNULIB_COPYSIGNF])
- GNULIB_COPYSIGNL=0; AC_SUBST([GNULIB_COPYSIGNL])
- GNULIB_COSF=0; AC_SUBST([GNULIB_COSF])
- GNULIB_COSL=0; AC_SUBST([GNULIB_COSL])
- GNULIB_COSHF=0; AC_SUBST([GNULIB_COSHF])
- GNULIB_EXPF=0; AC_SUBST([GNULIB_EXPF])
- GNULIB_EXPL=0; AC_SUBST([GNULIB_EXPL])
- GNULIB_EXP2=0; AC_SUBST([GNULIB_EXP2])
- GNULIB_EXP2F=0; AC_SUBST([GNULIB_EXP2F])
- GNULIB_EXP2L=0; AC_SUBST([GNULIB_EXP2L])
- GNULIB_EXPM1=0; AC_SUBST([GNULIB_EXPM1])
- GNULIB_EXPM1F=0; AC_SUBST([GNULIB_EXPM1F])
- GNULIB_EXPM1L=0; AC_SUBST([GNULIB_EXPM1L])
- GNULIB_FABSF=0; AC_SUBST([GNULIB_FABSF])
- GNULIB_FABSL=0; AC_SUBST([GNULIB_FABSL])
- GNULIB_FLOOR=0; AC_SUBST([GNULIB_FLOOR])
- GNULIB_FLOORF=0; AC_SUBST([GNULIB_FLOORF])
- GNULIB_FLOORL=0; AC_SUBST([GNULIB_FLOORL])
- GNULIB_FMA=0; AC_SUBST([GNULIB_FMA])
- GNULIB_FMAF=0; AC_SUBST([GNULIB_FMAF])
- GNULIB_FMAL=0; AC_SUBST([GNULIB_FMAL])
- GNULIB_FMOD=0; AC_SUBST([GNULIB_FMOD])
- GNULIB_FMODF=0; AC_SUBST([GNULIB_FMODF])
- GNULIB_FMODL=0; AC_SUBST([GNULIB_FMODL])
- GNULIB_FREXPF=0; AC_SUBST([GNULIB_FREXPF])
- GNULIB_FREXP=0; AC_SUBST([GNULIB_FREXP])
- GNULIB_FREXPL=0; AC_SUBST([GNULIB_FREXPL])
- GNULIB_HYPOT=0; AC_SUBST([GNULIB_HYPOT])
- GNULIB_HYPOTF=0; AC_SUBST([GNULIB_HYPOTF])
- GNULIB_HYPOTL=0; AC_SUBST([GNULIB_HYPOTL])
- GNULIB_ILOGB=0; AC_SUBST([GNULIB_ILOGB])
- GNULIB_ILOGBF=0; AC_SUBST([GNULIB_ILOGBF])
- GNULIB_ILOGBL=0; AC_SUBST([GNULIB_ILOGBL])
- GNULIB_ISFINITE=0; AC_SUBST([GNULIB_ISFINITE])
- GNULIB_ISINF=0; AC_SUBST([GNULIB_ISINF])
- GNULIB_ISNAN=0; AC_SUBST([GNULIB_ISNAN])
- GNULIB_ISNANF=0; AC_SUBST([GNULIB_ISNANF])
- GNULIB_ISNAND=0; AC_SUBST([GNULIB_ISNAND])
- GNULIB_ISNANL=0; AC_SUBST([GNULIB_ISNANL])
- GNULIB_LDEXPF=0; AC_SUBST([GNULIB_LDEXPF])
- GNULIB_LDEXPL=0; AC_SUBST([GNULIB_LDEXPL])
- GNULIB_LOG=0; AC_SUBST([GNULIB_LOG])
- GNULIB_LOGF=0; AC_SUBST([GNULIB_LOGF])
- GNULIB_LOGL=0; AC_SUBST([GNULIB_LOGL])
- GNULIB_LOG10=0; AC_SUBST([GNULIB_LOG10])
- GNULIB_LOG10F=0; AC_SUBST([GNULIB_LOG10F])
- GNULIB_LOG10L=0; AC_SUBST([GNULIB_LOG10L])
- GNULIB_LOG1P=0; AC_SUBST([GNULIB_LOG1P])
- GNULIB_LOG1PF=0; AC_SUBST([GNULIB_LOG1PF])
- GNULIB_LOG1PL=0; AC_SUBST([GNULIB_LOG1PL])
- GNULIB_LOG2=0; AC_SUBST([GNULIB_LOG2])
- GNULIB_LOG2F=0; AC_SUBST([GNULIB_LOG2F])
- GNULIB_LOG2L=0; AC_SUBST([GNULIB_LOG2L])
- GNULIB_LOGB=0; AC_SUBST([GNULIB_LOGB])
- GNULIB_LOGBF=0; AC_SUBST([GNULIB_LOGBF])
- GNULIB_LOGBL=0; AC_SUBST([GNULIB_LOGBL])
- GNULIB_MODF=0; AC_SUBST([GNULIB_MODF])
- GNULIB_MODFF=0; AC_SUBST([GNULIB_MODFF])
- GNULIB_MODFL=0; AC_SUBST([GNULIB_MODFL])
- GNULIB_POWF=0; AC_SUBST([GNULIB_POWF])
- GNULIB_REMAINDER=0; AC_SUBST([GNULIB_REMAINDER])
- GNULIB_REMAINDERF=0; AC_SUBST([GNULIB_REMAINDERF])
- GNULIB_REMAINDERL=0; AC_SUBST([GNULIB_REMAINDERL])
- GNULIB_RINT=0; AC_SUBST([GNULIB_RINT])
- GNULIB_RINTF=0; AC_SUBST([GNULIB_RINTF])
- GNULIB_RINTL=0; AC_SUBST([GNULIB_RINTL])
- GNULIB_ROUND=0; AC_SUBST([GNULIB_ROUND])
- GNULIB_ROUNDF=0; AC_SUBST([GNULIB_ROUNDF])
- GNULIB_ROUNDL=0; AC_SUBST([GNULIB_ROUNDL])
- GNULIB_SIGNBIT=0; AC_SUBST([GNULIB_SIGNBIT])
- GNULIB_SINF=0; AC_SUBST([GNULIB_SINF])
- GNULIB_SINL=0; AC_SUBST([GNULIB_SINL])
- GNULIB_SINHF=0; AC_SUBST([GNULIB_SINHF])
- GNULIB_SQRTF=0; AC_SUBST([GNULIB_SQRTF])
- GNULIB_SQRTL=0; AC_SUBST([GNULIB_SQRTL])
- GNULIB_TANF=0; AC_SUBST([GNULIB_TANF])
- GNULIB_TANL=0; AC_SUBST([GNULIB_TANL])
- GNULIB_TANHF=0; AC_SUBST([GNULIB_TANHF])
- GNULIB_TRUNC=0; AC_SUBST([GNULIB_TRUNC])
- GNULIB_TRUNCF=0; AC_SUBST([GNULIB_TRUNCF])
- GNULIB_TRUNCL=0; AC_SUBST([GNULIB_TRUNCL])
- dnl Support Microsoft deprecated alias function names by default.
- GNULIB_MDA_J0=1; AC_SUBST([GNULIB_MDA_J0])
- GNULIB_MDA_J1=1; AC_SUBST([GNULIB_MDA_J1])
- GNULIB_MDA_JN=1; AC_SUBST([GNULIB_MDA_JN])
- GNULIB_MDA_Y0=1; AC_SUBST([GNULIB_MDA_Y0])
- GNULIB_MDA_Y1=1; AC_SUBST([GNULIB_MDA_Y1])
- GNULIB_MDA_YN=1; AC_SUBST([GNULIB_MDA_YN])
dnl Assume proper GNU behavior unless another module says otherwise.
HAVE_ACOSF=1; AC_SUBST([HAVE_ACOSF])
HAVE_ACOSL=1; AC_SUBST([HAVE_ACOSL])
diff --git a/gnulib/import/m4/mbrtowc.m4 b/gnulib/import/m4/mbrtowc.m4
index 1d4e73d7264..ec8716b5996 100644
--- a/gnulib/import/m4/mbrtowc.m4
+++ b/gnulib/import/m4/mbrtowc.m4
@@ -1,5 +1,5 @@
# mbrtowc.m4 serial 38 -*- coding: utf-8 -*-
-dnl Copyright (C) 2001-2002, 2004-2005, 2008-2021 Free Software Foundation,
+dnl Copyright (C) 2001-2002, 2004-2005, 2008-2022 Free Software Foundation,
dnl Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
diff --git a/gnulib/import/m4/mbsinit.m4 b/gnulib/import/m4/mbsinit.m4
index dc6e10d7f15..ebd2d4ffbf7 100644
--- a/gnulib/import/m4/mbsinit.m4
+++ b/gnulib/import/m4/mbsinit.m4
@@ -1,5 +1,5 @@
# mbsinit.m4 serial 9
-dnl Copyright (C) 2008, 2010-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2008, 2010-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/mbsrtowcs.m4 b/gnulib/import/m4/mbsrtowcs.m4
index cf8e962c654..f672fa52288 100644
--- a/gnulib/import/m4/mbsrtowcs.m4
+++ b/gnulib/import/m4/mbsrtowcs.m4
@@ -1,5 +1,5 @@
# mbsrtowcs.m4 serial 14
-dnl Copyright (C) 2008-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2008-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/mbstate_t.m4 b/gnulib/import/m4/mbstate_t.m4
index e7fe3580dbc..a6eba1bc121 100644
--- a/gnulib/import/m4/mbstate_t.m4
+++ b/gnulib/import/m4/mbstate_t.m4
@@ -1,5 +1,5 @@
# mbstate_t.m4 serial 14
-dnl Copyright (C) 2000-2002, 2008-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2000-2002, 2008-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/mbtowc.m4 b/gnulib/import/m4/mbtowc.m4
index 7fc74c945f3..2827e833519 100644
--- a/gnulib/import/m4/mbtowc.m4
+++ b/gnulib/import/m4/mbtowc.m4
@@ -1,5 +1,5 @@
# mbtowc.m4 serial 3
-dnl Copyright (C) 2011-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2011-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/memchr.m4 b/gnulib/import/m4/memchr.m4
index 64470ded532..c7489d87159 100644
--- a/gnulib/import/m4/memchr.m4
+++ b/gnulib/import/m4/memchr.m4
@@ -1,5 +1,5 @@
-# memchr.m4 serial 17
-dnl Copyright (C) 2002-2004, 2009-2021 Free Software Foundation, Inc.
+# memchr.m4 serial 18
+dnl Copyright (C) 2002-2004, 2009-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
@@ -13,7 +13,7 @@ AC_DEFUN_ONCE([gl_FUNC_MEMCHR],
AC_CHECK_HEADERS_ONCE([sys/mman.h])
AC_CHECK_FUNCS_ONCE([mprotect])
- AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
+ AC_REQUIRE([gl_STRING_H_DEFAULTS])
# Detect platform-specific bugs in some versions of glibc:
# memchr should not dereference anything with length 0
# https://bugzilla.redhat.com/show_bug.cgi?id=499689
diff --git a/gnulib/import/m4/memmem.m4 b/gnulib/import/m4/memmem.m4
index e2a785f48d4..e01aa5c713b 100644
--- a/gnulib/import/m4/memmem.m4
+++ b/gnulib/import/m4/memmem.m4
@@ -1,5 +1,5 @@
-# memmem.m4 serial 27
-dnl Copyright (C) 2002-2004, 2007-2021 Free Software Foundation, Inc.
+# memmem.m4 serial 29
+dnl Copyright (C) 2002-2004, 2007-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
@@ -10,7 +10,7 @@ AC_DEFUN([gl_FUNC_MEMMEM_SIMPLE],
dnl Persuade glibc <string.h> to declare memmem().
AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
- AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
+ AC_REQUIRE([gl_STRING_H_DEFAULTS])
AC_CHECK_FUNCS([memmem])
if test $ac_cv_func_memmem = yes; then
HAVE_MEMMEM=1
@@ -50,6 +50,7 @@ AC_DEFUN([gl_FUNC_MEMMEM_SIMPLE],
dnl Assume that it works on all other platforms (even if not linear).
AC_EGREP_CPP([Lucky user],
[
+#include <string.h> /* for __GNU_LIBRARY__ */
#ifdef __GNU_LIBRARY__
#include <features.h>
#if ((__GLIBC__ == 2 && ((__GLIBC_MINOR > 0 && __GLIBC_MINOR__ < 9) \
diff --git a/gnulib/import/m4/mempcpy.m4 b/gnulib/import/m4/mempcpy.m4
index c5ee2af8ccd..1107eb4a468 100644
--- a/gnulib/import/m4/mempcpy.m4
+++ b/gnulib/import/m4/mempcpy.m4
@@ -1,5 +1,5 @@
-# mempcpy.m4 serial 11
-dnl Copyright (C) 2003-2004, 2006-2007, 2009-2021 Free Software Foundation,
+# mempcpy.m4 serial 12
+dnl Copyright (C) 2003-2004, 2006-2007, 2009-2022 Free Software Foundation,
dnl Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
@@ -13,7 +13,7 @@ AC_DEFUN([gl_FUNC_MEMPCPY],
dnl The mempcpy() declaration in lib/string.in.h uses 'restrict'.
AC_REQUIRE([AC_C_RESTRICT])
- AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
+ AC_REQUIRE([gl_STRING_H_DEFAULTS])
AC_CHECK_FUNCS([mempcpy])
if test $ac_cv_func_mempcpy = no; then
HAVE_MEMPCPY=0
diff --git a/gnulib/import/m4/memrchr.m4 b/gnulib/import/m4/memrchr.m4
index d0c05896e54..ec5e2083bcf 100644
--- a/gnulib/import/m4/memrchr.m4
+++ b/gnulib/import/m4/memrchr.m4
@@ -1,5 +1,5 @@
-# memrchr.m4 serial 10
-dnl Copyright (C) 2002-2003, 2005-2007, 2009-2021 Free Software Foundation,
+# memrchr.m4 serial 11
+dnl Copyright (C) 2002-2003, 2005-2007, 2009-2022 Free Software Foundation,
dnl Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
@@ -10,7 +10,7 @@ AC_DEFUN([gl_FUNC_MEMRCHR],
dnl Persuade glibc <string.h> to declare memrchr().
AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
- AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
+ AC_REQUIRE([gl_STRING_H_DEFAULTS])
AC_CHECK_DECLS_ONCE([memrchr])
if test $ac_cv_have_decl_memrchr = no; then
HAVE_DECL_MEMRCHR=0
diff --git a/gnulib/import/m4/minmax.m4 b/gnulib/import/m4/minmax.m4
index e21a6879a09..b9767397942 100644
--- a/gnulib/import/m4/minmax.m4
+++ b/gnulib/import/m4/minmax.m4
@@ -1,5 +1,5 @@
# minmax.m4 serial 4
-dnl Copyright (C) 2005, 2009-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2005, 2009-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/mkdir.m4 b/gnulib/import/m4/mkdir.m4
index 031fd291b55..8b78ce960c1 100644
--- a/gnulib/import/m4/mkdir.m4
+++ b/gnulib/import/m4/mkdir.m4
@@ -1,6 +1,6 @@
# serial 17
-# Copyright (C) 2001, 2003-2004, 2006, 2008-2021 Free Software Foundation, Inc.
+# Copyright (C) 2001, 2003-2004, 2006, 2008-2022 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.
diff --git a/gnulib/import/m4/mkdtemp.m4 b/gnulib/import/m4/mkdtemp.m4
index 9f4816c6ed5..b616a9a7570 100644
--- a/gnulib/import/m4/mkdtemp.m4
+++ b/gnulib/import/m4/mkdtemp.m4
@@ -1,5 +1,5 @@
# mkdtemp.m4 serial 8
-dnl Copyright (C) 2001-2003, 2006-2007, 2009-2021 Free Software Foundation,
+dnl Copyright (C) 2001-2003, 2006-2007, 2009-2022 Free Software Foundation,
dnl Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
diff --git a/gnulib/import/m4/mkostemp.m4 b/gnulib/import/m4/mkostemp.m4
index 46534d48ef5..2176f372967 100644
--- a/gnulib/import/m4/mkostemp.m4
+++ b/gnulib/import/m4/mkostemp.m4
@@ -1,5 +1,5 @@
# mkostemp.m4 serial 2
-dnl Copyright (C) 2009-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2009-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/mmap-anon.m4 b/gnulib/import/m4/mmap-anon.m4
index 5a9f968575f..a4580ff944e 100644
--- a/gnulib/import/m4/mmap-anon.m4
+++ b/gnulib/import/m4/mmap-anon.m4
@@ -1,5 +1,5 @@
-# mmap-anon.m4 serial 11
-dnl Copyright (C) 2005, 2007, 2009-2021 Free Software Foundation, Inc.
+# mmap-anon.m4 serial 12
+dnl Copyright (C) 2005, 2007, 2009-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
@@ -13,7 +13,7 @@ dnl with or without modifications, as long as this notice is preserved.
# - On IRIX, neither exists, and a file descriptor opened to /dev/zero must be
# used.
-AC_DEFUN([gl_FUNC_MMAP_ANON],
+AC_DEFUN_ONCE([gl_FUNC_MMAP_ANON],
[
dnl Persuade glibc <sys/mman.h> to define MAP_ANONYMOUS.
AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
diff --git a/gnulib/import/m4/mode_t.m4 b/gnulib/import/m4/mode_t.m4
index 3bd4b89fee2..e08d27a749e 100644
--- a/gnulib/import/m4/mode_t.m4
+++ b/gnulib/import/m4/mode_t.m4
@@ -1,5 +1,5 @@
# mode_t.m4 serial 2
-dnl Copyright (C) 2009-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2009-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/msvc-inval.m4 b/gnulib/import/m4/msvc-inval.m4
index 3ba5b4e9881..b32cf6eba7e 100644
--- a/gnulib/import/m4/msvc-inval.m4
+++ b/gnulib/import/m4/msvc-inval.m4
@@ -1,5 +1,5 @@
# msvc-inval.m4 serial 1
-dnl Copyright (C) 2011-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2011-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/msvc-nothrow.m4 b/gnulib/import/m4/msvc-nothrow.m4
index aae25ce7cc7..16ceb1f15b3 100644
--- a/gnulib/import/m4/msvc-nothrow.m4
+++ b/gnulib/import/m4/msvc-nothrow.m4
@@ -1,5 +1,5 @@
# msvc-nothrow.m4 serial 1
-dnl Copyright (C) 2011-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2011-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/multiarch.m4 b/gnulib/import/m4/multiarch.m4
index f1678d9f6ee..5d942765d40 100644
--- a/gnulib/import/m4/multiarch.m4
+++ b/gnulib/import/m4/multiarch.m4
@@ -1,5 +1,5 @@
# multiarch.m4 serial 9
-dnl Copyright (C) 2008-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2008-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/netdb_h.m4 b/gnulib/import/m4/netdb_h.m4
index db84c787e98..d6a9d709c1f 100644
--- a/gnulib/import/m4/netdb_h.m4
+++ b/gnulib/import/m4/netdb_h.m4
@@ -1,10 +1,10 @@
-# netdb_h.m4 serial 12
-dnl Copyright (C) 2008-2021 Free Software Foundation, Inc.
+# netdb_h.m4 serial 15
+dnl Copyright (C) 2008-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
-AC_DEFUN([gl_HEADER_NETDB],
+AC_DEFUN_ONCE([gl_NETDB_H],
[
AC_REQUIRE([gl_NETDB_H_DEFAULTS])
gl_CHECK_NEXT_HEADERS([netdb.h])
@@ -21,18 +21,33 @@ AC_DEFUN([gl_HEADER_NETDB],
[getaddrinfo freeaddrinfo gai_strerror getnameinfo])
])
+# gl_NETDB_MODULE_INDICATOR([modulename])
+# sets the shell variable that indicates the presence of the given module
+# to a C preprocessor expression that will evaluate to 1.
+# This macro invocation must not occur in macros that are AC_REQUIREd.
AC_DEFUN([gl_NETDB_MODULE_INDICATOR],
[
- dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
- AC_REQUIRE([gl_NETDB_H_DEFAULTS])
+ dnl Ensure to expand the default settings once only.
+ gl_NETDB_H_REQUIRE_DEFAULTS
gl_MODULE_INDICATOR_SET_VARIABLE([$1])
dnl Define it also as a C macro, for the benefit of the unit tests.
gl_MODULE_INDICATOR_FOR_TESTS([$1])
])
+# Initializes the default values for AC_SUBSTed shell variables.
+# This macro must not be AC_REQUIREd. It must only be invoked, and only
+# outside of macros or in macros that are not AC_REQUIREd.
+AC_DEFUN([gl_NETDB_H_REQUIRE_DEFAULTS],
+[
+ m4_defun(GL_MODULE_INDICATOR_PREFIX[_NETDB_H_MODULE_INDICATOR_DEFAULTS], [
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETADDRINFO])
+ ])
+ m4_require(GL_MODULE_INDICATOR_PREFIX[_NETDB_H_MODULE_INDICATOR_DEFAULTS])
+ AC_REQUIRE([gl_NETDB_H_DEFAULTS])
+])
+
AC_DEFUN([gl_NETDB_H_DEFAULTS],
[
- GNULIB_GETADDRINFO=0; AC_SUBST([GNULIB_GETADDRINFO])
dnl Assume proper GNU behavior unless another module says otherwise.
HAVE_STRUCT_ADDRINFO=1; AC_SUBST([HAVE_STRUCT_ADDRINFO])
HAVE_DECL_FREEADDRINFO=1; AC_SUBST([HAVE_DECL_FREEADDRINFO])
diff --git a/gnulib/import/m4/netinet_in_h.m4 b/gnulib/import/m4/netinet_in_h.m4
index c5555964349..de26fe859e8 100644
--- a/gnulib/import/m4/netinet_in_h.m4
+++ b/gnulib/import/m4/netinet_in_h.m4
@@ -1,5 +1,5 @@
-# netinet_in_h.m4 serial 5
-dnl Copyright (C) 2006-2021 Free Software Foundation, Inc.
+# netinet_in_h.m4 serial 6
+dnl Copyright (C) 2006-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
@@ -14,9 +14,9 @@ AC_DEFUN([gl_HEADER_NETINET_IN],
[gl_cv_header_netinet_in_h_selfcontained=no])
])
if test $gl_cv_header_netinet_in_h_selfcontained = yes; then
- NETINET_IN_H=''
+ GL_GENERATE_NETINET_IN_H=false
else
- NETINET_IN_H='netinet/in.h'
+ GL_GENERATE_NETINET_IN_H=true
AC_CHECK_HEADERS([netinet/in.h])
gl_CHECK_NEXT_HEADERS([netinet/in.h])
if test $ac_cv_header_netinet_in_h = yes; then
@@ -26,6 +26,4 @@ AC_DEFUN([gl_HEADER_NETINET_IN],
fi
AC_SUBST([HAVE_NETINET_IN_H])
fi
- AC_SUBST([NETINET_IN_H])
- AM_CONDITIONAL([GL_GENERATE_NETINET_IN_H], [test -n "$NETINET_IN_H"])
])
diff --git a/gnulib/import/m4/nocrash.m4 b/gnulib/import/m4/nocrash.m4
index 27412cd2e8c..91f00c1bc91 100644
--- a/gnulib/import/m4/nocrash.m4
+++ b/gnulib/import/m4/nocrash.m4
@@ -1,5 +1,5 @@
# nocrash.m4 serial 5
-dnl Copyright (C) 2005, 2009-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2005, 2009-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/off_t.m4 b/gnulib/import/m4/off_t.m4
index bdec43c804e..0890adafc35 100644
--- a/gnulib/import/m4/off_t.m4
+++ b/gnulib/import/m4/off_t.m4
@@ -1,5 +1,5 @@
# off_t.m4 serial 1
-dnl Copyright (C) 2012-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2012-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/open-cloexec.m4 b/gnulib/import/m4/open-cloexec.m4
index 542a90f42a7..16cd5ec4cba 100644
--- a/gnulib/import/m4/open-cloexec.m4
+++ b/gnulib/import/m4/open-cloexec.m4
@@ -1,6 +1,6 @@
# Test whether O_CLOEXEC is defined.
-dnl Copyright 2017-2021 Free Software Foundation, Inc.
+dnl Copyright 2017-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/open-slash.m4 b/gnulib/import/m4/open-slash.m4
index e619039e873..4fbf491a75f 100644
--- a/gnulib/import/m4/open-slash.m4
+++ b/gnulib/import/m4/open-slash.m4
@@ -1,5 +1,5 @@
# open-slash.m4 serial 2
-dnl Copyright (C) 2007-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2007-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/open.m4 b/gnulib/import/m4/open.m4
index c63438650df..f82fd6cac1e 100644
--- a/gnulib/import/m4/open.m4
+++ b/gnulib/import/m4/open.m4
@@ -1,5 +1,5 @@
# open.m4 serial 15
-dnl Copyright (C) 2007-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2007-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/openat.m4 b/gnulib/import/m4/openat.m4
index eba0f515acd..de7479942c5 100644
--- a/gnulib/import/m4/openat.m4
+++ b/gnulib/import/m4/openat.m4
@@ -1,7 +1,7 @@
# serial 46
# See if we need to use our replacement for Solaris' openat et al functions.
-dnl Copyright (C) 2004-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2004-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/opendir.m4 b/gnulib/import/m4/opendir.m4
index 517edae30ed..7816dc54635 100644
--- a/gnulib/import/m4/opendir.m4
+++ b/gnulib/import/m4/opendir.m4
@@ -1,5 +1,5 @@
# opendir.m4 serial 5
-dnl Copyright (C) 2011-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2011-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/pathmax.m4 b/gnulib/import/m4/pathmax.m4
index e67c656659b..44add9905e8 100644
--- a/gnulib/import/m4/pathmax.m4
+++ b/gnulib/import/m4/pathmax.m4
@@ -1,5 +1,5 @@
# pathmax.m4 serial 11
-dnl Copyright (C) 2002-2003, 2005-2006, 2009-2021 Free Software Foundation,
+dnl Copyright (C) 2002-2003, 2005-2006, 2009-2022 Free Software Foundation,
dnl Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
diff --git a/gnulib/import/m4/pid_t.m4 b/gnulib/import/m4/pid_t.m4
index b7650a10f13..cb26f3612ef 100644
--- a/gnulib/import/m4/pid_t.m4
+++ b/gnulib/import/m4/pid_t.m4
@@ -1,5 +1,5 @@
# pid_t.m4 serial 4
-dnl Copyright (C) 2020-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2020-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/pipe.m4 b/gnulib/import/m4/pipe.m4
index 89d666d2af7..62871c6d3c5 100644
--- a/gnulib/import/m4/pipe.m4
+++ b/gnulib/import/m4/pipe.m4
@@ -1,5 +1,5 @@
# pipe.m4 serial 2
-dnl Copyright (C) 2010-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2010-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/pthread_rwlock_rdlock.m4 b/gnulib/import/m4/pthread_rwlock_rdlock.m4
index a5fbead6255..8ad783928b5 100644
--- a/gnulib/import/m4/pthread_rwlock_rdlock.m4
+++ b/gnulib/import/m4/pthread_rwlock_rdlock.m4
@@ -1,5 +1,5 @@
# pthread_rwlock_rdlock.m4 serial 4
-dnl Copyright (C) 2017-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2017-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/rawmemchr.m4 b/gnulib/import/m4/rawmemchr.m4
index f92846543cc..dae419355a9 100644
--- a/gnulib/import/m4/rawmemchr.m4
+++ b/gnulib/import/m4/rawmemchr.m4
@@ -1,5 +1,5 @@
-# rawmemchr.m4 serial 2
-dnl Copyright (C) 2003, 2007-2021 Free Software Foundation, Inc.
+# rawmemchr.m4 serial 3
+dnl Copyright (C) 2003, 2007-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
@@ -9,7 +9,7 @@ AC_DEFUN([gl_FUNC_RAWMEMCHR],
dnl Persuade glibc <string.h> to declare rawmemchr().
AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
- AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
+ AC_REQUIRE([gl_STRING_H_DEFAULTS])
AC_CHECK_FUNCS([rawmemchr])
if test $ac_cv_func_rawmemchr = no; then
HAVE_RAWMEMCHR=0
diff --git a/gnulib/import/m4/readdir.m4 b/gnulib/import/m4/readdir.m4
index 94dc99c82ab..ff3d2ab7db1 100644
--- a/gnulib/import/m4/readdir.m4
+++ b/gnulib/import/m4/readdir.m4
@@ -1,5 +1,5 @@
# readdir.m4 serial 1
-dnl Copyright (C) 2011-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2011-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/readlink.m4 b/gnulib/import/m4/readlink.m4
index 352788c65d0..d1dd5212259 100644
--- a/gnulib/import/m4/readlink.m4
+++ b/gnulib/import/m4/readlink.m4
@@ -1,5 +1,5 @@
# readlink.m4 serial 16
-dnl Copyright (C) 2003, 2007, 2009-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2003, 2007, 2009-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/realloc.m4 b/gnulib/import/m4/realloc.m4
index 6f4461d017c..86e57c259f3 100644
--- a/gnulib/import/m4/realloc.m4
+++ b/gnulib/import/m4/realloc.m4
@@ -1,21 +1,21 @@
-# realloc.m4 serial 19
-dnl Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc.
+# realloc.m4 serial 26
+dnl Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
# This is adapted with modifications from upstream Autoconf here:
-# https://git.savannah.gnu.org/cgit/autoconf.git/commit/?id=04be2b7a29d65d9a08e64e8e56e594c91749598c
+# https://git.savannah.gnu.org/cgit/autoconf.git/tree/lib/autoconf/functions.m4?id=v2.70#n1455
AC_DEFUN([_AC_FUNC_REALLOC_IF],
[
AC_REQUIRE([AC_CANONICAL_HOST])dnl for cross-compiles
- AC_CACHE_CHECK([for GNU libc compatible realloc],
+ AC_CACHE_CHECK([whether realloc (0, 0) returns nonnull],
[ac_cv_func_realloc_0_nonnull],
[AC_RUN_IFELSE(
[AC_LANG_PROGRAM(
[[#include <stdlib.h>
]],
- [[char *p = realloc (0, 0);
+ [[void *p = realloc (0, 0);
int result = !p;
free (p);
return result;]])
@@ -24,53 +24,40 @@ AC_DEFUN([_AC_FUNC_REALLOC_IF],
[ac_cv_func_realloc_0_nonnull=no],
[case "$host_os" in
# Guess yes on platforms where we know the result.
- *-gnu* | gnu* | *-musl* | freebsd* | netbsd* | openbsd* \
- | hpux* | solaris* | cygwin* | mingw*)
+ *-gnu* | freebsd* | netbsd* | openbsd* | bitrig* \
+ | gnu* | *-musl* | midnightbsd* \
+ | hpux* | solaris* | cygwin* | mingw* | msys* )
ac_cv_func_realloc_0_nonnull="guessing yes" ;;
# If we don't know, obey --enable-cross-guesses.
*) ac_cv_func_realloc_0_nonnull="$gl_cross_guess_normal" ;;
esac
])
])
- case "$ac_cv_func_realloc_0_nonnull" in
- *yes)
- $1
- ;;
- *)
- $2
- ;;
- esac
+ AS_CASE([$ac_cv_func_realloc_0_nonnull], [*yes], [$1], [$2])
])# AC_FUNC_REALLOC
# gl_FUNC_REALLOC_GNU
# -------------------
-# Test whether 'realloc (0, 0)' is handled like in GNU libc, and replace
-# realloc if it is not.
+# Replace realloc if it is not compatible with GNU libc.
AC_DEFUN([gl_FUNC_REALLOC_GNU],
[
AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
- dnl _AC_FUNC_REALLOC_IF is defined in Autoconf.
- _AC_FUNC_REALLOC_IF(
- [AC_DEFINE([HAVE_REALLOC_GNU], [1],
- [Define to 1 if your system has a GNU libc compatible 'realloc'
- function, and to 0 otherwise.])],
- [AC_DEFINE([HAVE_REALLOC_GNU], [0])
- REPLACE_REALLOC=1
- ])
+ AC_REQUIRE([gl_FUNC_REALLOC_POSIX])
+ if test $REPLACE_REALLOC_FOR_REALLOC_GNU = 0; then
+ _AC_FUNC_REALLOC_IF([], [REPLACE_REALLOC_FOR_REALLOC_GNU=1])
+ fi
])# gl_FUNC_REALLOC_GNU
# gl_FUNC_REALLOC_POSIX
# ---------------------
# Test whether 'realloc' is POSIX compliant (sets errno to ENOMEM when it
-# fails), and replace realloc if it is not.
+# fails, and doesn't mess up with ptrdiff_t overflow),
+# and replace realloc if it is not.
AC_DEFUN([gl_FUNC_REALLOC_POSIX],
[
AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
- AC_REQUIRE([gl_CHECK_MALLOC_POSIX])
- if test $gl_cv_func_malloc_posix = yes; then
- AC_DEFINE([HAVE_REALLOC_POSIX], [1],
- [Define if the 'realloc' function is POSIX compliant.])
- else
- REPLACE_REALLOC=1
+ AC_REQUIRE([gl_FUNC_MALLOC_POSIX])
+ if test $REPLACE_MALLOC_FOR_MALLOC_POSIX = 1; then
+ REPLACE_REALLOC_FOR_REALLOC_POSIX=1
fi
])
diff --git a/gnulib/import/m4/rename.m4 b/gnulib/import/m4/rename.m4
index 8a95b8aee97..9f1a56543d6 100644
--- a/gnulib/import/m4/rename.m4
+++ b/gnulib/import/m4/rename.m4
@@ -1,6 +1,6 @@
# serial 33
-# Copyright (C) 2001, 2003, 2005-2006, 2009-2021 Free Software Foundation, Inc.
+# Copyright (C) 2001, 2003, 2005-2006, 2009-2022 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.
diff --git a/gnulib/import/m4/rewinddir.m4 b/gnulib/import/m4/rewinddir.m4
index ed25456bedd..87c050f62bd 100644
--- a/gnulib/import/m4/rewinddir.m4
+++ b/gnulib/import/m4/rewinddir.m4
@@ -1,5 +1,5 @@
# rewinddir.m4 serial 1
-dnl Copyright (C) 2011-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2011-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/rmdir.m4 b/gnulib/import/m4/rmdir.m4
index 82b9cccf2eb..54880278d6b 100644
--- a/gnulib/import/m4/rmdir.m4
+++ b/gnulib/import/m4/rmdir.m4
@@ -1,5 +1,5 @@
# rmdir.m4 serial 18
-dnl Copyright (C) 2002, 2005, 2009-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2002, 2005, 2009-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/save-cwd.m4 b/gnulib/import/m4/save-cwd.m4
index 74cfe96f435..90073eeb4e7 100644
--- a/gnulib/import/m4/save-cwd.m4
+++ b/gnulib/import/m4/save-cwd.m4
@@ -1,5 +1,5 @@
# serial 10
-dnl Copyright (C) 2002-2006, 2009-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2002-2006, 2009-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/select.m4 b/gnulib/import/m4/select.m4
index c7409d2041d..163f8fbf7f3 100644
--- a/gnulib/import/m4/select.m4
+++ b/gnulib/import/m4/select.m4
@@ -1,12 +1,12 @@
-# select.m4 serial 12
-dnl Copyright (C) 2009-2021 Free Software Foundation, Inc.
+# select.m4 serial 13
+dnl Copyright (C) 2009-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
AC_DEFUN([gl_FUNC_SELECT],
[
- AC_REQUIRE([gl_HEADER_SYS_SELECT])
+ AC_REQUIRE([gl_SYS_SELECT_H])
AC_REQUIRE([AC_C_RESTRICT])
AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
AC_REQUIRE([gl_SOCKETS])
diff --git a/gnulib/import/m4/setenv.m4 b/gnulib/import/m4/setenv.m4
index f79a2785095..2000039ab56 100644
--- a/gnulib/import/m4/setenv.m4
+++ b/gnulib/import/m4/setenv.m4
@@ -1,5 +1,5 @@
# setenv.m4 serial 30
-dnl Copyright (C) 2001-2004, 2006-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2001-2004, 2006-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/setlocale_null.m4 b/gnulib/import/m4/setlocale_null.m4
index c486ca84055..09ea50eafb8 100644
--- a/gnulib/import/m4/setlocale_null.m4
+++ b/gnulib/import/m4/setlocale_null.m4
@@ -1,5 +1,5 @@
-# setlocale_null.m4 serial 4
-dnl Copyright (C) 2019-2021 Free Software Foundation, Inc.
+# setlocale_null.m4 serial 5
+dnl Copyright (C) 2019-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
@@ -14,7 +14,7 @@ AC_DEFUN([gl_FUNC_SETLOCALE_NULL],
[gl_cv_func_setlocale_null_all_mtsafe],
[case "$host_os" in
# Guess no on musl libc, macOS, FreeBSD, NetBSD, OpenBSD, AIX, Haiku, Cygwin.
- *-musl* | darwin* | freebsd* | netbsd* | openbsd* | aix* | haiku* | cygwin*)
+ *-musl* | darwin* | freebsd* | midnightbsd* | netbsd* | openbsd* | aix* | haiku* | cygwin*)
gl_cv_func_setlocale_null_all_mtsafe=no ;;
# Guess yes on glibc, HP-UX, IRIX, Solaris, native Windows.
*-gnu* | gnu* | hpux* | irix* | solaris* | mingw*)
@@ -48,7 +48,7 @@ AC_DEFUN([gl_FUNC_SETLOCALE_NULL],
openbsd* | aix*)
gl_cv_func_setlocale_null_one_mtsafe=no ;;
# Guess yes on glibc, musl libc, macOS, FreeBSD, NetBSD, HP-UX, IRIX, Solaris, Haiku, Cygwin, native Windows.
- *-gnu* | gnu* | *-musl* | darwin* | freebsd* | netbsd* | hpux* | irix* | solaris* | haiku* | cygwin* | mingw*)
+ *-gnu* | gnu* | *-musl* | darwin* | freebsd* | midnightbsd* | netbsd* | hpux* | irix* | solaris* | haiku* | cygwin* | mingw*)
gl_cv_func_setlocale_null_one_mtsafe=yes ;;
# If we don't know, obey --enable-cross-guesses.
*)
diff --git a/gnulib/import/m4/signal_h.m4 b/gnulib/import/m4/signal_h.m4
index ff9f0251fd9..4c05c6274f3 100644
--- a/gnulib/import/m4/signal_h.m4
+++ b/gnulib/import/m4/signal_h.m4
@@ -1,10 +1,10 @@
-# signal_h.m4 serial 19
-dnl Copyright (C) 2007-2021 Free Software Foundation, Inc.
+# signal_h.m4 serial 22
+dnl Copyright (C) 2007-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
-AC_DEFUN([gl_SIGNAL_H],
+AC_DEFUN_ONCE([gl_SIGNAL_H],
[
AC_REQUIRE([gl_SIGNAL_H_DEFAULTS])
AC_REQUIRE([gl_CHECK_TYPE_SIGSET_T])
@@ -52,22 +52,37 @@ AC_DEFUN([gl_CHECK_TYPE_SIGSET_T],
fi
])
+# gl_SIGNAL_MODULE_INDICATOR([modulename])
+# sets the shell variable that indicates the presence of the given module
+# to a C preprocessor expression that will evaluate to 1.
+# This macro invocation must not occur in macros that are AC_REQUIREd.
AC_DEFUN([gl_SIGNAL_MODULE_INDICATOR],
[
- dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
- AC_REQUIRE([gl_SIGNAL_H_DEFAULTS])
+ dnl Ensure to expand the default settings once only.
+ gl_SIGNAL_H_REQUIRE_DEFAULTS
gl_MODULE_INDICATOR_SET_VARIABLE([$1])
dnl Define it also as a C macro, for the benefit of the unit tests.
gl_MODULE_INDICATOR_FOR_TESTS([$1])
])
+# Initializes the default values for AC_SUBSTed shell variables.
+# This macro must not be AC_REQUIREd. It must only be invoked, and only
+# outside of macros or in macros that are not AC_REQUIREd.
+AC_DEFUN([gl_SIGNAL_H_REQUIRE_DEFAULTS],
+[
+ m4_defun(GL_MODULE_INDICATOR_PREFIX[_SIGNAL_H_MODULE_INDICATOR_DEFAULTS], [
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PTHREAD_SIGMASK])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RAISE])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SIGNAL_H_SIGPIPE])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SIGPROCMASK])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SIGACTION])
+ ])
+ m4_require(GL_MODULE_INDICATOR_PREFIX[_SIGNAL_H_MODULE_INDICATOR_DEFAULTS])
+ AC_REQUIRE([gl_SIGNAL_H_DEFAULTS])
+])
+
AC_DEFUN([gl_SIGNAL_H_DEFAULTS],
[
- GNULIB_PTHREAD_SIGMASK=0; AC_SUBST([GNULIB_PTHREAD_SIGMASK])
- GNULIB_RAISE=0; AC_SUBST([GNULIB_RAISE])
- GNULIB_SIGNAL_H_SIGPIPE=0; AC_SUBST([GNULIB_SIGNAL_H_SIGPIPE])
- GNULIB_SIGPROCMASK=0; AC_SUBST([GNULIB_SIGPROCMASK])
- GNULIB_SIGACTION=0; AC_SUBST([GNULIB_SIGACTION])
dnl Assume proper GNU behavior unless another module says otherwise.
HAVE_POSIX_SIGNALBLOCKING=1; AC_SUBST([HAVE_POSIX_SIGNALBLOCKING])
HAVE_PTHREAD_SIGMASK=1; AC_SUBST([HAVE_PTHREAD_SIGMASK])
diff --git a/gnulib/import/m4/socketlib.m4 b/gnulib/import/m4/socketlib.m4
index 0f8a0829c7b..b8bd0afa5ad 100644
--- a/gnulib/import/m4/socketlib.m4
+++ b/gnulib/import/m4/socketlib.m4
@@ -1,5 +1,5 @@
# socketlib.m4 serial 3
-dnl Copyright (C) 2008-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2008-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/sockets.m4 b/gnulib/import/m4/sockets.m4
index 02b43b6e7fe..aa04acc3e7b 100644
--- a/gnulib/import/m4/sockets.m4
+++ b/gnulib/import/m4/sockets.m4
@@ -1,5 +1,5 @@
# sockets.m4 serial 7
-dnl Copyright (C) 2008-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2008-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/socklen.m4 b/gnulib/import/m4/socklen.m4
index eca1d1b9462..1390ac41bda 100644
--- a/gnulib/import/m4/socklen.m4
+++ b/gnulib/import/m4/socklen.m4
@@ -1,5 +1,5 @@
# socklen.m4 serial 11
-dnl Copyright (C) 2005-2007, 2009-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2005-2007, 2009-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/sockpfaf.m4 b/gnulib/import/m4/sockpfaf.m4
index edae5d85c94..b1c4068aca3 100644
--- a/gnulib/import/m4/sockpfaf.m4
+++ b/gnulib/import/m4/sockpfaf.m4
@@ -1,5 +1,5 @@
-# sockpfaf.m4 serial 9
-dnl Copyright (C) 2004, 2006, 2009-2021 Free Software Foundation, Inc.
+# sockpfaf.m4 serial 10
+dnl Copyright (C) 2004, 2006, 2009-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
@@ -13,7 +13,7 @@ dnl From Bruno Haible.
AC_DEFUN([gl_SOCKET_FAMILIES],
[
- AC_REQUIRE([gl_HEADER_SYS_SOCKET])
+ AC_REQUIRE([gl_SYS_SOCKET_H])
AC_CHECK_HEADERS_ONCE([netinet/in.h])
AC_CACHE_CHECK([for IPv4 sockets],
@@ -60,7 +60,7 @@ AC_DEFUN([gl_SOCKET_FAMILIES],
AC_DEFUN([gl_SOCKET_FAMILY_UNIX],
[
- AC_REQUIRE([gl_HEADER_SYS_SOCKET])
+ AC_REQUIRE([gl_SYS_SOCKET_H])
AC_CHECK_HEADERS_ONCE([sys/un.h])
AC_CACHE_CHECK([for UNIX domain sockets],
diff --git a/gnulib/import/m4/ssize_t.m4 b/gnulib/import/m4/ssize_t.m4
index f0ed509fcc5..03b2b895b9b 100644
--- a/gnulib/import/m4/ssize_t.m4
+++ b/gnulib/import/m4/ssize_t.m4
@@ -1,5 +1,5 @@
# ssize_t.m4 serial 5 (gettext-0.18.2)
-dnl Copyright (C) 2001-2003, 2006, 2010-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2001-2003, 2006, 2010-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/stat-time.m4 b/gnulib/import/m4/stat-time.m4
index df1c2a7453a..342857d39e9 100644
--- a/gnulib/import/m4/stat-time.m4
+++ b/gnulib/import/m4/stat-time.m4
@@ -1,6 +1,6 @@
# Checks for stat-related time functions.
-# Copyright (C) 1998-1999, 2001, 2003, 2005-2007, 2009-2021 Free Software
+# Copyright (C) 1998-1999, 2001, 2003, 2005-2007, 2009-2022 Free Software
# Foundation, Inc.
# This file is free software; the Free Software Foundation
diff --git a/gnulib/import/m4/stat.m4 b/gnulib/import/m4/stat.m4
index 08cdbea629a..ab7c6b31edd 100644
--- a/gnulib/import/m4/stat.m4
+++ b/gnulib/import/m4/stat.m4
@@ -1,6 +1,6 @@
-# serial 17
+# serial 18
-# Copyright (C) 2009-2021 Free Software Foundation, Inc.
+# Copyright (C) 2009-2022 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -69,7 +69,7 @@ AC_DEFUN([gl_FUNC_STAT],
# Prerequisites of lib/stat.c and lib/stat-w32.c.
AC_DEFUN([gl_PREREQ_STAT], [
- AC_REQUIRE([gl_HEADER_SYS_STAT_H])
+ AC_REQUIRE([gl_SYS_STAT_H])
AC_REQUIRE([gl_PREREQ_STAT_W32])
:
])
diff --git a/gnulib/import/m4/std-gnu11.m4 b/gnulib/import/m4/std-gnu11.m4
index 7b1a042af1b..5ca18607fe4 100644
--- a/gnulib/import/m4/std-gnu11.m4
+++ b/gnulib/import/m4/std-gnu11.m4
@@ -9,7 +9,7 @@
m4_version_prereq([2.70], [], [
-# Copyright (C) 2001-2021 Free Software Foundation, Inc.
+# Copyright (C) 2001-2022 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
diff --git a/gnulib/import/m4/stdalign.m4 b/gnulib/import/m4/stdalign.m4
index 8dcb634d55b..78577cb2acc 100644
--- a/gnulib/import/m4/stdalign.m4
+++ b/gnulib/import/m4/stdalign.m4
@@ -1,6 +1,6 @@
# Check for stdalign.h that conforms to C11.
-dnl Copyright 2011-2021 Free Software Foundation, Inc.
+dnl Copyright 2011-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
@@ -13,7 +13,8 @@ AC_DEFUN([gl_STDALIGN_H],
[gl_cv_header_working_stdalign_h],
[AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM(
- [[#include <stdalign.h>
+ [[#include <stdint.h>
+ #include <stdalign.h>
#include <stddef.h>
/* Test that alignof yields a result consistent with offsetof.
@@ -32,6 +33,7 @@ AC_DEFUN([gl_STDALIGN_H],
/* Test _Alignas only on platforms where gnulib can help. */
#if \
((defined __cplusplus && 201103 <= __cplusplus) \
+ || (__TINYC__ && defined __attribute__) \
|| (defined __APPLE__ && defined __MACH__ \
? 4 < __GNUC__ + (1 <= __GNUC_MINOR__) \
: __GNUC__) \
@@ -47,11 +49,8 @@ AC_DEFUN([gl_STDALIGN_H],
[gl_cv_header_working_stdalign_h=no])])
if test $gl_cv_header_working_stdalign_h = yes; then
- STDALIGN_H=''
+ GL_GENERATE_STDALIGN_H=false
else
- STDALIGN_H='stdalign.h'
+ GL_GENERATE_STDALIGN_H=true
fi
-
- AC_SUBST([STDALIGN_H])
- AM_CONDITIONAL([GL_GENERATE_STDALIGN_H], [test -n "$STDALIGN_H"])
])
diff --git a/gnulib/import/m4/stdbool.m4 b/gnulib/import/m4/stdbool.m4
index 3169779d43c..3e6c4005465 100644
--- a/gnulib/import/m4/stdbool.m4
+++ b/gnulib/import/m4/stdbool.m4
@@ -1,15 +1,15 @@
# Check for stdbool.h that conforms to C99.
-dnl Copyright (C) 2002-2006, 2009-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2002-2006, 2009-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
-#serial 8
+#serial 9
# Prepare for substituting <stdbool.h> if it is not supported.
-AC_DEFUN([AM_STDBOOL_H],
+AC_DEFUN([gl_STDBOOL_H],
[
AC_REQUIRE([AC_CHECK_HEADER_STDBOOL])
AC_REQUIRE([AC_CANONICAL_HOST])
@@ -22,20 +22,18 @@ AC_DEFUN([AM_STDBOOL_H],
case "$host_os" in
solaris*)
if test -z "$GCC"; then
- STDBOOL_H='stdbool.h'
+ GL_GENERATE_STDBOOL_H=true
else
- STDBOOL_H=''
+ GL_GENERATE_STDBOOL_H=false
fi
;;
*)
- STDBOOL_H=''
+ GL_GENERATE_STDBOOL_H=false
;;
esac
else
- STDBOOL_H='stdbool.h'
+ GL_GENERATE_STDBOOL_H=true
fi
- AC_SUBST([STDBOOL_H])
- AM_CONDITIONAL([GL_GENERATE_STDBOOL_H], [test -n "$STDBOOL_H"])
if test "$ac_cv_type__Bool" = yes; then
HAVE__BOOL=1
@@ -45,9 +43,6 @@ AC_DEFUN([AM_STDBOOL_H],
AC_SUBST([HAVE__BOOL])
])
-# AM_STDBOOL_H will be renamed to gl_STDBOOL_H in the future.
-AC_DEFUN([gl_STDBOOL_H], [AM_STDBOOL_H])
-
# This version of the macro is needed in autoconf <= 2.68.
AC_DEFUN([AC_CHECK_HEADER_STDBOOL],
diff --git a/gnulib/import/m4/stddef_h.m4 b/gnulib/import/m4/stddef_h.m4
index cd666c4a58c..abfd2030387 100644
--- a/gnulib/import/m4/stddef_h.m4
+++ b/gnulib/import/m4/stddef_h.m4
@@ -1,12 +1,12 @@
-# stddef_h.m4 serial 9
-dnl Copyright (C) 2009-2021 Free Software Foundation, Inc.
+# stddef_h.m4 serial 12
+dnl Copyright (C) 2009-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl A placeholder for <stddef.h>, for platforms that have issues.
-AC_DEFUN([gl_STDDEF_H],
+AC_DEFUN_ONCE([gl_STDDEF_H],
[
AC_REQUIRE([gl_STDDEF_H_DEFAULTS])
AC_REQUIRE([gt_TYPE_WCHAR_T])
@@ -14,7 +14,7 @@ AC_DEFUN([gl_STDDEF_H],
dnl Persuade OpenBSD <stddef.h> to declare max_align_t.
AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
- STDDEF_H=
+ GL_GENERATE_STDDEF_H=false
dnl Test whether the type max_align_t exists and whether its alignment
dnl "is as great as is supported by the implementation in all contexts".
@@ -41,12 +41,12 @@ AC_DEFUN([gl_STDDEF_H],
])
if test $gl_cv_type_max_align_t = no; then
HAVE_MAX_ALIGN_T=0
- STDDEF_H=stddef.h
+ GL_GENERATE_STDDEF_H=true
fi
if test $gt_cv_c_wchar_t = no; then
HAVE_WCHAR_T=0
- STDDEF_H=stddef.h
+ GL_GENERATE_STDDEF_H=true
fi
AC_CACHE_CHECK([whether NULL can be used in arbitrary expressions],
@@ -58,23 +58,36 @@ AC_DEFUN([gl_STDDEF_H],
[gl_cv_decl_null_works=no])])
if test $gl_cv_decl_null_works = no; then
REPLACE_NULL=1
- STDDEF_H=stddef.h
+ GL_GENERATE_STDDEF_H=true
fi
- AC_SUBST([STDDEF_H])
- AM_CONDITIONAL([GL_GENERATE_STDDEF_H], [test -n "$STDDEF_H"])
- if test -n "$STDDEF_H"; then
+ if $GL_GENERATE_STDDEF_H; then
gl_NEXT_HEADERS([stddef.h])
fi
])
+# gl_STDDEF_MODULE_INDICATOR([modulename])
+# sets the shell variable that indicates the presence of the given module
+# to a C preprocessor expression that will evaluate to 1.
+# This macro invocation must not occur in macros that are AC_REQUIREd.
AC_DEFUN([gl_STDDEF_MODULE_INDICATOR],
[
- dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
- AC_REQUIRE([gl_STDDEF_H_DEFAULTS])
+ dnl Ensure to expand the default settings once only.
+ gl_STDDEF_H_REQUIRE_DEFAULTS
gl_MODULE_INDICATOR_SET_VARIABLE([$1])
])
+# Initializes the default values for AC_SUBSTed shell variables.
+# This macro must not be AC_REQUIREd. It must only be invoked, and only
+# outside of macros or in macros that are not AC_REQUIREd.
+AC_DEFUN([gl_STDDEF_H_REQUIRE_DEFAULTS],
+[
+ m4_defun(GL_MODULE_INDICATOR_PREFIX[_STDDEF_H_MODULE_INDICATOR_DEFAULTS], [
+ ])
+ m4_require(GL_MODULE_INDICATOR_PREFIX[_STDDEF_H_MODULE_INDICATOR_DEFAULTS])
+ AC_REQUIRE([gl_STDDEF_H_DEFAULTS])
+])
+
AC_DEFUN([gl_STDDEF_H_DEFAULTS],
[
dnl Assume proper GNU behavior unless another module says otherwise.
diff --git a/gnulib/import/m4/stdint.m4 b/gnulib/import/m4/stdint.m4
index a785b44ed17..c3f0894277b 100644
--- a/gnulib/import/m4/stdint.m4
+++ b/gnulib/import/m4/stdint.m4
@@ -1,5 +1,5 @@
-# stdint.m4 serial 58
-dnl Copyright (C) 2001-2021 Free Software Foundation, Inc.
+# stdint.m4 serial 61
+dnl Copyright (C) 2001-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
@@ -170,7 +170,7 @@ struct s {
PTRDIFF_MIN == TYPE_MINIMUM (ptrdiff_t)
&& PTRDIFF_MAX == TYPE_MAXIMUM (ptrdiff_t)
? 1 : -1;
- /* Detect bug in FreeBSD 6.0 / ia64. */
+ /* Detect bug in FreeBSD 6.0/ia64 and FreeBSD 13.0/arm64. */
int check_SIG_ATOMIC:
SIG_ATOMIC_MIN == TYPE_MINIMUM (sig_atomic_t)
&& SIG_ATOMIC_MAX == TYPE_MAXIMUM (sig_atomic_t)
@@ -296,7 +296,7 @@ static const char *macro_values[] =
HAVE_C99_STDINT_H=0
HAVE_SYS_BITYPES_H=0
HAVE_SYS_INTTYPES_H=0
- STDINT_H=stdint.h
+ GL_GENERATE_STDINT_H=true
case "$gl_cv_header_working_stdint_h" in
*yes)
HAVE_C99_STDINT_H=1
@@ -341,7 +341,7 @@ int32_t i32 = INT32_C (0x7fffffff);
]])],
[gl_cv_header_stdint_width=yes])])
if test "$gl_cv_header_stdint_width" = yes; then
- STDINT_H=
+ GL_GENERATE_STDINT_H=false
fi
;;
*)
@@ -364,8 +364,6 @@ int32_t i32 = INT32_C (0x7fffffff);
AC_SUBST([HAVE_C99_STDINT_H])
AC_SUBST([HAVE_SYS_BITYPES_H])
AC_SUBST([HAVE_SYS_INTTYPES_H])
- AC_SUBST([STDINT_H])
- AM_CONDITIONAL([GL_GENERATE_STDINT_H], [test -n "$STDINT_H"])
])
dnl gl_STDINT_BITSIZEOF(TYPES, INCLUDES)
@@ -527,7 +525,7 @@ AC_DEFUN([gl_STDINT_TYPE_PROPERTIES],
dnl requirement that wint_t is "unchanged by default argument promotions".
dnl In this case gnulib's <wchar.h> and <wctype.h> override wint_t.
dnl Set the variable BITSIZEOF_WINT_T accordingly.
- if test $GNULIB_OVERRIDES_WINT_T = 1; then
+ if test $GNULIBHEADERS_OVERRIDE_WINT_T = 1; then
BITSIZEOF_WINT_T=32
fi
])
diff --git a/gnulib/import/m4/stdio_h.m4 b/gnulib/import/m4/stdio_h.m4
index 4c3f24accaa..42e96071f8b 100644
--- a/gnulib/import/m4/stdio_h.m4
+++ b/gnulib/import/m4/stdio_h.m4
@@ -1,11 +1,12 @@
-# stdio_h.m4 serial 52
-dnl Copyright (C) 2007-2021 Free Software Foundation, Inc.
+# stdio_h.m4 serial 59
+dnl Copyright (C) 2007-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
-AC_DEFUN([gl_STDIO_H],
+AC_DEFUN_ONCE([gl_STDIO_H],
[
+ AC_REQUIRE([gl_STDIO_H_DEFAULTS])
AH_VERBATIM([MINGW_ANSI_STDIO],
[/* Use GNU style printf and scanf. */
#ifndef __USE_MINGW_ANSI_STDIO
@@ -13,7 +14,6 @@ AC_DEFUN([gl_STDIO_H],
#endif
])
AC_DEFINE([__USE_MINGW_ANSI_STDIO])
- AC_REQUIRE([gl_STDIO_H_DEFAULTS])
gl_NEXT_HEADERS([stdio.h])
dnl Determine whether __USE_MINGW_ANSI_STDIO makes printf and
@@ -40,64 +40,32 @@ AC_DEFUN([gl_STDIO_H],
attribute "__gnu_printf__" instead of "__printf__"])
fi
- dnl No need to create extra modules for these functions. Everyone who uses
- dnl <stdio.h> likely needs them.
- GNULIB_FSCANF=1
- gl_MODULE_INDICATOR([fscanf])
- GNULIB_SCANF=1
- gl_MODULE_INDICATOR([scanf])
- GNULIB_FGETC=1
- GNULIB_GETC=1
- GNULIB_GETCHAR=1
- GNULIB_FGETS=1
- GNULIB_FREAD=1
- dnl This ifdef is necessary to avoid an error "missing file lib/stdio-read.c"
- dnl "expected source file, required through AC_LIBSOURCES, not found". It is
- dnl also an optimization, to avoid performing a configure check whose result
- dnl is not used. But it does not make the test of GNULIB_STDIO_H_NONBLOCKING
- dnl or GNULIB_NONBLOCKING redundant.
+ dnl This ifdef is an optimization, to avoid performing a configure check whose
+ dnl result is not used. But it does not make the test of
+ dnl GNULIB_STDIO_H_NONBLOCKING or GNULIB_NONBLOCKING redundant.
m4_ifdef([gl_NONBLOCKING_IO], [
gl_NONBLOCKING_IO
if test $gl_cv_have_nonblocking != yes; then
REPLACE_STDIO_READ_FUNCS=1
- AC_LIBOBJ([stdio-read])
fi
])
- dnl No need to create extra modules for these functions. Everyone who uses
- dnl <stdio.h> likely needs them.
- GNULIB_FPRINTF=1
- GNULIB_PRINTF=1
- GNULIB_VFPRINTF=1
- GNULIB_VPRINTF=1
- GNULIB_FPUTC=1
- GNULIB_PUTC=1
- GNULIB_PUTCHAR=1
- GNULIB_FPUTS=1
- GNULIB_PUTS=1
- GNULIB_FWRITE=1
- dnl This ifdef is necessary to avoid an error "missing file lib/stdio-write.c"
- dnl "expected source file, required through AC_LIBSOURCES, not found". It is
- dnl also an optimization, to avoid performing a configure check whose result
- dnl is not used. But it does not make the test of GNULIB_STDIO_H_SIGPIPE or
- dnl GNULIB_SIGPIPE redundant.
+ dnl This ifdef is an optimization, to avoid performing a configure check whose
+ dnl result is not used. But it does not make the test of
+ dnl GNULIB_STDIO_H_SIGPIPE or GNULIB_SIGPIPE redundant.
m4_ifdef([gl_SIGNAL_SIGPIPE], [
gl_SIGNAL_SIGPIPE
if test $gl_cv_header_signal_h_SIGPIPE != yes; then
REPLACE_STDIO_WRITE_FUNCS=1
- AC_LIBOBJ([stdio-write])
fi
])
- dnl This ifdef is necessary to avoid an error "missing file lib/stdio-write.c"
- dnl "expected source file, required through AC_LIBSOURCES, not found". It is
- dnl also an optimization, to avoid performing a configure check whose result
- dnl is not used. But it does not make the test of GNULIB_STDIO_H_NONBLOCKING
- dnl or GNULIB_NONBLOCKING redundant.
+ dnl This ifdef is an optimization, to avoid performing a configure check whose
+ dnl result is not used. But it does not make the test of
+ dnl GNULIB_STDIO_H_NONBLOCKING or GNULIB_NONBLOCKING redundant.
m4_ifdef([gl_NONBLOCKING_IO], [
gl_NONBLOCKING_IO
if test $gl_cv_have_nonblocking != yes; then
REPLACE_STDIO_WRITE_FUNCS=1
- AC_LIBOBJ([stdio-write])
fi
])
@@ -116,77 +84,93 @@ AC_DEFUN([gl_STDIO_H],
fi
])
+# gl_STDIO_MODULE_INDICATOR([modulename])
+# sets the shell variable that indicates the presence of the given module
+# to a C preprocessor expression that will evaluate to 1.
+# This macro invocation must not occur in macros that are AC_REQUIREd.
AC_DEFUN([gl_STDIO_MODULE_INDICATOR],
[
- dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
- AC_REQUIRE([gl_STDIO_H_DEFAULTS])
+ dnl Ensure to expand the default settings once only.
+ gl_STDIO_H_REQUIRE_DEFAULTS
gl_MODULE_INDICATOR_SET_VARIABLE([$1])
dnl Define it also as a C macro, for the benefit of the unit tests.
gl_MODULE_INDICATOR_FOR_TESTS([$1])
])
+# Initializes the default values for AC_SUBSTed shell variables.
+# This macro must not be AC_REQUIREd. It must only be invoked, and only
+# outside of macros or in macros that are not AC_REQUIREd.
+AC_DEFUN([gl_STDIO_H_REQUIRE_DEFAULTS],
+[
+ m4_defun(GL_MODULE_INDICATOR_PREFIX[_STDIO_H_MODULE_INDICATOR_DEFAULTS], [
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_DPRINTF])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FCLOSE])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FDOPEN])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FFLUSH])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FGETC])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FGETS])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FOPEN])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FOPEN_GNU])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FPRINTF])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FPRINTF_POSIX])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FPURGE])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FPUTC])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FPUTS])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FREAD])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FREOPEN])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FSCANF])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FSEEK])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FSEEKO])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FTELL])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FTELLO])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FWRITE])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETC])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETCHAR])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETDELIM])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETLINE])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_OBSTACK_PRINTF])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_OBSTACK_PRINTF_POSIX])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PCLOSE])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PERROR])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POPEN])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PRINTF])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PRINTF_POSIX])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PUTC])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PUTCHAR])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PUTS])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REMOVE])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RENAME])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RENAMEAT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SCANF])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SNPRINTF])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SPRINTF_POSIX])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STDIO_H_NONBLOCKING])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STDIO_H_SIGPIPE])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TMPFILE])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VASPRINTF])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VFSCANF])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VSCANF])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VDPRINTF])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VFPRINTF])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VFPRINTF_POSIX])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VPRINTF])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VPRINTF_POSIX])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VSNPRINTF])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VSPRINTF_POSIX])
+ dnl Support Microsoft deprecated alias function names by default.
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_FCLOSEALL], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_FDOPEN], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_FILENO], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_GETW], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_PUTW], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_TEMPNAM], [1])
+ ])
+ m4_require(GL_MODULE_INDICATOR_PREFIX[_STDIO_H_MODULE_INDICATOR_DEFAULTS])
+ AC_REQUIRE([gl_STDIO_H_DEFAULTS])
+])
+
AC_DEFUN([gl_STDIO_H_DEFAULTS],
[
- GNULIB_DPRINTF=0; AC_SUBST([GNULIB_DPRINTF])
- GNULIB_FCLOSE=0; AC_SUBST([GNULIB_FCLOSE])
- GNULIB_FDOPEN=0; AC_SUBST([GNULIB_FDOPEN])
- GNULIB_FFLUSH=0; AC_SUBST([GNULIB_FFLUSH])
- GNULIB_FGETC=0; AC_SUBST([GNULIB_FGETC])
- GNULIB_FGETS=0; AC_SUBST([GNULIB_FGETS])
- GNULIB_FOPEN=0; AC_SUBST([GNULIB_FOPEN])
- GNULIB_FPRINTF=0; AC_SUBST([GNULIB_FPRINTF])
- GNULIB_FPRINTF_POSIX=0; AC_SUBST([GNULIB_FPRINTF_POSIX])
- GNULIB_FPURGE=0; AC_SUBST([GNULIB_FPURGE])
- GNULIB_FPUTC=0; AC_SUBST([GNULIB_FPUTC])
- GNULIB_FPUTS=0; AC_SUBST([GNULIB_FPUTS])
- GNULIB_FREAD=0; AC_SUBST([GNULIB_FREAD])
- GNULIB_FREOPEN=0; AC_SUBST([GNULIB_FREOPEN])
- GNULIB_FSCANF=0; AC_SUBST([GNULIB_FSCANF])
- GNULIB_FSEEK=0; AC_SUBST([GNULIB_FSEEK])
- GNULIB_FSEEKO=0; AC_SUBST([GNULIB_FSEEKO])
- GNULIB_FTELL=0; AC_SUBST([GNULIB_FTELL])
- GNULIB_FTELLO=0; AC_SUBST([GNULIB_FTELLO])
- GNULIB_FWRITE=0; AC_SUBST([GNULIB_FWRITE])
- GNULIB_GETC=0; AC_SUBST([GNULIB_GETC])
- GNULIB_GETCHAR=0; AC_SUBST([GNULIB_GETCHAR])
- GNULIB_GETDELIM=0; AC_SUBST([GNULIB_GETDELIM])
- GNULIB_GETLINE=0; AC_SUBST([GNULIB_GETLINE])
- GNULIB_OBSTACK_PRINTF=0; AC_SUBST([GNULIB_OBSTACK_PRINTF])
- GNULIB_OBSTACK_PRINTF_POSIX=0; AC_SUBST([GNULIB_OBSTACK_PRINTF_POSIX])
- GNULIB_PCLOSE=0; AC_SUBST([GNULIB_PCLOSE])
- GNULIB_PERROR=0; AC_SUBST([GNULIB_PERROR])
- GNULIB_POPEN=0; AC_SUBST([GNULIB_POPEN])
- GNULIB_PRINTF=0; AC_SUBST([GNULIB_PRINTF])
- GNULIB_PRINTF_POSIX=0; AC_SUBST([GNULIB_PRINTF_POSIX])
- GNULIB_PUTC=0; AC_SUBST([GNULIB_PUTC])
- GNULIB_PUTCHAR=0; AC_SUBST([GNULIB_PUTCHAR])
- GNULIB_PUTS=0; AC_SUBST([GNULIB_PUTS])
- GNULIB_REMOVE=0; AC_SUBST([GNULIB_REMOVE])
- GNULIB_RENAME=0; AC_SUBST([GNULIB_RENAME])
- GNULIB_RENAMEAT=0; AC_SUBST([GNULIB_RENAMEAT])
- GNULIB_SCANF=0; AC_SUBST([GNULIB_SCANF])
- GNULIB_SNPRINTF=0; AC_SUBST([GNULIB_SNPRINTF])
- GNULIB_SPRINTF_POSIX=0; AC_SUBST([GNULIB_SPRINTF_POSIX])
- GNULIB_STDIO_H_NONBLOCKING=0; AC_SUBST([GNULIB_STDIO_H_NONBLOCKING])
- GNULIB_STDIO_H_SIGPIPE=0; AC_SUBST([GNULIB_STDIO_H_SIGPIPE])
- GNULIB_TMPFILE=0; AC_SUBST([GNULIB_TMPFILE])
- GNULIB_VASPRINTF=0; AC_SUBST([GNULIB_VASPRINTF])
- GNULIB_VFSCANF=0; AC_SUBST([GNULIB_VFSCANF])
- GNULIB_VSCANF=0; AC_SUBST([GNULIB_VSCANF])
- GNULIB_VDPRINTF=0; AC_SUBST([GNULIB_VDPRINTF])
- GNULIB_VFPRINTF=0; AC_SUBST([GNULIB_VFPRINTF])
- GNULIB_VFPRINTF_POSIX=0; AC_SUBST([GNULIB_VFPRINTF_POSIX])
- GNULIB_VPRINTF=0; AC_SUBST([GNULIB_VPRINTF])
- GNULIB_VPRINTF_POSIX=0; AC_SUBST([GNULIB_VPRINTF_POSIX])
- GNULIB_VSNPRINTF=0; AC_SUBST([GNULIB_VSNPRINTF])
- GNULIB_VSPRINTF_POSIX=0; AC_SUBST([GNULIB_VSPRINTF_POSIX])
- dnl Support Microsoft deprecated alias function names by default.
- GNULIB_MDA_FCLOSEALL=1; AC_SUBST([GNULIB_MDA_FCLOSEALL])
- GNULIB_MDA_FDOPEN=1; AC_SUBST([GNULIB_MDA_FDOPEN])
- GNULIB_MDA_FILENO=1; AC_SUBST([GNULIB_MDA_FILENO])
- GNULIB_MDA_GETW=1; AC_SUBST([GNULIB_MDA_GETW])
- GNULIB_MDA_PUTW=1; AC_SUBST([GNULIB_MDA_PUTW])
- GNULIB_MDA_TEMPNAM=1; AC_SUBST([GNULIB_MDA_TEMPNAM])
dnl Assume proper GNU behavior unless another module says otherwise.
HAVE_DECL_FCLOSEALL=1; AC_SUBST([HAVE_DECL_FCLOSEALL])
HAVE_DECL_FPURGE=1; AC_SUBST([HAVE_DECL_FPURGE])
@@ -210,6 +194,7 @@ AC_DEFUN([gl_STDIO_H_DEFAULTS],
REPLACE_FDOPEN=0; AC_SUBST([REPLACE_FDOPEN])
REPLACE_FFLUSH=0; AC_SUBST([REPLACE_FFLUSH])
REPLACE_FOPEN=0; AC_SUBST([REPLACE_FOPEN])
+ REPLACE_FOPEN_FOR_FOPEN_GNU=0; AC_SUBST([REPLACE_FOPEN_FOR_FOPEN_GNU])
REPLACE_FPRINTF=0; AC_SUBST([REPLACE_FPRINTF])
REPLACE_FPURGE=0; AC_SUBST([REPLACE_FPURGE])
REPLACE_FREOPEN=0; AC_SUBST([REPLACE_FREOPEN])
diff --git a/gnulib/import/m4/stdlib_h.m4 b/gnulib/import/m4/stdlib_h.m4
index 5a02972e05d..9e2096976f3 100644
--- a/gnulib/import/m4/stdlib_h.m4
+++ b/gnulib/import/m4/stdlib_h.m4
@@ -1,10 +1,10 @@
-# stdlib_h.m4 serial 55
-dnl Copyright (C) 2007-2021 Free Software Foundation, Inc.
+# stdlib_h.m4 serial 66
+dnl Copyright (C) 2007-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
-AC_DEFUN([gl_STDLIB_H],
+AC_DEFUN_ONCE([gl_STDLIB_H],
[
AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
gl_NEXT_HEADERS([stdlib.h])
@@ -28,7 +28,7 @@ AC_DEFUN([gl_STDLIB_H],
posix_memalign posix_openpt ptsname ptsname_r qsort_r
random random_r reallocarray realpath rpmatch secure_getenv setenv
setstate setstate_r srandom srandom_r
- strtod strtold strtoll strtoull unlockpt unsetenv])
+ strtod strtol strtold strtoll strtoul strtoull unlockpt unsetenv])
AC_REQUIRE([AC_C_RESTRICT])
@@ -46,61 +46,81 @@ AC_DEFUN([gl_STDLIB_H],
fi
])
+# gl_STDLIB_MODULE_INDICATOR([modulename])
+# sets the shell variable that indicates the presence of the given module
+# to a C preprocessor expression that will evaluate to 1.
+# This macro invocation must not occur in macros that are AC_REQUIREd.
AC_DEFUN([gl_STDLIB_MODULE_INDICATOR],
[
- dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
- AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+ dnl Ensure to expand the default settings once only.
+ gl_STDLIB_H_REQUIRE_DEFAULTS
gl_MODULE_INDICATOR_SET_VARIABLE([$1])
dnl Define it also as a C macro, for the benefit of the unit tests.
gl_MODULE_INDICATOR_FOR_TESTS([$1])
])
+# Initializes the default values for AC_SUBSTed shell variables.
+# This macro must not be AC_REQUIREd. It must only be invoked, and only
+# outside of macros or in macros that are not AC_REQUIREd.
+AC_DEFUN([gl_STDLIB_H_REQUIRE_DEFAULTS],
+[
+ m4_defun(GL_MODULE_INDICATOR_PREFIX[_STDLIB_H_MODULE_INDICATOR_DEFAULTS], [
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB__EXIT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ALIGNED_ALLOC])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ATOLL])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CALLOC_GNU])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CALLOC_POSIX])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CANONICALIZE_FILE_NAME])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FREE_POSIX])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETLOADAVG])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETSUBOPT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GRANTPT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MALLOC_GNU])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MALLOC_POSIX])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBTOWC])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKDTEMP])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKOSTEMP])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKOSTEMPS])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKSTEMP])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKSTEMPS])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POSIX_MEMALIGN])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POSIX_OPENPT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PTSNAME])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PTSNAME_R])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PUTENV])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_QSORT_R])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RANDOM])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RANDOM_R])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REALLOCARRAY])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REALLOC_GNU])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REALLOC_POSIX])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REALPATH])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RPMATCH])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SECURE_GETENV])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SETENV])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOD])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOL])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOLD])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOLL])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOUL])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOULL])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SYSTEM_POSIX])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNLOCKPT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNSETENV])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCTOMB])
+ dnl Support Microsoft deprecated alias function names by default.
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_ECVT], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_FCVT], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_GCVT], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_MKTEMP], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_PUTENV], [1])
+ ])
+ m4_require(GL_MODULE_INDICATOR_PREFIX[_STDLIB_H_MODULE_INDICATOR_DEFAULTS])
+ AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+])
+
AC_DEFUN([gl_STDLIB_H_DEFAULTS],
[
- GNULIB__EXIT=0; AC_SUBST([GNULIB__EXIT])
- GNULIB_ALIGNED_ALLOC=0; AC_SUBST([GNULIB_ALIGNED_ALLOC])
- GNULIB_ATOLL=0; AC_SUBST([GNULIB_ATOLL])
- GNULIB_CALLOC_POSIX=0; AC_SUBST([GNULIB_CALLOC_POSIX])
- GNULIB_CANONICALIZE_FILE_NAME=0; AC_SUBST([GNULIB_CANONICALIZE_FILE_NAME])
- GNULIB_FREE_POSIX=0; AC_SUBST([GNULIB_FREE_POSIX])
- GNULIB_GETLOADAVG=0; AC_SUBST([GNULIB_GETLOADAVG])
- GNULIB_GETSUBOPT=0; AC_SUBST([GNULIB_GETSUBOPT])
- GNULIB_GRANTPT=0; AC_SUBST([GNULIB_GRANTPT])
- GNULIB_MALLOC_POSIX=0; AC_SUBST([GNULIB_MALLOC_POSIX])
- GNULIB_MBTOWC=0; AC_SUBST([GNULIB_MBTOWC])
- GNULIB_MKDTEMP=0; AC_SUBST([GNULIB_MKDTEMP])
- GNULIB_MKOSTEMP=0; AC_SUBST([GNULIB_MKOSTEMP])
- GNULIB_MKOSTEMPS=0; AC_SUBST([GNULIB_MKOSTEMPS])
- GNULIB_MKSTEMP=0; AC_SUBST([GNULIB_MKSTEMP])
- GNULIB_MKSTEMPS=0; AC_SUBST([GNULIB_MKSTEMPS])
- GNULIB_POSIX_MEMALIGN=0;AC_SUBST([GNULIB_POSIX_MEMALIGN])
- GNULIB_POSIX_OPENPT=0; AC_SUBST([GNULIB_POSIX_OPENPT])
- GNULIB_PTSNAME=0; AC_SUBST([GNULIB_PTSNAME])
- GNULIB_PTSNAME_R=0; AC_SUBST([GNULIB_PTSNAME_R])
- GNULIB_PUTENV=0; AC_SUBST([GNULIB_PUTENV])
- GNULIB_QSORT_R=0; AC_SUBST([GNULIB_QSORT_R])
- GNULIB_RANDOM=0; AC_SUBST([GNULIB_RANDOM])
- GNULIB_RANDOM_R=0; AC_SUBST([GNULIB_RANDOM_R])
- GNULIB_REALLOCARRAY=0; AC_SUBST([GNULIB_REALLOCARRAY])
- GNULIB_REALLOC_POSIX=0; AC_SUBST([GNULIB_REALLOC_POSIX])
- GNULIB_REALPATH=0; AC_SUBST([GNULIB_REALPATH])
- GNULIB_RPMATCH=0; AC_SUBST([GNULIB_RPMATCH])
- GNULIB_SECURE_GETENV=0; AC_SUBST([GNULIB_SECURE_GETENV])
- GNULIB_SETENV=0; AC_SUBST([GNULIB_SETENV])
- GNULIB_STRTOD=0; AC_SUBST([GNULIB_STRTOD])
- GNULIB_STRTOLD=0; AC_SUBST([GNULIB_STRTOLD])
- GNULIB_STRTOLL=0; AC_SUBST([GNULIB_STRTOLL])
- GNULIB_STRTOULL=0; AC_SUBST([GNULIB_STRTOULL])
- GNULIB_SYSTEM_POSIX=0; AC_SUBST([GNULIB_SYSTEM_POSIX])
- GNULIB_UNLOCKPT=0; AC_SUBST([GNULIB_UNLOCKPT])
- GNULIB_UNSETENV=0; AC_SUBST([GNULIB_UNSETENV])
- GNULIB_WCTOMB=0; AC_SUBST([GNULIB_WCTOMB])
- dnl Support Microsoft deprecated alias function names by default.
- GNULIB_MDA_ECVT=1; AC_SUBST([GNULIB_MDA_ECVT])
- GNULIB_MDA_FCVT=1; AC_SUBST([GNULIB_MDA_FCVT])
- GNULIB_MDA_GCVT=1; AC_SUBST([GNULIB_MDA_GCVT])
- GNULIB_MDA_MKTEMP=1; AC_SUBST([GNULIB_MDA_MKTEMP])
- GNULIB_MDA_PUTENV=1; AC_SUBST([GNULIB_MDA_PUTENV])
dnl Assume proper GNU behavior unless another module says otherwise.
HAVE__EXIT=1; AC_SUBST([HAVE__EXIT])
HAVE_ALIGNED_ALLOC=1; AC_SUBST([HAVE_ALIGNED_ALLOC])
@@ -137,19 +157,23 @@ AC_DEFUN([gl_STDLIB_H_DEFAULTS],
HAVE_SETSTATE=1; AC_SUBST([HAVE_SETSTATE])
HAVE_DECL_SETSTATE=1; AC_SUBST([HAVE_DECL_SETSTATE])
HAVE_STRTOD=1; AC_SUBST([HAVE_STRTOD])
+ HAVE_STRTOL=1; AC_SUBST([HAVE_STRTOL])
HAVE_STRTOLD=1; AC_SUBST([HAVE_STRTOLD])
HAVE_STRTOLL=1; AC_SUBST([HAVE_STRTOLL])
+ HAVE_STRTOUL=1; AC_SUBST([HAVE_STRTOUL])
HAVE_STRTOULL=1; AC_SUBST([HAVE_STRTOULL])
HAVE_STRUCT_RANDOM_DATA=1; AC_SUBST([HAVE_STRUCT_RANDOM_DATA])
HAVE_SYS_LOADAVG_H=0; AC_SUBST([HAVE_SYS_LOADAVG_H])
HAVE_UNLOCKPT=1; AC_SUBST([HAVE_UNLOCKPT])
HAVE_DECL_UNSETENV=1; AC_SUBST([HAVE_DECL_UNSETENV])
REPLACE_ALIGNED_ALLOC=0; AC_SUBST([REPLACE_ALIGNED_ALLOC])
- REPLACE_CALLOC=0; AC_SUBST([REPLACE_CALLOC])
+ REPLACE_CALLOC_FOR_CALLOC_GNU=0; AC_SUBST([REPLACE_CALLOC_FOR_CALLOC_GNU])
+ REPLACE_CALLOC_FOR_CALLOC_POSIX=0; AC_SUBST([REPLACE_CALLOC_FOR_CALLOC_POSIX])
REPLACE_CANONICALIZE_FILE_NAME=0; AC_SUBST([REPLACE_CANONICALIZE_FILE_NAME])
REPLACE_FREE=0; AC_SUBST([REPLACE_FREE])
REPLACE_INITSTATE=0; AC_SUBST([REPLACE_INITSTATE])
- REPLACE_MALLOC=0; AC_SUBST([REPLACE_MALLOC])
+ REPLACE_MALLOC_FOR_MALLOC_GNU=0; AC_SUBST([REPLACE_MALLOC_FOR_MALLOC_GNU])
+ REPLACE_MALLOC_FOR_MALLOC_POSIX=0; AC_SUBST([REPLACE_MALLOC_FOR_MALLOC_POSIX])
REPLACE_MBTOWC=0; AC_SUBST([REPLACE_MBTOWC])
REPLACE_MKSTEMP=0; AC_SUBST([REPLACE_MKSTEMP])
REPLACE_POSIX_MEMALIGN=0; AC_SUBST([REPLACE_POSIX_MEMALIGN])
@@ -159,12 +183,18 @@ AC_DEFUN([gl_STDLIB_H_DEFAULTS],
REPLACE_QSORT_R=0; AC_SUBST([REPLACE_QSORT_R])
REPLACE_RANDOM=0; AC_SUBST([REPLACE_RANDOM])
REPLACE_RANDOM_R=0; AC_SUBST([REPLACE_RANDOM_R])
- REPLACE_REALLOC=0; AC_SUBST([REPLACE_REALLOC])
+ REPLACE_REALLOC_FOR_REALLOC_GNU=0; AC_SUBST([REPLACE_REALLOC_FOR_REALLOC_GNU])
+ REPLACE_REALLOC_FOR_REALLOC_POSIX=0; AC_SUBST([REPLACE_REALLOC_FOR_REALLOC_POSIX])
+ REPLACE_REALLOCARRAY=0; AC_SUBST([REPLACE_REALLOCARRAY])
REPLACE_REALPATH=0; AC_SUBST([REPLACE_REALPATH])
REPLACE_SETENV=0; AC_SUBST([REPLACE_SETENV])
REPLACE_SETSTATE=0; AC_SUBST([REPLACE_SETSTATE])
REPLACE_STRTOD=0; AC_SUBST([REPLACE_STRTOD])
+ REPLACE_STRTOL=0; AC_SUBST([REPLACE_STRTOL])
REPLACE_STRTOLD=0; AC_SUBST([REPLACE_STRTOLD])
+ REPLACE_STRTOLL=0; AC_SUBST([REPLACE_STRTOLL])
+ REPLACE_STRTOUL=0; AC_SUBST([REPLACE_STRTOUL])
+ REPLACE_STRTOULL=0; AC_SUBST([REPLACE_STRTOULL])
REPLACE_UNSETENV=0; AC_SUBST([REPLACE_UNSETENV])
REPLACE_WCTOMB=0; AC_SUBST([REPLACE_WCTOMB])
])
diff --git a/gnulib/import/m4/strchrnul.m4 b/gnulib/import/m4/strchrnul.m4
index 76c9a049663..630699b8f6c 100644
--- a/gnulib/import/m4/strchrnul.m4
+++ b/gnulib/import/m4/strchrnul.m4
@@ -1,5 +1,5 @@
-# strchrnul.m4 serial 9
-dnl Copyright (C) 2003, 2007, 2009-2021 Free Software Foundation, Inc.
+# strchrnul.m4 serial 10
+dnl Copyright (C) 2003, 2007, 2009-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
@@ -9,7 +9,7 @@ AC_DEFUN([gl_FUNC_STRCHRNUL],
dnl Persuade glibc <string.h> to declare strchrnul().
AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
- AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
+ AC_REQUIRE([gl_STRING_H_DEFAULTS])
AC_CHECK_FUNCS([strchrnul])
if test $ac_cv_func_strchrnul = no; then
HAVE_STRCHRNUL=0
diff --git a/gnulib/import/m4/strdup.m4 b/gnulib/import/m4/strdup.m4
index f6f421d940a..da8899d166c 100644
--- a/gnulib/import/m4/strdup.m4
+++ b/gnulib/import/m4/strdup.m4
@@ -1,6 +1,6 @@
-# strdup.m4 serial 14
+# strdup.m4 serial 15
-dnl Copyright (C) 2002-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2002-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
@@ -8,7 +8,7 @@ dnl with or without modifications, as long as this notice is preserved.
AC_DEFUN([gl_FUNC_STRDUP],
[
- AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
+ AC_REQUIRE([gl_STRING_H_DEFAULTS])
AC_CHECK_DECLS_ONCE([strdup])
if test $ac_cv_have_decl_strdup = no; then
HAVE_DECL_STRDUP=0
@@ -17,7 +17,7 @@ AC_DEFUN([gl_FUNC_STRDUP],
AC_DEFUN([gl_FUNC_STRDUP_POSIX],
[
- AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
+ AC_REQUIRE([gl_STRING_H_DEFAULTS])
AC_REQUIRE([gl_CHECK_MALLOC_POSIX])
if test $gl_cv_func_malloc_posix != yes; then
REPLACE_STRDUP=1
diff --git a/gnulib/import/m4/strerror.m4 b/gnulib/import/m4/strerror.m4
index 48c56aec6a1..4716649b9cb 100644
--- a/gnulib/import/m4/strerror.m4
+++ b/gnulib/import/m4/strerror.m4
@@ -1,19 +1,19 @@
-# strerror.m4 serial 21
-dnl Copyright (C) 2002, 2007-2021 Free Software Foundation, Inc.
+# strerror.m4 serial 23
+dnl Copyright (C) 2002, 2007-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
AC_DEFUN([gl_FUNC_STRERROR],
[
- AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
+ AC_REQUIRE([gl_STRING_H_DEFAULTS])
AC_REQUIRE([gl_HEADER_ERRNO_H])
AC_REQUIRE([gl_FUNC_STRERROR_0])
AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
m4_ifdef([gl_FUNC_STRERROR_R_WORKS], [
AC_REQUIRE([gl_FUNC_STRERROR_R_WORKS])
])
- if test "$ERRNO_H:$REPLACE_STRERROR_0" = :0; then
+ if test "$GL_GENERATE_ERRNO_H:$REPLACE_STRERROR_0" = false:0; then
AC_CACHE_CHECK([for working strerror function],
[gl_cv_func_working_strerror],
[AC_RUN_IFELSE(
diff --git a/gnulib/import/m4/strerror_r.m4 b/gnulib/import/m4/strerror_r.m4
index b0b2ed05347..23c3b423ba6 100644
--- a/gnulib/import/m4/strerror_r.m4
+++ b/gnulib/import/m4/strerror_r.m4
@@ -1,17 +1,14 @@
-# strerror_r.m4 serial 20
-dnl Copyright (C) 2002, 2007-2021 Free Software Foundation, Inc.
+# strerror_r.m4 serial 24
+dnl Copyright (C) 2002, 2007-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
AC_DEFUN([gl_FUNC_STRERROR_R],
[
- AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
+ AC_REQUIRE([gl_STRING_H_DEFAULTS])
AC_REQUIRE([gl_FUNC_STRERROR_R_WORKS])
- dnl Persuade Solaris <string.h> to declare strerror_r().
- AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
-
dnl Some systems don't declare strerror_r() if _THREAD_SAFE and _REENTRANT
dnl are not defined.
AC_CHECK_DECLS_ONCE([strerror_r])
@@ -20,7 +17,7 @@ AC_DEFUN([gl_FUNC_STRERROR_R],
fi
if test $ac_cv_func_strerror_r = yes; then
- if test "$ERRNO_H:$REPLACE_STRERROR_0" = :0; then
+ if test "$GL_GENERATE_ERRNO_H:$REPLACE_STRERROR_0" = false:0; then
if test $gl_cv_func_strerror_r_posix_signature = yes; then
case "$gl_cv_func_strerror_r_works" in
dnl The system's strerror_r has bugs. Replace it.
@@ -40,6 +37,7 @@ AC_DEFUN([gl_FUNC_STRERROR_R],
# Prerequisites of lib/strerror_r.c.
AC_DEFUN([gl_PREREQ_STRERROR_R], [
+ AC_REQUIRE([AC_FUNC_STRERROR_R])
dnl glibc >= 2.3.4 and cygwin 1.7.9 have a function __xpg_strerror_r.
AC_CHECK_FUNCS_ONCE([__xpg_strerror_r])
AC_CHECK_FUNCS_ONCE([catgets])
@@ -52,11 +50,16 @@ AC_DEFUN([gl_FUNC_STRERROR_R_WORKS],
[
AC_REQUIRE([gl_HEADER_ERRNO_H])
AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+
+ dnl Persuade Android <string.h> to use the GNU strerror_r API,
+ dnl and Solaris <string.h> to declare strerror_r.
+ AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+
AC_REQUIRE([gl_FUNC_STRERROR_0])
AC_CHECK_FUNCS_ONCE([strerror_r])
if test $ac_cv_func_strerror_r = yes; then
- if test "$ERRNO_H:$REPLACE_STRERROR_0" = :0; then
+ if test "$GL_GENERATE_ERRNO_H:$REPLACE_STRERROR_0" = false:0; then
dnl The POSIX prototype is: int strerror_r (int, char *, size_t);
dnl glibc, Cygwin: char *strerror_r (int, char *, size_t);
dnl AIX 5.1, OSF/1 5.1: int strerror_r (int, char *, int);
diff --git a/gnulib/import/m4/string_h.m4 b/gnulib/import/m4/string_h.m4
index a4cc5b43783..9e09b96e165 100644
--- a/gnulib/import/m4/string_h.m4
+++ b/gnulib/import/m4/string_h.m4
@@ -1,24 +1,19 @@
# Configure a GNU-like replacement for <string.h>.
-# Copyright (C) 2007-2021 Free Software Foundation, Inc.
+# Copyright (C) 2007-2022 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 29
+# serial 34
# Written by Paul Eggert.
-AC_DEFUN([gl_HEADER_STRING_H],
+AC_DEFUN_ONCE([gl_STRING_H],
[
- dnl Use AC_REQUIRE here, so that the default behavior below is expanded
- dnl once only, before all statements that occur in other macros.
- AC_REQUIRE([gl_HEADER_STRING_H_BODY])
-])
-
-AC_DEFUN([gl_HEADER_STRING_H_BODY],
-[
- AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
+ dnl Ensure to expand the default settings once only, before all statements
+ dnl that occur in other macros.
+ AC_REQUIRE([gl_STRING_H_DEFAULTS])
gl_NEXT_HEADERS([string.h])
dnl Check for declarations of anything we want to poison if the
@@ -33,62 +28,79 @@ AC_DEFUN([gl_HEADER_STRING_H_BODY],
AC_REQUIRE([AC_C_RESTRICT])
])
+# gl_STRING_MODULE_INDICATOR([modulename])
+# sets the shell variable that indicates the presence of the given module
+# to a C preprocessor expression that will evaluate to 1.
+# This macro invocation must not occur in macros that are AC_REQUIREd.
AC_DEFUN([gl_STRING_MODULE_INDICATOR],
[
- dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
- AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
+ dnl Ensure to expand the default settings once only.
+ gl_STRING_H_REQUIRE_DEFAULTS
gl_MODULE_INDICATOR_SET_VARIABLE([$1])
dnl Define it also as a C macro, for the benefit of the unit tests.
gl_MODULE_INDICATOR_FOR_TESTS([$1])
])
-AC_DEFUN([gl_HEADER_STRING_H_DEFAULTS],
+# Initializes the default values for AC_SUBSTed shell variables.
+# This macro must not be AC_REQUIREd. It must only be invoked, and only
+# outside of macros or in macros that are not AC_REQUIREd.
+AC_DEFUN([gl_STRING_H_REQUIRE_DEFAULTS],
+[
+ m4_defun(GL_MODULE_INDICATOR_PREFIX[_STRING_H_MODULE_INDICATOR_DEFAULTS], [
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXPLICIT_BZERO])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FFSL])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FFSLL])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MEMCHR])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MEMMEM])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MEMPCPY])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MEMRCHR])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RAWMEMCHR])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STPCPY])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STPNCPY])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRCHRNUL])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRDUP])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRNCAT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRNDUP])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRNLEN])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRPBRK])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRSEP])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRSTR])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRCASESTR])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOK_R])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSLEN])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSNLEN])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSCHR])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSRCHR])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSSTR])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSCASECMP])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSNCASECMP])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSPCASECMP])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSCASESTR])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSCSPN])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSPBRK])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSSPN])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSSEP])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSTOK_R])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRERROR])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRERROR_R])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRERRORNAME_NP])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SIGABBREV_NP])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SIGDESCR_NP])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRSIGNAL])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRVERSCMP])
+ dnl Support Microsoft deprecated alias function names by default.
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_MEMCCPY], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_STRDUP], [1])
+ ])
+ m4_require(GL_MODULE_INDICATOR_PREFIX[_STRING_H_MODULE_INDICATOR_DEFAULTS])
+ dnl Make sure the shell variable for GNULIB_FREE_POSIX is initialized.
+ gl_STDLIB_H_REQUIRE_DEFAULTS
+ AC_REQUIRE([gl_STRING_H_DEFAULTS])
+])
+
+AC_DEFUN([gl_STRING_H_DEFAULTS],
[
- GNULIB_EXPLICIT_BZERO=0; AC_SUBST([GNULIB_EXPLICIT_BZERO])
- GNULIB_FFSL=0; AC_SUBST([GNULIB_FFSL])
- GNULIB_FFSLL=0; AC_SUBST([GNULIB_FFSLL])
- GNULIB_MEMCHR=0; AC_SUBST([GNULIB_MEMCHR])
- GNULIB_MEMMEM=0; AC_SUBST([GNULIB_MEMMEM])
- GNULIB_MEMPCPY=0; AC_SUBST([GNULIB_MEMPCPY])
- GNULIB_MEMRCHR=0; AC_SUBST([GNULIB_MEMRCHR])
- GNULIB_RAWMEMCHR=0; AC_SUBST([GNULIB_RAWMEMCHR])
- GNULIB_STPCPY=0; AC_SUBST([GNULIB_STPCPY])
- GNULIB_STPNCPY=0; AC_SUBST([GNULIB_STPNCPY])
- GNULIB_STRCHRNUL=0; AC_SUBST([GNULIB_STRCHRNUL])
- GNULIB_STRDUP=0; AC_SUBST([GNULIB_STRDUP])
- GNULIB_STRNCAT=0; AC_SUBST([GNULIB_STRNCAT])
- GNULIB_STRNDUP=0; AC_SUBST([GNULIB_STRNDUP])
- GNULIB_STRNLEN=0; AC_SUBST([GNULIB_STRNLEN])
- GNULIB_STRPBRK=0; AC_SUBST([GNULIB_STRPBRK])
- GNULIB_STRSEP=0; AC_SUBST([GNULIB_STRSEP])
- GNULIB_STRSTR=0; AC_SUBST([GNULIB_STRSTR])
- GNULIB_STRCASESTR=0; AC_SUBST([GNULIB_STRCASESTR])
- GNULIB_STRTOK_R=0; AC_SUBST([GNULIB_STRTOK_R])
- GNULIB_MBSLEN=0; AC_SUBST([GNULIB_MBSLEN])
- GNULIB_MBSNLEN=0; AC_SUBST([GNULIB_MBSNLEN])
- GNULIB_MBSCHR=0; AC_SUBST([GNULIB_MBSCHR])
- GNULIB_MBSRCHR=0; AC_SUBST([GNULIB_MBSRCHR])
- GNULIB_MBSSTR=0; AC_SUBST([GNULIB_MBSSTR])
- GNULIB_MBSCASECMP=0; AC_SUBST([GNULIB_MBSCASECMP])
- GNULIB_MBSNCASECMP=0; AC_SUBST([GNULIB_MBSNCASECMP])
- GNULIB_MBSPCASECMP=0; AC_SUBST([GNULIB_MBSPCASECMP])
- GNULIB_MBSCASESTR=0; AC_SUBST([GNULIB_MBSCASESTR])
- GNULIB_MBSCSPN=0; AC_SUBST([GNULIB_MBSCSPN])
- GNULIB_MBSPBRK=0; AC_SUBST([GNULIB_MBSPBRK])
- GNULIB_MBSSPN=0; AC_SUBST([GNULIB_MBSSPN])
- GNULIB_MBSSEP=0; AC_SUBST([GNULIB_MBSSEP])
- GNULIB_MBSTOK_R=0; AC_SUBST([GNULIB_MBSTOK_R])
- GNULIB_STRERROR=0; AC_SUBST([GNULIB_STRERROR])
- GNULIB_STRERROR_R=0; AC_SUBST([GNULIB_STRERROR_R])
- GNULIB_STRERRORNAME_NP=0; AC_SUBST([GNULIB_STRERRORNAME_NP])
- GNULIB_SIGABBREV_NP=0; AC_SUBST([GNULIB_SIGABBREV_NP])
- GNULIB_SIGDESCR_NP=0; AC_SUBST([GNULIB_SIGDESCR_NP])
- GNULIB_STRSIGNAL=0; AC_SUBST([GNULIB_STRSIGNAL])
- GNULIB_STRVERSCMP=0; AC_SUBST([GNULIB_STRVERSCMP])
HAVE_MBSLEN=0; AC_SUBST([HAVE_MBSLEN])
- dnl Support Microsoft deprecated alias function names by default.
- GNULIB_MDA_MEMCCPY=1; AC_SUBST([GNULIB_MDA_MEMCCPY])
- GNULIB_MDA_STRDUP=1; AC_SUBST([GNULIB_MDA_STRDUP])
dnl Assume proper GNU behavior unless another module says otherwise.
HAVE_EXPLICIT_BZERO=1; AC_SUBST([HAVE_EXPLICIT_BZERO])
HAVE_FFSL=1; AC_SUBST([HAVE_FFSL])
diff --git a/gnulib/import/m4/strings_h.m4 b/gnulib/import/m4/strings_h.m4
index 1dc2212ac67..6965b7c1498 100644
--- a/gnulib/import/m4/strings_h.m4
+++ b/gnulib/import/m4/strings_h.m4
@@ -1,21 +1,16 @@
# Configure a replacement for <strings.h>.
-# serial 6
+# serial 9
-# Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc.
+# Copyright (C) 2007, 2009-2022 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.
-AC_DEFUN([gl_HEADER_STRINGS_H],
+AC_DEFUN_ONCE([gl_STRINGS_H],
[
- dnl Use AC_REQUIRE here, so that the default behavior below is expanded
- dnl once only, before all statements that occur in other macros.
- AC_REQUIRE([gl_HEADER_STRINGS_H_BODY])
-])
-
-AC_DEFUN([gl_HEADER_STRINGS_H_BODY],
-[
- AC_REQUIRE([gl_HEADER_STRINGS_H_DEFAULTS])
+ dnl Ensure to expand the default settings once only, before all statements
+ dnl that occur in other macros.
+ AC_REQUIRE([gl_STRINGS_H_DEFAULTS])
gl_CHECK_NEXT_HEADERS([strings.h])
if test $ac_cv_header_strings_h = yes; then
@@ -35,16 +30,31 @@ AC_DEFUN([gl_HEADER_STRINGS_H_BODY],
]], [ffs strcasecmp strncasecmp])
])
+# gl_STRINGS_MODULE_INDICATOR([modulename])
+# sets the shell variable that indicates the presence of the given module
+# to a C preprocessor expression that will evaluate to 1.
+# This macro invocation must not occur in macros that are AC_REQUIREd.
AC_DEFUN([gl_STRINGS_MODULE_INDICATOR],
[
- dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
- AC_REQUIRE([gl_HEADER_STRINGS_H_DEFAULTS])
+ dnl Ensure to expand the default settings once only.
+ gl_STRINGS_H_REQUIRE_DEFAULTS
gl_MODULE_INDICATOR_SET_VARIABLE([$1])
])
-AC_DEFUN([gl_HEADER_STRINGS_H_DEFAULTS],
+# Initializes the default values for AC_SUBSTed shell variables.
+# This macro must not be AC_REQUIREd. It must only be invoked, and only
+# outside of macros or in macros that are not AC_REQUIREd.
+AC_DEFUN([gl_STRINGS_H_REQUIRE_DEFAULTS],
+[
+ m4_defun(GL_MODULE_INDICATOR_PREFIX[_STRINGS_H_MODULE_INDICATOR_DEFAULTS], [
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FFS])
+ ])
+ m4_require(GL_MODULE_INDICATOR_PREFIX[_STRINGS_H_MODULE_INDICATOR_DEFAULTS])
+ AC_REQUIRE([gl_STRINGS_H_DEFAULTS])
+])
+
+AC_DEFUN([gl_STRINGS_H_DEFAULTS],
[
- GNULIB_FFS=0; AC_SUBST([GNULIB_FFS])
dnl Assume proper GNU behavior unless another module says otherwise.
HAVE_FFS=1; AC_SUBST([HAVE_FFS])
HAVE_STRCASECMP=1; AC_SUBST([HAVE_STRCASECMP])
diff --git a/gnulib/import/m4/strnlen.m4 b/gnulib/import/m4/strnlen.m4
index bb9a680fdc4..0934274de71 100644
--- a/gnulib/import/m4/strnlen.m4
+++ b/gnulib/import/m4/strnlen.m4
@@ -1,5 +1,5 @@
-# strnlen.m4 serial 13
-dnl Copyright (C) 2002-2003, 2005-2007, 2009-2021 Free Software Foundation,
+# strnlen.m4 serial 14
+dnl Copyright (C) 2002-2003, 2005-2007, 2009-2022 Free Software Foundation,
dnl Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
@@ -7,7 +7,7 @@ dnl with or without modifications, as long as this notice is preserved.
AC_DEFUN([gl_FUNC_STRNLEN],
[
- AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
+ AC_REQUIRE([gl_STRING_H_DEFAULTS])
dnl Persuade glibc <string.h> to declare strnlen().
AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
diff --git a/gnulib/import/m4/strstr.m4 b/gnulib/import/m4/strstr.m4
index 1226b056efc..6cc20727fc0 100644
--- a/gnulib/import/m4/strstr.m4
+++ b/gnulib/import/m4/strstr.m4
@@ -1,5 +1,5 @@
-# strstr.m4 serial 22
-dnl Copyright (C) 2008-2021 Free Software Foundation, Inc.
+# strstr.m4 serial 24
+dnl Copyright (C) 2008-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
@@ -7,7 +7,7 @@ dnl with or without modifications, as long as this notice is preserved.
dnl Check that strstr works.
AC_DEFUN([gl_FUNC_STRSTR_SIMPLE],
[
- AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
+ AC_REQUIRE([gl_STRING_H_DEFAULTS])
AC_REQUIRE([gl_FUNC_MEMCHR])
if test $REPLACE_MEMCHR = 1; then
REPLACE_STRSTR=1
@@ -18,7 +18,7 @@ AC_DEFUN([gl_FUNC_STRSTR_SIMPLE],
[gl_cv_func_strstr_works_always],
[AC_RUN_IFELSE(
[AC_LANG_PROGRAM([[
-#include <string.h> /* for strstr */
+#include <string.h> /* for __GNU_LIBRARY__, strstr */
#ifdef __GNU_LIBRARY__
#include <features.h>
#if __GLIBC__ == 2 && __GLIBC_MINOR__ == 28
@@ -40,6 +40,7 @@ AC_DEFUN([gl_FUNC_STRSTR_SIMPLE],
dnl linear.
AC_EGREP_CPP([Lucky user],
[
+#include <string.h> /* for __GNU_LIBRARY__ */
#ifdef __GNU_LIBRARY__
#include <features.h>
#if ((__GLIBC__ == 2 && __GLIBC_MINOR__ > 12) || (__GLIBC__ > 2)) \
diff --git a/gnulib/import/m4/strtok_r.m4 b/gnulib/import/m4/strtok_r.m4
index b8e2f6821ff..22185f5ae96 100644
--- a/gnulib/import/m4/strtok_r.m4
+++ b/gnulib/import/m4/strtok_r.m4
@@ -1,5 +1,5 @@
-# strtok_r.m4 serial 15
-dnl Copyright (C) 2002-2004, 2006-2007, 2009-2021 Free Software Foundation,
+# strtok_r.m4 serial 16
+dnl Copyright (C) 2002-2004, 2006-2007, 2009-2022 Free Software Foundation,
dnl Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
@@ -10,7 +10,7 @@ AC_DEFUN([gl_FUNC_STRTOK_R],
dnl The strtok_r() declaration in lib/string.in.h uses 'restrict'.
AC_REQUIRE([AC_C_RESTRICT])
- AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
+ AC_REQUIRE([gl_STRING_H_DEFAULTS])
AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
AC_CHECK_FUNCS([strtok_r])
if test $ac_cv_func_strtok_r = yes; then
diff --git a/gnulib/import/m4/sys_random_h.m4 b/gnulib/import/m4/sys_random_h.m4
index 45e0469ba05..a5ba85c67c6 100644
--- a/gnulib/import/m4/sys_random_h.m4
+++ b/gnulib/import/m4/sys_random_h.m4
@@ -1,10 +1,10 @@
-# sys_random_h.m4 serial 5
-dnl Copyright (C) 2020-2021 Free Software Foundation, Inc.
+# sys_random_h.m4 serial 8
+dnl Copyright (C) 2020-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
-AC_DEFUN([gl_HEADER_SYS_RANDOM],
+AC_DEFUN_ONCE([gl_SYS_RANDOM_H],
[
AC_REQUIRE([gl_SYS_RANDOM_H_DEFAULTS])
dnl <sys/random.h> is always overridden, because of GNULIB_POSIXCHECK.
@@ -35,18 +35,33 @@ AC_DEFUN([gl_HEADER_SYS_RANDOM],
[getrandom])
])
+# gl_SYS_RANDOM_MODULE_INDICATOR([modulename])
+# sets the shell variable that indicates the presence of the given module
+# to a C preprocessor expression that will evaluate to 1.
+# This macro invocation must not occur in macros that are AC_REQUIREd.
AC_DEFUN([gl_SYS_RANDOM_MODULE_INDICATOR],
[
- dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
- AC_REQUIRE([gl_SYS_RANDOM_H_DEFAULTS])
+ dnl Ensure to expand the default settings once only.
+ gl_SYS_RANDOM_H_REQUIRE_DEFAULTS
gl_MODULE_INDICATOR_SET_VARIABLE([$1])
dnl Define it also as a C macro, for the benefit of the unit tests.
gl_MODULE_INDICATOR_FOR_TESTS([$1])
])
+# Initializes the default values for AC_SUBSTed shell variables.
+# This macro must not be AC_REQUIREd. It must only be invoked, and only
+# outside of macros or in macros that are not AC_REQUIREd.
+AC_DEFUN([gl_SYS_RANDOM_H_REQUIRE_DEFAULTS],
+[
+ m4_defun(GL_MODULE_INDICATOR_PREFIX[_SYS_RANDOM_H_MODULE_INDICATOR_DEFAULTS], [
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETRANDOM])
+ ])
+ m4_require(GL_MODULE_INDICATOR_PREFIX[_SYS_RANDOM_H_MODULE_INDICATOR_DEFAULTS])
+ AC_REQUIRE([gl_SYS_RANDOM_H_DEFAULTS])
+])
+
AC_DEFUN([gl_SYS_RANDOM_H_DEFAULTS],
[
- GNULIB_GETRANDOM=0; AC_SUBST([GNULIB_GETRANDOM])
dnl Assume proper GNU behavior unless another module says otherwise.
HAVE_GETRANDOM=1; AC_SUBST([HAVE_GETRANDOM])
REPLACE_GETRANDOM=0; AC_SUBST([REPLACE_GETRANDOM])
diff --git a/gnulib/import/m4/sys_select_h.m4 b/gnulib/import/m4/sys_select_h.m4
index 4b33d312e55..2743cd17953 100644
--- a/gnulib/import/m4/sys_select_h.m4
+++ b/gnulib/import/m4/sys_select_h.m4
@@ -1,13 +1,13 @@
-# sys_select_h.m4 serial 20
-dnl Copyright (C) 2006-2021 Free Software Foundation, Inc.
+# sys_select_h.m4 serial 23
+dnl Copyright (C) 2006-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
-AC_DEFUN([gl_HEADER_SYS_SELECT],
+AC_DEFUN_ONCE([gl_SYS_SELECT_H],
[
- AC_REQUIRE([AC_C_RESTRICT])
AC_REQUIRE([gl_SYS_SELECT_H_DEFAULTS])
+ AC_REQUIRE([AC_C_RESTRICT])
AC_CACHE_CHECK([whether <sys/select.h> is self-contained],
[gl_cv_header_sys_select_h_selfcontained],
[
@@ -75,19 +75,34 @@ AC_DEFUN([gl_HEADER_SYS_SELECT],
]], [pselect select])
])
+# gl_SYS_SELECT_MODULE_INDICATOR([modulename])
+# sets the shell variable that indicates the presence of the given module
+# to a C preprocessor expression that will evaluate to 1.
+# This macro invocation must not occur in macros that are AC_REQUIREd.
AC_DEFUN([gl_SYS_SELECT_MODULE_INDICATOR],
[
- dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
- AC_REQUIRE([gl_SYS_SELECT_H_DEFAULTS])
+ dnl Ensure to expand the default settings once only.
+ gl_SYS_SELECT_H_REQUIRE_DEFAULTS
gl_MODULE_INDICATOR_SET_VARIABLE([$1])
dnl Define it also as a C macro, for the benefit of the unit tests.
gl_MODULE_INDICATOR_FOR_TESTS([$1])
])
+# Initializes the default values for AC_SUBSTed shell variables.
+# This macro must not be AC_REQUIREd. It must only be invoked, and only
+# outside of macros or in macros that are not AC_REQUIREd.
+AC_DEFUN([gl_SYS_SELECT_H_REQUIRE_DEFAULTS],
+[
+ m4_defun(GL_MODULE_INDICATOR_PREFIX[_SYS_SELECT_H_MODULE_INDICATOR_DEFAULTS], [
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PSELECT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SELECT])
+ ])
+ m4_require(GL_MODULE_INDICATOR_PREFIX[_SYS_SELECT_H_MODULE_INDICATOR_DEFAULTS])
+ AC_REQUIRE([gl_SYS_SELECT_H_DEFAULTS])
+])
+
AC_DEFUN([gl_SYS_SELECT_H_DEFAULTS],
[
- GNULIB_PSELECT=0; AC_SUBST([GNULIB_PSELECT])
- GNULIB_SELECT=0; AC_SUBST([GNULIB_SELECT])
dnl Assume proper GNU behavior unless another module says otherwise.
HAVE_PSELECT=1; AC_SUBST([HAVE_PSELECT])
REPLACE_PSELECT=0; AC_SUBST([REPLACE_PSELECT])
diff --git a/gnulib/import/m4/sys_socket_h.m4 b/gnulib/import/m4/sys_socket_h.m4
index 503cb9668b7..ba3ae68e61d 100644
--- a/gnulib/import/m4/sys_socket_h.m4
+++ b/gnulib/import/m4/sys_socket_h.m4
@@ -1,12 +1,12 @@
-# sys_socket_h.m4 serial 25
-dnl Copyright (C) 2005-2021 Free Software Foundation, Inc.
+# sys_socket_h.m4 serial 29
+dnl Copyright (C) 2005-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl From Simon Josefsson.
-AC_DEFUN([gl_HEADER_SYS_SOCKET],
+AC_DEFUN_ONCE([gl_SYS_SOCKET_H],
[
AC_REQUIRE([gl_SYS_SOCKET_H_DEFAULTS])
AC_REQUIRE([AC_CANONICAL_HOST])
@@ -22,6 +22,7 @@ AC_DEFUN([gl_HEADER_SYS_SOCKET],
;;
esac
+ GL_GENERATE_SYS_SOCKET_H=false
AC_CACHE_CHECK([whether <sys/socket.h> is self-contained],
[gl_cv_header_sys_socket_h_selfcontained],
[
@@ -44,7 +45,7 @@ AC_DEFUN([gl_HEADER_SYS_SOCKET],
[gl_cv_header_sys_socket_h_shut=no])
])
if test $gl_cv_header_sys_socket_h_shut = no; then
- SYS_SOCKET_H='sys/socket.h'
+ GL_GENERATE_SYS_SOCKET_H=true
fi
fi
fi
@@ -83,7 +84,7 @@ AC_DEFUN([gl_HEADER_SYS_SOCKET],
fi
if test $HAVE_STRUCT_SOCKADDR_STORAGE = 0 || test $HAVE_SA_FAMILY_T = 0 \
|| test $HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = 0; then
- SYS_SOCKET_H='sys/socket.h'
+ GL_GENERATE_SYS_SOCKET_H=true
fi
gl_PREREQ_SYS_H_WINSOCK2
@@ -156,32 +157,47 @@ AC_DEFUN([gl_PREREQ_SYS_H_WS2TCPIP],
AC_SUBST([HAVE_WS2TCPIP_H])
])
+# gl_SYS_SOCKET_MODULE_INDICATOR([modulename])
+# sets the shell variable that indicates the presence of the given module
+# to a C preprocessor expression that will evaluate to 1.
+# This macro invocation must not occur in macros that are AC_REQUIREd.
AC_DEFUN([gl_SYS_SOCKET_MODULE_INDICATOR],
[
- dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
- AC_REQUIRE([gl_SYS_SOCKET_H_DEFAULTS])
+ dnl Ensure to expand the default settings once only.
+ gl_SYS_SOCKET_H_REQUIRE_DEFAULTS
gl_MODULE_INDICATOR_SET_VARIABLE([$1])
dnl Define it also as a C macro, for the benefit of the unit tests.
gl_MODULE_INDICATOR_FOR_TESTS([$1])
])
+# Initializes the default values for AC_SUBSTed shell variables.
+# This macro must not be AC_REQUIREd. It must only be invoked, and only
+# outside of macros or in macros that are not AC_REQUIREd.
+AC_DEFUN([gl_SYS_SOCKET_H_REQUIRE_DEFAULTS],
+[
+ m4_defun(GL_MODULE_INDICATOR_PREFIX[_SYS_SOCKET_H_MODULE_INDICATOR_DEFAULTS], [
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SOCKET])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CONNECT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ACCEPT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_BIND])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETPEERNAME])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETSOCKNAME])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETSOCKOPT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LISTEN])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RECV])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SEND])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RECVFROM])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SENDTO])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SETSOCKOPT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SHUTDOWN])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ACCEPT4])
+ ])
+ m4_require(GL_MODULE_INDICATOR_PREFIX[_SYS_SOCKET_H_MODULE_INDICATOR_DEFAULTS])
+ AC_REQUIRE([gl_SYS_SOCKET_H_DEFAULTS])
+])
+
AC_DEFUN([gl_SYS_SOCKET_H_DEFAULTS],
[
- GNULIB_SOCKET=0; AC_SUBST([GNULIB_SOCKET])
- GNULIB_CONNECT=0; AC_SUBST([GNULIB_CONNECT])
- GNULIB_ACCEPT=0; AC_SUBST([GNULIB_ACCEPT])
- GNULIB_BIND=0; AC_SUBST([GNULIB_BIND])
- GNULIB_GETPEERNAME=0; AC_SUBST([GNULIB_GETPEERNAME])
- GNULIB_GETSOCKNAME=0; AC_SUBST([GNULIB_GETSOCKNAME])
- GNULIB_GETSOCKOPT=0; AC_SUBST([GNULIB_GETSOCKOPT])
- GNULIB_LISTEN=0; AC_SUBST([GNULIB_LISTEN])
- GNULIB_RECV=0; AC_SUBST([GNULIB_RECV])
- GNULIB_SEND=0; AC_SUBST([GNULIB_SEND])
- GNULIB_RECVFROM=0; AC_SUBST([GNULIB_RECVFROM])
- GNULIB_SENDTO=0; AC_SUBST([GNULIB_SENDTO])
- GNULIB_SETSOCKOPT=0; AC_SUBST([GNULIB_SETSOCKOPT])
- GNULIB_SHUTDOWN=0; AC_SUBST([GNULIB_SHUTDOWN])
- GNULIB_ACCEPT4=0; AC_SUBST([GNULIB_ACCEPT4])
HAVE_STRUCT_SOCKADDR_STORAGE=1; AC_SUBST([HAVE_STRUCT_SOCKADDR_STORAGE])
HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY=1;
AC_SUBST([HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY])
diff --git a/gnulib/import/m4/sys_stat_h.m4 b/gnulib/import/m4/sys_stat_h.m4
index 23cbdd28eb2..b5a9789b818 100644
--- a/gnulib/import/m4/sys_stat_h.m4
+++ b/gnulib/import/m4/sys_stat_h.m4
@@ -1,5 +1,5 @@
-# sys_stat_h.m4 serial 38 -*- Autoconf -*-
-dnl Copyright (C) 2006-2021 Free Software Foundation, Inc.
+# sys_stat_h.m4 serial 41 -*- Autoconf -*-
+dnl Copyright (C) 2006-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
@@ -7,7 +7,7 @@ dnl with or without modifications, as long as this notice is preserved.
dnl From Eric Blake.
dnl Provide a GNU-like <sys/stat.h>.
-AC_DEFUN([gl_HEADER_SYS_STAT_H],
+AC_DEFUN_ONCE([gl_SYS_STAT_H],
[
AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS])
@@ -52,38 +52,53 @@ AC_DEFUN([gl_HEADER_SYS_STAT_H],
AC_REQUIRE([AC_C_RESTRICT])
])
+# gl_SYS_STAT_MODULE_INDICATOR([modulename])
+# sets the shell variable that indicates the presence of the given module
+# to a C preprocessor expression that will evaluate to 1.
+# This macro invocation must not occur in macros that are AC_REQUIREd.
AC_DEFUN([gl_SYS_STAT_MODULE_INDICATOR],
[
- dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
- AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS])
+ dnl Ensure to expand the default settings once only.
+ gl_SYS_STAT_H_REQUIRE_DEFAULTS
gl_MODULE_INDICATOR_SET_VARIABLE([$1])
dnl Define it also as a C macro, for the benefit of the unit tests.
gl_MODULE_INDICATOR_FOR_TESTS([$1])
])
+# Initializes the default values for AC_SUBSTed shell variables.
+# This macro must not be AC_REQUIREd. It must only be invoked, and only
+# outside of macros or in macros that are not AC_REQUIREd.
+AC_DEFUN([gl_SYS_STAT_H_REQUIRE_DEFAULTS],
+[
+ m4_defun(GL_MODULE_INDICATOR_PREFIX[_SYS_STAT_H_MODULE_INDICATOR_DEFAULTS], [
+ gl_UNISTD_H_REQUIRE_DEFAULTS dnl for REPLACE_FCHDIR
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FCHMODAT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FSTAT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FSTATAT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FUTIMENS])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETUMASK])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LCHMOD])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LSTAT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKDIR])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKDIRAT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKFIFO])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKFIFOAT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKNOD])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKNODAT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STAT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UTIMENSAT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_OVERRIDES_STRUCT_STAT])
+ dnl Support Microsoft deprecated alias function names by default.
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_CHMOD], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_MKDIR], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_UMASK], [1])
+ ])
+ m4_require(GL_MODULE_INDICATOR_PREFIX[_SYS_STAT_H_MODULE_INDICATOR_DEFAULTS])
+ AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS])
+])
+
AC_DEFUN([gl_SYS_STAT_H_DEFAULTS],
[
- AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) dnl for REPLACE_FCHDIR
- GNULIB_FCHMODAT=0; AC_SUBST([GNULIB_FCHMODAT])
- GNULIB_FSTAT=0; AC_SUBST([GNULIB_FSTAT])
- GNULIB_FSTATAT=0; AC_SUBST([GNULIB_FSTATAT])
- GNULIB_FUTIMENS=0; AC_SUBST([GNULIB_FUTIMENS])
- GNULIB_GETUMASK=0; AC_SUBST([GNULIB_GETUMASK])
- GNULIB_LCHMOD=0; AC_SUBST([GNULIB_LCHMOD])
- GNULIB_LSTAT=0; AC_SUBST([GNULIB_LSTAT])
- GNULIB_MKDIR=0; AC_SUBST([GNULIB_MKDIR])
- GNULIB_MKDIRAT=0; AC_SUBST([GNULIB_MKDIRAT])
- GNULIB_MKFIFO=0; AC_SUBST([GNULIB_MKFIFO])
- GNULIB_MKFIFOAT=0; AC_SUBST([GNULIB_MKFIFOAT])
- GNULIB_MKNOD=0; AC_SUBST([GNULIB_MKNOD])
- GNULIB_MKNODAT=0; AC_SUBST([GNULIB_MKNODAT])
- GNULIB_STAT=0; AC_SUBST([GNULIB_STAT])
- GNULIB_UTIMENSAT=0; AC_SUBST([GNULIB_UTIMENSAT])
- GNULIB_OVERRIDES_STRUCT_STAT=0; AC_SUBST([GNULIB_OVERRIDES_STRUCT_STAT])
- dnl Support Microsoft deprecated alias function names by default.
- GNULIB_MDA_CHMOD=1; AC_SUBST([GNULIB_MDA_CHMOD])
- GNULIB_MDA_MKDIR=1; AC_SUBST([GNULIB_MDA_MKDIR])
- GNULIB_MDA_UMASK=1; AC_SUBST([GNULIB_MDA_UMASK])
dnl Assume proper GNU behavior unless another module says otherwise.
HAVE_FCHMODAT=1; AC_SUBST([HAVE_FCHMODAT])
HAVE_FSTATAT=1; AC_SUBST([HAVE_FSTATAT])
diff --git a/gnulib/import/m4/sys_time_h.m4 b/gnulib/import/m4/sys_time_h.m4
index 64f133d5133..bc5e2b1364c 100644
--- a/gnulib/import/m4/sys_time_h.m4
+++ b/gnulib/import/m4/sys_time_h.m4
@@ -1,25 +1,20 @@
# Configure a replacement for <sys/time.h>.
-# serial 9
+# serial 12
-# Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc.
+# Copyright (C) 2007, 2009-2022 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.
# Written by Paul Eggert and Martin Lambers.
-AC_DEFUN([gl_HEADER_SYS_TIME_H],
+AC_DEFUN_ONCE([gl_SYS_TIME_H],
[
dnl Use AC_REQUIRE here, so that the REPLACE_GETTIMEOFDAY=0 statement
dnl below is expanded once only, before all REPLACE_GETTIMEOFDAY=1
dnl statements that occur in other macros.
- AC_REQUIRE([gl_HEADER_SYS_TIME_H_BODY])
-])
-
-AC_DEFUN([gl_HEADER_SYS_TIME_H_BODY],
-[
+ AC_REQUIRE([gl_SYS_TIME_H_DEFAULTS])
AC_REQUIRE([AC_C_RESTRICT])
- AC_REQUIRE([gl_HEADER_SYS_TIME_H_DEFAULTS])
AC_CHECK_HEADERS_ONCE([sys/time.h])
gl_CHECK_NEXT_HEADERS([sys/time.h])
@@ -89,18 +84,33 @@ AC_DEFUN([gl_HEADER_SYS_TIME_H_BODY],
]], [gettimeofday])
])
+# gl_SYS_TIME_MODULE_INDICATOR([modulename])
+# sets the shell variable that indicates the presence of the given module
+# to a C preprocessor expression that will evaluate to 1.
+# This macro invocation must not occur in macros that are AC_REQUIREd.
AC_DEFUN([gl_SYS_TIME_MODULE_INDICATOR],
[
- dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
- AC_REQUIRE([gl_HEADER_SYS_TIME_H_DEFAULTS])
+ dnl Ensure to expand the default settings once only.
+ gl_SYS_TIME_H_REQUIRE_DEFAULTS
gl_MODULE_INDICATOR_SET_VARIABLE([$1])
dnl Define it also as a C macro, for the benefit of the unit tests.
gl_MODULE_INDICATOR_FOR_TESTS([$1])
])
-AC_DEFUN([gl_HEADER_SYS_TIME_H_DEFAULTS],
+# Initializes the default values for AC_SUBSTed shell variables.
+# This macro must not be AC_REQUIREd. It must only be invoked, and only
+# outside of macros or in macros that are not AC_REQUIREd.
+AC_DEFUN([gl_SYS_TIME_H_REQUIRE_DEFAULTS],
+[
+ m4_defun(GL_MODULE_INDICATOR_PREFIX[_SYS_TIME_H_MODULE_INDICATOR_DEFAULTS], [
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETTIMEOFDAY])
+ ])
+ m4_require(GL_MODULE_INDICATOR_PREFIX[_SYS_TIME_H_MODULE_INDICATOR_DEFAULTS])
+ AC_REQUIRE([gl_SYS_TIME_H_DEFAULTS])
+])
+
+AC_DEFUN([gl_SYS_TIME_H_DEFAULTS],
[
- GNULIB_GETTIMEOFDAY=0; AC_SUBST([GNULIB_GETTIMEOFDAY])
dnl Assume POSIX behavior unless another module says otherwise.
HAVE_GETTIMEOFDAY=1; AC_SUBST([HAVE_GETTIMEOFDAY])
HAVE_STRUCT_TIMEVAL=1; AC_SUBST([HAVE_STRUCT_TIMEVAL])
diff --git a/gnulib/import/m4/sys_types_h.m4 b/gnulib/import/m4/sys_types_h.m4
index 2172c836d95..a5bef220c2c 100644
--- a/gnulib/import/m4/sys_types_h.m4
+++ b/gnulib/import/m4/sys_types_h.m4
@@ -1,15 +1,16 @@
-# sys_types_h.m4 serial 11
-dnl Copyright (C) 2011-2021 Free Software Foundation, Inc.
+# sys_types_h.m4 serial 13
+dnl Copyright (C) 2011-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
AC_DEFUN_ONCE([gl_SYS_TYPES_H],
[
+ AC_REQUIRE([gl_SYS_TYPES_H_DEFAULTS])
+
dnl Use sane struct stat types in OpenVMS 8.2 and later.
AC_DEFINE([_USE_STD_STAT], 1, [For standard stat data types on VMS.])
- AC_REQUIRE([gl_SYS_TYPES_H_DEFAULTS])
gl_NEXT_HEADERS([sys/types.h])
dnl Ensure the type pid_t gets defined.
@@ -30,6 +31,17 @@ AC_DEFUN_ONCE([gl_SYS_TYPES_H],
AC_SUBST([WINDOWS_STAT_INODES])
])
+# Initializes the default values for AC_SUBSTed shell variables.
+# This macro must not be AC_REQUIREd. It must only be invoked, and only
+# outside of macros or in macros that are not AC_REQUIREd.
+AC_DEFUN([gl_SYS_TYPES_H_REQUIRE_DEFAULTS],
+[
+ m4_defun(GL_MODULE_INDICATOR_PREFIX[_SYS_TYPE_H_MODULE_INDICATOR_DEFAULTS], [
+ ])
+ m4_require(GL_MODULE_INDICATOR_PREFIX[_SYS_TYPE_H_MODULE_INDICATOR_DEFAULTS])
+ AC_REQUIRE([gl_SYS_TYPES_H_DEFAULTS])
+])
+
AC_DEFUN([gl_SYS_TYPES_H_DEFAULTS],
[
])
diff --git a/gnulib/import/m4/sys_uio_h.m4 b/gnulib/import/m4/sys_uio_h.m4
index 503de4d1fd3..36f55eadcdf 100644
--- a/gnulib/import/m4/sys_uio_h.m4
+++ b/gnulib/import/m4/sys_uio_h.m4
@@ -1,10 +1,10 @@
-# sys_uio_h.m4 serial 1
-dnl Copyright (C) 2011-2021 Free Software Foundation, Inc.
+# sys_uio_h.m4 serial 3
+dnl Copyright (C) 2011-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
-AC_DEFUN([gl_HEADER_SYS_UIO],
+AC_DEFUN_ONCE([gl_SYS_UIO_H],
[
AC_REQUIRE([gl_SYS_UIO_H_DEFAULTS])
dnl <sys/uio.h> is always overridden, because of GNULIB_POSIXCHECK.
@@ -17,15 +17,30 @@ AC_DEFUN([gl_HEADER_SYS_UIO],
AC_SUBST([HAVE_SYS_UIO_H])
])
+# gl_SYS_UIO_MODULE_INDICATOR([modulename])
+# sets the shell variable that indicates the presence of the given module
+# to a C preprocessor expression that will evaluate to 1.
+# This macro invocation must not occur in macros that are AC_REQUIREd.
AC_DEFUN([gl_SYS_UIO_MODULE_INDICATOR],
[
- dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
- AC_REQUIRE([gl_SYS_UIO_H_DEFAULTS])
+ dnl Ensure to expand the default settings once only.
+ gl_SYS_UIO_H_REQUIRE_DEFAULTS
gl_MODULE_INDICATOR_SET_VARIABLE([$1])
dnl Define it also as a C macro, for the benefit of the unit tests.
gl_MODULE_INDICATOR_FOR_TESTS([$1])
])
+# Initializes the default values for AC_SUBSTed shell variables.
+# This macro must not be AC_REQUIREd. It must only be invoked, and only
+# outside of macros or in macros that are not AC_REQUIREd.
+AC_DEFUN([gl_SYS_UIO_H_REQUIRE_DEFAULTS],
+[
+ m4_defun(GL_MODULE_INDICATOR_PREFIX[_SYS_UIO_H_MODULE_INDICATOR_DEFAULTS], [
+ ])
+ m4_require(GL_MODULE_INDICATOR_PREFIX[_SYS_UIO_H_MODULE_INDICATOR_DEFAULTS])
+ AC_REQUIRE([gl_SYS_UIO_H_DEFAULTS])
+])
+
AC_DEFUN([gl_SYS_UIO_H_DEFAULTS],
[
])
diff --git a/gnulib/import/m4/sys_wait_h.m4 b/gnulib/import/m4/sys_wait_h.m4
index 96e9ba2b124..0aa4f7ce808 100644
--- a/gnulib/import/m4/sys_wait_h.m4
+++ b/gnulib/import/m4/sys_wait_h.m4
@@ -1,10 +1,10 @@
-# sys_wait_h.m4 serial 6
-dnl Copyright (C) 2008-2021 Free Software Foundation, Inc.
+# sys_wait_h.m4 serial 9
+dnl Copyright (C) 2008-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
-AC_DEFUN([gl_SYS_WAIT_H],
+AC_DEFUN_ONCE([gl_SYS_WAIT_H],
[
AC_REQUIRE([gl_SYS_WAIT_H_DEFAULTS])
@@ -20,17 +20,32 @@ AC_DEFUN([gl_SYS_WAIT_H],
[waitpid])
])
+# gl_SYS_WAIT_MODULE_INDICATOR([modulename])
+# sets the shell variable that indicates the presence of the given module
+# to a C preprocessor expression that will evaluate to 1.
+# This macro invocation must not occur in macros that are AC_REQUIREd.
AC_DEFUN([gl_SYS_WAIT_MODULE_INDICATOR],
[
- dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
- AC_REQUIRE([gl_SYS_WAIT_H_DEFAULTS])
+ dnl Ensure to expand the default settings once only.
+ gl_SYS_WAIT_H_REQUIRE_DEFAULTS
gl_MODULE_INDICATOR_SET_VARIABLE([$1])
dnl Define it also as a C macro, for the benefit of the unit tests.
gl_MODULE_INDICATOR_FOR_TESTS([$1])
])
+# Initializes the default values for AC_SUBSTed shell variables.
+# This macro must not be AC_REQUIREd. It must only be invoked, and only
+# outside of macros or in macros that are not AC_REQUIREd.
+AC_DEFUN([gl_SYS_WAIT_H_REQUIRE_DEFAULTS],
+[
+ m4_defun(GL_MODULE_INDICATOR_PREFIX[_SYS_WAIT_H_MODULE_INDICATOR_DEFAULTS], [
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WAITPID])
+ ])
+ m4_require(GL_MODULE_INDICATOR_PREFIX[_SYS_WAIT_H_MODULE_INDICATOR_DEFAULTS])
+ AC_REQUIRE([gl_SYS_WAIT_H_DEFAULTS])
+])
+
AC_DEFUN([gl_SYS_WAIT_H_DEFAULTS],
[
- GNULIB_WAITPID=0; AC_SUBST([GNULIB_WAITPID])
dnl Assume proper GNU behavior unless another module says otherwise.
])
diff --git a/gnulib/import/m4/tempname.m4 b/gnulib/import/m4/tempname.m4
index 14c796d3eb3..22ccec1f8d9 100644
--- a/gnulib/import/m4/tempname.m4
+++ b/gnulib/import/m4/tempname.m4
@@ -1,6 +1,6 @@
#serial 5
-# Copyright (C) 2006-2007, 2009-2021 Free Software Foundation, Inc.
+# Copyright (C) 2006-2007, 2009-2022 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.
diff --git a/gnulib/import/m4/threadlib.m4 b/gnulib/import/m4/threadlib.m4
index 20b383a88e8..ecb4970af2e 100644
--- a/gnulib/import/m4/threadlib.m4
+++ b/gnulib/import/m4/threadlib.m4
@@ -1,5 +1,5 @@
-# threadlib.m4 serial 29
-dnl Copyright (C) 2005-2021 Free Software Foundation, Inc.
+# threadlib.m4 serial 32
+dnl Copyright (C) 2005-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
@@ -84,38 +84,48 @@ AC_DEFUN([gl_WEAK_SYMBOLS],
AC_REQUIRE([AC_CANONICAL_HOST])
AC_CACHE_CHECK([whether imported symbols can be declared weak],
[gl_cv_have_weak],
- [gl_cv_have_weak=no
- dnl First, test whether the compiler accepts it syntactically.
- AC_LINK_IFELSE(
- [AC_LANG_PROGRAM(
- [[extern void xyzzy ();
+ [case "$host_os" in
+ cygwin*)
+ dnl On Cygwin 3.2.0 with gcc 10.2, the test below would succeed, but
+ dnl programs that use pthread_in_use() with weak symbol references
+ dnl crash miserably at runtime.
+ gl_cv_have_weak="guessing no"
+ ;;
+ *)
+ gl_cv_have_weak=no
+ dnl First, test whether the compiler accepts it syntactically.
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[extern void xyzzy ();
#pragma weak xyzzy]],
- [[xyzzy();]])],
- [gl_cv_have_weak=maybe])
- if test $gl_cv_have_weak = maybe; then
- dnl Second, test whether it actually works. On Cygwin 1.7.2, with
- dnl gcc 4.3, symbols declared weak always evaluate to the address 0.
- AC_RUN_IFELSE(
- [AC_LANG_SOURCE([[
+ [[xyzzy();]])],
+ [gl_cv_have_weak=maybe])
+ if test $gl_cv_have_weak = maybe; then
+ dnl Second, test whether it actually works. On Cygwin 1.7.2, with
+ dnl gcc 4.3, symbols declared weak always evaluate to the address 0.
+ AC_RUN_IFELSE(
+ [AC_LANG_SOURCE([[
#include <stdio.h>
#pragma weak fputs
int main ()
{
return (fputs == NULL);
}]])],
- [gl_cv_have_weak=yes],
- [gl_cv_have_weak=no],
- [dnl When cross-compiling, assume that only ELF platforms support
- dnl weak symbols.
- AC_EGREP_CPP([Extensible Linking Format],
- [#ifdef __ELF__
- Extensible Linking Format
- #endif
- ],
- [gl_cv_have_weak="guessing yes"],
- [gl_cv_have_weak="guessing no"])
- ])
- fi
+ [gl_cv_have_weak=yes],
+ [gl_cv_have_weak=no],
+ [dnl When cross-compiling, assume that only ELF platforms support
+ dnl weak symbols.
+ AC_EGREP_CPP([Extensible Linking Format],
+ [#ifdef __ELF__
+ Extensible Linking Format
+ #endif
+ ],
+ [gl_cv_have_weak="guessing yes"],
+ [gl_cv_have_weak="guessing no"])
+ ])
+ fi
+ ;;
+ esac
dnl But when linking statically, weak symbols don't work.
case " $LDFLAGS " in
*" -static "*) gl_cv_have_weak=no ;;
@@ -126,7 +136,7 @@ int main ()
case "$gl_cv_have_weak" in
*yes)
case "$host_os" in
- freebsd* | dragonfly*)
+ freebsd* | dragonfly* | midnightbsd*)
: > conftest1.c
$CC $CPPFLAGS $CFLAGS $LDFLAGS -fPIC -shared -o libempty.so conftest1.c -lpthread >&AS_MESSAGE_LOG_FD 2>&1
cat <<EOF > conftest2.c
@@ -212,6 +222,27 @@ AC_DEFUN([gl_PTHREADLIB_BODY],
LIBS=$save_LIBS
test $gl_pthread_api = yes && break
done
+ echo "$as_me:__oline__: gl_pthread_api=$gl_pthread_api" >&AS_MESSAGE_LOG_FD
+ echo "$as_me:__oline__: LIBPTHREAD=$LIBPTHREAD" >&AS_MESSAGE_LOG_FD
+
+ gl_pthread_in_glibc=no
+ # On Linux with glibc >= 2.34, libc contains the fully functional
+ # pthread functions.
+ case "$host_os" in
+ linux*)
+ AC_EGREP_CPP([Lucky user],
+ [#include <features.h>
+ #ifdef __GNU_LIBRARY__
+ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 34) || (__GLIBC__ > 2)
+ Lucky user
+ #endif
+ #endif
+ ],
+ [gl_pthread_in_glibc=yes],
+ [])
+ ;;
+ esac
+ echo "$as_me:__oline__: gl_pthread_in_glibc=$gl_pthread_in_glibc" >&AS_MESSAGE_LOG_FD
# Test for libpthread by looking for pthread_kill. (Not pthread_self,
# since it is defined as a macro on OSF/1.)
@@ -219,18 +250,22 @@ AC_DEFUN([gl_PTHREADLIB_BODY],
# The program links fine without libpthread. But it may actually
# need to link with libpthread in order to create multiple threads.
AC_CHECK_LIB([pthread], [pthread_kill],
- [LIBPMULTITHREAD=-lpthread
- # On Solaris and HP-UX, most pthread functions exist also in libc.
- # Therefore pthread_in_use() needs to actually try to create a
- # thread: pthread_create from libc will fail, whereas
- # pthread_create will actually create a thread.
- # On Solaris 10 or newer, this test is no longer needed, because
- # libc contains the fully functional pthread functions.
- case "$host_os" in
- solaris | solaris2.[1-9] | solaris2.[1-9].* | hpux*)
- AC_DEFINE([PTHREAD_IN_USE_DETECTION_HARD], [1],
- [Define if the pthread_in_use() detection is hard.])
- esac
+ [if test $gl_pthread_in_glibc = yes; then
+ LIBPMULTITHREAD=
+ else
+ LIBPMULTITHREAD=-lpthread
+ # On Solaris and HP-UX, most pthread functions exist also in libc.
+ # Therefore pthread_in_use() needs to actually try to create a
+ # thread: pthread_create from libc will fail, whereas
+ # pthread_create will actually create a thread.
+ # On Solaris 10 or newer, this test is no longer needed, because
+ # libc contains the fully functional pthread functions.
+ case "$host_os" in
+ solaris | solaris2.[1-9] | solaris2.[1-9].* | hpux*)
+ AC_DEFINE([PTHREAD_IN_USE_DETECTION_HARD], [1],
+ [Define if the pthread_in_use() detection is hard.])
+ esac
+ fi
])
elif test $gl_pthread_api != yes; then
# Some library is needed. Try libpthread and libc_r.
@@ -246,6 +281,7 @@ AC_DEFUN([gl_PTHREADLIB_BODY],
LIBPMULTITHREAD=-lc_r])
fi
fi
+ echo "$as_me:__oline__: LIBPMULTITHREAD=$LIBPMULTITHREAD" >&AS_MESSAGE_LOG_FD
fi
AC_MSG_CHECKING([whether POSIX threads API is available])
AC_MSG_RESULT([$gl_pthread_api])
@@ -311,7 +347,8 @@ AC_DEFUN([gl_STDTHREADLIB_BODY],
dnl glibc >= 2.29 has thrd_create in libpthread.
dnl FreeBSD >= 10 has thrd_create in libstdthreads; this library depends
dnl on libpthread (for the symbol 'pthread_mutexattr_gettype').
- dnl AIX >= 7.1 and Solaris >= 11.4 have thrd_create in libc.
+ dnl glibc >= 2.34, AIX >= 7.1, and Solaris >= 11.4 have thrd_create in
+ dnl libc.
AC_CHECK_FUNCS([thrd_create])
if test $ac_cv_func_thrd_create = yes; then
LIBSTDTHREAD=
@@ -481,14 +518,17 @@ AC_DEFUN([gl_THREADLIB_BODY],
gl_threads_api=posix
AC_DEFINE([USE_POSIX_THREADS], [1],
[Define if the POSIX multithreading library can be used.])
- if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then
+ if test -z "$LIBMULTITHREAD" && test -z "$LTLIBMULTITHREAD"; then
+ AC_DEFINE([USE_POSIX_THREADS_FROM_LIBC], [1],
+ [Define if references to the POSIX multithreading library are satisfied by libc.])
+ else
if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then
AC_DEFINE([USE_POSIX_THREADS_WEAK], [1],
[Define if references to the POSIX multithreading library should be made weak.])
LIBTHREAD= LTLIBTHREAD=
else
case "$host_os" in
- freebsd* | dragonfly*)
+ freebsd* | dragonfly* | midnightbsd*)
if test "x$LIBTHREAD" != "x$LIBMULTITHREAD"; then
dnl If weak symbols can't tell whether pthread_create(), pthread_key_create()
dnl etc. will succeed, we need a runtime test.
@@ -576,7 +616,9 @@ dnl flavours option weak result
dnl --------------- --------- --------- -------- ---------
dnl Linux 2.4/glibc posix -lpthread Y OK
dnl
-dnl GNU Hurd/glibc posix
+dnl Linux/glibc 2.34 posix Y OK
+dnl
+dnl GNU Hurd/glibc posix -lpthread Y OK
dnl
dnl Ubuntu 14.04 posix -pthread Y OK
dnl
diff --git a/gnulib/import/m4/time_h.m4 b/gnulib/import/m4/time_h.m4
index b6a1aa3bc0f..98d7b6e01bd 100644
--- a/gnulib/import/m4/time_h.m4
+++ b/gnulib/import/m4/time_h.m4
@@ -1,8 +1,8 @@
# Configure a more-standard replacement for <time.h>.
-# Copyright (C) 2000-2001, 2003-2007, 2009-2021 Free Software Foundation, Inc.
+# Copyright (C) 2000-2001, 2003-2007, 2009-2022 Free Software Foundation, Inc.
-# serial 15
+# serial 19
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -10,16 +10,11 @@
# Written by Paul Eggert and Jim Meyering.
-AC_DEFUN([gl_HEADER_TIME_H],
+AC_DEFUN_ONCE([gl_TIME_H],
[
- dnl Use AC_REQUIRE here, so that the default behavior below is expanded
- dnl once only, before all statements that occur in other macros.
- AC_REQUIRE([gl_HEADER_TIME_H_BODY])
-])
-
-AC_DEFUN([gl_HEADER_TIME_H_BODY],
-[
- AC_REQUIRE([gl_HEADER_TIME_H_DEFAULTS])
+ dnl Ensure to expand the default settings once only, before all statements
+ dnl that occur in other macros.
+ AC_REQUIRE([gl_TIME_H_DEFAULTS])
gl_NEXT_HEADERS([time.h])
AC_REQUIRE([gl_CHECK_TYPE_STRUCT_TIMESPEC])
@@ -111,36 +106,53 @@ AC_DEFUN([gl_CHECK_TYPE_STRUCT_TIMESPEC],
AC_SUBST([UNISTD_H_DEFINES_STRUCT_TIMESPEC])
])
+# gl_TIME_MODULE_INDICATOR([modulename])
+# sets the shell variable that indicates the presence of the given module
+# to a C preprocessor expression that will evaluate to 1.
+# This macro invocation must not occur in macros that are AC_REQUIREd.
AC_DEFUN([gl_TIME_MODULE_INDICATOR],
[
- dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
- AC_REQUIRE([gl_HEADER_TIME_H_DEFAULTS])
+ dnl Ensure to expand the default settings once only.
+ gl_TIME_H_REQUIRE_DEFAULTS
gl_MODULE_INDICATOR_SET_VARIABLE([$1])
dnl Define it also as a C macro, for the benefit of the unit tests.
gl_MODULE_INDICATOR_FOR_TESTS([$1])
])
-AC_DEFUN([gl_HEADER_TIME_H_DEFAULTS],
+# Initializes the default values for AC_SUBSTed shell variables.
+# This macro must not be AC_REQUIREd. It must only be invoked, and only
+# outside of macros or in macros that are not AC_REQUIREd.
+AC_DEFUN([gl_TIME_H_REQUIRE_DEFAULTS],
+[
+ m4_defun(GL_MODULE_INDICATOR_PREFIX[_TIME_H_MODULE_INDICATOR_DEFAULTS], [
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CTIME])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKTIME])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOCALTIME])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_NANOSLEEP])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRFTIME])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRPTIME])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TIMEGM])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TIMESPEC_GET])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TIMESPEC_GETRES])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TIME_R])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TIME_RZ])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TZSET])
+ dnl Support Microsoft deprecated alias function names by default.
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_TZSET], [1])
+ ])
+ m4_require(GL_MODULE_INDICATOR_PREFIX[_TIME_H_MODULE_INDICATOR_DEFAULTS])
+ AC_REQUIRE([gl_TIME_H_DEFAULTS])
+])
+
+AC_DEFUN([gl_TIME_H_DEFAULTS],
[
- GNULIB_CTIME=0; AC_SUBST([GNULIB_CTIME])
- GNULIB_MKTIME=0; AC_SUBST([GNULIB_MKTIME])
- GNULIB_LOCALTIME=0; AC_SUBST([GNULIB_LOCALTIME])
- GNULIB_NANOSLEEP=0; AC_SUBST([GNULIB_NANOSLEEP])
- GNULIB_STRFTIME=0; AC_SUBST([GNULIB_STRFTIME])
- GNULIB_STRPTIME=0; AC_SUBST([GNULIB_STRPTIME])
- GNULIB_TIMEGM=0; AC_SUBST([GNULIB_TIMEGM])
- GNULIB_TIMESPEC_GET=0; AC_SUBST([GNULIB_TIMESPEC_GET])
- GNULIB_TIME_R=0; AC_SUBST([GNULIB_TIME_R])
- GNULIB_TIME_RZ=0; AC_SUBST([GNULIB_TIME_RZ])
- GNULIB_TZSET=0; AC_SUBST([GNULIB_TZSET])
- dnl Support Microsoft deprecated alias function names by default.
- GNULIB_MDA_TZSET=1; AC_SUBST([GNULIB_MDA_TZSET])
dnl Assume proper GNU behavior unless another module says otherwise.
HAVE_DECL_LOCALTIME_R=1; AC_SUBST([HAVE_DECL_LOCALTIME_R])
HAVE_NANOSLEEP=1; AC_SUBST([HAVE_NANOSLEEP])
HAVE_STRPTIME=1; AC_SUBST([HAVE_STRPTIME])
HAVE_TIMEGM=1; AC_SUBST([HAVE_TIMEGM])
HAVE_TIMESPEC_GET=1; AC_SUBST([HAVE_TIMESPEC_GET])
+ HAVE_TIMESPEC_GETRES=1; AC_SUBST([HAVE_TIMESPEC_GETRES])
dnl Even GNU libc does not have timezone_t yet.
HAVE_TIMEZONE_T=0; AC_SUBST([HAVE_TIMEZONE_T])
dnl If another module says to replace or to not replace, do that.
diff --git a/gnulib/import/m4/time_r.m4 b/gnulib/import/m4/time_r.m4
index 713e93ac263..8a1ad9dadf2 100644
--- a/gnulib/import/m4/time_r.m4
+++ b/gnulib/import/m4/time_r.m4
@@ -1,6 +1,6 @@
dnl Reentrant time functions: localtime_r, gmtime_r.
-dnl Copyright (C) 2003, 2006-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2003, 2006-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
@@ -12,7 +12,7 @@ AC_DEFUN([gl_TIME_R],
dnl Persuade glibc and Solaris <time.h> to declare localtime_r.
AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
- AC_REQUIRE([gl_HEADER_TIME_H_DEFAULTS])
+ AC_REQUIRE([gl_TIME_H_DEFAULTS])
AC_REQUIRE([AC_C_RESTRICT])
dnl Some systems don't declare localtime_r() and gmtime_r() if _REENTRANT is
diff --git a/gnulib/import/m4/unistd-safer.m4 b/gnulib/import/m4/unistd-safer.m4
index c205446fae7..33158a4805f 100644
--- a/gnulib/import/m4/unistd-safer.m4
+++ b/gnulib/import/m4/unistd-safer.m4
@@ -1,5 +1,5 @@
#serial 9
-dnl Copyright (C) 2002, 2005-2006, 2009-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2002, 2005-2006, 2009-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/unistd_h.m4 b/gnulib/import/m4/unistd_h.m4
index 0f26fb908d3..4c66ccc0a40 100644
--- a/gnulib/import/m4/unistd_h.m4
+++ b/gnulib/import/m4/unistd_h.m4
@@ -1,15 +1,15 @@
-# unistd_h.m4 serial 85
-dnl Copyright (C) 2006-2021 Free Software Foundation, Inc.
+# unistd_h.m4 serial 90
+dnl Copyright (C) 2006-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl Written by Simon Josefsson, Bruno Haible.
-AC_DEFUN([gl_UNISTD_H],
+AC_DEFUN_ONCE([gl_UNISTD_H],
[
- dnl Use AC_REQUIRE here, so that the default behavior below is expanded
- dnl once only, before all statements that occur in other macros.
+ dnl Ensure to expand the default settings once only, before all statements
+ dnl that occur in other macros.
AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
gl_CHECK_NEXT_HEADERS([unistd.h])
@@ -59,193 +59,212 @@ AC_DEFUN([gl_UNISTD_H],
fi
])
+# gl_UNISTD_MODULE_INDICATOR([modulename])
+# sets the shell variable that indicates the presence of the given module
+# to a C preprocessor expression that will evaluate to 1.
+# This macro invocation must not occur in macros that are AC_REQUIREd.
AC_DEFUN([gl_UNISTD_MODULE_INDICATOR],
[
- dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
- AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
+ dnl Ensure to expand the default settings once only.
+ gl_UNISTD_H_REQUIRE_DEFAULTS
gl_MODULE_INDICATOR_SET_VARIABLE([$1])
dnl Define it also as a C macro, for the benefit of the unit tests.
gl_MODULE_INDICATOR_FOR_TESTS([$1])
])
+# Initializes the default values for AC_SUBSTed shell variables.
+# This macro must not be AC_REQUIREd. It must only be invoked, and only
+# outside of macros or in macros that are not AC_REQUIREd.
+AC_DEFUN([gl_UNISTD_H_REQUIRE_DEFAULTS],
+[
+ m4_defun(GL_MODULE_INDICATOR_PREFIX[_UNISTD_H_MODULE_INDICATOR_DEFAULTS], [
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ACCESS])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CHDIR])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CHOWN])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CLOSE])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_COPY_FILE_RANGE])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_DUP])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_DUP2])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_DUP3])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ENVIRON])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EUIDACCESS])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXECL])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXECLE])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXECLP])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXECV])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXECVE])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXECVP])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXECVPE])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FACCESSAT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FCHDIR])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FCHOWNAT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FDATASYNC])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FSYNC])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FTRUNCATE])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETCWD])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETDOMAINNAME])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETDTABLESIZE])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETENTROPY])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETGROUPS])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETHOSTNAME])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETLOGIN])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETLOGIN_R])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETOPT_POSIX])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETPAGESIZE])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETPASS])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETPASS_GNU])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETUSERSHELL])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GROUP_MEMBER])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISATTY])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LCHOWN])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LINK])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LINKAT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LSEEK])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PIPE])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PIPE2])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PREAD])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PWRITE])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_READ])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_READLINK])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_READLINKAT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RMDIR])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SETHOSTNAME])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SLEEP])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SYMLINK])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SYMLINKAT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TRUNCATE])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TTYNAME_R])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNISTD_H_GETOPT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNISTD_H_NONBLOCKING])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNISTD_H_SIGPIPE])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNLINK])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNLINKAT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_USLEEP])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WRITE])
+ dnl Support Microsoft deprecated alias function names by default.
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_ACCESS], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_CHDIR], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_CLOSE], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_DUP], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_DUP2], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_EXECL], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_EXECLE], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_EXECLP], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_EXECV], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_EXECVE], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_EXECVP], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_EXECVPE], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_GETCWD], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_GETPID], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_ISATTY], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_LSEEK], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_READ], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_RMDIR], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_SWAB], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_UNLINK], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_WRITE], [1])
+ ])
+ m4_require(GL_MODULE_INDICATOR_PREFIX[_UNISTD_H_MODULE_INDICATOR_DEFAULTS])
+ AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
+])
+
AC_DEFUN([gl_UNISTD_H_DEFAULTS],
[
- GNULIB_ACCESS=0; AC_SUBST([GNULIB_ACCESS])
- GNULIB_CHDIR=0; AC_SUBST([GNULIB_CHDIR])
- GNULIB_CHOWN=0; AC_SUBST([GNULIB_CHOWN])
- GNULIB_CLOSE=0; AC_SUBST([GNULIB_CLOSE])
- GNULIB_COPY_FILE_RANGE=0; AC_SUBST([GNULIB_COPY_FILE_RANGE])
- GNULIB_DUP=0; AC_SUBST([GNULIB_DUP])
- GNULIB_DUP2=0; AC_SUBST([GNULIB_DUP2])
- GNULIB_DUP3=0; AC_SUBST([GNULIB_DUP3])
- GNULIB_ENVIRON=0; AC_SUBST([GNULIB_ENVIRON])
- GNULIB_EUIDACCESS=0; AC_SUBST([GNULIB_EUIDACCESS])
- GNULIB_EXECL=0; AC_SUBST([GNULIB_EXECL])
- GNULIB_EXECLE=0; AC_SUBST([GNULIB_EXECLE])
- GNULIB_EXECLP=0; AC_SUBST([GNULIB_EXECLP])
- GNULIB_EXECV=0; AC_SUBST([GNULIB_EXECV])
- GNULIB_EXECVE=0; AC_SUBST([GNULIB_EXECVE])
- GNULIB_EXECVP=0; AC_SUBST([GNULIB_EXECVP])
- GNULIB_EXECVPE=0; AC_SUBST([GNULIB_EXECVPE])
- GNULIB_FACCESSAT=0; AC_SUBST([GNULIB_FACCESSAT])
- GNULIB_FCHDIR=0; AC_SUBST([GNULIB_FCHDIR])
- GNULIB_FCHOWNAT=0; AC_SUBST([GNULIB_FCHOWNAT])
- GNULIB_FDATASYNC=0; AC_SUBST([GNULIB_FDATASYNC])
- GNULIB_FSYNC=0; AC_SUBST([GNULIB_FSYNC])
- GNULIB_FTRUNCATE=0; AC_SUBST([GNULIB_FTRUNCATE])
- GNULIB_GETCWD=0; AC_SUBST([GNULIB_GETCWD])
- GNULIB_GETDOMAINNAME=0; AC_SUBST([GNULIB_GETDOMAINNAME])
- GNULIB_GETDTABLESIZE=0; AC_SUBST([GNULIB_GETDTABLESIZE])
- GNULIB_GETENTROPY=0; AC_SUBST([GNULIB_GETENTROPY])
- GNULIB_GETGROUPS=0; AC_SUBST([GNULIB_GETGROUPS])
- GNULIB_GETHOSTNAME=0; AC_SUBST([GNULIB_GETHOSTNAME])
- GNULIB_GETLOGIN=0; AC_SUBST([GNULIB_GETLOGIN])
- GNULIB_GETLOGIN_R=0; AC_SUBST([GNULIB_GETLOGIN_R])
- GNULIB_GETOPT_POSIX=0; AC_SUBST([GNULIB_GETOPT_POSIX])
- GNULIB_GETPAGESIZE=0; AC_SUBST([GNULIB_GETPAGESIZE])
- GNULIB_GETPASS=0; AC_SUBST([GNULIB_GETPASS])
- GNULIB_GETUSERSHELL=0; AC_SUBST([GNULIB_GETUSERSHELL])
- GNULIB_GROUP_MEMBER=0; AC_SUBST([GNULIB_GROUP_MEMBER])
- GNULIB_ISATTY=0; AC_SUBST([GNULIB_ISATTY])
- GNULIB_LCHOWN=0; AC_SUBST([GNULIB_LCHOWN])
- GNULIB_LINK=0; AC_SUBST([GNULIB_LINK])
- GNULIB_LINKAT=0; AC_SUBST([GNULIB_LINKAT])
- GNULIB_LSEEK=0; AC_SUBST([GNULIB_LSEEK])
- GNULIB_PIPE=0; AC_SUBST([GNULIB_PIPE])
- GNULIB_PIPE2=0; AC_SUBST([GNULIB_PIPE2])
- GNULIB_PREAD=0; AC_SUBST([GNULIB_PREAD])
- GNULIB_PWRITE=0; AC_SUBST([GNULIB_PWRITE])
- GNULIB_READ=0; AC_SUBST([GNULIB_READ])
- GNULIB_READLINK=0; AC_SUBST([GNULIB_READLINK])
- GNULIB_READLINKAT=0; AC_SUBST([GNULIB_READLINKAT])
- GNULIB_RMDIR=0; AC_SUBST([GNULIB_RMDIR])
- GNULIB_SETHOSTNAME=0; AC_SUBST([GNULIB_SETHOSTNAME])
- GNULIB_SLEEP=0; AC_SUBST([GNULIB_SLEEP])
- GNULIB_SYMLINK=0; AC_SUBST([GNULIB_SYMLINK])
- GNULIB_SYMLINKAT=0; AC_SUBST([GNULIB_SYMLINKAT])
- GNULIB_TRUNCATE=0; AC_SUBST([GNULIB_TRUNCATE])
- GNULIB_TTYNAME_R=0; AC_SUBST([GNULIB_TTYNAME_R])
- GNULIB_UNISTD_H_NONBLOCKING=0; AC_SUBST([GNULIB_UNISTD_H_NONBLOCKING])
- GNULIB_UNISTD_H_SIGPIPE=0; AC_SUBST([GNULIB_UNISTD_H_SIGPIPE])
- GNULIB_UNLINK=0; AC_SUBST([GNULIB_UNLINK])
- GNULIB_UNLINKAT=0; AC_SUBST([GNULIB_UNLINKAT])
- GNULIB_USLEEP=0; AC_SUBST([GNULIB_USLEEP])
- GNULIB_WRITE=0; AC_SUBST([GNULIB_WRITE])
- dnl Support Microsoft deprecated alias function names by default.
- GNULIB_MDA_ACCESS=1; AC_SUBST([GNULIB_MDA_ACCESS])
- GNULIB_MDA_CHDIR=1; AC_SUBST([GNULIB_MDA_CHDIR])
- GNULIB_MDA_CLOSE=1; AC_SUBST([GNULIB_MDA_CLOSE])
- GNULIB_MDA_DUP=1; AC_SUBST([GNULIB_MDA_DUP])
- GNULIB_MDA_DUP2=1; AC_SUBST([GNULIB_MDA_DUP2])
- GNULIB_MDA_EXECL=1; AC_SUBST([GNULIB_MDA_EXECL])
- GNULIB_MDA_EXECLE=1; AC_SUBST([GNULIB_MDA_EXECLE])
- GNULIB_MDA_EXECLP=1; AC_SUBST([GNULIB_MDA_EXECLP])
- GNULIB_MDA_EXECV=1; AC_SUBST([GNULIB_MDA_EXECV])
- GNULIB_MDA_EXECVE=1; AC_SUBST([GNULIB_MDA_EXECVE])
- GNULIB_MDA_EXECVP=1; AC_SUBST([GNULIB_MDA_EXECVP])
- GNULIB_MDA_EXECVPE=1; AC_SUBST([GNULIB_MDA_EXECVPE])
- GNULIB_MDA_GETCWD=1; AC_SUBST([GNULIB_MDA_GETCWD])
- GNULIB_MDA_GETPID=1; AC_SUBST([GNULIB_MDA_GETPID])
- GNULIB_MDA_ISATTY=1; AC_SUBST([GNULIB_MDA_ISATTY])
- GNULIB_MDA_LSEEK=1; AC_SUBST([GNULIB_MDA_LSEEK])
- GNULIB_MDA_READ=1; AC_SUBST([GNULIB_MDA_READ])
- GNULIB_MDA_RMDIR=1; AC_SUBST([GNULIB_MDA_RMDIR])
- GNULIB_MDA_SWAB=1; AC_SUBST([GNULIB_MDA_SWAB])
- GNULIB_MDA_UNLINK=1; AC_SUBST([GNULIB_MDA_UNLINK])
- GNULIB_MDA_WRITE=1; AC_SUBST([GNULIB_MDA_WRITE])
dnl Assume proper GNU behavior unless another module says otherwise.
- HAVE_CHOWN=1; AC_SUBST([HAVE_CHOWN])
- HAVE_COPY_FILE_RANGE=1; AC_SUBST([HAVE_COPY_FILE_RANGE])
- HAVE_DUP3=1; AC_SUBST([HAVE_DUP3])
- HAVE_EUIDACCESS=1; AC_SUBST([HAVE_EUIDACCESS])
- HAVE_EXECVPE=1; AC_SUBST([HAVE_EXECVPE])
- HAVE_FACCESSAT=1; AC_SUBST([HAVE_FACCESSAT])
- HAVE_FCHDIR=1; AC_SUBST([HAVE_FCHDIR])
- HAVE_FCHOWNAT=1; AC_SUBST([HAVE_FCHOWNAT])
- HAVE_FDATASYNC=1; AC_SUBST([HAVE_FDATASYNC])
- HAVE_FSYNC=1; AC_SUBST([HAVE_FSYNC])
- HAVE_FTRUNCATE=1; AC_SUBST([HAVE_FTRUNCATE])
- HAVE_GETDTABLESIZE=1; AC_SUBST([HAVE_GETDTABLESIZE])
- HAVE_GETENTROPY=1; AC_SUBST([HAVE_GETENTROPY])
- HAVE_GETGROUPS=1; AC_SUBST([HAVE_GETGROUPS])
- HAVE_GETHOSTNAME=1; AC_SUBST([HAVE_GETHOSTNAME])
- HAVE_GETLOGIN=1; AC_SUBST([HAVE_GETLOGIN])
- HAVE_GETPAGESIZE=1; AC_SUBST([HAVE_GETPAGESIZE])
- HAVE_GETPASS=1; AC_SUBST([HAVE_GETPASS])
- HAVE_GROUP_MEMBER=1; AC_SUBST([HAVE_GROUP_MEMBER])
- HAVE_LCHOWN=1; AC_SUBST([HAVE_LCHOWN])
- HAVE_LINK=1; AC_SUBST([HAVE_LINK])
- HAVE_LINKAT=1; AC_SUBST([HAVE_LINKAT])
- HAVE_PIPE=1; AC_SUBST([HAVE_PIPE])
- HAVE_PIPE2=1; AC_SUBST([HAVE_PIPE2])
- HAVE_PREAD=1; AC_SUBST([HAVE_PREAD])
- HAVE_PWRITE=1; AC_SUBST([HAVE_PWRITE])
- HAVE_READLINK=1; AC_SUBST([HAVE_READLINK])
- HAVE_READLINKAT=1; AC_SUBST([HAVE_READLINKAT])
- HAVE_SETHOSTNAME=1; AC_SUBST([HAVE_SETHOSTNAME])
- HAVE_SLEEP=1; AC_SUBST([HAVE_SLEEP])
- HAVE_SYMLINK=1; AC_SUBST([HAVE_SYMLINK])
- HAVE_SYMLINKAT=1; AC_SUBST([HAVE_SYMLINKAT])
- HAVE_UNLINKAT=1; AC_SUBST([HAVE_UNLINKAT])
- HAVE_USLEEP=1; AC_SUBST([HAVE_USLEEP])
- HAVE_DECL_ENVIRON=1; AC_SUBST([HAVE_DECL_ENVIRON])
- HAVE_DECL_EXECVPE=1; AC_SUBST([HAVE_DECL_EXECVPE])
- HAVE_DECL_FCHDIR=1; AC_SUBST([HAVE_DECL_FCHDIR])
- HAVE_DECL_FDATASYNC=1; AC_SUBST([HAVE_DECL_FDATASYNC])
- HAVE_DECL_GETDOMAINNAME=1; AC_SUBST([HAVE_DECL_GETDOMAINNAME])
- HAVE_DECL_GETLOGIN=1; AC_SUBST([HAVE_DECL_GETLOGIN])
- HAVE_DECL_GETLOGIN_R=1; AC_SUBST([HAVE_DECL_GETLOGIN_R])
- HAVE_DECL_GETPAGESIZE=1; AC_SUBST([HAVE_DECL_GETPAGESIZE])
- HAVE_DECL_GETUSERSHELL=1; AC_SUBST([HAVE_DECL_GETUSERSHELL])
- HAVE_DECL_SETHOSTNAME=1; AC_SUBST([HAVE_DECL_SETHOSTNAME])
- HAVE_DECL_TRUNCATE=1; AC_SUBST([HAVE_DECL_TRUNCATE])
- HAVE_DECL_TTYNAME_R=1; AC_SUBST([HAVE_DECL_TTYNAME_R])
- HAVE_OS_H=0; AC_SUBST([HAVE_OS_H])
- HAVE_SYS_PARAM_H=0; AC_SUBST([HAVE_SYS_PARAM_H])
- REPLACE_ACCESS=0; AC_SUBST([REPLACE_ACCESS])
- REPLACE_CHOWN=0; AC_SUBST([REPLACE_CHOWN])
- REPLACE_CLOSE=0; AC_SUBST([REPLACE_CLOSE])
- REPLACE_DUP=0; AC_SUBST([REPLACE_DUP])
- REPLACE_DUP2=0; AC_SUBST([REPLACE_DUP2])
- REPLACE_EXECL=0; AC_SUBST([REPLACE_EXECL])
- REPLACE_EXECLE=0; AC_SUBST([REPLACE_EXECLE])
- REPLACE_EXECLP=0; AC_SUBST([REPLACE_EXECLP])
- REPLACE_EXECV=0; AC_SUBST([REPLACE_EXECV])
- REPLACE_EXECVE=0; AC_SUBST([REPLACE_EXECVE])
- REPLACE_EXECVP=0; AC_SUBST([REPLACE_EXECVP])
- REPLACE_EXECVPE=0; AC_SUBST([REPLACE_EXECVPE])
- REPLACE_FACCESSAT=0; AC_SUBST([REPLACE_FACCESSAT])
- REPLACE_FCHOWNAT=0; AC_SUBST([REPLACE_FCHOWNAT])
- REPLACE_FTRUNCATE=0; AC_SUBST([REPLACE_FTRUNCATE])
- REPLACE_GETCWD=0; AC_SUBST([REPLACE_GETCWD])
- REPLACE_GETDOMAINNAME=0; AC_SUBST([REPLACE_GETDOMAINNAME])
- REPLACE_GETDTABLESIZE=0; AC_SUBST([REPLACE_GETDTABLESIZE])
- REPLACE_GETLOGIN_R=0; AC_SUBST([REPLACE_GETLOGIN_R])
- REPLACE_GETGROUPS=0; AC_SUBST([REPLACE_GETGROUPS])
- REPLACE_GETPAGESIZE=0; AC_SUBST([REPLACE_GETPAGESIZE])
- REPLACE_GETPASS=0; AC_SUBST([REPLACE_GETPASS])
- REPLACE_ISATTY=0; AC_SUBST([REPLACE_ISATTY])
- REPLACE_LCHOWN=0; AC_SUBST([REPLACE_LCHOWN])
- REPLACE_LINK=0; AC_SUBST([REPLACE_LINK])
- REPLACE_LINKAT=0; AC_SUBST([REPLACE_LINKAT])
- REPLACE_LSEEK=0; AC_SUBST([REPLACE_LSEEK])
- REPLACE_PREAD=0; AC_SUBST([REPLACE_PREAD])
- REPLACE_PWRITE=0; AC_SUBST([REPLACE_PWRITE])
- REPLACE_READ=0; AC_SUBST([REPLACE_READ])
- REPLACE_READLINK=0; AC_SUBST([REPLACE_READLINK])
- REPLACE_READLINKAT=0; AC_SUBST([REPLACE_READLINKAT])
- REPLACE_RMDIR=0; AC_SUBST([REPLACE_RMDIR])
- REPLACE_SLEEP=0; AC_SUBST([REPLACE_SLEEP])
- REPLACE_SYMLINK=0; AC_SUBST([REPLACE_SYMLINK])
- REPLACE_SYMLINKAT=0; AC_SUBST([REPLACE_SYMLINKAT])
- REPLACE_TRUNCATE=0; AC_SUBST([REPLACE_TRUNCATE])
- REPLACE_TTYNAME_R=0; AC_SUBST([REPLACE_TTYNAME_R])
- REPLACE_UNLINK=0; AC_SUBST([REPLACE_UNLINK])
- REPLACE_UNLINKAT=0; AC_SUBST([REPLACE_UNLINKAT])
- REPLACE_USLEEP=0; AC_SUBST([REPLACE_USLEEP])
- REPLACE_WRITE=0; AC_SUBST([REPLACE_WRITE])
- UNISTD_H_HAVE_SYS_RANDOM_H=0; AC_SUBST([UNISTD_H_HAVE_SYS_RANDOM_H])
- UNISTD_H_HAVE_WINSOCK2_H=0; AC_SUBST([UNISTD_H_HAVE_WINSOCK2_H])
+ HAVE_CHOWN=1; AC_SUBST([HAVE_CHOWN])
+ HAVE_COPY_FILE_RANGE=1; AC_SUBST([HAVE_COPY_FILE_RANGE])
+ HAVE_DUP3=1; AC_SUBST([HAVE_DUP3])
+ HAVE_EUIDACCESS=1; AC_SUBST([HAVE_EUIDACCESS])
+ HAVE_EXECVPE=1; AC_SUBST([HAVE_EXECVPE])
+ HAVE_FACCESSAT=1; AC_SUBST([HAVE_FACCESSAT])
+ HAVE_FCHDIR=1; AC_SUBST([HAVE_FCHDIR])
+ HAVE_FCHOWNAT=1; AC_SUBST([HAVE_FCHOWNAT])
+ HAVE_FDATASYNC=1; AC_SUBST([HAVE_FDATASYNC])
+ HAVE_FSYNC=1; AC_SUBST([HAVE_FSYNC])
+ HAVE_FTRUNCATE=1; AC_SUBST([HAVE_FTRUNCATE])
+ HAVE_GETDTABLESIZE=1; AC_SUBST([HAVE_GETDTABLESIZE])
+ HAVE_GETENTROPY=1; AC_SUBST([HAVE_GETENTROPY])
+ HAVE_GETGROUPS=1; AC_SUBST([HAVE_GETGROUPS])
+ HAVE_GETHOSTNAME=1; AC_SUBST([HAVE_GETHOSTNAME])
+ HAVE_GETLOGIN=1; AC_SUBST([HAVE_GETLOGIN])
+ HAVE_GETPAGESIZE=1; AC_SUBST([HAVE_GETPAGESIZE])
+ HAVE_GETPASS=1; AC_SUBST([HAVE_GETPASS])
+ HAVE_GROUP_MEMBER=1; AC_SUBST([HAVE_GROUP_MEMBER])
+ HAVE_LCHOWN=1; AC_SUBST([HAVE_LCHOWN])
+ HAVE_LINK=1; AC_SUBST([HAVE_LINK])
+ HAVE_LINKAT=1; AC_SUBST([HAVE_LINKAT])
+ HAVE_PIPE=1; AC_SUBST([HAVE_PIPE])
+ HAVE_PIPE2=1; AC_SUBST([HAVE_PIPE2])
+ HAVE_PREAD=1; AC_SUBST([HAVE_PREAD])
+ HAVE_PWRITE=1; AC_SUBST([HAVE_PWRITE])
+ HAVE_READLINK=1; AC_SUBST([HAVE_READLINK])
+ HAVE_READLINKAT=1; AC_SUBST([HAVE_READLINKAT])
+ HAVE_SETHOSTNAME=1; AC_SUBST([HAVE_SETHOSTNAME])
+ HAVE_SLEEP=1; AC_SUBST([HAVE_SLEEP])
+ HAVE_SYMLINK=1; AC_SUBST([HAVE_SYMLINK])
+ HAVE_SYMLINKAT=1; AC_SUBST([HAVE_SYMLINKAT])
+ HAVE_UNLINKAT=1; AC_SUBST([HAVE_UNLINKAT])
+ HAVE_USLEEP=1; AC_SUBST([HAVE_USLEEP])
+ HAVE_DECL_ENVIRON=1; AC_SUBST([HAVE_DECL_ENVIRON])
+ HAVE_DECL_EXECVPE=1; AC_SUBST([HAVE_DECL_EXECVPE])
+ HAVE_DECL_FCHDIR=1; AC_SUBST([HAVE_DECL_FCHDIR])
+ HAVE_DECL_FDATASYNC=1; AC_SUBST([HAVE_DECL_FDATASYNC])
+ HAVE_DECL_GETDOMAINNAME=1; AC_SUBST([HAVE_DECL_GETDOMAINNAME])
+ HAVE_DECL_GETLOGIN=1; AC_SUBST([HAVE_DECL_GETLOGIN])
+ HAVE_DECL_GETLOGIN_R=1; AC_SUBST([HAVE_DECL_GETLOGIN_R])
+ HAVE_DECL_GETPAGESIZE=1; AC_SUBST([HAVE_DECL_GETPAGESIZE])
+ HAVE_DECL_GETUSERSHELL=1; AC_SUBST([HAVE_DECL_GETUSERSHELL])
+ HAVE_DECL_SETHOSTNAME=1; AC_SUBST([HAVE_DECL_SETHOSTNAME])
+ HAVE_DECL_TRUNCATE=1; AC_SUBST([HAVE_DECL_TRUNCATE])
+ HAVE_DECL_TTYNAME_R=1; AC_SUBST([HAVE_DECL_TTYNAME_R])
+ HAVE_OS_H=0; AC_SUBST([HAVE_OS_H])
+ HAVE_SYS_PARAM_H=0; AC_SUBST([HAVE_SYS_PARAM_H])
+ REPLACE_ACCESS=0; AC_SUBST([REPLACE_ACCESS])
+ REPLACE_CHOWN=0; AC_SUBST([REPLACE_CHOWN])
+ REPLACE_CLOSE=0; AC_SUBST([REPLACE_CLOSE])
+ REPLACE_COPY_FILE_RANGE=0; AC_SUBST([REPLACE_COPY_FILE_RANGE])
+ REPLACE_DUP=0; AC_SUBST([REPLACE_DUP])
+ REPLACE_DUP2=0; AC_SUBST([REPLACE_DUP2])
+ REPLACE_EXECL=0; AC_SUBST([REPLACE_EXECL])
+ REPLACE_EXECLE=0; AC_SUBST([REPLACE_EXECLE])
+ REPLACE_EXECLP=0; AC_SUBST([REPLACE_EXECLP])
+ REPLACE_EXECV=0; AC_SUBST([REPLACE_EXECV])
+ REPLACE_EXECVE=0; AC_SUBST([REPLACE_EXECVE])
+ REPLACE_EXECVP=0; AC_SUBST([REPLACE_EXECVP])
+ REPLACE_EXECVPE=0; AC_SUBST([REPLACE_EXECVPE])
+ REPLACE_FACCESSAT=0; AC_SUBST([REPLACE_FACCESSAT])
+ REPLACE_FCHOWNAT=0; AC_SUBST([REPLACE_FCHOWNAT])
+ REPLACE_FTRUNCATE=0; AC_SUBST([REPLACE_FTRUNCATE])
+ REPLACE_GETCWD=0; AC_SUBST([REPLACE_GETCWD])
+ REPLACE_GETDOMAINNAME=0; AC_SUBST([REPLACE_GETDOMAINNAME])
+ REPLACE_GETDTABLESIZE=0; AC_SUBST([REPLACE_GETDTABLESIZE])
+ REPLACE_GETLOGIN_R=0; AC_SUBST([REPLACE_GETLOGIN_R])
+ REPLACE_GETGROUPS=0; AC_SUBST([REPLACE_GETGROUPS])
+ REPLACE_GETPAGESIZE=0; AC_SUBST([REPLACE_GETPAGESIZE])
+ REPLACE_GETPASS=0; AC_SUBST([REPLACE_GETPASS])
+ REPLACE_GETPASS_FOR_GETPASS_GNU=0; AC_SUBST([REPLACE_GETPASS_FOR_GETPASS_GNU])
+ REPLACE_ISATTY=0; AC_SUBST([REPLACE_ISATTY])
+ REPLACE_LCHOWN=0; AC_SUBST([REPLACE_LCHOWN])
+ REPLACE_LINK=0; AC_SUBST([REPLACE_LINK])
+ REPLACE_LINKAT=0; AC_SUBST([REPLACE_LINKAT])
+ REPLACE_LSEEK=0; AC_SUBST([REPLACE_LSEEK])
+ REPLACE_PREAD=0; AC_SUBST([REPLACE_PREAD])
+ REPLACE_PWRITE=0; AC_SUBST([REPLACE_PWRITE])
+ REPLACE_READ=0; AC_SUBST([REPLACE_READ])
+ REPLACE_READLINK=0; AC_SUBST([REPLACE_READLINK])
+ REPLACE_READLINKAT=0; AC_SUBST([REPLACE_READLINKAT])
+ REPLACE_RMDIR=0; AC_SUBST([REPLACE_RMDIR])
+ REPLACE_SLEEP=0; AC_SUBST([REPLACE_SLEEP])
+ REPLACE_SYMLINK=0; AC_SUBST([REPLACE_SYMLINK])
+ REPLACE_SYMLINKAT=0; AC_SUBST([REPLACE_SYMLINKAT])
+ REPLACE_TRUNCATE=0; AC_SUBST([REPLACE_TRUNCATE])
+ REPLACE_TTYNAME_R=0; AC_SUBST([REPLACE_TTYNAME_R])
+ REPLACE_UNLINK=0; AC_SUBST([REPLACE_UNLINK])
+ REPLACE_UNLINKAT=0; AC_SUBST([REPLACE_UNLINKAT])
+ REPLACE_USLEEP=0; AC_SUBST([REPLACE_USLEEP])
+ REPLACE_WRITE=0; AC_SUBST([REPLACE_WRITE])
+ UNISTD_H_HAVE_SYS_RANDOM_H=0; AC_SUBST([UNISTD_H_HAVE_SYS_RANDOM_H])
+ UNISTD_H_HAVE_WINSOCK2_H=0; AC_SUBST([UNISTD_H_HAVE_WINSOCK2_H])
UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=0;
AC_SUBST([UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS])
])
diff --git a/gnulib/import/m4/vararrays.m4 b/gnulib/import/m4/vararrays.m4
new file mode 100644
index 00000000000..28e22a49df6
--- /dev/null
+++ b/gnulib/import/m4/vararrays.m4
@@ -0,0 +1,72 @@
+# Check for variable-length arrays.
+
+# serial 6
+
+# From Paul Eggert
+
+# Copyright (C) 2001, 2009-2022 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.
+
+m4_version_prereq([2.70], [], [
+
+# AC_C_VARARRAYS
+# --------------
+# Check whether the C compiler supports variable-length arrays.
+AC_DEFUN([AC_C_VARARRAYS],
+[
+ AC_CACHE_CHECK([for variable-length arrays],
+ ac_cv_c_vararrays,
+ [AC_EGREP_CPP([defined],
+ [#ifdef __STDC_NO_VLA__
+ defined
+ #endif
+ ],
+ [ac_cv_c_vararrays='no: __STDC_NO_VLA__ is defined'],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[/* Test for VLA support. This test is partly inspired
+ from examples in the C standard. Use at least two VLA
+ functions to detect the GCC 3.4.3 bug described in:
+ https://lists.gnu.org/archive/html/bug-gnulib/2014-08/msg00014.html
+ */
+ #ifdef __STDC_NO_VLA__
+ syntax error;
+ #else
+ extern int n;
+ int B[100];
+ int fvla (int m, int C[m][m]);
+
+ int
+ simple (int count, int all[static count])
+ {
+ return all[count - 1];
+ }
+
+ int
+ fvla (int m, int C[m][m])
+ {
+ typedef int VLA[m][m];
+ VLA x;
+ int D[m];
+ static int (*q)[m] = &B;
+ int (*s)[n] = q;
+ return C && &x[0][0] == &D[0] && &D[0] == s[0];
+ }
+ #endif
+ ]])],
+ [ac_cv_c_vararrays=yes],
+ [ac_cv_c_vararrays=no])])])
+ if test "$ac_cv_c_vararrays" = yes; then
+ dnl This is for compatibility with Autoconf 2.61-2.69.
+ AC_DEFINE([HAVE_C_VARARRAYS], 1,
+ [Define to 1 if C supports variable-length arrays.])
+ elif test "$ac_cv_c_vararrays" = no; then
+ AC_DEFINE([__STDC_NO_VLA__], 1,
+ [Define to 1 if C does not support variable-length arrays, and
+ if the compiler does not already define this.])
+ fi
+])
+
+])
diff --git a/gnulib/import/m4/visibility.m4 b/gnulib/import/m4/visibility.m4
index 6e4b461507b..4a212a4e5ef 100644
--- a/gnulib/import/m4/visibility.m4
+++ b/gnulib/import/m4/visibility.m4
@@ -1,5 +1,5 @@
-# visibility.m4 serial 6
-dnl Copyright (C) 2005, 2008, 2010-2021 Free Software Foundation, Inc.
+# visibility.m4 serial 8
+dnl Copyright (C) 2005, 2008, 2010-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
@@ -58,6 +58,11 @@ AC_DEFUN([gl_VISIBILITY],
extern __attribute__((__visibility__("default"))) int exportedvar;
extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void);
extern __attribute__((__visibility__("default"))) int exportedfunc (void);
+ void dummyfunc (void);
+ int hiddenvar;
+ int exportedvar;
+ int hiddenfunc (void) { return 51; }
+ int exportedfunc (void) { return 1225736919; }
void dummyfunc (void) {}
]],
[[]])],
diff --git a/gnulib/import/m4/warn-on-use.m4 b/gnulib/import/m4/warn-on-use.m4
index 04edfe85d49..d43355ab174 100644
--- a/gnulib/import/m4/warn-on-use.m4
+++ b/gnulib/import/m4/warn-on-use.m4
@@ -1,5 +1,5 @@
# warn-on-use.m4 serial 9
-dnl Copyright (C) 2010-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2010-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/wchar_h.m4 b/gnulib/import/m4/wchar_h.m4
index 59c55fcda02..4baba1af05a 100644
--- a/gnulib/import/m4/wchar_h.m4
+++ b/gnulib/import/m4/wchar_h.m4
@@ -1,15 +1,15 @@
dnl A placeholder for ISO C99 <wchar.h>, for platforms that have issues.
-dnl Copyright (C) 2007-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2007-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl Written by Eric Blake.
-# wchar_h.m4 serial 50
+# wchar_h.m4 serial 55
-AC_DEFUN([gl_WCHAR_H],
+AC_DEFUN_ONCE([gl_WCHAR_H],
[
AC_REQUIRE([gl_WCHAR_H_DEFAULTS])
AC_REQUIRE([gl_WCHAR_H_INLINE_OK])
@@ -125,60 +125,77 @@ Configuration aborted.])
fi
])
+# gl_WCHAR_MODULE_INDICATOR([modulename])
+# sets the shell variable that indicates the presence of the given module
+# to a C preprocessor expression that will evaluate to 1.
+# This macro invocation must not occur in macros that are AC_REQUIREd.
AC_DEFUN([gl_WCHAR_MODULE_INDICATOR],
[
- dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
- AC_REQUIRE([gl_WCHAR_H_DEFAULTS])
+ dnl Ensure to expand the default settings once only.
+ gl_WCHAR_H_REQUIRE_DEFAULTS
gl_MODULE_INDICATOR_SET_VARIABLE([$1])
dnl Define it also as a C macro, for the benefit of the unit tests.
gl_MODULE_INDICATOR_FOR_TESTS([$1])
])
+# Initializes the default values for AC_SUBSTed shell variables.
+# This macro must not be AC_REQUIREd. It must only be invoked, and only
+# outside of macros or in macros that are not AC_REQUIREd.
+AC_DEFUN([gl_WCHAR_H_REQUIRE_DEFAULTS],
+[
+ m4_defun(GL_MODULE_INDICATOR_PREFIX[_WCHAR_H_MODULE_INDICATOR_DEFAULTS], [
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_BTOWC])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCTOB])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSINIT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBRTOWC])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBRLEN])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSRTOWCS])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSNRTOWCS])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCRTOMB])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSRTOMBS])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSNRTOMBS])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCWIDTH])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WMEMCHR])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WMEMCMP])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WMEMCPY])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WMEMMOVE])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WMEMPCPY])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WMEMSET])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSLEN])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSNLEN])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSCPY])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCPCPY])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSNCPY])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCPNCPY])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSCAT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSNCAT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSCMP])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSNCMP])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSCASECMP])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSNCASECMP])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSCOLL])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSXFRM])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSDUP])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSCHR])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSRCHR])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSCSPN])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSSPN])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSPBRK])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSSTR])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSTOK])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSWIDTH])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSFTIME])
+ dnl Support Microsoft deprecated alias function names by default.
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_WCSDUP], [1])
+ ])
+ m4_require(GL_MODULE_INDICATOR_PREFIX[_WCHAR_H_MODULE_INDICATOR_DEFAULTS])
+ dnl Make sure the shell variable for GNULIB_FREE_POSIX is initialized.
+ gl_STDLIB_H_REQUIRE_DEFAULTS
+ AC_REQUIRE([gl_WCHAR_H_DEFAULTS])
+])
+
AC_DEFUN([gl_WCHAR_H_DEFAULTS],
[
- GNULIB_BTOWC=0; AC_SUBST([GNULIB_BTOWC])
- GNULIB_WCTOB=0; AC_SUBST([GNULIB_WCTOB])
- GNULIB_MBSINIT=0; AC_SUBST([GNULIB_MBSINIT])
- GNULIB_MBRTOWC=0; AC_SUBST([GNULIB_MBRTOWC])
- GNULIB_MBRLEN=0; AC_SUBST([GNULIB_MBRLEN])
- GNULIB_MBSRTOWCS=0; AC_SUBST([GNULIB_MBSRTOWCS])
- GNULIB_MBSNRTOWCS=0; AC_SUBST([GNULIB_MBSNRTOWCS])
- GNULIB_WCRTOMB=0; AC_SUBST([GNULIB_WCRTOMB])
- GNULIB_WCSRTOMBS=0; AC_SUBST([GNULIB_WCSRTOMBS])
- GNULIB_WCSNRTOMBS=0; AC_SUBST([GNULIB_WCSNRTOMBS])
- GNULIB_WCWIDTH=0; AC_SUBST([GNULIB_WCWIDTH])
- GNULIB_WMEMCHR=0; AC_SUBST([GNULIB_WMEMCHR])
- GNULIB_WMEMCMP=0; AC_SUBST([GNULIB_WMEMCMP])
- GNULIB_WMEMCPY=0; AC_SUBST([GNULIB_WMEMCPY])
- GNULIB_WMEMMOVE=0; AC_SUBST([GNULIB_WMEMMOVE])
- GNULIB_WMEMPCPY=0; AC_SUBST([GNULIB_WMEMPCPY])
- GNULIB_WMEMSET=0; AC_SUBST([GNULIB_WMEMSET])
- GNULIB_WCSLEN=0; AC_SUBST([GNULIB_WCSLEN])
- GNULIB_WCSNLEN=0; AC_SUBST([GNULIB_WCSNLEN])
- GNULIB_WCSCPY=0; AC_SUBST([GNULIB_WCSCPY])
- GNULIB_WCPCPY=0; AC_SUBST([GNULIB_WCPCPY])
- GNULIB_WCSNCPY=0; AC_SUBST([GNULIB_WCSNCPY])
- GNULIB_WCPNCPY=0; AC_SUBST([GNULIB_WCPNCPY])
- GNULIB_WCSCAT=0; AC_SUBST([GNULIB_WCSCAT])
- GNULIB_WCSNCAT=0; AC_SUBST([GNULIB_WCSNCAT])
- GNULIB_WCSCMP=0; AC_SUBST([GNULIB_WCSCMP])
- GNULIB_WCSNCMP=0; AC_SUBST([GNULIB_WCSNCMP])
- GNULIB_WCSCASECMP=0; AC_SUBST([GNULIB_WCSCASECMP])
- GNULIB_WCSNCASECMP=0; AC_SUBST([GNULIB_WCSNCASECMP])
- GNULIB_WCSCOLL=0; AC_SUBST([GNULIB_WCSCOLL])
- GNULIB_WCSXFRM=0; AC_SUBST([GNULIB_WCSXFRM])
- GNULIB_WCSDUP=0; AC_SUBST([GNULIB_WCSDUP])
- GNULIB_WCSCHR=0; AC_SUBST([GNULIB_WCSCHR])
- GNULIB_WCSRCHR=0; AC_SUBST([GNULIB_WCSRCHR])
- GNULIB_WCSCSPN=0; AC_SUBST([GNULIB_WCSCSPN])
- GNULIB_WCSSPN=0; AC_SUBST([GNULIB_WCSSPN])
- GNULIB_WCSPBRK=0; AC_SUBST([GNULIB_WCSPBRK])
- GNULIB_WCSSTR=0; AC_SUBST([GNULIB_WCSSTR])
- GNULIB_WCSTOK=0; AC_SUBST([GNULIB_WCSTOK])
- GNULIB_WCSWIDTH=0; AC_SUBST([GNULIB_WCSWIDTH])
- GNULIB_WCSFTIME=0; AC_SUBST([GNULIB_WCSFTIME])
- dnl Support Microsoft deprecated alias function names by default.
- GNULIB_MDA_WCSDUP=1; AC_SUBST([GNULIB_MDA_WCSDUP])
dnl Assume proper GNU behavior unless another module says otherwise.
HAVE_BTOWC=1; AC_SUBST([HAVE_BTOWC])
HAVE_MBSINIT=1; AC_SUBST([HAVE_MBSINIT])
diff --git a/gnulib/import/m4/wchar_t.m4 b/gnulib/import/m4/wchar_t.m4
index 34db10e5cc0..268e3e51595 100644
--- a/gnulib/import/m4/wchar_t.m4
+++ b/gnulib/import/m4/wchar_t.m4
@@ -1,5 +1,5 @@
# wchar_t.m4 serial 4 (gettext-0.18.2)
-dnl Copyright (C) 2002-2003, 2008-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2002-2003, 2008-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/wctype_h.m4 b/gnulib/import/m4/wctype_h.m4
index 1ab0bc985af..702cb39cd52 100644
--- a/gnulib/import/m4/wctype_h.m4
+++ b/gnulib/import/m4/wctype_h.m4
@@ -1,15 +1,15 @@
-# wctype_h.m4 serial 26
+# wctype_h.m4 serial 30
dnl A placeholder for ISO C99 <wctype.h>, for platforms that lack it.
-dnl Copyright (C) 2006-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2006-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl Written by Paul Eggert.
-AC_DEFUN([gl_WCTYPE_H],
+AC_DEFUN_ONCE([gl_WCTYPE_H],
[
AC_REQUIRE([gl_WCTYPE_H_DEFAULTS])
AC_REQUIRE([AC_PROG_CC])
@@ -62,7 +62,7 @@ AC_DEFUN([gl_WCTYPE_H],
fi
AC_SUBST([HAVE_WCTYPE_H])
- if test $GNULIB_OVERRIDES_WINT_T = 1; then
+ if test $GNULIBHEADERS_OVERRIDE_WINT_T = 1; then
REPLACE_ISWCNTRL=1
else
case "$gl_cv_func_iswcntrl_works" in
@@ -157,24 +157,39 @@ AC_DEFUN([gl_WCTYPE_H],
])
])
+# gl_WCTYPE_MODULE_INDICATOR([modulename])
+# sets the shell variable that indicates the presence of the given module
+# to a C preprocessor expression that will evaluate to 1.
+# This macro invocation must not occur in macros that are AC_REQUIREd.
AC_DEFUN([gl_WCTYPE_MODULE_INDICATOR],
[
- dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
- AC_REQUIRE([gl_WCTYPE_H_DEFAULTS])
+ dnl Ensure to expand the default settings once only.
+ gl_WCTYPE_H_REQUIRE_DEFAULTS
gl_MODULE_INDICATOR_SET_VARIABLE([$1])
dnl Define it also as a C macro, for the benefit of the unit tests.
gl_MODULE_INDICATOR_FOR_TESTS([$1])
])
+# Initializes the default values for AC_SUBSTed shell variables.
+# This macro must not be AC_REQUIREd. It must only be invoked, and only
+# outside of macros or in macros that are not AC_REQUIREd.
+AC_DEFUN([gl_WCTYPE_H_REQUIRE_DEFAULTS],
+[
+ m4_defun(GL_MODULE_INDICATOR_PREFIX[_WCTYPE_H_MODULE_INDICATOR_DEFAULTS], [
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISWBLANK])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISWDIGIT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISWXDIGIT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCTYPE])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISWCTYPE])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCTRANS])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TOWCTRANS])
+ ])
+ m4_require(GL_MODULE_INDICATOR_PREFIX[_WCTYPE_H_MODULE_INDICATOR_DEFAULTS])
+ AC_REQUIRE([gl_WCTYPE_H_DEFAULTS])
+])
+
AC_DEFUN([gl_WCTYPE_H_DEFAULTS],
[
- GNULIB_ISWBLANK=0; AC_SUBST([GNULIB_ISWBLANK])
- GNULIB_ISWDIGIT=0; AC_SUBST([GNULIB_ISWDIGIT])
- GNULIB_ISWXDIGIT=0; AC_SUBST([GNULIB_ISWXDIGIT])
- GNULIB_WCTYPE=0; AC_SUBST([GNULIB_WCTYPE])
- GNULIB_ISWCTYPE=0; AC_SUBST([GNULIB_ISWCTYPE])
- GNULIB_WCTRANS=0; AC_SUBST([GNULIB_WCTRANS])
- GNULIB_TOWCTRANS=0; AC_SUBST([GNULIB_TOWCTRANS])
dnl Assume proper GNU behavior unless another module says otherwise.
HAVE_ISWBLANK=1; AC_SUBST([HAVE_ISWBLANK])
HAVE_WCTYPE_T=1; AC_SUBST([HAVE_WCTYPE_T])
diff --git a/gnulib/import/m4/wint_t.m4 b/gnulib/import/m4/wint_t.m4
index 2fc7467f422..adc5866140c 100644
--- a/gnulib/import/m4/wint_t.m4
+++ b/gnulib/import/m4/wint_t.m4
@@ -1,5 +1,5 @@
-# wint_t.m4 serial 10
-dnl Copyright (C) 2003, 2007-2021 Free Software Foundation, Inc.
+# wint_t.m4 serial 11
+dnl Copyright (C) 2003, 2007-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
@@ -34,14 +34,14 @@ AC_DEFUN([gt_TYPE_WINT_T],
[gl_cv_type_wint_t_large_enough=yes],
[gl_cv_type_wint_t_large_enough=no])])
if test $gl_cv_type_wint_t_large_enough = no; then
- GNULIB_OVERRIDES_WINT_T=1
+ GNULIBHEADERS_OVERRIDE_WINT_T=1
else
- GNULIB_OVERRIDES_WINT_T=0
+ GNULIBHEADERS_OVERRIDE_WINT_T=0
fi
else
- GNULIB_OVERRIDES_WINT_T=0
+ GNULIBHEADERS_OVERRIDE_WINT_T=0
fi
- AC_SUBST([GNULIB_OVERRIDES_WINT_T])
+ AC_SUBST([GNULIBHEADERS_OVERRIDE_WINT_T])
])
dnl Prerequisites of the 'wint_t' override.
diff --git a/gnulib/import/m4/wmemchr.m4 b/gnulib/import/m4/wmemchr.m4
index a5b4eb7b260..e75b5519622 100644
--- a/gnulib/import/m4/wmemchr.m4
+++ b/gnulib/import/m4/wmemchr.m4
@@ -1,5 +1,5 @@
# wmemchr.m4 serial 5
-dnl Copyright (C) 2011-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2011-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/wmempcpy.m4 b/gnulib/import/m4/wmempcpy.m4
index 9d774ae77cc..9765039b0c3 100644
--- a/gnulib/import/m4/wmempcpy.m4
+++ b/gnulib/import/m4/wmempcpy.m4
@@ -1,5 +1,5 @@
# wmempcpy.m4 serial 1
-dnl Copyright (C) 2020-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2020-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/m4/year2038.m4 b/gnulib/import/m4/year2038.m4
new file mode 100644
index 00000000000..06db589ba91
--- /dev/null
+++ b/gnulib/import/m4/year2038.m4
@@ -0,0 +1,124 @@
+# year2038.m4 serial 7
+dnl Copyright (C) 2017-2022 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Attempt to ensure that 'time_t' can go past the year 2038 and that
+dnl the functions 'time', 'stat', etc. work with post-2038 timestamps.
+
+AC_DEFUN([gl_YEAR2038_EARLY],
+[
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ case "$host_os" in
+ mingw*)
+ AC_DEFINE([__MINGW_USE_VC2005_COMPAT], [1],
+ [For 64-bit time_t on 32-bit mingw.])
+ ;;
+ esac
+])
+
+# gl_YEAR2038_TEST_INCLUDES
+# -------------------------
+AC_DEFUN([gl_YEAR2038_TEST_INCLUDES],
+[[
+ #include <time.h>
+ /* Check that time_t can represent 2**32 - 1 correctly. */
+ #define LARGE_TIME_T \\
+ ((time_t) (((time_t) 1 << 30) - 1 + 3 * ((time_t) 1 << 30)))
+ int verify_time_t_range[(LARGE_TIME_T / 65537 == 65535
+ && LARGE_TIME_T % 65537 == 0)
+ ? 1 : -1];
+]])
+
+# gl_YEAR2038_BODY(REQUIRE-YEAR2038-SAFE)
+-----------------------------------------
+AC_DEFUN([gl_YEAR2038_BODY],
+[
+ AC_ARG_ENABLE([year2038],
+ [ --disable-year2038 omit support for timestamps past the year 2038])
+ AS_IF([test "$enable_year2038" != no],
+ [
+ dnl On many systems, time_t is already a 64-bit type.
+ dnl On those systems where time_t is still 32-bit, it requires kernel
+ dnl and libc support to make it 64-bit. For glibc 2.34 and later on Linux,
+ dnl defining _TIME_BITS=64 and _FILE_OFFSET_BITS=64 is needed on x86 and ARM.
+ dnl
+ dnl On native Windows, the system include files define types __time32_t
+ dnl and __time64_t. By default, time_t is an alias of
+ dnl - __time32_t on 32-bit mingw,
+ dnl - __time64_t on 64-bit mingw and on MSVC (since MSVC 8).
+ dnl But when compiling with -D__MINGW_USE_VC2005_COMPAT, time_t is an
+ dnl alias of __time64_t.
+ dnl And when compiling with -D_USE_32BIT_TIME_T, time_t is an alias of
+ dnl __time32_t.
+ AC_CACHE_CHECK([for time_t past the year 2038], [gl_cv_type_time_t_y2038],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_SOURCE([gl_YEAR2038_TEST_INCLUDES])],
+ [gl_cv_type_time_t_y2038=yes], [gl_cv_type_time_t_y2038=no])
+ ])
+ if test "$gl_cv_type_time_t_y2038" = no; then
+ AC_CACHE_CHECK([for 64-bit time_t with _TIME_BITS=64],
+ [gl_cv_type_time_t_bits_macro],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_SOURCE([[#define _TIME_BITS 64
+ #define _FILE_OFFSET_BITS 64
+ ]gl_YEAR2038_TEST_INCLUDES])],
+ [gl_cv_type_time_t_bits_macro=yes],
+ [gl_cv_type_time_t_bits_macro=no])
+ ])
+ if test "$gl_cv_type_time_t_bits_macro" = yes; then
+ AC_DEFINE([_TIME_BITS], [64],
+ [Number of bits in a timestamp, on hosts where this is settable.])
+ dnl AC_SYS_LARGFILE also defines this; it's OK if we do too.
+ AC_DEFINE([_FILE_OFFSET_BITS], [64],
+ [Number of bits in a file offset, on hosts where this is settable.])
+ gl_cv_type_time_t_y2038=yes
+ fi
+ fi
+ if test $gl_cv_type_time_t_y2038 = no; then
+ AC_COMPILE_IFELSE(
+ [AC_LANG_SOURCE(
+ [[#ifdef _USE_32BIT_TIME_T
+ int ok;
+ #else
+ error fail
+ #endif
+ ]])],
+ [AC_MSG_FAILURE(
+ [The 'time_t' type stops working after January 2038.
+ Remove _USE_32BIT_TIME_T from the compiler flags.])],
+ [# If not cross-compiling and $1 says we should check,
+ # and 'touch' works with a large timestamp, then evidently wider time_t
+ # is desired and supported, so fail and ask the builder to fix the
+ # problem. Otherwise, just warn the builder.
+ m4_ifval([$1],
+ [if test $cross_compiling = no \
+ && TZ=UTC0 touch -t 210602070628.15 conftest.time 2>/dev/null; then
+ case `TZ=UTC0 LC_ALL=C ls -l conftest.time 2>/dev/null` in
+ *'Feb 7 2106'* | *'Feb 7 17:10'*)
+ AC_MSG_FAILURE(
+ [The 'time_t' type stops working after January 2038,
+ and your system appears to support a wider 'time_t'.
+ Try configuring with 'CC="${CC} -m64"'.
+ To build with a 32-bit time_t anyway (not recommended),
+ configure with '--disable-year2038'.]);;
+ esac
+ rm -f conftest.time
+ fi])
+ if test "$gl_warned_about_y2038" != yes; then
+ AC_MSG_WARN(
+ [The 'time_t' type stops working after January 2038,
+ and this package needs a wider 'time_t' type
+ if there is any way to access timestamps after that.
+ Configure with 'CC="${CC} -m64"' perhaps?])
+ gl_warned_about_y2038=yes
+ fi
+ ])
+ fi])
+])
+
+AC_DEFUN([gl_YEAR2038],
+[
+ gl_YEAR2038_BODY([require-year2038-safe])
+])
diff --git a/gnulib/import/m4/zzgnulib.m4 b/gnulib/import/m4/zzgnulib.m4
index b9533847cb7..fd73a201fd7 100644
--- a/gnulib/import/m4/zzgnulib.m4
+++ b/gnulib/import/m4/zzgnulib.m4
@@ -1,5 +1,5 @@
# zzgnulib.m4 serial 1
-dnl Copyright (C) 2020-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2020-2022 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
diff --git a/gnulib/import/malloc.c b/gnulib/import/malloc.c
index b59e64b817e..f334dd6e96d 100644
--- a/gnulib/import/malloc.c
+++ b/gnulib/import/malloc.c
@@ -1,51 +1,46 @@
/* malloc() function that is glibc compatible.
- Copyright (C) 1997-1998, 2006-2007, 2009-2021 Free Software Foundation, Inc.
+ Copyright (C) 1997-1998, 2006-2007, 2009-2022 Free Software Foundation, Inc.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* written by Jim Meyering and Bruno Haible */
#define _GL_USE_STDLIB_ALLOC 1
#include <config.h>
-/* Only the AC_FUNC_MALLOC macro defines 'malloc' already in config.h. */
-#ifdef malloc
-# define NEED_MALLOC_GNU 1
-# undef malloc
-/* Whereas the gnulib module 'malloc-gnu' defines HAVE_MALLOC_GNU. */
-#elif GNULIB_MALLOC_GNU && !HAVE_MALLOC_GNU
-# define NEED_MALLOC_GNU 1
-#endif
#include <stdlib.h>
#include <errno.h>
-/* Allocate an N-byte block of memory from the heap.
- If N is zero, allocate a 1-byte block. */
+#include "xalloc-oversized.h"
+
+/* Allocate an N-byte block of memory from the heap, even if N is 0. */
void *
rpl_malloc (size_t n)
{
- void *result;
-
-#if NEED_MALLOC_GNU
if (n == 0)
n = 1;
-#endif
- result = malloc (n);
+ if (xalloc_oversized (n, 1))
+ {
+ errno = ENOMEM;
+ return NULL;
+ }
+
+ void *result = malloc (n);
#if !HAVE_MALLOC_POSIX
if (result == NULL)
diff --git a/gnulib/import/malloc/scratch_buffer.h b/gnulib/import/malloc/scratch_buffer.h
index 26e306212d1..e4c5c8a85da 100644
--- a/gnulib/import/malloc/scratch_buffer.h
+++ b/gnulib/import/malloc/scratch_buffer.h
@@ -1,18 +1,18 @@
/* Variable-sized buffer with on-stack default allocation.
- Copyright (C) 2015-2021 Free Software Foundation, Inc.
+ Copyright (C) 2015-2022 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public
+ modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
- version 3 of the License, or (at your option) any later version.
+ version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
+ Lesser General Public License for more details.
- You should have received a copy of the GNU General Public
+ You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
diff --git a/gnulib/import/malloc/scratch_buffer_dupfree.c b/gnulib/import/malloc/scratch_buffer_dupfree.c
index 775bff5609f..eb3b95c1b1c 100644
--- a/gnulib/import/malloc/scratch_buffer_dupfree.c
+++ b/gnulib/import/malloc/scratch_buffer_dupfree.c
@@ -1,18 +1,18 @@
/* Variable-sized buffer with on-stack default allocation.
- Copyright (C) 2020-2021 Free Software Foundation, Inc.
+ Copyright (C) 2020-2022 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public
+ modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
- version 3 of the License, or (at your option) any later version.
+ version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
+ Lesser General Public License for more details.
- You should have received a copy of the GNU General Public
+ You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
diff --git a/gnulib/import/malloc/scratch_buffer_grow.c b/gnulib/import/malloc/scratch_buffer_grow.c
index e7606d81cd7..9a5e4dbb1eb 100644
--- a/gnulib/import/malloc/scratch_buffer_grow.c
+++ b/gnulib/import/malloc/scratch_buffer_grow.c
@@ -1,18 +1,18 @@
/* Variable-sized buffer with on-stack default allocation.
- Copyright (C) 2015-2021 Free Software Foundation, Inc.
+ Copyright (C) 2015-2022 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public
+ modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
- version 3 of the License, or (at your option) any later version.
+ version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
+ Lesser General Public License for more details.
- You should have received a copy of the GNU General Public
+ You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
diff --git a/gnulib/import/malloc/scratch_buffer_grow_preserve.c b/gnulib/import/malloc/scratch_buffer_grow_preserve.c
index 59f8c710001..3fe5a0720ec 100644
--- a/gnulib/import/malloc/scratch_buffer_grow_preserve.c
+++ b/gnulib/import/malloc/scratch_buffer_grow_preserve.c
@@ -1,18 +1,18 @@
/* Variable-sized buffer with on-stack default allocation.
- Copyright (C) 2015-2021 Free Software Foundation, Inc.
+ Copyright (C) 2015-2022 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public
+ modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
- version 3 of the License, or (at your option) any later version.
+ version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
+ Lesser General Public License for more details.
- You should have received a copy of the GNU General Public
+ You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
diff --git a/gnulib/import/malloc/scratch_buffer_set_array_size.c b/gnulib/import/malloc/scratch_buffer_set_array_size.c
index e2b9f31211a..89c37a950e9 100644
--- a/gnulib/import/malloc/scratch_buffer_set_array_size.c
+++ b/gnulib/import/malloc/scratch_buffer_set_array_size.c
@@ -1,18 +1,18 @@
/* Variable-sized buffer with on-stack default allocation.
- Copyright (C) 2015-2021 Free Software Foundation, Inc.
+ Copyright (C) 2015-2022 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public
+ modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
- version 3 of the License, or (at your option) any later version.
+ version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
+ Lesser General Public License for more details.
- You should have received a copy of the GNU General Public
+ You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
diff --git a/gnulib/import/malloca.c b/gnulib/import/malloca.c
index 7131cb7ff24..e7beaaf066e 100644
--- a/gnulib/import/malloca.c
+++ b/gnulib/import/malloca.c
@@ -1,19 +1,19 @@
/* Safe automatic memory allocation.
- Copyright (C) 2003, 2006-2007, 2009-2021 Free Software Foundation, Inc.
+ Copyright (C) 2003, 2006-2007, 2009-2022 Free Software Foundation, Inc.
Written by Bruno Haible <bruno@clisp.org>, 2003, 2018.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
#define _GL_USE_STDLIB_ALLOC 1
#include <config.h>
@@ -21,6 +21,8 @@
/* Specification. */
#include "malloca.h"
+#include "idx.h"
+#include "intprops.h"
#include "verify.h"
/* The speed critical point in this file is freea() applied to an alloca()
@@ -45,24 +47,30 @@ mmalloca (size_t n)
#if HAVE_ALLOCA
/* Allocate one more word, used to determine the address to pass to freea(),
and room for the alignment ≡ sa_alignment_max mod 2*sa_alignment_max. */
- size_t nplus = n + sizeof (small_t) + 2 * sa_alignment_max - 1;
-
- if (nplus >= n)
+ uintptr_t alignment2_mask = 2 * sa_alignment_max - 1;
+ int plus = sizeof (small_t) + alignment2_mask;
+ idx_t nplus;
+ if (!INT_ADD_WRAPV (n, plus, &nplus) && !xalloc_oversized (nplus, 1))
{
char *mem = (char *) malloc (nplus);
if (mem != NULL)
{
- char *p =
- (char *)((((uintptr_t)mem + sizeof (small_t) + sa_alignment_max - 1)
- & ~(uintptr_t)(2 * sa_alignment_max - 1))
- + sa_alignment_max);
+ uintptr_t umem = (uintptr_t)mem, umemplus;
+ /* The INT_ADD_WRAPV avoids signed integer overflow on
+ theoretical platforms where UINTPTR_MAX <= INT_MAX. */
+ INT_ADD_WRAPV (umem, sizeof (small_t) + sa_alignment_max - 1,
+ &umemplus);
+ idx_t offset = ((umemplus & ~alignment2_mask)
+ + sa_alignment_max - umem);
+ void *vp = mem + offset;
+ small_t *p = vp;
/* Here p >= mem + sizeof (small_t),
and p <= mem + sizeof (small_t) + 2 * sa_alignment_max - 1
hence p + n <= mem + nplus.
So, the memory range [p, p+n) lies in the allocated memory range
[mem, mem + nplus). */
- ((small_t *) p)[-1] = p - mem;
+ p[-1] = offset;
/* p ≡ sa_alignment_max mod 2*sa_alignment_max. */
return p;
}
diff --git a/gnulib/import/malloca.h b/gnulib/import/malloca.h
index a04e54593fa..7ec235f370b 100644
--- a/gnulib/import/malloca.h
+++ b/gnulib/import/malloca.h
@@ -1,19 +1,19 @@
/* Safe automatic memory allocation.
- Copyright (C) 2003-2007, 2009-2021 Free Software Foundation, Inc.
+ Copyright (C) 2003-2007, 2009-2022 Free Software Foundation, Inc.
Written by Bruno Haible <bruno@clisp.org>, 2003.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
#ifndef _MALLOCA_H
#define _MALLOCA_H
@@ -51,6 +51,13 @@ extern "C" {
# define safe_alloca(N) ((void) (N), NULL)
#endif
+/* Free a block of memory allocated through malloca(). */
+#if HAVE_ALLOCA
+extern void freea (void *p);
+#else
+# define freea free
+#endif
+
/* malloca(N) is a safe variant of alloca(N). It allocates N bytes of
memory allocated on the stack, that must be freed using freea() before
the function returns. Upon failure, it returns NULL. */
@@ -65,20 +72,16 @@ extern "C" {
# define malloca(N) \
mmalloca (N)
#endif
-extern void * mmalloca (size_t n);
-
-/* Free a block of memory allocated through malloca(). */
-#if HAVE_ALLOCA
-extern void freea (void *p);
-#else
-# define freea free
-#endif
+extern void *mmalloca (size_t n)
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC (freea, 1)
+ _GL_ATTRIBUTE_ALLOC_SIZE ((1));
/* nmalloca(N,S) is an overflow-safe variant of malloca (N * S).
It allocates an array of N objects, each with S bytes of memory,
- on the stack. S must be positive and N must be nonnegative.
+ on the stack. N and S should be nonnegative and free of side effects.
The array must be freed using freea() before the function returns. */
-#define nmalloca(n, s) (xalloc_oversized (n, s) ? NULL : malloca ((n) * (s)))
+#define nmalloca(n, s) \
+ (xalloc_oversized (n, s) ? NULL : malloca ((n) * (size_t) (s)))
#ifdef __cplusplus
diff --git a/gnulib/import/math.c b/gnulib/import/math.c
index ba2a6abd62d..1502a1fd6da 100644
--- a/gnulib/import/math.c
+++ b/gnulib/import/math.c
@@ -1,4 +1,22 @@
+/* Inline functions for <math.h>.
+
+ Copyright (C) 2012-2022 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
#include <config.h>
+
#define _GL_MATH_INLINE _GL_EXTERN_INLINE
#include "math.h"
typedef int dummy;
diff --git a/gnulib/import/math.in.h b/gnulib/import/math.in.h
index 6208a015ead..a74a95da3e5 100644
--- a/gnulib/import/math.in.h
+++ b/gnulib/import/math.in.h
@@ -1,18 +1,18 @@
/* A GNU-like <math.h>.
- Copyright (C) 2002-2003, 2007-2021 Free Software Foundation, Inc.
+ Copyright (C) 2002-2003, 2007-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#ifndef _@GUARD_PREFIX@_MATH_H
@@ -56,6 +56,16 @@ _GL_INLINE_HEADER_BEGIN
# define _GL_MATH_INLINE _GL_INLINE
#endif
+/* The __attribute__ feature is available in gcc versions 2.5 and later.
+ The attribute __const__ was added in gcc 2.95. */
+#ifndef _GL_ATTRIBUTE_CONST
+# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) || defined __clang__
+# define _GL_ATTRIBUTE_CONST __attribute__ ((__const__))
+# else
+# define _GL_ATTRIBUTE_CONST /* empty */
+# endif
+#endif
+
/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */
/* The definition of _GL_ARG_NONNULL is copied here. */
@@ -1322,6 +1332,7 @@ _GL_FUNCDECL_RPL (ilogbl, int, (long double x));
_GL_CXXALIAS_RPL (ilogbl, int, (long double x));
# else
# if !@HAVE_ILOGBL@
+# undef ilogbl
_GL_FUNCDECL_SYS (ilogbl, int, (long double x));
# endif
_GL_CXXALIAS_SYS (ilogbl, int, (long double x));
@@ -2102,7 +2113,7 @@ _GL_FUNCDECL_RPL (sinf, float, (float x));
_GL_CXXALIAS_RPL (sinf, float, (float x));
# else
# if !@HAVE_SINF@
- # undef sinf
+# undef sinf
_GL_FUNCDECL_SYS (sinf, float, (float x));
# endif
_GL_CXXALIAS_SYS (sinf, float, (float x));
@@ -2422,6 +2433,7 @@ _GL_MATH_CXX_REAL_FLOATING_DECL_1 (isfinite)
functions. */
_GL_MATH_CXX_REAL_FLOATING_DECL_2 (isfinite, rpl_isfinite, bool)
# define isfinite rpl_isfinite
+# define GNULIB_NAMESPACE_LACKS_ISFINITE 1
# else
_GL_MATH_CXX_REAL_FLOATING_DECL_2 (isfinite, isfinite, bool)
# endif
@@ -2456,6 +2468,7 @@ _GL_MATH_CXX_REAL_FLOATING_DECL_1 (isinf)
functions. */
_GL_MATH_CXX_REAL_FLOATING_DECL_2 (isinf, rpl_isinf, bool)
# define isinf rpl_isinf
+# define GNULIB_NAMESPACE_LACKS_ISINF 1
# else
_GL_MATH_CXX_REAL_FLOATING_DECL_2 (isinf, isinf, bool)
# endif
@@ -2578,11 +2591,12 @@ _GL_EXTERN_C int rpl_isnanl (long double x) _GL_ATTRIBUTE_CONST;
# if defined isnan || defined GNULIB_NAMESPACE
_GL_MATH_CXX_REAL_FLOATING_DECL_1 (isnan)
# undef isnan
-# if __GNUC__ >= 6 || (defined __clang__ && !((defined __APPLE__ && defined __MACH__) || (defined __FreeBSD__ && __clang_major__ < 7) || defined __OpenBSD__ || (defined _WIN32 && !defined __CYGWIN__)))
+# if __GNUC__ >= 6 || (defined __clang__ && !((defined __APPLE__ && defined __MACH__ && __clang_major__ < 12) || (defined __FreeBSD__ && __clang_major__ < 7) || defined __OpenBSD__ || (defined _WIN32 && !defined __CYGWIN__)))
/* This platform's <cmath> possibly defines isnan through a set of inline
functions. */
_GL_MATH_CXX_REAL_FLOATING_DECL_2 (isnan, rpl_isnan, bool)
# define isnan rpl_isnan
+# define GNULIB_NAMESPACE_LACKS_ISNAN 1
# else
_GL_MATH_CXX_REAL_FLOATING_DECL_2 (isnan, isnan, bool)
# endif
@@ -2666,6 +2680,7 @@ _GL_MATH_CXX_REAL_FLOATING_DECL_1 (signbit)
functions. */
_GL_MATH_CXX_REAL_FLOATING_DECL_2 (signbit, rpl_signbit, bool)
# define signbit rpl_signbit
+# define GNULIB_NAMESPACE_LACKS_SIGNBIT 1
# else
_GL_MATH_CXX_REAL_FLOATING_DECL_2 (signbit, signbit, bool)
# endif
diff --git a/gnulib/import/mbrtowc-impl-utf8.h b/gnulib/import/mbrtowc-impl-utf8.h
index 4f3bbb31ba6..8e5ac14ea45 100644
--- a/gnulib/import/mbrtowc-impl-utf8.h
+++ b/gnulib/import/mbrtowc-impl-utf8.h
@@ -1,17 +1,17 @@
/* Convert multibyte character to wide character.
- Copyright (C) 1999-2002, 2005-2021 Free Software Foundation, Inc.
+ Copyright (C) 1999-2002, 2005-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Bruno Haible <bruno@clisp.org>, 2008. */
@@ -96,7 +96,7 @@
if ((c2 ^ 0x80) < 0x40
&& (c >= 0xf1 || c2 >= 0x90)
- && (c < 0xf4 || (c == 0xf4 && c2 < 0x90)))
+ && (c < 0xf4 || (/* c == 0xf4 && */ c2 < 0x90)))
{
if (m == 2)
goto incomplete;
diff --git a/gnulib/import/mbrtowc-impl.h b/gnulib/import/mbrtowc-impl.h
index eab0416ed7f..65538e74493 100644
--- a/gnulib/import/mbrtowc-impl.h
+++ b/gnulib/import/mbrtowc-impl.h
@@ -1,17 +1,17 @@
/* Convert multibyte character to wide character.
- Copyright (C) 1999-2002, 2005-2021 Free Software Foundation, Inc.
+ Copyright (C) 1999-2002, 2005-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Bruno Haible <bruno@clisp.org>, 2008. */
diff --git a/gnulib/import/mbrtowc.c b/gnulib/import/mbrtowc.c
index caf7cb698cd..4b164edd401 100644
--- a/gnulib/import/mbrtowc.c
+++ b/gnulib/import/mbrtowc.c
@@ -1,18 +1,18 @@
/* Convert multibyte character to wide character.
- Copyright (C) 1999-2002, 2005-2021 Free Software Foundation, Inc.
+ Copyright (C) 1999-2002, 2005-2022 Free Software Foundation, Inc.
Written by Bruno Haible <bruno@clisp.org>, 2008.
- This program is free software: you can 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 file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#include <config.h>
diff --git a/gnulib/import/mbsinit.c b/gnulib/import/mbsinit.c
index b6e9841ea73..9621defc73d 100644
--- a/gnulib/import/mbsinit.c
+++ b/gnulib/import/mbsinit.c
@@ -1,18 +1,18 @@
/* Test for initial conversion state.
- Copyright (C) 2008-2021 Free Software Foundation, Inc.
+ Copyright (C) 2008-2022 Free Software Foundation, Inc.
Written by Bruno Haible <bruno@clisp.org>, 2008.
- This program is free software: you can 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 file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#include <config.h>
diff --git a/gnulib/import/mbsrtowcs-impl.h b/gnulib/import/mbsrtowcs-impl.h
index 0d544b0e934..55dafe380ac 100644
--- a/gnulib/import/mbsrtowcs-impl.h
+++ b/gnulib/import/mbsrtowcs-impl.h
@@ -1,18 +1,18 @@
/* Convert string to wide string.
- Copyright (C) 2008-2021 Free Software Foundation, Inc.
+ Copyright (C) 2008-2022 Free Software Foundation, Inc.
Written by Bruno Haible <bruno@clisp.org>, 2008.
- This program is free software: you can 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 file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
size_t
diff --git a/gnulib/import/mbsrtowcs-state.c b/gnulib/import/mbsrtowcs-state.c
index 328e9a887c9..55160a20d8c 100644
--- a/gnulib/import/mbsrtowcs-state.c
+++ b/gnulib/import/mbsrtowcs-state.c
@@ -1,18 +1,18 @@
/* Convert string to wide string.
- Copyright (C) 2008-2021 Free Software Foundation, Inc.
+ Copyright (C) 2008-2022 Free Software Foundation, Inc.
Written by Bruno Haible <bruno@clisp.org>, 2008.
- This program is free software: you can 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 file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#include <config.h>
diff --git a/gnulib/import/mbsrtowcs.c b/gnulib/import/mbsrtowcs.c
index c2bfdd2d880..66019b04b14 100644
--- a/gnulib/import/mbsrtowcs.c
+++ b/gnulib/import/mbsrtowcs.c
@@ -1,18 +1,18 @@
/* Convert string to wide string.
- Copyright (C) 2008-2021 Free Software Foundation, Inc.
+ Copyright (C) 2008-2022 Free Software Foundation, Inc.
Written by Bruno Haible <bruno@clisp.org>, 2008.
- This program is free software: you can 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 file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#include <config.h>
diff --git a/gnulib/import/mbtowc-impl.h b/gnulib/import/mbtowc-impl.h
index bfcf5ccebb4..2b27bafd627 100644
--- a/gnulib/import/mbtowc-impl.h
+++ b/gnulib/import/mbtowc-impl.h
@@ -1,18 +1,18 @@
/* Convert multibyte character to wide character.
- Copyright (C) 2011-2021 Free Software Foundation, Inc.
+ Copyright (C) 2011-2022 Free Software Foundation, Inc.
Written by Bruno Haible <bruno@clisp.org>, 2011.
- This program is free software: you can 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 file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* We don't need a static internal state, because the encoding is not state
diff --git a/gnulib/import/mbtowc-lock.c b/gnulib/import/mbtowc-lock.c
index 27b1643992d..06d32246d50 100644
--- a/gnulib/import/mbtowc-lock.c
+++ b/gnulib/import/mbtowc-lock.c
@@ -1,17 +1,17 @@
/* Return the internal lock used by mbrtowc and mbrtoc32.
- Copyright (C) 2019-2021 Free Software Foundation, Inc.
+ Copyright (C) 2019-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Bruno Haible <bruno@clisp.org>, 2019-2020. */
diff --git a/gnulib/import/mbtowc-lock.h b/gnulib/import/mbtowc-lock.h
index 696b12c5841..ecfd44e8ded 100644
--- a/gnulib/import/mbtowc-lock.h
+++ b/gnulib/import/mbtowc-lock.h
@@ -1,17 +1,17 @@
/* Use the internal lock used by mbrtowc and mbrtoc32.
- Copyright (C) 2019-2021 Free Software Foundation, Inc.
+ Copyright (C) 2019-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Bruno Haible <bruno@clisp.org>, 2019-2020. */
@@ -32,7 +32,17 @@ mbtowc_unlocked (wchar_t *pwc, const char *p, size_t m)
/* Prohibit renaming this symbol. */
#undef gl_get_mbtowc_lock
-#if defined _WIN32 && !defined __CYGWIN__
+#if GNULIB_MBRTOWC_SINGLE_THREAD
+
+/* All uses of this function are in a single thread. No locking needed. */
+
+static int
+mbtowc_with_lock (wchar_t *pwc, const char *p, size_t m)
+{
+ return mbtowc_unlocked (pwc, p, m);
+}
+
+#elif defined _WIN32 && !defined __CYGWIN__
extern __declspec(dllimport) CRITICAL_SECTION *gl_get_mbtowc_lock (void);
diff --git a/gnulib/import/mbtowc.c b/gnulib/import/mbtowc.c
index ef217c6427c..a9a79951092 100644
--- a/gnulib/import/mbtowc.c
+++ b/gnulib/import/mbtowc.c
@@ -1,18 +1,18 @@
/* Convert multibyte character to wide character.
- Copyright (C) 2011-2021 Free Software Foundation, Inc.
+ Copyright (C) 2011-2022 Free Software Foundation, Inc.
Written by Bruno Haible <bruno@clisp.org>, 2011.
- This program is free software: you can 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 file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#include <config.h>
diff --git a/gnulib/import/memchr.c b/gnulib/import/memchr.c
index cacaf1853fe..0ca7b30a4dd 100644
--- a/gnulib/import/memchr.c
+++ b/gnulib/import/memchr.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1993, 1996-1997, 1999-2000, 2003-2004, 2006, 2008-2021
+/* Copyright (C) 1991, 1993, 1996-1997, 1999-2000, 2003-2004, 2006, 2008-2022
Free Software Foundation, Inc.
Based on strlen implementation by Torbjorn Granlund (tege@sics.se),
@@ -7,21 +7,21 @@
adaptation to memchr suggested by Dick Karpinski (dick@cca.ucsf.edu),
and implemented by Roland McGrath (roland@ai.mit.edu).
-NOTE: The canonical source of this file is maintained with the GNU C Library.
-Bugs can be reported to bug-glibc@prep.ai.mit.edu.
+ NOTE: The canonical source of this file is maintained with the GNU C Library.
+ Bugs can be reported to bug-glibc@prep.ai.mit.edu.
-This program is free software: you can 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 any
-later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
#ifndef _LIBC
# include <config.h>
diff --git a/gnulib/import/memchr.valgrind b/gnulib/import/memchr.valgrind
index c0a53db61d9..cb0f351cc5e 100644
--- a/gnulib/import/memchr.valgrind
+++ b/gnulib/import/memchr.valgrind
@@ -1,18 +1,18 @@
# Suppress a valgrind message about use of uninitialized memory in memchr().
-# Copyright (C) 2009-2021 Free Software Foundation, Inc.
+# Copyright (C) 2009-2022 Free Software Foundation, Inc.
#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
-# (at your option) any later version.
+# This file is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as
+# published by the Free Software Foundation; either version 2.1 of the
+# License, or (at your option) any later version.
#
-# This program is distributed in the hope that it will be useful,
+# This file is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
+# GNU Lesser General Public License for more details.
#
-# You should have received a copy of the GNU General Public License
+# You should have received a copy of the GNU Lesser General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
# POSIX states that when the character is found, memchr must not read extra
diff --git a/gnulib/import/memmem.c b/gnulib/import/memmem.c
index 87266fa87af..5701052d48b 100644
--- a/gnulib/import/memmem.c
+++ b/gnulib/import/memmem.c
@@ -1,19 +1,19 @@
-/* Copyright (C) 1991-1994, 1996-1998, 2000, 2004, 2007-2021 Free Software
+/* Copyright (C) 1991-1994, 1996-1998, 2000, 2004, 2007-2022 Free Software
Foundation, Inc.
This file is part of the GNU C 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, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License along
- with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* This particular implementation was written by Eric Blake, 2008. */
diff --git a/gnulib/import/mempcpy.c b/gnulib/import/mempcpy.c
index fea618a9e59..9aae418ef29 100644
--- a/gnulib/import/mempcpy.c
+++ b/gnulib/import/mempcpy.c
@@ -1,24 +1,27 @@
/* Copy memory area and return pointer after last written byte.
- Copyright (C) 2003, 2007, 2009-2021 Free Software Foundation, Inc.
+ Copyright (C) 2003, 2007, 2009-2022 Free Software Foundation, Inc.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
#include <config.h>
/* Specification. */
#include <string.h>
+/* A function definition is only needed if HAVE_MEMPCPY is not defined. */
+#if !HAVE_MEMPCPY
+
/* Copy N bytes of SRC to DEST, return pointer to bytes after the
last written byte. */
void *
@@ -26,3 +29,5 @@ mempcpy (void *dest, const void *src, size_t n)
{
return (char *) memcpy (dest, src, n) + n;
}
+
+#endif
diff --git a/gnulib/import/memrchr.c b/gnulib/import/memrchr.c
index dcd24fafc6e..90fdb86f1f1 100644
--- a/gnulib/import/memrchr.c
+++ b/gnulib/import/memrchr.c
@@ -1,6 +1,6 @@
/* memrchr -- find the last occurrence of a byte in a memory block
- Copyright (C) 1991, 1993, 1996-1997, 1999-2000, 2003-2021 Free Software
+ Copyright (C) 1991, 1993, 1996-1997, 1999-2000, 2003-2022 Free Software
Foundation, Inc.
Based on strlen implementation by Torbjorn Granlund (tege@sics.se),
@@ -9,17 +9,17 @@
adaptation to memchr suggested by Dick Karpinski (dick@cca.ucsf.edu),
and implemented by Roland McGrath (roland@ai.mit.edu).
- This program is free software: you can 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 file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation, either version 3 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#if defined _LIBC
diff --git a/gnulib/import/minmax.h b/gnulib/import/minmax.h
index eb9fb09a540..b4b1345bbce 100644
--- a/gnulib/import/minmax.h
+++ b/gnulib/import/minmax.h
@@ -1,19 +1,19 @@
/* MIN, MAX macros.
- Copyright (C) 1995, 1998, 2001, 2003, 2005, 2009-2021 Free Software
+ Copyright (C) 1995, 1998, 2001, 2003, 2005, 2009-2022 Free Software
Foundation, Inc.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
#ifndef _MINMAX_H
#define _MINMAX_H
diff --git a/gnulib/import/mkdir.c b/gnulib/import/mkdir.c
index d508db61ef3..4901701813e 100644
--- a/gnulib/import/mkdir.c
+++ b/gnulib/import/mkdir.c
@@ -1,19 +1,19 @@
/* On some systems, mkdir ("foo/", 0700) fails because of the trailing
slash. On those systems, this wrapper removes the trailing slash.
- Copyright (C) 2001, 2003, 2006, 2008-2021 Free Software Foundation, Inc.
+ Copyright (C) 2001, 2003, 2006, 2008-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* written by Jim Meyering */
@@ -48,7 +48,7 @@
/* This function is required at least for NetBSD 1.5.2. */
int
-rpl_mkdir (char const *dir, mode_t mode maybe_unused)
+rpl_mkdir (char const *dir, maybe_unused mode_t mode)
{
int ret_val;
char *tmp_dir;
diff --git a/gnulib/import/mkdtemp.c b/gnulib/import/mkdtemp.c
index 8ed805b2c07..0577870d3f5 100644
--- a/gnulib/import/mkdtemp.c
+++ b/gnulib/import/mkdtemp.c
@@ -1,18 +1,18 @@
-/* Copyright (C) 1999, 2001-2003, 2006-2007, 2009-2021 Free Software
+/* Copyright (C) 1999, 2001-2003, 2006-2007, 2009-2022 Free Software
Foundation, Inc.
This file is part of the GNU C 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 file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Extracted from misc/mkdtemp.c. */
diff --git a/gnulib/import/mkostemp.c b/gnulib/import/mkostemp.c
index 9d733ddd10d..eae289aff94 100644
--- a/gnulib/import/mkostemp.c
+++ b/gnulib/import/mkostemp.c
@@ -1,18 +1,18 @@
-/* Copyright (C) 1998-1999, 2001, 2005-2007, 2009-2021 Free Software
+/* Copyright (C) 1998-1999, 2001, 2005-2007, 2009-2022 Free Software
Foundation, Inc.
This file is derived from the one in the GNU C 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 file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#if !_LIBC
diff --git a/gnulib/import/msvc-inval.c b/gnulib/import/msvc-inval.c
index 658c4e3c68a..d6651caa88d 100644
--- a/gnulib/import/msvc-inval.c
+++ b/gnulib/import/msvc-inval.c
@@ -1,18 +1,18 @@
/* Invalid parameter handler for MSVC runtime libraries.
- Copyright (C) 2011-2021 Free Software Foundation, Inc.
+ Copyright (C) 2011-2022 Free Software Foundation, Inc.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License along
- with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
#include <config.h>
diff --git a/gnulib/import/msvc-inval.h b/gnulib/import/msvc-inval.h
index 46404aed071..1230b8994e3 100644
--- a/gnulib/import/msvc-inval.h
+++ b/gnulib/import/msvc-inval.h
@@ -1,18 +1,18 @@
/* Invalid parameter handler for MSVC runtime libraries.
- Copyright (C) 2011-2021 Free Software Foundation, Inc.
+ Copyright (C) 2011-2022 Free Software Foundation, Inc.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License along
- with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
#ifndef _MSVC_INVAL_H
#define _MSVC_INVAL_H
diff --git a/gnulib/import/msvc-nothrow.c b/gnulib/import/msvc-nothrow.c
index e893ed6aa32..aa069643fb5 100644
--- a/gnulib/import/msvc-nothrow.c
+++ b/gnulib/import/msvc-nothrow.c
@@ -1,19 +1,19 @@
/* Wrappers that don't throw invalid parameter notifications
with MSVC runtime libraries.
- Copyright (C) 2011-2021 Free Software Foundation, Inc.
+ Copyright (C) 2011-2022 Free Software Foundation, Inc.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License along
- with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
#include <config.h>
diff --git a/gnulib/import/msvc-nothrow.h b/gnulib/import/msvc-nothrow.h
index a1979dd9fc8..53451557ef8 100644
--- a/gnulib/import/msvc-nothrow.h
+++ b/gnulib/import/msvc-nothrow.h
@@ -1,19 +1,19 @@
/* Wrappers that don't throw invalid parameter notifications
with MSVC runtime libraries.
- Copyright (C) 2011-2021 Free Software Foundation, Inc.
+ Copyright (C) 2011-2022 Free Software Foundation, Inc.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License along
- with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
#ifndef _MSVC_NOTHROW_H
#define _MSVC_NOTHROW_H
diff --git a/gnulib/import/netdb.in.h b/gnulib/import/netdb.in.h
index 4b1cab14b2e..e05cf4b137c 100644
--- a/gnulib/import/netdb.in.h
+++ b/gnulib/import/netdb.in.h
@@ -1,19 +1,19 @@
/* Provide a netdb.h header file for systems lacking it (read: MinGW).
- Copyright (C) 2008-2021 Free Software Foundation, Inc.
+ Copyright (C) 2008-2022 Free Software Foundation, Inc.
Written by Simon Josefsson.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* This file is supposed to be used on platforms that lack <netdb.h>.
It is intended to provide definitions and prototypes needed by an
diff --git a/gnulib/import/netinet_in.in.h b/gnulib/import/netinet_in.in.h
index f091d5cc841..e23807cac70 100644
--- a/gnulib/import/netinet_in.in.h
+++ b/gnulib/import/netinet_in.in.h
@@ -1,18 +1,18 @@
/* Substitute for <netinet/in.h>.
- Copyright (C) 2007-2021 Free Software Foundation, Inc.
+ Copyright (C) 2007-2022 Free Software Foundation, Inc.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
#ifndef _@GUARD_PREFIX@_NETINET_IN_H
diff --git a/gnulib/import/open.c b/gnulib/import/open.c
index 85991853318..170bff108e3 100644
--- a/gnulib/import/open.c
+++ b/gnulib/import/open.c
@@ -1,17 +1,17 @@
/* Open a descriptor to a file.
- Copyright (C) 2007-2021 Free Software Foundation, Inc.
+ Copyright (C) 2007-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Bruno Haible <bruno@clisp.org>, 2007. */
diff --git a/gnulib/import/openat-die.c b/gnulib/import/openat-die.c
index f30e210088d..486d06c2542 100644
--- a/gnulib/import/openat-die.c
+++ b/gnulib/import/openat-die.c
@@ -1,10 +1,10 @@
/* Report a save- or restore-cwd failure in our openat replacement and then exit.
- Copyright (C) 2005-2006, 2008-2021 Free Software Foundation, Inc.
+ Copyright (C) 2005-2006, 2008-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
+ 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,
diff --git a/gnulib/import/openat-priv.h b/gnulib/import/openat-priv.h
index 5c42d034998..5d60810709d 100644
--- a/gnulib/import/openat-priv.h
+++ b/gnulib/import/openat-priv.h
@@ -1,10 +1,10 @@
/* Internals for openat-like functions.
- Copyright (C) 2005-2006, 2009-2021 Free Software Foundation, Inc.
+ Copyright (C) 2005-2006, 2009-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
+ 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,
diff --git a/gnulib/import/openat-proc.c b/gnulib/import/openat-proc.c
index 4f8be90f146..3bacf7dbd13 100644
--- a/gnulib/import/openat-proc.c
+++ b/gnulib/import/openat-proc.c
@@ -1,10 +1,10 @@
/* Create /proc/self/fd-related names for subfiles of open directories.
- Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc.
+ Copyright (C) 2006, 2009-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
+ 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,
diff --git a/gnulib/import/openat.c b/gnulib/import/openat.c
index ac923749719..52aab19d273 100644
--- a/gnulib/import/openat.c
+++ b/gnulib/import/openat.c
@@ -1,9 +1,9 @@
/* provide a replacement openat function
- Copyright (C) 2004-2021 Free Software Foundation, Inc.
+ Copyright (C) 2004-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
+ 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,
diff --git a/gnulib/import/openat.h b/gnulib/import/openat.h
index 70981241b24..56919ef8dc4 100644
--- a/gnulib/import/openat.h
+++ b/gnulib/import/openat.h
@@ -1,9 +1,9 @@
/* provide a replacement openat function
- Copyright (C) 2004-2006, 2008-2021 Free Software Foundation, Inc.
+ Copyright (C) 2004-2006, 2008-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
+ 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,
@@ -98,12 +98,14 @@ lchmodat (int fd, char const *file, mode_t mode)
# define STATAT_INLINE _GL_INLINE
# endif
+_GL_ATTRIBUTE_DEPRECATED
STATAT_INLINE int
statat (int fd, char const *name, struct stat *st)
{
return fstatat (fd, name, st, 0);
}
+_GL_ATTRIBUTE_DEPRECATED
STATAT_INLINE int
lstatat (int fd, char const *name, struct stat *st)
{
diff --git a/gnulib/import/opendir.c b/gnulib/import/opendir.c
index 480b96b7e59..fc6b455a62a 100644
--- a/gnulib/import/opendir.c
+++ b/gnulib/import/opendir.c
@@ -1,17 +1,17 @@
/* Start reading the entries of a directory.
- Copyright (C) 2006-2021 Free Software Foundation, Inc.
+ Copyright (C) 2006-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#include <config.h>
diff --git a/gnulib/import/pathmax.h b/gnulib/import/pathmax.h
index 49cf4629c7c..19b93d7eab1 100644
--- a/gnulib/import/pathmax.h
+++ b/gnulib/import/pathmax.h
@@ -1,19 +1,19 @@
/* Define PATH_MAX somehow. Requires sys/types.h.
- Copyright (C) 1992, 1999, 2001, 2003, 2005, 2009-2021 Free Software
+ Copyright (C) 1992, 1999, 2001, 2003, 2005, 2009-2022 Free Software
Foundation, Inc.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
#ifndef _PATHMAX_H
# define _PATHMAX_H
diff --git a/gnulib/import/pipe-safer.c b/gnulib/import/pipe-safer.c
index efa4bd6c752..22f8695e2f9 100644
--- a/gnulib/import/pipe-safer.c
+++ b/gnulib/import/pipe-safer.c
@@ -1,9 +1,9 @@
/* Invoke pipe, but avoid some glitches.
- Copyright (C) 2005-2006, 2009-2021 Free Software Foundation, Inc.
+ Copyright (C) 2005-2006, 2009-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
+ 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,
diff --git a/gnulib/import/pipe.c b/gnulib/import/pipe.c
index 584965a3dba..ce909b9f019 100644
--- a/gnulib/import/pipe.c
+++ b/gnulib/import/pipe.c
@@ -1,18 +1,18 @@
/* Create a pipe.
- Copyright (C) 2009-2021 Free Software Foundation, Inc.
+ Copyright (C) 2009-2022 Free Software Foundation, Inc.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License along
- with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
#include <config.h>
diff --git a/gnulib/import/rawmemchr.c b/gnulib/import/rawmemchr.c
index bbb250feb8c..ea68c1bfc6a 100644
--- a/gnulib/import/rawmemchr.c
+++ b/gnulib/import/rawmemchr.c
@@ -1,17 +1,17 @@
/* Searching in a string.
- Copyright (C) 2008-2021 Free Software Foundation, Inc.
+ Copyright (C) 2008-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#include <config.h>
@@ -19,68 +19,57 @@
/* Specification. */
#include <string.h>
+/* A function definition is only needed if HAVE_RAWMEMCHR is not defined. */
+#if !HAVE_RAWMEMCHR
+
+# include <limits.h>
+# include <stdalign.h>
+# include <stdint.h>
+
+# include "verify.h"
+
/* Find the first occurrence of C in S. */
void *
rawmemchr (const void *s, int c_in)
{
- /* On 32-bit hardware, choosing longword to be a 32-bit unsigned
- long instead of a 64-bit uintmax_t tends to give better
- performance. On 64-bit hardware, unsigned long is generally 64
- bits already. Change this typedef to experiment with
- performance. */
- typedef unsigned long int longword;
+ /* Change this typedef to experiment with performance. */
+ typedef uintptr_t longword;
+ /* If you change the "uintptr_t", you should change UINTPTR_WIDTH to match.
+ This verifies that the type does not have padding bits. */
+ verify (UINTPTR_WIDTH == UCHAR_WIDTH * sizeof (longword));
const unsigned char *char_ptr;
- const longword *longword_ptr;
- longword repeated_one;
- longword repeated_c;
- unsigned char c;
-
- c = (unsigned char) c_in;
+ unsigned char c = c_in;
/* Handle the first few bytes by reading one byte at a time.
Do this until CHAR_PTR is aligned on a longword boundary. */
for (char_ptr = (const unsigned char *) s;
- (size_t) char_ptr % sizeof (longword) != 0;
+ (uintptr_t) char_ptr % alignof (longword) != 0;
++char_ptr)
if (*char_ptr == c)
return (void *) char_ptr;
- longword_ptr = (const longword *) char_ptr;
-
- /* All these elucidatory comments refer to 4-byte longwords,
- but the theory applies equally well to any size longwords. */
+ longword const *longword_ptr = s = char_ptr;
/* Compute auxiliary longword values:
repeated_one is a value which has a 1 in every byte.
repeated_c has c in every byte. */
- repeated_one = 0x01010101;
- repeated_c = c | (c << 8);
- repeated_c |= repeated_c << 16;
- if (0xffffffffU < (longword) -1)
- {
- repeated_one |= repeated_one << 31 << 1;
- repeated_c |= repeated_c << 31 << 1;
- if (8 < sizeof (longword))
- {
- size_t i;
-
- for (i = 64; i < sizeof (longword) * 8; i *= 2)
- {
- repeated_one |= repeated_one << i;
- repeated_c |= repeated_c << i;
- }
- }
- }
+ longword repeated_one = (longword) -1 / UCHAR_MAX;
+ longword repeated_c = repeated_one * c;
+ longword repeated_hibit = repeated_one * (UCHAR_MAX / 2 + 1);
/* Instead of the traditional loop which tests each byte, we will
- test a longword at a time. The tricky part is testing if *any of
- the four* bytes in the longword in question are equal to NUL or
+ test a longword at a time. The tricky part is testing if any of
+ the bytes in the longword in question are equal to
c. We first use an xor with repeated_c. This reduces the task
- to testing whether *any of the four* bytes in longword1 is zero.
+ to testing whether any of the bytes in longword1 is zero.
+
+ (The following comments assume 8-bit bytes, as POSIX requires;
+ the code's use of UCHAR_MAX should work even if bytes have more
+ than 8 bits.)
We compute tmp =
- ((longword1 - repeated_one) & ~longword1) & (repeated_one << 7).
+ ((longword1 - repeated_one) & ~longword1) & (repeated_one * 0x80).
That is, we perform the following operations:
1. Subtract repeated_one.
2. & ~longword1.
@@ -114,23 +103,23 @@ rawmemchr (const void *s, int c_in)
{
longword longword1 = *longword_ptr ^ repeated_c;
- if ((((longword1 - repeated_one) & ~longword1)
- & (repeated_one << 7)) != 0)
+ if ((((longword1 - repeated_one) & ~longword1) & repeated_hibit) != 0)
break;
longword_ptr++;
}
- char_ptr = (const unsigned char *) longword_ptr;
+ char_ptr = s = longword_ptr;
/* At this point, we know that one of the sizeof (longword) bytes
- starting at char_ptr is == c. On little-endian machines, we
+ starting at char_ptr is == c. If we knew endianness, we
could determine the first such byte without any further memory
accesses, just by looking at the tmp result from the last loop
- iteration. But this does not work on big-endian machines.
- Choose code that works in both cases. */
+ iteration. However, the following simple and portable code does
+ not attempt this potential optimization. */
- char_ptr = (unsigned char *) longword_ptr;
while (*char_ptr != c)
char_ptr++;
return (void *) char_ptr;
}
+
+#endif
diff --git a/gnulib/import/rawmemchr.valgrind b/gnulib/import/rawmemchr.valgrind
index 087d5e4178d..64cf86c8429 100644
--- a/gnulib/import/rawmemchr.valgrind
+++ b/gnulib/import/rawmemchr.valgrind
@@ -1,18 +1,18 @@
# Suppress a valgrind message about use of uninitialized memory in rawmemchr().
-# Copyright (C) 2008-2021 Free Software Foundation, Inc.
+# Copyright (C) 2008-2022 Free Software Foundation, Inc.
#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
-# (at your option) any later version.
+# This file is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as
+# published by the Free Software Foundation; either version 2.1 of the
+# License, or (at your option) any later version.
#
-# This program is distributed in the hope that it will be useful,
+# This file is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
+# GNU Lesser General Public License for more details.
#
-# You should have received a copy of the GNU General Public License
+# You should have received a copy of the GNU Lesser General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
# This use is OK because it provides only a speedup.
diff --git a/gnulib/import/readdir.c b/gnulib/import/readdir.c
index 723198e1ba1..8e841df892e 100644
--- a/gnulib/import/readdir.c
+++ b/gnulib/import/readdir.c
@@ -1,17 +1,17 @@
/* Read the next entry of a directory.
- Copyright (C) 2011-2021 Free Software Foundation, Inc.
+ Copyright (C) 2011-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#include <config.h>
diff --git a/gnulib/import/readlink.c b/gnulib/import/readlink.c
index c4b635ce712..ed03cc8ded1 100644
--- a/gnulib/import/readlink.c
+++ b/gnulib/import/readlink.c
@@ -1,17 +1,17 @@
/* Read the contents of a symbolic link.
- Copyright (C) 2003-2007, 2009-2021 Free Software Foundation, Inc.
+ Copyright (C) 2003-2007, 2009-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#include <config.h>
@@ -29,8 +29,8 @@
such as DJGPP 2.03 and mingw32. */
ssize_t
-readlink (char const *file, char *buf _GL_UNUSED,
- size_t bufsize _GL_UNUSED)
+readlink (char const *file, _GL_UNUSED char *buf,
+ _GL_UNUSED size_t bufsize)
{
struct stat statbuf;
diff --git a/gnulib/import/realloc.c b/gnulib/import/realloc.c
index 35caeab7ed9..c8783815761 100644
--- a/gnulib/import/realloc.c
+++ b/gnulib/import/realloc.c
@@ -1,76 +1,60 @@
/* realloc() function that is glibc compatible.
- Copyright (C) 1997, 2003-2004, 2006-2007, 2009-2021 Free Software
+ Copyright (C) 1997, 2003-2004, 2006-2007, 2009-2022 Free Software
Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* written by Jim Meyering and Bruno Haible */
-#define _GL_USE_STDLIB_ALLOC 1
#include <config.h>
-/* Only the AC_FUNC_REALLOC macro defines 'realloc' already in config.h. */
-#ifdef realloc
-# define NEED_REALLOC_GNU 1
-/* Whereas the gnulib module 'realloc-gnu' defines HAVE_REALLOC_GNU. */
-#elif GNULIB_REALLOC_GNU && !HAVE_REALLOC_GNU
-# define NEED_REALLOC_GNU 1
-#endif
-
-/* Infer the properties of the system's malloc function.
- The gnulib module 'malloc-gnu' defines HAVE_MALLOC_GNU. */
-#if GNULIB_MALLOC_GNU && HAVE_MALLOC_GNU
-# define SYSTEM_MALLOC_GLIBC_COMPATIBLE 1
-#endif
-
#include <stdlib.h>
#include <errno.h>
+#include "xalloc-oversized.h"
+
+/* Call the system's realloc below. This file does not define
+ _GL_USE_STDLIB_ALLOC because it needs Gnulib's malloc if present. */
+#undef realloc
+
/* Change the size of an allocated block of memory P to N bytes,
- with error checking. If N is zero, change it to 1. If P is NULL,
- use malloc. */
+ with error checking. If P is NULL, use malloc. Otherwise if N is zero,
+ free P and return NULL. */
void *
rpl_realloc (void *p, size_t n)
{
- void *result;
+ if (p == NULL)
+ return malloc (n);
-#if NEED_REALLOC_GNU
if (n == 0)
{
- n = 1;
-
- /* In theory realloc might fail, so don't rely on it to free. */
free (p);
- p = NULL;
+ return NULL;
}
-#endif
- if (p == NULL)
+ if (xalloc_oversized (n, 1))
{
-#if GNULIB_REALLOC_GNU && !NEED_REALLOC_GNU && !SYSTEM_MALLOC_GLIBC_COMPATIBLE
- if (n == 0)
- n = 1;
-#endif
- result = malloc (n);
+ errno = ENOMEM;
+ return NULL;
}
- else
- result = realloc (p, n);
-#if !HAVE_REALLOC_POSIX
+ void *result = realloc (p, n);
+
+#if !HAVE_MALLOC_POSIX
if (result == NULL)
errno = ENOMEM;
#endif
diff --git a/gnulib/import/rename.c b/gnulib/import/rename.c
index e0f417de696..119abe5c269 100644
--- a/gnulib/import/rename.c
+++ b/gnulib/import/rename.c
@@ -1,18 +1,18 @@
/* Work around rename bugs in some systems.
- Copyright (C) 2001-2003, 2005-2006, 2009-2021 Free Software Foundation, Inc.
+ Copyright (C) 2001-2003, 2005-2006, 2009-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Volker Borchert, Eric Blake. */
@@ -165,10 +165,8 @@ rpl_rename (char const *src, char const *dst)
}
if (rmdir (dst))
{
- error = errno;
free (src_temp);
free (dst_temp);
- errno = error;
return -1;
}
free (src_temp);
@@ -289,7 +287,7 @@ rpl_rename (char const *src, char const *dst)
char *dst_temp = (char *) dst;
bool src_slash;
bool dst_slash;
- bool dst_exists _GL_UNUSED;
+ _GL_UNUSED bool dst_exists;
int ret_val = -1;
int rename_errno = ENOTDIR;
struct stat src_st;
diff --git a/gnulib/import/rewinddir.c b/gnulib/import/rewinddir.c
index 26fbbac7aa5..b07aaf9c68f 100644
--- a/gnulib/import/rewinddir.c
+++ b/gnulib/import/rewinddir.c
@@ -1,17 +1,17 @@
/* Restart reading the entries of a directory from the beginning.
- Copyright (C) 2011-2021 Free Software Foundation, Inc.
+ Copyright (C) 2011-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation, either version 3 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#include <config.h>
diff --git a/gnulib/import/rmdir.c b/gnulib/import/rmdir.c
index 3cca0ce76eb..8c8b75e0409 100644
--- a/gnulib/import/rmdir.c
+++ b/gnulib/import/rmdir.c
@@ -1,19 +1,19 @@
/* Work around rmdir bugs.
- Copyright (C) 1988, 1990, 1999, 2003-2006, 2009-2021 Free Software
+ Copyright (C) 1988, 1990, 1999, 2003-2006, 2009-2022 Free Software
Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#include <config.h>
diff --git a/gnulib/import/same-inode.h b/gnulib/import/same-inode.h
index cf1c96e3ba0..f65f3d039ed 100644
--- a/gnulib/import/same-inode.h
+++ b/gnulib/import/same-inode.h
@@ -1,18 +1,18 @@
/* Determine whether two stat buffers are known to refer to the same file.
- Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc.
+ Copyright (C) 2006, 2009-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#ifndef SAME_INODE_H
diff --git a/gnulib/import/save-cwd.c b/gnulib/import/save-cwd.c
index 0a18bc54461..ea487a40dda 100644
--- a/gnulib/import/save-cwd.c
+++ b/gnulib/import/save-cwd.c
@@ -1,11 +1,11 @@
/* save-cwd.c -- Save and restore current working directory.
- Copyright (C) 1995, 1997-1998, 2003-2006, 2009-2021 Free Software
+ Copyright (C) 1995, 1997-1998, 2003-2006, 2009-2022 Free Software
Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
+ 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,
diff --git a/gnulib/import/save-cwd.h b/gnulib/import/save-cwd.h
index 3cefba58c0a..90e8a0747ce 100644
--- a/gnulib/import/save-cwd.h
+++ b/gnulib/import/save-cwd.h
@@ -1,11 +1,11 @@
/* Save and restore current working directory.
- Copyright (C) 1995, 1997-1998, 2003, 2009-2021 Free Software Foundation,
+ Copyright (C) 1995, 1997-1998, 2003, 2009-2022 Free Software Foundation,
Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
+ 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,
diff --git a/gnulib/import/scratch_buffer.h b/gnulib/import/scratch_buffer.h
index 3e2b5ef27db..f4fe5e8d344 100644
--- a/gnulib/import/scratch_buffer.h
+++ b/gnulib/import/scratch_buffer.h
@@ -1,17 +1,17 @@
/* Variable-sized buffer with on-stack default allocation.
- Copyright (C) 2017-2021 Free Software Foundation, Inc.
+ Copyright (C) 2017-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Paul Eggert, 2017. */
@@ -19,11 +19,109 @@
#ifndef _GL_SCRATCH_BUFFER_H
#define _GL_SCRATCH_BUFFER_H
-#include <libc-config.h>
+/* Scratch buffers with a default stack allocation and fallback to
+ heap allocation. It is expected that this function is used in this
+ way:
+ struct scratch_buffer tmpbuf;
+ scratch_buffer_init (&tmpbuf);
+
+ while (!function_that_uses_buffer (tmpbuf.data, tmpbuf.length))
+ if (!scratch_buffer_grow (&tmpbuf))
+ return -1;
+
+ scratch_buffer_free (&tmpbuf);
+ return 0;
+
+ The allocation functions (scratch_buffer_grow,
+ scratch_buffer_grow_preserve, scratch_buffer_set_array_size) make
+ sure that the heap allocation, if any, is freed, so that the code
+ above does not have a memory leak. The buffer still remains in a
+ state that can be deallocated using scratch_buffer_free, so a loop
+ like this is valid as well:
+
+ struct scratch_buffer tmpbuf;
+ scratch_buffer_init (&tmpbuf);
+
+ while (!function_that_uses_buffer (tmpbuf.data, tmpbuf.length))
+ if (!scratch_buffer_grow (&tmpbuf))
+ break;
+
+ scratch_buffer_free (&tmpbuf);
+
+ scratch_buffer_grow and scratch_buffer_grow_preserve are guaranteed
+ to grow the buffer by at least 512 bytes. This means that when
+ using the scratch buffer as a backing store for a non-character
+ array whose element size, in bytes, is 512 or smaller, the scratch
+ buffer only has to grow once to make room for at least one more
+ element.
+*/
+
+/* Scratch buffer. Must be initialized with scratch_buffer_init
+ before its use. */
+struct scratch_buffer;
+
+/* Initializes *BUFFER so that BUFFER->data points to BUFFER->__space
+ and BUFFER->length reflects the available space. */
+#if 0
+extern void scratch_buffer_init (struct scratch_buffer *buffer);
+#endif
+
+/* Deallocates *BUFFER (if it was heap-allocated). */
+#if 0
+extern void scratch_buffer_free (struct scratch_buffer *buffer);
+#endif
+
+/* Grow *BUFFER by some arbitrary amount. The buffer contents is NOT
+ preserved. Return true on success, false on allocation failure (in
+ which case the old buffer is freed). On success, the new buffer is
+ larger than the previous size. On failure, *BUFFER is deallocated,
+ but remains in a free-able state, and errno is set. */
+#if 0
+extern bool scratch_buffer_grow (struct scratch_buffer *buffer);
+#endif
+
+/* Like scratch_buffer_grow, but preserve the old buffer
+ contents on success, as a prefix of the new buffer. */
+#if 0
+extern bool scratch_buffer_grow_preserve (struct scratch_buffer *buffer);
+#endif
+
+/* Grow *BUFFER so that it can store at least NELEM elements of SIZE
+ bytes. The buffer contents are NOT preserved. Both NELEM and SIZE
+ can be zero. Return true on success, false on allocation failure
+ (in which case the old buffer is freed, but *BUFFER remains in a
+ free-able state, and errno is set). It is unspecified whether this
+ function can reduce the array size. */
+#if 0
+extern bool scratch_buffer_set_array_size (struct scratch_buffer *buffer,
+ size_t nelem, size_t size);
+#endif
+
+/* Return a copy of *BUFFER's first SIZE bytes as a heap-allocated block,
+ deallocating *BUFFER if it was heap-allocated. SIZE must be at
+ most *BUFFER's size. Return NULL (setting errno) on memory
+ exhaustion. */
+#if 0
+extern void *scratch_buffer_dupfree (struct scratch_buffer *buffer,
+ size_t size);
+#endif
+
+
+/* The implementation is imported from glibc. */
+
+/* Avoid possible conflicts with symbols exported by the GNU libc. */
+#define __libc_scratch_buffer_dupfree gl_scratch_buffer_dupfree
#define __libc_scratch_buffer_grow gl_scratch_buffer_grow
#define __libc_scratch_buffer_grow_preserve gl_scratch_buffer_grow_preserve
#define __libc_scratch_buffer_set_array_size gl_scratch_buffer_set_array_size
-#include <malloc/scratch_buffer.h>
+
+#ifndef _GL_LIKELY
+/* Rely on __builtin_expect, as provided by the module 'builtin-expect'. */
+# define _GL_LIKELY(cond) __builtin_expect ((cond), 1)
+# define _GL_UNLIKELY(cond) __builtin_expect ((cond), 0)
+#endif
+
+#include <malloc/scratch_buffer.gl.h>
#endif /* _GL_SCRATCH_BUFFER_H */
diff --git a/gnulib/import/select.c b/gnulib/import/select.c
index 56ac8bb7b58..c24249822d9 100644
--- a/gnulib/import/select.c
+++ b/gnulib/import/select.c
@@ -1,22 +1,22 @@
/* Emulation for select(2)
Contributed by Paolo Bonzini.
- Copyright 2008-2021 Free Software Foundation, Inc.
+ Copyright 2008-2022 Free Software Foundation, Inc.
This file is part of gnulib.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License along
- with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
#include <config.h>
@@ -530,12 +530,13 @@ restart:
if (h != handle_array[nhandles])
{
/* Perform handle->descriptor mapping. */
- WSAEventSelect ((SOCKET) h, NULL, 0);
- if (FD_ISSET (h, &handle_rfds))
+ SOCKET s = (SOCKET) h;
+ WSAEventSelect (s, NULL, 0);
+ if (FD_ISSET (s, &handle_rfds))
FD_SET (i, rfds);
- if (FD_ISSET (h, &handle_wfds))
+ if (FD_ISSET (s, &handle_wfds))
FD_SET (i, wfds);
- if (FD_ISSET (h, &handle_xfds))
+ if (FD_ISSET (s, &handle_xfds))
FD_SET (i, xfds);
}
else
diff --git a/gnulib/import/setenv.c b/gnulib/import/setenv.c
index 78c7aaa31ec..ebfd4e550e8 100644
--- a/gnulib/import/setenv.c
+++ b/gnulib/import/setenv.c
@@ -1,17 +1,17 @@
-/* Copyright (C) 1992, 1995-2003, 2005-2021 Free Software Foundation, Inc.
+/* Copyright (C) 1992, 1995-2003, 2005-2022 Free Software Foundation, Inc.
This file is part of the GNU C 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 file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#if !_LIBC
diff --git a/gnulib/import/setlocale-lock.c b/gnulib/import/setlocale-lock.c
index 5474ae03fc5..4e7540e1ff1 100644
--- a/gnulib/import/setlocale-lock.c
+++ b/gnulib/import/setlocale-lock.c
@@ -1,17 +1,17 @@
/* Return the internal lock used by setlocale_null_r.
- Copyright (C) 2019-2021 Free Software Foundation, Inc.
+ Copyright (C) 2019-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Bruno Haible <bruno@clisp.org>, 2019. */
diff --git a/gnulib/import/setlocale_null.c b/gnulib/import/setlocale_null.c
index 059af4e2c00..778429b9487 100644
--- a/gnulib/import/setlocale_null.c
+++ b/gnulib/import/setlocale_null.c
@@ -1,17 +1,17 @@
/* Query the name of the current global locale.
- Copyright (C) 2019-2021 Free Software Foundation, Inc.
+ Copyright (C) 2019-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Bruno Haible <bruno@clisp.org>, 2019. */
diff --git a/gnulib/import/setlocale_null.h b/gnulib/import/setlocale_null.h
index 5f45856605e..d1921b09ba4 100644
--- a/gnulib/import/setlocale_null.h
+++ b/gnulib/import/setlocale_null.h
@@ -1,17 +1,17 @@
/* Query the name of the current global locale.
- Copyright (C) 2019-2021 Free Software Foundation, Inc.
+ Copyright (C) 2019-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Bruno Haible <bruno@clisp.org>, 2019. */
diff --git a/gnulib/import/setsockopt.c b/gnulib/import/setsockopt.c
index b6f5dfce306..2811c19af43 100644
--- a/gnulib/import/setsockopt.c
+++ b/gnulib/import/setsockopt.c
@@ -1,18 +1,18 @@
/* setsockopt.c --- wrappers for Windows setsockopt function
- Copyright (C) 2008-2021 Free Software Foundation, Inc.
+ Copyright (C) 2008-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Paolo Bonzini */
diff --git a/gnulib/import/signal.in.h b/gnulib/import/signal.in.h
index ed01d672c9d..640b5022f5f 100644
--- a/gnulib/import/signal.in.h
+++ b/gnulib/import/signal.in.h
@@ -1,18 +1,18 @@
/* A GNU-like <signal.h>.
- Copyright (C) 2006-2021 Free Software Foundation, Inc.
+ Copyright (C) 2006-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#if __GNUC__ >= 3
diff --git a/gnulib/import/socket.c b/gnulib/import/socket.c
index f5086ad2a34..49e013c7aa4 100644
--- a/gnulib/import/socket.c
+++ b/gnulib/import/socket.c
@@ -1,18 +1,18 @@
/* socket.c --- wrappers for Windows socket function
- Copyright (C) 2008-2021 Free Software Foundation, Inc.
+ Copyright (C) 2008-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Paolo Bonzini */
diff --git a/gnulib/import/sockets.c b/gnulib/import/sockets.c
index 2de48d25b31..31b43029682 100644
--- a/gnulib/import/sockets.c
+++ b/gnulib/import/sockets.c
@@ -1,18 +1,18 @@
/* sockets.c --- wrappers for Windows socket functions
- Copyright (C) 2008-2021 Free Software Foundation, Inc.
+ Copyright (C) 2008-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Simon Josefsson */
@@ -113,7 +113,7 @@ static int initialized_sockets_version /* = 0 */;
#endif /* WINDOWS_SOCKETS */
int
-gl_sockets_startup (int version _GL_UNUSED)
+gl_sockets_startup (_GL_UNUSED int version)
{
#if WINDOWS_SOCKETS
if (version > initialized_sockets_version)
diff --git a/gnulib/import/sockets.h b/gnulib/import/sockets.h
index e0729c24146..75e49fce085 100644
--- a/gnulib/import/sockets.h
+++ b/gnulib/import/sockets.h
@@ -1,18 +1,18 @@
/* sockets.h - wrappers for Windows socket functions
- Copyright (C) 2008-2021 Free Software Foundation, Inc.
+ Copyright (C) 2008-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Simon Josefsson */
diff --git a/gnulib/import/stat-time.c b/gnulib/import/stat-time.c
index 81b83ddb4fe..3d48a2b5b0e 100644
--- a/gnulib/import/stat-time.c
+++ b/gnulib/import/stat-time.c
@@ -1,3 +1,21 @@
+/* stat-related time functions.
+
+ Copyright (C) 2012-2022 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
#include <config.h>
+
#define _GL_STAT_TIME_INLINE _GL_EXTERN_INLINE
#include "stat-time.h"
diff --git a/gnulib/import/stat-time.h b/gnulib/import/stat-time.h
index 523ed21b080..6b0088e3285 100644
--- a/gnulib/import/stat-time.h
+++ b/gnulib/import/stat-time.h
@@ -1,18 +1,18 @@
/* stat-related time functions.
- Copyright (C) 2005, 2007, 2009-2021 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2007, 2009-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Paul Eggert. */
@@ -102,7 +102,7 @@ get_stat_mtime_ns (struct stat const *st)
/* Return the nanosecond component of *ST's birth time. */
_GL_STAT_TIME_INLINE long int _GL_ATTRIBUTE_PURE
-get_stat_birthtime_ns (struct stat const *st _GL_UNUSED)
+get_stat_birthtime_ns (_GL_UNUSED struct stat const *st)
{
# if defined HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC
return STAT_TIMESPEC (st, st_birthtim).tv_nsec;
@@ -158,7 +158,7 @@ get_stat_mtime (struct stat const *st)
/* Return *ST's birth time, if available; otherwise return a value
with tv_sec and tv_nsec both equal to -1. */
_GL_STAT_TIME_INLINE struct timespec _GL_ATTRIBUTE_PURE
-get_stat_birthtime (struct stat const *st _GL_UNUSED)
+get_stat_birthtime (_GL_UNUSED struct stat const *st)
{
struct timespec t;
@@ -208,7 +208,7 @@ get_stat_birthtime (struct stat const *st _GL_UNUSED)
errno to EOVERFLOW if normalization overflowed. This function
is intended to be private to this .h file. */
_GL_STAT_TIME_INLINE int
-stat_time_normalize (int result, struct stat *st _GL_UNUSED)
+stat_time_normalize (int result, _GL_UNUSED struct stat *st)
{
#if defined __sun && defined STAT_TIMESPEC
if (result == 0)
diff --git a/gnulib/import/stat-w32.c b/gnulib/import/stat-w32.c
index 914707ee53c..c1a29239775 100644
--- a/gnulib/import/stat-w32.c
+++ b/gnulib/import/stat-w32.c
@@ -1,17 +1,17 @@
/* Core of implementation of fstat and stat for native Windows.
- Copyright (C) 2017-2021 Free Software Foundation, Inc.
+ Copyright (C) 2017-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Bruno Haible. */
diff --git a/gnulib/import/stat-w32.h b/gnulib/import/stat-w32.h
index 27b4e472371..0f79d614179 100644
--- a/gnulib/import/stat-w32.h
+++ b/gnulib/import/stat-w32.h
@@ -1,17 +1,17 @@
/* Core of implementation of fstat and stat for native Windows.
- Copyright (C) 2017-2021 Free Software Foundation, Inc.
+ Copyright (C) 2017-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#ifndef _STAT_W32_H
diff --git a/gnulib/import/stat.c b/gnulib/import/stat.c
index 505368f0054..574489ac71e 100644
--- a/gnulib/import/stat.c
+++ b/gnulib/import/stat.c
@@ -1,17 +1,17 @@
/* Work around platform bugs in stat.
- Copyright (C) 2009-2021 Free Software Foundation, Inc.
+ Copyright (C) 2009-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Eric Blake and Bruno Haible. */
diff --git a/gnulib/import/stdalign.in.h b/gnulib/import/stdalign.in.h
index eae9d132215..3b117df11fe 100644
--- a/gnulib/import/stdalign.in.h
+++ b/gnulib/import/stdalign.in.h
@@ -1,19 +1,19 @@
/* A substitute for ISO C11 <stdalign.h>.
- Copyright 2011-2021 Free Software Foundation, Inc.
+ Copyright 2011-2022 Free Software Foundation, Inc.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Paul Eggert and Bruno Haible. */
@@ -104,12 +104,13 @@
#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112
# if defined __cplusplus && 201103 <= __cplusplus
# define _Alignas(a) alignas (a)
-# elif ((defined __APPLE__ && defined __MACH__ \
- ? 4 < __GNUC__ + (1 <= __GNUC_MINOR__) \
- : __GNUC__ && !defined __ibmxl__) \
- || (4 <= __clang_major__) \
- || (__ia64 && (61200 <= __HP_cc || 61200 <= __HP_aCC)) \
- || __ICC || 0x590 <= __SUNPRO_C || 0x0600 <= __xlC__)
+# elif (!defined __attribute__ \
+ && ((defined __APPLE__ && defined __MACH__ \
+ ? 4 < __GNUC__ + (1 <= __GNUC_MINOR__) \
+ : __GNUC__ && !defined __ibmxl__) \
+ || (4 <= __clang_major__) \
+ || (__ia64 && (61200 <= __HP_cc || 61200 <= __HP_aCC)) \
+ || __ICC || 0x590 <= __SUNPRO_C || 0x0600 <= __xlC__))
# define _Alignas(a) __attribute__ ((__aligned__ (a)))
# elif 1300 <= _MSC_VER
# define _Alignas(a) __declspec (align (a))
diff --git a/gnulib/import/stdbool.in.h b/gnulib/import/stdbool.in.h
index 28e0a535514..03840f10fc9 100644
--- a/gnulib/import/stdbool.in.h
+++ b/gnulib/import/stdbool.in.h
@@ -1,18 +1,18 @@
-/* Copyright (C) 2001-2003, 2006-2021 Free Software Foundation, Inc.
+/* Copyright (C) 2001-2003, 2006-2022 Free Software Foundation, Inc.
Written by Bruno Haible <haible@clisp.cons.org>, 2001.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
#ifndef _GL_STDBOOL_H
#define _GL_STDBOOL_H
diff --git a/gnulib/import/stddef.in.h b/gnulib/import/stddef.in.h
index 3a0052d9ba9..5c9a747d7d2 100644
--- a/gnulib/import/stddef.in.h
+++ b/gnulib/import/stddef.in.h
@@ -1,19 +1,19 @@
/* A substitute for POSIX 2008 <stddef.h>, for platforms that have issues.
- Copyright (C) 2009-2021 Free Software Foundation, Inc.
+ Copyright (C) 2009-2022 Free Software Foundation, Inc.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Eric Blake. */
@@ -42,6 +42,13 @@
# define _GL_STDDEF_WINT_T
# endif
# @INCLUDE_NEXT@ @NEXT_STDDEF_H@
+ /* On TinyCC, make sure that the macros that indicate the special invocation
+ convention get undefined. */
+# undef __need_wchar_t
+# undef __need_size_t
+# undef __need_ptrdiff_t
+# undef __need_NULL
+# undef __need_wint_t
# endif
#else
@@ -51,7 +58,7 @@
/* On AIX 7.2, with xlc in 64-bit mode, <stddef.h> defines max_align_t to a
type with alignment 4, but 'long' has alignment 8. */
-# if defined _AIX && defined _ARCH_PPC64
+# if defined _AIX && defined __LP64__
# if !GNULIB_defined_max_align_t
# ifdef _MAX_ALIGN_T
/* /usr/include/stddef.h has already defined max_align_t. Override it. */
@@ -103,11 +110,13 @@ typedef long max_align_t;
we are currently compiling with gcc.
On MSVC, max_align_t is defined only in C++ mode, after <cstddef> was
included. Its definition is good since it has an alignment of 8 (on x86
- and x86_64). */
-#if defined _MSC_VER && defined __cplusplus
+ and x86_64).
+ Similarly on OS/2 kLIBC. */
+#if (defined _MSC_VER || (defined __KLIBC__ && !defined __LIBCN__)) \
+ && defined __cplusplus
# include <cstddef>
#else
-# if ! (@HAVE_MAX_ALIGN_T@ || defined _GCC_MAX_ALIGN_T)
+# if ! (@HAVE_MAX_ALIGN_T@ || (defined _GCC_MAX_ALIGN_T && !defined __clang__))
# if !GNULIB_defined_max_align_t
/* On the x86, the maximum storage alignment of double, long, etc. is 4,
but GCC's C11 ABI for x86 says that max_align_t has an alignment of 8,
diff --git a/gnulib/import/stdint.in.h b/gnulib/import/stdint.in.h
index 7a8f27cef7e..eaa7874f539 100644
--- a/gnulib/import/stdint.in.h
+++ b/gnulib/import/stdint.in.h
@@ -1,19 +1,19 @@
-/* Copyright (C) 2001-2002, 2004-2021 Free Software Foundation, Inc.
+/* Copyright (C) 2001-2002, 2004-2022 Free Software Foundation, Inc.
Written by Paul Eggert, Bruno Haible, Sam Steingold, Peter Burwood.
This file is part of gnulib.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
/*
* ISO C 99 <stdint.h> for platforms that lack it.
@@ -85,7 +85,7 @@
/* Override WINT_MIN and WINT_MAX if gnulib's <wchar.h> or <wctype.h> overrides
wint_t. */
-#if @GNULIB_OVERRIDES_WINT_T@
+#if @GNULIBHEADERS_OVERRIDE_WINT_T@
# undef WINT_MIN
# undef WINT_MAX
# define WINT_MIN 0x0U
@@ -598,7 +598,7 @@ typedef int _verify_intmax_size[sizeof (intmax_t) == sizeof (uintmax_t)
/* wint_t limits */
/* If gnulib's <wchar.h> or <wctype.h> overrides wint_t, @WINT_T_SUFFIX@ is not
accurate, therefore use the definitions from above. */
-# if !@GNULIB_OVERRIDES_WINT_T@
+# if !@GNULIBHEADERS_OVERRIDE_WINT_T@
# undef WINT_MIN
# undef WINT_MAX
# if @HAVE_SIGNED_WINT_T@
diff --git a/gnulib/import/stdio-read.c b/gnulib/import/stdio-read.c
new file mode 100644
index 00000000000..85efa0d4438
--- /dev/null
+++ b/gnulib/import/stdio-read.c
@@ -0,0 +1,168 @@
+/* POSIX compatible FILE stream read function.
+ Copyright (C) 2008-2022 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2011.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+/* Specification. */
+#include <stdio.h>
+
+/* Replace these functions only if module 'nonblocking' is requested. */
+#if GNULIB_NONBLOCKING
+
+/* On native Windows platforms, when read() is called on a non-blocking pipe
+ with an empty buffer, ReadFile() fails with error GetLastError() =
+ ERROR_NO_DATA, and read() in consequence fails with error EINVAL. This
+ read() function is at the basis of the function which fills the buffer of
+ a FILE stream. */
+
+# if defined _WIN32 && ! defined __CYGWIN__
+
+# include <errno.h>
+# include <io.h>
+
+# define WIN32_LEAN_AND_MEAN /* avoid including junk */
+# include <windows.h>
+
+# if GNULIB_MSVC_NOTHROW
+# include "msvc-nothrow.h"
+# else
+# include <io.h>
+# endif
+
+/* Don't assume that UNICODE is not defined. */
+# undef GetNamedPipeHandleState
+# define GetNamedPipeHandleState GetNamedPipeHandleStateA
+
+# define CALL_WITH_ERRNO_FIX(RETTYPE, EXPRESSION, FAILED) \
+ if (ferror (stream)) \
+ return (EXPRESSION); \
+ else \
+ { \
+ RETTYPE ret; \
+ SetLastError (0); \
+ ret = (EXPRESSION); \
+ if (FAILED) \
+ { \
+ if (GetLastError () == ERROR_NO_DATA && ferror (stream)) \
+ { \
+ int fd = fileno (stream); \
+ if (fd >= 0) \
+ { \
+ HANDLE h = (HANDLE) _get_osfhandle (fd); \
+ if (GetFileType (h) == FILE_TYPE_PIPE) \
+ { \
+ /* h is a pipe or socket. */ \
+ DWORD state; \
+ if (GetNamedPipeHandleState (h, &state, NULL, NULL, \
+ NULL, NULL, 0) \
+ && (state & PIPE_NOWAIT) != 0) \
+ /* h is a pipe in non-blocking mode. \
+ Change errno from EINVAL to EAGAIN. */ \
+ errno = EAGAIN; \
+ } \
+ } \
+ } \
+ } \
+ return ret; \
+ }
+
+/* Enable this function definition only if gnulib's <stdio.h> has prepared it.
+ Otherwise we get a function definition conflict with mingw64's <stdio.h>. */
+# if GNULIB_SCANF
+int
+scanf (const char *format, ...)
+{
+ int retval;
+ va_list args;
+
+ va_start (args, format);
+ retval = vfscanf (stdin, format, args);
+ va_end (args);
+
+ return retval;
+}
+# endif
+
+/* Enable this function definition only if gnulib's <stdio.h> has prepared it.
+ Otherwise we get a function definition conflict with mingw64's <stdio.h>. */
+# if GNULIB_FSCANF
+int
+fscanf (FILE *stream, const char *format, ...)
+{
+ int retval;
+ va_list args;
+
+ va_start (args, format);
+ retval = vfscanf (stream, format, args);
+ va_end (args);
+
+ return retval;
+}
+# endif
+
+/* Enable this function definition only if gnulib's <stdio.h> has prepared it.
+ Otherwise we get a function definition conflict with mingw64's <stdio.h>. */
+# if GNULIB_VSCANF
+int
+vscanf (const char *format, va_list args)
+{
+ return vfscanf (stdin, format, args);
+}
+# endif
+
+/* Enable this function definition only if gnulib's <stdio.h> has prepared it.
+ Otherwise we get a function definition conflict with mingw64's <stdio.h>. */
+# if GNULIB_VFSCANF
+int
+vfscanf (FILE *stream, const char *format, va_list args)
+#undef vfscanf
+{
+ CALL_WITH_ERRNO_FIX (int, vfscanf (stream, format, args), ret == EOF)
+}
+# endif
+
+int
+getchar (void)
+{
+ return fgetc (stdin);
+}
+
+int
+fgetc (FILE *stream)
+#undef fgetc
+{
+ CALL_WITH_ERRNO_FIX (int, fgetc (stream), ret == EOF)
+}
+
+char *
+fgets (char *s, int n, FILE *stream)
+#undef fgets
+{
+ CALL_WITH_ERRNO_FIX (char *, fgets (s, n, stream), ret == NULL)
+}
+
+/* We intentionally don't bother to fix gets. */
+
+size_t
+fread (void *ptr, size_t s, size_t n, FILE *stream)
+#undef fread
+{
+ CALL_WITH_ERRNO_FIX (size_t, fread (ptr, s, n, stream), ret < n)
+}
+
+# endif
+#endif
diff --git a/gnulib/import/stdio-write.c b/gnulib/import/stdio-write.c
new file mode 100644
index 00000000000..82facf54501
--- /dev/null
+++ b/gnulib/import/stdio-write.c
@@ -0,0 +1,206 @@
+/* POSIX compatible FILE stream write function.
+ Copyright (C) 2008-2022 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2008.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+/* Specification. */
+#include <stdio.h>
+
+/* Replace these functions only if module 'nonblocking' or module 'sigpipe' is
+ requested. */
+#if GNULIB_NONBLOCKING || GNULIB_SIGPIPE
+
+/* On native Windows platforms, SIGPIPE does not exist. When write() is
+ called on a pipe with no readers, WriteFile() fails with error
+ GetLastError() = ERROR_NO_DATA, and write() in consequence fails with
+ error EINVAL. This write() function is at the basis of the function
+ which flushes the buffer of a FILE stream. */
+
+# if defined _WIN32 && ! defined __CYGWIN__
+
+# include <errno.h>
+# include <signal.h>
+# include <io.h>
+
+# define WIN32_LEAN_AND_MEAN /* avoid including junk */
+# include <windows.h>
+
+# if GNULIB_MSVC_NOTHROW
+# include "msvc-nothrow.h"
+# else
+# include <io.h>
+# endif
+
+/* Don't assume that UNICODE is not defined. */
+# undef GetNamedPipeHandleState
+# define GetNamedPipeHandleState GetNamedPipeHandleStateA
+
+# if GNULIB_NONBLOCKING
+# define CLEAR_ERRNO \
+ errno = 0;
+# define HANDLE_ENOSPC \
+ if (errno == ENOSPC && ferror (stream)) \
+ { \
+ int fd = fileno (stream); \
+ if (fd >= 0) \
+ { \
+ HANDLE h = (HANDLE) _get_osfhandle (fd); \
+ if (GetFileType (h) == FILE_TYPE_PIPE) \
+ { \
+ /* h is a pipe or socket. */ \
+ DWORD state; \
+ if (GetNamedPipeHandleState (h, &state, NULL, NULL, \
+ NULL, NULL, 0) \
+ && (state & PIPE_NOWAIT) != 0) \
+ /* h is a pipe in non-blocking mode. \
+ Change errno from ENOSPC to EAGAIN. */ \
+ errno = EAGAIN; \
+ } \
+ } \
+ } \
+ else
+# else
+# define CLEAR_ERRNO
+# define HANDLE_ENOSPC
+# endif
+
+# if GNULIB_SIGPIPE
+# define CLEAR_LastError \
+ SetLastError (0);
+# define HANDLE_ERROR_NO_DATA \
+ if (GetLastError () == ERROR_NO_DATA && ferror (stream)) \
+ { \
+ int fd = fileno (stream); \
+ if (fd >= 0 \
+ && GetFileType ((HANDLE) _get_osfhandle (fd)) \
+ == FILE_TYPE_PIPE) \
+ { \
+ /* Try to raise signal SIGPIPE. */ \
+ raise (SIGPIPE); \
+ /* If it is currently blocked or ignored, change errno from \
+ EINVAL to EPIPE. */ \
+ errno = EPIPE; \
+ } \
+ } \
+ else
+# else
+# define CLEAR_LastError
+# define HANDLE_ERROR_NO_DATA
+# endif
+
+# define CALL_WITH_SIGPIPE_EMULATION(RETTYPE, EXPRESSION, FAILED) \
+ if (ferror (stream)) \
+ return (EXPRESSION); \
+ else \
+ { \
+ RETTYPE ret; \
+ CLEAR_ERRNO \
+ CLEAR_LastError \
+ ret = (EXPRESSION); \
+ if (FAILED) \
+ { \
+ HANDLE_ENOSPC \
+ HANDLE_ERROR_NO_DATA \
+ ; \
+ } \
+ return ret; \
+ }
+
+# if !REPLACE_PRINTF_POSIX /* avoid collision with printf.c */
+int
+printf (const char *format, ...)
+{
+ int retval;
+ va_list args;
+
+ va_start (args, format);
+ retval = vfprintf (stdout, format, args);
+ va_end (args);
+
+ return retval;
+}
+# endif
+
+# if !REPLACE_FPRINTF_POSIX /* avoid collision with fprintf.c */
+int
+fprintf (FILE *stream, const char *format, ...)
+{
+ int retval;
+ va_list args;
+
+ va_start (args, format);
+ retval = vfprintf (stream, format, args);
+ va_end (args);
+
+ return retval;
+}
+# endif
+
+# if !REPLACE_VPRINTF_POSIX /* avoid collision with vprintf.c */
+int
+vprintf (const char *format, va_list args)
+{
+ return vfprintf (stdout, format, args);
+}
+# endif
+
+# if !REPLACE_VFPRINTF_POSIX /* avoid collision with vfprintf.c */
+int
+vfprintf (FILE *stream, const char *format, va_list args)
+#undef vfprintf
+{
+ CALL_WITH_SIGPIPE_EMULATION (int, vfprintf (stream, format, args), ret == EOF)
+}
+# endif
+
+int
+putchar (int c)
+{
+ return fputc (c, stdout);
+}
+
+int
+fputc (int c, FILE *stream)
+#undef fputc
+{
+ CALL_WITH_SIGPIPE_EMULATION (int, fputc (c, stream), ret == EOF)
+}
+
+int
+fputs (const char *string, FILE *stream)
+#undef fputs
+{
+ CALL_WITH_SIGPIPE_EMULATION (int, fputs (string, stream), ret == EOF)
+}
+
+int
+puts (const char *string)
+#undef puts
+{
+ FILE *stream = stdout;
+ CALL_WITH_SIGPIPE_EMULATION (int, puts (string), ret == EOF)
+}
+
+size_t
+fwrite (const void *ptr, size_t s, size_t n, FILE *stream)
+#undef fwrite
+{
+ CALL_WITH_SIGPIPE_EMULATION (size_t, fwrite (ptr, s, n, stream), ret < n)
+}
+
+# endif
+#endif
diff --git a/gnulib/import/stdio.in.h b/gnulib/import/stdio.in.h
index a9308405052..7b36dac2f52 100644
--- a/gnulib/import/stdio.in.h
+++ b/gnulib/import/stdio.in.h
@@ -1,19 +1,19 @@
/* A GNU-like <stdio.h>.
- Copyright (C) 2004, 2007-2021 Free Software Foundation, Inc.
+ Copyright (C) 2004, 2007-2022 Free Software Foundation, Inc.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
#if __GNUC__ >= 3
@PRAGMA_SYSTEM_HEADER@
@@ -56,6 +56,52 @@
May also define off_t to a 64-bit type on native Windows. */
#include <sys/types.h>
+/* Solaris 10 and NetBSD 7.0 declare renameat in <unistd.h>, not in <stdio.h>. */
+/* But in any case avoid namespace pollution on glibc systems. */
+#if (@GNULIB_RENAMEAT@ || defined GNULIB_POSIXCHECK) && (defined __sun || defined __NetBSD__) \
+ && ! defined __GLIBC__
+# include <unistd.h>
+#endif
+
+/* Android 4.3 declares renameat in <sys/stat.h>, not in <stdio.h>. */
+/* But in any case avoid namespace pollution on glibc systems. */
+#if (@GNULIB_RENAMEAT@ || defined GNULIB_POSIXCHECK) && defined __ANDROID__ \
+ && ! defined __GLIBC__
+# include <sys/stat.h>
+#endif
+
+/* MSVC declares 'perror' in <stdlib.h>, not in <stdio.h>. We must include
+ it before we #define perror rpl_perror. */
+/* But in any case avoid namespace pollution on glibc systems. */
+#if (@GNULIB_PERROR@ || defined GNULIB_POSIXCHECK) \
+ && (defined _WIN32 && ! defined __CYGWIN__) \
+ && ! defined __GLIBC__
+# include <stdlib.h>
+#endif
+
+/* MSVC declares 'remove' in <io.h>, not in <stdio.h>. We must include
+ it before we #define remove rpl_remove. */
+/* MSVC declares 'rename' in <io.h>, not in <stdio.h>. We must include
+ it before we #define rename rpl_rename. */
+/* But in any case avoid namespace pollution on glibc systems. */
+#if (@GNULIB_REMOVE@ || @GNULIB_RENAME@ || defined GNULIB_POSIXCHECK) \
+ && (defined _WIN32 && ! defined __CYGWIN__) \
+ && ! defined __GLIBC__
+# include <io.h>
+#endif
+
+
+/* _GL_ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers
+ that can be freed by passing them as the Ith argument to the
+ function F. */
+#ifndef _GL_ATTRIBUTE_DEALLOC
+# if __GNUC__ >= 11
+# define _GL_ATTRIBUTE_DEALLOC(f, i) __attribute__ ((__malloc__ (f, i)))
+# else
+# define _GL_ATTRIBUTE_DEALLOC(f, i)
+# endif
+#endif
+
/* The __attribute__ feature is available in gcc versions 2.5 and later.
The __-protected variants of the attributes 'format' and 'printf' are
accepted by gcc versions 2.6.4 (effectively 2.7) and later.
@@ -127,41 +173,6 @@
#define _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM(formatstring_parameter, first_argument) \
_GL_ATTRIBUTE_FORMAT ((__scanf__, formatstring_parameter, first_argument))
-/* Solaris 10 and NetBSD 7.0 declare renameat in <unistd.h>, not in <stdio.h>. */
-/* But in any case avoid namespace pollution on glibc systems. */
-#if (@GNULIB_RENAMEAT@ || defined GNULIB_POSIXCHECK) && (defined __sun || defined __NetBSD__) \
- && ! defined __GLIBC__
-# include <unistd.h>
-#endif
-
-/* Android 4.3 declares renameat in <sys/stat.h>, not in <stdio.h>. */
-/* But in any case avoid namespace pollution on glibc systems. */
-#if (@GNULIB_RENAMEAT@ || defined GNULIB_POSIXCHECK) && defined __ANDROID__ \
- && ! defined __GLIBC__
-# include <sys/stat.h>
-#endif
-
-/* MSVC declares 'perror' in <stdlib.h>, not in <stdio.h>. We must include
- it before we #define perror rpl_perror. */
-/* But in any case avoid namespace pollution on glibc systems. */
-#if (@GNULIB_PERROR@ || defined GNULIB_POSIXCHECK) \
- && (defined _WIN32 && ! defined __CYGWIN__) \
- && ! defined __GLIBC__
-# include <stdlib.h>
-#endif
-
-/* MSVC declares 'remove' in <io.h>, not in <stdio.h>. We must include
- it before we #define remove rpl_remove. */
-/* MSVC declares 'rename' in <io.h>, not in <stdio.h>. We must include
- it before we #define rename rpl_rename. */
-/* But in any case avoid namespace pollution on glibc systems. */
-#if (@GNULIB_REMOVE@ || @GNULIB_RENAME@ || defined GNULIB_POSIXCHECK) \
- && (defined _WIN32 && ! defined __CYGWIN__) \
- && ! defined __GLIBC__
-# include <io.h>
-#endif
-
-
/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */
/* The definition of _GL_ARG_NONNULL is copied here. */
@@ -242,7 +253,7 @@ _GL_WARN_ON_USE (fclose, "fclose is not always POSIX compliant - "
_GL_CXXALIAS_MDA (fcloseall, int, (void));
# else
# if @HAVE_DECL_FCLOSEALL@
-# if defined __FreeBSD__
+# if defined __FreeBSD__ || defined __DragonFly__
_GL_CXXALIAS_SYS (fcloseall, void, (void));
# else
_GL_CXXALIAS_SYS (fcloseall, int, (void));
@@ -260,8 +271,9 @@ _GL_CXXALIASWARN (fcloseall);
# undef fdopen
# define fdopen rpl_fdopen
# endif
-_GL_FUNCDECL_RPL (fdopen, FILE *, (int fd, const char *mode)
- _GL_ARG_NONNULL ((2)));
+_GL_FUNCDECL_RPL (fdopen, FILE *,
+ (int fd, const char *mode)
+ _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1));
_GL_CXXALIAS_RPL (fdopen, FILE *, (int fd, const char *mode));
# elif defined _WIN32 && !defined __CYGWIN__
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
@@ -270,28 +282,42 @@ _GL_CXXALIAS_RPL (fdopen, FILE *, (int fd, const char *mode));
# endif
_GL_CXXALIAS_MDA (fdopen, FILE *, (int fd, const char *mode));
# else
+# if __GNUC__ >= 11
+/* For -Wmismatched-dealloc: Associate fdopen with fclose or rpl_fclose. */
+_GL_FUNCDECL_SYS (fdopen, FILE *,
+ (int fd, const char *mode)
+ _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1));
+# endif
_GL_CXXALIAS_SYS (fdopen, FILE *, (int fd, const char *mode));
# endif
_GL_CXXALIASWARN (fdopen);
-#elif defined GNULIB_POSIXCHECK
-# undef fdopen
+#else
+# if @GNULIB_FCLOSE@ && __GNUC__ >= 11 && !defined fdopen
+/* For -Wmismatched-dealloc: Associate fdopen with fclose or rpl_fclose. */
+_GL_FUNCDECL_SYS (fdopen, FILE *,
+ (int fd, const char *mode)
+ _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1));
+# endif
+# if defined GNULIB_POSIXCHECK
+# undef fdopen
/* Assume fdopen is always declared. */
_GL_WARN_ON_USE (fdopen, "fdopen on native Windows platforms is not POSIX compliant - "
"use gnulib module fdopen for portability");
-#elif @GNULIB_MDA_FDOPEN@
+# elif @GNULIB_MDA_FDOPEN@
/* On native Windows, map 'fdopen' to '_fdopen', so that -loldnames is not
required. In C++ with GNULIB_NAMESPACE, avoid differences between
platforms by defining GNULIB_NAMESPACE::fdopen always. */
-# if defined _WIN32 && !defined __CYGWIN__
-# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-# undef fdopen
-# define fdopen _fdopen
-# endif
+# if defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef fdopen
+# define fdopen _fdopen
+# endif
_GL_CXXALIAS_MDA (fdopen, FILE *, (int fd, const char *mode));
-# else
+# else
_GL_CXXALIAS_SYS (fdopen, FILE *, (int fd, const char *mode));
-# endif
+# endif
_GL_CXXALIASWARN (fdopen);
+# endif
#endif
#if @GNULIB_FFLUSH@
@@ -373,28 +399,43 @@ _GL_CXXALIASWARN (fileno);
#endif
#if @GNULIB_FOPEN@
-# if @REPLACE_FOPEN@
+# if (@GNULIB_FOPEN@ && @REPLACE_FOPEN@) \
+ || (@GNULIB_FOPEN_GNU@ && @REPLACE_FOPEN_FOR_FOPEN_GNU@)
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# undef fopen
# define fopen rpl_fopen
# endif
_GL_FUNCDECL_RPL (fopen, FILE *,
(const char *restrict filename, const char *restrict mode)
- _GL_ARG_NONNULL ((1, 2)));
+ _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1));
_GL_CXXALIAS_RPL (fopen, FILE *,
(const char *restrict filename, const char *restrict mode));
# else
+# if __GNUC__ >= 11
+/* For -Wmismatched-dealloc: Associate fopen with fclose or rpl_fclose. */
+_GL_FUNCDECL_SYS (fopen, FILE *,
+ (const char *restrict filename, const char *restrict mode)
+ _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1));
+# endif
_GL_CXXALIAS_SYS (fopen, FILE *,
(const char *restrict filename, const char *restrict mode));
# endif
# if __GLIBC__ >= 2
_GL_CXXALIASWARN (fopen);
# endif
-#elif defined GNULIB_POSIXCHECK
-# undef fopen
+#else
+# if @GNULIB_FCLOSE@ && __GNUC__ >= 11 && !defined fopen
+/* For -Wmismatched-dealloc: Associate fopen with fclose or rpl_fclose. */
+_GL_FUNCDECL_SYS (fopen, FILE *,
+ (const char *restrict filename, const char *restrict mode)
+ _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1));
+# endif
+# if defined GNULIB_POSIXCHECK
+# undef fopen
/* Assume fopen is always declared. */
_GL_WARN_ON_USE (fopen, "fopen on native Windows platforms is not POSIX compliant - "
"use gnulib module fopen for portability");
+# endif
#endif
#if @GNULIB_FPRINTF_POSIX@ || @GNULIB_FPRINTF@
@@ -1009,22 +1050,32 @@ _GL_WARN_ON_USE (perror, "perror is not always POSIX compliant - "
# undef popen
# define popen rpl_popen
# endif
-_GL_FUNCDECL_RPL (popen, FILE *, (const char *cmd, const char *mode)
- _GL_ARG_NONNULL ((1, 2)));
+_GL_FUNCDECL_RPL (popen, FILE *,
+ (const char *cmd, const char *mode)
+ _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (pclose, 1));
_GL_CXXALIAS_RPL (popen, FILE *, (const char *cmd, const char *mode));
# else
-# if !@HAVE_POPEN@
-_GL_FUNCDECL_SYS (popen, FILE *, (const char *cmd, const char *mode)
- _GL_ARG_NONNULL ((1, 2)));
+# if !@HAVE_POPEN@ || __GNUC__ >= 11
+_GL_FUNCDECL_SYS (popen, FILE *,
+ (const char *cmd, const char *mode)
+ _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (pclose, 1));
# endif
_GL_CXXALIAS_SYS (popen, FILE *, (const char *cmd, const char *mode));
# endif
_GL_CXXALIASWARN (popen);
-#elif defined GNULIB_POSIXCHECK
-# undef popen
-# if HAVE_RAW_DECL_POPEN
+#else
+# if @GNULIB_PCLOSE@ && __GNUC__ >= 11 && !defined popen
+/* For -Wmismatched-dealloc: Associate popen with pclose or rpl_pclose. */
+_GL_FUNCDECL_SYS (popen, FILE *,
+ (const char *cmd, const char *mode)
+ _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (pclose, 1));
+# endif
+# if defined GNULIB_POSIXCHECK
+# undef popen
+# if HAVE_RAW_DECL_POPEN
_GL_WARN_ON_USE (popen, "popen is buggy on some platforms - "
"use gnulib module popen or pipe for more portability");
+# endif
# endif
#endif
@@ -1257,6 +1308,7 @@ _GL_CXXALIASWARN (scanf);
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# define snprintf rpl_snprintf
# endif
+# define GNULIB_overrides_snprintf 1
_GL_FUNCDECL_RPL (snprintf, int,
(char *restrict str, size_t size,
const char *restrict format, ...)
@@ -1302,6 +1354,7 @@ _GL_WARN_ON_USE (snprintf, "snprintf is unportable - "
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# define sprintf rpl_sprintf
# endif
+# define GNULIB_overrides_sprintf 1
_GL_FUNCDECL_RPL (sprintf, int,
(char *restrict str, const char *restrict format, ...)
_GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3)
@@ -1344,19 +1397,32 @@ _GL_CXXALIASWARN (tempnam);
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# define tmpfile rpl_tmpfile
# endif
-_GL_FUNCDECL_RPL (tmpfile, FILE *, (void));
+_GL_FUNCDECL_RPL (tmpfile, FILE *, (void)
+ _GL_ATTRIBUTE_DEALLOC (fclose, 1));
_GL_CXXALIAS_RPL (tmpfile, FILE *, (void));
# else
+# if __GNUC__ >= 11
+/* For -Wmismatched-dealloc: Associate tmpfile with fclose or rpl_fclose. */
+_GL_FUNCDECL_SYS (tmpfile, FILE *, (void)
+ _GL_ATTRIBUTE_DEALLOC (fclose, 1));
+# endif
_GL_CXXALIAS_SYS (tmpfile, FILE *, (void));
# endif
# if __GLIBC__ >= 2
_GL_CXXALIASWARN (tmpfile);
# endif
-#elif defined GNULIB_POSIXCHECK
-# undef tmpfile
-# if HAVE_RAW_DECL_TMPFILE
+#else
+# if @GNULIB_FCLOSE@ && __GNUC__ >= 11 && !defined tmpfile
+/* For -Wmismatched-dealloc: Associate tmpfile with fclose or rpl_fclose. */
+_GL_FUNCDECL_SYS (tmpfile, FILE *, (void)
+ _GL_ATTRIBUTE_DEALLOC (fclose, 1));
+# endif
+# if defined GNULIB_POSIXCHECK
+# undef tmpfile
+# if HAVE_RAW_DECL_TMPFILE
_GL_WARN_ON_USE (tmpfile, "tmpfile is not usable on mingw - "
"use gnulib module tmpfile for portability");
+# endif
# endif
#endif
@@ -1369,6 +1435,7 @@ _GL_WARN_ON_USE (tmpfile, "tmpfile is not usable on mingw - "
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# define asprintf rpl_asprintf
# endif
+# define GNULIB_overrides_asprintf
_GL_FUNCDECL_RPL (asprintf, int,
(char **result, const char *format, ...)
_GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3)
@@ -1390,6 +1457,7 @@ _GL_CXXALIASWARN (asprintf);
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# define vasprintf rpl_vasprintf
# endif
+# define GNULIB_overrides_vasprintf 1
_GL_FUNCDECL_RPL (vasprintf, int,
(char **result, const char *format, va_list args)
_GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0)
@@ -1573,6 +1641,7 @@ _GL_CXXALIASWARN (vscanf);
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# define vsnprintf rpl_vsnprintf
# endif
+# define GNULIB_overrides_vsnprintf 1
_GL_FUNCDECL_RPL (vsnprintf, int,
(char *restrict str, size_t size,
const char *restrict format, va_list args)
@@ -1609,6 +1678,7 @@ _GL_WARN_ON_USE (vsnprintf, "vsnprintf is unportable - "
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# define vsprintf rpl_vsprintf
# endif
+# define GNULIB_overrides_vsprintf 1
_GL_FUNCDECL_RPL (vsprintf, int,
(char *restrict str,
const char *restrict format, va_list args)
diff --git a/gnulib/import/stdlib.in.h b/gnulib/import/stdlib.in.h
index 49fc44e14a1..a86643c3ca3 100644
--- a/gnulib/import/stdlib.in.h
+++ b/gnulib/import/stdlib.in.h
@@ -1,18 +1,18 @@
/* A GNU-like <stdlib.h>.
- Copyright (C) 1995, 2001-2004, 2006-2021 Free Software Foundation, Inc.
+ Copyright (C) 1995, 2001-2004, 2006-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#if __GNUC__ >= 3
@@ -99,6 +99,35 @@ struct random_data
# include <unistd.h>
#endif
+/* _GL_ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers
+ that can be freed by passing them as the Ith argument to the
+ function F. */
+#ifndef _GL_ATTRIBUTE_DEALLOC
+# if __GNUC__ >= 11
+# define _GL_ATTRIBUTE_DEALLOC(f, i) __attribute__ ((__malloc__ (f, i)))
+# else
+# define _GL_ATTRIBUTE_DEALLOC(f, i)
+# endif
+#endif
+
+/* _GL_ATTRIBUTE_DEALLOC_FREE declares that the function returns pointers that
+ can be freed via 'free'; it can be used only after declaring 'free'. */
+/* Applies to: functions. Cannot be used on inline functions. */
+#ifndef _GL_ATTRIBUTE_DEALLOC_FREE
+# define _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_DEALLOC (free, 1)
+#endif
+
+/* _GL_ATTRIBUTE_MALLOC declares that the function returns a pointer to freshly
+ allocated memory. */
+/* Applies to: functions. */
+#ifndef _GL_ATTRIBUTE_MALLOC
+# if __GNUC__ >= 3 || defined __clang__
+# define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__))
+# else
+# define _GL_ATTRIBUTE_MALLOC
+# endif
+#endif
+
/* The __attribute__ feature is available in gcc versions 2.5 and later.
The attribute __pure__ was added in gcc 2.96. */
#ifndef _GL_ATTRIBUTE_PURE
@@ -149,6 +178,32 @@ _GL_WARN_ON_USE (_Exit, "_Exit is unportable - "
#endif
+#if @GNULIB_FREE_POSIX@
+# if @REPLACE_FREE@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef free
+# define free rpl_free
+# endif
+# if defined __cplusplus && (__GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2)
+_GL_FUNCDECL_RPL (free, void, (void *ptr) throw ());
+# else
+_GL_FUNCDECL_RPL (free, void, (void *ptr));
+# endif
+_GL_CXXALIAS_RPL (free, void, (void *ptr));
+# else
+_GL_CXXALIAS_SYS (free, void, (void *ptr));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (free);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef free
+/* Assume free is always declared. */
+_GL_WARN_ON_USE (free, "free is not future POSIX compliant everywhere - "
+ "use gnulib module free for portability");
+#endif
+
+
/* Allocate memory with indefinite extent and specified alignment. */
#if @GNULIB_ALIGNED_ALLOC@
# if @REPLACE_ALIGNED_ALLOC@
@@ -156,21 +211,37 @@ _GL_WARN_ON_USE (_Exit, "_Exit is unportable - "
# undef aligned_alloc
# define aligned_alloc rpl_aligned_alloc
# endif
-_GL_FUNCDECL_RPL (aligned_alloc, void *, (size_t alignment, size_t size));
+_GL_FUNCDECL_RPL (aligned_alloc, void *,
+ (size_t alignment, size_t size)
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
_GL_CXXALIAS_RPL (aligned_alloc, void *, (size_t alignment, size_t size));
# else
# if @HAVE_ALIGNED_ALLOC@
+# if __GNUC__ >= 11
+/* For -Wmismatched-dealloc: Associate aligned_alloc with free or rpl_free. */
+_GL_FUNCDECL_SYS (aligned_alloc, void *,
+ (size_t alignment, size_t size)
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+# endif
_GL_CXXALIAS_SYS (aligned_alloc, void *, (size_t alignment, size_t size));
# endif
# endif
# if @HAVE_ALIGNED_ALLOC@
_GL_CXXALIASWARN (aligned_alloc);
# endif
-#elif defined GNULIB_POSIXCHECK
-# undef aligned_alloc
-# if HAVE_RAW_DECL_ALIGNED_ALLOC
+#else
+# if @GNULIB_FREE_POSIX@ && __GNUC__ >= 11 && !defined aligned_alloc
+/* For -Wmismatched-dealloc: Associate aligned_alloc with free or rpl_free. */
+_GL_FUNCDECL_SYS (aligned_alloc, void *,
+ (size_t alignment, size_t size)
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+# endif
+# if defined GNULIB_POSIXCHECK
+# undef aligned_alloc
+# if HAVE_RAW_DECL_ALIGNED_ALLOC
_GL_WARN_ON_USE (aligned_alloc, "aligned_alloc is not portable - "
"use gnulib module aligned_alloc for portability");
+# endif
# endif
#endif
@@ -193,24 +264,41 @@ _GL_WARN_ON_USE (atoll, "atoll is unportable - "
#endif
#if @GNULIB_CALLOC_POSIX@
-# if @REPLACE_CALLOC@
+# if (@GNULIB_CALLOC_POSIX@ && @REPLACE_CALLOC_FOR_CALLOC_POSIX@) \
+ || (@GNULIB_CALLOC_GNU@ && @REPLACE_CALLOC_FOR_CALLOC_GNU@)
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# undef calloc
# define calloc rpl_calloc
# endif
-_GL_FUNCDECL_RPL (calloc, void *, (size_t nmemb, size_t size));
+_GL_FUNCDECL_RPL (calloc, void *,
+ (size_t nmemb, size_t size)
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
_GL_CXXALIAS_RPL (calloc, void *, (size_t nmemb, size_t size));
# else
+# if __GNUC__ >= 11
+/* For -Wmismatched-dealloc: Associate calloc with free or rpl_free. */
+_GL_FUNCDECL_SYS (calloc, void *,
+ (size_t nmemb, size_t size)
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+# endif
_GL_CXXALIAS_SYS (calloc, void *, (size_t nmemb, size_t size));
# endif
# if __GLIBC__ >= 2
_GL_CXXALIASWARN (calloc);
# endif
-#elif defined GNULIB_POSIXCHECK
-# undef calloc
+#else
+# if @GNULIB_FREE_POSIX@ && __GNUC__ >= 11 && !defined calloc
+/* For -Wmismatched-dealloc: Associate calloc with free or rpl_free. */
+_GL_FUNCDECL_SYS (calloc, void *,
+ (size_t nmemb, size_t size)
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+# endif
+# if defined GNULIB_POSIXCHECK
+# undef calloc
/* Assume calloc is always declared. */
_GL_WARN_ON_USE (calloc, "calloc is not POSIX compliant everywhere - "
"use gnulib module calloc-posix for portability");
+# endif
#endif
#if @GNULIB_CANONICALIZE_FILE_NAME@
@@ -218,13 +306,17 @@ _GL_WARN_ON_USE (calloc, "calloc is not POSIX compliant everywhere - "
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# define canonicalize_file_name rpl_canonicalize_file_name
# endif
-_GL_FUNCDECL_RPL (canonicalize_file_name, char *, (const char *name)
- _GL_ARG_NONNULL ((1)));
+_GL_FUNCDECL_RPL (canonicalize_file_name, char *,
+ (const char *name)
+ _GL_ARG_NONNULL ((1))
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
_GL_CXXALIAS_RPL (canonicalize_file_name, char *, (const char *name));
# else
-# if !@HAVE_CANONICALIZE_FILE_NAME@
-_GL_FUNCDECL_SYS (canonicalize_file_name, char *, (const char *name)
- _GL_ARG_NONNULL ((1)));
+# if !@HAVE_CANONICALIZE_FILE_NAME@ || __GNUC__ >= 11
+_GL_FUNCDECL_SYS (canonicalize_file_name, char *,
+ (const char *name)
+ _GL_ARG_NONNULL ((1))
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
# endif
_GL_CXXALIAS_SYS (canonicalize_file_name, char *, (const char *name));
# endif
@@ -233,12 +325,22 @@ _GL_CXXALIAS_SYS (canonicalize_file_name, char *, (const char *name));
(!@HAVE_CANONICALIZE_FILE_NAME@ || @REPLACE_CANONICALIZE_FILE_NAME@)
# endif
_GL_CXXALIASWARN (canonicalize_file_name);
-#elif defined GNULIB_POSIXCHECK
-# undef canonicalize_file_name
-# if HAVE_RAW_DECL_CANONICALIZE_FILE_NAME
+#else
+# if @GNULIB_FREE_POSIX@ && __GNUC__ >= 11 && !defined canonicalize_file_name
+/* For -Wmismatched-dealloc: Associate canonicalize_file_name with free or
+ rpl_free. */
+_GL_FUNCDECL_SYS (canonicalize_file_name, char *,
+ (const char *name)
+ _GL_ARG_NONNULL ((1))
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+# endif
+# if defined GNULIB_POSIXCHECK
+# undef canonicalize_file_name
+# if HAVE_RAW_DECL_CANONICALIZE_FILE_NAME
_GL_WARN_ON_USE (canonicalize_file_name,
"canonicalize_file_name is unportable - "
"use gnulib module canonicalize-lgpl for portability");
+# endif
# endif
#endif
@@ -288,27 +390,6 @@ _GL_CXXALIASWARN (fcvt);
# endif
#endif
-#if @GNULIB_FREE_POSIX@
-# if @REPLACE_FREE@
-# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-# undef free
-# define free rpl_free
-# endif
-_GL_FUNCDECL_RPL (free, void, (void *ptr));
-_GL_CXXALIAS_RPL (free, void, (void *ptr));
-# else
-_GL_CXXALIAS_SYS (free, void, (void *ptr));
-# endif
-# if __GLIBC__ >= 2
-_GL_CXXALIASWARN (free);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef free
-/* Assume free is always declared. */
-_GL_WARN_ON_USE (free, "free is not future POSIX compliant everywhere - "
- "use gnulib module free for portability");
-#endif
-
#if @GNULIB_MDA_GCVT@
/* On native Windows, map 'gcvt' to '_gcvt', so that -loldnames is not
required. In C++ with GNULIB_NAMESPACE, avoid differences between
@@ -398,25 +479,42 @@ _GL_WARN_ON_USE (grantpt, "grantpt is not portable - "
by never specifying a zero size), so it does not need malloc or
realloc to be redefined. */
#if @GNULIB_MALLOC_POSIX@
-# if @REPLACE_MALLOC@
+# if (@GNULIB_MALLOC_POSIX@ && @REPLACE_MALLOC_FOR_MALLOC_POSIX@) \
+ || (@GNULIB_MALLOC_GNU@ && @REPLACE_MALLOC_FOR_MALLOC_GNU@)
# if !((defined __cplusplus && defined GNULIB_NAMESPACE) \
|| _GL_USE_STDLIB_ALLOC)
# undef malloc
# define malloc rpl_malloc
# endif
-_GL_FUNCDECL_RPL (malloc, void *, (size_t size));
+_GL_FUNCDECL_RPL (malloc, void *,
+ (size_t size)
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
_GL_CXXALIAS_RPL (malloc, void *, (size_t size));
# else
+# if __GNUC__ >= 11
+/* For -Wmismatched-dealloc: Associate malloc with free or rpl_free. */
+_GL_FUNCDECL_SYS (malloc, void *,
+ (size_t size)
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+# endif
_GL_CXXALIAS_SYS (malloc, void *, (size_t size));
# endif
# if __GLIBC__ >= 2
_GL_CXXALIASWARN (malloc);
# endif
-#elif defined GNULIB_POSIXCHECK && !_GL_USE_STDLIB_ALLOC
-# undef malloc
+#else
+# if @GNULIB_FREE_POSIX@ && __GNUC__ >= 11 && !defined malloc
+/* For -Wmismatched-dealloc: Associate malloc with free or rpl_free. */
+_GL_FUNCDECL_SYS (malloc, void *,
+ (size_t size)
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+# endif
+# if defined GNULIB_POSIXCHECK && !_GL_USE_STDLIB_ALLOC
+# undef malloc
/* Assume malloc is always declared. */
_GL_WARN_ON_USE (malloc, "malloc is not POSIX compliant everywhere - "
"use gnulib module malloc-posix for portability");
+# endif
#endif
/* Convert a multibyte character to a wide character. */
@@ -736,29 +834,35 @@ _GL_CXXALIASWARN (putenv);
/* Sort an array of NMEMB elements, starting at address BASE, each element
occupying SIZE bytes, in ascending order according to the comparison
function COMPARE. */
+# ifdef __cplusplus
+extern "C" {
+# endif
+# if !GNULIB_defined_qsort_r_fn_types
+typedef int (*_gl_qsort_r_compar_fn) (void const *, void const *, void *);
+# define GNULIB_defined_qsort_r_fn_types 1
+# endif
+# ifdef __cplusplus
+}
+# endif
# if @REPLACE_QSORT_R@
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# undef qsort_r
# define qsort_r rpl_qsort_r
# endif
_GL_FUNCDECL_RPL (qsort_r, void, (void *base, size_t nmemb, size_t size,
- int (*compare) (void const *, void const *,
- void *),
+ _gl_qsort_r_compar_fn compare,
void *arg) _GL_ARG_NONNULL ((1, 4)));
_GL_CXXALIAS_RPL (qsort_r, void, (void *base, size_t nmemb, size_t size,
- int (*compare) (void const *, void const *,
- void *),
+ _gl_qsort_r_compar_fn compare,
void *arg));
# else
# if !@HAVE_QSORT_R@
_GL_FUNCDECL_SYS (qsort_r, void, (void *base, size_t nmemb, size_t size,
- int (*compare) (void const *, void const *,
- void *),
+ _gl_qsort_r_compar_fn compare,
void *arg) _GL_ARG_NONNULL ((1, 4)));
# endif
_GL_CXXALIAS_SYS (qsort_r, void, (void *base, size_t nmemb, size_t size,
- int (*compare) (void const *, void const *,
- void *),
+ _gl_qsort_r_compar_fn compare,
void *arg));
# endif
_GL_CXXALIASWARN (qsort_r);
@@ -1009,35 +1113,60 @@ _GL_WARN_ON_USE (setstate_r, "setstate_r is unportable - "
#if @GNULIB_REALLOC_POSIX@
-# if @REPLACE_REALLOC@
+# if (@GNULIB_REALLOC_POSIX@ && @REPLACE_REALLOC_FOR_REALLOC_POSIX@) \
+ || (@GNULIB_REALLOC_GNU@ && @REPLACE_REALLOC_FOR_REALLOC_GNU@)
# if !((defined __cplusplus && defined GNULIB_NAMESPACE) \
|| _GL_USE_STDLIB_ALLOC)
# undef realloc
# define realloc rpl_realloc
# endif
-_GL_FUNCDECL_RPL (realloc, void *, (void *ptr, size_t size));
+_GL_FUNCDECL_RPL (realloc, void *, (void *ptr, size_t size)
+ _GL_ATTRIBUTE_DEALLOC_FREE);
_GL_CXXALIAS_RPL (realloc, void *, (void *ptr, size_t size));
# else
+# if __GNUC__ >= 11
+/* For -Wmismatched-dealloc: Associate realloc with free or rpl_free. */
+_GL_FUNCDECL_SYS (realloc, void *, (void *ptr, size_t size)
+ _GL_ATTRIBUTE_DEALLOC_FREE);
+# endif
_GL_CXXALIAS_SYS (realloc, void *, (void *ptr, size_t size));
# endif
# if __GLIBC__ >= 2
_GL_CXXALIASWARN (realloc);
# endif
-#elif defined GNULIB_POSIXCHECK && !_GL_USE_STDLIB_ALLOC
-# undef realloc
+#else
+# if @GNULIB_FREE_POSIX@ && __GNUC__ >= 11 && !defined realloc
+/* For -Wmismatched-dealloc: Associate realloc with free or rpl_free. */
+_GL_FUNCDECL_SYS (realloc, void *, (void *ptr, size_t size)
+ _GL_ATTRIBUTE_DEALLOC_FREE);
+# endif
+# if defined GNULIB_POSIXCHECK && !_GL_USE_STDLIB_ALLOC
+# undef realloc
/* Assume realloc is always declared. */
_GL_WARN_ON_USE (realloc, "realloc is not POSIX compliant everywhere - "
"use gnulib module realloc-posix for portability");
+# endif
#endif
#if @GNULIB_REALLOCARRAY@
-# if ! @HAVE_REALLOCARRAY@
+# if @REPLACE_REALLOCARRAY@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef reallocarray
+# define reallocarray rpl_reallocarray
+# endif
+_GL_FUNCDECL_RPL (reallocarray, void *,
+ (void *ptr, size_t nmemb, size_t size));
+_GL_CXXALIAS_RPL (reallocarray, void *,
+ (void *ptr, size_t nmemb, size_t size));
+# else
+# if ! @HAVE_REALLOCARRAY@
_GL_FUNCDECL_SYS (reallocarray, void *,
(void *ptr, size_t nmemb, size_t size));
-# endif
+# endif
_GL_CXXALIAS_SYS (reallocarray, void *,
(void *ptr, size_t nmemb, size_t size));
+# endif
_GL_CXXALIASWARN (reallocarray);
#elif defined GNULIB_POSIXCHECK
# undef reallocarray
@@ -1202,6 +1331,47 @@ _GL_WARN_ON_USE (strtold, "strtold is unportable - "
# endif
#endif
+#if @GNULIB_STRTOL@
+/* Parse a signed integer whose textual representation starts at STRING.
+ The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0,
+ it may be decimal or octal (with prefix "0") or hexadecimal (with prefix
+ "0x").
+ If ENDPTR is not NULL, the address of the first byte after the integer is
+ stored in *ENDPTR.
+ Upon overflow, the return value is LONG_MAX or LONG_MIN, and errno is set
+ to ERANGE. */
+# if @REPLACE_STRTOL@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define strtol rpl_strtol
+# endif
+# define GNULIB_defined_strtol_function 1
+_GL_FUNCDECL_RPL (strtol, long,
+ (const char *restrict string, char **restrict endptr,
+ int base)
+ _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (strtol, long,
+ (const char *restrict string, char **restrict endptr,
+ int base));
+# else
+# if !@HAVE_STRTOL@
+_GL_FUNCDECL_SYS (strtol, long,
+ (const char *restrict string, char **restrict endptr,
+ int base)
+ _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (strtol, long,
+ (const char *restrict string, char **restrict endptr,
+ int base));
+# endif
+_GL_CXXALIASWARN (strtol);
+#elif defined GNULIB_POSIXCHECK
+# undef strtol
+# if HAVE_RAW_DECL_STRTOL
+_GL_WARN_ON_USE (strtol, "strtol is unportable - "
+ "use gnulib module strtol for portability");
+# endif
+#endif
+
#if @GNULIB_STRTOLL@
/* Parse a signed integer whose textual representation starts at STRING.
The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0,
@@ -1211,15 +1381,29 @@ _GL_WARN_ON_USE (strtold, "strtold is unportable - "
stored in *ENDPTR.
Upon overflow, the return value is LLONG_MAX or LLONG_MIN, and errno is set
to ERANGE. */
-# if !@HAVE_STRTOLL@
+# if @REPLACE_STRTOLL@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define strtoll rpl_strtoll
+# endif
+# define GNULIB_defined_strtoll_function 1
+_GL_FUNCDECL_RPL (strtoll, long long,
+ (const char *restrict string, char **restrict endptr,
+ int base)
+ _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (strtoll, long long,
+ (const char *restrict string, char **restrict endptr,
+ int base));
+# else
+# if !@HAVE_STRTOLL@
_GL_FUNCDECL_SYS (strtoll, long long,
(const char *restrict string, char **restrict endptr,
int base)
_GL_ARG_NONNULL ((1)));
-# endif
+# endif
_GL_CXXALIAS_SYS (strtoll, long long,
(const char *restrict string, char **restrict endptr,
int base));
+# endif
_GL_CXXALIASWARN (strtoll);
#elif defined GNULIB_POSIXCHECK
# undef strtoll
@@ -1229,6 +1413,46 @@ _GL_WARN_ON_USE (strtoll, "strtoll is unportable - "
# endif
#endif
+#if @GNULIB_STRTOUL@
+/* Parse an unsigned integer whose textual representation starts at STRING.
+ The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0,
+ it may be decimal or octal (with prefix "0") or hexadecimal (with prefix
+ "0x").
+ If ENDPTR is not NULL, the address of the first byte after the integer is
+ stored in *ENDPTR.
+ Upon overflow, the return value is ULONG_MAX, and errno is set to ERANGE. */
+# if @REPLACE_STRTOUL@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define strtoul rpl_strtoul
+# endif
+# define GNULIB_defined_strtoul_function 1
+_GL_FUNCDECL_RPL (strtoul, unsigned long,
+ (const char *restrict string, char **restrict endptr,
+ int base)
+ _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (strtoul, unsigned long,
+ (const char *restrict string, char **restrict endptr,
+ int base));
+# else
+# if !@HAVE_STRTOUL@
+_GL_FUNCDECL_SYS (strtoul, unsigned long,
+ (const char *restrict string, char **restrict endptr,
+ int base)
+ _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (strtoul, unsigned long,
+ (const char *restrict string, char **restrict endptr,
+ int base));
+# endif
+_GL_CXXALIASWARN (strtoul);
+#elif defined GNULIB_POSIXCHECK
+# undef strtoul
+# if HAVE_RAW_DECL_STRTOUL
+_GL_WARN_ON_USE (strtoul, "strtoul is unportable - "
+ "use gnulib module strtoul for portability");
+# endif
+#endif
+
#if @GNULIB_STRTOULL@
/* Parse an unsigned integer whose textual representation starts at STRING.
The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0,
@@ -1238,15 +1462,29 @@ _GL_WARN_ON_USE (strtoll, "strtoll is unportable - "
stored in *ENDPTR.
Upon overflow, the return value is ULLONG_MAX, and errno is set to
ERANGE. */
-# if !@HAVE_STRTOULL@
+# if @REPLACE_STRTOULL@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define strtoull rpl_strtoull
+# endif
+# define GNULIB_defined_strtoull_function 1
+_GL_FUNCDECL_RPL (strtoull, unsigned long long,
+ (const char *restrict string, char **restrict endptr,
+ int base)
+ _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (strtoull, unsigned long long,
+ (const char *restrict string, char **restrict endptr,
+ int base));
+# else
+# if !@HAVE_STRTOULL@
_GL_FUNCDECL_SYS (strtoull, unsigned long long,
(const char *restrict string, char **restrict endptr,
int base)
_GL_ARG_NONNULL ((1)));
-# endif
+# endif
_GL_CXXALIAS_SYS (strtoull, unsigned long long,
(const char *restrict string, char **restrict endptr,
int base));
+# endif
_GL_CXXALIASWARN (strtoull);
#elif defined GNULIB_POSIXCHECK
# undef strtoull
diff --git a/gnulib/import/str-two-way.h b/gnulib/import/str-two-way.h
index 005a19fb513..7ee344aea14 100644
--- a/gnulib/import/str-two-way.h
+++ b/gnulib/import/str-two-way.h
@@ -1,20 +1,20 @@
/* Byte-wise substring search, using the Two-Way algorithm.
- Copyright (C) 2008-2021 Free Software Foundation, Inc.
+ Copyright (C) 2008-2022 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Written by Eric Blake <ebb9@byu.net>, 2008.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License along
- with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Before including this file, you need to include <config.h> and
<string.h>, and define:
diff --git a/gnulib/import/strchrnul.c b/gnulib/import/strchrnul.c
index 3fed52a53eb..2141b3e19de 100644
--- a/gnulib/import/strchrnul.c
+++ b/gnulib/import/strchrnul.c
@@ -1,17 +1,17 @@
/* Searching in a string.
- Copyright (C) 2003, 2007-2021 Free Software Foundation, Inc.
+ Copyright (C) 2003, 2007-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#include <config.h>
diff --git a/gnulib/import/strchrnul.valgrind b/gnulib/import/strchrnul.valgrind
index c71fd1544fd..1cf50ec8db6 100644
--- a/gnulib/import/strchrnul.valgrind
+++ b/gnulib/import/strchrnul.valgrind
@@ -1,18 +1,18 @@
# Suppress a valgrind message about use of uninitialized memory in strchrnul().
-# Copyright (C) 2008-2021 Free Software Foundation, Inc.
+# Copyright (C) 2008-2022 Free Software Foundation, Inc.
#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
-# (at your option) any later version.
+# This file is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as
+# published by the Free Software Foundation; either version 2.1 of the
+# License, or (at your option) any later version.
#
-# This program is distributed in the hope that it will be useful,
+# This file is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
+# GNU Lesser General Public License for more details.
#
-# You should have received a copy of the GNU General Public License
+# You should have received a copy of the GNU Lesser General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
# This use is OK because it provides only a speedup.
diff --git a/gnulib/import/strdup.c b/gnulib/import/strdup.c
index 1a00b9d6eb0..2a0df023c51 100644
--- a/gnulib/import/strdup.c
+++ b/gnulib/import/strdup.c
@@ -1,20 +1,20 @@
-/* Copyright (C) 1991, 1996-1998, 2002-2004, 2006-2007, 2009-2021 Free Software
+/* Copyright (C) 1991, 1996-1998, 2002-2004, 2006-2007, 2009-2022 Free Software
Foundation, Inc.
This file is part of the GNU C 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, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License along
- with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
#ifndef _LIBC
# include <config.h>
diff --git a/gnulib/import/streq.h b/gnulib/import/streq.h
index 9b63e81c2ee..49f73c1b9e9 100644
--- a/gnulib/import/streq.h
+++ b/gnulib/import/streq.h
@@ -1,17 +1,17 @@
/* Optimized string comparison.
- Copyright (C) 2001-2002, 2007, 2009-2021 Free Software Foundation, Inc.
+ Copyright (C) 2001-2002, 2007, 2009-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published
- by the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Bruno Haible <bruno@clisp.org>. */
diff --git a/gnulib/import/strerror-override.c b/gnulib/import/strerror-override.c
index 744714fa26c..6be1afdc836 100644
--- a/gnulib/import/strerror-override.c
+++ b/gnulib/import/strerror-override.c
@@ -1,18 +1,18 @@
/* strerror-override.c --- POSIX compatible system error routine
- Copyright (C) 2010-2021 Free Software Foundation, Inc.
+ Copyright (C) 2010-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Bruno Haible <bruno@clisp.org>, 2010. */
@@ -29,6 +29,8 @@
# endif
#endif
+#if !GNULIB_defined_strerror_override_macro
+
/* If ERRNUM maps to an errno value defined by gnulib, return a string
describing the error. Otherwise return NULL. */
const char *
@@ -37,12 +39,12 @@ strerror_override (int errnum)
/* These error messages are taken from glibc/sysdeps/gnu/errlist.c. */
switch (errnum)
{
-#if REPLACE_STRERROR_0
+# if REPLACE_STRERROR_0
case 0:
return "Success";
-#endif
+# endif
-#if GNULIB_defined_ESOCK /* native Windows platforms with older <errno.h> */
+# if GNULIB_defined_ESOCK /* native Windows platforms with older <errno.h> */
case EINPROGRESS:
return "Operation now in progress";
case EALREADY:
@@ -89,8 +91,8 @@ strerror_override (int errnum)
return "No route to host";
case EWOULDBLOCK:
return "Operation would block";
-#endif
-#if GNULIB_defined_ESTREAMS /* native Windows platforms with older <errno.h> */
+# endif
+# if GNULIB_defined_ESTREAMS /* native Windows platforms with older <errno.h> */
case ETXTBSY:
return "Text file busy";
case ENODATA:
@@ -103,8 +105,8 @@ strerror_override (int errnum)
return "Timer expired";
case EOTHER:
return "Other error";
-#endif
-#if GNULIB_defined_EWINSOCK /* native Windows platforms */
+# endif
+# if GNULIB_defined_EWINSOCK /* native Windows platforms */
case ESOCKTNOSUPPORT:
return "Socket type not supported";
case EPFNOSUPPORT:
@@ -125,7 +127,7 @@ strerror_override (int errnum)
return "Stale NFS file handle";
case EREMOTE:
return "Object is remote";
-# if HAVE_WINSOCK2_H
+# if HAVE_WINSOCK2_H
/* WSA_INVALID_HANDLE maps to EBADF */
/* WSA_NOT_ENOUGH_MEMORY maps to ENOMEM */
/* WSA_INVALID_PARAMETER maps to EINVAL */
@@ -213,90 +215,92 @@ strerror_override (int errnum)
case WSANO_DATA:
return "Valid name, no data record of requested type";
/* WSA_QOS_* omitted */
+# endif
# endif
-#endif
-#if GNULIB_defined_ENOMSG
+# if GNULIB_defined_ENOMSG
case ENOMSG:
return "No message of desired type";
-#endif
+# endif
-#if GNULIB_defined_EIDRM
+# if GNULIB_defined_EIDRM
case EIDRM:
return "Identifier removed";
-#endif
+# endif
-#if GNULIB_defined_ENOLINK
+# if GNULIB_defined_ENOLINK
case ENOLINK:
return "Link has been severed";
-#endif
+# endif
-#if GNULIB_defined_EPROTO
+# if GNULIB_defined_EPROTO
case EPROTO:
return "Protocol error";
-#endif
+# endif
-#if GNULIB_defined_EMULTIHOP
+# if GNULIB_defined_EMULTIHOP
case EMULTIHOP:
return "Multihop attempted";
-#endif
+# endif
-#if GNULIB_defined_EBADMSG
+# if GNULIB_defined_EBADMSG
case EBADMSG:
return "Bad message";
-#endif
+# endif
-#if GNULIB_defined_EOVERFLOW
+# if GNULIB_defined_EOVERFLOW
case EOVERFLOW:
return "Value too large for defined data type";
-#endif
+# endif
-#if GNULIB_defined_ENOTSUP
+# if GNULIB_defined_ENOTSUP
case ENOTSUP:
return "Not supported";
-#endif
+# endif
-#if GNULIB_defined_ENETRESET
+# if GNULIB_defined_ENETRESET
case ENETRESET:
return "Network dropped connection on reset";
-#endif
+# endif
-#if GNULIB_defined_ECONNABORTED
+# if GNULIB_defined_ECONNABORTED
case ECONNABORTED:
return "Software caused connection abort";
-#endif
+# endif
-#if GNULIB_defined_ESTALE
+# if GNULIB_defined_ESTALE
case ESTALE:
return "Stale NFS file handle";
-#endif
+# endif
-#if GNULIB_defined_EDQUOT
+# if GNULIB_defined_EDQUOT
case EDQUOT:
return "Disk quota exceeded";
-#endif
+# endif
-#if GNULIB_defined_ECANCELED
+# if GNULIB_defined_ECANCELED
case ECANCELED:
return "Operation canceled";
-#endif
+# endif
-#if GNULIB_defined_EOWNERDEAD
+# if GNULIB_defined_EOWNERDEAD
case EOWNERDEAD:
return "Owner died";
-#endif
+# endif
-#if GNULIB_defined_ENOTRECOVERABLE
+# if GNULIB_defined_ENOTRECOVERABLE
case ENOTRECOVERABLE:
return "State not recoverable";
-#endif
+# endif
-#if GNULIB_defined_EILSEQ
+# if GNULIB_defined_EILSEQ
case EILSEQ:
return "Invalid or incomplete multibyte or wide character";
-#endif
+# endif
default:
return NULL;
}
}
+
+#endif
diff --git a/gnulib/import/strerror-override.h b/gnulib/import/strerror-override.h
index 009c5609c1a..d010d27ca7c 100644
--- a/gnulib/import/strerror-override.h
+++ b/gnulib/import/strerror-override.h
@@ -1,18 +1,18 @@
/* strerror-override.h --- POSIX compatible system error routine
- Copyright (C) 2010-2021 Free Software Foundation, Inc.
+ Copyright (C) 2010-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#ifndef _GL_STRERROR_OVERRIDE_H
@@ -51,6 +51,7 @@
extern const char *strerror_override (int errnum) _GL_ATTRIBUTE_CONST;
# else
# define strerror_override(ignored) NULL
+# define GNULIB_defined_strerror_override_macro 1
# endif
#endif /* _GL_STRERROR_OVERRIDE_H */
diff --git a/gnulib/import/strerror.c b/gnulib/import/strerror.c
index 9a4972568b8..67c5216e214 100644
--- a/gnulib/import/strerror.c
+++ b/gnulib/import/strerror.c
@@ -1,18 +1,18 @@
/* strerror.c --- POSIX compatible system error routine
- Copyright (C) 2007-2021 Free Software Foundation, Inc.
+ Copyright (C) 2007-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#include <config.h>
diff --git a/gnulib/import/strerror_r.c b/gnulib/import/strerror_r.c
index 71965fb14b2..85a218935c6 100644
--- a/gnulib/import/strerror_r.c
+++ b/gnulib/import/strerror_r.c
@@ -1,18 +1,18 @@
/* strerror_r.c --- POSIX compatible system error routine
- Copyright (C) 2010-2021 Free Software Foundation, Inc.
+ Copyright (C) 2010-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Bruno Haible <bruno@clisp.org>, 2010. */
@@ -34,33 +34,26 @@
#include "strerror-override.h"
-#if (__GLIBC__ >= 2 || defined __UCLIBC__ || defined __CYGWIN__) && HAVE___XPG_STRERROR_R /* glibc >= 2.3.4, cygwin >= 1.7.9 */
+#if STRERROR_R_CHAR_P
-# define USE_XPG_STRERROR_R 1
-extern
-#ifdef __cplusplus
-"C"
-#endif
-int __xpg_strerror_r (int errnum, char *buf, size_t buflen);
+# if HAVE___XPG_STRERROR_R
+_GL_EXTERN_C int __xpg_strerror_r (int errnum, char *buf, size_t buflen);
+# endif
-#elif HAVE_DECL_STRERROR_R && !(__GLIBC__ >= 2 || defined __UCLIBC__ || defined __CYGWIN__)
+#elif HAVE_DECL_STRERROR_R
-/* The system's strerror_r function is OK, except that its third argument
+/* The system's strerror_r function's API is OK, except that its third argument
is 'int', not 'size_t', or its return type is wrong. */
# include <limits.h>
-# define USE_SYSTEM_STRERROR_R 1
-
-#else /* (__GLIBC__ >= 2 || defined __UCLIBC__ || defined __CYGWIN__ ? !HAVE___XPG_STRERROR_R : !HAVE_DECL_STRERROR_R) */
+#else
/* Use the system's strerror(). Exclude glibc and cygwin because the
system strerror_r has the wrong return type, and cygwin 1.7.9
strerror_r clobbers strerror. */
# undef strerror
-# define USE_SYSTEM_STRERROR 1
-
# if defined __NetBSD__ || defined __hpux || (defined _WIN32 && !defined __CYGWIN__) || defined __sgi || (defined __sun && !defined _LP64) || defined __CYGWIN__
/* No locking needed. */
@@ -166,22 +159,28 @@ strerror_r (int errnum, char *buf, size_t buflen)
int ret;
int saved_errno = errno;
-#if USE_XPG_STRERROR_R
+#if STRERROR_R_CHAR_P
{
+ ret = 0;
+
+# if HAVE___XPG_STRERROR_R
ret = __xpg_strerror_r (errnum, buf, buflen);
if (ret < 0)
ret = errno;
+# endif
+
if (!*buf)
{
/* glibc 2.13 would not touch buf on err, so we have to fall
back to GNU strerror_r which always returns a thread-safe
untruncated string to (partially) copy into our buf. */
- safe_copy (buf, buflen, strerror_r (errnum, buf, buflen));
+ char *errstring = strerror_r (errnum, buf, buflen);
+ ret = errstring ? safe_copy (buf, buflen, errstring) : errno;
}
}
-#elif USE_SYSTEM_STRERROR_R
+#elif HAVE_DECL_STRERROR_R
if (buflen > INT_MAX)
buflen = INT_MAX;
@@ -245,7 +244,7 @@ strerror_r (int errnum, char *buf, size_t buflen)
}
# endif
-#else /* USE_SYSTEM_STRERROR */
+#else /* strerror_r is not declared. */
/* Try to do what strerror (errnum) does, but without clobbering the
buffer used by strerror(). */
diff --git a/gnulib/import/string.in.h b/gnulib/import/string.in.h
index c76c1820b36..33160b25254 100644
--- a/gnulib/import/string.in.h
+++ b/gnulib/import/string.in.h
@@ -1,19 +1,19 @@
/* A GNU-like <string.h>.
- Copyright (C) 1995-1996, 2001-2021 Free Software Foundation, Inc.
+ Copyright (C) 1995-1996, 2001-2022 Free Software Foundation, Inc.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
#if __GNUC__ >= 3
@PRAGMA_SYSTEM_HEADER@
@@ -52,16 +52,6 @@
# include <wchar.h>
#endif
-/* The __attribute__ feature is available in gcc versions 2.5 and later.
- The attribute __pure__ was added in gcc 2.96. */
-#ifndef _GL_ATTRIBUTE_PURE
-# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) || defined __clang__
-# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
-# else
-# define _GL_ATTRIBUTE_PURE /* empty */
-# endif
-#endif
-
/* NetBSD 5.0 declares strsignal in <unistd.h>, not in <string.h>. */
/* But in any case avoid namespace pollution on glibc systems. */
#if (@GNULIB_STRSIGNAL@ || defined GNULIB_POSIXCHECK) && defined __NetBSD__ \
@@ -77,12 +67,82 @@
# include <strings.h>
#endif
+/* _GL_ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers
+ that can be freed by passing them as the Ith argument to the
+ function F. */
+#ifndef _GL_ATTRIBUTE_DEALLOC
+# if __GNUC__ >= 11
+# define _GL_ATTRIBUTE_DEALLOC(f, i) __attribute__ ((__malloc__ (f, i)))
+# else
+# define _GL_ATTRIBUTE_DEALLOC(f, i)
+# endif
+#endif
+
+/* _GL_ATTRIBUTE_DEALLOC_FREE declares that the function returns pointers that
+ can be freed via 'free'; it can be used only after declaring 'free'. */
+/* Applies to: functions. Cannot be used on inline functions. */
+#ifndef _GL_ATTRIBUTE_DEALLOC_FREE
+# define _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_DEALLOC (free, 1)
+#endif
+
+/* _GL_ATTRIBUTE_MALLOC declares that the function returns a pointer to freshly
+ allocated memory. */
+/* Applies to: functions. */
+#ifndef _GL_ATTRIBUTE_MALLOC
+# if __GNUC__ >= 3 || defined __clang__
+# define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__))
+# else
+# define _GL_ATTRIBUTE_MALLOC
+# endif
+#endif
+
+/* The __attribute__ feature is available in gcc versions 2.5 and later.
+ The attribute __pure__ was added in gcc 2.96. */
+#ifndef _GL_ATTRIBUTE_PURE
+# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) || defined __clang__
+# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
+# else
+# define _GL_ATTRIBUTE_PURE /* empty */
+# endif
+#endif
+
/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */
/* The definition of _GL_ARG_NONNULL is copied here. */
/* The definition of _GL_WARN_ON_USE is copied here. */
+/* Make _GL_ATTRIBUTE_DEALLOC_FREE work, even though <stdlib.h> may not have
+ been included yet. */
+#if @GNULIB_FREE_POSIX@
+# if (@REPLACE_FREE@ && !defined free \
+ && !(defined __cplusplus && defined GNULIB_NAMESPACE))
+/* We can't do '#define free rpl_free' here. */
+_GL_EXTERN_C void rpl_free (void *);
+# undef _GL_ATTRIBUTE_DEALLOC_FREE
+# define _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_DEALLOC (rpl_free, 1)
+# else
+# if defined _MSC_VER
+_GL_EXTERN_C void __cdecl free (void *);
+# else
+# if defined __cplusplus && (__GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2)
+_GL_EXTERN_C void free (void *) throw ();
+# else
+_GL_EXTERN_C void free (void *);
+# endif
+# endif
+# endif
+#else
+# if defined _MSC_VER
+_GL_EXTERN_C void __cdecl free (void *);
+# else
+# if defined __cplusplus && (__GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2)
+_GL_EXTERN_C void free (void *) throw ();
+# else
+_GL_EXTERN_C void free (void *);
+# endif
+# endif
+#endif
/* Clear a block of memory. The compiler will not delete a call to
this function, even if the block is dead after the call. */
@@ -178,10 +238,11 @@ _GL_CXXALIAS_SYS_CAST2 (memchr,
void const *, (void const *__s, int __c, size_t __n));
# endif
# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
- && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
-_GL_CXXALIASWARN1 (memchr, void *, (void *__s, int __c, size_t __n));
+ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \
+ || defined __clang__)
+_GL_CXXALIASWARN1 (memchr, void *, (void *__s, int __c, size_t __n) throw ());
_GL_CXXALIASWARN1 (memchr, void const *,
- (void const *__s, int __c, size_t __n));
+ (void const *__s, int __c, size_t __n) throw ());
# elif __GLIBC__ >= 2
_GL_CXXALIASWARN (memchr);
# endif
@@ -263,9 +324,10 @@ _GL_CXXALIAS_SYS_CAST2 (memrchr,
void *, (void const *, int, size_t),
void const *, (void const *, int, size_t));
# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
- && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
-_GL_CXXALIASWARN1 (memrchr, void *, (void *, int, size_t));
-_GL_CXXALIASWARN1 (memrchr, void const *, (void const *, int, size_t));
+ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \
+ || defined __clang__)
+_GL_CXXALIASWARN1 (memrchr, void *, (void *, int, size_t) throw ());
+_GL_CXXALIASWARN1 (memrchr, void const *, (void const *, int, size_t) throw ());
# else
_GL_CXXALIASWARN (memrchr);
# endif
@@ -293,9 +355,11 @@ _GL_CXXALIAS_SYS_CAST2 (rawmemchr,
void *, (void const *__s, int __c_in),
void const *, (void const *__s, int __c_in));
# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
- && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
-_GL_CXXALIASWARN1 (rawmemchr, void *, (void *__s, int __c_in));
-_GL_CXXALIASWARN1 (rawmemchr, void const *, (void const *__s, int __c_in));
+ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \
+ || defined __clang__)
+_GL_CXXALIASWARN1 (rawmemchr, void *, (void *__s, int __c_in) throw ());
+_GL_CXXALIASWARN1 (rawmemchr, void const *,
+ (void const *__s, int __c_in) throw ());
# else
_GL_CXXALIASWARN (rawmemchr);
# endif
@@ -397,9 +461,11 @@ _GL_CXXALIAS_SYS_CAST2 (strchrnul,
char const *, (char const *__s, int __c_in));
# endif
# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
- && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
-_GL_CXXALIASWARN1 (strchrnul, char *, (char *__s, int __c_in));
-_GL_CXXALIASWARN1 (strchrnul, char const *, (char const *__s, int __c_in));
+ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \
+ || defined __clang__)
+_GL_CXXALIASWARN1 (strchrnul, char *, (char *__s, int __c_in) throw ());
+_GL_CXXALIASWARN1 (strchrnul, char const *,
+ (char const *__s, int __c_in) throw ());
# else
_GL_CXXALIASWARN (strchrnul);
# endif
@@ -418,7 +484,10 @@ _GL_WARN_ON_USE (strchrnul, "strchrnul is unportable - "
# undef strdup
# define strdup rpl_strdup
# endif
-_GL_FUNCDECL_RPL (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1)));
+_GL_FUNCDECL_RPL (strdup, char *,
+ (char const *__s)
+ _GL_ARG_NONNULL ((1))
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
_GL_CXXALIAS_RPL (strdup, char *, (char const *__s));
# elif defined _WIN32 && !defined __CYGWIN__
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
@@ -431,35 +500,47 @@ _GL_CXXALIAS_MDA (strdup, char *, (char const *__s));
/* strdup exists as a function and as a macro. Get rid of the macro. */
# undef strdup
# endif
-# if !(@HAVE_DECL_STRDUP@ || defined strdup)
-_GL_FUNCDECL_SYS (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1)));
+# if (!@HAVE_DECL_STRDUP@ || __GNUC__ >= 11) && !defined strdup
+_GL_FUNCDECL_SYS (strdup, char *,
+ (char const *__s)
+ _GL_ARG_NONNULL ((1))
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
# endif
_GL_CXXALIAS_SYS (strdup, char *, (char const *__s));
# endif
_GL_CXXALIASWARN (strdup);
-#elif defined GNULIB_POSIXCHECK
-# undef strdup
-# if HAVE_RAW_DECL_STRDUP
+#else
+# if __GNUC__ >= 11 && !defined strdup
+/* For -Wmismatched-dealloc: Associate strdup with free or rpl_free. */
+_GL_FUNCDECL_SYS (strdup, char *,
+ (char const *__s)
+ _GL_ARG_NONNULL ((1))
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+# endif
+# if defined GNULIB_POSIXCHECK
+# undef strdup
+# if HAVE_RAW_DECL_STRDUP
_GL_WARN_ON_USE (strdup, "strdup is unportable - "
"use gnulib module strdup for portability");
-# endif
-#elif @GNULIB_MDA_STRDUP@
+# endif
+# elif @GNULIB_MDA_STRDUP@
/* On native Windows, map 'creat' to '_creat', so that -loldnames is not
required. In C++ with GNULIB_NAMESPACE, avoid differences between
- platforms by defining GNULIB_NAMESPACE::creat always. */
-# if defined _WIN32 && !defined __CYGWIN__
-# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-# undef strdup
-# define strdup _strdup
-# endif
+ platforms by defining GNULIB_NAMESPACE::strdup always. */
+# if defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef strdup
+# define strdup _strdup
+# endif
_GL_CXXALIAS_MDA (strdup, char *, (char const *__s));
-# else
-# if defined __cplusplus && defined GNULIB_NAMESPACE && defined strdup
-# undef strdup
-# endif
+# else
+# if defined __cplusplus && defined GNULIB_NAMESPACE && defined strdup
+# undef strdup
+# endif
_GL_CXXALIAS_SYS (strdup, char *, (char const *__s));
-# endif
+# endif
_GL_CXXALIASWARN (strdup);
+# endif
#endif
/* Append no more than N characters from SRC onto DEST. */
@@ -496,22 +577,35 @@ _GL_WARN_ON_USE (strncat, "strncat is unportable - "
# undef strndup
# define strndup rpl_strndup
# endif
-_GL_FUNCDECL_RPL (strndup, char *, (char const *__s, size_t __n)
- _GL_ARG_NONNULL ((1)));
+_GL_FUNCDECL_RPL (strndup, char *,
+ (char const *__s, size_t __n)
+ _GL_ARG_NONNULL ((1))
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
_GL_CXXALIAS_RPL (strndup, char *, (char const *__s, size_t __n));
# else
-# if ! @HAVE_DECL_STRNDUP@
-_GL_FUNCDECL_SYS (strndup, char *, (char const *__s, size_t __n)
- _GL_ARG_NONNULL ((1)));
+# if !@HAVE_DECL_STRNDUP@ || (__GNUC__ >= 11 && !defined strndup)
+_GL_FUNCDECL_SYS (strndup, char *,
+ (char const *__s, size_t __n)
+ _GL_ARG_NONNULL ((1))
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
# endif
_GL_CXXALIAS_SYS (strndup, char *, (char const *__s, size_t __n));
# endif
_GL_CXXALIASWARN (strndup);
-#elif defined GNULIB_POSIXCHECK
-# undef strndup
-# if HAVE_RAW_DECL_STRNDUP
+#else
+# if __GNUC__ >= 11 && !defined strndup
+/* For -Wmismatched-dealloc: Associate strndup with free or rpl_free. */
+_GL_FUNCDECL_SYS (strndup, char *,
+ (char const *__s, size_t __n)
+ _GL_ARG_NONNULL ((1))
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+# endif
+# if defined GNULIB_POSIXCHECK
+# undef strndup
+# if HAVE_RAW_DECL_STRNDUP
_GL_WARN_ON_USE (strndup, "strndup is unportable - "
"use gnulib module strndup for portability");
+# endif
# endif
#endif
@@ -571,10 +665,11 @@ _GL_CXXALIAS_SYS_CAST2 (strpbrk,
char *, (char const *__s, char const *__accept),
const char *, (char const *__s, char const *__accept));
# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
- && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
-_GL_CXXALIASWARN1 (strpbrk, char *, (char *__s, char const *__accept));
+ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \
+ || defined __clang__)
+_GL_CXXALIASWARN1 (strpbrk, char *, (char *__s, char const *__accept) throw ());
_GL_CXXALIASWARN1 (strpbrk, char const *,
- (char const *__s, char const *__accept));
+ (char const *__s, char const *__accept) throw ());
# elif __GLIBC__ >= 2
_GL_CXXALIASWARN (strpbrk);
# endif
@@ -679,10 +774,12 @@ _GL_CXXALIAS_SYS_CAST2 (strstr,
const char *, (const char *haystack, const char *needle));
# endif
# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
- && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
-_GL_CXXALIASWARN1 (strstr, char *, (char *haystack, const char *needle));
+ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \
+ || defined __clang__)
+_GL_CXXALIASWARN1 (strstr, char *,
+ (char *haystack, const char *needle) throw ());
_GL_CXXALIASWARN1 (strstr, const char *,
- (const char *haystack, const char *needle));
+ (const char *haystack, const char *needle) throw ());
# elif __GLIBC__ >= 2
_GL_CXXALIASWARN (strstr);
# endif
@@ -728,10 +825,12 @@ _GL_CXXALIAS_SYS_CAST2 (strcasestr,
const char *, (const char *haystack, const char *needle));
# endif
# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
- && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
-_GL_CXXALIASWARN1 (strcasestr, char *, (char *haystack, const char *needle));
+ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \
+ || defined __clang__)
+_GL_CXXALIASWARN1 (strcasestr, char *,
+ (char *haystack, const char *needle) throw ());
_GL_CXXALIASWARN1 (strcasestr, const char *,
- (const char *haystack, const char *needle));
+ (const char *haystack, const char *needle) throw ());
# else
_GL_CXXALIASWARN (strcasestr);
# endif
diff --git a/gnulib/import/strings.in.h b/gnulib/import/strings.in.h
index dbbf94b4d4c..2c31d2e14ac 100644
--- a/gnulib/import/strings.in.h
+++ b/gnulib/import/strings.in.h
@@ -1,19 +1,19 @@
/* A substitute <strings.h>.
- Copyright (C) 2007-2021 Free Software Foundation, Inc.
+ Copyright (C) 2007-2022 Free Software Foundation, Inc.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
#ifndef _@GUARD_PREFIX@_STRINGS_H
diff --git a/gnulib/import/stripslash.c b/gnulib/import/stripslash.c
index f2cbcb5483b..aee89b78dc1 100644
--- a/gnulib/import/stripslash.c
+++ b/gnulib/import/stripslash.c
@@ -1,19 +1,19 @@
/* stripslash.c -- remove redundant trailing slashes from a file name
- Copyright (C) 1990, 2001, 2003-2006, 2009-2021 Free Software Foundation,
+ Copyright (C) 1990, 2001, 2003-2006, 2009-2022 Free Software Foundation,
Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#include <config.h>
diff --git a/gnulib/import/strnlen.c b/gnulib/import/strnlen.c
index c27a0392c2b..c8fc69c6a9c 100644
--- a/gnulib/import/strnlen.c
+++ b/gnulib/import/strnlen.c
@@ -1,19 +1,19 @@
/* Find the length of STRING, but scan at most MAXLEN characters.
- Copyright (C) 2005-2007, 2009-2021 Free Software Foundation, Inc.
+ Copyright (C) 2005-2007, 2009-2022 Free Software Foundation, Inc.
Written by Simon Josefsson.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
#include <config.h>
diff --git a/gnulib/import/strnlen1.c b/gnulib/import/strnlen1.c
index d52811b627c..c22f96b64d8 100644
--- a/gnulib/import/strnlen1.c
+++ b/gnulib/import/strnlen1.c
@@ -1,17 +1,17 @@
/* Find the length of STRING + 1, but scan at most MAXLEN bytes.
- Copyright (C) 2005-2006, 2009-2021 Free Software Foundation, Inc.
+ Copyright (C) 2005-2006, 2009-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#include <config.h>
diff --git a/gnulib/import/strnlen1.h b/gnulib/import/strnlen1.h
index da62073f353..d45dd91ed77 100644
--- a/gnulib/import/strnlen1.h
+++ b/gnulib/import/strnlen1.h
@@ -1,17 +1,17 @@
/* Find the length of STRING + 1, but scan at most MAXLEN bytes.
- Copyright (C) 2005, 2009-2021 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2009-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#ifndef _STRNLEN1_H
diff --git a/gnulib/import/strstr.c b/gnulib/import/strstr.c
index 50daaf68d35..62369159668 100644
--- a/gnulib/import/strstr.c
+++ b/gnulib/import/strstr.c
@@ -1,19 +1,19 @@
-/* Copyright (C) 1991-1994, 1996-1998, 2000, 2004, 2007-2021 Free Software
+/* Copyright (C) 1991-1994, 1996-1998, 2000, 2004, 2007-2022 Free Software
Foundation, Inc.
This file is part of the GNU C 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, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License along
- with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* This particular implementation was written by Eric Blake, 2008. */
diff --git a/gnulib/import/strtok_r.c b/gnulib/import/strtok_r.c
index ef576a6470d..021cfb842d5 100644
--- a/gnulib/import/strtok_r.c
+++ b/gnulib/import/strtok_r.c
@@ -1,19 +1,19 @@
/* Reentrant string tokenizer. Generic version.
- Copyright (C) 1991, 1996-1999, 2001, 2004, 2007, 2009-2021 Free Software
+ Copyright (C) 1991, 1996-1999, 2001, 2004, 2007, 2009-2022 Free Software
Foundation, Inc.
This file is part of the GNU C 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 file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#ifdef HAVE_CONFIG_H
diff --git a/gnulib/import/sys_random.in.h b/gnulib/import/sys_random.in.h
index 5b9280dda36..e730e6139f8 100644
--- a/gnulib/import/sys_random.in.h
+++ b/gnulib/import/sys_random.in.h
@@ -1,18 +1,18 @@
/* Substitute for <sys/random.h>.
- Copyright (C) 2020-2021 Free Software Foundation, Inc.
+ Copyright (C) 2020-2022 Free Software Foundation, Inc.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
# if __GNUC__ >= 3
@PRAGMA_SYSTEM_HEADER@
@@ -23,8 +23,10 @@
#if @HAVE_SYS_RANDOM_H@
-/* On uClibc, <sys/random.h> assumes prior inclusion of <stddef.h>. */
-# if defined __UCLIBC__
+/* On uClibc < 1.0.35, <sys/random.h> assumes prior inclusion of <stddef.h>.
+ Do not use __UCLIBC__ here, as it might not be defined yet.
+ But avoid namespace pollution on glibc systems. */
+# ifndef __GLIBC__
# include <stddef.h>
# endif
/* On Mac OS X 10.5, <sys/random.h> assumes prior inclusion of <sys/types.h>.
diff --git a/gnulib/import/sys_select.in.h b/gnulib/import/sys_select.in.h
index 1dacb21087d..2bd0e0f79a8 100644
--- a/gnulib/import/sys_select.in.h
+++ b/gnulib/import/sys_select.in.h
@@ -1,18 +1,18 @@
/* Substitute for <sys/select.h>.
- Copyright (C) 2007-2021 Free Software Foundation, Inc.
+ Copyright (C) 2007-2022 Free Software Foundation, Inc.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
# if __GNUC__ >= 3
@PRAGMA_SYSTEM_HEADER@
@@ -21,7 +21,7 @@
/* On OSF/1 and Solaris 2.6, <sys/types.h> and <sys/time.h>
both include <sys/select.h>.
- On Cygwin, <sys/time.h> includes <sys/select.h>.
+ On Cygwin and OpenBSD, <sys/time.h> includes <sys/select.h>.
Simply delegate to the system's header in this case. */
#if (@HAVE_SYS_SELECT_H@ \
&& !defined _GL_SYS_SELECT_H_REDIRECT_FROM_SYS_TYPES_H \
@@ -39,6 +39,7 @@
|| (!defined _GL_SYS_SELECT_H_REDIRECT_FROM_SYS_TIME_H \
&& ((defined __osf__ && defined _SYS_TIME_H_ \
&& defined _OSF_SOURCE) \
+ || (defined __OpenBSD__ && defined _SYS_TIME_H_) \
|| (defined __sun && defined _SYS_TIME_H \
&& (! (defined _XOPEN_SOURCE \
|| defined _POSIX_C_SOURCE) \
@@ -278,9 +279,13 @@ _GL_FUNCDECL_SYS (pselect, int,
(int, fd_set *restrict, fd_set *restrict, fd_set *restrict,
struct timespec const *restrict, const sigset_t *restrict));
# endif
-_GL_CXXALIAS_SYS (pselect, int,
- (int, fd_set *restrict, fd_set *restrict, fd_set *restrict,
- struct timespec const *restrict, const sigset_t *restrict));
+/* Need to cast, because on AIX 7, the second, third, fourth argument may be
+ void *restrict, void *restrict, void *restrict. */
+_GL_CXXALIAS_SYS_CAST (pselect, int,
+ (int,
+ fd_set *restrict, fd_set *restrict, fd_set *restrict,
+ struct timespec const *restrict,
+ const sigset_t *restrict));
# endif
_GL_CXXALIASWARN (pselect);
#elif defined GNULIB_POSIXCHECK
diff --git a/gnulib/import/sys_socket.c b/gnulib/import/sys_socket.c
index 3b261da039f..0bfd60f2ff6 100644
--- a/gnulib/import/sys_socket.c
+++ b/gnulib/import/sys_socket.c
@@ -1,4 +1,22 @@
+/* Inline functions for <sys/socket.h>.
+
+ Copyright (C) 2012-2022 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
#include <config.h>
+
#define _GL_SYS_SOCKET_INLINE _GL_EXTERN_INLINE
#include "sys/socket.h"
typedef int dummy;
diff --git a/gnulib/import/sys_socket.in.h b/gnulib/import/sys_socket.in.h
index 2777007f063..acdf7eee504 100644
--- a/gnulib/import/sys_socket.in.h
+++ b/gnulib/import/sys_socket.in.h
@@ -1,20 +1,20 @@
/* Provide a sys/socket header file for systems lacking it (read: MinGW)
and for systems where it is incomplete.
- Copyright (C) 2005-2021 Free Software Foundation, Inc.
+ Copyright (C) 2005-2022 Free Software Foundation, Inc.
Written by Simon Josefsson.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* This file is supposed to be used on platforms that lack <sys/socket.h>,
on platforms where <sys/socket.h> cannot be included standalone, and on
diff --git a/gnulib/import/sys_stat.in.h b/gnulib/import/sys_stat.in.h
index 13d12943cd0..28ddd42f818 100644
--- a/gnulib/import/sys_stat.in.h
+++ b/gnulib/import/sys_stat.in.h
@@ -1,18 +1,18 @@
/* Provide a more complete sys/stat.h header file.
- Copyright (C) 2005-2021 Free Software Foundation, Inc.
+ Copyright (C) 2005-2022 Free Software Foundation, Inc.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Eric Blake, Paul Eggert, and Jim Meyering. */
diff --git a/gnulib/import/sys_time.in.h b/gnulib/import/sys_time.in.h
index 90a67d18426..87db1a88745 100644
--- a/gnulib/import/sys_time.in.h
+++ b/gnulib/import/sys_time.in.h
@@ -1,19 +1,19 @@
/* Provide a more complete sys/time.h.
- Copyright (C) 2007-2021 Free Software Foundation, Inc.
+ Copyright (C) 2007-2022 Free Software Foundation, Inc.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Paul Eggert. */
diff --git a/gnulib/import/sys_types.in.h b/gnulib/import/sys_types.in.h
index 654e80335fa..698e88d6326 100644
--- a/gnulib/import/sys_types.in.h
+++ b/gnulib/import/sys_types.in.h
@@ -1,19 +1,19 @@
/* Provide a more complete sys/types.h.
- Copyright (C) 2011-2021 Free Software Foundation, Inc.
+ Copyright (C) 2011-2022 Free Software Foundation, Inc.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
#if __GNUC__ >= 3
@PRAGMA_SYSTEM_HEADER@
diff --git a/gnulib/import/sys_uio.in.h b/gnulib/import/sys_uio.in.h
index db724379a95..788d461f1e4 100644
--- a/gnulib/import/sys_uio.in.h
+++ b/gnulib/import/sys_uio.in.h
@@ -1,18 +1,18 @@
/* Substitute for <sys/uio.h>.
- Copyright (C) 2011-2021 Free Software Foundation, Inc.
+ Copyright (C) 2011-2022 Free Software Foundation, Inc.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
# if __GNUC__ >= 3
@PRAGMA_SYSTEM_HEADER@
diff --git a/gnulib/import/sys_wait.in.h b/gnulib/import/sys_wait.in.h
index 25d25a0ae1b..7c48c2ef20c 100644
--- a/gnulib/import/sys_wait.in.h
+++ b/gnulib/import/sys_wait.in.h
@@ -1,18 +1,18 @@
/* A POSIX-like <sys/wait.h>.
- Copyright (C) 2001-2003, 2005-2021 Free Software Foundation, Inc.
+ Copyright (C) 2001-2003, 2005-2022 Free Software Foundation, Inc.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
#ifndef _@GUARD_PREFIX@_SYS_WAIT_H
diff --git a/gnulib/import/tempname.c b/gnulib/import/tempname.c
index 3d91deef1e1..5fc5efe0314 100644
--- a/gnulib/import/tempname.c
+++ b/gnulib/import/tempname.c
@@ -1,17 +1,17 @@
-/* Copyright (C) 1991-2021 Free Software Foundation, Inc.
+/* Copyright (C) 1991-2022 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public
+ modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
- version 3 of the License, or (at your option) any later version.
+ version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
+ Lesser General Public License for more details.
- You should have received a copy of the GNU General Public
+ You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
@@ -22,6 +22,7 @@
#include <sys/types.h>
#include <assert.h>
+#include <stdbool.h>
#include <errno.h>
@@ -61,7 +62,8 @@
# define __gen_tempname gen_tempname
# define __mkdir mkdir
# define __open open
-# define __lxstat64(version, file, buf) lstat (file, buf)
+# define __lstat64(file, buf) lstat (file, buf)
+# define __stat64(file, buf) stat (file, buf)
# define __getrandom getrandom
# define __clock_gettime64 clock_gettime
# define __timespec64 timespec
@@ -76,13 +78,14 @@ typedef uint_fast64_t random_value;
#define BASE_62_POWER (62LL * 62 * 62 * 62 * 62 * 62 * 62 * 62 * 62 * 62)
static random_value
-random_bits (random_value var)
+random_bits (random_value var, bool use_getrandom)
{
random_value r;
- if (__getrandom (&r, sizeof r, 0) == sizeof r)
+ /* Without GRND_NONBLOCK it can be blocked for minutes on some systems. */
+ if (use_getrandom && __getrandom (&r, sizeof r, GRND_NONBLOCK) == sizeof r)
return r;
#if _LIBC || (defined CLOCK_MONOTONIC && HAVE_CLOCK_GETTIME)
- /* Add entropy if getrandom is not supported. */
+ /* Add entropy if getrandom did not work. */
struct __timespec64 tv;
__clock_gettime64 (CLOCK_MONOTONIC, &tv);
var ^= tv.tv_nsec;
@@ -96,7 +99,7 @@ static int
direxists (const char *dir)
{
struct_stat64 buf;
- return __xstat64 (_STAT_VER, dir, &buf) == 0 && S_ISDIR (buf.st_mode);
+ return __stat64 (dir, &buf) == 0 && S_ISDIR (buf.st_mode);
}
/* Path search algorithm, for tmpnam, tmpfile, etc. If DIR is
@@ -178,17 +181,17 @@ try_file (char *tmpl, void *flags)
}
static int
-try_dir (char *tmpl, void *flags _GL_UNUSED)
+try_dir (char *tmpl, _GL_UNUSED void *flags)
{
return __mkdir (tmpl, S_IRUSR | S_IWUSR | S_IXUSR);
}
static int
-try_nocreate (char *tmpl, void *flags _GL_UNUSED)
+try_nocreate (char *tmpl, _GL_UNUSED void *flags)
{
struct_stat64 st;
- if (__lxstat64 (_STAT_VER, tmpl, &st) == 0 || errno == EOVERFLOW)
+ if (__lstat64 (tmpl, &st) == 0 || errno == EOVERFLOW)
__set_errno (EEXIST);
return errno == ENOENT ? 0 : -1;
}
@@ -267,6 +270,13 @@ try_tempname_len (char *tmpl, int suffixlen, void *args,
/* How many random base-62 digits can currently be extracted from V. */
int vdigits = 0;
+ /* Whether to consume entropy when acquiring random bits. On the
+ first try it's worth the entropy cost with __GT_NOCREATE, which
+ is inherently insecure and can use the entropy to make it a bit
+ less secure. On the (rare) second and later attempts it might
+ help against DoS attacks. */
+ bool use_getrandom = tryfunc == try_nocreate;
+
/* Least unfair value for V. If V is less than this, V can generate
BASE_62_DIGITS digits fairly. Otherwise it might be biased. */
random_value const unfair_min
@@ -290,7 +300,10 @@ try_tempname_len (char *tmpl, int suffixlen, void *args,
if (vdigits == 0)
{
do
- v = random_bits (v);
+ {
+ v = random_bits (v, use_getrandom);
+ use_getrandom = true;
+ }
while (unfair_min <= v);
vdigits = BASE_62_DIGITS;
diff --git a/gnulib/import/tempname.h b/gnulib/import/tempname.h
index a8681fc998e..c172820f7f5 100644
--- a/gnulib/import/tempname.h
+++ b/gnulib/import/tempname.h
@@ -1,18 +1,18 @@
/* Create a temporary file or directory.
- Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc.
+ Copyright (C) 2006, 2009-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* header written by Eric Blake */
diff --git a/gnulib/import/time.in.h b/gnulib/import/time.in.h
index 1385980cdf5..6d4c7719636 100644
--- a/gnulib/import/time.in.h
+++ b/gnulib/import/time.in.h
@@ -1,19 +1,19 @@
/* A more-standard <time.h>.
- Copyright (C) 2007-2021 Free Software Foundation, Inc.
+ Copyright (C) 2007-2022 Free Software Foundation, Inc.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
#if __GNUC__ >= 3
@PRAGMA_SYSTEM_HEADER@
@@ -120,6 +120,17 @@ _GL_CXXALIAS_SYS (timespec_get, int, (struct timespec *ts, int base));
_GL_CXXALIASWARN (timespec_get);
# endif
+/* Set *TS to the current time resolution, and return BASE.
+ Upon failure, return 0. */
+# if @GNULIB_TIMESPEC_GETRES@
+# if ! @HAVE_TIMESPEC_GETRES@
+_GL_FUNCDECL_SYS (timespec_getres, int, (struct timespec *ts, int base)
+ _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (timespec_getres, int, (struct timespec *ts, int base));
+_GL_CXXALIASWARN (timespec_getres);
+# endif
+
/* Sleep for at least RQTP seconds unless interrupted, If interrupted,
return -1 and store the remaining time into RMTP. See
<https://pubs.opengroup.org/onlinepubs/9699919799/functions/nanosleep.html>. */
@@ -340,22 +351,60 @@ _GL_CXXALIASWARN (strftime);
# endif
# if defined _GNU_SOURCE && @GNULIB_TIME_RZ@ && ! @HAVE_TIMEZONE_T@
+/* Functions that use a first-class time zone data type, instead of
+ relying on an implicit global time zone.
+ Inspired by NetBSD. */
+
+/* Represents a time zone.
+ (timezone_t) NULL stands for UTC. */
typedef struct tm_zone *timezone_t;
+
+/* tzalloc (name)
+ Returns a time zone object for the given time zone NAME. This object
+ represents the time zone that other functions would use it the TZ
+ environment variable was set to NAME.
+ If NAME is NULL, the result represents the time zone that other functions
+ would use it the TZ environment variable was unset.
+ May return NULL if NAME is invalid (this is platform dependent) or
+ upon memory allocation failure. */
_GL_FUNCDECL_SYS (tzalloc, timezone_t, (char const *__name));
_GL_CXXALIAS_SYS (tzalloc, timezone_t, (char const *__name));
+
+/* tzfree (tz)
+ Frees a time zone object.
+ The argument must have been returned by tzalloc(). */
_GL_FUNCDECL_SYS (tzfree, void, (timezone_t __tz));
_GL_CXXALIAS_SYS (tzfree, void, (timezone_t __tz));
+
+/* localtime_rz (tz, &t, &result)
+ Converts an absolute time T to a broken-down time RESULT, assuming the
+ time zone TZ.
+ This function is like 'localtime_r', but relies on the argument TZ instead
+ of an implicit global time zone. */
_GL_FUNCDECL_SYS (localtime_rz, struct tm *,
(timezone_t __tz, time_t const *restrict __timer,
struct tm *restrict __result) _GL_ARG_NONNULL ((2, 3)));
_GL_CXXALIAS_SYS (localtime_rz, struct tm *,
(timezone_t __tz, time_t const *restrict __timer,
struct tm *restrict __result));
+
+/* mktime_z (tz, &tm)
+ Normalizes the broken-down time TM and converts it to an absolute time,
+ assuming the time zone TZ. Returns the absolute time.
+ This function is like 'mktime', but relies on the argument TZ instead
+ of an implicit global time zone. */
_GL_FUNCDECL_SYS (mktime_z, time_t,
- (timezone_t __tz, struct tm *restrict __result)
+ (timezone_t __tz, struct tm *restrict __tm)
_GL_ARG_NONNULL ((2)));
_GL_CXXALIAS_SYS (mktime_z, time_t,
- (timezone_t __tz, struct tm *restrict __result));
+ (timezone_t __tz, struct tm *restrict __tm));
+
+/* Time zone abbreviation strings (returned by 'localtime_rz' or 'mktime_z'
+ in the 'tm_zone' member of 'struct tm') are valid as long as
+ - the 'struct tm' argument is not destroyed or overwritten,
+ and
+ - the 'timezone_t' argument is not freed through tzfree(). */
+
# endif
/* Convert TM to a time_t value, assuming UTC. */
diff --git a/gnulib/import/time_r.c b/gnulib/import/time_r.c
index d9089868704..d4b22755451 100644
--- a/gnulib/import/time_r.c
+++ b/gnulib/import/time_r.c
@@ -1,19 +1,19 @@
/* Reentrant time functions like localtime_r.
- Copyright (C) 2003, 2006-2007, 2010-2021 Free Software Foundation, Inc.
+ Copyright (C) 2003, 2006-2007, 2010-2022 Free Software Foundation, Inc.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License along
- with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Paul Eggert. */
diff --git a/gnulib/import/unistd--.h b/gnulib/import/unistd--.h
index 5e6ecb0f7ca..d395f7e057f 100644
--- a/gnulib/import/unistd--.h
+++ b/gnulib/import/unistd--.h
@@ -1,10 +1,10 @@
/* Like unistd.h, but redefine some names to avoid glitches.
- Copyright (C) 2005, 2009-2021 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2009-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
+ 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,
diff --git a/gnulib/import/unistd-safer.h b/gnulib/import/unistd-safer.h
index 541bafe293d..db82c854fc8 100644
--- a/gnulib/import/unistd-safer.h
+++ b/gnulib/import/unistd-safer.h
@@ -1,10 +1,10 @@
/* Invoke unistd-like functions, but avoid some glitches.
- Copyright (C) 2001, 2003, 2005, 2009-2021 Free Software Foundation, Inc.
+ Copyright (C) 2001, 2003, 2005, 2009-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
+ 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,
diff --git a/gnulib/import/unistd.c b/gnulib/import/unistd.c
index 72bad1c0527..95978e6ad0a 100644
--- a/gnulib/import/unistd.c
+++ b/gnulib/import/unistd.c
@@ -1,4 +1,22 @@
+/* Inline functions for <unistd.h>.
+
+ Copyright (C) 2012-2022 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
#include <config.h>
+
#define _GL_UNISTD_INLINE _GL_EXTERN_INLINE
#include "unistd.h"
typedef int dummy;
diff --git a/gnulib/import/unistd.in.h b/gnulib/import/unistd.in.h
index 5e9b47d981e..57df09ecdf4 100644
--- a/gnulib/import/unistd.in.h
+++ b/gnulib/import/unistd.in.h
@@ -1,18 +1,18 @@
/* Substitute for and wrapper around <unistd.h>.
- Copyright (C) 2003-2021 Free Software Foundation, Inc.
+ Copyright (C) 2003-2022 Free Software Foundation, Inc.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
#ifndef _@GUARD_PREFIX@_UNISTD_H
@@ -415,16 +415,30 @@ _GL_CXXALIASWARN (close);
#if @GNULIB_COPY_FILE_RANGE@
-# if !@HAVE_COPY_FILE_RANGE@
+# if @REPLACE_COPY_FILE_RANGE@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef copy_file_range
+# define copy_file_range rpl_copy_file_range
+# endif
+_GL_FUNCDECL_RPL (copy_file_range, ssize_t, (int ifd, off_t *ipos,
+ int ofd, off_t *opos,
+ size_t len, unsigned flags));
+_GL_CXXALIAS_RPL (copy_file_range, ssize_t, (int ifd, off_t *ipos,
+ int ofd, off_t *opos,
+ size_t len, unsigned flags));
+# else
+# if !@HAVE_COPY_FILE_RANGE@
_GL_FUNCDECL_SYS (copy_file_range, ssize_t, (int ifd, off_t *ipos,
int ofd, off_t *opos,
size_t len, unsigned flags));
+# endif
_GL_CXXALIAS_SYS (copy_file_range, ssize_t, (int ifd, off_t *ipos,
int ofd, off_t *opos,
size_t len, unsigned flags));
# endif
_GL_CXXALIASWARN (copy_file_range);
#elif defined GNULIB_POSIXCHECK
+# undef copy_file_range
# if HAVE_RAW_DECL_COPY_FILE_RANGE
_GL_WARN_ON_USE (copy_file_range,
"copy_file_range is unportable - "
@@ -1409,7 +1423,8 @@ _GL_WARN_ON_USE (getpagesize, "getpagesize is unportable - "
Read a password from /dev/tty or stdin.
Function getpass() from module 'getpass-gnu':
Read a password of arbitrary length from /dev/tty or stdin. */
-# if @REPLACE_GETPASS@
+# if (@GNULIB_GETPASS@ && @REPLACE_GETPASS@) \
+ || (@GNULIB_GETPASS_GNU@ && @REPLACE_GETPASS_FOR_GETPASS_GNU@)
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# undef getpass
# define getpass rpl_getpass
@@ -1521,6 +1536,7 @@ _GL_WARN_ON_USE (group_member, "group_member is unportable - "
# undef isatty
# define isatty rpl_isatty
# endif
+# define GNULIB_defined_isatty 1
_GL_FUNCDECL_RPL (isatty, int, (int fd));
_GL_CXXALIAS_RPL (isatty, int, (int fd));
# elif defined _WIN32 && !defined __CYGWIN__
@@ -2027,15 +2043,23 @@ _GL_WARN_ON_USE (sleep, "sleep is unportable - "
#if @GNULIB_MDA_SWAB@
/* On native Windows, map 'swab' to '_swab', so that -loldnames is not
required. In C++ with GNULIB_NAMESPACE, avoid differences between
- platforms by defining GNULIB_NAMESPACE::creat always. */
+ platforms by defining GNULIB_NAMESPACE::swab always. */
# if defined _WIN32 && !defined __CYGWIN__
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# undef swab
# define swab _swab
# endif
-_GL_CXXALIAS_MDA (swab, void, (char *from, char *to, int n));
+/* Need to cast, because in old mingw the arguments are
+ (const char *from, char *to, size_t n). */
+_GL_CXXALIAS_MDA_CAST (swab, void, (char *from, char *to, int n));
# else
+# if defined __hpux /* HP-UX */
+_GL_CXXALIAS_SYS (swab, void, (const char *from, char *to, int n));
+# elif defined __sun && !defined _XPG4 /* Solaris */
+_GL_CXXALIAS_SYS (swab, void, (const char *from, char *to, ssize_t n));
+# else
_GL_CXXALIAS_SYS (swab, void, (const void *from, void *to, ssize_t n));
+# endif
# endif
_GL_CXXALIASWARN (swab);
#endif
diff --git a/gnulib/import/unsetenv.c b/gnulib/import/unsetenv.c
index 11089a072cd..07eac6fdd6d 100644
--- a/gnulib/import/unsetenv.c
+++ b/gnulib/import/unsetenv.c
@@ -1,17 +1,17 @@
-/* Copyright (C) 1992, 1995-2002, 2005-2021 Free Software Foundation, Inc.
+/* Copyright (C) 1992, 1995-2002, 2005-2022 Free Software Foundation, Inc.
This file is part of the GNU C 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 file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc
diff --git a/gnulib/import/verify.h b/gnulib/import/verify.h
index 3cdcdca5671..c5c63ae97c6 100644
--- a/gnulib/import/verify.h
+++ b/gnulib/import/verify.h
@@ -1,18 +1,18 @@
/* Compile-time assert-like macros.
- Copyright (C) 2005-2006, 2009-2021 Free Software Foundation, Inc.
+ Copyright (C) 2005-2006, 2009-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Paul Eggert, Bruno Haible, and Jim Meyering. */
@@ -22,16 +22,10 @@
/* Define _GL_HAVE__STATIC_ASSERT to 1 if _Static_assert (R, DIAGNOSTIC)
- works as per C11. This is supported by GCC 4.6.0 and later, in C
- mode, and by clang (also in C++ mode).
+ works as per C11. This is supported by GCC 4.6.0+ and by clang 4+.
Define _GL_HAVE__STATIC_ASSERT1 to 1 if _Static_assert (R) works as
- per C2X. This is supported by GCC 9.1 and later, and by clang in
- C++1z mode.
-
- Define _GL_HAVE_STATIC_ASSERT1 if static_assert (R) works as per
- C++17. This is supported by GCC 9.1 and later, and by clang in
- C++1z mode.
+ per C2x. This is supported by GCC 9.1+.
Support compilers claiming conformance to the relevant standard,
and also support GCC when not pedantic. If we were willing to slow
@@ -40,25 +34,13 @@
#ifndef __cplusplus
# if (201112L <= __STDC_VERSION__ \
|| (!defined __STRICT_ANSI__ \
- && (4 < __GNUC__ + (6 <= __GNUC_MINOR__) || 4 <= __clang_major__)))
+ && (4 < __GNUC__ + (6 <= __GNUC_MINOR__) || 5 <= __clang_major__)))
# define _GL_HAVE__STATIC_ASSERT 1
# endif
# if (202000L <= __STDC_VERSION__ \
|| (!defined __STRICT_ANSI__ && 9 <= __GNUC__))
# define _GL_HAVE__STATIC_ASSERT1 1
# endif
-#else
-# if 4 <= __clang_major__
-# define _GL_HAVE__STATIC_ASSERT 1
-# endif
-# if 4 <= __clang_major__ && 201411 <= __cpp_static_assert
-# define _GL_HAVE__STATIC_ASSERT1 1
-# endif
-# if 201703L <= __cplusplus \
- || 9 <= __GNUC__ \
- || (4 <= __clang_major__ && 201411 <= __cpp_static_assert)
-# define _GL_HAVE_STATIC_ASSERT1 1
-# endif
#endif
/* FreeBSD 9.1 <sys/cdefs.h>, included by <stddef.h> and lots of other
@@ -220,17 +202,22 @@ template <int w>
This macro requires three or more arguments but uses at most the first
two, so that the _Static_assert macro optionally defined below supports
- both the C11 two-argument syntax and the C2X one-argument syntax.
+ both the C11 two-argument syntax and the C2x one-argument syntax.
Unfortunately, unlike C11, this implementation must appear as an
ordinary declaration, and cannot appear inside struct { ... }. */
-#if defined _GL_HAVE__STATIC_ASSERT
+#if 200410 <= __cpp_static_assert
+# define _GL_VERIFY(R, DIAGNOSTIC, ...) static_assert (R, DIAGNOSTIC)
+#elif defined _GL_HAVE__STATIC_ASSERT
# define _GL_VERIFY(R, DIAGNOSTIC, ...) _Static_assert (R, DIAGNOSTIC)
#else
# define _GL_VERIFY(R, DIAGNOSTIC, ...) \
extern int (*_GL_GENSYM (_gl_verify_function) (void)) \
[_GL_VERIFY_TRUE (R, DIAGNOSTIC)]
+# if 4 < __GNUC__ + (6 <= __GNUC_MINOR__)
+# pragma GCC diagnostic ignored "-Wnested-externs"
+# endif
#endif
/* _GL_STATIC_ASSERT_H is defined if this code is copied into assert.h. */
@@ -239,7 +226,7 @@ template <int w>
# define _Static_assert(...) \
_GL_VERIFY (__VA_ARGS__, "static assertion failed", -)
# endif
-# if !defined _GL_HAVE_STATIC_ASSERT1 && !defined static_assert
+# if __cpp_static_assert < 201411 && !defined static_assert
# define static_assert _Static_assert /* C11 requires this #define. */
# endif
#endif
diff --git a/gnulib/import/w32sock.h b/gnulib/import/w32sock.h
index f7311887b2c..17db3f12a8a 100644
--- a/gnulib/import/w32sock.h
+++ b/gnulib/import/w32sock.h
@@ -1,18 +1,18 @@
/* w32sock.h --- internal auxiliary functions for Windows socket functions
- Copyright (C) 2008-2021 Free Software Foundation, Inc.
+ Copyright (C) 2008-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Paolo Bonzini */
diff --git a/gnulib/import/warn-on-use.h b/gnulib/import/warn-on-use.h
index 5d5b17f05be..94f5b9201ed 100644
--- a/gnulib/import/warn-on-use.h
+++ b/gnulib/import/warn-on-use.h
@@ -1,17 +1,17 @@
/* A C macro for emitting warnings if a function is used.
- Copyright (C) 2010-2021 Free Software Foundation, Inc.
+ Copyright (C) 2010-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published
- by the Free Software Foundation; either version 3 of the License, or
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
+ Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* _GL_WARN_ON_USE (function, "literal string") issues a declaration
@@ -84,20 +84,20 @@
# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
/* A compiler attribute is available in gcc versions 4.3.0 and later. */
# define _GL_WARN_ON_USE(function, message) \
-extern __typeof__ (function) function __attribute__ ((__warning__ (message)))
+_GL_WARN_EXTERN_C __typeof__ (function) function __attribute__ ((__warning__ (message)))
# define _GL_WARN_ON_USE_ATTRIBUTE(message) \
__attribute__ ((__warning__ (message)))
# elif __clang_major__ >= 4
/* Another compiler attribute is available in clang. */
# define _GL_WARN_ON_USE(function, message) \
-extern __typeof__ (function) function \
+_GL_WARN_EXTERN_C __typeof__ (function) function \
__attribute__ ((__diagnose_if__ (1, message, "warning")))
# define _GL_WARN_ON_USE_ATTRIBUTE(message) \
__attribute__ ((__diagnose_if__ (1, message, "warning")))
# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
/* Verify the existence of the function. */
# define _GL_WARN_ON_USE(function, message) \
-extern __typeof__ (function) function
+_GL_WARN_EXTERN_C __typeof__ (function) function
# define _GL_WARN_ON_USE_ATTRIBUTE(message)
# else /* Unsupported. */
# define _GL_WARN_ON_USE(function, message) \
diff --git a/gnulib/import/wchar.in.h b/gnulib/import/wchar.in.h
index cdda6806bdd..0d5c0b7abe7 100644
--- a/gnulib/import/wchar.in.h
+++ b/gnulib/import/wchar.in.h
@@ -1,19 +1,19 @@
/* A substitute for ISO C99 <wchar.h>, for platforms that have issues.
- Copyright (C) 2007-2021 Free Software Foundation, Inc.
+ Copyright (C) 2007-2022 Free Software Foundation, Inc.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Eric Blake. */
@@ -84,6 +84,35 @@
#ifndef _@GUARD_PREFIX@_WCHAR_H
#define _@GUARD_PREFIX@_WCHAR_H
+/* _GL_ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers
+ that can be freed by passing them as the Ith argument to the
+ function F. */
+#ifndef _GL_ATTRIBUTE_DEALLOC
+# if __GNUC__ >= 11
+# define _GL_ATTRIBUTE_DEALLOC(f, i) __attribute__ ((__malloc__ (f, i)))
+# else
+# define _GL_ATTRIBUTE_DEALLOC(f, i)
+# endif
+#endif
+
+/* _GL_ATTRIBUTE_DEALLOC_FREE declares that the function returns pointers that
+ can be freed via 'free'; it can be used only after declaring 'free'. */
+/* Applies to: functions. Cannot be used on inline functions. */
+#ifndef _GL_ATTRIBUTE_DEALLOC_FREE
+# define _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_DEALLOC (free, 1)
+#endif
+
+/* _GL_ATTRIBUTE_MALLOC declares that the function returns a pointer to freshly
+ allocated memory. */
+/* Applies to: functions. */
+#ifndef _GL_ATTRIBUTE_MALLOC
+# if __GNUC__ >= 3 || defined __clang__
+# define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__))
+# else
+# define _GL_ATTRIBUTE_MALLOC
+# endif
+#endif
+
/* The __attribute__ feature is available in gcc versions 2.5 and later.
The attribute __pure__ was added in gcc 2.96. */
#ifndef _GL_ATTRIBUTE_PURE
@@ -111,7 +140,7 @@
/* mingw and MSVC define wint_t as 'unsigned short' in <crtdefs.h> or
<stddef.h>. This is too small: ISO C 99 section 7.24.1.(2) says that
wint_t must be "unchanged by default argument promotions". Override it. */
-# if @GNULIB_OVERRIDES_WINT_T@
+# if @GNULIBHEADERS_OVERRIDE_WINT_T@
# if !GNULIB_defined_wint_t
# if @HAVE_CRTDEFS_H@
# include <crtdefs.h>
@@ -146,6 +175,37 @@ typedef int rpl_mbstate_t;
# endif
#endif
+/* Make _GL_ATTRIBUTE_DEALLOC_FREE work, even though <stdlib.h> may not have
+ been included yet. */
+#if @GNULIB_FREE_POSIX@
+# if (@REPLACE_FREE@ && !defined free \
+ && !(defined __cplusplus && defined GNULIB_NAMESPACE))
+/* We can't do '#define free rpl_free' here. */
+_GL_EXTERN_C void rpl_free (void *);
+# undef _GL_ATTRIBUTE_DEALLOC_FREE
+# define _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_DEALLOC (rpl_free, 1)
+# else
+# if defined _MSC_VER
+_GL_EXTERN_C void __cdecl free (void *);
+# else
+# if defined __cplusplus && (__GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2)
+_GL_EXTERN_C void free (void *) throw ();
+# else
+_GL_EXTERN_C void free (void *);
+# endif
+# endif
+# endif
+#else
+# if defined _MSC_VER
+_GL_EXTERN_C void __cdecl free (void *);
+# else
+# if defined __cplusplus && (__GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2)
+_GL_EXTERN_C void free (void *) throw ();
+# else
+_GL_EXTERN_C void free (void *);
+# endif
+# endif
+#endif
/* Convert a single-byte character to a wide character. */
#if @GNULIB_BTOWC@
@@ -941,36 +1001,48 @@ _GL_WARN_ON_USE (wcsxfrm, "wcsxfrm is unportable - "
# endif
_GL_CXXALIAS_MDA (wcsdup, wchar_t *, (const wchar_t *s));
# else
-# if !@HAVE_WCSDUP@
-_GL_FUNCDECL_SYS (wcsdup, wchar_t *, (const wchar_t *s));
+# if !@HAVE_WCSDUP@ || __GNUC__ >= 11
+_GL_FUNCDECL_SYS (wcsdup, wchar_t *,
+ (const wchar_t *s)
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
# endif
_GL_CXXALIAS_SYS (wcsdup, wchar_t *, (const wchar_t *s));
# endif
_GL_CXXALIASWARN (wcsdup);
-#elif defined GNULIB_POSIXCHECK
-# undef wcsdup
-# if HAVE_RAW_DECL_WCSDUP
+#else
+# if __GNUC__ >= 11 && !defined wcsdup
+/* For -Wmismatched-dealloc: Associate wcsdup with free or rpl_free. */
+_GL_FUNCDECL_SYS (wcsdup, wchar_t *,
+ (const wchar_t *s)
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+# endif
+# if defined GNULIB_POSIXCHECK
+# undef wcsdup
+# if HAVE_RAW_DECL_WCSDUP
_GL_WARN_ON_USE (wcsdup, "wcsdup is unportable - "
"use gnulib module wcsdup for portability");
-# endif
-#elif @GNULIB_MDA_WCSDUP@
+# endif
+# elif @GNULIB_MDA_WCSDUP@
/* On native Windows, map 'wcsdup' to '_wcsdup', so that -loldnames is not
required. In C++ with GNULIB_NAMESPACE, avoid differences between
platforms by defining GNULIB_NAMESPACE::wcsdup always. */
-# if defined _WIN32 && !defined __CYGWIN__
-# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-# undef wcsdup
-# define wcsdup _wcsdup
-# endif
+# if defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef wcsdup
+# define wcsdup _wcsdup
+# endif
_GL_CXXALIAS_MDA (wcsdup, wchar_t *, (const wchar_t *s));
-# else
-_GL_FUNCDECL_SYS (wcsdup, wchar_t *, (const wchar_t *s));
-# if @HAVE_DECL_WCSDUP@
+# else
+_GL_FUNCDECL_SYS (wcsdup, wchar_t *,
+ (const wchar_t *s)
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+# if @HAVE_DECL_WCSDUP@
_GL_CXXALIAS_SYS (wcsdup, wchar_t *, (const wchar_t *s));
+# endif
# endif
-# endif
-# if (defined _WIN32 && !defined __CYGWIN__) || @HAVE_DECL_WCSDUP@
+# if (defined _WIN32 && !defined __CYGWIN__) || @HAVE_DECL_WCSDUP@
_GL_CXXALIASWARN (wcsdup);
+# endif
# endif
#endif
diff --git a/gnulib/import/wctype-h.c b/gnulib/import/wctype-h.c
index bb5f847e330..1278143304c 100644
--- a/gnulib/import/wctype-h.c
+++ b/gnulib/import/wctype-h.c
@@ -1,4 +1,23 @@
+/* Inline functions for <wctype.h>.
+
+ Copyright (C) 2012-2022 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
/* Normally this would be wctype.c, but that name's already taken. */
+
#include <config.h>
+
#define _GL_WCTYPE_INLINE _GL_EXTERN_INLINE
#include "wctype.h"
diff --git a/gnulib/import/wctype.in.h b/gnulib/import/wctype.in.h
index d1c4a3047e1..98cafee7746 100644
--- a/gnulib/import/wctype.in.h
+++ b/gnulib/import/wctype.in.h
@@ -1,19 +1,19 @@
/* A substitute for ISO C99 <wctype.h>, for platforms that lack it.
- Copyright (C) 2006-2021 Free Software Foundation, Inc.
+ Copyright (C) 2006-2022 Free Software Foundation, Inc.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Bruno Haible and Paul Eggert. */
@@ -103,7 +103,7 @@ _GL_INLINE_HEADER_BEGIN
/* mingw and MSVC define wint_t as 'unsigned short' in <crtdefs.h> or
<stddef.h>. This is too small: ISO C 99 section 7.24.1.(2) says that
wint_t must be "unchanged by default argument promotions". Override it. */
-# if @GNULIB_OVERRIDES_WINT_T@
+# if @GNULIBHEADERS_OVERRIDE_WINT_T@
# if !GNULIB_defined_wint_t
# if @HAVE_CRTDEFS_H@
# include <crtdefs.h>
@@ -132,7 +132,7 @@ typedef unsigned int rpl_wint_t;
same way, or not at all. */
# if ! @HAVE_ISWCNTRL@ || @REPLACE_ISWCNTRL@
-# if @GNULIB_OVERRIDES_WINT_T@ /* implies @REPLACE_ISWCNTRL@ */
+# if @GNULIBHEADERS_OVERRIDE_WINT_T@ /* implies @REPLACE_ISWCNTRL@ */
_GL_WCTYPE_INLINE int
rpl_iswalnum (wint_t wc)
@@ -496,7 +496,7 @@ _GL_FUNCDECL_RPL (iswxdigit, int, (wint_t wc));
# endif
-# if defined __MINGW32__ && !@GNULIB_OVERRIDES_WINT_T@
+# if defined __MINGW32__ && !@GNULIBHEADERS_OVERRIDE_WINT_T@
/* On native Windows, wchar_t is uint16_t, and wint_t is uint32_t.
The functions towlower and towupper are implemented in the MSVCRT library
@@ -529,7 +529,7 @@ rpl_towupper (wint_t wc)
# define towupper rpl_towupper
# endif
-# endif /* __MINGW32__ && !@GNULIB_OVERRIDES_WINT_T@ */
+# endif /* __MINGW32__ && !@GNULIBHEADERS_OVERRIDE_WINT_T@ */
# define GNULIB_defined_wctype_functions 1
#endif
@@ -646,7 +646,7 @@ _GL_WARN_ON_USE (wctype, "wctype is unportable - "
The argument WC must be either a wchar_t value or WEOF.
The argument DESC must have been returned by the wctype() function. */
#if @GNULIB_ISWCTYPE@
-# if @GNULIB_OVERRIDES_WINT_T@
+# if @GNULIBHEADERS_OVERRIDE_WINT_T@
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# undef iswctype
# define iswctype rpl_iswctype
diff --git a/gnulib/import/windows-initguard.h b/gnulib/import/windows-initguard.h
index afdd8e7b3db..a29d7e97bbb 100644
--- a/gnulib/import/windows-initguard.h
+++ b/gnulib/import/windows-initguard.h
@@ -1,18 +1,18 @@
/* Init guards, somewhat like spinlocks (native Windows implementation).
- Copyright (C) 2005-2021 Free Software Foundation, Inc.
+ Copyright (C) 2005-2022 Free Software Foundation, Inc.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Bruno Haible <bruno@clisp.org>, 2005.
Based on GCC's gthr-win32.h. */
diff --git a/gnulib/import/windows-mutex.c b/gnulib/import/windows-mutex.c
index b86c82997e4..28e429c1499 100644
--- a/gnulib/import/windows-mutex.c
+++ b/gnulib/import/windows-mutex.c
@@ -1,18 +1,18 @@
/* Plain mutexes (native Windows implementation).
- Copyright (C) 2005-2021 Free Software Foundation, Inc.
+ Copyright (C) 2005-2022 Free Software Foundation, Inc.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Bruno Haible <bruno@clisp.org>, 2005.
Based on GCC's gthr-win32.h. */
diff --git a/gnulib/import/windows-mutex.h b/gnulib/import/windows-mutex.h
index 63000352a6f..7aedfdf67c4 100644
--- a/gnulib/import/windows-mutex.h
+++ b/gnulib/import/windows-mutex.h
@@ -1,18 +1,18 @@
/* Plain mutexes (native Windows implementation).
- Copyright (C) 2005-2021 Free Software Foundation, Inc.
+ Copyright (C) 2005-2022 Free Software Foundation, Inc.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Bruno Haible <bruno@clisp.org>, 2005.
Based on GCC's gthr-win32.h. */
diff --git a/gnulib/import/windows-once.c b/gnulib/import/windows-once.c
index 3c4a386f72f..deea5487a3a 100644
--- a/gnulib/import/windows-once.c
+++ b/gnulib/import/windows-once.c
@@ -1,18 +1,18 @@
/* Once-only control (native Windows implementation).
- Copyright (C) 2005-2021 Free Software Foundation, Inc.
+ Copyright (C) 2005-2022 Free Software Foundation, Inc.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Bruno Haible <bruno@clisp.org>, 2005.
Based on GCC's gthr-win32.h. */
diff --git a/gnulib/import/windows-once.h b/gnulib/import/windows-once.h
index 9dfbf3fa80a..85534c99c1d 100644
--- a/gnulib/import/windows-once.h
+++ b/gnulib/import/windows-once.h
@@ -1,18 +1,18 @@
/* Once-only control (native Windows implementation).
- Copyright (C) 2005-2021 Free Software Foundation, Inc.
+ Copyright (C) 2005-2022 Free Software Foundation, Inc.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Bruno Haible <bruno@clisp.org>, 2005.
Based on GCC's gthr-win32.h. */
diff --git a/gnulib/import/windows-recmutex.c b/gnulib/import/windows-recmutex.c
index 8e2bd14b4eb..d8087ac132d 100644
--- a/gnulib/import/windows-recmutex.c
+++ b/gnulib/import/windows-recmutex.c
@@ -1,18 +1,18 @@
/* Plain recursive mutexes (native Windows implementation).
- Copyright (C) 2005-2021 Free Software Foundation, Inc.
+ Copyright (C) 2005-2022 Free Software Foundation, Inc.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Bruno Haible <bruno@clisp.org>, 2005.
Based on GCC's gthr-win32.h. */
diff --git a/gnulib/import/windows-recmutex.h b/gnulib/import/windows-recmutex.h
index d3a8f4785ec..746e75c0710 100644
--- a/gnulib/import/windows-recmutex.h
+++ b/gnulib/import/windows-recmutex.h
@@ -1,18 +1,18 @@
/* Plain recursive mutexes (native Windows implementation).
- Copyright (C) 2005-2021 Free Software Foundation, Inc.
+ Copyright (C) 2005-2022 Free Software Foundation, Inc.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Bruno Haible <bruno@clisp.org>, 2005.
Based on GCC's gthr-win32.h. */
diff --git a/gnulib/import/windows-rwlock.c b/gnulib/import/windows-rwlock.c
index 2c3f922a023..d186e037c27 100644
--- a/gnulib/import/windows-rwlock.c
+++ b/gnulib/import/windows-rwlock.c
@@ -1,18 +1,18 @@
/* Read-write locks (native Windows implementation).
- Copyright (C) 2005-2021 Free Software Foundation, Inc.
+ Copyright (C) 2005-2022 Free Software Foundation, Inc.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Bruno Haible <bruno@clisp.org>, 2005.
Based on GCC's gthr-win32.h. */
diff --git a/gnulib/import/windows-rwlock.h b/gnulib/import/windows-rwlock.h
index 7198c1e161e..65c5ab49df9 100644
--- a/gnulib/import/windows-rwlock.h
+++ b/gnulib/import/windows-rwlock.h
@@ -1,18 +1,18 @@
/* Read-write locks (native Windows implementation).
- Copyright (C) 2005-2021 Free Software Foundation, Inc.
+ Copyright (C) 2005-2022 Free Software Foundation, Inc.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Bruno Haible <bruno@clisp.org>, 2005.
Based on GCC's gthr-win32.h. */
diff --git a/gnulib/import/wmemchr-impl.h b/gnulib/import/wmemchr-impl.h
index ab08897cf09..f92a362e8d9 100644
--- a/gnulib/import/wmemchr-impl.h
+++ b/gnulib/import/wmemchr-impl.h
@@ -1,18 +1,18 @@
/* Search wide character array for a wide character.
- Copyright (C) 1999, 2011-2021 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2011-2022 Free Software Foundation, Inc.
Written by Bruno Haible <bruno@clisp.org>, 1999.
- This program is free software: you can 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 file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
wchar_t *
diff --git a/gnulib/import/wmemchr.c b/gnulib/import/wmemchr.c
index 549818f81a6..127e1a52714 100644
--- a/gnulib/import/wmemchr.c
+++ b/gnulib/import/wmemchr.c
@@ -1,18 +1,18 @@
/* Search wide character array for a wide character.
- Copyright (C) 2011-2021 Free Software Foundation, Inc.
+ Copyright (C) 2011-2022 Free Software Foundation, Inc.
Written by Bruno Haible <bruno@clisp.org>, 2011.
- This program is free software: you can 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 file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#include <config.h>
diff --git a/gnulib/import/wmempcpy.c b/gnulib/import/wmempcpy.c
index 64ffe39dc4b..cdfa9133df6 100644
--- a/gnulib/import/wmempcpy.c
+++ b/gnulib/import/wmempcpy.c
@@ -1,18 +1,18 @@
/* Copy wide character array, return pointer after last written wide character.
- Copyright (C) 2020-2021 Free Software Foundation, Inc.
+ Copyright (C) 2020-2022 Free Software Foundation, Inc.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
#include <config.h>
diff --git a/gnulib/import/xalloc-oversized.h b/gnulib/import/xalloc-oversized.h
index 53daf59663e..aefa6fd8049 100644
--- a/gnulib/import/xalloc-oversized.h
+++ b/gnulib/import/xalloc-oversized.h
@@ -1,18 +1,18 @@
/* xalloc-oversized.h -- memory allocation size checking
- Copyright (C) 1990-2000, 2003-2004, 2006-2021 Free Software Foundation, Inc.
+ Copyright (C) 1990-2000, 2003-2004, 2006-2022 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ GNU Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#ifndef XALLOC_OVERSIZED_H_
@@ -21,34 +21,39 @@
#include <stddef.h>
#include <stdint.h>
-/* True if N * S would overflow in a size_t calculation,
- or would generate a value larger than PTRDIFF_MAX.
+/* True if N * S does not fit into both ptrdiff_t and size_t.
+ N and S should be nonnegative and free of side effects.
This expands to a constant expression if N and S are both constants.
- By gnulib convention, SIZE_MAX represents overflow in size
+ By gnulib convention, SIZE_MAX represents overflow in size_t
calculations, so the conservative size_t-based dividend to use here
is SIZE_MAX - 1. */
#define __xalloc_oversized(n, s) \
- ((size_t) (PTRDIFF_MAX < SIZE_MAX ? PTRDIFF_MAX : SIZE_MAX - 1) / (s) < (n))
+ ((s) != 0 \
+ && ((size_t) (PTRDIFF_MAX < SIZE_MAX ? PTRDIFF_MAX : SIZE_MAX - 1) / (s) \
+ < (n)))
-#if PTRDIFF_MAX < SIZE_MAX
-typedef ptrdiff_t __xalloc_count_type;
-#else
-typedef size_t __xalloc_count_type;
-#endif
+/* Return 1 if and only if an array of N objects, each of size S,
+ cannot exist reliably because its total size in bytes would exceed
+ MIN (PTRDIFF_MAX, SIZE_MAX - 1).
+
+ N and S should be nonnegative and free of side effects.
-/* Return 1 if an array of N objects, each of size S, cannot exist
- reliably due to size or ptrdiff_t arithmetic overflow. S must be
- positive and N must be nonnegative. This is a macro, not a
- function, so that it works correctly even when SIZE_MAX < N. */
+ Warning: (xalloc_oversized (N, S) ? NULL : malloc (N * S)) can
+ misbehave if N and S are both narrower than ptrdiff_t and size_t,
+ and can be rewritten as (xalloc_oversized (N, S) ? NULL
+ : malloc (N * (size_t) S)).
-#if 7 <= __GNUC__ && !defined __clang__
+ This is a macro, not a function, so that it works even if an
+ argument exceeds MAX (PTRDIFF_MAX, SIZE_MAX). */
+#if 7 <= __GNUC__ && !defined __clang__ && PTRDIFF_MAX < SIZE_MAX
# define xalloc_oversized(n, s) \
- __builtin_mul_overflow_p (n, s, (__xalloc_count_type) 1)
-#elif 5 <= __GNUC__ && !defined __ICC && !__STRICT_ANSI__
+ __builtin_mul_overflow_p (n, s, (ptrdiff_t) 1)
+#elif (5 <= __GNUC__ && !defined __ICC && !__STRICT_ANSI__ \
+ && PTRDIFF_MAX < SIZE_MAX)
# define xalloc_oversized(n, s) \
(__builtin_constant_p (n) && __builtin_constant_p (s) \
? __xalloc_oversized (n, s) \
- : ({ __xalloc_count_type __xalloc_count; \
+ : ({ ptrdiff_t __xalloc_count; \
__builtin_mul_overflow (n, s, &__xalloc_count); }))
/* Other compilers use integer division; this may be slower but is
diff --git a/gnulib/update-gnulib.sh b/gnulib/update-gnulib.sh
index e4a910ff6c5..80aa3fafbf8 100755
--- a/gnulib/update-gnulib.sh
+++ b/gnulib/update-gnulib.sh
@@ -84,7 +84,7 @@ IMPORTED_GNULIB_MODULES="\
"
# The gnulib commit ID to use for the update.
-GNULIB_COMMIT_SHA1="776af40e09b476a41073131a90022572f448c189"
+GNULIB_COMMIT_SHA1="bd11400942d63de12371988dca8144925de9e2c3"
# The expected version number for the various auto tools we will
# use after the import.
diff --git a/gold/ChangeLog b/gold/ChangeLog
index 38ed88595a9..e2f62999cfe 100644
--- a/gold/ChangeLog
+++ b/gold/ChangeLog
@@ -1,3 +1,26 @@
+2022-02-17 Nick Clifton <nickc@redhat.com>
+
+ * po/sr.po: Updated Serbian translation.
+
+2022-02-02 Nick Clifton <nickc@redhat.com>
+
+ * po/fr.po: Updated French translation.
+
+2022-01-24 Nick Clifton <nickc@redhat.com>
+
+ * po/ro.po: Updated Romanian translation.
+
+2022-01-22 Nick Clifton <nickc@redhat.com>
+
+ * configure: Regenerate.
+ * po/gold.pot: Regenerate.
+ * Makefile.in: Regenerate.
+ * testsuite/Makefile.in: Regenerate.
+
+2022-01-22 Nick Clifton <nickc@redhat.com>
+
+ * 2.38 release branch created.
+
2021-08-10 Nick Clifton <nickc@redhat.com>
* po/sr.po: Updated Serbian translation.
diff --git a/gold/Makefile.am b/gold/Makefile.am
index d6d859bcb8c..2e406716f29 100644
--- a/gold/Makefile.am
+++ b/gold/Makefile.am
@@ -243,10 +243,6 @@ install-exec-local: ld-new$(EXEEXT)
fi; \
fi
-# We want install to imply install-info as per GNU standards, despite
-# the cygnus option.
-install-data-local: install-info
-
POTFILES= $(CCFILES) $(HFILES) $(TARGETSOURCES)
po/POTFILES.in: @MAINT@ Makefile
diff --git a/gold/Makefile.in b/gold/Makefile.in
index 9ce44e96ecf..516eace5aa5 100644
--- a/gold/Makefile.in
+++ b/gold/Makefile.in
@@ -1499,7 +1499,7 @@ info: info-recursive
info-am:
-install-data-am: install-data-local
+install-data-am:
install-dvi: install-dvi-recursive
@@ -1557,15 +1557,15 @@ uninstall-am: uninstall-binPROGRAMS
cscopelist-am ctags ctags-am distclean distclean-compile \
distclean-generic distclean-hdr distclean-tags dvi dvi-am html \
html-am info info-am install install-am install-binPROGRAMS \
- install-data install-data-am install-data-local install-dvi \
- install-dvi-am install-exec install-exec-am install-exec-local \
- install-html install-html-am install-info install-info-am \
- install-man install-pdf install-pdf-am install-ps \
- install-ps-am install-strip installcheck installcheck-am \
- installdirs installdirs-am maintainer-clean \
- maintainer-clean-generic mostlyclean mostlyclean-compile \
- mostlyclean-generic pdf pdf-am ps ps-am recheck tags tags-am \
- uninstall uninstall-am uninstall-binPROGRAMS
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-exec-local install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ installdirs-am maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \
+ ps ps-am recheck tags tags-am uninstall uninstall-am \
+ uninstall-binPROGRAMS
.PRECIOUS: Makefile
@@ -1604,10 +1604,6 @@ install-exec-local: ld-new$(EXEEXT)
fi; \
fi
-# We want install to imply install-info as per GNU standards, despite
-# the cygnus option.
-install-data-local: install-info
-
po/POTFILES.in: @MAINT@ Makefile
for f in $(POTFILES); do echo $$f; done | LC_ALL=C sort > tmp \
&& mv tmp $(srcdir)/po/POTFILES.in
diff --git a/gold/po/fr.po b/gold/po/fr.po
index 83dc6c8bc3a..a78026e4fa2 100644
--- a/gold/po/fr.po
+++ b/gold/po/fr.po
@@ -2,17 +2,17 @@
# Copyright © 2021 Free Software Foundation, Inc.
# This file is distributed under the same license as the binutils package.
#
-# Grégoire Scano <gregoire.scano@malloc.fr>, 2015, 2018-2021
+# Grégoire Scano <gregoire.scano@malloc.fr>, 2015, 2018-2022.
#
# stub => espace d'amorçage
# patch space => espace de retouche
# relocation => relocalisation
msgid ""
msgstr ""
-"Project-Id-Version: gold 2.36.90\n"
-"Report-Msgid-Bugs-To: bug-binutils@gnu.org\n"
-"POT-Creation-Date: 2021-07-03 15:02+0100\n"
-"PO-Revision-Date: 2021-07-05 06:59+0800\n"
+"Project-Id-Version: gold 2.37.90\n"
+"Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n"
+"POT-Creation-Date: 2022-01-22 12:25+0000\n"
+"PO-Revision-Date: 2022-02-02 09:07+0800\n"
"Last-Translator: Grégoire Scano <gregoire.scano@malloc.fr>\n"
"Language-Team: French <traduc@traduc.org>\n"
"Language: fr\n"
@@ -63,7 +63,7 @@ msgstr "index de nom de table de symboles invalide : %u"
msgid "symbol table name section has wrong type: %u"
msgstr "la section de nom de table de symboles a un type incorrect : %u"
-#: aarch64.cc:3831 arm.cc:10905 mips.cc:9608 powerpc.cc:2946 target.cc:94
+#: aarch64.cc:3831 arm.cc:10905 mips.cc:9608 powerpc.cc:2911 target.cc:94
#, c-format
msgid "%s: unsupported ELF file type %d"
msgstr "%s : type de fichier ELF %d non pris en charge"
@@ -83,14 +83,14 @@ msgstr "** PLT"
msgid "Stub is too far away, try a smaller value for '--stub-group-size'. The current value is 0x%lx."
msgstr "L'espace d'amorçage est bien trop loin, essayez une valeur plus petite pour « --stub-group-size ». La valeur actuelle est 0x%lx."
-#: aarch64.cc:6015 arm.cc:8477 i386.cc:1772 mips.cc:12461 powerpc.cc:7647
-#: s390.cc:2180 s390.cc:2628 sparc.cc:2134 tilegx.cc:3137 tilegx.cc:3589
+#: aarch64.cc:6015 arm.cc:8477 i386.cc:1772 mips.cc:12461 powerpc.cc:7810
+#: s390.cc:2185 s390.cc:2633 sparc.cc:2134 tilegx.cc:3137 tilegx.cc:3589
#: x86_64.cc:3471 x86_64.cc:3924
#, c-format
msgid "%s: unsupported reloc %u against local symbol"
msgstr "%s : la relocalisation %u vers un symbole local n'est pas prise en charge"
-#: aarch64.cc:6056 powerpc.cc:7752 s390.cc:2254 sparc.cc:2230
+#: aarch64.cc:6056 powerpc.cc:7915 s390.cc:2259 sparc.cc:2230
msgid "requires unsupported dynamic reloc; recompile with -fPIC"
msgstr "nécessite une relocalisation dynamique non prise en charge ; veuillez recompiler avec -fPIC"
@@ -109,8 +109,8 @@ msgstr "%s : la relocalisation %u n'est pas prise en charge pour un lien indép
msgid "%s: unsupported TLSLE reloc %u in shared code."
msgstr "%s : relocalisation TLSLE %u non prise en charge dans un code partagé."
-#: aarch64.cc:6372 arm.cc:8885 i386.cc:2127 mips.cc:12474 powerpc.cc:8592
-#: s390.cc:3059 s390.cc:3076 sparc.cc:2572 tilegx.cc:3605 tilegx.cc:4144
+#: aarch64.cc:6372 arm.cc:8885 i386.cc:2127 mips.cc:12474 powerpc.cc:8750
+#: s390.cc:3064 s390.cc:3081 sparc.cc:2572 tilegx.cc:3605 tilegx.cc:4144
#: x86_64.cc:3940 x86_64.cc:4446
#, c-format
msgid "%s: unsupported reloc %u against global symbol %s"
@@ -126,7 +126,7 @@ msgstr "%s : le type de relocalisation TLSLE %u n'est pas prise en charge pour
msgid "%s: unsupported reloc type in global scan"
msgstr "%s : type de relocalisation non prise en charge lors d'un balayage global"
-#: aarch64.cc:6907 powerpc.cc:9726 s390.cc:4009 sparc.cc:3164 tilegx.cc:4211
+#: aarch64.cc:6907 powerpc.cc:9886 s390.cc:4014 sparc.cc:3164 tilegx.cc:4211
#: x86_64.cc:4511
#, c-format
msgid "%s: unsupported REL reloc section"
@@ -137,8 +137,8 @@ msgstr "%s : section de relocalisation REL non prise en charge"
msgid "cannot relocate %s in object file"
msgstr "impossible de relocaliser %s dans le fichier objet"
-#: aarch64.cc:7343 i386.cc:2987 i386.cc:3753 mips.cc:10076 powerpc.cc:12049
-#: s390.cc:3460 sparc.cc:3695 tilegx.cc:4726 x86_64.cc:5008
+#: aarch64.cc:7343 i386.cc:2987 i386.cc:3753 mips.cc:10076 powerpc.cc:12236
+#: s390.cc:3465 sparc.cc:3695 tilegx.cc:4726 x86_64.cc:5008
#, c-format
msgid "unexpected reloc %u in object file"
msgstr "relocalisation %u inattendue dans le fichier objet"
@@ -211,87 +211,87 @@ msgstr "Ne prend pas en charge l'optimisation tlsdesc gs_to_ie sur la relocalisa
msgid "Erratum 835769 found and fixed at \"%s\", section %d, offset 0x%08x."
msgstr "Erratum 835769 trouvé et corrigé à « %s », section %d, décalage 0x%08x."
-#: archive.cc:134
+#: archive.cc:127
#, c-format
msgid "script or expression reference to %s"
msgstr "référence de script ou d'expression à %s"
-#: archive.cc:239
+#: archive.cc:232
#, c-format
msgid "%s: no archive symbol table (run ranlib)"
msgstr "%s : pas de table de symboles dans l'archive (exécuter ranlib)"
-#: archive.cc:331
+#: archive.cc:324
#, c-format
msgid "%s: bad archive symbol table names"
msgstr "%s : mauvais noms pour la table de symboles de l'archive"
-#: archive.cc:363
+#: archive.cc:356
#, c-format
msgid "%s: malformed archive header at %zu"
msgstr "%s : en-tête d'archive malformé à la position %zu"
-#: archive.cc:383
+#: archive.cc:376
#, c-format
msgid "%s: malformed archive header size at %zu"
msgstr "%s : la taille de l'en-tête de l'archive n'est pas correcte à la position %zu"
-#: archive.cc:394
+#: archive.cc:387
#, c-format
msgid "%s: malformed archive header name at %zu"
msgstr "%s : le nom de l'en-tête de l'archive n'est pas correct à la position %zu"
-#: archive.cc:430
+#: archive.cc:423
#, c-format
msgid "%s: bad extended name index at %zu"
msgstr "%s : index de nom étendu incorrect à la position %zu"
-#: archive.cc:440
+#: archive.cc:433
#, c-format
msgid "%s: bad extended name entry at header %zu"
msgstr "%s : nom d'entrée étendue incorrect dans l'en-tête %zu"
-#: archive.cc:537
+#: archive.cc:530
#, c-format
msgid "%s: short archive header at %zu"
msgstr "%s : en-tête d'archive trop court à la position %zu"
-#: archive.cc:727
+#: archive.cc:720
#, c-format
msgid "%s: plugin failed to claim member %s at %zu"
msgstr "%s : le greffon n'a pas pu récupérer le membre %s à la position %zu"
-#: archive.cc:731
+#: archive.cc:724
#, c-format
msgid "%s: member %s at %zu is not an ELF object"
msgstr "%s : le membre %s à la position %zu n'est pas un objet ELF"
-#: archive.cc:1093
+#: archive.cc:1086
#, c-format
msgid "%s: archive libraries: %u\n"
msgstr "%s : bibliothèques dans l'archive : %u\n"
-#: archive.cc:1095
+#: archive.cc:1088
#, c-format
msgid "%s: total archive members: %u\n"
msgstr "%s : nombre total de membres dans l'archive : %u\n"
-#: archive.cc:1097
+#: archive.cc:1090
#, c-format
msgid "%s: loaded archive members: %u\n"
msgstr "%s : membres chargés de l'archive : %u\n"
-#: archive.cc:1327
+#: archive.cc:1320
#, c-format
msgid "%s: lib groups: %u\n"
msgstr "%s : groupes de la bibliothèque : %u\n"
-#: archive.cc:1329
+#: archive.cc:1322
#, c-format
msgid "%s: total lib groups members: %u\n"
msgstr "%s : nombre total de membres de groupes de la bibliothèque : %u\n"
-#: archive.cc:1331
+#: archive.cc:1324
#, c-format
msgid "%s: loaded lib groups members: %u\n"
msgstr "%s : nombre de membres de groupes de la bibliothèque chargés : %u\n"
@@ -386,13 +386,13 @@ msgstr "le décalage PLT est trop grand, essayez d'éditer les liens avec --long
msgid "requires unsupported dynamic reloc %s; recompile with -fPIC"
msgstr "nécessite une relocalisation dynamique %s non prise en charge ; recompiler avec -fPIC"
-#: arm.cc:8547 i386.cc:1786 s390.cc:2271 sparc.cc:2247 tilegx.cc:3223
+#: arm.cc:8547 i386.cc:1786 s390.cc:2276 sparc.cc:2247 tilegx.cc:3223
#: x86_64.cc:3581
#, c-format
msgid "%s: unsupported TLS reloc %u for IFUNC symbol"
msgstr "%s : la relocalisation TLS %u pour un symbole IFUNC n'est pas prise en charge"
-#: arm.cc:8643 i386.cc:1862 powerpc.cc:8074 s390.cc:2364 x86_64.cc:3679
+#: arm.cc:8643 i386.cc:1862 powerpc.cc:8219 s390.cc:2369 x86_64.cc:3679
#, c-format
msgid "section symbol %u has bad shndx %u"
msgstr "le symbole de section %u a un mauvais shndx %u"
@@ -400,13 +400,13 @@ msgstr "le symbole de section %u a un mauvais shndx %u"
#. These are relocations which should only be seen by the
#. dynamic linker, and should never be seen here.
#: arm.cc:8752 arm.cc:9233 i386.cc:1950 i386.cc:2436 mips.cc:11258
-#: s390.cc:2463 s390.cc:2897 sparc.cc:2553 sparc.cc:3033 tilegx.cc:3584
+#: s390.cc:2468 s390.cc:2902 sparc.cc:2553 sparc.cc:3033 tilegx.cc:3584
#: tilegx.cc:4139 x86_64.cc:3796 x86_64.cc:4319
#, c-format
msgid "%s: unexpected reloc %u in object file"
msgstr "%s : relocalisation %u inattendue dans le fichier objet"
-#: arm.cc:8784 i386.cc:1984 mips.cc:10707 s390.cc:2507 sparc.cc:2452
+#: arm.cc:8784 i386.cc:1984 mips.cc:10707 s390.cc:2512 sparc.cc:2452
#: tilegx.cc:3488 x86_64.cc:3828
#, c-format
msgid "local symbol %u has bad shndx %u"
@@ -422,8 +422,8 @@ msgid "unable to provide V4BX reloc interworking fix up; the target profile does
msgstr "impossible de fournir une correction de relocalisation V4BX interopérable ; le profil de la cible ne prend pas en charge l'instruction BX"
#: arm.cc:10247 i386.cc:3019 i386.cc:3101 i386.cc:3166 i386.cc:3202
-#: i386.cc:3274 mips.cc:12296 powerpc.cc:12163 s390.cc:3466 s390.cc:3537
-#: s390.cc:3574 s390.cc:3596 s390.cc:3621 sparc.cc:3701 sparc.cc:3892
+#: i386.cc:3274 mips.cc:12296 powerpc.cc:12350 s390.cc:3471 s390.cc:3542
+#: s390.cc:3579 s390.cc:3601 s390.cc:3626 sparc.cc:3701 sparc.cc:3892
#: sparc.cc:3953 sparc.cc:4060 tilegx.cc:4732 x86_64.cc:5029 x86_64.cc:5155
#: x86_64.cc:5227 x86_64.cc:5261
#, c-format
@@ -542,7 +542,7 @@ msgstr "** attributs"
msgid "cannot open %s: %s:"
msgstr "impossible d'ouvrir %s : %s :"
-#: common.cc:351 output.cc:2517 output.cc:2616
+#: common.cc:351 output.cc:2469 output.cc:2568
#, c-format
msgid "out of patch space in section %s; relink with --incremental-full"
msgstr "à court d'espace de retouche dans la section %s ; rééditer les liens avec --incremental-full"
@@ -1096,7 +1096,7 @@ msgstr "SUN et GNU suivent les relocalisations TLS"
msgid "unsupported reloc %u in object file"
msgstr "la relocalisation %u n'est pas prise en charge dans le fichier objet"
-#: i386.cc:4036 powerpc.cc:9680 s390.cc:4877 x86_64.cc:6113
+#: i386.cc:4036 powerpc.cc:9840 s390.cc:4886 x86_64.cc:6113
#, c-format
msgid "failed to match split-stack sequence at section %u offset %0zx"
msgstr "l'association de séquence de la pile scindée (split-stack) à l'offset %2$0zx de la section %1$u a échoué"
@@ -1177,11 +1177,11 @@ msgstr "fichier non pris en charge : 64 bits, gros-boutiste"
msgid "unsupported file: 64-bit, little-endian"
msgstr "fichier non pris en charge : 64 bits, petit-boutiste"
-#: incremental.cc:2083
+#: incremental.cc:2089
msgid "COMDAT group has no signature"
msgstr "groupe COMDAT sans signature"
-#: incremental.cc:2089
+#: incremental.cc:2095
#, c-format
msgid "COMDAT group %s included twice in incremental link"
msgstr "double inclusion du groupe COMDAT %s lors d'une édition de liens incrémentale"
@@ -1249,75 +1249,75 @@ msgstr "%s : le type %d de propriété de programme est inconnu dans la section
msgid "unable to open --section-ordering-file file %s: %s"
msgstr "impossible d'ouvrir le fichier %s relatif à l'option --section-ordering-file : %s"
-#: layout.cc:3372
+#: layout.cc:3373
msgid "one or more inputs require executable stack, but -z noexecstack was given"
msgstr "une ou plusieurs entrées nécessite une pile d'exécution ; mais -z noexecstack a été passé"
-#: layout.cc:3445
+#: layout.cc:3446
#, c-format
msgid "--build-id=uuid failed: could not open /dev/urandom: %s"
msgstr "--build-id=uuid a échoué : impossible d'ouvrir /dev/urandom : %s"
-#: layout.cc:3452
+#: layout.cc:3453
#, c-format
msgid "/dev/urandom: read failed: %s"
msgstr "/dev/urandom : échec de read() : %s"
-#: layout.cc:3454
+#: layout.cc:3455
#, c-format
msgid "/dev/urandom: expected %zu bytes, got %zd bytes"
msgstr "/dev/urandom : %zu octets attendus, %zd octets lus"
-#: layout.cc:3466
+#: layout.cc:3467
msgid "--build-id=uuid failed: could not load rpcrt4.dll"
msgstr "--build-id=uuid a échoué : impossible de charger rpcrt4.dll"
-#: layout.cc:3472
+#: layout.cc:3473
msgid "--build-id=uuid failed: could not find UuidCreate"
msgstr "--build-id=uuid a échoué : impossible de trouver UuidCreate"
-#: layout.cc:3474
+#: layout.cc:3475
msgid "__build_id=uuid failed: call UuidCreate() failed"
msgstr "__build_id=uuid a échoué : échec de l'appel à UuidCreate()"
-#: layout.cc:3496
+#: layout.cc:3497
#, c-format
msgid "--build-id argument '%s' not a valid hex number"
msgstr "l'argument « %s » de --build-id n'est pas un nombre hexadécimal valide"
-#: layout.cc:3502
+#: layout.cc:3503
#, c-format
msgid "unrecognized --build-id argument '%s'"
msgstr "l'argument « %s » de --build-id n'est pas reconnu"
-#: layout.cc:4080
+#: layout.cc:4081
#, c-format
msgid "load segment overlap [0x%llx -> 0x%llx] and [0x%llx -> 0x%llx]"
msgstr "le segment de chargement chevauche [0x%llx -> 0x%llx] et [0x%llx -> 0x%llx]"
-#: layout.cc:4241 output.cc:4597
+#: layout.cc:4242 output.cc:4549
#, c-format
msgid "out of patch space for section %s; relink with --incremental-full"
msgstr "à court d'espace de retouche pour la section %s ; rééditer les liens avec --incremental-full"
-#: layout.cc:4250 output.cc:4605
+#: layout.cc:4251 output.cc:4557
#, c-format
msgid "%s: section changed size; relink with --incremental-full"
msgstr "%s : changement de taille de la section ; rééditer les liens avec --incremental-full"
-#: layout.cc:4505
+#: layout.cc:4506
msgid "out of patch space for symbol table; relink with --incremental-full"
msgstr "à court d'espace de retouche pour la table de symboles ; rééditer les liens avec --incremental-full"
-#: layout.cc:4576
+#: layout.cc:4577
msgid "out of patch space for section header table; relink with --incremental-full"
msgstr "à court d'espace de retouche pour la table d'en-tête de section ; rééditer les liens avec --incremental-full"
-#: layout.cc:5322
+#: layout.cc:5323
msgid "read-only segment has dynamic relocations"
msgstr "segment en lecture seule ayant des relocalisations dynamiques"
-#: layout.cc:5325
+#: layout.cc:5326
msgid "shared library text segment is not shareable"
msgstr "segment de texte de bibliothèque partagée non partageable"
@@ -1595,7 +1595,7 @@ msgstr "débordement de relocalisation : %u vers « %s »"
msgid "unaligned PC-relative relocation"
msgstr "relocalisation relative au PC non alignée"
-#: nacl.cc:43 object.cc:174 object.cc:3451 output.cc:5239
+#: nacl.cc:43 object.cc:174 object.cc:3451 output.cc:5191
#, c-format
msgid "%s: %s"
msgstr "%s : %s"
@@ -3268,90 +3268,90 @@ msgstr "Fusionner tous les préfixes de section .text.* ."
msgid "section group retained but group element discarded"
msgstr "groupe de section retenu mais élément de groupe éliminé"
-#: output.cc:1781 output.cc:1813
+#: output.cc:1733 output.cc:1765
msgid "out of patch space (GOT); relink with --incremental-full"
msgstr "à court d'espace de retouche (GOT) ; rééditer les liens avec --incremental-full"
-#: output.cc:2462
+#: output.cc:2414
#, c-format
msgid "invalid alignment %lu for section \"%s\""
msgstr "l'alignement %lu de la section « %s » n'est pas valide"
-#: output.cc:4625
+#: output.cc:4577
msgid "script places BSS section in the middle of a LOAD segment; space will be allocated in the file"
msgstr "le script place la section BSS au milieu d'un segment LOAD ; de l'espace sera alloué dans le fichier"
-#: output.cc:4647
+#: output.cc:4599
#, c-format
msgid "dot moves backward in linker script from 0x%llx to 0x%llx"
msgstr "le point est déplacé en arrière dans le script de l'éditeur de liens de 0x%llx à 0x%llx"
-#: output.cc:4650
+#: output.cc:4602
#, c-format
msgid "address of section '%s' moves backward from 0x%llx to 0x%llx"
msgstr "l'adresse de la section « %s » est déplacée en arrière de 0x%llx à 0x%llx"
-#: output.cc:5019
+#: output.cc:4971
#, c-format
msgid "%s: incremental base and output file name are the same"
msgstr "%s : les noms des fichiers de sortie et de base incrémentale sont identiques"
-#: output.cc:5026
+#: output.cc:4978
#, c-format
msgid "%s: stat: %s"
msgstr "%s : stat : %s"
-#: output.cc:5031
+#: output.cc:4983
#, c-format
msgid "%s: incremental base file is empty"
msgstr "%s : le fichier incrémental de base est vide"
-#: output.cc:5043 output.cc:5141
+#: output.cc:4995 output.cc:5093
#, c-format
msgid "%s: open: %s"
msgstr "%s : open() : %s"
-#: output.cc:5060
+#: output.cc:5012
#, c-format
msgid "%s: read failed: %s"
msgstr "%s : échec de read() : %s"
-#: output.cc:5065
+#: output.cc:5017
#, c-format
msgid "%s: file too short: read only %lld of %lld bytes"
msgstr "%s : fichier trop court : seulement %lld octets lus sur %lld"
-#: output.cc:5165
+#: output.cc:5117
#, c-format
msgid "%s: mremap: %s"
msgstr "%s : mremap() : %s"
-#: output.cc:5184
+#: output.cc:5136
#, c-format
msgid "%s: mmap: %s"
msgstr "%s : mmap() : %s"
-#: output.cc:5276
+#: output.cc:5228
#, c-format
msgid "%s: mmap: failed to allocate %lu bytes for output file: %s"
msgstr "%s : mmap() : impossible d'allouer %lu octet(s) pour le fichier de sortie : %s"
-#: output.cc:5294
+#: output.cc:5246
#, c-format
msgid "%s: munmap: %s"
msgstr "%s : munmap() : %s"
-#: output.cc:5314
+#: output.cc:5266
#, c-format
msgid "%s: write: unexpected 0 return-value"
msgstr "%s : valeur de retour 0 inattendue"
-#: output.cc:5316
+#: output.cc:5268
#, c-format
msgid "%s: write: %s"
msgstr "%s : write() : %s"
-#: output.cc:5331
+#: output.cc:5283
#, c-format
msgid "%s: close: %s"
msgstr "%s : close() : %s"
@@ -3388,15 +3388,15 @@ msgstr "** relocalisations"
msgid "** group"
msgstr "** groupe"
-#: output.h:2597
+#: output.h:2581
msgid "** GOT"
msgstr "** GOT"
-#: output.h:2804
+#: output.h:2776
msgid "** dynamic"
msgstr "** dynamique"
-#: output.h:2948
+#: output.h:2920
msgid "** symtab xindex"
msgstr "** symtab xindex"
@@ -3456,144 +3456,140 @@ msgstr "%s : écrire les erreurs lors de la copie de fichiers (%s)"
msgid "input files added by plug-ins in --incremental mode not supported yet"
msgstr "les fichiers d'entrée ajoutés par les greffons pour le mode --incremental ne sont pas encore pris en charge"
-#: powerpc.cc:1299
+#: powerpc.cc:1302
msgid "missing expected __tls_get_addr call"
msgstr "un appel attendu à __tls_get_addr est manquant"
-#: powerpc.cc:2298 powerpc.cc:2635
+#: powerpc.cc:2292 powerpc.cc:2627
#, c-format
msgid "%s: ABI version %d is not compatible with ABI version %d output"
msgstr "%s : la version ABI %d n'est pas compatible avec la sortie de la version ABI %d"
-#: powerpc.cc:2332 powerpc.cc:2694
+#: powerpc.cc:2326 powerpc.cc:2686
#, c-format
msgid "%s: .opd invalid in abiv%d"
msgstr "%s : .opd invalide dans abiv%d"
-#: powerpc.cc:2410
+#: powerpc.cc:2404
#, c-format
msgid "%s: unexpected reloc type %u in .opd section"
msgstr "%s : type relocalisation %u inattendue dans la section .opd"
-#: powerpc.cc:2421
+#: powerpc.cc:2415
#, c-format
msgid "%s: .opd is not a regular array of opd entries"
msgstr "%s : .opd n'est pas un tableau licite d'entrées opd"
-#: powerpc.cc:2563
+#: powerpc.cc:2555
#, c-format
msgid "%s: local symbol %d has invalid st_other for ABI version 1"
msgstr "%s : le symbole local %da un st_other invalide pour la version ABI 1"
-#: powerpc.cc:3303
+#: powerpc.cc:3290
#, c-format
msgid "%s:%s exceeds group size"
msgstr "%s : %s dépasse la taille d'un groupe"
-#: powerpc.cc:3651
+#: powerpc.cc:3641
#, c-format
msgid "%s:%s: branch in non-executable section, no long branch stub for you"
msgstr "%s : %s : branchement dans une section non exécutable, pas d'espace d'amorçage pour branche distante pour toi"
-#: powerpc.cc:3769
+#: powerpc.cc:3758
#, c-format
msgid "%s: stub group size is too large; retrying with %#x"
msgstr "%s : la taille du group d'espace d'amorçage est trop grande ; nouvelle tentative avec %#x"
-#: powerpc.cc:5611
+#: powerpc.cc:5729
msgid "** glink"
msgstr "** glink"
-#: powerpc.cc:6258 powerpc.cc:6961
+#: powerpc.cc:6394 powerpc.cc:7109
#, c-format
msgid "linkage table error against `%s'"
msgstr "erreur dans la table d'édition de liens vers « %s »"
-#: powerpc.cc:6261
+#: powerpc.cc:6397
#, c-format
msgid "linkage table error against `%s:[local %u]'"
msgstr "erreur dans la table d'édition de liens vers « %s :[%u local] »"
-#: powerpc.cc:7090
+#: powerpc.cc:7236
msgid "** save/restore"
msgstr "** sauvegarder/restaurer"
-#: powerpc.cc:7844
+#: powerpc.cc:8008
#, c-format
msgid "%s: unsupported reloc %u for IFUNC symbol"
msgstr "%s : relocalisation %u pour un symbole IFUNC non prise en charge"
-#: powerpc.cc:8128 powerpc.cc:8914
+#: powerpc.cc:8274 powerpc.cc:9060
#, c-format
msgid "tocsave symbol %u has bad shndx %u"
msgstr "le symbole tocsave %u a un mauvais shndx %u"
-#: powerpc.cc:8407 powerpc.cc:9237
+#: powerpc.cc:8565 powerpc.cc:9397
#, c-format
msgid "%s: toc optimization is not supported for %#08x instruction"
msgstr "%s : optimization toc non prise en charge pour l'instruction %#08x"
-#: powerpc.cc:8473 powerpc.cc:9299
+#: powerpc.cc:8631 powerpc.cc:9459
#, c-format
msgid "%s: unsupported -mbss-plt code"
msgstr "%s : code -mbss-plt non pris en charge"
-#: powerpc.cc:9646
+#: powerpc.cc:9806
#, c-format
msgid "split-stack stack size overflow at section %u offset %0zx"
msgstr "dépassement de la taille de pile de la pile scindée à l'offset %2$0zx de la section %1$u a échoué"
-#: powerpc.cc:9717
+#: powerpc.cc:9877
msgid "--plt-localentry is especially dangerous without ld.so support to detect ABI violations"
msgstr "--plt-localentry est particulièrement dangereux sans support ld.so pour détecter les violations ABI"
-#: powerpc.cc:9746
+#: powerpc.cc:9906
msgid "--plt-localentry is incompatible with power10 pc-relative code"
msgstr "--plt-localentry n'est pas compatible avec du code power10 relatif au pointeur d'instruction"
-#: powerpc.cc:10024 powerpc.cc:10030
+#: powerpc.cc:10201 powerpc.cc:10207
#, c-format
msgid "%s uses hard float, %s uses soft float"
msgstr "%s utilise des flottants matériels, %s utilise des flottants logiciels"
-#: powerpc.cc:10036 powerpc.cc:10043
+#: powerpc.cc:10213 powerpc.cc:10220
#, c-format
msgid "%s uses double-precision hard float, %s uses single-precision hard float"
msgstr "%s utilise des flotants matériels double précision, %s utilise des flottants matériels simple précision"
-#: powerpc.cc:10063 powerpc.cc:10069
+#: powerpc.cc:10240 powerpc.cc:10246
#, c-format
msgid "%s uses 64-bit long double, %s uses 128-bit long double"
msgstr "%s utilise des long double de 64 bits, %s utilise des long double de 128 bits"
-#: powerpc.cc:10075 powerpc.cc:10081
+#: powerpc.cc:10252 powerpc.cc:10258
#, c-format
msgid "%s uses IBM long double, %s uses IEEE long double"
msgstr "%s utilise des long double IBM, %s utilise des long double IEEE"
-#: powerpc.cc:10135 powerpc.cc:10141
+#: powerpc.cc:10312 powerpc.cc:10318
#, c-format
msgid "%s uses AltiVec vector ABI, %s uses SPE vector ABI"
msgstr "%s utilise des vecteurs ABI AltiVec, %s utilise des vecteurs ABI SPE"
-#: powerpc.cc:10170 powerpc.cc:10177
+#: powerpc.cc:10347 powerpc.cc:10354
#, c-format
msgid "%s uses r3/r4 for small structure returns, %s uses memory"
msgstr "%s utilise r3/r4 pour le retour de petites structures, %s utilise la mémoire"
-#: powerpc.cc:10465 powerpc.cc:10468
-msgid "__tls_get_addr call lacks marker reloc"
-msgstr "appel __tls_get_add sans marqueur de relocalisation"
-
-#: powerpc.cc:10738
+#: powerpc.cc:10929
msgid "call lacks nop, can't restore toc; recompile with -fPIC"
msgstr "nop fait défaut lors de l'appel, impossible de restaurer la toc ; recompiler avec -fPIC"
-#: powerpc.cc:12194 s390.cc:3474
+#: powerpc.cc:12381 s390.cc:3479
msgid "relocation overflow"
msgstr "débordement de relocalisation"
-#: powerpc.cc:12196
+#: powerpc.cc:12383
msgid "try relinking with a smaller --stub-group-size"
msgstr "essayez d'éditer les liens avec un --stub-group-size plus petit"
@@ -3727,42 +3723,42 @@ msgstr "script de l'éditeur de liens"
msgid "linker defined"
msgstr "éditeur de liens défini"
-#: s390.cc:1002
+#: s390.cc:1007
#, c-format
msgid "R_390_PC32DBL target misaligned at %llx"
msgstr "la cible R_390_PC32DBL n'est pas bien alignée à %llx"
-#: s390.cc:1094 tilegx.cc:2088 x86_64.cc:1809
+#: s390.cc:1099 tilegx.cc:2088 x86_64.cc:1809
msgid "out of patch space (PLT); relink with --incremental-full"
msgstr "à court d'espace de retouche (PLT) ; rééditer les liens avec --incremental-full"
-#: s390.cc:3672 s390.cc:3728 x86_64.cc:5349
+#: s390.cc:3677 s390.cc:3733 x86_64.cc:5349
#, c-format
msgid "unsupported reloc type %u"
msgstr "le type de relocalisation %u n'est pas pris en charge"
-#: s390.cc:3801
+#: s390.cc:3806
msgid "unsupported op for GD to IE"
msgstr "op de GD vers IE non prise en charge"
-#: s390.cc:3850
+#: s390.cc:3855
msgid "unsupported op for GD to LE"
msgstr "op de GD vers LE non prise en charge"
-#: s390.cc:3896
+#: s390.cc:3901
msgid "unsupported op for LD to LE"
msgstr "op de LD vers LE non prise en charge"
-#: s390.cc:3984
+#: s390.cc:3989
msgid "unsupported op for IE to LE"
msgstr "op de IE vers LE non prise en charge"
-#: s390.cc:4262
+#: s390.cc:4271
msgid "S/390 code fill of odd length requested"
msgstr "demande d'une taille étrange pour remplissage de code S/390"
#. Should not happen.
-#: s390.cc:4309
+#: s390.cc:4318
msgid "instruction with PC32DBL not wholly within section"
msgstr "instruction avec PC32DBL pas complètement dans la section"
@@ -4097,27 +4093,27 @@ msgstr "versym hors de portée pour le symbole %zu : %u"
msgid "versym for symbol %zu has no name: %u"
msgstr "versym sans nom pour le symbole %zu : %u"
-#: symtab.cc:2639
+#: symtab.cc:2633
#, c-format
msgid "discarding version information for %s@%s, defined in unused shared library %s (linked with --as-needed)"
msgstr "abandonne l'information de version pour %s@%s, définit dans la bibiliothèque partagée %s (liens édités avec --as-needed)"
-#: symtab.cc:3001 symtab.cc:3147
+#: symtab.cc:2995 symtab.cc:3141
#, c-format
msgid "%s: unsupported symbol section 0x%x"
msgstr "%s : la section de symbole 0x%x n'est pas prise en charge"
-#: symtab.cc:3479
+#: symtab.cc:3473
#, c-format
msgid "%s: symbol table entries: %zu; buckets: %zu\n"
msgstr "%s : entrées de la table de symboles : %zu ; groupes de blocs : %zu\n"
-#: symtab.cc:3482
+#: symtab.cc:3476
#, c-format
msgid "%s: symbol table entries: %zu\n"
msgstr "%s : entrées de la table de symbole : %zu\n"
-#: symtab.cc:3639
+#: symtab.cc:3633
#, c-format
msgid "while linking %s: symbol '%s' defined in multiple places (possible ODR violation):"
msgstr "lors de l'édition de liens de %s : le symbole « %s » est défini à plusieurs endroits (violation ODR possible) :"
@@ -4126,7 +4122,7 @@ msgstr "lors de l'édition de liens de %s : le symbole « %s » est défini Ã
#. which may not be the location we expect to intersect
#. with another definition. We could print the whole
#. set of locations, but that seems too verbose.
-#: symtab.cc:3646 symtab.cc:3649
+#: symtab.cc:3640 symtab.cc:3643
#, c-format
msgid " %s from %s\n"
msgstr " %s depuis %s\n"
@@ -4202,8 +4198,8 @@ msgstr "relocalisation TLS pour une instruction invalide"
#. This output is intended to follow the GNU standards.
#: version.cc:65
#, c-format
-msgid "Copyright (C) 2021 Free Software Foundation, Inc.\n"
-msgstr "Copyright (C) 2021 Free Software Foundation, Inc.\n"
+msgid "Copyright (C) 2022 Free Software Foundation, Inc.\n"
+msgstr "Copyright (C) 2022 Free Software Foundation, Inc.\n"
#: version.cc:66
#, c-format
diff --git a/gold/po/gold.pot b/gold/po/gold.pot
index 29ed14a678f..f6bec311e0e 100644
--- a/gold/po/gold.pot
+++ b/gold/po/gold.pot
@@ -7,8 +7,8 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: bug-binutils@gnu.org\n"
-"POT-Creation-Date: 2021-08-11 10:50+0100\n"
+"Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n"
+"POT-Creation-Date: 2022-01-22 12:23+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -59,7 +59,7 @@ msgstr ""
msgid "symbol table name section has wrong type: %u"
msgstr ""
-#: aarch64.cc:3831 arm.cc:10905 mips.cc:9608 powerpc.cc:2946 target.cc:94
+#: aarch64.cc:3831 arm.cc:10905 mips.cc:9608 powerpc.cc:2911 target.cc:94
#, c-format
msgid "%s: unsupported ELF file type %d"
msgstr ""
@@ -81,14 +81,14 @@ msgid ""
"current value is 0x%lx."
msgstr ""
-#: aarch64.cc:6015 arm.cc:8477 i386.cc:1772 mips.cc:12461 powerpc.cc:7647
-#: s390.cc:2180 s390.cc:2628 sparc.cc:2134 tilegx.cc:3137 tilegx.cc:3589
+#: aarch64.cc:6015 arm.cc:8477 i386.cc:1772 mips.cc:12461 powerpc.cc:7810
+#: s390.cc:2185 s390.cc:2633 sparc.cc:2134 tilegx.cc:3137 tilegx.cc:3589
#: x86_64.cc:3471 x86_64.cc:3924
#, c-format
msgid "%s: unsupported reloc %u against local symbol"
msgstr ""
-#: aarch64.cc:6056 powerpc.cc:7752 s390.cc:2254 sparc.cc:2230
+#: aarch64.cc:6056 powerpc.cc:7915 s390.cc:2259 sparc.cc:2230
msgid "requires unsupported dynamic reloc; recompile with -fPIC"
msgstr ""
@@ -107,8 +107,8 @@ msgstr ""
msgid "%s: unsupported TLSLE reloc %u in shared code."
msgstr ""
-#: aarch64.cc:6372 arm.cc:8885 i386.cc:2127 mips.cc:12474 powerpc.cc:8592
-#: s390.cc:3059 s390.cc:3076 sparc.cc:2572 tilegx.cc:3605 tilegx.cc:4144
+#: aarch64.cc:6372 arm.cc:8885 i386.cc:2127 mips.cc:12474 powerpc.cc:8750
+#: s390.cc:3064 s390.cc:3081 sparc.cc:2572 tilegx.cc:3605 tilegx.cc:4144
#: x86_64.cc:3940 x86_64.cc:4446
#, c-format
msgid "%s: unsupported reloc %u against global symbol %s"
@@ -124,7 +124,7 @@ msgstr ""
msgid "%s: unsupported reloc type in global scan"
msgstr ""
-#: aarch64.cc:6907 powerpc.cc:9726 s390.cc:4009 sparc.cc:3164 tilegx.cc:4211
+#: aarch64.cc:6907 powerpc.cc:9886 s390.cc:4014 sparc.cc:3164 tilegx.cc:4211
#: x86_64.cc:4511
#, c-format
msgid "%s: unsupported REL reloc section"
@@ -135,8 +135,8 @@ msgstr ""
msgid "cannot relocate %s in object file"
msgstr ""
-#: aarch64.cc:7343 i386.cc:2987 i386.cc:3753 mips.cc:10076 powerpc.cc:12049
-#: s390.cc:3460 sparc.cc:3695 tilegx.cc:4726 x86_64.cc:5008
+#: aarch64.cc:7343 i386.cc:2987 i386.cc:3753 mips.cc:10076 powerpc.cc:12236
+#: s390.cc:3465 sparc.cc:3695 tilegx.cc:4726 x86_64.cc:5008
#, c-format
msgid "unexpected reloc %u in object file"
msgstr ""
@@ -212,87 +212,87 @@ msgstr ""
msgid "Erratum 835769 found and fixed at \"%s\", section %d, offset 0x%08x."
msgstr ""
-#: archive.cc:134
+#: archive.cc:127
#, c-format
msgid "script or expression reference to %s"
msgstr ""
-#: archive.cc:239
+#: archive.cc:232
#, c-format
msgid "%s: no archive symbol table (run ranlib)"
msgstr ""
-#: archive.cc:331
+#: archive.cc:324
#, c-format
msgid "%s: bad archive symbol table names"
msgstr ""
-#: archive.cc:363
+#: archive.cc:356
#, c-format
msgid "%s: malformed archive header at %zu"
msgstr ""
-#: archive.cc:383
+#: archive.cc:376
#, c-format
msgid "%s: malformed archive header size at %zu"
msgstr ""
-#: archive.cc:394
+#: archive.cc:387
#, c-format
msgid "%s: malformed archive header name at %zu"
msgstr ""
-#: archive.cc:430
+#: archive.cc:423
#, c-format
msgid "%s: bad extended name index at %zu"
msgstr ""
-#: archive.cc:440
+#: archive.cc:433
#, c-format
msgid "%s: bad extended name entry at header %zu"
msgstr ""
-#: archive.cc:537
+#: archive.cc:530
#, c-format
msgid "%s: short archive header at %zu"
msgstr ""
-#: archive.cc:727
+#: archive.cc:720
#, c-format
msgid "%s: plugin failed to claim member %s at %zu"
msgstr ""
-#: archive.cc:731
+#: archive.cc:724
#, c-format
msgid "%s: member %s at %zu is not an ELF object"
msgstr ""
-#: archive.cc:1093
+#: archive.cc:1086
#, c-format
msgid "%s: archive libraries: %u\n"
msgstr ""
-#: archive.cc:1095
+#: archive.cc:1088
#, c-format
msgid "%s: total archive members: %u\n"
msgstr ""
-#: archive.cc:1097
+#: archive.cc:1090
#, c-format
msgid "%s: loaded archive members: %u\n"
msgstr ""
-#: archive.cc:1327
+#: archive.cc:1320
#, c-format
msgid "%s: lib groups: %u\n"
msgstr ""
-#: archive.cc:1329
+#: archive.cc:1322
#, c-format
msgid "%s: total lib groups members: %u\n"
msgstr ""
-#: archive.cc:1331
+#: archive.cc:1324
#, c-format
msgid "%s: loaded lib groups members: %u\n"
msgstr ""
@@ -389,27 +389,27 @@ msgstr ""
msgid "requires unsupported dynamic reloc %s; recompile with -fPIC"
msgstr ""
-#: arm.cc:8547 i386.cc:1786 s390.cc:2271 sparc.cc:2247 tilegx.cc:3223
+#: arm.cc:8547 i386.cc:1786 s390.cc:2276 sparc.cc:2247 tilegx.cc:3223
#: x86_64.cc:3581
#, c-format
msgid "%s: unsupported TLS reloc %u for IFUNC symbol"
msgstr ""
-#: arm.cc:8643 i386.cc:1862 powerpc.cc:8074 s390.cc:2364 x86_64.cc:3679
+#: arm.cc:8643 i386.cc:1862 powerpc.cc:8219 s390.cc:2369 x86_64.cc:3679
#, c-format
msgid "section symbol %u has bad shndx %u"
msgstr ""
#. These are relocations which should only be seen by the
#. dynamic linker, and should never be seen here.
-#: arm.cc:8752 arm.cc:9233 i386.cc:1950 i386.cc:2436 mips.cc:11258 s390.cc:2463
-#: s390.cc:2897 sparc.cc:2553 sparc.cc:3033 tilegx.cc:3584 tilegx.cc:4139
+#: arm.cc:8752 arm.cc:9233 i386.cc:1950 i386.cc:2436 mips.cc:11258 s390.cc:2468
+#: s390.cc:2902 sparc.cc:2553 sparc.cc:3033 tilegx.cc:3584 tilegx.cc:4139
#: x86_64.cc:3796 x86_64.cc:4319
#, c-format
msgid "%s: unexpected reloc %u in object file"
msgstr ""
-#: arm.cc:8784 i386.cc:1984 mips.cc:10707 s390.cc:2507 sparc.cc:2452
+#: arm.cc:8784 i386.cc:1984 mips.cc:10707 s390.cc:2512 sparc.cc:2452
#: tilegx.cc:3488 x86_64.cc:3828
#, c-format
msgid "local symbol %u has bad shndx %u"
@@ -427,8 +427,8 @@ msgid ""
msgstr ""
#: arm.cc:10247 i386.cc:3019 i386.cc:3101 i386.cc:3166 i386.cc:3202
-#: i386.cc:3274 mips.cc:12296 powerpc.cc:12163 s390.cc:3466 s390.cc:3537
-#: s390.cc:3574 s390.cc:3596 s390.cc:3621 sparc.cc:3701 sparc.cc:3892
+#: i386.cc:3274 mips.cc:12296 powerpc.cc:12350 s390.cc:3471 s390.cc:3542
+#: s390.cc:3579 s390.cc:3601 s390.cc:3626 sparc.cc:3701 sparc.cc:3892
#: sparc.cc:3953 sparc.cc:4060 tilegx.cc:4732 x86_64.cc:5029 x86_64.cc:5155
#: x86_64.cc:5227 x86_64.cc:5261
#, c-format
@@ -551,7 +551,7 @@ msgstr ""
msgid "cannot open %s: %s:"
msgstr ""
-#: common.cc:351 output.cc:2517 output.cc:2616
+#: common.cc:351 output.cc:2469 output.cc:2568
#, c-format
msgid "out of patch space in section %s; relink with --incremental-full"
msgstr ""
@@ -1120,7 +1120,7 @@ msgstr ""
msgid "unsupported reloc %u in object file"
msgstr ""
-#: i386.cc:4036 powerpc.cc:9680 s390.cc:4877 x86_64.cc:6113
+#: i386.cc:4036 powerpc.cc:9840 s390.cc:4886 x86_64.cc:6113
#, c-format
msgid "failed to match split-stack sequence at section %u offset %0zx"
msgstr ""
@@ -1203,11 +1203,11 @@ msgstr ""
msgid "unsupported file: 64-bit, little-endian"
msgstr ""
-#: incremental.cc:2083
+#: incremental.cc:2089
msgid "COMDAT group has no signature"
msgstr ""
-#: incremental.cc:2089
+#: incremental.cc:2095
#, c-format
msgid "COMDAT group %s included twice in incremental link"
msgstr ""
@@ -1279,77 +1279,77 @@ msgstr ""
msgid "unable to open --section-ordering-file file %s: %s"
msgstr ""
-#: layout.cc:3372
+#: layout.cc:3373
msgid ""
"one or more inputs require executable stack, but -z noexecstack was given"
msgstr ""
-#: layout.cc:3445
+#: layout.cc:3446
#, c-format
msgid "--build-id=uuid failed: could not open /dev/urandom: %s"
msgstr ""
-#: layout.cc:3452
+#: layout.cc:3453
#, c-format
msgid "/dev/urandom: read failed: %s"
msgstr ""
-#: layout.cc:3454
+#: layout.cc:3455
#, c-format
msgid "/dev/urandom: expected %zu bytes, got %zd bytes"
msgstr ""
-#: layout.cc:3466
+#: layout.cc:3467
msgid "--build-id=uuid failed: could not load rpcrt4.dll"
msgstr ""
-#: layout.cc:3472
+#: layout.cc:3473
msgid "--build-id=uuid failed: could not find UuidCreate"
msgstr ""
-#: layout.cc:3474
+#: layout.cc:3475
msgid "__build_id=uuid failed: call UuidCreate() failed"
msgstr ""
-#: layout.cc:3496
+#: layout.cc:3497
#, c-format
msgid "--build-id argument '%s' not a valid hex number"
msgstr ""
-#: layout.cc:3502
+#: layout.cc:3503
#, c-format
msgid "unrecognized --build-id argument '%s'"
msgstr ""
-#: layout.cc:4080
+#: layout.cc:4081
#, c-format
msgid "load segment overlap [0x%llx -> 0x%llx] and [0x%llx -> 0x%llx]"
msgstr ""
-#: layout.cc:4241 output.cc:4597
+#: layout.cc:4242 output.cc:4549
#, c-format
msgid "out of patch space for section %s; relink with --incremental-full"
msgstr ""
-#: layout.cc:4250 output.cc:4605
+#: layout.cc:4251 output.cc:4557
#, c-format
msgid "%s: section changed size; relink with --incremental-full"
msgstr ""
-#: layout.cc:4505
+#: layout.cc:4506
msgid "out of patch space for symbol table; relink with --incremental-full"
msgstr ""
-#: layout.cc:4576
+#: layout.cc:4577
msgid ""
"out of patch space for section header table; relink with --incremental-full"
msgstr ""
-#: layout.cc:5322
+#: layout.cc:5323
msgid "read-only segment has dynamic relocations"
msgstr ""
-#: layout.cc:5325
+#: layout.cc:5326
msgid "shared library text segment is not shareable"
msgstr ""
@@ -1625,7 +1625,7 @@ msgstr ""
msgid "unaligned PC-relative relocation"
msgstr ""
-#: nacl.cc:43 object.cc:174 object.cc:3451 output.cc:5239
+#: nacl.cc:43 object.cc:174 object.cc:3451 output.cc:5191
#, c-format
msgid "%s: %s"
msgstr ""
@@ -3313,92 +3313,92 @@ msgstr ""
msgid "section group retained but group element discarded"
msgstr ""
-#: output.cc:1781 output.cc:1813
+#: output.cc:1733 output.cc:1765
msgid "out of patch space (GOT); relink with --incremental-full"
msgstr ""
-#: output.cc:2462
+#: output.cc:2414
#, c-format
msgid "invalid alignment %lu for section \"%s\""
msgstr ""
-#: output.cc:4625
+#: output.cc:4577
msgid ""
"script places BSS section in the middle of a LOAD segment; space will be "
"allocated in the file"
msgstr ""
-#: output.cc:4647
+#: output.cc:4599
#, c-format
msgid "dot moves backward in linker script from 0x%llx to 0x%llx"
msgstr ""
-#: output.cc:4650
+#: output.cc:4602
#, c-format
msgid "address of section '%s' moves backward from 0x%llx to 0x%llx"
msgstr ""
-#: output.cc:5019
+#: output.cc:4971
#, c-format
msgid "%s: incremental base and output file name are the same"
msgstr ""
-#: output.cc:5026
+#: output.cc:4978
#, c-format
msgid "%s: stat: %s"
msgstr ""
-#: output.cc:5031
+#: output.cc:4983
#, c-format
msgid "%s: incremental base file is empty"
msgstr ""
-#: output.cc:5043 output.cc:5141
+#: output.cc:4995 output.cc:5093
#, c-format
msgid "%s: open: %s"
msgstr ""
-#: output.cc:5060
+#: output.cc:5012
#, c-format
msgid "%s: read failed: %s"
msgstr ""
-#: output.cc:5065
+#: output.cc:5017
#, c-format
msgid "%s: file too short: read only %lld of %lld bytes"
msgstr ""
-#: output.cc:5165
+#: output.cc:5117
#, c-format
msgid "%s: mremap: %s"
msgstr ""
-#: output.cc:5184
+#: output.cc:5136
#, c-format
msgid "%s: mmap: %s"
msgstr ""
-#: output.cc:5276
+#: output.cc:5228
#, c-format
msgid "%s: mmap: failed to allocate %lu bytes for output file: %s"
msgstr ""
-#: output.cc:5294
+#: output.cc:5246
#, c-format
msgid "%s: munmap: %s"
msgstr ""
-#: output.cc:5314
+#: output.cc:5266
#, c-format
msgid "%s: write: unexpected 0 return-value"
msgstr ""
-#: output.cc:5316
+#: output.cc:5268
#, c-format
msgid "%s: write: %s"
msgstr ""
-#: output.cc:5331
+#: output.cc:5283
#, c-format
msgid "%s: close: %s"
msgstr ""
@@ -3435,15 +3435,15 @@ msgstr ""
msgid "** group"
msgstr ""
-#: output.h:2597
+#: output.h:2581
msgid "** GOT"
msgstr ""
-#: output.h:2804
+#: output.h:2776
msgid "** dynamic"
msgstr ""
-#: output.h:2948
+#: output.h:2920
msgid "** symtab xindex"
msgstr ""
@@ -3503,147 +3503,143 @@ msgstr ""
msgid "input files added by plug-ins in --incremental mode not supported yet"
msgstr ""
-#: powerpc.cc:1299
+#: powerpc.cc:1302
msgid "missing expected __tls_get_addr call"
msgstr ""
-#: powerpc.cc:2298 powerpc.cc:2635
+#: powerpc.cc:2292 powerpc.cc:2627
#, c-format
msgid "%s: ABI version %d is not compatible with ABI version %d output"
msgstr ""
-#: powerpc.cc:2332 powerpc.cc:2694
+#: powerpc.cc:2326 powerpc.cc:2686
#, c-format
msgid "%s: .opd invalid in abiv%d"
msgstr ""
-#: powerpc.cc:2410
+#: powerpc.cc:2404
#, c-format
msgid "%s: unexpected reloc type %u in .opd section"
msgstr ""
-#: powerpc.cc:2421
+#: powerpc.cc:2415
#, c-format
msgid "%s: .opd is not a regular array of opd entries"
msgstr ""
-#: powerpc.cc:2563
+#: powerpc.cc:2555
#, c-format
msgid "%s: local symbol %d has invalid st_other for ABI version 1"
msgstr ""
-#: powerpc.cc:3303
+#: powerpc.cc:3290
#, c-format
msgid "%s:%s exceeds group size"
msgstr ""
-#: powerpc.cc:3651
+#: powerpc.cc:3641
#, c-format
msgid "%s:%s: branch in non-executable section, no long branch stub for you"
msgstr ""
-#: powerpc.cc:3769
+#: powerpc.cc:3758
#, c-format
msgid "%s: stub group size is too large; retrying with %#x"
msgstr ""
-#: powerpc.cc:5611
+#: powerpc.cc:5729
msgid "** glink"
msgstr ""
-#: powerpc.cc:6258 powerpc.cc:6961
+#: powerpc.cc:6394 powerpc.cc:7109
#, c-format
msgid "linkage table error against `%s'"
msgstr ""
-#: powerpc.cc:6261
+#: powerpc.cc:6397
#, c-format
msgid "linkage table error against `%s:[local %u]'"
msgstr ""
-#: powerpc.cc:7090
+#: powerpc.cc:7236
msgid "** save/restore"
msgstr ""
-#: powerpc.cc:7844
+#: powerpc.cc:8008
#, c-format
msgid "%s: unsupported reloc %u for IFUNC symbol"
msgstr ""
-#: powerpc.cc:8128 powerpc.cc:8914
+#: powerpc.cc:8274 powerpc.cc:9060
#, c-format
msgid "tocsave symbol %u has bad shndx %u"
msgstr ""
-#: powerpc.cc:8407 powerpc.cc:9237
+#: powerpc.cc:8565 powerpc.cc:9397
#, c-format
msgid "%s: toc optimization is not supported for %#08x instruction"
msgstr ""
-#: powerpc.cc:8473 powerpc.cc:9299
+#: powerpc.cc:8631 powerpc.cc:9459
#, c-format
msgid "%s: unsupported -mbss-plt code"
msgstr ""
-#: powerpc.cc:9646
+#: powerpc.cc:9806
#, c-format
msgid "split-stack stack size overflow at section %u offset %0zx"
msgstr ""
-#: powerpc.cc:9717
+#: powerpc.cc:9877
msgid ""
"--plt-localentry is especially dangerous without ld.so support to detect ABI "
"violations"
msgstr ""
-#: powerpc.cc:9746
+#: powerpc.cc:9906
msgid "--plt-localentry is incompatible with power10 pc-relative code"
msgstr ""
-#: powerpc.cc:10024 powerpc.cc:10030
+#: powerpc.cc:10201 powerpc.cc:10207
#, c-format
msgid "%s uses hard float, %s uses soft float"
msgstr ""
-#: powerpc.cc:10036 powerpc.cc:10043
+#: powerpc.cc:10213 powerpc.cc:10220
#, c-format
msgid ""
"%s uses double-precision hard float, %s uses single-precision hard float"
msgstr ""
-#: powerpc.cc:10063 powerpc.cc:10069
+#: powerpc.cc:10240 powerpc.cc:10246
#, c-format
msgid "%s uses 64-bit long double, %s uses 128-bit long double"
msgstr ""
-#: powerpc.cc:10075 powerpc.cc:10081
+#: powerpc.cc:10252 powerpc.cc:10258
#, c-format
msgid "%s uses IBM long double, %s uses IEEE long double"
msgstr ""
-#: powerpc.cc:10135 powerpc.cc:10141
+#: powerpc.cc:10312 powerpc.cc:10318
#, c-format
msgid "%s uses AltiVec vector ABI, %s uses SPE vector ABI"
msgstr ""
-#: powerpc.cc:10170 powerpc.cc:10177
+#: powerpc.cc:10347 powerpc.cc:10354
#, c-format
msgid "%s uses r3/r4 for small structure returns, %s uses memory"
msgstr ""
-#: powerpc.cc:10465 powerpc.cc:10468
-msgid "__tls_get_addr call lacks marker reloc"
-msgstr ""
-
-#: powerpc.cc:10738
+#: powerpc.cc:10929
msgid "call lacks nop, can't restore toc; recompile with -fPIC"
msgstr ""
-#: powerpc.cc:12194 s390.cc:3474
+#: powerpc.cc:12381 s390.cc:3479
msgid "relocation overflow"
msgstr ""
-#: powerpc.cc:12196
+#: powerpc.cc:12383
msgid "try relinking with a smaller --stub-group-size"
msgstr ""
@@ -3781,42 +3777,42 @@ msgstr ""
msgid "linker defined"
msgstr ""
-#: s390.cc:1002
+#: s390.cc:1007
#, c-format
msgid "R_390_PC32DBL target misaligned at %llx"
msgstr ""
-#: s390.cc:1094 tilegx.cc:2088 x86_64.cc:1809
+#: s390.cc:1099 tilegx.cc:2088 x86_64.cc:1809
msgid "out of patch space (PLT); relink with --incremental-full"
msgstr ""
-#: s390.cc:3672 s390.cc:3728 x86_64.cc:5349
+#: s390.cc:3677 s390.cc:3733 x86_64.cc:5349
#, c-format
msgid "unsupported reloc type %u"
msgstr ""
-#: s390.cc:3801
+#: s390.cc:3806
msgid "unsupported op for GD to IE"
msgstr ""
-#: s390.cc:3850
+#: s390.cc:3855
msgid "unsupported op for GD to LE"
msgstr ""
-#: s390.cc:3896
+#: s390.cc:3901
msgid "unsupported op for LD to LE"
msgstr ""
-#: s390.cc:3984
+#: s390.cc:3989
msgid "unsupported op for IE to LE"
msgstr ""
-#: s390.cc:4262
+#: s390.cc:4271
msgid "S/390 code fill of odd length requested"
msgstr ""
#. Should not happen.
-#: s390.cc:4309
+#: s390.cc:4318
msgid "instruction with PC32DBL not wholly within section"
msgstr ""
@@ -4164,29 +4160,29 @@ msgstr ""
msgid "versym for symbol %zu has no name: %u"
msgstr ""
-#: symtab.cc:2639
+#: symtab.cc:2633
#, c-format
msgid ""
"discarding version information for %s@%s, defined in unused shared library "
"%s (linked with --as-needed)"
msgstr ""
-#: symtab.cc:3001 symtab.cc:3147
+#: symtab.cc:2995 symtab.cc:3141
#, c-format
msgid "%s: unsupported symbol section 0x%x"
msgstr ""
-#: symtab.cc:3479
+#: symtab.cc:3473
#, c-format
msgid "%s: symbol table entries: %zu; buckets: %zu\n"
msgstr ""
-#: symtab.cc:3482
+#: symtab.cc:3476
#, c-format
msgid "%s: symbol table entries: %zu\n"
msgstr ""
-#: symtab.cc:3639
+#: symtab.cc:3633
#, c-format
msgid ""
"while linking %s: symbol '%s' defined in multiple places (possible ODR "
@@ -4197,7 +4193,7 @@ msgstr ""
#. which may not be the location we expect to intersect
#. with another definition. We could print the whole
#. set of locations, but that seems too verbose.
-#: symtab.cc:3646 symtab.cc:3649
+#: symtab.cc:3640 symtab.cc:3643
#, c-format
msgid " %s from %s\n"
msgstr ""
@@ -4277,7 +4273,7 @@ msgstr ""
#. This output is intended to follow the GNU standards.
#: version.cc:65
#, c-format
-msgid "Copyright (C) 2021 Free Software Foundation, Inc.\n"
+msgid "Copyright (C) 2022 Free Software Foundation, Inc.\n"
msgstr ""
#: version.cc:66
diff --git a/gold/po/sr.po b/gold/po/sr.po
index b6b1e10daaf..edb4e03e126 100644
--- a/gold/po/sr.po
+++ b/gold/po/sr.po
@@ -1,13 +1,13 @@
# Serbian translation of gold.
# Copyright © 2020 Free Software Foundation, Inc.
# This file is distributed under the same license as the binutils package.
-# МироÑлав Ðиколић <miroslavnikolic@rocketmail.com>, 2020–2021.
+# МироÑлав Ðиколић <miroslavnikolic@rocketmail.com>, 2020–2022.
msgid ""
msgstr ""
-"Project-Id-Version: gold-2.36.90\n"
-"Report-Msgid-Bugs-To: bug-binutils@gnu.org\n"
-"POT-Creation-Date: 2021-07-03 15:02+0100\n"
-"PO-Revision-Date: 2021-07-24 07:50+0200\n"
+"Project-Id-Version: gold-2.37.90\n"
+"Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n"
+"POT-Creation-Date: 2022-01-22 12:25+0000\n"
+"PO-Revision-Date: 2022-02-15 20:05+0200\n"
"Last-Translator: МироÑлав Ðиколић <miroslavnikolic@rocketmail.com>\n"
"Language-Team: Serbian <(nothing)>\n"
"Language: sr\n"
@@ -59,7 +59,7 @@ msgstr "неиÑправан Ð¸Ð½Ð´ÐµÐºÑ Ð½Ð°Ð·Ð¸Ð²Ð° табеле Ñимбол
msgid "symbol table name section has wrong type: %u"
msgstr "одељак назива табеле Ñимбола има погрешну врÑту: %u"
-#: aarch64.cc:3831 arm.cc:10905 mips.cc:9608 powerpc.cc:2946 target.cc:94
+#: aarch64.cc:3831 arm.cc:10905 mips.cc:9608 powerpc.cc:2911 target.cc:94
#, c-format
msgid "%s: unsupported ELF file type %d"
msgstr "%s: неподржана „ELF“ врÑта датотеке %d"
@@ -79,14 +79,14 @@ msgstr "** „PLT“"
msgid "Stub is too far away, try a smaller value for '--stub-group-size'. The current value is 0x%lx."
msgstr "Окрајак је предалеко, пробајте мању вредноÑÑ‚ за „--stub-group-size“. Тренутна вредноÑÑ‚ је 0×%lx."
-#: aarch64.cc:6015 arm.cc:8477 i386.cc:1772 mips.cc:12461 powerpc.cc:7647
-#: s390.cc:2180 s390.cc:2628 sparc.cc:2134 tilegx.cc:3137 tilegx.cc:3589
+#: aarch64.cc:6015 arm.cc:8477 i386.cc:1772 mips.cc:12461 powerpc.cc:7810
+#: s390.cc:2185 s390.cc:2633 sparc.cc:2134 tilegx.cc:3137 tilegx.cc:3589
#: x86_64.cc:3471 x86_64.cc:3924
#, c-format
msgid "%s: unsupported reloc %u against local symbol"
msgstr "%s: неподржан премештај „%u“ наÑпрам локалног Ñимбола"
-#: aarch64.cc:6056 powerpc.cc:7752 s390.cc:2254 sparc.cc:2230
+#: aarch64.cc:6056 powerpc.cc:7915 s390.cc:2259 sparc.cc:2230
msgid "requires unsupported dynamic reloc; recompile with -fPIC"
msgstr "захтева неподржани динамички премештај; поново преведите Ñа „-fPIC“"
@@ -105,8 +105,8 @@ msgstr "%s: неподржан премештај „%u“ у поÑÑ‚ незаÐ
msgid "%s: unsupported TLSLE reloc %u in shared code."
msgstr "%s: неподржан „TLSLE“ премештај „%u“ у дељеном коду."
-#: aarch64.cc:6372 arm.cc:8885 i386.cc:2127 mips.cc:12474 powerpc.cc:8592
-#: s390.cc:3059 s390.cc:3076 sparc.cc:2572 tilegx.cc:3605 tilegx.cc:4144
+#: aarch64.cc:6372 arm.cc:8885 i386.cc:2127 mips.cc:12474 powerpc.cc:8750
+#: s390.cc:3064 s390.cc:3081 sparc.cc:2572 tilegx.cc:3605 tilegx.cc:4144
#: x86_64.cc:3940 x86_64.cc:4446
#, c-format
msgid "%s: unsupported reloc %u against global symbol %s"
@@ -122,7 +122,7 @@ msgstr "%s: неподржана „TLSLE“ врÑта премештаја „
msgid "%s: unsupported reloc type in global scan"
msgstr "%s: неподржана врÑта премештаја у општем Ñкенирању"
-#: aarch64.cc:6907 powerpc.cc:9726 s390.cc:4009 sparc.cc:3164 tilegx.cc:4211
+#: aarch64.cc:6907 powerpc.cc:9886 s390.cc:4014 sparc.cc:3164 tilegx.cc:4211
#: x86_64.cc:4511
#, c-format
msgid "%s: unsupported REL reloc section"
@@ -133,8 +133,8 @@ msgstr "%s: неподжан „REL“ одељак премештаја"
msgid "cannot relocate %s in object file"
msgstr "не могу да премеÑтим „%s“ у објектној датотеци"
-#: aarch64.cc:7343 i386.cc:2987 i386.cc:3753 mips.cc:10076 powerpc.cc:12049
-#: s390.cc:3460 sparc.cc:3695 tilegx.cc:4726 x86_64.cc:5008
+#: aarch64.cc:7343 i386.cc:2987 i386.cc:3753 mips.cc:10076 powerpc.cc:12236
+#: s390.cc:3465 sparc.cc:3695 tilegx.cc:4726 x86_64.cc:5008
#, c-format
msgid "unexpected reloc %u in object file"
msgstr "неочекиван премештај „%u“ у објектној датотеци"
@@ -207,87 +207,87 @@ msgstr "Ðе подржавам „tlsdesc gd_to_le“ оптимизација
msgid "Erratum 835769 found and fixed at \"%s\", section %d, offset 0x%08x."
msgstr "Ðађох грешку 835769 и поправих је на „%s“, одељак %d, померај 0x%08x."
-#: archive.cc:134
+#: archive.cc:127
#, c-format
msgid "script or expression reference to %s"
msgstr "Ñкрипта или израз упућује на „%s“"
-#: archive.cc:239
+#: archive.cc:232
#, c-format
msgid "%s: no archive symbol table (run ranlib)"
msgstr "%s: нема табеле Ñимбола архиве (покрените „ranlib“)"
-#: archive.cc:331
+#: archive.cc:324
#, c-format
msgid "%s: bad archive symbol table names"
msgstr "%s: лоши називи табеле Ñимбола архиве"
-#: archive.cc:363
+#: archive.cc:356
#, c-format
msgid "%s: malformed archive header at %zu"
msgstr "%s: лоше заглавље архиве на %zu"
-#: archive.cc:383
+#: archive.cc:376
#, c-format
msgid "%s: malformed archive header size at %zu"
msgstr "%s: лоша величина заглавља архиве на %zu"
-#: archive.cc:394
+#: archive.cc:387
#, c-format
msgid "%s: malformed archive header name at %zu"
msgstr "%s: лош назив заглавља архиве на %zu"
-#: archive.cc:430
+#: archive.cc:423
#, c-format
msgid "%s: bad extended name index at %zu"
msgstr "%s: лош Ð¸Ð½Ð´ÐµÐºÑ Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÐ½Ð¾Ð³ назива на %zu"
-#: archive.cc:440
+#: archive.cc:433
#, c-format
msgid "%s: bad extended name entry at header %zu"
msgstr "%s: лош ÑƒÐ½Ð¾Ñ Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÐ½Ð¾Ð³ назива код заглавља %zu"
-#: archive.cc:537
+#: archive.cc:530
#, c-format
msgid "%s: short archive header at %zu"
msgstr "%s: кратко заглавље архиве на %zu"
-#: archive.cc:727
+#: archive.cc:720
#, c-format
msgid "%s: plugin failed to claim member %s at %zu"
msgstr "%s: прикључак није уÑпео да потражује члана „%s“ на %zu"
-#: archive.cc:731
+#: archive.cc:724
#, c-format
msgid "%s: member %s at %zu is not an ELF object"
msgstr "%s: члан „%s“ на %zu није „ELF“ објекат"
-#: archive.cc:1093
+#: archive.cc:1086
#, c-format
msgid "%s: archive libraries: %u\n"
msgstr "%s: библиотеке архиве: %u\n"
-#: archive.cc:1095
+#: archive.cc:1088
#, c-format
msgid "%s: total archive members: %u\n"
msgstr "%s: укупно чланова архиве: %u\n"
-#: archive.cc:1097
+#: archive.cc:1090
#, c-format
msgid "%s: loaded archive members: %u\n"
msgstr "%s: учитаних чланова архиве: %u\n"
-#: archive.cc:1327
+#: archive.cc:1320
#, c-format
msgid "%s: lib groups: %u\n"
msgstr "%s: групе библиотеке: %u\n"
-#: archive.cc:1329
+#: archive.cc:1322
#, c-format
msgid "%s: total lib groups members: %u\n"
msgstr "%s: укупно чланова група библиотеке: %u\n"
-#: archive.cc:1331
+#: archive.cc:1324
#, c-format
msgid "%s: loaded lib groups members: %u\n"
msgstr "%s: учитаних чланова група библиотеке: %u\n"
@@ -382,13 +382,13 @@ msgstr "„PLT“ померај је превелик, покушајте да
msgid "requires unsupported dynamic reloc %s; recompile with -fPIC"
msgstr "захтева неподржан динамички премештај „%s“; поново преведите Ñа „-fPIC“"
-#: arm.cc:8547 i386.cc:1786 s390.cc:2271 sparc.cc:2247 tilegx.cc:3223
+#: arm.cc:8547 i386.cc:1786 s390.cc:2276 sparc.cc:2247 tilegx.cc:3223
#: x86_64.cc:3581
#, c-format
msgid "%s: unsupported TLS reloc %u for IFUNC symbol"
msgstr "%s: неподржан „TLS“ премештај „%u“ за „IFUNC“ Ñимбол"
-#: arm.cc:8643 i386.cc:1862 powerpc.cc:8074 s390.cc:2364 x86_64.cc:3679
+#: arm.cc:8643 i386.cc:1862 powerpc.cc:8219 s390.cc:2369 x86_64.cc:3679
#, c-format
msgid "section symbol %u has bad shndx %u"
msgstr "Ñимбол одељка „%u“ има лош „shndx %u“"
@@ -396,13 +396,13 @@ msgstr "Ñимбол одељка „%u“ има лош „shndx %u“"
#. These are relocations which should only be seen by the
#. dynamic linker, and should never be seen here.
#: arm.cc:8752 arm.cc:9233 i386.cc:1950 i386.cc:2436 mips.cc:11258
-#: s390.cc:2463 s390.cc:2897 sparc.cc:2553 sparc.cc:3033 tilegx.cc:3584
+#: s390.cc:2468 s390.cc:2902 sparc.cc:2553 sparc.cc:3033 tilegx.cc:3584
#: tilegx.cc:4139 x86_64.cc:3796 x86_64.cc:4319
#, c-format
msgid "%s: unexpected reloc %u in object file"
msgstr "%s: неочекивани премештај „%u“ у објектној датотеци"
-#: arm.cc:8784 i386.cc:1984 mips.cc:10707 s390.cc:2507 sparc.cc:2452
+#: arm.cc:8784 i386.cc:1984 mips.cc:10707 s390.cc:2512 sparc.cc:2452
#: tilegx.cc:3488 x86_64.cc:3828
#, c-format
msgid "local symbol %u has bad shndx %u"
@@ -418,8 +418,8 @@ msgid "unable to provide V4BX reloc interworking fix up; the target profile does
msgstr "не могу да обезбедим међурадну поправку „V4BX“ премештаја; циљни профил не подржава „BX“ инÑтрукцију"
#: arm.cc:10247 i386.cc:3019 i386.cc:3101 i386.cc:3166 i386.cc:3202
-#: i386.cc:3274 mips.cc:12296 powerpc.cc:12163 s390.cc:3466 s390.cc:3537
-#: s390.cc:3574 s390.cc:3596 s390.cc:3621 sparc.cc:3701 sparc.cc:3892
+#: i386.cc:3274 mips.cc:12296 powerpc.cc:12350 s390.cc:3471 s390.cc:3542
+#: s390.cc:3579 s390.cc:3601 s390.cc:3626 sparc.cc:3701 sparc.cc:3892
#: sparc.cc:3953 sparc.cc:4060 tilegx.cc:4732 x86_64.cc:5029 x86_64.cc:5155
#: x86_64.cc:5227 x86_64.cc:5261
#, c-format
@@ -538,7 +538,7 @@ msgstr "** оÑобине"
msgid "cannot open %s: %s:"
msgstr "не могу да отворим: %s: %s:"
-#: common.cc:351 output.cc:2517 output.cc:2616
+#: common.cc:351 output.cc:2469 output.cc:2568
#, c-format
msgid "out of patch space in section %s; relink with --incremental-full"
msgstr "нема више закрпног проÑтора у одељаку „%s“; превежите Ñа „--incremental-full“"
@@ -1092,7 +1092,7 @@ msgstr "„TLS“ премештаји и SUN и GNU модела"
msgid "unsupported reloc %u in object file"
msgstr "неподржан премештај „%u“ у објектној датотеци"
-#: i386.cc:4036 powerpc.cc:9680 s390.cc:4877 x86_64.cc:6113
+#: i386.cc:4036 powerpc.cc:9840 s390.cc:4886 x86_64.cc:6113
#, c-format
msgid "failed to match split-stack sequence at section %u offset %0zx"
msgstr "ниÑам уÑпе да упоредим „split-stack“ низ на одељку „%u“ померај %0zx"
@@ -1173,11 +1173,11 @@ msgstr "неподржана датотека: 64-битна, велика крÐ
msgid "unsupported file: 64-bit, little-endian"
msgstr "неподржана датотека: 64-битна, мала крајњоÑÑ‚"
-#: incremental.cc:2083
+#: incremental.cc:2089
msgid "COMDAT group has no signature"
msgstr "„COMDAT“ група нема потпиÑ"
-#: incremental.cc:2089
+#: incremental.cc:2095
#, c-format
msgid "COMDAT group %s included twice in incremental link"
msgstr "„COMDAT“ група „%s“ укључена је два пута у повећавајућој Ñвези"
@@ -1245,75 +1245,75 @@ msgstr "%s: непозната врÑта ÑвојÑтва програма „%
msgid "unable to open --section-ordering-file file %s: %s"
msgstr "не могу да отворим „--section-ordering-file“ датотеку „%s“: %s"
-#: layout.cc:3372
+#: layout.cc:3373
msgid "one or more inputs require executable stack, but -z noexecstack was given"
msgstr "један или више улаза захтева извршиви Ñпремник, али је дато „-z noexecstack“"
-#: layout.cc:3445
+#: layout.cc:3446
#, c-format
msgid "--build-id=uuid failed: could not open /dev/urandom: %s"
msgstr "„--build-id=uuid“ није уÑпело: не могу да отворим „/dev/urandom“: %s"
-#: layout.cc:3452
+#: layout.cc:3453
#, c-format
msgid "/dev/urandom: read failed: %s"
msgstr "/dev/urandom: читање није уÑпело: %s"
-#: layout.cc:3454
+#: layout.cc:3455
#, c-format
msgid "/dev/urandom: expected %zu bytes, got %zd bytes"
msgstr "/dev/urandom: очекивах %zu бајта, добих %zd"
-#: layout.cc:3466
+#: layout.cc:3467
msgid "--build-id=uuid failed: could not load rpcrt4.dll"
msgstr "„--build-id=uuid“ није уÑпело: не могу да учитам „rpcrt4.dll“"
-#: layout.cc:3472
+#: layout.cc:3473
msgid "--build-id=uuid failed: could not find UuidCreate"
msgstr "„--build-id=uuid“ није уÑпело: не могу да нађем „UuidCreate“"
-#: layout.cc:3474
+#: layout.cc:3475
msgid "__build_id=uuid failed: call UuidCreate() failed"
msgstr "„__build_id=uuid“ није уÑпело: позив „UuidCreate()“ није уÑпео"
-#: layout.cc:3496
+#: layout.cc:3497
#, c-format
msgid "--build-id argument '%s' not a valid hex number"
msgstr "„--build-id“ аргумент „%s“ није иÑправан хекÑадецималан број"
-#: layout.cc:3502
+#: layout.cc:3503
#, c-format
msgid "unrecognized --build-id argument '%s'"
msgstr "непознат „--build-id“ аргумент „%s“"
-#: layout.cc:4080
+#: layout.cc:4081
#, c-format
msgid "load segment overlap [0x%llx -> 0x%llx] and [0x%llx -> 0x%llx]"
msgstr "преклапање учитавања подеока [0×%llx –> 0×%llx] и [0×%llx –> 0×%llx]"
-#: layout.cc:4241 output.cc:4597
+#: layout.cc:4242 output.cc:4549
#, c-format
msgid "out of patch space for section %s; relink with --incremental-full"
msgstr "нема више закрпног проÑтора за одељак „%s“; превежите Ñа „--incremental-full“"
-#: layout.cc:4250 output.cc:4605
+#: layout.cc:4251 output.cc:4557
#, c-format
msgid "%s: section changed size; relink with --incremental-full"
msgstr "%s: одељак је изменио величину; превежите Ñа „--incremental-full“"
-#: layout.cc:4505
+#: layout.cc:4506
msgid "out of patch space for symbol table; relink with --incremental-full"
msgstr "нема више закрпног проÑтора за табелу Ñимбола; превежите Ñа „--incremental-full“"
-#: layout.cc:4576
+#: layout.cc:4577
msgid "out of patch space for section header table; relink with --incremental-full"
msgstr "нема више закрпног проÑтора за табелу заглавља Ñимбола; превежите Ñа „--incremental-full“"
-#: layout.cc:5322
+#: layout.cc:5323
msgid "read-only segment has dynamic relocations"
msgstr "одељак Ñамо за читање има динамичке премештаје"
-#: layout.cc:5325
+#: layout.cc:5326
msgid "shared library text segment is not shareable"
msgstr "део текÑта дељене библиотеке није дељив"
@@ -1591,7 +1591,7 @@ msgstr "прекорачење премештаја: %u наÑпрам „%s“"
msgid "unaligned PC-relative relocation"
msgstr "непоравнат премештај који Ñе одноÑи на „PC“"
-#: nacl.cc:43 object.cc:174 object.cc:3451 output.cc:5239
+#: nacl.cc:43 object.cc:174 object.cc:3451 output.cc:5191
#, c-format
msgid "%s: %s"
msgstr "%s: %s"
@@ -3262,90 +3262,90 @@ msgstr "Стапа Ñве „all .text.*“ одељке префикÑа."
msgid "section group retained but group element discarded"
msgstr "група одељка је задржана али је елемент групе одбачен"
-#: output.cc:1781 output.cc:1813
+#: output.cc:1733 output.cc:1765
msgid "out of patch space (GOT); relink with --incremental-full"
msgstr "нема више закрпног проÑтора (GOT); превежите Ñа „--incremental-full“"
-#: output.cc:2462
+#: output.cc:2414
#, c-format
msgid "invalid alignment %lu for section \"%s\""
msgstr "неиÑправно поравнање %lu за одељак „%s“"
-#: output.cc:4625
+#: output.cc:4577
msgid "script places BSS section in the middle of a LOAD segment; space will be allocated in the file"
msgstr "Ñкриптна меÑта „BSS“ одељка по Ñредини „LOAD“ подеока; проÑтор ће бити додељен у датотеци"
-#: output.cc:4647
+#: output.cc:4599
#, c-format
msgid "dot moves backward in linker script from 0x%llx to 0x%llx"
msgstr "тачка Ñе премешта уназад у Ñкрипти повезивача Ñа 0×%llx на 0×%llx"
-#: output.cc:4650
+#: output.cc:4602
#, c-format
msgid "address of section '%s' moves backward from 0x%llx to 0x%llx"
msgstr "адреÑа одељка „%s“ Ñе помера уназад из 0×%llx у 0×%llx"
-#: output.cc:5019
+#: output.cc:4971
#, c-format
msgid "%s: incremental base and output file name are the same"
msgstr "%s: повећавајућа оÑнова и излазна датотека Ñу иÑте"
-#: output.cc:5026
+#: output.cc:4978
#, c-format
msgid "%s: stat: %s"
msgstr "%s: добављање података: %s"
-#: output.cc:5031
+#: output.cc:4983
#, c-format
msgid "%s: incremental base file is empty"
msgstr "%s: датотека повећавајуће оÑнове је празна"
-#: output.cc:5043 output.cc:5141
+#: output.cc:4995 output.cc:5093
#, c-format
msgid "%s: open: %s"
msgstr "%s: отварам: %s"
-#: output.cc:5060
+#: output.cc:5012
#, c-format
msgid "%s: read failed: %s"
msgstr "%s: „read“ није уÑпело: %s"
-#: output.cc:5065
+#: output.cc:5017
#, c-format
msgid "%s: file too short: read only %lld of %lld bytes"
msgstr "%s: датотека је прекратка: читам Ñамо %lld од %lld бајта"
-#: output.cc:5165
+#: output.cc:5117
#, c-format
msgid "%s: mremap: %s"
msgstr "%s: mremap: %s"
-#: output.cc:5184
+#: output.cc:5136
#, c-format
msgid "%s: mmap: %s"
msgstr "%s: mmap: %s"
-#: output.cc:5276
+#: output.cc:5228
#, c-format
msgid "%s: mmap: failed to allocate %lu bytes for output file: %s"
msgstr "%s: mmap: ниÑам уÑпео да доделим %lu бајта за излазну датотеку: %s"
-#: output.cc:5294
+#: output.cc:5246
#, c-format
msgid "%s: munmap: %s"
msgstr "%s: munmap: %s"
-#: output.cc:5314
+#: output.cc:5266
#, c-format
msgid "%s: write: unexpected 0 return-value"
msgstr "%s: write: неочекивана повратна вредноÑÑ‚ 0"
-#: output.cc:5316
+#: output.cc:5268
#, c-format
msgid "%s: write: %s"
msgstr "%s: write: %s"
-#: output.cc:5331
+#: output.cc:5283
#, c-format
msgid "%s: close: %s"
msgstr "%s: close: %s"
@@ -3382,15 +3382,15 @@ msgstr "** премештаји"
msgid "** group"
msgstr "** група"
-#: output.h:2597
+#: output.h:2581
msgid "** GOT"
msgstr "** GOT"
-#: output.h:2804
+#: output.h:2776
msgid "** dynamic"
msgstr "** динамичко"
-#: output.h:2948
+#: output.h:2920
msgid "** symtab xindex"
msgstr "** Ñимтаб x_индекÑ"
@@ -3450,144 +3450,140 @@ msgstr "%s: грешка пиÑања приликом Ñтварања умно
msgid "input files added by plug-ins in --incremental mode not supported yet"
msgstr "улазне датотеке додате прикључцима у „--incremental“ режиму ниÑу још подржане"
-#: powerpc.cc:1299
+#: powerpc.cc:1302
msgid "missing expected __tls_get_addr call"
msgstr "недоÑтаје очекиван „__tls_get_addr“ позив"
-#: powerpc.cc:2298 powerpc.cc:2635
+#: powerpc.cc:2292 powerpc.cc:2627
#, c-format
msgid "%s: ABI version %d is not compatible with ABI version %d output"
msgstr "%s: „ABI“ издање %d није ÑаглаÑно Ñа излазом „ABI“ издања %d"
-#: powerpc.cc:2332 powerpc.cc:2694
+#: powerpc.cc:2326 powerpc.cc:2686
#, c-format
msgid "%s: .opd invalid in abiv%d"
msgstr "%s: „.opd“ није иÑправно у „abiv%d“"
-#: powerpc.cc:2410
+#: powerpc.cc:2404
#, c-format
msgid "%s: unexpected reloc type %u in .opd section"
msgstr "%s: неочекивана врÑта премештаја „%u“ у „.opd“ одељку"
-#: powerpc.cc:2421
+#: powerpc.cc:2415
#, c-format
msgid "%s: .opd is not a regular array of opd entries"
msgstr "%s: „.opd“ није регуларан низ уноÑа операнда"
-#: powerpc.cc:2563
+#: powerpc.cc:2555
#, c-format
msgid "%s: local symbol %d has invalid st_other for ABI version 1"
msgstr "%s: локални Ñимбол „%d“ има неиÑправан „st_other“ за „ABI“ издање 1"
-#: powerpc.cc:3303
+#: powerpc.cc:3290
#, c-format
msgid "%s:%s exceeds group size"
msgstr "„%s:%s“ превазилази величину групе"
-#: powerpc.cc:3651
+#: powerpc.cc:3641
#, c-format
msgid "%s:%s: branch in non-executable section, no long branch stub for you"
msgstr "%s:%s: грана у неизвршивом одељку, нема окрајка дуге гране за ваÑ"
-#: powerpc.cc:3769
+#: powerpc.cc:3758
#, c-format
msgid "%s: stub group size is too large; retrying with %#x"
msgstr "%s: величина групе окрајка је превелика; поново покушавам Ñа „%#x“"
-#: powerpc.cc:5611
+#: powerpc.cc:5729
msgid "** glink"
msgstr "** g_веза"
-#: powerpc.cc:6258 powerpc.cc:6961
+#: powerpc.cc:6394 powerpc.cc:7109
#, c-format
msgid "linkage table error against `%s'"
msgstr "грешка табеле повезивања наÑпрам „%s“"
-#: powerpc.cc:6261
+#: powerpc.cc:6397
#, c-format
msgid "linkage table error against `%s:[local %u]'"
msgstr "грешка табеле повезивања наÑпрам „%s:[local %u]“"
-#: powerpc.cc:7090
+#: powerpc.cc:7236
msgid "** save/restore"
msgstr "** Ñачуај/поврати"
-#: powerpc.cc:7844
+#: powerpc.cc:8008
#, c-format
msgid "%s: unsupported reloc %u for IFUNC symbol"
msgstr "%s: неподржан премештај „%u“ за „IFUNC“ Ñимбол"
-#: powerpc.cc:8128 powerpc.cc:8914
+#: powerpc.cc:8274 powerpc.cc:9060
#, c-format
msgid "tocsave symbol %u has bad shndx %u"
msgstr "Ñимбол чувања табеле Ñадржаја %u има лош „shndx %u“"
-#: powerpc.cc:8407 powerpc.cc:9237
+#: powerpc.cc:8565 powerpc.cc:9397
#, c-format
msgid "%s: toc optimization is not supported for %#08x instruction"
msgstr "%s: оптимизација табеле Ñадржаја није подржана за инÑтрукцију „%#08x“"
-#: powerpc.cc:8473 powerpc.cc:9299
+#: powerpc.cc:8631 powerpc.cc:9459
#, c-format
msgid "%s: unsupported -mbss-plt code"
msgstr "%s: неподржан „-mbss-plt“ код"
-#: powerpc.cc:9646
+#: powerpc.cc:9806
#, c-format
msgid "split-stack stack size overflow at section %u offset %0zx"
msgstr "величина Ñпремника „split-stack“ прекорачује на одељку %u померај %0zx"
-#: powerpc.cc:9717
+#: powerpc.cc:9877
msgid "--plt-localentry is especially dangerous without ld.so support to detect ABI violations"
msgstr "„--plt-localentry“ је нарочито опаÑно без „ld.so“ подршке за откривање „ABI“ преÑтупа"
-#: powerpc.cc:9746
+#: powerpc.cc:9906
msgid "--plt-localentry is incompatible with power10 pc-relative code"
msgstr "„--plt-localentry“ је неÑаглаÑно Ñа „power10“ рачунарÑко-одноÑним кодом"
-#: powerpc.cc:10024 powerpc.cc:10030
+#: powerpc.cc:10201 powerpc.cc:10207
#, c-format
msgid "%s uses hard float, %s uses soft float"
msgstr "„%s“ кориÑти хардверÑки покретни зарез, „%s“ кориÑти ÑофтверÑки покретни зарез"
-#: powerpc.cc:10036 powerpc.cc:10043
+#: powerpc.cc:10213 powerpc.cc:10220
#, c-format
msgid "%s uses double-precision hard float, %s uses single-precision hard float"
msgstr "„%s“ кориÑти хардверÑки покретни зарез двоÑтруке тачноÑти, „%s“ кориÑти хардверÑки покретни зарез једне тачноÑти"
-#: powerpc.cc:10063 powerpc.cc:10069
+#: powerpc.cc:10240 powerpc.cc:10246
#, c-format
msgid "%s uses 64-bit long double, %s uses 128-bit long double"
msgstr "„%s“ кориÑти 64-битни дуги дубл, „%s“ кориÑти 128-битни дуги дубл"
-#: powerpc.cc:10075 powerpc.cc:10081
+#: powerpc.cc:10252 powerpc.cc:10258
#, c-format
msgid "%s uses IBM long double, %s uses IEEE long double"
msgstr "„%s“ кориÑти „IBM“ дуги дубл, „%s“ кориÑти „IEEE“ дуги дубл"
-#: powerpc.cc:10135 powerpc.cc:10141
+#: powerpc.cc:10312 powerpc.cc:10318
#, c-format
msgid "%s uses AltiVec vector ABI, %s uses SPE vector ABI"
msgstr "„%s“ кориÑти „AltiVec“ вектор „ABI“, „%s“ кориÑти „SPE“ вектор „ABI“"
-#: powerpc.cc:10170 powerpc.cc:10177
+#: powerpc.cc:10347 powerpc.cc:10354
#, c-format
msgid "%s uses r3/r4 for small structure returns, %s uses memory"
msgstr "„%s“ кориÑти „r3/r4“ за мале резултате Ñтруктуре, „%s“ кориÑти меморију"
-#: powerpc.cc:10465 powerpc.cc:10468
-msgid "__tls_get_addr call lacks marker reloc"
-msgstr "„__tls_get_addr“ позиву недоÑтаје премештај означавача"
-
-#: powerpc.cc:10738
+#: powerpc.cc:10929
msgid "call lacks nop, can't restore toc; recompile with -fPIC"
msgstr "позиву недоÑтаје „nop“, не могу да вратим табелу Ñадржаја; поново преведите Ñа „-fPIC“"
-#: powerpc.cc:12194 s390.cc:3474
+#: powerpc.cc:12381 s390.cc:3479
msgid "relocation overflow"
msgstr "прекорачење премештаја"
-#: powerpc.cc:12196
+#: powerpc.cc:12383
msgid "try relinking with a smaller --stub-group-size"
msgstr "покушајте поново да повежете Ñа мањом „--stub-group-size“"
@@ -3721,42 +3717,42 @@ msgstr "Ñкрипта повезивача"
msgid "linker defined"
msgstr "повезивач је дефиниÑан"
-#: s390.cc:1002
+#: s390.cc:1007
#, c-format
msgid "R_390_PC32DBL target misaligned at %llx"
msgstr "„R_390_PC32DBL“ циљ је лоше поравнат на „%llx“"
-#: s390.cc:1094 tilegx.cc:2088 x86_64.cc:1809
+#: s390.cc:1099 tilegx.cc:2088 x86_64.cc:1809
msgid "out of patch space (PLT); relink with --incremental-full"
msgstr "нема више проÑтора закрпе (PLT); поново повежите Ñа „--incremental-full“"
-#: s390.cc:3672 s390.cc:3728 x86_64.cc:5349
+#: s390.cc:3677 s390.cc:3733 x86_64.cc:5349
#, c-format
msgid "unsupported reloc type %u"
msgstr "неподржана врÑта премештаја %u"
-#: s390.cc:3801
+#: s390.cc:3806
msgid "unsupported op for GD to IE"
msgstr "неподржан операнд за „GD“ у „IE“"
-#: s390.cc:3850
+#: s390.cc:3855
msgid "unsupported op for GD to LE"
msgstr "неподржан операнд за „GD“ у „LE“"
-#: s390.cc:3896
+#: s390.cc:3901
msgid "unsupported op for LD to LE"
msgstr "неподржан операнд за „LD“ у „LE“"
-#: s390.cc:3984
+#: s390.cc:3989
msgid "unsupported op for IE to LE"
msgstr "неподржан операнд за „IE“ у „LE“"
-#: s390.cc:4262
+#: s390.cc:4271
msgid "S/390 code fill of odd length requested"
msgstr "иÑпуна „S/390“ кода непарне дужине је затражена"
#. Should not happen.
-#: s390.cc:4309
+#: s390.cc:4318
msgid "instruction with PC32DBL not wholly within section"
msgstr "инÑтрукција Ñа „PC32DBL“ није читава унутар одељка"
@@ -4091,27 +4087,27 @@ msgstr "Ñимбол издања за Ñимбол „%zu“ је ван опÑ
msgid "versym for symbol %zu has no name: %u"
msgstr "Ñимбол издања за Ñимбол „%zu“ нема назив: %u"
-#: symtab.cc:2639
+#: symtab.cc:2633
#, c-format
msgid "discarding version information for %s@%s, defined in unused shared library %s (linked with --as-needed)"
msgstr "одбацујем податке издања за „%s@%s“, дефиниÑане у некоришћеној дељеној библиотеци „%s“ (повезане Ñа „--as-needed“)"
-#: symtab.cc:3001 symtab.cc:3147
+#: symtab.cc:2995 symtab.cc:3141
#, c-format
msgid "%s: unsupported symbol section 0x%x"
msgstr "%s: неподржан одељак Ñимбола „0×%x“"
-#: symtab.cc:3479
+#: symtab.cc:3473
#, c-format
msgid "%s: symbol table entries: %zu; buckets: %zu\n"
msgstr "%s: уноÑи табеле Ñимбола: %zu; ведра: %zu\n"
-#: symtab.cc:3482
+#: symtab.cc:3476
#, c-format
msgid "%s: symbol table entries: %zu\n"
msgstr "%s: уноÑи табеле Ñимбола: %zu\n"
-#: symtab.cc:3639
+#: symtab.cc:3633
#, c-format
msgid "while linking %s: symbol '%s' defined in multiple places (possible ODR violation):"
msgstr "приликом повезивања „%s“: Ñимбол „%s“ је дефиниÑан на више меÑта (могућ „ODR“ преÑтуп):"
@@ -4120,7 +4116,7 @@ msgstr "приликом повезивања „%s“: Ñимбол „%s“ ј
#. which may not be the location we expect to intersect
#. with another definition. We could print the whole
#. set of locations, but that seems too verbose.
-#: symtab.cc:3646 symtab.cc:3649
+#: symtab.cc:3640 symtab.cc:3643
#, c-format
msgid " %s from %s\n"
msgstr " „%s“ из „%s“\n"
@@ -4196,8 +4192,8 @@ msgstr "„TLS“ премештај наÑпрам неиÑправног упÑ
#. This output is intended to follow the GNU standards.
#: version.cc:65
#, c-format
-msgid "Copyright (C) 2021 Free Software Foundation, Inc.\n"
-msgstr "ÐуторÑка права © 2021 Задужбина Ñлободног Ñофтвера, Доо.\n"
+msgid "Copyright (C) 2022 Free Software Foundation, Inc.\n"
+msgstr "ÐуторÑка права © 2022 Задужбина Ñлободног Ñофтвера, Доо.\n"
#: version.cc:66
#, c-format
@@ -4258,3 +4254,6 @@ msgstr "прекорачење премештаја: упућује на „%sâ€
#, c-format
msgid "relocation overflow: reference to '%s'"
msgstr "прекорачење премештаја: упућује на „%s“"
+
+#~ msgid "__tls_get_addr call lacks marker reloc"
+#~ msgstr "„__tls_get_addr“ позиву недоÑтаје премештај означавача"
diff --git a/gold/po/uk.po b/gold/po/uk.po
index 94b96e634fd..04a93375d7e 100644
--- a/gold/po/uk.po
+++ b/gold/po/uk.po
@@ -2,13 +2,13 @@
# Copyright (C) 2012 Free Software Foundation, Inc.
# This file is distributed under the same license as the binutils package.
#
-# Yuri Chornoivan <yurchor@ukr.net>, 2012, 2014, 2018, 2019, 2020, 2021.
+# Yuri Chornoivan <yurchor@ukr.net>, 2012, 2014, 2018, 2019, 2020, 2021, 2022.
msgid ""
msgstr ""
-"Project-Id-Version: gold 2.36.90\n"
-"Report-Msgid-Bugs-To: bug-binutils@gnu.org\n"
-"POT-Creation-Date: 2021-07-03 15:02+0100\n"
-"PO-Revision-Date: 2021-07-04 10:57+0300\n"
+"Project-Id-Version: gold 2.37.90\n"
+"Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n"
+"POT-Creation-Date: 2022-01-22 12:25+0000\n"
+"PO-Revision-Date: 2022-01-23 14:07+0200\n"
"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
"Language-Team: Ukrainian <trans-uk@lists.fedoraproject.org>\n"
"Language: uk\n"
@@ -61,7 +61,7 @@ msgstr "некоректний Ñ–Ð½Ð´ÐµÐºÑ Ð½Ð°Ð·Ð²Ð¸ таблиці Ñимво
msgid "symbol table name section has wrong type: %u"
msgstr "розділ назви таблиці Ñимволів належить до помилкового типу: %u"
-#: aarch64.cc:3831 arm.cc:10905 mips.cc:9608 powerpc.cc:2946 target.cc:94
+#: aarch64.cc:3831 arm.cc:10905 mips.cc:9608 powerpc.cc:2911 target.cc:94
#, c-format
msgid "%s: unsupported ELF file type %d"
msgstr "%s: непідтримуваний тип файлів ELF %d"
@@ -81,14 +81,14 @@ msgstr "** PLT"
msgid "Stub is too far away, try a smaller value for '--stub-group-size'. The current value is 0x%lx."
msgstr "Заглушка надто далеко. Спробуйте вказати менше Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ --stub-group-size. Поточним значеннÑм Ñ” 0x%lx."
-#: aarch64.cc:6015 arm.cc:8477 i386.cc:1772 mips.cc:12461 powerpc.cc:7647
-#: s390.cc:2180 s390.cc:2628 sparc.cc:2134 tilegx.cc:3137 tilegx.cc:3589
+#: aarch64.cc:6015 arm.cc:8477 i386.cc:1772 mips.cc:12461 powerpc.cc:7810
+#: s390.cc:2185 s390.cc:2633 sparc.cc:2134 tilegx.cc:3137 tilegx.cc:3589
#: x86_64.cc:3471 x86_64.cc:3924
#, c-format
msgid "%s: unsupported reloc %u against local symbol"
msgstr "%s: непідтримуване переÑÑƒÐ²Ð°Ð½Ð½Ñ %u щодо локального Ñимволу"
-#: aarch64.cc:6056 powerpc.cc:7752 s390.cc:2254 sparc.cc:2230
+#: aarch64.cc:6056 powerpc.cc:7915 s390.cc:2259 sparc.cc:2230
msgid "requires unsupported dynamic reloc; recompile with -fPIC"
msgstr "потребує непідтримуваного динамічного переÑуваннÑ; зберіть повторно з -fPIC"
@@ -107,8 +107,8 @@ msgstr "%s: непідтримуване переÑÑƒÐ²Ð°Ð½Ð½Ñ %u у незал
msgid "%s: unsupported TLSLE reloc %u in shared code."
msgstr "%s: непідтримуване переÑÑƒÐ²Ð°Ð½Ð½Ñ TLSLE %u у коді Ñпільного викориÑтаннÑ."
-#: aarch64.cc:6372 arm.cc:8885 i386.cc:2127 mips.cc:12474 powerpc.cc:8592
-#: s390.cc:3059 s390.cc:3076 sparc.cc:2572 tilegx.cc:3605 tilegx.cc:4144
+#: aarch64.cc:6372 arm.cc:8885 i386.cc:2127 mips.cc:12474 powerpc.cc:8750
+#: s390.cc:3064 s390.cc:3081 sparc.cc:2572 tilegx.cc:3605 tilegx.cc:4144
#: x86_64.cc:3940 x86_64.cc:4446
#, c-format
msgid "%s: unsupported reloc %u against global symbol %s"
@@ -124,7 +124,7 @@ msgstr "%s: непідтримуваний тип переÑÑƒÐ²Ð°Ð½Ð½Ñ TLSLE %
msgid "%s: unsupported reloc type in global scan"
msgstr "%s: непідтримуваний тип переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ загальному Ñкануванні"
-#: aarch64.cc:6907 powerpc.cc:9726 s390.cc:4009 sparc.cc:3164 tilegx.cc:4211
+#: aarch64.cc:6907 powerpc.cc:9886 s390.cc:4014 sparc.cc:3164 tilegx.cc:4211
#: x86_64.cc:4511
#, c-format
msgid "%s: unsupported REL reloc section"
@@ -135,8 +135,8 @@ msgstr "%s: непідтримуваний розділ переÑÑƒÐ²Ð°Ð½Ð½Ñ R
msgid "cannot relocate %s in object file"
msgstr "переÑÑƒÐ²Ð°Ð½Ð½Ñ %s у об'єктному файлі неможливе"
-#: aarch64.cc:7343 i386.cc:2987 i386.cc:3753 mips.cc:10076 powerpc.cc:12049
-#: s390.cc:3460 sparc.cc:3695 tilegx.cc:4726 x86_64.cc:5008
+#: aarch64.cc:7343 i386.cc:2987 i386.cc:3753 mips.cc:10076 powerpc.cc:12236
+#: s390.cc:3465 sparc.cc:3695 tilegx.cc:4726 x86_64.cc:5008
#, c-format
msgid "unexpected reloc %u in object file"
msgstr "неочікуване переÑÑƒÐ²Ð°Ð½Ð½Ñ %u у об'єктному файлі"
@@ -209,87 +209,87 @@ msgstr "не підтримувати оптимізацію tlsdesc gd_to_ie д
msgid "Erratum 835769 found and fixed at \"%s\", section %d, offset 0x%08x."
msgstr "ВиÑвлено наÑлідки помилки 835769, Ñкі уÑунуто у «%s», розділ %d, зÑув 0x%08x."
-#: archive.cc:134
+#: archive.cc:127
#, c-format
msgid "script or expression reference to %s"
msgstr "Ñкрипт або вираз поÑилаєтьÑÑ Ð½Ð° %s"
-#: archive.cc:239
+#: archive.cc:232
#, c-format
msgid "%s: no archive symbol table (run ranlib)"
msgstr "%s: немає таблиці Ñимволів архіву (запуÑÑ‚Ñ–Ñ‚ÑŒ ranlib)"
-#: archive.cc:331
+#: archive.cc:324
#, c-format
msgid "%s: bad archive symbol table names"
msgstr "%s: помилкові назви у таблиці Ñимволів архіву"
-#: archive.cc:363
+#: archive.cc:356
#, c-format
msgid "%s: malformed archive header at %zu"
msgstr "%s: помилкове Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° архіву за адреÑою %zu"
-#: archive.cc:383
+#: archive.cc:376
#, c-format
msgid "%s: malformed archive header size at %zu"
msgstr "%s: помилкове Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ заголовка архіву за адреÑою %zu"
-#: archive.cc:394
+#: archive.cc:387
#, c-format
msgid "%s: malformed archive header name at %zu"
msgstr "%s: помилкове Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð°Ð·Ð²Ð¸ заголовка архіву за адреÑою %zu"
-#: archive.cc:430
+#: archive.cc:423
#, c-format
msgid "%s: bad extended name index at %zu"
msgstr "%s: помилковий покажчик розширених назв за адреÑою %zu"
-#: archive.cc:440
+#: archive.cc:433
#, c-format
msgid "%s: bad extended name entry at header %zu"
msgstr "%s: помилковий Ð·Ð°Ð¿Ð¸Ñ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð¾Ñ— назви у заголовку %zu"
-#: archive.cc:537
+#: archive.cc:530
#, c-format
msgid "%s: short archive header at %zu"
msgstr "%s: закороткий заголовок архіву за адреÑою %zu"
-#: archive.cc:727
+#: archive.cc:720
#, c-format
msgid "%s: plugin failed to claim member %s at %zu"
msgstr "%s: додатку не вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñ‚Ð°Ñ‚Ð¸ елемент %s за адреÑою %zu"
-#: archive.cc:731
+#: archive.cc:724
#, c-format
msgid "%s: member %s at %zu is not an ELF object"
msgstr "%s: елемент %s за адреÑою %zu не Ñ” об'єктом ELF"
-#: archive.cc:1093
+#: archive.cc:1086
#, c-format
msgid "%s: archive libraries: %u\n"
msgstr "%s: бібліотек архіву: %u\n"
-#: archive.cc:1095
+#: archive.cc:1088
#, c-format
msgid "%s: total archive members: %u\n"
msgstr "%s: загалом елементів архіву: %u\n"
-#: archive.cc:1097
+#: archive.cc:1090
#, c-format
msgid "%s: loaded archive members: %u\n"
msgstr "%s: завантажених елементів архіву: %u\n"
-#: archive.cc:1327
+#: archive.cc:1320
#, c-format
msgid "%s: lib groups: %u\n"
msgstr "%s: групи бібліотек: %u\n"
-#: archive.cc:1329
+#: archive.cc:1322
#, c-format
msgid "%s: total lib groups members: %u\n"
msgstr "%s: загальна кількіÑÑ‚ÑŒ учаÑників груп бібліотек: %u\n"
-#: archive.cc:1331
+#: archive.cc:1324
#, c-format
msgid "%s: loaded lib groups members: %u\n"
msgstr "%s: кількіÑÑ‚ÑŒ завантажених учаÑників груп бібліотек: %u\n"
@@ -384,13 +384,13 @@ msgstr "ЗÑув PLT Ñ” надто великим, Ñпробуйте викон
msgid "requires unsupported dynamic reloc %s; recompile with -fPIC"
msgstr "потребує непідтримуваного динамічного переÑÑƒÐ²Ð°Ð½Ð½Ñ %s; повторно зберіть з -fPIC"
-#: arm.cc:8547 i386.cc:1786 s390.cc:2271 sparc.cc:2247 tilegx.cc:3223
+#: arm.cc:8547 i386.cc:1786 s390.cc:2276 sparc.cc:2247 tilegx.cc:3223
#: x86_64.cc:3581
#, c-format
msgid "%s: unsupported TLS reloc %u for IFUNC symbol"
msgstr "%s: непідтримуване переÑÑƒÐ²Ð°Ð½Ð½Ñ TLS %u Ð´Ð»Ñ Ñимволу IFUNC"
-#: arm.cc:8643 i386.cc:1862 powerpc.cc:8074 s390.cc:2364 x86_64.cc:3679
+#: arm.cc:8643 i386.cc:1862 powerpc.cc:8219 s390.cc:2369 x86_64.cc:3679
#, c-format
msgid "section symbol %u has bad shndx %u"
msgstr "Ñимвол розділу %u має помилковий shndx %u"
@@ -398,13 +398,13 @@ msgstr "Ñимвол розділу %u має помилковий shndx %u"
#. These are relocations which should only be seen by the
#. dynamic linker, and should never be seen here.
#: arm.cc:8752 arm.cc:9233 i386.cc:1950 i386.cc:2436 mips.cc:11258
-#: s390.cc:2463 s390.cc:2897 sparc.cc:2553 sparc.cc:3033 tilegx.cc:3584
+#: s390.cc:2468 s390.cc:2902 sparc.cc:2553 sparc.cc:3033 tilegx.cc:3584
#: tilegx.cc:4139 x86_64.cc:3796 x86_64.cc:4319
#, c-format
msgid "%s: unexpected reloc %u in object file"
msgstr "%s: неочікуване переÑÑƒÐ²Ð°Ð½Ð½Ñ %u у об'єктному файлі"
-#: arm.cc:8784 i386.cc:1984 mips.cc:10707 s390.cc:2507 sparc.cc:2452
+#: arm.cc:8784 i386.cc:1984 mips.cc:10707 s390.cc:2512 sparc.cc:2452
#: tilegx.cc:3488 x86_64.cc:3828
#, c-format
msgid "local symbol %u has bad shndx %u"
@@ -420,8 +420,8 @@ msgid "unable to provide V4BX reloc interworking fix up; the target profile does
msgstr "не вдалоÑÑ Ð²ÐºÐ°Ð·Ð°Ñ‚Ð¸ належного Ð²Ð¸Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð½Ñ Ð²Ð·Ð°Ñ”Ð¼Ð¾Ð´Ñ–Ñ— переÑувань V4BX; у профілі Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð½Ðµ передбачено підтримки інÑтрукції BX"
#: arm.cc:10247 i386.cc:3019 i386.cc:3101 i386.cc:3166 i386.cc:3202
-#: i386.cc:3274 mips.cc:12296 powerpc.cc:12163 s390.cc:3466 s390.cc:3537
-#: s390.cc:3574 s390.cc:3596 s390.cc:3621 sparc.cc:3701 sparc.cc:3892
+#: i386.cc:3274 mips.cc:12296 powerpc.cc:12350 s390.cc:3471 s390.cc:3542
+#: s390.cc:3579 s390.cc:3601 s390.cc:3626 sparc.cc:3701 sparc.cc:3892
#: sparc.cc:3953 sparc.cc:4060 tilegx.cc:4732 x86_64.cc:5029 x86_64.cc:5155
#: x86_64.cc:5227 x86_64.cc:5261
#, c-format
@@ -540,7 +540,7 @@ msgstr "** атрибути"
msgid "cannot open %s: %s:"
msgstr "не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ %s: %s:"
-#: common.cc:351 output.cc:2517 output.cc:2616
+#: common.cc:351 output.cc:2469 output.cc:2568
#, c-format
msgid "out of patch space in section %s; relink with --incremental-full"
msgstr "вихід за межі латки у розділі %s; виконайте повторне ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð° допомогою --incremental-full"
@@ -1094,7 +1094,7 @@ msgstr "TLS-переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¾Ð±Ð¾Ñ… моделей, SUN Ñ– GNU"
msgid "unsupported reloc %u in object file"
msgstr "непідтримуване переÑÑƒÐ²Ð°Ð½Ð½Ñ %u у об'єктному файлі"
-#: i386.cc:4036 powerpc.cc:9680 s390.cc:4877 x86_64.cc:6113
+#: i386.cc:4036 powerpc.cc:9840 s390.cc:4886 x86_64.cc:6113
#, c-format
msgid "failed to match split-stack sequence at section %u offset %0zx"
msgstr "не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ відповідник поÑлідовноÑÑ‚Ñ– поділу Ñтека у розділі %u, зÑув %0zx"
@@ -1175,11 +1175,11 @@ msgstr "непідтримуваний файл: 64-бітовий, зворот
msgid "unsupported file: 64-bit, little-endian"
msgstr "непідтримуваний файл: 64-бітовий, прÑмий порÑдок байтів"
-#: incremental.cc:2083
+#: incremental.cc:2089
msgid "COMDAT group has no signature"
msgstr "група COMDAT не має підпиÑу"
-#: incremental.cc:2089
+#: incremental.cc:2095
#, c-format
msgid "COMDAT group %s included twice in incremental link"
msgstr "групу COMDAT %s двічі включено до нарощувального компонуваннÑ"
@@ -1247,75 +1247,75 @@ msgstr "%s: невідомий тип влаÑтивоÑÑ‚Ñ– програми %d
msgid "unable to open --section-ordering-file file %s: %s"
msgstr "не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл --section-ordering-file %s: %s"
-#: layout.cc:3372
+#: layout.cc:3373
msgid "one or more inputs require executable stack, but -z noexecstack was given"
msgstr "одне або декілька джерел вхідних даних потребують придатного до Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ñтека, але вказано параметр -z noexecstack"
-#: layout.cc:3445
+#: layout.cc:3446
#, c-format
msgid "--build-id=uuid failed: could not open /dev/urandom: %s"
msgstr "помилка викориÑÑ‚Ð°Ð½Ð½Ñ --build-id=uuid: не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ /dev/urandom: %s"
-#: layout.cc:3452
+#: layout.cc:3453
#, c-format
msgid "/dev/urandom: read failed: %s"
msgstr "/dev/urandom: помилка читаннÑ: %s"
-#: layout.cc:3454
+#: layout.cc:3455
#, c-format
msgid "/dev/urandom: expected %zu bytes, got %zd bytes"
msgstr "/dev/urandom: мало бути отримано %zu байтів, отримано %zd байтів"
-#: layout.cc:3466
+#: layout.cc:3467
msgid "--build-id=uuid failed: could not load rpcrt4.dll"
msgstr "помилка викориÑÑ‚Ð°Ð½Ð½Ñ --build-id=uuid: не вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ rpcrt4.dll"
-#: layout.cc:3472
+#: layout.cc:3473
msgid "--build-id=uuid failed: could not find UuidCreate"
msgstr "помилка викориÑÑ‚Ð°Ð½Ð½Ñ --build-id=uuid: не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ UuidCreate"
-#: layout.cc:3474
+#: layout.cc:3475
msgid "__build_id=uuid failed: call UuidCreate() failed"
msgstr "помилка __build_id=uuid: помилка під Ñ‡Ð°Ñ Ð²Ð¸ÐºÐ»Ð¸ÐºÑƒ UuidCreate()"
-#: layout.cc:3496
+#: layout.cc:3497
#, c-format
msgid "--build-id argument '%s' not a valid hex number"
msgstr "аргумент --build-id, «%s», не Ñ” коректним шіÑтнадцÑтковим чиÑлом"
-#: layout.cc:3502
+#: layout.cc:3503
#, c-format
msgid "unrecognized --build-id argument '%s'"
msgstr "нерозпізнаний аргумент --build-id, «%s»"
-#: layout.cc:4080
+#: layout.cc:4081
#, c-format
msgid "load segment overlap [0x%llx -> 0x%llx] and [0x%llx -> 0x%llx]"
msgstr "Ð¿ÐµÑ€ÐµÐºÑ€Ð¸Ñ‚Ñ‚Ñ Ñегментів Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ [0x%llx -> 0x%llx] Ñ– [0x%llx -> 0x%llx]"
-#: layout.cc:4241 output.cc:4597
+#: layout.cc:4242 output.cc:4549
#, c-format
msgid "out of patch space for section %s; relink with --incremental-full"
msgstr "вихід за межі латки Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %s; виконайте повторне ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð° допомогою --incremental-full"
-#: layout.cc:4250 output.cc:4605
+#: layout.cc:4251 output.cc:4557
#, c-format
msgid "%s: section changed size; relink with --incremental-full"
msgstr "%s: зміна розміру розділу; виконайте повторне ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ð· параметром --incremental-full"
-#: layout.cc:4505
+#: layout.cc:4506
msgid "out of patch space for symbol table; relink with --incremental-full"
msgstr "вихід за межі латки Ð´Ð»Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ñимволів; виконайте повторне ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð° допомогою --incremental-full"
-#: layout.cc:4576
+#: layout.cc:4577
msgid "out of patch space for section header table; relink with --incremental-full"
msgstr "вихід за межі латки Ð´Ð»Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– заголовків; виконайте повторне ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð° допомогою --incremental-full"
-#: layout.cc:5322
+#: layout.cc:5323
msgid "read-only segment has dynamic relocations"
msgstr "Ñегмент, призначений лише Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ, міÑтить динамічні переÑуваннÑ"
-#: layout.cc:5325
+#: layout.cc:5326
msgid "shared library text segment is not shareable"
msgstr "текÑтовий Ñегмент бібліотеки Ñпільного викориÑÑ‚Ð°Ð½Ð½Ñ Ð½ÐµÐ¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð¸Ð¹ до Ñпільного викориÑтаннÑ"
@@ -1593,7 +1593,7 @@ msgstr "Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÐµÑуваннÑ: %u щодо «%s»"
msgid "unaligned PC-relative relocation"
msgstr "невирівнÑне переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ PC"
-#: nacl.cc:43 object.cc:174 object.cc:3451 output.cc:5239
+#: nacl.cc:43 object.cc:174 object.cc:3451 output.cc:5191
#, c-format
msgid "%s: %s"
msgstr "%s: %s"
@@ -3264,90 +3264,90 @@ msgstr "Об'єднати уÑÑ–Ñ… розділи з префікÑом .text.*.
msgid "section group retained but group element discarded"
msgstr "Ð³Ñ€ÑƒÐ¿ÑƒÐ²Ð°Ð½Ð½Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð² збережено, але елемент групи відкинуто"
-#: output.cc:1781 output.cc:1813
+#: output.cc:1733 output.cc:1765
msgid "out of patch space (GOT); relink with --incremental-full"
msgstr "вихід за межі латки (GOT); виконайте повторне ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð° допомогою --incremental-full"
-#: output.cc:2462
+#: output.cc:2414
#, c-format
msgid "invalid alignment %lu for section \"%s\""
msgstr "некоректне Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ %lu Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ «%s»"
-#: output.cc:4625
+#: output.cc:4577
msgid "script places BSS section in the middle of a LOAD segment; space will be allocated in the file"
msgstr "Ñкрипт розташовує розділ BSS поÑередині Ñегмента LOAD; міÑце Ð´Ð»Ñ Ñ†Ð¸Ñ… даних буде розміщено у файлі"
-#: output.cc:4647
+#: output.cc:4599
#, c-format
msgid "dot moves backward in linker script from 0x%llx to 0x%llx"
msgstr "крапка переÑуває назад у Ñкрипті компонувальника з 0x%llx до 0x%llx"
-#: output.cc:4650
+#: output.cc:4602
#, c-format
msgid "address of section '%s' moves backward from 0x%llx to 0x%llx"
msgstr "адреÑа розділу «%s» переÑуває назад з 0x%llx до 0x%llx"
-#: output.cc:5019
+#: output.cc:4971
#, c-format
msgid "%s: incremental base and output file name are the same"
msgstr "%s: назви файлів бази Ð½Ð°Ñ€Ð¾Ñ‰ÐµÐ½Ð½Ñ Ñ‚Ð° Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð·Ð±Ñ–Ð³Ð°ÑŽÑ‚ÑŒÑÑ"
-#: output.cc:5026
+#: output.cc:4978
#, c-format
msgid "%s: stat: %s"
msgstr "%s: ÑтатиÑтика: %s"
-#: output.cc:5031
+#: output.cc:4983
#, c-format
msgid "%s: incremental base file is empty"
msgstr "%s: файл бази Ð½Ð°Ñ€Ð¾Ñ‰ÐµÐ½Ð½Ñ Ñ” порожнім"
-#: output.cc:5043 output.cc:5141
+#: output.cc:4995 output.cc:5093
#, c-format
msgid "%s: open: %s"
msgstr "%s: відкриттÑ: %s"
-#: output.cc:5060
+#: output.cc:5012
#, c-format
msgid "%s: read failed: %s"
msgstr "%s: помилка під Ñ‡Ð°Ñ Ñпроби читаннÑ: %s"
-#: output.cc:5065
+#: output.cc:5017
#, c-format
msgid "%s: file too short: read only %lld of %lld bytes"
msgstr "%s: файл є надто коротким: прочитано лише %lld з %lld байтів"
-#: output.cc:5165
+#: output.cc:5117
#, c-format
msgid "%s: mremap: %s"
msgstr "%s: mremap: %s"
-#: output.cc:5184
+#: output.cc:5136
#, c-format
msgid "%s: mmap: %s"
msgstr "%s: mmap: %s"
-#: output.cc:5276
+#: output.cc:5228
#, c-format
msgid "%s: mmap: failed to allocate %lu bytes for output file: %s"
msgstr "%s: mmap: не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ %lu байтів пам'ÑÑ‚Ñ– Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ð° виведених даних: %s"
-#: output.cc:5294
+#: output.cc:5246
#, c-format
msgid "%s: munmap: %s"
msgstr "%s: munmap: %s"
-#: output.cc:5314
+#: output.cc:5266
#, c-format
msgid "%s: write: unexpected 0 return-value"
msgstr "%s: запиÑ: повернуто неочікуване Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ 0"
-#: output.cc:5316
+#: output.cc:5268
#, c-format
msgid "%s: write: %s"
msgstr "%s: запиÑ: %s"
-#: output.cc:5331
+#: output.cc:5283
#, c-format
msgid "%s: close: %s"
msgstr "%s: закриттÑ: %s"
@@ -3384,15 +3384,15 @@ msgstr "** переÑуваннÑ"
msgid "** group"
msgstr "** група"
-#: output.h:2597
+#: output.h:2581
msgid "** GOT"
msgstr "** GOT"
-#: output.h:2804
+#: output.h:2776
msgid "** dynamic"
msgstr "** динамічний"
-#: output.h:2948
+#: output.h:2920
msgid "** symtab xindex"
msgstr "** x-покажчик таблиці Ñимволів"
@@ -3452,144 +3452,140 @@ msgstr "%s: помилка запиÑу під Ñ‡Ð°Ñ Ñпроби ÑтвориÑ
msgid "input files added by plug-ins in --incremental mode not supported yet"
msgstr "підтримки файлів вхідних даних, доданих за допомогою додатків у режимі --incremental, ще не передбачено."
-#: powerpc.cc:1299
+#: powerpc.cc:1302
msgid "missing expected __tls_get_addr call"
msgstr "пропущено очікуваний виклик __tls_get_addr"
-#: powerpc.cc:2298 powerpc.cc:2635
+#: powerpc.cc:2292 powerpc.cc:2627
#, c-format
msgid "%s: ABI version %d is not compatible with ABI version %d output"
msgstr "%s: верÑÑ–Ñ ABI %d Ñ” неÑуміÑною з верÑією ABI %d результату"
-#: powerpc.cc:2332 powerpc.cc:2694
+#: powerpc.cc:2326 powerpc.cc:2686
#, c-format
msgid "%s: .opd invalid in abiv%d"
msgstr "%s: .opd є некоректним у abiv%d"
-#: powerpc.cc:2410
+#: powerpc.cc:2404
#, c-format
msgid "%s: unexpected reloc type %u in .opd section"
msgstr "%s: неочікуваний тип переÑуваннÑ, %u, у розділі .opd"
-#: powerpc.cc:2421
+#: powerpc.cc:2415
#, c-format
msgid "%s: .opd is not a regular array of opd entries"
msgstr "%s: opd не Ñ” звичайним маÑивом запиÑів opd"
-#: powerpc.cc:2563
+#: powerpc.cc:2555
#, c-format
msgid "%s: local symbol %d has invalid st_other for ABI version 1"
msgstr "%s: локальний Ñимвол %d має некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ st_other Ð´Ð»Ñ Ð²ÐµÑ€ÑÑ–Ñ— ABI 1"
-#: powerpc.cc:3303
+#: powerpc.cc:3290
#, c-format
msgid "%s:%s exceeds group size"
msgstr "%s:%s перевищує розмір групи"
-#: powerpc.cc:3651
+#: powerpc.cc:3641
#, c-format
msgid "%s:%s: branch in non-executable section, no long branch stub for you"
msgstr "%s:%s: Ð²Ñ–Ð´Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ Ñƒ невиконуваному розділі, Ð´Ð»Ñ Ð²Ð°Ñ Ð½ÐµÐ¼Ð°Ñ” шаблона довгої гілки"
-#: powerpc.cc:3769
+#: powerpc.cc:3758
#, c-format
msgid "%s: stub group size is too large; retrying with %#x"
msgstr "%s: груповий розмір заглушки Ñ” надто великим; робимо повторну Ñпробу з розміром %#x"
-#: powerpc.cc:5611
+#: powerpc.cc:5729
msgid "** glink"
msgstr "** glink"
-#: powerpc.cc:6258 powerpc.cc:6961
+#: powerpc.cc:6394 powerpc.cc:7109
#, c-format
msgid "linkage table error against `%s'"
msgstr "помилка у таблиці ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ «%s»"
-#: powerpc.cc:6261
+#: powerpc.cc:6397
#, c-format
msgid "linkage table error against `%s:[local %u]'"
msgstr "помилка у таблиці ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ «%s:[local %u]»"
-#: powerpc.cc:7090
+#: powerpc.cc:7236
msgid "** save/restore"
msgstr "** зберегти/відновити"
-#: powerpc.cc:7844
+#: powerpc.cc:8008
#, c-format
msgid "%s: unsupported reloc %u for IFUNC symbol"
msgstr "%s: непідтримуване переÑÑƒÐ²Ð°Ð½Ð½Ñ %u Ð´Ð»Ñ Ñимволу IFUNC"
-#: powerpc.cc:8128 powerpc.cc:8914
+#: powerpc.cc:8274 powerpc.cc:9060
#, c-format
msgid "tocsave symbol %u has bad shndx %u"
msgstr "Ñимвол tocsave %u має помилковий shndx %u"
-#: powerpc.cc:8407 powerpc.cc:9237
+#: powerpc.cc:8565 powerpc.cc:9397
#, c-format
msgid "%s: toc optimization is not supported for %#08x instruction"
msgstr "%s: Ð´Ð»Ñ Ñ–Ð½Ñтрукції %#08x не передбачено підтримки оптимізації toc"
-#: powerpc.cc:8473 powerpc.cc:9299
+#: powerpc.cc:8631 powerpc.cc:9459
#, c-format
msgid "%s: unsupported -mbss-plt code"
msgstr "%s: непідтримуваний код -mbss-plt"
-#: powerpc.cc:9646
+#: powerpc.cc:9806
#, c-format
msgid "split-stack stack size overflow at section %u offset %0zx"
msgstr "Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ розділеного Ñтека у розділі %u, зÑув %0zx"
-#: powerpc.cc:9717
+#: powerpc.cc:9877
msgid "--plt-localentry is especially dangerous without ld.so support to detect ABI violations"
msgstr "--plt-localentry оÑобливо небезпечний, Ñкщо у ld.so не передбачено підтримки виÑÐ²Ð»ÐµÐ½Ð½Ñ Ð¿Ð¾Ñ€ÑƒÑˆÐµÐ½ÑŒ ABI."
-#: powerpc.cc:9746
+#: powerpc.cc:9906
msgid "--plt-localentry is incompatible with power10 pc-relative code"
msgstr "--plt-localentry Ñ” неÑуміÑним із відноÑним щодо лічильника програми кодом power10"
-#: powerpc.cc:10024 powerpc.cc:10030
+#: powerpc.cc:10201 powerpc.cc:10207
#, c-format
msgid "%s uses hard float, %s uses soft float"
msgstr "%s викориÑтовує апаратну підтримку дійÑних чиÑел, а у %s — програмну"
-#: powerpc.cc:10036 powerpc.cc:10043
+#: powerpc.cc:10213 powerpc.cc:10220
#, c-format
msgid "%s uses double-precision hard float, %s uses single-precision hard float"
msgstr "у %s викориÑтовуєтьÑÑ Ð°Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð° підтримка дійÑних чиÑел з подвійною точніÑÑ‚ÑŽ, а у %s — апаратна підтримка Ð´Ð»Ñ Ð´Ñ–Ð¹Ñних чиÑел з одинарною точніÑÑ‚ÑŽ"
-#: powerpc.cc:10063 powerpc.cc:10069
+#: powerpc.cc:10240 powerpc.cc:10246
#, c-format
msgid "%s uses 64-bit long double, %s uses 128-bit long double"
msgstr "у %s викориÑтано 64-бітові довгі цілі Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ–Ð· подвійною точніÑÑ‚ÑŽ, а у %s — 128-бітові"
-#: powerpc.cc:10075 powerpc.cc:10081
+#: powerpc.cc:10252 powerpc.cc:10258
#, c-format
msgid "%s uses IBM long double, %s uses IEEE long double"
msgstr "у %s викориÑтано довгі цілі Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ–Ð· подвійною точніÑÑ‚ÑŽ IBM, а у %s — IEEE"
-#: powerpc.cc:10135 powerpc.cc:10141
+#: powerpc.cc:10312 powerpc.cc:10318
#, c-format
msgid "%s uses AltiVec vector ABI, %s uses SPE vector ABI"
msgstr "%s викориÑтовує векторний ABI AltiVec, %s викориÑтовує векторний ABI SPE"
-#: powerpc.cc:10170 powerpc.cc:10177
+#: powerpc.cc:10347 powerpc.cc:10354
#, c-format
msgid "%s uses r3/r4 for small structure returns, %s uses memory"
msgstr "у %s r3/r4 викориÑтовуєтьÑÑ Ð´Ð»Ñ Ð¿Ð¾Ð²ÐµÑ€Ð½ÐµÐ½Ð½Ñ Ð¼Ð°Ð»Ð¸Ñ… Ñтруктур, а у %s Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ викориÑтовуєтьÑÑ Ð¿Ð°Ð¼'ÑÑ‚ÑŒ"
-#: powerpc.cc:10465 powerpc.cc:10468
-msgid "__tls_get_addr call lacks marker reloc"
-msgstr "у виклику __tls_get_addr пропущено позначку переÑуваннÑ"
-
-#: powerpc.cc:10738
+#: powerpc.cc:10929
msgid "call lacks nop, can't restore toc; recompile with -fPIC"
msgstr "у виклику не виÑтачає nop, Ð²Ñ–Ð´Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ toc неможливе; зберіть повторно з -fPIC"
-#: powerpc.cc:12194 s390.cc:3474
+#: powerpc.cc:12381 s390.cc:3479
msgid "relocation overflow"
msgstr "Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ Ð¿ÐµÑ€ÐµÑуваннÑ"
-#: powerpc.cc:12196
+#: powerpc.cc:12383
msgid "try relinking with a smaller --stub-group-size"
msgstr "Ñпробуйте виконати повторне ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ñ–Ð· меншим значеннÑм --stub-group-size"
@@ -3723,42 +3719,42 @@ msgstr "Ñкрипт компонувальника"
msgid "linker defined"
msgstr "визначений компонувальник"
-#: s390.cc:1002
+#: s390.cc:1007
#, c-format
msgid "R_390_PC32DBL target misaligned at %llx"
msgstr "ціль R_390_PC32DBL не вирівнÑно у %llx"
-#: s390.cc:1094 tilegx.cc:2088 x86_64.cc:1809
+#: s390.cc:1099 tilegx.cc:2088 x86_64.cc:1809
msgid "out of patch space (PLT); relink with --incremental-full"
msgstr "вихід за межі латки (PLT); виконайте повторне ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð° допомогою --incremental-full"
-#: s390.cc:3672 s390.cc:3728 x86_64.cc:5349
+#: s390.cc:3677 s390.cc:3733 x86_64.cc:5349
#, c-format
msgid "unsupported reloc type %u"
msgstr "непідтримуваний тип переÑÑƒÐ²Ð°Ð½Ð½Ñ %u"
-#: s390.cc:3801
+#: s390.cc:3806
msgid "unsupported op for GD to IE"
msgstr "непідтримувана Ð¾Ð¿ÐµÑ€Ð°Ñ†Ñ–Ñ Ð´Ð»Ñ GD у IE"
-#: s390.cc:3850
+#: s390.cc:3855
msgid "unsupported op for GD to LE"
msgstr "непідтримувана Ð¾Ð¿ÐµÑ€Ð°Ñ†Ñ–Ñ Ð´Ð»Ñ GD у LE"
-#: s390.cc:3896
+#: s390.cc:3901
msgid "unsupported op for LD to LE"
msgstr "непідтримувана Ð¾Ð¿ÐµÑ€Ð°Ñ†Ñ–Ñ Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ²ÐµÐ´ÐµÐ½Ð½Ñ LD у LE"
-#: s390.cc:3984
+#: s390.cc:3989
msgid "unsupported op for IE to LE"
msgstr "непідтримувана Ð¾Ð¿ÐµÑ€Ð°Ñ†Ñ–Ñ Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ²ÐµÐ´ÐµÐ½Ð½Ñ IE у LE"
-#: s390.cc:4262
+#: s390.cc:4271
msgid "S/390 code fill of odd length requested"
msgstr "отримано запит щодо Ð·Ð°Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ ÐºÐ¾Ð´Ñƒ S/390 непарної довжини"
#. Should not happen.
-#: s390.cc:4309
+#: s390.cc:4318
msgid "instruction with PC32DBL not wholly within section"
msgstr "інÑÑ‚Ñ€ÑƒÐºÑ†Ñ–Ñ Ð· PC32DBL не перебуває повніÑÑ‚ÑŽ у межах розділу"
@@ -4093,27 +4089,27 @@ msgstr "versym Ð´Ð»Ñ Ñимволу %zu поза межами діапазонÑ
msgid "versym for symbol %zu has no name: %u"
msgstr "versym Ð´Ð»Ñ Ñимволу %zu не має назви: %u"
-#: symtab.cc:2639
+#: symtab.cc:2633
#, c-format
msgid "discarding version information for %s@%s, defined in unused shared library %s (linked with --as-needed)"
msgstr "відкидаємо дані щодо верÑÑ–Ñ— Ð´Ð»Ñ %s@%s, Ñ—Ñ… визначено у невикориÑтаній Ñпільній бібліотеці %s (Ñкомпоновано із --as-needed)"
-#: symtab.cc:3001 symtab.cc:3147
+#: symtab.cc:2995 symtab.cc:3141
#, c-format
msgid "%s: unsupported symbol section 0x%x"
msgstr "%s: непідтримуваний розділ Ñимволів 0x%x"
-#: symtab.cc:3479
+#: symtab.cc:3473
#, c-format
msgid "%s: symbol table entries: %zu; buckets: %zu\n"
msgstr "%s: запиÑів таблиці Ñимволів: %zu; блоків: %zu\n"
-#: symtab.cc:3482
+#: symtab.cc:3476
#, c-format
msgid "%s: symbol table entries: %zu\n"
msgstr "%s: запиÑів таблиці Ñимволів: %zu\n"
-#: symtab.cc:3639
+#: symtab.cc:3633
#, c-format
msgid "while linking %s: symbol '%s' defined in multiple places (possible ODR violation):"
msgstr "під Ñ‡Ð°Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ %s: Ñимвол «%s» визначено у декількох міÑцÑÑ… (можливе Ð¿Ð¾Ñ€ÑƒÑˆÐµÐ½Ð½Ñ ODR):"
@@ -4122,7 +4118,7 @@ msgstr "під Ñ‡Ð°Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ %s: Ñимвол «%s» визнÐ
#. which may not be the location we expect to intersect
#. with another definition. We could print the whole
#. set of locations, but that seems too verbose.
-#: symtab.cc:3646 symtab.cc:3649
+#: symtab.cc:3640 symtab.cc:3643
#, c-format
msgid " %s from %s\n"
msgstr " %s з %s\n"
@@ -4198,8 +4194,8 @@ msgstr "ПереÑÑƒÐ²Ð°Ð½Ð½Ñ TLS щодо некоректної інÑтруÐ
#. This output is intended to follow the GNU standards.
#: version.cc:65
#, c-format
-msgid "Copyright (C) 2021 Free Software Foundation, Inc.\n"
-msgstr "© Free Software Foundation, Inc., 2021\n"
+msgid "Copyright (C) 2022 Free Software Foundation, Inc.\n"
+msgstr "© Free Software Foundation, Inc., 2022\n"
#: version.cc:66
#, c-format
@@ -4261,3 +4257,6 @@ msgstr "Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÐµÑуваннÑ: поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð°
#, c-format
msgid "relocation overflow: reference to '%s'"
msgstr "Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÐµÑуваннÑ: поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° «%s»"
+
+#~ msgid "__tls_get_addr call lacks marker reloc"
+#~ msgstr "у виклику __tls_get_addr пропущено позначку переÑуваннÑ"
diff --git a/gprof/ChangeLog b/gprof/ChangeLog
index 199dc3f471f..99918c0d2cd 100644
--- a/gprof/ChangeLog
+++ b/gprof/ChangeLog
@@ -1,3 +1,21 @@
+2022-03-16 Nick Clifton <nickc@redhat.com>
+
+ * po/ru.po: Updated Russian translation.
+
+2022-01-24 Nick Clifton <nickc@redhat.com>
+
+ * po/ro.po: Updated Romanian translation.
+
+2022-01-22 Nick Clifton <nickc@redhat.com>
+
+ * configure: Regenerate.
+ * Makefile.in: Regenerate.
+ * po/gprof.pot: Regenerate.
+
+2022-01-22 Nick Clifton <nickc@redhat.com>
+
+ * 2.38 release branch created.
+
2021-09-27 Nick Alcock <nick.alcock@oracle.com>
* configure: Regenerate.
diff --git a/gprof/configure b/gprof/configure
index 8d74f9b22a5..41a26629653 100755
--- a/gprof/configure
+++ b/gprof/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for gprof 2.37.50.
+# Generated by GNU Autoconf 2.69 for gprof 2.38.50.
#
#
# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
@@ -587,8 +587,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='gprof'
PACKAGE_TARNAME='gprof'
-PACKAGE_VERSION='2.37.50'
-PACKAGE_STRING='gprof 2.37.50'
+PACKAGE_VERSION='2.38.50'
+PACKAGE_STRING='gprof 2.38.50'
PACKAGE_BUGREPORT=''
PACKAGE_URL=''
@@ -1338,7 +1338,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 gprof 2.37.50 to adapt to many kinds of systems.
+\`configure' configures gprof 2.38.50 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1409,7 +1409,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of gprof 2.37.50:";;
+ short | recursive ) echo "Configuration of gprof 2.38.50:";;
esac
cat <<\_ACEOF
@@ -1520,7 +1520,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-gprof configure 2.37.50
+gprof configure 2.38.50
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1885,7 +1885,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 gprof $as_me 2.37.50, which was
+It was created by gprof $as_me 2.38.50, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -2864,7 +2864,7 @@ fi
# Define the identity of the package.
PACKAGE='gprof'
- VERSION='2.37.50'
+ VERSION='2.38.50'
cat >>confdefs.h <<_ACEOF
@@ -4890,25 +4890,31 @@ else
lt_nm_to_check="$lt_nm_to_check nm"
fi
fi
- for lt_tmp_nm in $lt_nm_to_check; do
+ for lt_tmp_nm in "$lt_nm_to_check"; do
lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
IFS="$lt_save_ifs"
test -z "$ac_dir" && ac_dir=.
- case "$lt_tmp_nm" in
+ # Strip out any user-provided options from the nm to test twice,
+ # the first time to test to see if nm (rather than its options) has
+ # an explicit path, the second time to yield a file which can be
+ # nm'ed itself.
+ tmp_nm_path="`$ECHO "$lt_tmp_nm" | sed 's, -.*$,,'`"
+ case "$tmp_nm_path" in
*/*|*\\*) tmp_nm="$lt_tmp_nm";;
*) tmp_nm="$ac_dir/$lt_tmp_nm";;
esac
- if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+ tmp_nm_to_nm="`$ECHO "$tmp_nm" | sed 's, -.*$,,'`"
+ if test -f "$tmp_nm_to_nm" || test -f "$tmp_nm_to_nm$ac_exeext" ; then
# Check to see if the nm accepts a BSD-compat flag.
# Adding the `sed 1q' prevents false positives on HP-UX, which says:
# nm: unknown option "B" ignored
- case `"$tmp_nm" -B "$tmp_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
+ case `"$tmp_nm" -B "$tmp_nm_to_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
*$tmp_nm*) lt_cv_path_NM="$tmp_nm -B"
break
;;
*)
- case `"$tmp_nm" -p "$tmp_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
+ case `"$tmp_nm" -p "$tmp_nm_to_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
*$tmp_nm*)
lt_cv_path_NM="$tmp_nm -p"
break
@@ -10598,7 +10604,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 10601 "configure"
+#line 10607 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -10704,7 +10710,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 10707 "configure"
+#line 10713 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -12548,7 +12554,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 gprof $as_me 2.37.50, which was
+This file was extended by gprof $as_me 2.38.50, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -12614,7 +12620,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-gprof config.status 2.37.50
+gprof config.status 2.38.50
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
diff --git a/gprof/po/gprof.pot b/gprof/po/gprof.pot
index 890bb920322..13f20e8137c 100644
--- a/gprof/po/gprof.pot
+++ b/gprof/po/gprof.pot
@@ -7,8 +7,8 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: bug-binutils@gnu.org\n"
-"POT-Creation-Date: 2021-08-11 10:49+0100\n"
+"Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n"
+"POT-Creation-Date: 2022-01-22 12:30+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/gprof/po/ro.po b/gprof/po/ro.po
index 5bc10416443..d22c8e18fdf 100644
--- a/gprof/po/ro.po
+++ b/gprof/po/ro.po
@@ -1,60 +1,74 @@
-# Mesajele în limba românã pentru gprof-2.14rel030712
+# Mesajele în limba română pentru gprof-2.14rel030712
# Copyright (C) 2003 Free Software Foundation, Inc.
-# Acest fi?ier este distribuit sub aceea?i licen?? ca pachetul gprof
+# Acest fișier este distribuit sub aceeași licență ca pachetul gprof
+# This file is distributed under the same license as the binutils package.
+#
# Eugen Hoanca <eugenh@urban-grafx.ro>, 2003.
+# Traducere făcută de EH, pentru versiunea gprof 2.14rel030712.
+# Actualizare a mesajelor, de la fiÈ™ierul „gprof-2.36.90.potâ€.
+# Actualizare a codării caracteror, la codarea de caractere UTF-8.
+# Actualizare a diacriticelor de la „cu sedilă†la „cu virgulăâ€.
+# Actualizare a algoritmului formelor de plural (de la „două†la „treiâ€).
+# NU și a mesajelor traduse (acestea au rămas neschimbate).
+# Eliminare a mesajelor ce-au dispărut în ultima versiune.
+# Actualizări realizate de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>, 15.01.2022.
#
msgid ""
msgstr ""
-"Project-Id-Version: gprof 2.14rel030712\n"
-"POT-Creation-Date: 2003-07-11 13:58+0930\n"
-"PO-Revision-Date: 2003-08-23 09:02+0300\n"
-"Last-Translator: Eugen Hoanca <eugenh@urban-grafx.ro>\n"
+"Project-Id-Version: gprof 2.36.90\n"
+"Report-Msgid-Bugs-To: bug-binutils@gnu.org\n"
+"POT-Creation-Date: 2021-01-09 10:56+0000\n"
+"PO-Revision-Date: 2022-01-23 22:28+0100\n"
+"Last-Translator: Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>\n"
"Language-Team: Romanian <translation-team-ro@lists.sourceforge.net>\n"
-"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Language: ro\n"
"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=ISO-8859-2\n"
+"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2);\n"
+"X-Generator: Poedit 2.3.1\n"
-#: alpha.c:103 mips.c:57
+#: alpha.c:102 mips.c:54
msgid "<indirect child>"
msgstr "<copil indirect>"
-#: alpha.c:120 mips.c:74
+#: alpha.c:107 mips.c:59
#, c-format
msgid "[find_call] %s: 0x%lx to 0x%lx\n"
msgstr "[find_call] %s: 0x%lx spre 0x%lx\n"
-#: alpha.c:142
+#: alpha.c:129
#, c-format
msgid "[find_call] 0x%lx: jsr%s <indirect_child>\n"
msgstr "[find_call] 0x%lx: jsr%s <copil indirect>\n"
-#: alpha.c:152
+#: alpha.c:139
#, c-format
msgid "[find_call] 0x%lx: bsr"
msgstr "[find_call] 0x%lx: bsr"
-#: basic_blocks.c:134 call_graph.c:94 hist.c:98
+#: basic_blocks.c:128 call_graph.c:89 hist.c:106
#, c-format
msgid "%s: %s: unexpected end of file\n"
-msgstr "%s: %s: sfârºit brusc de fiºier\n"
+msgstr "%s: %s: sfârșit brusc de fișier\n"
-#: basic_blocks.c:202
+#: basic_blocks.c:196
#, c-format
msgid "%s: warning: ignoring basic-block exec counts (use -l or --line)\n"
-msgstr "%s: avertisment: se ignorã numãrãtoarea de blocuri executabile de bazã (folosiþi -l or --line)\n"
+msgstr "%s: avertisment: se ignoră numărătoarea de blocuri executabile de bază (folosiți -l or --line)\n"
#. FIXME: This only works if bfd_vma is unsigned long.
-#: basic_blocks.c:295 basic_blocks.c:305
+#: basic_blocks.c:289 basic_blocks.c:299
#, c-format
msgid "%s:%d: (%s:0x%lx) %lu executions\n"
-msgstr "%s:%d: (%s:0x%lx) %lu execuþii\n"
+msgstr "%s:%d: (%s:0x%lx) %lu execuții\n"
-#: basic_blocks.c:296 basic_blocks.c:306
+#: basic_blocks.c:290 basic_blocks.c:300
msgid "<unknown>"
msgstr "<necunoscut>"
-#: basic_blocks.c:553
+#: basic_blocks.c:543
#, c-format
msgid ""
"\n"
@@ -68,79 +82,82 @@ msgstr ""
"\n"
"Cele mai dese %d linii\n"
"\n"
-" Linie Repetãri\n"
+" Linie Repetări\n"
"\n"
-#: basic_blocks.c:577
+#: basic_blocks.c:567
+#, c-format
msgid ""
"\n"
"Execution Summary:\n"
"\n"
msgstr ""
"\n"
-"Cuprins al Execuþiei:\n"
+"Cuprins al Execuției:\n"
"\n"
-#: basic_blocks.c:578
+#: basic_blocks.c:568
#, c-format
msgid "%9ld Executable lines in this file\n"
-msgstr "%9ld Linii executanile în acest fiºier\n"
+msgstr "%9ld Linii executanile în acest fișier\n"
-#: basic_blocks.c:580
+#: basic_blocks.c:570
#, c-format
msgid "%9ld Lines executed\n"
msgstr "%9ld Linii executate\n"
-#: basic_blocks.c:581
+#: basic_blocks.c:571
#, c-format
msgid "%9.2f Percent of the file executed\n"
-msgstr "%9.2f Procent de fiºier executat\n"
+msgstr "%9.2f Procent de fișier executat\n"
-#: basic_blocks.c:585
+#: basic_blocks.c:575
#, c-format
msgid ""
"\n"
"%9lu Total number of line executions\n"
msgstr ""
"\n"
-"%9lu Numãr total de execuþii de linii\n"
+"%9lu Număr total de execuții de linii\n"
-#: basic_blocks.c:587
+#: basic_blocks.c:577
#, c-format
msgid "%9.2f Average executions per line\n"
-msgstr "%9.2f Mediu de execuþii pe linie\n"
+msgstr "%9.2f Mediu de execuții pe linie\n"
-#: call_graph.c:71
+#: call_graph.c:68
#, c-format
msgid "[cg_tally] arc from %s to %s traversed %lu times\n"
msgstr "[cg_tally] arc din %s spre %s a trecut de %lu ori\n"
-#: cg_print.c:73
+#: cg_print.c:74
+#, c-format
msgid ""
"\t\t Call graph (explanation follows)\n"
"\n"
msgstr ""
-"\t\t Grafic de apelãri (urmeazã explicaþia)\n"
+"\t\t Grafic de apelări (urmează explicația)\n"
"\n"
-#: cg_print.c:75
+#: cg_print.c:76
+#, c-format
msgid ""
"\t\t\tCall graph\n"
"\n"
msgstr ""
-"\t\t\tGrafic de apelãri\n"
+"\t\t\tGrafic de apelări\n"
"\n"
-#: cg_print.c:78 hist.c:363
+#: cg_print.c:79 hist.c:470
#, c-format
msgid ""
"\n"
"granularity: each sample hit covers %ld byte(s)"
msgstr ""
"\n"
-"granularitate: fiecare exemplu de potrivire(hit) acoperã %ld octet(þi)"
+"granularitate: fiecare exemplu de potrivire(hit) acoperă %ld octet(ți)"
-#: cg_print.c:82
+#: cg_print.c:83
#, c-format
msgid ""
" for %.2f%% of %.2f seconds\n"
@@ -149,7 +166,8 @@ msgstr ""
" pentru %.2f%% din %.2f secunde\n"
"\n"
-#: cg_print.c:86
+#: cg_print.c:87
+#, c-format
msgid ""
" no time propagated\n"
"\n"
@@ -157,225 +175,232 @@ msgstr ""
" nici un timp propagat\n"
"\n"
-#: cg_print.c:95 cg_print.c:98 cg_print.c:100
+#: cg_print.c:96 cg_print.c:101 cg_print.c:104
msgid "called"
msgstr "apel"
-#: cg_print.c:95 cg_print.c:100
+#: cg_print.c:96 cg_print.c:104
msgid "total"
msgstr "total"
-#: cg_print.c:95
+#: cg_print.c:96
msgid "parents"
-msgstr "pãrinþi"
+msgstr "părinți"
-#: cg_print.c:97 cg_print.c:98
+#: cg_print.c:98 cg_print.c:102
msgid "index"
msgstr "index"
-#: cg_print.c:97
-#, c-format
+#: cg_print.c:100
+#, no-c-format
msgid "%time"
msgstr "%timp"
-#: cg_print.c:97 cg_print.c:98
+#: cg_print.c:101
msgid "self"
msgstr "propriu"
-#: cg_print.c:97
+#: cg_print.c:101
msgid "descendants"
-msgstr "descendenþi"
+msgstr "descendenți"
-#: cg_print.c:98 hist.c:389
+#: cg_print.c:102 hist.c:496
msgid "name"
msgstr "nume"
-#: cg_print.c:100
+#: cg_print.c:104
msgid "children"
msgstr "copil"
-#: cg_print.c:105
+#: cg_print.c:109
#, c-format
msgid "index %% time self children called name\n"
msgstr "index %% timp propriu copil apel nume\n"
-#: cg_print.c:129
+#: cg_print.c:132
#, c-format
msgid " <cycle %d as a whole> [%d]\n"
-msgstr " <trecere prin %d ca un întreg> [%d]\n"
+msgstr " <trecere prin %d ca un întreg> [%d]\n"
-#: cg_print.c:363
+#: cg_print.c:358
#, c-format
msgid "%6.6s %5.5s %7.7s %11.11s %7.7s %7.7s <spontaneous>\n"
msgstr "%6.6s %5.5s %7.7s %11.11s %7.7s %7.7s <spontan>\n"
-#: cg_print.c:364
+#: cg_print.c:359
#, c-format
msgid "%6.6s %5.5s %7.7s %7.7s %7.7s %7.7s <spontaneous>\n"
msgstr "%6.6s %5.5s %7.7s %7.7s %7.7s %7.7s <spontan>\n"
-#: cg_print.c:604
+#: cg_print.c:593
+#, c-format
msgid ""
"Index by function name\n"
"\n"
msgstr ""
-"Indexare dupã numele funcþiei\n"
+"Indexare după numele funcției\n"
"\n"
-#: cg_print.c:661 cg_print.c:670
+#: cg_print.c:650 cg_print.c:659
#, c-format
msgid "<cycle %d>"
msgstr "<trecere prin %d>"
-#: corefile.c:64
-#, c-format
-msgid "%s: could not open %s.\n"
-msgstr "%s: nu am putut deschide %s.\n"
-
-#: corefile.c:78 corefile.c:112
+#: corefile.c:61
#, c-format
msgid "%s: unable to parse mapping file %s.\n"
-msgstr "%s: nu s-a putut analiza(parse) fiºierul de mapping %s.\n"
+msgstr "%s: nu s-a putut analiza(parse) fișierul de mapping %s.\n"
-#: corefile.c:155
+#: corefile.c:89 corefile.c:523
#, c-format
-msgid "%s: %s: not in a.out format\n"
-msgstr "%s: %s: nu este în format a.out\n"
+msgid "%s: could not open %s.\n"
+msgstr "%s: nu am putut deschide %s.\n"
+
+#: corefile.c:193
+#, fuzzy, c-format
+msgid "%s: %s: not in executable format\n"
+msgstr "%s: %s: nu este în format a.out\n"
-#: corefile.c:166
+#: corefile.c:204
#, c-format
msgid "%s: can't find .text section in %s\n"
-msgstr "%s: nu pot gãsi secþiunea .text %s\n"
+msgstr "%s: nu pot găsi secțiunea .text %s\n"
-#: corefile.c:225
+#: corefile.c:278
#, c-format
msgid "%s: ran out room for %lu bytes of text space\n"
-msgstr "%s: locaþie(room) plinã pentru %lu octeþi de spaþiu de text\n"
+msgstr "%s: locație(room) plină pentru %lu octeți de spațiu de text\n"
-#: corefile.c:239
+#: corefile.c:292
#, c-format
msgid "%s: can't do -c\n"
msgstr "%s: nu pot face -c\n"
-#: corefile.c:276
+#: corefile.c:331
#, c-format
msgid "%s: -c not supported on architecture %s\n"
msgstr "%s: -c nu este suportat pe arhitectura %s\n"
-#: corefile.c:447
+#: corefile.c:532 corefile.c:637
#, c-format
msgid "%s: file `%s' has no symbols\n"
-msgstr "%s: fiºierul `%s' nu are simboluri\n"
+msgstr "%s: fișierul `%s' nu are simboluri\n"
-#: corefile.c:758
+#: corefile.c:537
+#, fuzzy, c-format
+msgid "%s: file `%s' has too many symbols\n"
+msgstr "%s: fișierul `%s' nu are simboluri\n"
+
+#: corefile.c:904
#, c-format
msgid "%s: somebody miscounted: ltab.len=%d instead of %ld\n"
-msgstr "%s: cineva a numãrat greºit: ltab.len=%d în loc de %ld\n"
+msgstr "%s: cineva a numărat greșit: ltab.len=%d în loc de %ld\n"
-#: gmon_io.c:82
+#: gmon_io.c:83
#, c-format
msgid "%s: address size has unexpected value of %u\n"
-msgstr "%s: mãrimea adresei are valoarea neaºteptatã de %u\n"
+msgstr "%s: mărimea adresei are valoarea neașteptată de %u\n"
-#: gmon_io.c:345 gmon_io.c:440
+#: gmon_io.c:318 gmon_io.c:414
#, c-format
msgid "%s: file too short to be a gmon file\n"
-msgstr "%s: fiºier prea scurt pentru a fi un fiºier gmon\n"
+msgstr "%s: fișier prea scurt pentru a fi un fișier gmon\n"
-#: gmon_io.c:355 gmon_io.c:483
+#: gmon_io.c:328 gmon_io.c:457
#, c-format
msgid "%s: file `%s' has bad magic cookie\n"
-msgstr "%s: fiºierul `%s' are un magic cookie eronat\n"
+msgstr "%s: fișierul `%s' are un magic cookie eronat\n"
-#: gmon_io.c:366
+#: gmon_io.c:339
#, c-format
msgid "%s: file `%s' has unsupported version %d\n"
-msgstr "%s: fiºierul `%s' are versiunea nesuportatã %d\n"
+msgstr "%s: fișierul `%s' are versiunea nesuportată %d\n"
-#: gmon_io.c:396
+#: gmon_io.c:369
#, c-format
msgid "%s: %s: found bad tag %d (file corrupted?)\n"
-msgstr "%s: %s: s-a gãsit marcaj(tag) greºit %d (fiºier corupt?)\n"
+msgstr "%s: %s: s-a găsit marcaj(tag) greșit %d (fișier corupt?)\n"
-#: gmon_io.c:462
+#: gmon_io.c:436
#, c-format
msgid "%s: profiling rate incompatible with first gmon file\n"
-msgstr "%s: ratã profilatã incompatibilã cu primul fiºier gmon\n"
+msgstr "%s: rată profilată incompatibilă cu primul fișier gmon\n"
-#: gmon_io.c:510
+#: gmon_io.c:487
#, c-format
msgid "%s: incompatible with first gmon file\n"
-msgstr "%s: incompatibil cu primul fiºier gmon\n"
+msgstr "%s: incompatibil cu primul fișier gmon\n"
-#: gmon_io.c:538
+#: gmon_io.c:517
#, c-format
msgid "%s: file '%s' does not appear to be in gmon.out format\n"
-msgstr "%s: fiºierul '%s' nupare sã fie în format gmon.out\n"
+msgstr "%s: fișierul '%s' nupare să fie în format gmon.out\n"
-#: gmon_io.c:559
+#: gmon_io.c:530
#, c-format
msgid "%s: unexpected EOF after reading %d/%d bins\n"
-msgstr "%s: EOF neaºteptat dupã citirea a %d/%d bin-uri\n"
+msgstr "%s: EOF neașteptat după citirea a %d/%d bin-uri\n"
-#: gmon_io.c:592
+#: gmon_io.c:562
+#, c-format
msgid "time is in ticks, not seconds\n"
-msgstr "timpul este în bãtãi(ticks), nu în secunde\n"
+msgstr "timpul este în bătăi(ticks), nu în secunde\n"
-#: gmon_io.c:598 gmon_io.c:775
+#: gmon_io.c:568 gmon_io.c:748
#, c-format
msgid "%s: don't know how to deal with file format %d\n"
-msgstr "%s: nu ºtiu cum sã mã descurc cu formatul de fiºier %d\n"
+msgstr "%s: nu știu cum să mă descurc cu formatul de fișier %d\n"
-#: gmon_io.c:605
+#: gmon_io.c:578
#, c-format
msgid "File `%s' (version %d) contains:\n"
-msgstr "Fiºierul `%s' (versiunea %d) conþine:\n"
+msgstr "Fișierul `%s' (versiunea %d) conține:\n"
-#: gmon_io.c:608
+#: gmon_io.c:581
#, c-format
msgid "\t%d histogram record\n"
-msgstr "\t%d înregistrare histogramã\n"
+msgstr "\t%d înregistrare histogramă\n"
-#: gmon_io.c:609
+#: gmon_io.c:582
#, c-format
msgid "\t%d histogram records\n"
-msgstr "\t%d înregistrãri histogramã\n"
+msgstr "\t%d înregistrări histogramă\n"
-#: gmon_io.c:611
+#: gmon_io.c:584
#, c-format
msgid "\t%d call-graph record\n"
-msgstr "\t%d înregistrare grafic apelãri\n"
+msgstr "\t%d înregistrare grafic apelări\n"
-#: gmon_io.c:612
+#: gmon_io.c:585
#, c-format
msgid "\t%d call-graph records\n"
-msgstr "\t%d înregistrãri grafic apelãri\n"
+msgstr "\t%d înregistrări grafic apelări\n"
-#: gmon_io.c:614
+#: gmon_io.c:587
#, c-format
msgid "\t%d basic-block count record\n"
-msgstr "\t%d înregistrare repetãri de blocuri de bazã\n"
+msgstr "\t%d înregistrare repetări de blocuri de bază\n"
-#: gmon_io.c:615
+#: gmon_io.c:588
#, c-format
msgid "\t%d basic-block count records\n"
-msgstr "\t%d înregistrãri repetãri de blocuri de bazã\n"
+msgstr "\t%d înregistrări repetări de blocuri de bază\n"
-#: gprof.c:163
-#, c-format
+#: gprof.c:162
+#, fuzzy, c-format
msgid ""
-"Usage: %s [-[abcDhilLsTvwxyz]] [-[ACeEfFJnNOpPqQZ][name]] [-I dirs]\n"
+"Usage: %s [-[abcDhilLrsTvwxyz]] [-[ACeEfFJnNOpPqQRStZ][name]] [-I dirs]\n"
"\t[-d[num]] [-k from/to] [-m min-count] [-t table-length]\n"
"\t[--[no-]annotated-source[=name]] [--[no-]exec-counts[=name]]\n"
"\t[--[no-]flat-profile[=name]] [--[no-]graph[=name]]\n"
"\t[--[no-]time=name] [--all-lines] [--brief] [--debug[=level]]\n"
-"\t[--function-ordering] [--file-ordering]\n"
+"\t[--function-ordering] [--file-ordering] [--inline-file-names]\n"
"\t[--directory-path=dirs] [--display-unused-functions]\n"
"\t[--file-format=name] [--file-info] [--help] [--line] [--min-count=n]\n"
"\t[--no-static] [--print-path] [--separate-files]\n"
"\t[--static-call-graph] [--sum] [--table-length=len] [--traditional]\n"
"\t[--version] [--width=n] [--ignore-non-functions]\n"
-"\t[--demangle[=STYLE]] [--no-demangle]\n"
+"\t[--demangle[=STYLE]] [--no-demangle] [--external-symbol-table=name] [@FILE]\n"
"\t[image-file] [profile-file...]\n"
msgstr ""
"Folosiree: %s [-[abcDhilLsTvwxyz]] [-[ACeEfFJnNOpPqQZ][name]] [-I dirs]\n"
@@ -392,76 +417,99 @@ msgstr ""
"\t[--demangle[=STIL]] [--no-demangle]\n"
"\t[image-file] [profile-file...]\n"
-#: gprof.c:179
+#: gprof.c:178
#, c-format
msgid "Report bugs to %s\n"
-msgstr "Raportaþi erorile(bugs) la %s\n"
+msgstr "Raportați erorile(bugs) la %s\n"
-#: gprof.c:253
+#: gprof.c:254
#, c-format
msgid "%s: debugging not supported; -d ignored\n"
msgstr "%s: debugging nesuportat; -d ignorat\n"
-#: gprof.c:333
+#: gprof.c:340
#, c-format
msgid "%s: unknown file format %s\n"
-msgstr "%s: format fiºier necunoscut %s\n"
+msgstr "%s: format fișier necunoscut %s\n"
#. This output is intended to follow the GNU standards document.
-#: gprof.c:417
+#: gprof.c:428
#, c-format
msgid "GNU gprof %s\n"
msgstr "GNU gprof %s\n"
-#: gprof.c:418
+#: gprof.c:429
+#, c-format
msgid "Based on BSD gprof, copyright 1983 Regents of the University of California.\n"
msgstr "Bazat pe BSD gprof, copyright 1983 Regents of the University of California.\n"
-#: gprof.c:419
+#: gprof.c:430
+#, c-format
msgid "This program is free software. This program has absolutely no warranty.\n"
-msgstr "Acest program este software liber. Acest program nu are absolut nici o garanþie.\n"
+msgstr "Acest program este software liber. Acest program nu are absolut nici o garanție.\n"
-#: gprof.c:460
+#: gprof.c:471
#, c-format
msgid "%s: unknown demangling style `%s'\n"
-msgstr "%s: stil necunoscut de îmbinare (demangling) `%s'\n"
+msgstr "%s: stil necunoscut de îmbinare (demangling) `%s'\n"
-#: gprof.c:480
+#: gprof.c:494
#, c-format
msgid "%s: Only one of --function-ordering and --file-ordering may be specified.\n"
msgstr "%s: Doar unul dintre --function-ordering sau --file-ordering poate fi specificat.\n"
-#: gprof.c:578
+#: gprof.c:546
#, c-format
msgid "%s: sorry, file format `prof' is not yet supported\n"
-msgstr "%s: nu pare rãu, formatul de fiºier `prof' nu este încã suportat\n"
+msgstr "%s: nu pare rău, formatul de fișier `prof' nu este încă suportat\n"
-#: gprof.c:639
+#: gprof.c:600
#, c-format
msgid "%s: gmon.out file is missing histogram\n"
-msgstr "%s: Fiºierului gmon.out îi lipseºte histograma\n"
+msgstr "%s: Fișierului gmon.out îi lipsește histograma\n"
-#: gprof.c:646
+#: gprof.c:607
#, c-format
msgid "%s: gmon.out file is missing call-graph data\n"
-msgstr "%s: Fiºierului gmon.out îi lipsesc datele graficului de apelãri\n"
+msgstr "%s: Fișierului gmon.out îi lipsesc datele graficului de apelări\n"
-#: hist.c:127
+#: hist.c:134
#, c-format
-msgid "%s: `%s' is incompatible with first gmon file\n"
-msgstr "%s: `%s' este incompatibil cu primul fiºier gmon\n"
+msgid ""
+"%s: dimension unit changed between histogram records\n"
+"%s: from '%s'\n"
+"%s: to '%s'\n"
+msgstr ""
-#: hist.c:143
+#: hist.c:144
#, c-format
-msgid "%s: %s: unexpected EOF after reading %d of %d samples\n"
-msgstr "%s: %s: EOF neaºteptat dupã citirea a %d din %d exemple\n"
+msgid ""
+"%s: dimension abbreviation changed between histogram records\n"
+"%s: from '%c'\n"
+"%s: to '%c'\n"
+msgstr ""
-#: hist.c:359
+#: hist.c:158
+#, fuzzy, c-format
+msgid "%s: different scales in histogram records"
+msgstr "\t%d înregistrări histogramă\n"
+
+#: hist.c:195
+#, fuzzy, c-format
+msgid "%s: overlapping histogram records\n"
+msgstr "\t%d înregistrări histogramă\n"
+
+#: hist.c:229
+#, fuzzy, c-format
+msgid "%s: %s: unexpected EOF after reading %u of %u samples\n"
+msgstr "%s: %s: EOF neașteptat după citirea a %d din %d exemple\n"
+
+#: hist.c:466
#, c-format
msgid "%c%c/call"
msgstr "%c%c/apel"
-#: hist.c:367
+#: hist.c:474
#, c-format
msgid ""
" for %.2f%% of %.2f %s\n"
@@ -470,16 +518,17 @@ msgstr ""
"pentru %.2f%% din %.2f %s\n"
"\n"
-#: hist.c:373
+#: hist.c:480
#, c-format
msgid ""
"\n"
"Each sample counts as %g %s.\n"
msgstr ""
"\n"
-"Fiecare exemplu conteazã ca ºi %g %s.\n"
+"Fiecare exemplu contează ca și %g %s.\n"
-#: hist.c:378
+#: hist.c:485
+#, c-format
msgid ""
" no time accumulated\n"
"\n"
@@ -487,27 +536,28 @@ msgstr ""
" nici un timp acumulat\n"
"\n"
-#: hist.c:385
+#: hist.c:492
msgid "cumulative"
msgstr "cumulativ"
-#: hist.c:385
+#: hist.c:492
msgid "self "
msgstr "propriu "
-#: hist.c:385
+#: hist.c:492
msgid "total "
msgstr "total "
-#: hist.c:388
+#: hist.c:495
msgid "time"
msgstr "timp"
-#: hist.c:388
+#: hist.c:495
msgid "calls"
-msgstr "apelãri"
+msgstr "apelări"
-#: hist.c:481
+#: hist.c:584
+#, c-format
msgid ""
"\n"
"\n"
@@ -519,31 +569,37 @@ msgstr ""
"\n"
"profil clar:\n"
-#: hist.c:487
+#: hist.c:590
+#, c-format
msgid "Flat profile:\n"
msgstr "Profil clar:\n"
-#: mips.c:85
+#: hist.c:711
+#, c-format
+msgid "%s: found a symbol that covers several histogram records"
+msgstr ""
+
+#: mips.c:71
#, c-format
msgid "[find_call] 0x%lx: jal"
msgstr "[find_call] 0x%lx: jal"
-#: mips.c:110
+#: mips.c:99
#, c-format
msgid "[find_call] 0x%lx: jalr\n"
msgstr "[find_call] 0x%lx: jalr\n"
-#: source.c:166
+#: source.c:162
#, c-format
msgid "%s: could not locate `%s'\n"
msgstr "%s: nu am putut localiza `%s'\n"
-#: source.c:241
+#: source.c:237
#, c-format
msgid "*** File %s:\n"
-msgstr "*** Fiºier %s:\n"
+msgstr "*** Fișier %s:\n"
-#: utils.c:109
+#: utils.c:103
#, c-format
msgid " <cycle %d>"
msgstr " <trecere prin %d>"
diff --git a/gprof/po/ru.po b/gprof/po/ru.po
index 06ca0645241..51e5871b9ae 100644
--- a/gprof/po/ru.po
+++ b/gprof/po/ru.po
@@ -1,36 +1,48 @@
-# translation to Russian
-# Copyright (C) 2003, 2005, 2006, 2009 Free Software Foundation, Inc.
+# Mesajele în limba română pentru gprof-2.14rel030712
+# Copyright (C) 2003 Free Software Foundation, Inc.
+# Acest fișier este distribuit sub aceeași licență ca pachetul gprof
# This file is distributed under the same license as the binutils package.
-# Yuri Kozlov <yuray@komyakino.ru>, 2010, 2017, 2020.
+#
+# Eugen Hoanca <eugenh@urban-grafx.ro>, 2003.
+# Traducere făcută de EH, pentru versiunea gprof 2.14rel030712.
+# Actualizare a mesajelor, de la fiÈ™ierul „gprof-2.36.90.potâ€.
+# Actualizare a codării caracteror, la codarea de caractere UTF-8.
+# Actualizare a diacriticelor de la „cu sedilă†la „cu virgulăâ€.
+# Actualizare a algoritmului formelor de plural (de la „două†la „treiâ€).
+# NU și a mesajelor traduse (acestea au rămas neschimbate).
+# Eliminare a mesajelor ce-au dispărut în ultima versiune.
+# Actualizări realizate de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>, 15.01.2022.
+# Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>, 2022.
+#
msgid ""
msgstr ""
-"Project-Id-Version: gprof 2.33.90\n"
+"Project-Id-Version: gprof 2.36.90\n"
"Report-Msgid-Bugs-To: bug-binutils@gnu.org\n"
-"POT-Creation-Date: 2020-01-18 14:04+0000\n"
-"PO-Revision-Date: 2020-01-19 17:30+0300\n"
-"Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n"
-"Language-Team: Russian <gnu@d07.ru>\n"
-"Language: ru\n"
+"POT-Creation-Date: 2021-01-09 10:56+0000\n"
+"PO-Revision-Date: 2022-02-19 17:10+0100\n"
+"Last-Translator: Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>\n"
+"Language-Team: Romanian <translation-team-ro@lists.sourceforge.net>\n"
+"Language: ro\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==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2);\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
-"X-Generator: Lokalize 2.0\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"
+"X-Generator: Poedit 3.0.1\n"
#: alpha.c:102 mips.c:54
msgid "<indirect child>"
-msgstr "<коÑвенный потомок>"
+msgstr "<copil indirect>"
#: alpha.c:107 mips.c:59
#, c-format
msgid "[find_call] %s: 0x%lx to 0x%lx\n"
-msgstr "[find_call] %s: 0x%lx к 0x%lx\n"
+msgstr "[find_call] %s: 0x%lx spre 0x%lx\n"
#: alpha.c:129
#, c-format
msgid "[find_call] 0x%lx: jsr%s <indirect_child>\n"
-msgstr "[find_call] 0x%lx: jsr%s <коÑвенный_потомок>\n"
+msgstr "[find_call] 0x%lx: jsr%s <copil indirect>\n"
#: alpha.c:139
#, c-format
@@ -40,22 +52,22 @@ msgstr "[find_call] 0x%lx: bsr"
#: basic_blocks.c:128 call_graph.c:89 hist.c:106
#, c-format
msgid "%s: %s: unexpected end of file\n"
-msgstr "%s: %s: неожиданный конец файла\n"
+msgstr "%s: %s: sfârșit neașteptat al fișierului\n"
#: basic_blocks.c:196
#, c-format
msgid "%s: warning: ignoring basic-block exec counts (use -l or --line)\n"
-msgstr "%s: предупреждение: игнорируетÑÑ Ñчётчик выполнений проÑтого блока (иÑпользуйте -l или --line)\n"
+msgstr "%s: avertisment: se ignoră numărul de execuții ale blocului de bază (utilizați -l sau --line)\n"
#. FIXME: This only works if bfd_vma is unsigned long.
#: basic_blocks.c:289 basic_blocks.c:299
#, c-format
msgid "%s:%d: (%s:0x%lx) %lu executions\n"
-msgstr "%s:%d: (%s:0x%lx) %lu выполнений\n"
+msgstr "%s:%d: (%s:0x%lx) %lu execuții\n"
#: basic_blocks.c:290 basic_blocks.c:300
msgid "<unknown>"
-msgstr "<неизвеÑтно>"
+msgstr "<necunoscut>"
#: basic_blocks.c:543
#, c-format
@@ -69,9 +81,9 @@ msgid ""
msgstr ""
"\n"
"\n"
-"Первые %d Ñтрок:\n"
+"Primele %d linii\n"
"\n"
-" Строка Счётчик\n"
+" Linie Repetări\n"
"\n"
#: basic_blocks.c:567
@@ -82,24 +94,32 @@ msgid ""
"\n"
msgstr ""
"\n"
-"Итог по выполнению:\n"
+"Cuprins al Execuției:\n"
"\n"
#: basic_blocks.c:568
#, c-format
msgid "%9ld Executable lines in this file\n"
-msgstr "%9ld иÑполнÑемых Ñтрок в Ñтом файле\n"
+msgstr "%9ld Linii executabile în acest fișier\n"
#: basic_blocks.c:570
#, c-format
msgid "%9ld Lines executed\n"
-msgstr "%9ld Ñтрок выполнено\n"
+msgstr "%9ld Linii executate\n"
#: basic_blocks.c:571
#, c-format
msgid "%9.2f Percent of the file executed\n"
-msgstr "%9.2f процент файла выполнено\n"
-
+msgstr "%9.2f Procent de fișier executat\n"
+
+# R-GC, scrie:
+# traducerea inițială:
+# „Numărul total de execuÈ›ii de linieâ€
+# traducerea actuală:
+# „Numărul total de execuÈ›ii ale liniilorâ€
+# probabil, traducerea cu adevărat corectă:
+# „Numărul total de linii executateâ€
+# Idei ?
#: basic_blocks.c:575
#, c-format
msgid ""
@@ -107,17 +127,17 @@ msgid ""
"%9lu Total number of line executions\n"
msgstr ""
"\n"
-"%9lu Полное количеÑтво выполненных Ñтрок\n"
+"%9lu Numărul total de execuții de linie\n"
#: basic_blocks.c:577
#, c-format
msgid "%9.2f Average executions per line\n"
-msgstr "%9.2f Среднее количеÑтво выполнений на Ñтроку\n"
+msgstr "%9.2f Media aritmetică de execuții pe linie\n"
#: call_graph.c:68
#, c-format
msgid "[cg_tally] arc from %s to %s traversed %lu times\n"
-msgstr "[cg_tally] ребро из %s в %s проходит %lu раз\n"
+msgstr "[cg_tally] arcul din %s spre %s a trecut de %lu ori\n"
#: cg_print.c:74
#, c-format
@@ -125,7 +145,7 @@ msgid ""
"\t\t Call graph (explanation follows)\n"
"\n"
msgstr ""
-"\t\t Граф вызовов (объÑÑÐ½ÐµÐ½Ð¸Ñ Ð´Ð°Ð»ÐµÐµ)\n"
+"\t\t Grafic de apelări (urmează explicația)\n"
"\n"
#: cg_print.c:76
@@ -134,7 +154,7 @@ msgid ""
"\t\t\tCall graph\n"
"\n"
msgstr ""
-"\t\t\tГраф вызовов\n"
+"\t\t\tGrafic de apelări\n"
"\n"
#: cg_print.c:79 hist.c:470
@@ -144,7 +164,7 @@ msgid ""
"granularity: each sample hit covers %ld byte(s)"
msgstr ""
"\n"
-"гранулÑциÑ: каждый образец охватывает %ld байт"
+"granularitate: fiecare exemplu de potrivire(hit) acoperă %ld octet(ți)"
#: cg_print.c:83
#, c-format
@@ -152,7 +172,7 @@ msgid ""
" for %.2f%% of %.2f seconds\n"
"\n"
msgstr ""
-" Ð´Ð»Ñ %.2f%% за %.2f Ñекунд\n"
+" pentru %.2f%% din %.2f secunde\n"
"\n"
#: cg_print.c:87
@@ -161,65 +181,67 @@ msgid ""
" no time propagated\n"
"\n"
msgstr ""
-" нет накопленного времени\n"
+" nici un timp propagat\n"
"\n"
#: cg_print.c:96 cg_print.c:101 cg_print.c:104
msgid "called"
-msgstr "вызвана"
+msgstr "apel"
#: cg_print.c:96 cg_print.c:104
msgid "total"
-msgstr "вÑего"
+msgstr "total"
#: cg_print.c:96
msgid "parents"
-msgstr "родителей"
+msgstr "părinți"
#: cg_print.c:98 cg_print.c:102
msgid "index"
-msgstr "индекÑ"
+msgstr "index"
#: cg_print.c:100
#, no-c-format
msgid "%time"
-msgstr "%time"
+msgstr "%timp"
+# R-GC, scrie:
+# iniÈ›ial era: „propriuâ€
#: cg_print.c:101
msgid "self"
-msgstr "Ñама"
+msgstr "el însuși"
#: cg_print.c:101
msgid "descendants"
-msgstr "потомков"
+msgstr "descendenți"
#: cg_print.c:102 hist.c:496
msgid "name"
-msgstr "имÑ"
+msgstr "nume"
#: cg_print.c:104
msgid "children"
-msgstr "потомок"
+msgstr "copil"
#: cg_print.c:109
#, c-format
msgid "index %% time self children called name\n"
-msgstr "Ð¸Ð½Ð´ÐµÐºÑ %% Ð²Ñ€ÐµÐ¼Ñ Ñама потомок вызван имÑ\n"
+msgstr "index %% timp el_însuși copil apel nume\n"
#: cg_print.c:132
#, c-format
msgid " <cycle %d as a whole> [%d]\n"
-msgstr " <охватывающий цикл %d> [%d]\n"
+msgstr " <ciclul %d ca un întreg> [%d]\n"
#: cg_print.c:358
#, c-format
msgid "%6.6s %5.5s %7.7s %11.11s %7.7s %7.7s <spontaneous>\n"
-msgstr "%6.6s %5.5s %7.7s %11.11s %7.7s %7.7s <Ñамопроизвольно>\n"
+msgstr "%6.6s %5.5s %7.7s %11.11s %7.7s %7.7s <spontan>\n"
#: cg_print.c:359
#, c-format
msgid "%6.6s %5.5s %7.7s %7.7s %7.7s %7.7s <spontaneous>\n"
-msgstr "%6.6s %5.5s %7.7s %7.7s %7.7s %7.7s <Ñамопроизвольно>\n"
+msgstr "%6.6s %5.5s %7.7s %7.7s %7.7s %7.7s <spontan>\n"
#: cg_print.c:593
#, c-format
@@ -227,153 +249,155 @@ msgid ""
"Index by function name\n"
"\n"
msgstr ""
-"Ð˜Ð½Ð´ÐµÐºÑ Ð¿Ð¾ имени функции\n"
+"Indexare după numele funcției\n"
"\n"
#: cg_print.c:650 cg_print.c:659
#, c-format
msgid "<cycle %d>"
-msgstr "<цикл %d>"
+msgstr "<ciclu %d>"
#: corefile.c:61
#, c-format
msgid "%s: unable to parse mapping file %s.\n"
-msgstr "%s: не удалоÑÑŒ разобрать отображённый файл %s.\n"
+msgstr "%s: nu se poate analiza fișierul de asocieri %s.\n"
#: corefile.c:89 corefile.c:523
#, c-format
msgid "%s: could not open %s.\n"
-msgstr "%s: не удалоÑÑŒ открыть %s.\n"
+msgstr "%s: nu s-a putut deschide %s.\n"
#: corefile.c:193
#, c-format
msgid "%s: %s: not in executable format\n"
-msgstr "%s: %s: не в иÑполнÑемым формате\n"
+msgstr "%s: %s: nu este în format executabil\n"
#: corefile.c:204
#, c-format
msgid "%s: can't find .text section in %s\n"
-msgstr "%s: не удалоÑÑŒ найти раздел .text в %s\n"
+msgstr "%s: nu se poate găsi secțiunea .text în %s\n"
#: corefile.c:278
#, c-format
msgid "%s: ran out room for %lu bytes of text space\n"
-msgstr "%s: не хватает меÑто Ð´Ð»Ñ %lu байт в проÑтранÑтве кода\n"
+msgstr "%s: a rămas fără spațiu pentru %lu octeți de spațiu de text\n"
#: corefile.c:292
#, c-format
msgid "%s: can't do -c\n"
-msgstr "%s: не удалоÑÑŒ выполнить -c\n"
+msgstr "%s: nu se poate face -c\n"
#: corefile.c:331
#, c-format
msgid "%s: -c not supported on architecture %s\n"
-msgstr "%s: -c не поддерживаетÑÑ Ð½Ð° архитектуре %s\n"
+msgstr "%s: -c nu este suportat pe arhitectura %s\n"
#: corefile.c:532 corefile.c:637
#, c-format
msgid "%s: file `%s' has no symbols\n"
-msgstr "%s: файл «%s» не Ñодержит Ñимволов\n"
+msgstr "%s: fișierul „%s†nu are simboluri\n"
#: corefile.c:537
#, c-format
msgid "%s: file `%s' has too many symbols\n"
-msgstr "%s: в файле «%s» ÑодержитÑÑ Ñлишком много Ñимволов\n"
+msgstr "%s: fișierul „%s†are prea multe simboluri\n"
#: corefile.c:904
#, c-format
msgid "%s: somebody miscounted: ltab.len=%d instead of %ld\n"
-msgstr "%s: кто-то обÑчиталÑÑ: ltab.len=%d вмеÑто %ld\n"
+msgstr "%s: cineva a numărat greșit: ltab.len=%d în loc de %ld\n"
#: gmon_io.c:83
#, c-format
msgid "%s: address size has unexpected value of %u\n"
-msgstr "%s: размер адреÑа Ñодержит неожиданное значение %u\n"
+msgstr "%s: mărimea adresei are valoarea neașteptată de %u\n"
#: gmon_io.c:318 gmon_io.c:414
#, c-format
msgid "%s: file too short to be a gmon file\n"
-msgstr "%s: файл Ñлишком короткий, чтобы быть файлом gmon\n"
+msgstr "%s: fișier prea scurt pentru a fi un fișier gmon\n"
#: gmon_io.c:328 gmon_io.c:457
#, c-format
msgid "%s: file `%s' has bad magic cookie\n"
-msgstr "%s: файл «%s» Ñодержит неправильный идентификатор формата файла\n"
+msgstr "%s: fișierul „%s†are un cookie magic eronat\n"
#: gmon_io.c:339
#, c-format
msgid "%s: file `%s' has unsupported version %d\n"
-msgstr "%s: файл «%s» в формате неподдерживаемой верÑии %d\n"
+msgstr "%s: fișierul „%s†are versiunea nesuportată %d\n"
#: gmon_io.c:369
#, c-format
msgid "%s: %s: found bad tag %d (file corrupted?)\n"
-msgstr "%s: %s: найдена Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ Ð¼ÐµÑ‚ÐºÐ° %d (файл повреждён?)\n"
+msgstr "%s: %s: s-a găsit marcaj greșit %d (fișier corupt?)\n"
#: gmon_io.c:436
#, c-format
msgid "%s: profiling rate incompatible with first gmon file\n"
-msgstr "%s: Ñтепень Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½ÐµÑовмеÑтима Ñ Ð¿ÐµÑ€Ð²Ñ‹Ð¼ файлом gmon\n"
+msgstr "%s: rata de profilare este incompatibilă cu primul fișier gmon\n"
#: gmon_io.c:487
#, c-format
msgid "%s: incompatible with first gmon file\n"
-msgstr "%s: неÑовмеÑтимо Ñ Ð¿ÐµÑ€Ð²Ñ‹Ð¼ файлом gmon\n"
+msgstr "%s: incompatibil cu primul fișier gmon\n"
#: gmon_io.c:517
#, c-format
msgid "%s: file '%s' does not appear to be in gmon.out format\n"
-msgstr "%s: кажетÑÑ, Ñодержимое файла «%s» не в формате gmon.out\n"
+msgstr "%s: fișierul „%s†nu pare să fie în formatul gmon.out\n"
#: gmon_io.c:530
#, c-format
msgid "%s: unexpected EOF after reading %d/%d bins\n"
-msgstr "%s: неожиданный EOF поÑле Ñ‡Ñ‚ÐµÐ½Ð¸Ñ %d/%d bins\n"
+msgstr "%s: EOF neașteptat după citirea a %d/%d (de) bin-uri\n"
#: gmon_io.c:562
#, c-format
msgid "time is in ticks, not seconds\n"
-msgstr "Ð²Ñ€ÐµÐ¼Ñ Ð² тиках, а не в Ñекундах\n"
+msgstr "timpul este în bătăi(ticks), nu în secunde\n"
+# R-GC, scrie:
+# * Idei, pentru o traducere mai bună?
#: gmon_io.c:568 gmon_io.c:748
#, c-format
msgid "%s: don't know how to deal with file format %d\n"
-msgstr "%s: непонÑтно что делать Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð¼ в формате %d\n"
+msgstr "%s: nu se știe cum să se proceseze formatul de fișier %d\n"
#: gmon_io.c:578
#, c-format
msgid "File `%s' (version %d) contains:\n"
-msgstr "Файл «%s» (верÑÐ¸Ñ %d) Ñодержит:\n"
+msgstr "Fișierul „%s†(versiunea %d) conține:\n"
#: gmon_io.c:581
#, c-format
msgid "\t%d histogram record\n"
-msgstr "\t%d запиÑÑŒ гиÑтограммы\n"
+msgstr "\t%d înregistrare histogramă\n"
#: gmon_io.c:582
#, c-format
msgid "\t%d histogram records\n"
-msgstr "\t%d запиÑей гиÑтограммы\n"
+msgstr "\t%d înregistrări histogramă\n"
#: gmon_io.c:584
#, c-format
msgid "\t%d call-graph record\n"
-msgstr "\t%d запиÑÑŒ графа вызовов\n"
+msgstr "\t%d înregistrare grafic apelări\n"
#: gmon_io.c:585
#, c-format
msgid "\t%d call-graph records\n"
-msgstr "\t%d запиÑей графа вызовов\n"
+msgstr "\t%d înregistrări grafic apelări\n"
#: gmon_io.c:587
#, c-format
msgid "\t%d basic-block count record\n"
-msgstr "\t%d запиÑÑŒ Ñчётчика проÑÑ‚Ñ‹Ñ… блоков\n"
+msgstr "\t%d înregistrare repetări de blocuri de bază\n"
#: gmon_io.c:588
#, c-format
msgid "\t%d basic-block count records\n"
-msgstr "\t%d запиÑей Ñчётчика проÑÑ‚Ñ‹Ñ… блоков\n"
+msgstr "\t%d înregistrări repetări de blocuri de bază\n"
#: gprof.c:162
#, c-format
@@ -392,34 +416,34 @@ msgid ""
"\t[--demangle[=STYLE]] [--no-demangle] [--external-symbol-table=name] [@FILE]\n"
"\t[image-file] [profile-file...]\n"
msgstr ""
-"ИÑпользование: %s [-[abcDhilLrsTvwxyz]] [-[ACeEfFJnNOpPqQRStZ][имÑ]] [-I каталоги]\n"
-"\t[-d[кол-во]] [-k Ñ/на] [-m мин-Ñчётчик] [-t длина-таблицы]\n"
-"\t[--[no-]annotated-source[=имÑ]] [--[no-]exec-counts[=имÑ]]\n"
-"\t[--[no-]flat-profile[=имÑ]] [--[no-]graph[=имÑ]]\n"
-"\t[--[no-]time=имÑ] [--all-lines] [--brief] [--debug[=уровень]]\n"
-"\t[--function-ordering] [--file-ordering] [--inline-file-names]\n"
-"\t[--directory-path=каталоги] [--display-unused-functions]\n"
-"\t[--file-format=имÑ] [--file-info] [--help] [--line] [--min-count=n]\n"
+"Utilizare: %s [-[abcDhilLsTvwxyz]] [-[ACeEfFJnNOpPqQZ][nume]] [-I dirs]\n"
+"\t[-d[num]] [-k din/spre] [-m nr-min-cicluri] [-t lungime-tabel]\n"
+"\t[--[no-]annotated-source[=nume]] [--[no-]exec-counts[=nume]]\n"
+"\t[--[no-]flat-profile[=nume]] [--[no-]graph[=nume]]\n"
+"\t[--[no-]time=nume] [--all-lines] [--brief] [--debug[=nivel]]\n"
+"\t[--function-ordering] [--file-ordering]\n"
+"\t[--directory-path=dirs] [--display-unused-functions]\n"
+"\t[--file-format=nume] [--file-info] [--help] [--line] [--min-count=n]\n"
"\t[--no-static] [--print-path] [--separate-files]\n"
-"\t[--static-call-graph] [--sum] [--table-length=длина] [--traditional]\n"
+"\t[--static-call-graph] [--sum] [--table-length=lun] [--traditional]\n"
"\t[--version] [--width=n] [--ignore-non-functions]\n"
-"\t[--demangle[=СТИЛЬ]] [--no-demangle] [--external-symbol-table=имÑ] [@ФÐЙЛ]\n"
-"\t[файл-образа] [файл-профилÑ…]\n"
+"\t[--demangle[=STIL]] [--no-demangle]\n"
+"\t[image-file] [profile-file...]\n"
#: gprof.c:178
#, c-format
msgid "Report bugs to %s\n"
-msgstr "Об ошибках Ñообщайте по адреÑу <%s>\n"
+msgstr "Raportați erorile la %s\n"
#: gprof.c:254
#, c-format
msgid "%s: debugging not supported; -d ignored\n"
-msgstr "%s: отладка не поддерживаетÑÑ; -d игнорируетÑÑ\n"
+msgstr "%s: depanare nesuportată; -d ignorat\n"
#: gprof.c:340
#, c-format
msgid "%s: unknown file format %s\n"
-msgstr "%s: неизвеÑтный формат файла %s\n"
+msgstr "%s: format de fișier necunoscut %s\n"
#. This output is intended to follow the GNU standards document.
#: gprof.c:428
@@ -430,37 +454,37 @@ msgstr "GNU gprof %s\n"
#: gprof.c:429
#, c-format
msgid "Based on BSD gprof, copyright 1983 Regents of the University of California.\n"
-msgstr "Ðа оÑнове BSD gprof, copyright 1983 Regents of the University of California.\n"
+msgstr "Bazat pe BSD gprof, copyright 1983 Regents of the University of California.\n"
#: gprof.c:430
#, c-format
msgid "This program is free software. This program has absolutely no warranty.\n"
-msgstr "Эта программа ÑвлÑетÑÑ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ñ‹Ð¼ программным обеÑпечением. Эта программа не имеет абÑолютно никаких гарантий.\n"
+msgstr "Acest program este software liber. Acest program nu are absolut nici o garanție.\n"
#: gprof.c:471
#, c-format
msgid "%s: unknown demangling style `%s'\n"
-msgstr "%s: неизвеÑтный Ñтиль Ð´ÐµÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Â«%s»\n"
+msgstr "%s: stil necunoscut de descifrare(demangling) „%sâ€\n"
#: gprof.c:494
#, c-format
msgid "%s: Only one of --function-ordering and --file-ordering may be specified.\n"
-msgstr "%s: можно указать что-то одно: --function-ordering или --file-ordering.\n"
+msgstr "%s: Doar una dintre opțiunile --function-ordering sau --file-ordering poate să fie specificată.\n"
#: gprof.c:546
#, c-format
msgid "%s: sorry, file format `prof' is not yet supported\n"
-msgstr "%s: файл в формате «prof» пока не поддерживаетÑÑ\n"
+msgstr "%s: scuze, formatul de fișier „prof†nu este încă suportat\n"
#: gprof.c:600
#, c-format
msgid "%s: gmon.out file is missing histogram\n"
-msgstr "%s: в файле gmon.out нет гиÑтограммы\n"
+msgstr "%s: fișierului gmon.out îi lipsește histograma\n"
#: gprof.c:607
#, c-format
msgid "%s: gmon.out file is missing call-graph data\n"
-msgstr "%s: в файле gmon.out нет данных по графу вызовов\n"
+msgstr "%s: fișierului gmon.out îi lipsesc datele graficului de apelări\n"
#: hist.c:134
#, c-format
@@ -469,9 +493,9 @@ msgid ""
"%s: from '%s'\n"
"%s: to '%s'\n"
msgstr ""
-"%s: единицы Ð¸Ð·Ð¼ÐµÑ€ÐµÐ½Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ñ‹ в запиÑÑÑ… гиÑтограммы\n"
-"%s: Ñ Â«%s»\n"
-"%s: на «%s»\n"
+"%s: unitatea de dimensiune a fost schimbată între înregistrările histogramei\n"
+"%s: de la „%sâ€\n"
+"%s: la „%sâ€\n"
#: hist.c:144
#, c-format
@@ -480,29 +504,29 @@ msgid ""
"%s: from '%c'\n"
"%s: to '%c'\n"
msgstr ""
-"%s: аббревиатура измерений изменена в запиÑÑÑ… гиÑтограммы\n"
-"%s: Ñ Â«%c»\n"
-"%s: на «%c»\n"
+"%s: abrevierea dimensiunilor a fost schimbată între înregistrările histogramei\n"
+"%s: de la „%câ€\n"
+"%s: la „%câ€\n"
#: hist.c:158
#, c-format
msgid "%s: different scales in histogram records"
-msgstr "%s: различные маÑштабы в запиÑÑÑ… гиÑтограммы"
+msgstr "%s: diferite scale în înregistrările histogramei"
#: hist.c:195
#, c-format
msgid "%s: overlapping histogram records\n"
-msgstr "%s: перекрывающиеÑÑ Ð·Ð°Ð¿Ð¸Ñи гиÑтограммы\n"
+msgstr "%s: înregistrări de histogramă care se suprapun\n"
#: hist.c:229
#, c-format
msgid "%s: %s: unexpected EOF after reading %u of %u samples\n"
-msgstr "%s: %s: неожиданный EOF поÑле Ñ‡Ñ‚ÐµÐ½Ð¸Ñ %u из %u образцов\n"
+msgstr "%s: %s: EOF neașteptat după citirea a %u din %u exemple\n"
#: hist.c:466
#, c-format
msgid "%c%c/call"
-msgstr "%c%c/вызовов"
+msgstr "%c%c/apel"
#: hist.c:474
#, c-format
@@ -510,7 +534,7 @@ msgid ""
" for %.2f%% of %.2f %s\n"
"\n"
msgstr ""
-" Ð´Ð»Ñ %.2f%% из %.2f %s\n"
+" pentru %.2f%% din %.2f %s\n"
"\n"
#: hist.c:480
@@ -520,7 +544,7 @@ msgid ""
"Each sample counts as %g %s.\n"
msgstr ""
"\n"
-"Ð’Ñе образцы ÑчитаютÑÑ ÐºÐ°Ðº %g %s.\n"
+"Fiecare exemplu contează drept %g %s.\n"
#: hist.c:485
#, c-format
@@ -528,29 +552,34 @@ msgid ""
" no time accumulated\n"
"\n"
msgstr ""
-" нет накопленного времени\n"
+" nici un timp acumulat\n"
"\n"
#: hist.c:492
msgid "cumulative"
-msgstr "Ñуммарное"
+msgstr "cumulativ"
#: hist.c:492
msgid "self "
-msgstr "Ñама "
+msgstr "el însuși "
#: hist.c:492
msgid "total "
-msgstr "вÑего "
+msgstr "total "
#: hist.c:495
msgid "time"
-msgstr "времÑ"
+msgstr "timp"
#: hist.c:495
msgid "calls"
-msgstr "вызовы"
+msgstr "apeluri"
+# R-GC, scrie:
+# după referința pe care o are(hist.c), deduc
+# că este vorba de un profil de histogramă...
+# * Idei, despre ce este vorba exact, și o
+# propunere de traducere?
#: hist.c:584
#, c-format
msgid ""
@@ -562,17 +591,17 @@ msgstr ""
"\n"
"\n"
"\n"
-"плоÑкий профиль:\n"
+"profil clar:\n"
#: hist.c:590
#, c-format
msgid "Flat profile:\n"
-msgstr "ПлоÑкий профиль:\n"
+msgstr "Profil clar:\n"
#: hist.c:711
#, c-format
msgid "%s: found a symbol that covers several histogram records"
-msgstr "%s: найден Ñимвол, который приÑутÑтвует в неÑкольких запиÑÑÑ… гиÑтограммы"
+msgstr "%s: s-a găsit un simbol care acoperă mai multe înregistrări de histogramă"
#: mips.c:71
#, c-format
@@ -587,14 +616,14 @@ msgstr "[find_call] 0x%lx: jalr\n"
#: source.c:162
#, c-format
msgid "%s: could not locate `%s'\n"
-msgstr "%s: не удалоÑÑŒ найти «%s»\n"
+msgstr "%s: nu s-a putut localiza „%sâ€\n"
#: source.c:237
#, c-format
msgid "*** File %s:\n"
-msgstr "*** Файл %s:\n"
+msgstr "*** Fișier %s:\n"
-#: utils.c:106
+#: utils.c:103
#, c-format
msgid " <cycle %d>"
-msgstr " <цикл %d>"
+msgstr " <ciclu %d>"
diff --git a/gprof/stamp-h.in b/gprof/stamp-h.in
deleted file mode 100644
index 9788f70238c..00000000000
--- a/gprof/stamp-h.in
+++ /dev/null
@@ -1 +0,0 @@
-timestamp
diff --git a/gprofng/Makefile.am b/gprofng/Makefile.am
new file mode 100644
index 00000000000..2fcd695140c
--- /dev/null
+++ b/gprofng/Makefile.am
@@ -0,0 +1,79 @@
+## Process this file with automake to generate Makefile.in
+#
+# Copyright (C) 2021 Free Software Foundation, Inc.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 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; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+ACLOCAL_AMFLAGS = -I . -I ..
+
+AUTOMAKE_OPTIONS = dejagnu foreign
+
+if BUILD_COLLECTOR
+ COLLECTOR_SUBDIRS = libcollector
+endif
+if BUILD_SRC
+ SRC_SUBDIRS = src gp-display-html doc
+endif
+SUBDIRS = $(COLLECTOR_SUBDIRS) $(SRC_SUBDIRS)
+DIST_SUBDIRS = libcollector src gp-display-html doc
+
+# Setup the testing framework, if you have one
+EXPECT = expect
+RUNTEST = runtest
+RUNTESTFLAGS =
+
+BASEDIR = $(srcdir)/..
+BFDDIR = $(BASEDIR)/bfd
+jdk_inc = @jdk_inc@
+LD_NO_AS_NEEDED = @LD_NO_AS_NEEDED@
+GPROFNG_CFLAGS = @GPROFNG_CFLAGS@
+GPROFNG_CPPFLAGS = @GPROFNG_CPPFLAGS@
+GPROFNG_BROKEN_JAVAC = @GPROFNG_BROKEN_JAVAC@
+
+AM_MAKEFLAGS = \
+ jdk_inc="$(jdk_inc)" \
+ LD_NO_AS_NEEDED="$(LD_NO_AS_NEEDED)" \
+ GPROFNG_CFLAGS="$(GPROFNG_CFLAGS)" \
+ GPROFNG_CPPFLAGS="$(GPROFNG_CPPFLAGS)"
+
+if TCL_TRY
+check-DEJAGNU: site.exp development.exp
+ srcroot=`cd $(srcdir) && pwd`; export srcroot; \
+ r=`pwd`; export r; \
+ LC_ALL=C; export LC_ALL; \
+ EXPECT=$(EXPECT); export EXPECT; \
+ jdk_inc="$(jdk_inc)"; export jdk_inc; \
+ runtest=$(RUNTEST); \
+ if $(SHELL) -c "$$runtest --version" > /dev/null 2>&1; then \
+ $$runtest --tool $(DEJATOOL) --srcdir $${srcroot}/testsuite \
+ GPROFNG_BROKEN_JAVAC="$(GPROFNG_BROKEN_JAVAC)" \
+ MAKE="$(MAKE)" CC="$(CC)" CFLAGS="$(CFLAGS) $(PTHREAD_CFLAGS)" \
+ LDFLAGS="$(LDFLAGS)" LIBS="$(PTHREAD_LIBS) $(LIBS)" \
+ BUILDDIR="$(abs_top_builddir)" $(RUNTESTFLAGS); \
+ else echo "WARNING: could not find \`runtest'" 1>&2; :;\
+ fi
+
+development.exp: $(BFDDIR)/development.sh
+ $(EGREP) "(development|experimental)=" $(BFDDIR)/development.sh \
+ | $(AWK) -F= '{ print "set " $$1 " " $$2 }' > $@
+
+# development.sh is used to determine -Werror default.
+CONFIG_STATUS_DEPENDENCIES = $(BFDDIR)/development.sh
+
+EXTRA_DEJAGNU_SITE_CONFIG = development.exp
+
+DISTCLEANFILES = site.exp development.exp
+endif
+
diff --git a/gprofng/Makefile.in b/gprofng/Makefile.in
new file mode 100644
index 00000000000..fd5279b4df1
--- /dev/null
+++ b/gprofng/Makefile.in
@@ -0,0 +1,953 @@
+# Makefile.in generated by automake 1.15.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2017 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+#
+# Copyright (C) 2021 Free Software Foundation, Inc.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 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; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+subdir = .
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/../libtool.m4 \
+ $(top_srcdir)/../ltoptions.m4 $(top_srcdir)/../ltsugar.m4 \
+ $(top_srcdir)/../ltversion.m4 $(top_srcdir)/../lt~obsolete.m4 \
+ $(top_srcdir)/acinclude.m4 $(top_srcdir)/../config/warnings.m4 \
+ $(top_srcdir)/../config/enable.m4 \
+ $(top_srcdir)/../config/ax_pthread.m4 \
+ $(top_srcdir)/config/bison.m4 $(top_srcdir)/../bfd/version.m4 \
+ $(top_srcdir)/../config/zlib.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \
+ $(am__configure_deps) $(am__DIST_COMMON)
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno config.status.lineno
+mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs
+CONFIG_HEADER = config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+ ctags-recursive dvi-recursive html-recursive info-recursive \
+ install-data-recursive install-dvi-recursive \
+ install-exec-recursive install-html-recursive \
+ install-info-recursive install-pdf-recursive \
+ install-ps-recursive install-recursive installcheck-recursive \
+ installdirs-recursive pdf-recursive ps-recursive \
+ tags-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
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+ $(RECURSIVE_TARGETS) \
+ $(RECURSIVE_CLEAN_TARGETS) \
+ $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+ cscope distdir dist dist-all distcheck
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+CSCOPE = cscope
+DEJATOOL = $(PACKAGE)
+RUNTESTDEFAULTFLAGS = --tool $$tool --srcdir $$srcdir
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/../ar-lib \
+ $(top_srcdir)/../compile $(top_srcdir)/../config.guess \
+ $(top_srcdir)/../config.sub $(top_srcdir)/../install-sh \
+ $(top_srcdir)/../ltmain.sh $(top_srcdir)/../missing \
+ $(top_srcdir)/../mkinstalldirs \
+ $(top_srcdir)/common/config.h.in README
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+ if test -d "$(distdir)"; then \
+ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
+ && rm -rf "$(distdir)" \
+ || { sleep 5 && rm -rf "$(distdir)"; }; \
+ else :; fi
+am__post_remove_distdir = $(am__remove_distdir)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+DIST_ARCHIVES = $(distdir).tar.gz
+GZIP_ENV = --best
+DIST_TARGETS = dist-gzip
+distuninstallcheck_listfiles = find . -type f -print
+am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
+ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
+distcleancheck_listfiles = find . -type f -print
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BISON = @BISON@
+BUILD_SUBDIRS = @BUILD_SUBDIRS@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CLOCK_GETTIME_LINK = @CLOCK_GETTIME_LINK@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+
+# Setup the testing framework, if you have one
+EXPECT = expect
+FGREP = @FGREP@
+GPROFNG_BROKEN_JAVAC = @GPROFNG_BROKEN_JAVAC@
+GPROFNG_CFLAGS = @GPROFNG_CFLAGS@
+GPROFNG_CPPFLAGS = @GPROFNG_CPPFLAGS@
+GPROFNG_LIBADD = @GPROFNG_LIBADD@
+GPROFNG_NO_FORMAT_TRUNCATION_CFLAGS = @GPROFNG_NO_FORMAT_TRUNCATION_CFLAGS@
+GPROFNG_NO_SWITCH_CFLAGS = @GPROFNG_NO_SWITCH_CFLAGS@
+GREP = @GREP@
+HELP2MAN = @HELP2MAN@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+JAVA = @JAVA@
+JAVAC = @JAVAC@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LD_NO_AS_NEEDED = @LD_NO_AS_NEEDED@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+WERROR = @WERROR@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+gprofng_cflags = @gprofng_cflags@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+jdk_inc = @jdk_inc@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+zlibdir = @zlibdir@
+zlibinc = @zlibinc@
+ACLOCAL_AMFLAGS = -I . -I ..
+AUTOMAKE_OPTIONS = dejagnu foreign
+@BUILD_COLLECTOR_TRUE@COLLECTOR_SUBDIRS = libcollector
+@BUILD_SRC_TRUE@SRC_SUBDIRS = src gp-display-html doc
+SUBDIRS = $(COLLECTOR_SUBDIRS) $(SRC_SUBDIRS)
+DIST_SUBDIRS = libcollector src gp-display-html doc
+RUNTEST = runtest
+RUNTESTFLAGS =
+BASEDIR = $(srcdir)/..
+BFDDIR = $(BASEDIR)/bfd
+AM_MAKEFLAGS = \
+ jdk_inc="$(jdk_inc)" \
+ LD_NO_AS_NEEDED="$(LD_NO_AS_NEEDED)" \
+ GPROFNG_CFLAGS="$(GPROFNG_CFLAGS)" \
+ GPROFNG_CPPFLAGS="$(GPROFNG_CPPFLAGS)"
+
+
+# development.sh is used to determine -Werror default.
+@TCL_TRY_TRUE@CONFIG_STATUS_DEPENDENCIES = $(BFDDIR)/development.sh
+@TCL_TRY_TRUE@EXTRA_DEJAGNU_SITE_CONFIG = development.exp
+@TCL_TRY_TRUE@DISTCLEANFILES = site.exp development.exp
+all: config.h
+ $(MAKE) $(AM_MAKEFLAGS) all-recursive
+
+.SUFFIXES:
+am--refresh: Makefile
+ @:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \
+ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ echo ' $(SHELL) ./config.status'; \
+ $(SHELL) ./config.status;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ $(SHELL) ./config.status --recheck
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ $(am__cd) $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+$(am__aclocal_m4_deps):
+
+config.h: stamp-h1
+ @test -f $@ || rm -f stamp-h1
+ @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1
+
+stamp-h1: $(top_srcdir)/common/config.h.in $(top_builddir)/config.status
+ @rm -f stamp-h1
+ cd $(top_builddir) && $(SHELL) ./config.status config.h
+$(top_srcdir)/common/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ ($(am__cd) $(top_srcdir) && $(AUTOHEADER))
+ rm -f stamp-h1
+ touch $@
+
+distclean-hdr:
+ -rm -f config.h stamp-h1
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool config.lt
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+# (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+ @fail=; \
+ if $(am__make_keepgoing); then \
+ failcom='fail=yes'; \
+ else \
+ failcom='exit 1'; \
+ fi; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscope: cscope.files
+ test ! -s cscope.files \
+ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS)
+clean-cscope:
+ -rm -f cscope.files
+cscope.files: clean-cscope cscopelist
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+ -rm -f cscope.out cscope.in.out cscope.po.out cscope.files
+
+@TCL_TRY_FALSE@check-DEJAGNU: site.exp
+@TCL_TRY_FALSE@ srcdir='$(srcdir)'; export srcdir; \
+@TCL_TRY_FALSE@ EXPECT=$(EXPECT); export EXPECT; \
+@TCL_TRY_FALSE@ if $(SHELL) -c "$(RUNTEST) --version" > /dev/null 2>&1; then \
+@TCL_TRY_FALSE@ exit_status=0; l='$(DEJATOOL)'; for tool in $$l; do \
+@TCL_TRY_FALSE@ if $(RUNTEST) $(AM_RUNTESTFLAGS) $(RUNTESTDEFAULTFLAGS) $(RUNTESTFLAGS); \
+@TCL_TRY_FALSE@ then :; else exit_status=1; fi; \
+@TCL_TRY_FALSE@ done; \
+@TCL_TRY_FALSE@ else echo "WARNING: could not find '$(RUNTEST)'" 1>&2; :;\
+@TCL_TRY_FALSE@ fi; \
+@TCL_TRY_FALSE@ exit $$exit_status
+site.exp: Makefile $(EXTRA_DEJAGNU_SITE_CONFIG)
+ @echo 'Making a new site.exp file ...'
+ @echo '## these variables are automatically generated by make ##' >site.tmp
+ @echo '# Do not edit here. If you wish to override these values' >>site.tmp
+ @echo '# edit the last section' >>site.tmp
+ @echo 'set srcdir "$(srcdir)"' >>site.tmp
+ @echo "set objdir `pwd`" >>site.tmp
+ @echo 'set build_alias "$(build_alias)"' >>site.tmp
+ @echo 'set build_triplet $(build_triplet)' >>site.tmp
+ @echo 'set host_alias "$(host_alias)"' >>site.tmp
+ @echo 'set host_triplet $(host_triplet)' >>site.tmp
+ @echo 'set target_alias "$(target_alias)"' >>site.tmp
+ @echo 'set target_triplet $(target_triplet)' >>site.tmp
+ @list='$(EXTRA_DEJAGNU_SITE_CONFIG)'; for f in $$list; do \
+ echo "## Begin content included from file $$f. Do not modify. ##" \
+ && cat `test -f "$$f" || echo '$(srcdir)/'`$$f \
+ && echo "## End content included from file $$f. ##" \
+ || exit 1; \
+ done >> site.tmp
+ @echo "## End of auto-generated content; you can edit from here. ##" >> site.tmp
+ @if test -f site.exp; then \
+ sed -e '1,/^## End of auto-generated content.*##/d' site.exp >> site.tmp; \
+ fi
+ @-rm -f site.bak
+ @test ! -f site.exp || mv site.exp site.bak
+ @mv site.tmp site.exp
+
+distclean-DEJAGNU:
+ -rm -f site.exp site.bak
+ -l='$(DEJATOOL)'; for tool in $$l; do \
+ rm -f $$tool.sum $$tool.log; \
+ done
+
+distdir: $(DISTFILES)
+ $(am__remove_distdir)
+ test -d "$(distdir)" || mkdir "$(distdir)"
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ $(am__make_dryrun) \
+ || test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+ -test -n "$(am__skip_mode_fix)" \
+ || find "$(distdir)" -type d ! -perm -755 \
+ -exec chmod u+rwx,go+rx {} \; -o \
+ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
+ || chmod -R a+r "$(distdir)"
+dist-gzip: distdir
+ tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz
+ $(am__post_remove_distdir)
+
+dist-bzip2: distdir
+ tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
+ $(am__post_remove_distdir)
+
+dist-lzip: distdir
+ tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
+ $(am__post_remove_distdir)
+
+dist-xz: distdir
+ tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
+ $(am__post_remove_distdir)
+
+dist-tarZ: distdir
+ @echo WARNING: "Support for distribution archives compressed with" \
+ "legacy program 'compress' is deprecated." >&2
+ @echo WARNING: "It will be removed altogether in Automake 2.0" >&2
+ tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+ $(am__post_remove_distdir)
+
+dist-shar: distdir
+ @echo WARNING: "Support for shar distribution archives is" \
+ "deprecated." >&2
+ @echo WARNING: "It will be removed altogether in Automake 2.0" >&2
+ shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz
+ $(am__post_remove_distdir)
+
+dist-zip: distdir
+ -rm -f $(distdir).zip
+ zip -rq $(distdir).zip $(distdir)
+ $(am__post_remove_distdir)
+
+dist dist-all:
+ $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:'
+ $(am__post_remove_distdir)
+
+# This target untars the dist file and tries a VPATH configuration. Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+ case '$(DIST_ARCHIVES)' in \
+ *.tar.gz*) \
+ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\
+ *.tar.bz2*) \
+ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
+ *.tar.lz*) \
+ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\
+ *.tar.xz*) \
+ xz -dc $(distdir).tar.xz | $(am__untar) ;;\
+ *.tar.Z*) \
+ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
+ *.shar.gz*) \
+ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\
+ *.zip*) \
+ unzip $(distdir).zip ;;\
+ esac
+ chmod -R a-w $(distdir)
+ chmod u+w $(distdir)
+ mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst
+ chmod a-w $(distdir)
+ test -d $(distdir)/_build || exit 0; \
+ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+ && am__cwd=`pwd` \
+ && $(am__cd) $(distdir)/_build/sub \
+ && ../../configure \
+ $(AM_DISTCHECK_CONFIGURE_FLAGS) \
+ $(DISTCHECK_CONFIGURE_FLAGS) \
+ --srcdir=../.. --prefix="$$dc_install_base" \
+ && $(MAKE) $(AM_MAKEFLAGS) \
+ && $(MAKE) $(AM_MAKEFLAGS) dvi \
+ && $(MAKE) $(AM_MAKEFLAGS) check \
+ && $(MAKE) $(AM_MAKEFLAGS) install \
+ && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+ && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
+ distuninstallcheck \
+ && chmod -R a-w "$$dc_install_base" \
+ && ({ \
+ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
+ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
+ } || { rm -rf "$$dc_destdir"; exit 1; }) \
+ && rm -rf "$$dc_destdir" \
+ && $(MAKE) $(AM_MAKEFLAGS) dist \
+ && rm -rf $(DIST_ARCHIVES) \
+ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
+ && cd "$$am__cwd" \
+ || exit 1
+ $(am__post_remove_distdir)
+ @(echo "$(distdir) archives ready for distribution: "; \
+ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
+distuninstallcheck:
+ @test -n '$(distuninstallcheck_dir)' || { \
+ echo 'ERROR: trying to run $@ with an empty' \
+ '$$(distuninstallcheck_dir)' >&2; \
+ exit 1; \
+ }; \
+ $(am__cd) '$(distuninstallcheck_dir)' || { \
+ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \
+ exit 1; \
+ }; \
+ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \
+ || { echo "ERROR: files left after uninstall:" ; \
+ if test -n "$(DESTDIR)"; then \
+ echo " (check DESTDIR support)"; \
+ fi ; \
+ $(distuninstallcheck_listfiles) ; \
+ exit 1; } >&2
+distcleancheck: distclean
+ @if test '$(srcdir)' = . ; then \
+ echo "ERROR: distcleancheck can only run from a VPATH build" ; \
+ exit 1 ; \
+ fi
+ @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
+ || { echo "ERROR: files left in build directory after distclean:" ; \
+ $(distcleancheck_listfiles) ; \
+ exit 1; } >&2
+check-am: all-am
+ $(MAKE) $(AM_MAKEFLAGS) check-DEJAGNU
+check: check-recursive
+all-am: Makefile config.h
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ 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:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -rm -f Makefile
+distclean-am: clean-am distclean-DEJAGNU distclean-generic \
+ distclean-hdr distclean-libtool distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -rm -rf $(top_srcdir)/autom4te.cache
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(am__recursive_targets) all check-am install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \
+ am--refresh check check-DEJAGNU check-am clean clean-cscope \
+ clean-generic clean-libtool cscope cscopelist-am ctags \
+ ctags-am dist dist-all dist-bzip2 dist-gzip dist-lzip \
+ dist-shar dist-tarZ dist-xz dist-zip distcheck distclean \
+ distclean-DEJAGNU distclean-generic distclean-hdr \
+ distclean-libtool distclean-tags distcleancheck distdir \
+ distuninstallcheck dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ installdirs-am maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+@TCL_TRY_TRUE@check-DEJAGNU: site.exp development.exp
+@TCL_TRY_TRUE@ srcroot=`cd $(srcdir) && pwd`; export srcroot; \
+@TCL_TRY_TRUE@ r=`pwd`; export r; \
+@TCL_TRY_TRUE@ LC_ALL=C; export LC_ALL; \
+@TCL_TRY_TRUE@ EXPECT=$(EXPECT); export EXPECT; \
+@TCL_TRY_TRUE@ jdk_inc="$(jdk_inc)"; export jdk_inc; \
+@TCL_TRY_TRUE@ runtest=$(RUNTEST); \
+@TCL_TRY_TRUE@ if $(SHELL) -c "$$runtest --version" > /dev/null 2>&1; then \
+@TCL_TRY_TRUE@ $$runtest --tool $(DEJATOOL) --srcdir $${srcroot}/testsuite \
+@TCL_TRY_TRUE@ GPROFNG_BROKEN_JAVAC="$(GPROFNG_BROKEN_JAVAC)" \
+@TCL_TRY_TRUE@ MAKE="$(MAKE)" CC="$(CC)" CFLAGS="$(CFLAGS) $(PTHREAD_CFLAGS)" \
+@TCL_TRY_TRUE@ LDFLAGS="$(LDFLAGS)" LIBS="$(PTHREAD_LIBS) $(LIBS)" \
+@TCL_TRY_TRUE@ BUILDDIR="$(abs_top_builddir)" $(RUNTESTFLAGS); \
+@TCL_TRY_TRUE@ else echo "WARNING: could not find \`runtest'" 1>&2; :;\
+@TCL_TRY_TRUE@ fi
+
+@TCL_TRY_TRUE@development.exp: $(BFDDIR)/development.sh
+@TCL_TRY_TRUE@ $(EGREP) "(development|experimental)=" $(BFDDIR)/development.sh \
+@TCL_TRY_TRUE@ | $(AWK) -F= '{ print "set " $$1 " " $$2 }' > $@
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/gprofng/README b/gprofng/README
new file mode 100644
index 00000000000..66d2e7c86ac
--- /dev/null
+++ b/gprofng/README
@@ -0,0 +1,100 @@
+What is gprofng?
+
+ Gprofng is the GNU Next Generation profiler for analyzing the performance
+ of Linux applications. Gprofng allows you to:
+ - Profile C / C++ / Java / Scala applications without needing to recompile
+ - Profile multi-threaded applications
+ - Analyze and compare multiple experiments
+ - Use time-based sampling and / or hardware event counters
+
+Building gprofng
+
+ Gprofng is distributed with binutils. To build gprofng, you build binutils.
+ Overview:
+ 1. Set paths
+ 2. Verify prerequisites
+ 3. Git clone
+ 4. Configure, make, and make install
+ Details follow for each of these.
+
+1. Set paths
+
+ If you are configuring binutils for the default location, it will use:
+ /usr/local
+ In your shell initialization procedure, set your paths using commands
+ similar to these:
+ export PATH=/usr/local/bin:$PATH
+ export MANPATH=/usr/local/share/man:$MANPATH
+ export INFOPATH=/usr/local/share/info/:$INFOPATH
+
+2. Verify prerequisites
+
+ To build a recent version of binutils, it is useful to have a developer
+ system with the most recent compilers, libraries, and operating system.
+ Development systems will typically already include most of these:
+
+ bison bison-devel bzip2 elfutils-debuginfod-client-devel
+ expat-devel flex gcc gcc-c++ git-core git-core-doc gmp-devel
+ help2man libbabeltrace-devel libipt-devel m4 make mpfr-devel
+ ncurses-devel perl-Data-Dumper tar texinfo xz zlib-devel
+ java-17-openjdk-devel
+
+ CAUTION: The list of prerequisites changes depending on your operating system
+ and changes as binutils evolves. The list above is a snapshot of the useful
+ packages in early 2022 for Red Hat Enterprise Linux and Oracle Linux.
+
+ Your system may use other packages; for example, you may be able to use a
+ different version of Java than shown above. If there are failures, you may
+ need to search for other packages as described in the "Hints" section below.
+
+3. Git clone
+
+ Select a binutils repository and a branch that you would like
+ to start from. For example, to clone from the master at
+ sourceware.org, you could say:
+ git clone http://sourceware.org/git/binutils-gdb.git CloneDir
+
+4. Configure, make, and install
+
+ There are many options for configure (see: configure --help). For example,
+ --prefix sets the destination, as described in the "Hints" section below.
+ If the default destination /usr/local is acceptable for your needs, then
+ after the clone operation finishes, you can simply say:
+
+ mkdir build
+ cd build
+ ../CloneDir/configure
+ make
+ sudo make install
+
+Getting started
+
+ To start using gprofng, see the tutorial available by saying:
+ info gprofng
+
+Hints and tips for building binutils
+
+ - Use the script(1) command to write a log of your build.
+
+ - If you run multiple commands at once (for example: make --jobs=10) then you
+ should also use make option:
+ --output-sync
+ Without --output-sync, the log would be difficult to interpret.
+
+ - Search the log for errors and warnings, for example:
+ configure: WARNING: <package> is missing or unusable; some features
+ may be unavailable.
+ The above message suggests that <package> may be needed on your system.
+
+ - Sometimes the above message is not sufficiently specific to guide you to
+ the right package. In the directory where the failure happens, config.log
+ may identify a specific missing file, and your package manager may allow
+ you to search for it. For example, if build/gprofng/config.log shows that
+ javac is missing, and if your package manager is dnf, you could try:
+ dnf --repo='*' whatprovides '*/javac'
+
+ - You can set a custom destination directory using configure --prefix.
+ This is useful if you prefer not to change /usr/local, or if you are not
+ allowed to do so. If you set a custom prefix, be sure to change all three
+ paths mentioned in the PATH section above.
+
diff --git a/gprofng/acinclude.m4 b/gprofng/acinclude.m4
new file mode 100644
index 00000000000..966da186ee3
--- /dev/null
+++ b/gprofng/acinclude.m4
@@ -0,0 +1,4 @@
+m4_include([../config/warnings.m4])
+m4_include([../config/enable.m4])
+m4_include([../config/ax_pthread.m4])
+m4_include([config/bison.m4])
diff --git a/gprofng/aclocal.m4 b/gprofng/aclocal.m4
new file mode 100644
index 00000000000..02b07b91597
--- /dev/null
+++ b/gprofng/aclocal.m4
@@ -0,0 +1,1254 @@
+# generated automatically by aclocal 1.15.1 -*- Autoconf -*-
+
+# Copyright (C) 1996-2017 Free Software Foundation, Inc.
+
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])])
+m4_ifndef([AC_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],,
+[m4_warning([this file was generated for autoconf 2.69.
+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-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+# (This private macro should not be called outside this file.)
+AC_DEFUN([AM_AUTOMAKE_VERSION],
+[am__api_version='1.15'
+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.15.1], [],
+ [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
+])
+
+# _AM_AUTOCONF_VERSION(VERSION)
+# -----------------------------
+# aclocal traces this macro to find the Autoconf version.
+# This is a private macro too. Using m4_define simplifies
+# the logic in aclocal, which can simply ignore this definition.
+m4_define([_AM_AUTOCONF_VERSION], [])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
+# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+[AM_AUTOMAKE_VERSION([1.15.1])dnl
+m4_ifndef([AC_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
+
+# Copyright (C) 2011-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_AR([ACT-IF-FAIL])
+# -------------------------
+# Try to determine the archiver interface, and trigger the ar-lib wrapper
+# if it is needed. If the detection of archiver interface fails, run
+# ACT-IF-FAIL (default is to abort configure with a proper error message).
+AC_DEFUN([AM_PROG_AR],
+[AC_BEFORE([$0], [LT_INIT])dnl
+AC_BEFORE([$0], [AC_PROG_LIBTOOL])dnl
+AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([ar-lib])dnl
+AC_CHECK_TOOLS([AR], [ar lib "link -lib"], [false])
+: ${AR=ar}
+
+AC_CACHE_CHECK([the archiver ($AR) interface], [am_cv_ar_interface],
+ [AC_LANG_PUSH([C])
+ am_cv_ar_interface=ar
+ AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int some_variable = 0;]])],
+ [am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&AS_MESSAGE_LOG_FD'
+ AC_TRY_EVAL([am_ar_try])
+ if test "$ac_status" -eq 0; then
+ am_cv_ar_interface=ar
+ else
+ am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&AS_MESSAGE_LOG_FD'
+ AC_TRY_EVAL([am_ar_try])
+ if test "$ac_status" -eq 0; then
+ am_cv_ar_interface=lib
+ else
+ am_cv_ar_interface=unknown
+ fi
+ fi
+ rm -f conftest.lib libconftest.a
+ ])
+ AC_LANG_POP([C])])
+
+case $am_cv_ar_interface in
+ar)
+ ;;
+lib)
+ # Microsoft lib, so override with the ar-lib wrapper script.
+ # FIXME: It is wrong to rewrite AR.
+ # But if we don't then we get into trouble of one sort or another.
+ # A longer-term fix would be to have automake use am__AR in this case,
+ # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something
+ # similar.
+ AR="$am_aux_dir/ar-lib $AR"
+ ;;
+unknown)
+ m4_default([$1],
+ [AC_MSG_ERROR([could not determine $AR interface])])
+ ;;
+esac
+AC_SUBST([AR])dnl
+])
+
+# AM_AUX_DIR_EXPAND -*- Autoconf -*-
+
+# Copyright (C) 2001-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+# $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to
+# '$srcdir', '$srcdir/..', or '$srcdir/../..'.
+#
+# Of course, Automake must honor this variable whenever it calls a
+# tool from the auxiliary directory. The problem is that $srcdir (and
+# therefore $ac_aux_dir as well) can be either absolute or relative,
+# depending on how configure is run. This is pretty annoying, since
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+# source directory, any form will work fine, but in subdirectories a
+# relative path needs to be adjusted first.
+#
+# $ac_aux_dir/missing
+# fails when called from a subdirectory if $ac_aux_dir is relative
+# $top_srcdir/$ac_aux_dir/missing
+# fails if $ac_aux_dir is absolute,
+# fails when called from a subdirectory in a VPATH build with
+# a relative $ac_aux_dir
+#
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+# are both prefixed by $srcdir. In an in-source build this is usually
+# harmless because $srcdir is '.', but things will broke when you
+# start a VPATH build or use an absolute $srcdir.
+#
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+# iff we strip the leading $srcdir from $ac_aux_dir. That would be:
+# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+# and then we would define $MISSING as
+# MISSING="\${SHELL} $am_aux_dir/missing"
+# This will work as long as MISSING is not called from configure, because
+# unfortunately $(top_srcdir) has no meaning in configure.
+# However there are other variables, like CC, which are often used in
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
+#
+# Another solution, used here, is to always expand $ac_aux_dir to an
+# absolute PATH. The drawback is that using absolute paths prevent a
+# configured tree to be moved without reconfiguration.
+
+AC_DEFUN([AM_AUX_DIR_EXPAND],
+[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
+# Expand $ac_aux_dir to an absolute path.
+am_aux_dir=`cd "$ac_aux_dir" && pwd`
+])
+
+# AM_CONDITIONAL -*- Autoconf -*-
+
+# Copyright (C) 1997-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ([2.52])dnl
+ m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])],
+ [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])dnl
+AC_SUBST([$1_FALSE])dnl
+_AM_SUBST_NOTMAKE([$1_TRUE])dnl
+_AM_SUBST_NOTMAKE([$1_FALSE])dnl
+m4_define([_AM_COND_VALUE_$1], [$2])dnl
+if $2; then
+ $1_TRUE=
+ $1_FALSE='#'
+else
+ $1_TRUE='#'
+ $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+ AC_MSG_ERROR([[conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.]])
+fi])])
+
+# Copyright (C) 1999-2017 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.
+
+
+# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be
+# written in clear, in which case automake, when reading aclocal.m4,
+# will think it sees a *use*, and therefore will trigger all it's
+# C support machinery. Also note that it means that autoscan, seeing
+# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
+
+
+# _AM_DEPENDENCIES(NAME)
+# ----------------------
+# See how the compiler implements dependency checking.
+# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC".
+# We try a few techniques and use that to set a single cache variable.
+#
+# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
+# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
+# dependency, and given that the user is not expected to run this macro,
+# just rely on AC_PROG_CC.
+AC_DEFUN([_AM_DEPENDENCIES],
+[AC_REQUIRE([AM_SET_DEPDIR])dnl
+AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
+AC_REQUIRE([AM_MAKE_INCLUDE])dnl
+AC_REQUIRE([AM_DEP_TRACK])dnl
+
+m4_if([$1], [CC], [depcc="$CC" am_compiler_list=],
+ [$1], [CXX], [depcc="$CXX" am_compiler_list=],
+ [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+ [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'],
+ [$1], [UPC], [depcc="$UPC" am_compiler_list=],
+ [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'],
+ [depcc="$$1" am_compiler_list=])
+
+AC_CACHE_CHECK([dependency style of $depcc],
+ [am_cv_$1_dependencies_compiler_type],
+[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named 'D' -- because '-MD' means "put the output
+ # in D".
+ 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.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_$1_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
+ fi
+ am__universal=false
+ m4_case([$1], [CC],
+ [case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac],
+ [CXX],
+ [case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac])
+
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+ # Solaris 10 /bin/sh.
+ echo '/* dummy */' > sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ # We check with '-c' and '-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle '-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs.
+ am__obj=sub/conftest.${OBJEXT-o}
+ am__minus_obj="-o $am__obj"
+ case $depmode in
+ gcc)
+ # This depmode causes a compiler race in universal mode.
+ test "$am__universal" = false || continue
+ ;;
+ nosideeffect)
+ # After this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested.
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ 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.
+ am__obj=conftest.${OBJEXT-o}
+ am__minus_obj=
+ ;;
+ none) break ;;
+ esac
+ if depmode=$depmode \
+ source=sub/conftest.c object=$am__obj \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_$1_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_$1_dependencies_compiler_type=none
+fi
+])
+AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
+AM_CONDITIONAL([am__fastdep$1], [
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
+])
+
+
+# AM_SET_DEPDIR
+# -------------
+# Choose a directory name for dependency files.
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES.
+AC_DEFUN([AM_SET_DEPDIR],
+[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
+])
+
+
+# AM_DEP_TRACK
+# ------------
+AC_DEFUN([AM_DEP_TRACK],
+[AC_ARG_ENABLE([dependency-tracking], [dnl
+AS_HELP_STRING(
+ [--enable-dependency-tracking],
+ [do not reject slow dependency extractors])
+AS_HELP_STRING(
+ [--disable-dependency-tracking],
+ [speeds up one-time build])])
+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 -*-
+
+# Copyright (C) 1999-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+
+# _AM_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[{
+ # Older Autoconf quotes --file arguments for eval, but not when files
+ # are listed without --file. Let's play safe and only enable the eval
+ # if we detect the quoting.
+ case $CONFIG_FILES in
+ *\'*) eval set x "$CONFIG_FILES" ;;
+ *) set x $CONFIG_FILES ;;
+ esac
+ shift
+ for mf
+ do
+ # Strip MF so we end up with the name of the file.
+ mf=`echo "$mf" | sed -e 's/:.*$//'`
+ # Check whether this is an Automake generated Makefile or not.
+ # We used to match only the files named 'Makefile.in', but
+ # some people rename them; so instead we look at the file content.
+ # Grep'ing the first line is not enough: some people post-process
+ # each Makefile.in and add a new line on top of each file to say so.
+ # Grep'ing the whole file is not good either: AIX grep has a line
+ # limit of 2048, but all sed's we know have understand at least 4000.
+ if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+ dirpart=`AS_DIRNAME("$mf")`
+ else
+ continue
+ fi
+ # Extract the definition of DEPDIR, am__include, and am__quote
+ # from the Makefile without running 'make'.
+ DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+ test -z "$DEPDIR" && continue
+ am__include=`sed -n 's/^am__include = //p' < "$mf"`
+ test -z "$am__include" && continue
+ am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+ # Find all dependency output files, they are included files with
+ # $(DEPDIR) in their names. We invoke sed twice because it is the
+ # simplest approach to changing $(DEPDIR) to its actual value in the
+ # expansion.
+ for file in `sed -n "
+ s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do
+ # Make sure the directory exists.
+ test -f "$dirpart/$file" && continue
+ fdir=`AS_DIRNAME(["$file"])`
+ AS_MKDIR_P([$dirpart/$fdir])
+ # echo "creating $dirpart/$file"
+ echo '# dummy' > "$dirpart/$file"
+ done
+ done
+}
+])# _AM_OUTPUT_DEPENDENCY_COMMANDS
+
+
+# AM_OUTPUT_DEPENDENCY_COMMANDS
+# -----------------------------
+# This macro should only be invoked once -- use via AC_REQUIRE.
+#
+# This code is only required when automatic dependency tracking
+# is enabled. FIXME. This creates each '.P' file that we will
+# need in order to bootstrap the dependency handling code.
+AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
+[AC_CONFIG_COMMANDS([depfiles],
+ [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
+ [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
+])
+
+# Do all the work for Automake. -*- Autoconf -*-
+
+# Copyright (C) 1996-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This macro actually does too much. Some checks are only needed if
+# your package does certain things. But this isn't really a big deal.
+
+dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O.
+m4_define([AC_PROG_CC],
+m4_defn([AC_PROG_CC])
+[_AM_PROG_CC_C_O
+])
+
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out. PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition. After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_PREREQ([2.65])dnl
+dnl Autoconf wants to disallow AM_ names. We explicitly allow
+dnl the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])dnl
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+ # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+ # is not polluted with repeated "-I."
+ AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
+ # test to see if srcdir already configured
+ if test -f $srcdir/config.status; then
+ AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+ fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+ if (cygpath --version) >/dev/null 2>/dev/null; then
+ CYGPATH_W='cygpath -w'
+ else
+ CYGPATH_W=echo
+ fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[AC_DIAGNOSE([obsolete],
+ [$0: two- and three-arguments forms are deprecated.])
+m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
+m4_if(
+ m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]),
+ [ok:ok],,
+ [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package])
+ AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}])
+AM_MISSING_PROG([AUTOCONF], [autoconf])
+AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}])
+AM_MISSING_PROG([AUTOHEADER], [autoheader])
+AM_MISSING_PROG([MAKEINFO], [makeinfo])
+AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+# For better backward compatibility. To be removed once Automake 1.9.x
+# dies out for good. For more background, see:
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+AC_SUBST([mkdir_p], ['$(MKDIR_P)'])
+# We need awk for the "check" target (and possibly the TAP driver). The
+# system "awk" is bad on some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+ [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+ [_AM_PROG_TAR([v7])])])
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+ [_AM_DEPENDENCIES([CC])],
+ [m4_define([AC_PROG_CC],
+ m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+ [_AM_DEPENDENCIES([CXX])],
+ [m4_define([AC_PROG_CXX],
+ m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+ [_AM_DEPENDENCIES([OBJC])],
+ [m4_define([AC_PROG_OBJC],
+ m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJCXX],
+ [_AM_DEPENDENCIES([OBJCXX])],
+ [m4_define([AC_PROG_OBJCXX],
+ m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl
+])
+AC_REQUIRE([AM_SILENT_RULES])dnl
+dnl The testsuite driver may need to know about EXEEXT, so add the
+dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This
+dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below.
+AC_CONFIG_COMMANDS_PRE(dnl
+[m4_provide_if([_AM_COMPILER_EXEEXT],
+ [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
+
+# POSIX will say in a future version that running "rm -f" with no argument
+# is OK; and we want to be able to make that assumption in our Makefile
+# recipes. So use an aggressive probe to check that the usage we want is
+# actually supported "in the wild" to an acceptable degree.
+# See automake bug#10828.
+# To make any issue more visible, cause the running configure to be aborted
+# by default if the 'rm' program in use doesn't match our expectations; the
+# user can still override this though.
+if rm -f && rm -fr && rm -rf; then : OK; else
+ cat >&2 <<'END'
+Oops!
+
+Your 'rm' program seems unable to run without file operands specified
+on the command line, even when the '-f' option is present. This is contrary
+to the behaviour of most rm programs out there, and not conforming with
+the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>
+
+Please tell bug-automake@gnu.org about your system, including the value
+of your $PATH and any error possibly output before this message. This
+can help us improve future automake versions.
+
+END
+ if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then
+ echo 'Configuration will proceed anyway, since you have set the' >&2
+ echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2
+ echo >&2
+ else
+ cat >&2 <<'END'
+Aborting the configuration process, to ensure you take notice of the issue.
+
+You can download and install GNU coreutils to get an 'rm' implementation
+that behaves properly: <http://www.gnu.org/software/coreutils/>.
+
+If you want to complete the configuration process using your problematic
+'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
+to "yes", and re-run configure.
+
+END
+ AC_MSG_ERROR([Your 'rm' program is bad, sorry.])
+ fi
+fi
+dnl The trailing newline in this macro's definition is deliberate, for
+dnl backward compatibility and to allow trailing 'dnl'-style comments
+dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841.
+])
+
+dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not
+dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
+dnl mangled by Autoconf and run in a shell conditional statement.
+m4_define([_AC_COMPILER_EXEEXT],
+m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated. The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_arg=$1
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+ case $_am_header in
+ $_am_arg | $_am_arg:* )
+ break ;;
+ * )
+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+ esac
+done
+echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
+
+# Copyright (C) 2001-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+if test x"${install_sh+set}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+ *)
+ install_sh="\${SHELL} $am_aux_dir/install-sh"
+ esac
+fi
+AC_SUBST([install_sh])])
+
+# Copyright (C) 2003-2017 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.
+
+# Check whether the underlying file-system supports filenames
+# with a leading dot. For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+ am__leading_dot=.
+else
+ am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
+
+# Add --enable-maintainer-mode option to configure. -*- Autoconf -*-
+# From Jim Meyering
+
+# Copyright (C) 1996-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_MAINTAINER_MODE([DEFAULT-MODE])
+# ----------------------------------
+# Control maintainer-specific portions of Makefiles.
+# Default is to disable them, unless 'enable' is passed literally.
+# For symmetry, 'disable' may be passed as well. Anyway, the user
+# can override the default with the --enable/--disable switch.
+AC_DEFUN([AM_MAINTAINER_MODE],
+[m4_case(m4_default([$1], [disable]),
+ [enable], [m4_define([am_maintainer_other], [disable])],
+ [disable], [m4_define([am_maintainer_other], [enable])],
+ [m4_define([am_maintainer_other], [enable])
+ m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])])
+AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
+ dnl maintainer-mode's default is 'disable' unless 'enable' is passed
+ AC_ARG_ENABLE([maintainer-mode],
+ [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode],
+ am_maintainer_other[ make rules and dependencies not useful
+ (and sometimes confusing) to the casual installer])],
+ [USE_MAINTAINER_MODE=$enableval],
+ [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes]))
+ AC_MSG_RESULT([$USE_MAINTAINER_MODE])
+ AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes])
+ MAINT=$MAINTAINER_MODE_TRUE
+ AC_SUBST([MAINT])dnl
+]
+)
+
+# Check to see how 'make' treats includes. -*- Autoconf -*-
+
+# Copyright (C) 2001-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_MAKE_INCLUDE()
+# -----------------
+# Check to see how make treats includes.
+AC_DEFUN([AM_MAKE_INCLUDE],
+[am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+ @echo this is the am__doit target
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+AC_MSG_CHECKING([for style of include used by $am_make])
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# Ignore all kinds of additional output from 'make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+ am__include=include
+ am__quote=
+ _am_result=GNU
+ ;;
+esac
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+ echo '.include "confinc"' > confmf
+ case `$am_make -s -f confmf 2> /dev/null` in #(
+ *the\ am__doit\ target*)
+ am__include=.include
+ am__quote="\""
+ _am_result=BSD
+ ;;
+ esac
+fi
+AC_SUBST([am__include])
+AC_SUBST([am__quote])
+AC_MSG_RESULT([$_am_result])
+rm -f confinc confmf
+])
+
+# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
+
+# Copyright (C) 1997-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it is modern enough.
+# If it is, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([missing])dnl
+if test x"${MISSING+set}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+ *)
+ MISSING="\${SHELL} $am_aux_dir/missing" ;;
+ esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --is-lightweight"; then
+ am_missing_run="$MISSING "
+else
+ am_missing_run=
+ AC_MSG_WARN(['missing' script is too old or missing])
+fi
+])
+
+# Helper functions for option handling. -*- Autoconf -*-
+
+# Copyright (C) 2001-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# --------------------
+# Set option NAME. Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), [1])])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+# Copyright (C) 1999-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_PROG_CC_C_O
+# ---------------
+# Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC
+# to automatically call this.
+AC_DEFUN([_AM_PROG_CC_C_O],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([compile])dnl
+AC_LANG_PUSH([C])dnl
+AC_CACHE_CHECK(
+ [whether $CC understands -c and -o together],
+ [am_cv_prog_cc_c_o],
+ [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])])
+ # Make sure it works both with $CC and with simple cc.
+ # Following AC_PROG_CC_C_O, we do the test twice because some
+ # compilers refuse to overwrite an existing .o file with -o,
+ # though they will create one.
+ am_cv_prog_cc_c_o=yes
+ for am_i in 1 2; do
+ if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \
+ && test -f conftest2.$ac_objext; then
+ : OK
+ else
+ am_cv_prog_cc_c_o=no
+ break
+ fi
+ done
+ rm -f core conftest*
+ unset am_i])
+if test "$am_cv_prog_cc_c_o" != yes; then
+ # Losing compiler, so override with the script.
+ # FIXME: It is wrong to rewrite CC.
+ # But if we don't then we get into trouble of one sort or another.
+ # A longer-term fix would be to have automake use am__CC in this case,
+ # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+ CC="$am_aux_dir/compile $CC"
+fi
+AC_LANG_POP([C])])
+
+# For backward compatibility.
+AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])])
+
+# Copyright (C) 2001-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_RUN_LOG(COMMAND)
+# -------------------
+# Run COMMAND, save the exit status in ac_status, and log it.
+# (This has been adapted from Autoconf's _AC_RUN_LOG macro.)
+AC_DEFUN([AM_RUN_LOG],
+[{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD
+ ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+ (exit $ac_status); }])
+
+# Check to make sure that the build environment is sane. -*- Autoconf -*-
+
+# Copyright (C) 1996-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name. Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+ *[[\\\"\#\$\&\'\`$am_lf]]*)
+ AC_MSG_ERROR([unsafe absolute working directory name]);;
+esac
+case $srcdir in
+ *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*)
+ AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);;
+esac
+
+# Do 'set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ am_has_slept=no
+ for am_try in 1 2; do
+ echo "timestamp, slept: $am_has_slept" > conftest.file
+ set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+ if test "$[*]" = "X"; then
+ # -L didn't work.
+ set X `ls -t "$srcdir/configure" conftest.file`
+ fi
+ if test "$[*]" != "X $srcdir/configure conftest.file" \
+ && test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
+ alias in your environment])
+ fi
+ if test "$[2]" = conftest.file || test $am_try -eq 2; then
+ break
+ fi
+ # Just in case.
+ sleep 1
+ am_has_slept=yes
+ done
+ test "$[2]" = conftest.file
+ )
+then
+ # Ok.
+ :
+else
+ AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT([yes])
+# If we didn't sleep, we still need to ensure time stamps of config.status and
+# generated files are strictly newer.
+am_sleep_pid=
+if grep 'slept: no' conftest.file >/dev/null 2>&1; then
+ ( sleep 1 ) &
+ am_sleep_pid=$!
+fi
+AC_CONFIG_COMMANDS_PRE(
+ [AC_MSG_CHECKING([that generated files are newer than configure])
+ if test -n "$am_sleep_pid"; then
+ # Hide warnings about reused PIDs.
+ wait $am_sleep_pid 2>/dev/null
+ fi
+ AC_MSG_RESULT([done])])
+rm -f conftest.file
+])
+
+# Copyright (C) 2009-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_SILENT_RULES([DEFAULT])
+# --------------------------
+# Enable less verbose build rules; with the default set to DEFAULT
+# ("yes" being less verbose, "no" or empty being verbose).
+AC_DEFUN([AM_SILENT_RULES],
+[AC_ARG_ENABLE([silent-rules], [dnl
+AS_HELP_STRING(
+ [--enable-silent-rules],
+ [less verbose build output (undo: "make V=1")])
+AS_HELP_STRING(
+ [--disable-silent-rules],
+ [verbose build output (undo: "make V=0")])dnl
+])
+case $enable_silent_rules in @%:@ (((
+ yes) AM_DEFAULT_VERBOSITY=0;;
+ no) AM_DEFAULT_VERBOSITY=1;;
+ *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);;
+esac
+dnl
+dnl A few 'make' implementations (e.g., NonStop OS and NextStep)
+dnl do not support nested variable expansions.
+dnl See automake bug#9928 and bug#10237.
+am_make=${MAKE-make}
+AC_CACHE_CHECK([whether $am_make supports nested variables],
+ [am_cv_make_support_nested_variables],
+ [if AS_ECHO([['TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+ @$(TRUE)
+.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then
+ am_cv_make_support_nested_variables=yes
+else
+ am_cv_make_support_nested_variables=no
+fi])
+if test $am_cv_make_support_nested_variables = yes; then
+ dnl Using '$V' instead of '$(V)' breaks IRIX make.
+ AM_V='$(V)'
+ AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+ AM_V=$AM_DEFAULT_VERBOSITY
+ AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
+AC_SUBST([AM_V])dnl
+AM_SUBST_NOTMAKE([AM_V])dnl
+AC_SUBST([AM_DEFAULT_V])dnl
+AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl
+AC_SUBST([AM_DEFAULT_VERBOSITY])dnl
+AM_BACKSLASH='\'
+AC_SUBST([AM_BACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
+])
+
+# Copyright (C) 2001-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_STRIP
+# ---------------------
+# One issue with vendor 'install' (even GNU) is that you can't
+# specify the program used to strip binaries. This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in "make install-strip", and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using 'strip' when the user
+# run "make install-strip". However 'strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the 'STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be 'maybe'.
+if test "$cross_compiling" != no; then
+ AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+# Copyright (C) 2006-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
+# This macro is traced by Automake.
+AC_DEFUN([_AM_SUBST_NOTMAKE])
+
+# AM_SUBST_NOTMAKE(VARIABLE)
+# --------------------------
+# Public sister of _AM_SUBST_NOTMAKE.
+AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
+
+# Check how to create a tarball. -*- Autoconf -*-
+
+# Copyright (C) 2004-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_PROG_TAR(FORMAT)
+# --------------------
+# Check how to create a tarball in format FORMAT.
+# FORMAT should be one of 'v7', 'ustar', or 'pax'.
+#
+# Substitute a variable $(am__tar) that is a command
+# writing to stdout a FORMAT-tarball containing the directory
+# $tardir.
+# tardir=directory && $(am__tar) > result.tar
+#
+# Substitute a variable $(am__untar) that extract such
+# a tarball read from stdin.
+# $(am__untar) < result.tar
+#
+AC_DEFUN([_AM_PROG_TAR],
+[# Always define AMTAR for backward compatibility. Yes, it's still used
+# in the wild :-( We should find a proper way to deprecate it ...
+AC_SUBST([AMTAR], ['$${TAR-tar}'])
+
+# We'll loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+
+m4_if([$1], [v7],
+ [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'],
+
+ [m4_case([$1],
+ [ustar],
+ [# The POSIX 1988 'ustar' format is defined with fixed-size fields.
+ # There is notably a 21 bits limit for the UID and the GID. In fact,
+ # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343
+ # and bug#13588).
+ am_max_uid=2097151 # 2^21 - 1
+ am_max_gid=$am_max_uid
+ # The $UID and $GID variables are not portable, so we need to resort
+ # to the POSIX-mandated id(1) utility. Errors in the 'id' calls
+ # below are definitely unexpected, so allow the users to see them
+ # (that is, avoid stderr redirection).
+ am_uid=`id -u || echo unknown`
+ am_gid=`id -g || echo unknown`
+ AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format])
+ if test $am_uid -le $am_max_uid; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ _am_tools=none
+ fi
+ AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format])
+ if test $am_gid -le $am_max_gid; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ _am_tools=none
+ fi],
+
+ [pax],
+ [],
+
+ [m4_fatal([Unknown tar format])])
+
+ AC_MSG_CHECKING([how to create a $1 tar archive])
+
+ # Go ahead even if we have the value already cached. We do so because we
+ # need to set the values for the 'am__tar' and 'am__untar' variables.
+ _am_tools=${am_cv_prog_tar_$1-$_am_tools}
+
+ for _am_tool in $_am_tools; do
+ case $_am_tool in
+ gnutar)
+ for _am_tar in tar gnutar gtar; do
+ AM_RUN_LOG([$_am_tar --version]) && break
+ done
+ am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+ am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+ am__untar="$_am_tar -xf -"
+ ;;
+ plaintar)
+ # Must skip GNU tar: if it does not support --format= it doesn't create
+ # ustar tarball either.
+ (tar --version) >/dev/null 2>&1 && continue
+ am__tar='tar chf - "$$tardir"'
+ am__tar_='tar chf - "$tardir"'
+ am__untar='tar xf -'
+ ;;
+ pax)
+ am__tar='pax -L -x $1 -w "$$tardir"'
+ am__tar_='pax -L -x $1 -w "$tardir"'
+ am__untar='pax -r'
+ ;;
+ cpio)
+ am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+ am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+ am__untar='cpio -i -H $1 -d'
+ ;;
+ none)
+ am__tar=false
+ am__tar_=false
+ am__untar=false
+ ;;
+ esac
+
+ # If the value was cached, stop now. We just wanted to have am__tar
+ # and am__untar set.
+ test -n "${am_cv_prog_tar_$1}" && break
+
+ # tar/untar a dummy directory, and stop if the command works.
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ echo GrepMe > conftest.dir/file
+ AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+ rm -rf conftest.dir
+ if test -s conftest.tar; then
+ AM_RUN_LOG([$am__untar <conftest.tar])
+ AM_RUN_LOG([cat conftest.dir/file])
+ grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+ fi
+ done
+ rm -rf conftest.dir
+
+ AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+ AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+
+AC_SUBST([am__tar])
+AC_SUBST([am__untar])
+]) # _AM_PROG_TAR
+
+m4_include([../libtool.m4])
+m4_include([../ltoptions.m4])
+m4_include([../ltsugar.m4])
+m4_include([../ltversion.m4])
+m4_include([../lt~obsolete.m4])
+m4_include([acinclude.m4])
diff --git a/gprofng/common/cc_libcollector.h b/gprofng/common/cc_libcollector.h
new file mode 100644
index 00000000000..e0785418bb3
--- /dev/null
+++ b/gprofng/common/cc_libcollector.h
@@ -0,0 +1,44 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+/*
+ * This file describes the enum's, etc. shared by the collector control
+ * class and libcollector and its modules. It is #included in collctrl.h
+ * so any changes to it should follow the procedure described there.
+ */
+
+#ifndef _CC_LIBCOLLECTOR_H
+#define _CC_LIBCOLLECTOR_H
+
+/* definitions for synchronization tracing scope -- a bit mask */
+#define SYNCSCOPE_NATIVE 0x1
+#define SYNCSCOPE_JAVA 0x2
+
+typedef enum
+{
+ FOLLOW_NONE = 0x0,
+ FOLLOW_EXEC = 0x1,
+ FOLLOW_FORK = 0x2,
+ FOLLOW_ON = 0x3,
+ FOLLOW_COMBO = 0x4,
+ FOLLOW_ALL = 0x7
+} Follow_type;
+
+#endif /* !__CC_LIBCOLLECTOR_H */
diff --git a/gprofng/common/config.h.in b/gprofng/common/config.h.in
new file mode 100644
index 00000000000..8409ce74a57
--- /dev/null
+++ b/gprofng/common/config.h.in
@@ -0,0 +1,120 @@
+/* common/config.h.in. Generated from configure.ac by autoheader. */
+
+/* Enable debugging output. */
+#undef DEBUG
+
+/* Enable java profiling */
+#undef GPROFNG_JAVA_PROFILING
+
+/* Define to 1 if you have the `clock_gettime' function. */
+#undef HAVE_CLOCK_GETTIME
+
+/* Define to 1 if you have the declaration of `basename', and to 0 if you
+ don't. */
+#undef HAVE_DECL_BASENAME
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#undef HAVE_DLFCN_H
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define if you have POSIX threads libraries and header files. */
+#undef HAVE_PTHREAD
+
+/* Have PTHREAD_PRIO_INHERIT. */
+#undef HAVE_PTHREAD_PRIO_INHERIT
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define to 1 if you have the `strsignal' function. */
+#undef HAVE_STRSIGNAL
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define to the sub-directory in which libtool stores uninstalled libraries.
+ */
+#undef LT_OBJDIR
+
+/* Name of package */
+#undef PACKAGE
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the home page for this package. */
+#undef PACKAGE_URL
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* Define to necessary symbol if this constant uses a non-standard name on
+ your system. */
+#undef PTHREAD_CREATE_JOINABLE
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Enable extensions on AIX 3, Interix. */
+#ifndef _ALL_SOURCE
+# undef _ALL_SOURCE
+#endif
+/* Enable GNU extensions on systems that have them. */
+#ifndef _GNU_SOURCE
+# undef _GNU_SOURCE
+#endif
+/* Enable threading extensions on Solaris. */
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# undef _POSIX_PTHREAD_SEMANTICS
+#endif
+/* Enable extensions on HP NonStop. */
+#ifndef _TANDEM_SOURCE
+# undef _TANDEM_SOURCE
+#endif
+/* Enable general extensions on Solaris. */
+#ifndef __EXTENSIONS__
+# undef __EXTENSIONS__
+#endif
+
+
+/* Version number of package */
+#undef VERSION
+
+/* Define to 1 if on MINIX. */
+#undef _MINIX
+
+/* Define to 2 if the system does not provide POSIX.1 features except with
+ this defined. */
+#undef _POSIX_1_SOURCE
+
+/* Define to 1 if you need to in order for `stat' and other things to work. */
+#undef _POSIX_SOURCE
diff --git a/gprofng/common/core_pcbe.c b/gprofng/common/core_pcbe.c
new file mode 100644
index 00000000000..6f746d8da1d
--- /dev/null
+++ b/gprofng/common/core_pcbe.c
@@ -0,0 +1,3023 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+/*
+ * Performance Counter Back-End for Intel Family 6
+ * Models 15(06_0FH) 23(06_17H) (Core 2)
+ * Models 28(06_1CH) (Atom)
+ * Models 37(06_25H) 44(06_2CH) (Westmere)
+ * Models 26(06_1AH) 30(06_1EH) 31(06_1FH) 46(06_2EH) (Nehalem)
+ * Models 42(06_2AH) 45(06_2DH) (Sandy Bridge)
+ * Models 58(06_3AH) 62(06_3EH) (Ivy Bridge)
+ * Models 60(06_3CH) 63(06_3FH) 69(06_45H) 70(06_46H) (Haswell)
+ * Models 61(06_3DH) 71(06_47H) 79(06_4FH) 86(06_??H) (Broadwell) (79 not listed in Intel SDM as of June 2015)
+ * Models 78(06_4EH) 85(06_55H) 94(06_5EH) (Skylake) (Note Skylake and later: versionID==4)
+ * To add another model number:
+ * - add appropriate table data in the form
+ * #define EVENTS_FAM6_MODXX
+ * - add appropriate table definitions in the form
+ * const struct events_table_t events_fam6_modXX[] =
+ * - set events_table to the appropriate table
+ * using the "switch ( cpuid_getmodel(CPU) )" statement
+ * in core_pcbe_init()
+ * - check the date in core_pcbe_cpuref()
+ * Table data can be derived from:
+ * - the Intel SDM
+ * also https://download.01.org/perfmon/
+ * - libcpc source code in usr/src/uts/intel/pcbe/
+ * - libpfm4
+ * but there are typically inconsistencies among these
+ * sources of data. So, judgment is required.
+ * Other things to do to add a new processor:
+ * x file hwc_cpus.h
+ * add a cpuver enumerator
+ * add lookup entry
+ * x file hwctable.c
+ * add a table (aliases, etc.)
+ * add a cputabs entry, including default metrics
+ * look for other places where the most-recently-added CPU is mentioned
+ * x file cpu_frequency.h
+ * function get_max_turbo_freq()
+ * go to "switch (model)", and add turbo boosts
+ */
+
+#include <sys/types.h>
+#include "hwcdrv.h"
+
+static uint64_t num_gpc; /* number of general purpose counters (e.g. 2-4) */
+static uint64_t num_ffc; /* number fixed function counters (e.g. 3) */
+static uint_t total_pmc; /* num_gpc + num_ffc */
+
+/*
+ * Only the lower 32-bits can be written to in the general-purpose
+ * counters. The higher bits are extended from bit 31; all ones if
+ * bit 31 is one and all zeros otherwise.
+ *
+ * The fixed-function counters do not have this restriction.
+ */
+
+static const char *ffc_names[] = {
+/*
+ * While modern Intel processors have fixed-function counters (FFCs),
+ * on Linux we access HWCs through the perf_event_open() kernel interface,
+ * which does not allow us direct access to the FFCs.
+ * Rather, the Linux kernel manages registers opaquely.
+ * At best, it allows us extra HW events by off-loading
+ * HWCs to FFCs as available. Often, however, the FFCs
+ * are commandeered by other activities like the NMI watchdog.
+ * We will omit any explicit reference to them.
+ * https://lists.eecs.utk.edu/pipermail/perfapi-devel/2015-February/006895.html
+ * See also bug 21315497.
+ */
+#if 0
+ "instr_retired.any",
+ "cpu_clk_unhalted.core",
+ "cpu_clk_unhalted.ref",
+#endif
+ NULL
+};
+
+#define IMPL_NAME_LEN 100
+static char core_impl_name[IMPL_NAME_LEN];
+
+/*
+ * Most events require only an event code and a umask.
+ * Some also require attributes, cmasks, or MSR programming.
+ * Until Sandy Bridge, the number of these other events
+ * was small and libcpc just ignored them.
+ * With Sandy Bridge, libcpc added for support for these
+ * additional events.
+ *
+ * We use an expanded events_table_t here -- patterned
+ * after snb_pcbe_events_table_t in libcpc's
+ * usr/src/uts/intel/pcbe/snb_pcbe.h -- for all processors.
+ *
+ * Correspondingly, we also define ATTR_* macros, but we
+ * define them to set bits as they will appear
+ * in bits 16-23 of the final eventsel. Definitions of those
+ * bits can be found in "struct ia32_perfevtsel" in libcpc's
+ * usr/src/uts/intel/pcbe/intel_pcbe_utils.h .
+ *
+ * For now, I don't know how to handle msr_offset.
+ * So, let's not include events that call for it.
+ *
+ * For now, don't do anything with ATTR_PEBS other than
+ * to note it in tables (starting with Haswell).
+ *
+ * Solaris tables also have ATTR_PEBS_ONLY. We cannot
+ * use these counters from "collect -h" and so do not
+ * include them.
+ */
+#define ATTR_NONE 0
+#define ATTR_EDGE (1 << 2) /* bit 18 - offset 16 */
+#define ATTR_ANY (1 << 5) /* bit 21 - offset 16 */
+#define ATTR_INV (1 << 7) /* bit 23 - offset 16 */
+#define ATTR_PEBS ATTR_NONE // PEBS not supported
+#define ATTR_TSX ATTR_NONE // TSX MSRs not supported
+#undef ATTR_PEBS_ONLY // PEBS-only event, not supported
+#undef ATTR_PEBS_ONLY_LD_LAT // not supported
+
+struct events_table_t
+{
+ uint32_t eventselect;
+ uint32_t unitmask;
+ uint64_t supported_counters;
+ const char *name;
+ uint8_t cmask;
+ uint8_t attrs;
+ uint16_t msr_offset;
+};
+
+/* Used to describe which counters support an event */
+#define C(x) (1 << (x))
+#define C0 C(0)
+#define C1 C(1)
+#define C2 C(2)
+#define C3 C(3)
+#define C_ALL 0xFFFFFFFFFFFFFFFF
+#define CDEAD 0 /* Counter that is broken */
+
+/* note that regular events use the original spelling like "inst_retired.any_p" */
+#define ARCH_EVENTS /* NOTE: Order specified in PRM must be maintained! */ \
+{ 0x3C, 0x00, C_ALL, "unhalted-core-cycles" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x3C, 0x01, C_ALL, "unhalted-reference-cycles" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC0, 0x00, C_ALL, "instruction-retired" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x2E, 0x4F, C_ALL, "llc-reference" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x2E, 0x41, C_ALL, "llc-misses" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC4, 0x00, C_ALL, "branch-instruction-retired" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC5, 0x00, C_ALL, "branch-misses-retired" , 0x0, ATTR_NONE, 0x0 }, \
+/* end of #define */
+
+/*
+ * FAM6/MOD15:
+ * Xeon 3000, 3200, 5100, 5300, 7300
+ * Core 2 Quad, Extreme, and Duo
+ * Pentium dual-core processors
+ * FAM6/MOD23:
+ * Xeon 5200, 5400 series, Intel
+ * Core 2 Quad Q9650.
+ */
+#define EVENTS_FAM6_MOD23 \
+{ 0x03, 0x00, C0|C1, "load_block" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x03, 0x02, C0|C1, "load_block.sta" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x03, 0x04, C0|C1, "load_block.std" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x03, 0x08, C0|C1, "load_block.overlap_store" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x03, 0x10, C0|C1, "load_block.until_retire" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x03, 0x20, C0|C1, "load_block.l1d" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x04, 0x00, C0|C1, "store_block" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x04, 0x01, C0|C1, "store_block.drain_cycles" /*spell-diff*/ , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x04, 0x02, C0|C1, "store_block.order" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x04, 0x08, C0|C1, "store_block.snoop" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x05, 0x00, C0|C1, "misalign_mem_ref" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x06, 0x00, C0|C1, "segment_reg_loads" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x07, 0x00, C0|C1, "sse_pre_exec" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x07, 0x00, C0|C1, "sse_pre_exec.nta" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x07, 0x01, C0|C1, "sse_pre_exec.l1" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x07, 0x02, C0|C1, "sse_pre_exec.l2" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x07, 0x03, C0|C1, "sse_pre_exec.stores" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x08, 0x00, C0|C1, "dtlb_misses" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x08, 0x01, C0|C1, "dtlb_misses.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x08, 0x02, C0|C1, "dtlb_misses.miss_ld" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x08, 0x04, C0|C1, "dtlb_misses.l0_miss_ld" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x08, 0x08, C0|C1, "dtlb_misses.miss_st" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x09, 0x00, C0|C1, "memory_disambiguation" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x09, 0x01, C0|C1, "memory_disambiguation.reset" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x09, 0x02, C0|C1, "memory_disambiguation.success" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x0c, 0x00, C0|C1, "page_walks" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x0c, 0x01, C0|C1, "page_walks.count" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x0c, 0x02, C0|C1, "page_walks.cycles" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x10, 0x00, C0 , "fp_comp_ops_exe" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x11, 0x00, C1, "fp_assist" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x12, 0x00, C1, "mul" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x13, 0x00, C1, "div" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x14, 0x00, C0 , "cycles_div_busy" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x18, 0x00, C0 , "idle_during_div" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x19, 0x00, C1, "delayed_bypass" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x19, 0x00, C1, "delayed_bypass.fp" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x19, 0x01, C1, "delayed_bypass.simd" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x19, 0x02, C1, "delayed_bypass.load" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x21, 0x00, C0|C1, "l2_ads" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x23, 0x00, C0|C1, "l2_dbus_busy_rd" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x00, C0|C1, "l2_lines_in" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x25, 0x00, C0|C1, "l2_m_lines_in" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x26, 0x00, C0|C1, "l2_lines_out" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x27, 0x00, C0|C1, "l2_m_lines_out" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x28, 0x00, C0|C1, "l2_ifetch" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x29, 0x00, C0|C1, "l2_ld" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x2a, 0x00, C0|C1, "l2_st" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x2b, 0x00, C0|C1, "l2_lock" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x2e, 0x00, C0|C1, "l2_rqsts" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x2e, 0x41, C0|C1, "l2_rqsts.self.demand.i_state" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x2e, 0x4f, C0|C1, "l2_rqsts.self.demand.mesi" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x30, 0x00, C0|C1, "l2_reject_busq" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x32, 0x00, C0|C1, "l2_no_req" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x3a, 0x00, C0|C1, "eist_trans" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x3b, 0xc0, C0|C1, "thermal_trip" /*non-zero umask*/ , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x3c, 0x00, C0|C1, "cpu_clk_unhalted" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x3c, 0x00, C0|C1, "cpu_clk_unhalted.core_p" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x3c, 0x01, C0|C1, "cpu_clk_unhalted.bus" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x3c, 0x02, C0|C1, "cpu_clk_unhalted.no_other" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x40, 0x00, C0|C1, "l1d_cache_ld" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x41, 0x00, C0|C1, "l1d_cache_st" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x42, 0x00, C0|C1, "l1d_cache_lock" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x42, 0x10, C0|C1, "l1d_cache_lock.duration" /*spelling*/ , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x43, 0x00, C0|C1, "l1d_all" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x43, 0x00, C0|C1, "l1d_all_ref" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x43, 0x01, C0|C1, "l1d_all.ref" /*spelling*/ , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x43, 0x02, C0|C1, "l1d_all.cache_ref" /*spelling*/ , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x45, 0x0f, C0|C1, "l1d_repl" /*non-zero umask*/ , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x46, 0x00, C0|C1, "l1d_m_repl" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x47, 0x00, C0|C1, "l1d_m_evict" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x48, 0x00, C0|C1, "l1d_pend_miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x49, 0x00, C0|C1, "l1d_split" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x49, 0x01, C0|C1, "l1d_split.loads" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x49, 0x02, C0|C1, "l1d_split.stores" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x4b, 0x00, C0|C1, "sse_pre_miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x4b, 0x00, C0|C1, "sse_pre_miss.nta" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x4b, 0x01, C0|C1, "sse_pre_miss.l1" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x4b, 0x02, C0|C1, "sse_pre_miss.l2" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x4c, 0x00, C0|C1, "load_hit_pre" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x4e, 0x00, C0|C1, "l1d_prefetch" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x4e, 0x10, C0|C1, "l1d_prefetch.requests" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x60, 0x00, C0|C1, "bus_request_outstanding" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x61, 0x00, C0|C1, "bus_bnr_drv" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x62, 0x00, C0|C1, "bus_drdy_clocks" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x63, 0x00, C0|C1, "bus_lock_clocks" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x64, 0x00, C0|C1, "bus_data_rcv" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x65, 0x00, C0|C1, "bus_trans_brd" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x66, 0x00, C0|C1, "bus_trans_rfo" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x67, 0x00, C0|C1, "bus_trans_wb" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x68, 0x00, C0|C1, "bus_trans_ifetch" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x69, 0x00, C0|C1, "bus_trans_inval" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x6a, 0x00, C0|C1, "bus_trans_pwr" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x6b, 0x00, C0|C1, "bus_trans_p" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x6c, 0x00, C0|C1, "bus_trans_io" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x6d, 0x00, C0|C1, "bus_trans_def" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x6e, 0x00, C0|C1, "bus_trans_burst" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x6f, 0x00, C0|C1, "bus_trans_mem" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x70, 0x00, C0|C1, "bus_trans_any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x77, 0x00, C0|C1, "ext_snoop" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x78, 0x00, C0|C1, "cmp_snoop" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x7a, 0x00, C0|C1, "bus_hit_drv" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x7b, 0x00, C0|C1, "bus_hitm_drv" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x7d, 0x00, C0|C1, "busq_empty" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x7e, 0x00, C0|C1, "snoop_stall_drv" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x7f, 0x00, C0|C1, "bus_io_wait" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x80, 0x00, C0|C1, "l1i_reads" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x81, 0x00, C0|C1, "l1i_misses" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x82, 0x00, C0|C1, "itlb" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x82, 0x02, C0|C1, "itlb.small_miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x82, 0x10, C0|C1, "itlb.large_miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x82, 0x12, C0|C1, "itlb.misses" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x82, 0x40, C0|C1, "itlb.flush" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x83, 0x00, C0|C1, "inst_queue" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x83, 0x02, C0|C1, "inst_queue.full" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x86, 0x00, C0|C1, "cycles_l1i_mem_stalled" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x87, 0x00, C0|C1, "ild_stall" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x88, 0x00, C0|C1, "br_inst_exec" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x89, 0x00, C0|C1, "br_missp_exec" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x8a, 0x00, C0|C1, "br_bac_missp_exec" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x8b, 0x00, C0|C1, "br_cnd_exec" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x8c, 0x00, C0|C1, "br_cnd_missp_exec" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x8d, 0x00, C0|C1, "br_ind_exec" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x8e, 0x00, C0|C1, "br_ind_missp_exec" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x8f, 0x00, C0|C1, "br_ret_exec" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x90, 0x00, C0|C1, "br_ret_missp_exec" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x91, 0x00, C0|C1, "br_ret_bac_missp_exec" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x92, 0x00, C0|C1, "br_call_exec" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x93, 0x00, C0|C1, "br_call_missp_exec" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x94, 0x00, C0|C1, "br_ind_call_exec" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x97, 0x00, C0|C1, "br_tkn_bubble_1" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x98, 0x00, C0|C1, "br_tkn_bubble_2" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xa0, 0x00, C0|C1, "rs_uops_dispatched" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xa1, 0x00, C0 , "rs_uops_dispatched_port" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xa1, 0x01, C0 , "rs_uops_dispatched_port.0" /*spelling*/ , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xa1, 0x02, C0 , "rs_uops_dispatched_port.1" /*spelling*/ , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xa1, 0x04, C0 , "rs_uops_dispatched_port.2" /*spelling*/ , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xa1, 0x08, C0 , "rs_uops_dispatched_port.3" /*spelling*/ , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xa1, 0x10, C0 , "rs_uops_dispatched_port.4" /*spelling*/ , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xa1, 0x20, C0 , "rs_uops_dispatched_port.5" /*spelling*/ , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xaa, 0x00, C0|C1, "macro_insts" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xaa, 0x01, C0|C1, "macro_insts.decoded" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xaa, 0x08, C0|C1, "macro_insts.cisc_decoded" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xab, 0x00, C0|C1, "esp" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xab, 0x01, C0|C1, "esp.synch" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xab, 0x02, C0|C1, "esp.additions" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xb0, 0x00, C0|C1, "simd_uops_exec" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xb1, 0x00, C0|C1, "simd_sat_uop_exec" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xb3, 0x00, C0|C1, "simd_uop_type_exec" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xb3, 0x01, C0|C1, "simd_uop_type_exec.mul" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xb3, 0x02, C0|C1, "simd_uop_type_exec.shift" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xb3, 0x04, C0|C1, "simd_uop_type_exec.pack" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xb3, 0x08, C0|C1, "simd_uop_type_exec.unpack" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xb3, 0x10, C0|C1, "simd_uop_type_exec.logical" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xb3, 0x20, C0|C1, "simd_uop_type_exec.arithmetic" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc0, 0x00, C0|C1, "inst_retired" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc0, 0x00, C0|C1, "inst_retired.any_p" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc0, 0x01, C0|C1, "inst_retired.loads" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc0, 0x02, C0|C1, "inst_retired.stores" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc0, 0x04, C0|C1, "inst_retired.other" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc0, 0x08, C0|C1, "inst_retired.vm_h" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc1, 0x00, C0|C1, "x87_ops_retired" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc1, 0x01, C0|C1, "x87_ops_retired.fxch" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc1, 0xfe, C0|C1, "x87_ops_retired.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc2, 0x00, C0|C1, "uops_retired" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc2, 0x01, C0|C1, "uops_retired.ld_ind_br" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc2, 0x02, C0|C1, "uops_retired.std_sta" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc2, 0x04, C0|C1, "uops_retired.macro_fusion" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc2, 0x07, C0|C1, "uops_retired.fused" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc2, 0x08, C0|C1, "uops_retired.non_fused" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc2, 0x0f, C0|C1, "uops_retired.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc3, 0x00, C0|C1, "machine_nukes" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc3, 0x01, C0|C1, "machine_nukes.smc" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc3, 0x04, C0|C1, "machine_nukes.mem_order" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc4, 0x00, C0|C1, "br_inst_retired" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc4, 0x00, C0|C1, "br_inst_retired.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc4, 0x01, C0|C1, "br_inst_retired.pred_not_taken" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc4, 0x02, C0|C1, "br_inst_retired.mispred_not_taken" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc4, 0x04, C0|C1, "br_inst_retired.pred_taken" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc4, 0x08, C0|C1, "br_inst_retired.mispred_taken" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc4, 0x0c, C0|C1, "br_inst_retired.taken" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc5, 0x00, C0|C1, "br_inst_retired_mispred" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc5, 0x00, C0|C1, "br_inst_retired.mispred" /*alt-spelling*/ , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc6, 0x00, C0|C1, "cycles_int" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc6, 0x01, C0|C1, "cycles_int.masked" /*spelling*/ , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc6, 0x02, C0|C1, "cycles_int.pending_and_masked" /*spelling*/ , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc7, 0x00, C0|C1, "simd_inst_retired" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc7, 0x01, C0|C1, "simd_inst_retired.packed_single" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc7, 0x02, C0|C1, "simd_inst_retired.scalar_single" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc7, 0x04, C0|C1, "simd_inst_retired.packed_double" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc7, 0x08, C0|C1, "simd_inst_retired.scalar_double" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc7, 0x10, C0|C1, "simd_inst_retired.vector" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc7, 0x1f, C0|C1, "simd_inst_retired.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc8, 0x00, C0|C1, "hw_int_rcv" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc9, 0x00, C0|C1, "itlb_miss_retired" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xca, 0x00, C0|C1, "simd_comp_inst_retired" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xca, 0x01, C0|C1, "simd_comp_inst_retired.packed_single" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xca, 0x02, C0|C1, "simd_comp_inst_retired.scalar_single" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xca, 0x04, C0|C1, "simd_comp_inst_retired.packed_double" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xca, 0x08, C0|C1, "simd_comp_inst_retired.scalar_double" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xcb, 0x00, C0 , "mem_load_retired" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xcb, 0x01, C0 , "mem_load_retired.l1d_miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xcb, 0x02, C0 , "mem_load_retired.l1d_line_miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xcb, 0x04, C0 , "mem_load_retired.l2_miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xcb, 0x08, C0 , "mem_load_retired.l2_line_miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xcb, 0x10, C0 , "mem_load_retired.dtlb_miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xcc, 0x00, C0|C1, "fp_mmx_trans" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xcc, 0x01, C0|C1, "fp_mmx_trans.to_mmx" /*spelling*/ , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xcc, 0x02, C0|C1, "fp_mmx_trans.to_fp" /*spelling*/ , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xcd, 0x00, C0|C1, "simd_assist" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xce, 0x00, C0|C1, "simd_instr_retired" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xcf, 0x00, C0|C1, "simd_sat_instr_retired" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xd2, 0x00, C0|C1, "rat_stalls" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xd2, 0x01, C0|C1, "rat_stalls.rob_read_port" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xd2, 0x02, C0|C1, "rat_stalls.partial_cycles" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xd2, 0x04, C0|C1, "rat_stalls.flags" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xd2, 0x08, C0|C1, "rat_stalls.fpsw" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xd2, 0x0f, C0|C1, "rat_stalls.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xd2, 0x10, C0|C1, "rat_stalls.other_serialization_stalls", 0x0, ATTR_NONE, 0x0 }, \
+{ 0xd4, 0x00, C0|C1, "seg_rename_stalls" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xd4, 0x01, C0|C1, "seg_rename_stalls.es" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xd4, 0x02, C0|C1, "seg_rename_stalls.ds" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xd4, 0x04, C0|C1, "seg_rename_stalls.fs" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xd4, 0x08, C0|C1, "seg_rename_stalls.gs" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xd4, 0x0f, C0|C1, "seg_rename_stalls.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xd5, 0x00, C0|C1, "seg_reg_renames" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xd5, 0x01, C0|C1, "seg_reg_renames.es" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xd5, 0x02, C0|C1, "seg_reg_renames.ds" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xd5, 0x04, C0|C1, "seg_reg_renames.fs" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xd5, 0x08, C0|C1, "seg_reg_renames.gs" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xd5, 0x0f, C0|C1, "seg_reg_renames.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xdc, 0x00, C0|C1, "resource_stalls" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xdc, 0x01, C0|C1, "resource_stalls.rob_full" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xdc, 0x02, C0|C1, "resource_stalls.rs_full" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xdc, 0x04, C0|C1, "resource_stalls.ld_st" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xdc, 0x08, C0|C1, "resource_stalls.fpcw" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xdc, 0x10, C0|C1, "resource_stalls.br_miss_clear" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xdc, 0x1f, C0|C1, "resource_stalls.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xe0, 0x00, C0|C1, "br_inst_decoded" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xe4, 0x00, C0|C1, "bogus_br" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xe6, 0x00, C0|C1, "baclears" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xf0, 0x00, C0|C1, "pref_rqsts_up" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xf8, 0x00, C0|C1, "pref_rqsts_dn" , 0x0, ATTR_NONE, 0x0 }, \
+/* end of #define */
+
+/* FAM6 MOD28: Intel Atom processor */
+#define EVENTS_FAM6_MOD28 \
+{ 0x02, 0x81, C0|C1, "store_forwards.good" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x06, 0x00, C0|C1, "segment_reg_loads.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x07, 0x01, C0|C1, "prefetch.prefetcht0" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x07, 0x06, C0|C1, "prefetch.sw_l2" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x07, 0x08, C0|C1, "prefetch.prefetchnta" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x08, 0x05, C0|C1, "data_tlb_misses.dtlb_miss_ld" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x08, 0x06, C0|C1, "data_tlb_misses.dtlb_miss_st" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x08, 0x07, C0|C1, "data_tlb_misses.dtlb_miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x08, 0x09, C0|C1, "data_tlb_misses.l0_dtlb_miss_ld" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x0c, 0x03, C0|C1, "page_walks.cycles" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x10, 0x01, C0|C1, "x87_comp_ops_exe.any.s" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x10, 0x81, C0|C1, "x87_comp_ops_exe.any.ar" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x11, 0x01, C0|C1, "fp_assist" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x11, 0x81, C0|C1, "fp_assist.ar" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x12, 0x01, C0|C1, "mul.s" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x12, 0x81, C0|C1, "mul.ar" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x13, 0x01, C0|C1, "div.s" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x13, 0x81, C0|C1, "div.ar" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x14, 0x01, C0|C1, "cycles_div_busy" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x21, 0x00, C0|C1, "l2_ads" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x22, 0x00, C0|C1, "l2_dbus_busy" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x00, C0|C1, "l2_lines_in" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x25, 0x00, C0|C1, "l2_m_lines_in" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x26, 0x00, C0|C1, "l2_lines_out" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x27, 0x00, C0|C1, "l2_m_lines_out" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x28, 0x00, C0|C1, "l2_ifetch" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x29, 0x00, C0|C1, "l2_ld" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x2a, 0x00, C0|C1, "l2_st" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x2b, 0x00, C0|C1, "l2_lock" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x2e, 0x00, C0|C1, "l2_rqsts" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x2e, 0x41, C0|C1, "l2_rqsts.self.demand.i_state" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x2e, 0x4f, C0|C1, "l2_rqsts.self.demand.mesi" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x30, 0x00, C0|C1, "l2_reject_busq" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x32, 0x00, C0|C1, "l2_no_req" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x3a, 0x00, C0|C1, "eist_trans" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x3b, 0xc0, C0|C1, "thermal_trip" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x3c, 0x00, C0|C1, "cpu_clk_unhalted.core_p" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x3c, 0x01, C0|C1, "cpu_clk_unhalted.bus" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x3c, 0x02, C0|C1, "cpu_clk_unhalted.no_other" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x40, 0x21, C0|C1, "l1d_cache.ld" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x40, 0x22, C0|C1, "l1d_cache.st" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x60, 0x00, C0|C1, "bus_request_outstanding" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x61, 0x00, C0|C1, "bus_bnr_drv" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x62, 0x00, C0|C1, "bus_drdy_clocks" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x63, 0x00, C0|C1, "bus_lock_clocks" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x64, 0x00, C0|C1, "bus_data_rcv" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x65, 0x00, C0|C1, "bus_trans_brd" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x66, 0x00, C0|C1, "bus_trans_rfo" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x67, 0x00, C0|C1, "bus_trans_wb" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x68, 0x00, C0|C1, "bus_trans_ifetch" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x69, 0x00, C0|C1, "bus_trans_inval" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x6a, 0x00, C0|C1, "bus_trans_pwr" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x6b, 0x00, C0|C1, "bus_trans_p" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x6c, 0x00, C0|C1, "bus_trans_io" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x6d, 0x00, C0|C1, "bus_trans_def" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x6e, 0x00, C0|C1, "bus_trans_burst" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x6f, 0x00, C0|C1, "bus_trans_mem" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x70, 0x00, C0|C1, "bus_trans_any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x77, 0x00, C0|C1, "ext_snoop" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x7a, 0x00, C0|C1, "bus_hit_drv" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x7b, 0x00, C0|C1, "bus_hitm_drv" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x7d, 0x00, C0|C1, "busq_empty" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x7e, 0x00, C0|C1, "snoop_stall_drv" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x7f, 0x00, C0|C1, "bus_io_wait" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x80, 0x02, C0|C1, "icache.misses" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x80, 0x03, C0|C1, "icache.accesses" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x82, 0x02, C0|C1, "itlb.misses" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x82, 0x04, C0|C1, "itlb.flush" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xaa, 0x02, C0|C1, "macro_insts.cisc_decoded" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xaa, 0x03, C0|C1, "macro_insts.all_decoded" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xb0, 0x00, C0|C1, "simd_uops_exec.s" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xb0, 0x80, C0|C1, "simd_uops_exec.ar" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xb1, 0x00, C0|C1, "simd_sat_uop_exec.s" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xb1, 0x80, C0|C1, "simd_sat_uop_exec.ar" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xb3, 0x01, C0|C1, "simd_uop_type_exec.mul.s" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xb3, 0x02, C0|C1, "simd_uop_type_exec.shift.s" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xb3, 0x04, C0|C1, "simd_uop_type_exec.pack.s" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xb3, 0x08, C0|C1, "simd_uop_type_exec.unpack.s" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xb3, 0x10, C0|C1, "simd_uop_type_exec.logical.s" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xb3, 0x20, C0|C1, "simd_uop_type_exec.arithmetic.s" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xb3, 0x81, C0|C1, "simd_uop_type_exec.mul.ar" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xb3, 0x82, C0|C1, "simd_uop_type_exec.shift.ar" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xb3, 0x84, C0|C1, "simd_uop_type_exec.pack.ar" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xb3, 0x88, C0|C1, "simd_uop_type_exec.unpack.ar" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xb3, 0x90, C0|C1, "simd_uop_type_exec.logical.ar" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xb3, 0xa0, C0|C1, "simd_uop_type_exec.arithmetic.ar" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc0, 0x00, C0|C1, "inst_retired.any_p" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc2, 0x10, C0|C1, "uops_retired.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc3, 0x01, C0|C1, "machine_clears.smc" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc4, 0x00, C0|C1, "br_inst_retired.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc4, 0x01, C0|C1, "br_inst_retired.pred_not_taken" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc4, 0x02, C0|C1, "br_inst_retired.mispred_not_taken" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc4, 0x04, C0|C1, "br_inst_retired.pred_taken" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc4, 0x08, C0|C1, "br_inst_retired.mispred_taken" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc4, 0x0a, C0|C1, "br_inst_retired.mispred" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc4, 0x0c, C0|C1, "br_inst_retired.taken" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc4, 0x0f, C0|C1, "br_inst_retired.any1" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc5, 0x00, C0|C1, "br_inst_retired.mispred" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc6, 0x01, C0|C1, "cycles_int_masked.cycles_int_masked" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc6, 0x02, C0|C1, "cycles_int_masked.cycles_int_pending_and_masked" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc7, 0x01, C0|C1, "simd_inst_retired.packed_single" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc7, 0x02, C0|C1, "simd_inst_retired.scalar_single" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc7, 0x04, C0|C1, "simd_inst_retired.packed_double" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc7, 0x08, C0|C1, "simd_inst_retired.scalar_double" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc7, 0x10, C0|C1, "simd_inst_retired.vector" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc7, 0x1f, C0|C1, "simd_inst_retired.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc8, 0x00, C0|C1, "hw_int_rcv" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xca, 0x01, C0|C1, "simd_comp_inst_retired.packed_single" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xca, 0x02, C0|C1, "simd_comp_inst_retired.scalar_single" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xca, 0x04, C0|C1, "simd_comp_inst_retired.packed_double" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xca, 0x08, C0|C1, "simd_comp_inst_retired.scalar_double" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xcb, 0x01, C0|C1, "mem_load_retired.l2_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xcb, 0x02, C0|C1, "mem_load_retired.l2_miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xcb, 0x04, C0|C1, "mem_load_retired.dtlb_miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xcd, 0x00, C0|C1, "simd_assist" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xce, 0x00, C0|C1, "simd_instr_retired" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xcf, 0x00, C0|C1, "simd_sat_instr_retired" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xe0, 0x01, C0|C1, "br_inst_decoded" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xe4, 0x01, C0|C1, "bogus_br" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xe6, 0x01, C0|C1, "baclears.any" , 0x0, ATTR_NONE, 0x0 }, \
+/* end of #define */
+
+/* Intel Core i7 (Nehalem) Processor */
+/*
+ * The Nehalem tables are basically from Bug 16457009
+ * libcpc counter names should be based on public Intel documentation -- Nehalem
+ * and those tables are basically from the
+ * Intel SDM, January 2013, Section 19.5, Table 19-11.
+ * We omit the Table 19-12 uncore events.
+ *
+ * Note that the table below includes some events from
+ * the Intel SDM that require cmask or attr settings.
+ * These events are not in libcpc, which did not include
+ * events requiring cmask or attr until Sandy Bridge.
+ */
+
+#define EVENTS_FAM6_MOD26 \
+{ 0x04, 0x07, C0|C1|C2|C3, "sb_drain.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x06, 0x04, C0|C1|C2|C3, "store_blocks.at_ret" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x06, 0x08, C0|C1|C2|C3, "store_blocks.l1d_block" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x07, 0x01, C0|C1|C2|C3, "partial_address_alias" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x08, 0x01, C0|C1|C2|C3, "dtlb_load_misses.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x08, 0x02, C0|C1|C2|C3, "dtlb_load_misses.walk_completed" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x08, 0x10, C0|C1|C2|C3, "dtlb_load_misses.stlb_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x08, 0x20, C0|C1|C2|C3, "dtlb_load_misses.pde_miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x08, 0x80, C0|C1|C2|C3, "dtlb_load_misses.large_walk_completed", 0x0, ATTR_NONE, 0x0 }, \
+{ 0x0B, 0x01, C0|C1|C2|C3, "mem_inst_retired.loads" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x0B, 0x02, C0|C1|C2|C3, "mem_inst_retired.stores" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x0B, 0x10, C0|C1|C2|C3, "mem_inst_retired.latency_above_threshold" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x0C, 0x01, C0|C1|C2|C3, "mem_store_retired.dtlb_miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x0E, 0x01, C0|C1|C2|C3, "uops_issued.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x0E, 0x01, C0|C1|C2|C3, "uops_issued.stalled_cycles" , 0x1, ATTR_INV , 0x0 }, \
+{ 0x0E, 0x02, C0|C1|C2|C3, "uops_issued.fused" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x0F, 0x02, C0|C1|C2|C3, "mem_uncore_retired.other_core_l2_hitm", 0x0, ATTR_NONE, 0x0 }, \
+{ 0x0F, 0x08, C0|C1|C2|C3, "mem_uncore_retired.remote_cache_local_home_hit", 0x0, ATTR_NONE, 0x0 }, \
+{ 0x0F, 0x10, C0|C1|C2|C3, "mem_uncore_retired.remote_dram" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x0F, 0x20, C0|C1|C2|C3, "mem_uncore_retired.local_dram" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x10, 0x01, C0|C1|C2|C3, "fp_comp_ops_exe.x87" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x10, 0x02, C0|C1|C2|C3, "fp_comp_ops_exe.mmx" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x10, 0x04, C0|C1|C2|C3, "fp_comp_ops_exe.sse_fp" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x10, 0x08, C0|C1|C2|C3, "fp_comp_ops_exe.sse2_integer" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x10, 0x10, C0|C1|C2|C3, "fp_comp_ops_exe.sse_fp_packed" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x10, 0x20, C0|C1|C2|C3, "fp_comp_ops_exe.sse_fp_scalar" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x10, 0x40, C0|C1|C2|C3, "fp_comp_ops_exe.sse_single_precision" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x10, 0x80, C0|C1|C2|C3, "fp_comp_ops_exe.sse_double_precision" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x12, 0x01, C0|C1|C2|C3, "simd_int_128.packed_mpy" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x12, 0x02, C0|C1|C2|C3, "simd_int_128.packed_shift" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x12, 0x04, C0|C1|C2|C3, "simd_int_128.pack" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x12, 0x08, C0|C1|C2|C3, "simd_int_128.unpack" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x12, 0x10, C0|C1|C2|C3, "simd_int_128.packed_logical" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x12, 0x20, C0|C1|C2|C3, "simd_int_128.packed_arith" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x12, 0x40, C0|C1|C2|C3, "simd_int_128.shuffle_move" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x13, 0x01, C0|C1|C2|C3, "load_dispatch.rs" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x13, 0x02, C0|C1|C2|C3, "load_dispatch.rs_delayed" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x13, 0x04, C0|C1|C2|C3, "load_dispatch.mob" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x13, 0x07, C0|C1|C2|C3, "load_dispatch.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x14, 0x01, C0|C1|C2|C3, "arith.cycles_div_busy" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x14, 0x01, C0|C1|C2|C3, "arith.fpu_div" , 0x1, ATTR_EDGE | ATTR_INV, 0x0 }, \
+{ 0x14, 0x02, C0|C1|C2|C3, "arith.mul" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x17, 0x01, C0|C1|C2|C3, "inst_queue_writes" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x18, 0x01, C0|C1|C2|C3, "inst_decoded.dec0" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x19, 0x01, C0|C1|C2|C3, "two_uop_insts_decoded" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x1E, 0x01, C0|C1|C2|C3, "inst_queue_write_cycles" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x20, 0x01, C0|C1|C2|C3, "lsd_overflow" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x01, C0|C1|C2|C3, "l2_rqsts.ld_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x02, C0|C1|C2|C3, "l2_rqsts.ld_miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x03, C0|C1|C2|C3, "l2_rqsts.loads" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x04, C0|C1|C2|C3, "l2_rqsts.rfo_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x08, C0|C1|C2|C3, "l2_rqsts.rfo_miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x0C, C0|C1|C2|C3, "l2_rqsts.rfos" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x10, C0|C1|C2|C3, "l2_rqsts.ifetch_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x20, C0|C1|C2|C3, "l2_rqsts.ifetch_miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x30, C0|C1|C2|C3, "l2_rqsts.ifetches" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x40, C0|C1|C2|C3, "l2_rqsts.prefetch_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x80, C0|C1|C2|C3, "l2_rqsts.prefetch_miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0xAA, C0|C1|C2|C3, "l2_rqsts.miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0xC0, C0|C1|C2|C3, "l2_rqsts.prefetches" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0xFF, C0|C1|C2|C3, "l2_rqsts.references" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x26, 0x01, C0|C1|C2|C3, "l2_data_rqsts.demand.i_state" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x26, 0x02, C0|C1|C2|C3, "l2_data_rqsts.demand.s_state" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x26, 0x04, C0|C1|C2|C3, "l2_data_rqsts.demand.e_state" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x26, 0x08, C0|C1|C2|C3, "l2_data_rqsts.demand.m_state" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x26, 0x0F, C0|C1|C2|C3, "l2_data_rqsts.demand.mesi" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x26, 0x10, C0|C1|C2|C3, "l2_data_rqsts.prefetch.i_state" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x26, 0x20, C0|C1|C2|C3, "l2_data_rqsts.prefetch.s_state" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x26, 0x40, C0|C1|C2|C3, "l2_data_rqsts.prefetch.e_state" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x26, 0x80, C0|C1|C2|C3, "l2_data_rqsts.prefetch.m_state" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x26, 0xF0, C0|C1|C2|C3, "l2_data_rqsts.prefetch.mesi" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x26, 0xFF, C0|C1|C2|C3, "l2_data_rqsts.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x27, 0x01, C0|C1|C2|C3, "l2_write.rfo.i_state" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x27, 0x02, C0|C1|C2|C3, "l2_write.rfo.s_state" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x27, 0x08, C0|C1|C2|C3, "l2_write.rfo.m_state" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x27, 0x0E, C0|C1|C2|C3, "l2_write.rfo.hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x27, 0x0F, C0|C1|C2|C3, "l2_write.rfo.mesi" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x27, 0x10, C0|C1|C2|C3, "l2_write.lock.i_state" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x27, 0x20, C0|C1|C2|C3, "l2_write.lock.s_state" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x27, 0x40, C0|C1|C2|C3, "l2_write.lock.e_state" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x27, 0x80, C0|C1|C2|C3, "l2_write.lock.m_state" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x27, 0xE0, C0|C1|C2|C3, "l2_write.lock.hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x27, 0xF0, C0|C1|C2|C3, "l2_write.lock.mesi" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x28, 0x01, C0|C1|C2|C3, "l1d_wb_l2.i_state" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x28, 0x02, C0|C1|C2|C3, "l1d_wb_l2.s_state" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x28, 0x04, C0|C1|C2|C3, "l1d_wb_l2.e_state" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x28, 0x08, C0|C1|C2|C3, "l1d_wb_l2.m_state" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x28, 0x0F, C0|C1|C2|C3, "l1d_wb_l2.mesi" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x2E, 0x41, C0|C1|C2|C3, "l3_lat_cache.miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x2E, 0x4F, C0|C1|C2|C3, "l3_lat_cache.reference" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x3C, 0x00, C0|C1|C2|C3, "cpu_clk_unhalted.thread_p" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x3C, 0x01, C0|C1|C2|C3, "cpu_clk_unhalted.ref_p" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x40, 0x01, C0|C1 , "l1d_cache_ld.i_state" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x40, 0x02, C0|C1 , "l1d_cache_ld.s_state" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x40, 0x04, C0|C1 , "l1d_cache_ld.e_state" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x40, 0x08, C0|C1 , "l1d_cache_ld.m_state" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x40, 0x0F, C0|C1 , "l1d_cache_ld.mesi" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x41, 0x02, C0|C1 , "l1d_cache_st.s_state" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x41, 0x04, C0|C1 , "l1d_cache_st.e_state" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x41, 0x08, C0|C1 , "l1d_cache_st.m_state" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x42, 0x01, C0|C1 , "l1d_cache_lock.hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x42, 0x02, C0|C1 , "l1d_cache_lock.s_state" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x42, 0x04, C0|C1 , "l1d_cache_lock.e_state" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x42, 0x08, C0|C1 , "l1d_cache_lock.m_state" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x43, 0x01, C0|C1 , "l1d_all_ref.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x43, 0x02, C0|C1 , "l1d_all_ref.cacheable" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x49, 0x01, C0|C1|C2|C3, "dtlb_misses.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x49, 0x02, C0|C1|C2|C3, "dtlb_misses.walk_completed" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x49, 0x10, C0|C1|C2|C3, "dtlb_misses.stlb_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x49, 0x20, C0|C1|C2|C3, "dtlb_misses.pde_miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x49, 0x80, C0|C1|C2|C3, "dtlb_misses.large_walk_completed" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x4C, 0x01, C0|C1|C2|C3, "load_hit_pre" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x4E, 0x01, C0|C1|C2|C3, "l1d_prefetch.requests" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x4E, 0x02, C0|C1|C2|C3, "l1d_prefetch.miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x4E, 0x04, C0|C1|C2|C3, "l1d_prefetch.triggers" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x51, 0x01, C0|C1 , "l1d.repl" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x51, 0x02, C0|C1 , "l1d.m_repl" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x51, 0x04, C0|C1 , "l1d.m_evict" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x51, 0x08, C0|C1 , "l1d.m_snoop_evict" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x52, 0x01, C0|C1|C2|C3, "l1d_cache_prefetch_lock_fb_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x53, 0x01, C0|C1|C2|C3, "l1d_cache_lock_fb_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x63, 0x01, C0|C1 , "cache_lock_cycles.l1d_l2" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x63, 0x02, C0|C1 , "cache_lock_cycles.l1d" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x6C, 0x01, C0|C1|C2|C3, "io_transactions" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x80, 0x01, C0|C1|C2|C3, "l1i.hits" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x80, 0x02, C0|C1|C2|C3, "l1i.misses" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x80, 0x03, C0|C1|C2|C3, "l1i.reads" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x80, 0x04, C0|C1|C2|C3, "l1i.cycles_stalled" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x82, 0x01, C0|C1|C2|C3, "large_itlb.hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x85, 0x01, C0|C1|C2|C3, "itlb_misses.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x85, 0x02, C0|C1|C2|C3, "itlb_misses.walk_completed" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x87, 0x01, C0|C1|C2|C3, "ild_stall.lcp" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x87, 0x02, C0|C1|C2|C3, "ild_stall.mru" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x87, 0x04, C0|C1|C2|C3, "ild_stall.iq_full" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x87, 0x08, C0|C1|C2|C3, "ild_stall.regen" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x87, 0x0F, C0|C1|C2|C3, "ild_stall.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x88, 0x01, C0|C1|C2|C3, "br_inst_exec.cond" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x88, 0x02, C0|C1|C2|C3, "br_inst_exec.direct" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x88, 0x04, C0|C1|C2|C3, "br_inst_exec.indirect_non_call" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x88, 0x07, C0|C1|C2|C3, "br_inst_exec.non_calls" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x88, 0x08, C0|C1|C2|C3, "br_inst_exec.return_near" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x88, 0x10, C0|C1|C2|C3, "br_inst_exec.direct_near_call" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x88, 0x20, C0|C1|C2|C3, "br_inst_exec.indirect_near_call" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x88, 0x30, C0|C1|C2|C3, "br_inst_exec.near_calls" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x88, 0x40, C0|C1|C2|C3, "br_inst_exec.taken" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x88, 0x7F, C0|C1|C2|C3, "br_inst_exec.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x89, 0x01, C0|C1|C2|C3, "br_misp_exec.cond" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x89, 0x02, C0|C1|C2|C3, "br_misp_exec.direct" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x89, 0x04, C0|C1|C2|C3, "br_misp_exec.indirect_non_call" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x89, 0x07, C0|C1|C2|C3, "br_misp_exec.non_calls" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x89, 0x08, C0|C1|C2|C3, "br_misp_exec.return_near" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x89, 0x10, C0|C1|C2|C3, "br_misp_exec.direct_near_call" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x89, 0x20, C0|C1|C2|C3, "br_misp_exec.indirect_near_call" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x89, 0x30, C0|C1|C2|C3, "br_misp_exec.near_calls" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x89, 0x40, C0|C1|C2|C3, "br_misp_exec.taken" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x89, 0x7F, C0|C1|C2|C3, "br_misp_exec.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA2, 0x01, C0|C1|C2|C3, "resource_stalls.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA2, 0x02, C0|C1|C2|C3, "resource_stalls.load" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA2, 0x04, C0|C1|C2|C3, "resource_stalls.rs_full" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA2, 0x08, C0|C1|C2|C3, "resource_stalls.store" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA2, 0x10, C0|C1|C2|C3, "resource_stalls.rob_full" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA2, 0x20, C0|C1|C2|C3, "resource_stalls.fpcw" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA2, 0x40, C0|C1|C2|C3, "resource_stalls.mxcsr" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA2, 0x80, C0|C1|C2|C3, "resource_stalls.other" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA6, 0x01, C0|C1|C2|C3, "macro_insts.fusions_decoded" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA7, 0x01, C0|C1|C2|C3, "baclear_force_iq" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA8, 0x01, C0|C1|C2|C3, "lsd.uops" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA8, 0x01, C0|C1|C2|C3, "lsd.cycles" , 0x1, ATTR_INV , 0x0 }, \
+{ 0xAE, 0x01, C0|C1|C2|C3, "itlb_flush" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB0, 0x40, C0|C1|C2|C3, "offcore_requests.l1d_writeback" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB1, 0x01, C0|C1|C2|C3, "uops_executed.port0" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB1, 0x02, C0|C1|C2|C3, "uops_executed.port1" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB1, 0x04, C0|C1|C2|C3, "uops_executed.port2_core" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB1, 0x08, C0|C1|C2|C3, "uops_executed.port3_core" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB1, 0x10, C0|C1|C2|C3, "uops_executed.port4_core" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB1, 0x1F, C0|C1|C2|C3, "uops_executed.core_active_cycles_no_port5" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB1, 0x20, C0|C1|C2|C3, "uops_executed.port5" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB1, 0x3F, C0|C1|C2|C3, "uops_executed.core_active_cycles" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB1, 0x40, C0|C1|C2|C3, "uops_executed.port015" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB1, 0x40, C0|C1|C2|C3, "uops_executed.port015_stall_cycles" , 0x1, ATTR_INV , 0x0 }, \
+{ 0xB1, 0x80, C0|C1|C2|C3, "uops_executed.port234" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB2, 0x01, C0|C1|C2|C3, "offcore_requests_sq_full" , 0x0, ATTR_NONE, 0x0 }, \
+/* { 0xB7, 0x01, C0|C1|C2|C3, "off_core_response_0" , 0x0, ATTR_NONE, 0x1A6 }, ignore events that require msr_offset */ \
+{ 0xB8, 0x01, C0|C1|C2|C3, "snoop_response.hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB8, 0x02, C0|C1|C2|C3, "snoop_response.hite" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB8, 0x04, C0|C1|C2|C3, "snoop_response.hitm" , 0x0, ATTR_NONE, 0x0 }, \
+/* { 0xBB, 0x01, C0|C1|C2|C3, "off_core_response_1" , 0x0, ATTR_NONE, 0x1A7 }, ignore events that require msr_offset */ \
+{ 0xC0, 0x00, C0|C1|C2|C3, "inst_retired.any_p" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC0, 0x02, C0|C1|C2|C3, "inst_retired.x87" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC0, 0x04, C0|C1|C2|C3, "inst_retired.mmx" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC2, 0x01, C0|C1|C2|C3, "uops_retired.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC2, 0x01, C0|C1|C2|C3, "uops_retired.active_cycles" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0xC2, 0x01, C0|C1|C2|C3, "uops_retired.stall_cycles" , 0x1, ATTR_INV , 0x0 }, \
+{ 0xC2, 0x02, C0|C1|C2|C3, "uops_retired.retire_slots" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC2, 0x04, C0|C1|C2|C3, "uops_retired.macro_fused" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC3, 0x01, C0|C1|C2|C3, "machine_clears.cycles" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC3, 0x02, C0|C1|C2|C3, "machine_clears.mem_order" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC3, 0x04, C0|C1|C2|C3, "machine_clears.smc" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC4, 0x00, C0|C1|C2|C3, "br_inst_retired.all_branches" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC4, 0x01, C0|C1|C2|C3, "br_inst_retired.conditional" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC4, 0x02, C0|C1|C2|C3, "br_inst_retired.near_call" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC5, 0x00, C0|C1|C2|C3, "br_misp_retired.all_branches" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC5, 0x02, C0|C1|C2|C3, "br_misp_retired.near_call" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC7, 0x01, C0|C1|C2|C3, "ssex_uops_retired.packed_single" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC7, 0x02, C0|C1|C2|C3, "ssex_uops_retired.scalar_single" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC7, 0x04, C0|C1|C2|C3, "ssex_uops_retired.packed_double" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC7, 0x08, C0|C1|C2|C3, "ssex_uops_retired.scalar_double" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC7, 0x10, C0|C1|C2|C3, "ssex_uops_retired.vector_integer" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC8, 0x20, C0|C1|C2|C3, "itlb_miss_retired" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xCB, 0x01, C0|C1|C2|C3, "mem_load_retired.l1d_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xCB, 0x02, C0|C1|C2|C3, "mem_load_retired.l2_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xCB, 0x04, C0|C1|C2|C3, "mem_load_retired.llc_unshared_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xCB, 0x08, C0|C1|C2|C3, "mem_load_retired.other_core_l2_hit_hitm" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xCB, 0x10, C0|C1|C2|C3, "mem_load_retired.llc_miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xCB, 0x40, C0|C1|C2|C3, "mem_load_retired.hit_lfb" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xCB, 0x80, C0|C1|C2|C3, "mem_load_retired.dtlb_miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xCC, 0x01, C0|C1|C2|C3, "fp_mmx_trans.to_fp" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xCC, 0x02, C0|C1|C2|C3, "fp_mmx_trans.to_mmx" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xCC, 0x03, C0|C1|C2|C3, "fp_mmx_trans.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xD0, 0x01, C0|C1|C2|C3, "macro_insts.decoded" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xD1, 0x02, C0|C1|C2|C3, "uops_decoded.ms" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xD1, 0x04, C0|C1|C2|C3, "uops_decoded.esp_folding" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xD1, 0x08, C0|C1|C2|C3, "uops_decoded.esp_sync" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xD2, 0x01, C0|C1|C2|C3, "rat_stalls.flags" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xD2, 0x02, C0|C1|C2|C3, "rat_stalls.registers" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xD2, 0x04, C0|C1|C2|C3, "rat_stalls.rob_read_port" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xD2, 0x08, C0|C1|C2|C3, "rat_stalls.scoreboard" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xD2, 0x0F, C0|C1|C2|C3, "rat_stalls.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xD4, 0x01, C0|C1|C2|C3, "seg_rename_stalls" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xD5, 0x01, C0|C1|C2|C3, "es_reg_renames" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xDB, 0x01, C0|C1|C2|C3, "uop_unfusion" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xE0, 0x01, C0|C1|C2|C3, "br_inst_decoded" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xE5, 0x01, C0|C1|C2|C3, "bpu_missed_call_ret" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xE6, 0x01, C0|C1|C2|C3, "baclear.clear" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xE6, 0x02, C0|C1|C2|C3, "baclear.bad_target" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xE8, 0x01, C0|C1|C2|C3, "bpu_clears.early" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xE8, 0x02, C0|C1|C2|C3, "bpu_clears.late" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF0, 0x01, C0|C1|C2|C3, "l2_transactions.load" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF0, 0x02, C0|C1|C2|C3, "l2_transactions.rfo" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF0, 0x04, C0|C1|C2|C3, "l2_transactions.ifetch" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF0, 0x08, C0|C1|C2|C3, "l2_transactions.prefetch" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF0, 0x10, C0|C1|C2|C3, "l2_transactions.l1d_wb" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF0, 0x20, C0|C1|C2|C3, "l2_transactions.fill" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF0, 0x40, C0|C1|C2|C3, "l2_transactions.wb" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF0, 0x80, C0|C1|C2|C3, "l2_transactions.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF1, 0x02, C0|C1|C2|C3, "l2_lines_in.s_state" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF1, 0x04, C0|C1|C2|C3, "l2_lines_in.e_state" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF1, 0x07, C0|C1|C2|C3, "l2_lines_in.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF2, 0x01, C0|C1|C2|C3, "l2_lines_out.demand_clean" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF2, 0x02, C0|C1|C2|C3, "l2_lines_out.demand_dirty" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF2, 0x04, C0|C1|C2|C3, "l2_lines_out.prefetch_clean" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF2, 0x08, C0|C1|C2|C3, "l2_lines_out.prefetch_dirty" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF2, 0x0F, C0|C1|C2|C3, "l2_lines_out.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF4, 0x10, C0|C1|C2|C3, "sq_misc.split_lock" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF6, 0x01, C0|C1|C2|C3, "sq_full_stall_cycles" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF7, 0x01, C0|C1|C2|C3, "fp_assist.all" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF7, 0x02, C0|C1|C2|C3, "fp_assist.output" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF7, 0x04, C0|C1|C2|C3, "fp_assist.input" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xFD, 0x01, C0|C1|C2|C3, "simd_int_64.packed_mpy" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xFD, 0x02, C0|C1|C2|C3, "simd_int_64.packed_shift" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xFD, 0x04, C0|C1|C2|C3, "simd_int_64.pack" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xFD, 0x08, C0|C1|C2|C3, "simd_int_64.unpack" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xFD, 0x10, C0|C1|C2|C3, "simd_int_64.packed_logical" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xFD, 0x20, C0|C1|C2|C3, "simd_int_64.packed_arith" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xFD, 0x40, C0|C1|C2|C3, "simd_int_64.shuffle_move" , 0x0, ATTR_NONE, 0x0 }, \
+/* end of #define */
+
+#define EVENTS_FAM6_MOD46_ONLY \
+{ 0x0F, 0x01, C0|C1|C2|C3, "mem_uncore_retired.l3_data_miss_unknown" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x0F, 0x80, C0|C1|C2|C3, "mem_uncore_retired.uncacheable" , 0x0, ATTR_NONE, 0x0 }, \
+/* end of #define */
+
+/* Intel Westmere Processor */
+/*
+ * The Westmere tables are basically from Bug 16173963
+ * libcpc counter names should be based on public Intel documentation -- Westmere
+ * and those tables are basically from the
+ * Intel SDM, January 2013, Section 19.6, Table 19-13.
+ * We omit the Table 19-14 uncore events.
+ *
+ * Note that the table below includes some events from
+ * the Intel SDM that require cmask or attr settings.
+ * These events are not in libcpc, which did not include
+ * events requiring cmask or attr until Sandy Bridge.
+ */
+
+#define EVENTS_FAM6_MOD37 \
+{ 0x03, 0x02, C0|C1|C2|C3, "load_block.overlap_store" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x04, 0x07, C0|C1|C2|C3, "sb_drain.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x05, 0x02, C0|C1|C2|C3, "misalign_mem_ref.store" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x06, 0x04, C0|C1|C2|C3, "store_blocks.at_ret" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x06, 0x08, C0|C1|C2|C3, "store_blocks.l1d_block" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x07, 0x01, C0|C1|C2|C3, "partial_address_alias" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x08, 0x01, C0|C1|C2|C3, "dtlb_load_misses.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x08, 0x02, C0|C1|C2|C3, "dtlb_load_misses.walk_completed" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x08, 0x04, C0|C1|C2|C3, "dtlb_load_misses.walk_cycles" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x08, 0x10, C0|C1|C2|C3, "dtlb_load_misses.stlb_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x08, 0x20, C0|C1|C2|C3, "dtlb_load_misses.pde_miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x0B, 0x01, C0|C1|C2|C3, "mem_inst_retired.loads" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x0B, 0x02, C0|C1|C2|C3, "mem_inst_retired.stores" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x0B, 0x10, C0|C1|C2|C3, "mem_inst_retired.latency_above_threshold" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x0C, 0x01, C0|C1|C2|C3, "mem_store_retired.dtlb_miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x0E, 0x01, C0|C1|C2|C3, "uops_issued.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x0E, 0x02, C0|C1|C2|C3, "uops_issued.fused" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x0F, 0x01, C0|C1|C2|C3, "mem_uncore_retired.unknown_source" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x0F, 0x80, C0|C1|C2|C3, "mem_uncore_retired.uncacheable" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x10, 0x01, C0|C1|C2|C3, "fp_comp_ops_exe.x87" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x10, 0x02, C0|C1|C2|C3, "fp_comp_ops_exe.mmx" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x10, 0x04, C0|C1|C2|C3, "fp_comp_ops_exe.sse_fp" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x10, 0x08, C0|C1|C2|C3, "fp_comp_ops_exe.sse2_integer" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x10, 0x10, C0|C1|C2|C3, "fp_comp_ops_exe.sse_fp_packed" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x10, 0x20, C0|C1|C2|C3, "fp_comp_ops_exe.sse_fp_scalar" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x10, 0x40, C0|C1|C2|C3, "fp_comp_ops_exe.sse_single_precision" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x10, 0x80, C0|C1|C2|C3, "fp_comp_ops_exe.sse_double_precision" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x12, 0x01, C0|C1|C2|C3, "simd_int_128.packed_mpy" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x12, 0x02, C0|C1|C2|C3, "simd_int_128.packed_shift" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x12, 0x04, C0|C1|C2|C3, "simd_int_128.pack" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x12, 0x08, C0|C1|C2|C3, "simd_int_128.unpack" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x12, 0x10, C0|C1|C2|C3, "simd_int_128.packed_logical" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x12, 0x20, C0|C1|C2|C3, "simd_int_128.packed_arith" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x12, 0x40, C0|C1|C2|C3, "simd_int_128.shuffle_move" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x13, 0x01, C0|C1|C2|C3, "load_dispatch.rs" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x13, 0x02, C0|C1|C2|C3, "load_dispatch.rs_delayed" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x13, 0x04, C0|C1|C2|C3, "load_dispatch.mob" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x13, 0x07, C0|C1|C2|C3, "load_dispatch.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x14, 0x01, C0|C1|C2|C3, "arith.cycles_div_busy" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x14, 0x02, C0|C1|C2|C3, "arith.mul" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x17, 0x01, C0|C1|C2|C3, "inst_queue_writes" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x18, 0x01, C0|C1|C2|C3, "inst_decoded.dec0" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x19, 0x01, C0|C1|C2|C3, "two_uop_insts_decoded" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x1E, 0x01, C0|C1|C2|C3, "inst_queue_write_cycles" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x20, 0x01, C0|C1|C2|C3, "lsd_overflow" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x01, C0|C1|C2|C3, "l2_rqsts.ld_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x02, C0|C1|C2|C3, "l2_rqsts.ld_miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x03, C0|C1|C2|C3, "l2_rqsts.loads" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x04, C0|C1|C2|C3, "l2_rqsts.rfo_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x08, C0|C1|C2|C3, "l2_rqsts.rfo_miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x0C, C0|C1|C2|C3, "l2_rqsts.rfos" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x10, C0|C1|C2|C3, "l2_rqsts.ifetch_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x20, C0|C1|C2|C3, "l2_rqsts.ifetch_miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x30, C0|C1|C2|C3, "l2_rqsts.ifetches" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x40, C0|C1|C2|C3, "l2_rqsts.prefetch_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x80, C0|C1|C2|C3, "l2_rqsts.prefetch_miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0xAA, C0|C1|C2|C3, "l2_rqsts.miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0xC0, C0|C1|C2|C3, "l2_rqsts.prefetches" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0xFF, C0|C1|C2|C3, "l2_rqsts.references" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x26, 0x01, C0|C1|C2|C3, "l2_data_rqsts.demand.i_state" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x26, 0x02, C0|C1|C2|C3, "l2_data_rqsts.demand.s_state" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x26, 0x04, C0|C1|C2|C3, "l2_data_rqsts.demand.e_state" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x26, 0x08, C0|C1|C2|C3, "l2_data_rqsts.demand.m_state" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x26, 0x0F, C0|C1|C2|C3, "l2_data_rqsts.demand.mesi" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x26, 0x10, C0|C1|C2|C3, "l2_data_rqsts.prefetch.i_state" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x26, 0x20, C0|C1|C2|C3, "l2_data_rqsts.prefetch.s_state" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x26, 0x40, C0|C1|C2|C3, "l2_data_rqsts.prefetch.e_state" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x26, 0x80, C0|C1|C2|C3, "l2_data_rqsts.prefetch.m_state" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x26, 0xF0, C0|C1|C2|C3, "l2_data_rqsts.prefetch.mesi" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x26, 0xFF, C0|C1|C2|C3, "l2_data_rqsts.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x27, 0x01, C0|C1|C2|C3, "l2_write.rfo.i_state" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x27, 0x02, C0|C1|C2|C3, "l2_write.rfo.s_state" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x27, 0x08, C0|C1|C2|C3, "l2_write.rfo.m_state" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x27, 0x0E, C0|C1|C2|C3, "l2_write.rfo.hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x27, 0x0F, C0|C1|C2|C3, "l2_write.rfo.mesi" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x27, 0x10, C0|C1|C2|C3, "l2_write.lock.i_state" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x27, 0x20, C0|C1|C2|C3, "l2_write.lock.s_state" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x27, 0x40, C0|C1|C2|C3, "l2_write.lock.e_state" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x27, 0x80, C0|C1|C2|C3, "l2_write.lock.m_state" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x27, 0xE0, C0|C1|C2|C3, "l2_write.lock.hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x27, 0xF0, C0|C1|C2|C3, "l2_write.lock.mesi" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x28, 0x01, C0|C1|C2|C3, "l1d_wb_l2.i_state" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x28, 0x02, C0|C1|C2|C3, "l1d_wb_l2.s_state" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x28, 0x04, C0|C1|C2|C3, "l1d_wb_l2.e_state" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x28, 0x08, C0|C1|C2|C3, "l1d_wb_l2.m_state" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x28, 0x0F, C0|C1|C2|C3, "l1d_wb_l2.mesi" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x2E, 0x41, C0|C1|C2|C3, "l3_lat_cache.miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x2E, 0x4F, C0|C1|C2|C3, "l3_lat_cache.reference" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x3C, 0x00, C0|C1|C2|C3, "cpu_clk_unhalted.thread_p" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x3C, 0x01, C0|C1|C2|C3, "cpu_clk_unhalted.ref_p" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x49, 0x01, C0|C1|C2|C3, "dtlb_misses.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x49, 0x02, C0|C1|C2|C3, "dtlb_misses.walk_completed" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x49, 0x04, C0|C1|C2|C3, "dtlb_misses.walk_cycles" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x49, 0x10, C0|C1|C2|C3, "dtlb_misses.stlb_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x49, 0x20, C0|C1|C2|C3, "dtlb_misses.pde_miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x49, 0x80, C0|C1|C2|C3, "dtlb_misses.large_walk_completed" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x4C, 0x01, C0|C1 , "load_hit_pre" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x4E, 0x01, C0|C1 , "l1d_prefetch.requests" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x4E, 0x02, C0|C1 , "l1d_prefetch.miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x4E, 0x04, C0|C1 , "l1d_prefetch.triggers" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x4F, 0x10, C0|C1|C2|C3, "ept.walk_cycles" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x51, 0x01, C0|C1 , "l1d.repl" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x51, 0x02, C0|C1 , "l1d.m_repl" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x51, 0x04, C0|C1 , "l1d.m_evict" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x51, 0x08, C0|C1 , "l1d.m_snoop_evict" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x52, 0x01, C0|C1|C2|C3, "l1d_cache_prefetch_lock_fb_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x60, 0x01, C0 , "offcore_requests_outstanding.demand.read_data", 0x0, ATTR_NONE, 0x0 }, \
+{ 0x60, 0x02, C0 , "offcore_requests_outstanding.demand.read_code", 0x0, ATTR_NONE, 0x0 }, \
+{ 0x60, 0x04, C0 , "offcore_requests_outstanding.demand.rfo" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x60, 0x08, C0 , "offcore_requests_outstanding.any_read", 0x0, ATTR_NONE, 0x0 }, \
+{ 0x63, 0x01, C0|C1 , "cache_lock_cycles.l1d_l2" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x63, 0x02, C0|C1 , "cache_lock_cycles.l1d" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x6C, 0x01, C0|C1|C2|C3, "io_transactions" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x80, 0x01, C0|C1|C2|C3, "l1i.hits" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x80, 0x02, C0|C1|C2|C3, "l1i.misses" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x80, 0x03, C0|C1|C2|C3, "l1i.reads" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x80, 0x04, C0|C1|C2|C3, "l1i.cycles_stalled" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x82, 0x01, C0|C1|C2|C3, "large_itlb.hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x85, 0x01, C0|C1|C2|C3, "itlb_misses.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x85, 0x02, C0|C1|C2|C3, "itlb_misses.walk_completed" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x85, 0x04, C0|C1|C2|C3, "itlb_misses.walk_cycles" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x85, 0x10, C0|C1|C2|C3, "itlb_misses.stlb_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x85, 0x80, C0|C1|C2|C3, "itlb_misses.large_walk_completed" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x87, 0x01, C0|C1|C2|C3, "ild_stall.lcp" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x87, 0x02, C0|C1|C2|C3, "ild_stall.mru" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x87, 0x04, C0|C1|C2|C3, "ild_stall.iq_full" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x87, 0x08, C0|C1|C2|C3, "ild_stall.regen" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x87, 0x0F, C0|C1|C2|C3, "ild_stall.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x88, 0x01, C0|C1|C2|C3, "br_inst_exec.cond" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x88, 0x02, C0|C1|C2|C3, "br_inst_exec.direct" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x88, 0x04, C0|C1|C2|C3, "br_inst_exec.indirect_non_call" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x88, 0x07, C0|C1|C2|C3, "br_inst_exec.non_calls" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x88, 0x08, C0|C1|C2|C3, "br_inst_exec.return_near" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x88, 0x10, C0|C1|C2|C3, "br_inst_exec.direct_near_call" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x88, 0x20, C0|C1|C2|C3, "br_inst_exec.indirect_near_call" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x88, 0x30, C0|C1|C2|C3, "br_inst_exec.near_calls" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x88, 0x40, C0|C1|C2|C3, "br_inst_exec.taken" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x88, 0x7F, C0|C1|C2|C3, "br_inst_exec.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x89, 0x01, C0|C1|C2|C3, "br_misp_exec.cond" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x89, 0x02, C0|C1|C2|C3, "br_misp_exec.direct" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x89, 0x04, C0|C1|C2|C3, "br_misp_exec.indirect_non_call" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x89, 0x07, C0|C1|C2|C3, "br_misp_exec.non_calls" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x89, 0x08, C0|C1|C2|C3, "br_misp_exec.return_near" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x89, 0x10, C0|C1|C2|C3, "br_misp_exec.direct_near_call" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x89, 0x20, C0|C1|C2|C3, "br_misp_exec.indirect_near_call" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x89, 0x30, C0|C1|C2|C3, "br_misp_exec.near_calls" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x89, 0x40, C0|C1|C2|C3, "br_misp_exec.taken" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x89, 0x7F, C0|C1|C2|C3, "br_misp_exec.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA2, 0x01, C0|C1|C2|C3, "resource_stalls.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA2, 0x02, C0|C1|C2|C3, "resource_stalls.load" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA2, 0x04, C0|C1|C2|C3, "resource_stalls.rs_full" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA2, 0x08, C0|C1|C2|C3, "resource_stalls.store" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA2, 0x10, C0|C1|C2|C3, "resource_stalls.rob_full" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA2, 0x20, C0|C1|C2|C3, "resource_stalls.fpcw" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA2, 0x40, C0|C1|C2|C3, "resource_stalls.mxcsr" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA2, 0x80, C0|C1|C2|C3, "resource_stalls.other" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA6, 0x01, C0|C1|C2|C3, "macro_insts.fusions_decoded" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA7, 0x01, C0|C1|C2|C3, "baclear_force_iq" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA8, 0x01, C0|C1|C2|C3, "lsd.uops" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xAE, 0x01, C0|C1|C2|C3, "itlb_flush" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB0, 0x01, C0|C1|C2|C3, "offcore_requests.demand.read_data" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB0, 0x02, C0|C1|C2|C3, "offcore_requests.demand.read_code" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB0, 0x04, C0|C1|C2|C3, "offcore_requests.demand.rfo" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB0, 0x08, C0|C1|C2|C3, "offcore_requests.any.read" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB0, 0x10, C0|C1|C2|C3, "offcore_requests.any.rfo" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB0, 0x40, C0|C1|C2|C3, "offcore_requests.l1d_writeback" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB0, 0x80, C0|C1|C2|C3, "offcore_requests.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB1, 0x01, C0|C1|C2|C3, "uops_executed.port0" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB1, 0x02, C0|C1|C2|C3, "uops_executed.port1" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB1, 0x04, C0|C1|C2|C3, "uops_executed.port2_core" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB1, 0x08, C0|C1|C2|C3, "uops_executed.port3_core" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB1, 0x10, C0|C1|C2|C3, "uops_executed.port4_core" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB1, 0x1F, C0|C1|C2|C3, "uops_executed.core_active_cycles_no_port5" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB1, 0x20, C0|C1|C2|C3, "uops_executed.port5" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB1, 0x3F, C0|C1|C2|C3, "uops_executed.core_active_cycles" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB1, 0x40, C0|C1|C2|C3, "uops_executed.port015" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB1, 0x80, C0|C1|C2|C3, "uops_executed.port234" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB2, 0x01, C0|C1|C2|C3, "offcore_requests_sq_full" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB3, 0x01, C0, "snoopq_requests_outstanding.data" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB3, 0x02, C0, "snoopq_requests_outstanding.invalidate" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB3, 0x04, C0, "snoopq_requests_outstanding.code" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB4, 0x01, C0|C1|C2|C3, "snoopq_requests.code" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB4, 0x02, C0|C1|C2|C3, "snoopq_requests.data" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB4, 0x04, C0|C1|C2|C3, "snoopq_requests.invalidate" , 0x0, ATTR_NONE, 0x0 }, \
+/* { 0xB7, 0x01, C0|C1|C2|C3, "off_core_response_0" , 0x0, ATTR_NONE, 0x1A6 }, ignore events that require msr_offset */ \
+{ 0xB8, 0x01, C0|C1|C2|C3, "snoop_response.hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB8, 0x02, C0|C1|C2|C3, "snoop_response.hite" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB8, 0x04, C0|C1|C2|C3, "snoop_response.hitm" , 0x0, ATTR_NONE, 0x0 }, \
+/* { 0xBB, 0x01, C0|C1|C2|C3, "off_core_response_1" , 0x0, ATTR_NONE, 0x1A7 }, ignore events that require msr_offset */ \
+{ 0xC0, 0x00, C0|C1|C2|C3, "inst_retired.any_p" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC0, 0x02, C0|C1|C2|C3, "inst_retired.x87" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC0, 0x04, C0|C1|C2|C3, "inst_retired.mmx" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC2, 0x01, C0|C1|C2|C3, "uops_retired.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC2, 0x02, C0|C1|C2|C3, "uops_retired.retire_slots" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC2, 0x04, C0|C1|C2|C3, "uops_retired.macro_fused" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC3, 0x01, C0|C1|C2|C3, "machine_clears.cycles" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC3, 0x02, C0|C1|C2|C3, "machine_clears.mem_order" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC3, 0x04, C0|C1|C2|C3, "machine_clears.smc" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC4, 0x00, C0|C1|C2|C3, "br_inst_retired.all_branches" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC4, 0x01, C0|C1|C2|C3, "br_inst_retired.conditional" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC4, 0x02, C0|C1|C2|C3, "br_inst_retired.near_call" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC5, 0x00, C0|C1|C2|C3, "br_misp_retired.all_branches" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC5, 0x01, C0|C1|C2|C3, "br_misp_retired.conditional" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC5, 0x02, C0|C1|C2|C3, "br_misp_retired.near_call" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC5, 0x04, C0|C1|C2|C3, "br_misp_retired.all_branches" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC7, 0x01, C0|C1|C2|C3, "ssex_uops_retired.packed_single" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC7, 0x02, C0|C1|C2|C3, "ssex_uops_retired.scalar_single" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC7, 0x04, C0|C1|C2|C3, "ssex_uops_retired.packed_double" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC7, 0x08, C0|C1|C2|C3, "ssex_uops_retired.scalar_double" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC7, 0x10, C0|C1|C2|C3, "ssex_uops_retired.vector_integer" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC8, 0x20, C0|C1|C2|C3, "itlb_miss_retired" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xCB, 0x01, C0|C1|C2|C3, "mem_load_retired.l1d_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xCB, 0x02, C0|C1|C2|C3, "mem_load_retired.l2_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xCB, 0x04, C0|C1|C2|C3, "mem_load_retired.llc_unshared_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xCB, 0x08, C0|C1|C2|C3, "mem_load_retired.other_core_l2_hit_hitm" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xCB, 0x10, C0|C1|C2|C3, "mem_load_retired.llc_miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xCB, 0x40, C0|C1|C2|C3, "mem_load_retired.hit_lfb" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xCB, 0x80, C0|C1|C2|C3, "mem_load_retired.dtlb_miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xCC, 0x01, C0|C1|C2|C3, "fp_mmx_trans.to_fp" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xCC, 0x02, C0|C1|C2|C3, "fp_mmx_trans.to_mmx" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xCC, 0x03, C0|C1|C2|C3, "fp_mmx_trans.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xD0, 0x01, C0|C1|C2|C3, "macro_insts.decoded" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xD1, 0x01, C0|C1|C2|C3, "uops_decoded.stall_cycles" , 0x1, ATTR_INV , 0x0 }, \
+{ 0xD1, 0x02, C0|C1|C2|C3, "uops_decoded.ms" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xD1, 0x04, C0|C1|C2|C3, "uops_decoded.esp_folding" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xD1, 0x08, C0|C1|C2|C3, "uops_decoded.esp_sync" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xD2, 0x01, C0|C1|C2|C3, "rat_stalls.flags" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xD2, 0x02, C0|C1|C2|C3, "rat_stalls.registers" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xD2, 0x04, C0|C1|C2|C3, "rat_stalls.rob_read_port" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xD2, 0x08, C0|C1|C2|C3, "rat_stalls.scoreboard" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xD2, 0x0F, C0|C1|C2|C3, "rat_stalls.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xD4, 0x01, C0|C1|C2|C3, "seg_rename_stalls" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xD5, 0x01, C0|C1|C2|C3, "es_reg_renames" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xDB, 0x01, C0|C1|C2|C3, "uop_unfusion" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xE0, 0x01, C0|C1|C2|C3, "br_inst_decoded" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xE5, 0x01, C0|C1|C2|C3, "bpu_missed_call_ret" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xE6, 0x01, C0|C1|C2|C3, "baclear.clear" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xE6, 0x02, C0|C1|C2|C3, "baclear.bad_target" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xE8, 0x02, C0|C1|C2|C3, "bpu_clears.late" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xEC, 0x01, C0|C1|C2|C3, "thread_active" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF0, 0x01, C0|C1|C2|C3, "l2_transactions.load" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF0, 0x02, C0|C1|C2|C3, "l2_transactions.rfo" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF0, 0x04, C0|C1|C2|C3, "l2_transactions.ifetch" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF0, 0x08, C0|C1|C2|C3, "l2_transactions.prefetch" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF0, 0x10, C0|C1|C2|C3, "l2_transactions.l1d_wb" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF0, 0x20, C0|C1|C2|C3, "l2_transactions.fill" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF0, 0x40, C0|C1|C2|C3, "l2_transactions.wb" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF0, 0x80, C0|C1|C2|C3, "l2_transactions.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF1, 0x02, C0|C1|C2|C3, "l2_lines_in.s_state" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF1, 0x04, C0|C1|C2|C3, "l2_lines_in.e_state" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF1, 0x07, C0|C1|C2|C3, "l2_lines_in.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF2, 0x01, C0|C1|C2|C3, "l2_lines_out.demand_clean" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF2, 0x02, C0|C1|C2|C3, "l2_lines_out.demand_dirty" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF2, 0x04, C0|C1|C2|C3, "l2_lines_out.prefetch_clean" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF2, 0x08, C0|C1|C2|C3, "l2_lines_out.prefetch_dirty" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF2, 0x0F, C0|C1|C2|C3, "l2_lines_out.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF4, 0x04, C0|C1|C2|C3, "sq_misc.lru_hints" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF4, 0x10, C0|C1|C2|C3, "sq_misc.split_lock" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF6, 0x01, C0|C1|C2|C3, "sq_full_stall_cycles" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF7, 0x01, C0|C1|C2|C3, "fp_assist.all" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF7, 0x02, C0|C1|C2|C3, "fp_assist.output" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF7, 0x04, C0|C1|C2|C3, "fp_assist.input" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xFD, 0x01, C0|C1|C2|C3, "simd_int_64.packed_mpy" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xFD, 0x02, C0|C1|C2|C3, "simd_int_64.packed_shift" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xFD, 0x04, C0|C1|C2|C3, "simd_int_64.pack" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xFD, 0x08, C0|C1|C2|C3, "simd_int_64.unpack" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xFD, 0x10, C0|C1|C2|C3, "simd_int_64.packed_logical" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xFD, 0x20, C0|C1|C2|C3, "simd_int_64.packed_arith" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xFD, 0x40, C0|C1|C2|C3, "simd_int_64.shuffle_move" , 0x0, ATTR_NONE, 0x0 }, \
+/* end of #define */
+
+/*
+ * This special omission of the following events from Model 47
+ * is due to usr/src/uts/intel/pcbe/wm_pcbe.h . There seems
+ * to be no substantiation for this treatment in the Intel SDM.
+ */
+#define EVENTS_FAM6_MOD37_ALSO \
+{ 0x0F, 0x02, C0|C1|C2|C3, "mem_uncore_retired.other_core_l2_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x0F, 0x04, C0|C1|C2|C3, "mem_uncore_retired.remote_hitm" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x0F, 0x08, C0|C1|C2|C3, "mem_uncore_retired.local_dram_remote_cache_hit", 0x0, ATTR_NONE, 0x0 },\
+{ 0x0F, 0x10, C0|C1|C2|C3, "mem_uncore_retired.remote_dram" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x0F, 0x20, C0|C1|C2|C3, "mem_uncore_retired.other_llc_miss" , 0x0, ATTR_NONE, 0x0 }, \
+/* end of #define */
+
+/* Intel Sandy Bridge Processor */
+/*
+ * The Sandy Bridge tables are basically from Bug 16457080
+ * libcpc counter names should be based on public Intel documentation -- Sandy Bridge
+ * and those tables are basically from the
+ * Intel SDM, January 2013, Section 19.4, Table 19-7.
+ * Additionally, there are
+ * Table 19-8. Model 42 only.
+ * Table 19-9. Model 45 only.
+ * We omit the Table 19-10 uncore events.
+ */
+
+#define EVENTS_FAM6_MOD42 \
+{ 0x03, 0x01, C_ALL, "ld_blocks.data_unknown" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x03, 0x02, C_ALL, "ld_blocks.store_forward" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x03, 0x08, C_ALL, "ld_blocks.no_sr" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x03, 0x10, C_ALL, "ld_blocks.all_block" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x05, 0x01, C_ALL, "misalign_mem_ref.loads" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x05, 0x02, C_ALL, "misalign_mem_ref.stores" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x07, 0x01, C_ALL, "ld_blocks_partial.address_alias" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x07, 0x08, C_ALL, "ld_blocks_partial.all_sta_block" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x08, 0x01, C_ALL, "dtlb_load_misses.miss_causes_a_walk" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x08, 0x02, C_ALL, "dtlb_load_misses.walk_completed" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x08, 0x04, C_ALL, "dtlb_load_misses.walk_duration" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x08, 0x10, C_ALL, "dtlb_load_misses.stlb_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x0D, 0x03, C_ALL, "int_misc.recovery_cycles" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0x0D, 0x03, C_ALL, "int_misc.recovery_stalls_count" , 0x1, ATTR_EDGE, 0x0 }, \
+{ 0x0D, 0x40, C_ALL, "int_misc.rat_stall_cycles" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x0E, 0x01, C_ALL, "uops_issued.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x0E, 0x01, C_ALL, "uops_issued.stall_cycles" , 0x1, ATTR_INV , 0x0 }, \
+{ 0x0E, 0x01, C_ALL, "uops_issued.core_stall_cycles" , 0x1, ATTR_INV | ATTR_ANY, 0x0 }, \
+{ 0x10, 0x01, C_ALL, "fp_comp_ops_exe.x87" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x10, 0x10, C_ALL, "fp_comp_ops_exe.sse_fp_packed_double" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x10, 0x20, C_ALL, "fp_comp_ops_exe.sse_fp_scalar_single" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x10, 0x40, C_ALL, "fp_comp_ops_exe.sse_packed_single" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x10, 0x80, C_ALL, "fp_comp_ops_exe.sse_scalar_double" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x11, 0x01, C_ALL, "simd_fp_256.packed_single" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x11, 0x02, C_ALL, "simd_fp_256.packed_double" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x14, 0x01, C_ALL, "arith.fpu_div_active" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x14, 0x01, C_ALL, "arith.fpu_div" , 0x1, ATTR_EDGE, 0x0 }, \
+{ 0x17, 0x01, C_ALL, "insts_written_to_iq.insts" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x01, C_ALL, "l2_rqsts.demand_data_rd_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x03, C_ALL, "l2_rqsts.all_demand_data_rd" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x04, C_ALL, "l2_rqsts.rfo_hits" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x08, C_ALL, "l2_rqsts.rfo_miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x0C, C_ALL, "l2_rqsts.all_rfo" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x10, C_ALL, "l2_rqsts.code_rd_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x20, C_ALL, "l2_rqsts.code_rd_miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x30, C_ALL, "l2_rqsts.all_code_rd" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x40, C_ALL, "l2_rqsts.pf_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x80, C_ALL, "l2_rqsts.pf_miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0xC0, C_ALL, "l2_rqsts.all_pf" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x27, 0x01, C_ALL, "l2_store_lock_rqsts.miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x27, 0x04, C_ALL, "l2_store_lock_rqsts.hit_e" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x27, 0x08, C_ALL, "l2_store_lock_rqsts.hit_m" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x27, 0x0F, C_ALL, "l2_store_lock_rqsts.all" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x28, 0x01, C_ALL, "l2_l1d_wb_rqsts.miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x28, 0x02, C_ALL, "l2_l1d_wb_rqsts.hit_s" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x28, 0x04, C_ALL, "l2_l1d_wb_rqsts.hit_e" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x28, 0x08, C_ALL, "l2_l1d_wb_rqsts.hit_m" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x28, 0x0F, C_ALL, "l2_l1d_wb_rqsts.all" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x2E, 0x41, C_ALL, "longest_lat_cache.miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x2E, 0x4F, C_ALL, "longest_lat_cache.reference" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x3C, 0x00, C_ALL, "cpu_clk_unhalted.thread_p" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x3C, 0x01, C_ALL, "cpu_clk_thread_unhalted.ref_xclk" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x48, 0x01, C2 , "l1d_pend_miss.pending" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x48, 0x01, C2 , "l1d_pend_miss.pending_cycles" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0x48, 0x01, C2 , "l1d_pend_miss.occurrences" , 0x1, ATTR_EDGE, 0x0 }, \
+{ 0x49, 0x01, C_ALL, "dtlb_store_misses.miss_causes_a_walk" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x49, 0x02, C_ALL, "dtlb_store_misses.walk_completed" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x49, 0x04, C_ALL, "dtlb_store_misses.walk_duration" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x49, 0x10, C_ALL, "dtlb_store_misses.stlb_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x4C, 0x01, C_ALL, "load_hit_pre.sw_pf" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x4C, 0x02, C_ALL, "load_hit_pre.hw_pf" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x4E, 0x02, C_ALL, "hw_pre_req.dl1_miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x51, 0x01, C_ALL, "l1d.replacement" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x51, 0x02, C_ALL, "l1d.allocated_in_m" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x51, 0x04, C_ALL, "l1d.eviction" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x51, 0x08, C_ALL, "l1d.all_m_replacement" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x59, 0x20, C_ALL, "partial_rat_stalls.flags_merge_uop" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x59, 0x20, C_ALL, "partial_rat_stalls.flags_merge_uop_cycles" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0x59, 0x40, C_ALL, "partial_rat_stalls.slow_lea_window" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x59, 0x80, C_ALL, "partial_rat_stalls.mul_single_uop" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x5B, 0x0C, C0|C1|C2|C3, "resource_stalls2.all_fl_empty" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x5B, 0x0F, C_ALL, "resource_stalls2.all_prf_control" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x5B, 0x40, C_ALL, "resource_stalls2.bob_full" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x5B, 0x4F, C_ALL, "resource_stalls2.ooo_rsrc" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x5C, 0x01, C_ALL, "cpl_cycles.ring0" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x5C, 0x01, C_ALL, "cpl_cycles.ring0_transition" , 0x0, ATTR_EDGE, 0x0 }, \
+{ 0x5C, 0x02, C_ALL, "cpl_cycles.ring123" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x5E, 0x01, C_ALL, "rs_events.empty_cycles" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x60, 0x01, C_ALL, "offcore_requests_outstanding.demand_data_rd" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x60, 0x01, C_ALL, "offcore_requests_outstanding.demand_data_rd_cycles", 0x1, ATTR_NONE, 0x0 }, \
+{ 0x60, 0x04, C_ALL, "offcore_requests_outstanding.demand_rfo" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x60, 0x04, C_ALL, "offcore_requests_outstanding.demand_rfo_cycles" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0x60, 0x08, C_ALL, "offcore_requests_outstanding.all_data_rd" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x60, 0x08, C_ALL, "offcore_requests_outstanding.all_data_rd_cycles" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0x63, 0x01, C_ALL, "lock_cycles.split_lock_uc_lock_duration" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x63, 0x02, C_ALL, "lock_cycles.cache_lock_duration" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x02, C_ALL, "idq.empty" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x04, C_ALL, "idq.mite_uops" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x04, C_ALL, "idq.mite_cycles" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x08, C_ALL, "idq.dsb_uops" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x08, C_ALL, "idq.dsb_cycles" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x10, C_ALL, "idq.ms_dsb_uops" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x10, C_ALL, "idq.ms_dsb_cycles" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x10, C_ALL, "idq.ms_dsb_activations" , 0x1, ATTR_EDGE, 0x0 }, \
+{ 0x79, 0x20, C_ALL, "idq.ms_mite_uops" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x20, C_ALL, "idq.ms_mite_cycles" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x30, C_ALL, "idq.ms_uops" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x30, C_ALL, "idq.ms_cycles" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x18, C_ALL, "idq.all_dsb_uops" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x18, C_ALL, "idq.all_dsb_cycles" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x24, C_ALL, "idq.all_mite_uops" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x24, C_ALL, "idq.all_mite_cycles" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x3C, C_ALL, "idq.mite_all_uops" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x3C, C_ALL, "idq.mite_all_cycles" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0x80, 0x02, C_ALL, "icache.misses" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x85, 0x01, C_ALL, "itlb_misses.miss_causes_a_walk" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x85, 0x02, C_ALL, "itlb_misses.walk_completed" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x85, 0x04, C_ALL, "itlb_misses.walk_duration" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x85, 0x10, C_ALL, "itlb_misses.stlb_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x87, 0x01, C_ALL, "ild_stall.lcp" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x87, 0x04, C_ALL, "ild_stall.iq_full" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x88, 0x41, C_ALL, "br_inst_exec.nontaken_cond" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x88, 0x81, C_ALL, "br_inst_exec.taken_cond" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x88, 0x82, C_ALL, "br_inst_exec.taken_direct_jmp" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x88, 0x84, C_ALL, "br_inst_exec.taken_indirect_jmp_non_call_ret" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x88, 0x88, C_ALL, "br_inst_exec.taken_return_near" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x88, 0x90, C_ALL, "br_inst_exec.taken_direct_near_call" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x88, 0xA0, C_ALL, "br_inst_exec.taken_indirect_near_call" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x88, 0xC1, C_ALL, "br_inst_exec.all_cond" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x88, 0xFF, C_ALL, "br_inst_exec.all_branches" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x89, 0x41, C_ALL, "br_misp_exec.nontaken_cond" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x89, 0x81, C_ALL, "br_misp_exec.taken_cond" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x89, 0x84, C_ALL, "br_misp_exec.taken_indirect_jmp_non_call_ret" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x89, 0x88, C_ALL, "br_misp_exec.taken_return_near" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x89, 0x90, C_ALL, "br_misp_exec.taken_direct_near_call" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x89, 0xA0, C_ALL, "br_misp_exec.taken_indirect_near_call" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x89, 0xC1, C_ALL, "br_misp_exec.all_cond" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x89, 0xFF, C_ALL, "br_misp_exec.all_branches" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x9C, 0x01, C_ALL, "idq_uops_not_delivered.core" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA1, 0x01, C_ALL, "uops_dispatched_port.port_0" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA1, 0x02, C_ALL, "uops_dispatched_port.port_1" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA1, 0x04, C_ALL, "uops_dispatched_port.port_2_ld" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA1, 0x08, C_ALL, "uops_dispatched_port.port_2_sta" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA1, 0x0C, C_ALL, "uops_dispatched_port.port_2" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA1, 0x10, C_ALL, "uops_dispatched_port.port_3_ld" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA1, 0x20, C_ALL, "uops_dispatched_port.port_3_sta" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA1, 0x30, C_ALL, "uops_dispatched_port.port_3" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA1, 0x40, C_ALL, "uops_dispatched_port.port_4" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA1, 0x80, C_ALL, "uops_dispatched_port.port_5" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA2, 0x01, C_ALL, "resource_stalls.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA2, 0x02, C_ALL, "resource_stalls.lb" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA2, 0x04, C_ALL, "resource_stalls.rs" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA2, 0x08, C_ALL, "resource_stalls.sb" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA2, 0x10, C_ALL, "resource_stalls.rob" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA2, 0x20, C_ALL, "resource_stalls.fcsw" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA2, 0x40, C_ALL, "resource_stalls.mxcsr" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA2, 0x80, C_ALL, "resource_stalls.other" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA3, 0x02, C2 , "cycle_activity.cycles_l1d_pending" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA3, 0x01, C_ALL, "cycle_activity.cycles_l2_pending" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA3, 0x04, C0|C1|C2|C3, "cycle_activity.cycles_no_dispatch" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xAB, 0x01, C_ALL, "dsb2mite_switches.count" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xAB, 0x02, C_ALL, "dsb2mite_switches.penalty_cycles" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xAC, 0x02, C_ALL, "dsb_fill.other_cancel" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xAC, 0x08, C_ALL, "dsb_fill.exceed_dsb_lines" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xAC, 0x0A, C_ALL, "dsb_fill.all_cancel" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xAE, 0x01, C_ALL, "itlb.itlb_flush" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB0, 0x01, C_ALL, "offcore_requests.demand_data_rd" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB0, 0x04, C_ALL, "offcore_requests.demand_rfo" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB0, 0x08, C_ALL, "offcore_requests.all_data_rd" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB1, 0x01, C0|C1|C2|C3, "uops_dispatched.thread" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB1, 0x01, C0|C1|C2|C3, "uops_dispatched.stall_cycles" , 0x1, ATTR_INV , 0x0 }, \
+{ 0xB1, 0x02, C_ALL, "uops_dispatched.core" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB2, 0x01, C_ALL, "offcore_requests_buffer.sq_full" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB6, 0x01, C_ALL, "agu_bypass_cancel.count" , 0x0, ATTR_NONE, 0x0 }, \
+/* { 0xB7, 0x01, C_ALL, "off_core_response_0" , 0x0, ATTR_NONE, 0x1A6 }, ignore events that require msr_offset */ \
+/* { 0xBB, 0x01, C_ALL, "off_core_response_1" , 0x0, ATTR_NONE, 0x1A7 }, ignore events that require msr_offset */ \
+{ 0xBD, 0x01, C_ALL, "tlb_flush.dtlb_thread" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xBD, 0x20, C_ALL, "tlb_flush.stlb_any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xBF, 0x05, C_ALL, "l1d_blocks.bank_conflict_cycles" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0xC0, 0x00, C_ALL, "inst_retired.any_p" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC0, 0x01, C1, "inst_retired.prec_dist" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC1, 0x02, C_ALL, "other_assists.itlb_miss_retired" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC1, 0x08, C_ALL, "other_assists.avx_store" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC1, 0x10, C_ALL, "other_assists.avx_to_sse" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC1, 0x20, C_ALL, "other_assists.sse_to_avx" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC2, 0x01, C_ALL, "uops_retired.all" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC2, 0x01, C_ALL, "uops_retired.active_cycles" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0xC2, 0x01, C_ALL, "uops_retired.stall_cycles" , 0x1, ATTR_INV , 0x0 }, \
+{ 0xC2, 0x02, C_ALL, "uops_retired.retire_slots" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC3, 0x02, C_ALL, "machine_clears.memory_ordering" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC3, 0x04, C_ALL, "machine_clears.smc" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC3, 0x20, C_ALL, "machine_clears.maskmov" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC4, 0x00, C_ALL, "br_inst_retired.all_branches" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC4, 0x01, C_ALL, "br_inst_retired.conditional" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC4, 0x02, C_ALL, "br_inst_retired.near_call" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC4, 0x04, C_ALL, "br_inst_retired.all_branches" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC4, 0x08, C_ALL, "br_inst_retired.near_return" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC4, 0x10, C_ALL, "br_inst_retired.not_taken" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC4, 0x20, C_ALL, "br_inst_retired.near_taken" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC4, 0x40, C_ALL, "br_inst_retired.far_branch" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC5, 0x00, C_ALL, "br_misp_retired.all_branches" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC5, 0x00, C_ALL, "br_misp_retired.all_branches" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC5, 0x01, C_ALL, "br_misp_retired.conditional" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC5, 0x02, C_ALL, "br_misp_retired.near_call" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC5, 0x04, C_ALL, "br_misp_retired.all_branches" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC5, 0x10, C_ALL, "br_misp_retired.not_taken" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC5, 0x20, C_ALL, "br_misp_retired.taken" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xCA, 0x02, C_ALL, "fp_assist.x87_output" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xCA, 0x04, C_ALL, "fp_assist.x87_input" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xCA, 0x08, C_ALL, "fp_assist.simd_output" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xCA, 0x10, C_ALL, "fp_assist.simd_input" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xCA, 0x1E, C_ALL, "fp_assist.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xCC, 0x20, C_ALL, "rob_misc_events.lbr_inserts" , 0x0, ATTR_NONE, 0x0 }, \
+/* { 0xCD, 0x01, C3, "mem_trans_retired.load_latency" , 0x0, ATTR_NONE, 0x3F6 }, ignore events that require msr_offset */ /* See Section "MSR_PEBS_LD_LAT_THRESHOLD" */ \
+{ 0xCD, 0x02, C3, "mem_trans_retired.precise_store" , 0x0, ATTR_NONE, 0x0 }, /* See Section "Precise Store Facility" */ \
+{ 0xD0, 0x11, C_ALL, "mem_uops_retired.stlb_miss_loads" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xD0, 0x12, C_ALL, "mem_uops_retired.stlb_miss_stores" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xD0, 0x21, C_ALL, "mem_uops_retired.lock_loads" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xD0, 0x22, C_ALL, "mem_uops_retired.lock_stores" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xD0, 0x41, C_ALL, "mem_uops_retired.split_loads" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xD0, 0x42, C_ALL, "mem_uops_retired.split_stores" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xD0, 0x81, C_ALL, "mem_uops_retired.all_loads" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xD0, 0x82, C_ALL, "mem_uops_retired.all_stores" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xD1, 0x01, C0|C1|C2|C3, "mem_load_uops_retired.l1_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xD1, 0x02, C_ALL, "mem_load_uops_retired.l2_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xD1, 0x04, C_ALL, "mem_load_uops_retired.llc_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xD1, 0x20, C_ALL, "mem_load_uops_retired.llc_miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xD1, 0x40, C_ALL, "mem_load_uops_retired.hit_lfb" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xD2, 0x01, C_ALL, "mem_load_uops_llc_hit_retired.xsnp_miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xD2, 0x02, C_ALL, "mem_load_uops_llc_hit_retired.xsnp_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xD2, 0x04, C_ALL, "mem_load_uops_llc_hit_retired.xsnp_hitm" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xD2, 0x08, C_ALL, "mem_load_uops_llc_hit_retired.xsnp_none" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xE6, 0x01, C_ALL, "baclears.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF0, 0x01, C_ALL, "l2_trans.demand_data_rd" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF0, 0x02, C_ALL, "l2_trans.rfo" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF0, 0x04, C_ALL, "l2_trans.code_rd" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF0, 0x08, C_ALL, "l2_trans.all_pf" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF0, 0x10, C_ALL, "l2_trans.l1d_wb" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF0, 0x20, C_ALL, "l2_trans.l2_fill" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF0, 0x40, C_ALL, "l2_trans.l2_wb" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF0, 0x80, C_ALL, "l2_trans.all_requests" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF1, 0x01, C_ALL, "l2_lines_in.i" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF1, 0x02, C_ALL, "l2_lines_in.s" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF1, 0x04, C_ALL, "l2_lines_in.e" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF1, 0x07, C_ALL, "l2_lines_in.all" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF2, 0x01, C_ALL, "l2_lines_out.demand_clean" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF2, 0x02, C_ALL, "l2_lines_out.demand_dirty" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF2, 0x04, C_ALL, "l2_lines_out.pf_clean" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF2, 0x08, C_ALL, "l2_lines_out.pf_dirty" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF2, 0x0A, C_ALL, "l2_lines_out.dirty_all" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF4, 0x10, C_ALL, "sq_misc.split_lock" , 0x0, ATTR_NONE, 0x0 }, \
+/* end of #define */
+
+#define EVENTS_FAM6_MOD42_ONLY \
+{ 0xD4, 0x02, C0|C1|C2|C3, "mem_load_uops_misc_retired.llc_miss" , 0x0, ATTR_NONE, 0x0 }, \
+/* end of #define */
+
+#define EVENTS_FAM6_MOD45_ONLY \
+/* { 0xD3, 0x01, C_ALL, "mem_load_uops_llc_miss_retired.local_dram" , 0x0, ATTR_NONE, 0x3C9 }, ignore events that require msr_offset */ \
+/* { 0xD3, 0x04, C_ALL, "mem_load_uops_llc_miss_retired.remote_dram" , 0x0, ATTR_NONE, 0x3C9 }, ignore events that require msr_offset */ \
+/* end of #define */
+
+/* Intel Ivy Bridge Processor */
+/*
+ * The Ivy Bridge tables are basically from Bug 16457100
+ * libcpc counter names should be based on public Intel documentation -- Ivy Bridge
+ * and those tables are basically from the
+ * Intel SDM, January 2013, Section 19.3, Table 19-5.
+ * Additionally, there is
+ * Table 19-6. Model 62 only.
+ */
+
+#define EVENTS_FAM6_MOD58 \
+{ 0x03, 0x02, C_ALL, "ld_blocks.store_forward" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x05, 0x01, C_ALL, "misalign_mem_ref.loads" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x05, 0x02, C_ALL, "misalign_mem_ref.stores" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x07, 0x01, C_ALL, "ld_blocks_partial.address_alias" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x08, 0x81, C_ALL, "dtlb_load_misses.miss_causes_a_walk" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x08, 0x82, C_ALL, "dtlb_load_misses.walk_completed" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x08, 0x84, C_ALL, "dtlb_load_misses.walk_duration" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x0E, 0x01, C_ALL, "uops_issued.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x0E, 0x01, C_ALL, "uops_issued.stall_cycles" , 0x1, ATTR_INV , 0x0 }, \
+{ 0x0E, 0x01, C_ALL, "uops_issued.core_stall_cycles" , 0x1, ATTR_INV | ATTR_ANY, 0x0 }, \
+{ 0x0E, 0x10, C_ALL, "uops_issued.flags_merge" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x0E, 0x20, C_ALL, "uops_issued.slow_lea" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x0E, 0x40, C_ALL, "uops_issued.sIngle_mul" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x10, 0x01, C_ALL, "fp_comp_ops_exe.x87" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x10, 0x10, C_ALL, "fp_comp_ops_exe.sse_fp_packed_double" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x10, 0x20, C_ALL, "fp_comp_ops_exe.sse_fp_scalar_single" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x10, 0x40, C_ALL, "fp_comp_ops_exe.sse_packed_single" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x10, 0x80, C_ALL, "fp_comp_ops_exe.sse_scalar_double" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x11, 0x01, C_ALL, "simd_fp_256.packed_single" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x11, 0x02, C_ALL, "simd_fp_256.packed_double" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x14, 0x01, C_ALL, "arith.fpu_div_active" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x14, 0x01, C_ALL, "arith.fpu_div" , 0x1, ATTR_EDGE, 0x0 }, \
+{ 0x24, 0x01, C_ALL, "l2_rqsts.demand_data_rd_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x03, C_ALL, "l2_rqsts.all_demand_data_rd" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x04, C_ALL, "l2_rqsts.rfo_hits" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x08, C_ALL, "l2_rqsts.rfo_miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x0C, C_ALL, "l2_rqsts.all_rfo" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x10, C_ALL, "l2_rqsts.code_rd_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x20, C_ALL, "l2_rqsts.code_rd_miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x30, C_ALL, "l2_rqsts.all_code_rd" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x40, C_ALL, "l2_rqsts.pf_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x80, C_ALL, "l2_rqsts.pf_miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0xC0, C_ALL, "l2_rqsts.all_pf" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x27, 0x01, C_ALL, "l2_store_lock_rqsts.miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x27, 0x08, C_ALL, "l2_store_lock_rqsts.hit_m" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x27, 0x0F, C_ALL, "l2_store_lock_rqsts.all" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x28, 0x01, C_ALL, "l2_l1d_wb_rqsts.miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x28, 0x04, C_ALL, "l2_l1d_wb_rqsts.hit_e" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x28, 0x08, C_ALL, "l2_l1d_wb_rqsts.hit_m" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x28, 0x0F, C_ALL, "l2_l1d_wb_rqsts.all" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x2E, 0x41, C_ALL, "longest_lat_cache.miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x2E, 0x4F, C_ALL, "longest_lat_cache.reference" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x3C, 0x00, C_ALL, "cpu_clk_unhalted.thread_p" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x3C, 0x01, C_ALL, "cpu_clk_thread_unhalted.ref_xclk" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x48, 0x01, C(2), "l1d_pend_miss.pending" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x48, 0x01, C(2), "l1d_pend_miss.pending_cycles" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0x48, 0x01, C(2), "l1d_pend_miss.occurrences" , 0x1, ATTR_EDGE, 0x0 }, \
+{ 0x49, 0x01, C_ALL, "dtlb_store_misses.miss_causes_a_walk" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x49, 0x02, C_ALL, "dtlb_store_misses.walk_completed" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x49, 0x04, C_ALL, "dtlb_store_misses.walk_duration" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x49, 0x10, C_ALL, "dtlb_store_misses.stlb_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x4C, 0x01, C_ALL, "load_hit_pre.sw_pf" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x4C, 0x02, C_ALL, "load_hit_pre.hw_pf" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x51, 0x01, C_ALL, "l1d.replacement" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x58, 0x04, C_ALL, "move_elimination.int_not_eliminated" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x58, 0x08, C_ALL, "move_elimination.simd_not_eliminated" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x58, 0x01, C_ALL, "move_elimination.int_eliminated" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x58, 0x02, C_ALL, "move_elimination.simd_eliminated" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x5C, 0x01, C_ALL, "cpl_cycles.ring0" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x5C, 0x01, C_ALL, "cpl_cycles.ring0_trans" , 0x0, ATTR_EDGE, 0x0 }, \
+{ 0x5C, 0x02, C_ALL, "cpl_cycles.ring123" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x5E, 0x01, C_ALL, "rs_events.empty_cycles" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x5F, 0x04, C_ALL, "dtlb_load_misses.stlb_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x60, 0x01, C_ALL, "offcore_requests_outstanding.demand_data_rd" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x60, 0x01, C_ALL, "offcore_requests_outstanding.demand_data_rd_cycles", 0x1, ATTR_NONE, 0x0 }, \
+{ 0x60, 0x02, C_ALL, "offcore_requests_outstanding.demand_code_rd" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x60, 0x02, C_ALL, "offcore_requests_outstanding.demand_code_rd_cycles", 0x1, ATTR_NONE, 0x0 }, \
+{ 0x60, 0x04, C_ALL, "offcore_requests_outstanding.demand_rfo" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x60, 0x04, C_ALL, "offcore_requests_outstanding.demand_rfo_cycles" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0x60, 0x08, C_ALL, "offcore_requests_outstanding.all_data_rd" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x60, 0x08, C_ALL, "offcore_requests_outstanding.all_data_rd_cycles" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0x63, 0x01, C_ALL, "lock_cycles.split_lock_uc_lock_duration" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x63, 0x02, C_ALL, "lock_cycles.cache_lock_duration" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x02, C_ALL, "idq.empty" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x04, C_ALL, "idq.mite_uops" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x04, C_ALL, "idq.mite_cycles" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x08, C_ALL, "idq.dsb_uops" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x08, C_ALL, "idq.dsb_cycles" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x10, C_ALL, "idq.ms_dsb_uops" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x10, C_ALL, "idq.ms_dsb_cycles" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x10, C_ALL, "idq.ms_dsb_activations" , 0x1, ATTR_EDGE, 0x0 }, \
+{ 0x79, 0x18, C_ALL, "idq.all_dsb_uops" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x18, C_ALL, "idq.all_dsb_cycles" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x18, C_ALL, "idq.all_dsb_cycles_any_uops" /* synonym, from Intel SDM */ , 0x1, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x18, C_ALL, "idq.all_dsb_cycles_4_uops" , 0x4, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x20, C_ALL, "idq.ms_mite_cycles" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x20, C_ALL, "idq.ms_mite_cycles" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x24, C_ALL, "idq.all_mite_uops" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x24, C_ALL, "idq.all_mite_cycles" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x24, C_ALL, "idq.all_mite_cycles_any_uops" /* synonym, from Intel SDM */ , 0x1, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x24, C_ALL, "idq.all_mite_cycles_4_uops" , 0x4, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x30, C_ALL, "idq.ms_uops" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x30, C_ALL, "idq.ms_cycles" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x3C, C_ALL, "idq.mite_all_uops" /* weird name suggested by Intel docs */ , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x3C, C_ALL, "idq.mite_all_cycles" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0x80, 0x02, C_ALL, "icache.misses" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x85, 0x01, C_ALL, "itlb_misses.miss_causes_a_walk" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x85, 0x02, C_ALL, "itlb_misses.walk_completed" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x85, 0x04, C_ALL, "itlb_misses.walk_duration" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x85, 0x10, C_ALL, "itlb_misses.stlb_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x87, 0x01, C_ALL, "ild_stall.lcp" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x87, 0x04, C_ALL, "ild_stall.iq_full" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x88, 0x41, C_ALL, "br_inst_exec.nontaken_cond" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x88, 0x81, C_ALL, "br_inst_exec.taken_cond" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x88, 0x82, C_ALL, "br_inst_exec.taken_direct_jmp" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x88, 0x84, C_ALL, "br_inst_exec.taken_indirect_jmp_non_call_ret" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x88, 0x88, C_ALL, "br_inst_exec.taken_return_near" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x88, 0x90, C_ALL, "br_inst_exec.taken_direct_near_call" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x88, 0xA0, C_ALL, "br_inst_exec.taken_indirect_near_call" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x88, 0xFF, C_ALL, "br_inst_exec.all_branches" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x89, 0x41, C_ALL, "br_misp_exec.nontaken_cond" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x89, 0x81, C_ALL, "br_misp_exec.taken_cond" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x89, 0x84, C_ALL, "br_misp_exec.taken_indirect_jmp_non_call_ret" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x89, 0x88, C_ALL, "br_misp_exec.taken_return_near" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x89, 0x90, C_ALL, "br_misp_exec.taken_direct_near_call" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x89, 0xA0, C_ALL, "br_misp_exec.taken_indirect_near_call" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x89, 0xFF, C_ALL, "br_misp_exec.all_branches" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x9C, 0x01, C_ALL, "idq_uops_not_delivered.core" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA1, 0x01, C_ALL, "uops_dispatched_port.port_0" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA1, 0x02, C_ALL, "uops_dispatched_port.port_1" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA1, 0x04, C_ALL, "uops_dispatched_port.port_2_ld" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA1, 0x08, C_ALL, "uops_dispatched_port.port_2_sta" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA1, 0x0C, C_ALL, "uops_dispatched_port.port_2" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA1, 0x10, C_ALL, "uops_dispatched_port.port_3_ld" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA1, 0x20, C_ALL, "uops_dispatched_port.port_3_sta" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA1, 0x30, C_ALL, "uops_dispatched_port.port_3" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA1, 0x40, C_ALL, "uops_dispatched_port.port_4" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA1, 0x80, C_ALL, "uops_dispatched_port.port_5" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA2, 0x01, C_ALL, "resource_stalls.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA2, 0x04, C_ALL, "resource_stalls.rs" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA2, 0x08, C_ALL, "resource_stalls.sb" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA2, 0x10, C_ALL, "resource_stalls.rob" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA3, 0x01, C_ALL, "cycle_activity.cycles_l2_pending" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA3, 0x01, C_ALL, "cycle_activity.cycles_l2_pending_core" , 0x0, ATTR_ANY , 0x0 }, \
+{ 0xA3, 0x02, C0|C1|C2|C3, "cycle_activity.cycles_ldm_pending" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA3, 0x02, C0|C1|C2|C3, "cycle_activity.cycles_ldm_pending_core" , 0x0, ATTR_ANY , 0x0 }, \
+{ 0xA3, 0x08, C(2), "cycle_activity.cycles_l1d_pending" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA3, 0x08, C(2), "cycle_activity.cycles_l1d_pending_core" , 0x0, ATTR_ANY , 0x0 }, \
+{ 0xA3, 0x04, C_ALL, "cycle_activity.cycles_no_execute" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA3, 0x04, C_ALL, "cycle_activity.cycles_no_execute_core" , 0x0, ATTR_ANY , 0x0 }, \
+{ 0xAB, 0x01, C_ALL, "dsb2mite_switches.count" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xAB, 0x02, C_ALL, "dsb2mite_switches.penalty_cycles" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xAC, 0x08, C_ALL, "dsb_fill.exceed_dsb_lines" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xAE, 0x01, C_ALL, "itlb.itlb_flush" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB0, 0x01, C_ALL, "offcore_requests.demand_data_rd" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB0, 0x02, C_ALL, "offcore_requests.demand_code_rd" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB0, 0x04, C_ALL, "offcore_requests.demand_rfo" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB0, 0x08, C_ALL, "offcore_requests.all_data_rd" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB1, 0x01, C_ALL, "uops_executed.thread" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB1, 0x01, C_ALL, "uops_executed.stall_cycles" , 0x1, ATTR_INV , 0x0 }, \
+{ 0xB1, 0x02, C_ALL, "uops_executed.core" , 0x0, ATTR_NONE, 0x0 }, \
+/* { 0xB7, 0x01, C_ALL, "offcore_response_0" , 0x0, ATTR_NONE, 0x1A6 }, ignore events that require msr_offset */ \
+/* { 0xBB, 0x01, C_ALL, "offcore_response_1" , 0x0, ATTR_NONE, 0x1A7 }, ignore events that require msr_offset */ \
+{ 0xBD, 0x01, C_ALL, "tlb_flush.dtlb_thread" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xBD, 0x20, C_ALL, "tlb_flush.stlb_any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC0, 0x00, C_ALL, "inst_retired.any_p" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC0, 0x01, C(1), "inst_retired.prec_dist" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC1, 0x08, C_ALL, "other_assists.avx_store" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC1, 0x10, C_ALL, "other_assists.avx_to_sse" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC1, 0x20, C_ALL, "other_assists.sse_to_avx" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC2, 0x01, C_ALL, "uops_retired.all" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC2, 0x01, C_ALL, "uops_retired.active_cycles" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0xC2, 0x01, C_ALL, "uops_retired.stall_cycles" , 0x1, ATTR_INV , 0x0 }, \
+{ 0xC2, 0x02, C_ALL, "uops_retired.retire_slots" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC3, 0x02, C_ALL, "machine_clears.memory_ordering" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC3, 0x04, C_ALL, "machine_clears.smc" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC3, 0x20, C_ALL, "machine_clears.maskmov" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC4, 0x00, C_ALL, "br_inst_retired.all_branches" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC4, 0x01, C_ALL, "br_inst_retired.conditional" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC4, 0x02, C_ALL, "br_inst_retired.near_call" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC4, 0x04, C_ALL, "br_inst_retired.all_branches" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC4, 0x08, C_ALL, "br_inst_retired.near_return" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC4, 0x10, C_ALL, "br_inst_retired.not_taken" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC4, 0x20, C_ALL, "br_inst_retired.near_taken" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC4, 0x40, C_ALL, "br_inst_retired.far_branch" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC5, 0x00, C_ALL, "br_misp_retired.all_branches" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC5, 0x01, C_ALL, "br_misp_retired.conditional" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC5, 0x02, C_ALL, "br_misp_retired.near_call" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC5, 0x04, C_ALL, "br_misp_retired.all_branches" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC5, 0x10, C_ALL, "br_misp_retired.not_taken" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC5, 0x20, C_ALL, "br_misp_retired.taken" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xCA, 0x02, C_ALL, "fp_assist.x87_output" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xCA, 0x04, C_ALL, "fp_assist.x87_input" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xCA, 0x08, C_ALL, "fp_assist.simd_output" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xCA, 0x10, C_ALL, "fp_assist.simd_input" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xCA, 0x1E, C_ALL, "fp_assist.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xCC, 0x20, C_ALL, "rob_misc_events.lbr_inserts" , 0x0, ATTR_NONE, 0x0 }, \
+/* { 0xCD, 0x01, C3 , "mem_trans_retired.load_latency" , 0x0, ATTR_NONE, 0x3F6 }, ignore events that require msr_offset */ /* See Section "MSR_PEBS_LD_LAT_THRESHOLD" */ \
+{ 0xCD, 0x02, C3 , "mem_trans_retired.precise_store" , 0x0, ATTR_NONE, 0x0 }, /* See Section "Precise Store Facility" */ \
+{ 0xD0, 0x11, C_ALL, "mem_uops_retired.stlb_miss_loads" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xD0, 0x12, C_ALL, "mem_uops_retired.stlb_miss_stores" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xD0, 0x21, C_ALL, "mem_uops_retired.lock_loads" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xD0, 0x22, C_ALL, "mem_uops_retired.lock_stores" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xD0, 0x41, C_ALL, "mem_uops_retired.split_loads" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xD0, 0x42, C_ALL, "mem_uops_retired.split_stores" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xD0, 0x81, C_ALL, "mem_uops_retired.all_loads" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xD0, 0x82, C_ALL, "mem_uops_retired.all_stores" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xD1, 0x01, C_ALL, "mem_load_uops_retired.l1_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xD1, 0x02, C_ALL, "mem_load_uops_retired.l2_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xD1, 0x04, C_ALL, "mem_load_uops_retired.llc_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xD1, 0x08, C_ALL, "mem_load_uops_retired.l1_miss" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xD1, 0x10, C_ALL, "mem_load_uops_retired.l2_miss" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xD1, 0x20, C_ALL, "mem_load_uops_retired.llc_miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xD1, 0x40, C_ALL, "mem_load_uops_retired.hit_lfb" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xD2, 0x01, C_ALL, "mem_load_uops_llc_hit_retired.xsnp_miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xD2, 0x02, C_ALL, "mem_load_uops_llc_hit_retired.xsnp_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xD2, 0x04, C_ALL, "mem_load_uops_llc_hit_retired.xsnp_hitm" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xD2, 0x08, C_ALL, "mem_load_uops_llc_hit_retired.xsnp_none" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xD3, 0x01, C_ALL, "mem_load_uops_llc_miss_retired.local_dram" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xE6, 0x1F, C_ALL, "baclears.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF0, 0x01, C_ALL, "l2_trans.demand_data_rd" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF0, 0x02, C_ALL, "l2_trans.rfo" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF0, 0x04, C_ALL, "l2_trans.code_rd" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF0, 0x08, C_ALL, "l2_trans.all_pf" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF0, 0x10, C_ALL, "l2_trans.l1d_wb" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF0, 0x20, C_ALL, "l2_trans.l2_fill" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF0, 0x40, C_ALL, "l2_trans.l2_wb" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF0, 0x80, C_ALL, "l2_trans.all_requests" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF1, 0x01, C_ALL, "l2_lines_in.i" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF1, 0x02, C_ALL, "l2_lines_in.s" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF1, 0x04, C_ALL, "l2_lines_in.e" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF1, 0x07, C_ALL, "l2_lines_in.all" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF2, 0x01, C_ALL, "l2_lines_out.demand_clean" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF2, 0x02, C_ALL, "l2_lines_out.demand_dirty" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF2, 0x04, C_ALL, "l2_lines_out.pf_clean" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF2, 0x08, C_ALL, "l2_lines_out.pf_dirty" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF2, 0x0A, C_ALL, "l2_lines_out.dirty_all" , 0x0, ATTR_NONE, 0x0 }, \
+/* end of #define */
+
+#define EVENTS_FAM6_MOD62_ONLY \
+{ 0xD3, 0x01, C_ALL, "mem_load_uops_llc_miss_retired.local_dram" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xD3, 0x04, C_ALL, "mem_load_uops_llc_miss_retired.remote_dram" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xD3, 0x10, C_ALL, "mem_load_uops_llc_miss_retired.remote_hitm" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xD3, 0x20, C_ALL, "mem_load_uops_llc_miss_retired.remote_fwd" , 0x0, ATTR_NONE, 0x0 }, \
+/* end of #define */
+
+/* Intel Haswell Processor */
+/*
+ * The Haswell tables take into account Bug 17006019
+ * libcpc counter names should be based on public Intel documentation -- Haswell
+ * and are basically from the
+ * Intel SDM, June 2013, Section 19.3, Table 19-2 and Table 19-3.
+ * We omit the Table 19-4 uncore events.
+ */
+
+#define EVENTS_FAM6_MOD60 \
+{ 0x03, 0x02, C_ALL, "ld_blocks.store_forward" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x03, 0x08, C_ALL, "ld_blocks.no_sr" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x05, 0x01, C_ALL, "misalign_mem_ref.loads" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x05, 0x02, C_ALL, "misalign_mem_ref.stores" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x07, 0x01, C_ALL, "ld_blocks_partial.address_alias" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x08, 0x01, C_ALL, "dtlb_load_misses.miss_causes_a_walk" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x08, 0x02, C_ALL, "dtlb_load_misses.walk_completed_4k" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x08, 0x04, C_ALL, "dtlb_load_misses.walk_completed_2m_4m" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x08, 0x0E, C_ALL, "dtlb_load_misses.walk_completed" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x08, 0x10, C_ALL, "dtlb_load_misses.walk_duration" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x08, 0x20, C_ALL, "dtlb_load_misses.stlb_hit_4k" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x08, 0x40, C_ALL, "dtlb_load_misses.stlb_hit_2m" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x08, 0x60, C_ALL, "dtlb_load_misses.stlb_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x08, 0x80, C_ALL, "dtlb_load_misses.pde_cache_miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x0D, 0x03, C_ALL, "int_misc.recovery_cycles" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0x0D, 0x03, C_ALL, "int_misc.recovery_cycles_occurrences" , 0x1, ATTR_EDGE, 0x0 }, \
+{ 0x0E, 0x01, C_ALL, "uops_issued.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x0E, 0x01, C_ALL, "uops_issued.stall_cycles" , 0x1, ATTR_INV , 0x0 }, \
+{ 0x0E, 0x01, C_ALL, "uops_issued.core_stall_cycles" , 0x1, ATTR_INV | ATTR_ANY, 0x0 }, \
+{ 0x0E, 0x10, C_ALL, "uops_issued.flags_merge" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x0E, 0x20, C_ALL, "uops_issued.slow_lea" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x0E, 0x40, C_ALL, "uops_issued.single_mul" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x21, C_ALL, "l2_rqsts.demand_data_rd_miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x22, C_ALL, "l2_rqsts.rfo_miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x24, C_ALL, "l2_rqsts.code_rd_miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x27, C_ALL, "l2_rqsts.all_demand_miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x30, C_ALL, "l2_rqsts.l2_pf_miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x3F, C_ALL, "l2_rqsts.miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x41, C_ALL, "l2_rqsts.demand_data_rd_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x42, C_ALL, "l2_rqsts.rfo_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x44, C_ALL, "l2_rqsts.code_rd_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x50, C_ALL, "l2_rqsts.l2_pf_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0xE1, C_ALL, "l2_rqsts.all_demand_data_rd" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0xE2, C_ALL, "l2_rqsts.all_rfo" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0xE4, C_ALL, "l2_rqsts.all_code_rd" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0xE7, C_ALL, "l2_rqsts.all_demand_references" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0xF8, C_ALL, "l2_rqsts.all_pf" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0xFF, C_ALL, "l2_rqsts.references" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x27, 0x50, C_ALL, "l2_demand_rqsts.wb_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x2E, 0x4F, C_ALL, "longest_lat_cache.reference" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x2E, 0x41, C_ALL, "longest_lat_cache.miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x3C, 0x00, C_ALL, "cpu_clk_unhalted.thread_p" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x3C, 0x01, C_ALL, "cpu_clk_thread_unhalted.ref_xclk" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x48, 0x01, C(2) , "l1d_pend_miss.pending" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x48, 0x01, C(2) , "l1d_pend_miss.pending_cycles" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0x48, 0x01, C(2) , "l1d_pend_miss.occurences" , 0x1, ATTR_EDGE, 0x0 }, \
+{ 0x49, 0x01, C_ALL, "dtlb_store_misses.miss_causes_a_walk" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x49, 0x02, C_ALL, "dtlb_store_misses.walk_completed_4k" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x49, 0x04, C_ALL, "dtlb_store_misses.walk_completed_2m_4m" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x49, 0x0E, C_ALL, "dtlb_store_misses.walk_completed" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x49, 0x10, C_ALL, "dtlb_store_misses.walk_duration" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x49, 0x20, C_ALL, "dtlb_store_misses.stlb_hit_4k" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x49, 0x40, C_ALL, "dtlb_store_misses.stlb_hit_2m" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x49, 0x60, C_ALL, "dtlb_store_misses.stlb_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x49, 0x80, C_ALL, "dtlb_store_misses.pde_cache_miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x4C, 0x01, C_ALL, "load_hit_pre.sw_pf" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x4C, 0x02, C_ALL, "load_hit_pre.hw_pf" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x51, 0x01, C_ALL, "l1d.replacement" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x54, 0x01, C_ALL, "tx_mem.abort_conflict" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x54, 0x02, C_ALL, "tx_mem.abort_capacity" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x54, 0x04, C_ALL, "tx_mem.abort_hle_store_to_elided_lock" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x54, 0x08, C_ALL, "tx_mem.abort_hle_elision_buffer_not_empty" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x54, 0x10, C_ALL, "tx_mem.abort_hle_elision_buffer_mismatch" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x54, 0x20, C_ALL, "tx_mem.abort_hle_elision_buffer_unsupported_alignment" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x54, 0x40, C_ALL, "tx_mem.abort_hle_elision_buffer_full" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x58, 0x01, C_ALL, "move_elimination.int_eliminated" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x58, 0x02, C_ALL, "move_elimination.simd_eliminated" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x58, 0x04, C_ALL, "move_elimination.int_not_eliminated" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x58, 0x08, C_ALL, "move_elimination.simd_not_eliminated" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x5C, 0x01, C_ALL, "cpl_cycles.ring0" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x5C, 0x01, C_ALL, "cpl_cycles.ring0_trans" , 0x0, ATTR_EDGE, 0x0 }, \
+{ 0x5C, 0x02, C_ALL, "cpl_cycles.ring123" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x5D, 0x01, C_ALL, "tx_exec.misc1" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x5D, 0x02, C_ALL, "tx_exec.misc2" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x5D, 0x04, C_ALL, "tx_exec.misc3" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x5D, 0x08, C_ALL, "tx_exec.misc4" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x5D, 0x10, C_ALL, "tx_exec.misc5" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x5E, 0x01, C_ALL, "rs_events.empty_cycles" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x60, 0x01, C_ALL, "offcore_requests_outstanding.demand_data_rd" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x60, 0x01, C_ALL, "offcore_requests_outstanding.cycles_with_demand_data_rd", 0x1, ATTR_NONE, 0x0 }, \
+{ 0x60, 0x02, C_ALL, "offcore_requests_outstanding.demand_code_rd" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x60, 0x02, C_ALL, "offcore_requests_outstanding.demand_code_rd_cycles", 0x1, ATTR_NONE, 0x0 }, \
+{ 0x60, 0x04, C_ALL, "offcore_requests_outstanding.demand_rfo" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x60, 0x04, C_ALL, "offcore_requests_outstanding.demand_rfo_cycles" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0x60, 0x08, C_ALL, "offcore_requests_outstanding.all_data_rd" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x60, 0x08, C_ALL, "offcore_requests_outstanding.cycles_with_data_rd" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0x63, 0x01, C_ALL, "lock_cycles.split_lock_uc_lock_duration" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x63, 0x02, C_ALL, "lock_cycles.cache_lock_duration" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x02, C_ALL, "idq.empty" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x04, C_ALL, "idq.mite_uops" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x04, C_ALL, "idq.mite_cycles" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x20, C_ALL, "idq.ms_mite_uops" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x20, C_ALL, "idq.ms_mite_cycles" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x24, C_ALL, "idq.all_mite_cycles_any_uops" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x24, C_ALL, "idq.all_mite_cycles_4_uops" , 0x4, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x08, C_ALL, "idq.dsb_uops" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x08, C_ALL, "idq.dsb_cycles" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x10, C_ALL, "idq.ms_dsb_uops" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x10, C_ALL, "idq.ms_dsb_cycles" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x10, C_ALL, "idq.ms_dsb_occur" , 0x1, ATTR_EDGE, 0x0 }, \
+{ 0x79, 0x18, C_ALL, "idq.all_dsb_cycles_any_uops" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x18, C_ALL, "idq.all_dsb_cycles_4_uops" , 0x4, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x30, C_ALL, "idq.ms_uops" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x30, C_ALL, "idq.ms_cycles" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x3C, C_ALL, "idq.mite_all_uops" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x80, 0x02, C_ALL, "icache.misses" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x85, 0x01, C_ALL, "itlb_misses.miss_causes_a_walk" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x85, 0x02, C_ALL, "itlb_misses.walk_completed_4k" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x85, 0x04, C_ALL, "itlb_misses.walk_completed_2m_4m" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x85, 0x0E, C_ALL, "itlb_misses.walk_completed" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x85, 0x10, C_ALL, "itlb_misses.walk_duration" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x85, 0x20, C_ALL, "itlb_misses.stlb_hit_4k" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x85, 0x40, C_ALL, "itlb_misses.stlb_hit_2m" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x85, 0x60, C_ALL, "itlb_misses.stlb_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x87, 0x01, C_ALL, "ild_stall.lcp" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x87, 0x04, C_ALL, "ild_stall.iq_full" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x88, 0x41, C_ALL, "br_inst_exec.nontaken_conditional" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x88, 0x81, C_ALL, "br_inst_exec.taken_conditional" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x88, 0x82, C_ALL, "br_inst_exec.taken_direct_jump" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x88, 0x84, C_ALL, "br_inst_exec.taken_indirect_jump_non_call_ret" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x88, 0x88, C_ALL, "br_inst_exec.taken_indirect_near_return" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x88, 0x90, C_ALL, "br_inst_exec.taken_direct_near_call" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x88, 0xA0, C_ALL, "br_inst_exec.taken_indirect_near_call" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x88, 0xFF, C_ALL, "br_inst_exec.all_branches" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x89, 0x41, C_ALL, "br_misp_exec.nontaken_conditional" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x89, 0x81, C_ALL, "br_misp_exec.taken_conditional" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x89, 0x84, C_ALL, "br_misp_exec.taken_indirect_jump_non_call_ret" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x89, 0x88, C_ALL, "br_misp_exec.taken_return_near" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x89, 0x90, C_ALL, "br_misp_exec.taken_direct_near_call" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x89, 0xA0, C_ALL, "br_misp_exec.taken_indirect_near_call" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x89, 0xFF, C_ALL, "br_misp_exec.all_branches" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x9C, 0x01, C_ALL, "idq_uops_not_delivered.core" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x9C, 0x01, C_ALL, "idq_uops_not_delivered.cycles_0_uops_deliv.core" , 0x4, ATTR_NONE, 0x0 }, \
+{ 0x9C, 0x01, C_ALL, "idq_uops_not_delivered.cycles_le_1_uop_deliv.core" , 0x3, ATTR_NONE, 0x0 }, \
+{ 0x9C, 0x01, C_ALL, "idq_uops_not_delivered.cycles_le_2_uop_deliv.core" , 0x2, ATTR_NONE, 0x0 }, \
+{ 0x9C, 0x01, C_ALL, "idq_uops_not_delivered.cycles_le_3_uop_deliv.core" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0x9C, 0x01, C_ALL, "idq_uops_not_delivered.cycles_fe_was_ok" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0xA1, 0x01, C_ALL, "uops_executed_port.port_0" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA1, 0x02, C_ALL, "uops_executed_port.port_1" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA1, 0x04, C_ALL, "uops_executed_port.port_2" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA1, 0x08, C_ALL, "uops_executed_port.port_3" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA1, 0x10, C_ALL, "uops_executed_port.port_4" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA1, 0x20, C_ALL, "uops_executed_port.port_5" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA1, 0x40, C_ALL, "uops_executed_port.port_6" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA1, 0x80, C_ALL, "uops_executed_port.port_7" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA1, 0x01, C_ALL, "uops_executed_port.port_0_core" , 0x0, ATTR_ANY , 0x0 }, \
+{ 0xA1, 0x02, C_ALL, "uops_executed_port.port_1_core" , 0x0, ATTR_ANY , 0x0 }, \
+{ 0xA1, 0x04, C_ALL, "uops_executed_port.port_2_core" , 0x0, ATTR_ANY , 0x0 }, \
+{ 0xA1, 0x08, C_ALL, "uops_executed_port.port_3_core" , 0x0, ATTR_ANY , 0x0 }, \
+{ 0xA1, 0x10, C_ALL, "uops_executed_port.port_4_core" , 0x0, ATTR_ANY , 0x0 }, \
+{ 0xA1, 0x20, C_ALL, "uops_executed_port.port_5_core" , 0x0, ATTR_ANY , 0x0 }, \
+{ 0xA1, 0x40, C_ALL, "uops_executed_port.port_6_core" , 0x0, ATTR_ANY , 0x0 }, \
+{ 0xA1, 0x80, C_ALL, "uops_executed_port.port_7_core" , 0x0, ATTR_ANY , 0x0 }, \
+{ 0xA2, 0x01, C_ALL, "resource_stalls.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA2, 0x04, C_ALL, "resource_stalls.rs" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA2, 0x08, C_ALL, "resource_stalls.sb" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA2, 0x10, C_ALL, "resource_stalls.rob" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA3, 0x01, C_ALL, "cycle_activity.cycles_l2_pending" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA3, 0x01, C_ALL, "cycle_activity.cycles_l2_pending_cycles" , 0x2, ATTR_NONE, 0x0 }, \
+{ 0xA3, 0x02, C_ALL, "cycle_activity.cycles_ldm_pending" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA3, 0x02, C_ALL, "cycle_activity.cycles_ldm_pending_cycles" , 0x2, ATTR_NONE, 0x0 }, \
+{ 0xA3, 0x05, C_ALL, "cycle_activity.stalls_l2_pending" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA3, 0x08, C(2) , "cycle_activity.cycles_l1d_pending" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA3, 0x08, C(2) , "cycle_activity.cycles_l1d_pending_cycles" , 0x8, ATTR_NONE, 0x0 }, \
+{ 0xA8, 0x01, C_ALL, "lsd.uops" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xAE, 0x01, C_ALL, "itlb.itlb_flush" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB0, 0x01, C_ALL, "offcore_requests.demand_data_rd" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB0, 0x02, C_ALL, "offcore_requests.demand_code_rd" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB0, 0x04, C_ALL, "offcore_requests.demand_rfo" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB0, 0x08, C_ALL, "offcore_requests.all_data_rd" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB1, 0x02, C_ALL, "uops_executed.core" , 0x0, ATTR_NONE, 0x0 }, \
+/* { 0xB7, 0x01, C_ALL, "off_core_response_0" , 0x0, ATTR_NONE, 0x1A6 }, omit events requiring MSR programming */ \
+/* { 0xBB, 0x01, C_ALL, "off_core_response_1" , 0x0, ATTR_NONE, 0x1A7 }, omit events requiring MSR programming */ \
+{ 0xBC, 0x11, C_ALL, "page_walker_loads.dtlb_l1" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xBC, 0x21, C_ALL, "page_walker_loads.itlb_l1" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xBC, 0x12, C_ALL, "page_walker_loads.dtlb_l2" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xBC, 0x22, C_ALL, "page_walker_loads.itlb_l2" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xBC, 0x14, C_ALL, "page_walker_loads.dtlb_l3" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xBC, 0x24, C_ALL, "page_walker_loads.itlb_l3" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xBC, 0x18, C_ALL, "page_walker_loads.dtlb_memory" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xBC, 0x28, C_ALL, "page_walker_loads.itlb_memory" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xBD, 0x01, C_ALL, "tlb_flush.dtlb_thread" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xBD, 0x20, C_ALL, "tlb_flush.stlb_any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC0, 0x00, C_ALL, "inst_retired.any_p" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC0, 0x01, C(1) , "inst_retired.prec_dist" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC1, 0x08, C_ALL, "other_assists.avx_to_sse" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC1, 0x10, C_ALL, "other_assists.sse_to_avx" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC1, 0x40, C_ALL, "other_assists.any_wb_assist" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC2, 0x01, C_ALL, "uops_retired.all" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xC2, 0x01, C_ALL, "uops_retired.stall_cycles" , 0x1, ATTR_INV , 0x0 }, \
+{ 0xC2, 0x02, C_ALL, "uops_retired.retire_slots" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xC3, 0x02, C_ALL, "machine_clears.memory_ordering" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC3, 0x04, C_ALL, "machine_clears.smc" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC3, 0x20, C_ALL, "machine_clears.maskmov" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC4, 0x00, C_ALL, "br_inst_retired.all_branches" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC4, 0x01, C_ALL, "br_inst_retired.conditional" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xC4, 0x02, C_ALL, "br_inst_retired.near_call" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xC4, 0x04, C_ALL, "br_inst_retired.all_branches" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xC4, 0x08, C_ALL, "br_inst_retired.near_return" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xC4, 0x10, C_ALL, "br_inst_retired.not_taken" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xC4, 0x20, C_ALL, "br_inst_retired.near_taken" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xC4, 0x40, C_ALL, "br_inst_retired.far_branch" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC5, 0x00, C_ALL, "br_misp_retired.all_branches" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC5, 0x01, C_ALL, "br_misp_retired.conditional" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xC5, 0x04, C_ALL, "br_misp_retired.all_branches" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xC5, 0x20, C_ALL, "br_misp_retired.near_taken" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC8, 0x01, C_ALL, "hle_retired.start" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC8, 0x02, C_ALL, "hle_retired.commit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC8, 0x04, C_ALL, "hle_retired.aborted" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xC8, 0x08, C_ALL, "hle_retired.aborted_misc1" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC8, 0x10, C_ALL, "hle_retired.aborted_misc2" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC8, 0x20, C_ALL, "hle_retired.aborted_misc3" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC8, 0x40, C_ALL, "hle_retired.aborted_misc4" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC8, 0x80, C_ALL, "hle_retired.aborted_misc5" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC9, 0x01, C_ALL, "rtm_retired.start" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC9, 0x02, C_ALL, "rtm_retired.commit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC9, 0x04, C_ALL, "rtm_retired.aborted" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xC9, 0x08, C_ALL, "rtm_retired.aborted_misc1" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC9, 0x10, C_ALL, "rtm_retired.aborted_misc2" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC9, 0x20, C_ALL, "rtm_retired.aborted_misc3" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC9, 0x40, C_ALL, "rtm_retired.aborted_misc4" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC9, 0x80, C_ALL, "rtm_retired.aborted_misc5" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xCA, 0x02, C_ALL, "fp_assist.x87_output" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xCA, 0x04, C_ALL, "fp_assist.x87_input" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xCA, 0x08, C_ALL, "fp_assist.simd_output" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xCA, 0x10, C_ALL, "fp_assist.simd_input" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xCA, 0x1E, C_ALL, "fp_assist.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xCC, 0x20, C_ALL, "rob_misc_events.lbr_inserts" , 0x0, ATTR_NONE, 0x0 }, \
+/* { 0xCD, 0x01, C_ALL, "mem_trans_retired.load_latency" , 0x0, ATTR_NONE, 0x3F6 }, omit events requiring MSR programming */ \
+{ 0xD0, 0x11, C_ALL, "mem_uops_retired.stlb_miss_loads" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xD0, 0x12, C_ALL, "mem_uops_retired.stlb_miss_stores" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xD0, 0x21, C_ALL, "mem_uops_retired.lock_loads" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xD0, 0x22, C_ALL, "mem_uops_retired.lock_stores" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xD0, 0x41, C_ALL, "mem_uops_retired.split_loads" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xD0, 0x42, C_ALL, "mem_uops_retired.split_stores" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xD0, 0x81, C_ALL, "mem_uops_retired.all_loads" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xD0, 0x82, C_ALL, "mem_uops_retired.all_stores" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xD1, 0x01, C_ALL, "mem_load_uops_retired.l1_hit" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xD1, 0x02, C_ALL, "mem_load_uops_retired.l2_hit" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xD1, 0x04, C_ALL, "mem_load_uops_retired.l3_hit" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xD1, 0x08, C_ALL, "mem_load_uops_retired.l1_miss" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xD1, 0x10, C_ALL, "mem_load_uops_retired.l2_miss" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xD1, 0x20, C_ALL, "mem_load_uops_retired.l3_miss" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xD1, 0x40, C_ALL, "mem_load_uops_retired.hit_lfb" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xD2, 0x01, C_ALL, "mem_load_uops_l3_hit_retired.xsnp_miss" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xD2, 0x02, C_ALL, "mem_load_uops_l3_hit_retired.xsnp_hit" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xD2, 0x04, C_ALL, "mem_load_uops_l3_hit_retired.xsnp_hitm" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xD2, 0x08, C_ALL, "mem_load_uops_l3_hit_retired.xsnp_none" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xD3, 0x01, C_ALL, "mem_load_uops_l3_miss_retired.local_dram" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xE6, 0x1F, C_ALL, "baclears.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF0, 0x01, C_ALL, "l2_trans.demand_data_rd" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF0, 0x02, C_ALL, "l2_trans.rfo" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF0, 0x04, C_ALL, "l2_trans.code_rd" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF0, 0x08, C_ALL, "l2_trans.all_pf" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF0, 0x10, C_ALL, "l2_trans.l1d_wb" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF0, 0x20, C_ALL, "l2_trans.l2_fill" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF0, 0x40, C_ALL, "l2_trans.l2_wb" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF0, 0x80, C_ALL, "l2_trans.all_requests" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF1, 0x01, C_ALL, "l2_lines_in.i" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF1, 0x02, C_ALL, "l2_lines_in.s" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF1, 0x04, C_ALL, "l2_lines_in.e" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF1, 0x07, C_ALL, "l2_lines_in.all" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF2, 0x05, C_ALL, "l2_lines_out.demand_clean" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF2, 0x06, C_ALL, "l2_lines_out.demand_dirty" , 0x0, ATTR_NONE, 0x0 }, \
+/* end of #define */
+
+/* Intel Broadwell Processor */
+/*
+ * This table is essentially taken from:
+ * https://grok.cz.oracle.com/source/xref/on12-clone/usr/src/uts/intel/pcbe/bdw_pcbe_tbl.c
+ */
+
+#define EVENTS_FAM6_MOD61 \
+{ 0x03, 0x02, C_ALL, "ld_blocks.store_forward" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x03, 0x08, C_ALL, "ld_blocks.no_sr" , 0x0, ATTR_NONE, 0x0 }, \
+ \
+{ 0x05, 0x01, C_ALL, "misalign_mem_ref.loads" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x05, 0x02, C_ALL, "misalign_mem_ref.stores" , 0x0, ATTR_NONE, 0x0 }, \
+ \
+{ 0x07, 0x01, C_ALL, "ld_blocks_partial.address_alias" , 0x0, ATTR_NONE, 0x0 }, \
+ \
+{ 0x08, 0x01, C_ALL, "dtlb_load_misses.miss_causes_a_walk" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x08, 0x02, C_ALL, "dtlb_load_misses.walk_completed_4k" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x08, 0x04, C_ALL, "dtlb_load_misses.walk_completed_2m_4m" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x08, 0x0E, C_ALL, "dtlb_load_misses.walk_completed" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x08, 0x10, C_ALL, "dtlb_load_misses.walk_duration" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x08, 0x20, C_ALL, "dtlb_load_misses.stlb_hit_4k" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x08, 0x40, C_ALL, "dtlb_load_misses.stlb_hit_2m" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x08, 0x60, C_ALL, "dtlb_load_misses.stlb_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x08, 0x80, C_ALL, "dtlb_load_misses.pde_cache_miss" , 0x0, ATTR_NONE, 0x0 }, \
+ \
+{ 0x0D, 0x03, C_ALL, "int_misc.recovery_cycles" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0x0D, 0x03, C_ALL, "int_misc.recovery_cycles_any" , 0x1, ATTR_ANY , 0x0 }, \
+/* Private event, not public by Intel */ \
+{ 0x0D, 0x03, C_ALL, "int_misc.recovery_cycles_occurrences" , 0x1, ATTR_EDGE, 0x0 }, \
+{ 0x0D, 0x08, C_ALL, "int_misc.rat_stall_cycles" , 0x0, ATTR_NONE, 0x0 }, \
+ \
+{ 0x0E, 0x01, C_ALL, "uops_issued.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x0E, 0x10, C_ALL, "uops_issued.flags_merge" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x0E, 0x20, C_ALL, "uops_issued.slow_lea" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x0E, 0x40, C_ALL, "uops_issued.single_mul" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x0E, 0x01, C_ALL, "uops_issued.stall_cycles" , 0x1, ATTR_INV , 0x0 }, \
+{ 0x0E, 0x01, C_ALL, "uops_issued.core_stall_cycles" , 0x1,(ATTR_INV | ATTR_ANY), 0x0 }, \
+ \
+{ 0x14, 0x01, C_ALL, "arith.fpu_div_active" , 0x0, ATTR_NONE, 0x0 }, \
+ \
+{ 0x24, 0x21, C_ALL, "l2_rqsts.demand_data_rd_miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x41, C_ALL, "l2_rqsts.demand_data_rd_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x30, C_ALL, "l2_rqsts.l2_pf_miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x50, C_ALL, "l2_rqsts.l2_pf_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0xE1, C_ALL, "l2_rqsts.all_demand_data_rd" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0xE2, C_ALL, "l2_rqsts.all_rfo" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0xE4, C_ALL, "l2_rqsts.all_code_rd" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0xF8, C_ALL, "l2_rqsts.all_pf" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x42, C_ALL, "l2_rqsts.rfo_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x22, C_ALL, "l2_rqsts.rfo_miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x44, C_ALL, "l2_rqsts.code_rd_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x24, C_ALL, "l2_rqsts.code_rd_miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x27, C_ALL, "l2_rqsts.all_demand_miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0xE7, C_ALL, "l2_rqsts.all_demand_references" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x3F, C_ALL, "l2_rqsts.miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0xFF, C_ALL, "l2_rqsts.references" , 0x0, ATTR_NONE, 0x0 }, \
+ \
+{ 0x27, 0x50, C_ALL, "l2_demand_rqsts.wb_hit" , 0x0, ATTR_NONE, 0x0 }, \
+ \
+{ 0x3C, 0x00, C_ALL, "cpu_clk_unhalted.thread_p" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x3C, 0x00, C_ALL, "cpu_clk_unhalted.thread_p_any" , 0x0, ATTR_ANY , 0x0 }, \
+{ 0x3C, 0x01, C_ALL, "cpu_clk_thread_unhalted.ref_xclk" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x3C, 0x01, C_ALL, "cpu_clk_thread_unhalted.ref_xclk_any" , 0x0, ATTR_ANY , 0x0 }, \
+{ 0x3C, 0x02, C_ALL, "cpu_clk_thread_unhalted.one_thread_active" , 0x0, ATTR_NONE, 0x0 }, \
+ \
+{ 0x48, 0x01, C(2) , "l1d_pend_miss.pending" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x48, 0x01, C(2) , "l1d_pend_miss.pending_cycles" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0x48, 0x01, C(2) , "l1d_pend_miss.pending_cycles_any" , 0x1, ATTR_ANY , 0x0 }, \
+/* Private event, not public by Intel */ \
+{ 0x48, 0x01, C(2) , "l1d_pend_miss.occurences" , 0x1, ATTR_EDGE, 0x0 }, \
+{ 0x48, 0x02, C_ALL, "l1d_pend_miss.fb_full" , 0x1, ATTR_NONE, 0x0 }, \
+ \
+{ 0x49, 0x01, C_ALL, "dtlb_store_misses.miss_causes_a_walk" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x49, 0x02, C_ALL, "dtlb_store_misses.walk_completed_4k" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x49, 0x04, C_ALL, "dtlb_store_misses.walk_completed_2m_4m" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x49, 0x0E, C_ALL, "dtlb_store_misses.walk_completed" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x49, 0x10, C_ALL, "dtlb_store_misses.walk_duration" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x49, 0x20, C_ALL, "dtlb_store_misses.stlb_hit_4k" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x49, 0x40, C_ALL, "dtlb_store_misses.stlb_hit_2m" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x49, 0x60, C_ALL, "dtlb_store_misses.stlb_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x49, 0x80, C_ALL, "dtlb_store_misses.pde_cache_miss" , 0x0, ATTR_NONE, 0x0 }, \
+ \
+{ 0x4C, 0x01, C_ALL, "load_hit_pre.sw_pf" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x4C, 0x02, C_ALL, "load_hit_pre.hw_pf" , 0x0, ATTR_NONE, 0x0 }, \
+ \
+{ 0x4F, 0x10, C_ALL, "ept.walk_cycles" , 0x0, ATTR_NONE, 0x0 }, \
+ \
+{ 0x51, 0x01, C_ALL, "l1d.replacement" , 0x0, ATTR_NONE, 0x0 }, \
+ \
+{ 0x54, 0x01, C_ALL, "tx_mem.abort_conflict" , 0x0, ATTR_TSX , 0x0 }, \
+{ 0x54, 0x02, C_ALL, "tx_mem.abort_capacity_write" , 0x0, ATTR_TSX , 0x0 }, \
+{ 0x54, 0x04, C_ALL, "tx_mem.abort_hle_store_to_elided_lock" , 0x0, ATTR_TSX , 0x0 }, \
+{ 0x54, 0x08, C_ALL, "tx_mem.abort_hle_elision_buffer_not_empty" , 0x0, ATTR_TSX , 0x0 }, \
+{ 0x54, 0x10, C_ALL, "tx_mem.abort_hle_elision_buffer_mismatch" , 0x0, ATTR_TSX , 0x0 }, \
+{ 0x54, 0x20, C_ALL, "tx_mem.abort_hle_elision_buffer_unsupported_alignment" , 0x0, ATTR_TSX , 0x0 }, \
+{ 0x54, 0x40, C_ALL, "tx_mem.hle_elision_buffer_full" , 0x0, ATTR_TSX , 0x0 }, \
+ \
+{ 0x58, 0x01, C_ALL, "move_elimination.int_eliminated" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x58, 0x02, C_ALL, "move_elimination.simd_eliminated" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x58, 0x04, C_ALL, "move_elimination.int_not_eliminated" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x58, 0x08, C_ALL, "move_elimination.simd_not_eliminated" , 0x0, ATTR_NONE, 0x0 }, \
+ \
+{ 0x5C, 0x01, C_ALL, "cpl_cycles.ring0" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x5C, 0x01, C_ALL, "cpl_cycles.ring0_trans" , 0x1, ATTR_EDGE, 0x0 }, \
+{ 0x5C, 0x02, C_ALL, "cpl_cycles.ring123" , 0x0, ATTR_NONE, 0x0 }, \
+ \
+{ 0x5D, 0x01, C_ALL, "tx_exec.misc1" , 0x0, ATTR_TSX , 0x0 }, \
+{ 0x5D, 0x02, C_ALL, "tx_exec.misc2" , 0x0, ATTR_TSX , 0x0 }, \
+{ 0x5D, 0x04, C_ALL, "tx_exec.misc3" , 0x0, ATTR_TSX , 0x0 }, \
+{ 0x5D, 0x08, C_ALL, "tx_exec.misc4" , 0x0, ATTR_TSX , 0x0 }, \
+{ 0x5D, 0x10, C_ALL, "tx_exec.misc5" , 0x0, ATTR_TSX , 0x0 }, \
+ \
+{ 0x5E, 0x01, C_ALL, "rs_events.empty_cycles" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x5E, 0x01, C_ALL, "rs_events.empty_end" , 0x1, (ATTR_INV | ATTR_EDGE), 0x0 }, \
+ \
+{ 0x60, 0x01, C_ALL, "offcore_requests_outstanding.demand_data_rd" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x60, 0x01, C_ALL, "offcore_requests_outstanding.cycles_with_demand_data_rd", 0x1, ATTR_NONE, 0x0 }, \
+{ 0x60, 0x01, C_ALL, "offcore_requests_outstanding.demand_data_rd_ge_6 " , 0x6, ATTR_NONE, 0x0 }, \
+{ 0x60, 0x02, C_ALL, "offcore_requests_outstanding.demand_code_rd" , 0x0, ATTR_NONE, 0x0 }, \
+/* Private event, not public by Intel */ \
+{ 0x60, 0x02, C_ALL, "offcore_requests_outstanding.demand_code_rd_cycles", 0x1, ATTR_NONE, 0x0 }, \
+{ 0x60, 0x04, C_ALL, "offcore_requests_outstanding.demand_rfo" , 0x0, ATTR_NONE, 0x0 }, \
+/* Private event, not public by Intel */ \
+{ 0x60, 0x04, C_ALL, "offcore_requests_outstanding.demand_rfo_cycles" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0x60, 0x08, C_ALL, "offcore_requests_outstanding.all_data_rd" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x60, 0x08, C_ALL, "offcore_requests_outstanding.cycles_with_data_rd" , 0x1, ATTR_NONE, 0x0 }, \
+ \
+{ 0x63, 0x01, C_ALL, "lock_cycles.split_lock_uc_lock_duration" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x63, 0x02, C_ALL, "lock_cycles.cache_lock_duration" , 0x0, ATTR_NONE, 0x0 }, \
+ \
+{ 0x79, 0x02, C_ALL, "idq.empty" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x04, C_ALL, "idq.mite_uops" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x04, C_ALL, "idq.mite_cycles" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x08, C_ALL, "idq.dsb_uops" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x08, C_ALL, "idq.dsb_cycles" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x10, C_ALL, "idq.ms_dsb_uops" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x10, C_ALL, "idq.ms_dsb_cycles" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x10, C_ALL, "idq.ms_dsb_occur" , 0x1, ATTR_EDGE, 0x0 }, \
+{ 0x79, 0x18, C_ALL, "idq.all_dsb_cycles_4_uops" , 0x4, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x18, C_ALL, "idq.all_dsb_cycles_any_uops" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x20, C_ALL, "idq.ms_mite_uops" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x24, C_ALL, "idq.all_mite_cycles_4_uops" , 0x4, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x24, C_ALL, "idq.all_mite_cycles_any_uops" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x30, C_ALL, "idq.ms_uops" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x30, C_ALL, "idq.ms_cycles" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x30, C_ALL, "idq.ms_switches" , 0x1, ATTR_EDGE, 0x0 }, \
+{ 0x79, 0x3C, C_ALL, "idq.mite_all_uops" , 0x0, ATTR_NONE, 0x0 }, \
+ \
+{ 0x80, 0x01, C_ALL, "icache.hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x80, 0x02, C_ALL, "icache.misses" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x80, 0x04, C_ALL, "icache.ifdata_stall" , 0x0, ATTR_NONE, 0x0 }, \
+ \
+{ 0x85, 0x01, C_ALL, "itlb_misses.miss_causes_a_walk" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x85, 0x02, C_ALL, "itlb_misses.walk_completed_4k" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x85, 0x04, C_ALL, "itlb_misses.walk_completed_2m_4m" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x85, 0x0E, C_ALL, "itlb_misses.walk_completed" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x85, 0x10, C_ALL, "itlb_misses.walk_duration" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x85, 0x20, C_ALL, "itlb_misses.stlb_hit_4k" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x85, 0x40, C_ALL, "itlb_misses.stlb_hit_2m" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x85, 0x60, C_ALL, "itlb_misses.stlb_hit" , 0x0, ATTR_NONE, 0x0 }, \
+ \
+{ 0x87, 0x01, C_ALL, "ild_stall.lcp" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x87, 0x04, C_ALL, "ild_stall.iq_full" , 0x0, ATTR_NONE, 0x0 }, \
+ \
+{ 0x88, 0x41, C_ALL, "br_inst_exec.nontaken_conditional" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x88, 0x81, C_ALL, "br_inst_exec.taken_conditional" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x88, 0x82, C_ALL, "br_inst_exec.taken_direct_jump" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x88, 0x84, C_ALL, "br_inst_exec.taken_indirect_jump_non_call_ret" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x88, 0x88, C_ALL, "br_inst_exec.taken_indirect_near_return" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x88, 0x90, C_ALL, "br_inst_exec.taken_direct_near_call" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x88, 0xA0, C_ALL, "br_inst_exec.taken_indirect_near_call" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x88, 0xC1, C_ALL, "br_inst_exec.all_conditional" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x88, 0xC2, C_ALL, "br_inst_exec.all_direct_jmp" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x88, 0xC4, C_ALL, "br_inst_exec.all_indirect_jump_non_call_ret" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x88, 0xC8, C_ALL, "br_inst_exec.all_indirect_near_return" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x88, 0xD0, C_ALL, "br_inst_exec.all_direct_near_call" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x88, 0xFF, C_ALL, "br_inst_exec.all_branches" , 0x0, ATTR_NONE, 0x0 }, \
+ \
+{ 0x89, 0x41, C_ALL, "br_misp_exec.nontaken_conditional" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x89, 0x81, C_ALL, "br_misp_exec.taken_conditional" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x89, 0x84, C_ALL, "br_misp_exec.taken_indirect_jump_non_call_ret" , 0x0, ATTR_NONE, 0x0 }, \
+/* Private event, not public by Intel */ \
+{ 0x89, 0x88, C_ALL, "br_misp_exec.taken_return_near" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x89, 0xC1, C_ALL, "br_misp_exec.all_conditional" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x89, 0xC4, C_ALL, "br_misp_exec.all_indirect_jump_non_call_ret" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x89, 0xA0, C_ALL, "br_misp_exec.taken_indirect_near_call" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x89, 0xFF, C_ALL, "br_misp_exec.all_branches" , 0x0, ATTR_NONE, 0x0 }, \
+ \
+/* Use Cmask to qualify uop b/w */ \
+{ 0x9C, 0x01, C_ALL, "idq_uops_not_delivered.core" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x9C, 0x01, C_ALL, "idq_uops_not_delivered.cycles_0_uops_deliv.core" , 0x4, ATTR_NONE, 0x0 }, \
+{ 0x9C, 0x01, C_ALL, "idq_uops_not_delivered.cycles_le_1_uop_deliv.core" , 0x3, ATTR_NONE, 0x0 }, \
+{ 0x9C, 0x01, C_ALL, "idq_uops_not_delivered.cycles_le_2_uop_deliv.core" , 0x2, ATTR_NONE, 0x0 }, \
+{ 0x9C, 0x01, C_ALL, "idq_uops_not_delivered.cycles_le_3_uop_deliv.core" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0x9C, 0x01, C_ALL, "idq_uops_not_delivered.cycles_fe_was_ok" , 0x1, ATTR_INV , 0x0 }, \
+ \
+{ 0xA0, 0x03, C_ALL, "uop_dispatches_cancelled.simd_prf" , 0x0, ATTR_NONE, 0x0 }, \
+ \
+{ 0xA1, 0x01, C_ALL, "uops_executed_port.port_0" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA1, 0x02, C_ALL, "uops_executed_port.port_1" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA1, 0x04, C_ALL, "uops_executed_port.port_2" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA1, 0x08, C_ALL, "uops_executed_port.port_3" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA1, 0x10, C_ALL, "uops_executed_port.port_4" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA1, 0x20, C_ALL, "uops_executed_port.port_5" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA1, 0x40, C_ALL, "uops_executed_port.port_6" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA1, 0x80, C_ALL, "uops_executed_port.port_7" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA1, 0x01, C_ALL, "uops_executed_port.port_0_core" , 0x0, ATTR_ANY , 0x0 }, \
+{ 0xA1, 0x02, C_ALL, "uops_executed_port.port_1_core" , 0x0, ATTR_ANY , 0x0 }, \
+{ 0xA1, 0x04, C_ALL, "uops_executed_port.port_2_core" , 0x0, ATTR_ANY , 0x0 }, \
+{ 0xA1, 0x08, C_ALL, "uops_executed_port.port_3_core" , 0x0, ATTR_ANY , 0x0 }, \
+{ 0xA1, 0x10, C_ALL, "uops_executed_port.port_4_core" , 0x0, ATTR_ANY , 0x0 }, \
+{ 0xA1, 0x20, C_ALL, "uops_executed_port.port_5_core" , 0x0, ATTR_ANY , 0x0 }, \
+{ 0xA1, 0x40, C_ALL, "uops_executed_port.port_6_core" , 0x0, ATTR_ANY , 0x0 }, \
+{ 0xA1, 0x80, C_ALL, "uops_executed_port.port_7_core" , 0x0, ATTR_ANY , 0x0 }, \
+ \
+{ 0xA2, 0x01, C_ALL, "resource_stalls.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA2, 0x04, C_ALL, "resource_stalls.rs" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA2, 0x08, C_ALL, "resource_stalls.sb" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA2, 0x10, C_ALL, "resource_stalls.rob" , 0x0, ATTR_NONE, 0x0 }, \
+ \
+{ 0xA3, 0x01, C_ALL, "cycle_activity.cycles_l2_pending" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0xA3, 0x02, C_ALL, "cycle_activity.cycles_ldm_pending" , 0x2, ATTR_NONE, 0x0 }, \
+{ 0xA3, 0x04, C_ALL, "cycle_activity.cycles_no_execute" , 0x4, ATTR_NONE, 0x0 }, \
+{ 0xA3, 0x05, C_ALL, "cycle_activity.stalls_l2_pending" , 0x5, ATTR_NONE, 0x0 }, \
+{ 0xA3, 0x06, C_ALL, "cycle_activity.stalls_ldm_pending" , 0x6, ATTR_NONE, 0x0 }, \
+{ 0xA3, 0x08, C(2) , "cycle_activity.cycles_l1d_pending" , 0x8, ATTR_NONE, 0x0 }, \
+{ 0xA3, 0x0C, C(2) , "cycle_activity.stalls_l1d_pending" , 0xC, ATTR_NONE, 0x0 }, \
+ \
+{ 0xA8, 0x01, C_ALL, "lsd.uops" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA8, 0x01, C_ALL, "lsd.cycles_active" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0xA8, 0x01, C_ALL, "lsd.cycles_4_uops" , 0x4, ATTR_NONE, 0x0 }, \
+ \
+{ 0xAB, 0x02, C_ALL, "dsb2mite_switches.penalty_cycles" , 0x0, ATTR_NONE, 0x0 }, \
+ \
+{ 0xAE, 0x01, C_ALL, "itlb.itlb_flush" , 0x0, ATTR_NONE, 0x0 }, \
+ \
+{ 0xB0, 0x01, C_ALL, "offcore_requests.demand_data_rd" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB0, 0x02, C_ALL, "offcore_requests.demand_code_rd" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB0, 0x04, C_ALL, "offcore_requests.demand_rfo" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB0, 0x08, C_ALL, "offcore_requests.all_data_rd" , 0x0, ATTR_NONE, 0x0 }, \
+ \
+{ 0xB1, 0x01, C_ALL, "uops_executed.thread" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB1, 0x01, C_ALL, "uops_executed.stall_cycles" , 0x1, ATTR_INV , 0x0 }, \
+{ 0xB1, 0x01, C_ALL, "uops_executed.cycles_ge_1_uop_exec" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0xB1, 0x01, C_ALL, "uops_executed.cycles_ge_2_uops_exec" , 0x2, ATTR_NONE, 0x0 }, \
+{ 0xB1, 0x01, C_ALL, "uops_executed.cycles_ge_3_uops_exec" , 0x3, ATTR_NONE, 0x0 }, \
+{ 0xB1, 0x01, C_ALL, "uops_executed.cycles_ge_4_uops_exec" , 0x4, ATTR_NONE, 0x0 }, \
+{ 0xB1, 0x02, C_ALL, "uops_executed.core" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB1, 0x02, C_ALL, "uops_executed.core_cycles_none" , 0x0, ATTR_INV , 0x0 }, \
+{ 0xB1, 0x02, C_ALL, "uops_executed.core_cycles_ge_1" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0xB1, 0x02, C_ALL, "uops_executed.core_cycles_ge_2" , 0x2, ATTR_NONE, 0x0 }, \
+{ 0xB1, 0x02, C_ALL, "uops_executed.core_cycles_ge_3" , 0x3, ATTR_NONE, 0x0 }, \
+{ 0xB1, 0x02, C_ALL, "uops_executed.core_cycles_ge_4" , 0x4, ATTR_NONE, 0x0 }, \
+ \
+{ 0xB2, 0x01, C_ALL, "offcore_requests_buffer.sq_full" , 0x0, ATTR_NONE, 0x0 }, \
+ \
+/* \
+ * See Section "Off-core Response Performance Monitoring" \
+ * \
+ * Though these two off_core events support all counters, only 1 of \
+ * them can be used at any given time. This is due to the extra MSR \
+ * programming required. \
+ */ \
+/* { 0xB7, 0x01, C_ALL, "offcore_response_0" , 0x0, ATTR_NONE, OFFCORE_RSP_0 }, omit events requiring MSR programming */ \
+/* { 0xBB, 0x01, C_ALL, "offcore_response_1" , 0x0, ATTR_NONE, OFFCORE_RSP_1 }, omit events requiring MSR programming */ \
+ \
+{ 0xBC, 0x11, C_ALL, "page_walker_loads.dtlb_l1" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xBC, 0x21, C_ALL, "page_walker_loads.itlb_l1" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xBC, 0x12, C_ALL, "page_walker_loads.dtlb_l2" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xBC, 0x22, C_ALL, "page_walker_loads.itlb_l2" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xBC, 0x14, C_ALL, "page_walker_loads.dtlb_l3" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xBC, 0x24, C_ALL, "page_walker_loads.itlb_l3" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xBC, 0x18, C_ALL, "page_walker_loads.dtlb_memory" , 0x0, ATTR_NONE, 0x0 }, \
+/* itlb_memory is not in the Intel SDM or spreadsheet for Broadwell; "cputrack -h" does have it though */ \
+{ 0xBC, 0x28, C_ALL, "page_walker_loads.itlb_memory" , 0x0, ATTR_NONE, 0x0 }, \
+ \
+{ 0xBD, 0x01, C_ALL, "tlb_flush.dtlb_thread" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xBD, 0x20, C_ALL, "tlb_flush.stlb_any" , 0x0, ATTR_NONE, 0x0 }, \
+ \
+{ 0xC0, 0x00, C_ALL, "inst_retired.any_p" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC0, 0x02, C_ALL, "inst_retired.x87" , 0x0, ATTR_NONE, 0x0 }, \
+ \
+{ 0xC1, 0x08, C_ALL, "other_assists.avx_to_sse" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC1, 0x10, C_ALL, "other_assists.sse_to_avx" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC1, 0x40, C_ALL, "other_assists.any_wb_assist" , 0x0, ATTR_NONE, 0x0 }, \
+ \
+{ 0xC2, 0x01, C_ALL, "uops_retired.all" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xC2, 0x01, C_ALL, "uops_retired.stall_cycles" , 0x1, ATTR_INV , 0x0 }, \
+{ 0xC2, 0x01, C_ALL, "uops_retired.total_cycles" , 0xA, ATTR_INV , 0x0 }, \
+{ 0xC2, 0x01, C_ALL, "uops_retired.core_stall_cycles" , 0x1, (ATTR_INV | ATTR_ANY), 0x0 }, \
+{ 0xC2, 0x02, C_ALL, "uops_retired.retire_slots" , 0x0, ATTR_PEBS, 0x0 }, \
+ \
+{ 0xC3, 0x01, C_ALL, "machine_clears.cycles" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC3, 0x01, C_ALL, "machine_clears.count" , 0x1, ATTR_EDGE, 0x0 }, \
+{ 0xC3, 0x02, C_ALL, "machine_clears.memory_ordering" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC3, 0x04, C_ALL, "machine_clears.smc" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC3, 0x20, C_ALL, "machine_clears.maskmov" , 0x0, ATTR_NONE, 0x0 }, \
+ \
+{ 0xC4, 0x01, C_ALL, "br_inst_retired.conditional" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xC4, 0x02, C_ALL, "br_inst_retired.near_call" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xC4, 0x08, C_ALL, "br_inst_retired.near_return" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xC4, 0x10, C_ALL, "br_inst_retired.not_taken" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC4, 0x20, C_ALL, "br_inst_retired.near_taken" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xC4, 0x40, C_ALL, "br_inst_retired.far_branch" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC4, 0x02, C_ALL, "br_inst_retired.near_call_r3" , 0x0, ATTR_PEBS, 0x0 }, \
+ \
+{ 0xC5, 0x01, C_ALL, "br_misp_retired.conditional" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xC5, 0x20, C_ALL, "br_misp_retired.near_taken" , 0x0, ATTR_PEBS, 0x0 }, \
+ \
+{ 0xC7, 0x01, C_ALL, "fp_arith_inst_retired.scalar_double" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xC7, 0x02, C_ALL, "fp_arith_inst_retired.scalar_single" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xC7, 0x03, C_ALL, "fp_arith_inst_retired.scalar" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xC7, 0x04, C_ALL, "fp_arith_inst_retired.128b_packed_double" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xC7, 0x08, C_ALL, "fp_arith_inst_retired.128b_packed_single" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xC7, 0x10, C_ALL, "fp_arith_inst_retired.256b_packed_double" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xC7, 0x15, C_ALL, "fp_arith_inst_retired.double" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xC7, 0x20, C_ALL, "fp_arith_inst_retired.256b_packed_single" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xC7, 0x2A, C_ALL, "fp_arith_inst_retired.single" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xC7, 0x3C, C_ALL, "fp_arith_inst_retired.packed" , 0x0, ATTR_PEBS, 0x0 }, \
+ \
+{ 0xC8, 0x01, C_ALL, "hle_retired.start" , 0x0, ATTR_TSX , 0x0 }, \
+{ 0xC8, 0x02, C_ALL, "hle_retired.commit" , 0x0, ATTR_TSX , 0x0 }, \
+{ 0xC8, 0x04, C_ALL, "hle_retired.aborted" , 0x0, ATTR_PEBS | ATTR_TSX, 0x0 }, \
+{ 0xC8, 0x08, C_ALL, "hle_retired.aborted_misc1" , 0x0, ATTR_TSX , 0x0 }, \
+{ 0xC8, 0x10, C_ALL, "hle_retired.aborted_misc2" , 0x0, ATTR_TSX , 0x0 }, \
+{ 0xC8, 0x20, C_ALL, "hle_retired.aborted_misc3" , 0x0, ATTR_TSX , 0x0 }, \
+{ 0xC8, 0x40, C_ALL, "hle_retired.aborted_misc4" , 0x0, ATTR_TSX , 0x0 }, \
+{ 0xC8, 0x80, C_ALL, "hle_retired.aborted_misc5" , 0x0, ATTR_TSX , 0x0 }, \
+ \
+{ 0xC9, 0x01, C_ALL, "rtm_retired.start" , 0x0, ATTR_TSX , 0x0 }, \
+{ 0xC9, 0x02, C_ALL, "rtm_retired.commit" , 0x0, ATTR_TSX , 0x0 }, \
+{ 0xC9, 0x04, C_ALL, "rtm_retired.aborted" , 0x0, ATTR_PEBS | ATTR_TSX, 0x0 }, \
+{ 0xC9, 0x08, C_ALL, "rtm_retired.aborted_misc1" , 0x0, ATTR_TSX , 0x0 }, \
+{ 0xC9, 0x10, C_ALL, "rtm_retired.aborted_misc2" , 0x0, ATTR_TSX , 0x0 }, \
+{ 0xC9, 0x20, C_ALL, "rtm_retired.aborted_misc3" , 0x0, ATTR_TSX , 0x0 }, \
+{ 0xC9, 0x40, C_ALL, "rtm_retired.aborted_misc4" , 0x0, ATTR_TSX , 0x0 }, \
+{ 0xC9, 0x80, C_ALL, "rtm_retired.aborted_misc5" , 0x0, ATTR_TSX , 0x0 }, \
+ \
+{ 0xCA, 0x02, C_ALL, "fp_assist.x87_output" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xCA, 0x04, C_ALL, "fp_assist.x87_input" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xCA, 0x08, C_ALL, "fp_assist.simd_output" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xCA, 0x10, C_ALL, "fp_assist.simd_input" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xCA, 0x1E, C_ALL, "fp_assist.any" , 0x1, ATTR_NONE, 0x0 }, \
+ \
+{ 0xCC, 0x20, C_ALL, "rob_misc_events.lbr_inserts" , 0x0, ATTR_NONE, 0x0 }, \
+ \
+/* See Section "MSR_PEBS_LD_LAT_THRESHOLD" */ \
+/* { 0xCD, 0x01, C(3) , "mem_trans_retired.load_latency" , 0x0, ATTR_PEBS_ONLY_LD_LAT, PEBS_LD_LAT_THRESHOLD }, omit events requiring MSR programming */ \
+ \
+/* \
+ * Event 0xD0 must be combined with umasks 0x1(loads) or 0x2(stores) \
+ */ \
+{ 0xD0, 0x11, C_ALL, "mem_uops_retired.stlb_miss_loads" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xD0, 0x12, C_ALL, "mem_uops_retired.stlb_miss_stores" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xD0, 0x21, C_ALL, "mem_uops_retired.lock_loads" , 0x0, ATTR_PEBS, 0x0 }, \
+/* Private event, not public by Intel */ \
+{ 0xD0, 0x22, C_ALL, "mem_uops_retired.lock_stores" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xD0, 0x41, C_ALL, "mem_uops_retired.split_loads" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xD0, 0x42, C_ALL, "mem_uops_retired.split_stores" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xD0, 0x81, C_ALL, "mem_uops_retired.all_loads" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xD0, 0x82, C_ALL, "mem_uops_retired.all_stores" , 0x0, ATTR_PEBS, 0x0 }, \
+ \
+{ 0xD1, 0x01, C_ALL, "mem_load_uops_retired.l1_hit" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xD1, 0x02, C_ALL, "mem_load_uops_retired.l2_hit" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xD1, 0x04, C_ALL, "mem_load_uops_retired.l3_hit" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xD1, 0x08, C_ALL, "mem_load_uops_retired.l1_miss" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xD1, 0x10, C_ALL, "mem_load_uops_retired.l2_miss" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xD1, 0x20, C_ALL, "mem_load_uops_retired.l3_miss" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xD1, 0x40, C_ALL, "mem_load_uops_retired.hit_lfb" , 0x0, ATTR_PEBS, 0x0 }, \
+ \
+{ 0xD2, 0x01, C_ALL, "mem_load_uops_l3_hit_retired.xsnp_miss" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xD2, 0x02, C_ALL, "mem_load_uops_l3_hit_retired.xsnp_hit" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xD2, 0x04, C_ALL, "mem_load_uops_l3_hit_retired.xsnp_hitm" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xD2, 0x08, C_ALL, "mem_load_uops_l3_hit_retired.xsnp_none" , 0x0, ATTR_PEBS, 0x0 }, \
+ \
+{ 0xD3, 0x01, C_ALL, "mem_load_uops_l3_miss_retired.local_dram" , 0x0, ATTR_PEBS, 0x0 }, \
+ \
+/* The mem_load_l4_miss_retired events are not in "cputrack -h" output nor in the Intel spreadsheet. */ \
+/* { 0xD5, 0x01, C_ALL, "mem_load_l4_miss_retired.local_hit" , 0x0, ATTR_NONE, 0x0 }, */ \
+/* { 0xD5, 0x04, C_ALL, "mem_load_l4_miss_retired.local_miss" , 0x0, ATTR_NONE, 0x0 }, */ \
+ \
+{ 0xE6, 0x1F, C_ALL, "baclears.any" , 0x0, ATTR_NONE, 0x0 }, \
+ \
+{ 0xF0, 0x01, C_ALL, "l2_trans.demand_data_rd" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF0, 0x02, C_ALL, "l2_trans.rfo" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF0, 0x04, C_ALL, "l2_trans.code_rd" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF0, 0x08, C_ALL, "l2_trans.all_pf" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF0, 0x10, C_ALL, "l2_trans.l1d_wb" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF0, 0x20, C_ALL, "l2_trans.l2_fill" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF0, 0x40, C_ALL, "l2_trans.l2_wb" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF0, 0x80, C_ALL, "l2_trans.all_requests" , 0x0, ATTR_NONE, 0x0 }, \
+ \
+{ 0xF1, 0x01, C_ALL, "l2_lines_in.i" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF1, 0x02, C_ALL, "l2_lines_in.s" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF1, 0x04, C_ALL, "l2_lines_in.e" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF1, 0x07, C_ALL, "l2_lines_in.all" , 0x0, ATTR_NONE, 0x0 }, \
+ \
+{ 0xF2, 0x05, C_ALL, "l2_lines_out.demand_clean" , 0x0, ATTR_NONE, 0x0 }, \
+/* end of #define */
+
+
+/* Intel Skylake Processor */
+/*
+ * This table is essentially taken from:
+ * https://grok.cz.oracle.com/source/xref/on12-clone/usr/src/uts/intel/pcbe/skl_pcbe_tbl.c
+ * Also:
+ * https://grok.cz.oracle.com/source/xref/on12-clone/usr/src/uts/intel/pcbe/fam6_pcbe.h
+ * { 0xc0, 0x00, C_ALL, "inst_retired.any_p" }, \
+ * { 0x3c, 0x01, C_ALL, "cpu_clk_unhalted.ref_p" }, \
+ * { 0x2e, 0x4f, C_ALL, "longest_lat_cache.reference" }, \
+ * { 0x2e, 0x41, C_ALL, "longest_lat_cache.miss" }, \
+ * { 0xc4, 0x00, C_ALL, "br_inst_retired.all_branches" }, \
+ * { 0xc5, 0x00, C_ALL, "br_misp_retired.all_branches" }
+ * And:
+ * https://grok.cz.oracle.com/source/xref/on12-clone/usr/src/uts/intel/pcbe/core_pcbe.c
+ * { 0x3c, 0x00, C_ALL, "cpu_clk_unhalted.core" },
+ * { 0x3c, 0x00, C_ALL, "cpu_clk_unhalted.thread_p" },
+ */
+#define EVENTS_FAM6_MOD78 \
+{ 0x03, 0x02, C_ALL, "ld_blocks.store_forward" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x03, 0x08, C_ALL, "ld_blocks.no_sr" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x07, 0x01, C_ALL, "ld_blocks_partial.address_alias" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x08, 0x01, C_ALL, "dtlb_load_misses.miss_causes_a_walk" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x08, 0x02, C_ALL, "dtlb_load_misses.walk_completed_4k" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x08, 0x04, C_ALL, "dtlb_load_misses.walk_completed_2m_4m" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x08, 0x08, C_ALL, "dtlb_load_misses.walk_completed_1g" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x08, 0x0E, C_ALL, "dtlb_load_misses.walk_completed" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x08, 0x10, C_ALL, "dtlb_load_misses.walk_pending" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x08, 0x10, C_ALL, "dtlb_load_misses.walk_active" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0x08, 0x20, C_ALL, "dtlb_load_misses.stlb_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x0D, 0x01, C_ALL, "int_misc.recovery_cycles" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x0D, 0x01, C_ALL, "int_misc.recovery_cycles_any" , 0x0, ATTR_ANY, 0x0 }, \
+{ 0x0D, 0x80, C_ALL, "int_misc.clear_resteer_cycles" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x0E, 0x01, C_ALL, "uops_issued.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x0E, 0x01, C_ALL, "uops_issued.stall_cycles" , 0x1, ATTR_INV, 0x0 }, \
+{ 0x0E, 0x02, C_ALL, "uops_issued.vector_width_mismatch" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x0E, 0x20, C_ALL, "uops_issued.slow_lea" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x14, 0x01, C_ALL, "arith.divider_active" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x21, C_ALL, "l2_rqsts.demand_data_rd_miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x22, C_ALL, "l2_rqsts.rfo_miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x24, C_ALL, "l2_rqsts.code_rd_miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x27, C_ALL, "l2_rqsts.all_demand_miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x38, C_ALL, "l2_rqsts.pf_miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x3F, C_ALL, "l2_rqsts.miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x41, C_ALL, "l2_rqsts.demand_data_rd_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x42, C_ALL, "l2_rqsts.rfo_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0x44, C_ALL, "l2_rqsts.code_rd_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0xD8, C_ALL, "l2_rqsts.pf_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0xE1, C_ALL, "l2_rqsts.all_demand_data_rd" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0xE2, C_ALL, "l2_rqsts.all_rfo" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0xE4, C_ALL, "l2_rqsts.all_code_rd" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0xE7, C_ALL, "l2_rqsts.all_demand_references" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0xF8, C_ALL, "l2_rqsts.all_pf" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x24, 0xFF, C_ALL, "l2_rqsts.references" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x2e, 0x4f, C_ALL, "longest_lat_cache.reference" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x2e, 0x41, C_ALL, "longest_lat_cache.miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x3c, 0x00, C_ALL, "cpu_clk_unhalted.thread_p" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x3C, 0x00, C_ALL, "cpu_clk_unhalted.thread_p_any" , 0x0, ATTR_ANY, 0x0 }, \
+{ 0x3C, 0x00, C_ALL, "cpu_clk_unhalted.ring0_trans" , 0x1, ATTR_EDGE, 0x0 }, \
+{ 0x3C, 0x01, C_ALL, "cpu_clk_unhalted.ref_p" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x3C, 0x01, C_ALL, "cpu_clk_thread_unhalted.ref_xclk" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x3C, 0x01, C_ALL, "cpu_clk_thread_unhalted.ref_xclk_any" , 0x0, ATTR_ANY, 0x0 }, \
+{ 0x3C, 0x02, C_ALL, "cpu_clk_thread_unhalted.one_thread_active" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x48, 0x01, C_ALL, "l1d_pend_miss.pending" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x48, 0x01, C_ALL, "l1d_pend_miss.pending_cycles" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0x48, 0x01, C_ALL, "l1d_pend_miss.pending_cycles_any" , 0x1, ATTR_ANY, 0x0 }, \
+{ 0x48, 0x02, C_ALL, "l1d_pend_miss.fb_full" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x49, 0x01, C_ALL, "dtlb_store_misses.miss_causes_a_walk" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x49, 0x02, C_ALL, "dtlb_store_misses.walk_completed_4k" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x49, 0x04, C_ALL, "dtlb_store_misses.walk_completed_2m_4m" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x49, 0x08, C_ALL, "dtlb_store_misses.walk_completed_1g" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x49, 0x0E, C_ALL, "dtlb_store_misses.walk_completed" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x49, 0x10, C_ALL, "dtlb_store_misses.walk_pending" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x49, 0x10, C_ALL, "dtlb_store_misses.walk_active" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0x49, 0x20, C_ALL, "dtlb_store_misses.stlb_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x4C, 0x01, C_ALL, "load_hit_pre.sw_pf" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x4F, 0x10, C_ALL, "ept.walk_pending" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x51, 0x01, C_ALL, "l1d.replacement" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x54, 0x01, C_ALL, "tx_mem.abort_conflict" , 0x0, ATTR_TSX, 0x0 }, \
+{ 0x54, 0x02, C_ALL, "tx_mem.abort_capacity" , 0x0, ATTR_TSX, 0x0 }, \
+{ 0x54, 0x04, C_ALL, "tx_mem.abort_hle_store_to_elided_lock" , 0x0, ATTR_TSX, 0x0 }, \
+{ 0x54, 0x08, C_ALL, "tx_mem.abort_hle_elision_buffer_not_empty" , 0x0, ATTR_TSX, 0x0 }, \
+{ 0x54, 0x10, C_ALL, "tx_mem.abort_hle_elision_buffer_mismatch" , 0x0, ATTR_TSX, 0x0 }, \
+{ 0x54, 0x20, C_ALL, "tx_mem.abort_hle_elision_buffer_unsupported_alignment", 0x0, ATTR_TSX, 0x0 }, \
+{ 0x54, 0x40, C_ALL, "tx_mem.hle_elision_buffer_full" , 0x0, ATTR_TSX, 0x0 }, \
+{ 0x5D, 0x01, C_ALL, "tx_exec.misc1" , 0x0, ATTR_TSX, 0x0 }, \
+{ 0x5D, 0x02, C_ALL, "tx_exec.misc2" , 0x0, ATTR_TSX, 0x0 }, \
+{ 0x5D, 0x04, C_ALL, "tx_exec.misc3" , 0x0, ATTR_TSX, 0x0 }, \
+{ 0x5D, 0x08, C_ALL, "tx_exec.misc4" , 0x0, ATTR_TSX, 0x0 }, \
+{ 0x5D, 0x10, C_ALL, "tx_exec.misc5" , 0x0, ATTR_TSX, 0x0 }, \
+{ 0x5E, 0x01, C_ALL, "rs_events.empty_cycles" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x5E, 0x01, C_ALL, "rs_events.empty_end" , 0x1, (ATTR_INV | ATTR_EDGE), 0x0 }, \
+{ 0x60, 0x01, C_ALL, "offcore_requests_outstanding.demand_data_rd" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x60, 0x01, C_ALL, "offcore_requests_outstanding.cycles_with_demand_data_rd", 0x1, ATTR_NONE, 0x0 }, \
+{ 0x60, 0x01, C_ALL, "offcore_requests_outstanding.demand_data_rd_ge_6" , 0x6, ATTR_NONE, 0x0 }, \
+{ 0x60, 0x02, C_ALL, "offcore_requests_outstanding.demand_code_rd" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x60, 0x02, C_ALL, "offcore_requests_outstanding.cycles_with_demand_code_rd", 0x1, ATTR_NONE, 0x0 }, \
+{ 0x60, 0x04, C_ALL, "offcore_requests_outstanding.demand_rfo" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x60, 0x04, C_ALL, "offcore_requests_outstanding.cycles_with_demand_rfo",0x1, ATTR_NONE, 0x0 }, \
+{ 0x60, 0x08, C_ALL, "offcore_requests_outstanding.all_data_rd" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x60, 0x08, C_ALL, "offcore_requests_outstanding.cycles_with_data_rd" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0x60, 0x10, C_ALL, "offcore_requests_outstanding.l3_miss_demand_data_rd",0x0, ATTR_NONE, 0x0 }, \
+{ 0x60, 0x10, C_ALL, "offcore_requests_outstanding.cycles_with_l3_miss_demand_data_rd", 0x1, ATTR_NONE, 0x0 }, \
+{ 0x60, 0x10, C_ALL, "offcore_requests_outstanding.l3_miss_demand_data_rd_ge_6",0x6, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x04, C_ALL, "idq.mite_uops" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x04, C_ALL, "idq.mite_cycles" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x08, C_ALL, "idq.dsb_uops" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x08, C_ALL, "idq.dsb_cycles" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x10, C_ALL, "idq.ms_dsb_cycles" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x18, C_ALL, "idq.all_dsb_cycles_4_uops" , 0x4, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x18, C_ALL, "idq.all_dsb_cycles_any_uops" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x20, C_ALL, "idq.ms_mite_uops" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x24, C_ALL, "idq.all_mite_cycles_4_uops" , 0x4, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x24, C_ALL, "idq.all_mite_cycles_any_uops" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x30, C_ALL, "idq.ms_uops" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x30, C_ALL, "idq.ms_cycles" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0x79, 0x30, C_ALL, "idq.ms_switches" , 0x1, ATTR_EDGE, 0x0 }, \
+{ 0x80, 0x04, C_ALL, "icache_16b.ifdata_stall" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x83, 0x01, C_ALL, "icache_64b.iftag_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x83, 0x02, C_ALL, "icache_64b.iftag_miss" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x83, 0x04, C_ALL, "icache_64b.iftag_stall" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x85, 0x01, C_ALL, "itlb_misses.miss_causes_a_walk" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x85, 0x02, C_ALL, "itlb_misses.walk_completed_4k" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x85, 0x04, C_ALL, "itlb_misses.walk_completed_2m_4m" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x85, 0x08, C_ALL, "itlb_misses.walk_completed_1g" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x85, 0x0E, C_ALL, "itlb_misses.walk_completed" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x85, 0x10, C_ALL, "itlb_misses.walk_pending" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x85, 0x10, C_ALL, "itlb_misses.walk_active" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0x85, 0x20, C_ALL, "itlb_misses.stlb_hit" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x87, 0x01, C_ALL, "ild_stall.lcp" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x9C, 0x01, C_ALL, "idq_uops_not_delivered.core" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0x9C, 0x01, C_ALL, "idq_uops_not_delivered.cycles_0_uops_deliv.core" , 0x4, ATTR_NONE, 0x0 }, \
+{ 0x9C, 0x01, C_ALL, "idq_uops_not_delivered.cycles_le_1_uop_deliv.core" , 0x3, ATTR_NONE, 0x0 }, \
+{ 0x9C, 0x01, C_ALL, "idq_uops_not_delivered.cycles_le_2_uop_deliv.core" , 0x2, ATTR_NONE, 0x0 }, \
+{ 0x9C, 0x01, C_ALL, "idq_uops_not_delivered.cycles_le_3_uop_deliv.core" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0x9C, 0x01, C_ALL, "idq_uops_not_delivered.cycles_fe_was_ok" , 0x1, ATTR_INV, 0x0 }, \
+{ 0xA1, 0x01, C_ALL, "uops_dispatched_port.port_0" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA1, 0x02, C_ALL, "uops_dispatched_port.port_1" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA1, 0x04, C_ALL, "uops_dispatched_port.port_2" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA1, 0x08, C_ALL, "uops_dispatched_port.port_3" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA1, 0x10, C_ALL, "uops_dispatched_port.port_4" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA1, 0x20, C_ALL, "uops_dispatched_port.port_5" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA1, 0x40, C_ALL, "uops_dispatched_port.port_6" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA1, 0x80, C_ALL, "uops_dispatched_port.port_7" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA2, 0x01, C_ALL, "resource_stalls.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA2, 0x08, C_ALL, "resource_stalls.sb" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA3, 0x01, C_ALL, "cycle_activity.cycles_l2_miss" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0xA3, 0x02, C_ALL, "cycle_activity.cycles_l3_miss" , 0x2, ATTR_NONE, 0x0 }, \
+{ 0xA3, 0x04, C_ALL, "cycle_activity.stalls_total" , 0x4, ATTR_NONE, 0x0 }, \
+{ 0xA3, 0x05, C_ALL, "cycle_activity.stalls_l2_miss" , 0x5, ATTR_NONE, 0x0 }, \
+{ 0xA3, 0x06, C_ALL, "cycle_activity.stalls_l3_miss" , 0x6, ATTR_NONE, 0x0 }, \
+{ 0xA3, 0x08, C_ALL, "cycle_activity.cycles_l1d_miss" , 0x8, ATTR_NONE, 0x0 }, \
+{ 0xA3, 0x0C, C_ALL, "cycle_activity.stalls_l1d_miss" , 0xC, ATTR_NONE, 0x0 }, \
+{ 0xA3, 0x10, C_ALL, "cycle_activity.cycles_mem_any" , 0x10,ATTR_NONE, 0x0 }, \
+{ 0xA3, 0x14, C_ALL, "cycle_activity.stalls_mem_any" , 0x14,ATTR_NONE, 0x0 }, \
+{ 0xA6, 0x01, C_ALL, "exe_activity.exe_bound_0_ports" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA6, 0x02, C_ALL, "exe_activity.1_ports_util" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA6, 0x04, C_ALL, "exe_activity.2_ports_util" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA6, 0x08, C_ALL, "exe_activity.3_ports_util" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA6, 0x10, C_ALL, "exe_activity.4_ports_util" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA6, 0x40, C_ALL, "exe_activity.bound_on_stores" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA8, 0x01, C_ALL, "lsd.uops" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xA8, 0x01, C_ALL, "lsd.cycles_active" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0xA8, 0x01, C_ALL, "lsd.cycles_4_uops" , 0x4, ATTR_NONE, 0x0 }, \
+{ 0xAB, 0x02, C_ALL, "dsb2mite_switches.penalty_cycles" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xAE, 0x01, C_ALL, "itlb.itlb_flush" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB0, 0x01, C_ALL, "offcore_requests.demand_data_rd" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB0, 0x02, C_ALL, "offcore_requests.demand_code_rd" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB0, 0x04, C_ALL, "offcore_requests.demand_rfo" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB0, 0x08, C_ALL, "offcore_requests.all_data_rd" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB0, 0x10, C_ALL, "offcore_requests.l3_miss_demand_data_rd" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB0, 0x80, C_ALL, "offcore_requests.all_requests" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB1, 0x01, C_ALL, "uops_executed.thread" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB1, 0x01, C_ALL, "uops_executed.cycles_ge_1_uop_exec" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0xB1, 0x01, C_ALL, "uops_executed.cycles_ge_2_uops_exec" , 0x2, ATTR_NONE, 0x0 }, \
+{ 0xB1, 0x01, C_ALL, "uops_executed.cycles_ge_3_uops_exec" , 0x3, ATTR_NONE, 0x0 }, \
+{ 0xB1, 0x01, C_ALL, "uops_executed.cycles_ge_4_uops_exec" , 0x4, ATTR_NONE, 0x0 }, \
+{ 0xB1, 0x01, C_ALL, "uops_executed.stall_cycles" , 0x1, ATTR_INV, 0x0 }, \
+{ 0xB1, 0x02, C_ALL, "uops_executed.core" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB1, 0x02, C_ALL, "uops_executed.core_cycles_none" , 0x1, ATTR_INV, 0x0 }, \
+{ 0xB1, 0x02, C_ALL, "uops_executed.core_cycles_ge_1" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0xB1, 0x02, C_ALL, "uops_executed.core_cycles_ge_2" , 0x2, ATTR_NONE, 0x0 }, \
+{ 0xB1, 0x02, C_ALL, "uops_executed.core_cycles_ge_3" , 0x3, ATTR_NONE, 0x0 }, \
+{ 0xB1, 0x02, C_ALL, "uops_executed.core_cycles_ge_4" , 0x4, ATTR_NONE, 0x0 }, \
+{ 0xB1, 0x10, C_ALL, "uops_executed.x87" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xB2, 0x01, C_ALL, "offcore_requests_buffer.sq_full" , 0x0, ATTR_NONE, 0x0 }, \
+\
+ /* \
+ * See Section "Off-core Response Performance Monitoring" \
+ * \
+ * Though these two off_core events support all counters, only 1 of \
+ * them can be used at any given time. This is due to the extra MSR \
+ * programming required. \
+ */ \
+/* { 0xB7, 0x01, C_ALL, "offcore_response_0" , 0x0, ATTR_NONE, OFFCORE_RSP_0 }, omit events requiring MSR programming */ \
+/* { 0xBB, 0x01, C_ALL, "offcore_response_1" , 0x0, ATTR_NONE, OFFCORE_RSP_1 }, omit events requiring MSR programming */ \
+{ 0xBD, 0x01, C_ALL, "tlb_flush.dtlb_thread" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xBD, 0x20, C_ALL, "tlb_flush.stlb_any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc0, 0x00, C_ALL, "inst_retired.any_p" , 0x0, ATTR_NONE, 0x0 }, \
+/* { 0xC0, 0x1, C(1), "inst_retired.prec_dist" , 0x0, ATTR_PEBS_ONLY, 0x0 }, omit PEBS-only events */ \
+/* { 0xC0, 0x1, (C(0) | C(2) | C(3)), "inst_retired.total_cycles_ps" , 0x0A, (ATTR_PEBS_ONLY | ATTR_INV), 0x0 }, omit PEBS-only events */ \
+{ 0xC1, 0x3F, C_ALL, "other_assists.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC2, 0x01, C_ALL, "uops_retired.stall_cycles" , 0x1, ATTR_INV, 0x0 }, \
+{ 0xC2, 0x01, C_ALL, "uops_retired.total_cycles" , 0x0A, ATTR_INV, 0x0 }, \
+{ 0xC2, 0x02, C_ALL, "uops_retired.retire_slots" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC3, 0x01, C_ALL, "machine_clears.count" , 0x1, ATTR_EDGE, 0x0 }, \
+{ 0xC3, 0x02, C_ALL, "machine_clears.memory_ordering" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC3, 0x04, C_ALL, "machine_clears.smc" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xc4, 0x00, C_ALL, "br_inst_retired.all_branches" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC4, 0x01, C_ALL, "br_inst_retired.conditional" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xC4, 0x02, C_ALL, "br_inst_retired.near_call" , 0x0, ATTR_PEBS, 0x0 }, \
+/* { 0xC4, 0x04, C_ALL, "br_inst_retired.all_branches_pebs" , 0x0, ATTR_PEBS_ONLY, 0x0 }, omit PEBS-only events */ \
+{ 0xC4, 0x08, C_ALL, "br_inst_retired.near_return" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xC4, 0x10, C_ALL, "br_inst_retired.not_taken" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC4, 0x20, C_ALL, "br_inst_retired.near_taken" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xC4, 0x40, C_ALL, "br_inst_retired.far_branch" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xc5, 0x00, C_ALL, "br_misp_retired.all_branches" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC5, 0x01, C_ALL, "br_misp_retired.conditional" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xC5, 0x02, C_ALL, "br_misp_retired.near_call" , 0x0, ATTR_PEBS, 0x0 }, \
+/* { 0xC5, 0x04, C_ALL, "br_misp_retired.all_branches_pebs" , 0x0, ATTR_PEBS_ONLY, 0x0 }, omit PEBS-only events */ \
+{ 0xC5, 0x20, C_ALL, "br_misp_retired.near_taken" , 0x0, ATTR_PEBS, 0x0 }, \
+/* { 0xC6, 0x01, C_ALL, "frontend_retired" , 0x0, ATTR_PEBS, MSR_PEBS_FRONTEND}, omit events requiring MSR programming */ \
+{ 0xC7, 0x01, C_ALL, "fp_arith_inst_retired.scalar_double" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC7, 0x02, C_ALL, "fp_arith_inst_retired.scalar_single" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC7, 0x04, C_ALL, "fp_arith_inst_retired.128b_packed_double" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC7, 0x08, C_ALL, "fp_arith_inst_retired.128b_packed_single" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC7, 0x10, C_ALL, "fp_arith_inst_retired.256b_packed_double" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC7, 0x20, C_ALL, "fp_arith_inst_retired.256b_packed_single" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xC8, 0x01, C_ALL, "hle_retired.start" , 0x0, ATTR_TSX, 0x0 }, \
+{ 0xC8, 0x02, C_ALL, "hle_retired.commit" , 0x0, ATTR_TSX, 0x0 }, \
+{ 0xC8, 0x04, C_ALL, "hle_retired.aborted" , 0x0, ATTR_PEBS | ATTR_TSX, 0x0 }, \
+{ 0xC8, 0x08, C_ALL, "hle_retired.aborted_mem" , 0x0, ATTR_TSX, 0x0 }, \
+{ 0xC8, 0x10, C_ALL, "hle_retired.aborted_timer" , 0x0, ATTR_TSX, 0x0 }, \
+{ 0xC8, 0x20, C_ALL, "hle_retired.aborted_unfriendly" , 0x0, ATTR_TSX, 0x0 }, \
+{ 0xC8, 0x40, C_ALL, "hle_retired.aborted_memtype" , 0x0, ATTR_TSX, 0x0 }, \
+{ 0xC8, 0x80, C_ALL, "hle_retired.aborted_events" , 0x0, ATTR_TSX, 0x0 }, \
+{ 0xC9, 0x01, C_ALL, "rtm_retired.start" , 0x0, ATTR_TSX, 0x0 }, \
+{ 0xC9, 0x02, C_ALL, "rtm_retired.commit" , 0x0, ATTR_TSX, 0x0 }, \
+{ 0xC9, 0x04, C_ALL, "rtm_retired.aborted" , 0x0, ATTR_PEBS | ATTR_TSX, 0x0 }, \
+{ 0xC9, 0x08, C_ALL, "rtm_retired.aborted_mem" , 0x0, ATTR_TSX, 0x0 }, \
+{ 0xC9, 0x10, C_ALL, "rtm_retired.aborted_timer" , 0x0, ATTR_TSX, 0x0 }, \
+{ 0xC9, 0x20, C_ALL, "rtm_retired.aborted_unfriendly" , 0x0, ATTR_TSX, 0x0 }, \
+{ 0xC9, 0x40, C_ALL, "rtm_retired.aborted_memtype" , 0x0, ATTR_TSX, 0x0 }, \
+{ 0xC9, 0x80, C_ALL, "rtm_retired.aborted_events" , 0x0, ATTR_TSX, 0x0 }, \
+{ 0xCA, 0x1E, C_ALL, "fp_assist.any" , 0x1, ATTR_NONE, 0x0 }, \
+{ 0xCB, 0x01, C_ALL, "hw_interrupts.received" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xCC, 0x20, C_ALL, "rob_misc_events.lbr_inserts" , 0x0, ATTR_NONE, 0x0 }, \
+/* { 0xCD, 0x01, C_ALL, "mem_trans_retired.load_latency" , 0x0, ATTR_PEBS_ONLY_LD_LAT, PEBS_LD_LAT_THRESHOLD }, omit events requiring MSR programming */ \
+{ 0xD0, 0x11, C_ALL, "mem_inst_retired.stlb_miss_loads" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xD0, 0x12, C_ALL, "mem_inst_retired.stlb_miss_stores" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xD0, 0x21, C_ALL, "mem_inst_retired.lock_loads" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xD0, 0x41, C_ALL, "mem_inst_retired.split_loads" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xD0, 0x42, C_ALL, "mem_inst_retired.split_stores" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xD0, 0x81, C_ALL, "mem_inst_retired.all_loads" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xD0, 0x82, C_ALL, "mem_inst_retired.all_stores" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xD1, 0x01, C_ALL, "mem_load_retired.l1_hit" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xD1, 0x02, C_ALL, "mem_load_retired.l2_hit" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xD1, 0x04, C_ALL, "mem_load_retired.l3_hit" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xD1, 0x08, C_ALL, "mem_load_retired.l1_miss" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xD1, 0x10, C_ALL, "mem_load_retired.l2_miss" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xD1, 0x20, C_ALL, "mem_load_retired.l3_miss" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xD1, 0x40, C_ALL, "mem_load_retired.fb_hit" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xD2, 0x01, C_ALL, "mem_load_l3_hit_retired.xsnp_miss" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xD2, 0x02, C_ALL, "mem_load_l3_hit_retired.xsnp_hit" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xD2, 0x04, C_ALL, "mem_load_l3_hit_retired.xsnp_hitm" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xD2, 0x08, C_ALL, "mem_load_l3_hit_retired.xsnp_none" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xD4, 0x04, C_ALL, "mem_load_misc_retired.uc" , 0x0, ATTR_PEBS, 0x0 }, \
+{ 0xE6, 0x01, C_ALL, "baclears.any" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF0, 0x40, C_ALL, "l2_trans.l2_wb" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF1, 0x1F, C_ALL, "l2_lines_in.all" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF2, 0x01, C_ALL, "l2_lines_out.silent" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF2, 0x02, C_ALL, "l2_lines_out.non_silent" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF2, 0x04, C_ALL, "l2_lines_out.useless_hwpf" , 0x0, ATTR_NONE, 0x0 }, \
+{ 0xF4, 0x10, C_ALL, "sq_misc.split_lock" , 0x0, ATTR_NONE, 0x0 }, \
+/* end of #define */
+
+#define NT_END {0, 0, 0, NULL, 0x0, ATTR_NONE, 0x0 } /* end-of-table */
+
+static const struct events_table_t *events_table = NULL;
+
+const struct events_table_t events_fam6_mod23[] = {
+ ARCH_EVENTS
+ EVENTS_FAM6_MOD23
+ NT_END
+};
+
+const struct events_table_t events_fam6_mod28[] = {
+ ARCH_EVENTS
+ EVENTS_FAM6_MOD28
+ NT_END
+};
+
+const struct events_table_t events_fam6_mod26[] = {
+ ARCH_EVENTS
+ EVENTS_FAM6_MOD26
+ NT_END
+};
+
+const struct events_table_t events_fam6_mod46[] = {
+ ARCH_EVENTS
+ EVENTS_FAM6_MOD26
+ EVENTS_FAM6_MOD46_ONLY
+ NT_END
+};
+
+const struct events_table_t events_fam6_mod37[] = {
+ ARCH_EVENTS
+ EVENTS_FAM6_MOD37
+ EVENTS_FAM6_MOD37_ALSO
+ NT_END
+};
+
+const struct events_table_t events_fam6_mod47[] = {
+ ARCH_EVENTS
+ EVENTS_FAM6_MOD37
+ NT_END
+};
+
+const struct events_table_t events_fam6_mod42[] = {
+ ARCH_EVENTS
+ EVENTS_FAM6_MOD42
+ EVENTS_FAM6_MOD42_ONLY
+ NT_END
+};
+
+const struct events_table_t events_fam6_mod45[] = {
+ ARCH_EVENTS
+ EVENTS_FAM6_MOD42
+ EVENTS_FAM6_MOD45_ONLY
+ NT_END
+};
+
+const struct events_table_t events_fam6_mod58[] = {
+ ARCH_EVENTS
+ EVENTS_FAM6_MOD58
+ NT_END
+};
+
+const struct events_table_t events_fam6_mod62[] = {
+ ARCH_EVENTS
+ EVENTS_FAM6_MOD58
+ EVENTS_FAM6_MOD62_ONLY
+ NT_END
+};
+
+const struct events_table_t events_fam6_mod60[] = {
+ ARCH_EVENTS
+ EVENTS_FAM6_MOD60
+ NT_END
+};
+
+const struct events_table_t events_fam6_mod61[] = {
+ ARCH_EVENTS
+ EVENTS_FAM6_MOD61
+ NT_END
+};
+
+const struct events_table_t events_fam6_mod78[] = {
+ ARCH_EVENTS
+ EVENTS_FAM6_MOD78
+ NT_END
+};
+
+const struct events_table_t events_fam6_unknown[] = {
+ ARCH_EVENTS
+ NT_END
+};
+
+const struct events_table_t events_fam_arm[] = {
+// ARCH_EVENTS
+// *eventnum = pevent->eventselect;
+// *eventnum |= (pevent->unitmask << PERFCTR_UMASK_SHIFT);
+// *eventnum |= (pevent->attrs << 16);
+// *eventnum |= (pevent->cmask << 24);
+// eventselect, unitmask, supported_counters, name, cmask, attrs, msr_offset
+
+// Hardware event
+#define HWE(nm, id) { id, 0, C_ALL, nm, PERF_TYPE_HARDWARE, 0, 0 },
+ HWE("branch-instructions", PERF_COUNT_HW_BRANCH_INSTRUCTIONS)
+ HWE("branch-misses", PERF_COUNT_HW_BRANCH_MISSES)
+ HWE("bus-cycles", PERF_COUNT_HW_BUS_CYCLES)
+ HWE("cache-misses", PERF_COUNT_HW_CACHE_MISSES)
+ HWE("cache-references", PERF_COUNT_HW_CACHE_REFERENCES)
+ HWE("cycles", PERF_COUNT_HW_CPU_CYCLES)
+ HWE("instructions", PERF_COUNT_HW_INSTRUCTIONS)
+ HWE("ref-cycles", PERF_COUNT_HW_REF_CPU_CYCLES)
+ HWE("stalled-cycles-backend", PERF_COUNT_HW_STALLED_CYCLES_BACKEND)
+ HWE("stalled-cycles-frontend", PERF_COUNT_HW_STALLED_CYCLES_FRONTEND)
+
+// Software event
+#define SWE(nm, id) { id, 0, C_ALL, nm, PERF_TYPE_SOFTWARE, 0, 0 },
+ SWE("alignment-faults", PERF_COUNT_SW_ALIGNMENT_FAULTS)
+ SWE("context-switches", PERF_COUNT_SW_CONTEXT_SWITCHES)
+ SWE("cpu-clock", PERF_COUNT_SW_CPU_CLOCK)
+ SWE("cpu-migrations", PERF_COUNT_SW_CPU_MIGRATIONS)
+ SWE("emulation-faults", PERF_COUNT_SW_EMULATION_FAULTS)
+ SWE("major-faults", PERF_COUNT_SW_PAGE_FAULTS_MAJ)
+ SWE("minor-faults", PERF_COUNT_SW_PAGE_FAULTS_MIN)
+ SWE("page-faults", PERF_COUNT_SW_PAGE_FAULTS)
+ SWE("task-clock", PERF_COUNT_SW_TASK_CLOCK)
+
+// Hardware cache event
+#define HWCE(nm, id, op, res) { id | (op << 8) | (res << 16), 0, C_ALL, nm, PERF_TYPE_HW_CACHE, 0, 0 },
+ HWCE("L1-dcache-load-misses", PERF_COUNT_HW_CACHE_L1D, PERF_COUNT_HW_CACHE_OP_READ, PERF_COUNT_HW_CACHE_RESULT_MISS)
+ HWCE("L1-dcache-loads", PERF_COUNT_HW_CACHE_L1D, PERF_COUNT_HW_CACHE_OP_READ, PERF_COUNT_HW_CACHE_RESULT_ACCESS)
+ HWCE("L1-dcache-store-misses",PERF_COUNT_HW_CACHE_L1D, PERF_COUNT_HW_CACHE_RESULT_MISS, PERF_COUNT_HW_CACHE_RESULT_ACCESS)
+ HWCE("L1-dcache-stores", PERF_COUNT_HW_CACHE_L1D, PERF_COUNT_HW_CACHE_OP_WRITE, PERF_COUNT_HW_CACHE_RESULT_ACCESS)
+ HWCE("L1-icache-load-misses", PERF_COUNT_HW_CACHE_L1I, PERF_COUNT_HW_CACHE_OP_READ, PERF_COUNT_HW_CACHE_RESULT_MISS)
+ HWCE("L1-icache-loads", PERF_COUNT_HW_CACHE_L1I, PERF_COUNT_HW_CACHE_OP_READ, PERF_COUNT_HW_CACHE_RESULT_ACCESS)
+// HWCE("branch-load-misses",)
+// HWCE("branch-loads",)
+ HWCE("dTLB-load-misses", PERF_COUNT_HW_CACHE_DTLB, PERF_COUNT_HW_CACHE_OP_READ, PERF_COUNT_HW_CACHE_RESULT_MISS)
+ HWCE("dTLB-loads", PERF_COUNT_HW_CACHE_DTLB, PERF_COUNT_HW_CACHE_OP_READ, PERF_COUNT_HW_CACHE_RESULT_ACCESS)
+ HWCE("iTLB-load-misses", PERF_COUNT_HW_CACHE_ITLB, PERF_COUNT_HW_CACHE_OP_READ, PERF_COUNT_HW_CACHE_RESULT_MISS)
+ HWCE("iTLB-loads", PERF_COUNT_HW_CACHE_ITLB, PERF_COUNT_HW_CACHE_OP_READ, PERF_COUNT_HW_CACHE_RESULT_ACCESS)
+
+ NT_END
+};
+
+static int
+core_pcbe_init (void)
+{
+ switch (cpuid_getvendor ())
+ {
+ case ARM_CPU_IMP_ARM:
+ case ARM_CPU_IMP_BRCM:
+ case ARM_CPU_IMP_CAVIUM:
+ case ARM_CPU_IMP_APM:
+ case ARM_CPU_IMP_QCOM:
+ snprintf (core_impl_name, sizeof (core_impl_name), "%s", AARCH64_VENDORSTR_ARM);
+ events_table = events_fam_arm;
+ num_gpc = 4; // MEZ: a real implementation is needed
+ num_ffc = 0;
+ total_pmc = num_gpc + num_ffc;
+ return 0;
+ case X86_VENDOR_Intel:
+ break;
+ default:
+ return -1;
+ }
+
+#if defined(__i386__) || defined(__x86_64)
+ /* No Architectural Performance Monitoring Leaf returned by CPUID */
+ if (get_cpuid_info ()->cpi_maxeax < 0xa)
+ return (-1);
+
+ /* Obtain the Architectural Performance Monitoring Leaf */
+ cpuid_regs_t cp;
+ my_cpuid (0xa, &cp);
+ uint32_t versionid = cp.eax & 0xFF;
+
+ /*
+ * Fixed-Function Counters (FFC)
+ *
+ * All Family 6 Model 15 and Model 23 processors have fixed-function
+ * counters. These counters were made Architectural with
+ * Family 6 Model 15 Stepping 9.
+ */
+ switch (versionid)
+ {
+ case 0:
+ return -1;
+ case 2:
+ num_ffc = cp.edx & 0x1F;
+ /*
+ * Some processors have an errata (AW34) where
+ * versionid is reported as 2 when actually 1.
+ * In this case, fixed-function counters are
+ * model-specific as in Version 1.
+ */
+ if (num_ffc != 0)
+ break;
+ /* FALLTHROUGH */
+ case 1:
+ num_ffc = 3;
+ versionid = 1;
+ break;
+ default:
+ num_ffc = cp.edx & 0x1F;
+ break;
+ }
+ if (num_ffc >= 64)
+ return (-1);
+ uint64_t known_ffc_num = sizeof (ffc_names) / sizeof (char *) - 1; /* -1 for EOT */
+ if (num_ffc > known_ffc_num)
+ /*
+ * The system seems to have more fixed-function counters than
+ * what this PCBE is able to handle correctly. Default to the
+ * maximum number of fixed-function counters that this driver
+ * is aware of.
+ */
+ num_ffc = known_ffc_num;
+
+ /*
+ * General Purpose Counters (GPC)
+ */
+ num_gpc = (cp.eax >> 8) & 0xFF;
+ if (num_gpc >= 64)
+ return (-1);
+ total_pmc = num_gpc + num_ffc;
+ if (total_pmc > 64) /* Too wide for the overflow bitmap */
+ return (-1);
+
+ uint_t cpuid_model = cpuid_getmodel ();
+
+ /* GPC events for Family 6 Models 15 & 23 only */
+ if ((cpuid_getfamily () == 6) &&
+ ((cpuid_model == 15) || (cpuid_model == 23)))
+ (void) snprintf (core_impl_name, IMPL_NAME_LEN, "Core Microarchitecture");
+ else
+ (void) snprintf (core_impl_name, IMPL_NAME_LEN,
+ "Intel Arch PerfMon v%d on Family %d Model %d",
+ versionid, cpuid_getfamily (), cpuid_model);
+ /*
+ * Process architectural and non-architectural events using GPC
+ */
+ if (num_gpc > 0)
+ {
+ switch (cpuid_model)
+ {
+ case 15: /* Core 2 */
+ case 23:
+ events_table = events_fam6_mod23;
+ break;
+ case 28: /* Atom */
+ events_table = events_fam6_mod28;
+ break;
+ case 37: /* Westmere */
+ case 44:
+ events_table = events_fam6_mod37;
+ break;
+ case 47:
+ events_table = events_fam6_mod47;
+ break;
+ case 26: /* Nehalem */
+ case 30:
+ case 31:
+ events_table = events_fam6_mod26;
+ break;
+ case 46:
+ events_table = events_fam6_mod46;
+ break;
+ case 42: /* Sandy Bridge */
+ events_table = events_fam6_mod42;
+ break;
+ case 45:
+ events_table = events_fam6_mod45;
+ break;
+ case 58: /* Ivy Bridge */
+ events_table = events_fam6_mod58;
+ break;
+ case 62:
+ events_table = events_fam6_mod62;
+ break;
+ case 60: /* Haswell */
+ case 63:
+ case 69:
+ case 70:
+ events_table = events_fam6_mod60;
+ break;
+ case 61: /* Broadwell */
+ case 71:
+ case 79:
+ case 86:
+ events_table = events_fam6_mod61;
+ break;
+ case 78: /* Skylake */
+ case 85:
+ case 94:
+ events_table = events_fam6_mod78;
+ break;
+ default: /* unknown */
+ events_table = events_fam6_unknown;
+ }
+ }
+ /*
+ * Fixed-function Counters (FFC) are already listed individually in
+ * ffc_names[]
+ */
+#endif
+ return 0;
+}
+
+static uint_t
+core_pcbe_ncounters ()
+{
+ return total_pmc;
+}
+
+static const char *
+core_pcbe_impl_name (void)
+{
+ return core_impl_name;
+}
+
+static const char *
+core_pcbe_cpuref (void)
+{
+#if defined(__aarch64__)
+ return "";
+#elif defined(__i386__) || defined(__x86_64)
+ switch (cpuid_getmodel ())
+ {
+ case 60: /* Haswell */
+ case 63:
+ case 69:
+ case 70:
+ return GTXT ("See Chapter 19 of the \"Intel 64 and IA-32 Architectures Software Developer's Manual Volume 3B: System Programming Guide, Part 2\"\nOrder Number: 253669-047US, June 2013");
+ case 61: /* Broadwell */
+ case 71:
+ case 79:
+ case 86:
+ case 78: /* Skylake */
+ case 85:
+ case 94:
+ return GTXT ("See Chapter 19 of the \"Intel 64 and IA-32 Architectures Software Developer's Manual Volume 3B: System Programming Guide\"");
+ default:
+ return
+ GTXT ("See Chapter 19 of the \"Intel 64 and IA-32 Architectures Software Developer's Manual Volume 3B: System Programming Guide, Part 2\"\nOrder Number: 253669-045US, January 2013");
+ }
+#endif
+}
+
+static int
+core_pcbe_get_events (hwcf_hwc_cb_t *hwc_cb)
+{
+ int count = 0;
+ const struct events_table_t *pevent;
+ for (pevent = events_table; pevent && pevent->name; pevent++)
+ for (uint_t jj = 0; jj < num_gpc; jj++)
+ if (C (jj) & pevent->supported_counters)
+ {
+ hwc_cb (jj, pevent->name);
+ count++;
+ }
+
+ for (int ii = 0; ii < sizeof (ffc_names) / sizeof (*ffc_names) && ffc_names[ii]; ii++)
+ {
+ hwc_cb (ii + num_gpc, ffc_names[ii]);
+ count++;
+ }
+ /* add generic events here */
+ return count;
+}
+
+static int
+core_pcbe_get_eventnum (const char *eventname, uint_t pmc, eventsel_t *eventnum,
+ eventsel_t *valid_umask, uint_t *pmc_sel)
+{
+ const struct events_table_t* pevent;
+ *valid_umask = 0x0; /* by default, don't allow user umask */
+ *pmc_sel = pmc; /* by default, use the requested pmc */
+
+ /* search non-ffc table */
+ for (pevent = events_table; pevent && pevent->name; pevent++)
+ {
+ if (strcmp (eventname, pevent->name) == 0)
+ {
+ *eventnum = pevent->eventselect;
+ *eventnum |= (pevent->unitmask << PERFCTR_UMASK_SHIFT);
+ *eventnum |= (pevent->attrs << 16);
+ *eventnum |= (pevent->cmask << 24);
+
+ if (pevent->msr_offset)
+ {
+ /*
+ * Should also handle any pevent->msr_offset.
+ * Can check libcpc's usr/src/uts/intel/pcbe/snb_pcbe.h,
+ * function snb_gpc_configure().
+ *
+ * Actually, we should probably error out here
+ * until the appropriate support has been added.
+ * Also, we can comment out events that require
+ * msr_offset so that they aren't even listed.
+ */
+ }
+ if (!pevent->unitmask)
+ *valid_umask = 0xff; /* allow umask if nothing set */
+ return 0;
+ }
+ }
+
+ /* search ffc table */
+ for (int ii = 0; ii < sizeof (ffc_names) / sizeof (*ffc_names) && ffc_names[ii]; ii++)
+ {
+ if (strcmp (eventname, ffc_names[ii]) == 0)
+ {
+ *eventnum = 0;
+ *pmc_sel = ii | PERFCTR_FIXED_MAGIC;
+ return 0;
+ }
+ }
+ *eventnum = (eventsel_t) - 1;
+ return -1;
+}
+
+static hdrv_pcbe_api_t hdrv_pcbe_core_api = {
+ core_pcbe_init,
+ core_pcbe_ncounters,
+ core_pcbe_impl_name,
+ core_pcbe_cpuref,
+ core_pcbe_get_events,
+ core_pcbe_get_eventnum
+};
diff --git a/gprofng/common/cpu_frequency.h b/gprofng/common/cpu_frequency.h
new file mode 100644
index 00000000000..b46b54dc789
--- /dev/null
+++ b/gprofng/common/cpu_frequency.h
@@ -0,0 +1,303 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _CPU_FREQUENCY_H
+#define _CPU_FREQUENCY_H
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#include <alloca.h>
+#include <unistd.h> /* processor_info_t */
+#include <fcntl.h>
+
+ typedef unsigned char uint8_t;
+
+#define MAXSTRLEN 1024
+ /*
+ * This file provide the api to detect Intel CPU frequency variation features
+ */
+
+#define COL_CPUFREQ_NONE 0x0000
+#define COL_CPUFREQ_SCALING 0x0001
+#define COL_CPUFREQ_TURBO 0x0002
+
+#if defined(__i386__) || defined(__x86_64)
+ // XXXX This is a rough table to estimate frequency increment due to intel turbo boost.
+ // CPU with different stepping and different core number have different turbo increment.
+ // It is used internally here, and is not implemented on SPARC
+
+ // YLM: one can use cputrack to estimate max turbo frequency
+ // example: for a cpu-bound app that runs for > 10 seconds, count cycles for 10 seconds:
+ // cputrack -T 10 -v -c cpu_clk_unhalted.thread_p a.out
+
+ static int
+ get_max_turbo_freq (int model)
+ {
+ switch (model)
+ {
+ // Nehalem
+ case 30:// Core i7-870: 2/2/4/5
+ return 2 * 133333;
+ case 26:// Xeon L5520: 1/1/1/2
+ return 2 * 133333;
+ case 46:// Xeon E7540: 2
+ return 2 * 133333;
+ // Westmere
+ case 37:// Core i5-520M: 2/4
+ return 2 * 133333;
+ case 44:// Xeon E5620: 1/1/2/2
+ return 2 * 133333;
+ case 47:// Xeon E7-2820: 1/1/1/2
+ return 1 * 133333;
+ // Sandy Bridge
+ case 42:// Core i5-2500: 1/2/3/4
+ return 3 * 100000;
+ // http://ark.intel.com/products/64584/Intel-Xeon-Processor-E5-2660-20M-Cache-2_20-GHz-8_00-GTs-Intel-QPI
+ case 45:// Xeon E5-2660 GenuineIntel 206D7 family 6 model 45 step 7 clock 2200 MHz
+ return 8 * 100000;
+ // Ivy Bridge
+ case 58:// Core i7-3770: 3/4/5/5
+ return 4 * 100000;
+ case 62:// Xeon E5-2697: 3/3/3/3/3/3/3/4/5/6/7/8
+ return 7 * 100000;
+ // Haswell
+ case 60:
+ return 789000; // empirically we see 3189 MHz - 2400 MHz
+ case 63:
+ return 1280000; // empirically we see 3580 MHz - 2300 MHz for single-threaded
+ // return 500000; // empirically we see 2800 MHz - 2300 MHz for large throughput
+ // Broadwell
+ // where are these values listed?
+ // maybe try https://en.wikipedia.org/wiki/Broadwell_%28microarchitecture%29#Server_processors
+ case 61:
+ return 400000;
+ case 71:
+ return 400000;
+ case 79:
+ return 950000; // empirically we see (3550-2600) MHz for single-threaded on x6-2a
+ case 85:
+ return 1600000; // X7: empirically see ~3.7GHz with single thread, baseline is 2.1Ghz Return 3,700,000-2,100,000
+ case 31: // Nehalem?
+ case 28: // Atom
+ case 69: // Haswell
+ case 70: // Haswell
+ case 78: // Skylake
+ case 94: // Skylake
+ default:
+ return 0;
+ }
+ }
+#endif
+
+ /*
+ * parameter: mode, pointer to a 8bit mode indicator
+ * return: max cpu frequency in MHz
+ */
+ //YXXX Updating this function? Check similar cut/paste code in:
+ // collctrl.cc::Coll_Ctrl()
+ // collector.c::log_header_write()
+ // cpu_frequency.h::get_cpu_frequency()
+
+ static int
+ get_cpu_frequency (uint8_t *mode)
+ {
+ int ret_freq = 0;
+ if (mode != NULL)
+ *mode = COL_CPUFREQ_NONE;
+ FILE *procf = fopen ("/proc/cpuinfo", "r");
+ if (procf != NULL)
+ {
+ char temp[1024];
+ int cpu = -1;
+#if defined(__i386__) || defined(__x86_64)
+ int model = -1;
+ int family = -1;
+#endif
+ while (fgets (temp, 1024, procf) != NULL)
+ {
+ if (strncmp (temp, "processor", strlen ("processor")) == 0)
+ {
+ char *val = strchr (temp, ':');
+ cpu = val ? atoi (val + 1) : -1;
+ }
+#if defined(__i386__) || defined(__x86_64)
+ else if (strncmp (temp, "model", strlen ("model")) == 0
+ && strstr (temp, "name") == 0)
+ {
+ char *val = strchr (temp, ':');
+ model = val ? atoi (val + 1) : -1;
+ }
+ else if (strncmp (temp, "cpu family", strlen ("cpu family")) == 0)
+ {
+ char *val = strchr (temp, ':');
+ family = val ? atoi (val + 1) : -1;
+ }
+#endif
+ else if (strncmp (temp, "cpu MHz", strlen ("cpu MHz")) == 0)
+ {
+ char *val = strchr (temp, ':');
+ int mhz = val ? atoi (val + 1) : 0; /* reading it as int is fine */
+ char scaling_freq_file[MAXSTRLEN + 1];
+ snprintf (scaling_freq_file, sizeof (scaling_freq_file),
+ "/sys/devices/system/cpu/cpu%d/cpufreq/scaling_driver", cpu);
+ int intel_pstate = 0;
+ int no_turbo = 0;
+ if (access (scaling_freq_file, R_OK) == 0)
+ {
+ FILE *cpufreqd = fopen (scaling_freq_file, "r");
+ if (cpufreqd != NULL)
+ {
+ if (fgets (temp, 1024, cpufreqd) != NULL
+ && strncmp (temp, "intel_pstate", sizeof ("intel_pstate") - 1) == 0)
+ intel_pstate = 1;
+ fclose (cpufreqd);
+ }
+ }
+ snprintf (scaling_freq_file, sizeof (scaling_freq_file),
+ "/sys/devices/system/cpu/intel_pstate/no_turbo");
+ if (access (scaling_freq_file, R_OK) == 0)
+ {
+ FILE *pstatent = fopen (scaling_freq_file, "r");
+ if (pstatent != NULL)
+ {
+ if (fgets (temp, 1024, pstatent) != NULL)
+ if (strncmp (temp, "1", sizeof ("1") - 1) == 0)
+ no_turbo = 1;
+ fclose (pstatent);
+ }
+ }
+
+ snprintf (scaling_freq_file, sizeof (scaling_freq_file),
+ "/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor", cpu);
+ int frequency_scaling = 0;
+ int turbo_mode = 0;
+ if (access (scaling_freq_file, R_OK) == 0)
+ {
+ FILE *cpufreqf = fopen (scaling_freq_file, "r");
+ if (cpufreqf != NULL)
+ {
+ if (fgets (temp, 1024, cpufreqf) != NULL)
+ {
+ int ondemand = 0;
+ if (strncmp (temp, "ondemand", sizeof ("ondemand") - 1) == 0)
+ ondemand = 1;
+ int performance = 0;
+ if (strncmp (temp, "performance", sizeof ("performance") - 1) == 0)
+ performance = 1;
+ int powersave = 0;
+ if (strncmp (temp, "powersave", sizeof ("powersave") - 1) == 0)
+ powersave = 1;
+ if (intel_pstate || ondemand || performance)
+ {
+ snprintf (scaling_freq_file, sizeof (scaling_freq_file),
+ "/sys/devices/system/cpu/cpu%d/cpufreq/scaling_max_freq", cpu);
+ if (access (scaling_freq_file, R_OK) == 0)
+ {
+ FILE * cpufreqf_max;
+ if ((cpufreqf_max = fopen (scaling_freq_file, "r")) != NULL)
+ {
+ if (fgets (temp, 1024, cpufreqf_max) != NULL)
+ {
+ int tmpmhz = atoi (temp);
+ snprintf (scaling_freq_file, sizeof (scaling_freq_file),
+ "/sys/devices/system/cpu/cpu%d/cpufreq/scaling_available_frequencies", cpu);
+ if (intel_pstate)
+ {
+ frequency_scaling = 1;
+ turbo_mode = !no_turbo;
+ if (powersave)
+ // the system might have been relatively cold
+ // so we might do better with scaling_max_freq
+ mhz = (int) (((double) tmpmhz / 1000.0) + 0.5);
+ }
+ else if (access (scaling_freq_file, R_OK) == 0)
+ {
+ FILE * cpufreqf_ava;
+ if ((cpufreqf_ava = fopen (scaling_freq_file, "r")) != NULL)
+ {
+ if (fgets (temp, 1024, cpufreqf_ava) != NULL)
+ {
+ if (strchr (temp, ' ') != strrchr (temp, ' ') && ondemand)
+ frequency_scaling = 1;
+ if (tmpmhz > 1000)
+ {
+#if defined(__i386__) || defined(__x86_64)
+ if (family == 6)
+ {
+ // test turbo mode
+ char non_turbo_max_freq[1024];
+ snprintf (non_turbo_max_freq, sizeof (non_turbo_max_freq),
+ "%d", tmpmhz - 1000);
+ if (strstr (temp, non_turbo_max_freq))
+ {
+ turbo_mode = 1;
+ tmpmhz = (tmpmhz - 1000) + get_max_turbo_freq (model);
+ }
+ }
+#endif
+ }
+ }
+ fclose (cpufreqf_ava);
+ }
+ mhz = (int) (((double) tmpmhz / 1000.0) + 0.5);
+ }
+ }
+ fclose (cpufreqf_max);
+ }
+ }
+ }
+ }
+ fclose (cpufreqf);
+ }
+ }
+ if (mhz > ret_freq)
+ ret_freq = mhz;
+ if (frequency_scaling && mode != NULL)
+ *mode |= COL_CPUFREQ_SCALING;
+ if (turbo_mode && mode != NULL)
+ *mode |= COL_CPUFREQ_TURBO;
+ }
+ else if (strncmp (temp, "Cpu", 3) == 0 && temp[3] != '\0' &&
+ strncmp (strchr (temp + 1, 'C') ? strchr (temp + 1, 'C') : (temp + 4), "ClkTck", 6) == 0)
+ { // sparc-Linux
+ char *val = strchr (temp, ':');
+ if (val)
+ {
+ unsigned long long freq;
+ sscanf (val + 2, "%llx", &freq);
+ int mhz = (unsigned int) (((double) freq) / 1000000.0 + 0.5);
+ if (mhz > ret_freq)
+ ret_freq = mhz;
+ }
+ }
+ }
+ fclose (procf);
+ }
+ return ret_freq;
+ }
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*_CPU_FREQUENCY_H*/
diff --git a/gprofng/common/cpuid.c b/gprofng/common/cpuid.c
new file mode 100644
index 00000000000..211e09aa8ac
--- /dev/null
+++ b/gprofng/common/cpuid.c
@@ -0,0 +1,203 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#if defined(__i386__) || defined(__x86_64)
+#include <cpuid.h> /* GCC-provided */
+#elif defined(__aarch64__)
+#define ATTRIBUTE_UNUSED __attribute__((unused))
+
+static inline uint_t __attribute_const__
+__get_cpuid (unsigned int op ATTRIBUTE_UNUSED, unsigned int *eax,
+ unsigned int *ebx ATTRIBUTE_UNUSED,
+ unsigned int *ecx ATTRIBUTE_UNUSED, unsigned int *edx ATTRIBUTE_UNUSED)
+{
+ // CPUID bit assignments:
+ // [31:24] IMPLEMENTER (0x50 - ARM_CPU_IMP_APM)
+ // [23:20] VARIANT indicates processor revision (0x2 = Revision 2)
+ // [19:16] Constant (Reads as 0xF)
+ // [15:04] PARTNO indicates part number (0xC23 = Cortex-M3)
+ // [03:00] REVISION indicates patch release (0x0 = Patch 0)
+ // unsigned long v = 0;
+ // __asm volatile ("MRS %[result], MPIDR_EL1" : [result] "=r" (v));
+ // Tprintf(DBG_LT0, "cpuid.c:%d read_cpuid_id() MPIDR_EL1=0x%016lx\n", __LINE__, v);
+ uint_t res = 0;
+ __asm volatile ("MRS %[result], MIDR_EL1" : [result] "=r" (*eax));
+ Tprintf (DBG_LT0, "cpuid.c:%d read_cpuid_id() MIDR_EL1=0x%016x\n", __LINE__, *eax);
+ return res;
+}
+#endif
+
+/*
+ * Various routines to handle identification
+ * and classification of x86 processors.
+ */
+
+#define IS_GLOBAL /* externally visible */
+#define X86_VENDOR_Intel 0
+#define X86_VENDORSTR_Intel "GenuineIntel"
+#define X86_VENDOR_IntelClone 1
+#define X86_VENDOR_AMD 2
+#define X86_VENDORSTR_AMD "AuthenticAMD"
+
+#define BITX(u, h, l) (((u) >> (l)) & ((1LU << ((h) - (l) + 1LU)) - 1LU))
+#define CPI_FAMILY_XTD(reg) BITX(reg, 27, 20)
+#define CPI_MODEL_XTD(reg) BITX(reg, 19, 16)
+#define CPI_TYPE(reg) BITX(reg, 13, 12)
+#define CPI_FAMILY(reg) BITX(reg, 11, 8)
+#define CPI_STEP(reg) BITX(reg, 3, 0)
+#define CPI_MODEL(reg) BITX(reg, 7, 4)
+#define IS_EXTENDED_MODEL_INTEL(model) ((model) == 0x6 || (model) >= 0xf)
+
+
+typedef struct
+{
+ unsigned int eax;
+ unsigned int ebx;
+ unsigned int ecx;
+ unsigned int edx;
+} cpuid_regs_t;
+
+typedef struct
+{
+ unsigned int cpi_model;
+ unsigned int cpi_family;
+ unsigned int cpi_vendor; /* enum of cpi_vendorstr */
+ unsigned int cpi_maxeax; /* fn 0: %eax */
+ char cpi_vendorstr[13]; /* fn 0: %ebx:%ecx:%edx */
+} cpuid_info_t;
+
+
+#if defined(__i386__) || defined(__x86_64)
+static uint_t
+cpuid_vendorstr_to_vendorcode (char *vendorstr)
+{
+ if (strcmp (vendorstr, X86_VENDORSTR_Intel) == 0)
+ return X86_VENDOR_Intel;
+ else if (strcmp (vendorstr, X86_VENDORSTR_AMD) == 0)
+ return X86_VENDOR_AMD;
+ else
+ return X86_VENDOR_IntelClone;
+}
+
+static int
+my_cpuid (unsigned int op, cpuid_regs_t *regs)
+{
+ regs->eax = regs->ebx = regs->ecx = regs->edx = 0;
+ int ret = __get_cpuid (op, &regs->eax, &regs->ebx, &regs->ecx, &regs->edx);
+ TprintfT (DBG_LT1, "my_cpuid: __get_cpuid(0x%x, 0x%x, 0x%x, 0x%x, 0x%x) returns %d\n",
+ op, regs->eax, regs->ebx, regs->ecx, regs->edx, ret);
+ return ret;
+}
+#endif
+
+static cpuid_info_t *
+get_cpuid_info ()
+{
+ static int cpuid_inited = 0;
+ static cpuid_info_t cpuid_info;
+ cpuid_info_t *cpi = &cpuid_info;
+ if (cpuid_inited)
+ return cpi;
+ cpuid_inited = 1;
+
+#if defined(__aarch64__)
+ // CPUID bit assignments:
+ // [31:24] IMPLEMENTER (0x50 - ARM_CPU_IMP_APM)
+ // [23:20] VARIANT indicates processor revision (0x2 = Revision 2)
+ // [19:16] Constant (Reads as 0xF)
+ // [15:04] PARTNO indicates part number (0xC23 = Cortex-M3)
+ // [03:00] REVISION indicates patch release (0x0 = Patch 0)
+ uint_t reg = 0;
+ __asm volatile ("MRS %[result], MIDR_EL1" : [result] "=r" (reg));
+ cpi->cpi_vendor = reg >> 24;
+ cpi->cpi_model = (reg >> 4) & 0xfff;
+ switch (cpi->cpi_vendor)
+ {
+ case ARM_CPU_IMP_APM:
+ case ARM_CPU_IMP_ARM:
+ case ARM_CPU_IMP_CAVIUM:
+ case ARM_CPU_IMP_BRCM:
+ case ARM_CPU_IMP_QCOM:
+ strncpy (cpi->cpi_vendorstr, AARCH64_VENDORSTR_ARM, sizeof (cpi->cpi_vendorstr));
+ break;
+ default:
+ strncpy (cpi->cpi_vendorstr, "UNKNOWN ARM", sizeof (cpi->cpi_vendorstr));
+ break;
+ }
+ Tprintf (DBG_LT0, "cpuid.c:%d read_cpuid_id() MIDR_EL1==0x%016x cpi_vendor=%d cpi_model=%d\n",
+ __LINE__, (unsigned int) reg, cpi->cpi_vendor, cpi->cpi_model);
+
+#elif defined(__i386__) || defined(__x86_64)
+ cpuid_regs_t regs;
+ my_cpuid (0, &regs);
+ cpi->cpi_maxeax = regs.eax;
+ ((uint32_t *) cpi->cpi_vendorstr)[0] = regs.ebx;
+ ((uint32_t *) cpi->cpi_vendorstr)[1] = regs.edx;
+ ((uint32_t *) cpi->cpi_vendorstr)[2] = regs.ecx;
+ cpi->cpi_vendorstr[12] = 0;
+ cpi->cpi_vendor = cpuid_vendorstr_to_vendorcode (cpi->cpi_vendorstr);
+
+ my_cpuid (1, &regs);
+ cpi->cpi_model = CPI_MODEL (regs.eax);
+ cpi->cpi_family = CPI_FAMILY (regs.eax);
+ if (cpi->cpi_family == 0xf)
+ cpi->cpi_family += CPI_FAMILY_XTD (regs.eax);
+
+ /*
+ * Beware: AMD uses "extended model" iff base *FAMILY* == 0xf.
+ * Intel, and presumably everyone else, uses model == 0xf, as
+ * one would expect (max value means possible overflow). Sigh.
+ */
+ switch (cpi->cpi_vendor)
+ {
+ case X86_VENDOR_Intel:
+ if (IS_EXTENDED_MODEL_INTEL (cpi->cpi_family))
+ cpi->cpi_model += CPI_MODEL_XTD (regs.eax) << 4;
+ break;
+ case X86_VENDOR_AMD:
+ if (CPI_FAMILY (cpi->cpi_family) == 0xf)
+ cpi->cpi_model += CPI_MODEL_XTD (regs.eax) << 4;
+ break;
+ default:
+ if (cpi->cpi_model == 0xf)
+ cpi->cpi_model += CPI_MODEL_XTD (regs.eax) << 4;
+ break;
+ }
+#endif
+ return cpi;
+}
+
+static inline uint_t
+cpuid_getvendor ()
+{
+ return get_cpuid_info ()->cpi_vendor;
+}
+
+static inline uint_t
+cpuid_getfamily ()
+{
+ return get_cpuid_info ()->cpi_family;
+}
+
+static inline uint_t
+cpuid_getmodel ()
+{
+ return get_cpuid_info ()->cpi_model;
+}
diff --git a/gprofng/common/gp-defs.h b/gprofng/common/gp-defs.h
new file mode 100644
index 00000000000..e92c33e101b
--- /dev/null
+++ b/gprofng/common/gp-defs.h
@@ -0,0 +1,66 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _GP_DEFS_H_
+#define _GP_DEFS_H_
+
+/* Define the ARCH and WSIZE predicates */
+/*
+ * The way we define and use predicates is similar to the
+ * standard #assert with one important exception:
+ * if an argument of a predicate is not known the result
+ * is 'false' and we want a compile time error to avoid
+ * silent results from typos like ARCH(INTEL), COMPILER(gnu),
+ * etc.
+ */
+#define ARCH(x) TOK_A_##x(ARCH)
+#define TOK_A_Aarch64(x) x##_Aarch64
+#define TOK_A_SPARC(x) x##_SPARC
+#define TOK_A_Intel(x) x##_Intel
+
+#define WSIZE(x) TOK_W_##x(WSIZE)
+#define TOK_W_32(x) x##_32
+#define TOK_W_64(x) x##_64
+
+#if defined(sparc) || defined(__sparcv9)
+#define ARCH_SPARC 1
+#elif defined(__i386__) || defined(__x86_64)
+#define ARCH_Intel 1
+#elif defined(__aarch64__)
+#define ARCH_Aarch64 1
+#else
+#error "Undefined platform"
+#endif
+
+#if defined(__sparcv9) || defined(__x86_64) || defined(__aarch64__)
+#define WSIZE_64 1
+#else
+#define WSIZE_32 1
+#endif
+
+#ifndef ATTRIBUTE_FALLTHROUGH
+# if (GCC_VERSION >= 7000)
+# define ATTRIBUTE_FALLTHROUGH __attribute__ ((__fallthrough__))
+# else
+# define ATTRIBUTE_FALLTHROUGH /* Fall through */
+# endif
+#endif
+
+#endif
diff --git a/gprofng/common/gp-experiment.h b/gprofng/common/gp-experiment.h
new file mode 100644
index 00000000000..040c2d11340
--- /dev/null
+++ b/gprofng/common/gp-experiment.h
@@ -0,0 +1,186 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _EXPERIMENT_H
+#define _EXPERIMENT_H
+
+/* version numbers define experiment format */
+#define SUNPERF_VERNUM 12
+#define SUNPERF_VERNUM_MINOR 4
+
+/* backward compatibility down to: */
+#define SUNPERF_VERNUM_LEAST 12
+
+#include "Emsgnum.h" /* for COL_ERROR_*, etc. symbols */
+
+#define SP_REMOTE_PROTOCOL_VERSION "12.4.1"
+
+#define SP_GROUP_HEADER "#analyzer experiment group"
+
+/* Experiment name macro definitions */
+
+/* for descendant experiments */
+#define DESCENDANT_EXPT_KEY ".er/_"
+#define IS_DESC_EXPT(exptname) (strstr(exptname,DESCENDANT_EXPT_KEY) != NULL)
+#define IS_FNDR_EXPT(exptname) (strstr(exptname,DESCENDANT_EXPT_KEY) == NULL)
+
+/* File name definitions */
+#define SP_ARCHIVES_DIR "archives"
+#define SP_ARCHIVE_LOG_FILE "archive.log"
+#define SP_LOG_FILE "log.xml"
+#define SP_NOTES_FILE "notes"
+#define SP_IFREQ_FILE "ifreq"
+#define SP_MAP_FILE "map.xml"
+#define SP_LABELS_FILE "labels.xml"
+#define SP_DYNTEXT_FILE "dyntext"
+#define SP_OVERVIEW_FILE "overview"
+#define SP_PROFILE_FILE "profile"
+#define SP_SYNCTRACE_FILE "synctrace"
+#define SP_IOTRACE_FILE "iotrace"
+#define SP_OMPTRACE_FILE "omptrace"
+#define SP_MPVIEW_FILE "mpview.dat3"
+#define SP_HWCNTR_FILE "hwcounters"
+#define SP_HEAPTRACE_FILE "heaptrace"
+#define SP_JCLASSES_FILE "jclasses"
+#define SP_DYNAMIC_CLASSES "jdynclasses"
+#define SP_RACETRACE_FILE "dataraces"
+#define SP_DEADLOCK_FILE "deadlocks"
+#define SP_FRINFO_FILE "frameinfo"
+#define SP_WARN_FILE "warnings.xml"
+
+#define SP_LIBCOLLECTOR_NAME "libgp-collector.so"
+#define SP_LIBAUDIT_NAME "libcollect-ng.so"
+
+/* XML tags */
+#define SP_TAG_COLLECTOR "collector"
+#define SP_TAG_CPU "cpu"
+#define SP_TAG_DATAPTR "dataptr"
+#define SP_TAG_EVENT "event"
+#define SP_TAG_EXPERIMENT "experiment"
+#define SP_TAG_FIELD "field"
+#define SP_TAG_PROCESS "process"
+#define SP_TAG_PROFILE "profile"
+#define SP_TAG_PROFDATA "profdata"
+#define SP_TAG_PROFPCKT "profpckt"
+#define SP_TAG_SETTING "setting"
+#define SP_TAG_STATE "state"
+#define SP_TAG_SYSTEM "system"
+#define SP_TAG_POWERM "powerm"
+#define SP_TAG_FREQUENCY "frequency"
+#define SP_TAG_DTRACEFATAL "dtracefatal"
+
+/* records for log and loadobjects files */
+/* note that these are in alphabetical order */
+#define SP_JCMD_ARCH "architecture"
+#define SP_JCMD_ARCHIVE "archive_run"
+#define SP_JCMD_ARGLIST "arglist"
+#define SP_JCMD_BLKSZ "blksz"
+#define SP_JCMD_CERROR "cerror"
+#define SP_JCMD_CLASS_LOAD "class_load"
+#define SP_JCMD_CLASS_UNLOAD "class_unload"
+#define SP_JCMD_COLLENV "collenv"
+#define SP_JCMD_COMMENT "comment"
+#define SP_JCMD_CPUID "cpuid"
+#define SP_JCMD_CWARN "cwarn"
+#define SP_JCMD_CWD "cwd"
+#define SP_JCMD_CVERSION "cversion"
+#define SP_JCMD_DATARACE "datarace"
+#define SP_JCMD_DEADLOCK "deadlock"
+#define SP_JCMD_DELAYSTART "delay_start"
+#define SP_JCMD_DESC_START "desc_start"
+#define SP_JCMD_DESC_STARTED "desc_started"
+#define SP_JCMD_DVERSION "dversion"
+#define SP_JCMD_EXEC_START "exec_start"
+#define SP_JCMD_EXEC_ERROR "exec_error"
+#define SP_JCMD_EXIT "exit"
+#define SP_JCMD_EXPT_DURATION "exp_duration"
+#define SP_JCMD_FAKETIME "faketime"
+#define SP_JCMD_FN_LOAD "fn_load"
+#define SP_JCMD_FN_UNLOAD "fn_unload"
+#define SP_JCMD_FUN_MAP "fun_map"
+#define SP_JCMD_FUN_UNMAP "fun_unmap"
+#define SP_JCMD_HEAPTRACE "heaptrace"
+#define SP_JCMD_HOSTNAME "hostname"
+#define SP_JCMD_HWC_DEFAULT "hwc_default"
+#define SP_JCMD_HW_COUNTER "hwcounter"
+#define SP_JCMD_HW_SIM_CTR "hwsimctr"
+#define SP_JCMD_IOTRACE "iotrace"
+#define SP_JCMD_JCM_LOAD "jcm_load"
+#define SP_JCMD_JCM_UNLOAD "jcm_unload"
+#define SP_JCMD_JCM_MAP "jcm_map"
+#define SP_JCMD_JCM_UNMAP "jcm_unmap"
+#define SP_JCMD_JTHREND "jthread_end"
+#define SP_JCMD_JTHRSTART "jthread_start"
+#define SP_JCMD_GCEND "gc_end"
+#define SP_JCMD_GCSTART "gc_start"
+#define SP_JCMD_JVERSION "jversion"
+//#define SP_JCMD_KPROFILE "kprofile" /* TBR */
+#define SP_JCMD_LIMIT "limit"
+#define SP_JCMD_LINETRACE "linetrace"
+#define SP_JCMD_LO_OPEN "lo_open"
+#define SP_JCMD_LO_CLOSE "lo_close"
+#define SP_JCMD_MOD_OPEN "mod_open"
+#define SP_JCMD_MPIEXP "MPIexperiment"
+#define SP_JCMD_MPI_NO_TRACE "MPI_no_trace"
+#define SP_JCMD_MPIOMPVER "mpi_openmpi_version"
+#define SP_JCMD_MPITRACEVER "mpi_trace_version"
+#define SP_JCMD_MPIPP "mpipp"
+#define SP_JCMD_MPIPPERR "mpipp_err"
+#define SP_JCMD_MPIPPWARN "mpipp_warn"
+#define SP_JCMD_MPISTATE "mpistate"
+#define SP_JCMD_MPITRACE "mpitrace" /* backwards compat only */
+#define SP_JCMD_MPVIEW "mpview"
+#define SP_JCMD_MSGTRACE "msgtrace"
+#define SP_JCMD_NOIDLE "noidle"
+#define SP_JCMD_OMPTRACE "omptrace"
+#define SP_JCMD_OS "os"
+#define SP_JCMD_PAGESIZE "pagesize"
+#define SP_JCMD_PAUSE "pause"
+#define SP_JCMD_PAUSE_SIG "pause_signal"
+#define SP_JCMD_PROFILE "profile"
+#define SP_JCMD_RESUME "resume"
+#define SP_JCMD_RUN "run"
+#define SP_JCMD_SAMPLE "sample"
+#define SP_JCMD_SAMPLE_PERIOD "sample_period"
+#define SP_JCMD_SAMPLE_SIG "sample_signal"
+#define SP_JCMD_SEGMENT_MAP "seg_map"
+#define SP_JCMD_SEGMENT_UNMAP "seg_unmap"
+#define SP_JCMD_SRCHPATH "search_path"
+#define SP_JCMD_STACKBASE "stackbase"
+#define SP_JCMD_SUNPERF "sunperf"
+#define SP_JCMD_SYNCTRACE "synctrace"
+#define SP_JCMD_TERMINATE "terminate"
+#define SP_JCMD_THREAD_PAUSE "thread_pause"
+#define SP_JCMD_THREAD_RESUME "thread_resume"
+#define SP_JCMD_USERNAME "username"
+#define SP_JCMD_VERSION "version"
+#define SP_JCMD_WSIZE "wsize"
+
+/* strings naming memory-segments */
+#define SP_MAP_ANON "Anon"
+#define SP_MAP_HEAP "Heap"
+#define SP_MAP_STACK "Stack"
+#define SP_MAP_SHMEM "SHMid"
+#define SP_MAP_UNRESOLVABLE "Unresolvable"
+
+#define SP_UNKNOWN_NAME "(unknown)"
+
+#define MAX_STACKDEPTH 2048
+#endif /* _EXPERIMENT_H */
diff --git a/gprofng/common/gp-time.h b/gprofng/common/gp-time.h
new file mode 100644
index 00000000000..775537041d1
--- /dev/null
+++ b/gprofng/common/gp-time.h
@@ -0,0 +1,46 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _GP_TIME_H_
+#define _GP_TIME_H_
+
+#include <sys/time.h>
+
+typedef long long hrtime_t;
+typedef struct timespec timestruc_t;
+
+#define ITIMER_REALPROF ITIMER_PROF
+#define NANOSEC 1000000000
+#define MICROSEC 1000000
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+ hrtime_t gethrtime (void);
+ hrtime_t gethrvtime (void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
diff --git a/gprofng/common/hwc_cpus.h b/gprofng/common/hwc_cpus.h
new file mode 100644
index 00000000000..ff7b30368e2
--- /dev/null
+++ b/gprofng/common/hwc_cpus.h
@@ -0,0 +1,198 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+/* Hardware counter profiling: cpu types */
+
+#ifndef __HWC_CPUS_H
+#define __HWC_CPUS_H
+
+#define MAX_PICS 20 /* Max # of HW ctrs that can be enabled simultaneously */
+
+ /* type for specifying CPU register number */
+ typedef int regno_t;
+#define REGNO_ANY ((regno_t)-1)
+#define REGNO_INVALID ((regno_t)-2)
+
+ /* --- Utilities for use with regno_t and reg_list[] --- */
+#define REG_LIST_IS_EMPTY(reg_list) (!(reg_list) || (reg_list)[0] == REGNO_ANY)
+#define REG_LIST_EOL(regno) ((regno)==REGNO_ANY)
+#define REG_LIST_SINGLE_VALID_ENTRY(reg_list) \
+ (((reg_list) && (reg_list)[1] == REGNO_ANY && \
+ (reg_list)[0] != REGNO_ANY ) ? (reg_list)[0] : REGNO_ANY)
+
+ /* enum for specifying unknown or uninitialized CPU */
+ enum
+ {
+ CPUVER_GENERIC = 0,
+ CPUVER_UNDEFINED = -1
+ };
+
+ // Note: changing an values below may make older HWC experiments unreadable.
+ // --- Sun/Oracle SPARC ---
+#define CPC_ULTRA1 1000
+#define CPC_ULTRA2 1001
+#define CPC_ULTRA3 1002
+#define CPC_ULTRA3_PLUS 1003
+#define CPC_ULTRA3_I 1004
+#define CPC_ULTRA4_PLUS 1005 /* Panther */
+#define CPC_ULTRA4 1017 /* Jaguar */
+#define CPC_ULTRA_T1 1100 /* Niagara1 */
+#define CPC_ULTRA_T2 1101 /* Niagara2 */
+#define CPC_ULTRA_T2P 1102
+#define CPC_ULTRA_T3 1103
+#define CPC_SPARC_T4 1104
+#define CPC_SPARC_T5 1110
+#define CPC_SPARC_T6 1120
+// #define CPC_SPARC_T7 1130 // use CPC_SPARC_M7
+#define CPC_SPARC_M4 1204 /* Obsolete */
+#define CPC_SPARC_M5 1210
+#define CPC_SPARC_M6 1220
+#define CPC_SPARC_M7 1230
+#define CPC_SPARC_M8 1240
+
+ // --- Intel ---
+ // Pentium
+#define CPC_PENTIUM 2000
+#define CPC_PENTIUM_MMX 2001
+#define CPC_PENTIUM_PRO 2002
+#define CPC_PENTIUM_PRO_MMX 2003
+#define CPC_PENTIUM_4 2017
+#define CPC_PENTIUM_4_HT 2027
+
+ // Core Microarchitecture (Merom/Menryn)
+#define CPC_INTEL_CORE2 2028
+#define CPC_INTEL_NEHALEM 2040
+#define CPC_INTEL_WESTMERE 2042
+#define CPC_INTEL_SANDYBRIDGE 2045
+#define CPC_INTEL_IVYBRIDGE 2047
+#define CPC_INTEL_ATOM 2050 /* Atom*/
+#define CPC_INTEL_HASWELL 2060
+#define CPC_INTEL_BROADWELL 2070
+#define CPC_INTEL_SKYLAKE 2080
+#define CPC_INTEL_UNKNOWN 2499
+#define CPC_AMD_K8C 2500 /* Opteron, Athlon... */
+#define CPC_AMD_FAM_10H 2501 /* Barcelona, Shanghai... */
+#define CPC_AMD_FAM_11H 2502 /* Griffin... */
+#define CPC_AMD_FAM_15H 2503
+#define CPC_KPROF 3003 // OBSOLETE (To support 12.3 and earlier)
+#define CPC_FOX 3004 /* pseudo-chip */
+
+ // --- Fujitsu ---
+#define CPC_SPARC64_III 3000
+#define CPC_SPARC64_V 3002
+#define CPC_SPARC64_VI 4003 /* OPL-C */
+#define CPC_SPARC64_VII 4004 /* Jupiter */
+#define CPC_SPARC64_X 4006 /* Athena */
+#define CPC_SPARC64_XII 4010 /* Athena++ */
+
+// aarch64. Constants from arch/arm64/include/asm/cputype.h
+enum {
+ ARM_CPU_IMP_ARM = 0x41,
+ ARM_CPU_IMP_BRCM = 0x42,
+ ARM_CPU_IMP_CAVIUM = 0x43,
+ ARM_CPU_IMP_APM = 0x50,
+ ARM_CPU_IMP_QCOM = 0x51
+};
+
+#define AARCH64_VENDORSTR_ARM "ARM"
+
+ /* strings below must match those returned by cpc_getcpuver() */
+ typedef struct
+ {
+ int cpc2_cpuver;
+ const char * cpc2_cciname;
+ } libcpc2_cpu_lookup_t;
+#define LIBCPC2_CPU_LOOKUP_LIST \
+ {CPC_AMD_K8C , "AMD Opteron & Athlon64"}, \
+ {CPC_AMD_FAM_10H , "AMD Family 10h"}, \
+ {CPC_AMD_FAM_11H , "AMD Family 11h"}, \
+ {CPC_AMD_FAM_15H , "AMD Family 15h Model 01h"}, \
+ {CPC_AMD_FAM_15H , "AMD Family 15h Model 02h"},/*future*/ \
+ {CPC_AMD_FAM_15H , "AMD Family 15h Model 03h"},/*future*/ \
+ {CPC_PENTIUM_4_HT , "Pentium 4 with HyperThreading"}, \
+ {CPC_PENTIUM_4 , "Pentium 4"}, \
+ {CPC_PENTIUM_PRO_MMX , "Pentium Pro with MMX, Pentium II"}, \
+ {CPC_PENTIUM_PRO , "Pentium Pro, Pentium II"}, \
+ {CPC_PENTIUM_MMX , "Pentium with MMX"}, \
+ {CPC_PENTIUM , "Pentium"}, \
+ {CPC_INTEL_CORE2 , "Core Microarchitecture"}, \
+ /* Merom: F6M15: Clovertown, Kentsfield, Conroe, Merom, Woodcrest */ \
+ /* Merom: F6M22: Merom Conroe */ \
+ /* Penryn: F6M23: Yorkfield, Wolfdale, Penryn, Harpertown */ \
+ /* Penryn: F6M29: Dunnington */ \
+ {CPC_INTEL_NEHALEM , "Intel Arch PerfMon v3 on Family 6 Model 26"},/*Bloomfield, Nehalem EP*/ \
+ {CPC_INTEL_NEHALEM , "Intel Arch PerfMon v3 on Family 6 Model 30"},/*Clarksfield, Lynnfield, Jasper Forest*/ \
+ {CPC_INTEL_NEHALEM , "Intel Arch PerfMon v3 on Family 6 Model 31"},/*(TBD)*/ \
+ {CPC_INTEL_NEHALEM , "Intel Arch PerfMon v3 on Family 6 Model 46"},/*Nehalem EX*/ \
+ {CPC_INTEL_WESTMERE , "Intel Arch PerfMon v3 on Family 6 Model 37"},/*Arrandale, Clarskdale*/ \
+ {CPC_INTEL_WESTMERE , "Intel Arch PerfMon v3 on Family 6 Model 44"},/*Gulftown, Westmere EP*/ \
+ {CPC_INTEL_WESTMERE , "Intel Arch PerfMon v3 on Family 6 Model 47"},/*Westmere EX*/ \
+ {CPC_INTEL_SANDYBRIDGE , "Intel Arch PerfMon v3 on Family 6 Model 42"},/*Sandy Bridge*/ \
+ {CPC_INTEL_SANDYBRIDGE , "Intel Arch PerfMon v3 on Family 6 Model 45"},/*Sandy Bridge E, SandyBridge-EN, SandyBridge EP*/ \
+ {CPC_INTEL_IVYBRIDGE , "Intel Arch PerfMon v3 on Family 6 Model 58"},/*Ivy Bridge*/ \
+ {CPC_INTEL_IVYBRIDGE , "Intel Arch PerfMon v3 on Family 6 Model 62"},/*(TBD)*/ \
+ {CPC_INTEL_ATOM , "Intel Arch PerfMon v3 on Family 6 Model 28"},/*Atom*/ \
+ {CPC_INTEL_HASWELL , "Intel Arch PerfMon v3 on Family 6 Model 60"},/*Haswell*/ \
+ {CPC_INTEL_HASWELL , "Intel Arch PerfMon v3 on Family 6 Model 63"},/*Haswell*/ \
+ {CPC_INTEL_HASWELL , "Intel Arch PerfMon v3 on Family 6 Model 69"},/*Haswell*/ \
+ {CPC_INTEL_HASWELL , "Intel Arch PerfMon v3 on Family 6 Model 70"},/*Haswell*/ \
+ {CPC_INTEL_BROADWELL , "Intel Arch PerfMon v3 on Family 6 Model 61"},/*Broadwell*/ \
+ {CPC_INTEL_BROADWELL , "Intel Arch PerfMon v3 on Family 6 Model 71"},/*Broadwell*/ \
+ {CPC_INTEL_BROADWELL , "Intel Arch PerfMon v3 on Family 6 Model 79"},/*Broadwell*/ \
+ {CPC_INTEL_BROADWELL , "Intel Arch PerfMon v3 on Family 6 Model 86"},/*Broadwell*/ \
+ {CPC_INTEL_SKYLAKE , "Intel Arch PerfMon v4 on Family 6 Model 78"},/*Skylake*/ \
+ {CPC_INTEL_SKYLAKE , "Intel Arch PerfMon v4 on Family 6 Model 85"},/*Skylake*/ \
+ {CPC_INTEL_SKYLAKE , "Intel Arch PerfMon v4 on Family 6 Model 94"},/*Skylake*/ \
+ {CPC_INTEL_UNKNOWN , "Intel Arch PerfMon"},/*Not yet in table*/ \
+ {CPC_SPARC64_III , "SPARC64 III"/*?*/}, \
+ {CPC_SPARC64_V , "SPARC64 V"/*?*/}, \
+ {CPC_SPARC64_VI , "SPARC64 VI"}, \
+ {CPC_SPARC64_VII , "SPARC64 VI & VII"}, \
+ {CPC_SPARC64_X , "SPARC64 X"}, \
+ {CPC_SPARC64_XII , "SPARC64 XII"}, \
+ {CPC_ULTRA_T1 , "UltraSPARC T1"}, \
+ {CPC_ULTRA_T2 , "UltraSPARC T2"}, \
+ {CPC_ULTRA_T2P , "UltraSPARC T2+"}, \
+ {CPC_ULTRA_T3 , "SPARC T3"}, \
+ {CPC_SPARC_T4 , "SPARC T4"}, \
+ {CPC_SPARC_M4 , "SPARC M4"}, \
+ {CPC_SPARC_T5 , "SPARC T5"}, \
+ {CPC_SPARC_M5 , "SPARC M5"}, \
+ {CPC_SPARC_T6 , "SPARC T6"}, \
+ {CPC_SPARC_M6 , "SPARC M6"}, \
+ {CPC_SPARC_M7 , "SPARC T7"}, \
+ {CPC_SPARC_M7 , "SPARC 3e40"}, \
+ {CPC_SPARC_M7 , "SPARC M7"}, \
+ {CPC_SPARC_M8 , "SPARC 3e50"}, \
+ {CPC_ULTRA4_PLUS , "UltraSPARC IV+"}, \
+ {CPC_ULTRA4 , "UltraSPARC IV"}, \
+ {CPC_ULTRA3_I , "UltraSPARC IIIi"}, \
+ {CPC_ULTRA3_I , "UltraSPARC IIIi & IIIi+"}, \
+ {CPC_ULTRA3_PLUS , "UltraSPARC III+"}, \
+ {CPC_ULTRA3_PLUS , "UltraSPARC III+ & IV"}, \
+ {CPC_ULTRA3 , "UltraSPARC III"}, \
+ {CPC_ULTRA2 , "UltraSPARC I&II"}, \
+ {CPC_ULTRA1 , "UltraSPARC I&II"}, \
+ {ARM_CPU_IMP_APM , AARCH64_VENDORSTR_ARM}, \
+ {0, NULL}
+ /* init like this:
+ static libcpc2_cpu_lookup_t cpu_table[]={LIBCPC2_CPU_LOOKUP_LIST};
+ */
+#endif
diff --git a/gprofng/common/hwcdrv.c b/gprofng/common/hwcdrv.c
new file mode 100644
index 00000000000..caab9839b49
--- /dev/null
+++ b/gprofng/common/hwcdrv.c
@@ -0,0 +1,1454 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include <errno.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <sys/mman.h>
+#include <sys/ioctl.h>
+#include <sys/syscall.h>
+#include <linux/perf_event.h>
+
+#include "hwcdrv.h"
+
+/*---------------------------------------------------------------------------*/
+/* macros */
+#define IS_GLOBAL /* Mark global symbols */
+
+#include "cpuid.c" /* ftns for identifying a chip */
+
+static hdrv_pcbe_api_t hdrv_pcbe_core_api;
+static hdrv_pcbe_api_t hdrv_pcbe_opteron_api;
+static hdrv_pcbe_api_t *hdrv_pcbe_drivers[] = {
+ &hdrv_pcbe_core_api,
+ &hdrv_pcbe_opteron_api,
+ NULL
+};
+#include "opteron_pcbe.c" /* CPU-specific code */
+#include "core_pcbe.c" /* CPU-specific code */
+
+extern hwcdrv_api_t hwcdrv_pcl_api;
+IS_GLOBAL hwcdrv_api_t *hwcdrv_drivers[] = {
+ &hwcdrv_pcl_api,
+ NULL
+};
+
+/*---------------------------------------------------------------------------*/
+
+/* utils for drivers */
+IS_GLOBAL int
+hwcdrv_assign_all_regnos (Hwcentry* entries[], unsigned numctrs)
+{
+ unsigned int pmc_assigned[MAX_PICS];
+ unsigned idx;
+ for (int ii = 0; ii < MAX_PICS; ii++)
+ pmc_assigned[ii] = 0;
+
+ /* assign the HWCs that we already know about */
+ for (idx = 0; idx < numctrs; idx++)
+ {
+ regno_t regno = entries[idx]->reg_num;
+ if (regno == REGNO_ANY)
+ {
+ /* check to see if list of possible registers only contains one entry */
+ regno = REG_LIST_SINGLE_VALID_ENTRY (entries[idx]->reg_list);
+ }
+ if (regno != REGNO_ANY)
+ {
+ if (regno < 0 || regno >= MAX_PICS || !regno_is_valid (entries[idx], regno))
+ {
+ logerr (GTXT ("For counter #%d, register %d is out of range\n"), idx + 1, regno); /*!*/
+ return HWCFUNCS_ERROR_HWCARGS;
+ }
+ TprintfT (DBG_LT2, "hwcfuncs_assign_regnos(): preselected: idx=%d, regno=%d\n", idx, regno);
+ entries[idx]->reg_num = regno; /* assigning back to entries */
+ pmc_assigned[regno] = 1;
+ }
+ }
+
+ /* assign HWCs that are currently REGNO_ANY */
+ for (idx = 0; idx < numctrs; idx++)
+ {
+ if (entries[idx]->reg_num == REGNO_ANY)
+ {
+ int assigned = 0;
+ regno_t *reg_list = entries[idx]->reg_list;
+ for (; reg_list && *reg_list != REGNO_ANY; reg_list++)
+ {
+ regno_t regno = *reg_list;
+ if (regno < 0 || regno >= MAX_PICS)
+ {
+ logerr (GTXT ("For counter #%d, register %d is out of range\n"), idx + 1, regno); /*!*/
+ return HWCFUNCS_ERROR_HWCARGS;
+ }
+ if (pmc_assigned[regno] == 0)
+ {
+ TprintfT (DBG_LT2, "hwcfuncs_assign_regnos(): assigned: idx=%d, regno=%d\n", idx, regno);
+ entries[idx]->reg_num = regno; /* assigning back to entries */
+ pmc_assigned[regno] = 1;
+ assigned = 1;
+ break;
+ }
+ }
+ if (!assigned)
+ {
+ logerr (GTXT ("Counter '%s' could not be bound to a register\n"),
+ entries[idx]->name ? entries[idx]->name : "<NULL>");
+ return HWCFUNCS_ERROR_HWCARGS;
+ }
+ }
+ }
+ return 0;
+}
+
+IS_GLOBAL int
+hwcdrv_lookup_cpuver (const char * cpcN_cciname)
+{
+ libcpc2_cpu_lookup_t *plookup;
+ static libcpc2_cpu_lookup_t cpu_table[] = {
+ LIBCPC2_CPU_LOOKUP_LIST
+ };
+ if (cpcN_cciname == NULL)
+ return CPUVER_UNDEFINED;
+
+ /* search table for name */
+ for (plookup = cpu_table; plookup->cpc2_cciname; plookup++)
+ {
+ int n = strlen (plookup->cpc2_cciname);
+ if (!strncmp (plookup->cpc2_cciname, cpcN_cciname, n))
+ return plookup->cpc2_cpuver;
+ }
+ /* unknown, but does have a descriptive string */
+ TprintfT (DBG_LT0, "hwcfuncs: CPC2: WARNING: Id of processor '%s' "
+ "could not be determined\n",
+ cpcN_cciname);
+ return CPUVER_GENERIC;
+}
+
+/*---------------------------------------------------------------------------*/
+/* utils to generate x86 register definitions on Linux */
+
+/*
+ * This code is structured as though we're going to initialize the
+ * HWC by writing the Intel MSR register directly. That is, we
+ * assume the lowest 16 bits of the event number will have the event
+ * and that higher bits will set attributes.
+ *
+ * While SPARC is different, we can nonetheless use basically the
+ * same "x86"-named functions:
+ *
+ * - The event code will still be 16 bits. It will still
+ * be in the lowest 16 bits of the event number. Though
+ * perf_event_code() on SPARC will expect those bits to
+ * shifted, hwcdrv_pcl.c can easily perform that shift.
+ *
+ * - On SPARC we support only two attributes, "user" and "system",
+ * which hwcdrv_pcl.c already converts to the "exclude_user"
+ * and "exclude_kernel" fields expected by perf_event_open().
+ * "user" and "system" are stored in event bits 16 and 17.
+ * For M8, a 4-bit mask of supported PICs is stored in bits [23:20].
+ */
+
+IS_GLOBAL hwcdrv_get_eventnum_fn_t *hwcdrv_get_x86_eventnum = 0;
+
+static const attr_info_t perfctr_sparc_attrs[] = {
+ {NTXT ("user"), 0, 0x01, 16}, //usr
+ {NTXT ("system"), 0, 0x01, 17}, //os
+ {NULL, 0, 0x00, 0},
+};
+static const attr_info_t perfctr_x64_attrs[] = {/* ok for Core2 & later */
+ {NTXT ("umask"), 0, 0xff, 8},
+ {NTXT ("user"), 0, 0x01, 16}, //usr
+ //{NTXT("nouser"), 1, 0x01, 16}, //usr (inverted)
+ {NTXT ("system"), 0, 0x01, 17}, //os
+ {NTXT ("edge"), 0, 0x01, 18},
+ {NTXT ("pc"), 0, 0x01, 19},
+ {NTXT ("inv"), 0, 0x01, 23},
+ {NTXT ("cmask"), 0, 0xff, 24},
+ {NULL, 0, 0x00, 0},
+};
+const attr_info_t *perfctr_attrs_table = perfctr_x64_attrs;
+
+static const eventsel_t perfctr_evntsel_enable_bits = (0x01 << 16) | /* usr */
+ // (0xff << 0) | /* event*/
+ // (0xff << 8) | /* umask */
+ // (0x01 << 17) | /* os */
+ // (0x01 << 18) | /* edge */
+ // (0x01 << 19) | /* pc */
+ (0x01 << 20) | /* int */
+ // (0x01 << 21) | /* reserved */
+ (0x01 << 22) | /* enable */
+ // (0x01 << 23) | /* inv */
+ // (0xff << 24) | /* cmask */
+ 0;
+
+static int
+myperfctr_get_x86_eventnum (const char *eventname, uint_t pmc,
+ eventsel_t *eventsel, eventsel_t *valid_umask,
+ uint_t *pmc_sel)
+{
+ if (hwcdrv_get_x86_eventnum &&
+ !hwcdrv_get_x86_eventnum (eventname, pmc, eventsel, valid_umask, pmc_sel))
+ return 0;
+
+ /* check for numerically-specified counters */
+ char * endptr;
+ uint64_t num = strtoull (eventname, &endptr, 0);
+ if (*eventname && !*endptr)
+ {
+ *eventsel = EXTENDED_EVNUM_2_EVSEL (num);
+ *valid_umask = 0xff; /* allow any umask (unused for SPARC?) */
+ *pmc_sel = pmc;
+ return 0;
+ }
+
+ /* name does not specify a numeric value */
+ *eventsel = (eventsel_t) - 1;
+ *valid_umask = 0x0;
+ *pmc_sel = pmc;
+ return -1;
+}
+
+static int
+mask_shift_set (eventsel_t *presult, eventsel_t invalue,
+ eventsel_t mask, eventsel_t shift)
+{
+ if (invalue & ~mask)
+ return -1; /* invalue attempts to set bits outside of mask */
+ *presult &= ~(mask << shift); /* clear all the mask bits */
+ *presult |= (invalue << shift); /* set bits according to invalue */
+ return 0;
+}
+
+static int
+set_x86_attr_bits (eventsel_t *result_mask, eventsel_t evnt_valid_umask,
+ hwcfuncs_attr_t attrs[], int nattrs, const char*nameOnly)
+{
+ eventsel_t evntsel = *result_mask;
+ for (int ii = 0; ii < (int) nattrs; ii++)
+ {
+ const char *attrname = attrs[ii].ca_name;
+ eventsel_t attrval = (eventsel_t) attrs[ii].ca_val;
+ const char *tmpname;
+ int attr_found = 0;
+ for (int jj = 0; (tmpname = perfctr_attrs_table[jj].attrname); jj++)
+ {
+ if (strcmp (attrname, tmpname) == 0)
+ {
+ if (strcmp (attrname, "umask") == 0)
+ {
+ if (attrval & ~evnt_valid_umask)
+ {
+ logerr (GTXT ("for `%s', allowable umask bits are: 0x%llx\n"),
+ nameOnly, (long long) evnt_valid_umask);
+ return -1;
+ }
+ }
+ if (mask_shift_set (&evntsel,
+ perfctr_attrs_table[jj].is_inverted ? (attrval^1) : attrval,
+ perfctr_attrs_table[jj].mask,
+ perfctr_attrs_table[jj].shift))
+ {
+ logerr (GTXT ("`%s' attribute `%s' could not be set to 0x%llx\n"),
+ nameOnly, attrname, (long long) attrval);
+ return -1;
+ }
+ TprintfT (DBG_LT2, "hwcfuncs: Counter %s, attribute %s set to 0x%llx\n",
+ nameOnly, attrname, (long long) attrval);
+ attr_found = 1;
+ break;
+ }
+ }
+ if (!attr_found)
+ {
+ logerr (GTXT ("attribute `%s' is invalid\n"), attrname);
+ return -1;
+ }
+ }
+ *result_mask = evntsel;
+ return 0;
+}
+
+IS_GLOBAL int
+hwcfuncs_get_x86_eventsel (unsigned int regno, const char *int_name,
+ eventsel_t *return_event, uint_t *return_pmc_sel)
+{
+ hwcfuncs_attr_t attrs[HWCFUNCS_MAX_ATTRS + 1];
+ unsigned nattrs = 0;
+ char *nameOnly = NULL;
+ eventsel_t evntsel = 0; // event number
+ eventsel_t evnt_valid_umask = 0;
+ uint_t pmc_sel = 0;
+ int rc = -1;
+ *return_event = 0;
+ *return_pmc_sel = 0;
+ void *attr_mem = hwcfuncs_parse_attrs (int_name, attrs, HWCFUNCS_MAX_ATTRS,
+ &nattrs, NULL);
+ if (!attr_mem)
+ {
+ logerr (GTXT ("out of memory, could not parse attributes\n"));
+ return -1;
+ }
+ hwcfuncs_parse_ctr (int_name, NULL, &nameOnly, NULL, NULL, NULL);
+ if (regno == REGNO_ANY)
+ {
+ logerr (GTXT ("reg# could not be determined for `%s'\n"), nameOnly);
+ goto attr_wrapup;
+ }
+
+ /* look up evntsel */
+ if (myperfctr_get_x86_eventnum (nameOnly, regno,
+ &evntsel, &evnt_valid_umask, &pmc_sel))
+ {
+ logerr (GTXT ("counter `%s' is not valid\n"), nameOnly);
+ goto attr_wrapup;
+ }
+ TprintfT (DBG_LT1, "hwcfuncs: event=0x%llx pmc=0x%x '%s' nattrs = %u\n",
+ (long long) evntsel, pmc_sel, nameOnly, nattrs);
+
+ /* determine event attributes */
+ eventsel_t evnt_attrs = perfctr_evntsel_enable_bits;
+ if (set_x86_attr_bits (&evnt_attrs, evnt_valid_umask, attrs, nattrs, nameOnly))
+ goto attr_wrapup;
+ if (evntsel & evnt_attrs)
+ TprintfT (DBG_LT0, "hwcfuncs: ERROR - evntsel & enable bits overlap: 0x%llx 0x%llx 0x%llx\n",
+ (long long) evntsel, (long long) evnt_attrs,
+ (long long) (evntsel & evnt_attrs));
+ *return_event = evntsel | evnt_attrs;
+ *return_pmc_sel = pmc_sel;
+ rc = 0;
+
+attr_wrapup:
+ free (attr_mem);
+ free (nameOnly);
+ return rc;
+}
+
+#ifdef __x86_64__
+#define syscall_instr "syscall"
+#define syscall_clobber "rcx", "r11", "memory"
+#endif
+#ifdef __i386__
+#define syscall_instr "int $0x80"
+#define syscall_clobber "memory"
+#endif
+
+static inline int
+perf_event_open (struct perf_event_attr *hw_event_uptr, pid_t pid,
+ int cpu, int group_fd, unsigned long flags)
+{
+ /* It seems that perf_event_open() sometimes fails spuriously,
+ * even while an immediate retry succeeds.
+ * So, let's try a few retries if the call fails just to be sure.
+ */
+ int rc;
+ for (int retry = 0; retry < 5; retry++)
+ {
+ rc = syscall (__NR_perf_event_open, hw_event_uptr, pid, cpu, group_fd, flags);
+ if (rc != -1)
+ return rc;
+ }
+ return rc;
+}
+
+/*---------------------------------------------------------------------------*/
+/* macros & fwd prototypes */
+
+#define HWCDRV_API static /* Mark functions used by hwcdrv API */
+
+HWCDRV_API int hwcdrv_start (void);
+HWCDRV_API int hwcdrv_free_counters ();
+
+static pid_t
+hwcdrv_gettid (void)
+{
+#ifndef LIBCOLLECTOR_SRC
+ return syscall (__NR_gettid);
+#elif defined(intel)
+ pid_t r;
+ __asm__ __volatile__(syscall_instr
+ : "=a" (r) : "0" (__NR_gettid)
+ : syscall_clobber);
+ return r;
+#else
+ return syscall (__NR_gettid); // FIXUP_XXX_SPARC_LINUX // write gettid in asm
+#endif
+}
+
+/*---------------------------------------------------------------------------*/
+/* types */
+
+#define NPAGES_PER_BUF 1 // number of pages to be used for perf_event samples
+// must be a power of 2
+
+/*---------------------------------------------------------------------------*/
+
+/* typedefs */
+
+typedef struct
+{ // event (hwc) definition
+ unsigned int reg_num; // PMC assignment, potentially for detecting conflicts
+ eventsel_t eventsel; // raw event bits (Intel/AMD)
+ uint64_t counter_preload; // number of HWC events before signal
+ struct perf_event_attr hw; // perf_event definition
+ hrtime_t min_time; // minimum time we're targeting between events
+ char *name;
+} perf_event_def_t;
+
+typedef struct
+{ // runtime state of perf_event buffer
+ void *buf; // pointer to mmapped buffer
+ size_t pagesz; // size of pages
+} buffer_state_t;
+
+typedef struct
+{ // runtime state of counter values
+ uint64_t prev_ena_ts; // previous perf_event "enabled" time
+ uint64_t prev_run_ts; // previous perf_event "running" time
+ uint64_t prev_value; // previous HWC value
+} counter_value_state_t;
+
+typedef struct
+{ // per-counter information
+ perf_event_def_t *ev_def; // global HWC definition for one counter
+ int fd; // perf_event fd
+ buffer_state_t buf_state; // perf_event buffer's state
+ counter_value_state_t value_state; // counter state
+ int needs_restart; // workaround for dbx failure to preserve si_fd
+ uint64_t last_overflow_period;
+ hrtime_t last_overflow_time;
+} counter_state_t;
+
+typedef struct
+{ // per-thread context
+ counter_state_t *ctr_list;
+ int signal_fd; // fd that caused the most recent signal
+ pthread_t tid; // for debugging signal delivery problems
+} hdrv_pcl_ctx_t;
+
+/*---------------------------------------------------------------------------*/
+
+/* static variables */
+static struct
+{
+ int library_ok;
+ int internal_open_called;
+ hwcfuncs_tsd_get_fn_t find_vpc_ctx;
+ unsigned hwcdef_cnt; /* number of *active* hardware counters */
+ hwcdrv_get_events_fn_t *get_events;
+} hdrv_pcl_state;
+
+static hwcdrv_about_t hdrv_pcl_about = {.cpcN_cpuver = CPUVER_UNDEFINED};
+static perf_event_def_t global_perf_event_def[MAX_PICS];
+
+#define COUNTERS_ENABLED() (hdrv_pcl_state.hwcdef_cnt)
+
+
+/* perf_event buffer formatting and handling */
+static void
+reset_buf (buffer_state_t *bufstate)
+{
+ TprintfT (0, "hwcdrv: ERROR: perf_event reset_buf() called!\n");
+ struct perf_event_mmap_page *metadata = bufstate->buf;
+ if (metadata)
+ metadata->data_tail = metadata->data_head;
+}
+
+static int
+skip_buf (buffer_state_t *bufstate, size_t sz)
+{
+ TprintfT (DBG_LT1, "hwcdrv: WARNING: perf_event skip_buf called!\n");
+ struct perf_event_mmap_page *metadata = bufstate->buf;
+ if (metadata == NULL)
+ return -1;
+ size_t pgsz = bufstate->pagesz;
+ size_t bufsz = NPAGES_PER_BUF*pgsz;
+ uint64_t d_tail = metadata->data_tail;
+ uint64_t d_head = metadata->data_head;
+
+ // validate request size
+ if (sz > d_head - d_tail || sz >= bufsz)
+ {
+ reset_buf (bufstate);
+ return -1;
+ }
+ metadata->data_tail = d_tail + sz; // advance tail
+ return 0;
+}
+
+static int
+read_buf (buffer_state_t *bufstate, void *buf, size_t sz)
+{
+ struct perf_event_mmap_page *metadata = bufstate->buf;
+ if (metadata == NULL)
+ return -1;
+ size_t pgsz = bufstate->pagesz;
+ size_t bufsz = NPAGES_PER_BUF*pgsz;
+ uint64_t d_tail = metadata->data_tail;
+ uint64_t d_head = metadata->data_head;
+
+ // validate request size
+ if (sz > d_head - d_tail || sz >= bufsz)
+ {
+ reset_buf (bufstate);
+ return -1;
+ }
+ char *buf_base = ((char *) metadata) + pgsz; // start of data buffer
+ uint64_t start_pos = d_tail & (bufsz - 1); // char offset into data buffer
+ size_t nbytes = sz;
+ if (start_pos + sz > bufsz)
+ {
+ // will wrap past end of buffer
+ nbytes = bufsz - start_pos;
+ memcpy (buf, buf_base + start_pos, nbytes);
+ start_pos = 0; // wrap to start
+ buf = (void *) (((char *) buf) + nbytes);
+ nbytes = sz - nbytes;
+ }
+ memcpy (buf, buf_base + start_pos, nbytes);
+ metadata->data_tail += sz;
+ return 0;
+}
+
+static int
+read_u64 (buffer_state_t *bufstate, uint64_t *value)
+{
+ return read_buf (bufstate, value, sizeof (uint64_t));
+}
+
+static int
+read_sample (counter_state_t *ctr_state, int msgsz, uint64_t *rvalue,
+ uint64_t *rlost)
+{
+ // returns count of bytes read
+ buffer_state_t *bufstate = &ctr_state->buf_state;
+ counter_value_state_t *cntstate = &ctr_state->value_state;
+ int readsz = 0;
+
+ // PERF_SAMPLE_IP
+ uint64_t ipc = 0;
+ int rc = read_u64 (bufstate, &ipc);
+ if (rc)
+ return -1;
+ readsz += sizeof (uint64_t);
+
+ // PERF_SAMPLE_READ: value
+ uint64_t value = 0;
+ rc = read_u64 (bufstate, &value);
+ if (rc)
+ return -2;
+ readsz += sizeof (uint64_t);
+
+ /* Bug 20806896
+ * Old Linux kernels (e.g. 2.6.32) on certain systems return enabled and
+ * running times in the sample data that correspond to the metadata times
+ * metadata->time_enabled
+ * metadata->time_running
+ * from the PREVIOUS (not current) sample. Probably just ignore this bug
+ * since it's on old kernels and we only use the enabled and running times
+ * to construct loss_estimate.
+ */
+ // PERF_SAMPLE_READ: PERF_FORMAT_ENABLED
+ uint64_t enabled_time = 0;
+ rc = read_u64 (bufstate, &enabled_time);
+ if (rc)
+ return -3;
+ readsz += sizeof (uint64_t);
+
+ // PERF_SAMPLE_READ: PERF_FORMAT_RUNNING
+ uint64_t running_time = 0;
+ rc = read_u64 (bufstate, &running_time);
+ if (rc)
+ return -4;
+ readsz += sizeof (uint64_t);
+
+ uint64_t value_delta = value - cntstate->prev_value;
+ uint64_t enabled_delta = enabled_time - cntstate->prev_ena_ts;
+ uint64_t running_delta = running_time - cntstate->prev_run_ts;
+ cntstate->prev_value = value;
+ cntstate->prev_ena_ts = enabled_time;
+ cntstate->prev_run_ts = running_time;
+
+ // 24830461 need workaround for Linux anomalous HWC skid overrun
+ int set_error_flag = 0;
+ if (value_delta > 2 * ctr_state->last_overflow_period + 2000 /* HWC_SKID_TOLERANCE */)
+ set_error_flag = 1;
+
+ uint64_t loss_estimate = 0; // estimate loss of events caused by multiplexing
+ if (running_delta == enabled_delta)
+ {
+ // counter was running 100% of time, no multiplexing
+ }
+ else if (running_delta == 0)
+ loss_estimate = 1; // token amount to aid in debugging perfctr oddities
+ else if ((running_delta > enabled_delta) || (enabled_delta & 0x1000000000000000ll))
+ {
+ // running should be smaller than enabled, can't estimate
+ /*
+ * 21418391 HWC can have a negative count
+ *
+ * We've also seen enabled not only be smaller than running
+ * but in fact go negative. Guard against this.
+ */
+ loss_estimate = 2; // token amount to aid in debugging perfctr oddities
+ }
+ else
+ {
+ // counter was running less than 100% of time
+ // Example: ena=7772268 run=6775669 raw_value=316004 scaled_value=362483 loss_est=46479
+ uint64_t scaled_delta = (double) value_delta * enabled_delta / running_delta;
+ value_delta = scaled_delta;
+#if 0
+ // We should perhaps warn the user that multiplexing is going on,
+ // but hwcdrv_pcl.c doesn't know about the collector_interface, SP_JCMD_COMMENT, or COL_COMMENT_* values.
+ // For now we simply don't report.
+ // Perhaps we should address the issue not here but in the caller collector_sigemt_handler(),
+ // but at that level "lost" has a meaning that's considerably broader than just multiplexing.
+ collector_interface->writeLog ("<event kind=\"%s\" id=\"%d\">%s %d -> %d</event>\n",
+ SP_JCMD_COMMENT, COL_COMMENT_HWCADJ, global_perf_event_def[idx].name,
+ ctr_list[idx].last_overflow_period, new_period);
+#endif
+ }
+ TprintfT ((loss_estimate || set_error_flag) ? DBG_LT1 : DBG_LT3,
+ "hwcdrv: '%s' ipc=0x%llx ena=%llu run=%llu "
+ "value_delta=%lld(0x%llx) loss_est=%llu %s error_flag='%s'\n",
+ ctr_state->ev_def->name, (long long) ipc,
+ (long long) enabled_delta, (long long) running_delta,
+ (long long) value_delta, (long long) value_delta,
+ (unsigned long long) loss_estimate,
+ loss_estimate ? ", WARNING - SCALED" : "",
+ set_error_flag ? ", ERRORFLAG" : "");
+ if (set_error_flag == 1)
+ value_delta |= (1ULL << 63) /* HWCVAL_ERR_FLAG */;
+ *rvalue = value_delta;
+ *rlost = loss_estimate;
+ if (readsz != msgsz)
+ {
+ TprintfT (0, "hwcdrv: ERROR: perf_event sample not fully parsed\n");
+ return -5;
+ }
+ return 0;
+}
+
+static void
+dump_perf_event_attr (struct perf_event_attr *at)
+{
+ TprintfT (DBG_LT2, "dump_perf_event_attr: size=%d type=%d sample_period=%lld\n"
+ " config=0x%llx config1=0x%llx config2=0x%llx wakeup_events=%lld __reserved_1=%lld\n",
+ (int) at->size, (int) at->type, (unsigned long long) at->sample_period,
+ (unsigned long long) at->config, (unsigned long long) at->config1,
+ (unsigned long long) at->config2, (unsigned long long) at->wakeup_events,
+ (unsigned long long) at->__reserved_1);
+#define DUMP_F(fld) if (at->fld) TprintfT(DBG_LT2, " %-10s : %lld\n", #fld, (long long) at->fld)
+ DUMP_F (disabled);
+ DUMP_F (inherit);
+ DUMP_F (pinned);
+ DUMP_F (exclusive);
+ DUMP_F (exclude_user);
+ DUMP_F (exclude_kernel);
+ DUMP_F (exclude_hv);
+ DUMP_F (exclude_idle);
+ // DUMP_F(xmmap);
+ DUMP_F (comm);
+ DUMP_F (freq);
+ DUMP_F (inherit_stat);
+ DUMP_F (enable_on_exec);
+ DUMP_F (task);
+ DUMP_F (watermark);
+}
+
+static void
+init_perf_event (struct perf_event_attr *hw, uint64_t event, uint64_t period)
+{
+ memset (hw, 0, sizeof (struct perf_event_attr));
+ hw->size = sizeof (struct perf_event_attr); // fwd/bwd compat
+
+#if defined(__i386__) || defined(__x86_64)
+ //note: Nehalem/Westmere OFFCORE_RESPONSE in upper 32 bits
+ hw->config = event;
+ hw->type = PERF_TYPE_RAW; // hw/sw/trace/raw...
+#elif defined(__aarch64__)
+ hw->type = (event >> 24) & 7;
+ hw->config = event & 0xff;
+#elif defined(sparc)
+ //SPARC needs to be shifted up 16 bits
+ hw->config = (event & 0xFFFF) << 16; // uint64_t event
+ uint64_t regs = (event >> 20) & 0xf; // see sparc_pcbe.c
+ hw->config |= regs << 4; // for M8, supported PICs need to be placed at bits [7:4]
+ hw->type = PERF_TYPE_RAW; // hw/sw/trace/raw...
+#endif
+
+ hw->sample_period = period;
+ hw->sample_type = PERF_SAMPLE_IP | PERF_SAMPLE_READ |
+ // PERF_SAMPLE_TID |
+ // PERF_SAMPLE_TIME | // possibly interesting
+ // PERF_SAMPLE_ADDR |
+ PERF_SAMPLE_READ | // HWC value
+ // PERF_SAMPLE_CALLCHAIN | // interesting
+ // PERF_SAMPLE_ID |
+ // PERF_SAMPLE_CPU | // possibly interesting
+ // PERF_SAMPLE_PERIOD |
+ // PERF_SAMPLE_STREAM_ID |
+ // PERF_SAMPLE_RAW |
+ 0;
+ hw->read_format =
+ PERF_FORMAT_TOTAL_TIME_ENABLED | // detect when hwc not scheduled
+ PERF_FORMAT_TOTAL_TIME_RUNNING | // detect when hwc not scheduled
+ // PERF_FORMAT_ID |
+ // PERF_FORMAT_GROUP |
+ 0;
+ hw->disabled = 1; /* off by default */
+
+ // Note: the following override config.priv bits!
+ hw->exclude_user = (event & (1 << 16)) == 0; /* don't count user */
+ hw->exclude_kernel = (event & (1 << 17)) == 0; /* ditto kernel */
+ hw->exclude_hv = 1; /* ditto hypervisor */
+ hw->wakeup_events = 1; /* wakeup every n events */
+ dump_perf_event_attr (hw);
+}
+
+static int
+start_one_ctr (int ii, size_t pgsz, hdrv_pcl_ctx_t * pctx, char *error_string)
+{
+ // pe_attr should have been initialized in hwcdrv_create_counters()
+ struct perf_event_attr pe_attr;
+ memcpy (&pe_attr, &global_perf_event_def[ii].hw, sizeof (pe_attr));
+
+ // but we adjust the period, so make sure that pctx->ctr_list[ii].last_overflow_period has been set
+ pe_attr.sample_period = pctx->ctr_list[ii].last_overflow_period;
+
+ int hwc_fd = perf_event_open (&pe_attr, pctx->tid, -1, -1, 0);
+ if (hwc_fd == -1)
+ {
+ TprintfT (DBG_LT1, "%s idx=%d perf_event_open failed, errno=%d\n",
+ error_string, ii, errno);
+ return 1;
+ }
+
+ size_t buffer_area_sz = (NPAGES_PER_BUF + 1) * pgsz; // add a page for metadata
+ void * buf = mmap (NULL, buffer_area_sz, //YXXX is this a safe call?
+ PROT_READ | PROT_WRITE, MAP_SHARED, hwc_fd, 0);
+ if (buf == MAP_FAILED)
+ {
+ TprintfT (0, "sz = %ld, pgsz = %ld\n err=%s idx=%d mmap failed: %s\n",
+ (long) buffer_area_sz, (long) pgsz, error_string, ii, strerror (errno));
+ return 1;
+ }
+ pctx->ctr_list[ii].ev_def = &global_perf_event_def[ii]; // why do we set ev_def? we never seem to use it
+ pctx->ctr_list[ii].fd = hwc_fd;
+ pctx->ctr_list[ii].buf_state.buf = buf;
+ pctx->ctr_list[ii].buf_state.pagesz = pgsz;
+ pctx->ctr_list[ii].value_state.prev_ena_ts = 0;
+ pctx->ctr_list[ii].value_state.prev_run_ts = 0;
+ pctx->ctr_list[ii].value_state.prev_value = 0;
+ pctx->ctr_list[ii].last_overflow_time = gethrtime ();
+
+ /* set async mode */
+ long flags = fcntl (hwc_fd, F_GETFL, 0) | O_ASYNC;
+ int rc = fcntl (hwc_fd, F_SETFL, flags);
+ if (rc == -1)
+ {
+ TprintfT (0, "%s idx=%d O_ASYNC failed\n", error_string, ii);
+ return 1;
+ }
+
+ /*
+ * set lwp ownership of the fd
+ * See BUGS section of "man perf_event_open":
+ * The F_SETOWN_EX option to fcntl(2) is needed to properly get
+ * overflow signals in threads. This was introduced in Linux 2.6.32.
+ * Legacy references:
+ * see http://lkml.org/lkml/2009/8/4/128
+ * google man fcntl F_SETOWN_EX -conflict
+ * "From Linux 2.6.32 onward, use F_SETOWN_EX to target
+ * SIGIO and SIGURG signals at a particular thread."
+ * http://icl.cs.utk.edu/papi/docs/da/d2a/examples__v2_8x_2self__smpl__multi_8c.html
+ * See 2010 CSCADS presentation by Eranian
+ */
+ struct f_owner_ex fowner_ex;
+ fowner_ex.type = F_OWNER_TID;
+ fowner_ex.pid = pctx->tid;
+ rc = fcntl (hwc_fd, F_SETOWN_EX, (unsigned long) &fowner_ex);
+ if (rc == -1)
+ {
+ TprintfT (0, "%s idx=%d F_SETOWN failed\n", error_string, ii);
+ return 1;
+ }
+
+ /* Use sigio so handler can determine FD via siginfo->si_fd. */
+ rc = fcntl (hwc_fd, F_SETSIG, SIGIO);
+ if (rc == -1)
+ {
+ TprintfT (0, "%s idx=%d F_SETSIG failed\n", error_string, ii);
+ return 1;
+ }
+ return 0;
+}
+
+static int
+stop_one_ctr (int ii, counter_state_t *ctr_list)
+{
+ int hwc_rc = 0;
+ if (-1 == ioctl (ctr_list[ii].fd, PERF_EVENT_IOC_DISABLE, 1))
+ {
+ TprintfT (0, "hwcdrv: ERROR: PERF_EVENT_IOC_DISABLE #%d failed: errno=%d\n", ii, errno);
+ hwc_rc = HWCFUNCS_ERROR_GENERIC;
+ }
+ void *buf = ctr_list[ii].buf_state.buf;
+ if (buf)
+ {
+ size_t bufsz = (NPAGES_PER_BUF + 1) * ctr_list[ii].buf_state.pagesz;
+ ctr_list[ii].buf_state.buf = NULL;
+ int tmprc = munmap (buf, bufsz);
+ if (tmprc)
+ {
+ TprintfT (0, "hwcdrv: ERROR: munmap() #%d failed: errno=%d\n", ii, errno);
+ hwc_rc = HWCFUNCS_ERROR_GENERIC;
+ }
+ }
+ if (-1 == close (ctr_list[ii].fd))
+ {
+ TprintfT (0, "hwcdrv: ERROR: close(fd) #%d failed: errno=%d\n", ii, errno);
+ hwc_rc = HWCFUNCS_ERROR_GENERIC;
+ }
+ return hwc_rc;
+}
+
+/* HWCDRV_API for thread-specific actions */
+HWCDRV_API int
+hwcdrv_lwp_init (void)
+{
+ return hwcdrv_start ();
+}
+
+HWCDRV_API void
+hwcdrv_lwp_fini (void)
+{
+ hwcdrv_free_counters (); /* also sets pctx->ctr_list=NULL; */
+}
+
+/* open */
+static int
+hdrv_pcl_internal_open ()
+{
+ if (hdrv_pcl_state.internal_open_called)
+ {
+ TprintfT (0, "hwcdrv: WARNING: hdrv_pcl_internal_open: already called\n");
+ return HWCFUNCS_ERROR_ALREADY_CALLED;
+ }
+
+ // determine if PCL is available
+ perf_event_def_t tmp_event_def;
+ memset (&tmp_event_def, 0, sizeof (tmp_event_def));
+ struct perf_event_attr *pe_attr = &tmp_event_def.hw;
+ init_perf_event (pe_attr, 0, 0);
+ pe_attr->type = PERF_TYPE_HARDWARE; // specify abstracted HW event
+ pe_attr->config = PERF_COUNT_HW_INSTRUCTIONS; // specify abstracted insts
+ int hwc_fd = perf_event_open (pe_attr,
+ 0, // pid/tid, 0 is self
+ -1, // cpu, -1 is per-thread mode
+ -1, // group_fd, -1 is root
+ 0); // flags
+ if (hwc_fd == -1)
+ {
+ TprintfT (DBG_LT1, "hwcdrv: WARNING: hdrv_pcl_internal_open:"
+ " perf_event_open() failed, errno=%d\n", errno);
+ goto internal_open_error;
+ }
+
+ /* see if the PCL is new enough to know about F_SETOWN_EX */
+ struct f_owner_ex fowner_ex;
+ fowner_ex.type = F_OWNER_TID;
+ fowner_ex.pid = hwcdrv_gettid (); // "pid=tid" is correct w/F_OWNER_TID
+ if (fcntl (hwc_fd, F_SETOWN_EX, (unsigned long) &fowner_ex) == -1)
+ {
+ TprintfT (DBG_LT1, "hwcdrv: WARNING: hdrv_pcl_internal_open: "
+ "F_SETOWN failed, errno=%d\n", errno);
+ close (hwc_fd);
+ goto internal_open_error;
+ }
+ close (hwc_fd);
+
+ hdrv_pcl_state.internal_open_called = 1;
+ hdrv_pcl_state.library_ok = 1; // set to non-zero to show it's initted
+ hdrv_pcl_about.cpcN_cpuver = CPUVER_UNDEFINED;
+ TprintfT (DBG_LT2, "hwcdrv: hdrv_pcl_internal_open()\n");
+ for (int ii = 0; hdrv_pcbe_drivers[ii]; ii++)
+ {
+ hdrv_pcbe_api_t *ppcbe = hdrv_pcbe_drivers[ii];
+ if (!ppcbe->hdrv_pcbe_init ())
+ {
+ hdrv_pcl_about.cpcN_cciname = ppcbe->hdrv_pcbe_impl_name ();
+ hdrv_pcl_about.cpcN_cpuver = hwcdrv_lookup_cpuver (hdrv_pcl_about.cpcN_cciname);
+ if (hdrv_pcl_about.cpcN_cpuver == CPUVER_UNDEFINED)
+ goto internal_open_error;
+ hdrv_pcl_about.cpcN_npics = ppcbe->hdrv_pcbe_ncounters ();
+ hdrv_pcl_about.cpcN_docref = ppcbe->hdrv_pcbe_cpuref ();
+ hdrv_pcl_state.get_events = ppcbe->hdrv_pcbe_get_events;
+ hwcdrv_get_x86_eventnum = ppcbe->hdrv_pcbe_get_eventnum;
+ break;
+ }
+ }
+ if (hdrv_pcl_about.cpcN_npics > MAX_PICS)
+ {
+ TprintfT (0, "hwcdrv: WARNING: hdrv_pcl_internal_open:"
+ " reducing number of HWCs from %u to %u on processor '%s'\n",
+ hdrv_pcl_about.cpcN_npics, MAX_PICS, hdrv_pcl_about.cpcN_cciname);
+ hdrv_pcl_about.cpcN_npics = MAX_PICS;
+ }
+ TprintfT (DBG_LT1, "hwcdrv: hdrv_pcl_internal_open:"
+ " perf_event cpuver=%d, name='%s'\n",
+ hdrv_pcl_about.cpcN_cpuver, hdrv_pcl_about.cpcN_cciname);
+ return 0;
+
+internal_open_error:
+ hdrv_pcl_about.cpcN_cpuver = CPUVER_UNDEFINED;
+ hdrv_pcl_about.cpcN_npics = 0;
+ hdrv_pcl_about.cpcN_docref = NULL;
+ hdrv_pcl_about.cpcN_cciname = NULL;
+ return HWCFUNCS_ERROR_NOT_SUPPORTED;
+}
+
+static void *
+single_thread_tsd_ftn ()
+{
+ static hdrv_pcl_ctx_t tsd_context;
+ return &tsd_context;
+}
+
+/* HWCDRV_API */
+HWCDRV_API int
+hwcdrv_init (hwcfuncs_abort_fn_t abort_ftn, int *tsd_sz)
+{
+ hdrv_pcl_state.find_vpc_ctx = single_thread_tsd_ftn;
+ if (tsd_sz)
+ *tsd_sz = sizeof (hdrv_pcl_ctx_t);
+
+ if (hdrv_pcl_state.internal_open_called)
+ return HWCFUNCS_ERROR_ALREADY_CALLED;
+ return hdrv_pcl_internal_open ();
+}
+
+HWCDRV_API void
+hwcdrv_get_info (int *cpuver, const char **cciname, uint_t *npics,
+ const char **docref, uint64_t *support)
+{
+ if (cpuver)
+ *cpuver = hdrv_pcl_about.cpcN_cpuver;
+ if (cciname)
+ *cciname = hdrv_pcl_about.cpcN_cciname;
+ if (npics)
+ *npics = hdrv_pcl_about.cpcN_npics;
+ if (docref)
+ *docref = hdrv_pcl_about.cpcN_docref;
+ if (support)
+ *support = HWCFUNCS_SUPPORT_OVERFLOW_PROFILING | HWCFUNCS_SUPPORT_OVERFLOW_CTR_ID;
+}
+
+HWCDRV_API int
+hwcdrv_enable_mt (hwcfuncs_tsd_get_fn_t tsd_ftn)
+{
+ if (tsd_ftn)
+ hdrv_pcl_state.find_vpc_ctx = tsd_ftn;
+ else
+ {
+ TprintfT (0, "hwcdrv: ERROR: enable_mt(): tsd_ftn==NULL\n");
+ return HWCFUNCS_ERROR_UNAVAIL;
+ }
+ return 0;
+}
+
+HWCDRV_API int
+hwcdrv_get_descriptions (hwcf_hwc_cb_t *hwc_cb, hwcf_attr_cb_t *attr_cb)
+{
+ int count = 0;
+ if (hwc_cb && hdrv_pcl_state.get_events)
+ count = hdrv_pcl_state.get_events (hwc_cb);
+ if (attr_cb)
+ for (int ii = 0; perfctr_attrs_table && perfctr_attrs_table[ii].attrname; ii++)
+ attr_cb (perfctr_attrs_table[ii].attrname);
+ if (!count)
+ return -1;
+ return 0;
+}
+
+HWCDRV_API int
+hwcdrv_assign_regnos (Hwcentry* entries[], unsigned numctrs)
+{
+ return hwcdrv_assign_all_regnos (entries, numctrs);
+}
+
+static int
+internal_hwc_start (int fd)
+{
+ int rc = ioctl (fd, PERF_EVENT_IOC_REFRESH, 1);
+ if (rc == -1)
+ {
+ TprintfT (DBG_LT0, "hwcdrv: ERROR: internal_hwc_start:"
+ " PERF_EVENT_IOC_REFRESH(fd=%d) failed: errno=%d\n", fd, errno);
+ return HWCFUNCS_ERROR_UNAVAIL;
+ }
+ TprintfT (DBG_LT3, "hwcdrv: internal_hwc_start(fd=%d)\n", fd);
+ return 0;
+}
+
+HWCDRV_API int
+hwcdrv_overflow (siginfo_t *si, hwc_event_t *eventp, hwc_event_t *lost_events)
+{
+ /* set expired counters to overflow value and all others to 0 */
+ /* return 0: OK, counters should be restarted */
+ /* return non-zero: eventp not set, counters should not be restarted */
+ /* clear return values */
+ int ii;
+ for (ii = 0; ii < hdrv_pcl_state.hwcdef_cnt; ii++)
+ {
+ eventp->ce_pic[ii] = 0;
+ lost_events->ce_pic[ii] = 0;
+ }
+ hrtime_t sig_ts = gethrtime (); //YXXX get this from HWC event?
+ eventp->ce_hrt = sig_ts;
+ lost_events->ce_hrt = sig_ts;
+
+ /* determine source signal */
+ int signal_fd = -1;
+ switch (si->si_code)
+ {
+ case POLL_HUP: /* expected value from pcl */
+ /* According to Stephane Eranian:
+ * "expect POLL_HUP instead of POLL_IN because we are
+ * in one-shot mode (IOC_REFRESH)"
+ */
+ signal_fd = si->si_fd;
+ break;
+ case SI_TKILL: /* event forwarded by tkill */
+ /* DBX can only forward SI_TKILL when it detects POLL_HUP
+ * unfortunately, this means that si->si_fd has been lost...
+ * We need to process the buffers, but we don't know the fd!
+ */
+ TprintfT (DBG_LT0, "hwcdrv: sig_ts=%llu: WARNING: hwcdrv_overflow:"
+ " SI_TKILL detected\n", sig_ts);
+ break;
+ default:
+ // "sometimes we see a POLL_IN (1) with very high event rates,"
+ // according to eranian(?)
+ TprintfT (DBG_LT0, "hwcdrv: sig_ts=%llu: ERROR: hwcdrv_overflow:"
+ " unexpected si_code 0x%x\n", sig_ts, si->si_code);
+ return HWCFUNCS_ERROR_GENERIC;
+ }
+
+ hdrv_pcl_ctx_t * pctx = hdrv_pcl_state.find_vpc_ctx ();
+ if (!pctx)
+ {
+ TprintfT (DBG_LT0, "hwcdrv: sig_ts=%llu: ERROR: hwcdrv_overflow:"
+ " tsd context is NULL\n", sig_ts);
+ return HWCFUNCS_ERROR_UNEXPECTED;
+ }
+ counter_state_t * ctr_list = (counter_state_t *) pctx->ctr_list;
+ if (!ctr_list)
+ {
+ TprintfT (DBG_LT0, "hwcdrv: sig_ts=%llu: WARNING: hwcdrv_overflow:"
+ " ctr_list is NULL\n", sig_ts);
+ return HWCFUNCS_ERROR_UNEXPECTED;
+ }
+
+ /* clear needs_restart flag */
+ for (ii = 0; ii < hdrv_pcl_state.hwcdef_cnt; ii++)
+ ctr_list[ii].needs_restart = 0;
+
+ /* attempt to identify the counter to read */
+ int signal_idx = -1;
+ pctx->signal_fd = signal_fd; // save the signal provided by siginfo_t
+ if (signal_fd != -1)
+ {
+ for (ii = 0; ii < hdrv_pcl_state.hwcdef_cnt; ii++)
+ {
+ if (ctr_list[ii].fd == signal_fd)
+ {
+ signal_idx = ii;
+ break;
+ }
+ }
+ }
+
+ if (signal_idx < 0)
+ {
+ TprintfT (DBG_LT0, "hwcdrv: sig_ts=%llu: ERROR: hwcdrv_overflow:"
+ " pmc not determined!\n", sig_ts);
+ lost_events->ce_pic[0] = 1; /* record a bogus value into experiment */
+ // note: bogus value may get overwritten in loop below
+ }
+
+ /* capture sample(s). In addition to signal_idx, check other counters. */
+ struct perf_event_header sheader;
+ int idx;
+ for (idx = 0; idx < hdrv_pcl_state.hwcdef_cnt; idx++)
+ {
+ int num_recs = 0;
+ while (1)
+ {
+ /* check for samples */
+ struct perf_event_mmap_page *metadata = ctr_list[idx].buf_state.buf;
+ if (metadata == NULL)
+ break; // empty
+ if (metadata->data_tail == metadata->data_head)
+ break; // empty
+
+ /* read header */
+ if (read_buf (&ctr_list[idx].buf_state, &sheader, sizeof (sheader)))
+ break;
+ num_recs++;
+
+ /* check for PERF_RECORD_SAMPLE */
+ size_t datasz = sheader.size - sizeof (struct perf_event_header);
+ if (sheader.type != PERF_RECORD_SAMPLE)
+ {
+ TprintfT (DBG_LT2, "hwcdrv: sig_ts=%llu: WARNING: hwcdrv_overflow:"
+ " unexpected recd type=%d\n",
+ sig_ts, sheader.type);
+ if (skip_buf (&ctr_list[idx].buf_state, datasz))
+ {
+ TprintfT (DBG_LT0, "hwcdrv: sig_ts=%llu: ERROR: hwcdrv_overflow:"
+ " skip recd type=%d failed\n", sig_ts, sheader.type);
+ lost_events->ce_pic[idx] = 4; /* record a bogus value */
+ break; // failed to skip buffer??
+ }
+ lost_events->ce_pic[idx] = 2; /* record a bogus value */
+ continue; // advance to next record
+ }
+
+ /* type is PERF_RECORD_SAMPLE */
+ uint64_t value, lostv;
+ if (read_sample (&ctr_list[idx], datasz, &value, &lostv))
+ {
+ TprintfT (DBG_LT0, "hwcdrv: sig_ts=%llu: ERROR: hwcdrv_overflow:"
+ " read_sample() failed\n", sig_ts);
+ lost_events->ce_pic[idx] = 3; // record a bogus value
+ break; // failed to read sample data??
+ }
+ TprintfT (DBG_LT3, "hwcdrv: sig_ts=%llu: hwcdrv_overflow:"
+ " idx=%d value=%llu lost=%llu\n", (unsigned long long) sig_ts,
+ idx, (unsigned long long) value, (unsigned long long) lostv);
+ if (eventp->ce_pic[idx])
+ {
+ TprintfT (DBG_LT2, "hwcdrv: sig_ts=%llu: WARNING: hwcdrv_overflow:"
+ " idx=%d previous sample recorded as lost_event\n", sig_ts, idx);
+ lost_events->ce_pic[idx] += eventp->ce_pic[idx];
+ }
+ eventp->ce_pic[idx] = value;
+ lost_events->ce_pic[idx] += lostv;
+ }
+
+ /* debug output for unexpected (but common) cases */
+ if (idx == signal_idx)
+ {
+ if (num_recs != 1)
+ TprintfT (DBG_LT2, "hwcdrv: sig_ts=%llu: WARNING: hwcdrv_overflow:"
+ " %d records for signal_idx=%d\n", sig_ts, num_recs, signal_idx);
+ }
+ else if (num_recs)
+ TprintfT (DBG_LT2, "hwcdrv: sig_ts=%llu: WARNING: hwcdrv_overflow:"
+ " %d unexpected record(s) for idx=%d (signal_idx=%d)\n",
+ sig_ts, num_recs, idx, signal_idx);
+
+ /* trigger counter restart whenever records were found */
+ if (num_recs)
+ {
+ /* check whether to adapt the overflow interval */
+ /* This is the Linux version.
+ * The Solaris version is in hwprofile.c collector_update_overflow_counters().
+ */
+ hrtime_t min_time = global_perf_event_def[idx].min_time;
+ if (min_time > 0 // overflow interval is adaptive
+ && sig_ts - ctr_list[idx].last_overflow_time < min_time) // last interval below min
+ {
+ /* pick a new overflow interval */
+ /* roughly doubled, but add funny numbers */
+ /* hopefully the result is prime or not a multiple of some # of ops/loop */
+ uint64_t new_period = 2 * ctr_list[idx].last_overflow_period + 37;
+#if 0
+ // On Solaris, we report the adjustment to the log file.
+ // On Linux it's hard for us to do so since hwcdrv_pcl.c doesn't know about collector_interface, SP_JCMD_COMMENT, or COL_COMMENT_HWCADJ.
+ // For now we simply don't report.
+ collector_interface->writeLog ("<event kind=\"%s\" id=\"%d\">%s %d -> %d</event>\n",
+ SP_JCMD_COMMENT, COL_COMMENT_HWCADJ, global_perf_event_def[idx].name,
+ ctr_list[idx].last_overflow_period, new_period);
+#endif
+ /* There are a variety of ways of resetting the period on Linux.
+ * The most elegant is
+ * ioctl(fd,PERF_EVENT_IOC_PERIOD,&period)
+ * but check the perf_event_open man page for PERF_EVENT_IOC_PERIOD:
+ * > Prior to Linux 2.6.36 this ioctl always failed due to a bug in the kernel.
+ * > Prior to Linux 3.14 (or 3.7 on ARM), the new period did not take effect
+ * until after the next overflow.
+ * So we're kind of stuck shutting the fd down and restarting it with the new period.
+ */
+ if (stop_one_ctr (idx, ctr_list))
+ {
+ // EUGENE figure out what to do on error
+ }
+ ctr_list[idx].last_overflow_period = new_period;
+ if (start_one_ctr (idx, ctr_list[idx].buf_state.pagesz, pctx, "hwcdrv: ERROR: hwcdrv_overflow (readjust overflow):"))
+ {
+ // EUGENE figure out what to do on error
+ }
+ }
+ ctr_list[idx].last_overflow_time = sig_ts;
+#if 0
+ ctr_list[idx].needs_restart = 1;
+#else // seems to be more reliable to restart here instead of hwcdrv_sighlr_restart()
+ internal_hwc_start (ctr_list[idx].fd);
+#endif
+ }
+ }
+ return 0; // OK to restart counters
+}
+
+HWCDRV_API int
+hwcdrv_sighlr_restart (const hwc_event_t *pp)
+{
+#if 0 // restarting here doesn't seem to work as well as restarting in hwcdrv_overflow()
+ hdrv_pcl_ctx_t * pctx = hdrv_pcl_state.find_vpc_ctx ();
+ if (!pctx)
+ {
+ TprintfT (DBG_LT0, "hwcdrv: ERROR: hwcdrv_sighlr_restart: find_vpc_ctx()==NULL\n");
+ return -1;
+ }
+ counter_state_t * ctr_list = (counter_state_t *) pctx->ctr_list;
+ if (!ctr_list)
+ {
+ TprintfT (DBG_LT0, "hwcdrv: WARNING: hwcdrv_sighlr_restart: ctr_list is NULL\n");
+ return -1;
+ }
+ int errors = 0;
+ for (int ii = 0; ii < hdrv_pcl_state.hwcdef_cnt; ii++)
+ {
+ if (ctr_list[ii].needs_restart)
+ errors |= internal_hwc_start (ctr_list[ii].fd);
+ ctr_list[ii].needs_restart = 0;
+ }
+ return errors;
+#else
+ return 0;
+#endif
+}
+
+/* create counters based on hwcdef[] */
+HWCDRV_API int
+hwcdrv_create_counters (unsigned hwcdef_cnt, Hwcentry *hwcdef)
+{
+ if (hwcdef_cnt > hdrv_pcl_about.cpcN_npics)
+ {
+ logerr (GTXT ("More than %d counters were specified\n"), hdrv_pcl_about.cpcN_npics); /*!*/
+ return HWCFUNCS_ERROR_HWCARGS;
+ }
+ if (hdrv_pcl_about.cpcN_cpuver == CPUVER_UNDEFINED)
+ {
+ logerr (GTXT ("Processor not supported\n"));
+ return HWCFUNCS_ERROR_HWCARGS;
+ }
+
+ /* add counters */
+ for (unsigned idx = 0; idx < hwcdef_cnt; idx++)
+ {
+ perf_event_def_t *glb_event_def = &global_perf_event_def[idx];
+ memset (glb_event_def, 0, sizeof (perf_event_def_t));
+ unsigned int pmc_sel;
+ eventsel_t evntsel;
+ if (hwcfuncs_get_x86_eventsel (hwcdef[idx].reg_num,
+ hwcdef[idx].int_name, &evntsel, &pmc_sel))
+ {
+ TprintfT (0, "hwcdrv: ERROR: hwcfuncs_get_x86_eventsel() failed\n");
+ return HWCFUNCS_ERROR_HWCARGS;
+ }
+ glb_event_def->reg_num = pmc_sel;
+ glb_event_def->eventsel = evntsel;
+ glb_event_def->counter_preload = hwcdef[idx].val;
+ glb_event_def->min_time = hwcdef[idx].min_time;
+ glb_event_def->name = strdup (hwcdef[idx].name); // memory leak??? very minor
+ init_perf_event (&glb_event_def->hw, glb_event_def->eventsel,
+ glb_event_def->counter_preload);
+ TprintfT (DBG_LT1, "hwcdrv: create_counters: pic=%u name='%s' interval=%lld"
+ "(min_time=%lld): reg_num=0x%x eventsel=0x%llx ireset=%lld usr=%lld sys=%lld\n",
+ idx, hwcdef[idx].int_name, (long long) glb_event_def->counter_preload,
+ (long long) glb_event_def->min_time, (int) glb_event_def->reg_num,
+ (long long) glb_event_def->eventsel,
+ (long long) HW_INTERVAL_PRESET (hwcdef[idx].val),
+ (long long) glb_event_def->hw.exclude_user,
+ (long long) glb_event_def->hw.exclude_kernel);
+ }
+
+ hdrv_pcl_state.hwcdef_cnt = hwcdef_cnt;
+ return 0;
+}
+
+HWCDRV_API int
+hwcdrv_free_counters () // note: only performs shutdown for this thread
+{
+ hdrv_pcl_ctx_t * pctx;
+ if (!COUNTERS_ENABLED ())
+ return 0;
+ pctx = hdrv_pcl_state.find_vpc_ctx ();
+ if (!pctx)
+ {
+ TprintfT (0, "hwcdrv: WARNING: hwcdrv_free_counters: tsd context is NULL\n");
+ return HWCFUNCS_ERROR_GENERIC;
+ }
+ counter_state_t *ctr_list = pctx->ctr_list;
+ if (!ctr_list)
+ {
+ // fork child: prolog suspends hwcs, then epilog frees them
+ TprintfT (DBG_LT1, "hwcdrv: WARNING: hwcdrv_free_counters: ctr_list is already NULL\n");
+ return 0;
+ }
+ int hwc_rc = 0;
+ for (int ii = 0; ii < hdrv_pcl_state.hwcdef_cnt; ii++)
+ if (stop_one_ctr (ii, ctr_list))
+ hwc_rc = HWCFUNCS_ERROR_GENERIC;
+ TprintfT (DBG_LT1, "hwcdrv: hwcdrv_free_counters(tid=0x%lx).\n", pctx->tid);
+ pctx->ctr_list = NULL;
+ return hwc_rc;
+}
+
+HWCDRV_API int
+hwcdrv_start (void) /* must be called from each thread ? */
+{
+ hdrv_pcl_ctx_t *pctx = NULL;
+ if (!COUNTERS_ENABLED ())
+ {
+ TprintfT (DBG_LT1, "hwcdrv: WARNING: hwcdrv_start: no counters to start \n");
+ return 0;
+ }
+ if (!hdrv_pcl_state.library_ok)
+ {
+ TprintfT (0, "hwcdrv: ERROR: hwcdrv_start: library is not open\n");
+ return HWCFUNCS_ERROR_NOT_SUPPORTED;
+ }
+
+ /*
+ * set up per-thread context
+ */
+ pctx = hdrv_pcl_state.find_vpc_ctx ();
+ if (!pctx)
+ {
+ TprintfT (0, "hwcdrv: ERROR: hwcdrv_start: tsd context is NULL\n");
+ return HWCFUNCS_ERROR_UNEXPECTED;
+ }
+ pctx->tid = hwcdrv_gettid ();
+ TprintfT (DBG_LT1, "hwcdrv: hwcdrv_start(tid=0x%lx)\n", pctx->tid);
+
+ /*
+ * create per-thread counter list
+ */
+ counter_state_t *ctr_list = (counter_state_t *) calloc (hdrv_pcl_state.hwcdef_cnt,
+ sizeof (counter_state_t));
+ if (!ctr_list)
+ {
+ TprintfT (0, "hwcdrv: ERROR: hwcdrv_start: calloc(ctr_list) failed\n");
+ return HWCFUNCS_ERROR_MEMORY;
+ }
+ int ii;
+ for (ii = 0; ii < hdrv_pcl_state.hwcdef_cnt; ii++)
+ ctr_list[ii].fd = -1; // invalidate fds in case we have to close prematurely
+ pctx->ctr_list = ctr_list;
+
+ /*
+ * bind the counters
+ */
+ size_t pgsz = sysconf (_SC_PAGESIZE);
+ for (ii = 0; ii < hdrv_pcl_state.hwcdef_cnt; ii++)
+ {
+ ctr_list[ii].last_overflow_period = global_perf_event_def[ii].hw.sample_period;
+ if (start_one_ctr (ii, pgsz, pctx, "hwcdrv: ERROR: hwcdrv_start:")) goto hwcdrv_start_cleanup;
+ }
+
+ /*
+ * start the counters
+ */
+ for (ii = 0; ii < hdrv_pcl_state.hwcdef_cnt; ii++)
+ {
+ int rc = internal_hwc_start (ctr_list[ii].fd);
+ if (rc < 0)
+ goto hwcdrv_start_cleanup;
+ }
+ return 0;
+
+hwcdrv_start_cleanup:
+ hwcdrv_free_counters (); // PERF_EVENT_IOC_DISABLE and close() for all fds
+ return HWCFUNCS_ERROR_UNAVAIL;
+}
+
+HWCDRV_API int
+hwcdrv_lwp_suspend (void) /* must be called from each thread */
+{
+ if (!COUNTERS_ENABLED ())
+ {
+ TprintfT (DBG_LT1, "hwcdrv: WARNING: hwcdrv_lwp_suspend: no counters\n");
+ return 0;
+ }
+ TprintfT (DBG_LT1, "hwcdrv: hwcdrv_lwp_suspend()\n");
+ return hwcdrv_free_counters ();
+}
+
+HWCDRV_API int
+hwcdrv_lwp_resume (void) /* must be called from each thread */
+{
+ if (!COUNTERS_ENABLED ())
+ {
+ TprintfT (DBG_LT1, "hwcdrv: WARNING: hwcdrv_lwp_resume: no counters\n");
+ return 0;
+ }
+ TprintfT (DBG_LT1, "hwcdrv: hwcdrv_lwp_resume()\n");
+ return hwcdrv_start ();
+}
+
+HWCDRV_API int
+hwcdrv_read_events (hwc_event_t *overflow_data, hwc_event_samples_t *sampled_data)
+{
+ overflow_data->ce_hrt = 0;
+ for (int i = 0; i < MAX_PICS; i++)
+ {
+ overflow_data->ce_pic[i] = 0;
+ if (sampled_data)
+ HWCFUNCS_SAMPLE_RESET (&sampled_data->sample[i]);
+ }
+ return 0;
+}
+
+/*---------------------------------------------------------------------------*/
+/* HWCDRV_API */
+
+hwcdrv_api_t hwcdrv_pcl_api = {
+ hwcdrv_init,
+ hwcdrv_get_info,
+ hwcdrv_enable_mt,
+ hwcdrv_get_descriptions,
+ hwcdrv_assign_regnos,
+ hwcdrv_create_counters,
+ hwcdrv_start,
+ hwcdrv_overflow,
+ hwcdrv_read_events,
+ hwcdrv_sighlr_restart,
+ hwcdrv_lwp_suspend,
+ hwcdrv_lwp_resume,
+ hwcdrv_free_counters,
+ hwcdrv_lwp_init,
+ hwcdrv_lwp_fini,
+ -1 // hwcdrv_init_status
+};
diff --git a/gprofng/common/hwcdrv.h b/gprofng/common/hwcdrv.h
new file mode 100644
index 00000000000..14c55cfd378
--- /dev/null
+++ b/gprofng/common/hwcdrv.h
@@ -0,0 +1,330 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+/* Hardware counter profiling driver's header */
+
+#ifndef __HWCDRV_H
+#define __HWCDRV_H
+
+#include "hwcfuncs.h"
+
+#ifdef linux
+#define HWCFUNCS_SIGNAL SIGIO
+#define HWCFUNCS_SIGNAL_STRING "SIGIO"
+#else
+#define HWCFUNCS_SIGNAL SIGEMT
+#define HWCFUNCS_SIGNAL_STRING "SIGEMT"
+#endif
+
+#ifndef LIBCOLLECTOR_SRC /* not running in libcollector */
+#include <string.h>
+
+#else /* running in libcollector */
+#include "collector_module.h"
+#include "libcol_util.h"
+
+#define get_hwcdrv __collector_get_hwcdrv
+#define hwcdrv_drivers __collector_hwcdrv_drivers
+#define hwcdrv_cpc1_api __collector_hwcdrv_cpc1_api
+#define hwcdrv_cpc2_api __collector_hwcdrv_cpc2_api
+#define hwcdrv_default __collector_hwcdrv_default
+#define hwcdrv_driver __collector_hwcdrv_driver
+#define hwcdrv_init __collector_hwcdrv_init
+#define hwcdrv_get_info __collector_hwcdrv_get_info
+#define hwcdrv_enable_mt __collector_hwcdrv_enable_mt
+#define hwcdrv_get_descriptions __collector_hwcdrv_get_descriptions
+#define hwcdrv_assign_regnos __collector_hwcdrv_assign_regnos
+#define hwcdrv_create_counters __collector_hwcdrv_create_counters
+#define hwcdrv_start __collector_hwcdrv_start
+#define hwcdrv_overflow __collector_hwcdrv_overflow
+#define hwcdrv_read_events __collector_hwcdrv_read_events
+#define hwcdrv_sighlr_restart __collector_hwcdrv_sighlr_restart
+#define hwcdrv_lwp_suspend __collector_hwcdrv_lwp_suspend
+#define hwcdrv_lwp_resume __collector_hwcdrv_lwp_resume
+#define hwcdrv_free_counters __collector_hwcdrv_free_counters
+#define hwcdrv_lwp_init __collector_hwcdrv_lwp_init
+#define hwcdrv_lwp_fini __collector_hwcdrv_lwp_fini
+#define hwcdrv_assign_all_regnos __collector_hwcdrv_assign_all_regnos
+#define hwcdrv_lookup_cpuver __collector_hwcdrv_lookup_cpuver
+#define hwcfuncs_int_capture_errmsg __collector_hwcfuncs_int_capture_errmsg
+
+#define GTXT(x) x
+
+/* Implemented by libcollector */
+#define calloc __collector_calloc
+#define close CALL_UTIL(close)
+#define fcntl CALL_UTIL(fcntl)
+#define fprintf CALL_UTIL(fprintf)
+//#define free __collector_free
+#define free(...)
+#define gethrtime __collector_gethrtime
+#define ioctl CALL_UTIL(ioctl)
+#define malloc __collector_malloc
+#define memcpy __collector_memcpy
+#define memset CALL_UTIL(memset)
+#define mmap CALL_UTIL(mmap)
+#define snprintf CALL_UTIL(snprintf)
+#define strchr CALL_UTIL(strchr)
+#define strcmp CALL_UTIL(strcmp)
+#define strncmp CALL_UTIL(strncmp)
+#define strcpy CALL_UTIL(strcpy)
+#define strdup __collector_strdup
+#define strncpy CALL_UTIL(strncpy)
+#define strerror CALL_UTIL(strerror)
+#define strlen CALL_UTIL(strlen)
+#define strstr CALL_UTIL(strstr)
+#define strtol CALL_UTIL(strtol)
+#define strtoll CALL_UTIL(strtoll)
+#define strtoul CALL_UTIL(strtoul)
+#define strtoull CALL_UTIL(strtoull)
+#define syscall CALL_UTIL(syscall)
+#define sysconf CALL_UTIL(sysconf)
+#define vsnprintf CALL_UTIL(vsnprintf)
+
+#endif /* --- LIBCOLLECTOR_SRC --- */
+
+/* TprintfT(<level>,...) definitions. Adjust per module as needed */
+#define DBG_LT0 0 // for high-level configuration, unexpected errors/warnings
+#define DBG_LT1 1 // for configuration details, warnings
+#define DBG_LT2 2
+#define DBG_LT3 3
+#define DBG_LT4 4
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+ /* hwcdrv api */
+ typedef struct
+ {
+ int (*hwcdrv_init)(hwcfuncs_abort_fn_t abort_ftn, int * tsd_sz);
+ /* Initialize hwc counter library (do not call again after fork)
+ Must be called before other functions.
+ Input:
+ <abort_ftn>: NULL or callback function to be used for fatal errors
+ <tsd_sz>: If not NULL, returns size in bytes required for thread-specific storage
+ Return: 0 if successful
+ */
+
+ void (*hwcdrv_get_info)(int *cpuver, const char **cciname, uint_t *npics,
+ const char **docref, uint64_t *support);
+ /* get info about session
+ Input:
+ <cpuver>: if not NULL, returns value of CPC cpu version
+ <cciname>: if not NULL, returns name of CPU
+ <npics>: if not NULL, returns maximum # of HWCs
+ <docref>: if not NULL, returns documentation reference
+ <support>: if not NULL, returns bitmask (see hwcfuncs.h) of hwc support
+ Return: 0 if successful, nonzero otherwise
+ */
+
+ int (*hwcdrv_enable_mt)(hwcfuncs_tsd_get_fn_t tsd_ftn);
+ /* Enables multi-threaded mode (do not need to call again after fork)
+ Input:
+ <tsd_ftn>: If <tsd_sz>==0, this parameter is ignored.
+ Otherwise:
+ tsd_ftn() must be able to return a pointer to thread-specific
+ memory of <tsd_sz> bytes.
+ For a given thread, tsd_ftn() must
+ always return the same pointer.
+ Return: none
+ */
+
+ int (*hwcdrv_get_descriptions)(hwcf_hwc_cb_t *hwc_find_action,
+ hwcf_attr_cb_t *attr_find_action);
+ /* Initiate callbacks with all available HWC names and and HWC attributes.
+ Input:
+ <hwc_find_action>: if not NULL, will be called once for each HWC
+ <attr_find_action>: if not NULL, will be called once for each attribute
+ Return: 0 if successful
+ or a cpc return code upon error
+ */
+
+ int (*hwcdrv_assign_regnos)(Hwcentry* entries[], unsigned numctrs);
+ /* Assign entries[]->reg_num values as needed by platform
+ Input:
+ <entries>: array of counters
+ <numctrs>: number of items in <entries>
+ Return: 0 if successful
+ HWCFUNCS_ERROR_HWCINIT if resources unavailable
+ HWCFUNCS_ERROR_HWCARGS if counters were not specified correctly
+ */
+
+ int (*hwcdrv_create_counters)(unsigned hwcdef_cnt, Hwcentry *hwcdef);
+ /* Create the counters, but don't start them.
+ call this once in main thread to create counters.
+ Input:
+ <defcnt>: number of counter definitions.
+ <hwcdef>: counter definitions.
+ Return: 0 if successful
+ or a cpc return code upon error
+ */
+
+ int (*hwcdrv_start)(void);
+ /* Start the counters.
+ call this once in main thread to start counters.
+ Return: 0 if successful
+ or a cpc return code upon error
+ */
+
+ int (*hwcdrv_overflow)(siginfo_t *si, hwc_event_t *sample,
+ hwc_event_t *lost_samples);
+ /* Linux only. Capture current counter values.
+ This is intended to be called from SIGEMT handler;
+ Input:
+ <si>: signal handler context information
+ <sample>: returns non-zero values for counters that overflowed
+ <lost_samples>: returns non-zero values for counters that "lost" counts
+ Return: 0 if successful
+ or a cpc return code upon error.
+ */
+
+ int (*hwcdrv_read_events)(hwc_event_t *overflow_data,
+ hwc_event_samples_t *sampled_data);
+ /* Read current counter values and samples. Read of samples is destructive.
+ Note: hwcdrv_read_events is not supported on Linux.
+ <overflow_data>: returns snapshot of counter values
+ <sampled_data>: returns sampled data
+ Return: 0 if successful
+ HWCFUNCS_ERROR_UNAVAIL if resource unavailable(e.g. called before initted)
+ (other values may be possible)
+ */
+
+ int (*hwcdrv_sighlr_restart)(const hwc_event_t* startVals);
+ /* Restarts the counters at the given value.
+ This is intended to be called from SIGEMT handler;
+ Input:
+ <startVals>: Solaris: new start values.
+ Linux: pointer may be NULL; startVals is ignored.
+ Return: 0 if successful
+ or a cpc return code upon error.
+ */
+
+ int (*hwcdrv_lwp_suspend)(void);
+ /* Attempt to stop counters on this lwp only.
+ hwcdrv_lwp_resume() should be used to restart counters.
+ Return: 0 if successful
+ or a cpc return code upon error.
+ */
+
+ int (*hwcdrv_lwp_resume)(void);
+ /* Attempt to restart counters on this lwp when counters were
+ stopped with hwcdrv_lwp_suspend().
+ Return: 0 if successful
+ or a cpc return code upon error.
+ */
+
+ int (*hwcdrv_free_counters)(void);
+ /* Stops counters on this lwp only and frees resources.
+ This will fail w/ unpredictable results if other lwps's are
+ still running. After this call returns,
+ hwcdrv_create_counters() may be called with new values.
+ Return: 0 if successful
+ or a cpc return code upon error.
+ */
+
+ int (*hwcdrv_lwp_init)(void);
+ /* per-thread counter init.
+ Solaris: nop.
+ Linux: just after thread creation call this from inside thread
+ to create context and start counters.
+ Return: 0 if successful
+ or a perfctr return code upon error
+ */
+
+ void (*hwcdrv_lwp_fini)(void);
+ /* per-thread counter cleanup.
+ Solaris: nop.
+ Linux: call in each thread upon thread destruction.
+ */
+
+ int hwcdrv_init_status;
+ } hwcdrv_api_t;
+
+ extern hwcdrv_api_t *get_hwcdrv ();
+ extern hwcdrv_api_t *__collector_get_hwcdrv ();
+ extern int __collector_hwcfuncs_bind_descriptor (const char *defstring);
+ extern Hwcentry **__collector_hwcfuncs_get_ctrs (unsigned *defcnt);
+ extern hwcdrv_api_t *hwcdrv_drivers[]; // array of available drivers
+
+ /* prototypes for internal use by hwcdrv drivers */
+ typedef struct
+ { // see hwcdrv_get_info() for field definitions
+ int cpcN_cpuver;
+ uint_t cpcN_npics;
+ const char *cpcN_docref;
+ const char *cpcN_cciname;
+ } hwcdrv_about_t;
+
+ extern int hwcdrv_assign_all_regnos (Hwcentry* entries[], unsigned numctrs);
+ /* assign user's counters to specific CPU registers */
+
+ extern int hwcdrv_lookup_cpuver (const char * cpcN_cciname);
+ /* returns hwc_cpus.h ID for a given string. */
+
+ extern void hwcfuncs_int_capture_errmsg (const char *fn, int subcode,
+ const char *fmt, va_list ap);
+#define logerr hwcfuncs_int_logerr
+
+ /*---------------------------------------------------------------------------*/
+ /* prototypes for internal use by linux hwcdrv drivers */
+#define PERFCTR_FIXED_MAGIC 0x40000000 /* tells perfctr to use intel fixed pmcs */
+#define PERFCTR_UMASK_SHIFT 8
+#define EXTENDED_EVNUM_2_EVSEL(evnum) \
+ ( (((eventsel_t)(evnum) & 0x0f00ULL) << 24) | ((eventsel_t)(evnum) & ~0x0f00ULL) )
+
+ typedef uint64_t eventsel_t;
+ extern int hwcfuncs_get_x86_eventsel (unsigned int regno, const char *int_name,
+ eventsel_t *return_event, uint_t *return_pmc_sel);
+
+ typedef int (hwcdrv_get_events_fn_t) (hwcf_hwc_cb_t *hwc_cb);
+ typedef int (hwcdrv_get_eventnum_fn_t) (const char *eventname, uint_t pmc,
+ eventsel_t *eventnum,
+ eventsel_t *valid_umask, uint_t *pmc_sel);
+ extern hwcdrv_get_eventnum_fn_t *hwcdrv_get_x86_eventnum;
+
+ typedef struct
+ {
+ const char * attrname; // user-visible name of attribute
+ int is_inverted; // nonzero means boolean attribute is inverted
+ eventsel_t mask; // which attribute bits can be set?
+ eventsel_t shift; // how far to shift bits for use in x86 register
+ } attr_info_t;
+ extern const attr_info_t *perfctr_attrs_table;
+
+ /* hdrv_pcbe api: cpu-specific drivers for Linux */
+ typedef struct
+ {
+ int (*hdrv_pcbe_init)(void);
+ uint_t (*hdrv_pcbe_ncounters)(void);
+ const char *(*hdrv_pcbe_impl_name)(void);
+ const char *(*hdrv_pcbe_cpuref)(void);
+ int (*hdrv_pcbe_get_events)(hwcf_hwc_cb_t *hwc_cb);
+ int (*hdrv_pcbe_get_eventnum)(const char * eventname, uint_t pmc,
+ eventsel_t *eventnum, eventsel_t *valid_umask,
+ uint_t *pmc_sel);
+ } hdrv_pcbe_api_t;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/gprofng/common/hwcentry.h b/gprofng/common/hwcentry.h
new file mode 100644
index 00000000000..8611ab78d89
--- /dev/null
+++ b/gprofng/common/hwcentry.h
@@ -0,0 +1,417 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _HWCENTRY_H
+#define _HWCENTRY_H
+
+#ifndef LIBCOLLECTOR_SRC /* not running in libcollector */
+#include <stdio.h> /* FILE */
+#endif /* --- LIBCOLLECTOR_SRC --- */
+#include <stdlib.h> /* size_t */
+#include "hwc_cpus.h"
+#include "gp-time.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+ /* ABS backtrack types */
+ typedef enum
+ {
+ /* !! Lowest 2 bits are used to indicate load and store, respectively !! */
+ /* Example: On SPARC, backtrack.c did this: if (ABS_memop & inst_type) ... */
+ ABST_NONE = 0x0,
+ ABST_LOAD = 0x1,
+ ABST_STORE = 0x2,
+ ABST_LDST = 0x3,
+ ABST_COUNT = 0x4,
+ ABST_US_DTLBM = 0xF,
+ ABST_NOPC = 0x100,
+ ABST_CLKDS = 0x103, // Obsolete
+ ABST_EXACT = 0x203,
+ ABST_LDST_SPARC64 = 0x303,
+ ABST_EXACT_PEBS_PLUS1 = 0x403
+ /* full description below... */
+ } ABST_type;
+
+#define ABST_PLUS_BY_DEFAULT(n) ((n)==ABST_EXACT || (n)==ABST_EXACT_PEBS_PLUS1)
+#define ABST_BACKTRACK_ENABLED(n) ((n)!=ABST_NONE && (n)!=ABST_NOPC)
+#define ABST_MEMSPACE_ENABLED(n) ((n)!=ABST_NONE && (n)!=ABST_NOPC && (n)!=ABST_COUNT)
+
+ /* ABS determines the type of backtracking available for a particular metric.
+ * Backtracking is enabled with the "+" in "-h +<countername>...".
+ *
+ * When Backtracking is not possible:
+ *
+ * ABST_NONE=0: Either the user did not specify "+", or backtracking
+ * is not applicable to the metric, for example:
+ * clk cycles,
+ * instruct counts (dispatch + branch + prefetch),
+ * i$,
+ * FP ops
+ * ABST_NOPC=0x100 Used for non-program-related external events, for example:
+ * system interface events,
+ * memory controller counters
+ * Of all ABST_type options, only ABST_NOPC prevents hwprofile.c
+ * from recording PC/stack information.
+ *
+ * When backtracking is allowed:
+ *
+ * ABST_LOAD=1: data read events, used with metrics like:
+ * D$, E$, P$ read misses and hits.
+ * [DC+EC+PC]_rd*, Re_*_miss*,
+ * EC_snoop_cb(?)
+ * ABST_STORE=2: data write events, used with metrics like:
+ * D$ writes and write related misses
+ * DC_wr/wr-miss, EC_wb, WC=writecache, Rstall_storeQ
+ * [EC+PC=pcache]_snoop_inv(?), WC_snoop_cb(?),
+ * ABST_LDST=3: data reads/writes, used with metrics like:
+ * E$ references, misses.
+ * ABST_COUNT=4: dedicated assembly instruction: '%hi(0xfc000)'
+ * See SW_count_n metric on sparc.
+ * ABST_US_DTLBM=0xF: for load-store on Sparc -- seems to be used only
+ * for "unskidded DTLB_miss" with DTLB_miss metric.
+ * Checks two adjacent instructions for Data access.
+ * ABST_CLKDS=0x103: data reads/writes, used with Clock-based Dataspace
+ * profiling. Ultrasparc T2 and earlier.
+ * ABST_EXACT=0x203: data reads/writes, precise trap with no skid
+ * ABST_LDST_SPARC64=0x303: Fujitsu SPARC64 load/store
+ * ABST_EXACT_PEBS_PLUS1=0x403: data reads/writes, precise sampling with 1 instr. skid
+ */
+
+ /* Hwcentry - structure for defining a counter.
+ * Some fields have different usage when returned from
+ * hwc_lookup(), hwc_post_lookup(), or hwc_scan_*().
+ * Each function will describe its return values in more detail.
+ */
+ typedef struct
+ {
+ char *name; /* user HWC specification */
+ char *int_name; /* internal HWC specification */
+ regno_t reg_num; /* register in CPU, aka picnum, or REGNO_ANY */
+ char *metric; /* descriptive name, for well-known counters only */
+ volatile int val; /* default or actual overflow value */
+ int timecvt; /* multiplier to convert metric to time, 0 if N/A */
+ ABST_type memop; /* type of backtracking allowed */
+ char *short_desc; /* optional one-liner description, or NULL */
+ int type; /* Type of perf_event_attr */
+ long long config; /* perf_event_type -specific configuration */
+ /* the fields above this line are expected, in order, by the tables in hwctable.c */
+ /* ================================================== */
+ /* the fields below this line are more flexible */
+ int sort_order; /* "tag" to associate experiment record with HWC def */
+ regno_t *reg_list; /* if not NULL, legal values for <reg_num> field above */
+ /* Note: reg_list will be terminated by REGNO_ANY */
+ /* Max size of array is MAX_PICS */
+ hrtime_t min_time; /* target minimum time between overflow events. 0 is off. See HWCTIME_* macros */
+ hrtime_t min_time_default; /* if min_time==HWCTIME_AUTO, use this value instead. 0 is off. */
+ int ref_val; /* if min_time==HWCTIME_AUTO, use this time. 0 is off. */
+ int lval, hval; /* temporary to allow DBX to build until dbx glue.cc fixed */
+ } Hwcentry;
+
+ // Hwcentry.min_time canned values
+#define HWCTIME_TBD ((hrtime_t)( -1LL)) /* self-adjusting enabled but nsecs not yet selected */
+#define HWCTIME_HI ( 1 * 1000 * 1000LL ) /* 1 msec represented in nsecs */
+#define HWCTIME_ON ( 10 * 1000 * 1000LL ) /* 10 msec represented in nsecs */
+#define HWCTIME_LO ( 100 * 1000 * 1000LL ) /* 100 msec represented in nsecs */
+
+#define HWC_VAL_HI(refVal) (((refVal)/10) + 1)
+#define HWC_VAL_ON(refVal) (refVal)
+#define HWC_VAL_LO(refVal) (((refVal)*10)/100*100 + 1) // zero's out lower digits, add 1
+#define HWC_VAL_CUSTOM(refVal, targetNanoSec) ((double)(refVal)*(targetNanoSec)/HWCTIME_ON)
+
+#define HWCENTRY_USES_SAMPLING(h) ((h)->memop==ABST_EXACT_PEBS_PLUS1)
+
+ extern int hwc_lookup (int forKernel, hrtime_t min_time_default,
+ const char *uname, Hwcentry *list[], unsigned listsz,
+ char **emsg, char **wmsg);
+ /* Parses counter cmdline string. Returns counter definitions.
+ * Input:
+ * <forKernel> lookup using which table: 0-collect or 1-er_kernel
+ * <min_time_default> minimum nseconds between events if Hwcentry.min_time == HWCTIME_TBD. 0 to disable.
+ * <uname> command line HWC definition of format:
+ * <ctr_def>...[{','|(whitespace)}<ctr_n_def>] where
+ * <ctr_def> == [+]<ctr>[/<reg#>][,<interval>]
+ * <list> array of pointers to store counter definitions
+ * <listsz> number of elements in <list>
+ * Returns:
+ * Success:
+ * Returns number of valid counters in <list> and <list>'s elements
+ * will be initialized as follows:
+ *
+ * <list[]->name>:
+ * Copy of the <uname> with the following modification:
+ * if backtracking is not supported, the + will be removed.
+ * <list[]->int_name>:
+ * For well-known and convenience ctrs, the internal HWC specification,
+ * e.g. BSQ_cache_reference~emask=0x0100.
+ * For raw ctrs, this will be a copy of <name>.
+ * <list[]->reg_num>:
+ * Register number if specified by user or table, REGNO_ANY otherwise.
+ * <list[]->metric>:
+ * For well-known counters, descriptive name, e.g. "D$ Read Misses".
+ * NULL otherwise.
+ * <list[]->val>:
+ * Overflow value selected by user, default value otherwise.
+ * <list[]->timecvt>:
+ * Value from tables.
+ * <list[]->memop>:
+ * If + is selected and backtracking is allowed, value from table.
+ * ABST_NONE or ABST_NOPC otherwise.
+ *
+ * It is the responsibility of the caller to free 'name' and 'int_name'.
+ * 'metric' is a static string and shouldn't be freed.
+ * 'emsg' will point to NULL
+ *
+ * Failure:
+ * Frees all allocated elements.
+ * emsg will point to a string with an error message to print
+ * returns -1
+ */
+
+ extern char *hwc_validate_ctrs (int forKernel, Hwcentry *list[], unsigned listsz);
+ /* Validates that the vector of specified HW counters can be loaded (more-or-less)
+ * Some invalid combinations, especially on Linux will not be detected
+ */
+
+ extern int hwc_get_cpc_cpuver ();
+ /* Return the cpc_cpuver for this system. Other possible values:
+ * CPUVER_GENERIC=0, CPU could not be determined, but HWCs are ok.
+ * CPUVER_UNDEFINED=-1, HWCs are not available.
+ */
+
+ extern char *hwc_get_docref (char *buf, size_t buflen);
+ /* Return a CPU HWC document reference, or NULL. */
+
+ // TBR
+ extern char *hwc_get_default_cntrs ();
+ /* Return a default HW counter string; may be NULL, or zero-length */
+ /* NULL means none is defined in the table; or zero-length means string defined could not be loaded */
+
+ extern char *hwc_get_default_cntrs2 (int forKernel, int style);
+ /* like hwc_get_default_cntrs() for style==1 */
+ /* but allows other styles of formatting as well */
+ /* deprecate and eventually remove hwc_get_default_cntrs() */
+
+ extern char *hwc_get_orig_default_cntrs ();
+ /* Get the default HW counter string as set in the table */
+ /* NULL means none is defined in the table */
+
+ extern void hwc_update_val (Hwcentry *ctr);
+ /* Check time-based intervals and update Hwcentry.val as needed */
+
+ extern char *hwc_get_cpuname (char *buf, size_t buflen);
+ /* Return the cpc cpu name for this system, or NULL. */
+
+ extern unsigned hwc_get_max_regs ();
+ /* Return number of counters registers for this system. */
+
+ extern unsigned hwc_get_max_concurrent (int forKernel);
+ /* Return the max number of simultaneous counters for this system. */
+
+ extern char **hwc_get_attrs (int forKernel);
+ /* Return:
+ * Array of attributes (strings) supported by this system.
+ * Last element in array is null.
+ * Array and its elements should NOT be freed by the caller.
+ */
+
+ extern unsigned hwc_scan_attrs (void (*action)(const char *attr,
+ const char *desc));
+ /* Scan the HW counter attributes, and call function for each attribute.
+ * Input:
+ * <action>:
+ * If NULL, no action is performed, but count is still returned.
+ * Otherwise called for each type of attributes, or if none exist,
+ * called once with NULL parameter.
+ * Return: count of times <action> would have been called w/ non-NULL data.
+ */
+
+ extern Hwcentry *hwc_post_lookup (Hwcentry * pret_ctr, char *uname,
+ char * int_name, int cpc_cpuver);
+ /* When post-processing a run, look up a Hwcentry for given type of system.
+ * Input:
+ * <pret_ctr>: storage for counter definition
+ * <uname>: well-known name, convenience name, or complete HWC defintion.
+ * <int_name>: Hwcentry->int_name or NULL for don't care
+ * <cpc_cpuver>: version of cpu used for experiment.
+ * Return:
+ * <pret_ctr>'s elements set as follows:
+ *
+ * <pret_ctr->name>:
+ * Copy of <uname> with the following modifications:
+ * 1) + and /<regnum> will be stripped off
+ * 2) attributes will be sorted and values will shown in hex.
+ * <pret_ctr->int_name>:
+ * For well-known/convenience counters, the internal HWC specification
+ * from the table, e.g. BSQ_cache_reference~emask=0x0100.
+ * Otherwise, a copy of <uname>.
+ * <pret_ctr->reg_num>:
+ * Register number if specified by user or table,
+ * REGNO_ANY othewise.
+ * <pret_ctr->metric>:
+ * For well-known counters, descriptive name, e.g. "D$ Read Misses".
+ * NULL otherwise.
+ * <pret_ctr->timecvt>:
+ * For well-known/convenience/hidden counters, value from table.
+ * 0 otherwise.
+ * <pret_ctr->memop>:
+ * For well-known/convenience/hidden counters, value from table.
+ * ABST_NONE otherwise.
+ * <pret_ctr->sort_order>:
+ * Set to 0.
+ *
+ * It is the responsibility of the caller to free 'name' and 'int_name'.
+ * 'metric' is a static string and shouldn't be freed.
+ */
+
+ extern Hwcentry **hwc_get_std_ctrs (int forKernel);
+ /* Return:
+ * Array of well-known counters supported by this system.
+ * Last element in array will be NULL.
+ * Array and its elements should NOT be freed by the caller.
+ */
+
+ extern unsigned hwc_scan_std_ctrs (void (*action)(const Hwcentry *));
+ /* Call <action> for each well-known counter.
+ * Input:
+ * <action>:
+ * If NULL, no action is performed, but count is still returned.
+ * Otherwise called for each type of attributes, or if none exist,
+ * called once with NULL parameter.
+ * Return:
+ * Count of times <action> would have been called w/ non-NULL data.
+ * If <action> is not NULL, Hwcentry fields will be set as follows:
+ * <ctr->name>:
+ * HWC alias name, e.g. dcrm.
+ * <ctr->int_name>:
+ * The internal HWC specification, e.g. BSQ_cache_reference~emask=0x0100.
+ * <ctr->reg_num>:
+ * Register number if specified by the table, REGNO_ANY otherwise.
+ * <ctr->metric>:
+ * Descriptive name, e.g. "D$ Read Misses".
+ * <ctr->lval>:
+ * Low-resolution overflow value.
+ * <ctr->val>:
+ * Default overflow value.
+ * <ctr->hval>:
+ * High-resolution overflow value.
+ * <ctr->timecvt>:
+ * multiplier to convert metric to time, 0 otherwise.
+ * <ctr->memop>:
+ * ABST_* type for this counter.
+ * <ctr->reg_list>:
+ * Array of legal <reg_num> values. Terminated by REGNO_ANY.
+ *
+ * Note: All fields point to static data, none should be freed.
+ */
+
+ extern Hwcentry **hwc_get_raw_ctrs (int forKernel);
+ /* Return:
+ * Table of raw (not well-known) counters supported by this system.
+ * Last element in array will be NULL.
+ * Table and its elements should NOT be freed by the caller.
+ */
+
+ extern unsigned hwc_scan_raw_ctrs (void (*action)(const Hwcentry *));
+ /* Call <action> for each raw counter.
+ * Input:
+ * <action>:
+ * If NULL, no action is performed, but count is still returned.
+ * Otherwise called for each type of attributes, or if none exist,
+ * called once with NULL parameter.
+ * Return:
+ * Count of times <action> would have been called w/ non-NULL data.
+ * If <action> is not NULL, Hwcentry fields will be set as follows:
+ * <ctr->name>:
+ * HWC raw name without attributes, e.g. BSQ_cache_reference.
+ * <ctr->int_name>:
+ * NULL.
+ * <ctr->metric>:
+ * NULL.
+ * The remainder of the fields are the same as for
+ * hwc_scan_std_ctrs().
+ *
+ * Note: All fields point to static data, none should be freed.
+ */
+
+ extern void
+ hwc_usage (int forKernel, const char *cmd, const char *dataspace_msg);
+ /* Print an i18n'd description of "-h" usage, used by collect and er_kernel.
+ */
+
+ extern void hwc_usage_f (int forKernel, FILE *f, const char *cmd,
+ const char *dataspace_msg, int show_syntax,
+ int show_short_desc);
+ /* Print an i18n'd description of "-h" usage to a FILE. Used by GUI. */
+
+ extern char *hwc_rate_string (const Hwcentry *pctr, int force_numeric_format);
+ /* Returns {"on"|"hi"|"lo"|""|<value>}. Return value must be freed by caller. */
+
+ extern char *hwc_i18n_metric (const Hwcentry *ctr);
+ /* Get a basic lable for a counter, properly i18n'd.
+ * Note: NOT MT SAFE.
+ * Examples:
+ * CPU Cycles
+ * DC_rd Events
+ * Pseudocode:
+ * if(ctr->metric != NULL) {
+ * sprintf(metricbuf, PTXT(ctr->metric) );
+ * } else if (ctr->name != NULL) {
+ * sprintf(metricbuf, GTXT("%s Events"), ctr->name );
+ * } else if (ctr->int_name != NULL) {
+ * sprintf(metricbuf, GTXT("%s Events"), ctr->int_name );
+ * }
+ * Return: pointer to a buffer containing the above description.
+ */
+
+ extern char *hwc_hwcentry_string (char *buf, size_t buflen, const Hwcentry *ctr);
+ /* Get a i18n'd description of a HW counter's options.
+ * Examples of well-known counters:
+ * cycles[/{0|1}],9999991 ('CPU Cycles', alias for Cycle_cnt; CPU-cycles)
+ * dcr[/0],1000003 ('D$ Read Refs', alias for DC_rd; load events)
+ * Examples of raw counters:
+ * Cycle_cnt[/{0|1}],1000003 (CPU-cycles)
+ * DC_rd[/0],1000003 (load events)
+ * Return: <buf>, filled in.
+ */
+
+ extern char *hwc_hwcentry_specd_string (char *buf, size_t buflen, const Hwcentry *ctr);
+ /* Get a i18n'd description of a HW counter's specific configuration.
+ * Examples of well-known counters:
+ * cycles,9999991 ('CPU Cycles')
+ * +dcr/0,1000003 ('D$ Read Refs')
+ * Examples of raw counters:
+ * Cycle_cnt,1000003
+ * +DC_rd/0,1000003
+ * Return: <buf>, filled in.
+ */
+
+ extern const char *hwc_memop_string (ABST_type memop);
+ /* Get a i18n'd description of a variable of type ABST_type.
+ * Return: pointer to static string.
+ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/gprofng/common/hwcfuncs.c b/gprofng/common/hwcfuncs.c
new file mode 100644
index 00000000000..2f9764d2771
--- /dev/null
+++ b/gprofng/common/hwcfuncs.c
@@ -0,0 +1,704 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+/* Hardware counter profiling */
+#include "hwcdrv.h"
+#include "hwcfuncs.h"
+
+/*---------------------------------------------------------------------------*/
+/* macros */
+
+#define IS_GLOBAL /* Mark global symbols */
+#define HWCDRV_API static /* Mark functions used by hwcdrv API */
+
+/*---------------------------------------------------------------------------*/
+/* static variables */
+static uint_t cpcN_npics;
+static char hwcfuncs_errmsg_buf[1024];
+static int hwcfuncs_errmsg_enabled = 1;
+static int hwcfuncs_errmsg_valid;
+
+/* --- user counter selections and options */
+static unsigned hwcdef_cnt; /* number of *active* hardware counters */
+static Hwcentry hwcdef[MAX_PICS]; /* HWC definitions */
+static Hwcentry *hwctable[MAX_PICS]; /* HWC definitions */
+
+/* --- drivers --- */
+
+// default driver
+
+HWCDRV_API int
+hwcdrv_init (hwcfuncs_abort_fn_t abort_ftn, int* tsd_sz)
+{
+ return -1;
+}
+
+HWCDRV_API void
+hwcdrv_get_info (
+ int * cpuver, const char ** cciname,
+ uint_t * npics, const char ** docref, uint64_t* support) { }
+
+HWCDRV_API int
+hwcdrv_enable_mt (hwcfuncs_tsd_get_fn_t tsd_ftn)
+{
+ return -1;
+}
+
+HWCDRV_API int
+hwcdrv_get_descriptions (hwcf_hwc_cb_t *hwc_find_action,
+ hwcf_attr_cb_t *attr_find_action)
+{
+ return 0;
+}
+
+HWCDRV_API int
+hwcdrv_assign_regnos (Hwcentry *entries[], unsigned numctrs)
+{
+ return -1;
+}
+
+HWCDRV_API int
+hwcdrv_create_counters (unsigned hwcdef_cnt, Hwcentry *hwcdef)
+{
+ return -1;
+}
+
+HWCDRV_API int
+hwcdrv_read_events (hwc_event_t *events, hwc_event_samples_t*samples)
+{
+ return -1;
+}
+
+HWCDRV_API int
+hwcdrv_start (void)
+{
+ return -1;
+}
+
+HWCDRV_API int
+hwcdrv_overflow (siginfo_t *si, hwc_event_t *s, hwc_event_t *t)
+{
+ return 0;
+}
+
+HWCDRV_API int
+hwcdrv_sighlr_restart (const hwc_event_t *sample)
+{
+ return -1;
+}
+
+HWCDRV_API int
+hwcdrv_lwp_suspend (void)
+{
+ return -1;
+}
+
+HWCDRV_API int
+hwcdrv_lwp_resume (void)
+{
+ return -1;
+}
+
+HWCDRV_API int
+hwcdrv_free_counters (void)
+{
+ return 0;
+}
+
+HWCDRV_API int
+hwcdrv_lwp_init (void)
+{
+ return 0;
+}
+
+HWCDRV_API void
+hwcdrv_lwp_fini (void) { }
+
+static hwcdrv_api_t hwcdrv_default = {
+ hwcdrv_init,
+ hwcdrv_get_info,
+ hwcdrv_enable_mt,
+ hwcdrv_get_descriptions,
+ hwcdrv_assign_regnos,
+ hwcdrv_create_counters,
+ hwcdrv_start,
+ hwcdrv_overflow,
+ hwcdrv_read_events,
+ hwcdrv_sighlr_restart,
+ hwcdrv_lwp_suspend,
+ hwcdrv_lwp_resume,
+ hwcdrv_free_counters,
+ hwcdrv_lwp_init,
+ hwcdrv_lwp_fini,
+ -1 // hwcdrv_init_status
+};
+
+static hwcdrv_api_t *hwcdrv_driver = &hwcdrv_default;
+
+
+/*---------------------------------------------------------------------------*/
+/* misc */
+
+/* print a counter definition (for debugging) */
+static void
+ctrdefprint (int dbg_lvl, const char * hdr, Hwcentry*phwcdef)
+{
+ TprintfT (dbg_lvl, "%s: name='%s', int_name='%s',"
+ " reg_num=%d, timecvt=%d, memop=%d, "
+ "interval=%d, tag=%u, reg_list=%p\n",
+ hdr, phwcdef->name, phwcdef->int_name, phwcdef->reg_num,
+ phwcdef->timecvt, phwcdef->memop, phwcdef->val,
+ phwcdef->sort_order, phwcdef->reg_list);
+}
+
+/*---------------------------------------------------------------------------*/
+/* errmsg buffering */
+
+/* errmsg buffering is needed only because the most descriptive error
+ messages from CPC are delivered using a callback mechanism.
+ hwcfuncs_errmsg_get() should only be used during initialization, and
+ ideally, only to provide feedback to an end user when his counters can't
+ be bound to HW.
+ */
+IS_GLOBAL char *
+hwcfuncs_errmsg_get (char *buf, size_t bufsize, int enable)
+{
+ hwcfuncs_errmsg_enabled = 0;
+ if (buf && bufsize)
+ {
+ if (hwcfuncs_errmsg_valid)
+ {
+ strncpy (buf, hwcfuncs_errmsg_buf, bufsize);
+ buf[bufsize - 1] = 0;
+ }
+ else
+ *buf = 0;
+ }
+ hwcfuncs_errmsg_buf[0] = 0;
+ hwcfuncs_errmsg_valid = 0;
+ hwcfuncs_errmsg_enabled = enable;
+ return buf;
+}
+
+/* used by cpc to log an error */
+IS_GLOBAL void
+hwcfuncs_int_capture_errmsg (const char *fn, int subcode,
+ const char *fmt, va_list ap)
+{
+ if (hwcfuncs_errmsg_enabled &&
+ !hwcfuncs_errmsg_valid)
+ {
+ vsnprintf (hwcfuncs_errmsg_buf, sizeof (hwcfuncs_errmsg_buf), fmt, ap);
+ TprintfT (DBG_LT0, "hwcfuncs: cpcN_capture_errmsg(): %s\n",
+ hwcfuncs_errmsg_buf);
+ hwcfuncs_errmsg_valid = 1;
+ }
+ return;
+}
+
+/* Log an internal error to the CPC error buffer.
+ * Note: only call this during init functions.
+ * Note: when most cpc calls fail, they will call cpcN_capture_errmsg()
+ * directly, so only call logerr() when a non-cpc function fails.
+ */
+IS_GLOBAL void
+hwcfuncs_int_logerr (const char *format, ...)
+{
+ va_list va;
+ va_start (va, format);
+ hwcfuncs_int_capture_errmsg ("logerr", 0, format, va);
+ va_end (va);
+}
+
+/* utils to parse counter strings */
+static void
+clear_hwcdefs ()
+{
+ for (unsigned idx = 0; idx < MAX_PICS; idx++)
+ {
+ static Hwcentry empty;
+ hwcdef[idx] = empty; // leaks strings and reg_list array
+ hwcdef[idx].reg_num = REGNO_ANY;
+ hwcdef[idx].val = -1;
+ hwcdef[idx].sort_order = -1;
+ }
+}
+
+/* initialize hwcdef[] based on user's counter definitions */
+static int
+process_data_descriptor (const char *defstring)
+{
+ /*
+ * <defstring> format should be of format
+ * :%s:%s:0x%x:%d:%lld:%d:%d:0x%x[,%s...repeat for each ctr]
+ * where the counter fields are:
+ * :<userName>:<internalCtr>:<register>:<timeoutVal>[:m<min_time>]:<tag>:<timecvt>:<memop>
+ * See Coll_Ctrl::build_data_desc().
+ */
+ int err = 0;
+ char *ds = NULL;
+ char *dsp = NULL;
+ unsigned idx;
+
+ clear_hwcdefs ();
+ if (!defstring || !strlen (defstring))
+ {
+ err = HWCFUNCS_ERROR_HWCARGS;
+ goto ext_hw_install_end;
+ }
+ ds = strdup (defstring);
+ if (!ds)
+ {
+ err = HWCFUNCS_ERROR_HWCINIT;
+ goto ext_hw_install_end;
+ }
+ dsp = ds;
+
+ for (idx = 0; idx < MAX_PICS && *dsp; idx++)
+ {
+ char *name = NULL;
+ char *int_name = NULL;
+ regno_t reg = REGNO_ANY;
+ ABST_type memop = ABST_NONE;
+ int interval = 0;
+ int timecvt = 0;
+ unsigned sort_order = (unsigned) - 1;
+
+ /* name */
+ name = dsp;
+ dsp = strchr (dsp, ':');
+ if (dsp == NULL)
+ {
+ err = HWCFUNCS_ERROR_HWCARGS;
+ goto ext_hw_install_end;
+ }
+ *dsp++ = (char) 0;
+
+ /* int_name */
+ int_name = dsp;
+ dsp = strchr (dsp, ':');
+ if (dsp == NULL)
+ {
+ err = HWCFUNCS_ERROR_HWCARGS;
+ goto ext_hw_install_end;
+ }
+ *dsp++ = (char) 0;
+
+ /* reg_num */
+ reg = (int) strtol (dsp, &dsp, 0);
+ if (*dsp++ != ':')
+ {
+ err = HWCFUNCS_ERROR_HWCARGS;
+ goto ext_hw_install_end;
+ }
+ if (reg < 0 && reg != -1)
+ {
+ err = HWCFUNCS_ERROR_HWCARGS;
+ goto ext_hw_install_end;
+ }
+ if (reg >= 0)
+ hwcdef[idx].reg_num = reg;
+
+ /* val */
+ interval = (int) strtol (dsp, &dsp, 0);
+ if (*dsp++ != ':')
+ {
+ err = HWCFUNCS_ERROR_HWCARGS;
+ goto ext_hw_install_end;
+ }
+ if (interval < 0)
+ {
+ err = HWCFUNCS_ERROR_HWCARGS;
+ goto ext_hw_install_end;
+ }
+ hwcdef[idx].val = interval;
+
+ /* min_time */
+ /*
+ * This is a new field.
+ * An old launcher (dbx, etc.) would not include it.
+ * Detect the presence of the field by the char 'm'.
+ */
+ if (*dsp == 'm')
+ {
+ long long tmp_ll = 0;
+ dsp++;
+ tmp_ll = strtoll (dsp, &dsp, 0);
+ if (*dsp++ != ':')
+ {
+ err = HWCFUNCS_ERROR_HWCARGS;
+ goto ext_hw_install_end;
+ }
+ if (tmp_ll < 0)
+ {
+ err = HWCFUNCS_ERROR_HWCARGS;
+ goto ext_hw_install_end;
+ }
+ hwcdef[idx].min_time = tmp_ll;
+ }
+ else
+ hwcdef[idx].min_time = 0;
+
+ /* sort_order */
+ sort_order = (int) strtoul (dsp, &dsp, 0);
+ if (*dsp++ != ':')
+ {
+ err = HWCFUNCS_ERROR_HWCARGS;
+ goto ext_hw_install_end;
+ }
+ hwcdef[idx].sort_order = sort_order;
+
+ /* timecvt */
+ timecvt = (int) strtol (dsp, &dsp, 0);
+ if (*dsp++ != ':')
+ {
+ err = HWCFUNCS_ERROR_HWCARGS;
+ goto ext_hw_install_end;
+ }
+ hwcdef[idx].timecvt = timecvt;
+
+ /* memop */
+ memop = (ABST_type) strtol (dsp, &dsp, 0);
+ if (*dsp != 0 && *dsp++ != ',')
+ {
+ err = HWCFUNCS_ERROR_HWCARGS;
+ goto ext_hw_install_end;
+ }
+ hwcdef[idx].memop = memop;
+ if (*name)
+ hwcdef[idx].name = strdup (name);
+ else
+ hwcdef[idx].name = strdup (int_name);
+ if (*int_name)
+ hwcdef[idx].int_name = strdup (int_name);
+ else
+ hwcdef[idx].int_name = strdup (name);
+ ctrdefprint (DBG_LT1, "hwcfuncs: process_data_descriptor", &hwcdef[idx]);
+ }
+
+ if (*dsp)
+ {
+ TprintfT (DBG_LT0, "hwcfuncs: ERROR: process_data_descriptor(): "
+ "ctr string had some trailing garbage:"
+ " '%s'\n", dsp);
+ err = HWCFUNCS_ERROR_HWCARGS;
+ goto ext_hw_install_end;
+ }
+ free (ds);
+ hwcdef_cnt = idx;
+ return 0;
+
+ext_hw_install_end:
+ if (dsp && *dsp)
+ {
+ TprintfT (DBG_LT0, "hwcfuncs: ERROR: process_data_descriptor(): "
+ " syntax error just before:"
+ " '%s;\n", dsp);
+ logerr (GTXT ("Data descriptor syntax error near `%s'\n"), dsp);
+ }
+ else
+ logerr (GTXT ("Data descriptor syntax error\n"));
+ free (ds);
+ return err;
+}
+
+/* initialize hwcdef[] based on user's counter definitions */
+static int
+process_hwcentrylist (const Hwcentry* entries[], unsigned numctrs)
+{
+ int err = 0;
+ clear_hwcdefs ();
+ if (numctrs > cpcN_npics)
+ {
+ logerr (GTXT ("More than %d counters were specified\n"), cpcN_npics); /*!*/
+ return HWCFUNCS_ERROR_HWCARGS;
+ }
+ for (unsigned idx = 0; idx < numctrs; idx++)
+ {
+ Hwcentry *phwcdef = &hwcdef[idx];
+ *phwcdef = *entries[idx];
+ if (phwcdef->name)
+ phwcdef->name = strdup (phwcdef->name);
+ else
+ phwcdef->name = "NULL";
+ if (phwcdef->int_name)
+ phwcdef->int_name = strdup (phwcdef->int_name);
+ else
+ phwcdef->int_name = "NULL";
+ if (phwcdef->val < 0)
+ {
+ logerr (GTXT ("Negative interval specified for HW counter `%s'\n"), /*!*/
+ phwcdef->name);
+ err = HWCFUNCS_ERROR_HWCARGS;
+ break;
+ }
+ ctrdefprint (DBG_LT1, "hwcfuncs: process_hwcentrylist", phwcdef);
+ }
+ if (!err)
+ hwcdef_cnt = numctrs;
+ return err;
+}
+
+/* see hwcfuncs.h */
+IS_GLOBAL void *
+hwcfuncs_parse_attrs (const char *countername, hwcfuncs_attr_t attrs[],
+ unsigned max_attrs, uint_t *pnum_attrs, char**errstring)
+{
+ char *head = NULL;
+ char *tail = NULL;
+ uint_t nattrs = 0;
+ char *counter_copy;
+ int success = 0;
+ char errbuf[512];
+ errbuf[0] = 0;
+ counter_copy = strdup (countername);
+
+ /* advance pointer to first attribute */
+ tail = strchr (counter_copy, HWCFUNCS_PARSE_ATTR);
+ if (tail)
+ *tail = 0;
+
+ /* remove regno and value, if supplied */
+ {
+ char *tmp = strchr (counter_copy, HWCFUNCS_PARSE_REGNUM);
+ if (tmp)
+ *tmp = 0;
+ tmp = strchr (counter_copy, HWCFUNCS_PARSE_VALUE);
+ if (tmp)
+ *tmp = 0;
+ }
+
+ while (tail)
+ {
+ char *pch;
+ if (nattrs >= max_attrs)
+ {
+ snprintf (errbuf, sizeof (errbuf),
+ GTXT ("Too many attributes defined in `%s'"),
+ countername);
+ goto mycpc2_parse_attrs_end;
+ }
+ /* get attribute name */
+ head = tail + 1;
+ tail = strchr (head, HWCFUNCS_PARSE_EQUAL);
+ if (!tail)
+ {
+ snprintf (errbuf, sizeof (errbuf),
+ GTXT ("Missing value for attribute `%s' in `%s'"),
+ head, countername);
+ goto mycpc2_parse_attrs_end;
+ }
+ *tail = 0; /* null terminate current component */
+ attrs[nattrs].ca_name = head;
+
+ /* get attribute value */
+ head = tail + 1;
+ tail = strchr (head, HWCFUNCS_PARSE_ATTR);
+ if (tail)
+ *tail = 0; /* null terminate current component */
+ attrs[nattrs].ca_val = strtoull (head, &pch, 0);
+ if (pch == head)
+ {
+ snprintf (errbuf, sizeof (errbuf),
+ GTXT ("Illegal value for attribute `%s' in `%s'"),
+ attrs[nattrs].ca_name, countername);
+ goto mycpc2_parse_attrs_end;
+ }
+ TprintfT (DBG_LT0, "hwcfuncs: pic_: '%s', attribute[%u]"
+ " '%s' = 0x%llx\n",
+ counter_copy, nattrs, attrs[nattrs].ca_name,
+ (long long unsigned int) attrs[nattrs].ca_val);
+
+ nattrs++;
+ }
+ success = 1;
+
+mycpc2_parse_attrs_end:
+ *pnum_attrs = nattrs;
+ if (success)
+ {
+ if (errstring)
+ *errstring = NULL;
+ }
+ else
+ {
+ if (errstring)
+ *errstring = strdup (errbuf);
+ free (counter_copy);
+ counter_copy = NULL;
+ }
+ return counter_copy;
+}
+
+IS_GLOBAL void
+hwcfuncs_parse_ctr (const char *counter_def, int *pplus, char **pnameOnly,
+ char **pattrs, char **pregstr, regno_t *pregno)
+{
+ char *nameptr, *copy, *slash, *attr_delim;
+ int plus;
+ regno_t regno;
+ nameptr = copy = strdup (counter_def);
+
+ /* plus */
+ plus = 0;
+ if (nameptr[0] == HWCFUNCS_PARSE_BACKTRACK)
+ {
+ plus = 1;
+ nameptr++;
+ }
+ else if (nameptr[0] == HWCFUNCS_PARSE_BACKTRACK_OFF)
+ {
+ plus = -1;
+ nameptr++;
+ }
+ if (pplus)
+ *pplus = plus;
+
+ /* regno */
+ regno = REGNO_ANY;
+ if (pregstr)
+ *pregstr = NULL;
+ slash = strchr (nameptr, HWCFUNCS_PARSE_REGNUM);
+ if (slash != NULL)
+ {
+ /* the remaining string should be a number > 0 */
+ if (pregstr)
+ *pregstr = strdup (slash);
+ char *endchar = NULL;
+ regno = (regno_t) strtol (slash + 1, &endchar, 0);
+ if (*endchar != 0)
+ regno = -2;
+ if (*(slash + 1) == '-')
+ regno = -2;
+ /* terminate previous element up to slash */
+ *slash = 0;
+ }
+ if (pregno)
+ *pregno = regno;
+
+ /* attrs */
+ if (pattrs)
+ *pattrs = NULL;
+ attr_delim = strchr (nameptr, HWCFUNCS_PARSE_ATTR);
+ if (attr_delim != NULL)
+ {
+ if (pattrs)
+ *pattrs = strdup (attr_delim);
+ /* terminate previous element up to attr_delim */
+ *attr_delim++ = 0;
+ }
+ if (pnameOnly)
+ *pnameOnly = strdup (nameptr);
+ free (copy);
+}
+
+/* create counters */
+IS_GLOBAL int
+hwcfuncs_bind_descriptor (const char *defstring)
+{
+ int err = process_data_descriptor (defstring);
+ if (err)
+ {
+ TprintfT (DBG_LT0, "hwcfuncs: ERROR: hwcfuncs_bind_descriptor failed\n");
+ return err;
+ }
+ err = hwcdrv_driver->hwcdrv_create_counters (hwcdef_cnt, hwcdef);
+ return err;
+}
+
+/* see hwcfuncs.h */
+IS_GLOBAL int
+hwcfuncs_bind_hwcentry (const Hwcentry* entries[], unsigned numctrs)
+{
+ int err = -1;
+ err = process_hwcentrylist (entries, numctrs);
+ if (err)
+ {
+ TprintfT (DBG_LT0, "hwcfuncs: ERROR: hwcfuncs_bind_hwcentry\n");
+ return err;
+ }
+ err = hwcdrv_driver->hwcdrv_create_counters (hwcdef_cnt, hwcdef);
+ return err;
+}
+
+/* see hwcfuncs.h */
+IS_GLOBAL Hwcentry **
+hwcfuncs_get_ctrs (unsigned *defcnt)
+{
+ if (defcnt)
+ *defcnt = hwcdef_cnt;
+ return hwctable;
+}
+
+/* return 1 if <regno> is in Hwcentry's list */
+IS_GLOBAL int
+regno_is_valid (const Hwcentry * pctr, regno_t regno)
+{
+ regno_t *reg_list = pctr->reg_list;
+ if (REG_LIST_IS_EMPTY (reg_list))
+ return 0;
+ if (regno == REGNO_ANY) /* wildcard */
+ return 1;
+ for (int ii = 0; ii < MAX_PICS; ii++)
+ {
+ regno_t tmp = reg_list[ii];
+ if (REG_LIST_EOL (tmp)) /* end of list */
+ break;
+ if (tmp == regno) /* is in list */
+ return 1;
+ }
+ return 0;
+}
+
+/* supplied by hwcdrv_api drivers */
+IS_GLOBAL int
+hwcfuncs_assign_regnos (Hwcentry* entries[],
+ unsigned numctrs)
+{
+ if (numctrs > cpcN_npics)
+ {
+ logerr (GTXT ("More than %d counters were specified\n"), cpcN_npics); /*!*/
+ return HWCFUNCS_ERROR_HWCARGS;
+ }
+ return hwcdrv_driver->hwcdrv_assign_regnos (entries, numctrs);
+}
+
+extern hwcdrv_api_t hwcdrv_pcl_api;
+static int hwcdrv_driver_inited = 0;
+
+hwcdrv_api_t *
+get_hwcdrv ()
+{
+ if (hwcdrv_driver_inited)
+ return hwcdrv_driver;
+ hwcdrv_driver_inited = 1;
+ cpcN_npics = 0;
+ for (int i = 0; i < MAX_PICS; i++)
+ hwctable[i] = &hwcdef[i];
+ hwcdrv_driver = &hwcdrv_pcl_api;
+ hwcdrv_driver->hwcdrv_init_status = hwcdrv_driver->hwcdrv_init (NULL, NULL);
+ if (hwcdrv_driver->hwcdrv_init_status == 0)
+ {
+ hwcdrv_driver->hwcdrv_get_info (NULL, NULL, &cpcN_npics, NULL, NULL);
+ return hwcdrv_driver;
+ }
+ hwcdrv_driver = &hwcdrv_default;
+ return hwcdrv_driver;
+}
diff --git a/gprofng/common/hwcfuncs.h b/gprofng/common/hwcfuncs.h
new file mode 100644
index 00000000000..ef0360b1f7a
--- /dev/null
+++ b/gprofng/common/hwcfuncs.h
@@ -0,0 +1,269 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+/* Hardware counter profiling */
+
+#ifndef __HWCFUNCS_H
+#define __HWCFUNCS_H
+
+#ifdef LIBCOLLECTOR_SRC /* running in libcollector */
+#define hwcfuncs_int_logerr __collector_hwcfuncs_int_logerr
+#define hwcfuncs_parse_ctr __collector_hwcfuncs_parse_ctr
+#define hwcfuncs_parse_attrs __collector_hwcfuncs_parse_attrs
+#define hwcfuncs_bind_descriptor __collector_hwcfuncs_bind_descriptor
+#define hwcfuncs_bind_hwcentry __collector_hwcfuncs_bind_hwcentry
+#define hwcfuncs_assign_regnos __collector_hwcfuncs_assign_regnos
+#define regno_is_valid __collector_regno_is_valid
+#define hwcfuncs_get_ctrs __collector_hwcfuncs_get_ctrs
+#define hwcfuncs_errmsg_get __collector_hwcfuncs_errmsg_get
+#endif /* --- LIBCOLLECTOR_SRC --- */
+
+#include <signal.h> /* siginfo_t */
+#include <limits.h> /* UINT64_t */
+#include <sys/types.h>
+#include <stdint.h>
+
+#include "hwcentry.h" /* for Hwcentry type */
+#include "gp-time.h"
+
+typedef unsigned int uint_t;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*---------------------------------------------------------------------------*/
+/* compile options */
+
+#define HWC_DEBUG 0 /* 0/1 to enable extra HWC debug */
+
+/*---------------------------------------------------------------------------*/
+/* typedefs */
+/* generic hw event */
+ typedef struct _hwc_event_t
+ { /* generalized counter event */
+ hrtime_t ce_hrt; /* gethrtime() */
+ uint64_t ce_pic[MAX_PICS]; /* counter samples or start values */
+ } hwc_event_t;
+
+ /* supplementary data that accompanies some hw events */
+ typedef struct
+ { /* supplementary data fields */
+ uint64_t smpl_pc; /* pc related to event */
+ uint64_t smpl_data_source; /* chip-specific data source encoding */
+ uint64_t smpl_latency; /* latency related to event */
+ uint64_t smpl_mem_addr; /* memory address related to event */
+ } hwc_sample_t;
+#define HWCFUNCS_INVALID_U64 0xFEEDBEEFDEADBEEFllu /* identifies fields as unused */
+
+typedef struct { /* supplementary data fields */
+ hwc_sample_t sample[MAX_PICS]; /* counter samples or start values */
+} hwc_event_samples_t;
+
+#define HWCFUNCS_SAMPLE_RESET(sample) \
+ do { \
+ (sample)->smpl_pc =HWCFUNCS_INVALID_U64; \
+ (sample)->smpl_data_source =HWCFUNCS_INVALID_U64; \
+ (sample)->smpl_latency =HWCFUNCS_INVALID_U64; \
+ (sample)->smpl_mem_addr =HWCFUNCS_INVALID_U64; \
+ } while(0)
+
+#define HWCFUNCS_SAMPLE_IS_RESET(sample) \
+ ( \
+ (sample)->smpl_pc ==HWCFUNCS_INVALID_U64 && \
+ (sample)->smpl_data_source==HWCFUNCS_INVALID_U64 && \
+ (sample)->smpl_latency ==HWCFUNCS_INVALID_U64 && \
+ (sample)->smpl_mem_addr ==HWCFUNCS_INVALID_U64 \
+ )
+
+/*---------------------------------------------------------------------------*/
+/* macros */
+
+#define HW_INTERVAL_MAX UINT64_MAX
+#define HW_INTERVAL_PRESET(x) (HW_INTERVAL_MAX - ((uint64_t)(x) - 1))
+#define HW_INTERVAL_TYPE(x) ((uint64_t) (x)
+
+/* parsing */
+#define HWCFUNCS_MAX_ATTRS 20
+#define HWCFUNCS_PARSE_ATTR '~'
+#define HWCFUNCS_PARSE_EQUAL '='
+#define HWCFUNCS_PARSE_BACKTRACK '+'
+#define HWCFUNCS_PARSE_BACKTRACK_OFF '-'
+#define HWCFUNCS_PARSE_REGNUM '/'
+#define HWCFUNCS_PARSE_VALUE ','
+
+/* error codes */
+#define HWCFUNCS_ERROR_GENERIC (-1)
+#define HWCFUNCS_ERROR_NOT_SUPPORTED (-2)
+#define HWCFUNCS_ERROR_ALREADY_CALLED (-3)
+#define HWCFUNCS_ERROR_HWCINIT (-4)
+#define HWCFUNCS_ERROR_HWCARGS (-5)
+#define HWCFUNCS_ERROR_MEMORY (-6)
+#define HWCFUNCS_ERROR_UNAVAIL (-7)
+#define HWCFUNCS_ERROR_ERRNO_ZERO (-8)
+#define HWCFUNCS_ERROR_UNEXPECTED (-99)
+
+/*---------------------------------------------------------------------------*/
+/* prototypes */
+
+typedef void (*hwcfuncs_abort_fn_t) (int errnum, const char *msg);
+
+extern void hwcfuncs_int_logerr(const char *format,...);
+/* Log an error to the internal error buffer. See hwcfuncs_errmsg_get().
+ Note: Not MT-safe; don't even enable logging in an MT environment.
+ Recommend using this call only during init.
+ Note: when a libcpc call fails, it may automatically call
+ cpcN_capture_errmsg() to log the error message in the same internal buffer.
+ Recommend using this call only for non-cpc failures.
+ */
+
+#define HWCFUNCS_SUPPORT_OVERFLOW_PROFILING 0x01llu
+#define HWCFUNCS_SUPPORT_PEBS_SAMPLING 0x02llu
+#define HWCFUNCS_SUPPORT_OVERFLOW_CTR_ID 0x04llu // OS identifies which counter overflowed
+ /* get info about session
+ Input:
+ <cpuver>: if not NULL, returns value of CPC cpu version
+ <cciname>: if not NULL, returns name of CPU
+ <npics>: if not NULL, returns maximum # of HWCs
+ <docref>: if not NULL, returns documentation reference
+ <support>: if not NULL, returns bitmask (see above) of hwc support
+ Return: none
+ */
+
+ typedef void* (*hwcfuncs_tsd_get_fn_t) (void);
+ typedef void (hwcf_hwc_cb_t) (uint_t cpcregno, const char *name);
+ typedef void (hwcf_attr_cb_t) (const char *attr);
+
+ extern void
+ hwcfuncs_parse_ctr (const char *counter_def, int *pplus, char **pnameOnly,
+ char **pattrs, char **pregstr, regno_t *pregno);
+/* Parse a counter definition string (value must already be stripped off).
+ Input:
+ <counter_def>: input whose format is
+ [+|-]<countername>[~attrs...][/<regno>]
+ pointers to return values: Any can be NULL.
+ Return:
+ <plus>: 1 if [+] is found, -1 if [-] is found, 0 otherwise
+ <pnameonly>: strdup(<countername>)
+ <pattrs>: strdup([~attrs...]) if specified, NULL otherwise.
+ <pregstr>: strdup(/<regno>) if specified, NULL otherwise.
+ <pregno>: <regno> if readable, REGNO_ANY if not specd, or -2 otherwise.
+ */
+
+ typedef struct
+ {
+ char *ca_name;
+ uint64_t ca_val;
+ } hwcfuncs_attr_t; /* matches cpc_attr_t */
+
+ void * hwcfuncs_parse_attrs (const char *countername,
+ hwcfuncs_attr_t attrs[], unsigned max_attrs,
+ uint_t *pnum_attrs, char **errstring);
+ /* Extract the attribute fields from <countername>.
+ Input:
+ <countername>: string whose format is
+ [+]<ctrname>[~attributes...][/<regno>][,...]
+ <attrs>: array of attributes to be returned
+ <max_attrs>: number of elements in <attrs>
+ <pnum_attrs>: if not NULL, will return how many attrs were found.
+ <errstring>: pointer to a buffer for storing error info, or NULL.
+ Return: upon success, a pointer to an allocated copy of <countername>, or
+ NULL if there's a failure. (A copy is made in order to provide storage
+ for the ca_name fields in the <attrs> array.)
+
+ The pointer should be freed when <attrs> is no longer in use.
+ <attrs> will be filled in data from countername.
+ <pnum_attrs> will have the number of elements in <attrs>. May be
+ non-zero even if return value indicates an error.
+ <errstring> NULL if no error, otherwise, a malloc'd GTXT string.
+ */
+
+ extern int hwcfuncs_bind_descriptor (const char *defstring);
+ /* Bind counters to resources.
+ Input:
+ <defstring>: string whose format is
+ :%s:%s:0x%x:%d:%d,0x%x[:%s...repeat for each ctr]
+ where the fields are:
+ :<userName>:<internalCtr>:<register>:<timeoutVal>:<tag>:<memop>
+ Return: 0 if successful
+ HWCFUNCS_ERROR_HWCINIT if resources unavailable
+ HWCFUNCS_ERROR_HWCARGS if counters were not specified correctly
+ */
+
+ extern int hwcfuncs_bind_hwcentry (const Hwcentry *entries[],
+ unsigned numctrs);
+ /* Bind counters to resources.
+ Input:
+ <entries>: array of counters
+ <numctrs>: number of items in <entries>
+ Return: 0 if successful
+ HWCFUNCS_ERROR_HWCINIT if resources unavailable
+ HWCFUNCS_ERROR_HWCARGS if counters were not specified correctly
+ */
+
+ extern int hwcfuncs_assign_regnos (Hwcentry *entries[], unsigned numctrs);
+ /* Assign entries[]->reg_num values as needed by platform
+ Note: modifies <entries> by supplying a regno to each counter
+ Input:
+ <entries>: array of counters
+ <numctrs>: number of items in <entries>
+ Output:
+ <entries>: array of counters is modified
+ Return: 0 if successful
+ HWCFUNCS_ERROR_HWCINIT if resources unavailable
+ HWCFUNCS_ERROR_HWCARGS if counters were not specified correctly
+ */
+
+ extern int regno_is_valid (const Hwcentry *pctr, regno_t regno);
+ /* return 1 if <regno> is in Hwcentry's list
+ Input:
+ <pctr>: counter definition, reg_list[] should be initialized
+ <regno>: register to check
+ Return: 1 if <regno> is in Hwcentry's list, 0 otherwise
+ */
+
+ extern Hwcentry **hwcfuncs_get_ctrs (unsigned *defcnt);
+ /* Get descriptions of the currently bound counters.
+ Input:
+ <defcnt>: if not NULL, returns number of counter definitions.
+ Return:
+ table of counter definition pointers
+ */
+
+ extern char *hwcfuncs_errmsg_get (char * buf, size_t bufsize,
+ int enable_capture);
+ /* Gets a recent HWC error message.
+ To clear previous error messages and insure error message is enabled,
+ call hwcfuncs_errmsg_get(NULL,0,1).
+ Once enabled, one error is stored in an internal buffer. A call to this
+ function will clear the buffer and allow a new message to be captured.
+ Note: Not MT-safe - don't enable this feature in an MT environment.
+ Input:
+ <buf>: pointer to buffer or NULL.
+ <bufsize>: size of <buf>
+ <enable_capture>: 0 - disable buffering, 1 - enable buffering.
+ Return: error string or an empty string.
+ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ! __HWCFUNCS_H */
diff --git a/gprofng/common/hwctable.c b/gprofng/common/hwctable.c
new file mode 100644
index 00000000000..bc441e133a7
--- /dev/null
+++ b/gprofng/common/hwctable.c
@@ -0,0 +1,5410 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <errno.h>
+#include <string.h>
+#include <limits.h>
+
+#include "hwcdrv.h"
+#include "hwcfuncs.h"
+
+/* TprintfT(<level>,...) definitions. Adjust per module as needed */
+#define DBG_LT0 0 // for high-level configuration, unexpected errors/warnings
+#define DBG_LT1 1 // for configuration details, warnings
+#define DBG_LT2 2
+#define DBG_LT3 3
+
+/*---------------------------------------------------------------------------*/
+/* compile options */
+
+#define DISALLOW_USI_USII_6357446
+/* Solaris 9/libcpc1 allows cpc_bind() to work on US-IIe processors, even
+ though this processor cannot generate profiling interrupts. */
+
+#define DISALLOW_PENTIUM_PRO_MMX_7007575
+/* Solaris/libcpc2 defaults to "Pentium Pro with MMX, Pentium II"
+ when it doesn't recognize an Intel processor. As a result,
+ when collect attempts to start Pentium Pro counters on a
+ new machine (e.g. Westmere as of 1/2011), the OS may hang. */
+
+/* Register 0 counter doesn't work on Niagara T1 version (?) */
+#define WORKAROUND_6231196_NIAGARA1_NO_CTR_0
+
+/*---------------------------------------------------------------------------*/
+/* consts, macros */
+
+/* 10^N rates */
+#define PRELOADS_9 1001000001
+#define PRELOADS_85 320100001
+#define PRELOADS_8 100100001
+#define PRELOADS_75 32010001
+#define PRELOADS_7 10010001
+#define PRELOADS_65 3201001
+#define PRELOADS_6 1001001
+#define PRELOADS_55 320101
+#define PRELOADS_5 100101
+#define PRELOADS_45 32001
+#define PRELOADS_4 10001
+#define PRELOADS_35 3201
+#define PRELOADS_3 1001
+#define PRELOADS_25 301
+
+#define ABST_TBD ABST_NONE /* to be determined */
+
+/*---------------------------------------------------------------------------*/
+/* prototypes */
+static void hwc_cb (uint_t cpc_regno, const char *name);
+static void attrs_cb (const char *attr);
+static int attr_is_valid (int forKernel, const char *attr);
+
+/*---------------------------------------------------------------------------*/
+/* HWC definition tables */
+
+/*
+ comments on hwcentry tables
+ ---------------------------
+ name: this field should not contain '~'.
+ int_name: actual name of register, may contain ~ attribute specifications.
+ regnum: assigned register.
+ metric: if non-NULL, is a 'standard' counter that will show up in help.
+ timecvt: >0: can convert to time, 'timecvt' CPU cycles per event
+ =0: counts events
+ <0: can convert to time, count reference-clock cycles at '-timecvt' MHz
+ memop: see description for ABST_type enum
+ */
+
+// PRELOAD(): generates an interval based on the cycles/event and CPU GHZ.
+// Note: the macro tweaks the interval so that it ends in decimal 001.
+#define CYC_PER_SAMPLE (1000ULL*1000*1000/100) // cycles per signal at 1ghz, 100 samples/second
+#define PRELOAD(min_cycles_per_event,ghz) (((ghz)*CYC_PER_SAMPLE/(min_cycles_per_event))/100*100+1)
+
+// PRELOAD_DEF: initial value for uncalibrated events.
+// This value should be based on a rate that will work for the slowest changing
+// HWCs, HWCs where there are many CPU cycles between events.
+//
+// The interval needs to target the slowest HWCs so that
+// automatic adjustment of HWC overflow intervals can adapt.
+#define PRELOAD_DEF PRELOAD(1000,3) // default interval targets 1000 cycles/event at 3ghz
+// For er_kernel, which HWC intervals cannot be adjusted automatically for ON/HI/LO,
+// The interval should target some safe interval for fast events
+#define PRELOAD_DEF_ERKERNEL PRELOAD(4,4) // default interval targets 4 cycles/event at 4ghz
+
+static const Hwcentry empty_ctr = {NULL, NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NONE, 0};
+
+
+// --- use cycles counter to expose "system_time" on Linux ---
+#define SYSTIME_REGNOS REGNO_ANY // Linux: make sys_time/usr_time available for data collection
+// Note: For x86, Linux and Solaris use different ref-clock names
+#define USE_INTEL_REF_CYCLES(MHZ) \
+ {"usr_time","unhalted-reference-cycles", SYSTIME_REGNOS, STXT("User CPU"), PRELOAD(900,MHZ), -(MHZ), ABST_NONE}, \
+ {"usr_time","cpu_clk_unhalted.ref_p", SYSTIME_REGNOS, STXT("User CPU"), PRELOAD(900,MHZ), -(MHZ), ABST_NONE}, \
+ {"sys_time","unhalted-reference-cycles~system=1~user=0", SYSTIME_REGNOS, STXT("System CPU"), PRELOAD(900,MHZ), -(MHZ), ABST_NONE}, \
+ {"sys_time","cpu_clk_unhalted.ref_p~system=1~user=0", SYSTIME_REGNOS, STXT("System CPU"), PRELOAD( 900,MHZ), -(MHZ), ABST_NONE}, \
+ {"cycles0", "unhalted-reference-cycles", 0, NULL, PRELOAD( 900,MHZ), -(MHZ), ABST_NONE}, /*hidden*/ \
+ {"cycles0", "cpu_clk_unhalted.ref_p", 0, NULL, PRELOAD( 900,MHZ), -(MHZ), ABST_NONE}, /*hidden*/ \
+ {"cycles1", "unhalted-reference-cycles", 1, NULL, PRELOAD( 910,MHZ), -(MHZ), ABST_NONE}, /*hidden*/ \
+ {"cycles1", "cpu_clk_unhalted.ref_p", 1, NULL, PRELOAD( 910,MHZ), -(MHZ), ABST_NONE}, /*hidden*/ \
+ /* end of list */
+
+#define SPARC_CYCLES \
+ {"usr_time","Cycles_user", SYSTIME_REGNOS, STXT("User CPU"), PRELOADS_75,1, ABST_NONE}, \
+ {"sys_time","Cycles_user~system=1~user=0", SYSTIME_REGNOS, STXT("System CPU"), PRELOADS_75,1, ABST_NONE}, \
+ /* end of list */
+
+
+/* --- PERF_EVENTS "software" definitions --- */
+#define PERF_EVENTS_SW_EVENT_ALIASES \
+// none supported for now
+#if 0
+ {"usr", "PERF_COUNT_SW_TASK_CLOCK", REGNO_ANY, STXT("User CPU"), PRELOADS_7, -(1000), ABST_NONE}, \
+ {"sys", "PERF_COUNT_SW_TASK_CLOCK~system=1~user=0", REGNO_ANY, STXT("System CPU"), PRELOADS_7, -(1000), ABST_NONE}, \
+ /* end of list */
+#endif
+
+#define PERF_EVENTS_SW_EVENT_DEFS \
+// none supported for now
+#if 0
+ {"PERF_COUNT_SW_TASK_CLOCK", NULL, REGNO_ANY, NULL, PRELOADS_7, -(1000),ABST_NONE}, \
+ /* end of list */
+#endif
+
+/*
+ * The PAPI descriptive strings used to be wrapped with STXT(),
+ * a macro defined in perfan/include/i18n.h. For the time being,
+ * we want to demote the PAPI counters by omitting the
+ * descriptions. So we use a new macro PAPITXT() for this purpose.
+ */
+#define PAPITXT(x) NULL
+
+/* Solaris "Generic" Counters */
+static Hwcentry papi_generic_list[] = {
+ {"PAPI_l1_dcm", NULL, REGNO_ANY, PAPITXT ("L1 D-cache misses"), PRELOADS_65, 0, ABST_NONE},
+ {"PAPI_l1_icm", NULL, REGNO_ANY, PAPITXT ("L1 I-cache misses"), PRELOADS_6, 0, ABST_NONE},
+ {"PAPI_l2_dcm", NULL, REGNO_ANY, PAPITXT ("L2 D-cache misses"), PRELOADS_6, 0, ABST_NONE},
+ {"PAPI_l2_icm", NULL, REGNO_ANY, PAPITXT ("L2 I-cache misses"), PRELOADS_6, 0, ABST_NONE},
+ {"PAPI_l3_dcm", NULL, REGNO_ANY, PAPITXT ("L3 D-cache misses"), PRELOADS_5, 0, ABST_NONE},
+ {"PAPI_l3_icm", NULL, REGNO_ANY, PAPITXT ("L3 I-cache misses"), PRELOADS_5, 0, ABST_NONE},
+ {"PAPI_l1_tcm", NULL, REGNO_ANY, PAPITXT ("L1 misses"), PRELOADS_65, 0, ABST_NONE},
+ {"PAPI_l2_tcm", NULL, REGNO_ANY, PAPITXT ("L2 misses"), PRELOADS_6, 0, ABST_NONE},
+ {"PAPI_l3_tcm", NULL, REGNO_ANY, PAPITXT ("L3 misses"), PRELOADS_5, 0, ABST_NONE},
+ {"PAPI_ca_snp", NULL, REGNO_ANY, PAPITXT ("Requests for a snoop"), PRELOADS_6, 0, ABST_NONE},
+ {"PAPI_ca_shr", NULL, REGNO_ANY, PAPITXT ("Requests for exclusive access to shared cache line"), PRELOADS_6, 0, ABST_NONE},
+ {"PAPI_ca_cln", NULL, REGNO_ANY, PAPITXT ("Requests for exclusive access to clean cache line"), PRELOADS_6, 0, ABST_NONE},
+ {"PAPI_ca_inv", NULL, REGNO_ANY, PAPITXT ("Requests for cache line invalidation"), PRELOADS_6, 0, ABST_NONE},
+ {"PAPI_ca_itv", NULL, REGNO_ANY, PAPITXT ("Requests for cache line intervention"), PRELOADS_6, 0, ABST_NONE},
+ {"PAPI_l3_ldm", NULL, REGNO_ANY, PAPITXT ("L3 load misses"), PRELOADS_5, 0, ABST_NONE},
+ {"PAPI_l3_stm", NULL, REGNO_ANY, PAPITXT ("L3 store misses"), PRELOADS_5, 0, ABST_NONE},
+ {"PAPI_bru_idl", NULL, REGNO_ANY, PAPITXT ("Cycles branch units are idle"), PRELOADS_7, 1, ABST_NONE},
+ {"PAPI_fxu_idl", NULL, REGNO_ANY, PAPITXT ("Cycles integer units are idle"), PRELOADS_7, 1, ABST_NONE},
+ {"PAPI_fpu_idl", NULL, REGNO_ANY, PAPITXT ("Cycles FP units are idle"), PRELOADS_7, 1, ABST_NONE},
+ {"PAPI_lsu_idl", NULL, REGNO_ANY, PAPITXT ("Cycles load/store units are idle"), PRELOADS_7, 1, ABST_NONE},
+ {"PAPI_tlb_dm", NULL, REGNO_ANY, PAPITXT ("DTLB misses"), PRELOADS_6, 0, ABST_NONE},
+ {"PAPI_tlb_im", NULL, REGNO_ANY, PAPITXT ("ITLB misses"), PRELOADS_6, 0, ABST_NONE},
+ {"PAPI_tlb_tl", NULL, REGNO_ANY, PAPITXT ("Total TLB misses"), PRELOADS_6, 0, ABST_NONE},
+ {"PAPI_tlb_tm", NULL, REGNO_ANY, PAPITXT ("Total TLB misses"), PRELOADS_6, 0, ABST_NONE},
+ {"PAPI_l1_ldm", NULL, REGNO_ANY, PAPITXT ("L1 load misses"), PRELOADS_65, 0, ABST_NONE},
+ {"PAPI_l1_stm", NULL, REGNO_ANY, PAPITXT ("L1 store misses"), PRELOADS_65, 0, ABST_NONE},
+ {"PAPI_l2_ldm", NULL, REGNO_ANY, PAPITXT ("L2 load misses"), PRELOADS_6, 0, ABST_NONE},
+ {"PAPI_l2_stm", NULL, REGNO_ANY, PAPITXT ("L2 store misses"), PRELOADS_6, 0, ABST_NONE},
+ {"PAPI_btac_m", NULL, REGNO_ANY, PAPITXT ("Branch target address cache misses"), PRELOADS_5, 0, ABST_NONE},
+ {"PAPI_prf_dm", NULL, REGNO_ANY, PAPITXT ("Data prefetch cache misses"), PRELOADS_65, 0, ABST_NONE},
+ {"PAPI_l3_dch", NULL, REGNO_ANY, PAPITXT ("L3 D-cache hits"), PRELOADS_6, 0, ABST_NONE},
+ {"PAPI_tlb_sd", NULL, REGNO_ANY, PAPITXT ("TLB shootdowns"), PRELOADS_6, 0, ABST_NONE},
+ {"PAPI_csr_fal", NULL, REGNO_ANY, PAPITXT ("Failed store conditional instructions"), PRELOADS_6, 0, ABST_NONE},
+ {"PAPI_csr_suc", NULL, REGNO_ANY, PAPITXT ("Successful store conditional instructions"), PRELOADS_7, 0, ABST_NONE},
+ {"PAPI_csr_tot", NULL, REGNO_ANY, PAPITXT ("Total store conditional instructions"), PRELOADS_7, 0, ABST_NONE},
+ {"PAPI_mem_scy", NULL, REGNO_ANY, PAPITXT ("Cycles Stalled Waiting for memory accesses"), PRELOADS_7, 1, ABST_NONE},
+ {"PAPI_mem_rcy", NULL, REGNO_ANY, PAPITXT ("Cycles Stalled Waiting for memory reads"), PRELOADS_7, 1, ABST_NONE},
+ {"PAPI_mem_wcy", NULL, REGNO_ANY, PAPITXT ("Cycles Stalled Waiting for memory writes"), PRELOADS_7, 1, ABST_NONE},
+ {"PAPI_stl_icy", NULL, REGNO_ANY, PAPITXT ("Cycles with no instruction issue"), PRELOADS_7, 1, ABST_NONE},
+ {"PAPI_ful_icy", NULL, REGNO_ANY, PAPITXT ("Cycles with maximum instruction issue"), PRELOADS_7, 1, ABST_NONE},
+ {"PAPI_stl_ccy", NULL, REGNO_ANY, PAPITXT ("Cycles with no instructions completed"), PRELOADS_7, 1, ABST_NONE},
+ {"PAPI_ful_ccy", NULL, REGNO_ANY, PAPITXT ("Cycles with maximum instructions completed"), PRELOADS_7, 1, ABST_NONE},
+ {"PAPI_hw_int", NULL, REGNO_ANY, PAPITXT ("Hardware interrupts"), PRELOADS_5, 0, ABST_NONE},
+ {"PAPI_br_ucn", NULL, REGNO_ANY, PAPITXT ("Unconditional branch instructions"), PRELOADS_7, 0, ABST_NONE},
+ {"PAPI_br_cn", NULL, REGNO_ANY, PAPITXT ("Cond. branch instructions"), PRELOADS_7, 0, ABST_NONE},
+ {"PAPI_br_tkn", NULL, REGNO_ANY, PAPITXT ("Cond. branch instructions taken"), PRELOADS_7, 0, ABST_NONE},
+ {"PAPI_br_ntk", NULL, REGNO_ANY, PAPITXT ("Cond. branch instructions not taken"), PRELOADS_7, 0, ABST_NONE},
+ {"PAPI_br_msp", NULL, REGNO_ANY, PAPITXT ("Cond. branch instructions mispredicted"), PRELOADS_6, 0, ABST_NONE},
+ {"PAPI_br_prc", NULL, REGNO_ANY, PAPITXT ("Cond. branch instructions correctly predicted"), PRELOADS_7, 0, ABST_NONE},
+ {"PAPI_fma_ins", NULL, REGNO_ANY, PAPITXT ("FMA instructions completed"), PRELOADS_65, 0, ABST_NONE},
+ {"PAPI_tot_iis", NULL, REGNO_ANY, PAPITXT ("Instructions issued"), PRELOADS_7, 0, ABST_NONE},
+ {"PAPI_tot_ins", NULL, REGNO_ANY, PAPITXT ("Instructions completed"), PRELOADS_7, 0, ABST_NONE},
+ {"PAPI_int_ins", NULL, REGNO_ANY, PAPITXT ("Integer instructions"), PRELOADS_7, 0, ABST_NONE},
+ {"PAPI_fp_ins", NULL, REGNO_ANY, PAPITXT ("Floating-point instructions"), PRELOADS_7, 0, ABST_NONE},
+ {"PAPI_ld_ins", NULL, REGNO_ANY, PAPITXT ("Load instructions"), PRELOADS_7, 0, ABST_NONE},
+ {"PAPI_sr_ins", NULL, REGNO_ANY, PAPITXT ("Store instructions"), PRELOADS_7, 0, ABST_NONE},
+ {"PAPI_br_ins", NULL, REGNO_ANY, PAPITXT ("Branch instructions"), PRELOADS_7, 0, ABST_NONE},
+ {"PAPI_vec_ins", NULL, REGNO_ANY, PAPITXT ("Vector/SIMD instructions"), PRELOADS_7, 0, ABST_NONE},
+ {"PAPI_res_stl", NULL, REGNO_ANY, PAPITXT ("Cycles stalled on any resource"), PRELOADS_7, 1, ABST_NONE},
+ {"PAPI_fp_stal", NULL, REGNO_ANY, PAPITXT ("Cycles the FP unit(s) are stalled"), PRELOADS_7, 1, ABST_NONE},
+ {"PAPI_tot_cyc", NULL, REGNO_ANY, PAPITXT ("Total cycles"), PRELOADS_7, 1, ABST_NONE},
+ {"PAPI_lst_ins", NULL, REGNO_ANY, PAPITXT ("Load/store instructions completed"), PRELOADS_7, 0, ABST_NONE},
+ {"PAPI_syc_ins", NULL, REGNO_ANY, PAPITXT ("Sync instructions completed"), PRELOADS_65, 0, ABST_NONE},
+ {"PAPI_l1_dch", NULL, REGNO_ANY, PAPITXT ("L1 D-cache hits"), PRELOADS_7, 0, ABST_NONE},
+ {"PAPI_l2_dch", NULL, REGNO_ANY, PAPITXT ("L2 D-cache hits"), PRELOADS_65, 0, ABST_NONE},
+ {"PAPI_l1_dca", NULL, REGNO_ANY, PAPITXT ("L1 D-cache accesses"), PRELOADS_7, 0, ABST_NONE},
+ {"PAPI_l2_dca", NULL, REGNO_ANY, PAPITXT ("L2 D-cache accesses"), PRELOADS_65, 0, ABST_NONE},
+ {"PAPI_l3_dca", NULL, REGNO_ANY, PAPITXT ("L3 D-cache accesses"), PRELOADS_6, 0, ABST_NONE},
+ {"PAPI_l1_dcr", NULL, REGNO_ANY, PAPITXT ("L1 D-cache reads"), PRELOADS_7, 0, ABST_NONE},
+ {"PAPI_l2_dcr", NULL, REGNO_ANY, PAPITXT ("L2 D-cache reads"), PRELOADS_65, 0, ABST_NONE},
+ {"PAPI_l3_dcr", NULL, REGNO_ANY, PAPITXT ("L3 D-cache reads"), PRELOADS_6, 0, ABST_NONE},
+ {"PAPI_l1_dcw", NULL, REGNO_ANY, PAPITXT ("L1 D-cache writes"), PRELOADS_7, 0, ABST_NONE},
+ {"PAPI_l2_dcw", NULL, REGNO_ANY, PAPITXT ("L2 D-cache writes"), PRELOADS_65, 0, ABST_NONE},
+ {"PAPI_l3_dcw", NULL, REGNO_ANY, PAPITXT ("L3 D-cache writes"), PRELOADS_6, 0, ABST_NONE},
+ {"PAPI_l1_ich", NULL, REGNO_ANY, PAPITXT ("L1 I-cache hits"), PRELOADS_7, 0, ABST_NONE},
+ {"PAPI_l2_ich", NULL, REGNO_ANY, PAPITXT ("L2 I-cache hits"), PRELOADS_65, 0, ABST_NONE},
+ {"PAPI_l3_ich", NULL, REGNO_ANY, PAPITXT ("L3 I-cache hits"), PRELOADS_6, 0, ABST_NONE},
+ {"PAPI_l1_ica", NULL, REGNO_ANY, PAPITXT ("L1 I-cache accesses"), PRELOADS_7, 0, ABST_NONE},
+ {"PAPI_l2_ica", NULL, REGNO_ANY, PAPITXT ("L2 I-cache accesses"), PRELOADS_65, 0, ABST_NONE},
+ {"PAPI_l3_ica", NULL, REGNO_ANY, PAPITXT ("L3 I-cache accesses"), PRELOADS_6, 0, ABST_NONE},
+ {"PAPI_l1_icr", NULL, REGNO_ANY, PAPITXT ("L1 I-cache reads"), PRELOADS_7, 0, ABST_NONE},
+ {"PAPI_l2_icr", NULL, REGNO_ANY, PAPITXT ("L2 I-cache reads"), PRELOADS_65, 0, ABST_NONE},
+ {"PAPI_l3_icr", NULL, REGNO_ANY, PAPITXT ("L3 I-cache reads"), PRELOADS_6, 0, ABST_NONE},
+ {"PAPI_l1_icw", NULL, REGNO_ANY, PAPITXT ("L1 I-cache writes"), PRELOADS_7, 0, ABST_NONE},
+ {"PAPI_l2_icw", NULL, REGNO_ANY, PAPITXT ("L2 I-cache writes"), PRELOADS_65, 0, ABST_NONE},
+ {"PAPI_l3_icw", NULL, REGNO_ANY, PAPITXT ("L3 I-cache writes"), PRELOADS_6, 0, ABST_NONE},
+ {"PAPI_l1_tch", NULL, REGNO_ANY, PAPITXT ("L1 total hits"), PRELOADS_7, 0, ABST_NONE},
+ {"PAPI_l2_tch", NULL, REGNO_ANY, PAPITXT ("L2 total hits"), PRELOADS_65, 0, ABST_NONE},
+ {"PAPI_l3_tch", NULL, REGNO_ANY, PAPITXT ("L3 total hits"), PRELOADS_6, 0, ABST_NONE},
+ {"PAPI_l1_tca", NULL, REGNO_ANY, PAPITXT ("L1 total accesses"), PRELOADS_7, 0, ABST_NONE},
+ {"PAPI_l2_tca", NULL, REGNO_ANY, PAPITXT ("L2 total accesses"), PRELOADS_65, 0, ABST_NONE},
+ {"PAPI_l3_tca", NULL, REGNO_ANY, PAPITXT ("L3 total accesses"), PRELOADS_6, 0, ABST_NONE},
+ {"PAPI_l1_tcr", NULL, REGNO_ANY, PAPITXT ("L1 total reads"), PRELOADS_7, 0, ABST_NONE},
+ {"PAPI_l2_tcr", NULL, REGNO_ANY, PAPITXT ("L2 total reads"), PRELOADS_65, 0, ABST_NONE},
+ {"PAPI_l3_tcr", NULL, REGNO_ANY, PAPITXT ("L3 total reads"), PRELOADS_6, 0, ABST_NONE},
+ {"PAPI_l1_tcw", NULL, REGNO_ANY, PAPITXT ("L1 total writes"), PRELOADS_7, 0, ABST_NONE},
+ {"PAPI_l2_tcw", NULL, REGNO_ANY, PAPITXT ("L2 total writes"), PRELOADS_65, 0, ABST_NONE},
+ {"PAPI_l3_tcw", NULL, REGNO_ANY, PAPITXT ("L3 total writes"), PRELOADS_6, 0, ABST_NONE},
+ {"PAPI_fml_ins", NULL, REGNO_ANY, PAPITXT ("FP multiply instructions"), PRELOADS_7, 0, ABST_NONE},
+ {"PAPI_fad_ins", NULL, REGNO_ANY, PAPITXT ("FP add instructions"), PRELOADS_7, 0, ABST_NONE},
+ {"PAPI_fdv_ins", NULL, REGNO_ANY, PAPITXT ("FP divide instructions"), PRELOADS_7, 0, ABST_NONE},
+ {"PAPI_fsq_ins", NULL, REGNO_ANY, PAPITXT ("FP square root instructions"), PRELOADS_65, 0, ABST_NONE},
+ {"PAPI_fnv_ins", NULL, REGNO_ANY, PAPITXT ("FP inverse instructions"), PRELOADS_7, 0, ABST_NONE},
+ {"PAPI_fp_ops", NULL, REGNO_ANY, PAPITXT ("FP operations"), PRELOADS_7, 0, ABST_NONE},
+ {NULL, NULL, 0, NULL, 0, 0, 0, 0, ABST_NONE}
+};
+
+static Hwcentry usIlist[] = {
+ {"cycles", "Cycle_cnt", REGNO_ANY, STXT ("CPU Cycles"), PRELOADS_7, 1, ABST_NONE},
+ {"insts", "Instr_cnt", REGNO_ANY, STXT ("Instructions Executed"), PRELOADS_7, 0, ABST_NONE},
+ {NULL, NULL, 0, NULL, 0, 0, 0, 0, ABST_NONE}
+};
+
+static Hwcentry usIIIlist[] = /* III, IIIi, IIIp. Note that some counters are processor-specific */{
+ {"cycles", "Cycle_cnt", REGNO_ANY, STXT ("CPU Cycles"), PRELOADS_7, 1, ABST_NONE},
+ {"insts", "Instr_cnt", REGNO_ANY, STXT ("Instructions Executed"), PRELOADS_7, 0, ABST_NONE},
+ {"icm", "IC_miss", REGNO_ANY, STXT ("I$ Misses"), PRELOADS_5, 0, ABST_NONE},
+ {"dcrm", "DC_rd_miss", REGNO_ANY, STXT ("D$ Read Misses"), PRELOADS_5, 0, ABST_LOAD},
+ {"dcwm", "DC_wr_miss", REGNO_ANY, STXT ("D$ Write Misses"), PRELOADS_5, 0, ABST_STORE},
+ {"dcr", "DC_rd", REGNO_ANY, STXT ("D$ Read Refs"), PRELOADS_6, 0, ABST_LOAD},
+ {"dcw", "DC_wr", REGNO_ANY, STXT ("D$ Write Refs"), PRELOADS_6, 0, ABST_STORE},
+ {"ecref", "EC_ref", REGNO_ANY, STXT ("E$ Refs"), PRELOADS_6, 0, ABST_LDST},
+ {"itlbm", "ITLB_miss", REGNO_ANY, STXT ("ITLB Misses"), PRELOADS_5, 0, ABST_NONE},
+ {"dtlbm", "DTLB_miss", REGNO_ANY, STXT ("DTLB Misses"), PRELOADS_5, 0, ABST_US_DTLBM},
+ {"ecm", "EC_misses", REGNO_ANY, STXT ("E$ Misses"), PRELOADS_5, 0, ABST_LDST},
+ {"ecrm", "EC_rd_miss", REGNO_ANY, STXT ("E$ Read Misses"), PRELOADS_5, 0, ABST_LOAD},
+ {"ecml", "EC_miss_local", REGNO_ANY, STXT ("E$ Local Misses"), PRELOADS_5, 0, ABST_LDST},
+ {"ecmr", "EC_miss_remote", REGNO_ANY, STXT ("E$ Remote Misses"), PRELOADS_5, 0, ABST_LDST},
+ {"ecim", "EC_ic_miss", REGNO_ANY, STXT ("E$ Instr. Misses"), PRELOADS_5, 0, ABST_NONE},
+ {"icstall", "Dispatch0_IC_miss", REGNO_ANY, STXT ("I$ Stall Cycles"), PRELOADS_6, 1, ABST_NONE},
+ {"dcstall", "Re_DC_miss", REGNO_ANY, STXT ("D$ and E$ Stall Cycles"), PRELOADS_6, 1, ABST_LOAD},
+ {"ecstall", "Re_EC_miss", REGNO_ANY, STXT ("E$ Stall Cycles"), PRELOADS_6, 1, ABST_LOAD},
+ {"sqstall", "Rstall_storeQ", REGNO_ANY, STXT ("StoreQ Stall Cycles"), PRELOADS_6, 1, ABST_STORE},
+ {"rawstall", "Re_RAW_miss", REGNO_ANY, STXT ("RAW Stall Cycles"), PRELOADS_6, 1, ABST_LOAD},
+ {"dcmissov", "Re_DC_missovhd", REGNO_ANY, STXT ("DC Miss Ovhd"), PRELOADS_6, 1, ABST_LOAD},
+ {"fpustall", "Re_FPU_bypass", REGNO_ANY, STXT ("FPU Stall Cycles"), PRELOADS_6, 1, ABST_NONE},
+ {"fpusestall", "Rstall_FP_use", REGNO_ANY, STXT ("FPU Use Stall Cycles"), PRELOADS_6, 1, ABST_NONE},
+ {"iustall", "Rstall_IU_use", REGNO_ANY, STXT ("IU Stall Cycles"), PRELOADS_6, 1, ABST_NONE},
+ {"fpadd", "FA_pipe_completion", REGNO_ANY, STXT ("FP Adds"), PRELOADS_6, 0, ABST_NONE},
+ {"fpmul", "FM_pipe_completion", REGNO_ANY, STXT ("FP Muls"), PRELOADS_6, 0, ABST_NONE},
+
+ /* explicit definitions of (hidden) entries for proper counters */
+ /* Only counters that can be time converted, or are load-store need to be in this table */
+ {"Cycle_cnt", NULL, REGNO_ANY, NULL, PRELOADS_7, 1, ABST_NONE},
+ {"EC_miss_mtag_remote", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_LDST},
+ {"DC_rd_miss", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_LOAD},
+ {"DC_wr_miss", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_STORE},
+ {"DC_rd", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_LOAD},
+ {"DC_wr", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_STORE},
+ {"EC_ref", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_LDST},
+ {"EC_snoop_inv", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NOPC /*?*/},
+ {"EC_wb", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_STORE},
+ {"EC_wb_remote", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_STORE},
+ {"DTLB_miss", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_US_DTLBM},
+ {"EC_misses", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_LDST},
+ {"EC_rd_miss", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_LOAD},
+ {"PC_port0_rd", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_LOAD},
+ {"EC_miss_local", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_LDST},
+ {"EC_miss_remote", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_LDST},
+ {"EC_snoop_cb", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NOPC /*?*/},
+ {"WC_snoop_cb", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NOPC /*?*/},
+ {"WC_scrubbed", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_STORE},
+ {"WC_wb_wo_read", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_STORE},
+ {"PC_MS_misses", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_LOAD},
+ {"PC_soft_hit", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_LOAD},
+ {"PC_hard_hit", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_LOAD},
+ {"PC_port1_rd", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_LOAD},
+ {"PC_snoop_inv", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_STORE /*?*/},
+ {"SW_count_0", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_COUNT},
+ {"SW_count_1", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_COUNT},
+ {"Dispatch0_IC_miss", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"Dispatch0_mispred", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"Dispatch0_br_target", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"Dispatch0_2nd_br", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"Dispatch_rs_mispred", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"Rstall_storeQ", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_STORE},
+ {"Rstall_FP_use", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"Rstall_IU_use", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"EC_write_hit_RTO", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_STORE},
+ {"Re_RAW_miss", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_LOAD},
+ {"Re_DC_missovhd", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_LOAD},
+ {"Re_endian_miss", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_LOAD},
+ {"Re_FPU_bypass", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"Re_DC_miss", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_LOAD},
+ {"Re_EC_miss", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_LOAD},
+ {"Re_PC_miss", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_LOAD},
+ {"SI_snoop", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NOPC},
+ {"SI_ciq_flow", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NOPC},
+ {"SI_owned", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NOPC},
+ {"MC_msl_busy_stall", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NOPC},
+ {"MC_mdb_overflow_stall", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NOPC},
+ {"MC_page_close_stall", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NOPC},
+ {"MC_reads_0", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NOPC},
+ {"MC_reads_1", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NOPC},
+ {"MC_reads_2", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NOPC},
+ {"MC_reads_3", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NOPC},
+ {"MC_writes_0", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NOPC},
+ {"MC_writes_1", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NOPC},
+ {"MC_writes_2", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NOPC},
+ {"MC_writes_3", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NOPC},
+ {"MC_stalls_0", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NOPC},
+ {"MC_stalls_1", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NOPC},
+ {"MC_stalls_2", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NOPC},
+ {"MC_stalls_3", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NOPC},
+
+ /* additional (hidden) aliases, for convenience */
+ {"cycles0", "Cycle_cnt", 0, NULL, PRELOADS_75, 1, ABST_NONE},
+ {"cycles1", "Cycle_cnt", 1, NULL, PRELOADS_75, 1, ABST_NONE},
+ {"insts0", "Instr_cnt", 0, NULL, PRELOADS_75, 0, ABST_NONE},
+ {"insts1", "Instr_cnt", 1, NULL, PRELOADS_75, 0, ABST_NONE},
+ {NULL, NULL, 0, NULL, 0, 0, 0, 0, ABST_NONE}
+};
+
+static Hwcentry usIVplist[] = {
+ {"cycles", "Cycle_cnt", REGNO_ANY, STXT ("CPU Cycles"), PRELOADS_7, 1, ABST_NONE},
+ {"insts", "Instr_cnt", REGNO_ANY, STXT ("Instructions Executed"), PRELOADS_7, 0, ABST_NONE},
+ {"icm", "IC_fill", REGNO_ANY, STXT ("I$ Misses"), PRELOADS_5, 0, ABST_NONE},
+ {"dcrm", "DC_rd_miss", REGNO_ANY, STXT ("D$ Read Misses"), PRELOADS_5, 0, ABST_LOAD},
+ {"dcwm", "DC_wr_miss", REGNO_ANY, STXT ("D$ Write Misses"), PRELOADS_5, 0, ABST_STORE},
+ {"dcr", "DC_rd", REGNO_ANY, STXT ("D$ Read Refs"), PRELOADS_6, 0, ABST_LOAD},
+ {"dcw", "DC_wr", REGNO_ANY, STXT ("D$ Write Refs"), PRELOADS_6, 0, ABST_STORE},
+ {"itlbm", "ITLB_miss", REGNO_ANY, STXT ("ITLB Misses"), PRELOADS_5, 0, ABST_NONE},
+ {"dtlbm", "DTLB_miss", REGNO_ANY, STXT ("DTLB Misses"), PRELOADS_5, 0, ABST_US_DTLBM},
+ {"l2ref", "L2_ref", REGNO_ANY, STXT ("L2$ Refs"), PRELOADS_5, 0, ABST_LDST},
+ {"l2m", "L2_miss", REGNO_ANY, STXT ("L2$ Misses"), PRELOADS_5, 0, ABST_LDST},
+ {"l2rm", "L2_rd_miss", REGNO_ANY, STXT ("L2$ Read Misses"), PRELOADS_5, 0, ABST_LOAD},
+ {"l2im", "L2_IC_miss", REGNO_ANY, STXT ("L2$ Instr. Misses"), PRELOADS_5, 0, ABST_NONE},
+ {"ecm", "L3_miss", REGNO_ANY, STXT ("E$ Misses"), PRELOADS_5, 0, ABST_LDST},
+ {"ecrm", "L3_rd_miss", REGNO_ANY, STXT ("E$ Read Misses"), PRELOADS_5, 0, ABST_LOAD},
+ {"ecml", "SSM_L3_miss_local", REGNO_ANY, STXT ("E$ Local Misses"), PRELOADS_5, 0, ABST_LDST},
+ {"ecmr", "SSM_L3_miss_remote", REGNO_ANY, STXT ("E$ Remote Misses"), PRELOADS_5, 0, ABST_LDST},
+ {"ecim", "L3_IC_miss", REGNO_ANY, STXT ("E$ Instr. Misses"), PRELOADS_5, 0, ABST_NONE},
+ {"icstall", "Dispatch0_IC_miss", REGNO_ANY, STXT ("I$ Stall Cycles"), PRELOADS_6, 1, ABST_NONE},
+ {"dcstall", "Re_DC_miss", REGNO_ANY, STXT ("D$ and E$ Stall Cycles"), PRELOADS_6, 1, ABST_LOAD},
+ {"ecstall", "Re_L3_miss", REGNO_ANY, STXT ("E$ Stall Cycles"), PRELOADS_6, 1, ABST_LOAD},
+ {"sqstall", "Rstall_storeQ", REGNO_ANY, STXT ("StoreQ Stall Cycles"), PRELOADS_6, 1, ABST_STORE},
+ {"rawstall", "Re_RAW_miss", REGNO_ANY, STXT ("RAW Stall Cycles"), PRELOADS_6, 1, ABST_LOAD},
+ {"dcmissov", "Re_DC_missovhd", REGNO_ANY, STXT ("DC Miss Ovhd"), PRELOADS_6, 1, ABST_LOAD},
+ {"fpustall", "Re_FPU_bypass", REGNO_ANY, STXT ("FPU Stall Cycles"), PRELOADS_6, 1, ABST_NONE},
+ {"fpusestall", "Rstall_FP_use", REGNO_ANY, STXT ("FPU Use Stall Cycles"), PRELOADS_6, 1, ABST_NONE},
+ {"iustall", "Rstall_IU_use", REGNO_ANY, STXT ("IU Stall Cycles"), PRELOADS_6, 1, ABST_NONE},
+ {"fpadd", "FA_pipe_completion", REGNO_ANY, STXT ("FP Adds"), PRELOADS_6, 0, ABST_NONE},
+ {"fpmul", "FM_pipe_completion", REGNO_ANY, STXT ("FP Muls"), PRELOADS_6, 0, ABST_NONE},
+
+ /* explicit definitions of (hidden) entries for proper counters */
+ /* Only counters that can be time converted, or are load-store need to be in this table */
+ {"Cycle_cnt", NULL, REGNO_ANY, NULL, PRELOADS_7, 1, ABST_NONE},
+ {"DC_rd", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_LOAD},
+ {"DC_rd_miss", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_LOAD},
+ {"DC_wr", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_STORE},
+ {"DC_wr_miss", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_STORE},
+ {"DTLB_miss", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_US_DTLBM},
+ {"Dispatch0_2nd_br", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"Dispatch0_IC_miss", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"Dispatch0_other", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"L2L3_snoop_cb_sh", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NOPC /*?*/},
+ {"L2L3_snoop_inv_sh", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NOPC /*?*/},
+ {"L2_hit_I_state_sh", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_LDST /*?*/},
+ {"L2_hit_other_half", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_LDST},
+ {"L2_miss", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_LDST},
+ {"L2_rd_miss", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_LOAD},
+ {"L2_ref", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_LDST},
+ {"L2_snoop_cb_sh", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NOPC /*?*/},
+ {"L2_snoop_inv_sh", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NOPC /*?*/},
+ {"L2_wb", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_STORE},
+ {"L2_wb_sh", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_STORE},
+ {"L2_write_hit_RTO", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_STORE},
+ {"L2_write_miss", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_STORE},
+ {"L3_hit_I_state_sh", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_LDST},
+ {"L3_hit_other_half", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_LDST},
+ {"L3_miss", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_LDST},
+ {"L3_rd_miss", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_LOAD},
+ {"L3_wb", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_STORE},
+ {"L3_wb_sh", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_STORE},
+ {"L3_write_hit_RTO", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_STORE},
+ {"L3_write_miss_RTO", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_STORE},
+ {"MC_reads_0_sh", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NOPC},
+ {"MC_reads_1_sh", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NOPC},
+ {"MC_reads_2_sh", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NOPC},
+ {"MC_reads_3_sh", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NOPC},
+ {"MC_stalls_0_sh", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NOPC},
+ {"MC_stalls_1_sh", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NOPC},
+ {"MC_stalls_2_sh", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NOPC},
+ {"MC_stalls_3_sh", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NOPC},
+ {"MC_writes_0_sh", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NOPC},
+ {"MC_writes_1_sh", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NOPC},
+ {"MC_writes_2_sh", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NOPC},
+ {"MC_writes_3_sh", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NOPC},
+ /*? {"PC_MS_misses", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_LOAD}, */
+ {"PC_hard_hit", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_LOAD},
+ {"PC_inv", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_STORE /*?*/},
+ {"PC_miss", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_LOAD},
+ {"PC_rd", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_LOAD},
+ {"PC_soft_hit", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_LOAD},
+ {"Re_DC_miss", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_LOAD},
+ {"Re_DC_missovhd", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_LOAD},
+ {"Re_FPU_bypass", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"Re_L2_miss", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_LOAD},
+ {"Re_L3_miss", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_LOAD},
+ {"Re_PFQ_full", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"Re_RAW_miss", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_LOAD},
+ {"Rstall_FP_use", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"Rstall_IU_use", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"Rstall_storeQ", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_STORE},
+ {"SI_RTO_src_data", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NOPC},
+ {"SI_RTS_src_data", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NOPC},
+ {"SI_ciq_flow_sh", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NOPC},
+ {"SI_owned_sh", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NOPC},
+ {"SI_snoop_sh", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NOPC},
+ {"ecml", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_LDST},
+ {"ecmr", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_LDST},
+ {"SSM_L3_miss_local", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_LDST /*?*/},
+ {"SSM_L3_miss_mtag_remote", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_LDST /*?*/},
+ {"SSM_L3_miss_remote", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_LDST /*?*/},
+ {"SSM_L3_wb_remote", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_STORE /*?*/},
+ {"SSM_new_transaction_sh", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_TBD /*?*/},
+
+ /* additional (hidden) aliases, for convenience */
+ {"cycles0", "Cycle_cnt", 0, NULL, PRELOADS_75, 1, ABST_NONE},
+ {"cycles1", "Cycle_cnt", 1, NULL, PRELOADS_75, 1, ABST_NONE},
+ {"insts0", "Instr_cnt", 0, NULL, PRELOADS_75, 0, ABST_NONE},
+ {"insts1", "Instr_cnt", 1, NULL, PRELOADS_75, 0, ABST_NONE},
+ {NULL, NULL, 0, NULL, 0, 0, 0, 0, ABST_NONE}
+};
+
+static Hwcentry niagara1[] =
+ /* CPC_ULTRA_T1 , "UltraSPARC T1" */{
+ {"insts", "Instr_cnt", REGNO_ANY, STXT ("Instructions Executed"), PRELOADS_7, 0, ABST_NONE},
+#ifndef WORKAROUND_6231196_NIAGARA1_NO_CTR_0 /* since register 0 counter don't work XXX */
+ {"icm", "IC_miss", REGNO_ANY, STXT ("I$ Misses"), PRELOADS_5, 0, ABST_NONE},
+ {"itlbm", "ITLB_miss", REGNO_ANY, STXT ("ITLB Misses"), PRELOADS_5, 0, ABST_NONE},
+ {"ecim", "L2_imiss", REGNO_ANY, STXT ("E$ Instr. Misses"), PRELOADS_4, 0, ABST_NONE},
+ {"dcm", "DC_miss", REGNO_ANY, STXT ("D$ Misses"), PRELOADS_5, 0, ABST_EXACT},
+ {"dtlbm", "DTLB_miss", REGNO_ANY, STXT ("DTLB Misses"), PRELOADS_5, 0, ABST_EXACT},
+ {"ecdm", "L2_dmiss_ld", REGNO_ANY, STXT ("E$ Data Misses"), PRELOADS_4, 0, ABST_EXACT},
+ {"flops", "FP_instr_cnt", REGNO_ANY, STXT ("Floating-point Ops"), PRELOADS_6, 0, ABST_NONE},
+
+ /* explicit definitions of (hidden) entries for proper counters */
+ /* Only counters that can be time converted, or are load-store need to be in this table */
+ {"SB_full", NULL, REGNO_ANY, NULL, PRELOADS_6, 1, ABST_NONE},
+ {"DC_miss", NULL, REGNO_ANY, NULL, PRELOADS_6, 0, ABST_EXACT},
+ {"DTLB_miss", NULL, REGNO_ANY, NULL, PRELOADS_6, 0, ABST_EXACT},
+ {"L2_dmiss_ld", NULL, REGNO_ANY, NULL, PRELOADS_6, 0, ABST_EXACT},
+#endif
+
+ /* additional (hidden) aliases, for convenience */
+ {"insts1", "Instr_cnt", 1, NULL, PRELOADS_75, 0, ABST_NONE},
+ {NULL, NULL, 0, NULL, 0, 0, 0, 0, ABST_NONE}
+};
+
+static Hwcentry niagara2[] = {
+ /* CPC_ULTRA_T2 , "UltraSPARC T2" */
+ /* CPC_ULTRA_T2 , "UltraSPARC T2+" */
+ {"insts", "Instr_cnt", REGNO_ANY, STXT ("Instructions Executed"), PRELOADS_7, 0, ABST_NONE},
+ {"loads", "Instr_ld", REGNO_ANY, STXT ("Load Instructions"), PRELOADS_7, 0, ABST_EXACT},
+ {"stores", "Instr_st", REGNO_ANY, STXT ("Store Instructions"), PRELOADS_6, 0, ABST_EXACT},
+ {"dcm", "DC_miss", REGNO_ANY, STXT ("L1 D-cache Misses"), PRELOADS_6, 0, ABST_EXACT},
+ {"dtlbm", "DTLB_miss", REGNO_ANY, STXT ("DTLB Misses"), PRELOADS_6, 0, ABST_NONE},
+ {"l2drm", "L2_dmiss_ld", REGNO_ANY, STXT ("L2 D-cache Read Misses (See Bug 15664448)"), PRELOADS_5, 0, ABST_EXACT},
+ {"icm", "IC_miss", REGNO_ANY, STXT ("L1 I-cache Misses"), PRELOADS_5, 0, ABST_NONE},
+ {"itlbm", "ITLB_miss", REGNO_ANY, STXT ("ITLB Misses"), PRELOADS_5, 0, ABST_NONE},
+ {"l2im", "L2_imiss", REGNO_ANY, STXT ("L2 I-cache Misses"), PRELOADS_4, 0, ABST_NONE},
+
+ /* explicit definitions of (hidden) entries for proper counters */
+ /* Only counters that can be time converted, or are load-store need to be in this table */
+ {"Instr_ld", NULL, REGNO_ANY, NULL, PRELOADS_7, 0, ABST_EXACT},
+ {"Instr_st", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_EXACT},
+ {"Atomics", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_EXACT},
+ {"DC_miss", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_EXACT},
+ {"L2_dmiss_ld", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_EXACT},
+ {"DTLB_miss", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NONE},
+ {"DES_3DES_busy_cycle", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"AES_busy_cycle", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"Kasumi_busy_cycle", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"MD5_SHA-1_SHA-256_busy_cycle", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"MA_busy_cycle", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+
+ /* additional (hidden) aliases, for convenience */
+ {"insts1", "Instr_cnt", 1, NULL, PRELOADS_75, 0, ABST_NONE},
+ {NULL, NULL, 0, NULL, 0, 0, 0, 0, ABST_NONE}
+};
+
+static Hwcentry sparc_t4[] = {
+ // Identical to sparc_t5_m6 except for: l3m_spec
+ // when updating this table, also update sparc_t5_m6[]
+ // obsolete aliases marked with REGNO_INVALID (allows reading of older experiments)
+ {"l2l3dh", "DC_miss_L2_L3_hit_nospec", REGNO_INVALID, STXT ("L2 or L3 D-cache Hits"), PRELOADS_6, 0, ABST_EXACT}, // undercounts due to thread-hog issue
+ {"l3m", "DC_miss_remote_L3_hit_nospec~emask=0x6", REGNO_INVALID, STXT ("L3 D-cache Misses"), PRELOADS_5, 0, ABST_EXACT}, // undercounts due to thread-hog issue
+ {"lmh", "DC_miss_local_hit_nospec", REGNO_INVALID, STXT ("Local Mem. Hits"), PRELOADS_5, 0, ABST_EXACT}, // undercounts due to thread-hog issue
+ {"rmh", "DC_miss_remote_L3_hit_nospec", REGNO_INVALID, STXT ("Remote Mem. Hits"), PRELOADS_5, 0, ABST_EXACT}, // undercounts due to thread-hog issue
+ {"pqs", "PQ_tag_wait", REGNO_INVALID, STXT ("Pick Queue Stalls"), PRELOADS_7, 1, ABST_NONE}, // old alias name
+ {"raw_stb", "RAW_hit_st_buf", REGNO_INVALID, STXT ("RAW Hazard in Store Buffer"), PRELOADS_55, 0, ABST_NONE}, // 11@full hit, 60@partial hit (in future, combine w/st_q)
+ {"raw_stq", "RAW_hit_st_q", REGNO_INVALID, STXT ("RAW Hazard in Store Queue"), PRELOADS_55, 0, ABST_NONE}, // 11@full hit, 60@partial hit (in future, combine w/st_buf)
+ {"sel_stalls", "Sel_0_ready", REGNO_INVALID, STXT ("Stalls Another Thread Selected"), PRELOADS_7, 1, ABST_NONE},
+ {"icm", "IC_miss", REGNO_INVALID, STXT ("L1 I-Cache Misses"), PRELOADS_55, 0, ABST_NONE}, // 20@ l2/l3 hit (guess)
+ {"icm_stalls", "IC_miss", REGNO_INVALID, STXT ("L1 I-Cache Miss Est Stalls"), PRELOADS_55, 25, ABST_NONE}, // 25@ l2-20/l3-50
+
+ // current aliases
+ SPARC_CYCLES
+ {"cycles", "Cycles_user", REGNO_ANY, STXT ("CPU Cycles"), PRELOADS_75, 1, ABST_NONE},
+ {"insts", "Instr_all", REGNO_ANY, STXT ("Instructions Executed"), PRELOADS_75, 0, ABST_NONE},
+ {"c_stalls", "Commit_0", REGNO_ANY, STXT ("Stall Cycles"), PRELOADS_7, 1, ABST_NONE},
+ {"loads", "Instr_ld", REGNO_ANY, STXT ("Load Instructions"), PRELOADS_7, 0, ABST_EXACT},
+ {"stores", "Instr_st", REGNO_ANY, STXT ("Store Instructions"), PRELOADS_7, 0, ABST_EXACT},
+ {"dcm", "DC_miss_nospec", REGNO_ANY, STXT ("L1 D-cache Misses"), PRELOADS_65, 0, ABST_EXACT},
+ {"l3m_spec", "DC_miss_local_hit~emask=0x6", REGNO_ANY, STXT ("L3 D-cache Speculative Misses"), PRELOADS_5, 0, ABST_NONE, STXT ("Loads that speculatively missed local L3")}, // T4 encoding (430 lm, 690 rm) ~5 misses overlap on t5/pico_ile
+ // {"l3m_spec", "DC_miss_local_hit~emask=0x30", REGNO_ANY, STXT("L3 D-cache Speculative Misses"),PRELOADS_5,0, ABST_NONE, STXT("Loads that speculatively missed local L3")}, // T5/M6 encoding (430 lm, 690 rm) ~5 misses overlap on t5/pico_ile
+ {"lmh_spec", "DC_miss_local_hit", REGNO_ANY, STXT ("Local Mem Speculative Hits"), PRELOADS_5, 0, ABST_NONE},
+ {"rmh_spec", "DC_miss_remote_L3_hit", REGNO_ANY, STXT ("Remote Mem Speculative Hits"), PRELOADS_5, 0, ABST_NONE},
+ //
+ {"dtlbm", "DTLB_miss_asynch", REGNO_ANY, STXT ("DTLB Misses"), PRELOADS_55, 0, ABST_NONE}, // 10@l1 hit, 24@l2 hit, 60@l3 hit, 500@l3 miss, 5000@trap 0.001 events/cycle
+ {"dtlb_hwtw_stalls", "DTLB_HWTW_all", REGNO_ANY, STXT ("DTLB HWTW Est Stalls"), PRELOADS_55, 25, ABST_NONE, STXT ("Estimated time stalled on a DTLB miss requiring a HW tablewalk")}, // l2-20, l3-50
+ {"dtlb_trap_stalls", "DTLB_fill_trap", REGNO_ANY, STXT ("DTLB Trap Est Stalls"), PRELOADS_35, 5000, ABST_NONE, STXT ("Estimated time stalled on a DTLB miss with HW tablewalk unsuccessful")}, // 5000@trap
+ {"rawhaz", "RAW_hit_st_q~emask=0xf", REGNO_ANY, STXT ("Read-after-write Hazards"), PRELOADS_55, 0, ABST_NONE, STXT ("Loads delayed by a previous store (read-after-write hazards)")},
+ {"br_msp_stalls", "Br_mispred", REGNO_ANY, STXT ("Branch Mispredict Stalls"), PRELOADS_6, 24, ABST_NONE, STXT ("Estimated time stalled on Branch mispredictions")}, // 24@miss, %5 of branches is bad
+ {"br_msp", "Br_mispred", REGNO_ANY, STXT ("Branch Mispredict"), PRELOADS_6, 0, ABST_NONE}, // 24@miss, %5 of branches is bad
+ {"br_tkn", "Br_taken", REGNO_ANY, STXT ("Branch Taken"), PRELOADS_7, 0, ABST_NONE}, // 2 cycles minimum
+ {"br_ins", "Branches", REGNO_ANY, STXT ("Branch Instructions"), PRELOADS_7, 0, ABST_NONE}, // 24@miss, %5 of branches is bad
+ {"fgu", "Instr_FGU_crypto", REGNO_ANY, STXT ("FP/VIS/Crypto Instructions"), PRELOADS_7, 0, ABST_NONE}, // 1 cycle/event
+
+ /* explicit definitions of (hidden) entries for proper counters */
+ /* Counters that can be time converted, support memspace, or have a short_desc need to be in this table */
+
+ {"Sel_pipe_drain_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE, STXT ("Cycles a hardware thread stalls at Select waiting with correct instructions when pipeline has to drain after branch misprediction")},
+ {"Sel_0_wait", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE, STXT ("Cycles a hardware thread stalls at Select waiting for various conditions to be resolved")},
+ {"Sel_0_ready", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE, STXT ("Cycles a hardware thread was ready to have its instructions selected but another hardware thread was selected instead")},
+ {"Sel_1", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE, STXT ("Cycles that only 1 instruction or uop was selected")},
+ {"Sel_2", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE, STXT ("Cycles that 2 instructions or uops were selected")},
+
+ {"Pick_0", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"Pick_1", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"Pick_2", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"Pick_3", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"Pick_any", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+
+ {"Branches", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NONE, STXT ("Control transfer instructions completed, excluding trap-related transfers")},
+ {"Instr_FGU_crypto", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NONE, STXT ("FP and VIS instructions completed by the Floating Point and Graphics Unit")},
+ {"Instr_ld", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_EXACT, STXT ("Load instructions completed")},
+ {"Instr_st", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_EXACT, STXT ("Store instructions completed")},
+ {"SPR_ring_ops", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_EXACT, STXT ("Specialized instructions that require internal use of SPR ring completed")},
+ {"Instr_other", NULL, REGNO_ANY, NULL, PRELOAD (2, 4), 0, ABST_NONE, STXT ("Basic arithmetic and logical instructions completed")},
+ {"Instr_all", NULL, REGNO_ANY, NULL, PRELOAD (1, 4), 0, ABST_NONE, STXT ("Total instructions completed")},
+
+ {"Br_taken", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NONE, STXT ("Branch instructions taken and completed")},
+ {"Sw_count_intr", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NONE, STXT ("SW Count instructions completed")},
+ {"Atomics", NULL, REGNO_ANY, NULL, PRELOAD (20, 4), 0, ABST_EXACT, STXT ("Atomic instructions, including CASA/XA, completed")},
+ {"SW_prefetch", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_EXACT, STXT ("PREFETCH and PREFETCHA instructions completed")},
+ {"Block_ld_st", NULL, REGNO_ANY, NULL, PRELOAD (20, 4), 0, ABST_EXACT, STXT ("Block load/store instructions completed")},
+
+ {"BTC_miss", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NONE, STXT ("Branches delayed a few extra cycles because branch target not found in Branch Target Cache")},
+
+ {"ITLB_fill_8KB", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("ITLB miss and HW tablewalk successfully loaded translation for 8K page")},
+ {"ITLB_fill_64KB", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("ITLB miss and HW tablewalk successfully loaded translation for 64K page")},
+ {"ITLB_fill_4MB", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("ITLB miss and HW tablewalk successfully loaded translation for 4M page")},
+ {"ITLB_fill_256MB", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("ITLB miss and HW tablewalk successfully loaded translation for 256M page")},
+ {"ITLB_fill_2GB", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("ITLB miss and HW tablewalk successfully loaded translation for 2G or 16G page")},
+ {"ITLB_fill_trap", NULL, REGNO_ANY, NULL, PRELOAD (1000, 4), 0, ABST_NONE, STXT ("ITLB miss and HW tablewalk unsuccessful")},
+ {"ITLB_miss_asynch", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("ITLB miss and HW tablewalk search done")},
+
+ {"Fetch_0", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"Fetch_0_all", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+
+ {"Instr_buffer_full", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+
+ {"PQ_tag_wait", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"ROB_tag_wait", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"LB_tag_wait", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"ROB_LB_tag_wait", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"SB_tag_wait", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"ROB_SB_tag_wait", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"LB_SB_tag_wait", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"ROB_LB_SB_tag_wait", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"DTLB_miss_tag_wait", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+
+ {"ITLB_HWTW_L2_hit", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("ITLB miss and HW tablewalk hit local L2D")},
+ {"ITLB_HWTW_L3_hit", NULL, REGNO_ANY, NULL, PRELOAD (80, 4), 0, ABST_NONE, STXT ("ITLB miss and HW tablewalk hit local L3 or neighbor L2D")},
+ {"ITLB_HWTW_L3_miss", NULL, REGNO_ANY, NULL, PRELOAD (800, 4), 0, ABST_NONE, STXT ("ITLB miss and HW tablewalk missed all local caches")},
+ {"DTLB_HWTW_L2_hit", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("DTLB miss and HW tablewalk hit local L2D")},
+ {"DTLB_HWTW_L3_hit", NULL, REGNO_ANY, NULL, PRELOAD (80, 4), 0, ABST_NONE, STXT ("DTLB miss and HW tablewalk hit local L3 or neighbor L2D")},
+ {"DTLB_HWTW_L3_miss", NULL, REGNO_ANY, NULL, PRELOAD (800, 4), 0, ABST_NONE, STXT ("DTLB miss and HW tablewalk missed all local caches")},
+ {"DTLB_HWTW_all", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("DTLB miss requiring HW tablewalk")},
+
+ {"DC_miss_L2_L3_hit_nospec", NULL, REGNO_ANY, NULL, PRELOAD (25, 4), 0, ABST_EXACT},
+ {"DC_miss_local_hit_nospec", NULL, REGNO_ANY, NULL, PRELOAD (500, 4), 0, ABST_EXACT},
+ {"DC_miss_remote_L3_hit_nospec", NULL, REGNO_ANY, NULL, PRELOAD (800, 4), 0, ABST_EXACT},
+ {"DC_miss_nospec", NULL, REGNO_ANY, NULL, PRELOAD (25, 4), 0, ABST_EXACT, STXT ("Loads that missed local L1D")},
+
+ {"DTLB_fill_8KB", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("DTLB miss and HW tablewalk successfully loaded translation for 8K page")},
+ {"DTLB_fill_64KB", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("DTLB miss and HW tablewalk successfully loaded translation for 64K page")},
+ {"DTLB_fill_4MB", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("DTLB miss and HW tablewalk successfully loaded translation for 4M page")},
+ {"DTLB_fill_256MB", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("DTLB miss and HW tablewalk successfully loaded translation for 256M page")},
+ {"DTLB_fill_2GB", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("DTLB miss and HW tablewalk successfully loaded translation for 2G or 16G page")},
+ {"DTLB_fill_trap", NULL, REGNO_ANY, NULL, PRELOAD (800, 4), 0, ABST_NONE, STXT ("DTLB miss and HW tablewalk unsuccessful")},
+ {"DTLB_miss_asynch", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("DTLB miss and HW tablewalk search done")},
+ {"RAW_hit_st_buf", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("Loads delayed by a previous store (read-after-write) still in store buffer not yet committed")},
+ {"RAW_hit_st_q", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("Loads delayed by a previous store (read-after-write) committed but in store queue not yet written to L2D")},
+
+ {"St_q_tag_wait", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+
+ {"St_hit_L2", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NONE, STXT ("Stores whose cacheline being updated was in local L2D")},
+ {"St_hit_L3", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NONE, STXT ("Stores whose cacheline being updated was in local L3")},
+
+ {"DC_miss_L2_L3_hit", NULL, REGNO_ANY, NULL, PRELOAD (20, 4), 0, ABST_NONE, STXT ("Loads that speculatively hit local L2D or L3")},
+ {"DC_miss_local_hit", NULL, REGNO_ANY, NULL, PRELOAD (500, 4), 0, ABST_NONE, STXT ("Loads that speculatively hit local memory")},
+ {"DC_miss_remote_L3_hit", NULL, REGNO_ANY, NULL, PRELOAD (800, 4), 0, ABST_NONE, STXT ("Loads that speculatively hit remote cache or remote memory")},
+ {"DC_miss", NULL, REGNO_ANY, NULL, PRELOAD (20, 4), 0, ABST_NONE, STXT ("Loads that speculatively missed L1D")},
+
+ {"L2_pipe_stall", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+
+ {"Br_dir_mispred", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("Branch instructions completed whose direction was mispredicted")},
+ {"Br_trg_mispred", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("Branch instructions completed whose target was mispredicted")},
+ {"Br_mispred", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("Branch instructions completed whose direction or target was mispredicted")},
+
+ {"Cycles_user", NULL, REGNO_ANY, NULL, PRELOAD (1, 4), 1, ABST_NONE, STXT ("Cycles hardware thread is active in specified mode(s)")},
+ //
+ {"Commit_0", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE, STXT ("Cycles no uop commits from this hardware thread")},
+ {"Commit_0_all", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE, STXT ("Cycles no uop commits from any hardware thread on this core")},
+ {"Commit_1", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE, STXT ("Cycles 1 uop commits from this hardware thread")},
+ {"Commit_2", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE, STXT ("Cycles 2 uops commit from this hardware thread")},
+ {"Commit_1_or_2", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE, STXT ("Cycles 1 or 2 uops commit from this hardware thread")},
+
+ /* additional (hidden) aliases, for convenience */
+ {"cycles0", "Cycles_user", 0, NULL, PRELOADS_8, 1, ABST_NONE},
+ {"cycles1", "Cycles_user", 1, NULL, PRELOADS_8, 1, ABST_NONE},
+ {"insts0", "Instr_all", 0, NULL, PRELOADS_8, 0, ABST_NONE},
+ {"insts1", "Instr_all", 1, NULL, PRELOADS_8, 0, ABST_NONE},
+ {NULL, NULL, 0, NULL, 0, 0, 0, 0, ABST_NONE}
+};
+
+static Hwcentry sparc_t5_m6[] = {
+ // Identical to sparc_t4 except for: l3m_spec
+ // when updating this table, also update sparc_t4[]
+ // obsolete aliases marked with REGNO_INVALID (allows reading of older experiments)
+ {"l2l3dh", "DC_miss_L2_L3_hit_nospec", REGNO_INVALID, STXT ("L2 or L3 D-cache Hits"), PRELOADS_6, 0, ABST_EXACT}, // undercounts due to thread-hog issue
+ {"l3m", "DC_miss_remote_L3_hit_nospec~emask=0x6", REGNO_INVALID, STXT ("L3 D-cache Misses"), PRELOADS_5, 0, ABST_EXACT}, // undercounts due to thread-hog issue
+ {"lmh", "DC_miss_local_hit_nospec", REGNO_INVALID, STXT ("Local Mem. Hits"), PRELOADS_5, 0, ABST_EXACT}, // undercounts due to thread-hog issue
+ {"rmh", "DC_miss_remote_L3_hit_nospec", REGNO_INVALID, STXT ("Remote Mem. Hits"), PRELOADS_5, 0, ABST_EXACT}, // undercounts due to thread-hog issue
+ {"pqs", "PQ_tag_wait", REGNO_INVALID, STXT ("Pick Queue Stalls"), PRELOADS_7, 1, ABST_NONE}, // old alias name
+ {"raw_stb", "RAW_hit_st_buf", REGNO_INVALID, STXT ("RAW Hazard in Store Buffer"), PRELOADS_55, 0, ABST_NONE}, // 11@full hit, 60@partial hit (in future, combine w/st_q)
+ {"raw_stq", "RAW_hit_st_q", REGNO_INVALID, STXT ("RAW Hazard in Store Queue"), PRELOADS_55, 0, ABST_NONE}, // 11@full hit, 60@partial hit (in future, combine w/st_buf)
+ {"sel_stalls", "Sel_0_ready", REGNO_INVALID, STXT ("Stalls Another Thread Selected"), PRELOADS_7, 1, ABST_NONE},
+ {"icm", "IC_miss", REGNO_INVALID, STXT ("L1 I-Cache Misses"), PRELOADS_55, 0, ABST_NONE}, // 20@ l2/l3 hit (guess)
+ {"icm_stalls", "IC_miss", REGNO_INVALID, STXT ("L1 I-Cache Miss Est Stalls"), PRELOADS_55, 25, ABST_NONE}, // 25@ l2-20/l3-50
+
+ // current aliases
+ SPARC_CYCLES
+ {"cycles", "Cycles_user", REGNO_ANY, STXT ("CPU Cycles"), PRELOADS_75, 1, ABST_NONE},
+ {"insts", "Instr_all", REGNO_ANY, STXT ("Instructions Executed"), PRELOADS_75, 0, ABST_NONE},
+ {"c_stalls", "Commit_0", REGNO_ANY, STXT ("Stall Cycles"), PRELOADS_7, 1, ABST_NONE},
+
+ {"loads", "Instr_ld", REGNO_ANY, STXT ("Load Instructions"), PRELOADS_7, 0, ABST_EXACT},
+ {"stores", "Instr_st", REGNO_ANY, STXT ("Store Instructions"), PRELOADS_7, 0, ABST_EXACT},
+ {"dcm", "DC_miss_nospec", REGNO_ANY, STXT ("L1 D-cache Misses"), PRELOADS_65, 0, ABST_EXACT},
+ // {"l3m_spec", "DC_miss_local_hit~emask=0x6", REGNO_ANY, STXT("L3 D-cache Speculative Misses"),PRELOADS_5,0, ABST_NONE, STXT("Loads that speculatively missed local L3")}, // T4 encoding (430 lm, 690 rm) ~5 misses overlap on t5/pico_ile
+ {"l3m_spec", "DC_miss_local_hit~emask=0x30", REGNO_ANY, STXT ("L3 D-cache Speculative Misses"), PRELOADS_5, 0, ABST_NONE, STXT ("Loads that speculatively missed local L3")}, // T5/M6 encoding (430 lm, 690 rm) ~5 misses overlap on t5/pico_ile
+ {"lmh_spec", "DC_miss_local_hit", REGNO_ANY, STXT ("Local Mem Speculative Hits"), PRELOADS_5, 0, ABST_NONE},
+ {"rmh_spec", "DC_miss_remote_L3_hit", REGNO_ANY, STXT ("Remote Mem Speculative Hits"), PRELOADS_5, 0, ABST_NONE},
+ //
+ {"dtlbm", "DTLB_miss_asynch", REGNO_ANY, STXT ("DTLB Misses"), PRELOADS_55, 0, ABST_NONE}, // 10@l1 hit, 24@l2 hit, 60@l3 hit, 500@l3 miss, 5000@trap 0.001 events/cycle
+ {"dtlb_hwtw_stalls", "DTLB_HWTW_all", REGNO_ANY, STXT ("DTLB HWTW Est Stalls"), PRELOADS_55, 25, ABST_NONE, STXT ("Estimated time stalled on a DTLB miss requiring a HW tablewalk")}, // l2-20, l3-50
+ {"dtlb_trap_stalls", "DTLB_fill_trap", REGNO_ANY, STXT ("DTLB Trap Est Stalls"), PRELOADS_35, 5000, ABST_NONE, STXT ("Estimated time stalled on a DTLB miss with HW tablewalk unsuccessful")}, // 5000@trap
+ {"rawhaz", "RAW_hit_st_q~emask=0xf", REGNO_ANY, STXT ("Read-after-write Hazards"), PRELOADS_55, 0, ABST_NONE, STXT ("Loads delayed by a previous store (read-after-write hazards)")},
+ {"br_msp_stalls", "Br_mispred", REGNO_ANY, STXT ("Branch Mispredict Stalls"), PRELOADS_6, 24, ABST_NONE, STXT ("Estimated time stalled on Branch mispredictions")}, // 24@miss, %5 of branches is bad
+ {"br_msp", "Br_mispred", REGNO_ANY, STXT ("Branch Mispredict"), PRELOADS_6, 0, ABST_NONE}, // 24@miss, %5 of branches is bad
+ {"br_tkn", "Br_taken", REGNO_ANY, STXT ("Branch Taken"), PRELOADS_7, 0, ABST_NONE}, // 2 cycles minimum
+ {"br_ins", "Branches", REGNO_ANY, STXT ("Branch Instructions"), PRELOADS_7, 0, ABST_NONE}, // 24@miss, %5 of branches is bad
+ {"fgu", "Instr_FGU_crypto", REGNO_ANY, STXT ("FP/VIS/Crypto Instructions"), PRELOADS_7, 0, ABST_NONE}, // 1 cycle/event
+
+ /* explicit definitions of (hidden) entries for proper counters */
+ /* Counters that can be time converted, support memspace, or have a short_desc need to be in this table */
+
+ {"Sel_pipe_drain_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE, STXT ("Cycles a hardware thread stalls at Select waiting with correct instructions when pipeline has to drain after branch misprediction")},
+ {"Sel_0_wait", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE, STXT ("Cycles a hardware thread stalls at Select waiting for various conditions to be resolved")},
+ {"Sel_0_ready", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE, STXT ("Cycles a hardware thread was ready to have its instructions selected but another hardware thread was selected instead")},
+ {"Sel_1", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE, STXT ("Cycles that only 1 instruction or uop was selected")},
+ {"Sel_2", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE, STXT ("Cycles that 2 instructions or uops were selected")},
+
+ {"Pick_0", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"Pick_1", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"Pick_2", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"Pick_3", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"Pick_any", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+
+ {"Branches", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NONE, STXT ("Control transfer instructions completed, excluding trap-related transfers")},
+ {"Instr_FGU_crypto", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NONE, STXT ("FP and VIS instructions completed by the Floating Point and Graphics Unit")},
+ {"Instr_ld", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_EXACT, STXT ("Load instructions completed")},
+ {"Instr_st", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_EXACT, STXT ("Store instructions completed")},
+ {"SPR_ring_ops", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_EXACT, STXT ("Specialized instructions that require internal use of SPR ring completed")},
+ {"Instr_other", NULL, REGNO_ANY, NULL, PRELOAD (2, 4), 0, ABST_NONE, STXT ("Basic arithmetic and logical instructions completed")},
+ {"Instr_all", NULL, REGNO_ANY, NULL, PRELOAD (1, 4), 0, ABST_NONE, STXT ("Total instructions completed")},
+
+ {"Br_taken", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NONE, STXT ("Branch instructions taken and completed")},
+ {"Sw_count_intr", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NONE, STXT ("SW Count instructions completed")},
+ {"Atomics", NULL, REGNO_ANY, NULL, PRELOAD (20, 4), 0, ABST_EXACT, STXT ("Atomic instructions, including CASA/XA, completed")},
+ {"SW_prefetch", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_EXACT, STXT ("PREFETCH and PREFETCHA instructions completed")},
+ {"Block_ld_st", NULL, REGNO_ANY, NULL, PRELOAD (20, 4), 0, ABST_EXACT, STXT ("Block load/store instructions completed")},
+
+ {"BTC_miss", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NONE, STXT ("Branches delayed a few extra cycles because branch target not found in Branch Target Cache")},
+
+ {"ITLB_fill_8KB", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("ITLB miss and HW tablewalk successfully loaded translation for 8K page")},
+ {"ITLB_fill_64KB", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("ITLB miss and HW tablewalk successfully loaded translation for 64K page")},
+ {"ITLB_fill_4MB", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("ITLB miss and HW tablewalk successfully loaded translation for 4M page")},
+ {"ITLB_fill_256MB", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("ITLB miss and HW tablewalk successfully loaded translation for 256M page")},
+ {"ITLB_fill_2GB", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("ITLB miss and HW tablewalk successfully loaded translation for 2G or 16G page")},
+ {"ITLB_fill_trap", NULL, REGNO_ANY, NULL, PRELOAD (1000, 4), 0, ABST_NONE, STXT ("ITLB miss and HW tablewalk unsuccessful")},
+ {"ITLB_miss_asynch", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("ITLB miss and HW tablewalk search done")},
+
+ {"Fetch_0", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"Fetch_0_all", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+
+ {"Instr_buffer_full", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+
+ {"PQ_tag_wait", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"ROB_tag_wait", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"LB_tag_wait", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"ROB_LB_tag_wait", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"SB_tag_wait", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"ROB_SB_tag_wait", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"LB_SB_tag_wait", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"ROB_LB_SB_tag_wait", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"DTLB_miss_tag_wait", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+
+ {"ITLB_HWTW_L2_hit", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("ITLB miss and HW tablewalk hit local L2D")},
+ {"ITLB_HWTW_L3_hit", NULL, REGNO_ANY, NULL, PRELOAD (80, 4), 0, ABST_NONE, STXT ("ITLB miss and HW tablewalk hit local L3 or neighbor L2D")},
+ {"ITLB_HWTW_L3_miss", NULL, REGNO_ANY, NULL, PRELOAD (800, 4), 0, ABST_NONE, STXT ("ITLB miss and HW tablewalk missed all local caches")},
+ {"DTLB_HWTW_L2_hit", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("DTLB miss and HW tablewalk hit local L2D")},
+ {"DTLB_HWTW_L3_hit", NULL, REGNO_ANY, NULL, PRELOAD (80, 4), 0, ABST_NONE, STXT ("DTLB miss and HW tablewalk hit local L3 or neighbor L2D")},
+ {"DTLB_HWTW_L3_miss", NULL, REGNO_ANY, NULL, PRELOAD (800, 4), 0, ABST_NONE, STXT ("DTLB miss and HW tablewalk missed all local caches")},
+ {"DTLB_HWTW_all", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("DTLB miss requiring HW tablewalk")},
+
+ {"DC_miss_L2_L3_hit_nospec", NULL, REGNO_ANY, NULL, PRELOAD (25, 4), 0, ABST_EXACT},
+ {"DC_miss_local_hit_nospec", NULL, REGNO_ANY, NULL, PRELOAD (500, 4), 0, ABST_EXACT},
+ {"DC_miss_remote_L3_hit_nospec", NULL, REGNO_ANY, NULL, PRELOAD (800, 4), 0, ABST_EXACT},
+ {"DC_miss_nospec", NULL, REGNO_ANY, NULL, PRELOAD (25, 4), 0, ABST_EXACT, STXT ("Loads that missed local L1D")},
+
+ {"DTLB_fill_8KB", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("DTLB miss and HW tablewalk successfully loaded translation for 8K page")},
+ {"DTLB_fill_64KB", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("DTLB miss and HW tablewalk successfully loaded translation for 64K page")},
+ {"DTLB_fill_4MB", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("DTLB miss and HW tablewalk successfully loaded translation for 4M page")},
+ {"DTLB_fill_256MB", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("DTLB miss and HW tablewalk successfully loaded translation for 256M page")},
+ {"DTLB_fill_2GB", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("DTLB miss and HW tablewalk successfully loaded translation for 2G or 16G page")},
+ {"DTLB_fill_trap", NULL, REGNO_ANY, NULL, PRELOAD (800, 4), 0, ABST_NONE, STXT ("DTLB miss and HW tablewalk unsuccessful")},
+ {"DTLB_miss_asynch", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("DTLB miss and HW tablewalk search done")},
+ {"RAW_hit_st_buf", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("Loads delayed by a previous store (read-after-write) still in store buffer not yet committed")},
+ {"RAW_hit_st_q", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("Loads delayed by a previous store (read-after-write) committed but in store queue not yet written to L2D")},
+
+ {"St_q_tag_wait", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+
+ {"St_hit_L2", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NONE, STXT ("Stores whose cacheline being updated was in local L2D")},
+ {"St_hit_L3", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NONE, STXT ("Stores whose cacheline being updated was in local L3")},
+
+ {"DC_miss_L2_L3_hit", NULL, REGNO_ANY, NULL, PRELOAD (20, 4), 0, ABST_NONE, STXT ("Loads that speculatively hit local L2D or L3")},
+ {"DC_miss_local_hit", NULL, REGNO_ANY, NULL, PRELOAD (500, 4), 0, ABST_NONE, STXT ("Loads that speculatively hit local memory")},
+ {"DC_miss_remote_L3_hit", NULL, REGNO_ANY, NULL, PRELOAD (800, 4), 0, ABST_NONE, STXT ("Loads that speculatively hit remote cache or remote memory")},
+ {"DC_miss", NULL, REGNO_ANY, NULL, PRELOAD (20, 4), 0, ABST_NONE, STXT ("Loads that speculatively missed L1D")},
+
+ {"L2_pipe_stall", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+
+ {"Br_dir_mispred", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("Branch instructions completed whose direction was mispredicted")},
+ {"Br_trg_mispred", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("Branch instructions completed whose target was mispredicted")},
+ {"Br_mispred", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("Branch instructions completed whose direction or target was mispredicted")},
+
+ {"Cycles_user", NULL, REGNO_ANY, NULL, PRELOAD (1, 4), 1, ABST_NONE, STXT ("Cycles hardware thread is active in specified mode(s)")},
+ //
+ {"Commit_0", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE, STXT ("Cycles no uop commits from this hardware thread")},
+ {"Commit_0_all", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE, STXT ("Cycles no uop commits from any hardware thread on this core")},
+ {"Commit_1", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE, STXT ("Cycles 1 uop commits from this hardware thread")},
+ {"Commit_2", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE, STXT ("Cycles 2 uops commit from this hardware thread")},
+ {"Commit_1_or_2", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE, STXT ("Cycles 1 or 2 uops commit from this hardware thread")},
+
+ /* additional (hidden) aliases, for convenience */
+ {"cycles0", "Cycles_user", 0, NULL, PRELOADS_8, 1, ABST_NONE},
+ {"cycles1", "Cycles_user", 1, NULL, PRELOADS_8, 1, ABST_NONE},
+ {"insts0", "Instr_all", 0, NULL, PRELOADS_8, 0, ABST_NONE},
+ {"insts1", "Instr_all", 1, NULL, PRELOADS_8, 0, ABST_NONE},
+ {NULL, NULL, 0, NULL, 0, 0, 0, 0, ABST_NONE}
+};
+
+static Hwcentry sparc_m7[] = {
+ // obsolete aliases marked with REGNO_INVALID (allows reading of older experiments)
+ {"icm", "IC_miss_commit", REGNO_INVALID, STXT ("L1 I-Cache Misses"), PRELOADS_6, 0, ABST_EXACT},
+ {"raw_stb", "RAW_hit_st_buf", REGNO_INVALID, STXT ("RAW Hazard in Store Buffer"), PRELOADS_55, 0, ABST_NONE},
+ {"raw_stq", "RAW_hit_st_q", REGNO_INVALID, STXT ("RAW Hazard in Store Queue"), PRELOADS_55, 0, ABST_NONE},
+ {"pqs", "PQ_tag_wait_cyc", REGNO_INVALID, STXT ("Pick Queue Stalls"), PRELOADS_7, 1, ABST_NONE},
+ {"sel_stalls", "Sel_0_ready_cyc", REGNO_INVALID, STXT ("Stalls Another Thread Selected"), PRELOADS_7, 1, ABST_NONE},
+
+ // current aliases
+ SPARC_CYCLES
+ {"cycles", "Cycles_user", REGNO_ANY, STXT ("CPU Cycles"), PRELOADS_75, 1, ABST_NONE},
+ {"insts", "Instr_all", REGNO_ANY, STXT ("Instructions Executed"), PRELOADS_75, 0, ABST_NONE},
+ {"c_stalls", "Commit_0_cyc", REGNO_ANY, STXT ("Stall Cycles"), PRELOADS_7, 1, ABST_NONE},
+
+ {"loads", "Instr_ld", REGNO_ANY, STXT ("Load Instructions"), PRELOADS_7, 0, ABST_EXACT},
+ {"stores", "Instr_st", REGNO_ANY, STXT ("Store Instructions"), PRELOADS_6, 0, ABST_EXACT},
+ {"dcm", "DC_miss_commit", REGNO_ANY, STXT ("L1 D-cache Misses"), PRELOADS_6, 0, ABST_EXACT},
+
+ {"l3m_spec", "DC_miss_L3_miss", REGNO_ANY, STXT ("L3 D-cache Speculative Misses"), PRELOADS_5, 0, ABST_NONE},
+ {"lmh_spec", "DC_miss_local_mem_hit", REGNO_ANY, STXT ("Local Mem Speculative Hits"), PRELOADS_5, 0, ABST_NONE},
+ {"rmh_spec", "DC_miss_remote_mem_hit", REGNO_ANY, STXT ("Remote Mem Speculative Hits"), PRELOADS_5, 0, ABST_NONE},
+ //
+ {"dtlbm", "DTLB_HWTW_search", REGNO_ANY, STXT ("DTLB Misses"), PRELOADS_55, 0, ABST_NONE}, // 10@l1 hit, 24@l2 hit, 60@l3 hit, 500@l3 miss, 5000@trap 0.001 events/cycle
+ {"dtlb_hwtw_stalls", "DTLB_HWTW_ref", REGNO_ANY, STXT ("DTLB HWTW Est Stalls"), PRELOADS_55, 25, ABST_NONE, STXT ("Estimated time stalled on a DTLB miss requiring a HW tablewalk")}, // l2-20, l3-50
+ {"dtlb_trap_stalls", "DTLB_HWTW_miss_trap", REGNO_ANY, STXT ("DTLB Trap Est Stalls"), PRELOADS_35, 5000, ABST_NONE, STXT ("Estimated time stalled on a DTLB miss with HW tablewalk unsuccessful")}, // 5000@trap
+ {"rawhaz", "RAW_hit_st_q~emask=0xf", REGNO_ANY, STXT ("Read-after-write Hazards"), PRELOADS_55, 0, ABST_NONE, STXT ("Loads delayed by a previous store (read-after-write hazards)")},
+ {"br_msp_stalls", "Br_mispred", REGNO_ANY, STXT ("Branch Mispredict Stalls"), PRELOADS_6, 24, ABST_NONE, STXT ("Estimated time stalled on Branch mispredictions")}, // 24@miss, %5 of branches is bad
+ {"br_msp", "Br_mispred", REGNO_ANY, STXT ("Branch Mispredict"), PRELOADS_6, 0, ABST_NONE},
+ {"br_tkn", "Br_taken", REGNO_ANY, STXT ("Branch Taken"), PRELOADS_7, 0, ABST_NONE},
+ {"br_ins", "Branches", REGNO_ANY, STXT ("Branch Instructions"), PRELOADS_7, 0, ABST_NONE},
+ {"fgu", "Instr_FGU_crypto", REGNO_ANY, STXT ("FP/VIS/Crypto Instructions"), PRELOADS_7, 0, ABST_NONE},
+ {"spill_fill", "Flush_arch_exception", REGNO_ANY, STXT ("Reg Window Spill/Fill Est Stalls"), PRELOAD (100, 4), 80, ABST_NONE, STXT ("Estimated time stalled on flushing pipeline due to register window spill/fill")},
+
+ /* explicit definitions of (hidden) entries for proper counters */
+ /* Counters that can be time converted, support memspace, or have a short_desc need to be in this table */
+ {"Sel_pipe_drain_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE, STXT ("Cycles a hardware thread stalls at Select waiting with correct instructions when pipeline has to drain after branch misprediction")},
+ {"Sel_0_wait_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE, STXT ("Cycles a hardware thread stalls at Select waiting for various conditions to be resolved")},
+ {"Sel_0_ready_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE, STXT ("Cycles a hardware thread was ready to have its instructions selected but another hardware thread was selected instead")},
+ {"Sel_1_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE, STXT ("Cycles that only 1 instruction or uop was selected")},
+ {"Sel_2_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE, STXT ("Cycles that 2 instructions or uops were selected")},
+
+ {"Pick_0_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"Pick_1_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"Pick_2_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"Pick_3_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"Pick_any_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+
+ {"Branches", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NONE, STXT ("Control transfer instructions completed, excluding trap-related transfers")},
+ {"Instr_FGU_crypto", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NONE, STXT ("FP and VIS instructions completed by the Floating Point and Graphics Unit")},
+ {"Instr_ld", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_EXACT, STXT ("Load instructions completed")},
+ {"Instr_st", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_EXACT, STXT ("Store instructions completed")},
+ {"Instr_SPR_ring_ops", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_EXACT, STXT ("Specialized instructions that require internal use of SPR ring completed")},
+ {"Instr_other", NULL, REGNO_ANY, NULL, PRELOAD (2, 4), 0, ABST_NONE, STXT ("Basic arithmetic and logical instructions completed")},
+ {"Instr_all", NULL, REGNO_ANY, NULL, PRELOAD (1, 4), 0, ABST_NONE, STXT ("Total instructions completed")},
+
+ {"Br_taken", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NONE, STXT ("Branch instructions taken and completed")},
+ {"Instr_SW_count", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NONE, STXT ("SW Count instructions completed")},
+ {"Instr_atomic", NULL, REGNO_ANY, NULL, PRELOAD (20, 4), 0, ABST_EXACT, STXT ("Atomic instructions, including CASA/XA, completed")},
+ {"Instr_SW_prefetch", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_EXACT, STXT ("PREFETCH and PREFETCHA instructions completed")},
+ {"Instr_block_ld_st", NULL, REGNO_ANY, NULL, PRELOAD (20, 4), 0, ABST_EXACT, STXT ("Block load/store instructions completed")},
+
+ {"Br_BTC_miss", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NONE, STXT ("Branches delayed a few extra cycles because branch target not found in Branch Target Cache")},
+
+ {"ITLB_HWTW_hit_8K", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("ITLB miss and HW tablewalk successfully loaded translation for 8K page")},
+ {"ITLB_HWTW_hit_64K", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("ITLB miss and HW tablewalk successfully loaded translation for 64K page")},
+ {"ITLB_HWTW_hit_4M", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("ITLB miss and HW tablewalk successfully loaded translation for 4M page")},
+ {"ITLB_HWTW_hit_256M", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("ITLB miss and HW tablewalk successfully loaded translation for 256M page")},
+ {"ITLB_HWTW_hit_2G_16G", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("ITLB miss and HW tablewalk successfully loaded translation for 2G or 16G page")},
+ {"ITLB_HWTW_miss_trap", NULL, REGNO_ANY, NULL, PRELOAD (1000, 4), 0, ABST_NONE, STXT ("ITLB miss and HW tablewalk unsuccessful")},
+ {"ITLB_HWTW_search", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("ITLB miss and HW tablewalk search done")},
+
+ {"Fetch_0_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"Fetch_0_all_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+
+ {"Instr_buffer_full_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+
+ {"PQ_tag_wait_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"ROB_tag_wait_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"LB_tag_wait_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"SB_tag_wait_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"ROB_LB_tag_wait_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"ROB_SB_tag_wait_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"LB_SB_tag_wait_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"ROB_LB_SB_tag_wait_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"DTLB_miss_tag_wait_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+
+ {"ITLB_HWTW_L2_hit", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("ITLB miss and HW tablewalk hit local L2D")},
+ {"ITLB_HWTW_L3_hit", NULL, REGNO_ANY, NULL, PRELOAD (80, 4), 0, ABST_NONE, STXT ("ITLB miss and HW tablewalk hit local L3 or neighbor L2D")},
+ {"ITLB_HWTW_L3_miss", NULL, REGNO_ANY, NULL, PRELOAD (800, 4), 0, ABST_NONE, STXT ("ITLB miss and HW tablewalk missed all local caches")},
+ {"DTLB_HWTW_L2_hit", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("DTLB miss and HW tablewalk hit local L2D")},
+ {"DTLB_HWTW_L3_hit", NULL, REGNO_ANY, NULL, PRELOAD (80, 4), 0, ABST_NONE, STXT ("DTLB miss and HW tablewalk hit local L3 or neighbor L2D")},
+ {"DTLB_HWTW_L3_miss", NULL, REGNO_ANY, NULL, PRELOAD (800, 4), 0, ABST_NONE, STXT ("DTLB miss and HW tablewalk missed all local caches")},
+ {"DTLB_HWTW_ref", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("DTLB miss requiring HW tablewalk")},
+
+ {"DC_miss_L2_L3_hit_commit", NULL, REGNO_ANY, NULL, PRELOAD (25, 4), 0, ABST_EXACT},
+ {"DC_miss_nbr_scc_hit_commit", NULL, REGNO_ANY, NULL, PRELOAD (500, 4), 0, ABST_EXACT},
+ {"DC_miss_nbr_scc_miss_commit", NULL, REGNO_ANY, NULL, PRELOAD (800, 4), 0, ABST_EXACT},
+ {"DC_miss_commit", NULL, REGNO_ANY, NULL, PRELOAD (25, 4), 0, ABST_EXACT, STXT ("Loads that missed local L1D")},
+
+ {"DTLB_HWTW_hit_8K", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("DTLB miss and HW tablewalk successfully loaded translation for 8K page")},
+ {"DTLB_HWTW_hit_64K", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("DTLB miss and HW tablewalk successfully loaded translation for 64K page")},
+ {"DTLB_HWTW_hit_4M", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("DTLB miss and HW tablewalk successfully loaded translation for 4M page")},
+ {"DTLB_HWTW_hit_256M", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("DTLB miss and HW tablewalk successfully loaded translation for 256M page")},
+ {"DTLB_HWTW_hit_2G_16G", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("DTLB miss and HW tablewalk successfully loaded translation for 2G or 16G page")},
+ {"DTLB_HWTW_miss_trap", NULL, REGNO_ANY, NULL, PRELOAD (800, 4), 0, ABST_NONE, STXT ("DTLB miss and HW tablewalk unsuccessful")},
+ {"DTLB_HWTW_search", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("DTLB miss and HW tablewalk search done")},
+ {"RAW_hit_st_buf", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("Loads delayed by a previous store (read-after-write) still in store buffer not yet committed")},
+ {"RAW_hit_st_q", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("Loads delayed by a previous store (read-after-write) committed but in store queue not yet written to L2D")},
+
+ {"St_q_tag_wait_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+
+ {"St_L2_hit", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NONE, STXT ("Stores whose cacheline being updated was in local L2D")},
+ {"St_L3_hit", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NONE, STXT ("Stores whose cacheline being updated was in local L3")},
+
+ {"DC_hit", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NONE, STXT ("Loads that speculatively hit local L1D")},
+ {"DC_miss_L2_hit", NULL, REGNO_ANY, NULL, PRELOAD (20, 4), 0, ABST_NONE, STXT ("Loads that speculatively hit local L2D")},
+ {"DC_miss_L3_hit", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("Loads that speculatively hit local L3")},
+ {"DC_miss_nbr_L2_hit", NULL, REGNO_ANY, NULL, PRELOAD (100, 4), 0, ABST_NONE, STXT ("Loads that speculatively hit neighbor L2D via local L3")},
+ {"DC_miss_nbr_scc_hit", NULL, REGNO_ANY, NULL, PRELOAD (100, 4), 0, ABST_NONE, STXT ("Loads that speculatively hit neighbor L3 on same socket")},
+ {"DC_miss_nbr_scc_miss", NULL, REGNO_ANY, NULL, PRELOAD (400, 4), 0, ABST_NONE, STXT ("Loads that speculatively missed all caches on same socket")},
+ {"DC_miss", NULL, REGNO_ANY, NULL, PRELOAD (10, 4), 0, ABST_NONE, STXT ("Loads that speculatively missed local L1D")},
+ {"DC_miss_L2_miss", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("Loads that speculatively missed local L2D")},
+ {"DC_miss_L3_miss", NULL, REGNO_ANY, NULL, PRELOAD (200, 4), 0, ABST_NONE, STXT ("Loads that speculatively missed local L3")},
+
+ {"DC_miss_remote_scc_hit", NULL, REGNO_ANY, NULL, PRELOAD (800, 4), 0, ABST_NONE, STXT ("Loads that speculatively hit remote cache on different socket")},
+ {"DC_miss_local_mem_hit", NULL, REGNO_ANY, NULL, PRELOAD (500, 4), 0, ABST_NONE, STXT ("Loads that speculatively hit local memory")},
+ {"DC_miss_remote_mem_hit", NULL, REGNO_ANY, NULL, PRELOAD (1000, 4), 0, ABST_NONE, STXT ("Loads that speculatively hit remote memory")},
+ {"Br_dir_mispred", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("Branch instructions completed whose direction was mispredicted")},
+ {"Br_tgt_mispred", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("Branch instructions completed whose target was mispredicted")},
+ {"Br_mispred", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("Branch instructions completed whose direction or target was mispredicted")},
+
+ {"Cycles_user", NULL, REGNO_ANY, NULL, PRELOAD (1, 4), 1, ABST_NONE, STXT ("Cycles hardware thread is active in specified mode(s)")},
+
+ {"Flush_L3_miss", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("Pipeline flushes due to a load that misses L3 when more than 1 hardware thread is active on the core")},
+ {"Flush_br_mispred", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("Pipeline flushes due to a branch misprediction")},
+ {"Flush_arch_exception", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("Pipeline flushes due to SPARC architecture exceptions and trap entry/return")},
+ {"Flush_other", NULL, REGNO_ANY, NULL, PRELOAD (40, 4), 0, ABST_NONE, STXT ("Pipeline flushes due to hardware thread state change to/from halted/paused state")},
+ //
+ {"Commit_0_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE, STXT ("Cycles no uop commits from this hardware thread")},
+ {"Commit_0_all_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE, STXT ("Cycles no uop commits from any hardware thread on this core")},
+ {"Commit_1_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE, STXT ("Cycles 1 uop commits from this hardware thread")},
+ {"Commit_2_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE, STXT ("Cycles 2 uops commit from this hardware thread")},
+ {"Commit_1_or_2_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE, STXT ("Cycles 1 or 2 uops commit from this hardware thread")},
+
+
+ /* additional (hidden) aliases, for convenience */
+ {"cycles0", "Cycles_user", 0, NULL, PRELOADS_8, 1, ABST_NONE},
+ {"cycles1", "Cycles_user", 1, NULL, PRELOADS_8, 1, ABST_NONE},
+ {"insts0", "Instr_all", 0, NULL, PRELOADS_8, 0, ABST_NONE},
+ {"insts1", "Instr_all", 1, NULL, PRELOADS_8, 0, ABST_NONE},
+ {NULL, NULL, 0, NULL, 0, 0, 0, 0, ABST_NONE}
+};
+
+static Hwcentry sparc_m8[] = {
+ // current aliases
+ SPARC_CYCLES
+ {"cycles", "Cycles_user", REGNO_ANY, STXT ("CPU Cycles"), PRELOADS_75, 1, ABST_NONE},
+ {"insts", "Instr_all", REGNO_ANY, STXT ("Instructions Executed"), PRELOADS_75, 0, ABST_NONE},
+ {"c_stalls", "Commit_0_cyc", 3, STXT ("Stall Cycles"), PRELOADS_7, 1, ABST_NONE}, // 22825776: limit to reg 3
+ {"Sel_0_wait_cyc", "Sel_0_cyc~emask=0x3f", REGNO_ANY, STXT ("Select Stall Cycles"), PRELOADS_7, 1, ABST_NONE, STXT ("Cycles a hardware thread stalls at Select waiting for various conditions to be resolved that prevent it being selected")},
+
+ {"loads", "Instr_ld", REGNO_ANY, STXT ("Load Instructions"), PRELOADS_7, 0, ABST_EXACT},
+ {"stores", "Instr_st", REGNO_ANY, STXT ("Store Instructions"), PRELOADS_6, 0, ABST_EXACT},
+ {"dcm", "DC_miss_commit", REGNO_ANY, STXT ("L1 D-cache Misses"), PRELOADS_6, 0, ABST_EXACT},
+
+ {"lmh_spec", "DC_miss_local_mem_hit", REGNO_ANY, STXT ("Local Mem Speculative Hits"), PRELOADS_5, 0, ABST_NONE},
+ {"rmh_spec", "DC_miss_remote_mem_hit", REGNO_ANY, STXT ("Remote Mem Speculative Hits"), PRELOADS_5, 0, ABST_NONE},
+
+ {"dtlbm", "DTLB_HWTW", REGNO_ANY, STXT ("DTLB Misses"), PRELOAD (40, 5), 0, ABST_NONE}, // 10@l1 hit, 24@l2 hit, 60@l3 hit, 500@l3 miss, 5000@trap 0.001 events/cycle
+ {"dtlb_hwtw_stalls", "DTLB_HWTW", REGNO_ANY, STXT ("DTLB HWTW Est Stalls"), PRELOAD (40, 5), 25, ABST_NONE, STXT ("Estimated time stalled on a DTLB miss requiring a HW tablewalk")}, // l2-20, l3-50
+ {"dtlb_trap_stalls", "DTLB_HWTW_miss_trap", REGNO_ANY, STXT ("DTLB Trap Est Stalls"), PRELOAD (800, 5), 5000, ABST_NONE, STXT ("Estimated time stalled on a DTLB miss with HW tablewalk unsuccessful")}, // 5000@trap
+ {"rawhaz", "RAW_hit", REGNO_ANY, STXT ("Read-after-write Hazards"), PRELOAD (40, 5), 0, ABST_NONE},
+ {"br_msp_stalls", "Br_mispred", REGNO_ANY, STXT ("Branch Mispredict Stalls"), PRELOAD (40, 5), 24, ABST_NONE, STXT ("Estimated time stalled on Branch mispredictions")}, // 24@miss, %5 of branches is bad
+ {"br_msp", "Br_mispred", REGNO_ANY, STXT ("Branch Mispredict"), PRELOAD (40, 5), 0, ABST_NONE},
+ {"br_tkn", "Br_taken", REGNO_ANY, STXT ("Branch Taken"), PRELOADS_7, 0, ABST_NONE},
+ {"br_ins", "Branches", REGNO_ANY, STXT ("Branch Instructions"), PRELOADS_7, 0, ABST_NONE},
+ {"fgu", "Instr_FGU_crypto", REGNO_ANY, STXT ("FP/VIS/Crypto Instructions"), PRELOADS_7, 0, ABST_NONE},
+ {"spill_fill", "Flush_spill_fill", REGNO_ANY, STXT ("Reg Window Spill/Fill Est Stalls"), PRELOAD (100, 5), 80, ABST_NONE, STXT ("Estimated time stalled on flushing pipeline due to register window spill/fill")},
+
+ /* explicit definitions of (hidden) entries for proper counters */
+ /* Counters that can be time converted, support memspace, or have a short_desc need to be in this table */
+ //0x01
+ {"Fetch_stall_IFU_reset_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"Fetch_stall_IC_miss_MB_full_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"Fetch_stall_IC_miss_MB_avail_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"Fetch_stall_IC_miss_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"Fetch_stall_ITLB_miss_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"Fetch_stall_SEL_buf_full_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"Fetch_ready_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"Fetch_0_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"Fetch_0_all_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ //0x02
+ {"Fetch_1_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"Fetch_2_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"Fetch_3_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"Fetch_4_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"Fetch_5_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"Fetch_6_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"Fetch_7_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"Fetch_8_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"Fetch_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ //0x07
+ {"ITLB_HWTW_hit_8K", NULL, REGNO_ANY, NULL, PRELOAD (40, 5), 0, ABST_NONE, STXT ("ITLB miss and HW tablewalk successfully loaded translation for 8K page")},
+ {"ITLB_HWTW_hit_64K", NULL, REGNO_ANY, NULL, PRELOAD (40, 5), 0, ABST_NONE, STXT ("ITLB miss and HW tablewalk successfully loaded translation for 64K page")},
+ {"ITLB_HWTW_hit_4M", NULL, REGNO_ANY, NULL, PRELOAD (40, 5), 0, ABST_NONE, STXT ("ITLB miss and HW tablewalk successfully loaded translation for 4M page")},
+ {"ITLB_HWTW_hit_256M", NULL, REGNO_ANY, NULL, PRELOAD (40, 5), 0, ABST_NONE, STXT ("ITLB miss and HW tablewalk successfully loaded translation for 256M page")},
+ {"ITLB_HWTW_hit_16G", NULL, REGNO_ANY, NULL, PRELOAD (40, 5), 0, ABST_NONE, STXT ("ITLB miss and HW tablewalk successfully loaded translation for 16G page")},
+ {"ITLB_HWTW_hit_1T", NULL, REGNO_ANY, NULL, PRELOAD (40, 5), 0, ABST_NONE, STXT ("ITLB miss and HW tablewalk successfully loaded translation for 1T page")},
+ // { "ITLB_HWTW_miss_RA2PAC", 0x0740, 0xf07ff },
+ // { "ITLB_HWTW_miss_not_RA2PAC", 0x0780, 0xf07ff },
+ {"ITLB_HWTW_miss_trap", NULL, REGNO_ANY, NULL, PRELOAD (1000, 5), 0, ABST_NONE, STXT ("ITLB miss and HW tablewalk unsuccessful")},
+ {"ITLB_HWTW", NULL, REGNO_ANY, NULL, PRELOAD (40, 5), 0, ABST_NONE, STXT ("ITLB miss and HW tablewalk search done")},
+ //0x08
+ {"Br_BTC_miss", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NONE, STXT ("Branches delayed a few extra cycles because branch target not found in Branch Target Cache")},
+ //0x09
+ {"Sel_0_no_instr_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE, STXT ("Cycles a hardware thread stalls at Select because no instructions are available")},
+ {"Sel_0_pipe_drain_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE, STXT ("Cycles a hardware thread stalls at Select waiting with correct instructions when pipeline has to drain after branch misprediction")},
+ {"Sel_0_postsync_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE, STXT ("Cycles a hardware thread stalls at Select waiting for prior instructions to commit")},
+ {"Sel_0_presync_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE, STXT ("Cycles a hardware thread stalls at Select with instruction that cannot decode until prior instructions have committed")},
+ {"Sel_0_thread_hog_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE, STXT ("Cycles a hardware thread stalls at Select to prevent strand monopolizing resources")},
+ {"Sel_0_tag_stall_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE, STXT ("Cycles a hardware thread stalls at Select because no required tags are available")},
+ {"Sel_0_ready_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE, STXT ("Cycles a hardware thread was ready to have its instructions selected but another hardware thread was selected instead")},
+ {"Sel_0_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE, STXT ("Cycles a hardware thread is not selected")},
+ // No direct equivalent Sel_1/2_cyc. Nearest is Decode_uop, which increments by 0-4 each cycle according to how many uops were decoded.
+ //0x13
+ {"ITLB_HWTW_L2_hit", NULL, REGNO_ANY, NULL, PRELOAD (40, 5), 0, ABST_NONE, STXT ("ITLB miss and HW tablewalk hit local L2D")},
+ {"ITLB_HWTW_L3_hit", NULL, REGNO_ANY, NULL, PRELOAD (80, 5), 0, ABST_NONE, STXT ("ITLB miss and HW tablewalk hit local L3 or neighbor L2D")},
+ {"ITLB_HWTW_L3_miss", NULL, REGNO_ANY, NULL, PRELOAD (800, 5), 0, ABST_NONE, STXT ("ITLB miss and HW tablewalk missed all local caches")},
+ {"DTLB_HWTW_L2_hit", NULL, REGNO_ANY, NULL, PRELOAD (40, 5), 0, ABST_NONE, STXT ("DTLB miss and HW tablewalk hit local L2D")},
+ {"DTLB_HWTW_L3_hit", NULL, REGNO_ANY, NULL, PRELOAD (80, 5), 0, ABST_NONE, STXT ("DTLB miss and HW tablewalk hit local L3 or neighbor L2D")},
+ {"DTLB_HWTW_L3_miss", NULL, REGNO_ANY, NULL, PRELOAD (800, 5), 0, ABST_NONE, STXT ("DTLB miss and HW tablewalk missed all local caches")},
+ {"DTLB_HWTW_ref", NULL, REGNO_ANY, NULL, PRELOAD (40, 5), 0, ABST_NONE, STXT ("DTLB miss requiring HW tablewalk")},
+ //0x0E
+ {"Instr_FGU_crypto", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NONE, STXT ("FP and VIS instructions completed by the Floating Point and Graphics Unit")},
+ {"Instr_ld", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_EXACT, STXT ("Load instructions completed")},
+ {"Instr_st", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_EXACT, STXT ("Store instructions completed")},
+ {"Instr_block_ld_st", NULL, REGNO_ANY, NULL, PRELOAD (20, 5), 0, ABST_EXACT, STXT ("Block load/store instructions completed")},
+ {"Instr_SPR_ring_ops", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_EXACT, STXT ("Specialized instructions that require internal use of SPR ring completed")},
+ {"Instr_atomic", NULL, REGNO_ANY, NULL, PRELOAD (20, 5), 0, ABST_EXACT, STXT ("Atomic instructions, including CASA/XA, completed")},
+ {"Instr_SW_prefetch", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_EXACT, STXT ("PREFETCH and PREFETCHA instructions completed")},
+ {"Instr_other", NULL, REGNO_ANY, NULL, PRELOAD (2, 5), 0, ABST_NONE, STXT ("Basic arithmetic and logical instructions completed")},
+ {"Instr_all", NULL, REGNO_ANY, NULL, PRELOAD (1, 5), 0, ABST_NONE, STXT ("Total instructions completed")},
+ //0x0F
+ {"Branches", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NONE, STXT ("Control transfer instructions completed, excluding trap-related transfers")},
+ //0x10
+ {"Br_taken", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NONE, STXT ("Branch instructions taken and completed")},
+ //0x11
+ {"Rename_tag_wait_PQ_1_EXU_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"Rename_tag_wait_PQ_0_LSU_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"Rename_wait_crypto_diag_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"Sel_0_wait_ROB_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"Sel_0_wait_WRF_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"Sel_0_wait_LB_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"Sel_0_wait_SB_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ //0x12
+ {"Fetch_stall_BDA_tag_unavail_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"Fetch_stall_BTA_tag_unavail_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"Fetch_stall_misc_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"Fetch_stall_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"MMU_TTE_buffer_tag_wait_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"MMU_PRQ_pool_tag_wait_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ //0x15
+ {"L2I_request_block_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"L2I_thread_hog_stall_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"L2I_MB_full_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"L2I_snoop_eviction", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"L2I_stall_no_request_credit_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"L2I_stall_no_response_credit_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ //0x16
+ {"Flush_thread_hog", NULL, REGNO_ANY, NULL, PRELOAD (40, 5), 0, ABST_NONE, STXT ("Pipeline flushes to prevent thread from monopolizing resources")},
+ {"Flush_br_mispred", NULL, REGNO_ANY, NULL, PRELOAD (40, 5), 0, ABST_NONE, STXT ("Pipeline flushes due to a branch misprediction")},
+ {"Flush_arch_exception", NULL, REGNO_ANY, NULL, PRELOAD (40, 5), 0, ABST_NONE, STXT ("Pipeline flushes due to SPARC architecture exceptions and trap entry/return")},
+ {"Flush_evil_twin", NULL, REGNO_ANY, NULL, PRELOAD (40, 5), 0, ABST_NONE, STXT ("Pipeline flushes due to detecting floating point evil twin condition")},
+ {"Flush_LSU_trap", NULL, REGNO_ANY, NULL, PRELOAD (40, 5), 0, ABST_NONE, STXT ("Pipeline flushes to refetch Next-PC")},
+ {"Flush_mode_change", NULL, REGNO_ANY, NULL, PRELOAD (40, 5), 0, ABST_NONE, STXT ("Pipeline flushes due to strand mode change")},
+ {"Flush_misalign", NULL, REGNO_ANY, NULL, PRELOAD (40, 5), 0, ABST_NONE, STXT ("Pipeline flushes due to detecting misaligned load/store requiring transition to misaligned mitigation mode")},
+ {"Flush_other", NULL, REGNO_ANY, NULL, PRELOAD (40, 5), 0, ABST_NONE, STXT ("Pipeline flushes due to hardware thread state change to/from halted/paused state")},
+ {"Flush_all", NULL, REGNO_ANY, NULL, PRELOAD (40, 5), 0, ABST_NONE, STXT ("Pipeline flushes due to any reason")},
+ //0x17
+ {"Flush_spill_n_normal", NULL, REGNO_ANY, NULL, PRELOAD (40, 5), 0, ABST_NONE, STXT ("Pipeline flushes due to spill_n_normal exception")},
+ {"Flush_spill_n_other", NULL, REGNO_ANY, NULL, PRELOAD (40, 5), 0, ABST_NONE, STXT ("Pipeline flushes due to spill_n_other exception")},
+ {"Flush_fill_n_normal", NULL, REGNO_ANY, NULL, PRELOAD (40, 5), 0, ABST_NONE, STXT ("Pipeline flushes due to fill_n_normal exception")},
+ {"Flush_fill_n_other", NULL, REGNO_ANY, NULL, PRELOAD (40, 5), 0, ABST_NONE, STXT ("Pipeline flushes due to fill_n_other exception")},
+ {"Flush_spill_fill", NULL, REGNO_ANY, NULL, PRELOAD (40, 5), 0, ABST_NONE, STXT ("Pipeline flushes due to spill/fill exceptions")},
+ {"Flush_lost_load", NULL, REGNO_ANY, NULL, PRELOAD (40, 5), 0, ABST_NONE, STXT ("Pipeline flushes due to speculatively executed load violating memory order")},
+ //0x21
+ {"Br_dir_mispred", NULL, REGNO_ANY, NULL, PRELOAD (40, 5), 0, ABST_NONE, STXT ("Branch instructions completed whose direction was mispredicted")},
+ {"Br_tgt_mispred", NULL, REGNO_ANY, NULL, PRELOAD (40, 5), 0, ABST_NONE, STXT ("Branch instructions completed whose target was mispredicted")},
+ {"Br_mispred", NULL, REGNO_ANY, NULL, PRELOAD (40, 5), 0, ABST_NONE, STXT ("Branch instructions completed whose direction or target was mispredicted")},
+ //0x23
+ {"LSU_st_q_tag_wait_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"LSU_st_q_tag_wait_all_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"L2D_stall_no_request_credit_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"L2D_stall_no_response_credit_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ //0x27
+ {"DC_miss_L2_hit", NULL, REGNO_ANY, NULL, PRELOAD (20, 5), 0, ABST_NONE, STXT ("Loads that speculatively hit local L2D")},
+ {"DC_miss_L3_hit", NULL, REGNO_ANY, NULL, PRELOAD (40, 5), 0, ABST_NONE, STXT ("Loads that speculatively hit local L3")},
+ {"DC_miss_L3_dirty_copyback", NULL, REGNO_ANY, NULL, PRELOAD (40, 5), 0, ABST_NONE, STXT ("Loads that speculatively hit local L3 but require copyback from L2D within same CPC")},
+ {"DC_miss_nbr_L3_hit", NULL, REGNO_ANY, NULL, PRELOAD (100, 5), 0, ABST_NONE, STXT ("Loads that speculatively hit neighbor L3 on same socket")},
+ {"DC_miss_remote_L3_hit", NULL, REGNO_ANY, NULL, PRELOAD (400, 5), 0, ABST_NONE, STXT ("Loads that speculatively hit remote cache on different socket")},
+ {"DC_miss_local_mem_hit", NULL, REGNO_ANY, NULL, PRELOAD (500, 5), 0, ABST_NONE, STXT ("Loads that speculatively hit local memory")},
+ {"DC_miss_remote_mem_hit", NULL, REGNO_ANY, NULL, PRELOAD (1000, 5), 0, ABST_NONE, STXT ("Loads that speculatively hit remote memory")},
+ {"DC_miss", NULL, REGNO_ANY, NULL, PRELOAD (10, 5), 0, ABST_NONE, STXT ("Loads that speculatively missed local L1D")},
+ //0x28
+ {"DC_sec_miss_L2_hit_commit", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_EXACT},
+ {"DC_miss_L2_hit_commit", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_EXACT},
+ {"DC_miss_L3_hit_commit", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_EXACT},
+ {"DC_miss_L3_dirty_copyback_commit", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_EXACT},
+ {"DC_miss_nbr_L3_hit_commit", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_EXACT},
+ {"DC_miss_remote_L3_hit_commit", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_EXACT},
+ {"DC_miss_local_mem_hit_commit", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_EXACT},
+ {"DC_miss_remote_mem_hit_commit", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_EXACT},
+ {"DC_miss_commit", NULL, REGNO_ANY, NULL, PRELOAD (25, 5), 0, ABST_EXACT, STXT ("Loads that missed local L1D")},
+ //0x29
+ // {"Store_DC_sec_miss_L2_hit", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NONE, STXT("")},
+ {"Store_L2_hit", NULL, REGNO_ANY, NULL, PRELOAD (20, 5), 0, ABST_NONE, STXT ("Stores whose cacheline being updated was in local L2D")},
+ {"Store_L3_hit", NULL, REGNO_ANY, NULL, PRELOAD (40, 5), 0, ABST_NONE, STXT ("Stores whose cacheline being updated was in local L3")},
+ {"Store_nbr_L2_hit", NULL, REGNO_ANY, NULL, PRELOAD (100, 5), 0, ABST_NONE, STXT ("Stores whose cacheline being updated was in neighbor L2 on same socket")},
+ {"Store_nbr_L3_hit", NULL, REGNO_ANY, NULL, PRELOAD (100, 5), 0, ABST_NONE, STXT ("Stores whose cacheline being updated was in neighbor L3 on same socket")},
+ {"Store_remote_L3_hit", NULL, REGNO_ANY, NULL, PRELOAD (400, 5), 0, ABST_NONE, STXT ("Stores whose cacheline being updated was in remote cache on different socket")},
+ {"Store_local_mem_hit", NULL, REGNO_ANY, NULL, PRELOAD (500, 5), 0, ABST_NONE, STXT ("Stores whose cacheline being updated was in local memory")},
+ {"Store_remote_mem_hit", NULL, REGNO_ANY, NULL, PRELOAD (1000, 5), 0, ABST_NONE, STXT ("Stores whose cacheline being updated was in remote memory")},
+ {"Store_all", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NONE, STXT ("Stores whose cacheline being updated was observed to be somewhere in the memory hierarchy")},
+ //0x2d
+ {"RAW_hit_st_buf", NULL, REGNO_ANY, NULL, PRELOAD (40, 5), 0, ABST_NONE, STXT ("Loads delayed by a previous store (read-after-write) still in store buffer not yet committed")},
+ {"RAW_hit_st_q", NULL, REGNO_ANY, NULL, PRELOAD (40, 5), 0, ABST_NONE, STXT ("Loads delayed by a previous store (read-after-write) committed but in store queue not yet written to L2D")},
+ {"RAW_hit", NULL, REGNO_ANY, NULL, PRELOAD (40, 5), 0, ABST_NONE, STXT ("Loads delayed by a previous store (read-after-write hazards)")},
+ //0x2f
+ {"Cycles_user_non_MLA", NULL, REGNO_ANY, NULL, PRELOADS_75, 1, ABST_NONE},
+ {"Cycles_user_MLA", NULL, REGNO_ANY, NULL, PRELOADS_75, 1, ABST_NONE},
+ {"Cycles_user", NULL, REGNO_ANY, NULL, PRELOAD (1, 5), 1, ABST_NONE, STXT ("Cycles hardware thread is active in specified mode(s)")},
+ //0x37
+ {"DTLB_HWTW_hit_8K", NULL, REGNO_ANY, NULL, PRELOAD (40, 5), 0, ABST_NONE, STXT ("DTLB miss and HW tablewalk successfully loaded translation for 8K page")},
+ {"DTLB_HWTW_hit_64K", NULL, REGNO_ANY, NULL, PRELOAD (40, 5), 0, ABST_NONE, STXT ("DTLB miss and HW tablewalk successfully loaded translation for 64K page")},
+ {"DTLB_HWTW_hit_4M", NULL, REGNO_ANY, NULL, PRELOAD (40, 5), 0, ABST_NONE, STXT ("DTLB miss and HW tablewalk successfully loaded translation for 4M page")},
+ {"DTLB_HWTW_hit_256M", NULL, REGNO_ANY, NULL, PRELOAD (40, 5), 0, ABST_NONE, STXT ("DTLB miss and HW tablewalk successfully loaded translation for 256M page")},
+ {"DTLB_HWTW_hit_16G", NULL, REGNO_ANY, NULL, PRELOAD (40, 5), 0, ABST_NONE, STXT ("DTLB miss and HW tablewalk successfully loaded translation for 16G page")},
+ {"DTLB_HWTW_hit_1T", NULL, REGNO_ANY, NULL, PRELOAD (40, 5), 0, ABST_NONE, STXT ("DTLB miss and HW tablewalk successfully loaded translation for 1T page")},
+ {"DTLB_HWTW_miss_trap", NULL, REGNO_ANY, NULL, PRELOAD (800, 5), 0, ABST_NONE, STXT ("DTLB miss and HW tablewalk unsuccessful")},
+ {"DTLB_HWTW", NULL, REGNO_ANY, NULL, PRELOAD (40, 5), 0, ABST_NONE, STXT ("DTLB miss and HW tablewalk search done")},
+ //0x3f
+ {"Commit_0_cyc", /*22825776*/ NULL, 3, NULL, PRELOAD_DEF, 1, ABST_NONE, STXT ("Cycles no uop commits from this hardware thread")},
+ {"Commit_0_all_cyc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE, STXT ("Cycles no uop commits from any hardware thread on this core")},
+ // Similar situation to Sel_1_cyc etc. No direct equivalent, nearest is Commit_uop, which increments by 0-4 each cycle according to how many uops were committed.
+
+ /* additional (hidden) aliases, for convenience */
+ {"cycles0", "Cycles_user", 0, NULL, PRELOADS_8, 1, ABST_NONE},
+ {"cycles1", "Cycles_user", 1, NULL, PRELOADS_8, 1, ABST_NONE},
+ {"insts0", "Instr_all", 0, NULL, PRELOADS_8, 0, ABST_NONE},
+ {"insts1", "Instr_all", 1, NULL, PRELOADS_8, 0, ABST_NONE},
+ {NULL, NULL, 0, NULL, 0, 0, 0, 0, ABST_NONE}
+};
+
+static Hwcentry usfuji_V_list[] = {
+ {"cycles", "cycle_counts", REGNO_ANY, STXT ("CPU Cycles"), PRELOADS_7, 1, ABST_NONE},
+ {"insts", "instruction_counts", REGNO_ANY, STXT ("Instructions Executed"), PRELOADS_7, 0, ABST_NONE},
+ {"flops", "floating_instructions", REGNO_ANY, STXT ("Floating-point Ops"), PRELOADS_6, 0, ABST_NONE},
+
+ /* explicit definitions of (hidden) entries for proper counters */
+ /* Only counters that can be time converted, or are load-store need to be in this table */
+ {"cycle_counts", NULL, REGNO_ANY, NULL, PRELOADS_7, 1, ABST_NONE},
+ {"load_store_instructions", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NONE},
+
+ /* additional (hidden) aliases for convenience */
+ {"cycles0", "cycle_counts", 0, NULL, PRELOADS_75, 1, ABST_NONE},
+ {"cycles1", "cycle_counts", 1, NULL, PRELOADS_75, 1, ABST_NONE},
+ {"insts0", "instruction_counts", 0, NULL, PRELOADS_75, 0, ABST_NONE},
+ {"insts1", "instruction_counts", 1, NULL, PRELOADS_75, 0, ABST_NONE},
+ {NULL, NULL, 0, NULL, 0, 0, 0, 0, ABST_NONE}
+};
+
+static Hwcentry usfuji_VI_VII_list[] = {
+ {"cycles", "cycle_counts", REGNO_ANY, STXT ("CPU Cycles"), PRELOADS_75, 1, ABST_NONE},
+ {"insts", "instruction_counts", REGNO_ANY, STXT ("Instructions Executed"), PRELOADS_75, 0, ABST_NONE},
+ {"dcm", "op_r_iu_req_mi_go", REGNO_ANY, STXT ("L1 D-cache Misses"), PRELOADS_6, 0, ABST_NONE},
+ {"dcstall", "op_wait_all", REGNO_ANY, STXT ("L1 D-cache Stall Cycles"), PRELOADS_7, 1, ABST_NONE},
+ {"dtlbm", "write_op_uTLB", REGNO_ANY, STXT ("DTLB Misses"), PRELOADS_5, 0, ABST_NONE},
+ // l2m: mem_cache_load test shows undercount of 3x, however, we don't care too much about this chip, keeping the alias for now
+ {"l2m", "sx_miss_count_dm", REGNO_ANY, STXT ("L2 Cache Misses"), PRELOADS_5, 0, ABST_NONE}, /*YXXX undercounts?*/
+ {"l2wm", "dvp_count_dm", REGNO_ANY, STXT ("L2 Cache Writeback Misses"), PRELOADS_5, 0, ABST_NONE},
+ {"l2ref", "sx_read_count_dm", REGNO_ANY, STXT ("L2 Cache Refs"), PRELOADS_6, 0, ABST_NONE},
+ {"l2stall", "sx_miss_wait_dm", REGNO_ANY, STXT ("L2 Cache Stall Cycles"), PRELOADS_7, 1, ABST_NONE},
+ {"icm", "if_r_iu_req_mi_go", REGNO_ANY, STXT ("L1 I-cache Misses"), PRELOADS_6, 0, ABST_NONE},
+ {"icstall", "if_wait_all", REGNO_ANY, STXT ("L1 I-cache Stall Cycles"), PRELOADS_7, 1, ABST_NONE},
+ {"itlbm", "write_if_uTLB", REGNO_ANY, STXT ("ITLB Misses"), PRELOADS_5, 0, ABST_NONE},
+ {"flops", "floating_instructions", REGNO_ANY, STXT ("Floating-point Ops"), PRELOADS_7, 0, ABST_NONE},
+
+ /* explicit definitions of (hidden) entries for proper counters */
+ /* Only counters that can be time converted, or are load-store need to be in this table */
+ {"cycle_counts", NULL, REGNO_ANY, NULL, PRELOADS_75, 1, ABST_NONE},
+ {"op_stv_wait", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"load_store_instructions", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NONE},
+ {"active_cycle_count", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"op_stv_wait_sxmiss", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"branch_comp_wait", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"write_op_uTLB", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NONE},
+ {"sx_miss_wait_pf", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"sx_miss_wait_dm", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"op_stv_wait_nc_pend", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"op_stv_wait_sxmiss_ex", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"eu_comp_wait", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"sx_miss_count_dm", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NONE},
+ {"fl_comp_wait", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"op_r_iu_req_mi_go", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NONE},
+ {"sx_miss_count_dm_if", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NONE},
+ {"op_stv_wait_ex", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"swpf_lbs_hit", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NONE},
+ {"sx_read_count_dm", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NONE},
+ {"trap_DMMU_miss", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NONE},
+ {"op_wait_all", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"sx_miss_count_dm_opex", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NONE},
+ {"if_wait_all", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"dvp_count_dm", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NONE},
+ {"sx_miss_count_dm_opsh", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 0, ABST_NONE},
+
+ /* additional (hidden) aliases for convenience */
+ {"cycles0", "cycle_counts", 0, NULL, PRELOADS_8, 1, ABST_NONE},
+ {"cycles1", "cycle_counts", 1, NULL, PRELOADS_8, 1, ABST_NONE},
+ {"insts0", "instruction_counts", 0, NULL, PRELOADS_8, 0, ABST_NONE},
+ {"insts1", "instruction_counts", 1, NULL, PRELOADS_8, 0, ABST_NONE},
+ {NULL, NULL, 0, NULL, 0, 0, 0, 0, ABST_NONE}
+};
+
+
+static Hwcentry usfuji_X_list[] = {
+ {"cycles", "cycle_counts", REGNO_ANY, STXT ("CPU Cycles"), PRELOADS_75, 1, ABST_NONE},
+ {"insts", "instruction_counts", REGNO_ANY, STXT ("Instructions Executed"), PRELOADS_75, 0, ABST_NONE},
+ {"dcm", "L1D_miss", REGNO_ANY, STXT ("L1 D-cache Misses"), PRELOADS_65, 0, ABST_NONE},
+ {"dcstall", "L1D_wait_all", REGNO_ANY, STXT ("L1 D-cache Stall Cycles"), PRELOADS_7, 1, ABST_NONE},
+
+ /* explicit definitions of (hidden) entries for proper counters */
+ /* Only counters that can be time converted, or are load-store need to be in this table */
+ {"cycle_counts", NULL, REGNO_ANY, NULL, PRELOADS_75, 1, ABST_NONE},
+ {"w_op_stv_wait_nc_pend", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"op_stv_wait", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"eu_comp_wait", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"L2_miss_wait_pf_bank0", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"op_stv_wait_pfp_busy_ex", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"L2_miss_wait_dm_bank0", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"w_branch_comp_wait", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"w_op_stv_wait_sxmiss_ex", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"op_stv_wait_nc_pend", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"L2_miss_wait_pf_bank2", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"w_eu_comp_wait", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"w_op_stv_wait_sxmiss", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"op_stv_wait_sxmiss_ex", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"branch_comp_wait", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"L2_miss_wait_dm_bank2", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"d_move_wait", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"w_op_stv_wait", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"w_fl_comp_wait", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"op_stv_wait_pfp_busy", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"fl_comp_wait", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"L2_miss_wait_pf_bank1", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"op_stv_wait_ex", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"L2_miss_wait_dm_bank1", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"w_op_stv_wait_ex", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"op_stv_wait_sxmiss", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"op_stv_wait_swpf", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"L1D_wait_all", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"L2_miss_wait_pf_bank3", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"cse_priority_wait", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"op_stv_wait_pfp_busy_swpf", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"L1I_wait_all", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"L2_miss_wait_dm_bank3", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+
+ {"single_mode_cycle_counts", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"suspend_cycle", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"sleep_cycle", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+
+ /* additional (hidden) aliases for convenience */
+ {"cycles0", "cycle_counts", 0, NULL, PRELOADS_8, 1, ABST_NONE},
+ {"cycles1", "cycle_counts", 1, NULL, PRELOADS_8, 1, ABST_NONE},
+ {"insts0", "instruction_counts", 0, NULL, PRELOADS_8, 0, ABST_NONE},
+ {"insts1", "instruction_counts", 1, NULL, PRELOADS_8, 0, ABST_NONE},
+ {NULL, NULL, 0, NULL, 0, 0, 0, 0, ABST_NONE}
+};
+
+static Hwcentry usfuji_XII_list[] = {
+ {"cycles", "cycle_counts", REGNO_ANY, STXT ("CPU Cycles"), PRELOADS_75, 1, ABST_NONE},
+ {"insts", "instruction_counts", REGNO_ANY, STXT ("Instructions Executed"), PRELOADS_75, 0, ABST_NONE},
+ {"dcm", "L1D_miss", REGNO_ANY, STXT ("L1 D-cache Misses"), PRELOADS_65, 0, ABST_NONE},
+ {"dcstall", "L1D_wait_all", REGNO_ANY, STXT ("L1 D-cache Stall Cycles"), PRELOADS_7, 1, ABST_NONE},
+
+ /* explicit definitions of (hidden) entries for proper counters */
+ /* Only counters that can be time converted, or are load-store need to be in this table */
+ {"cycle_counts", NULL, REGNO_ANY, NULL, PRELOADS_75, 1, ABST_NONE},
+ {"L1D_wait_all", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"L1I_wait_all", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"L2_miss_wait_dm_bank0", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"L2_miss_wait_dm_bank1", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"L2_miss_wait_dm_bank2", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"L2_miss_wait_dm_bank3", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"L2_miss_wait_pf_bank0", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"L2_miss_wait_pf_bank1", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"L2_miss_wait_pf_bank2", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"L2_miss_wait_pf_bank3", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"LL_miss_wait_dm_bank0", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"LL_miss_wait_dm_bank1", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"LL_miss_wait_dm_bank2", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"LL_miss_wait_dm_bank3", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"LL_miss_wait_pf_bank0", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"LL_miss_wait_pf_bank1", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"LL_miss_wait_pf_bank2", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"LL_miss_wait_pf_bank3", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"branch_comp_wait", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"cse_priority_wait", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"d_move_wait", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"eu_comp_wait", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"fl_comp_wait", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"l2_sy_miss_wait_dm_part1", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"l2_sy_miss_wait_dm_part2", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"msgr_reqp_wait", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"msgr_rtnp_wait", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"msgs_wait", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"op_stv_wait", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"op_stv_wait_ex", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"op_stv_wait_l1d_miss", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"op_stv_wait_l1d_miss_ex", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"op_stv_wait_l2_miss", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"op_stv_wait_l2_miss_ex", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"op_stv_wait_ll_miss", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"op_stv_wait_ll_miss_ex", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"op_stv_wait_nc_pend", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"op_stv_wait_pfp_busy", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"op_stv_wait_pfp_busy_ex", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"op_stv_wait_pfp_busy_swpf", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"op_stv_wait_swpf", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"op_stv_wait_sxmiss", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"op_stv_wait_sxmiss_ex", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"w_branch_comp_wait", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"w_eu_comp_wait", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"w_fl_comp_wait", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"w_op_stv_wait", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"w_op_stv_wait_ex", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"w_op_stv_wait_l1d_miss", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"w_op_stv_wait_l1d_miss_ex", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"w_op_stv_wait_l2_miss", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"w_op_stv_wait_l2_miss_ex", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"w_op_stv_wait_ll_miss", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"w_op_stv_wait_ll_miss_ex", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"w_op_stv_wait_nc_pend", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"w_op_stv_wait_pfp_busy", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"w_op_stv_wait_pfp_busy_ex", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"w_op_stv_wait_pfp_busy_swpf", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"w_op_stv_wait_sxmiss", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"w_op_stv_wait_sxmiss_ex", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+
+ {"single_mode_cycle_counts", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"suspend_cycle", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"sleep_cycle", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+
+ /* additional (hidden) aliases for convenience */
+ {"cycles0", "cycle_counts", 0, NULL, PRELOADS_8, 1, ABST_NONE},
+ {"cycles1", "cycle_counts", 1, NULL, PRELOADS_8, 1, ABST_NONE},
+ {"insts0", "instruction_counts", 0, NULL, PRELOADS_8, 0, ABST_NONE},
+ {"insts1", "instruction_counts", 1, NULL, PRELOADS_8, 0, ABST_NONE},
+ {NULL, NULL, 0, NULL, 0, 0, 0, 0, ABST_NONE}
+};
+
+/* Kernel profiling pseudo-chip, OBSOLETE (To support 12.3 and earlier, TBR) */
+static Hwcentry kproflist[] = {
+ {"kcycles", "kcycles", 0, STXT ("KCPU Cycles"), PRELOADS_5, 1, ABST_NONE},
+ {"kucycles", "kucycles", 0, STXT ("KUCPU Cycles"), PRELOADS_5, 1, ABST_NONE},
+ {"kthr", "kthr", 0, STXT ("KTHR Cycles"), PRELOADS_5, 1, ABST_NONE},
+ {NULL, NULL, 0, NULL, 0, 0, 0, 0, ABST_NONE}
+};
+
+static Hwcentry pentiumIIlist[] = {
+ /* note -- missing entries for dtlbm, ecm */
+ {"cycles", "cpu_clk_unhalted", REGNO_ANY, STXT ("CPU Cycles"), PRELOADS_7, 1, ABST_NONE},
+ {"insts", "inst_retired", REGNO_ANY, STXT ("Instructions Executed"), PRELOADS_7, 0, ABST_NONE},
+ {"icm", "ifu_ifetch_miss", REGNO_ANY, STXT ("I$ Misses"), PRELOADS_5, 0, ABST_NONE},
+ {"dcrm", "dcu_m_lines_in", REGNO_ANY, STXT ("D$ Read Misses"), PRELOADS_5, 0, ABST_NONE},
+ {"dcwm", "dcu_m_lines_out", REGNO_ANY, STXT ("D$ Write Misses"), PRELOADS_5, 0, ABST_NONE},
+ {"flops", "flops", REGNO_ANY, STXT ("Floating-point Ops"), PRELOADS_7, 0, ABST_NONE},
+ {"itlbm", "itlb_miss", REGNO_ANY, STXT ("ITLB Misses"), PRELOADS_5, 0, ABST_NONE},
+ {"ecim", "l2_ifetch", REGNO_ANY, STXT ("E$ Instr. Misses"), PRELOADS_5, 0, ABST_NONE},
+
+ /* explicit definitions of (hidden) entries for proper counters */
+ /* Only counters that can be time converted, or are load-store need to be in this table */
+ {"cpu_clk_unhalted", NULL, REGNO_ANY, NULL, PRELOADS_7, 1, ABST_NONE},
+
+ /* additional (hidden) aliases for convenience */
+ {"cycles0", "cpu_clk_unhalted", 0, NULL, PRELOADS_75, 1, ABST_NONE},
+ {"cycles1", "cpu_clk_unhalted", 1, NULL, PRELOADS_75, 1, ABST_NONE},
+ {"insts0", "inst_retired", 0, NULL, PRELOADS_75, 0, ABST_NONE},
+ {"insts1", "inst_retired", 1, NULL, PRELOADS_75, 0, ABST_NONE},
+ {NULL, NULL, 0, NULL, 0, 0, 0, 0, ABST_NONE}
+};
+
+static Hwcentry pentiumIIIlist[] = {
+ /* note -- many missing entries; no reference machine to try */
+ {"cycles", "cpu_clk_unhalted", REGNO_ANY, STXT ("CPU Cycles"), PRELOADS_7, 1, ABST_NONE},
+ {"insts", "inst_retired", REGNO_ANY, STXT ("Instructions Executed"), PRELOADS_7, 0, ABST_NONE},
+
+ /* explicit definitions of (hidden) entries for proper counters */
+ /* Only counters that can be time converted, or are load-store need to be in this table */
+ {"cpu_clk_unhalted", NULL, REGNO_ANY, NULL, PRELOADS_7, 1, ABST_NONE},
+
+ /* additional (hidden) aliases for convenience */
+ {"cycles0", "cpu_clk_unhalted", 0, NULL, PRELOADS_75, 1, ABST_NONE},
+ {"cycles1", "cpu_clk_unhalted", 1, NULL, PRELOADS_75, 1, ABST_NONE},
+ {"insts0", "inst_retired", 0, NULL, PRELOADS_75, 0, ABST_NONE},
+ {"insts1", "inst_retired", 1, NULL, PRELOADS_75, 0, ABST_NONE},
+ {NULL, NULL, 0, NULL, 0, 0, 0, 0, ABST_NONE}
+};
+
+static Hwcentry pentium4[] = {
+ {"cycles", "TC_deliver_mode~threshold=0xf~complement=1~compare=1", REGNO_ANY, STXT ("CPU Cycles"), PRELOADS_7, 1, ABST_NONE},
+ {"insts", "instr_retired~emask=0x3", REGNO_ANY, STXT ("Instructions Executed"), PRELOADS_7, 0, ABST_NONE},
+ {"l1m", "BSQ_cache_reference~emask=0x0507", REGNO_ANY, STXT ("L1 Cache Misses"), PRELOADS_7, 0, ABST_NONE},
+ {"l2h", "BSQ_cache_reference~emask=0x0007", REGNO_ANY, STXT ("L2 Cache Hits"), PRELOADS_7, 0, ABST_NONE},
+ {"l2m", "BSQ_cache_reference~emask=0x0500", REGNO_ANY, STXT ("L2 Cache Misses"), PRELOADS_6, 0, ABST_NONE},
+
+ /* explicit definitions of (hidden) entries for proper counters */
+ /* Only counters that can be time converted, or are load-store need to be in this table */
+ {"TC_deliver_mode", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"machine_clear", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+
+ /* additional (hidden) aliases, for convenience */
+ {"cycles0", "TC_deliver_mode~threshold=0xf~complement=1~compare=1", 5, NULL, PRELOADS_75, 1, ABST_NONE},
+ {"cycles1", "TC_deliver_mode~threshold=0xf~complement=1~compare=1", 6, NULL, PRELOADS_75, 1, ABST_NONE},
+ {"insts0", "instr_retired~emask=0x3", 15, NULL, PRELOADS_75, 0, ABST_NONE},
+ {"insts1", "instr_retired~emask=0x3", 16, NULL, PRELOADS_75, 0, ABST_NONE},
+ {NULL, NULL, 0, NULL, 0, 0, 0, 0, ABST_NONE}
+};
+
+static Hwcentry intelCore2list[] = {
+ // For post-processing, both Linux and Solaris definitions need to be "live".
+ // However, for data collection, OS-specific definitions may need to be hidden.
+ // Use REGNO_INVALID for definitions that should be hidden for data collection.
+#define LINUX_ONLY REGNO_ANY
+#define SOLARIS_ONLY REGNO_INVALID /* hidden for Linux data collection */
+
+ {"cycles", "cpu_clk_unhalted.core", /*6759307*/ SOLARIS_ONLY, STXT ("CPU Cycles"), PRELOADS_75, 1, ABST_NONE},
+ {"cycles", "cpu_clk_unhalted.thread", /*6759307*/ SOLARIS_ONLY, STXT ("CPU Cycles"), PRELOADS_75, 1, ABST_NONE},
+ /* Linux Note: 7046312 Many HWC tests fail on system Core2 system with perf_events if above alias used */
+ {"cycles", "cpu_clk_unhalted", LINUX_ONLY, STXT ("CPU Cycles"), PRELOADS_75, 1, ABST_NONE},
+
+ {"insts", "instr_retired.any", SOLARIS_ONLY, STXT ("Instructions Executed"), PRELOADS_75, 0, ABST_NONE},
+ /* Linux Note: 7046312 Many HWC tests fail on system Core2 system with perf_events if above alias used */
+ {"insts", "inst_retired", LINUX_ONLY, STXT ("Instructions Executed"), PRELOADS_75, 0, ABST_NONE},
+
+ // The following counters were identified in "Cycle Accounting Analysis on Intel Core2 Processors" by David Levinthal
+ {"uops_stalled", "rs_uops_dispatched~cmask=1~inv=1", REGNO_ANY, STXT ("uOps Stalled"), PRELOADS_7, 1, ABST_NONE},
+ {"l2m", "mem_load_retired~umask=0x08", REGNO_ANY, STXT ("L2 Line Misses"), PRELOADS_5, 0, ABST_NONE},
+ {"dtlbm", "mem_load_retired~umask=0x10", REGNO_ANY, STXT ("L1 DTLB Misses"), PRELOADS_5, 0, ABST_NONE},
+ {"l1m", "mem_load_retired~umask=0x02", REGNO_ANY, STXT ("L1 Line Misses"), PRELOADS_6, 0, ABST_NONE},
+ // {"stalls_resources","resource_stalls~umask=0x1f", REGNO_ANY, STXT("Resource Stalls"), PRELOADS_6, 1, ABST_NONE},
+ {"rs_full", "resource_stalls~umask=0x02", REGNO_ANY, STXT ("Reservation Station Full"), PRELOADS_6, 1, ABST_NONE},
+ {"br_miss_flush", "resource_stalls~umask=0x10", REGNO_ANY, STXT ("Mispredicted Branch Flushes"), PRELOADS_6, 1, ABST_NONE},
+ {"ld_st_full", "resource_stalls~umask=0x04", REGNO_ANY, STXT ("Load/Store Buffers Full"), PRELOADS_6, 1, ABST_NONE},
+ {"rob_full", "resource_stalls~umask=0x01", REGNO_ANY, STXT ("Reorder Buffer Full"), PRELOADS_6, 1, ABST_NONE},
+ {"slow_decode", "ild_stall", REGNO_ANY, STXT ("Slow Instruction Decode"), PRELOADS_6, 1, ABST_NONE},
+ {"br_miss", "br_cnd_missp_exec", REGNO_ANY, STXT ("Mispredicted Branches"), PRELOADS_5, 0, ABST_NONE},
+ {"ret_miss", "br_call_missp_exec", REGNO_ANY, STXT ("Mispredicted Return Calls"), PRELOADS_5, 0, ABST_NONE},
+ {"div_busy", "idle_during_div", REGNO_ANY, STXT ("Divider Unit Busy"), PRELOADS_5, 1, ABST_NONE},
+ {"fp_assists", "fp_assist", REGNO_ANY, STXT ("FP Microcode Assists"), PRELOADS_5, 0, ABST_NONE},
+ {"bus_busy", "bus_drdy_clocks~umask=0x60", REGNO_ANY, STXT ("Busy Data Bus"), PRELOADS_5, 1, ABST_NONE},
+
+ /* explicit definitions of (hidden) entries for proper counters */
+ /* Only counters that can be time converted, or are load-store need to be in this table */
+ {/*30a*/"cpu_clk_unhalted.core", /*6759307*/ NULL, REGNO_ANY, NULL, PRELOADS_75, 1, ABST_NONE},
+ {/*30a*/"cpu_clk_unhalted.thread", /*6759307*/ NULL, REGNO_ANY, NULL, PRELOADS_75, 1, ABST_NONE},
+ {/*03*/"store_block", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*03*/"store_block.drain_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*03*/"store_block.order", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*03*/"store_block.snoop", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*09*/"memory_disambiguation.reset", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*0c*/"page_walks.cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*14*/"cycles_div_busy", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*18*/"idle_during_div", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*19*/"delayed_bypass.load", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*21*/"l2_ads", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*23*/"l2_dbus_busy_rd", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*32*/"l2_no_req", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*3c*/"cpu_clk_unhalted", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*3c*/"cpu_clk_unhalted.core_p", NULL, REGNO_ANY, NULL, PRELOADS_75, 1, ABST_NONE},
+ {/*3c*/"cpu_clk_unhalted.bus", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*3c*/"cpu_clk_unhalted.no_other", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*42*/"l1d_cache_lock.duration", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*62*/"bus_drdy_clocks", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*63*/"bus_lock_clocks", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*64*/"bus_data_rcv", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*7a*/"bus_hit_drv", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*7b*/"bus_hitm_drv", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*7d*/"busq_empty", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*7e*/"snoop_stall_drv", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*7f*/"bus_io_wait", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*83*/"inst_queue", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*83*/"inst_queue.full", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*86*/"cycles_l1i_mem_stalled", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*87*/"ild_stall", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a1*/"rs_uops_dispatched", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a1*/"rs_uops_dispatched_port", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a1*/"rs_uops_dispatched_port.0", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a1*/"rs_uops_dispatched_port.1", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a1*/"rs_uops_dispatched_port.2", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a1*/"rs_uops_dispatched_port.3", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a1*/"rs_uops_dispatched_port.4", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a1*/"rs_uops_dispatched_port.5", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*6c*/"cycles_int", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*6c*/"cycles_int.masked", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*6c*/"cycles_int.pending_and_masked", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*d2*/"rat_stalls", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*d2*/"rat_stalls.rob_read_port", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*d2*/"rat_stalls.partial_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*d2*/"rat_stalls.flags", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*d2*/"rat_stalls.fpsw", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*d2*/"rat_stalls.any", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*d2*/"rat_stalls.other_serialization_stalls", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*d4*/"seg_rename_stalls", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*d4*/"seg_rename_stalls.es", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*d4*/"seg_rename_stalls.ds", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*d4*/"seg_rename_stalls.fs", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*d4*/"seg_rename_stalls.gs", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*d4*/"seg_rename_stalls.any", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*dc*/"resource_stalls", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*dc*/"resource_stalls.rob_full", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*dc*/"resource_stalls.rs_full", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*dc*/"resource_stalls.ld_st", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*dc*/"resource_stalls.fpcw", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*dc*/"resource_stalls.br_miss_clear", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*dc*/"resource_stalls.any", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ /* "Architectural" events: */
+ {/*3c*/"unhalted-core-cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+
+ /* additional (hidden) aliases for convenience */
+ {"cycles0", "cpu_clk_unhalted", 0, NULL, PRELOADS_8, 1, ABST_NONE},
+ {"cycles1", "cpu_clk_unhalted", 1, NULL, PRELOADS_8, 1, ABST_NONE},
+ {"insts0", "inst_retired", 0, NULL, PRELOADS_8, 0, ABST_NONE},
+ {"insts1", "inst_retired", 1, NULL, PRELOADS_8, 0, ABST_NONE},
+ {NULL, NULL, 0, NULL, 0, 0, 0, 0, ABST_NONE}
+};
+
+
+static Hwcentry intelNehalemList[] = {
+ /* 6832635: on Linux, we're not seeing consistent overflows on FFCs */
+ /* 15634344==6940930: HWC overflow profiling can cause system hang on Solaris/core-i7 systems */
+ /* 17578620: counter overflow for fixed-function counters hangs systems */
+ /* same issues for intelSandyBridgeList and intelHaswellList */
+ PERF_EVENTS_SW_EVENT_ALIASES
+ USE_INTEL_REF_CYCLES (133)
+ {"cycles", "cpu_clk_unhalted.thread_p", REGNO_ANY, STXT ("CPU Cycles"), PRELOADS_75, 1, ABST_NONE},
+ {"insts", "inst_retired.any_p", REGNO_ANY, STXT ("Instructions Executed"), PRELOADS_75, 0, ABST_NONE},
+ // cpu_clk_unhalted.ref: at the ref requency of the cpu. Should not be affected by Speedstep or Turbo.
+ // cpu_clk_unhalted.thread_p: with HT & 2 threads, 2x cycles. Affected by Speedstep and Turbo.
+
+ // PEBs (Sampling)
+ {"l2m_latency", "mem_inst_retired.latency_above_threshold", REGNO_ANY, STXT ("L2 Cache Miss Est. Latency"), PRELOADS_4, 33, ABST_EXACT_PEBS_PLUS1},
+
+ // See file hwctable.README.corei7
+ {"dch", "mem_load_retired.l1d_hit", REGNO_ANY, STXT ("L1 D-cache Hits"), PRELOADS_7, 0, ABST_NONE},
+ {"dcm", "0xCB~umask=0x1e", REGNO_ANY, STXT ("L1 D-Cache Misses"), PRELOADS_65, 0, ABST_NONE}, /*mem_load_retired*/
+ {"lfbdh", "mem_load_retired.hit_lfb", REGNO_ANY, STXT ("LFB D-cache Hits"), PRELOADS_65, 0, ABST_NONE},
+ {"l2h", "mem_load_retired.l2_hit", REGNO_ANY, STXT ("L2 Cache Hits"), PRELOADS_65, 0, ABST_NONE},
+ {"l2m", "0xCB~umask=0x1c", REGNO_ANY, STXT ("L2 Cache Misses"), PRELOADS_6, 0, ABST_NONE}, /*mem_load_retired*/
+ {"l3h", "mem_load_retired.llc_unshared_hit", REGNO_ANY, STXT ("L3 Cache Hit w/o Snoop"), PRELOADS_6, 0, ABST_NONE},
+ {"l3h_stall", "mem_load_retired.llc_unshared_hit", REGNO_ANY, STXT ("L3 Cache Hit w/o Snoop x 35: Est. Stalls"), PRELOADS_6, 35, ABST_NONE},
+ {"l3hsnoop", "mem_load_retired.other_core_l2_hit_hitm", REGNO_ANY, STXT ("L3 Cache Hit w/Snoop"), PRELOADS_6, 0, ABST_NONE},
+ {"l3hsnoop_stall", "mem_load_retired.other_core_l2_hit_hitm", REGNO_ANY, STXT ("L3 Cache Hit w/Snoop x 74: Est. Stalls"), PRELOADS_6, 74, ABST_NONE},
+ {"l3m", "mem_load_retired.llc_miss", REGNO_ANY, STXT ("L3 Cache Misses"), PRELOADS_5, 0, ABST_NONE},
+ {"l3m_stall", "mem_load_retired.llc_miss", REGNO_ANY, STXT ("L3 Cache Misses x 180: Estimated Stalls"), PRELOADS_5, 180, ABST_NONE},
+ {"dtlbm", "dtlb_load_misses.walk_completed", REGNO_ANY, STXT ("DTLB Misses"), PRELOADS_6, 0, ABST_NONE},
+ {"dtlbm_stall", "dtlb_load_misses.walk_completed", REGNO_ANY, STXT ("DTLB Misses x 30: Estimated Stalls"), PRELOADS_6, 30, ABST_NONE},
+ {"addr_alias_stall", "partial_address_alias", REGNO_ANY, STXT ("Partial Address Aliases x 3: Est. Stalls"), PRELOADS_6, 3, ABST_NONE},
+ {"uope_stall", "uops_executed.port234~cmask=1~inv=1", REGNO_ANY, STXT ("UOP Execute Stalls per Core"), PRELOADS_7, 1, ABST_NONE},
+ {"uopr_stall", "uops_retired.any~cmask=1~inv=1", REGNO_ANY, STXT ("UOP Retired Stalls"), PRELOADS_7, 1, ABST_NONE},
+ {"itlbm", "itlb_miss_retired", REGNO_ANY, STXT ("ITLB Misses"), PRELOADS_6, 0, ABST_NONE},
+ {"l1i_stall", "l1i.cycles_stalled", REGNO_ANY, STXT ("L1 I-cache Stalls"), PRELOADS_6, 1, ABST_NONE},
+ {"br_rets", "br_inst_retired.all_branches", REGNO_ANY, STXT ("Branch Instruction Retires"), PRELOADS_7, 0, ABST_NONE},
+ {"br_misp", "br_misp_exec.any", REGNO_ANY, STXT ("Branch Mispredicts"), PRELOADS_6, 0, ABST_NONE},
+ {"mach_clear", "machine_clears.cycles", REGNO_ANY, STXT ("Machine Clear Asserted"), PRELOADS_6, 1, ABST_NONE},
+ {"fp_mmx", "fp_mmx_trans.any", REGNO_ANY, STXT ("FP-MMX Transistions"), PRELOADS_6, 0, ABST_NONE},
+ {"div_busy", "arith.cycles_div_busy", REGNO_ANY, STXT ("Divider Busy Cycles"), PRELOADS_6, 1, ABST_NONE},
+
+ /* explicit definitions of (hidden) entries for proper counters */
+ /* Only counters that can be time converted, or are load-store need to be in this table */
+ {/*30a*/"cpu_clk_unhalted.core", /*6759307*/ NULL, REGNO_ANY, NULL, PRELOADS_75, 1, ABST_NONE},
+ {/*30a*/"cpu_clk_unhalted.thread", /*6759307*/ NULL, REGNO_ANY, NULL, PRELOADS_75, 1, ABST_NONE},
+ {/*04*/"sb_drain.cycles", /*future*/ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*08.04*/"dtlb_load_misses.walk_cycles", /*westmere*/ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ //{/*0e*/"uops_issued.stalled_cycles",/*future, multibit*/ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*09*/"memory_disambiguation.reset", /*future*/ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*09*/"memory_disambiguation.watch_cycles", /*future*/ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*0b*/"mem_inst_retired.latency_above_threshold", /*PEBS*/ NULL, REGNO_ANY, NULL, PRELOADS_4, 33, ABST_EXACT_PEBS_PLUS1}, //non-standard overflow
+ {/*14*/"arith.cycles_div_busy", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*17*/"inst_queue_write_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*1d*/"hw_int.cycles_masked", /*future*/ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*1d*/"hw_int.cycles_pending_and_masked", /*future*/ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*3c*/"cpu_clk_unhalted.thread_p", NULL, REGNO_ANY, NULL, PRELOADS_75, 1, ABST_NONE},
+ {/*48*/"l1d_pend_miss.load_buffers_full", /*future*/ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*49.04*/"dtlb_misses.walk_cycles", /*westmere*/ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*4e*/"sfence_cycles", /*future*/ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*4f.10*/"ept.walk_cycles", /*westmere*/ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*60*/"offcore_requests_outstanding.demand.read_data", /*future*/ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*60*/"offcore_requests_outstanding.demand.read_code", /*future*/ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*60*/"offcore_requests_outstanding.demand.rfo", /*future*/ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*60*/"offcore_requests_outstanding.any.read", /*future*/ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*63*/"cache_lock_cycles.l1d", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*63*/"cache_lock_cycles.l1d_l2", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*80*/"l1i.cycles_stalled", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*85*/"itlb_misses.walk_cycles", /*future*/ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*85*/"itlb_misses.pmh_busy_cycles", /*future*/ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*87*/"ild_stall.lcp", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*87*/"ild_stall.mru", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*87*/"ild_stall.iq_full", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*87*/"ild_stall.regen", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*87*/"ild_stall.any", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a2*/"resource_stalls.any", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a2*/"resource_stalls.load", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a2*/"resource_stalls.rs_full", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a2*/"resource_stalls.store", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a2*/"resource_stalls.rob_full", /*future*/ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a2*/"resource_stalls.fpcw", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a2*/"resource_stalls.mxcsr", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a2*/"resource_stalls.other", /*future*/ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*b0*/"offcore_requests_sq_full", /*future*/ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*b3*/"snoopq_requests_outstanding.data", /*future*/ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*b3*/"snoopq_requests_outstanding.invalidate", /*future*/ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*b3*/"snoopq_requests_outstanding.code", /*future*/ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ //{/*c2*/"uops_retired.stalled_cycles",/*future, multibit*/ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*c3*/"machine_clears.cycles", /*future*/ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*d2*/"rat_stalls.flags", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*d2*/"rat_stalls.registers", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*d2*/"rat_stalls.rob_read_port", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*d2*/"rat_stalls.scoreboard", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*d2*/"rat_stalls.any", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*d4*/"seg_rename_stalls", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*f6*/"sq_full_stall_cycles", /*future*/ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ /* "Architectural" events: */
+ {/*3c*/"unhalted-core-cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ PERF_EVENTS_SW_EVENT_DEFS
+
+ /* additional (hidden) aliases for convenience */
+#if 0
+ USE_INTEL_REF_CYCLES (133),
+#endif
+ {"insts0", "inst_retired.any_p", 0, NULL, PRELOADS_8, 0, ABST_NONE},
+ {"insts1", "inst_retired.any_p", 1, NULL, PRELOADS_8, 0, ABST_NONE},
+ {NULL, NULL, 0, NULL, 0, 0, 0, 0, ABST_NONE}
+};
+
+
+static Hwcentry intelSandyBridgeList[] = {
+ /* see comments for "cycles" and "insts" for intelNehalemList */
+ PERF_EVENTS_SW_EVENT_ALIASES
+ USE_INTEL_REF_CYCLES (100)
+ {"cycles", "cpu_clk_unhalted.thread_p", REGNO_ANY, STXT ("CPU Cycles"), PRELOADS_75, 1, ABST_NONE},
+ {"insts", "inst_retired.any_p", REGNO_ANY, STXT ("Instructions Executed"), PRELOADS_75, 0, ABST_NONE},
+
+ // PEBS (sampling)
+ {"l2m_latency", "mem_trans_retired.load_latency", REGNO_ANY, STXT ("L2 Cache Miss Est. Latency"), PRELOADS_4, 65, ABST_EXACT_PEBS_PLUS1},
+
+ // See file hwctable.README.sandybridge
+ {"dch", "mem_load_uops_retired.l1_hit", REGNO_ANY, STXT ("L1 D-cache Hits"), PRELOADS_7, 0, ABST_NONE},
+ {"dcm", "mem_load_uops_retired.l1_miss", REGNO_ANY, STXT ("L1 D-cache Misses"), PRELOADS_65, 0, ABST_NONE}, /*mem_load_uops_retired*/
+ {"l2h", "mem_load_uops_retired.l2_hit", REGNO_ANY, STXT ("L2 Cache Hits"), PRELOADS_65, 0, ABST_NONE},
+ {"l2m", "mem_load_uops_retired.l2_miss", REGNO_ANY, STXT ("L2 Cache Misses"), PRELOADS_6, 0, ABST_NONE}, /*mem_load_uops_retired*/
+ // Intel errata: BT241 and BT243 says the mem_load_uops_retired.llc* counters may not be reliable on some CPU variants
+ {"l3h", "mem_load_uops_retired.llc_hit", REGNO_ANY, STXT ("L3 Cache Hit w/o Snoop"), PRELOADS_6, 0, ABST_NONE}, // may undercount
+ {"l3m", "longest_lat_cache.miss", REGNO_ANY, STXT ("L3 Cache Misses"), PRELOADS_5, 0, ABST_NONE},
+
+ /* dtlbm has not been confirmed via Intel white paper */
+ {"dtlbm", "dtlb_load_misses.walk_completed", REGNO_ANY, STXT ("DTLB Misses"), PRELOADS_6, 0, ABST_NONE},
+ {"dtlbm_stall", "dtlb_load_misses.walk_completed", REGNO_ANY, STXT ("DTLB Misses x 30: Estimated Stalls"), PRELOADS_6, 30, ABST_NONE},
+ {"dtlbm", "dtlb_load_misses.demand_ld_walk_completed", REGNO_ANY, STXT ("DTLB Misses"), PRELOADS_6, 0, ABST_NONE},
+ {"dtlbm_stall", "dtlb_load_misses.demand_ld_walk_completed", REGNO_ANY, STXT ("DTLB Misses x 30: Estimated Stalls"), PRELOADS_6, 30, ABST_NONE},
+
+ /* explicit definitions of (hidden) entries for proper counters */
+ /* Only counters that can be time converted, or are load-store need to be in this table */
+ {/* 30a */"cpu_clk_unhalted.thread", /*15634344==6940930*/ NULL, REGNO_ANY, NULL, PRELOADS_75, 1, ABST_NONE},
+ //{/* 30a */"cpu_clk_unhalted.core", /*6759307*/ NULL, REGNO_ANY, NULL, PRELOADS_75, 1, ABST_NONE},
+ {/*08.04*/"dtlb_load_misses.walk_duration", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*08.84*/"dtlb_load_misses.demand_ld_walk_duration", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*0d.03*/"int_misc.recovery_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*0d.40*/"int_misc.rat_stall_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*0e.01*/"uops_issued.stall_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*0e.01*/"uops_issued.core_stall_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*14.01*/"arith.fpu_div_active", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*3c.00*/"cpu_clk_unhalted.thread_p", NULL, REGNO_ANY, NULL, PRELOADS_75, 1, ABST_NONE},
+ {/*48.01*/"l1d_pend_miss.pending_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*49.04*/"dtlb_store_misses.walk_duration", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*59.20*/"partial_rat_stalls.flags_merge_uop", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*59.20*/"partial_rat_stalls.flags_merge_uop_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*59.40*/"partial_rat_stalls.slow_lea_window", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ //{/*59.80*/"partial_rat_stalls.mul_single_uop", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*5b.0c*/"resource_stalls2.all_fl_empty", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*5b.0f*/"resource_stalls2.all_prf_control", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*5b.40*/"resource_stalls2.bob_full", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*5b.4f*/"resource_stalls2.ooo_rsrc", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*5c.01*/"cpl_cycles.ring0", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*5c.02*/"cpl_cycles.ring123", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*5c.xx*/"cpl_cycles.ring0_trans", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*5c.xx*/"cpl_cycles.ring0_transition", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*5e.01*/"rs_events.empty_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*60.01*/"offcore_requests_outstanding.cycles_with_demand_data_rd", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*60.01*/"offcore_requests_outstanding.demand_data_rd_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*60.04*/"offcore_requests_outstanding.cycles_with_demand_rfo", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*60.04*/"offcore_requests_outstanding.demand_rfo_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*60.08*/"offcore_requests_outstanding.cycles_with_data_rd", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*60.08*/"offcore_requests_outstanding.all_data_rd_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*60.02*/"offcore_requests_outstanding.demand_code_rd_cycles", /*?*/ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*63.01*/"lock_cycles.split_lock_uc_lock_duration", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*63.02*/"lock_cycles.cache_lock_duration", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*79.00*/"idq.empty", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*79.04*/"idq.mite_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*79.08*/"idq.dsb_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*79.10*/"idq.ms_dsb_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*79.20*/"idq.ms_mite_uops_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*79.20*/"idq.ms_mite_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*79.30*/"idq.ms_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*79.18*/"idq.all_dsb_cycles_any_uops", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*79.18*/"idq.all_dsb_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*79.18*/"idq.all_dsb_cycles_4_uops", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*79.24*/"idq.all_mite_cycles_any_uops", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*79.24*/"idq.all_mite_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*79.24*/"idq.all_mite_cycles_4_uops", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*79.3c*/"idq.mite_all_cycles", /* Linux, but not in docs? */ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*80.04*/"icache.ifetch_stall", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*85.04*/"itlb_misses.walk_duration", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*87.01*/"ild_stall.lcp", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*87.04*/"ild_stall.iq_full", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*9c.xx*/"idq_uops_not_delivered.cycles_0_uops_deliv.core", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*9c.xx*/"idq_uops_not_delivered.cycles_le_1_uop_deliv.core", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*9c.xx*/"idq_uops_not_delivered.cycles_le_2_uop_deliv.core", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*9c.xx*/"idq_uops_not_delivered.cycles_le_3_uop_deliv.core", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*9c.01*/"idq_uops_not_delivered.cycles_ge_1_uop_deliv.core", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*9c.01*/"idq_uops_not_delivered.cycles_fe_was_ok", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a1.01*/"uops_executed_port.port_0", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a1.02*/"uops_executed_port.port_1", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a1.04*/"uops_executed_port.port_2", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a1.08*/"uops_executed_port.port_3", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a1.10*/"uops_executed_port.port_4", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a1.20*/"uops_executed_port.port_5", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a2.01*/"resource_stalls.any", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a2.02*/"resource_stalls.lb", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a2.04*/"resource_stalls.rs", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a2.08*/"resource_stalls.sb", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a2.0a*/"resource_stalls.lb_sb", /*sb-ep*/ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a2.0e*/"resource_stalls.mem_rs", /*sb-ep*/ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a2.10*/"resource_stalls.rob", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a2.20*/"resource_stalls.fcsw", /*sb*/ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a2.40*/"resource_stalls.mxcsr", /*sb*/ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a2.80*/"resource_stalls.other", /*sb*/ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a2.F0*/"resource_stalls.ooo_rsrc", /*sb-ep*/ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+
+ {/*a3.01*/"cycle_activity.cycles_l2_pending", /*F6M62*/ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*??.??*/"cycle_activity.stalls_l2_pending", /*F6M62*/ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a3.02*/"cycle_activity.cycles_ldm_pending", /*F6M62*/ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*??.??*/"cycle_activity.stalls_ldm_pending", /*F6M62*/ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a3.04*/"cycle_activity.cycles_no_execute", /*F6M62*/ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a3.04*/"cycle_activity.cycles_no_dispatch", /*sandybridge*/ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a3.08*/"cycle_activity.cycles_l1d_pending", /*F6M62*/ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*??.??*/"cycle_activity.stalls_l1d_pending", /*F6M62*/ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+
+ {/*ab.02*/"dsb2mite_switches.penalty_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*b1.??*/"uops_executed.stall_cycles", /*? not in PRM*/ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*b1.01*/"uops_dispatched.stall_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*b1.01*/"uops_executed.stall_cycles", /*F6M62*/ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*b1.01*/"uops_executed.cycles_ge_1_uop_exec", /*F6M62,not doc'd*/ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*b1.01*/"uops_executed.cycles_ge_2_uops_exec", /*F6M62,not doc'd*/ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*b1.01*/"uops_executed.cycles_ge_3_uops_exec", /*F6M62,not doc'd*/ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*b1.01*/"uops_executed.cycles_ge_4_uops_exec", /*F6M62,not doc'd*/ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+
+ {/*bf.05*/"l1d_blocks.bank_conflict_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*c2.01*/"uops_retired.stall_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*c2.01*/"uops_retired.total_cycles", /*cmask==0x10*/ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*c2.01*/"uops_retired.core_stall_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*c2.01*/"uops_retired.active_cycles", /*cmask==0x1*/ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+#if 0 // need to see documentation on the following before marking them as cycles
+ uops_executed.cycles_ge_1_uop_exec[ / {0 | 1 | 2 | 3}], 1000003 (events)
+ uops_executed.cycles_ge_2_uops_exec[ /
+ {0 | 1 | 2 | 3}
+ ], 1000003 (events)
+ uops_executed.cycles_ge_3_uops_exec[ /
+ {0 | 1 | 2 | 3}
+ ], 1000003 (events)
+ uops_executed.cycles_ge_4_uops_exec[ /
+ {0 | 1 | 2 | 3}
+ ], 1000003 (events)
+#endif
+ {/*cd.01*/"mem_trans_retired.load_latency", /*PEBS*/ NULL, REGNO_ANY, NULL, PRELOADS_4, 65, ABST_EXACT_PEBS_PLUS1}, //non-standard overflow
+
+ /* "Architectural" events: */
+ {/*3c*/"unhalted-core-cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ PERF_EVENTS_SW_EVENT_DEFS
+
+ /* additional (hidden) aliases for convenience */
+#if 0
+ USE_INTEL_REF_CYCLES (100),
+#endif
+ {"insts0", "inst_retired.any_p", 0, NULL, PRELOADS_8, 0, ABST_NONE},
+ {"insts1", "inst_retired.any_p", 1, NULL, PRELOADS_8, 0, ABST_NONE},
+ {NULL, NULL, 0, NULL, 0, 0, 0, 0, ABST_NONE}
+};
+
+
+static Hwcentry intelHaswellList[] = {
+ /* see comments for "cycles" and "insts" for intelNehalemList */
+ PERF_EVENTS_SW_EVENT_ALIASES
+ USE_INTEL_REF_CYCLES (100)
+ {"cycles", "cpu_clk_unhalted.thread_p", REGNO_ANY, STXT ("CPU Cycles"), PRELOADS_75, 1, ABST_NONE},
+ {"insts", "inst_retired.any_p", REGNO_ANY, STXT ("Instructions Executed"), PRELOADS_75, 0, ABST_NONE},
+
+ // PEBS (sampling)
+ {"l2m_latency", "mem_trans_retired.load_latency", REGNO_ANY, STXT ("L2 Cache Miss Est. Latency"), PRELOADS_4, 65, ABST_EXACT_PEBS_PLUS1},
+
+ {"dch", "mem_load_uops_retired.l1_hit", REGNO_ANY, STXT ("L1 D-cache Hits"), PRELOADS_7, 0, ABST_NONE},
+ {"dcm", "mem_load_uops_retired.l1_miss", REGNO_ANY, STXT ("L1 D-cache Misses"), PRELOADS_65, 0, ABST_NONE}, //mem_load_uops_retired
+ {"dcm", "0xd1~umask=0x08", REGNO_ANY, STXT ("L1 D-cache Misses"), PRELOADS_65, 0, ABST_NONE}, //mem_load_uops_retired
+ {"l2h", "mem_load_uops_retired.l2_hit", REGNO_ANY, STXT ("L2 Cache Hits"), PRELOADS_65, 0, ABST_NONE},
+ {"l2m", "mem_load_uops_retired.l2_miss", REGNO_ANY, STXT ("L2 Cache Misses"), PRELOADS_6, 0, ABST_NONE}, //mem_load_uops_retired
+ {"l2m", "0xd1~umask=0x10", REGNO_ANY, STXT ("L2 Cache Misses"), PRELOADS_6, 0, ABST_NONE}, //mem_load_uops_retired
+ {"l3h", "mem_load_uops_retired.l3_hit", REGNO_ANY, STXT ("L3 Cache Hit w/o Snoop"), PRELOADS_6, 0, ABST_NONE},
+ {"l3m", "mem_load_uops_retired.l3_miss", REGNO_ANY, STXT ("L3 Cache Misses"), PRELOADS_5, 0, ABST_NONE}, //mem_load_uops_retired
+ {"l3m", "0xd1~umask=0x20", REGNO_ANY, STXT ("L3 Cache Misses"), PRELOADS_5, 0, ABST_NONE}, //mem_load_uops_retired
+
+ /* dtlbm has not been confirmed via Intel white paper */
+ {"dtlbm", "dtlb_load_misses.walk_completed", REGNO_ANY, STXT ("DTLB Misses"), PRELOADS_6, 0, ABST_NONE},
+ {"dtlbm_stall", "dtlb_load_misses.walk_completed", REGNO_ANY, STXT ("DTLB Misses x 30: Estimated Stalls"), PRELOADS_6, 30, ABST_NONE},
+
+ /* explicit definitions of (hidden) entries for proper counters */
+ /* Only counters that can be time converted, or are load-store need to be in this table */
+ {/* 30a */"cpu_clk_unhalted.thread", /*15634344==6940930*/ NULL, REGNO_ANY, NULL, PRELOADS_75, 1, ABST_NONE},
+ //{/* 30a */"cpu_clk_unhalted.core", /*6759307*/ NULL, REGNO_ANY, NULL, PRELOADS_75, 1, ABST_NONE},
+ {/*08.10*/"dtlb_load_misses.walk_duration", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*0d.03*/"int_misc.recovery_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*0e.01*/"uops_issued.stall_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*0e.01*/"uops_issued.core_stall_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*3c.00*/"cpu_clk_unhalted.thread_p", NULL, REGNO_ANY, NULL, PRELOADS_75, 1, ABST_NONE},
+ {/*48.01*/"l1d_pend_miss.pending_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*49.04*/"dtlb_store_misses.walk_duration", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*5c.01*/"cpl_cycles.ring0", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*5c.02*/"cpl_cycles.ring123", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*5c.xx*/"cpl_cycles.ring0_trans", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*5e.01*/"rs_events.empty_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*60.01*/"offcore_requests_outstanding.cycles_with_demand_data_rd", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*60.02*/"offcore_requests_outstanding.demand_code_rd_cycles", /*?*/ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*60.04*/"offcore_requests_outstanding.demand_rfo_cycles", /*?*/ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*60.08*/"offcore_requests_outstanding.cycles_with_data_rd", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*63.01*/"lock_cycles.split_lock_uc_lock_duration", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*63.02*/"lock_cycles.cache_lock_duration", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*79.00*/"idq.empty", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*79.04*/"idq.mite_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*79.08*/"idq.dsb_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*79.10*/"idq.ms_dsb_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*79.20*/"idq.ms_mite_uops_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*79.20*/"idq.ms_mite_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*79.30*/"idq.ms_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*79.18*/"idq.all_dsb_cycles_any_uops", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*79.18*/"idq.all_dsb_cycles_4_uops", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*79.24*/"idq.all_mite_cycles_any_uops", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*79.24*/"idq.all_mite_cycles_4_uops", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*80.04*/"icache.ifetch_stall", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*85.04*/"itlb_misses.walk_duration", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*87.01*/"ild_stall.lcp", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE}, // Intel SDM says these are stalls, not cycles
+ {/*87.04*/"ild_stall.iq_full", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*9c.xx*/"idq_uops_not_delivered.cycles_0_uops_deliv.core", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*9c.xx*/"idq_uops_not_delivered.cycles_le_1_uop_deliv.core", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*9c.xx*/"idq_uops_not_delivered.cycles_le_2_uop_deliv.core", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*9c.xx*/"idq_uops_not_delivered.cycles_le_3_uop_deliv.core", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ // {/*9c.01*/"idq_uops_not_delivered.cycles_ge_1_uop_deliv.core", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*9c.01*/"idq_uops_not_delivered.cycles_fe_was_ok", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+
+ {/*a1.01*/"uops_executed_port.port_0", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a1.02*/"uops_executed_port.port_1", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a1.04*/"uops_executed_port.port_2", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a1.08*/"uops_executed_port.port_3", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a1.10*/"uops_executed_port.port_4", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a1.20*/"uops_executed_port.port_5", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a1.40*/"uops_executed_port.port_6", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a1.80*/"uops_executed_port.port_7", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a1.01*/"uops_executed_port.port_0_core", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a1.02*/"uops_executed_port.port_1_core", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a1.04*/"uops_executed_port.port_2_core", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a1.08*/"uops_executed_port.port_3_core", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a1.10*/"uops_executed_port.port_4_core", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a1.20*/"uops_executed_port.port_5_core", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a1.40*/"uops_executed_port.port_6_core", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a1.80*/"uops_executed_port.port_7_core", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+
+ {/*a2.01*/"resource_stalls.any", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a2.04*/"resource_stalls.rs", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a2.08*/"resource_stalls.sb", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a2.10*/"resource_stalls.rob", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+
+ {/*a3.01*/"cycle_activity.cycles_l2_pending_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ // {/*a3.01*/"cycle_activity.cycles_l2_pending", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a3.02*/"cycle_activity.cycles_ldm_pending_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ // {/*a3.05*/"cycle_activity.stalls_l2_pending", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a3.08*/"cycle_activity.cycles_l1d_pending_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ // {/*a3.??*/"cycle_activity.cycles_no_execute", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ // {/*a3.??*/"cycle_activity.stalls_ldm_pending",/*?*/ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+
+ {/*ab.02*/"dsb2mite_switches.penalty_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+
+ {/*b1.??*/"uops_executed.stall_cycles", /*? not in PRM*/ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*b1.??*/"uops_executed.cycles_ge_1_uop_exec", /*?*/ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*b1.??*/"uops_executed.cycles_ge_2_uops_exec", /*?*/ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*b1.??*/"uops_executed.cycles_ge_3_uops_exec", /*?*/ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*b1.??*/"uops_executed.cycles_ge_4_uops_exec", /*?*/ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+
+ {/*c2.01*/"uops_retired.stall_cycles", /*cmask==1 + INV*/ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*c2.01*/"uops_retired.total_cycles", /*cmask==0x1*/ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*c2.01*/"uops_retired.core_stall_cycles", /*PEBS Any==1*/ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+
+ {/*c3.01*/"machine_clears.cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+
+ {/*ca.1e*/"fp_assist.any", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+
+ {/*cd.01*/"mem_trans_retired.load_latency", /*PEBS*/ NULL, REGNO_ANY, NULL, PRELOADS_4, 65, ABST_EXACT_PEBS_PLUS1}, //non-standard overflow
+
+ /* "Architectural" events: */
+ {/*3c*/"unhalted-core-cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ PERF_EVENTS_SW_EVENT_DEFS
+
+ /* additional (hidden) aliases for convenience */
+#if 0
+ USE_INTEL_REF_CYCLES (100),
+#endif
+ {"insts0", "inst_retired.any_p", 0, NULL, PRELOADS_8, 0, ABST_NONE},
+ {"insts1", "inst_retired.any_p", 1, NULL, PRELOADS_8, 0, ABST_NONE},
+ {NULL, NULL, 0, NULL, 0, 0, 0, 0, ABST_NONE}
+};
+
+
+static Hwcentry intelBroadwellList[] = {
+ /* see comments for "cycles" and "insts" for intelNehalemList */
+ PERF_EVENTS_SW_EVENT_ALIASES
+ USE_INTEL_REF_CYCLES (100)
+ {"cycles", "cpu_clk_unhalted.thread_p", REGNO_ANY, STXT ("CPU Cycles"), PRELOADS_75, 1, ABST_NONE},
+ {"insts", "inst_retired.any_p", REGNO_ANY, STXT ("Instructions Executed"), PRELOADS_75, 0, ABST_NONE},
+
+ // PEBS (sampling)
+ {"l2m_latency", "mem_trans_retired.load_latency", REGNO_ANY, STXT ("L2 Cache Miss Est. Latency"), PRELOADS_4, 65, ABST_EXACT_PEBS_PLUS1},
+ {/*cd.01*/"mem_trans_retired.load_latency", NULL, REGNO_ANY, NULL, PRELOADS_4, 65, ABST_EXACT_PEBS_PLUS1},
+
+ // aliases (the first set are PEBS, but on Intel the only precise counter we support is l2m_latency)
+ {"dch", "mem_load_uops_retired.l1_hit", REGNO_ANY, STXT ("L1 D-cache Hits"), PRELOADS_7, 0, ABST_NONE},
+ {"dcm", "mem_load_uops_retired.l1_miss", REGNO_ANY, STXT ("L1 D-cache Misses"), PRELOADS_65, 0, ABST_NONE},
+ {"l2h", "mem_load_uops_retired.l2_hit", REGNO_ANY, STXT ("L2 Cache Hits"), PRELOADS_65, 0, ABST_NONE},
+ {"l2m", "mem_load_uops_retired.l2_miss", REGNO_ANY, STXT ("L2 Cache Misses"), PRELOADS_6, 0, ABST_NONE},
+ {"l3h", "mem_load_uops_retired.l3_hit", REGNO_ANY, STXT ("L3 Cache Hits"), PRELOADS_6, 0, ABST_NONE},
+ {"l3m", "mem_load_uops_retired.l3_miss", REGNO_ANY, STXT ("L3 Cache Misses"), PRELOADS_5, 0, ABST_NONE},
+ {"dtlbm", "dtlb_load_misses.walk_completed", REGNO_ANY, STXT ("DTLB Misses"), PRELOADS_6, 0, ABST_NONE},
+
+ // counters that can be time converted (add FFCs if we decide to support them)
+ // counters that are load-store (did not include any... do we want to?)
+ {/*08.10*/"dtlb_load_misses.walk_duration", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*0d.03*/"int_misc.recovery_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*0e.01*/"uops_issued.stall_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*0e.01*/"uops_issued.core_stall_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*14.01*/"arith.fpu_div_active", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*3c.00*/"cpu_clk_unhalted.thread_p_any", NULL, REGNO_ANY, NULL, PRELOADS_75, 1, ABST_NONE},
+ {/*3c.00*/"cpu_clk_unhalted.thread_p", NULL, REGNO_ANY, NULL, PRELOADS_75, 1, ABST_NONE},
+ {/*3c.02*/"cpu_clk_thread_unhalted.one_thread_active", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*48.01*/"l1d_pend_miss.pending_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*48.01*/"l1d_pend_miss.pending_cycles_any", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*49.10*/"dtlb_store_misses.walk_duration", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*4f.10*/"ept.walk_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*5c.01*/"cpl_cycles.ring0", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*5c.01*/"cpl_cycles.ring0_trans", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*5c.02*/"cpl_cycles.ring123", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*5e.01*/"rs_events.empty_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*60.01*/"offcore_requests_outstanding.cycles_with_demand_data_rd", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*60.02*/"offcore_requests_outstanding.demand_code_rd_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*60.04*/"offcore_requests_outstanding.demand_rfo_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*60.08*/"offcore_requests_outstanding.cycles_with_data_rd", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*63.01*/"lock_cycles.split_lock_uc_lock_duration", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*63.02*/"lock_cycles.cache_lock_duration", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*79.02*/"idq.empty", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*79.04*/"idq.mite_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*79.08*/"idq.dsb_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*79.10*/"idq.ms_dsb_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*79.18*/"idq.all_dsb_cycles_4_uops", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*79.18*/"idq.all_dsb_cycles_any_uops", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*79.24*/"idq.all_mite_cycles_4_uops", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*79.24*/"idq.all_mite_cycles_any_uops", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*79.30*/"idq.ms_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*85.10*/"itlb_misses.walk_duration", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*9c.xx*/"idq_uops_not_delivered.cycles_0_uops_deliv.core", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*9c.xx*/"idq_uops_not_delivered.cycles_le_1_uop_deliv.core", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*9c.xx*/"idq_uops_not_delivered.cycles_le_2_uop_deliv.core", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*9c.xx*/"idq_uops_not_delivered.cycles_le_3_uop_deliv.core", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*9c.01*/"idq_uops_not_delivered.cycles_fe_was_ok", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a1.01*/"uops_executed_port.port_0", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a1.02*/"uops_executed_port.port_1", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a1.04*/"uops_executed_port.port_2", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a1.08*/"uops_executed_port.port_3", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a1.10*/"uops_executed_port.port_4", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a1.20*/"uops_executed_port.port_5", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a1.40*/"uops_executed_port.port_6", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a1.80*/"uops_executed_port.port_7", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a1.01*/"uops_executed_port.port_0_core", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a1.02*/"uops_executed_port.port_1_core", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a1.04*/"uops_executed_port.port_2_core", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a1.08*/"uops_executed_port.port_3_core", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a1.10*/"uops_executed_port.port_4_core", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a1.20*/"uops_executed_port.port_5_core", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a1.40*/"uops_executed_port.port_6_core", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a1.80*/"uops_executed_port.port_7_core", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a2.01*/"resource_stalls.any", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a2.04*/"resource_stalls.rs", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a2.08*/"resource_stalls.sb", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a2.10*/"resource_stalls.rob", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a3.01*/"cycle_activity.cycles_l2_pending", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a3.02*/"cycle_activity.cycles_ldm_pending", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a3.04*/"cycle_activity.cycles_no_execute", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a3.08*/"cycle_activity.cycles_l1d_pending", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a8.01*/"lsd.cycles_active", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a8.01*/"lsd.cycles_4_uops", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*ab.02*/"dsb2mite_switches.penalty_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*b1.01*/"uops_executed.stall_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*c2.01*/"uops_retired.stall_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*c2.01*/"uops_retired.total_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*c2.01*/"uops_retired.core_stall_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*c3.01*/"machine_clears.cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*ca.1e*/"fp_assist.any", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+
+ /* "Architectural" events: */
+ {/*3c*/"unhalted-core-cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ PERF_EVENTS_SW_EVENT_DEFS
+
+ /* additional (hidden) aliases for convenience */
+#if 0
+ USE_INTEL_REF_CYCLES (100),
+#endif
+ {"insts0", "inst_retired.any_p", 0, NULL, PRELOADS_8, 0, ABST_NONE},
+ {"insts1", "inst_retired.any_p", 1, NULL, PRELOADS_8, 0, ABST_NONE},
+ {NULL, NULL, 0, NULL, 0, 0, 0, 0, ABST_NONE}
+};
+
+static Hwcentry intelSkylakeList[] = {
+ /* see comments for "cycles" and "insts" for intelNehalemList */
+ PERF_EVENTS_SW_EVENT_ALIASES
+ USE_INTEL_REF_CYCLES (25)
+ {"cycles", "cpu_clk_unhalted.thread_p", REGNO_ANY, STXT ("CPU Cycles"), PRELOADS_75, 1, ABST_NONE},
+ {"insts", "inst_retired.any_p", REGNO_ANY, STXT ("Instructions Executed"), PRELOADS_75, 0, ABST_NONE},
+
+ // PEBS (sampling)
+ {"l2m_latency", "mem_trans_retired.load_latency", REGNO_ANY, STXT ("L2 Cache Miss Est. Latency"), PRELOADS_4, 65, ABST_EXACT_PEBS_PLUS1},
+ {/*cd.01*/"mem_trans_retired.load_latency", NULL, REGNO_ANY, NULL, PRELOADS_4, 65, ABST_EXACT_PEBS_PLUS1},
+
+ // aliases (the first set are PEBS, but on Intel the only precise counter we support is l2m_latency)
+ {"dch", "mem_load_retired.l1_hit", REGNO_ANY, STXT ("L1 D-cache Hits"), PRELOADS_7, 0, ABST_NONE},
+ {"dcm", "mem_load_retired.l1_miss", REGNO_ANY, STXT ("L1 D-cache Misses"), PRELOADS_65, 0, ABST_NONE},
+ {"l2h", "mem_load_retired.l2_hit", REGNO_ANY, STXT ("L2 Cache Hits"), PRELOADS_65, 0, ABST_NONE},
+ {"l2m", "mem_load_retired.l2_miss", REGNO_ANY, STXT ("L2 Cache Misses"), PRELOADS_6, 0, ABST_NONE},
+ {"l2m_stall", "cycle_activity.stalls_l2_miss", REGNO_ANY, STXT ("L2 Cache Miss Stall"), PRELOADS_7, 1, ABST_NONE}, // needs validation
+ {"l3h", "mem_load_retired.l3_hit", REGNO_ANY, STXT ("L3 Cache Hits"), PRELOADS_6, 0, ABST_NONE},
+ {"l3m", "mem_load_retired.l3_miss", REGNO_ANY, STXT ("L3 Cache Misses"), PRELOADS_5, 0, ABST_NONE},
+ {"l3m_stall", "cycle_activity.stalls_l3_miss", REGNO_ANY, STXT ("L3 Cache Miss Stall"), PRELOADS_7, 1, ABST_NONE}, // needs validation
+ {"dtlbm_stall", "dtlb_load_misses.walk_active", REGNO_ANY, STXT ("DTLB Miss Est Stall"), PRELOADS_7, 1, ABST_NONE, STXT ("Estimated time stalled on DTLB misses requiring a tablewalk. Does not include time related to STLB hits.")}, // needs validation
+ // PEBS mem_inst_retired.stlb_miss_loads for finding location of DTLB issues
+ // what about: dtlb_load_misses.walk_completed, dtlb_load_misses.walk_pending, dtlb_load_misses.stlb_hit
+
+ {"fp_scalar", "fp_arith_inst_retired.scalar_double~umask=0x3", REGNO_ANY, STXT ("FP Scalar uOps"), PRELOADS_7, 0, ABST_NONE, STXT ("Floating-point scalar micro-ops that retired")},
+ {"fp_vector", "fp_arith_inst_retired.128b_packed_double~umask=0x3c", REGNO_ANY, STXT ("FP Vector uOps"), /*needs test*/ PRELOADS_7, 0, ABST_NONE, STXT ("Floating-point vector micro-ops that retired")},
+
+ // counters that can be time converted (add FFCs if we decide to support them)
+ // counters that are load-store (did not include any... do we want to?)
+ {/*08.10*/"dtlb_load_misses.walk_active", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*08.10*/"dtlb_load_misses.walk_pending", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*0d.01*/"int_misc.recovery_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*0d.01*/"int_misc.recovery_cycles_any", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*0d.80*/"int_misc.clear_resteer_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*0e.01*/"uops_issued.stall_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*14.01*/"arith.divider_active", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*3c.00*/"cpu_clk_unhalted.ring0_trans", NULL, REGNO_ANY, NULL, PRELOADS_75, 1, ABST_NONE},
+ {/*3c.00*/"cpu_clk_unhalted.thread_p_any", NULL, REGNO_ANY, NULL, PRELOADS_75, 1, ABST_NONE},
+ {/*3c.00*/"cpu_clk_unhalted.thread_p", NULL, REGNO_ANY, NULL, PRELOADS_75, 1, ABST_NONE},
+ {/*3c.00*/"cpu_clk_unhalted.core", NULL, REGNO_ANY, NULL, PRELOADS_75, 1, ABST_NONE},
+ {/*48.01*/"l1d_pend_miss.pending_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*48.01*/"l1d_pend_miss.pending_cycles_any", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*49.10*/"dtlb_store_misses.walk_active", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*49.10*/"dtlb_store_misses.walk_pending", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*4f.10*/"ept.walk_pending", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*5e.01*/"rs_events.empty_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*60.01*/"offcore_requests_outstanding.cycles_with_demand_data_rd", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*60.01*/"offcore_requests_outstanding.demand_data_rd_ge_6", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*60.02*/"offcore_requests_outstanding.cycles_with_demand_code_rd", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*60.04*/"offcore_requests_outstanding.cycles_with_demand_rfo", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*60.08*/"offcore_requests_outstanding.cycles_with_data_rd", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*60.10*/"offcore_requests_outstanding.cycles_with_l3_miss_demand_data_rd", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*60.10*/"offcore_requests_outstanding.l3_miss_demand_data_rd_ge_6", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*63.02*/"lock_cycles.cache_lock_duration", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*79.04*/"idq.mite_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*79.08*/"idq.dsb_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*79.10*/"idq.ms_dsb_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*79.18*/"idq.all_dsb_cycles_4_uops", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*79.18*/"idq.all_dsb_cycles_any_uops", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*79.24*/"idq.all_mite_cycles_4_uops", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*79.24*/"idq.all_mite_cycles_any_uops", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*79.30*/"idq.ms_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*80.04*/"icache_16b.ifdata_stall", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*83.04*/"icache_64b.iftag_stall", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*85.10*/"itlb_misses.walk_active", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*85.10*/"itlb_misses.walk_pending", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*87.01*/"ild_stall.lcp", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*9c.01*/"idq_uops_not_delivered.cycles_0_uops_deliv.core", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*9c.01*/"idq_uops_not_delivered.cycles_le_1_uop_deliv.core", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*9c.01*/"idq_uops_not_delivered.cycles_le_2_uop_deliv.core", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*9c.01*/"idq_uops_not_delivered.cycles_le_3_uop_deliv.core", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*9c.01*/"idq_uops_not_delivered.cycles_fe_was_ok", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a1.01*/"uops_dispatched_port.port_0", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a1.02*/"uops_dispatched_port.port_1", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a1.04*/"uops_dispatched_port.port_2", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a1.08*/"uops_dispatched_port.port_3", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a1.10*/"uops_dispatched_port.port_4", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a1.20*/"uops_dispatched_port.port_5", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a1.40*/"uops_dispatched_port.port_6", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a1.80*/"uops_dispatched_port.port_7", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a2.01*/"resource_stalls.any", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a2.08*/"resource_stalls.sb", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a3.01*/"cycle_activity.cycles_l2_miss", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a3.02*/"cycle_activity.cycles_l3_miss", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a3.04*/"cycle_activity.stalls_total", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a3.05*/"cycle_activity.stalls_l2_miss", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a3.06*/"cycle_activity.stalls_l3_miss", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a3.08*/"cycle_activity.cycles_l1d_miss", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a3.0c*/"cycle_activity.stalls_l1d_miss", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a3.10*/"cycle_activity.cycles_mem_any", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a3.14*/"cycle_activity.stalls_mem_any", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a6.01*/"exe_activity.exe_bound_0_ports", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a6.02*/"exe_activity.1_ports_util", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a6.04*/"exe_activity.2_ports_util", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a6.08*/"exe_activity.3_ports_util", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a6.10*/"exe_activity.4_ports_util", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a6.40*/"exe_activity.bound_on_stores", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a8.01*/"lsd.cycles_4_uops", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*a8.01*/"lsd.cycles_active", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*ab.02*/"dsb2mite_switches.penalty_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*b1.01*/"uops_executed.cycles_ge_1_uop_exec", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*b1.01*/"uops_executed.cycles_ge_2_uops_exec", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*b1.01*/"uops_executed.cycles_ge_3_uops_exec", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*b1.01*/"uops_executed.cycles_ge_4_uops_exec", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*b1.01*/"uops_executed.stall_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*b1.02*/"uops_executed.core_cycles_ge_1", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*b1.02*/"uops_executed.core_cycles_ge_2", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*b1.02*/"uops_executed.core_cycles_ge_3", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*b1.02*/"uops_executed.core_cycles_ge_4", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*b1.02*/"uops_executed.core_cycles_none", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*c0.1*/"inst_retired.total_cycles_ps", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*c2.01*/"uops_retired.stall_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*c2.01*/"uops_retired.total_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*ca.1e*/"fp_assist.any", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+
+ /* "Architectural" events: */
+ {/* FFC */"cpu_clk_unhalted.thread", NULL, REGNO_ANY, NULL, PRELOADS_75, 1, ABST_NONE},
+ {/* FFC */"unhalted-core-cycles", NULL, REGNO_ANY, NULL, PRELOADS_75, 1, ABST_NONE},
+ PERF_EVENTS_SW_EVENT_DEFS
+
+ /* additional (hidden) aliases for convenience */
+#if 0
+ USE_INTEL_REF_CYCLES (25),
+#endif
+ {"insts0", "inst_retired.any_p", 0, NULL, PRELOADS_8, 0, ABST_NONE},
+ {"insts1", "inst_retired.any_p", 1, NULL, PRELOADS_8, 0, ABST_NONE},
+ {NULL, NULL, 0, NULL, 0, 0, 0, 0, ABST_NONE}
+};
+
+static Hwcentry intelLinuxUnknown[] = {
+ PERF_EVENTS_SW_EVENT_ALIASES
+ // USE_INTEL_REF_CYCLES(100) // freq is unknown
+ {"cycles", "unhalted-core-cycles", REGNO_ANY, STXT ("CPU Cycles"), PRELOADS_75, 1, ABST_NONE},
+ {"cycles", "PERF_COUNT_HW_CPU_CYCLES", REGNO_ANY, STXT ("CPU Cycles"), PRELOADS_75, 1, ABST_NONE},
+ {"insts", "instruction-retired", REGNO_ANY, STXT ("Instructions Executed"), PRELOADS_75, 0, ABST_NONE},
+ {"insts", "PERF_COUNT_HW_INSTRUCTIONS", REGNO_ANY, STXT ("Instructions Executed"), PRELOADS_75, 0, ABST_NONE},
+
+ {"dcm", "PERF_COUNT_HW_CACHE_MISSES.L1D", REGNO_ANY, STXT ("L1 D-cache Misses"), PRELOADS_65, 0, ABST_NONE},
+ {"llm", "llc-misses", REGNO_ANY, STXT ("Last-Level Cache Misses"), PRELOADS_5, 0, ABST_NONE},
+ {"llm", "PERF_COUNT_HW_CACHE_MISSES.LL", REGNO_ANY, STXT ("Last-Level Cache Misses"), PRELOADS_5, 0, ABST_NONE},
+
+ {"br_msp", "branch-misses-retired", REGNO_ANY, STXT ("Branch Mispredict"), PRELOADS_6, 0, ABST_NONE},
+ {"br_msp", "PERF_COUNT_HW_BRANCH_MISSES", REGNO_ANY, STXT ("Branch Mispredict"), PRELOADS_6, 0, ABST_NONE},
+ {"br_ins", "branch-instruction-retired", REGNO_ANY, STXT ("Branch Instructions"), PRELOADS_7, 0, ABST_NONE},
+ {"br_ins", "PERF_COUNT_HW_BRANCH_INSTRUCTIONS", REGNO_ANY, STXT ("Branch Instructions"), PRELOADS_7, 0, ABST_NONE},
+
+ // counters that can be time converted (add FFCs if we decide to support them)
+ // counters that are load-store (did not include any... do we want to?)
+ /* "Architectural" events: */
+ {/* FFC */"cpu_clk_unhalted.thread", NULL, REGNO_ANY, NULL, PRELOADS_75, 1, ABST_NONE},
+ {/* FFC */"unhalted-core-cycles", NULL, REGNO_ANY, NULL, PRELOADS_75, 1, ABST_NONE},
+ PERF_EVENTS_SW_EVENT_DEFS
+
+ /* additional (hidden) aliases for convenience */
+ {"cycles0", "unhalted-reference-cycles", 0, NULL, PRELOADS_6, -(25), ABST_NONE}, //YXXX -can't do with ref cycles #
+ {"cycles0", "PERF_COUNT_HW_BUS_CYCLES", 0, NULL, PRELOADS_6, -(25), ABST_NONE}, //YXXX -can't do with ref cycles #
+ {"cycles1", "unhalted-reference-cycles", 1, NULL, PRELOADS_65, -(25), ABST_NONE}, //YXXX - can't do with ref cycles #
+ {"cycles1", "PERF_COUNT_HW_BUS_CYCLES", 1, NULL, PRELOADS_65, -(25), ABST_NONE}, //YXXX - can't do with ref cycles #
+ {"insts0", "instruction-retired", 0, NULL, PRELOADS_8, 0, ABST_NONE},
+ {"insts0", "PERF_COUNT_HW_INSTRUCTIONS", 0, NULL, PRELOADS_8, 0, ABST_NONE},
+ {"insts1", "instruction-retired", 1, NULL, PRELOADS_8, 0, ABST_NONE},
+ {"insts1", "PERF_COUNT_HW_INSTRUCTIONS", 1, NULL, PRELOADS_8, 0, ABST_NONE},
+ {NULL, NULL, 0, NULL, 0, 0, 0, 0, ABST_NONE}
+};
+
+static Hwcentry intelAtomList[] = {
+ {"cycles", "cpu_clk_unhalted.core", /*6759307*/ REGNO_ANY, STXT ("CPU Cycles"), PRELOADS_7, 1, ABST_NONE},
+ {"cycles", "cpu_clk_unhalted.thread", /*6759307*/ REGNO_ANY, STXT ("CPU Cycles"), PRELOADS_7, 1, ABST_NONE},
+ {"insts", "instr_retired.any", REGNO_ANY, STXT ("Instructions Executed"), PRELOADS_7, 0, ABST_NONE},
+
+ /* explicit definitions of (hidden) entries for proper counters */
+ /* Only counters that can be time converted, or are load-store need to be in this table */
+ /* XXXX add core2-related entries if appropriate */
+ {/*30A*/"cpu_clk_unhalted.core", /*6759307*/ NULL, REGNO_ANY, NULL, PRELOADS_7, 1, ABST_NONE},
+ {/*30A*/"cpu_clk_unhalted.thread", /*6759307*/ NULL, REGNO_ANY, NULL, PRELOADS_7, 1, ABST_NONE},
+ {/*0c*/"page_walks.cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*14*/"cycles_div_busy", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*21*/"l2_ads", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*22*/"l2_dbus_busy", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*32*/"l2_no_req", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*3c*/"cpu_clk_unhalted.core_p", NULL, REGNO_ANY, NULL, PRELOADS_7, 1, ABST_NONE},
+ {/*3c*/"cpu_clk_unhalted.bus", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*3c*/"cpu_clk_unhalted.no_other", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*62*/"bus_drdy_clocks", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*63*/"bus_lock_clocks", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*64*/"bus_data_rcv", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*7a*/"bus_hit_drv", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*7b*/"bus_hitm_drv", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*7d*/"busq_empty", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*7e*/"snoop_stall_drv", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*7f*/"bus_io_wait", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*c6*/"cycles_int_masked.cycles_int_masked", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*c6*/"cycles_int_masked.cycles_int_pending_and_masked", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+
+ /* "Architectural" events: */
+ {/*3c*/"unhalted-core-cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+
+ /* additional (hidden) aliases for convenience */
+ {"cycles0", "cpu_clk_unhalted.core_p", 0, NULL, PRELOADS_75, 1, ABST_NONE},
+ {"cycles1", "cpu_clk_unhalted.core_p", 1, NULL, PRELOADS_75, 1, ABST_NONE},
+ {"insts0", "inst_retired.any_p", 0, NULL, PRELOADS_75, 0, ABST_NONE},
+ {"insts1", "inst_retired.any_p", 1, NULL, PRELOADS_75, 0, ABST_NONE},
+ {NULL, NULL, 0, NULL, 0, 0, 0, 0, ABST_NONE}
+};
+
+static Hwcentry amd_opteron_10h_11h[] = {
+ {"cycles", "BU_cpu_clk_unhalted", REGNO_ANY, STXT ("CPU Cycles"), PRELOADS_75, 1, ABST_NONE},
+ {"insts", "FR_retired_x86_instr_w_excp_intr", REGNO_ANY, STXT ("Instructions Executed"), PRELOADS_75, 0, ABST_NONE},
+ {"icr", "IC_fetch", REGNO_ANY, STXT ("L1 I-cache Refs"), PRELOADS_7, 0, ABST_NONE}, /* new */
+ {"icm", "IC_miss", REGNO_ANY, STXT ("L1 I-cache Misses"), PRELOADS_6, 0, ABST_NONE},
+ {"l2itlbh", "IC_itlb_L1_miss_L2_hit", REGNO_ANY, STXT ("L2 ITLB Hits"), PRELOADS_6, 0, ABST_NONE}, /* new */
+ {"l2itlbm", "IC_itlb_L1_miss_L2_miss", REGNO_ANY, STXT ("L2 ITLB Misses"), PRELOADS_5, 0, ABST_NONE}, /* new */
+ {"l2ir", "BU_internal_L2_req~umask=0x1", REGNO_ANY, STXT ("L2 I-cache Refs"), PRELOADS_6, 0, ABST_NONE},
+ {"l2im", "BU_fill_req_missed_L2~umask=0x1", REGNO_ANY, STXT ("L2 I-cache Misses"), PRELOADS_4, 0, ABST_NONE},
+ {"dcr", "DC_access", REGNO_ANY, STXT ("L1 D-cache Refs"), PRELOADS_7, 0, ABST_NONE}, /* new */
+ {"dcm", "DC_miss", REGNO_ANY, STXT ("L1 D-cache Misses"), PRELOADS_65, 0, ABST_NONE}, /* new */
+ {"l2dtlbh", "DC_dtlb_L1_miss_L2_hit", REGNO_ANY, STXT ("L2 DTLB Hits"), PRELOADS_6, 0, ABST_NONE}, /* new */
+ {"l2dtlbm", "DC_dtlb_L1_miss_L2_miss", REGNO_ANY, STXT ("L2 DTLB Misses"), PRELOADS_5, 0, ABST_NONE}, /* new */
+ {"l2dr", "BU_internal_L2_req~umask=0x2", REGNO_ANY, STXT ("L2 D-cache Refs"), PRELOADS_65, 0, ABST_NONE}, /* hwc_cache_load: 1.6x overcount on shanghai01 */
+ {"l2dm", "BU_fill_req_missed_L2~umask=0x2", REGNO_ANY, STXT ("L2 D-cache Misses"), PRELOADS_6, 0, ABST_NONE}, /* new */
+ {"fpadd", "FP_dispatched_fpu_ops~umask=0x1", REGNO_ANY, STXT ("FP Adds"), PRELOADS_7, 0, ABST_NONE},
+ {"fpmul", "FP_dispatched_fpu_ops~umask=0x2", REGNO_ANY, STXT ("FP Muls"), PRELOADS_7, 0, ABST_NONE},
+ {"fpustall", "FR_dispatch_stall_fpu_full", REGNO_ANY, STXT ("FPU Stall Cycles"), PRELOADS_7, 1, ABST_NONE},
+ {"memstall", "FR_dispatch_stall_ls_full", REGNO_ANY, STXT ("Memory Unit Stall Cycles"), PRELOADS_7, 1, ABST_NONE},
+ // For PAPI mappings, see hwctable.README.family10h
+ // For PAPI mappings, see hwctable.README.opteron
+
+ /* explicit definitions of (hidden) entries for proper counters */
+ /* Only counters that can be time converted, or are load-store need to be in this table */
+ {"BU_cpu_clk_unhalted", NULL, REGNO_ANY, NULL, PRELOADS_75, 1, ABST_NONE},
+ {"FP_cycles_no_fpu_ops_retired", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"FP_serialize_ops_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"FR_dispatch_stall_branch_abort_to_retire", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_TBD},
+ {"FR_dispatch_stall_far_ctl_trsfr_resync_branch_pend", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_TBD},
+ {"FR_dispatch_stall_fpu_full", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_TBD},
+ {"FR_dispatch_stall_ls_full", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_TBD},
+ {"FR_dispatch_stall_reorder_buffer_full", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_TBD},
+ {"FR_dispatch_stall_resv_stations_full", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_TBD},
+ {"FR_dispatch_stall_segment_load", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_TBD},
+ {"FR_dispatch_stall_serialization", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_TBD},
+ {"FR_dispatch_stall_waiting_all_quiet", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_TBD},
+ {"FR_dispatch_stalls", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_TBD},
+ {"FR_intr_masked_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_TBD},
+ {"FR_intr_masked_while_pending_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_TBD},
+ {"FR_nothing_to_dispatch", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_TBD},
+ {"IC_instr_fetch_stall", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_TBD},
+ {"LS_buffer_2_full", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_TBD},
+ {"NB_mem_ctrlr_dram_cmd_slots_missed", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {"NB_mem_ctrlr_turnaround", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_TBD},
+
+ /* additional (hidden) aliases, for convenience */
+ {"cycles0", "BU_cpu_clk_unhalted", 0, NULL, PRELOADS_8, 1, ABST_NONE},
+ {"cycles1", "BU_cpu_clk_unhalted", 1, NULL, PRELOADS_8, 1, ABST_NONE},
+ {"insts0", "FR_retired_x86_instr_w_excp_intr", 0, NULL, PRELOADS_8, 0, ABST_NONE},
+ {"insts1", "FR_retired_x86_instr_w_excp_intr", 1, NULL, PRELOADS_8, 0, ABST_NONE},
+ {NULL, NULL, 0, NULL, 0, 0, 0, 0, ABST_NONE}
+};
+
+static Hwcentry amd_15h[] = {
+ {"cycles", "CU_cpu_clk_unhalted", REGNO_ANY, STXT ("CPU Cycles"), PRELOADS_75, 1, ABST_NONE},
+ {"insts", "EX_retired_instr_w_excp_intr", REGNO_ANY, STXT ("Instructions Executed"), PRELOADS_75, 0, ABST_NONE},
+ {"icr", "IC_fetch", REGNO_ANY, STXT ("L1 I-cache Refs"), PRELOADS_7, 0, ABST_NONE}, /* new */
+ {"icm", "IC_miss", REGNO_ANY, STXT ("L1 I-cache Misses"), PRELOADS_6, 0, ABST_NONE},
+ {"l2im", "IC_refill_from_system", REGNO_ANY, STXT ("L2 I-cache Misses"), PRELOADS_6, 0, ABST_NONE},
+ {"dcr", "DC_access", REGNO_ANY, STXT ("L1 D-cache Refs"), PRELOADS_7, 0, ABST_NONE}, /* new */
+ {"dcm", "DC_miss~umask=0x3", REGNO_ANY, STXT ("L1 D-cache Misses"), PRELOADS_65, 0, ABST_NONE}, /* new */
+ {"l2dm", "DC_refill_from_system", REGNO_ANY, STXT ("L2 D-cache Misses"), PRELOADS_6, 0, ABST_NONE}, /* new */
+ {"dtlbm", "DC_unified_tlb_miss~umask=0x7", REGNO_ANY, STXT ("L2 DTLB Misses"), PRELOADS_5, 0, ABST_NONE}, /* new */
+ // For PAPI mappings, see hwctable.README.family15h
+
+ /* explicit definitions of (hidden) entries for proper counters */
+ /* Only counters that can be time converted, or are load-store need to be in this table */
+ {/*001.xx*/"FP_scheduler_empty", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*006.xx*/"FP_bottom_execute_uops_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*023.xx*/"LS_ldq_stq_full", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*024.xx*/"LS_locked_operation", /*umask!=0*/ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*069.xx*/"CU_mab_wait_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*076.xx*/"CU_cpu_clk_unhalted", NULL, REGNO_ANY, NULL, PRELOADS_75, 1, ABST_NONE},
+ {/*087.xx*/"IC_instr_fetch_stall", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*0cd.xx*/"EX_intr_masked_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*0ce.xx*/"EX_intr_masked_while_pending_cycles", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*0d0.xx*/"DE_nothing_to_dispatch", /*future*/ NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*0d1.xx*/"DE_dispatch_stalls", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*0d3.xx*/"DE_dispatch_stall_serialization", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*0d5.xx*/"DE_dispatch_stall_instr_retire_q_full", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*0d6.xx*/"DE_dispatch_stall_int_scheduler_q_full", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*0d7.xx*/"DE_dispatch_stall_fp_scheduler_q_full", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*0d8.xx*/"DE_dispatch_stall_ldq_full", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*0d9.xx*/"DE_dispatch_stall_waiting_all_quiet", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+ {/*1d8.xx*/"EX_dispatch_stall_stq_full", NULL, REGNO_ANY, NULL, PRELOAD_DEF, 1, ABST_NONE},
+
+ /* additional (hidden) aliases, for convenience */
+ {"cycles0", "CU_cpu_clk_unhalted", 0, NULL, PRELOADS_8, 1, ABST_NONE},
+ {"cycles1", "CU_cpu_clk_unhalted", 1, NULL, PRELOADS_8, 1, ABST_NONE},
+ {"insts0", "EX_retired_instr_w_excp_intr", 0, NULL, PRELOADS_8, 0, ABST_NONE},
+ {"insts1", "EX_retired_instr_w_excp_intr", 1, NULL, PRELOADS_8, 0, ABST_NONE},
+ {NULL, NULL, 0, NULL, 0, 0, 0, 0, ABST_NONE}
+};
+
+#define USE_ARM_REF_CYCLES \
+ {"usr_time","cycles", REGNO_ANY, STXT("User CPU"), PRELOADS_85, 1, ABST_NONE}, \
+ {"sys_time","cycles~system=1~user=0", REGNO_ANY, STXT("System CPU"), PRELOADS_85, 1, ABST_NONE}, \
+
+static Hwcentry armlist[] = {
+ USE_ARM_REF_CYCLES
+// Hardware event:
+ {"branch-instructions", NULL, REGNO_ANY, STXT("Branch-instructions"), PRELOADS_35, 0, ABST_NONE},
+ {"branch-misses", NULL, REGNO_ANY, STXT("Branch-misses"), PRELOADS_35, 0, ABST_NONE},
+ {"bus-cycles", NULL, REGNO_ANY, STXT("Bus Cycles"), PRELOADS_35, 1, ABST_NONE},
+ {"cache-misses", NULL, REGNO_ANY, STXT("Cache-misses"), PRELOADS_35, 0, ABST_NONE},
+ {"cache-references", NULL, REGNO_ANY, STXT("Cache-references"), PRELOADS_35, 0, ABST_NONE},
+ {"cycles", NULL, REGNO_ANY, STXT("CPU Cycles"), PRELOADS_85, 1, ABST_NONE},
+ {"insts", "instructions", REGNO_ANY, STXT("Instructions Executed"), PRELOADS_75, 0, ABST_NONE},
+ {"ref-cycles", NULL, REGNO_ANY, STXT("Total Cycles"), PRELOADS_85, 1, ABST_NONE},
+ {"stalled-cycles-backend", NULL, REGNO_ANY, STXT("Stalled Cycles during issue."), PRELOADS_85, 1, ABST_NONE},
+ {"stalled-cycles-frontend", NULL, REGNO_ANY, STXT("Stalled Cycles during retirement."), PRELOADS_85, 1, ABST_NONE},
+
+// Software event:
+ {"alignment-faults", NULL, REGNO_ANY, STXT("Alignment Faults"), PRELOADS_85, 0, ABST_NONE},
+ {"context-switches", NULL, REGNO_ANY, STXT("Context Switches"), PRELOADS_85, 0, ABST_NONE},
+ {"cpu-clock", NULL, REGNO_ANY, STXT("CPU Clock"), PRELOADS_85, 1, ABST_NONE},
+ {"cpu-migrations", NULL, REGNO_ANY, STXT("CPU Migrations"), PRELOADS_85, 0, ABST_NONE},
+ {"emulation-faults", NULL, REGNO_ANY, STXT("Emulation Faults"), PRELOADS_85, 0, ABST_NONE},
+ {"major-faults", NULL, REGNO_ANY, STXT("Major Page Faults"), PRELOADS_85, 0, ABST_NONE},
+ {"minor-faults", NULL, REGNO_ANY, STXT("Minor Page Faults"), PRELOADS_85, 0, ABST_NONE},
+ {"page-faults", NULL, REGNO_ANY, STXT("Page Faults"), PRELOADS_85, 0, ABST_NONE},
+ {"task-clock", NULL, REGNO_ANY, STXT("Clock Count Specific"), PRELOADS_85, 1, ABST_NONE},
+
+// Hardware cache event
+ {"L1-dcache-load-misses", NULL, REGNO_ANY, STXT("L1 D-cache Load Misses"), PRELOADS_35, 0, ABST_NONE},
+ {"L1-dcache-loads", NULL, REGNO_ANY, STXT("L1 D-cache Loads"), PRELOADS_35, 0, ABST_NONE},
+ {"L1-dcache-store-misses", NULL, REGNO_ANY, STXT("L1 D-cache Store Misses"), PRELOADS_35, 0, ABST_NONE},
+ {"L1-dcache-stores", NULL, REGNO_ANY, STXT("L1 D-cache Store Stores"), PRELOADS_35, 0, ABST_NONE},
+ {"L1-icache-load-misses", NULL, REGNO_ANY, STXT("L1 Instructions Load Misses"), PRELOADS_35, 0, ABST_NONE},
+ {"L1-icache-load-misses", NULL, REGNO_ANY, STXT("L1 Instructions Loads"), PRELOADS_35, 0, ABST_NONE},
+ {"dTLB-load-misses", NULL, REGNO_ANY, STXT("D-TLB Load Misses"), PRELOADS_35, 0, ABST_NONE},
+ {"dTLB-loads", NULL, REGNO_ANY, STXT("D-TLB Loads"), PRELOADS_35, 0, ABST_NONE},
+ {"iTLB-load-misses", NULL, REGNO_ANY, STXT("The Instruction TLB Load Misses"), PRELOADS_35, 0, ABST_NONE},
+ {"iTLB-loads", NULL, REGNO_ANY, STXT("The Instruction TLB Loads"), PRELOADS_35, 0, ABST_NONE},
+
+ {NULL, NULL, 0, NULL, 0, 0, 0, 0, ABST_NONE}
+};
+
+static Hwcentry unknownlist[] =
+ /* used for unrecognized CPU type */{
+ {NULL, NULL, 0, NULL, 0, 0, 0, 0, ABST_NONE}
+};
+
+/* structure defining the counters for a CPU type */
+typedef struct
+{
+ int cputag;
+ Hwcentry *stdlist_table;
+#define MAX_DEFAULT_HWC_DEFS 4 // allows multiple defs to handle OS variations; extend as needed
+ char *default_exp_p[MAX_DEFAULT_HWC_DEFS + 1]; // end of list MUST be marked with NULL
+} cpu_list_t;
+
+/* IMPORTANT NOTE:
+ *
+ * Any default HWC string must consist of counter names separated by -TWO- commas,
+ * with a no trailing comma/value after the last counter name
+ *
+ * Only aliased counters should be specified; non-aliased counters will
+ * not get the right overflow values set.
+ * If the string is not formatted that way, -h hi and -h lo will fail
+ */
+static cpu_list_t cputabs[] = {
+ {CPC_ULTRA1, usIlist, {NULL}}, /* bind will fail */
+ {CPC_ULTRA2, usIlist, {NULL}}, /* bind will fail */
+ {CPC_ULTRA3, usIIIlist, {"insts,,ecstall", 0}},
+ {CPC_ULTRA3_PLUS, usIIIlist, {"insts,,ecstall", 0}},
+ {CPC_ULTRA3_I, usIIIlist, {"insts,,ecstall", 0}},
+ {CPC_ULTRA4_PLUS, usIVplist, {"insts,,ecstall", 0}},
+ {CPC_ULTRA_T1, niagara1, {"insts", 0}},
+ {CPC_ULTRA_T2, niagara2, {"insts,,+l2drm", 0}},
+ {CPC_ULTRA_T2P, niagara2, {"insts,,+l2drm", 0}},
+ {CPC_ULTRA_T3, niagara2, {"insts,,+l2drm", 0}},
+ {CPC_SPARC_T4, sparc_t4, {"insts,,cycles,,c_stalls,,dcm", "c_stalls", 0}},
+ {CPC_SPARC_M4, sparc_t5_m6, {"insts,,cycles,,c_stalls,,dcm", "c_stalls", 0}}, // renamed to m5
+ {CPC_SPARC_T5, sparc_t5_m6, {"insts,,cycles,,c_stalls,,dcm", "c_stalls", 0}},
+ {CPC_SPARC_M5, sparc_t5_m6, {"insts,,cycles,,c_stalls,,dcm", "c_stalls", 0}},
+ {CPC_SPARC_T6, sparc_t5_m6, {"insts,,cycles,,c_stalls,,dcm", "c_stalls", 0}}, // no such processor
+ {CPC_SPARC_M6, sparc_t5_m6, {"insts,,cycles,,c_stalls,,dcm", "c_stalls", 0}},
+ {CPC_SPARC_M7, sparc_m7, {"insts,,cycles,,c_stalls,,dcm", "c_stalls", 0}}, // includes T7
+ {CPC_SPARC_M8, sparc_m8, {"insts,,cycles,,c_stalls,,dcm", "c_stalls", 0}},
+ {CPC_PENTIUM_PRO_MMX, pentiumIIlist, {"insts", 0}},
+ {CPC_PENTIUM_PRO, pentiumIIIlist, {"insts", 0}},
+ {CPC_PENTIUM_4, pentium4, {"insts", 0}},
+ {CPC_PENTIUM_4_HT, pentium4, {"insts", 0}},
+ {CPC_INTEL_CORE2, intelCore2list, {"insts,,cycles", 0}},
+ {CPC_INTEL_NEHALEM, intelNehalemList, {"insts,,cycles,,+l2m_latency,,dtlbm_stall",
+ "insts,,cycles,,l3m_stall,,dtlbm_stall", 0}},
+ {CPC_INTEL_WESTMERE, intelNehalemList, {"insts,,cycles,,+l2m_latency,,dtlbm_stall",
+ "insts,,cycles,,l3m_stall,,dtlbm_stall", 0}},
+ {CPC_INTEL_SANDYBRIDGE, intelSandyBridgeList, {"insts,,cycles,,+l2m_latency,,dtlbm_stall",
+ "insts,,cycles,,l3m,,dtlbm", 0}},
+ {CPC_INTEL_IVYBRIDGE, intelSandyBridgeList, {"insts,,cycles,,+l2m_latency,,dtlbm_stall",
+ "insts,,cycles,,l3m,,dtlbm", 0}},
+ {CPC_INTEL_HASWELL, intelHaswellList, {"insts,,cycles,,+l2m_latency,,dtlbm_stall",
+ "insts,,cycles,,l3m,,dtlbm", 0}},
+ {CPC_INTEL_BROADWELL, intelBroadwellList, {"insts,,cycles,,+l2m_latency,,dtlbm",
+ "insts,,cycles,,l3m,,dtlbm", 0}},
+ {CPC_INTEL_SKYLAKE, intelSkylakeList, {"insts,,cycles,,+l2m_latency,,dtlbm_stall",
+ "insts,,cycles,,l2m_stall,,dtlbm_stall", 0}},
+ {CPC_INTEL_UNKNOWN, intelLinuxUnknown, {"cycles,,insts,,llm",
+ "user_time,,system_time,,cycles,,insts,,llm", 0}},
+ {CPC_INTEL_ATOM, intelAtomList, {"insts", 0}},
+ {CPC_AMD_K8C, amd_opteron_10h_11h, {"insts,,cycles,,l2dm,,l2dtlbm", 0}},
+ {CPC_AMD_FAM_10H, amd_opteron_10h_11h, {"insts,,cycles,,l2dm,,l2dtlbm", 0}},
+ {CPC_AMD_FAM_11H, amd_opteron_10h_11h, {"insts,,cycles,,l2dm,,l2dtlbm", 0}},
+ {CPC_AMD_FAM_15H, amd_15h, {"insts,,cycles", 0}},
+ {CPC_SPARC64_V, usfuji_V_list, {"insts,,cycles", 0}},
+ {CPC_SPARC64_VI, usfuji_VI_VII_list, {"insts,,cycles,,dcstall", 0}},
+ {CPC_SPARC64_VII, usfuji_VI_VII_list, {"insts,,cycles,,dcstall", 0}},
+ {CPC_SPARC64_X, usfuji_X_list, {"insts,,cycles,,dcstall", 0}},
+ {CPC_SPARC64_XII, usfuji_XII_list, {"insts,,cycles,,dcstall", 0}},
+ {CPC_KPROF, kproflist, {NULL}}, // OBSOLETE (To support 12.3 and earlier, TBR)
+ {ARM_CPU_IMP_APM, armlist, {"insts,,cycles", 0}},
+ {0, unknownlist, {NULL}} /* processor is unknown, but experiment is allowed */
+};
+
+/*---------------------------------------------------------------------------*/
+/* state variables */
+static int initialized;
+static int signals_disabled;
+
+// Simple array list
+typedef struct
+{
+ void** array; // array of ptrs, last item set to null
+ int sz; // num live elements in array
+ int max; // array allocation size
+} ptr_list;
+
+static void
+ptr_list_init (ptr_list *lst)
+{
+ lst->sz = 0;
+ lst->max = 0;
+ lst->array = 0;
+}
+
+static void
+ptr_list_add (ptr_list *lst, char* ptr)
+{ // ptr must be freeable
+ if (lst->sz >= lst->max - 1)
+ {
+ void * * new;
+ int newmax = lst->max ? lst->max * 2 : 16;
+ new = (void**) realloc (lst->array, newmax * sizeof (void*));
+ if (!new) return; // failed, discard add
+ lst->max = newmax;
+ lst->array = new;
+ }
+ lst->array[lst->sz++] = ptr;
+ lst->array[lst->sz] = NULL; // mark new end-of-list
+}
+
+static void
+ptr_list_free (ptr_list *lst)
+{ // includes shallow free of all elements
+ if (lst->array)
+ {
+ for (int ii = 0; lst->array[ii]; ii++)
+ free (lst->array[ii]);
+ free (lst->array);
+ }
+ lst->sz = 0;
+ lst->max = 0;
+ lst->array = 0;
+}
+
+// Capabilities of this machine (initialized by setup_cpc())
+static int cpcx_cpuver = CPUVER_UNDEFINED;
+static uint_t cpcx_npics;
+static const char *cpcx_cciname;
+static const char *cpcx_docref;
+static uint64_t cpcx_support_bitmask;
+
+// cpcx_*[0]: collect lists
+// cpcx_*[1]: er_kernel lists
+// Each cpcx_*[] list is an array of ptrs with null ptr marking end of list
+static char **cpcx_attrs[2];
+
+static Hwcentry **cpcx_std[2];
+static Hwcentry **cpcx_raw[2];
+static Hwcentry **cpcx_hidden[2];
+
+static uint_t cpcx_max_concurrent[2];
+static char *cpcx_default_hwcs[2];
+static char *cpcx_orig_default_hwcs[2];
+static int cpcx_has_precise[2];
+
+#define VALID_FOR_KERNEL(forKernel) ((forKernel)>=0 && (forKernel)<=1)
+#define IS_KERNEL(forKernel) ((forKernel)==1)
+
+// used to build lists:
+static ptr_list unfiltered_attrs;
+static ptr_list unfiltered_raw;
+
+/*---------------------------------------------------------------------------*/
+/* misc internal utilities */
+
+/* compare 2 strings to either \0 or <termchar> */
+#define IS_EOL(currchar, termchar) ((currchar)==(termchar) || (currchar)==0)
+
+static int
+is_same (const char * regname, const char * int_name, char termchar)
+{
+ do
+ {
+ char a = *regname;
+ char b = *int_name;
+ if (IS_EOL (a, termchar))
+ {
+ if (IS_EOL (b, termchar))
+ return 1; /* strings are the same up to terminating char */
+ else
+ break; /* strings differ */
+ }
+ if (a != b)
+ break; /* strings differ */
+ regname++;
+ int_name++;
+ }
+ while (1);
+ return 0;
+}
+
+static int
+is_numeric (const char *name, uint64_t *pval)
+{
+ char *endptr;
+ uint64_t val = strtoull (name, &endptr, 0);
+ if (!*name || *endptr)
+ return 0; /* name does not specify a numeric value */
+ if (pval)
+ *pval = val;
+ return 1;
+}
+
+static int
+is_visible_alias (Hwcentry* pctr)
+{
+ if (!pctr)
+ return 0;
+ if (pctr->name && pctr->int_name && pctr->metric)
+ return 1;
+ return 0;
+}
+
+static int
+is_hidden_alias (Hwcentry* pctr)
+{
+ if (!pctr)
+ return 0;
+ if (pctr->name && pctr->int_name && pctr->metric == NULL)
+ return 1;
+ return 0;
+}
+
+static int
+is_numeric_alias (Hwcentry* pctr)
+{
+ int is_numeric_alias = 0;
+ regno_t regno;
+ char *nameOnly = NULL;
+ hwcfuncs_parse_ctr (pctr->int_name, NULL, &nameOnly, NULL, NULL, &regno);
+ if (is_numeric (nameOnly, NULL))
+ is_numeric_alias = 1;
+ free (nameOnly);
+ return is_numeric_alias;
+}
+
+/* print list of register to a buffer */
+/*
+ * style e x a m p l e s
+ * 0 NONE 2 {0|1|2|3}
+ * 1 NONE 2 : 0, 1, 2, or 3
+ * 2 0 1 2 3 6
+ */
+static char *
+get_regnolist (char *buf, size_t sz, const regno_t *reg_list, int style)
+{
+ if (!buf || !sz)
+ return "INTERNAL ERROR";
+ buf[0] = 0;
+ if (style == 2)
+ {
+ int ii;
+ // width should be consistent with that in format_columns()
+ // the format will accommodate cpcx_npics regs
+ if (cpcx_npics < 1)
+ return "INTERNAL ERROR";
+ // clear out the buffer
+ for (ii = 0; ii < sz; ii++)
+ buf[ii] = '_';
+ if (cpcx_npics <= 9)
+ {
+ // one char per reg, plus terminating null char
+ if (cpcx_npics + 1 > sz)
+ return "INTERNAL ERROR";
+ buf[cpcx_npics] = '\0';
+
+ // fill buf with regnos
+ for (ii = 0; ii < MAX_PICS; ii++)
+ {
+ regno_t regno = reg_list[ii];
+ if (REG_LIST_EOL (regno))
+ break;
+ if (regno < 0 || regno >= cpcx_npics)
+ return "INTERNAL ERROR";
+ buf[regno] = '0' + regno;
+ }
+ }
+ else
+ {
+ /* space between regs, which may be 1 or 2 digits each
+ * 1 char for reg 0
+ * 2 chars for regs 1-9 each
+ * 3 chars for regs 10- each
+ * 1 char for terminating null char
+ */
+ int nchars = 17 + 3 * (cpcx_npics - 9);
+ if (nchars > sz)
+ return "INTERNAL ERROR";
+ buf[nchars - 1] = '\0';
+
+ // fill buf with regnos
+ for (ii = 0; ii < MAX_PICS; ii++)
+ {
+ regno_t regno = reg_list[ii];
+ if (REG_LIST_EOL (regno))
+ break;
+ if (regno <= 9)
+ buf[2 * regno ] = '0' + regno;
+ else
+ {
+ buf[3 * (regno - 9) + 17] = '0' + (regno / 10);
+ buf[3 * (regno - 9) + 18] = '0' + (regno % 10);
+ }
+ }
+ }
+ return buf;
+ }
+ if (REG_LIST_IS_EMPTY (reg_list))
+ {
+ snprintf (buf, sz, GTXT ("NONE"));
+ return buf;
+ }
+ else if (REG_LIST_EOL (reg_list[1]))
+ {
+ /* 1 item in list */
+ snprintf (buf, sz, "%d", reg_list[0]);
+ return buf;
+ }
+ else
+ {
+ /* 2 more items in list */
+ int ii, num_regs;
+ for (ii = 0; ii < MAX_PICS; ii++)
+ {
+ regno_t regno = reg_list[ii];
+ if (REG_LIST_EOL (regno))
+ break;
+ }
+ num_regs = ii;
+ buf[0] = 0;
+ for (ii = 0; ii < num_regs; ii++)
+ {
+ regno_t regno = reg_list[ii];
+ if (style == 0)
+ snprintf (buf + strlen (buf), sz - strlen (buf),
+ "%c%d", ii ? '|' : '{', regno);
+ else
+ {
+ if (num_regs == 2)
+ snprintf (buf + strlen (buf), sz - strlen (buf),
+ "%d%s", regno, !ii ? " or " : "");
+ else
+ {
+ /* 3 or more items in list */
+ if (ii < num_regs - 2)
+ snprintf (buf + strlen (buf), sz - strlen (buf),
+ "%d, ", regno);
+ else if (ii == num_regs - 2)
+ snprintf (buf + strlen (buf), sz - strlen (buf),
+ "%d, or ", regno);
+ else
+ snprintf (buf + strlen (buf), sz - strlen (buf),
+ "%d", regno);
+ }
+ }
+ }
+ if (style == 0)
+ snprintf (buf + strlen (buf), sz - strlen (buf), "}");
+ }
+ return buf;
+}
+
+#if !HWC_DEBUG
+#define hwcentry_print(lvl,x1,x2)
+#else
+
+/* print a Hwcentry */
+static void
+hwcentry_print (int lvl, const char * header, const Hwcentry *pentry)
+{
+ char buf[1024];
+ Tprintf (lvl, "%s '%s', '%s', %d, '%s', %d, %d, %d, %d, %d, %d, /",
+ header,
+ pentry->name ? pentry->name : "NULL",
+ pentry->int_name ? pentry->int_name : "NULL",
+ pentry->reg_num,
+ pentry->metric ? pentry->metric : "NULL",
+ pentry->lval, /* low-resolution/long run */
+ pentry->val, /* normal */
+ pentry->hval, /* high-resolution/short run */
+ pentry->timecvt,
+ pentry->memop, /* type of instruction that can trigger */
+ pentry->sort_order);
+ get_regnolist (buf, sizeof (buf), pentry->reg_list, 0);
+ Tprintf (lvl, "%s\n", buf);
+}
+#endif
+
+/* add <regno> to a Hwcentry's list */
+static void
+regno_add (Hwcentry * pctr, regno_t regno)
+{
+ int jj;
+ regno_t *reg_list;
+ if (!pctr)
+ {
+ Tprintf (0, "hwctable: regno_add(): ERROR: pctr==NULL\n");
+ return;
+ }
+ reg_list = pctr->reg_list;
+ if (!reg_list)
+ {
+ /* create list */
+ reg_list = (regno_t*) malloc (sizeof (regno_t*) * MAX_PICS);
+ if (!reg_list)
+ {
+ hwcentry_print (DBG_LT0, "hwctable: regno_add: ERROR:"
+ " Out of memory: ", pctr);
+ return;
+ }
+ /* initialize list */
+ for (jj = 0; jj < MAX_PICS; jj++)
+ reg_list[jj] = REGNO_ANY;
+ pctr->reg_list = reg_list;
+ }
+ if (regno == REGNO_ANY)
+ {
+ /* add all counters up to cpcx_npics */
+ for (jj = 0; jj < MAX_PICS && jj < cpcx_npics; jj++)
+ reg_list[jj] = jj;
+ }
+ else
+ {
+ /* add <regno> to list of registers */
+ for (jj = 0; jj < MAX_PICS; jj++)
+ {
+ if (reg_list[jj] == regno)
+ {
+ hwcentry_print (DBG_LT0, "hwctable: regno_add: WARNING: "
+ "Duplicate regno: ", pctr);
+ break;
+ }
+ if (reg_list[jj] == REGNO_ANY)
+ {
+ reg_list[jj] = regno;
+ break;
+ }
+ }
+ }
+ if (jj == MAX_PICS)
+ hwcentry_print (DBG_LT0, "hwctable: regno_add: WARNING:"
+ " regno list is full:", pctr);
+}
+
+/*---------------------------------------------------------------------------*/
+/* utilities for rawlist (list of raw counters with reglist[] filled in) */
+
+/* search the 'raw' list of counters for <name> */
+static Hwcentry *
+ptrarray_find_by_name (Hwcentry** array, const char * name)
+{
+ if (name == NULL)
+ return NULL;
+ Tprintf (DBG_LT3, "hwctable: array_find_by_name(%s):\n", name);
+ for (int ii = 0; array && array[ii]; ii++)
+ if (strcmp (array[ii]->name, name) == 0)
+ return array[ii];
+ return NULL; /* not found */
+}
+
+/* add Hwcentry to the 'raw' list of counters */
+static Hwcentry *
+alloc_shallow_copy (const Hwcentry *pctr)
+{
+ Hwcentry *node = (Hwcentry *) malloc (sizeof (Hwcentry));
+ if (!node)
+ return NULL; // fail
+ *node = *pctr; /* shallow copy! */
+ if (pctr->name)
+ node->name = strdup (pctr->name);
+ return node;
+}
+
+/* add Hwcentry to the 'raw' list of counters */
+static Hwcentry *
+list_append_shallow_copy (ptr_list *list, const Hwcentry *pctr)
+{
+ Hwcentry *node = alloc_shallow_copy (pctr);
+ if (!node)
+ return NULL; // fail
+ ptr_list_add (list, (void*) node);
+ return node;
+}
+
+static Hwcentry *
+list_add (ptr_list *list, uint_t regno, const char *name)
+{
+ Hwcentry *praw;
+ praw = ptrarray_find_by_name ((Hwcentry**) list->array, name);
+ if (!praw)
+ {
+ Hwcentry tmpctr = empty_ctr;
+ tmpctr.name = (char *) name;
+ praw = list_append_shallow_copy (list, &tmpctr);
+ }
+ if (praw)
+ regno_add (praw, regno);
+ return praw;
+}
+
+/*---------------------------------------------------------------------------*/
+/* utilities for stdlist (table of aliased, hidden, & convenience, ctrs) */
+
+/* find top level definition for <cpuid> */
+static cpu_list_t*
+cputabs_find_entry (int cpuid)
+{
+ int i;
+ /* now search for the appropriate table */
+ for (i = 0;; i++)
+ {
+ if (cputabs[i].cputag == 0)
+ break;
+ if (cpuid == cputabs[i].cputag)
+ return &cputabs[i];
+ }
+ Tprintf (0, "hwctable: cputabs_find_entry: WARNING: "
+ "cpu_id = %d not defined. No 'standard' counters are available\n",
+ cpuid);
+ return &cputabs[i];
+}
+
+/* find Hwcentry table for <cpuid> */
+static Hwcentry*
+stdlist_get_table (int cpuid)
+{
+ cpu_list_t* tmp = cputabs_find_entry (cpuid);
+ if (tmp)
+ return tmp->stdlist_table;
+ return NULL;
+}
+
+/* search the 'standard' list of counters for <name>,<regno> */
+/* note: <regno>=REGNO_ANY is a wildcard that matches any value. */
+
+/* note: int_name==NULL is a wildcard */
+static const Hwcentry *
+ptrarray_find (const Hwcentry **array, const char *name, const char *int_name,
+ int check_regno, regno_t regno)
+{
+ const Hwcentry *pctr;
+ if (!array)
+ return NULL;
+ for (int ii = 0; array[ii]; ii++)
+ {
+ pctr = array[ii];
+ if (strcmp (pctr->name, name))
+ continue;
+ if (int_name && int_name[0] != 0 && pctr->int_name)
+ {
+ if (NULL == strstr (int_name, pctr->int_name))
+ continue;
+ }
+ if (!check_regno)
+ return pctr;
+ else
+ {
+ /* duplicates aliases are allowed in table because of 6759307 */
+ if (REG_LIST_IS_EMPTY (pctr->reg_list))
+ {
+ /* skip aliases that don't have a valid list of registers */
+ hwcentry_print (1, "hwctable: stdlist_find_by_name:"
+ " WARNING: alias found, but event not supported by HW:",
+ pctr);
+ continue;
+ }
+ if (!regno_is_valid (pctr, regno))
+ {
+ hwcentry_print (1, "hwctable: stdlist_find_by_name():"
+ " WARNING: alias found, but regno doesn't match:",
+ pctr);
+ continue;
+ }
+ return pctr;
+ }
+ }
+ return NULL;
+}
+
+/* search the 'standard' list of counters for <name>,<regno> */
+
+/* note: <regno>=REGNO_ANY is a wildcard that matches any value. */
+static const Hwcentry *
+static_table_find (const Hwcentry *table, const char *name, const char *int_name,
+ int check_regno, regno_t regno)
+{
+ int sz;
+ for (sz = 0; table && table[sz].name; sz++)
+ ;
+ if (!sz)
+ return NULL;
+ const Hwcentry ** list = calloc (sz + 1, sizeof (void*));
+ if (!list)
+ return NULL;
+ for (int ii = 0; ii < sz; ii++)
+ list[ii] = &table[ii];
+ list[sz] = NULL;
+ const Hwcentry *pctr = ptrarray_find (list, name, int_name, check_regno, regno);
+ free (list);
+ return pctr;
+}
+
+#if !HWC_DEBUG
+#define stdlist_print(dbg_lvl,table)
+#else
+
+/* print all Hwcentries in standard table. Check for weird stuff */
+static void
+stdlist_print (int dbg_lvl, const Hwcentry* table)
+{
+ const Hwcentry *pctr;
+ if (!table)
+ {
+ Tprintf (0, "hwctable: stdlist_print: ERROR: "
+ "table is invalid.\n");
+ return;
+ }
+ for (pctr = table; pctr->name; pctr++)
+ {
+ int ii;
+ hwcentry_print (dbg_lvl, "hwctable: stdlist: ", pctr);
+ if (REG_LIST_IS_EMPTY (pctr->reg_list))
+ {
+ if (pctr->int_name || !pctr->metric)
+ hwcentry_print (DBG_LT1, "hwctable: stdlist_print: WARNING: "
+ "no hardware event found for table entry", pctr);
+ continue;
+ }
+ /* check if incorrect reg_num used in table */
+ if (!regno_is_valid (pctr, pctr->reg_num))
+ {
+ hwcentry_print (DBG_LT0, "hwctable: stdlist_print: ERROR: "
+ "reg_num is not in table. ", pctr);
+ continue;
+ }
+ for (ii = 0; ii < MAX_PICS; ii++)
+ {
+ regno_t regno = pctr->reg_list[ii];
+ if (REG_LIST_EOL (regno))
+ break;
+ }
+ if (ii > 1 && pctr->reg_num != REGNO_ANY)
+ {
+ /* several regnos were valid, but only one can be specified */
+ if (pctr->metric || !pctr->int_name)
+ {
+ /* pctr is standard or a raw definition */
+ /* (pctr is not an alias like cycles0) */
+ hwcentry_print (DBG_LT0, "hwctable: stdlist_print: ERROR: "
+ "regno in table should have been REGNO_ANY. ",
+ pctr);
+ }
+ }
+ }
+}
+#endif
+
+/*---------------------------------------------------------------------------*/
+/* utilities for init */
+
+/* try to bind counters to hw. Return 0 on success, nonzero otherwise */
+static int
+test_hwcs (const Hwcentry* entries[], unsigned numctrs)
+{
+ int rc = -1;
+ hwc_event_t sample;
+ int created = 0;
+ hwcdrv_api_t *hwcdrv = get_hwcdrv ();
+ Tprintf (DBG_LT2, "hwctable: test_hwcs()...\n");
+ rc = hwcfuncs_bind_hwcentry (entries, numctrs);
+ if (rc)
+ {
+ Tprintf (0, "hwctable: WARNING: test "
+ "counters could not be created\n");
+ goto end_test_hwcs;
+ }
+ created = 1;
+ if (!signals_disabled)
+ {
+ (void) signal (HWCFUNCS_SIGNAL, SIG_IGN);
+ signals_disabled = 1;
+ }
+ rc = hwcdrv->hwcdrv_start ();
+ if (rc)
+ {
+ Tprintf (0, "hwctable: WARNING: test "
+ "counters could not be started\n");
+ goto end_test_hwcs;
+ }
+ rc = hwcdrv->hwcdrv_read_events (&sample, NULL);
+ if (rc)
+ Tprintf (0, "hwctable: WARNING: test sample failed\n");
+ rc = 0;
+#if HWC_DEBUG
+ {
+ unsigned ii;
+ Tprintf (DBG_LT1, "hwctable: test_hwcs(");
+ for (ii = 0; ii < numctrs; ii++)
+ Tprintf (DBG_LT1, "%s%s", ii ? "," : "", entries[ii]->name);
+ Tprintf (DBG_LT1, ") PASS\n");
+ }
+#endif
+
+end_test_hwcs:
+ if (created && hwcdrv->hwcdrv_free_counters ())
+ Tprintf (0, "hwctable: WARNING: test counters could not be freed\n");
+ return rc;
+}
+
+#if !HWC_DEBUG
+#define check_tables()
+#else
+
+/* check for typos in tables */
+static void
+check_tables ()
+{
+ int i;
+ /* now search the known table of counters */
+ for (i = 0;; i++)
+ {
+ Hwcentry * pentry;
+ int cputag = cputabs[i].cputag;
+ if (cputag == 0)
+ break;
+ if (cputag == CPC_KPROF)
+ continue;
+ pentry = cputabs[i].stdlist_table;
+ for (; pentry; pentry++)
+ {
+ if (!pentry->name)
+ break;
+ if (!pentry->int_name)
+ {/* internal, only to supply ABST and timecvt */
+ if (pentry->metric)
+ Tprintf (DBG_LT0, "hwctable: check_tables: ERROR:"
+ " internal && metric @%d, %s\n", cputag, pentry->name);
+ if (pentry->reg_num != REGNO_ANY)
+ Tprintf (DBG_LT1, "hwctable: check_tables: WARNING:"
+ " internal && reg_num!=REGNO_ANY @%d, %s\n",
+ cputag, pentry->name);
+ if (pentry->val != PRELOAD_DEF
+ && pentry->memop != ABST_EXACT_PEBS_PLUS1)
+ Tprintf (DBG_LT2, "hwctable: check_tables: INFO:"
+ " internal && custom val=%d @%d, %s\n",
+ pentry->val, cputag, pentry->name);
+#if 0
+ if (!pentry->timecvt && pentry->memop == ABST_NONE)
+ Tprintf (DBG_LT0, "hwctable: check_tables: ERROR:"
+ " internal && not special! @%d, %s\n",
+ cputag, pentry->name);
+#endif
+ }
+ if (pentry->metric)
+ { /* aliased */
+ if (!pentry->int_name)
+ Tprintf (DBG_LT0, "hwctable: check_tables: ERROR:"
+ " aliased && !int_name @%d, %s\n", cputag, pentry->name);
+#if 0
+ else if (!strcmp (pentry->name, pentry->int_name))
+ Tprintf (DBG_LT0, "hwctable: check_tables: ERROR:"
+ " name==int_name @%d, %s\n",
+ cputag, pentry->name);
+#endif
+ if (pentry->reg_num != REGNO_ANY && pentry->reg_num != REGNO_INVALID)
+ Tprintf (DBG_LT1, "hwctable: check_tables: INFO:"
+ " aliased && custom reg_num==%d @%d, %s\n",
+ pentry->reg_num, cputag, pentry->name);
+ if (pentry->reg_num == REGNO_INVALID)
+ Tprintf (DBG_LT2, "hwctable: check_tables: INFO:"
+ " aliased && reg_num==REGNO_INVALID @%d, %s\n",
+ cputag, pentry->name);
+ }
+ if (pentry->int_name && !pentry->metric)
+ { /* convenience */
+ if (!strcmp (pentry->name, pentry->int_name))
+ Tprintf (DBG_LT0, "hwctable: check_tables: ERROR:"
+ " convenience && name==int_name @%d, %s\n",
+ cputag, pentry->name);
+ if (pentry->reg_num == REGNO_ANY)
+ Tprintf (DBG_LT0, "hwctable: check_tables: ERROR:"
+ " convenience && reg_num==REGNO_ANY @%d, %s\n",
+ cputag, pentry->name);
+ }
+ }
+ }
+}
+#endif
+
+static int try_a_counter ();
+static void hwc_process_raw_ctrs (int forKernel, Hwcentry ***pstd_out,
+ Hwcentry ***praw_out, Hwcentry ***phidden_out,
+ Hwcentry**static_tables,
+ Hwcentry **raw_unfiltered_in);
+
+/* internal call to initialize libs, ctr tables */
+static void
+setup_cpc_general (int skip_hwc_test)
+{
+ const cpu_list_t* cputabs_entry;
+ int rc = -1;
+ Tprintf (DBG_LT2, "hwctable: setup_cpc()... \n");
+ if (initialized)
+ {
+ Tprintf (0, "hwctable: WARNING: setup_cpc() has already been called\n");
+ return;
+ }
+ initialized = 1;
+ cpcx_cpuver = CPUVER_UNDEFINED;
+ cpcx_cciname = NULL;
+ cpcx_npics = 0;
+ cpcx_docref = NULL;
+ cpcx_support_bitmask = 0;
+ for (int kk = 0; kk < 2; kk++)
+ { // collect-0 and kernel-1
+ cpcx_attrs[kk] = NULL;
+ cpcx_std[kk] = NULL;
+ cpcx_raw[kk] = NULL;
+ cpcx_hidden[kk] = NULL;
+ cpcx_max_concurrent[kk] = 0;
+ cpcx_default_hwcs[kk] = NULL;
+ cpcx_orig_default_hwcs[kk] = NULL;
+ cpcx_has_precise[kk] = 0;
+ }
+ check_tables ();
+ hwcdrv_api_t *hwcdrv = get_hwcdrv ();
+ if (hwcdrv->hwcdrv_init_status)
+ {
+ Tprintf (0, "WARNING: setup_cpc_general() failed. init_status=%d \n",
+ hwcdrv->hwcdrv_init_status);
+ goto setup_cpc_wrapup;
+ }
+ hwcdrv->hwcdrv_get_info (&cpcx_cpuver, &cpcx_cciname, &cpcx_npics,
+ &cpcx_docref, &cpcx_support_bitmask);
+
+#ifdef DISALLOW_USI_USII_6357446
+ if (cpcx_cpuver == CPC_ULTRA1 || cpcx_cpuver == CPC_ULTRA2)
+ {
+ Tprintf (0, "hwctable: WARNING: setup_cpc(): cpu=%d"
+ " US-I/US-II cannot provide profile interrupts\n", cpcx_cpuver);
+ /* profiling interrupts don't work on US-I, US-II */
+ hwcfuncs_int_logerr (GTXT ("UltraSPARC I and II cannot provide overflow interrupts\n"));
+ goto setup_cpc_wrapup;
+ }
+#endif
+
+#ifdef DISALLOW_PENTIUM_PRO_MMX_7007575
+ if (cpcx_cpuver == CPC_PENTIUM_PRO_MMX)
+ {
+ Tprintf (0, "hwctable: WARNING: setup_cpc(): cpu=%d"
+ " `Pentium Pro with MMX, Pentium II' is not supported\n", cpcx_cpuver);
+ hwcfuncs_int_logerr (GTXT ("libcpc cannot identify processor type\n"));
+ goto setup_cpc_wrapup;
+ }
+#endif
+
+ /* now search the known table of counters */
+ cputabs_entry = cputabs_find_entry (cpcx_cpuver);
+ if (cputabs_entry == NULL)
+ {
+ Tprintf (0, "hwctable: WARNING: setup_cpc(): cpu=%d"
+ " could not be found in the tables\n", cpcx_cpuver);
+ /* strange, should have at least selected "unknownlist" */
+ hwcfuncs_int_logerr (GTXT ("Analyzer CPU table could not be found\n"));
+ goto setup_cpc_wrapup;
+ }
+
+ Hwcentry * valid_cpu_tables[2]; // [0]:static table of counters, [1]:static table of generic counters
+ valid_cpu_tables[0] = cputabs_entry->stdlist_table;
+ if (valid_cpu_tables[0] == NULL)
+ {
+ Tprintf (0, "hwctable: WARNING: setup_cpc(): "
+ " valid_cpu_tables was NULL??\n");
+ /* strange, someone put a NULL in the lookup table? */
+ hwcfuncs_int_logerr (GTXT ("Analyzer CPU table is invalid\n"));
+ goto setup_cpc_wrapup;
+ }
+ valid_cpu_tables[1] = papi_generic_list;
+ Tprintf (DBG_LT2, "hwctable: setup_cpc(): getting descriptions \n");
+ // populate cpcx_raw and cpcx_attr
+ hwcdrv->hwcdrv_get_descriptions (hwc_cb, attrs_cb);
+ for (int kk = 0; kk < 2; kk++)
+ { // collect and er_kernel
+ hwc_process_raw_ctrs (kk, &cpcx_std[kk], &cpcx_raw[kk], &cpcx_hidden[kk],
+ valid_cpu_tables, (Hwcentry**) unfiltered_raw.array);
+ cpcx_has_precise[kk] = 0;
+ for (int rr = 0; cpcx_raw[kk] && cpcx_raw[kk][rr]; rr++)
+ {
+ int memop = cpcx_raw[kk][rr]->memop;
+ if (ABST_MEMSPACE_ENABLED (memop))
+ {
+ cpcx_has_precise[kk] = 1;
+ break;
+ }
+ }
+ cpcx_attrs[kk] = (char**) unfiltered_attrs.array;
+ cpcx_max_concurrent[kk] = cpcx_npics;
+ }
+#if 1 // 22897042 - DTrace cpc provider does not support profiling on multiple ctrs on some systems
+ if ((cpcx_support_bitmask & HWCFUNCS_SUPPORT_OVERFLOW_CTR_ID) != HWCFUNCS_SUPPORT_OVERFLOW_CTR_ID)
+ {
+ // kernel profiling only supports one counter if overflowing counter can't be identified
+ cpcx_max_concurrent[1] = cpcx_npics ? 1 : 0;
+ }
+#endif
+
+ /* --- quick test of the cpc interface --- */
+ if (skip_hwc_test)
+ rc = 0;
+ else
+ rc = try_a_counter (0);
+
+ /* initialize the default counter string definition */
+ for (int kk = 0; kk < 2; kk++)
+ {
+ char * default_exp = 0;
+ int jj;
+ for (jj = 0; (default_exp = cputabs_entry->default_exp_p[jj]); jj++)
+ {
+ int rc = hwc_lookup (kk, 0, default_exp, NULL, 0, NULL, NULL);
+ if (rc > 0)
+ break;
+ }
+ if (!default_exp)
+ {
+ char * fallback[3] = {NTXT ("insts,,cycles,,l3m"), NTXT ("insts,,cycles"), NTXT ("insts")};
+ for (int ff = 0; ff < 3; ff++)
+ {
+ int rc = hwc_lookup (kk, 0, fallback[ff], NULL, 0, NULL, NULL);
+ if (rc > 0)
+ {
+ default_exp = strdup (fallback[ff]);
+ break;
+ }
+ }
+ }
+ cpcx_default_hwcs[kk] = default_exp;
+ cpcx_orig_default_hwcs[kk] = default_exp;
+ }
+
+setup_cpc_wrapup:
+ if (rc)
+ {
+ cpcx_npics = 0;
+ /*
+ ptr_list_free(&tmp_raw); // free stuff... YXXX
+ ptr_list_free(&unfiltered_attrs);
+ */
+ }
+ return;
+}
+
+static void
+setup_cpcx ()
+{
+ if (initialized)
+ return;
+ setup_cpc_general (0); // set up and include a hwc test run
+}
+
+static void
+setup_cpc_skip_hwctest ()
+{
+ if (initialized)
+ return;
+ setup_cpc_general (1); // set up but skip hwc test run
+}
+
+static int
+try_a_counter (int forKernel)
+{
+ if (!VALID_FOR_KERNEL (forKernel))
+ return -1;
+ int rc = -1;
+ const Hwcentry * testevent;
+ if (cpcx_std[forKernel] == NULL)
+ {
+ Tprintf (0, "hwctable: WARNING: cpcx_std not initialized");
+ return 0; /* consider this an automatic PASS */
+ }
+ /* look for a valid table entry, only try valid_cpu_tables[0] */
+ {
+ testevent = cpcx_std[forKernel][0];
+ if (!testevent || !testevent->name)
+ {
+ Tprintf (0, "hwctable: WARNING: no test metric"
+ " available to verify counters\n");
+ return 0; /* consider this an automatic PASS */
+ }
+ if (REG_LIST_IS_EMPTY (testevent->reg_list))
+ return 0; // weird
+ }
+ Hwcentry tmp_testevent;
+ tmp_testevent = *testevent; /* shallow copy */
+ if (tmp_testevent.int_name == NULL)
+ {
+ /* counter is defined in 'hidden' section of table, supply int_name */
+ tmp_testevent.int_name = strdup (tmp_testevent.name);
+ }
+ Hwcentry * test_array[1] = {&tmp_testevent};
+ rc = hwcfuncs_assign_regnos (test_array, 1); /* may modify test_array */
+ if (rc)
+ return rc;
+ rc = test_hwcs ((const Hwcentry**) test_array, 1);
+ if (rc == HWCFUNCS_ERROR_UNAVAIL)
+ {
+ // consider this a pass (allow HWC table to be printed)
+ Tprintf (0, "hwctable: WARNING: "
+ "cpc_bind_event() shows counters busy; allow to continue\n");
+ return 0;
+ }
+ else if (rc)
+ {
+ // failed to start for some other reason
+ Tprintf (0, "hwctable: WARNING: "
+ "test of counter '%s' failed\n",
+ testevent->name);
+ return rc;
+ }
+ return 0;
+}
+
+void
+hwc_update_val (Hwcentry *hwc)
+{
+ if (hwc->ref_val == 0)
+ hwc->ref_val = hwc->val; // save original reference
+ int64_t newVal;
+ hrtime_t min_time_nsec = hwc->min_time;
+ if (min_time_nsec == HWCTIME_TBD)
+ min_time_nsec = hwc->min_time_default;
+ switch (min_time_nsec)
+ {
+ case 0: // disable time-based intervals
+ // do not modify val
+ return;
+ case HWCTIME_ON:
+ case HWCTIME_TBD:
+ newVal = HWC_VAL_ON (hwc->ref_val);
+ break;
+ case HWCTIME_LO:
+ newVal = HWC_VAL_LO (hwc->ref_val);
+ break;
+ case HWCTIME_HI:
+ newVal = HWC_VAL_HI (hwc->ref_val);
+ break;
+ default:
+ newVal = HWC_VAL_CUSTOM (hwc->ref_val, min_time_nsec);
+ break;
+ }
+#define MAX_INT_VAL (2*1000*1000*1000 + 1000100)// yuck, limited to signed int
+ if (newVal >= MAX_INT_VAL)
+ newVal = MAX_INT_VAL;
+ hwc->val = newVal;
+}
+
+/* convert value string to value and store result in hwc->val */
+/* This function moved here from collctrl.cc */
+/*
+ * Keep the HWCTIME_* definitions in sync with those in
+ * collctrl.cc Coll_Ctrl::add_hwcstring().
+ */
+static int
+set_hwcval (Hwcentry *hwc, hrtime_t global_min_time_nsec, const char *valptr)
+{
+ hwc->min_time_default = global_min_time_nsec;
+ if (hwc->val == 1)
+ {
+ // An interval of 1 is used for certain types of count data.
+ // (er_bit, er_generic, er_rock ...)
+ // Hi and Lo do not apply.
+ /* use the default */
+ }
+ else if (valptr == NULL || valptr[0] == 0 || strcmp (valptr, "auto") == 0)
+ hwc->min_time = HWCTIME_TBD;
+ else if (strcmp (valptr, "on") == 0)
+ hwc->min_time = HWCTIME_ON;
+ else if (strcmp (valptr, "lo") == 0 || strcmp (valptr, "low") == 0)
+ hwc->min_time = HWCTIME_LO;
+ else if (strcmp (valptr, "hi") == 0 || strcmp (valptr, "high") == 0
+ || strcmp (valptr, "h") == 0)
+ hwc->min_time = HWCTIME_HI;
+ else
+ {
+ /* the remaining string should be a number > 0 */
+ char *endchar = NULL;
+ long long tmp = strtoll (valptr, &endchar, 0);
+ int value = (int) tmp;
+ if (*endchar != 0 || tmp <= 0 || value != tmp)
+ {
+ // also covers errno == ERANGE
+ Tprintf (0, "hwctable: set_hwcval(): ERROR: "
+ "Invalid counter value %s for counter `%s'\n",
+ valptr, hwc->name);
+ return -1;
+ }
+ if (tmp > UINT32_MAX / 2)
+ {
+ /* Roch B. says that we MUST do this check for er_kernel
+ because some platforms deliver overflow interrupts without
+ identifying which counter overflowed. The only way to
+ determine which counter overflowed is to have enough
+ margin on 32 bit counters to make sure they don't
+ wrap.
+ */
+ Tprintf (0, "hwctable: set_hwcval(): ERROR: "
+ "Counter value %s exceeds %lu\n",
+ valptr, (unsigned long) UINT32_MAX / 2);
+ return -1;
+ }
+ /* set the value */
+ if (value != 0)
+ {
+ if (hwc->ref_val == 0)
+ hwc->ref_val = hwc->val; // save original reference
+ hwc->val = value;
+ hwc->min_time = 0; // turn off auto-adjust
+ }
+ }
+ hwc_update_val (hwc);
+ return 0;
+}
+
+static char *
+canonical_name (const char *counter)
+{
+ char *nameOnly = NULL;
+ char *attrs = NULL;
+ char tmpbuf[1024];
+ tmpbuf[0] = 0;
+ hwcfuncs_parse_ctr (counter, NULL, &nameOnly, &attrs, NULL, NULL);
+ snprintf (tmpbuf + strlen (tmpbuf), sizeof (tmpbuf) - strlen (tmpbuf),
+ "%s", nameOnly);
+ if (attrs)
+ {
+ hwcfuncs_attr_t cpc2_attrs[HWCFUNCS_MAX_ATTRS];
+ void * attr_mem;
+ unsigned nattrs;
+ int ii, jj;
+
+ /* extract attributes from counter */
+ attr_mem = hwcfuncs_parse_attrs (counter, cpc2_attrs, HWCFUNCS_MAX_ATTRS,
+ &nattrs, NULL);
+ if (!attr_mem)
+ {
+ snprintf (tmpbuf + strlen (tmpbuf), sizeof (tmpbuf) - strlen (tmpbuf),
+ "~UNKNOWN");
+ goto canonical_attrs_wrapup;
+ }
+
+ /* sort the attributes */
+ for (ii = 0; ii < (int) nattrs - 1; ii++)
+ {
+ for (jj = ii + 1; jj < nattrs; jj++)
+ {
+ int cmp = strcmp (cpc2_attrs[ii].ca_name,
+ cpc2_attrs[jj].ca_name);
+ if (cmp > 0)
+ {
+ hwcfuncs_attr_t tmp = cpc2_attrs[jj];
+ cpc2_attrs[jj] = cpc2_attrs[ii];
+ cpc2_attrs[ii] = tmp;
+ }
+ }
+ }
+
+ /* print attributes in canonical format */
+ for (ii = 0; ii < nattrs; ii++)
+ snprintf (tmpbuf + strlen (tmpbuf), sizeof (tmpbuf) - strlen (tmpbuf),
+ "~%s=0x%llx", cpc2_attrs[ii].ca_name, (long long) cpc2_attrs[ii].ca_val);
+ free (attr_mem);
+ }
+canonical_attrs_wrapup:
+ free (nameOnly);
+ free (attrs);
+ return strdup (tmpbuf);
+}
+
+/* process counter and value strings - put results in <*pret_ctr> */
+
+/* Print errors to UEbuf for any failure that results in nonzero return */
+static int
+process_ctr_def (int forKernel, hrtime_t global_min_time_nsec,
+ const char *counter, const char *value, Hwcentry *pret_ctr,
+ char* UWbuf, size_t UWsz, char* UEbuf, size_t UEsz)
+{
+ int rc = -1;
+ char *nameOnly = NULL;
+ char *attrs = NULL;
+ char *regstr = NULL;
+ int plus;
+ regno_t regno;
+ const Hwcentry *pfound = NULL;
+ const char *uname = NULL;
+ int disable_backtrack;
+ UEbuf[0] = 0;
+ UWbuf[0] = 0;
+ Tprintf (DBG_LT3, "hwctable: process_ctr_def(): counter=%s value=%s \n",
+ counter, value ? value : "NULL");
+ hwcfuncs_parse_ctr (counter, &plus, &nameOnly, &attrs, &regstr, &regno);
+
+ /* search for the counter in the std and raw lists */
+ {
+ pfound = ptrarray_find ((const Hwcentry**) cpcx_std[forKernel], nameOnly, NULL, 1, regno);
+ if (pfound)
+ hwcentry_print (DBG_LT1, "hwctable: process_ctr_def: found in stdlist:",
+ pfound);
+ }
+ if (!pfound)
+ {
+ pfound = ptrarray_find ((const Hwcentry**) cpcx_hidden[forKernel], nameOnly, NULL, 1, regno);
+ if (pfound)
+ hwcentry_print (DBG_LT1, "hwctable: process_ctr_def: found in stdlist(hidden):", pfound);
+ }
+ if (!pfound)
+ {
+ pfound = ptrarray_find_by_name (cpcx_raw[forKernel], nameOnly); /* (regno match checked later) */
+ if (pfound)
+ hwcentry_print (DBG_LT1, "hwctable: process_ctr_def: found in rawlist:", pfound);
+ }
+ if (!pfound)
+ {
+ pfound = ptrarray_find ((const Hwcentry**) cpcx_std[forKernel], nameOnly, NULL, 1, REGNO_ANY);
+ if (pfound)
+ hwcentry_print (DBG_LT1, "hwctable: process_ctr_def: found in stdlist but regno didn't match:", pfound);
+ }
+ if (!pfound)
+ {
+ pfound = ptrarray_find ((const Hwcentry**) cpcx_hidden[forKernel], nameOnly, NULL, 1, REGNO_ANY);
+ if (pfound)
+ hwcentry_print (DBG_LT1, "hwctable: process_ctr_def: found in stdlist(hidden) but regno didn't match:", pfound);
+ }
+ if (!pfound)
+ {
+ uint64_t val = 0;
+ if (is_numeric (nameOnly, &val))
+ {
+ Hwcentry *tmp = alloc_shallow_copy (&empty_ctr); // Leaks?
+ if (tmp)
+ {
+ tmp->name = strdup (nameOnly);
+ regno_add (tmp, REGNO_ANY);
+ pfound = tmp;
+ }
+ }
+ if (pfound)
+ hwcentry_print (DBG_LT1, "hwctable: process_ctr_def: counter specified by numeric value:", pfound);
+ }
+ if (!pfound)
+ {
+ snprintf (UEbuf + strlen (UEbuf), UEsz - strlen (UEbuf),
+ GTXT ("Invalid HW counter name: %s\n"), nameOnly);
+ snprintf (UEbuf + strlen (UEbuf), UEsz - strlen (UEbuf),
+ GTXT ("Run \"%s -h\" with no other arguments for more information on HW counters on this system.\n"),
+ (IS_KERNEL (forKernel) ? "er_kernel" : "collect"));
+ goto process_ctr_def_wrapup;
+ }
+
+ /* counter found */
+ *pret_ctr = *pfound; /* shallow copy */
+ pret_ctr->int_name = NULL; /* so free doesn't try to free these pfound's ptrs */
+ pret_ctr->name = NULL; /* so free doesn't try to free these pfound's ptrs */
+
+ /* update uname,memop */
+ uname = counter;
+ disable_backtrack = 0;
+ if (plus != 0 || ABST_PLUS_BY_DEFAULT (pret_ctr->memop))
+ {
+ // attempt to process memoryspace profiling
+ int message_printed = 0;
+ if (cpcx_cpuver == CPUVER_GENERIC)
+ {
+ // accept plus, since we don't know what this CPU is
+ snprintf (UEbuf + strlen (UEbuf), UEsz - strlen (UEbuf),
+ GTXT ("`+' may not be correctly supported on `%s' because processor is not recognized."),
+ cpcx_cciname);
+ pret_ctr->memop = ABST_LDST; // supply a backtracking data type - required for collector
+ }
+ else if (cpcx_cpuver == CPC_ULTRA1 || cpcx_cpuver == CPC_ULTRA2
+ || cpcx_cpuver == CPC_ULTRA3 || cpcx_cpuver == CPC_ULTRA3_PLUS
+ || cpcx_cpuver == CPC_ULTRA3_I || cpcx_cpuver == CPC_ULTRA4_PLUS
+ || cpcx_cpuver == CPC_ULTRA4 || cpcx_cpuver == CPC_ULTRA_T1
+ || cpcx_cpuver == CPC_ULTRA_T2 || cpcx_cpuver == CPC_ULTRA_T2P
+ || cpcx_cpuver == CPC_ULTRA_T3)
+ {
+ if (!ABST_BACKTRACK_ENABLED (pret_ctr->memop))
+ disable_backtrack = 1;
+ }
+ else if (cpcx_cpuver == CPC_SPARC_T4 || cpcx_cpuver == CPC_SPARC_T5
+ || cpcx_cpuver == CPC_SPARC_T6 || cpcx_cpuver == CPC_SPARC_M4
+ || cpcx_cpuver == CPC_SPARC_M5 || cpcx_cpuver == CPC_SPARC_M6
+ || cpcx_cpuver == CPC_SPARC_M7 || cpcx_cpuver == CPC_SPARC_M8)
+ {
+ if (pret_ctr->memop != ABST_EXACT)
+ disable_backtrack = 1;
+ }
+ else if (cpcx_cpuver == CPC_INTEL_NEHALEM || cpcx_cpuver == CPC_INTEL_WESTMERE
+ || cpcx_cpuver == CPC_INTEL_SANDYBRIDGE
+ || cpcx_cpuver == CPC_INTEL_IVYBRIDGE
+ || cpcx_cpuver == CPC_INTEL_HASWELL
+ || cpcx_cpuver == CPC_INTEL_BROADWELL
+ || cpcx_cpuver == CPC_INTEL_SKYLAKE)
+ {
+ if (pret_ctr->memop != ABST_EXACT_PEBS_PLUS1)
+ disable_backtrack = 1;
+ else if (plus < 0)
+ {
+ // disabling memoryspace not supported for
+ // remove specified -
+ uname++;
+ plus = 0;
+ snprintf (UWbuf + strlen (UWbuf), UWsz - strlen (UWbuf),
+ GTXT ("Warning: `-' is not supported on `%s' -- memory reference backtracking will remain enabled for this counter\n"),
+ nameOnly);
+ }
+ }
+ else
+ {
+ message_printed = 1;
+ snprintf (UWbuf + strlen (UWbuf), UWsz - strlen (UWbuf),
+ GTXT ("Warning: `+' is not supported on `%s' -- memory reference backtracking will not be enabled for `%s'\n"),
+ cpcx_cciname, nameOnly);
+ disable_backtrack = 1;
+ }
+ if (disable_backtrack)
+ {
+ if (plus != 0)
+ uname++; // remove specified + or -
+ if (!message_printed && plus > 0)
+ snprintf (UWbuf + strlen (UWbuf), UWsz - strlen (UWbuf),
+ GTXT ("Warning: `+' is not supported on `%s' -- memory reference backtracking will not be enabled for this counter\n"),
+ nameOnly);
+ }
+ }
+ else
+ disable_backtrack = 1;
+ if (disable_backtrack || plus < 0)
+ if (pret_ctr->memop != ABST_NOPC)
+ pret_ctr->memop = ABST_NONE;
+ if (pret_ctr->memop == ABST_NOPC)
+ snprintf (UWbuf + strlen (UWbuf), UWsz - strlen (UWbuf),
+ GTXT ("Warning: HW counter `%s' is not program-related -- callstacks will be not be recorded for this counter\n"),
+ uname);
+
+ /* update reg_num */
+ if (!regno_is_valid (pfound, regno))
+ {
+ char buf[1024];
+ snprintf (UEbuf + strlen (UEbuf), UEsz - strlen (UEbuf),
+ GTXT ("For counter `%s', %s is not a valid register; valid registers: %s\n"),
+ nameOnly, regstr ? regstr + 1 : "?",
+ get_regnolist (buf, sizeof (buf), pfound->reg_list, 1));
+ goto process_ctr_def_wrapup;
+ }
+ if (pret_ctr->reg_num == REGNO_ANY)
+ { /* table's regno is a wildcard */
+ if (REG_LIST_EOL (pfound->reg_list[1]))
+ {
+ /* valid list only contains one regno, so use it */
+ pret_ctr->reg_num = pfound->reg_list[0];
+ }
+ else
+ pret_ctr->reg_num = regno; /* use user's selection */
+ }
+
+ /* update name and int_name */
+ {
+ // validate attributes
+ if (attrs)
+ {
+ hwcfuncs_attr_t cpc2_attrs[HWCFUNCS_MAX_ATTRS];
+ void * attr_mem;
+ unsigned nattrs;
+ char *errbuf;
+ /* extract attributes from uname */
+ attr_mem = hwcfuncs_parse_attrs (uname, cpc2_attrs, HWCFUNCS_MAX_ATTRS,
+ &nattrs, &errbuf);
+ if (!attr_mem)
+ {
+ snprintf (UEbuf + strlen (UEbuf), UEsz - strlen (UEbuf),
+ "%s\n", errbuf);
+ free (errbuf);
+ goto process_ctr_def_wrapup;
+ }
+ /* make sure all attributes are valid */
+ for (unsigned ii = 0; ii < nattrs; ii++)
+ {
+ if (!attr_is_valid (forKernel, cpc2_attrs[ii].ca_name))
+ {
+ snprintf (UEbuf + strlen (UEbuf), UEsz - strlen (UEbuf),
+ GTXT ("Invalid attribute specified for counter `%s': %s\n"),
+ nameOnly, cpc2_attrs[ii].ca_name);
+ snprintf (UEbuf + strlen (UEbuf), UEsz - strlen (UEbuf),
+ GTXT ("Run \"%s -h\" with no other arguments for more information on HW counters on this system.\n"),
+ (IS_KERNEL (forKernel) ? "er_kernel" : "collect"));
+ free (attr_mem);
+ goto process_ctr_def_wrapup;
+ }
+ for (unsigned jj = ii + 1; jj < nattrs; jj++)
+ {
+ if (strcmp (cpc2_attrs[ii].ca_name,
+ cpc2_attrs[jj].ca_name) == 0)
+ {
+ snprintf (UEbuf + strlen (UEbuf), UEsz - strlen (UEbuf),
+ GTXT ("Duplicate attribute specified for counter `%s': %s\n"),
+ nameOnly, cpc2_attrs[ii].ca_name);
+ free (attr_mem);
+ goto process_ctr_def_wrapup;
+ }
+ }
+ }
+ free (attr_mem);
+ }
+ pret_ctr->name = strdup (uname);
+
+ // assign int_name
+ if (pfound->int_name)
+ {
+ // Counter is one of the following:
+ // - aliased (e.g. cycles~system=1),
+ // - convenience (e.g. cycles0~system=1),
+ if (!attrs) // convert alias to internal name
+ pret_ctr->int_name = strdup (pfound->int_name);
+ else
+ {
+ // convert alias to internal name and
+ // append user-supplied attributes
+ size_t sz = strlen (pfound->int_name) + strlen (attrs) + 1;
+ char *tbuf = calloc (sz, 1);
+ if (tbuf)
+ snprintf (tbuf, sz, "%s%s", pfound->int_name, attrs);
+ pret_ctr->int_name = tbuf;
+ }
+ }
+ else
+ pret_ctr->int_name = strdup (uname); // user-supplied name
+ }
+
+ /* update val */
+ if (set_hwcval (pret_ctr, global_min_time_nsec, value))
+ {
+ snprintf (UEbuf + strlen (UEbuf), UEsz - strlen (UEbuf),
+ GTXT ("Invalid interval for HW counter `%s': %s\n"),
+ nameOnly, value);
+ goto process_ctr_def_wrapup;
+ }
+ hwcentry_print (DBG_LT2, "hwctable: process_ctr_def:", pret_ctr);
+ rc = 0;
+
+process_ctr_def_wrapup:
+ free (regstr);
+ free (attrs);
+ free (nameOnly);
+ return rc;
+}
+
+/*---------------------------------------------------------------------------*/
+
+/* external interfaces, see hwcentry.h for descriptions. */
+
+extern int
+hwc_lookup (int forKernel, hrtime_t global_min_time_nsec, const char *instring,
+ Hwcentry *caller_entries[], unsigned maxctrs, char **emsg, char **wmsg)
+{
+ unsigned ii;
+ char *instr_copy = NULL, *ss = NULL;
+ unsigned numctrs = 0;
+ int rc = 0;
+ char *tokenptr[MAX_PICS * 2];
+ unsigned numtokens = 0;
+ char UEbuf[1024 * 5]; /* error message buffer; strdup of it is passed back to user */
+ char UWbuf[1024 * 5]; /* warning message buffer; strdup of it is passed back to user */
+ if (emsg)
+ *emsg = NULL;
+ if (wmsg)
+ *wmsg = NULL;
+ UEbuf[0] = 0;
+ UWbuf[0] = 0;
+
+ // supply temporary result buffers as needed
+ Hwcentry tmp_entry_table[MAX_PICS];
+ Hwcentry * tmp_entries[MAX_PICS];
+ Hwcentry **entries;
+ if (caller_entries)
+ entries = caller_entries;
+ else
+ {
+ // user doesn't care about results; provide temporary storage for results
+ for (ii = 0; ii < MAX_PICS; ii++)
+ tmp_entries[ii] = &tmp_entry_table[ii];
+ entries = tmp_entries;
+ maxctrs = MAX_PICS;
+ }
+ Tprintf (DBG_LT1, "hwctable: hwc_lookup(%s)\n",
+ instring ? instring : "NULL");
+
+ /* clear <entries> first - prevent seg faults in hwc_lookup_wrapup */
+ for (ii = 0; ii < maxctrs; ii++)
+ *entries[ii] = empty_ctr;
+ if (!instring)
+ {
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("No HW counters were specified."));
+ rc = -1;
+ goto hwc_lookup_wrapup;
+ }
+
+ /* make sure tables are initialized */
+ setup_cpc_skip_hwctest ();
+ if (cpcx_npics == 0)
+ {
+ if (cpcx_cpuver < 0)
+ {
+ char buf[1024];
+ *buf = 0;
+ char *pch = hwcfuncs_errmsg_get (buf, sizeof (buf), 0); /* get first err msg, disable capture */
+ if (*pch)
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("HW counter profiling is not supported on this system: %s%s"),
+ pch, pch[strlen (pch) - 1] == '\n' ? "" : "\n");
+ else
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("HW counter profiling is not supported on this system\n"));
+ }
+ else
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("HW counter profiling is not supported on '%s'\n"),
+ cpcx_cciname);
+ rc = -1;
+ goto hwc_lookup_wrapup;
+ }
+ ss = instr_copy = strdup (instring);
+ while (*ss != 0 && (*ss == ' ' || *ss == '\t'))
+ ss++;
+ tokenptr[numtokens++] = ss;
+ do
+ {
+ /* find end of previous token, replace w/ NULL, skip whitespace, set <tokenptr>, repeat */
+ for (; *ss; ss++)
+ {
+ if (*ss == ',' || *ss == ' ' || *ss == '\t')
+ {
+ /* end of previous token found */
+ *ss = 0; /* terminate the previous token */
+ ss++;
+ while (*ss != 0 && (*ss == ' ' || *ss == '\t'))
+ ss++;
+ if (*ss)
+ tokenptr[numtokens++] = ss;
+ break; // from for loop
+ }
+ }
+ }
+ while (*ss && numtokens < (MAX_PICS * 2));
+
+ if (*ss)
+ {
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("The number of HW counters specified exceeds internal resources\n"));
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("Run \"%s -h\" with no other arguments for more information on HW counters on this system.\n"),
+ (IS_KERNEL (forKernel) ? "er_kernel" : "collect"));
+ rc = -1;
+ goto hwc_lookup_wrapup;
+ }
+ Tprintf (DBG_LT3, "hwctable: hwc_lookup(): numtokens=%d\n", numtokens);
+
+ /* look up individual counters */
+ {
+ int fail = 0;
+ for (ii = 0; ii < numtokens && numctrs < maxctrs; ii += 2)
+ {
+ const char *counter;
+ const char *value;
+ Hwcentry *pret_ctr = entries[numctrs];
+
+ /* assign the tokens to ctrnames, timeoutValues. */
+ counter = tokenptr[ii];
+ if (ii + 1 < numtokens)
+ value = tokenptr[ii + 1];
+ else
+ value = 0;
+ if (process_ctr_def (forKernel, global_min_time_nsec, counter, value, pret_ctr,
+ UWbuf + strlen (UWbuf),
+ sizeof (UWbuf) - strlen (UWbuf),
+ UEbuf + strlen (UEbuf),
+ sizeof (UEbuf) - strlen (UEbuf)))
+ {
+ /* could choose to set fail=1 and continue here,
+ but errmsgs would be aggregated (messy) */
+ rc = -1;
+ goto hwc_lookup_wrapup;
+ }
+ numctrs++;
+ }
+ if (fail)
+ {
+ rc = -1;
+ goto hwc_lookup_wrapup;
+ }
+ }
+
+ if (!numctrs)
+ {
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("No HW counters were specified.\n"));
+ rc = -1;
+ goto hwc_lookup_wrapup;
+ }
+ if (numctrs > cpcx_max_concurrent[forKernel])
+ {
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("The HW counter configuration could not be loaded: More than %d counters were specified\n"), cpcx_max_concurrent[forKernel]);
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("Run \"%s -h\" with no other arguments for more information on HW counters on this system.\n"),
+ (IS_KERNEL (forKernel) ? "er_kernel" : "collect"));
+ rc = -1;
+ goto hwc_lookup_wrapup;
+ }
+
+hwc_lookup_wrapup:
+ free (instr_copy);
+ if (wmsg && strlen (UWbuf))
+ *wmsg = strdup (UWbuf);
+ if (emsg && strlen (UEbuf))
+ *emsg = strdup (UEbuf);
+ if (rc == 0)
+ rc = numctrs;
+ return rc;
+}
+
+extern char *
+hwc_validate_ctrs (int forKernel, Hwcentry *entries[], unsigned numctrs)
+{
+ char UEbuf[1024 * 5];
+ UEbuf[0] = 0;
+
+ /* search for obvious duplicates*/
+ unsigned ii;
+ for (ii = 0; ii < numctrs; ii++)
+ {
+ regno_t reg_a = entries[ii]->reg_num;
+ if (reg_a != REGNO_ANY)
+ {
+ unsigned jj;
+ for (jj = ii + 1; jj < numctrs; jj++)
+ {
+ int reg_b = entries[jj]->reg_num;
+ if (reg_a == reg_b)
+ {
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("Only one HW counter is allowed per register. The following counters use register %d: \n"),
+ reg_a);
+ for (jj = 0; jj < numctrs; jj++)
+ {
+ char buf[256];
+ int reg_b = entries[jj]->reg_num;
+ if (reg_a == reg_b)
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT (" %d. %s\n"), jj + 1,
+ hwc_hwcentry_specd_string (buf, sizeof (buf),
+ entries[jj]));
+ }
+ return strdup (UEbuf);
+ }
+ }
+ }
+ }
+
+ /* test counters */
+ hwcfuncs_errmsg_get (NULL, 0, 1); /* enable errmsg capture */
+ int hwc_rc = hwcfuncs_assign_regnos (entries, numctrs);
+ if (!hwc_rc)
+ hwc_rc = test_hwcs ((const Hwcentry**) entries, numctrs);
+ if (hwc_rc)
+ {
+ if (cpcx_cpuver == CPC_PENTIUM_4_HT || cpcx_cpuver == CPC_PENTIUM_4)
+ {
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("HW counter profiling is disabled unless only one logical CPU per HyperThreaded processor is online (see psradm)\n"));
+ return strdup (UEbuf);
+ }
+ char buf[1024];
+ *buf = 0;
+ char * pch = hwcfuncs_errmsg_get (buf, sizeof (buf), 0); /* get first err msg, disable capture */
+ if (*pch)
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("The HW counter configuration could not be loaded: %s%s"),
+ pch, pch[strlen (pch) - 1] == '\n' ? "" : "\n");
+ else
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("The HW counter configuration could not be loaded\n"));
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("Run \"%s -h\" with no other arguments for more information on HW counters on this system.\n"),
+ (IS_KERNEL (forKernel) ? "er_kernel" : "collect"));
+ return strdup (UEbuf);
+ }
+ return NULL;
+}
+
+extern Hwcentry *
+hwc_post_lookup (Hwcentry * pret_ctr, char *counter, char * int_name, int cpuver)
+{
+ const Hwcentry *pfound;
+ regno_t regno;
+ char *nameOnly = NULL;
+ char *attrs = NULL;
+
+ /* fields in pret_ctr (name and int_name) should already be free */
+ hwcfuncs_parse_ctr (counter, NULL, &nameOnly, &attrs, NULL, &regno);
+
+ /* look for it in the canonical list */
+ pfound = static_table_find (stdlist_get_table (cpuver),
+ nameOnly, int_name, 0, REGNO_ANY);
+ if (!pfound) /* try the generic list */
+ pfound = static_table_find (papi_generic_list,
+ nameOnly, int_name, 0, REGNO_ANY);
+ if (pfound)
+ {
+ /* in standard list */
+ *pret_ctr = *pfound; /* shallow copy */
+ if (pret_ctr->int_name)
+ {
+ // aliased counter
+ pret_ctr->int_name = strdup (pret_ctr->int_name);
+ if (pret_ctr->short_desc == NULL)
+ {
+ // look for short_desc of corresponding raw counter
+ const Hwcentry *praw = static_table_find (stdlist_get_table (cpuver),
+ pret_ctr->int_name, NULL, 0, REGNO_ANY);
+ if (praw && praw->short_desc)
+ pret_ctr->short_desc = strdup (praw->short_desc);
+ }
+ }
+ else
+ pret_ctr->int_name = strdup (counter);
+ if (pret_ctr->reg_num == REGNO_ANY)
+ pret_ctr->reg_num = regno; /* table's regno is a wildcard */
+ }
+ else
+ {
+ /* not a standard counter */
+ *pret_ctr = empty_ctr;
+ pret_ctr->int_name = strdup (counter);
+ pret_ctr->reg_num = regno;
+ }
+
+ /* update the name */
+ if (attrs)
+ {
+ pret_ctr->name = canonical_name (counter);
+ if (pret_ctr->metric)
+ {
+ // metric text is supplied from a table. (User supplied HWC alias)
+ // Append user-supplied attributes to metric name:
+ size_t len = strlen (pret_ctr->metric) + strlen (attrs) + 4;
+ char *pch = calloc (len, 1);
+ if (pch)
+ snprintf (pch, len, "%s (%s)", pret_ctr->metric, attrs);
+ pret_ctr->metric = pch; // leaks
+ }
+ }
+ else
+ pret_ctr->name = strdup (nameOnly);
+
+ if (pfound)
+ hwcentry_print (DBG_LT2, "hwctable: hwc_post_lookup: found: ", pret_ctr);
+ else
+ hwcentry_print (DBG_LT2, "hwctable: hwc_post_lookup: default: ", pret_ctr);
+ free (attrs);
+ free (nameOnly);
+ return pret_ctr;
+}
+
+static const char *
+hwc_on_lo_hi (const Hwcentry *pctr)
+{
+ char* rate;
+ {
+ switch (pctr->min_time)
+ {
+ case (HWCTIME_LO):
+ rate = NTXT ("lo");
+ break;
+ case (HWCTIME_ON):
+ rate = NTXT ("on");
+ break;
+ case (HWCTIME_HI):
+ rate = NTXT ("hi");
+ break;
+ case (0):
+ rate = NULL; // null => use interval count
+ break;
+ default:
+ case (HWCTIME_TBD):
+ rate = NTXT ("on");
+ break;
+ }
+ }
+ return rate; //strdup( rate );
+}
+
+extern char *
+hwc_rate_string (const Hwcentry *pctr, int force_numeric)
+{
+ const char * rateString = hwc_on_lo_hi (pctr);
+ char buf[128];
+ if (!rateString || force_numeric)
+ {
+ snprintf (buf, sizeof (buf), NTXT ("%d"), pctr->val);
+ rateString = buf;
+ }
+ return strdup (rateString);
+}
+
+static char metricbuf[2048];
+
+extern char *
+hwc_i18n_metric (const Hwcentry *pctr)
+{
+ if (pctr->metric != NULL)
+ snprintf (metricbuf, sizeof (metricbuf), NTXT ("%s"), PTXT (pctr->metric));
+ else if (pctr->name != NULL)
+ snprintf (metricbuf, sizeof (metricbuf), GTXT ("%s Events"), pctr->name);
+ else if (pctr->int_name != NULL)
+ snprintf (metricbuf, sizeof (metricbuf), GTXT ("%s Events"), pctr->int_name);
+ else
+ snprintf (metricbuf, sizeof (metricbuf), GTXT ("Undefined Events"));
+ return metricbuf;
+}
+
+/* return cpu version, should only be called when about to generate an experiment,
+ not when reading back an experiment */
+#if 0 /* called by ... */
+. / perfan / collect / src / collect.cc : start : 245 : cpuver = hwc_get_cpc_cpuver ();
+. / ccr_components / Collector_Interface / collctrl.cc : constructor : 202 : cpcx_cpuver = hwc_get_cpc_cpuver ();
+. / perfan / dbe / src / Dbe.cc : 3041 : JApplication::cpuver = hwc_get_cpc_cpuver ();
+. / perfan / dbe / src / Dbe.cc : 3164 : JApplication::cpuver = hwc_get_cpc_cpuver ();
+
+note:
+cpc_getcpuver () : only papi, ostest, this and hwprofile.c call it
+#endif
+int
+hwc_get_cpc_cpuver ()
+{
+ setup_cpcx ();
+ return cpcx_cpuver;
+}
+
+extern char*
+hwc_get_cpuname (char *buf, size_t buflen)
+{
+ setup_cpcx ();
+ if (!buf || !buflen)
+ return buf;
+ buf[0] = 0;
+ if (cpcx_cciname)
+ {
+ strncpy (buf, cpcx_cciname, buflen - 1);
+ buf[buflen - 1] = 0;
+ }
+ return buf;
+}
+
+extern char*
+hwc_get_docref (char *buf, size_t buflen)
+{
+ setup_cpcx ();
+ if (!buf || !buflen)
+ return buf;
+ buf[0] = 0;
+ if (cpcx_docref)
+ {
+ strncpy (buf, cpcx_docref, buflen - 1);
+ buf[buflen - 1] = 0;
+ }
+ return buf;
+}
+
+//TBR:
+
+extern char*
+hwc_get_default_cntrs ()
+{
+ setup_cpcx ();
+ if (cpcx_default_hwcs[0] != NULL)
+ return strdup (cpcx_default_hwcs[0]); // TBR deprecate this
+ return NULL;
+}
+
+extern char*
+hwc_get_default_cntrs2 (int forKernel, int style)
+{
+ setup_cpcx ();
+ if (!VALID_FOR_KERNEL (forKernel))
+ return NULL;
+ char *cpcx_default = cpcx_default_hwcs[forKernel];
+ if (cpcx_default == NULL || cpcx_npics == 0)
+ return NULL;
+ if (style == 1)
+ return strdup (cpcx_default);
+
+ // style == 2
+ // we will replace "," delimiters with " -h " (an extra 3 chars per HWC)
+ char *s = (char *) malloc (strlen (cpcx_default) + 3 * cpcx_npics);
+ if (s == NULL) return s;
+ char *p = s;
+ char *q = cpcx_default;
+ int i;
+ for (i = 0; i < cpcx_npics; i++)
+ {
+ int qlen = strlen (q);
+ if (qlen == 0)
+ {
+ p[0] = '\0';
+ break;
+ }
+ // add " -h " if not the first HWC
+ if (i != 0)
+ {
+ p[0] = ' ';
+ p[1] = '-';
+ p[2] = 'h';
+ p[3] = ' ';
+ p += 4;
+ }
+
+ // find second comma
+ char *r = strchr (q, ',');
+ if (r)
+ r = strchr (r + 1, ',');
+
+ // we didn't find one, so the rest of the string is the last HWC
+ if (r == NULL)
+ {
+ // EUGENE could check i==cpcx_npicx-1, but what if it isn't???
+ strcpy (p, q);
+ if (p[qlen - 1] == ',')
+ qlen--;
+ p[qlen] = '\0';
+ break;
+ }
+
+ // copy the HWC, trim trailing comma, add null char
+ qlen = r - q - 1;
+ strcpy (p, q);
+ if (p[qlen - 1] == ',')
+ qlen--;
+ p += qlen;
+ p[0] = '\0';
+ q = r + 1;
+ }
+ return s;
+}
+
+extern char*
+hwc_get_orig_default_cntrs (int forKernel)
+{
+ setup_cpcx ();
+ if (!VALID_FOR_KERNEL (forKernel))
+ return NULL;
+ if (cpcx_orig_default_hwcs[forKernel] != NULL)
+ return strdup (cpcx_orig_default_hwcs[forKernel]);
+ return NULL;
+}
+
+extern const char *
+hwc_memop_string (ABST_type memop)
+{
+ const char * s;
+ switch (memop)
+ {
+ case ABST_NONE:
+ s = "";
+ break;
+ case ABST_LOAD:
+ s = GTXT ("load ");
+ break;
+ case ABST_STORE:
+ s = GTXT ("store ");
+ break;
+ case ABST_LDST:
+ case ABST_US_DTLBM:
+ case ABST_LDST_SPARC64:
+ s = GTXT ("load-store ");
+ break;
+ case ABST_EXACT_PEBS_PLUS1:
+ case ABST_EXACT:
+ s = GTXT ("memoryspace ");
+ break;
+ case ABST_COUNT:
+ s = GTXT ("count ");
+ break;
+ case ABST_NOPC:
+ s = GTXT ("not-program-related ");
+ break;
+ default:
+ s = ""; // was "ABST_UNK", but that's meaningless to users
+ break;
+ }
+ return s;
+}
+
+static const char *
+timecvt_string (int timecvt)
+{
+ if (timecvt > 0)
+ return GTXT ("CPU-cycles");
+ if (timecvt < 0)
+ return GTXT ("ref-cycles");
+ return GTXT ("events");
+}
+
+int show_regs = 0; // The register setting is available on Solaris only
+
+/*
+ * print the specified strings in aligned columns
+ */
+static void
+format_columns (char *buf, int bufsiz, char *s1, char *s2, const char *s3,
+ const char *s4, char *s5, const char *s6)
+{
+ // NULL strings are blanks
+ char *blank = NTXT ("");
+ if (s2 == NULL)
+ s2 = blank;
+ if (s3 == NULL)
+ s3 = blank;
+ if (s6 == NULL)
+ s6 = blank;
+
+ // get the lengths and target widths
+ // (s6 can be as wide as it likes)
+ int l1 = strlen (s1), n1 = 10, l2 = strlen (s2), n2 = 13;
+ int l3 = strlen (s3), n3 = 20, l4 = strlen (s4), n4 = 10, n5;
+ char divide = ' ';
+
+ // adjust widths, stealing from one column to help a neighbor
+ // There's a ragged boundary between s2 and s3.
+ // So push this boundary to the right.
+ n2 += n3 - l3;
+ n3 -= n3 - l3;
+
+ // If s3 is empty, push the boundary over to s4.
+ if (l3 == 0)
+ {
+ n2 += n4 - l4;
+ n4 -= n4 - l4;
+ }
+
+ // If there's enough room to fit s1 and s2, do so.
+ if (n1 + n2 >= l1 + l2)
+ {
+ if (n1 < l1)
+ {
+ n2 -= l1 - n1;
+ n1 += l1 - n1;
+ }
+ if (n2 < l2)
+ {
+ n1 -= l2 - n2;
+ n2 += l2 - n2;
+ }
+ }
+ else
+ {
+ // not enough room, so we need to divide the line
+ n3 += 4 // 4-blank margin
+ + n1 // 1st column
+ + 1 // space between 1st and 2nd columns
+ + n2 // 2nd column
+ + 1; // space between 2nd and 3th columns
+ divide = '\n';
+
+ // make 1st column large enough
+ if (n1 < l1)
+ n1 = l1;
+
+ // width of 2nd column no longer matters since we divided the line
+ n2 = 0;
+ }
+
+ if (show_regs)
+ {
+ // fifth column should be wide enough for regnolist
+ // see function get_regnolist()
+ if (cpcx_npics < 10)
+ n5 = cpcx_npics; // one char per regno
+ else
+ n5 = 16 + 3 * (cpcx_npics - 9); // spaces between regnos and some regnos are 2-char wide
+ // ... and be wide enough for header "regs"
+ if (n5 < 4)
+ n5 = 4;
+
+ // print to buffer
+ // (don't need a space before s4 since historical precedent to have a trailing space in s3)
+ snprintf (buf, bufsiz, "%-*s %-*s%c%*s%*s %-*s %s",
+ n1, s1, n2, s2, divide, n3, s3, n4, s4, n5, s5, s6);
+ }
+ else
+ snprintf (buf, bufsiz, "%-*s %-*s%c%*s%*s %s",
+ n1, s1, n2, s2, divide, n3, s3, n4, s4, s6);
+ for (int i = strlen (buf); i > 0; i--)
+ if (buf[i] == ' ' || buf[i] == '\t')
+ buf[i] = 0;
+ else
+ break;
+}
+
+/* routine to return HW counter string formatted and i18n'd */
+static char *
+hwc_hwcentry_string_internal (char *buf, size_t buflen, const Hwcentry *ctr,
+ int show_short_desc)
+{
+ char stderrbuf[1024];
+ char regnolist[256];
+ if (!buf || !buflen)
+ return buf;
+ buf[0] = 0;
+ if (ctr == NULL)
+ {
+ snprintf (stderrbuf, sizeof (stderrbuf), GTXT ("HW counter not available"));
+ goto hwc_hwcentry_string_done;
+ }
+ char *desc = NULL;
+ if (show_short_desc)
+ desc = ctr->short_desc;
+ if (desc == NULL)
+ desc = ctr->metric ? hwc_i18n_metric (ctr) : NULL;
+ format_columns (stderrbuf, sizeof (stderrbuf), ctr->name, ctr->int_name,
+ hwc_memop_string (ctr->memop), timecvt_string (ctr->timecvt),
+ get_regnolist (regnolist, sizeof (regnolist), ctr->reg_list, 2),
+ desc);
+
+hwc_hwcentry_string_done:
+ strncpy (buf, stderrbuf, buflen - 1);
+ buf[buflen - 1] = 0;
+ return buf;
+}
+
+/* routine to return HW counter string formatted and i18n'd */
+extern char *
+hwc_hwcentry_string (char *buf, size_t buflen, const Hwcentry *ctr)
+{
+ return hwc_hwcentry_string_internal (buf, buflen, ctr, 0);
+}
+
+/* routine to return HW counter string formatted and i18n'd */
+extern char *
+hwc_hwcentry_specd_string (char *buf, size_t buflen, const Hwcentry *ctr)
+{
+ char stderrbuf[1024];
+ const char *memop, *timecvt;
+ char descstr[1024];
+ if (!buf || !buflen)
+ return buf;
+ buf[0] = 0;
+ if (ctr == NULL)
+ {
+ snprintf (stderrbuf, sizeof (stderrbuf), GTXT ("HW counter not available"));
+ goto hwc_hwcentry_specd_string_done;
+ }
+ timecvt = timecvt_string (ctr->timecvt);
+ if (ctr->memop)
+ memop = hwc_memop_string (ctr->memop);
+ else
+ memop = "";
+ if (ctr->metric != NULL) /* a standard counter for a specific register */
+ snprintf (descstr, sizeof (descstr), GTXT (" (`%s'; %s%s)"),
+ hwc_i18n_metric (ctr), memop, timecvt);
+ else /* raw counter */
+ snprintf (descstr, sizeof (descstr), GTXT (" (%s%s)"), memop, timecvt);
+
+ char *rateString = hwc_rate_string (ctr, 1);
+ snprintf (stderrbuf, sizeof (stderrbuf), NTXT ("%s,%s%s"), ctr->name,
+ rateString ? rateString : "", descstr);
+ free (rateString);
+
+hwc_hwcentry_specd_string_done:
+ strncpy (buf, stderrbuf, buflen - 1);
+ buf[buflen - 1] = 0;
+ return buf;
+}
+
+unsigned
+hwc_get_max_regs ()
+{
+ setup_cpcx ();
+ return cpcx_npics;
+}
+
+unsigned
+hwc_get_max_concurrent (int forKernel)
+{
+ setup_cpcx ();
+ if (!VALID_FOR_KERNEL (forKernel))
+ return 0;
+ return cpcx_max_concurrent[forKernel];
+}
+
+char**
+hwc_get_attrs (int forKernel)
+{
+ setup_cpcx ();
+ if (!VALID_FOR_KERNEL (forKernel))
+ return NULL;
+ return cpcx_attrs[forKernel];
+}
+
+Hwcentry **
+hwc_get_std_ctrs (int forKernel)
+{
+ setup_cpcx ();
+ if (!VALID_FOR_KERNEL (forKernel))
+ return NULL;
+ return cpcx_std[forKernel];
+}
+
+Hwcentry **
+hwc_get_raw_ctrs (int forKernel)
+{
+ setup_cpcx ();
+ if (!VALID_FOR_KERNEL (forKernel))
+ return NULL;
+ return cpcx_raw[forKernel];
+}
+
+/* Call an action function for each attribute supported */
+unsigned
+hwc_scan_attrs (void (*action)(const char *attr, const char *desc))
+{
+ setup_cpcx ();
+ int cnt = 0;
+ for (int ii = 0; cpcx_attrs[0] && cpcx_attrs[0][ii]; ii++, cnt++)
+ {
+ if (action)
+ action (cpcx_attrs[0][ii], NULL);
+ }
+ if (!cnt && action)
+ action (NULL, NULL);
+ return cnt;
+}
+
+unsigned
+hwc_scan_std_ctrs (void (*action)(const Hwcentry *))
+{
+ setup_cpcx ();
+ Tprintf (DBG_LT1, "hwctable: hwc_scan_standard_ctrs()...\n");
+ int cnt = 0;
+ for (int ii = 0; cpcx_std[0] && cpcx_std[0][ii]; ii++, cnt++)
+ if (action)
+ action (cpcx_std[0][ii]);
+ if (!cnt && action)
+ action (NULL);
+ return cnt;
+}
+
+/* Call an action function for each counter supported */
+/* action is called with NULL when all counters have been seen */
+unsigned
+hwc_scan_raw_ctrs (void (*action)(const Hwcentry *))
+{
+ setup_cpcx ();
+ Tprintf (DBG_LT1, "hwctable: hwc_scan_raw_ctrs()...\n");
+ int cnt = 0;
+ for (int ii = 0; cpcx_raw[0] && cpcx_raw[0][ii]; ii++, cnt++)
+ if (action)
+ action (cpcx_raw[0][ii]);
+ if (!cnt && action)
+ action (NULL);
+ return cnt;
+}
+
+static void
+hwc_usage_raw_overview_sparc (FILE *f_usage, int cpuver)
+{
+ /* All these cpuver's use cputabs[]==sparc_t5_m6 anyhow. */
+ if ((cpuver == CPC_SPARC_M5) || (cpuver == CPC_SPARC_M6)
+ || (cpuver == CPC_SPARC_T5) || (cpuver == CPC_SPARC_T6))
+ cpuver = CPC_SPARC_M4; // M4 was renamed to M5
+
+ /* While there are small differences between
+ * cputabs[]== sparc_t4
+ * cputabs[]== sparc_t5_m6
+ * they are in HWCs we don't discuss in the overview anyhow.
+ * So just lump them in with T4.
+ */
+ if (cpuver == CPC_SPARC_M4)
+ cpuver = CPC_SPARC_T4;
+
+ /* Check for the cases we support. */
+ if (cpuver != CPC_SPARC_T4 && cpuver != CPC_SPARC_M7 && cpuver != CPC_SPARC_M8)
+ return;
+ fprintf (f_usage, GTXT (" While the above aliases represent the most useful hardware counters\n"
+ " for this processor, a full list of raw (unaliased) counter names appears\n"
+ " below. First is an overview of some of these names.\n\n"));
+ fprintf (f_usage, GTXT (" == Cycles.\n"
+ " Count active cycles with\n"
+ " Cycles_user\n"
+ " Set attributes to choose user, system, and/or hyperprivileged cycles.\n\n"));
+ fprintf (f_usage, GTXT (" == Instructions.\n"
+ " Count instructions when they are committed with:\n"));
+ fprintf (f_usage, NTXT (" Instr_all\n"));
+ if (cpuver != CPC_SPARC_M8)
+ fprintf (f_usage, GTXT (" It is the total of these counters:\n"));
+ else
+ fprintf (f_usage, GTXT (" Some subsets of instructions can be counted separately:\n"));
+ fprintf (f_usage, NTXT (" Branches %s\n"), GTXT ("branches"));
+ fprintf (f_usage, NTXT (" Instr_FGU_crypto %s\n"), GTXT ("Floating Point and Graphics Unit"));
+ fprintf (f_usage, NTXT (" Instr_ld %s\n"), GTXT ("loads"));
+ fprintf (f_usage, NTXT (" Instr_st %s\n"), GTXT ("stores"));
+ fprintf (f_usage, NTXT (" %-19s %s\n"),
+ cpuver == CPC_SPARC_M7 ? NTXT ("Instr_SPR_ring_ops")
+ : NTXT ("SPR_ring_ops"),
+ GTXT ("internal use of SPR ring"));
+ fprintf (f_usage, NTXT (" Instr_other %s\n"), GTXT ("basic arithmetic and logical instructions"));
+ if (cpuver != CPC_SPARC_M8)
+ fprintf (f_usage, GTXT (" Some subsets of these instructions can be counted separately:\n"));
+ fprintf (f_usage, NTXT (" Br_taken %s\n"), GTXT ("Branches that are taken"));
+ fprintf (f_usage, NTXT (" %-19s %s\n"),
+ cpuver == CPC_SPARC_M7 ? NTXT ("Instr_block_ld_st")
+ : NTXT ("Block_ld_st"),
+ GTXT ("block load/store"));
+ fprintf (f_usage, NTXT (" %-19s %s\n"),
+ cpuver == CPC_SPARC_M7 ? NTXT ("Instr_atomic")
+ : NTXT ("Atomics"),
+ GTXT ("atomic instructions"));
+ fprintf (f_usage, NTXT (" %-19s %s\n"),
+ cpuver == CPC_SPARC_M7 ? NTXT ("Instr_SW_prefetch")
+ : NTXT ("SW_prefetch"),
+ GTXT ("prefetches"));
+ fprintf (f_usage, NTXT (" %-19s %s\n"),
+ cpuver == CPC_SPARC_M7 ? NTXT ("Instr_SW_count")
+ : NTXT ("Sw_count_intr"),
+ GTXT ("SW Count instructions (counts special no-op assembler instructions)"));
+ fprintf (f_usage, NTXT ("\n"));
+
+#ifdef TMPLEN
+ compilation error : we're trying to use a macro that's already defined
+#endif
+#define TMPLEN 32
+ char s0[TMPLEN], s1[TMPLEN], s2[TMPLEN], s3[TMPLEN];
+ if (cpuver == CPC_SPARC_M7)
+ {
+ snprintf (s0, TMPLEN, "Commit_0_cyc");
+ snprintf (s1, TMPLEN, "Commit_1_cyc");
+ snprintf (s2, TMPLEN, "Commit_2_cyc");
+ snprintf (s3, TMPLEN, "Commit_1_or_2_cyc");
+ }
+ else
+ {
+ snprintf (s0, TMPLEN, "Commit_0");
+ snprintf (s1, TMPLEN, "Commit_1");
+ snprintf (s2, TMPLEN, "Commit_2");
+ snprintf (s3, TMPLEN, "Commit_1_or_2");
+ }
+#undef TMPLEN
+ fprintf (f_usage, GTXT (" == Commit.\n"
+ " Instructions may be launched speculatively, executed out of order, etc.\n"));
+ if (cpuver != CPC_SPARC_M8)
+ {
+ fprintf (f_usage, GTXT (" We can count the number of cycles during which 0, 1, or 2 instructions are\n"
+ " actually completed and their results committed:\n"));
+ fprintf (f_usage, GTXT (" %s\n"
+ " %s\n"
+ " %s\n"
+ " %s\n"
+ " %s is a useful way of identifying parts of your application with\n"
+ " high-latency instructions.\n\n"),
+ s0, s1, s2, s3, s0);
+ }
+ else
+ {
+ fprintf (f_usage, GTXT (" We can count the number of cycles during which no instructions were\n"
+ " able to commit results using:\n"));
+ fprintf (f_usage, GTXT (" %s\n"
+ " %s is a useful way of identifying parts of your application with\n"
+ " high-latency instructions.\n\n"),
+ s0, s0);
+ }
+
+ fprintf (f_usage, GTXT (" == Cache/memory hierarchy.\n"));
+ if (cpuver == CPC_SPARC_M7)
+ {
+ fprintf (f_usage, GTXT (" In the cache hierarchy:\n"
+ " * Each socket has memory and multiple SPARC core clusters (scc).\n"
+ " * Each scc has an L3 cache and multiple L2 and L1 caches.\n"));
+ fprintf (f_usage, GTXT (" Loads can be counted by where they hit on socket:\n"));
+ fprintf (f_usage, NTXT (" %-22s %s\n"),
+ NTXT ("DC_hit"), GTXT ("hit own L1 data cache"));
+ fprintf (f_usage, NTXT (" %-22s %s\n"),
+ NTXT ("DC_miss_L2_hit"), GTXT ("hit own L2"));
+ fprintf (f_usage, NTXT (" %-22s %s\n"),
+ NTXT ("DC_miss_L3_hit"), GTXT ("hit own L3"));
+ fprintf (f_usage, NTXT (" %-22s %s\n"),
+ NTXT ("DC_miss_nbr_L2_hit"), GTXT ("hit neighbor L2 (same scc)"));
+ fprintf (f_usage, NTXT (" %-22s %s\n"),
+ NTXT ("DC_miss_nbr_scc_hit"), GTXT ("hit neighbor scc (same socket)"));
+ fprintf (f_usage, NTXT (" %-22s %s\n"),
+ NTXT ("DC_miss_nbr_scc_miss"), GTXT ("miss all caches (same socket)"));
+ fprintf (f_usage, GTXT (" These loads can also be grouped:\n"));
+ fprintf (f_usage, NTXT (" %-22s %s\n"),
+ NTXT ("DC_miss"), GTXT ("all - DC_hit"));
+ fprintf (f_usage, NTXT (" %-22s %s\n"),
+ NTXT ("DC_miss_L2_miss"), GTXT ("all - DC_hit - DC_miss_L2_hit"));
+ fprintf (f_usage, NTXT (" %-22s %s\n"),
+ NTXT ("DC_miss_L3_miss"), GTXT ("DC_miss_nbr_scc_hit + DC_miss_nbr_scc_miss"));
+ fprintf (f_usage, GTXT (" Loads that miss all caches on this socket can be counted:\n"));
+ fprintf (f_usage, NTXT (" %-22s %s\n"),
+ NTXT ("DC_miss_remote_scc_hit"), GTXT ("hit cache on different socket"));
+ fprintf (f_usage, NTXT (" %-22s %s\n"),
+ NTXT ("DC_miss_local_mem_hit"), GTXT ("hit local memory (same socket)"));
+ fprintf (f_usage, NTXT (" %-22s %s\n"),
+ NTXT ("DC_miss_remote_mem_hit"), GTXT ("hit remote memory (off socket)"));
+ fprintf (f_usage, GTXT (" These events are for speculative loads, launched in anticipation\n"
+ " of helping performance but whose results might not be committed.\n"));
+#if 0 // was: #if defined(linux). See 22236226 - sparc-Linux: Support basic Memoryspace and Dataspace profiling (capture VADDR)
+ /* 21869427 should not look like memoryspace profiling is supported on Linux */
+ /* 21869424 desire memoryspace profiling on Linux */
+ fprintf (f_usage, GTXT (" To count only data-cache misses that commit, use:\n"));
+ fprintf (f_usage, NTXT (" DC_miss_commit\n"));
+#else
+ fprintf (f_usage, GTXT (" To count only data-cache misses that commit, or for memoryspace profiling,\n"
+ " use the 'memoryspace' counter:\n"));
+ fprintf (f_usage, NTXT (" DC_miss_commit\n"));
+#endif
+ fprintf (f_usage, NTXT ("\n"));
+ }
+ else if (cpuver == CPC_SPARC_M8)
+ {
+ fprintf (f_usage, GTXT (" In the cache hierarchy:\n"
+ " * Each processor has 4 memory controllers and 2 quad core clusters (QCC).\n"
+ " * Each QCC contains 4 cache processor clusters (CPC).\n"
+ " * Each CPC contains 4 cores.\n"
+ " * Each core supports 8 hardware threads.\n"
+ " * The L3 consists of 2 partitions with 1 QCC per partition.\n"
+ ));
+ fprintf (f_usage, GTXT (" Loads can be counted by where they hit on socket:\n"));
+ fprintf (f_usage, NTXT (" %-22s %s\n"),
+ NTXT ("DC_miss_L2_hit"), GTXT ("hit own L2"));
+ fprintf (f_usage, NTXT (" %-22s %s\n"),
+ NTXT ("DC_miss_L3_hit"), GTXT ("hit own L3"));
+ fprintf (f_usage, NTXT (" %-22s %s\n"),
+ NTXT ("DC_miss_L3_dirty_copyback"), GTXT ("hit own L3 but require copyback from L2D"));
+ fprintf (f_usage, NTXT (" %-22s %s\n"),
+ NTXT ("DC_miss_nbr_L3_hit"), GTXT ("hit neighbor L3 (same socket)"));
+ fprintf (f_usage, GTXT (" Loads that miss all caches on this socket can be counted:\n"));
+ fprintf (f_usage, NTXT (" %-22s %s\n"),
+ NTXT ("DC_miss_remote_L3_hit"), GTXT ("hit cache on different socket"));
+ fprintf (f_usage, NTXT (" %-22s %s\n"),
+ NTXT ("DC_miss_local_mem_hit"), GTXT ("hit local memory (same socket)"));
+ fprintf (f_usage, NTXT (" %-22s %s\n"),
+ NTXT ("DC_miss_remote_mem_hit"), GTXT ("hit remote memory (off socket)"));
+ fprintf (f_usage, GTXT (" These events are for speculative loads, launched in anticipation\n"
+ " of helping performance but whose results might not be committed.\n"));
+#if 0 // was: #if defined(linux). See 22236226 - sparc-Linux: Support basic Memoryspace and Dataspace profiling (capture VADDR)
+ /* 21869427 should not look like memoryspace profiling is supported on Linux */
+ /* 21869424 desire memoryspace profiling on Linux */
+ fprintf (f_usage, GTXT (" To count only data-cache misses that commit, use:\n"));
+ fprintf (f_usage, NTXT (" DC_miss_commit\n"));
+#else
+ fprintf (f_usage, GTXT (" To count only data-cache misses that commit, or for memoryspace profiling,\n"
+ " use the 'memoryspace' counter:\n"));
+ fprintf (f_usage, NTXT (" DC_miss_commit\n"));
+#endif
+ fprintf (f_usage, NTXT ("\n"));
+ }
+ else
+ {
+ fprintf (f_usage, GTXT (" Total data-cache misses can be counted with:\n"));
+ fprintf (f_usage, NTXT (" DC_miss DC_miss_nospec\n"));
+ fprintf (f_usage, GTXT (" They are the totals of misses that hit in L2/L3 cache, local memory, or\n"
+ " remote memory:\n"));
+ fprintf (f_usage, NTXT (" DC_miss_L2_L3_hit DC_miss_L2_L3_hit_nospec\n"));
+ fprintf (f_usage, NTXT (" DC_miss_local_hit DC_miss_local_hit_nospec\n"));
+ fprintf (f_usage, NTXT (" DC_miss_remote_L3_hit DC_miss_remote_L3_hit_nospec\n"));
+ fprintf (f_usage, GTXT (" The events in the left column include speculative operations. Use the\n"
+ " right-hand _nospec events to count only data accesses that commit\n"
+ " or for memoryspace profiling.\n\n"));
+ }
+
+ fprintf (f_usage, GTXT (" == TLB misses.\n"
+ " The Translation Lookaside Buffer (TLB) is a cache of virtual-to-physical\n"
+ " page translations."));
+ fprintf (f_usage, GTXT (" If a virtual address (VA) is not represented in the\n"
+ " TLB, an expensive hardware table walk (HWTW) must be conducted."));
+ fprintf (f_usage, GTXT (" If the\n"
+ " page is still not found, a trap results. There is a data TLB (DTLB) and\n"
+ " an instruction TLB (ITLB).\n\n"));
+ fprintf (f_usage, GTXT (" TLB misses can be counted by:\n"));
+ fprintf (f_usage, NTXT (" %s\n"),
+ cpuver == CPC_SPARC_M7 ?
+ NTXT ("DTLB_HWTW_search ITLB_HWTW_search") :
+ cpuver == CPC_SPARC_M8 ?
+ NTXT ("DTLB_HWTW ITLB_HWTW") :
+ NTXT ("DTLB_miss_asynch ITLB_miss_asynch"));
+ fprintf (f_usage, GTXT (" or broken down by page size:\n"));
+ fprintf (f_usage, NTXT (" %s"),
+ cpuver == CPC_SPARC_M7 ?
+ NTXT ("DTLB_HWTW_hit_8K ITLB_HWTW_hit_8K\n"
+ " DTLB_HWTW_hit_64K ITLB_HWTW_hit_64K\n"
+ " DTLB_HWTW_hit_4M ITLB_HWTW_hit_4M\n") :
+ NTXT ("DTLB_fill_8KB ITLB_fill_8KB\n"
+ " DTLB_fill_64KB ITLB_fill_64KB\n"
+ " DTLB_fill_4MB ITLB_fill_4MB\n"));
+ fprintf (f_usage, NTXT (" %s\n\n"),
+ cpuver == CPC_SPARC_M7 ?
+ NTXT ("DTLB_HWTW_hit_256M ITLB_HWTW_hit_256M\n"
+ " DTLB_HWTW_hit_2G_16G ITLB_HWTW_hit_2G_16G\n"
+ " DTLB_HWTW_miss_trap ITLB_HWTW_miss_trap") :
+ cpuver == CPC_SPARC_M8 ?
+ NTXT ("DTLB_HWTW_hit_256M ITLB_HWTW_hit_256M\n"
+ " DTLB_HWTW_hit_16G ITLB_HWTW_hit_16G\n"
+ " DTLB_HWTW_hit_1T ITLB_HWTW_hit_1T") :
+ NTXT ("DTLB_fill_256MB ITLB_fill_256MB\n"
+ " DTLB_fill_2GB ITLB_fill_2GB\n"
+ " DTLB_fill_trap ITLB_fill_trap"));
+ if (cpuver == CPC_SPARC_M8)
+ {
+ fprintf (f_usage, GTXT (" TLB traps, which can require hundreds of cycles, can be counted with:\n"));
+ fprintf (f_usage, NTXT (" %s\n\n"),
+ NTXT ("DTLB_fill_trap ITLB_fill_trap"));
+ }
+
+ fprintf (f_usage, GTXT (" == Branch misprediction.\n"
+ " Count branch mispredictions with:\n"
+ " Br_mispred\n"
+ " It is the total of:\n"
+ " Br_dir_mispred direction was mispredicted\n"
+ " %s target was mispredicted\n"
+ "\n"), cpuver == CPC_SPARC_M7 ? NTXT ("Br_tgt_mispred") : NTXT ("Br_trg_mispred"));
+
+ fprintf (f_usage, GTXT (" == RAW hazards.\n"
+ " A read-after-write (RAW) delay occurs when we attempt to read a datum\n"
+ " before an earlier write has had time to complete:\n"));
+ if (cpuver == CPC_SPARC_M8)
+ {
+ fprintf (f_usage, NTXT (" RAW_hit\n"));
+ fprintf (f_usage, GTXT (" RAW_hit events can be broken down into:\n"));
+ }
+ else
+ {
+ fprintf (f_usage, NTXT (" RAW_hit_st_q~emask=0xf\n"));
+ fprintf (f_usage, GTXT (" The mask 0xf counts the total of all types such as:\n"));
+ }
+ fprintf (f_usage, NTXT (" RAW_hit_st_buf write is still in store buffer\n"
+ " RAW_hit_st_q write is still in store queue\n"
+ "\n"));
+ if (cpuver == CPC_SPARC_M7)
+ {
+ fprintf (f_usage, GTXT (" == Flush.\n"
+ " One can count the number of times the pipeline must be flushed:\n"));
+ fprintf (f_usage, NTXT (" %-22s %s\n"),
+ NTXT ("Flush_L3_miss"), GTXT ("load missed L3 and >1 strand is active on the core"));
+ fprintf (f_usage, NTXT (" %-22s %s\n"),
+ NTXT ("Flush_br_mispred"), GTXT ("branch misprediction"));
+ fprintf (f_usage, NTXT (" %-22s %s\n"),
+ NTXT ("Flush_arch_exception"), GTXT ("SPARC exceptions and trap entry/return"));
+ fprintf (f_usage, NTXT (" %-22s %s\n"),
+ NTXT ("Flush_other"), GTXT ("state change to/from halted/paused"));
+ fprintf (f_usage, NTXT ("\n"));
+ }
+}
+
+static void
+hwc_usage_internal (int forKernel, FILE *f_usage, const char *cmd, const char *dataspace_msg, int show_syntax, int show_short_desc)
+{
+ if (!VALID_FOR_KERNEL (forKernel))
+ return;
+ char cpuname[128];
+ hwc_get_cpuname (cpuname, 128);
+ Hwcentry** raw_ctrs = hwc_get_raw_ctrs (forKernel);
+ int has_raw_ctrs = (raw_ctrs && raw_ctrs[0]);
+ Hwcentry** std_ctrs = hwc_get_std_ctrs (forKernel);
+ int has_std_ctrs = (std_ctrs && std_ctrs[0]);
+ unsigned hwc_maxregs = hwc_get_max_concurrent (forKernel);
+ int cpuver = hwc_get_cpc_cpuver ();
+ if (hwc_maxregs != 0)
+ {
+ if (show_syntax)
+ {
+ fprintf (f_usage, GTXT ("\nSpecifying HW counters on `%s' (cpuver=%d):\n\n"), cpuname, cpuver);
+ fprintf (f_usage, GTXT (" -h {auto|lo|on|hi}\n"));
+ fprintf (f_usage, GTXT ("\tturn on default set of HW counters at the specified rate\n"));
+ if (hwc_maxregs == 1)
+ {
+ fprintf (f_usage, GTXT (" -h <ctr_def>\n"));
+ fprintf (f_usage, GTXT ("\tspecify HW counter profiling for one HW counter only\n"));
+ }
+ else
+ {
+ fprintf (f_usage, GTXT (" -h <ctr_def> [-h <ctr_def>]...\n"));
+ fprintf (f_usage, GTXT (" -h <ctr_def>[,<ctr_def>]...\n"));
+ fprintf (f_usage, GTXT ("\tspecify HW counter profiling for up to %u HW counters\n"), hwc_maxregs);
+ }
+ fprintf (f_usage, NTXT ("\n"));
+ }
+ else
+ {
+ fprintf (f_usage, GTXT ("\nSpecifying HW counters on `%s' (cpuver=%d)\n\n"), cpuname, cpuver);
+ if (hwc_maxregs == 1)
+ fprintf (f_usage, GTXT (" Hardware counter profiling is supported for only one counter.\n"));
+ else
+ fprintf (f_usage, GTXT (" Hardware counter profiling is supported for up to %u HW counters.\n"), hwc_maxregs);
+ }
+ }
+ else
+ {
+ if (!IS_KERNEL (forKernel))
+ { // EUGENE I don't see why we don't also use this for er_kernel
+ char buf[1024];
+ *buf = 0;
+ char *pch = hwcfuncs_errmsg_get (buf, sizeof (buf), 0);
+ if (*pch)
+ fprintf (f_usage, GTXT ("HW counter profiling is not supported on this system: %s%s"),
+ pch, pch[strlen (pch) - 1] == '\n' ? "" : "\n");
+ else
+ fprintf (f_usage, GTXT ("HW counter profiling is not supported on this system\n"));
+ }
+ return;
+ }
+
+ /* At this point, we know we have counters */
+ char**hwc_attrs = hwc_get_attrs (forKernel);
+ int has_attrs = (hwc_attrs && hwc_attrs[0]);
+ if (show_syntax)
+ {
+ const char *reg_s = show_regs ? "[/<reg#>]" : "";
+ const char *attr_s = has_attrs ? "[[~<attr>=<val>]...]" : "";
+ fprintf (f_usage, GTXT (" <ctr_def> == <ctr>%s%s,[<rate>]\n"), attr_s, reg_s);
+ if (dataspace_msg)
+ fprintf (f_usage, NTXT ("%s"), dataspace_msg);
+ fprintf (f_usage, GTXT (" <ctr>\n"));
+ fprintf (f_usage, GTXT (" counter name, "));
+ }
+ else
+ fprintf (f_usage, GTXT (" Counter name "));
+ fprintf (f_usage, GTXT ("must be selected from the available counters\n"
+ " listed below. On most systems, if a counter is not listed\n"
+ " below, it may still be specified by its numeric value.\n"));
+ if (cpcx_has_precise[forKernel])
+ {
+ if (!forKernel)
+ fprintf (f_usage, GTXT (" Counters labeled as 'memoryspace' in the list below will\n"
+ " collect memoryspace data by default.\n"));
+ }
+ fprintf (f_usage, GTXT ("\n"));
+ if (has_attrs)
+ {
+ if (show_syntax)
+ {
+ fprintf (f_usage, GTXT (" ~<attr>=<val>\n"));
+ fprintf (f_usage, GTXT (" optional attribute where <val> can be in decimal or hex\n"
+ " format, and <attr> can be one of: \n"));
+ }
+ else
+ fprintf (f_usage, GTXT (" Optional attribute where <val> can be in decimal or hex\n"
+ " format, and <attr> can be one of: \n"));
+ for (char **pattr = hwc_attrs; *pattr; pattr++)
+ fprintf (f_usage, NTXT (" `%s'\n"), *pattr);
+ if (show_syntax)
+ fprintf (f_usage, GTXT (" Multiple attributes may be specified, and each must be preceded by a ~.\n\n"));
+ else
+ fprintf (f_usage, GTXT (" Multiple attributes may be specified.\n\n"));
+ if (IS_KERNEL (forKernel))
+ fprintf (f_usage, GTXT (" Other attributes may be supported by the chip, but are not supported by DTrace and will be ignored by er_kernel.\n\n"));
+ }
+
+ if (show_syntax)
+ {
+ if (show_regs)
+ fprintf (f_usage, GTXT (" /<reg#>\n"
+ " forces use of a specific hardware register. (Solaris only)\n"
+ " If not specified, %s will attempt to place the counter into the first\n"
+ " available register and as a result may be unable to place\n"
+ " subsequent counters due to register conflicts.\n"
+ " The / in front of the register number is required if a register is specified.\n\n"),
+ cmd);
+
+ fprintf (f_usage, GTXT (" <rate> == {auto|lo|on|hi}\n"));
+ fprintf (f_usage, GTXT (" `auto' (default) match the rate used by clock profiling.\n"));
+ fprintf (f_usage, GTXT (" If clock profiling is disabled, use `on'.\n"));
+ fprintf (f_usage, GTXT (" `lo' per-thread maximum rate of ~10 samples/second\n"));
+ fprintf (f_usage, GTXT (" `on' per-thread maximum rate of ~100 samples/second\n"));
+ fprintf (f_usage, GTXT (" `hi' per-thread maximum rate of ~1000 samples/second\n\n"));
+ fprintf (f_usage, GTXT (" <rate> == <interval>\n"));
+ fprintf (f_usage, GTXT (" event interval; see collect (1) for details\n\n"));
+
+ fprintf (f_usage, GTXT (" A comma ',' followed immediately by white space may be omitted.\n\n"));
+ }
+
+ /* default counters */
+ fprintf (f_usage, GTXT ("Default set of HW counters:\n\n"));
+ char * defctrs = hwc_get_default_cntrs2 (forKernel, 1);
+ if (defctrs == NULL)
+ fprintf (f_usage, GTXT (" No default HW counter set defined for this system.\n"));
+ else if (strlen (defctrs) == 0)
+ {
+ char *s = hwc_get_orig_default_cntrs (forKernel);
+ fprintf (f_usage, GTXT (" The default HW counter set (%s) defined for %s cannot be loaded on this system.\n"),
+ s, cpuname);
+ free (s);
+ free (defctrs);
+ }
+ else
+ {
+ char *defctrs2 = hwc_get_default_cntrs2 (forKernel, 2);
+ fprintf (f_usage, GTXT (" -h %s\n"), defctrs);
+ free (defctrs2);
+ free (defctrs);
+ }
+
+ /* long listings */
+ char tmp[1024];
+ if (has_std_ctrs)
+ {
+ fprintf (f_usage, GTXT ("\nAliases for most useful HW counters:\n\n"));
+ format_columns (tmp, 1024, "alias", "raw name", "type ", "units", "regs", "description");
+ fprintf (f_usage, NTXT (" %s\n\n"), tmp);
+ for (Hwcentry **pctr = std_ctrs; *pctr; pctr++)
+ {
+ Hwcentry *ctr = *pctr;
+ hwc_hwcentry_string_internal (tmp, sizeof (tmp), ctr, 0);
+ fprintf (f_usage, NTXT (" %s\n"), tmp);
+ }
+ }
+ if (has_raw_ctrs)
+ {
+ fprintf (f_usage, GTXT ("\nRaw HW counters:\n\n"));
+ hwc_usage_raw_overview_sparc (f_usage, cpuver);
+ format_columns (tmp, 1024, "name", NULL, "type ", "units", "regs", "description");
+ fprintf (f_usage, NTXT (" %s\n\n"), tmp);
+ for (Hwcentry **pctr = raw_ctrs; *pctr; pctr++)
+ {
+ Hwcentry *ctr = *pctr;
+ hwc_hwcentry_string_internal (tmp, sizeof (tmp), ctr, show_short_desc);
+ fprintf (f_usage, NTXT (" %s\n"), tmp);
+ }
+ }
+
+ /* documentation notice */
+ hwc_get_docref (tmp, 1024);
+ if (strlen (tmp))
+ fprintf (f_usage, NTXT ("\n%s\n"), tmp);
+}
+
+/* Print a description of "-h" usage, largely common to collect and er_kernel. */
+void
+hwc_usage (int forKernel, const char *cmd, const char *dataspace_msg)
+{
+ hwc_usage_internal (forKernel, stdout, cmd, dataspace_msg, 1, 0);
+}
+
+void
+hwc_usage_f (int forKernel, FILE *f, const char *cmd, const char *dataspace_msg, int show_syntax, int show_short_desc)
+{
+ hwc_usage_internal (forKernel, f, cmd, dataspace_msg, show_syntax, show_short_desc);
+}
+
+/*---------------------------------------------------------------------------*/
+/* init functions */
+
+static char* supported_pebs_counters[] = {
+ "mem_inst_retired.latency_above_threshold",
+ "mem_trans_retired.load_latency",
+ "mem_trans_retired.precise_store",
+ NULL
+};
+
+/* callback, (see setup_cpc()) called for each valid regno/name combo */
+
+/* builds rawlist,, creates and updates reg_list[] arrays in stdlist table */
+static void
+hwc_cb (uint_t cpc_regno, const char *name)
+{
+ regno_t regno = cpc_regno; /* convert type */
+ list_add (&unfiltered_raw, regno, name);
+}
+
+/* input:
+ * forKernel: 1 - generate lists for er_kernel, 0 - generate lists for collect
+ *
+ * raw_orig: HWCs as generated by hwc_cb()
+ * output:
+ * pstd_out[], praw_out[]: malloc'd array of pointers to malloc'd hwcentry, or NULL
+ */
+static void
+hwc_process_raw_ctrs (int forKernel, Hwcentry ***pstd_out,
+ Hwcentry ***praw_out, Hwcentry ***phidden_out,
+ Hwcentry**static_tables, Hwcentry **raw_unfiltered_in)
+{
+ // set up output buffers
+ ptr_list s_outbufs[3];
+ ptr_list *std_out = &s_outbufs[0];
+ ptr_list_init (std_out);
+ ptr_list *raw_out = &s_outbufs[1];
+ ptr_list_init (raw_out);
+ ptr_list *hidden_out = &s_outbufs[2];
+ ptr_list_init (hidden_out);
+
+#define NUM_TABLES 3
+ ptr_list table_copy[NUM_TABLES]; // copy of data from static tables. [0]std, [1]generic, and [2]hidden
+ for (int tt = 0; tt < NUM_TABLES; tt++)
+ ptr_list_init (&table_copy[tt]);
+
+ // copy records from std [0] and generic [1] static input tables into table_copy[0],[1],or[2]
+ for (int tt = 0; tt < 2; tt++)
+ for (Hwcentry *pctr = static_tables[tt]; pctr && pctr->name; pctr++)
+ if (is_hidden_alias (pctr))
+ list_append_shallow_copy (&table_copy[2], pctr); // hidden list
+ else
+ list_append_shallow_copy (&table_copy[tt], pctr);
+
+ // copy raw_unfiltered_in to raw_out
+ for (int ii = 0; raw_unfiltered_in && raw_unfiltered_in[ii]; ii++)
+ {
+ Hwcentry *pctr = raw_unfiltered_in[ii];
+ // filter out raw counters that don't work correctly
+
+#ifdef WORKAROUND_6231196_NIAGARA1_NO_CTR_0
+ if (cpcx_cpuver == CPC_ULTRA_T1)
+ if (!regno_is_valid (pctr, 1))
+ continue; /* Niagara can not profile on register zero; skip this */
+#endif
+ // remove specific PEBs counters when back end doesn't support sampling
+ const char *name = pctr->name;
+ if ((cpcx_support_bitmask & HWCFUNCS_SUPPORT_PEBS_SAMPLING) == 0 || forKernel)
+ {
+ int skip = 0;
+ for (int ii = 0; supported_pebs_counters[ii]; ii++)
+ if (strcmp (supported_pebs_counters[ii], name) == 0)
+ {
+ skip = 1;
+ break;
+ }
+ if (skip)
+ continue;
+ }
+
+ Hwcentry *pnew = list_append_shallow_copy (raw_out, pctr);
+#ifdef WORKAROUND_6231196_NIAGARA1_NO_CTR_0
+ if (cpcx_cpuver == CPC_ULTRA_T1)
+ {
+ free (pnew->reg_list);
+ pnew->reg_list = NULL;
+ regno_add (pnew, 1); // only allow register 1
+ }
+#endif
+ } // raw_unfiltered_in
+
+ // Scan raw counters to populate Hwcentry fields from matching static_tables entries
+ // Also populate reg_list for aliases found in table_copy[]
+ for (int uu = 0; uu < raw_out->sz; uu++)
+ {
+ Hwcentry *praw = (Hwcentry*) raw_out->array[uu];
+ Hwcentry *pstd = NULL; // set if non-alias entry from std table matches
+ char *name = praw->name;
+ /* in the standard counter and generic lists,
+ update reg_list for all matching items */
+ for (int tt = 0; tt < NUM_TABLES; tt++)
+ { // std, generic, and hidden
+ if (table_copy[tt].sz == 0)
+ continue;
+ Hwcentry **array = (Hwcentry**) table_copy[tt].array;
+ for (int jj = 0; array[jj]; jj++)
+ { // all table counters
+ Hwcentry *pctr = array[jj];
+ char *pname;
+ if (pctr->int_name)
+ pname = pctr->int_name;
+ else
+ pname = pctr->name;
+ if (!is_same (name, pname, '~'))
+ continue;
+
+ /* truncated pname matches <name>... */
+ // check to see if table entry applies only to specific register
+ int specific_reg_num_only = 0;
+ if (pctr->reg_num != REGNO_ANY)
+ {
+ // table entry applies only to specific register
+ if (!regno_is_valid (praw, pctr->reg_num))
+ continue;
+ specific_reg_num_only = 1;
+ }
+
+ // Match!
+ // Update cpu_table_copy's supported registers
+ if (specific_reg_num_only)
+ regno_add (pctr, pctr->reg_num);
+ else
+ pctr->reg_list = praw->reg_list;
+
+ if (!is_visible_alias (pctr) && !is_hidden_alias (pctr))
+ {
+ // Note: we could expand criteria to also allow aliases to set default rates for raw HWCs
+ /* This is an 'internal' raw counter */
+ if (!pstd)
+ pstd = pctr; /* use info as a template when adding to raw list */
+ else
+ hwcentry_print (DBG_LT0, "hwctable: hwc_cb: Warning: "
+ "counter %s appears in table more than once: ",
+ pstd);
+ }
+ }/* for table rows */
+ }/* for std and generic tables */
+
+ if (pstd)
+ {
+ /* the main table had an entry that matched <name> exactly */
+ /* Apply the main table entry as a template */
+ *praw = *pstd;
+ }
+ }/* for (raw_out) */
+
+ // update std_out and hidden_out
+ for (int tt = 0; tt < NUM_TABLES; tt++)
+ {
+ if (tt == 1 /*skip std_raw*/ || table_copy[tt].sz == 0)
+ continue;
+ Hwcentry *pctr;
+ for (int ii = 0; (pctr = table_copy[tt].array[ii]); ii++)
+ {
+ // prune unsupported rows from std table
+ if (!is_visible_alias (pctr) && !is_hidden_alias (pctr))
+ continue; // only aliases
+ if (REG_LIST_IS_EMPTY (pctr->reg_list))
+ {
+ if (is_numeric_alias (pctr))
+ {
+#if 1 //22844570 DTrace cpc provider does not accept numeric counter names
+ if (forKernel)
+ continue;
+#endif
+ regno_add (pctr, REGNO_ANY); // hwcs specified by number allowed on any register
+ }
+ else
+ continue;
+ }
+
+ ptr_list *dest = (tt == 0) ? std_out : hidden_out;
+ Hwcentry *isInList;
+ if (pctr->short_desc == NULL)
+ {
+ isInList = ptrarray_find_by_name ((Hwcentry**) raw_out->array, pctr->int_name);
+ if (isInList)
+ pctr->short_desc = isInList->short_desc; // copy the raw counter's detailed description
+ }
+ isInList = ptrarray_find_by_name ((Hwcentry**) dest->array, pctr->name);
+ if (isInList)
+ hwcentry_print (DBG_LT0, "hwctable: hwc_cb: Warning: "
+ "counter %s appears in alias list more than once: ",
+ pctr);
+ else
+ list_append_shallow_copy (dest, pctr);
+ }
+ }
+ for (int tt = 0; tt < NUM_TABLES; tt++)
+ ptr_list_free (&table_copy[tt]);
+
+ if (forKernel)
+ {
+ // for er_kernel, use baseline value of PRELOAD_DEF_ERKERNEL instead of PRELOAD_DEF
+ for (int tt = 0; tt < 3; tt++)
+ { // std_out-0, raw_out-1, hidden_out-2
+ Hwcentry** hwcs = (Hwcentry**) (s_outbufs[tt].array);
+ for (int ii = 0; hwcs && hwcs[ii]; ii++)
+ {
+ Hwcentry *hwc = hwcs[ii];
+ if (hwc->val == PRELOAD_DEF)
+ hwc->val = PRELOAD_DEF_ERKERNEL;
+ }
+ }
+ }
+ *pstd_out = (Hwcentry**) std_out->array;
+ *praw_out = (Hwcentry**) raw_out->array;
+ *phidden_out = (Hwcentry**) hidden_out->array;
+}
+
+/* callback, (see setup_cpc()) called for each valid attribute */
+/* builds attrlist */
+static void
+attrs_cb (const char *attr)
+{
+ Tprintf (DBG_LT3, "hwctable: attrs_cb(): %s\n", attr);
+ if (strcmp (attr, "picnum") == 0)
+ return; /* don't make this attribute available to users */
+ ptr_list_add (&unfiltered_attrs, (void*) strdup (attr));
+}
+
+/* returns true if attribute is valid for this platform */
+static int
+attr_is_valid (int forKernel, const char *attr)
+{
+ setup_cpcx ();
+ if (!VALID_FOR_KERNEL (forKernel) || !cpcx_attrs[forKernel])
+ return 0;
+ for (int ii = 0; cpcx_attrs[forKernel][ii]; ii++)
+ if (strcmp (attr, cpcx_attrs[forKernel][ii]) == 0)
+ return 1;
+ return 0;
+}
diff --git a/gprofng/common/opteron_pcbe.c b/gprofng/common/opteron_pcbe.c
new file mode 100644
index 00000000000..d4799452026
--- /dev/null
+++ b/gprofng/common/opteron_pcbe.c
@@ -0,0 +1,448 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+/*
+ * This file contains preset event names from the Performance Application
+ * Programming Interface v3.5 which included the following notice:
+ *
+ * Copyright (c) 2005,6
+ * Innovative Computing Labs
+ * Computer Science Department,
+ * University of Tennessee,
+ * Knoxville, TN.
+ * All Rights Reserved.
+ *
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of the University of Tennessee nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ *
+ * This open source software license conforms to the BSD License template.
+ */
+
+/*
+ * Performance Counter Back-End for AMD Opteron and AMD Athlon 64 processors.
+ */
+
+#include <sys/types.h>
+#include "hwcdrv.h"
+
+#define CPU /* used by cpuid_get*() functions */
+
+typedef struct _amd_event
+{
+ char *name;
+ uint16_t emask; /* Event mask setting */
+ uint8_t umask_valid; /* Mask of unreserved UNIT_MASK bits */
+} amd_event_t;
+
+typedef struct _amd_generic_event
+{
+ char *name;
+ char *event;
+ uint8_t umask;
+} amd_generic_event_t;
+
+#define EV_END { NULL, 0, 0 }
+#define GEN_EV_END { NULL, NULL, 0 }
+
+#define AMD_cmn_events \
+ { "FP_dispatched_fpu_ops", 0x00, 0x3F }, \
+ { "FP_cycles_no_fpu_ops_retired", 0x01, 0x0 }, \
+ { "FP_dispatched_fpu_ops_ff", 0x02, 0x0 }, \
+ { "LS_seg_reg_load", 0x20, 0x7F }, \
+ { "LS_uarch_resync_self_modify", 0x21, 0x0 }, \
+ { "LS_uarch_resync_snoop", 0x22, 0x0 }, \
+ { "LS_buffer_2_full", 0x23, 0x0 }, \
+ { "LS_retired_cflush", 0x26, 0x0 }, \
+ { "LS_retired_cpuid", 0x27, 0x0 }, \
+ { "DC_access", 0x40, 0x0 }, \
+ { "DC_miss", 0x41, 0x0 }, \
+ { "DC_refill_from_L2", 0x42, 0x1F }, \
+ { "DC_refill_from_system", 0x43, 0x1F }, \
+ { "DC_misaligned_data_ref", 0x47, 0x0 }, \
+ { "DC_uarch_late_cancel_access", 0x48, 0x0 }, \
+ { "DC_uarch_early_cancel_access", 0x49, 0x0 }, \
+ { "DC_dispatched_prefetch_instr", 0x4B, 0x7 }, \
+ { "DC_dcache_accesses_by_locks", 0x4C, 0x2 }, \
+ { "BU_memory_requests", 0x65, 0x83}, \
+ { "BU_data_prefetch", 0x67, 0x3 }, \
+ { "BU_cpu_clk_unhalted", 0x76, 0x0 }, \
+ { "IC_fetch", 0x80, 0x0 }, \
+ { "IC_miss", 0x81, 0x0 }, \
+ { "IC_refill_from_L2", 0x82, 0x0 }, \
+ { "IC_refill_from_system", 0x83, 0x0 }, \
+ { "IC_itlb_L1_miss_L2_hit", 0x84, 0x0 }, \
+ { "IC_uarch_resync_snoop", 0x86, 0x0 }, \
+ { "IC_instr_fetch_stall", 0x87, 0x0 }, \
+ { "IC_return_stack_hit", 0x88, 0x0 }, \
+ { "IC_return_stack_overflow", 0x89, 0x0 }, \
+ { "FR_retired_x86_instr_w_excp_intr", 0xC0, 0x0 }, \
+ { "FR_retired_uops", 0xC1, 0x0 }, \
+ { "FR_retired_branches_w_excp_intr", 0xC2, 0x0 }, \
+ { "FR_retired_branches_mispred", 0xC3, 0x0 }, \
+ { "FR_retired_taken_branches", 0xC4, 0x0 }, \
+ { "FR_retired_taken_branches_mispred", 0xC5, 0x0 }, \
+ { "FR_retired_far_ctl_transfer", 0xC6, 0x0 }, \
+ { "FR_retired_resyncs", 0xC7, 0x0 }, \
+ { "FR_retired_near_rets", 0xC8, 0x0 }, \
+ { "FR_retired_near_rets_mispred", 0xC9, 0x0 }, \
+ { "FR_retired_taken_branches_mispred_addr_miscomp", 0xCA, 0x0 }, \
+ { "FR_retired_fastpath_double_op_instr", 0xCC, 0x7 }, \
+ { "FR_intr_masked_cycles", 0xCD, 0x0 }, \
+ { "FR_intr_masked_while_pending_cycles", 0xCE, 0x0 }, \
+ { "FR_taken_hardware_intrs", 0xCF, 0x0 }, \
+ { "FR_nothing_to_dispatch", 0xD0, 0x0 }, \
+ { "FR_dispatch_stalls", 0xD1, 0x0 }, \
+ { "FR_dispatch_stall_branch_abort_to_retire", 0xD2, 0x0 }, \
+ { "FR_dispatch_stall_serialization", 0xD3, 0x0 }, \
+ { "FR_dispatch_stall_segment_load", 0xD4, 0x0 }, \
+ { "FR_dispatch_stall_reorder_buffer_full", 0xD5, 0x0 }, \
+ { "FR_dispatch_stall_resv_stations_full", 0xD6, 0x0 }, \
+ { "FR_dispatch_stall_fpu_full", 0xD7, 0x0 }, \
+ { "FR_dispatch_stall_ls_full", 0xD8, 0x0 }, \
+ { "FR_dispatch_stall_waiting_all_quiet", 0xD9, 0x0 }, \
+ { "FR_dispatch_stall_far_ctl_trsfr_resync_branch_pend", 0xDA, 0x0 },\
+ { "FR_fpu_exception", 0xDB, 0xF }, \
+ { "FR_num_brkpts_dr0", 0xDC, 0x0 }, \
+ { "FR_num_brkpts_dr1", 0xDD, 0x0 }, \
+ { "FR_num_brkpts_dr2", 0xDE, 0x0 }, \
+ { "FR_num_brkpts_dr3", 0xDF, 0x0 }, \
+ { "NB_mem_ctrlr_bypass_counter_saturation", 0xE4, 0xF }
+
+#define OPT_events \
+ { "LS_locked_operation", 0x24, 0x7 }, \
+ { "DC_copyback", 0x44, 0x1F }, \
+ { "DC_dtlb_L1_miss_L2_hit", 0x45, 0x0 }, \
+ { "DC_dtlb_L1_miss_L2_miss", 0x46, 0x0 }, \
+ { "DC_1bit_ecc_error_found", 0x4A, 0x3 }, \
+ { "BU_system_read_responses", 0x6C, 0x7 }, \
+ { "BU_quadwords_written_to_system", 0x6D, 0x1 }, \
+ { "BU_internal_L2_req", 0x7D, 0x1F }, \
+ { "BU_fill_req_missed_L2", 0x7E, 0x7 }, \
+ { "BU_fill_into_L2", 0x7F, 0x1 }, \
+ { "IC_itlb_L1_miss_L2_miss", 0x85, 0x0 }, \
+ { "FR_retired_fpu_instr", 0xCB, 0xF }, \
+ { "NB_mem_ctrlr_page_access", 0xE0, 0x7 }, \
+ { "NB_mem_ctrlr_page_table_overflow", 0xE1, 0x0 }, \
+ { "NB_mem_ctrlr_turnaround", 0xE3, 0x7 }, \
+ { "NB_ECC_errors", 0xE8, 0x80}, \
+ { "NB_sized_commands", 0xEB, 0x7F }, \
+ { "NB_probe_result", 0xEC, 0x7F}, \
+ { "NB_gart_events", 0xEE, 0x7 }, \
+ { "NB_ht_bus0_bandwidth", 0xF6, 0xF }, \
+ { "NB_ht_bus1_bandwidth", 0xF7, 0xF }, \
+ { "NB_ht_bus2_bandwidth", 0xF8, 0xF }
+
+#define OPT_RevD_events \
+ { "NB_sized_blocks", 0xE5, 0x3C }
+
+#define OPT_RevE_events \
+ { "NB_cpu_io_to_mem_io", 0xE9, 0xFF}, \
+ { "NB_cache_block_commands", 0xEA, 0x3D}
+
+#define AMD_FAMILY_10h_cmn_events \
+ { "FP_retired_sse_ops", 0x3, 0x7F}, \
+ { "FP_retired_move_ops", 0x4, 0xF}, \
+ { "FP_retired_serialize_ops", 0x5, 0xF}, \
+ { "FP_serialize_ops_cycles", 0x6, 0x3}, \
+ { "DC_copyback", 0x44, 0x7F }, \
+ { "DC_dtlb_L1_miss_L2_hit", 0x45, 0x3 }, \
+ { "DC_dtlb_L1_miss_L2_miss", 0x46, 0x7 }, \
+ { "DC_1bit_ecc_error_found", 0x4A, 0xF }, \
+ { "DC_dtlb_L1_hit", 0x4D, 0x7 }, \
+ { "BU_system_read_responses", 0x6C, 0x17 }, \
+ { "BU_octwords_written_to_system", 0x6D, 0x1 }, \
+ { "BU_internal_L2_req", 0x7D, 0x3F }, \
+ { "BU_fill_req_missed_L2", 0x7E, 0xF }, \
+ { "BU_fill_into_L2", 0x7F, 0x3 }, \
+ { "IC_itlb_L1_miss_L2_miss", 0x85, 0x3 }, \
+ { "IC_eviction", 0x8B, 0x0 }, \
+ { "IC_cache_lines_invalidate", 0x8C, 0xF }, \
+ { "IC_itlb_reload", 0x99, 0x0 }, \
+ { "IC_itlb_reload_aborted", 0x9A, 0x0 }, \
+ { "FR_retired_mmx_sse_fp_instr", 0xCB, 0x7 }, \
+ { "NB_mem_ctrlr_page_access", 0xE0, 0xFF }, \
+ { "NB_mem_ctrlr_page_table_overflow", 0xE1, 0x3 }, \
+ { "NB_mem_ctrlr_turnaround", 0xE3, 0x3F }, \
+ { "NB_thermal_status", 0xE8, 0x7C}, \
+ { "NB_sized_commands", 0xEB, 0x3F }, \
+ { "NB_probe_results_upstream_req", 0xEC, 0xFF}, \
+ { "NB_gart_events", 0xEE, 0xFF }, \
+ { "NB_ht_bus0_bandwidth", 0xF6, 0xBF }, \
+ { "NB_ht_bus1_bandwidth", 0xF7, 0xBF }, \
+ { "NB_ht_bus2_bandwidth", 0xF8, 0xBF }, \
+ { "NB_ht_bus3_bandwidth", 0x1F9, 0xBF }, \
+ { "LS_locked_operation", 0x24, 0xF }, \
+ { "LS_cancelled_store_to_load_fwd_ops", 0x2A, 0x7 }, \
+ { "LS_smi_received", 0x2B, 0x0 }, \
+ { "LS_ineffective_prefetch", 0x52, 0x9 }, \
+ { "LS_global_tlb_flush", 0x54, 0x0 }, \
+ { "NB_mem_ctrlr_dram_cmd_slots_missed", 0xE2, 0x3 }, \
+ { "NB_mem_ctrlr_req", 0x1F0, 0xFF }, \
+ { "CB_cpu_to_dram_req_to_target", 0x1E0, 0xFF }, \
+ { "CB_io_to_dram_req_to_target", 0x1E1, 0xFF }, \
+ { "CB_cpu_read_cmd_latency_to_target_0_to_3", 0x1E2, 0xFF }, \
+ { "CB_cpu_read_cmd_req_to_target_0_to_3", 0x1E3, 0xFF }, \
+ { "CB_cpu_read_cmd_latency_to_target_4_to_7", 0x1E4, 0xFF }, \
+ { "CB_cpu_read_cmd_req_to_target_4_to_7", 0x1E5, 0xFF }, \
+ { "CB_cpu_cmd_latency_to_target_0_to_7", 0x1E6, 0xFF }, \
+ { "CB_cpu_req_to_target_0_to_7", 0x1E7, 0xFF }, \
+ { "L3_read_req", 0x4E0, 0xF7 }, \
+ { "L3_miss", 0x4E1, 0xF7 }, \
+ { "L3_l2_eviction_l3_fill", 0x4E2, 0xFF }, \
+ { "L3_eviction", 0x4E3, 0xF }
+
+#define AMD_cmn_generic_events \
+ { "PAPI_br_ins", "FR_retired_branches_w_excp_intr", 0x0 },\
+ { "PAPI_br_msp", "FR_retired_branches_mispred", 0x0 }, \
+ { "PAPI_br_tkn", "FR_retired_taken_branches", 0x0 }, \
+ { "PAPI_fp_ops", "FP_dispatched_fpu_ops", 0x3 }, \
+ { "PAPI_fad_ins", "FP_dispatched_fpu_ops", 0x1 }, \
+ { "PAPI_fml_ins", "FP_dispatched_fpu_ops", 0x2 }, \
+ { "PAPI_fpu_idl", "FP_cycles_no_fpu_ops_retired", 0x0 }, \
+ { "PAPI_tot_cyc", "BU_cpu_clk_unhalted", 0x0 }, \
+ { "PAPI_tot_ins", "FR_retired_x86_instr_w_excp_intr", 0x0 }, \
+ { "PAPI_l1_dca", "DC_access", 0x0 }, \
+ { "PAPI_l1_dcm", "DC_miss", 0x0 }, \
+ { "PAPI_l1_ldm", "DC_refill_from_L2", 0xe }, \
+ { "PAPI_l1_stm", "DC_refill_from_L2", 0x10 }, \
+ { "PAPI_l1_ica", "IC_fetch", 0x0 }, \
+ { "PAPI_l1_icm", "IC_miss", 0x0 }, \
+ { "PAPI_l1_icr", "IC_fetch", 0x0 }, \
+ { "PAPI_l2_dch", "DC_refill_from_L2", 0x1e }, \
+ { "PAPI_l2_dcm", "DC_refill_from_system", 0x1e }, \
+ { "PAPI_l2_dcr", "DC_refill_from_L2", 0xe }, \
+ { "PAPI_l2_dcw", "DC_refill_from_L2", 0x10 }, \
+ { "PAPI_l2_ich", "IC_refill_from_L2", 0x0 }, \
+ { "PAPI_l2_icm", "IC_refill_from_system", 0x0 }, \
+ { "PAPI_l2_ldm", "DC_refill_from_system", 0xe }, \
+ { "PAPI_l2_stm", "DC_refill_from_system", 0x10 }, \
+ { "PAPI_res_stl", "FR_dispatch_stalls", 0x0 }, \
+ { "PAPI_stl_icy", "FR_nothing_to_dispatch", 0x0 }, \
+ { "PAPI_hw_int", "FR_taken_hardware_intrs", 0x0 }
+
+#define OPT_cmn_generic_events \
+ { "PAPI_tlb_dm", "DC_dtlb_L1_miss_L2_miss", 0x0 }, \
+ { "PAPI_tlb_im", "IC_itlb_L1_miss_L2_miss", 0x0 }, \
+ { "PAPI_fp_ins", "FR_retired_fpu_instr", 0xd }, \
+ { "PAPI_vec_ins", "FR_retired_fpu_instr", 0x4 }
+
+#define AMD_FAMILY_10h_generic_events \
+ { "PAPI_tlb_dm", "DC_dtlb_L1_miss_L2_miss", 0x7 }, \
+ { "PAPI_tlb_im", "IC_itlb_L1_miss_L2_miss", 0x3 }, \
+ { "PAPI_l3_dcr", "L3_read_req", 0xf1 }, \
+ { "PAPI_l3_icr", "L3_read_req", 0xf2 }, \
+ { "PAPI_l3_tcr", "L3_read_req", 0xf7 }, \
+ { "PAPI_l3_stm", "L3_miss", 0xf4 }, \
+ { "PAPI_l3_ldm", "L3_miss", 0xf3 }, \
+ { "PAPI_l3_tcm", "L3_miss", 0xf7 }
+
+static amd_event_t opt_events_rev_E[] = {
+ AMD_cmn_events,
+ OPT_events,
+ OPT_RevD_events,
+ OPT_RevE_events,
+ EV_END
+};
+
+static amd_event_t family_10h_events[] = {
+ AMD_cmn_events,
+ OPT_RevE_events,
+ AMD_FAMILY_10h_cmn_events,
+ EV_END
+};
+
+static amd_generic_event_t opt_generic_events[] = {
+ AMD_cmn_generic_events,
+ OPT_cmn_generic_events,
+ GEN_EV_END
+};
+
+static amd_generic_event_t family_10h_generic_events[] = {
+ AMD_cmn_generic_events,
+ AMD_FAMILY_10h_generic_events,
+ GEN_EV_END
+};
+
+static amd_event_t *amd_events = NULL;
+static uint_t amd_family;
+static amd_generic_event_t *amd_generic_events = NULL;
+
+#define BITS(v, u, l) (((v) >> (l)) & ((1 << (1 + (u) - (l))) - 1))
+#define OPTERON_FAMILY 0x0f
+#define AMD_FAMILY_10H 0x10
+
+static int
+opt_pcbe_init (void)
+{
+ amd_family = cpuid_getfamily ();
+ /*
+ * Make sure this really _is_ an Opteron or Athlon 64 system. The kernel
+ * loads this module based on its name in the module directory, but it
+ * could have been renamed.
+ */
+ if (cpuid_getvendor () != X86_VENDOR_AMD
+ || (amd_family != OPTERON_FAMILY && amd_family != AMD_FAMILY_10H))
+ return (-1);
+
+ /*
+ * Figure out processor revision here and assign appropriate
+ * event configuration.
+ */
+ if (amd_family == OPTERON_FAMILY)
+ {
+ amd_events = opt_events_rev_E;
+ amd_generic_events = opt_generic_events;
+ }
+ else
+ {
+ amd_events = family_10h_events;
+ amd_generic_events = family_10h_generic_events;
+ }
+ return (0);
+}
+
+static uint_t
+opt_pcbe_ncounters (void)
+{
+ return (4);
+}
+
+static const char *
+opt_pcbe_impl_name (void)
+{
+ if (amd_family == OPTERON_FAMILY)
+ return ("AMD Opteron & Athlon64");
+ else if (amd_family == AMD_FAMILY_10H)
+ return ("AMD Family 10h");
+ else
+ return ("Unknown AMD processor");
+}
+
+static const char *
+opt_pcbe_cpuref (void)
+{
+ if (amd_family == OPTERON_FAMILY)
+ return GTXT ("See Chapter 10 of the \"BIOS and Kernel Developer's Guide for the AMD Athlon 64 and AMD Opteron Processors,\"\nAMD publication #26094");
+ else if (amd_family == AMD_FAMILY_10H)
+ return GTXT ("See section 3.15 of the \"BIOS and Kernel Developer's Guide (BKDG) For AMD Family 10h Processors,\"\nAMD publication #31116");
+ else
+ return GTXT ("Unknown AMD processor");
+}
+
+static int
+opt_pcbe_get_events (hwcf_hwc_cb_t *hwc_cb)
+{
+ int count = 0;
+ for (uint_t kk = 0; amd_events && amd_events[kk].name; kk++)
+ for (uint_t jj = 0; jj < opt_pcbe_ncounters (); jj++)
+ {
+ hwc_cb (jj, amd_events[kk].name);
+ count++;
+ }
+ for (uint_t kk = 0; amd_generic_events && amd_generic_events[kk].name; kk++)
+ for (uint_t jj = 0; jj < opt_pcbe_ncounters (); jj++)
+ {
+ hwc_cb (jj, amd_generic_events[kk].name);
+ count++;
+ }
+ return count;
+}
+
+static int
+opt_pcbe_get_eventnum (const char *eventname, uint_t pmc, eventsel_t *eventsel,
+ eventsel_t *event_valid_umask, uint_t *pmc_sel)
+{
+ uint_t kk;
+ *pmc_sel = pmc; /* for AMD, pmc doesn't need to be adjusted */
+ *eventsel = (eventsel_t) - 1;
+ *event_valid_umask = 0x0;
+
+ /* search table */
+ for (kk = 0; amd_events && amd_events[kk].name; kk++)
+ {
+ if (strcmp (eventname, amd_events[kk].name) == 0)
+ {
+ *eventsel = EXTENDED_EVNUM_2_EVSEL (amd_events[kk].emask);
+ *event_valid_umask = amd_events[kk].umask_valid;
+ return 0;
+ }
+ }
+
+ /* search generic */
+ int generic = 0;
+ eventsel_t tmp_umask = 0;
+ for (kk = 0; amd_generic_events && amd_generic_events[kk].name; kk++)
+ {
+ if (strcmp (eventname, amd_generic_events[kk].name) == 0)
+ {
+ generic = 1;
+ eventname = amd_generic_events[kk].event;
+ tmp_umask = amd_generic_events[kk].umask;
+ break;
+ }
+ }
+ if (!generic)
+ return -1;
+
+ /* find real event # for generic event */
+ for (kk = 0; amd_events && amd_events[kk].name; kk++)
+ {
+ if (strcmp (eventname, amd_events[kk].name) == 0)
+ {
+ *eventsel = EXTENDED_EVNUM_2_EVSEL (amd_events[kk].emask);
+ *eventsel |= (tmp_umask << PERFCTR_UMASK_SHIFT);
+ *event_valid_umask = 0; /* user umask not allowed w/generic events */
+ return 0;
+ }
+ }
+ return -1;
+}
+
+static hdrv_pcbe_api_t hdrv_pcbe_opteron_api = {
+ opt_pcbe_init,
+ opt_pcbe_ncounters,
+ opt_pcbe_impl_name,
+ opt_pcbe_cpuref,
+ opt_pcbe_get_events,
+ opt_pcbe_get_eventnum
+};
diff --git a/gprofng/config/bison.m4 b/gprofng/config/bison.m4
new file mode 100644
index 00000000000..0493587517c
--- /dev/null
+++ b/gprofng/config/bison.m4
@@ -0,0 +1,92 @@
+# serial 10
+
+# Copyright (C) 2002-2006, 2008-2021 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.
+
+# There are two types of parser skeletons:
+#
+# * Those that can be used with any Yacc implementation, including bison.
+# For these, in the configure.ac, up to Autoconf 2.69, you could use
+# AC_PROG_YACC
+# In newer Autoconf versions, however, this macro is broken. See
+# https://lists.gnu.org/archive/html/autoconf-patches/2013-03/msg00000.html
+# https://lists.gnu.org/archive/html/bug-autoconf/2018-12/msg00001.html
+# In the Makefile.am you could use
+# $(SHELL) $(YLWRAP) $(srcdir)/foo.y \
+# y.tab.c foo.c \
+# y.tab.h foo.h \
+# y.output foo.output \
+# -- $(YACC) $(YFLAGS) $(AM_YFLAGS)
+# or similar.
+#
+# * Those that make use of Bison extensions. For example,
+# - %define api.pure requires bison 2.7 or newer,
+# - %precedence requires bison 3.0 or newer.
+# For these, in the configure.ac you will need an invocation of
+# gl_PROG_BISON([VARIABLE], [MIN_BISON_VERSION])
+# Example:
+# gl_PROG_BISON([PARSE_DATETIME_BISON], [2.4])
+# With this preparation, in the Makefile.am there are two ways to formulate
+# the invocation. Both are direct, without use of 'ylwrap'.
+# (a) You can invoke
+# $(VARIABLE) -d $(SOME_BISON_OPTIONS) --output foo.c $(srcdir)/foo.y
+# or similar.
+# (b) If you want the invocation to honor an YFLAGS=... parameter passed to
+# 'configure' or an YFLAGS environment variable present at 'configure'
+# time, add an invocation of gl_BISON to the configure.ac, and write
+# $(VARIABLE) -d $(YFLAGS) $(AM_YFLAGS) $(srcdir)/foo.y
+# or similar.
+
+# This macro defines the autoconf variable VARIABLE to 'bison' if the specified
+# minimum version of bison is found in $PATH, or to ':' otherwise.
+AC_DEFUN([gl_PROG_BISON],
+[
+ AC_CHECK_PROGS([$1], [bison])
+ if test -z "$[$1]"; then
+ ac_verc_fail=yes
+ else
+ cat >conftest.y <<_ACEOF
+%require "$2"
+%%
+exp:
+_ACEOF
+ AC_MSG_CHECKING([for bison $2 or newer])
+ ac_prog_version=`$$1 --version 2>&1 | sed -n 's/^.*GNU Bison.* \([[0-9]]*\.[[0-9.]]*\).*$/\1/p'`
+ : ${ac_prog_version:='v. ?.??'}
+ if $$1 conftest.y -o conftest.c 2>/dev/null; then
+ ac_prog_version="$ac_prog_version, ok"
+ ac_verc_fail=no
+ else
+ ac_prog_version="$ac_prog_version, bad"
+ ac_verc_fail=yes
+ fi
+ rm -f conftest.y conftest.c
+ AC_MSG_RESULT([$ac_prog_version])
+ fi
+ if test $ac_verc_fail = yes; then
+ [$1]=:
+ fi
+ AC_SUBST([$1])
+])
+
+# This macro sets the autoconf variables YACC (for old-style yacc Makefile
+# rules) and YFLAGS (to allow options to be passed as 'configure' time).
+AC_DEFUN([gl_BISON],
+[
+ : ${YACC='bison -o y.tab.c'}
+dnl
+dnl Declaring YACC & YFLAGS precious will not be necessary after GNULIB
+dnl requires an Autoconf greater than 2.59c, but it will probably still be
+dnl useful to override the description of YACC in the --help output, re
+dnl parse-datetime.y assuming 'bison -o y.tab.c'.
+ AC_ARG_VAR([YACC],
+[The "Yet Another C Compiler" implementation to use. Defaults to
+'bison -o y.tab.c'. Values other than 'bison -o y.tab.c' will most likely
+break on most systems.])dnl
+ AC_ARG_VAR([YFLAGS],
+[YFLAGS contains the list arguments that will be passed by default to Bison.
+This script will default YFLAGS to the empty string to avoid a default value of
+'-d' given by some make applications.])dnl
+])
diff --git a/gprofng/configure b/gprofng/configure
new file mode 100755
index 00000000000..6e38a140696
--- /dev/null
+++ b/gprofng/configure
@@ -0,0 +1,19688 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.69 for gprofng 2.38.50.
+#
+#
+# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
+#
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='print -r --'
+ as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='printf %s\n'
+ as_echo_n='printf %s'
+else
+ if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+ as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+ as_echo_n='/usr/ucb/echo -n'
+ else
+ as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+ as_echo_n_body='eval
+ arg=$1;
+ case $arg in #(
+ *"$as_nl"*)
+ expr "X$arg" : "X\\(.*\\)$as_nl";
+ arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+ esac;
+ expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+ '
+ export as_echo_n_body
+ as_echo_n='sh -c $as_echo_n_body as_echo'
+ fi
+ export as_echo_body
+ as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" "" $as_nl"
+
+# Find who we are. Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there. '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+# Use a proper internal environment variable to ensure we don't fall
+ # into an infinite loop, continuously re-executing ourselves.
+ if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
+ _as_can_reexec=no; export _as_can_reexec;
+ # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+ *v*x* | *x*v* ) as_opts=-vx ;;
+ *v* ) as_opts=-v ;;
+ *x* ) as_opts=-x ;;
+ * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+as_fn_exit 255
+ fi
+ # We don't want this to propagate to other subprocesses.
+ { _as_can_reexec=; unset _as_can_reexec;}
+if test "x$CONFIG_SHELL" = x; then
+ as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '\${1+\"\$@\"}'='\"\$@\"'
+ setopt NO_GLOB_SUBST
+else
+ case \`(set -o) 2>/dev/null\` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+"
+ as_required="as_fn_return () { (exit \$1); }
+as_fn_success () { as_fn_return 0; }
+as_fn_failure () { as_fn_return 1; }
+as_fn_ret_success () { return 0; }
+as_fn_ret_failure () { return 1; }
+
+exitcode=0
+as_fn_success || { exitcode=1; echo as_fn_success failed.; }
+as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
+as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
+as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
+if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
+
+else
+ exitcode=1; echo positional parameters were not saved.
+fi
+test x\$exitcode = x0 || exit 1
+test -x / || exit 1"
+ as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
+ as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
+ eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
+ test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
+test \$(( 1 + 1 )) = 2 || exit 1
+
+ test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || (
+ ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
+ ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
+ PATH=/empty FPATH=/empty; export PATH FPATH
+ test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\
+ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1"
+ if (eval "$as_required") 2>/dev/null; then :
+ as_have_required=yes
+else
+ as_have_required=no
+fi
+ if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
+
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ as_found=:
+ case $as_dir in #(
+ /*)
+ for as_base in sh bash ksh sh5; do
+ # Try only shells that exist, to save several forks.
+ as_shell=$as_dir/$as_base
+ if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+ { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ CONFIG_SHELL=$as_shell as_have_required=yes
+ if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ break 2
+fi
+fi
+ done;;
+ esac
+ as_found=false
+done
+$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+ { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
+ CONFIG_SHELL=$SHELL as_have_required=yes
+fi; }
+IFS=$as_save_IFS
+
+
+ if test "x$CONFIG_SHELL" != x; then :
+ export CONFIG_SHELL
+ # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+ *v*x* | *x*v* ) as_opts=-vx ;;
+ *v* ) as_opts=-v ;;
+ *x* ) as_opts=-x ;;
+ * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+exit 255
+fi
+
+ if test x$as_have_required = xno; then :
+ $as_echo "$0: This script requires a shell more modern than all"
+ $as_echo "$0: the shells that I found on your system."
+ if test x${ZSH_VERSION+set} = xset ; then
+ $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+ $as_echo "$0: be upgraded to zsh 4.3.4 or later."
+ else
+ $as_echo "$0: Please tell bug-autoconf@gnu.org about your system,
+$0: including any error possibly output before this
+$0: message. Then install a modern shell, or manually run
+$0: the script under such a shell if you do have one."
+ fi
+ exit 1
+fi
+fi
+fi
+SHELL=${CONFIG_SHELL-/bin/sh}
+export SHELL
+# Unset more variables known to interfere with behavior of common tools.
+CLICOLOR_FORCE= GREP_OPTIONS=
+unset CLICOLOR_FORCE GREP_OPTIONS
+
+## --------------------- ##
+## M4sh Shell Functions. ##
+## --------------------- ##
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+ { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+ return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+ set +e
+ as_fn_set_status $1
+ exit $1
+} # as_fn_exit
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || eval $as_mkdir_p || {
+ as_dirs=
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
+ done
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+ test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+ eval 'as_fn_append ()
+ {
+ eval $1+=\$2
+ }'
+else
+ as_fn_append ()
+ {
+ eval $1=\$$1\$2
+ }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+ eval 'as_fn_arith ()
+ {
+ as_val=$(( $* ))
+ }'
+else
+ as_fn_arith ()
+ {
+ as_val=`expr "$@" || test $? -eq 1`
+ }
+fi # as_fn_arith
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+ as_status=$1; test $as_status -eq 0 && as_status=1
+ if test "$4"; then
+ as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ fi
+ $as_echo "$as_me: error: $2" >&2
+ as_fn_exit $as_status
+} # as_fn_error
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+
+ as_lineno_1=$LINENO as_lineno_1a=$LINENO
+ as_lineno_2=$LINENO as_lineno_2a=$LINENO
+ eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
+ test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
+ # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
+ sed -n '
+ p
+ /[$]LINENO/=
+ ' <$as_myself |
+ sed '
+ s/[$]LINENO.*/&-/
+ t lineno
+ b
+ :lineno
+ N
+ :loop
+ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+ t loop
+ s/-\n.*//
+ ' >$as_me.lineno &&
+ chmod +x "$as_me.lineno" ||
+ { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+
+ # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
+ # already done that, so ensure we don't try to do so again and fall
+ # in an infinite loop. This has already happened in practice.
+ _as_can_reexec=no; export _as_can_reexec
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensitive to this).
+ . "./$as_me.lineno"
+ # Exit status is that of the last command.
+ exit
+}
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+ case `echo 'xy\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ xy) ECHO_C='\c';;
+ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
+ ECHO_T=' ';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -pR'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -pR'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -pR'
+ fi
+else
+ as_ln_s='cp -pR'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p='mkdir -p "$as_dir"'
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+
+test -n "$DJDIR" || exec 7<&0 </dev/null
+exec 6>&1
+
+# Name of the host.
+# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_clean_files=
+ac_config_libobj_dir=.
+LIBOBJS=
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+
+# Identity of this package.
+PACKAGE_NAME='gprofng'
+PACKAGE_TARNAME='gprofng'
+PACKAGE_VERSION='2.38.50'
+PACKAGE_STRING='gprofng 2.38.50'
+PACKAGE_BUGREPORT=''
+PACKAGE_URL=''
+
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# ifdef HAVE_STDLIB_H
+# include <stdlib.h>
+# endif
+#endif
+#ifdef HAVE_STRING_H
+# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
+# include <memory.h>
+# endif
+# include <string.h>
+#endif
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#ifdef HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+enable_option_checking=no
+ac_subst_vars='am__EXEEXT_FALSE
+am__EXEEXT_TRUE
+LTLIBOBJS
+LIBOBJS
+BUILD_SUBDIRS
+CLOCK_GETTIME_LINK
+GPROFNG_CPPFLAGS
+GPROFNG_CFLAGS
+LD_NO_AS_NEEDED
+BUILD_MAN_FALSE
+BUILD_MAN_TRUE
+HELP2MAN
+zlibinc
+zlibdir
+TCL_TRY_FALSE
+TCL_TRY_TRUE
+EXPECT
+jdk_inc
+GPROFNG_BROKEN_JAVAC
+JAVA
+JAVAC
+PTHREAD_CFLAGS
+PTHREAD_LIBS
+PTHREAD_CC
+ax_pthread_config
+RUN_TESTS_FALSE
+RUN_TESTS_TRUE
+subdirs
+BUILD_SRC_FALSE
+BUILD_SRC_TRUE
+BUILD_COLLECTOR_FALSE
+BUILD_COLLECTOR_TRUE
+GPROFNG_NO_SWITCH_CFLAGS
+GPROFNG_NO_FORMAT_TRUNCATION_CFLAGS
+gprofng_cflags
+WERROR
+GPROFNG_LIBADD
+CXXCPP
+OTOOL64
+OTOOL
+LIPO
+NMEDIT
+DSYMUTIL
+OBJDUMP
+LN_S
+NM
+ac_ct_DUMPBIN
+DUMPBIN
+LD
+FGREP
+SED
+LIBTOOL
+BISON
+ac_ct_AR
+AR
+RANLIB
+am__fastdepCXX_FALSE
+am__fastdepCXX_TRUE
+CXXDEPMODE
+ac_ct_CXX
+CXXFLAGS
+CXX
+EGREP
+GREP
+CPP
+am__fastdepCC_FALSE
+am__fastdepCC_TRUE
+CCDEPMODE
+am__nodep
+AMDEPBACKSLASH
+AMDEP_FALSE
+AMDEP_TRUE
+am__quote
+am__include
+DEPDIR
+OBJEXT
+EXEEXT
+ac_ct_CC
+CPPFLAGS
+LDFLAGS
+CFLAGS
+CC
+MAINT
+MAINTAINER_MODE_FALSE
+MAINTAINER_MODE_TRUE
+AM_BACKSLASH
+AM_DEFAULT_VERBOSITY
+AM_DEFAULT_V
+AM_V
+am__untar
+am__tar
+AMTAR
+am__leading_dot
+SET_MAKE
+AWK
+mkdir_p
+MKDIR_P
+INSTALL_STRIP_PROGRAM
+STRIP
+install_sh
+MAKEINFO
+AUTOHEADER
+AUTOMAKE
+AUTOCONF
+ACLOCAL
+VERSION
+PACKAGE
+CYGPATH_W
+am__isrc
+INSTALL_DATA
+INSTALL_SCRIPT
+INSTALL_PROGRAM
+target_os
+target_vendor
+target_cpu
+target
+host_os
+host_vendor
+host_cpu
+host
+build_os
+build_vendor
+build_cpu
+build
+target_alias
+host_alias
+build_alias
+LIBS
+ECHO_T
+ECHO_N
+ECHO_C
+DEFS
+mandir
+localedir
+libdir
+psdir
+pdfdir
+dvidir
+htmldir
+infodir
+docdir
+oldincludedir
+includedir
+localstatedir
+sharedstatedir
+sysconfdir
+datadir
+datarootdir
+libexecdir
+sbindir
+bindir
+program_transform_name
+prefix
+exec_prefix
+PACKAGE_URL
+PACKAGE_BUGREPORT
+PACKAGE_STRING
+PACKAGE_VERSION
+PACKAGE_TARNAME
+PACKAGE_NAME
+PATH_SEPARATOR
+SHELL'
+ac_subst_files=''
+ac_user_opts='
+enable_option_checking
+enable_silent_rules
+enable_maintainer_mode
+enable_dependency_tracking
+enable_shared
+enable_static
+with_pic
+enable_fast_install
+with_gnu_ld
+enable_libtool_lock
+enable_werror_always
+enable_gprofng_tools
+with_jdk
+enable_gprofng_debug
+with_system_zlib
+'
+ ac_precious_vars='build_alias
+host_alias
+target_alias
+CC
+CFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS
+CPP
+CXX
+CXXFLAGS
+CCC
+CXXCPP'
+ac_subdirs_all='libcollector'
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+ac_unrecognized_opts=
+ac_unrecognized_sep=
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+# (The list follows the same order as the GNU Coding Standards.)
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
+infodir='${datarootdir}/info'
+htmldir='${docdir}'
+dvidir='${docdir}'
+pdfdir='${docdir}'
+psdir='${docdir}'
+libdir='${exec_prefix}/lib'
+localedir='${datarootdir}/locale'
+mandir='${datarootdir}/man'
+
+ac_prev=
+ac_dashdash=
+for ac_option
+do
+ # If the previous option needs an argument, assign it.
+ if test -n "$ac_prev"; then
+ eval $ac_prev=\$ac_option
+ ac_prev=
+ continue
+ fi
+
+ case $ac_option in
+ *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+ *=) ac_optarg= ;;
+ *) ac_optarg=yes ;;
+ esac
+
+ # Accept the important Cygnus configure options, so we can diagnose typos.
+
+ case $ac_dashdash$ac_option in
+ --)
+ ac_dashdash=yes ;;
+
+ -bindir | --bindir | --bindi | --bind | --bin | --bi)
+ ac_prev=bindir ;;
+ -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+ bindir=$ac_optarg ;;
+
+ -build | --build | --buil | --bui | --bu)
+ ac_prev=build_alias ;;
+ -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+ build_alias=$ac_optarg ;;
+
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ ac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+ cache_file=$ac_optarg ;;
+
+ --config-cache | -C)
+ cache_file=config.cache ;;
+
+ -datadir | --datadir | --datadi | --datad)
+ ac_prev=datadir ;;
+ -datadir=* | --datadir=* | --datadi=* | --datad=*)
+ datadir=$ac_optarg ;;
+
+ -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
+ | --dataroo | --dataro | --datar)
+ ac_prev=datarootdir ;;
+ -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+ datarootdir=$ac_optarg ;;
+
+ -disable-* | --disable-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid feature name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"enable_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval enable_$ac_useropt=no ;;
+
+ -docdir | --docdir | --docdi | --doc | --do)
+ ac_prev=docdir ;;
+ -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
+ docdir=$ac_optarg ;;
+
+ -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
+ ac_prev=dvidir ;;
+ -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+ dvidir=$ac_optarg ;;
+
+ -enable-* | --enable-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid feature name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"enable_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval enable_$ac_useropt=\$ac_optarg ;;
+
+ -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+ | --exec | --exe | --ex)
+ ac_prev=exec_prefix ;;
+ -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+ | --exec=* | --exe=* | --ex=*)
+ exec_prefix=$ac_optarg ;;
+
+ -gas | --gas | --ga | --g)
+ # Obsolete; use --with-gas.
+ with_gas=yes ;;
+
+ -help | --help | --hel | --he | -h)
+ ac_init_help=long ;;
+ -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+ ac_init_help=recursive ;;
+ -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+ ac_init_help=short ;;
+
+ -host | --host | --hos | --ho)
+ ac_prev=host_alias ;;
+ -host=* | --host=* | --hos=* | --ho=*)
+ host_alias=$ac_optarg ;;
+
+ -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
+ ac_prev=htmldir ;;
+ -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
+ | --ht=*)
+ htmldir=$ac_optarg ;;
+
+ -includedir | --includedir | --includedi | --included | --include \
+ | --includ | --inclu | --incl | --inc)
+ ac_prev=includedir ;;
+ -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+ | --includ=* | --inclu=* | --incl=* | --inc=*)
+ includedir=$ac_optarg ;;
+
+ -infodir | --infodir | --infodi | --infod | --info | --inf)
+ ac_prev=infodir ;;
+ -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+ infodir=$ac_optarg ;;
+
+ -libdir | --libdir | --libdi | --libd)
+ ac_prev=libdir ;;
+ -libdir=* | --libdir=* | --libdi=* | --libd=*)
+ libdir=$ac_optarg ;;
+
+ -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+ | --libexe | --libex | --libe)
+ ac_prev=libexecdir ;;
+ -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+ | --libexe=* | --libex=* | --libe=*)
+ libexecdir=$ac_optarg ;;
+
+ -localedir | --localedir | --localedi | --localed | --locale)
+ ac_prev=localedir ;;
+ -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
+ localedir=$ac_optarg ;;
+
+ -localstatedir | --localstatedir | --localstatedi | --localstated \
+ | --localstate | --localstat | --localsta | --localst | --locals)
+ ac_prev=localstatedir ;;
+ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
+ localstatedir=$ac_optarg ;;
+
+ -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+ ac_prev=mandir ;;
+ -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+ mandir=$ac_optarg ;;
+
+ -nfp | --nfp | --nf)
+ # Obsolete; use --without-fp.
+ with_fp=no ;;
+
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c | -n)
+ no_create=yes ;;
+
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+ no_recursion=yes ;;
+
+ -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+ | --oldin | --oldi | --old | --ol | --o)
+ ac_prev=oldincludedir ;;
+ -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+ oldincludedir=$ac_optarg ;;
+
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ ac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ prefix=$ac_optarg ;;
+
+ -program-prefix | --program-prefix | --program-prefi | --program-pref \
+ | --program-pre | --program-pr | --program-p)
+ ac_prev=program_prefix ;;
+ -program-prefix=* | --program-prefix=* | --program-prefi=* \
+ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+ program_prefix=$ac_optarg ;;
+
+ -program-suffix | --program-suffix | --program-suffi | --program-suff \
+ | --program-suf | --program-su | --program-s)
+ ac_prev=program_suffix ;;
+ -program-suffix=* | --program-suffix=* | --program-suffi=* \
+ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+ program_suffix=$ac_optarg ;;
+
+ -program-transform-name | --program-transform-name \
+ | --program-transform-nam | --program-transform-na \
+ | --program-transform-n | --program-transform- \
+ | --program-transform | --program-transfor \
+ | --program-transfo | --program-transf \
+ | --program-trans | --program-tran \
+ | --progr-tra | --program-tr | --program-t)
+ ac_prev=program_transform_name ;;
+ -program-transform-name=* | --program-transform-name=* \
+ | --program-transform-nam=* | --program-transform-na=* \
+ | --program-transform-n=* | --program-transform-=* \
+ | --program-transform=* | --program-transfor=* \
+ | --program-transfo=* | --program-transf=* \
+ | --program-trans=* | --program-tran=* \
+ | --progr-tra=* | --program-tr=* | --program-t=*)
+ program_transform_name=$ac_optarg ;;
+
+ -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
+ ac_prev=pdfdir ;;
+ -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
+ pdfdir=$ac_optarg ;;
+
+ -psdir | --psdir | --psdi | --psd | --ps)
+ ac_prev=psdir ;;
+ -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
+ psdir=$ac_optarg ;;
+
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ silent=yes ;;
+
+ -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+ ac_prev=sbindir ;;
+ -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+ | --sbi=* | --sb=*)
+ sbindir=$ac_optarg ;;
+
+ -sharedstatedir | --sharedstatedir | --sharedstatedi \
+ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+ | --sharedst | --shareds | --shared | --share | --shar \
+ | --sha | --sh)
+ ac_prev=sharedstatedir ;;
+ -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+ | --sha=* | --sh=*)
+ sharedstatedir=$ac_optarg ;;
+
+ -site | --site | --sit)
+ ac_prev=site ;;
+ -site=* | --site=* | --sit=*)
+ site=$ac_optarg ;;
+
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ srcdir=$ac_optarg ;;
+
+ -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+ | --syscon | --sysco | --sysc | --sys | --sy)
+ ac_prev=sysconfdir ;;
+ -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+ sysconfdir=$ac_optarg ;;
+
+ -target | --target | --targe | --targ | --tar | --ta | --t)
+ ac_prev=target_alias ;;
+ -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+ target_alias=$ac_optarg ;;
+
+ -v | -verbose | --verbose | --verbos | --verbo | --verb)
+ verbose=yes ;;
+
+ -version | --version | --versio | --versi | --vers | -V)
+ ac_init_version=: ;;
+
+ -with-* | --with-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid package name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"with_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval with_$ac_useropt=\$ac_optarg ;;
+
+ -without-* | --without-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid package name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"with_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval with_$ac_useropt=no ;;
+
+ --x)
+ # Obsolete; use --with-x.
+ with_x=yes ;;
+
+ -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+ | --x-incl | --x-inc | --x-in | --x-i)
+ ac_prev=x_includes ;;
+ -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+ x_includes=$ac_optarg ;;
+
+ -x-libraries | --x-libraries | --x-librarie | --x-librari \
+ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+ ac_prev=x_libraries ;;
+ -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+ x_libraries=$ac_optarg ;;
+
+ -*) as_fn_error $? "unrecognized option: \`$ac_option'
+Try \`$0 --help' for more information"
+ ;;
+
+ *=*)
+ ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+ # Reject names that are not valid shell variable names.
+ case $ac_envvar in #(
+ '' | [0-9]* | *[!_$as_cr_alnum]* )
+ as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
+ esac
+ eval $ac_envvar=\$ac_optarg
+ export $ac_envvar ;;
+
+ *)
+ # FIXME: should be removed in autoconf 3.0.
+ $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+ expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+ $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+ : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
+ ;;
+
+ esac
+done
+
+if test -n "$ac_prev"; then
+ ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+ as_fn_error $? "missing argument to $ac_option"
+fi
+
+if test -n "$ac_unrecognized_opts"; then
+ case $enable_option_checking in
+ no) ;;
+ fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
+ *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+ esac
+fi
+
+# Check all directory arguments for consistency.
+for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
+ datadir sysconfdir sharedstatedir localstatedir includedir \
+ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+ libdir localedir mandir
+do
+ eval ac_val=\$$ac_var
+ # Remove trailing slashes.
+ case $ac_val in
+ */ )
+ ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
+ eval $ac_var=\$ac_val;;
+ esac
+ # Be sure to have absolute directory names.
+ case $ac_val in
+ [\\/$]* | ?:[\\/]* ) continue;;
+ NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+ esac
+ as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+ if test "x$build_alias" = x; then
+ cross_compiling=maybe
+ elif test "x$build_alias" != "x$host_alias"; then
+ cross_compiling=yes
+ fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ac_ls_di=`ls -di .` &&
+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+ as_fn_error $? "working directory cannot be determined"
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+ as_fn_error $? "pwd does not report name of working directory"
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+ ac_srcdir_defaulted=yes
+ # Try the directory containing this script, then the parent directory.
+ ac_confdir=`$as_dirname -- "$as_myself" ||
+$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_myself" : 'X\(//\)[^/]' \| \
+ X"$as_myself" : 'X\(//\)$' \| \
+ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_myself" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ srcdir=$ac_confdir
+ if test ! -r "$srcdir/$ac_unique_file"; then
+ srcdir=..
+ fi
+else
+ ac_srcdir_defaulted=no
+fi
+if test ! -r "$srcdir/$ac_unique_file"; then
+ test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+ as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
+fi
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+ cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
+ pwd)`
+# When building in place, set srcdir=.
+if test "$ac_abs_confdir" = "$ac_pwd"; then
+ srcdir=.
+fi
+# Remove unnecessary trailing slashes from srcdir.
+# Double slashes in file names in object file debugging info
+# mess up M-x gdb in Emacs.
+case $srcdir in
+*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
+esac
+for ac_var in $ac_precious_vars; do
+ eval ac_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_env_${ac_var}_value=\$${ac_var}
+ eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_cv_env_${ac_var}_value=\$${ac_var}
+done
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+ # Omit some internal or obsolete options to make the list less imposing.
+ # This message is too long to be a string in the A/UX 3.1 sh.
+ cat <<_ACEOF
+\`configure' configures gprofng 2.38.50 to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE. See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+ -h, --help display this help and exit
+ --help=short display options specific to this package
+ --help=recursive display the short help of all the included packages
+ -V, --version display version information and exit
+ -q, --quiet, --silent do not print \`checking ...' messages
+ --cache-file=FILE cache test results in FILE [disabled]
+ -C, --config-cache alias for \`--cache-file=config.cache'
+ -n, --no-create do not create output files
+ --srcdir=DIR find the sources in DIR [configure dir or \`..']
+
+Installation directories:
+ --prefix=PREFIX install architecture-independent files in PREFIX
+ [$ac_default_prefix]
+ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
+ [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+ --bindir=DIR user executables [EPREFIX/bin]
+ --sbindir=DIR system admin executables [EPREFIX/sbin]
+ --libexecdir=DIR program executables [EPREFIX/libexec]
+ --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
+ --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
+ --localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --libdir=DIR object code libraries [EPREFIX/lib]
+ --includedir=DIR C header files [PREFIX/include]
+ --oldincludedir=DIR C header files for non-gcc [/usr/include]
+ --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
+ --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
+ --infodir=DIR info documentation [DATAROOTDIR/info]
+ --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
+ --mandir=DIR man documentation [DATAROOTDIR/man]
+ --docdir=DIR documentation root [DATAROOTDIR/doc/gprofng]
+ --htmldir=DIR html documentation [DOCDIR]
+ --dvidir=DIR dvi documentation [DOCDIR]
+ --pdfdir=DIR pdf documentation [DOCDIR]
+ --psdir=DIR ps documentation [DOCDIR]
+_ACEOF
+
+ cat <<\_ACEOF
+
+Program names:
+ --program-prefix=PREFIX prepend PREFIX to installed program names
+ --program-suffix=SUFFIX append SUFFIX to installed program names
+ --program-transform-name=PROGRAM run sed PROGRAM on installed program names
+
+System types:
+ --build=BUILD configure for building on BUILD [guessed]
+ --host=HOST cross-compile to build programs to run on HOST [BUILD]
+ --target=TARGET configure for building compilers for TARGET [HOST]
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+ case $ac_init_help in
+ short | recursive ) echo "Configuration of gprofng 2.38.50:";;
+ esac
+ cat <<\_ACEOF
+
+Optional Features:
+ --disable-option-checking ignore unrecognized --enable/--with options
+ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
+ --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
+ --enable-silent-rules less verbose build output (undo: "make V=1")
+ --disable-silent-rules verbose build output (undo: "make V=0")
+ --enable-maintainer-mode
+ enable make rules and dependencies not useful (and
+ sometimes confusing) to the casual installer
+ --enable-dependency-tracking
+ do not reject slow dependency extractors
+ --disable-dependency-tracking
+ speeds up one-time build
+ --enable-shared[=PKGS] build shared libraries [default=no]
+ --enable-static[=PKGS] build static libraries [default=yes]
+ --enable-fast-install[=PKGS]
+ optimize for fast installation [default=yes]
+ --disable-libtool-lock avoid locking (might break parallel builds)
+ --enable-werror-always enable -Werror despite compiler version
+ --disable-gprofng-tools do not build gprofng/src directory
+ --enable-gprofng-debug Enable debugging output [default=no]
+
+Optional Packages:
+ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
+ --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
+ --with-pic try to use only PIC/non-PIC objects [default=use
+ both]
+ --with-gnu-ld assume the C compiler uses GNU ld [default=no]
+ --with-jdk=PATH specify prefix directory for installed JDK.
+ --with-system-zlib use installed libz
+
+Some influential environment variables:
+ CC C compiler command
+ CFLAGS C compiler flags
+ LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
+ nonstandard directory <lib dir>
+ LIBS libraries to pass to the linker, e.g. -l<library>
+ CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
+ you have headers in a nonstandard directory <include dir>
+ CPP C preprocessor
+ CXX C++ compiler command
+ CXXFLAGS C++ compiler flags
+ CXXCPP C++ preprocessor
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to the package provider.
+_ACEOF
+ac_status=$?
+fi
+
+if test "$ac_init_help" = "recursive"; then
+ # If there are subdirs, report their specific --help.
+ for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+ test -d "$ac_dir" ||
+ { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
+ continue
+ ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+ cd "$ac_dir" || { ac_status=$?; continue; }
+ # Check for guested configure.
+ if test -f "$ac_srcdir/configure.gnu"; then
+ echo &&
+ $SHELL "$ac_srcdir/configure.gnu" --help=recursive
+ elif test -f "$ac_srcdir/configure"; then
+ echo &&
+ $SHELL "$ac_srcdir/configure" --help=recursive
+ else
+ $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+ fi || ac_status=$?
+ cd "$ac_pwd" || { ac_status=$?; break; }
+ done
+fi
+
+test -n "$ac_init_help" && exit $ac_status
+if $ac_init_version; then
+ cat <<\_ACEOF
+gprofng configure 2.38.50
+generated by GNU Autoconf 2.69
+
+Copyright (C) 2012 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+ exit
+fi
+
+## ------------------------ ##
+## Autoconf initialization. ##
+## ------------------------ ##
+
+# ac_fn_c_try_compile LINENO
+# --------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_compile ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext
+ if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_compile
+
+# ac_fn_c_try_cpp LINENO
+# ----------------------
+# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_cpp ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if { { ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } > conftest.i && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_cpp
+
+# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists, giving a warning if it cannot be compiled using
+# the include files in INCLUDES and setting the cache variable VAR
+# accordingly.
+ac_fn_c_check_header_mongrel ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if eval \${$3+:} false; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+ $as_echo_n "(cached) " >&6
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+ # Is the header compilable?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
+$as_echo_n "checking $2 usability... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_header_compiler=yes
+else
+ ac_header_compiler=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
+$as_echo_n "checking $2 presence... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <$2>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+ ac_header_preproc=yes
+else
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
+ yes:no: )
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+ ;;
+ no:yes:* )
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+ ;;
+esac
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ eval "$3=\$ac_header_compiler"
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_header_mongrel
+
+# ac_fn_c_try_run LINENO
+# ----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
+# that executables *can* be run.
+ac_fn_c_try_run ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
+ { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: program exited with status $ac_status" >&5
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=$ac_status
+fi
+ rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_run
+
+# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists and can be compiled using the include files in
+# INCLUDES, setting the cache variable VAR accordingly.
+ac_fn_c_check_header_compile ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ eval "$3=yes"
+else
+ eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_header_compile
+
+# ac_fn_cxx_try_compile LINENO
+# ----------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_cxx_try_compile ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext
+ if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_cxx_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_cxx_try_compile
+
+# ac_fn_c_try_link LINENO
+# -----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_link ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext conftest$ac_exeext
+ if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ test -x conftest$ac_exeext
+ }; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+ # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+ # interfere with the next link command; also delete a directory that is
+ # left behind by Apple's compiler. We do this before executing the actions.
+ rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_link
+
+# ac_fn_c_check_func LINENO FUNC VAR
+# ----------------------------------
+# Tests whether FUNC exists, setting the cache variable VAR accordingly
+ac_fn_c_check_func ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $2 innocuous_$2
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $2 (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $2
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $2 ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined __stub_$2 || defined __stub___$2
+choke me
+#endif
+
+int
+main ()
+{
+return $2 ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ eval "$3=yes"
+else
+ eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_func
+
+# ac_fn_cxx_try_cpp LINENO
+# ------------------------
+# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+ac_fn_cxx_try_cpp ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if { { ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } > conftest.i && {
+ test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
+ test ! -s conftest.err
+ }; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_cxx_try_cpp
+
+# ac_fn_cxx_try_link LINENO
+# -------------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_cxx_try_link ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext conftest$ac_exeext
+ if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_cxx_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ test -x conftest$ac_exeext
+ }; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+ # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+ # interfere with the next link command; also delete a directory that is
+ # left behind by Apple's compiler. We do this before executing the actions.
+ rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_cxx_try_link
+
+# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES
+# ---------------------------------------------
+# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR
+# accordingly.
+ac_fn_c_check_decl ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ as_decl_name=`echo $2|sed 's/ *(.*//'`
+ as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'`
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5
+$as_echo_n "checking whether $as_decl_name is declared... " >&6; }
+if eval \${$3+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main ()
+{
+#ifndef $as_decl_name
+#ifdef __cplusplus
+ (void) $as_decl_use;
+#else
+ (void) $as_decl_name;
+#endif
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ eval "$3=yes"
+else
+ eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_decl
+cat >config.log <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by gprofng $as_me 2.38.50, which was
+generated by GNU Autoconf 2.69. Invocation command line was
+
+ $ $0 $@
+
+_ACEOF
+exec 5>>config.log
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
+
+/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown`
+/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
+/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ $as_echo "PATH: $as_dir"
+ done
+IFS=$as_save_IFS
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+ for ac_arg
+ do
+ case $ac_arg in
+ -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ continue ;;
+ *\'*)
+ ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ case $ac_pass in
+ 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
+ 2)
+ as_fn_append ac_configure_args1 " '$ac_arg'"
+ if test $ac_must_keep_next = true; then
+ ac_must_keep_next=false # Got value, back to normal.
+ else
+ case $ac_arg in
+ *=* | --config-cache | -C | -disable-* | --disable-* \
+ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+ | -with-* | --with-* | -without-* | --without-* | --x)
+ case "$ac_configure_args0 " in
+ "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+ esac
+ ;;
+ -* ) ac_must_keep_next=true ;;
+ esac
+ fi
+ as_fn_append ac_configure_args " '$ac_arg'"
+ ;;
+ esac
+ done
+done
+{ ac_configure_args0=; unset ac_configure_args0;}
+{ ac_configure_args1=; unset ac_configure_args1;}
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log. We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Use '\'' to represent an apostrophe within the trap.
+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
+trap 'exit_status=$?
+ # Save into config.log some information that might help in debugging.
+ {
+ echo
+
+ $as_echo "## ---------------- ##
+## Cache variables. ##
+## ---------------- ##"
+ echo
+ # The following way of writing the cache mishandles newlines in values,
+(
+ for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+ *) { eval $ac_var=; unset $ac_var;} ;;
+ esac ;;
+ esac
+ done
+ (set) 2>&1 |
+ case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
+ sed -n \
+ "s/'\''/'\''\\\\'\'''\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
+ ;; #(
+ *)
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ ;;
+ esac |
+ sort
+)
+ echo
+
+ $as_echo "## ----------------- ##
+## Output variables. ##
+## ----------------- ##"
+ echo
+ for ac_var in $ac_subst_vars
+ do
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ $as_echo "$ac_var='\''$ac_val'\''"
+ done | sort
+ echo
+
+ if test -n "$ac_subst_files"; then
+ $as_echo "## ------------------- ##
+## File substitutions. ##
+## ------------------- ##"
+ echo
+ for ac_var in $ac_subst_files
+ do
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ $as_echo "$ac_var='\''$ac_val'\''"
+ done | sort
+ echo
+ fi
+
+ if test -s confdefs.h; then
+ $as_echo "## ----------- ##
+## confdefs.h. ##
+## ----------- ##"
+ echo
+ cat confdefs.h
+ echo
+ fi
+ test "$ac_signal" != 0 &&
+ $as_echo "$as_me: caught signal $ac_signal"
+ $as_echo "$as_me: exit $exit_status"
+ } >&5
+ rm -f core *.core core.conftest.* &&
+ rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
+ exit $exit_status
+' 0
+for ac_signal in 1 2 13 15; do
+ trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -f -r conftest* confdefs.h
+
+$as_echo "/* confdefs.h */" > confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_URL "$PACKAGE_URL"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer an explicitly selected file to automatically selected ones.
+ac_site_file1=NONE
+ac_site_file2=NONE
+if test -n "$CONFIG_SITE"; then
+ # We do not want a PATH search for config.site.
+ case $CONFIG_SITE in #((
+ -*) ac_site_file1=./$CONFIG_SITE;;
+ */*) ac_site_file1=$CONFIG_SITE;;
+ *) ac_site_file1=./$CONFIG_SITE;;
+ esac
+elif test "x$prefix" != xNONE; then
+ ac_site_file1=$prefix/share/config.site
+ ac_site_file2=$prefix/etc/config.site
+else
+ ac_site_file1=$ac_default_prefix/share/config.site
+ ac_site_file2=$ac_default_prefix/etc/config.site
+fi
+for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+do
+ test "x$ac_site_file" = xNONE && continue
+ if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+$as_echo "$as_me: loading site script $ac_site_file" >&6;}
+ sed 's/^/| /' "$ac_site_file" >&5
+ . "$ac_site_file" \
+ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "failed to load site script $ac_site_file
+See \`config.log' for more details" "$LINENO" 5; }
+ fi
+done
+
+if test -r "$cache_file"; then
+ # Some versions of bash will fail to source /dev/null (special files
+ # actually), so we avoid doing that. DJGPP emulates it as a regular file.
+ if test /dev/null != "$cache_file" && test -f "$cache_file"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
+$as_echo "$as_me: loading cache $cache_file" >&6;}
+ case $cache_file in
+ [\\/]* | ?:[\\/]* ) . "$cache_file";;
+ *) . "./$cache_file";;
+ esac
+ fi
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
+$as_echo "$as_me: creating cache $cache_file" >&6;}
+ >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in $ac_precious_vars; do
+ eval ac_old_set=\$ac_cv_env_${ac_var}_set
+ eval ac_new_set=\$ac_env_${ac_var}_set
+ eval ac_old_val=\$ac_cv_env_${ac_var}_value
+ eval ac_new_val=\$ac_env_${ac_var}_value
+ case $ac_old_set,$ac_new_set in
+ set,)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,set)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,);;
+ *)
+ if test "x$ac_old_val" != "x$ac_new_val"; then
+ # differences in whitespace do not lead to failure.
+ ac_old_val_w=`echo x $ac_old_val`
+ ac_new_val_w=`echo x $ac_new_val`
+ if test "$ac_old_val_w" != "$ac_new_val_w"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
+$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+ ac_cache_corrupted=:
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+ eval $ac_var=\$ac_old_val
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
+$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
+$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
+ fi;;
+ esac
+ # Pass precious variables to config.status.
+ if test "$ac_new_set" = set; then
+ case $ac_new_val in
+ *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *) ac_arg=$ac_var=$ac_new_val ;;
+ esac
+ case " $ac_configure_args " in
+ *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
+ *) as_fn_append ac_configure_args " '$ac_arg'" ;;
+ esac
+ fi
+done
+if $ac_cache_corrupted; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
+$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+ as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
+fi
+## -------------------- ##
+## Main body of script. ##
+## -------------------- ##
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+ac_aux_dir=
+for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
+ if test -f "$ac_dir/install-sh"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install-sh -c"
+ break
+ elif test -f "$ac_dir/install.sh"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install.sh -c"
+ break
+ elif test -f "$ac_dir/shtool"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/shtool install -c"
+ break
+ fi
+done
+if test -z "$ac_aux_dir"; then
+ as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5
+fi
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
+ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
+ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
+
+
+# Make sure we can run config.sub.
+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+ as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
+$as_echo_n "checking build system type... " >&6; }
+if ${ac_cv_build+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_build_alias=$build_alias
+test "x$ac_build_alias" = x &&
+ ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+test "x$ac_build_alias" = x &&
+ as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
+ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+ as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
+$as_echo "$ac_cv_build" >&6; }
+case $ac_cv_build in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
+esac
+build=$ac_cv_build
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_build
+shift
+build_cpu=$1
+build_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+build_os=$*
+IFS=$ac_save_IFS
+case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
+$as_echo_n "checking host system type... " >&6; }
+if ${ac_cv_host+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test "x$host_alias" = x; then
+ ac_cv_host=$ac_cv_build
+else
+ ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
+ as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
+$as_echo "$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
+esac
+host=$ac_cv_host
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_host
+shift
+host_cpu=$1
+host_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+host_os=$*
+IFS=$ac_save_IFS
+case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5
+$as_echo_n "checking target system type... " >&6; }
+if ${ac_cv_target+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test "x$target_alias" = x; then
+ ac_cv_target=$ac_cv_host
+else
+ ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` ||
+ as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5
+$as_echo "$ac_cv_target" >&6; }
+case $ac_cv_target in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;;
+esac
+target=$ac_cv_target
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_target
+shift
+target_cpu=$1
+target_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+target_os=$*
+IFS=$ac_save_IFS
+case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac
+
+
+# The aliases save the names the user supplied, while $host etc.
+# will get canonicalized.
+test -n "$target_alias" &&
+ test "$program_prefix$program_suffix$program_transform_name" = \
+ NONENONEs,x,x, &&
+ program_prefix=${target_alias}-
+am__api_version='1.15'
+
+# Find a good install program. We prefer a C program (faster),
+# so one script is as good as another. But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if ${ac_cv_path_install+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+ ./ | .// | /[cC]/* | \
+ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+ /usr/ucb/* ) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ # Don't use installbsd from OSF since it installs stuff as root
+ # by default.
+ for ac_prog in ginstall scoinst install; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+ if test $ac_prog = install &&
+ grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+ :
+ elif test $ac_prog = install &&
+ grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # program-specific install script used by HP pwplus--don't use.
+ :
+ else
+ rm -rf conftest.one conftest.two conftest.dir
+ echo one > conftest.one
+ echo two > conftest.two
+ mkdir conftest.dir
+ if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+ test -s conftest.one && test -s conftest.two &&
+ test -s conftest.dir/conftest.one &&
+ test -s conftest.dir/conftest.two
+ then
+ ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+ break 3
+ fi
+ fi
+ fi
+ done
+ done
+ ;;
+esac
+
+ done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+ if test "${ac_cv_path_install+set}" = set; then
+ INSTALL=$ac_cv_path_install
+ else
+ # As a last resort, use the slow shell script. Don't cache a
+ # value for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the value is a relative name.
+ INSTALL=$ac_install_sh
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
+$as_echo_n "checking whether build environment is sane... " >&6; }
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name. Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+ *[\\\"\#\$\&\'\`$am_lf]*)
+ as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;;
+esac
+case $srcdir in
+ *[\\\"\#\$\&\'\`$am_lf\ \ ]*)
+ as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;;
+esac
+
+# Do 'set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ am_has_slept=no
+ for am_try in 1 2; do
+ echo "timestamp, slept: $am_has_slept" > conftest.file
+ set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+ if test "$*" = "X"; then
+ # -L didn't work.
+ set X `ls -t "$srcdir/configure" conftest.file`
+ fi
+ if test "$*" != "X $srcdir/configure conftest.file" \
+ && test "$*" != "X conftest.file $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ as_fn_error $? "ls -t appears to fail. Make sure there is not a broken
+ alias in your environment" "$LINENO" 5
+ fi
+ if test "$2" = conftest.file || test $am_try -eq 2; then
+ break
+ fi
+ # Just in case.
+ sleep 1
+ am_has_slept=yes
+ done
+ test "$2" = conftest.file
+ )
+then
+ # Ok.
+ :
+else
+ as_fn_error $? "newly created file is older than distributed files!
+Check your system clock" "$LINENO" 5
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+# If we didn't sleep, we still need to ensure time stamps of config.status and
+# generated files are strictly newer.
+am_sleep_pid=
+if grep 'slept: no' conftest.file >/dev/null 2>&1; then
+ ( sleep 1 ) &
+ am_sleep_pid=$!
+fi
+
+rm -f conftest.file
+
+test "$program_prefix" != NONE &&
+ program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+ program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+# Expand $ac_aux_dir to an absolute path.
+am_aux_dir=`cd "$ac_aux_dir" && pwd`
+
+if test x"${MISSING+set}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+ *)
+ MISSING="\${SHELL} $am_aux_dir/missing" ;;
+ esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --is-lightweight"; then
+ am_missing_run="$MISSING "
+else
+ am_missing_run=
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5
+$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;}
+fi
+
+if test x"${install_sh+set}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+ *)
+ install_sh="\${SHELL} $am_aux_dir/install-sh"
+ esac
+fi
+
+# Installed binaries are usually stripped using 'strip' when the user
+# run "make install-strip". However 'strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the 'STRIP' environment variable to overrule this program.
+if test "$cross_compiling" != no; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_STRIP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$STRIP"; then
+ ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+ ac_ct_STRIP=$STRIP
+ # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_STRIP"; then
+ ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_STRIP="strip"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_STRIP" = x; then
+ STRIP=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ STRIP=$ac_ct_STRIP
+ fi
+else
+ STRIP="$ac_cv_prog_STRIP"
+fi
+
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
+$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
+if test -z "$MKDIR_P"; then
+ if ${ac_cv_path_mkdir+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in mkdir gmkdir; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue
+ case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
+ 'mkdir (GNU coreutils) '* | \
+ 'mkdir (coreutils) '* | \
+ 'mkdir (fileutils) '4.1*)
+ ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
+ break 3;;
+ esac
+ done
+ done
+ done
+IFS=$as_save_IFS
+
+fi
+
+ test -d ./--version && rmdir ./--version
+ if test "${ac_cv_path_mkdir+set}" = set; then
+ MKDIR_P="$ac_cv_path_mkdir -p"
+ else
+ # As a last resort, use the slow shell script. Don't cache a
+ # value for MKDIR_P within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the value is a relative name.
+ MKDIR_P="$ac_install_sh -d"
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
+$as_echo "$MKDIR_P" >&6; }
+
+for ac_prog in gawk mawk nawk awk
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_AWK+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$AWK"; then
+ ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_AWK="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
+$as_echo "$AWK" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$AWK" && break
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+set x ${MAKE-make}
+ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+ @echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+ *@@@%%%=?*=@@@%%%*)
+ eval ac_cv_prog_make_${ac_make}_set=yes;;
+ *)
+ eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
+rm -f conftest.make
+fi
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ SET_MAKE=
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+ am__leading_dot=.
+else
+ am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+# Check whether --enable-silent-rules was given.
+if test "${enable_silent_rules+set}" = set; then :
+ enableval=$enable_silent_rules;
+fi
+
+case $enable_silent_rules in # (((
+ yes) AM_DEFAULT_VERBOSITY=0;;
+ no) AM_DEFAULT_VERBOSITY=1;;
+ *) AM_DEFAULT_VERBOSITY=1;;
+esac
+am_make=${MAKE-make}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5
+$as_echo_n "checking whether $am_make supports nested variables... " >&6; }
+if ${am_cv_make_support_nested_variables+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if $as_echo 'TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+ @$(TRUE)
+.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then
+ am_cv_make_support_nested_variables=yes
+else
+ am_cv_make_support_nested_variables=no
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5
+$as_echo "$am_cv_make_support_nested_variables" >&6; }
+if test $am_cv_make_support_nested_variables = yes; then
+ AM_V='$(V)'
+ AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+ AM_V=$AM_DEFAULT_VERBOSITY
+ AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
+AM_BACKSLASH='\'
+
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+ # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+ # is not polluted with repeated "-I."
+ am__isrc=' -I$(srcdir)'
+ # test to see if srcdir already configured
+ if test -f $srcdir/config.status; then
+ as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
+ fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+ if (cygpath --version) >/dev/null 2>/dev/null; then
+ CYGPATH_W='cygpath -w'
+ else
+ CYGPATH_W=echo
+ fi
+fi
+
+
+# Define the identity of the package.
+ PACKAGE='gprofng'
+ VERSION='2.38.50'
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define VERSION "$VERSION"
+_ACEOF
+
+# Some tools Automake needs.
+
+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
+
+
+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
+
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
+
+
+AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+
+
+MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
+# For better backward compatibility. To be removed once Automake 1.9.x
+# dies out for good. For more background, see:
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+mkdir_p='$(MKDIR_P)'
+
+# We need awk for the "check" target (and possibly the TAP driver). The
+# system "awk" is bad on some platforms.
+# 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}'
+
+
+# We'll loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar pax cpio none'
+
+am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'
+
+
+
+
+
+
+# POSIX will say in a future version that running "rm -f" with no argument
+# is OK; and we want to be able to make that assumption in our Makefile
+# recipes. So use an aggressive probe to check that the usage we want is
+# actually supported "in the wild" to an acceptable degree.
+# See automake bug#10828.
+# To make any issue more visible, cause the running configure to be aborted
+# by default if the 'rm' program in use doesn't match our expectations; the
+# user can still override this though.
+if rm -f && rm -fr && rm -rf; then : OK; else
+ cat >&2 <<'END'
+Oops!
+
+Your 'rm' program seems unable to run without file operands specified
+on the command line, even when the '-f' option is present. This is contrary
+to the behaviour of most rm programs out there, and not conforming with
+the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>
+
+Please tell bug-automake@gnu.org about your system, including the value
+of your $PATH and any error possibly output before this message. This
+can help us improve future automake versions.
+
+END
+ if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then
+ echo 'Configuration will proceed anyway, since you have set the' >&2
+ echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2
+ echo >&2
+ else
+ cat >&2 <<'END'
+Aborting the configuration process, to ensure you take notice of the issue.
+
+You can download and install GNU coreutils to get an 'rm' implementation
+that behaves properly: <http://www.gnu.org/software/coreutils/>.
+
+If you want to complete the configuration process using your problematic
+'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
+to "yes", and re-run configure.
+
+END
+ as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5
+ fi
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5
+$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; }
+ # Check whether --enable-maintainer-mode was given.
+if test "${enable_maintainer_mode+set}" = set; then :
+ enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval
+else
+ USE_MAINTAINER_MODE=no
+fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5
+$as_echo "$USE_MAINTAINER_MODE" >&6; }
+ if test $USE_MAINTAINER_MODE = yes; then
+ MAINTAINER_MODE_TRUE=
+ MAINTAINER_MODE_FALSE='#'
+else
+ MAINTAINER_MODE_TRUE='#'
+ MAINTAINER_MODE_FALSE=
+fi
+
+ MAINT=$MAINTAINER_MODE_TRUE
+
+
+
+DEPDIR="${am__leading_dot}deps"
+
+ac_config_commands="$ac_config_commands depfiles"
+
+
+am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+ @echo this is the am__doit target
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5
+$as_echo_n "checking for style of include used by $am_make... " >&6; }
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# Ignore all kinds of additional output from 'make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+ am__include=include
+ am__quote=
+ _am_result=GNU
+ ;;
+esac
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+ echo '.include "confinc"' > confmf
+ case `$am_make -s -f confmf 2> /dev/null` in #(
+ *the\ am__doit\ target*)
+ am__include=.include
+ am__quote="\""
+ _am_result=BSD
+ ;;
+ esac
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5
+$as_echo "$_am_result" >&6; }
+rm -f confinc confmf
+
+# Check whether --enable-dependency-tracking was given.
+if test "${enable_dependency_tracking+set}" = set; then :
+ enableval=$enable_dependency_tracking;
+fi
+
+if test "x$enable_dependency_tracking" != xno; then
+ am_depcomp="$ac_aux_dir/depcomp"
+ AMDEPBACKSLASH='\'
+ am__nodep='_no'
+fi
+ if test "x$enable_dependency_tracking" != xno; then
+ AMDEP_TRUE=
+ AMDEP_FALSE='#'
+else
+ AMDEP_TRUE='#'
+ AMDEP_FALSE=
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}gcc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="gcc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}cc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ fi
+fi
+if test -z "$CC"; then
+ # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+ ac_prog_rejected=yes
+ continue
+ fi
+ ac_cv_prog_CC="cc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+ # We found a bogon in the path, so make sure we never use it.
+ set dummy $ac_cv_prog_CC
+ shift
+ if test $# != 0; then
+ # We chose a different compiler from the bogus one.
+ # However, it has the same basename, so the bogon will be chosen
+ # first if we set CC to just the basename; use the full file name.
+ shift
+ ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+ fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in cl.exe
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$CC" && break
+ done
+fi
+if test -z "$CC"; then
+ ac_ct_CC=$CC
+ for ac_prog in cl.exe
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_CC" && break
+done
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+fi
+
+fi
+
+
+test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "no acceptable C compiler found in \$PATH
+See \`config.log' for more details" "$LINENO" 5; }
+
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+ { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ sed '10a\
+... rest of stderr output deleted ...
+ 10q' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ fi
+ rm -f conftest.er1 conftest.err
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+done
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
+$as_echo_n "checking whether the C compiler works... " >&6; }
+ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+
+# The possible output files:
+ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
+
+ac_rmfiles=
+for ac_file in $ac_files
+do
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+ * ) ac_rmfiles="$ac_rmfiles $ac_file";;
+ esac
+done
+rm -f $ac_rmfiles
+
+if { { ac_try="$ac_link_default"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link_default") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
+# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
+# in a Makefile. We should not override ac_cv_exeext if it was cached,
+# so that the user can short-circuit this test for compilers unknown to
+# Autoconf.
+for ac_file in $ac_files ''
+do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
+ ;;
+ [ab].out )
+ # We found the default executable, but exeext='' is most
+ # certainly right.
+ break;;
+ *.* )
+ if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+ then :; else
+ ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ fi
+ # We set ac_cv_exeext here because the later test for it is not
+ # safe: cross compilers may not add the suffix if given an `-o'
+ # argument, so we may need to know it at that point already.
+ # Even if this section looks crufty: it has the advantage of
+ # actually working.
+ break;;
+ * )
+ break;;
+ esac
+done
+test "$ac_cv_exeext" = no && ac_cv_exeext=
+
+else
+ ac_file=''
+fi
+if test -z "$ac_file"; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "C compiler cannot create executables
+See \`config.log' for more details" "$LINENO" 5; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
+$as_echo_n "checking for C compiler default output file name... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+$as_echo "$ac_file" >&6; }
+ac_exeext=$ac_cv_exeext
+
+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
+$as_echo_n "checking for suffix of executables... " >&6; }
+if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+ *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ break;;
+ * ) break;;
+ esac
+done
+else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+rm -f conftest conftest$ac_cv_exeext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
+$as_echo "$ac_cv_exeext" >&6; }
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdio.h>
+int
+main ()
+{
+FILE *f = fopen ("conftest.out", "w");
+ return ferror (f) || fclose (f) != 0;
+
+ ;
+ return 0;
+}
+_ACEOF
+ac_clean_files="$ac_clean_files conftest.out"
+# Check that the compiler produces executables we can run. If not, either
+# the compiler is broken, or we cross compile.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+$as_echo_n "checking whether we are cross compiling... " >&6; }
+if test "$cross_compiling" != yes; then
+ { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ if { ac_try='./conftest$ac_cv_exeext'
+ { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then
+ cross_compiling=no
+ else
+ if test "$cross_compiling" = maybe; then
+ cross_compiling=yes
+ else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details" "$LINENO" 5; }
+ fi
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+$as_echo "$cross_compiling" >&6; }
+
+rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
+$as_echo_n "checking for suffix of object files... " >&6; }
+if ${ac_cv_objext+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ for ac_file in conftest.o conftest.obj conftest.*; do
+ test -f "$ac_file" || continue;
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
+ *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+ break;;
+ esac
+done
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of object files: cannot compile
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
+$as_echo "$ac_cv_objext" >&6; }
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+if ${ac_cv_c_compiler_gnu+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_compiler_gnu=yes
+else
+ ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+ GCC=yes
+else
+ GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
+if ${ac_cv_prog_cc_g+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_save_c_werror_flag=$ac_c_werror_flag
+ ac_c_werror_flag=yes
+ ac_cv_prog_cc_g=no
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_g=yes
+else
+ CFLAGS=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+ ac_c_werror_flag=$ac_save_c_werror_flag
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+ CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+ if test "$GCC" = yes; then
+ CFLAGS="-g -O2"
+ else
+ CFLAGS="-g"
+ fi
+else
+ if test "$GCC" = yes; then
+ CFLAGS="-O2"
+ else
+ CFLAGS=
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if ${ac_cv_prog_cc_c89+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdarg.h>
+#include <stdio.h>
+struct stat;
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+ char **p;
+ int i;
+{
+ return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+ char *s;
+ va_list v;
+ va_start (v,p);
+ s = g (p, va_arg (v,int));
+ va_end (v);
+ return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
+ function prototypes and stuff, but not '\xHH' hex character constants.
+ These don't provoke an error unfortunately, instead are silently treated
+ as 'x'. The following induces an error, until -std is added to get
+ proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
+ array size at least. It's necessary to write '\x00'==0 to get something
+ that's true only with -std. */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+ inside strings and character constants. */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
+ ;
+ return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_c89=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext
+ test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+ x)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+ xno)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+ *)
+ CC="$CC $ac_cv_prog_cc_c89"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c89" != xno; then :
+
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5
+$as_echo_n "checking whether $CC understands -c and -o together... " >&6; }
+if ${am_cv_prog_cc_c_o+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+ # Make sure it works both with $CC and with simple cc.
+ # Following AC_PROG_CC_C_O, we do the test twice because some
+ # compilers refuse to overwrite an existing .o file with -o,
+ # though they will create one.
+ am_cv_prog_cc_c_o=yes
+ for am_i in 1 2; do
+ if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5
+ ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } \
+ && test -f conftest2.$ac_objext; then
+ : OK
+ else
+ am_cv_prog_cc_c_o=no
+ break
+ fi
+ done
+ rm -f core conftest*
+ unset am_i
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5
+$as_echo "$am_cv_prog_cc_c_o" >&6; }
+if test "$am_cv_prog_cc_c_o" != yes; then
+ # Losing compiler, so override with the script.
+ # FIXME: It is wrong to rewrite CC.
+ # But if we don't then we get into trouble of one sort or another.
+ # A longer-term fix would be to have automake use am__CC in this case,
+ # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+ CC="$am_aux_dir/compile $CC"
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+depcc="$CC" am_compiler_list=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if ${am_cv_CC_dependencies_compiler_type+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named 'D' -- because '-MD' means "put the output
+ # in D".
+ 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.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_CC_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+ fi
+ am__universal=false
+ case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac
+
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+ # Solaris 10 /bin/sh.
+ echo '/* dummy */' > sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ # We check with '-c' and '-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle '-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs.
+ am__obj=sub/conftest.${OBJEXT-o}
+ am__minus_obj="-o $am__obj"
+ case $depmode in
+ gcc)
+ # This depmode causes a compiler race in universal mode.
+ test "$am__universal" = false || continue
+ ;;
+ nosideeffect)
+ # After this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested.
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ 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.
+ am__obj=conftest.${OBJEXT-o}
+ am__minus_obj=
+ ;;
+ none) break ;;
+ esac
+ if depmode=$depmode \
+ source=sub/conftest.c object=$am__obj \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_CC_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+ if
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+ am__fastdepCC_TRUE=
+ am__fastdepCC_FALSE='#'
+else
+ am__fastdepCC_TRUE='#'
+ am__fastdepCC_FALSE=
+fi
+
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
+$as_echo_n "checking how to run the C preprocessor... " >&6; }
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+ CPP=
+fi
+if test -z "$CPP"; then
+ if ${ac_cv_prog_CPP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ # Double quotes because CPP needs to be expanded
+ for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+ do
+ ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+ # Broken: success on invalid input.
+continue
+else
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+ break
+fi
+
+ done
+ ac_cv_prog_CPP=$CPP
+
+fi
+ CPP=$ac_cv_prog_CPP
+else
+ ac_cv_prog_CPP=$CPP
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
+$as_echo "$CPP" >&6; }
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+ # Broken: success on invalid input.
+continue
+else
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+
+else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
+$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
+if ${ac_cv_path_GREP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -z "$GREP"; then
+ ac_path_GREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in grep ggrep; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+ as_fn_executable_p "$ac_path_GREP" || continue
+# Check for GNU ac_path_GREP and select it if it is found.
+ # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+ ac_count=0
+ $as_echo_n 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ $as_echo 'GREP' >> "conftest.nl"
+ "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_GREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_GREP="$ac_path_GREP"
+ ac_path_GREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_GREP_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_GREP"; then
+ as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+else
+ ac_cv_path_GREP=$GREP
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
+$as_echo "$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
+$as_echo_n "checking for egrep... " >&6; }
+if ${ac_cv_path_EGREP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+ then ac_cv_path_EGREP="$GREP -E"
+ else
+ if test -z "$EGREP"; then
+ ac_path_EGREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in egrep; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+ as_fn_executable_p "$ac_path_EGREP" || continue
+# Check for GNU ac_path_EGREP and select it if it is found.
+ # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+*)
+ ac_count=0
+ $as_echo_n 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ $as_echo 'EGREP' >> "conftest.nl"
+ "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_EGREP="$ac_path_EGREP"
+ ac_path_EGREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_EGREP_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_EGREP"; then
+ as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+else
+ ac_cv_path_EGREP=$EGREP
+fi
+
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
+$as_echo "$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
+$as_echo_n "checking for ANSI C header files... " >&6; }
+if ${ac_cv_header_stdc+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_header_stdc=yes
+else
+ ac_cv_header_stdc=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+ # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "memchr" >/dev/null 2>&1; then :
+
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "free" >/dev/null 2>&1; then :
+
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+ if test "$cross_compiling" = yes; then :
+ :
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ctype.h>
+#include <stdlib.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+ (('a' <= (c) && (c) <= 'i') \
+ || ('j' <= (c) && (c) <= 'r') \
+ || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+ int i;
+ for (i = 0; i < 256; i++)
+ if (XOR (islower (i), ISLOWER (i))
+ || toupper (i) != TOUPPER (i))
+ return 2;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+
+else
+ ac_cv_header_stdc=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
+$as_echo "$ac_cv_header_stdc" >&6; }
+if test $ac_cv_header_stdc = yes; then
+
+$as_echo "#define STDC_HEADERS 1" >>confdefs.h
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+ inttypes.h stdint.h unistd.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
+"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+ ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default"
+if test "x$ac_cv_header_minix_config_h" = xyes; then :
+ MINIX=yes
+else
+ MINIX=
+fi
+
+
+ if test "$MINIX" = yes; then
+
+$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h
+
+
+$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h
+
+
+$as_echo "#define _MINIX 1" >>confdefs.h
+
+ fi
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5
+$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; }
+if ${ac_cv_safe_to_define___extensions__+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+# define __EXTENSIONS__ 1
+ $ac_includes_default
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_safe_to_define___extensions__=yes
+else
+ ac_cv_safe_to_define___extensions__=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5
+$as_echo "$ac_cv_safe_to_define___extensions__" >&6; }
+ test $ac_cv_safe_to_define___extensions__ = yes &&
+ $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h
+
+ $as_echo "#define _ALL_SOURCE 1" >>confdefs.h
+
+ $as_echo "#define _GNU_SOURCE 1" >>confdefs.h
+
+ $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h
+
+ $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}gcc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="gcc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}cc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ fi
+fi
+if test -z "$CC"; then
+ # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+ ac_prog_rejected=yes
+ continue
+ fi
+ ac_cv_prog_CC="cc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+ # We found a bogon in the path, so make sure we never use it.
+ set dummy $ac_cv_prog_CC
+ shift
+ if test $# != 0; then
+ # We chose a different compiler from the bogus one.
+ # However, it has the same basename, so the bogon will be chosen
+ # first if we set CC to just the basename; use the full file name.
+ shift
+ ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+ fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in cl.exe
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$CC" && break
+ done
+fi
+if test -z "$CC"; then
+ ac_ct_CC=$CC
+ for ac_prog in cl.exe
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_CC" && break
+done
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+fi
+
+fi
+
+
+test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "no acceptable C compiler found in \$PATH
+See \`config.log' for more details" "$LINENO" 5; }
+
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+ { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ sed '10a\
+... rest of stderr output deleted ...
+ 10q' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ fi
+ rm -f conftest.er1 conftest.err
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+if ${ac_cv_c_compiler_gnu+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_compiler_gnu=yes
+else
+ ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+ GCC=yes
+else
+ GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
+if ${ac_cv_prog_cc_g+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_save_c_werror_flag=$ac_c_werror_flag
+ ac_c_werror_flag=yes
+ ac_cv_prog_cc_g=no
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_g=yes
+else
+ CFLAGS=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+ ac_c_werror_flag=$ac_save_c_werror_flag
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+ CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+ if test "$GCC" = yes; then
+ CFLAGS="-g -O2"
+ else
+ CFLAGS="-g"
+ fi
+else
+ if test "$GCC" = yes; then
+ CFLAGS="-O2"
+ else
+ CFLAGS=
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if ${ac_cv_prog_cc_c89+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdarg.h>
+#include <stdio.h>
+struct stat;
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+ char **p;
+ int i;
+{
+ return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+ char *s;
+ va_list v;
+ va_start (v,p);
+ s = g (p, va_arg (v,int));
+ va_end (v);
+ return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
+ function prototypes and stuff, but not '\xHH' hex character constants.
+ These don't provoke an error unfortunately, instead are silently treated
+ as 'x'. The following induces an error, until -std is added to get
+ proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
+ array size at least. It's necessary to write '\x00'==0 to get something
+ that's true only with -std. */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+ inside strings and character constants. */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
+ ;
+ return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_c89=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext
+ test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+ x)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+ xno)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+ *)
+ CC="$CC $ac_cv_prog_cc_c89"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c89" != xno; then :
+
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5
+$as_echo_n "checking whether $CC understands -c and -o together... " >&6; }
+if ${am_cv_prog_cc_c_o+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+ # Make sure it works both with $CC and with simple cc.
+ # Following AC_PROG_CC_C_O, we do the test twice because some
+ # compilers refuse to overwrite an existing .o file with -o,
+ # though they will create one.
+ am_cv_prog_cc_c_o=yes
+ for am_i in 1 2; do
+ if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5
+ ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } \
+ && test -f conftest2.$ac_objext; then
+ : OK
+ else
+ am_cv_prog_cc_c_o=no
+ break
+ fi
+ done
+ rm -f core conftest*
+ unset am_i
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5
+$as_echo "$am_cv_prog_cc_c_o" >&6; }
+if test "$am_cv_prog_cc_c_o" != yes; then
+ # Losing compiler, so override with the script.
+ # FIXME: It is wrong to rewrite CC.
+ # But if we don't then we get into trouble of one sort or another.
+ # A longer-term fix would be to have automake use am__CC in this case,
+ # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+ CC="$am_aux_dir/compile $CC"
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+depcc="$CC" am_compiler_list=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if ${am_cv_CC_dependencies_compiler_type+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named 'D' -- because '-MD' means "put the output
+ # in D".
+ 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.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_CC_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+ fi
+ am__universal=false
+ case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac
+
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+ # Solaris 10 /bin/sh.
+ echo '/* dummy */' > sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ # We check with '-c' and '-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle '-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs.
+ am__obj=sub/conftest.${OBJEXT-o}
+ am__minus_obj="-o $am__obj"
+ case $depmode in
+ gcc)
+ # This depmode causes a compiler race in universal mode.
+ test "$am__universal" = false || continue
+ ;;
+ nosideeffect)
+ # After this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested.
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ 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.
+ am__obj=conftest.${OBJEXT-o}
+ am__minus_obj=
+ ;;
+ none) break ;;
+ esac
+ if depmode=$depmode \
+ source=sub/conftest.c object=$am__obj \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_CC_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+ if
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+ am__fastdepCC_TRUE=
+ am__fastdepCC_FALSE='#'
+else
+ am__fastdepCC_TRUE='#'
+ am__fastdepCC_FALSE=
+fi
+
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+if test -z "$CXX"; then
+ if test -n "$CCC"; then
+ CXX=$CCC
+ else
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CXX+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CXX"; then
+ ac_cv_prog_CXX="$CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CXX=$ac_cv_prog_CXX
+if test -n "$CXX"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
+$as_echo "$CXX" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$CXX" && break
+ done
+fi
+if test -z "$CXX"; then
+ ac_ct_CXX=$CXX
+ for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CXX+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_CXX"; then
+ ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CXX="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
+if test -n "$ac_ct_CXX"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
+$as_echo "$ac_ct_CXX" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_CXX" && break
+done
+
+ if test "x$ac_ct_CXX" = x; then
+ CXX="g++"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CXX=$ac_ct_CXX
+ fi
+fi
+
+ fi
+fi
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+ { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ sed '10a\
+... rest of stderr output deleted ...
+ 10q' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ fi
+ rm -f conftest.er1 conftest.err
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5
+$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; }
+if ${ac_cv_cxx_compiler_gnu+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ ac_compiler_gnu=yes
+else
+ ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5
+$as_echo "$ac_cv_cxx_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+ GXX=yes
+else
+ GXX=
+fi
+ac_test_CXXFLAGS=${CXXFLAGS+set}
+ac_save_CXXFLAGS=$CXXFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
+$as_echo_n "checking whether $CXX accepts -g... " >&6; }
+if ${ac_cv_prog_cxx_g+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_save_cxx_werror_flag=$ac_cxx_werror_flag
+ ac_cxx_werror_flag=yes
+ ac_cv_prog_cxx_g=no
+ CXXFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ ac_cv_prog_cxx_g=yes
+else
+ CXXFLAGS=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+
+else
+ ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+ CXXFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ ac_cv_prog_cxx_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5
+$as_echo "$ac_cv_prog_cxx_g" >&6; }
+if test "$ac_test_CXXFLAGS" = set; then
+ CXXFLAGS=$ac_save_CXXFLAGS
+elif test $ac_cv_prog_cxx_g = yes; then
+ if test "$GXX" = yes; then
+ CXXFLAGS="-g -O2"
+ else
+ CXXFLAGS="-g"
+ fi
+else
+ if test "$GXX" = yes; then
+ CXXFLAGS="-O2"
+ else
+ CXXFLAGS=
+ fi
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+depcc="$CXX" am_compiler_list=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if ${am_cv_CXX_dependencies_compiler_type+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named 'D' -- because '-MD' means "put the output
+ # in D".
+ 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.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_CXX_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+ fi
+ am__universal=false
+ case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac
+
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+ # Solaris 10 /bin/sh.
+ echo '/* dummy */' > sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ # We check with '-c' and '-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle '-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs.
+ am__obj=sub/conftest.${OBJEXT-o}
+ am__minus_obj="-o $am__obj"
+ case $depmode in
+ gcc)
+ # This depmode causes a compiler race in universal mode.
+ test "$am__universal" = false || continue
+ ;;
+ nosideeffect)
+ # After this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested.
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ 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.
+ am__obj=conftest.${OBJEXT-o}
+ am__minus_obj=
+ ;;
+ none) break ;;
+ esac
+ if depmode=$depmode \
+ source=sub/conftest.c object=$am__obj \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_CXX_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_CXX_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; }
+CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
+
+ if
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then
+ am__fastdepCXX_TRUE=
+ am__fastdepCXX_FALSE='#'
+else
+ am__fastdepCXX_TRUE='#'
+ am__fastdepCXX_FALSE=
+fi
+
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_RANLIB+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$RANLIB"; then
+ ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
+$as_echo "$RANLIB" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+ ac_ct_RANLIB=$RANLIB
+ # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_RANLIB"; then
+ ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_RANLIB="ranlib"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
+$as_echo "$ac_ct_RANLIB" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_RANLIB" = x; then
+ RANLIB=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ RANLIB=$ac_ct_RANLIB
+ fi
+else
+ RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+if test -n "$ac_tool_prefix"; then
+ for ac_prog in ar lib "link -lib"
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_AR+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$AR"; then
+ ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_AR="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
+$as_echo "$AR" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$AR" && break
+ done
+fi
+if test -z "$AR"; then
+ ac_ct_AR=$AR
+ for ac_prog in ar lib "link -lib"
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_AR+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_AR"; then
+ ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_AR="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
+$as_echo "$ac_ct_AR" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_AR" && break
+done
+
+ if test "x$ac_ct_AR" = x; then
+ AR="false"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ AR=$ac_ct_AR
+ fi
+fi
+
+: ${AR=ar}
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the archiver ($AR) interface" >&5
+$as_echo_n "checking the archiver ($AR) interface... " >&6; }
+if ${am_cv_ar_interface+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ am_cv_ar_interface=ar
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int some_variable = 0;
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&5'
+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5
+ (eval $am_ar_try) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ if test "$ac_status" -eq 0; then
+ am_cv_ar_interface=ar
+ else
+ am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&5'
+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5
+ (eval $am_ar_try) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ if test "$ac_status" -eq 0; then
+ am_cv_ar_interface=lib
+ else
+ am_cv_ar_interface=unknown
+ fi
+ fi
+ rm -f conftest.lib libconftest.a
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_ar_interface" >&5
+$as_echo "$am_cv_ar_interface" >&6; }
+
+case $am_cv_ar_interface in
+ar)
+ ;;
+lib)
+ # Microsoft lib, so override with the ar-lib wrapper script.
+ # FIXME: It is wrong to rewrite AR.
+ # But if we don't then we get into trouble of one sort or another.
+ # A longer-term fix would be to have automake use am__AR in this case,
+ # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something
+ # similar.
+ AR="$am_aux_dir/ar-lib $AR"
+ ;;
+unknown)
+ as_fn_error $? "could not determine $AR interface" "$LINENO" 5
+ ;;
+esac
+
+
+ for ac_prog in bison
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_BISON+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$BISON"; then
+ ac_cv_prog_BISON="$BISON" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_BISON="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+BISON=$ac_cv_prog_BISON
+if test -n "$BISON"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BISON" >&5
+$as_echo "$BISON" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$BISON" && break
+done
+
+ if test -z "$BISON"; then
+ ac_verc_fail=yes
+ else
+ cat >conftest.y <<_ACEOF
+%require "3.0.4"
+%%
+exp:
+_ACEOF
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bison 3.0.4 or newer" >&5
+$as_echo_n "checking for bison 3.0.4 or newer... " >&6; }
+ ac_prog_version=`$BISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'`
+ : ${ac_prog_version:='v. ?.??'}
+ if $BISON conftest.y -o conftest.c 2>/dev/null; then
+ ac_prog_version="$ac_prog_version, ok"
+ ac_verc_fail=no
+ else
+ ac_prog_version="$ac_prog_version, bad"
+ ac_verc_fail=yes
+ fi
+ rm -f conftest.y conftest.c
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_prog_version" >&5
+$as_echo "$ac_prog_version" >&6; }
+ fi
+ if test $ac_verc_fail = yes; then
+ BISON=:
+ fi
+
+
+if test x$BISON = "x:"; then
+ as_fn_error $? "Building gprofng requires bison 3.0.4 or later." "$LINENO" 5
+fi
+
+# Check whether --enable-shared was given.
+if test "${enable_shared+set}" = set; then :
+ enableval=$enable_shared; p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_shared=yes ;;
+ no) enable_shared=no ;;
+ *)
+ enable_shared=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_shared=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac
+else
+ enable_shared=no
+fi
+
+
+
+
+
+
+
+
+
+case `pwd` in
+ *\ * | *\ *)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
+$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;;
+esac
+
+
+
+macro_version='2.2.7a'
+macro_revision='1.3134'
+
+
+
+
+
+
+
+
+
+
+
+
+
+ltmain="$ac_aux_dir/ltmain.sh"
+
+# Backslashify metacharacters that are still active within
+# double-quoted strings.
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5
+$as_echo_n "checking how to print strings... " >&6; }
+# Test print first, because it will be a builtin if present.
+if test "X`print -r -- -n 2>/dev/null`" = X-n && \
+ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
+ ECHO='print -r --'
+elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
+ ECHO='printf %s\n'
+else
+ # Use this function as a fallback that always works.
+ func_fallback_echo ()
+ {
+ eval 'cat <<_LTECHO_EOF
+$1
+_LTECHO_EOF'
+ }
+ ECHO='func_fallback_echo'
+fi
+
+# func_echo_all arg...
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+ $ECHO ""
+}
+
+case "$ECHO" in
+ printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5
+$as_echo "printf" >&6; } ;;
+ print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5
+$as_echo "print -r" >&6; } ;;
+ *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5
+$as_echo "cat" >&6; } ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
+$as_echo_n "checking for a sed that does not truncate output... " >&6; }
+if ${ac_cv_path_SED+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
+ for ac_i in 1 2 3 4 5 6 7; do
+ ac_script="$ac_script$as_nl$ac_script"
+ done
+ echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
+ { ac_script=; unset ac_script;}
+ if test -z "$SED"; then
+ ac_path_SED_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in sed gsed; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
+ as_fn_executable_p "$ac_path_SED" || continue
+# Check for GNU ac_path_SED and select it if it is found.
+ # Check for GNU $ac_path_SED
+case `"$ac_path_SED" --version 2>&1` in
+*GNU*)
+ ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
+*)
+ ac_count=0
+ $as_echo_n 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ $as_echo '' >> "conftest.nl"
+ "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_SED_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_SED="$ac_path_SED"
+ ac_path_SED_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_SED_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_SED"; then
+ as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5
+ fi
+else
+ ac_cv_path_SED=$SED
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5
+$as_echo "$ac_cv_path_SED" >&6; }
+ SED="$ac_cv_path_SED"
+ rm -f conftest.sed
+
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5
+$as_echo_n "checking for fgrep... " >&6; }
+if ${ac_cv_path_FGREP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1
+ then ac_cv_path_FGREP="$GREP -F"
+ else
+ if test -z "$FGREP"; then
+ ac_path_FGREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in fgrep; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext"
+ as_fn_executable_p "$ac_path_FGREP" || continue
+# Check for GNU ac_path_FGREP and select it if it is found.
+ # Check for GNU $ac_path_FGREP
+case `"$ac_path_FGREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;;
+*)
+ ac_count=0
+ $as_echo_n 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ $as_echo 'FGREP' >> "conftest.nl"
+ "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_FGREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_FGREP="$ac_path_FGREP"
+ ac_path_FGREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_FGREP_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_FGREP"; then
+ as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+else
+ ac_cv_path_FGREP=$FGREP
+fi
+
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5
+$as_echo "$ac_cv_path_FGREP" >&6; }
+ FGREP="$ac_cv_path_FGREP"
+
+
+test -z "$GREP" && GREP=grep
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# Check whether --with-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then :
+ withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
+else
+ with_gnu_ld=no
+fi
+
+ac_prog=ld
+if test "$GCC" = yes; then
+ # Check if gcc -print-prog-name=ld gives a path.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
+$as_echo_n "checking for ld used by $CC... " >&6; }
+ case $host in
+ *-*-mingw*)
+ # gcc leaves a trailing carriage return which upsets mingw
+ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+ *)
+ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+ esac
+ case $ac_prog in
+ # Accept absolute paths.
+ [\\/]* | ?:[\\/]*)
+ re_direlt='/[^/][^/]*/\.\./'
+ # Canonicalize the pathname of ld
+ ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+ while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+ ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+ done
+ test -z "$LD" && LD="$ac_prog"
+ ;;
+ "")
+ # If it fails, then pretend we aren't using GCC.
+ ac_prog=ld
+ ;;
+ *)
+ # If it is relative, then search for the first ld in PATH.
+ with_gnu_ld=unknown
+ ;;
+ esac
+elif test "$with_gnu_ld" = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
+$as_echo_n "checking for GNU ld... " >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
+$as_echo_n "checking for non-GNU ld... " >&6; }
+fi
+if ${lt_cv_path_LD+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -z "$LD"; then
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+ lt_cv_path_LD="$ac_dir/$ac_prog"
+ # Check to see if the program is GNU ld. I'd rather use --version,
+ # but apparently some variants of GNU ld only accept -v.
+ # Break only if it was the GNU/non-GNU ld that we prefer.
+ case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+ *GNU* | *'with BFD'*)
+ test "$with_gnu_ld" != no && break
+ ;;
+ *)
+ test "$with_gnu_ld" != yes && break
+ ;;
+ esac
+ fi
+ done
+ IFS="$lt_save_ifs"
+else
+ lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+$as_echo "$LD" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
+$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
+if ${lt_cv_prog_gnu_ld+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ # I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+ lt_cv_prog_gnu_ld=yes
+ ;;
+*)
+ lt_cv_prog_gnu_ld=no
+ ;;
+esac
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
+$as_echo "$lt_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5
+$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; }
+if ${lt_cv_path_NM+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$NM"; then
+ # Let the user override the nm to test.
+ lt_nm_to_check="$NM"
+ else
+ lt_nm_to_check="${ac_tool_prefix}nm"
+ if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+ lt_nm_to_check="$lt_nm_to_check nm"
+ fi
+ fi
+ for lt_tmp_nm in "$lt_nm_to_check"; do
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ # Strip out any user-provided options from the nm to test twice,
+ # the first time to test to see if nm (rather than its options) has
+ # an explicit path, the second time to yield a file which can be
+ # nm'ed itself.
+ tmp_nm_path="`$ECHO "$lt_tmp_nm" | sed 's, -.*$,,'`"
+ case "$tmp_nm_path" in
+ */*|*\\*) tmp_nm="$lt_tmp_nm";;
+ *) tmp_nm="$ac_dir/$lt_tmp_nm";;
+ esac
+ tmp_nm_to_nm="`$ECHO "$tmp_nm" | sed 's, -.*$,,'`"
+ if test -f "$tmp_nm_to_nm" || test -f "$tmp_nm_to_nm$ac_exeext" ; then
+ # Check to see if the nm accepts a BSD-compat flag.
+ # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+ # nm: unknown option "B" ignored
+ case `"$tmp_nm" -B "$tmp_nm_to_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
+ *$tmp_nm*) lt_cv_path_NM="$tmp_nm -B"
+ break
+ ;;
+ *)
+ case `"$tmp_nm" -p "$tmp_nm_to_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
+ *$tmp_nm*)
+ lt_cv_path_NM="$tmp_nm -p"
+ break
+ ;;
+ *)
+ lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+ continue # so that we can try to find one that supports BSD flags
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ done
+ IFS="$lt_save_ifs"
+ done
+ : ${lt_cv_path_NM=no}
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5
+$as_echo "$lt_cv_path_NM" >&6; }
+if test "$lt_cv_path_NM" != "no"; then
+ NM="$lt_cv_path_NM"
+else
+ # Didn't find any BSD compatible name lister, look for dumpbin.
+ if test -n "$DUMPBIN"; then :
+ # Let the user override the test.
+ else
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in dumpbin "link -dump"
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_DUMPBIN+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$DUMPBIN"; then
+ ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+DUMPBIN=$ac_cv_prog_DUMPBIN
+if test -n "$DUMPBIN"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5
+$as_echo "$DUMPBIN" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$DUMPBIN" && break
+ done
+fi
+if test -z "$DUMPBIN"; then
+ ac_ct_DUMPBIN=$DUMPBIN
+ for ac_prog in dumpbin "link -dump"
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_DUMPBIN"; then
+ ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_DUMPBIN="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN
+if test -n "$ac_ct_DUMPBIN"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5
+$as_echo "$ac_ct_DUMPBIN" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_DUMPBIN" && break
+done
+
+ if test "x$ac_ct_DUMPBIN" = x; then
+ DUMPBIN=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ DUMPBIN=$ac_ct_DUMPBIN
+ fi
+fi
+
+ case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in
+ *COFF*)
+ DUMPBIN="$DUMPBIN -symbols"
+ ;;
+ *)
+ DUMPBIN=:
+ ;;
+ esac
+ fi
+
+ if test "$DUMPBIN" != ":"; then
+ NM="$DUMPBIN"
+ fi
+fi
+test -z "$NM" && NM=nm
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5
+$as_echo_n "checking the name lister ($NM) interface... " >&6; }
+if ${lt_cv_nm_interface+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_nm_interface="BSD nm"
+ echo "int some_variable = 0;" > conftest.$ac_ext
+ (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5)
+ (eval "$ac_compile" 2>conftest.err)
+ cat conftest.err >&5
+ (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+ (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+ cat conftest.err >&5
+ (eval echo "\"\$as_me:$LINENO: output\"" >&5)
+ cat conftest.out >&5
+ if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+ lt_cv_nm_interface="MS dumpbin"
+ fi
+ rm -f conftest*
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5
+$as_echo "$lt_cv_nm_interface" >&6; }
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
+$as_echo_n "checking whether ln -s works... " >&6; }
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
+$as_echo "no, using $LN_S" >&6; }
+fi
+
+# find the maximum length of command line arguments
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5
+$as_echo_n "checking the maximum length of command line arguments... " >&6; }
+if ${lt_cv_sys_max_cmd_len+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ i=0
+ teststring="ABCD"
+
+ case $build_os in
+ msdosdjgpp*)
+ # On DJGPP, this test can blow up pretty badly due to problems in libc
+ # (any single argument exceeding 2000 bytes causes a buffer overrun
+ # during glob expansion). Even if it were fixed, the result of this
+ # check would be larger than it should be.
+ lt_cv_sys_max_cmd_len=12288; # 12K is about right
+ ;;
+
+ gnu*)
+ # Under GNU Hurd, this test is not required because there is
+ # no limit to the length of command line arguments.
+ # Libtool will interpret -1 as no limit whatsoever
+ lt_cv_sys_max_cmd_len=-1;
+ ;;
+
+ cygwin* | mingw* | cegcc*)
+ # On Win9x/ME, this test blows up -- it succeeds, but takes
+ # about 5 minutes as the teststring grows exponentially.
+ # Worse, since 9x/ME are not pre-emptively multitasking,
+ # you end up with a "frozen" computer, even though with patience
+ # the test eventually succeeds (with a max line length of 256k).
+ # Instead, let's just punt: use the minimum linelength reported by
+ # all of the supported platforms: 8192 (on NT/2K/XP).
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ mint*)
+ # On MiNT this can take a long time and run out of memory.
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ amigaos*)
+ # On AmigaOS with pdksh, this test takes hours, literally.
+ # So we just punt and use a minimum line length of 8192.
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+ # This has been around since 386BSD, at least. Likely further.
+ if test -x /sbin/sysctl; then
+ lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+ elif test -x /usr/sbin/sysctl; then
+ lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+ else
+ lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs
+ fi
+ # And add a safety zone
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ ;;
+
+ interix*)
+ # We know the value 262144 and hardcode it with a safety zone (like BSD)
+ lt_cv_sys_max_cmd_len=196608
+ ;;
+
+ osf*)
+ # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+ # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+ # nice to cause kernel panics so lets avoid the loop below.
+ # First set a reasonable default.
+ lt_cv_sys_max_cmd_len=16384
+ #
+ if test -x /sbin/sysconfig; then
+ case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+ *1*) lt_cv_sys_max_cmd_len=-1 ;;
+ esac
+ fi
+ ;;
+ sco3.2v5*)
+ lt_cv_sys_max_cmd_len=102400
+ ;;
+ sysv5* | sco5v6* | sysv4.2uw2*)
+ kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+ if test -n "$kargmax"; then
+ lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'`
+ else
+ lt_cv_sys_max_cmd_len=32768
+ fi
+ ;;
+ *)
+ lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+ if test -n "$lt_cv_sys_max_cmd_len"; then
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ else
+ # Make teststring a little bigger before we do anything with it.
+ # a 1K string should be a reasonable start.
+ for i in 1 2 3 4 5 6 7 8 ; do
+ teststring=$teststring$teststring
+ done
+ SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+ # If test is not a shell built-in, we'll probably end up computing a
+ # maximum length that is only half of the actual maximum length, but
+ # we can't tell.
+ while { test "X"`func_fallback_echo "$teststring$teststring" 2>/dev/null` \
+ = "X$teststring$teststring"; } >/dev/null 2>&1 &&
+ test $i != 17 # 1/2 MB should be enough
+ do
+ i=`expr $i + 1`
+ teststring=$teststring$teststring
+ done
+ # Only check the string length outside the loop.
+ lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+ teststring=
+ # Add a significant safety factor because C++ compilers can tack on
+ # massive amounts of additional arguments before passing them to the
+ # linker. It appears as though 1/2 is a usable value.
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+ fi
+ ;;
+ esac
+
+fi
+
+if test -n $lt_cv_sys_max_cmd_len ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5
+$as_echo "$lt_cv_sys_max_cmd_len" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5
+$as_echo "none" >&6; }
+fi
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+
+
+
+
+
+: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5
+$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; }
+# Try some XSI features
+xsi_shell=no
+( _lt_dummy="a/b/c"
+ test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
+ = c,a/b,, \
+ && eval 'test $(( 1 + 1 )) -eq 2 \
+ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
+ && xsi_shell=yes
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5
+$as_echo "$xsi_shell" >&6; }
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5
+$as_echo_n "checking whether the shell understands \"+=\"... " >&6; }
+lt_shell_append=no
+( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \
+ >/dev/null 2>&1 \
+ && lt_shell_append=yes
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5
+$as_echo "$lt_shell_append" >&6; }
+
+
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+ lt_unset=unset
+else
+ lt_unset=false
+fi
+
+
+
+
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+ # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+ lt_SP2NL='tr \040 \012'
+ lt_NL2SP='tr \015\012 \040\040'
+ ;;
+ *) # EBCDIC based system
+ lt_SP2NL='tr \100 \n'
+ lt_NL2SP='tr \r\n \100\100'
+ ;;
+esac
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
+$as_echo_n "checking for $LD option to reload object files... " >&6; }
+if ${lt_cv_ld_reload_flag+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_ld_reload_flag='-r'
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5
+$as_echo "$lt_cv_ld_reload_flag" >&6; }
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+ darwin*)
+ if test "$GCC" = yes; then
+ reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+ else
+ reload_cmds='$LD$reload_flag -o $output$reload_objs'
+ fi
+ ;;
+esac
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
+set dummy ${ac_tool_prefix}objdump; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_OBJDUMP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$OBJDUMP"; then
+ ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+OBJDUMP=$ac_cv_prog_OBJDUMP
+if test -n "$OBJDUMP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
+$as_echo "$OBJDUMP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OBJDUMP"; then
+ ac_ct_OBJDUMP=$OBJDUMP
+ # Extract the first word of "objdump", so it can be a program name with args.
+set dummy objdump; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_OBJDUMP"; then
+ ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_OBJDUMP="objdump"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
+if test -n "$ac_ct_OBJDUMP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
+$as_echo "$ac_ct_OBJDUMP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_OBJDUMP" = x; then
+ OBJDUMP="false"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ OBJDUMP=$ac_ct_OBJDUMP
+ fi
+else
+ OBJDUMP="$ac_cv_prog_OBJDUMP"
+fi
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5
+$as_echo_n "checking how to recognize dependent libraries... " >&6; }
+if ${lt_cv_deplibs_check_method+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix[4-9]*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+beos*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+bsdi[45]*)
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
+ lt_cv_file_magic_cmd='/usr/bin/file -L'
+ lt_cv_file_magic_test_file=/shlib/libc.so
+ ;;
+
+cygwin*)
+ # func_win32_libid is a shell function defined in ltmain.sh
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ ;;
+
+mingw* | pw32*)
+ # Base MSYS/MinGW do not provide the 'file' command needed by
+ # func_win32_libid shell function, so use a weaker test based on 'objdump',
+ # unless we find 'file', for example because we are cross-compiling.
+ # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin.
+ if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ else
+ lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ fi
+ ;;
+
+cegcc*)
+ # use the weaker test based on 'objdump'. See mingw*.
+ lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ ;;
+
+darwin* | rhapsody*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+freebsd* | dragonfly*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+ case $host_cpu in
+ i*86 )
+ # Not sure whether the presence of OpenBSD here was a mistake.
+ # Let's accept both of them until this is cleared up.
+ lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library'
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+ ;;
+ esac
+ else
+ lt_cv_deplibs_check_method=pass_all
+ fi
+ ;;
+
+gnu*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+haiku*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+hpux10.20* | hpux11*)
+ lt_cv_file_magic_cmd=/usr/bin/file
+ case $host_cpu in
+ ia64*)
+ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'
+ lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+ ;;
+ hppa*64*)
+ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'
+ lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+ ;;
+ *)
+ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library'
+ lt_cv_file_magic_test_file=/usr/lib/libc.sl
+ ;;
+ esac
+ ;;
+
+interix[3-9]*)
+ # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$'
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $LD in
+ *-32|*"-32 ") libmagic=32-bit;;
+ *-n32|*"-n32 ") libmagic=N32;;
+ *-64|*"-64 ") libmagic=64-bit;;
+ *) libmagic=never-match;;
+ esac
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$'
+ fi
+ ;;
+
+newos6*)
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=/usr/lib/libnls.so
+ ;;
+
+*nto* | *qnx*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+openbsd*)
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+ fi
+ ;;
+
+osf3* | osf4* | osf5*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+rdos*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+solaris*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sysv4 | sysv4.3*)
+ case $host_vendor in
+ motorola)
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+ ;;
+ ncr)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ sequent)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
+ ;;
+ sni)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
+ lt_cv_file_magic_test_file=/lib/libc.so
+ ;;
+ siemens)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ pc)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ esac
+ ;;
+
+tpf*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+esac
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
+$as_echo "$lt_cv_deplibs_check_method" >&6; }
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+
+
+
+
+
+
+
+
+
+
+
+plugin_option=
+plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
+for plugin in $plugin_names; do
+ plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin`
+ if test x$plugin_so = x$plugin; then
+ plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin`
+ fi
+ if test x$plugin_so != x$plugin; then
+ plugin_option="--plugin $plugin_so"
+ break
+ fi
+done
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ar; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_AR+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$AR"; then
+ ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_AR="${ac_tool_prefix}ar"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
+$as_echo "$AR" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_AR"; then
+ ac_ct_AR=$AR
+ # Extract the first word of "ar", so it can be a program name with args.
+set dummy ar; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_AR+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_AR"; then
+ ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_AR="ar"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
+$as_echo "$ac_ct_AR" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_AR" = x; then
+ AR="false"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ AR=$ac_ct_AR
+ fi
+else
+ AR="$ac_cv_prog_AR"
+fi
+
+test -z "$AR" && AR=ar
+if test -n "$plugin_option"; then
+ if $AR --help 2>&1 | grep -q "\--plugin"; then
+ touch conftest.c
+ $AR $plugin_option rc conftest.a conftest.c
+ if test "$?" != 0; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
+$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
+ else
+ AR="$AR $plugin_option"
+ fi
+ rm -f conftest.*
+ fi
+fi
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+
+
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_STRIP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$STRIP"; then
+ ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+ ac_ct_STRIP=$STRIP
+ # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_STRIP"; then
+ ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_STRIP="strip"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_STRIP" = x; then
+ STRIP=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ STRIP=$ac_ct_STRIP
+ fi
+else
+ STRIP="$ac_cv_prog_STRIP"
+fi
+
+test -z "$STRIP" && STRIP=:
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_RANLIB+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$RANLIB"; then
+ ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
+$as_echo "$RANLIB" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+ ac_ct_RANLIB=$RANLIB
+ # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_RANLIB"; then
+ ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_RANLIB="ranlib"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
+$as_echo "$ac_ct_RANLIB" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_RANLIB" = x; then
+ RANLIB=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ RANLIB=$ac_ct_RANLIB
+ fi
+else
+ RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+test -z "$RANLIB" && RANLIB=:
+if test -n "$plugin_option" && test "$RANLIB" != ":"; then
+ if $RANLIB --help 2>&1 | grep -q "\--plugin"; then
+ RANLIB="$RANLIB $plugin_option"
+ fi
+fi
+
+
+
+
+
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+ case $host_os in
+ openbsd*)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+ ;;
+ *)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+ ;;
+ esac
+ old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+fi
+
+case $host_os in
+ darwin*)
+ lock_old_archive_extraction=yes ;;
+ *)
+ lock_old_archive_extraction=no ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5
+$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; }
+if ${lt_cv_sys_global_symbol_pipe+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix. What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[BCDEGRST]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+ symcode='[BCDT]'
+ ;;
+cygwin* | mingw* | pw32* | cegcc*)
+ symcode='[ABCDGISTW]'
+ ;;
+hpux*)
+ if test "$host_cpu" = ia64; then
+ symcode='[ABCDEGRST]'
+ fi
+ ;;
+irix* | nonstopux*)
+ symcode='[BCDEGRST]'
+ ;;
+osf*)
+ symcode='[BCDEGQRST]'
+ ;;
+solaris*)
+ symcode='[BCDRT]'
+ ;;
+sco3.2v5*)
+ symcode='[DT]'
+ ;;
+sysv4.2uw2*)
+ symcode='[DT]'
+ ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+ symcode='[ABDT]'
+ ;;
+sysv4)
+ symcode='[DFNSTU]'
+ ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+ symcode='[ABCDGIRSTW]' ;;
+esac
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+ opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+ ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+ # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+ symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+ # Write the raw and C identifiers.
+ if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+ # Fake it for dumpbin and say T for any non-static function
+ # and D for any global variable.
+ # Also find C++ and __fastcall symbols from MSVC++,
+ # which start with @ or ?.
+ lt_cv_sys_global_symbol_pipe="$AWK '"\
+" {last_section=section; section=\$ 3};"\
+" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+" \$ 0!~/External *\|/{next};"\
+" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+" {if(hide[section]) next};"\
+" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
+" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
+" s[1]~/^[@?]/{print s[1], s[1]; next};"\
+" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
+" ' prfx=^$ac_symprfx"
+ else
+ lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+ fi
+
+ # Check to see that the pipe works correctly.
+ pipe_works=no
+
+ rm -f conftest*
+ cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ # Now try to grab the symbols.
+ nlist=conftest.nm
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5
+ (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s "$nlist"; then
+ # Try sorting and uniquifying the output.
+ if sort "$nlist" | uniq > "$nlist"T; then
+ mv -f "$nlist"T "$nlist"
+ else
+ rm -f "$nlist"T
+ fi
+
+ # Make sure that we snagged all the symbols we need.
+ if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+ if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+ cat <<_LT_EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_LT_EOF
+ # Now generate the symbol file.
+ eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+ cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols. */
+const struct {
+ const char *name;
+ void *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[] =
+{
+ { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+ $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+ cat <<\_LT_EOF >> conftest.$ac_ext
+ {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+ return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+ # Now try linking the two files.
+ mv conftest.$ac_objext conftstm.$ac_objext
+ lt_save_LIBS="$LIBS"
+ lt_save_CFLAGS="$CFLAGS"
+ LIBS="conftstm.$ac_objext"
+ CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s conftest${ac_exeext}; then
+ pipe_works=yes
+ fi
+ LIBS="$lt_save_LIBS"
+ CFLAGS="$lt_save_CFLAGS"
+ else
+ echo "cannot find nm_test_func in $nlist" >&5
+ fi
+ else
+ echo "cannot find nm_test_var in $nlist" >&5
+ fi
+ else
+ echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
+ fi
+ else
+ echo "$progname: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ fi
+ rm -rf conftest* conftst*
+
+ # Do not use the global_symbol_pipe unless it works.
+ if test "$pipe_works" = yes; then
+ break
+ else
+ lt_cv_sys_global_symbol_pipe=
+ fi
+done
+
+fi
+
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+ lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5
+$as_echo "failed" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
+$as_echo "ok" >&6; }
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# Check whether --enable-libtool-lock was given.
+if test "${enable_libtool_lock+set}" = set; then :
+ enableval=$enable_libtool_lock;
+fi
+
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *ELF-32*)
+ HPUX_IA64_MODE="32"
+ ;;
+ *ELF-64*)
+ HPUX_IA64_MODE="64"
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+*-*-irix6*)
+ # Find out which ABI we are using.
+ echo '#line '$LINENO' "configure"' > conftest.$ac_ext
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -melf32bsmip"
+ ;;
+ *N32*)
+ LD="${LD-ld} -melf32bmipn32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -melf64bmip"
+ ;;
+ esac
+ else
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -32"
+ ;;
+ *N32*)
+ LD="${LD-ld} -n32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -64"
+ ;;
+ esac
+ fi
+ fi
+ rm -rf conftest*
+ ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ case `/usr/bin/file conftest.o` in
+ *32-bit*)
+ case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_i386_fbsd"
+ ;;
+ x86_64-*linux*)
+ case `/usr/bin/file conftest.o` in
+ *x86-64*)
+ LD="${LD-ld} -m elf32_x86_64"
+ ;;
+ *)
+ LD="${LD-ld} -m elf_i386"
+ ;;
+ esac
+ ;;
+ powerpc64le-*linux*)
+ LD="${LD-ld} -m elf32lppclinux"
+ ;;
+ powerpc64-*linux*)
+ LD="${LD-ld} -m elf32ppclinux"
+ ;;
+ s390x-*linux*)
+ LD="${LD-ld} -m elf_s390"
+ ;;
+ sparc64-*linux*)
+ LD="${LD-ld} -m elf32_sparc"
+ ;;
+ esac
+ ;;
+ *64-bit*)
+ case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_x86_64_fbsd"
+ ;;
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_x86_64"
+ ;;
+ powerpcle-*linux*)
+ LD="${LD-ld} -m elf64lppc"
+ ;;
+ powerpc-*linux*)
+ LD="${LD-ld} -m elf64ppc"
+ ;;
+ s390*-*linux*|s390*-*tpf*)
+ LD="${LD-ld} -m elf64_s390"
+ ;;
+ sparc*-*linux*)
+ LD="${LD-ld} -m elf64_sparc"
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+
+*-*-sco3.2v5*)
+ # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+ SAVE_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -belf"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5
+$as_echo_n "checking whether the C compiler needs -belf... " >&6; }
+if ${lt_cv_cc_needs_belf+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ lt_cv_cc_needs_belf=yes
+else
+ lt_cv_cc_needs_belf=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5
+$as_echo "$lt_cv_cc_needs_belf" >&6; }
+ if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+ # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+ CFLAGS="$SAVE_CFLAGS"
+ fi
+ ;;
+sparc*-*solaris*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ case `/usr/bin/file conftest.o` in
+ *64-bit*)
+ case $lt_cv_prog_gnu_ld in
+ yes*) LD="${LD-ld} -m elf64_sparc" ;;
+ *)
+ if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+ LD="${LD-ld} -64"
+ fi
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+esac
+
+need_locks="$enable_libtool_lock"
+
+
+ case $host_os in
+ rhapsody* | darwin*)
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dsymutil; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_DSYMUTIL+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$DSYMUTIL"; then
+ ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+DSYMUTIL=$ac_cv_prog_DSYMUTIL
+if test -n "$DSYMUTIL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5
+$as_echo "$DSYMUTIL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_DSYMUTIL"; then
+ ac_ct_DSYMUTIL=$DSYMUTIL
+ # Extract the first word of "dsymutil", so it can be a program name with args.
+set dummy dsymutil; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_DSYMUTIL"; then
+ ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_DSYMUTIL="dsymutil"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL
+if test -n "$ac_ct_DSYMUTIL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5
+$as_echo "$ac_ct_DSYMUTIL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_DSYMUTIL" = x; then
+ DSYMUTIL=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ DSYMUTIL=$ac_ct_DSYMUTIL
+ fi
+else
+ DSYMUTIL="$ac_cv_prog_DSYMUTIL"
+fi
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args.
+set dummy ${ac_tool_prefix}nmedit; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_NMEDIT+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$NMEDIT"; then
+ ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+NMEDIT=$ac_cv_prog_NMEDIT
+if test -n "$NMEDIT"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5
+$as_echo "$NMEDIT" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_NMEDIT"; then
+ ac_ct_NMEDIT=$NMEDIT
+ # Extract the first word of "nmedit", so it can be a program name with args.
+set dummy nmedit; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_NMEDIT"; then
+ ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_NMEDIT="nmedit"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT
+if test -n "$ac_ct_NMEDIT"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5
+$as_echo "$ac_ct_NMEDIT" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_NMEDIT" = x; then
+ NMEDIT=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ NMEDIT=$ac_ct_NMEDIT
+ fi
+else
+ NMEDIT="$ac_cv_prog_NMEDIT"
+fi
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args.
+set dummy ${ac_tool_prefix}lipo; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_LIPO+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$LIPO"; then
+ ac_cv_prog_LIPO="$LIPO" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_LIPO="${ac_tool_prefix}lipo"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+LIPO=$ac_cv_prog_LIPO
+if test -n "$LIPO"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5
+$as_echo "$LIPO" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_LIPO"; then
+ ac_ct_LIPO=$LIPO
+ # Extract the first word of "lipo", so it can be a program name with args.
+set dummy lipo; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_LIPO+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_LIPO"; then
+ ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_LIPO="lipo"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO
+if test -n "$ac_ct_LIPO"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5
+$as_echo "$ac_ct_LIPO" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_LIPO" = x; then
+ LIPO=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ LIPO=$ac_ct_LIPO
+ fi
+else
+ LIPO="$ac_cv_prog_LIPO"
+fi
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}otool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_OTOOL+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$OTOOL"; then
+ ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_OTOOL="${ac_tool_prefix}otool"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+OTOOL=$ac_cv_prog_OTOOL
+if test -n "$OTOOL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5
+$as_echo "$OTOOL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OTOOL"; then
+ ac_ct_OTOOL=$OTOOL
+ # Extract the first word of "otool", so it can be a program name with args.
+set dummy otool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_OTOOL+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_OTOOL"; then
+ ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_OTOOL="otool"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL
+if test -n "$ac_ct_OTOOL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5
+$as_echo "$ac_ct_OTOOL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_OTOOL" = x; then
+ OTOOL=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ OTOOL=$ac_ct_OTOOL
+ fi
+else
+ OTOOL="$ac_cv_prog_OTOOL"
+fi
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args.
+set dummy ${ac_tool_prefix}otool64; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_OTOOL64+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$OTOOL64"; then
+ ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+OTOOL64=$ac_cv_prog_OTOOL64
+if test -n "$OTOOL64"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5
+$as_echo "$OTOOL64" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OTOOL64"; then
+ ac_ct_OTOOL64=$OTOOL64
+ # Extract the first word of "otool64", so it can be a program name with args.
+set dummy otool64; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_OTOOL64"; then
+ ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_OTOOL64="otool64"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64
+if test -n "$ac_ct_OTOOL64"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5
+$as_echo "$ac_ct_OTOOL64" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_OTOOL64" = x; then
+ OTOOL64=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ OTOOL64=$ac_ct_OTOOL64
+ fi
+else
+ OTOOL64="$ac_cv_prog_OTOOL64"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5
+$as_echo_n "checking for -single_module linker flag... " >&6; }
+if ${lt_cv_apple_cc_single_mod+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_apple_cc_single_mod=no
+ if test -z "${LT_MULTI_MODULE}"; then
+ # By default we will add the -single_module flag. You can override
+ # by either setting the environment variable LT_MULTI_MODULE
+ # non-empty at configure time, or by adding -multi_module to the
+ # link flags.
+ rm -rf libconftest.dylib*
+ echo "int foo(void){return 1;}" > conftest.c
+ echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+-dynamiclib -Wl,-single_module conftest.c" >&5
+ $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+ _lt_result=$?
+ if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
+ lt_cv_apple_cc_single_mod=yes
+ else
+ cat conftest.err >&5
+ fi
+ rm -rf libconftest.dylib*
+ rm -f conftest.*
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5
+$as_echo "$lt_cv_apple_cc_single_mod" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5
+$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; }
+if ${lt_cv_ld_exported_symbols_list+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_ld_exported_symbols_list=no
+ save_LDFLAGS=$LDFLAGS
+ echo "_main" > conftest.sym
+ LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ lt_cv_ld_exported_symbols_list=yes
+else
+ lt_cv_ld_exported_symbols_list=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5
+$as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5
+$as_echo_n "checking for -force_load linker flag... " >&6; }
+if ${lt_cv_ld_force_load+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_ld_force_load=no
+ cat > conftest.c << _LT_EOF
+int forced_loaded() { return 2;}
+_LT_EOF
+ echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5
+ $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5
+ echo "$AR cru libconftest.a conftest.o" >&5
+ $AR cru libconftest.a conftest.o 2>&5
+ cat > conftest.c << _LT_EOF
+int main() { return 0;}
+_LT_EOF
+ echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5
+ $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
+ _lt_result=$?
+ if test -f conftest && test ! -s conftest.err && test $_lt_result = 0 && $GREP forced_load conftest 2>&1 >/dev/null; then
+ lt_cv_ld_force_load=yes
+ else
+ cat conftest.err >&5
+ fi
+ rm -f conftest.err libconftest.a conftest conftest.c
+ rm -rf conftest.dSYM
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5
+$as_echo "$lt_cv_ld_force_load" >&6; }
+ case $host_os in
+ rhapsody* | darwin1.[012])
+ _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
+ darwin1.*)
+ _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+ darwin*) # darwin 5.x on
+ # if running on 10.5 or later, the deployment target defaults
+ # to the OS version, if on x86, and 10.4, the deployment
+ # target defaults to 10.4. Don't you love it?
+ case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+ 10.0,*86*-darwin8*|10.0,*-darwin[91]*)
+ _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+ 10.[012][,.]*)
+ _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+ 10.*)
+ _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+ esac
+ ;;
+ esac
+ if test "$lt_cv_apple_cc_single_mod" = "yes"; then
+ _lt_dar_single_mod='$single_module'
+ fi
+ if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
+ _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
+ else
+ _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ fi
+ if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then
+ _lt_dsymutil='~$DSYMUTIL $lib || :'
+ else
+ _lt_dsymutil=
+ fi
+ ;;
+ esac
+
+for ac_header in dlfcn.h
+do :
+ ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default
+"
+if test "x$ac_cv_header_dlfcn_h" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_DLFCN_H 1
+_ACEOF
+
+fi
+
+done
+
+
+
+
+
+
+# Set options
+
+
+
+ enable_dlopen=no
+
+
+ enable_win32_dll=no
+
+
+
+ # Check whether --enable-static was given.
+if test "${enable_static+set}" = set; then :
+ enableval=$enable_static; p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_static=yes ;;
+ no) enable_static=no ;;
+ *)
+ enable_static=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_static=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac
+else
+ enable_static=yes
+fi
+
+
+
+
+
+
+
+
+
+
+# Check whether --with-pic was given.
+if test "${with_pic+set}" = set; then :
+ withval=$with_pic; pic_mode="$withval"
+else
+ pic_mode=default
+fi
+
+
+test -z "$pic_mode" && pic_mode=default
+
+
+
+
+
+
+
+ # Check whether --enable-fast-install was given.
+if test "${enable_fast_install+set}" = set; then :
+ enableval=$enable_fast_install; p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_fast_install=yes ;;
+ no) enable_fast_install=no ;;
+ *)
+ enable_fast_install=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_fast_install=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac
+else
+ enable_fast_install=yes
+fi
+
+
+
+
+
+
+
+
+
+
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ltmain"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+test -z "$LN_S" && LN_S="ln -s"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5
+$as_echo_n "checking for objdir... " >&6; }
+if ${lt_cv_objdir+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+ lt_cv_objdir=.libs
+else
+ # MS-DOS does not allow filenames that begin with a dot.
+ lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5
+$as_echo "$lt_cv_objdir" >&6; }
+objdir=$lt_cv_objdir
+
+
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define LT_OBJDIR "$lt_cv_objdir/"
+_ACEOF
+
+
+
+
+case $host_os in
+aix3*)
+ # AIX sometimes has problems with the GCC collect2 program. For some
+ # reason, if we set the COLLECT_NAMES environment variable, the problems
+ # vanish in a puff of smoke.
+ if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+ fi
+ ;;
+esac
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+for cc_temp in $compiler""; do
+ case $cc_temp in
+ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+done
+cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+ if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5
+$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; }
+if ${lt_cv_path_MAGIC_CMD+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $MAGIC_CMD in
+[\\/*] | ?:[\\/]*)
+ lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+ ;;
+*)
+ lt_save_MAGIC_CMD="$MAGIC_CMD"
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+ for ac_dir in $ac_dummy; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/${ac_tool_prefix}file; then
+ lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file"
+ if test -n "$file_magic_test_file"; then
+ case $deplibs_check_method in
+ "file_magic "*)
+ file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+ MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ :
+ else
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such. This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem. Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+ fi ;;
+ esac
+ fi
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+ MAGIC_CMD="$lt_save_MAGIC_CMD"
+ ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
+$as_echo "$MAGIC_CMD" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+
+
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+ if test -n "$ac_tool_prefix"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5
+$as_echo_n "checking for file... " >&6; }
+if ${lt_cv_path_MAGIC_CMD+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $MAGIC_CMD in
+[\\/*] | ?:[\\/]*)
+ lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+ ;;
+*)
+ lt_save_MAGIC_CMD="$MAGIC_CMD"
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+ for ac_dir in $ac_dummy; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/file; then
+ lt_cv_path_MAGIC_CMD="$ac_dir/file"
+ if test -n "$file_magic_test_file"; then
+ case $deplibs_check_method in
+ "file_magic "*)
+ file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+ MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ :
+ else
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such. This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem. Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+ fi ;;
+ esac
+ fi
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+ MAGIC_CMD="$lt_save_MAGIC_CMD"
+ ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
+$as_echo "$MAGIC_CMD" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ else
+ MAGIC_CMD=:
+ fi
+fi
+
+ fi
+ ;;
+esac
+
+# Use C for the default configuration in the libtool script
+
+lt_save_CC="$CC"
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+objext=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+
+lt_prog_compiler_no_builtin_flag=
+
+if test "$GCC" = yes; then
+ case $cc_basename in
+ nvcc*)
+ lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;;
+ *)
+ lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;;
+ esac
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; }
+if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_rtti_exceptions=no
+ ac_outfile=conftest.$ac_objext
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="-fno-rtti -fno-exceptions"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+ $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_rtti_exceptions=yes
+ fi
+ fi
+ $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
+$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; }
+
+if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
+ lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
+else
+ :
+fi
+
+fi
+
+
+
+
+
+
+ lt_prog_compiler_wl=
+lt_prog_compiler_pic=
+lt_prog_compiler_static=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+
+ if test "$GCC" = yes; then
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_static='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ lt_prog_compiler_static='-Bstatic'
+ fi
+ lt_prog_compiler_pic='-fPIC'
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ lt_prog_compiler_pic='-fPIC'
+ ;;
+ m68k)
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the `-m68020' flag to GCC prevents building anything better,
+ # like `-m68040'.
+ lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
+ ;;
+ esac
+ ;;
+
+ beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+
+ mingw* | cygwin* | pw32* | os2* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ # Although the cygwin gcc ignores -fPIC, still need this for old-style
+ # (--disable-auto-import) libraries
+ lt_prog_compiler_pic='-DDLL_EXPORT'
+ ;;
+
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ lt_prog_compiler_pic='-fno-common'
+ ;;
+
+ haiku*)
+ # PIC is the default for Haiku.
+ # The "-static" flag exists, but is broken.
+ lt_prog_compiler_static=
+ ;;
+
+ hpux*)
+ # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+ # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag
+ # sets the default TLS model and affects inlining.
+ case $host_cpu in
+ hppa*64*)
+ # +Z the default
+ ;;
+ *)
+ lt_prog_compiler_pic='-fPIC'
+ ;;
+ esac
+ ;;
+
+ interix[3-9]*)
+ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+ # Instead, we relocate shared libraries at runtime.
+ ;;
+
+ msdosdjgpp*)
+ # Just because we use GCC doesn't mean we suddenly get shared libraries
+ # on systems that don't support them.
+ lt_prog_compiler_can_build_shared=no
+ enable_shared=no
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ lt_prog_compiler_pic='-fPIC -shared'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ lt_prog_compiler_pic=-Kconform_pic
+ fi
+ ;;
+
+ *)
+ lt_prog_compiler_pic='-fPIC'
+ ;;
+ esac
+
+ case $cc_basename in
+ nvcc*) # Cuda Compiler Driver 2.2
+ lt_prog_compiler_wl='-Xlinker '
+ lt_prog_compiler_pic='-Xcompiler -fPIC'
+ ;;
+ esac
+ else
+ # PORTME Check for flag to pass linker flags through the system compiler.
+ case $host_os in
+ aix*)
+ lt_prog_compiler_wl='-Wl,'
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ lt_prog_compiler_static='-Bstatic'
+ else
+ lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+
+ mingw* | cygwin* | pw32* | os2* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ lt_prog_compiler_pic='-DDLL_EXPORT'
+ ;;
+
+ hpux9* | hpux10* | hpux11*)
+ lt_prog_compiler_wl='-Wl,'
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ lt_prog_compiler_pic='+Z'
+ ;;
+ esac
+ # Is there a better lt_prog_compiler_static that works with the bundled CC?
+ lt_prog_compiler_static='${wl}-a ${wl}archive'
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ lt_prog_compiler_wl='-Wl,'
+ # PIC (with -KPIC) is the default.
+ lt_prog_compiler_static='-non_shared'
+ ;;
+
+ linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ case $cc_basename in
+ # old Intel for x86_64 which still supported -KPIC.
+ ecc*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-static'
+ ;;
+ # icc used to be incompatible with GCC.
+ # ICC 10 doesn't accept -KPIC any more.
+ icc* | ifort*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-fPIC'
+ lt_prog_compiler_static='-static'
+ ;;
+ # Lahey Fortran 8.1.
+ lf95*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='--shared'
+ lt_prog_compiler_static='--static'
+ ;;
+ pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
+ # Portland Group compilers (*not* the Pentium gcc compiler,
+ # which looks to be a dead project)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-fpic'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+ ccc*)
+ lt_prog_compiler_wl='-Wl,'
+ # All Alpha code is PIC.
+ lt_prog_compiler_static='-non_shared'
+ ;;
+ xl* | bgxl* | bgf* | mpixl*)
+ # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-qpic'
+ lt_prog_compiler_static='-qstaticlink'
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ F* | *Sun*Fortran*)
+ # Sun Fortran 8.3 passes all unrecognized flags to the linker
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ lt_prog_compiler_wl=''
+ ;;
+ *Sun\ C*)
+ # Sun C 5.9
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ lt_prog_compiler_wl='-Wl,'
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+
+ newsos6)
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ lt_prog_compiler_pic='-fPIC -shared'
+ ;;
+
+ osf3* | osf4* | osf5*)
+ lt_prog_compiler_wl='-Wl,'
+ # All OSF/1 code is PIC.
+ lt_prog_compiler_static='-non_shared'
+ ;;
+
+ rdos*)
+ lt_prog_compiler_static='-non_shared'
+ ;;
+
+ solaris*)
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ case $cc_basename in
+ f77* | f90* | f95*)
+ lt_prog_compiler_wl='-Qoption ld ';;
+ *)
+ lt_prog_compiler_wl='-Wl,';;
+ esac
+ ;;
+
+ sunos4*)
+ lt_prog_compiler_wl='-Qoption ld '
+ lt_prog_compiler_pic='-PIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ sysv4 | sysv4.2uw2* | sysv4.3*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec ;then
+ lt_prog_compiler_pic='-Kconform_pic'
+ lt_prog_compiler_static='-Bstatic'
+ fi
+ ;;
+
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ unicos*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_can_build_shared=no
+ ;;
+
+ uts4*)
+ lt_prog_compiler_pic='-pic'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ *)
+ lt_prog_compiler_can_build_shared=no
+ ;;
+ esac
+ fi
+
+case $host_os in
+ # For platforms which do not support PIC, -DPIC is meaningless:
+ *djgpp*)
+ lt_prog_compiler_pic=
+ ;;
+ *)
+ lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
+ ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5
+$as_echo "$lt_prog_compiler_pic" >&6; }
+
+
+
+
+
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
+$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; }
+if ${lt_cv_prog_compiler_pic_works+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_pic_works=no
+ ac_outfile=conftest.$ac_objext
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="$lt_prog_compiler_pic -DPIC"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+ $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_pic_works=yes
+ fi
+ fi
+ $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5
+$as_echo "$lt_cv_prog_compiler_pic_works" >&6; }
+
+if test x"$lt_cv_prog_compiler_pic_works" = xyes; then
+ case $lt_prog_compiler_pic in
+ "" | " "*) ;;
+ *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;;
+ esac
+else
+ lt_prog_compiler_pic=
+ lt_prog_compiler_can_build_shared=no
+fi
+
+fi
+
+
+
+
+
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
+if ${lt_cv_prog_compiler_static_works+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_static_works=no
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+ echo "$lt_simple_link_test_code" > conftest.$ac_ext
+ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+ # The linker can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test -s conftest.err; then
+ # Append any errors to the config.log.
+ cat conftest.err 1>&5
+ $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if diff conftest.exp conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_static_works=yes
+ fi
+ else
+ lt_cv_prog_compiler_static_works=yes
+ fi
+ fi
+ $RM -r conftest*
+ LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5
+$as_echo "$lt_cv_prog_compiler_static_works" >&6; }
+
+if test x"$lt_cv_prog_compiler_static_works" = xyes; then
+ :
+else
+ lt_prog_compiler_static=
+fi
+
+
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_c_o=no
+ $RM -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_c_o=yes
+ fi
+ fi
+ chmod u+w . 2>&5
+ $RM conftest*
+ # SGI C++ compiler will create directory out/ii_files/ for
+ # template instantiation
+ test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+ $RM out/* && rmdir out
+ cd ..
+ $RM -r conftest
+ $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
+$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
+
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_c_o=no
+ $RM -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_c_o=yes
+ fi
+ fi
+ chmod u+w . 2>&5
+ $RM conftest*
+ # SGI C++ compiler will create directory out/ii_files/ for
+ # template instantiation
+ test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+ $RM out/* && rmdir out
+ cd ..
+ $RM -r conftest
+ $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
+$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
+
+
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then
+ # do not overwrite the value of need_locks provided by the user
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
+$as_echo_n "checking if we can lock with hard links... " >&6; }
+ hard_links=yes
+ $RM conftest*
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ touch conftest.a
+ ln conftest.a conftest.b 2>&5 || hard_links=no
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
+$as_echo "$hard_links" >&6; }
+ if test "$hard_links" = no; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+ need_locks=warn
+ fi
+else
+ need_locks=no
+fi
+
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+
+ runpath_var=
+ allow_undefined_flag=
+ always_export_symbols=no
+ archive_cmds=
+ archive_expsym_cmds=
+ compiler_needs_object=no
+ enable_shared_with_static_runtimes=no
+ export_dynamic_flag_spec=
+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ hardcode_automatic=no
+ hardcode_direct=no
+ hardcode_direct_absolute=no
+ hardcode_libdir_flag_spec=
+ hardcode_libdir_flag_spec_ld=
+ hardcode_libdir_separator=
+ hardcode_minus_L=no
+ hardcode_shlibpath_var=unsupported
+ inherit_rpath=no
+ link_all_deplibs=unknown
+ module_cmds=
+ module_expsym_cmds=
+ old_archive_from_new_cmds=
+ old_archive_from_expsyms_cmds=
+ thread_safe_flag_spec=
+ whole_archive_flag_spec=
+ # include_expsyms should be a list of space-separated symbols to be *always*
+ # included in the symbol list
+ include_expsyms=
+ # exclude_expsyms can be an extended regexp of symbols to exclude
+ # it will be wrapped by ` (' and `)$', so one must not match beginning or
+ # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+ # as well as any symbol that contains `d'.
+ exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+ # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+ # platforms (ab)use it in PIC code, but their linkers get confused if
+ # the symbol is explicitly referenced. Since portable code cannot
+ # rely on this symbol name, it's probably fine to never include it in
+ # preloaded symbol tables.
+ # Exclude shared library initialization/finalization symbols.
+ extract_expsyms_cmds=
+
+ case $host_os in
+ cygwin* | mingw* | pw32* | cegcc*)
+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ if test "$GCC" != yes; then
+ with_gnu_ld=no
+ fi
+ ;;
+ interix*)
+ # we just hope/assume this is gcc and not c89 (= MSVC++)
+ with_gnu_ld=yes
+ ;;
+ openbsd*)
+ with_gnu_ld=no
+ ;;
+ esac
+
+ ld_shlibs=yes
+
+ # On some targets, GNU ld is compatible enough with the native linker
+ # that we're better off using the native interface for both.
+ lt_use_gnu_ld_interface=no
+ if test "$with_gnu_ld" = yes; then
+ case $host_os in
+ aix*)
+ # The AIX port of GNU ld has always aspired to compatibility
+ # with the native linker. However, as the warning in the GNU ld
+ # block says, versions before 2.19.5* couldn't really create working
+ # shared libraries, regardless of the interface used.
+ case `$LD -v 2>&1` in
+ *\ \(GNU\ Binutils\)\ 2.19.5*) ;;
+ *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;;
+ *\ \(GNU\ Binutils\)\ [3-9]*) ;;
+ *)
+ lt_use_gnu_ld_interface=yes
+ ;;
+ esac
+ ;;
+ *)
+ lt_use_gnu_ld_interface=yes
+ ;;
+ esac
+ fi
+
+ if test "$lt_use_gnu_ld_interface" = yes; then
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ wlarc='${wl}'
+
+ # Set some defaults for GNU ld with shared library support. These
+ # are reset later if shared libraries are not supported. Putting them
+ # here allows them to be overridden if necessary.
+ runpath_var=LD_RUN_PATH
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ export_dynamic_flag_spec='${wl}--export-dynamic'
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+ whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ whole_archive_flag_spec=
+ fi
+ supports_anon_versioning=no
+ case `$LD -v 2>&1` in
+ *GNU\ gold*) supports_anon_versioning=yes ;;
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+ *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+ *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+ *\ 2.11.*) ;; # other 2.11 versions
+ *) supports_anon_versioning=yes ;;
+ esac
+
+ # See if GNU ld supports shared libraries.
+ case $host_os in
+ aix[3-9]*)
+ # On AIX/PPC, the GNU linker is very broken
+ if test "$host_cpu" != ia64; then
+ ld_shlibs=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.19, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support. If you
+*** really care for shared libraries, you may want to install binutils
+*** 2.20 or above, or modify your PATH so that a non-GNU linker is found.
+*** You will then need to restart the configuration process.
+
+_LT_EOF
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds=''
+ ;;
+ m68k)
+ archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ ;;
+ esac
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ allow_undefined_flag=unsupported
+ # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ cygwin* | mingw* | pw32* | cegcc*)
+ # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
+ # as there is no search path for DLLs.
+ hardcode_libdir_flag_spec='-L$libdir'
+ export_dynamic_flag_spec='${wl}--export-all-symbols'
+ allow_undefined_flag=unsupported
+ always_export_symbols=no
+ enable_shared_with_static_runtimes=yes
+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
+
+ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is; otherwise, prepend...
+ archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ haiku*)
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ link_all_deplibs=yes
+ ;;
+
+ interix[3-9]*)
+ hardcode_direct=no
+ hardcode_shlibpath_var=no
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ export_dynamic_flag_spec='${wl}-E'
+ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+ # Instead, shared libraries are loaded at an image base (0x10000000 by
+ # default) and relocated if they conflict, which is a slow very memory
+ # consuming and fragmenting process. To avoid this, we pick a random,
+ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ ;;
+
+ gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+ tmp_diet=no
+ if test "$host_os" = linux-dietlibc; then
+ case $cc_basename in
+ diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn)
+ esac
+ fi
+ if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+ && test "$tmp_diet" = no
+ then
+ tmp_addflag=' $pic_flag'
+ tmp_sharedflag='-shared'
+ case $cc_basename,$host_cpu in
+ pgcc*) # Portland Group C compiler
+ whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag'
+ ;;
+ pgf77* | pgf90* | pgf95* | pgfortran*)
+ # Portland Group f77 and f90 compilers
+ whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag -Mnomain' ;;
+ ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
+ tmp_addflag=' -i_dynamic' ;;
+ efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
+ tmp_addflag=' -i_dynamic -nofor_main' ;;
+ ifc* | ifort*) # Intel Fortran compiler
+ tmp_addflag=' -nofor_main' ;;
+ lf95*) # Lahey Fortran 8.1
+ whole_archive_flag_spec=
+ tmp_sharedflag='--shared' ;;
+ xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+ tmp_sharedflag='-qmkshrobj'
+ tmp_addflag= ;;
+ nvcc*) # Cuda Compiler Driver 2.2
+ whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+ compiler_needs_object=yes
+ ;;
+ esac
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*) # Sun C 5.9
+ whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+ compiler_needs_object=yes
+ tmp_sharedflag='-G' ;;
+ *Sun\ F*) # Sun Fortran 8.3
+ tmp_sharedflag='-G' ;;
+ esac
+ archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+ if test "x$supports_anon_versioning" = xyes; then
+ archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+ fi
+
+ case $cc_basename in
+ xlf* | bgf* | bgxlf* | mpixlf*)
+ # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+ whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
+ hardcode_libdir_flag_spec=
+ hardcode_libdir_flag_spec_ld='-rpath $libdir'
+ archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
+ if test "x$supports_anon_versioning" = xyes; then
+ archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+ fi
+ ;;
+ esac
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+ else
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ fi
+ ;;
+
+ solaris*)
+ if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+ ld_shlibs=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+ case `$LD -v 2>&1` in
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+ ld_shlibs=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ ;;
+ *)
+ # For security reasons, it is highly recommended that you always
+ # use absolute paths for naming shared libraries, and exclude the
+ # DT_RUNPATH tag from executables and libraries. But doing so
+ # requires that you compile everything twice, which is a pain.
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+ ;;
+
+ sunos4*)
+ archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ wlarc=
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ *)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+
+ if test "$ld_shlibs" = no; then
+ runpath_var=
+ hardcode_libdir_flag_spec=
+ export_dynamic_flag_spec=
+ whole_archive_flag_spec=
+ fi
+ else
+ # PORTME fill in a description of your system's linker (not GNU ld)
+ case $host_os in
+ aix3*)
+ allow_undefined_flag=unsupported
+ always_export_symbols=yes
+ archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+ # Note: this linker hardcodes the directories in LIBPATH if there
+ # are no directories specified by -L.
+ hardcode_minus_L=yes
+ if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+ # Neither direct hardcoding nor static linking is supported with a
+ # broken collect2.
+ hardcode_direct=unsupported
+ fi
+ ;;
+
+ aix[4-9]*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=""
+ else
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to AIX nm, but means don't demangle with GNU nm
+ # Also, AIX nm treats weak defined symbols like other global
+ # defined symbols, whereas GNU nm marks them as "W".
+ if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+ export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ else
+ export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ fi
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+ for ld_flag in $LDFLAGS; do
+ if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+ aix_use_runtimelinking=yes
+ break
+ fi
+ done
+ ;;
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ archive_cmds=''
+ hardcode_direct=yes
+ hardcode_direct_absolute=yes
+ hardcode_libdir_separator=':'
+ link_all_deplibs=yes
+ file_list_spec='${wl}-f,'
+
+ if test "$GCC" = yes; then
+ case $host_os in aix4.[012]|aix4.[012].*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" &&
+ strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ :
+ else
+ # We have old collect2
+ hardcode_direct=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ hardcode_minus_L=yes
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_libdir_separator=
+ fi
+ ;;
+ esac
+ shared_flag='-shared'
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag="$shared_flag "'${wl}-G'
+ fi
+ else
+ # not using gcc
+ if test "$host_cpu" = ia64; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag='${wl}-G'
+ else
+ shared_flag='${wl}-bM:SRE'
+ fi
+ fi
+ fi
+
+ export_dynamic_flag_spec='${wl}-bexpall'
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to export.
+ always_export_symbols=yes
+ if test "$aix_use_runtimelinking" = yes; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ allow_undefined_flag='-berok'
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+lt_aix_libpath_sed='
+ /Import File Strings/,/^$/ {
+ /^0/ {
+ s/^0 *\(.*\)$/\1/
+ p
+ }
+ }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+ aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ else
+ if test "$host_cpu" = ia64; then
+ hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+ allow_undefined_flag="-z nodefs"
+ archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+lt_aix_libpath_sed='
+ /Import File Strings/,/^$/ {
+ /^0/ {
+ s/^0 *\(.*\)$/\1/
+ p
+ }
+ }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+ aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ no_undefined_flag=' ${wl}-bernotok'
+ allow_undefined_flag=' ${wl}-berok'
+ if test "$with_gnu_ld" = yes; then
+ # We only use this code for GNU lds that support --whole-archive.
+ whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+ else
+ # Exported symbols can be pulled into shared objects from archives
+ whole_archive_flag_spec='$convenience'
+ fi
+ archive_cmds_need_lc=yes
+ # This is similar to how AIX traditionally builds its shared libraries.
+ archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ fi
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds=''
+ ;;
+ m68k)
+ archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ ;;
+ esac
+ ;;
+
+ bsdi[45]*)
+ export_dynamic_flag_spec=-rdynamic
+ ;;
+
+ cygwin* | mingw* | pw32* | cegcc*)
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ hardcode_libdir_flag_spec=' '
+ allow_undefined_flag=unsupported
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext_cmds=".dll"
+ # FIXME: Setting linknames here is a bad hack.
+ archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
+ # The linker will automatically build a .lib file if we build a DLL.
+ old_archive_from_new_cmds='true'
+ # FIXME: Should let the user specify the lib program.
+ old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
+ fix_srcfile_path='`cygpath -w "$srcfile"`'
+ enable_shared_with_static_runtimes=yes
+ ;;
+
+ darwin* | rhapsody*)
+
+
+ archive_cmds_need_lc=no
+ hardcode_direct=no
+ hardcode_automatic=yes
+ hardcode_shlibpath_var=unsupported
+ if test "$lt_cv_ld_force_load" = "yes"; then
+ whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+ else
+ whole_archive_flag_spec=''
+ fi
+ link_all_deplibs=yes
+ allow_undefined_flag="$_lt_dar_allow_undefined"
+ case $cc_basename in
+ ifort*) _lt_dar_can_shared=yes ;;
+ *) _lt_dar_can_shared=$GCC ;;
+ esac
+ if test "$_lt_dar_can_shared" = "yes"; then
+ output_verbose_link_cmd=func_echo_all
+ archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+ module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+ archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+ module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+
+ else
+ ld_shlibs=no
+ fi
+
+ ;;
+
+ dgux*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_shlibpath_var=no
+ ;;
+
+ # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+ # support. Future versions do this automatically, but an explicit c++rt0.o
+ # does not break anything, and helps significantly (at the cost of a little
+ # extra space).
+ freebsd2.2*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+ freebsd2.*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ freebsd* | dragonfly*)
+ archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ hpux9*)
+ if test "$GCC" = yes; then
+ archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ fi
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ export_dynamic_flag_spec='${wl}-E'
+ ;;
+
+ hpux10*)
+ if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+ archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ if test "$with_gnu_ld" = no; then
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_flag_spec_ld='+b $libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+ hardcode_direct_absolute=yes
+ export_dynamic_flag_spec='${wl}-E'
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ fi
+ ;;
+
+ hpux11*)
+ if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+ case $host_cpu in
+ hppa*64*)
+ archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ else
+ case $host_cpu in
+ hppa*64*)
+ archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+
+ # Older versions of the 11.00 compiler do not understand -b yet
+ # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5
+$as_echo_n "checking if $CC understands -b... " >&6; }
+if ${lt_cv_prog_compiler__b+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler__b=no
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -b"
+ echo "$lt_simple_link_test_code" > conftest.$ac_ext
+ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+ # The linker can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test -s conftest.err; then
+ # Append any errors to the config.log.
+ cat conftest.err 1>&5
+ $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if diff conftest.exp conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler__b=yes
+ fi
+ else
+ lt_cv_prog_compiler__b=yes
+ fi
+ fi
+ $RM -r conftest*
+ LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5
+$as_echo "$lt_cv_prog_compiler__b" >&6; }
+
+if test x"$lt_cv_prog_compiler__b" = xyes; then
+ archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+else
+ archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+fi
+
+ ;;
+ esac
+ fi
+ if test "$with_gnu_ld" = no; then
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+
+ case $host_cpu in
+ hppa*64*|ia64*)
+ hardcode_direct=no
+ hardcode_shlibpath_var=no
+ ;;
+ *)
+ hardcode_direct=yes
+ hardcode_direct_absolute=yes
+ export_dynamic_flag_spec='${wl}-E'
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ ;;
+ esac
+ fi
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ if test "$GCC" = yes; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ # Try to use the -exported_symbol ld option, if it does not
+ # work, assume that -exports_file does not work either and
+ # implicitly export all symbols.
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int foo(void) {}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ LDFLAGS="$save_LDFLAGS"
+ else
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+ fi
+ archive_cmds_need_lc='no'
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ inherit_rpath=yes
+ link_all_deplibs=yes
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
+ else
+ archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
+ fi
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ newsos6)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_shlibpath_var=no
+ ;;
+
+ *nto* | *qnx*)
+ ;;
+
+ openbsd*)
+ if test -f /usr/libexec/ld.so; then
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ hardcode_direct_absolute=yes
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ export_dynamic_flag_spec='${wl}-E'
+ else
+ case $host_os in
+ openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-R$libdir'
+ ;;
+ *)
+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ ;;
+ esac
+ fi
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ os2*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ allow_undefined_flag=unsupported
+ archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+ old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+ ;;
+
+ osf3*)
+ if test "$GCC" = yes; then
+ allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ allow_undefined_flag=' -expect_unresolved \*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+ fi
+ archive_cmds_need_lc='no'
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
+
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
+ if test "$GCC" = yes; then
+ allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ else
+ allow_undefined_flag=' -expect_unresolved \*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+ archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+
+ # Both c and cxx compiler support -rpath directly
+ hardcode_libdir_flag_spec='-rpath $libdir'
+ fi
+ archive_cmds_need_lc='no'
+ hardcode_libdir_separator=:
+ ;;
+
+ solaris*)
+ no_undefined_flag=' -z defs'
+ if test "$GCC" = yes; then
+ wlarc='${wl}'
+ archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ else
+ case `$CC -V 2>&1` in
+ *"Compilers 5.0"*)
+ wlarc=''
+ archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+ ;;
+ *)
+ wlarc='${wl}'
+ archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ ;;
+ esac
+ fi
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_shlibpath_var=no
+ case $host_os in
+ solaris2.[0-5] | solaris2.[0-5].*) ;;
+ *)
+ # The compiler driver will combine and reorder linker options,
+ # but understands `-z linker_flag'. GCC discards it without `$wl',
+ # but is careful enough not to reorder.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ if test "$GCC" = yes; then
+ whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+ else
+ whole_archive_flag_spec='-z allextract$convenience -z defaultextract'
+ fi
+ ;;
+ esac
+ link_all_deplibs=yes
+ ;;
+
+ sunos4*)
+ if test "x$host_vendor" = xsequent; then
+ # Use $CC to link under sequent, because it throws in some extra .o
+ # files that make .init and .fini sections work.
+ archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ sysv4)
+ case $host_vendor in
+ sni)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes # is this really true???
+ ;;
+ siemens)
+ ## LD is ld it makes a PLAMLIB
+ ## CC just makes a GrossModule.
+ archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+ reload_cmds='$CC -r -o $output$reload_objs'
+ hardcode_direct=no
+ ;;
+ motorola)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+ ;;
+ esac
+ runpath_var='LD_RUN_PATH'
+ hardcode_shlibpath_var=no
+ ;;
+
+ sysv4.3*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var=no
+ export_dynamic_flag_spec='-Bexport'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var=no
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ ld_shlibs=yes
+ fi
+ ;;
+
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+ no_undefined_flag='${wl}-z,text'
+ archive_cmds_need_lc=no
+ hardcode_shlibpath_var=no
+ runpath_var='LD_RUN_PATH'
+
+ if test "$GCC" = yes; then
+ archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6*)
+ # Note: We can NOT use -z defs as we might desire, because we do not
+ # link with -lc, and that would cause any symbols used from libc to
+ # always be unresolved, which means just about no library would
+ # ever link correctly. If we're not using GNU ld we use -z text
+ # though, which does catch some bad symbols but isn't as heavy-handed
+ # as -z defs.
+ no_undefined_flag='${wl}-z,text'
+ allow_undefined_flag='${wl}-z,nodefs'
+ archive_cmds_need_lc=no
+ hardcode_shlibpath_var=no
+ hardcode_libdir_flag_spec='${wl}-R,$libdir'
+ hardcode_libdir_separator=':'
+ link_all_deplibs=yes
+ export_dynamic_flag_spec='${wl}-Bexport'
+ runpath_var='LD_RUN_PATH'
+
+ if test "$GCC" = yes; then
+ archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ uts4*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_shlibpath_var=no
+ ;;
+
+ *)
+ ld_shlibs=no
+ ;;
+ esac
+
+ if test x$host_vendor = xsni; then
+ case $host in
+ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ export_dynamic_flag_spec='${wl}-Blargedynsym'
+ ;;
+ esac
+ fi
+ fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5
+$as_echo "$ld_shlibs" >&6; }
+test "$ld_shlibs" = no && can_build_shared=no
+
+with_gnu_ld=$with_gnu_ld
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc" in
+x|xyes)
+ # Assume -lc should be added
+ archive_cmds_need_lc=yes
+
+ if test "$enable_shared" = yes && test "$GCC" = yes; then
+ case $archive_cmds in
+ *'~'*)
+ # FIXME: we may have to deal with multi-command sequences.
+ ;;
+ '$CC '*)
+ # Test whether the compiler implicitly links with -lc since on some
+ # systems, -lgcc has to come before -lc. If gcc already passes -lc
+ # to ld, don't add -lc before -lgcc.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
+$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
+if ${lt_cv_archive_cmds_need_lc+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ $RM conftest*
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } 2>conftest.err; then
+ soname=conftest
+ lib=conftest
+ libobjs=conftest.$ac_objext
+ deplibs=
+ wl=$lt_prog_compiler_wl
+ pic_flag=$lt_prog_compiler_pic
+ compiler_flags=-v
+ linker_flags=-v
+ verstring=
+ output_objdir=.
+ libname=conftest
+ lt_save_allow_undefined_flag=$allow_undefined_flag
+ allow_undefined_flag=
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
+ (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ then
+ lt_cv_archive_cmds_need_lc=no
+ else
+ lt_cv_archive_cmds_need_lc=yes
+ fi
+ allow_undefined_flag=$lt_save_allow_undefined_flag
+ else
+ cat conftest.err 1>&5
+ fi
+ $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5
+$as_echo "$lt_cv_archive_cmds_need_lc" >&6; }
+ archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc
+ ;;
+ esac
+ fi
+ ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
+$as_echo_n "checking dynamic linker characteristics... " >&6; }
+
+if test "$GCC" = yes; then
+ case $host_os in
+ darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
+ *) lt_awk_arg="/^libraries:/" ;;
+ esac
+ case $host_os in
+ mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;;
+ *) lt_sed_strip_eq="s,=/,/,g" ;;
+ esac
+ lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq`
+ case $lt_search_path_spec in
+ *\;*)
+ # if the path contains ";" then we assume it to be the separator
+ # otherwise default to the standard path separator (i.e. ":") - it is
+ # assumed that no part of a normal pathname contains ";" but that should
+ # okay in the real world where ";" in dirpaths is itself problematic.
+ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'`
+ ;;
+ *)
+ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"`
+ ;;
+ esac
+ # Ok, now we have the path, separated by spaces, we can step through it
+ # and add multilib dir if necessary.
+ lt_tmp_lt_search_path_spec=
+ lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+ for lt_sys_path in $lt_search_path_spec; do
+ if test -d "$lt_sys_path/$lt_multi_os_dir"; then
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
+ else
+ test -d "$lt_sys_path" && \
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+ fi
+ done
+ lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk '
+BEGIN {RS=" "; FS="/|\n";} {
+ lt_foo="";
+ lt_count=0;
+ for (lt_i = NF; lt_i > 0; lt_i--) {
+ if ($lt_i != "" && $lt_i != ".") {
+ if ($lt_i == "..") {
+ lt_count++;
+ } else {
+ if (lt_count == 0) {
+ lt_foo="/" $lt_i lt_foo;
+ } else {
+ lt_count--;
+ }
+ }
+ }
+ }
+ if (lt_foo != "") { lt_freq[lt_foo]++; }
+ if (lt_freq[lt_foo] == 1) { print lt_foo; }
+}'`
+ # AWK program above erroneously prepends '/' to C:/dos/paths
+ # for these hosts.
+ case $host_os in
+ mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\
+ $SED 's,/\([A-Za-z]:\),\1,g'` ;;
+ esac
+ sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
+else
+ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+ shlibpath_var=LIBPATH
+
+ # AIX 3 has no versioning support, so we append a major version to the name.
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+
+aix[4-9]*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ hardcode_into_libs=yes
+ if test "$host_cpu" = ia64; then
+ # AIX 5 supports IA64
+ library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ else
+ # With GCC up to 2.95.x, collect2 would create an import file
+ # for dependence libraries. The import file would start with
+ # the line `#! .'. This would cause the generated library to
+ # depend on `.', always an invalid library. This was fixed in
+ # development snapshots of GCC prior to 3.0.
+ case $host_os in
+ aix4 | aix4.[01] | aix4.[01].*)
+ if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+ echo ' yes '
+ echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+ :
+ else
+ can_build_shared=no
+ fi
+ ;;
+ esac
+ # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+ # soname into executable. Probably we can add versioning support to
+ # collect2, so additional links can be useful in future.
+ if test "$aix_use_runtimelinking" = yes; then
+ # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+ # instead of lib<name>.a to let people know that these are not
+ # typical AIX shared libraries.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ else
+ # We preserve .a as extension for shared libraries through AIX4.2
+ # and later when we are not doing run time linking.
+ library_names_spec='${libname}${release}.a $libname.a'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ fi
+ shlibpath_var=LIBPATH
+ fi
+ ;;
+
+amigaos*)
+ case $host_cpu in
+ powerpc)
+ # Since July 2007 AmigaOS4 officially supports .so libraries.
+ # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ ;;
+ m68k)
+ library_names_spec='$libname.ixlibrary $libname.a'
+ # Create ${libname}_ixlibrary.a entries in /sys/libs.
+ finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+ ;;
+ esac
+ ;;
+
+beos*)
+ library_names_spec='${libname}${shared_ext}'
+ dynamic_linker="$host_os ld.so"
+ shlibpath_var=LIBRARY_PATH
+ ;;
+
+bsdi[45]*)
+ version_type=linux
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+ sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+ # the default ld.so.conf also contains /usr/contrib/lib and
+ # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+ # libtool to hard-code these into programs
+ ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+ version_type=windows
+ shrext_cmds=".dll"
+ need_version=no
+ need_lib_prefix=no
+
+ case $GCC,$host_os in
+ yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \${file}`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname~
+ chmod a+x \$dldir/$dlname~
+ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+ eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+ fi'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $RM \$dlpath'
+ shlibpath_overrides_runpath=yes
+
+ case $host_os in
+ cygwin*)
+ # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+ soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"
+ ;;
+ mingw* | cegcc*)
+ # MinGW DLLs use traditional 'lib' prefix
+ soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ ;;
+ pw32*)
+ # pw32 DLLs use 'pw' prefix rather than 'lib'
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ ;;
+ esac
+ ;;
+
+ *)
+ library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+ ;;
+ esac
+ dynamic_linker='Win32 ld.exe'
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+
+darwin* | rhapsody*)
+ dynamic_linker="$host_os dyld"
+ version_type=darwin
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+ soname_spec='${libname}${release}${major}$shared_ext'
+ shlibpath_overrides_runpath=yes
+ shlibpath_var=DYLD_LIBRARY_PATH
+ shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"
+ sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+ ;;
+
+dgux*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+freebsd* | dragonfly*)
+ # DragonFly does not have aout. When/if they implement a new
+ # versioning mechanism, adjust this.
+ if test -x /usr/bin/objformat; then
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+ freebsd[23].*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+ version_type=freebsd-$objformat
+ case $version_type in
+ freebsd-elf*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ need_version=no
+ need_lib_prefix=no
+ ;;
+ freebsd-*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+ need_version=yes
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+ *) # from 4.6 on, and DragonFly
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ esac
+ ;;
+
+haiku*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ dynamic_linker="$host_os runtime_loader"
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
+ hardcode_into_libs=yes
+ ;;
+
+hpux9* | hpux10* | hpux11*)
+ # Give a soname corresponding to the major version so that dld.sl refuses to
+ # link against other versions.
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ case $host_cpu in
+ ia64*)
+ shrext_cmds='.so'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.so"
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ if test "X$HPUX_IA64_MODE" = X32; then
+ sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+ else
+ sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+ fi
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ hppa*64*)
+ shrext_cmds='.sl'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ *)
+ shrext_cmds='.sl'
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=SHLIB_PATH
+ shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+ esac
+ # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
+ postinstall_cmds='chmod 555 $lib'
+ # or fails outright, so override atomically:
+ install_override_mode=555
+ ;;
+
+interix[3-9]*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $host_os in
+ nonstopux*) version_type=nonstopux ;;
+ *)
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ version_type=linux
+ else
+ version_type=irix
+ fi ;;
+ esac
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+ case $host_os in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in # libtool.m4 will add one of these switches to LD
+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+ libsuff= shlibsuff= libmagic=32-bit;;
+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+ libsuff=32 shlibsuff=N32 libmagic=N32;;
+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+ libsuff=64 shlibsuff=64 libmagic=64-bit;;
+ *) libsuff= shlibsuff= libmagic=never-match;;
+ esac
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+ sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+ hardcode_into_libs=yes
+ ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+ dynamic_linker=no
+ ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+
+ # Some binutils ld are patched to set DT_RUNPATH
+ if ${lt_cv_shlibpath_overrides_runpath+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_shlibpath_overrides_runpath=no
+ save_LDFLAGS=$LDFLAGS
+ save_libdir=$libdir
+ eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \
+ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
+ lt_cv_shlibpath_overrides_runpath=yes
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ LDFLAGS=$save_LDFLAGS
+ libdir=$save_libdir
+
+fi
+
+ shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
+
+ # This implies no fast_install, which is unacceptable.
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ # Append ld.so.conf contents to the search path
+ if test -f /etc/ld.so.conf; then
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+ sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+ fi
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+ # powerpc, because MkLinux only supported shared libraries with the
+ # GNU dynamic linker. Since this was broken with cross compilers,
+ # most powerpc-linux boxes support dynamic linking these days and
+ # people can always --disable-shared, the test was removed, and we
+ # assume the GNU/Linux dynamic linker is in use.
+ dynamic_linker='GNU/Linux ld.so'
+ ;;
+
+netbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ dynamic_linker='NetBSD (a.out) ld.so'
+ else
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='NetBSD ld.elf_so'
+ fi
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+
+newsos6)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+*nto* | *qnx*)
+ version_type=qnx
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='ldqnx.so'
+ ;;
+
+openbsd*)
+ version_type=sunos
+ sys_lib_dlsearch_path_spec="/usr/lib"
+ need_lib_prefix=no
+ # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+ case $host_os in
+ openbsd3.3 | openbsd3.3.*) need_version=yes ;;
+ *) need_version=no ;;
+ esac
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ case $host_os in
+ openbsd2.[89] | openbsd2.[89].*)
+ shlibpath_overrides_runpath=no
+ ;;
+ *)
+ shlibpath_overrides_runpath=yes
+ ;;
+ esac
+ else
+ shlibpath_overrides_runpath=yes
+ fi
+ ;;
+
+os2*)
+ libname_spec='$name'
+ shrext_cmds=".dll"
+ need_lib_prefix=no
+ library_names_spec='$libname${shared_ext} $libname.a'
+ dynamic_linker='OS/2 ld.exe'
+ shlibpath_var=LIBPATH
+ ;;
+
+osf3* | osf4* | osf5*)
+ version_type=osf
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+ sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+ ;;
+
+rdos*)
+ dynamic_linker=no
+ ;;
+
+solaris*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ # ldd complains unless libraries are executable
+ postinstall_cmds='chmod +x $lib'
+ ;;
+
+sunos4*)
+ version_type=sunos
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ if test "$with_gnu_ld" = yes; then
+ need_lib_prefix=no
+ fi
+ need_version=yes
+ ;;
+
+sysv4 | sysv4.3*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_vendor in
+ sni)
+ shlibpath_overrides_runpath=no
+ need_lib_prefix=no
+ runpath_var=LD_RUN_PATH
+ ;;
+ siemens)
+ need_lib_prefix=no
+ ;;
+ motorola)
+ need_lib_prefix=no
+ need_version=no
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+ ;;
+ esac
+ ;;
+
+sysv4*MP*)
+ if test -d /usr/nec ;then
+ version_type=linux
+ library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+ soname_spec='$libname${shared_ext}.$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ fi
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ version_type=freebsd-elf
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ if test "$with_gnu_ld" = yes; then
+ sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+ else
+ sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+ case $host_os in
+ sco3.2v5*)
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+ ;;
+ esac
+ fi
+ sys_lib_dlsearch_path_spec='/usr/lib'
+ ;;
+
+tpf*)
+ # TPF is a cross-target only. Preferred cross-host = GNU/Linux.
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+uts4*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+*)
+ dynamic_linker=no
+ ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
+$as_echo "$dynamic_linker" >&6; }
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
+ sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+fi
+if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
+ sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
+$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
+hardcode_action=
+if test -n "$hardcode_libdir_flag_spec" ||
+ test -n "$runpath_var" ||
+ test "X$hardcode_automatic" = "Xyes" ; then
+
+ # We can hardcode non-existent directories.
+ if test "$hardcode_direct" != no &&
+ # If the only mechanism to avoid hardcoding is shlibpath_var, we
+ # have to relink, otherwise we might link with an installed library
+ # when we should be linking with a yet-to-be-installed one
+ ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no &&
+ test "$hardcode_minus_L" != no; then
+ # Linking always hardcodes the temporary library directory.
+ hardcode_action=relink
+ else
+ # We can link without hardcoding, and we can hardcode nonexisting dirs.
+ hardcode_action=immediate
+ fi
+else
+ # We cannot hardcode anything, or else we can only hardcode existing
+ # directories.
+ hardcode_action=unsupported
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5
+$as_echo "$hardcode_action" >&6; }
+
+if test "$hardcode_action" = relink ||
+ test "$inherit_rpath" = yes; then
+ # Fast installation is not supported
+ enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+ test "$enable_shared" = no; then
+ # Fast installation is not necessary
+ enable_fast_install=needless
+fi
+
+
+
+
+
+
+ if test "x$enable_dlopen" != xyes; then
+ enable_dlopen=unknown
+ enable_dlopen_self=unknown
+ enable_dlopen_self_static=unknown
+else
+ lt_cv_dlopen=no
+ lt_cv_dlopen_libs=
+
+ case $host_os in
+ beos*)
+ lt_cv_dlopen="load_add_on"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ;;
+
+ mingw* | pw32* | cegcc*)
+ lt_cv_dlopen="LoadLibrary"
+ lt_cv_dlopen_libs=
+ ;;
+
+ cygwin*)
+ lt_cv_dlopen="dlopen"
+ lt_cv_dlopen_libs=
+ ;;
+
+ darwin*)
+ # if libdl is installed we need to link against it
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+$as_echo_n "checking for dlopen in -ldl... " >&6; }
+if ${ac_cv_lib_dl_dlopen+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_dl_dlopen=yes
+else
+ ac_cv_lib_dl_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+
+ lt_cv_dlopen="dyld"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+
+fi
+
+ ;;
+
+ *)
+ ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load"
+if test "x$ac_cv_func_shl_load" = xyes; then :
+ lt_cv_dlopen="shl_load"
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5
+$as_echo_n "checking for shl_load in -ldld... " >&6; }
+if ${ac_cv_lib_dld_shl_load+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char shl_load ();
+int
+main ()
+{
+return shl_load ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_dld_shl_load=yes
+else
+ ac_cv_lib_dld_shl_load=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5
+$as_echo "$ac_cv_lib_dld_shl_load" >&6; }
+if test "x$ac_cv_lib_dld_shl_load" = xyes; then :
+ lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"
+else
+ ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen"
+if test "x$ac_cv_func_dlopen" = xyes; then :
+ lt_cv_dlopen="dlopen"
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+$as_echo_n "checking for dlopen in -ldl... " >&6; }
+if ${ac_cv_lib_dl_dlopen+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_dl_dlopen=yes
+else
+ ac_cv_lib_dl_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5
+$as_echo_n "checking for dlopen in -lsvld... " >&6; }
+if ${ac_cv_lib_svld_dlopen+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsvld $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_svld_dlopen=yes
+else
+ ac_cv_lib_svld_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5
+$as_echo "$ac_cv_lib_svld_dlopen" >&6; }
+if test "x$ac_cv_lib_svld_dlopen" = xyes; then :
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5
+$as_echo_n "checking for dld_link in -ldld... " >&6; }
+if ${ac_cv_lib_dld_dld_link+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dld_link ();
+int
+main ()
+{
+return dld_link ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_dld_dld_link=yes
+else
+ ac_cv_lib_dld_dld_link=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5
+$as_echo "$ac_cv_lib_dld_dld_link" >&6; }
+if test "x$ac_cv_lib_dld_dld_link" = xyes; then :
+ lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+ ;;
+ esac
+
+ if test "x$lt_cv_dlopen" != xno; then
+ enable_dlopen=yes
+ else
+ enable_dlopen=no
+ fi
+
+ case $lt_cv_dlopen in
+ dlopen)
+ save_CPPFLAGS="$CPPFLAGS"
+ test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+ save_LDFLAGS="$LDFLAGS"
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+ save_LIBS="$LIBS"
+ LIBS="$lt_cv_dlopen_libs $LIBS"
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5
+$as_echo_n "checking whether a program can dlopen itself... " >&6; }
+if ${lt_cv_dlopen_self+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test "$cross_compiling" = yes; then :
+ lt_cv_dlopen_self=cross
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+#line 12224 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+/* When -fvisbility=hidden is used, assume the code has been annotated
+ correspondingly for the symbols needed. */
+#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+void fnord () __attribute__((visibility("default")));
+#endif
+
+void fnord () { int i=42; }
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else
+ {
+ if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ else puts (dlerror ());
+ }
+ /* dlclose (self); */
+ }
+ else
+ puts (dlerror ());
+
+ return status;
+}
+_LT_EOF
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then
+ (./conftest; exit; ) >&5 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+ x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+ x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;;
+ esac
+ else :
+ # compilation failed
+ lt_cv_dlopen_self=no
+ fi
+fi
+rm -fr conftest*
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5
+$as_echo "$lt_cv_dlopen_self" >&6; }
+
+ if test "x$lt_cv_dlopen_self" = xyes; then
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5
+$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; }
+if ${lt_cv_dlopen_self_static+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test "$cross_compiling" = yes; then :
+ lt_cv_dlopen_self_static=cross
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+#line 12330 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+/* When -fvisbility=hidden is used, assume the code has been annotated
+ correspondingly for the symbols needed. */
+#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+void fnord () __attribute__((visibility("default")));
+#endif
+
+void fnord () { int i=42; }
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else
+ {
+ if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ else puts (dlerror ());
+ }
+ /* dlclose (self); */
+ }
+ else
+ puts (dlerror ());
+
+ return status;
+}
+_LT_EOF
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then
+ (./conftest; exit; ) >&5 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+ x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+ x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;;
+ esac
+ else :
+ # compilation failed
+ lt_cv_dlopen_self_static=no
+ fi
+fi
+rm -fr conftest*
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5
+$as_echo "$lt_cv_dlopen_self_static" >&6; }
+ fi
+
+ CPPFLAGS="$save_CPPFLAGS"
+ LDFLAGS="$save_LDFLAGS"
+ LIBS="$save_LIBS"
+ ;;
+ esac
+
+ case $lt_cv_dlopen_self in
+ yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+ *) enable_dlopen_self=unknown ;;
+ esac
+
+ case $lt_cv_dlopen_self_static in
+ yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+ *) enable_dlopen_self_static=unknown ;;
+ esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+striplib=
+old_striplib=
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5
+$as_echo_n "checking whether stripping libraries is possible... " >&6; }
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+ test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+ test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+ case $host_os in
+ darwin*)
+ if test -n "$STRIP" ; then
+ striplib="$STRIP -x"
+ old_striplib="$STRIP -S"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ fi
+ ;;
+ *)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ;;
+ esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+ # Report which library types will actually be built
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5
+$as_echo_n "checking if libtool supports shared libraries... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5
+$as_echo "$can_build_shared" >&6; }
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5
+$as_echo_n "checking whether to build shared libraries... " >&6; }
+ test "$can_build_shared" = "no" && enable_shared=no
+
+ # On AIX, shared libraries and static libraries use the same namespace, and
+ # are all built from PIC.
+ case $host_os in
+ aix3*)
+ test "$enable_shared" = yes && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+
+ aix[4-9]*)
+ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+ test "$enable_shared" = yes && enable_static=no
+ fi
+ ;;
+ esac
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5
+$as_echo "$enable_shared" >&6; }
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5
+$as_echo_n "checking whether to build static libraries... " >&6; }
+ # Make sure either enable_shared or enable_static is yes.
+ test "$enable_shared" = yes || enable_static=yes
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5
+$as_echo "$enable_static" >&6; }
+
+
+
+
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC="$lt_save_CC"
+
+ if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
+ ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
+ (test "X$CXX" != "Xg++"))) ; then
+ ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5
+$as_echo_n "checking how to run the C++ preprocessor... " >&6; }
+if test -z "$CXXCPP"; then
+ if ${ac_cv_prog_CXXCPP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ # Double quotes because CXXCPP needs to be expanded
+ for CXXCPP in "$CXX -E" "/lib/cpp"
+ do
+ ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+
+else
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+ # Broken: success on invalid input.
+continue
+else
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+ break
+fi
+
+ done
+ ac_cv_prog_CXXCPP=$CXXCPP
+
+fi
+ CXXCPP=$ac_cv_prog_CXXCPP
+else
+ ac_cv_prog_CXXCPP=$CXXCPP
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5
+$as_echo "$CXXCPP" >&6; }
+ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+
+else
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+ # Broken: success on invalid input.
+continue
+else
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+
+else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+else
+ _lt_caught_CXX_error=yes
+fi
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+archive_cmds_need_lc_CXX=no
+allow_undefined_flag_CXX=
+always_export_symbols_CXX=no
+archive_expsym_cmds_CXX=
+compiler_needs_object_CXX=no
+export_dynamic_flag_spec_CXX=
+hardcode_direct_CXX=no
+hardcode_direct_absolute_CXX=no
+hardcode_libdir_flag_spec_CXX=
+hardcode_libdir_flag_spec_ld_CXX=
+hardcode_libdir_separator_CXX=
+hardcode_minus_L_CXX=no
+hardcode_shlibpath_var_CXX=unsupported
+hardcode_automatic_CXX=no
+inherit_rpath_CXX=no
+module_cmds_CXX=
+module_expsym_cmds_CXX=
+link_all_deplibs_CXX=unknown
+old_archive_cmds_CXX=$old_archive_cmds
+reload_flag_CXX=$reload_flag
+reload_cmds_CXX=$reload_cmds
+no_undefined_flag_CXX=
+whole_archive_flag_spec_CXX=
+enable_shared_with_static_runtimes_CXX=no
+
+# Source file extension for C++ test sources.
+ac_ext=cpp
+
+# Object file extension for compiled C++ test sources.
+objext=o
+objext_CXX=$objext
+
+# No sense in running all these tests if we already determined that
+# the CXX compiler isn't working. Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_caught_CXX_error" != yes; then
+ # Code to be used in simple compile tests
+ lt_simple_compile_test_code="int some_variable = 0;"
+
+ # Code to be used in simple link tests
+ lt_simple_link_test_code='int main(int, char *[]) { return(0); }'
+
+ # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+ # save warnings/boilerplate of simple test code
+ ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+
+ ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+
+
+ # Allow CC to be a program name with arguments.
+ lt_save_CC=$CC
+ lt_save_LD=$LD
+ lt_save_GCC=$GCC
+ GCC=$GXX
+ lt_save_with_gnu_ld=$with_gnu_ld
+ lt_save_path_LD=$lt_cv_path_LD
+ if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+ lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+ else
+ $as_unset lt_cv_prog_gnu_ld
+ fi
+ if test -n "${lt_cv_path_LDCXX+set}"; then
+ lt_cv_path_LD=$lt_cv_path_LDCXX
+ else
+ $as_unset lt_cv_path_LD
+ fi
+ test -z "${LDCXX+set}" || LD=$LDCXX
+ CC=${CXX-"c++"}
+ compiler=$CC
+ compiler_CXX=$CC
+ for cc_temp in $compiler""; do
+ case $cc_temp in
+ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+done
+cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+
+
+ if test -n "$compiler"; then
+ # We don't want -fno-exception when compiling C++ code, so set the
+ # no_builtin_flag separately
+ if test "$GXX" = yes; then
+ lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin'
+ else
+ lt_prog_compiler_no_builtin_flag_CXX=
+ fi
+
+ if test "$GXX" = yes; then
+ # Set up default GNU C++ configuration
+
+
+
+# Check whether --with-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then :
+ withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
+else
+ with_gnu_ld=no
+fi
+
+ac_prog=ld
+if test "$GCC" = yes; then
+ # Check if gcc -print-prog-name=ld gives a path.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
+$as_echo_n "checking for ld used by $CC... " >&6; }
+ case $host in
+ *-*-mingw*)
+ # gcc leaves a trailing carriage return which upsets mingw
+ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+ *)
+ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+ esac
+ case $ac_prog in
+ # Accept absolute paths.
+ [\\/]* | ?:[\\/]*)
+ re_direlt='/[^/][^/]*/\.\./'
+ # Canonicalize the pathname of ld
+ ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+ while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+ ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+ done
+ test -z "$LD" && LD="$ac_prog"
+ ;;
+ "")
+ # If it fails, then pretend we aren't using GCC.
+ ac_prog=ld
+ ;;
+ *)
+ # If it is relative, then search for the first ld in PATH.
+ with_gnu_ld=unknown
+ ;;
+ esac
+elif test "$with_gnu_ld" = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
+$as_echo_n "checking for GNU ld... " >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
+$as_echo_n "checking for non-GNU ld... " >&6; }
+fi
+if ${lt_cv_path_LD+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -z "$LD"; then
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+ lt_cv_path_LD="$ac_dir/$ac_prog"
+ # Check to see if the program is GNU ld. I'd rather use --version,
+ # but apparently some variants of GNU ld only accept -v.
+ # Break only if it was the GNU/non-GNU ld that we prefer.
+ case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+ *GNU* | *'with BFD'*)
+ test "$with_gnu_ld" != no && break
+ ;;
+ *)
+ test "$with_gnu_ld" != yes && break
+ ;;
+ esac
+ fi
+ done
+ IFS="$lt_save_ifs"
+else
+ lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+$as_echo "$LD" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
+$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
+if ${lt_cv_prog_gnu_ld+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ # I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+ lt_cv_prog_gnu_ld=yes
+ ;;
+*)
+ lt_cv_prog_gnu_ld=no
+ ;;
+esac
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
+$as_echo "$lt_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+
+
+
+
+
+
+ # Check if GNU C++ uses GNU ld as the underlying linker, since the
+ # archiving commands below assume that GNU ld is being used.
+ if test "$with_gnu_ld" = yes; then
+ archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+
+ hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+ export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+ # investigate it a little bit more. (MM)
+ wlarc='${wl}'
+
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if eval "`$CC -print-prog-name=ld` --help 2>&1" |
+ $GREP 'no-whole-archive' > /dev/null; then
+ whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ whole_archive_flag_spec_CXX=
+ fi
+ else
+ with_gnu_ld=no
+ wlarc=
+
+ # A generic and very simple default shared library creation
+ # command for GNU C++ for the case where it uses the native
+ # linker, instead of GNU ld. If possible, this setting should
+ # overridden to take advantage of the native linker features on
+ # the platform it is being used on.
+ archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+ fi
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+
+ else
+ GXX=no
+ with_gnu_ld=no
+ wlarc=
+ fi
+
+ # PORTME: fill in a description of your system's C++ link characteristics
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+ ld_shlibs_CXX=yes
+ case $host_os in
+ aix3*)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ aix[4-9]*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=""
+ else
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+ for ld_flag in $LDFLAGS; do
+ case $ld_flag in
+ *-brtl*)
+ aix_use_runtimelinking=yes
+ break
+ ;;
+ esac
+ done
+ ;;
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ archive_cmds_CXX=''
+ hardcode_direct_CXX=yes
+ hardcode_direct_absolute_CXX=yes
+ hardcode_libdir_separator_CXX=':'
+ link_all_deplibs_CXX=yes
+ file_list_spec_CXX='${wl}-f,'
+
+ if test "$GXX" = yes; then
+ case $host_os in aix4.[012]|aix4.[012].*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" &&
+ strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ :
+ else
+ # We have old collect2
+ hardcode_direct_CXX=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ hardcode_minus_L_CXX=yes
+ hardcode_libdir_flag_spec_CXX='-L$libdir'
+ hardcode_libdir_separator_CXX=
+ fi
+ esac
+ shared_flag='-shared'
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag="$shared_flag "'${wl}-G'
+ fi
+ else
+ # not using gcc
+ if test "$host_cpu" = ia64; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag='${wl}-G'
+ else
+ shared_flag='${wl}-bM:SRE'
+ fi
+ fi
+ fi
+
+ export_dynamic_flag_spec_CXX='${wl}-bexpall'
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to
+ # export.
+ always_export_symbols_CXX=yes
+ if test "$aix_use_runtimelinking" = yes; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ allow_undefined_flag_CXX='-berok'
+ # Determine the default libpath from the value encoded in an empty
+ # executable.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+
+lt_aix_libpath_sed='
+ /Import File Strings/,/^$/ {
+ /^0/ {
+ s/^0 *\(.*\)$/\1/
+ p
+ }
+ }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+ aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
+
+ archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ else
+ if test "$host_cpu" = ia64; then
+ hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib'
+ allow_undefined_flag_CXX="-z nodefs"
+ archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+
+lt_aix_libpath_sed='
+ /Import File Strings/,/^$/ {
+ /^0/ {
+ s/^0 *\(.*\)$/\1/
+ p
+ }
+ }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+ aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ no_undefined_flag_CXX=' ${wl}-bernotok'
+ allow_undefined_flag_CXX=' ${wl}-berok'
+ if test "$with_gnu_ld" = yes; then
+ # We only use this code for GNU lds that support --whole-archive.
+ whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+ else
+ # Exported symbols can be pulled into shared objects from archives
+ whole_archive_flag_spec_CXX='$convenience'
+ fi
+ archive_cmds_need_lc_CXX=yes
+ # This is similar to how AIX traditionally builds its shared
+ # libraries.
+ archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ fi
+ fi
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ allow_undefined_flag_CXX=unsupported
+ # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ else
+ ld_shlibs_CXX=no
+ fi
+ ;;
+
+ chorus*)
+ case $cc_basename in
+ *)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ esac
+ ;;
+
+ cygwin* | mingw* | pw32* | cegcc*)
+ # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless,
+ # as there is no search path for DLLs.
+ hardcode_libdir_flag_spec_CXX='-L$libdir'
+ export_dynamic_flag_spec_CXX='${wl}--export-all-symbols'
+ allow_undefined_flag_CXX=unsupported
+ always_export_symbols_CXX=no
+ enable_shared_with_static_runtimes_CXX=yes
+
+ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+ archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is; otherwise, prepend...
+ archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ else
+ ld_shlibs_CXX=no
+ fi
+ ;;
+ darwin* | rhapsody*)
+
+
+ archive_cmds_need_lc_CXX=no
+ hardcode_direct_CXX=no
+ hardcode_automatic_CXX=yes
+ hardcode_shlibpath_var_CXX=unsupported
+ if test "$lt_cv_ld_force_load" = "yes"; then
+ whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+ else
+ whole_archive_flag_spec_CXX=''
+ fi
+ link_all_deplibs_CXX=yes
+ allow_undefined_flag_CXX="$_lt_dar_allow_undefined"
+ case $cc_basename in
+ ifort*) _lt_dar_can_shared=yes ;;
+ *) _lt_dar_can_shared=$GCC ;;
+ esac
+ if test "$_lt_dar_can_shared" = "yes"; then
+ output_verbose_link_cmd=func_echo_all
+ archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+ module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+ archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+ module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+ if test "$lt_cv_apple_cc_single_mod" != "yes"; then
+ archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
+ archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
+ fi
+
+ else
+ ld_shlibs_CXX=no
+ fi
+
+ ;;
+
+ dgux*)
+ case $cc_basename in
+ ec++*)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ ghcx*)
+ # Green Hills C++ Compiler
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ esac
+ ;;
+
+ freebsd2.*)
+ # C++ shared libraries reported to be fairly broken before
+ # switch to ELF
+ ld_shlibs_CXX=no
+ ;;
+
+ freebsd-elf*)
+ archive_cmds_need_lc_CXX=no
+ ;;
+
+ freebsd* | dragonfly*)
+ # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+ # conventions
+ ld_shlibs_CXX=yes
+ ;;
+
+ gnu*)
+ ;;
+
+ haiku*)
+ archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ link_all_deplibs_CXX=yes
+ ;;
+
+ hpux9*)
+ hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator_CXX=:
+ export_dynamic_flag_spec_CXX='${wl}-E'
+ hardcode_direct_CXX=yes
+ hardcode_minus_L_CXX=yes # Not in the search PATH,
+ # but as the default
+ # location of the library.
+
+ case $cc_basename in
+ CC*)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ aCC*)
+ archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+ ;;
+ *)
+ if test "$GXX" = yes; then
+ archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ fi
+ ;;
+ esac
+ ;;
+
+ hpux10*|hpux11*)
+ if test $with_gnu_ld = no; then
+ hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator_CXX=:
+
+ case $host_cpu in
+ hppa*64*|ia64*)
+ ;;
+ *)
+ export_dynamic_flag_spec_CXX='${wl}-E'
+ ;;
+ esac
+ fi
+ case $host_cpu in
+ hppa*64*|ia64*)
+ hardcode_direct_CXX=no
+ hardcode_shlibpath_var_CXX=no
+ ;;
+ *)
+ hardcode_direct_CXX=yes
+ hardcode_direct_absolute_CXX=yes
+ hardcode_minus_L_CXX=yes # Not in the search PATH,
+ # but as the default
+ # location of the library.
+ ;;
+ esac
+
+ case $cc_basename in
+ CC*)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ aCC*)
+ case $host_cpu in
+ hppa*64*)
+ archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ ia64*)
+ archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ *)
+ archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ esac
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+ ;;
+ *)
+ if test "$GXX" = yes; then
+ if test $with_gnu_ld = no; then
+ case $host_cpu in
+ hppa*64*)
+ archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ ia64*)
+ archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ *)
+ archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ esac
+ fi
+ else
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ fi
+ ;;
+ esac
+ ;;
+
+ interix[3-9]*)
+ hardcode_direct_CXX=no
+ hardcode_shlibpath_var_CXX=no
+ hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+ export_dynamic_flag_spec_CXX='${wl}-E'
+ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+ # Instead, shared libraries are loaded at an image base (0x10000000 by
+ # default) and relocated if they conflict, which is a slow very memory
+ # consuming and fragmenting process. To avoid this, we pick a random,
+ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
+ archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ ;;
+ irix5* | irix6*)
+ case $cc_basename in
+ CC*)
+ # SGI C++
+ archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+
+ # Archives containing C++ object files must be created using
+ # "CC -ar", where "CC" is the IRIX C++ compiler. This is
+ # necessary to make sure instantiated templates are included
+ # in the archive.
+ old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs'
+ ;;
+ *)
+ if test "$GXX" = yes; then
+ if test "$with_gnu_ld" = no; then
+ archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib'
+ fi
+ fi
+ link_all_deplibs_CXX=yes
+ ;;
+ esac
+ hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator_CXX=:
+ inherit_rpath_CXX=yes
+ ;;
+
+ linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ case $cc_basename in
+ KCC*)
+ # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+ # KCC will only create a shared library if the output file
+ # ends with ".so" (or ".sl" for HP-UX), so rename the library
+ # to its proper name (with version) after linking.
+ archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+ archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+
+ hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+ export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+
+ # Archives containing C++ object files must be created using
+ # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+ old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs'
+ ;;
+ icpc* | ecpc* )
+ # Intel C++
+ with_gnu_ld=yes
+ # version 8.0 and above of icpc choke on multiply defined symbols
+ # if we add $predep_objects and $postdep_objects, however 7.1 and
+ # earlier do not add the objects themselves.
+ case `$CC -V 2>&1` in
+ *"Version 7."*)
+ archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ ;;
+ *) # Version 8.0 or newer
+ tmp_idyn=
+ case $host_cpu in
+ ia64*) tmp_idyn=' -i_dynamic';;
+ esac
+ archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ ;;
+ esac
+ archive_cmds_need_lc_CXX=no
+ hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+ export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+ whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+ ;;
+ pgCC* | pgcpp*)
+ # Portland Group C++ compiler
+ case `$CC -V` in
+ *pgCC\ [1-5].* | *pgcpp\ [1-5].*)
+ prelink_cmds_CXX='tpldir=Template.dir~
+ rm -rf $tpldir~
+ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
+ compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"'
+ old_archive_cmds_CXX='tpldir=Template.dir~
+ rm -rf $tpldir~
+ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
+ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~
+ $RANLIB $oldlib'
+ archive_cmds_CXX='tpldir=Template.dir~
+ rm -rf $tpldir~
+ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+ archive_expsym_cmds_CXX='tpldir=Template.dir~
+ rm -rf $tpldir~
+ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+ ;;
+ *) # Version 6 and above use weak symbols
+ archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+ archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+ ;;
+ esac
+
+ hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir'
+ export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+ whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+ ;;
+ cxx*)
+ # Compaq C++
+ archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
+
+ runpath_var=LD_RUN_PATH
+ hardcode_libdir_flag_spec_CXX='-rpath $libdir'
+ hardcode_libdir_separator_CXX=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed'
+ ;;
+ xl* | mpixl* | bgxl*)
+ # IBM XL 8.0 on PPC, with GNU ld
+ hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+ export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+ archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ if test "x$supports_anon_versioning" = xyes; then
+ archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+ fi
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ # Sun C++ 5.9
+ no_undefined_flag_CXX=' -zdefs'
+ archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
+ hardcode_libdir_flag_spec_CXX='-R$libdir'
+ whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+ compiler_needs_object_CXX=yes
+
+ # Not sure whether something based on
+ # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
+ # would be better.
+ output_verbose_link_cmd='func_echo_all'
+
+ # Archives containing C++ object files must be created using
+ # "CC -xar", where "CC" is the Sun C++ compiler. This is
+ # necessary to make sure instantiated templates are included
+ # in the archive.
+ old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs'
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+
+ lynxos*)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+
+ m88k*)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+
+ mvs*)
+ case $cc_basename in
+ cxx*)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ esac
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+ wlarc=
+ hardcode_libdir_flag_spec_CXX='-R$libdir'
+ hardcode_direct_CXX=yes
+ hardcode_shlibpath_var_CXX=no
+ fi
+ # Workaround some broken pre-1.5 toolchains
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+ ;;
+
+ *nto* | *qnx*)
+ ld_shlibs_CXX=yes
+ ;;
+
+ openbsd2*)
+ # C++ shared libraries are fairly broken
+ ld_shlibs_CXX=no
+ ;;
+
+ openbsd*)
+ if test -f /usr/libexec/ld.so; then
+ hardcode_direct_CXX=yes
+ hardcode_shlibpath_var_CXX=no
+ hardcode_direct_absolute_CXX=yes
+ archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+ hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
+ export_dynamic_flag_spec_CXX='${wl}-E'
+ whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ fi
+ output_verbose_link_cmd=func_echo_all
+ else
+ ld_shlibs_CXX=no
+ fi
+ ;;
+
+ osf3* | osf4* | osf5*)
+ case $cc_basename in
+ KCC*)
+ # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+ # KCC will only create a shared library if the output file
+ # ends with ".so" (or ".sl" for HP-UX), so rename the library
+ # to its proper name (with version) after linking.
+ archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+ hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+ hardcode_libdir_separator_CXX=:
+
+ # Archives containing C++ object files must be created using
+ # the KAI C++ compiler.
+ case $host in
+ osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;;
+ *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;;
+ esac
+ ;;
+ RCC*)
+ # Rational C++ 2.4.1
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ cxx*)
+ case $host in
+ osf3*)
+ allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
+ archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+ hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+ ;;
+ *)
+ allow_undefined_flag_CXX=' -expect_unresolved \*'
+ archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+ archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+ echo "-hidden">> $lib.exp~
+ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~
+ $RM $lib.exp'
+ hardcode_libdir_flag_spec_CXX='-rpath $libdir'
+ ;;
+ esac
+
+ hardcode_libdir_separator_CXX=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+ ;;
+ *)
+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+ allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
+ case $host in
+ osf3*)
+ archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ ;;
+ *)
+ archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ ;;
+ esac
+
+ hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator_CXX=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+
+ else
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ fi
+ ;;
+ esac
+ ;;
+
+ psos*)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+
+ sunos4*)
+ case $cc_basename in
+ CC*)
+ # Sun C++ 4.x
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ lcc*)
+ # Lucid
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ esac
+ ;;
+
+ solaris*)
+ case $cc_basename in
+ CC*)
+ # Sun C++ 4.2, 5.x and Centerline C++
+ archive_cmds_need_lc_CXX=yes
+ no_undefined_flag_CXX=' -zdefs'
+ archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+ hardcode_libdir_flag_spec_CXX='-R$libdir'
+ hardcode_shlibpath_var_CXX=no
+ case $host_os in
+ solaris2.[0-5] | solaris2.[0-5].*) ;;
+ *)
+ # The compiler driver will combine and reorder linker options,
+ # but understands `-z linker_flag'.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract'
+ ;;
+ esac
+ link_all_deplibs_CXX=yes
+
+ output_verbose_link_cmd='func_echo_all'
+
+ # Archives containing C++ object files must be created using
+ # "CC -xar", where "CC" is the Sun C++ compiler. This is
+ # necessary to make sure instantiated templates are included
+ # in the archive.
+ old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs'
+ ;;
+ gcx*)
+ # Green Hills C++ Compiler
+ archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+
+ # The C++ compiler must be used to create the archive.
+ old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+ ;;
+ *)
+ # GNU C++ compiler with Solaris linker
+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+ no_undefined_flag_CXX=' ${wl}-z ${wl}defs'
+ if $CC --version | $GREP -v '^2\.7' > /dev/null; then
+ archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+ archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+ else
+ # g++ 2.7 appears to require `-G' NOT `-shared' on this
+ # platform.
+ archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+ archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+ fi
+
+ hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir'
+ case $host_os in
+ solaris2.[0-5] | solaris2.[0-5].*) ;;
+ *)
+ whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+ ;;
+ esac
+ fi
+ ;;
+ esac
+ ;;
+
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+ no_undefined_flag_CXX='${wl}-z,text'
+ archive_cmds_need_lc_CXX=no
+ hardcode_shlibpath_var_CXX=no
+ runpath_var='LD_RUN_PATH'
+
+ case $cc_basename in
+ CC*)
+ archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6*)
+ # Note: We can NOT use -z defs as we might desire, because we do not
+ # link with -lc, and that would cause any symbols used from libc to
+ # always be unresolved, which means just about no library would
+ # ever link correctly. If we're not using GNU ld we use -z text
+ # though, which does catch some bad symbols but isn't as heavy-handed
+ # as -z defs.
+ no_undefined_flag_CXX='${wl}-z,text'
+ allow_undefined_flag_CXX='${wl}-z,nodefs'
+ archive_cmds_need_lc_CXX=no
+ hardcode_shlibpath_var_CXX=no
+ hardcode_libdir_flag_spec_CXX='${wl}-R,$libdir'
+ hardcode_libdir_separator_CXX=':'
+ link_all_deplibs_CXX=yes
+ export_dynamic_flag_spec_CXX='${wl}-Bexport'
+ runpath_var='LD_RUN_PATH'
+
+ case $cc_basename in
+ CC*)
+ archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~
+ '"$old_archive_cmds_CXX"
+ reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~
+ '"$reload_cmds_CXX"
+ ;;
+ *)
+ archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ ;;
+
+ tandem*)
+ case $cc_basename in
+ NCC*)
+ # NonStop-UX NCC 3.20
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ esac
+ ;;
+
+ vxworks*)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+
+ *)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ esac
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5
+$as_echo "$ld_shlibs_CXX" >&6; }
+ test "$ld_shlibs_CXX" = no && can_build_shared=no
+
+ GCC_CXX="$GXX"
+ LD_CXX="$LD"
+
+ ## CAVEAT EMPTOR:
+ ## There is no encapsulation within the following macros, do not change
+ ## the running order or otherwise move them around unless you know exactly
+ ## what you are doing...
+ # Dependencies to place before and after the object being linked:
+predep_objects_CXX=
+postdep_objects_CXX=
+predeps_CXX=
+postdeps_CXX=
+compiler_lib_search_path_CXX=
+
+cat > conftest.$ac_ext <<_LT_EOF
+class Foo
+{
+public:
+ Foo (void) { a = 0; }
+private:
+ int a;
+};
+_LT_EOF
+
+if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ # Parse the compiler output and extract the necessary
+ # objects, libraries and library flags.
+
+ # Sentinel used to keep track of whether or not we are before
+ # the conftest object file.
+ pre_test_object_deps_done=no
+
+ for p in `eval "$output_verbose_link_cmd"`; do
+ case $p in
+
+ -L* | -R* | -l*)
+ # Some compilers place space between "-{L,R}" and the path.
+ # Remove the space.
+ if test $p = "-L" ||
+ test $p = "-R"; then
+ prev=$p
+ continue
+ else
+ prev=
+ fi
+
+ if test "$pre_test_object_deps_done" = no; then
+ case $p in
+ -L* | -R*)
+ # Internal compiler library paths should come after those
+ # provided the user. The postdeps already come after the
+ # user supplied libs so there is no need to process them.
+ if test -z "$compiler_lib_search_path_CXX"; then
+ compiler_lib_search_path_CXX="${prev}${p}"
+ else
+ compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}"
+ fi
+ ;;
+ # The "-l" case would never come before the object being
+ # linked, so don't bother handling this case.
+ esac
+ else
+ if test -z "$postdeps_CXX"; then
+ postdeps_CXX="${prev}${p}"
+ else
+ postdeps_CXX="${postdeps_CXX} ${prev}${p}"
+ fi
+ fi
+ ;;
+
+ *.$objext)
+ # This assumes that the test object file only shows up
+ # once in the compiler output.
+ if test "$p" = "conftest.$objext"; then
+ pre_test_object_deps_done=yes
+ continue
+ fi
+
+ if test "$pre_test_object_deps_done" = no; then
+ if test -z "$predep_objects_CXX"; then
+ predep_objects_CXX="$p"
+ else
+ predep_objects_CXX="$predep_objects_CXX $p"
+ fi
+ else
+ if test -z "$postdep_objects_CXX"; then
+ postdep_objects_CXX="$p"
+ else
+ postdep_objects_CXX="$postdep_objects_CXX $p"
+ fi
+ fi
+ ;;
+
+ *) ;; # Ignore the rest.
+
+ esac
+ done
+
+ # Clean up.
+ rm -f a.out a.exe
+else
+ echo "libtool.m4: error: problem compiling CXX test program"
+fi
+
+$RM -f confest.$objext
+
+# PORTME: override above test on systems where it is broken
+case $host_os in
+interix[3-9]*)
+ # Interix 3.5 installs completely hosed .la files for C++, so rather than
+ # hack all around it, let's just trust "g++" to DTRT.
+ predep_objects_CXX=
+ postdep_objects_CXX=
+ postdeps_CXX=
+ ;;
+
+linux*)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ # Sun C++ 5.9
+
+ # The more standards-conforming stlport4 library is
+ # incompatible with the Cstd library. Avoid specifying
+ # it if it's in CXXFLAGS. Ignore libCrun as
+ # -library=stlport4 depends on it.
+ case " $CXX $CXXFLAGS " in
+ *" -library=stlport4 "*)
+ solaris_use_stlport4=yes
+ ;;
+ esac
+
+ if test "$solaris_use_stlport4" != yes; then
+ postdeps_CXX='-library=Cstd -library=Crun'
+ fi
+ ;;
+ esac
+ ;;
+
+solaris*)
+ case $cc_basename in
+ CC*)
+ # The more standards-conforming stlport4 library is
+ # incompatible with the Cstd library. Avoid specifying
+ # it if it's in CXXFLAGS. Ignore libCrun as
+ # -library=stlport4 depends on it.
+ case " $CXX $CXXFLAGS " in
+ *" -library=stlport4 "*)
+ solaris_use_stlport4=yes
+ ;;
+ esac
+
+ # Adding this requires a known-good setup of shared libraries for
+ # Sun compiler versions before 5.6, else PIC objects from an old
+ # archive will be linked into the output, leading to subtle bugs.
+ if test "$solaris_use_stlport4" != yes; then
+ postdeps_CXX='-library=Cstd -library=Crun'
+ fi
+ ;;
+ esac
+ ;;
+esac
+
+
+case " $postdeps_CXX " in
+*" -lc "*) archive_cmds_need_lc_CXX=no ;;
+esac
+ compiler_lib_search_dirs_CXX=
+if test -n "${compiler_lib_search_path_CXX}"; then
+ compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ lt_prog_compiler_wl_CXX=
+lt_prog_compiler_pic_CXX=
+lt_prog_compiler_static_CXX=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+
+ # C++ specific cases for pic, static, wl, etc.
+ if test "$GXX" = yes; then
+ lt_prog_compiler_wl_CXX='-Wl,'
+ lt_prog_compiler_static_CXX='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ lt_prog_compiler_static_CXX='-Bstatic'
+ fi
+ lt_prog_compiler_pic_CXX='-fPIC'
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ lt_prog_compiler_pic_CXX='-fPIC'
+ ;;
+ m68k)
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the `-m68020' flag to GCC prevents building anything better,
+ # like `-m68040'.
+ lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4'
+ ;;
+ esac
+ ;;
+
+ beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+ mingw* | cygwin* | os2* | pw32* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ # Although the cygwin gcc ignores -fPIC, still need this for old-style
+ # (--disable-auto-import) libraries
+ lt_prog_compiler_pic_CXX='-DDLL_EXPORT'
+ ;;
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ lt_prog_compiler_pic_CXX='-fno-common'
+ ;;
+ *djgpp*)
+ # DJGPP does not support shared libraries at all
+ lt_prog_compiler_pic_CXX=
+ ;;
+ haiku*)
+ # PIC is the default for Haiku.
+ # The "-static" flag exists, but is broken.
+ lt_prog_compiler_static_CXX=
+ ;;
+ interix[3-9]*)
+ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+ # Instead, we relocate shared libraries at runtime.
+ ;;
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ lt_prog_compiler_pic_CXX=-Kconform_pic
+ fi
+ ;;
+ hpux*)
+ # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+ # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag
+ # sets the default TLS model and affects inlining.
+ case $host_cpu in
+ hppa*64*)
+ ;;
+ *)
+ lt_prog_compiler_pic_CXX='-fPIC'
+ ;;
+ esac
+ ;;
+ *qnx* | *nto*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ lt_prog_compiler_pic_CXX='-fPIC -shared'
+ ;;
+ *)
+ lt_prog_compiler_pic_CXX='-fPIC'
+ ;;
+ esac
+ else
+ case $host_os in
+ aix[4-9]*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ lt_prog_compiler_static_CXX='-Bstatic'
+ else
+ lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+ chorus*)
+ case $cc_basename in
+ cxch68*)
+ # Green Hills C++ Compiler
+ # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+ ;;
+ esac
+ ;;
+ dgux*)
+ case $cc_basename in
+ ec++*)
+ lt_prog_compiler_pic_CXX='-KPIC'
+ ;;
+ ghcx*)
+ # Green Hills C++ Compiler
+ lt_prog_compiler_pic_CXX='-pic'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ freebsd* | dragonfly*)
+ # FreeBSD uses GNU C++
+ ;;
+ hpux9* | hpux10* | hpux11*)
+ case $cc_basename in
+ CC*)
+ lt_prog_compiler_wl_CXX='-Wl,'
+ lt_prog_compiler_static_CXX='${wl}-a ${wl}archive'
+ if test "$host_cpu" != ia64; then
+ lt_prog_compiler_pic_CXX='+Z'
+ fi
+ ;;
+ aCC*)
+ lt_prog_compiler_wl_CXX='-Wl,'
+ lt_prog_compiler_static_CXX='${wl}-a ${wl}archive'
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ lt_prog_compiler_pic_CXX='+Z'
+ ;;
+ esac
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ interix*)
+ # This is c89, which is MS Visual C++ (no shared libs)
+ # Anyone wants to do a port?
+ ;;
+ irix5* | irix6* | nonstopux*)
+ case $cc_basename in
+ CC*)
+ lt_prog_compiler_wl_CXX='-Wl,'
+ lt_prog_compiler_static_CXX='-non_shared'
+ # CC pic flag -KPIC is the default.
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ case $cc_basename in
+ KCC*)
+ # KAI C++ Compiler
+ lt_prog_compiler_wl_CXX='--backend -Wl,'
+ lt_prog_compiler_pic_CXX='-fPIC'
+ ;;
+ ecpc* )
+ # old Intel C++ for x86_64 which still supported -KPIC.
+ lt_prog_compiler_wl_CXX='-Wl,'
+ lt_prog_compiler_pic_CXX='-KPIC'
+ lt_prog_compiler_static_CXX='-static'
+ ;;
+ icpc* )
+ # Intel C++, used to be incompatible with GCC.
+ # ICC 10 doesn't accept -KPIC any more.
+ lt_prog_compiler_wl_CXX='-Wl,'
+ lt_prog_compiler_pic_CXX='-fPIC'
+ lt_prog_compiler_static_CXX='-static'
+ ;;
+ pgCC* | pgcpp*)
+ # Portland Group C++ compiler
+ lt_prog_compiler_wl_CXX='-Wl,'
+ lt_prog_compiler_pic_CXX='-fpic'
+ lt_prog_compiler_static_CXX='-Bstatic'
+ ;;
+ cxx*)
+ # Compaq C++
+ # Make sure the PIC flag is empty. It appears that all Alpha
+ # Linux and Compaq Tru64 Unix objects are PIC.
+ lt_prog_compiler_pic_CXX=
+ lt_prog_compiler_static_CXX='-non_shared'
+ ;;
+ xlc* | xlC* | bgxl[cC]* | mpixl[cC]*)
+ # IBM XL 8.0, 9.0 on PPC and BlueGene
+ lt_prog_compiler_wl_CXX='-Wl,'
+ lt_prog_compiler_pic_CXX='-qpic'
+ lt_prog_compiler_static_CXX='-qstaticlink'
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ # Sun C++ 5.9
+ lt_prog_compiler_pic_CXX='-KPIC'
+ lt_prog_compiler_static_CXX='-Bstatic'
+ lt_prog_compiler_wl_CXX='-Qoption ld '
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+ lynxos*)
+ ;;
+ m88k*)
+ ;;
+ mvs*)
+ case $cc_basename in
+ cxx*)
+ lt_prog_compiler_pic_CXX='-W c,exportall'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ netbsd*)
+ ;;
+ *qnx* | *nto*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ lt_prog_compiler_pic_CXX='-fPIC -shared'
+ ;;
+ osf3* | osf4* | osf5*)
+ case $cc_basename in
+ KCC*)
+ lt_prog_compiler_wl_CXX='--backend -Wl,'
+ ;;
+ RCC*)
+ # Rational C++ 2.4.1
+ lt_prog_compiler_pic_CXX='-pic'
+ ;;
+ cxx*)
+ # Digital/Compaq C++
+ lt_prog_compiler_wl_CXX='-Wl,'
+ # Make sure the PIC flag is empty. It appears that all Alpha
+ # Linux and Compaq Tru64 Unix objects are PIC.
+ lt_prog_compiler_pic_CXX=
+ lt_prog_compiler_static_CXX='-non_shared'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ psos*)
+ ;;
+ solaris*)
+ case $cc_basename in
+ CC*)
+ # Sun C++ 4.2, 5.x and Centerline C++
+ lt_prog_compiler_pic_CXX='-KPIC'
+ lt_prog_compiler_static_CXX='-Bstatic'
+ lt_prog_compiler_wl_CXX='-Qoption ld '
+ ;;
+ gcx*)
+ # Green Hills C++ Compiler
+ lt_prog_compiler_pic_CXX='-PIC'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ sunos4*)
+ case $cc_basename in
+ CC*)
+ # Sun C++ 4.x
+ lt_prog_compiler_pic_CXX='-pic'
+ lt_prog_compiler_static_CXX='-Bstatic'
+ ;;
+ lcc*)
+ # Lucid
+ lt_prog_compiler_pic_CXX='-pic'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ case $cc_basename in
+ CC*)
+ lt_prog_compiler_wl_CXX='-Wl,'
+ lt_prog_compiler_pic_CXX='-KPIC'
+ lt_prog_compiler_static_CXX='-Bstatic'
+ ;;
+ esac
+ ;;
+ tandem*)
+ case $cc_basename in
+ NCC*)
+ # NonStop-UX NCC 3.20
+ lt_prog_compiler_pic_CXX='-KPIC'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ vxworks*)
+ ;;
+ *)
+ lt_prog_compiler_can_build_shared_CXX=no
+ ;;
+ esac
+ fi
+
+case $host_os in
+ # For platforms which do not support PIC, -DPIC is meaningless:
+ *djgpp*)
+ lt_prog_compiler_pic_CXX=
+ ;;
+ *)
+ lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC"
+ ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic_CXX" >&5
+$as_echo "$lt_prog_compiler_pic_CXX" >&6; }
+
+
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic_CXX"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5
+$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; }
+if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_pic_works_CXX=no
+ ac_outfile=conftest.$ac_objext
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+ $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_pic_works_CXX=yes
+ fi
+ fi
+ $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; }
+
+if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then
+ case $lt_prog_compiler_pic_CXX in
+ "" | " "*) ;;
+ *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;;
+ esac
+else
+ lt_prog_compiler_pic_CXX=
+ lt_prog_compiler_can_build_shared_CXX=no
+fi
+
+fi
+
+
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
+if ${lt_cv_prog_compiler_static_works_CXX+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_static_works_CXX=no
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+ echo "$lt_simple_link_test_code" > conftest.$ac_ext
+ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+ # The linker can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test -s conftest.err; then
+ # Append any errors to the config.log.
+ cat conftest.err 1>&5
+ $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if diff conftest.exp conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_static_works_CXX=yes
+ fi
+ else
+ lt_cv_prog_compiler_static_works_CXX=yes
+ fi
+ fi
+ $RM -r conftest*
+ LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; }
+
+if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then
+ :
+else
+ lt_prog_compiler_static_CXX=
+fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o_CXX+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_c_o_CXX=no
+ $RM -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_c_o_CXX=yes
+ fi
+ fi
+ chmod u+w . 2>&5
+ $RM conftest*
+ # SGI C++ compiler will create directory out/ii_files/ for
+ # template instantiation
+ test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+ $RM out/* && rmdir out
+ cd ..
+ $RM -r conftest
+ $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; }
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o_CXX+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_c_o_CXX=no
+ $RM -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_c_o_CXX=yes
+ fi
+ fi
+ chmod u+w . 2>&5
+ $RM conftest*
+ # SGI C++ compiler will create directory out/ii_files/ for
+ # template instantiation
+ test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+ $RM out/* && rmdir out
+ cd ..
+ $RM -r conftest
+ $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; }
+
+
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then
+ # do not overwrite the value of need_locks provided by the user
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
+$as_echo_n "checking if we can lock with hard links... " >&6; }
+ hard_links=yes
+ $RM conftest*
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ touch conftest.a
+ ln conftest.a conftest.b 2>&5 || hard_links=no
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
+$as_echo "$hard_links" >&6; }
+ if test "$hard_links" = no; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+ need_locks=warn
+ fi
+else
+ need_locks=no
+fi
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+
+ export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ case $host_os in
+ aix[4-9]*)
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to AIX nm, but means don't demangle with GNU nm
+ # Also, AIX nm treats weak defined symbols like other global defined
+ # symbols, whereas GNU nm marks them as "W".
+ if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+ export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ else
+ export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ fi
+ ;;
+ pw32*)
+ export_symbols_cmds_CXX="$ltdll_cmds"
+ ;;
+ cygwin* | mingw* | cegcc*)
+ export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;/^.*[ ]__nm__/s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
+ ;;
+ *)
+ export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ ;;
+ esac
+ exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5
+$as_echo "$ld_shlibs_CXX" >&6; }
+test "$ld_shlibs_CXX" = no && can_build_shared=no
+
+with_gnu_ld_CXX=$with_gnu_ld
+
+
+
+
+
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc_CXX" in
+x|xyes)
+ # Assume -lc should be added
+ archive_cmds_need_lc_CXX=yes
+
+ if test "$enable_shared" = yes && test "$GCC" = yes; then
+ case $archive_cmds_CXX in
+ *'~'*)
+ # FIXME: we may have to deal with multi-command sequences.
+ ;;
+ '$CC '*)
+ # Test whether the compiler implicitly links with -lc since on some
+ # systems, -lgcc has to come before -lc. If gcc already passes -lc
+ # to ld, don't add -lc before -lgcc.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
+$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
+if ${lt_cv_archive_cmds_need_lc_CXX+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ $RM conftest*
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } 2>conftest.err; then
+ soname=conftest
+ lib=conftest
+ libobjs=conftest.$ac_objext
+ deplibs=
+ wl=$lt_prog_compiler_wl_CXX
+ pic_flag=$lt_prog_compiler_pic_CXX
+ compiler_flags=-v
+ linker_flags=-v
+ verstring=
+ output_objdir=.
+ libname=conftest
+ lt_save_allow_undefined_flag=$allow_undefined_flag_CXX
+ allow_undefined_flag_CXX=
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
+ (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ then
+ lt_cv_archive_cmds_need_lc_CXX=no
+ else
+ lt_cv_archive_cmds_need_lc_CXX=yes
+ fi
+ allow_undefined_flag_CXX=$lt_save_allow_undefined_flag
+ else
+ cat conftest.err 1>&5
+ fi
+ $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5
+$as_echo "$lt_cv_archive_cmds_need_lc_CXX" >&6; }
+ archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX
+ ;;
+ esac
+ fi
+ ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
+$as_echo_n "checking dynamic linker characteristics... " >&6; }
+
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+ shlibpath_var=LIBPATH
+
+ # AIX 3 has no versioning support, so we append a major version to the name.
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+
+aix[4-9]*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ hardcode_into_libs=yes
+ if test "$host_cpu" = ia64; then
+ # AIX 5 supports IA64
+ library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ else
+ # With GCC up to 2.95.x, collect2 would create an import file
+ # for dependence libraries. The import file would start with
+ # the line `#! .'. This would cause the generated library to
+ # depend on `.', always an invalid library. This was fixed in
+ # development snapshots of GCC prior to 3.0.
+ case $host_os in
+ aix4 | aix4.[01] | aix4.[01].*)
+ if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+ echo ' yes '
+ echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+ :
+ else
+ can_build_shared=no
+ fi
+ ;;
+ esac
+ # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+ # soname into executable. Probably we can add versioning support to
+ # collect2, so additional links can be useful in future.
+ if test "$aix_use_runtimelinking" = yes; then
+ # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+ # instead of lib<name>.a to let people know that these are not
+ # typical AIX shared libraries.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ else
+ # We preserve .a as extension for shared libraries through AIX4.2
+ # and later when we are not doing run time linking.
+ library_names_spec='${libname}${release}.a $libname.a'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ fi
+ shlibpath_var=LIBPATH
+ fi
+ ;;
+
+amigaos*)
+ case $host_cpu in
+ powerpc)
+ # Since July 2007 AmigaOS4 officially supports .so libraries.
+ # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ ;;
+ m68k)
+ library_names_spec='$libname.ixlibrary $libname.a'
+ # Create ${libname}_ixlibrary.a entries in /sys/libs.
+ finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+ ;;
+ esac
+ ;;
+
+beos*)
+ library_names_spec='${libname}${shared_ext}'
+ dynamic_linker="$host_os ld.so"
+ shlibpath_var=LIBRARY_PATH
+ ;;
+
+bsdi[45]*)
+ version_type=linux
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+ sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+ # the default ld.so.conf also contains /usr/contrib/lib and
+ # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+ # libtool to hard-code these into programs
+ ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+ version_type=windows
+ shrext_cmds=".dll"
+ need_version=no
+ need_lib_prefix=no
+
+ case $GCC,$host_os in
+ yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \${file}`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname~
+ chmod a+x \$dldir/$dlname~
+ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+ eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+ fi'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $RM \$dlpath'
+ shlibpath_overrides_runpath=yes
+
+ case $host_os in
+ cygwin*)
+ # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+ soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+
+ ;;
+ mingw* | cegcc*)
+ # MinGW DLLs use traditional 'lib' prefix
+ soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ ;;
+ pw32*)
+ # pw32 DLLs use 'pw' prefix rather than 'lib'
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ ;;
+ esac
+ ;;
+
+ *)
+ library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+ ;;
+ esac
+ dynamic_linker='Win32 ld.exe'
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+
+darwin* | rhapsody*)
+ dynamic_linker="$host_os dyld"
+ version_type=darwin
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+ soname_spec='${libname}${release}${major}$shared_ext'
+ shlibpath_overrides_runpath=yes
+ shlibpath_var=DYLD_LIBRARY_PATH
+ shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+
+ sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+ ;;
+
+dgux*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+freebsd* | dragonfly*)
+ # DragonFly does not have aout. When/if they implement a new
+ # versioning mechanism, adjust this.
+ if test -x /usr/bin/objformat; then
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+ freebsd[23].*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+ version_type=freebsd-$objformat
+ case $version_type in
+ freebsd-elf*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ need_version=no
+ need_lib_prefix=no
+ ;;
+ freebsd-*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+ need_version=yes
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+ *) # from 4.6 on, and DragonFly
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ esac
+ ;;
+
+haiku*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ dynamic_linker="$host_os runtime_loader"
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
+ hardcode_into_libs=yes
+ ;;
+
+hpux9* | hpux10* | hpux11*)
+ # Give a soname corresponding to the major version so that dld.sl refuses to
+ # link against other versions.
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ case $host_cpu in
+ ia64*)
+ shrext_cmds='.so'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.so"
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ if test "X$HPUX_IA64_MODE" = X32; then
+ sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+ else
+ sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+ fi
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ hppa*64*)
+ shrext_cmds='.sl'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ *)
+ shrext_cmds='.sl'
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=SHLIB_PATH
+ shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+ esac
+ # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
+ postinstall_cmds='chmod 555 $lib'
+ # or fails outright, so override atomically:
+ install_override_mode=555
+ ;;
+
+interix[3-9]*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $host_os in
+ nonstopux*) version_type=nonstopux ;;
+ *)
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ version_type=linux
+ else
+ version_type=irix
+ fi ;;
+ esac
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+ case $host_os in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in # libtool.m4 will add one of these switches to LD
+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+ libsuff= shlibsuff= libmagic=32-bit;;
+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+ libsuff=32 shlibsuff=N32 libmagic=N32;;
+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+ libsuff=64 shlibsuff=64 libmagic=64-bit;;
+ *) libsuff= shlibsuff= libmagic=never-match;;
+ esac
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+ sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+ hardcode_into_libs=yes
+ ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+ dynamic_linker=no
+ ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+
+ # Some binutils ld are patched to set DT_RUNPATH
+ if ${lt_cv_shlibpath_overrides_runpath+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_shlibpath_overrides_runpath=no
+ save_LDFLAGS=$LDFLAGS
+ save_libdir=$libdir
+ eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \
+ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+ if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
+ lt_cv_shlibpath_overrides_runpath=yes
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ LDFLAGS=$save_LDFLAGS
+ libdir=$save_libdir
+
+fi
+
+ shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
+
+ # This implies no fast_install, which is unacceptable.
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ # Append ld.so.conf contents to the search path
+ if test -f /etc/ld.so.conf; then
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+ sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+ fi
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+ # powerpc, because MkLinux only supported shared libraries with the
+ # GNU dynamic linker. Since this was broken with cross compilers,
+ # most powerpc-linux boxes support dynamic linking these days and
+ # people can always --disable-shared, the test was removed, and we
+ # assume the GNU/Linux dynamic linker is in use.
+ dynamic_linker='GNU/Linux ld.so'
+ ;;
+
+netbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ dynamic_linker='NetBSD (a.out) ld.so'
+ else
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='NetBSD ld.elf_so'
+ fi
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+
+newsos6)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+*nto* | *qnx*)
+ version_type=qnx
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='ldqnx.so'
+ ;;
+
+openbsd*)
+ version_type=sunos
+ sys_lib_dlsearch_path_spec="/usr/lib"
+ need_lib_prefix=no
+ # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+ case $host_os in
+ openbsd3.3 | openbsd3.3.*) need_version=yes ;;
+ *) need_version=no ;;
+ esac
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ case $host_os in
+ openbsd2.[89] | openbsd2.[89].*)
+ shlibpath_overrides_runpath=no
+ ;;
+ *)
+ shlibpath_overrides_runpath=yes
+ ;;
+ esac
+ else
+ shlibpath_overrides_runpath=yes
+ fi
+ ;;
+
+os2*)
+ libname_spec='$name'
+ shrext_cmds=".dll"
+ need_lib_prefix=no
+ library_names_spec='$libname${shared_ext} $libname.a'
+ dynamic_linker='OS/2 ld.exe'
+ shlibpath_var=LIBPATH
+ ;;
+
+osf3* | osf4* | osf5*)
+ version_type=osf
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+ sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+ ;;
+
+rdos*)
+ dynamic_linker=no
+ ;;
+
+solaris*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ # ldd complains unless libraries are executable
+ postinstall_cmds='chmod +x $lib'
+ ;;
+
+sunos4*)
+ version_type=sunos
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ if test "$with_gnu_ld" = yes; then
+ need_lib_prefix=no
+ fi
+ need_version=yes
+ ;;
+
+sysv4 | sysv4.3*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_vendor in
+ sni)
+ shlibpath_overrides_runpath=no
+ need_lib_prefix=no
+ runpath_var=LD_RUN_PATH
+ ;;
+ siemens)
+ need_lib_prefix=no
+ ;;
+ motorola)
+ need_lib_prefix=no
+ need_version=no
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+ ;;
+ esac
+ ;;
+
+sysv4*MP*)
+ if test -d /usr/nec ;then
+ version_type=linux
+ library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+ soname_spec='$libname${shared_ext}.$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ fi
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ version_type=freebsd-elf
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ if test "$with_gnu_ld" = yes; then
+ sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+ else
+ sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+ case $host_os in
+ sco3.2v5*)
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+ ;;
+ esac
+ fi
+ sys_lib_dlsearch_path_spec='/usr/lib'
+ ;;
+
+tpf*)
+ # TPF is a cross-target only. Preferred cross-host = GNU/Linux.
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+uts4*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+*)
+ dynamic_linker=no
+ ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
+$as_echo "$dynamic_linker" >&6; }
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
+ sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+fi
+if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
+ sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
+$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
+hardcode_action_CXX=
+if test -n "$hardcode_libdir_flag_spec_CXX" ||
+ test -n "$runpath_var_CXX" ||
+ test "X$hardcode_automatic_CXX" = "Xyes" ; then
+
+ # We can hardcode non-existent directories.
+ if test "$hardcode_direct_CXX" != no &&
+ # If the only mechanism to avoid hardcoding is shlibpath_var, we
+ # have to relink, otherwise we might link with an installed library
+ # when we should be linking with a yet-to-be-installed one
+ ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no &&
+ test "$hardcode_minus_L_CXX" != no; then
+ # Linking always hardcodes the temporary library directory.
+ hardcode_action_CXX=relink
+ else
+ # We can link without hardcoding, and we can hardcode nonexisting dirs.
+ hardcode_action_CXX=immediate
+ fi
+else
+ # We cannot hardcode anything, or else we can only hardcode existing
+ # directories.
+ hardcode_action_CXX=unsupported
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5
+$as_echo "$hardcode_action_CXX" >&6; }
+
+if test "$hardcode_action_CXX" = relink ||
+ test "$inherit_rpath_CXX" = yes; then
+ # Fast installation is not supported
+ enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+ test "$enable_shared" = no; then
+ # Fast installation is not necessary
+ enable_fast_install=needless
+fi
+
+
+
+
+
+
+
+ fi # test -n "$compiler"
+
+ CC=$lt_save_CC
+ LDCXX=$LD
+ LD=$lt_save_LD
+ GCC=$lt_save_GCC
+ with_gnu_ld=$lt_save_with_gnu_ld
+ lt_cv_path_LDCXX=$lt_cv_path_LD
+ lt_cv_path_LD=$lt_save_path_LD
+ lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+ lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+fi # test "$_lt_caught_CXX_error" != yes
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ac_config_commands="$ac_config_commands libtool"
+
+
+
+
+# Only expand once:
+
+
+
+GPROFNG_LIBADD="-L../../libiberty -liberty"
+if test "$enable_shared" = "yes"; then
+ GPROFNG_LIBADD="-L../../libiberty/pic -liberty"
+fi
+
+
+# Figure out what compiler warnings we can enable.
+# See config/warnings.m4 for details.
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+WERROR=
+# Check whether --enable-werror-always was given.
+if test "${enable_werror_always+set}" = set; then :
+ enableval=$enable_werror_always;
+else
+ enable_werror_always=no
+fi
+
+if test $enable_werror_always = yes; then :
+ WERROR="$WERROR${WERROR:+ }-Werror"
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+gprofng_cflags=
+save_CFLAGS="$CFLAGS"
+for real_option in -Wall; do
+ # Do the check with the no- prefix removed since gcc silently
+ # accepts any -Wno-* option on purpose
+ case $real_option in
+ -Wno-*) option=-W`expr x$real_option : 'x-Wno-\(.*\)'` ;;
+ *) option=$real_option ;;
+ esac
+ as_acx_Woption=`$as_echo "acx_cv_prog_cc_warning_$option" | $as_tr_sh`
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports $option" >&5
+$as_echo_n "checking whether $CC supports $option... " >&6; }
+if eval \${$as_acx_Woption+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ CFLAGS="$option"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ eval "$as_acx_Woption=yes"
+else
+ eval "$as_acx_Woption=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+eval ac_res=\$$as_acx_Woption
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+ if test `eval 'as_val=${'$as_acx_Woption'};$as_echo "$as_val"'` = yes; then :
+ gprofng_cflags="$gprofng_cflags${gprofng_cflags:+ }$real_option"
+fi
+ done
+CFLAGS="$save_CFLAGS"
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+GPROFNG_NO_FORMAT_TRUNCATION_CFLAGS=
+save_CFLAGS="$CFLAGS"
+for real_option in -Wno-format-truncation; do
+ # Do the check with the no- prefix removed since gcc silently
+ # accepts any -Wno-* option on purpose
+ case $real_option in
+ -Wno-*) option=-W`expr x$real_option : 'x-Wno-\(.*\)'` ;;
+ *) option=$real_option ;;
+ esac
+ as_acx_Woption=`$as_echo "acx_cv_prog_cc_warning_$option" | $as_tr_sh`
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports $option" >&5
+$as_echo_n "checking whether $CC supports $option... " >&6; }
+if eval \${$as_acx_Woption+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ CFLAGS="$option"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ eval "$as_acx_Woption=yes"
+else
+ eval "$as_acx_Woption=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+eval ac_res=\$$as_acx_Woption
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+ if test `eval 'as_val=${'$as_acx_Woption'};$as_echo "$as_val"'` = yes; then :
+ GPROFNG_NO_FORMAT_TRUNCATION_CFLAGS="$GPROFNG_NO_FORMAT_TRUNCATION_CFLAGS${GPROFNG_NO_FORMAT_TRUNCATION_CFLAGS:+ }$real_option"
+fi
+ done
+CFLAGS="$save_CFLAGS"
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+GPROFNG_NO_SWITCH_CFLAGS=
+save_CFLAGS="$CFLAGS"
+for real_option in -Wno-switch; do
+ # Do the check with the no- prefix removed since gcc silently
+ # accepts any -Wno-* option on purpose
+ case $real_option in
+ -Wno-*) option=-W`expr x$real_option : 'x-Wno-\(.*\)'` ;;
+ *) option=$real_option ;;
+ esac
+ as_acx_Woption=`$as_echo "acx_cv_prog_cc_warning_$option" | $as_tr_sh`
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports $option" >&5
+$as_echo_n "checking whether $CC supports $option... " >&6; }
+if eval \${$as_acx_Woption+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ CFLAGS="$option"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ eval "$as_acx_Woption=yes"
+else
+ eval "$as_acx_Woption=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+eval ac_res=\$$as_acx_Woption
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+ if test `eval 'as_val=${'$as_acx_Woption'};$as_echo "$as_val"'` = yes; then :
+ GPROFNG_NO_SWITCH_CFLAGS="$GPROFNG_NO_SWITCH_CFLAGS${GPROFNG_NO_SWITCH_CFLAGS:+ }$real_option"
+fi
+ done
+CFLAGS="$save_CFLAGS"
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+gprofng_cppflags="-U_ASM"
+build_collector=
+build_src=
+
+# This is annoying: it means we have to pass --enable-shared explicitly to
+# get gprofng, while the configure default is supposed to be that shared libs
+# are on by default. But as long as libiberty has code like this, so must
+# we...
+
+ case "${target}" in
+ x86_64-*-linux*)
+ build_src=true
+ build_collector=true
+ ;;
+ i?86-*-linux*)
+ build_collector=true
+ build_collector=true
+ ;;
+ aarch64-*-linux*)
+ build_src=true
+ build_collector=true
+ ;;
+ esac
+ # Check whether --enable-gprofng-tools was given.
+if test "${enable_gprofng_tools+set}" = set; then :
+ enableval=$enable_gprofng_tools; build_src=$enableval
+fi
+
+
+ if test x$build_collector = xtrue; then
+ BUILD_COLLECTOR_TRUE=
+ BUILD_COLLECTOR_FALSE='#'
+else
+ BUILD_COLLECTOR_TRUE='#'
+ BUILD_COLLECTOR_FALSE=
+fi
+
+ if test x$build_src = xtrue; then
+ BUILD_SRC_TRUE=
+ BUILD_SRC_FALSE='#'
+else
+ BUILD_SRC_TRUE='#'
+ BUILD_SRC_FALSE=
+fi
+
+
+run_tests=false
+if test x$build_collector = xtrue; then
+
+
+subdirs="$subdirs libcollector"
+
+ if test x${host} = x${target}; then
+ run_tests=true
+ fi
+fi
+ if test x$run_tests = xtrue; then
+ RUN_TESTS_TRUE=
+ RUN_TESTS_FALSE='#'
+else
+ RUN_TESTS_TRUE='#'
+ RUN_TESTS_FALSE=
+fi
+
+
+
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ax_pthread_ok=no
+
+# We used to check for pthread.h first, but this fails if pthread.h
+# requires special compiler flags (e.g. on Tru64 or Sequent).
+# It gets checked for in the link test anyway.
+
+# First of all, check if the user has set any of the PTHREAD_LIBS,
+# etcetera environment variables, and if threads linking works using
+# them:
+if test "x$PTHREAD_CFLAGS$PTHREAD_LIBS" != "x"; then
+ ax_pthread_save_CC="$CC"
+ ax_pthread_save_CFLAGS="$CFLAGS"
+ ax_pthread_save_LIBS="$LIBS"
+ if test "x$PTHREAD_CC" != "x"; then :
+ CC="$PTHREAD_CC"
+fi
+ CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+ LIBS="$PTHREAD_LIBS $LIBS"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS" >&5
+$as_echo_n "checking for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char pthread_join ();
+int
+main ()
+{
+return pthread_join ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ax_pthread_ok=yes
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5
+$as_echo "$ax_pthread_ok" >&6; }
+ if test "x$ax_pthread_ok" = "xno"; then
+ PTHREAD_LIBS=""
+ PTHREAD_CFLAGS=""
+ fi
+ CC="$ax_pthread_save_CC"
+ CFLAGS="$ax_pthread_save_CFLAGS"
+ LIBS="$ax_pthread_save_LIBS"
+fi
+
+# We must check for the threads library under a number of different
+# names; the ordering is very important because some systems
+# (e.g. DEC) have both -lpthread and -lpthreads, where one of the
+# libraries is broken (non-POSIX).
+
+# Create a list of thread flags to try. Items starting with a "-" are
+# C compiler flags, and other items are library names, except for "none"
+# which indicates that we try without any flags at all, and "pthread-config"
+# which is a program returning the flags for the Pth emulation library.
+
+ax_pthread_flags="pthreads none -Kthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
+
+# The ordering *is* (sometimes) important. Some notes on the
+# individual items follow:
+
+# pthreads: AIX (must check this before -lpthread)
+# none: in case threads are in libc; should be tried before -Kthread and
+# other compiler flags to prevent continual compiler warnings
+# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
+# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads), Tru64
+# (Note: HP C rejects this with "bad form for `-t' option")
+# -pthreads: Solaris/gcc (Note: HP C also rejects)
+# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
+# doesn't hurt to check since this sometimes defines pthreads and
+# -D_REENTRANT too), HP C (must be checked before -lpthread, which
+# is present but should not be used directly; and before -mthreads,
+# because the compiler interprets this as "-mt" + "-hreads")
+# -mthreads: Mingw32/gcc, Lynx/gcc
+# pthread: Linux, etcetera
+# --thread-safe: KAI C++
+# pthread-config: use pthread-config program (for GNU Pth library)
+
+case $host_os in
+
+ freebsd*)
+
+ # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
+ # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
+
+ ax_pthread_flags="-kthread lthread $ax_pthread_flags"
+ ;;
+
+ hpux*)
+
+ # From the cc(1) man page: "[-mt] Sets various -D flags to enable
+ # multi-threading and also sets -lpthread."
+
+ ax_pthread_flags="-mt -pthread pthread $ax_pthread_flags"
+ ;;
+
+ openedition*)
+
+ # IBM z/OS requires a feature-test macro to be defined in order to
+ # enable POSIX threads at all, so give the user a hint if this is
+ # not set. (We don't define these ourselves, as they can affect
+ # other portions of the system API in unpredictable ways.)
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+# if !defined(_OPEN_THREADS) && !defined(_UNIX03_THREADS)
+ AX_PTHREAD_ZOS_MISSING
+# endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "AX_PTHREAD_ZOS_MISSING" >/dev/null 2>&1; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support." >&5
+$as_echo "$as_me: WARNING: IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support." >&2;}
+fi
+rm -f conftest*
+
+ ;;
+
+ solaris*)
+
+ # On Solaris (at least, for some versions), libc contains stubbed
+ # (non-functional) versions of the pthreads routines, so link-based
+ # tests will erroneously succeed. (N.B.: The stubs are missing
+ # pthread_cleanup_push, or rather a function called by this macro,
+ # so we could check for that, but who knows whether they'll stub
+ # that too in a future libc.) So we'll check first for the
+ # standard Solaris way of linking pthreads (-mt -lpthread).
+
+ ax_pthread_flags="-mt,pthread pthread $ax_pthread_flags"
+ ;;
+esac
+
+# GCC generally uses -pthread, or -pthreads on some platforms (e.g. SPARC)
+
+if test "x$GCC" = "xyes"; then :
+ ax_pthread_flags="-pthread -pthreads $ax_pthread_flags"
+fi
+
+# The presence of a feature test macro requesting re-entrant function
+# definitions is, on some systems, a strong hint that pthreads support is
+# correctly enabled
+
+case $host_os in
+ darwin* | hpux* | linux* | osf* | solaris*)
+ ax_pthread_check_macro="_REENTRANT"
+ ;;
+
+ aix*)
+ ax_pthread_check_macro="_THREAD_SAFE"
+ ;;
+
+ *)
+ ax_pthread_check_macro="--"
+ ;;
+esac
+if test "x$ax_pthread_check_macro" = "x--"; then :
+ ax_pthread_check_cond=0
+else
+ ax_pthread_check_cond="!defined($ax_pthread_check_macro)"
+fi
+
+# Are we compiling with Clang?
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC is Clang" >&5
+$as_echo_n "checking whether $CC is Clang... " >&6; }
+if ${ax_cv_PTHREAD_CLANG+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ax_cv_PTHREAD_CLANG=no
+ # Note that Autoconf sets GCC=yes for Clang as well as GCC
+ if test "x$GCC" = "xyes"; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+/* Note: Clang 2.7 lacks __clang_[a-z]+__ */
+# if defined(__clang__) && defined(__llvm__)
+ AX_PTHREAD_CC_IS_CLANG
+# endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "AX_PTHREAD_CC_IS_CLANG" >/dev/null 2>&1; then :
+ ax_cv_PTHREAD_CLANG=yes
+fi
+rm -f conftest*
+
+ fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_CLANG" >&5
+$as_echo "$ax_cv_PTHREAD_CLANG" >&6; }
+ax_pthread_clang="$ax_cv_PTHREAD_CLANG"
+
+ax_pthread_clang_warning=no
+
+# Clang needs special handling, because older versions handle the -pthread
+# option in a rather... idiosyncratic way
+
+if test "x$ax_pthread_clang" = "xyes"; then
+
+ # Clang takes -pthread; it has never supported any other flag
+
+ # (Note 1: This will need to be revisited if a system that Clang
+ # supports has POSIX threads in a separate library. This tends not
+ # to be the way of modern systems, but it's conceivable.)
+
+ # (Note 2: On some systems, notably Darwin, -pthread is not needed
+ # to get POSIX threads support; the API is always present and
+ # active. We could reasonably leave PTHREAD_CFLAGS empty. But
+ # -pthread does define _REENTRANT, and while the Darwin headers
+ # ignore this macro, third-party headers might not.)
+
+ PTHREAD_CFLAGS="-pthread"
+ PTHREAD_LIBS=
+
+ ax_pthread_ok=yes
+
+ # However, older versions of Clang make a point of warning the user
+ # that, in an invocation where only linking and no compilation is
+ # taking place, the -pthread option has no effect ("argument unused
+ # during compilation"). They expect -pthread to be passed in only
+ # when source code is being compiled.
+ #
+ # Problem is, this is at odds with the way Automake and most other
+ # C build frameworks function, which is that the same flags used in
+ # compilation (CFLAGS) are also used in linking. Many systems
+ # supported by AX_PTHREAD require exactly this for POSIX threads
+ # support, and in fact it is often not straightforward to specify a
+ # flag that is used only in the compilation phase and not in
+ # linking. Such a scenario is extremely rare in practice.
+ #
+ # Even though use of the -pthread flag in linking would only print
+ # a warning, this can be a nuisance for well-run software projects
+ # that build with -Werror. So if the active version of Clang has
+ # this misfeature, we search for an option to squash it.
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether Clang needs flag to prevent \"argument unused\" warning when linking with -pthread" >&5
+$as_echo_n "checking whether Clang needs flag to prevent \"argument unused\" warning when linking with -pthread... " >&6; }
+if ${ax_cv_PTHREAD_CLANG_NO_WARN_FLAG+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ax_cv_PTHREAD_CLANG_NO_WARN_FLAG=unknown
+ # Create an alternate version of $ac_link that compiles and
+ # links in two steps (.c -> .o, .o -> exe) instead of one
+ # (.c -> exe), because the warning occurs only in the second
+ # step
+ ax_pthread_save_ac_link="$ac_link"
+ ax_pthread_sed='s/conftest\.\$ac_ext/conftest.$ac_objext/g'
+ ax_pthread_link_step=`$as_echo "$ac_link" | sed "$ax_pthread_sed"`
+ ax_pthread_2step_ac_link="($ac_compile) && (echo ==== >&5) && ($ax_pthread_link_step)"
+ ax_pthread_save_CFLAGS="$CFLAGS"
+ for ax_pthread_try in '' -Qunused-arguments -Wno-unused-command-line-argument unknown; do
+ if test "x$ax_pthread_try" = "xunknown"; then :
+ break
+fi
+ CFLAGS="-Werror -Wunknown-warning-option $ax_pthread_try -pthread $ax_pthread_save_CFLAGS"
+ ac_link="$ax_pthread_save_ac_link"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int main(void){return 0;}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_link="$ax_pthread_2step_ac_link"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int main(void){return 0;}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ break
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ done
+ ac_link="$ax_pthread_save_ac_link"
+ CFLAGS="$ax_pthread_save_CFLAGS"
+ if test "x$ax_pthread_try" = "x"; then :
+ ax_pthread_try=no
+fi
+ ax_cv_PTHREAD_CLANG_NO_WARN_FLAG="$ax_pthread_try"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" >&5
+$as_echo "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" >&6; }
+
+ case "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" in
+ no | unknown) ;;
+ *) PTHREAD_CFLAGS="$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG $PTHREAD_CFLAGS" ;;
+ esac
+
+fi # $ax_pthread_clang = yes
+
+if test "x$ax_pthread_ok" = "xno"; then
+for ax_pthread_try_flag in $ax_pthread_flags; do
+
+ case $ax_pthread_try_flag in
+ none)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work without any flags" >&5
+$as_echo_n "checking whether pthreads work without any flags... " >&6; }
+ ;;
+
+ -mt,pthread)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with -mt -lpthread" >&5
+$as_echo_n "checking whether pthreads work with -mt -lpthread... " >&6; }
+ PTHREAD_CFLAGS="-mt"
+ PTHREAD_LIBS="-lpthread"
+ ;;
+
+ -*)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with $ax_pthread_try_flag" >&5
+$as_echo_n "checking whether pthreads work with $ax_pthread_try_flag... " >&6; }
+ PTHREAD_CFLAGS="$ax_pthread_try_flag"
+ ;;
+
+ pthread-config)
+ # Extract the first word of "pthread-config", so it can be a program name with args.
+set dummy pthread-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ax_pthread_config+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ax_pthread_config"; then
+ ac_cv_prog_ax_pthread_config="$ax_pthread_config" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ax_pthread_config="yes"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_prog_ax_pthread_config" && ac_cv_prog_ax_pthread_config="no"
+fi
+fi
+ax_pthread_config=$ac_cv_prog_ax_pthread_config
+if test -n "$ax_pthread_config"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_config" >&5
+$as_echo "$ax_pthread_config" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ if test "x$ax_pthread_config" = "xno"; then :
+ continue
+fi
+ PTHREAD_CFLAGS="`pthread-config --cflags`"
+ PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
+ ;;
+
+ *)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the pthreads library -l$ax_pthread_try_flag" >&5
+$as_echo_n "checking for the pthreads library -l$ax_pthread_try_flag... " >&6; }
+ PTHREAD_LIBS="-l$ax_pthread_try_flag"
+ ;;
+ esac
+
+ ax_pthread_save_CFLAGS="$CFLAGS"
+ ax_pthread_save_LIBS="$LIBS"
+ CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+ LIBS="$PTHREAD_LIBS $LIBS"
+
+ # Check for various functions. We must include pthread.h,
+ # since some functions may be macros. (On the Sequent, we
+ # need a special flag -Kthread to make this header compile.)
+ # We check for pthread_join because it is in -lpthread on IRIX
+ # while pthread_create is in libc. We check for pthread_attr_init
+ # due to DEC craziness with -lpthreads. We check for
+ # pthread_cleanup_push because it is one of the few pthread
+ # functions on Solaris that doesn't have a non-functional libc stub.
+ # We try pthread_create on general principles.
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <pthread.h>
+# if $ax_pthread_check_cond
+# error "$ax_pthread_check_macro must be defined"
+# endif
+ static void routine(void *a) { a = 0; }
+ static void *start_routine(void *a) { return a; }
+int
+main ()
+{
+pthread_t th; pthread_attr_t attr;
+ pthread_create(&th, 0, start_routine, 0);
+ pthread_join(th, 0);
+ pthread_attr_init(&attr);
+ pthread_cleanup_push(routine, 0);
+ pthread_cleanup_pop(0) /* ; */
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ax_pthread_ok=yes
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+
+ CFLAGS="$ax_pthread_save_CFLAGS"
+ LIBS="$ax_pthread_save_LIBS"
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5
+$as_echo "$ax_pthread_ok" >&6; }
+ if test "x$ax_pthread_ok" = "xyes"; then :
+ break
+fi
+
+ PTHREAD_LIBS=""
+ PTHREAD_CFLAGS=""
+done
+fi
+
+# Various other checks:
+if test "x$ax_pthread_ok" = "xyes"; then
+ ax_pthread_save_CFLAGS="$CFLAGS"
+ ax_pthread_save_LIBS="$LIBS"
+ CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+ LIBS="$PTHREAD_LIBS $LIBS"
+
+ # Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for joinable pthread attribute" >&5
+$as_echo_n "checking for joinable pthread attribute... " >&6; }
+if ${ax_cv_PTHREAD_JOINABLE_ATTR+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ax_cv_PTHREAD_JOINABLE_ATTR=unknown
+ for ax_pthread_attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <pthread.h>
+int
+main ()
+{
+int attr = $ax_pthread_attr; return attr /* ; */
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ax_cv_PTHREAD_JOINABLE_ATTR=$ax_pthread_attr; break
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ done
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_JOINABLE_ATTR" >&5
+$as_echo "$ax_cv_PTHREAD_JOINABLE_ATTR" >&6; }
+ if test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xunknown" && \
+ test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xPTHREAD_CREATE_JOINABLE" && \
+ test "x$ax_pthread_joinable_attr_defined" != "xyes"; then :
+
+cat >>confdefs.h <<_ACEOF
+#define PTHREAD_CREATE_JOINABLE $ax_cv_PTHREAD_JOINABLE_ATTR
+_ACEOF
+
+ ax_pthread_joinable_attr_defined=yes
+
+fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether more special flags are required for pthreads" >&5
+$as_echo_n "checking whether more special flags are required for pthreads... " >&6; }
+if ${ax_cv_PTHREAD_SPECIAL_FLAGS+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ax_cv_PTHREAD_SPECIAL_FLAGS=no
+ case $host_os in
+ solaris*)
+ ax_cv_PTHREAD_SPECIAL_FLAGS="-D_POSIX_PTHREAD_SEMANTICS"
+ ;;
+ esac
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_SPECIAL_FLAGS" >&5
+$as_echo "$ax_cv_PTHREAD_SPECIAL_FLAGS" >&6; }
+ if test "x$ax_cv_PTHREAD_SPECIAL_FLAGS" != "xno" && \
+ test "x$ax_pthread_special_flags_added" != "xyes"; then :
+ PTHREAD_CFLAGS="$ax_cv_PTHREAD_SPECIAL_FLAGS $PTHREAD_CFLAGS"
+ ax_pthread_special_flags_added=yes
+fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PTHREAD_PRIO_INHERIT" >&5
+$as_echo_n "checking for PTHREAD_PRIO_INHERIT... " >&6; }
+if ${ax_cv_PTHREAD_PRIO_INHERIT+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <pthread.h>
+int
+main ()
+{
+int i = PTHREAD_PRIO_INHERIT;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ax_cv_PTHREAD_PRIO_INHERIT=yes
+else
+ ax_cv_PTHREAD_PRIO_INHERIT=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_PRIO_INHERIT" >&5
+$as_echo "$ax_cv_PTHREAD_PRIO_INHERIT" >&6; }
+ if test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes" && \
+ test "x$ax_pthread_prio_inherit_defined" != "xyes"; then :
+
+$as_echo "#define HAVE_PTHREAD_PRIO_INHERIT 1" >>confdefs.h
+
+ ax_pthread_prio_inherit_defined=yes
+
+fi
+
+ CFLAGS="$ax_pthread_save_CFLAGS"
+ LIBS="$ax_pthread_save_LIBS"
+
+ # More AIX lossage: compile with *_r variant
+ if test "x$GCC" != "xyes"; then
+ case $host_os in
+ aix*)
+ case "x/$CC" in #(
+ x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6) :
+ #handle absolute path differently from PATH based program lookup
+ case "x$CC" in #(
+ x/*) :
+ if as_fn_executable_p ${CC}_r; then :
+ PTHREAD_CC="${CC}_r"
+fi ;; #(
+ *) :
+ for ac_prog in ${CC}_r
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_PTHREAD_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$PTHREAD_CC"; then
+ ac_cv_prog_PTHREAD_CC="$PTHREAD_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_PTHREAD_CC="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+PTHREAD_CC=$ac_cv_prog_PTHREAD_CC
+if test -n "$PTHREAD_CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CC" >&5
+$as_echo "$PTHREAD_CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$PTHREAD_CC" && break
+done
+test -n "$PTHREAD_CC" || PTHREAD_CC="$CC"
+ ;;
+esac ;; #(
+ *) :
+ ;;
+esac
+ ;;
+ esac
+ fi
+fi
+
+test -n "$PTHREAD_CC" || PTHREAD_CC="$CC"
+
+
+
+
+
+# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
+if test "x$ax_pthread_ok" = "xyes"; then
+
+$as_echo "#define HAVE_PTHREAD 1" >>confdefs.h
+
+ :
+else
+ ax_pthread_ok=no
+
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+# Specify a location for JDK
+enable_gprofng_jp=
+jdk_inc=
+
+# Check whether --with-jdk was given.
+if test "${with_jdk+set}" = set; then :
+ withval=$with_jdk;
+fi
+
+
+if test "x$with_jdk" != x; then
+ jdk_inc="-I$with_jdk/include -I$with_jdk/include/linux"
+ enable_gprofng_jp=yes
+else
+ # Extract the first word of "javac", so it can be a program name with args.
+set dummy javac; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_JAVAC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $JAVAC in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_JAVAC="$JAVAC" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_JAVAC="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_path_JAVAC" && ac_cv_path_JAVAC="javac"
+ ;;
+esac
+fi
+JAVAC=$ac_cv_path_JAVAC
+if test -n "$JAVAC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JAVAC" >&5
+$as_echo "$JAVAC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ if test -f $JAVAC; then
+ x=`readlink -f $JAVAC`
+ x=`dirname $x`
+ x=`dirname $x`
+ if ! test -f $x/include/jni.h; then
+ x=`dirname $x`
+ fi
+ if test -f $x/include/jni.h; then
+ jdk_inc="-I$x/include -I$x/include/linux"
+ enable_gprofng_jp=yes
+ fi
+ fi
+fi
+if test "x$enable_gprofng_jp" = x; then
+ # Extract the first word of "java", so it can be a program name with args.
+set dummy java; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_JAVA+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $JAVA in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_JAVA="$JAVA" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_JAVA="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_path_JAVA" && ac_cv_path_JAVA="java"
+ ;;
+esac
+fi
+JAVA=$ac_cv_path_JAVA
+if test -n "$JAVA"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JAVA" >&5
+$as_echo "$JAVA" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ if test -f $JAVA; then
+ x=`readlink -f $JAVA`
+ x=`dirname $x`
+ x=`dirname $x`
+ if ! test -f $x/include/jni.h; then
+ x=`dirname $x`
+ fi
+ if test -f $x/include/jni.h; then
+ jdk_inc="-I$x/include -I$x/include/linux"
+ enable_gprofng_jp=yes
+ fi
+ fi
+fi
+if test "x$enable_gprofng_jp" = x; then
+ ac_fn_c_check_header_compile "$LINENO" "jni.h" "ac_cv_header_jni_h" "
+"
+if test "x$ac_cv_header_jni_h" = xyes; then :
+ enable_gprofng_jp=yes
+fi
+
+
+fi
+GPROFNG_BROKEN_JAVAC=no
+if test "x$enable_gprofng_jp" = x; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Cannot find the JDK include directory.
+ gprofng will be build without support for profiling Java applications.
+ Use --with-jdk=PATH to specify directory for the installed JDK" >&5
+$as_echo "$as_me: WARNING: Cannot find the JDK include directory.
+ gprofng will be build without support for profiling Java applications.
+ Use --with-jdk=PATH to specify directory for the installed JDK" >&2;}
+else
+
+$as_echo "#define GPROFNG_JAVA_PROFILING 1" >>confdefs.h
+
+ if test "x$JAVAC" != x; then
+ cat > configtest.java << EOF
+class Simple{
+ public static void main(String args){
+ System.out.println("Hello Java");
+ }
+}
+EOF
+ if { ac_try='$JAVAC conftest.java &5 2>&1'
+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then
+ GPROFNG_BROKEN_JAVAC=no
+ else
+ GPROFNG_BROKEN_JAVAC=yes
+ fi
+ rm -f configtest.*
+ fi
+fi
+
+
+
+DEBUG=
+ # Check whether --enable-gprofng-debug was given.
+if test "${enable_gprofng_debug+set}" = set; then :
+ enableval=$enable_gprofng_debug;
+ case "$enableval" in
+ yes|no) ;;
+ *) as_fn_error $? "Argument to enable/disable gprofng-debug must be yes or no" "$LINENO" 5 ;;
+ esac
+
+else
+ enable_gprofng_debug=no
+fi
+
+
+if test "${enable_gprofng_debug}" = yes; then
+
+$as_echo "#define DEBUG 1" >>confdefs.h
+
+fi
+
+# Check if linker supports --as-needed and --no-as-needed options.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking linker --as-needed support" >&5
+$as_echo_n "checking linker --as-needed support... " >&6; }
+if ${bfd_cv_ld_as_needed+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ bfd_cv_ld_as_needed=no
+ if $LD --help 2>/dev/null | grep as-needed > /dev/null; then
+ bfd_cv_ld_as_needed=yes
+ fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_ld_as_needed" >&5
+$as_echo "$bfd_cv_ld_as_needed" >&6; }
+
+no_as_needed=
+if test x"$bfd_cv_ld_as_needed" = xyes; then
+ no_as_needed='-Wl,--no-as-needed'
+fi
+
+# Extract the first word of "expect", so it can be a program name with args.
+set dummy expect; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_EXPECT+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $EXPECT in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_EXPECT="$EXPECT" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_EXPECT="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+EXPECT=$ac_cv_path_EXPECT
+if test -n "$EXPECT"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $EXPECT" >&5
+$as_echo "$EXPECT" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Tcl supporting try/catch" >&5
+$as_echo_n "checking for Tcl supporting try/catch... " >&6; }
+if ${ac_cv_libctf_tcl_try+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_cv_libctf_tcl_try=`if test -z $EXPECT; then echo no; else $EXPECT << EOF
+if [llength [info commands try]] then { puts yes } else { puts no }
+EOF
+fi`
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_libctf_tcl_try" >&5
+$as_echo "$ac_cv_libctf_tcl_try" >&6; }
+ if test "${ac_cv_libctf_tcl_try}" = yes; then
+ TCL_TRY_TRUE=
+ TCL_TRY_FALSE='#'
+else
+ TCL_TRY_TRUE='#'
+ TCL_TRY_FALSE=
+fi
+
+
+
+ # Use the system's zlib library.
+ zlibdir="-L\$(top_builddir)/../zlib"
+ zlibinc="-I\$(top_srcdir)/../zlib"
+
+# Check whether --with-system-zlib was given.
+if test "${with_system_zlib+set}" = set; then :
+ withval=$with_system_zlib; if test x$with_system_zlib = xyes ; then
+ zlibdir=
+ zlibinc=
+ fi
+
+fi
+
+
+
+
+
+# Generate manpages, if possible.
+if test $cross_compiling = no; then
+
+HELP2MAN=${HELP2MAN-"${am_missing_run}help2man"}
+
+ build_man=true
+else
+ build_man=false
+fi
+ if test x$build_man = xtrue; then
+ BUILD_MAN_TRUE=
+ BUILD_MAN_FALSE='#'
+else
+ BUILD_MAN_TRUE='#'
+ BUILD_MAN_FALSE=
+fi
+
+
+LD_NO_AS_NEEDED=${no_as_needed}
+
+GPROFNG_CFLAGS=${gprofng_cflags}
+
+
+
+GPROFNG_CPPFLAGS=${gprofng_cppflags}
+
+
+ac_fn_c_check_decl "$LINENO" "basename" "ac_cv_have_decl_basename" "$ac_includes_default"
+if test "x$ac_cv_have_decl_basename" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_BASENAME $ac_have_decl
+_ACEOF
+
+for ac_func in clock_gettime strsignal
+do :
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+clock_gettime_link=
+# At least for glibc, clock_gettime is in librt. But don't
+# pull that in if it still doesn't give us the function we want. This
+# test is copied from libgomp, and modified to not link in -lrt as
+# we're using this for test timing only.
+if test "$ac_cv_func_clock_gettime" = no; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clock_gettime in -lrt" >&5
+$as_echo_n "checking for clock_gettime in -lrt... " >&6; }
+if ${ac_cv_lib_rt_clock_gettime+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lrt $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char clock_gettime ();
+int
+main ()
+{
+return clock_gettime ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_rt_clock_gettime=yes
+else
+ ac_cv_lib_rt_clock_gettime=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_clock_gettime" >&5
+$as_echo "$ac_cv_lib_rt_clock_gettime" >&6; }
+if test "x$ac_cv_lib_rt_clock_gettime" = xyes; then :
+ CLOCK_GETTIME_LINK=-lrt
+
+$as_echo "#define HAVE_CLOCK_GETTIME 1" >>confdefs.h
+
+fi
+
+fi
+
+
+
+
+ac_config_files="$ac_config_files Makefile src/Makefile gp-display-html/Makefile doc/Makefile"
+
+ac_config_headers="$ac_config_headers config.h:common/config.h.in"
+
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems. If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, we kill variables containing newlines.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(
+ for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+ *) { eval $ac_var=; unset $ac_var;} ;;
+ esac ;;
+ esac
+ done
+
+ (set) 2>&1 |
+ case $as_nl`(ac_space=' '; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
+ # `set' does not quote correctly, so add quotes: double-quote
+ # substitution turns \\\\ into \\, and sed turns \\ into \.
+ sed -n \
+ "s/'/'\\\\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+ ;; #(
+ *)
+ # `set' quotes correctly as required by POSIX, so do not add quotes.
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ ;;
+ esac |
+ sort
+) |
+ sed '
+ /^ac_cv_env_/b end
+ t clear
+ :clear
+ s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+ t end
+ s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+ :end' >>confcache
+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+ if test -w "$cache_file"; then
+ if test "x$cache_file" != "x/dev/null"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+$as_echo "$as_me: updating cache $cache_file" >&6;}
+ if test ! -f "$cache_file" || test -h "$cache_file"; then
+ cat confcache >"$cache_file"
+ else
+ case $cache_file in #(
+ */* | ?:*)
+ mv -f confcache "$cache_file"$$ &&
+ mv -f "$cache_file"$$ "$cache_file" ;; #(
+ *)
+ mv -f confcache "$cache_file" ;;
+ esac
+ fi
+ fi
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+ fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+DEFS=-DHAVE_CONFIG_H
+
+ac_libobjs=
+ac_ltlibobjs=
+U=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+ # 1. Remove the extension, and $U if already installed.
+ ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+ ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+ # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
+ # will be set to the directory where LIBOBJS objects are built.
+ as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+ as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5
+$as_echo_n "checking that generated files are newer than configure... " >&6; }
+ if test -n "$am_sleep_pid"; then
+ # Hide warnings about reused PIDs.
+ wait $am_sleep_pid 2>/dev/null
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5
+$as_echo "done" >&6; }
+ if test -n "$EXEEXT"; then
+ am__EXEEXT_TRUE=
+ am__EXEEXT_FALSE='#'
+else
+ am__EXEEXT_TRUE='#'
+ am__EXEEXT_FALSE=
+fi
+
+if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
+ as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+ as_fn_error $? "conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+ as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+ as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
+ as_fn_error $? "conditional \"am__fastdepCXX\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${BUILD_COLLECTOR_TRUE}" && test -z "${BUILD_COLLECTOR_FALSE}"; then
+ as_fn_error $? "conditional \"BUILD_COLLECTOR\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${BUILD_SRC_TRUE}" && test -z "${BUILD_SRC_FALSE}"; then
+ as_fn_error $? "conditional \"BUILD_SRC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${RUN_TESTS_TRUE}" && test -z "${RUN_TESTS_FALSE}"; then
+ as_fn_error $? "conditional \"RUN_TESTS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${TCL_TRY_TRUE}" && test -z "${TCL_TRY_FALSE}"; then
+ as_fn_error $? "conditional \"TCL_TRY\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${BUILD_MAN_TRUE}" && test -z "${BUILD_MAN_FALSE}"; then
+ as_fn_error $? "conditional \"BUILD_MAN\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+
+: "${CONFIG_STATUS=./config.status}"
+ac_write_fail=0
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+as_write_fail=0
+cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='print -r --'
+ as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='printf %s\n'
+ as_echo_n='printf %s'
+else
+ if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+ as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+ as_echo_n='/usr/ucb/echo -n'
+ else
+ as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+ as_echo_n_body='eval
+ arg=$1;
+ case $arg in #(
+ *"$as_nl"*)
+ expr "X$arg" : "X\\(.*\\)$as_nl";
+ arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+ esac;
+ expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+ '
+ export as_echo_n_body
+ as_echo_n='sh -c $as_echo_n_body as_echo'
+ fi
+ export as_echo_body
+ as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" "" $as_nl"
+
+# Find who we are. Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there. '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+ as_status=$1; test $as_status -eq 0 && as_status=1
+ if test "$4"; then
+ as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ fi
+ $as_echo "$as_me: error: $2" >&2
+ as_fn_exit $as_status
+} # as_fn_error
+
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+ return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+ set +e
+ as_fn_set_status $1
+ exit $1
+} # as_fn_exit
+
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+ { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+ eval 'as_fn_append ()
+ {
+ eval $1+=\$2
+ }'
+else
+ as_fn_append ()
+ {
+ eval $1=\$$1\$2
+ }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+ eval 'as_fn_arith ()
+ {
+ as_val=$(( $* ))
+ }'
+else
+ as_fn_arith ()
+ {
+ as_val=`expr "$@" || test $? -eq 1`
+ }
+fi # as_fn_arith
+
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+ case `echo 'xy\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ xy) ECHO_C='\c';;
+ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
+ ECHO_T=' ';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -pR'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -pR'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -pR'
+ fi
+else
+ as_ln_s='cp -pR'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || eval $as_mkdir_p || {
+ as_dirs=
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
+ done
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p='mkdir -p "$as_dir"'
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+ test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+## ----------------------------------- ##
+## Main body of $CONFIG_STATUS script. ##
+## ----------------------------------- ##
+_ASEOF
+test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# Save the log message, to keep $0 and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.
+ac_log="
+This file was extended by gprofng $as_me 2.38.50, which was
+generated by GNU Autoconf 2.69. Invocation command line was
+
+ CONFIG_FILES = $CONFIG_FILES
+ CONFIG_HEADERS = $CONFIG_HEADERS
+ CONFIG_LINKS = $CONFIG_LINKS
+ CONFIG_COMMANDS = $CONFIG_COMMANDS
+ $ $0 $@
+
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
+_ACEOF
+
+case $ac_config_files in *"
+"*) set x $ac_config_files; shift; ac_config_files=$*;;
+esac
+
+case $ac_config_headers in *"
+"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
+esac
+
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+# Files that config.status was made for.
+config_files="$ac_config_files"
+config_headers="$ac_config_headers"
+config_commands="$ac_config_commands"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ac_cs_usage="\
+\`$as_me' instantiates files and other configuration actions
+from templates according to the current configuration. Unless the files
+and actions are specified as TAGs, all are instantiated by default.
+
+Usage: $0 [OPTION]... [TAG]...
+
+ -h, --help print this help, then exit
+ -V, --version print version number and configuration settings, then exit
+ --config print configuration, then exit
+ -q, --quiet, --silent
+ do not print progress messages
+ -d, --debug don't remove temporary files
+ --recheck update $as_me by reconfiguring in the same conditions
+ --file=FILE[:TEMPLATE]
+ instantiate the configuration file FILE
+ --header=FILE[:TEMPLATE]
+ instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Configuration commands:
+$config_commands
+
+Report bugs to the package provider."
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
+ac_cs_version="\\
+gprofng config.status 2.38.50
+configured by $0, generated by GNU Autoconf 2.69,
+ with options \\"\$ac_cs_config\\"
+
+Copyright (C) 2012 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+INSTALL='$INSTALL'
+MKDIR_P='$MKDIR_P'
+AWK='$AWK'
+test -n "\$AWK" || AWK=awk
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# The default lists apply if the user does not specify any file.
+ac_need_defaults=:
+while test $# != 0
+do
+ case $1 in
+ --*=?*)
+ ac_option=`expr "X$1" : 'X\([^=]*\)='`
+ ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+ ac_shift=:
+ ;;
+ --*=)
+ ac_option=`expr "X$1" : 'X\([^=]*\)='`
+ ac_optarg=
+ ac_shift=:
+ ;;
+ *)
+ ac_option=$1
+ ac_optarg=$2
+ ac_shift=shift
+ ;;
+ esac
+
+ case $ac_option in
+ # Handling of the options.
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+ ac_cs_recheck=: ;;
+ --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+ $as_echo "$ac_cs_version"; exit ;;
+ --config | --confi | --conf | --con | --co | --c )
+ $as_echo "$ac_cs_config"; exit ;;
+ --debug | --debu | --deb | --de | --d | -d )
+ debug=: ;;
+ --file | --fil | --fi | --f )
+ $ac_shift
+ case $ac_optarg in
+ *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ '') as_fn_error $? "missing file argument" ;;
+ esac
+ as_fn_append CONFIG_FILES " '$ac_optarg'"
+ ac_need_defaults=false;;
+ --header | --heade | --head | --hea )
+ $ac_shift
+ case $ac_optarg in
+ *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ as_fn_append CONFIG_HEADERS " '$ac_optarg'"
+ ac_need_defaults=false;;
+ --he | --h)
+ # Conflict between --help and --header
+ as_fn_error $? "ambiguous option: \`$1'
+Try \`$0 --help' for more information.";;
+ --help | --hel | -h )
+ $as_echo "$ac_cs_usage"; exit ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil | --si | --s)
+ ac_cs_silent=: ;;
+
+ # This is an error.
+ -*) as_fn_error $? "unrecognized option: \`$1'
+Try \`$0 --help' for more information." ;;
+
+ *) as_fn_append ac_config_targets " $1"
+ ac_need_defaults=false ;;
+
+ esac
+ shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+ exec 6>/dev/null
+ ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+if \$ac_cs_recheck; then
+ set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+ shift
+ \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+ CONFIG_SHELL='$SHELL'
+ export CONFIG_SHELL
+ exec "\$@"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+exec 5>>config.log
+{
+ echo
+ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+ $as_echo "$ac_log"
+} >&5
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+#
+# INIT-COMMANDS
+#
+AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`'
+macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`'
+macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`'
+enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`'
+pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`'
+enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`'
+SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`'
+ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`'
+host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`'
+host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`'
+host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`'
+build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`'
+build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`'
+build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`'
+SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`'
+Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`'
+GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`'
+EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`'
+FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`'
+LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`'
+NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`'
+LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`'
+max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`'
+ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`'
+exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`'
+lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`'
+lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`'
+lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`'
+reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`'
+reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`'
+OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`'
+deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`'
+file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`'
+AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`'
+AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`'
+STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`'
+RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`'
+old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
+old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`'
+lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`'
+CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`'
+CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`'
+compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`'
+GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`'
+objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`'
+MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`'
+need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`'
+DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`'
+NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`'
+LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`'
+OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`'
+OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`'
+libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`'
+shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`'
+extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
+archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`'
+export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`'
+whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`'
+compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`'
+old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
+archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`'
+archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`'
+module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`'
+module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`'
+with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`'
+allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`'
+no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_ld='`$ECHO "$hardcode_libdir_flag_spec_ld" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`'
+hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`'
+hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`'
+hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`'
+hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`'
+inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`'
+link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`'
+fix_srcfile_path='`$ECHO "$fix_srcfile_path" | $SED "$delay_single_quote_subst"`'
+always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`'
+export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`'
+exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`'
+include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`'
+prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`'
+file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`'
+variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`'
+need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`'
+need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`'
+version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`'
+runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`'
+shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`'
+shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`'
+libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`'
+library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`'
+soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`'
+install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`'
+postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
+finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`'
+finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`'
+hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`'
+sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`'
+sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`'
+hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`'
+enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`'
+enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`'
+enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`'
+old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`'
+striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_dirs='`$ECHO "$compiler_lib_search_dirs" | $SED "$delay_single_quote_subst"`'
+predep_objects='`$ECHO "$predep_objects" | $SED "$delay_single_quote_subst"`'
+postdep_objects='`$ECHO "$postdep_objects" | $SED "$delay_single_quote_subst"`'
+predeps='`$ECHO "$predeps" | $SED "$delay_single_quote_subst"`'
+postdeps='`$ECHO "$postdeps" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_path='`$ECHO "$compiler_lib_search_path" | $SED "$delay_single_quote_subst"`'
+LD_CXX='`$ECHO "$LD_CXX" | $SED "$delay_single_quote_subst"`'
+reload_flag_CXX='`$ECHO "$reload_flag_CXX" | $SED "$delay_single_quote_subst"`'
+reload_cmds_CXX='`$ECHO "$reload_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`'
+GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_pic_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_static_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $SED "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $SED "$delay_single_quote_subst"`'
+archive_cmds_need_lc_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $SED "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes_CXX='`$ECHO "$enable_shared_with_static_runtimes_CXX" | $SED "$delay_single_quote_subst"`'
+export_dynamic_flag_spec_CXX='`$ECHO "$export_dynamic_flag_spec_CXX" | $SED "$delay_single_quote_subst"`'
+whole_archive_flag_spec_CXX='`$ECHO "$whole_archive_flag_spec_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_needs_object_CXX='`$ECHO "$compiler_needs_object_CXX" | $SED "$delay_single_quote_subst"`'
+old_archive_from_new_cmds_CXX='`$ECHO "$old_archive_from_new_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds_CXX='`$ECHO "$old_archive_from_expsyms_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+archive_cmds_CXX='`$ECHO "$archive_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+archive_expsym_cmds_CXX='`$ECHO "$archive_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+module_cmds_CXX='`$ECHO "$module_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+module_expsym_cmds_CXX='`$ECHO "$module_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+with_gnu_ld_CXX='`$ECHO "$with_gnu_ld_CXX" | $SED "$delay_single_quote_subst"`'
+allow_undefined_flag_CXX='`$ECHO "$allow_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`'
+no_undefined_flag_CXX='`$ECHO "$no_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_CXX='`$ECHO "$hardcode_libdir_flag_spec_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_ld_CXX='`$ECHO "$hardcode_libdir_flag_spec_ld_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_separator_CXX='`$ECHO "$hardcode_libdir_separator_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_CXX='`$ECHO "$hardcode_direct_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_absolute_CXX='`$ECHO "$hardcode_direct_absolute_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_minus_L_CXX='`$ECHO "$hardcode_minus_L_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`'
+inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`'
+link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`'
+fix_srcfile_path_CXX='`$ECHO "$fix_srcfile_path_CXX" | $SED "$delay_single_quote_subst"`'
+always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`'
+export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`'
+include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`'
+prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`'
+predep_objects_CXX='`$ECHO "$predep_objects_CXX" | $SED "$delay_single_quote_subst"`'
+postdep_objects_CXX='`$ECHO "$postdep_objects_CXX" | $SED "$delay_single_quote_subst"`'
+predeps_CXX='`$ECHO "$predeps_CXX" | $SED "$delay_single_quote_subst"`'
+postdeps_CXX='`$ECHO "$postdeps_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_path_CXX='`$ECHO "$compiler_lib_search_path_CXX" | $SED "$delay_single_quote_subst"`'
+
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+ eval 'cat <<_LTECHO_EOF
+\$1
+_LTECHO_EOF'
+}
+
+# Quote evaled strings.
+for var in SHELL \
+ECHO \
+SED \
+GREP \
+EGREP \
+FGREP \
+LD \
+NM \
+LN_S \
+lt_SP2NL \
+lt_NL2SP \
+reload_flag \
+OBJDUMP \
+deplibs_check_method \
+file_magic_cmd \
+AR \
+AR_FLAGS \
+STRIP \
+RANLIB \
+CC \
+CFLAGS \
+compiler \
+lt_cv_sys_global_symbol_pipe \
+lt_cv_sys_global_symbol_to_cdecl \
+lt_cv_sys_global_symbol_to_c_name_address \
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
+lt_prog_compiler_no_builtin_flag \
+lt_prog_compiler_wl \
+lt_prog_compiler_pic \
+lt_prog_compiler_static \
+lt_cv_prog_compiler_c_o \
+need_locks \
+DSYMUTIL \
+NMEDIT \
+LIPO \
+OTOOL \
+OTOOL64 \
+shrext_cmds \
+export_dynamic_flag_spec \
+whole_archive_flag_spec \
+compiler_needs_object \
+with_gnu_ld \
+allow_undefined_flag \
+no_undefined_flag \
+hardcode_libdir_flag_spec \
+hardcode_libdir_flag_spec_ld \
+hardcode_libdir_separator \
+fix_srcfile_path \
+exclude_expsyms \
+include_expsyms \
+file_list_spec \
+variables_saved_for_relink \
+libname_spec \
+library_names_spec \
+soname_spec \
+install_override_mode \
+finish_eval \
+old_striplib \
+striplib \
+compiler_lib_search_dirs \
+predep_objects \
+postdep_objects \
+predeps \
+postdeps \
+compiler_lib_search_path \
+LD_CXX \
+reload_flag_CXX \
+compiler_CXX \
+lt_prog_compiler_no_builtin_flag_CXX \
+lt_prog_compiler_wl_CXX \
+lt_prog_compiler_pic_CXX \
+lt_prog_compiler_static_CXX \
+lt_cv_prog_compiler_c_o_CXX \
+export_dynamic_flag_spec_CXX \
+whole_archive_flag_spec_CXX \
+compiler_needs_object_CXX \
+with_gnu_ld_CXX \
+allow_undefined_flag_CXX \
+no_undefined_flag_CXX \
+hardcode_libdir_flag_spec_CXX \
+hardcode_libdir_flag_spec_ld_CXX \
+hardcode_libdir_separator_CXX \
+fix_srcfile_path_CXX \
+exclude_expsyms_CXX \
+include_expsyms_CXX \
+file_list_spec_CXX \
+compiler_lib_search_dirs_CXX \
+predep_objects_CXX \
+postdep_objects_CXX \
+predeps_CXX \
+postdeps_CXX \
+compiler_lib_search_path_CXX; do
+ case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+ *[\\\\\\\`\\"\\\$]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+ ;;
+ *)
+ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+ ;;
+ esac
+done
+
+# Double-quote double-evaled strings.
+for var in reload_cmds \
+old_postinstall_cmds \
+old_postuninstall_cmds \
+old_archive_cmds \
+extract_expsyms_cmds \
+old_archive_from_new_cmds \
+old_archive_from_expsyms_cmds \
+archive_cmds \
+archive_expsym_cmds \
+module_cmds \
+module_expsym_cmds \
+export_symbols_cmds \
+prelink_cmds \
+postinstall_cmds \
+postuninstall_cmds \
+finish_cmds \
+sys_lib_search_path_spec \
+sys_lib_dlsearch_path_spec \
+reload_cmds_CXX \
+old_archive_cmds_CXX \
+old_archive_from_new_cmds_CXX \
+old_archive_from_expsyms_cmds_CXX \
+archive_cmds_CXX \
+archive_expsym_cmds_CXX \
+module_cmds_CXX \
+module_expsym_cmds_CXX \
+export_symbols_cmds_CXX \
+prelink_cmds_CXX; do
+ case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+ *[\\\\\\\`\\"\\\$]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+ ;;
+ *)
+ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+ ;;
+ esac
+done
+
+ac_aux_dir='$ac_aux_dir'
+xsi_shell='$xsi_shell'
+lt_shell_append='$lt_shell_append'
+
+# See if we are running on zsh, and set the options which allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+fi
+
+
+ PACKAGE='$PACKAGE'
+ VERSION='$VERSION'
+ TIMESTAMP='$TIMESTAMP'
+ RM='$RM'
+ ofile='$ofile'
+
+
+
+
+
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+
+# Handling of arguments.
+for ac_config_target in $ac_config_targets
+do
+ case $ac_config_target in
+ "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+ "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
+ "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+ "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
+ "gp-display-html/Makefile") CONFIG_FILES="$CONFIG_FILES gp-display-html/Makefile" ;;
+ "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
+ "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h:common/config.h.in" ;;
+
+ *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
+ esac
+done
+
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used. Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+ test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+ test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+ test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
+
+# Have a temporary directory for convenience. Make it in the build tree
+# simply because there is no reason against having it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
+$debug ||
+{
+ tmp= ac_tmp=
+ trap 'exit_status=$?
+ : "${ac_tmp:=$tmp}"
+ { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
+' 0
+ trap 'as_fn_exit 1' 1 2 13 15
+}
+# Create a (secure) tmp directory for tmp files.
+
+{
+ tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+ test -d "$tmp"
+} ||
+{
+ tmp=./conf$$-$RANDOM
+ (umask 077 && mkdir "$tmp")
+} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
+ac_tmp=$tmp
+
+# Set up the scripts for CONFIG_FILES section.
+# No need to generate them if there are no CONFIG_FILES.
+# This happens for instance with `./config.status config.h'.
+if test -n "$CONFIG_FILES"; then
+
+
+ac_cr=`echo X | tr X '\015'`
+# On cygwin, bash can eat \r inside `` if the user requested igncr.
+# But we know of no other shell where ac_cr would be empty at this
+# point, so we can use a bashism as a fallback.
+if test "x$ac_cr" = x; then
+ eval ac_cr=\$\'\\r\'
+fi
+ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
+if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
+ ac_cs_awk_cr='\\r'
+else
+ ac_cs_awk_cr=$ac_cr
+fi
+
+echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
+_ACEOF
+
+
+{
+ echo "cat >conf$$subs.awk <<_ACEOF" &&
+ echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
+ echo "_ACEOF"
+} >conf$$subs.sh ||
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+ . ./conf$$subs.sh ||
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+
+ ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
+ if test $ac_delim_n = $ac_delim_num; then
+ break
+ elif $ac_last_try; then
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ else
+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+ fi
+done
+rm -f conf$$subs.sh
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
+_ACEOF
+sed -n '
+h
+s/^/S["/; s/!.*/"]=/
+p
+g
+s/^[^!]*!//
+:repl
+t repl
+s/'"$ac_delim"'$//
+t delim
+:nl
+h
+s/\(.\{148\}\)..*/\1/
+t more1
+s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
+p
+n
+b repl
+:more1
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t nl
+:delim
+h
+s/\(.\{148\}\)..*/\1/
+t more2
+s/["\\]/\\&/g; s/^/"/; s/$/"/
+p
+b
+:more2
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t delim
+' <conf$$subs.awk | sed '
+/^[^""]/{
+ N
+ s/\n//
+}
+' >>$CONFIG_STATUS || ac_write_fail=1
+rm -f conf$$subs.awk
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+_ACAWK
+cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
+ for (key in S) S_is_set[key] = 1
+ FS = ""
+
+}
+{
+ line = $ 0
+ nfields = split(line, field, "@")
+ substed = 0
+ len = length(field[1])
+ for (i = 2; i < nfields; i++) {
+ key = field[i]
+ keylen = length(key)
+ if (S_is_set[key]) {
+ value = S[key]
+ line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
+ len += length(value) + length(field[++i])
+ substed = 1
+ } else
+ len += 1 + keylen
+ }
+
+ print line
+}
+
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
+ sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
+else
+ cat
+fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
+ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
+_ACEOF
+
+# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
+# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+ ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{
+h
+s///
+s/^/:/
+s/[ ]*$/:/
+s/:\$(srcdir):/:/g
+s/:\${srcdir}:/:/g
+s/:@srcdir@:/:/g
+s/^:*//
+s/:*$//
+x
+s/\(=[ ]*\).*/\1/
+G
+s/\n//
+s/^[^=]*=[ ]*$//
+}'
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+fi # test -n "$CONFIG_FILES"
+
+# Set up the scripts for CONFIG_HEADERS section.
+# No need to generate them if there are no CONFIG_HEADERS.
+# This happens for instance with `./config.status Makefile'.
+if test -n "$CONFIG_HEADERS"; then
+cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
+BEGIN {
+_ACEOF
+
+# Transform confdefs.h into an awk script `defines.awk', embedded as
+# here-document in config.status, that substitutes the proper values into
+# config.h.in to produce config.h.
+
+# Create a delimiter string that does not exist in confdefs.h, to ease
+# handling of long lines.
+ac_delim='%!_!# '
+for ac_last_try in false false :; do
+ ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
+ if test -z "$ac_tt"; then
+ break
+ elif $ac_last_try; then
+ as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
+ else
+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+ fi
+done
+
+# For the awk script, D is an array of macro values keyed by name,
+# likewise P contains macro parameters if any. Preserve backslash
+# newline sequences.
+
+ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
+sed -n '
+s/.\{148\}/&'"$ac_delim"'/g
+t rset
+:rset
+s/^[ ]*#[ ]*define[ ][ ]*/ /
+t def
+d
+:def
+s/\\$//
+t bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3"/p
+s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p
+d
+:bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3\\\\\\n"\\/p
+t cont
+s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
+t cont
+d
+:cont
+n
+s/.\{148\}/&'"$ac_delim"'/g
+t clear
+:clear
+s/\\$//
+t bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/"/p
+d
+:bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
+b cont
+' <confdefs.h | sed '
+s/'"$ac_delim"'/"\\\
+"/g' >>$CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ for (key in D) D_is_set[key] = 1
+ FS = ""
+}
+/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
+ line = \$ 0
+ split(line, arg, " ")
+ if (arg[1] == "#") {
+ defundef = arg[2]
+ mac1 = arg[3]
+ } else {
+ defundef = substr(arg[1], 2)
+ mac1 = arg[2]
+ }
+ split(mac1, mac2, "(") #)
+ macro = mac2[1]
+ prefix = substr(line, 1, index(line, defundef) - 1)
+ if (D_is_set[macro]) {
+ # Preserve the white space surrounding the "#".
+ print prefix "define", macro P[macro] D[macro]
+ next
+ } else {
+ # Replace #undef with comments. This is necessary, for example,
+ # in the case of _POSIX_SOURCE, which is predefined and required
+ # on some systems where configure will not decide to define it.
+ if (defundef == "undef") {
+ print "/*", prefix defundef, macro, "*/"
+ next
+ }
+ }
+}
+{ print }
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
+fi # test -n "$CONFIG_HEADERS"
+
+
+eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS"
+shift
+for ac_tag
+do
+ case $ac_tag in
+ :[FHLC]) ac_mode=$ac_tag; continue;;
+ esac
+ case $ac_mode$ac_tag in
+ :[FHL]*:*);;
+ :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
+ :[FH]-) ac_tag=-:-;;
+ :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+ esac
+ ac_save_IFS=$IFS
+ IFS=:
+ set x $ac_tag
+ IFS=$ac_save_IFS
+ shift
+ ac_file=$1
+ shift
+
+ case $ac_mode in
+ :L) ac_source=$1;;
+ :[FH])
+ ac_file_inputs=
+ for ac_f
+ do
+ case $ac_f in
+ -) ac_f="$ac_tmp/stdin";;
+ *) # Look for the file first in the build tree, then in the source tree
+ # (if the path is not absolute). The absolute path cannot be DOS-style,
+ # because $ac_f cannot contain `:'.
+ test -f "$ac_f" ||
+ case $ac_f in
+ [\\/$]*) false;;
+ *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+ esac ||
+ as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
+ esac
+ case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+ as_fn_append ac_file_inputs " '$ac_f'"
+ done
+
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
+ # use $as_me), people would be surprised to read:
+ # /* config.h. Generated by config.status. */
+ configure_input='Generated from '`
+ $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+ `' by configure.'
+ if test x"$ac_file" != x-; then
+ configure_input="$ac_file. $configure_input"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+$as_echo "$as_me: creating $ac_file" >&6;}
+ fi
+ # Neutralize special characters interpreted by sed in replacement strings.
+ case $configure_input in #(
+ *\&* | *\|* | *\\* )
+ ac_sed_conf_input=`$as_echo "$configure_input" |
+ sed 's/[\\\\&|]/\\\\&/g'`;; #(
+ *) ac_sed_conf_input=$configure_input;;
+ esac
+
+ case $ac_tag in
+ *:-:* | *:-) cat >"$ac_tmp/stdin" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
+ esac
+ ;;
+ esac
+
+ ac_dir=`$as_dirname -- "$ac_file" ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_file" : 'X\(//\)[^/]' \| \
+ X"$ac_file" : 'X\(//\)$' \| \
+ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ as_dir="$ac_dir"; as_fn_mkdir_p
+ ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+
+ case $ac_mode in
+ :F)
+ #
+ # CONFIG_FILE
+ #
+
+ case $INSTALL in
+ [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+ *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
+ esac
+ ac_MKDIR_P=$MKDIR_P
+ case $MKDIR_P in
+ [\\/$]* | ?:[\\/]* ) ;;
+ */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
+ esac
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=; ac_datarootdir_seen=
+ac_sed_dataroot='
+/datarootdir/ {
+ p
+ q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p'
+case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ ac_datarootdir_hack='
+ s&@datadir@&$datadir&g
+ s&@docdir@&$docdir&g
+ s&@infodir@&$infodir&g
+ s&@localedir@&$localedir&g
+ s&@mandir@&$mandir&g
+ s&\\\${datarootdir}&$datarootdir&g' ;;
+esac
+_ACEOF
+
+# Neutralize VPATH when `$srcdir' = `.'.
+# Shell code in configure.ac might set extrasub.
+# FIXME: do we really want to maintain this feature?
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_sed_extra="$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s|@configure_input@|$ac_sed_conf_input|;t t
+s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@top_build_prefix@&$ac_top_build_prefix&;t t
+s&@srcdir@&$ac_srcdir&;t t
+s&@abs_srcdir@&$ac_abs_srcdir&;t t
+s&@top_srcdir@&$ac_top_srcdir&;t t
+s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
+s&@builddir@&$ac_builddir&;t t
+s&@abs_builddir@&$ac_abs_builddir&;t t
+s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+s&@INSTALL@&$ac_INSTALL&;t t
+s&@MKDIR_P@&$ac_MKDIR_P&;t t
+$ac_datarootdir_hack
+"
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
+ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+
+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+ { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
+ { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \
+ "$ac_tmp/out"`; test -z "$ac_out"; } &&
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined" >&5
+$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined" >&2;}
+
+ rm -f "$ac_tmp/stdin"
+ case $ac_file in
+ -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
+ *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
+ esac \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ ;;
+ :H)
+ #
+ # CONFIG_HEADER
+ #
+ if test x"$ac_file" != x-; then
+ {
+ $as_echo "/* $configure_input */" \
+ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
+ } >"$ac_tmp/config.h" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
+$as_echo "$as_me: $ac_file is unchanged" >&6;}
+ else
+ rm -f "$ac_file"
+ mv "$ac_tmp/config.h" "$ac_file" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ fi
+ else
+ $as_echo "/* $configure_input */" \
+ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
+ || as_fn_error $? "could not create -" "$LINENO" 5
+ fi
+# Compute "$ac_file"'s index in $config_headers.
+_am_arg="$ac_file"
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+ case $_am_header in
+ $_am_arg | $_am_arg:* )
+ break ;;
+ * )
+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+ esac
+done
+echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" ||
+$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$_am_arg" : 'X\(//\)[^/]' \| \
+ X"$_am_arg" : 'X\(//\)$' \| \
+ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$_am_arg" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`/stamp-h$_am_stamp_count
+ ;;
+
+ :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
+$as_echo "$as_me: executing $ac_file commands" >&6;}
+ ;;
+ esac
+
+
+ case $ac_file$ac_mode in
+ "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
+ # Older Autoconf quotes --file arguments for eval, but not when files
+ # are listed without --file. Let's play safe and only enable the eval
+ # if we detect the quoting.
+ case $CONFIG_FILES in
+ *\'*) eval set x "$CONFIG_FILES" ;;
+ *) set x $CONFIG_FILES ;;
+ esac
+ shift
+ for mf
+ do
+ # Strip MF so we end up with the name of the file.
+ mf=`echo "$mf" | sed -e 's/:.*$//'`
+ # Check whether this is an Automake generated Makefile or not.
+ # We used to match only the files named 'Makefile.in', but
+ # some people rename them; so instead we look at the file content.
+ # Grep'ing the first line is not enough: some people post-process
+ # each Makefile.in and add a new line on top of each file to say so.
+ # Grep'ing the whole file is not good either: AIX grep has a line
+ # limit of 2048, but all sed's we know have understand at least 4000.
+ if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+ dirpart=`$as_dirname -- "$mf" ||
+$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$mf" : 'X\(//\)[^/]' \| \
+ X"$mf" : 'X\(//\)$' \| \
+ X"$mf" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$mf" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ else
+ continue
+ fi
+ # Extract the definition of DEPDIR, am__include, and am__quote
+ # from the Makefile without running 'make'.
+ DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+ test -z "$DEPDIR" && continue
+ am__include=`sed -n 's/^am__include = //p' < "$mf"`
+ test -z "$am__include" && continue
+ am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+ # Find all dependency output files, they are included files with
+ # $(DEPDIR) in their names. We invoke sed twice because it is the
+ # simplest approach to changing $(DEPDIR) to its actual value in the
+ # expansion.
+ for file in `sed -n "
+ s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do
+ # Make sure the directory exists.
+ test -f "$dirpart/$file" && continue
+ fdir=`$as_dirname -- "$file" ||
+$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$file" : 'X\(//\)[^/]' \| \
+ X"$file" : 'X\(//\)$' \| \
+ X"$file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ as_dir=$dirpart/$fdir; as_fn_mkdir_p
+ # echo "creating $dirpart/$file"
+ echo '# dummy' > "$dirpart/$file"
+ done
+ done
+}
+ ;;
+ "libtool":C)
+
+ # See if we are running on zsh, and set the options which allow our
+ # commands through without removal of \ escapes.
+ if test -n "${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+ fi
+
+ cfgfile="${ofile}T"
+ trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+ $RM "$cfgfile"
+
+ cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+
+# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+# 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+# Written by Gordon Matzigkeit, 1996
+#
+# This file is part of GNU Libtool.
+#
+# GNU Libtool is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Libtool; see the file COPYING. If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
+# obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+
+# The names of the tagged configurations supported by this script.
+available_tags="CXX "
+
+# ### BEGIN LIBTOOL CONFIG
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Which release of libtool.m4 was used?
+macro_version=$macro_version
+macro_revision=$macro_revision
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# What type of objects to build.
+pic_mode=$pic_mode
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# An echo program that protects backslashes.
+ECHO=$lt_ECHO
+
+# The host system.
+host_alias=$host_alias
+host=$host
+host_os=$host_os
+
+# The build system.
+build_alias=$build_alias
+build=$build
+build_os=$build_os
+
+# A sed program that does not truncate output.
+SED=$lt_SED
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="\$SED -e 1s/^X//"
+
+# A grep program that handles long lines.
+GREP=$lt_GREP
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# A literal string matcher.
+FGREP=$lt_FGREP
+
+# A BSD- or MS-compatible name lister.
+NM=$lt_NM
+
+# Whether we need soft or hard links.
+LN_S=$lt_LN_S
+
+# What is the maximum length of a command?
+max_cmd_len=$max_cmd_len
+
+# Object file suffix (normally "o").
+objext=$ac_objext
+
+# Executable file suffix (normally "").
+exeext=$exeext
+
+# whether the shell understands "unset".
+lt_unset=$lt_unset
+
+# turn spaces into newlines.
+SP2NL=$lt_lt_SP2NL
+
+# turn newlines into spaces.
+NL2SP=$lt_lt_NL2SP
+
+# An object symbol dumper.
+OBJDUMP=$lt_OBJDUMP
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == "file_magic".
+file_magic_cmd=$lt_file_magic_cmd
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A symbol stripping program.
+STRIP=$lt_STRIP
+
+# Commands used to install an old-style archive.
+RANLIB=$lt_RANLIB
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Whether to use a lock for old archive extraction.
+lock_old_archive_extraction=$lock_old_archive_extraction
+
+# A C compiler.
+LTCC=$lt_CC
+
+# LTCC compiler flags.
+LTCFLAGS=$lt_CFLAGS
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration.
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair.
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# Transform the output of nm in a C name address pair when lib prefix is needed.
+global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# Used to examine libraries when file_magic_cmd begins with "file".
+MAGIC_CMD=$MAGIC_CMD
+
+# Must we lock files when doing compilation?
+need_locks=$lt_need_locks
+
+# Tool to manipulate archived DWARF debug symbol files on Mac OS X.
+DSYMUTIL=$lt_DSYMUTIL
+
+# Tool to change global to local symbols on Mac OS X.
+NMEDIT=$lt_NMEDIT
+
+# Tool to manipulate fat objects and archives on Mac OS X.
+LIPO=$lt_LIPO
+
+# ldd/readelf like tool for Mach-O binaries on Mac OS X.
+OTOOL=$lt_OTOOL
+
+# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4.
+OTOOL64=$lt_OTOOL64
+
+# Old archive suffix (normally "a").
+libext=$libext
+
+# Shared library suffix (normally ".so").
+shrext_cmds=$lt_shrext_cmds
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at link time.
+variables_saved_for_relink=$lt_variables_saved_for_relink
+
+# Do we need the "lib" prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Library versioning type.
+version_type=$version_type
+
+# Shared library runtime path variable.
+runpath_var=$runpath_var
+
+# Shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names. First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Permission mode override for installation of shared libraries.
+install_override_mode=$lt_install_override_mode
+
+# Command to use after installation of a shared archive.
+postinstall_cmds=$lt_postinstall_cmds
+
+# Command to use after uninstallation of a shared archive.
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# As "finish_cmds", except a single script fragment to be evaled but
+# not shown.
+finish_eval=$lt_finish_eval
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Compile-time system search path for libraries.
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries.
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+
+# The linker used to build libraries.
+LD=$lt_LD
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds
+
+# A language specific compiler.
+CC=$lt_compiler
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds
+archive_expsym_cmds=$lt_archive_expsym_cmds
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds
+module_expsym_cmds=$lt_module_expsym_cmds
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
+
+# If ld is used when linking, flag to hardcode \$libdir into a binary
+# during linking. This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path=$lt_fix_srcfile_path
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action
+
+# The directories searched by this compiler when creating a shared library.
+compiler_lib_search_dirs=$lt_compiler_lib_search_dirs
+
+# Dependencies to place before and after the objects being linked to
+# create a shared library.
+predep_objects=$lt_predep_objects
+postdep_objects=$lt_postdep_objects
+predeps=$lt_predeps
+postdeps=$lt_postdeps
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path
+
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+ case $host_os in
+ aix3*)
+ cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program. For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+fi
+_LT_EOF
+ ;;
+ esac
+
+
+ltmain="$ac_aux_dir/ltmain.sh"
+
+
+ # We use sed instead of cat because bash on DJGPP gets confused if
+ # if finds mixed CR/LF and LF-only lines. Since sed operates in
+ # text mode, it properly converts lines to CR/LF. This bash problem
+ # is reportedly fixed, but why not run on old versions too?
+ sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
+ || (rm -f "$cfgfile"; exit 1)
+
+ case $xsi_shell in
+ yes)
+ cat << \_LT_EOF >> "$cfgfile"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+ case ${1} in
+ */*) func_dirname_result="${1%/*}${2}" ;;
+ * ) func_dirname_result="${3}" ;;
+ esac
+}
+
+# func_basename file
+func_basename ()
+{
+ func_basename_result="${1##*/}"
+}
+
+# func_dirname_and_basename file append nondir_replacement
+# perform func_basename and func_dirname in a single function
+# call:
+# dirname: Compute the dirname of FILE. If nonempty,
+# add APPEND to the result, otherwise set result
+# to NONDIR_REPLACEMENT.
+# value returned in "$func_dirname_result"
+# basename: Compute filename of FILE.
+# value retuned in "$func_basename_result"
+# Implementation must be kept synchronized with func_dirname
+# and func_basename. For efficiency, we do not delegate to
+# those functions but instead duplicate the functionality here.
+func_dirname_and_basename ()
+{
+ case ${1} in
+ */*) func_dirname_result="${1%/*}${2}" ;;
+ * ) func_dirname_result="${3}" ;;
+ esac
+ func_basename_result="${1##*/}"
+}
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+func_stripname ()
+{
+ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+ # positional parameters, so assign one to ordinary parameter first.
+ func_stripname_result=${3}
+ func_stripname_result=${func_stripname_result#"${1}"}
+ func_stripname_result=${func_stripname_result%"${2}"}
+}
+
+# func_opt_split
+func_opt_split ()
+{
+ func_opt_split_opt=${1%%=*}
+ func_opt_split_arg=${1#*=}
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+ case ${1} in
+ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+ *) func_lo2o_result=${1} ;;
+ esac
+}
+
+# func_xform libobj-or-source
+func_xform ()
+{
+ func_xform_result=${1%.*}.lo
+}
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+ func_arith_result=$(( $* ))
+}
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+ func_len_result=${#1}
+}
+
+_LT_EOF
+ ;;
+ *) # Bourne compatible functions.
+ cat << \_LT_EOF >> "$cfgfile"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+ # Extract subdirectory from the argument.
+ func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
+ if test "X$func_dirname_result" = "X${1}"; then
+ func_dirname_result="${3}"
+ else
+ func_dirname_result="$func_dirname_result${2}"
+ fi
+}
+
+# func_basename file
+func_basename ()
+{
+ func_basename_result=`$ECHO "${1}" | $SED "$basename"`
+}
+
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+# func_strip_suffix prefix name
+func_stripname ()
+{
+ case ${2} in
+ .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
+ *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
+ esac
+}
+
+# sed scripts:
+my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q'
+my_sed_long_arg='1s/^-[^=]*=//'
+
+# func_opt_split
+func_opt_split ()
+{
+ func_opt_split_opt=`$ECHO "${1}" | $SED "$my_sed_long_opt"`
+ func_opt_split_arg=`$ECHO "${1}" | $SED "$my_sed_long_arg"`
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+ func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
+}
+
+# func_xform libobj-or-source
+func_xform ()
+{
+ func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
+}
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+ func_arith_result=`expr "$@"`
+}
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+ func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
+}
+
+_LT_EOF
+esac
+
+case $lt_shell_append in
+ yes)
+ cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+ eval "$1+=\$2"
+}
+_LT_EOF
+ ;;
+ *)
+ cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+ eval "$1=\$$1\$2"
+}
+
+_LT_EOF
+ ;;
+ esac
+
+
+ sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
+ || (rm -f "$cfgfile"; exit 1)
+
+ mv -f "$cfgfile" "$ofile" ||
+ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+ chmod +x "$ofile"
+
+
+ cat <<_LT_EOF >> "$ofile"
+
+# ### BEGIN LIBTOOL TAG CONFIG: CXX
+
+# The linker used to build libraries.
+LD=$lt_LD_CXX
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag_CXX
+reload_cmds=$lt_reload_cmds_CXX
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds_CXX
+
+# A language specific compiler.
+CC=$lt_compiler_CXX
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC_CXX
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl_CXX
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic_CXX
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static_CXX
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc_CXX
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object_CXX
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds_CXX
+archive_expsym_cmds=$lt_archive_expsym_cmds_CXX
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds_CXX
+module_expsym_cmds=$lt_module_expsym_cmds_CXX
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld_CXX
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag_CXX
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag_CXX
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX
+
+# If ld is used when linking, flag to hardcode \$libdir into a binary
+# during linking. This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct_CXX
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute_CXX
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L_CXX
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic_CXX
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath_CXX
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs_CXX
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path=$lt_fix_srcfile_path_CXX
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols_CXX
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds_CXX
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms_CXX
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms_CXX
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds_CXX
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec_CXX
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action_CXX
+
+# The directories searched by this compiler when creating a shared library.
+compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX
+
+# Dependencies to place before and after the objects being linked to
+# create a shared library.
+predep_objects=$lt_predep_objects_CXX
+postdep_objects=$lt_postdep_objects_CXX
+predeps=$lt_predeps_CXX
+postdeps=$lt_postdeps_CXX
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path_CXX
+
+# ### END LIBTOOL TAG CONFIG: CXX
+_LT_EOF
+
+ ;;
+
+ esac
+done # for ac_tag
+
+
+as_fn_exit 0
+_ACEOF
+ac_clean_files=$ac_clean_files_save
+
+test $ac_write_fail = 0 ||
+ as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded. So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status. When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+ ac_cs_success=:
+ ac_config_status_args=
+ test "$silent" = yes &&
+ ac_config_status_args="$ac_config_status_args --quiet"
+ exec 5>/dev/null
+ $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+ exec 5>>config.log
+ # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+ # would make configure fail if this is the last instruction.
+ $ac_cs_success || as_fn_exit 1
+fi
+
+#
+# CONFIG_SUBDIRS section.
+#
+if test "$no_recursion" != yes; then
+
+ # Remove --cache-file, --srcdir, and --disable-option-checking arguments
+ # so they do not pile up.
+ ac_sub_configure_args=
+ ac_prev=
+ eval "set x $ac_configure_args"
+ shift
+ for ac_arg
+ do
+ if test -n "$ac_prev"; then
+ ac_prev=
+ continue
+ fi
+ case $ac_arg in
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ ac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* \
+ | --c=*)
+ ;;
+ --config-cache | -C)
+ ;;
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ ;;
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ ac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ ;;
+ --disable-option-checking)
+ ;;
+ *)
+ case $ac_arg in
+ *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ as_fn_append ac_sub_configure_args " '$ac_arg'" ;;
+ esac
+ done
+
+ # Always prepend --prefix to ensure using the same prefix
+ # in subdir configurations.
+ ac_arg="--prefix=$prefix"
+ case $ac_arg in
+ *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ ac_sub_configure_args="'$ac_arg' $ac_sub_configure_args"
+
+ # Pass --silent
+ if test "$silent" = yes; then
+ ac_sub_configure_args="--silent $ac_sub_configure_args"
+ fi
+
+ # Always prepend --disable-option-checking to silence warnings, since
+ # different subdirs can have different --enable and --with options.
+ ac_sub_configure_args="--disable-option-checking $ac_sub_configure_args"
+
+ ac_popdir=`pwd`
+ for ac_dir in : $subdirs; do test "x$ac_dir" = x: && continue
+
+ # Do not complain, so a configure script can configure whichever
+ # parts of a large source tree are present.
+ test -d "$srcdir/$ac_dir" || continue
+
+ ac_msg="=== configuring in $ac_dir (`pwd`/$ac_dir)"
+ $as_echo "$as_me:${as_lineno-$LINENO}: $ac_msg" >&5
+ $as_echo "$ac_msg" >&6
+ as_dir="$ac_dir"; as_fn_mkdir_p
+ ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+
+ cd "$ac_dir"
+
+ # Check for guested configure; otherwise get Cygnus style configure.
+ if test -f "$ac_srcdir/configure.gnu"; then
+ ac_sub_configure=$ac_srcdir/configure.gnu
+ elif test -f "$ac_srcdir/configure"; then
+ ac_sub_configure=$ac_srcdir/configure
+ elif test -f "$ac_srcdir/configure.in"; then
+ # This should be Cygnus configure.
+ ac_sub_configure=$ac_aux_dir/configure
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no configuration information is in $ac_dir" >&5
+$as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2;}
+ ac_sub_configure=
+ fi
+
+ # The recursion is here.
+ if test -n "$ac_sub_configure"; then
+ # Make the cache file name correct relative to the subdirectory.
+ case $cache_file in
+ [\\/]* | ?:[\\/]* ) ac_sub_cache_file=$cache_file ;;
+ *) # Relative name.
+ ac_sub_cache_file=$ac_top_build_prefix$cache_file ;;
+ esac
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&5
+$as_echo "$as_me: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&6;}
+ # The eval makes quoting arguments work.
+ eval "\$SHELL \"\$ac_sub_configure\" $ac_sub_configure_args \
+ --cache-file=\"\$ac_sub_cache_file\" --srcdir=\"\$ac_srcdir\"" ||
+ as_fn_error $? "$ac_sub_configure failed for $ac_dir" "$LINENO" 5
+ fi
+
+ cd "$ac_popdir"
+ done
+fi
+if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+fi
+
+
diff --git a/gprofng/configure.ac b/gprofng/configure.ac
new file mode 100644
index 00000000000..80bbc8569f5
--- /dev/null
+++ b/gprofng/configure.ac
@@ -0,0 +1,229 @@
+dnl Process this file with autoconf to produce a configure script.
+dnl
+dnl Copyright (C) 2021 Free Software Foundation, Inc.
+dnl
+dnl This file is free software; you can redistribute it and/or modify
+dnl it under the terms of the GNU General Public License as published by
+dnl the Free Software Foundation; either version 3 of the License, or
+dnl (at your option) any later version.
+dnl
+dnl This program is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+dnl GNU General Public License for more details.
+dnl
+dnl You should have received a copy of the GNU General Public License
+dnl along with this program; see the file COPYING3. If not see
+dnl <http://www.gnu.org/licenses/>.
+
+m4_include([../bfd/version.m4])
+m4_include([../config/zlib.m4])
+AC_INIT([gprofng], BFD_VERSION)
+AC_CANONICAL_TARGET
+AM_INIT_AUTOMAKE([subdir-objects])
+AM_MAINTAINER_MODE
+
+AC_USE_SYSTEM_EXTENSIONS
+AC_PROG_CC
+AC_PROG_CXX
+AC_PROG_INSTALL
+AC_PROG_RANLIB
+AM_PROG_AR
+gl_PROG_BISON([BISON],[3.0.4])
+if test x$BISON = "x:"; then
+ AC_MSG_ERROR([Building gprofng requires bison 3.0.4 or later.])
+fi
+
+AC_DISABLE_SHARED
+LT_INIT
+
+GPROFNG_LIBADD="-L../../libiberty -liberty"
+if test "$enable_shared" = "yes"; then
+ GPROFNG_LIBADD="-L../../libiberty/pic -liberty"
+fi
+AC_SUBST(GPROFNG_LIBADD)
+
+# Figure out what compiler warnings we can enable.
+# See config/warnings.m4 for details.
+
+ACX_PROG_CC_WARNINGS_ARE_ERRORS([manual])
+ACX_PROG_CC_WARNING_OPTS([-Wall], [gprofng_cflags])
+ACX_PROG_CC_WARNING_OPTS([-Wno-format-truncation], [GPROFNG_NO_FORMAT_TRUNCATION_CFLAGS])
+ACX_PROG_CC_WARNING_OPTS([-Wno-switch], [GPROFNG_NO_SWITCH_CFLAGS])
+gprofng_cppflags="-U_ASM"
+build_collector=
+build_src=
+
+# This is annoying: it means we have to pass --enable-shared explicitly to
+# get gprofng, while the configure default is supposed to be that shared libs
+# are on by default. But as long as libiberty has code like this, so must
+# we...
+
+ case "${target}" in
+ x86_64-*-linux*)
+ build_src=true
+ build_collector=true
+ ;;
+ i?86-*-linux*)
+ build_collector=true
+ build_collector=true
+ ;;
+ aarch64-*-linux*)
+ build_src=true
+ build_collector=true
+ ;;
+ esac
+ AC_ARG_ENABLE(gprofng-tools,
+ AS_HELP_STRING([--disable-gprofng-tools], [do not build gprofng/src directory]),
+ build_src=$enableval)
+
+AM_CONDITIONAL([BUILD_COLLECTOR], [test x$build_collector = xtrue])
+AM_CONDITIONAL([BUILD_SRC], [test x$build_src = xtrue])
+
+run_tests=false
+if test x$build_collector = xtrue; then
+ AC_CONFIG_SUBDIRS([libcollector])
+ if test x${host} = x${target}; then
+ run_tests=true
+ fi
+fi
+AM_CONDITIONAL([RUN_TESTS], [test x$run_tests = xtrue])
+AX_PTHREAD
+
+# Specify a location for JDK
+enable_gprofng_jp=
+jdk_inc=
+AC_ARG_WITH(jdk,
+[AS_HELP_STRING([--with-jdk=PATH],
+ [specify prefix directory for installed JDK.])])
+
+if test "x$with_jdk" != x; then
+ jdk_inc="-I$with_jdk/include -I$with_jdk/include/linux"
+ enable_gprofng_jp=yes
+else
+ AC_PATH_PROG([JAVAC], [javac], [javac])
+ if test -f $JAVAC; then
+ x=`readlink -f $JAVAC`
+ x=`dirname $x`
+ x=`dirname $x`
+ if ! test -f $x/include/jni.h; then
+ x=`dirname $x`
+ fi
+ if test -f $x/include/jni.h; then
+ jdk_inc="-I$x/include -I$x/include/linux"
+ enable_gprofng_jp=yes
+ fi
+ fi
+fi
+if test "x$enable_gprofng_jp" = x; then
+ AC_PATH_PROG([JAVA], [java], [java])
+ if test -f $JAVA; then
+ x=`readlink -f $JAVA`
+ x=`dirname $x`
+ x=`dirname $x`
+ if ! test -f $x/include/jni.h; then
+ x=`dirname $x`
+ fi
+ if test -f $x/include/jni.h; then
+ jdk_inc="-I$x/include -I$x/include/linux"
+ enable_gprofng_jp=yes
+ fi
+ fi
+fi
+if test "x$enable_gprofng_jp" = x; then
+ AC_CHECK_HEADER([jni.h], [ enable_gprofng_jp=yes ], [], [] )
+fi
+GPROFNG_BROKEN_JAVAC=no
+if test "x$enable_gprofng_jp" = x; then
+ AC_MSG_WARN([ Cannot find the JDK include directory.
+ gprofng will be build without support for profiling Java applications.
+ Use --with-jdk=PATH to specify directory for the installed JDK])
+else
+ AC_DEFINE(GPROFNG_JAVA_PROFILING, 1, [Enable java profiling])
+ if test "x$JAVAC" != x; then
+ cat > configtest.java << EOF
+class Simple{
+ public static void main(String args[]){
+ System.out.println("Hello Java");
+ }
+}
+EOF
+ if AC_TRY_COMMAND($JAVAC conftest.java &AS_MESSAGE_LOG_FD 2>&1); then
+ GPROFNG_BROKEN_JAVAC=no
+ else
+ GPROFNG_BROKEN_JAVAC=yes
+ fi
+ rm -f configtest.*
+ fi
+fi
+AC_SUBST(GPROFNG_BROKEN_JAVAC)
+AC_SUBST(jdk_inc)
+
+DEBUG=
+GCC_ENABLE([gprofng-debug], [no], [], [Enable debugging output])
+if test "${enable_gprofng_debug}" = yes; then
+ AC_DEFINE(DEBUG, 1, [Enable debugging output.])
+fi
+
+# Check if linker supports --as-needed and --no-as-needed options.
+AC_CACHE_CHECK(linker --as-needed support, bfd_cv_ld_as_needed,
+ [bfd_cv_ld_as_needed=no
+ if $LD --help 2>/dev/null | grep as-needed > /dev/null; then
+ bfd_cv_ld_as_needed=yes
+ fi
+ ])
+
+no_as_needed=
+if test x"$bfd_cv_ld_as_needed" = xyes; then
+ no_as_needed='-Wl,--no-as-needed'
+fi
+
+AC_PATH_PROG([EXPECT], [expect])
+AC_CACHE_CHECK([for Tcl supporting try/catch], [ac_cv_libctf_tcl_try],
+ [ac_cv_libctf_tcl_try=`if test -z $EXPECT; then echo no; else $EXPECT << EOF
+if @<:@llength @<:@info commands try@:>@@:>@ then { puts yes } else { puts no }
+EOF
+fi`
+])
+AM_CONDITIONAL(TCL_TRY, test "${ac_cv_libctf_tcl_try}" = yes)
+
+AM_ZLIB
+
+# Generate manpages, if possible.
+if test $cross_compiling = no; then
+ AM_MISSING_PROG(HELP2MAN, help2man)
+ build_man=true
+else
+ build_man=false
+fi
+AM_CONDITIONAL([BUILD_MAN], [test x$build_man = xtrue])
+
+AC_SUBST(LD_NO_AS_NEEDED, [${no_as_needed}])
+AC_SUBST(GPROFNG_CFLAGS, [${gprofng_cflags}])
+AC_SUBST(GPROFNG_NO_FORMAT_TRUNCATION_CFLAGS)
+AC_SUBST(GPROFNG_NO_SWITCH_CFLAGS)
+AC_SUBST(GPROFNG_CPPFLAGS, [${gprofng_cppflags}])
+
+AC_CHECK_DECLS([basename])
+AC_CHECK_FUNCS(clock_gettime strsignal)
+
+clock_gettime_link=
+# At least for glibc, clock_gettime is in librt. But don't
+# pull that in if it still doesn't give us the function we want. This
+# test is copied from libgomp, and modified to not link in -lrt as
+# we're using this for test timing only.
+if test "$ac_cv_func_clock_gettime" = no; then
+ AC_CHECK_LIB(rt, clock_gettime,
+ [CLOCK_GETTIME_LINK=-lrt
+ AC_DEFINE(HAVE_CLOCK_GETTIME, 1,
+ [Define to 1 if you have the `clock_gettime' function.])])
+fi
+AC_SUBST(CLOCK_GETTIME_LINK)
+
+AC_SUBST(BUILD_SUBDIRS)
+
+AC_CONFIG_FILES([Makefile src/Makefile gp-display-html/Makefile doc/Makefile])
+AC_CONFIG_HEADERS([config.h:common/config.h.in])
+
+AC_OUTPUT
+
diff --git a/gprofng/doc/Makefile.am b/gprofng/doc/Makefile.am
new file mode 100644
index 00000000000..151e65a77e8
--- /dev/null
+++ b/gprofng/doc/Makefile.am
@@ -0,0 +1,37 @@
+## Process this file with automake to generate Makefile.in
+#
+# Copyright (C) 2012-2021 Free Software Foundation, Inc.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 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; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+#
+
+AUTOMAKE_OPTIONS = info-in-builddir foreign no-texinfo.tex
+
+info_TEXINFOS = gprofng.texi
+gprofng_TEXINFOS = fdl.texi
+BUILT_SOURCES = version.texi
+CLEANFILES = version.texi
+TEXINFO_TEX = .
+MAKEINFOHTML = $(MAKEINFO) --html --no-split
+
+version.texi:
+ @echo "@set EDITION 1.0" > $@
+ @echo "@set VERSION 1.0" >> $@
+ @echo "@set UPDATED 22 February 2022" >> $@
+ @echo "@set UPDATED-MONTH February 2022" >> $@
+# @echo "@set UPDATED `date +"%-d %B %Y"`" >> $@
+# @echo "@set UPDATED-MONTH `date +"%B %Y"`" >> $@
+
+MAINTAINERCLEANFILES = gprofng.info
diff --git a/bfd/doc/Makefile.in b/gprofng/doc/Makefile.in
index ff843885526..4050586f6a8 100644
--- a/bfd/doc/Makefile.in
+++ b/gprofng/doc/Makefile.in
@@ -15,18 +15,18 @@
@SET_MAKE@
#
-# Copyright (C) 2012-2022 Free Software Foundation, Inc.
+# Copyright (C) 2012-2021 Free Software Foundation, Inc.
#
# This file is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 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; see the file COPYING3. If not see
# <http://www.gnu.org/licenses/>.
@@ -108,27 +108,18 @@ host_triplet = @host@
target_triplet = @target@
subdir = doc
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \
- $(top_srcdir)/../config/bfd64.m4 \
- $(top_srcdir)/../config/depstand.m4 \
- $(top_srcdir)/../config/gettext-sister.m4 \
- $(top_srcdir)/../config/jobserver.m4 \
- $(top_srcdir)/../config/largefile.m4 \
- $(top_srcdir)/../config/lead-dot.m4 \
- $(top_srcdir)/../config/nls.m4 \
- $(top_srcdir)/../config/override.m4 \
- $(top_srcdir)/../config/plugins.m4 \
- $(top_srcdir)/../config/po.m4 \
- $(top_srcdir)/../config/progtest.m4 \
- $(top_srcdir)/../config/zlib.m4 $(top_srcdir)/../libtool.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/../libtool.m4 \
$(top_srcdir)/../ltoptions.m4 $(top_srcdir)/../ltsugar.m4 \
$(top_srcdir)/../ltversion.m4 $(top_srcdir)/../lt~obsolete.m4 \
- $(top_srcdir)/bfd.m4 $(top_srcdir)/warning.m4 \
- $(top_srcdir)/acinclude.m4 $(top_srcdir)/version.m4 \
- $(top_srcdir)/configure.ac
+ $(top_srcdir)/acinclude.m4 $(top_srcdir)/../config/warnings.m4 \
+ $(top_srcdir)/../config/enable.m4 \
+ $(top_srcdir)/../config/ax_pthread.m4 \
+ $(top_srcdir)/config/bison.m4 $(top_srcdir)/../bfd/version.m4 \
+ $(top_srcdir)/../config/zlib.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
-DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/version.texi \
+ $(srcdir)/stamp-vti $(am__DIST_COMMON)
mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
@@ -175,16 +166,15 @@ AM_V_texidevnull = $(am__v_texidevnull_@AM_V@)
am__v_texidevnull_ = $(am__v_texidevnull_@AM_DEFAULT_V@)
am__v_texidevnull_0 = > /dev/null
am__v_texidevnull_1 =
-INFO_DEPS = bfd.info
-am__TEXINFO_TEX_DIR = $(srcdir)
-DVIS = bfd.dvi
-PDFS = bfd.pdf
-PSS = bfd.ps
-HTMLS = bfd.html
-TEXINFOS = bfd.texi
+INFO_DEPS = gprofng.info
+am__TEXINFO_TEX_DIR = $(srcdir)/.
+DVIS = gprofng.dvi
+PDFS = gprofng.pdf
+PSS = gprofng.ps
+HTMLS = gprofng.html
+TEXINFOS = gprofng.texi
TEXI2DVI = texi2dvi
TEXI2PDF = $(TEXI2DVI) --pdf --batch
-MAKEINFOHTML = $(MAKEINFO) --html
AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS)
DVIPS = dvips
am__can_run_installinfo = \
@@ -221,8 +211,8 @@ am__uninstall_files_from_dir = { \
$(am__cd) "$$dir" && rm -f $$files; }; \
}
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
-am__DIST_COMMON = $(bfd_TEXINFOS) $(srcdir)/Makefile.in \
- $(top_srcdir)/../mkinstalldirs
+am__DIST_COMMON = $(gprofng_TEXINFOS) $(srcdir)/Makefile.in \
+ $(top_srcdir)/../mkinstalldirs mdate-sh texinfo.tex
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
@@ -232,25 +222,19 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
-BFD_HOSTPTR_T = @BFD_HOSTPTR_T@
-BFD_HOST_64BIT_LONG = @BFD_HOST_64BIT_LONG@
-BFD_HOST_64BIT_LONG_LONG = @BFD_HOST_64BIT_LONG_LONG@
-BFD_HOST_64_BIT = @BFD_HOST_64_BIT@
-BFD_HOST_64_BIT_DEFINED = @BFD_HOST_64_BIT_DEFINED@
-BFD_HOST_U_64_BIT = @BFD_HOST_U_64_BIT@
-CATALOGS = @CATALOGS@
-CATOBJEXT = @CATOBJEXT@
+BISON = @BISON@
+BUILD_SUBDIRS = @BUILD_SUBDIRS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
-CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
-COREFILE = @COREFILE@
-COREFLAG = @COREFLAG@
+CLOCK_GETTIME_LINK = @CLOCK_GETTIME_LINK@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEBUGDIR = @DEBUGDIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DSYMUTIL = @DSYMUTIL@
@@ -260,25 +244,26 @@ ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
-EXEEXT_FOR_BUILD = @EXEEXT_FOR_BUILD@
+EXPECT = @EXPECT@
FGREP = @FGREP@
-GENCAT = @GENCAT@
-GMSGFMT = @GMSGFMT@
+GPROFNG_BROKEN_JAVAC = @GPROFNG_BROKEN_JAVAC@
+GPROFNG_CFLAGS = @GPROFNG_CFLAGS@
+GPROFNG_CPPFLAGS = @GPROFNG_CPPFLAGS@
+GPROFNG_LIBADD = @GPROFNG_LIBADD@
+GPROFNG_NO_FORMAT_TRUNCATION_CFLAGS = @GPROFNG_NO_FORMAT_TRUNCATION_CFLAGS@
+GPROFNG_NO_SWITCH_CFLAGS = @GPROFNG_NO_SWITCH_CFLAGS@
GREP = @GREP@
-HDEFINES = @HDEFINES@
-INCINTL = @INCINTL@
+HELP2MAN = @HELP2MAN@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTOBJEXT = @INSTOBJEXT@
-LARGEFILE_CPPFLAGS = @LARGEFILE_CPPFLAGS@
+JAVA = @JAVA@
+JAVAC = @JAVAC@
LD = @LD@
LDFLAGS = @LDFLAGS@
-LIBINTL = @LIBINTL@
-LIBINTL_DEP = @LIBINTL_DEP@
-LIBM = @LIBM@
+LD_NO_AS_NEEDED = @LD_NO_AS_NEEDED@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
@@ -288,12 +273,8 @@ LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
MKDIR_P = @MKDIR_P@
-MKINSTALLDIRS = @MKINSTALLDIRS@
-MSGFMT = @MSGFMT@
-MSGMERGE = @MSGMERGE@
NM = @NM@
NMEDIT = @NMEDIT@
-NO_WERROR = @NO_WERROR@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
@@ -306,42 +287,30 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-PKGVERSION = @PKGVERSION@
-POSUB = @POSUB@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
RANLIB = @RANLIB@
-REPORT_BUGS_TEXI = @REPORT_BUGS_TEXI@
-REPORT_BUGS_TO = @REPORT_BUGS_TO@
SED = @SED@
SET_MAKE = @SET_MAKE@
-SHARED_LDFLAGS = @SHARED_LDFLAGS@
-SHARED_LIBADD = @SHARED_LIBADD@
SHELL = @SHELL@
STRIP = @STRIP@
-TDEFINES = @TDEFINES@
-USE_NLS = @USE_NLS@
VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
-WARN_CFLAGS_FOR_BUILD = @WARN_CFLAGS_FOR_BUILD@
-WARN_WRITE_STRINGS = @WARN_WRITE_STRINGS@
-XGETTEXT = @XGETTEXT@
+WERROR = @WERROR@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-all_backends = @all_backends@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
-bfd64_libs = @bfd64_libs@
-bfd_backends = @bfd_backends@
-bfd_default_target_size = @bfd_default_target_size@
-bfd_file_ptr = @bfd_file_ptr@
-bfd_machines = @bfd_machines@
-bfd_ufile_ptr = @bfd_ufile_ptr@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
@@ -354,22 +323,21 @@ datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
-havevecs = @havevecs@
+gprofng_cflags = @gprofng_cflags@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
-host_noncanonical = @host_noncanonical@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
+jdk_inc = @jdk_inc@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_cv_dlopen_libs = @lt_cv_dlopen_libs@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -380,93 +348,30 @@ psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
-supports_plugins = @supports_plugins@
+subdirs = @subdirs@
sysconfdir = @sysconfdir@
target = @target@
target_alias = @target_alias@
target_cpu = @target_cpu@
-target_noncanonical = @target_noncanonical@
target_os = @target_os@
target_vendor = @target_vendor@
-tdefaults = @tdefaults@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
-wordsize = @wordsize@
zlibdir = @zlibdir@
zlibinc = @zlibinc@
-AUTOMAKE_OPTIONS = info-in-builddir no-texinfo.tex foreign
-DOCFILES = aoutx.texi archive.texi archures.texi \
- bfdt.texi cache.texi coffcode.texi \
- core.texi elf.texi elfcode.texi format.texi \
- libbfd.texi bfdwin.texi bfdio.texi \
- opncls.texi reloc.texi section.texi \
- syms.texi targets.texi init.texi hash.texi linker.texi \
- mmo.texi \
- bfdver.texi
-
-
-# SRCDOC, SRCPROT, SRCIPROT only used to sidestep Sun Make bug in interaction
-# between VPATH and suffix rules. If you use GNU Make, perhaps other Makes,
-# you don't need these three:
-SRCDOC = $(srcdir)/../aoutx.h $(srcdir)/../archive.c \
- $(srcdir)/../archures.c $(srcdir)/../bfd.c \
- $(srcdir)/../bfdio.c $(srcdir)/../bfdwin.c \
- $(srcdir)/../cache.c $(srcdir)/../coffcode.h \
- $(srcdir)/../corefile.c $(srcdir)/../elf.c \
- $(srcdir)/../elfcode.h $(srcdir)/../format.c \
- $(srcdir)/../libbfd.c $(srcdir)/../opncls.c \
- $(srcdir)/../reloc.c $(srcdir)/../section.c \
- $(srcdir)/../syms.c $(srcdir)/../targets.c \
- $(srcdir)/../hash.c $(srcdir)/../linker.c \
- $(srcdir)/../mmo.c
-
-SRCPROT = $(srcdir)/../archive.c $(srcdir)/../archures.c \
- $(srcdir)/../bfd.c $(srcdir)/../coffcode.h $(srcdir)/../corefile.c \
- $(srcdir)/../format.c $(srcdir)/../libbfd.c \
- $(srcdir)/../bfdio.c $(srcdir)/../bfdwin.c \
- $(srcdir)/../opncls.c $(srcdir)/../reloc.c \
- $(srcdir)/../section.c $(srcdir)/../syms.c \
- $(srcdir)/../targets.c $(srcdir)/../init.c
-
-SRCIPROT = $(srcdir)/../cache.c $(srcdir)/../libbfd.c \
- $(srcdir)/../bfdio.c $(srcdir)/../bfdwin.c \
- $(srcdir)/../reloc.c $(srcdir)/../cpu-h8300.c \
- $(srcdir)/../cpu-i960.c $(srcdir)/../archures.c \
- $(srcdir)/../init.c
-
-TEXIDIR = $(srcdir)/../../texinfo/fsf
-info_TEXINFOS = bfd.texi
-bfd_TEXINFOS = $(DOCFILES) bfdsumm.texi
-AM_MAKEINFOFLAGS = --no-split
-MKDOC = chew$(EXEEXT_FOR_BUILD)
-AM_CPPFLAGS = -I.. -I$(srcdir)/.. -I$(srcdir)/../../include \
- -I$(srcdir)/../../intl -I../../intl
-
-
-# We can't replace these rules with an implicit rule, because
-# makes without VPATH support couldn't find the .h files in `..'.
-
-# We do not depend on chew directly so that we can distribute the info
-# files, and permit people to rebuild them, without requiring the makeinfo
-# program. If somebody tries to rebuild info, but none of the .texi files
-# have changed, then nothing will be rebuilt.
-REGEN_TEXI = \
- ( \
- set -e; \
- ./$(MKDOC) -f $(srcdir)/doc.str < $< > $@.tmp; \
- texi=$@; \
- texi=$${texi%.stamp}.texi; \
- test -e $$texi || test ! -f $(srcdir)/$$texi || $(LN_S) $(srcdir)/$$texi .; \
- $(SHELL) $(srcdir)/../../move-if-change $@.tmp $$texi; \
- touch $@; \
- )
-
-noinst_TEXINFOS = bfdint.texi
-MOSTLYCLEANFILES = $(MKDOC) *.o *.stamp
-DISTCLEANFILES = bfd.?? bfd.??? bfd.h libbfd.h libcoff.h texput.log
-MAINTAINERCLEANFILES = $(DOCFILES) bfd.info
-all: all-am
+AUTOMAKE_OPTIONS = info-in-builddir foreign no-texinfo.tex
+info_TEXINFOS = gprofng.texi
+gprofng_TEXINFOS = fdl.texi
+BUILT_SOURCES = version.texi
+CLEANFILES = version.texi
+TEXINFO_TEX = .
+MAKEINFOHTML = $(MAKEINFO) --html --no-split
+# @echo "@set UPDATED `date +"%-d %B %Y"`" >> $@
+# @echo "@set UPDATED-MONTH `date +"%B %Y"`" >> $@
+MAINTAINERCLEANFILES = gprofng.info
+all: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) all-am
.SUFFIXES:
.SUFFIXES: .dvi .ps
@@ -506,7 +411,7 @@ mostlyclean-libtool:
clean-libtool:
-rm -rf .libs _libs
-bfd.info: bfd.texi $(bfd_TEXINFOS)
+gprofng.info: gprofng.texi $(srcdir)/version.texi $(gprofng_TEXINFOS)
$(AM_V_MAKEINFO)restore=: && backupdir="$(am__leading_dot)am$$$$" && \
rm -rf $$backupdir && mkdir $$backupdir && \
if ($(MAKEINFO) --version) >/dev/null 2>&1; then \
@@ -515,7 +420,7 @@ bfd.info: bfd.texi $(bfd_TEXINFOS)
done; \
else :; fi && \
if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
- -o $@ `test -f 'bfd.texi' || echo '$(srcdir)/'`bfd.texi; \
+ -o $@ `test -f 'gprofng.texi' || echo '$(srcdir)/'`gprofng.texi; \
then \
rc=0; \
else \
@@ -524,27 +429,47 @@ bfd.info: bfd.texi $(bfd_TEXINFOS)
fi; \
rm -rf $$backupdir; exit $$rc
-bfd.dvi: bfd.texi $(bfd_TEXINFOS)
+gprofng.dvi: gprofng.texi $(srcdir)/version.texi $(gprofng_TEXINFOS)
$(AM_V_TEXI2DVI)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
$(TEXI2DVI) $(AM_V_texinfo) --build-dir=$(@:.dvi=.t2d) -o $@ $(AM_V_texidevnull) \
- `test -f 'bfd.texi' || echo '$(srcdir)/'`bfd.texi
+ `test -f 'gprofng.texi' || echo '$(srcdir)/'`gprofng.texi
-bfd.pdf: bfd.texi $(bfd_TEXINFOS)
+gprofng.pdf: gprofng.texi $(srcdir)/version.texi $(gprofng_TEXINFOS)
$(AM_V_TEXI2PDF)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
$(TEXI2PDF) $(AM_V_texinfo) --build-dir=$(@:.pdf=.t2p) -o $@ $(AM_V_texidevnull) \
- `test -f 'bfd.texi' || echo '$(srcdir)/'`bfd.texi
+ `test -f 'gprofng.texi' || echo '$(srcdir)/'`gprofng.texi
-bfd.html: bfd.texi $(bfd_TEXINFOS)
+gprofng.html: gprofng.texi $(srcdir)/version.texi $(gprofng_TEXINFOS)
$(AM_V_MAKEINFO)rm -rf $(@:.html=.htp)
$(AM_V_at)if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
- -o $(@:.html=.htp) `test -f 'bfd.texi' || echo '$(srcdir)/'`bfd.texi; \
+ -o $(@:.html=.htp) `test -f 'gprofng.texi' || echo '$(srcdir)/'`gprofng.texi; \
then \
rm -rf $@ && mv $(@:.html=.htp) $@; \
else \
rm -rf $(@:.html=.htp); exit 1; \
fi
+$(srcdir)/version.texi: @MAINTAINER_MODE_TRUE@ $(srcdir)/stamp-vti
+$(srcdir)/stamp-vti: gprofng.texi $(top_srcdir)/configure
+ @(dir=.; test -f ./gprofng.texi || dir=$(srcdir); \
+ set `$(SHELL) $(srcdir)/mdate-sh $$dir/gprofng.texi`; \
+ echo "@set UPDATED $$1 $$2 $$3"; \
+ echo "@set UPDATED-MONTH $$2 $$3"; \
+ echo "@set EDITION $(VERSION)"; \
+ echo "@set VERSION $(VERSION)") > vti.tmp$$$$ && \
+ (cmp -s vti.tmp$$$$ $(srcdir)/version.texi \
+ || (echo "Updating $(srcdir)/version.texi" && \
+ cp vti.tmp$$$$ $(srcdir)/version.texi.tmp$$$$ && \
+ mv $(srcdir)/version.texi.tmp$$$$ $(srcdir)/version.texi)) && \
+ rm -f vti.tmp$$$$ $(srcdir)/version.texi.$$$$
+ @cp $(srcdir)/version.texi $@
+
+mostlyclean-vti:
+ -rm -f vti.tmp* $(srcdir)/version.texi.tmp*
+
+maintainer-clean-vti:
+@MAINTAINER_MODE_TRUE@ -rm -f $(srcdir)/stamp-vti $(srcdir)/version.texi
.dvi.ps:
$(AM_V_DVIPS)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
$(DVIPS) $(AM_V_texinfo) -o $@ $<
@@ -626,11 +551,11 @@ dist-info: $(INFO_DEPS)
done
mostlyclean-aminfo:
- -rm -rf bfd.t2d bfd.t2p
+ -rm -rf gprofng.t2d gprofng.t2p
clean-aminfo:
- -test -z "bfd.dvi bfd.pdf bfd.ps bfd.html" \
- || rm -rf bfd.dvi bfd.pdf bfd.ps bfd.html
+ -test -z "gprofng.dvi gprofng.pdf gprofng.ps gprofng.html" \
+ || rm -rf gprofng.dvi gprofng.pdf gprofng.ps gprofng.html
maintainer-clean-aminfo:
@list='$(INFO_DEPS)'; for i in $$list; do \
@@ -679,12 +604,15 @@ distdir: $(DISTFILES)
top_distdir="$(top_distdir)" distdir="$(distdir)" \
dist-info
check-am: all-am
-check: check-am
+check: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) check-am
all-am: Makefile $(INFO_DEPS)
installdirs:
for dir in "$(DESTDIR)$(infodir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
+install: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
@@ -704,18 +632,18 @@ install-strip:
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
fi
mostlyclean-generic:
- -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
- -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
clean: clean-am
@@ -731,7 +659,7 @@ dvi-am: $(DVIS)
html: html-am
-html-am: $(HTMLS) html-local
+html-am: $(HTMLS)
info: info-am
@@ -859,12 +787,12 @@ installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-aminfo \
- maintainer-clean-generic
+ maintainer-clean-generic maintainer-clean-vti
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-aminfo mostlyclean-generic \
- mostlyclean-libtool
+ mostlyclean-libtool mostlyclean-vti
pdf: pdf-am
@@ -877,19 +805,20 @@ ps-am: $(PSS)
uninstall-am: uninstall-dvi-am uninstall-html-am uninstall-info-am \
uninstall-pdf-am uninstall-ps-am
-.MAKE: install-am install-strip
+.MAKE: all check install install-am install-strip
.PHONY: all all-am check check-am clean clean-aminfo clean-generic \
clean-libtool cscopelist-am ctags-am dist-info distclean \
distclean-generic distclean-libtool distdir dvi dvi-am html \
- html-am html-local info info-am install install-am \
- install-data install-data-am install-dvi install-dvi-am \
- install-exec install-exec-am install-html install-html-am \
- install-info install-info-am install-man install-pdf \
- install-pdf-am install-ps install-ps-am install-strip \
- installcheck installcheck-am installdirs maintainer-clean \
- maintainer-clean-aminfo maintainer-clean-generic mostlyclean \
- mostlyclean-aminfo mostlyclean-generic mostlyclean-libtool pdf \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-aminfo maintainer-clean-generic \
+ maintainer-clean-vti mostlyclean mostlyclean-aminfo \
+ mostlyclean-generic mostlyclean-libtool mostlyclean-vti pdf \
pdf-am ps ps-am tags-am uninstall uninstall-am \
uninstall-dvi-am uninstall-html-am uninstall-info-am \
uninstall-pdf-am uninstall-ps-am
@@ -897,123 +826,11 @@ uninstall-am: uninstall-dvi-am uninstall-html-am uninstall-info-am \
.PRECIOUS: Makefile
-$(MKDOC): chew.stamp ; @true
-chew.stamp: $(srcdir)/chew.c
- $(CC_FOR_BUILD) -o chw$$$$$(EXEEXT_FOR_BUILD) $(CFLAGS_FOR_BUILD) \
- $(LDFLAGS_FOR_BUILD) $(H_CFLAGS) $(AM_CPPFLAGS) $(srcdir)/chew.c; \
- $(SHELL) $(srcdir)/../../move-if-change \
- chw$$$$$(EXEEXT_FOR_BUILD) $(MKDOC); \
- touch $@
-
-aoutx.texi: aoutx.stamp ; @true
-aoutx.stamp: $(srcdir)/../aoutx.h $(srcdir)/doc.str $(MKDOC)
- $(AM_V_GEN)$(REGEN_TEXI)
-
-archive.texi: archive.stamp ; @true
-archive.stamp: $(srcdir)/../archive.c $(srcdir)/doc.str $(MKDOC)
- $(AM_V_GEN)$(REGEN_TEXI)
-
-archures.texi: archures.stamp ; @true
-archures.stamp: $(srcdir)/../archures.c $(srcdir)/doc.str $(MKDOC)
- $(AM_V_GEN)$(REGEN_TEXI)
-
-# We use bfdt.texi, rather than bfd.texi, to avoid conflicting with
-# bfd.texi on an 8.3 filesystem.
-bfdt.texi: bfdt.stamp ; @true
-bfdt.stamp: $(srcdir)/../bfd.c $(srcdir)/doc.str $(MKDOC)
- $(AM_V_GEN)$(REGEN_TEXI)
-
-cache.texi: cache.stamp ; @true
-cache.stamp: $(srcdir)/../cache.c $(srcdir)/doc.str $(MKDOC)
- $(AM_V_GEN)$(REGEN_TEXI)
-
-coffcode.texi: coffcode.stamp ; @true
-coffcode.stamp: $(srcdir)/../coffcode.h $(srcdir)/doc.str $(MKDOC)
- $(AM_V_GEN)$(REGEN_TEXI)
-
-core.texi: core.stamp ; @true
-core.stamp: $(srcdir)/../corefile.c $(srcdir)/doc.str $(MKDOC)
- $(AM_V_GEN)$(REGEN_TEXI)
-
-elf.texi: elf.stamp ; @true
-elf.stamp: $(srcdir)/../elf.c $(srcdir)/doc.str $(MKDOC)
- $(AM_V_GEN)$(REGEN_TEXI)
-
-elfcode.texi: elfcode.stamp ; @true
-elfcode.stamp: $(srcdir)/../elfcode.h $(srcdir)/doc.str $(MKDOC)
- $(AM_V_GEN)$(REGEN_TEXI)
-
-mmo.texi: mmo.stamp ; @true
-mmo.stamp: $(srcdir)/../mmo.c $(srcdir)/doc.str $(MKDOC)
- $(AM_V_GEN)$(REGEN_TEXI)
-
-format.texi: format.stamp ; @true
-format.stamp: $(srcdir)/../format.c $(srcdir)/doc.str $(MKDOC)
- $(AM_V_GEN)$(REGEN_TEXI)
-
-libbfd.texi: libbfd.stamp ; @true
-libbfd.stamp: $(srcdir)/../libbfd.c $(srcdir)/doc.str $(MKDOC)
- $(AM_V_GEN)$(REGEN_TEXI)
-
-bfdio.texi: bfdio.stamp ; @true
-bfdio.stamp: $(srcdir)/../bfdio.c $(srcdir)/doc.str $(MKDOC)
- $(AM_V_GEN)$(REGEN_TEXI)
-
-bfdwin.texi: bfdwin.stamp ; @true
-bfdwin.stamp: $(srcdir)/../bfdwin.c $(srcdir)/doc.str $(MKDOC)
- $(AM_V_GEN)$(REGEN_TEXI)
-
-opncls.texi: opncls.stamp ; @true
-opncls.stamp: $(srcdir)/../opncls.c $(srcdir)/doc.str $(MKDOC)
- $(AM_V_GEN)$(REGEN_TEXI)
-
-reloc.texi: reloc.stamp ; @true
-reloc.stamp: $(srcdir)/../reloc.c $(srcdir)/doc.str $(MKDOC)
- $(AM_V_GEN)$(REGEN_TEXI)
-
-section.texi: section.stamp ; @true
-section.stamp: $(srcdir)/../section.c $(srcdir)/doc.str $(MKDOC)
- $(AM_V_GEN)$(REGEN_TEXI)
-
-syms.texi: syms.stamp ; @true
-syms.stamp: $(srcdir)/../syms.c $(srcdir)/doc.str $(MKDOC)
- $(AM_V_GEN)$(REGEN_TEXI)
-
-targets.texi: targets.stamp ; @true
-targets.stamp: $(srcdir)/../targets.c $(srcdir)/doc.str $(MKDOC)
- $(AM_V_GEN)$(REGEN_TEXI)
-
-init.texi: init.stamp ; @true
-init.stamp: $(srcdir)/../init.c $(srcdir)/doc.str $(MKDOC)
- $(AM_V_GEN)$(REGEN_TEXI)
-
-hash.texi: hash.stamp ; @true
-hash.stamp: $(srcdir)/../hash.c $(srcdir)/doc.str $(MKDOC)
- $(AM_V_GEN)$(REGEN_TEXI)
-
-linker.texi: linker.stamp ; @true
-linker.stamp: $(srcdir)/../linker.c $(srcdir)/doc.str $(MKDOC)
- $(AM_V_GEN)$(REGEN_TEXI)
-
-bfdver.texi: $(srcdir)/Makefile.in
- @echo "creating $@"; \
- echo "@set VERSION $(VERSION)" > bfdver.texi; \
- if test -n "$(PKGVERSION)"; then \
- echo "@set VERSION_PACKAGE $(PKGVERSION)" >> bfdver.texi; \
- fi; \
- echo "@set UPDATED `date '+%B %Y'`" >> bfdver.texi; \
- if test -n "$(REPORT_BUGS_TEXI)"; then \
- echo "@set BUGURL $(REPORT_BUGS_TEXI)" >> bfdver.texi; \
- fi
-
-# We want install to imply install-info as per GNU standards, despite the
-# cygnus option.
-install: install-info
-
-html-local: bfd/index.html
-bfd/index.html: bfd.texi $(bfd_TEXINFOS)
- $(AM_V_at)$(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) \
- --split=node -I$(srcdir) $(srcdir)/bfd.texi
+version.texi:
+ @echo "@set EDITION 1.0" > $@
+ @echo "@set VERSION 1.0" >> $@
+ @echo "@set UPDATED 22 February 2022" >> $@
+ @echo "@set UPDATED-MONTH February 2022" >> $@
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/gprofng/doc/fdl.texi b/gprofng/doc/fdl.texi
new file mode 100644
index 00000000000..8805f1a47d9
--- /dev/null
+++ b/gprofng/doc/fdl.texi
@@ -0,0 +1,506 @@
+@c The GNU Free Documentation License.
+@center Version 1.3, 3 November 2008
+
+@c This file is intended to be included within another document,
+@c hence no sectioning command or @node.
+
+@display
+Copyright @copyright{} 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+@uref{http://fsf.org/}
+
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+@end display
+
+@enumerate 0
+@item
+PREAMBLE
+
+The purpose of this License is to make a manual, textbook, or other
+functional and useful document @dfn{free} in the sense of freedom: to
+assure everyone the effective freedom to copy and redistribute it,
+with or without modifying it, either commercially or noncommercially.
+Secondarily, this License preserves for the author and publisher a way
+to get credit for their work, while not being considered responsible
+for modifications made by others.
+
+This License is a kind of ``copyleft'', which means that derivative
+works of the document must themselves be free in the same sense. It
+complements the GNU General Public License, which is a copyleft
+license designed for free software.
+
+We have designed this License in order to use it for manuals for free
+software, because free software needs free documentation: a free
+program should come with manuals providing the same freedoms that the
+software does. But this License is not limited to software manuals;
+it can be used for any textual work, regardless of subject matter or
+whether it is published as a printed book. We recommend this License
+principally for works whose purpose is instruction or reference.
+
+@item
+APPLICABILITY AND DEFINITIONS
+
+This License applies to any manual or other work, in any medium, that
+contains a notice placed by the copyright holder saying it can be
+distributed under the terms of this License. Such a notice grants a
+world-wide, royalty-free license, unlimited in duration, to use that
+work under the conditions stated herein. The ``Document'', below,
+refers to any such manual or work. Any member of the public is a
+licensee, and is addressed as ``you''. You accept the license if you
+copy, modify or distribute the work in a way requiring permission
+under copyright law.
+
+A ``Modified Version'' of the Document means any work containing the
+Document or a portion of it, either copied verbatim, or with
+modifications and/or translated into another language.
+
+A ``Secondary Section'' is a named appendix or a front-matter section
+of the Document that deals exclusively with the relationship of the
+publishers or authors of the Document to the Document's overall
+subject (or to related matters) and contains nothing that could fall
+directly within that overall subject. (Thus, if the Document is in
+part a textbook of mathematics, a Secondary Section may not explain
+any mathematics.) The relationship could be a matter of historical
+connection with the subject or with related matters, or of legal,
+commercial, philosophical, ethical or political position regarding
+them.
+
+The ``Invariant Sections'' are certain Secondary Sections whose titles
+are designated, as being those of Invariant Sections, in the notice
+that says that the Document is released under this License. If a
+section does not fit the above definition of Secondary then it is not
+allowed to be designated as Invariant. The Document may contain zero
+Invariant Sections. If the Document does not identify any Invariant
+Sections then there are none.
+
+The ``Cover Texts'' are certain short passages of text that are listed,
+as Front-Cover Texts or Back-Cover Texts, in the notice that says that
+the Document is released under this License. A Front-Cover Text may
+be at most 5 words, and a Back-Cover Text may be at most 25 words.
+
+A ``Transparent'' copy of the Document means a machine-readable copy,
+represented in a format whose specification is available to the
+general public, that is suitable for revising the document
+straightforwardly with generic text editors or (for images composed of
+pixels) generic paint programs or (for drawings) some widely available
+drawing editor, and that is suitable for input to text formatters or
+for automatic translation to a variety of formats suitable for input
+to text formatters. A copy made in an otherwise Transparent file
+format whose markup, or absence of markup, has been arranged to thwart
+or discourage subsequent modification by readers is not Transparent.
+An image format is not Transparent if used for any substantial amount
+of text. A copy that is not ``Transparent'' is called ``Opaque''.
+
+Examples of suitable formats for Transparent copies include plain
+@sc{ascii} without markup, Texinfo input format, La@TeX{} input
+format, @acronym{SGML} or @acronym{XML} using a publicly available
+@acronym{DTD}, and standard-conforming simple @acronym{HTML},
+PostScript or @acronym{PDF} designed for human modification. Examples
+of transparent image formats include @acronym{PNG}, @acronym{XCF} and
+@acronym{JPG}. Opaque formats include proprietary formats that can be
+read and edited only by proprietary word processors, @acronym{SGML} or
+@acronym{XML} for which the @acronym{DTD} and/or processing tools are
+not generally available, and the machine-generated @acronym{HTML},
+PostScript or @acronym{PDF} produced by some word processors for
+output purposes only.
+
+The ``Title Page'' means, for a printed book, the title page itself,
+plus such following pages as are needed to hold, legibly, the material
+this License requires to appear in the title page. For works in
+formats which do not have any title page as such, ``Title Page'' means
+the text near the most prominent appearance of the work's title,
+preceding the beginning of the body of the text.
+
+The ``publisher'' means any person or entity that distributes copies
+of the Document to the public.
+
+A section ``Entitled XYZ'' means a named subunit of the Document whose
+title either is precisely XYZ or contains XYZ in parentheses following
+text that translates XYZ in another language. (Here XYZ stands for a
+specific section name mentioned below, such as ``Acknowledgements'',
+``Dedications'', ``Endorsements'', or ``History''.) To ``Preserve the Title''
+of such a section when you modify the Document means that it remains a
+section ``Entitled XYZ'' according to this definition.
+
+The Document may include Warranty Disclaimers next to the notice which
+states that this License applies to the Document. These Warranty
+Disclaimers are considered to be included by reference in this
+License, but only as regards disclaiming warranties: any other
+implication that these Warranty Disclaimers may have is void and has
+no effect on the meaning of this License.
+
+@item
+VERBATIM COPYING
+
+You may copy and distribute the Document in any medium, either
+commercially or noncommercially, provided that this License, the
+copyright notices, and the license notice saying this License applies
+to the Document are reproduced in all copies, and that you add no other
+conditions whatsoever to those of this License. You may not use
+technical measures to obstruct or control the reading or further
+copying of the copies you make or distribute. However, you may accept
+compensation in exchange for copies. If you distribute a large enough
+number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and
+you may publicly display copies.
+
+@item
+COPYING IN QUANTITY
+
+If you publish printed copies (or copies in media that commonly have
+printed covers) of the Document, numbering more than 100, and the
+Document's license notice requires Cover Texts, you must enclose the
+copies in covers that carry, clearly and legibly, all these Cover
+Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
+the back cover. Both covers must also clearly and legibly identify
+you as the publisher of these copies. The front cover must present
+the full title with all words of the title equally prominent and
+visible. You may add other material on the covers in addition.
+Copying with changes limited to the covers, as long as they preserve
+the title of the Document and satisfy these conditions, can be treated
+as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit
+legibly, you should put the first ones listed (as many as fit
+reasonably) on the actual cover, and continue the rest onto adjacent
+pages.
+
+If you publish or distribute Opaque copies of the Document numbering
+more than 100, you must either include a machine-readable Transparent
+copy along with each Opaque copy, or state in or with each Opaque copy
+a computer-network location from which the general network-using
+public has access to download using public-standard network protocols
+a complete Transparent copy of the Document, free of added material.
+If you use the latter option, you must take reasonably prudent steps,
+when you begin distribution of Opaque copies in quantity, to ensure
+that this Transparent copy will remain thus accessible at the stated
+location until at least one year after the last time you distribute an
+Opaque copy (directly or through your agents or retailers) of that
+edition to the public.
+
+It is requested, but not required, that you contact the authors of the
+Document well before redistributing any large number of copies, to give
+them a chance to provide you with an updated version of the Document.
+
+@item
+MODIFICATIONS
+
+You may copy and distribute a Modified Version of the Document under
+the conditions of sections 2 and 3 above, provided that you release
+the Modified Version under precisely this License, with the Modified
+Version filling the role of the Document, thus licensing distribution
+and modification of the Modified Version to whoever possesses a copy
+of it. In addition, you must do these things in the Modified Version:
+
+@enumerate A
+@item
+Use in the Title Page (and on the covers, if any) a title distinct
+from that of the Document, and from those of previous versions
+(which should, if there were any, be listed in the History section
+of the Document). You may use the same title as a previous version
+if the original publisher of that version gives permission.
+
+@item
+List on the Title Page, as authors, one or more persons or entities
+responsible for authorship of the modifications in the Modified
+Version, together with at least five of the principal authors of the
+Document (all of its principal authors, if it has fewer than five),
+unless they release you from this requirement.
+
+@item
+State on the Title page the name of the publisher of the
+Modified Version, as the publisher.
+
+@item
+Preserve all the copyright notices of the Document.
+
+@item
+Add an appropriate copyright notice for your modifications
+adjacent to the other copyright notices.
+
+@item
+Include, immediately after the copyright notices, a license notice
+giving the public permission to use the Modified Version under the
+terms of this License, in the form shown in the Addendum below.
+
+@item
+Preserve in that license notice the full lists of Invariant Sections
+and required Cover Texts given in the Document's license notice.
+
+@item
+Include an unaltered copy of this License.
+
+@item
+Preserve the section Entitled ``History'', Preserve its Title, and add
+to it an item stating at least the title, year, new authors, and
+publisher of the Modified Version as given on the Title Page. If
+there is no section Entitled ``History'' in the Document, create one
+stating the title, year, authors, and publisher of the Document as
+given on its Title Page, then add an item describing the Modified
+Version as stated in the previous sentence.
+
+@item
+Preserve the network location, if any, given in the Document for
+public access to a Transparent copy of the Document, and likewise
+the network locations given in the Document for previous versions
+it was based on. These may be placed in the ``History'' section.
+You may omit a network location for a work that was published at
+least four years before the Document itself, or if the original
+publisher of the version it refers to gives permission.
+
+@item
+For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve
+the Title of the section, and preserve in the section all the
+substance and tone of each of the contributor acknowledgements and/or
+dedications given therein.
+
+@item
+Preserve all the Invariant Sections of the Document,
+unaltered in their text and in their titles. Section numbers
+or the equivalent are not considered part of the section titles.
+
+@item
+Delete any section Entitled ``Endorsements''. Such a section
+may not be included in the Modified Version.
+
+@item
+Do not retitle any existing section to be Entitled ``Endorsements'' or
+to conflict in title with any Invariant Section.
+
+@item
+Preserve any Warranty Disclaimers.
+@end enumerate
+
+If the Modified Version includes new front-matter sections or
+appendices that qualify as Secondary Sections and contain no material
+copied from the Document, you may at your option designate some or all
+of these sections as invariant. To do this, add their titles to the
+list of Invariant Sections in the Modified Version's license notice.
+These titles must be distinct from any other section titles.
+
+You may add a section Entitled ``Endorsements'', provided it contains
+nothing but endorsements of your Modified Version by various
+parties---for example, statements of peer review or that the text has
+been approved by an organization as the authoritative definition of a
+standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a
+passage of up to 25 words as a Back-Cover Text, to the end of the list
+of Cover Texts in the Modified Version. Only one passage of
+Front-Cover Text and one of Back-Cover Text may be added by (or
+through arrangements made by) any one entity. If the Document already
+includes a cover text for the same cover, previously added by you or
+by arrangement made by the same entity you are acting on behalf of,
+you may not add another; but you may replace the old one, on explicit
+permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License
+give permission to use their names for publicity for or to assert or
+imply endorsement of any Modified Version.
+
+@item
+COMBINING DOCUMENTS
+
+You may combine the Document with other documents released under this
+License, under the terms defined in section 4 above for modified
+versions, provided that you include in the combination all of the
+Invariant Sections of all of the original documents, unmodified, and
+list them all as Invariant Sections of your combined work in its
+license notice, and that you preserve all their Warranty Disclaimers.
+
+The combined work need only contain one copy of this License, and
+multiple identical Invariant Sections may be replaced with a single
+copy. If there are multiple Invariant Sections with the same name but
+different contents, make the title of each such section unique by
+adding at the end of it, in parentheses, the name of the original
+author or publisher of that section if known, or else a unique number.
+Make the same adjustment to the section titles in the list of
+Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections Entitled ``History''
+in the various original documents, forming one section Entitled
+``History''; likewise combine any sections Entitled ``Acknowledgements'',
+and any sections Entitled ``Dedications''. You must delete all
+sections Entitled ``Endorsements.''
+
+@item
+COLLECTIONS OF DOCUMENTS
+
+You may make a collection consisting of the Document and other documents
+released under this License, and replace the individual copies of this
+License in the various documents with a single copy that is included in
+the collection, provided that you follow the rules of this License for
+verbatim copying of each of the documents in all other respects.
+
+You may extract a single document from such a collection, and distribute
+it individually under this License, provided you insert a copy of this
+License into the extracted document, and follow this License in all
+other respects regarding verbatim copying of that document.
+
+@item
+AGGREGATION WITH INDEPENDENT WORKS
+
+A compilation of the Document or its derivatives with other separate
+and independent documents or works, in or on a volume of a storage or
+distribution medium, is called an ``aggregate'' if the copyright
+resulting from the compilation is not used to limit the legal rights
+of the compilation's users beyond what the individual works permit.
+When the Document is included in an aggregate, this License does not
+apply to the other works in the aggregate which are not themselves
+derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these
+copies of the Document, then if the Document is less than one half of
+the entire aggregate, the Document's Cover Texts may be placed on
+covers that bracket the Document within the aggregate, or the
+electronic equivalent of covers if the Document is in electronic form.
+Otherwise they must appear on printed covers that bracket the whole
+aggregate.
+
+@item
+TRANSLATION
+
+Translation is considered a kind of modification, so you may
+distribute translations of the Document under the terms of section 4.
+Replacing Invariant Sections with translations requires special
+permission from their copyright holders, but you may include
+translations of some or all Invariant Sections in addition to the
+original versions of these Invariant Sections. You may include a
+translation of this License, and all the license notices in the
+Document, and any Warranty Disclaimers, provided that you also include
+the original English version of this License and the original versions
+of those notices and disclaimers. In case of a disagreement between
+the translation and the original version of this License or a notice
+or disclaimer, the original version will prevail.
+
+If a section in the Document is Entitled ``Acknowledgements'',
+``Dedications'', or ``History'', the requirement (section 4) to Preserve
+its Title (section 1) will typically require changing the actual
+title.
+
+@item
+TERMINATION
+
+You may not copy, modify, sublicense, or distribute the Document
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense, or distribute it is void, and
+will automatically terminate your rights under this License.
+
+However, if you cease all violation of this License, then your license
+from a particular copyright holder is reinstated (a) provisionally,
+unless and until the copyright holder explicitly and finally
+terminates your license, and (b) permanently, if the copyright holder
+fails to notify you of the violation by some reasonable means prior to
+60 days after the cessation.
+
+Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, receipt of a copy of some or all of the same material does
+not give you any rights to use it.
+
+@item
+FUTURE REVISIONS OF THIS LICENSE
+
+The Free Software Foundation may publish new, revised versions
+of the GNU Free Documentation License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns. See
+@uref{http://www.gnu.org/copyleft/}.
+
+Each version of the License is given a distinguishing version number.
+If the Document specifies that a particular numbered version of this
+License ``or any later version'' applies to it, you have the option of
+following the terms and conditions either of that specified version or
+of any later version that has been published (not as a draft) by the
+Free Software Foundation. If the Document does not specify a version
+number of this License, you may choose any version ever published (not
+as a draft) by the Free Software Foundation. If the Document
+specifies that a proxy can decide which future versions of this
+License can be used, that proxy's public statement of acceptance of a
+version permanently authorizes you to choose that version for the
+Document.
+
+@item
+RELICENSING
+
+``Massive Multiauthor Collaboration Site'' (or ``MMC Site'') means any
+World Wide Web server that publishes copyrightable works and also
+provides prominent facilities for anybody to edit those works. A
+public wiki that anybody can edit is an example of such a server. A
+``Massive Multiauthor Collaboration'' (or ``MMC'') contained in the
+site means any set of copyrightable works thus published on the MMC
+site.
+
+``CC-BY-SA'' means the Creative Commons Attribution-Share Alike 3.0
+license published by Creative Commons Corporation, a not-for-profit
+corporation with a principal place of business in San Francisco,
+California, as well as future copyleft versions of that license
+published by that same organization.
+
+``Incorporate'' means to publish or republish a Document, in whole or
+in part, as part of another Document.
+
+An MMC is ``eligible for relicensing'' if it is licensed under this
+License, and if all works that were first published under this License
+somewhere other than this MMC, and subsequently incorporated in whole
+or in part into the MMC, (1) had no cover texts or invariant sections,
+and (2) were thus incorporated prior to November 1, 2008.
+
+The operator of an MMC Site may republish an MMC contained in the site
+under CC-BY-SA on the same site at any time before August 1, 2009,
+provided the MMC is eligible for relicensing.
+
+@end enumerate
+
+@page
+@heading ADDENDUM: How to use this License for your documents
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and
+license notices just after the title page:
+
+@smallexample
+@group
+ Copyright (C) @var{year} @var{your name}.
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.3
+ or any later version published by the Free Software Foundation;
+ with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
+ Texts. A copy of the license is included in the section entitled ``GNU
+ Free Documentation License''.
+@end group
+@end smallexample
+
+If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
+replace the ``with@dots{}Texts.'' line with this:
+
+@smallexample
+@group
+ with the Invariant Sections being @var{list their titles}, with
+ the Front-Cover Texts being @var{list}, and with the Back-Cover Texts
+ being @var{list}.
+@end group
+@end smallexample
+
+If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License,
+to permit their use in free software.
+
+@c Local Variables:
+@c ispell-local-pdict: "ispell-dict"
+@c End:
+
diff --git a/gprofng/doc/gprofng.texi b/gprofng/doc/gprofng.texi
new file mode 100644
index 00000000000..3e75a6c1fd6
--- /dev/null
+++ b/gprofng/doc/gprofng.texi
@@ -0,0 +1,3399 @@
+\input texinfo @c -*-texinfo-*-
+
+@c ----------------------------------------------------------------------------
+@c This is the Texinfo source file for the GPROFNG manual.
+@c
+@c Author: Ruud van der Pas
+@c ----------------------------------------------------------------------------
+
+@c %**start of header
+
+@setfilename gprofng.info
+@settitle GNU gprofng
+
+@c -- Set the indent for the @example command to 1 space, not 5 ---------------
+@exampleindent 1
+
+@c %**end of header
+
+@c -- Start a new chapter on a new, odd numbered, page ------------------------
+@setchapternewpage odd
+
+@c -- Merge all index entries into the Concepts Index -------------------------
+@syncodeindex fn cp
+@syncodeindex ky cp
+@syncodeindex pg cp
+@syncodeindex vr cp
+
+@c -- Macro definitions -------------------------------------------------------
+@c
+@c Since only letters can be used, we use capitalization to distinguish
+@c different words.
+@c ----------------------------------------------------------------------------
+@macro CollectApp{}
+@command{gprofng collect app}
+@end macro
+
+@macro DisplayHTML{}
+@command{gprofng display html}
+@end macro
+
+@macro DisplayText{}
+@command{gprofng display text}
+@end macro
+
+@macro Driver{}
+@command{gprofng}
+@end macro
+
+@macro ProductName{}
+gprofng
+@end macro
+
+@macro ToolName{}
+@command{gprofng}
+@end macro
+
+@macro IndexSubentry{label, string}
+@c -- @cindex \label\ @subentry \string\
+@cindex \label\, \string\
+@end macro
+
+@c -- Get the version information ---------------------------------------------
+@include version.texi
+
+@c -- Entry for the Info dir structure ----------------------------------------
+@ifnottex
+@dircategory Software development
+@direntry
+* gprofng: (gprofng). The next generation profiling tool for Linux
+@end direntry
+@end ifnottex
+
+@c -- Copyright stuff ---------------------------------------------------------
+@copying
+This document is the manual for @ProductName{}, last updated @value{UPDATED}.
+
+Copyright @copyright{} 2022 Free Software Foundation, Inc.
+
+@c -- @quotation
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License,
+Version 1.3 or any later version published by the Free Software
+Foundation; with no Invariant Sections, with no Front-Cover texts,
+and with no Back-Cover Texts. A copy of the license is included in the
+section entitled ``GNU Free Documentation License.''
+
+@c -- @end quotation
+@end copying
+
+@finalout
+@smallbook
+
+@c -- Define the title page ---------------------------------------------------
+@titlepage
+@title GNU gprofng
+@subtitle The next generation profiling tool for Linux
+@subtitle version @value{VERSION} (last updated @value{UPDATED})
+@author Ruud van der Pas
+@page
+@vskip 0pt plus 1filll
+@insertcopying
+@end titlepage
+
+@c -- Generate the Table of Contents ------------------------------------------
+@contents
+
+@c -- The Top node ------------------------------------------------------------
+@c Should contain a short summary, copying permissions and a master menu.
+@c ----------------------------------------------------------------------------
+@ifnottex
+@node Top
+@top GNU Gprofng
+
+@insertcopying
+@end ifnottex
+
+@ifinfo
+@c -- The menu entries --------------------------------------------------------
+
+@menu
+* Introduction:: About this manual.
+* Overview:: A brief overview of @ProductName{}.
+* A Mini Tutorial:: A short tutorial covering the key features.
+* Terminology:: Various concepts and some terminology explained.
+* Other Document Formats:: How to create this document in other formats.
+* Index:: The index.
+
+@detailmenu
+
+--- The Detailed Node Listing ---
+
+Introduction
+
+Overview
+
+* Main Features:: A high level overview.
+* Sampling versus Tracing:: The pros and cons of sampling versus tracing.
+* Steps Needed to Create a Profile:: How to create a profile.
+
+A Mini Tutorial
+
+* Getting Started:: The basics of profiling with @ProductName().
+* Support for Multithreading:: Commands specific to multithreaded applications.
+* Viewing Multiple Experiments:: Analyze multiple experiments.
+* Profile Hardware Event Counters:: How to use hardware event counters.
+* Java Profiling:: How to profile a Java application.
+
+Terminology
+
+* The Program Counter:: What is a Program Counter?
+* Inclusive and Exclusive Metrics:: An explanation of inclusive and exclusive metrics.
+* Metric Definitions:: Definitions associated with metrics.
+* The Viewmode:: Select the way call stacks are presented.
+* The Selection List:: How to define a selection.
+* Load Objects and Functions:: The components in an application.
+* The Concept of a CPU in @ProductName{}:: The definition of a CPU.
+* Hardware Event Counters Explained:: What are event counters?
+* apath:: Our generic definition of a path.
+
+@c -- Index
+
+@end detailmenu
+@end menu
+@end ifinfo
+
+@c -- A new node --------------------------------------------------------------
+@node Introduction
+@chapter Introduction
+@c ----------------------------------------------------------------------------
+The @ProductName{} tool is the next generation profiler for Linux. It consists
+of various commands to generate and display profile information.
+
+This manual starts with a tutorial how to create and interpret a profile. This
+part is highly practical and has the goal to get users up to speed as quickly
+as possible. As soon as possible, we would like to show you how to get your
+first profile on your screen.
+
+This is followed by more examples, covering many of the features. At the
+end of this tutorial, you should feel confident enough to tackle the more
+complex tasks.
+
+In a future update a more formal reference manual will be included as well.
+Since even in this tutorial we use certain terminology, we have included a
+chapter with descriptions at the end. In case you encounter unfamiliar
+wordings or terminology, please check this chapter.
+
+One word of caution. In several cases we had to somewhat tweak the screen
+output in order to make it fit. This is why the output may look somewhat
+different when you try things yourself.
+
+For now, we wish you a smooth profiling experience with @ProductName{} and
+good luck tackling performance bottlenecks.
+
+@c -- A new node --------------------------------------------------------------
+@c cccccc @node A Brief Overview of @ProductName{}
+@node Overview
+@chapter A Brief Overview of @ProductName{}
+@c ----------------------------------------------------------------------------
+
+@menu
+* Main Features:: A high level overview.
+* Sampling versus Tracing:: The pros and cons of sampling versus tracing.
+* Steps Needed to Create a Profile:: How to create a profile.
+@end menu
+
+Before we cover this tool in quite some detail, we start with a brief overview
+of what it is, and the main features. Since we know that many of you would
+like to get started rightaway, already in this first chapter we explain the
+basics of profiling with @ToolName{}.
+
+@c ----------------------------------------------------------------------------
+@c TBD Review this text. Probably be more specific on the gcc releases and
+@c processor specifics.
+@c ----------------------------------------------------------------------------
+
+@c -- A new node --------------------------------------------------------------
+@node Main Features
+@section Main Features
+@c ----------------------------------------------------------------------------
+
+@noindent
+These are the main features of the @ProductName{} tool:
+
+@itemize @bullet
+
+@item
+Profiling is supported for an application written in C, C++, Java, or Scala.
+
+@c TBD Java: up to 1.8 full support, support other than for modules
+
+@item
+Shared libraries are supported. The information is presented at the instruction
+level.
+
+@item
+The following multithreading programming models are supported: Pthreads,
+OpenMP, and Java threads.
+
+@item
+This tool works with unmodified production level executables. There is no need to
+recompile the code, but if the @code{-g} option has been used when building
+the application, source line level information is available.
+
+@item
+The focus is on support for code generated with the @code{gcc} compiler, but
+there is some limited support for the @code{icc} compiler as well. Future
+improvements and enhancements will focus on @code{gcc} though.
+
+@item
+Processors from Intel, AMD, and Arm are supported, but the level of support
+depends on the architectural details. In particular, hardware event counters
+may not be supported.
+
+@item
+Several views into the data are supported. For example, a function overview
+where the time is spent, but also a source line, disassembly, call tree and
+a caller-callees overview are available.
+
+@item
+Through filters, the user can zoom in on an area of interest.
+
+@item
+Two or more profiles can be aggregated, or used in a comparison. This comparison
+can be obtained at the function, source line, and disassembly level.
+
+@item
+Through a scripting language, and customization of the metrics shown,
+the generation and creation of a profile can be fully automated and provide
+tailored output.
+
+@end itemize
+
+@c -- A new node --------------------------------------------------------------
+@node Sampling versus Tracing
+@section Sampling versus Tracing
+@c ----------------------------------------------------------------------------
+
+A key difference with some other profiling tools is that the main data
+collection command @CollectApp{} mostly uses
+@cindex Program Counter sampling
+@cindex PC sampling
+Program Counter (PC) sampling
+under the hood.
+
+With @emph{sampling}, the executable is stopped at regular intervals. Each time
+it is halted, key information is gathered and stored. This includes the Program
+Counter that keeps track of where the execution is. Hence the name.
+
+Together with operational
+data, this information is stored in the experiment directory and can be
+viewed in the second phase.
+
+For example, the PC information is used to derive where the program was when
+it was halted. Since the sampling interval is known, it is relatively easy to
+derive how much time was spent in the various parts of the program.
+
+The opposite technique is generally referred to as @emph{tracing}. With
+tracing, the target is instrumented with specific calls that collect the
+requested information.
+
+These are some of the pros and cons of PC sampling verus tracing:
+
+@itemize
+
+@item
+Since there is no need to recompile, existing executables can be used
+and the profile measures the behaviour of exactly the same executable that is
+used in production runs.
+
+With sampling, one inherently profiles a different executable because
+the calls to the instrumentation library may affect the compiler optimizations
+and run time behaviour.
+
+@item
+With sampling, there are very few restrictions on what can be profiled and even without
+access to the source code, a basic profile can be made.
+
+@item
+A downside of sampling is that, depending on the sampling frequency, small
+functions may be missed or not captured accurately. Although this is rare,
+this may happen and is the reason why the user has control over the sampling rate.
+
+@item
+While tracing produces precise information, sampling is statistical in nature.
+As a result, small variations may occur across seemingly identical runs. We
+have not observed more than a few percent deviation though. Especially if
+the target job executed for a sufficiently long time.
+
+@item
+With sampling, it is not possible to get an accurate count how often
+functions are called.
+
+@end itemize
+
+@c -- A new node --------------------------------------------------------------
+@node Steps Needed to Create a Profile
+@section Steps Needed to Create a Profile
+@c ----------------------------------------------------------------------------
+
+Creating a profile takes two steps. First the profile data needs to be
+generated. This is followed by a viewing step to create a report from the
+information that has been gathered.
+
+Every @ProductName{} command starts with @ToolName{}, the name of the driver. This is followed
+by a keyword to define the high level functionality. Depending on this
+keyword, a third qualifier may be needed to further narrow down the request.
+This combination is then followed by options that are specific to the functionality
+desired.
+
+The command to gather, or ``collect'', the performance data is called
+@CollectApp{}. Aside from numerous options, this command takes the name
+of the target executable as an input parameter.
+
+Upon completion of the run, the performance data can be
+found in the newly created
+@cindex Experiment directory
+experiment directory.
+
+Unless explicitly specified otherwise, a default
+name for this directory is chosen. The name is @code{test.<n>.er} where
+@code{n} is the first integer number not in use yet for such a name.
+
+For example, the first time @CollectApp{} is invoked, an experiment
+directory with the name @code{test.1.er} is created.
+
+Upon a subsequent invocation of @CollectApp{} in the same directory,
+an experiment directory with the name @code{test.2.er} will be created,
+and so forth.
+
+Note that @CollectApp{} supports an option to explicitly name the experiment directory.
+Outside of the restriction that the name of this directory has to end
+with @code{.er}, any valid directory name can be used for this.
+
+Now that we have the performance data, the next step is to display it.
+
+@pindex @DisplayText{}
+The most commonly used command to view the performance information is
+@DisplayText{}. This is a very extensive and customizable tool that
+produces the information in ASCII format.
+
+@pindex @DisplayHTML{}
+Another option is to use @DisplayHTML{}. This tool generates a directory with
+files in html format. These can be viewed in a browser, allowing for easy
+navigation through the profile data.
+
+@c -- A new node --------------------------------------------------------------
+@node A Mini Tutorial
+@chapter A Mini Tutorial
+@c ----------------------------------------------------------------------------
+
+In this chapter we present and discuss the main functionality of @ToolName{}.
+This will be a practical approach, using an example code to generate profile
+data and show how to get various performance reports.
+
+@menu
+* Getting Started:: The basics of profiling with @ProductName().
+* Support for Multithreading:: Commands specific to multithreaded applications.
+* Viewing Multiple Experiments:: Analyze multiple experiments.
+* Profile Hardware Event Counters:: How to use hardware event counters.
+* Java Profiling:: How to profile a Java application.
+@end menu
+
+@c -- A new node --------------------------------------------------------------
+@node Getting Started
+@section Getting Started
+@c ----------------------------------------------------------------------------
+
+The information presented here provides a good and common basis for many
+profiling tasks, but there are more features that you may want to leverage.
+
+These are covered in subsequent sections in this chapter.
+
+@menu
+* The Example Program:: A description of the example program used.
+* A First Profile:: How to get the first profile.
+* The Source Code View:: Display the metrics in the source code.
+* The Disassembly View:: Display the metrics at the instruction level.
+* Display and Define the Metrics:: An example how to customize the metrics.
+* A First Customization of the Output:: An example how to customize the output.
+* Name the Experiment Directory:: Change the name of the experiment directory.
+* Control the Number of Lines in the Output:: Change the number of lines in the tables.
+* Sorting the Performance Data:: How to set the metric to sort by.
+* Scripting:: Use a script to execute the commands.
+* A More Elaborate Example:: An example of customization.
+* The Call Tree:: Display the dynamic call tree.
+* More Information on the Experiment:: How to get additional statistics.
+* Control the Sampling Frequency:: How to control the sampling granularity.
+* Information on Load Objects:: How to get more information on load objects.
+@end menu
+
+@c -- A new node --------------------------------------------------------------
+@node The Example Program
+@subsection The Example Program
+@c ----------------------------------------------------------------------------
+
+Throughout this guide we use the same example C code that implements the
+multiplication of a vector of length @math{n} by an @math{m} by @math{n}
+matrix. The result is stored in a vector of length @math{m}.
+@cindex Pthreads
+@cindex Posix Threads
+The algorithm has been parallelized using Posix Threads, or Pthreads for short.
+
+The code was built using the @code{gcc} compiler and the name of the executable
+is
+@cindex mxv-pthreads.exe
+mxv-pthreads.exe.
+
+The matrix sizes can be set through the @code{-m} and @code{-n} options. The
+number of threads is set with the @code{-t} option. To increase the duration
+of the run, the multiplication is executed repeatedly.
+
+This is an example that multiplies a @math{3000} by @math{2000} matrix with
+a vector of length @math{2000} using @math{2} threads:
+
+@smallexample
+@verbatim
+$ ./mxv-pthreads.exe -m 3000 -n 2000 -t 2
+mxv: error check passed - rows = 3000 columns = 2000 threads = 2
+$
+@end verbatim
+@end smallexample
+
+The program performs an internal check to verify the results are correct.
+The result of this check is printed, followed by the matrix sizes and the
+number of threads used.
+
+@c -- A new node --------------------------------------------------------------
+@node A First Profile
+@subsection A First Profile
+@c ----------------------------------------------------------------------------
+
+The first step is to collect the performance data. It is important to remember
+that much more information is gathered than may be shown by default. Often a
+single data collection run is sufficient to get a lot of insight.
+
+The @CollectApp{} command is used for the data collection. Nothing needs to be
+changed in the way the application is executed. The only difference is that it
+is now run under control of the tool, as shown below:
+
+@cartouche
+@smallexample
+$ gprofng collect app ./mxv.pthreads.exe -m 3000 -n 2000 -t 1
+@end smallexample
+@end cartouche
+
+This command produces the following output:
+
+@smallexample
+@verbatim
+Creating experiment database test.1.er (Process ID: 2416504) ...
+mxv: error check passed - rows = 3000 columns = 2000 threads = 1
+@end verbatim
+@end smallexample
+
+We see the message that a directory with the name @code{test.1.er}
+has been created.
+The application then completes as usual and we have our first experiment
+directory that can be analyzed.
+
+The tool we use for this is called @DisplayText{}. It takes the name of
+the experiment directory as an argument.
+
+@cindex Interpreter mode
+If invoked this way, the tool starts in the interactive @emph{interpreter} mode.
+While in this environment, commands can be given and the tool responds. This is
+illustrated below:
+
+@smallexample
+@verbatim
+$ gprofng display text test.1.er
+Warning: History and command editing is not supported on this system.
+(gp-display-text) quit
+$
+@end verbatim
+@end smallexample
+
+@cindex Command line mode
+While useful in certain cases, we prefer to use this tool in command line mode,
+by specifying the commands to be issued when invoking the tool. The way to do
+this is to prepend the command with a hyphen (@code{-}) if used on the command
+line.
+
+For example,
+@IndexSubentry{Commands, @code{functions}}
+with the @code{functions} command we request a list of the functions that
+have been executed and their respective CPU times:
+
+@cartouche
+@smallexample
+$ gprofng display text -functions test.1.er
+@end smallexample
+@end cartouche
+
+@smallexample
+@verbatim
+$ gprofng display text -functions test.1.er
+Functions sorted by metric: Exclusive Total CPU Time
+
+Excl. Incl. Name
+Total Total
+CPU sec. CPU sec.
+2.272 2.272 <Total>
+2.160 2.160 mxv_core
+0.047 0.103 init_data
+0.030 0.043 erand48_r
+0.013 0.013 __drand48_iterate
+0.013 0.056 drand48
+0.008 0.010 _int_malloc
+0.001 0.001 brk
+0.001 0.002 sysmalloc
+0. 0.001 __default_morecore
+0. 0.113 __libc_start_main
+0. 0.010 allocate_data
+0. 2.160 collector_root
+0. 2.160 driver_mxv
+0. 0.113 main
+0. 0.010 malloc
+0. 0.001 sbrk
+@end verbatim
+@end smallexample
+
+As easy and simple as these steps are, we do have a first profile of our program!
+There are three columns. The first two contain the
+@cindex Total CPU time
+@emph{Total CPU Time},
+which
+is the sum of the user and system time. @xref{Inclusive and Exclusive Metrics}
+for an explanation of ``exclusive'' and ``inclusive'' times.
+
+The first line echoes the metric that is used to sort the output. By default, this
+is the exclusive CPU time, but the sort metric can be changed by the user.
+
+We then see three columns with the exclusive and inclusive CPU times, plus the
+name of the function.
+
+@IndexSubentry{Miscellaneous, @code{<Total>}}
+The function with the name @code{<Total>} is not a user function, but is introduced
+by @ToolName{} and is used to display the accumulated metric values. In this case,
+we see that the total CPU time of this job was @code{2.272} seconds.
+
+With @code{2.160} seconds, function @code{mxv_core} is the most time
+consuming function. It is also a leaf function.
+
+The next function in the list is @code{init_data}. Although the CPU time spent in
+this part is negligible, this is an interesting entry because the inclusive CPU
+time of @code{0.103} seconds is higher than the exclusive CPU time of @code{0.047}
+seconds. Clearly it is calling another function,
+or even more than one function.
+@xref{The Call Tree} for the details how to get more information on this.
+
+The function @code{collector_root} does not look familiar. It is one of the internal
+functions used by @CollectApp{} and can be ignored. While the inclusive time is high,
+the exclusive time is zero. This means it doesn't contribute to the performance.
+
+The question is how we know where this function originates from? There is a very useful
+command to get more details on a function. @xref{Information on Load Objects}.
+
+@c -- A new node --------------------------------------------------------------
+@node The Source Code View
+@subsection The Source Code View
+@c ----------------------------------------------------------------------------
+
+In general, you would like to focus the tuning efforts on the most time
+consuming part(s) of the program. In this case that is easy, since 2.160
+seconds on a total of 2.272 seconds is spent in function @code{mxv_core}.
+That is 95% of the total and it is time to dig deeper and look
+@cindex Source level timings
+at the time distribution at the source code level.
+
+@IndexSubentry{Commands, @code{source}}
+The @code{source} command is used to accomplish this. It takes the name of the
+function, not the source filename, as an argument. This is demonstrated
+below, where the @DisplayText{} command is used to show the annotated
+source listing of function @code{mxv_core}.
+
+Please note that the source code has to be compiled with the @code{-g}
+option in order for the source code feature to work. Otherwise the
+location can not be determined.
+
+@cartouche
+@smallexample
+$ gprofng display text -source mxv_core test.1.er
+@end smallexample
+@end cartouche
+
+The slightly modified output is as follows:
+
+@smallexample
+@verbatim
+Source file: <apath>/mxv.c
+Object file: mxv-pthreads.exe (found as test.1.er/archives/...)
+Load Object: mxv-pthreads.exe (found as test.1.er/archives/...)
+
+ Excl. Incl.
+ Total Total
+ CPU sec. CPU sec.
+
+ <lines deleted>
+ <Function: mxv_core>
+ 0. 0. 32. void __attribute__ ((noinline))
+ mxv_core (
+ uint64_t row_index_start,
+ uint64_t row_index_end,
+ uint64_t m, uint64_t n,
+ double **restrict A,
+ double *restrict b,
+ double *restrict c)
+ 0. 0. 33. {
+ 0. 0. 34. for (uint64_t i=row_index_start;
+ i<=row_index_end; i++) {
+ 0. 0. 35. double row_sum = 0.0;
+## 1.687 1.687 36. for (int64_t j=0; j<n; j++)
+ 0.473 0.473 37. row_sum += A[i][j]*b[j];
+ 0. 0. 38. c[i] = row_sum;
+ 39. }
+ 0. 0. 40. }
+@end verbatim
+@end smallexample
+
+The first three lines provide information on the location of the source file,
+the object file and the load object (@xref{Load Objects and Functions}).
+
+Function @code{mxv_core} is part of a source file that has other functions
+as well. These functions will be shown, but without timing information. They
+have been removed in the output shown above.
+
+This is followed by the annotated source code listing. The selected metrics
+are shown first, followed by a source line number, and the source code.
+@IndexSubentry{Miscellaneous ,@code{##}}
+The most time consuming line(s) are marked with the @code{##} symbol. In
+this way they are easier to find.
+
+What we see is that all of the time is spent in lines 36-37.
+
+@IndexSubentry{Commands, @code{lines}}
+A related command sometimes comes handy as well. It is called @code{lines}
+and displays a list of the source lines and their metrics, ordered according
+to the current sort metric (@xref{Sorting the Performance Data}).
+
+Below the command and the output. For lay-out reasons, only the top 10 is
+shown here and the last part of the text on some lines has been replaced
+by dots.
+
+@cartouche
+@smallexample
+$ gprofng display text -lines test.1.er
+@end smallexample
+@end cartouche
+
+@smallexample
+@verbatim
+Lines sorted by metric: Exclusive Total CPU Time
+
+Excl. Incl. Name
+Total Total
+CPU sec. CPU sec.
+2.272 2.272 <Total>
+1.687 1.687 mxv_core, line 36 in "mxv.c"
+0.473 0.473 mxv_core, line 37 in "mxv.c"
+0.032 0.088 init_data, line 72 in "manage_data.c"
+0.030 0.043 <Function: erand48_r, instructions without line numbers>
+0.013 0.013 <Function: __drand48_iterate, instructions without ...>
+0.013 0.056 <Function: drand48, instructions without line numbers>
+0.012 0.012 init_data, line 77 in "manage_data.c"
+0.008 0.010 <Function: _int_malloc, instructions without ...>
+0.003 0.003 init_data, line 71 in "manage_data.c"
+@end verbatim
+@end smallexample
+
+What this overview immediately highlights is that the next most time consuming
+source line takes 0.032 seconds only. With an inclusive time of 0.088 seconds,
+it is also clear that this branch of the code does not impact the performance.
+
+@c -- A new node --------------------------------------------------------------
+@node The Disassembly View
+@subsection The Disassembly View
+@c ----------------------------------------------------------------------------
+
+The source view is very useful to obtain more insight where the time is spent,
+but sometimes this is not sufficient. This is when the disassembly view comes
+in. It is activated with the
+@IndexSubentry{Commands, @code{disasm}}
+@code{disasm}
+command and as with the source view, it displays an annotated listing. In this
+@cindex Instruction level timings
+case it shows the instructions with the metrics, interleaved with the
+source lines. The
+instructions have a reference in square brackets (@code{[} and @code{]})
+to the source line they correspond to.
+
+@noindent
+This is what we get for our example:
+
+@cartouche
+@smallexample
+$ gprofng display text -disasm mxv_core test.1.er
+@end smallexample
+@end cartouche
+
+@smallexample
+@verbatim
+Source file: <apath>/mxv.c
+Object file: mxv-pthreads.exe (found as test.1.er/archives/...)
+Load Object: mxv-pthreads.exe (found as test.1.er/archives/...)
+
+ Excl. Incl.
+ Total Total
+ CPU sec. CPU sec.
+
+ <lines deleted>
+ 32. void __attribute__ ((noinline))
+ mxv_core (
+ uint64_t row_index_start,
+ uint64_t row_index_end,
+ uint64_t m, uint64_t n,
+ double **restrict A,
+ double *restrict b,
+ double *restrict c)
+ 33. {
+ <Function: mxv_core>
+ 0. 0. [33] 4021ba: mov 0x8(%rsp),%r10
+ 34. for (uint64_t i=row_index_start;
+ i<=row_index_end; i++) {
+ 0. 0. [34] 4021bf: cmp %rsi,%rdi
+ 0. 0. [34] 4021c2: jbe 0x37
+ 0. 0. [34] 4021c4: ret
+ 35. double row_sum = 0.0;
+ 36. for (int64_t j=0; j<n; j++)
+ 37. row_sum += A[i][j]*b[j];
+ 0. 0. [37] 4021c5: mov (%r8,%rdi,8),%rdx
+ 0. 0. [36] 4021c9: mov $0x0,%eax
+ 0. 0. [35] 4021ce: pxor %xmm1,%xmm1
+ 0.002 0.002 [37] 4021d2: movsd (%rdx,%rax,8),%xmm0
+ 0.096 0.096 [37] 4021d7: mulsd (%r9,%rax,8),%xmm0
+ 0.375 0.375 [37] 4021dd: addsd %xmm0,%xmm1
+## 1.683 1.683 [36] 4021e1: add $0x1,%rax
+ 0.004 0.004 [36] 4021e5: cmp %rax,%rcx
+ 0. 0. [36] 4021e8: jne 0xffffffffffffffea
+ 38. c[i] = row_sum;
+ 0. 0. [38] 4021ea: movsd %xmm1,(%r10,%rdi,8)
+ 0. 0. [34] 4021f0: add $0x1,%rdi
+ 0. 0. [34] 4021f4: cmp %rdi,%rsi
+ 0. 0. [34] 4021f7: jb 0xd
+ 0. 0. [35] 4021f9: pxor %xmm1,%xmm1
+ 0. 0. [36] 4021fd: test %rcx,%rcx
+ 0. 0. [36] 402200: jne 0xffffffffffffffc5
+ 0. 0. [36] 402202: jmp 0xffffffffffffffe8
+ 39. }
+ 40. }
+ 0. 0. [40] 402204: ret
+@end verbatim
+@end smallexample
+
+For each instruction, the timing values are given and we can exactly which ones
+are the most expensive. As with the source level view, the most expensive
+instructions are market with the @code{##} symbol.
+
+As illustrated below and similar to the @code{lines} command, we can get
+an overview of the instructions executed by using the
+@IndexSubentry{Commands, @code{pcs}}
+@code{pcs}
+command.
+
+@noindent
+Below the command and the output, which again has been restricted
+to 10 lines:
+
+@cartouche
+@smallexample
+$ gprofng display text -pcs test.1.er
+@end smallexample
+@end cartouche
+
+@smallexample
+@verbatim
+PCs sorted by metric: Exclusive Total CPU Time
+
+Excl. Incl. Name
+Total Total
+CPU sec. CPU sec.
+2.272 2.272 <Total>
+1.683 1.683 mxv_core + 0x00000027, line 36 in "mxv.c"
+0.375 0.375 mxv_core + 0x00000023, line 37 in "mxv.c"
+0.096 0.096 mxv_core + 0x0000001D, line 37 in "mxv.c"
+0.027 0.027 init_data + 0x000000BD, line 72 in "manage_data.c"
+0.012 0.012 init_data + 0x00000117, line 77 in "manage_data.c"
+0.008 0.008 _int_malloc + 0x00000A45
+0.007 0.007 erand48_r + 0x00000062
+0.006 0.006 drand48 + 0x00000000
+0.005 0.005 __drand48_iterate + 0x00000005
+@end verbatim
+@end smallexample
+
+@c -- A new node --------------------------------------------------------------
+@node Display and Define the Metrics
+@subsection Display and Define the Metrics
+@c ----------------------------------------------------------------------------
+
+The default metrics shown by @DisplayText{} are useful, but there is more
+recorded than displayed. We can customize the values shown by defining the
+metrics ourselves.
+
+@IndexSubentry{Commands, @code{metric_list}}
+There are two commands related to changing the metrics shown: @code{metric_list}
+and
+@IndexSubentry{Commands, @code{metrics}}
+@code{metrics}.
+
+The first command shows the metrics in use, plus all the metrics that have
+been stored as part of the experiment. The second command may be used to
+define the metric list.
+
+In our example we get the following values for the metrics:
+
+@IndexSubentry{Commands, @code{metric_list}}
+@cartouche
+@smallexample
+$ gprofng display text -metric_list test.1.er
+@end smallexample
+@end cartouche
+
+@smallexample
+@verbatim
+Current metrics: e.totalcpu:i.totalcpu:name
+Current Sort Metric: Exclusive Total CPU Time ( e.totalcpu )
+Available metrics:
+ Exclusive Total CPU Time: e.%totalcpu
+ Inclusive Total CPU Time: i.%totalcpu
+ Size: size
+ PC Address: address
+ Name: name
+@end verbatim
+@end smallexample
+
+This shows the metrics currently in use, the metric that is used to sort
+the data and all the metrics that have been recorded, but are not necessarily
+shown.
+
+@cindex Default metrics
+In this case, the default metrics are set to the exclusive and inclusive
+total CPU times, plus the name of the function, or load object.
+
+@IndexSubentry{Commands, @code{metrics}}
+The @code{metrics} command is used to define the metrics that need to be
+displayed.
+
+For example, to display the exclusive total CPU time, both as a number and a
+percentage, use the following metric definition: @code{e.%totalcpu}
+
+Since the metrics can be tailored for different views, there is a way
+to reset them to the default. This is done through the special keyword
+@code{default}.
+
+@c -- A new node --------------------------------------------------------------
+@node A First Customization of the Output
+@subsection A First Customization of the Output
+@c ----------------------------------------------------------------------------
+
+With the information just given, we can customize the function overview.
+For sake of the example, we would like to display the name of the function
+first, followed by the exclusive CPU time, given as an absolute number and
+a percentage.
+
+Note that the commands are parsed in order of appearance. This is why we
+need to define the metrics @emph{before} requesting the function overview:
+
+@cartouche
+@smallexample
+$ gprofng display text -metrics name:e.%totalcpu -functions test.1.er
+@end smallexample
+@end cartouche
+
+@smallexample
+@verbatim
+Current metrics: name:e.%totalcpu
+Current Sort Metric: Exclusive Total CPU Time ( e.%totalcpu )
+Functions sorted by metric: Exclusive Total CPU Time
+
+Name Excl. Total
+ CPU
+ sec. %
+ <Total> 2.272 100.00
+ mxv_core 2.160 95.04
+ init_data 0.047 2.06
+ erand48_r 0.030 1.32
+ __drand48_iterate 0.013 0.57
+ drand48 0.013 0.57
+ _int_malloc 0.008 0.35
+ brk 0.001 0.04
+ sysmalloc 0.001 0.04
+ __default_morecore 0. 0.
+ __libc_start_main 0. 0.
+ allocate_data 0. 0.
+ collector_root 0. 0.
+ driver_mxv 0. 0.
+ main 0. 0.
+ malloc 0. 0.
+ sbrk 0. 0.
+@end verbatim
+@end smallexample
+
+This was a first and simple example how to customize the output. Note that we
+did not rerun our profiling job and merely modified the display settings.
+Below we will show other and also more advanced examples of customization.
+
+
+@c -- A new node --------------------------------------------------------------
+@node Name the Experiment Directory
+@subsection Name the Experiment Directory
+@c ----------------------------------------------------------------------------
+
+When using @CollectApp{}, the default names for experiments work fine, but
+they are quite generic. It is often more convenient to select a more
+descriptive name. For example, one that reflects conditions for the experiment
+conducted.
+
+For this, the mutually exclusive @code{-o} and @code{-O} options come in handy.
+Both may be used to provide a name for the experiment directory, but the
+behaviour of @CollectApp{} is different.
+
+With the
+@IndexSubentry{Options, @code{-o}}
+@code{-o}
+option, an existing experiment directory is not overwritten. You either
+need to explicitly remove an existing directory first, or use a name that is not
+in use yet.
+
+This is in contrast with the behaviour for the
+ @IndexSubentry{Options, @code{-O}}
+@code{-O}
+option. Any existing (experiment) directory with the same name is silently
+overwritten.
+
+Be aware that the name of the experiment directory has to end with @code{.er}.
+
+@c -- A new node --------------------------------------------------------------
+@node Control the Number of Lines in the Output
+@subsection Control the Number of Lines in the Output
+@c ----------------------------------------------------------------------------
+
+@IndexSubentry{Commands, @code{limit}}
+The @code{limit <n>} command can be used to control the number of lines printed
+in various overviews, including the function view, but it also takes effect
+for other display commands, like @code{lines}.
+
+The argument @code{<n>} should be a positive integer number. It sets the number
+of lines in the function view. A value of zero resets the limit to the default.
+
+Be aware that the pseudo-function @code{<Total>} counts as a regular function.
+For example @code{limit 10} displays nine user level functions.
+
+@c -- A new node --------------------------------------------------------------
+@node Sorting the Performance Data
+@subsection Sorting the Performance Data
+@c ----------------------------------------------------------------------------
+
+@IndexSubentry{Commands, @code{sort}}
+The @code{sort <key>} command sets the key to be used when sorting the
+performance data.
+
+The key is a valid metric definition, but the
+@cindex Visibility field
+visibility field
+(@xref{Metric Definitions})
+in the metric
+definition is ignored since this does not affect the outcome of the sorting
+operation.
+For example if we set the sort key to @code{e.totalcpu}, the values
+will be sorted in descending order with respect to the exclusive total
+CPU time.
+
+The data can be sorted in reverse order by prepending the metric definition
+with a minus (@code{-}) sign. For example @code{sort -e.totalcpu}.
+
+A default metric for the sort operation has been defined and since this is
+a persistent command, this default can be restored with @code{default} as
+the key.
+
+@c -- A new node --------------------------------------------------------------
+@node Scripting
+@subsection Scripting
+@c ----------------------------------------------------------------------------
+
+As is probably clear by now, the list with commands for @DisplayText{} can be
+very long. This is tedious and also error prone. Luckily, there is an easier and
+more elegant way to control the behaviour of this tool.
+
+@IndexSubentry{Commands, @code{script}}
+Through the @code{script} command, the name of a file with commands can be
+passed in. These commands are parsed and executed as if they appeared on
+the command line in the same order as encountered in the file. The commands
+in this script file can actually be mixed with commands on the command line.
+
+The difference between the commands in the script file and those used on the
+command line is that the latter require a leading dash (@code{-}) symbol.
+
+Comment lines are supported. They need to start with the @code{#} symbol.
+
+@c -- A new node --------------------------------------------------------------
+@node A More Elaborate Example
+@subsection A More Elaborate Example
+@c ----------------------------------------------------------------------------
+
+With the information presented so far, we can customize our data
+gathering and display commands.
+
+As an example, to reflect the name of the algorithm and the number of threads
+that were used in the experiment, we select @code{mxv.1.thr.er}
+as the name of the experiment directory.
+All we then need to
+do is to add the
+ @IndexSubentry{Options, @code{-O}}
+@code{-O}
+option followed by this name on the command line when running @CollectApp{}:
+
+@cartouche
+@smallexample
+$ exe=mxv-pthreads.exe
+$ m=3000
+$ n=2000
+$ gprofng collect app -O mxv.1.thr.er ./$exe -m $m -n $n -t 1
+@end smallexample
+@end cartouche
+
+The commands to generate the profile are put into a file that we simply call
+@code{my-script}:
+
+@smallexample
+@verbatim
+$ cat my-script
+# This is my first gprofng script
+# Set the metrics
+metrics i.%totalcpu:e.%totalcpu:name
+# Use the exclusive time to sort
+sort e.totalcpu
+# Limit the function list to 5 lines
+limit 5
+# Show the function list
+functions
+@end verbatim
+@end smallexample
+
+This script file is then specified as input to the @DisplayText{} command
+that is used to display the performance information stored in
+@code{mxv.1.thr.er}:
+
+@cartouche
+@smallexample
+$ gprofng display text -script my-script mxv.1.thr.er
+@end smallexample
+@end cartouche
+
+The command above produces the following output:
+
+@smallexample
+@verbatim
+# This is my first gprofng script
+# Set the metrics
+Current metrics: i.%totalcpu:e.%totalcpu:name
+Current Sort Metric: Exclusive Total CPU Time ( e.%totalcpu )
+# Use the exclusive time to sort
+Current Sort Metric: Exclusive Total CPU Time ( e.%totalcpu )
+# Limit the function list to 5 lines
+Print limit set to 5
+# Show the function list
+Functions sorted by metric: Exclusive Total CPU Time
+
+Incl. Total Excl. Total Name
+CPU CPU
+ sec. % sec. %
+2.272 100.00 2.272 100.00 <Total>
+2.159 95.00 2.159 95.00 mxv_core
+0.102 4.48 0.054 2.37 init_data
+0.035 1.54 0.025 1.10 erand48_r
+0.048 2.11 0.013 0.57 drand48
+@end verbatim
+@end smallexample
+
+In the first part of the output, our comment lines in the script file are
+shown. These are interleaved with an acknowledgement message for the commands.
+
+This is followed by a profile consisting of 5 lines only. For both metrics,
+the percentages plus the timings are given. The numbers are sorted with respect
+to the exclusive total CPU time.
+
+It is now immediately clear that function @code{mxv_core} is responsbile for
+95% of the CPU time and @code{init_data} takes 4.5% only.
+
+This is also where we see sampling in action. Although this is exactly the
+same job we profiled before, the timings are somewhat different, but the
+differences are very small.
+
+@c -- A new node --------------------------------------------------------------
+@node The Call Tree
+@subsection The Call Tree
+@c ----------------------------------------------------------------------------
+
+The call tree shows the dynamic hierarchy of the application by displaying the
+functions executed and their parent. It helps to find the most expensive path
+in the program.
+
+@IndexSubentry{Commands, @code{calltree}}
+This feature is enabled through the @code{calltree} command. This is how to get
+this tree for our current experiment:
+
+@cartouche
+@smallexample
+$ gprofng display text -calltree mxv.1.thr.er
+@end smallexample
+@end cartouche
+
+This displays the following structure:
+
+@smallexample
+@verbatim
+Functions Call Tree. Metric: Attributed Total CPU Time
+
+Attr. Name
+Total
+CPU sec.
+2.272 +-<Total>
+2.159 +-collector_root
+2.159 | +-driver_mxv
+2.159 | +-mxv_core
+0.114 +-__libc_start_main
+0.114 +-main
+0.102 +-init_data
+0.048 | +-drand48
+0.035 | +-erand48_r
+0.010 | +-__drand48_iterate
+0.011 +-allocate_data
+0.011 | +-malloc
+0.011 | +-_int_malloc
+0.001 | +-sysmalloc
+0.001 +-check_results
+0.001 +-malloc
+0.001 +-_int_malloc
+@end verbatim
+@end smallexample
+
+At first sight this may not be what you expected and some explanation is in
+place.
+
+@c ----------------------------------------------------------------------------
+@c TBD: Revise this text when we have user and machine mode.
+@c ----------------------------------------------------------------------------
+First of all, function @code{collector_root} is internal to @ToolName{} and
+should be hidden to the user. This is part of a planned future enhancement.
+
+Recall that the @code{objects} and @code{fsingle} commands are very useful
+to find out more about load objects in general, but also to help identify
+an unknown entry in the function overview. @xref{Load Objects and Functions}.
+
+Another thing to note is that there are two main branches. The one under
+@code{collector_root} and the second one under @code{__libc_start_main}.
+This reflects the fact that we are executing a parallel program. Even though
+we only used one thread for this run, this is still executed in a separate
+path.
+
+The main, sequential part of the program is displayed under @code{main} and
+shows the functions called and the time they took.
+
+There are two things worth noting for the call tree feature:
+
+@itemize
+
+@item
+This is a dynamic tree and since sampling is used, it most likely looks
+slighlty different across seemingly identical profile runs. In case the
+run times are short, it is worth considering to use a high resolution
+through the
+@IndexSubentry{Options, @code{-p}}
+@code{-p}
+option. For example to use @code{-p hi} to increase the sampling rate.
+
+@item
+In case hardware event counters have been enabled
+(@xref{Profile Hardware Event Counters}), these values are also displayed
+in the call tree view.
+
+@end itemize
+
+@c -- A new node --------------------------------------------------------------
+@node More Information on the Experiment
+@subsection More Information on the Experiment
+@c ----------------------------------------------------------------------------
+
+The experiment directory not only contains performance related data. Several
+system characteristics, the actually command executed, and some global
+performance statistics can be displayed.
+
+@IndexSubentry{Commands, @code{header}}
+The @code{header} command displays information about the experiment(s).
+For example, this is the command to extract this data from for our experiment
+directory:
+
+@cartouche
+@smallexample
+$ gprofng display text -header mxv.1.thr.er
+@end smallexample
+@end cartouche
+
+The above command prints the following information. Note that some of the
+lay-out and the information has been modified. The textual changes are
+marked with the @code{<} and @code{>} symbols.
+
+@smallexample
+@verbatim
+Experiment: mxv.1.thr.er
+No errors
+No warnings
+Archive command `gp-archive -n -a on
+ --outfile <exp_dir>/archive.log <exp_dir>'
+
+Target command (64-bit): './mxv-pthreads.exe -m 3000 -n 2000 -t 1'
+Process pid 30591, ppid 30589, pgrp 30551, sid 30468
+Current working directory: <cwd>
+Collector version: `2.36.50'; experiment version 12.4 (64-bit)
+Host `<hostname>', OS `Linux <version>', page size 4096,
+ architecture `x86_64'
+ 16 CPUs, clock speed 1995 MHz.
+ Memory: 30871514 pages @ 4096 = 120591 MB.
+Data collection parameters:
+ Clock-profiling, interval = 997 microsecs.
+ Periodic sampling, 1 secs.
+ Follow descendant processes from: fork|exec|combo
+
+Experiment started <date and time>
+
+Experiment Ended: 2.293162658
+Data Collection Duration: 2.293162658
+@end verbatim
+@end smallexample
+
+The output above may assist in troubleshooting, or to verify some of the
+operational conditions and we recommand to include this command when
+generating a profile.
+
+@IndexSubentry{Options, @code{-C}}
+Related to this command there is a useful option to record your own comment(s) in
+an experiment.
+To this end, use the @code{-C} option on the @CollectApp{} tool to
+specify a comment string. Up to ten comment lines can be included.
+These comments are displayed with the @code{header} command on
+the @DisplayText{} tool.
+
+@IndexSubentry{Commands, @code{overview}}
+The @code{overview} command displays information on the experiment(s) and also
+shows a summary of the values for the metric(s) used. This is an example how to
+use it on our newly created experiment directory:
+
+@cartouche
+@smallexample
+$ gprofng display text -overview mxv.1.thr.er
+@end smallexample
+@end cartouche
+
+@smallexample
+@verbatim
+Experiment(s):
+
+Experiment :mxv.1.thr.er
+ Target : './mxv-pthreads.exe -m 3000 -n 2000 -t 1'
+ Host : <hostname> (<ISA>, Linux <version>)
+ Start Time : <date and time>
+ Duration : 2.293 Seconds
+
+Metrics:
+
+ Experiment Duration (Seconds): [2.293]
+ Clock Profiling
+ [X]Total CPU Time - totalcpu (Seconds): [*2.272]
+
+Notes: '*' indicates hot metrics, '[X]' indicates currently enabled
+ metrics.
+ The metrics command can be used to change selections. The
+ metric_list command lists all available metrics.
+@end verbatim
+@end smallexample
+
+This command provides a dashboard overview that helps to easily identify
+where the time is spent and in case hardware event counters are used, it
+shows their total values.
+
+@c -- A new node --------------------------------------------------------------
+@node Control the Sampling Frequency
+@subsection Control the Sampling Frequency
+@c ----------------------------------------------------------------------------
+
+So far we did not talk about the frequency of the sampling process, but in
+some cases it is useful to change the default of 10 milliseconds.
+
+The advantage of increasing the sampling frequency is that functions that
+do not take much time per invocation are more accurately captured. The
+downside is that more data is gathered. This has an impact on the overhead
+of the collection process and more disk space is required.
+
+In general this is not an immediate concern, but with heavily threaded
+applications that run for an extended period of time, increasing the
+frequency may have a more noticeable impact.
+
+@IndexSubentry{Options, @code{-p}}
+The @code{-p} option on the @CollectApp{} tool is used to enable or disable
+clock based profiling, or to explicitly set the sampling rate.
+@cindex Sampling interval
+This option takes one of the following keywords:
+
+@table @code
+
+@item off
+Disable clock based profiling.
+
+@item on
+Enable clock based profiling with a per thread sampling interval of 10 ms. This is the default.
+
+@item lo
+Enable clock based profiling with a per thread sampling interval of 100 ms.
+
+@item hi
+Enable clock based profiling with a per thread sampling interval of 1 ms.
+
+@item <value>
+Enable clock based profiling with a per thread sampling interval of <value>.
+
+@end table
+
+One may wonder why there is an option to disable clock based profiling. This
+is because by default, it is enabled when conducting hardware event counter
+experiments (@xref{Profile Hardware Event Counters}).
+With the @code{-p off} option, this can be disabled.
+
+If an explicit value is set for the sampling, the number can be an integer or a
+floating-point number.
+A suffix of @code{u} for microseconds, or @code{m} for milliseconds is supported.
+If no suffix is used, the value is assumed to be in milliseconds.
+
+If the value is smaller than the clock profiling minimum, a warning message is issued
+and it is set to the minimum.
+In case it is not a multiple of the clock profiling resolution, it is silently rounded
+down to the nearest multiple of the clock resolution.
+
+If the value exceeds the clock profiling maximum, is negative, or zero, an error is
+reported.
+
+@IndexSubentry{Commands, @code{header}}
+Note that the @code{header} command echoes the sampling rate used.
+
+@c -- A new node --------------------------------------------------------------
+@node Information on Load Objects
+@subsection Information on Load Objects
+@c ----------------------------------------------------------------------------
+
+It may happen that the function list contains a function that is not known to
+the user. This can easily happen with library functions for example.
+Luckily there are three commands that come in handy then.
+
+@IndexSubentry{Commands, @code{objects}}
+@IndexSubentry{Commands, @code{fsingle}}
+@IndexSubentry{Commands, @code{fsummary}}
+These commands are @code{objects}, @code{fsingle}, and @code{fsummary}.
+They provide details on
+@cindex Load objects
+load objects (@xref{Load Objects and Functions}).
+
+The @code{objects} command lists all load objects that have been referenced
+during the performance experiment.
+Below we show the command and the result for our profile job. Like before,
+the (long) path names in the output have been shortened and replaced by the
+@IndexSubentry{Miscellaneous, @code{<apath>}}
+@code{<apath>} symbol that represents an absolute directory path.
+
+@cartouche
+@smallexample
+$ gprofng display text -objects mxv.1.thr.er
+@end smallexample
+@end cartouche
+
+The output includes the name and path of the target executable:
+
+@smallexample
+@verbatim
+ <Unknown> (<Unknown>)
+ <mxv-pthreads.exe> (<apath>/mxv-pthreads.exe)
+ <librt-2.17.so> (/usr/lib64/librt-2.17.so)
+ <libdl-2.17.so> (/usr/lib64/libdl-2.17.so)
+ <libbfd-2.36.50.20210505.so> (<apath>/libbfd-2.36.50 <etc>)
+ <libopcodes-2.36.50.20210505.so> (<apath>/libopcodes-2. <etc>)
+ <libc-2.17.so> (/usr/lib64/libc-2.17.so)
+ <libpthread-2.17.so> (/usr/lib64/libpthread-2.17.so)
+ <libm-2.17.so> (/usr/lib64/libm-2.17.so)
+ <libgp-collector.so> (<apath>/libgp-collector.so)
+ <ld-2.17.so> (/usr/lib64/ld-2.17.so)
+ <DYNAMIC_FUNCTIONS> (DYNAMIC_FUNCTIONS)
+@end verbatim
+@end smallexample
+
+@IndexSubentry{Commands, @code{fsingle}}
+The @code{fsingle} command may be used to get more details on a specific entry
+in the function view, say. For example, the command below provides additional
+information on the @code{collector_root} function shown in the function overview.
+
+@cartouche
+@smallexample
+$ gprofng display text -fsingle collector_root mxv.1.thr.er
+@end smallexample
+@end cartouche
+
+Below the output from this command. It has been somewhat modified to match the
+display requirements.
+
+@smallexample
+@verbatim
+collector_root
+ Exclusive Total CPU Time: 0. ( 0. %)
+ Inclusive Total CPU Time: 2.159 ( 95.0%)
+ Size: 401
+ PC Address: 10:0x0001db60
+ Source File: <apath>/dispatcher.c
+ Object File: mxv.1.thr.er/archives/libgp-collector.so_HpzZ6wMR-3b
+ Load Object: <apath>/libgp-collector.so
+ Mangled Name:
+ Aliases:
+@end verbatim
+@end smallexample
+
+In this table we not only see how much time was spent in this function, we
+also see where it originates from. In addition to this, the size and start
+address are given as well. If the source code location is known it is also
+shown here.
+
+@IndexSubentry{Commands, @code{fsummary}}
+The related @code{fsummary} command displays the same information as
+@code{fsingle}, but for all functions in the function overview,
+including @code{<Total>}:
+
+@cartouche
+@smallexample
+$ gprofng display text -fsummary mxv.1.thr.er
+@end smallexample
+@end cartouche
+
+@smallexample
+@verbatim
+Functions sorted by metric: Exclusive Total CPU Time
+
+<Total>
+ Exclusive Total CPU Time: 2.272 (100.0%)
+ Inclusive Total CPU Time: 2.272 (100.0%)
+ Size: 0
+ PC Address: 1:0x00000000
+ Source File: (unknown)
+ Object File: (unknown)
+ Load Object: <Total>
+ Mangled Name:
+ Aliases:
+
+mxv_core
+ Exclusive Total CPU Time: 2.159 ( 95.0%)
+ Inclusive Total CPU Time: 2.159 ( 95.0%)
+ Size: 75
+ PC Address: 2:0x000021ba
+ Source File: <apath>/mxv.c
+ Object File: mxv.1.thr.er/archives/mxv-pthreads.exe_hRxWdccbJPc
+ Load Object: <apath>/mxv-pthreads.exe
+ Mangled Name:
+ Aliases:
+
+ ... etc ...
+@end verbatim
+@end smallexample
+
+@c -- A new node --------------------------------------------------------------
+@node Support for Multithreading
+@section Support for Multithreading
+@c ----------------------------------------------------------------------------
+
+In this chapter we introduce and discuss the support for multithreading. As
+is shown below, nothing needs to be changed when collecting the performance
+data.
+
+The difference is that additional commands are available to get more
+information on the parallel environment, plus that several filters allow
+the user to zoom in on specific threads.
+
+@c -- A new node --------------------------------------------------------------
+@node Creating a Multithreading Experiment
+@subsection Creating a Multithreading Experiment
+@c ----------------------------------------------------------------------------
+
+We demonstrate the support for multithreading using the same code and settings
+as before, but this time we use 2 threads:
+
+@cartouche
+@smallexample
+$ exe=mxv-pthreads.exe
+$ m=3000
+$ n=2000
+$ gprofng collect app -O mxv.2.thr.er ./$exe -m $m -n $n -t 2
+@end smallexample
+@end cartouche
+
+First of all, note that we did not change anything, other than setting the
+number of threads to 2. Nothing special is needed to profile a multithreaded
+job when using @ToolName{}.
+
+The same is true when displaying the performance results. The same commands
+that we used before work unmodified. For example, this is all that is needed to
+get a function overview:
+
+@cartouche
+@smallexample
+$ gpprofng display text -limit 10 -functions mxv.2.thr.er
+@end smallexample
+@end cartouche
+
+This produces the following familiar looking output:
+
+@smallexample
+@verbatim
+Print limit set to 10
+Functions sorted by metric: Exclusive Total CPU Time
+
+Excl. Incl. Name
+Total Total
+CPU sec. CPU sec.
+2.268 2.268 <Total>
+2.155 2.155 mxv_core
+0.044 0.103 init_data
+0.030 0.046 erand48_r
+0.016 0.016 __drand48_iterate
+0.013 0.059 drand48
+0.008 0.011 _int_malloc
+0.003 0.003 brk
+0. 0.003 __default_morecore
+0. 0.114 __libc_start_main
+@end verbatim
+@end smallexample
+
+@c -- A new node --------------------------------------------------------------
+@node Commands Specific to Multithreading
+@subsection Commands Specific to Multithreading
+@c ----------------------------------------------------------------------------
+
+The function overview shown above shows the results aggregated over all the
+threads. The interesting new element is that we can also look at the
+performance data for the individual threads.
+
+@IndexSubentry{Commands, @code{thread_list}}
+The @code{thread_list} command displays how many threads have been used:
+
+@cartouche
+@smallexample
+$ gprofng display text -thread_list mxv.2.thr.er
+@end smallexample
+@end cartouche
+
+This produces the following output, showing that three threads have
+been used:
+
+@smallexample
+@verbatim
+Exp Sel Total
+=== === =====
+ 1 all 3
+@end verbatim
+@end smallexample
+
+The output confirms there is one experiment and that by default all
+threads are selected.
+
+It may seem surprising to see three threads here, since we used the
+@code{-t 2} option, but it is common for a Pthreads program to use one
+additional thread. This is typically the thread that runs from start to
+finish and handles the sequential portions of the code, as well as takes
+care of managing the threads.
+
+It is no different in our example code. At some point, the main thread
+creates and activates the two threads that perform the multiplication
+of the matrix with the vector. Upon completion of this computation,
+the main thread continues.
+
+@IndexSubentry{Commands, @code{threads}}
+The @code{threads} command is simple, yet very powerful. It shows the
+total value of the metrics for each thread. To make it easier to
+interpret the data, we modify the metrics to include percentages:
+
+@cartouche
+@smallexample
+$ gprofng display text -metrics e.%totalcpu -threads mxv.2.thr.er
+@end smallexample
+@end cartouche
+
+The command above produces the following overview:
+
+@smallexample
+@verbatim
+Current metrics: e.%totalcpu:name
+Current Sort Metric: Exclusive Total CPU Time ( e.%totalcpu )
+Objects sorted by metric: Exclusive Total CPU Time
+
+Excl. Total Name
+CPU
+ sec. %
+2.258 100.00 <Total>
+1.075 47.59 Process 1, Thread 3
+1.070 47.37 Process 1, Thread 2
+0.114 5.03 Process 1, Thread 1
+@end verbatim
+@end smallexample
+
+The first line gives the total CPU time accumulated over the threads
+selected. This is followed by the metric value(s) for each thread.
+
+From this it is clear that the main thread is responsible for 5% of
+the total CPU time, while the other two threads take 47% each.
+
+This view is ideally suited to verify if there any load balancing
+issues and also to find the most time consuming thread(s).
+
+@IndexSubentry{Filters, Thread selection}
+While useful, often more information than this is needed. This is
+@IndexSubentry{Commands, @code{thread_select}}
+where the thread selection filter comes in. Through the @code{thread_select}
+command, one or more threads may be selected
+(@xref{The Selection List} how to define the selection list).
+
+Since it is most common to use this command in a script, we do so as
+well here. Below the script we are using:
+
+@cartouche
+@smallexample
+# Define the metrics
+metrics e.%totalcpu
+# Limit the output to 10 lines
+limit 10
+# Get the function overview for thread 1
+thread_select 1
+functions
+# Get the function overview for thread 2
+thread_select 2
+functions
+# Get the function overview for thread 3
+thread_select 3
+functions
+@end smallexample
+@end cartouche
+
+The definition of the metrics and the output limiter has been shown and
+explained before and will be ignored. The new command we focus on is
+@IndexSubentry{Commands, @code{thread_select}}
+@code{thread_select}.
+
+This command takes a list (@xref{The Selection List}) to select specific
+threads. In this case we simply use the individual thread numbers that we
+obtained with the @code{thread_list} command earlier.
+
+This restricts the output of the @code{functions} command to the thread
+number(s) specified. This means that the script above shows which
+function(s) each thread executes and how much CPU time they consumed.
+Both the timings and their percentages are given.
+
+This is the relevant part of the output for the first thread:
+
+@smallexample
+@verbatim
+# Get the function overview for thread 1
+Exp Sel Total
+=== === =====
+ 1 1 3
+Functions sorted by metric: Exclusive Total CPU Time
+
+Excl. Total Name
+CPU
+ sec. %
+0.114 100.00 <Total>
+0.051 44.74 init_data
+0.028 24.56 erand48_r
+0.017 14.91 __drand48_iterate
+0.010 8.77 _int_malloc
+0.008 7.02 drand48
+0. 0. __libc_start_main
+0. 0. allocate_data
+0. 0. main
+0. 0. malloc
+@end verbatim
+@end smallexample
+
+As usual, the comment lines are echoed. This is followed by a confirmation
+of our selection. We see that indeed thread 1 has been selected. What is
+displayed next is the function overview for this particular thread. Due to
+the @code{limit 10} command, there are ten entries in this list.
+
+Below are the overviews for threads 2 and 3 respectively. We see that all
+of the CPU time is spent in function @code{mxv_core} and that this time
+is approximately the same for both threads.
+
+@smallexample
+@verbatim
+# Get the function overview for thread 2
+Exp Sel Total
+=== === =====
+ 1 2 3
+Functions sorted by metric: Exclusive Total CPU Time
+
+Excl. Total Name
+CPU
+ sec. %
+1.072 100.00 <Total>
+1.072 100.00 mxv_core
+0. 0. collector_root
+0. 0. driver_mxv
+
+# Get the function overview for thread 3
+Exp Sel Total
+=== === =====
+ 1 3 3
+Functions sorted by metric: Exclusive Total CPU Time
+
+Excl. Total Name
+CPU
+ sec. %
+1.076 100.00 <Total>
+1.076 100.00 mxv_core
+0. 0. collector_root
+0. 0. driver_mxv
+@end verbatim
+@end smallexample
+
+When analyzing the performance of a multithreaded application, it is sometimes
+useful to know whether threads have mostly executed on the same core, say, or
+if they have wandered across multiple cores. This sort of stickiness is usually
+referred to as
+@cindex Thread affinity
+@emph{thread affinity}.
+
+Similar to the commands for the threads, there are several commands related
+to the usage of the cores, or @emph{CPUs} as they are called in @ToolName{}
+(@xref{The Concept of a CPU in @ProductName{}}).
+
+In order to have some more interesting data to look at, we created a new
+experiment, this time using 8 threads:
+
+@cartouche
+@smallexample
+$ exe=mxv-pthreads.exe
+$ m=3000
+$ n=2000
+$ gprofng collect app -O mxv.8.thr.er ./$exe -m $m -n $n -t 8
+@end smallexample
+@end cartouche
+
+@IndexSubentry{Commands, @code{cpu_list}}
+Similar to the @code{thread_list} command, the @code{cpu_list} command
+displays how many CPUs have been used.
+@IndexSubentry{Commands, @code{cpus}}
+The equivalent of the @code{threads} threads command, is the @code{cpus}
+command, which shows the CPU numbers that were used and how much time was
+spent on each of them. Both are demonstrated below.
+
+@cartouche
+@smallexample
+$ gprofng display text -metrics e.%totalcpu -cpu_list -cpus mxv.8.thr.er
+@end smallexample
+@end cartouche
+
+This command produces the following output:
+
+@smallexample
+@verbatim
+Current metrics: e.%totalcpu:name
+Current Sort Metric: Exclusive Total CPU Time ( e.%totalcpu )
+Exp Sel Total
+=== === =====
+ 1 all 10
+Objects sorted by metric: Exclusive Total CPU Time
+
+Excl. Total Name
+CPU
+ sec. %
+2.310 100.00 <Total>
+0.286 12.39 CPU 7
+0.284 12.30 CPU 13
+0.282 12.21 CPU 5
+0.280 12.13 CPU 14
+0.266 11.52 CPU 9
+0.265 11.48 CPU 2
+0.264 11.44 CPU 11
+0.194 8.42 CPU 0
+0.114 4.92 CPU 1
+0.074 3.19 CPU 15
+@end verbatim
+@end smallexample
+
+@c ----------------------------------------------------------------------------
+@c TBD - Ruud
+@c I'd like to improve this and have a way to see where a thread has executed.
+@c ----------------------------------------------------------------------------
+
+What we see in this table is that a total of 10 CPUs have been used. This is
+followed by a list with all the CPU numbers that have been used during the
+run. For each CPU it is shown how much time was spent on it.
+
+While the table with thread times shown earlier may point at a load imbalance
+in the application, this overview has a different purpose.
+
+For example, we see that 10 CPUs have been used, but we know that the
+application uses 9 threads only.
+This means that at least one thread has executed on more than one CPU. In
+itself this is not something to worry about, but warrants a deeper
+investigation.
+
+Honesty dictates that next we performed a pre-analysis to find out
+which thread(s) have been running on more than one CPU. We found this
+to be thread 7. It has executed on CPUs 0 and 15.
+
+With this knowledge, we wrote the script shown below. It zooms in on
+the behaviour of thread 7.
+
+@cartouche
+@smallexample
+# Define the metrics
+metrics e.%totalcpu
+# Limit the output to 10 lines
+limit 10
+functions
+# Get the function overview for CPU 0
+cpu_select 0
+functions
+# Get the function overview for CPU 15
+cpu_select 15
+functions
+@end smallexample
+@end cartouche
+
+From the earlier shown threads overview, we know that thread 7 has
+used @code{0.268} seconds of CPU time..
+
+By selecting CPUs 0 and 15, respectively, we get the following
+function overviews:
+
+@smallexample
+@verbatim
+# Get the function overview for CPU 0
+Exp Sel Total
+=== === =====
+ 1 0 10
+Functions sorted by metric: Exclusive Total CPU Time
+
+Excl. Total Name
+CPU
+ sec. %
+0.194 100.00 <Total>
+0.194 100.00 mxv_core
+0. 0. collector_root
+0. 0. driver_mxv
+
+# Get the function overview for CPU 15
+Exp Sel Total
+=== === =====
+ 1 15 10
+Functions sorted by metric: Exclusive Total CPU Time
+
+Excl. Total Name
+CPU
+ sec. %
+0.074 100.00 <Total>
+0.074 100.00 mxv_core
+0. 0. collector_root
+0. 0. driver_mxv
+@end verbatim
+@end smallexample
+
+This shows that thread 7 spent @code{0.194} seconds on CPU 0 and
+@code{0.074} seconds on CPU 15.
+
+@c -- A new node --------------------------------------------------------------
+@node Viewing Multiple Experiments
+@section Viewing Multiple Experiments
+@c ----------------------------------------------------------------------------
+
+One thing we did not cover sofar is that @ToolName{} fully supports the analysis
+of multiple experiments. The @DisplayText{} tool accepts a list of experiments.
+The data can either be aggregated across the experiments, or used in a
+comparison.
+
+Mention @code{experiment_list}
+
+@c -- A new node --------------------------------------------------------------
+@node Aggregation of Experiments
+@subsection Aggregation of Experiments
+@c ----------------------------------------------------------------------------
+
+By default, the data for multiple experiments is aggregrated and the display
+commands shows these combined results.
+
+For example, we can aggregate the data for our single and dual thread
+experiments. Below is the script we used for this:
+
+@cartouche
+@smallexample
+# Define the metrics
+metrics e.%totalcpu
+# Limit the output to 10 lines
+limit 10
+# Get the list with experiments
+experiment_list
+# Get the function overview
+functions
+@end smallexample
+@end cartouche
+
+@IndexSubentry{Commands, @code{experiment_list}}
+With the exception of the @code{experiment_list} command, all commands
+used have been discussed earlier.
+
+The @code{experiment_list} command provides a list of the experiments
+that have been loaded. This is is used to verify we are looking at the
+experiments we intend to aggregate.
+
+@cartouche
+@smallexample
+$ gprofng display text -script my-script-agg mxv.1.thr.er mxv.2.thr.er
+@end smallexample
+@end cartouche
+
+With the command above, we get the following output:
+
+@smallexample
+@verbatim
+# Define the metrics
+Current metrics: e.%totalcpu:name
+Current Sort Metric: Exclusive Total CPU Time ( e.%totalcpu )
+# Limit the output to 10 lines
+Print limit set to 10
+# Get the list with experiments
+ID Sel PID Experiment
+== === ===== ============
+ 1 yes 30591 mxv.1.thr.er
+ 2 yes 11629 mxv.2.thr.er
+# Get the function overview
+Functions sorted by metric: Exclusive Total CPU Time
+
+Excl. Total Name
+CPU
+ sec. %
+4.533 100.00 <Total>
+4.306 94.99 mxv_core
+0.105 2.31 init_data
+0.053 1.17 erand48_r
+0.027 0.59 __drand48_iterate
+0.021 0.46 _int_malloc
+0.021 0.46 drand48
+0.001 0.02 sysmalloc
+0. 0. __libc_start_main
+0. 0. allocate_data
+@end verbatim
+@end smallexample
+
+The first five lines should look familiar. The five lines following, echo
+the comment line in the script and show the overview of the experiments.
+This confirms two experiments have been loaded and that both are active.
+
+This is followed by the function overview. The timings have been summed
+up and the percentages are adjusted accordingly. For example, the total
+accumulated time is indeed 2.272 + 2.261 = 4.533 seconds.
+
+@c -- A new node --------------------------------------------------------------
+@node Comparison of Experiments
+@subsection Comparison of Experiments
+@c ----------------------------------------------------------------------------
+
+The support for multiple experiments really shines in comparison mode. This
+feature is enabled through the command
+@IndexSubentry{Commands, @code{compare on/off}}
+@code{compare on}
+and is disabled
+by setting
+@code{compare off}.
+
+@cindex Compare experiments
+In comparison mode, the data for the various experiments is shown side by
+side, as illustrated below where we compare the results for the multithreaded
+experiments using one and two threads respectively:
+
+@cartouche
+@smallexample
+$ gprofng display text -compare on -functions mxv.1.thr.er mxv.2.thr.er
+@end smallexample
+@end cartouche
+
+@noindent
+This produces the following output:
+
+@smallexample
+@verbatim
+Functions sorted by metric: Exclusive Total CPU Time
+
+mxv.1.thr.er mxv.2.thr.er mxv.1.thr.er mxv.2.thr.er
+Excl. Total Excl. Total Incl. Total Incl. Total Name
+CPU CPU CPU CPU
+ sec. sec. sec. sec.
+2.272 2.261 2.272 2.261 <Total>
+2.159 2.148 2.159 2.148 mxv_core
+0.054 0.051 0.102 0.104 init_data
+0.025 0.028 0.035 0.045 erand48_r
+0.013 0.008 0.048 0.053 drand48
+0.011 0.010 0.012 0.010 _int_malloc
+0.010 0.017 0.010 0.017 __drand48_iterate
+0.001 0. 0.001 0. sysmalloc
+0. 0. 0.114 0.114 __libc_start_main
+0. 0. 0.011 0.010 allocate_data
+0. 0. 0.001 0. check_results
+0. 0. 2.159 2.148 collector_root
+0. 0. 2.159 2.148 driver_mxv
+0. 0. 0.114 0.114 main
+0. 0. 0.012 0.010 malloc
+@end verbatim
+@end smallexample
+
+This table is already helpful to more easily compare (two) profiles, but
+there is more that we can do here.
+
+By default, in comparison mode, all measured values are shown. Often
+profiling is about comparing performance data. It is therefore
+more useful to look at differences, or ratios, using one experiment as
+a reference.
+
+The values shown are relative to this difference. For example if a ratio
+is below one, it means the reference value was higher.
+
+@IndexSubentry{Commands, @code{compare on/off}}
+This feature is supported on the @code{compare} command. In addition to @code{on},
+or @code{off}, this command also supports
+@IndexSubentry{Commands, @code{compare delta}}
+@code{delta}, or
+@IndexSubentry{Commands, @code{compare ratio}}
+@code{ratio}.
+
+Usage of one of these two keywords enables the comparison feature and shows
+either the difference, or the ratio, relative to the reference data.
+
+In the example below, we use the same two experiments used in the comparison
+above, but as before, the number of lines is restricted to 10 and we focus on
+the exclusive timings plus percentages. For the comparison part we are
+interested in the differences.
+
+This is the script that produces such an overview:
+
+@cartouche
+@smallexample
+# Define the metrics
+metrics e.%totalcpu
+# Limit the output to 10 lines
+limit 10
+# Set the comparison mode to differences
+compare delta
+# Get the function overview
+functions
+@end smallexample
+@end cartouche
+
+Assuming this script file is called @code{my-script-comp}, this is how we
+get the table displayed on our screen:
+
+@cartouche
+@smallexample
+$ gprofng display text -script my-script-comp mxv.1.thr.er mxv.2.thr.er
+@end smallexample
+@end cartouche
+
+Leaving out some of the lines printed, but we have seen before, we get
+the following table:
+
+@smallexample
+@verbatim
+mxv.1.thr.er mxv.2.thr.er
+Excl. Total Excl. Total Name
+CPU CPU
+ sec. % delta %
+2.272 100.00 -0.011 100.00 <Total>
+2.159 95.00 -0.011 94.97 mxv_core
+0.054 2.37 -0.003 2.25 init_data
+0.025 1.10 +0.003 1.23 erand48_r
+0.013 0.57 -0.005 0.35 drand48
+0.011 0.48 -0.001 0.44 _int_malloc
+0.010 0.44 +0.007 0.75 __drand48_iterate
+0.001 0.04 -0.001 0. sysmalloc
+0. 0. +0. 0. __libc_start_main
+0. 0. +0. 0. allocate_data
+@end verbatim
+@end smallexample
+
+It is now easy to see that the CPU times for the most time consuming
+functions in this code are practically the same.
+
+While in this case we used the delta as a comparison,
+
+Note that the comparison feature is supported at the function, source, and
+disassembly level. There is no practical limit on the number of experiments
+that can be used in a comparison.
+
+
+
+@c -- A new node --------------------------------------------------------------
+@node Profile Hardware Event Counters
+@section Profile Hardware Event Counters
+@c ----------------------------------------------------------------------------
+
+Many processors provide a set of hardware event counters and @ToolName{}
+provides support for this feature.
+@xref{Hardware Event Counters Explained} for those readers that are not
+familiar with such counters and like to learn more.
+
+In this section we explain how to get the details on the event counter
+support for the processor used in the experiment(s), and show several
+examples.
+
+@c -- A new node --------------------------------------------------------------
+@node Getting Information on the Counters Supported
+@subsection Getting Information on the Counters Supported
+@c ----------------------------------------------------------------------------
+
+The first step is to check if the processor used for the experiments is
+supported by @ToolName{}.
+
+@IndexSubentry{Options, @code{-h}}
+The @code{-h} option on @CollectApp{} will show the event counter
+information:
+
+@cartouche
+@smallexample
+$ gprofng collect app -h
+@end smallexample
+@end cartouche
+
+In case the counters are supported, a list with the events is printed.
+Otherwise, a warning message will be issued.
+
+For example, below we show this command and the output on an Intel Xeon
+Platinum 8167M (aka ``Skylake'') processor. The output has been split
+into several sections and each section is commented upon separately.
+
+@smallexample
+@verbatim
+Run "gprofng collect app --help" for a usage message.
+
+Specifying HW counters on `Intel Arch PerfMon v2 on Family 6 Model 85'
+(cpuver=2499):
+
+ -h {auto|lo|on|hi}
+ turn on default set of HW counters at the specified rate
+ -h <ctr_def> [-h <ctr_def>]...
+ -h <ctr_def>[,<ctr_def>]...
+ specify HW counter profiling for up to 4 HW counters
+@end verbatim
+@end smallexample
+
+The first line shows how to get a usage overview. This is followed by
+some information on the target processor.
+
+The next five lines explain in what ways the @code{-h} option can be
+used to define the events to be monitored.
+
+The first version shown above enables a default set of counters. This
+default depends on the processor this command is executed on. The
+keyword following the @code{-h} option defines the sampling rate:
+
+@table @code
+
+@item auto
+Match the sample rate of used by clock profiling. If the latter is disabled,
+Use a per thread sampling rate of approximately 100 samples per second.
+This setting is the default and preferred.
+
+@item on
+Use a per thread sampling rate of approximately 100 samples per second.
+
+@item lo
+Use a per thread sampling rate of approximately 10 samples per second.
+
+@item hi
+Use a per thread sampling rate of approximately 1000 samples per second.
+
+@end table
+
+The second and third variant define the events to be monitored. Note
+that the number of simultaneous events supported is printed. In this
+case we can monitor four events in a single profiling job.
+
+It is a matter of preference whether you like to use the @code{-h}
+option for each event, or use it once, followed by a comma separated
+list.
+
+There is one slight catch though. The counter definition below has
+mandatory comma (@code{,}) between the event and the rate. While a
+default can be used for the rate, the comma cannot be omitted.
+This may result in a somewhat awkward counter definition in case
+the default sampling rate is used.
+
+For example, the following two commands are equivalent. Note
+the double comma in the second command. This is not a typo.
+
+@cartouche
+@smallexample
+$ gprofng collect app -h cycles -h insts ...
+$ gprofng collect app -h cycles,,insts ...
+@end smallexample
+@end cartouche
+
+In the first command this comma is not needed, because a
+comma (``@code{,}'') immediately followed by white space may
+be omitted.
+
+This is why we prefer the this syntax and in the remainder will
+use the first version of this command.
+
+@IndexSubentry{Hardware event counters, counter definition}
+The counter definition takes an event name, plus optionally one or
+more attributes, followed by a comma, and optionally the sampling rate.
+The output section below shows the formal definition.
+
+@cartouche
+@smallexample
+ <ctr_def> == <ctr>[[~<attr>=<val>]...],[<rate>]
+@end smallexample
+@end cartouche
+
+The printed help then explains this syntax. Below we have summarized
+and expanded this output:
+
+@table @code
+
+@item <ctr>
+The counter name must be selected from the available counters listed
+as part of the output printed with the @code{-h} option.
+On most systems, if a counter is not listed, it may still be specified
+by its numeric value.
+
+@item ~<attr>=<val>
+This is an optional attribute that depends on the processor. The list
+of supported attributes is printed in the output. Examples of
+attributes are ``user'', or ``system''. The value can given in decimal
+or hexadecimal format.
+Multiple attributes may be specified, and each must be preceded
+by a ~.
+
+@item <rate>
+
+The sampling rate is one of the following:
+
+@table @code
+
+@item auto
+This is the default and matches the rate used by clock profiling.
+If clock profiling is disabled, use @code{on}.
+
+@item on
+Set the per thread maximum sampling rate to ~100 samples/second
+
+@item lo
+Set the per thread maximum sampling rate to ~10 samples/second
+
+@item hi
+Set the per thread maximum sampling rate to ~1000 samples/second
+
+@item <interval>
+Define the sampling interval.
+@xref{Control the Sampling Frequency} how to define this.
+
+@end table
+
+@end table
+
+After the section with the formal definition of events and counters, a
+processor specific list is displayed. This part starts with an overview
+of the default set of counters and the aliased names supported
+@emph{on this specific processor}.
+
+@smallexample
+@verbatim
+Default set of HW counters:
+
+ -h cycles,,insts,,llm
+
+Aliases for most useful HW counters:
+
+ alias raw name type units regs description
+
+ cycles unhalted-core-cycles CPU-cycles 0123 CPU Cycles
+ insts instruction-retired events 0123 Instructions Executed
+ llm llc-misses events 0123 Last-Level Cache Misses
+ br_msp branch-misses-retired events 0123 Branch Mispredict
+ br_ins branch-instruction-retired events 0123 Branch Instructions
+@end verbatim
+@end smallexample
+
+The definitions given above may or may not be available on other processors,
+but we try to maximize the overlap across alias sets.
+
+The table above shows the default set of counters defined for this processor,
+and the aliases. For each alias the full ``raw'' name is given, plus the
+unit of the number returned by the counter (CPU cycles, or a raw count),
+the hardware counter the event is allowed to be mapped onto, and a short
+description.
+
+The last part of the output contains all the events that can be monitored:
+
+@smallexample
+@verbatim
+Raw HW counters:
+
+ name type units regs description
+
+ unhalted-core-cycles CPU-cycles 0123
+ unhalted-reference-cycles events 0123
+ instruction-retired events 0123
+ llc-reference events 0123
+ llc-misses events 0123
+ branch-instruction-retired events 0123
+ branch-misses-retired events 0123
+ ld_blocks.store_forward events 0123
+ ld_blocks.no_sr events 0123
+ ld_blocks_partial.address_alias events 0123
+ dtlb_load_misses.miss_causes_a_walk events 0123
+ dtlb_load_misses.walk_completed_4k events 0123
+
+ <many lines deleted>
+
+ l2_lines_out.silent events 0123
+ l2_lines_out.non_silent events 0123
+ l2_lines_out.useless_hwpf events 0123
+ sq_misc.split_lock events 0123
+
+See Chapter 19 of the "Intel 64 and IA-32 Architectures Software
+Developer's Manual Volume 3B: System Programming Guide"
+@end verbatim
+@end smallexample
+
+As can be seen, these names are not always easy to correlate to a specific
+event of interest. The processor manual should provide more clarity on this.
+
+@c -- A new node --------------------------------------------------------------
+@node Examples Using Hardware Event Counters
+@subsection Examples Using Hardware Event Counters
+@c ----------------------------------------------------------------------------
+
+The previous section may give the impression that these counters are hard to
+use, but as we will show now, in practice it is quite simple.
+
+With the information from the @code{-h} option, we can easily set up our first
+event counter experiment.
+
+We start by using the default set of counters defined for our processor and we
+use 2 threads:
+
+@cartouche
+@smallexample
+$ exe=mxv-pthreads.exe
+$ m=3000
+$ n=2000
+$ exp=mxv.hwc.def.2.thr.er
+$ gprofng collect app -O $exp -h auto ./$exe -m $m -n $n -t 2
+@end smallexample
+@end cartouche
+
+@IndexSubentry{Options, @code{-h}}
+@IndexSubentry{Hardware event counters, @code{auto} option}
+The new option here is @code{-h auto}. The @code{auto} keyword enables
+hardware event counter profiling and selects the default set of counters
+defined for this processor.
+
+As before, we can display the information, but there is one practical hurdle
+to take. Unless we like to view all metrics recorded, we would need to know
+the names of the events that have been enabled. This is tedious and also not
+portable in case we would like to repeat this experiment on another processor.
+
+@IndexSubentry{Hardware event counters, @code{hwc} metric}
+This is where the special @code{hwc} metric comes very handy. It
+automatically expands to the active set of events used.
+
+With this, it is very easy to display the event counter values. Note that
+although the regular clock based profiling was enabled, we only want to see
+the counter values. We also request to see the percentages and limit the
+output to the first 5 lines:
+
+@cartouche
+@smallexample
+$ exp=mxv.hwc.def.2.thr.er
+$ gprofng display text -metrics e.%hwc -limit 5 -functions $exp
+@end smallexample
+@end cartouche
+
+@smallexample
+@verbatim
+Current metrics: e.%cycles:e+%insts:e+%llm:name
+Current Sort Metric: Exclusive CPU Cycles ( e.%cycles )
+Print limit set to 5
+Functions sorted by metric: Exclusive CPU Cycles
+
+Excl. CPU Excl. Instructions Excl. Last-Level Name
+Cycles Executed Cache Misses
+ sec. % % %
+2.691 100.00 7906475309 100.00 122658983 100.00 <Total>
+2.598 96.54 7432724378 94.01 121745696 99.26 mxv_core
+0.035 1.31 188860269 2.39 70084 0.06 erand48_r
+0.026 0.95 73623396 0.93 763116 0.62 init_data
+0.018 0.66 76824434 0.97 40040 0.03 drand48
+@end verbatim
+@end smallexample
+
+As we have seen before, the first few lines echo the settings.
+This includes a list with the hardware event counters used by
+default.
+
+The table that follows makes it very easy to get an overview where the
+time is spent and how many of the target events have occurred.
+
+As before, we can drill down deeper and see the same metrics at the source
+line and instruction level. Other than using @code{hwc} in the metrics
+definitions, nothing has changed compared to the previous examples:
+
+@cartouche
+@smallexample
+$ exp=mxv.hwc.def.2.thr.er
+$ gprofng display text -metrics e.hwc -source mxv_core $exp
+@end smallexample
+@end cartouche
+
+This is the relevant part of the output. Since the lines get very long,
+we have somewhat modified the lay-out:
+
+@smallexample
+@verbatim
+ Excl. CPU Excl. Excl.
+ Cycles Instructions Last-Level
+ sec. Executed Cache Misses
+ <Function: mxv_core>
+ 0. 0 0 32. void __attribute__ ((noinline))
+ mxv_core(...)
+ 0. 0 0 33. {
+ 0. 0 0 34. for (uint64_t i=...) {
+ 0. 0 0 35. double row_sum = 0.0;
+## 1.872 7291879319 88150571 36. for (int64_t j=0; j<n; j++)
+ 0.725 140845059 33595125 37. row_sum += A[i][j]*b[j];
+ 0. 0 0 38. c[i] = row_sum;
+ 39. }
+ 0. 0 0 40. }
+@end verbatim
+@end smallexample
+
+In a smiliar way we can display the event counter values at the instruction
+level. Again we have modified the lay-out due to page width limitations:
+
+@cartouche
+@smallexample
+$ exp=mxv.hwc.def.2.thr.er
+$ gprofng display text -metrics e.hwc -disasm mxv_core $exp
+@end smallexample
+@end cartouche
+
+@smallexample
+@verbatim
+ Excl. CPU Excl. Excl.
+ Cycles Instructions Last-Level
+ sec. Executed Cache Misses
+ <Function: mxv_core>
+ 0. 0 0 [33] 4021ba: mov 0x8(%rsp),%r10
+ 34. for (uint64_t i=...) {
+ 0. 0 0 [34] 4021bf: cmp %rsi,%rdi
+ 0. 0 0 [34] 4021c2: jbe 0x37
+ 0. 0 0 [34] 4021c4: ret
+ 35. double row_sum = 0.0;
+ 36. for (int64_t j=0; j<n; j++)
+ 37. row_sum += A[i][j]*b[j];
+ 0. 0 0 [37] 4021c5: mov (%r8,%rdi,8),%rdx
+ 0. 0 0 [36] 4021c9: mov $0x0,%eax
+ 0. 0 0 [35] 4021ce: pxor %xmm1,%xmm1
+ 0.002 12804230 321394 [37] 4021d2: movsd (%rdx,%rax,8),%xmm0
+ 0.141 60819025 3866677 [37] 4021d7: mulsd (%r9,%rax,8),%xmm0
+ 0.582 67221804 29407054 [37] 4021dd: addsd %xmm0,%xmm1
+## 1.871 7279075109 87989870 [36] 4021e1: add $0x1,%rax
+ 0.002 12804210 80351 [36] 4021e5: cmp %rax,%rcx
+ 0. 0 0 [36] 4021e8: jne 0xffffffffffffffea
+ 38. c[i] = row_sum;
+ 0. 0 0 [38] 4021ea: movsd %xmm1,(%r10,%rdi,8)
+ 0. 0 0 [34] 4021f0: add $0x1,%rdi
+ 0. 0 0 [34] 4021f4: cmp %rdi,%rsi
+ 0. 0 0 [34] 4021f7: jb 0xd
+ 0. 0 0 [35] 4021f9: pxor %xmm1,%xmm1
+ 0. 0 0 [36] 4021fd: test %rcx,%rcx
+ 0. 0 80350 [36] 402200: jne 0xffffffffffffffc5
+ 0. 0 0 [36] 402202: jmp 0xffffffffffffffe8
+ 39. }
+ 40. }
+ 0. 0 0 [40] 402204: ret
+@end verbatim
+@end smallexample
+
+So far we have used the default settings for the event counters. It is
+quite straightforward to select specific counters. For sake of the
+example, let's assume we would like to count how many branch instructions
+and retired memory load instructions that missed in the L1 cache have been
+executed. We also want to count these events with a high resolution.
+
+This is the command to do so:
+
+@cartouche
+@smallexample
+$ exe=mxv-pthreads.exe
+$ m=3000
+$ n=2000
+$ exp=mxv.hwc.sel.2.thr.er
+$ hwc1=br_ins,hi
+$ hwc2=mem_load_retired.l1_miss,hi
+$ gprofng collect app -O $exp -h $hwc1 -h $hwc2 $exe -m $m -n $n -t 2
+@end smallexample
+@end cartouche
+
+As before, we get a table with the event counts. Due to the very
+long name for the second counter, we have somewhat modified the
+output.
+
+@cartouche
+@smallexample
+$ gprofng display text -limit 10 -functions mxv.hwc.sel.2.thr.er
+@end smallexample
+@end cartouche
+
+@smallexample
+@verbatim
+Functions sorted by metric: Exclusive Total CPU Time
+Excl. Incl. Excl. Branch Excl. Name
+Total Total Instructions mem_load_retired.l1_miss
+CPU sec. CPU sec. Events
+2.597 2.597 1305305319 4021340 <Total>
+2.481 2.481 1233233242 3982327 mxv_core
+0.040 0.107 19019012 9003 init_data
+0.028 0.052 23023048 15006 erand48_r
+0.024 0.024 19019008 9004 __drand48_iterate
+0.015 0.067 11011009 2998 drand48
+0.008 0.010 0 3002 _int_malloc
+0.001 0.001 0 0 brk
+0.001 0.002 0 0 sysmalloc
+0. 0.001 0 0 __default_morecore
+@end verbatim
+@end smallexample
+
+@IndexSubentry{Commands, @code{compare ratio}}
+When using event counters, the values could be very large and it is not easy
+to compare the numbers. As we will show next, the @code{ratio} feature is
+very useful when comparing such profiles.
+
+To demonstrate this, we have set up another event counter experiment where
+we would like to compare the number of last level cache miss and the number
+of branch instructions executed when using a single thread, or two threads.
+
+These are the commands used to generate the experiment directories:
+
+@cartouche
+@smallexample
+$ exe=./mxv-pthreads.exe
+$ m=3000
+$ n=2000
+$ exp1=mxv.hwc.comp.1.thr.er
+$ exp2=mxv.hwc.comp.2.thr.er
+$ gprofng collect app -O $exp1 -h llm -h br_ins $exe -m $m -n $n -t 1
+$ gprofng collect app -O $exp2 -h llm -h br_ins $exe -m $m -n $n -t 2
+@end smallexample
+@end cartouche
+
+The following script has been used to get the tables. Due to lay-out
+restrictions, we have to create two tables, one for each counter.
+
+@cartouche
+@smallexample
+# Limit the output to 5 lines
+limit 5
+# Define the metrics
+metrics name:e.llm
+# Set the comparison to ratio
+compare ratio
+functions
+# Define the metrics
+metrics name:e.br_ins
+# Set the comparison to ratio
+compare ratio
+functions
+@end smallexample
+@end cartouche
+
+Note that we print the name of the function first, followed by the counter
+data.
+The new element is that we set the comparison mode to @code{ratio}. This
+divides the data in a column by its counterpart in the reference experiment.
+
+This is the command using this script and the two experiment directories as
+input:
+
+@cartouche
+@smallexample
+$ gprofng display text -script my-script-comp-counters \
+ mxv.hwc.comp.1.thr.er \
+ mxv.hwc.comp.2.thr.er
+@end smallexample
+@end cartouche
+
+By design, we get two tables, one for each counter:
+
+@smallexample
+@verbatim
+Functions sorted by metric: Exclusive Last-Level Cache Misses
+
+ mxv.hwc.comp.1.thr.er mxv.hwc.comp.2.thr.er
+Name Excl. Last-Level Excl. Last-Level
+ Cache Misses Cache Misses
+ ratio
+ <Total> 122709276 x 0.788
+ mxv_core 121796001 x 0.787
+ init_data 723064 x 1.055
+ erand48_r 100111 x 0.500
+ drand48 60065 x 1.167
+
+Functions sorted by metric: Exclusive Branch Instructions
+
+ mxv.hwc.comp.1.thr.er mxv.hwc.comp.2.thr.er
+Name Excl. Branch Excl. Branch
+ Instructions Instructions
+ ratio
+ <Total> 1307307316 x 0.997
+ mxv_core 1235235239 x 0.997
+ erand48_r 23023033 x 0.957
+ drand48 20020009 x 0.600
+ __drand48_iterate 17017028 x 0.882
+@end verbatim
+@end smallexample
+
+A ratio less than one in the second column, means that this counter
+value was smaller than the value from the reference experiment shown
+in the first column.
+
+This kind of presentation of the results makes it much easier to
+quickly interpret the data.
+
+We conclude this section with thread-level event counter overviews,
+but before we go into this, there is an important metric we need to
+mention.
+
+@IndexSubentry{Hardware event counters, IPC}
+In case it is known how many instructions and CPU cycles have been executed,
+the value for the IPC (``Instructions Per Clockycle'') can be computed.
+@xref{Hardware Event Counters Explained}.
+This is a derived metric that gives an indication how well the processor
+is utilized. The inverse of the IPC is called CPI.
+
+The @DisplayText{} command automatically computes the IPC and CPI values
+if an experiment contains the event counter values for the instructions
+and CPU cycles executed. These are part of the metric list and can be
+displayed, just like any other metric.
+
+@IndexSubentry{Commands, @code{metric_list}}
+This can be verified through the @code{metric_list} command. If we go
+back to our earlier experiment with the default event counters, we get
+the following result.
+
+@cartouche
+@smallexample
+$ gprofng display text -metric_list mxv.hwc.def.2.thr.er
+@end smallexample
+@end cartouche
+
+@smallexample
+@verbatim
+Current metrics: e.totalcpu:i.totalcpu:e.cycles:e+insts:e+llm:name
+Current Sort Metric: Exclusive Total CPU Time ( e.totalcpu )
+Available metrics:
+ Exclusive Total CPU Time: e.%totalcpu
+ Inclusive Total CPU Time: i.%totalcpu
+ Exclusive CPU Cycles: e.+%cycles
+ Inclusive CPU Cycles: i.+%cycles
+ Exclusive Instructions Executed: e+%insts
+ Inclusive Instructions Executed: i+%insts
+Exclusive Last-Level Cache Misses: e+%llm
+Inclusive Last-Level Cache Misses: i+%llm
+ Exclusive Instructions Per Cycle: e+IPC
+ Inclusive Instructions Per Cycle: i+IPC
+ Exclusive Cycles Per Instruction: e+CPI
+ Inclusive Cycles Per Instruction: i+CPI
+ Size: size
+ PC Address: address
+ Name: name
+@end verbatim
+@end smallexample
+
+Among the other metrics, we see the new metrics for the IPC and CPI
+listed.
+
+In the script below, we use this information and add the IPC and CPI
+to the metrics to be displayed. We also use a the thread filter to
+display these values for the individual threads.
+
+This is the complete script we have used. Other than a different selection
+of the metrics, there are no new features.
+
+@cartouche
+@smallexample
+# Define the metrics
+metrics e.insts:e.%cycles:e.IPC:e.CPI
+# Sort with respect to cycles
+sort e.cycles
+# Limit the output to 5 lines
+limit 5
+# Get the function overview for all threads
+functions
+# Get the function overview for thread 1
+thread_select 1
+functions
+# Get the function overview for thread 2
+thread_select 2
+functions
+# Get the function overview for thread 3
+thread_select 3
+functions
+@end smallexample
+@end cartouche
+
+In the metrics definition on the second line, we explicitly request the
+counter values for the instructions (@code{e.insts}) and CPU cycles
+(@code{e.cycles}) executed. These names can be found in output from the
+@code{metric_list} commad above.
+In addition to these metrics, we also request the IPC and CPI to be shown.
+
+As before, we used the @code{limit} command to control the number of
+functions displayed. We then request an overview for all the threads,
+followed by three sets of two commands to select a thread and display the
+function overview.
+
+The script above is used as follows:
+
+@cartouche
+@smallexample
+$ gprofng display text -script my-script-ipc mxv.hwc.def.2.thr.er
+@end smallexample
+@end cartouche
+
+This script produces four tables. We list them separately below,
+and have left out the additional output.
+
+The first table shows the accumulated values across the three
+threads that have been active.
+
+@smallexample
+@verbatim
+Functions sorted by metric: Exclusive CPU Cycles
+
+Excl. Excl. CPU Excl. Excl. Name
+Instructions Cycles IPC CPI
+Executed sec. %
+7906475309 2.691 100.00 1.473 0.679 <Total>
+7432724378 2.598 96.54 1.434 0.697 mxv_core
+ 188860269 0.035 1.31 2.682 0.373 erand48_r
+ 73623396 0.026 0.95 1.438 0.696 init_data
+ 76824434 0.018 0.66 2.182 0.458 drand48
+@end verbatim
+@end smallexample
+
+This shows that IPC of this program is completely dominated
+by function @code{mxv_core}. It has a fairly low IPC value
+of 1.43.
+
+The next table is for thread 1 and shows the values for the
+main thread.
+
+@smallexample
+@verbatim
+Exp Sel Total
+=== === =====
+ 1 1 3
+Functions sorted by metric: Exclusive CPU Cycles
+
+Excl. Excl. CPU Excl. Excl. Name
+Instructions Cycles IPC CPI
+Executed sec. %
+473750931 0.093 100.00 2.552 0.392 <Total>
+188860269 0.035 37.93 2.682 0.373 erand48_r
+ 73623396 0.026 27.59 1.438 0.696 init_data
+ 76824434 0.018 18.97 2.182 0.458 drand48
+134442832 0.013 13.79 5.250 0.190 __drand48_iterate
+@end verbatim
+@end smallexample
+
+Although this thread hardly uses any CPU cycles, the overall IPC
+of 2.55 is not all that bad.
+
+Last, we show the tables for threads 2 and 3:
+
+@smallexample
+@verbatim
+Exp Sel Total
+=== === =====
+ 1 2 3
+Functions sorted by metric: Exclusive CPU Cycles
+
+Excl. Excl. CPU Excl. Excl. Name
+Instructions Cycles IPC CPI
+Executed sec. %
+3716362189 1.298 100.00 1.435 0.697 <Total>
+3716362189 1.298 100.00 1.435 0.697 mxv_core
+ 0 0. 0. 0. 0. collector_root
+ 0 0. 0. 0. 0. driver_mxv
+
+Exp Sel Total
+=== === =====
+ 1 3 3
+Functions sorted by metric: Exclusive CPU Cycles
+
+Excl. Excl. CPU Excl. Excl. Name
+Instructions Cycles IPC CPI
+Executed sec. %
+3716362189 1.300 100.00 1.433 0.698 <Total>
+3716362189 1.300 100.00 1.433 0.698 mxv_core
+ 0 0. 0. 0. 0. collector_root
+ 0 0. 0. 0. 0. driver_mxv
+@end verbatim
+@end smallexample
+
+It is seen that both execute the same number of instructions and
+take about the same number of CPU cycles. As a result, the IPC is
+the same for both threads.
+
+@c -- A new node --------------------------------------------------------------
+@c TBD @node Additional Features
+@c TBD @section Additional Features
+@c ----------------------------------------------------------------------------
+
+@c -- A new node --------------------------------------------------------------
+@c TBD @node More Filtering Capabilities
+@c TBD @subsection More Filtering Capabilities
+@c ----------------------------------------------------------------------------
+
+@c TBD Cover @code{samples} and @code{seconds}
+
+@c -- A new node --------------------------------------------------------------
+@node Java Profiling
+@section Java Profiling
+@c ----------------------------------------------------------------------------
+
+@IndexSubentry{Java profiling, @code{-j on/off}}
+The @CollectApp{} command supports Java profiling. The @code{-j on} option
+can be used for this, but since this feature is enabled by default, there is
+no need to set this explicitly. Java profiling may be disabled through the
+@code{-j off} option.
+
+The program is compiled as usual and the experiment directory is created
+similar to what we have seen before. The only difference with a C/C++
+application is that the program has to be explicitly executed by java.
+
+For example, this is how to generate the experiment data for a Java
+program that has the source code stored in file @code{Pi.java}:
+
+@cartouche
+@smallexample
+$ javac Pi.java
+$ gprofng collect app -j on -O pi.demo.er java Pi < pi.in
+@end smallexample
+@end cartouche
+
+Regarding which java is selected to generate the data, @ToolName{}
+first looks for the JDK in the path set in either the
+@IndexSubentry{Java profiling, @code{JDK_HOME}}
+@code{JDK_HOME} environment variable, or in the
+@IndexSubentry{Java profiling, @code{JAVA_PATH}}
+@code{JAVA_PATH} environment variable. If neither of these variables is
+set, it checks for a JDK in the search path (set in the PATH
+environment variable). If there is no JDK in this path, it checks for
+the java executable in @code{/usr/java/bin/java}.
+
+In case additional options need to be passed on to the JVM, the
+@IndexSubentry{Java profiling, @code{-J <string>}}
+@code{-J <string>} option can be used. The string with the
+option(s) has to be delimited by quotation marks in case
+there is more than one argument.
+
+The @DisplayText{} command may be used to view the performance data. There is
+no need for any special options and the same commands as previously discussed
+are supported.
+
+@IndexSubentry{Commands, @code{viewmode}}
+@IndexSubentry{Java profiling, different view modes}
+The @code{viewmode} command
+@xref{The Viewmode}
+is very useful to examine the call stacks.
+
+For example, this is how one can see the native call stacks. For
+lay-out purposes we have restricted the list to the first five entries:
+
+@cartouche
+@smallexample
+$ gprofng display text -limit 5 -viewmode machine -calltree pi.demo.er
+@end smallexample
+@end cartouche
+
+@smallexample
+@verbatim
+Print limit set to 5
+Viewmode set to machine
+Functions Call Tree. Metric: Attributed Total CPU Time
+
+Attr. Name
+Total
+CPU sec.
+1.381 +-<Total>
+1.171 +-Pi.calculatePi(double)
+0.110 +-collector_root
+0.110 | +-JavaMain
+0.070 | +-jni_CallStaticVoidMethod
+@end verbatim
+@end smallexample
+
+@noindent
+Note that the selection of the viewmode is echoed in the output.
+
+@c -- A new node --------------------------------------------------------------
+@c TBD @node Summary of Options and Commands
+@c TBD @chapter Summary of Options and Commands
+@c ----------------------------------------------------------------------------
+
+@c -- A new node --------------------------------------------------------------
+@node Terminology
+@chapter Terminology
+
+Throughout this manual, certain terminology specific to profiling tools,
+or @ToolName{}, or even to this document only, is used. In this chapter we
+explain this terminology in detail.
+
+@menu
+* The Program Counter:: What is a Program Counter?
+* Inclusive and Exclusive Metrics:: An explanation of inclusive and exclusive metrics.
+* Metric Definitions:: Definitions associated with metrics.
+* The Viewmode:: Select the way call stacks are presented.
+* The Selection List:: How to define a selection.
+* Load Objects and Functions:: The components in an application.
+* The Concept of a CPU in @ProductName{}:: The definition of a CPU.
+* Hardware Event Counters Explained:: What are event counters?
+* apath:: Our generic definition of a path.
+@end menu
+
+@c ----------------------------------------------------------------------------
+@node The Program Counter
+@section The Program Counter
+@c ----------------------------------------------------------------------------
+
+@cindex PC
+@cindex Program Counter
+The @emph{Program Counter}, or PC for short, keeps track where program execution is.
+The address of the next instruction to be executed is stored in a special
+purpose register in the processor, or core.
+
+@cindex Instruction pointer
+The PC is sometimes also referred to as the @emph{instruction pointer}, but
+we will use Program Counter or PC throughout this document.
+
+@c ----------------------------------------------------------------------------
+@node Inclusive and Exclusive Metrics
+@section Inclusive and Exclusive Metrics
+@c ----------------------------------------------------------------------------
+
+In the remainder, these two concepts occur quite often and for lack of a better
+place, they are explained here.
+
+@cindex Inclusive metric
+The @emph{inclusive} value for a metric includes all values that are part of
+the dynamic extent of the target function. For example if function @code{A}
+calls functions @code{B} and @code{C}, the inclusive CPU time for @code{A}
+includes the CPU time spent in @code{B} and @code{C}.
+
+@cindex Exclusive metric
+In contrast with this, the @emph{exclusive} value for a metric is computed
+by excluding the metric values used by other functions called. In our imaginary
+example, the exclusive CPU time for function @code{A} is the time spent outside
+calling functions @code{B} and @code{C}.
+
+@cindex Leaf function
+In case of a @emph{leaf function}, the inclusive and exclusive values for the
+metric are the same since by definition, it is not calling any other
+function(s).
+
+Why do we use these two different values? The inclusive metric shows the most
+expensive path, in terms of this metric, in the application. For example, if
+the metric is cache misses, the function with the highest inclusive metric
+tells you where most of the cache misses come from.
+
+Within this branch of the application, the exclusive metric points to the
+functions that contribute and help to identify which part(s) to consider
+for further analysis.
+
+@c ----------------------------------------------------------------------------
+@node Metric Definitions
+@section Metric Definitions
+@c ----------------------------------------------------------------------------
+The metrics to be shown are highly customizable. In this section we explain
+the definitions associated with metrics.
+
+@IndexSubentry{Commands, @code{metrics}}
+The @code{metrics} command takes a colon (:) separated list with special
+keywords. This keyword consists of the following three fields:
+@code{<flavor>}@code{<visibility>}@code{<metric_name>}.
+
+@cindex Flavor field
+@cindex Visibility field
+@cindex Metric name field
+The @emph{<flavor>} field is either an @code{e} for ``exclusive'', or @code{i}
+for ``inclusive''. The @code{<metric_name>} field is the name of the metric
+request. The @emph{<visibility>} field consists of one ore more characters
+from the following table:
+
+@table @code
+
+@item .
+Show the metric as time. This applies to timing metrics and hardware event counters
+that measure cycles. Interpret as @code{+} for other metrics.
+
+@item %
+Show the metric as a percentage of the total value for this metric.
+
+@item +
+Show the metric as an absolute value. For hardware event counters this is
+the event count. Interpret as @code{.} for timing metrics.
+
+@item |
+Do not show any metric value. Cannot be used with other visibility characters.
+
+@end table
+
+@c ----------------------------------------------------------------------------
+@node The Viewmode
+@section The Viewmode
+
+@cindex Viewmode
+@IndexSubentry{Commands, @code{viewmode}}
+
+There are different ways to view a call stack in Java. In @ToolName{}, this
+is called the @emph{viewmode} and the setting is controlled through a command
+with the same name.
+
+The @code{viewmode} command takes one of the following keywords:
+
+@table @code
+
+@item user
+This is the default and shows the Java call stacks for Java threads.
+No call stacks for any housekeeping threads are shown. The function
+list contains a function
+@IndexSubentry{Java profiling, @code{<JVM-System>}}
+@code{<JVM-System>} that represents the aggregated time from non-Java
+threads.
+When the JVM software does not report a Java call stack, time is reported
+against the function
+@IndexSubentry{Java profiling, @code{<no Java callstack recorded>}}
+@code{<no Java callstack recorded>}.
+
+
+@item expert
+Show the Java call stacks for Java threads when the Java code from the
+user is executed and machine call stacks when JVM code is executed, or
+when the JVM software does not report a Java call stack.
+Show the machine call stacks for housekeeping threads.
+
+@item machine
+Show the actual native call stacks for all threads.
+
+@end table
+
+@c ----------------------------------------------------------------------------
+@c ----------------------------------------------------------------------------
+@node The Selection List
+@section The Selection List
+@c ----------------------------------------------------------------------------
+
+@cindex Selection list
+@cindex List specification
+Several commands allow the user to specify a subset of a list. For example,
+to select specific threads from all the threads that have been used when
+conducting the experiment(s).
+
+Such a selection list (or ``list'' in the remainder of this section) can be a
+single number, a contiguous range of numbers with the start and end numbers
+separated by a hyphen (@code{-}), a comma-separated list of numbers and
+ranges, or the @code{all} keyword. Lists must not contain spaces.
+
+Each list can optionally be preceded by an experiment list with a similar
+format, separated from the list by a colon (:).
+If no experiment list is included, the list applies to all experiments.
+
+Multiple lists can be concatenated by separating the individual lists
+by a plus sign.
+
+These are some examples of various filters using a list:
+
+@table @code
+
+@item thread_select 1
+Select thread 1 from all experiments.
+
+@item thread_select all:1
+Select thread 1 from all experiments.
+
+@item thread_select 1:1+2:2
+Select thread 1 from experiment 1 and thread 2 from experiment 2.
+
+@item cpu_select all:1,3,5
+Selects cores 1, 3, and 5 from all experiments.
+
+@item cpu_select 1,2:all
+Select all cores from experiments 1 and 2, as listed by the @code{by exp_list} command.
+
+@end table
+
+@c ----------------------------------------------------------------------------
+@node Load Objects and Functions
+@section Load Objects and Functions
+@c ----------------------------------------------------------------------------
+
+An application consists of various components. The source code files are
+compiled into object files. These are then glued together at link time to form
+the executable.
+During execution, the program may also dynamically load objects.
+
+@cindex Load object
+A @emph{load object} is defined to be an executable, or shared object. A shared
+library is an example of a load object in @ToolName{}.
+
+Each load object, contains a text section with the instructions generated by the
+compiler, a data section for data, and various symbol tables.
+All load objects must contain an
+@cindex ELF
+ELF
+symbol table, which gives the names and addresses of all the globally known
+functions in that object.
+
+Load objects compiled with the -g option contain additional symbolic information
+that can augment the ELF symbol table and provide information about functions that
+are not global, additional information about object modules from which the functions
+came, and line number information relating addresses to source lines.
+
+The term
+@cindex Function
+@emph{function}
+is used to describe a set of instructions that represent a high-level operation
+described in the source code. The term also covers methods as used in C++ and in
+the Java programming language.
+
+In the @ToolName{} context, functions are provided in source code format.
+Normally their names appear in the symbol table representing a set of addresses.
+@cindex Program Counter
+@cindex PC
+If the Program Counter (PC) is within that set, the program is executing within that function.
+
+In principle, any address within the text segment of a load object can be mapped to a
+function. Exactly the same mapping is used for the leaf PC and all the other PCs on the
+call stack.
+
+Most of the functions correspond directly to the source model of the program, but
+there are exceptions. This topic is however outside of the scope of this guide.
+
+@c ----------------------------------------------------------------------------
+@node The Concept of a CPU in @ProductName{}
+@section The Concept of a CPU in @ProductName{}
+@c ----------------------------------------------------------------------------
+
+@cindex CPU
+In @ProductName{}, there is the concept of a CPU. Admittedly, this is not the
+best word to describe what is meant here and may be replaced in the future.
+
+The word CPU is used in many of the displays.
+In the context of @ProductName{}, it is meant to denote a part of the
+processor that is capable of executing instructions and with its own state,
+like the program counter.
+
+For example, on a contemporary processor, a CPU could be a core. In case
+hardware threads are supported within a core, it could be one of those
+hardware threads.
+
+@c ----------------------------------------------------------------------------
+@node Hardware Event Counters Explained
+@section Hardware Event Counters Explained
+@c ----------------------------------------------------------------------------
+
+@IndexSubentry{Hardware event counters, description}
+For quite a number of years now, many microprocessors have supported hardware
+event counters.
+
+On the hardware side, this means that in the processor there are one or more
+registers dedicated to count certain activities, or ``events''.
+Examples of such events are the number of instructions executed, or the number
+of cache misses at level 2 in the memory hierarchy.
+
+While there is a limited set of such registers, the user can map events onto
+them. In case more than one register is available, this allows for the
+simultaenous measurement of various events.
+
+A simple, yet powerful, example is to simultaneously count the number of CPU
+cycles and the number of instructions excuted. These two numbers can then be
+used to compute the
+@cindex IPC
+@emph{IPC} value. IPC stands for ``Instructions Per Clockcycle'' and each processor
+has a maximum. For example, if this maximum number is 2, it means the
+processor is capable of executing two instructions every clock cycle.
+
+Whether this is actually achieved, depends on several factors, including the
+instruction characteristics.
+However, in case the IPC value is well below this maximum in a time critical
+part of the application and this cannot be easily explained, further
+investigation is probably warranted.
+
+@cindex CPI
+A related metric is called @emph{CPI}, or ``Clockcycles Per Instruction''.
+It is the inverse of the CPI and can be compared against the theoretical
+value(s) of the target instruction(s). A significant difference may point
+at a bottleneck.
+
+One thing to keep in mind is that the value returned by a counter can either
+be the number of times the event occured, or a CPU cycle count. In case of
+the latter it is possible to convert this number to time.
+
+@IndexSubentry{Hardware event counters, variable CPU frequency}
+This is often easier to interpret than a simple count, but there is one
+caveat to keep in mind. The CPU frequency may not have been constant while
+the experimen was recorded and this impacts the time reported.
+
+These event counters, or ``counters'' for short, provide great insight into
+what happens deep inside the processor. In case higher level information does
+not provide the insight needed, the counters provide the information to get
+to the bottom of a performance problem.
+
+There are some things to consider though.
+
+@itemize @bullet
+
+@item
+The event definitions and names vary across processors and it may even happen
+that some events change with an update.
+Unfortunately and this is luckily rare, there are sometimes bugs causing the
+wrong count to be returned.
+
+@IndexSubentry{Hardware event counters, alias name}
+In @ToolName{}, some of the processor specific event names have an alias
+name. For example @code{insts} measures the instructions executed.
+These aliases not only makes it easier to identify the functionality, but also
+provide portability of certain events across processors.
+
+@item
+Another complexity is that there are typically many events one can monitor.
+There may up to hundreds of events available and it could require several
+experiments to zoom in on the root cause of a performance problem.
+
+@item
+There may be restrictions regarding the mapping of event(s) onto the
+counters. For example, certain events may be restricted to specific
+counters only. As a result, one may have to conduct additional experiments
+to cover all the events of interest.
+
+@item
+The names of the events may also not be easy to interpret. In such cases,
+the description can be found in the architecture manual for the processor.
+
+@end itemize
+
+Despite these drawbacks, hardware event counters are extremely useful and
+may even turn out to be indispensable.
+
+@c ----------------------------------------------------------------------------
+@node apath
+@section What is <apath>?
+@c ----------------------------------------------------------------------------
+
+In most cases, @ToolName{} shows the absolute pathnames of directories. These
+tend to be rather long, causing display issues in this document.
+
+Instead of wrapping these long pathnames over multiple lines, we decided to
+represent them by the @code{<apath>} symbol, which stands for ``an absolute
+pathname''.
+
+Note that different occurrences of @code{<apath>} may represent different
+absolute pathnames.
+
+@c -- A new node --------------------------------------------------------------
+@node Other Document Formats
+@chapter Other Document Formats
+@c ----------------------------------------------------------------------------
+
+This document is written in Texinfo and the source text is made available as
+part of the binutils distribution. The file name is @code{gprofng.texi} and
+can be found in subdirectory @code{doc} under directory @code{gprofng} in the
+top level directory.
+
+This file can be used to generate the document in the @code{info}, @code{html},
+and @code{pdf} formats.
+The default installation procedure creates a file in the @code{info} format and
+stores it in the documentation section of binutils.
+
+The probably easiest way to generate a different format from this Texinfo
+document is to go to the distribution directory that was created when the
+tools were built.
+This is either the default distribution directory, or the one that has been set
+with the @code{--prefix} option as part of the @code{configure} command.
+In this example we symbolize this location with @code{<dist>}.
+
+The make file called @code{Makefile} in directory @code{<dist>/gprofng/doc}
+supports several commands to generate this document in different formats.
+We recommend to use these commands.
+
+They create the file(s) and install it in the documentation directory of binutils,
+which is @code{<dist>/share/doc} in case @code{html} or @code{pdf} is selected and
+@code{<dist>/share/info} for the file in the @code{info} format.
+
+To generate this document in the requested format and install it in the documentation
+directory, the commands below should be executed. In this notation, @code{<format>}
+is one of @code{info}, @code{html}, or @code{pdf}:
+
+@smallexample
+@verbatim
+$ cd <dist>/gprofng/doc
+$ make install-<format>
+@end verbatim
+@end smallexample
+
+@noindent
+Some things to note:
+
+@itemize
+
+@item
+For the @code{pdf} file to be generated, the
+@cindex TeX
+TeX document formatting software is required and the relevant commmands need
+to be included in the search path. An example of a popular TeX implementation
+is @emph{TexLive}. It is beyond the scope of this document to go into the
+details of installing and using TeX, but it is well documented elsewhere.
+
+@item
+Instead of generating a single file in the @code{html} format, it is also
+possible to create a directory with individual files for the various chapters.
+To do so, remove the use of @code{--no-split} in variable @code{MAKEINFOHTML}
+in the make file in the @code{doc} directory.
+
+@item
+The make file also supports commands to only generate the file in the desired
+format and not move them to the documentation directory. This is
+accomplished through the @code{make <format>} command.
+
+@end itemize
+
+@ifnothtml
+@node Index
+@unnumbered Index
+@printindex cp
+@end ifnothtml
+
+@bye
diff --git a/gprofng/doc/mdate-sh b/gprofng/doc/mdate-sh
new file mode 100755
index 00000000000..f80075c049b
--- /dev/null
+++ b/gprofng/doc/mdate-sh
@@ -0,0 +1,224 @@
+#!/bin/sh
+# Get modification time of a file or directory and pretty-print it.
+
+scriptversion=2016-01-11.22; # UTC
+
+# Copyright (C) 1995-2017 Free Software Foundation, Inc.
+# written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, June 1995
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+fi
+
+case $1 in
+ '')
+ echo "$0: No file. Try '$0 --help' for more information." 1>&2
+ exit 1;
+ ;;
+ -h | --h*)
+ cat <<\EOF
+Usage: mdate-sh [--help] [--version] FILE
+
+Pretty-print the modification day of FILE, in the format:
+1 January 1970
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+ exit $?
+ ;;
+ -v | --v*)
+ echo "mdate-sh $scriptversion"
+ exit $?
+ ;;
+esac
+
+error ()
+{
+ echo "$0: $1" >&2
+ exit 1
+}
+
+
+# Prevent date giving response in another language.
+LANG=C
+export LANG
+LC_ALL=C
+export LC_ALL
+LC_TIME=C
+export LC_TIME
+
+# GNU ls changes its time format in response to the TIME_STYLE
+# variable. Since we cannot assume 'unset' works, revert this
+# variable to its documented default.
+if test "${TIME_STYLE+set}" = set; then
+ TIME_STYLE=posix-long-iso
+ export TIME_STYLE
+fi
+
+save_arg1=$1
+
+# Find out how to get the extended ls output of a file or directory.
+if ls -L /dev/null 1>/dev/null 2>&1; then
+ ls_command='ls -L -l -d'
+else
+ ls_command='ls -l -d'
+fi
+# Avoid user/group names that might have spaces, when possible.
+if ls -n /dev/null 1>/dev/null 2>&1; then
+ ls_command="$ls_command -n"
+fi
+
+# A 'ls -l' line looks as follows on OS/2.
+# drwxrwx--- 0 Aug 11 2001 foo
+# This differs from Unix, which adds ownership information.
+# drwxrwx--- 2 root root 4096 Aug 11 2001 foo
+#
+# To find the date, we split the line on spaces and iterate on words
+# until we find a month. This cannot work with files whose owner is a
+# user named "Jan", or "Feb", etc. However, it's unlikely that '/'
+# will be owned by a user whose name is a month. So we first look at
+# the extended ls output of the root directory to decide how many
+# words should be skipped to get the date.
+
+# On HPUX /bin/sh, "set" interprets "-rw-r--r--" as options, so the "x" below.
+set x`$ls_command /`
+
+# Find which argument is the month.
+month=
+command=
+until test $month
+do
+ test $# -gt 0 || error "failed parsing '$ls_command /' output"
+ shift
+ # Add another shift to the command.
+ command="$command shift;"
+ case $1 in
+ Jan) month=January; nummonth=1;;
+ Feb) month=February; nummonth=2;;
+ Mar) month=March; nummonth=3;;
+ Apr) month=April; nummonth=4;;
+ May) month=May; nummonth=5;;
+ Jun) month=June; nummonth=6;;
+ Jul) month=July; nummonth=7;;
+ Aug) month=August; nummonth=8;;
+ Sep) month=September; nummonth=9;;
+ Oct) month=October; nummonth=10;;
+ Nov) month=November; nummonth=11;;
+ Dec) month=December; nummonth=12;;
+ esac
+done
+
+test -n "$month" || error "failed parsing '$ls_command /' output"
+
+# Get the extended ls output of the file or directory.
+set dummy x`eval "$ls_command \"\\\$save_arg1\""`
+
+# Remove all preceding arguments
+eval $command
+
+# Because of the dummy argument above, month is in $2.
+#
+# On a POSIX system, we should have
+#
+# $# = 5
+# $1 = file size
+# $2 = month
+# $3 = day
+# $4 = year or time
+# $5 = filename
+#
+# On Darwin 7.7.0 and 7.6.0, we have
+#
+# $# = 4
+# $1 = day
+# $2 = month
+# $3 = year or time
+# $4 = filename
+
+# Get the month.
+case $2 in
+ Jan) month=January; nummonth=1;;
+ Feb) month=February; nummonth=2;;
+ Mar) month=March; nummonth=3;;
+ Apr) month=April; nummonth=4;;
+ May) month=May; nummonth=5;;
+ Jun) month=June; nummonth=6;;
+ Jul) month=July; nummonth=7;;
+ Aug) month=August; nummonth=8;;
+ Sep) month=September; nummonth=9;;
+ Oct) month=October; nummonth=10;;
+ Nov) month=November; nummonth=11;;
+ Dec) month=December; nummonth=12;;
+esac
+
+case $3 in
+ ???*) day=$1;;
+ *) day=$3; shift;;
+esac
+
+# Here we have to deal with the problem that the ls output gives either
+# the time of day or the year.
+case $3 in
+ *:*) set `date`; eval year=\$$#
+ case $2 in
+ Jan) nummonthtod=1;;
+ Feb) nummonthtod=2;;
+ Mar) nummonthtod=3;;
+ Apr) nummonthtod=4;;
+ May) nummonthtod=5;;
+ Jun) nummonthtod=6;;
+ Jul) nummonthtod=7;;
+ Aug) nummonthtod=8;;
+ Sep) nummonthtod=9;;
+ Oct) nummonthtod=10;;
+ Nov) nummonthtod=11;;
+ Dec) nummonthtod=12;;
+ esac
+ # For the first six month of the year the time notation can also
+ # be used for files modified in the last year.
+ if (expr $nummonth \> $nummonthtod) > /dev/null;
+ then
+ year=`expr $year - 1`
+ fi;;
+ *) year=$3;;
+esac
+
+# The result.
+echo $day $month $year
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC0"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/gprofng/doc/texinfo.tex b/gprofng/doc/texinfo.tex
new file mode 100644
index 00000000000..2bab6347c15
--- /dev/null
+++ b/gprofng/doc/texinfo.tex
@@ -0,0 +1,11731 @@
+% texinfo.tex -- TeX macros to handle Texinfo files.
+%
+% Load plain if necessary, i.e., if running under initex.
+\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
+%
+\def\texinfoversion{2021-02-20.11}
+%
+% Copyright 1985, 1986, 1988, 1990-2021 Free Software Foundation, Inc.
+%
+% This texinfo.tex file is free software: you can redistribute it and/or
+% modify it under the terms of the GNU General Public License as
+% published by the Free Software Foundation, either version 3 of the
+% License, or (at your option) any later version.
+%
+% This texinfo.tex file is distributed in the hope that it will be
+% useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+% of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+% General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <https://www.gnu.org/licenses/>.
+%
+% As a special exception, when this file is read by TeX when processing
+% a Texinfo source document, you may use the result without
+% restriction. This Exception is an additional permission under section 7
+% of the GNU General Public License, version 3 ("GPLv3").
+%
+% Please try the latest version of texinfo.tex before submitting bug
+% reports; you can get the latest version from:
+% https://ftp.gnu.org/gnu/texinfo/ (the Texinfo release area), or
+% https://ftpmirror.gnu.org/texinfo/ (same, via a mirror), or
+% https://www.gnu.org/software/texinfo/ (the Texinfo home page)
+% The texinfo.tex in any given distribution could well be out
+% of date, so if that's what you're using, please check.
+%
+% Send bug reports to bug-texinfo@gnu.org. Please include a
+% complete document in each bug report with which we can reproduce the
+% problem. Patches are, of course, greatly appreciated.
+%
+% To process a Texinfo manual with TeX, it's most reliable to use the
+% texi2dvi shell script that comes with the distribution. For a simple
+% manual foo.texi, however, you can get away with this:
+% tex foo.texi
+% texindex foo.??
+% tex foo.texi
+% tex foo.texi
+% dvips foo.dvi -o # or whatever; this makes foo.ps.
+% The extra TeX runs get the cross-reference information correct.
+% Sometimes one run after texindex suffices, and sometimes you need more
+% than two; texi2dvi does it as many times as necessary.
+%
+% It is possible to adapt texinfo.tex for other languages, to some
+% extent. You can get the existing language-specific files from the
+% full Texinfo distribution.
+%
+% The GNU Texinfo home page is https://www.gnu.org/software/texinfo.
+
+
+\message{Loading texinfo [version \texinfoversion]:}
+
+% If in a .fmt file, print the version number
+% and turn on active characters that we couldn't do earlier because
+% they might have appeared in the input file name.
+\everyjob{\message{[Texinfo version \texinfoversion]}%
+ \catcode`+=\active \catcode`\_=\active}
+
+% LaTeX's \typeout. This ensures that the messages it is used for
+% are identical in format to the corresponding ones from latex/pdflatex.
+\def\typeout{\immediate\write17}%
+
+\chardef\other=12
+
+% We never want plain's \outer definition of \+ in Texinfo.
+% For @tex, we can use \tabalign.
+\let\+ = \relax
+
+% Save some plain tex macros whose names we will redefine.
+\let\ptexb=\b
+\let\ptexbullet=\bullet
+\let\ptexc=\c
+\let\ptexcomma=\,
+\let\ptexdot=\.
+\let\ptexdots=\dots
+\let\ptexend=\end
+\let\ptexequiv=\equiv
+\let\ptexexclam=\!
+\let\ptexfootnote=\footnote
+\let\ptexgtr=>
+\let\ptexhat=^
+\let\ptexi=\i
+\let\ptexindent=\indent
+\let\ptexinsert=\insert
+\let\ptexlbrace=\{
+\let\ptexless=<
+\let\ptexnewwrite\newwrite
+\let\ptexnoindent=\noindent
+\let\ptexplus=+
+\let\ptexraggedright=\raggedright
+\let\ptexrbrace=\}
+\let\ptexslash=\/
+\let\ptexsp=\sp
+\let\ptexstar=\*
+\let\ptexsup=\sup
+\let\ptext=\t
+\let\ptextop=\top
+{\catcode`\'=\active \global\let\ptexquoteright'}% active in plain's math mode
+
+% If this character appears in an error message or help string, it
+% starts a new line in the output.
+\newlinechar = `^^J
+
+% Use TeX 3.0's \inputlineno to get the line number, for better error
+% messages, but if we're using an old version of TeX, don't do anything.
+%
+\ifx\inputlineno\thisisundefined
+ \let\linenumber = \empty % Pre-3.0.
+\else
+ \def\linenumber{l.\the\inputlineno:\space}
+\fi
+
+% Set up fixed words for English if not already set.
+\ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi
+\ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi
+\ifx\putworderror\undefined \gdef\putworderror{error}\fi
+\ifx\putwordfile\undefined \gdef\putwordfile{file}\fi
+\ifx\putwordin\undefined \gdef\putwordin{in}\fi
+\ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi
+\ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi
+\ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi
+\ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi
+\ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi
+\ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi
+\ifx\putwordof\undefined \gdef\putwordof{of}\fi
+\ifx\putwordon\undefined \gdef\putwordon{on}\fi
+\ifx\putwordpage\undefined \gdef\putwordpage{page}\fi
+\ifx\putwordsection\undefined \gdef\putwordsection{section}\fi
+\ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi
+\ifx\putwordsee\undefined \gdef\putwordsee{see}\fi
+\ifx\putwordSee\undefined \gdef\putwordSee{See}\fi
+\ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi
+\ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi
+%
+\ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi
+\ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi
+\ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi
+\ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi
+\ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi
+\ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi
+\ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi
+\ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi
+\ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi
+\ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi
+\ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi
+\ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi
+%
+\ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi
+\ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi
+\ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi
+\ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi
+\ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi
+
+% Give the space character the catcode for a space.
+\def\spaceisspace{\catcode`\ =10\relax}
+
+% Likewise for ^^M, the end of line character.
+\def\endlineisspace{\catcode13=10\relax}
+
+\chardef\dashChar = `\-
+\chardef\slashChar = `\/
+\chardef\underChar = `\_
+
+% Ignore a token.
+%
+\def\gobble#1{}
+
+% The following is used inside several \edef's.
+\def\makecsname#1{\expandafter\noexpand\csname#1\endcsname}
+
+% Hyphenation fixes.
+\hyphenation{
+ Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script
+ ap-pen-dix bit-map bit-maps
+ data-base data-bases eshell fall-ing half-way long-est man-u-script
+ man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm
+ par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces
+ spell-ing spell-ings
+ stand-alone strong-est time-stamp time-stamps which-ever white-space
+ wide-spread wrap-around
+}
+
+% Sometimes it is convenient to have everything in the transcript file
+% and nothing on the terminal. We don't just call \tracingall here,
+% since that produces some useless output on the terminal. We also make
+% some effort to order the tracing commands to reduce output in the log
+% file; cf. trace.sty in LaTeX.
+%
+\def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}%
+\def\loggingall{%
+ \tracingstats2
+ \tracingpages1
+ \tracinglostchars2 % 2 gives us more in etex
+ \tracingparagraphs1
+ \tracingoutput1
+ \tracingmacros2
+ \tracingrestores1
+ \showboxbreadth\maxdimen \showboxdepth\maxdimen
+ \ifx\eTeXversion\thisisundefined\else % etex gives us more logging
+ \tracingscantokens1
+ \tracingifs1
+ \tracinggroups1
+ \tracingnesting2
+ \tracingassigns1
+ \fi
+ \tracingcommands3 % 3 gives us more in etex
+ \errorcontextlines16
+}%
+
+% @errormsg{MSG}. Do the index-like expansions on MSG, but if things
+% aren't perfect, it's not the end of the world, being an error message,
+% after all.
+%
+\def\errormsg{\begingroup \indexnofonts \doerrormsg}
+\def\doerrormsg#1{\errmessage{#1}}
+
+% add check for \lastpenalty to plain's definitions. If the last thing
+% we did was a \nobreak, we don't want to insert more space.
+%
+\def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount
+ \removelastskip\penalty-50\smallskip\fi\fi}
+\def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount
+ \removelastskip\penalty-100\medskip\fi\fi}
+\def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount
+ \removelastskip\penalty-200\bigskip\fi\fi}
+
+% Output routine
+%
+
+% For a final copy, take out the rectangles
+% that mark overfull boxes (in case you have decided
+% that the text looks ok even though it passes the margin).
+%
+\def\finalout{\overfullrule=0pt }
+
+\newdimen\outerhsize \newdimen\outervsize % set by the paper size routines
+\newdimen\topandbottommargin \topandbottommargin=.75in
+
+% Output a mark which sets \thischapter, \thissection and \thiscolor.
+% We dump everything together because we only have one kind of mark.
+% This works because we only use \botmark / \topmark, not \firstmark.
+%
+% A mark contains a subexpression of the \ifcase ... \fi construct.
+% \get*marks macros below extract the needed part using \ifcase.
+%
+% Another complication is to let the user choose whether \thischapter
+% (\thissection) refers to the chapter (section) in effect at the top
+% of a page, or that at the bottom of a page.
+
+% \domark is called twice inside \chapmacro, to add one
+% mark before the section break, and one after.
+% In the second call \prevchapterdefs is the same as \currentchapterdefs,
+% and \prevsectiondefs is the same as \currentsectiondefs.
+% Then if the page is not broken at the mark, some of the previous
+% section appears on the page, and we can get the name of this section
+% from \firstmark for @everyheadingmarks top.
+% @everyheadingmarks bottom uses \botmark.
+%
+% See page 260 of The TeXbook.
+\def\domark{%
+ \toks0=\expandafter{\currentchapterdefs}%
+ \toks2=\expandafter{\currentsectiondefs}%
+ \toks4=\expandafter{\prevchapterdefs}%
+ \toks6=\expandafter{\prevsectiondefs}%
+ \toks8=\expandafter{\currentcolordefs}%
+ \mark{%
+ \the\toks0 \the\toks2 % 0: marks for @everyheadingmarks top
+ \noexpand\or \the\toks4 \the\toks6 % 1: for @everyheadingmarks bottom
+ \noexpand\else \the\toks8 % 2: color marks
+ }%
+}
+
+% \gettopheadingmarks, \getbottomheadingmarks,
+% \getcolormarks - extract needed part of mark.
+%
+% \topmark doesn't work for the very first chapter (after the title
+% page or the contents), so we use \firstmark there -- this gets us
+% the mark with the chapter defs, unless the user sneaks in, e.g.,
+% @setcolor (or @url, or @link, etc.) between @contents and the very
+% first @chapter.
+\def\gettopheadingmarks{%
+ \ifcase0\the\savedtopmark\fi
+ \ifx\thischapter\empty \ifcase0\firstmark\fi \fi
+}
+\def\getbottomheadingmarks{\ifcase1\botmark\fi}
+\def\getcolormarks{\ifcase2\the\savedtopmark\fi}
+
+% Avoid "undefined control sequence" errors.
+\def\currentchapterdefs{}
+\def\currentsectiondefs{}
+\def\currentsection{}
+\def\prevchapterdefs{}
+\def\prevsectiondefs{}
+\def\currentcolordefs{}
+
+% Margin to add to right of even pages, to left of odd pages.
+\newdimen\bindingoffset
+\newdimen\normaloffset
+\newdimen\txipagewidth \newdimen\txipageheight
+
+% Main output routine.
+%
+\chardef\PAGE = 255
+\newtoks\defaultoutput
+\defaultoutput = {\savetopmark\onepageout{\pagecontents\PAGE}}
+\output=\expandafter{\the\defaultoutput}
+
+\newbox\headlinebox
+\newbox\footlinebox
+
+% When outputting the double column layout for indices, an output routine
+% is run several times, which hides the original value of \topmark. This
+% can lead to a page heading being output and duplicating the chapter heading
+% of the index. Hence, save the contents of \topmark at the beginning of
+% the output routine. The saved contents are valid until we actually
+% \shipout a page.
+%
+% (We used to run a short output routine to actually set \topmark and
+% \firstmark to the right values, but if this was called with an empty page
+% containing whatsits for writing index entries, the whatsits would be thrown
+% away and the index auxiliary file would remain empty.)
+%
+\newtoks\savedtopmark
+\newif\iftopmarksaved
+\topmarksavedtrue
+\def\savetopmark{%
+ \iftopmarksaved\else
+ \global\savedtopmark=\expandafter{\topmark}%
+ \global\topmarksavedtrue
+ \fi
+}
+
+% \onepageout takes a vbox as an argument.
+% \shipout a vbox for a single page, adding an optional header, footer
+% and footnote. This also causes index entries for this page to be written
+% to the auxiliary files.
+%
+\def\onepageout#1{%
+ \hoffset=\normaloffset
+ %
+ \ifodd\pageno \advance\hoffset by \bindingoffset
+ \else \advance\hoffset by -\bindingoffset\fi
+ %
+ \checkchapterpage
+ %
+ % Retrieve the information for the headings from the marks in the page,
+ % and call Plain TeX's \makeheadline and \makefootline, which use the
+ % values in \headline and \footline.
+ %
+ % Common context changes for both heading and footing.
+ % Do this outside of the \shipout so @code etc. will be expanded in
+ % the headline as they should be, not taken literally (outputting ''code).
+ \def\commonheadfootline{\let\hsize=\txipagewidth \texinfochars}
+ %
+ \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi
+ \global\setbox\headlinebox = \vbox{\commonheadfootline \makeheadline}%
+ \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi
+ \global\setbox\footlinebox = \vbox{\commonheadfootline \makefootline}%
+ %
+ {%
+ % Set context for writing to auxiliary files like index files.
+ % Have to do this stuff outside the \shipout because we want it to
+ % take effect in \write's, yet the group defined by the \vbox ends
+ % before the \shipout runs.
+ %
+ \atdummies % don't expand commands in the output.
+ \turnoffactive
+ \shipout\vbox{%
+ % Do this early so pdf references go to the beginning of the page.
+ \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi
+ %
+ \unvbox\headlinebox
+ \pagebody{#1}%
+ \ifdim\ht\footlinebox > 0pt
+ % Only leave this space if the footline is nonempty.
+ % (We lessened \vsize for it in \oddfootingyyy.)
+ % The \baselineskip=24pt in plain's \makefootline has no effect.
+ \vskip 24pt
+ \unvbox\footlinebox
+ \fi
+ %
+ }%
+ }%
+ \global\topmarksavedfalse
+ \advancepageno
+ \ifnum\outputpenalty>-20000 \else\dosupereject\fi
+}
+
+\newinsert\margin \dimen\margin=\maxdimen
+
+% Main part of page, including any footnotes
+\def\pagebody#1{\vbox to\txipageheight{\boxmaxdepth=\maxdepth #1}}
+{\catcode`\@ =11
+\gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi
+% marginal hacks, juha@viisa.uucp (Juha Takala)
+\ifvoid\margin\else % marginal info is present
+ \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi
+\dimen@=\dp#1\relax \unvbox#1\relax
+\ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi
+\ifr@ggedbottom \kern-\dimen@ \vfil \fi}
+}
+
+% Check if we are on the first page of a chapter. Used for printing headings.
+\newif\ifchapterpage
+\def\checkchapterpage{%
+ % Get the chapter that was current at the end of the last page
+ \ifcase1\the\savedtopmark\fi
+ \let\prevchaptername\thischaptername
+ %
+ \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi
+ \let\curchaptername\thischaptername
+ %
+ \ifx\curchaptername\prevchaptername
+ \chapterpagefalse
+ \else
+ \chapterpagetrue
+ \fi
+}
+
+% Argument parsing
+
+% Parse an argument, then pass it to #1. The argument is the rest of
+% the input line (except we remove a trailing comment). #1 should be a
+% macro which expects an ordinary undelimited TeX argument.
+% For example, \def\foo{\parsearg\fooxxx}.
+%
+\def\parsearg{\parseargusing{}}
+\def\parseargusing#1#2{%
+ \def\argtorun{#2}%
+ \begingroup
+ \obeylines
+ \spaceisspace
+ #1%
+ \parseargline\empty% Insert the \empty token, see \finishparsearg below.
+}
+
+{\obeylines %
+ \gdef\parseargline#1^^M{%
+ \endgroup % End of the group started in \parsearg.
+ \argremovecomment #1\comment\ArgTerm%
+ }%
+}
+
+% First remove any @comment, then any @c comment. Pass the result on to
+% \argcheckspaces.
+\def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm}
+\def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm}
+
+% Each occurrence of `\^^M' or `<space>\^^M' is replaced by a single space.
+%
+% \argremovec might leave us with trailing space, e.g.,
+% @end itemize @c foo
+% This space token undergoes the same procedure and is eventually removed
+% by \finishparsearg.
+%
+\def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M}
+\def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M}
+\def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{%
+ \def\temp{#3}%
+ \ifx\temp\empty
+ % Do not use \next, perhaps the caller of \parsearg uses it; reuse \temp:
+ \let\temp\finishparsearg
+ \else
+ \let\temp\argcheckspaces
+ \fi
+ % Put the space token in:
+ \temp#1 #3\ArgTerm
+}
+
+% If a _delimited_ argument is enclosed in braces, they get stripped; so
+% to get _exactly_ the rest of the line, we had to prevent such situation.
+% We prepended an \empty token at the very beginning and we expand it now,
+% just before passing the control to \argtorun.
+% (Similarly, we have to think about #3 of \argcheckspacesY above: it is
+% either the null string, or it ends with \^^M---thus there is no danger
+% that a pair of braces would be stripped.
+%
+% But first, we have to remove the trailing space token.
+%
+\def\finishparsearg#1 \ArgTerm{\expandafter\argtorun\expandafter{#1}}
+
+
+% \parseargdef - define a command taking an argument on the line
+%
+% \parseargdef\foo{...}
+% is roughly equivalent to
+% \def\foo{\parsearg\Xfoo}
+% \def\Xfoo#1{...}
+\def\parseargdef#1{%
+ \expandafter \doparseargdef \csname\string#1\endcsname #1%
+}
+\def\doparseargdef#1#2{%
+ \def#2{\parsearg#1}%
+ \def#1##1%
+}
+
+% Several utility definitions with active space:
+{
+ \obeyspaces
+ \gdef\obeyedspace{ }
+
+ % Make each space character in the input produce a normal interword
+ % space in the output. Don't allow a line break at this space, as this
+ % is used only in environments like @example, where each line of input
+ % should produce a line of output anyway.
+ %
+ \gdef\sepspaces{\obeyspaces\let =\tie}
+
+ % If an index command is used in an @example environment, any spaces
+ % therein should become regular spaces in the raw index file, not the
+ % expansion of \tie (\leavevmode \penalty \@M \ ).
+ \gdef\unsepspaces{\let =\space}
+}
+
+
+\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next}
+
+% Define the framework for environments in texinfo.tex. It's used like this:
+%
+% \envdef\foo{...}
+% \def\Efoo{...}
+%
+% It's the responsibility of \envdef to insert \begingroup before the
+% actual body; @end closes the group after calling \Efoo. \envdef also
+% defines \thisenv, so the current environment is known; @end checks
+% whether the environment name matches. The \checkenv macro can also be
+% used to check whether the current environment is the one expected.
+%
+% Non-false conditionals (@iftex, @ifset) don't fit into this, so they
+% are not treated as environments; they don't open a group. (The
+% implementation of @end takes care not to call \endgroup in this
+% special case.)
+
+
+% At run-time, environments start with this:
+\def\startenvironment#1{\begingroup\def\thisenv{#1}}
+% initialize
+\let\thisenv\empty
+
+% ... but they get defined via ``\envdef\foo{...}'':
+\long\def\envdef#1#2{\def#1{\startenvironment#1#2}}
+\def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}}
+
+% Check whether we're in the right environment:
+\def\checkenv#1{%
+ \def\temp{#1}%
+ \ifx\thisenv\temp
+ \else
+ \badenverr
+ \fi
+}
+
+% Environment mismatch, #1 expected:
+\def\badenverr{%
+ \errhelp = \EMsimple
+ \errmessage{This command can appear only \inenvironment\temp,
+ not \inenvironment\thisenv}%
+}
+\def\inenvironment#1{%
+ \ifx#1\empty
+ outside of any environment%
+ \else
+ in environment \expandafter\string#1%
+ \fi
+}
+
+
+% @end foo calls \checkenv and executes the definition of \Efoo.
+\parseargdef\end{
+ \if 1\csname iscond.#1\endcsname
+ \else
+ % The general wording of \badenverr may not be ideal.
+ \expandafter\checkenv\csname#1\endcsname
+ \csname E#1\endcsname
+ \endgroup
+ \fi
+}
+
+\newhelp\EMsimple{Press RETURN to continue.}
+
+
+% Be sure we're in horizontal mode when doing a tie, since we make space
+% equivalent to this in @example-like environments. Otherwise, a space
+% at the beginning of a line will start with \penalty -- and
+% since \penalty is valid in vertical mode, we'd end up putting the
+% penalty on the vertical list instead of in the new paragraph.
+{\catcode`@ = 11
+ % Avoid using \@M directly, because that causes trouble
+ % if the definition is written into an index file.
+ \global\let\tiepenalty = \@M
+ \gdef\tie{\leavevmode\penalty\tiepenalty\ }
+}
+
+% @: forces normal size whitespace following.
+\def\:{\spacefactor=1000 }
+
+% @* forces a line break.
+\def\*{\unskip\hfil\break\hbox{}\ignorespaces}
+
+% @/ allows a line break.
+\let\/=\allowbreak
+
+% @. is an end-of-sentence period.
+\def\.{.\spacefactor=\endofsentencespacefactor\space}
+
+% @! is an end-of-sentence bang.
+\def\!{!\spacefactor=\endofsentencespacefactor\space}
+
+% @? is an end-of-sentence query.
+\def\?{?\spacefactor=\endofsentencespacefactor\space}
+
+% @frenchspacing on|off says whether to put extra space after punctuation.
+%
+\def\onword{on}
+\def\offword{off}
+%
+\parseargdef\frenchspacing{%
+ \def\temp{#1}%
+ \ifx\temp\onword \plainfrenchspacing
+ \else\ifx\temp\offword \plainnonfrenchspacing
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @frenchspacing option `\temp', must be on|off}%
+ \fi\fi
+}
+
+% @w prevents a word break. Without the \leavevmode, @w at the
+% beginning of a paragraph, when TeX is still in vertical mode, would
+% produce a whole line of output instead of starting the paragraph.
+\def\w#1{\leavevmode\hbox{#1}}
+
+% @group ... @end group forces ... to be all on one page, by enclosing
+% it in a TeX vbox. We use \vtop instead of \vbox to construct the box
+% to keep its height that of a normal line. According to the rules for
+% \topskip (p.114 of the TeXbook), the glue inserted is
+% max (\topskip - \ht (first item), 0). If that height is large,
+% therefore, no glue is inserted, and the space between the headline and
+% the text is small, which looks bad.
+%
+% Another complication is that the group might be very large. This can
+% cause the glue on the previous page to be unduly stretched, because it
+% does not have much material. In this case, it's better to add an
+% explicit \vfill so that the extra space is at the bottom. The
+% threshold for doing this is if the group is more than \vfilllimit
+% percent of a page (\vfilllimit can be changed inside of @tex).
+%
+\newbox\groupbox
+\def\vfilllimit{0.7}
+%
+\envdef\group{%
+ \ifnum\catcode`\^^M=\active \else
+ \errhelp = \groupinvalidhelp
+ \errmessage{@group invalid in context where filling is enabled}%
+ \fi
+ \startsavinginserts
+ %
+ \setbox\groupbox = \vtop\bgroup
+ % Do @comment since we are called inside an environment such as
+ % @example, where each end-of-line in the input causes an
+ % end-of-line in the output. We don't want the end-of-line after
+ % the `@group' to put extra space in the output. Since @group
+ % should appear on a line by itself (according to the Texinfo
+ % manual), we don't worry about eating any user text.
+ \comment
+}
+%
+% The \vtop produces a box with normal height and large depth; thus, TeX puts
+% \baselineskip glue before it, and (when the next line of text is done)
+% \lineskip glue after it. Thus, space below is not quite equal to space
+% above. But it's pretty close.
+\def\Egroup{%
+ % To get correct interline space between the last line of the group
+ % and the first line afterwards, we have to propagate \prevdepth.
+ \endgraf % Not \par, as it may have been set to \lisppar.
+ \global\dimen1 = \prevdepth
+ \egroup % End the \vtop.
+ \addgroupbox
+ \prevdepth = \dimen1
+ \checkinserts
+}
+
+\def\addgroupbox{
+ % \dimen0 is the vertical size of the group's box.
+ \dimen0 = \ht\groupbox \advance\dimen0 by \dp\groupbox
+ % \dimen2 is how much space is left on the page (more or less).
+ \dimen2 = \txipageheight \advance\dimen2 by -\pagetotal
+ % if the group doesn't fit on the current page, and it's a big big
+ % group, force a page break.
+ \ifdim \dimen0 > \dimen2
+ \ifdim \pagetotal < \vfilllimit\txipageheight
+ \page
+ \fi
+ \fi
+ \box\groupbox
+}
+
+%
+% TeX puts in an \escapechar (i.e., `@') at the beginning of the help
+% message, so this ends up printing `@group can only ...'.
+%
+\newhelp\groupinvalidhelp{%
+group can only be used in environments such as @example,^^J%
+where each line of input produces a line of output.}
+
+% @need space-in-mils
+% forces a page break if there is not space-in-mils remaining.
+
+\newdimen\mil \mil=0.001in
+
+\parseargdef\need{%
+ % Ensure vertical mode, so we don't make a big box in the middle of a
+ % paragraph.
+ \par
+ %
+ % If the @need value is less than one line space, it's useless.
+ \dimen0 = #1\mil
+ \dimen2 = \ht\strutbox
+ \advance\dimen2 by \dp\strutbox
+ \ifdim\dimen0 > \dimen2
+ %
+ % Do a \strut just to make the height of this box be normal, so the
+ % normal leading is inserted relative to the preceding line.
+ % And a page break here is fine.
+ \vtop to #1\mil{\strut\vfil}%
+ %
+ % TeX does not even consider page breaks if a penalty added to the
+ % main vertical list is 10000 or more. But in order to see if the
+ % empty box we just added fits on the page, we must make it consider
+ % page breaks. On the other hand, we don't want to actually break the
+ % page after the empty box. So we use a penalty of 9999.
+ %
+ % There is an extremely small chance that TeX will actually break the
+ % page at this \penalty, if there are no other feasible breakpoints in
+ % sight. (If the user is using lots of big @group commands, which
+ % almost-but-not-quite fill up a page, TeX will have a hard time doing
+ % good page breaking, for example.) However, I could not construct an
+ % example where a page broke at this \penalty; if it happens in a real
+ % document, then we can reconsider our strategy.
+ \penalty9999
+ %
+ % Back up by the size of the box, whether we did a page break or not.
+ \kern -#1\mil
+ %
+ % Do not allow a page break right after this kern.
+ \nobreak
+ \fi
+}
+
+% @br forces paragraph break (and is undocumented).
+
+\let\br = \par
+
+% @page forces the start of a new page.
+%
+\def\page{\par\vfill\supereject}
+
+% @exdent text....
+% outputs text on separate line in roman font, starting at standard page margin
+
+% This records the amount of indent in the innermost environment.
+% That's how much \exdent should take out.
+\newskip\exdentamount
+
+% This defn is used inside fill environments such as @defun.
+\parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break}
+
+% This defn is used inside nofill environments such as @example.
+\parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount
+ \leftline{\hskip\leftskip{\rm#1}}}}
+
+% @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current
+% paragraph. For more general purposes, use the \margin insertion
+% class. WHICH is `l' or `r'. Not documented, written for gawk manual.
+%
+\newskip\inmarginspacing \inmarginspacing=1cm
+\def\strutdepth{\dp\strutbox}
+%
+\def\doinmargin#1#2{\strut\vadjust{%
+ \nobreak
+ \kern-\strutdepth
+ \vtop to \strutdepth{%
+ \baselineskip=\strutdepth
+ \vss
+ % if you have multiple lines of stuff to put here, you'll need to
+ % make the vbox yourself of the appropriate size.
+ \ifx#1l%
+ \llap{\ignorespaces #2\hskip\inmarginspacing}%
+ \else
+ \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}%
+ \fi
+ \null
+ }%
+}}
+\def\inleftmargin{\doinmargin l}
+\def\inrightmargin{\doinmargin r}
+%
+% @inmargin{TEXT [, RIGHT-TEXT]}
+% (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right;
+% else use TEXT for both).
+%
+\def\inmargin#1{\parseinmargin #1,,\finish}
+\def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing.
+ \setbox0 = \hbox{\ignorespaces #2}%
+ \ifdim\wd0 > 0pt
+ \def\lefttext{#1}% have both texts
+ \def\righttext{#2}%
+ \else
+ \def\lefttext{#1}% have only one text
+ \def\righttext{#1}%
+ \fi
+ %
+ \ifodd\pageno
+ \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin
+ \else
+ \def\temp{\inleftmargin\lefttext}%
+ \fi
+ \temp
+}
+
+% @include FILE -- \input text of FILE.
+%
+\def\include{\parseargusing\filenamecatcodes\includezzz}
+\def\includezzz#1{%
+ \pushthisfilestack
+ \def\thisfile{#1}%
+ {%
+ \makevalueexpandable % we want to expand any @value in FILE.
+ \turnoffactive % and allow special characters in the expansion
+ \indexnofonts % Allow `@@' and other weird things in file names.
+ \wlog{texinfo.tex: doing @include of #1^^J}%
+ \edef\temp{\noexpand\input #1 }%
+ %
+ % This trickery is to read FILE outside of a group, in case it makes
+ % definitions, etc.
+ \expandafter
+ }\temp
+ \popthisfilestack
+}
+\def\filenamecatcodes{%
+ \catcode`\\=\other
+ \catcode`~=\other
+ \catcode`^=\other
+ \catcode`_=\other
+ \catcode`|=\other
+ \catcode`<=\other
+ \catcode`>=\other
+ \catcode`+=\other
+ \catcode`-=\other
+ \catcode`\`=\other
+ \catcode`\'=\other
+}
+
+\def\pushthisfilestack{%
+ \expandafter\pushthisfilestackX\popthisfilestack\StackTerm
+}
+\def\pushthisfilestackX{%
+ \expandafter\pushthisfilestackY\thisfile\StackTerm
+}
+\def\pushthisfilestackY #1\StackTerm #2\StackTerm {%
+ \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}%
+}
+
+\def\popthisfilestack{\errthisfilestackempty}
+\def\errthisfilestackempty{\errmessage{Internal error:
+ the stack of filenames is empty.}}
+%
+\def\thisfile{}
+
+% @center line
+% outputs that line, centered.
+%
+\parseargdef\center{%
+ \ifhmode
+ \let\centersub\centerH
+ \else
+ \let\centersub\centerV
+ \fi
+ \centersub{\hfil \ignorespaces#1\unskip \hfil}%
+ \let\centersub\relax % don't let the definition persist, just in case
+}
+\def\centerH#1{{%
+ \hfil\break
+ \advance\hsize by -\leftskip
+ \advance\hsize by -\rightskip
+ \line{#1}%
+ \break
+}}
+%
+\newcount\centerpenalty
+\def\centerV#1{%
+ % The idea here is the same as in \startdefun, \cartouche, etc.: if
+ % @center is the first thing after a section heading, we need to wipe
+ % out the negative parskip inserted by \sectionheading, but still
+ % prevent a page break here.
+ \centerpenalty = \lastpenalty
+ \ifnum\centerpenalty>10000 \vskip\parskip \fi
+ \ifnum\centerpenalty>9999 \penalty\centerpenalty \fi
+ \line{\kern\leftskip #1\kern\rightskip}%
+}
+
+% @sp n outputs n lines of vertical space
+%
+\parseargdef\sp{\vskip #1\baselineskip}
+
+% @comment ...line which is ignored...
+% @c is the same as @comment
+% @ignore ... @end ignore is another way to write a comment
+
+
+\def\c{\begingroup \catcode`\^^M=\active%
+\catcode`\@=\other \catcode`\{=\other \catcode`\}=\other%
+\cxxx}
+{\catcode`\^^M=\active \gdef\cxxx#1^^M{\endgroup}}
+%
+\let\comment\c
+
+% @paragraphindent NCHARS
+% We'll use ems for NCHARS, close enough.
+% NCHARS can also be the word `asis' or `none'.
+% We cannot feasibly implement @paragraphindent asis, though.
+%
+\def\asisword{asis} % no translation, these are keywords
+\def\noneword{none}
+%
+\parseargdef\paragraphindent{%
+ \def\temp{#1}%
+ \ifx\temp\asisword
+ \else
+ \ifx\temp\noneword
+ \defaultparindent = 0pt
+ \else
+ \defaultparindent = #1em
+ \fi
+ \fi
+ \parindent = \defaultparindent
+}
+
+% @exampleindent NCHARS
+% We'll use ems for NCHARS like @paragraphindent.
+% It seems @exampleindent asis isn't necessary, but
+% I preserve it to make it similar to @paragraphindent.
+\parseargdef\exampleindent{%
+ \def\temp{#1}%
+ \ifx\temp\asisword
+ \else
+ \ifx\temp\noneword
+ \lispnarrowing = 0pt
+ \else
+ \lispnarrowing = #1em
+ \fi
+ \fi
+}
+
+% @firstparagraphindent WORD
+% If WORD is `none', then suppress indentation of the first paragraph
+% after a section heading. If WORD is `insert', then do indent at such
+% paragraphs.
+%
+% The paragraph indentation is suppressed or not by calling
+% \suppressfirstparagraphindent, which the sectioning commands do.
+% We switch the definition of this back and forth according to WORD.
+% By default, we suppress indentation.
+%
+\def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent}
+\def\insertword{insert}
+%
+\parseargdef\firstparagraphindent{%
+ \def\temp{#1}%
+ \ifx\temp\noneword
+ \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent
+ \else\ifx\temp\insertword
+ \let\suppressfirstparagraphindent = \relax
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @firstparagraphindent option `\temp'}%
+ \fi\fi
+}
+
+% Here is how we actually suppress indentation. Redefine \everypar to
+% \kern backwards by \parindent, and then reset itself to empty.
+%
+% We also make \indent itself not actually do anything until the next
+% paragraph.
+%
+\gdef\dosuppressfirstparagraphindent{%
+ \gdef\indent {\restorefirstparagraphindent \indent}%
+ \gdef\noindent{\restorefirstparagraphindent \noindent}%
+ \global\everypar = {\kern -\parindent \restorefirstparagraphindent}%
+}
+%
+\gdef\restorefirstparagraphindent{%
+ \global\let\indent = \ptexindent
+ \global\let\noindent = \ptexnoindent
+ \global\everypar = {}%
+}
+
+
+% @refill is a no-op.
+\let\refill=\relax
+
+% @setfilename INFO-FILENAME - ignored
+\let\setfilename=\comment
+
+% @bye.
+\outer\def\bye{\chappager\pagelabels\tracingstats=1\ptexend}
+
+
+\message{pdf,}
+% adobe `portable' document format
+\newcount\tempnum
+\newcount\lnkcount
+\newtoks\filename
+\newcount\filenamelength
+\newcount\pgn
+\newtoks\toksA
+\newtoks\toksB
+\newtoks\toksC
+\newtoks\toksD
+\newbox\boxA
+\newbox\boxB
+\newcount\countA
+\newif\ifpdf
+\newif\ifpdfmakepagedest
+
+%
+% For LuaTeX
+%
+
+\newif\iftxiuseunicodedestname
+\txiuseunicodedestnamefalse % For pdfTeX etc.
+
+\ifx\luatexversion\thisisundefined
+\else
+ % Use Unicode destination names
+ \txiuseunicodedestnametrue
+ % Escape PDF strings with converting UTF-16 from UTF-8
+ \begingroup
+ \catcode`\%=12
+ \directlua{
+ function UTF16oct(str)
+ tex.sprint(string.char(0x5c) .. '376' .. string.char(0x5c) .. '377')
+ for c in string.utfvalues(str) do
+ if c < 0x10000 then
+ tex.sprint(
+ string.format(string.char(0x5c) .. string.char(0x25) .. '03o' ..
+ string.char(0x5c) .. string.char(0x25) .. '03o',
+ math.floor(c / 256), math.floor(c % 256)))
+ else
+ c = c - 0x10000
+ local c_hi = c / 1024 + 0xd800
+ local c_lo = c % 1024 + 0xdc00
+ tex.sprint(
+ string.format(string.char(0x5c) .. string.char(0x25) .. '03o' ..
+ string.char(0x5c) .. string.char(0x25) .. '03o' ..
+ string.char(0x5c) .. string.char(0x25) .. '03o' ..
+ string.char(0x5c) .. string.char(0x25) .. '03o',
+ math.floor(c_hi / 256), math.floor(c_hi % 256),
+ math.floor(c_lo / 256), math.floor(c_lo % 256)))
+ end
+ end
+ end
+ }
+ \endgroup
+ \def\pdfescapestrutfsixteen#1{\directlua{UTF16oct('\luaescapestring{#1}')}}
+ % Escape PDF strings without converting
+ \begingroup
+ \directlua{
+ function PDFescstr(str)
+ for c in string.bytes(str) do
+ if c <= 0x20 or c >= 0x80 or c == 0x28 or c == 0x29 or c == 0x5c then
+ tex.sprint(-2,
+ string.format(string.char(0x5c) .. string.char(0x25) .. '03o',
+ c))
+ else
+ tex.sprint(-2, string.char(c))
+ end
+ end
+ end
+ }
+ % The -2 in the arguments here gives all the input to TeX catcode 12
+ % (other) or 10 (space), preventing undefined control sequence errors. See
+ % https://lists.gnu.org/archive/html/bug-texinfo/2019-08/msg00031.html
+ %
+ \endgroup
+ \def\pdfescapestring#1{\directlua{PDFescstr('\luaescapestring{#1}')}}
+ \ifnum\luatexversion>84
+ % For LuaTeX >= 0.85
+ \def\pdfdest{\pdfextension dest}
+ \let\pdfoutput\outputmode
+ \def\pdfliteral{\pdfextension literal}
+ \def\pdfcatalog{\pdfextension catalog}
+ \def\pdftexversion{\numexpr\pdffeedback version\relax}
+ \let\pdfximage\saveimageresource
+ \let\pdfrefximage\useimageresource
+ \let\pdflastximage\lastsavedimageresourceindex
+ \def\pdfendlink{\pdfextension endlink\relax}
+ \def\pdfoutline{\pdfextension outline}
+ \def\pdfstartlink{\pdfextension startlink}
+ \def\pdffontattr{\pdfextension fontattr}
+ \def\pdfobj{\pdfextension obj}
+ \def\pdflastobj{\numexpr\pdffeedback lastobj\relax}
+ \let\pdfpagewidth\pagewidth
+ \let\pdfpageheight\pageheight
+ \edef\pdfhorigin{\pdfvariable horigin}
+ \edef\pdfvorigin{\pdfvariable vorigin}
+ \fi
+\fi
+
+% when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1
+% can be set). So we test for \relax and 0 as well as being undefined.
+\ifx\pdfoutput\thisisundefined
+\else
+ \ifx\pdfoutput\relax
+ \else
+ \ifcase\pdfoutput
+ \else
+ \pdftrue
+ \fi
+ \fi
+\fi
+
+\newif\ifpdforxetex
+\pdforxetexfalse
+\ifpdf
+ \pdforxetextrue
+\fi
+\ifx\XeTeXrevision\thisisundefined\else
+ \pdforxetextrue
+\fi
+
+
+% Output page labels information.
+% See PDF reference v.1.7 p.594, section 8.3.1.
+\ifpdf
+\def\pagelabels{%
+ \def\title{0 << /P (T-) /S /D >>}%
+ \edef\roman{\the\romancount << /S /r >>}%
+ \edef\arabic{\the\arabiccount << /S /D >>}%
+ %
+ % Page label ranges must be increasing. Remove any duplicates.
+ % (There is a slight chance of this being wrong if e.g. there is
+ % a @contents but no @titlepage, etc.)
+ %
+ \ifnum\romancount=0 \def\roman{}\fi
+ \ifnum\arabiccount=0 \def\title{}%
+ \else
+ \ifnum\romancount=\arabiccount \def\roman{}\fi
+ \fi
+ %
+ \ifnum\romancount<\arabiccount
+ \pdfcatalog{/PageLabels << /Nums [\title \roman \arabic ] >> }\relax
+ \else
+ \pdfcatalog{/PageLabels << /Nums [\title \arabic \roman ] >> }\relax
+ \fi
+}
+\else
+ \let\pagelabels\relax
+\fi
+
+\newcount\pagecount \pagecount=0
+\newcount\romancount \romancount=0
+\newcount\arabiccount \arabiccount=0
+\ifpdf
+ \let\ptxadvancepageno\advancepageno
+ \def\advancepageno{%
+ \ptxadvancepageno\global\advance\pagecount by 1
+ }
+\fi
+
+
+% PDF uses PostScript string constants for the names of xref targets,
+% for display in the outlines, and in other places. Thus, we have to
+% double any backslashes. Otherwise, a name like "\node" will be
+% interpreted as a newline (\n), followed by o, d, e. Not good.
+%
+% See http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html and
+% related messages. The final outcome is that it is up to the TeX user
+% to double the backslashes and otherwise make the string valid, so
+% that's what we do. pdftex 1.30.0 (ca.2005) introduced a primitive to
+% do this reliably, so we use it.
+
+% #1 is a control sequence in which to do the replacements,
+% which we \xdef.
+\def\txiescapepdf#1{%
+ \ifx\pdfescapestring\thisisundefined
+ % No primitive available; should we give a warning or log?
+ % Many times it won't matter.
+ \xdef#1{#1}%
+ \else
+ % The expandable \pdfescapestring primitive escapes parentheses,
+ % backslashes, and other special chars.
+ \xdef#1{\pdfescapestring{#1}}%
+ \fi
+}
+\def\txiescapepdfutfsixteen#1{%
+ \ifx\pdfescapestrutfsixteen\thisisundefined
+ % No UTF-16 converting macro available.
+ \txiescapepdf{#1}%
+ \else
+ \xdef#1{\pdfescapestrutfsixteen{#1}}%
+ \fi
+}
+
+\newhelp\nopdfimagehelp{Texinfo supports .png, .jpg, .jpeg, and .pdf images
+with PDF output, and none of those formats could be found. (.eps cannot
+be supported due to the design of the PDF format; use regular TeX (DVI
+output) for that.)}
+
+\ifpdf
+ %
+ % Color manipulation macros using ideas from pdfcolor.tex,
+ % except using rgb instead of cmyk; the latter is said to render as a
+ % very dark gray on-screen and a very dark halftone in print, instead
+ % of actual black. The dark red here is dark enough to print on paper as
+ % nearly black, but still distinguishable for online viewing. We use
+ % black by default, though.
+ \def\rgbDarkRed{0.50 0.09 0.12}
+ \def\rgbBlack{0 0 0}
+ %
+ % rg sets the color for filling (usual text, etc.);
+ % RG sets the color for stroking (thin rules, e.g., normal _'s).
+ \def\pdfsetcolor#1{\pdfliteral{#1 rg #1 RG}}
+ %
+ % Set color, and create a mark which defines \thiscolor accordingly,
+ % so that \makeheadline knows which color to restore.
+ \def\setcolor#1{%
+ \xdef\currentcolordefs{\gdef\noexpand\thiscolor{#1}}%
+ \domark
+ \pdfsetcolor{#1}%
+ }
+ %
+ \def\maincolor{\rgbBlack}
+ \pdfsetcolor{\maincolor}
+ \edef\thiscolor{\maincolor}
+ \def\currentcolordefs{}
+ %
+ \def\makefootline{%
+ \baselineskip24pt
+ \line{\pdfsetcolor{\maincolor}\the\footline}%
+ }
+ %
+ \def\makeheadline{%
+ \vbox to 0pt{%
+ \vskip-22.5pt
+ \line{%
+ \vbox to8.5pt{}%
+ % Extract \thiscolor definition from the marks.
+ \getcolormarks
+ % Typeset the headline with \maincolor, then restore the color.
+ \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}%
+ }%
+ \vss
+ }%
+ \nointerlineskip
+ }
+ %
+ %
+ \pdfcatalog{/PageMode /UseOutlines}
+ %
+ % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto).
+ \def\dopdfimage#1#2#3{%
+ \def\pdfimagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}%
+ \def\pdfimageheight{#3}\setbox2 = \hbox{\ignorespaces #3}%
+ %
+ % pdftex (and the PDF format) support .pdf, .png, .jpg (among
+ % others). Let's try in that order, PDF first since if
+ % someone has a scalable image, presumably better to use that than a
+ % bitmap.
+ \let\pdfimgext=\empty
+ \begingroup
+ \openin 1 #1.pdf \ifeof 1
+ \openin 1 #1.PDF \ifeof 1
+ \openin 1 #1.png \ifeof 1
+ \openin 1 #1.jpg \ifeof 1
+ \openin 1 #1.jpeg \ifeof 1
+ \openin 1 #1.JPG \ifeof 1
+ \errhelp = \nopdfimagehelp
+ \errmessage{Could not find image file #1 for pdf}%
+ \else \gdef\pdfimgext{JPG}%
+ \fi
+ \else \gdef\pdfimgext{jpeg}%
+ \fi
+ \else \gdef\pdfimgext{jpg}%
+ \fi
+ \else \gdef\pdfimgext{png}%
+ \fi
+ \else \gdef\pdfimgext{PDF}%
+ \fi
+ \else \gdef\pdfimgext{pdf}%
+ \fi
+ \closein 1
+ \endgroup
+ %
+ % without \immediate, ancient pdftex seg faults when the same image is
+ % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.)
+ \ifnum\pdftexversion < 14
+ \immediate\pdfimage
+ \else
+ \immediate\pdfximage
+ \fi
+ \ifdim \wd0 >0pt width \pdfimagewidth \fi
+ \ifdim \wd2 >0pt height \pdfimageheight \fi
+ \ifnum\pdftexversion<13
+ #1.\pdfimgext
+ \else
+ {#1.\pdfimgext}%
+ \fi
+ \ifnum\pdftexversion < 14 \else
+ \pdfrefximage \pdflastximage
+ \fi}
+ %
+ \def\setpdfdestname#1{{%
+ % We have to set dummies so commands such as @code, and characters
+ % such as \, aren't expanded when present in a section title.
+ \indexnofonts
+ \makevalueexpandable
+ \turnoffactive
+ \iftxiuseunicodedestname
+ \ifx \declaredencoding \latone
+ % Pass through Latin-1 characters.
+ % LuaTeX with byte wise I/O converts Latin-1 characters to Unicode.
+ \else
+ \ifx \declaredencoding \utfeight
+ % Pass through Unicode characters.
+ \else
+ % Use ASCII approximations in destination names.
+ \passthroughcharsfalse
+ \fi
+ \fi
+ \else
+ % Use ASCII approximations in destination names.
+ \passthroughcharsfalse
+ \fi
+ \def\pdfdestname{#1}%
+ \txiescapepdf\pdfdestname
+ }}
+ %
+ \def\setpdfoutlinetext#1{{%
+ \indexnofonts
+ \makevalueexpandable
+ \turnoffactive
+ \ifx \declaredencoding \latone
+ % The PDF format can use an extended form of Latin-1 in bookmark
+ % strings. See Appendix D of the PDF Reference, Sixth Edition, for
+ % the "PDFDocEncoding".
+ \passthroughcharstrue
+ % Pass through Latin-1 characters.
+ % LuaTeX: Convert to Unicode
+ % pdfTeX: Use Latin-1 as PDFDocEncoding
+ \def\pdfoutlinetext{#1}%
+ \else
+ \ifx \declaredencoding \utfeight
+ \ifx\luatexversion\thisisundefined
+ % For pdfTeX with UTF-8.
+ % TODO: the PDF format can use UTF-16 in bookmark strings,
+ % but the code for this isn't done yet.
+ % Use ASCII approximations.
+ \passthroughcharsfalse
+ \def\pdfoutlinetext{#1}%
+ \else
+ % For LuaTeX with UTF-8.
+ % Pass through Unicode characters for title texts.
+ \passthroughcharstrue
+ \def\pdfoutlinetext{#1}%
+ \fi
+ \else
+ % For non-Latin-1 or non-UTF-8 encodings.
+ % Use ASCII approximations.
+ \passthroughcharsfalse
+ \def\pdfoutlinetext{#1}%
+ \fi
+ \fi
+ % LuaTeX: Convert to UTF-16
+ % pdfTeX: Use Latin-1 as PDFDocEncoding
+ \txiescapepdfutfsixteen\pdfoutlinetext
+ }}
+ %
+ \def\pdfmkdest#1{%
+ \setpdfdestname{#1}%
+ \safewhatsit{\pdfdest name{\pdfdestname} xyz}%
+ }
+ %
+ % used to mark target names; must be expandable.
+ \def\pdfmkpgn#1{#1}
+ %
+ % by default, use black for everything.
+ \def\urlcolor{\rgbBlack}
+ \def\linkcolor{\rgbBlack}
+ \def\endlink{\setcolor{\maincolor}\pdfendlink}
+ %
+ % Adding outlines to PDF; macros for calculating structure of outlines
+ % come from Petr Olsak
+ \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0%
+ \else \csname#1\endcsname \fi}
+ \def\advancenumber#1{\tempnum=\expnumber{#1}\relax
+ \advance\tempnum by 1
+ \expandafter\xdef\csname#1\endcsname{\the\tempnum}}
+ %
+ % #1 is the section text, which is what will be displayed in the
+ % outline by the pdf viewer. #2 is the pdf expression for the number
+ % of subentries (or empty, for subsubsections). #3 is the node text,
+ % which might be empty if this toc entry had no corresponding node.
+ % #4 is the page number
+ %
+ \def\dopdfoutline#1#2#3#4{%
+ % Generate a link to the node text if that exists; else, use the
+ % page number. We could generate a destination for the section
+ % text in the case where a section has no node, but it doesn't
+ % seem worth the trouble, since most documents are normally structured.
+ \setpdfoutlinetext{#1}
+ \setpdfdestname{#3}
+ \ifx\pdfdestname\empty
+ \def\pdfdestname{#4}%
+ \fi
+ %
+ \pdfoutline goto name{\pdfmkpgn{\pdfdestname}}#2{\pdfoutlinetext}%
+ }
+ %
+ \def\pdfmakeoutlines{%
+ \begingroup
+ % Read toc silently, to get counts of subentries for \pdfoutline.
+ \def\partentry##1##2##3##4{}% ignore parts in the outlines
+ \def\numchapentry##1##2##3##4{%
+ \def\thischapnum{##2}%
+ \def\thissecnum{0}%
+ \def\thissubsecnum{0}%
+ }%
+ \def\numsecentry##1##2##3##4{%
+ \advancenumber{chap\thischapnum}%
+ \def\thissecnum{##2}%
+ \def\thissubsecnum{0}%
+ }%
+ \def\numsubsecentry##1##2##3##4{%
+ \advancenumber{sec\thissecnum}%
+ \def\thissubsecnum{##2}%
+ }%
+ \def\numsubsubsecentry##1##2##3##4{%
+ \advancenumber{subsec\thissubsecnum}%
+ }%
+ \def\thischapnum{0}%
+ \def\thissecnum{0}%
+ \def\thissubsecnum{0}%
+ %
+ % use \def rather than \let here because we redefine \chapentry et
+ % al. a second time, below.
+ \def\appentry{\numchapentry}%
+ \def\appsecentry{\numsecentry}%
+ \def\appsubsecentry{\numsubsecentry}%
+ \def\appsubsubsecentry{\numsubsubsecentry}%
+ \def\unnchapentry{\numchapentry}%
+ \def\unnsecentry{\numsecentry}%
+ \def\unnsubsecentry{\numsubsecentry}%
+ \def\unnsubsubsecentry{\numsubsubsecentry}%
+ \readdatafile{toc}%
+ %
+ % Read toc second time, this time actually producing the outlines.
+ % The `-' means take the \expnumber as the absolute number of
+ % subentries, which we calculated on our first read of the .toc above.
+ %
+ % We use the node names as the destinations.
+ %
+ % Currently we prefix the section name with the section number
+ % for chapter and appendix headings only in order to avoid too much
+ % horizontal space being required in the PDF viewer.
+ \def\numchapentry##1##2##3##4{%
+ \dopdfoutline{##2 ##1}{count-\expnumber{chap##2}}{##3}{##4}}%
+ \def\unnchapentry##1##2##3##4{%
+ \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}%
+ \def\numsecentry##1##2##3##4{%
+ \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}%
+ \def\numsubsecentry##1##2##3##4{%
+ \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}%
+ \def\numsubsubsecentry##1##2##3##4{% count is always zero
+ \dopdfoutline{##1}{}{##3}{##4}}%
+ %
+ % PDF outlines are displayed using system fonts, instead of
+ % document fonts. Therefore we cannot use special characters,
+ % since the encoding is unknown. For example, the eogonek from
+ % Latin 2 (0xea) gets translated to a | character. Info from
+ % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100.
+ %
+ % TODO this right, we have to translate 8-bit characters to
+ % their "best" equivalent, based on the @documentencoding. Too
+ % much work for too little return. Just use the ASCII equivalents
+ % we use for the index sort strings.
+ %
+ \indexnofonts
+ \setupdatafile
+ % We can have normal brace characters in the PDF outlines, unlike
+ % Texinfo index files. So set that up.
+ \def\{{\lbracecharliteral}%
+ \def\}{\rbracecharliteral}%
+ \catcode`\\=\active \otherbackslash
+ \input \tocreadfilename
+ \endgroup
+ }
+ {\catcode`[=1 \catcode`]=2
+ \catcode`{=\other \catcode`}=\other
+ \gdef\lbracecharliteral[{]%
+ \gdef\rbracecharliteral[}]%
+ ]
+ %
+ \def\skipspaces#1{\def\PP{#1}\def\D{|}%
+ \ifx\PP\D\let\nextsp\relax
+ \else\let\nextsp\skipspaces
+ \addtokens{\filename}{\PP}%
+ \advance\filenamelength by 1
+ \fi
+ \nextsp}
+ \def\getfilename#1{%
+ \filenamelength=0
+ % If we don't expand the argument now, \skipspaces will get
+ % snagged on things like "@value{foo}".
+ \edef\temp{#1}%
+ \expandafter\skipspaces\temp|\relax
+ }
+ \ifnum\pdftexversion < 14
+ \let \startlink \pdfannotlink
+ \else
+ \let \startlink \pdfstartlink
+ \fi
+ % make a live url in pdf output.
+ \def\pdfurl#1{%
+ \begingroup
+ % it seems we really need yet another set of dummies; have not
+ % tried to figure out what each command should do in the context
+ % of @url. for now, just make @/ a no-op, that's the only one
+ % people have actually reported a problem with.
+ %
+ \normalturnoffactive
+ \def\@{@}%
+ \let\/=\empty
+ \makevalueexpandable
+ % do we want to go so far as to use \indexnofonts instead of just
+ % special-casing \var here?
+ \def\var##1{##1}%
+ %
+ \leavevmode\setcolor{\urlcolor}%
+ \startlink attr{/Border [0 0 0]}%
+ user{/Subtype /Link /A << /S /URI /URI (#1) >>}%
+ \endgroup}
+ % \pdfgettoks - Surround page numbers in #1 with @pdflink. #1 may
+ % be a simple number, or a list of numbers in the case of an index
+ % entry.
+ \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}}
+ \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
+ \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks}
+ \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}}
+ \def\maketoks{%
+ \expandafter\poptoks\the\toksA|ENDTOKS|\relax
+ \ifx\first0\adn0
+ \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3
+ \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6
+ \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9
+ \else
+ \ifnum0=\countA\else\makelink\fi
+ \ifx\first.\let\next=\done\else
+ \let\next=\maketoks
+ \addtokens{\toksB}{\the\toksD}
+ \ifx\first,\addtokens{\toksB}{\space}\fi
+ \fi
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+ \next}
+ \def\makelink{\addtokens{\toksB}%
+ {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0}
+ \def\pdflink#1{%
+ \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}}
+ \setcolor{\linkcolor}#1\endlink}
+ \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}
+\else
+ % non-pdf mode
+ \let\pdfmkdest = \gobble
+ \let\pdfurl = \gobble
+ \let\endlink = \relax
+ \let\setcolor = \gobble
+ \let\pdfsetcolor = \gobble
+ \let\pdfmakeoutlines = \relax
+\fi % \ifx\pdfoutput
+
+%
+% For XeTeX
+%
+\ifx\XeTeXrevision\thisisundefined
+\else
+ %
+ % XeTeX version check
+ %
+ \ifnum\strcmp{\the\XeTeXversion\XeTeXrevision}{0.99996}>-1
+ % TeX Live 2016 contains XeTeX 0.99996 and xdvipdfmx 20160307.
+ % It can use the `dvipdfmx:config' special (from TeX Live SVN r40941).
+ % For avoiding PDF destination name replacement, we use this special
+ % instead of xdvipdfmx's command line option `-C 0x0010'.
+ \special{dvipdfmx:config C 0x0010}
+ % XeTeX 0.99995+ comes with xdvipdfmx 20160307+.
+ % It can handle Unicode destination names for PDF.
+ \txiuseunicodedestnametrue
+ \else
+ % XeTeX < 0.99996 (TeX Live < 2016) cannot use the
+ % `dvipdfmx:config' special.
+ % So for avoiding PDF destination name replacement,
+ % xdvipdfmx's command line option `-C 0x0010' is necessary.
+ %
+ % XeTeX < 0.99995 can not handle Unicode destination names for PDF
+ % because xdvipdfmx 20150315 has a UTF-16 conversion issue.
+ % It is fixed by xdvipdfmx 20160106 (TeX Live SVN r39753).
+ \txiuseunicodedestnamefalse
+ \fi
+ %
+ % Color support
+ %
+ \def\rgbDarkRed{0.50 0.09 0.12}
+ \def\rgbBlack{0 0 0}
+ %
+ \def\pdfsetcolor#1{\special{pdf:scolor [#1]}}
+ %
+ % Set color, and create a mark which defines \thiscolor accordingly,
+ % so that \makeheadline knows which color to restore.
+ \def\setcolor#1{%
+ \xdef\currentcolordefs{\gdef\noexpand\thiscolor{#1}}%
+ \domark
+ \pdfsetcolor{#1}%
+ }
+ %
+ \def\maincolor{\rgbBlack}
+ \pdfsetcolor{\maincolor}
+ \edef\thiscolor{\maincolor}
+ \def\currentcolordefs{}
+ %
+ \def\makefootline{%
+ \baselineskip24pt
+ \line{\pdfsetcolor{\maincolor}\the\footline}%
+ }
+ %
+ \def\makeheadline{%
+ \vbox to 0pt{%
+ \vskip-22.5pt
+ \line{%
+ \vbox to8.5pt{}%
+ % Extract \thiscolor definition from the marks.
+ \getcolormarks
+ % Typeset the headline with \maincolor, then restore the color.
+ \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}%
+ }%
+ \vss
+ }%
+ \nointerlineskip
+ }
+ %
+ % PDF outline support
+ %
+ % Emulate pdfTeX primitive
+ \def\pdfdest name#1 xyz{%
+ \special{pdf:dest (#1) [@thispage /XYZ @xpos @ypos null]}%
+ }
+ %
+ \def\setpdfdestname#1{{%
+ % We have to set dummies so commands such as @code, and characters
+ % such as \, aren't expanded when present in a section title.
+ \indexnofonts
+ \makevalueexpandable
+ \turnoffactive
+ \iftxiuseunicodedestname
+ % Pass through Unicode characters.
+ \else
+ % Use ASCII approximations in destination names.
+ \passthroughcharsfalse
+ \fi
+ \def\pdfdestname{#1}%
+ \txiescapepdf\pdfdestname
+ }}
+ %
+ \def\setpdfoutlinetext#1{{%
+ \turnoffactive
+ % Always use Unicode characters in title texts.
+ \def\pdfoutlinetext{#1}%
+ % For XeTeX, xdvipdfmx converts to UTF-16.
+ % So we do not convert.
+ \txiescapepdf\pdfoutlinetext
+ }}
+ %
+ \def\pdfmkdest#1{%
+ \setpdfdestname{#1}%
+ \safewhatsit{\pdfdest name{\pdfdestname} xyz}%
+ }
+ %
+ % by default, use black for everything.
+ \def\urlcolor{\rgbBlack}
+ \def\linkcolor{\rgbBlack}
+ \def\endlink{\setcolor{\maincolor}\pdfendlink}
+ %
+ \def\dopdfoutline#1#2#3#4{%
+ \setpdfoutlinetext{#1}
+ \setpdfdestname{#3}
+ \ifx\pdfdestname\empty
+ \def\pdfdestname{#4}%
+ \fi
+ %
+ \special{pdf:out [-] #2 << /Title (\pdfoutlinetext) /A
+ << /S /GoTo /D (\pdfdestname) >> >> }%
+ }
+ %
+ \def\pdfmakeoutlines{%
+ \begingroup
+ %
+ % For XeTeX, counts of subentries are not necessary.
+ % Therefore, we read toc only once.
+ %
+ % We use node names as destinations.
+ %
+ % Currently we prefix the section name with the section number
+ % for chapter and appendix headings only in order to avoid too much
+ % horizontal space being required in the PDF viewer.
+ \def\partentry##1##2##3##4{}% ignore parts in the outlines
+ \def\numchapentry##1##2##3##4{%
+ \dopdfoutline{##2 ##1}{1}{##3}{##4}}%
+ \def\numsecentry##1##2##3##4{%
+ \dopdfoutline{##1}{2}{##3}{##4}}%
+ \def\numsubsecentry##1##2##3##4{%
+ \dopdfoutline{##1}{3}{##3}{##4}}%
+ \def\numsubsubsecentry##1##2##3##4{%
+ \dopdfoutline{##1}{4}{##3}{##4}}%
+ %
+ \let\appentry\numchapentry%
+ \let\appsecentry\numsecentry%
+ \let\appsubsecentry\numsubsecentry%
+ \let\appsubsubsecentry\numsubsubsecentry%
+ \def\unnchapentry##1##2##3##4{%
+ \dopdfoutline{##1}{1}{##3}{##4}}%
+ \let\unnsecentry\numsecentry%
+ \let\unnsubsecentry\numsubsecentry%
+ \let\unnsubsubsecentry\numsubsubsecentry%
+ %
+ % For XeTeX, xdvipdfmx converts strings to UTF-16.
+ % Therefore, the encoding and the language may not be considered.
+ %
+ \indexnofonts
+ \setupdatafile
+ % We can have normal brace characters in the PDF outlines, unlike
+ % Texinfo index files. So set that up.
+ \def\{{\lbracecharliteral}%
+ \def\}{\rbracecharliteral}%
+ \catcode`\\=\active \otherbackslash
+ \input \tocreadfilename
+ \endgroup
+ }
+ {\catcode`[=1 \catcode`]=2
+ \catcode`{=\other \catcode`}=\other
+ \gdef\lbracecharliteral[{]%
+ \gdef\rbracecharliteral[}]%
+ ]
+
+ \special{pdf:docview << /PageMode /UseOutlines >> }
+ % ``\special{pdf:tounicode ...}'' is not necessary
+ % because xdvipdfmx converts strings from UTF-8 to UTF-16 without it.
+ % However, due to a UTF-16 conversion issue of xdvipdfmx 20150315,
+ % ``\special{pdf:dest ...}'' cannot handle non-ASCII strings.
+ % It is fixed by xdvipdfmx 20160106 (TeX Live SVN r39753).
+%
+ \def\skipspaces#1{\def\PP{#1}\def\D{|}%
+ \ifx\PP\D\let\nextsp\relax
+ \else\let\nextsp\skipspaces
+ \addtokens{\filename}{\PP}%
+ \advance\filenamelength by 1
+ \fi
+ \nextsp}
+ \def\getfilename#1{%
+ \filenamelength=0
+ % If we don't expand the argument now, \skipspaces will get
+ % snagged on things like "@value{foo}".
+ \edef\temp{#1}%
+ \expandafter\skipspaces\temp|\relax
+ }
+ % make a live url in pdf output.
+ \def\pdfurl#1{%
+ \begingroup
+ % it seems we really need yet another set of dummies; have not
+ % tried to figure out what each command should do in the context
+ % of @url. for now, just make @/ a no-op, that's the only one
+ % people have actually reported a problem with.
+ %
+ \normalturnoffactive
+ \def\@{@}%
+ \let\/=\empty
+ \makevalueexpandable
+ % do we want to go so far as to use \indexnofonts instead of just
+ % special-casing \var here?
+ \def\var##1{##1}%
+ %
+ \leavevmode\setcolor{\urlcolor}%
+ \special{pdf:bann << /Border [0 0 0]
+ /Subtype /Link /A << /S /URI /URI (#1) >> >>}%
+ \endgroup}
+ \def\endlink{\setcolor{\maincolor}\special{pdf:eann}}
+ \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}}
+ \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
+ \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks}
+ \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}}
+ \def\maketoks{%
+ \expandafter\poptoks\the\toksA|ENDTOKS|\relax
+ \ifx\first0\adn0
+ \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3
+ \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6
+ \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9
+ \else
+ \ifnum0=\countA\else\makelink\fi
+ \ifx\first.\let\next=\done\else
+ \let\next=\maketoks
+ \addtokens{\toksB}{\the\toksD}
+ \ifx\first,\addtokens{\toksB}{\space}\fi
+ \fi
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+ \next}
+ \def\makelink{\addtokens{\toksB}%
+ {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0}
+ \def\pdflink#1{%
+ \special{pdf:bann << /Border [0 0 0]
+ /Type /Annot /Subtype /Link /A << /S /GoTo /D (#1) >> >>}%
+ \setcolor{\linkcolor}#1\endlink}
+ \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}
+%
+ %
+ % @image support
+ %
+ % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto).
+ \def\doxeteximage#1#2#3{%
+ \def\xeteximagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}%
+ \def\xeteximageheight{#3}\setbox2 = \hbox{\ignorespaces #3}%
+ %
+ % XeTeX (and the PDF format) supports .pdf, .png, .jpg (among
+ % others). Let's try in that order, PDF first since if
+ % someone has a scalable image, presumably better to use that than a
+ % bitmap.
+ \let\xeteximgext=\empty
+ \begingroup
+ \openin 1 #1.pdf \ifeof 1
+ \openin 1 #1.PDF \ifeof 1
+ \openin 1 #1.png \ifeof 1
+ \openin 1 #1.jpg \ifeof 1
+ \openin 1 #1.jpeg \ifeof 1
+ \openin 1 #1.JPG \ifeof 1
+ \errmessage{Could not find image file #1 for XeTeX}%
+ \else \gdef\xeteximgext{JPG}%
+ \fi
+ \else \gdef\xeteximgext{jpeg}%
+ \fi
+ \else \gdef\xeteximgext{jpg}%
+ \fi
+ \else \gdef\xeteximgext{png}%
+ \fi
+ \else \gdef\xeteximgext{PDF}%
+ \fi
+ \else \gdef\xeteximgext{pdf}%
+ \fi
+ \closein 1
+ \endgroup
+ %
+ \def\xetexpdfext{pdf}%
+ \ifx\xeteximgext\xetexpdfext
+ \XeTeXpdffile "#1".\xeteximgext ""
+ \else
+ \def\xetexpdfext{PDF}%
+ \ifx\xeteximgext\xetexpdfext
+ \XeTeXpdffile "#1".\xeteximgext ""
+ \else
+ \XeTeXpicfile "#1".\xeteximgext ""
+ \fi
+ \fi
+ \ifdim \wd0 >0pt width \xeteximagewidth \fi
+ \ifdim \wd2 >0pt height \xeteximageheight \fi \relax
+ }
+\fi
+
+
+%
+\message{fonts,}
+
+% Set the baselineskip to #1, and the lineskip and strut size
+% correspondingly. There is no deep meaning behind these magic numbers
+% used as factors; they just match (closely enough) what Knuth defined.
+%
+\def\lineskipfactor{.08333}
+\def\strutheightpercent{.70833}
+\def\strutdepthpercent {.29167}
+%
+% can get a sort of poor man's double spacing by redefining this.
+\def\baselinefactor{1}
+%
+\newdimen\textleading
+\def\setleading#1{%
+ \dimen0 = #1\relax
+ \normalbaselineskip = \baselinefactor\dimen0
+ \normallineskip = \lineskipfactor\normalbaselineskip
+ \normalbaselines
+ \setbox\strutbox =\hbox{%
+ \vrule width0pt height\strutheightpercent\baselineskip
+ depth \strutdepthpercent \baselineskip
+ }%
+}
+
+% PDF CMaps. See also LaTeX's t1.cmap.
+%
+% do nothing with this by default.
+\expandafter\let\csname cmapOT1\endcsname\gobble
+\expandafter\let\csname cmapOT1IT\endcsname\gobble
+\expandafter\let\csname cmapOT1TT\endcsname\gobble
+
+% if we are producing pdf, and we have \pdffontattr, then define cmaps.
+% (\pdffontattr was introduced many years ago, but people still run
+% older pdftex's; it's easy to conditionalize, so we do.)
+\ifpdf \ifx\pdffontattr\thisisundefined \else
+ \begingroup
+ \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
+ \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
+%%DocumentNeededResources: ProcSet (CIDInit)
+%%IncludeResource: ProcSet (CIDInit)
+%%BeginResource: CMap (TeX-OT1-0)
+%%Title: (TeX-OT1-0 TeX OT1 0)
+%%Version: 1.000
+%%EndComments
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CIDSystemInfo
+<< /Registry (TeX)
+/Ordering (OT1)
+/Supplement 0
+>> def
+/CMapName /TeX-OT1-0 def
+/CMapType 2 def
+1 begincodespacerange
+<00> <7F>
+endcodespacerange
+8 beginbfrange
+<00> <01> <0393>
+<09> <0A> <03A8>
+<23> <26> <0023>
+<28> <3B> <0028>
+<3F> <5B> <003F>
+<5D> <5E> <005D>
+<61> <7A> <0061>
+<7B> <7C> <2013>
+endbfrange
+40 beginbfchar
+<02> <0398>
+<03> <039B>
+<04> <039E>
+<05> <03A0>
+<06> <03A3>
+<07> <03D2>
+<08> <03A6>
+<0B> <00660066>
+<0C> <00660069>
+<0D> <0066006C>
+<0E> <006600660069>
+<0F> <00660066006C>
+<10> <0131>
+<11> <0237>
+<12> <0060>
+<13> <00B4>
+<14> <02C7>
+<15> <02D8>
+<16> <00AF>
+<17> <02DA>
+<18> <00B8>
+<19> <00DF>
+<1A> <00E6>
+<1B> <0153>
+<1C> <00F8>
+<1D> <00C6>
+<1E> <0152>
+<1F> <00D8>
+<21> <0021>
+<22> <201D>
+<27> <2019>
+<3C> <00A1>
+<3D> <003D>
+<3E> <00BF>
+<5C> <201C>
+<5F> <02D9>
+<60> <2018>
+<7D> <02DD>
+<7E> <007E>
+<7F> <00A8>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+%%EndResource
+%%EOF
+ }\endgroup
+ \expandafter\edef\csname cmapOT1\endcsname#1{%
+ \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
+ }%
+%
+% \cmapOT1IT
+ \begingroup
+ \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
+ \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
+%%DocumentNeededResources: ProcSet (CIDInit)
+%%IncludeResource: ProcSet (CIDInit)
+%%BeginResource: CMap (TeX-OT1IT-0)
+%%Title: (TeX-OT1IT-0 TeX OT1IT 0)
+%%Version: 1.000
+%%EndComments
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CIDSystemInfo
+<< /Registry (TeX)
+/Ordering (OT1IT)
+/Supplement 0
+>> def
+/CMapName /TeX-OT1IT-0 def
+/CMapType 2 def
+1 begincodespacerange
+<00> <7F>
+endcodespacerange
+8 beginbfrange
+<00> <01> <0393>
+<09> <0A> <03A8>
+<25> <26> <0025>
+<28> <3B> <0028>
+<3F> <5B> <003F>
+<5D> <5E> <005D>
+<61> <7A> <0061>
+<7B> <7C> <2013>
+endbfrange
+42 beginbfchar
+<02> <0398>
+<03> <039B>
+<04> <039E>
+<05> <03A0>
+<06> <03A3>
+<07> <03D2>
+<08> <03A6>
+<0B> <00660066>
+<0C> <00660069>
+<0D> <0066006C>
+<0E> <006600660069>
+<0F> <00660066006C>
+<10> <0131>
+<11> <0237>
+<12> <0060>
+<13> <00B4>
+<14> <02C7>
+<15> <02D8>
+<16> <00AF>
+<17> <02DA>
+<18> <00B8>
+<19> <00DF>
+<1A> <00E6>
+<1B> <0153>
+<1C> <00F8>
+<1D> <00C6>
+<1E> <0152>
+<1F> <00D8>
+<21> <0021>
+<22> <201D>
+<23> <0023>
+<24> <00A3>
+<27> <2019>
+<3C> <00A1>
+<3D> <003D>
+<3E> <00BF>
+<5C> <201C>
+<5F> <02D9>
+<60> <2018>
+<7D> <02DD>
+<7E> <007E>
+<7F> <00A8>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+%%EndResource
+%%EOF
+ }\endgroup
+ \expandafter\edef\csname cmapOT1IT\endcsname#1{%
+ \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
+ }%
+%
+% \cmapOT1TT
+ \begingroup
+ \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
+ \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
+%%DocumentNeededResources: ProcSet (CIDInit)
+%%IncludeResource: ProcSet (CIDInit)
+%%BeginResource: CMap (TeX-OT1TT-0)
+%%Title: (TeX-OT1TT-0 TeX OT1TT 0)
+%%Version: 1.000
+%%EndComments
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CIDSystemInfo
+<< /Registry (TeX)
+/Ordering (OT1TT)
+/Supplement 0
+>> def
+/CMapName /TeX-OT1TT-0 def
+/CMapType 2 def
+1 begincodespacerange
+<00> <7F>
+endcodespacerange
+5 beginbfrange
+<00> <01> <0393>
+<09> <0A> <03A8>
+<21> <26> <0021>
+<28> <5F> <0028>
+<61> <7E> <0061>
+endbfrange
+32 beginbfchar
+<02> <0398>
+<03> <039B>
+<04> <039E>
+<05> <03A0>
+<06> <03A3>
+<07> <03D2>
+<08> <03A6>
+<0B> <2191>
+<0C> <2193>
+<0D> <0027>
+<0E> <00A1>
+<0F> <00BF>
+<10> <0131>
+<11> <0237>
+<12> <0060>
+<13> <00B4>
+<14> <02C7>
+<15> <02D8>
+<16> <00AF>
+<17> <02DA>
+<18> <00B8>
+<19> <00DF>
+<1A> <00E6>
+<1B> <0153>
+<1C> <00F8>
+<1D> <00C6>
+<1E> <0152>
+<1F> <00D8>
+<20> <2423>
+<27> <2019>
+<60> <2018>
+<7F> <00A8>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+%%EndResource
+%%EOF
+ }\endgroup
+ \expandafter\edef\csname cmapOT1TT\endcsname#1{%
+ \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
+ }%
+\fi\fi
+
+
+% Set the font macro #1 to the font named \fontprefix#2.
+% #3 is the font's design size, #4 is a scale factor, #5 is the CMap
+% encoding (only OT1, OT1IT and OT1TT are allowed, or empty to omit).
+% Example:
+% #1 = \textrm
+% #2 = \rmshape
+% #3 = 10
+% #4 = \mainmagstep
+% #5 = OT1
+%
+\def\setfont#1#2#3#4#5{%
+ \font#1=\fontprefix#2#3 scaled #4
+ \csname cmap#5\endcsname#1%
+}
+% This is what gets called when #5 of \setfont is empty.
+\let\cmap\gobble
+%
+% (end of cmaps)
+
+% Use cm as the default font prefix.
+% To specify the font prefix, you must define \fontprefix
+% before you read in texinfo.tex.
+\ifx\fontprefix\thisisundefined
+\def\fontprefix{cm}
+\fi
+% Support font families that don't use the same naming scheme as CM.
+\def\rmshape{r}
+\def\rmbshape{bx} % where the normal face is bold
+\def\bfshape{b}
+\def\bxshape{bx}
+\def\ttshape{tt}
+\def\ttbshape{tt}
+\def\ttslshape{sltt}
+\def\itshape{ti}
+\def\itbshape{bxti}
+\def\slshape{sl}
+\def\slbshape{bxsl}
+\def\sfshape{ss}
+\def\sfbshape{ss}
+\def\scshape{csc}
+\def\scbshape{csc}
+
+% Definitions for a main text size of 11pt. (The default in Texinfo.)
+%
+\def\definetextfontsizexi{%
+% Text fonts (11.2pt, magstep1).
+\def\textnominalsize{11pt}
+\edef\mainmagstep{\magstephalf}
+\setfont\textrm\rmshape{10}{\mainmagstep}{OT1}
+\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT}
+\setfont\textbf\bfshape{10}{\mainmagstep}{OT1}
+\setfont\textit\itshape{10}{\mainmagstep}{OT1IT}
+\setfont\textsl\slshape{10}{\mainmagstep}{OT1}
+\setfont\textsf\sfshape{10}{\mainmagstep}{OT1}
+\setfont\textsc\scshape{10}{\mainmagstep}{OT1}
+\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT}
+\font\texti=cmmi10 scaled \mainmagstep
+\font\textsy=cmsy10 scaled \mainmagstep
+\def\textecsize{1095}
+
+% A few fonts for @defun names and args.
+\setfont\defbf\bfshape{10}{\magstep1}{OT1}
+\setfont\deftt\ttshape{10}{\magstep1}{OT1TT}
+\setfont\defsl\slshape{10}{\magstep1}{OT1}
+\setfont\defttsl\ttslshape{10}{\magstep1}{OT1TT}
+\def\df{\let\ttfont=\deftt \let\bffont = \defbf
+\let\ttslfont=\defttsl \let\slfont=\defsl \bf}
+
+% Fonts for indices, footnotes, small examples (9pt).
+\def\smallnominalsize{9pt}
+\setfont\smallrm\rmshape{9}{1000}{OT1}
+\setfont\smalltt\ttshape{9}{1000}{OT1TT}
+\setfont\smallbf\bfshape{10}{900}{OT1}
+\setfont\smallit\itshape{9}{1000}{OT1IT}
+\setfont\smallsl\slshape{9}{1000}{OT1}
+\setfont\smallsf\sfshape{9}{1000}{OT1}
+\setfont\smallsc\scshape{10}{900}{OT1}
+\setfont\smallttsl\ttslshape{10}{900}{OT1TT}
+\font\smalli=cmmi9
+\font\smallsy=cmsy9
+\def\smallecsize{0900}
+
+% Fonts for small examples (8pt).
+\def\smallernominalsize{8pt}
+\setfont\smallerrm\rmshape{8}{1000}{OT1}
+\setfont\smallertt\ttshape{8}{1000}{OT1TT}
+\setfont\smallerbf\bfshape{10}{800}{OT1}
+\setfont\smallerit\itshape{8}{1000}{OT1IT}
+\setfont\smallersl\slshape{8}{1000}{OT1}
+\setfont\smallersf\sfshape{8}{1000}{OT1}
+\setfont\smallersc\scshape{10}{800}{OT1}
+\setfont\smallerttsl\ttslshape{10}{800}{OT1TT}
+\font\smalleri=cmmi8
+\font\smallersy=cmsy8
+\def\smallerecsize{0800}
+
+% Fonts for math mode superscripts (7pt).
+\def\sevennominalsize{7pt}
+\setfont\sevenrm\rmshape{7}{1000}{OT1}
+\setfont\seventt\ttshape{10}{700}{OT1TT}
+\setfont\sevenbf\bfshape{10}{700}{OT1}
+\setfont\sevenit\itshape{7}{1000}{OT1IT}
+\setfont\sevensl\slshape{10}{700}{OT1}
+\setfont\sevensf\sfshape{10}{700}{OT1}
+\setfont\sevensc\scshape{10}{700}{OT1}
+\setfont\seventtsl\ttslshape{10}{700}{OT1TT}
+\font\seveni=cmmi7
+\font\sevensy=cmsy7
+\def\sevenecsize{0700}
+
+% Fonts for title page (20.4pt):
+\def\titlenominalsize{20pt}
+\setfont\titlerm\rmbshape{12}{\magstep3}{OT1}
+\setfont\titleit\itbshape{10}{\magstep4}{OT1IT}
+\setfont\titlesl\slbshape{10}{\magstep4}{OT1}
+\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT}
+\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT}
+\setfont\titlesf\sfbshape{17}{\magstep1}{OT1}
+\let\titlebf=\titlerm
+\setfont\titlesc\scbshape{10}{\magstep4}{OT1}
+\font\titlei=cmmi12 scaled \magstep3
+\font\titlesy=cmsy10 scaled \magstep4
+\def\titleecsize{2074}
+
+% Chapter (and unnumbered) fonts (17.28pt).
+\def\chapnominalsize{17pt}
+\setfont\chaprm\rmbshape{12}{\magstep2}{OT1}
+\setfont\chapit\itbshape{10}{\magstep3}{OT1IT}
+\setfont\chapsl\slbshape{10}{\magstep3}{OT1}
+\setfont\chaptt\ttbshape{12}{\magstep2}{OT1TT}
+\setfont\chapttsl\ttslshape{10}{\magstep3}{OT1TT}
+\setfont\chapsf\sfbshape{17}{1000}{OT1}
+\let\chapbf=\chaprm
+\setfont\chapsc\scbshape{10}{\magstep3}{OT1}
+\font\chapi=cmmi12 scaled \magstep2
+\font\chapsy=cmsy10 scaled \magstep3
+\def\chapecsize{1728}
+
+% Section fonts (14.4pt).
+\def\secnominalsize{14pt}
+\setfont\secrm\rmbshape{12}{\magstep1}{OT1}
+\setfont\secrmnotbold\rmshape{12}{\magstep1}{OT1}
+\setfont\secit\itbshape{10}{\magstep2}{OT1IT}
+\setfont\secsl\slbshape{10}{\magstep2}{OT1}
+\setfont\sectt\ttbshape{12}{\magstep1}{OT1TT}
+\setfont\secttsl\ttslshape{10}{\magstep2}{OT1TT}
+\setfont\secsf\sfbshape{12}{\magstep1}{OT1}
+\let\secbf\secrm
+\setfont\secsc\scbshape{10}{\magstep2}{OT1}
+\font\seci=cmmi12 scaled \magstep1
+\font\secsy=cmsy10 scaled \magstep2
+\def\sececsize{1440}
+
+% Subsection fonts (13.15pt).
+\def\ssecnominalsize{13pt}
+\setfont\ssecrm\rmbshape{12}{\magstephalf}{OT1}
+\setfont\ssecit\itbshape{10}{1315}{OT1IT}
+\setfont\ssecsl\slbshape{10}{1315}{OT1}
+\setfont\ssectt\ttbshape{12}{\magstephalf}{OT1TT}
+\setfont\ssecttsl\ttslshape{10}{1315}{OT1TT}
+\setfont\ssecsf\sfbshape{12}{\magstephalf}{OT1}
+\let\ssecbf\ssecrm
+\setfont\ssecsc\scbshape{10}{1315}{OT1}
+\font\sseci=cmmi12 scaled \magstephalf
+\font\ssecsy=cmsy10 scaled 1315
+\def\ssececsize{1200}
+
+% Reduced fonts for @acronym in text (10pt).
+\def\reducednominalsize{10pt}
+\setfont\reducedrm\rmshape{10}{1000}{OT1}
+\setfont\reducedtt\ttshape{10}{1000}{OT1TT}
+\setfont\reducedbf\bfshape{10}{1000}{OT1}
+\setfont\reducedit\itshape{10}{1000}{OT1IT}
+\setfont\reducedsl\slshape{10}{1000}{OT1}
+\setfont\reducedsf\sfshape{10}{1000}{OT1}
+\setfont\reducedsc\scshape{10}{1000}{OT1}
+\setfont\reducedttsl\ttslshape{10}{1000}{OT1TT}
+\font\reducedi=cmmi10
+\font\reducedsy=cmsy10
+\def\reducedecsize{1000}
+
+\textleading = 13.2pt % line spacing for 11pt CM
+\textfonts % reset the current fonts
+\rm
+} % end of 11pt text font size definitions, \definetextfontsizexi
+
+
+% Definitions to make the main text be 10pt Computer Modern, with
+% section, chapter, etc., sizes following suit. This is for the GNU
+% Press printing of the Emacs 22 manual. Maybe other manuals in the
+% future. Used with @smallbook, which sets the leading to 12pt.
+%
+\def\definetextfontsizex{%
+% Text fonts (10pt).
+\def\textnominalsize{10pt}
+\edef\mainmagstep{1000}
+\setfont\textrm\rmshape{10}{\mainmagstep}{OT1}
+\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT}
+\setfont\textbf\bfshape{10}{\mainmagstep}{OT1}
+\setfont\textit\itshape{10}{\mainmagstep}{OT1IT}
+\setfont\textsl\slshape{10}{\mainmagstep}{OT1}
+\setfont\textsf\sfshape{10}{\mainmagstep}{OT1}
+\setfont\textsc\scshape{10}{\mainmagstep}{OT1}
+\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT}
+\font\texti=cmmi10 scaled \mainmagstep
+\font\textsy=cmsy10 scaled \mainmagstep
+\def\textecsize{1000}
+
+% A few fonts for @defun names and args.
+\setfont\defbf\bfshape{10}{\magstephalf}{OT1}
+\setfont\deftt\ttshape{10}{\magstephalf}{OT1TT}
+\setfont\defsl\slshape{10}{\magstephalf}{OT1}
+\setfont\defttsl\ttslshape{10}{\magstephalf}{OT1TT}
+\def\df{\let\ttfont=\deftt \let\bffont = \defbf
+\let\slfont=\defsl \let\ttslfont=\defttsl \bf}
+
+% Fonts for indices, footnotes, small examples (9pt).
+\def\smallnominalsize{9pt}
+\setfont\smallrm\rmshape{9}{1000}{OT1}
+\setfont\smalltt\ttshape{9}{1000}{OT1TT}
+\setfont\smallbf\bfshape{10}{900}{OT1}
+\setfont\smallit\itshape{9}{1000}{OT1IT}
+\setfont\smallsl\slshape{9}{1000}{OT1}
+\setfont\smallsf\sfshape{9}{1000}{OT1}
+\setfont\smallsc\scshape{10}{900}{OT1}
+\setfont\smallttsl\ttslshape{10}{900}{OT1TT}
+\font\smalli=cmmi9
+\font\smallsy=cmsy9
+\def\smallecsize{0900}
+
+% Fonts for small examples (8pt).
+\def\smallernominalsize{8pt}
+\setfont\smallerrm\rmshape{8}{1000}{OT1}
+\setfont\smallertt\ttshape{8}{1000}{OT1TT}
+\setfont\smallerbf\bfshape{10}{800}{OT1}
+\setfont\smallerit\itshape{8}{1000}{OT1IT}
+\setfont\smallersl\slshape{8}{1000}{OT1}
+\setfont\smallersf\sfshape{8}{1000}{OT1}
+\setfont\smallersc\scshape{10}{800}{OT1}
+\setfont\smallerttsl\ttslshape{10}{800}{OT1TT}
+\font\smalleri=cmmi8
+\font\smallersy=cmsy8
+\def\smallerecsize{0800}
+
+% Fonts for math mode superscripts (7pt).
+\def\sevennominalsize{7pt}
+\setfont\sevenrm\rmshape{7}{1000}{OT1}
+\setfont\seventt\ttshape{10}{700}{OT1TT}
+\setfont\sevenbf\bfshape{10}{700}{OT1}
+\setfont\sevenit\itshape{7}{1000}{OT1IT}
+\setfont\sevensl\slshape{10}{700}{OT1}
+\setfont\sevensf\sfshape{10}{700}{OT1}
+\setfont\sevensc\scshape{10}{700}{OT1}
+\setfont\seventtsl\ttslshape{10}{700}{OT1TT}
+\font\seveni=cmmi7
+\font\sevensy=cmsy7
+\def\sevenecsize{0700}
+
+% Fonts for title page (20.4pt):
+\def\titlenominalsize{20pt}
+\setfont\titlerm\rmbshape{12}{\magstep3}{OT1}
+\setfont\titleit\itbshape{10}{\magstep4}{OT1IT}
+\setfont\titlesl\slbshape{10}{\magstep4}{OT1}
+\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT}
+\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT}
+\setfont\titlesf\sfbshape{17}{\magstep1}{OT1}
+\let\titlebf=\titlerm
+\setfont\titlesc\scbshape{10}{\magstep4}{OT1}
+\font\titlei=cmmi12 scaled \magstep3
+\font\titlesy=cmsy10 scaled \magstep4
+\def\titleecsize{2074}
+
+% Chapter fonts (14.4pt).
+\def\chapnominalsize{14pt}
+\setfont\chaprm\rmbshape{12}{\magstep1}{OT1}
+\setfont\chapit\itbshape{10}{\magstep2}{OT1IT}
+\setfont\chapsl\slbshape{10}{\magstep2}{OT1}
+\setfont\chaptt\ttbshape{12}{\magstep1}{OT1TT}
+\setfont\chapttsl\ttslshape{10}{\magstep2}{OT1TT}
+\setfont\chapsf\sfbshape{12}{\magstep1}{OT1}
+\let\chapbf\chaprm
+\setfont\chapsc\scbshape{10}{\magstep2}{OT1}
+\font\chapi=cmmi12 scaled \magstep1
+\font\chapsy=cmsy10 scaled \magstep2
+\def\chapecsize{1440}
+
+% Section fonts (12pt).
+\def\secnominalsize{12pt}
+\setfont\secrm\rmbshape{12}{1000}{OT1}
+\setfont\secit\itbshape{10}{\magstep1}{OT1IT}
+\setfont\secsl\slbshape{10}{\magstep1}{OT1}
+\setfont\sectt\ttbshape{12}{1000}{OT1TT}
+\setfont\secttsl\ttslshape{10}{\magstep1}{OT1TT}
+\setfont\secsf\sfbshape{12}{1000}{OT1}
+\let\secbf\secrm
+\setfont\secsc\scbshape{10}{\magstep1}{OT1}
+\font\seci=cmmi12
+\font\secsy=cmsy10 scaled \magstep1
+\def\sececsize{1200}
+
+% Subsection fonts (10pt).
+\def\ssecnominalsize{10pt}
+\setfont\ssecrm\rmbshape{10}{1000}{OT1}
+\setfont\ssecit\itbshape{10}{1000}{OT1IT}
+\setfont\ssecsl\slbshape{10}{1000}{OT1}
+\setfont\ssectt\ttbshape{10}{1000}{OT1TT}
+\setfont\ssecttsl\ttslshape{10}{1000}{OT1TT}
+\setfont\ssecsf\sfbshape{10}{1000}{OT1}
+\let\ssecbf\ssecrm
+\setfont\ssecsc\scbshape{10}{1000}{OT1}
+\font\sseci=cmmi10
+\font\ssecsy=cmsy10
+\def\ssececsize{1000}
+
+% Reduced fonts for @acronym in text (9pt).
+\def\reducednominalsize{9pt}
+\setfont\reducedrm\rmshape{9}{1000}{OT1}
+\setfont\reducedtt\ttshape{9}{1000}{OT1TT}
+\setfont\reducedbf\bfshape{10}{900}{OT1}
+\setfont\reducedit\itshape{9}{1000}{OT1IT}
+\setfont\reducedsl\slshape{9}{1000}{OT1}
+\setfont\reducedsf\sfshape{9}{1000}{OT1}
+\setfont\reducedsc\scshape{10}{900}{OT1}
+\setfont\reducedttsl\ttslshape{10}{900}{OT1TT}
+\font\reducedi=cmmi9
+\font\reducedsy=cmsy9
+\def\reducedecsize{0900}
+
+\divide\parskip by 2 % reduce space between paragraphs
+\textleading = 12pt % line spacing for 10pt CM
+\textfonts % reset the current fonts
+\rm
+} % end of 10pt text font size definitions, \definetextfontsizex
+
+% Fonts for short table of contents.
+\setfont\shortcontrm\rmshape{12}{1000}{OT1}
+\setfont\shortcontbf\bfshape{10}{\magstep1}{OT1} % no cmb12
+\setfont\shortcontsl\slshape{12}{1000}{OT1}
+\setfont\shortconttt\ttshape{12}{1000}{OT1TT}
+
+
+% We provide the user-level command
+% @fonttextsize 10
+% (or 11) to redefine the text font size. pt is assumed.
+%
+\def\xiword{11}
+\def\xword{10}
+\def\xwordpt{10pt}
+%
+\parseargdef\fonttextsize{%
+ \def\textsizearg{#1}%
+ %\wlog{doing @fonttextsize \textsizearg}%
+ %
+ % Set \globaldefs so that documents can use this inside @tex, since
+ % makeinfo 4.8 does not support it, but we need it nonetheless.
+ %
+ \begingroup \globaldefs=1
+ \ifx\textsizearg\xword \definetextfontsizex
+ \else \ifx\textsizearg\xiword \definetextfontsizexi
+ \else
+ \errhelp=\EMsimple
+ \errmessage{@fonttextsize only supports `10' or `11', not `\textsizearg'}
+ \fi\fi
+ \endgroup
+}
+
+%
+% Change the current font style to #1, remembering it in \curfontstyle.
+% For now, we do not accumulate font styles: @b{@i{foo}} prints foo in
+% italics, not bold italics.
+%
+\def\setfontstyle#1{%
+ \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd.
+ \csname #1font\endcsname % change the current font
+}
+
+\def\rm{\fam=0 \setfontstyle{rm}}
+\def\it{\fam=\itfam \setfontstyle{it}}
+\def\sl{\fam=\slfam \setfontstyle{sl}}
+\def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf}
+\def\tt{\fam=\ttfam \setfontstyle{tt}}\def\ttstylename{tt}
+
+% Texinfo sort of supports the sans serif font style, which plain TeX does not.
+% So we set up a \sf.
+\newfam\sffam
+\def\sf{\fam=\sffam \setfontstyle{sf}}
+
+% We don't need math for this font style.
+\def\ttsl{\setfontstyle{ttsl}}
+
+
+% In order for the font changes to affect most math symbols and letters,
+% we have to define the \textfont of the standard families.
+% We don't bother to reset \scriptscriptfont; awaiting user need.
+%
+\def\resetmathfonts{%
+ \textfont0=\rmfont \textfont1=\ifont \textfont2=\syfont
+ \textfont\itfam=\itfont \textfont\slfam=\slfont \textfont\bffam=\bffont
+ \textfont\ttfam=\ttfont \textfont\sffam=\sffont
+ %
+ % Fonts for superscript. Note that the 7pt fonts are used regardless
+ % of the current font size.
+ \scriptfont0=\sevenrm \scriptfont1=\seveni \scriptfont2=\sevensy
+ \scriptfont\itfam=\sevenit \scriptfont\slfam=\sevensl
+ \scriptfont\bffam=\sevenbf \scriptfont\ttfam=\seventt
+ \scriptfont\sffam=\sevensf
+}
+
+%
+
+% The font-changing commands (all called \...fonts) redefine the meanings
+% of \STYLEfont, instead of just \STYLE. We do this because \STYLE needs
+% to also set the current \fam for math mode. Our \STYLE (e.g., \rm)
+% commands hardwire \STYLEfont to set the current font.
+%
+% The fonts used for \ifont are for "math italics" (\itfont is for italics
+% in regular text). \syfont is also used in math mode only.
+%
+% Each font-changing command also sets the names \lsize (one size lower)
+% and \lllsize (three sizes lower). These relative commands are used
+% in, e.g., the LaTeX logo and acronyms.
+%
+% This all needs generalizing, badly.
+%
+
+\def\assignfonts#1{%
+ \expandafter\let\expandafter\rmfont\csname #1rm\endcsname
+ \expandafter\let\expandafter\itfont\csname #1it\endcsname
+ \expandafter\let\expandafter\slfont\csname #1sl\endcsname
+ \expandafter\let\expandafter\bffont\csname #1bf\endcsname
+ \expandafter\let\expandafter\ttfont\csname #1tt\endcsname
+ \expandafter\let\expandafter\smallcaps\csname #1sc\endcsname
+ \expandafter\let\expandafter\sffont \csname #1sf\endcsname
+ \expandafter\let\expandafter\ifont \csname #1i\endcsname
+ \expandafter\let\expandafter\syfont \csname #1sy\endcsname
+ \expandafter\let\expandafter\ttslfont\csname #1ttsl\endcsname
+}
+
+\newif\ifrmisbold
+
+% Select smaller font size with the current style. Used to change font size
+% in, e.g., the LaTeX logo and acronyms. If we are using bold fonts for
+% normal roman text, also use bold fonts for roman text in the smaller size.
+\def\switchtolllsize{%
+ \expandafter\assignfonts\expandafter{\lllsize}%
+ \ifrmisbold
+ \let\rmfont\bffont
+ \fi
+ \csname\curfontstyle\endcsname
+}%
+
+\def\switchtolsize{%
+ \expandafter\assignfonts\expandafter{\lsize}%
+ \ifrmisbold
+ \let\rmfont\bffont
+ \fi
+ \csname\curfontstyle\endcsname
+}%
+
+\def\definefontsetatsize#1#2#3#4#5{%
+\expandafter\def\csname #1fonts\endcsname{%
+ \def\curfontsize{#1}%
+ \def\lsize{#2}\def\lllsize{#3}%
+ \csname rmisbold#5\endcsname
+ \assignfonts{#1}%
+ \resetmathfonts
+ \setleading{#4}%
+}}
+
+\definefontsetatsize{text} {reduced}{smaller}{\textleading}{false}
+\definefontsetatsize{title} {chap} {subsec} {27pt} {true}
+\definefontsetatsize{chap} {sec} {text} {19pt} {true}
+\definefontsetatsize{sec} {subsec} {reduced}{17pt} {true}
+\definefontsetatsize{ssec} {text} {small} {15pt} {true}
+\definefontsetatsize{reduced}{small} {smaller}{10.5pt}{false}
+\definefontsetatsize{small} {smaller}{smaller}{10.5pt}{false}
+\definefontsetatsize{smaller}{smaller}{smaller}{9.5pt} {false}
+
+\def\titlefont#1{{\titlefonts\rm #1}}
+\let\subsecfonts = \ssecfonts
+\let\subsubsecfonts = \ssecfonts
+
+% Define these just so they can be easily changed for other fonts.
+\def\angleleft{$\langle$}
+\def\angleright{$\rangle$}
+
+% Set the fonts to use with the @small... environments.
+\let\smallexamplefonts = \smallfonts
+
+% About \smallexamplefonts. If we use \smallfonts (9pt), @smallexample
+% can fit this many characters:
+% 8.5x11=86 smallbook=72 a4=90 a5=69
+% If we use \scriptfonts (8pt), then we can fit this many characters:
+% 8.5x11=90+ smallbook=80 a4=90+ a5=77
+% For me, subjectively, the few extra characters that fit aren't worth
+% the additional smallness of 8pt. So I'm making the default 9pt.
+%
+% By the way, for comparison, here's what fits with @example (10pt):
+% 8.5x11=71 smallbook=60 a4=75 a5=58
+% --karl, 24jan03.
+
+% Set up the default fonts, so we can use them for creating boxes.
+%
+\definetextfontsizexi
+
+
+% Check if we are currently using a typewriter font. Since all the
+% Computer Modern typewriter fonts have zero interword stretch (and
+% shrink), and it is reasonable to expect all typewriter fonts to have
+% this property, we can check that font parameter.
+%
+\def\ifmonospace{\ifdim\fontdimen3\font=0pt }
+
+{
+\catcode`\'=\active
+\catcode`\`=\active
+
+\gdef\setcodequotes{\let`\codequoteleft \let'\codequoteright}
+\gdef\setregularquotes{\let`\lq \let'\rq}
+}
+
+% Allow an option to not use regular directed right quote/apostrophe
+% (char 0x27), but instead the undirected quote from cmtt (char 0x0d).
+% The undirected quote is ugly, so don't make it the default, but it
+% works for pasting with more pdf viewers (at least evince), the
+% lilypond developers report. xpdf does work with the regular 0x27.
+%
+\def\codequoteright{%
+ \ifmonospace
+ \expandafter\ifx\csname SETtxicodequoteundirected\endcsname\relax
+ \expandafter\ifx\csname SETcodequoteundirected\endcsname\relax
+ '%
+ \else \char'15 \fi
+ \else \char'15 \fi
+ \else
+ '%
+ \fi
+}
+%
+% and a similar option for the left quote char vs. a grave accent.
+% Modern fonts display ASCII 0x60 as a grave accent, so some people like
+% the code environments to do likewise.
+%
+\def\codequoteleft{%
+ \ifmonospace
+ \expandafter\ifx\csname SETtxicodequotebacktick\endcsname\relax
+ \expandafter\ifx\csname SETcodequotebacktick\endcsname\relax
+ % [Knuth] pp. 380,381,391
+ % \relax disables Spanish ligatures ?` and !` of \tt font.
+ \relax`%
+ \else \char'22 \fi
+ \else \char'22 \fi
+ \else
+ \relax`%
+ \fi
+}
+
+% Commands to set the quote options.
+%
+\parseargdef\codequoteundirected{%
+ \def\temp{#1}%
+ \ifx\temp\onword
+ \expandafter\let\csname SETtxicodequoteundirected\endcsname
+ = t%
+ \else\ifx\temp\offword
+ \expandafter\let\csname SETtxicodequoteundirected\endcsname
+ = \relax
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @codequoteundirected value `\temp', must be on|off}%
+ \fi\fi
+}
+%
+\parseargdef\codequotebacktick{%
+ \def\temp{#1}%
+ \ifx\temp\onword
+ \expandafter\let\csname SETtxicodequotebacktick\endcsname
+ = t%
+ \else\ifx\temp\offword
+ \expandafter\let\csname SETtxicodequotebacktick\endcsname
+ = \relax
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @codequotebacktick value `\temp', must be on|off}%
+ \fi\fi
+}
+
+% [Knuth] pp. 380,381,391, disable Spanish ligatures ?` and !` of \tt font.
+\def\noligaturesquoteleft{\relax\lq}
+
+% Count depth in font-changes, for error checks
+\newcount\fontdepth \fontdepth=0
+
+% Font commands.
+
+% #1 is the font command (\sl or \it), #2 is the text to slant.
+% If we are in a monospaced environment, however, 1) always use \ttsl,
+% and 2) do not add an italic correction.
+\def\dosmartslant#1#2{%
+ \ifusingtt
+ {{\ttsl #2}\let\next=\relax}%
+ {\def\next{{#1#2}\futurelet\next\smartitaliccorrection}}%
+ \next
+}
+\def\smartslanted{\dosmartslant\sl}
+\def\smartitalic{\dosmartslant\it}
+
+% Output an italic correction unless \next (presumed to be the following
+% character) is such as not to need one.
+\def\smartitaliccorrection{%
+ \ifx\next,%
+ \else\ifx\next-%
+ \else\ifx\next.%
+ \else\ifx\next\.%
+ \else\ifx\next\comma%
+ \else\ptexslash
+ \fi\fi\fi\fi\fi
+ \aftersmartic
+}
+
+% Unconditional use \ttsl, and no ic. @var is set to this for defuns.
+\def\ttslanted#1{{\ttsl #1}}
+
+% @cite is like \smartslanted except unconditionally use \sl. We never want
+% ttsl for book titles, do we?
+\def\cite#1{{\sl #1}\futurelet\next\smartitaliccorrection}
+
+\def\aftersmartic{}
+\def\var#1{%
+ \let\saveaftersmartic = \aftersmartic
+ \def\aftersmartic{\null\let\aftersmartic=\saveaftersmartic}%
+ \smartslanted{#1}%
+}
+
+\let\i=\smartitalic
+\let\slanted=\smartslanted
+\let\dfn=\smartslanted
+\let\emph=\smartitalic
+
+% Explicit font changes: @r, @sc, undocumented @ii.
+\def\r#1{{\rm #1}} % roman font
+\def\sc#1{{\smallcaps#1}} % smallcaps font
+\def\ii#1{{\it #1}} % italic font
+
+% @b, explicit bold. Also @strong.
+\def\b#1{{\bf #1}}
+\let\strong=\b
+
+% @sansserif, explicit sans.
+\def\sansserif#1{{\sf #1}}
+
+% We can't just use \exhyphenpenalty, because that only has effect at
+% the end of a paragraph. Restore normal hyphenation at the end of the
+% group within which \nohyphenation is presumably called.
+%
+\def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation}
+\def\restorehyphenation{\hyphenchar\font = `- }
+
+% Set sfcode to normal for the chars that usually have another value.
+% Can't use plain's \frenchspacing because it uses the `\x notation, and
+% sometimes \x has an active definition that messes things up.
+%
+\catcode`@=11
+ \def\plainfrenchspacing{%
+ \sfcode`\.=\@m \sfcode`\?=\@m \sfcode`\!=\@m
+ \sfcode`\:=\@m \sfcode`\;=\@m \sfcode`\,=\@m
+ \def\endofsentencespacefactor{1000}% for @. and friends
+ }
+ \def\plainnonfrenchspacing{%
+ \sfcode`\.3000\sfcode`\?3000\sfcode`\!3000
+ \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250
+ \def\endofsentencespacefactor{3000}% for @. and friends
+ }
+\catcode`@=\other
+\def\endofsentencespacefactor{3000}% default
+
+% @t, explicit typewriter.
+\def\t#1{%
+ {\tt \plainfrenchspacing #1}%
+ \null
+}
+
+% @samp.
+\def\samp#1{{\setcodequotes\lq\tclose{#1}\rq\null}}
+
+% @indicateurl is \samp, that is, with quotes.
+\let\indicateurl=\samp
+
+% @code (and similar) prints in typewriter, but with spaces the same
+% size as normal in the surrounding text, without hyphenation, etc.
+% This is a subroutine for that.
+\def\tclose#1{%
+ {%
+ % Change normal interword space to be same as for the current font.
+ \spaceskip = \fontdimen2\font
+ %
+ % Switch to typewriter.
+ \tt
+ %
+ % But `\ ' produces the large typewriter interword space.
+ \def\ {{\spaceskip = 0pt{} }}%
+ %
+ % Turn off hyphenation.
+ \nohyphenation
+ %
+ \plainfrenchspacing
+ #1%
+ }%
+ \null % reset spacefactor to 1000
+}
+
+% We *must* turn on hyphenation at `-' and `_' in @code.
+% (But see \codedashfinish below.)
+% Otherwise, it is too hard to avoid overfull hboxes
+% in the Emacs manual, the Library manual, etc.
+%
+% Unfortunately, TeX uses one parameter (\hyphenchar) to control
+% both hyphenation at - and hyphenation within words.
+% We must therefore turn them both off (\tclose does that)
+% and arrange explicitly to hyphenate at a dash. -- rms.
+{
+ \catcode`\-=\active \catcode`\_=\active
+ \catcode`\'=\active \catcode`\`=\active
+ \global\let'=\rq \global\let`=\lq % default definitions
+ %
+ \global\def\code{\begingroup
+ \setcodequotes
+ \catcode\dashChar=\active \catcode\underChar=\active
+ \ifallowcodebreaks
+ \let-\codedash
+ \let_\codeunder
+ \else
+ \let-\normaldash
+ \let_\realunder
+ \fi
+ % Given -foo (with a single dash), we do not want to allow a break
+ % after the hyphen.
+ \global\let\codedashprev=\codedash
+ %
+ \codex
+ }
+ %
+ \gdef\codedash{\futurelet\next\codedashfinish}
+ \gdef\codedashfinish{%
+ \normaldash % always output the dash character itself.
+ %
+ % Now, output a discretionary to allow a line break, unless
+ % (a) the next character is a -, or
+ % (b) the preceding character is a -.
+ % E.g., given --posix, we do not want to allow a break after either -.
+ % Given --foo-bar, we do want to allow a break between the - and the b.
+ \ifx\next\codedash \else
+ \ifx\codedashprev\codedash
+ \else \discretionary{}{}{}\fi
+ \fi
+ % we need the space after the = for the case when \next itself is a
+ % space token; it would get swallowed otherwise. As in @code{- a}.
+ \global\let\codedashprev= \next
+ }
+}
+\def\normaldash{-}
+%
+\def\codex #1{\tclose{#1}\endgroup}
+
+\def\codeunder{%
+ % this is all so @math{@code{var_name}+1} can work. In math mode, _
+ % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.)
+ % will therefore expand the active definition of _, which is us
+ % (inside @code that is), therefore an endless loop.
+ \ifusingtt{\ifmmode
+ \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_.
+ \else\normalunderscore \fi
+ \discretionary{}{}{}}%
+ {\_}%
+}
+
+% An additional complication: the above will allow breaks after, e.g.,
+% each of the four underscores in __typeof__. This is bad.
+% @allowcodebreaks provides a document-level way to turn breaking at -
+% and _ on and off.
+%
+\newif\ifallowcodebreaks \allowcodebreakstrue
+
+\def\keywordtrue{true}
+\def\keywordfalse{false}
+
+\parseargdef\allowcodebreaks{%
+ \def\txiarg{#1}%
+ \ifx\txiarg\keywordtrue
+ \allowcodebreakstrue
+ \else\ifx\txiarg\keywordfalse
+ \allowcodebreaksfalse
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @allowcodebreaks option `\txiarg', must be true|false}%
+ \fi\fi
+}
+
+% For @command, @env, @file, @option quotes seem unnecessary,
+% so use \code rather than \samp.
+\let\command=\code
+\let\env=\code
+\let\file=\code
+\let\option=\code
+
+% @uref (abbreviation for `urlref') aka @url takes an optional
+% (comma-separated) second argument specifying the text to display and
+% an optional third arg as text to display instead of (rather than in
+% addition to) the url itself. First (mandatory) arg is the url.
+
+% TeX-only option to allow changing PDF output to show only the second
+% arg (if given), and not the url (which is then just the link target).
+\newif\ifurefurlonlylink
+
+% The default \pretolerance setting stops the penalty inserted in
+% \urefallowbreak being a discouragement to line breaking. Set it to
+% a negative value for this paragraph only. Hopefully this does not
+% conflict with redefinitions of \par done elsewhere.
+\def\nopretolerance{%
+\pretolerance=-1
+\def\par{\endgraf\pretolerance=100 \let\par\endgraf}%
+}
+
+% The main macro is \urefbreak, which allows breaking at expected
+% places within the url.
+\def\urefbreak{\nopretolerance \begingroup \urefcatcodes \dourefbreak}
+\let\uref=\urefbreak
+%
+\def\dourefbreak#1{\urefbreakfinish #1,,,\finish}
+\def\urefbreakfinish#1,#2,#3,#4\finish{% doesn't work in @example
+ \unsepspaces
+ \pdfurl{#1}%
+ \setbox0 = \hbox{\ignorespaces #3}%
+ \ifdim\wd0 > 0pt
+ \unhbox0 % third arg given, show only that
+ \else
+ \setbox0 = \hbox{\ignorespaces #2}% look for second arg
+ \ifdim\wd0 > 0pt
+ \ifpdf
+ % For pdfTeX and LuaTeX
+ \ifurefurlonlylink
+ % PDF plus option to not display url, show just arg
+ \unhbox0
+ \else
+ % PDF, normally display both arg and url for consistency,
+ % visibility, if the pdf is eventually used to print, etc.
+ \unhbox0\ (\urefcode{#1})%
+ \fi
+ \else
+ \ifx\XeTeXrevision\thisisundefined
+ \unhbox0\ (\urefcode{#1})% DVI, always show arg and url
+ \else
+ % For XeTeX
+ \ifurefurlonlylink
+ % PDF plus option to not display url, show just arg
+ \unhbox0
+ \else
+ % PDF, normally display both arg and url for consistency,
+ % visibility, if the pdf is eventually used to print, etc.
+ \unhbox0\ (\urefcode{#1})%
+ \fi
+ \fi
+ \fi
+ \else
+ \urefcode{#1}% only url given, so show it
+ \fi
+ \fi
+ \endlink
+\endgroup}
+
+% Allow line breaks around only a few characters (only).
+\def\urefcatcodes{%
+ \catcode`\&=\active \catcode`\.=\active
+ \catcode`\#=\active \catcode`\?=\active
+ \catcode`\/=\active
+}
+{
+ \urefcatcodes
+ %
+ \global\def\urefcode{\begingroup
+ \setcodequotes
+ \urefcatcodes
+ \let&\urefcodeamp
+ \let.\urefcodedot
+ \let#\urefcodehash
+ \let?\urefcodequest
+ \let/\urefcodeslash
+ \codex
+ }
+ %
+ % By default, they are just regular characters.
+ \global\def&{\normalamp}
+ \global\def.{\normaldot}
+ \global\def#{\normalhash}
+ \global\def?{\normalquest}
+ \global\def/{\normalslash}
+}
+
+\def\urefcodeamp{\urefprebreak \&\urefpostbreak}
+\def\urefcodedot{\urefprebreak .\urefpostbreak}
+\def\urefcodehash{\urefprebreak \#\urefpostbreak}
+\def\urefcodequest{\urefprebreak ?\urefpostbreak}
+\def\urefcodeslash{\futurelet\next\urefcodeslashfinish}
+{
+ \catcode`\/=\active
+ \global\def\urefcodeslashfinish{%
+ \urefprebreak \slashChar
+ % Allow line break only after the final / in a sequence of
+ % slashes, to avoid line break between the slashes in http://.
+ \ifx\next/\else \urefpostbreak \fi
+ }
+}
+
+% By default we'll break after the special characters, but some people like to
+% break before the special chars, so allow that. Also allow no breaking at
+% all, for manual control.
+%
+\parseargdef\urefbreakstyle{%
+ \def\txiarg{#1}%
+ \ifx\txiarg\wordnone
+ \def\urefprebreak{\nobreak}\def\urefpostbreak{\nobreak}
+ \else\ifx\txiarg\wordbefore
+ \def\urefprebreak{\urefallowbreak}\def\urefpostbreak{\nobreak}
+ \else\ifx\txiarg\wordafter
+ \def\urefprebreak{\nobreak}\def\urefpostbreak{\urefallowbreak}
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @urefbreakstyle setting `\txiarg'}%
+ \fi\fi\fi
+}
+\def\wordafter{after}
+\def\wordbefore{before}
+\def\wordnone{none}
+
+% Allow a ragged right output to aid breaking long URL's. There can
+% be a break at the \allowbreak with no extra glue (if the existing stretch in
+% the line is sufficient), a break at the \penalty with extra glue added
+% at the end of the line, or no break at all here.
+% Changing the value of the penalty and/or the amount of stretch affects how
+% preferable one choice is over the other.
+\def\urefallowbreak{%
+ \penalty0\relax
+ \hskip 0pt plus 2 em\relax
+ \penalty1000\relax
+ \hskip 0pt plus -2 em\relax
+}
+
+\urefbreakstyle after
+
+% @url synonym for @uref, since that's how everyone uses it.
+%
+\let\url=\uref
+
+% rms does not like angle brackets --karl, 17may97.
+% So now @email is just like @uref, unless we are pdf.
+%
+%\def\email#1{\angleleft{\tt #1}\angleright}
+\ifpdforxetex
+ \def\email#1{\doemail#1,,\finish}
+ \def\doemail#1,#2,#3\finish{\begingroup
+ \unsepspaces
+ \pdfurl{mailto:#1}%
+ \setbox0 = \hbox{\ignorespaces #2}%
+ \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi
+ \endlink
+ \endgroup}
+\else
+ \let\email=\uref
+\fi
+
+% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always),
+% `example' (@kbd uses ttsl only inside of @example and friends),
+% or `code' (@kbd uses normal tty font always).
+\parseargdef\kbdinputstyle{%
+ \def\txiarg{#1}%
+ \ifx\txiarg\worddistinct
+ \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}%
+ \else\ifx\txiarg\wordexample
+ \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}%
+ \else\ifx\txiarg\wordcode
+ \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}%
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @kbdinputstyle setting `\txiarg'}%
+ \fi\fi\fi
+}
+\def\worddistinct{distinct}
+\def\wordexample{example}
+\def\wordcode{code}
+
+% Default is `distinct'.
+\kbdinputstyle distinct
+
+% @kbd is like @code, except that if the argument is just one @key command,
+% then @kbd has no effect.
+\def\kbd#1{{\def\look{#1}\expandafter\kbdsub\look??\par}}
+
+\def\xkey{\key}
+\def\kbdsub#1#2#3\par{%
+ \def\one{#1}\def\three{#3}\def\threex{??}%
+ \ifx\one\xkey\ifx\threex\three \key{#2}%
+ \else{\tclose{\kbdfont\setcodequotes\look}}\fi
+ \else{\tclose{\kbdfont\setcodequotes\look}}\fi
+}
+
+% definition of @key that produces a lozenge. Doesn't adjust to text size.
+%\setfont\keyrm\rmshape{8}{1000}{OT1}
+%\font\keysy=cmsy9
+%\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{%
+% \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{%
+% \vbox{\hrule\kern-0.4pt
+% \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}%
+% \kern-0.4pt\hrule}%
+% \kern-.06em\raise0.4pt\hbox{\angleright}}}}
+
+% definition of @key with no lozenge. If the current font is already
+% monospace, don't change it; that way, we respect @kbdinputstyle. But
+% if it isn't monospace, then use \tt.
+%
+\def\key#1{{\setregularquotes
+ \nohyphenation
+ \ifmonospace\else\tt\fi
+ #1}\null}
+
+% @clicksequence{File @click{} Open ...}
+\def\clicksequence#1{\begingroup #1\endgroup}
+
+% @clickstyle @arrow (by default)
+\parseargdef\clickstyle{\def\click{#1}}
+\def\click{\arrow}
+
+% Typeset a dimension, e.g., `in' or `pt'. The only reason for the
+% argument is to make the input look right: @dmn{pt} instead of @dmn{}pt.
+%
+\def\dmn#1{\thinspace #1}
+
+% @acronym for "FBI", "NATO", and the like.
+% We print this one point size smaller, since it's intended for
+% all-uppercase.
+%
+\def\acronym#1{\doacronym #1,,\finish}
+\def\doacronym#1,#2,#3\finish{%
+ {\switchtolsize #1}%
+ \def\temp{#2}%
+ \ifx\temp\empty \else
+ \space ({\unsepspaces \ignorespaces \temp \unskip})%
+ \fi
+ \null % reset \spacefactor=1000
+}
+
+% @abbr for "Comput. J." and the like.
+% No font change, but don't do end-of-sentence spacing.
+%
+\def\abbr#1{\doabbr #1,,\finish}
+\def\doabbr#1,#2,#3\finish{%
+ {\plainfrenchspacing #1}%
+ \def\temp{#2}%
+ \ifx\temp\empty \else
+ \space ({\unsepspaces \ignorespaces \temp \unskip})%
+ \fi
+ \null % reset \spacefactor=1000
+}
+
+% @asis just yields its argument. Used with @table, for example.
+%
+\def\asis#1{#1}
+
+% @math outputs its argument in math mode.
+%
+% One complication: _ usually means subscripts, but it could also mean
+% an actual _ character, as in @math{@var{some_variable} + 1}. So make
+% _ active, and distinguish by seeing if the current family is \slfam,
+% which is what @var uses.
+{
+ \catcode`\_ = \active
+ \gdef\mathunderscore{%
+ \catcode`\_=\active
+ \def_{\ifnum\fam=\slfam \_\else\sb\fi}%
+ }
+}
+% Another complication: we want \\ (and @\) to output a math (or tt) \.
+% FYI, plain.tex uses \\ as a temporary control sequence (for no
+% particular reason), but this is not advertised and we don't care.
+%
+% The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\.
+\def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi}
+%
+\def\math{%
+ \ifmmode\else % only go into math if not in math mode already
+ \tex
+ \mathunderscore
+ \let\\ = \mathbackslash
+ \mathactive
+ % make the texinfo accent commands work in math mode
+ \let\"=\ddot
+ \let\'=\acute
+ \let\==\bar
+ \let\^=\hat
+ \let\`=\grave
+ \let\u=\breve
+ \let\v=\check
+ \let\~=\tilde
+ \let\dotaccent=\dot
+ % have to provide another name for sup operator
+ \let\mathopsup=\sup
+ $\expandafter\finishmath\fi
+}
+\def\finishmath#1{#1$\endgroup} % Close the group opened by \tex.
+
+% Some active characters (such as <) are spaced differently in math.
+% We have to reset their definitions in case the @math was an argument
+% to a command which sets the catcodes (such as @item or @section).
+%
+{
+ \catcode`^ = \active
+ \catcode`< = \active
+ \catcode`> = \active
+ \catcode`+ = \active
+ \catcode`' = \active
+ \gdef\mathactive{%
+ \let^ = \ptexhat
+ \let< = \ptexless
+ \let> = \ptexgtr
+ \let+ = \ptexplus
+ \let' = \ptexquoteright
+ }
+}
+
+% for @sub and @sup, if in math mode, just do a normal sub/superscript.
+% If in text, use math to place as sub/superscript, but switch
+% into text mode, with smaller fonts. This is a different font than the
+% one used for real math sub/superscripts (8pt vs. 7pt), but let's not
+% fix it (significant additions to font machinery) until someone notices.
+%
+\def\sub{\ifmmode \expandafter\sb \else \expandafter\finishsub\fi}
+\def\finishsub#1{$\sb{\hbox{\switchtolllsize #1}}$}%
+%
+\def\sup{\ifmmode \expandafter\ptexsp \else \expandafter\finishsup\fi}
+\def\finishsup#1{$\ptexsp{\hbox{\switchtolllsize #1}}$}%
+
+% provide this command from LaTeX as it is very common
+\def\frac#1#2{{{#1}\over{#2}}}
+
+% @displaymath.
+% \globaldefs is needed to recognize the end lines in \tex and
+% \end tex. Set \thisenv as @end displaymath is seen before @end tex.
+{\obeylines
+\globaldefs=1
+\envdef\displaymath{%
+\tex%
+\def\thisenv{\displaymath}%
+\begingroup\let\end\displaymathend%
+$$%
+}
+
+\def\displaymathend{$$\endgroup\end}%
+
+\def\Edisplaymath{%
+\def\thisenv{\tex}%
+\end tex
+}}
+
+
+% @inlinefmt{FMTNAME,PROCESSED-TEXT} and @inlineraw{FMTNAME,RAW-TEXT}.
+% Ignore unless FMTNAME == tex; then it is like @iftex and @tex,
+% except specified as a normal braced arg, so no newlines to worry about.
+%
+\def\outfmtnametex{tex}
+%
+\long\def\inlinefmt#1{\doinlinefmt #1,\finish}
+\long\def\doinlinefmt#1,#2,\finish{%
+ \def\inlinefmtname{#1}%
+ \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\fi
+}
+%
+% @inlinefmtifelse{FMTNAME,THEN-TEXT,ELSE-TEXT} expands THEN-TEXT if
+% FMTNAME is tex, else ELSE-TEXT.
+\long\def\inlinefmtifelse#1{\doinlinefmtifelse #1,,,\finish}
+\long\def\doinlinefmtifelse#1,#2,#3,#4,\finish{%
+ \def\inlinefmtname{#1}%
+ \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\else \ignorespaces #3\fi
+}
+%
+% For raw, must switch into @tex before parsing the argument, to avoid
+% setting catcodes prematurely. Doing it this way means that, for
+% example, @inlineraw{html, foo{bar} gets a parse error instead of being
+% ignored. But this isn't important because if people want a literal
+% *right* brace they would have to use a command anyway, so they may as
+% well use a command to get a left brace too. We could re-use the
+% delimiter character idea from \verb, but it seems like overkill.
+%
+\long\def\inlineraw{\tex \doinlineraw}
+\long\def\doinlineraw#1{\doinlinerawtwo #1,\finish}
+\def\doinlinerawtwo#1,#2,\finish{%
+ \def\inlinerawname{#1}%
+ \ifx\inlinerawname\outfmtnametex \ignorespaces #2\fi
+ \endgroup % close group opened by \tex.
+}
+
+% @inlineifset{VAR, TEXT} expands TEXT if VAR is @set.
+%
+\long\def\inlineifset#1{\doinlineifset #1,\finish}
+\long\def\doinlineifset#1,#2,\finish{%
+ \def\inlinevarname{#1}%
+ \expandafter\ifx\csname SET\inlinevarname\endcsname\relax
+ \else\ignorespaces#2\fi
+}
+
+% @inlineifclear{VAR, TEXT} expands TEXT if VAR is not @set.
+%
+\long\def\inlineifclear#1{\doinlineifclear #1,\finish}
+\long\def\doinlineifclear#1,#2,\finish{%
+ \def\inlinevarname{#1}%
+ \expandafter\ifx\csname SET\inlinevarname\endcsname\relax \ignorespaces#2\fi
+}
+
+
+\message{glyphs,}
+% and logos.
+
+% @@ prints an @, as does @atchar{}.
+\def\@{\char64 }
+\let\atchar=\@
+
+% @{ @} @lbracechar{} @rbracechar{} all generate brace characters.
+\def\lbracechar{{\ifmonospace\char123\else\ensuremath\lbrace\fi}}
+\def\rbracechar{{\ifmonospace\char125\else\ensuremath\rbrace\fi}}
+\let\{=\lbracechar
+\let\}=\rbracechar
+
+% @comma{} to avoid , parsing problems.
+\let\comma = ,
+
+% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent
+% Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H.
+\let\, = \ptexc
+\let\dotaccent = \ptexdot
+\def\ringaccent#1{{\accent23 #1}}
+\let\tieaccent = \ptext
+\let\ubaraccent = \ptexb
+\let\udotaccent = \d
+
+% Other special characters: @questiondown @exclamdown @ordf @ordm
+% Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss.
+\def\questiondown{?`}
+\def\exclamdown{!`}
+\def\ordf{\leavevmode\raise1ex\hbox{\switchtolllsize \underbar{a}}}
+\def\ordm{\leavevmode\raise1ex\hbox{\switchtolllsize \underbar{o}}}
+
+% Dotless i and dotless j, used for accents.
+\def\imacro{i}
+\def\jmacro{j}
+\def\dotless#1{%
+ \def\temp{#1}%
+ \ifx\temp\imacro \ifmmode\imath \else\ptexi \fi
+ \else\ifx\temp\jmacro \ifmmode\jmath \else\j \fi
+ \else \errmessage{@dotless can be used only with i or j}%
+ \fi\fi
+}
+
+% The \TeX{} logo, as in plain, but resetting the spacing so that a
+% period following counts as ending a sentence. (Idea found in latex.)
+%
+\edef\TeX{\TeX \spacefactor=1000 }
+
+% @LaTeX{} logo. Not quite the same results as the definition in
+% latex.ltx, since we use a different font for the raised A; it's most
+% convenient for us to use an explicitly smaller font, rather than using
+% the \scriptstyle font (since we don't reset \scriptstyle and
+% \scriptscriptstyle).
+%
+\def\LaTeX{%
+ L\kern-.36em
+ {\setbox0=\hbox{T}%
+ \vbox to \ht0{\hbox{%
+ \ifx\textnominalsize\xwordpt
+ % for 10pt running text, lllsize (8pt) is too small for the A in LaTeX.
+ % Revert to plain's \scriptsize, which is 7pt.
+ \count255=\the\fam $\fam\count255 \scriptstyle A$%
+ \else
+ % For 11pt, we can use our lllsize.
+ \switchtolllsize A%
+ \fi
+ }%
+ \vss
+ }}%
+ \kern-.15em
+ \TeX
+}
+
+% Some math mode symbols. Define \ensuremath to switch into math mode
+% unless we are already there. Expansion tricks may not be needed here,
+% but safer, and can't hurt.
+\def\ensuremath{\ifmmode \expandafter\asis \else\expandafter\ensuredmath \fi}
+\def\ensuredmath#1{$\relax#1$}
+%
+\def\bullet{\ensuremath\ptexbullet}
+\def\geq{\ensuremath\ge}
+\def\leq{\ensuremath\le}
+\def\minus{\ensuremath-}
+
+% @dots{} outputs an ellipsis using the current font.
+% We do .5em per period so that it has the same spacing in the cm
+% typewriter fonts as three actual period characters; on the other hand,
+% in other typewriter fonts three periods are wider than 1.5em. So do
+% whichever is larger.
+%
+\def\dots{%
+ \leavevmode
+ \setbox0=\hbox{...}% get width of three periods
+ \ifdim\wd0 > 1.5em
+ \dimen0 = \wd0
+ \else
+ \dimen0 = 1.5em
+ \fi
+ \hbox to \dimen0{%
+ \hskip 0pt plus.25fil
+ .\hskip 0pt plus1fil
+ .\hskip 0pt plus1fil
+ .\hskip 0pt plus.5fil
+ }%
+}
+
+% @enddots{} is an end-of-sentence ellipsis.
+%
+\def\enddots{%
+ \dots
+ \spacefactor=\endofsentencespacefactor
+}
+
+% @point{}, @result{}, @expansion{}, @print{}, @equiv{}.
+%
+% Since these characters are used in examples, they should be an even number of
+% \tt widths. Each \tt character is 1en, so two makes it 1em.
+%
+\def\point{$\star$}
+\def\arrow{\leavevmode\raise.05ex\hbox to 1em{\hfil$\rightarrow$\hfil}}
+\def\result{\leavevmode\raise.05ex\hbox to 1em{\hfil$\Rightarrow$\hfil}}
+\def\expansion{\leavevmode\hbox to 1em{\hfil$\mapsto$\hfil}}
+\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}}
+\def\equiv{\leavevmode\hbox to 1em{\hfil$\ptexequiv$\hfil}}
+
+% The @error{} command.
+% Adapted from the TeXbook's \boxit.
+%
+\newbox\errorbox
+%
+{\ttfont \global\dimen0 = 3em}% Width of the box.
+\dimen2 = .55pt % Thickness of rules
+% The text. (`r' is open on the right, `e' somewhat less so on the left.)
+\setbox0 = \hbox{\kern-.75pt \reducedsf \putworderror\kern-1.5pt}
+%
+\setbox\errorbox=\hbox to \dimen0{\hfil
+ \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right.
+ \advance\hsize by -2\dimen2 % Rules.
+ \vbox{%
+ \hrule height\dimen2
+ \hbox{\vrule width\dimen2 \kern3pt % Space to left of text.
+ \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below.
+ \kern3pt\vrule width\dimen2}% Space to right.
+ \hrule height\dimen2}
+ \hfil}
+%
+\def\error{\leavevmode\lower.7ex\copy\errorbox}
+
+% @pounds{} is a sterling sign, which Knuth put in the CM italic font.
+%
+\def\pounds{\ifmonospace{\ecfont\char"BF}\else{\it\$}\fi}
+
+% @euro{} comes from a separate font, depending on the current style.
+% We use the free feym* fonts from the eurosym package by Henrik
+% Theiling, which support regular, slanted, bold and bold slanted (and
+% "outlined" (blackboard board, sort of) versions, which we don't need).
+% It is available from http://www.ctan.org/tex-archive/fonts/eurosym.
+%
+% Although only regular is the truly official Euro symbol, we ignore
+% that. The Euro is designed to be slightly taller than the regular
+% font height.
+%
+% feymr - regular
+% feymo - slanted
+% feybr - bold
+% feybo - bold slanted
+%
+% There is no good (free) typewriter version, to my knowledge.
+% A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide.
+% Hmm.
+%
+% Also doesn't work in math. Do we need to do math with euro symbols?
+% Hope not.
+%
+%
+\def\euro{{\eurofont e}}
+\def\eurofont{%
+ % We set the font at each command, rather than predefining it in
+ % \textfonts and the other font-switching commands, so that
+ % installations which never need the symbol don't have to have the
+ % font installed.
+ %
+ % There is only one designed size (nominal 10pt), so we always scale
+ % that to the current nominal size.
+ %
+ % By the way, simply using "at 1em" works for cmr10 and the like, but
+ % does not work for cmbx10 and other extended/shrunken fonts.
+ %
+ \def\eurosize{\csname\curfontsize nominalsize\endcsname}%
+ %
+ \ifx\curfontstyle\bfstylename
+ % bold:
+ \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize
+ \else
+ % regular:
+ \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize
+ \fi
+ \thiseurofont
+}
+
+% Glyphs from the EC fonts. We don't use \let for the aliases, because
+% sometimes we redefine the original macro, and the alias should reflect
+% the redefinition.
+%
+% Use LaTeX names for the Icelandic letters.
+\def\DH{{\ecfont \char"D0}} % Eth
+\def\dh{{\ecfont \char"F0}} % eth
+\def\TH{{\ecfont \char"DE}} % Thorn
+\def\th{{\ecfont \char"FE}} % thorn
+%
+\def\guillemetleft{{\ecfont \char"13}}
+\def\guillemotleft{\guillemetleft}
+\def\guillemetright{{\ecfont \char"14}}
+\def\guillemotright{\guillemetright}
+\def\guilsinglleft{{\ecfont \char"0E}}
+\def\guilsinglright{{\ecfont \char"0F}}
+\def\quotedblbase{{\ecfont \char"12}}
+\def\quotesinglbase{{\ecfont \char"0D}}
+%
+% This positioning is not perfect (see the ogonek LaTeX package), but
+% we have the precomposed glyphs for the most common cases. We put the
+% tests to use those glyphs in the single \ogonek macro so we have fewer
+% dummy definitions to worry about for index entries, etc.
+%
+% ogonek is also used with other letters in Lithuanian (IOU), but using
+% the precomposed glyphs for those is not so easy since they aren't in
+% the same EC font.
+\def\ogonek#1{{%
+ \def\temp{#1}%
+ \ifx\temp\macrocharA\Aogonek
+ \else\ifx\temp\macrochara\aogonek
+ \else\ifx\temp\macrocharE\Eogonek
+ \else\ifx\temp\macrochare\eogonek
+ \else
+ \ecfont \setbox0=\hbox{#1}%
+ \ifdim\ht0=1ex\accent"0C #1%
+ \else\ooalign{\unhbox0\crcr\hidewidth\char"0C \hidewidth}%
+ \fi
+ \fi\fi\fi\fi
+ }%
+}
+\def\Aogonek{{\ecfont \char"81}}\def\macrocharA{A}
+\def\aogonek{{\ecfont \char"A1}}\def\macrochara{a}
+\def\Eogonek{{\ecfont \char"86}}\def\macrocharE{E}
+\def\eogonek{{\ecfont \char"A6}}\def\macrochare{e}
+%
+% Use the European Computer Modern fonts (cm-super in outline format)
+% for non-CM glyphs. That is ec* for regular text and tc* for the text
+% companion symbols (LaTeX TS1 encoding). Both are part of the ec
+% package and follow the same conventions.
+%
+\def\ecfont{\etcfont{e}}
+\def\tcfont{\etcfont{t}}
+%
+\def\etcfont#1{%
+ % We can't distinguish serif/sans and italic/slanted, but this
+ % is used for crude hacks anyway (like adding French and German
+ % quotes to documents typeset with CM, where we lose kerning), so
+ % hopefully nobody will notice/care.
+ \edef\ecsize{\csname\curfontsize ecsize\endcsname}%
+ \edef\nominalsize{\csname\curfontsize nominalsize\endcsname}%
+ \ifmonospace
+ % typewriter:
+ \font\thisecfont = #1ctt\ecsize \space at \nominalsize
+ \else
+ \ifx\curfontstyle\bfstylename
+ % bold:
+ \font\thisecfont = #1cb\ifusingit{i}{x}\ecsize \space at \nominalsize
+ \else
+ % regular:
+ \font\thisecfont = #1c\ifusingit{ti}{rm}\ecsize \space at \nominalsize
+ \fi
+ \fi
+ \thisecfont
+}
+
+% @registeredsymbol - R in a circle. The font for the R should really
+% be smaller yet, but lllsize is the best we can do for now.
+% Adapted from the plain.tex definition of \copyright.
+%
+\def\registeredsymbol{%
+ $^{{\ooalign{\hfil\raise.07ex\hbox{\switchtolllsize R}%
+ \hfil\crcr\Orb}}%
+ }$%
+}
+
+% @textdegree - the normal degrees sign.
+%
+\def\textdegree{$^\circ$}
+
+% Laurent Siebenmann reports \Orb undefined with:
+% Textures 1.7.7 (preloaded format=plain 93.10.14) (68K) 16 APR 2004 02:38
+% so we'll define it if necessary.
+%
+\ifx\Orb\thisisundefined
+\def\Orb{\mathhexbox20D}
+\fi
+
+% Quotes.
+\chardef\quoteleft=`\`
+\chardef\quoteright=`\'
+
+% only change font for tt for correct kerning and to avoid using
+% \ecfont unless necessary.
+\def\quotedblleft{%
+ \ifmonospace{\ecfont\char"10}\else{\char"5C}\fi
+}
+
+\def\quotedblright{%
+ \ifmonospace{\ecfont\char"11}\else{\char`\"}\fi
+}
+
+
+\message{page headings,}
+
+\newskip\titlepagetopglue \titlepagetopglue = 1.5in
+\newskip\titlepagebottomglue \titlepagebottomglue = 2pc
+
+% First the title page. Must do @settitle before @titlepage.
+\newif\ifseenauthor
+\newif\iffinishedtitlepage
+
+% @setcontentsaftertitlepage used to do an implicit @contents or
+% @shortcontents after @end titlepage, but it is now obsolete.
+\def\setcontentsaftertitlepage{%
+ \errmessage{@setcontentsaftertitlepage has been removed as a Texinfo
+ command; move your @contents command if you want the contents
+ after the title page.}}%
+\def\setshortcontentsaftertitlepage{%
+ \errmessage{@setshortcontentsaftertitlepage has been removed as a Texinfo
+ command; move your @shortcontents and @contents commands if you
+ want the contents after the title page.}}%
+
+\parseargdef\shorttitlepage{%
+ \begingroup \hbox{}\vskip 1.5in \chaprm \centerline{#1}%
+ \endgroup\page\hbox{}\page}
+
+\envdef\titlepage{%
+ % Open one extra group, as we want to close it in the middle of \Etitlepage.
+ \begingroup
+ \parindent=0pt \textfonts
+ % Leave some space at the very top of the page.
+ \vglue\titlepagetopglue
+ % No rule at page bottom unless we print one at the top with @title.
+ \finishedtitlepagetrue
+ %
+ % Most title ``pages'' are actually two pages long, with space
+ % at the top of the second. We don't want the ragged left on the second.
+ \let\oldpage = \page
+ \def\page{%
+ \iffinishedtitlepage\else
+ \finishtitlepage
+ \fi
+ \let\page = \oldpage
+ \page
+ \null
+ }%
+}
+
+\def\Etitlepage{%
+ \iffinishedtitlepage\else
+ \finishtitlepage
+ \fi
+ % It is important to do the page break before ending the group,
+ % because the headline and footline are only empty inside the group.
+ % If we use the new definition of \page, we always get a blank page
+ % after the title page, which we certainly don't want.
+ \oldpage
+ \endgroup
+ %
+ % Need this before the \...aftertitlepage checks so that if they are
+ % in effect the toc pages will come out with page numbers.
+ \HEADINGSon
+}
+
+\def\finishtitlepage{%
+ \vskip4pt \hrule height 2pt width \hsize
+ \vskip\titlepagebottomglue
+ \finishedtitlepagetrue
+}
+
+% Settings used for typesetting titles: no hyphenation, no indentation,
+% don't worry much about spacing, ragged right. This should be used
+% inside a \vbox, and fonts need to be set appropriately first. \par should
+% be specified before the end of the \vbox, since a vbox is a group.
+%
+\def\raggedtitlesettings{%
+ \rm
+ \hyphenpenalty=10000
+ \parindent=0pt
+ \tolerance=5000
+ \ptexraggedright
+}
+
+% Macros to be used within @titlepage:
+
+\let\subtitlerm=\rmfont
+\def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}
+
+\parseargdef\title{%
+ \checkenv\titlepage
+ \vbox{\titlefonts \raggedtitlesettings #1\par}%
+ % print a rule at the page bottom also.
+ \finishedtitlepagefalse
+ \vskip4pt \hrule height 4pt width \hsize \vskip4pt
+}
+
+\parseargdef\subtitle{%
+ \checkenv\titlepage
+ {\subtitlefont \rightline{#1}}%
+}
+
+% @author should come last, but may come many times.
+% It can also be used inside @quotation.
+%
+\parseargdef\author{%
+ \def\temp{\quotation}%
+ \ifx\thisenv\temp
+ \def\quotationauthor{#1}% printed in \Equotation.
+ \else
+ \checkenv\titlepage
+ \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi
+ {\secfonts\rm \leftline{#1}}%
+ \fi
+}
+
+
+% Set up page headings and footings.
+
+\let\thispage=\folio
+
+\newtoks\evenheadline % headline on even pages
+\newtoks\oddheadline % headline on odd pages
+\newtoks\evenchapheadline% headline on even pages with a new chapter
+\newtoks\oddchapheadline % headline on odd pages with a new chapter
+\newtoks\evenfootline % footline on even pages
+\newtoks\oddfootline % footline on odd pages
+
+% Now make \makeheadline and \makefootline in Plain TeX use those variables
+\headline={{\textfonts\rm
+ \ifchapterpage
+ \ifodd\pageno\the\oddchapheadline\else\the\evenchapheadline\fi
+ \else
+ \ifodd\pageno\the\oddheadline\else\the\evenheadline\fi
+ \fi}}
+
+\footline={{\textfonts\rm \ifodd\pageno \the\oddfootline
+ \else \the\evenfootline \fi}\HEADINGShook}
+\let\HEADINGShook=\relax
+
+% Commands to set those variables.
+% For example, this is what @headings on does
+% @evenheading @thistitle|@thispage|@thischapter
+% @oddheading @thischapter|@thispage|@thistitle
+% @evenfooting @thisfile||
+% @oddfooting ||@thisfile
+
+
+\def\evenheading{\parsearg\evenheadingxxx}
+\def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish}
+\def\evenheadingyyy #1\|#2\|#3\|#4\finish{%
+ \global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}
+ \global\evenchapheadline=\evenheadline}
+
+\def\oddheading{\parsearg\oddheadingxxx}
+\def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish}
+\def\oddheadingyyy #1\|#2\|#3\|#4\finish{%
+ \global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}%
+ \global\oddchapheadline=\oddheadline}
+
+\parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}%
+
+\def\evenfooting{\parsearg\evenfootingxxx}
+\def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish}
+\def\evenfootingyyy #1\|#2\|#3\|#4\finish{%
+\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
+
+\def\oddfooting{\parsearg\oddfootingxxx}
+\def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish}
+\def\oddfootingyyy #1\|#2\|#3\|#4\finish{%
+ \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}%
+ %
+ % Leave some space for the footline. Hopefully ok to assume
+ % @evenfooting will not be used by itself.
+ \global\advance\txipageheight by -12pt
+ \global\advance\vsize by -12pt
+}
+
+\parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}}
+
+% @evenheadingmarks top \thischapter <- chapter at the top of a page
+% @evenheadingmarks bottom \thischapter <- chapter at the bottom of a page
+%
+% The same set of arguments for:
+%
+% @oddheadingmarks
+% @evenfootingmarks
+% @oddfootingmarks
+% @everyheadingmarks
+% @everyfootingmarks
+
+% These define \getoddheadingmarks, \getevenheadingmarks,
+% \getoddfootingmarks, and \getevenfootingmarks, each to one of
+% \gettopheadingmarks, \getbottomheadingmarks.
+%
+\def\evenheadingmarks{\headingmarks{even}{heading}}
+\def\oddheadingmarks{\headingmarks{odd}{heading}}
+\def\evenfootingmarks{\headingmarks{even}{footing}}
+\def\oddfootingmarks{\headingmarks{odd}{footing}}
+\parseargdef\everyheadingmarks{\headingmarks{even}{heading}{#1}
+ \headingmarks{odd}{heading}{#1} }
+\parseargdef\everyfootingmarks{\headingmarks{even}{footing}{#1}
+ \headingmarks{odd}{footing}{#1} }
+% #1 = even/odd, #2 = heading/footing, #3 = top/bottom.
+\def\headingmarks#1#2#3 {%
+ \expandafter\let\expandafter\temp \csname get#3headingmarks\endcsname
+ \global\expandafter\let\csname get#1#2marks\endcsname \temp
+}
+
+\everyheadingmarks bottom
+\everyfootingmarks bottom
+
+% @headings double turns headings on for double-sided printing.
+% @headings single turns headings on for single-sided printing.
+% @headings off turns them off.
+% @headings on same as @headings double, retained for compatibility.
+% @headings after turns on double-sided headings after this page.
+% @headings doubleafter turns on double-sided headings after this page.
+% @headings singleafter turns on single-sided headings after this page.
+% By default, they are off at the start of a document,
+% and turned `on' after @end titlepage.
+
+\parseargdef\headings{\csname HEADINGS#1\endcsname}
+
+\def\headingsoff{% non-global headings elimination
+ \evenheadline={\hfil}\evenfootline={\hfil}\evenchapheadline={\hfil}%
+ \oddheadline={\hfil}\oddfootline={\hfil}\oddchapheadline={\hfil}%
+}
+
+\def\HEADINGSoff{{\globaldefs=1 \headingsoff}} % global setting
+\HEADINGSoff % it's the default
+
+% When we turn headings on, set the page number to 1.
+\def\pageone{
+ \global\pageno=1
+ \global\arabiccount = \pagecount
+}
+
+% For double-sided printing, put current file name in lower left corner,
+% chapter name on inside top of right hand pages, document
+% title on inside top of left hand pages, and page numbers on outside top
+% edge of all pages.
+\def\HEADINGSdouble{%
+\pageone
+\HEADINGSdoublex
+}
+\let\contentsalignmacro = \chappager
+
+% For single-sided printing, chapter title goes across top left of page,
+% page number on top right.
+\def\HEADINGSsingle{%
+\pageone
+\HEADINGSsinglex
+}
+\def\HEADINGSon{\HEADINGSdouble}
+
+\def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex}
+\let\HEADINGSdoubleafter=\HEADINGSafter
+\def\HEADINGSdoublex{%
+\global\evenfootline={\hfil}
+\global\oddfootline={\hfil}
+\global\evenheadline={\line{\folio\hfil\thistitle}}
+\global\oddheadline={\line{\thischapter\hfil\folio}}
+\global\evenchapheadline={\line{\folio\hfil}}
+\global\oddchapheadline={\line{\hfil\folio}}
+\global\let\contentsalignmacro = \chapoddpage
+}
+
+\def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex}
+\def\HEADINGSsinglex{%
+\global\evenfootline={\hfil}
+\global\oddfootline={\hfil}
+\global\evenheadline={\line{\thischapter\hfil\folio}}
+\global\oddheadline={\line{\thischapter\hfil\folio}}
+\global\evenchapheadline={\line{\hfil\folio}}
+\global\oddchapheadline={\line{\hfil\folio}}
+\global\let\contentsalignmacro = \chappager
+}
+
+% for @setchapternewpage off
+\def\HEADINGSsinglechapoff{%
+\pageone
+\global\evenfootline={\hfil}
+\global\oddfootline={\hfil}
+\global\evenheadline={\line{\thischapter\hfil\folio}}
+\global\oddheadline={\line{\thischapter\hfil\folio}}
+\global\evenchapheadline=\evenheadline
+\global\oddchapheadline=\oddheadline
+\global\let\contentsalignmacro = \chappager
+}
+
+% Subroutines used in generating headings
+% This produces Day Month Year style of output.
+% Only define if not already defined, in case a txi-??.tex file has set
+% up a different format (e.g., txi-cs.tex does this).
+\ifx\today\thisisundefined
+\def\today{%
+ \number\day\space
+ \ifcase\month
+ \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr
+ \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug
+ \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec
+ \fi
+ \space\number\year}
+\fi
+
+% @settitle line... specifies the title of the document, for headings.
+% It generates no output of its own.
+\def\thistitle{\putwordNoTitle}
+\def\settitle{\parsearg{\gdef\thistitle}}
+
+
+\message{tables,}
+% Tables -- @table, @ftable, @vtable, @item(x).
+
+% default indentation of table text
+\newdimen\tableindent \tableindent=.8in
+% default indentation of @itemize and @enumerate text
+\newdimen\itemindent \itemindent=.3in
+% margin between end of table item and start of table text.
+\newdimen\itemmargin \itemmargin=.1in
+
+% used internally for \itemindent minus \itemmargin
+\newdimen\itemmax
+
+% Note @table, @ftable, and @vtable define @item, @itemx, etc., with
+% these defs.
+% They also define \itemindex
+% to index the item name in whatever manner is desired (perhaps none).
+
+\newif\ifitemxneedsnegativevskip
+
+\def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi}
+
+\def\internalBitem{\smallbreak \parsearg\itemzzz}
+\def\internalBitemx{\itemxpar \parsearg\itemzzz}
+
+\def\itemzzz #1{\begingroup %
+ \advance\hsize by -\rightskip
+ \advance\hsize by -\tableindent
+ \setbox0=\hbox{\itemindicate{#1}}%
+ \itemindex{#1}%
+ \nobreak % This prevents a break before @itemx.
+ %
+ % If the item text does not fit in the space we have, put it on a line
+ % by itself, and do not allow a page break either before or after that
+ % line. We do not start a paragraph here because then if the next
+ % command is, e.g., @kindex, the whatsit would get put into the
+ % horizontal list on a line by itself, resulting in extra blank space.
+ \ifdim \wd0>\itemmax
+ %
+ % Make this a paragraph so we get the \parskip glue and wrapping,
+ % but leave it ragged-right.
+ \begingroup
+ \advance\leftskip by-\tableindent
+ \advance\hsize by\tableindent
+ \advance\rightskip by0pt plus1fil\relax
+ \leavevmode\unhbox0\par
+ \endgroup
+ %
+ % We're going to be starting a paragraph, but we don't want the
+ % \parskip glue -- logically it's part of the @item we just started.
+ \nobreak \vskip-\parskip
+ %
+ % Stop a page break at the \parskip glue coming up. However, if
+ % what follows is an environment such as @example, there will be no
+ % \parskip glue; then the negative vskip we just inserted would
+ % cause the example and the item to crash together. So we use this
+ % bizarre value of 10001 as a signal to \aboveenvbreak to insert
+ % \parskip glue after all. Section titles are handled this way also.
+ %
+ \penalty 10001
+ \endgroup
+ \itemxneedsnegativevskipfalse
+ \else
+ % The item text fits into the space. Start a paragraph, so that the
+ % following text (if any) will end up on the same line.
+ \noindent
+ % Do this with kerns and \unhbox so that if there is a footnote in
+ % the item text, it can migrate to the main vertical list and
+ % eventually be printed.
+ \nobreak\kern-\tableindent
+ \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0
+ \unhbox0
+ \nobreak\kern\dimen0
+ \endgroup
+ \itemxneedsnegativevskiptrue
+ \fi
+}
+
+\def\item{\errmessage{@item while not in a list environment}}
+\def\itemx{\errmessage{@itemx while not in a list environment}}
+
+% @table, @ftable, @vtable.
+\envdef\table{%
+ \let\itemindex\gobble
+ \tablecheck{table}%
+}
+\envdef\ftable{%
+ \def\itemindex ##1{\doind {fn}{\code{##1}}}%
+ \tablecheck{ftable}%
+}
+\envdef\vtable{%
+ \def\itemindex ##1{\doind {vr}{\code{##1}}}%
+ \tablecheck{vtable}%
+}
+\def\tablecheck#1{%
+ \ifnum \the\catcode`\^^M=\active
+ \endgroup
+ \errmessage{This command won't work in this context; perhaps the problem is
+ that we are \inenvironment\thisenv}%
+ \def\next{\doignore{#1}}%
+ \else
+ \let\next\tablex
+ \fi
+ \next
+}
+\def\tablex#1{%
+ \def\itemindicate{#1}%
+ \parsearg\tabley
+}
+\def\tabley#1{%
+ {%
+ \makevalueexpandable
+ \edef\temp{\noexpand\tablez #1\space\space\space}%
+ \expandafter
+ }\temp \endtablez
+}
+\def\tablez #1 #2 #3 #4\endtablez{%
+ \aboveenvbreak
+ \ifnum 0#1>0 \advance \leftskip by #1\mil \fi
+ \ifnum 0#2>0 \tableindent=#2\mil \fi
+ \ifnum 0#3>0 \advance \rightskip by #3\mil \fi
+ \itemmax=\tableindent
+ \advance \itemmax by -\itemmargin
+ \advance \leftskip by \tableindent
+ \exdentamount=\tableindent
+ \parindent = 0pt
+ \parskip = \smallskipamount
+ \ifdim \parskip=0pt \parskip=2pt \fi
+ \let\item = \internalBitem
+ \let\itemx = \internalBitemx
+}
+\def\Etable{\endgraf\afterenvbreak}
+\let\Eftable\Etable
+\let\Evtable\Etable
+\let\Eitemize\Etable
+\let\Eenumerate\Etable
+
+% This is the counter used by @enumerate, which is really @itemize
+
+\newcount \itemno
+
+\envdef\itemize{\parsearg\doitemize}
+
+\def\doitemize#1{%
+ \aboveenvbreak
+ \itemmax=\itemindent
+ \advance\itemmax by -\itemmargin
+ \advance\leftskip by \itemindent
+ \exdentamount=\itemindent
+ \parindent=0pt
+ \parskip=\smallskipamount
+ \ifdim\parskip=0pt \parskip=2pt \fi
+ %
+ % Try typesetting the item mark so that if the document erroneously says
+ % something like @itemize @samp (intending @table), there's an error
+ % right away at the @itemize. It's not the best error message in the
+ % world, but it's better than leaving it to the @item. This means if
+ % the user wants an empty mark, they have to say @w{} not just @w.
+ \def\itemcontents{#1}%
+ \setbox0 = \hbox{\itemcontents}%
+ %
+ % @itemize with no arg is equivalent to @itemize @bullet.
+ \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi
+ %
+ \let\item=\itemizeitem
+}
+
+% Definition of @item while inside @itemize and @enumerate.
+%
+\def\itemizeitem{%
+ \advance\itemno by 1 % for enumerations
+ {\let\par=\endgraf \smallbreak}% reasonable place to break
+ {%
+ % If the document has an @itemize directly after a section title, a
+ % \nobreak will be last on the list, and \sectionheading will have
+ % done a \vskip-\parskip. In that case, we don't want to zero
+ % parskip, or the item text will crash with the heading. On the
+ % other hand, when there is normal text preceding the item (as there
+ % usually is), we do want to zero parskip, or there would be too much
+ % space. In that case, we won't have a \nobreak before. At least
+ % that's the theory.
+ \ifnum\lastpenalty<10000 \parskip=0in \fi
+ \noindent
+ \hbox to 0pt{\hss \itemcontents \kern\itemmargin}%
+ %
+ \ifinner\else
+ \vadjust{\penalty 1200}% not good to break after first line of item.
+ \fi
+ % We can be in inner vertical mode in a footnote, although an
+ % @itemize looks awful there.
+ }%
+ \flushcr
+}
+
+% \splitoff TOKENS\endmark defines \first to be the first token in
+% TOKENS, and \rest to be the remainder.
+%
+\def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}%
+
+% Allow an optional argument of an uppercase letter, lowercase letter,
+% or number, to specify the first label in the enumerated list. No
+% argument is the same as `1'.
+%
+\envparseargdef\enumerate{\enumeratey #1 \endenumeratey}
+\def\enumeratey #1 #2\endenumeratey{%
+ % If we were given no argument, pretend we were given `1'.
+ \def\thearg{#1}%
+ \ifx\thearg\empty \def\thearg{1}\fi
+ %
+ % Detect if the argument is a single token. If so, it might be a
+ % letter. Otherwise, the only valid thing it can be is a number.
+ % (We will always have one token, because of the test we just made.
+ % This is a good thing, since \splitoff doesn't work given nothing at
+ % all -- the first parameter is undelimited.)
+ \expandafter\splitoff\thearg\endmark
+ \ifx\rest\empty
+ % Only one token in the argument. It could still be anything.
+ % A ``lowercase letter'' is one whose \lccode is nonzero.
+ % An ``uppercase letter'' is one whose \lccode is both nonzero, and
+ % not equal to itself.
+ % Otherwise, we assume it's a number.
+ %
+ % We need the \relax at the end of the \ifnum lines to stop TeX from
+ % continuing to look for a <number>.
+ %
+ \ifnum\lccode\expandafter`\thearg=0\relax
+ \numericenumerate % a number (we hope)
+ \else
+ % It's a letter.
+ \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax
+ \lowercaseenumerate % lowercase letter
+ \else
+ \uppercaseenumerate % uppercase letter
+ \fi
+ \fi
+ \else
+ % Multiple tokens in the argument. We hope it's a number.
+ \numericenumerate
+ \fi
+}
+
+% An @enumerate whose labels are integers. The starting integer is
+% given in \thearg.
+%
+\def\numericenumerate{%
+ \itemno = \thearg
+ \startenumeration{\the\itemno}%
+}
+
+% The starting (lowercase) letter is in \thearg.
+\def\lowercaseenumerate{%
+ \itemno = \expandafter`\thearg
+ \startenumeration{%
+ % Be sure we're not beyond the end of the alphabet.
+ \ifnum\itemno=0
+ \errmessage{No more lowercase letters in @enumerate; get a bigger
+ alphabet}%
+ \fi
+ \char\lccode\itemno
+ }%
+}
+
+% The starting (uppercase) letter is in \thearg.
+\def\uppercaseenumerate{%
+ \itemno = \expandafter`\thearg
+ \startenumeration{%
+ % Be sure we're not beyond the end of the alphabet.
+ \ifnum\itemno=0
+ \errmessage{No more uppercase letters in @enumerate; get a bigger
+ alphabet}
+ \fi
+ \char\uccode\itemno
+ }%
+}
+
+% Call \doitemize, adding a period to the first argument and supplying the
+% common last two arguments. Also subtract one from the initial value in
+% \itemno, since @item increments \itemno.
+%
+\def\startenumeration#1{%
+ \advance\itemno by -1
+ \doitemize{#1.}\flushcr
+}
+
+% @alphaenumerate and @capsenumerate are abbreviations for giving an arg
+% to @enumerate.
+%
+\def\alphaenumerate{\enumerate{a}}
+\def\capsenumerate{\enumerate{A}}
+\def\Ealphaenumerate{\Eenumerate}
+\def\Ecapsenumerate{\Eenumerate}
+
+
+% @multitable macros
+% Amy Hendrickson, 8/18/94, 3/6/96
+%
+% @multitable ... @end multitable will make as many columns as desired.
+% Contents of each column will wrap at width given in preamble. Width
+% can be specified either with sample text given in a template line,
+% or in percent of \hsize, the current width of text on page.
+
+% Table can continue over pages but will only break between lines.
+
+% To make preamble:
+%
+% Either define widths of columns in terms of percent of \hsize:
+% @multitable @columnfractions .25 .3 .45
+% @item ...
+%
+% Numbers following @columnfractions are the percent of the total
+% current hsize to be used for each column. You may use as many
+% columns as desired.
+
+
+% Or use a template:
+% @multitable {Column 1 template} {Column 2 template} {Column 3 template}
+% @item ...
+% using the widest term desired in each column.
+
+% Each new table line starts with @item, each subsequent new column
+% starts with @tab. Empty columns may be produced by supplying @tab's
+% with nothing between them for as many times as empty columns are needed,
+% ie, @tab@tab@tab will produce two empty columns.
+
+% @item, @tab do not need to be on their own lines, but it will not hurt
+% if they are.
+
+% Sample multitable:
+
+% @multitable {Column 1 template} {Column 2 template} {Column 3 template}
+% @item first col stuff @tab second col stuff @tab third col
+% @item
+% first col stuff
+% @tab
+% second col stuff
+% @tab
+% third col
+% @item first col stuff @tab second col stuff
+% @tab Many paragraphs of text may be used in any column.
+%
+% They will wrap at the width determined by the template.
+% @item@tab@tab This will be in third column.
+% @end multitable
+
+% Default dimensions may be reset by user.
+% @multitableparskip is vertical space between paragraphs in table.
+% @multitableparindent is paragraph indent in table.
+% @multitablecolmargin is horizontal space to be left between columns.
+% @multitablelinespace is space to leave between table items, baseline
+% to baseline.
+% 0pt means it depends on current normal line spacing.
+%
+\newskip\multitableparskip
+\newskip\multitableparindent
+\newdimen\multitablecolspace
+\newskip\multitablelinespace
+\multitableparskip=0pt
+\multitableparindent=6pt
+\multitablecolspace=12pt
+\multitablelinespace=0pt
+
+% Macros used to set up halign preamble:
+%
+\let\endsetuptable\relax
+\def\xendsetuptable{\endsetuptable}
+\let\columnfractions\relax
+\def\xcolumnfractions{\columnfractions}
+\newif\ifsetpercent
+
+% #1 is the @columnfraction, usually a decimal number like .5, but might
+% be just 1. We just use it, whatever it is.
+%
+\def\pickupwholefraction#1 {%
+ \global\advance\colcount by 1
+ \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}%
+ \setuptable
+}
+
+\newcount\colcount
+\def\setuptable#1{%
+ \def\firstarg{#1}%
+ \ifx\firstarg\xendsetuptable
+ \let\go = \relax
+ \else
+ \ifx\firstarg\xcolumnfractions
+ \global\setpercenttrue
+ \else
+ \ifsetpercent
+ \let\go\pickupwholefraction
+ \else
+ \global\advance\colcount by 1
+ \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a
+ % separator; typically that is always in the input, anyway.
+ \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}%
+ \fi
+ \fi
+ \ifx\go\pickupwholefraction
+ % Put the argument back for the \pickupwholefraction call, so
+ % we'll always have a period there to be parsed.
+ \def\go{\pickupwholefraction#1}%
+ \else
+ \let\go = \setuptable
+ \fi%
+ \fi
+ \go
+}
+
+% multitable-only commands.
+%
+% @headitem starts a heading row, which we typeset in bold. Assignments
+% have to be global since we are inside the implicit group of an
+% alignment entry. \everycr below resets \everytab so we don't have to
+% undo it ourselves.
+\def\headitemfont{\b}% for people to use in the template row; not changeable
+\def\headitem{%
+ \checkenv\multitable
+ \crcr
+ \gdef\headitemcrhook{\nobreak}% attempt to avoid page break after headings
+ \global\everytab={\bf}% can't use \headitemfont since the parsing differs
+ \the\everytab % for the first item
+}%
+%
+% default for tables with no headings.
+\let\headitemcrhook=\relax
+%
+% A \tab used to include \hskip1sp. But then the space in a template
+% line is not enough. That is bad. So let's go back to just `&' until
+% we again encounter the problem the 1sp was intended to solve.
+% --karl, nathan@acm.org, 20apr99.
+\def\tab{\checkenv\multitable &\the\everytab}%
+
+% @multitable ... @end multitable definitions:
+%
+\newtoks\everytab % insert after every tab.
+%
+\envdef\multitable{%
+ \vskip\parskip
+ \startsavinginserts
+ %
+ % @item within a multitable starts a normal row.
+ % We use \def instead of \let so that if one of the multitable entries
+ % contains an @itemize, we don't choke on the \item (seen as \crcr aka
+ % \endtemplate) expanding \doitemize.
+ \def\item{\crcr}%
+ %
+ \tolerance=9500
+ \hbadness=9500
+ \setmultitablespacing
+ \parskip=\multitableparskip
+ \parindent=\multitableparindent
+ \overfullrule=0pt
+ \global\colcount=0
+ %
+ \everycr = {%
+ \noalign{%
+ \global\everytab={}% Reset from possible headitem.
+ \global\colcount=0 % Reset the column counter.
+ %
+ % Check for saved footnotes, etc.:
+ \checkinserts
+ %
+ % Perhaps a \nobreak, then reset:
+ \headitemcrhook
+ \global\let\headitemcrhook=\relax
+ }%
+ }%
+ %
+ \parsearg\domultitable
+}
+\def\domultitable#1{%
+ % To parse everything between @multitable and @item:
+ \setuptable#1 \endsetuptable
+ %
+ % This preamble sets up a generic column definition, which will
+ % be used as many times as user calls for columns.
+ % \vtop will set a single line and will also let text wrap and
+ % continue for many paragraphs if desired.
+ \halign\bgroup &%
+ \global\advance\colcount by 1
+ \multistrut
+ \vtop{%
+ % Use the current \colcount to find the correct column width:
+ \hsize=\expandafter\csname col\the\colcount\endcsname
+ %
+ % In order to keep entries from bumping into each other
+ % we will add a \leftskip of \multitablecolspace to all columns after
+ % the first one.
+ %
+ % If a template has been used, we will add \multitablecolspace
+ % to the width of each template entry.
+ %
+ % If the user has set preamble in terms of percent of \hsize we will
+ % use that dimension as the width of the column, and the \leftskip
+ % will keep entries from bumping into each other. Table will start at
+ % left margin and final column will justify at right margin.
+ %
+ % Make sure we don't inherit \rightskip from the outer environment.
+ \rightskip=0pt
+ \ifnum\colcount=1
+ % The first column will be indented with the surrounding text.
+ \advance\hsize by\leftskip
+ \else
+ \ifsetpercent \else
+ % If user has not set preamble in terms of percent of \hsize
+ % we will advance \hsize by \multitablecolspace.
+ \advance\hsize by \multitablecolspace
+ \fi
+ % In either case we will make \leftskip=\multitablecolspace:
+ \leftskip=\multitablecolspace
+ \fi
+ % Ignoring space at the beginning and end avoids an occasional spurious
+ % blank line, when TeX decides to break the line at the space before the
+ % box from the multistrut, so the strut ends up on a line by itself.
+ % For example:
+ % @multitable @columnfractions .11 .89
+ % @item @code{#}
+ % @tab Legal holiday which is valid in major parts of the whole country.
+ % Is automatically provided with highlighting sequences respectively
+ % marking characters.
+ \noindent\ignorespaces##\unskip\multistrut
+ }\cr
+}
+\def\Emultitable{%
+ \crcr
+ \egroup % end the \halign
+ \global\setpercentfalse
+}
+
+\def\setmultitablespacing{%
+ \def\multistrut{\strut}% just use the standard line spacing
+ %
+ % Compute \multitablelinespace (if not defined by user) for use in
+ % \multitableparskip calculation. We used define \multistrut based on
+ % this, but (ironically) that caused the spacing to be off.
+ % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100.
+\ifdim\multitablelinespace=0pt
+\setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip
+\global\advance\multitablelinespace by-\ht0
+\fi
+% Test to see if parskip is larger than space between lines of
+% table. If not, do nothing.
+% If so, set to same dimension as multitablelinespace.
+\ifdim\multitableparskip>\multitablelinespace
+\global\multitableparskip=\multitablelinespace
+\global\advance\multitableparskip-7pt % to keep parskip somewhat smaller
+ % than skip between lines in the table.
+\fi%
+\ifdim\multitableparskip=0pt
+\global\multitableparskip=\multitablelinespace
+\global\advance\multitableparskip-7pt % to keep parskip somewhat smaller
+ % than skip between lines in the table.
+\fi}
+
+
+\message{conditionals,}
+
+% @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext,
+% @ifnotxml always succeed. They currently do nothing; we don't
+% attempt to check whether the conditionals are properly nested. But we
+% have to remember that they are conditionals, so that @end doesn't
+% attempt to close an environment group.
+%
+\def\makecond#1{%
+ \expandafter\let\csname #1\endcsname = \relax
+ \expandafter\let\csname iscond.#1\endcsname = 1
+}
+\makecond{iftex}
+\makecond{ifnotdocbook}
+\makecond{ifnothtml}
+\makecond{ifnotinfo}
+\makecond{ifnotplaintext}
+\makecond{ifnotxml}
+
+% Ignore @ignore, @ifhtml, @ifinfo, and the like.
+%
+\def\direntry{\doignore{direntry}}
+\def\documentdescription{\doignore{documentdescription}}
+\def\docbook{\doignore{docbook}}
+\def\html{\doignore{html}}
+\def\ifdocbook{\doignore{ifdocbook}}
+\def\ifhtml{\doignore{ifhtml}}
+\def\ifinfo{\doignore{ifinfo}}
+\def\ifnottex{\doignore{ifnottex}}
+\def\ifplaintext{\doignore{ifplaintext}}
+\def\ifxml{\doignore{ifxml}}
+\def\ignore{\doignore{ignore}}
+\def\menu{\doignore{menu}}
+\def\xml{\doignore{xml}}
+
+% Ignore text until a line `@end #1', keeping track of nested conditionals.
+%
+% A count to remember the depth of nesting.
+\newcount\doignorecount
+
+\def\doignore#1{\begingroup
+ % Scan in ``verbatim'' mode:
+ \obeylines
+ \catcode`\@ = \other
+ \catcode`\{ = \other
+ \catcode`\} = \other
+ %
+ % Make sure that spaces turn into tokens that match what \doignoretext wants.
+ \spaceisspace
+ %
+ % Count number of #1's that we've seen.
+ \doignorecount = 0
+ %
+ % Swallow text until we reach the matching `@end #1'.
+ \dodoignore{#1}%
+}
+
+{ \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source.
+ \obeylines %
+ %
+ \gdef\dodoignore#1{%
+ % #1 contains the command name as a string, e.g., `ifinfo'.
+ %
+ % Define a command to find the next `@end #1'.
+ \long\def\doignoretext##1^^M@end #1{%
+ \doignoretextyyy##1^^M@#1\_STOP_}%
+ %
+ % And this command to find another #1 command, at the beginning of a
+ % line. (Otherwise, we would consider a line `@c @ifset', for
+ % example, to count as an @ifset for nesting.)
+ \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}%
+ %
+ % And now expand that command.
+ \doignoretext ^^M%
+ }%
+}
+
+\def\doignoreyyy#1{%
+ \def\temp{#1}%
+ \ifx\temp\empty % Nothing found.
+ \let\next\doignoretextzzz
+ \else % Found a nested condition, ...
+ \advance\doignorecount by 1
+ \let\next\doignoretextyyy % ..., look for another.
+ % If we're here, #1 ends with ^^M\ifinfo (for example).
+ \fi
+ \next #1% the token \_STOP_ is present just after this macro.
+}
+
+% We have to swallow the remaining "\_STOP_".
+%
+\def\doignoretextzzz#1{%
+ \ifnum\doignorecount = 0 % We have just found the outermost @end.
+ \let\next\enddoignore
+ \else % Still inside a nested condition.
+ \advance\doignorecount by -1
+ \let\next\doignoretext % Look for the next @end.
+ \fi
+ \next
+}
+
+% Finish off ignored text.
+{ \obeylines%
+ % Ignore anything after the last `@end #1'; this matters in verbatim
+ % environments, where otherwise the newline after an ignored conditional
+ % would result in a blank line in the output.
+ \gdef\enddoignore#1^^M{\endgroup\ignorespaces}%
+}
+
+
+% @set VAR sets the variable VAR to an empty value.
+% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE.
+%
+% Since we want to separate VAR from REST-OF-LINE (which might be
+% empty), we can't just use \parsearg; we have to insert a space of our
+% own to delimit the rest of the line, and then take it out again if we
+% didn't need it.
+% We rely on the fact that \parsearg sets \catcode`\ =10.
+%
+\parseargdef\set{\setyyy#1 \endsetyyy}
+\def\setyyy#1 #2\endsetyyy{%
+ {%
+ \makevalueexpandable
+ \def\temp{#2}%
+ \edef\next{\gdef\makecsname{SET#1}}%
+ \ifx\temp\empty
+ \next{}%
+ \else
+ \setzzz#2\endsetzzz
+ \fi
+ }%
+}
+% Remove the trailing space \setxxx inserted.
+\def\setzzz#1 \endsetzzz{\next{#1}}
+
+% @clear VAR clears (i.e., unsets) the variable VAR.
+%
+\parseargdef\clear{%
+ {%
+ \makevalueexpandable
+ \global\expandafter\let\csname SET#1\endcsname=\relax
+ }%
+}
+
+% @value{foo} gets the text saved in variable foo.
+\def\value{\begingroup\makevalueexpandable\valuexxx}
+\def\valuexxx#1{\expandablevalue{#1}\endgroup}
+{
+ \catcode`\-=\active \catcode`\_=\active
+ %
+ \gdef\makevalueexpandable{%
+ \let\value = \expandablevalue
+ % We don't want these characters active, ...
+ \catcode`\-=\other \catcode`\_=\other
+ % ..., but we might end up with active ones in the argument if
+ % we're called from @code, as @code{@value{foo-bar_}}, though.
+ % So \let them to their normal equivalents.
+ \let-\normaldash \let_\normalunderscore
+ }
+}
+
+\def\expandablevalue#1{%
+ \expandafter\ifx\csname SET#1\endcsname\relax
+ {[No value for ``#1'']}%
+ \message{Variable `#1', used in @value, is not set.}%
+ \else
+ \csname SET#1\endcsname
+ \fi
+}
+
+% Like \expandablevalue, but completely expandable (the \message in the
+% definition above operates at the execution level of TeX). Used when
+% writing to auxiliary files, due to the expansion that \write does.
+% If flag is undefined, pass through an unexpanded @value command: maybe it
+% will be set by the time it is read back in.
+%
+% NB flag names containing - or _ may not work here.
+\def\dummyvalue#1{%
+ \expandafter\ifx\csname SET#1\endcsname\relax
+ \string\value{#1}%
+ \else
+ \csname SET#1\endcsname
+ \fi
+}
+
+% Used for @value's in index entries to form the sort key: expand the @value
+% if possible, otherwise sort late.
+\def\indexnofontsvalue#1{%
+ \expandafter\ifx\csname SET#1\endcsname\relax
+ ZZZZZZZ%
+ \else
+ \csname SET#1\endcsname
+ \fi
+}
+
+% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined
+% with @set.
+%
+% To get the special treatment we need for `@end ifset,' we call
+% \makecond and then redefine.
+%
+\makecond{ifset}
+\def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}}
+\def\doifset#1#2{%
+ {%
+ \makevalueexpandable
+ \let\next=\empty
+ \expandafter\ifx\csname SET#2\endcsname\relax
+ #1% If not set, redefine \next.
+ \fi
+ \expandafter
+ }\next
+}
+\def\ifsetfail{\doignore{ifset}}
+
+% @ifclear VAR ... @end executes the `...' iff VAR has never been
+% defined with @set, or has been undefined with @clear.
+%
+% The `\else' inside the `\doifset' parameter is a trick to reuse the
+% above code: if the variable is not set, do nothing, if it is set,
+% then redefine \next to \ifclearfail.
+%
+\makecond{ifclear}
+\def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}}
+\def\ifclearfail{\doignore{ifclear}}
+
+% @ifcommandisdefined CMD ... @end executes the `...' if CMD (written
+% without the @) is in fact defined. We can only feasibly check at the
+% TeX level, so something like `mathcode' is going to considered
+% defined even though it is not a Texinfo command.
+%
+\makecond{ifcommanddefined}
+\def\ifcommanddefined{\parsearg{\doifcmddefined{\let\next=\ifcmddefinedfail}}}
+%
+\def\doifcmddefined#1#2{{%
+ \makevalueexpandable
+ \let\next=\empty
+ \expandafter\ifx\csname #2\endcsname\relax
+ #1% If not defined, \let\next as above.
+ \fi
+ \expandafter
+ }\next
+}
+\def\ifcmddefinedfail{\doignore{ifcommanddefined}}
+
+% @ifcommandnotdefined CMD ... handled similar to @ifclear above.
+\makecond{ifcommandnotdefined}
+\def\ifcommandnotdefined{%
+ \parsearg{\doifcmddefined{\else \let\next=\ifcmdnotdefinedfail}}}
+\def\ifcmdnotdefinedfail{\doignore{ifcommandnotdefined}}
+
+% Set the `txicommandconditionals' variable, so documents have a way to
+% test if the @ifcommand...defined conditionals are available.
+\set txicommandconditionals
+
+% @dircategory CATEGORY -- specify a category of the dir file
+% which this file should belong to. Ignore this in TeX.
+\let\dircategory=\comment
+
+% @defininfoenclose.
+\let\definfoenclose=\comment
+
+
+\message{indexing,}
+% Index generation facilities
+
+% Define \newwrite to be identical to plain tex's \newwrite
+% except not \outer, so it can be used within macros and \if's.
+\edef\newwrite{\makecsname{ptexnewwrite}}
+
+% \newindex {foo} defines an index named IX.
+% It automatically defines \IXindex such that
+% \IXindex ...rest of line... puts an entry in the index IX.
+% It also defines \IXindfile to be the number of the output channel for
+% the file that accumulates this index. The file's extension is IX.
+% The name of an index should be no more than 2 characters long
+% for the sake of vms.
+%
+\def\newindex#1{%
+ \expandafter\chardef\csname#1indfile\endcsname=0
+ \expandafter\xdef\csname#1index\endcsname{% % Define @#1index
+ \noexpand\doindex{#1}}
+}
+
+% @defindex foo == \newindex{foo}
+%
+\def\defindex{\parsearg\newindex}
+
+% Define @defcodeindex, like @defindex except put all entries in @code.
+%
+\def\defcodeindex{\parsearg\newcodeindex}
+%
+\def\newcodeindex#1{%
+ \expandafter\chardef\csname#1indfile\endcsname=0
+ \expandafter\xdef\csname#1index\endcsname{%
+ \noexpand\docodeindex{#1}}%
+}
+
+% The default indices:
+\newindex{cp}% concepts,
+\newcodeindex{fn}% functions,
+\newcodeindex{vr}% variables,
+\newcodeindex{tp}% types,
+\newcodeindex{ky}% keys
+\newcodeindex{pg}% and programs.
+
+
+% @synindex foo bar makes index foo feed into index bar.
+% Do this instead of @defindex foo if you don't want it as a separate index.
+%
+% @syncodeindex foo bar similar, but put all entries made for index foo
+% inside @code.
+%
+\def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}}
+\def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}}
+
+% #1 is \doindex or \docodeindex, #2 the index getting redefined (foo),
+% #3 the target index (bar).
+\def\dosynindex#1#2#3{%
+ \requireopenindexfile{#3}%
+ % redefine \fooindfile:
+ \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname
+ \expandafter\let\csname#2indfile\endcsname=\temp
+ % redefine \fooindex:
+ \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}%
+}
+
+% Define \doindex, the driver for all index macros.
+% Argument #1 is generated by the calling \fooindex macro,
+% and it is the two-letter name of the index.
+
+\def\doindex#1{\edef\indexname{#1}\parsearg\doindexxxx}
+\def\doindexxxx #1{\doind{\indexname}{#1}}
+
+% like the previous two, but they put @code around the argument.
+\def\docodeindex#1{\edef\indexname{#1}\parsearg\docodeindexxxx}
+\def\docodeindexxxx #1{\docind{\indexname}{#1}}
+
+
+% Used for the aux, toc and index files to prevent expansion of Texinfo
+% commands.
+%
+\def\atdummies{%
+ \definedummyletter\@%
+ \definedummyletter\ %
+ \definedummyletter\{%
+ \definedummyletter\}%
+ \definedummyletter\&%
+ %
+ % Do the redefinitions.
+ \definedummies
+ \otherbackslash
+}
+
+% \definedummyword defines \#1 as \string\#1\space, thus effectively
+% preventing its expansion. This is used only for control words,
+% not control letters, because the \space would be incorrect for
+% control characters, but is needed to separate the control word
+% from whatever follows.
+%
+% These can be used both for control words that take an argument and
+% those that do not. If it is followed by {arg} in the input, then
+% that will dutifully get written to the index (or wherever).
+%
+% For control letters, we have \definedummyletter, which omits the
+% space.
+%
+\def\definedummyword #1{\def#1{\string#1\space}}%
+\def\definedummyletter#1{\def#1{\string#1}}%
+\let\definedummyaccent\definedummyletter
+
+% Called from \atdummies to prevent the expansion of commands.
+%
+\def\definedummies{%
+ %
+ \let\commondummyword\definedummyword
+ \let\commondummyletter\definedummyletter
+ \let\commondummyaccent\definedummyaccent
+ \commondummiesnofonts
+ %
+ \definedummyletter\_%
+ \definedummyletter\-%
+ %
+ % Non-English letters.
+ \definedummyword\AA
+ \definedummyword\AE
+ \definedummyword\DH
+ \definedummyword\L
+ \definedummyword\O
+ \definedummyword\OE
+ \definedummyword\TH
+ \definedummyword\aa
+ \definedummyword\ae
+ \definedummyword\dh
+ \definedummyword\exclamdown
+ \definedummyword\l
+ \definedummyword\o
+ \definedummyword\oe
+ \definedummyword\ordf
+ \definedummyword\ordm
+ \definedummyword\questiondown
+ \definedummyword\ss
+ \definedummyword\th
+ %
+ % Although these internal commands shouldn't show up, sometimes they do.
+ \definedummyword\bf
+ \definedummyword\gtr
+ \definedummyword\hat
+ \definedummyword\less
+ \definedummyword\sf
+ \definedummyword\sl
+ \definedummyword\tclose
+ \definedummyword\tt
+ %
+ \definedummyword\LaTeX
+ \definedummyword\TeX
+ %
+ % Assorted special characters.
+ \definedummyword\ampchar
+ \definedummyword\atchar
+ \definedummyword\arrow
+ \definedummyword\backslashchar
+ \definedummyword\bullet
+ \definedummyword\comma
+ \definedummyword\copyright
+ \definedummyword\registeredsymbol
+ \definedummyword\dots
+ \definedummyword\enddots
+ \definedummyword\entrybreak
+ \definedummyword\equiv
+ \definedummyword\error
+ \definedummyword\euro
+ \definedummyword\expansion
+ \definedummyword\geq
+ \definedummyword\guillemetleft
+ \definedummyword\guillemetright
+ \definedummyword\guilsinglleft
+ \definedummyword\guilsinglright
+ \definedummyword\lbracechar
+ \definedummyword\leq
+ \definedummyword\mathopsup
+ \definedummyword\minus
+ \definedummyword\ogonek
+ \definedummyword\pounds
+ \definedummyword\point
+ \definedummyword\print
+ \definedummyword\quotedblbase
+ \definedummyword\quotedblleft
+ \definedummyword\quotedblright
+ \definedummyword\quoteleft
+ \definedummyword\quoteright
+ \definedummyword\quotesinglbase
+ \definedummyword\rbracechar
+ \definedummyword\result
+ \definedummyword\sub
+ \definedummyword\sup
+ \definedummyword\textdegree
+ %
+ \definedummyword\subentry
+ %
+ % We want to disable all macros so that they are not expanded by \write.
+ \macrolist
+ \let\value\dummyvalue
+ %
+ \normalturnoffactive
+}
+
+% \commondummiesnofonts: common to \definedummies and \indexnofonts.
+% Define \commondummyletter, \commondummyaccent and \commondummyword before
+% using. Used for accents, font commands, and various control letters.
+%
+\def\commondummiesnofonts{%
+ % Control letters and accents.
+ \commondummyletter\!%
+ \commondummyaccent\"%
+ \commondummyaccent\'%
+ \commondummyletter\*%
+ \commondummyaccent\,%
+ \commondummyletter\.%
+ \commondummyletter\/%
+ \commondummyletter\:%
+ \commondummyaccent\=%
+ \commondummyletter\?%
+ \commondummyaccent\^%
+ \commondummyaccent\`%
+ \commondummyaccent\~%
+ \commondummyword\u
+ \commondummyword\v
+ \commondummyword\H
+ \commondummyword\dotaccent
+ \commondummyword\ogonek
+ \commondummyword\ringaccent
+ \commondummyword\tieaccent
+ \commondummyword\ubaraccent
+ \commondummyword\udotaccent
+ \commondummyword\dotless
+ %
+ % Texinfo font commands.
+ \commondummyword\b
+ \commondummyword\i
+ \commondummyword\r
+ \commondummyword\sansserif
+ \commondummyword\sc
+ \commondummyword\slanted
+ \commondummyword\t
+ %
+ % Commands that take arguments.
+ \commondummyword\abbr
+ \commondummyword\acronym
+ \commondummyword\anchor
+ \commondummyword\cite
+ \commondummyword\code
+ \commondummyword\command
+ \commondummyword\dfn
+ \commondummyword\dmn
+ \commondummyword\email
+ \commondummyword\emph
+ \commondummyword\env
+ \commondummyword\file
+ \commondummyword\image
+ \commondummyword\indicateurl
+ \commondummyword\inforef
+ \commondummyword\kbd
+ \commondummyword\key
+ \commondummyword\math
+ \commondummyword\option
+ \commondummyword\pxref
+ \commondummyword\ref
+ \commondummyword\samp
+ \commondummyword\strong
+ \commondummyword\tie
+ \commondummyword\U
+ \commondummyword\uref
+ \commondummyword\url
+ \commondummyword\var
+ \commondummyword\verb
+ \commondummyword\w
+ \commondummyword\xref
+}
+
+\let\indexlbrace\relax
+\let\indexrbrace\relax
+\let\indexatchar\relax
+\let\indexbackslash\relax
+
+{\catcode`\@=0
+\catcode`\\=13
+ @gdef@backslashdisappear{@def\{}}
+}
+
+{
+\catcode`\<=13
+\catcode`\-=13
+\catcode`\`=13
+ \gdef\indexnonalnumdisappear{%
+ \expandafter\ifx\csname SETtxiindexlquoteignore\endcsname\relax\else
+ % @set txiindexlquoteignore makes us ignore left quotes in the sort term.
+ % (Introduced for FSFS 2nd ed.)
+ \let`=\empty
+ \fi
+ %
+ \expandafter\ifx\csname SETtxiindexbackslashignore\endcsname\relax\else
+ \backslashdisappear
+ \fi
+ %
+ \expandafter\ifx\csname SETtxiindexhyphenignore\endcsname\relax\else
+ \def-{}%
+ \fi
+ \expandafter\ifx\csname SETtxiindexlessthanignore\endcsname\relax\else
+ \def<{}%
+ \fi
+ \expandafter\ifx\csname SETtxiindexatsignignore\endcsname\relax\else
+ \def\@{}%
+ \fi
+ }
+
+ \gdef\indexnonalnumreappear{%
+ \let-\normaldash
+ \let<\normalless
+ }
+}
+
+
+% \indexnofonts is used when outputting the strings to sort the index
+% by, and when constructing control sequence names. It eliminates all
+% control sequences and just writes whatever the best ASCII sort string
+% would be for a given command (usually its argument).
+%
+\def\indexnofonts{%
+ % Accent commands should become @asis.
+ \def\commondummyaccent##1{\let##1\asis}%
+ % We can just ignore other control letters.
+ \def\commondummyletter##1{\let##1\empty}%
+ % All control words become @asis by default; overrides below.
+ \let\commondummyword\commondummyaccent
+ \commondummiesnofonts
+ %
+ % Don't no-op \tt, since it isn't a user-level command
+ % and is used in the definitions of the active chars like <, >, |, etc.
+ % Likewise with the other plain tex font commands.
+ %\let\tt=\asis
+ %
+ \def\ { }%
+ \def\@{@}%
+ \def\_{\normalunderscore}%
+ \def\-{}% @- shouldn't affect sorting
+ %
+ \uccode`\1=`\{ \uppercase{\def\{{1}}%
+ \uccode`\1=`\} \uppercase{\def\}{1}}%
+ \let\lbracechar\{%
+ \let\rbracechar\}%
+ %
+ %
+ \let\do\indexnofontsdef
+ %
+ % Non-English letters.
+ \do\AA{AA}%
+ \do\AE{AE}%
+ \do\DH{DZZ}%
+ \do\L{L}%
+ \do\OE{OE}%
+ \do\O{O}%
+ \do\TH{TH}%
+ \do\aa{aa}%
+ \do\ae{ae}%
+ \do\dh{dzz}%
+ \do\exclamdown{!}%
+ \do\l{l}%
+ \do\oe{oe}%
+ \do\ordf{a}%
+ \do\ordm{o}%
+ \do\o{o}%
+ \do\questiondown{?}%
+ \do\ss{ss}%
+ \do\th{th}%
+ %
+ \do\LaTeX{LaTeX}%
+ \do\TeX{TeX}%
+ %
+ % Assorted special characters.
+ \do\atchar{@}%
+ \do\arrow{->}%
+ \do\bullet{bullet}%
+ \do\comma{,}%
+ \do\copyright{copyright}%
+ \do\dots{...}%
+ \do\enddots{...}%
+ \do\equiv{==}%
+ \do\error{error}%
+ \do\euro{euro}%
+ \do\expansion{==>}%
+ \do\geq{>=}%
+ \do\guillemetleft{<<}%
+ \do\guillemetright{>>}%
+ \do\guilsinglleft{<}%
+ \do\guilsinglright{>}%
+ \do\leq{<=}%
+ \do\lbracechar{\{}%
+ \do\minus{-}%
+ \do\point{.}%
+ \do\pounds{pounds}%
+ \do\print{-|}%
+ \do\quotedblbase{"}%
+ \do\quotedblleft{"}%
+ \do\quotedblright{"}%
+ \do\quoteleft{`}%
+ \do\quoteright{'}%
+ \do\quotesinglbase{,}%
+ \do\rbracechar{\}}%
+ \do\registeredsymbol{R}%
+ \do\result{=>}%
+ \do\textdegree{o}%
+ %
+ % We need to get rid of all macros, leaving only the arguments (if present).
+ % Of course this is not nearly correct, but it is the best we can do for now.
+ % makeinfo does not expand macros in the argument to @deffn, which ends up
+ % writing an index entry, and texindex isn't prepared for an index sort entry
+ % that starts with \.
+ %
+ % Since macro invocations are followed by braces, we can just redefine them
+ % to take a single TeX argument. The case of a macro invocation that
+ % goes to end-of-line is not handled.
+ %
+ \macrolist
+ \let\value\indexnofontsvalue
+}
+
+% Give the control sequence a definition that removes the {} that follows
+% its use, e.g. @AA{} -> AA
+\def\indexnofontsdef#1#2{\def#1##1{#2}}%
+
+
+
+
+% #1 is the index name, #2 is the entry text.
+\def\doind#1#2{%
+ \iflinks
+ {%
+ %
+ \requireopenindexfile{#1}%
+ \edef\writeto{\csname#1indfile\endcsname}%
+ %
+ \def\indextext{#2}%
+ \safewhatsit\doindwrite
+ }%
+ \fi
+}
+
+% Same as \doind, but for code indices
+\def\docind#1#2{%
+ \iflinks
+ {%
+ %
+ \requireopenindexfile{#1}%
+ \edef\writeto{\csname#1indfile\endcsname}%
+ %
+ \def\indextext{#2}%
+ \safewhatsit\docindwrite
+ }%
+ \fi
+}
+
+% Check if an index file has been opened, and if not, open it.
+\def\requireopenindexfile#1{%
+\ifnum\csname #1indfile\endcsname=0
+ \expandafter\newwrite \csname#1indfile\endcsname
+ \edef\suffix{#1}%
+ % A .fls suffix would conflict with the file extension for the output
+ % of -recorder, so use .f1s instead.
+ \ifx\suffix\indexisfl\def\suffix{f1}\fi
+ % Open the file
+ \immediate\openout\csname#1indfile\endcsname \jobname.\suffix
+ % Using \immediate above here prevents an object entering into the current
+ % box, which could confound checks such as those in \safewhatsit for
+ % preceding skips.
+ \typeout{Writing index file \jobname.\suffix}%
+\fi}
+\def\indexisfl{fl}
+
+% Definition for writing index entry sort key.
+{
+\catcode`\-=13
+\gdef\indexwritesortas{%
+ \begingroup
+ \indexnonalnumreappear
+ \indexwritesortasxxx}
+\gdef\indexwritesortasxxx#1{%
+ \xdef\indexsortkey{#1}\endgroup}
+}
+
+\def\indexwriteseealso#1{
+ \gdef\pagenumbertext{\string\seealso{#1}}%
+}
+\def\indexwriteseeentry#1{
+ \gdef\pagenumbertext{\string\seeentry{#1}}%
+}
+
+% The default definitions
+\def\sortas#1{}%
+\def\seealso#1{\i{\putwordSeeAlso}\ #1}% for sorted index file only
+\def\putwordSeeAlso{See also}
+\def\seeentry#1{\i{\putwordSee}\ #1}% for sorted index file only
+
+
+% Given index entry text like "aaa @subentry bbb @sortas{ZZZ}":
+% * Set \bracedtext to "{aaa}{bbb}"
+% * Set \fullindexsortkey to "aaa @subentry ZZZ"
+% * If @seealso occurs, set \pagenumbertext
+%
+\def\splitindexentry#1{%
+ \gdef\fullindexsortkey{}%
+ \xdef\bracedtext{}%
+ \def\sep{}%
+ \def\seealso##1{}%
+ \def\seeentry##1{}%
+ \expandafter\doindexsegment#1\subentry\finish\subentry
+}
+
+% append the results from the next segment
+\def\doindexsegment#1\subentry{%
+ \def\segment{#1}%
+ \ifx\segment\isfinish
+ \else
+ %
+ % Fully expand the segment, throwing away any @sortas directives, and
+ % trim spaces.
+ \edef\trimmed{\segment}%
+ \edef\trimmed{\expandafter\eatspaces\expandafter{\trimmed}}%
+ \ifincodeindex
+ \edef\trimmed{\noexpand\code{\trimmed}}%
+ \fi
+ %
+ \xdef\bracedtext{\bracedtext{\trimmed}}%
+ %
+ % Get the string to sort by. Process the segment with all
+ % font commands turned off.
+ \bgroup
+ \let\sortas\indexwritesortas
+ \let\seealso\indexwriteseealso
+ \let\seeentry\indexwriteseeentry
+ \indexnofonts
+ % The braces around the commands are recognized by texindex.
+ \def\lbracechar{{\string\indexlbrace}}%
+ \def\rbracechar{{\string\indexrbrace}}%
+ \let\{=\lbracechar
+ \let\}=\rbracechar
+ \def\@{{\string\indexatchar}}%
+ \def\atchar##1{\@}%
+ \def\backslashchar{{\string\indexbackslash}}%
+ \uccode`\~=`\\ \uppercase{\let~\backslashchar}%
+ %
+ \let\indexsortkey\empty
+ \global\let\pagenumbertext\empty
+ % Execute the segment and throw away the typeset output. This executes
+ % any @sortas or @seealso commands in this segment.
+ \setbox\dummybox = \hbox{\segment}%
+ \ifx\indexsortkey\empty{%
+ \indexnonalnumdisappear
+ \xdef\trimmed{\segment}%
+ \xdef\trimmed{\expandafter\eatspaces\expandafter{\trimmed}}%
+ \xdef\indexsortkey{\trimmed}%
+ \ifx\indexsortkey\empty\xdef\indexsortkey{ }\fi
+ }\fi
+ %
+ % Append to \fullindexsortkey.
+ \edef\tmp{\gdef\noexpand\fullindexsortkey{%
+ \fullindexsortkey\sep\indexsortkey}}%
+ \tmp
+ \egroup
+ \def\sep{\subentry}%
+ %
+ \expandafter\doindexsegment
+ \fi
+}
+\def\isfinish{\finish}%
+\newbox\dummybox % used above
+
+\let\subentry\relax
+
+% Use \ instead of @ in index files. To support old texi2dvi and texindex.
+% This works without changing the escape character used in the toc or aux
+% files because the index entries are fully expanded here, and \string uses
+% the current value of \escapechar.
+\def\escapeisbackslash{\escapechar=`\\}
+
+% Use \ in index files by default. texi2dvi didn't support @ as the escape
+% character (as it checked for "\entry" in the files, and not "@entry"). When
+% the new version of texi2dvi has had a chance to become more prevalent, then
+% the escape character can change back to @ again. This should be an easy
+% change to make now because both @ and \ are only used as escape characters in
+% index files, never standing for themselves.
+%
+\set txiindexescapeisbackslash
+
+% Write the entry in \indextext to the index file.
+%
+
+\newif\ifincodeindex
+\def\doindwrite{\incodeindexfalse\doindwritex}
+\def\docindwrite{\incodeindextrue\doindwritex}
+
+\def\doindwritex{%
+ \maybemarginindex
+ %
+ \atdummies
+ %
+ \expandafter\ifx\csname SETtxiindexescapeisbackslash\endcsname\relax\else
+ \escapeisbackslash
+ \fi
+ %
+ % For texindex which always views { and } as separators.
+ \def\{{\lbracechar{}}%
+ \def\}{\rbracechar{}}%
+ \uccode`\~=`\\ \uppercase{\def~{\backslashchar{}}}%
+ %
+ % Split the entry into primary entry and any subentries, and get the index
+ % sort key.
+ \splitindexentry\indextext
+ %
+ % Set up the complete index entry, with both the sort key and
+ % the original text, including any font commands. We write
+ % three arguments to \entry to the .?? file (four in the
+ % subentry case), texindex reduces to two when writing the .??s
+ % sorted result.
+ %
+ \edef\temp{%
+ \write\writeto{%
+ \string\entry{\fullindexsortkey}%
+ {\ifx\pagenumbertext\empty\noexpand\folio\else\pagenumbertext\fi}%
+ \bracedtext}%
+ }%
+ \temp
+}
+
+% Put the index entry in the margin if desired (undocumented).
+\def\maybemarginindex{%
+ \ifx\SETmarginindex\relax\else
+ \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \relax\indextext}}%
+ \fi
+}
+\let\SETmarginindex=\relax
+
+
+% Take care of unwanted page breaks/skips around a whatsit:
+%
+% If a skip is the last thing on the list now, preserve it
+% by backing up by \lastskip, doing the \write, then inserting
+% the skip again. Otherwise, the whatsit generated by the
+% \write or \pdfdest will make \lastskip zero. The result is that
+% sequences like this:
+% @end defun
+% @tindex whatever
+% @defun ...
+% will have extra space inserted, because the \medbreak in the
+% start of the @defun won't see the skip inserted by the @end of
+% the previous defun.
+%
+% But don't do any of this if we're not in vertical mode. We
+% don't want to do a \vskip and prematurely end a paragraph.
+%
+% Avoid page breaks due to these extra skips, too.
+%
+% But wait, there is a catch there:
+% We'll have to check whether \lastskip is zero skip. \ifdim is not
+% sufficient for this purpose, as it ignores stretch and shrink parts
+% of the skip. The only way seems to be to check the textual
+% representation of the skip.
+%
+% The following is almost like \def\zeroskipmacro{0.0pt} except that
+% the ``p'' and ``t'' characters have catcode \other, not 11 (letter).
+%
+\edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname}
+%
+\newskip\whatsitskip
+\newcount\whatsitpenalty
+%
+% ..., ready, GO:
+%
+\def\safewhatsit#1{\ifhmode
+ #1%
+ \else
+ % \lastskip and \lastpenalty cannot both be nonzero simultaneously.
+ \whatsitskip = \lastskip
+ \edef\lastskipmacro{\the\lastskip}%
+ \whatsitpenalty = \lastpenalty
+ %
+ % If \lastskip is nonzero, that means the last item was a
+ % skip. And since a skip is discardable, that means this
+ % -\whatsitskip glue we're inserting is preceded by a
+ % non-discardable item, therefore it is not a potential
+ % breakpoint, therefore no \nobreak needed.
+ \ifx\lastskipmacro\zeroskipmacro
+ \else
+ \vskip-\whatsitskip
+ \fi
+ %
+ #1%
+ %
+ \ifx\lastskipmacro\zeroskipmacro
+ % If \lastskip was zero, perhaps the last item was a penalty, and
+ % perhaps it was >=10000, e.g., a \nobreak. In that case, we want
+ % to re-insert the same penalty (values >10000 are used for various
+ % signals); since we just inserted a non-discardable item, any
+ % following glue (such as a \parskip) would be a breakpoint. For example:
+ % @deffn deffn-whatever
+ % @vindex index-whatever
+ % Description.
+ % would allow a break between the index-whatever whatsit
+ % and the "Description." paragraph.
+ \ifnum\whatsitpenalty>9999 \penalty\whatsitpenalty \fi
+ \else
+ % On the other hand, if we had a nonzero \lastskip,
+ % this make-up glue would be preceded by a non-discardable item
+ % (the whatsit from the \write), so we must insert a \nobreak.
+ \nobreak\vskip\whatsitskip
+ \fi
+\fi}
+
+% The index entry written in the file actually looks like
+% \entry {sortstring}{page}{topic}
+% or
+% \entry {sortstring}{page}{topic}{subtopic}
+% The texindex program reads in these files and writes files
+% containing these kinds of lines:
+% \initial {c}
+% before the first topic whose initial is c
+% \entry {topic}{pagelist}
+% for a topic that is used without subtopics
+% \primary {topic}
+% \entry {topic}{}
+% for the beginning of a topic that is used with subtopics
+% \secondary {subtopic}{pagelist}
+% for each subtopic.
+% \secondary {subtopic}{}
+% for a subtopic with sub-subtopics
+% \tertiary {subtopic}{subsubtopic}{pagelist}
+% for each sub-subtopic.
+
+% Define the user-accessible indexing commands
+% @findex, @vindex, @kindex, @cindex.
+
+\def\findex {\fnindex}
+\def\kindex {\kyindex}
+\def\cindex {\cpindex}
+\def\vindex {\vrindex}
+\def\tindex {\tpindex}
+\def\pindex {\pgindex}
+
+% Define the macros used in formatting output of the sorted index material.
+
+% @printindex causes a particular index (the ??s file) to get printed.
+% It does not print any chapter heading (usually an @unnumbered).
+%
+\parseargdef\printindex{\begingroup
+ \dobreak \chapheadingskip{10000}%
+ %
+ \smallfonts \rm
+ \tolerance = 9500
+ \plainfrenchspacing
+ \everypar = {}% don't want the \kern\-parindent from indentation suppression.
+ %
+ % See comment in \requireopenindexfile.
+ \def\indexname{#1}\ifx\indexname\indexisfl\def\indexname{f1}\fi
+ %
+ % See if the index file exists and is nonempty.
+ \openin 1 \jobname.\indexname s
+ \ifeof 1
+ % \enddoublecolumns gets confused if there is no text in the index,
+ % and it loses the chapter title and the aux file entries for the
+ % index. The easiest way to prevent this problem is to make sure
+ % there is some text.
+ \putwordIndexNonexistent
+ \typeout{No file \jobname.\indexname s.}%
+ \else
+ % If the index file exists but is empty, then \openin leaves \ifeof
+ % false. We have to make TeX try to read something from the file, so
+ % it can discover if there is anything in it.
+ \read 1 to \thisline
+ \ifeof 1
+ \putwordIndexIsEmpty
+ \else
+ \expandafter\printindexzz\thisline\relax\relax\finish%
+ \fi
+ \fi
+ \closein 1
+\endgroup}
+
+% If the index file starts with a backslash, forgo reading the index
+% file altogether. If somebody upgrades texinfo.tex they may still have
+% old index files using \ as the escape character. Reading this would
+% at best lead to typesetting garbage, at worst a TeX syntax error.
+\def\printindexzz#1#2\finish{%
+ \expandafter\ifx\csname SETtxiindexescapeisbackslash\endcsname\relax
+ \uccode`\~=`\\ \uppercase{\if\noexpand~}\noexpand#1
+ \expandafter\ifx\csname SETtxiskipindexfileswithbackslash\endcsname\relax
+\errmessage{%
+ERROR: A sorted index file in an obsolete format was skipped.
+To fix this problem, please upgrade your version of 'texi2dvi'
+or 'texi2pdf' to that at <https://ftp.gnu.org/gnu/texinfo>.
+If you are using an old version of 'texindex' (part of the Texinfo
+distribution), you may also need to upgrade to a newer version (at least 6.0).
+You may be able to typeset the index if you run
+'texindex \jobname.\indexname' yourself.
+You could also try setting the 'txiindexescapeisbackslash' flag by
+running a command like
+'texi2dvi -t "@set txiindexescapeisbackslash" \jobname.texi'. If you do
+this, Texinfo will try to use index files in the old format.
+If you continue to have problems, deleting the index files and starting again
+might help (with 'rm \jobname.?? \jobname.??s')%
+}%
+ \else
+ (Skipped sorted index file in obsolete format)
+ \fi
+ \else
+ \begindoublecolumns
+ \input \jobname.\indexname s
+ \enddoublecolumns
+ \fi
+ \else
+ \begindoublecolumns
+ \catcode`\\=0\relax
+ %
+ % Make @ an escape character to give macros a chance to work. This
+ % should work because we (hopefully) don't otherwise use @ in index files.
+ %\catcode`\@=12\relax
+ \catcode`\@=0\relax
+ \input \jobname.\indexname s
+ \enddoublecolumns
+ \fi
+}
+
+% These macros are used by the sorted index file itself.
+% Change them to control the appearance of the index.
+
+{\catcode`\/=13 \catcode`\-=13 \catcode`\^=13 \catcode`\~=13 \catcode`\_=13
+\catcode`\|=13 \catcode`\<=13 \catcode`\>=13 \catcode`\+=13 \catcode`\"=13
+\catcode`\$=3
+\gdef\initialglyphs{%
+ % special control sequences used in the index sort key
+ \let\indexlbrace\{%
+ \let\indexrbrace\}%
+ \let\indexatchar\@%
+ \def\indexbackslash{\math{\backslash}}%
+ %
+ % Some changes for non-alphabetic characters. Using the glyphs from the
+ % math fonts looks more consistent than the typewriter font used elsewhere
+ % for these characters.
+ \uccode`\~=`\\ \uppercase{\def~{\math{\backslash}}}
+ %
+ % In case @\ is used for backslash
+ \uppercase{\let\\=~}
+ % Can't get bold backslash so don't use bold forward slash
+ \catcode`\/=13
+ \def/{{\secrmnotbold \normalslash}}%
+ \def-{{\normaldash\normaldash}}% en dash `--'
+ \def^{{\chapbf \normalcaret}}%
+ \def~{{\chapbf \normaltilde}}%
+ \def\_{%
+ \leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em }%
+ \def|{$\vert$}%
+ \def<{$\less$}%
+ \def>{$\gtr$}%
+ \def+{$\normalplus$}%
+}}
+
+\def\initial{%
+ \bgroup
+ \initialglyphs
+ \initialx
+}
+
+\def\initialx#1{%
+ % Remove any glue we may have, we'll be inserting our own.
+ \removelastskip
+ %
+ % We like breaks before the index initials, so insert a bonus.
+ % The glue before the bonus allows a little bit of space at the
+ % bottom of a column to reduce an increase in inter-line spacing.
+ \nobreak
+ \vskip 0pt plus 5\baselineskip
+ \penalty -300
+ \vskip 0pt plus -5\baselineskip
+ %
+ % Typeset the initial. Making this add up to a whole number of
+ % baselineskips increases the chance of the dots lining up from column
+ % to column. It still won't often be perfect, because of the stretch
+ % we need before each entry, but it's better.
+ %
+ % No shrink because it confuses \balancecolumns.
+ \vskip 1.67\baselineskip plus 1\baselineskip
+ \leftline{\secfonts \kern-0.05em \secbf #1}%
+ % \secfonts is inside the argument of \leftline so that the change of
+ % \baselineskip will not affect any glue inserted before the vbox that
+ % \leftline creates.
+ % Do our best not to break after the initial.
+ \nobreak
+ \vskip .33\baselineskip plus .1\baselineskip
+ \egroup % \initialglyphs
+}
+
+\newdimen\entryrightmargin
+\entryrightmargin=0pt
+
+% \entry typesets a paragraph consisting of the text (#1), dot leaders, and
+% then page number (#2) flushed to the right margin. It is used for index
+% and table of contents entries. The paragraph is indented by \leftskip.
+%
+\def\entry{%
+ \begingroup
+ %
+ % Start a new paragraph if necessary, so our assignments below can't
+ % affect previous text.
+ \par
+ %
+ % No extra space above this paragraph.
+ \parskip = 0in
+ %
+ % When reading the text of entry, convert explicit line breaks
+ % from @* into spaces. The user might give these in long section
+ % titles, for instance.
+ \def\*{\unskip\space\ignorespaces}%
+ \def\entrybreak{\hfil\break}% An undocumented command
+ %
+ % Swallow the left brace of the text (first parameter):
+ \afterassignment\doentry
+ \let\temp =
+}
+\def\entrybreak{\unskip\space\ignorespaces}%
+\def\doentry{%
+ % Save the text of the entry
+ \global\setbox\boxA=\hbox\bgroup
+ \bgroup % Instead of the swallowed brace.
+ \noindent
+ \aftergroup\finishentry
+ % And now comes the text of the entry.
+ % Not absorbing as a macro argument reduces the chance of problems
+ % with catcodes occurring.
+}
+{\catcode`\@=11
+\gdef\finishentry#1{%
+ \egroup % end box A
+ \dimen@ = \wd\boxA % Length of text of entry
+ \global\setbox\boxA=\hbox\bgroup
+ \unhbox\boxA
+ % #1 is the page number.
+ %
+ % Get the width of the page numbers, and only use
+ % leaders if they are present.
+ \global\setbox\boxB = \hbox{#1}%
+ \ifdim\wd\boxB = 0pt
+ \null\nobreak\hfill\ %
+ \else
+ %
+ \null\nobreak\indexdotfill % Have leaders before the page number.
+ %
+ \ifpdforxetex
+ \pdfgettoks#1.%
+ \hskip\skip\thinshrinkable\the\toksA
+ \else
+ \hskip\skip\thinshrinkable #1%
+ \fi
+ \fi
+ \egroup % end \boxA
+ \ifdim\wd\boxB = 0pt
+ \noindent\unhbox\boxA\par
+ \nobreak
+ \else\bgroup
+ % We want the text of the entries to be aligned to the left, and the
+ % page numbers to be aligned to the right.
+ %
+ \parindent = 0pt
+ \advance\leftskip by 0pt plus 1fil
+ \advance\leftskip by 0pt plus -1fill
+ \rightskip = 0pt plus -1fil
+ \advance\rightskip by 0pt plus 1fill
+ % Cause last line, which could consist of page numbers on their own
+ % if the list of page numbers is long, to be aligned to the right.
+ \parfillskip=0pt plus -1fill
+ %
+ \advance\rightskip by \entryrightmargin
+ % Determine how far we can stretch into the margin.
+ % This allows, e.g., "Appendix H GNU Free Documentation License" to
+ % fit on one line in @letterpaper format.
+ \ifdim\entryrightmargin>2.1em
+ \dimen@i=2.1em
+ \else
+ \dimen@i=0em
+ \fi
+ \advance \parfillskip by 0pt minus 1\dimen@i
+ %
+ \dimen@ii = \hsize
+ \advance\dimen@ii by -1\leftskip
+ \advance\dimen@ii by -1\entryrightmargin
+ \advance\dimen@ii by 1\dimen@i
+ \ifdim\wd\boxA > \dimen@ii % If the entry doesn't fit in one line
+ \ifdim\dimen@ > 0.8\dimen@ii % due to long index text
+ % Try to split the text roughly evenly. \dimen@ will be the length of
+ % the first line.
+ \dimen@ = 0.7\dimen@
+ \dimen@ii = \hsize
+ \ifnum\dimen@>\dimen@ii
+ % If the entry is too long (for example, if it needs more than
+ % two lines), use all the space in the first line.
+ \dimen@ = \dimen@ii
+ \fi
+ \advance\leftskip by 0pt plus 1fill % ragged right
+ \advance \dimen@ by 1\rightskip
+ \parshape = 2 0pt \dimen@ 0em \dimen@ii
+ % Ideally we'd add a finite glue at the end of the first line only,
+ % instead of using \parshape with explicit line lengths, but TeX
+ % doesn't seem to provide a way to do such a thing.
+ %
+ % Indent all lines but the first one.
+ \advance\leftskip by 1em
+ \advance\parindent by -1em
+ \fi\fi
+ \indent % start paragraph
+ \unhbox\boxA
+ %
+ % Do not prefer a separate line ending with a hyphen to fewer lines.
+ \finalhyphendemerits = 0
+ %
+ % Word spacing - no stretch
+ \spaceskip=\fontdimen2\font minus \fontdimen4\font
+ %
+ \linepenalty=1000 % Discourage line breaks.
+ \hyphenpenalty=5000 % Discourage hyphenation.
+ %
+ \par % format the paragraph
+ \egroup % The \vbox
+ \fi
+ \endgroup
+}}
+
+\newskip\thinshrinkable
+\skip\thinshrinkable=.15em minus .15em
+
+% Like plain.tex's \dotfill, except uses up at least 1 em.
+% The filll stretch here overpowers both the fil and fill stretch to push
+% the page number to the right.
+\def\indexdotfill{\cleaders
+ \hbox{$\mathsurround=0pt \mkern1.5mu.\mkern1.5mu$}\hskip 1em plus 1filll}
+
+
+\def\primary #1{\line{#1\hfil}}
+
+\def\secondary{\indententry{0.5cm}}
+\def\tertiary{\indententry{1cm}}
+
+\def\indententry#1#2#3{%
+ \bgroup
+ \leftskip=#1
+ \entry{#2}{#3}%
+ \egroup
+}
+
+% Define two-column mode, which we use to typeset indexes.
+% Adapted from the TeXbook, page 416, which is to say,
+% the manmac.tex format used to print the TeXbook itself.
+\catcode`\@=11 % private names
+
+\newbox\partialpage
+\newdimen\doublecolumnhsize
+
+\def\begindoublecolumns{\begingroup % ended by \enddoublecolumns
+ % If not much space left on page, start a new page.
+ \ifdim\pagetotal>0.8\vsize\vfill\eject\fi
+ %
+ % Grab any single-column material above us.
+ \output = {%
+ \savetopmark
+ %
+ \global\setbox\partialpage = \vbox{%
+ % Unvbox the main output page.
+ \unvbox\PAGE
+ \kern-\topskip \kern\baselineskip
+ }%
+ }%
+ \eject % run that output routine to set \partialpage
+ %
+ % Use the double-column output routine for subsequent pages.
+ \output = {\doublecolumnout}%
+ %
+ % Change the page size parameters. We could do this once outside this
+ % routine, in each of @smallbook, @afourpaper, and the default 8.5x11
+ % format, but then we repeat the same computation. Repeating a couple
+ % of assignments once per index is clearly meaningless for the
+ % execution time, so we may as well do it in one place.
+ %
+ % First we halve the line length, less a little for the gutter between
+ % the columns. We compute the gutter based on the line length, so it
+ % changes automatically with the paper format. The magic constant
+ % below is chosen so that the gutter has the same value (well, +-<1pt)
+ % as it did when we hard-coded it.
+ %
+ % We put the result in a separate register, \doublecolumhsize, so we
+ % can restore it in \pagesofar, after \hsize itself has (potentially)
+ % been clobbered.
+ %
+ \doublecolumnhsize = \hsize
+ \advance\doublecolumnhsize by -.04154\hsize
+ \divide\doublecolumnhsize by 2
+ \hsize = \doublecolumnhsize
+ %
+ % Get the available space for the double columns -- the normal
+ % (undoubled) page height minus any material left over from the
+ % previous page.
+ \advance\vsize by -\ht\partialpage
+ \vsize = 2\vsize
+ %
+ % For the benefit of balancing columns
+ \advance\baselineskip by 0pt plus 0.5pt
+}
+
+% The double-column output routine for all double-column pages except
+% the last, which is done by \balancecolumns.
+%
+\def\doublecolumnout{%
+ %
+ \savetopmark
+ \splittopskip=\topskip \splitmaxdepth=\maxdepth
+ \dimen@ = \vsize
+ \divide\dimen@ by 2
+ %
+ % box0 will be the left-hand column, box2 the right.
+ \setbox0=\vsplit\PAGE to\dimen@ \setbox2=\vsplit\PAGE to\dimen@
+ \global\advance\vsize by 2\ht\partialpage
+ \onepageout\pagesofar % empty except for the first time we are called
+ \unvbox\PAGE
+ \penalty\outputpenalty
+}
+%
+% Re-output the contents of the output page -- any previous material,
+% followed by the two boxes we just split, in box0 and box2.
+\def\pagesofar{%
+ \unvbox\partialpage
+ %
+ \hsize = \doublecolumnhsize
+ \wd0=\hsize \wd2=\hsize
+ \hbox to\txipagewidth{\box0\hfil\box2}%
+}
+
+
+% Finished with double columns.
+\def\enddoublecolumns{%
+ % The following penalty ensures that the page builder is exercised
+ % _before_ we change the output routine. This is necessary in the
+ % following situation:
+ %
+ % The last section of the index consists only of a single entry.
+ % Before this section, \pagetotal is less than \pagegoal, so no
+ % break occurs before the last section starts. However, the last
+ % section, consisting of \initial and the single \entry, does not
+ % fit on the page and has to be broken off. Without the following
+ % penalty the page builder will not be exercised until \eject
+ % below, and by that time we'll already have changed the output
+ % routine to the \balancecolumns version, so the next-to-last
+ % double-column page will be processed with \balancecolumns, which
+ % is wrong: The two columns will go to the main vertical list, with
+ % the broken-off section in the recent contributions. As soon as
+ % the output routine finishes, TeX starts reconsidering the page
+ % break. The two columns and the broken-off section both fit on the
+ % page, because the two columns now take up only half of the page
+ % goal. When TeX sees \eject from below which follows the final
+ % section, it invokes the new output routine that we've set after
+ % \balancecolumns below; \onepageout will try to fit the two columns
+ % and the final section into the vbox of \txipageheight (see
+ % \pagebody), causing an overfull box.
+ %
+ % Note that glue won't work here, because glue does not exercise the
+ % page builder, unlike penalties (see The TeXbook, pp. 280-281).
+ \penalty0
+ %
+ \output = {%
+ % Split the last of the double-column material.
+ \savetopmark
+ \balancecolumns
+ }%
+ \eject % call the \output just set
+ \ifdim\pagetotal=0pt
+ % Having called \balancecolumns once, we do not
+ % want to call it again. Therefore, reset \output to its normal
+ % definition right away.
+ \global\output=\expandafter{\the\defaultoutput}
+ %
+ \endgroup % started in \begindoublecolumns
+ % Leave the double-column material on the current page, no automatic
+ % page break.
+ \box\balancedcolumns
+ %
+ % \pagegoal was set to the doubled \vsize above, since we restarted
+ % the current page. We're now back to normal single-column
+ % typesetting, so reset \pagegoal to the normal \vsize.
+ \global\vsize = \txipageheight %
+ \pagegoal = \txipageheight %
+ \else
+ % We had some left-over material. This might happen when \doublecolumnout
+ % is called in \balancecolumns. Try again.
+ \expandafter\enddoublecolumns
+ \fi
+}
+\newbox\balancedcolumns
+\setbox\balancedcolumns=\vbox{shouldnt see this}%
+%
+% Only called for the last of the double column material. \doublecolumnout
+% does the others.
+\def\balancecolumns{%
+ \setbox0 = \vbox{\unvbox\PAGE}% like \box255 but more efficient, see p.120.
+ \dimen@ = \ht0
+ \ifdim\dimen@<7\baselineskip
+ % Don't split a short final column in two.
+ \setbox2=\vbox{}%
+ \global\setbox\balancedcolumns=\vbox{\pagesofar}%
+ \else
+ % double the leading vertical space
+ \advance\dimen@ by \topskip
+ \advance\dimen@ by-\baselineskip
+ \divide\dimen@ by 2 % target to split to
+ \dimen@ii = \dimen@
+ \splittopskip = \topskip
+ % Loop until left column is at least as high as the right column.
+ {%
+ \vbadness = 10000
+ \loop
+ \global\setbox3 = \copy0
+ \global\setbox1 = \vsplit3 to \dimen@
+ \ifdim\ht1<\ht3
+ \global\advance\dimen@ by 1pt
+ \repeat
+ }%
+ % Now the left column is in box 1, and the right column in box 3.
+ %
+ % Check whether the left column has come out higher than the page itself.
+ % (Note that we have doubled \vsize for the double columns, so
+ % the actual height of the page is 0.5\vsize).
+ \ifdim2\ht1>\vsize
+ % It appears that we have been called upon to balance too much material.
+ % Output some of it with \doublecolumnout, leaving the rest on the page.
+ \setbox\PAGE=\box0
+ \doublecolumnout
+ \else
+ % Compare the heights of the two columns.
+ \ifdim4\ht1>5\ht3
+ % Column heights are too different, so don't make their bottoms
+ % flush with each other.
+ \setbox2=\vbox to \ht1 {\unvbox3\vfill}%
+ \setbox0=\vbox to \ht1 {\unvbox1\vfill}%
+ \else
+ % Make column bottoms flush with each other.
+ \setbox2=\vbox to\ht1{\unvbox3\unskip}%
+ \setbox0=\vbox to\ht1{\unvbox1\unskip}%
+ \fi
+ \global\setbox\balancedcolumns=\vbox{\pagesofar}%
+ \fi
+ \fi
+ %
+}
+\catcode`\@ = \other
+
+
+\message{sectioning,}
+% Chapters, sections, etc.
+
+% Let's start with @part.
+\outer\parseargdef\part{\partzzz{#1}}
+\def\partzzz#1{%
+ \chapoddpage
+ \null
+ \vskip.3\vsize % move it down on the page a bit
+ \begingroup
+ \noindent \titlefonts\rm #1\par % the text
+ \let\lastnode=\empty % no node to associate with
+ \writetocentry{part}{#1}{}% but put it in the toc
+ \headingsoff % no headline or footline on the part page
+ % This outputs a mark at the end of the page that clears \thischapter
+ % and \thissection, as is done in \startcontents.
+ \let\pchapsepmacro\relax
+ \chapmacro{}{Yomitfromtoc}{}%
+ \chapoddpage
+ \endgroup
+}
+
+% \unnumberedno is an oxymoron. But we count the unnumbered
+% sections so that we can refer to them unambiguously in the pdf
+% outlines by their "section number". We avoid collisions with chapter
+% numbers by starting them at 10000. (If a document ever has 10000
+% chapters, we're in trouble anyway, I'm sure.)
+\newcount\unnumberedno \unnumberedno = 10000
+\newcount\chapno
+\newcount\secno \secno=0
+\newcount\subsecno \subsecno=0
+\newcount\subsubsecno \subsubsecno=0
+
+% This counter is funny since it counts through charcodes of letters A, B, ...
+\newcount\appendixno \appendixno = `\@
+%
+% \def\appendixletter{\char\the\appendixno}
+% We do the following ugly conditional instead of the above simple
+% construct for the sake of pdftex, which needs the actual
+% letter in the expansion, not just typeset.
+%
+\def\appendixletter{%
+ \ifnum\appendixno=`A A%
+ \else\ifnum\appendixno=`B B%
+ \else\ifnum\appendixno=`C C%
+ \else\ifnum\appendixno=`D D%
+ \else\ifnum\appendixno=`E E%
+ \else\ifnum\appendixno=`F F%
+ \else\ifnum\appendixno=`G G%
+ \else\ifnum\appendixno=`H H%
+ \else\ifnum\appendixno=`I I%
+ \else\ifnum\appendixno=`J J%
+ \else\ifnum\appendixno=`K K%
+ \else\ifnum\appendixno=`L L%
+ \else\ifnum\appendixno=`M M%
+ \else\ifnum\appendixno=`N N%
+ \else\ifnum\appendixno=`O O%
+ \else\ifnum\appendixno=`P P%
+ \else\ifnum\appendixno=`Q Q%
+ \else\ifnum\appendixno=`R R%
+ \else\ifnum\appendixno=`S S%
+ \else\ifnum\appendixno=`T T%
+ \else\ifnum\appendixno=`U U%
+ \else\ifnum\appendixno=`V V%
+ \else\ifnum\appendixno=`W W%
+ \else\ifnum\appendixno=`X X%
+ \else\ifnum\appendixno=`Y Y%
+ \else\ifnum\appendixno=`Z Z%
+ % The \the is necessary, despite appearances, because \appendixletter is
+ % expanded while writing the .toc file. \char\appendixno is not
+ % expandable, thus it is written literally, thus all appendixes come out
+ % with the same letter (or @) in the toc without it.
+ \else\char\the\appendixno
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
+
+% Each @chapter defines these (using marks) as the number+name, number
+% and name of the chapter. Page headings and footings can use
+% these. @section does likewise.
+\def\thischapter{}
+\def\thischapternum{}
+\def\thischaptername{}
+\def\thissection{}
+\def\thissectionnum{}
+\def\thissectionname{}
+
+\newcount\absseclevel % used to calculate proper heading level
+\newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count
+
+% @raisesections: treat @section as chapter, @subsection as section, etc.
+\def\raisesections{\global\advance\secbase by -1}
+
+% @lowersections: treat @chapter as section, @section as subsection, etc.
+\def\lowersections{\global\advance\secbase by 1}
+
+% we only have subsub.
+\chardef\maxseclevel = 3
+%
+% A numbered section within an unnumbered changes to unnumbered too.
+% To achieve this, remember the "biggest" unnum. sec. we are currently in:
+\chardef\unnlevel = \maxseclevel
+%
+% Trace whether the current chapter is an appendix or not:
+% \chapheadtype is "N" or "A", unnumbered chapters are ignored.
+\def\chapheadtype{N}
+
+% Choose a heading macro
+% #1 is heading type
+% #2 is heading level
+% #3 is text for heading
+\def\genhead#1#2#3{%
+ % Compute the abs. sec. level:
+ \absseclevel=#2
+ \advance\absseclevel by \secbase
+ % Make sure \absseclevel doesn't fall outside the range:
+ \ifnum \absseclevel < 0
+ \absseclevel = 0
+ \else
+ \ifnum \absseclevel > 3
+ \absseclevel = 3
+ \fi
+ \fi
+ % The heading type:
+ \def\headtype{#1}%
+ \if \headtype U%
+ \ifnum \absseclevel < \unnlevel
+ \chardef\unnlevel = \absseclevel
+ \fi
+ \else
+ % Check for appendix sections:
+ \ifnum \absseclevel = 0
+ \edef\chapheadtype{\headtype}%
+ \else
+ \if \headtype A\if \chapheadtype N%
+ \errmessage{@appendix... within a non-appendix chapter}%
+ \fi\fi
+ \fi
+ % Check for numbered within unnumbered:
+ \ifnum \absseclevel > \unnlevel
+ \def\headtype{U}%
+ \else
+ \chardef\unnlevel = 3
+ \fi
+ \fi
+ % Now print the heading:
+ \if \headtype U%
+ \ifcase\absseclevel
+ \unnumberedzzz{#3}%
+ \or \unnumberedseczzz{#3}%
+ \or \unnumberedsubseczzz{#3}%
+ \or \unnumberedsubsubseczzz{#3}%
+ \fi
+ \else
+ \if \headtype A%
+ \ifcase\absseclevel
+ \appendixzzz{#3}%
+ \or \appendixsectionzzz{#3}%
+ \or \appendixsubseczzz{#3}%
+ \or \appendixsubsubseczzz{#3}%
+ \fi
+ \else
+ \ifcase\absseclevel
+ \chapterzzz{#3}%
+ \or \seczzz{#3}%
+ \or \numberedsubseczzz{#3}%
+ \or \numberedsubsubseczzz{#3}%
+ \fi
+ \fi
+ \fi
+ \suppressfirstparagraphindent
+}
+
+% an interface:
+\def\numhead{\genhead N}
+\def\apphead{\genhead A}
+\def\unnmhead{\genhead U}
+
+% @chapter, @appendix, @unnumbered. Increment top-level counter, reset
+% all lower-level sectioning counters to zero.
+%
+% Also set \chaplevelprefix, which we prepend to @float sequence numbers
+% (e.g., figures), q.v. By default (before any chapter), that is empty.
+\let\chaplevelprefix = \empty
+%
+\outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz
+\def\chapterzzz#1{%
+ % section resetting is \global in case the chapter is in a group, such
+ % as an @include file.
+ \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
+ \global\advance\chapno by 1
+ %
+ % Used for \float.
+ \gdef\chaplevelprefix{\the\chapno.}%
+ \resetallfloatnos
+ %
+ % \putwordChapter can contain complex things in translations.
+ \toks0=\expandafter{\putwordChapter}%
+ \message{\the\toks0 \space \the\chapno}%
+ %
+ % Write the actual heading.
+ \chapmacro{#1}{Ynumbered}{\the\chapno}%
+ %
+ % So @section and the like are numbered underneath this chapter.
+ \global\let\section = \numberedsec
+ \global\let\subsection = \numberedsubsec
+ \global\let\subsubsection = \numberedsubsubsec
+}
+
+\outer\parseargdef\appendix{\apphead0{#1}} % normally calls appendixzzz
+%
+\def\appendixzzz#1{%
+ \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
+ \global\advance\appendixno by 1
+ \gdef\chaplevelprefix{\appendixletter.}%
+ \resetallfloatnos
+ %
+ % \putwordAppendix can contain complex things in translations.
+ \toks0=\expandafter{\putwordAppendix}%
+ \message{\the\toks0 \space \appendixletter}%
+ %
+ \chapmacro{#1}{Yappendix}{\appendixletter}%
+ %
+ \global\let\section = \appendixsec
+ \global\let\subsection = \appendixsubsec
+ \global\let\subsubsection = \appendixsubsubsec
+}
+
+% normally unnmhead0 calls unnumberedzzz:
+\outer\parseargdef\unnumbered{\unnmhead0{#1}}
+\def\unnumberedzzz#1{%
+ \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
+ \global\advance\unnumberedno by 1
+ %
+ % Since an unnumbered has no number, no prefix for figures.
+ \global\let\chaplevelprefix = \empty
+ \resetallfloatnos
+ %
+ % This used to be simply \message{#1}, but TeX fully expands the
+ % argument to \message. Therefore, if #1 contained @-commands, TeX
+ % expanded them. For example, in `@unnumbered The @cite{Book}', TeX
+ % expanded @cite (which turns out to cause errors because \cite is meant
+ % to be executed, not expanded).
+ %
+ % Anyway, we don't want the fully-expanded definition of @cite to appear
+ % as a result of the \message, we just want `@cite' itself. We use
+ % \the<toks register> to achieve this: TeX expands \the<toks> only once,
+ % simply yielding the contents of <toks register>. (We also do this for
+ % the toc entries.)
+ \toks0 = {#1}%
+ \message{(\the\toks0)}%
+ %
+ \chapmacro{#1}{Ynothing}{\the\unnumberedno}%
+ %
+ \global\let\section = \unnumberedsec
+ \global\let\subsection = \unnumberedsubsec
+ \global\let\subsubsection = \unnumberedsubsubsec
+}
+
+% @centerchap is like @unnumbered, but the heading is centered.
+\outer\parseargdef\centerchap{%
+ \let\centerparametersmaybe = \centerparameters
+ \unnmhead0{#1}%
+ \let\centerparametersmaybe = \relax
+}
+
+% @top is like @unnumbered.
+\let\top\unnumbered
+
+% Sections.
+%
+\outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz
+\def\seczzz#1{%
+ \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1
+ \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}%
+}
+
+% normally calls appendixsectionzzz:
+\outer\parseargdef\appendixsection{\apphead1{#1}}
+\def\appendixsectionzzz#1{%
+ \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1
+ \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}%
+}
+\let\appendixsec\appendixsection
+
+% normally calls unnumberedseczzz:
+\outer\parseargdef\unnumberedsec{\unnmhead1{#1}}
+\def\unnumberedseczzz#1{%
+ \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1
+ \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}%
+}
+
+% Subsections.
+%
+% normally calls numberedsubseczzz:
+\outer\parseargdef\numberedsubsec{\numhead2{#1}}
+\def\numberedsubseczzz#1{%
+ \global\subsubsecno=0 \global\advance\subsecno by 1
+ \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}%
+}
+
+% normally calls appendixsubseczzz:
+\outer\parseargdef\appendixsubsec{\apphead2{#1}}
+\def\appendixsubseczzz#1{%
+ \global\subsubsecno=0 \global\advance\subsecno by 1
+ \sectionheading{#1}{subsec}{Yappendix}%
+ {\appendixletter.\the\secno.\the\subsecno}%
+}
+
+% normally calls unnumberedsubseczzz:
+\outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}}
+\def\unnumberedsubseczzz#1{%
+ \global\subsubsecno=0 \global\advance\subsecno by 1
+ \sectionheading{#1}{subsec}{Ynothing}%
+ {\the\unnumberedno.\the\secno.\the\subsecno}%
+}
+
+% Subsubsections.
+%
+% normally numberedsubsubseczzz:
+\outer\parseargdef\numberedsubsubsec{\numhead3{#1}}
+\def\numberedsubsubseczzz#1{%
+ \global\advance\subsubsecno by 1
+ \sectionheading{#1}{subsubsec}{Ynumbered}%
+ {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}%
+}
+
+% normally appendixsubsubseczzz:
+\outer\parseargdef\appendixsubsubsec{\apphead3{#1}}
+\def\appendixsubsubseczzz#1{%
+ \global\advance\subsubsecno by 1
+ \sectionheading{#1}{subsubsec}{Yappendix}%
+ {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}%
+}
+
+% normally unnumberedsubsubseczzz:
+\outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}}
+\def\unnumberedsubsubseczzz#1{%
+ \global\advance\subsubsecno by 1
+ \sectionheading{#1}{subsubsec}{Ynothing}%
+ {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}%
+}
+
+% These macros control what the section commands do, according
+% to what kind of chapter we are in (ordinary, appendix, or unnumbered).
+% Define them by default for a numbered chapter.
+\let\section = \numberedsec
+\let\subsection = \numberedsubsec
+\let\subsubsection = \numberedsubsubsec
+
+% Define @majorheading, @heading and @subheading
+
+\def\majorheading{%
+ {\advance\chapheadingskip by 10pt \chapbreak }%
+ \parsearg\chapheadingzzz
+}
+
+\def\chapheading{\chapbreak \parsearg\chapheadingzzz}
+\def\chapheadingzzz#1{%
+ \vbox{\chapfonts \raggedtitlesettings #1\par}%
+ \nobreak\bigskip \nobreak
+ \suppressfirstparagraphindent
+}
+
+% @heading, @subheading, @subsubheading.
+\parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{}
+ \suppressfirstparagraphindent}
+\parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{}
+ \suppressfirstparagraphindent}
+\parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{}
+ \suppressfirstparagraphindent}
+
+% These macros generate a chapter, section, etc. heading only
+% (including whitespace, linebreaking, etc. around it),
+% given all the information in convenient, parsed form.
+
+% Args are the skip and penalty (usually negative)
+\def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi}
+
+% Parameter controlling skip before chapter headings (if needed)
+\newskip\chapheadingskip
+
+% Define plain chapter starts, and page on/off switching for it.
+\def\chapbreak{\dobreak \chapheadingskip {-4000}}
+
+% Start a new page
+\def\chappager{\par\vfill\supereject}
+
+% \chapoddpage - start on an odd page for a new chapter
+% Because \domark is called before \chapoddpage, the filler page will
+% get the headings for the next chapter, which is wrong. But we don't
+% care -- we just disable all headings on the filler page.
+\def\chapoddpage{%
+ \chappager
+ \ifodd\pageno \else
+ \begingroup
+ \headingsoff
+ \null
+ \chappager
+ \endgroup
+ \fi
+}
+
+\parseargdef\setchapternewpage{\csname CHAPPAG#1\endcsname}
+
+\def\CHAPPAGoff{%
+\global\let\contentsalignmacro = \chappager
+\global\let\pchapsepmacro=\chapbreak
+\global\def\HEADINGSon{\HEADINGSsinglechapoff}}
+
+\def\CHAPPAGon{%
+\global\let\contentsalignmacro = \chappager
+\global\let\pchapsepmacro=\chappager
+\global\def\HEADINGSon{\HEADINGSsingle}}
+
+\def\CHAPPAGodd{%
+\global\let\contentsalignmacro = \chapoddpage
+\global\let\pchapsepmacro=\chapoddpage
+\global\def\HEADINGSon{\HEADINGSdouble}}
+
+\CHAPPAGon
+
+% \chapmacro - Chapter opening.
+%
+% #1 is the text, #2 is the section type (Ynumbered, Ynothing,
+% Yappendix, Yomitfromtoc), #3 the chapter number.
+% Not used for @heading series.
+%
+% To test against our argument.
+\def\Ynothingkeyword{Ynothing}
+\def\Yappendixkeyword{Yappendix}
+\def\Yomitfromtockeyword{Yomitfromtoc}
+%
+\def\chapmacro#1#2#3{%
+ \expandafter\ifx\thisenv\titlepage\else
+ \checkenv{}% chapters, etc., should not start inside an environment.
+ \fi
+ % Insert the first mark before the heading break (see notes for \domark).
+ \let\prevchapterdefs=\currentchapterdefs
+ \let\prevsectiondefs=\currentsectiondefs
+ \gdef\currentsectiondefs{\gdef\thissectionname{}\gdef\thissectionnum{}%
+ \gdef\thissection{}}%
+ %
+ \def\temptype{#2}%
+ \ifx\temptype\Ynothingkeyword
+ \gdef\currentchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}%
+ \gdef\thischapter{\thischaptername}}%
+ \else\ifx\temptype\Yomitfromtockeyword
+ \gdef\currentchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}%
+ \gdef\thischapter{}}%
+ \else\ifx\temptype\Yappendixkeyword
+ \toks0={#1}%
+ \xdef\currentchapterdefs{%
+ \gdef\noexpand\thischaptername{\the\toks0}%
+ \gdef\noexpand\thischapternum{\appendixletter}%
+ % \noexpand\putwordAppendix avoids expanding indigestible
+ % commands in some of the translations.
+ \gdef\noexpand\thischapter{\noexpand\putwordAppendix{}
+ \noexpand\thischapternum:
+ \noexpand\thischaptername}%
+ }%
+ \else
+ \toks0={#1}%
+ \xdef\currentchapterdefs{%
+ \gdef\noexpand\thischaptername{\the\toks0}%
+ \gdef\noexpand\thischapternum{\the\chapno}%
+ % \noexpand\putwordChapter avoids expanding indigestible
+ % commands in some of the translations.
+ \gdef\noexpand\thischapter{\noexpand\putwordChapter{}
+ \noexpand\thischapternum:
+ \noexpand\thischaptername}%
+ }%
+ \fi\fi\fi
+ %
+ % Output the mark. Pass it through \safewhatsit, to take care of
+ % the preceding space.
+ \safewhatsit\domark
+ %
+ % Insert the chapter heading break.
+ \pchapsepmacro
+ %
+ % Now the second mark, after the heading break. No break points
+ % between here and the heading.
+ \let\prevchapterdefs=\currentchapterdefs
+ \let\prevsectiondefs=\currentsectiondefs
+ \domark
+ %
+ {%
+ \chapfonts \rm
+ \let\footnote=\errfootnoteheading % give better error message
+ %
+ % Have to define \currentsection before calling \donoderef, because the
+ % xref code eventually uses it. On the other hand, it has to be called
+ % after \pchapsepmacro, or the headline will change too soon.
+ \gdef\currentsection{#1}%
+ %
+ % Only insert the separating space if we have a chapter/appendix
+ % number, and don't print the unnumbered ``number''.
+ \ifx\temptype\Ynothingkeyword
+ \setbox0 = \hbox{}%
+ \def\toctype{unnchap}%
+ \else\ifx\temptype\Yomitfromtockeyword
+ \setbox0 = \hbox{}% contents like unnumbered, but no toc entry
+ \def\toctype{omit}%
+ \else\ifx\temptype\Yappendixkeyword
+ \setbox0 = \hbox{\putwordAppendix{} #3\enspace}%
+ \def\toctype{app}%
+ \else
+ \setbox0 = \hbox{#3\enspace}%
+ \def\toctype{numchap}%
+ \fi\fi\fi
+ %
+ % Write the toc entry for this chapter. Must come before the
+ % \donoderef, because we include the current node name in the toc
+ % entry, and \donoderef resets it to empty.
+ \writetocentry{\toctype}{#1}{#3}%
+ %
+ % For pdftex, we have to write out the node definition (aka, make
+ % the pdfdest) after any page break, but before the actual text has
+ % been typeset. If the destination for the pdf outline is after the
+ % text, then jumping from the outline may wind up with the text not
+ % being visible, for instance under high magnification.
+ \donoderef{#2}%
+ %
+ % Typeset the actual heading.
+ \nobreak % Avoid page breaks at the interline glue.
+ \vbox{\raggedtitlesettings \hangindent=\wd0 \centerparametersmaybe
+ \unhbox0 #1\par}%
+ }%
+ \nobreak\bigskip % no page break after a chapter title
+ \nobreak
+}
+
+% @centerchap -- centered and unnumbered.
+\let\centerparametersmaybe = \relax
+\def\centerparameters{%
+ \advance\rightskip by 3\rightskip
+ \leftskip = \rightskip
+ \parfillskip = 0pt
+}
+
+
+% Section titles. These macros combine the section number parts and
+% call the generic \sectionheading to do the printing.
+%
+\newskip\secheadingskip
+\def\secheadingbreak{\dobreak \secheadingskip{-1000}}
+
+% Subsection titles.
+\newskip\subsecheadingskip
+\def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}}
+
+% Subsubsection titles.
+\def\subsubsecheadingskip{\subsecheadingskip}
+\def\subsubsecheadingbreak{\subsecheadingbreak}
+
+
+% Print any size, any type, section title.
+%
+% #1 is the text of the title,
+% #2 is the section level (sec/subsec/subsubsec),
+% #3 is the section type (Ynumbered, Ynothing, Yappendix, Yomitfromtoc),
+% #4 is the section number.
+%
+\def\seckeyword{sec}
+%
+\def\sectionheading#1#2#3#4{%
+ {%
+ \def\sectionlevel{#2}%
+ \def\temptype{#3}%
+ %
+ % It is ok for the @heading series commands to appear inside an
+ % environment (it's been historically allowed, though the logic is
+ % dubious), but not the others.
+ \ifx\temptype\Yomitfromtockeyword\else
+ \checkenv{}% non-@*heading should not be in an environment.
+ \fi
+ \let\footnote=\errfootnoteheading
+ %
+ % Switch to the right set of fonts.
+ \csname #2fonts\endcsname \rm
+ %
+ % Insert first mark before the heading break (see notes for \domark).
+ \let\prevsectiondefs=\currentsectiondefs
+ \ifx\temptype\Ynothingkeyword
+ \ifx\sectionlevel\seckeyword
+ \gdef\currentsectiondefs{\gdef\thissectionname{#1}\gdef\thissectionnum{}%
+ \gdef\thissection{\thissectionname}}%
+ \fi
+ \else\ifx\temptype\Yomitfromtockeyword
+ % Don't redefine \thissection.
+ \else\ifx\temptype\Yappendixkeyword
+ \ifx\sectionlevel\seckeyword
+ \toks0={#1}%
+ \xdef\currentsectiondefs{%
+ \gdef\noexpand\thissectionname{\the\toks0}%
+ \gdef\noexpand\thissectionnum{#4}%
+ % \noexpand\putwordSection avoids expanding indigestible
+ % commands in some of the translations.
+ \gdef\noexpand\thissection{\noexpand\putwordSection{}
+ \noexpand\thissectionnum:
+ \noexpand\thissectionname}%
+ }%
+ \fi
+ \else
+ \ifx\sectionlevel\seckeyword
+ \toks0={#1}%
+ \xdef\currentsectiondefs{%
+ \gdef\noexpand\thissectionname{\the\toks0}%
+ \gdef\noexpand\thissectionnum{#4}%
+ % \noexpand\putwordSection avoids expanding indigestible
+ % commands in some of the translations.
+ \gdef\noexpand\thissection{\noexpand\putwordSection{}
+ \noexpand\thissectionnum:
+ \noexpand\thissectionname}%
+ }%
+ \fi
+ \fi\fi\fi
+ %
+ % Go into vertical mode. Usually we'll already be there, but we
+ % don't want the following whatsit to end up in a preceding paragraph
+ % if the document didn't happen to have a blank line.
+ \par
+ %
+ % Output the mark. Pass it through \safewhatsit, to take care of
+ % the preceding space.
+ \safewhatsit\domark
+ %
+ % Insert space above the heading.
+ \csname #2headingbreak\endcsname
+ %
+ % Now the second mark, after the heading break. No break points
+ % between here and the heading.
+ \global\let\prevsectiondefs=\currentsectiondefs
+ \domark
+ %
+ % Only insert the space after the number if we have a section number.
+ \ifx\temptype\Ynothingkeyword
+ \setbox0 = \hbox{}%
+ \def\toctype{unn}%
+ \gdef\currentsection{#1}%
+ \else\ifx\temptype\Yomitfromtockeyword
+ % for @headings -- no section number, don't include in toc,
+ % and don't redefine \currentsection.
+ \setbox0 = \hbox{}%
+ \def\toctype{omit}%
+ \let\sectionlevel=\empty
+ \else\ifx\temptype\Yappendixkeyword
+ \setbox0 = \hbox{#4\enspace}%
+ \def\toctype{app}%
+ \gdef\currentsection{#1}%
+ \else
+ \setbox0 = \hbox{#4\enspace}%
+ \def\toctype{num}%
+ \gdef\currentsection{#1}%
+ \fi\fi\fi
+ %
+ % Write the toc entry (before \donoderef). See comments in \chapmacro.
+ \writetocentry{\toctype\sectionlevel}{#1}{#4}%
+ %
+ % Write the node reference (= pdf destination for pdftex).
+ % Again, see comments in \chapmacro.
+ \donoderef{#3}%
+ %
+ % Interline glue will be inserted when the vbox is completed.
+ % That glue will be a valid breakpoint for the page, since it'll be
+ % preceded by a whatsit (usually from the \donoderef, or from the
+ % \writetocentry if there was no node). We don't want to allow that
+ % break, since then the whatsits could end up on page n while the
+ % section is on page n+1, thus toc/etc. are wrong. Debian bug 276000.
+ \nobreak
+ %
+ % Output the actual section heading.
+ \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright
+ \hangindent=\wd0 % zero if no section number
+ \unhbox0 #1}%
+ }%
+ % Add extra space after the heading -- half of whatever came above it.
+ % Don't allow stretch, though.
+ \kern .5 \csname #2headingskip\endcsname
+ %
+ % Do not let the kern be a potential breakpoint, as it would be if it
+ % was followed by glue.
+ \nobreak
+ %
+ % We'll almost certainly start a paragraph next, so don't let that
+ % glue accumulate. (Not a breakpoint because it's preceded by a
+ % discardable item.) However, when a paragraph is not started next
+ % (\startdefun, \cartouche, \center, etc.), this needs to be wiped out
+ % or the negative glue will cause weirdly wrong output, typically
+ % obscuring the section heading with something else.
+ \vskip-\parskip
+ %
+ % This is so the last item on the main vertical list is a known
+ % \penalty > 10000, so \startdefun, etc., can recognize the situation
+ % and do the needful.
+ \penalty 10001
+}
+
+
+\message{toc,}
+% Table of contents.
+\newwrite\tocfile
+
+% Write an entry to the toc file, opening it if necessary.
+% Called from @chapter, etc.
+%
+% Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno}
+% We append the current node name (if any) and page number as additional
+% arguments for the \{chap,sec,...}entry macros which will eventually
+% read this. The node name is used in the pdf outlines as the
+% destination to jump to.
+%
+% We open the .toc file for writing here instead of at @setfilename (or
+% any other fixed time) so that @contents can be anywhere in the document.
+% But if #1 is `omit', then we don't do anything. This is used for the
+% table of contents chapter openings themselves.
+%
+\newif\iftocfileopened
+\def\omitkeyword{omit}%
+%
+\def\writetocentry#1#2#3{%
+ \edef\writetoctype{#1}%
+ \ifx\writetoctype\omitkeyword \else
+ \iftocfileopened\else
+ \immediate\openout\tocfile = \jobname.toc
+ \global\tocfileopenedtrue
+ \fi
+ %
+ \iflinks
+ {\atdummies
+ \edef\temp{%
+ \write\tocfile{@#1entry{#2}{#3}{\lastnode}{\noexpand\folio}}}%
+ \temp
+ }%
+ \fi
+ \fi
+ %
+ % Tell \shipout to create a pdf destination on each page, if we're
+ % writing pdf. These are used in the table of contents. We can't
+ % just write one on every page because the title pages are numbered
+ % 1 and 2 (the page numbers aren't printed), and so are the first
+ % two pages of the document. Thus, we'd have two destinations named
+ % `1', and two named `2'.
+ \ifpdforxetex
+ \global\pdfmakepagedesttrue
+ \fi
+}
+
+
+% These characters do not print properly in the Computer Modern roman
+% fonts, so we must take special care. This is more or less redundant
+% with the Texinfo input format setup at the end of this file.
+%
+\def\activecatcodes{%
+ \catcode`\"=\active
+ \catcode`\$=\active
+ \catcode`\<=\active
+ \catcode`\>=\active
+ \catcode`\\=\active
+ \catcode`\^=\active
+ \catcode`\_=\active
+ \catcode`\|=\active
+ \catcode`\~=\active
+}
+
+
+% Read the toc file, which is essentially Texinfo input.
+\def\readtocfile{%
+ \setupdatafile
+ \activecatcodes
+ \input \tocreadfilename
+}
+
+\newskip\contentsrightmargin \contentsrightmargin=1in
+\newcount\savepageno
+\newcount\lastnegativepageno \lastnegativepageno = -1
+
+% Prepare to read what we've written to \tocfile.
+%
+\def\startcontents#1{%
+ % If @setchapternewpage on, and @headings double, the contents should
+ % start on an odd page, unlike chapters.
+ \contentsalignmacro
+ \immediate\closeout\tocfile
+ %
+ % Don't need to put `Contents' or `Short Contents' in the headline.
+ % It is abundantly clear what they are.
+ \chapmacro{#1}{Yomitfromtoc}{}%
+ %
+ \savepageno = \pageno
+ \begingroup % Set up to handle contents files properly.
+ \raggedbottom % Worry more about breakpoints than the bottom.
+ \entryrightmargin=\contentsrightmargin % Don't use the full line length.
+ %
+ % Roman numerals for page numbers.
+ \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi
+ \def\thistitle{}% no title in double-sided headings
+ % Record where the Roman numerals started.
+ \ifnum\romancount=0 \global\romancount=\pagecount \fi
+}
+
+% redefined for the two-volume lispref. We always output on
+% \jobname.toc even if this is redefined.
+%
+\def\tocreadfilename{\jobname.toc}
+
+% Normal (long) toc.
+%
+\def\contents{%
+ \startcontents{\putwordTOC}%
+ \openin 1 \tocreadfilename\space
+ \ifeof 1 \else
+ \readtocfile
+ \fi
+ \vfill \eject
+ \contentsalignmacro % in case @setchapternewpage odd is in effect
+ \ifeof 1 \else
+ \pdfmakeoutlines
+ \fi
+ \closein 1
+ \endgroup
+ \contentsendroman
+}
+
+% And just the chapters.
+\def\summarycontents{%
+ \startcontents{\putwordShortTOC}%
+ %
+ \let\partentry = \shortpartentry
+ \let\numchapentry = \shortchapentry
+ \let\appentry = \shortchapentry
+ \let\unnchapentry = \shortunnchapentry
+ % We want a true roman here for the page numbers.
+ \secfonts
+ \let\rm=\shortcontrm \let\bf=\shortcontbf
+ \let\sl=\shortcontsl \let\tt=\shortconttt
+ \rm
+ \hyphenpenalty = 10000
+ \advance\baselineskip by 1pt % Open it up a little.
+ \def\numsecentry##1##2##3##4{}
+ \let\appsecentry = \numsecentry
+ \let\unnsecentry = \numsecentry
+ \let\numsubsecentry = \numsecentry
+ \let\appsubsecentry = \numsecentry
+ \let\unnsubsecentry = \numsecentry
+ \let\numsubsubsecentry = \numsecentry
+ \let\appsubsubsecentry = \numsecentry
+ \let\unnsubsubsecentry = \numsecentry
+ \openin 1 \tocreadfilename\space
+ \ifeof 1 \else
+ \readtocfile
+ \fi
+ \closein 1
+ \vfill \eject
+ \contentsalignmacro % in case @setchapternewpage odd is in effect
+ \endgroup
+ \contentsendroman
+}
+\let\shortcontents = \summarycontents
+
+% Get ready to use Arabic numerals again
+\def\contentsendroman{%
+ \lastnegativepageno = \pageno
+ \global\pageno = \savepageno
+ %
+ % If \romancount > \arabiccount, the contents are at the end of the
+ % document. Otherwise, advance where the Arabic numerals start for
+ % the page numbers.
+ \ifnum\romancount>\arabiccount\else\global\arabiccount=\pagecount\fi
+}
+
+% Typeset the label for a chapter or appendix for the short contents.
+% The arg is, e.g., `A' for an appendix, or `3' for a chapter.
+%
+\def\shortchaplabel#1{%
+ % This space should be enough, since a single number is .5em, and the
+ % widest letter (M) is 1em, at least in the Computer Modern fonts.
+ % But use \hss just in case.
+ % (This space doesn't include the extra space that gets added after
+ % the label; that gets put in by \shortchapentry above.)
+ %
+ % We'd like to right-justify chapter numbers, but that looks strange
+ % with appendix letters. And right-justifying numbers and
+ % left-justifying letters looks strange when there is less than 10
+ % chapters. Have to read the whole toc once to know how many chapters
+ % there are before deciding ...
+ \hbox to 1em{#1\hss}%
+}
+
+% These macros generate individual entries in the table of contents.
+% The first argument is the chapter or section name.
+% The last argument is the page number.
+% The arguments in between are the chapter number, section number, ...
+
+% Parts, in the main contents. Replace the part number, which doesn't
+% exist, with an empty box. Let's hope all the numbers have the same width.
+% Also ignore the page number, which is conventionally not printed.
+\def\numeralbox{\setbox0=\hbox{8}\hbox to \wd0{\hfil}}
+\def\partentry#1#2#3#4{%
+ % Add stretch and a bonus for breaking the page before the part heading.
+ % This reduces the chance of the page being broken immediately after the
+ % part heading, before a following chapter heading.
+ \vskip 0pt plus 5\baselineskip
+ \penalty-300
+ \vskip 0pt plus -5\baselineskip
+ \dochapentry{\numeralbox\labelspace#1}{}%
+}
+%
+% Parts, in the short toc.
+\def\shortpartentry#1#2#3#4{%
+ \penalty-300
+ \vskip.5\baselineskip plus.15\baselineskip minus.1\baselineskip
+ \shortchapentry{{\bf #1}}{\numeralbox}{}{}%
+}
+
+% Chapters, in the main contents.
+\def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}}
+
+% Chapters, in the short toc.
+% See comments in \dochapentry re vbox and related settings.
+\def\shortchapentry#1#2#3#4{%
+ \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}%
+}
+
+% Appendices, in the main contents.
+% Need the word Appendix, and a fixed-size box.
+%
+\def\appendixbox#1{%
+ % We use M since it's probably the widest letter.
+ \setbox0 = \hbox{\putwordAppendix{} M}%
+ \hbox to \wd0{\putwordAppendix{} #1\hss}}
+%
+\def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\hskip.7em#1}{#4}}
+
+% Unnumbered chapters.
+\def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}}
+\def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}}
+
+% Sections.
+\def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}}
+\let\appsecentry=\numsecentry
+\def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}}
+
+% Subsections.
+\def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}}
+\let\appsubsecentry=\numsubsecentry
+\def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}}
+
+% And subsubsections.
+\def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}}
+\let\appsubsubsecentry=\numsubsubsecentry
+\def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}}
+
+% This parameter controls the indentation of the various levels.
+% Same as \defaultparindent.
+\newdimen\tocindent \tocindent = 15pt
+
+% Now for the actual typesetting. In all these, #1 is the text and #2 is the
+% page number.
+%
+% If the toc has to be broken over pages, we want it to be at chapters
+% if at all possible; hence the \penalty.
+\def\dochapentry#1#2{%
+ \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip
+ \begingroup
+ % Move the page numbers slightly to the right
+ \advance\entryrightmargin by -0.05em
+ \chapentryfonts
+ \tocentry{#1}{\dopageno\bgroup#2\egroup}%
+ \endgroup
+ \nobreak\vskip .25\baselineskip plus.1\baselineskip
+}
+
+\def\dosecentry#1#2{\begingroup
+ \secentryfonts \leftskip=\tocindent
+ \tocentry{#1}{\dopageno\bgroup#2\egroup}%
+\endgroup}
+
+\def\dosubsecentry#1#2{\begingroup
+ \subsecentryfonts \leftskip=2\tocindent
+ \tocentry{#1}{\dopageno\bgroup#2\egroup}%
+\endgroup}
+
+\def\dosubsubsecentry#1#2{\begingroup
+ \subsubsecentryfonts \leftskip=3\tocindent
+ \tocentry{#1}{\dopageno\bgroup#2\egroup}%
+\endgroup}
+
+% We use the same \entry macro as for the index entries.
+\let\tocentry = \entry
+
+% Space between chapter (or whatever) number and the title.
+\def\labelspace{\hskip1em \relax}
+
+\def\dopageno#1{{\rm #1}}
+\def\doshortpageno#1{{\rm #1}}
+
+\def\chapentryfonts{\secfonts \rm}
+\def\secentryfonts{\textfonts}
+\def\subsecentryfonts{\textfonts}
+\def\subsubsecentryfonts{\textfonts}
+
+
+\message{environments,}
+% @foo ... @end foo.
+
+% @tex ... @end tex escapes into raw TeX temporarily.
+% One exception: @ is still an escape character, so that @end tex works.
+% But \@ or @@ will get a plain @ character.
+
+\envdef\tex{%
+ \setregularquotes
+ \catcode `\\=0 \catcode `\{=1 \catcode `\}=2
+ \catcode `\$=3 \catcode `\&=4 \catcode `\#=6
+ \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie
+ \catcode `\%=14
+ \catcode `\+=\other
+ \catcode `\"=\other
+ \catcode `\|=\other
+ \catcode `\<=\other
+ \catcode `\>=\other
+ \catcode `\`=\other
+ \catcode `\'=\other
+ %
+ % ' is active in math mode (mathcode"8000). So reset it, and all our
+ % other math active characters (just in case), to plain's definitions.
+ \mathactive
+ %
+ % Inverse of the list at the beginning of the file.
+ \let\b=\ptexb
+ \let\bullet=\ptexbullet
+ \let\c=\ptexc
+ \let\,=\ptexcomma
+ \let\.=\ptexdot
+ \let\dots=\ptexdots
+ \let\equiv=\ptexequiv
+ \let\!=\ptexexclam
+ \let\i=\ptexi
+ \let\indent=\ptexindent
+ \let\noindent=\ptexnoindent
+ \let\{=\ptexlbrace
+ \let\+=\tabalign
+ \let\}=\ptexrbrace
+ \let\/=\ptexslash
+ \let\sp=\ptexsp
+ \let\*=\ptexstar
+ %\let\sup=\ptexsup % do not redefine, we want @sup to work in math mode
+ \let\t=\ptext
+ \expandafter \let\csname top\endcsname=\ptextop % we've made it outer
+ \let\frenchspacing=\plainfrenchspacing
+ %
+ \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}%
+ \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}%
+ \def\@{@}%
+}
+% There is no need to define \Etex.
+
+% Define @lisp ... @end lisp.
+% @lisp environment forms a group so it can rebind things,
+% including the definition of @end lisp (which normally is erroneous).
+
+% Amount to narrow the margins by for @lisp.
+\newskip\lispnarrowing \lispnarrowing=0.4in
+
+% This is the definition that ^^M gets inside @lisp, @example, and other
+% such environments. \null is better than a space, since it doesn't
+% have any width.
+\def\lisppar{\null\endgraf}
+
+% This space is always present above and below environments.
+\newskip\envskipamount \envskipamount = 0pt
+
+% Make spacing and below environment symmetrical. We use \parskip here
+% to help in doing that, since in @example-like environments \parskip
+% is reset to zero; thus the \afterenvbreak inserts no space -- but the
+% start of the next paragraph will insert \parskip.
+%
+\def\aboveenvbreak{{%
+ % =10000 instead of <10000 because of a special case in \itemzzz and
+ % \sectionheading, q.v.
+ \ifnum \lastpenalty=10000 \else
+ \advance\envskipamount by \parskip
+ \endgraf
+ \ifdim\lastskip<\envskipamount
+ \removelastskip
+ \ifnum\lastpenalty<10000
+ % Penalize breaking before the environment, because preceding text
+ % often leads into it.
+ \penalty100
+ \fi
+ \vskip\envskipamount
+ \fi
+ \fi
+}}
+
+\def\afterenvbreak{{%
+ % =10000 instead of <10000 because of a special case in \itemzzz and
+ % \sectionheading, q.v.
+ \ifnum \lastpenalty=10000 \else
+ \advance\envskipamount by \parskip
+ \endgraf
+ \ifdim\lastskip<\envskipamount
+ \removelastskip
+ % it's not a good place to break if the last penalty was \nobreak
+ % or better ...
+ \ifnum\lastpenalty<10000 \penalty-50 \fi
+ \vskip\envskipamount
+ \fi
+ \fi
+}}
+
+% \nonarrowing is a flag. If "set", @lisp etc don't narrow margins; it will
+% also clear it, so that its embedded environments do the narrowing again.
+\let\nonarrowing=\relax
+
+% @cartouche ... @end cartouche: draw rectangle w/rounded corners around
+% environment contents.
+
+%
+\def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth
+\def\ctr{{\hskip 6pt\circle\char'010}}
+\def\cbl{{\circle\char'012\hskip -6pt}}
+\def\cbr{{\hskip 6pt\circle\char'011}}
+\def\carttop{\hbox to \cartouter{\hskip\lskip
+ \ctl\leaders\hrule height\circthick\hfil\ctr
+ \hskip\rskip}}
+\def\cartbot{\hbox to \cartouter{\hskip\lskip
+ \cbl\leaders\hrule height\circthick\hfil\cbr
+ \hskip\rskip}}
+%
+\newskip\lskip\newskip\rskip
+
+% only require the font if @cartouche is actually used
+\def\cartouchefontdefs{%
+ \font\circle=lcircle10\relax
+ \circthick=\fontdimen8\circle
+}
+\newdimen\circthick
+\newdimen\cartouter\newdimen\cartinner
+\newskip\normbskip\newskip\normpskip\newskip\normlskip
+
+
+\envdef\cartouche{%
+ \cartouchefontdefs
+ \ifhmode\par\fi % can't be in the midst of a paragraph.
+ \startsavinginserts
+ \lskip=\leftskip \rskip=\rightskip
+ \leftskip=0pt\rightskip=0pt % we want these *outside*.
+ \cartinner=\hsize \advance\cartinner by-\lskip
+ \advance\cartinner by-\rskip
+ \cartouter=\hsize
+ \advance\cartouter by 18.4pt % allow for 3pt kerns on either
+ % side, and for 6pt waste from
+ % each corner char, and rule thickness
+ \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip
+ %
+ % If this cartouche directly follows a sectioning command, we need the
+ % \parskip glue (backspaced over by default) or the cartouche can
+ % collide with the section heading.
+ \ifnum\lastpenalty>10000 \vskip\parskip \penalty\lastpenalty \fi
+ %
+ \setbox\groupbox=\vbox\bgroup
+ \baselineskip=0pt\parskip=0pt\lineskip=0pt
+ \carttop
+ \hbox\bgroup
+ \hskip\lskip
+ \vrule\kern3pt
+ \vbox\bgroup
+ \kern3pt
+ \hsize=\cartinner
+ \baselineskip=\normbskip
+ \lineskip=\normlskip
+ \parskip=\normpskip
+ \vskip -\parskip
+ \comment % For explanation, see the end of def\group.
+}
+\def\Ecartouche{%
+ \ifhmode\par\fi
+ \kern3pt
+ \egroup
+ \kern3pt\vrule
+ \hskip\rskip
+ \egroup
+ \cartbot
+ \egroup
+ \addgroupbox
+ \checkinserts
+}
+
+
+% This macro is called at the beginning of all the @example variants,
+% inside a group.
+\newdimen\nonfillparindent
+\def\nonfillstart{%
+ \aboveenvbreak
+ \ifdim\hfuzz < 12pt \hfuzz = 12pt \fi % Don't be fussy
+ \sepspaces % Make spaces be word-separators rather than space tokens.
+ \let\par = \lisppar % don't ignore blank lines
+ \obeylines % each line of input is a line of output
+ \parskip = 0pt
+ % Turn off paragraph indentation but redefine \indent to emulate
+ % the normal \indent.
+ \nonfillparindent=\parindent
+ \parindent = 0pt
+ \let\indent\nonfillindent
+ %
+ \emergencystretch = 0pt % don't try to avoid overfull boxes
+ \ifx\nonarrowing\relax
+ \advance \leftskip by \lispnarrowing
+ \exdentamount=\lispnarrowing
+ \else
+ \let\nonarrowing = \relax
+ \fi
+ \let\exdent=\nofillexdent
+}
+
+\begingroup
+\obeyspaces
+% We want to swallow spaces (but not other tokens) after the fake
+% @indent in our nonfill-environments, where spaces are normally
+% active and set to @tie, resulting in them not being ignored after
+% @indent.
+\gdef\nonfillindent{\futurelet\temp\nonfillindentcheck}%
+\gdef\nonfillindentcheck{%
+\ifx\temp %
+\expandafter\nonfillindentgobble%
+\else%
+\leavevmode\nonfillindentbox%
+\fi%
+}%
+\endgroup
+\def\nonfillindentgobble#1{\nonfillindent}
+\def\nonfillindentbox{\hbox to \nonfillparindent{\hss}}
+
+% If you want all examples etc. small: @set dispenvsize small.
+% If you want even small examples the full size: @set dispenvsize nosmall.
+% This affects the following displayed environments:
+% @example, @display, @format, @lisp, @verbatim
+%
+\def\smallword{small}
+\def\nosmallword{nosmall}
+\let\SETdispenvsize\relax
+\def\setnormaldispenv{%
+ \ifx\SETdispenvsize\smallword
+ % end paragraph for sake of leading, in case document has no blank
+ % line. This is redundant with what happens in \aboveenvbreak, but
+ % we need to do it before changing the fonts, and it's inconvenient
+ % to change the fonts afterward.
+ \ifnum \lastpenalty=10000 \else \endgraf \fi
+ \smallexamplefonts \rm
+ \fi
+}
+\def\setsmalldispenv{%
+ \ifx\SETdispenvsize\nosmallword
+ \else
+ \ifnum \lastpenalty=10000 \else \endgraf \fi
+ \smallexamplefonts \rm
+ \fi
+}
+
+% We often define two environments, @foo and @smallfoo.
+% Let's do it in one command. #1 is the env name, #2 the definition.
+\def\makedispenvdef#1#2{%
+ \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2}%
+ \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2}%
+ \expandafter\let\csname E#1\endcsname \afterenvbreak
+ \expandafter\let\csname Esmall#1\endcsname \afterenvbreak
+}
+
+% Define two environment synonyms (#1 and #2) for an environment.
+\def\maketwodispenvdef#1#2#3{%
+ \makedispenvdef{#1}{#3}%
+ \makedispenvdef{#2}{#3}%
+}
+%
+% @lisp: indented, narrowed, typewriter font;
+% @example: same as @lisp.
+%
+% @smallexample and @smalllisp: use smaller fonts.
+% Originally contributed by Pavel@xerox.
+%
+\maketwodispenvdef{lisp}{example}{%
+ \nonfillstart
+ \tt\setcodequotes
+ \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special.
+ \parsearg\gobble
+}
+% @display/@smalldisplay: same as @lisp except keep current font.
+%
+\makedispenvdef{display}{%
+ \nonfillstart
+ \gobble
+}
+
+% @format/@smallformat: same as @display except don't narrow margins.
+%
+\makedispenvdef{format}{%
+ \let\nonarrowing = t%
+ \nonfillstart
+ \gobble
+}
+
+% @flushleft: same as @format, but doesn't obey \SETdispenvsize.
+\envdef\flushleft{%
+ \let\nonarrowing = t%
+ \nonfillstart
+ \gobble
+}
+\let\Eflushleft = \afterenvbreak
+
+% @flushright.
+%
+\envdef\flushright{%
+ \let\nonarrowing = t%
+ \nonfillstart
+ \advance\leftskip by 0pt plus 1fill\relax
+ \gobble
+}
+\let\Eflushright = \afterenvbreak
+
+
+% @raggedright does more-or-less normal line breaking but no right
+% justification. From plain.tex.
+\envdef\raggedright{%
+ \rightskip0pt plus2.4em \spaceskip.3333em \xspaceskip.5em\relax
+}
+\let\Eraggedright\par
+
+\envdef\raggedleft{%
+ \parindent=0pt \leftskip0pt plus2em
+ \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt
+ \hbadness=10000 % Last line will usually be underfull, so turn off
+ % badness reporting.
+}
+\let\Eraggedleft\par
+
+\envdef\raggedcenter{%
+ \parindent=0pt \rightskip0pt plus1em \leftskip0pt plus1em
+ \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt
+ \hbadness=10000 % Last line will usually be underfull, so turn off
+ % badness reporting.
+}
+\let\Eraggedcenter\par
+
+
+% @quotation does normal linebreaking (hence we can't use \nonfillstart)
+% and narrows the margins. We keep \parskip nonzero in general, since
+% we're doing normal filling. So, when using \aboveenvbreak and
+% \afterenvbreak, temporarily make \parskip 0.
+%
+\makedispenvdef{quotation}{\quotationstart}
+%
+\def\quotationstart{%
+ \indentedblockstart % same as \indentedblock, but increase right margin too.
+ \ifx\nonarrowing\relax
+ \advance\rightskip by \lispnarrowing
+ \fi
+ \parsearg\quotationlabel
+}
+
+% We have retained a nonzero parskip for the environment, since we're
+% doing normal filling.
+%
+\def\Equotation{%
+ \par
+ \ifx\quotationauthor\thisisundefined\else
+ % indent a bit.
+ \leftline{\kern 2\leftskip \sl ---\quotationauthor}%
+ \fi
+ {\parskip=0pt \afterenvbreak}%
+}
+\def\Esmallquotation{\Equotation}
+
+% If we're given an argument, typeset it in bold with a colon after.
+\def\quotationlabel#1{%
+ \def\temp{#1}%
+ \ifx\temp\empty \else
+ {\bf #1: }%
+ \fi
+}
+
+% @indentedblock is like @quotation, but indents only on the left and
+% has no optional argument.
+%
+\makedispenvdef{indentedblock}{\indentedblockstart}
+%
+\def\indentedblockstart{%
+ {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip
+ \parindent=0pt
+ %
+ % @cartouche defines \nonarrowing to inhibit narrowing at next level down.
+ \ifx\nonarrowing\relax
+ \advance\leftskip by \lispnarrowing
+ \exdentamount = \lispnarrowing
+ \else
+ \let\nonarrowing = \relax
+ \fi
+}
+
+% Keep a nonzero parskip for the environment, since we're doing normal filling.
+%
+\def\Eindentedblock{%
+ \par
+ {\parskip=0pt \afterenvbreak}%
+}
+\def\Esmallindentedblock{\Eindentedblock}
+
+
+% LaTeX-like @verbatim...@end verbatim and @verb{<char>...<char>}
+% If we want to allow any <char> as delimiter,
+% we need the curly braces so that makeinfo sees the @verb command, eg:
+% `@verbx...x' would look like the '@verbx' command. --janneke@gnu.org
+%
+% [Knuth]: Donald Ervin Knuth, 1996. The TeXbook.
+%
+% [Knuth] p.344; only we need to do the other characters Texinfo sets
+% active too. Otherwise, they get lost as the first character on a
+% verbatim line.
+\def\dospecials{%
+ \do\ \do\\\do\{\do\}\do\$\do\&%
+ \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~%
+ \do\<\do\>\do\|\do\@\do+\do\"%
+ % Don't do the quotes -- if we do, @set txicodequoteundirected and
+ % @set txicodequotebacktick will not have effect on @verb and
+ % @verbatim, and ?` and !` ligatures won't get disabled.
+ %\do\`\do\'%
+}
+%
+% [Knuth] p. 380
+\def\uncatcodespecials{%
+ \def\do##1{\catcode`##1=\other}\dospecials}
+%
+% Setup for the @verb command.
+%
+% Eight spaces for a tab
+\begingroup
+ \catcode`\^^I=\active
+ \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }}
+\endgroup
+%
+\def\setupverb{%
+ \tt % easiest (and conventionally used) font for verbatim
+ \def\par{\leavevmode\endgraf}%
+ \setcodequotes
+ \tabeightspaces
+ % Respect line breaks,
+ % print special symbols as themselves, and
+ % make each space count
+ % must do in this order:
+ \obeylines \uncatcodespecials \sepspaces
+}
+
+% Setup for the @verbatim environment
+%
+% Real tab expansion.
+\newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount
+%
+% We typeset each line of the verbatim in an \hbox, so we can handle
+% tabs.
+\newbox\verbbox
+\def\starttabbox{\setbox\verbbox=\hbox\bgroup}
+%
+\begingroup
+ \catcode`\^^I=\active
+ \gdef\tabexpand{%
+ \catcode`\^^I=\active
+ \def^^I{\leavevmode\egroup
+ \dimen\verbbox=\wd\verbbox % the width so far, or since the previous tab
+ \divide\dimen\verbbox by\tabw
+ \multiply\dimen\verbbox by\tabw % compute previous multiple of \tabw
+ \advance\dimen\verbbox by\tabw % advance to next multiple of \tabw
+ \wd\verbbox=\dimen\verbbox
+ \leavevmode\box\verbbox \starttabbox
+ }%
+ }
+\endgroup
+
+% start the verbatim environment.
+\def\setupverbatim{%
+ \let\nonarrowing = t%
+ \nonfillstart
+ \tt % easiest (and conventionally used) font for verbatim
+ \def\par{\egroup\leavevmode\box\verbbox\endgraf\starttabbox}%
+ \tabexpand
+ \setcodequotes
+ % Respect line breaks,
+ % print special symbols as themselves, and
+ % make each space count.
+ % Must do in this order:
+ \obeylines \uncatcodespecials \sepspaces
+}
+
+% Do the @verb magic: verbatim text is quoted by unique
+% delimiter characters. Before first delimiter expect a
+% right brace, after last delimiter expect closing brace:
+%
+% \def\doverb'{'<char>#1<char>'}'{#1}
+%
+% [Knuth] p. 382; only eat outer {}
+\begingroup
+ \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other
+ \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next]
+\endgroup
+%
+\def\verb{\begingroup\setupverb\doverb}
+%
+%
+% Do the @verbatim magic: define the macro \doverbatim so that
+% the (first) argument ends when '@end verbatim' is reached, ie:
+%
+% \def\doverbatim#1@end verbatim{#1}
+%
+% For Texinfo it's a lot easier than for LaTeX,
+% because texinfo's \verbatim doesn't stop at '\end{verbatim}':
+% we need not redefine '\', '{' and '}'.
+%
+% Inspired by LaTeX's verbatim command set [latex.ltx]
+%
+\begingroup
+ \catcode`\ =\active
+ \obeylines %
+ % ignore everything up to the first ^^M, that's the newline at the end
+ % of the @verbatim input line itself. Otherwise we get an extra blank
+ % line in the output.
+ \xdef\doverbatim#1^^M#2@end verbatim{%
+ \starttabbox#2\egroup\noexpand\end\gobble verbatim}%
+ % We really want {...\end verbatim} in the body of the macro, but
+ % without the active space; thus we have to use \xdef and \gobble.
+ % The \egroup ends the \verbbox started at the end of the last line in
+ % the block.
+\endgroup
+%
+\envdef\verbatim{%
+ \setnormaldispenv\setupverbatim\doverbatim
+}
+\let\Everbatim = \afterenvbreak
+
+
+% @verbatiminclude FILE - insert text of file in verbatim environment.
+%
+\def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude}
+%
+\def\doverbatiminclude#1{%
+ {%
+ \makevalueexpandable
+ \setupverbatim
+ {%
+ \indexnofonts % Allow `@@' and other weird things in file names.
+ \wlog{texinfo.tex: doing @verbatiminclude of #1^^J}%
+ \edef\tmp{\noexpand\input #1 }
+ \expandafter
+ }\expandafter\starttabbox\tmp\egroup
+ \afterenvbreak
+ }%
+}
+
+% @copying ... @end copying.
+% Save the text away for @insertcopying later.
+%
+% We save the uninterpreted tokens, rather than creating a box.
+% Saving the text in a box would be much easier, but then all the
+% typesetting commands (@smallbook, font changes, etc.) have to be done
+% beforehand -- and a) we want @copying to be done first in the source
+% file; b) letting users define the frontmatter in as flexible order as
+% possible is desirable.
+%
+\def\copying{\checkenv{}\begingroup\scanargctxt\docopying}
+\def\docopying#1@end copying{\endgroup\def\copyingtext{#1}}
+%
+\def\insertcopying{%
+ \begingroup
+ \parindent = 0pt % paragraph indentation looks wrong on title page
+ \scanexp\copyingtext
+ \endgroup
+}
+
+
+\message{defuns,}
+% @defun etc.
+
+\newskip\defbodyindent \defbodyindent=.4in
+\newskip\defargsindent \defargsindent=50pt
+\newskip\deflastargmargin \deflastargmargin=18pt
+\newcount\defunpenalty
+
+% Start the processing of @deffn:
+\def\startdefun{%
+ \ifnum\lastpenalty<10000
+ \medbreak
+ \defunpenalty=10003 % Will keep this @deffn together with the
+ % following @def command, see below.
+ \else
+ % If there are two @def commands in a row, we'll have a \nobreak,
+ % which is there to keep the function description together with its
+ % header. But if there's nothing but headers, we need to allow a
+ % break somewhere. Check specifically for penalty 10002, inserted
+ % by \printdefunline, instead of 10000, since the sectioning
+ % commands also insert a nobreak penalty, and we don't want to allow
+ % a break between a section heading and a defun.
+ %
+ % As a further refinement, we avoid "club" headers by signalling
+ % with penalty of 10003 after the very first @deffn in the
+ % sequence (see above), and penalty of 10002 after any following
+ % @def command.
+ \ifnum\lastpenalty=10002 \penalty2000 \else \defunpenalty=10002 \fi
+ %
+ % Similarly, after a section heading, do not allow a break.
+ % But do insert the glue.
+ \medskip % preceded by discardable penalty, so not a breakpoint
+ \fi
+ %
+ \parindent=0in
+ \advance\leftskip by \defbodyindent
+ \exdentamount=\defbodyindent
+}
+
+\def\dodefunx#1{%
+ % First, check whether we are in the right environment:
+ \checkenv#1%
+ %
+ % As above, allow line break if we have multiple x headers in a row.
+ % It's not a great place, though.
+ \ifnum\lastpenalty=10002 \penalty3000 \else \defunpenalty=10002 \fi
+ %
+ % And now, it's time to reuse the body of the original defun:
+ \expandafter\gobbledefun#1%
+}
+\def\gobbledefun#1\startdefun{}
+
+% \printdefunline \deffnheader{text}
+%
+\def\printdefunline#1#2{%
+ \begingroup
+ % call \deffnheader:
+ #1#2 \endheader
+ % common ending:
+ \interlinepenalty = 10000
+ \advance\rightskip by 0pt plus 1fil\relax
+ \endgraf
+ \nobreak\vskip -\parskip
+ \penalty\defunpenalty % signal to \startdefun and \dodefunx
+ % Some of the @defun-type tags do not enable magic parentheses,
+ % rendering the following check redundant. But we don't optimize.
+ \checkparencounts
+ \endgroup
+}
+
+\def\Edefun{\endgraf\medbreak}
+
+% \makedefun{deffn} creates \deffn, \deffnx and \Edeffn;
+% the only thing remaining is to define \deffnheader.
+%
+\def\makedefun#1{%
+ \expandafter\let\csname E#1\endcsname = \Edefun
+ \edef\temp{\noexpand\domakedefun
+ \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}%
+ \temp
+}
+
+% \domakedefun \deffn \deffnx \deffnheader { (defn. of \deffnheader) }
+%
+% Define \deffn and \deffnx, without parameters.
+% \deffnheader has to be defined explicitly.
+%
+\def\domakedefun#1#2#3{%
+ \envdef#1{%
+ \startdefun
+ \doingtypefnfalse % distinguish typed functions from all else
+ \parseargusing\activeparens{\printdefunline#3}%
+ }%
+ \def#2{\dodefunx#1}%
+ \def#3%
+}
+
+\newif\ifdoingtypefn % doing typed function?
+\newif\ifrettypeownline % typeset return type on its own line?
+
+% @deftypefnnewline on|off says whether the return type of typed functions
+% are printed on their own line. This affects @deftypefn, @deftypefun,
+% @deftypeop, and @deftypemethod.
+%
+\parseargdef\deftypefnnewline{%
+ \def\temp{#1}%
+ \ifx\temp\onword
+ \expandafter\let\csname SETtxideftypefnnl\endcsname
+ = \empty
+ \else\ifx\temp\offword
+ \expandafter\let\csname SETtxideftypefnnl\endcsname
+ = \relax
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @txideftypefnnl value `\temp',
+ must be on|off}%
+ \fi\fi
+}
+
+% \dosubind {index}{topic}{subtopic}
+%
+% If SUBTOPIC is present, precede it with a space, and call \doind.
+% (At some time during the 20th century, this made a two-level entry in an
+% index such as the operation index. Nobody seemed to notice the change in
+% behaviour though.)
+\def\dosubind#1#2#3{%
+ \def\thirdarg{#3}%
+ \ifx\thirdarg\empty
+ \doind{#1}{#2}%
+ \else
+ \doind{#1}{#2\space#3}%
+ \fi
+}
+
+% Untyped functions:
+
+% @deffn category name args
+\makedefun{deffn}{\deffngeneral{}}
+
+% @deffn category class name args
+\makedefun{defop}#1 {\defopon{#1\ \putwordon}}
+
+% \defopon {category on}class name args
+\def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} }
+
+% \deffngeneral {subind}category name args
+%
+\def\deffngeneral#1#2 #3 #4\endheader{%
+ \dosubind{fn}{\code{#3}}{#1}%
+ \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}%
+}
+
+% Typed functions:
+
+% @deftypefn category type name args
+\makedefun{deftypefn}{\deftypefngeneral{}}
+
+% @deftypeop category class type name args
+\makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}}
+
+% \deftypeopon {category on}class type name args
+\def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} }
+
+% \deftypefngeneral {subind}category type name args
+%
+\def\deftypefngeneral#1#2 #3 #4 #5\endheader{%
+ \dosubind{fn}{\code{#4}}{#1}%
+ \doingtypefntrue
+ \defname{#2}{#3}{#4}\defunargs{#5\unskip}%
+}
+
+% Typed variables:
+
+% @deftypevr category type var args
+\makedefun{deftypevr}{\deftypecvgeneral{}}
+
+% @deftypecv category class type var args
+\makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}}
+
+% \deftypecvof {category of}class type var args
+\def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} }
+
+% \deftypecvgeneral {subind}category type var args
+%
+\def\deftypecvgeneral#1#2 #3 #4 #5\endheader{%
+ \dosubind{vr}{\code{#4}}{#1}%
+ \defname{#2}{#3}{#4}\defunargs{#5\unskip}%
+}
+
+% Untyped variables:
+
+% @defvr category var args
+\makedefun{defvr}#1 {\deftypevrheader{#1} {} }
+
+% @defcv category class var args
+\makedefun{defcv}#1 {\defcvof{#1\ \putwordof}}
+
+% \defcvof {category of}class var args
+\def\defcvof#1#2 {\deftypecvof{#1}#2 {} }
+
+% Types:
+
+% @deftp category name args
+\makedefun{deftp}#1 #2 #3\endheader{%
+ \doind{tp}{\code{#2}}%
+ \defname{#1}{}{#2}\defunargs{#3\unskip}%
+}
+
+% Remaining @defun-like shortcuts:
+\makedefun{defun}{\deffnheader{\putwordDeffunc} }
+\makedefun{defmac}{\deffnheader{\putwordDefmac} }
+\makedefun{defspec}{\deffnheader{\putwordDefspec} }
+\makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} }
+\makedefun{defvar}{\defvrheader{\putwordDefvar} }
+\makedefun{defopt}{\defvrheader{\putwordDefopt} }
+\makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} }
+\makedefun{defmethod}{\defopon\putwordMethodon}
+\makedefun{deftypemethod}{\deftypeopon\putwordMethodon}
+\makedefun{defivar}{\defcvof\putwordInstanceVariableof}
+\makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof}
+
+% \defname, which formats the name of the @def (not the args).
+% #1 is the category, such as "Function".
+% #2 is the return type, if any.
+% #3 is the function name.
+%
+% We are followed by (but not passed) the arguments, if any.
+%
+\def\defname#1#2#3{%
+ \par
+ % Get the values of \leftskip and \rightskip as they were outside the @def...
+ \advance\leftskip by -\defbodyindent
+ %
+ % Determine if we are typesetting the return type of a typed function
+ % on a line by itself.
+ \rettypeownlinefalse
+ \ifdoingtypefn % doing a typed function specifically?
+ % then check user option for putting return type on its own line:
+ \expandafter\ifx\csname SETtxideftypefnnl\endcsname\relax \else
+ \rettypeownlinetrue
+ \fi
+ \fi
+ %
+ % How we'll format the category name. Putting it in brackets helps
+ % distinguish it from the body text that may end up on the next line
+ % just below it.
+ \def\temp{#1}%
+ \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi}
+ %
+ % Figure out line sizes for the paragraph shape. We'll always have at
+ % least two.
+ \tempnum = 2
+ %
+ % The first line needs space for \box0; but if \rightskip is nonzero,
+ % we need only space for the part of \box0 which exceeds it:
+ \dimen0=\hsize \advance\dimen0 by -\wd0 \advance\dimen0 by \rightskip
+ %
+ % If doing a return type on its own line, we'll have another line.
+ \ifrettypeownline
+ \advance\tempnum by 1
+ \def\maybeshapeline{0in \hsize}%
+ \else
+ \def\maybeshapeline{}%
+ \fi
+ %
+ % The continuations:
+ \dimen2=\hsize \advance\dimen2 by -\defargsindent
+ %
+ % The final paragraph shape:
+ \parshape \tempnum 0in \dimen0 \maybeshapeline \defargsindent \dimen2
+ %
+ % Put the category name at the right margin.
+ \noindent
+ \hbox to 0pt{%
+ \hfil\box0 \kern-\hsize
+ % \hsize has to be shortened this way:
+ \kern\leftskip
+ % Intentionally do not respect \rightskip, since we need the space.
+ }%
+ %
+ % Allow all lines to be underfull without complaint:
+ \tolerance=10000 \hbadness=10000
+ \exdentamount=\defbodyindent
+ {%
+ % defun fonts. We use typewriter by default (used to be bold) because:
+ % . we're printing identifiers, they should be in tt in principle.
+ % . in languages with many accents, such as Czech or French, it's
+ % common to leave accents off identifiers. The result looks ok in
+ % tt, but exceedingly strange in rm.
+ % . we don't want -- and --- to be treated as ligatures.
+ % . this still does not fix the ?` and !` ligatures, but so far no
+ % one has made identifiers using them :).
+ \df \tt
+ \def\temp{#2}% text of the return type
+ \ifx\temp\empty\else
+ \tclose{\temp}% typeset the return type
+ \ifrettypeownline
+ % put return type on its own line; prohibit line break following:
+ \hfil\vadjust{\nobreak}\break
+ \else
+ \space % type on same line, so just followed by a space
+ \fi
+ \fi % no return type
+ #3% output function name
+ }%
+ {\rm\enskip}% hskip 0.5 em of \rmfont
+ %
+ \boldbrax
+ % arguments will be output next, if any.
+}
+
+% Print arguments in slanted roman (not ttsl), inconsistently with using
+% tt for the name. This is because literal text is sometimes needed in
+% the argument list (groff manual), and ttsl and tt are not very
+% distinguishable. Prevent hyphenation at `-' chars.
+%
+\def\defunargs#1{%
+ % use sl by default (not ttsl),
+ % tt for the names.
+ \df \sl \hyphenchar\font=0
+ %
+ % On the other hand, if an argument has two dashes (for instance), we
+ % want a way to get ttsl. We used to recommend @var for that, so
+ % leave the code in, but it's strange for @var to lead to typewriter.
+ % Nowadays we recommend @code, since the difference between a ttsl hyphen
+ % and a tt hyphen is pretty tiny. @code also disables ?` !`.
+ \def\var##1{{\setregularquotes\ttslanted{##1}}}%
+ #1%
+ \sl\hyphenchar\font=45
+}
+
+% We want ()&[] to print specially on the defun line.
+%
+\def\activeparens{%
+ \catcode`\(=\active \catcode`\)=\active
+ \catcode`\[=\active \catcode`\]=\active
+ \catcode`\&=\active
+}
+
+% Make control sequences which act like normal parenthesis chars.
+\let\lparen = ( \let\rparen = )
+
+% Be sure that we always have a definition for `(', etc. For example,
+% if the fn name has parens in it, \boldbrax will not be in effect yet,
+% so TeX would otherwise complain about undefined control sequence.
+{
+ \activeparens
+ \global\let(=\lparen \global\let)=\rparen
+ \global\let[=\lbrack \global\let]=\rbrack
+ \global\let& = \&
+
+ \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}
+ \gdef\magicamp{\let&=\amprm}
+}
+\let\ampchar\&
+
+\newcount\parencount
+
+% If we encounter &foo, then turn on ()-hacking afterwards
+\newif\ifampseen
+\def\amprm#1 {\ampseentrue{\bf\&#1 }}
+
+\def\parenfont{%
+ \ifampseen
+ % At the first level, print parens in roman,
+ % otherwise use the default font.
+ \ifnum \parencount=1 \rm \fi
+ \else
+ % The \sf parens (in \boldbrax) actually are a little bolder than
+ % the contained text. This is especially needed for [ and ] .
+ \sf
+ \fi
+}
+\def\infirstlevel#1{%
+ \ifampseen
+ \ifnum\parencount=1
+ #1%
+ \fi
+ \fi
+}
+\def\bfafterword#1 {#1 \bf}
+
+\def\opnr{%
+ \global\advance\parencount by 1
+ {\parenfont(}%
+ \infirstlevel \bfafterword
+}
+\def\clnr{%
+ {\parenfont)}%
+ \infirstlevel \sl
+ \global\advance\parencount by -1
+}
+
+\newcount\brackcount
+\def\lbrb{%
+ \global\advance\brackcount by 1
+ {\bf[}%
+}
+\def\rbrb{%
+ {\bf]}%
+ \global\advance\brackcount by -1
+}
+
+\def\checkparencounts{%
+ \ifnum\parencount=0 \else \badparencount \fi
+ \ifnum\brackcount=0 \else \badbrackcount \fi
+}
+% these should not use \errmessage; the glibc manual, at least, actually
+% has such constructs (when documenting function pointers).
+\def\badparencount{%
+ \message{Warning: unbalanced parentheses in @def...}%
+ \global\parencount=0
+}
+\def\badbrackcount{%
+ \message{Warning: unbalanced square brackets in @def...}%
+ \global\brackcount=0
+}
+
+
+\message{macros,}
+% @macro.
+
+% To do this right we need a feature of e-TeX, \scantokens,
+% which we arrange to emulate with a temporary file in ordinary TeX.
+\ifx\eTeXversion\thisisundefined
+ \newwrite\macscribble
+ \def\scantokens#1{%
+ \toks0={#1}%
+ \immediate\openout\macscribble=\jobname.tmp
+ \immediate\write\macscribble{\the\toks0}%
+ \immediate\closeout\macscribble
+ \input \jobname.tmp
+ }
+\fi
+
+\let\E=\expandafter
+
+% Used at the time of macro expansion.
+% Argument is macro body with arguments substituted
+\def\scanmacro#1{%
+ \newlinechar`\^^M
+ % expand the expansion of \eatleadingcr twice to maybe remove a leading
+ % newline (and \else and \fi tokens), then call \eatspaces on the result.
+ \def\xeatspaces##1{%
+ \E\E\E\E\E\E\E\eatspaces\E\E\E\E\E\E\E{\eatleadingcr##1%
+ }}%
+ \def\xempty##1{}%
+ %
+ % Process the macro body under the current catcode regime.
+ \scantokens{#1@comment}%
+ %
+ % The \comment is to remove the \newlinechar added by \scantokens, and
+ % can be noticed by \parsearg. Note \c isn't used because this means cedilla
+ % in math mode.
+}
+
+% Used for copying and captions
+\def\scanexp#1{%
+ \expandafter\scanmacro\expandafter{#1}%
+}
+
+\newcount\paramno % Count of parameters
+\newtoks\macname % Macro name
+\newif\ifrecursive % Is it recursive?
+
+% List of all defined macros in the form
+% \commondummyword\macro1\commondummyword\macro2...
+% Currently is also contains all @aliases; the list can be split
+% if there is a need.
+\def\macrolist{}
+
+% Add the macro to \macrolist
+\def\addtomacrolist#1{\expandafter \addtomacrolistxxx \csname#1\endcsname}
+\def\addtomacrolistxxx#1{%
+ \toks0 = \expandafter{\macrolist\commondummyword#1}%
+ \xdef\macrolist{\the\toks0}%
+}
+
+% Utility routines.
+% This does \let #1 = #2, with \csnames; that is,
+% \let \csname#1\endcsname = \csname#2\endcsname
+% (except of course we have to play expansion games).
+%
+\def\cslet#1#2{%
+ \expandafter\let
+ \csname#1\expandafter\endcsname
+ \csname#2\endcsname
+}
+
+% Trim leading and trailing spaces off a string.
+% Concepts from aro-bend problem 15 (see CTAN).
+{\catcode`\@=11
+\gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }}
+\gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@}
+\gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @}
+\def\unbrace#1{#1}
+\unbrace{\gdef\trim@@@ #1 } #2@{#1}
+}
+
+{\catcode`\^^M=\other%
+\gdef\eatleadingcr#1{\if\noexpand#1\noexpand^^M\else\E#1\fi}}%
+% Warning: this won't work for a delimited argument
+% or for an empty argument
+
+% Trim a single trailing ^^M off a string.
+{\catcode`\^^M=\other \catcode`\Q=3%
+\gdef\eatcr #1{\eatcra #1Q^^MQ}%
+\gdef\eatcra#1^^MQ{\eatcrb#1Q}%
+\gdef\eatcrb#1Q#2Q{#1}%
+}
+
+% Macro bodies are absorbed as an argument in a context where
+% all characters are catcode 10, 11 or 12, except \ which is active
+% (as in normal texinfo). It is necessary to change the definition of \
+% to recognize macro arguments; this is the job of \mbodybackslash.
+%
+% Non-ASCII encodings make 8-bit characters active, so un-activate
+% them to avoid their expansion. Must do this non-globally, to
+% confine the change to the current group.
+%
+% It's necessary to have hard CRs when the macro is executed. This is
+% done by making ^^M (\endlinechar) catcode 12 when reading the macro
+% body, and then making it the \newlinechar in \scanmacro.
+%
+\def\scanctxt{% used as subroutine
+ \catcode`\"=\other
+ \catcode`\+=\other
+ \catcode`\<=\other
+ \catcode`\>=\other
+ \catcode`\^=\other
+ \catcode`\_=\other
+ \catcode`\|=\other
+ \catcode`\~=\other
+ \passthroughcharstrue
+}
+
+\def\scanargctxt{% used for copying and captions, not macros.
+ \scanctxt
+ \catcode`\@=\other
+ \catcode`\\=\other
+ \catcode`\^^M=\other
+}
+
+\def\macrobodyctxt{% used for @macro definitions
+ \scanctxt
+ \catcode`\ =\other
+ \catcode`\@=\other
+ \catcode`\{=\other
+ \catcode`\}=\other
+ \catcode`\^^M=\other
+ \usembodybackslash
+}
+
+% Used when scanning braced macro arguments. Note, however, that catcode
+% changes here are ineffectual if the macro invocation was nested inside
+% an argument to another Texinfo command.
+\def\macroargctxt{%
+ \scanctxt
+ \catcode`\ =\active
+ \catcode`\@=\other
+ \catcode`\^^M=\other
+ \catcode`\\=\active
+}
+
+\def\macrolineargctxt{% used for whole-line arguments without braces
+ \scanctxt
+ \catcode`\@=\other
+ \catcode`\{=\other
+ \catcode`\}=\other
+}
+
+% \mbodybackslash is the definition of \ in @macro bodies.
+% It maps \foo\ => \csname macarg.foo\endcsname => #N
+% where N is the macro parameter number.
+% We define \csname macarg.\endcsname to be \realbackslash, so
+% \\ in macro replacement text gets you a backslash.
+%
+{\catcode`@=0 @catcode`@\=@active
+ @gdef@usembodybackslash{@let\=@mbodybackslash}
+ @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname}
+}
+\expandafter\def\csname macarg.\endcsname{\realbackslash}
+
+\def\margbackslash#1{\char`\#1 }
+
+\def\macro{\recursivefalse\parsearg\macroxxx}
+\def\rmacro{\recursivetrue\parsearg\macroxxx}
+
+\def\macroxxx#1{%
+ \getargs{#1}% now \macname is the macname and \argl the arglist
+ \ifx\argl\empty % no arguments
+ \paramno=0\relax
+ \else
+ \expandafter\parsemargdef \argl;%
+ \if\paramno>256\relax
+ \ifx\eTeXversion\thisisundefined
+ \errhelp = \EMsimple
+ \errmessage{You need eTeX to compile a file with macros with more than 256 arguments}
+ \fi
+ \fi
+ \fi
+ \if1\csname ismacro.\the\macname\endcsname
+ \message{Warning: redefining \the\macname}%
+ \else
+ \expandafter\ifx\csname \the\macname\endcsname \relax
+ \else \errmessage{Macro name \the\macname\space already defined}\fi
+ \global\cslet{macsave.\the\macname}{\the\macname}%
+ \global\expandafter\let\csname ismacro.\the\macname\endcsname=1%
+ \addtomacrolist{\the\macname}%
+ \fi
+ \begingroup \macrobodyctxt
+ \ifrecursive \expandafter\parsermacbody
+ \else \expandafter\parsemacbody
+ \fi}
+
+\parseargdef\unmacro{%
+ \if1\csname ismacro.#1\endcsname
+ \global\cslet{#1}{macsave.#1}%
+ \global\expandafter\let \csname ismacro.#1\endcsname=0%
+ % Remove the macro name from \macrolist:
+ \begingroup
+ \expandafter\let\csname#1\endcsname \relax
+ \let\commondummyword\unmacrodo
+ \xdef\macrolist{\macrolist}%
+ \endgroup
+ \else
+ \errmessage{Macro #1 not defined}%
+ \fi
+}
+
+% Called by \do from \dounmacro on each macro. The idea is to omit any
+% macro definitions that have been changed to \relax.
+%
+\def\unmacrodo#1{%
+ \ifx #1\relax
+ % remove this
+ \else
+ \noexpand\commondummyword \noexpand#1%
+ \fi
+}
+
+% \getargs -- Parse the arguments to a @macro line. Set \macname to
+% the name of the macro, and \argl to the braced argument list.
+\def\getargs#1{\getargsxxx#1{}}
+\def\getargsxxx#1#{\getmacname #1 \relax\getmacargs}
+\def\getmacname#1 #2\relax{\macname={#1}}
+\def\getmacargs#1{\def\argl{#1}}
+% This made use of the feature that if the last token of a
+% <parameter list> is #, then the preceding argument is delimited by
+% an opening brace, and that opening brace is not consumed.
+
+% Parse the optional {params} list to @macro or @rmacro.
+% Set \paramno to the number of arguments,
+% and \paramlist to a parameter text for the macro (e.g. #1,#2,#3 for a
+% three-param macro.) Define \macarg.BLAH for each BLAH in the params
+% list to some hook where the argument is to be expanded. If there are
+% less than 10 arguments that hook is to be replaced by ##N where N
+% is the position in that list, that is to say the macro arguments are to be
+% defined `a la TeX in the macro body.
+%
+% That gets used by \mbodybackslash (above).
+%
+% If there are 10 or more arguments, a different technique is used: see
+% \parsemmanyargdef.
+%
+\def\parsemargdef#1;{%
+ \paramno=0\def\paramlist{}%
+ \let\hash\relax
+ % \hash is redefined to `#' later to get it into definitions
+ \let\xeatspaces\relax
+ \let\xempty\relax
+ \parsemargdefxxx#1,;,%
+ \ifnum\paramno<10\relax\else
+ \paramno0\relax
+ \parsemmanyargdef@@#1,;,% 10 or more arguments
+ \fi
+}
+\def\parsemargdefxxx#1,{%
+ \if#1;\let\next=\relax
+ \else \let\next=\parsemargdefxxx
+ \advance\paramno by 1
+ \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname
+ {\xeatspaces{\hash\the\paramno\noexpand\xempty{}}}%
+ \edef\paramlist{\paramlist\hash\the\paramno,}%
+ \fi\next}
+% the \xempty{} is to give \eatleadingcr an argument in the case of an
+% empty macro argument.
+
+% \parsemacbody, \parsermacbody
+%
+% Read recursive and nonrecursive macro bodies. (They're different since
+% rec and nonrec macros end differently.)
+%
+% We are in \macrobodyctxt, and the \xdef causes backslashshes in the macro
+% body to be transformed.
+% Set \macrobody to the body of the macro, and call \defmacro.
+%
+{\catcode`\ =\other\long\gdef\parsemacbody#1@end macro{%
+\xdef\macrobody{\eatcr{#1}}\endgroup\defmacro}}%
+{\catcode`\ =\other\long\gdef\parsermacbody#1@end rmacro{%
+\xdef\macrobody{\eatcr{#1}}\endgroup\defmacro}}%
+
+% Make @ a letter, so that we can make private-to-Texinfo macro names.
+\edef\texiatcatcode{\the\catcode`\@}
+\catcode `@=11\relax
+
+%%%%%%%%%%%%%% Code for > 10 arguments only %%%%%%%%%%%%%%%%%%
+
+% If there are 10 or more arguments, a different technique is used, where the
+% hook remains in the body, and when macro is to be expanded the body is
+% processed again to replace the arguments.
+%
+% In that case, the hook is \the\toks N-1, and we simply set \toks N-1 to the
+% argument N value and then \edef the body (nothing else will expand because of
+% the catcode regime under which the body was input).
+%
+% If you compile with TeX (not eTeX), and you have macros with 10 or more
+% arguments, no macro can have more than 256 arguments (else error).
+%
+% In case that there are 10 or more arguments we parse again the arguments
+% list to set new definitions for the \macarg.BLAH macros corresponding to
+% each BLAH argument. It was anyhow needed to parse already once this list
+% in order to count the arguments, and as macros with at most 9 arguments
+% are by far more frequent than macro with 10 or more arguments, defining
+% twice the \macarg.BLAH macros does not cost too much processing power.
+\def\parsemmanyargdef@@#1,{%
+ \if#1;\let\next=\relax
+ \else
+ \let\next=\parsemmanyargdef@@
+ \edef\tempb{\eatspaces{#1}}%
+ \expandafter\def\expandafter\tempa
+ \expandafter{\csname macarg.\tempb\endcsname}%
+ % Note that we need some extra \noexpand\noexpand, this is because we
+ % don't want \the to be expanded in the \parsermacbody as it uses an
+ % \xdef .
+ \expandafter\edef\tempa
+ {\noexpand\noexpand\noexpand\the\toks\the\paramno}%
+ \advance\paramno by 1\relax
+ \fi\next}
+
+
+\let\endargs@\relax
+\let\nil@\relax
+\def\nilm@{\nil@}%
+\long\def\nillm@{\nil@}%
+
+% This macro is expanded during the Texinfo macro expansion, not during its
+% definition. It gets all the arguments' values and assigns them to macros
+% macarg.ARGNAME
+%
+% #1 is the macro name
+% #2 is the list of argument names
+% #3 is the list of argument values
+\def\getargvals@#1#2#3{%
+ \def\macargdeflist@{}%
+ \def\saveparamlist@{#2}% Need to keep a copy for parameter expansion.
+ \def\paramlist{#2,\nil@}%
+ \def\macroname{#1}%
+ \begingroup
+ \macroargctxt
+ \def\argvaluelist{#3,\nil@}%
+ \def\@tempa{#3}%
+ \ifx\@tempa\empty
+ \setemptyargvalues@
+ \else
+ \getargvals@@
+ \fi
+}
+\def\getargvals@@{%
+ \ifx\paramlist\nilm@
+ % Some sanity check needed here that \argvaluelist is also empty.
+ \ifx\argvaluelist\nillm@
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Too many arguments in macro `\macroname'!}%
+ \fi
+ \let\next\macargexpandinbody@
+ \else
+ \ifx\argvaluelist\nillm@
+ % No more arguments values passed to macro. Set remaining named-arg
+ % macros to empty.
+ \let\next\setemptyargvalues@
+ \else
+ % pop current arg name into \@tempb
+ \def\@tempa##1{\pop@{\@tempb}{\paramlist}##1\endargs@}%
+ \expandafter\@tempa\expandafter{\paramlist}%
+ % pop current argument value into \@tempc
+ \def\@tempa##1{\longpop@{\@tempc}{\argvaluelist}##1\endargs@}%
+ \expandafter\@tempa\expandafter{\argvaluelist}%
+ % Here \@tempb is the current arg name and \@tempc is the current arg value.
+ % First place the new argument macro definition into \@tempd
+ \expandafter\macname\expandafter{\@tempc}%
+ \expandafter\let\csname macarg.\@tempb\endcsname\relax
+ \expandafter\def\expandafter\@tempe\expandafter{%
+ \csname macarg.\@tempb\endcsname}%
+ \edef\@tempd{\long\def\@tempe{\the\macname}}%
+ \push@\@tempd\macargdeflist@
+ \let\next\getargvals@@
+ \fi
+ \fi
+ \next
+}
+
+\def\push@#1#2{%
+ \expandafter\expandafter\expandafter\def
+ \expandafter\expandafter\expandafter#2%
+ \expandafter\expandafter\expandafter{%
+ \expandafter#1#2}%
+}
+
+% Replace arguments by their values in the macro body, and place the result
+% in macro \@tempa.
+%
+\def\macvalstoargs@{%
+ % To do this we use the property that token registers that are \the'ed
+ % within an \edef expand only once. So we are going to place all argument
+ % values into respective token registers.
+ %
+ % First we save the token context, and initialize argument numbering.
+ \begingroup
+ \paramno0\relax
+ % Then, for each argument number #N, we place the corresponding argument
+ % value into a new token list register \toks#N
+ \expandafter\putargsintokens@\saveparamlist@,;,%
+ % Then, we expand the body so that argument are replaced by their
+ % values. The trick for values not to be expanded themselves is that they
+ % are within tokens and that tokens expand only once in an \edef .
+ \edef\@tempc{\csname mac.\macroname .body\endcsname}%
+ % Now we restore the token stack pointer to free the token list registers
+ % which we have used, but we make sure that expanded body is saved after
+ % group.
+ \expandafter
+ \endgroup
+ \expandafter\def\expandafter\@tempa\expandafter{\@tempc}%
+ }
+
+% Define the named-macro outside of this group and then close this group.
+%
+\def\macargexpandinbody@{%
+ \expandafter
+ \endgroup
+ \macargdeflist@
+ % First the replace in body the macro arguments by their values, the result
+ % is in \@tempa .
+ \macvalstoargs@
+ % Then we point at the \norecurse or \gobble (for recursive) macro value
+ % with \@tempb .
+ \expandafter\let\expandafter\@tempb\csname mac.\macroname .recurse\endcsname
+ % Depending on whether it is recursive or not, we need some tailing
+ % \egroup .
+ \ifx\@tempb\gobble
+ \let\@tempc\relax
+ \else
+ \let\@tempc\egroup
+ \fi
+ % And now we do the real job:
+ \edef\@tempd{\noexpand\@tempb{\macroname}\noexpand\scanmacro{\@tempa}\@tempc}%
+ \@tempd
+}
+
+\def\putargsintokens@#1,{%
+ \if#1;\let\next\relax
+ \else
+ \let\next\putargsintokens@
+ % First we allocate the new token list register, and give it a temporary
+ % alias \@tempb .
+ \toksdef\@tempb\the\paramno
+ % Then we place the argument value into that token list register.
+ \expandafter\let\expandafter\@tempa\csname macarg.#1\endcsname
+ \expandafter\@tempb\expandafter{\@tempa}%
+ \advance\paramno by 1\relax
+ \fi
+ \next
+}
+
+% Trailing missing arguments are set to empty.
+%
+\def\setemptyargvalues@{%
+ \ifx\paramlist\nilm@
+ \let\next\macargexpandinbody@
+ \else
+ \expandafter\setemptyargvaluesparser@\paramlist\endargs@
+ \let\next\setemptyargvalues@
+ \fi
+ \next
+}
+
+\def\setemptyargvaluesparser@#1,#2\endargs@{%
+ \expandafter\def\expandafter\@tempa\expandafter{%
+ \expandafter\def\csname macarg.#1\endcsname{}}%
+ \push@\@tempa\macargdeflist@
+ \def\paramlist{#2}%
+}
+
+% #1 is the element target macro
+% #2 is the list macro
+% #3,#4\endargs@ is the list value
+\def\pop@#1#2#3,#4\endargs@{%
+ \def#1{#3}%
+ \def#2{#4}%
+}
+\long\def\longpop@#1#2#3,#4\endargs@{%
+ \long\def#1{#3}%
+ \long\def#2{#4}%
+}
+
+
+%%%%%%%%%%%%%% End of code for > 10 arguments %%%%%%%%%%%%%%%%%%
+
+
+% This defines a Texinfo @macro or @rmacro, called by \parsemacbody.
+% \macrobody has the body of the macro in it, with placeholders for
+% its parameters, looking like "\xeatspaces{\hash 1}".
+% \paramno is the number of parameters
+% \paramlist is a TeX parameter text, e.g. "#1,#2,#3,"
+% There are four cases: macros of zero, one, up to nine, and many arguments.
+% \xdef is used so that macro definitions will survive the file
+% they're defined in: @include reads the file inside a group.
+%
+\def\defmacro{%
+ \let\hash=##% convert placeholders to macro parameter chars
+ \ifnum\paramno=1
+ \def\xeatspaces##1{##1}%
+ % This removes the pair of braces around the argument. We don't
+ % use \eatspaces, because this can cause ends of lines to be lost
+ % when the argument to \eatspaces is read, leading to line-based
+ % commands like "@itemize" not being read correctly.
+ \else
+ \let\xeatspaces\relax % suppress expansion
+ \fi
+ \ifcase\paramno
+ % 0
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \bgroup
+ \noexpand\spaceisspace
+ \noexpand\endlineisspace
+ \noexpand\expandafter % skip any whitespace after the macro name.
+ \expandafter\noexpand\csname\the\macname @@@\endcsname}%
+ \expandafter\xdef\csname\the\macname @@@\endcsname{%
+ \egroup
+ \noexpand\scanmacro{\macrobody}}%
+ \or % 1
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \bgroup
+ \noexpand\braceorline
+ \expandafter\noexpand\csname\the\macname @@@\endcsname}%
+ \expandafter\xdef\csname\the\macname @@@\endcsname##1{%
+ \egroup
+ \noexpand\scanmacro{\macrobody}%
+ }%
+ \else % at most 9
+ \ifnum\paramno<10\relax
+ % @MACNAME sets the context for reading the macro argument
+ % @MACNAME@@ gets the argument, processes backslashes and appends a
+ % comma.
+ % @MACNAME@@@ removes braces surrounding the argument list.
+ % @MACNAME@@@@ scans the macro body with arguments substituted.
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \bgroup
+ \noexpand\expandafter % This \expandafter skip any spaces after the
+ \noexpand\macroargctxt % macro before we change the catcode of space.
+ \noexpand\expandafter
+ \expandafter\noexpand\csname\the\macname @@\endcsname}%
+ \expandafter\xdef\csname\the\macname @@\endcsname##1{%
+ \noexpand\passargtomacro
+ \expandafter\noexpand\csname\the\macname @@@\endcsname{##1,}}%
+ \expandafter\xdef\csname\the\macname @@@\endcsname##1{%
+ \expandafter\noexpand\csname\the\macname @@@@\endcsname ##1}%
+ \expandafter\expandafter
+ \expandafter\xdef
+ \expandafter\expandafter
+ \csname\the\macname @@@@\endcsname\paramlist{%
+ \egroup\noexpand\scanmacro{\macrobody}}%
+ \else % 10 or more:
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \noexpand\getargvals@{\the\macname}{\argl}%
+ }%
+ \global\expandafter\let\csname mac.\the\macname .body\endcsname\macrobody
+ \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\gobble
+ \fi
+ \fi}
+
+\catcode `\@\texiatcatcode\relax % end private-to-Texinfo catcodes
+
+\def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+{\catcode`\@=0 \catcode`\\=13 % We need to manipulate \ so use @ as escape
+@catcode`@_=11 % private names
+@catcode`@!=11 % used as argument separator
+
+% \passargtomacro#1#2 -
+% Call #1 with a list of tokens #2, with any doubled backslashes in #2
+% compressed to one.
+%
+% This implementation works by expansion, and not execution (so we cannot use
+% \def or similar). This reduces the risk of this failing in contexts where
+% complete expansion is done with no execution (for example, in writing out to
+% an auxiliary file for an index entry).
+%
+% State is kept in the input stream: the argument passed to
+% @look_ahead, @gobble_and_check_finish and @add_segment is
+%
+% THE_MACRO ARG_RESULT ! {PENDING_BS} NEXT_TOKEN (... rest of input)
+%
+% where:
+% THE_MACRO - name of the macro we want to call
+% ARG_RESULT - argument list we build to pass to that macro
+% PENDING_BS - either a backslash or nothing
+% NEXT_TOKEN - used to look ahead in the input stream to see what's coming next
+
+@gdef@passargtomacro#1#2{%
+ @add_segment #1!{}@relax#2\@_finish\%
+}
+@gdef@_finish{@_finishx} @global@let@_finishx@relax
+
+% #1 - THE_MACRO ARG_RESULT
+% #2 - PENDING_BS
+% #3 - NEXT_TOKEN
+% #4 used to look ahead
+%
+% If the next token is not a backslash, process the rest of the argument;
+% otherwise, remove the next token.
+@gdef@look_ahead#1!#2#3#4{%
+ @ifx#4\%
+ @expandafter@gobble_and_check_finish
+ @else
+ @expandafter@add_segment
+ @fi#1!{#2}#4#4%
+}
+
+% #1 - THE_MACRO ARG_RESULT
+% #2 - PENDING_BS
+% #3 - NEXT_TOKEN
+% #4 should be a backslash, which is gobbled.
+% #5 looks ahead
+%
+% Double backslash found. Add a single backslash, and look ahead.
+@gdef@gobble_and_check_finish#1!#2#3#4#5{%
+ @add_segment#1\!{}#5#5%
+}
+
+@gdef@is_fi{@fi}
+
+% #1 - THE_MACRO ARG_RESULT
+% #2 - PENDING_BS
+% #3 - NEXT_TOKEN
+% #4 is input stream until next backslash
+%
+% Input stream is either at the start of the argument, or just after a
+% backslash sequence, either a lone backslash, or a doubled backslash.
+% NEXT_TOKEN contains the first token in the input stream: if it is \finish,
+% finish; otherwise, append to ARG_RESULT the segment of the argument up until
+% the next backslash. PENDING_BACKSLASH contains a backslash to represent
+% a backslash just before the start of the input stream that has not been
+% added to ARG_RESULT.
+@gdef@add_segment#1!#2#3#4\{%
+@ifx#3@_finish
+ @call_the_macro#1!%
+@else
+ % append the pending backslash to the result, followed by the next segment
+ @expandafter@is_fi@look_ahead#1#2#4!{\}@fi
+ % this @fi is discarded by @look_ahead.
+ % we can't get rid of it with \expandafter because we don't know how
+ % long #4 is.
+}
+
+% #1 - THE_MACRO
+% #2 - ARG_RESULT
+% #3 discards the res of the conditional in @add_segment, and @is_fi ends the
+% conditional.
+@gdef@call_the_macro#1#2!#3@fi{@is_fi #1{#2}}
+
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% \braceorline MAC is used for a one-argument macro MAC. It checks
+% whether the next non-whitespace character is a {. It sets the context
+% for reading the argument (slightly different in the two cases). Then,
+% to read the argument, in the whole-line case, it then calls the regular
+% \parsearg MAC; in the lbrace case, it calls \passargtomacro MAC.
+%
+\def\braceorline#1{\let\macnamexxx=#1\futurelet\nchar\braceorlinexxx}
+\def\braceorlinexxx{%
+ \ifx\nchar\bgroup
+ \macroargctxt
+ \expandafter\passargtomacro
+ \else
+ \macrolineargctxt\expandafter\parsearg
+ \fi \macnamexxx}
+
+
+% @alias.
+% We need some trickery to remove the optional spaces around the equal
+% sign. Make them active and then expand them all to nothing.
+%
+\def\alias{\parseargusing\obeyspaces\aliasxxx}
+\def\aliasxxx #1{\aliasyyy#1\relax}
+\def\aliasyyy #1=#2\relax{%
+ {%
+ \expandafter\let\obeyedspace=\empty
+ \addtomacrolist{#1}%
+ \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}%
+ }%
+ \next
+}
+
+
+\message{cross references,}
+
+\newwrite\auxfile
+\newif\ifhavexrefs % True if xref values are known.
+\newif\ifwarnedxrefs % True if we warned once that they aren't known.
+
+% @inforef is relatively simple.
+\def\inforef #1{\inforefzzz #1,,,,**}
+\def\inforefzzz #1,#2,#3,#4**{%
+ \putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}},
+ node \samp{\ignorespaces#1{}}}
+
+% @node's only job in TeX is to define \lastnode, which is used in
+% cross-references. The @node line might or might not have commas, and
+% might or might not have spaces before the first comma, like:
+% @node foo , bar , ...
+% We don't want such trailing spaces in the node name.
+%
+\parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse}
+%
+% also remove a trailing comma, in case of something like this:
+% @node Help-Cross, , , Cross-refs
+\def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse}
+\def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}\omittopnode}
+
+% Used so that the @top node doesn't have to be wrapped in an @ifnottex
+% conditional.
+% \doignore goes to more effort to skip nested conditionals but we don't need
+% that here.
+\def\omittopnode{%
+ \ifx\lastnode\wordTop
+ \expandafter\ignorenode\fi
+}
+\def\wordTop{Top}
+
+% Until the next @node or @bye command, divert output to a box that is not
+% output.
+\def\ignorenode{\setbox\dummybox\vbox\bgroup\def\node{\egroup\node}%
+\ignorenodebye
+}
+
+{\let\bye\relax
+\gdef\ignorenodebye{\let\bye\ignorenodebyedef}
+\gdef\ignorenodebyedef{\egroup(`Top' node ignored)\bye}}
+% The redefinition of \bye here is because it is declared \outer
+
+\let\lastnode=\empty
+
+% Write a cross-reference definition for the current node. #1 is the
+% type (Ynumbered, Yappendix, Ynothing).
+%
+\def\donoderef#1{%
+ \ifx\lastnode\empty\else
+ \setref{\lastnode}{#1}%
+ \global\let\lastnode=\empty
+ \fi
+}
+
+% @anchor{NAME} -- define xref target at arbitrary point.
+%
+\newcount\savesfregister
+%
+\def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi}
+\def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi}
+\def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces}
+
+% \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an
+% anchor), which consists of three parts:
+% 1) NAME-title - the current sectioning name taken from \currentsection,
+% or the anchor name.
+% 2) NAME-snt - section number and type, passed as the SNT arg, or
+% empty for anchors.
+% 3) NAME-pg - the page number.
+%
+% This is called from \donoderef, \anchor, and \dofloat. In the case of
+% floats, there is an additional part, which is not written here:
+% 4) NAME-lof - the text as it should appear in a @listoffloats.
+%
+\def\setref#1#2{%
+ \pdfmkdest{#1}%
+ \iflinks
+ {%
+ \requireauxfile
+ \atdummies % preserve commands, but don't expand them
+ % match definition in \xrdef, \refx, \xrefX.
+ \def\value##1{##1}%
+ \edef\writexrdef##1##2{%
+ \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef
+ ##1}{##2}}% these are parameters of \writexrdef
+ }%
+ \toks0 = \expandafter{\currentsection}%
+ \immediate \writexrdef{title}{\the\toks0 }%
+ \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc.
+ \safewhatsit{\writexrdef{pg}{\folio}}% will be written later, at \shipout
+ }%
+ \fi
+}
+
+% @xrefautosectiontitle on|off says whether @section(ing) names are used
+% automatically in xrefs, if the third arg is not explicitly specified.
+% This was provided as a "secret" @set xref-automatic-section-title
+% variable, now it's official.
+%
+\parseargdef\xrefautomaticsectiontitle{%
+ \def\temp{#1}%
+ \ifx\temp\onword
+ \expandafter\let\csname SETxref-automatic-section-title\endcsname
+ = \empty
+ \else\ifx\temp\offword
+ \expandafter\let\csname SETxref-automatic-section-title\endcsname
+ = \relax
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @xrefautomaticsectiontitle value `\temp',
+ must be on|off}%
+ \fi\fi
+}
+
+%
+% @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is
+% the node name, #2 the name of the Info cross-reference, #3 the printed
+% node name, #4 the name of the Info file, #5 the name of the printed
+% manual. All but the node name can be omitted.
+%
+\def\pxref{\putwordsee{} \xrefXX}
+\def\xref{\putwordSee{} \xrefXX}
+\def\ref{\xrefXX}
+
+\def\xrefXX#1{\def\xrefXXarg{#1}\futurelet\tokenafterxref\xrefXXX}
+\def\xrefXXX{\expandafter\xrefX\expandafter[\xrefXXarg,,,,,,,]}
+%
+\newbox\toprefbox
+\newbox\printedrefnamebox
+\newbox\infofilenamebox
+\newbox\printedmanualbox
+%
+\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup
+ \unsepspaces
+ %
+ % Get args without leading/trailing spaces.
+ \def\printedrefname{\ignorespaces #3}%
+ \setbox\printedrefnamebox = \hbox{\printedrefname\unskip}%
+ %
+ \def\infofilename{\ignorespaces #4}%
+ \setbox\infofilenamebox = \hbox{\infofilename\unskip}%
+ %
+ \def\printedmanual{\ignorespaces #5}%
+ \setbox\printedmanualbox = \hbox{\printedmanual\unskip}%
+ %
+ % If the printed reference name (arg #3) was not explicitly given in
+ % the @xref, figure out what we want to use.
+ \ifdim \wd\printedrefnamebox = 0pt
+ % No printed node name was explicitly given.
+ \expandafter\ifx\csname SETxref-automatic-section-title\endcsname \relax
+ % Not auto section-title: use node name inside the square brackets.
+ \def\printedrefname{\ignorespaces #1}%
+ \else
+ % Auto section-title: use chapter/section title inside
+ % the square brackets if we have it.
+ \ifdim \wd\printedmanualbox > 0pt
+ % It is in another manual, so we don't have it; use node name.
+ \def\printedrefname{\ignorespaces #1}%
+ \else
+ \ifhavexrefs
+ % We (should) know the real title if we have the xref values.
+ \def\printedrefname{\refx{#1-title}}%
+ \else
+ % Otherwise just copy the Info node name.
+ \def\printedrefname{\ignorespaces #1}%
+ \fi%
+ \fi
+ \fi
+ \fi
+ %
+ % Make link in pdf output.
+ \ifpdf
+ % For pdfTeX and LuaTeX
+ {\indexnofonts
+ \makevalueexpandable
+ \turnoffactive
+ % This expands tokens, so do it after making catcode changes, so _
+ % etc. don't get their TeX definitions. This ignores all spaces in
+ % #4, including (wrongly) those in the middle of the filename.
+ \getfilename{#4}%
+ %
+ % This (wrongly) does not take account of leading or trailing
+ % spaces in #1, which should be ignored.
+ \setpdfdestname{#1}%
+ %
+ \ifx\pdfdestname\empty
+ \def\pdfdestname{Top}% no empty targets
+ \fi
+ %
+ \leavevmode
+ \startlink attr{/Border [0 0 0]}%
+ \ifnum\filenamelength>0
+ goto file{\the\filename.pdf} name{\pdfdestname}%
+ \else
+ goto name{\pdfmkpgn{\pdfdestname}}%
+ \fi
+ }%
+ \setcolor{\linkcolor}%
+ \else
+ \ifx\XeTeXrevision\thisisundefined
+ \else
+ % For XeTeX
+ {\indexnofonts
+ \makevalueexpandable
+ \turnoffactive
+ % This expands tokens, so do it after making catcode changes, so _
+ % etc. don't get their TeX definitions. This ignores all spaces in
+ % #4, including (wrongly) those in the middle of the filename.
+ \getfilename{#4}%
+ %
+ % This (wrongly) does not take account of leading or trailing
+ % spaces in #1, which should be ignored.
+ \setpdfdestname{#1}%
+ %
+ \ifx\pdfdestname\empty
+ \def\pdfdestname{Top}% no empty targets
+ \fi
+ %
+ \leavevmode
+ \ifnum\filenamelength>0
+ % With default settings,
+ % XeTeX (xdvipdfmx) replaces link destination names with integers.
+ % In this case, the replaced destination names of
+ % remote PDFs are no longer known. In order to avoid a replacement,
+ % you can use xdvipdfmx's command line option `-C 0x0010'.
+ % If you use XeTeX 0.99996+ (TeX Live 2016+),
+ % this command line option is no longer necessary
+ % because we can use the `dvipdfmx:config' special.
+ \special{pdf:bann << /Border [0 0 0] /Type /Annot /Subtype /Link /A
+ << /S /GoToR /F (\the\filename.pdf) /D (\pdfdestname) >> >>}%
+ \else
+ \special{pdf:bann << /Border [0 0 0] /Type /Annot /Subtype /Link /A
+ << /S /GoTo /D (\pdfdestname) >> >>}%
+ \fi
+ }%
+ \setcolor{\linkcolor}%
+ \fi
+ \fi
+ {%
+ % Have to otherify everything special to allow the \csname to
+ % include an _ in the xref name, etc.
+ \indexnofonts
+ \turnoffactive
+ \def\value##1{##1}%
+ \expandafter\global\expandafter\let\expandafter\Xthisreftitle
+ \csname XR#1-title\endcsname
+ }%
+ %
+ % Float references are printed completely differently: "Figure 1.2"
+ % instead of "[somenode], p.3". \iffloat distinguishes them by
+ % \Xthisreftitle being set to a magic string.
+ \iffloat\Xthisreftitle
+ % If the user specified the print name (third arg) to the ref,
+ % print it instead of our usual "Figure 1.2".
+ \ifdim\wd\printedrefnamebox = 0pt
+ \refx{#1-snt}%
+ \else
+ \printedrefname
+ \fi
+ %
+ % If the user also gave the printed manual name (fifth arg), append
+ % "in MANUALNAME".
+ \ifdim \wd\printedmanualbox > 0pt
+ \space \putwordin{} \cite{\printedmanual}%
+ \fi
+ \else
+ % node/anchor (non-float) references.
+ %
+ % If we use \unhbox to print the node names, TeX does not insert
+ % empty discretionaries after hyphens, which means that it will not
+ % find a line break at a hyphen in a node names. Since some manuals
+ % are best written with fairly long node names, containing hyphens,
+ % this is a loss. Therefore, we give the text of the node name
+ % again, so it is as if TeX is seeing it for the first time.
+ %
+ \ifdim \wd\printedmanualbox > 0pt
+ % Cross-manual reference with a printed manual name.
+ %
+ \crossmanualxref{\cite{\printedmanual\unskip}}%
+ %
+ \else\ifdim \wd\infofilenamebox > 0pt
+ % Cross-manual reference with only an info filename (arg 4), no
+ % printed manual name (arg 5). This is essentially the same as
+ % the case above; we output the filename, since we have nothing else.
+ %
+ \crossmanualxref{\code{\infofilename\unskip}}%
+ %
+ \else
+ % Reference within this manual.
+ %
+ % Only output a following space if the -snt ref is nonempty, as the ref
+ % will be empty for @unnumbered and @anchor.
+ \setbox2 = \hbox{\ignorespaces \refx{#1-snt}}%
+ \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi
+ %
+ % output the `[mynode]' via the macro below so it can be overridden.
+ \xrefprintnodename\printedrefname
+ %
+ \expandafter\ifx\csname SETtxiomitxrefpg\endcsname\relax
+ % But we always want a comma and a space:
+ ,\space
+ %
+ % output the `page 3'.
+ \turnoffactive \putwordpage\tie\refx{#1-pg}%
+ % Add a , if xref followed by a space
+ \if\space\noexpand\tokenafterxref ,%
+ \else\ifx\ \tokenafterxref ,% @TAB
+ \else\ifx\*\tokenafterxref ,% @*
+ \else\ifx\ \tokenafterxref ,% @SPACE
+ \else\ifx\
+ \tokenafterxref ,% @NL
+ \else\ifx\tie\tokenafterxref ,% @tie
+ \fi\fi\fi\fi\fi\fi
+ \fi
+ \fi\fi
+ \fi
+ \endlink
+\endgroup}
+
+% Output a cross-manual xref to #1. Used just above (twice).
+%
+% Only include the text "Section ``foo'' in" if the foo is neither
+% missing or Top. Thus, @xref{,,,foo,The Foo Manual} outputs simply
+% "see The Foo Manual", the idea being to refer to the whole manual.
+%
+% But, this being TeX, we can't easily compare our node name against the
+% string "Top" while ignoring the possible spaces before and after in
+% the input. By adding the arbitrary 7sp below, we make it much less
+% likely that a real node name would have the same width as "Top" (e.g.,
+% in a monospaced font). Hopefully it will never happen in practice.
+%
+% For the same basic reason, we retypeset the "Top" at every
+% reference, since the current font is indeterminate.
+%
+\def\crossmanualxref#1{%
+ \setbox\toprefbox = \hbox{Top\kern7sp}%
+ \setbox2 = \hbox{\ignorespaces \printedrefname \unskip \kern7sp}%
+ \ifdim \wd2 > 7sp % nonempty?
+ \ifdim \wd2 = \wd\toprefbox \else % same as Top?
+ \putwordSection{} ``\printedrefname'' \putwordin{}\space
+ \fi
+ \fi
+ #1%
+}
+
+% This macro is called from \xrefX for the `[nodename]' part of xref
+% output. It's a separate macro only so it can be changed more easily,
+% since square brackets don't work well in some documents. Particularly
+% one that Bob is working on :).
+%
+\def\xrefprintnodename#1{[#1]}
+
+% Things referred to by \setref.
+%
+\def\Ynothing{}
+\def\Yomitfromtoc{}
+\def\Ynumbered{%
+ \ifnum\secno=0
+ \putwordChapter@tie \the\chapno
+ \else \ifnum\subsecno=0
+ \putwordSection@tie \the\chapno.\the\secno
+ \else \ifnum\subsubsecno=0
+ \putwordSection@tie \the\chapno.\the\secno.\the\subsecno
+ \else
+ \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno
+ \fi\fi\fi
+}
+\def\Yappendix{%
+ \ifnum\secno=0
+ \putwordAppendix@tie @char\the\appendixno{}%
+ \else \ifnum\subsecno=0
+ \putwordSection@tie @char\the\appendixno.\the\secno
+ \else \ifnum\subsubsecno=0
+ \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno
+ \else
+ \putwordSection@tie
+ @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno
+ \fi\fi\fi
+}
+
+% \refx{NAME} - reference a cross-reference string named NAME.
+\def\refx#1{%
+ \requireauxfile
+ {%
+ \indexnofonts
+ \turnoffactive
+ \def\value##1{##1}%
+ \expandafter\global\expandafter\let\expandafter\thisrefX
+ \csname XR#1\endcsname
+ }%
+ \ifx\thisrefX\relax
+ % If not defined, say something at least.
+ \angleleft un\-de\-fined\angleright
+ \iflinks
+ \ifhavexrefs
+ {\toks0 = {#1}% avoid expansion of possibly-complex value
+ \message{\linenumber Undefined cross reference `\the\toks0'.}}%
+ \else
+ \ifwarnedxrefs\else
+ \global\warnedxrefstrue
+ \message{Cross reference values unknown; you must run TeX again.}%
+ \fi
+ \fi
+ \fi
+ \else
+ % It's defined, so just use it.
+ \thisrefX
+ \fi
+}
+
+% This is the macro invoked by entries in the aux file. Define a control
+% sequence for a cross-reference target (we prepend XR to the control sequence
+% name to avoid collisions). The value is the page number. If this is a float
+% type, we have more work to do.
+%
+\def\xrdef#1#2{%
+ {% Expand the node or anchor name to remove control sequences.
+ % \turnoffactive stops 8-bit characters being changed to commands
+ % like @'e. \refx does the same to retrieve the value in the definition.
+ \indexnofonts
+ \turnoffactive
+ \def\value##1{##1}%
+ \xdef\safexrefname{#1}%
+ }%
+ %
+ \bgroup
+ \expandafter\gdef\csname XR\safexrefname\endcsname{#2}%
+ \egroup
+ % We put the \gdef inside a group to avoid the definitions building up on
+ % TeX's save stack, which can cause it to run out of space for aux files with
+ % thousands of lines. \gdef doesn't use the save stack, but \csname does
+ % when it defines an unknown control sequence as \relax.
+ %
+ % Was that xref control sequence that we just defined for a float?
+ \expandafter\iffloat\csname XR\safexrefname\endcsname
+ % it was a float, and we have the (safe) float type in \iffloattype.
+ \expandafter\let\expandafter\floatlist
+ \csname floatlist\iffloattype\endcsname
+ %
+ % Is this the first time we've seen this float type?
+ \expandafter\ifx\floatlist\relax
+ \toks0 = {\do}% yes, so just \do
+ \else
+ % had it before, so preserve previous elements in list.
+ \toks0 = \expandafter{\floatlist\do}%
+ \fi
+ %
+ % Remember this xref in the control sequence \floatlistFLOATTYPE,
+ % for later use in \listoffloats.
+ \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0
+ {\safexrefname}}%
+ \fi
+}
+
+% If working on a large document in chapters, it is convenient to
+% be able to disable indexing, cross-referencing, and contents, for test runs.
+% This is done with @novalidate at the beginning of the file.
+%
+\newif\iflinks \linkstrue % by default we want the aux files.
+\let\novalidate = \linksfalse
+
+% Used when writing to the aux file, or when using data from it.
+\def\requireauxfile{%
+ \iflinks
+ \tryauxfile
+ % Open the new aux file. TeX will close it automatically at exit.
+ \immediate\openout\auxfile=\jobname.aux
+ \fi
+ \global\let\requireauxfile=\relax % Only do this once.
+}
+
+% Read the last existing aux file, if any. No error if none exists.
+%
+\def\tryauxfile{%
+ \openin 1 \jobname.aux
+ \ifeof 1 \else
+ \readdatafile{aux}%
+ \global\havexrefstrue
+ \fi
+ \closein 1
+}
+
+\def\setupdatafile{%
+ \catcode`\^^@=\other
+ \catcode`\^^A=\other
+ \catcode`\^^B=\other
+ \catcode`\^^C=\other
+ \catcode`\^^D=\other
+ \catcode`\^^E=\other
+ \catcode`\^^F=\other
+ \catcode`\^^G=\other
+ \catcode`\^^H=\other
+ \catcode`\^^K=\other
+ \catcode`\^^L=\other
+ \catcode`\^^N=\other
+ \catcode`\^^P=\other
+ \catcode`\^^Q=\other
+ \catcode`\^^R=\other
+ \catcode`\^^S=\other
+ \catcode`\^^T=\other
+ \catcode`\^^U=\other
+ \catcode`\^^V=\other
+ \catcode`\^^W=\other
+ \catcode`\^^X=\other
+ \catcode`\^^Z=\other
+ \catcode`\^^[=\other
+ \catcode`\^^\=\other
+ \catcode`\^^]=\other
+ \catcode`\^^^=\other
+ \catcode`\^^_=\other
+ \catcode`\^=\other
+ %
+ % Special characters. Should be turned off anyway, but...
+ \catcode`\~=\other
+ \catcode`\[=\other
+ \catcode`\]=\other
+ \catcode`\"=\other
+ \catcode`\_=\active
+ \catcode`\|=\active
+ \catcode`\<=\active
+ \catcode`\>=\active
+ \catcode`\$=\other
+ \catcode`\#=\other
+ \catcode`\&=\other
+ \catcode`\%=\other
+ \catcode`+=\other % avoid \+ for paranoia even though we've turned it off
+ %
+ \catcode`\\=\active
+ %
+ % @ is our escape character in .aux files, and we need braces.
+ \catcode`\{=1
+ \catcode`\}=2
+ \catcode`\@=0
+}
+
+\def\readdatafile#1{%
+\begingroup
+ \setupdatafile
+ \input\jobname.#1
+\endgroup}
+
+
+\message{insertions,}
+% including footnotes.
+
+\newcount \footnoteno
+
+% The trailing space in the following definition for supereject is
+% vital for proper filling; pages come out unaligned when you do a
+% pagealignmacro call if that space before the closing brace is
+% removed. (Generally, numeric constants should always be followed by a
+% space to prevent strange expansion errors.)
+\def\supereject{\par\penalty -20000\footnoteno =0 }
+
+% @footnotestyle is meaningful for Info output only.
+\let\footnotestyle=\comment
+
+{\catcode `\@=11
+%
+% Auto-number footnotes. Otherwise like plain.
+\gdef\footnote{%
+ \global\advance\footnoteno by \@ne
+ \edef\thisfootno{$^{\the\footnoteno}$}%
+ %
+ % In case the footnote comes at the end of a sentence, preserve the
+ % extra spacing after we do the footnote number.
+ \let\@sf\empty
+ \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi
+ %
+ % Remove inadvertent blank space before typesetting the footnote number.
+ \unskip
+ \thisfootno\@sf
+ \dofootnote
+}%
+
+% Don't bother with the trickery in plain.tex to not require the
+% footnote text as a parameter. Our footnotes don't need to be so general.
+%
+% Oh yes, they do; otherwise, @ifset (and anything else that uses
+% \parseargline) fails inside footnotes because the tokens are fixed when
+% the footnote is read. --karl, 16nov96.
+%
+\gdef\dofootnote{%
+ \insert\footins\bgroup
+ %
+ % Nested footnotes are not supported in TeX, that would take a lot
+ % more work. (\startsavinginserts does not suffice.)
+ \let\footnote=\errfootnotenest
+ %
+ % We want to typeset this text as a normal paragraph, even if the
+ % footnote reference occurs in (for example) a display environment.
+ % So reset some parameters.
+ \hsize=\txipagewidth
+ \interlinepenalty\interfootnotelinepenalty
+ \splittopskip\ht\strutbox % top baseline for broken footnotes
+ \splitmaxdepth\dp\strutbox
+ \floatingpenalty\@MM
+ \leftskip\z@skip
+ \rightskip\z@skip
+ \spaceskip\z@skip
+ \xspaceskip\z@skip
+ \parindent\defaultparindent
+ %
+ \smallfonts \rm
+ %
+ % Because we use hanging indentation in footnotes, a @noindent appears
+ % to exdent this text, so make it be a no-op. makeinfo does not use
+ % hanging indentation so @noindent can still be needed within footnote
+ % text after an @example or the like (not that this is good style).
+ \let\noindent = \relax
+ %
+ % Hang the footnote text off the number. Use \everypar in case the
+ % footnote extends for more than one paragraph.
+ \everypar = {\hang}%
+ \textindent{\thisfootno}%
+ %
+ % Don't crash into the line above the footnote text. Since this
+ % expands into a box, it must come within the paragraph, lest it
+ % provide a place where TeX can split the footnote.
+ \footstrut
+ %
+ % Invoke rest of plain TeX footnote routine.
+ \futurelet\next\fo@t
+}
+}%end \catcode `\@=11
+
+\def\errfootnotenest{%
+ \errhelp=\EMsimple
+ \errmessage{Nested footnotes not supported in texinfo.tex,
+ even though they work in makeinfo; sorry}
+}
+
+\def\errfootnoteheading{%
+ \errhelp=\EMsimple
+ \errmessage{Footnotes in chapters, sections, etc., are not supported}
+}
+
+% In case a @footnote appears in a vbox, save the footnote text and create
+% the real \insert just after the vbox finished. Otherwise, the insertion
+% would be lost.
+% Similarly, if a @footnote appears inside an alignment, save the footnote
+% text to a box and make the \insert when a row of the table is finished.
+% And the same can be done for other insert classes. --kasal, 16nov03.
+%
+% Replace the \insert primitive by a cheating macro.
+% Deeper inside, just make sure that the saved insertions are not spilled
+% out prematurely.
+%
+\def\startsavinginserts{%
+ \ifx \insert\ptexinsert
+ \let\insert\saveinsert
+ \else
+ \let\checkinserts\relax
+ \fi
+}
+
+% This \insert replacement works for both \insert\footins{foo} and
+% \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}.
+%
+\def\saveinsert#1{%
+ \edef\next{\noexpand\savetobox \makeSAVEname#1}%
+ \afterassignment\next
+ % swallow the left brace
+ \let\temp =
+}
+\def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}}
+\def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1}
+
+\def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi}
+
+\def\placesaveins#1{%
+ \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname
+ {\box#1}%
+}
+
+% eat @SAVE -- beware, all of them have catcode \other:
+{
+ \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials % ;-)
+ \gdef\gobblesave @SAVE{}
+}
+
+% initialization:
+\def\newsaveins #1{%
+ \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}%
+ \next
+}
+\def\newsaveinsX #1{%
+ \csname newbox\endcsname #1%
+ \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts
+ \checksaveins #1}%
+}
+
+% initialize:
+\let\checkinserts\empty
+\newsaveins\footins
+\newsaveins\margin
+
+
+% @image. We use the macros from epsf.tex to support this.
+% If epsf.tex is not installed and @image is used, we complain.
+%
+% Check for and read epsf.tex up front. If we read it only at @image
+% time, we might be inside a group, and then its definitions would get
+% undone and the next image would fail.
+\openin 1 = epsf.tex
+\ifeof 1 \else
+ % Do not bother showing banner with epsf.tex v2.7k (available in
+ % doc/epsf.tex and on ctan).
+ \def\epsfannounce{\toks0 = }%
+ \input epsf.tex
+\fi
+\closein 1
+%
+% We will only complain once about lack of epsf.tex.
+\newif\ifwarnednoepsf
+\newhelp\noepsfhelp{epsf.tex must be installed for images to
+ work. It is also included in the Texinfo distribution, or you can get
+ it from https://ctan.org/texarchive/macros/texinfo/texinfo/doc/epsf.tex.}
+%
+\def\image#1{%
+ \ifx\epsfbox\thisisundefined
+ \ifwarnednoepsf \else
+ \errhelp = \noepsfhelp
+ \errmessage{epsf.tex not found, images will be ignored}%
+ \global\warnednoepsftrue
+ \fi
+ \else
+ \imagexxx #1,,,,,\finish
+ \fi
+}
+%
+% Arguments to @image:
+% #1 is (mandatory) image filename; we tack on .eps extension.
+% #2 is (optional) width, #3 is (optional) height.
+% #4 is (ignored optional) html alt text.
+% #5 is (ignored optional) extension.
+% #6 is just the usual extra ignored arg for parsing stuff.
+\newif\ifimagevmode
+\def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup
+ \catcode`\^^M = 5 % in case we're inside an example
+ \normalturnoffactive % allow _ et al. in names
+ \makevalueexpandable
+ % If the image is by itself, center it.
+ \ifvmode
+ \imagevmodetrue
+ \else \ifx\centersub\centerV
+ % for @center @image, we need a vbox so we can have our vertical space
+ \imagevmodetrue
+ \vbox\bgroup % vbox has better behavior than vtop herev
+ \fi\fi
+ %
+ \ifimagevmode
+ \nobreak\medskip
+ % Usually we'll have text after the image which will insert
+ % \parskip glue, so insert it here too to equalize the space
+ % above and below.
+ \nobreak\vskip\parskip
+ \nobreak
+ \fi
+ %
+ % Leave vertical mode so that indentation from an enclosing
+ % environment such as @quotation is respected.
+ % However, if we're at the top level, we don't want the
+ % normal paragraph indentation.
+ % On the other hand, if we are in the case of @center @image, we don't
+ % want to start a paragraph, which will create a hsize-width box and
+ % eradicate the centering.
+ \ifx\centersub\centerV\else \noindent \fi
+ %
+ % Output the image.
+ \ifpdf
+ % For pdfTeX and LuaTeX <= 0.80
+ \dopdfimage{#1}{#2}{#3}%
+ \else
+ \ifx\XeTeXrevision\thisisundefined
+ % For epsf.tex
+ % \epsfbox itself resets \epsf?size at each figure.
+ \setbox0 = \hbox{\ignorespaces #2}%
+ \ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi
+ \setbox0 = \hbox{\ignorespaces #3}%
+ \ifdim\wd0 > 0pt \epsfysize=#3\relax \fi
+ \epsfbox{#1.eps}%
+ \else
+ % For XeTeX
+ \doxeteximage{#1}{#2}{#3}%
+ \fi
+ \fi
+ %
+ \ifimagevmode
+ \medskip % space after a standalone image
+ \fi
+ \ifx\centersub\centerV \egroup \fi
+\endgroup}
+
+
+% @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables,
+% etc. We don't actually implement floating yet, we always include the
+% float "here". But it seemed the best name for the future.
+%
+\envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish}
+
+% There may be a space before second and/or third parameter; delete it.
+\def\eatcommaspace#1, {#1,}
+
+% #1 is the optional FLOATTYPE, the text label for this float, typically
+% "Figure", "Table", "Example", etc. Can't contain commas. If omitted,
+% this float will not be numbered and cannot be referred to.
+%
+% #2 is the optional xref label. Also must be present for the float to
+% be referable.
+%
+% #3 is the optional positioning argument; for now, it is ignored. It
+% will somehow specify the positions allowed to float to (here, top, bottom).
+%
+% We keep a separate counter for each FLOATTYPE, which we reset at each
+% chapter-level command.
+\let\resetallfloatnos=\empty
+%
+\def\dofloat#1,#2,#3,#4\finish{%
+ \let\thiscaption=\empty
+ \let\thisshortcaption=\empty
+ %
+ % don't lose footnotes inside @float.
+ %
+ % BEWARE: when the floats start float, we have to issue warning whenever an
+ % insert appears inside a float which could possibly float. --kasal, 26may04
+ %
+ \startsavinginserts
+ %
+ % We can't be used inside a paragraph.
+ \par
+ %
+ \vtop\bgroup
+ \def\floattype{#1}%
+ \def\floatlabel{#2}%
+ \def\floatloc{#3}% we do nothing with this yet.
+ %
+ \ifx\floattype\empty
+ \let\safefloattype=\empty
+ \else
+ {%
+ % the floattype might have accents or other special characters,
+ % but we need to use it in a control sequence name.
+ \indexnofonts
+ \turnoffactive
+ \xdef\safefloattype{\floattype}%
+ }%
+ \fi
+ %
+ % If label is given but no type, we handle that as the empty type.
+ \ifx\floatlabel\empty \else
+ % We want each FLOATTYPE to be numbered separately (Figure 1,
+ % Table 1, Figure 2, ...). (And if no label, no number.)
+ %
+ \expandafter\getfloatno\csname\safefloattype floatno\endcsname
+ \global\advance\floatno by 1
+ %
+ {%
+ % This magic value for \currentsection is output by \setref as the
+ % XREFLABEL-title value. \xrefX uses it to distinguish float
+ % labels (which have a completely different output format) from
+ % node and anchor labels. And \xrdef uses it to construct the
+ % lists of floats.
+ %
+ \edef\currentsection{\floatmagic=\safefloattype}%
+ \setref{\floatlabel}{Yfloat}%
+ }%
+ \fi
+ %
+ % start with \parskip glue, I guess.
+ \vskip\parskip
+ %
+ % Don't suppress indentation if a float happens to start a section.
+ \restorefirstparagraphindent
+}
+
+% we have these possibilities:
+% @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap
+% @float Foo,lbl & no caption: Foo 1.1
+% @float Foo & @caption{Cap}: Foo: Cap
+% @float Foo & no caption: Foo
+% @float ,lbl & Caption{Cap}: 1.1: Cap
+% @float ,lbl & no caption: 1.1
+% @float & @caption{Cap}: Cap
+% @float & no caption:
+%
+\def\Efloat{%
+ \let\floatident = \empty
+ %
+ % In all cases, if we have a float type, it comes first.
+ \ifx\floattype\empty \else \def\floatident{\floattype}\fi
+ %
+ % If we have an xref label, the number comes next.
+ \ifx\floatlabel\empty \else
+ \ifx\floattype\empty \else % if also had float type, need tie first.
+ \appendtomacro\floatident{\tie}%
+ \fi
+ % the number.
+ \appendtomacro\floatident{\chaplevelprefix\the\floatno}%
+ \fi
+ %
+ % Start the printed caption with what we've constructed in
+ % \floatident, but keep it separate; we need \floatident again.
+ \let\captionline = \floatident
+ %
+ \ifx\thiscaption\empty \else
+ \ifx\floatident\empty \else
+ \appendtomacro\captionline{: }% had ident, so need a colon between
+ \fi
+ %
+ % caption text.
+ \appendtomacro\captionline{\scanexp\thiscaption}%
+ \fi
+ %
+ % If we have anything to print, print it, with space before.
+ % Eventually this needs to become an \insert.
+ \ifx\captionline\empty \else
+ \vskip.5\parskip
+ \captionline
+ %
+ % Space below caption.
+ \vskip\parskip
+ \fi
+ %
+ % If have an xref label, write the list of floats info. Do this
+ % after the caption, to avoid chance of it being a breakpoint.
+ \ifx\floatlabel\empty \else
+ % Write the text that goes in the lof to the aux file as
+ % \floatlabel-lof. Besides \floatident, we include the short
+ % caption if specified, else the full caption if specified, else nothing.
+ {%
+ \requireauxfile
+ \atdummies
+ %
+ \ifx\thisshortcaption\empty
+ \def\gtemp{\thiscaption}%
+ \else
+ \def\gtemp{\thisshortcaption}%
+ \fi
+ \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident
+ \ifx\gtemp\empty \else : \gtemp \fi}}%
+ }%
+ \fi
+ \egroup % end of \vtop
+ %
+ \checkinserts
+}
+
+% Append the tokens #2 to the definition of macro #1, not expanding either.
+%
+\def\appendtomacro#1#2{%
+ \expandafter\def\expandafter#1\expandafter{#1#2}%
+}
+
+% @caption, @shortcaption
+%
+\def\caption{\docaption\thiscaption}
+\def\shortcaption{\docaption\thisshortcaption}
+\def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption}
+\def\defcaption#1#2{\egroup \def#1{#2}}
+
+% The parameter is the control sequence identifying the counter we are
+% going to use. Create it if it doesn't exist and assign it to \floatno.
+\def\getfloatno#1{%
+ \ifx#1\relax
+ % Haven't seen this figure type before.
+ \csname newcount\endcsname #1%
+ %
+ % Remember to reset this floatno at the next chap.
+ \expandafter\gdef\expandafter\resetallfloatnos
+ \expandafter{\resetallfloatnos #1=0 }%
+ \fi
+ \let\floatno#1%
+}
+
+% \setref calls this to get the XREFLABEL-snt value. We want an @xref
+% to the FLOATLABEL to expand to "Figure 3.1". We call \setref when we
+% first read the @float command.
+%
+\def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}%
+
+% Magic string used for the XREFLABEL-title value, so \xrefX can
+% distinguish floats from other xref types.
+\def\floatmagic{!!float!!}
+
+% #1 is the control sequence we are passed; we expand into a conditional
+% which is true if #1 represents a float ref. That is, the magic
+% \currentsection value which we \setref above.
+%
+\def\iffloat#1{\expandafter\doiffloat#1==\finish}
+%
+% #1 is (maybe) the \floatmagic string. If so, #2 will be the
+% (safe) float type for this float. We set \iffloattype to #2.
+%
+\def\doiffloat#1=#2=#3\finish{%
+ \def\temp{#1}%
+ \def\iffloattype{#2}%
+ \ifx\temp\floatmagic
+}
+
+% @listoffloats FLOATTYPE - print a list of floats like a table of contents.
+%
+\parseargdef\listoffloats{%
+ \def\floattype{#1}% floattype
+ {%
+ % the floattype might have accents or other special characters,
+ % but we need to use it in a control sequence name.
+ \indexnofonts
+ \turnoffactive
+ \xdef\safefloattype{\floattype}%
+ }%
+ %
+ % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE.
+ \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax
+ \ifhavexrefs
+ % if the user said @listoffloats foo but never @float foo.
+ \message{\linenumber No `\safefloattype' floats to list.}%
+ \fi
+ \else
+ \begingroup
+ \leftskip=\tocindent % indent these entries like a toc
+ \let\do=\listoffloatsdo
+ \csname floatlist\safefloattype\endcsname
+ \endgroup
+ \fi
+}
+
+% This is called on each entry in a list of floats. We're passed the
+% xref label, in the form LABEL-title, which is how we save it in the
+% aux file. We strip off the -title and look up \XRLABEL-lof, which
+% has the text we're supposed to typeset here.
+%
+% Figures without xref labels will not be included in the list (since
+% they won't appear in the aux file).
+%
+\def\listoffloatsdo#1{\listoffloatsdoentry#1\finish}
+\def\listoffloatsdoentry#1-title\finish{{%
+ % Can't fully expand XR#1-lof because it can contain anything. Just
+ % pass the control sequence. On the other hand, XR#1-pg is just the
+ % page number, and we want to fully expand that so we can get a link
+ % in pdf output.
+ \toksA = \expandafter{\csname XR#1-lof\endcsname}%
+ %
+ % use the same \entry macro we use to generate the TOC and index.
+ \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}%
+ \writeentry
+}}
+
+
+\message{localization,}
+
+% For single-language documents, @documentlanguage is usually given very
+% early, just after @documentencoding. Single argument is the language
+% (de) or locale (de_DE) abbreviation.
+%
+{
+ \catcode`\_ = \active
+ \globaldefs=1
+\parseargdef\documentlanguage{%
+ \tex % read txi-??.tex file in plain TeX.
+ % Read the file by the name they passed if it exists.
+ \let_ = \normalunderscore % normal _ character for filename test
+ \openin 1 txi-#1.tex
+ \ifeof 1
+ \documentlanguagetrywithoutunderscore #1_\finish
+ \else
+ \globaldefs = 1 % everything in the txi-LL files needs to persist
+ \input txi-#1.tex
+ \fi
+ \closein 1
+ \endgroup % end raw TeX
+}
+%
+% If they passed de_DE, and txi-de_DE.tex doesn't exist,
+% try txi-de.tex.
+%
+\gdef\documentlanguagetrywithoutunderscore#1_#2\finish{%
+ \openin 1 txi-#1.tex
+ \ifeof 1
+ \errhelp = \nolanghelp
+ \errmessage{Cannot read language file txi-#1.tex}%
+ \else
+ \globaldefs = 1 % everything in the txi-LL files needs to persist
+ \input txi-#1.tex
+ \fi
+ \closein 1
+}
+}% end of special _ catcode
+%
+\newhelp\nolanghelp{The given language definition file cannot be found or
+is empty. Maybe you need to install it? Putting it in the current
+directory should work if nowhere else does.}
+
+% This macro is called from txi-??.tex files; the first argument is the
+% \language name to set (without the "\lang@" prefix), the second and
+% third args are \{left,right}hyphenmin.
+%
+% The language names to pass are determined when the format is built.
+% See the etex.log file created at that time, e.g.,
+% /usr/local/texlive/2008/texmf-var/web2c/pdftex/etex.log.
+%
+% With TeX Live 2008, etex now includes hyphenation patterns for all
+% available languages. This means we can support hyphenation in
+% Texinfo, at least to some extent. (This still doesn't solve the
+% accented characters problem.)
+%
+\catcode`@=11
+\def\txisetlanguage#1#2#3{%
+ % do not set the language if the name is undefined in the current TeX.
+ \expandafter\ifx\csname lang@#1\endcsname \relax
+ \message{no patterns for #1}%
+ \else
+ \global\language = \csname lang@#1\endcsname
+ \fi
+ % but there is no harm in adjusting the hyphenmin values regardless.
+ \global\lefthyphenmin = #2\relax
+ \global\righthyphenmin = #3\relax
+}
+
+% XeTeX and LuaTeX can handle Unicode natively.
+% Their default I/O uses UTF-8 sequences instead of a byte-wise operation.
+% Other TeX engines' I/O (pdfTeX, etc.) is byte-wise.
+%
+\newif\iftxinativeunicodecapable
+\newif\iftxiusebytewiseio
+
+\ifx\XeTeXrevision\thisisundefined
+ \ifx\luatexversion\thisisundefined
+ \txinativeunicodecapablefalse
+ \txiusebytewiseiotrue
+ \else
+ \txinativeunicodecapabletrue
+ \txiusebytewiseiofalse
+ \fi
+\else
+ \txinativeunicodecapabletrue
+ \txiusebytewiseiofalse
+\fi
+
+% Set I/O by bytes instead of UTF-8 sequence for XeTeX and LuaTex
+% for non-UTF-8 (byte-wise) encodings.
+%
+\def\setbytewiseio{%
+ \ifx\XeTeXrevision\thisisundefined
+ \else
+ \XeTeXdefaultencoding "bytes" % For subsequent files to be read
+ \XeTeXinputencoding "bytes" % For document root file
+ % Unfortunately, there seems to be no corresponding XeTeX command for
+ % output encoding. This is a problem for auxiliary index and TOC files.
+ % The only solution would be perhaps to write out @U{...} sequences in
+ % place of non-ASCII characters.
+ \fi
+
+ \ifx\luatexversion\thisisundefined
+ \else
+ \directlua{
+ local utf8_char, byte, gsub = unicode.utf8.char, string.byte, string.gsub
+ local function convert_char (char)
+ return utf8_char(byte(char))
+ end
+
+ local function convert_line (line)
+ return gsub(line, ".", convert_char)
+ end
+
+ callback.register("process_input_buffer", convert_line)
+
+ local function convert_line_out (line)
+ local line_out = ""
+ for c in string.utfvalues(line) do
+ line_out = line_out .. string.char(c)
+ end
+ return line_out
+ end
+
+ callback.register("process_output_buffer", convert_line_out)
+ }
+ \fi
+
+ \txiusebytewiseiotrue
+}
+
+
+% Helpers for encodings.
+% Set the catcode of characters 128 through 255 to the specified number.
+%
+\def\setnonasciicharscatcode#1{%
+ \count255=128
+ \loop\ifnum\count255<256
+ \global\catcode\count255=#1\relax
+ \advance\count255 by 1
+ \repeat
+}
+
+\def\setnonasciicharscatcodenonglobal#1{%
+ \count255=128
+ \loop\ifnum\count255<256
+ \catcode\count255=#1\relax
+ \advance\count255 by 1
+ \repeat
+}
+
+% @documentencoding sets the definition of non-ASCII characters
+% according to the specified encoding.
+%
+\def\documentencoding{\parseargusing\filenamecatcodes\documentencodingzzz}
+\def\documentencodingzzz#1{%
+ %
+ % Encoding being declared for the document.
+ \def\declaredencoding{\csname #1.enc\endcsname}%
+ %
+ % Supported encodings: names converted to tokens in order to be able
+ % to compare them with \ifx.
+ \def\ascii{\csname US-ASCII.enc\endcsname}%
+ \def\latnine{\csname ISO-8859-15.enc\endcsname}%
+ \def\latone{\csname ISO-8859-1.enc\endcsname}%
+ \def\lattwo{\csname ISO-8859-2.enc\endcsname}%
+ \def\utfeight{\csname UTF-8.enc\endcsname}%
+ %
+ \ifx \declaredencoding \ascii
+ \asciichardefs
+ %
+ \else \ifx \declaredencoding \lattwo
+ \iftxinativeunicodecapable
+ \setbytewiseio
+ \fi
+ \setnonasciicharscatcode\active
+ \lattwochardefs
+ %
+ \else \ifx \declaredencoding \latone
+ \iftxinativeunicodecapable
+ \setbytewiseio
+ \fi
+ \setnonasciicharscatcode\active
+ \latonechardefs
+ %
+ \else \ifx \declaredencoding \latnine
+ \iftxinativeunicodecapable
+ \setbytewiseio
+ \fi
+ \setnonasciicharscatcode\active
+ \latninechardefs
+ %
+ \else \ifx \declaredencoding \utfeight
+ \iftxinativeunicodecapable
+ % For native Unicode handling (XeTeX and LuaTeX)
+ \nativeunicodechardefs
+ \else
+ % For treating UTF-8 as byte sequences (TeX, eTeX and pdfTeX)
+ \setnonasciicharscatcode\active
+ % since we already invoked \utfeightchardefs at the top level
+ % (below), do not re-invoke it, otherwise our check for duplicated
+ % definitions gets triggered. Making non-ascii chars active is
+ % sufficient.
+ \fi
+ %
+ \else
+ \message{Ignoring unknown document encoding: #1.}%
+ %
+ \fi % utfeight
+ \fi % latnine
+ \fi % latone
+ \fi % lattwo
+ \fi % ascii
+ %
+ \ifx\XeTeXrevision\thisisundefined
+ \else
+ \ifx \declaredencoding \utfeight
+ \else
+ \ifx \declaredencoding \ascii
+ \else
+ \message{Warning: XeTeX with non-UTF-8 encodings cannot handle %
+ non-ASCII characters in auxiliary files.}%
+ \fi
+ \fi
+ \fi
+}
+
+% emacs-page
+% A message to be logged when using a character that isn't available
+% the default font encoding (OT1).
+%
+\def\missingcharmsg#1{\message{Character missing, sorry: #1.}}
+
+% Take account of \c (plain) vs. \, (Texinfo) difference.
+\def\cedilla#1{\ifx\c\ptexc\c{#1}\else\,{#1}\fi}
+
+% First, make active non-ASCII characters in order for them to be
+% correctly categorized when TeX reads the replacement text of
+% macros containing the character definitions.
+\setnonasciicharscatcode\active
+%
+
+\def\gdefchar#1#2{%
+\gdef#1{%
+ \ifpassthroughchars
+ \string#1%
+ \else
+ #2%
+ \fi
+}}
+
+% Latin1 (ISO-8859-1) character definitions.
+\def\latonechardefs{%
+ \gdefchar^^a0{\tie}
+ \gdefchar^^a1{\exclamdown}
+ \gdefchar^^a2{{\tcfont \char162}} % cent
+ \gdefchar^^a3{\pounds{}}
+ \gdefchar^^a4{{\tcfont \char164}} % currency
+ \gdefchar^^a5{{\tcfont \char165}} % yen
+ \gdefchar^^a6{{\tcfont \char166}} % broken bar
+ \gdefchar^^a7{\S}
+ \gdefchar^^a8{\"{}}
+ \gdefchar^^a9{\copyright{}}
+ \gdefchar^^aa{\ordf}
+ \gdefchar^^ab{\guillemetleft{}}
+ \gdefchar^^ac{\ensuremath\lnot}
+ \gdefchar^^ad{\-}
+ \gdefchar^^ae{\registeredsymbol{}}
+ \gdefchar^^af{\={}}
+ %
+ \gdefchar^^b0{\textdegree}
+ \gdefchar^^b1{$\pm$}
+ \gdefchar^^b2{$^2$}
+ \gdefchar^^b3{$^3$}
+ \gdefchar^^b4{\'{}}
+ \gdefchar^^b5{$\mu$}
+ \gdefchar^^b6{\P}
+ \gdefchar^^b7{\ensuremath\cdot}
+ \gdefchar^^b8{\cedilla\ }
+ \gdefchar^^b9{$^1$}
+ \gdefchar^^ba{\ordm}
+ \gdefchar^^bb{\guillemetright{}}
+ \gdefchar^^bc{$1\over4$}
+ \gdefchar^^bd{$1\over2$}
+ \gdefchar^^be{$3\over4$}
+ \gdefchar^^bf{\questiondown}
+ %
+ \gdefchar^^c0{\`A}
+ \gdefchar^^c1{\'A}
+ \gdefchar^^c2{\^A}
+ \gdefchar^^c3{\~A}
+ \gdefchar^^c4{\"A}
+ \gdefchar^^c5{\ringaccent A}
+ \gdefchar^^c6{\AE}
+ \gdefchar^^c7{\cedilla C}
+ \gdefchar^^c8{\`E}
+ \gdefchar^^c9{\'E}
+ \gdefchar^^ca{\^E}
+ \gdefchar^^cb{\"E}
+ \gdefchar^^cc{\`I}
+ \gdefchar^^cd{\'I}
+ \gdefchar^^ce{\^I}
+ \gdefchar^^cf{\"I}
+ %
+ \gdefchar^^d0{\DH}
+ \gdefchar^^d1{\~N}
+ \gdefchar^^d2{\`O}
+ \gdefchar^^d3{\'O}
+ \gdefchar^^d4{\^O}
+ \gdefchar^^d5{\~O}
+ \gdefchar^^d6{\"O}
+ \gdefchar^^d7{$\times$}
+ \gdefchar^^d8{\O}
+ \gdefchar^^d9{\`U}
+ \gdefchar^^da{\'U}
+ \gdefchar^^db{\^U}
+ \gdefchar^^dc{\"U}
+ \gdefchar^^dd{\'Y}
+ \gdefchar^^de{\TH}
+ \gdefchar^^df{\ss}
+ %
+ \gdefchar^^e0{\`a}
+ \gdefchar^^e1{\'a}
+ \gdefchar^^e2{\^a}
+ \gdefchar^^e3{\~a}
+ \gdefchar^^e4{\"a}
+ \gdefchar^^e5{\ringaccent a}
+ \gdefchar^^e6{\ae}
+ \gdefchar^^e7{\cedilla c}
+ \gdefchar^^e8{\`e}
+ \gdefchar^^e9{\'e}
+ \gdefchar^^ea{\^e}
+ \gdefchar^^eb{\"e}
+ \gdefchar^^ec{\`{\dotless i}}
+ \gdefchar^^ed{\'{\dotless i}}
+ \gdefchar^^ee{\^{\dotless i}}
+ \gdefchar^^ef{\"{\dotless i}}
+ %
+ \gdefchar^^f0{\dh}
+ \gdefchar^^f1{\~n}
+ \gdefchar^^f2{\`o}
+ \gdefchar^^f3{\'o}
+ \gdefchar^^f4{\^o}
+ \gdefchar^^f5{\~o}
+ \gdefchar^^f6{\"o}
+ \gdefchar^^f7{$\div$}
+ \gdefchar^^f8{\o}
+ \gdefchar^^f9{\`u}
+ \gdefchar^^fa{\'u}
+ \gdefchar^^fb{\^u}
+ \gdefchar^^fc{\"u}
+ \gdefchar^^fd{\'y}
+ \gdefchar^^fe{\th}
+ \gdefchar^^ff{\"y}
+}
+
+% Latin9 (ISO-8859-15) encoding character definitions.
+\def\latninechardefs{%
+ % Encoding is almost identical to Latin1.
+ \latonechardefs
+ %
+ \gdefchar^^a4{\euro{}}
+ \gdefchar^^a6{\v S}
+ \gdefchar^^a8{\v s}
+ \gdefchar^^b4{\v Z}
+ \gdefchar^^b8{\v z}
+ \gdefchar^^bc{\OE}
+ \gdefchar^^bd{\oe}
+ \gdefchar^^be{\"Y}
+}
+
+% Latin2 (ISO-8859-2) character definitions.
+\def\lattwochardefs{%
+ \gdefchar^^a0{\tie}
+ \gdefchar^^a1{\ogonek{A}}
+ \gdefchar^^a2{\u{}}
+ \gdefchar^^a3{\L}
+ \gdefchar^^a4{\missingcharmsg{CURRENCY SIGN}}
+ \gdefchar^^a5{\v L}
+ \gdefchar^^a6{\'S}
+ \gdefchar^^a7{\S}
+ \gdefchar^^a8{\"{}}
+ \gdefchar^^a9{\v S}
+ \gdefchar^^aa{\cedilla S}
+ \gdefchar^^ab{\v T}
+ \gdefchar^^ac{\'Z}
+ \gdefchar^^ad{\-}
+ \gdefchar^^ae{\v Z}
+ \gdefchar^^af{\dotaccent Z}
+ %
+ \gdefchar^^b0{\textdegree{}}
+ \gdefchar^^b1{\ogonek{a}}
+ \gdefchar^^b2{\ogonek{ }}
+ \gdefchar^^b3{\l}
+ \gdefchar^^b4{\'{}}
+ \gdefchar^^b5{\v l}
+ \gdefchar^^b6{\'s}
+ \gdefchar^^b7{\v{}}
+ \gdefchar^^b8{\cedilla\ }
+ \gdefchar^^b9{\v s}
+ \gdefchar^^ba{\cedilla s}
+ \gdefchar^^bb{\v t}
+ \gdefchar^^bc{\'z}
+ \gdefchar^^bd{\H{}}
+ \gdefchar^^be{\v z}
+ \gdefchar^^bf{\dotaccent z}
+ %
+ \gdefchar^^c0{\'R}
+ \gdefchar^^c1{\'A}
+ \gdefchar^^c2{\^A}
+ \gdefchar^^c3{\u A}
+ \gdefchar^^c4{\"A}
+ \gdefchar^^c5{\'L}
+ \gdefchar^^c6{\'C}
+ \gdefchar^^c7{\cedilla C}
+ \gdefchar^^c8{\v C}
+ \gdefchar^^c9{\'E}
+ \gdefchar^^ca{\ogonek{E}}
+ \gdefchar^^cb{\"E}
+ \gdefchar^^cc{\v E}
+ \gdefchar^^cd{\'I}
+ \gdefchar^^ce{\^I}
+ \gdefchar^^cf{\v D}
+ %
+ \gdefchar^^d0{\DH}
+ \gdefchar^^d1{\'N}
+ \gdefchar^^d2{\v N}
+ \gdefchar^^d3{\'O}
+ \gdefchar^^d4{\^O}
+ \gdefchar^^d5{\H O}
+ \gdefchar^^d6{\"O}
+ \gdefchar^^d7{$\times$}
+ \gdefchar^^d8{\v R}
+ \gdefchar^^d9{\ringaccent U}
+ \gdefchar^^da{\'U}
+ \gdefchar^^db{\H U}
+ \gdefchar^^dc{\"U}
+ \gdefchar^^dd{\'Y}
+ \gdefchar^^de{\cedilla T}
+ \gdefchar^^df{\ss}
+ %
+ \gdefchar^^e0{\'r}
+ \gdefchar^^e1{\'a}
+ \gdefchar^^e2{\^a}
+ \gdefchar^^e3{\u a}
+ \gdefchar^^e4{\"a}
+ \gdefchar^^e5{\'l}
+ \gdefchar^^e6{\'c}
+ \gdefchar^^e7{\cedilla c}
+ \gdefchar^^e8{\v c}
+ \gdefchar^^e9{\'e}
+ \gdefchar^^ea{\ogonek{e}}
+ \gdefchar^^eb{\"e}
+ \gdefchar^^ec{\v e}
+ \gdefchar^^ed{\'{\dotless{i}}}
+ \gdefchar^^ee{\^{\dotless{i}}}
+ \gdefchar^^ef{\v d}
+ %
+ \gdefchar^^f0{\dh}
+ \gdefchar^^f1{\'n}
+ \gdefchar^^f2{\v n}
+ \gdefchar^^f3{\'o}
+ \gdefchar^^f4{\^o}
+ \gdefchar^^f5{\H o}
+ \gdefchar^^f6{\"o}
+ \gdefchar^^f7{$\div$}
+ \gdefchar^^f8{\v r}
+ \gdefchar^^f9{\ringaccent u}
+ \gdefchar^^fa{\'u}
+ \gdefchar^^fb{\H u}
+ \gdefchar^^fc{\"u}
+ \gdefchar^^fd{\'y}
+ \gdefchar^^fe{\cedilla t}
+ \gdefchar^^ff{\dotaccent{}}
+}
+
+% UTF-8 character definitions.
+%
+% This code to support UTF-8 is based on LaTeX's utf8.def, with some
+% changes for Texinfo conventions. It is included here under the GPL by
+% permission from Frank Mittelbach and the LaTeX team.
+%
+\newcount\countUTFx
+\newcount\countUTFy
+\newcount\countUTFz
+
+\gdef\UTFviiiTwoOctets#1#2{\expandafter
+ \UTFviiiDefined\csname u8:#1\string #2\endcsname}
+%
+\gdef\UTFviiiThreeOctets#1#2#3{\expandafter
+ \UTFviiiDefined\csname u8:#1\string #2\string #3\endcsname}
+%
+\gdef\UTFviiiFourOctets#1#2#3#4{\expandafter
+ \UTFviiiDefined\csname u8:#1\string #2\string #3\string #4\endcsname}
+
+\gdef\UTFviiiDefined#1{%
+ \ifx #1\relax
+ \message{\linenumber Unicode char \string #1 not defined for Texinfo}%
+ \else
+ \expandafter #1%
+ \fi
+}
+
+% Give non-ASCII bytes the active definitions for processing UTF-8 sequences
+\begingroup
+ \catcode`\~13
+ \catcode`\$12
+ \catcode`\"12
+
+ % Loop from \countUTFx to \countUTFy, performing \UTFviiiTmp
+ % substituting ~ and $ with a character token of that value.
+ \def\UTFviiiLoop{%
+ \global\catcode\countUTFx\active
+ \uccode`\~\countUTFx
+ \uccode`\$\countUTFx
+ \uppercase\expandafter{\UTFviiiTmp}%
+ \advance\countUTFx by 1
+ \ifnum\countUTFx < \countUTFy
+ \expandafter\UTFviiiLoop
+ \fi}
+
+ % For bytes other than the first in a UTF-8 sequence. Not expected to
+ % be expanded except when writing to auxiliary files.
+ \countUTFx = "80
+ \countUTFy = "C2
+ \def\UTFviiiTmp{%
+ \gdef~{%
+ \ifpassthroughchars $\fi}}%
+ \UTFviiiLoop
+
+ \countUTFx = "C2
+ \countUTFy = "E0
+ \def\UTFviiiTmp{%
+ \gdef~{%
+ \ifpassthroughchars $%
+ \else\expandafter\UTFviiiTwoOctets\expandafter$\fi}}%
+ \UTFviiiLoop
+
+ \countUTFx = "E0
+ \countUTFy = "F0
+ \def\UTFviiiTmp{%
+ \gdef~{%
+ \ifpassthroughchars $%
+ \else\expandafter\UTFviiiThreeOctets\expandafter$\fi}}%
+ \UTFviiiLoop
+
+ \countUTFx = "F0
+ \countUTFy = "F4
+ \def\UTFviiiTmp{%
+ \gdef~{%
+ \ifpassthroughchars $%
+ \else\expandafter\UTFviiiFourOctets\expandafter$\fi
+ }}%
+ \UTFviiiLoop
+\endgroup
+
+\def\globallet{\global\let} % save some \expandafter's below
+
+% @U{xxxx} to produce U+xxxx, if we support it.
+\def\U#1{%
+ \expandafter\ifx\csname uni:#1\endcsname \relax
+ \iftxinativeunicodecapable
+ % All Unicode characters can be used if native Unicode handling is
+ % active. However, if the font does not have the glyph,
+ % letters are missing.
+ \begingroup
+ \uccode`\.="#1\relax
+ \uppercase{.}
+ \endgroup
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unicode character U+#1 not supported, sorry}%
+ \fi
+ \else
+ \csname uni:#1\endcsname
+ \fi
+}
+
+% These macros are used here to construct the name of a control
+% sequence to be defined.
+\def\UTFviiiTwoOctetsName#1#2{%
+ \csname u8:#1\string #2\endcsname}%
+\def\UTFviiiThreeOctetsName#1#2#3{%
+ \csname u8:#1\string #2\string #3\endcsname}%
+\def\UTFviiiFourOctetsName#1#2#3#4{%
+ \csname u8:#1\string #2\string #3\string #4\endcsname}%
+
+% For UTF-8 byte sequences (TeX, e-TeX and pdfTeX),
+% provide a definition macro to replace a Unicode character;
+% this gets used by the @U command
+%
+\begingroup
+ \catcode`\"=12
+ \catcode`\<=12
+ \catcode`\.=12
+ \catcode`\,=12
+ \catcode`\;=12
+ \catcode`\!=12
+ \catcode`\~=13
+ \gdef\DeclareUnicodeCharacterUTFviii#1#2{%
+ \countUTFz = "#1\relax
+ \begingroup
+ \parseXMLCharref
+
+ % Give \u8:... its definition. The sequence of seven \expandafter's
+ % expands after the \gdef three times, e.g.
+ %
+ % 1. \UTFviiTwoOctetsName B1 B2
+ % 2. \csname u8:B1 \string B2 \endcsname
+ % 3. \u8: B1 B2 (a single control sequence token)
+ %
+ \expandafter\expandafter
+ \expandafter\expandafter
+ \expandafter\expandafter
+ \expandafter\gdef \UTFviiiTmp{#2}%
+ %
+ \expandafter\ifx\csname uni:#1\endcsname \relax \else
+ \message{Internal error, already defined: #1}%
+ \fi
+ %
+ % define an additional control sequence for this code point.
+ \expandafter\globallet\csname uni:#1\endcsname \UTFviiiTmp
+ \endgroup}
+ %
+ % Given the value in \countUTFz as a Unicode code point, set \UTFviiiTmp
+ % to the corresponding UTF-8 sequence.
+ \gdef\parseXMLCharref{%
+ \ifnum\countUTFz < "A0\relax
+ \errhelp = \EMsimple
+ \errmessage{Cannot define Unicode char value < 00A0}%
+ \else\ifnum\countUTFz < "800\relax
+ \parseUTFviiiA,%
+ \parseUTFviiiB C\UTFviiiTwoOctetsName.,%
+ \else\ifnum\countUTFz < "10000\relax
+ \parseUTFviiiA;%
+ \parseUTFviiiA,%
+ \parseUTFviiiB E\UTFviiiThreeOctetsName.{,;}%
+ \else
+ \parseUTFviiiA;%
+ \parseUTFviiiA,%
+ \parseUTFviiiA!%
+ \parseUTFviiiB F\UTFviiiFourOctetsName.{!,;}%
+ \fi\fi\fi
+ }
+
+ % Extract a byte from the end of the UTF-8 representation of \countUTFx.
+ % It must be a non-initial byte in the sequence.
+ % Change \uccode of #1 for it to be used in \parseUTFviiiB as one
+ % of the bytes.
+ \gdef\parseUTFviiiA#1{%
+ \countUTFx = \countUTFz
+ \divide\countUTFz by 64
+ \countUTFy = \countUTFz % Save to be the future value of \countUTFz.
+ \multiply\countUTFz by 64
+
+ % \countUTFz is now \countUTFx with the last 5 bits cleared. Subtract
+ % in order to get the last five bits.
+ \advance\countUTFx by -\countUTFz
+
+ % Convert this to the byte in the UTF-8 sequence.
+ \advance\countUTFx by 128
+ \uccode `#1\countUTFx
+ \countUTFz = \countUTFy}
+
+ % Used to put a UTF-8 byte sequence into \UTFviiiTmp
+ % #1 is the increment for \countUTFz to yield a the first byte of the UTF-8
+ % sequence.
+ % #2 is one of the \UTFviii*OctetsName macros.
+ % #3 is always a full stop (.)
+ % #4 is a template for the other bytes in the sequence. The values for these
+ % bytes is substituted in here with \uppercase using the \uccode's.
+ \gdef\parseUTFviiiB#1#2#3#4{%
+ \advance\countUTFz by "#10\relax
+ \uccode `#3\countUTFz
+ \uppercase{\gdef\UTFviiiTmp{#2#3#4}}}
+\endgroup
+
+% For native Unicode handling (XeTeX and LuaTeX),
+% provide a definition macro that sets a catcode to `other' non-globally
+%
+\def\DeclareUnicodeCharacterNativeOther#1#2{%
+ \catcode"#1=\other
+}
+
+% https://en.wikipedia.org/wiki/Plane_(Unicode)#Basic_M
+% U+0000..U+007F = https://en.wikipedia.org/wiki/Basic_Latin_(Unicode_block)
+% U+0080..U+00FF = https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)
+% U+0100..U+017F = https://en.wikipedia.org/wiki/Latin_Extended-A
+% U+0180..U+024F = https://en.wikipedia.org/wiki/Latin_Extended-B
+%
+% Many of our renditions are less than wonderful, and all the missing
+% characters are available somewhere. Loading the necessary fonts
+% awaits user request. We can't truly support Unicode without
+% reimplementing everything that's been done in LaTeX for many years,
+% plus probably using luatex or xetex, and who knows what else.
+% We won't be doing that here in this simple file. But we can try to at
+% least make most of the characters not bomb out.
+%
+\def\unicodechardefs{%
+ \DeclareUnicodeCharacter{00A0}{\tie}%
+ \DeclareUnicodeCharacter{00A1}{\exclamdown}%
+ \DeclareUnicodeCharacter{00A2}{{\tcfont \char162}}% 0242=cent
+ \DeclareUnicodeCharacter{00A3}{\pounds{}}%
+ \DeclareUnicodeCharacter{00A4}{{\tcfont \char164}}% 0244=currency
+ \DeclareUnicodeCharacter{00A5}{{\tcfont \char165}}% 0245=yen
+ \DeclareUnicodeCharacter{00A6}{{\tcfont \char166}}% 0246=brokenbar
+ \DeclareUnicodeCharacter{00A7}{\S}%
+ \DeclareUnicodeCharacter{00A8}{\"{ }}%
+ \DeclareUnicodeCharacter{00A9}{\copyright{}}%
+ \DeclareUnicodeCharacter{00AA}{\ordf}%
+ \DeclareUnicodeCharacter{00AB}{\guillemetleft{}}%
+ \DeclareUnicodeCharacter{00AC}{\ensuremath\lnot}%
+ \DeclareUnicodeCharacter{00AD}{\-}%
+ \DeclareUnicodeCharacter{00AE}{\registeredsymbol{}}%
+ \DeclareUnicodeCharacter{00AF}{\={ }}%
+ %
+ \DeclareUnicodeCharacter{00B0}{\ringaccent{ }}%
+ \DeclareUnicodeCharacter{00B1}{\ensuremath\pm}%
+ \DeclareUnicodeCharacter{00B2}{$^2$}%
+ \DeclareUnicodeCharacter{00B3}{$^3$}%
+ \DeclareUnicodeCharacter{00B4}{\'{ }}%
+ \DeclareUnicodeCharacter{00B5}{$\mu$}%
+ \DeclareUnicodeCharacter{00B6}{\P}%
+ \DeclareUnicodeCharacter{00B7}{\ensuremath\cdot}%
+ \DeclareUnicodeCharacter{00B8}{\cedilla{ }}%
+ \DeclareUnicodeCharacter{00B9}{$^1$}%
+ \DeclareUnicodeCharacter{00BA}{\ordm}%
+ \DeclareUnicodeCharacter{00BB}{\guillemetright{}}%
+ \DeclareUnicodeCharacter{00BC}{$1\over4$}%
+ \DeclareUnicodeCharacter{00BD}{$1\over2$}%
+ \DeclareUnicodeCharacter{00BE}{$3\over4$}%
+ \DeclareUnicodeCharacter{00BF}{\questiondown}%
+ %
+ \DeclareUnicodeCharacter{00C0}{\`A}%
+ \DeclareUnicodeCharacter{00C1}{\'A}%
+ \DeclareUnicodeCharacter{00C2}{\^A}%
+ \DeclareUnicodeCharacter{00C3}{\~A}%
+ \DeclareUnicodeCharacter{00C4}{\"A}%
+ \DeclareUnicodeCharacter{00C5}{\AA}%
+ \DeclareUnicodeCharacter{00C6}{\AE}%
+ \DeclareUnicodeCharacter{00C7}{\cedilla{C}}%
+ \DeclareUnicodeCharacter{00C8}{\`E}%
+ \DeclareUnicodeCharacter{00C9}{\'E}%
+ \DeclareUnicodeCharacter{00CA}{\^E}%
+ \DeclareUnicodeCharacter{00CB}{\"E}%
+ \DeclareUnicodeCharacter{00CC}{\`I}%
+ \DeclareUnicodeCharacter{00CD}{\'I}%
+ \DeclareUnicodeCharacter{00CE}{\^I}%
+ \DeclareUnicodeCharacter{00CF}{\"I}%
+ %
+ \DeclareUnicodeCharacter{00D0}{\DH}%
+ \DeclareUnicodeCharacter{00D1}{\~N}%
+ \DeclareUnicodeCharacter{00D2}{\`O}%
+ \DeclareUnicodeCharacter{00D3}{\'O}%
+ \DeclareUnicodeCharacter{00D4}{\^O}%
+ \DeclareUnicodeCharacter{00D5}{\~O}%
+ \DeclareUnicodeCharacter{00D6}{\"O}%
+ \DeclareUnicodeCharacter{00D7}{\ensuremath\times}%
+ \DeclareUnicodeCharacter{00D8}{\O}%
+ \DeclareUnicodeCharacter{00D9}{\`U}%
+ \DeclareUnicodeCharacter{00DA}{\'U}%
+ \DeclareUnicodeCharacter{00DB}{\^U}%
+ \DeclareUnicodeCharacter{00DC}{\"U}%
+ \DeclareUnicodeCharacter{00DD}{\'Y}%
+ \DeclareUnicodeCharacter{00DE}{\TH}%
+ \DeclareUnicodeCharacter{00DF}{\ss}%
+ %
+ \DeclareUnicodeCharacter{00E0}{\`a}%
+ \DeclareUnicodeCharacter{00E1}{\'a}%
+ \DeclareUnicodeCharacter{00E2}{\^a}%
+ \DeclareUnicodeCharacter{00E3}{\~a}%
+ \DeclareUnicodeCharacter{00E4}{\"a}%
+ \DeclareUnicodeCharacter{00E5}{\aa}%
+ \DeclareUnicodeCharacter{00E6}{\ae}%
+ \DeclareUnicodeCharacter{00E7}{\cedilla{c}}%
+ \DeclareUnicodeCharacter{00E8}{\`e}%
+ \DeclareUnicodeCharacter{00E9}{\'e}%
+ \DeclareUnicodeCharacter{00EA}{\^e}%
+ \DeclareUnicodeCharacter{00EB}{\"e}%
+ \DeclareUnicodeCharacter{00EC}{\`{\dotless{i}}}%
+ \DeclareUnicodeCharacter{00ED}{\'{\dotless{i}}}%
+ \DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}}%
+ \DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}}%
+ %
+ \DeclareUnicodeCharacter{00F0}{\dh}%
+ \DeclareUnicodeCharacter{00F1}{\~n}%
+ \DeclareUnicodeCharacter{00F2}{\`o}%
+ \DeclareUnicodeCharacter{00F3}{\'o}%
+ \DeclareUnicodeCharacter{00F4}{\^o}%
+ \DeclareUnicodeCharacter{00F5}{\~o}%
+ \DeclareUnicodeCharacter{00F6}{\"o}%
+ \DeclareUnicodeCharacter{00F7}{\ensuremath\div}%
+ \DeclareUnicodeCharacter{00F8}{\o}%
+ \DeclareUnicodeCharacter{00F9}{\`u}%
+ \DeclareUnicodeCharacter{00FA}{\'u}%
+ \DeclareUnicodeCharacter{00FB}{\^u}%
+ \DeclareUnicodeCharacter{00FC}{\"u}%
+ \DeclareUnicodeCharacter{00FD}{\'y}%
+ \DeclareUnicodeCharacter{00FE}{\th}%
+ \DeclareUnicodeCharacter{00FF}{\"y}%
+ %
+ \DeclareUnicodeCharacter{0100}{\=A}%
+ \DeclareUnicodeCharacter{0101}{\=a}%
+ \DeclareUnicodeCharacter{0102}{\u{A}}%
+ \DeclareUnicodeCharacter{0103}{\u{a}}%
+ \DeclareUnicodeCharacter{0104}{\ogonek{A}}%
+ \DeclareUnicodeCharacter{0105}{\ogonek{a}}%
+ \DeclareUnicodeCharacter{0106}{\'C}%
+ \DeclareUnicodeCharacter{0107}{\'c}%
+ \DeclareUnicodeCharacter{0108}{\^C}%
+ \DeclareUnicodeCharacter{0109}{\^c}%
+ \DeclareUnicodeCharacter{010A}{\dotaccent{C}}%
+ \DeclareUnicodeCharacter{010B}{\dotaccent{c}}%
+ \DeclareUnicodeCharacter{010C}{\v{C}}%
+ \DeclareUnicodeCharacter{010D}{\v{c}}%
+ \DeclareUnicodeCharacter{010E}{\v{D}}%
+ \DeclareUnicodeCharacter{010F}{d'}%
+ %
+ \DeclareUnicodeCharacter{0110}{\DH}%
+ \DeclareUnicodeCharacter{0111}{\dh}%
+ \DeclareUnicodeCharacter{0112}{\=E}%
+ \DeclareUnicodeCharacter{0113}{\=e}%
+ \DeclareUnicodeCharacter{0114}{\u{E}}%
+ \DeclareUnicodeCharacter{0115}{\u{e}}%
+ \DeclareUnicodeCharacter{0116}{\dotaccent{E}}%
+ \DeclareUnicodeCharacter{0117}{\dotaccent{e}}%
+ \DeclareUnicodeCharacter{0118}{\ogonek{E}}%
+ \DeclareUnicodeCharacter{0119}{\ogonek{e}}%
+ \DeclareUnicodeCharacter{011A}{\v{E}}%
+ \DeclareUnicodeCharacter{011B}{\v{e}}%
+ \DeclareUnicodeCharacter{011C}{\^G}%
+ \DeclareUnicodeCharacter{011D}{\^g}%
+ \DeclareUnicodeCharacter{011E}{\u{G}}%
+ \DeclareUnicodeCharacter{011F}{\u{g}}%
+ %
+ \DeclareUnicodeCharacter{0120}{\dotaccent{G}}%
+ \DeclareUnicodeCharacter{0121}{\dotaccent{g}}%
+ \DeclareUnicodeCharacter{0122}{\cedilla{G}}%
+ \DeclareUnicodeCharacter{0123}{\cedilla{g}}%
+ \DeclareUnicodeCharacter{0124}{\^H}%
+ \DeclareUnicodeCharacter{0125}{\^h}%
+ \DeclareUnicodeCharacter{0126}{\missingcharmsg{H WITH STROKE}}%
+ \DeclareUnicodeCharacter{0127}{\missingcharmsg{h WITH STROKE}}%
+ \DeclareUnicodeCharacter{0128}{\~I}%
+ \DeclareUnicodeCharacter{0129}{\~{\dotless{i}}}%
+ \DeclareUnicodeCharacter{012A}{\=I}%
+ \DeclareUnicodeCharacter{012B}{\={\dotless{i}}}%
+ \DeclareUnicodeCharacter{012C}{\u{I}}%
+ \DeclareUnicodeCharacter{012D}{\u{\dotless{i}}}%
+ \DeclareUnicodeCharacter{012E}{\ogonek{I}}%
+ \DeclareUnicodeCharacter{012F}{\ogonek{i}}%
+ %
+ \DeclareUnicodeCharacter{0130}{\dotaccent{I}}%
+ \DeclareUnicodeCharacter{0131}{\dotless{i}}%
+ \DeclareUnicodeCharacter{0132}{IJ}%
+ \DeclareUnicodeCharacter{0133}{ij}%
+ \DeclareUnicodeCharacter{0134}{\^J}%
+ \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}}%
+ \DeclareUnicodeCharacter{0136}{\cedilla{K}}%
+ \DeclareUnicodeCharacter{0137}{\cedilla{k}}%
+ \DeclareUnicodeCharacter{0138}{\ensuremath\kappa}%
+ \DeclareUnicodeCharacter{0139}{\'L}%
+ \DeclareUnicodeCharacter{013A}{\'l}%
+ \DeclareUnicodeCharacter{013B}{\cedilla{L}}%
+ \DeclareUnicodeCharacter{013C}{\cedilla{l}}%
+ \DeclareUnicodeCharacter{013D}{L'}% should kern
+ \DeclareUnicodeCharacter{013E}{l'}% should kern
+ \DeclareUnicodeCharacter{013F}{L\U{00B7}}%
+ %
+ \DeclareUnicodeCharacter{0140}{l\U{00B7}}%
+ \DeclareUnicodeCharacter{0141}{\L}%
+ \DeclareUnicodeCharacter{0142}{\l}%
+ \DeclareUnicodeCharacter{0143}{\'N}%
+ \DeclareUnicodeCharacter{0144}{\'n}%
+ \DeclareUnicodeCharacter{0145}{\cedilla{N}}%
+ \DeclareUnicodeCharacter{0146}{\cedilla{n}}%
+ \DeclareUnicodeCharacter{0147}{\v{N}}%
+ \DeclareUnicodeCharacter{0148}{\v{n}}%
+ \DeclareUnicodeCharacter{0149}{'n}%
+ \DeclareUnicodeCharacter{014A}{\missingcharmsg{ENG}}%
+ \DeclareUnicodeCharacter{014B}{\missingcharmsg{eng}}%
+ \DeclareUnicodeCharacter{014C}{\=O}%
+ \DeclareUnicodeCharacter{014D}{\=o}%
+ \DeclareUnicodeCharacter{014E}{\u{O}}%
+ \DeclareUnicodeCharacter{014F}{\u{o}}%
+ %
+ \DeclareUnicodeCharacter{0150}{\H{O}}%
+ \DeclareUnicodeCharacter{0151}{\H{o}}%
+ \DeclareUnicodeCharacter{0152}{\OE}%
+ \DeclareUnicodeCharacter{0153}{\oe}%
+ \DeclareUnicodeCharacter{0154}{\'R}%
+ \DeclareUnicodeCharacter{0155}{\'r}%
+ \DeclareUnicodeCharacter{0156}{\cedilla{R}}%
+ \DeclareUnicodeCharacter{0157}{\cedilla{r}}%
+ \DeclareUnicodeCharacter{0158}{\v{R}}%
+ \DeclareUnicodeCharacter{0159}{\v{r}}%
+ \DeclareUnicodeCharacter{015A}{\'S}%
+ \DeclareUnicodeCharacter{015B}{\'s}%
+ \DeclareUnicodeCharacter{015C}{\^S}%
+ \DeclareUnicodeCharacter{015D}{\^s}%
+ \DeclareUnicodeCharacter{015E}{\cedilla{S}}%
+ \DeclareUnicodeCharacter{015F}{\cedilla{s}}%
+ %
+ \DeclareUnicodeCharacter{0160}{\v{S}}%
+ \DeclareUnicodeCharacter{0161}{\v{s}}%
+ \DeclareUnicodeCharacter{0162}{\cedilla{T}}%
+ \DeclareUnicodeCharacter{0163}{\cedilla{t}}%
+ \DeclareUnicodeCharacter{0164}{\v{T}}%
+ \DeclareUnicodeCharacter{0165}{\v{t}}%
+ \DeclareUnicodeCharacter{0166}{\missingcharmsg{H WITH STROKE}}%
+ \DeclareUnicodeCharacter{0167}{\missingcharmsg{h WITH STROKE}}%
+ \DeclareUnicodeCharacter{0168}{\~U}%
+ \DeclareUnicodeCharacter{0169}{\~u}%
+ \DeclareUnicodeCharacter{016A}{\=U}%
+ \DeclareUnicodeCharacter{016B}{\=u}%
+ \DeclareUnicodeCharacter{016C}{\u{U}}%
+ \DeclareUnicodeCharacter{016D}{\u{u}}%
+ \DeclareUnicodeCharacter{016E}{\ringaccent{U}}%
+ \DeclareUnicodeCharacter{016F}{\ringaccent{u}}%
+ %
+ \DeclareUnicodeCharacter{0170}{\H{U}}%
+ \DeclareUnicodeCharacter{0171}{\H{u}}%
+ \DeclareUnicodeCharacter{0172}{\ogonek{U}}%
+ \DeclareUnicodeCharacter{0173}{\ogonek{u}}%
+ \DeclareUnicodeCharacter{0174}{\^W}%
+ \DeclareUnicodeCharacter{0175}{\^w}%
+ \DeclareUnicodeCharacter{0176}{\^Y}%
+ \DeclareUnicodeCharacter{0177}{\^y}%
+ \DeclareUnicodeCharacter{0178}{\"Y}%
+ \DeclareUnicodeCharacter{0179}{\'Z}%
+ \DeclareUnicodeCharacter{017A}{\'z}%
+ \DeclareUnicodeCharacter{017B}{\dotaccent{Z}}%
+ \DeclareUnicodeCharacter{017C}{\dotaccent{z}}%
+ \DeclareUnicodeCharacter{017D}{\v{Z}}%
+ \DeclareUnicodeCharacter{017E}{\v{z}}%
+ \DeclareUnicodeCharacter{017F}{\missingcharmsg{LONG S}}%
+ %
+ \DeclareUnicodeCharacter{01C4}{D\v{Z}}%
+ \DeclareUnicodeCharacter{01C5}{D\v{z}}%
+ \DeclareUnicodeCharacter{01C6}{d\v{z}}%
+ \DeclareUnicodeCharacter{01C7}{LJ}%
+ \DeclareUnicodeCharacter{01C8}{Lj}%
+ \DeclareUnicodeCharacter{01C9}{lj}%
+ \DeclareUnicodeCharacter{01CA}{NJ}%
+ \DeclareUnicodeCharacter{01CB}{Nj}%
+ \DeclareUnicodeCharacter{01CC}{nj}%
+ \DeclareUnicodeCharacter{01CD}{\v{A}}%
+ \DeclareUnicodeCharacter{01CE}{\v{a}}%
+ \DeclareUnicodeCharacter{01CF}{\v{I}}%
+ %
+ \DeclareUnicodeCharacter{01D0}{\v{\dotless{i}}}%
+ \DeclareUnicodeCharacter{01D1}{\v{O}}%
+ \DeclareUnicodeCharacter{01D2}{\v{o}}%
+ \DeclareUnicodeCharacter{01D3}{\v{U}}%
+ \DeclareUnicodeCharacter{01D4}{\v{u}}%
+ %
+ \DeclareUnicodeCharacter{01E2}{\={\AE}}%
+ \DeclareUnicodeCharacter{01E3}{\={\ae}}%
+ \DeclareUnicodeCharacter{01E6}{\v{G}}%
+ \DeclareUnicodeCharacter{01E7}{\v{g}}%
+ \DeclareUnicodeCharacter{01E8}{\v{K}}%
+ \DeclareUnicodeCharacter{01E9}{\v{k}}%
+ %
+ \DeclareUnicodeCharacter{01F0}{\v{\dotless{j}}}%
+ \DeclareUnicodeCharacter{01F1}{DZ}%
+ \DeclareUnicodeCharacter{01F2}{Dz}%
+ \DeclareUnicodeCharacter{01F3}{dz}%
+ \DeclareUnicodeCharacter{01F4}{\'G}%
+ \DeclareUnicodeCharacter{01F5}{\'g}%
+ \DeclareUnicodeCharacter{01F8}{\`N}%
+ \DeclareUnicodeCharacter{01F9}{\`n}%
+ \DeclareUnicodeCharacter{01FC}{\'{\AE}}%
+ \DeclareUnicodeCharacter{01FD}{\'{\ae}}%
+ \DeclareUnicodeCharacter{01FE}{\'{\O}}%
+ \DeclareUnicodeCharacter{01FF}{\'{\o}}%
+ %
+ \DeclareUnicodeCharacter{021E}{\v{H}}%
+ \DeclareUnicodeCharacter{021F}{\v{h}}%
+ %
+ \DeclareUnicodeCharacter{0226}{\dotaccent{A}}%
+ \DeclareUnicodeCharacter{0227}{\dotaccent{a}}%
+ \DeclareUnicodeCharacter{0228}{\cedilla{E}}%
+ \DeclareUnicodeCharacter{0229}{\cedilla{e}}%
+ \DeclareUnicodeCharacter{022E}{\dotaccent{O}}%
+ \DeclareUnicodeCharacter{022F}{\dotaccent{o}}%
+ %
+ \DeclareUnicodeCharacter{0232}{\=Y}%
+ \DeclareUnicodeCharacter{0233}{\=y}%
+ \DeclareUnicodeCharacter{0237}{\dotless{j}}%
+ %
+ \DeclareUnicodeCharacter{02BC}{'}%
+ %
+ \DeclareUnicodeCharacter{02DB}{\ogonek{ }}%
+ %
+ % Greek letters upper case
+ \DeclareUnicodeCharacter{0391}{{\it A}}%
+ \DeclareUnicodeCharacter{0392}{{\it B}}%
+ \DeclareUnicodeCharacter{0393}{\ensuremath{\mit\Gamma}}%
+ \DeclareUnicodeCharacter{0394}{\ensuremath{\mit\Delta}}%
+ \DeclareUnicodeCharacter{0395}{{\it E}}%
+ \DeclareUnicodeCharacter{0396}{{\it Z}}%
+ \DeclareUnicodeCharacter{0397}{{\it H}}%
+ \DeclareUnicodeCharacter{0398}{\ensuremath{\mit\Theta}}%
+ \DeclareUnicodeCharacter{0399}{{\it I}}%
+ \DeclareUnicodeCharacter{039A}{{\it K}}%
+ \DeclareUnicodeCharacter{039B}{\ensuremath{\mit\Lambda}}%
+ \DeclareUnicodeCharacter{039C}{{\it M}}%
+ \DeclareUnicodeCharacter{039D}{{\it N}}%
+ \DeclareUnicodeCharacter{039E}{\ensuremath{\mit\Xi}}%
+ \DeclareUnicodeCharacter{039F}{{\it O}}%
+ \DeclareUnicodeCharacter{03A0}{\ensuremath{\mit\Pi}}%
+ \DeclareUnicodeCharacter{03A1}{{\it P}}%
+ %\DeclareUnicodeCharacter{03A2}{} % none - corresponds to final sigma
+ \DeclareUnicodeCharacter{03A3}{\ensuremath{\mit\Sigma}}%
+ \DeclareUnicodeCharacter{03A4}{{\it T}}%
+ \DeclareUnicodeCharacter{03A5}{\ensuremath{\mit\Upsilon}}%
+ \DeclareUnicodeCharacter{03A6}{\ensuremath{\mit\Phi}}%
+ \DeclareUnicodeCharacter{03A7}{{\it X}}%
+ \DeclareUnicodeCharacter{03A8}{\ensuremath{\mit\Psi}}%
+ \DeclareUnicodeCharacter{03A9}{\ensuremath{\mit\Omega}}%
+ %
+ % Vowels with accents
+ \DeclareUnicodeCharacter{0390}{\ensuremath{\ddot{\acute\iota}}}%
+ \DeclareUnicodeCharacter{03AC}{\ensuremath{\acute\alpha}}%
+ \DeclareUnicodeCharacter{03AD}{\ensuremath{\acute\epsilon}}%
+ \DeclareUnicodeCharacter{03AE}{\ensuremath{\acute\eta}}%
+ \DeclareUnicodeCharacter{03AF}{\ensuremath{\acute\iota}}%
+ \DeclareUnicodeCharacter{03B0}{\ensuremath{\acute{\ddot\upsilon}}}%
+ %
+ % Standalone accent
+ \DeclareUnicodeCharacter{0384}{\ensuremath{\acute{\ }}}%
+ %
+ % Greek letters lower case
+ \DeclareUnicodeCharacter{03B1}{\ensuremath\alpha}%
+ \DeclareUnicodeCharacter{03B2}{\ensuremath\beta}%
+ \DeclareUnicodeCharacter{03B3}{\ensuremath\gamma}%
+ \DeclareUnicodeCharacter{03B4}{\ensuremath\delta}%
+ \DeclareUnicodeCharacter{03B5}{\ensuremath\epsilon}%
+ \DeclareUnicodeCharacter{03B6}{\ensuremath\zeta}%
+ \DeclareUnicodeCharacter{03B7}{\ensuremath\eta}%
+ \DeclareUnicodeCharacter{03B8}{\ensuremath\theta}%
+ \DeclareUnicodeCharacter{03B9}{\ensuremath\iota}%
+ \DeclareUnicodeCharacter{03BA}{\ensuremath\kappa}%
+ \DeclareUnicodeCharacter{03BB}{\ensuremath\lambda}%
+ \DeclareUnicodeCharacter{03BC}{\ensuremath\mu}%
+ \DeclareUnicodeCharacter{03BD}{\ensuremath\nu}%
+ \DeclareUnicodeCharacter{03BE}{\ensuremath\xi}%
+ \DeclareUnicodeCharacter{03BF}{{\it o}}% omicron
+ \DeclareUnicodeCharacter{03C0}{\ensuremath\pi}%
+ \DeclareUnicodeCharacter{03C1}{\ensuremath\rho}%
+ \DeclareUnicodeCharacter{03C2}{\ensuremath\varsigma}%
+ \DeclareUnicodeCharacter{03C3}{\ensuremath\sigma}%
+ \DeclareUnicodeCharacter{03C4}{\ensuremath\tau}%
+ \DeclareUnicodeCharacter{03C5}{\ensuremath\upsilon}%
+ \DeclareUnicodeCharacter{03C6}{\ensuremath\phi}%
+ \DeclareUnicodeCharacter{03C7}{\ensuremath\chi}%
+ \DeclareUnicodeCharacter{03C8}{\ensuremath\psi}%
+ \DeclareUnicodeCharacter{03C9}{\ensuremath\omega}%
+ %
+ % More Greek vowels with accents
+ \DeclareUnicodeCharacter{03CA}{\ensuremath{\ddot\iota}}%
+ \DeclareUnicodeCharacter{03CB}{\ensuremath{\ddot\upsilon}}%
+ \DeclareUnicodeCharacter{03CC}{\ensuremath{\acute o}}%
+ \DeclareUnicodeCharacter{03CD}{\ensuremath{\acute\upsilon}}%
+ \DeclareUnicodeCharacter{03CE}{\ensuremath{\acute\omega}}%
+ %
+ % Variant Greek letters
+ \DeclareUnicodeCharacter{03D1}{\ensuremath\vartheta}%
+ \DeclareUnicodeCharacter{03D6}{\ensuremath\varpi}%
+ \DeclareUnicodeCharacter{03F1}{\ensuremath\varrho}%
+ %
+ \DeclareUnicodeCharacter{1E02}{\dotaccent{B}}%
+ \DeclareUnicodeCharacter{1E03}{\dotaccent{b}}%
+ \DeclareUnicodeCharacter{1E04}{\udotaccent{B}}%
+ \DeclareUnicodeCharacter{1E05}{\udotaccent{b}}%
+ \DeclareUnicodeCharacter{1E06}{\ubaraccent{B}}%
+ \DeclareUnicodeCharacter{1E07}{\ubaraccent{b}}%
+ \DeclareUnicodeCharacter{1E0A}{\dotaccent{D}}%
+ \DeclareUnicodeCharacter{1E0B}{\dotaccent{d}}%
+ \DeclareUnicodeCharacter{1E0C}{\udotaccent{D}}%
+ \DeclareUnicodeCharacter{1E0D}{\udotaccent{d}}%
+ \DeclareUnicodeCharacter{1E0E}{\ubaraccent{D}}%
+ \DeclareUnicodeCharacter{1E0F}{\ubaraccent{d}}%
+ %
+ \DeclareUnicodeCharacter{1E1E}{\dotaccent{F}}%
+ \DeclareUnicodeCharacter{1E1F}{\dotaccent{f}}%
+ %
+ \DeclareUnicodeCharacter{1E20}{\=G}%
+ \DeclareUnicodeCharacter{1E21}{\=g}%
+ \DeclareUnicodeCharacter{1E22}{\dotaccent{H}}%
+ \DeclareUnicodeCharacter{1E23}{\dotaccent{h}}%
+ \DeclareUnicodeCharacter{1E24}{\udotaccent{H}}%
+ \DeclareUnicodeCharacter{1E25}{\udotaccent{h}}%
+ \DeclareUnicodeCharacter{1E26}{\"H}%
+ \DeclareUnicodeCharacter{1E27}{\"h}%
+ %
+ \DeclareUnicodeCharacter{1E30}{\'K}%
+ \DeclareUnicodeCharacter{1E31}{\'k}%
+ \DeclareUnicodeCharacter{1E32}{\udotaccent{K}}%
+ \DeclareUnicodeCharacter{1E33}{\udotaccent{k}}%
+ \DeclareUnicodeCharacter{1E34}{\ubaraccent{K}}%
+ \DeclareUnicodeCharacter{1E35}{\ubaraccent{k}}%
+ \DeclareUnicodeCharacter{1E36}{\udotaccent{L}}%
+ \DeclareUnicodeCharacter{1E37}{\udotaccent{l}}%
+ \DeclareUnicodeCharacter{1E3A}{\ubaraccent{L}}%
+ \DeclareUnicodeCharacter{1E3B}{\ubaraccent{l}}%
+ \DeclareUnicodeCharacter{1E3E}{\'M}%
+ \DeclareUnicodeCharacter{1E3F}{\'m}%
+ %
+ \DeclareUnicodeCharacter{1E40}{\dotaccent{M}}%
+ \DeclareUnicodeCharacter{1E41}{\dotaccent{m}}%
+ \DeclareUnicodeCharacter{1E42}{\udotaccent{M}}%
+ \DeclareUnicodeCharacter{1E43}{\udotaccent{m}}%
+ \DeclareUnicodeCharacter{1E44}{\dotaccent{N}}%
+ \DeclareUnicodeCharacter{1E45}{\dotaccent{n}}%
+ \DeclareUnicodeCharacter{1E46}{\udotaccent{N}}%
+ \DeclareUnicodeCharacter{1E47}{\udotaccent{n}}%
+ \DeclareUnicodeCharacter{1E48}{\ubaraccent{N}}%
+ \DeclareUnicodeCharacter{1E49}{\ubaraccent{n}}%
+ %
+ \DeclareUnicodeCharacter{1E54}{\'P}%
+ \DeclareUnicodeCharacter{1E55}{\'p}%
+ \DeclareUnicodeCharacter{1E56}{\dotaccent{P}}%
+ \DeclareUnicodeCharacter{1E57}{\dotaccent{p}}%
+ \DeclareUnicodeCharacter{1E58}{\dotaccent{R}}%
+ \DeclareUnicodeCharacter{1E59}{\dotaccent{r}}%
+ \DeclareUnicodeCharacter{1E5A}{\udotaccent{R}}%
+ \DeclareUnicodeCharacter{1E5B}{\udotaccent{r}}%
+ \DeclareUnicodeCharacter{1E5E}{\ubaraccent{R}}%
+ \DeclareUnicodeCharacter{1E5F}{\ubaraccent{r}}%
+ %
+ \DeclareUnicodeCharacter{1E60}{\dotaccent{S}}%
+ \DeclareUnicodeCharacter{1E61}{\dotaccent{s}}%
+ \DeclareUnicodeCharacter{1E62}{\udotaccent{S}}%
+ \DeclareUnicodeCharacter{1E63}{\udotaccent{s}}%
+ \DeclareUnicodeCharacter{1E6A}{\dotaccent{T}}%
+ \DeclareUnicodeCharacter{1E6B}{\dotaccent{t}}%
+ \DeclareUnicodeCharacter{1E6C}{\udotaccent{T}}%
+ \DeclareUnicodeCharacter{1E6D}{\udotaccent{t}}%
+ \DeclareUnicodeCharacter{1E6E}{\ubaraccent{T}}%
+ \DeclareUnicodeCharacter{1E6F}{\ubaraccent{t}}%
+ %
+ \DeclareUnicodeCharacter{1E7C}{\~V}%
+ \DeclareUnicodeCharacter{1E7D}{\~v}%
+ \DeclareUnicodeCharacter{1E7E}{\udotaccent{V}}%
+ \DeclareUnicodeCharacter{1E7F}{\udotaccent{v}}%
+ %
+ \DeclareUnicodeCharacter{1E80}{\`W}%
+ \DeclareUnicodeCharacter{1E81}{\`w}%
+ \DeclareUnicodeCharacter{1E82}{\'W}%
+ \DeclareUnicodeCharacter{1E83}{\'w}%
+ \DeclareUnicodeCharacter{1E84}{\"W}%
+ \DeclareUnicodeCharacter{1E85}{\"w}%
+ \DeclareUnicodeCharacter{1E86}{\dotaccent{W}}%
+ \DeclareUnicodeCharacter{1E87}{\dotaccent{w}}%
+ \DeclareUnicodeCharacter{1E88}{\udotaccent{W}}%
+ \DeclareUnicodeCharacter{1E89}{\udotaccent{w}}%
+ \DeclareUnicodeCharacter{1E8A}{\dotaccent{X}}%
+ \DeclareUnicodeCharacter{1E8B}{\dotaccent{x}}%
+ \DeclareUnicodeCharacter{1E8C}{\"X}%
+ \DeclareUnicodeCharacter{1E8D}{\"x}%
+ \DeclareUnicodeCharacter{1E8E}{\dotaccent{Y}}%
+ \DeclareUnicodeCharacter{1E8F}{\dotaccent{y}}%
+ %
+ \DeclareUnicodeCharacter{1E90}{\^Z}%
+ \DeclareUnicodeCharacter{1E91}{\^z}%
+ \DeclareUnicodeCharacter{1E92}{\udotaccent{Z}}%
+ \DeclareUnicodeCharacter{1E93}{\udotaccent{z}}%
+ \DeclareUnicodeCharacter{1E94}{\ubaraccent{Z}}%
+ \DeclareUnicodeCharacter{1E95}{\ubaraccent{z}}%
+ \DeclareUnicodeCharacter{1E96}{\ubaraccent{h}}%
+ \DeclareUnicodeCharacter{1E97}{\"t}%
+ \DeclareUnicodeCharacter{1E98}{\ringaccent{w}}%
+ \DeclareUnicodeCharacter{1E99}{\ringaccent{y}}%
+ %
+ \DeclareUnicodeCharacter{1EA0}{\udotaccent{A}}%
+ \DeclareUnicodeCharacter{1EA1}{\udotaccent{a}}%
+ %
+ \DeclareUnicodeCharacter{1EB8}{\udotaccent{E}}%
+ \DeclareUnicodeCharacter{1EB9}{\udotaccent{e}}%
+ \DeclareUnicodeCharacter{1EBC}{\~E}%
+ \DeclareUnicodeCharacter{1EBD}{\~e}%
+ %
+ \DeclareUnicodeCharacter{1ECA}{\udotaccent{I}}%
+ \DeclareUnicodeCharacter{1ECB}{\udotaccent{i}}%
+ \DeclareUnicodeCharacter{1ECC}{\udotaccent{O}}%
+ \DeclareUnicodeCharacter{1ECD}{\udotaccent{o}}%
+ %
+ \DeclareUnicodeCharacter{1EE4}{\udotaccent{U}}%
+ \DeclareUnicodeCharacter{1EE5}{\udotaccent{u}}%
+ %
+ \DeclareUnicodeCharacter{1EF2}{\`Y}%
+ \DeclareUnicodeCharacter{1EF3}{\`y}%
+ \DeclareUnicodeCharacter{1EF4}{\udotaccent{Y}}%
+ %
+ \DeclareUnicodeCharacter{1EF8}{\~Y}%
+ \DeclareUnicodeCharacter{1EF9}{\~y}%
+ %
+ % Punctuation
+ \DeclareUnicodeCharacter{2013}{--}%
+ \DeclareUnicodeCharacter{2014}{---}%
+ \DeclareUnicodeCharacter{2018}{\quoteleft{}}%
+ \DeclareUnicodeCharacter{2019}{\quoteright{}}%
+ \DeclareUnicodeCharacter{201A}{\quotesinglbase{}}%
+ \DeclareUnicodeCharacter{201C}{\quotedblleft{}}%
+ \DeclareUnicodeCharacter{201D}{\quotedblright{}}%
+ \DeclareUnicodeCharacter{201E}{\quotedblbase{}}%
+ \DeclareUnicodeCharacter{2020}{\ensuremath\dagger}%
+ \DeclareUnicodeCharacter{2021}{\ensuremath\ddagger}%
+ \DeclareUnicodeCharacter{2022}{\bullet{}}%
+ \DeclareUnicodeCharacter{202F}{\thinspace}%
+ \DeclareUnicodeCharacter{2026}{\dots{}}%
+ \DeclareUnicodeCharacter{2039}{\guilsinglleft{}}%
+ \DeclareUnicodeCharacter{203A}{\guilsinglright{}}%
+ %
+ \DeclareUnicodeCharacter{20AC}{\euro{}}%
+ %
+ \DeclareUnicodeCharacter{2192}{\expansion{}}%
+ \DeclareUnicodeCharacter{21D2}{\result{}}%
+ %
+ % Mathematical symbols
+ \DeclareUnicodeCharacter{2200}{\ensuremath\forall}%
+ \DeclareUnicodeCharacter{2203}{\ensuremath\exists}%
+ \DeclareUnicodeCharacter{2208}{\ensuremath\in}%
+ \DeclareUnicodeCharacter{2212}{\minus{}}%
+ \DeclareUnicodeCharacter{2217}{\ast}%
+ \DeclareUnicodeCharacter{221E}{\ensuremath\infty}%
+ \DeclareUnicodeCharacter{2225}{\ensuremath\parallel}%
+ \DeclareUnicodeCharacter{2227}{\ensuremath\wedge}%
+ \DeclareUnicodeCharacter{2229}{\ensuremath\cap}%
+ \DeclareUnicodeCharacter{2261}{\equiv{}}%
+ \DeclareUnicodeCharacter{2264}{\ensuremath\leq}%
+ \DeclareUnicodeCharacter{2265}{\ensuremath\geq}%
+ \DeclareUnicodeCharacter{2282}{\ensuremath\subset}%
+ \DeclareUnicodeCharacter{2287}{\ensuremath\supseteq}%
+ %
+ \DeclareUnicodeCharacter{2016}{\ensuremath\Vert}%
+ \DeclareUnicodeCharacter{2032}{\ensuremath\prime}%
+ \DeclareUnicodeCharacter{210F}{\ensuremath\hbar}%
+ \DeclareUnicodeCharacter{2111}{\ensuremath\Im}%
+ \DeclareUnicodeCharacter{2113}{\ensuremath\ell}%
+ \DeclareUnicodeCharacter{2118}{\ensuremath\wp}%
+ \DeclareUnicodeCharacter{211C}{\ensuremath\Re}%
+ \DeclareUnicodeCharacter{2135}{\ensuremath\aleph}%
+ \DeclareUnicodeCharacter{2190}{\ensuremath\leftarrow}%
+ \DeclareUnicodeCharacter{2191}{\ensuremath\uparrow}%
+ \DeclareUnicodeCharacter{2193}{\ensuremath\downarrow}%
+ \DeclareUnicodeCharacter{2194}{\ensuremath\leftrightarrow}%
+ \DeclareUnicodeCharacter{2195}{\ensuremath\updownarrow}%
+ \DeclareUnicodeCharacter{2196}{\ensuremath\nwarrow}%
+ \DeclareUnicodeCharacter{2197}{\ensuremath\nearrow}%
+ \DeclareUnicodeCharacter{2198}{\ensuremath\searrow}%
+ \DeclareUnicodeCharacter{2199}{\ensuremath\swarrow}%
+ \DeclareUnicodeCharacter{21A6}{\ensuremath\mapsto}%
+ \DeclareUnicodeCharacter{21A9}{\ensuremath\hookleftarrow}%
+ \DeclareUnicodeCharacter{21AA}{\ensuremath\hookrightarrow}%
+ \DeclareUnicodeCharacter{21BC}{\ensuremath\leftharpoonup}%
+ \DeclareUnicodeCharacter{21BD}{\ensuremath\leftharpoondown}%
+ \DeclareUnicodeCharacter{21C0}{\ensuremath\rightharpoonup}%
+ \DeclareUnicodeCharacter{21C1}{\ensuremath\rightharpoondown}%
+ \DeclareUnicodeCharacter{21CC}{\ensuremath\rightleftharpoons}%
+ \DeclareUnicodeCharacter{21D0}{\ensuremath\Leftarrow}%
+ \DeclareUnicodeCharacter{21D1}{\ensuremath\Uparrow}%
+ \DeclareUnicodeCharacter{21D3}{\ensuremath\Downarrow}%
+ \DeclareUnicodeCharacter{21D4}{\ensuremath\Leftrightarrow}%
+ \DeclareUnicodeCharacter{21D5}{\ensuremath\Updownarrow}%
+ \DeclareUnicodeCharacter{2202}{\ensuremath\partial}%
+ \DeclareUnicodeCharacter{2205}{\ensuremath\emptyset}%
+ \DeclareUnicodeCharacter{2207}{\ensuremath\nabla}%
+ \DeclareUnicodeCharacter{2209}{\ensuremath\notin}%
+ \DeclareUnicodeCharacter{220B}{\ensuremath\owns}%
+ \DeclareUnicodeCharacter{220F}{\ensuremath\prod}%
+ \DeclareUnicodeCharacter{2210}{\ensuremath\coprod}%
+ \DeclareUnicodeCharacter{2211}{\ensuremath\sum}%
+ \DeclareUnicodeCharacter{2213}{\ensuremath\mp}%
+ \DeclareUnicodeCharacter{2218}{\ensuremath\circ}%
+ \DeclareUnicodeCharacter{221A}{\ensuremath\surd}%
+ \DeclareUnicodeCharacter{221D}{\ensuremath\propto}%
+ \DeclareUnicodeCharacter{2220}{\ensuremath\angle}%
+ \DeclareUnicodeCharacter{2223}{\ensuremath\mid}%
+ \DeclareUnicodeCharacter{2228}{\ensuremath\vee}%
+ \DeclareUnicodeCharacter{222A}{\ensuremath\cup}%
+ \DeclareUnicodeCharacter{222B}{\ensuremath\smallint}%
+ \DeclareUnicodeCharacter{222E}{\ensuremath\oint}%
+ \DeclareUnicodeCharacter{223C}{\ensuremath\sim}%
+ \DeclareUnicodeCharacter{2240}{\ensuremath\wr}%
+ \DeclareUnicodeCharacter{2243}{\ensuremath\simeq}%
+ \DeclareUnicodeCharacter{2245}{\ensuremath\cong}%
+ \DeclareUnicodeCharacter{2248}{\ensuremath\approx}%
+ \DeclareUnicodeCharacter{224D}{\ensuremath\asymp}%
+ \DeclareUnicodeCharacter{2250}{\ensuremath\doteq}%
+ \DeclareUnicodeCharacter{2260}{\ensuremath\neq}%
+ \DeclareUnicodeCharacter{226A}{\ensuremath\ll}%
+ \DeclareUnicodeCharacter{226B}{\ensuremath\gg}%
+ \DeclareUnicodeCharacter{227A}{\ensuremath\prec}%
+ \DeclareUnicodeCharacter{227B}{\ensuremath\succ}%
+ \DeclareUnicodeCharacter{2283}{\ensuremath\supset}%
+ \DeclareUnicodeCharacter{2286}{\ensuremath\subseteq}%
+ \DeclareUnicodeCharacter{228E}{\ensuremath\uplus}%
+ \DeclareUnicodeCharacter{2291}{\ensuremath\sqsubseteq}%
+ \DeclareUnicodeCharacter{2292}{\ensuremath\sqsupseteq}%
+ \DeclareUnicodeCharacter{2293}{\ensuremath\sqcap}%
+ \DeclareUnicodeCharacter{2294}{\ensuremath\sqcup}%
+ \DeclareUnicodeCharacter{2295}{\ensuremath\oplus}%
+ \DeclareUnicodeCharacter{2296}{\ensuremath\ominus}%
+ \DeclareUnicodeCharacter{2297}{\ensuremath\otimes}%
+ \DeclareUnicodeCharacter{2298}{\ensuremath\oslash}%
+ \DeclareUnicodeCharacter{2299}{\ensuremath\odot}%
+ \DeclareUnicodeCharacter{22A2}{\ensuremath\vdash}%
+ \DeclareUnicodeCharacter{22A3}{\ensuremath\dashv}%
+ \DeclareUnicodeCharacter{22A4}{\ensuremath\ptextop}%
+ \DeclareUnicodeCharacter{22A5}{\ensuremath\bot}%
+ \DeclareUnicodeCharacter{22A8}{\ensuremath\models}%
+ \DeclareUnicodeCharacter{22C0}{\ensuremath\bigwedge}%
+ \DeclareUnicodeCharacter{22C1}{\ensuremath\bigvee}%
+ \DeclareUnicodeCharacter{22C2}{\ensuremath\bigcap}%
+ \DeclareUnicodeCharacter{22C3}{\ensuremath\bigcup}%
+ \DeclareUnicodeCharacter{22C4}{\ensuremath\diamond}%
+ \DeclareUnicodeCharacter{22C5}{\ensuremath\cdot}%
+ \DeclareUnicodeCharacter{22C6}{\ensuremath\star}%
+ \DeclareUnicodeCharacter{22C8}{\ensuremath\bowtie}%
+ \DeclareUnicodeCharacter{2308}{\ensuremath\lceil}%
+ \DeclareUnicodeCharacter{2309}{\ensuremath\rceil}%
+ \DeclareUnicodeCharacter{230A}{\ensuremath\lfloor}%
+ \DeclareUnicodeCharacter{230B}{\ensuremath\rfloor}%
+ \DeclareUnicodeCharacter{2322}{\ensuremath\frown}%
+ \DeclareUnicodeCharacter{2323}{\ensuremath\smile}%
+ %
+ \DeclareUnicodeCharacter{25B3}{\ensuremath\triangle}%
+ \DeclareUnicodeCharacter{25B7}{\ensuremath\triangleright}%
+ \DeclareUnicodeCharacter{25BD}{\ensuremath\bigtriangledown}%
+ \DeclareUnicodeCharacter{25C1}{\ensuremath\triangleleft}%
+ \DeclareUnicodeCharacter{25C7}{\ensuremath\diamond}%
+ \DeclareUnicodeCharacter{2660}{\ensuremath\spadesuit}%
+ \DeclareUnicodeCharacter{2661}{\ensuremath\heartsuit}%
+ \DeclareUnicodeCharacter{2662}{\ensuremath\diamondsuit}%
+ \DeclareUnicodeCharacter{2663}{\ensuremath\clubsuit}%
+ \DeclareUnicodeCharacter{266D}{\ensuremath\flat}%
+ \DeclareUnicodeCharacter{266E}{\ensuremath\natural}%
+ \DeclareUnicodeCharacter{266F}{\ensuremath\sharp}%
+ \DeclareUnicodeCharacter{26AA}{\ensuremath\bigcirc}%
+ \DeclareUnicodeCharacter{27B9}{\ensuremath\rangle}%
+ \DeclareUnicodeCharacter{27C2}{\ensuremath\perp}%
+ \DeclareUnicodeCharacter{27E8}{\ensuremath\langle}%
+ \DeclareUnicodeCharacter{27F5}{\ensuremath\longleftarrow}%
+ \DeclareUnicodeCharacter{27F6}{\ensuremath\longrightarrow}%
+ \DeclareUnicodeCharacter{27F7}{\ensuremath\longleftrightarrow}%
+ \DeclareUnicodeCharacter{27FC}{\ensuremath\longmapsto}%
+ \DeclareUnicodeCharacter{29F5}{\ensuremath\setminus}%
+ \DeclareUnicodeCharacter{2A00}{\ensuremath\bigodot}%
+ \DeclareUnicodeCharacter{2A01}{\ensuremath\bigoplus}%
+ \DeclareUnicodeCharacter{2A02}{\ensuremath\bigotimes}%
+ \DeclareUnicodeCharacter{2A04}{\ensuremath\biguplus}%
+ \DeclareUnicodeCharacter{2A06}{\ensuremath\bigsqcup}%
+ \DeclareUnicodeCharacter{2A3F}{\ensuremath\amalg}%
+ \DeclareUnicodeCharacter{2AAF}{\ensuremath\preceq}%
+ \DeclareUnicodeCharacter{2AB0}{\ensuremath\succeq}%
+ %
+ \global\mathchardef\checkmark="1370% actually the square root sign
+ \DeclareUnicodeCharacter{2713}{\ensuremath\checkmark}%
+}% end of \unicodechardefs
+
+% UTF-8 byte sequence (pdfTeX) definitions (replacing and @U command)
+% It makes the setting that replace UTF-8 byte sequence.
+\def\utfeightchardefs{%
+ \let\DeclareUnicodeCharacter\DeclareUnicodeCharacterUTFviii
+ \unicodechardefs
+}
+
+% Whether the active definitions of non-ASCII characters expand to
+% non-active tokens with the same character code. This is used to
+% write characters literally, instead of using active definitions for
+% printing the correct glyphs.
+\newif\ifpassthroughchars
+\passthroughcharsfalse
+
+% For native Unicode handling (XeTeX and LuaTeX),
+% provide a definition macro to replace/pass-through a Unicode character
+%
+\def\DeclareUnicodeCharacterNative#1#2{%
+ \catcode"#1=\active
+ \def\dodeclareunicodecharacternative##1##2##3{%
+ \begingroup
+ \uccode`\~="##2\relax
+ \uppercase{\gdef~}{%
+ \ifpassthroughchars
+ ##1%
+ \else
+ ##3%
+ \fi
+ }
+ \endgroup
+ }
+ \begingroup
+ \uccode`\.="#1\relax
+ \uppercase{\def\UTFNativeTmp{.}}%
+ \expandafter\dodeclareunicodecharacternative\UTFNativeTmp{#1}{#2}%
+ \endgroup
+}
+
+% Native Unicode handling (XeTeX and LuaTeX) character replacing definition.
+% It activates the setting that replaces Unicode characters.
+\def\nativeunicodechardefs{%
+ \let\DeclareUnicodeCharacter\DeclareUnicodeCharacterNative
+ \unicodechardefs
+}
+
+% For native Unicode handling (XeTeX and LuaTeX),
+% make the character token expand
+% to the sequences given in \unicodechardefs for printing.
+\def\DeclareUnicodeCharacterNativeAtU#1#2{%
+ \def\UTFAtUTmp{#2}
+ \expandafter\globallet\csname uni:#1\endcsname \UTFAtUTmp
+}
+
+% @U command definitions for native Unicode handling (XeTeX and LuaTeX).
+\def\nativeunicodechardefsatu{%
+ \let\DeclareUnicodeCharacter\DeclareUnicodeCharacterNativeAtU
+ \unicodechardefs
+}
+
+% US-ASCII character definitions.
+\def\asciichardefs{% nothing need be done
+ \relax
+}
+
+% Define all Unicode characters we know about. This makes UTF-8 the default
+% input encoding and allows @U to work.
+\iftxinativeunicodecapable
+ \nativeunicodechardefsatu
+\else
+ \utfeightchardefs
+\fi
+
+\message{formatting,}
+
+\newdimen\defaultparindent \defaultparindent = 15pt
+
+\chapheadingskip = 15pt plus 4pt minus 2pt
+\secheadingskip = 12pt plus 3pt minus 2pt
+\subsecheadingskip = 9pt plus 2pt minus 2pt
+
+% Prevent underfull vbox error messages.
+\vbadness = 10000
+
+% Don't be very finicky about underfull hboxes, either.
+\hbadness = 6666
+
+% Following George Bush, get rid of widows and orphans.
+\widowpenalty=10000
+\clubpenalty=10000
+
+% Use TeX 3.0's \emergencystretch to help line breaking, but if we're
+% using an old version of TeX, don't do anything. We want the amount of
+% stretch added to depend on the line length, hence the dependence on
+% \hsize. We call this whenever the paper size is set.
+%
+\def\setemergencystretch{%
+ \ifx\emergencystretch\thisisundefined
+ % Allow us to assign to \emergencystretch anyway.
+ \def\emergencystretch{\dimen0}%
+ \else
+ \emergencystretch = .15\hsize
+ \fi
+}
+
+% Parameters in order: 1) textheight; 2) textwidth;
+% 3) voffset; 4) hoffset; 5) binding offset; 6) topskip;
+% 7) physical page height; 8) physical page width.
+%
+% We also call \setleading{\textleading}, so the caller should define
+% \textleading. The caller should also set \parskip.
+%
+\def\internalpagesizes#1#2#3#4#5#6#7#8{%
+ \voffset = #3\relax
+ \topskip = #6\relax
+ \splittopskip = \topskip
+ %
+ \vsize = #1\relax
+ \advance\vsize by \topskip
+ \outervsize = \vsize
+ \advance\outervsize by 2\topandbottommargin
+ \txipageheight = \vsize
+ %
+ \hsize = #2\relax
+ \outerhsize = \hsize
+ \advance\outerhsize by 0.5in
+ \txipagewidth = \hsize
+ %
+ \normaloffset = #4\relax
+ \bindingoffset = #5\relax
+ %
+ \ifpdf
+ \pdfpageheight #7\relax
+ \pdfpagewidth #8\relax
+ % if we don't reset these, they will remain at "1 true in" of
+ % whatever layout pdftex was dumped with.
+ \pdfhorigin = 1 true in
+ \pdfvorigin = 1 true in
+ \else
+ \ifx\XeTeXrevision\thisisundefined
+ \special{papersize=#8,#7}%
+ \else
+ \pdfpageheight #7\relax
+ \pdfpagewidth #8\relax
+ % XeTeX does not have \pdfhorigin and \pdfvorigin.
+ \fi
+ \fi
+ %
+ \setleading{\textleading}
+ %
+ \parindent = \defaultparindent
+ \setemergencystretch
+}
+
+% @letterpaper (the default).
+\def\letterpaper{{\globaldefs = 1
+ \parskip = 3pt plus 2pt minus 1pt
+ \textleading = 13.2pt
+ %
+ % If page is nothing but text, make it come out even.
+ \internalpagesizes{607.2pt}{6in}% that's 46 lines
+ {\voffset}{.25in}%
+ {\bindingoffset}{36pt}%
+ {11in}{8.5in}%
+}}
+
+% Use @smallbook to reset parameters for 7x9.25 trim size.
+\def\smallbook{{\globaldefs = 1
+ \parskip = 2pt plus 1pt
+ \textleading = 12pt
+ %
+ \internalpagesizes{7.5in}{5in}%
+ {-.2in}{0in}%
+ {\bindingoffset}{16pt}%
+ {9.25in}{7in}%
+ %
+ \lispnarrowing = 0.3in
+ \tolerance = 700
+ \contentsrightmargin = 0pt
+ \defbodyindent = .5cm
+}}
+
+% Use @smallerbook to reset parameters for 6x9 trim size.
+% (Just testing, parameters still in flux.)
+\def\smallerbook{{\globaldefs = 1
+ \parskip = 1.5pt plus 1pt
+ \textleading = 12pt
+ %
+ \internalpagesizes{7.4in}{4.8in}%
+ {-.2in}{-.4in}%
+ {0pt}{14pt}%
+ {9in}{6in}%
+ %
+ \lispnarrowing = 0.25in
+ \tolerance = 700
+ \contentsrightmargin = 0pt
+ \defbodyindent = .4cm
+}}
+
+% Use @afourpaper to print on European A4 paper.
+\def\afourpaper{{\globaldefs = 1
+ \parskip = 3pt plus 2pt minus 1pt
+ \textleading = 13.2pt
+ %
+ % Double-side printing via postscript on Laserjet 4050
+ % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm.
+ % To change the settings for a different printer or situation, adjust
+ % \normaloffset until the front-side and back-side texts align. Then
+ % do the same for \bindingoffset. You can set these for testing in
+ % your texinfo source file like this:
+ % @tex
+ % \global\normaloffset = -6mm
+ % \global\bindingoffset = 10mm
+ % @end tex
+ \internalpagesizes{673.2pt}{160mm}% that's 51 lines
+ {\voffset}{\hoffset}%
+ {\bindingoffset}{44pt}%
+ {297mm}{210mm}%
+ %
+ \tolerance = 700
+ \contentsrightmargin = 0pt
+ \defbodyindent = 5mm
+}}
+
+% Use @afivepaper to print on European A5 paper.
+% From romildo@urano.iceb.ufop.br, 2 July 2000.
+% He also recommends making @example and @lisp be small.
+\def\afivepaper{{\globaldefs = 1
+ \parskip = 2pt plus 1pt minus 0.1pt
+ \textleading = 12.5pt
+ %
+ \internalpagesizes{160mm}{120mm}%
+ {\voffset}{\hoffset}%
+ {\bindingoffset}{8pt}%
+ {210mm}{148mm}%
+ %
+ \lispnarrowing = 0.2in
+ \tolerance = 800
+ \contentsrightmargin = 0pt
+ \defbodyindent = 2mm
+ \tableindent = 12mm
+}}
+
+% A specific text layout, 24x15cm overall, intended for A4 paper.
+\def\afourlatex{{\globaldefs = 1
+ \afourpaper
+ \internalpagesizes{237mm}{150mm}%
+ {\voffset}{4.6mm}%
+ {\bindingoffset}{7mm}%
+ {297mm}{210mm}%
+ %
+ % Must explicitly reset to 0 because we call \afourpaper.
+ \globaldefs = 0
+}}
+
+% Use @afourwide to print on A4 paper in landscape format.
+\def\afourwide{{\globaldefs = 1
+ \afourpaper
+ \internalpagesizes{241mm}{165mm}%
+ {\voffset}{-2.95mm}%
+ {\bindingoffset}{7mm}%
+ {297mm}{210mm}%
+ \globaldefs = 0
+}}
+
+\def\bsixpaper{{\globaldefs = 1
+ \afourpaper
+ \internalpagesizes{140mm}{100mm}%
+ {-6.35mm}{-12.7mm}%
+ {\bindingoffset}{14pt}%
+ {176mm}{125mm}%
+ \let\SETdispenvsize=\smallword
+ \lispnarrowing = 0.2in
+ \globaldefs = 0
+}}
+
+
+% @pagesizes TEXTHEIGHT[,TEXTWIDTH]
+% Perhaps we should allow setting the margins, \topskip, \parskip,
+% and/or leading, also. Or perhaps we should compute them somehow.
+%
+\parseargdef\pagesizes{\pagesizesyyy #1,,\finish}
+\def\pagesizesyyy#1,#2,#3\finish{{%
+ \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi
+ \globaldefs = 1
+ %
+ \parskip = 3pt plus 2pt minus 1pt
+ \setleading{\textleading}%
+ %
+ \dimen0 = #1\relax
+ \advance\dimen0 by 2.5in % default 1in margin above heading line
+ % and 1.5in to include heading, footing and
+ % bottom margin
+ %
+ \dimen2 = \hsize
+ \advance\dimen2 by 2in % default to 1 inch margin on each side
+ %
+ \internalpagesizes{#1}{\hsize}%
+ {\voffset}{\normaloffset}%
+ {\bindingoffset}{44pt}%
+ {\dimen0}{\dimen2}%
+}}
+
+% Set default to letter.
+%
+\letterpaper
+
+% Default value of \hfuzz, for suppressing warnings about overfull hboxes.
+\hfuzz = 1pt
+
+
+\message{and turning on texinfo input format.}
+
+\def^^L{\par} % remove \outer, so ^L can appear in an @comment
+
+% DEL is a comment character, in case @c does not suffice.
+\catcode`\^^? = 14
+
+% Define macros to output various characters with catcode for normal text.
+\catcode`\"=\other \def\normaldoublequote{"}
+\catcode`\$=\other \def\normaldollar{$}%$ font-lock fix
+\catcode`\+=\other \def\normalplus{+}
+\catcode`\<=\other \def\normalless{<}
+\catcode`\>=\other \def\normalgreater{>}
+\catcode`\^=\other \def\normalcaret{^}
+\catcode`\_=\other \def\normalunderscore{_}
+\catcode`\|=\other \def\normalverticalbar{|}
+\catcode`\~=\other \def\normaltilde{~}
+
+% This macro is used to make a character print one way in \tt
+% (where it can probably be output as-is), and another way in other fonts,
+% where something hairier probably needs to be done.
+%
+% #1 is what to print if we are indeed using \tt; #2 is what to print
+% otherwise. Since all the Computer Modern typewriter fonts have zero
+% interword stretch (and shrink), and it is reasonable to expect all
+% typewriter fonts to have this, we can check that font parameter.
+%
+\def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi}
+
+% Same as above, but check for italic font. Actually this also catches
+% non-italic slanted fonts since it is impossible to distinguish them from
+% italic fonts. But since this is only used by $ and it uses \sl anyway
+% this is not a problem.
+\def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi}
+
+% Set catcodes for Texinfo file
+
+% Active characters for printing the wanted glyph.
+% Most of these we simply print from the \tt font, but for some, we can
+% use math or other variants that look better in normal text.
+%
+\catcode`\"=\active
+\def\activedoublequote{{\tt\char34}}
+\let"=\activedoublequote
+\catcode`\~=\active \def\activetilde{{\tt\char126}} \let~ = \activetilde
+\chardef\hatchar=`\^
+\catcode`\^=\active \def\activehat{{\tt \hatchar}} \let^ = \activehat
+
+\catcode`\_=\active
+\def_{\ifusingtt\normalunderscore\_}
+\def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em }
+\let\realunder=_
+
+\catcode`\|=\active \def|{{\tt\char124}}
+
+\chardef \less=`\<
+\catcode`\<=\active \def\activeless{{\tt \less}}\let< = \activeless
+\chardef \gtr=`\>
+\catcode`\>=\active \def\activegtr{{\tt \gtr}}\let> = \activegtr
+\catcode`\+=\active \def+{{\tt \char 43}}
+\catcode`\$=\active \def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix
+\catcode`\-=\active \let-=\normaldash
+
+
+% used for headline/footline in the output routine, in case the page
+% breaks in the middle of an @tex block.
+\def\texinfochars{%
+ \let< = \activeless
+ \let> = \activegtr
+ \let~ = \activetilde
+ \let^ = \activehat
+ \setregularquotes
+ \let\b = \strong
+ \let\i = \smartitalic
+ % in principle, all other definitions in \tex have to be undone too.
+}
+
+% Used sometimes to turn off (effectively) the active characters even after
+% parsing them.
+\def\turnoffactive{%
+ \normalturnoffactive
+ \otherbackslash
+}
+
+\catcode`\@=0
+
+% \backslashcurfont outputs one backslash character in current font,
+% as in \char`\\.
+\global\chardef\backslashcurfont=`\\
+
+% \realbackslash is an actual character `\' with catcode other.
+{\catcode`\\=\other @gdef@realbackslash{\}}
+
+% In Texinfo, backslash is an active character; it prints the backslash
+% in fixed width font.
+\catcode`\\=\active % @ for escape char from now on.
+
+% Print a typewriter backslash. For math mode, we can't simply use
+% \backslashcurfont: the story here is that in math mode, the \char
+% of \backslashcurfont ends up printing the roman \ from the math symbol
+% font (because \char in math mode uses the \mathcode, and plain.tex
+% sets \mathcode`\\="026E). Hence we use an explicit \mathchar,
+% which is the decimal equivalent of "715c (class 7, e.g., use \fam;
+% ignored family value; char position "5C). We can't use " for the
+% usual hex value because it has already been made active.
+
+@def@ttbackslash{{@tt @ifmmode @mathchar29020 @else @backslashcurfont @fi}}
+@let@backslashchar = @ttbackslash % @backslashchar{} is for user documents.
+
+% \otherbackslash defines an active \ to be a literal `\' character with
+% catcode other.
+@gdef@otherbackslash{@let\=@realbackslash}
+
+% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of
+% the literal character `\'.
+%
+{@catcode`- = @active
+ @gdef@normalturnoffactive{%
+ @passthroughcharstrue
+ @let-=@normaldash
+ @let"=@normaldoublequote
+ @let$=@normaldollar %$ font-lock fix
+ @let+=@normalplus
+ @let<=@normalless
+ @let>=@normalgreater
+ @let^=@normalcaret
+ @let_=@normalunderscore
+ @let|=@normalverticalbar
+ @let~=@normaltilde
+ @let\=@ttbackslash
+ @setregularquotes
+ @unsepspaces
+ }
+}
+
+% If a .fmt file is being used, characters that might appear in a file
+% name cannot be active until we have parsed the command line.
+% So turn them off again, and have @fixbackslash turn them back on.
+@catcode`+=@other @catcode`@_=@other
+
+% \enablebackslashhack - allow file to begin `\input texinfo'
+%
+% If a .fmt file is being used, we don't want the `\input texinfo' to show up.
+% That is what \eatinput is for; after that, the `\' should revert to printing
+% a backslash.
+% If the file did not have a `\input texinfo', then it is turned off after
+% the first line; otherwise the first `\' in the file would cause an error.
+% This is used on the very last line of this file, texinfo.tex.
+% We also use @c to call @fixbackslash, in case ends of lines are hidden.
+{
+@catcode`@^=7
+@catcode`@^^M=13@gdef@enablebackslashhack{%
+ @global@let\ = @eatinput%
+ @catcode`@^^M=13%
+ @def@c{@fixbackslash@c}%
+ % Definition for the newline at the end of this file.
+ @def ^^M{@let^^M@secondlinenl}%
+ % Definition for a newline in the main Texinfo file.
+ @gdef @secondlinenl{@fixbackslash}%
+ % In case the first line has a whole-line command on it
+ @let@originalparsearg@parsearg
+ @def@parsearg{@fixbackslash@originalparsearg}
+}}
+
+{@catcode`@^=7 @catcode`@^^M=13%
+@gdef@eatinput input texinfo#1^^M{@fixbackslash}}
+
+% Emergency active definition of newline, in case an active newline token
+% appears by mistake.
+{@catcode`@^=7 @catcode13=13%
+@gdef@enableemergencynewline{%
+ @gdef^^M{%
+ @par%
+ %<warning: active newline>@par%
+}}}
+
+
+@gdef@fixbackslash{%
+ @ifx\@eatinput @let\ = @ttbackslash @fi
+ @catcode13=5 % regular end of line
+ @enableemergencynewline
+ @let@c=@comment
+ @let@parsearg@originalparsearg
+ % Also turn back on active characters that might appear in the input
+ % file name, in case not using a pre-dumped format.
+ @catcode`+=@active
+ @catcode`@_=@active
+ %
+ % If texinfo.cnf is present on the system, read it.
+ % Useful for site-wide @afourpaper, etc. This macro, @fixbackslash, gets
+ % called at the beginning of every Texinfo file. Not opening texinfo.cnf
+ % directly in this file, texinfo.tex, makes it possible to make a format
+ % file for Texinfo.
+ %
+ @openin 1 texinfo.cnf
+ @ifeof 1 @else @input texinfo.cnf @fi
+ @closein 1
+}
+
+
+% Say @foo, not \foo, in error messages.
+@escapechar = `@@
+
+% These (along with & and #) are made active for url-breaking, so need
+% active definitions as the normal characters.
+@def@normaldot{.}
+@def@normalquest{?}
+@def@normalslash{/}
+
+% These look ok in all fonts, so just make them not special.
+% @hashchar{} gets its own user-level command, because of #line.
+@catcode`@& = @other @def@normalamp{&}
+@catcode`@# = @other @def@normalhash{#}
+@catcode`@% = @other @def@normalpercent{%}
+
+@let @hashchar = @normalhash
+
+@c Finally, make ` and ' active, so that txicodequoteundirected and
+@c txicodequotebacktick work right in, e.g., @w{@code{`foo'}}. If we
+@c don't make ` and ' active, @code will not get them as active chars.
+@c Do this last of all since we use ` in the previous @catcode assignments.
+@catcode`@'=@active
+@catcode`@`=@active
+@setregularquotes
+
+@c Local variables:
+@c eval: (add-hook 'before-save-hook 'time-stamp)
+@c page-delimiter: "^\\\\message\\|emacs-page"
+@c time-stamp-start: "def\\\\texinfoversion{"
+@c time-stamp-format: "%:y-%02m-%02d.%02H"
+@c time-stamp-end: "}"
+@c End:
+
+@c vim:sw=2:
+
+@enablebackslashhack
diff --git a/gprofng/doc/version.texi b/gprofng/doc/version.texi
new file mode 100644
index 00000000000..d28216107a9
--- /dev/null
+++ b/gprofng/doc/version.texi
@@ -0,0 +1,4 @@
+@set EDITION 1.0
+@set VERSION 1.0
+@set UPDATED 22 February 2022
+@set UPDATED-MONTH February 2022
diff --git a/gprofng/gp-display-html/Makefile.am b/gprofng/gp-display-html/Makefile.am
new file mode 100644
index 00000000000..7fc27d13e17
--- /dev/null
+++ b/gprofng/gp-display-html/Makefile.am
@@ -0,0 +1,60 @@
+## Process this file with automake to generate Makefile.in
+#
+# Copyright (C) 2021 Free Software Foundation, Inc.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 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; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+AUTOMAKE_OPTIONS = foreign
+ACLOCAL_AMFLAGS = -I . -I .. -I ../..
+
+dist_man_MANS = gp-display-html.1
+bin_SCRIPTS = gp-display-html
+CLEANFILES = $(bin_SCRIPTS)
+MAINTAINERCLEANFILES = $(dist_man_MANS)
+
+do_subst = sed -e 's/BINUTILS_VERSION/$(VERSION)/'
+
+gp-display-html: gp-display-html.in Makefile
+ $(do_subst) < $(srcdir)/gp-display-html.in > $@
+ chmod +x $@
+
+if BUILD_MAN
+
+# Use this if the man pages depend on the version number.
+# common_mandeps = $(top_srcdir)/../bfd/version.m4
+#
+# Also change the dependence line below to this:
+# gp-display-html.1: $(common_mandeps) gp-display-html
+#
+# Currently, the version number shown in the man page is derived from
+# the output printed with --version.
+
+# These variables are used by help2man to generate the man pages.
+
+INFO_PAGE = "gprofng"
+MANUAL = "User Commands"
+TEXT_GP_DISPLAY_HTML = "generate an HTML based directory structure to browse the profiles"
+
+HELP2MAN_OPT = --libtool --no-info --info-page=$(INFO_PAGE) --manual=$(MANUAL)
+H2M_FILTER = | sed 's/\.TP/\.TP\n.B/' | sed 's/Commands:/\.SH COMMANDS/' \
+ | sed 's/See also:/\.SH SEE ALSO/' | sed 's/Documentation:/.SH DOCUMENTATION/' \
+ | sed 's/Limitations:/.SH LIMITATIONS/'
+
+gp-display-html.1: gp-display-html
+ $(AM_V_GEN)_BUILDING_MANPAGE=1 $(HELP2MAN) $(HELP2MAN_OPT) \
+ --name=$(TEXT_GP_DISPLAY_HTML) ./gp-display-html $(H2M_FILTER) > $@
+
+endif
+
diff --git a/gprofng/gp-display-html/Makefile.in b/gprofng/gp-display-html/Makefile.in
new file mode 100644
index 00000000000..a222b955343
--- /dev/null
+++ b/gprofng/gp-display-html/Makefile.in
@@ -0,0 +1,641 @@
+# Makefile.in generated by automake 1.15.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2017 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+#
+# Copyright (C) 2021 Free Software Foundation, Inc.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 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; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+subdir = gp-display-html
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/../libtool.m4 \
+ $(top_srcdir)/../ltoptions.m4 $(top_srcdir)/../ltsugar.m4 \
+ $(top_srcdir)/../ltversion.m4 $(top_srcdir)/../lt~obsolete.m4 \
+ $(top_srcdir)/acinclude.m4 $(top_srcdir)/../config/warnings.m4 \
+ $(top_srcdir)/../config/enable.m4 \
+ $(top_srcdir)/../config/ax_pthread.m4 \
+ $(top_srcdir)/config/bison.m4 $(top_srcdir)/../bfd/version.m4 \
+ $(top_srcdir)/../config/zlib.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+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)$(bindir)" "$(DESTDIR)$(man1dir)"
+SCRIPTS = $(bin_SCRIPTS)
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+man1dir = $(mandir)/man1
+NROFF = nroff
+MANS = $(dist_man_MANS)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(dist_man_MANS) $(srcdir)/Makefile.in \
+ $(top_srcdir)/../mkinstalldirs
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BISON = @BISON@
+BUILD_SUBDIRS = @BUILD_SUBDIRS@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CLOCK_GETTIME_LINK = @CLOCK_GETTIME_LINK@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+EXPECT = @EXPECT@
+FGREP = @FGREP@
+GPROFNG_BROKEN_JAVAC = @GPROFNG_BROKEN_JAVAC@
+GPROFNG_CFLAGS = @GPROFNG_CFLAGS@
+GPROFNG_CPPFLAGS = @GPROFNG_CPPFLAGS@
+GPROFNG_LIBADD = @GPROFNG_LIBADD@
+GPROFNG_NO_FORMAT_TRUNCATION_CFLAGS = @GPROFNG_NO_FORMAT_TRUNCATION_CFLAGS@
+GPROFNG_NO_SWITCH_CFLAGS = @GPROFNG_NO_SWITCH_CFLAGS@
+GREP = @GREP@
+HELP2MAN = @HELP2MAN@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+JAVA = @JAVA@
+JAVAC = @JAVAC@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LD_NO_AS_NEEDED = @LD_NO_AS_NEEDED@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+WERROR = @WERROR@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+gprofng_cflags = @gprofng_cflags@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+jdk_inc = @jdk_inc@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+zlibdir = @zlibdir@
+zlibinc = @zlibinc@
+AUTOMAKE_OPTIONS = foreign
+ACLOCAL_AMFLAGS = -I . -I .. -I ../..
+dist_man_MANS = gp-display-html.1
+bin_SCRIPTS = gp-display-html
+CLEANFILES = $(bin_SCRIPTS)
+MAINTAINERCLEANFILES = $(dist_man_MANS)
+do_subst = sed -e 's/BINUTILS_VERSION/$(VERSION)/'
+
+# Use this if the man pages depend on the version number.
+# common_mandeps = $(top_srcdir)/../bfd/version.m4
+#
+# Also change the dependence line below to this:
+# gp-display-html.1: $(common_mandeps) gp-display-html
+#
+# Currently, the version number shown in the man page is derived from
+# the output printed with --version.
+
+# These variables are used by help2man to generate the man pages.
+@BUILD_MAN_TRUE@INFO_PAGE = "gprofng"
+@BUILD_MAN_TRUE@MANUAL = "User Commands"
+@BUILD_MAN_TRUE@TEXT_GP_DISPLAY_HTML = "generate an HTML based directory structure to browse the profiles"
+@BUILD_MAN_TRUE@HELP2MAN_OPT = --libtool --no-info --info-page=$(INFO_PAGE) --manual=$(MANUAL)
+@BUILD_MAN_TRUE@H2M_FILTER = | sed 's/\.TP/\.TP\n.B/' | sed 's/Commands:/\.SH COMMANDS/' \
+@BUILD_MAN_TRUE@ | sed 's/See also:/\.SH SEE ALSO/' | sed 's/Documentation:/.SH DOCUMENTATION/' \
+@BUILD_MAN_TRUE@ | sed 's/Limitations:/.SH LIMITATIONS/'
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign gp-display-html/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign gp-display-html/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-binSCRIPTS: $(bin_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n' \
+ -e 'h;s|.*|.|' \
+ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+ if (++n[d] == $(am__install_max)) { \
+ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+ else { print "f", d "/" $$4, $$1 } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-binSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 's,.*/,,;$(transform)'`; \
+ dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir)
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-man1: $(dist_man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(dist_man_MANS)'; \
+ test -n "$(man1dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.1[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man1:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man1dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.1[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir)
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS) $(MANS)
+installdirs:
+ for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ 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:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-binSCRIPTS
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man: install-man1
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binSCRIPTS uninstall-man
+
+uninstall-man: uninstall-man1
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ cscopelist-am ctags-am distclean distclean-generic \
+ distclean-libtool distdir dvi dvi-am html html-am info info-am \
+ install install-am install-binSCRIPTS install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-man1 install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \
+ uninstall-am uninstall-binSCRIPTS uninstall-man uninstall-man1
+
+.PRECIOUS: Makefile
+
+
+gp-display-html: gp-display-html.in Makefile
+ $(do_subst) < $(srcdir)/gp-display-html.in > $@
+ chmod +x $@
+
+@BUILD_MAN_TRUE@gp-display-html.1: gp-display-html
+@BUILD_MAN_TRUE@ $(AM_V_GEN)_BUILDING_MANPAGE=1 $(HELP2MAN) $(HELP2MAN_OPT) \
+@BUILD_MAN_TRUE@ --name=$(TEXT_GP_DISPLAY_HTML) ./gp-display-html $(H2M_FILTER) > $@
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/gprofng/gp-display-html/gp-display-html.in b/gprofng/gp-display-html/gp-display-html.in
new file mode 100644
index 00000000000..f8fbc244c52
--- /dev/null
+++ b/gprofng/gp-display-html/gp-display-html.in
@@ -0,0 +1,256 @@
+#!/usr/bin/perl
+
+# Copyright (C) 2021 Free Software Foundation, Inc.
+# Contributed by Oracle.
+#
+# This file is part of GNU Binutils.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+#------------------------------------------------------------------------------
+# gp-display-html, last updated July 2021
+#
+# NOTE: This is a skeleton version. The real code will follow as an update.
+#------------------------------------------------------------------------------
+
+use strict;
+use warnings;
+
+#------------------------------------------------------------------------------
+# Poor man's version of a boolean.
+#------------------------------------------------------------------------------
+my $TRUE = 1;
+my $FALSE = 0;
+
+#-------------------------------------------------------------------------------
+# Define the driver command, tool name and version number.
+#-------------------------------------------------------------------------------
+my $driver_cmd = "gprofng display html";
+my $tool_name = "gp-display-html";
+my $binutils_version = "BINUTILS_VERSION";
+my $version_info = $tool_name . " GNU binutils version " . $binutils_version;
+
+#------------------------------------------------------------------------------
+# This is cosmetic, but helps with the scoping of variables.
+#------------------------------------------------------------------------------
+
+ main ();
+
+ exit (0);
+
+#------------------------------------------------------------------------------
+# THE SUBROUTINES
+#------------------------------------------------------------------------------
+
+#------------------------------------------------------------------------------
+# This is the driver part of the program.
+#------------------------------------------------------------------------------
+sub
+main
+{
+ my $subr_name = "main";
+ my $ignore_value;
+
+#------------------------------------------------------------------------------
+# If no options are given, print the help info and exit.
+#------------------------------------------------------------------------------
+ $ignore_value = early_scan_specific_options();
+
+ $ignore_value = be_patient ();
+
+ return (0);
+
+} #-- End of subroutine main
+
+sub
+be_patient
+{
+ print "Functionality not implemented yet - please stay tuned for updates\n";
+
+} #-- End of subroutine be_patient
+
+#------------------------------------------------------------------------------
+# Prints the version number and license information.
+#------------------------------------------------------------------------------
+sub
+print_version_info
+{
+ print "$version_info\n";
+ print "Copyright (C) 2021 Free Software Foundation, Inc.\n";
+ print "License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.\n";
+ print "This is free software: you are free to change and redistribute it.\n";
+ print "There is NO WARRANTY, to the extent permitted by law.\n";
+
+ return (0);
+
+} #-- End of subroutine print_version_info
+
+#-------------------------------------------------------------------------------
+# Print the help overview
+#-------------------------------------------------------------------------------
+sub
+print_help_info
+{
+ print
+ "Usage: $driver_cmd [OPTION(S)] EXPERIMENT(S)\n".
+ "\n".
+ "Process one or more experiments to generate a directory containing an index.html\n".
+ "file that can be used to browse the experiment data\n".
+ "\n".
+ "Options:\n".
+ "\n".
+ " --help print usage information and exit.\n".
+ " --version print the version number and exit.\n".
+ " --verbose {on|off} enable (on) or disable (off) verbose mode; the default is \"off\".\n".
+ "\n".
+ "\n".
+ " -o, --output <dir-name> use <dir-name> to store the results in; the default\n".
+ " name is ./display.<n>.html with <n> the first number\n".
+ " not in use; an existing directory is not overwritten.\n".
+ "\n".
+ " -O, --overwrite <dir-name> use <dir-name> to store the results in and overwrite\n".
+ " any existing directory with the same name; make sure\n".
+ " that umask is set to the correct access permissions.\n".
+ "\n".
+ " -fl, --func_limit <limit> impose a limit on the number of functions processed;\n".
+ " this is an integer number; set to 0 to process all\n".
+ " functions; the default value is 100.\n".
+ "\n".
+ " -ct, --calltree {on|off} enable or disable an html page with a call tree linked\n".
+ " from the bottom of the first page; default is off.\n".
+ "\n".
+ " -tp, --threshold_percentage <percentage> provide a percentage of metric accountability; the\n".
+ " inclusion of functions for each metric will take\n".
+ " place in sort order until the percentage has been\n".
+ " reached.\n".
+ "\n".
+ " -dm, --default_metrics {on|off} enable or disable automatic selection of metrics\n".
+ " and use a default set of metrics; the default is off.\n".
+ "\n".
+ " -im, --ignore_metrics <metric-list> ignore the metrics from <metric-list>.\n".
+ "\n".
+ " -db, --debug {on|off} enable/disable debug mode; print detailed information to assist with troubleshooting\n".
+ " or further development of this tool; default is off.\n".
+ "\n".
+ " -q, --quiet {on|off} disable/enable the display of warnings; default is off.\n".
+ "\n".
+ "Environment:\n".
+ "\n".
+ "The options can be set in a configuration file called .gp-display-html.rc. This\n".
+ "file needs to be either in the current directory, or in the home directory of the user.\n".
+ "The long name of the option without the leading dashes is supported. For example calltree\n".
+ "to enable or disable the call tree. Note that some options take a value. In case the same option\n".
+ "occurs multiple times in this file, only the last setting encountered is preserved.\n".
+ "\n".
+ "Documentation:\n".
+ "\n".
+ "A getting started guide for gprofng is maintained as a Texinfo manual. If the info and\n".
+ "gprofng programs are properly installed at your site, the command \"info gprofng\"\n".
+ "should give you access to this document.\n".
+ "\n".
+ "See also:\n".
+ "\n".
+ "gprofng(1), gp-archive(1), gp-collect-app(1), gp-display-src(1), gp-display-text(1)\n";
+
+ return (0);
+
+} #-- End of subroutine print_help_info
+
+#------------------------------------------------------------------------------
+# Scan the command line for specific options.
+#------------------------------------------------------------------------------
+sub
+early_scan_specific_options
+{
+ my $subr_name = "early_scan_specific_options";
+
+ my $ignore_value;
+ my $found_option;
+ my $option_has_value;
+ my $option_value;
+
+ my $verbose_setting = $FALSE;
+ my $debug_setting = $FALSE;
+ my $quiet_setting = $FALSE;
+
+ $option_has_value = $FALSE;
+ ($found_option, $option_value) = find_target_option (\@ARGV, $option_has_value, "--version");
+ if ($found_option)
+ {
+ $ignore_value = print_version_info ();
+ exit(0);
+ }
+ $option_has_value = $FALSE;
+ ($found_option, $option_value) = find_target_option (\@ARGV, $option_has_value, "--help");
+ if ($found_option)
+ {
+ $ignore_value = print_help_info ();
+ exit(0);
+ }
+
+ return (0);
+
+} #-- End of subroutine early_scan_specific_options
+
+#------------------------------------------------------------------------------
+# Scan the command line to see if the specified option is present.
+#
+# Two types of options are supported: options without value (e.g. --help) or
+# those that are set to "on" or "off".
+#------------------------------------------------------------------------------
+sub
+find_target_option
+{
+ my ($command_line_ref, $has_value, $target_option) = @_;
+
+ my @command_line = @{ $command_line_ref };
+
+ my ($command_line_string) = join(" ", @command_line);
+
+ my $option_value = "not set";
+ my $found_option = $FALSE;
+
+ if ($command_line_string =~ /\s*($target_option)\s*(on|off)*\s*/)
+ {
+ if ($has_value)
+ {
+#------------------------------------------------------------------------------
+# We are looking for this kind if substring: "--verbose on"
+#------------------------------------------------------------------------------
+ if (defined($1) and defined($2))
+ {
+ if ( ($2 eq "on") or ($2 eq "off") )
+ {
+ $found_option = $TRUE;
+ $option_value = $2;
+ }
+ }
+ }
+ else
+ {
+#------------------------------------------------------------------------------
+# We are looking for this kind if substring: "--help"
+#------------------------------------------------------------------------------
+ if (defined($1))
+ {
+ $found_option = $TRUE;
+ }
+ }
+ }
+
+ return($found_option, $option_value);
+
+} #-- End of subroutine find_target_option
diff --git a/gprofng/libcollector/CHK_LIBC_OBJ b/gprofng/libcollector/CHK_LIBC_OBJ
new file mode 100755
index 00000000000..dbeb9cb8fb5
--- /dev/null
+++ b/gprofng/libcollector/CHK_LIBC_OBJ
@@ -0,0 +1,82 @@
+#!/bin/sh
+#
+# Copyright (C) 2021 Free Software Foundation, Inc.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 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; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+#
+# CHK_LIBC_OBJ -- a script to scan the .o's in an output directory,
+# which is one of ../{intel-S2,sparc-S2,intel-Linux,sparc-Linux}
+#
+# usage: cd to the output directory, and invoke ../src/CHK_LIBC_OBJ
+
+
+check_obj() {
+ logF="nm.`basename $1`.log"
+ if [ `uname` = 'Linux' ]; then
+ nm $1 | grep -v GLIBC_ > ${logF}
+ else
+ nm $1 > ${logF}
+ fi
+
+ FUNC_LIST="strcpy strlcpy strncpy strcat strlcat strncat strncmp strlen \
+ strerror strchr strrchr strpbrk strstr strtok strtok_r \
+ printf fprintf sprintf snprintf asprintf wsprintf \
+ vprintf vfprintf vsprintf vsnprintf vasprintf \
+ memset memcmp memcpy strtol strtoll strtoul strtoull \
+ getcpuid calloc malloc free strdup"
+ res=0
+ echo " -- Checking Object file '$1' for functions from libc"
+ for j in `echo ${FUNC_LIST}` ; do
+ grep -w ${j} ${logF} | grep UNDEF> grep.log 2>&1
+ if [ $? -eq 0 ]; then
+ grep -w ${j} ${logF}
+ res=1
+ fi
+ done
+ return ${res}
+}
+
+STATUS=0
+
+for i in *.o ; do
+ echo ""
+ check_obj ${i}
+ res=$?
+ if [ ${res} -eq 0 ]; then
+ echo "Object file ${i} does not reference functions in libc"
+ else
+ echo "======Object file: ${i} DOES reference functions in libc"
+ fi
+ if [ ${STATUS} -eq 0 ]; then
+ STATUS=${res}
+ fi
+done
+
+for i in *.so ; do
+ echo ""
+ check_obj ${i}
+ res=$?
+ if [ ${res} -eq 0 ]; then
+ echo "Object file ${i} does not reference functions in libc"
+ else
+ echo "======Object file: ${i} DOES reference functions in libc"
+ fi
+ if [ ${STATUS} -eq 0 ]; then
+ STATUS=${res}
+ fi
+done
+
+exit $STATUS
diff --git a/gprofng/libcollector/Makefile.am b/gprofng/libcollector/Makefile.am
new file mode 100644
index 00000000000..ddce555fc87
--- /dev/null
+++ b/gprofng/libcollector/Makefile.am
@@ -0,0 +1,85 @@
+## Process this file with automake to generate Makefile.in
+#
+# Copyright (C) 2021 Free Software Foundation, Inc.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 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; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+AUTOMAKE_OPTIONS = foreign
+ACLOCAL_AMFLAGS = -I . -I ../..
+
+GPROFNG_VARIANT = @GPROFNG_VARIANT@
+
+CSOURCES = \
+ gethrtime.c \
+ dispatcher.c \
+ iolib.c \
+ mmaptrace.c \
+ memmgr.c \
+ tsd.c \
+ profile.c \
+ envmgmt.c \
+ linetrace.c \
+ libcol_hwcdrv.c \
+ libcol_hwcfuncs.c \
+ libcol-i386-dis.c \
+ hwprofile.c \
+ jprofile.c \
+ unwind.c \
+ libcol_util.c \
+ collector.c \
+ $(NULL)
+
+AM_CFLAGS = $(GPROFNG_CFLAGS) $(GPROFNG_NO_NONNULL_COMPARE_CFLAGS)
+AM_CPPFLAGS = $(GPROFNG_CPPFLAGS) -I.. -I$(srcdir) \
+ -I$(srcdir)/../common -I$(srcdir)/../src \
+ -I$(srcdir)/../../include
+AM_LDFLAGS = -module -avoid-version \
+ -Wl,--version-script,$(srcdir)/mapfile.$(GPROFNG_VARIANT) \
+ $(LD_NO_AS_NEEDED) -Wl,-lrt -Wl,-ldl
+
+myincludedir = @includedir@
+myinclude_HEADERS = $(srcdir)/../../include/collectorAPI.h \
+ $(srcdir)/../../include/libcollector.h \
+ $(srcdir)/../../include/libfcollector.h
+
+pkglib_LTLIBRARIES = libgp-collector.la libgp-collectorAPI.la libgp-heap.la \
+ libgp-sync.la libgp-iotrace.la
+
+libgp_collector_la_SOURCES = $(CSOURCES)
+libgp_collector_la_CPPFLAGS = $(AM_CPPFLAGS) $(jdk_inc) \
+ -I../../bfd -I$(srcdir)/../..
+# Prevent libtool from reordering -Wl,--no-as-needed after -lrt by
+# disguising -lrt as a linker flag.
+libgp_collector_la_LDFLAGS = $(AM_LDFLAGS)
+libgp_collector_la_LIBADD = $(CLOCK_GETTIME_LINK)
+
+libgp_heap_la_SOURCES = heaptrace.c
+libgp_heap_la_LDFLAGS = $(AM_LDFLAGS)
+
+libgp_sync_la_SOURCES = synctrace.c
+libgp_sync_la_LDFLAGS = $(AM_LDFLAGS)
+
+libgp_iotrace_la_SOURCES = iotrace.c
+libgp_iotrace_la_LDFLAGS = $(AM_LDFLAGS)
+
+libgp_collectorAPI_la_SOURCES = collectorAPI.c
+libgp_collectorAPI_la_LIBADD = -lc -ldl
+
+.PHONY: install-data-local
+
+install-data-local: install-pkglibLTLIBRARIES
+ for f in libgp-collector libgp-heap libgp-sync libgp-iotrace ; do \
+ rm -f $(DESTDIR)/$(pkglibdir)/$$f.la $(DESTDIR)/$(pkglibdir)/$$f.a ; \
+ done
diff --git a/gprofng/libcollector/Makefile.in b/gprofng/libcollector/Makefile.in
new file mode 100644
index 00000000000..e8b2aab0471
--- /dev/null
+++ b/gprofng/libcollector/Makefile.in
@@ -0,0 +1,1147 @@
+# Makefile.in generated by automake 1.15.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2017 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+#
+# Copyright (C) 2021 Free Software Foundation, Inc.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 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; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+subdir = .
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/../../config/depstand.m4 \
+ $(top_srcdir)/../../config/lead-dot.m4 \
+ $(top_srcdir)/../../config/override.m4 \
+ $(top_srcdir)/../../config/warnings.m4 \
+ $(top_srcdir)/../../libtool.m4 \
+ $(top_srcdir)/../../ltoptions.m4 \
+ $(top_srcdir)/../../ltsugar.m4 \
+ $(top_srcdir)/../../ltversion.m4 \
+ $(top_srcdir)/../../lt~obsolete.m4 \
+ $(top_srcdir)/../../bfd/version.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \
+ $(am__configure_deps) $(myinclude_HEADERS) $(am__DIST_COMMON)
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno config.status.lineno
+mkinstalldirs = $(SHELL) $(top_srcdir)/../../mkinstalldirs
+CONFIG_HEADER = lib-config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+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)$(pkglibdir)" "$(DESTDIR)$(myincludedir)"
+LTLIBRARIES = $(pkglib_LTLIBRARIES)
+libgp_collector_la_DEPENDENCIES =
+am__objects_1 = libgp_collector_la-gethrtime.lo \
+ libgp_collector_la-dispatcher.lo libgp_collector_la-iolib.lo \
+ libgp_collector_la-mmaptrace.lo libgp_collector_la-memmgr.lo \
+ libgp_collector_la-tsd.lo libgp_collector_la-profile.lo \
+ libgp_collector_la-envmgmt.lo libgp_collector_la-linetrace.lo \
+ libgp_collector_la-libcol_hwcdrv.lo \
+ libgp_collector_la-libcol_hwcfuncs.lo \
+ libgp_collector_la-libcol-i386-dis.lo \
+ libgp_collector_la-hwprofile.lo libgp_collector_la-jprofile.lo \
+ libgp_collector_la-unwind.lo libgp_collector_la-libcol_util.lo \
+ libgp_collector_la-collector.lo
+am_libgp_collector_la_OBJECTS = $(am__objects_1)
+libgp_collector_la_OBJECTS = $(am_libgp_collector_la_OBJECTS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+libgp_collector_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(AM_CFLAGS) $(CFLAGS) $(libgp_collector_la_LDFLAGS) \
+ $(LDFLAGS) -o $@
+libgp_collectorAPI_la_DEPENDENCIES =
+am_libgp_collectorAPI_la_OBJECTS = collectorAPI.lo
+libgp_collectorAPI_la_OBJECTS = $(am_libgp_collectorAPI_la_OBJECTS)
+libgp_heap_la_LIBADD =
+am_libgp_heap_la_OBJECTS = heaptrace.lo
+libgp_heap_la_OBJECTS = $(am_libgp_heap_la_OBJECTS)
+libgp_heap_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(libgp_heap_la_LDFLAGS) $(LDFLAGS) -o $@
+libgp_iotrace_la_LIBADD =
+am_libgp_iotrace_la_OBJECTS = iotrace.lo
+libgp_iotrace_la_OBJECTS = $(am_libgp_iotrace_la_OBJECTS)
+libgp_iotrace_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(AM_CFLAGS) $(CFLAGS) $(libgp_iotrace_la_LDFLAGS) $(LDFLAGS) \
+ -o $@
+libgp_sync_la_LIBADD =
+am_libgp_sync_la_OBJECTS = synctrace.lo
+libgp_sync_la_OBJECTS = $(am_libgp_sync_la_OBJECTS)
+libgp_sync_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(libgp_sync_la_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@
+depcomp = $(SHELL) $(top_srcdir)/../../depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(libgp_collector_la_SOURCES) \
+ $(libgp_collectorAPI_la_SOURCES) $(libgp_heap_la_SOURCES) \
+ $(libgp_iotrace_la_SOURCES) $(libgp_sync_la_SOURCES)
+DIST_SOURCES = $(libgp_collector_la_SOURCES) \
+ $(libgp_collectorAPI_la_SOURCES) $(libgp_heap_la_SOURCES) \
+ $(libgp_iotrace_la_SOURCES) $(libgp_sync_la_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+HEADERS = $(myinclude_HEADERS)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+CSCOPE = cscope
+AM_RECURSIVE_TARGETS = cscope
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/../../ar-lib \
+ $(top_srcdir)/../../compile $(top_srcdir)/../../config.guess \
+ $(top_srcdir)/../../config.sub $(top_srcdir)/../../depcomp \
+ $(top_srcdir)/../../install-sh $(top_srcdir)/../../ltmain.sh \
+ $(top_srcdir)/../../missing $(top_srcdir)/../../mkinstalldirs \
+ $(top_srcdir)/../common/config.h.in ../../COPYING \
+ ../../COPYING.LIB ../../ChangeLog ../../README ../../ar-lib \
+ ../../compile ../../config.guess ../../config.rpath \
+ ../../config.sub ../../depcomp ../../install-sh \
+ ../../ltmain.sh ../../missing ../../mkinstalldirs ../../ylwrap
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+ if test -d "$(distdir)"; then \
+ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
+ && rm -rf "$(distdir)" \
+ || { sleep 5 && rm -rf "$(distdir)"; }; \
+ else :; fi
+am__post_remove_distdir = $(am__remove_distdir)
+DIST_ARCHIVES = $(distdir).tar.gz
+GZIP_ENV = --best
+DIST_TARGETS = dist-gzip
+distuninstallcheck_listfiles = find . -type f -print
+am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
+ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
+distcleancheck_listfiles = find . -type f -print
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GPROFNG_NO_NONNULL_COMPARE_CFLAGS = @GPROFNG_NO_NONNULL_COMPARE_CFLAGS@
+GPROFNG_VARIANT = @GPROFNG_VARIANT@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AUTOMAKE_OPTIONS = foreign
+ACLOCAL_AMFLAGS = -I . -I ../..
+CSOURCES = \
+ gethrtime.c \
+ dispatcher.c \
+ iolib.c \
+ mmaptrace.c \
+ memmgr.c \
+ tsd.c \
+ profile.c \
+ envmgmt.c \
+ linetrace.c \
+ libcol_hwcdrv.c \
+ libcol_hwcfuncs.c \
+ libcol-i386-dis.c \
+ hwprofile.c \
+ jprofile.c \
+ unwind.c \
+ libcol_util.c \
+ collector.c \
+ $(NULL)
+
+AM_CFLAGS = $(GPROFNG_CFLAGS) $(GPROFNG_NO_NONNULL_COMPARE_CFLAGS)
+AM_CPPFLAGS = $(GPROFNG_CPPFLAGS) -I.. -I$(srcdir) \
+ -I$(srcdir)/../common -I$(srcdir)/../src \
+ -I$(srcdir)/../../include
+
+AM_LDFLAGS = -module -avoid-version \
+ -Wl,--version-script,$(srcdir)/mapfile.$(GPROFNG_VARIANT) \
+ $(LD_NO_AS_NEEDED) -Wl,-lrt -Wl,-ldl
+
+myincludedir = @includedir@
+myinclude_HEADERS = $(srcdir)/../../include/collectorAPI.h \
+ $(srcdir)/../../include/libcollector.h \
+ $(srcdir)/../../include/libfcollector.h
+
+pkglib_LTLIBRARIES = libgp-collector.la libgp-collectorAPI.la libgp-heap.la \
+ libgp-sync.la libgp-iotrace.la
+
+libgp_collector_la_SOURCES = $(CSOURCES)
+libgp_collector_la_CPPFLAGS = $(AM_CPPFLAGS) $(jdk_inc) \
+ -I../../bfd -I$(srcdir)/../..
+
+# Prevent libtool from reordering -Wl,--no-as-needed after -lrt by
+# disguising -lrt as a linker flag.
+libgp_collector_la_LDFLAGS = $(AM_LDFLAGS)
+libgp_collector_la_LIBADD = $(CLOCK_GETTIME_LINK)
+libgp_heap_la_SOURCES = heaptrace.c
+libgp_heap_la_LDFLAGS = $(AM_LDFLAGS)
+libgp_sync_la_SOURCES = synctrace.c
+libgp_sync_la_LDFLAGS = $(AM_LDFLAGS)
+libgp_iotrace_la_SOURCES = iotrace.c
+libgp_iotrace_la_LDFLAGS = $(AM_LDFLAGS)
+libgp_collectorAPI_la_SOURCES = collectorAPI.c
+libgp_collectorAPI_la_LIBADD = -lc -ldl
+all: lib-config.h
+ $(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+am--refresh: Makefile
+ @:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \
+ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ echo ' $(SHELL) ./config.status'; \
+ $(SHELL) ./config.status;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ $(SHELL) ./config.status --recheck
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ $(am__cd) $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+$(am__aclocal_m4_deps):
+
+lib-config.h: stamp-h1
+ @test -f $@ || rm -f stamp-h1
+ @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1
+
+stamp-h1: $(top_srcdir)/../common/config.h.in $(top_builddir)/config.status
+ @rm -f stamp-h1
+ cd $(top_builddir) && $(SHELL) ./config.status lib-config.h
+$(top_srcdir)/../common/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ ($(am__cd) $(top_srcdir) && $(AUTOHEADER))
+ rm -f stamp-h1
+ touch $@
+
+distclean-hdr:
+ -rm -f lib-config.h stamp-h1
+
+install-pkglibLTLIBRARIES: $(pkglib_LTLIBRARIES)
+ @$(NORMAL_INSTALL)
+ @list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \
+ list2=; for p in $$list; do \
+ if test -f $$p; then \
+ list2="$$list2 $$p"; \
+ else :; fi; \
+ done; \
+ test -z "$$list2" || { \
+ echo " $(MKDIR_P) '$(DESTDIR)$(pkglibdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(pkglibdir)" || exit 1; \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pkglibdir)'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pkglibdir)"; \
+ }
+
+uninstall-pkglibLTLIBRARIES:
+ @$(NORMAL_UNINSTALL)
+ @list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkglibdir)/$$f'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkglibdir)/$$f"; \
+ done
+
+clean-pkglibLTLIBRARIES:
+ -test -z "$(pkglib_LTLIBRARIES)" || rm -f $(pkglib_LTLIBRARIES)
+ @list='$(pkglib_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+
+libgp-collector.la: $(libgp_collector_la_OBJECTS) $(libgp_collector_la_DEPENDENCIES) $(EXTRA_libgp_collector_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(libgp_collector_la_LINK) -rpath $(pkglibdir) $(libgp_collector_la_OBJECTS) $(libgp_collector_la_LIBADD) $(LIBS)
+
+libgp-collectorAPI.la: $(libgp_collectorAPI_la_OBJECTS) $(libgp_collectorAPI_la_DEPENDENCIES) $(EXTRA_libgp_collectorAPI_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) -rpath $(pkglibdir) $(libgp_collectorAPI_la_OBJECTS) $(libgp_collectorAPI_la_LIBADD) $(LIBS)
+
+libgp-heap.la: $(libgp_heap_la_OBJECTS) $(libgp_heap_la_DEPENDENCIES) $(EXTRA_libgp_heap_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(libgp_heap_la_LINK) -rpath $(pkglibdir) $(libgp_heap_la_OBJECTS) $(libgp_heap_la_LIBADD) $(LIBS)
+
+libgp-iotrace.la: $(libgp_iotrace_la_OBJECTS) $(libgp_iotrace_la_DEPENDENCIES) $(EXTRA_libgp_iotrace_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(libgp_iotrace_la_LINK) -rpath $(pkglibdir) $(libgp_iotrace_la_OBJECTS) $(libgp_iotrace_la_LIBADD) $(LIBS)
+
+libgp-sync.la: $(libgp_sync_la_OBJECTS) $(libgp_sync_la_DEPENDENCIES) $(EXTRA_libgp_sync_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(libgp_sync_la_LINK) -rpath $(pkglibdir) $(libgp_sync_la_OBJECTS) $(libgp_sync_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/collectorAPI.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/heaptrace.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iotrace.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgp_collector_la-collector.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgp_collector_la-dispatcher.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgp_collector_la-envmgmt.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgp_collector_la-gethrtime.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgp_collector_la-hwprofile.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgp_collector_la-iolib.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgp_collector_la-jprofile.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgp_collector_la-libcol-i386-dis.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgp_collector_la-libcol_hwcdrv.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgp_collector_la-libcol_hwcfuncs.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgp_collector_la-libcol_util.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgp_collector_la-linetrace.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgp_collector_la-memmgr.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgp_collector_la-mmaptrace.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgp_collector_la-profile.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgp_collector_la-tsd.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgp_collector_la-unwind.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/synctrace.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+libgp_collector_la-gethrtime.lo: gethrtime.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgp_collector_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libgp_collector_la-gethrtime.lo -MD -MP -MF $(DEPDIR)/libgp_collector_la-gethrtime.Tpo -c -o libgp_collector_la-gethrtime.lo `test -f 'gethrtime.c' || echo '$(srcdir)/'`gethrtime.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgp_collector_la-gethrtime.Tpo $(DEPDIR)/libgp_collector_la-gethrtime.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gethrtime.c' object='libgp_collector_la-gethrtime.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgp_collector_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libgp_collector_la-gethrtime.lo `test -f 'gethrtime.c' || echo '$(srcdir)/'`gethrtime.c
+
+libgp_collector_la-dispatcher.lo: dispatcher.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgp_collector_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libgp_collector_la-dispatcher.lo -MD -MP -MF $(DEPDIR)/libgp_collector_la-dispatcher.Tpo -c -o libgp_collector_la-dispatcher.lo `test -f 'dispatcher.c' || echo '$(srcdir)/'`dispatcher.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgp_collector_la-dispatcher.Tpo $(DEPDIR)/libgp_collector_la-dispatcher.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dispatcher.c' object='libgp_collector_la-dispatcher.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgp_collector_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libgp_collector_la-dispatcher.lo `test -f 'dispatcher.c' || echo '$(srcdir)/'`dispatcher.c
+
+libgp_collector_la-iolib.lo: iolib.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgp_collector_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libgp_collector_la-iolib.lo -MD -MP -MF $(DEPDIR)/libgp_collector_la-iolib.Tpo -c -o libgp_collector_la-iolib.lo `test -f 'iolib.c' || echo '$(srcdir)/'`iolib.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgp_collector_la-iolib.Tpo $(DEPDIR)/libgp_collector_la-iolib.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='iolib.c' object='libgp_collector_la-iolib.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgp_collector_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libgp_collector_la-iolib.lo `test -f 'iolib.c' || echo '$(srcdir)/'`iolib.c
+
+libgp_collector_la-mmaptrace.lo: mmaptrace.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgp_collector_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libgp_collector_la-mmaptrace.lo -MD -MP -MF $(DEPDIR)/libgp_collector_la-mmaptrace.Tpo -c -o libgp_collector_la-mmaptrace.lo `test -f 'mmaptrace.c' || echo '$(srcdir)/'`mmaptrace.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgp_collector_la-mmaptrace.Tpo $(DEPDIR)/libgp_collector_la-mmaptrace.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mmaptrace.c' object='libgp_collector_la-mmaptrace.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgp_collector_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libgp_collector_la-mmaptrace.lo `test -f 'mmaptrace.c' || echo '$(srcdir)/'`mmaptrace.c
+
+libgp_collector_la-memmgr.lo: memmgr.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgp_collector_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libgp_collector_la-memmgr.lo -MD -MP -MF $(DEPDIR)/libgp_collector_la-memmgr.Tpo -c -o libgp_collector_la-memmgr.lo `test -f 'memmgr.c' || echo '$(srcdir)/'`memmgr.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgp_collector_la-memmgr.Tpo $(DEPDIR)/libgp_collector_la-memmgr.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='memmgr.c' object='libgp_collector_la-memmgr.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgp_collector_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libgp_collector_la-memmgr.lo `test -f 'memmgr.c' || echo '$(srcdir)/'`memmgr.c
+
+libgp_collector_la-tsd.lo: tsd.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgp_collector_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libgp_collector_la-tsd.lo -MD -MP -MF $(DEPDIR)/libgp_collector_la-tsd.Tpo -c -o libgp_collector_la-tsd.lo `test -f 'tsd.c' || echo '$(srcdir)/'`tsd.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgp_collector_la-tsd.Tpo $(DEPDIR)/libgp_collector_la-tsd.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tsd.c' object='libgp_collector_la-tsd.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgp_collector_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libgp_collector_la-tsd.lo `test -f 'tsd.c' || echo '$(srcdir)/'`tsd.c
+
+libgp_collector_la-profile.lo: profile.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgp_collector_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libgp_collector_la-profile.lo -MD -MP -MF $(DEPDIR)/libgp_collector_la-profile.Tpo -c -o libgp_collector_la-profile.lo `test -f 'profile.c' || echo '$(srcdir)/'`profile.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgp_collector_la-profile.Tpo $(DEPDIR)/libgp_collector_la-profile.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='profile.c' object='libgp_collector_la-profile.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgp_collector_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libgp_collector_la-profile.lo `test -f 'profile.c' || echo '$(srcdir)/'`profile.c
+
+libgp_collector_la-envmgmt.lo: envmgmt.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgp_collector_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libgp_collector_la-envmgmt.lo -MD -MP -MF $(DEPDIR)/libgp_collector_la-envmgmt.Tpo -c -o libgp_collector_la-envmgmt.lo `test -f 'envmgmt.c' || echo '$(srcdir)/'`envmgmt.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgp_collector_la-envmgmt.Tpo $(DEPDIR)/libgp_collector_la-envmgmt.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='envmgmt.c' object='libgp_collector_la-envmgmt.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgp_collector_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libgp_collector_la-envmgmt.lo `test -f 'envmgmt.c' || echo '$(srcdir)/'`envmgmt.c
+
+libgp_collector_la-linetrace.lo: linetrace.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgp_collector_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libgp_collector_la-linetrace.lo -MD -MP -MF $(DEPDIR)/libgp_collector_la-linetrace.Tpo -c -o libgp_collector_la-linetrace.lo `test -f 'linetrace.c' || echo '$(srcdir)/'`linetrace.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgp_collector_la-linetrace.Tpo $(DEPDIR)/libgp_collector_la-linetrace.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='linetrace.c' object='libgp_collector_la-linetrace.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgp_collector_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libgp_collector_la-linetrace.lo `test -f 'linetrace.c' || echo '$(srcdir)/'`linetrace.c
+
+libgp_collector_la-libcol_hwcdrv.lo: libcol_hwcdrv.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgp_collector_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libgp_collector_la-libcol_hwcdrv.lo -MD -MP -MF $(DEPDIR)/libgp_collector_la-libcol_hwcdrv.Tpo -c -o libgp_collector_la-libcol_hwcdrv.lo `test -f 'libcol_hwcdrv.c' || echo '$(srcdir)/'`libcol_hwcdrv.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgp_collector_la-libcol_hwcdrv.Tpo $(DEPDIR)/libgp_collector_la-libcol_hwcdrv.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libcol_hwcdrv.c' object='libgp_collector_la-libcol_hwcdrv.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgp_collector_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libgp_collector_la-libcol_hwcdrv.lo `test -f 'libcol_hwcdrv.c' || echo '$(srcdir)/'`libcol_hwcdrv.c
+
+libgp_collector_la-libcol_hwcfuncs.lo: libcol_hwcfuncs.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgp_collector_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libgp_collector_la-libcol_hwcfuncs.lo -MD -MP -MF $(DEPDIR)/libgp_collector_la-libcol_hwcfuncs.Tpo -c -o libgp_collector_la-libcol_hwcfuncs.lo `test -f 'libcol_hwcfuncs.c' || echo '$(srcdir)/'`libcol_hwcfuncs.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgp_collector_la-libcol_hwcfuncs.Tpo $(DEPDIR)/libgp_collector_la-libcol_hwcfuncs.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libcol_hwcfuncs.c' object='libgp_collector_la-libcol_hwcfuncs.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgp_collector_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libgp_collector_la-libcol_hwcfuncs.lo `test -f 'libcol_hwcfuncs.c' || echo '$(srcdir)/'`libcol_hwcfuncs.c
+
+libgp_collector_la-libcol-i386-dis.lo: libcol-i386-dis.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgp_collector_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libgp_collector_la-libcol-i386-dis.lo -MD -MP -MF $(DEPDIR)/libgp_collector_la-libcol-i386-dis.Tpo -c -o libgp_collector_la-libcol-i386-dis.lo `test -f 'libcol-i386-dis.c' || echo '$(srcdir)/'`libcol-i386-dis.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgp_collector_la-libcol-i386-dis.Tpo $(DEPDIR)/libgp_collector_la-libcol-i386-dis.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libcol-i386-dis.c' object='libgp_collector_la-libcol-i386-dis.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgp_collector_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libgp_collector_la-libcol-i386-dis.lo `test -f 'libcol-i386-dis.c' || echo '$(srcdir)/'`libcol-i386-dis.c
+
+libgp_collector_la-hwprofile.lo: hwprofile.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgp_collector_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libgp_collector_la-hwprofile.lo -MD -MP -MF $(DEPDIR)/libgp_collector_la-hwprofile.Tpo -c -o libgp_collector_la-hwprofile.lo `test -f 'hwprofile.c' || echo '$(srcdir)/'`hwprofile.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgp_collector_la-hwprofile.Tpo $(DEPDIR)/libgp_collector_la-hwprofile.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hwprofile.c' object='libgp_collector_la-hwprofile.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgp_collector_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libgp_collector_la-hwprofile.lo `test -f 'hwprofile.c' || echo '$(srcdir)/'`hwprofile.c
+
+libgp_collector_la-jprofile.lo: jprofile.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgp_collector_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libgp_collector_la-jprofile.lo -MD -MP -MF $(DEPDIR)/libgp_collector_la-jprofile.Tpo -c -o libgp_collector_la-jprofile.lo `test -f 'jprofile.c' || echo '$(srcdir)/'`jprofile.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgp_collector_la-jprofile.Tpo $(DEPDIR)/libgp_collector_la-jprofile.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='jprofile.c' object='libgp_collector_la-jprofile.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgp_collector_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libgp_collector_la-jprofile.lo `test -f 'jprofile.c' || echo '$(srcdir)/'`jprofile.c
+
+libgp_collector_la-unwind.lo: unwind.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgp_collector_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libgp_collector_la-unwind.lo -MD -MP -MF $(DEPDIR)/libgp_collector_la-unwind.Tpo -c -o libgp_collector_la-unwind.lo `test -f 'unwind.c' || echo '$(srcdir)/'`unwind.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgp_collector_la-unwind.Tpo $(DEPDIR)/libgp_collector_la-unwind.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unwind.c' object='libgp_collector_la-unwind.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgp_collector_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libgp_collector_la-unwind.lo `test -f 'unwind.c' || echo '$(srcdir)/'`unwind.c
+
+libgp_collector_la-libcol_util.lo: libcol_util.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgp_collector_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libgp_collector_la-libcol_util.lo -MD -MP -MF $(DEPDIR)/libgp_collector_la-libcol_util.Tpo -c -o libgp_collector_la-libcol_util.lo `test -f 'libcol_util.c' || echo '$(srcdir)/'`libcol_util.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgp_collector_la-libcol_util.Tpo $(DEPDIR)/libgp_collector_la-libcol_util.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libcol_util.c' object='libgp_collector_la-libcol_util.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgp_collector_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libgp_collector_la-libcol_util.lo `test -f 'libcol_util.c' || echo '$(srcdir)/'`libcol_util.c
+
+libgp_collector_la-collector.lo: collector.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgp_collector_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libgp_collector_la-collector.lo -MD -MP -MF $(DEPDIR)/libgp_collector_la-collector.Tpo -c -o libgp_collector_la-collector.lo `test -f 'collector.c' || echo '$(srcdir)/'`collector.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgp_collector_la-collector.Tpo $(DEPDIR)/libgp_collector_la-collector.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='collector.c' object='libgp_collector_la-collector.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgp_collector_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libgp_collector_la-collector.lo `test -f 'collector.c' || echo '$(srcdir)/'`collector.c
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool config.lt
+install-myincludeHEADERS: $(myinclude_HEADERS)
+ @$(NORMAL_INSTALL)
+ @list='$(myinclude_HEADERS)'; test -n "$(myincludedir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(myincludedir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(myincludedir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(myincludedir)'"; \
+ $(INSTALL_HEADER) $$files "$(DESTDIR)$(myincludedir)" || exit $$?; \
+ done
+
+uninstall-myincludeHEADERS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(myinclude_HEADERS)'; test -n "$(myincludedir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(myincludedir)'; $(am__uninstall_files_from_dir)
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscope: cscope.files
+ test ! -s cscope.files \
+ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS)
+clean-cscope:
+ -rm -f cscope.files
+cscope.files: clean-cscope cscopelist
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+ -rm -f cscope.out cscope.in.out cscope.po.out cscope.files
+
+distdir: $(DISTFILES)
+ $(am__remove_distdir)
+ test -d "$(distdir)" || mkdir "$(distdir)"
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ -test -n "$(am__skip_mode_fix)" \
+ || find "$(distdir)" -type d ! -perm -755 \
+ -exec chmod u+rwx,go+rx {} \; -o \
+ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
+ || chmod -R a+r "$(distdir)"
+dist-gzip: distdir
+ tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz
+ $(am__post_remove_distdir)
+
+dist-bzip2: distdir
+ tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
+ $(am__post_remove_distdir)
+
+dist-lzip: distdir
+ tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
+ $(am__post_remove_distdir)
+
+dist-xz: distdir
+ tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
+ $(am__post_remove_distdir)
+
+dist-tarZ: distdir
+ @echo WARNING: "Support for distribution archives compressed with" \
+ "legacy program 'compress' is deprecated." >&2
+ @echo WARNING: "It will be removed altogether in Automake 2.0" >&2
+ tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+ $(am__post_remove_distdir)
+
+dist-shar: distdir
+ @echo WARNING: "Support for shar distribution archives is" \
+ "deprecated." >&2
+ @echo WARNING: "It will be removed altogether in Automake 2.0" >&2
+ shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz
+ $(am__post_remove_distdir)
+
+dist-zip: distdir
+ -rm -f $(distdir).zip
+ zip -rq $(distdir).zip $(distdir)
+ $(am__post_remove_distdir)
+
+dist dist-all:
+ $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:'
+ $(am__post_remove_distdir)
+
+# This target untars the dist file and tries a VPATH configuration. Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+ case '$(DIST_ARCHIVES)' in \
+ *.tar.gz*) \
+ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\
+ *.tar.bz2*) \
+ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
+ *.tar.lz*) \
+ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\
+ *.tar.xz*) \
+ xz -dc $(distdir).tar.xz | $(am__untar) ;;\
+ *.tar.Z*) \
+ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
+ *.shar.gz*) \
+ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\
+ *.zip*) \
+ unzip $(distdir).zip ;;\
+ esac
+ chmod -R a-w $(distdir)
+ chmod u+w $(distdir)
+ mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst
+ chmod a-w $(distdir)
+ test -d $(distdir)/_build || exit 0; \
+ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+ && am__cwd=`pwd` \
+ && $(am__cd) $(distdir)/_build/sub \
+ && ../../configure \
+ $(AM_DISTCHECK_CONFIGURE_FLAGS) \
+ $(DISTCHECK_CONFIGURE_FLAGS) \
+ --srcdir=../.. --prefix="$$dc_install_base" \
+ && $(MAKE) $(AM_MAKEFLAGS) \
+ && $(MAKE) $(AM_MAKEFLAGS) dvi \
+ && $(MAKE) $(AM_MAKEFLAGS) check \
+ && $(MAKE) $(AM_MAKEFLAGS) install \
+ && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+ && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
+ distuninstallcheck \
+ && chmod -R a-w "$$dc_install_base" \
+ && ({ \
+ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
+ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
+ } || { rm -rf "$$dc_destdir"; exit 1; }) \
+ && rm -rf "$$dc_destdir" \
+ && $(MAKE) $(AM_MAKEFLAGS) dist \
+ && rm -rf $(DIST_ARCHIVES) \
+ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
+ && cd "$$am__cwd" \
+ || exit 1
+ $(am__post_remove_distdir)
+ @(echo "$(distdir) archives ready for distribution: "; \
+ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
+distuninstallcheck:
+ @test -n '$(distuninstallcheck_dir)' || { \
+ echo 'ERROR: trying to run $@ with an empty' \
+ '$$(distuninstallcheck_dir)' >&2; \
+ exit 1; \
+ }; \
+ $(am__cd) '$(distuninstallcheck_dir)' || { \
+ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \
+ exit 1; \
+ }; \
+ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \
+ || { echo "ERROR: files left after uninstall:" ; \
+ if test -n "$(DESTDIR)"; then \
+ echo " (check DESTDIR support)"; \
+ fi ; \
+ $(distuninstallcheck_listfiles) ; \
+ exit 1; } >&2
+distcleancheck: distclean
+ @if test '$(srcdir)' = . ; then \
+ echo "ERROR: distcleancheck can only run from a VPATH build" ; \
+ exit 1 ; \
+ fi
+ @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
+ || { echo "ERROR: files left in build directory after distclean:" ; \
+ $(distcleancheck_listfiles) ; \
+ exit 1; } >&2
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(HEADERS) lib-config.h
+installdirs:
+ for dir in "$(DESTDIR)$(pkglibdir)" "$(DESTDIR)$(myincludedir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ 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:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-pkglibLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-hdr distclean-libtool distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local install-myincludeHEADERS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-pkglibLTLIBRARIES
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -rm -rf $(top_srcdir)/autom4te.cache
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-myincludeHEADERS uninstall-pkglibLTLIBRARIES
+
+.MAKE: all install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--refresh check check-am clean \
+ clean-cscope clean-generic clean-libtool \
+ clean-pkglibLTLIBRARIES cscope cscopelist-am ctags ctags-am \
+ dist dist-all dist-bzip2 dist-gzip dist-lzip dist-shar \
+ dist-tarZ dist-xz dist-zip distcheck distclean \
+ distclean-compile distclean-generic distclean-hdr \
+ distclean-libtool distclean-tags distcleancheck distdir \
+ distuninstallcheck dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am \
+ install-data-local install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-myincludeHEADERS \
+ install-pdf install-pdf-am install-pkglibLTLIBRARIES \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-am uninstall uninstall-am uninstall-myincludeHEADERS \
+ uninstall-pkglibLTLIBRARIES
+
+.PRECIOUS: Makefile
+
+
+.PHONY: install-data-local
+
+install-data-local: install-pkglibLTLIBRARIES
+ for f in libgp-collector libgp-heap libgp-sync libgp-iotrace ; do \
+ rm -f $(DESTDIR)/$(pkglibdir)/$$f.la $(DESTDIR)/$(pkglibdir)/$$f.a ; \
+ done
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/gprofng/libcollector/aclocal.m4 b/gprofng/libcollector/aclocal.m4
new file mode 100644
index 00000000000..2d13dba8c20
--- /dev/null
+++ b/gprofng/libcollector/aclocal.m4
@@ -0,0 +1,1238 @@
+# generated automatically by aclocal 1.15.1 -*- Autoconf -*-
+
+# Copyright (C) 1996-2017 Free Software Foundation, Inc.
+
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])])
+m4_ifndef([AC_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],,
+[m4_warning([this file was generated for autoconf 2.69.
+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-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+# (This private macro should not be called outside this file.)
+AC_DEFUN([AM_AUTOMAKE_VERSION],
+[am__api_version='1.15'
+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.15.1], [],
+ [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
+])
+
+# _AM_AUTOCONF_VERSION(VERSION)
+# -----------------------------
+# aclocal traces this macro to find the Autoconf version.
+# This is a private macro too. Using m4_define simplifies
+# the logic in aclocal, which can simply ignore this definition.
+m4_define([_AM_AUTOCONF_VERSION], [])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
+# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+[AM_AUTOMAKE_VERSION([1.15.1])dnl
+m4_ifndef([AC_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
+
+# Copyright (C) 2011-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_AR([ACT-IF-FAIL])
+# -------------------------
+# Try to determine the archiver interface, and trigger the ar-lib wrapper
+# if it is needed. If the detection of archiver interface fails, run
+# ACT-IF-FAIL (default is to abort configure with a proper error message).
+AC_DEFUN([AM_PROG_AR],
+[AC_BEFORE([$0], [LT_INIT])dnl
+AC_BEFORE([$0], [AC_PROG_LIBTOOL])dnl
+AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([ar-lib])dnl
+AC_CHECK_TOOLS([AR], [ar lib "link -lib"], [false])
+: ${AR=ar}
+
+AC_CACHE_CHECK([the archiver ($AR) interface], [am_cv_ar_interface],
+ [AC_LANG_PUSH([C])
+ am_cv_ar_interface=ar
+ AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int some_variable = 0;]])],
+ [am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&AS_MESSAGE_LOG_FD'
+ AC_TRY_EVAL([am_ar_try])
+ if test "$ac_status" -eq 0; then
+ am_cv_ar_interface=ar
+ else
+ am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&AS_MESSAGE_LOG_FD'
+ AC_TRY_EVAL([am_ar_try])
+ if test "$ac_status" -eq 0; then
+ am_cv_ar_interface=lib
+ else
+ am_cv_ar_interface=unknown
+ fi
+ fi
+ rm -f conftest.lib libconftest.a
+ ])
+ AC_LANG_POP([C])])
+
+case $am_cv_ar_interface in
+ar)
+ ;;
+lib)
+ # Microsoft lib, so override with the ar-lib wrapper script.
+ # FIXME: It is wrong to rewrite AR.
+ # But if we don't then we get into trouble of one sort or another.
+ # A longer-term fix would be to have automake use am__AR in this case,
+ # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something
+ # similar.
+ AR="$am_aux_dir/ar-lib $AR"
+ ;;
+unknown)
+ m4_default([$1],
+ [AC_MSG_ERROR([could not determine $AR interface])])
+ ;;
+esac
+AC_SUBST([AR])dnl
+])
+
+# AM_AUX_DIR_EXPAND -*- Autoconf -*-
+
+# Copyright (C) 2001-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+# $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to
+# '$srcdir', '$srcdir/..', or '$srcdir/../..'.
+#
+# Of course, Automake must honor this variable whenever it calls a
+# tool from the auxiliary directory. The problem is that $srcdir (and
+# therefore $ac_aux_dir as well) can be either absolute or relative,
+# depending on how configure is run. This is pretty annoying, since
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+# source directory, any form will work fine, but in subdirectories a
+# relative path needs to be adjusted first.
+#
+# $ac_aux_dir/missing
+# fails when called from a subdirectory if $ac_aux_dir is relative
+# $top_srcdir/$ac_aux_dir/missing
+# fails if $ac_aux_dir is absolute,
+# fails when called from a subdirectory in a VPATH build with
+# a relative $ac_aux_dir
+#
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+# are both prefixed by $srcdir. In an in-source build this is usually
+# harmless because $srcdir is '.', but things will broke when you
+# start a VPATH build or use an absolute $srcdir.
+#
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+# iff we strip the leading $srcdir from $ac_aux_dir. That would be:
+# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+# and then we would define $MISSING as
+# MISSING="\${SHELL} $am_aux_dir/missing"
+# This will work as long as MISSING is not called from configure, because
+# unfortunately $(top_srcdir) has no meaning in configure.
+# However there are other variables, like CC, which are often used in
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
+#
+# Another solution, used here, is to always expand $ac_aux_dir to an
+# absolute PATH. The drawback is that using absolute paths prevent a
+# configured tree to be moved without reconfiguration.
+
+AC_DEFUN([AM_AUX_DIR_EXPAND],
+[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
+# Expand $ac_aux_dir to an absolute path.
+am_aux_dir=`cd "$ac_aux_dir" && pwd`
+])
+
+# AM_CONDITIONAL -*- Autoconf -*-
+
+# Copyright (C) 1997-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ([2.52])dnl
+ m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])],
+ [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])dnl
+AC_SUBST([$1_FALSE])dnl
+_AM_SUBST_NOTMAKE([$1_TRUE])dnl
+_AM_SUBST_NOTMAKE([$1_FALSE])dnl
+m4_define([_AM_COND_VALUE_$1], [$2])dnl
+if $2; then
+ $1_TRUE=
+ $1_FALSE='#'
+else
+ $1_TRUE='#'
+ $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+ AC_MSG_ERROR([[conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.]])
+fi])])
+
+# Copyright (C) 1999-2017 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.
+
+
+# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be
+# written in clear, in which case automake, when reading aclocal.m4,
+# will think it sees a *use*, and therefore will trigger all it's
+# C support machinery. Also note that it means that autoscan, seeing
+# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
+
+
+# _AM_DEPENDENCIES(NAME)
+# ----------------------
+# See how the compiler implements dependency checking.
+# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC".
+# We try a few techniques and use that to set a single cache variable.
+#
+# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
+# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
+# dependency, and given that the user is not expected to run this macro,
+# just rely on AC_PROG_CC.
+AC_DEFUN([_AM_DEPENDENCIES],
+[AC_REQUIRE([AM_SET_DEPDIR])dnl
+AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
+AC_REQUIRE([AM_MAKE_INCLUDE])dnl
+AC_REQUIRE([AM_DEP_TRACK])dnl
+
+m4_if([$1], [CC], [depcc="$CC" am_compiler_list=],
+ [$1], [CXX], [depcc="$CXX" am_compiler_list=],
+ [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+ [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'],
+ [$1], [UPC], [depcc="$UPC" am_compiler_list=],
+ [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'],
+ [depcc="$$1" am_compiler_list=])
+
+AC_CACHE_CHECK([dependency style of $depcc],
+ [am_cv_$1_dependencies_compiler_type],
+[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named 'D' -- because '-MD' means "put the output
+ # in D".
+ 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.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_$1_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
+ fi
+ am__universal=false
+ m4_case([$1], [CC],
+ [case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac],
+ [CXX],
+ [case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac])
+
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+ # Solaris 10 /bin/sh.
+ echo '/* dummy */' > sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ # We check with '-c' and '-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle '-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs.
+ am__obj=sub/conftest.${OBJEXT-o}
+ am__minus_obj="-o $am__obj"
+ case $depmode in
+ gcc)
+ # This depmode causes a compiler race in universal mode.
+ test "$am__universal" = false || continue
+ ;;
+ nosideeffect)
+ # After this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested.
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ 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.
+ am__obj=conftest.${OBJEXT-o}
+ am__minus_obj=
+ ;;
+ none) break ;;
+ esac
+ if depmode=$depmode \
+ source=sub/conftest.c object=$am__obj \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_$1_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_$1_dependencies_compiler_type=none
+fi
+])
+AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
+AM_CONDITIONAL([am__fastdep$1], [
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
+])
+
+
+# AM_SET_DEPDIR
+# -------------
+# Choose a directory name for dependency files.
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES.
+AC_DEFUN([AM_SET_DEPDIR],
+[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
+])
+
+
+# AM_DEP_TRACK
+# ------------
+AC_DEFUN([AM_DEP_TRACK],
+[AC_ARG_ENABLE([dependency-tracking], [dnl
+AS_HELP_STRING(
+ [--enable-dependency-tracking],
+ [do not reject slow dependency extractors])
+AS_HELP_STRING(
+ [--disable-dependency-tracking],
+ [speeds up one-time build])])
+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 -*-
+
+# Copyright (C) 1999-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+
+# _AM_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[{
+ # Older Autoconf quotes --file arguments for eval, but not when files
+ # are listed without --file. Let's play safe and only enable the eval
+ # if we detect the quoting.
+ case $CONFIG_FILES in
+ *\'*) eval set x "$CONFIG_FILES" ;;
+ *) set x $CONFIG_FILES ;;
+ esac
+ shift
+ for mf
+ do
+ # Strip MF so we end up with the name of the file.
+ mf=`echo "$mf" | sed -e 's/:.*$//'`
+ # Check whether this is an Automake generated Makefile or not.
+ # We used to match only the files named 'Makefile.in', but
+ # some people rename them; so instead we look at the file content.
+ # Grep'ing the first line is not enough: some people post-process
+ # each Makefile.in and add a new line on top of each file to say so.
+ # Grep'ing the whole file is not good either: AIX grep has a line
+ # limit of 2048, but all sed's we know have understand at least 4000.
+ if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+ dirpart=`AS_DIRNAME("$mf")`
+ else
+ continue
+ fi
+ # Extract the definition of DEPDIR, am__include, and am__quote
+ # from the Makefile without running 'make'.
+ DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+ test -z "$DEPDIR" && continue
+ am__include=`sed -n 's/^am__include = //p' < "$mf"`
+ test -z "$am__include" && continue
+ am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+ # Find all dependency output files, they are included files with
+ # $(DEPDIR) in their names. We invoke sed twice because it is the
+ # simplest approach to changing $(DEPDIR) to its actual value in the
+ # expansion.
+ for file in `sed -n "
+ s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do
+ # Make sure the directory exists.
+ test -f "$dirpart/$file" && continue
+ fdir=`AS_DIRNAME(["$file"])`
+ AS_MKDIR_P([$dirpart/$fdir])
+ # echo "creating $dirpart/$file"
+ echo '# dummy' > "$dirpart/$file"
+ done
+ done
+}
+])# _AM_OUTPUT_DEPENDENCY_COMMANDS
+
+
+# AM_OUTPUT_DEPENDENCY_COMMANDS
+# -----------------------------
+# This macro should only be invoked once -- use via AC_REQUIRE.
+#
+# This code is only required when automatic dependency tracking
+# is enabled. FIXME. This creates each '.P' file that we will
+# need in order to bootstrap the dependency handling code.
+AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
+[AC_CONFIG_COMMANDS([depfiles],
+ [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
+ [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
+])
+
+# Do all the work for Automake. -*- Autoconf -*-
+
+# Copyright (C) 1996-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This macro actually does too much. Some checks are only needed if
+# your package does certain things. But this isn't really a big deal.
+
+dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O.
+m4_define([AC_PROG_CC],
+m4_defn([AC_PROG_CC])
+[_AM_PROG_CC_C_O
+])
+
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out. PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition. After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_PREREQ([2.65])dnl
+dnl Autoconf wants to disallow AM_ names. We explicitly allow
+dnl the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])dnl
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+ # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+ # is not polluted with repeated "-I."
+ AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
+ # test to see if srcdir already configured
+ if test -f $srcdir/config.status; then
+ AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+ fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+ if (cygpath --version) >/dev/null 2>/dev/null; then
+ CYGPATH_W='cygpath -w'
+ else
+ CYGPATH_W=echo
+ fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[AC_DIAGNOSE([obsolete],
+ [$0: two- and three-arguments forms are deprecated.])
+m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
+m4_if(
+ m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]),
+ [ok:ok],,
+ [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package])
+ AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}])
+AM_MISSING_PROG([AUTOCONF], [autoconf])
+AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}])
+AM_MISSING_PROG([AUTOHEADER], [autoheader])
+AM_MISSING_PROG([MAKEINFO], [makeinfo])
+AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+# For better backward compatibility. To be removed once Automake 1.9.x
+# dies out for good. For more background, see:
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+AC_SUBST([mkdir_p], ['$(MKDIR_P)'])
+# We need awk for the "check" target (and possibly the TAP driver). The
+# system "awk" is bad on some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+ [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+ [_AM_PROG_TAR([v7])])])
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+ [_AM_DEPENDENCIES([CC])],
+ [m4_define([AC_PROG_CC],
+ m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+ [_AM_DEPENDENCIES([CXX])],
+ [m4_define([AC_PROG_CXX],
+ m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+ [_AM_DEPENDENCIES([OBJC])],
+ [m4_define([AC_PROG_OBJC],
+ m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJCXX],
+ [_AM_DEPENDENCIES([OBJCXX])],
+ [m4_define([AC_PROG_OBJCXX],
+ m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl
+])
+AC_REQUIRE([AM_SILENT_RULES])dnl
+dnl The testsuite driver may need to know about EXEEXT, so add the
+dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This
+dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below.
+AC_CONFIG_COMMANDS_PRE(dnl
+[m4_provide_if([_AM_COMPILER_EXEEXT],
+ [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
+
+# POSIX will say in a future version that running "rm -f" with no argument
+# is OK; and we want to be able to make that assumption in our Makefile
+# recipes. So use an aggressive probe to check that the usage we want is
+# actually supported "in the wild" to an acceptable degree.
+# See automake bug#10828.
+# To make any issue more visible, cause the running configure to be aborted
+# by default if the 'rm' program in use doesn't match our expectations; the
+# user can still override this though.
+if rm -f && rm -fr && rm -rf; then : OK; else
+ cat >&2 <<'END'
+Oops!
+
+Your 'rm' program seems unable to run without file operands specified
+on the command line, even when the '-f' option is present. This is contrary
+to the behaviour of most rm programs out there, and not conforming with
+the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>
+
+Please tell bug-automake@gnu.org about your system, including the value
+of your $PATH and any error possibly output before this message. This
+can help us improve future automake versions.
+
+END
+ if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then
+ echo 'Configuration will proceed anyway, since you have set the' >&2
+ echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2
+ echo >&2
+ else
+ cat >&2 <<'END'
+Aborting the configuration process, to ensure you take notice of the issue.
+
+You can download and install GNU coreutils to get an 'rm' implementation
+that behaves properly: <http://www.gnu.org/software/coreutils/>.
+
+If you want to complete the configuration process using your problematic
+'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
+to "yes", and re-run configure.
+
+END
+ AC_MSG_ERROR([Your 'rm' program is bad, sorry.])
+ fi
+fi
+dnl The trailing newline in this macro's definition is deliberate, for
+dnl backward compatibility and to allow trailing 'dnl'-style comments
+dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841.
+])
+
+dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not
+dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
+dnl mangled by Autoconf and run in a shell conditional statement.
+m4_define([_AC_COMPILER_EXEEXT],
+m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated. The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_arg=$1
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+ case $_am_header in
+ $_am_arg | $_am_arg:* )
+ break ;;
+ * )
+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+ esac
+done
+echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
+
+# Copyright (C) 2001-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+if test x"${install_sh+set}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+ *)
+ install_sh="\${SHELL} $am_aux_dir/install-sh"
+ esac
+fi
+AC_SUBST([install_sh])])
+
+# Add --enable-maintainer-mode option to configure. -*- Autoconf -*-
+# From Jim Meyering
+
+# Copyright (C) 1996-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_MAINTAINER_MODE([DEFAULT-MODE])
+# ----------------------------------
+# Control maintainer-specific portions of Makefiles.
+# Default is to disable them, unless 'enable' is passed literally.
+# For symmetry, 'disable' may be passed as well. Anyway, the user
+# can override the default with the --enable/--disable switch.
+AC_DEFUN([AM_MAINTAINER_MODE],
+[m4_case(m4_default([$1], [disable]),
+ [enable], [m4_define([am_maintainer_other], [disable])],
+ [disable], [m4_define([am_maintainer_other], [enable])],
+ [m4_define([am_maintainer_other], [enable])
+ m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])])
+AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
+ dnl maintainer-mode's default is 'disable' unless 'enable' is passed
+ AC_ARG_ENABLE([maintainer-mode],
+ [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode],
+ am_maintainer_other[ make rules and dependencies not useful
+ (and sometimes confusing) to the casual installer])],
+ [USE_MAINTAINER_MODE=$enableval],
+ [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes]))
+ AC_MSG_RESULT([$USE_MAINTAINER_MODE])
+ AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes])
+ MAINT=$MAINTAINER_MODE_TRUE
+ AC_SUBST([MAINT])dnl
+]
+)
+
+# Check to see how 'make' treats includes. -*- Autoconf -*-
+
+# Copyright (C) 2001-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_MAKE_INCLUDE()
+# -----------------
+# Check to see how make treats includes.
+AC_DEFUN([AM_MAKE_INCLUDE],
+[am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+ @echo this is the am__doit target
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+AC_MSG_CHECKING([for style of include used by $am_make])
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# Ignore all kinds of additional output from 'make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+ am__include=include
+ am__quote=
+ _am_result=GNU
+ ;;
+esac
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+ echo '.include "confinc"' > confmf
+ case `$am_make -s -f confmf 2> /dev/null` in #(
+ *the\ am__doit\ target*)
+ am__include=.include
+ am__quote="\""
+ _am_result=BSD
+ ;;
+ esac
+fi
+AC_SUBST([am__include])
+AC_SUBST([am__quote])
+AC_MSG_RESULT([$_am_result])
+rm -f confinc confmf
+])
+
+# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
+
+# Copyright (C) 1997-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it is modern enough.
+# If it is, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([missing])dnl
+if test x"${MISSING+set}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+ *)
+ MISSING="\${SHELL} $am_aux_dir/missing" ;;
+ esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --is-lightweight"; then
+ am_missing_run="$MISSING "
+else
+ am_missing_run=
+ AC_MSG_WARN(['missing' script is too old or missing])
+fi
+])
+
+# Helper functions for option handling. -*- Autoconf -*-
+
+# Copyright (C) 2001-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# --------------------
+# Set option NAME. Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), [1])])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+# Copyright (C) 1999-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_PROG_CC_C_O
+# ---------------
+# Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC
+# to automatically call this.
+AC_DEFUN([_AM_PROG_CC_C_O],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([compile])dnl
+AC_LANG_PUSH([C])dnl
+AC_CACHE_CHECK(
+ [whether $CC understands -c and -o together],
+ [am_cv_prog_cc_c_o],
+ [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])])
+ # Make sure it works both with $CC and with simple cc.
+ # Following AC_PROG_CC_C_O, we do the test twice because some
+ # compilers refuse to overwrite an existing .o file with -o,
+ # though they will create one.
+ am_cv_prog_cc_c_o=yes
+ for am_i in 1 2; do
+ if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \
+ && test -f conftest2.$ac_objext; then
+ : OK
+ else
+ am_cv_prog_cc_c_o=no
+ break
+ fi
+ done
+ rm -f core conftest*
+ unset am_i])
+if test "$am_cv_prog_cc_c_o" != yes; then
+ # Losing compiler, so override with the script.
+ # FIXME: It is wrong to rewrite CC.
+ # But if we don't then we get into trouble of one sort or another.
+ # A longer-term fix would be to have automake use am__CC in this case,
+ # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+ CC="$am_aux_dir/compile $CC"
+fi
+AC_LANG_POP([C])])
+
+# For backward compatibility.
+AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])])
+
+# Copyright (C) 2001-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_RUN_LOG(COMMAND)
+# -------------------
+# Run COMMAND, save the exit status in ac_status, and log it.
+# (This has been adapted from Autoconf's _AC_RUN_LOG macro.)
+AC_DEFUN([AM_RUN_LOG],
+[{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD
+ ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+ (exit $ac_status); }])
+
+# Check to make sure that the build environment is sane. -*- Autoconf -*-
+
+# Copyright (C) 1996-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name. Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+ *[[\\\"\#\$\&\'\`$am_lf]]*)
+ AC_MSG_ERROR([unsafe absolute working directory name]);;
+esac
+case $srcdir in
+ *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*)
+ AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);;
+esac
+
+# Do 'set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ am_has_slept=no
+ for am_try in 1 2; do
+ echo "timestamp, slept: $am_has_slept" > conftest.file
+ set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+ if test "$[*]" = "X"; then
+ # -L didn't work.
+ set X `ls -t "$srcdir/configure" conftest.file`
+ fi
+ if test "$[*]" != "X $srcdir/configure conftest.file" \
+ && test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
+ alias in your environment])
+ fi
+ if test "$[2]" = conftest.file || test $am_try -eq 2; then
+ break
+ fi
+ # Just in case.
+ sleep 1
+ am_has_slept=yes
+ done
+ test "$[2]" = conftest.file
+ )
+then
+ # Ok.
+ :
+else
+ AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT([yes])
+# If we didn't sleep, we still need to ensure time stamps of config.status and
+# generated files are strictly newer.
+am_sleep_pid=
+if grep 'slept: no' conftest.file >/dev/null 2>&1; then
+ ( sleep 1 ) &
+ am_sleep_pid=$!
+fi
+AC_CONFIG_COMMANDS_PRE(
+ [AC_MSG_CHECKING([that generated files are newer than configure])
+ if test -n "$am_sleep_pid"; then
+ # Hide warnings about reused PIDs.
+ wait $am_sleep_pid 2>/dev/null
+ fi
+ AC_MSG_RESULT([done])])
+rm -f conftest.file
+])
+
+# Copyright (C) 2009-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_SILENT_RULES([DEFAULT])
+# --------------------------
+# Enable less verbose build rules; with the default set to DEFAULT
+# ("yes" being less verbose, "no" or empty being verbose).
+AC_DEFUN([AM_SILENT_RULES],
+[AC_ARG_ENABLE([silent-rules], [dnl
+AS_HELP_STRING(
+ [--enable-silent-rules],
+ [less verbose build output (undo: "make V=1")])
+AS_HELP_STRING(
+ [--disable-silent-rules],
+ [verbose build output (undo: "make V=0")])dnl
+])
+case $enable_silent_rules in @%:@ (((
+ yes) AM_DEFAULT_VERBOSITY=0;;
+ no) AM_DEFAULT_VERBOSITY=1;;
+ *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);;
+esac
+dnl
+dnl A few 'make' implementations (e.g., NonStop OS and NextStep)
+dnl do not support nested variable expansions.
+dnl See automake bug#9928 and bug#10237.
+am_make=${MAKE-make}
+AC_CACHE_CHECK([whether $am_make supports nested variables],
+ [am_cv_make_support_nested_variables],
+ [if AS_ECHO([['TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+ @$(TRUE)
+.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then
+ am_cv_make_support_nested_variables=yes
+else
+ am_cv_make_support_nested_variables=no
+fi])
+if test $am_cv_make_support_nested_variables = yes; then
+ dnl Using '$V' instead of '$(V)' breaks IRIX make.
+ AM_V='$(V)'
+ AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+ AM_V=$AM_DEFAULT_VERBOSITY
+ AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
+AC_SUBST([AM_V])dnl
+AM_SUBST_NOTMAKE([AM_V])dnl
+AC_SUBST([AM_DEFAULT_V])dnl
+AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl
+AC_SUBST([AM_DEFAULT_VERBOSITY])dnl
+AM_BACKSLASH='\'
+AC_SUBST([AM_BACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
+])
+
+# Copyright (C) 2001-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_STRIP
+# ---------------------
+# One issue with vendor 'install' (even GNU) is that you can't
+# specify the program used to strip binaries. This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in "make install-strip", and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using 'strip' when the user
+# run "make install-strip". However 'strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the 'STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be 'maybe'.
+if test "$cross_compiling" != no; then
+ AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+# Copyright (C) 2006-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
+# This macro is traced by Automake.
+AC_DEFUN([_AM_SUBST_NOTMAKE])
+
+# AM_SUBST_NOTMAKE(VARIABLE)
+# --------------------------
+# Public sister of _AM_SUBST_NOTMAKE.
+AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
+
+# Check how to create a tarball. -*- Autoconf -*-
+
+# Copyright (C) 2004-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_PROG_TAR(FORMAT)
+# --------------------
+# Check how to create a tarball in format FORMAT.
+# FORMAT should be one of 'v7', 'ustar', or 'pax'.
+#
+# Substitute a variable $(am__tar) that is a command
+# writing to stdout a FORMAT-tarball containing the directory
+# $tardir.
+# tardir=directory && $(am__tar) > result.tar
+#
+# Substitute a variable $(am__untar) that extract such
+# a tarball read from stdin.
+# $(am__untar) < result.tar
+#
+AC_DEFUN([_AM_PROG_TAR],
+[# Always define AMTAR for backward compatibility. Yes, it's still used
+# in the wild :-( We should find a proper way to deprecate it ...
+AC_SUBST([AMTAR], ['$${TAR-tar}'])
+
+# We'll loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+
+m4_if([$1], [v7],
+ [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'],
+
+ [m4_case([$1],
+ [ustar],
+ [# The POSIX 1988 'ustar' format is defined with fixed-size fields.
+ # There is notably a 21 bits limit for the UID and the GID. In fact,
+ # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343
+ # and bug#13588).
+ am_max_uid=2097151 # 2^21 - 1
+ am_max_gid=$am_max_uid
+ # The $UID and $GID variables are not portable, so we need to resort
+ # to the POSIX-mandated id(1) utility. Errors in the 'id' calls
+ # below are definitely unexpected, so allow the users to see them
+ # (that is, avoid stderr redirection).
+ am_uid=`id -u || echo unknown`
+ am_gid=`id -g || echo unknown`
+ AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format])
+ if test $am_uid -le $am_max_uid; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ _am_tools=none
+ fi
+ AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format])
+ if test $am_gid -le $am_max_gid; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ _am_tools=none
+ fi],
+
+ [pax],
+ [],
+
+ [m4_fatal([Unknown tar format])])
+
+ AC_MSG_CHECKING([how to create a $1 tar archive])
+
+ # Go ahead even if we have the value already cached. We do so because we
+ # need to set the values for the 'am__tar' and 'am__untar' variables.
+ _am_tools=${am_cv_prog_tar_$1-$_am_tools}
+
+ for _am_tool in $_am_tools; do
+ case $_am_tool in
+ gnutar)
+ for _am_tar in tar gnutar gtar; do
+ AM_RUN_LOG([$_am_tar --version]) && break
+ done
+ am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+ am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+ am__untar="$_am_tar -xf -"
+ ;;
+ plaintar)
+ # Must skip GNU tar: if it does not support --format= it doesn't create
+ # ustar tarball either.
+ (tar --version) >/dev/null 2>&1 && continue
+ am__tar='tar chf - "$$tardir"'
+ am__tar_='tar chf - "$tardir"'
+ am__untar='tar xf -'
+ ;;
+ pax)
+ am__tar='pax -L -x $1 -w "$$tardir"'
+ am__tar_='pax -L -x $1 -w "$tardir"'
+ am__untar='pax -r'
+ ;;
+ cpio)
+ am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+ am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+ am__untar='cpio -i -H $1 -d'
+ ;;
+ none)
+ am__tar=false
+ am__tar_=false
+ am__untar=false
+ ;;
+ esac
+
+ # If the value was cached, stop now. We just wanted to have am__tar
+ # and am__untar set.
+ test -n "${am_cv_prog_tar_$1}" && break
+
+ # tar/untar a dummy directory, and stop if the command works.
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ echo GrepMe > conftest.dir/file
+ AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+ rm -rf conftest.dir
+ if test -s conftest.tar; then
+ AM_RUN_LOG([$am__untar <conftest.tar])
+ AM_RUN_LOG([cat conftest.dir/file])
+ grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+ fi
+ done
+ rm -rf conftest.dir
+
+ AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+ AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+
+AC_SUBST([am__tar])
+AC_SUBST([am__untar])
+]) # _AM_PROG_TAR
+
+m4_include([../../config/depstand.m4])
+m4_include([../../config/lead-dot.m4])
+m4_include([../../config/override.m4])
+m4_include([../../config/warnings.m4])
+m4_include([../../libtool.m4])
+m4_include([../../ltoptions.m4])
+m4_include([../../ltsugar.m4])
+m4_include([../../ltversion.m4])
+m4_include([../../lt~obsolete.m4])
diff --git a/gprofng/libcollector/collector.c b/gprofng/libcollector/collector.c
new file mode 100644
index 00000000000..93c9d3330de
--- /dev/null
+++ b/gprofng/libcollector/collector.c
@@ -0,0 +1,2494 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <alloca.h>
+#include <errno.h>
+#include <signal.h>
+#include <ucontext.h>
+#include <stdlib.h> /* exit() */
+#include <sys/param.h>
+#include <sys/utsname.h> /* struct utsname */
+#include <sys/resource.h>
+#include <sys/syscall.h> /* system call fork() */
+
+#include "gp-defs.h"
+#include "collector.h"
+#include "descendants.h"
+#include "gp-experiment.h"
+#include "memmgr.h"
+#include "cc_libcollector.h"
+#include "tsd.h"
+
+/* TprintfT(<level>,...) definitions. Adjust per module as needed */
+#define DBG_LT0 0 // for high-level configuration, unexpected errors/warnings
+#define DBG_LT1 1 // for configuration details, warnings
+#define DBG_LT2 2
+#define DBG_LT3 3
+
+typedef unsigned long ulong_t;
+
+extern char **environ;
+extern void __collector_close_experiment ();
+extern int __collector_set_size_limit (char *par);
+
+/* ------- internal function prototypes ---------- */
+CollectorModule __collector_register_module (ModuleInterface *modint);
+static void write_sample (char *name);
+static const char *__collector_get_params ();
+static const char *__collector_get_expdir ();
+static FrameInfo __collector_getUserCtx (CollectorModule modl, HiResTime ts, int mode, void *arg);
+static FrameInfo __collector_getUID1 (CM_Array *arg);
+static int __collector_writeMetaData (CollectorModule modl, char *format, ...);
+static int __collector_writeDataRecord (CollectorModule modl, struct Common_packet *pckt);
+static int __collector_writeDataPacket (CollectorModule modl, struct CM_Packet *pckt);
+static void *allocCSize (struct Heap*, unsigned, int);
+static void freeCSize (struct Heap*, void*, unsigned);
+static void *allocVSize (struct Heap*, unsigned);
+static void *reallocVSize (struct Heap*, void*, unsigned);
+
+static int collector_create_expr_dir (const char *new_exp_name);
+static int collector_create_expr_dir_lineage (const char *parent_exp_name);
+static int collector_exp_dir_append_x (int linenum, const char *parent_exp_name);
+static int collector_tail_init (const char *parent_exp_name);
+static int log_open ();
+static void log_header_write (sp_origin_t origin);
+static void log_pause ();
+static void log_resume ();
+static void fs_warn ();
+static void log_close ();
+static void get_progspec (char *cmdline, int tmp_sz, char *progname, int sz);
+static void sample_handler (int, siginfo_t*, void*);
+static int sample_set_interval (char *);
+static int set_duration (char *);
+static int sample_set_user_sig (char *);
+static void pause_handler (int, siginfo_t*, void*);
+static int pause_set_user_sig (char *);
+static int set_user_sig_action (char*);
+static void ovw_open ();
+static hrtime_t ovw_write ();
+
+/* ------- global data controlling the collector's behavior -------- */
+
+static CollectorInterface collector_interface ={
+ __collector_register_module, /* registerModule */
+ __collector_get_params, /* getParams */
+ __collector_get_expdir, /* getExpDir */
+ __collector_log_write, /* writeLog */
+ __collector_getUserCtx, /* getFrameInfo */
+ __collector_getUID1, /* getUID */
+ __collector_getUID, /* getUID2 */
+ __collector_getStackTrace, /* getStackTrace */
+ __collector_writeMetaData, /* writeMetaData */
+ __collector_writeDataRecord, /* writeDataRecord */
+ __collector_writeDataPacket, /* writeDataPacket */
+ write_sample, /* write_sample */
+ get_progspec, /* get_progspec */
+ __collector_open_experiment, /* open_experiment */
+ NULL, /* getHiResTime */
+ __collector_newHeap, /* newHeap */
+ __collector_deleteHeap, /* deleteHeap */
+ allocCSize, /* allocCSize */
+ freeCSize, /* freeCSize */
+ allocVSize, /* allocVSize */
+ reallocVSize, /* reallocVSize */
+ __collector_tsd_create_key, /* createKey */
+ __collector_tsd_get_by_key, /* getKey */
+ __collector_dlog /* writeDebugInfo */
+};
+
+#define MAX_MODULES 32
+static ModuleInterface *modules[MAX_MODULES];
+static int modules_st[MAX_MODULES];
+static void *modules_hndl[MAX_MODULES];
+static volatile int nmodules = 0;
+
+/* flag set non-zero, if data collected implies a filesystem warning is appropriate */
+static int fs_matters = 0;
+static const char *collector_params = NULL;
+static const char *project_home = NULL;
+Heap *__collector_heap = NULL;
+int __collector_no_threads;
+int __collector_libthread_T1 = -1;
+
+static volatile int collector_paused = 0;
+
+int __collector_tracelevel = -1;
+static int collector_debug_opt = 0;
+
+hrtime_t __collector_next_sample = 0;
+int __collector_sample_period = 0; /* if non-zero, periodic sampling is enabled */
+
+hrtime_t __collector_delay_start = 0; /* if non-zero, delay before starting data */
+hrtime_t __collector_terminate_time = 0; /* if non-zero, fixed duration run */
+
+static collector_mutex_t __collector_glob_lock = COLLECTOR_MUTEX_INITIALIZER;
+static collector_mutex_t __collector_open_guard = COLLECTOR_MUTEX_INITIALIZER;
+static collector_mutex_t __collector_close_guard = COLLECTOR_MUTEX_INITIALIZER;
+static collector_mutex_t __collector_sample_guard = COLLECTOR_MUTEX_INITIALIZER;
+static collector_mutex_t __collector_suspend_guard = COLLECTOR_MUTEX_INITIALIZER;
+static collector_mutex_t __collector_resume_guard = COLLECTOR_MUTEX_INITIALIZER;
+char __collector_exp_dir_name[MAXPATHLEN + 1] = ""; /* experiment directory */
+int __collector_size_limit = 0;
+
+static char *archive_mode = NULL;
+
+volatile sp_state_t __collector_expstate = EXP_INIT;
+static int exp_origin = SP_ORIGIN_LIBCOL_INIT;
+static int exp_open = 0;
+int __collector_exp_active = 0;
+static int paused_when_suspended = 0;
+static int exp_initted = 0;
+static char exp_progspec[_POSIX_ARG_MAX + 1]; /* program cmdline. includes args */
+static char exp_progname[_POSIX_ARG_MAX + 1]; /* program name == argv[0] */
+
+hrtime_t __collector_start_time = 0;
+static time_t start_sec_time = 0;
+
+/* Sample related data */
+static int sample_installed = 0; /* 1 if the sample signal handler installed */
+static int sample_mode = 0; /* dynamically turns sample record writing on/off */
+static int sample_number = 0; /* index of the current sample record */
+static struct sigaction old_sample_handler;
+int __collector_sample_sig = -1; /* user-specified sample signal */
+int __collector_sample_sig_warn = 0; /* non-zero if warning already given */
+
+/* Pause/resume related data */
+static struct sigaction old_pause_handler;
+int __collector_pause_sig = -1; /* user-specified pause signal */
+int __collector_pause_sig_warn = 0; /* non-zero if warning already given */
+
+static struct sigaction old_close_handler;
+static struct sigaction old_exit_handler;
+
+/* Experiment files */
+static char ovw_name[MAXPATHLEN]; /* Overview data file name */
+
+/* macro to convert a timestruc to hrtime_t */
+#define ts2hrt(x) ((hrtime_t)(x).tv_sec*NANOSEC + (hrtime_t)(x).tv_nsec)
+
+static void
+init_tracelevel ()
+{
+#if DEBUG
+ char *s = CALL_UTIL (getenv)("SP_COLLECTOR_TRACELEVEL");
+ if (s != NULL)
+ __collector_tracelevel = CALL_UTIL (atoi)(s);
+ TprintfT (DBG_LT0, "collector: SP_COLLECTOR_TRACELEVEL=%d\n", __collector_tracelevel);
+ s = CALL_UTIL (getenv)("SP_COLLECTOR_DEBUG");
+ if (s != NULL)
+ collector_debug_opt = CALL_UTIL (atoi)(s) & ~(SP_DUMP_TIME | SP_DUMP_FLAG);
+#endif
+}
+
+static CollectorInterface *
+get_collector_interface ()
+{
+ if (collector_interface.getHiResTime == NULL)
+ collector_interface.getHiResTime = __collector_gethrtime;
+ return &collector_interface;
+}
+
+/*
+ * __collector_module_init is an alternate method to initialize
+ * dynamic collector modules (er_heap, er_sync, er_iotrace, er_mpi, tha).
+ * Every module that needs to register itself with libcollector
+ * before the experiment is open implements its own global
+ * __collector_module_init and makes sure the next one is called.
+ */
+static void
+collector_module_init (CollectorInterface *col_intf)
+{
+ int nmodules = 0;
+
+ ModuleInitFunc next_init = (ModuleInitFunc) dlsym (RTLD_DEFAULT, "__collector_module_init");
+ if (next_init != NULL)
+ {
+ nmodules++;
+ next_init (col_intf);
+ }
+ TprintfT (DBG_LT1, "collector_module_init: %d modules\n", nmodules);
+}
+
+/* Routines concerned with general experiment start and stop */
+
+/* initialization -- init section routine -- called when libcollector loaded */
+static void collector_init () __attribute__ ((constructor));
+
+static void
+collector_init ()
+{
+ if (__collector_util_init () != 0)
+ /* we can't do anything without various utility functions */
+ abort ();
+ init_tracelevel ();
+
+ /*
+ * Unconditionally install the SIGPROF handler
+ * to process signals originated in dtracelets.
+ */
+ __collector_sigprof_install ();
+
+ /* Initialize all preloaded modules */
+ collector_module_init (get_collector_interface ());
+
+ /* determine experiment name */
+ char *exp = CALL_UTIL (getenv)("SP_COLLECTOR_EXPNAME");
+ if ((exp == NULL) || (CALL_UTIL (strlen)(exp) == 0))
+ {
+ TprintfT (DBG_LT0, "collector_init: SP_COLLECTOR_EXPNAME undefined - no experiment to start\n");
+ /* not set -- no experiment to run */
+ return;
+ }
+ else
+ TprintfT (DBG_LT1, "collector_init: found SP_COLLECTOR_EXPNAME = %s\n", exp);
+
+ /* determine the data descriptor for the experiment */
+ char *params = CALL_UTIL (getenv)("SP_COLLECTOR_PARAMS");
+ if (params == NULL)
+ {
+ TprintfT (0, "collector_init: SP_COLLECTOR_PARAMS undefined - no experiment to start\n");
+ return;
+ }
+
+ /* now do the real open of the experiment */
+ if (__collector_open_experiment (exp, params, SP_ORIGIN_LIBCOL_INIT))
+ {
+ TprintfT (0, "collector_init: __collector_open_experiment failed\n");
+ /* experiment open failed, close it */
+ __collector_close_experiment ();
+ return;
+ }
+ return;
+}
+
+CollectorModule
+__collector_register_module (ModuleInterface *modint)
+{
+ TprintfT (DBG_LT1, "collector: module %s calls for registration.\n",
+ modint->description == NULL ? "(null)" : modint->description);
+ if (modint == NULL)
+ return COLLECTOR_MODULE_ERR;
+ if (nmodules >= MAX_MODULES)
+ return COLLECTOR_MODULE_ERR;
+ if (modint->initInterface &&
+ modint->initInterface (get_collector_interface ()))
+ return COLLECTOR_MODULE_ERR;
+ int idx = nmodules++;
+ modules[idx] = modint;
+ modules_st[idx] = 0;
+
+ if (exp_open && modint->openExperiment)
+ {
+ modules_st[idx] = modint->openExperiment (__collector_exp_dir_name);
+ if (modules_st[idx] == COL_ERROR_NONE && modules[idx]->description != NULL)
+ {
+ modules_hndl[idx] = __collector_create_handle (modules[idx]->description);
+ if (modules_hndl[idx] == NULL)
+ modules_st[idx] = -1;
+ }
+ }
+ if (__collector_exp_active && collector_paused == 0 &&
+ modint->startDataCollection && modules_st[idx] == 0)
+ modint->startDataCollection ();
+ TprintfT (DBG_LT1, "collector: module %s (%d) registered.\n",
+ modint->description == NULL ? "(null)" : modint->description, idx);
+ return (CollectorModule) idx;
+}
+
+static const char *
+__collector_get_params ()
+{
+ return collector_params;
+}
+
+static const char *
+__collector_get_expdir ()
+{
+ return __collector_exp_dir_name;
+}
+
+static FrameInfo
+__collector_getUserCtx (CollectorModule modl, HiResTime ts, int mode, void *arg)
+{
+ return __collector_get_frame_info (ts, mode, arg);
+}
+
+static FrameInfo
+__collector_getUID1 (CM_Array *arg)
+{
+ return __collector_getUID (arg, (FrameInfo) 0);
+}
+
+static int
+__collector_writeMetaData (CollectorModule modl, char *format, ...)
+{
+ if (modl < 0 || modl >= nmodules || modules[modl]->description == NULL)
+ {
+ TprintfT (DBG_LT0, "__collector_writeMetaData(): bad module: %d\n", modl);
+ return 1;
+ }
+ char fname[MAXPATHLEN + 1];
+ CALL_UTIL (strlcpy)(fname, __collector_exp_dir_name, sizeof (fname));
+ CALL_UTIL (strlcat)(fname, "/metadata.", sizeof (fname));
+ CALL_UTIL (strlcat)(fname, modules[modl]->description, sizeof (fname));
+ CALL_UTIL (strlcat)(fname, ".xml", sizeof (fname));
+ int fd = CALL_UTIL (open)(fname, O_CREAT | O_WRONLY | O_APPEND,
+ S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
+ if (fd < 0)
+ {
+ TprintfT (DBG_LT0, "__collector_writeMetaData(): can't open file: %s\n", fname);
+ return 1;
+ }
+ char buf[1024];
+ char *bufptr = buf;
+ va_list va;
+ va_start (va, format);
+ int sz = __collector_xml_vsnprintf (bufptr, sizeof (buf), format, va);
+ va_end (va);
+
+ if (sz >= sizeof (buf))
+ {
+ /* Allocate a new buffer */
+ sz += 1; /* add the terminating null byte */
+ bufptr = (char*) alloca (sz);
+
+ va_start (va, format);
+ sz = __collector_xml_vsnprintf (bufptr, sz, format, va);
+ va_end (va);
+ }
+ CALL_UTIL (write)(fd, bufptr, sz);
+ CALL_UTIL (close)(fd);
+ return COL_ERROR_NONE;
+}
+
+/* check that the header fields are filled-in, and then call __collector_writeDataPacket */
+static int
+__collector_writeDataRecord (CollectorModule modl, struct Common_packet *pckt)
+{
+ return __collector_write_record (modules_hndl[modl], pckt);
+}
+
+static int
+__collector_writeDataPacket (CollectorModule modl, struct CM_Packet *pckt)
+{
+ return __collector_write_packet (modules_hndl[modl], pckt);
+}
+
+static void *
+allocCSize (struct Heap *heap, unsigned sz, int log)
+{
+ return __collector_allocCSize (heap ? heap : __collector_heap, sz, log);
+}
+
+static void
+freeCSize (struct Heap *heap, void *ptr, unsigned sz)
+{
+ __collector_freeCSize (heap ? heap : __collector_heap, ptr, sz);
+}
+
+static void *
+allocVSize (struct Heap *heap, unsigned sz)
+{
+ return __collector_allocVSize (heap ? heap : __collector_heap, sz);
+}
+
+static void *
+reallocVSize (struct Heap *heap, void *ptr, unsigned sz)
+{
+ return __collector_reallocVSize (heap ? heap : __collector_heap, ptr, sz);
+}
+
+static time_t
+get_gm_time (struct tm *tp)
+{
+ /*
+ Note that glibc contains a function of the same purpose named `timegm'.
+ But obviously, it is not universally available.
+
+ Some implementations of mktime return -1 for the nonexistent localtime hour
+ at the beginning of DST. In this event, use 'mktime(tm - 1hr) + 3600'.
+ nonexistent
+ tm_isdst is set to 0 to force mktime to introduce a consistent offset
+ (the non DST offset) since tm and tm+o might be on opposite sides of a DST change.
+
+ Schematically:
+ mktime(tm) --> t+o
+ gmtime_r(t+o) --> tm+o
+ mktime(tm+o) --> t+2o
+ t = t+o - (t+2o - t+o)
+ */
+ struct tm stm;
+ time_t tl = CALL_UTIL (mktime)(tp);
+ if (tl == -1)
+ {
+ stm = *tp;
+ stm.tm_hour--;
+ tl = CALL_UTIL (mktime)(&stm);
+ if (tl == -1)
+ return -1;
+ tl += 3600;
+ }
+
+ (void) (CALL_UTIL (gmtime_r)(&tl, &stm));
+ stm.tm_isdst = 0;
+ time_t tb = CALL_UTIL (mktime)(&stm);
+ if (tb == -1)
+ {
+ stm.tm_hour--;
+ tb = CALL_UTIL (mktime)(&stm);
+ if (tb == -1)
+ return -1;
+ tb += 3600;
+ }
+ return (tl - (tb - tl));
+}
+
+static void
+log_write_event_run ()
+{
+ /* get the gm and local time */
+ struct tm start_stm;
+ CALL_UTIL (gmtime_r)(&start_sec_time, &start_stm);
+ time_t start_gm_time = get_gm_time (&start_stm);
+ time_t lcl_time = CALL_UTIL (mktime)(&start_stm);
+ __collector_log_write ("<event kind=\"%s\" tstamp=\"%u.%09u\" time=\"%lld\" tm_zone=\"%lld\"/>\n",
+ SP_JCMD_RUN,
+ (unsigned) (__collector_start_time / NANOSEC),
+ (unsigned) (__collector_start_time % NANOSEC),
+ (long long) start_gm_time,
+ (long long) (lcl_time - start_gm_time));
+}
+
+static void *
+m_dlopen (const char *filename, int flag)
+{
+ void *p = dlopen (filename, flag);
+ TprintfT (DBG_LT1, "collector.c: dlopen(%s, %d) returns %p\n", filename, flag, p);
+ return p;
+}
+/* real routine to open an experiment
+ * called by collector_init from libcollector init section
+ * called by __collector_start_experiment when a child is forked */
+int
+__collector_open_experiment (const char *exp, const char *params, sp_origin_t origin)
+{
+ char *s;
+ char *buf = NULL;
+ char *duration_string = NULL;
+ int err;
+ int is_founder = 1;
+ int record_this_experiment = 1;
+ int seen_F_flag = 0;
+ static char buffer[32];
+ if (exp_open)
+ {
+ /* experiment already opened */
+ TprintfT (0, "collector: ERROR: Attempt to open opened experiment\n");
+ return COL_ERROR_EXPOPEN;
+ }
+ __collector_start_time = collector_interface.getHiResTime ();
+ TprintfT (DBG_LT1, "\n\t\t__collector_open_experiment(SP_COLLECTOR_EXPNAME=%s, params=%s, origin=%d); setting start_time\n",
+ exp, params, origin);
+ if (environ)
+ __collector_env_printall ("__collector_open_experiment", environ);
+ else
+ TprintfT (DBG_LT1, "collector_open_experiment found environ == NULL)\n");
+
+ /*
+ * Recheck sigprof handler
+ * XXXX Bug 18177509 - additional sigprof signal kills target program
+ */
+ __collector_sigprof_install ();
+ exp_origin = origin;
+ collector_params = params;
+
+ /* Determine which of the three possible threading models:
+ * singlethreaded
+ * multi-LWP (no threads)
+ * multithreaded
+ * is the one the target is actually using.
+ *
+ * we really only need to distinguish between first two
+ * and the third. The thr_main() trick does exactly that.
+ * is the one the target is actually using.
+ *
+ * __collector_no_threads applies to all signal handlers,
+ * and must be set before signal handlers are installed.
+ */
+ __collector_no_threads = 0;
+ __collector_exp_dir_name[0] = 0;
+ sample_mode = 0;
+ sample_number = 0;
+
+ /* create global heap */
+ if (__collector_heap == NULL)
+ {
+ __collector_heap = __collector_newHeap ();
+ if (__collector_heap == NULL)
+ {
+ CALL_UTIL (fprintf)(stderr, "__collector_open_experiment COLERROR_NOZMEM 1\n");
+ return COL_ERROR_NOZMEM;
+ }
+ }
+ //check whether is origin is collect
+ char * envar = CALL_UTIL (getenv)("SP_COLLECTOR_ORIGIN_COLLECT");
+ TprintfT (DBG_LT1, "__collector_open_experiment SP_COLLECTOR_ORIGIN_COLLECT = '%s'\n",
+ (envar == NULL) ? "NULL" : envar);
+ if (envar)
+ exp_origin = SP_ORIGIN_COLLECT;
+
+ //check if this is the founder process
+ is_founder = getpid ();
+ if (origin != SP_ORIGIN_DBX_ATTACH)
+ {
+ envar = CALL_UTIL (getenv)("SP_COLLECTOR_FOUNDER");
+ if (envar)
+ is_founder = CALL_UTIL (atoi)(envar);
+ if (is_founder != 0)
+ {
+ if (is_founder != getpid ())
+ {
+ TprintfT (0, "__collector_open_experiment SP_COLLECTOR_FOUNDER=%d != pid(%d)\n",
+ is_founder, getpid ());
+ //CALL_UTIL(fprintf)(stderr, "__collector_open_experiment SP_COLLECTOR_FOUNDER=%d != pid(%d); not recording experiment\n",
+ //is_founder, getpid() );
+ //return COL_ERROR_UNEXP_FOUNDER;
+ is_founder = 0; // Special case (CR 22917352)
+ }
+ /* clear FOUNDER for descendant experiments */
+ TprintfT (0, "__collector_open_experiment setting SP_COLLECTOR_FOUNDER=0\n");
+ CALL_UTIL (strlcpy)(buffer, "SP_COLLECTOR_FOUNDER=0", sizeof (buffer));
+ CALL_UTIL (putenv)(buffer);
+ }
+ }
+
+ /* Set up fork/exec interposition (requires __collector_heap). */
+ /* Determine if "collect -F" specification enables this subexperiment */
+ get_progspec (exp_progspec, sizeof (exp_progspec), exp_progname, sizeof (exp_progname));
+
+ /* convert the returned exp_progname to a basename */
+ const char * base_name = __collector_strrchr (exp_progname, '/');
+ if (base_name == NULL)
+ base_name = exp_progname;
+ else
+ base_name = base_name + 1;
+ err = __collector_ext_line_init (&record_this_experiment, exp_progspec, base_name);
+ if (err != COL_ERROR_NONE)
+ {
+ CALL_UTIL (fprintf)(stderr, "__collector_open_experiment COLERROR: %d\n", err);
+ return err;
+ }
+
+ /* Due to the fix of bug 15691122, we need to initialize unwind to make
+ * the function __collector_ext_return_address() work for dlopen interposition.
+ * */
+ if (!record_this_experiment && !is_founder)
+ {
+ TprintfT (DBG_LT0, "__collector_open_experiment: NOT creating experiment. (is_founder=%d, record=%d)\n",
+ is_founder, record_this_experiment);
+ return collector_tail_init (exp);
+ }
+ TprintfT (DBG_LT0, "__collector_open_experiment: is_founder=%d, record=%d\n",
+ is_founder, record_this_experiment);
+ if (is_founder || origin == SP_ORIGIN_FORK)
+ {
+ CALL_UTIL (strlcpy)(__collector_exp_dir_name, exp, sizeof (__collector_exp_dir_name));
+ if (origin == SP_ORIGIN_FORK)
+ { /*create exp dir for fork-child*/
+ if (collector_create_expr_dir (__collector_exp_dir_name))
+ {
+ CALL_UTIL (fprintf)(stderr, "__collector_open_experiment: COL_ERROR_BADDIR 1: `%s'\n", exp);
+ return COL_ERROR_BADDIR;
+ }
+ }
+ }
+ else
+ {/* founder/fork-child will already have created experiment dir, but exec/combo descendants must do so now */
+ if (collector_create_expr_dir_lineage (exp))
+ {
+ CALL_UTIL (fprintf)(stderr, "__collector_open_experiment: COL_ERROR_BADDIR 2: `%s'\n", exp);
+ return COL_ERROR_BADDIR;
+ }
+ static char exp_name_env[MAXPATHLEN + 1];
+ TprintfT (DBG_LT1, "collector_open_experiment: setting SP_COLLECTOR_EXPNAME to %s\n", __collector_exp_dir_name);
+ CALL_UTIL (snprintf)(exp_name_env, sizeof (exp_name_env), "SP_COLLECTOR_EXPNAME=%s", __collector_exp_dir_name);
+ CALL_UTIL (putenv)(exp_name_env);
+ }
+ /* Check that the name is that of a directory (new structure) */
+ DIR *expDir = CALL_UTIL (opendir)(__collector_exp_dir_name);
+ if (expDir == NULL)
+ {
+ /* can't open it */
+ CALL_UTIL (fprintf)(stderr, "__collector_open_experiment: COL_ERROR_BADDIR 3: `%s'\n", exp);
+ return COL_ERROR_BADDIR;
+ }
+ CALL_UTIL (closedir)(expDir);
+
+ if (CALL_UTIL (access)(__collector_exp_dir_name, W_OK))
+ {
+ TprintfT (0, "collector: ERROR: access error: errno=%d\n", errno);
+ if ((errno == EACCES) || (errno == EROFS))
+ {
+ CALL_UTIL (fprintf)(stderr, "__collector_open_experiment: COL_ERROR_DIRPERM: `%s'\n", exp);
+ TprintfT (DBG_LT0, "collector: ERROR: experiment directory `%s' is not writeable\n",
+ __collector_exp_dir_name);
+ return COL_ERROR_DIRPERM;
+ }
+ else
+ {
+ CALL_UTIL (fprintf)(stderr, "__collector_open_experiment: COL_ERROR_BADDIR 4: `%s'\n", exp);
+ return COL_ERROR_BADDIR;
+ }
+ }
+
+ /* reset the paused flag */
+ collector_paused = (origin == SP_ORIGIN_FORK ? paused_when_suspended : 0);
+
+ /* mark the experiment as opened */
+ __collector_expstate = EXP_OPEN;
+ TprintfT (DBG_LT1, "collector: __collector_expstate->EXP_OPEN\n");
+
+ /* open the log file */
+ err = log_open ();
+ if (err != COL_ERROR_NONE)
+ {
+ CALL_UTIL (fprintf)(stderr, "__collector_open_experiment: COL_ERROR_LOG_OPEN\n");
+ return COL_ERROR_LOG_OPEN;
+ }
+ if (origin != SP_ORIGIN_GENEXP && origin != SP_ORIGIN_KERNEL)
+ log_header_write (origin);
+
+ /* Make a copy of params so that we can modify the string */
+ int paramsz = CALL_UTIL (strlen)(params) + 1;
+ buf = (char*) alloca (paramsz);
+ if (buf == NULL)
+ {
+ CALL_UTIL (fprintf)(stderr, "__collector_open_experiment: COL_ERROR_ARGS2BIG: %s\n", params);
+ TprintfT (DBG_LT0, "collector: ERROR: experiment parameter `%s' is too long\n", params);
+ (void) __collector_log_write ("<event kind=\"%s\" id=\"%d\"/></event>\n",
+ SP_JCMD_CERROR, COL_ERROR_ARGS2BIG);
+ return COL_ERROR_ARGS2BIG;
+ }
+ CALL_UTIL (strlcpy)(buf, params, paramsz);
+
+ /* create directory for archives (if founder) */
+ char archives[MAXPATHLEN];
+ CALL_UTIL (snprintf)(archives, MAXPATHLEN, "%s/%s", __collector_exp_dir_name,
+ SP_ARCHIVES_DIR);
+ if (is_founder)
+ {
+ mode_t dmode = S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH;
+ if ((CALL_UTIL (mkdir)(archives, dmode) != 0) && (errno != EEXIST))
+ {
+ CALL_UTIL (fprintf)(stderr, "__collector_open_experiment: COL_ERROR_MKDIR: %s: errno = %d\n", archives, errno);
+ TprintfT (0, "collector: ERROR: mkdir(%s) failed: errno = %d\n", archives, errno);
+ (void) __collector_log_write ("<event kind=\"%s\" id=\"%d\">mkdir(%s): errno=%d</event>\n",
+ SP_JCMD_COMMENT, COL_COMMENT_NONE, archives, errno);
+ /* this is not a fatal error currently */
+ }
+ else
+ TprintfT (DBG_LT1, "collector: archive mkdir(%s) succeeded\n", archives);
+ }
+
+ /* initialize the segments map and mmap interposition */
+ if (origin != SP_ORIGIN_GENEXP && origin != SP_ORIGIN_KERNEL)
+ {
+ if ((err = __collector_ext_mmap_install (1)) != COL_ERROR_NONE)
+ {
+ __collector_log_write ("<event kind=\"%s\" id=\"%d\"/></event>\n", SP_JCMD_CERROR, err);
+ return err;
+ }
+ }
+
+ /* open the overview file for sample data */
+ if (origin != SP_ORIGIN_GENEXP)
+ ovw_open ();
+
+ /* initialize TSD module (note: relies on __collector_heap) */
+ if (__collector_tsd_init () != 0)
+ {
+ CALL_UTIL (fprintf)(stderr, "__collector_open_experiment: COL_ERROR_TSD_INIT\n");
+ __collector_log_write ("<event kind=\"%s\" id=\"%d\">TSD could not be initialized</event>\n", SP_JCMD_CERROR, COL_ERROR_TSD_INIT);
+ return COL_ERROR_TSD_INIT;
+ }
+
+ /* experiment is initialized; allow pause/resume/close */
+ exp_initted = 1;
+
+ // 24935305 should not use SIGPROF if collect -p -t and -S are all off
+ /* (check here if -t or -S is on; -p is checked later) */
+ if (((params[0] == 't' || params[0] == 'S') && params[1] == ':')
+ || CALL_UTIL (strstr)(params, ";t:")
+ || CALL_UTIL (strstr)(params, ";S:"))
+ {
+ /* set a default time to 100 ms.; use negative value to force setting */
+ TprintfT (DBG_LT1, "collector: open_experiment setting timer to 100000\n");
+ __collector_ext_itimer_set (-100000);
+ }
+
+ /* call open for all dynamic modules */
+ int i;
+ for (i = 0; i < nmodules; i++)
+ {
+ if (modules[i]->openExperiment != NULL)
+ {
+ modules_st[i] = modules[i]->openExperiment (__collector_exp_dir_name);
+ if (modules_st[i] == COL_ERROR_NONE && modules[i]->description != NULL)
+ {
+ modules_hndl[i] = __collector_create_handle (modules[i]->description);
+ if (modules_hndl[i] == NULL)
+ modules_st[i] = -1;
+ }
+ }
+ /* check to see if anyone closed the experiment */
+ if (!exp_initted)
+ {
+ CALL_UTIL (fprintf)(stderr, "__collector_open_experiment: COL_ERROR_EXP_OPEN\n");
+ __collector_log_write ("<event kind=\"%s\" id=\"%d\">Experiment closed prematurely</event>\n", SP_JCMD_CERROR, COL_ERROR_EXPOPEN);
+ return COL_ERROR_EXPOPEN;
+ }
+ }
+
+ /* initialize for subsequent stack unwinds */
+ __collector_ext_unwind_init (1);
+ TprintfT (DBG_LT0, "__collector_open_experiment(); module init done, params=%s\n",
+ buf);
+
+ /* now parse the data descriptor */
+ /* The parameter string is a series of specifiers,
+ * each of which is of the form:
+ * <key>:<param>;
+ * key is a single letter, the : and ; are mandatory,
+ * and param is a string which may be zero-length, and
+ * which contains any character except a null-byte or ;
+ * param is interpreted by the handler for the particular key
+ */
+
+ s = buf;
+
+ while (*s)
+ {
+ char *par;
+ char key = *s++;
+ /* ensure that it's followed by a colon */
+ if (*s++ != ':')
+ {
+ TprintfT (0, "collector: ERROR: parameter %c is not followed by a colon\n", key);
+ (void) __collector_log_write ("<event kind=\"%s\" id=\"%d\">%s</event>\n", SP_JCMD_CERROR, COL_ERROR_ARGS, params);
+ return COL_ERROR_ARGS;
+ }
+ /* find the semicolon terminator */
+ par = s;
+ while (*s && (*s != ';'))
+ s++;
+ if (*s != ';')
+ {
+ /* not followed by semicolon */
+ TprintfT (0, "collector: ERROR: parameter %c:%s is not terminated by a semicolon\n", key, par);
+ (void) __collector_log_write ("<event kind=\"%s\" id=\"%d\">%s</event>\n", SP_JCMD_CERROR, COL_ERROR_ARGS, params);
+ return COL_ERROR_ARGS;
+ }
+ /* terminate par, and position for next descriptor */
+ *s++ = 0;
+
+ /* now process that element of the data descriptor */
+ switch (key)
+ {
+ case 'g': /* g<sig>; */
+ if ((err = sample_set_user_sig (par)) != COL_ERROR_NONE)
+ {
+ __collector_log_write ("<event kind=\"%s\" id=\"%d\">%s</event>\n", SP_JCMD_CERROR, err, par);
+ return err;
+ }
+ break;
+ case 'd': /* d<sig>; -or- d<sig>p; */
+ if ((err = pause_set_user_sig (par)) != COL_ERROR_NONE)
+ {
+ __collector_log_write ("<event kind=\"%s\" id=\"%d\">%s</event>\n", SP_JCMD_CERROR, err, par);
+ return err;
+ }
+ break;
+ case 'H':
+ m_dlopen ("libgp-heap.so", RTLD_LAZY); /* hack to force .so's constructor to be called (?) */
+ break;
+ case 's':
+ m_dlopen ("libgp-sync.so", RTLD_LAZY); /* hack to force .so's constructor to be called (?) */
+ break;
+ case 'i':
+ m_dlopen ("libgp-iotrace.so", RTLD_LAZY); /* hack to force .so's constructor to be called (?) */
+ break;
+ case 'F': /* F; */
+ seen_F_flag = 1;
+ TprintfT (DBG_LT0, "__collector_open_experiment: calling __collector_ext_line_install (%s, %s)\n",
+ par, __collector_exp_dir_name);
+ if ((err = __collector_ext_line_install (par, __collector_exp_dir_name)) != COL_ERROR_NONE)
+ {
+ __collector_log_write ("<event kind=\"%s\" id=\"%d\">%s</event>\n", SP_JCMD_CERROR, err, par);
+ return err;
+ }
+ break;
+ case 'a': /* a; */
+ archive_mode = __collector_strdup (par);
+ break;
+ case 't': /* t:<expt-duration>; */
+ duration_string = par;
+ break;
+ case 'S': /* S:<sample-interval>; */
+ if ((err = sample_set_interval (par)) != COL_ERROR_NONE)
+ {
+ __collector_log_write ("<event kind=\"%s\" id=\"%d\">%s</event>\n", SP_JCMD_CERROR, err, par);
+ return err;
+ }
+ break;
+ case 'L': /* L:<experiment-size-limit>; */
+ if ((err = __collector_set_size_limit (par)) != COL_ERROR_NONE)
+ {
+ __collector_log_write ("<event kind=\"%s\" id=\"%d\">%s</event>\n", SP_JCMD_CERROR, err, par);
+ return err;
+ }
+ break;
+ case 'P': /* P:PROJECT_HOME; */
+ project_home = __collector_strdup (par);
+ break;
+ case 'h':
+ case 'p':
+ fs_matters = 1;
+ break;
+ case 'Y':
+ err = set_user_sig_action (par);
+ if (err != COL_ERROR_NONE)
+ __collector_log_write ("<event kind=\"%s\" id=\"%d\">%s</event>\n", SP_JCMD_CERROR, err, par);
+ break;
+ default:
+ /* Ignore unknown parameters; allow them to be handled by modules */
+ break;
+ }
+ }
+ /* end of data descriptor parsing */
+
+ if (!seen_F_flag)
+ {
+ char * par = "0"; // This will not happen when collect has no -F option
+ if ((err = __collector_ext_line_install (par, __collector_exp_dir_name)) != COL_ERROR_NONE)
+ {
+ __collector_log_write ("<event kind=\"%s\" id=\"%d\">%s</event>\n", SP_JCMD_CERROR, err, par);
+ return err;
+ }
+ }
+
+ /* now that we know what data is being collected, we can set the filesystem warning */
+ fs_warn ();
+
+ // We have to create all tsd keys before __collector_tsd_allocate().
+ // With the pthreads-based implementation, this might no longer be necessary.
+ // In any case, we still have to create the key before a thread can use it.
+ __collector_ext_gettid_tsd_create_key ();
+ __collector_ext_dispatcher_tsd_create_key ();
+
+ /* allocate tsd for the current thread */
+ if (__collector_tsd_allocate () != 0)
+ {
+ __collector_log_write ("<event kind=\"%s\" id=\"%d\">TSD allocate failed</event>\n", SP_JCMD_CERROR, COL_ERROR_EXPOPEN);
+ return COL_ERROR_EXPOPEN;
+ }
+ /* init tsd for unwind, called right after __collector_tsd_allocate()*/
+ __collector_ext_unwind_key_init (1, NULL);
+
+ /* start java attach if suitable */
+ if (exp_origin == SP_ORIGIN_DBX_ATTACH)
+ __collector_jprofile_start_attach ();
+ start_sec_time = CALL_UTIL (time)(NULL);
+ __collector_start_time = collector_interface.getHiResTime ();
+ TprintfT (DBG_LT0, "\t__collector_open_experiment; resetting start_time\n");
+ if (duration_string != NULL && (err = set_duration (duration_string)) != COL_ERROR_NONE)
+ {
+ __collector_log_write ("<event kind=\"%s\" id=\"%d\">%s</event>\n", SP_JCMD_CERROR, err, duration_string);
+ return err;
+ }
+
+ /* install the common SIGPROF dispatcher (requires TSD) */
+ if ((err = __collector_ext_dispatcher_install ()) != COL_ERROR_NONE)
+ {
+ __collector_log_write ("<event kind=\"%s\" id=\"%d\"/></event>\n", SP_JCMD_CERROR, err);
+ return err;
+ }
+
+ /* mark the experiment open complete */
+ exp_open = 1;
+ if (exp_origin == SP_ORIGIN_DBX_ATTACH)
+ __collector_log_write ("<event kind=\"%s\" tstamp=\"%u.%09u\" time=\"%lld\" tm_zone=\"%lld\"/>\n",
+ SP_JCMD_RUN,
+ (unsigned) (__collector_start_time / NANOSEC), (unsigned) (__collector_start_time % NANOSEC),
+ (long long) start_sec_time, (long long) 0);
+ else
+ log_write_event_run ();
+
+ /* schedule the first sample */
+ __collector_next_sample = __collector_start_time + ((hrtime_t) NANOSEC) * __collector_sample_period;
+ __collector_ext_usage_sample (MASTER_SMPL, "collector_open_experiment");
+
+ /* start data collection in dynamic modules */
+ if (collector_paused == 0)
+ {
+ for (i = 0; i < nmodules; i++)
+ if (modules[i]->startDataCollection != NULL && modules_st[i] == 0)
+ modules[i]->startDataCollection ();
+ }
+ else
+ {
+ hrtime_t ts = GETRELTIME ();
+ (void) __collector_log_write ("<event kind=\"%s\" tstamp=\"%u.%09u\"/>\n",
+ SP_JCMD_PAUSE, (unsigned) (ts / NANOSEC), (unsigned) (ts % NANOSEC));
+ }
+
+ /* mark the experiment active */
+ __collector_exp_active = 1;
+ return COL_ERROR_NONE;
+}
+
+/* prepare directory for new experiment of fork-child */
+
+/* return 0 if successful */
+static int
+collector_create_expr_dir (const char *new_exp_name)
+{
+ int ret = -1;
+ mode_t dmode = S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH;
+ TprintfT (DBG_LT1, "collector: __collector_create_expr_dir(%s)\n", new_exp_name);
+ if (CALL_UTIL (mkdir)(new_exp_name, dmode) < 0)
+ TprintfT (0, "__collector_create_expr_dir(%s) ERROR: errno=%d\n", new_exp_name, errno);
+ else
+ ret = 0;
+ return (ret);
+}
+
+/* append _xN to __collector_exp_dir_name*/
+/* return 0 if successful */
+static int
+collector_exp_dir_append_x (int linenum, const char *parent_exp_name)
+{
+ char buffer[MAXPATHLEN + 1];
+ char * p = __collector_strrchr (parent_exp_name, '/');
+ if (p == NULL || (*(p + 1) != '_'))
+ {
+ size_t sz = CALL_UTIL (strlen)(parent_exp_name);
+ const char * q = parent_exp_name + sz - 3;
+ if (sz < 3 || __collector_strncmp (q, ".er", CALL_UTIL (strlen)(q)) != 0
+ || CALL_UTIL (access)(parent_exp_name, F_OK) != 0)
+ {
+ TprintfT (0, "collector_exp_dir_append_x() ERROR: invalid parent_exp_name %s\n", parent_exp_name);
+ return -1;
+ }
+ CALL_UTIL (strlcpy)(buffer, parent_exp_name, sizeof (buffer));
+ CALL_UTIL (snprintf)(__collector_exp_dir_name, sizeof (__collector_exp_dir_name),
+ "%s/_x%d.er", buffer, linenum);
+ }
+ else
+ {
+ p = __collector_strrchr (parent_exp_name, '.');
+ if (p == NULL || *(p + 1) != 'e' || *(p + 2) != 'r')
+ {
+ TprintfT (0, "collector_exp_dir_append_x() ERROR: invalid parent_exp_name %s\n", parent_exp_name);
+ return -1;
+ }
+ CALL_UTIL (strlcpy)(buffer, parent_exp_name,
+ ((p - parent_exp_name + 1)<sizeof (buffer)) ? (p - parent_exp_name + 1) : sizeof (buffer));
+ CALL_UTIL (snprintf)(__collector_exp_dir_name, sizeof (__collector_exp_dir_name),
+ "%s_x%d.er", buffer, linenum);
+ }
+ return 0;
+}
+
+/* prepare directory for new experiment of exec/combo child*/
+
+/* return 0 if successful */
+static int
+collector_create_expr_dir_lineage (const char *parent_exp_name)
+{
+ int ret = -1;
+ mode_t dmode = S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH;
+ int linenum = 1;
+ while (linenum < INT_MAX)
+ {
+ if (collector_exp_dir_append_x (linenum, parent_exp_name) != 0)
+ return -1;
+ if (CALL_UTIL (access)(__collector_exp_dir_name, F_OK) != 0)
+ {
+ if (CALL_UTIL (mkdir)(__collector_exp_dir_name, dmode) == 0)
+ return 0;
+ }
+ linenum++;
+ TprintfT (DBG_LT0, "collector: collector_create_expr_dir_lineage(%s -> %s)\n", parent_exp_name, __collector_exp_dir_name);
+ }
+ return (ret);
+}
+
+/* Finish the initializing work if we don't collect data while libcollector.so is preloaded. */
+/* return COL_ERROR_NONE if successful */
+static int
+collector_tail_init (const char *parent_exp_name)
+{
+ int err = COL_ERROR_NONE;
+ if (exp_origin != SP_ORIGIN_FORK)
+ {
+ /* For exec/combo descendants. Don't create dir for this subexp, but update lineage by appending "_x0". */
+ /* Different children can have the same _x0 if their name don't match -F exp.
+ * Assume their fork children inherit the program name, there will be no _x0_fN.er to create.
+ * So we don't need to worry about the lineage messed up by _x0.
+ */
+ int linenum = 0;
+ if (collector_exp_dir_append_x (linenum, parent_exp_name) != 0)
+ return COL_ERROR_BADDIR;
+ static char exp_name_env[MAXPATHLEN + 1];
+ CALL_UTIL (snprintf)(exp_name_env, sizeof (exp_name_env), "SP_COLLECTOR_EXPNAME=%s", __collector_exp_dir_name);
+ TprintfT (DBG_LT1, "collector_tail_init: setting SP_COLLECTOR_EXPNAME to %s\n", __collector_exp_dir_name);
+ CALL_UTIL (putenv)(exp_name_env);
+ }
+ /* initialize the segments map and mmap interposition */
+ if (exp_origin != SP_ORIGIN_GENEXP && exp_origin != SP_ORIGIN_KERNEL)
+ if ((err = __collector_ext_mmap_install (0)) != COL_ERROR_NONE)
+ return err;
+
+ /* initialize TSD module (note: relies on __collector_heap) */
+ if (__collector_tsd_init () != 0)
+ return COL_ERROR_EXPOPEN;
+
+ /* initialize for subsequent stack unwinds */
+ __collector_ext_unwind_init (0);
+
+ char * buf = NULL;
+ /* Make a copy of params so that we can modify the string */
+ int paramsz = CALL_UTIL (strlen)(collector_params) + 1;
+ buf = (char*) alloca (paramsz);
+ CALL_UTIL (strlcpy)(buf, collector_params, paramsz);
+
+ char *par_F = "0";
+ char *s;
+ for (s = buf; *s;)
+ {
+ char key = *s++;
+ /* ensure that it's followed by a colon */
+ if (*s++ != ':')
+ {
+ TprintfT (DBG_LT0, "collector_tail_init: ERROR: parameter %c is not followed by a colon\n", key);
+ return COL_ERROR_ARGS;
+ }
+
+ /* find the semicolon terminator */
+ char *par = s;
+ while (*s && (*s != ';'))
+ s++;
+ if (*s != ';')
+ {
+ /* not followed by semicolon */
+ TprintfT (0, "collector_tail_init: ERROR: parameter %c:%s is not terminated by a semicolon\n", key, par);
+ return COL_ERROR_ARGS;
+ }
+ /* terminate par, and position for next descriptor */
+ *s++ = 0;
+ /* now process that element of the data descriptor */
+ if (key == 'F')
+ {
+ par_F = par;
+ break;
+ }
+ }
+ if ((err = __collector_ext_line_install (par_F, __collector_exp_dir_name)) != COL_ERROR_NONE)
+ return err;
+
+ /* allocate tsd for the current thread */
+ if (__collector_tsd_allocate () != 0)
+ return COL_ERROR_EXPOPEN;
+ return COL_ERROR_NONE;
+}
+
+/* routines concerning closing the experiment */
+/* close down -- fini section routine */
+static void collector_fini () __attribute__ ((destructor));
+static void
+collector_fini ()
+{
+ TprintfT (DBG_LT0, "collector_fini: closing experiment\n");
+ __collector_close_experiment ();
+
+}
+
+void collector_terminate_expt () __attribute__ ((weak, alias ("__collector_terminate_expt")));
+
+/* __collector_terminate_expt called by user, or from dbx */
+void
+__collector_terminate_expt ()
+{
+ TprintfT (DBG_LT0, "__collector_terminate_expt: %s; calling close\n", __collector_exp_dir_name);
+ __collector_close_experiment ();
+ TprintfT (DBG_LT0, "__collector_terminate_expt done\n\n");
+}
+
+/*
+ * We manage the SIGCHLD handler with sigaction and don't worry about signal or sigset().
+ * This is in line with the comments in dispatcher.c
+ * immediately preceding the wrapper function for (Linux) signal().
+ */
+static struct sigaction original_sigchld_sigaction;
+static pid_t mychild_pid = -1;
+
+/* __collector_SIGCHLD_signal_handler called when er_archive exits */
+static void
+__collector_SIGCHLD_signal_handler (int sig, siginfo_t *si, void *context)
+{
+ pid_t calling_pid = si->si_pid;
+ /* Potential race.
+ * We get mychild_pid from the vfork() return value.
+ * So there is an outside chance that the child completes and sends SIGCHLD
+ * before the handler knows the value of mychild_pid.
+ */
+ if (calling_pid == mychild_pid)
+ // er_archive has exited; so restore the user handler
+ __collector_sigaction (SIGCHLD, &original_sigchld_sigaction, NULL);
+ else
+ {
+ // if we can't identify the pid, the signal must be for the user's handler
+ if (original_sigchld_sigaction.sa_handler != SIG_DFL
+ && original_sigchld_sigaction.sa_handler != SIG_IGN)
+ original_sigchld_sigaction.sa_sigaction (sig, si, context);
+ }
+ TprintfT (DBG_LT1, "__collector_SIGCHLD_signal_handler done\n\n");
+}
+
+int
+collector_sigchld_sigaction (const struct sigaction *nact,
+ struct sigaction *oact)
+{
+ // get the current SIGCHLD handler
+ struct sigaction cur_handler;
+ __collector_sigaction (SIGCHLD, NULL, &cur_handler);
+
+ // if we have NOT installed our own handler, return an error
+ // (force the caller to deal with this case)
+ if (cur_handler.sa_sigaction != __collector_SIGCHLD_signal_handler)
+ return -1;
+
+ // if we HAVE installed our own handler, act on the user's handler
+ if (oact)
+ __collector_memcpy (oact, &original_sigchld_sigaction, sizeof (struct sigaction));
+ if (nact)
+ __collector_memcpy (&original_sigchld_sigaction, nact, sizeof (struct sigaction));
+ return 0;
+}
+
+/*
+ * __collector_close_experiment may be called either from
+ * __collector_terminate_expt() or the .fini section
+ */
+void
+__collector_close_experiment ()
+{
+ hrtime_t ts;
+ char *argv[10];
+ int status;
+ TprintfT (DBG_LT1, "collector: __collector_close_experiment(): %s\n", __collector_exp_dir_name);
+ if (!exp_initted)
+ return;
+ /* The experiment may have been previously closed */
+ if (!exp_open)
+ return;
+
+ if (__collector_mutex_trylock (&__collector_close_guard))
+ /* someone else is in the middle of closing the experiment */
+ return;
+
+ /* record the termination of the experiment */
+ ts = GETRELTIME ();
+ collector_params = NULL;
+
+ /* tell all dynamic modules to stop data collection */
+ int i;
+ for (i = 0; i < nmodules; i++)
+ if (modules[i]->stopDataCollection != NULL)
+ modules[i]->stopDataCollection ();
+
+ /* notify all dynamic modules the experiment is being closed */
+ for (i = 0; i < nmodules; i++)
+ {
+ if (modules[i]->closeExperiment != NULL)
+ modules[i]->closeExperiment ();
+ __collector_delete_handle (modules_hndl[i]);
+ modules_hndl[i] = NULL;
+ }
+
+ /* acquire the global lock -- only one close at a time */
+ __collector_mutex_lock (&__collector_glob_lock);
+ /* deinstall mmap tracing (with final update) */
+ __collector_ext_mmap_deinstall (1);
+
+ /* deinstall common SIGPROF dispatcher */
+ __collector_ext_dispatcher_deinstall ();
+
+ /* disable line interposition */
+ __collector_ext_line_close ();
+
+ /* Other threads may be reading tsd now. */
+ //__collector_tsd_fini();
+
+ /* delete global heap */
+ /* omazur: do not delete the global heap
+ * to avoid crashes in TSD. Need a better solution.
+ __collector_deleteHeap( __collector_heap );
+ __collector_heap = NULL;
+ */
+ __collector_mutex_unlock (&__collector_glob_lock);
+
+ /* take a final sample */
+ __collector_ext_usage_sample (MASTER_SMPL, "collector_close_experiment");
+ sample_mode = 0;
+
+ /* close the frameinfo file */
+ __collector_ext_unwind_close ();
+ if (exp_origin != SP_ORIGIN_DBX_ATTACH)
+ log_write_event_run ();
+
+ /* mark the experiment as closed */
+ __collector_expstate = EXP_CLOSED;
+ TprintfT (DBG_LT1, "collector: __collector_expstate->EXP_CLOSED: project_home=%s\n",
+ STR (project_home));
+ __collector_log_write ("<event kind=\"%s\" tstamp=\"%u.%09u\"/>\n",
+ SP_JCMD_EXIT,
+ (unsigned) (ts / NANOSEC), (unsigned) (ts % NANOSEC));
+
+ /* derive er_archive's absolute path from that of libcollector */
+ argv[0] = NULL;
+ if (project_home && archive_mode && __collector_strcmp (archive_mode, "off"))
+ {
+ /* construct a command to launch it */
+ char *er_archive_name = "/bin/gp-archive";
+ size_t cmdlen = CALL_UTIL (strlen)(project_home) + CALL_UTIL (strlen)(er_archive_name) + 1;
+ char *command = (char*) alloca (cmdlen);
+ CALL_UTIL (snprintf)(command, cmdlen, "%s%s", project_home, er_archive_name);
+ if (CALL_UTIL (access)(command, F_OK) == 0)
+ {
+ // build the argument list
+ int nargs = 0;
+ argv[nargs++] = command;
+ argv[nargs++] = "-n";
+ argv[nargs++] = "-a";
+ argv[nargs++] = archive_mode;
+ size_t len = CALL_UTIL (strlen)(__collector_exp_dir_name) + 1;
+ size_t len1 = CALL_UTIL (strlen)(SP_ARCHIVE_LOG_FILE) + 1;
+ char *str = (char*) alloca (len + len1);
+ CALL_UTIL (snprintf)(str, len + 15, "%s/%s", __collector_exp_dir_name, SP_ARCHIVE_LOG_FILE);
+ argv[nargs++] = "--outfile";
+ argv[nargs++] = str;
+ str = (char*) alloca (len);
+ CALL_UTIL (snprintf)(str, len, "%s", __collector_exp_dir_name);
+ argv[nargs++] = str;
+ argv[nargs] = NULL;
+ }
+ }
+
+ /* log the archive command to be run */
+ if (argv[0] == NULL)
+ {
+ (void) __collector_log_write ("<event kind=\"%s\" id=\"%d\">%s</event>\n",
+ SP_JCMD_COMMENT, COL_COMMENT_NONE, "No archive command run");
+ TprintfT (DBG_LT1, "collector: No archive command run\n");
+ }
+ else
+ {
+ char cmdbuf[4096];
+ int bufoffset = 0;
+ int i;
+ for (i = 0; argv[i] != NULL; i++)
+ {
+ bufoffset += CALL_UTIL (snprintf)(&cmdbuf[bufoffset], (sizeof (cmdbuf) - bufoffset),
+ " %s", argv[i]);
+ }
+ (void) __collector_log_write ("<event kind=\"%s\" id=\"%d\">Archive command `%s'</event>\n",
+ SP_JCMD_COMMENT, COL_COMMENT_NONE, cmdbuf);
+ TprintfT (DBG_LT1, "collector: running `%s'\n", cmdbuf);
+ }
+ log_close ();
+ TprintfT (DBG_LT1, "__collector_close_experiment(%s) done\n", __collector_exp_dir_name);
+ exp_open = 0; /* mark the experiment as closed */
+ __collector_exp_active = 0; /* mark the experiment as inactive */
+
+ /* reset all experiment parameters */
+ sample_mode = 0;
+ collector_paused = 0;
+ __collector_pause_sig = -1;
+ __collector_pause_sig_warn = 0;
+ __collector_sample_sig = -1;
+ __collector_sample_sig_warn = 0;
+ __collector_sample_period = 0;
+ __collector_exp_dir_name[0] = 0;
+
+ /* uninstall the pause and sample signal handlers */
+ /* XXXX -- not yet, because of potential race conditions in libthread */
+ if (argv[0] == NULL)
+ {
+ /* er_archive command will not be run */
+ __collector_mutex_unlock (&__collector_close_guard);
+ return;
+ }
+
+ struct sigaction sa;
+ CALL_UTIL (memset)(&sa, 0, sizeof (struct sigaction));
+ sa.sa_sigaction = __collector_SIGCHLD_signal_handler;
+ sa.sa_flags = SA_SIGINFO;
+ __collector_sigaction (SIGCHLD, &sa, &original_sigchld_sigaction);
+
+ /* linetrace interposition takes care of unsetting Environment variables */
+ /* create a child process to invoke er_archive */
+ pid_t pid = CALL_UTIL (vfork)();
+ if (pid == 0)
+ {
+ /* pid is zero == child process -- invoke er_archive */
+ /* Unset LD_PRELOAD environment variables */
+ CALL_UTIL (unsetenv)("LD_PRELOAD_32");
+ CALL_UTIL (unsetenv)("LD_PRELOAD_64");
+ CALL_UTIL (unsetenv)("LD_PRELOAD");
+ /* Invoke er_archive */
+ CALL_UTIL (execv)(argv[0], argv);
+ CALL_UTIL (exit)(1); /* exec failed -- child exits with an error */
+ }
+ else if (pid != -1)
+ {
+ mychild_pid = pid; // notify our signal handler who the child is
+ pid_t w;
+ /* copied from system.c */
+ do
+ {
+ w = CALL_UTIL (waitpid)(pid, &status, 0);
+ }
+ while (w == -1 && errno == EINTR);
+ TprintfT (DBG_LT1, "collector: creating archive done\n");
+ // __collector_SIGCHLD_signal_handler should now be de-installed, but it does so itself
+ }
+ else
+ /* child-process creation failed */
+ TprintfT (DBG_LT0, "collector: creating archive process failed\n");
+
+ __collector_mutex_unlock (&__collector_close_guard);
+ TprintfT (DBG_LT1, "collector: __collector_close_experiment done\n");
+ return;
+}
+
+/*
+ * void __collector_clean_state()
+ * Perform all necessary cleanup steps in child process after fork().
+ */
+void
+__collector_clean_state ()
+{
+ TprintfT (DBG_LT1, "collector: collector_clean_state()\n");
+ int i;
+ /*
+ * We are in child process after fork().
+ * First of all we have to reset all mutex locks in collector's subsystems.
+ * After that we can reinitialize modules.
+ */
+ __collector_mmgr_init_mutex_locks (__collector_heap);
+ __collector_mutex_init (&__collector_glob_lock);
+ __collector_mutex_init (&__collector_open_guard);
+ __collector_mutex_init (&__collector_close_guard);
+ __collector_mutex_init (&__collector_sample_guard);
+ __collector_mutex_init (&__collector_suspend_guard);
+ __collector_mutex_init (&__collector_resume_guard);
+
+ if (__collector_mutex_trylock (&__collector_close_guard))
+ /* someone else is in the middle of closing the experiment */
+ return;
+
+ /* Stop data collection in all dynamic modules */
+ for (i = 0; i < nmodules; i++)
+ if (modules[i]->stopDataCollection != NULL)
+ modules[i]->stopDataCollection ();
+
+ // Now we can reset modules
+ for (i = 0; i < nmodules; i++)
+ {
+ if (modules[i]->detachExperiment != NULL && modules_st[i] == 0)
+ modules[i]->detachExperiment ();
+ __collector_delete_handle (modules_hndl[i]);
+ modules_hndl[i] = NULL;
+ }
+
+ /* acquire the global lock -- only one suspend at a time */
+ __collector_mutex_lock (&__collector_glob_lock);
+ {
+
+ /* stop any profile data writing */
+ paused_when_suspended = collector_paused;
+ collector_paused = 1;
+
+ /* deinstall common SIGPROF dispatcher */
+ __collector_ext_dispatcher_suspend ();
+
+ /* mark the experiment as suspended */
+ __collector_exp_active = 0;
+
+ /* XXXX mark the experiment as closed! */
+ exp_open = 0; /* This is a hack to allow fork child to call__collector_open_experiment() */
+
+ /* mark the experiment log closed! */
+ log_close ();
+ }
+ __collector_mutex_unlock (&__collector_glob_lock);
+
+ // Now we can reset subsystems.
+ __collector_ext_dispatcher_fork_child_cleanup ();
+ __collector_mmap_fork_child_cleanup ();
+ __collector_tsd_fork_child_cleanup ();
+ paused_when_suspended = 0;
+ collector_paused = 0;
+ __collector_expstate = EXP_INIT;
+ TprintfT (DBG_LT1, "__collector_clean_slate: __collector_expstate->EXP_INIT\n");
+ exp_origin = SP_ORIGIN_LIBCOL_INIT;
+ exp_initted = 0;
+ __collector_start_time = collector_interface.getHiResTime ();
+ TprintfT (DBG_LT1, " -->__collector_clean_slate; resetting start_time\n");
+ start_sec_time = 0;
+
+ /* Sample related data */
+ sample_installed = 0; // 1 if the sample signal handler installed
+ sample_mode = 0; // dynamically turns sample record writing on/off
+ sample_number = 0; // index of the current sample record
+ __collector_sample_sig = -1; // user-specified sample signal
+ __collector_sample_sig_warn = 0; // non-zero if warning already given
+
+ /* Pause/resume related data */
+ __collector_pause_sig = -1; // user-specified pause signal
+ __collector_pause_sig_warn = 0; // non-zero if warning already given
+ __collector_mutex_unlock (&__collector_close_guard);
+ return;
+}
+
+/* modelled on __collector_close_experiment */
+void
+__collector_suspend_experiment (char *why)
+{
+ if (!exp_initted)
+ return;
+ /* The experiment may have been previously closed */
+ if (!exp_open)
+ return;
+ /* The experiment may have been previously suspended */
+ if (!__collector_exp_active)
+ return;
+ if (__collector_mutex_trylock (&__collector_suspend_guard))
+ /* someone else is in the middle of suspending the experiment */
+ return;
+
+ /* Stop data collection in all dynamic modules */
+ int i;
+ for (i = 0; i < nmodules; i++)
+ if (modules[i]->stopDataCollection != NULL)
+ modules[i]->stopDataCollection ();
+
+ /* take a pre-suspension sample */
+ __collector_ext_usage_sample (MASTER_SMPL, why);
+
+ /* acquire the global lock -- only one suspend at a time */
+ __collector_mutex_lock (&__collector_glob_lock);
+ /* stop any profile data writing */
+ paused_when_suspended = collector_paused;
+ collector_paused = 1;
+
+ /* deinstall common SIGPROF dispatcher */
+ __collector_ext_dispatcher_suspend ();
+
+ /* mark the experiment as suspended */
+ __collector_exp_active = 0;
+
+ /* XXXX mark the experiment as closed! */
+ exp_open = 0; // This is a hack to allow fork child to call __collector_open_experiment()
+ log_pause (); // mark the experiment log closed!
+ TprintfT (DBG_LT0, "collector: collector_suspend_experiment(%s, %d)\n\n", why, collector_paused);
+ __collector_mutex_unlock (&__collector_glob_lock);
+ __collector_mutex_unlock (&__collector_suspend_guard);
+ return;
+}
+
+void
+__collector_resume_experiment ()
+{
+ if (!exp_initted)
+ return;
+
+ /* The experiment may have been previously resumed */
+ if (__collector_exp_active)
+ return;
+ if (__collector_mutex_trylock (&__collector_resume_guard))
+ /* someone else is in the middle of resuming the experiment */
+ return;
+
+ /* acquire the global lock -- only one resume at a time */
+ __collector_mutex_lock (&__collector_glob_lock);
+ /* mark the experiment as re-activated */
+ __collector_exp_active = 1;
+ /* XXXX mark the experiment as open! */
+ exp_open = 1; // This is a hack to allow fork child to call__collector_open_experiment()
+ log_resume (); // mark the experiment log re-opened!
+ TprintfT (DBG_LT0, "collector: collector_resume_experiment(%d)\n", paused_when_suspended);
+ /* resume any profile data writing */
+ collector_paused = paused_when_suspended;
+ /* restart common SIGPROF dispatcher */
+ __collector_ext_dispatcher_restart ();
+ __collector_mutex_unlock (&__collector_glob_lock);
+
+ /* take a post-suspension sample */
+ __collector_ext_usage_sample (MASTER_SMPL, "collector_resume_experiment");
+
+ /* Resume data collection in all dynamic modules */
+ if (collector_paused == 0)
+ {
+ int i;
+ for (i = 0; i < nmodules; i++)
+ if (modules[i]->startDataCollection != NULL && modules_st[i] == 0)
+ modules[i]->startDataCollection ();
+ }
+
+ if (__collector_sample_period != 0)
+ {
+ hrtime_t now = collector_interface.getHiResTime ();
+ while (__collector_next_sample < now)
+ __collector_next_sample += ((hrtime_t) NANOSEC) * __collector_sample_period;
+ }
+
+ /* check for experiment past termination time */
+ if (__collector_terminate_time != 0)
+ {
+ hrtime_t now = collector_interface.getHiResTime ();
+ if (__collector_terminate_time < now)
+ {
+ TprintfT (DBG_LT0, "__collector_resume_experiment: now (%lld) > terminate_time (%lld); closing experiment\n",
+ (now - __collector_start_time), (__collector_terminate_time - __collector_start_time));
+ __collector_close_experiment ();
+ }
+ }
+ __collector_mutex_unlock (&__collector_resume_guard);
+ return;
+}
+
+/* Code to support Samples and Pause/Resume */
+void collector_sample () __attribute__ ((weak, alias ("__collector_sample")));
+void
+__collector_sample (char *name)
+{
+ __collector_ext_usage_sample (PROGRAM_SMPL, name);
+}
+
+static void
+write_sample (char *name)
+{
+ if (sample_mode == 0)
+ return;
+ /* make the sample timestamp relative to the start */
+ hrtime_t ts, now = collector_interface.getHiResTime ();
+
+ /* update time for next periodic sample */
+ /* since this is common to all LWPs, and only one (the first!) will
+ update it to the next period, doing the update early will avoid
+ the overhead/frustration of the other LWPs
+ */
+ if (__collector_sample_period != 0)
+ {
+ /* this update should only be done for periodic samples */
+ while (__collector_next_sample < now)
+ __collector_next_sample += ((hrtime_t) NANOSEC) * __collector_sample_period;
+ }
+
+ /* take the sample and record it; use (return - __collector_start_time) for timestamp */
+ now = ovw_write ();
+ ts = now - __collector_start_time;
+
+ /* write sample records to log file */
+ __collector_log_write ("<event kind=\"%s\" tstamp=\"%u.%09u\" id=\"%d\" label=\"%s\"/>\n",
+ SP_JCMD_SAMPLE,
+ (unsigned) (ts / NANOSEC), (unsigned) (ts % NANOSEC),
+ sample_number,
+ name);
+ /* increment the sample number */
+ sample_number++;
+}
+
+/*
+ * __collector_ext_usage_sample
+ *
+ * Handle taking a process usage sample and recording it.
+ * Common to all different types of sample:
+ * libcollector master samples at initiation and close,
+ * programmatic samples via libcollector API calls,
+ * periodic samples originating in the dispatcher,
+ * manual samples originating in the signal sample handler,
+ * manual samples originating from the debugger
+ * Differentiating type and name information is currently not recorded.
+ */
+void
+__collector_ext_usage_sample (Smpl_type type, char *name)
+{
+ /* name is optional */
+ if (name == NULL)
+ name = "";
+ TprintfT (DBG_LT3, "collector: __collector_ext_usage_sample(%d,%s)\n", type, name);
+ if (!exp_initted)
+ return;
+
+ /* if paused, don't record periodic samples */
+ if ((type == PERIOD_SMPL) && (collector_paused == 1))
+ return;
+
+ /* There is a possibility of entering this function
+ * from sample_handler, dbx direct call to __collector_sample,
+ * and user called collector_sample. Since we are making a
+ * new sample anyway just return.
+ */
+ if (__collector_mutex_trylock (&__collector_sample_guard))
+ return;
+ if (type != PERIOD_SMPL || __collector_sample_period != 0)
+ write_sample (name);
+ __collector_mutex_unlock (&__collector_sample_guard);
+}
+
+/* set the sample period from the parameter */
+static int
+sample_set_interval (char *param)
+{
+ if (!exp_initted)
+ return COL_ERROR_SMPLINIT;
+ __collector_sample_period = CALL_UTIL (strtol)(param, NULL, 0); /* seconds */
+ TprintfT (DBG_LT1, "collector: collector_sample period set to %d seconds.\n",
+ __collector_sample_period);
+ if (__collector_sample_period > 0)
+ (void) __collector_log_write ("<setting %s=\"%d\"/>\n",
+ SP_JCMD_SAMPLE_PERIOD, __collector_sample_period);
+ return COL_ERROR_NONE;
+}
+
+/* set the experiment duration from the parameter */
+
+/* parameter is of the form nnn:mmm, where nnn is the start delay in seconds,
+ * and mmm is the terminate time in seconds; if nnn is zero,
+ * data collection starts when the run starts. If mmm is zero,
+ * data collection terminates when the run terminates. Otherwise,
+ * nnn must be less than mmm
+ */
+static int
+set_duration (char *param)
+{
+ if (!exp_initted)
+ return COL_ERROR_DURATION_INIT;
+ int delay_start = CALL_UTIL (strtol)(param, &param, 0); /* seconds */
+ int terminate_duration = 0;
+ if (*param == 0)
+ {
+ /* we only have one parameter, the terminate time */
+ terminate_duration = delay_start;
+ delay_start = 0;
+ }
+ else if (*param == ':')
+ {
+ param++;
+ terminate_duration = CALL_UTIL (strtol)(param, &param, 0); /* seconds */
+ }
+ else
+ return COL_ERROR_DURATION_INIT;
+ TprintfT (DBG_LT1, "collector: collector_delay_start duration set to %d seconds.\n",
+ delay_start);
+ TprintfT (DBG_LT1, "collector: collector_terminate duration set to %d seconds.\n",
+ terminate_duration);
+ if (terminate_duration > 0)
+ __collector_log_write ("<setting %s=\"%d\"/>\n<setting %s=\"%d\"/>\n",
+ SP_JCMD_DELAYSTART, delay_start,
+ SP_JCMD_TERMINATE, terminate_duration);
+ __collector_delay_start = (hrtime_t) 0;
+ if (delay_start != 0)
+ {
+ __collector_delay_start = __collector_start_time + ((hrtime_t) NANOSEC) * delay_start;
+ collector_paused = 1;
+ }
+ __collector_terminate_time = terminate_duration == 0 ? (hrtime_t) 0 :
+ __collector_start_time + ((hrtime_t) NANOSEC) * terminate_duration;
+ return COL_ERROR_NONE;
+}
+
+static int
+sample_set_user_sig (char *par)
+{
+ int sig = CALL_UTIL (strtol)(par, &par, 0);
+ TprintfT (DBG_LT1, "collector: sample_set_user_sig(sig=%d,installed=%d)\n",
+ sig, sample_installed);
+ /* Installing the sampling signal handler more
+ * than once is not good.
+ */
+ if (!sample_installed)
+ {
+ struct sigaction act;
+ sigemptyset (&act.sa_mask);
+ /* XXXX should any signals be blocked? */
+ act.sa_sigaction = sample_handler;
+ act.sa_flags = SA_RESTART | SA_SIGINFO;
+ if (sigaction (sig, &act, &old_sample_handler) == -1)
+ {
+ TprintfT (DBG_LT0, "collector: ERROR: collector_sample_handler install failed (sig=%d).\n",
+ __collector_sample_sig);
+ return COL_ERROR_ARGS;
+ }
+ if (old_sample_handler.sa_handler == SIG_DFL ||
+ old_sample_handler.sa_sigaction == sample_handler)
+ old_sample_handler.sa_handler = SIG_IGN;
+ TprintfT (DBG_LT1, "collector: collector_sample_handler installed (sig=%d,hndlr=0x%p).\n",
+ sig, sample_handler);
+ __collector_sample_sig = sig;
+ sample_installed = 1;
+ }
+ (void) __collector_log_write ("<setting %s=\"%u\"/>\n", SP_JCMD_SAMPLE_SIG, __collector_sample_sig);
+ return COL_ERROR_NONE;
+}
+
+/* signal handler for sample signal */
+static void
+sample_handler (int sig, siginfo_t *sip, void *uap)
+{
+ if (sip && sip->si_code == SI_USER)
+ {
+ TprintfT (DBG_LT1, "collector: collector_sample_handler sampling!\n");
+ __collector_ext_usage_sample (MANUAL_SMPL, "signal");
+ }
+ else if (old_sample_handler.sa_handler != SIG_IGN)
+ {
+ TprintfT (DBG_LT1, "collector: collector_sample_handler forwarding signal.\n");
+ (old_sample_handler.sa_sigaction)(sig, sip, uap);
+ }
+}
+
+void collector_pause () __attribute__ ((weak, alias ("__collector_pause")));
+
+void
+__collector_pause ()
+{
+ __collector_pause_m ("API");
+}
+
+void
+__collector_pause_m (char *reason)
+{
+ hrtime_t now;
+ char xreason[MAXPATHLEN];
+ TprintfT (DBG_LT0, "collector: __collector_pause_m(%s)\n", reason);
+
+ /* Stop data collection in all dynamic modules */
+ for (int i = 0; i < nmodules; i++)
+ if (modules[i]->stopDataCollection != NULL)
+ modules[i]->stopDataCollection ();
+
+ /* Take a pause sample */
+ CALL_UTIL (snprintf)(xreason, sizeof (xreason), "collector_pause(%s)", reason);
+ __collector_ext_usage_sample (MASTER_SMPL, xreason);
+
+ /* Record the event in the log file */
+ now = GETRELTIME ();
+ (void) __collector_log_write ("<event kind=\"%s\" tstamp=\"%u.%09u\" name=\"%s\"/>\n", SP_JCMD_PAUSE,
+ (unsigned) (now / NANOSEC), (unsigned) (now % NANOSEC), reason);
+ __collector_expstate = EXP_PAUSED;
+ TprintfT (DBG_LT1, "collector: __collector_expstate->EXP_PAUSED\n");
+ collector_paused = 1;
+}
+
+void collector_resume () __attribute__ ((weak, alias ("__collector_resume")));
+
+void
+__collector_resume ()
+{
+ TprintfT (DBG_LT0, "collector: __collector_resume()\n");
+ __collector_expstate = EXP_OPEN;
+ TprintfT (DBG_LT1, "collector: __collector_expstate->EXP_OPEN\n");
+
+ /* Record the event in the log file */
+ hrtime_t now = GETRELTIME ();
+ (void) __collector_log_write ("<event kind=\"%s\" tstamp=\"%u.%09u\"/>\n", SP_JCMD_RESUME,
+ (unsigned) (now / NANOSEC), (unsigned) (now % NANOSEC));
+ /* Take a resume sample */
+ __collector_ext_usage_sample (MASTER_SMPL, "collector_resume");
+
+ /* Resume data collection in all dynamic modules */
+ for (int i = 0; i < nmodules; i++)
+ if (modules[i]->startDataCollection != NULL && modules_st[i] == 0)
+ modules[i]->startDataCollection ();
+ collector_paused = 0;
+}
+
+static int
+pause_set_user_sig (char *par)
+{
+ struct sigaction act;
+ int sig = CALL_UTIL (strtol)(par, &par, 0);
+ if (*par)
+ {
+ /* not end of the token */
+ if (*par != 'p')
+ {
+ /* it should be a p */
+ TprintfT (DBG_LT0, "collector: ERROR: collector_user_handler bad terminator (par=%p[0]=%d).\n",
+ par, (int) *par);
+ return COL_ERROR_ARGS;
+
+ }
+ else
+ {
+ /*, it's a p, make sure next is end of token */
+ par++;
+ if (*par)
+ {
+ TprintfT (DBG_LT0, "collector: ERROR: collector_user_handler bad terminator (par=%p[0]=%d).\n",
+ par, (int) *par);
+ return COL_ERROR_ARGS;
+ }
+ else
+ /* start off paused */
+ collector_paused = 1;
+ }
+ }
+ sigemptyset (&act.sa_mask);
+ /* XXXX should any signals be blocked? */
+ act.sa_sigaction = pause_handler;
+ act.sa_flags = SA_RESTART | SA_SIGINFO;
+ if (sigaction (sig, &act, &old_pause_handler) == -1)
+ {
+ TprintfT (DBG_LT0, "collector: ERROR: collector_pause_handler install failed (sig=%d).\n", sig);
+ return COL_ERROR_ARGS;
+ }
+ if (old_pause_handler.sa_handler == SIG_DFL ||
+ old_pause_handler.sa_sigaction == pause_handler)
+ old_pause_handler.sa_handler = SIG_IGN;
+ TprintfT (DBG_LT1, "collector: collector_pause_handler installed (sig=%d,hndlr=0x%p).\n",
+ sig, pause_handler);
+ __collector_pause_sig = sig;
+ (void) __collector_log_write ("<setting %s=\"%u\"/>\n", SP_JCMD_PAUSE_SIG,
+ __collector_pause_sig);
+ return COL_ERROR_NONE;
+}
+
+/* signal handler for pause/resume signal */
+static void
+pause_handler (int sig, siginfo_t *sip, void *uap)
+{
+ if (sip && sip->si_code == SI_USER)
+ {
+ if (collector_paused == 1)
+ {
+ __collector_resume ();
+ TprintfT (DBG_LT0, "collector: collector_pause_handler resumed!\n");
+ }
+ else
+ {
+ __collector_pause_m ("signal");
+ TprintfT (DBG_LT0, "collector: collector_pause_handler paused!\n");
+ }
+ }
+ else if (old_pause_handler.sa_handler != SIG_IGN)
+ {
+ TprintfT (DBG_LT0, "collector: collector_pause_handler forwarding signal.\n");
+ (old_pause_handler.sa_sigaction)(sig, sip, uap);
+ }
+}
+
+static void
+get_progspec (char *retstr, int tmp_sz, char *name, int name_sz)
+{
+ int procfd, count, i;
+ *retstr = 0;
+ tmp_sz--;
+ *name = 0;
+ name_sz--;
+ procfd = CALL_UTIL (open)("/proc/self/cmdline", O_RDONLY);
+ int getting_name = 0;
+ if (procfd != -1)
+ {
+ count = CALL_UTIL (read)(procfd, retstr, tmp_sz);
+ retstr[count] = '\0';
+ for (i = 0; i < count; i++)
+ {
+ if (getting_name == 0)
+ name[i] = retstr[i];
+ if (retstr[i] == '\0')
+ {
+ getting_name = 1;
+ if ((i + 1) < count)
+ retstr[i] = ' ';
+ }
+ }
+ CALL_UTIL (close)(procfd);
+ }
+}
+
+static void
+fs_warn ()
+{
+ /* if data implies we don't care, just return */
+ if (fs_matters == 0)
+ return;
+}
+
+static void
+close_handler (int sig, siginfo_t *sip, void *uap)
+{
+ if (sip && sip->si_code == SI_USER)
+ {
+ TprintfT (DBG_LT0, "collector: close_handler: processing signal.\n");
+ __collector_close_experiment ();
+ }
+ else if (old_close_handler.sa_handler != SIG_IGN)
+ {
+ TprintfT (DBG_LT0, "collector: close_handler forwarding signal.\n");
+ (old_close_handler.sa_sigaction)(sig, sip, uap);
+ }
+}
+
+static void
+exit_handler (int sig, siginfo_t *sip, void *uap)
+{
+ if (sip && sip->si_code == SI_USER)
+ {
+ TprintfT (DBG_LT0, "collector: exit_handler: processing signal.\n");
+ CALL_UTIL (exit)(1);
+ }
+ else if (old_exit_handler.sa_handler != SIG_IGN)
+ {
+ TprintfT (DBG_LT0, "collector: exit_handler forwarding signal.\n");
+ (old_exit_handler.sa_sigaction)(sig, sip, uap);
+ }
+}
+
+static int
+set_user_sig_action (char *par)
+{
+ int sig = CALL_UTIL (strtol)(par, &par, 0);
+ if (*par != '=')
+ {
+ TprintfT (DBG_LT0, "collector: ERROR: set_user_sig_action bad separator: %s.\n", par);
+ return COL_ERROR_ARGS;
+ }
+ par++;
+ struct sigaction act;
+ sigemptyset (&act.sa_mask);
+ act.sa_flags = SA_RESTART | SA_SIGINFO;
+ if (__collector_strcmp (par, "exit") == 0)
+ {
+ act.sa_sigaction = exit_handler;
+ if (sigaction (sig, &act, &old_exit_handler) == -1)
+ {
+ TprintfT (DBG_LT0, "collector: ERROR: set_user_sig_action failed: %d=%s.\n", sig, par);
+ return COL_ERROR_ARGS;
+ }
+ }
+ else if (__collector_strcmp (par, "close") == 0)
+ {
+ act.sa_sigaction = close_handler;
+ if (sigaction (sig, &act, &old_close_handler) == -1)
+ {
+ TprintfT (DBG_LT0, "collector: ERROR: set_user_sig_action failed: %d=%s.\n", sig, par);
+ return COL_ERROR_ARGS;
+ }
+ }
+ else
+ {
+ TprintfT (DBG_LT0, "collector: ERROR: set_user_sig_action unknown action: %d=%s.\n", sig, par);
+ return COL_ERROR_ARGS;
+ }
+ __collector_log_write ("<setting signal=\"%u\" action=\"%s\"/>\n", sig, par);
+ return COL_ERROR_NONE;
+}
+
+/*============================================================*/
+/*
+ * Routines for handling the log file
+ */
+static struct DataHandle *log_hndl = NULL;
+static int log_initted = 0;
+static int log_enabled = 0;
+
+static int
+log_open ()
+{
+ log_hndl = __collector_create_handle (SP_LOG_FILE);
+ if (log_hndl == NULL)
+ return COL_ERROR_LOG_OPEN;
+ log_initted = 1;
+ log_enabled = 1;
+ TprintfT (DBG_LT1, "log_open()\n");
+ return COL_ERROR_NONE;
+}
+
+static void
+log_header_write (sp_origin_t origin)
+{
+ __collector_log_write ("<experiment %s=\"%d.%d\">\n",
+ SP_JCMD_VERSION, SUNPERF_VERNUM, SUNPERF_VERNUM_MINOR);
+ __collector_log_write ("<collector>%s</collector>\n", VERSION);
+ __collector_log_write ("</experiment>\n");
+
+ struct utsname sysinfo;
+ if (uname (&sysinfo) < 0)
+ {
+ __collector_log_write ("<event kind=\"%s\" id=\"%d\" ec=\"%d\"/></event>\n", SP_JCMD_CERROR, COL_ERROR_SYSINFO, errno);
+ __collector_log_write ("<system>\n");
+ }
+ else
+ {
+ long page_size = CALL_UTIL (sysconf)(_SC_PAGESIZE);
+ long npages = CALL_UTIL (sysconf)(_SC_PHYS_PAGES);
+ __collector_log_write ("<system hostname=\"%s\" arch=\"%s\" os=\"%s %s\" pagesz=\"%ld\" npages=\"%ld\">\n",
+ sysinfo.nodename, sysinfo.machine, sysinfo.sysname, sysinfo.release, page_size, npages);
+ }
+
+ //YXXX Updating this section? Check similar cut/paste code in:
+ // collctrl.cc::Coll_Ctrl()
+ // collector.c::log_header_write()
+ // cpu_frequency.h::get_cpu_frequency()
+
+ FILE *procf = CALL_UTIL (fopen)("/proc/cpuinfo", "r");
+ if (procf != NULL)
+ {
+ char temp[1024];
+ int cpu = -1;
+ while (CALL_UTIL (fgets)(temp, sizeof (temp), procf) != NULL)
+ {
+#if ARCH(Intel)
+ if (__collector_strStartWith (temp, "processor") == 0)
+ {
+ char *val = CALL_UTIL (strchr)(temp, ':');
+ cpu = val ? CALL_UTIL (atoi)(val + 1) : -1;
+ }
+ // else if ( __collector_strStartWith(temp, "model") == 0
+ // && CALL_UTIL(strstr)(temp, "name") == 0) {
+ // char *val = CALL_UTIL(strchr)( temp, ':' );
+ // int model = val ? CALL_UTIL(atoi)( val + 1 ) : -1;
+ // }
+ // else if ( __collector_strStartWith(temp, "cpu family") == 0 ) {
+ // char *val = CALL_UTIL(strchr)( temp, ':' );
+ // int family = val ? CALL_UTIL(atoi)( val + 1 ) : -1;
+ // }
+ else if (__collector_strStartWith (temp, "cpu MHz") == 0)
+ {
+ char *val = CALL_UTIL (strchr)(temp, ':');
+ int mhz = val ? CALL_UTIL (atoi)(val + 1) : 0; /* reading it as int is fine */
+ (void) __collector_log_write (" <cpu id=\"%d\" clk=\"%d\"/>\n", cpu, mhz);
+ }
+#elif ARCH(SPARC)
+ if (__collector_strStartWith (temp, "Cpu") == 0 &&
+ temp[3] != '\0' &&
+ __collector_strStartWith ((CALL_UTIL (strchr)(temp + 1, 'C')) ? CALL_UTIL (strchr)(temp + 1, 'C') : (temp + 4), "ClkTck") == 0)
+ { // sparc-Linux
+ char *val = CALL_UTIL (strchr)(temp, ':');
+ int mhz = 0;
+ if (val)
+ {
+ unsigned long long freq;
+ (*__collector_sscanfp) (val + 2, "%llx", &freq);
+ mhz = (unsigned int) (((double) freq) / 1000000.0 + 0.5);
+ }
+ char *numend = CALL_UTIL (strchr)(temp + 1, 'C') ? CALL_UTIL (strchr)(temp + 1, 'C') : (temp + 4);
+ *numend = '\0';
+ cpu = CALL_UTIL (atoi)(temp + 3);
+ __collector_log_write (" <cpu id=\"%d\" clk=\"%d\"/>\n", cpu, mhz);
+ }
+#elif defined(__aarch64__)
+ if (__collector_strStartWith (temp, "processor") == 0)
+ {
+ char *val = CALL_UTIL (strchr)(temp, ':');
+ cpu = val ? CALL_UTIL (atoi)(val + 1) : -1;
+ if (cpu != -1)
+ {
+ unsigned int mhz;
+ asm volatile("mrs %0, cntfrq_el0" : "=r" (mhz));
+ __collector_log_write (" <cpu id=\"%d\" clk=\"%d\"/>\n", cpu,
+ mhz / 1000000);
+ }
+ }
+#endif
+ }
+ CALL_UTIL (fclose)(procf);
+ }
+ __collector_log_write ("</system>\n");
+ __collector_log_write ("<process pid=\"%d\"></process>\n", getpid ());
+ __collector_log_write ("<process ppid=\"%d\"></process>\n", getppid ());
+ __collector_log_write ("<process pgrp=\"%d\"></process>\n", getpgrp ());
+ __collector_log_write ("<process sid=\"%d\"></process>\n", getsid (0));
+
+ /* XXX -- cwd commented out
+ It would be nice to get the current directory for the experiment,
+ but neither method below will work--the /proc method returns a
+ 0-length string, and using getcwd will break collect on /bin/sh
+ (as cuserid does) because of /bin/sh's private malloc
+ omazur: readlink seems to work on Linux
+ */
+ /* write the current directory */
+ char cwd[MAXPATHLEN + 1];
+ int i = readlink ("/proc/self/cwd", cwd, sizeof (cwd));
+ if (i >= 0)
+ {
+ cwd[i < sizeof (cwd) ? i : sizeof (cwd) - 1] = 0;
+ (void) __collector_log_write ("<process cwd=\"%s\"></process>\n", cwd);
+ }
+ (void) __collector_log_write ("<process wsize=\"%d\"></process>\n", (int) (8 * sizeof (void *)));
+
+ ucontext_t ucp;
+ ucp.uc_stack.ss_sp = NULL;
+ ucp.uc_stack.ss_size = 0;
+ if (getcontext (&ucp) == 0)
+ {
+ (void) __collector_log_write ("<process stackbase=\"0x%lx\"></process>\n",
+ (unsigned long) ucp.uc_stack.ss_sp + ucp.uc_stack.ss_size);
+ }
+
+ (void) __collector_log_write ("<process>%s</process>\n",
+ origin == SP_ORIGIN_FORK ? "(fork)" : exp_progspec);
+ __collector_libthread_T1 = 0;
+}
+
+static void
+log_pause (void)
+{
+ if (log_initted)
+ log_enabled = 0;
+}
+
+static void
+log_resume (void)
+{
+ if (log_initted)
+ log_enabled = 1;
+}
+
+/* __collector_log_write -- write a line to the log file
+ * return value:
+ * 0 if OK
+ * 1 if error (in creating or extending the log file)
+ */
+int
+__collector_log_write (char *format, ...)
+{
+ char buf[4096];
+ va_list va;
+ int rc = 0;
+ static size_t loglen = 0;
+
+ va_start (va, format);
+ char *bufptr = buf;
+ int sz = __collector_xml_vsnprintf (bufptr, sizeof (buf), format, va);
+ int allocated_sz = 0;
+ va_end (va);
+ if (sz >= sizeof (buf))
+ {
+ /* Allocate a new buffer.
+ * We need this buffer only temporarily and locally.
+ * But don't use the thread stack
+ * since it already has buf
+ * and is unlikely to have additonal room for something even larger than buf.
+ */
+ sz += 1; /* add the terminating null byte */
+ bufptr = (char*) __collector_allocCSize (__collector_heap, sz, 0);
+ if (bufptr)
+ {
+ allocated_sz = sz;
+ va_start (va, format);
+ sz = __collector_xml_vsnprintf (bufptr, sz, format, va);
+ va_end (va);
+ }
+ }
+ int newlen = CALL_UTIL (strlen)(bufptr);
+ if (sz != newlen)
+ // no need to free bufptr if we're going to abort anyhow
+ abort ();
+ bufptr[newlen + 1] = 0;
+ loglen = loglen + newlen;
+ TprintfT (DBG_LT2, "__collector_log_write len=%ld, loglen=%ld %s",
+ (long) newlen, (long) loglen, bufptr);
+ if (log_enabled <= 0)
+ {
+#if 0
+ /* XXX suppress log_write messages with no log file open
+ * this is reached from SimApp dealing with the clock frequency, which it should
+ * not be doing. For now, don't write a message.
+ */
+ CALL_UTIL (fprintf)(stderr, "__collector_log_write COL_ERROR_LOG_OPEN: %s", buf);
+#endif
+ }
+ else
+ rc = __collector_write_string (log_hndl, bufptr, sz);
+ if (allocated_sz)
+ __collector_freeCSize (__collector_heap, (void *) bufptr, allocated_sz);
+ return rc;
+}
+
+static void
+log_close ()
+{
+ log_enabled = 0;
+ log_initted = 0;
+ __collector_delete_handle (log_hndl);
+ log_hndl = NULL;
+}
+
+/*============================================================*/
+/*
+ * Routines for handling the overview file
+ */
+static void
+ovw_open ()
+{
+ CALL_UTIL (strlcpy)(ovw_name, __collector_exp_dir_name, sizeof (ovw_name));
+ CALL_UTIL (strlcat)(ovw_name, "/", sizeof (ovw_name));
+ CALL_UTIL (strlcat)(ovw_name, SP_OVERVIEW_FILE, sizeof (ovw_name));
+ int fd = CALL_UTIL (open)(ovw_name, O_WRONLY | O_CREAT | O_TRUNC,
+ S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
+ if (fd < 0)
+ {
+ __collector_log_write ("<event kind=\"%s\" id=\"%d\" ec=\"%d\">%s</event>\n",
+ SP_JCMD_CERROR, COL_ERROR_OVWOPEN, errno, ovw_name);
+ return;
+ }
+ CALL_UTIL (close)(fd);
+ sample_mode = 1;
+}
+
+static __inline__ void
+timeval_to_timespec(struct timeval *tval, struct timespec *value)
+{
+ value->tv_nsec = tval->tv_usec * 1000;
+ value->tv_sec = tval->tv_sec;
+}
+
+/*
+ * Resource usage. /proc/<pid>/usage /proc/<pid>/lwp/<lwpid>/lwpusage
+ */
+typedef struct prusage
+{
+ id_t pr_lwpid; /* lwp id. 0: process or defunct */
+ int pr_count; /* number of contributing lwps */
+ timestruc_t pr_tstamp; /* current time stamp */
+ timestruc_t pr_create; /* process/lwp creation time stamp */
+ timestruc_t pr_term; /* process/lwp termination time stamp */
+ timestruc_t pr_rtime; /* total lwp real (elapsed) time */
+ timestruc_t pr_utime; /* user level cpu time */
+ timestruc_t pr_stime; /* system call cpu time */
+ timestruc_t pr_ttime; /* other system trap cpu time */
+ timestruc_t pr_tftime; /* text page fault sleep time */
+ timestruc_t pr_dftime; /* data page fault sleep time */
+ timestruc_t pr_kftime; /* kernel page fault sleep time */
+ timestruc_t pr_ltime; /* user lock wait sleep time */
+ timestruc_t pr_slptime; /* all other sleep time */
+ timestruc_t pr_wtime; /* wait-cpu (latency) time */
+ timestruc_t pr_stoptime; /* stopped time */
+ timestruc_t filltime[6]; /* filler for future expansion */
+ ulong_t pr_minf; /* minor page faults */
+ ulong_t pr_majf; /* major page faults */
+ ulong_t pr_nswap; /* swaps */
+ ulong_t pr_inblk; /* input blocks */
+ ulong_t pr_oublk; /* output blocks */
+ ulong_t pr_msnd; /* messages sent */
+ ulong_t pr_mrcv; /* messages received */
+ ulong_t pr_sigs; /* signals received */
+ ulong_t pr_vctx; /* voluntary context switches */
+ ulong_t pr_ictx; /* involuntary context switches */
+ ulong_t pr_sysc; /* system calls */
+ ulong_t pr_ioch; /* chars read and written */
+ ulong_t filler[10]; /* filler for future expansion */
+} prusage_t;
+
+static hrtime_t starttime = 0;
+
+static hrtime_t
+ovw_write ()
+{
+ if (sample_mode == 0)
+ return 0;
+ int fd;
+ int res;
+ struct prusage usage;
+ struct rusage rusage;
+ hrtime_t hrt, delta;
+
+ /* Fill in the prusage structure with info from getrusage() */
+ hrt = collector_interface.getHiResTime ();
+ if (starttime == 0)
+ starttime = hrt;
+ res = getrusage (RUSAGE_SELF, &rusage);
+ if (res != 0)
+ {
+ (void) __collector_log_write ("<event kind=\"%s\" id=\"%d\" ec=\"%d\">%s</event>\n",
+ SP_JCMD_CERROR, COL_ERROR_OVWREAD, errno, ovw_name);
+ return ( hrt);
+ }
+
+ CALL_UTIL (memset)(&usage, 0, sizeof (struct prusage));
+ usage.pr_lwpid = getpid ();
+ usage.pr_count = 1;
+ usage.pr_tstamp.tv_sec = hrt / NANOSEC;
+ usage.pr_tstamp.tv_nsec = hrt % NANOSEC;
+ usage.pr_create.tv_sec = starttime / NANOSEC;
+ usage.pr_create.tv_nsec = starttime % NANOSEC;
+ delta = hrt - starttime;
+ usage.pr_rtime.tv_sec = delta / NANOSEC;
+ usage.pr_rtime.tv_nsec = delta % NANOSEC;
+ timeval_to_timespec (&rusage.ru_utime, &usage.pr_utime);
+ timeval_to_timespec (&rusage.ru_stime, &usage.pr_stime);
+
+ /* make sure that user- and system cpu time are not negative */
+ if (ts2hrt (usage.pr_utime) < 0)
+ {
+ usage.pr_utime.tv_sec = 0;
+ usage.pr_utime.tv_nsec = 0;
+ }
+ if (ts2hrt (usage.pr_stime) < 0)
+ {
+ usage.pr_stime.tv_sec = 0;
+ usage.pr_stime.tv_nsec = 0;
+ }
+
+ /* fill in other fields */
+ usage.pr_minf = (ulong_t) rusage.ru_minflt;
+ usage.pr_majf = (ulong_t) rusage.ru_majflt;
+ usage.pr_nswap = (ulong_t) rusage.ru_nswap;
+ usage.pr_inblk = (ulong_t) rusage.ru_inblock;
+ usage.pr_oublk = (ulong_t) rusage.ru_oublock;
+ usage.pr_msnd = (ulong_t) rusage.ru_msgsnd;
+ usage.pr_mrcv = (ulong_t) rusage.ru_msgrcv;
+ usage.pr_sigs = (ulong_t) rusage.ru_nsignals;
+ usage.pr_vctx = (ulong_t) rusage.ru_nvcsw;
+ usage.pr_ictx = (ulong_t) rusage.ru_nivcsw;
+
+ fd = CALL_UTIL (open)(ovw_name, O_WRONLY | O_APPEND);
+ if (fd < 0)
+ {
+ __collector_log_write ("<event kind=\"%s\" id=\"%d\" ec=\"%d\">%s</event>\n",
+ SP_JCMD_CERROR, COL_ERROR_OVWOPEN, errno, ovw_name);
+ return ( ts2hrt (usage.pr_tstamp));
+ }
+
+ CALL_UTIL (lseek)(fd, 0, SEEK_END);
+ res = CALL_UTIL (write)(fd, &usage, sizeof (usage));
+ CALL_UTIL (close)(fd);
+ if (res != sizeof (usage))
+ __collector_log_write ("<event kind=\"%s\" id=\"%d\" ec=\"%d\">%s</event>\n",
+ SP_JCMD_CERROR, COL_ERROR_OVWWRITE, errno, ovw_name);
+ return (hrt);
+}
+
+void
+__collector_dlog (int tflag, int level, char *format, ...)
+{
+ if ((tflag & SP_DUMP_FLAG) == 0)
+ {
+ if (level > __collector_tracelevel)
+ return;
+ }
+ else if ((tflag & collector_debug_opt) == 0)
+ return;
+
+ /* In most cases this allocation should suffice */
+ int bufsz = CALL_UTIL (strlen)(format) + 128;
+ char *buf = (char*) alloca (bufsz);
+ char *p = buf;
+ int left = bufsz;
+ if ((tflag & SP_DUMP_NOHEADER) == 0)
+ {
+ p += CALL_UTIL (snprintf)(p, left, "P%d,L%02u,t%02lu",
+ (int) getpid (),
+ (unsigned int) __collector_lwp_self (),
+ __collector_no_threads ? 0 : __collector_thr_self ());
+ left = bufsz - (p - buf);
+ if (tflag)
+ {
+ hrtime_t ts = GETRELTIME ();
+ p += CALL_UTIL (snprintf)(p, left, " %u.%09u ", (unsigned) (ts / NANOSEC), (unsigned) (ts % NANOSEC));
+ }
+ else
+ p += CALL_UTIL (snprintf)(p, left, ": ");
+ left = bufsz - (p - buf);
+ }
+
+ va_list va;
+ va_start (va, format);
+ int nbufsz = CALL_UTIL (vsnprintf)(p, left, format, va);
+ va_end (va);
+
+ if (nbufsz >= left)
+ {
+ /* Allocate a new buffer */
+ nbufsz += 1; /* add the terminating null byte */
+ char *nbuf = (char*) alloca (nbufsz + (p - buf));
+ __collector_memcpy (nbuf, buf, p - buf);
+ p = nbuf + (p - buf);
+
+ va_start (va, format);
+ nbufsz = CALL_UTIL (vsnprintf)(p, nbufsz, format, va);
+ va_end (va);
+ buf = nbuf;
+ }
+ CALL_UTIL (write)(2, buf, CALL_UTIL (strlen)(buf));
+}
+
+/*============================================================*/
+#if ! ARCH(SPARC) /* !sparc-Linux */
+/*
+ * Routines for handling _exit and _Exit
+ */
+/*------------------------------------------------------------- _exit */
+
+#define CALL_REAL(x) (*(int(*)())__real_##x)
+#define NULL_PTR(x) ( __real_##x == NULL )
+
+static void *__real__exit = NULL; /* libc only: _exit */
+static void *__real__Exit = NULL; /* libc only: _Exit */
+void _exit () __attribute__ ((weak, alias ("__collector_exit")));
+void _Exit () __attribute__ ((weak, alias ("__collector_Exit")));
+
+void
+__collector_exit (int status)
+{
+ if (NULL_PTR (_exit))
+ {
+ __real__exit = dlsym (RTLD_NEXT, "_exit");
+ if (__real__exit == NULL)
+ __real__exit = dlsym (RTLD_DEFAULT, "_exit");
+ }
+ TprintfT (DBG_LT1, "__collector_exit() interposing @0x%p __real__exit\n", __real__exit);
+ __collector_terminate_expt ();
+ TprintfT (DBG_LT1, "__collector_exit(): experiment terminated\n");
+ CALL_REAL (_exit)(status); // this will exit the process
+}
+
+void
+__collector_Exit (int status)
+{
+ if (NULL_PTR (_Exit))
+ {
+ __real__Exit = dlsym (RTLD_NEXT, "_Exit");
+ if (__real__Exit == NULL)
+ __real__Exit = dlsym (RTLD_DEFAULT, "_exit");
+ }
+ TprintfT (DBG_LT1, "__collector_Exit() interposing @0x%p __real__Exit\n", __real__Exit);
+ __collector_terminate_expt ();
+ TprintfT (DBG_LT1, "__collector_Exit(): experiment terminated\n");
+ CALL_REAL (_Exit)(status); // this will exit the process
+}
+#endif /* !sparc-Linux */
diff --git a/gprofng/libcollector/collector.h b/gprofng/libcollector/collector.h
new file mode 100644
index 00000000000..c54568d891c
--- /dev/null
+++ b/gprofng/libcollector/collector.h
@@ -0,0 +1,236 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _COLLECTOR_H
+#define _COLLECTOR_H
+
+#include <ucontext.h>
+#include <signal.h>
+
+#include "gp-defs.h"
+#include "data_pckts.h"
+#include "libcol_util.h"
+#include "collector_module.h"
+
+#define GETRELTIME() (__collector_gethrtime() - __collector_start_time)
+
+extern hrtime_t __collector_start_time;
+
+/* ========================================================== */
+/* ------- internal function prototypes ----------------- */
+/* These will not be exported from libcollector.so */
+struct DataHandle;
+struct Heap;
+extern struct DataHandle *__collector_create_handle (char*);
+extern void __collector_delete_handle (struct DataHandle*);
+extern int __collector_write_record (struct DataHandle*, Common_packet*);
+extern int __collector_write_packet (struct DataHandle*, CM_Packet*);
+extern int __collector_write_string (struct DataHandle*, char*, int);
+extern FrameInfo __collector_get_frame_info (hrtime_t, int, void *);
+extern FrameInfo __collector_getUID (CM_Array *arg, FrameInfo uid);
+extern int __collector_getStackTrace (void *buf, int size, void *bptr, void *eptr, void *arg);
+extern void *__collector_ext_return_address (unsigned level);
+extern void __collector_mmap_fork_child_cleanup ();
+
+extern int __collector_ext_mmap_install (int);
+extern int __collector_ext_mmap_deinstall (int);
+extern int __collector_ext_update_map_segments (void);
+extern int __collector_check_segment (unsigned long addr,
+ unsigned long *base,
+ unsigned long *end, int maxnretries);
+extern int __collector_check_readable_segment (unsigned long addr,
+ unsigned long *base,
+ unsigned long *end, int maxnretries);
+extern int __collector_ext_line_init (int * pfollow_this_experiment,
+ const char * progspec,
+ const char *progname);
+extern int __collector_ext_line_install (char *, const char *);
+extern void __collector_ext_line_close ();
+extern void __collector_ext_unwind_init (int);
+extern void __collector_ext_unwind_close ();
+extern int __collector_ext_jstack_unwind (char*, int, ucontext_t *);
+extern void __collector_ext_dispatcher_fork_child_cleanup ();
+extern void __collector_ext_unwind_key_init (int isPthread, void * stack);
+extern void __collector_ext_dispatcher_tsd_create_key ();
+extern void __collector_ext_dispatcher_thread_timer_suspend ();
+extern int __collector_ext_dispatcher_thread_timer_resume ();
+extern int __collector_ext_dispatcher_install ();
+extern void __collector_ext_dispatcher_suspend ();
+extern void __collector_ext_dispatcher_restart ();
+extern void __collector_ext_dispatcher_deinstall ();
+extern void __collector_ext_usage_sample (Smpl_type type, char *name);
+extern void __collector_ext_profile_handler (siginfo_t *, ucontext_t *);
+extern int __collector_ext_clone_pthread (int (*fn)(void *), void *child_stack, int flags, void *arg,
+ va_list va /* pid_t *ptid, struct user_desc *tlspid_t *" ctid" */);
+
+/* D-light related functions */
+extern int __collector_sigprof_install ();
+extern int __collector_ext_hwc_active ();
+extern void __collector_ext_hwc_check (siginfo_t *, ucontext_t *);
+extern int __collector_ext_hwc_lwp_init ();
+extern void __collector_ext_hwc_lwp_fini ();
+extern int __collector_ext_hwc_lwp_suspend ();
+extern int __collector_ext_hwc_lwp_resume ();
+extern int (*__collector_VM_ReadByteInstruction)(unsigned char *);
+extern int (*__collector_omp_stack_trace)(char*, int, hrtime_t, void*);
+extern hrtime_t (*__collector_gethrtime)();
+extern int (*__collector_mpi_stack_trace)(char*, int, hrtime_t);
+extern int __collector_open_experiment (const char *exp, const char *par, sp_origin_t origin);
+extern void __collector_suspend_experiment (char *why);
+extern void __collector_resume_experiment ();
+extern void __collector_clean_state ();
+extern void __collector_close_experiment ();
+extern void __collector_terminate_expt ();
+extern void __collector_terminate_hook ();
+extern void __collector_sample (char *name);
+extern void __collector_pause ();
+extern void __collector_pause_m ();
+extern void __collector_resume ();
+extern int collector_sigemt_sigaction (const struct sigaction*,
+ struct sigaction*);
+extern int collector_sigchld_sigaction (const struct sigaction*,
+ struct sigaction*);
+
+extern int
+__collector_log_write (char *format, ...) __attribute__ ((format (printf, 1, 2)));
+
+/* ------- internal global data ----------------- */
+/* These will not be exported from libcollector.so */
+extern struct Heap *__collector_heap;
+
+/* experiment state flag */
+typedef enum
+{
+ EXP_INIT, EXP_OPEN, EXP_PAUSED, EXP_CLOSED
+} sp_state_t;
+extern volatile sp_state_t __collector_expstate;
+
+/* global flag, defines whether target is threaded or not
+ * if set, put _lwp_self() for thread id instead of thr_self()
+ * in output packets; should be set before any data packets
+ * are written, i.e., before signal handlers are installed.
+ */
+extern int __collector_no_threads;
+extern int __collector_libthread_T1; /* T1 or not T1 */
+extern int __collector_sample_sig; /* set to signal used to trigger a sample */
+extern int __collector_sample_sig_warn; /* if 1, warning given on target use */
+extern int __collector_pause_sig; /* set to signal used to toggle pause-resume */
+extern int __collector_pause_sig_warn; /* if 1, warning given on target use */
+extern hrtime_t __collector_delay_start;
+extern int __collector_exp_active;
+
+/* global hrtime_t for next periodic sample */
+extern hrtime_t __collector_next_sample;
+extern int __collector_sample_period;
+
+/* global hrtime_t for experiment termination (-t) */
+extern hrtime_t __collector_terminate_time;
+extern int __collector_terminate_duration;
+extern char __collector_exp_dir_name[];
+extern int __collector_java_mode;
+extern int __collector_java_asyncgetcalltrace_loaded;
+extern int __collector_jprofile_start_attach ();
+
+/* --------- information controlling debug tracing ------------- */
+
+/* global flag, defines level of trace information */
+extern void __collector_dlog (int, int, char *, ...) __attribute__ ((format (printf, 3, 4)));
+
+#define STR(x) ((x) ? (x) : "NULL")
+
+// To set collector_debug_opt use:
+// SP_COLLECTOR_DEBUG=4 ; export SP_COLLECTOR_DEBUG ; collect ...
+enum
+{
+ SP_DUMP_TIME = 1,
+ SP_DUMP_FLAG = 2,
+ SP_DUMP_JAVA = 4,
+ SP_DUMP_NOHEADER = 8,
+ SP_DUMP_UNWIND = 16,
+ SP_DUMP_STACK = 32,
+};
+
+#ifndef DEBUG
+#define DprintfT(flag, ...)
+#define tprintf(...)
+#define Tprintf(...)
+#define TprintfT(...)
+
+#else
+#define DprintfT(flag, ...) __collector_dlog(SP_DUMP_FLAG | (flag), 0, __VA_ARGS__ )
+#define tprintf(...) __collector_dlog( SP_DUMP_NOHEADER, __VA_ARGS__ )
+#define Tprintf(...) __collector_dlog( 0, __VA_ARGS__ )
+#define TprintfT(...) __collector_dlog( SP_DUMP_TIME, __VA_ARGS__ )
+
+#endif /* DEBUG */
+
+// To find the glibc version:
+// objdump -T /lib*/*so /lib*/*/*.so | grep popen
+// IMPORTANT: The GLIBC_* versions below must match those in mapfile.<variant>
+ #if ARCH(Aarch64)
+ #define SYS_LIBC_NAME "libc.so.6"
+ #define SYS_PTHREAD_CREATE_VERSION "GLIBC_2.17"
+ #define SYS_DLOPEN_VERSION "GLIBC_2.17"
+ #define SYS_POPEN_VERSION "GLIBC_2.17"
+ #define SYS_FOPEN_X_VERSION "GLIBC_2.17"
+ #define SYS_FGETPOS_X_VERSION "GLIBC_2.17"
+
+#elif ARCH(Intel)
+ #define SYS_LIBC_NAME "libc.so.6"
+ #define SYS_POSIX_SPAWN_VERSION "GLIBC_2.15"
+ #if WSIZE(32)
+ #define SYS_PTHREAD_CREATE_VERSION "GLIBC_2.1"
+ #define SYS_DLOPEN_VERSION "GLIBC_2.1"
+ #define SYS_POPEN_VERSION "GLIBC_2.1"
+ #define SYS_TIMER_X_VERSION "GLIBC_2.2"
+ #define SYS_FOPEN_X_VERSION "GLIBC_2.1"
+ #define SYS_FGETPOS_X_VERSION "GLIBC_2.2"
+ #define SYS_FGETPOS64_X_VERSION "GLIBC_2.2"
+ #define SYS_OPEN64_X_VERSION "GLIBC_2.2"
+ #define SYS_PREAD_X_VERSION "GLIBC_2.2"
+ #define SYS_PWRITE_X_VERSION "GLIBC_2.2"
+ #define SYS_PWRITE64_X_VERSION "GLIBC_2.2"
+ #else /* WSIZE(64) */
+ #define SYS_PTHREAD_CREATE_VERSION "GLIBC_2.2.5"
+ #define SYS_DLOPEN_VERSION "GLIBC_2.2.5"
+ #define SYS_POPEN_VERSION "GLIBC_2.2.5"
+ #define SYS_TIMER_X_VERSION "GLIBC_2.3.3"
+ #define SYS_FOPEN_X_VERSION "GLIBC_2.2.5"
+ #define SYS_FGETPOS_X_VERSION "GLIBC_2.2.5"
+ #endif
+
+ #elif ARCH(SPARC)
+ #define SYS_LIBC_NAME "libc.so.6"
+ #define SYS_DLOPEN_VERSION "GLIBC_2.1"
+ #if WSIZE(32)
+ #define SYS_PTHREAD_CREATE_VERSION "GLIBC_2.1"
+ #define SYS_POPEN_VERSION "GLIBC_2.1"
+ #define SYS_FOPEN_X_VERSION "GLIBC_2.1"
+ #define SYS_FGETPOS_X_VERSION "GLIBC_2.2"
+ #else /* WSIZE(64) */
+ #define SYS_PTHREAD_CREATE_VERSION "GLIBC_2.2"
+ #define SYS_POPEN_VERSION "GLIBC_2.2"
+ #define SYS_TIMER_X_VERSION "GLIBC_2.3.3"
+ #define SYS_FOPEN_X_VERSION "GLIBC_2.2"
+ #define SYS_FGETPOS_X_VERSION "GLIBC_2.2"
+ #endif
+ #endif
+
+#endif
diff --git a/gprofng/libcollector/collectorAPI.c b/gprofng/libcollector/collectorAPI.c
new file mode 100644
index 00000000000..8c9b92050e1
--- /dev/null
+++ b/gprofng/libcollector/collectorAPI.c
@@ -0,0 +1,140 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+/* C and Fortran stubs for collector API */
+
+#include "config.h"
+#include <dlfcn.h>
+#include "gp-defs.h"
+#include "collectorAPI.h"
+#include "gp-experiment.h"
+
+static void *__real_collector_sample = NULL;
+static void *__real_collector_pause = NULL;
+static void *__real_collector_resume = NULL;
+static void *__real_collector_terminate_expt = NULL;
+static void *__real_collector_func_load = NULL;
+static void *__real_collector_func_unload = NULL;
+
+#define INIT_API if (init_API == 0) collectorAPI_initAPI()
+#define NULL_PTR(x) (__real_##x == NULL)
+#define CALL_REAL(x) (*(void(*)())__real_##x)
+#define CALL_IF_REAL(x) INIT_API; if (!NULL_PTR(x)) CALL_REAL(x)
+
+static int init_API = 0;
+
+void
+collectorAPI_initAPI (void)
+{
+ void *libcollector = dlopen (SP_LIBCOLLECTOR_NAME, RTLD_NOLOAD);
+ if (libcollector == NULL)
+ libcollector = RTLD_DEFAULT;
+ __real_collector_sample = dlsym (libcollector, "__collector_sample");
+ __real_collector_pause = dlsym (libcollector, "__collector_pause");
+ __real_collector_resume = dlsym (libcollector, "__collector_resume");
+ __real_collector_terminate_expt = dlsym (libcollector, "__collector_terminate_expt");
+ __real_collector_func_load = dlsym (libcollector, "__collector_func_load");
+ __real_collector_func_unload = dlsym (libcollector, "__collector_func_unload");
+ init_API = 1;
+}
+
+/* initialization -- init section routine */
+static void collectorAPI_init () __attribute__ ((constructor));
+
+static void
+collectorAPI_init (void)
+{
+ collectorAPI_initAPI ();
+}
+
+/* C API */
+void
+collector_pause (void)
+{
+ CALL_IF_REAL (collector_pause)();
+}
+
+void
+collector_resume (void)
+{
+ CALL_IF_REAL (collector_resume)();
+}
+
+void
+collector_sample (const char *name)
+{
+ CALL_IF_REAL (collector_sample)(name);
+}
+
+void
+collector_terminate_expt (void)
+{
+ CALL_IF_REAL (collector_terminate_expt)();
+}
+
+void
+collector_func_load (const char *name, const char *alias, const char *sourcename,
+ void *vaddr, int size, int lntsize, Lineno *lntable)
+{
+ CALL_IF_REAL (collector_func_load)(name, alias, sourcename,
+ vaddr, size, lntsize, lntable);
+}
+
+void
+collector_func_unload (void *vaddr)
+{
+ CALL_IF_REAL (collector_func_unload)(vaddr);
+}
+
+/* Fortran API */
+void
+collector_pause_ (void)
+{
+ CALL_IF_REAL (collector_pause)();
+}
+
+void
+collector_resume_ (void)
+{
+ CALL_IF_REAL (collector_resume)();
+}
+
+void
+collector_terminate_expt_ (void)
+{
+ CALL_IF_REAL (collector_terminate_expt)();
+}
+
+void
+collector_sample_ (char *name, long name_length)
+{
+ INIT_API;
+ if (!NULL_PTR (collector_sample))
+ {
+ char name_string[256];
+ long length = sizeof (name_string) - 1;
+ if (name_length < length)
+ length = name_length;
+ for (long i = 0; i < length; i++)
+ name_string[i] = name[i];
+ name_string[length] = '\0';
+ CALL_REAL (collector_sample)(name_string);
+ }
+}
diff --git a/gprofng/libcollector/configure b/gprofng/libcollector/configure
new file mode 100755
index 00000000000..0afa31d0819
--- /dev/null
+++ b/gprofng/libcollector/configure
@@ -0,0 +1,18191 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.69 for gprofng 2.38.50.
+#
+#
+# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
+#
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='print -r --'
+ as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='printf %s\n'
+ as_echo_n='printf %s'
+else
+ if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+ as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+ as_echo_n='/usr/ucb/echo -n'
+ else
+ as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+ as_echo_n_body='eval
+ arg=$1;
+ case $arg in #(
+ *"$as_nl"*)
+ expr "X$arg" : "X\\(.*\\)$as_nl";
+ arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+ esac;
+ expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+ '
+ export as_echo_n_body
+ as_echo_n='sh -c $as_echo_n_body as_echo'
+ fi
+ export as_echo_body
+ as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" "" $as_nl"
+
+# Find who we are. Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there. '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+# Use a proper internal environment variable to ensure we don't fall
+ # into an infinite loop, continuously re-executing ourselves.
+ if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
+ _as_can_reexec=no; export _as_can_reexec;
+ # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+ *v*x* | *x*v* ) as_opts=-vx ;;
+ *v* ) as_opts=-v ;;
+ *x* ) as_opts=-x ;;
+ * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+as_fn_exit 255
+ fi
+ # We don't want this to propagate to other subprocesses.
+ { _as_can_reexec=; unset _as_can_reexec;}
+if test "x$CONFIG_SHELL" = x; then
+ as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '\${1+\"\$@\"}'='\"\$@\"'
+ setopt NO_GLOB_SUBST
+else
+ case \`(set -o) 2>/dev/null\` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+"
+ as_required="as_fn_return () { (exit \$1); }
+as_fn_success () { as_fn_return 0; }
+as_fn_failure () { as_fn_return 1; }
+as_fn_ret_success () { return 0; }
+as_fn_ret_failure () { return 1; }
+
+exitcode=0
+as_fn_success || { exitcode=1; echo as_fn_success failed.; }
+as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
+as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
+as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
+if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
+
+else
+ exitcode=1; echo positional parameters were not saved.
+fi
+test x\$exitcode = x0 || exit 1
+test -x / || exit 1"
+ as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
+ as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
+ eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
+ test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
+test \$(( 1 + 1 )) = 2 || exit 1
+
+ test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || (
+ ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
+ ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
+ PATH=/empty FPATH=/empty; export PATH FPATH
+ test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\
+ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1"
+ if (eval "$as_required") 2>/dev/null; then :
+ as_have_required=yes
+else
+ as_have_required=no
+fi
+ if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
+
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ as_found=:
+ case $as_dir in #(
+ /*)
+ for as_base in sh bash ksh sh5; do
+ # Try only shells that exist, to save several forks.
+ as_shell=$as_dir/$as_base
+ if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+ { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ CONFIG_SHELL=$as_shell as_have_required=yes
+ if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ break 2
+fi
+fi
+ done;;
+ esac
+ as_found=false
+done
+$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+ { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
+ CONFIG_SHELL=$SHELL as_have_required=yes
+fi; }
+IFS=$as_save_IFS
+
+
+ if test "x$CONFIG_SHELL" != x; then :
+ export CONFIG_SHELL
+ # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+ *v*x* | *x*v* ) as_opts=-vx ;;
+ *v* ) as_opts=-v ;;
+ *x* ) as_opts=-x ;;
+ * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+exit 255
+fi
+
+ if test x$as_have_required = xno; then :
+ $as_echo "$0: This script requires a shell more modern than all"
+ $as_echo "$0: the shells that I found on your system."
+ if test x${ZSH_VERSION+set} = xset ; then
+ $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+ $as_echo "$0: be upgraded to zsh 4.3.4 or later."
+ else
+ $as_echo "$0: Please tell bug-autoconf@gnu.org about your system,
+$0: including any error possibly output before this
+$0: message. Then install a modern shell, or manually run
+$0: the script under such a shell if you do have one."
+ fi
+ exit 1
+fi
+fi
+fi
+SHELL=${CONFIG_SHELL-/bin/sh}
+export SHELL
+# Unset more variables known to interfere with behavior of common tools.
+CLICOLOR_FORCE= GREP_OPTIONS=
+unset CLICOLOR_FORCE GREP_OPTIONS
+
+## --------------------- ##
+## M4sh Shell Functions. ##
+## --------------------- ##
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+ { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+ return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+ set +e
+ as_fn_set_status $1
+ exit $1
+} # as_fn_exit
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || eval $as_mkdir_p || {
+ as_dirs=
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
+ done
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+ test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+ eval 'as_fn_append ()
+ {
+ eval $1+=\$2
+ }'
+else
+ as_fn_append ()
+ {
+ eval $1=\$$1\$2
+ }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+ eval 'as_fn_arith ()
+ {
+ as_val=$(( $* ))
+ }'
+else
+ as_fn_arith ()
+ {
+ as_val=`expr "$@" || test $? -eq 1`
+ }
+fi # as_fn_arith
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+ as_status=$1; test $as_status -eq 0 && as_status=1
+ if test "$4"; then
+ as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ fi
+ $as_echo "$as_me: error: $2" >&2
+ as_fn_exit $as_status
+} # as_fn_error
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+
+ as_lineno_1=$LINENO as_lineno_1a=$LINENO
+ as_lineno_2=$LINENO as_lineno_2a=$LINENO
+ eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
+ test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
+ # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
+ sed -n '
+ p
+ /[$]LINENO/=
+ ' <$as_myself |
+ sed '
+ s/[$]LINENO.*/&-/
+ t lineno
+ b
+ :lineno
+ N
+ :loop
+ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+ t loop
+ s/-\n.*//
+ ' >$as_me.lineno &&
+ chmod +x "$as_me.lineno" ||
+ { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+
+ # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
+ # already done that, so ensure we don't try to do so again and fall
+ # in an infinite loop. This has already happened in practice.
+ _as_can_reexec=no; export _as_can_reexec
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensitive to this).
+ . "./$as_me.lineno"
+ # Exit status is that of the last command.
+ exit
+}
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+ case `echo 'xy\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ xy) ECHO_C='\c';;
+ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
+ ECHO_T=' ';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -pR'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -pR'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -pR'
+ fi
+else
+ as_ln_s='cp -pR'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p='mkdir -p "$as_dir"'
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+
+test -n "$DJDIR" || exec 7<&0 </dev/null
+exec 6>&1
+
+# Name of the host.
+# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_clean_files=
+ac_config_libobj_dir=.
+LIBOBJS=
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+
+# Identity of this package.
+PACKAGE_NAME='gprofng'
+PACKAGE_TARNAME='gprofng'
+PACKAGE_VERSION='2.38.50'
+PACKAGE_STRING='gprofng 2.38.50'
+PACKAGE_BUGREPORT=''
+PACKAGE_URL=''
+
+ac_unique_file="libcol_util.c"
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# ifdef HAVE_STDLIB_H
+# include <stdlib.h>
+# endif
+#endif
+#ifdef HAVE_STRING_H
+# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
+# include <memory.h>
+# endif
+# include <string.h>
+#endif
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#ifdef HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+ac_subst_vars='am__EXEEXT_FALSE
+am__EXEEXT_TRUE
+LTLIBOBJS
+LIBOBJS
+GPROFNG_NO_NONNULL_COMPARE_CFLAGS
+GPROFNG_VARIANT
+CXXCPP
+OTOOL64
+OTOOL
+LIPO
+NMEDIT
+DSYMUTIL
+OBJDUMP
+LN_S
+NM
+ac_ct_DUMPBIN
+DUMPBIN
+LD
+FGREP
+SED
+LIBTOOL
+ac_ct_AR
+AR
+RANLIB
+am__fastdepCXX_FALSE
+am__fastdepCXX_TRUE
+CXXDEPMODE
+ac_ct_CXX
+CXXFLAGS
+CXX
+EGREP
+GREP
+CPP
+am__fastdepCC_FALSE
+am__fastdepCC_TRUE
+CCDEPMODE
+am__nodep
+AMDEPBACKSLASH
+AMDEP_FALSE
+AMDEP_TRUE
+am__quote
+am__include
+DEPDIR
+OBJEXT
+EXEEXT
+ac_ct_CC
+CPPFLAGS
+LDFLAGS
+CFLAGS
+CC
+MAINT
+MAINTAINER_MODE_FALSE
+MAINTAINER_MODE_TRUE
+AM_BACKSLASH
+AM_DEFAULT_VERBOSITY
+AM_DEFAULT_V
+AM_V
+am__untar
+am__tar
+AMTAR
+am__leading_dot
+SET_MAKE
+AWK
+mkdir_p
+MKDIR_P
+INSTALL_STRIP_PROGRAM
+STRIP
+install_sh
+MAKEINFO
+AUTOHEADER
+AUTOMAKE
+AUTOCONF
+ACLOCAL
+VERSION
+PACKAGE
+CYGPATH_W
+am__isrc
+INSTALL_DATA
+INSTALL_SCRIPT
+INSTALL_PROGRAM
+target_os
+target_vendor
+target_cpu
+target
+host_os
+host_vendor
+host_cpu
+host
+build_os
+build_vendor
+build_cpu
+build
+target_alias
+host_alias
+build_alias
+LIBS
+ECHO_T
+ECHO_N
+ECHO_C
+DEFS
+mandir
+localedir
+libdir
+psdir
+pdfdir
+dvidir
+htmldir
+infodir
+docdir
+oldincludedir
+includedir
+localstatedir
+sharedstatedir
+sysconfdir
+datadir
+datarootdir
+libexecdir
+sbindir
+bindir
+program_transform_name
+prefix
+exec_prefix
+PACKAGE_URL
+PACKAGE_BUGREPORT
+PACKAGE_STRING
+PACKAGE_VERSION
+PACKAGE_TARNAME
+PACKAGE_NAME
+PATH_SEPARATOR
+SHELL'
+ac_subst_files=''
+ac_user_opts='
+enable_option_checking
+enable_silent_rules
+enable_maintainer_mode
+enable_dependency_tracking
+enable_shared
+enable_static
+with_pic
+enable_fast_install
+with_gnu_ld
+enable_libtool_lock
+'
+ ac_precious_vars='build_alias
+host_alias
+target_alias
+CC
+CFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS
+CPP
+CXX
+CXXFLAGS
+CCC
+CXXCPP'
+
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+ac_unrecognized_opts=
+ac_unrecognized_sep=
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+# (The list follows the same order as the GNU Coding Standards.)
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
+infodir='${datarootdir}/info'
+htmldir='${docdir}'
+dvidir='${docdir}'
+pdfdir='${docdir}'
+psdir='${docdir}'
+libdir='${exec_prefix}/lib'
+localedir='${datarootdir}/locale'
+mandir='${datarootdir}/man'
+
+ac_prev=
+ac_dashdash=
+for ac_option
+do
+ # If the previous option needs an argument, assign it.
+ if test -n "$ac_prev"; then
+ eval $ac_prev=\$ac_option
+ ac_prev=
+ continue
+ fi
+
+ case $ac_option in
+ *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+ *=) ac_optarg= ;;
+ *) ac_optarg=yes ;;
+ esac
+
+ # Accept the important Cygnus configure options, so we can diagnose typos.
+
+ case $ac_dashdash$ac_option in
+ --)
+ ac_dashdash=yes ;;
+
+ -bindir | --bindir | --bindi | --bind | --bin | --bi)
+ ac_prev=bindir ;;
+ -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+ bindir=$ac_optarg ;;
+
+ -build | --build | --buil | --bui | --bu)
+ ac_prev=build_alias ;;
+ -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+ build_alias=$ac_optarg ;;
+
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ ac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+ cache_file=$ac_optarg ;;
+
+ --config-cache | -C)
+ cache_file=config.cache ;;
+
+ -datadir | --datadir | --datadi | --datad)
+ ac_prev=datadir ;;
+ -datadir=* | --datadir=* | --datadi=* | --datad=*)
+ datadir=$ac_optarg ;;
+
+ -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
+ | --dataroo | --dataro | --datar)
+ ac_prev=datarootdir ;;
+ -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+ datarootdir=$ac_optarg ;;
+
+ -disable-* | --disable-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid feature name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"enable_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval enable_$ac_useropt=no ;;
+
+ -docdir | --docdir | --docdi | --doc | --do)
+ ac_prev=docdir ;;
+ -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
+ docdir=$ac_optarg ;;
+
+ -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
+ ac_prev=dvidir ;;
+ -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+ dvidir=$ac_optarg ;;
+
+ -enable-* | --enable-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid feature name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"enable_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval enable_$ac_useropt=\$ac_optarg ;;
+
+ -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+ | --exec | --exe | --ex)
+ ac_prev=exec_prefix ;;
+ -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+ | --exec=* | --exe=* | --ex=*)
+ exec_prefix=$ac_optarg ;;
+
+ -gas | --gas | --ga | --g)
+ # Obsolete; use --with-gas.
+ with_gas=yes ;;
+
+ -help | --help | --hel | --he | -h)
+ ac_init_help=long ;;
+ -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+ ac_init_help=recursive ;;
+ -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+ ac_init_help=short ;;
+
+ -host | --host | --hos | --ho)
+ ac_prev=host_alias ;;
+ -host=* | --host=* | --hos=* | --ho=*)
+ host_alias=$ac_optarg ;;
+
+ -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
+ ac_prev=htmldir ;;
+ -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
+ | --ht=*)
+ htmldir=$ac_optarg ;;
+
+ -includedir | --includedir | --includedi | --included | --include \
+ | --includ | --inclu | --incl | --inc)
+ ac_prev=includedir ;;
+ -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+ | --includ=* | --inclu=* | --incl=* | --inc=*)
+ includedir=$ac_optarg ;;
+
+ -infodir | --infodir | --infodi | --infod | --info | --inf)
+ ac_prev=infodir ;;
+ -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+ infodir=$ac_optarg ;;
+
+ -libdir | --libdir | --libdi | --libd)
+ ac_prev=libdir ;;
+ -libdir=* | --libdir=* | --libdi=* | --libd=*)
+ libdir=$ac_optarg ;;
+
+ -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+ | --libexe | --libex | --libe)
+ ac_prev=libexecdir ;;
+ -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+ | --libexe=* | --libex=* | --libe=*)
+ libexecdir=$ac_optarg ;;
+
+ -localedir | --localedir | --localedi | --localed | --locale)
+ ac_prev=localedir ;;
+ -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
+ localedir=$ac_optarg ;;
+
+ -localstatedir | --localstatedir | --localstatedi | --localstated \
+ | --localstate | --localstat | --localsta | --localst | --locals)
+ ac_prev=localstatedir ;;
+ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
+ localstatedir=$ac_optarg ;;
+
+ -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+ ac_prev=mandir ;;
+ -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+ mandir=$ac_optarg ;;
+
+ -nfp | --nfp | --nf)
+ # Obsolete; use --without-fp.
+ with_fp=no ;;
+
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c | -n)
+ no_create=yes ;;
+
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+ no_recursion=yes ;;
+
+ -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+ | --oldin | --oldi | --old | --ol | --o)
+ ac_prev=oldincludedir ;;
+ -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+ oldincludedir=$ac_optarg ;;
+
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ ac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ prefix=$ac_optarg ;;
+
+ -program-prefix | --program-prefix | --program-prefi | --program-pref \
+ | --program-pre | --program-pr | --program-p)
+ ac_prev=program_prefix ;;
+ -program-prefix=* | --program-prefix=* | --program-prefi=* \
+ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+ program_prefix=$ac_optarg ;;
+
+ -program-suffix | --program-suffix | --program-suffi | --program-suff \
+ | --program-suf | --program-su | --program-s)
+ ac_prev=program_suffix ;;
+ -program-suffix=* | --program-suffix=* | --program-suffi=* \
+ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+ program_suffix=$ac_optarg ;;
+
+ -program-transform-name | --program-transform-name \
+ | --program-transform-nam | --program-transform-na \
+ | --program-transform-n | --program-transform- \
+ | --program-transform | --program-transfor \
+ | --program-transfo | --program-transf \
+ | --program-trans | --program-tran \
+ | --progr-tra | --program-tr | --program-t)
+ ac_prev=program_transform_name ;;
+ -program-transform-name=* | --program-transform-name=* \
+ | --program-transform-nam=* | --program-transform-na=* \
+ | --program-transform-n=* | --program-transform-=* \
+ | --program-transform=* | --program-transfor=* \
+ | --program-transfo=* | --program-transf=* \
+ | --program-trans=* | --program-tran=* \
+ | --progr-tra=* | --program-tr=* | --program-t=*)
+ program_transform_name=$ac_optarg ;;
+
+ -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
+ ac_prev=pdfdir ;;
+ -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
+ pdfdir=$ac_optarg ;;
+
+ -psdir | --psdir | --psdi | --psd | --ps)
+ ac_prev=psdir ;;
+ -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
+ psdir=$ac_optarg ;;
+
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ silent=yes ;;
+
+ -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+ ac_prev=sbindir ;;
+ -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+ | --sbi=* | --sb=*)
+ sbindir=$ac_optarg ;;
+
+ -sharedstatedir | --sharedstatedir | --sharedstatedi \
+ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+ | --sharedst | --shareds | --shared | --share | --shar \
+ | --sha | --sh)
+ ac_prev=sharedstatedir ;;
+ -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+ | --sha=* | --sh=*)
+ sharedstatedir=$ac_optarg ;;
+
+ -site | --site | --sit)
+ ac_prev=site ;;
+ -site=* | --site=* | --sit=*)
+ site=$ac_optarg ;;
+
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ srcdir=$ac_optarg ;;
+
+ -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+ | --syscon | --sysco | --sysc | --sys | --sy)
+ ac_prev=sysconfdir ;;
+ -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+ sysconfdir=$ac_optarg ;;
+
+ -target | --target | --targe | --targ | --tar | --ta | --t)
+ ac_prev=target_alias ;;
+ -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+ target_alias=$ac_optarg ;;
+
+ -v | -verbose | --verbose | --verbos | --verbo | --verb)
+ verbose=yes ;;
+
+ -version | --version | --versio | --versi | --vers | -V)
+ ac_init_version=: ;;
+
+ -with-* | --with-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid package name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"with_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval with_$ac_useropt=\$ac_optarg ;;
+
+ -without-* | --without-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid package name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"with_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval with_$ac_useropt=no ;;
+
+ --x)
+ # Obsolete; use --with-x.
+ with_x=yes ;;
+
+ -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+ | --x-incl | --x-inc | --x-in | --x-i)
+ ac_prev=x_includes ;;
+ -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+ x_includes=$ac_optarg ;;
+
+ -x-libraries | --x-libraries | --x-librarie | --x-librari \
+ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+ ac_prev=x_libraries ;;
+ -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+ x_libraries=$ac_optarg ;;
+
+ -*) as_fn_error $? "unrecognized option: \`$ac_option'
+Try \`$0 --help' for more information"
+ ;;
+
+ *=*)
+ ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+ # Reject names that are not valid shell variable names.
+ case $ac_envvar in #(
+ '' | [0-9]* | *[!_$as_cr_alnum]* )
+ as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
+ esac
+ eval $ac_envvar=\$ac_optarg
+ export $ac_envvar ;;
+
+ *)
+ # FIXME: should be removed in autoconf 3.0.
+ $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+ expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+ $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+ : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
+ ;;
+
+ esac
+done
+
+if test -n "$ac_prev"; then
+ ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+ as_fn_error $? "missing argument to $ac_option"
+fi
+
+if test -n "$ac_unrecognized_opts"; then
+ case $enable_option_checking in
+ no) ;;
+ fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
+ *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+ esac
+fi
+
+# Check all directory arguments for consistency.
+for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
+ datadir sysconfdir sharedstatedir localstatedir includedir \
+ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+ libdir localedir mandir
+do
+ eval ac_val=\$$ac_var
+ # Remove trailing slashes.
+ case $ac_val in
+ */ )
+ ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
+ eval $ac_var=\$ac_val;;
+ esac
+ # Be sure to have absolute directory names.
+ case $ac_val in
+ [\\/$]* | ?:[\\/]* ) continue;;
+ NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+ esac
+ as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+ if test "x$build_alias" = x; then
+ cross_compiling=maybe
+ elif test "x$build_alias" != "x$host_alias"; then
+ cross_compiling=yes
+ fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ac_ls_di=`ls -di .` &&
+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+ as_fn_error $? "working directory cannot be determined"
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+ as_fn_error $? "pwd does not report name of working directory"
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+ ac_srcdir_defaulted=yes
+ # Try the directory containing this script, then the parent directory.
+ ac_confdir=`$as_dirname -- "$as_myself" ||
+$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_myself" : 'X\(//\)[^/]' \| \
+ X"$as_myself" : 'X\(//\)$' \| \
+ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_myself" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ srcdir=$ac_confdir
+ if test ! -r "$srcdir/$ac_unique_file"; then
+ srcdir=..
+ fi
+else
+ ac_srcdir_defaulted=no
+fi
+if test ! -r "$srcdir/$ac_unique_file"; then
+ test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+ as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
+fi
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+ cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
+ pwd)`
+# When building in place, set srcdir=.
+if test "$ac_abs_confdir" = "$ac_pwd"; then
+ srcdir=.
+fi
+# Remove unnecessary trailing slashes from srcdir.
+# Double slashes in file names in object file debugging info
+# mess up M-x gdb in Emacs.
+case $srcdir in
+*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
+esac
+for ac_var in $ac_precious_vars; do
+ eval ac_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_env_${ac_var}_value=\$${ac_var}
+ eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_cv_env_${ac_var}_value=\$${ac_var}
+done
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+ # Omit some internal or obsolete options to make the list less imposing.
+ # This message is too long to be a string in the A/UX 3.1 sh.
+ cat <<_ACEOF
+\`configure' configures gprofng 2.38.50 to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE. See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+ -h, --help display this help and exit
+ --help=short display options specific to this package
+ --help=recursive display the short help of all the included packages
+ -V, --version display version information and exit
+ -q, --quiet, --silent do not print \`checking ...' messages
+ --cache-file=FILE cache test results in FILE [disabled]
+ -C, --config-cache alias for \`--cache-file=config.cache'
+ -n, --no-create do not create output files
+ --srcdir=DIR find the sources in DIR [configure dir or \`..']
+
+Installation directories:
+ --prefix=PREFIX install architecture-independent files in PREFIX
+ [$ac_default_prefix]
+ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
+ [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+ --bindir=DIR user executables [EPREFIX/bin]
+ --sbindir=DIR system admin executables [EPREFIX/sbin]
+ --libexecdir=DIR program executables [EPREFIX/libexec]
+ --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
+ --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
+ --localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --libdir=DIR object code libraries [EPREFIX/lib]
+ --includedir=DIR C header files [PREFIX/include]
+ --oldincludedir=DIR C header files for non-gcc [/usr/include]
+ --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
+ --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
+ --infodir=DIR info documentation [DATAROOTDIR/info]
+ --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
+ --mandir=DIR man documentation [DATAROOTDIR/man]
+ --docdir=DIR documentation root [DATAROOTDIR/doc/gprofng]
+ --htmldir=DIR html documentation [DOCDIR]
+ --dvidir=DIR dvi documentation [DOCDIR]
+ --pdfdir=DIR pdf documentation [DOCDIR]
+ --psdir=DIR ps documentation [DOCDIR]
+_ACEOF
+
+ cat <<\_ACEOF
+
+Program names:
+ --program-prefix=PREFIX prepend PREFIX to installed program names
+ --program-suffix=SUFFIX append SUFFIX to installed program names
+ --program-transform-name=PROGRAM run sed PROGRAM on installed program names
+
+System types:
+ --build=BUILD configure for building on BUILD [guessed]
+ --host=HOST cross-compile to build programs to run on HOST [BUILD]
+ --target=TARGET configure for building compilers for TARGET [HOST]
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+ case $ac_init_help in
+ short | recursive ) echo "Configuration of gprofng 2.38.50:";;
+ esac
+ cat <<\_ACEOF
+
+Optional Features:
+ --disable-option-checking ignore unrecognized --enable/--with options
+ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
+ --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
+ --enable-silent-rules less verbose build output (undo: "make V=1")
+ --disable-silent-rules verbose build output (undo: "make V=0")
+ --enable-maintainer-mode
+ enable make rules and dependencies not useful (and
+ sometimes confusing) to the casual installer
+ --enable-dependency-tracking
+ do not reject slow dependency extractors
+ --disable-dependency-tracking
+ speeds up one-time build
+ --enable-shared[=PKGS] build shared libraries [default=yes]
+ --enable-static[=PKGS] build static libraries [default=yes]
+ --enable-fast-install[=PKGS]
+ optimize for fast installation [default=yes]
+ --disable-libtool-lock avoid locking (might break parallel builds)
+
+Optional Packages:
+ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
+ --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
+ --with-pic try to use only PIC/non-PIC objects [default=use
+ both]
+ --with-gnu-ld assume the C compiler uses GNU ld [default=no]
+
+Some influential environment variables:
+ CC C compiler command
+ CFLAGS C compiler flags
+ LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
+ nonstandard directory <lib dir>
+ LIBS libraries to pass to the linker, e.g. -l<library>
+ CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
+ you have headers in a nonstandard directory <include dir>
+ CPP C preprocessor
+ CXX C++ compiler command
+ CXXFLAGS C++ compiler flags
+ CXXCPP C++ preprocessor
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to the package provider.
+_ACEOF
+ac_status=$?
+fi
+
+if test "$ac_init_help" = "recursive"; then
+ # If there are subdirs, report their specific --help.
+ for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+ test -d "$ac_dir" ||
+ { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
+ continue
+ ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+ cd "$ac_dir" || { ac_status=$?; continue; }
+ # Check for guested configure.
+ if test -f "$ac_srcdir/configure.gnu"; then
+ echo &&
+ $SHELL "$ac_srcdir/configure.gnu" --help=recursive
+ elif test -f "$ac_srcdir/configure"; then
+ echo &&
+ $SHELL "$ac_srcdir/configure" --help=recursive
+ else
+ $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+ fi || ac_status=$?
+ cd "$ac_pwd" || { ac_status=$?; break; }
+ done
+fi
+
+test -n "$ac_init_help" && exit $ac_status
+if $ac_init_version; then
+ cat <<\_ACEOF
+gprofng configure 2.38.50
+generated by GNU Autoconf 2.69
+
+Copyright (C) 2012 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+ exit
+fi
+
+## ------------------------ ##
+## Autoconf initialization. ##
+## ------------------------ ##
+
+# ac_fn_c_try_compile LINENO
+# --------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_compile ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext
+ if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_compile
+
+# ac_fn_c_try_cpp LINENO
+# ----------------------
+# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_cpp ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if { { ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } > conftest.i && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_cpp
+
+# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists, giving a warning if it cannot be compiled using
+# the include files in INCLUDES and setting the cache variable VAR
+# accordingly.
+ac_fn_c_check_header_mongrel ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if eval \${$3+:} false; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+ $as_echo_n "(cached) " >&6
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+ # Is the header compilable?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
+$as_echo_n "checking $2 usability... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_header_compiler=yes
+else
+ ac_header_compiler=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
+$as_echo_n "checking $2 presence... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <$2>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+ ac_header_preproc=yes
+else
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
+ yes:no: )
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+ ;;
+ no:yes:* )
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+ ;;
+esac
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ eval "$3=\$ac_header_compiler"
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_header_mongrel
+
+# ac_fn_c_try_run LINENO
+# ----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
+# that executables *can* be run.
+ac_fn_c_try_run ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
+ { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: program exited with status $ac_status" >&5
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=$ac_status
+fi
+ rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_run
+
+# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists and can be compiled using the include files in
+# INCLUDES, setting the cache variable VAR accordingly.
+ac_fn_c_check_header_compile ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ eval "$3=yes"
+else
+ eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_header_compile
+
+# ac_fn_cxx_try_compile LINENO
+# ----------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_cxx_try_compile ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext
+ if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_cxx_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_cxx_try_compile
+
+# ac_fn_c_try_link LINENO
+# -----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_link ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext conftest$ac_exeext
+ if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ test -x conftest$ac_exeext
+ }; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+ # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+ # interfere with the next link command; also delete a directory that is
+ # left behind by Apple's compiler. We do this before executing the actions.
+ rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_link
+
+# ac_fn_c_check_func LINENO FUNC VAR
+# ----------------------------------
+# Tests whether FUNC exists, setting the cache variable VAR accordingly
+ac_fn_c_check_func ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $2 innocuous_$2
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $2 (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $2
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $2 ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined __stub_$2 || defined __stub___$2
+choke me
+#endif
+
+int
+main ()
+{
+return $2 ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ eval "$3=yes"
+else
+ eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_func
+
+# ac_fn_cxx_try_cpp LINENO
+# ------------------------
+# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+ac_fn_cxx_try_cpp ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if { { ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } > conftest.i && {
+ test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
+ test ! -s conftest.err
+ }; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_cxx_try_cpp
+
+# ac_fn_cxx_try_link LINENO
+# -------------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_cxx_try_link ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext conftest$ac_exeext
+ if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_cxx_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ test -x conftest$ac_exeext
+ }; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+ # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+ # interfere with the next link command; also delete a directory that is
+ # left behind by Apple's compiler. We do this before executing the actions.
+ rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_cxx_try_link
+cat >config.log <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by gprofng $as_me 2.38.50, which was
+generated by GNU Autoconf 2.69. Invocation command line was
+
+ $ $0 $@
+
+_ACEOF
+exec 5>>config.log
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
+
+/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown`
+/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
+/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ $as_echo "PATH: $as_dir"
+ done
+IFS=$as_save_IFS
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+ for ac_arg
+ do
+ case $ac_arg in
+ -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ continue ;;
+ *\'*)
+ ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ case $ac_pass in
+ 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
+ 2)
+ as_fn_append ac_configure_args1 " '$ac_arg'"
+ if test $ac_must_keep_next = true; then
+ ac_must_keep_next=false # Got value, back to normal.
+ else
+ case $ac_arg in
+ *=* | --config-cache | -C | -disable-* | --disable-* \
+ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+ | -with-* | --with-* | -without-* | --without-* | --x)
+ case "$ac_configure_args0 " in
+ "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+ esac
+ ;;
+ -* ) ac_must_keep_next=true ;;
+ esac
+ fi
+ as_fn_append ac_configure_args " '$ac_arg'"
+ ;;
+ esac
+ done
+done
+{ ac_configure_args0=; unset ac_configure_args0;}
+{ ac_configure_args1=; unset ac_configure_args1;}
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log. We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Use '\'' to represent an apostrophe within the trap.
+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
+trap 'exit_status=$?
+ # Save into config.log some information that might help in debugging.
+ {
+ echo
+
+ $as_echo "## ---------------- ##
+## Cache variables. ##
+## ---------------- ##"
+ echo
+ # The following way of writing the cache mishandles newlines in values,
+(
+ for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+ *) { eval $ac_var=; unset $ac_var;} ;;
+ esac ;;
+ esac
+ done
+ (set) 2>&1 |
+ case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
+ sed -n \
+ "s/'\''/'\''\\\\'\'''\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
+ ;; #(
+ *)
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ ;;
+ esac |
+ sort
+)
+ echo
+
+ $as_echo "## ----------------- ##
+## Output variables. ##
+## ----------------- ##"
+ echo
+ for ac_var in $ac_subst_vars
+ do
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ $as_echo "$ac_var='\''$ac_val'\''"
+ done | sort
+ echo
+
+ if test -n "$ac_subst_files"; then
+ $as_echo "## ------------------- ##
+## File substitutions. ##
+## ------------------- ##"
+ echo
+ for ac_var in $ac_subst_files
+ do
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ $as_echo "$ac_var='\''$ac_val'\''"
+ done | sort
+ echo
+ fi
+
+ if test -s confdefs.h; then
+ $as_echo "## ----------- ##
+## confdefs.h. ##
+## ----------- ##"
+ echo
+ cat confdefs.h
+ echo
+ fi
+ test "$ac_signal" != 0 &&
+ $as_echo "$as_me: caught signal $ac_signal"
+ $as_echo "$as_me: exit $exit_status"
+ } >&5
+ rm -f core *.core core.conftest.* &&
+ rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
+ exit $exit_status
+' 0
+for ac_signal in 1 2 13 15; do
+ trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -f -r conftest* confdefs.h
+
+$as_echo "/* confdefs.h */" > confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_URL "$PACKAGE_URL"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer an explicitly selected file to automatically selected ones.
+ac_site_file1=NONE
+ac_site_file2=NONE
+if test -n "$CONFIG_SITE"; then
+ # We do not want a PATH search for config.site.
+ case $CONFIG_SITE in #((
+ -*) ac_site_file1=./$CONFIG_SITE;;
+ */*) ac_site_file1=$CONFIG_SITE;;
+ *) ac_site_file1=./$CONFIG_SITE;;
+ esac
+elif test "x$prefix" != xNONE; then
+ ac_site_file1=$prefix/share/config.site
+ ac_site_file2=$prefix/etc/config.site
+else
+ ac_site_file1=$ac_default_prefix/share/config.site
+ ac_site_file2=$ac_default_prefix/etc/config.site
+fi
+for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+do
+ test "x$ac_site_file" = xNONE && continue
+ if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+$as_echo "$as_me: loading site script $ac_site_file" >&6;}
+ sed 's/^/| /' "$ac_site_file" >&5
+ . "$ac_site_file" \
+ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "failed to load site script $ac_site_file
+See \`config.log' for more details" "$LINENO" 5; }
+ fi
+done
+
+if test -r "$cache_file"; then
+ # Some versions of bash will fail to source /dev/null (special files
+ # actually), so we avoid doing that. DJGPP emulates it as a regular file.
+ if test /dev/null != "$cache_file" && test -f "$cache_file"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
+$as_echo "$as_me: loading cache $cache_file" >&6;}
+ case $cache_file in
+ [\\/]* | ?:[\\/]* ) . "$cache_file";;
+ *) . "./$cache_file";;
+ esac
+ fi
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
+$as_echo "$as_me: creating cache $cache_file" >&6;}
+ >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in $ac_precious_vars; do
+ eval ac_old_set=\$ac_cv_env_${ac_var}_set
+ eval ac_new_set=\$ac_env_${ac_var}_set
+ eval ac_old_val=\$ac_cv_env_${ac_var}_value
+ eval ac_new_val=\$ac_env_${ac_var}_value
+ case $ac_old_set,$ac_new_set in
+ set,)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,set)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,);;
+ *)
+ if test "x$ac_old_val" != "x$ac_new_val"; then
+ # differences in whitespace do not lead to failure.
+ ac_old_val_w=`echo x $ac_old_val`
+ ac_new_val_w=`echo x $ac_new_val`
+ if test "$ac_old_val_w" != "$ac_new_val_w"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
+$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+ ac_cache_corrupted=:
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+ eval $ac_var=\$ac_old_val
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
+$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
+$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
+ fi;;
+ esac
+ # Pass precious variables to config.status.
+ if test "$ac_new_set" = set; then
+ case $ac_new_val in
+ *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *) ac_arg=$ac_var=$ac_new_val ;;
+ esac
+ case " $ac_configure_args " in
+ *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
+ *) as_fn_append ac_configure_args " '$ac_arg'" ;;
+ esac
+ fi
+done
+if $ac_cache_corrupted; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
+$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+ as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
+fi
+## -------------------- ##
+## Main body of script. ##
+## -------------------- ##
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
+
+
+ac_aux_dir=
+for ac_dir in ../.. "$srcdir"/../..; do
+ if test -f "$ac_dir/install-sh"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install-sh -c"
+ break
+ elif test -f "$ac_dir/install.sh"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install.sh -c"
+ break
+ elif test -f "$ac_dir/shtool"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/shtool install -c"
+ break
+ fi
+done
+if test -z "$ac_aux_dir"; then
+ as_fn_error $? "cannot find install-sh, install.sh, or shtool in ../.. \"$srcdir\"/../.." "$LINENO" 5
+fi
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
+ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
+ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
+
+
+# Make sure we can run config.sub.
+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+ as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
+$as_echo_n "checking build system type... " >&6; }
+if ${ac_cv_build+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_build_alias=$build_alias
+test "x$ac_build_alias" = x &&
+ ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+test "x$ac_build_alias" = x &&
+ as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
+ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+ as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
+$as_echo "$ac_cv_build" >&6; }
+case $ac_cv_build in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
+esac
+build=$ac_cv_build
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_build
+shift
+build_cpu=$1
+build_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+build_os=$*
+IFS=$ac_save_IFS
+case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
+$as_echo_n "checking host system type... " >&6; }
+if ${ac_cv_host+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test "x$host_alias" = x; then
+ ac_cv_host=$ac_cv_build
+else
+ ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
+ as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
+$as_echo "$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
+esac
+host=$ac_cv_host
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_host
+shift
+host_cpu=$1
+host_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+host_os=$*
+IFS=$ac_save_IFS
+case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5
+$as_echo_n "checking target system type... " >&6; }
+if ${ac_cv_target+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test "x$target_alias" = x; then
+ ac_cv_target=$ac_cv_host
+else
+ ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` ||
+ as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5
+$as_echo "$ac_cv_target" >&6; }
+case $ac_cv_target in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;;
+esac
+target=$ac_cv_target
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_target
+shift
+target_cpu=$1
+target_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+target_os=$*
+IFS=$ac_save_IFS
+case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac
+
+
+# The aliases save the names the user supplied, while $host etc.
+# will get canonicalized.
+test -n "$target_alias" &&
+ test "$program_prefix$program_suffix$program_transform_name" = \
+ NONENONEs,x,x, &&
+ program_prefix=${target_alias}-
+am__api_version='1.15'
+
+# Find a good install program. We prefer a C program (faster),
+# so one script is as good as another. But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if ${ac_cv_path_install+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+ ./ | .// | /[cC]/* | \
+ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+ /usr/ucb/* ) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ # Don't use installbsd from OSF since it installs stuff as root
+ # by default.
+ for ac_prog in ginstall scoinst install; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+ if test $ac_prog = install &&
+ grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+ :
+ elif test $ac_prog = install &&
+ grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # program-specific install script used by HP pwplus--don't use.
+ :
+ else
+ rm -rf conftest.one conftest.two conftest.dir
+ echo one > conftest.one
+ echo two > conftest.two
+ mkdir conftest.dir
+ if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+ test -s conftest.one && test -s conftest.two &&
+ test -s conftest.dir/conftest.one &&
+ test -s conftest.dir/conftest.two
+ then
+ ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+ break 3
+ fi
+ fi
+ fi
+ done
+ done
+ ;;
+esac
+
+ done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+ if test "${ac_cv_path_install+set}" = set; then
+ INSTALL=$ac_cv_path_install
+ else
+ # As a last resort, use the slow shell script. Don't cache a
+ # value for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the value is a relative name.
+ INSTALL=$ac_install_sh
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
+$as_echo_n "checking whether build environment is sane... " >&6; }
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name. Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+ *[\\\"\#\$\&\'\`$am_lf]*)
+ as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;;
+esac
+case $srcdir in
+ *[\\\"\#\$\&\'\`$am_lf\ \ ]*)
+ as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;;
+esac
+
+# Do 'set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ am_has_slept=no
+ for am_try in 1 2; do
+ echo "timestamp, slept: $am_has_slept" > conftest.file
+ set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+ if test "$*" = "X"; then
+ # -L didn't work.
+ set X `ls -t "$srcdir/configure" conftest.file`
+ fi
+ if test "$*" != "X $srcdir/configure conftest.file" \
+ && test "$*" != "X conftest.file $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ as_fn_error $? "ls -t appears to fail. Make sure there is not a broken
+ alias in your environment" "$LINENO" 5
+ fi
+ if test "$2" = conftest.file || test $am_try -eq 2; then
+ break
+ fi
+ # Just in case.
+ sleep 1
+ am_has_slept=yes
+ done
+ test "$2" = conftest.file
+ )
+then
+ # Ok.
+ :
+else
+ as_fn_error $? "newly created file is older than distributed files!
+Check your system clock" "$LINENO" 5
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+# If we didn't sleep, we still need to ensure time stamps of config.status and
+# generated files are strictly newer.
+am_sleep_pid=
+if grep 'slept: no' conftest.file >/dev/null 2>&1; then
+ ( sleep 1 ) &
+ am_sleep_pid=$!
+fi
+
+rm -f conftest.file
+
+test "$program_prefix" != NONE &&
+ program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+ program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+# Expand $ac_aux_dir to an absolute path.
+am_aux_dir=`cd "$ac_aux_dir" && pwd`
+
+if test x"${MISSING+set}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+ *)
+ MISSING="\${SHELL} $am_aux_dir/missing" ;;
+ esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --is-lightweight"; then
+ am_missing_run="$MISSING "
+else
+ am_missing_run=
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5
+$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;}
+fi
+
+if test x"${install_sh+set}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+ *)
+ install_sh="\${SHELL} $am_aux_dir/install-sh"
+ esac
+fi
+
+# Installed binaries are usually stripped using 'strip' when the user
+# run "make install-strip". However 'strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the 'STRIP' environment variable to overrule this program.
+if test "$cross_compiling" != no; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_STRIP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$STRIP"; then
+ ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+ ac_ct_STRIP=$STRIP
+ # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_STRIP"; then
+ ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_STRIP="strip"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_STRIP" = x; then
+ STRIP=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ STRIP=$ac_ct_STRIP
+ fi
+else
+ STRIP="$ac_cv_prog_STRIP"
+fi
+
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
+$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
+if test -z "$MKDIR_P"; then
+ if ${ac_cv_path_mkdir+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in mkdir gmkdir; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue
+ case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
+ 'mkdir (GNU coreutils) '* | \
+ 'mkdir (coreutils) '* | \
+ 'mkdir (fileutils) '4.1*)
+ ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
+ break 3;;
+ esac
+ done
+ done
+ done
+IFS=$as_save_IFS
+
+fi
+
+ test -d ./--version && rmdir ./--version
+ if test "${ac_cv_path_mkdir+set}" = set; then
+ MKDIR_P="$ac_cv_path_mkdir -p"
+ else
+ # As a last resort, use the slow shell script. Don't cache a
+ # value for MKDIR_P within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the value is a relative name.
+ MKDIR_P="$ac_install_sh -d"
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
+$as_echo "$MKDIR_P" >&6; }
+
+for ac_prog in gawk mawk nawk awk
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_AWK+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$AWK"; then
+ ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_AWK="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
+$as_echo "$AWK" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$AWK" && break
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+set x ${MAKE-make}
+ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+ @echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+ *@@@%%%=?*=@@@%%%*)
+ eval ac_cv_prog_make_${ac_make}_set=yes;;
+ *)
+ eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
+rm -f conftest.make
+fi
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ SET_MAKE=
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+ am__leading_dot=.
+else
+ am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+# Check whether --enable-silent-rules was given.
+if test "${enable_silent_rules+set}" = set; then :
+ enableval=$enable_silent_rules;
+fi
+
+case $enable_silent_rules in # (((
+ yes) AM_DEFAULT_VERBOSITY=0;;
+ no) AM_DEFAULT_VERBOSITY=1;;
+ *) AM_DEFAULT_VERBOSITY=1;;
+esac
+am_make=${MAKE-make}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5
+$as_echo_n "checking whether $am_make supports nested variables... " >&6; }
+if ${am_cv_make_support_nested_variables+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if $as_echo 'TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+ @$(TRUE)
+.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then
+ am_cv_make_support_nested_variables=yes
+else
+ am_cv_make_support_nested_variables=no
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5
+$as_echo "$am_cv_make_support_nested_variables" >&6; }
+if test $am_cv_make_support_nested_variables = yes; then
+ AM_V='$(V)'
+ AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+ AM_V=$AM_DEFAULT_VERBOSITY
+ AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
+AM_BACKSLASH='\'
+
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+ # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+ # is not polluted with repeated "-I."
+ am__isrc=' -I$(srcdir)'
+ # test to see if srcdir already configured
+ if test -f $srcdir/config.status; then
+ as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
+ fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+ if (cygpath --version) >/dev/null 2>/dev/null; then
+ CYGPATH_W='cygpath -w'
+ else
+ CYGPATH_W=echo
+ fi
+fi
+
+
+# Define the identity of the package.
+ PACKAGE='gprofng'
+ VERSION='2.38.50'
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define VERSION "$VERSION"
+_ACEOF
+
+# Some tools Automake needs.
+
+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
+
+
+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
+
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
+
+
+AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+
+
+MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
+# For better backward compatibility. To be removed once Automake 1.9.x
+# dies out for good. For more background, see:
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+mkdir_p='$(MKDIR_P)'
+
+# We need awk for the "check" target (and possibly the TAP driver). The
+# system "awk" is bad on some platforms.
+# 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}'
+
+
+# We'll loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar pax cpio none'
+
+am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'
+
+
+
+
+
+
+# POSIX will say in a future version that running "rm -f" with no argument
+# is OK; and we want to be able to make that assumption in our Makefile
+# recipes. So use an aggressive probe to check that the usage we want is
+# actually supported "in the wild" to an acceptable degree.
+# See automake bug#10828.
+# To make any issue more visible, cause the running configure to be aborted
+# by default if the 'rm' program in use doesn't match our expectations; the
+# user can still override this though.
+if rm -f && rm -fr && rm -rf; then : OK; else
+ cat >&2 <<'END'
+Oops!
+
+Your 'rm' program seems unable to run without file operands specified
+on the command line, even when the '-f' option is present. This is contrary
+to the behaviour of most rm programs out there, and not conforming with
+the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>
+
+Please tell bug-automake@gnu.org about your system, including the value
+of your $PATH and any error possibly output before this message. This
+can help us improve future automake versions.
+
+END
+ if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then
+ echo 'Configuration will proceed anyway, since you have set the' >&2
+ echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2
+ echo >&2
+ else
+ cat >&2 <<'END'
+Aborting the configuration process, to ensure you take notice of the issue.
+
+You can download and install GNU coreutils to get an 'rm' implementation
+that behaves properly: <http://www.gnu.org/software/coreutils/>.
+
+If you want to complete the configuration process using your problematic
+'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
+to "yes", and re-run configure.
+
+END
+ as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5
+ fi
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5
+$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; }
+ # Check whether --enable-maintainer-mode was given.
+if test "${enable_maintainer_mode+set}" = set; then :
+ enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval
+else
+ USE_MAINTAINER_MODE=no
+fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5
+$as_echo "$USE_MAINTAINER_MODE" >&6; }
+ if test $USE_MAINTAINER_MODE = yes; then
+ MAINTAINER_MODE_TRUE=
+ MAINTAINER_MODE_FALSE='#'
+else
+ MAINTAINER_MODE_TRUE='#'
+ MAINTAINER_MODE_FALSE=
+fi
+
+ MAINT=$MAINTAINER_MODE_TRUE
+
+
+
+
+
+DEPDIR="${am__leading_dot}deps"
+
+ac_config_commands="$ac_config_commands depfiles"
+
+
+am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+ @echo this is the am__doit target
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5
+$as_echo_n "checking for style of include used by $am_make... " >&6; }
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# Ignore all kinds of additional output from 'make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+ am__include=include
+ am__quote=
+ _am_result=GNU
+ ;;
+esac
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+ echo '.include "confinc"' > confmf
+ case `$am_make -s -f confmf 2> /dev/null` in #(
+ *the\ am__doit\ target*)
+ am__include=.include
+ am__quote="\""
+ _am_result=BSD
+ ;;
+ esac
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5
+$as_echo "$_am_result" >&6; }
+rm -f confinc confmf
+
+# Check whether --enable-dependency-tracking was given.
+if test "${enable_dependency_tracking+set}" = set; then :
+ enableval=$enable_dependency_tracking;
+fi
+
+if test "x$enable_dependency_tracking" != xno; then
+ am_depcomp="$ac_aux_dir/depcomp"
+ AMDEPBACKSLASH='\'
+ am__nodep='_no'
+fi
+ if test "x$enable_dependency_tracking" != xno; then
+ AMDEP_TRUE=
+ AMDEP_FALSE='#'
+else
+ AMDEP_TRUE='#'
+ AMDEP_FALSE=
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}gcc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="gcc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}cc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ fi
+fi
+if test -z "$CC"; then
+ # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+ ac_prog_rejected=yes
+ continue
+ fi
+ ac_cv_prog_CC="cc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+ # We found a bogon in the path, so make sure we never use it.
+ set dummy $ac_cv_prog_CC
+ shift
+ if test $# != 0; then
+ # We chose a different compiler from the bogus one.
+ # However, it has the same basename, so the bogon will be chosen
+ # first if we set CC to just the basename; use the full file name.
+ shift
+ ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+ fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in cl.exe
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$CC" && break
+ done
+fi
+if test -z "$CC"; then
+ ac_ct_CC=$CC
+ for ac_prog in cl.exe
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_CC" && break
+done
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+fi
+
+fi
+
+
+test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "no acceptable C compiler found in \$PATH
+See \`config.log' for more details" "$LINENO" 5; }
+
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+ { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ sed '10a\
+... rest of stderr output deleted ...
+ 10q' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ fi
+ rm -f conftest.er1 conftest.err
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+done
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
+$as_echo_n "checking whether the C compiler works... " >&6; }
+ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+
+# The possible output files:
+ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
+
+ac_rmfiles=
+for ac_file in $ac_files
+do
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+ * ) ac_rmfiles="$ac_rmfiles $ac_file";;
+ esac
+done
+rm -f $ac_rmfiles
+
+if { { ac_try="$ac_link_default"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link_default") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
+# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
+# in a Makefile. We should not override ac_cv_exeext if it was cached,
+# so that the user can short-circuit this test for compilers unknown to
+# Autoconf.
+for ac_file in $ac_files ''
+do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
+ ;;
+ [ab].out )
+ # We found the default executable, but exeext='' is most
+ # certainly right.
+ break;;
+ *.* )
+ if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+ then :; else
+ ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ fi
+ # We set ac_cv_exeext here because the later test for it is not
+ # safe: cross compilers may not add the suffix if given an `-o'
+ # argument, so we may need to know it at that point already.
+ # Even if this section looks crufty: it has the advantage of
+ # actually working.
+ break;;
+ * )
+ break;;
+ esac
+done
+test "$ac_cv_exeext" = no && ac_cv_exeext=
+
+else
+ ac_file=''
+fi
+if test -z "$ac_file"; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "C compiler cannot create executables
+See \`config.log' for more details" "$LINENO" 5; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
+$as_echo_n "checking for C compiler default output file name... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+$as_echo "$ac_file" >&6; }
+ac_exeext=$ac_cv_exeext
+
+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
+$as_echo_n "checking for suffix of executables... " >&6; }
+if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+ *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ break;;
+ * ) break;;
+ esac
+done
+else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+rm -f conftest conftest$ac_cv_exeext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
+$as_echo "$ac_cv_exeext" >&6; }
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdio.h>
+int
+main ()
+{
+FILE *f = fopen ("conftest.out", "w");
+ return ferror (f) || fclose (f) != 0;
+
+ ;
+ return 0;
+}
+_ACEOF
+ac_clean_files="$ac_clean_files conftest.out"
+# Check that the compiler produces executables we can run. If not, either
+# the compiler is broken, or we cross compile.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+$as_echo_n "checking whether we are cross compiling... " >&6; }
+if test "$cross_compiling" != yes; then
+ { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ if { ac_try='./conftest$ac_cv_exeext'
+ { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then
+ cross_compiling=no
+ else
+ if test "$cross_compiling" = maybe; then
+ cross_compiling=yes
+ else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details" "$LINENO" 5; }
+ fi
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+$as_echo "$cross_compiling" >&6; }
+
+rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
+$as_echo_n "checking for suffix of object files... " >&6; }
+if ${ac_cv_objext+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ for ac_file in conftest.o conftest.obj conftest.*; do
+ test -f "$ac_file" || continue;
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
+ *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+ break;;
+ esac
+done
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of object files: cannot compile
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
+$as_echo "$ac_cv_objext" >&6; }
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+if ${ac_cv_c_compiler_gnu+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_compiler_gnu=yes
+else
+ ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+ GCC=yes
+else
+ GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
+if ${ac_cv_prog_cc_g+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_save_c_werror_flag=$ac_c_werror_flag
+ ac_c_werror_flag=yes
+ ac_cv_prog_cc_g=no
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_g=yes
+else
+ CFLAGS=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+ ac_c_werror_flag=$ac_save_c_werror_flag
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+ CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+ if test "$GCC" = yes; then
+ CFLAGS="-g -O2"
+ else
+ CFLAGS="-g"
+ fi
+else
+ if test "$GCC" = yes; then
+ CFLAGS="-O2"
+ else
+ CFLAGS=
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if ${ac_cv_prog_cc_c89+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdarg.h>
+#include <stdio.h>
+struct stat;
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+ char **p;
+ int i;
+{
+ return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+ char *s;
+ va_list v;
+ va_start (v,p);
+ s = g (p, va_arg (v,int));
+ va_end (v);
+ return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
+ function prototypes and stuff, but not '\xHH' hex character constants.
+ These don't provoke an error unfortunately, instead are silently treated
+ as 'x'. The following induces an error, until -std is added to get
+ proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
+ array size at least. It's necessary to write '\x00'==0 to get something
+ that's true only with -std. */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+ inside strings and character constants. */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
+ ;
+ return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_c89=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext
+ test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+ x)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+ xno)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+ *)
+ CC="$CC $ac_cv_prog_cc_c89"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c89" != xno; then :
+
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5
+$as_echo_n "checking whether $CC understands -c and -o together... " >&6; }
+if ${am_cv_prog_cc_c_o+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+ # Make sure it works both with $CC and with simple cc.
+ # Following AC_PROG_CC_C_O, we do the test twice because some
+ # compilers refuse to overwrite an existing .o file with -o,
+ # though they will create one.
+ am_cv_prog_cc_c_o=yes
+ for am_i in 1 2; do
+ if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5
+ ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } \
+ && test -f conftest2.$ac_objext; then
+ : OK
+ else
+ am_cv_prog_cc_c_o=no
+ break
+ fi
+ done
+ rm -f core conftest*
+ unset am_i
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5
+$as_echo "$am_cv_prog_cc_c_o" >&6; }
+if test "$am_cv_prog_cc_c_o" != yes; then
+ # Losing compiler, so override with the script.
+ # FIXME: It is wrong to rewrite CC.
+ # But if we don't then we get into trouble of one sort or another.
+ # A longer-term fix would be to have automake use am__CC in this case,
+ # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+ CC="$am_aux_dir/compile $CC"
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+depcc="$CC" am_compiler_list=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if ${am_cv_CC_dependencies_compiler_type+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named 'D' -- because '-MD' means "put the output
+ # in D".
+ 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.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_CC_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+ fi
+ am__universal=false
+ case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac
+
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+ # Solaris 10 /bin/sh.
+ echo '/* dummy */' > sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ # We check with '-c' and '-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle '-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs.
+ am__obj=sub/conftest.${OBJEXT-o}
+ am__minus_obj="-o $am__obj"
+ case $depmode in
+ gcc)
+ # This depmode causes a compiler race in universal mode.
+ test "$am__universal" = false || continue
+ ;;
+ nosideeffect)
+ # After this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested.
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ 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.
+ am__obj=conftest.${OBJEXT-o}
+ am__minus_obj=
+ ;;
+ none) break ;;
+ esac
+ if depmode=$depmode \
+ source=sub/conftest.c object=$am__obj \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_CC_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+ if
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+ am__fastdepCC_TRUE=
+ am__fastdepCC_FALSE='#'
+else
+ am__fastdepCC_TRUE='#'
+ am__fastdepCC_FALSE=
+fi
+
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
+$as_echo_n "checking how to run the C preprocessor... " >&6; }
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+ CPP=
+fi
+if test -z "$CPP"; then
+ if ${ac_cv_prog_CPP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ # Double quotes because CPP needs to be expanded
+ for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+ do
+ ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+ # Broken: success on invalid input.
+continue
+else
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+ break
+fi
+
+ done
+ ac_cv_prog_CPP=$CPP
+
+fi
+ CPP=$ac_cv_prog_CPP
+else
+ ac_cv_prog_CPP=$CPP
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
+$as_echo "$CPP" >&6; }
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+ # Broken: success on invalid input.
+continue
+else
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+
+else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
+$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
+if ${ac_cv_path_GREP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -z "$GREP"; then
+ ac_path_GREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in grep ggrep; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+ as_fn_executable_p "$ac_path_GREP" || continue
+# Check for GNU ac_path_GREP and select it if it is found.
+ # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+ ac_count=0
+ $as_echo_n 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ $as_echo 'GREP' >> "conftest.nl"
+ "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_GREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_GREP="$ac_path_GREP"
+ ac_path_GREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_GREP_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_GREP"; then
+ as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+else
+ ac_cv_path_GREP=$GREP
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
+$as_echo "$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
+$as_echo_n "checking for egrep... " >&6; }
+if ${ac_cv_path_EGREP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+ then ac_cv_path_EGREP="$GREP -E"
+ else
+ if test -z "$EGREP"; then
+ ac_path_EGREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in egrep; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+ as_fn_executable_p "$ac_path_EGREP" || continue
+# Check for GNU ac_path_EGREP and select it if it is found.
+ # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+*)
+ ac_count=0
+ $as_echo_n 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ $as_echo 'EGREP' >> "conftest.nl"
+ "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_EGREP="$ac_path_EGREP"
+ ac_path_EGREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_EGREP_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_EGREP"; then
+ as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+else
+ ac_cv_path_EGREP=$EGREP
+fi
+
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
+$as_echo "$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
+$as_echo_n "checking for ANSI C header files... " >&6; }
+if ${ac_cv_header_stdc+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_header_stdc=yes
+else
+ ac_cv_header_stdc=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+ # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "memchr" >/dev/null 2>&1; then :
+
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "free" >/dev/null 2>&1; then :
+
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+ if test "$cross_compiling" = yes; then :
+ :
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ctype.h>
+#include <stdlib.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+ (('a' <= (c) && (c) <= 'i') \
+ || ('j' <= (c) && (c) <= 'r') \
+ || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+ int i;
+ for (i = 0; i < 256; i++)
+ if (XOR (islower (i), ISLOWER (i))
+ || toupper (i) != TOUPPER (i))
+ return 2;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+
+else
+ ac_cv_header_stdc=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
+$as_echo "$ac_cv_header_stdc" >&6; }
+if test $ac_cv_header_stdc = yes; then
+
+$as_echo "#define STDC_HEADERS 1" >>confdefs.h
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+ inttypes.h stdint.h unistd.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
+"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+ ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default"
+if test "x$ac_cv_header_minix_config_h" = xyes; then :
+ MINIX=yes
+else
+ MINIX=
+fi
+
+
+ if test "$MINIX" = yes; then
+
+$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h
+
+
+$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h
+
+
+$as_echo "#define _MINIX 1" >>confdefs.h
+
+ fi
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5
+$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; }
+if ${ac_cv_safe_to_define___extensions__+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+# define __EXTENSIONS__ 1
+ $ac_includes_default
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_safe_to_define___extensions__=yes
+else
+ ac_cv_safe_to_define___extensions__=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5
+$as_echo "$ac_cv_safe_to_define___extensions__" >&6; }
+ test $ac_cv_safe_to_define___extensions__ = yes &&
+ $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h
+
+ $as_echo "#define _ALL_SOURCE 1" >>confdefs.h
+
+ $as_echo "#define _GNU_SOURCE 1" >>confdefs.h
+
+ $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h
+
+ $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}gcc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="gcc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}cc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ fi
+fi
+if test -z "$CC"; then
+ # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+ ac_prog_rejected=yes
+ continue
+ fi
+ ac_cv_prog_CC="cc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+ # We found a bogon in the path, so make sure we never use it.
+ set dummy $ac_cv_prog_CC
+ shift
+ if test $# != 0; then
+ # We chose a different compiler from the bogus one.
+ # However, it has the same basename, so the bogon will be chosen
+ # first if we set CC to just the basename; use the full file name.
+ shift
+ ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+ fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in cl.exe
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$CC" && break
+ done
+fi
+if test -z "$CC"; then
+ ac_ct_CC=$CC
+ for ac_prog in cl.exe
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_CC" && break
+done
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+fi
+
+fi
+
+
+test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "no acceptable C compiler found in \$PATH
+See \`config.log' for more details" "$LINENO" 5; }
+
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+ { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ sed '10a\
+... rest of stderr output deleted ...
+ 10q' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ fi
+ rm -f conftest.er1 conftest.err
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+if ${ac_cv_c_compiler_gnu+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_compiler_gnu=yes
+else
+ ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+ GCC=yes
+else
+ GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
+if ${ac_cv_prog_cc_g+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_save_c_werror_flag=$ac_c_werror_flag
+ ac_c_werror_flag=yes
+ ac_cv_prog_cc_g=no
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_g=yes
+else
+ CFLAGS=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+ ac_c_werror_flag=$ac_save_c_werror_flag
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+ CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+ if test "$GCC" = yes; then
+ CFLAGS="-g -O2"
+ else
+ CFLAGS="-g"
+ fi
+else
+ if test "$GCC" = yes; then
+ CFLAGS="-O2"
+ else
+ CFLAGS=
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if ${ac_cv_prog_cc_c89+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdarg.h>
+#include <stdio.h>
+struct stat;
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+ char **p;
+ int i;
+{
+ return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+ char *s;
+ va_list v;
+ va_start (v,p);
+ s = g (p, va_arg (v,int));
+ va_end (v);
+ return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
+ function prototypes and stuff, but not '\xHH' hex character constants.
+ These don't provoke an error unfortunately, instead are silently treated
+ as 'x'. The following induces an error, until -std is added to get
+ proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
+ array size at least. It's necessary to write '\x00'==0 to get something
+ that's true only with -std. */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+ inside strings and character constants. */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
+ ;
+ return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_c89=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext
+ test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+ x)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+ xno)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+ *)
+ CC="$CC $ac_cv_prog_cc_c89"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c89" != xno; then :
+
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5
+$as_echo_n "checking whether $CC understands -c and -o together... " >&6; }
+if ${am_cv_prog_cc_c_o+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+ # Make sure it works both with $CC and with simple cc.
+ # Following AC_PROG_CC_C_O, we do the test twice because some
+ # compilers refuse to overwrite an existing .o file with -o,
+ # though they will create one.
+ am_cv_prog_cc_c_o=yes
+ for am_i in 1 2; do
+ if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5
+ ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } \
+ && test -f conftest2.$ac_objext; then
+ : OK
+ else
+ am_cv_prog_cc_c_o=no
+ break
+ fi
+ done
+ rm -f core conftest*
+ unset am_i
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5
+$as_echo "$am_cv_prog_cc_c_o" >&6; }
+if test "$am_cv_prog_cc_c_o" != yes; then
+ # Losing compiler, so override with the script.
+ # FIXME: It is wrong to rewrite CC.
+ # But if we don't then we get into trouble of one sort or another.
+ # A longer-term fix would be to have automake use am__CC in this case,
+ # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+ CC="$am_aux_dir/compile $CC"
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+depcc="$CC" am_compiler_list=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if ${am_cv_CC_dependencies_compiler_type+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named 'D' -- because '-MD' means "put the output
+ # in D".
+ 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.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_CC_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+ fi
+ am__universal=false
+ case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac
+
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+ # Solaris 10 /bin/sh.
+ echo '/* dummy */' > sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ # We check with '-c' and '-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle '-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs.
+ am__obj=sub/conftest.${OBJEXT-o}
+ am__minus_obj="-o $am__obj"
+ case $depmode in
+ gcc)
+ # This depmode causes a compiler race in universal mode.
+ test "$am__universal" = false || continue
+ ;;
+ nosideeffect)
+ # After this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested.
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ 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.
+ am__obj=conftest.${OBJEXT-o}
+ am__minus_obj=
+ ;;
+ none) break ;;
+ esac
+ if depmode=$depmode \
+ source=sub/conftest.c object=$am__obj \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_CC_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+ if
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+ am__fastdepCC_TRUE=
+ am__fastdepCC_FALSE='#'
+else
+ am__fastdepCC_TRUE='#'
+ am__fastdepCC_FALSE=
+fi
+
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+if test -z "$CXX"; then
+ if test -n "$CCC"; then
+ CXX=$CCC
+ else
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CXX+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CXX"; then
+ ac_cv_prog_CXX="$CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CXX=$ac_cv_prog_CXX
+if test -n "$CXX"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
+$as_echo "$CXX" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$CXX" && break
+ done
+fi
+if test -z "$CXX"; then
+ ac_ct_CXX=$CXX
+ for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CXX+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_CXX"; then
+ ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CXX="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
+if test -n "$ac_ct_CXX"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
+$as_echo "$ac_ct_CXX" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_CXX" && break
+done
+
+ if test "x$ac_ct_CXX" = x; then
+ CXX="g++"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CXX=$ac_ct_CXX
+ fi
+fi
+
+ fi
+fi
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+ { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ sed '10a\
+... rest of stderr output deleted ...
+ 10q' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ fi
+ rm -f conftest.er1 conftest.err
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5
+$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; }
+if ${ac_cv_cxx_compiler_gnu+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ ac_compiler_gnu=yes
+else
+ ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5
+$as_echo "$ac_cv_cxx_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+ GXX=yes
+else
+ GXX=
+fi
+ac_test_CXXFLAGS=${CXXFLAGS+set}
+ac_save_CXXFLAGS=$CXXFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
+$as_echo_n "checking whether $CXX accepts -g... " >&6; }
+if ${ac_cv_prog_cxx_g+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_save_cxx_werror_flag=$ac_cxx_werror_flag
+ ac_cxx_werror_flag=yes
+ ac_cv_prog_cxx_g=no
+ CXXFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ ac_cv_prog_cxx_g=yes
+else
+ CXXFLAGS=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+
+else
+ ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+ CXXFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ ac_cv_prog_cxx_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5
+$as_echo "$ac_cv_prog_cxx_g" >&6; }
+if test "$ac_test_CXXFLAGS" = set; then
+ CXXFLAGS=$ac_save_CXXFLAGS
+elif test $ac_cv_prog_cxx_g = yes; then
+ if test "$GXX" = yes; then
+ CXXFLAGS="-g -O2"
+ else
+ CXXFLAGS="-g"
+ fi
+else
+ if test "$GXX" = yes; then
+ CXXFLAGS="-O2"
+ else
+ CXXFLAGS=
+ fi
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+depcc="$CXX" am_compiler_list=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if ${am_cv_CXX_dependencies_compiler_type+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named 'D' -- because '-MD' means "put the output
+ # in D".
+ 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.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_CXX_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+ fi
+ am__universal=false
+ case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac
+
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+ # Solaris 10 /bin/sh.
+ echo '/* dummy */' > sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ # We check with '-c' and '-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle '-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs.
+ am__obj=sub/conftest.${OBJEXT-o}
+ am__minus_obj="-o $am__obj"
+ case $depmode in
+ gcc)
+ # This depmode causes a compiler race in universal mode.
+ test "$am__universal" = false || continue
+ ;;
+ nosideeffect)
+ # After this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested.
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ 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.
+ am__obj=conftest.${OBJEXT-o}
+ am__minus_obj=
+ ;;
+ none) break ;;
+ esac
+ if depmode=$depmode \
+ source=sub/conftest.c object=$am__obj \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_CXX_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_CXX_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; }
+CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
+
+ if
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then
+ am__fastdepCXX_TRUE=
+ am__fastdepCXX_FALSE='#'
+else
+ am__fastdepCXX_TRUE='#'
+ am__fastdepCXX_FALSE=
+fi
+
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_RANLIB+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$RANLIB"; then
+ ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
+$as_echo "$RANLIB" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+ ac_ct_RANLIB=$RANLIB
+ # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_RANLIB"; then
+ ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_RANLIB="ranlib"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
+$as_echo "$ac_ct_RANLIB" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_RANLIB" = x; then
+ RANLIB=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ RANLIB=$ac_ct_RANLIB
+ fi
+else
+ RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+if test -n "$ac_tool_prefix"; then
+ for ac_prog in ar lib "link -lib"
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_AR+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$AR"; then
+ ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_AR="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
+$as_echo "$AR" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$AR" && break
+ done
+fi
+if test -z "$AR"; then
+ ac_ct_AR=$AR
+ for ac_prog in ar lib "link -lib"
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_AR+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_AR"; then
+ ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_AR="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
+$as_echo "$ac_ct_AR" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_AR" && break
+done
+
+ if test "x$ac_ct_AR" = x; then
+ AR="false"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ AR=$ac_ct_AR
+ fi
+fi
+
+: ${AR=ar}
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the archiver ($AR) interface" >&5
+$as_echo_n "checking the archiver ($AR) interface... " >&6; }
+if ${am_cv_ar_interface+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ am_cv_ar_interface=ar
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int some_variable = 0;
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&5'
+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5
+ (eval $am_ar_try) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ if test "$ac_status" -eq 0; then
+ am_cv_ar_interface=ar
+ else
+ am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&5'
+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5
+ (eval $am_ar_try) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ if test "$ac_status" -eq 0; then
+ am_cv_ar_interface=lib
+ else
+ am_cv_ar_interface=unknown
+ fi
+ fi
+ rm -f conftest.lib libconftest.a
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_ar_interface" >&5
+$as_echo "$am_cv_ar_interface" >&6; }
+
+case $am_cv_ar_interface in
+ar)
+ ;;
+lib)
+ # Microsoft lib, so override with the ar-lib wrapper script.
+ # FIXME: It is wrong to rewrite AR.
+ # But if we don't then we get into trouble of one sort or another.
+ # A longer-term fix would be to have automake use am__AR in this case,
+ # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something
+ # similar.
+ AR="$am_aux_dir/ar-lib $AR"
+ ;;
+unknown)
+ as_fn_error $? "could not determine $AR interface" "$LINENO" 5
+ ;;
+esac
+
+
+case `pwd` in
+ *\ * | *\ *)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
+$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;;
+esac
+
+
+
+macro_version='2.2.7a'
+macro_revision='1.3134'
+
+
+
+
+
+
+
+
+
+
+
+
+
+ltmain="$ac_aux_dir/ltmain.sh"
+
+# Backslashify metacharacters that are still active within
+# double-quoted strings.
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5
+$as_echo_n "checking how to print strings... " >&6; }
+# Test print first, because it will be a builtin if present.
+if test "X`print -r -- -n 2>/dev/null`" = X-n && \
+ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
+ ECHO='print -r --'
+elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
+ ECHO='printf %s\n'
+else
+ # Use this function as a fallback that always works.
+ func_fallback_echo ()
+ {
+ eval 'cat <<_LTECHO_EOF
+$1
+_LTECHO_EOF'
+ }
+ ECHO='func_fallback_echo'
+fi
+
+# func_echo_all arg...
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+ $ECHO ""
+}
+
+case "$ECHO" in
+ printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5
+$as_echo "printf" >&6; } ;;
+ print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5
+$as_echo "print -r" >&6; } ;;
+ *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5
+$as_echo "cat" >&6; } ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
+$as_echo_n "checking for a sed that does not truncate output... " >&6; }
+if ${ac_cv_path_SED+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
+ for ac_i in 1 2 3 4 5 6 7; do
+ ac_script="$ac_script$as_nl$ac_script"
+ done
+ echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
+ { ac_script=; unset ac_script;}
+ if test -z "$SED"; then
+ ac_path_SED_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in sed gsed; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
+ as_fn_executable_p "$ac_path_SED" || continue
+# Check for GNU ac_path_SED and select it if it is found.
+ # Check for GNU $ac_path_SED
+case `"$ac_path_SED" --version 2>&1` in
+*GNU*)
+ ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
+*)
+ ac_count=0
+ $as_echo_n 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ $as_echo '' >> "conftest.nl"
+ "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_SED_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_SED="$ac_path_SED"
+ ac_path_SED_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_SED_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_SED"; then
+ as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5
+ fi
+else
+ ac_cv_path_SED=$SED
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5
+$as_echo "$ac_cv_path_SED" >&6; }
+ SED="$ac_cv_path_SED"
+ rm -f conftest.sed
+
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5
+$as_echo_n "checking for fgrep... " >&6; }
+if ${ac_cv_path_FGREP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1
+ then ac_cv_path_FGREP="$GREP -F"
+ else
+ if test -z "$FGREP"; then
+ ac_path_FGREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in fgrep; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext"
+ as_fn_executable_p "$ac_path_FGREP" || continue
+# Check for GNU ac_path_FGREP and select it if it is found.
+ # Check for GNU $ac_path_FGREP
+case `"$ac_path_FGREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;;
+*)
+ ac_count=0
+ $as_echo_n 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ $as_echo 'FGREP' >> "conftest.nl"
+ "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_FGREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_FGREP="$ac_path_FGREP"
+ ac_path_FGREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_FGREP_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_FGREP"; then
+ as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+else
+ ac_cv_path_FGREP=$FGREP
+fi
+
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5
+$as_echo "$ac_cv_path_FGREP" >&6; }
+ FGREP="$ac_cv_path_FGREP"
+
+
+test -z "$GREP" && GREP=grep
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# Check whether --with-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then :
+ withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
+else
+ with_gnu_ld=no
+fi
+
+ac_prog=ld
+if test "$GCC" = yes; then
+ # Check if gcc -print-prog-name=ld gives a path.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
+$as_echo_n "checking for ld used by $CC... " >&6; }
+ case $host in
+ *-*-mingw*)
+ # gcc leaves a trailing carriage return which upsets mingw
+ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+ *)
+ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+ esac
+ case $ac_prog in
+ # Accept absolute paths.
+ [\\/]* | ?:[\\/]*)
+ re_direlt='/[^/][^/]*/\.\./'
+ # Canonicalize the pathname of ld
+ ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+ while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+ ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+ done
+ test -z "$LD" && LD="$ac_prog"
+ ;;
+ "")
+ # If it fails, then pretend we aren't using GCC.
+ ac_prog=ld
+ ;;
+ *)
+ # If it is relative, then search for the first ld in PATH.
+ with_gnu_ld=unknown
+ ;;
+ esac
+elif test "$with_gnu_ld" = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
+$as_echo_n "checking for GNU ld... " >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
+$as_echo_n "checking for non-GNU ld... " >&6; }
+fi
+if ${lt_cv_path_LD+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -z "$LD"; then
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+ lt_cv_path_LD="$ac_dir/$ac_prog"
+ # Check to see if the program is GNU ld. I'd rather use --version,
+ # but apparently some variants of GNU ld only accept -v.
+ # Break only if it was the GNU/non-GNU ld that we prefer.
+ case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+ *GNU* | *'with BFD'*)
+ test "$with_gnu_ld" != no && break
+ ;;
+ *)
+ test "$with_gnu_ld" != yes && break
+ ;;
+ esac
+ fi
+ done
+ IFS="$lt_save_ifs"
+else
+ lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+$as_echo "$LD" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
+$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
+if ${lt_cv_prog_gnu_ld+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ # I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+ lt_cv_prog_gnu_ld=yes
+ ;;
+*)
+ lt_cv_prog_gnu_ld=no
+ ;;
+esac
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
+$as_echo "$lt_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5
+$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; }
+if ${lt_cv_path_NM+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$NM"; then
+ # Let the user override the nm to test.
+ lt_nm_to_check="$NM"
+ else
+ lt_nm_to_check="${ac_tool_prefix}nm"
+ if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+ lt_nm_to_check="$lt_nm_to_check nm"
+ fi
+ fi
+ for lt_tmp_nm in "$lt_nm_to_check"; do
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ # Strip out any user-provided options from the nm to test twice,
+ # the first time to test to see if nm (rather than its options) has
+ # an explicit path, the second time to yield a file which can be
+ # nm'ed itself.
+ tmp_nm_path="`$ECHO "$lt_tmp_nm" | sed 's, -.*$,,'`"
+ case "$tmp_nm_path" in
+ */*|*\\*) tmp_nm="$lt_tmp_nm";;
+ *) tmp_nm="$ac_dir/$lt_tmp_nm";;
+ esac
+ tmp_nm_to_nm="`$ECHO "$tmp_nm" | sed 's, -.*$,,'`"
+ if test -f "$tmp_nm_to_nm" || test -f "$tmp_nm_to_nm$ac_exeext" ; then
+ # Check to see if the nm accepts a BSD-compat flag.
+ # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+ # nm: unknown option "B" ignored
+ case `"$tmp_nm" -B "$tmp_nm_to_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
+ *$tmp_nm*) lt_cv_path_NM="$tmp_nm -B"
+ break
+ ;;
+ *)
+ case `"$tmp_nm" -p "$tmp_nm_to_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
+ *$tmp_nm*)
+ lt_cv_path_NM="$tmp_nm -p"
+ break
+ ;;
+ *)
+ lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+ continue # so that we can try to find one that supports BSD flags
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ done
+ IFS="$lt_save_ifs"
+ done
+ : ${lt_cv_path_NM=no}
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5
+$as_echo "$lt_cv_path_NM" >&6; }
+if test "$lt_cv_path_NM" != "no"; then
+ NM="$lt_cv_path_NM"
+else
+ # Didn't find any BSD compatible name lister, look for dumpbin.
+ if test -n "$DUMPBIN"; then :
+ # Let the user override the test.
+ else
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in dumpbin "link -dump"
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_DUMPBIN+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$DUMPBIN"; then
+ ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+DUMPBIN=$ac_cv_prog_DUMPBIN
+if test -n "$DUMPBIN"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5
+$as_echo "$DUMPBIN" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$DUMPBIN" && break
+ done
+fi
+if test -z "$DUMPBIN"; then
+ ac_ct_DUMPBIN=$DUMPBIN
+ for ac_prog in dumpbin "link -dump"
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_DUMPBIN"; then
+ ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_DUMPBIN="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN
+if test -n "$ac_ct_DUMPBIN"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5
+$as_echo "$ac_ct_DUMPBIN" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_DUMPBIN" && break
+done
+
+ if test "x$ac_ct_DUMPBIN" = x; then
+ DUMPBIN=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ DUMPBIN=$ac_ct_DUMPBIN
+ fi
+fi
+
+ case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in
+ *COFF*)
+ DUMPBIN="$DUMPBIN -symbols"
+ ;;
+ *)
+ DUMPBIN=:
+ ;;
+ esac
+ fi
+
+ if test "$DUMPBIN" != ":"; then
+ NM="$DUMPBIN"
+ fi
+fi
+test -z "$NM" && NM=nm
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5
+$as_echo_n "checking the name lister ($NM) interface... " >&6; }
+if ${lt_cv_nm_interface+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_nm_interface="BSD nm"
+ echo "int some_variable = 0;" > conftest.$ac_ext
+ (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5)
+ (eval "$ac_compile" 2>conftest.err)
+ cat conftest.err >&5
+ (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+ (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+ cat conftest.err >&5
+ (eval echo "\"\$as_me:$LINENO: output\"" >&5)
+ cat conftest.out >&5
+ if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+ lt_cv_nm_interface="MS dumpbin"
+ fi
+ rm -f conftest*
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5
+$as_echo "$lt_cv_nm_interface" >&6; }
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
+$as_echo_n "checking whether ln -s works... " >&6; }
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
+$as_echo "no, using $LN_S" >&6; }
+fi
+
+# find the maximum length of command line arguments
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5
+$as_echo_n "checking the maximum length of command line arguments... " >&6; }
+if ${lt_cv_sys_max_cmd_len+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ i=0
+ teststring="ABCD"
+
+ case $build_os in
+ msdosdjgpp*)
+ # On DJGPP, this test can blow up pretty badly due to problems in libc
+ # (any single argument exceeding 2000 bytes causes a buffer overrun
+ # during glob expansion). Even if it were fixed, the result of this
+ # check would be larger than it should be.
+ lt_cv_sys_max_cmd_len=12288; # 12K is about right
+ ;;
+
+ gnu*)
+ # Under GNU Hurd, this test is not required because there is
+ # no limit to the length of command line arguments.
+ # Libtool will interpret -1 as no limit whatsoever
+ lt_cv_sys_max_cmd_len=-1;
+ ;;
+
+ cygwin* | mingw* | cegcc*)
+ # On Win9x/ME, this test blows up -- it succeeds, but takes
+ # about 5 minutes as the teststring grows exponentially.
+ # Worse, since 9x/ME are not pre-emptively multitasking,
+ # you end up with a "frozen" computer, even though with patience
+ # the test eventually succeeds (with a max line length of 256k).
+ # Instead, let's just punt: use the minimum linelength reported by
+ # all of the supported platforms: 8192 (on NT/2K/XP).
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ mint*)
+ # On MiNT this can take a long time and run out of memory.
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ amigaos*)
+ # On AmigaOS with pdksh, this test takes hours, literally.
+ # So we just punt and use a minimum line length of 8192.
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+ # This has been around since 386BSD, at least. Likely further.
+ if test -x /sbin/sysctl; then
+ lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+ elif test -x /usr/sbin/sysctl; then
+ lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+ else
+ lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs
+ fi
+ # And add a safety zone
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ ;;
+
+ interix*)
+ # We know the value 262144 and hardcode it with a safety zone (like BSD)
+ lt_cv_sys_max_cmd_len=196608
+ ;;
+
+ osf*)
+ # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+ # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+ # nice to cause kernel panics so lets avoid the loop below.
+ # First set a reasonable default.
+ lt_cv_sys_max_cmd_len=16384
+ #
+ if test -x /sbin/sysconfig; then
+ case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+ *1*) lt_cv_sys_max_cmd_len=-1 ;;
+ esac
+ fi
+ ;;
+ sco3.2v5*)
+ lt_cv_sys_max_cmd_len=102400
+ ;;
+ sysv5* | sco5v6* | sysv4.2uw2*)
+ kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+ if test -n "$kargmax"; then
+ lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'`
+ else
+ lt_cv_sys_max_cmd_len=32768
+ fi
+ ;;
+ *)
+ lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+ if test -n "$lt_cv_sys_max_cmd_len"; then
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ else
+ # Make teststring a little bigger before we do anything with it.
+ # a 1K string should be a reasonable start.
+ for i in 1 2 3 4 5 6 7 8 ; do
+ teststring=$teststring$teststring
+ done
+ SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+ # If test is not a shell built-in, we'll probably end up computing a
+ # maximum length that is only half of the actual maximum length, but
+ # we can't tell.
+ while { test "X"`func_fallback_echo "$teststring$teststring" 2>/dev/null` \
+ = "X$teststring$teststring"; } >/dev/null 2>&1 &&
+ test $i != 17 # 1/2 MB should be enough
+ do
+ i=`expr $i + 1`
+ teststring=$teststring$teststring
+ done
+ # Only check the string length outside the loop.
+ lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+ teststring=
+ # Add a significant safety factor because C++ compilers can tack on
+ # massive amounts of additional arguments before passing them to the
+ # linker. It appears as though 1/2 is a usable value.
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+ fi
+ ;;
+ esac
+
+fi
+
+if test -n $lt_cv_sys_max_cmd_len ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5
+$as_echo "$lt_cv_sys_max_cmd_len" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5
+$as_echo "none" >&6; }
+fi
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+
+
+
+
+
+: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5
+$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; }
+# Try some XSI features
+xsi_shell=no
+( _lt_dummy="a/b/c"
+ test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
+ = c,a/b,, \
+ && eval 'test $(( 1 + 1 )) -eq 2 \
+ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
+ && xsi_shell=yes
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5
+$as_echo "$xsi_shell" >&6; }
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5
+$as_echo_n "checking whether the shell understands \"+=\"... " >&6; }
+lt_shell_append=no
+( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \
+ >/dev/null 2>&1 \
+ && lt_shell_append=yes
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5
+$as_echo "$lt_shell_append" >&6; }
+
+
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+ lt_unset=unset
+else
+ lt_unset=false
+fi
+
+
+
+
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+ # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+ lt_SP2NL='tr \040 \012'
+ lt_NL2SP='tr \015\012 \040\040'
+ ;;
+ *) # EBCDIC based system
+ lt_SP2NL='tr \100 \n'
+ lt_NL2SP='tr \r\n \100\100'
+ ;;
+esac
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
+$as_echo_n "checking for $LD option to reload object files... " >&6; }
+if ${lt_cv_ld_reload_flag+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_ld_reload_flag='-r'
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5
+$as_echo "$lt_cv_ld_reload_flag" >&6; }
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+ darwin*)
+ if test "$GCC" = yes; then
+ reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+ else
+ reload_cmds='$LD$reload_flag -o $output$reload_objs'
+ fi
+ ;;
+esac
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
+set dummy ${ac_tool_prefix}objdump; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_OBJDUMP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$OBJDUMP"; then
+ ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+OBJDUMP=$ac_cv_prog_OBJDUMP
+if test -n "$OBJDUMP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
+$as_echo "$OBJDUMP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OBJDUMP"; then
+ ac_ct_OBJDUMP=$OBJDUMP
+ # Extract the first word of "objdump", so it can be a program name with args.
+set dummy objdump; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_OBJDUMP"; then
+ ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_OBJDUMP="objdump"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
+if test -n "$ac_ct_OBJDUMP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
+$as_echo "$ac_ct_OBJDUMP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_OBJDUMP" = x; then
+ OBJDUMP="false"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ OBJDUMP=$ac_ct_OBJDUMP
+ fi
+else
+ OBJDUMP="$ac_cv_prog_OBJDUMP"
+fi
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5
+$as_echo_n "checking how to recognize dependent libraries... " >&6; }
+if ${lt_cv_deplibs_check_method+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix[4-9]*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+beos*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+bsdi[45]*)
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
+ lt_cv_file_magic_cmd='/usr/bin/file -L'
+ lt_cv_file_magic_test_file=/shlib/libc.so
+ ;;
+
+cygwin*)
+ # func_win32_libid is a shell function defined in ltmain.sh
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ ;;
+
+mingw* | pw32*)
+ # Base MSYS/MinGW do not provide the 'file' command needed by
+ # func_win32_libid shell function, so use a weaker test based on 'objdump',
+ # unless we find 'file', for example because we are cross-compiling.
+ # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin.
+ if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ else
+ lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ fi
+ ;;
+
+cegcc*)
+ # use the weaker test based on 'objdump'. See mingw*.
+ lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ ;;
+
+darwin* | rhapsody*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+freebsd* | dragonfly*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+ case $host_cpu in
+ i*86 )
+ # Not sure whether the presence of OpenBSD here was a mistake.
+ # Let's accept both of them until this is cleared up.
+ lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library'
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+ ;;
+ esac
+ else
+ lt_cv_deplibs_check_method=pass_all
+ fi
+ ;;
+
+gnu*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+haiku*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+hpux10.20* | hpux11*)
+ lt_cv_file_magic_cmd=/usr/bin/file
+ case $host_cpu in
+ ia64*)
+ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'
+ lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+ ;;
+ hppa*64*)
+ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'
+ lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+ ;;
+ *)
+ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library'
+ lt_cv_file_magic_test_file=/usr/lib/libc.sl
+ ;;
+ esac
+ ;;
+
+interix[3-9]*)
+ # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$'
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $LD in
+ *-32|*"-32 ") libmagic=32-bit;;
+ *-n32|*"-n32 ") libmagic=N32;;
+ *-64|*"-64 ") libmagic=64-bit;;
+ *) libmagic=never-match;;
+ esac
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$'
+ fi
+ ;;
+
+newos6*)
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=/usr/lib/libnls.so
+ ;;
+
+*nto* | *qnx*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+openbsd*)
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+ fi
+ ;;
+
+osf3* | osf4* | osf5*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+rdos*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+solaris*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sysv4 | sysv4.3*)
+ case $host_vendor in
+ motorola)
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+ ;;
+ ncr)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ sequent)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
+ ;;
+ sni)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
+ lt_cv_file_magic_test_file=/lib/libc.so
+ ;;
+ siemens)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ pc)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ esac
+ ;;
+
+tpf*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+esac
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
+$as_echo "$lt_cv_deplibs_check_method" >&6; }
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+
+
+
+
+
+
+
+
+
+
+
+plugin_option=
+plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
+for plugin in $plugin_names; do
+ plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin`
+ if test x$plugin_so = x$plugin; then
+ plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin`
+ fi
+ if test x$plugin_so != x$plugin; then
+ plugin_option="--plugin $plugin_so"
+ break
+ fi
+done
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ar; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_AR+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$AR"; then
+ ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_AR="${ac_tool_prefix}ar"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
+$as_echo "$AR" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_AR"; then
+ ac_ct_AR=$AR
+ # Extract the first word of "ar", so it can be a program name with args.
+set dummy ar; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_AR+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_AR"; then
+ ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_AR="ar"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
+$as_echo "$ac_ct_AR" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_AR" = x; then
+ AR="false"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ AR=$ac_ct_AR
+ fi
+else
+ AR="$ac_cv_prog_AR"
+fi
+
+test -z "$AR" && AR=ar
+if test -n "$plugin_option"; then
+ if $AR --help 2>&1 | grep -q "\--plugin"; then
+ touch conftest.c
+ $AR $plugin_option rc conftest.a conftest.c
+ if test "$?" != 0; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
+$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
+ else
+ AR="$AR $plugin_option"
+ fi
+ rm -f conftest.*
+ fi
+fi
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+
+
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_STRIP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$STRIP"; then
+ ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+ ac_ct_STRIP=$STRIP
+ # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_STRIP"; then
+ ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_STRIP="strip"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_STRIP" = x; then
+ STRIP=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ STRIP=$ac_ct_STRIP
+ fi
+else
+ STRIP="$ac_cv_prog_STRIP"
+fi
+
+test -z "$STRIP" && STRIP=:
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_RANLIB+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$RANLIB"; then
+ ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
+$as_echo "$RANLIB" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+ ac_ct_RANLIB=$RANLIB
+ # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_RANLIB"; then
+ ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_RANLIB="ranlib"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
+$as_echo "$ac_ct_RANLIB" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_RANLIB" = x; then
+ RANLIB=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ RANLIB=$ac_ct_RANLIB
+ fi
+else
+ RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+test -z "$RANLIB" && RANLIB=:
+if test -n "$plugin_option" && test "$RANLIB" != ":"; then
+ if $RANLIB --help 2>&1 | grep -q "\--plugin"; then
+ RANLIB="$RANLIB $plugin_option"
+ fi
+fi
+
+
+
+
+
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+ case $host_os in
+ openbsd*)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+ ;;
+ *)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+ ;;
+ esac
+ old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+fi
+
+case $host_os in
+ darwin*)
+ lock_old_archive_extraction=yes ;;
+ *)
+ lock_old_archive_extraction=no ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5
+$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; }
+if ${lt_cv_sys_global_symbol_pipe+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix. What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[BCDEGRST]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+ symcode='[BCDT]'
+ ;;
+cygwin* | mingw* | pw32* | cegcc*)
+ symcode='[ABCDGISTW]'
+ ;;
+hpux*)
+ if test "$host_cpu" = ia64; then
+ symcode='[ABCDEGRST]'
+ fi
+ ;;
+irix* | nonstopux*)
+ symcode='[BCDEGRST]'
+ ;;
+osf*)
+ symcode='[BCDEGQRST]'
+ ;;
+solaris*)
+ symcode='[BCDRT]'
+ ;;
+sco3.2v5*)
+ symcode='[DT]'
+ ;;
+sysv4.2uw2*)
+ symcode='[DT]'
+ ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+ symcode='[ABDT]'
+ ;;
+sysv4)
+ symcode='[DFNSTU]'
+ ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+ symcode='[ABCDGIRSTW]' ;;
+esac
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+ opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+ ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+ # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+ symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+ # Write the raw and C identifiers.
+ if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+ # Fake it for dumpbin and say T for any non-static function
+ # and D for any global variable.
+ # Also find C++ and __fastcall symbols from MSVC++,
+ # which start with @ or ?.
+ lt_cv_sys_global_symbol_pipe="$AWK '"\
+" {last_section=section; section=\$ 3};"\
+" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+" \$ 0!~/External *\|/{next};"\
+" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+" {if(hide[section]) next};"\
+" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
+" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
+" s[1]~/^[@?]/{print s[1], s[1]; next};"\
+" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
+" ' prfx=^$ac_symprfx"
+ else
+ lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+ fi
+
+ # Check to see that the pipe works correctly.
+ pipe_works=no
+
+ rm -f conftest*
+ cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ # Now try to grab the symbols.
+ nlist=conftest.nm
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5
+ (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s "$nlist"; then
+ # Try sorting and uniquifying the output.
+ if sort "$nlist" | uniq > "$nlist"T; then
+ mv -f "$nlist"T "$nlist"
+ else
+ rm -f "$nlist"T
+ fi
+
+ # Make sure that we snagged all the symbols we need.
+ if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+ if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+ cat <<_LT_EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_LT_EOF
+ # Now generate the symbol file.
+ eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+ cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols. */
+const struct {
+ const char *name;
+ void *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[] =
+{
+ { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+ $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+ cat <<\_LT_EOF >> conftest.$ac_ext
+ {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+ return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+ # Now try linking the two files.
+ mv conftest.$ac_objext conftstm.$ac_objext
+ lt_save_LIBS="$LIBS"
+ lt_save_CFLAGS="$CFLAGS"
+ LIBS="conftstm.$ac_objext"
+ CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s conftest${ac_exeext}; then
+ pipe_works=yes
+ fi
+ LIBS="$lt_save_LIBS"
+ CFLAGS="$lt_save_CFLAGS"
+ else
+ echo "cannot find nm_test_func in $nlist" >&5
+ fi
+ else
+ echo "cannot find nm_test_var in $nlist" >&5
+ fi
+ else
+ echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
+ fi
+ else
+ echo "$progname: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ fi
+ rm -rf conftest* conftst*
+
+ # Do not use the global_symbol_pipe unless it works.
+ if test "$pipe_works" = yes; then
+ break
+ else
+ lt_cv_sys_global_symbol_pipe=
+ fi
+done
+
+fi
+
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+ lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5
+$as_echo "failed" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
+$as_echo "ok" >&6; }
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# Check whether --enable-libtool-lock was given.
+if test "${enable_libtool_lock+set}" = set; then :
+ enableval=$enable_libtool_lock;
+fi
+
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *ELF-32*)
+ HPUX_IA64_MODE="32"
+ ;;
+ *ELF-64*)
+ HPUX_IA64_MODE="64"
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+*-*-irix6*)
+ # Find out which ABI we are using.
+ echo '#line '$LINENO' "configure"' > conftest.$ac_ext
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -melf32bsmip"
+ ;;
+ *N32*)
+ LD="${LD-ld} -melf32bmipn32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -melf64bmip"
+ ;;
+ esac
+ else
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -32"
+ ;;
+ *N32*)
+ LD="${LD-ld} -n32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -64"
+ ;;
+ esac
+ fi
+ fi
+ rm -rf conftest*
+ ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ case `/usr/bin/file conftest.o` in
+ *32-bit*)
+ case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_i386_fbsd"
+ ;;
+ x86_64-*linux*)
+ case `/usr/bin/file conftest.o` in
+ *x86-64*)
+ LD="${LD-ld} -m elf32_x86_64"
+ ;;
+ *)
+ LD="${LD-ld} -m elf_i386"
+ ;;
+ esac
+ ;;
+ powerpc64le-*linux*)
+ LD="${LD-ld} -m elf32lppclinux"
+ ;;
+ powerpc64-*linux*)
+ LD="${LD-ld} -m elf32ppclinux"
+ ;;
+ s390x-*linux*)
+ LD="${LD-ld} -m elf_s390"
+ ;;
+ sparc64-*linux*)
+ LD="${LD-ld} -m elf32_sparc"
+ ;;
+ esac
+ ;;
+ *64-bit*)
+ case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_x86_64_fbsd"
+ ;;
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_x86_64"
+ ;;
+ powerpcle-*linux*)
+ LD="${LD-ld} -m elf64lppc"
+ ;;
+ powerpc-*linux*)
+ LD="${LD-ld} -m elf64ppc"
+ ;;
+ s390*-*linux*|s390*-*tpf*)
+ LD="${LD-ld} -m elf64_s390"
+ ;;
+ sparc*-*linux*)
+ LD="${LD-ld} -m elf64_sparc"
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+
+*-*-sco3.2v5*)
+ # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+ SAVE_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -belf"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5
+$as_echo_n "checking whether the C compiler needs -belf... " >&6; }
+if ${lt_cv_cc_needs_belf+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ lt_cv_cc_needs_belf=yes
+else
+ lt_cv_cc_needs_belf=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5
+$as_echo "$lt_cv_cc_needs_belf" >&6; }
+ if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+ # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+ CFLAGS="$SAVE_CFLAGS"
+ fi
+ ;;
+sparc*-*solaris*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ case `/usr/bin/file conftest.o` in
+ *64-bit*)
+ case $lt_cv_prog_gnu_ld in
+ yes*) LD="${LD-ld} -m elf64_sparc" ;;
+ *)
+ if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+ LD="${LD-ld} -64"
+ fi
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+esac
+
+need_locks="$enable_libtool_lock"
+
+
+ case $host_os in
+ rhapsody* | darwin*)
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dsymutil; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_DSYMUTIL+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$DSYMUTIL"; then
+ ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+DSYMUTIL=$ac_cv_prog_DSYMUTIL
+if test -n "$DSYMUTIL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5
+$as_echo "$DSYMUTIL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_DSYMUTIL"; then
+ ac_ct_DSYMUTIL=$DSYMUTIL
+ # Extract the first word of "dsymutil", so it can be a program name with args.
+set dummy dsymutil; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_DSYMUTIL"; then
+ ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_DSYMUTIL="dsymutil"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL
+if test -n "$ac_ct_DSYMUTIL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5
+$as_echo "$ac_ct_DSYMUTIL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_DSYMUTIL" = x; then
+ DSYMUTIL=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ DSYMUTIL=$ac_ct_DSYMUTIL
+ fi
+else
+ DSYMUTIL="$ac_cv_prog_DSYMUTIL"
+fi
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args.
+set dummy ${ac_tool_prefix}nmedit; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_NMEDIT+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$NMEDIT"; then
+ ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+NMEDIT=$ac_cv_prog_NMEDIT
+if test -n "$NMEDIT"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5
+$as_echo "$NMEDIT" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_NMEDIT"; then
+ ac_ct_NMEDIT=$NMEDIT
+ # Extract the first word of "nmedit", so it can be a program name with args.
+set dummy nmedit; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_NMEDIT"; then
+ ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_NMEDIT="nmedit"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT
+if test -n "$ac_ct_NMEDIT"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5
+$as_echo "$ac_ct_NMEDIT" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_NMEDIT" = x; then
+ NMEDIT=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ NMEDIT=$ac_ct_NMEDIT
+ fi
+else
+ NMEDIT="$ac_cv_prog_NMEDIT"
+fi
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args.
+set dummy ${ac_tool_prefix}lipo; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_LIPO+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$LIPO"; then
+ ac_cv_prog_LIPO="$LIPO" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_LIPO="${ac_tool_prefix}lipo"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+LIPO=$ac_cv_prog_LIPO
+if test -n "$LIPO"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5
+$as_echo "$LIPO" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_LIPO"; then
+ ac_ct_LIPO=$LIPO
+ # Extract the first word of "lipo", so it can be a program name with args.
+set dummy lipo; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_LIPO+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_LIPO"; then
+ ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_LIPO="lipo"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO
+if test -n "$ac_ct_LIPO"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5
+$as_echo "$ac_ct_LIPO" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_LIPO" = x; then
+ LIPO=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ LIPO=$ac_ct_LIPO
+ fi
+else
+ LIPO="$ac_cv_prog_LIPO"
+fi
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}otool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_OTOOL+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$OTOOL"; then
+ ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_OTOOL="${ac_tool_prefix}otool"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+OTOOL=$ac_cv_prog_OTOOL
+if test -n "$OTOOL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5
+$as_echo "$OTOOL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OTOOL"; then
+ ac_ct_OTOOL=$OTOOL
+ # Extract the first word of "otool", so it can be a program name with args.
+set dummy otool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_OTOOL+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_OTOOL"; then
+ ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_OTOOL="otool"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL
+if test -n "$ac_ct_OTOOL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5
+$as_echo "$ac_ct_OTOOL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_OTOOL" = x; then
+ OTOOL=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ OTOOL=$ac_ct_OTOOL
+ fi
+else
+ OTOOL="$ac_cv_prog_OTOOL"
+fi
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args.
+set dummy ${ac_tool_prefix}otool64; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_OTOOL64+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$OTOOL64"; then
+ ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+OTOOL64=$ac_cv_prog_OTOOL64
+if test -n "$OTOOL64"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5
+$as_echo "$OTOOL64" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OTOOL64"; then
+ ac_ct_OTOOL64=$OTOOL64
+ # Extract the first word of "otool64", so it can be a program name with args.
+set dummy otool64; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_OTOOL64"; then
+ ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_OTOOL64="otool64"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64
+if test -n "$ac_ct_OTOOL64"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5
+$as_echo "$ac_ct_OTOOL64" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_OTOOL64" = x; then
+ OTOOL64=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ OTOOL64=$ac_ct_OTOOL64
+ fi
+else
+ OTOOL64="$ac_cv_prog_OTOOL64"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5
+$as_echo_n "checking for -single_module linker flag... " >&6; }
+if ${lt_cv_apple_cc_single_mod+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_apple_cc_single_mod=no
+ if test -z "${LT_MULTI_MODULE}"; then
+ # By default we will add the -single_module flag. You can override
+ # by either setting the environment variable LT_MULTI_MODULE
+ # non-empty at configure time, or by adding -multi_module to the
+ # link flags.
+ rm -rf libconftest.dylib*
+ echo "int foo(void){return 1;}" > conftest.c
+ echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+-dynamiclib -Wl,-single_module conftest.c" >&5
+ $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+ _lt_result=$?
+ if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
+ lt_cv_apple_cc_single_mod=yes
+ else
+ cat conftest.err >&5
+ fi
+ rm -rf libconftest.dylib*
+ rm -f conftest.*
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5
+$as_echo "$lt_cv_apple_cc_single_mod" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5
+$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; }
+if ${lt_cv_ld_exported_symbols_list+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_ld_exported_symbols_list=no
+ save_LDFLAGS=$LDFLAGS
+ echo "_main" > conftest.sym
+ LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ lt_cv_ld_exported_symbols_list=yes
+else
+ lt_cv_ld_exported_symbols_list=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5
+$as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5
+$as_echo_n "checking for -force_load linker flag... " >&6; }
+if ${lt_cv_ld_force_load+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_ld_force_load=no
+ cat > conftest.c << _LT_EOF
+int forced_loaded() { return 2;}
+_LT_EOF
+ echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5
+ $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5
+ echo "$AR cru libconftest.a conftest.o" >&5
+ $AR cru libconftest.a conftest.o 2>&5
+ cat > conftest.c << _LT_EOF
+int main() { return 0;}
+_LT_EOF
+ echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5
+ $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
+ _lt_result=$?
+ if test -f conftest && test ! -s conftest.err && test $_lt_result = 0 && $GREP forced_load conftest 2>&1 >/dev/null; then
+ lt_cv_ld_force_load=yes
+ else
+ cat conftest.err >&5
+ fi
+ rm -f conftest.err libconftest.a conftest conftest.c
+ rm -rf conftest.dSYM
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5
+$as_echo "$lt_cv_ld_force_load" >&6; }
+ case $host_os in
+ rhapsody* | darwin1.[012])
+ _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
+ darwin1.*)
+ _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+ darwin*) # darwin 5.x on
+ # if running on 10.5 or later, the deployment target defaults
+ # to the OS version, if on x86, and 10.4, the deployment
+ # target defaults to 10.4. Don't you love it?
+ case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+ 10.0,*86*-darwin8*|10.0,*-darwin[91]*)
+ _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+ 10.[012][,.]*)
+ _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+ 10.*)
+ _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+ esac
+ ;;
+ esac
+ if test "$lt_cv_apple_cc_single_mod" = "yes"; then
+ _lt_dar_single_mod='$single_module'
+ fi
+ if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
+ _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
+ else
+ _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ fi
+ if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then
+ _lt_dsymutil='~$DSYMUTIL $lib || :'
+ else
+ _lt_dsymutil=
+ fi
+ ;;
+ esac
+
+for ac_header in dlfcn.h
+do :
+ ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default
+"
+if test "x$ac_cv_header_dlfcn_h" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_DLFCN_H 1
+_ACEOF
+
+fi
+
+done
+
+
+
+
+
+
+# Set options
+
+
+
+ enable_dlopen=no
+
+
+ enable_win32_dll=no
+
+
+ # Check whether --enable-shared was given.
+if test "${enable_shared+set}" = set; then :
+ enableval=$enable_shared; p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_shared=yes ;;
+ no) enable_shared=no ;;
+ *)
+ enable_shared=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_shared=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac
+else
+ enable_shared=yes
+fi
+
+
+
+
+
+
+
+
+
+ # Check whether --enable-static was given.
+if test "${enable_static+set}" = set; then :
+ enableval=$enable_static; p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_static=yes ;;
+ no) enable_static=no ;;
+ *)
+ enable_static=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_static=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac
+else
+ enable_static=yes
+fi
+
+
+
+
+
+
+
+
+
+
+# Check whether --with-pic was given.
+if test "${with_pic+set}" = set; then :
+ withval=$with_pic; pic_mode="$withval"
+else
+ pic_mode=default
+fi
+
+
+test -z "$pic_mode" && pic_mode=default
+
+
+
+
+
+
+
+ # Check whether --enable-fast-install was given.
+if test "${enable_fast_install+set}" = set; then :
+ enableval=$enable_fast_install; p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_fast_install=yes ;;
+ no) enable_fast_install=no ;;
+ *)
+ enable_fast_install=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_fast_install=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac
+else
+ enable_fast_install=yes
+fi
+
+
+
+
+
+
+
+
+
+
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ltmain"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+test -z "$LN_S" && LN_S="ln -s"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5
+$as_echo_n "checking for objdir... " >&6; }
+if ${lt_cv_objdir+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+ lt_cv_objdir=.libs
+else
+ # MS-DOS does not allow filenames that begin with a dot.
+ lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5
+$as_echo "$lt_cv_objdir" >&6; }
+objdir=$lt_cv_objdir
+
+
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define LT_OBJDIR "$lt_cv_objdir/"
+_ACEOF
+
+
+
+
+case $host_os in
+aix3*)
+ # AIX sometimes has problems with the GCC collect2 program. For some
+ # reason, if we set the COLLECT_NAMES environment variable, the problems
+ # vanish in a puff of smoke.
+ if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+ fi
+ ;;
+esac
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+for cc_temp in $compiler""; do
+ case $cc_temp in
+ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+done
+cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+ if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5
+$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; }
+if ${lt_cv_path_MAGIC_CMD+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $MAGIC_CMD in
+[\\/*] | ?:[\\/]*)
+ lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+ ;;
+*)
+ lt_save_MAGIC_CMD="$MAGIC_CMD"
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+ for ac_dir in $ac_dummy; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/${ac_tool_prefix}file; then
+ lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file"
+ if test -n "$file_magic_test_file"; then
+ case $deplibs_check_method in
+ "file_magic "*)
+ file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+ MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ :
+ else
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such. This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem. Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+ fi ;;
+ esac
+ fi
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+ MAGIC_CMD="$lt_save_MAGIC_CMD"
+ ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
+$as_echo "$MAGIC_CMD" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+
+
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+ if test -n "$ac_tool_prefix"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5
+$as_echo_n "checking for file... " >&6; }
+if ${lt_cv_path_MAGIC_CMD+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $MAGIC_CMD in
+[\\/*] | ?:[\\/]*)
+ lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+ ;;
+*)
+ lt_save_MAGIC_CMD="$MAGIC_CMD"
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+ for ac_dir in $ac_dummy; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/file; then
+ lt_cv_path_MAGIC_CMD="$ac_dir/file"
+ if test -n "$file_magic_test_file"; then
+ case $deplibs_check_method in
+ "file_magic "*)
+ file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+ MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ :
+ else
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such. This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem. Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+ fi ;;
+ esac
+ fi
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+ MAGIC_CMD="$lt_save_MAGIC_CMD"
+ ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
+$as_echo "$MAGIC_CMD" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ else
+ MAGIC_CMD=:
+ fi
+fi
+
+ fi
+ ;;
+esac
+
+# Use C for the default configuration in the libtool script
+
+lt_save_CC="$CC"
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+objext=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+
+lt_prog_compiler_no_builtin_flag=
+
+if test "$GCC" = yes; then
+ case $cc_basename in
+ nvcc*)
+ lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;;
+ *)
+ lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;;
+ esac
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; }
+if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_rtti_exceptions=no
+ ac_outfile=conftest.$ac_objext
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="-fno-rtti -fno-exceptions"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+ $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_rtti_exceptions=yes
+ fi
+ fi
+ $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
+$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; }
+
+if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
+ lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
+else
+ :
+fi
+
+fi
+
+
+
+
+
+
+ lt_prog_compiler_wl=
+lt_prog_compiler_pic=
+lt_prog_compiler_static=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+
+ if test "$GCC" = yes; then
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_static='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ lt_prog_compiler_static='-Bstatic'
+ fi
+ lt_prog_compiler_pic='-fPIC'
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ lt_prog_compiler_pic='-fPIC'
+ ;;
+ m68k)
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the `-m68020' flag to GCC prevents building anything better,
+ # like `-m68040'.
+ lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
+ ;;
+ esac
+ ;;
+
+ beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+
+ mingw* | cygwin* | pw32* | os2* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ # Although the cygwin gcc ignores -fPIC, still need this for old-style
+ # (--disable-auto-import) libraries
+ lt_prog_compiler_pic='-DDLL_EXPORT'
+ ;;
+
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ lt_prog_compiler_pic='-fno-common'
+ ;;
+
+ haiku*)
+ # PIC is the default for Haiku.
+ # The "-static" flag exists, but is broken.
+ lt_prog_compiler_static=
+ ;;
+
+ hpux*)
+ # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+ # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag
+ # sets the default TLS model and affects inlining.
+ case $host_cpu in
+ hppa*64*)
+ # +Z the default
+ ;;
+ *)
+ lt_prog_compiler_pic='-fPIC'
+ ;;
+ esac
+ ;;
+
+ interix[3-9]*)
+ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+ # Instead, we relocate shared libraries at runtime.
+ ;;
+
+ msdosdjgpp*)
+ # Just because we use GCC doesn't mean we suddenly get shared libraries
+ # on systems that don't support them.
+ lt_prog_compiler_can_build_shared=no
+ enable_shared=no
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ lt_prog_compiler_pic='-fPIC -shared'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ lt_prog_compiler_pic=-Kconform_pic
+ fi
+ ;;
+
+ *)
+ lt_prog_compiler_pic='-fPIC'
+ ;;
+ esac
+
+ case $cc_basename in
+ nvcc*) # Cuda Compiler Driver 2.2
+ lt_prog_compiler_wl='-Xlinker '
+ lt_prog_compiler_pic='-Xcompiler -fPIC'
+ ;;
+ esac
+ else
+ # PORTME Check for flag to pass linker flags through the system compiler.
+ case $host_os in
+ aix*)
+ lt_prog_compiler_wl='-Wl,'
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ lt_prog_compiler_static='-Bstatic'
+ else
+ lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+
+ mingw* | cygwin* | pw32* | os2* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ lt_prog_compiler_pic='-DDLL_EXPORT'
+ ;;
+
+ hpux9* | hpux10* | hpux11*)
+ lt_prog_compiler_wl='-Wl,'
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ lt_prog_compiler_pic='+Z'
+ ;;
+ esac
+ # Is there a better lt_prog_compiler_static that works with the bundled CC?
+ lt_prog_compiler_static='${wl}-a ${wl}archive'
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ lt_prog_compiler_wl='-Wl,'
+ # PIC (with -KPIC) is the default.
+ lt_prog_compiler_static='-non_shared'
+ ;;
+
+ linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ case $cc_basename in
+ # old Intel for x86_64 which still supported -KPIC.
+ ecc*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-static'
+ ;;
+ # icc used to be incompatible with GCC.
+ # ICC 10 doesn't accept -KPIC any more.
+ icc* | ifort*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-fPIC'
+ lt_prog_compiler_static='-static'
+ ;;
+ # Lahey Fortran 8.1.
+ lf95*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='--shared'
+ lt_prog_compiler_static='--static'
+ ;;
+ pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
+ # Portland Group compilers (*not* the Pentium gcc compiler,
+ # which looks to be a dead project)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-fpic'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+ ccc*)
+ lt_prog_compiler_wl='-Wl,'
+ # All Alpha code is PIC.
+ lt_prog_compiler_static='-non_shared'
+ ;;
+ xl* | bgxl* | bgf* | mpixl*)
+ # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-qpic'
+ lt_prog_compiler_static='-qstaticlink'
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ F* | *Sun*Fortran*)
+ # Sun Fortran 8.3 passes all unrecognized flags to the linker
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ lt_prog_compiler_wl=''
+ ;;
+ *Sun\ C*)
+ # Sun C 5.9
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ lt_prog_compiler_wl='-Wl,'
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+
+ newsos6)
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ lt_prog_compiler_pic='-fPIC -shared'
+ ;;
+
+ osf3* | osf4* | osf5*)
+ lt_prog_compiler_wl='-Wl,'
+ # All OSF/1 code is PIC.
+ lt_prog_compiler_static='-non_shared'
+ ;;
+
+ rdos*)
+ lt_prog_compiler_static='-non_shared'
+ ;;
+
+ solaris*)
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ case $cc_basename in
+ f77* | f90* | f95*)
+ lt_prog_compiler_wl='-Qoption ld ';;
+ *)
+ lt_prog_compiler_wl='-Wl,';;
+ esac
+ ;;
+
+ sunos4*)
+ lt_prog_compiler_wl='-Qoption ld '
+ lt_prog_compiler_pic='-PIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ sysv4 | sysv4.2uw2* | sysv4.3*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec ;then
+ lt_prog_compiler_pic='-Kconform_pic'
+ lt_prog_compiler_static='-Bstatic'
+ fi
+ ;;
+
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ unicos*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_can_build_shared=no
+ ;;
+
+ uts4*)
+ lt_prog_compiler_pic='-pic'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ *)
+ lt_prog_compiler_can_build_shared=no
+ ;;
+ esac
+ fi
+
+case $host_os in
+ # For platforms which do not support PIC, -DPIC is meaningless:
+ *djgpp*)
+ lt_prog_compiler_pic=
+ ;;
+ *)
+ lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
+ ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5
+$as_echo "$lt_prog_compiler_pic" >&6; }
+
+
+
+
+
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
+$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; }
+if ${lt_cv_prog_compiler_pic_works+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_pic_works=no
+ ac_outfile=conftest.$ac_objext
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="$lt_prog_compiler_pic -DPIC"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+ $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_pic_works=yes
+ fi
+ fi
+ $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5
+$as_echo "$lt_cv_prog_compiler_pic_works" >&6; }
+
+if test x"$lt_cv_prog_compiler_pic_works" = xyes; then
+ case $lt_prog_compiler_pic in
+ "" | " "*) ;;
+ *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;;
+ esac
+else
+ lt_prog_compiler_pic=
+ lt_prog_compiler_can_build_shared=no
+fi
+
+fi
+
+
+
+
+
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
+if ${lt_cv_prog_compiler_static_works+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_static_works=no
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+ echo "$lt_simple_link_test_code" > conftest.$ac_ext
+ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+ # The linker can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test -s conftest.err; then
+ # Append any errors to the config.log.
+ cat conftest.err 1>&5
+ $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if diff conftest.exp conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_static_works=yes
+ fi
+ else
+ lt_cv_prog_compiler_static_works=yes
+ fi
+ fi
+ $RM -r conftest*
+ LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5
+$as_echo "$lt_cv_prog_compiler_static_works" >&6; }
+
+if test x"$lt_cv_prog_compiler_static_works" = xyes; then
+ :
+else
+ lt_prog_compiler_static=
+fi
+
+
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_c_o=no
+ $RM -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_c_o=yes
+ fi
+ fi
+ chmod u+w . 2>&5
+ $RM conftest*
+ # SGI C++ compiler will create directory out/ii_files/ for
+ # template instantiation
+ test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+ $RM out/* && rmdir out
+ cd ..
+ $RM -r conftest
+ $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
+$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
+
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_c_o=no
+ $RM -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_c_o=yes
+ fi
+ fi
+ chmod u+w . 2>&5
+ $RM conftest*
+ # SGI C++ compiler will create directory out/ii_files/ for
+ # template instantiation
+ test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+ $RM out/* && rmdir out
+ cd ..
+ $RM -r conftest
+ $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
+$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
+
+
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then
+ # do not overwrite the value of need_locks provided by the user
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
+$as_echo_n "checking if we can lock with hard links... " >&6; }
+ hard_links=yes
+ $RM conftest*
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ touch conftest.a
+ ln conftest.a conftest.b 2>&5 || hard_links=no
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
+$as_echo "$hard_links" >&6; }
+ if test "$hard_links" = no; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+ need_locks=warn
+ fi
+else
+ need_locks=no
+fi
+
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+
+ runpath_var=
+ allow_undefined_flag=
+ always_export_symbols=no
+ archive_cmds=
+ archive_expsym_cmds=
+ compiler_needs_object=no
+ enable_shared_with_static_runtimes=no
+ export_dynamic_flag_spec=
+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ hardcode_automatic=no
+ hardcode_direct=no
+ hardcode_direct_absolute=no
+ hardcode_libdir_flag_spec=
+ hardcode_libdir_flag_spec_ld=
+ hardcode_libdir_separator=
+ hardcode_minus_L=no
+ hardcode_shlibpath_var=unsupported
+ inherit_rpath=no
+ link_all_deplibs=unknown
+ module_cmds=
+ module_expsym_cmds=
+ old_archive_from_new_cmds=
+ old_archive_from_expsyms_cmds=
+ thread_safe_flag_spec=
+ whole_archive_flag_spec=
+ # include_expsyms should be a list of space-separated symbols to be *always*
+ # included in the symbol list
+ include_expsyms=
+ # exclude_expsyms can be an extended regexp of symbols to exclude
+ # it will be wrapped by ` (' and `)$', so one must not match beginning or
+ # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+ # as well as any symbol that contains `d'.
+ exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+ # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+ # platforms (ab)use it in PIC code, but their linkers get confused if
+ # the symbol is explicitly referenced. Since portable code cannot
+ # rely on this symbol name, it's probably fine to never include it in
+ # preloaded symbol tables.
+ # Exclude shared library initialization/finalization symbols.
+ extract_expsyms_cmds=
+
+ case $host_os in
+ cygwin* | mingw* | pw32* | cegcc*)
+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ if test "$GCC" != yes; then
+ with_gnu_ld=no
+ fi
+ ;;
+ interix*)
+ # we just hope/assume this is gcc and not c89 (= MSVC++)
+ with_gnu_ld=yes
+ ;;
+ openbsd*)
+ with_gnu_ld=no
+ ;;
+ esac
+
+ ld_shlibs=yes
+
+ # On some targets, GNU ld is compatible enough with the native linker
+ # that we're better off using the native interface for both.
+ lt_use_gnu_ld_interface=no
+ if test "$with_gnu_ld" = yes; then
+ case $host_os in
+ aix*)
+ # The AIX port of GNU ld has always aspired to compatibility
+ # with the native linker. However, as the warning in the GNU ld
+ # block says, versions before 2.19.5* couldn't really create working
+ # shared libraries, regardless of the interface used.
+ case `$LD -v 2>&1` in
+ *\ \(GNU\ Binutils\)\ 2.19.5*) ;;
+ *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;;
+ *\ \(GNU\ Binutils\)\ [3-9]*) ;;
+ *)
+ lt_use_gnu_ld_interface=yes
+ ;;
+ esac
+ ;;
+ *)
+ lt_use_gnu_ld_interface=yes
+ ;;
+ esac
+ fi
+
+ if test "$lt_use_gnu_ld_interface" = yes; then
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ wlarc='${wl}'
+
+ # Set some defaults for GNU ld with shared library support. These
+ # are reset later if shared libraries are not supported. Putting them
+ # here allows them to be overridden if necessary.
+ runpath_var=LD_RUN_PATH
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ export_dynamic_flag_spec='${wl}--export-dynamic'
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+ whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ whole_archive_flag_spec=
+ fi
+ supports_anon_versioning=no
+ case `$LD -v 2>&1` in
+ *GNU\ gold*) supports_anon_versioning=yes ;;
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+ *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+ *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+ *\ 2.11.*) ;; # other 2.11 versions
+ *) supports_anon_versioning=yes ;;
+ esac
+
+ # See if GNU ld supports shared libraries.
+ case $host_os in
+ aix[3-9]*)
+ # On AIX/PPC, the GNU linker is very broken
+ if test "$host_cpu" != ia64; then
+ ld_shlibs=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.19, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support. If you
+*** really care for shared libraries, you may want to install binutils
+*** 2.20 or above, or modify your PATH so that a non-GNU linker is found.
+*** You will then need to restart the configuration process.
+
+_LT_EOF
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds=''
+ ;;
+ m68k)
+ archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ ;;
+ esac
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ allow_undefined_flag=unsupported
+ # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ cygwin* | mingw* | pw32* | cegcc*)
+ # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
+ # as there is no search path for DLLs.
+ hardcode_libdir_flag_spec='-L$libdir'
+ export_dynamic_flag_spec='${wl}--export-all-symbols'
+ allow_undefined_flag=unsupported
+ always_export_symbols=no
+ enable_shared_with_static_runtimes=yes
+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
+
+ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is; otherwise, prepend...
+ archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ haiku*)
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ link_all_deplibs=yes
+ ;;
+
+ interix[3-9]*)
+ hardcode_direct=no
+ hardcode_shlibpath_var=no
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ export_dynamic_flag_spec='${wl}-E'
+ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+ # Instead, shared libraries are loaded at an image base (0x10000000 by
+ # default) and relocated if they conflict, which is a slow very memory
+ # consuming and fragmenting process. To avoid this, we pick a random,
+ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ ;;
+
+ gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+ tmp_diet=no
+ if test "$host_os" = linux-dietlibc; then
+ case $cc_basename in
+ diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn)
+ esac
+ fi
+ if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+ && test "$tmp_diet" = no
+ then
+ tmp_addflag=' $pic_flag'
+ tmp_sharedflag='-shared'
+ case $cc_basename,$host_cpu in
+ pgcc*) # Portland Group C compiler
+ whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag'
+ ;;
+ pgf77* | pgf90* | pgf95* | pgfortran*)
+ # Portland Group f77 and f90 compilers
+ whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag -Mnomain' ;;
+ ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
+ tmp_addflag=' -i_dynamic' ;;
+ efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
+ tmp_addflag=' -i_dynamic -nofor_main' ;;
+ ifc* | ifort*) # Intel Fortran compiler
+ tmp_addflag=' -nofor_main' ;;
+ lf95*) # Lahey Fortran 8.1
+ whole_archive_flag_spec=
+ tmp_sharedflag='--shared' ;;
+ xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+ tmp_sharedflag='-qmkshrobj'
+ tmp_addflag= ;;
+ nvcc*) # Cuda Compiler Driver 2.2
+ whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+ compiler_needs_object=yes
+ ;;
+ esac
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*) # Sun C 5.9
+ whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+ compiler_needs_object=yes
+ tmp_sharedflag='-G' ;;
+ *Sun\ F*) # Sun Fortran 8.3
+ tmp_sharedflag='-G' ;;
+ esac
+ archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+ if test "x$supports_anon_versioning" = xyes; then
+ archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+ fi
+
+ case $cc_basename in
+ xlf* | bgf* | bgxlf* | mpixlf*)
+ # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+ whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
+ hardcode_libdir_flag_spec=
+ hardcode_libdir_flag_spec_ld='-rpath $libdir'
+ archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
+ if test "x$supports_anon_versioning" = xyes; then
+ archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+ fi
+ ;;
+ esac
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+ else
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ fi
+ ;;
+
+ solaris*)
+ if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+ ld_shlibs=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+ case `$LD -v 2>&1` in
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+ ld_shlibs=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ ;;
+ *)
+ # For security reasons, it is highly recommended that you always
+ # use absolute paths for naming shared libraries, and exclude the
+ # DT_RUNPATH tag from executables and libraries. But doing so
+ # requires that you compile everything twice, which is a pain.
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+ ;;
+
+ sunos4*)
+ archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ wlarc=
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ *)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+
+ if test "$ld_shlibs" = no; then
+ runpath_var=
+ hardcode_libdir_flag_spec=
+ export_dynamic_flag_spec=
+ whole_archive_flag_spec=
+ fi
+ else
+ # PORTME fill in a description of your system's linker (not GNU ld)
+ case $host_os in
+ aix3*)
+ allow_undefined_flag=unsupported
+ always_export_symbols=yes
+ archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+ # Note: this linker hardcodes the directories in LIBPATH if there
+ # are no directories specified by -L.
+ hardcode_minus_L=yes
+ if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+ # Neither direct hardcoding nor static linking is supported with a
+ # broken collect2.
+ hardcode_direct=unsupported
+ fi
+ ;;
+
+ aix[4-9]*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=""
+ else
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to AIX nm, but means don't demangle with GNU nm
+ # Also, AIX nm treats weak defined symbols like other global
+ # defined symbols, whereas GNU nm marks them as "W".
+ if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+ export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ else
+ export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ fi
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+ for ld_flag in $LDFLAGS; do
+ if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+ aix_use_runtimelinking=yes
+ break
+ fi
+ done
+ ;;
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ archive_cmds=''
+ hardcode_direct=yes
+ hardcode_direct_absolute=yes
+ hardcode_libdir_separator=':'
+ link_all_deplibs=yes
+ file_list_spec='${wl}-f,'
+
+ if test "$GCC" = yes; then
+ case $host_os in aix4.[012]|aix4.[012].*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" &&
+ strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ :
+ else
+ # We have old collect2
+ hardcode_direct=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ hardcode_minus_L=yes
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_libdir_separator=
+ fi
+ ;;
+ esac
+ shared_flag='-shared'
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag="$shared_flag "'${wl}-G'
+ fi
+ else
+ # not using gcc
+ if test "$host_cpu" = ia64; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag='${wl}-G'
+ else
+ shared_flag='${wl}-bM:SRE'
+ fi
+ fi
+ fi
+
+ export_dynamic_flag_spec='${wl}-bexpall'
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to export.
+ always_export_symbols=yes
+ if test "$aix_use_runtimelinking" = yes; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ allow_undefined_flag='-berok'
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+lt_aix_libpath_sed='
+ /Import File Strings/,/^$/ {
+ /^0/ {
+ s/^0 *\(.*\)$/\1/
+ p
+ }
+ }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+ aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ else
+ if test "$host_cpu" = ia64; then
+ hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+ allow_undefined_flag="-z nodefs"
+ archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+lt_aix_libpath_sed='
+ /Import File Strings/,/^$/ {
+ /^0/ {
+ s/^0 *\(.*\)$/\1/
+ p
+ }
+ }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+ aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ no_undefined_flag=' ${wl}-bernotok'
+ allow_undefined_flag=' ${wl}-berok'
+ if test "$with_gnu_ld" = yes; then
+ # We only use this code for GNU lds that support --whole-archive.
+ whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+ else
+ # Exported symbols can be pulled into shared objects from archives
+ whole_archive_flag_spec='$convenience'
+ fi
+ archive_cmds_need_lc=yes
+ # This is similar to how AIX traditionally builds its shared libraries.
+ archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ fi
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds=''
+ ;;
+ m68k)
+ archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ ;;
+ esac
+ ;;
+
+ bsdi[45]*)
+ export_dynamic_flag_spec=-rdynamic
+ ;;
+
+ cygwin* | mingw* | pw32* | cegcc*)
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ hardcode_libdir_flag_spec=' '
+ allow_undefined_flag=unsupported
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext_cmds=".dll"
+ # FIXME: Setting linknames here is a bad hack.
+ archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
+ # The linker will automatically build a .lib file if we build a DLL.
+ old_archive_from_new_cmds='true'
+ # FIXME: Should let the user specify the lib program.
+ old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
+ fix_srcfile_path='`cygpath -w "$srcfile"`'
+ enable_shared_with_static_runtimes=yes
+ ;;
+
+ darwin* | rhapsody*)
+
+
+ archive_cmds_need_lc=no
+ hardcode_direct=no
+ hardcode_automatic=yes
+ hardcode_shlibpath_var=unsupported
+ if test "$lt_cv_ld_force_load" = "yes"; then
+ whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+ else
+ whole_archive_flag_spec=''
+ fi
+ link_all_deplibs=yes
+ allow_undefined_flag="$_lt_dar_allow_undefined"
+ case $cc_basename in
+ ifort*) _lt_dar_can_shared=yes ;;
+ *) _lt_dar_can_shared=$GCC ;;
+ esac
+ if test "$_lt_dar_can_shared" = "yes"; then
+ output_verbose_link_cmd=func_echo_all
+ archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+ module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+ archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+ module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+
+ else
+ ld_shlibs=no
+ fi
+
+ ;;
+
+ dgux*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_shlibpath_var=no
+ ;;
+
+ # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+ # support. Future versions do this automatically, but an explicit c++rt0.o
+ # does not break anything, and helps significantly (at the cost of a little
+ # extra space).
+ freebsd2.2*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+ freebsd2.*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ freebsd* | dragonfly*)
+ archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ hpux9*)
+ if test "$GCC" = yes; then
+ archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ fi
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ export_dynamic_flag_spec='${wl}-E'
+ ;;
+
+ hpux10*)
+ if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+ archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ if test "$with_gnu_ld" = no; then
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_flag_spec_ld='+b $libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+ hardcode_direct_absolute=yes
+ export_dynamic_flag_spec='${wl}-E'
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ fi
+ ;;
+
+ hpux11*)
+ if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+ case $host_cpu in
+ hppa*64*)
+ archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ else
+ case $host_cpu in
+ hppa*64*)
+ archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+
+ # Older versions of the 11.00 compiler do not understand -b yet
+ # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5
+$as_echo_n "checking if $CC understands -b... " >&6; }
+if ${lt_cv_prog_compiler__b+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler__b=no
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -b"
+ echo "$lt_simple_link_test_code" > conftest.$ac_ext
+ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+ # The linker can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test -s conftest.err; then
+ # Append any errors to the config.log.
+ cat conftest.err 1>&5
+ $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if diff conftest.exp conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler__b=yes
+ fi
+ else
+ lt_cv_prog_compiler__b=yes
+ fi
+ fi
+ $RM -r conftest*
+ LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5
+$as_echo "$lt_cv_prog_compiler__b" >&6; }
+
+if test x"$lt_cv_prog_compiler__b" = xyes; then
+ archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+else
+ archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+fi
+
+ ;;
+ esac
+ fi
+ if test "$with_gnu_ld" = no; then
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+
+ case $host_cpu in
+ hppa*64*|ia64*)
+ hardcode_direct=no
+ hardcode_shlibpath_var=no
+ ;;
+ *)
+ hardcode_direct=yes
+ hardcode_direct_absolute=yes
+ export_dynamic_flag_spec='${wl}-E'
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ ;;
+ esac
+ fi
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ if test "$GCC" = yes; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ # Try to use the -exported_symbol ld option, if it does not
+ # work, assume that -exports_file does not work either and
+ # implicitly export all symbols.
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int foo(void) {}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ LDFLAGS="$save_LDFLAGS"
+ else
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+ fi
+ archive_cmds_need_lc='no'
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ inherit_rpath=yes
+ link_all_deplibs=yes
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
+ else
+ archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
+ fi
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ newsos6)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_shlibpath_var=no
+ ;;
+
+ *nto* | *qnx*)
+ ;;
+
+ openbsd*)
+ if test -f /usr/libexec/ld.so; then
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ hardcode_direct_absolute=yes
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ export_dynamic_flag_spec='${wl}-E'
+ else
+ case $host_os in
+ openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-R$libdir'
+ ;;
+ *)
+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ ;;
+ esac
+ fi
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ os2*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ allow_undefined_flag=unsupported
+ archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+ old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+ ;;
+
+ osf3*)
+ if test "$GCC" = yes; then
+ allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ allow_undefined_flag=' -expect_unresolved \*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+ fi
+ archive_cmds_need_lc='no'
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
+
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
+ if test "$GCC" = yes; then
+ allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ else
+ allow_undefined_flag=' -expect_unresolved \*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+ archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+
+ # Both c and cxx compiler support -rpath directly
+ hardcode_libdir_flag_spec='-rpath $libdir'
+ fi
+ archive_cmds_need_lc='no'
+ hardcode_libdir_separator=:
+ ;;
+
+ solaris*)
+ no_undefined_flag=' -z defs'
+ if test "$GCC" = yes; then
+ wlarc='${wl}'
+ archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ else
+ case `$CC -V 2>&1` in
+ *"Compilers 5.0"*)
+ wlarc=''
+ archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+ ;;
+ *)
+ wlarc='${wl}'
+ archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ ;;
+ esac
+ fi
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_shlibpath_var=no
+ case $host_os in
+ solaris2.[0-5] | solaris2.[0-5].*) ;;
+ *)
+ # The compiler driver will combine and reorder linker options,
+ # but understands `-z linker_flag'. GCC discards it without `$wl',
+ # but is careful enough not to reorder.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ if test "$GCC" = yes; then
+ whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+ else
+ whole_archive_flag_spec='-z allextract$convenience -z defaultextract'
+ fi
+ ;;
+ esac
+ link_all_deplibs=yes
+ ;;
+
+ sunos4*)
+ if test "x$host_vendor" = xsequent; then
+ # Use $CC to link under sequent, because it throws in some extra .o
+ # files that make .init and .fini sections work.
+ archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ sysv4)
+ case $host_vendor in
+ sni)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes # is this really true???
+ ;;
+ siemens)
+ ## LD is ld it makes a PLAMLIB
+ ## CC just makes a GrossModule.
+ archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+ reload_cmds='$CC -r -o $output$reload_objs'
+ hardcode_direct=no
+ ;;
+ motorola)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+ ;;
+ esac
+ runpath_var='LD_RUN_PATH'
+ hardcode_shlibpath_var=no
+ ;;
+
+ sysv4.3*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var=no
+ export_dynamic_flag_spec='-Bexport'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var=no
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ ld_shlibs=yes
+ fi
+ ;;
+
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+ no_undefined_flag='${wl}-z,text'
+ archive_cmds_need_lc=no
+ hardcode_shlibpath_var=no
+ runpath_var='LD_RUN_PATH'
+
+ if test "$GCC" = yes; then
+ archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6*)
+ # Note: We can NOT use -z defs as we might desire, because we do not
+ # link with -lc, and that would cause any symbols used from libc to
+ # always be unresolved, which means just about no library would
+ # ever link correctly. If we're not using GNU ld we use -z text
+ # though, which does catch some bad symbols but isn't as heavy-handed
+ # as -z defs.
+ no_undefined_flag='${wl}-z,text'
+ allow_undefined_flag='${wl}-z,nodefs'
+ archive_cmds_need_lc=no
+ hardcode_shlibpath_var=no
+ hardcode_libdir_flag_spec='${wl}-R,$libdir'
+ hardcode_libdir_separator=':'
+ link_all_deplibs=yes
+ export_dynamic_flag_spec='${wl}-Bexport'
+ runpath_var='LD_RUN_PATH'
+
+ if test "$GCC" = yes; then
+ archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ uts4*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_shlibpath_var=no
+ ;;
+
+ *)
+ ld_shlibs=no
+ ;;
+ esac
+
+ if test x$host_vendor = xsni; then
+ case $host in
+ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ export_dynamic_flag_spec='${wl}-Blargedynsym'
+ ;;
+ esac
+ fi
+ fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5
+$as_echo "$ld_shlibs" >&6; }
+test "$ld_shlibs" = no && can_build_shared=no
+
+with_gnu_ld=$with_gnu_ld
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc" in
+x|xyes)
+ # Assume -lc should be added
+ archive_cmds_need_lc=yes
+
+ if test "$enable_shared" = yes && test "$GCC" = yes; then
+ case $archive_cmds in
+ *'~'*)
+ # FIXME: we may have to deal with multi-command sequences.
+ ;;
+ '$CC '*)
+ # Test whether the compiler implicitly links with -lc since on some
+ # systems, -lgcc has to come before -lc. If gcc already passes -lc
+ # to ld, don't add -lc before -lgcc.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
+$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
+if ${lt_cv_archive_cmds_need_lc+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ $RM conftest*
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } 2>conftest.err; then
+ soname=conftest
+ lib=conftest
+ libobjs=conftest.$ac_objext
+ deplibs=
+ wl=$lt_prog_compiler_wl
+ pic_flag=$lt_prog_compiler_pic
+ compiler_flags=-v
+ linker_flags=-v
+ verstring=
+ output_objdir=.
+ libname=conftest
+ lt_save_allow_undefined_flag=$allow_undefined_flag
+ allow_undefined_flag=
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
+ (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ then
+ lt_cv_archive_cmds_need_lc=no
+ else
+ lt_cv_archive_cmds_need_lc=yes
+ fi
+ allow_undefined_flag=$lt_save_allow_undefined_flag
+ else
+ cat conftest.err 1>&5
+ fi
+ $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5
+$as_echo "$lt_cv_archive_cmds_need_lc" >&6; }
+ archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc
+ ;;
+ esac
+ fi
+ ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
+$as_echo_n "checking dynamic linker characteristics... " >&6; }
+
+if test "$GCC" = yes; then
+ case $host_os in
+ darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
+ *) lt_awk_arg="/^libraries:/" ;;
+ esac
+ case $host_os in
+ mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;;
+ *) lt_sed_strip_eq="s,=/,/,g" ;;
+ esac
+ lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq`
+ case $lt_search_path_spec in
+ *\;*)
+ # if the path contains ";" then we assume it to be the separator
+ # otherwise default to the standard path separator (i.e. ":") - it is
+ # assumed that no part of a normal pathname contains ";" but that should
+ # okay in the real world where ";" in dirpaths is itself problematic.
+ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'`
+ ;;
+ *)
+ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"`
+ ;;
+ esac
+ # Ok, now we have the path, separated by spaces, we can step through it
+ # and add multilib dir if necessary.
+ lt_tmp_lt_search_path_spec=
+ lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+ for lt_sys_path in $lt_search_path_spec; do
+ if test -d "$lt_sys_path/$lt_multi_os_dir"; then
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
+ else
+ test -d "$lt_sys_path" && \
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+ fi
+ done
+ lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk '
+BEGIN {RS=" "; FS="/|\n";} {
+ lt_foo="";
+ lt_count=0;
+ for (lt_i = NF; lt_i > 0; lt_i--) {
+ if ($lt_i != "" && $lt_i != ".") {
+ if ($lt_i == "..") {
+ lt_count++;
+ } else {
+ if (lt_count == 0) {
+ lt_foo="/" $lt_i lt_foo;
+ } else {
+ lt_count--;
+ }
+ }
+ }
+ }
+ if (lt_foo != "") { lt_freq[lt_foo]++; }
+ if (lt_freq[lt_foo] == 1) { print lt_foo; }
+}'`
+ # AWK program above erroneously prepends '/' to C:/dos/paths
+ # for these hosts.
+ case $host_os in
+ mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\
+ $SED 's,/\([A-Za-z]:\),\1,g'` ;;
+ esac
+ sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
+else
+ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+ shlibpath_var=LIBPATH
+
+ # AIX 3 has no versioning support, so we append a major version to the name.
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+
+aix[4-9]*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ hardcode_into_libs=yes
+ if test "$host_cpu" = ia64; then
+ # AIX 5 supports IA64
+ library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ else
+ # With GCC up to 2.95.x, collect2 would create an import file
+ # for dependence libraries. The import file would start with
+ # the line `#! .'. This would cause the generated library to
+ # depend on `.', always an invalid library. This was fixed in
+ # development snapshots of GCC prior to 3.0.
+ case $host_os in
+ aix4 | aix4.[01] | aix4.[01].*)
+ if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+ echo ' yes '
+ echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+ :
+ else
+ can_build_shared=no
+ fi
+ ;;
+ esac
+ # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+ # soname into executable. Probably we can add versioning support to
+ # collect2, so additional links can be useful in future.
+ if test "$aix_use_runtimelinking" = yes; then
+ # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+ # instead of lib<name>.a to let people know that these are not
+ # typical AIX shared libraries.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ else
+ # We preserve .a as extension for shared libraries through AIX4.2
+ # and later when we are not doing run time linking.
+ library_names_spec='${libname}${release}.a $libname.a'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ fi
+ shlibpath_var=LIBPATH
+ fi
+ ;;
+
+amigaos*)
+ case $host_cpu in
+ powerpc)
+ # Since July 2007 AmigaOS4 officially supports .so libraries.
+ # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ ;;
+ m68k)
+ library_names_spec='$libname.ixlibrary $libname.a'
+ # Create ${libname}_ixlibrary.a entries in /sys/libs.
+ finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+ ;;
+ esac
+ ;;
+
+beos*)
+ library_names_spec='${libname}${shared_ext}'
+ dynamic_linker="$host_os ld.so"
+ shlibpath_var=LIBRARY_PATH
+ ;;
+
+bsdi[45]*)
+ version_type=linux
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+ sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+ # the default ld.so.conf also contains /usr/contrib/lib and
+ # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+ # libtool to hard-code these into programs
+ ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+ version_type=windows
+ shrext_cmds=".dll"
+ need_version=no
+ need_lib_prefix=no
+
+ case $GCC,$host_os in
+ yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \${file}`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname~
+ chmod a+x \$dldir/$dlname~
+ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+ eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+ fi'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $RM \$dlpath'
+ shlibpath_overrides_runpath=yes
+
+ case $host_os in
+ cygwin*)
+ # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+ soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"
+ ;;
+ mingw* | cegcc*)
+ # MinGW DLLs use traditional 'lib' prefix
+ soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ ;;
+ pw32*)
+ # pw32 DLLs use 'pw' prefix rather than 'lib'
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ ;;
+ esac
+ ;;
+
+ *)
+ library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+ ;;
+ esac
+ dynamic_linker='Win32 ld.exe'
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+
+darwin* | rhapsody*)
+ dynamic_linker="$host_os dyld"
+ version_type=darwin
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+ soname_spec='${libname}${release}${major}$shared_ext'
+ shlibpath_overrides_runpath=yes
+ shlibpath_var=DYLD_LIBRARY_PATH
+ shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"
+ sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+ ;;
+
+dgux*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+freebsd* | dragonfly*)
+ # DragonFly does not have aout. When/if they implement a new
+ # versioning mechanism, adjust this.
+ if test -x /usr/bin/objformat; then
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+ freebsd[23].*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+ version_type=freebsd-$objformat
+ case $version_type in
+ freebsd-elf*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ need_version=no
+ need_lib_prefix=no
+ ;;
+ freebsd-*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+ need_version=yes
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+ *) # from 4.6 on, and DragonFly
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ esac
+ ;;
+
+haiku*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ dynamic_linker="$host_os runtime_loader"
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
+ hardcode_into_libs=yes
+ ;;
+
+hpux9* | hpux10* | hpux11*)
+ # Give a soname corresponding to the major version so that dld.sl refuses to
+ # link against other versions.
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ case $host_cpu in
+ ia64*)
+ shrext_cmds='.so'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.so"
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ if test "X$HPUX_IA64_MODE" = X32; then
+ sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+ else
+ sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+ fi
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ hppa*64*)
+ shrext_cmds='.sl'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ *)
+ shrext_cmds='.sl'
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=SHLIB_PATH
+ shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+ esac
+ # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
+ postinstall_cmds='chmod 555 $lib'
+ # or fails outright, so override atomically:
+ install_override_mode=555
+ ;;
+
+interix[3-9]*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $host_os in
+ nonstopux*) version_type=nonstopux ;;
+ *)
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ version_type=linux
+ else
+ version_type=irix
+ fi ;;
+ esac
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+ case $host_os in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in # libtool.m4 will add one of these switches to LD
+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+ libsuff= shlibsuff= libmagic=32-bit;;
+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+ libsuff=32 shlibsuff=N32 libmagic=N32;;
+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+ libsuff=64 shlibsuff=64 libmagic=64-bit;;
+ *) libsuff= shlibsuff= libmagic=never-match;;
+ esac
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+ sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+ hardcode_into_libs=yes
+ ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+ dynamic_linker=no
+ ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+
+ # Some binutils ld are patched to set DT_RUNPATH
+ if ${lt_cv_shlibpath_overrides_runpath+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_shlibpath_overrides_runpath=no
+ save_LDFLAGS=$LDFLAGS
+ save_libdir=$libdir
+ eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \
+ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
+ lt_cv_shlibpath_overrides_runpath=yes
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ LDFLAGS=$save_LDFLAGS
+ libdir=$save_libdir
+
+fi
+
+ shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
+
+ # This implies no fast_install, which is unacceptable.
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ # Append ld.so.conf contents to the search path
+ if test -f /etc/ld.so.conf; then
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+ sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+ fi
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+ # powerpc, because MkLinux only supported shared libraries with the
+ # GNU dynamic linker. Since this was broken with cross compilers,
+ # most powerpc-linux boxes support dynamic linking these days and
+ # people can always --disable-shared, the test was removed, and we
+ # assume the GNU/Linux dynamic linker is in use.
+ dynamic_linker='GNU/Linux ld.so'
+ ;;
+
+netbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ dynamic_linker='NetBSD (a.out) ld.so'
+ else
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='NetBSD ld.elf_so'
+ fi
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+
+newsos6)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+*nto* | *qnx*)
+ version_type=qnx
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='ldqnx.so'
+ ;;
+
+openbsd*)
+ version_type=sunos
+ sys_lib_dlsearch_path_spec="/usr/lib"
+ need_lib_prefix=no
+ # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+ case $host_os in
+ openbsd3.3 | openbsd3.3.*) need_version=yes ;;
+ *) need_version=no ;;
+ esac
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ case $host_os in
+ openbsd2.[89] | openbsd2.[89].*)
+ shlibpath_overrides_runpath=no
+ ;;
+ *)
+ shlibpath_overrides_runpath=yes
+ ;;
+ esac
+ else
+ shlibpath_overrides_runpath=yes
+ fi
+ ;;
+
+os2*)
+ libname_spec='$name'
+ shrext_cmds=".dll"
+ need_lib_prefix=no
+ library_names_spec='$libname${shared_ext} $libname.a'
+ dynamic_linker='OS/2 ld.exe'
+ shlibpath_var=LIBPATH
+ ;;
+
+osf3* | osf4* | osf5*)
+ version_type=osf
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+ sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+ ;;
+
+rdos*)
+ dynamic_linker=no
+ ;;
+
+solaris*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ # ldd complains unless libraries are executable
+ postinstall_cmds='chmod +x $lib'
+ ;;
+
+sunos4*)
+ version_type=sunos
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ if test "$with_gnu_ld" = yes; then
+ need_lib_prefix=no
+ fi
+ need_version=yes
+ ;;
+
+sysv4 | sysv4.3*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_vendor in
+ sni)
+ shlibpath_overrides_runpath=no
+ need_lib_prefix=no
+ runpath_var=LD_RUN_PATH
+ ;;
+ siemens)
+ need_lib_prefix=no
+ ;;
+ motorola)
+ need_lib_prefix=no
+ need_version=no
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+ ;;
+ esac
+ ;;
+
+sysv4*MP*)
+ if test -d /usr/nec ;then
+ version_type=linux
+ library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+ soname_spec='$libname${shared_ext}.$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ fi
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ version_type=freebsd-elf
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ if test "$with_gnu_ld" = yes; then
+ sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+ else
+ sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+ case $host_os in
+ sco3.2v5*)
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+ ;;
+ esac
+ fi
+ sys_lib_dlsearch_path_spec='/usr/lib'
+ ;;
+
+tpf*)
+ # TPF is a cross-target only. Preferred cross-host = GNU/Linux.
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+uts4*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+*)
+ dynamic_linker=no
+ ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
+$as_echo "$dynamic_linker" >&6; }
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
+ sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+fi
+if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
+ sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
+$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
+hardcode_action=
+if test -n "$hardcode_libdir_flag_spec" ||
+ test -n "$runpath_var" ||
+ test "X$hardcode_automatic" = "Xyes" ; then
+
+ # We can hardcode non-existent directories.
+ if test "$hardcode_direct" != no &&
+ # If the only mechanism to avoid hardcoding is shlibpath_var, we
+ # have to relink, otherwise we might link with an installed library
+ # when we should be linking with a yet-to-be-installed one
+ ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no &&
+ test "$hardcode_minus_L" != no; then
+ # Linking always hardcodes the temporary library directory.
+ hardcode_action=relink
+ else
+ # We can link without hardcoding, and we can hardcode nonexisting dirs.
+ hardcode_action=immediate
+ fi
+else
+ # We cannot hardcode anything, or else we can only hardcode existing
+ # directories.
+ hardcode_action=unsupported
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5
+$as_echo "$hardcode_action" >&6; }
+
+if test "$hardcode_action" = relink ||
+ test "$inherit_rpath" = yes; then
+ # Fast installation is not supported
+ enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+ test "$enable_shared" = no; then
+ # Fast installation is not necessary
+ enable_fast_install=needless
+fi
+
+
+
+
+
+
+ if test "x$enable_dlopen" != xyes; then
+ enable_dlopen=unknown
+ enable_dlopen_self=unknown
+ enable_dlopen_self_static=unknown
+else
+ lt_cv_dlopen=no
+ lt_cv_dlopen_libs=
+
+ case $host_os in
+ beos*)
+ lt_cv_dlopen="load_add_on"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ;;
+
+ mingw* | pw32* | cegcc*)
+ lt_cv_dlopen="LoadLibrary"
+ lt_cv_dlopen_libs=
+ ;;
+
+ cygwin*)
+ lt_cv_dlopen="dlopen"
+ lt_cv_dlopen_libs=
+ ;;
+
+ darwin*)
+ # if libdl is installed we need to link against it
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+$as_echo_n "checking for dlopen in -ldl... " >&6; }
+if ${ac_cv_lib_dl_dlopen+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_dl_dlopen=yes
+else
+ ac_cv_lib_dl_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+
+ lt_cv_dlopen="dyld"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+
+fi
+
+ ;;
+
+ *)
+ ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load"
+if test "x$ac_cv_func_shl_load" = xyes; then :
+ lt_cv_dlopen="shl_load"
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5
+$as_echo_n "checking for shl_load in -ldld... " >&6; }
+if ${ac_cv_lib_dld_shl_load+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char shl_load ();
+int
+main ()
+{
+return shl_load ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_dld_shl_load=yes
+else
+ ac_cv_lib_dld_shl_load=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5
+$as_echo "$ac_cv_lib_dld_shl_load" >&6; }
+if test "x$ac_cv_lib_dld_shl_load" = xyes; then :
+ lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"
+else
+ ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen"
+if test "x$ac_cv_func_dlopen" = xyes; then :
+ lt_cv_dlopen="dlopen"
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+$as_echo_n "checking for dlopen in -ldl... " >&6; }
+if ${ac_cv_lib_dl_dlopen+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_dl_dlopen=yes
+else
+ ac_cv_lib_dl_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5
+$as_echo_n "checking for dlopen in -lsvld... " >&6; }
+if ${ac_cv_lib_svld_dlopen+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsvld $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_svld_dlopen=yes
+else
+ ac_cv_lib_svld_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5
+$as_echo "$ac_cv_lib_svld_dlopen" >&6; }
+if test "x$ac_cv_lib_svld_dlopen" = xyes; then :
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5
+$as_echo_n "checking for dld_link in -ldld... " >&6; }
+if ${ac_cv_lib_dld_dld_link+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dld_link ();
+int
+main ()
+{
+return dld_link ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_dld_dld_link=yes
+else
+ ac_cv_lib_dld_dld_link=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5
+$as_echo "$ac_cv_lib_dld_dld_link" >&6; }
+if test "x$ac_cv_lib_dld_dld_link" = xyes; then :
+ lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+ ;;
+ esac
+
+ if test "x$lt_cv_dlopen" != xno; then
+ enable_dlopen=yes
+ else
+ enable_dlopen=no
+ fi
+
+ case $lt_cv_dlopen in
+ dlopen)
+ save_CPPFLAGS="$CPPFLAGS"
+ test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+ save_LDFLAGS="$LDFLAGS"
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+ save_LIBS="$LIBS"
+ LIBS="$lt_cv_dlopen_libs $LIBS"
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5
+$as_echo_n "checking whether a program can dlopen itself... " >&6; }
+if ${lt_cv_dlopen_self+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test "$cross_compiling" = yes; then :
+ lt_cv_dlopen_self=cross
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+#line 12067 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+/* When -fvisbility=hidden is used, assume the code has been annotated
+ correspondingly for the symbols needed. */
+#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+void fnord () __attribute__((visibility("default")));
+#endif
+
+void fnord () { int i=42; }
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else
+ {
+ if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ else puts (dlerror ());
+ }
+ /* dlclose (self); */
+ }
+ else
+ puts (dlerror ());
+
+ return status;
+}
+_LT_EOF
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then
+ (./conftest; exit; ) >&5 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+ x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+ x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;;
+ esac
+ else :
+ # compilation failed
+ lt_cv_dlopen_self=no
+ fi
+fi
+rm -fr conftest*
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5
+$as_echo "$lt_cv_dlopen_self" >&6; }
+
+ if test "x$lt_cv_dlopen_self" = xyes; then
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5
+$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; }
+if ${lt_cv_dlopen_self_static+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test "$cross_compiling" = yes; then :
+ lt_cv_dlopen_self_static=cross
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+#line 12173 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+/* When -fvisbility=hidden is used, assume the code has been annotated
+ correspondingly for the symbols needed. */
+#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+void fnord () __attribute__((visibility("default")));
+#endif
+
+void fnord () { int i=42; }
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else
+ {
+ if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ else puts (dlerror ());
+ }
+ /* dlclose (self); */
+ }
+ else
+ puts (dlerror ());
+
+ return status;
+}
+_LT_EOF
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then
+ (./conftest; exit; ) >&5 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+ x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+ x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;;
+ esac
+ else :
+ # compilation failed
+ lt_cv_dlopen_self_static=no
+ fi
+fi
+rm -fr conftest*
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5
+$as_echo "$lt_cv_dlopen_self_static" >&6; }
+ fi
+
+ CPPFLAGS="$save_CPPFLAGS"
+ LDFLAGS="$save_LDFLAGS"
+ LIBS="$save_LIBS"
+ ;;
+ esac
+
+ case $lt_cv_dlopen_self in
+ yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+ *) enable_dlopen_self=unknown ;;
+ esac
+
+ case $lt_cv_dlopen_self_static in
+ yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+ *) enable_dlopen_self_static=unknown ;;
+ esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+striplib=
+old_striplib=
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5
+$as_echo_n "checking whether stripping libraries is possible... " >&6; }
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+ test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+ test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+ case $host_os in
+ darwin*)
+ if test -n "$STRIP" ; then
+ striplib="$STRIP -x"
+ old_striplib="$STRIP -S"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ fi
+ ;;
+ *)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ;;
+ esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+ # Report which library types will actually be built
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5
+$as_echo_n "checking if libtool supports shared libraries... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5
+$as_echo "$can_build_shared" >&6; }
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5
+$as_echo_n "checking whether to build shared libraries... " >&6; }
+ test "$can_build_shared" = "no" && enable_shared=no
+
+ # On AIX, shared libraries and static libraries use the same namespace, and
+ # are all built from PIC.
+ case $host_os in
+ aix3*)
+ test "$enable_shared" = yes && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+
+ aix[4-9]*)
+ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+ test "$enable_shared" = yes && enable_static=no
+ fi
+ ;;
+ esac
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5
+$as_echo "$enable_shared" >&6; }
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5
+$as_echo_n "checking whether to build static libraries... " >&6; }
+ # Make sure either enable_shared or enable_static is yes.
+ test "$enable_shared" = yes || enable_static=yes
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5
+$as_echo "$enable_static" >&6; }
+
+
+
+
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC="$lt_save_CC"
+
+ if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
+ ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
+ (test "X$CXX" != "Xg++"))) ; then
+ ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5
+$as_echo_n "checking how to run the C++ preprocessor... " >&6; }
+if test -z "$CXXCPP"; then
+ if ${ac_cv_prog_CXXCPP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ # Double quotes because CXXCPP needs to be expanded
+ for CXXCPP in "$CXX -E" "/lib/cpp"
+ do
+ ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+
+else
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+ # Broken: success on invalid input.
+continue
+else
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+ break
+fi
+
+ done
+ ac_cv_prog_CXXCPP=$CXXCPP
+
+fi
+ CXXCPP=$ac_cv_prog_CXXCPP
+else
+ ac_cv_prog_CXXCPP=$CXXCPP
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5
+$as_echo "$CXXCPP" >&6; }
+ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+
+else
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+ # Broken: success on invalid input.
+continue
+else
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+
+else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+else
+ _lt_caught_CXX_error=yes
+fi
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+archive_cmds_need_lc_CXX=no
+allow_undefined_flag_CXX=
+always_export_symbols_CXX=no
+archive_expsym_cmds_CXX=
+compiler_needs_object_CXX=no
+export_dynamic_flag_spec_CXX=
+hardcode_direct_CXX=no
+hardcode_direct_absolute_CXX=no
+hardcode_libdir_flag_spec_CXX=
+hardcode_libdir_flag_spec_ld_CXX=
+hardcode_libdir_separator_CXX=
+hardcode_minus_L_CXX=no
+hardcode_shlibpath_var_CXX=unsupported
+hardcode_automatic_CXX=no
+inherit_rpath_CXX=no
+module_cmds_CXX=
+module_expsym_cmds_CXX=
+link_all_deplibs_CXX=unknown
+old_archive_cmds_CXX=$old_archive_cmds
+reload_flag_CXX=$reload_flag
+reload_cmds_CXX=$reload_cmds
+no_undefined_flag_CXX=
+whole_archive_flag_spec_CXX=
+enable_shared_with_static_runtimes_CXX=no
+
+# Source file extension for C++ test sources.
+ac_ext=cpp
+
+# Object file extension for compiled C++ test sources.
+objext=o
+objext_CXX=$objext
+
+# No sense in running all these tests if we already determined that
+# the CXX compiler isn't working. Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_caught_CXX_error" != yes; then
+ # Code to be used in simple compile tests
+ lt_simple_compile_test_code="int some_variable = 0;"
+
+ # Code to be used in simple link tests
+ lt_simple_link_test_code='int main(int, char *[]) { return(0); }'
+
+ # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+ # save warnings/boilerplate of simple test code
+ ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+
+ ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+
+
+ # Allow CC to be a program name with arguments.
+ lt_save_CC=$CC
+ lt_save_LD=$LD
+ lt_save_GCC=$GCC
+ GCC=$GXX
+ lt_save_with_gnu_ld=$with_gnu_ld
+ lt_save_path_LD=$lt_cv_path_LD
+ if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+ lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+ else
+ $as_unset lt_cv_prog_gnu_ld
+ fi
+ if test -n "${lt_cv_path_LDCXX+set}"; then
+ lt_cv_path_LD=$lt_cv_path_LDCXX
+ else
+ $as_unset lt_cv_path_LD
+ fi
+ test -z "${LDCXX+set}" || LD=$LDCXX
+ CC=${CXX-"c++"}
+ compiler=$CC
+ compiler_CXX=$CC
+ for cc_temp in $compiler""; do
+ case $cc_temp in
+ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+done
+cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+
+
+ if test -n "$compiler"; then
+ # We don't want -fno-exception when compiling C++ code, so set the
+ # no_builtin_flag separately
+ if test "$GXX" = yes; then
+ lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin'
+ else
+ lt_prog_compiler_no_builtin_flag_CXX=
+ fi
+
+ if test "$GXX" = yes; then
+ # Set up default GNU C++ configuration
+
+
+
+# Check whether --with-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then :
+ withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
+else
+ with_gnu_ld=no
+fi
+
+ac_prog=ld
+if test "$GCC" = yes; then
+ # Check if gcc -print-prog-name=ld gives a path.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
+$as_echo_n "checking for ld used by $CC... " >&6; }
+ case $host in
+ *-*-mingw*)
+ # gcc leaves a trailing carriage return which upsets mingw
+ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+ *)
+ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+ esac
+ case $ac_prog in
+ # Accept absolute paths.
+ [\\/]* | ?:[\\/]*)
+ re_direlt='/[^/][^/]*/\.\./'
+ # Canonicalize the pathname of ld
+ ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+ while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+ ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+ done
+ test -z "$LD" && LD="$ac_prog"
+ ;;
+ "")
+ # If it fails, then pretend we aren't using GCC.
+ ac_prog=ld
+ ;;
+ *)
+ # If it is relative, then search for the first ld in PATH.
+ with_gnu_ld=unknown
+ ;;
+ esac
+elif test "$with_gnu_ld" = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
+$as_echo_n "checking for GNU ld... " >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
+$as_echo_n "checking for non-GNU ld... " >&6; }
+fi
+if ${lt_cv_path_LD+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -z "$LD"; then
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+ lt_cv_path_LD="$ac_dir/$ac_prog"
+ # Check to see if the program is GNU ld. I'd rather use --version,
+ # but apparently some variants of GNU ld only accept -v.
+ # Break only if it was the GNU/non-GNU ld that we prefer.
+ case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+ *GNU* | *'with BFD'*)
+ test "$with_gnu_ld" != no && break
+ ;;
+ *)
+ test "$with_gnu_ld" != yes && break
+ ;;
+ esac
+ fi
+ done
+ IFS="$lt_save_ifs"
+else
+ lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+$as_echo "$LD" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
+$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
+if ${lt_cv_prog_gnu_ld+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ # I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+ lt_cv_prog_gnu_ld=yes
+ ;;
+*)
+ lt_cv_prog_gnu_ld=no
+ ;;
+esac
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
+$as_echo "$lt_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+
+
+
+
+
+
+ # Check if GNU C++ uses GNU ld as the underlying linker, since the
+ # archiving commands below assume that GNU ld is being used.
+ if test "$with_gnu_ld" = yes; then
+ archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+
+ hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+ export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+ # investigate it a little bit more. (MM)
+ wlarc='${wl}'
+
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if eval "`$CC -print-prog-name=ld` --help 2>&1" |
+ $GREP 'no-whole-archive' > /dev/null; then
+ whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ whole_archive_flag_spec_CXX=
+ fi
+ else
+ with_gnu_ld=no
+ wlarc=
+
+ # A generic and very simple default shared library creation
+ # command for GNU C++ for the case where it uses the native
+ # linker, instead of GNU ld. If possible, this setting should
+ # overridden to take advantage of the native linker features on
+ # the platform it is being used on.
+ archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+ fi
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+
+ else
+ GXX=no
+ with_gnu_ld=no
+ wlarc=
+ fi
+
+ # PORTME: fill in a description of your system's C++ link characteristics
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+ ld_shlibs_CXX=yes
+ case $host_os in
+ aix3*)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ aix[4-9]*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=""
+ else
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+ for ld_flag in $LDFLAGS; do
+ case $ld_flag in
+ *-brtl*)
+ aix_use_runtimelinking=yes
+ break
+ ;;
+ esac
+ done
+ ;;
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ archive_cmds_CXX=''
+ hardcode_direct_CXX=yes
+ hardcode_direct_absolute_CXX=yes
+ hardcode_libdir_separator_CXX=':'
+ link_all_deplibs_CXX=yes
+ file_list_spec_CXX='${wl}-f,'
+
+ if test "$GXX" = yes; then
+ case $host_os in aix4.[012]|aix4.[012].*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" &&
+ strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ :
+ else
+ # We have old collect2
+ hardcode_direct_CXX=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ hardcode_minus_L_CXX=yes
+ hardcode_libdir_flag_spec_CXX='-L$libdir'
+ hardcode_libdir_separator_CXX=
+ fi
+ esac
+ shared_flag='-shared'
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag="$shared_flag "'${wl}-G'
+ fi
+ else
+ # not using gcc
+ if test "$host_cpu" = ia64; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag='${wl}-G'
+ else
+ shared_flag='${wl}-bM:SRE'
+ fi
+ fi
+ fi
+
+ export_dynamic_flag_spec_CXX='${wl}-bexpall'
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to
+ # export.
+ always_export_symbols_CXX=yes
+ if test "$aix_use_runtimelinking" = yes; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ allow_undefined_flag_CXX='-berok'
+ # Determine the default libpath from the value encoded in an empty
+ # executable.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+
+lt_aix_libpath_sed='
+ /Import File Strings/,/^$/ {
+ /^0/ {
+ s/^0 *\(.*\)$/\1/
+ p
+ }
+ }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+ aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
+
+ archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ else
+ if test "$host_cpu" = ia64; then
+ hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib'
+ allow_undefined_flag_CXX="-z nodefs"
+ archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+
+lt_aix_libpath_sed='
+ /Import File Strings/,/^$/ {
+ /^0/ {
+ s/^0 *\(.*\)$/\1/
+ p
+ }
+ }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+ aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ no_undefined_flag_CXX=' ${wl}-bernotok'
+ allow_undefined_flag_CXX=' ${wl}-berok'
+ if test "$with_gnu_ld" = yes; then
+ # We only use this code for GNU lds that support --whole-archive.
+ whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+ else
+ # Exported symbols can be pulled into shared objects from archives
+ whole_archive_flag_spec_CXX='$convenience'
+ fi
+ archive_cmds_need_lc_CXX=yes
+ # This is similar to how AIX traditionally builds its shared
+ # libraries.
+ archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ fi
+ fi
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ allow_undefined_flag_CXX=unsupported
+ # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ else
+ ld_shlibs_CXX=no
+ fi
+ ;;
+
+ chorus*)
+ case $cc_basename in
+ *)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ esac
+ ;;
+
+ cygwin* | mingw* | pw32* | cegcc*)
+ # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless,
+ # as there is no search path for DLLs.
+ hardcode_libdir_flag_spec_CXX='-L$libdir'
+ export_dynamic_flag_spec_CXX='${wl}--export-all-symbols'
+ allow_undefined_flag_CXX=unsupported
+ always_export_symbols_CXX=no
+ enable_shared_with_static_runtimes_CXX=yes
+
+ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+ archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is; otherwise, prepend...
+ archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ else
+ ld_shlibs_CXX=no
+ fi
+ ;;
+ darwin* | rhapsody*)
+
+
+ archive_cmds_need_lc_CXX=no
+ hardcode_direct_CXX=no
+ hardcode_automatic_CXX=yes
+ hardcode_shlibpath_var_CXX=unsupported
+ if test "$lt_cv_ld_force_load" = "yes"; then
+ whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+ else
+ whole_archive_flag_spec_CXX=''
+ fi
+ link_all_deplibs_CXX=yes
+ allow_undefined_flag_CXX="$_lt_dar_allow_undefined"
+ case $cc_basename in
+ ifort*) _lt_dar_can_shared=yes ;;
+ *) _lt_dar_can_shared=$GCC ;;
+ esac
+ if test "$_lt_dar_can_shared" = "yes"; then
+ output_verbose_link_cmd=func_echo_all
+ archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+ module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+ archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+ module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+ if test "$lt_cv_apple_cc_single_mod" != "yes"; then
+ archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
+ archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
+ fi
+
+ else
+ ld_shlibs_CXX=no
+ fi
+
+ ;;
+
+ dgux*)
+ case $cc_basename in
+ ec++*)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ ghcx*)
+ # Green Hills C++ Compiler
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ esac
+ ;;
+
+ freebsd2.*)
+ # C++ shared libraries reported to be fairly broken before
+ # switch to ELF
+ ld_shlibs_CXX=no
+ ;;
+
+ freebsd-elf*)
+ archive_cmds_need_lc_CXX=no
+ ;;
+
+ freebsd* | dragonfly*)
+ # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+ # conventions
+ ld_shlibs_CXX=yes
+ ;;
+
+ gnu*)
+ ;;
+
+ haiku*)
+ archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ link_all_deplibs_CXX=yes
+ ;;
+
+ hpux9*)
+ hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator_CXX=:
+ export_dynamic_flag_spec_CXX='${wl}-E'
+ hardcode_direct_CXX=yes
+ hardcode_minus_L_CXX=yes # Not in the search PATH,
+ # but as the default
+ # location of the library.
+
+ case $cc_basename in
+ CC*)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ aCC*)
+ archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+ ;;
+ *)
+ if test "$GXX" = yes; then
+ archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ fi
+ ;;
+ esac
+ ;;
+
+ hpux10*|hpux11*)
+ if test $with_gnu_ld = no; then
+ hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator_CXX=:
+
+ case $host_cpu in
+ hppa*64*|ia64*)
+ ;;
+ *)
+ export_dynamic_flag_spec_CXX='${wl}-E'
+ ;;
+ esac
+ fi
+ case $host_cpu in
+ hppa*64*|ia64*)
+ hardcode_direct_CXX=no
+ hardcode_shlibpath_var_CXX=no
+ ;;
+ *)
+ hardcode_direct_CXX=yes
+ hardcode_direct_absolute_CXX=yes
+ hardcode_minus_L_CXX=yes # Not in the search PATH,
+ # but as the default
+ # location of the library.
+ ;;
+ esac
+
+ case $cc_basename in
+ CC*)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ aCC*)
+ case $host_cpu in
+ hppa*64*)
+ archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ ia64*)
+ archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ *)
+ archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ esac
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+ ;;
+ *)
+ if test "$GXX" = yes; then
+ if test $with_gnu_ld = no; then
+ case $host_cpu in
+ hppa*64*)
+ archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ ia64*)
+ archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ *)
+ archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ esac
+ fi
+ else
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ fi
+ ;;
+ esac
+ ;;
+
+ interix[3-9]*)
+ hardcode_direct_CXX=no
+ hardcode_shlibpath_var_CXX=no
+ hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+ export_dynamic_flag_spec_CXX='${wl}-E'
+ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+ # Instead, shared libraries are loaded at an image base (0x10000000 by
+ # default) and relocated if they conflict, which is a slow very memory
+ # consuming and fragmenting process. To avoid this, we pick a random,
+ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
+ archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ ;;
+ irix5* | irix6*)
+ case $cc_basename in
+ CC*)
+ # SGI C++
+ archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+
+ # Archives containing C++ object files must be created using
+ # "CC -ar", where "CC" is the IRIX C++ compiler. This is
+ # necessary to make sure instantiated templates are included
+ # in the archive.
+ old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs'
+ ;;
+ *)
+ if test "$GXX" = yes; then
+ if test "$with_gnu_ld" = no; then
+ archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib'
+ fi
+ fi
+ link_all_deplibs_CXX=yes
+ ;;
+ esac
+ hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator_CXX=:
+ inherit_rpath_CXX=yes
+ ;;
+
+ linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ case $cc_basename in
+ KCC*)
+ # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+ # KCC will only create a shared library if the output file
+ # ends with ".so" (or ".sl" for HP-UX), so rename the library
+ # to its proper name (with version) after linking.
+ archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+ archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+
+ hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+ export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+
+ # Archives containing C++ object files must be created using
+ # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+ old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs'
+ ;;
+ icpc* | ecpc* )
+ # Intel C++
+ with_gnu_ld=yes
+ # version 8.0 and above of icpc choke on multiply defined symbols
+ # if we add $predep_objects and $postdep_objects, however 7.1 and
+ # earlier do not add the objects themselves.
+ case `$CC -V 2>&1` in
+ *"Version 7."*)
+ archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ ;;
+ *) # Version 8.0 or newer
+ tmp_idyn=
+ case $host_cpu in
+ ia64*) tmp_idyn=' -i_dynamic';;
+ esac
+ archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ ;;
+ esac
+ archive_cmds_need_lc_CXX=no
+ hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+ export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+ whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+ ;;
+ pgCC* | pgcpp*)
+ # Portland Group C++ compiler
+ case `$CC -V` in
+ *pgCC\ [1-5].* | *pgcpp\ [1-5].*)
+ prelink_cmds_CXX='tpldir=Template.dir~
+ rm -rf $tpldir~
+ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
+ compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"'
+ old_archive_cmds_CXX='tpldir=Template.dir~
+ rm -rf $tpldir~
+ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
+ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~
+ $RANLIB $oldlib'
+ archive_cmds_CXX='tpldir=Template.dir~
+ rm -rf $tpldir~
+ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+ archive_expsym_cmds_CXX='tpldir=Template.dir~
+ rm -rf $tpldir~
+ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+ ;;
+ *) # Version 6 and above use weak symbols
+ archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+ archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+ ;;
+ esac
+
+ hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir'
+ export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+ whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+ ;;
+ cxx*)
+ # Compaq C++
+ archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
+
+ runpath_var=LD_RUN_PATH
+ hardcode_libdir_flag_spec_CXX='-rpath $libdir'
+ hardcode_libdir_separator_CXX=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed'
+ ;;
+ xl* | mpixl* | bgxl*)
+ # IBM XL 8.0 on PPC, with GNU ld
+ hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+ export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+ archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ if test "x$supports_anon_versioning" = xyes; then
+ archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+ fi
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ # Sun C++ 5.9
+ no_undefined_flag_CXX=' -zdefs'
+ archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
+ hardcode_libdir_flag_spec_CXX='-R$libdir'
+ whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+ compiler_needs_object_CXX=yes
+
+ # Not sure whether something based on
+ # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
+ # would be better.
+ output_verbose_link_cmd='func_echo_all'
+
+ # Archives containing C++ object files must be created using
+ # "CC -xar", where "CC" is the Sun C++ compiler. This is
+ # necessary to make sure instantiated templates are included
+ # in the archive.
+ old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs'
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+
+ lynxos*)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+
+ m88k*)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+
+ mvs*)
+ case $cc_basename in
+ cxx*)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ esac
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+ wlarc=
+ hardcode_libdir_flag_spec_CXX='-R$libdir'
+ hardcode_direct_CXX=yes
+ hardcode_shlibpath_var_CXX=no
+ fi
+ # Workaround some broken pre-1.5 toolchains
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+ ;;
+
+ *nto* | *qnx*)
+ ld_shlibs_CXX=yes
+ ;;
+
+ openbsd2*)
+ # C++ shared libraries are fairly broken
+ ld_shlibs_CXX=no
+ ;;
+
+ openbsd*)
+ if test -f /usr/libexec/ld.so; then
+ hardcode_direct_CXX=yes
+ hardcode_shlibpath_var_CXX=no
+ hardcode_direct_absolute_CXX=yes
+ archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+ hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
+ export_dynamic_flag_spec_CXX='${wl}-E'
+ whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ fi
+ output_verbose_link_cmd=func_echo_all
+ else
+ ld_shlibs_CXX=no
+ fi
+ ;;
+
+ osf3* | osf4* | osf5*)
+ case $cc_basename in
+ KCC*)
+ # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+ # KCC will only create a shared library if the output file
+ # ends with ".so" (or ".sl" for HP-UX), so rename the library
+ # to its proper name (with version) after linking.
+ archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+ hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+ hardcode_libdir_separator_CXX=:
+
+ # Archives containing C++ object files must be created using
+ # the KAI C++ compiler.
+ case $host in
+ osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;;
+ *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;;
+ esac
+ ;;
+ RCC*)
+ # Rational C++ 2.4.1
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ cxx*)
+ case $host in
+ osf3*)
+ allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
+ archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+ hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+ ;;
+ *)
+ allow_undefined_flag_CXX=' -expect_unresolved \*'
+ archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+ archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+ echo "-hidden">> $lib.exp~
+ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~
+ $RM $lib.exp'
+ hardcode_libdir_flag_spec_CXX='-rpath $libdir'
+ ;;
+ esac
+
+ hardcode_libdir_separator_CXX=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+ ;;
+ *)
+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+ allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
+ case $host in
+ osf3*)
+ archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ ;;
+ *)
+ archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ ;;
+ esac
+
+ hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator_CXX=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+
+ else
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ fi
+ ;;
+ esac
+ ;;
+
+ psos*)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+
+ sunos4*)
+ case $cc_basename in
+ CC*)
+ # Sun C++ 4.x
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ lcc*)
+ # Lucid
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ esac
+ ;;
+
+ solaris*)
+ case $cc_basename in
+ CC*)
+ # Sun C++ 4.2, 5.x and Centerline C++
+ archive_cmds_need_lc_CXX=yes
+ no_undefined_flag_CXX=' -zdefs'
+ archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+ hardcode_libdir_flag_spec_CXX='-R$libdir'
+ hardcode_shlibpath_var_CXX=no
+ case $host_os in
+ solaris2.[0-5] | solaris2.[0-5].*) ;;
+ *)
+ # The compiler driver will combine and reorder linker options,
+ # but understands `-z linker_flag'.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract'
+ ;;
+ esac
+ link_all_deplibs_CXX=yes
+
+ output_verbose_link_cmd='func_echo_all'
+
+ # Archives containing C++ object files must be created using
+ # "CC -xar", where "CC" is the Sun C++ compiler. This is
+ # necessary to make sure instantiated templates are included
+ # in the archive.
+ old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs'
+ ;;
+ gcx*)
+ # Green Hills C++ Compiler
+ archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+
+ # The C++ compiler must be used to create the archive.
+ old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+ ;;
+ *)
+ # GNU C++ compiler with Solaris linker
+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+ no_undefined_flag_CXX=' ${wl}-z ${wl}defs'
+ if $CC --version | $GREP -v '^2\.7' > /dev/null; then
+ archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+ archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+ else
+ # g++ 2.7 appears to require `-G' NOT `-shared' on this
+ # platform.
+ archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+ archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+ fi
+
+ hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir'
+ case $host_os in
+ solaris2.[0-5] | solaris2.[0-5].*) ;;
+ *)
+ whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+ ;;
+ esac
+ fi
+ ;;
+ esac
+ ;;
+
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+ no_undefined_flag_CXX='${wl}-z,text'
+ archive_cmds_need_lc_CXX=no
+ hardcode_shlibpath_var_CXX=no
+ runpath_var='LD_RUN_PATH'
+
+ case $cc_basename in
+ CC*)
+ archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6*)
+ # Note: We can NOT use -z defs as we might desire, because we do not
+ # link with -lc, and that would cause any symbols used from libc to
+ # always be unresolved, which means just about no library would
+ # ever link correctly. If we're not using GNU ld we use -z text
+ # though, which does catch some bad symbols but isn't as heavy-handed
+ # as -z defs.
+ no_undefined_flag_CXX='${wl}-z,text'
+ allow_undefined_flag_CXX='${wl}-z,nodefs'
+ archive_cmds_need_lc_CXX=no
+ hardcode_shlibpath_var_CXX=no
+ hardcode_libdir_flag_spec_CXX='${wl}-R,$libdir'
+ hardcode_libdir_separator_CXX=':'
+ link_all_deplibs_CXX=yes
+ export_dynamic_flag_spec_CXX='${wl}-Bexport'
+ runpath_var='LD_RUN_PATH'
+
+ case $cc_basename in
+ CC*)
+ archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~
+ '"$old_archive_cmds_CXX"
+ reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~
+ '"$reload_cmds_CXX"
+ ;;
+ *)
+ archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ ;;
+
+ tandem*)
+ case $cc_basename in
+ NCC*)
+ # NonStop-UX NCC 3.20
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ esac
+ ;;
+
+ vxworks*)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+
+ *)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ esac
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5
+$as_echo "$ld_shlibs_CXX" >&6; }
+ test "$ld_shlibs_CXX" = no && can_build_shared=no
+
+ GCC_CXX="$GXX"
+ LD_CXX="$LD"
+
+ ## CAVEAT EMPTOR:
+ ## There is no encapsulation within the following macros, do not change
+ ## the running order or otherwise move them around unless you know exactly
+ ## what you are doing...
+ # Dependencies to place before and after the object being linked:
+predep_objects_CXX=
+postdep_objects_CXX=
+predeps_CXX=
+postdeps_CXX=
+compiler_lib_search_path_CXX=
+
+cat > conftest.$ac_ext <<_LT_EOF
+class Foo
+{
+public:
+ Foo (void) { a = 0; }
+private:
+ int a;
+};
+_LT_EOF
+
+if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ # Parse the compiler output and extract the necessary
+ # objects, libraries and library flags.
+
+ # Sentinel used to keep track of whether or not we are before
+ # the conftest object file.
+ pre_test_object_deps_done=no
+
+ for p in `eval "$output_verbose_link_cmd"`; do
+ case $p in
+
+ -L* | -R* | -l*)
+ # Some compilers place space between "-{L,R}" and the path.
+ # Remove the space.
+ if test $p = "-L" ||
+ test $p = "-R"; then
+ prev=$p
+ continue
+ else
+ prev=
+ fi
+
+ if test "$pre_test_object_deps_done" = no; then
+ case $p in
+ -L* | -R*)
+ # Internal compiler library paths should come after those
+ # provided the user. The postdeps already come after the
+ # user supplied libs so there is no need to process them.
+ if test -z "$compiler_lib_search_path_CXX"; then
+ compiler_lib_search_path_CXX="${prev}${p}"
+ else
+ compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}"
+ fi
+ ;;
+ # The "-l" case would never come before the object being
+ # linked, so don't bother handling this case.
+ esac
+ else
+ if test -z "$postdeps_CXX"; then
+ postdeps_CXX="${prev}${p}"
+ else
+ postdeps_CXX="${postdeps_CXX} ${prev}${p}"
+ fi
+ fi
+ ;;
+
+ *.$objext)
+ # This assumes that the test object file only shows up
+ # once in the compiler output.
+ if test "$p" = "conftest.$objext"; then
+ pre_test_object_deps_done=yes
+ continue
+ fi
+
+ if test "$pre_test_object_deps_done" = no; then
+ if test -z "$predep_objects_CXX"; then
+ predep_objects_CXX="$p"
+ else
+ predep_objects_CXX="$predep_objects_CXX $p"
+ fi
+ else
+ if test -z "$postdep_objects_CXX"; then
+ postdep_objects_CXX="$p"
+ else
+ postdep_objects_CXX="$postdep_objects_CXX $p"
+ fi
+ fi
+ ;;
+
+ *) ;; # Ignore the rest.
+
+ esac
+ done
+
+ # Clean up.
+ rm -f a.out a.exe
+else
+ echo "libtool.m4: error: problem compiling CXX test program"
+fi
+
+$RM -f confest.$objext
+
+# PORTME: override above test on systems where it is broken
+case $host_os in
+interix[3-9]*)
+ # Interix 3.5 installs completely hosed .la files for C++, so rather than
+ # hack all around it, let's just trust "g++" to DTRT.
+ predep_objects_CXX=
+ postdep_objects_CXX=
+ postdeps_CXX=
+ ;;
+
+linux*)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ # Sun C++ 5.9
+
+ # The more standards-conforming stlport4 library is
+ # incompatible with the Cstd library. Avoid specifying
+ # it if it's in CXXFLAGS. Ignore libCrun as
+ # -library=stlport4 depends on it.
+ case " $CXX $CXXFLAGS " in
+ *" -library=stlport4 "*)
+ solaris_use_stlport4=yes
+ ;;
+ esac
+
+ if test "$solaris_use_stlport4" != yes; then
+ postdeps_CXX='-library=Cstd -library=Crun'
+ fi
+ ;;
+ esac
+ ;;
+
+solaris*)
+ case $cc_basename in
+ CC*)
+ # The more standards-conforming stlport4 library is
+ # incompatible with the Cstd library. Avoid specifying
+ # it if it's in CXXFLAGS. Ignore libCrun as
+ # -library=stlport4 depends on it.
+ case " $CXX $CXXFLAGS " in
+ *" -library=stlport4 "*)
+ solaris_use_stlport4=yes
+ ;;
+ esac
+
+ # Adding this requires a known-good setup of shared libraries for
+ # Sun compiler versions before 5.6, else PIC objects from an old
+ # archive will be linked into the output, leading to subtle bugs.
+ if test "$solaris_use_stlport4" != yes; then
+ postdeps_CXX='-library=Cstd -library=Crun'
+ fi
+ ;;
+ esac
+ ;;
+esac
+
+
+case " $postdeps_CXX " in
+*" -lc "*) archive_cmds_need_lc_CXX=no ;;
+esac
+ compiler_lib_search_dirs_CXX=
+if test -n "${compiler_lib_search_path_CXX}"; then
+ compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ lt_prog_compiler_wl_CXX=
+lt_prog_compiler_pic_CXX=
+lt_prog_compiler_static_CXX=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+
+ # C++ specific cases for pic, static, wl, etc.
+ if test "$GXX" = yes; then
+ lt_prog_compiler_wl_CXX='-Wl,'
+ lt_prog_compiler_static_CXX='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ lt_prog_compiler_static_CXX='-Bstatic'
+ fi
+ lt_prog_compiler_pic_CXX='-fPIC'
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ lt_prog_compiler_pic_CXX='-fPIC'
+ ;;
+ m68k)
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the `-m68020' flag to GCC prevents building anything better,
+ # like `-m68040'.
+ lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4'
+ ;;
+ esac
+ ;;
+
+ beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+ mingw* | cygwin* | os2* | pw32* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ # Although the cygwin gcc ignores -fPIC, still need this for old-style
+ # (--disable-auto-import) libraries
+ lt_prog_compiler_pic_CXX='-DDLL_EXPORT'
+ ;;
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ lt_prog_compiler_pic_CXX='-fno-common'
+ ;;
+ *djgpp*)
+ # DJGPP does not support shared libraries at all
+ lt_prog_compiler_pic_CXX=
+ ;;
+ haiku*)
+ # PIC is the default for Haiku.
+ # The "-static" flag exists, but is broken.
+ lt_prog_compiler_static_CXX=
+ ;;
+ interix[3-9]*)
+ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+ # Instead, we relocate shared libraries at runtime.
+ ;;
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ lt_prog_compiler_pic_CXX=-Kconform_pic
+ fi
+ ;;
+ hpux*)
+ # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+ # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag
+ # sets the default TLS model and affects inlining.
+ case $host_cpu in
+ hppa*64*)
+ ;;
+ *)
+ lt_prog_compiler_pic_CXX='-fPIC'
+ ;;
+ esac
+ ;;
+ *qnx* | *nto*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ lt_prog_compiler_pic_CXX='-fPIC -shared'
+ ;;
+ *)
+ lt_prog_compiler_pic_CXX='-fPIC'
+ ;;
+ esac
+ else
+ case $host_os in
+ aix[4-9]*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ lt_prog_compiler_static_CXX='-Bstatic'
+ else
+ lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+ chorus*)
+ case $cc_basename in
+ cxch68*)
+ # Green Hills C++ Compiler
+ # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+ ;;
+ esac
+ ;;
+ dgux*)
+ case $cc_basename in
+ ec++*)
+ lt_prog_compiler_pic_CXX='-KPIC'
+ ;;
+ ghcx*)
+ # Green Hills C++ Compiler
+ lt_prog_compiler_pic_CXX='-pic'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ freebsd* | dragonfly*)
+ # FreeBSD uses GNU C++
+ ;;
+ hpux9* | hpux10* | hpux11*)
+ case $cc_basename in
+ CC*)
+ lt_prog_compiler_wl_CXX='-Wl,'
+ lt_prog_compiler_static_CXX='${wl}-a ${wl}archive'
+ if test "$host_cpu" != ia64; then
+ lt_prog_compiler_pic_CXX='+Z'
+ fi
+ ;;
+ aCC*)
+ lt_prog_compiler_wl_CXX='-Wl,'
+ lt_prog_compiler_static_CXX='${wl}-a ${wl}archive'
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ lt_prog_compiler_pic_CXX='+Z'
+ ;;
+ esac
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ interix*)
+ # This is c89, which is MS Visual C++ (no shared libs)
+ # Anyone wants to do a port?
+ ;;
+ irix5* | irix6* | nonstopux*)
+ case $cc_basename in
+ CC*)
+ lt_prog_compiler_wl_CXX='-Wl,'
+ lt_prog_compiler_static_CXX='-non_shared'
+ # CC pic flag -KPIC is the default.
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ case $cc_basename in
+ KCC*)
+ # KAI C++ Compiler
+ lt_prog_compiler_wl_CXX='--backend -Wl,'
+ lt_prog_compiler_pic_CXX='-fPIC'
+ ;;
+ ecpc* )
+ # old Intel C++ for x86_64 which still supported -KPIC.
+ lt_prog_compiler_wl_CXX='-Wl,'
+ lt_prog_compiler_pic_CXX='-KPIC'
+ lt_prog_compiler_static_CXX='-static'
+ ;;
+ icpc* )
+ # Intel C++, used to be incompatible with GCC.
+ # ICC 10 doesn't accept -KPIC any more.
+ lt_prog_compiler_wl_CXX='-Wl,'
+ lt_prog_compiler_pic_CXX='-fPIC'
+ lt_prog_compiler_static_CXX='-static'
+ ;;
+ pgCC* | pgcpp*)
+ # Portland Group C++ compiler
+ lt_prog_compiler_wl_CXX='-Wl,'
+ lt_prog_compiler_pic_CXX='-fpic'
+ lt_prog_compiler_static_CXX='-Bstatic'
+ ;;
+ cxx*)
+ # Compaq C++
+ # Make sure the PIC flag is empty. It appears that all Alpha
+ # Linux and Compaq Tru64 Unix objects are PIC.
+ lt_prog_compiler_pic_CXX=
+ lt_prog_compiler_static_CXX='-non_shared'
+ ;;
+ xlc* | xlC* | bgxl[cC]* | mpixl[cC]*)
+ # IBM XL 8.0, 9.0 on PPC and BlueGene
+ lt_prog_compiler_wl_CXX='-Wl,'
+ lt_prog_compiler_pic_CXX='-qpic'
+ lt_prog_compiler_static_CXX='-qstaticlink'
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ # Sun C++ 5.9
+ lt_prog_compiler_pic_CXX='-KPIC'
+ lt_prog_compiler_static_CXX='-Bstatic'
+ lt_prog_compiler_wl_CXX='-Qoption ld '
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+ lynxos*)
+ ;;
+ m88k*)
+ ;;
+ mvs*)
+ case $cc_basename in
+ cxx*)
+ lt_prog_compiler_pic_CXX='-W c,exportall'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ netbsd*)
+ ;;
+ *qnx* | *nto*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ lt_prog_compiler_pic_CXX='-fPIC -shared'
+ ;;
+ osf3* | osf4* | osf5*)
+ case $cc_basename in
+ KCC*)
+ lt_prog_compiler_wl_CXX='--backend -Wl,'
+ ;;
+ RCC*)
+ # Rational C++ 2.4.1
+ lt_prog_compiler_pic_CXX='-pic'
+ ;;
+ cxx*)
+ # Digital/Compaq C++
+ lt_prog_compiler_wl_CXX='-Wl,'
+ # Make sure the PIC flag is empty. It appears that all Alpha
+ # Linux and Compaq Tru64 Unix objects are PIC.
+ lt_prog_compiler_pic_CXX=
+ lt_prog_compiler_static_CXX='-non_shared'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ psos*)
+ ;;
+ solaris*)
+ case $cc_basename in
+ CC*)
+ # Sun C++ 4.2, 5.x and Centerline C++
+ lt_prog_compiler_pic_CXX='-KPIC'
+ lt_prog_compiler_static_CXX='-Bstatic'
+ lt_prog_compiler_wl_CXX='-Qoption ld '
+ ;;
+ gcx*)
+ # Green Hills C++ Compiler
+ lt_prog_compiler_pic_CXX='-PIC'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ sunos4*)
+ case $cc_basename in
+ CC*)
+ # Sun C++ 4.x
+ lt_prog_compiler_pic_CXX='-pic'
+ lt_prog_compiler_static_CXX='-Bstatic'
+ ;;
+ lcc*)
+ # Lucid
+ lt_prog_compiler_pic_CXX='-pic'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ case $cc_basename in
+ CC*)
+ lt_prog_compiler_wl_CXX='-Wl,'
+ lt_prog_compiler_pic_CXX='-KPIC'
+ lt_prog_compiler_static_CXX='-Bstatic'
+ ;;
+ esac
+ ;;
+ tandem*)
+ case $cc_basename in
+ NCC*)
+ # NonStop-UX NCC 3.20
+ lt_prog_compiler_pic_CXX='-KPIC'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ vxworks*)
+ ;;
+ *)
+ lt_prog_compiler_can_build_shared_CXX=no
+ ;;
+ esac
+ fi
+
+case $host_os in
+ # For platforms which do not support PIC, -DPIC is meaningless:
+ *djgpp*)
+ lt_prog_compiler_pic_CXX=
+ ;;
+ *)
+ lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC"
+ ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic_CXX" >&5
+$as_echo "$lt_prog_compiler_pic_CXX" >&6; }
+
+
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic_CXX"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5
+$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; }
+if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_pic_works_CXX=no
+ ac_outfile=conftest.$ac_objext
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+ $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_pic_works_CXX=yes
+ fi
+ fi
+ $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; }
+
+if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then
+ case $lt_prog_compiler_pic_CXX in
+ "" | " "*) ;;
+ *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;;
+ esac
+else
+ lt_prog_compiler_pic_CXX=
+ lt_prog_compiler_can_build_shared_CXX=no
+fi
+
+fi
+
+
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
+if ${lt_cv_prog_compiler_static_works_CXX+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_static_works_CXX=no
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+ echo "$lt_simple_link_test_code" > conftest.$ac_ext
+ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+ # The linker can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test -s conftest.err; then
+ # Append any errors to the config.log.
+ cat conftest.err 1>&5
+ $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if diff conftest.exp conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_static_works_CXX=yes
+ fi
+ else
+ lt_cv_prog_compiler_static_works_CXX=yes
+ fi
+ fi
+ $RM -r conftest*
+ LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; }
+
+if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then
+ :
+else
+ lt_prog_compiler_static_CXX=
+fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o_CXX+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_c_o_CXX=no
+ $RM -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_c_o_CXX=yes
+ fi
+ fi
+ chmod u+w . 2>&5
+ $RM conftest*
+ # SGI C++ compiler will create directory out/ii_files/ for
+ # template instantiation
+ test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+ $RM out/* && rmdir out
+ cd ..
+ $RM -r conftest
+ $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; }
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o_CXX+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_c_o_CXX=no
+ $RM -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_c_o_CXX=yes
+ fi
+ fi
+ chmod u+w . 2>&5
+ $RM conftest*
+ # SGI C++ compiler will create directory out/ii_files/ for
+ # template instantiation
+ test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+ $RM out/* && rmdir out
+ cd ..
+ $RM -r conftest
+ $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; }
+
+
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then
+ # do not overwrite the value of need_locks provided by the user
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
+$as_echo_n "checking if we can lock with hard links... " >&6; }
+ hard_links=yes
+ $RM conftest*
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ touch conftest.a
+ ln conftest.a conftest.b 2>&5 || hard_links=no
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
+$as_echo "$hard_links" >&6; }
+ if test "$hard_links" = no; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+ need_locks=warn
+ fi
+else
+ need_locks=no
+fi
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+
+ export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ case $host_os in
+ aix[4-9]*)
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to AIX nm, but means don't demangle with GNU nm
+ # Also, AIX nm treats weak defined symbols like other global defined
+ # symbols, whereas GNU nm marks them as "W".
+ if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+ export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ else
+ export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ fi
+ ;;
+ pw32*)
+ export_symbols_cmds_CXX="$ltdll_cmds"
+ ;;
+ cygwin* | mingw* | cegcc*)
+ export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;/^.*[ ]__nm__/s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
+ ;;
+ *)
+ export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ ;;
+ esac
+ exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5
+$as_echo "$ld_shlibs_CXX" >&6; }
+test "$ld_shlibs_CXX" = no && can_build_shared=no
+
+with_gnu_ld_CXX=$with_gnu_ld
+
+
+
+
+
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc_CXX" in
+x|xyes)
+ # Assume -lc should be added
+ archive_cmds_need_lc_CXX=yes
+
+ if test "$enable_shared" = yes && test "$GCC" = yes; then
+ case $archive_cmds_CXX in
+ *'~'*)
+ # FIXME: we may have to deal with multi-command sequences.
+ ;;
+ '$CC '*)
+ # Test whether the compiler implicitly links with -lc since on some
+ # systems, -lgcc has to come before -lc. If gcc already passes -lc
+ # to ld, don't add -lc before -lgcc.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
+$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
+if ${lt_cv_archive_cmds_need_lc_CXX+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ $RM conftest*
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } 2>conftest.err; then
+ soname=conftest
+ lib=conftest
+ libobjs=conftest.$ac_objext
+ deplibs=
+ wl=$lt_prog_compiler_wl_CXX
+ pic_flag=$lt_prog_compiler_pic_CXX
+ compiler_flags=-v
+ linker_flags=-v
+ verstring=
+ output_objdir=.
+ libname=conftest
+ lt_save_allow_undefined_flag=$allow_undefined_flag_CXX
+ allow_undefined_flag_CXX=
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
+ (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ then
+ lt_cv_archive_cmds_need_lc_CXX=no
+ else
+ lt_cv_archive_cmds_need_lc_CXX=yes
+ fi
+ allow_undefined_flag_CXX=$lt_save_allow_undefined_flag
+ else
+ cat conftest.err 1>&5
+ fi
+ $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5
+$as_echo "$lt_cv_archive_cmds_need_lc_CXX" >&6; }
+ archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX
+ ;;
+ esac
+ fi
+ ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
+$as_echo_n "checking dynamic linker characteristics... " >&6; }
+
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+ shlibpath_var=LIBPATH
+
+ # AIX 3 has no versioning support, so we append a major version to the name.
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+
+aix[4-9]*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ hardcode_into_libs=yes
+ if test "$host_cpu" = ia64; then
+ # AIX 5 supports IA64
+ library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ else
+ # With GCC up to 2.95.x, collect2 would create an import file
+ # for dependence libraries. The import file would start with
+ # the line `#! .'. This would cause the generated library to
+ # depend on `.', always an invalid library. This was fixed in
+ # development snapshots of GCC prior to 3.0.
+ case $host_os in
+ aix4 | aix4.[01] | aix4.[01].*)
+ if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+ echo ' yes '
+ echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+ :
+ else
+ can_build_shared=no
+ fi
+ ;;
+ esac
+ # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+ # soname into executable. Probably we can add versioning support to
+ # collect2, so additional links can be useful in future.
+ if test "$aix_use_runtimelinking" = yes; then
+ # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+ # instead of lib<name>.a to let people know that these are not
+ # typical AIX shared libraries.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ else
+ # We preserve .a as extension for shared libraries through AIX4.2
+ # and later when we are not doing run time linking.
+ library_names_spec='${libname}${release}.a $libname.a'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ fi
+ shlibpath_var=LIBPATH
+ fi
+ ;;
+
+amigaos*)
+ case $host_cpu in
+ powerpc)
+ # Since July 2007 AmigaOS4 officially supports .so libraries.
+ # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ ;;
+ m68k)
+ library_names_spec='$libname.ixlibrary $libname.a'
+ # Create ${libname}_ixlibrary.a entries in /sys/libs.
+ finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+ ;;
+ esac
+ ;;
+
+beos*)
+ library_names_spec='${libname}${shared_ext}'
+ dynamic_linker="$host_os ld.so"
+ shlibpath_var=LIBRARY_PATH
+ ;;
+
+bsdi[45]*)
+ version_type=linux
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+ sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+ # the default ld.so.conf also contains /usr/contrib/lib and
+ # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+ # libtool to hard-code these into programs
+ ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+ version_type=windows
+ shrext_cmds=".dll"
+ need_version=no
+ need_lib_prefix=no
+
+ case $GCC,$host_os in
+ yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \${file}`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname~
+ chmod a+x \$dldir/$dlname~
+ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+ eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+ fi'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $RM \$dlpath'
+ shlibpath_overrides_runpath=yes
+
+ case $host_os in
+ cygwin*)
+ # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+ soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+
+ ;;
+ mingw* | cegcc*)
+ # MinGW DLLs use traditional 'lib' prefix
+ soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ ;;
+ pw32*)
+ # pw32 DLLs use 'pw' prefix rather than 'lib'
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ ;;
+ esac
+ ;;
+
+ *)
+ library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+ ;;
+ esac
+ dynamic_linker='Win32 ld.exe'
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+
+darwin* | rhapsody*)
+ dynamic_linker="$host_os dyld"
+ version_type=darwin
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+ soname_spec='${libname}${release}${major}$shared_ext'
+ shlibpath_overrides_runpath=yes
+ shlibpath_var=DYLD_LIBRARY_PATH
+ shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+
+ sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+ ;;
+
+dgux*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+freebsd* | dragonfly*)
+ # DragonFly does not have aout. When/if they implement a new
+ # versioning mechanism, adjust this.
+ if test -x /usr/bin/objformat; then
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+ freebsd[23].*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+ version_type=freebsd-$objformat
+ case $version_type in
+ freebsd-elf*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ need_version=no
+ need_lib_prefix=no
+ ;;
+ freebsd-*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+ need_version=yes
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+ *) # from 4.6 on, and DragonFly
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ esac
+ ;;
+
+haiku*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ dynamic_linker="$host_os runtime_loader"
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
+ hardcode_into_libs=yes
+ ;;
+
+hpux9* | hpux10* | hpux11*)
+ # Give a soname corresponding to the major version so that dld.sl refuses to
+ # link against other versions.
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ case $host_cpu in
+ ia64*)
+ shrext_cmds='.so'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.so"
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ if test "X$HPUX_IA64_MODE" = X32; then
+ sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+ else
+ sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+ fi
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ hppa*64*)
+ shrext_cmds='.sl'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ *)
+ shrext_cmds='.sl'
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=SHLIB_PATH
+ shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+ esac
+ # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
+ postinstall_cmds='chmod 555 $lib'
+ # or fails outright, so override atomically:
+ install_override_mode=555
+ ;;
+
+interix[3-9]*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $host_os in
+ nonstopux*) version_type=nonstopux ;;
+ *)
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ version_type=linux
+ else
+ version_type=irix
+ fi ;;
+ esac
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+ case $host_os in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in # libtool.m4 will add one of these switches to LD
+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+ libsuff= shlibsuff= libmagic=32-bit;;
+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+ libsuff=32 shlibsuff=N32 libmagic=N32;;
+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+ libsuff=64 shlibsuff=64 libmagic=64-bit;;
+ *) libsuff= shlibsuff= libmagic=never-match;;
+ esac
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+ sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+ hardcode_into_libs=yes
+ ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+ dynamic_linker=no
+ ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+
+ # Some binutils ld are patched to set DT_RUNPATH
+ if ${lt_cv_shlibpath_overrides_runpath+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_shlibpath_overrides_runpath=no
+ save_LDFLAGS=$LDFLAGS
+ save_libdir=$libdir
+ eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \
+ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+ if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
+ lt_cv_shlibpath_overrides_runpath=yes
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ LDFLAGS=$save_LDFLAGS
+ libdir=$save_libdir
+
+fi
+
+ shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
+
+ # This implies no fast_install, which is unacceptable.
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ # Append ld.so.conf contents to the search path
+ if test -f /etc/ld.so.conf; then
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+ sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+ fi
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+ # powerpc, because MkLinux only supported shared libraries with the
+ # GNU dynamic linker. Since this was broken with cross compilers,
+ # most powerpc-linux boxes support dynamic linking these days and
+ # people can always --disable-shared, the test was removed, and we
+ # assume the GNU/Linux dynamic linker is in use.
+ dynamic_linker='GNU/Linux ld.so'
+ ;;
+
+netbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ dynamic_linker='NetBSD (a.out) ld.so'
+ else
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='NetBSD ld.elf_so'
+ fi
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+
+newsos6)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+*nto* | *qnx*)
+ version_type=qnx
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='ldqnx.so'
+ ;;
+
+openbsd*)
+ version_type=sunos
+ sys_lib_dlsearch_path_spec="/usr/lib"
+ need_lib_prefix=no
+ # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+ case $host_os in
+ openbsd3.3 | openbsd3.3.*) need_version=yes ;;
+ *) need_version=no ;;
+ esac
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ case $host_os in
+ openbsd2.[89] | openbsd2.[89].*)
+ shlibpath_overrides_runpath=no
+ ;;
+ *)
+ shlibpath_overrides_runpath=yes
+ ;;
+ esac
+ else
+ shlibpath_overrides_runpath=yes
+ fi
+ ;;
+
+os2*)
+ libname_spec='$name'
+ shrext_cmds=".dll"
+ need_lib_prefix=no
+ library_names_spec='$libname${shared_ext} $libname.a'
+ dynamic_linker='OS/2 ld.exe'
+ shlibpath_var=LIBPATH
+ ;;
+
+osf3* | osf4* | osf5*)
+ version_type=osf
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+ sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+ ;;
+
+rdos*)
+ dynamic_linker=no
+ ;;
+
+solaris*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ # ldd complains unless libraries are executable
+ postinstall_cmds='chmod +x $lib'
+ ;;
+
+sunos4*)
+ version_type=sunos
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ if test "$with_gnu_ld" = yes; then
+ need_lib_prefix=no
+ fi
+ need_version=yes
+ ;;
+
+sysv4 | sysv4.3*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_vendor in
+ sni)
+ shlibpath_overrides_runpath=no
+ need_lib_prefix=no
+ runpath_var=LD_RUN_PATH
+ ;;
+ siemens)
+ need_lib_prefix=no
+ ;;
+ motorola)
+ need_lib_prefix=no
+ need_version=no
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+ ;;
+ esac
+ ;;
+
+sysv4*MP*)
+ if test -d /usr/nec ;then
+ version_type=linux
+ library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+ soname_spec='$libname${shared_ext}.$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ fi
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ version_type=freebsd-elf
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ if test "$with_gnu_ld" = yes; then
+ sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+ else
+ sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+ case $host_os in
+ sco3.2v5*)
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+ ;;
+ esac
+ fi
+ sys_lib_dlsearch_path_spec='/usr/lib'
+ ;;
+
+tpf*)
+ # TPF is a cross-target only. Preferred cross-host = GNU/Linux.
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+uts4*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+*)
+ dynamic_linker=no
+ ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
+$as_echo "$dynamic_linker" >&6; }
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
+ sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+fi
+if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
+ sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
+$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
+hardcode_action_CXX=
+if test -n "$hardcode_libdir_flag_spec_CXX" ||
+ test -n "$runpath_var_CXX" ||
+ test "X$hardcode_automatic_CXX" = "Xyes" ; then
+
+ # We can hardcode non-existent directories.
+ if test "$hardcode_direct_CXX" != no &&
+ # If the only mechanism to avoid hardcoding is shlibpath_var, we
+ # have to relink, otherwise we might link with an installed library
+ # when we should be linking with a yet-to-be-installed one
+ ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no &&
+ test "$hardcode_minus_L_CXX" != no; then
+ # Linking always hardcodes the temporary library directory.
+ hardcode_action_CXX=relink
+ else
+ # We can link without hardcoding, and we can hardcode nonexisting dirs.
+ hardcode_action_CXX=immediate
+ fi
+else
+ # We cannot hardcode anything, or else we can only hardcode existing
+ # directories.
+ hardcode_action_CXX=unsupported
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5
+$as_echo "$hardcode_action_CXX" >&6; }
+
+if test "$hardcode_action_CXX" = relink ||
+ test "$inherit_rpath_CXX" = yes; then
+ # Fast installation is not supported
+ enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+ test "$enable_shared" = no; then
+ # Fast installation is not necessary
+ enable_fast_install=needless
+fi
+
+
+
+
+
+
+
+ fi # test -n "$compiler"
+
+ CC=$lt_save_CC
+ LDCXX=$LD
+ LD=$lt_save_LD
+ GCC=$lt_save_GCC
+ with_gnu_ld=$lt_save_with_gnu_ld
+ lt_cv_path_LDCXX=$lt_cv_path_LD
+ lt_cv_path_LD=$lt_save_path_LD
+ lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+ lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+fi # test "$_lt_caught_CXX_error" != yes
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ac_config_commands="$ac_config_commands libtool"
+
+
+
+
+# Only expand once:
+
+
+# Check whether --enable-shared was given.
+if test "${enable_shared+set}" = set; then :
+ enableval=$enable_shared; p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_shared=yes ;;
+ no) enable_shared=no ;;
+ *)
+ enable_shared=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_shared=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac
+else
+ enable_shared=yes
+fi
+
+
+
+
+
+
+# Check whether --enable-static was given.
+if test "${enable_static+set}" = set; then :
+ enableval=$enable_static; p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_static=yes ;;
+ no) enable_static=no ;;
+ *)
+ enable_static=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_static=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac
+else
+ enable_static=no
+fi
+
+
+
+
+
+
+
+if test "$enable_shared" != "yes"; then
+ as_fn_error $? "Cannot set --enable-shared for gprofng/libcollector." "$LINENO" 5
+fi
+
+GPROFNG_VARIANT=unknown
+case "${target}" in
+ x86_64-*-linux*)
+ GPROFNG_VARIANT=amd64-Linux
+ ;;
+ i?86-*-linux*)
+ GPROFNG_VARIANT=intel-Linux
+ ;;
+ aarch64-*-linux*)
+ GPROFNG_VARIANT=aarch64-Linux
+ ;;
+esac
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+GPROFNG_NO_NONNULL_COMPARE_CFLAGS=
+save_CFLAGS="$CFLAGS"
+for real_option in -Wno-nonnull-compare; do
+ # Do the check with the no- prefix removed since gcc silently
+ # accepts any -Wno-* option on purpose
+ case $real_option in
+ -Wno-*) option=-W`expr x$real_option : 'x-Wno-\(.*\)'` ;;
+ *) option=$real_option ;;
+ esac
+ as_acx_Woption=`$as_echo "acx_cv_prog_cc_warning_$option" | $as_tr_sh`
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports $option" >&5
+$as_echo_n "checking whether $CC supports $option... " >&6; }
+if eval \${$as_acx_Woption+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ CFLAGS="$option"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ eval "$as_acx_Woption=yes"
+else
+ eval "$as_acx_Woption=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+eval ac_res=\$$as_acx_Woption
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+ if test `eval 'as_val=${'$as_acx_Woption'};$as_echo "$as_val"'` = yes; then :
+ GPROFNG_NO_NONNULL_COMPARE_CFLAGS="$GPROFNG_NO_NONNULL_COMPARE_CFLAGS${GPROFNG_NO_NONNULL_COMPARE_CFLAGS:+ }$real_option"
+fi
+ done
+CFLAGS="$save_CFLAGS"
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
+ac_config_files="$ac_config_files Makefile"
+
+ac_config_headers="$ac_config_headers lib-config.h:../common/config.h.in"
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems. If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, we kill variables containing newlines.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(
+ for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+ *) { eval $ac_var=; unset $ac_var;} ;;
+ esac ;;
+ esac
+ done
+
+ (set) 2>&1 |
+ case $as_nl`(ac_space=' '; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
+ # `set' does not quote correctly, so add quotes: double-quote
+ # substitution turns \\\\ into \\, and sed turns \\ into \.
+ sed -n \
+ "s/'/'\\\\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+ ;; #(
+ *)
+ # `set' quotes correctly as required by POSIX, so do not add quotes.
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ ;;
+ esac |
+ sort
+) |
+ sed '
+ /^ac_cv_env_/b end
+ t clear
+ :clear
+ s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+ t end
+ s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+ :end' >>confcache
+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+ if test -w "$cache_file"; then
+ if test "x$cache_file" != "x/dev/null"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+$as_echo "$as_me: updating cache $cache_file" >&6;}
+ if test ! -f "$cache_file" || test -h "$cache_file"; then
+ cat confcache >"$cache_file"
+ else
+ case $cache_file in #(
+ */* | ?:*)
+ mv -f confcache "$cache_file"$$ &&
+ mv -f "$cache_file"$$ "$cache_file" ;; #(
+ *)
+ mv -f confcache "$cache_file" ;;
+ esac
+ fi
+ fi
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+ fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+DEFS=-DHAVE_CONFIG_H
+
+ac_libobjs=
+ac_ltlibobjs=
+U=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+ # 1. Remove the extension, and $U if already installed.
+ ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+ ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+ # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
+ # will be set to the directory where LIBOBJS objects are built.
+ as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+ as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5
+$as_echo_n "checking that generated files are newer than configure... " >&6; }
+ if test -n "$am_sleep_pid"; then
+ # Hide warnings about reused PIDs.
+ wait $am_sleep_pid 2>/dev/null
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5
+$as_echo "done" >&6; }
+ if test -n "$EXEEXT"; then
+ am__EXEEXT_TRUE=
+ am__EXEEXT_FALSE='#'
+else
+ am__EXEEXT_TRUE='#'
+ am__EXEEXT_FALSE=
+fi
+
+if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
+ as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+ as_fn_error $? "conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+ as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+ as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
+ as_fn_error $? "conditional \"am__fastdepCXX\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+
+: "${CONFIG_STATUS=./config.status}"
+ac_write_fail=0
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+as_write_fail=0
+cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='print -r --'
+ as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='printf %s\n'
+ as_echo_n='printf %s'
+else
+ if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+ as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+ as_echo_n='/usr/ucb/echo -n'
+ else
+ as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+ as_echo_n_body='eval
+ arg=$1;
+ case $arg in #(
+ *"$as_nl"*)
+ expr "X$arg" : "X\\(.*\\)$as_nl";
+ arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+ esac;
+ expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+ '
+ export as_echo_n_body
+ as_echo_n='sh -c $as_echo_n_body as_echo'
+ fi
+ export as_echo_body
+ as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" "" $as_nl"
+
+# Find who we are. Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there. '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+ as_status=$1; test $as_status -eq 0 && as_status=1
+ if test "$4"; then
+ as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ fi
+ $as_echo "$as_me: error: $2" >&2
+ as_fn_exit $as_status
+} # as_fn_error
+
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+ return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+ set +e
+ as_fn_set_status $1
+ exit $1
+} # as_fn_exit
+
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+ { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+ eval 'as_fn_append ()
+ {
+ eval $1+=\$2
+ }'
+else
+ as_fn_append ()
+ {
+ eval $1=\$$1\$2
+ }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+ eval 'as_fn_arith ()
+ {
+ as_val=$(( $* ))
+ }'
+else
+ as_fn_arith ()
+ {
+ as_val=`expr "$@" || test $? -eq 1`
+ }
+fi # as_fn_arith
+
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+ case `echo 'xy\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ xy) ECHO_C='\c';;
+ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
+ ECHO_T=' ';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -pR'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -pR'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -pR'
+ fi
+else
+ as_ln_s='cp -pR'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || eval $as_mkdir_p || {
+ as_dirs=
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
+ done
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p='mkdir -p "$as_dir"'
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+ test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+## ----------------------------------- ##
+## Main body of $CONFIG_STATUS script. ##
+## ----------------------------------- ##
+_ASEOF
+test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# Save the log message, to keep $0 and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.
+ac_log="
+This file was extended by gprofng $as_me 2.38.50, which was
+generated by GNU Autoconf 2.69. Invocation command line was
+
+ CONFIG_FILES = $CONFIG_FILES
+ CONFIG_HEADERS = $CONFIG_HEADERS
+ CONFIG_LINKS = $CONFIG_LINKS
+ CONFIG_COMMANDS = $CONFIG_COMMANDS
+ $ $0 $@
+
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
+_ACEOF
+
+case $ac_config_files in *"
+"*) set x $ac_config_files; shift; ac_config_files=$*;;
+esac
+
+case $ac_config_headers in *"
+"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
+esac
+
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+# Files that config.status was made for.
+config_files="$ac_config_files"
+config_headers="$ac_config_headers"
+config_commands="$ac_config_commands"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ac_cs_usage="\
+\`$as_me' instantiates files and other configuration actions
+from templates according to the current configuration. Unless the files
+and actions are specified as TAGs, all are instantiated by default.
+
+Usage: $0 [OPTION]... [TAG]...
+
+ -h, --help print this help, then exit
+ -V, --version print version number and configuration settings, then exit
+ --config print configuration, then exit
+ -q, --quiet, --silent
+ do not print progress messages
+ -d, --debug don't remove temporary files
+ --recheck update $as_me by reconfiguring in the same conditions
+ --file=FILE[:TEMPLATE]
+ instantiate the configuration file FILE
+ --header=FILE[:TEMPLATE]
+ instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Configuration commands:
+$config_commands
+
+Report bugs to the package provider."
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
+ac_cs_version="\\
+gprofng config.status 2.38.50
+configured by $0, generated by GNU Autoconf 2.69,
+ with options \\"\$ac_cs_config\\"
+
+Copyright (C) 2012 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+INSTALL='$INSTALL'
+MKDIR_P='$MKDIR_P'
+AWK='$AWK'
+test -n "\$AWK" || AWK=awk
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# The default lists apply if the user does not specify any file.
+ac_need_defaults=:
+while test $# != 0
+do
+ case $1 in
+ --*=?*)
+ ac_option=`expr "X$1" : 'X\([^=]*\)='`
+ ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+ ac_shift=:
+ ;;
+ --*=)
+ ac_option=`expr "X$1" : 'X\([^=]*\)='`
+ ac_optarg=
+ ac_shift=:
+ ;;
+ *)
+ ac_option=$1
+ ac_optarg=$2
+ ac_shift=shift
+ ;;
+ esac
+
+ case $ac_option in
+ # Handling of the options.
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+ ac_cs_recheck=: ;;
+ --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+ $as_echo "$ac_cs_version"; exit ;;
+ --config | --confi | --conf | --con | --co | --c )
+ $as_echo "$ac_cs_config"; exit ;;
+ --debug | --debu | --deb | --de | --d | -d )
+ debug=: ;;
+ --file | --fil | --fi | --f )
+ $ac_shift
+ case $ac_optarg in
+ *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ '') as_fn_error $? "missing file argument" ;;
+ esac
+ as_fn_append CONFIG_FILES " '$ac_optarg'"
+ ac_need_defaults=false;;
+ --header | --heade | --head | --hea )
+ $ac_shift
+ case $ac_optarg in
+ *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ as_fn_append CONFIG_HEADERS " '$ac_optarg'"
+ ac_need_defaults=false;;
+ --he | --h)
+ # Conflict between --help and --header
+ as_fn_error $? "ambiguous option: \`$1'
+Try \`$0 --help' for more information.";;
+ --help | --hel | -h )
+ $as_echo "$ac_cs_usage"; exit ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil | --si | --s)
+ ac_cs_silent=: ;;
+
+ # This is an error.
+ -*) as_fn_error $? "unrecognized option: \`$1'
+Try \`$0 --help' for more information." ;;
+
+ *) as_fn_append ac_config_targets " $1"
+ ac_need_defaults=false ;;
+
+ esac
+ shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+ exec 6>/dev/null
+ ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+if \$ac_cs_recheck; then
+ set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+ shift
+ \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+ CONFIG_SHELL='$SHELL'
+ export CONFIG_SHELL
+ exec "\$@"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+exec 5>>config.log
+{
+ echo
+ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+ $as_echo "$ac_log"
+} >&5
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+#
+# INIT-COMMANDS
+#
+AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`'
+macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`'
+enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`'
+enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`'
+pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`'
+enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`'
+SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`'
+ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`'
+host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`'
+host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`'
+host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`'
+build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`'
+build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`'
+build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`'
+SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`'
+Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`'
+GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`'
+EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`'
+FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`'
+LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`'
+NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`'
+LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`'
+max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`'
+ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`'
+exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`'
+lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`'
+lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`'
+lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`'
+reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`'
+reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`'
+OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`'
+deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`'
+file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`'
+AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`'
+AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`'
+STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`'
+RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`'
+old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
+old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`'
+lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`'
+CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`'
+CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`'
+compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`'
+GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`'
+objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`'
+MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`'
+need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`'
+DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`'
+NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`'
+LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`'
+OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`'
+OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`'
+libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`'
+shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`'
+extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
+archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`'
+export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`'
+whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`'
+compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`'
+old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
+archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`'
+archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`'
+module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`'
+module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`'
+with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`'
+allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`'
+no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_ld='`$ECHO "$hardcode_libdir_flag_spec_ld" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`'
+hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`'
+hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`'
+hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`'
+hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`'
+inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`'
+link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`'
+fix_srcfile_path='`$ECHO "$fix_srcfile_path" | $SED "$delay_single_quote_subst"`'
+always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`'
+export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`'
+exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`'
+include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`'
+prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`'
+file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`'
+variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`'
+need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`'
+need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`'
+version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`'
+runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`'
+shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`'
+shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`'
+libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`'
+library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`'
+soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`'
+install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`'
+postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
+finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`'
+finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`'
+hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`'
+sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`'
+sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`'
+hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`'
+enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`'
+enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`'
+enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`'
+old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`'
+striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_dirs='`$ECHO "$compiler_lib_search_dirs" | $SED "$delay_single_quote_subst"`'
+predep_objects='`$ECHO "$predep_objects" | $SED "$delay_single_quote_subst"`'
+postdep_objects='`$ECHO "$postdep_objects" | $SED "$delay_single_quote_subst"`'
+predeps='`$ECHO "$predeps" | $SED "$delay_single_quote_subst"`'
+postdeps='`$ECHO "$postdeps" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_path='`$ECHO "$compiler_lib_search_path" | $SED "$delay_single_quote_subst"`'
+LD_CXX='`$ECHO "$LD_CXX" | $SED "$delay_single_quote_subst"`'
+reload_flag_CXX='`$ECHO "$reload_flag_CXX" | $SED "$delay_single_quote_subst"`'
+reload_cmds_CXX='`$ECHO "$reload_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`'
+GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_pic_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_static_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $SED "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $SED "$delay_single_quote_subst"`'
+archive_cmds_need_lc_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $SED "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes_CXX='`$ECHO "$enable_shared_with_static_runtimes_CXX" | $SED "$delay_single_quote_subst"`'
+export_dynamic_flag_spec_CXX='`$ECHO "$export_dynamic_flag_spec_CXX" | $SED "$delay_single_quote_subst"`'
+whole_archive_flag_spec_CXX='`$ECHO "$whole_archive_flag_spec_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_needs_object_CXX='`$ECHO "$compiler_needs_object_CXX" | $SED "$delay_single_quote_subst"`'
+old_archive_from_new_cmds_CXX='`$ECHO "$old_archive_from_new_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds_CXX='`$ECHO "$old_archive_from_expsyms_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+archive_cmds_CXX='`$ECHO "$archive_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+archive_expsym_cmds_CXX='`$ECHO "$archive_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+module_cmds_CXX='`$ECHO "$module_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+module_expsym_cmds_CXX='`$ECHO "$module_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+with_gnu_ld_CXX='`$ECHO "$with_gnu_ld_CXX" | $SED "$delay_single_quote_subst"`'
+allow_undefined_flag_CXX='`$ECHO "$allow_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`'
+no_undefined_flag_CXX='`$ECHO "$no_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_CXX='`$ECHO "$hardcode_libdir_flag_spec_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_ld_CXX='`$ECHO "$hardcode_libdir_flag_spec_ld_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_separator_CXX='`$ECHO "$hardcode_libdir_separator_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_CXX='`$ECHO "$hardcode_direct_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_absolute_CXX='`$ECHO "$hardcode_direct_absolute_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_minus_L_CXX='`$ECHO "$hardcode_minus_L_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`'
+inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`'
+link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`'
+fix_srcfile_path_CXX='`$ECHO "$fix_srcfile_path_CXX" | $SED "$delay_single_quote_subst"`'
+always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`'
+export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`'
+include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`'
+prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`'
+predep_objects_CXX='`$ECHO "$predep_objects_CXX" | $SED "$delay_single_quote_subst"`'
+postdep_objects_CXX='`$ECHO "$postdep_objects_CXX" | $SED "$delay_single_quote_subst"`'
+predeps_CXX='`$ECHO "$predeps_CXX" | $SED "$delay_single_quote_subst"`'
+postdeps_CXX='`$ECHO "$postdeps_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_path_CXX='`$ECHO "$compiler_lib_search_path_CXX" | $SED "$delay_single_quote_subst"`'
+
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+ eval 'cat <<_LTECHO_EOF
+\$1
+_LTECHO_EOF'
+}
+
+# Quote evaled strings.
+for var in SHELL \
+ECHO \
+SED \
+GREP \
+EGREP \
+FGREP \
+LD \
+NM \
+LN_S \
+lt_SP2NL \
+lt_NL2SP \
+reload_flag \
+OBJDUMP \
+deplibs_check_method \
+file_magic_cmd \
+AR \
+AR_FLAGS \
+STRIP \
+RANLIB \
+CC \
+CFLAGS \
+compiler \
+lt_cv_sys_global_symbol_pipe \
+lt_cv_sys_global_symbol_to_cdecl \
+lt_cv_sys_global_symbol_to_c_name_address \
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
+lt_prog_compiler_no_builtin_flag \
+lt_prog_compiler_wl \
+lt_prog_compiler_pic \
+lt_prog_compiler_static \
+lt_cv_prog_compiler_c_o \
+need_locks \
+DSYMUTIL \
+NMEDIT \
+LIPO \
+OTOOL \
+OTOOL64 \
+shrext_cmds \
+export_dynamic_flag_spec \
+whole_archive_flag_spec \
+compiler_needs_object \
+with_gnu_ld \
+allow_undefined_flag \
+no_undefined_flag \
+hardcode_libdir_flag_spec \
+hardcode_libdir_flag_spec_ld \
+hardcode_libdir_separator \
+fix_srcfile_path \
+exclude_expsyms \
+include_expsyms \
+file_list_spec \
+variables_saved_for_relink \
+libname_spec \
+library_names_spec \
+soname_spec \
+install_override_mode \
+finish_eval \
+old_striplib \
+striplib \
+compiler_lib_search_dirs \
+predep_objects \
+postdep_objects \
+predeps \
+postdeps \
+compiler_lib_search_path \
+LD_CXX \
+reload_flag_CXX \
+compiler_CXX \
+lt_prog_compiler_no_builtin_flag_CXX \
+lt_prog_compiler_wl_CXX \
+lt_prog_compiler_pic_CXX \
+lt_prog_compiler_static_CXX \
+lt_cv_prog_compiler_c_o_CXX \
+export_dynamic_flag_spec_CXX \
+whole_archive_flag_spec_CXX \
+compiler_needs_object_CXX \
+with_gnu_ld_CXX \
+allow_undefined_flag_CXX \
+no_undefined_flag_CXX \
+hardcode_libdir_flag_spec_CXX \
+hardcode_libdir_flag_spec_ld_CXX \
+hardcode_libdir_separator_CXX \
+fix_srcfile_path_CXX \
+exclude_expsyms_CXX \
+include_expsyms_CXX \
+file_list_spec_CXX \
+compiler_lib_search_dirs_CXX \
+predep_objects_CXX \
+postdep_objects_CXX \
+predeps_CXX \
+postdeps_CXX \
+compiler_lib_search_path_CXX; do
+ case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+ *[\\\\\\\`\\"\\\$]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+ ;;
+ *)
+ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+ ;;
+ esac
+done
+
+# Double-quote double-evaled strings.
+for var in reload_cmds \
+old_postinstall_cmds \
+old_postuninstall_cmds \
+old_archive_cmds \
+extract_expsyms_cmds \
+old_archive_from_new_cmds \
+old_archive_from_expsyms_cmds \
+archive_cmds \
+archive_expsym_cmds \
+module_cmds \
+module_expsym_cmds \
+export_symbols_cmds \
+prelink_cmds \
+postinstall_cmds \
+postuninstall_cmds \
+finish_cmds \
+sys_lib_search_path_spec \
+sys_lib_dlsearch_path_spec \
+reload_cmds_CXX \
+old_archive_cmds_CXX \
+old_archive_from_new_cmds_CXX \
+old_archive_from_expsyms_cmds_CXX \
+archive_cmds_CXX \
+archive_expsym_cmds_CXX \
+module_cmds_CXX \
+module_expsym_cmds_CXX \
+export_symbols_cmds_CXX \
+prelink_cmds_CXX; do
+ case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+ *[\\\\\\\`\\"\\\$]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+ ;;
+ *)
+ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+ ;;
+ esac
+done
+
+ac_aux_dir='$ac_aux_dir'
+xsi_shell='$xsi_shell'
+lt_shell_append='$lt_shell_append'
+
+# See if we are running on zsh, and set the options which allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+fi
+
+
+ PACKAGE='$PACKAGE'
+ VERSION='$VERSION'
+ TIMESTAMP='$TIMESTAMP'
+ RM='$RM'
+ ofile='$ofile'
+
+
+
+
+
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+
+# Handling of arguments.
+for ac_config_target in $ac_config_targets
+do
+ case $ac_config_target in
+ "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+ "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
+ "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+ "lib-config.h") CONFIG_HEADERS="$CONFIG_HEADERS lib-config.h:../common/config.h.in" ;;
+
+ *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
+ esac
+done
+
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used. Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+ test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+ test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+ test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
+
+# Have a temporary directory for convenience. Make it in the build tree
+# simply because there is no reason against having it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
+$debug ||
+{
+ tmp= ac_tmp=
+ trap 'exit_status=$?
+ : "${ac_tmp:=$tmp}"
+ { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
+' 0
+ trap 'as_fn_exit 1' 1 2 13 15
+}
+# Create a (secure) tmp directory for tmp files.
+
+{
+ tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+ test -d "$tmp"
+} ||
+{
+ tmp=./conf$$-$RANDOM
+ (umask 077 && mkdir "$tmp")
+} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
+ac_tmp=$tmp
+
+# Set up the scripts for CONFIG_FILES section.
+# No need to generate them if there are no CONFIG_FILES.
+# This happens for instance with `./config.status config.h'.
+if test -n "$CONFIG_FILES"; then
+
+
+ac_cr=`echo X | tr X '\015'`
+# On cygwin, bash can eat \r inside `` if the user requested igncr.
+# But we know of no other shell where ac_cr would be empty at this
+# point, so we can use a bashism as a fallback.
+if test "x$ac_cr" = x; then
+ eval ac_cr=\$\'\\r\'
+fi
+ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
+if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
+ ac_cs_awk_cr='\\r'
+else
+ ac_cs_awk_cr=$ac_cr
+fi
+
+echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
+_ACEOF
+
+
+{
+ echo "cat >conf$$subs.awk <<_ACEOF" &&
+ echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
+ echo "_ACEOF"
+} >conf$$subs.sh ||
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+ . ./conf$$subs.sh ||
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+
+ ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
+ if test $ac_delim_n = $ac_delim_num; then
+ break
+ elif $ac_last_try; then
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ else
+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+ fi
+done
+rm -f conf$$subs.sh
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
+_ACEOF
+sed -n '
+h
+s/^/S["/; s/!.*/"]=/
+p
+g
+s/^[^!]*!//
+:repl
+t repl
+s/'"$ac_delim"'$//
+t delim
+:nl
+h
+s/\(.\{148\}\)..*/\1/
+t more1
+s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
+p
+n
+b repl
+:more1
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t nl
+:delim
+h
+s/\(.\{148\}\)..*/\1/
+t more2
+s/["\\]/\\&/g; s/^/"/; s/$/"/
+p
+b
+:more2
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t delim
+' <conf$$subs.awk | sed '
+/^[^""]/{
+ N
+ s/\n//
+}
+' >>$CONFIG_STATUS || ac_write_fail=1
+rm -f conf$$subs.awk
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+_ACAWK
+cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
+ for (key in S) S_is_set[key] = 1
+ FS = ""
+
+}
+{
+ line = $ 0
+ nfields = split(line, field, "@")
+ substed = 0
+ len = length(field[1])
+ for (i = 2; i < nfields; i++) {
+ key = field[i]
+ keylen = length(key)
+ if (S_is_set[key]) {
+ value = S[key]
+ line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
+ len += length(value) + length(field[++i])
+ substed = 1
+ } else
+ len += 1 + keylen
+ }
+
+ print line
+}
+
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
+ sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
+else
+ cat
+fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
+ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
+_ACEOF
+
+# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
+# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+ ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{
+h
+s///
+s/^/:/
+s/[ ]*$/:/
+s/:\$(srcdir):/:/g
+s/:\${srcdir}:/:/g
+s/:@srcdir@:/:/g
+s/^:*//
+s/:*$//
+x
+s/\(=[ ]*\).*/\1/
+G
+s/\n//
+s/^[^=]*=[ ]*$//
+}'
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+fi # test -n "$CONFIG_FILES"
+
+# Set up the scripts for CONFIG_HEADERS section.
+# No need to generate them if there are no CONFIG_HEADERS.
+# This happens for instance with `./config.status Makefile'.
+if test -n "$CONFIG_HEADERS"; then
+cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
+BEGIN {
+_ACEOF
+
+# Transform confdefs.h into an awk script `defines.awk', embedded as
+# here-document in config.status, that substitutes the proper values into
+# config.h.in to produce config.h.
+
+# Create a delimiter string that does not exist in confdefs.h, to ease
+# handling of long lines.
+ac_delim='%!_!# '
+for ac_last_try in false false :; do
+ ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
+ if test -z "$ac_tt"; then
+ break
+ elif $ac_last_try; then
+ as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
+ else
+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+ fi
+done
+
+# For the awk script, D is an array of macro values keyed by name,
+# likewise P contains macro parameters if any. Preserve backslash
+# newline sequences.
+
+ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
+sed -n '
+s/.\{148\}/&'"$ac_delim"'/g
+t rset
+:rset
+s/^[ ]*#[ ]*define[ ][ ]*/ /
+t def
+d
+:def
+s/\\$//
+t bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3"/p
+s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p
+d
+:bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3\\\\\\n"\\/p
+t cont
+s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
+t cont
+d
+:cont
+n
+s/.\{148\}/&'"$ac_delim"'/g
+t clear
+:clear
+s/\\$//
+t bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/"/p
+d
+:bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
+b cont
+' <confdefs.h | sed '
+s/'"$ac_delim"'/"\\\
+"/g' >>$CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ for (key in D) D_is_set[key] = 1
+ FS = ""
+}
+/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
+ line = \$ 0
+ split(line, arg, " ")
+ if (arg[1] == "#") {
+ defundef = arg[2]
+ mac1 = arg[3]
+ } else {
+ defundef = substr(arg[1], 2)
+ mac1 = arg[2]
+ }
+ split(mac1, mac2, "(") #)
+ macro = mac2[1]
+ prefix = substr(line, 1, index(line, defundef) - 1)
+ if (D_is_set[macro]) {
+ # Preserve the white space surrounding the "#".
+ print prefix "define", macro P[macro] D[macro]
+ next
+ } else {
+ # Replace #undef with comments. This is necessary, for example,
+ # in the case of _POSIX_SOURCE, which is predefined and required
+ # on some systems where configure will not decide to define it.
+ if (defundef == "undef") {
+ print "/*", prefix defundef, macro, "*/"
+ next
+ }
+ }
+}
+{ print }
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
+fi # test -n "$CONFIG_HEADERS"
+
+
+eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS"
+shift
+for ac_tag
+do
+ case $ac_tag in
+ :[FHLC]) ac_mode=$ac_tag; continue;;
+ esac
+ case $ac_mode$ac_tag in
+ :[FHL]*:*);;
+ :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
+ :[FH]-) ac_tag=-:-;;
+ :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+ esac
+ ac_save_IFS=$IFS
+ IFS=:
+ set x $ac_tag
+ IFS=$ac_save_IFS
+ shift
+ ac_file=$1
+ shift
+
+ case $ac_mode in
+ :L) ac_source=$1;;
+ :[FH])
+ ac_file_inputs=
+ for ac_f
+ do
+ case $ac_f in
+ -) ac_f="$ac_tmp/stdin";;
+ *) # Look for the file first in the build tree, then in the source tree
+ # (if the path is not absolute). The absolute path cannot be DOS-style,
+ # because $ac_f cannot contain `:'.
+ test -f "$ac_f" ||
+ case $ac_f in
+ [\\/$]*) false;;
+ *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+ esac ||
+ as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
+ esac
+ case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+ as_fn_append ac_file_inputs " '$ac_f'"
+ done
+
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
+ # use $as_me), people would be surprised to read:
+ # /* config.h. Generated by config.status. */
+ configure_input='Generated from '`
+ $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+ `' by configure.'
+ if test x"$ac_file" != x-; then
+ configure_input="$ac_file. $configure_input"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+$as_echo "$as_me: creating $ac_file" >&6;}
+ fi
+ # Neutralize special characters interpreted by sed in replacement strings.
+ case $configure_input in #(
+ *\&* | *\|* | *\\* )
+ ac_sed_conf_input=`$as_echo "$configure_input" |
+ sed 's/[\\\\&|]/\\\\&/g'`;; #(
+ *) ac_sed_conf_input=$configure_input;;
+ esac
+
+ case $ac_tag in
+ *:-:* | *:-) cat >"$ac_tmp/stdin" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
+ esac
+ ;;
+ esac
+
+ ac_dir=`$as_dirname -- "$ac_file" ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_file" : 'X\(//\)[^/]' \| \
+ X"$ac_file" : 'X\(//\)$' \| \
+ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ as_dir="$ac_dir"; as_fn_mkdir_p
+ ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+
+ case $ac_mode in
+ :F)
+ #
+ # CONFIG_FILE
+ #
+
+ case $INSTALL in
+ [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+ *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
+ esac
+ ac_MKDIR_P=$MKDIR_P
+ case $MKDIR_P in
+ [\\/$]* | ?:[\\/]* ) ;;
+ */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
+ esac
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=; ac_datarootdir_seen=
+ac_sed_dataroot='
+/datarootdir/ {
+ p
+ q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p'
+case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ ac_datarootdir_hack='
+ s&@datadir@&$datadir&g
+ s&@docdir@&$docdir&g
+ s&@infodir@&$infodir&g
+ s&@localedir@&$localedir&g
+ s&@mandir@&$mandir&g
+ s&\\\${datarootdir}&$datarootdir&g' ;;
+esac
+_ACEOF
+
+# Neutralize VPATH when `$srcdir' = `.'.
+# Shell code in configure.ac might set extrasub.
+# FIXME: do we really want to maintain this feature?
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_sed_extra="$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s|@configure_input@|$ac_sed_conf_input|;t t
+s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@top_build_prefix@&$ac_top_build_prefix&;t t
+s&@srcdir@&$ac_srcdir&;t t
+s&@abs_srcdir@&$ac_abs_srcdir&;t t
+s&@top_srcdir@&$ac_top_srcdir&;t t
+s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
+s&@builddir@&$ac_builddir&;t t
+s&@abs_builddir@&$ac_abs_builddir&;t t
+s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+s&@INSTALL@&$ac_INSTALL&;t t
+s&@MKDIR_P@&$ac_MKDIR_P&;t t
+$ac_datarootdir_hack
+"
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
+ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+
+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+ { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
+ { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \
+ "$ac_tmp/out"`; test -z "$ac_out"; } &&
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined" >&5
+$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined" >&2;}
+
+ rm -f "$ac_tmp/stdin"
+ case $ac_file in
+ -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
+ *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
+ esac \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ ;;
+ :H)
+ #
+ # CONFIG_HEADER
+ #
+ if test x"$ac_file" != x-; then
+ {
+ $as_echo "/* $configure_input */" \
+ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
+ } >"$ac_tmp/config.h" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
+$as_echo "$as_me: $ac_file is unchanged" >&6;}
+ else
+ rm -f "$ac_file"
+ mv "$ac_tmp/config.h" "$ac_file" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ fi
+ else
+ $as_echo "/* $configure_input */" \
+ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
+ || as_fn_error $? "could not create -" "$LINENO" 5
+ fi
+# Compute "$ac_file"'s index in $config_headers.
+_am_arg="$ac_file"
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+ case $_am_header in
+ $_am_arg | $_am_arg:* )
+ break ;;
+ * )
+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+ esac
+done
+echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" ||
+$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$_am_arg" : 'X\(//\)[^/]' \| \
+ X"$_am_arg" : 'X\(//\)$' \| \
+ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$_am_arg" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`/stamp-h$_am_stamp_count
+ ;;
+
+ :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
+$as_echo "$as_me: executing $ac_file commands" >&6;}
+ ;;
+ esac
+
+
+ case $ac_file$ac_mode in
+ "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
+ # Older Autoconf quotes --file arguments for eval, but not when files
+ # are listed without --file. Let's play safe and only enable the eval
+ # if we detect the quoting.
+ case $CONFIG_FILES in
+ *\'*) eval set x "$CONFIG_FILES" ;;
+ *) set x $CONFIG_FILES ;;
+ esac
+ shift
+ for mf
+ do
+ # Strip MF so we end up with the name of the file.
+ mf=`echo "$mf" | sed -e 's/:.*$//'`
+ # Check whether this is an Automake generated Makefile or not.
+ # We used to match only the files named 'Makefile.in', but
+ # some people rename them; so instead we look at the file content.
+ # Grep'ing the first line is not enough: some people post-process
+ # each Makefile.in and add a new line on top of each file to say so.
+ # Grep'ing the whole file is not good either: AIX grep has a line
+ # limit of 2048, but all sed's we know have understand at least 4000.
+ if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+ dirpart=`$as_dirname -- "$mf" ||
+$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$mf" : 'X\(//\)[^/]' \| \
+ X"$mf" : 'X\(//\)$' \| \
+ X"$mf" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$mf" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ else
+ continue
+ fi
+ # Extract the definition of DEPDIR, am__include, and am__quote
+ # from the Makefile without running 'make'.
+ DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+ test -z "$DEPDIR" && continue
+ am__include=`sed -n 's/^am__include = //p' < "$mf"`
+ test -z "$am__include" && continue
+ am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+ # Find all dependency output files, they are included files with
+ # $(DEPDIR) in their names. We invoke sed twice because it is the
+ # simplest approach to changing $(DEPDIR) to its actual value in the
+ # expansion.
+ for file in `sed -n "
+ s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do
+ # Make sure the directory exists.
+ test -f "$dirpart/$file" && continue
+ fdir=`$as_dirname -- "$file" ||
+$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$file" : 'X\(//\)[^/]' \| \
+ X"$file" : 'X\(//\)$' \| \
+ X"$file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ as_dir=$dirpart/$fdir; as_fn_mkdir_p
+ # echo "creating $dirpart/$file"
+ echo '# dummy' > "$dirpart/$file"
+ done
+ done
+}
+ ;;
+ "libtool":C)
+
+ # See if we are running on zsh, and set the options which allow our
+ # commands through without removal of \ escapes.
+ if test -n "${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+ fi
+
+ cfgfile="${ofile}T"
+ trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+ $RM "$cfgfile"
+
+ cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+
+# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+# 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+# Written by Gordon Matzigkeit, 1996
+#
+# This file is part of GNU Libtool.
+#
+# GNU Libtool is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Libtool; see the file COPYING. If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
+# obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+
+# The names of the tagged configurations supported by this script.
+available_tags="CXX "
+
+# ### BEGIN LIBTOOL CONFIG
+
+# Which release of libtool.m4 was used?
+macro_version=$macro_version
+macro_revision=$macro_revision
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# What type of objects to build.
+pic_mode=$pic_mode
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# An echo program that protects backslashes.
+ECHO=$lt_ECHO
+
+# The host system.
+host_alias=$host_alias
+host=$host
+host_os=$host_os
+
+# The build system.
+build_alias=$build_alias
+build=$build
+build_os=$build_os
+
+# A sed program that does not truncate output.
+SED=$lt_SED
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="\$SED -e 1s/^X//"
+
+# A grep program that handles long lines.
+GREP=$lt_GREP
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# A literal string matcher.
+FGREP=$lt_FGREP
+
+# A BSD- or MS-compatible name lister.
+NM=$lt_NM
+
+# Whether we need soft or hard links.
+LN_S=$lt_LN_S
+
+# What is the maximum length of a command?
+max_cmd_len=$max_cmd_len
+
+# Object file suffix (normally "o").
+objext=$ac_objext
+
+# Executable file suffix (normally "").
+exeext=$exeext
+
+# whether the shell understands "unset".
+lt_unset=$lt_unset
+
+# turn spaces into newlines.
+SP2NL=$lt_lt_SP2NL
+
+# turn newlines into spaces.
+NL2SP=$lt_lt_NL2SP
+
+# An object symbol dumper.
+OBJDUMP=$lt_OBJDUMP
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == "file_magic".
+file_magic_cmd=$lt_file_magic_cmd
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A symbol stripping program.
+STRIP=$lt_STRIP
+
+# Commands used to install an old-style archive.
+RANLIB=$lt_RANLIB
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Whether to use a lock for old archive extraction.
+lock_old_archive_extraction=$lock_old_archive_extraction
+
+# A C compiler.
+LTCC=$lt_CC
+
+# LTCC compiler flags.
+LTCFLAGS=$lt_CFLAGS
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration.
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair.
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# Transform the output of nm in a C name address pair when lib prefix is needed.
+global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# Used to examine libraries when file_magic_cmd begins with "file".
+MAGIC_CMD=$MAGIC_CMD
+
+# Must we lock files when doing compilation?
+need_locks=$lt_need_locks
+
+# Tool to manipulate archived DWARF debug symbol files on Mac OS X.
+DSYMUTIL=$lt_DSYMUTIL
+
+# Tool to change global to local symbols on Mac OS X.
+NMEDIT=$lt_NMEDIT
+
+# Tool to manipulate fat objects and archives on Mac OS X.
+LIPO=$lt_LIPO
+
+# ldd/readelf like tool for Mach-O binaries on Mac OS X.
+OTOOL=$lt_OTOOL
+
+# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4.
+OTOOL64=$lt_OTOOL64
+
+# Old archive suffix (normally "a").
+libext=$libext
+
+# Shared library suffix (normally ".so").
+shrext_cmds=$lt_shrext_cmds
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at link time.
+variables_saved_for_relink=$lt_variables_saved_for_relink
+
+# Do we need the "lib" prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Library versioning type.
+version_type=$version_type
+
+# Shared library runtime path variable.
+runpath_var=$runpath_var
+
+# Shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names. First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Permission mode override for installation of shared libraries.
+install_override_mode=$lt_install_override_mode
+
+# Command to use after installation of a shared archive.
+postinstall_cmds=$lt_postinstall_cmds
+
+# Command to use after uninstallation of a shared archive.
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# As "finish_cmds", except a single script fragment to be evaled but
+# not shown.
+finish_eval=$lt_finish_eval
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Compile-time system search path for libraries.
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries.
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+
+# The linker used to build libraries.
+LD=$lt_LD
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds
+
+# A language specific compiler.
+CC=$lt_compiler
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds
+archive_expsym_cmds=$lt_archive_expsym_cmds
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds
+module_expsym_cmds=$lt_module_expsym_cmds
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
+
+# If ld is used when linking, flag to hardcode \$libdir into a binary
+# during linking. This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path=$lt_fix_srcfile_path
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action
+
+# The directories searched by this compiler when creating a shared library.
+compiler_lib_search_dirs=$lt_compiler_lib_search_dirs
+
+# Dependencies to place before and after the objects being linked to
+# create a shared library.
+predep_objects=$lt_predep_objects
+postdep_objects=$lt_postdep_objects
+predeps=$lt_predeps
+postdeps=$lt_postdeps
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path
+
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+ case $host_os in
+ aix3*)
+ cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program. For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+fi
+_LT_EOF
+ ;;
+ esac
+
+
+ltmain="$ac_aux_dir/ltmain.sh"
+
+
+ # We use sed instead of cat because bash on DJGPP gets confused if
+ # if finds mixed CR/LF and LF-only lines. Since sed operates in
+ # text mode, it properly converts lines to CR/LF. This bash problem
+ # is reportedly fixed, but why not run on old versions too?
+ sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
+ || (rm -f "$cfgfile"; exit 1)
+
+ case $xsi_shell in
+ yes)
+ cat << \_LT_EOF >> "$cfgfile"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+ case ${1} in
+ */*) func_dirname_result="${1%/*}${2}" ;;
+ * ) func_dirname_result="${3}" ;;
+ esac
+}
+
+# func_basename file
+func_basename ()
+{
+ func_basename_result="${1##*/}"
+}
+
+# func_dirname_and_basename file append nondir_replacement
+# perform func_basename and func_dirname in a single function
+# call:
+# dirname: Compute the dirname of FILE. If nonempty,
+# add APPEND to the result, otherwise set result
+# to NONDIR_REPLACEMENT.
+# value returned in "$func_dirname_result"
+# basename: Compute filename of FILE.
+# value retuned in "$func_basename_result"
+# Implementation must be kept synchronized with func_dirname
+# and func_basename. For efficiency, we do not delegate to
+# those functions but instead duplicate the functionality here.
+func_dirname_and_basename ()
+{
+ case ${1} in
+ */*) func_dirname_result="${1%/*}${2}" ;;
+ * ) func_dirname_result="${3}" ;;
+ esac
+ func_basename_result="${1##*/}"
+}
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+func_stripname ()
+{
+ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+ # positional parameters, so assign one to ordinary parameter first.
+ func_stripname_result=${3}
+ func_stripname_result=${func_stripname_result#"${1}"}
+ func_stripname_result=${func_stripname_result%"${2}"}
+}
+
+# func_opt_split
+func_opt_split ()
+{
+ func_opt_split_opt=${1%%=*}
+ func_opt_split_arg=${1#*=}
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+ case ${1} in
+ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+ *) func_lo2o_result=${1} ;;
+ esac
+}
+
+# func_xform libobj-or-source
+func_xform ()
+{
+ func_xform_result=${1%.*}.lo
+}
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+ func_arith_result=$(( $* ))
+}
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+ func_len_result=${#1}
+}
+
+_LT_EOF
+ ;;
+ *) # Bourne compatible functions.
+ cat << \_LT_EOF >> "$cfgfile"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+ # Extract subdirectory from the argument.
+ func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
+ if test "X$func_dirname_result" = "X${1}"; then
+ func_dirname_result="${3}"
+ else
+ func_dirname_result="$func_dirname_result${2}"
+ fi
+}
+
+# func_basename file
+func_basename ()
+{
+ func_basename_result=`$ECHO "${1}" | $SED "$basename"`
+}
+
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+# func_strip_suffix prefix name
+func_stripname ()
+{
+ case ${2} in
+ .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
+ *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
+ esac
+}
+
+# sed scripts:
+my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q'
+my_sed_long_arg='1s/^-[^=]*=//'
+
+# func_opt_split
+func_opt_split ()
+{
+ func_opt_split_opt=`$ECHO "${1}" | $SED "$my_sed_long_opt"`
+ func_opt_split_arg=`$ECHO "${1}" | $SED "$my_sed_long_arg"`
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+ func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
+}
+
+# func_xform libobj-or-source
+func_xform ()
+{
+ func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
+}
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+ func_arith_result=`expr "$@"`
+}
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+ func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
+}
+
+_LT_EOF
+esac
+
+case $lt_shell_append in
+ yes)
+ cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+ eval "$1+=\$2"
+}
+_LT_EOF
+ ;;
+ *)
+ cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+ eval "$1=\$$1\$2"
+}
+
+_LT_EOF
+ ;;
+ esac
+
+
+ sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
+ || (rm -f "$cfgfile"; exit 1)
+
+ mv -f "$cfgfile" "$ofile" ||
+ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+ chmod +x "$ofile"
+
+
+ cat <<_LT_EOF >> "$ofile"
+
+# ### BEGIN LIBTOOL TAG CONFIG: CXX
+
+# The linker used to build libraries.
+LD=$lt_LD_CXX
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag_CXX
+reload_cmds=$lt_reload_cmds_CXX
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds_CXX
+
+# A language specific compiler.
+CC=$lt_compiler_CXX
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC_CXX
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl_CXX
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic_CXX
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static_CXX
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc_CXX
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object_CXX
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds_CXX
+archive_expsym_cmds=$lt_archive_expsym_cmds_CXX
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds_CXX
+module_expsym_cmds=$lt_module_expsym_cmds_CXX
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld_CXX
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag_CXX
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag_CXX
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX
+
+# If ld is used when linking, flag to hardcode \$libdir into a binary
+# during linking. This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct_CXX
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute_CXX
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L_CXX
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic_CXX
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath_CXX
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs_CXX
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path=$lt_fix_srcfile_path_CXX
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols_CXX
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds_CXX
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms_CXX
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms_CXX
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds_CXX
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec_CXX
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action_CXX
+
+# The directories searched by this compiler when creating a shared library.
+compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX
+
+# Dependencies to place before and after the objects being linked to
+# create a shared library.
+predep_objects=$lt_predep_objects_CXX
+postdep_objects=$lt_postdep_objects_CXX
+predeps=$lt_predeps_CXX
+postdeps=$lt_postdeps_CXX
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path_CXX
+
+# ### END LIBTOOL TAG CONFIG: CXX
+_LT_EOF
+
+ ;;
+
+ esac
+done # for ac_tag
+
+
+as_fn_exit 0
+_ACEOF
+ac_clean_files=$ac_clean_files_save
+
+test $ac_write_fail = 0 ||
+ as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded. So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status. When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+ ac_cs_success=:
+ ac_config_status_args=
+ test "$silent" = yes &&
+ ac_config_status_args="$ac_config_status_args --quiet"
+ exec 5>/dev/null
+ $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+ exec 5>>config.log
+ # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+ # would make configure fail if this is the last instruction.
+ $ac_cs_success || as_fn_exit 1
+fi
+if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+fi
+
+
diff --git a/gprofng/libcollector/configure.ac b/gprofng/libcollector/configure.ac
new file mode 100644
index 00000000000..f49d120e0fd
--- /dev/null
+++ b/gprofng/libcollector/configure.ac
@@ -0,0 +1,64 @@
+dnl Process this file with autoconf to produce a configure script.
+dnl
+dnl Copyright (C) 2021 Free Software Foundation, Inc.
+dnl
+dnl This file is free software; you can redistribute it and/or modify
+dnl it under the terms of the GNU General Public License as published by
+dnl the Free Software Foundation; either version 3 of the License, or
+dnl (at your option) any later version.
+dnl
+dnl This program is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+dnl GNU General Public License for more details.
+dnl
+dnl You should have received a copy of the GNU General Public License
+dnl along with this program; see the file COPYING3. If not see
+dnl <http://www.gnu.org/licenses/>.
+
+m4_include([../../bfd/version.m4])
+AC_INIT([gprofng], BFD_VERSION)
+AC_CONFIG_MACRO_DIRS([../../config ../..])
+AC_CONFIG_AUX_DIR(../..)
+AC_CANONICAL_TARGET
+AM_INIT_AUTOMAKE
+AM_MAINTAINER_MODE
+
+AC_CONFIG_SRCDIR(libcol_util.c)
+
+AC_USE_SYSTEM_EXTENSIONS
+AC_PROG_CC
+AC_PROG_CXX
+AC_PROG_INSTALL
+AC_PROG_RANLIB
+AM_PROG_AR
+
+LT_INIT
+AC_ENABLE_SHARED
+AC_DISABLE_STATIC
+
+if test "$enable_shared" != "yes"; then
+ AC_MSG_ERROR([Cannot set --enable-shared for gprofng/libcollector.])
+fi
+
+GPROFNG_VARIANT=unknown
+case "${target}" in
+ x86_64-*-linux*)
+ GPROFNG_VARIANT=amd64-Linux
+ ;;
+ i?86-*-linux*)
+ GPROFNG_VARIANT=intel-Linux
+ ;;
+ aarch64-*-linux*)
+ GPROFNG_VARIANT=aarch64-Linux
+ ;;
+esac
+AC_SUBST(GPROFNG_VARIANT)
+
+ACX_PROG_CC_WARNING_OPTS([-Wno-nonnull-compare], [GPROFNG_NO_NONNULL_COMPARE_CFLAGS])
+AC_SUBST(GPROFNG_NO_NONNULL_COMPARE_CFLAGS)
+
+AC_CONFIG_FILES([Makefile])
+AC_CONFIG_HEADERS([lib-config.h:../common/config.h.in])
+AC_OUTPUT
+
diff --git a/gprofng/libcollector/descendants.h b/gprofng/libcollector/descendants.h
new file mode 100644
index 00000000000..8fa18c8020e
--- /dev/null
+++ b/gprofng/libcollector/descendants.h
@@ -0,0 +1,81 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+/* Lineage events for process fork, exec, etc. */
+
+#ifndef DESCENDANTS_H
+#define DESCENDANTS_H
+
+#include <dlfcn.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <alloca.h>
+#include <assert.h>
+
+#include "gp-defs.h"
+#include "gp-experiment.h"
+#include "collector.h"
+#include "memmgr.h"
+#include "cc_libcollector.h"
+#include "tsd.h"
+
+/* configuration, not changed after init. */
+typedef enum
+{
+ LM_DORMANT = -2, /* env vars preserved, not recording */
+ LM_CLOSED = -1, /* env vars cleared, not recording */
+ LM_TRACK_LINEAGE = 1, /* env vars preserved, recording */
+} line_mode_t;
+
+extern line_mode_t line_mode;
+extern int user_follow_mode;
+extern int java_mode;
+extern int dbg_current_mode; /* for debug only */
+extern unsigned line_key;
+extern char **sp_env_backup;
+
+#define INIT_REENTRANCE(x) ((x) = __collector_tsd_get_by_key (line_key))
+#define CHCK_REENTRANCE(x) (((INIT_REENTRANCE(x)) == NULL) || (*(x) != 0))
+#define PUSH_REENTRANCE(x) ((*(x))++)
+#define POP_REENTRANCE(x) ((*(x))--)
+
+/* environment variables that must be forwarded to descendents */
+#define SP_COLLECTOR_PARAMS "SP_COLLECTOR_PARAMS"
+#define SP_COLLECTOR_EXPNAME "SP_COLLECTOR_EXPNAME"
+#define SP_COLLECTOR_FOLLOW_SPEC "SP_COLLECTOR_FOLLOW_SPEC"
+#define SP_COLLECTOR_FOUNDER "SP_COLLECTOR_FOUNDER"
+#define SP_PRELOAD_STRINGS "SP_COLLECTOR_PRELOAD"
+#define LD_PRELOAD_STRINGS "LD_PRELOAD"
+#define SP_LIBPATH_STRINGS "SP_COLLECTOR_LIBRARY_PATH"
+#define LD_LIBPATH_STRINGS "LD_LIBRARY_PATH"
+#define JAVA_TOOL_OPTIONS "JAVA_TOOL_OPTIONS"
+#define COLLECTOR_JVMTI_OPTION "-agentlib:gp-collector"
+
+extern int __collector_linetrace_shutdown_hwcs_6830763_XXXX;
+extern void __collector_env_unset (char *envp[]);
+extern void __collector_env_save_preloads ();
+extern char ** __collector_env_backup ();
+extern void __collector_env_backup_free ();
+extern void __collector_env_update (char *envp[]);
+extern void __collector_env_print (char *label);
+extern void __collector_env_printall (char *label, char *envp[]);
+extern char ** __collector_env_allocate (char *const old_env[], int allocate_env);
+
+#endif
diff --git a/gprofng/libcollector/dispatcher.c b/gprofng/libcollector/dispatcher.c
new file mode 100644
index 00000000000..f0308605d76
--- /dev/null
+++ b/gprofng/libcollector/dispatcher.c
@@ -0,0 +1,1261 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+/*
+ * Central SIGPROF dispatcher to various module event handlers
+ * (REALPROF profile, HWC check, overview sample, manual sample)
+ */
+
+#include "config.h"
+#include <dlfcn.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ucontext.h>
+#include <sys/param.h>
+#include <sys/signal.h>
+#include <sys/syscall.h>
+#include <time.h>
+#include <signal.h>
+
+#include "gp-defs.h"
+#include "gp-experiment.h"
+#include "collector.h"
+#include "collector_module.h"
+#include "tsd.h"
+#include "hwcdrv.h"
+
+
+/* TprintfT(<level>,...) definitions. Adjust per module as needed */
+#define DBG_LT0 0 // for high-level configuration, unexpected errors/warnings
+#define DBG_LTT 0 // for interposition on GLIBC functions
+#define DBG_LT1 1 // for configuration details, warnings
+#define DBG_LT2 2
+#define DBG_LT3 3
+
+static void collector_sigprof_dispatcher (int, siginfo_t*, void*);
+static int init_interposition_intf ();
+#include "memmgr.h"
+static int collector_timer_create (timer_t * ptimerid);
+static int collector_timer_settime (int period, timer_t timerid);
+static int collector_timer_gettime (timer_t timerid);
+static volatile int collector_sigprof_entries = 0; /* counter for SIGPROF signals in DISPATCH_TST mode */
+static timer_t collector_master_thread_timerid = NULL;
+static collector_mutex_t collector_clone_libc_lock = COLLECTOR_MUTEX_INITIALIZER;
+static unsigned dispatcher_key = COLLECTOR_TSD_INVALID_KEY;
+
+static void *__real_clone = NULL;
+static void *__real_timer_create = NULL;
+static void *__real_timer_settime = NULL;
+static void *__real_timer_delete = NULL;
+static void *__real_timer_gettime = NULL;
+#if ARCH(Intel) && WSIZE(32)
+static void *__real_pthread_create_2_1 = NULL;
+static void *__real_pthread_create_2_0 = NULL;
+#elif ARCH(Intel) && WSIZE(64)
+static void *__real_timer_create_2_3_3 = NULL;
+static void *__real_timer_create_2_2_5 = NULL;
+#elif ARCH(SPARC) && WSIZE(64)
+static void *__real_timer_create_2_3_3 = NULL;
+static void *__real_timer_create_2_2 = NULL;
+#endif
+
+/* Original SIGPROF handler which will be replaced with the dispatcher. Used
+ * to properly interact with libaio, which uses SIGPROF as its SIGAIOCANCEL. */
+static struct sigaction original_sigprof_handler;
+
+enum
+{
+ DISPATCH_NYI = -1, /* dispatcher not yet installed */
+ DISPATCH_OFF = 0, /* dispatcher installed, but disabled */
+ DISPATCH_ON = 1, /* dispatcher installed, and enabled */
+ DISPATCH_TST = 2 /* dispatcher installed, and enabled in testing mode */
+};
+
+static int dispatch_mode = DISPATCH_NYI; /* controls SIGPROF dispatching */
+static int itimer_period_requested = 0; /* dispatcher itimer period */
+static int itimer_period_actual = 0; /* actual dispatcher itimer period */
+
+#define CALL_REAL(x) (*(int(*)())__real_##x)
+#define NULL_PTR(x) ( __real_##x == NULL )
+
+static void *__real_sigaction = NULL;
+static void *__real_setitimer = NULL;
+static void *__real_libc_setitimer = NULL;
+static void *__real_sigprocmask = NULL;
+static void *__real_thr_sigsetmask = NULL;
+static void *__real_pthread_sigmask = NULL;
+static void *__real_pthread_create = NULL;
+
+/*
+ * void collector_sigprof_dispatcher()
+ *
+ * Common SIGPROF event handler which dispatches events to appropriate
+ * module handlers, if they are active for this collection and due.
+ * Dispatch sequence, logic and handlers currently hardcoded in dispatcher.
+ */
+static void
+collector_sigprof_dispatcher (int sig, siginfo_t *info, void *context)
+{
+ if (info == NULL || (info->si_code <= 0 && info->si_code != SI_TIMER))
+ {
+ TprintfT (DBG_LT2, "collector_sigprof_dispatcher signal for %p\n",
+ original_sigprof_handler.sa_handler);
+ /* pass signal to previous handler */
+ /* watch for recursion, SIG_IGN, and SIG_DFL */
+ if (original_sigprof_handler.sa_handler == SIG_DFL)
+ __collector_SIGDFL_handler (SIGPROF);
+ else if (original_sigprof_handler.sa_handler != SIG_IGN &&
+ original_sigprof_handler.sa_sigaction != &collector_sigprof_dispatcher)
+ {
+ (original_sigprof_handler.sa_sigaction)(sig, info, context);
+ TprintfT (DBG_LT2, "collector_sigprof_dispatcher handled\n");
+ }
+ }
+ else if (dispatch_mode == DISPATCH_ON)
+ {
+#if ARCH(SPARC)
+ ucontext_t uctxmem;
+ ucontext_t *uctx = &uctxmem;
+ uctx->uc_link = NULL;
+ /* 23340823 signal handler third argument should point to a ucontext_t */
+ /* Convert sigcontext to ucontext_t on sparc-Linux */
+ struct sigcontext *sctx = (struct sigcontext*) context;
+#if WSIZE(32)
+ uctx->uc_mcontext.gregs[REG_PC] = sctx->si_regs.pc;
+ __collector_memcpy (&uctx->uc_mcontext.gregs[3],
+ sctx->si_regs.u_regs,
+ sizeof (sctx->si_regs.u_regs));
+#else
+ uctx->uc_mcontext.mc_gregs[MC_PC] = sctx->sigc_regs.tpc;
+ __collector_memcpy (&uctx->uc_mcontext.mc_gregs[3],
+ sctx->sigc_regs.u_regs,
+ sizeof (sctx->sigc_regs.u_regs));
+#endif /* WSIZE() */
+
+#else /* not sparc-Linux */
+ ucontext_t *uctx = (ucontext_t*) context;
+#endif /* ARCH() */
+ TprintfT (DBG_LT3, "collector_sigprof_dispatcher dispatching signal\n");
+
+ /* XXXX the order of these checks/activities may need adjustment */
+ /* XXXX should also check (first) for a "cached" manual sample */
+ /* HWC check for each LWP: required even if collection is paused */
+ /* This should be first, otherwise it's likely to find the counters
+ * stopped due to an event/overflow during some of the other activities.
+ */
+ /* XXXX HWC check performed every time (skipping if HWC profiling inactive)
+ * to avoid complexity of maintaining separate check times for each LWP
+ */
+ __collector_ext_hwc_check (info, uctx);
+
+ /* XXXX if sigemtpending, should perhaps skip __collector_ext_usage_sample
+ * (and get it next time through)
+ */
+
+ /* check for experiment past delay start */
+ if (__collector_delay_start != 0)
+ {
+ hrtime_t now = __collector_gethrtime ();
+ if (__collector_delay_start < now)
+ {
+ TprintfT (0, "__collector_ext_usage_sample: now (%lld) > delay_start (%lld)\n",
+ (now - __collector_start_time), (__collector_delay_start - __collector_start_time));
+
+ /* resume the data collection */
+ __collector_delay_start = 0;
+ __collector_resume ();
+
+ /* don't take a periodic sample, just let the resume sample cover it */
+ if (__collector_sample_period != 0)
+ {
+ /* this update should only be done for periodic samples */
+ while (__collector_next_sample < now)
+ __collector_next_sample += ((hrtime_t) NANOSEC) * __collector_sample_period;
+ }
+ /* return; */
+ }
+ }
+ /* check for periodic sampling */
+ if (__collector_gethrtime () > __collector_next_sample)
+ __collector_ext_usage_sample (PERIOD_SMPL, "periodic");
+
+ /* check for experiment past termination time */
+ if (__collector_exp_active && __collector_terminate_time != 0)
+ {
+ hrtime_t now = __collector_gethrtime ();
+ if (__collector_terminate_time < now)
+ {
+ TprintfT (0, "__collector_ext_usage_sample: now (%lld) > terminate_time (%lld); closing experiment\n",
+ (now - __collector_start_time), (__collector_terminate_time - __collector_start_time));
+ /* close the experiment */
+ __collector_close_experiment ();
+ }
+ }
+
+ /* call the code to process the profile data, and generate the packet */
+ /* (must always be called, otherwise profile data must be aggregated,
+ * but can be left till last, as already have the required data)
+ */
+ __collector_ext_profile_handler (info, uctx);
+ }
+ else if (dispatch_mode == DISPATCH_TST)
+ {
+ collector_sigprof_entries++;
+ return;
+ }
+}
+
+/*
+ * __collector_sigprof_install
+ */
+int
+__collector_sigprof_install ()
+{
+ TprintfT (DBG_LT2, "__collector_sigprof_install\n");
+ struct sigaction oact;
+ if (__collector_sigaction (SIGPROF, NULL, &oact) != 0)
+ return COL_ERROR_DISPINIT;
+ if (oact.sa_sigaction == collector_sigprof_dispatcher)
+ /* signal handler is already in place; we are probably in a fork-child */
+ TprintfT (DBG_LT1, "dispatcher: __collector_ext_dispatcher_install() collector_sigprof_dispatcher already installed\n");
+ else
+ {
+ struct sigaction c_act;
+ CALL_UTIL (memset)(&c_act, 0, sizeof c_act);
+ sigemptyset (&c_act.sa_mask);
+ sigaddset (&c_act.sa_mask, HWCFUNCS_SIGNAL); /* block SIGEMT delivery in handler */
+ c_act.sa_sigaction = collector_sigprof_dispatcher;
+ c_act.sa_flags = SA_RESTART | SA_SIGINFO;
+ if (__collector_sigaction (SIGPROF, &c_act, &original_sigprof_handler))
+ return COL_ERROR_DISPINIT;
+ }
+ dispatch_mode = DISPATCH_OFF; /* don't dispatch yet */
+ TprintfT (DBG_LT2, "__collector_sigprof_install done\n");
+ return COL_ERROR_NONE;
+}
+
+/*
+ * void __collector_ext_dispatcher_tsd_create_key()
+ *
+ * create tsd key for dispatcher
+ */
+void
+__collector_ext_dispatcher_tsd_create_key ()
+{
+ dispatcher_key = __collector_tsd_create_key (sizeof (timer_t), NULL, NULL);
+}
+/*
+ * int __collector_ext_dispatcher_install()
+ *
+ * installs a common handler/dispatcher (and itimer) for SIGPROF events
+ */
+int
+__collector_ext_dispatcher_install ()
+{
+ int timer_period;
+ TprintfT (DBG_LT2, "__collector_ext_dispatcher_install\n");
+
+ /* check period set for interval timer, which will be used as the basis
+ * for all timed activities: if not set, no role for SIGPROF dispatcher
+ */
+ if (itimer_period_requested <= 0)
+ {
+ TprintfT (DBG_LT1, "No interval timer set: skipping dispatcher install!\n");
+ return COL_ERROR_NONE; /* no itimer/dispatcher required */
+ }
+
+ /* check for an existing interval timer */
+ if (collector_master_thread_timerid == NULL)
+ if (collector_timer_create (&collector_master_thread_timerid) < 0)
+ return COL_ERROR_ITMRINIT;
+ timer_t *timeridptr = __collector_tsd_get_by_key (dispatcher_key);
+ if (timeridptr != NULL)
+ *timeridptr = collector_master_thread_timerid; // store for per thread timer stop/start
+ TprintfT (DBG_LT3, "__collector_ext_dispatcher_install: collector_master_thread_timerid=%p\n",
+ collector_master_thread_timerid);
+ timer_period = collector_timer_gettime (collector_master_thread_timerid);
+ if (timer_period > 0)
+ {
+ TprintfT (DBG_LT1, "Overriding app-set interval timer with period %d\n", timer_period);
+ (void) __collector_log_write ("<event kind=\"%s\" id=\"%d\">%d->%d</event>\n",
+ SP_JCMD_CWARN, COL_WARN_ITMRPOVR, timer_period, itimer_period_requested);
+ }
+ /* install the interval timer used for all timed activities */
+ if (collector_timer_settime (itimer_period_requested, collector_master_thread_timerid) < 0)
+ return COL_ERROR_ITMRINIT;
+ TprintfT (DBG_LT2, "__collector_ext_dispatcher_install done\n");
+ dispatch_mode = DISPATCH_ON; /* activate SIGPROF dispatch to event handlers */
+ return COL_ERROR_NONE;
+}
+
+int
+__collector_sigaction (int sig, const struct sigaction *nact, struct sigaction *oact)
+{
+ TprintfT (DBG_LT1, "__collector_sigaction: %d, %p\n", sig, nact ? nact->sa_sigaction : NULL);
+ if (NULL_PTR (sigaction))
+ init_interposition_intf ();
+
+ /* Whether we change the signal handler in the kernel
+ * or not make sure the real sigaction is aware about
+ * our new handler (6227565)
+ */
+ return CALL_REAL (sigaction)(sig, nact, oact);
+}
+
+/*
+ * We have special dispatchers for SIGPROF and HWCFUNCS_SIGNAL to
+ * decide whether the signal was intended for us or for the user.
+ * One special case is SIGDFL, in which case we don't have a
+ * user-function address to call. If the user did indeed set
+ * default disposition for one of these signals and sent that
+ * signal, we honor that action, even though it will lead to
+ * termination.
+ */
+void
+__collector_SIGDFL_handler (int sig)
+{
+ /* remove our dispatcher, replacing it with the default disposition */
+ struct sigaction act;
+ CALL_UTIL (memset)(&act, 0, sizeof (act));
+ act.sa_handler = SIG_DFL;
+ if (__collector_sigaction (sig, &act, NULL))
+ {
+ /* XXXXXX what are we supposed to do here? we're committing suicide anyhow */
+ }
+ /* resend the signal we intercepted earlier */
+ // XXXX Bug 18177509 - additional sigprof signal kills target program
+ kill (getpid (), sig);
+}
+
+/*
+ * suspend/resume timer per thread
+ */
+void
+__collector_ext_dispatcher_thread_timer_suspend ()
+{
+ timer_t * timeridptr = __collector_tsd_get_by_key (dispatcher_key);
+ if (timeridptr != NULL && *timeridptr != NULL)
+ (void) collector_timer_settime (0, *timeridptr);
+ return;
+}
+
+int
+__collector_ext_dispatcher_thread_timer_resume ()
+{
+ timer_t * timeridptr = __collector_tsd_get_by_key (dispatcher_key);
+ if (timeridptr == NULL)
+ return -1;
+ if (*timeridptr == NULL)
+ { // timer id not initialized yet
+ TprintfT (DBG_LT2, "__collector_ext_dispatcher_thread_timer_resume: timer not initialized yet, create it\n");
+ if (collector_timer_create (timeridptr) == -1)
+ {
+ TprintfT (0, "__collector_ext_dispatcher_thread_timer_resume(): WARNING: No timer created\n");
+ return -1;
+ }
+ }
+ return collector_timer_settime (itimer_period_requested, *timeridptr);
+}
+
+void
+__collector_ext_dispatcher_suspend ()
+{
+ TprintfT (DBG_LT2, "__collector_ext_dispatcher_suspend\n");
+ if (dispatch_mode == DISPATCH_NYI)
+ {
+ TprintfT (0, "__collector_ext_dispatcher_suspend(): WARNING: No dispatcher installed\n");
+ return;
+ }
+
+ /* disable SIGPROF dispatching */
+ dispatch_mode = DISPATCH_OFF;
+
+ /* disable the interval timer; ignore any failures */
+ __collector_ext_dispatcher_thread_timer_suspend ();
+ return;
+}
+
+void
+__collector_ext_dispatcher_restart ()
+{
+ TprintfT (DBG_LT2, "__collector_ext_dispatcher_restart(ip=%d)\n", itimer_period_requested);
+ if (dispatch_mode == DISPATCH_NYI)
+ {
+ TprintfT (0, "__collector_ext_dispatcher_restart(): WARNING: No dispatcher installed\n");
+ return;
+ }
+
+ /* restart the interval timer used for all timed activities */
+ if (__collector_ext_dispatcher_thread_timer_resume () == 0)
+ dispatch_mode = DISPATCH_ON; /* re-activate SIGPROF dispatch to handlers */
+ return;
+}
+/*
+ * void __collector_ext_dispatcher_deinstall()
+ *
+ * If installed, disables SIGPROF dispatch and interval timer.
+ * Includes checks for last SIGPROF dispatch time, interval timer period,
+ * and currently installed SIGPROF handler, with appropriate warnings logged.
+ * The dispatcher remains installed to handle pending collector SIGPROFs and
+ * forward non-collector SIGPROFs to the application's handler(s).
+ * If the decision is ever made actually to deinstall the dispatcher,
+ * consider bug 4183714 and what to do about any possible pending
+ * SIGPROFs.
+ */
+
+void
+__collector_ext_dispatcher_deinstall ()
+{
+ TprintfT (DBG_LT1, "__collector_ext_dispatcher_deinstall()\n");
+ if (dispatch_mode == DISPATCH_NYI)
+ {
+ TprintfT (0, "__collector_ext_dispatcher_deinstall(): WARNING: No dispatcher installed\n");
+ return;
+ }
+ dispatch_mode = DISPATCH_OFF; /* disable SIGPROF dispatching */
+
+ /* verify that interval timer is still installed with expected period */
+ int timer_period = collector_timer_gettime (collector_master_thread_timerid);
+ if (timer_period != itimer_period_actual)
+ {
+ TprintfT (DBG_LT2, "dispatcher: Collector interval timer period changed %d -> %d\n",
+ itimer_period_actual, timer_period);
+ if ((itimer_period_actual >= (timer_period + timer_period / 10)) ||
+ (itimer_period_actual <= (timer_period - timer_period / 10)))
+ __collector_log_write ("<event kind=\"%s\" id=\"%d\">%d -> %d</event>\n",
+ SP_JCMD_CWARN, COL_WARN_ITMRREP,
+ itimer_period_actual, timer_period);
+ else
+ __collector_log_write ("<event kind=\"%s\" id=\"%d\">%d -> %d</event>\n",
+ SP_JCMD_COMMENT, COL_WARN_PROFRND,
+ itimer_period_actual, timer_period);
+ }
+
+ /* Verify that SIGPROF dispatcher is still installed.
+ * (still required with sigaction interposition and management,
+ * since interposition is not done for attach experiments)
+ */
+ struct sigaction curr;
+ if (__collector_sigaction (SIGPROF, NULL, &curr) == -1)
+ TprintfT (0, "ERROR: dispatcher sigaction check failed: errno=%d\n", errno);
+ else if (curr.sa_sigaction != collector_sigprof_dispatcher)
+ {
+ TprintfT (0, "ERROR: collector dispatcher replaced by %p!\n", curr.sa_handler);
+ (void) __collector_log_write ("<event kind=\"%s\" id=\"%d\">%p</event>\n",
+ SP_JCMD_CWARN, COL_WARN_SIGPROF, curr.sa_handler);
+ }
+ else
+ TprintfT (DBG_LT2, "collector dispatcher integrity verified!\n");
+
+ /* disable the interval timer; ignore any failures */
+ if (collector_master_thread_timerid != NULL)
+ {
+ (void) CALL_REAL (timer_delete)(collector_master_thread_timerid);
+ collector_master_thread_timerid = NULL;
+ }
+ dispatcher_key = COLLECTOR_TSD_INVALID_KEY;
+ itimer_period_requested = 0;
+ itimer_period_actual = 0;
+}
+
+/*
+ * void __collector_ext_dispatcher_fork_child_cleanup()
+ *
+ * delete timer, clear timer interval
+ */
+void
+__collector_ext_dispatcher_fork_child_cleanup ()
+{
+ if (collector_master_thread_timerid != NULL)
+ {
+ (void) CALL_REAL (timer_delete)(collector_master_thread_timerid);
+ collector_master_thread_timerid = NULL;
+ }
+ __collector_mutex_init (&collector_clone_libc_lock);
+ dispatcher_key = COLLECTOR_TSD_INVALID_KEY;
+ itimer_period_requested = 0;
+ itimer_period_actual = 0;
+}
+/*
+ * int __collector_ext_itimer_set (int rperiod)
+ *
+ * set itimer period, if not yet set to a positive number of microseconds,
+ * (after rounding to sys_resolution if necessary) and return its value
+ */
+int
+__collector_ext_itimer_set (int rperiod)
+{
+ int period;
+ /* if rperiod is negative, force setting */
+ if (rperiod < 0)
+ {
+ itimer_period_actual = 0;
+ period = -rperiod;
+ }
+ else
+ period = rperiod;
+
+ // ignore SIGPROF while testing itimer interval setting
+ int saved = dispatch_mode;
+ dispatch_mode = DISPATCH_OFF;
+ if (collector_timer_create (&collector_master_thread_timerid) == -1)
+ {
+ TprintfT (0, "__collector_ext_itimer_set(): WARNING: No timer created\n");
+ return itimer_period_actual;
+ }
+ if (collector_timer_settime (period, collector_master_thread_timerid) == 0)
+ {
+ itimer_period_actual = collector_timer_gettime (collector_master_thread_timerid);
+ (void) collector_timer_settime (0, collector_master_thread_timerid); /* XXXX unset for now */
+ itimer_period_requested = period;
+ if (itimer_period_requested != itimer_period_actual)
+ {
+ TprintfT (DBG_LT2, " itimer period %d adjusted to %d\n",
+ itimer_period_requested, itimer_period_actual);
+ // (void) __collector_log_write("<event kind=\"%s\" id=\"%d\">%d -> %d</event>\n",
+ // SP_JCMD_CWARN, COL_WARN_PROFRND, itimer_period_requested, itimer_period_actual);
+ }
+ else
+ TprintfT (DBG_LT2, " itimer period %d accepted\n", period);
+ }
+
+ // restore dispatching SIGPROF handler
+ dispatch_mode = saved;
+ TprintfT (0, "__collector_ext_itimer_set(%d), requested=%d, actual=%d)\n",
+ rperiod, itimer_period_requested, itimer_period_actual);
+ return (itimer_period_actual);
+}
+
+static int
+collector_timer_gettime (timer_t timerid)
+{
+ int timer_period;
+ struct itimerspec itimer;
+ if (timerid == NULL)
+ return (0); // timer was not initialized
+ if (CALL_REAL (timer_gettime)(timerid, &itimer) == -1)
+ {
+ /* this should never reasonably fail, so not worth logging */
+ TprintfT (DBG_LT1, "WARNING: timer_gettime failed: errno=%d\n", errno);
+ return (-1);
+ }
+ timer_period = ((itimer.it_interval.tv_sec * NANOSEC) +
+ itimer.it_interval.tv_nsec) / 1000;
+ TprintfT (DBG_LT2, "collector_timer_gettime (period=%d)\n", timer_period);
+ return (timer_period);
+}
+
+static int
+collector_timer_create (timer_t * ptimerid)
+{
+ struct sigevent sigev;
+ if (NULL_PTR (timer_create))
+ init_interposition_intf ();
+ TprintfT (DBG_LT2, "collector_timer_settime(): timer_create is %p\n", __real_timer_create);
+ sigev.sigev_notify = SIGEV_THREAD_ID | SIGEV_SIGNAL;
+ sigev.sigev_signo = SIGPROF;
+ sigev.sigev_value.sival_ptr = ptimerid;
+ sigev._sigev_un._tid = __collector_gettid ();
+ if (CALL_REAL (timer_create)(CLOCK_THREAD_CPUTIME_ID, &sigev, ptimerid) == -1)
+ {
+ TprintfT (DBG_LT2, "collector_timer_settime() failed! errno=%d\n", errno);
+ return -1;
+ }
+ return 0;
+}
+
+static int
+collector_timer_settime (int period, timer_t timerid)
+{
+ struct itimerspec itimer;
+ if (NULL_PTR (timer_settime))
+ init_interposition_intf ();
+ TprintfT (DBG_LT2, "collector_timer_settime(period=%d)\n", period);
+ time_t NPM = 1000;
+ itimer.it_interval.tv_sec = NPM * period / NANOSEC;
+ itimer.it_interval.tv_nsec = (NPM * period) % NANOSEC;
+ itimer.it_value = itimer.it_interval;
+ if (CALL_REAL (timer_settime)(timerid, 0, &itimer, NULL) == -1)
+ {
+ TprintfT (DBG_LT2, "collector_timer_settime(%d) failed! errno=%d\n", period, errno);
+ return -1;
+ }
+ return 0;
+}
+
+static void
+protect_profiling_signals (sigset_t* lset)
+{
+ static unsigned int protected_sigprof = 0;
+ static unsigned int protected_sigemt = 0;
+ // T1 relies on thread signal masking, so best not to mess with it:
+ // T1 users have already been warned about the dangers of its use
+ if (__collector_libthread_T1)
+ return;
+ if (sigismember (lset, SIGPROF) && (dispatch_mode == DISPATCH_ON))
+ {
+ TprintfT (0, "WARNING: ignoring %s block while profiling\n", "SIGPROF");
+ if (protected_sigprof == 0)
+ __collector_log_write ("<event kind=\"%s\" id=\"%d\">%s</event>\n",
+ SP_JCMD_CWARN, COL_WARN_SIGMASK, "SIGPROF");
+ sigdelset (lset, SIGPROF);
+ protected_sigprof++;
+ }
+ if (sigismember (lset, HWCFUNCS_SIGNAL) && __collector_ext_hwc_active ())
+ {
+ TprintfT (0, "WARNING: ignoring %s block while profiling\n", "SIGEMT");
+ if (protected_sigemt == 0)
+ __collector_log_write ("<event kind=\"%s\" id=\"%d\">%s</event>\n",
+ SP_JCMD_CWARN, COL_WARN_SIGMASK, HWCFUNCS_SIGNAL_STRING);
+ sigdelset (lset, HWCFUNCS_SIGNAL);
+ protected_sigemt++;
+ }
+}
+
+#define SYS_SETITIMER_NAME "setitimer"
+#define SYS_SIGACTION_NAME "sigaction"
+#define SYS_SIGPROCMASK_NAME "sigprocmask"
+#define SYS_PTHREAD_SIGMASK "pthread_sigmask"
+#define SYS_THR_SIGSETMASK "thr_sigsetmask"
+
+static int
+init_interposition_intf ()
+{
+ if (__collector_dlsym_guard)
+ return 1;
+ void *dlflag;
+ /* Linux requires RTLD_LAZY, Solaris can do just RTLD_NOLOAD */
+ void *handle = dlopen (SYS_LIBC_NAME, RTLD_LAZY | RTLD_NOLOAD);
+
+#if ARCH(SPARC) && WSIZE(64)
+ /* dlopen a bogus path to avoid CR 23608692 */
+ dlopen ("/bogus_path_for_23608692_workaround/", RTLD_LAZY | RTLD_NOLOAD);
+#endif
+ __real_setitimer = dlsym (RTLD_NEXT, SYS_SETITIMER_NAME);
+
+ if (__real_setitimer == NULL)
+ {
+ __real_setitimer = dlsym (RTLD_DEFAULT, SYS_SETITIMER_NAME);
+ if (__real_setitimer == NULL)
+ {
+ TprintfT (DBG_LT2, "init_interposition_intf() setitimer not found\n");
+ return 1;
+ }
+ dlflag = RTLD_DEFAULT;
+ }
+ else
+ dlflag = RTLD_NEXT;
+
+ TprintfT (DBG_LT2, "init_interposition_intf() using RTLD_%s\n",
+ (dlflag == RTLD_DEFAULT) ? "DEFAULT" : "NEXT");
+ TprintfT (DBG_LT2, "@%p __real_setitimer\n", __real_setitimer);
+
+ __real_sigaction = dlsym (dlflag, SYS_SIGACTION_NAME);
+ TprintfT (DBG_LT2, "@%p __real_sigaction\n", __real_sigaction);
+
+ /* also explicitly get libc.so/setitimer (as a backup) */
+ __real_libc_setitimer = dlsym (handle, SYS_SETITIMER_NAME);
+ TprintfT (DBG_LT2, "@%p __real_libc_setitimer\n", __real_libc_setitimer);
+
+ __real_sigprocmask = dlsym (dlflag, SYS_SIGPROCMASK_NAME);
+ TprintfT (DBG_LT2, "@%p __real_sigprocmask\n", __real_sigprocmask);
+
+ __real_thr_sigsetmask = dlsym (dlflag, SYS_THR_SIGSETMASK);
+ TprintfT (DBG_LT2, "@%p __real_thr_sigsetmask\n", __real_thr_sigsetmask);
+
+ __real_pthread_sigmask = dlsym (dlflag, SYS_PTHREAD_SIGMASK);
+ TprintfT (DBG_LT2, "@%p __real_pthread_sigmask\n", __real_pthread_sigmask);
+
+#if ARCH(Aarch64)
+ __real_pthread_create = dlvsym (dlflag, "pthread_create", SYS_PTHREAD_CREATE_VERSION);
+ __real_timer_create = dlsym (dlflag, "timer_create");
+ __real_timer_settime = dlsym (dlflag, "timer_settime");
+ __real_timer_delete = dlsym (dlflag, "timer_delete");
+ __real_timer_gettime = dlsym (dlflag, "timer_gettime");
+#else
+ __real_pthread_create = dlvsym (dlflag, "pthread_create", SYS_PTHREAD_CREATE_VERSION);
+ TprintfT (DBG_LT2, "[%s] @%p __real_pthread_create\n", SYS_PTHREAD_CREATE_VERSION, __real_pthread_create);
+ __real_timer_create = dlvsym (dlflag, "timer_create", SYS_TIMER_X_VERSION);
+ TprintfT (DBG_LT2, "init_lineage_intf() [%s] @0x%p __real_timer_create\n", SYS_TIMER_X_VERSION, __real_timer_create);
+ __real_timer_settime = dlvsym (dlflag, "timer_settime", SYS_TIMER_X_VERSION);
+ TprintfT (DBG_LT2, "init_lineage_intf() [%s] @0x%p __real_timer_settime\n", SYS_TIMER_X_VERSION, __real_timer_settime);
+ __real_timer_delete = dlvsym (dlflag, "timer_delete", SYS_TIMER_X_VERSION);
+ TprintfT (DBG_LT2, "init_lineage_intf() [%s] @0x%p __real_timer_delete\n", SYS_TIMER_X_VERSION, __real_timer_delete);
+ __real_timer_gettime = dlvsym (dlflag, "timer_gettime", SYS_TIMER_X_VERSION);
+ TprintfT (DBG_LT2, "init_lineage_intf() [%s] @0x%p __real_timer_gettime\n", SYS_TIMER_X_VERSION, __real_timer_gettime);
+ __real_clone = dlsym (dlflag, "clone");
+ TprintfT (DBG_LT2, "init_lineage_intf() @0x%p __real_clone\n", __real_clone);
+#if ARCH(Intel) && WSIZE(32)
+ __real_pthread_create_2_1 = __real_pthread_create;
+ __real_pthread_create_2_0 = dlvsym (dlflag, "pthread_create", "GLIBC_2.0");
+#elif ARCH(Intel) && WSIZE(64)
+ __real_timer_create_2_3_3 = __real_timer_create;
+ __real_timer_create_2_2_5 = dlvsym (dlflag, "timer_create", "GLIBC_2.2.5");
+#elif ARCH(SPARC) && WSIZE(64)
+ __real_timer_create_2_3_3 = __real_timer_create;
+ __real_timer_create_2_2 = dlvsym (dlflag, "timer_create", "GLIBC_2.2");
+#endif /* ARCH() && SIZE() */
+#endif
+ return 0;
+}
+
+
+/*------------------------------------------------------------- sigaction */
+
+/* NB: need a global interposing function called "sigaction" */
+int
+sigaction (int sig, const struct sigaction *nact, struct sigaction *oact)
+{
+ int ret = 0;
+ int err = 0;
+ if (NULL_PTR (sigaction))
+ err = init_interposition_intf ();
+ if (err)
+ return -1;
+ TprintfT (DBG_LT3, "sigaction(sig=%02d, nact=%p) interposing\n", sig, nact);
+ if (sig == SIGPROF && dispatch_mode != DISPATCH_NYI)
+ {
+ if (oact != NULL)
+ {
+ oact->sa_handler = original_sigprof_handler.sa_handler;
+ oact->sa_mask = original_sigprof_handler.sa_mask;
+ oact->sa_flags = original_sigprof_handler.sa_flags;
+ }
+ if (nact != NULL)
+ {
+ original_sigprof_handler.sa_handler = nact->sa_handler;
+ original_sigprof_handler.sa_mask = nact->sa_mask;
+ original_sigprof_handler.sa_flags = nact->sa_flags;
+ TprintfT (DBG_LT1, "dispatcher: new sigaction(sig=%02d) set\n", sig);
+ }
+ }
+ else if (sig == HWCFUNCS_SIGNAL)
+ ret = collector_sigemt_sigaction (nact, oact);
+ else
+ {
+ if (sig != SIGCHLD || collector_sigchld_sigaction (nact, oact))
+ ret = CALL_REAL (sigaction)(sig, nact, oact);
+ TprintfT (DBG_LT3, "Real sigaction(sig=%02d) returned %d (oact=%p)\n",
+ sig, ret, oact);
+ /* but check for other important signals */
+ /* check for sample and pause/resume signals; give warning once, if need be */
+ if ((sig == __collector_sample_sig) && (__collector_sample_sig_warn == 0))
+ {
+ /* give user a warning */
+ (void) __collector_log_write ("<event kind=\"%s\" id=\"%d\">%d</event>\n",
+ SP_JCMD_CWARN, COL_WARN_SAMPSIGUSED, __collector_sample_sig);
+ __collector_sample_sig_warn = 1;
+ }
+ if ((sig == __collector_pause_sig) && (__collector_pause_sig_warn == 0))
+ {
+ /* give user a warning */
+ (void) __collector_log_write ("<event kind=\"%s\" id=\"%d\">%d</event>\n",
+ SP_JCMD_CWARN, COL_WARN_PAUSESIGUSED, __collector_pause_sig);
+ __collector_pause_sig_warn = 1;
+ }
+ }
+ TprintfT (DBG_LT3, "sigaction() returning %d (oact=%p)\n", ret, oact);
+ return ret;
+}
+
+/*
+ * In addition to interposing on sigaction(), should we also interpose
+ * on other important signal functions like signal() or sigset()?
+ * - On Solaris, those other functions apparently call sigaction().
+ * So, we only have to interpose on it.
+ * - On Linux, we should perhaps interpose on these other functions,
+ * but they are less portable than sigaction() and deprecated or even obsolete.
+ * So, we interpose, but don't overly worry about doing a good job.
+ */
+sighandler_t
+signal (int sig, sighandler_t handler)
+{
+ struct sigaction nact;
+ struct sigaction oact;
+ TprintfT (DBG_LT3, "signal(sig=%02d, handler=%p) interposing\n", sig, handler);
+ sigemptyset (&nact.sa_mask);
+ nact.sa_handler = handler;
+ nact.sa_flags = SA_RESTART;
+ if (sigaction (sig, &nact, &oact))
+ return SIG_ERR;
+ TprintfT (DBG_LT3, "signal() returning %p\n", oact.sa_handler);
+ return oact.sa_handler;
+}
+
+sighandler_t
+sigset (int sig, sighandler_t handler)
+{
+ TprintfT (DBG_LT3, "sigset(sig=%02d, handler=%p) interposing\n", sig, handler);
+ return signal (sig, handler);
+}
+
+/*------------------------------------------------------------- timer_create */
+
+// map interposed symbol versions
+#if WSIZE(64)
+#if ARCH(SPARC) || ARCH(Intel)
+static int
+__collector_timer_create_symver (int(real_timer_create) (), clockid_t clockid, struct sigevent *sevp,
+ timer_t *timerid);
+
+SYMVER_ATTRIBUTE (__collector_timer_create_2_3_3, timer_create@@GLIBC_2.3.3)
+int
+__collector_timer_create_2_3_3 (clockid_t clockid, struct sigevent *sevp,
+ timer_t *timerid)
+{
+ if (NULL_PTR (timer_create))
+ init_interposition_intf ();
+ TprintfT (DBG_LTT, "dispatcher: GLIBC: __collector_timer_create_2_3_3@%p\n", CALL_REAL (timer_create_2_3_3));
+ return __collector_timer_create_symver (CALL_REAL (timer_create_2_3_3), clockid, sevp, timerid);
+}
+#endif /* ARCH(SPARC) || ARCH(Intel)*/
+
+#if ARCH(SPARC)
+
+SYMVER_ATTRIBUTE (__collector_timer_create_2_2, timer_create@GLIBC_2.2)
+int
+__collector_timer_create_2_2 (clockid_t clockid, struct sigevent *sevp,
+ timer_t *timerid)
+{
+ if (NULL_PTR (timer_create))
+ init_interposition_intf ();
+ TprintfT (DBG_LTT, "dispatcher: GLIBC: __collector_timer_create_2_2@%p\n", CALL_REAL (timer_create_2_2));
+ return __collector_timer_create_symver (CALL_REAL (timer_create_2_2), clockid, sevp, timerid);
+}
+
+#elif ARCH(Intel)
+
+SYMVER_ATTRIBUTE (__collector_timer_create_2_2_5, timer_create@GLIBC_2.2.5)
+int
+__collector_timer_create_2_2_5 (clockid_t clockid, struct sigevent *sevp,
+ timer_t *timerid)
+{
+ if (NULL_PTR (timer_create))
+ init_interposition_intf ();
+ TprintfT (DBG_LTT, "dispatcher: GLIBC: __collector_timer_create_2_2_5@%p\n", CALL_REAL (timer_create_2_2_5));
+ return __collector_timer_create_symver (CALL_REAL (timer_create_2_2_5), clockid, sevp, timerid);
+}
+#endif /* ARCH() */
+#endif /* WSIZE(64) */
+
+#if ARCH(Aarch64) || (ARCH(Intel) && WSIZE(32))
+int timer_create (clockid_t clockid, struct sigevent *sevp, timer_t *timerid)
+#else
+static int
+__collector_timer_create_symver (int(real_timer_create) (), clockid_t clockid,
+ struct sigevent *sevp, timer_t *timerid)
+#endif
+{
+ int ret;
+
+ if (NULL_PTR (timer_create))
+ init_interposition_intf ();
+
+ /* collector reserves SIGPROF
+ */
+ if (sevp == NULL || sevp->sigev_notify != SIGEV_SIGNAL
+ || sevp->sigev_signo != SIGPROF)
+ {
+#if ARCH(Aarch64) || (ARCH(Intel) && WSIZE(32))
+ ret = CALL_REAL (timer_create)(clockid, sevp, timerid);
+#else
+ ret = (real_timer_create) (clockid, sevp, timerid);
+#endif
+ TprintfT (DBG_LT2, "Real timer_create(%d) returned %d\n",
+ clockid, ret);
+ return ret;
+ }
+
+ /* log that application's timer_create request is overridden */
+ (void) __collector_log_write ("<event kind=\"%s\" id=\"%d\">%d</event>\n",
+ SP_JCMD_CWARN, COL_WARN_ITMROVR, -1);
+ ret = -1;
+ errno = EBUSY;
+ TprintfT (DBG_LT2, "timer_create() returning %d\n", ret);
+ return ret;
+}
+/*------------------------------------------------------------- setitimer */
+int
+_setitimer (int which, const struct itimerval *nval,
+ struct itimerval *oval)
+{
+ int ret;
+ int period;
+
+ if (NULL_PTR (setitimer))
+ init_interposition_intf ();
+
+ if (nval == NULL)
+ period = -1;
+ else
+ period = (nval->it_interval.tv_sec * MICROSEC) +
+ nval->it_interval.tv_usec;
+ TprintfT (DBG_LT1, "setitimer(which=%d,nval=%dus) interposing\n", which, period);
+
+ /* collector reserves ITIMER_REALPROF for its own use, and ITIMER_PROF
+ * uses the same signal (SIGPROF) so it must also be reserved
+ */
+ if (((which != ITIMER_REALPROF) && (which != ITIMER_PROF)) || (nval == NULL))
+ {
+ ret = CALL_REAL (setitimer)(which, nval, oval);
+ if (oval == NULL)
+ period = -1;
+ else
+ period = (oval->it_interval.tv_sec * MICROSEC) +
+ oval->it_interval.tv_usec;
+ TprintfT (DBG_LT2, "Real setitimer(%d) returned %d (oval=%dus)\n",
+ which, ret, period);
+ return ret;
+ }
+ /* log that application's setitimer request is overridden */
+ (void) __collector_log_write ("<event kind=\"%s\" id=\"%d\">%d</event>\n",
+ SP_JCMD_CWARN, COL_WARN_ITMROVR, period);
+ if (oval == NULL)
+ period = -1;
+ else
+ {
+ getitimer (which, oval); /* return current itimer setting */
+ period = (oval->it_interval.tv_sec * MICROSEC) +
+ oval->it_interval.tv_usec;
+ }
+ ret = -1;
+ errno = EBUSY;
+ TprintfT (DBG_LT2, "setitimer() returning %d (oval=%dus)\n", ret, period);
+ return ret;
+}
+
+/*--------------------------------------------------------------- sigprocmask */
+int
+__collector_sigprocmask (int how, const sigset_t* iset, sigset_t* oset)
+{
+ int err = 0;
+ if (NULL_PTR (sigprocmask))
+ err = init_interposition_intf ();
+ if (err)
+ return -1;
+ TprintfT (DBG_LT2, "__collector_sigprocmask(%d) interposing\n", how);
+ sigset_t lsigset;
+ sigset_t* lset = NULL;
+ if (iset)
+ {
+ lsigset = *iset;
+ lset = &lsigset;
+ if ((how == SIG_BLOCK) || (how == SIG_SETMASK))
+ protect_profiling_signals (lset);
+ }
+ int ret = CALL_REAL (sigprocmask)(how, lset, oset);
+ TprintfT (DBG_LT2, "__collector_sigprocmask(%d) returning %d\n", how, ret);
+ return ret;
+}
+
+/*------------------------------------------------------------ thr_sigsetmask */
+int
+__collector_thr_sigsetmask (int how, const sigset_t* iset, sigset_t* oset)
+{
+ if (NULL_PTR (thr_sigsetmask))
+ init_interposition_intf ();
+ TprintfT (DBG_LT1, "__collector_thr_sigsetmask(%d) interposing\n", how);
+ sigset_t lsigset;
+ sigset_t* lset = NULL;
+ if (iset)
+ {
+ lsigset = *iset;
+ lset = &lsigset;
+ if ((how == SIG_BLOCK) || (how == SIG_SETMASK))
+ protect_profiling_signals (lset);
+ }
+ int ret = CALL_REAL (thr_sigsetmask)(how, lset, oset);
+ TprintfT (DBG_LT1, "__collector_thr_sigsetmask(%d) returning %d\n", how, ret);
+ return ret;
+}
+
+/*----------------------------------------------------------- pthread_sigmask */
+
+int
+pthread_sigmask (int how, const sigset_t* iset, sigset_t* oset)
+{
+ if (NULL_PTR (pthread_sigmask))
+ init_interposition_intf ();
+ TprintfT (DBG_LT1, "__collector_pthread_sigmask(%d) interposing\n", how);
+ sigset_t lsigset;
+ sigset_t* lset = NULL;
+ if (iset)
+ {
+ lsigset = *iset;
+ lset = &lsigset;
+ if ((how == SIG_BLOCK) || (how == SIG_SETMASK))
+ protect_profiling_signals (lset);
+ }
+ int ret = CALL_REAL (pthread_sigmask)(how, lset, oset);
+ TprintfT (DBG_LT1, "__collector_pthread_sigmask(%d) returning %d\n", how, ret);
+ return ret;
+}
+/*----------------------------------------------------------- pthread_create */
+typedef struct _CollectorArgs
+{
+ void *(*func)(void*);
+ void *arg;
+ void *stack;
+ int isPthread;
+} CollectorArgs;
+
+static void *
+collector_root (void *cargs)
+{
+ /* save the real arguments and free cargs */
+ void *(*func)(void*) = ((CollectorArgs*) cargs)->func;
+ void *arg = ((CollectorArgs*) cargs)->arg;
+ void *stack = ((CollectorArgs*) cargs)->stack;
+ int isPthread = ((CollectorArgs*) cargs)->isPthread;
+ __collector_freeCSize (__collector_heap, cargs, sizeof (CollectorArgs));
+
+ /* initialize tsd for this thread */
+ if (__collector_tsd_allocate () == 0)
+ /* init tsd for unwind, called right after __collector_tsd_allocate()*/
+ __collector_ext_unwind_key_init (isPthread, stack);
+
+ if (!isPthread)
+ __collector_mutex_lock (&collector_clone_libc_lock);
+
+ /* set the profile timer */
+ timer_t *timeridptr = __collector_tsd_get_by_key (dispatcher_key);
+ timer_t timerid = NULL;
+ if (timeridptr != NULL)
+ {
+ collector_timer_create (timeridptr);
+ if (*timeridptr != NULL)
+ collector_timer_settime (itimer_period_requested, *timeridptr);
+ timerid = *timeridptr;
+ }
+ int hwc_rc = __collector_ext_hwc_lwp_init ();
+
+ if (!isPthread)
+ __collector_mutex_unlock (&collector_clone_libc_lock);
+ /* call the real function */
+ void *ret = func (arg);
+ if (!isPthread)
+ __collector_mutex_lock (&collector_clone_libc_lock);
+ if (timerid != NULL)
+ CALL_REAL (timer_delete)(timerid);
+ if (!hwc_rc)
+ /* pthread_kill not handled here */
+ __collector_ext_hwc_lwp_fini ();
+
+ if (!isPthread)
+ __collector_mutex_unlock (&collector_clone_libc_lock);
+ /* if we have this chance, release tsd */
+ __collector_tsd_release ();
+
+ return ret;
+}
+
+// map interposed symbol versions
+#if ARCH(Intel) && WSIZE(32)
+static int
+__collector_pthread_create_symver (int(real_pthread_create) (),
+ pthread_t *thread,
+ const pthread_attr_t *attr,
+ void *(*func)(void*),
+ void *arg);
+
+SYMVER_ATTRIBUTE (__collector_pthread_create_2_1, pthread_create@@GLIBC_2.1)
+int
+__collector_pthread_create_2_1 (pthread_t *thread,
+ const pthread_attr_t *attr,
+ void *(*func)(void*),
+ void *arg)
+{
+ if (NULL_PTR (pthread_create))
+ init_interposition_intf ();
+ TprintfT (DBG_LTT, "dispatcher: GLIBC: __collector_pthread_create_2_1@%p\n", CALL_REAL (pthread_create_2_1));
+ return __collector_pthread_create_symver (CALL_REAL (pthread_create_2_1), thread, attr, func, arg);
+}
+
+SYMVER_ATTRIBUTE (__collector_pthread_create_2_0, pthread_create@GLIBC_2.0)
+int
+__collector_pthread_create_2_0 (pthread_t *thread,
+ const pthread_attr_t *attr,
+ void *(*func)(void*),
+ void *arg)
+{
+ if (NULL_PTR (pthread_create))
+ init_interposition_intf ();
+ TprintfT (DBG_LTT, "dispatcher: GLIBC: __collector_pthread_create_2_0@%p\n", CALL_REAL (pthread_create_2_0));
+ return __collector_pthread_create_symver (CALL_REAL (pthread_create_2_0), thread, attr, func, arg);
+}
+
+#endif
+
+#if ARCH(Intel) && WSIZE(32)
+static int
+__collector_pthread_create_symver (int(real_pthread_create) (),
+ pthread_t *thread,
+ const pthread_attr_t *attr,
+ void *(*func)(void*),
+ void *arg)
+#else
+int
+pthread_create (pthread_t *thread, const pthread_attr_t *attr,
+ void *(*func)(void*), void *arg)
+#endif
+{
+ if (NULL_PTR (pthread_create))
+ init_interposition_intf ();
+
+ TprintfT (DBG_LT1, "pthread_create interposition called\n");
+
+ if (dispatch_mode != DISPATCH_ON)
+ {
+#if ARCH(Intel) && WSIZE(32)
+ return (real_pthread_create) (thread, attr, func, arg);
+#else
+ return CALL_REAL (pthread_create)(thread, attr, func, arg);
+#endif
+ }
+ CollectorArgs *cargs = __collector_allocCSize (__collector_heap, sizeof (CollectorArgs), 1);
+
+ if (cargs == NULL)
+ {
+#if ARCH(Intel) && WSIZE(32)
+ return (real_pthread_create) (thread, attr, func, arg);
+#else
+ return CALL_REAL (pthread_create)(thread, attr, func, arg);
+#endif
+ }
+ cargs->func = func;
+ cargs->arg = arg;
+ cargs->stack = NULL;
+ cargs->isPthread = 1;
+ int ret = -1;
+#if ARCH(Intel) && WSIZE(32)
+ ret = (real_pthread_create) (thread, attr, &collector_root, cargs);
+#else
+ ret = CALL_REAL (pthread_create)(thread, attr, &collector_root, cargs);
+#endif
+ if (ret)
+ __collector_freeCSize (__collector_heap, cargs, sizeof (CollectorArgs));
+ TprintfT (DBG_LT1, "pthread_create returning %d\n", ret);
+ return ret;
+}
+
+int
+__collector_ext_clone_pthread (int (*fn)(void *), void *child_stack, int flags, void *arg,
+ va_list va /* pid_t *ptid, struct user_desc *tls, pid_t *" ctid" */)
+{
+ if (NULL_PTR (clone))
+ init_interposition_intf ();
+ TprintfT (0, "clone thread interposing\n");
+ pid_t * ptid = NULL;
+ struct user_desc * tls = NULL;
+ pid_t * ctid = NULL;
+ int num_args = 0;
+ if (flags & (CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID))
+ {
+ ptid = va_arg (va, pid_t *);
+ tls = va_arg (va, struct user_desc*);
+ ctid = va_arg (va, pid_t *);
+ num_args = 3;
+ }
+ else if (flags & CLONE_SETTLS)
+ {
+ ptid = va_arg (va, pid_t *);
+ tls = va_arg (va, struct user_desc*);
+ num_args = 2;
+ }
+ else if (flags & CLONE_PARENT_SETTID)
+ {
+ ptid = va_arg (va, pid_t *);
+ num_args = 1;
+ }
+ int ret = 0;
+ if (dispatch_mode != DISPATCH_ON)
+ {
+ switch (num_args)
+ {
+ case 3:
+ ret = CALL_REAL (clone)(fn, child_stack, flags, arg, ptid, tls, ctid);
+ break;
+ case 2:
+ ret = CALL_REAL (clone)(fn, child_stack, flags, arg, ptid, tls);
+ break;
+ case 1:
+ ret = CALL_REAL (clone)(fn, child_stack, flags, arg, ptid);
+ break;
+ default:
+ ret = CALL_REAL (clone)(fn, child_stack, flags, arg);
+ break;
+ }
+ return ret;
+ }
+ CollectorArgs *cargs = __collector_allocCSize (__collector_heap, sizeof (CollectorArgs), 1);
+ if (cargs == NULL)
+ {
+ switch (num_args)
+ {
+ case 3:
+ ret = CALL_REAL (clone)(fn, child_stack, flags, arg, ptid, tls, ctid);
+ break;
+ case 2:
+ ret = CALL_REAL (clone)(fn, child_stack, flags, arg, ptid, tls);
+ break;
+ case 1:
+ ret = CALL_REAL (clone)(fn, child_stack, flags, arg, ptid);
+ break;
+ default:
+ ret = CALL_REAL (clone)(fn, child_stack, flags, arg);
+ break;
+ }
+ return ret;
+ }
+
+ cargs->func = (void *(*)(void*))fn;
+ cargs->arg = arg;
+ cargs->stack = child_stack;
+ cargs->isPthread = 0;
+
+ switch (num_args)
+ {
+ case 3:
+ ret = CALL_REAL (clone)((int(*)(void*))collector_root, child_stack, flags, cargs, ptid, tls, ctid);
+ break;
+ case 2:
+ ret = CALL_REAL (clone)((int(*)(void*))collector_root, child_stack, flags, cargs, ptid, tls);
+ break;
+ case 1:
+ ret = CALL_REAL (clone)((int(*)(void*))collector_root, child_stack, flags, cargs, ptid);
+ break;
+ default:
+ ret = CALL_REAL (clone)((int(*)(void*))collector_root, child_stack, flags, cargs);
+ break;
+ }
+
+ if (ret < 0)
+ __collector_freeCSize (__collector_heap, cargs, sizeof (CollectorArgs));
+ TprintfT (DBG_LT1, "clone thread returning %d\n", ret);
+ return ret;
+}
+
+// weak symbols:
+int sigprocmask () __attribute__ ((weak, alias ("__collector_sigprocmask")));
+int thr_sigsetmask () __attribute__ ((weak, alias ("__collector_thr_sigsetmask")));
+int setitimer () __attribute__ ((weak, alias ("_setitimer")));
diff --git a/gprofng/libcollector/envmgmt.c b/gprofng/libcollector/envmgmt.c
new file mode 100644
index 00000000000..b4418d6eb68
--- /dev/null
+++ b/gprofng/libcollector/envmgmt.c
@@ -0,0 +1,840 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+/*
+ * Routines for managing the target's environment array
+ */
+
+#include "config.h"
+#include "descendants.h"
+
+#define MAX_LD_PRELOADS 2
+
+/* TprintfT(<level>,...) definitions. Adjust per module as needed */
+#define DBG_LT0 0 // for high-level configuration, unexpected errors/warnings
+#define DBG_LT1 1 // for configuration details, warnings
+#define DBG_LT2 2
+#define DBG_LT3 3
+#define DBG_LT4 4
+
+/* original environment settings to be saved for later restoration */
+static char *sp_preloads[MAX_LD_PRELOADS];
+static char *sp_libpaths[MAX_LD_PRELOADS];
+char **sp_env_backup;
+
+static const char *SP_ENV[];
+static const char *LD_ENV[];
+static const char *SP_PRELOAD[];
+static const char *LD_PRELOAD[];
+static const char *SP_LIBRARY_PATH[];
+static const char *LD_LIBRARY_PATH[];
+static int NUM_SP_ENV_VARS;
+static int NUM_LD_ENV_VARS;
+static int NUM_SP_PRELOADS;
+static int NUM_LD_PRELOADS;
+static int NUM_SP_LIBPATHS;
+static int NUM_LD_LIBPATHS;
+
+static const char *SP_ENV[] = {
+ SP_COLLECTOR_PARAMS, /* data descriptor */
+ SP_COLLECTOR_EXPNAME, /* experiment name */
+ SP_COLLECTOR_FOLLOW_SPEC, /* linetrace */
+ SP_COLLECTOR_FOUNDER, /* determine founder exp */
+ SP_PRELOAD_STRINGS, /* LD_PRELOADs for data collection */
+ SP_LIBPATH_STRINGS, /* LD_LIBRARY_PATHs for data collection */
+ "SP_COLLECTOR_TRACELEVEL", /* tprintf */
+#if DEBUG
+ "SP_COLLECTOR_SIGACTION", /* dispatcher, hwprofile */
+#endif
+ /* JAVA* */
+ /* LD_DEBUG=audit,bindings,detail */
+ /* LD_ORIGIN=yes */
+ NULL
+};
+
+static const char *LD_ENV[] = {
+ LD_PRELOAD_STRINGS, /* LD_PRELOADs */
+ LD_LIBPATH_STRINGS, /* LD_LIBRARY_PATHs */
+ JAVA_TOOL_OPTIONS, /* enable -agentlib:collector for JVMTI */
+ NULL
+};
+
+static const char *SP_PRELOAD[] = {
+ SP_PRELOAD_STRINGS,
+ NULL
+};
+
+static const char *LD_PRELOAD[] = {
+ LD_PRELOAD_STRINGS,
+ NULL
+};
+
+static const char *SP_LIBRARY_PATH[] = {
+ SP_LIBPATH_STRINGS,
+ NULL
+};
+static const char *LD_LIBRARY_PATH[] = {
+ LD_LIBPATH_STRINGS,
+ NULL
+};
+
+void
+__collector_env_save_preloads ()
+{
+ /* save the list of SP_PRELOADs */
+ int v;
+ for (v = 0; SP_PRELOAD[v]; v++)
+ {
+ sp_preloads[v] = __collector_strdup (CALL_UTIL (getenv)(SP_PRELOAD[v]));
+ TprintfT (DBG_LT3, "__collector_env_save_preloads: %s=%s\n", SP_PRELOAD[v], sp_preloads[v]);
+ }
+ NUM_SP_PRELOADS = v;
+ for (v = 0; SP_LIBRARY_PATH[v]; v++)
+ {
+ sp_libpaths[v] = __collector_strdup (CALL_UTIL (getenv)(SP_LIBRARY_PATH[v]));
+ TprintfT (DBG_LT4, "__collector_env_save_preloads: %s=%s\n", SP_LIBRARY_PATH[v],
+ sp_libpaths[v] ? sp_libpaths[v] : "NULL");
+ }
+ NUM_SP_LIBPATHS = v;
+ for (v = 0; LD_PRELOAD[v]; v++)
+ ;
+ NUM_LD_PRELOADS = v;
+ for (v = 0; LD_LIBRARY_PATH[v]; v++)
+ ;
+ NUM_LD_LIBPATHS = v;
+ for (v = 0; SP_ENV[v]; v++)
+ ;
+ NUM_SP_ENV_VARS = v;
+ for (v = 0; LD_ENV[v]; v++)
+ ;
+ NUM_LD_ENV_VARS = v;
+}
+
+/* free the memory involved in backing up the environment */
+void
+__collector_env_backup_free ()
+{
+ int v = 0;
+ TprintfT (DBG_LT2, "env_backup_free()\n");
+ for (v = 0; sp_env_backup[v]; v++)
+ {
+ TprintfT (DBG_LT2, "env_backup_free():sp_env_backup[%d]=%s \n", v, sp_env_backup[v]);
+ __collector_freeCSize (__collector_heap, (char *) sp_env_backup[v], __collector_strlen (sp_env_backup[v]) + 1);
+ }
+ __collector_freeCSize (__collector_heap, (char**) sp_env_backup,
+ (NUM_SP_ENV_VARS + NUM_LD_ENV_VARS + 1) * sizeof (char*));
+}
+
+char **
+__collector_env_backup ()
+{
+ TprintfT (DBG_LT2, "env_backup_()\n");
+ char **backup = __collector_env_allocate (NULL, 1);
+ __collector_env_update (backup);
+ TprintfT (DBG_LT2, "env_backup_()\n");
+ return backup;
+}
+
+/*
+ function: env_prepend()
+ given an <old_str>, check to see if <str>
+ is already defined by it. If not, allocate
+ a new string and concat <envvar>=<str><separator><old_str>
+ params:
+ old_str: original string
+ str: substring to prepend
+ return: pointer to updated string or NULL if string was not updated.
+ */
+static char *
+env_prepend (const char *envvar, const char *str, const char *separator,
+ const char *old_str)
+{
+ if (!envvar || *envvar == 0 || !str || *str == 0)
+ {
+ /* nothing to do */
+ TprintfT (DBG_LT2, "env_prepend(\"%s\", \"%s\", \"%s\", \"%s\") -- nothing to do\n",
+ envvar, str, separator, old_str);
+
+ return NULL;
+ }
+ TprintfT (DBG_LT2, "env_prepend(\"%s\", \"%s\", \"%s\", \"%s\")\n",
+ envvar, str, separator, old_str);
+ char *ev;
+ size_t strsz;
+ if (!old_str || *old_str == 0)
+ {
+ strsz = __collector_strlen (envvar) + 1 + __collector_strlen (str) + 1;
+ ev = (char*) __collector_allocCSize (__collector_heap, strsz, 1);
+ if (ev)
+ {
+ CALL_UTIL (snprintf)(ev, strsz, "%s=%s", envvar, str);
+ assert (__collector_strlen (ev) + 1 == strsz);
+ }
+ else
+ TprintfT (DBG_LT2, "env_prepend(): could not allocate memory\n");
+ }
+ else
+ {
+ char *p = CALL_UTIL (strstr)(old_str, str);
+ if (p)
+ {
+ TprintfT (DBG_LT2, "env_prepend(): %s=%s was already set\n",
+ envvar, old_str);
+ return NULL;
+ }
+ strsz = __collector_strlen (envvar) + 1 + __collector_strlen (str) +
+ __collector_strlen (separator) + __collector_strlen (old_str) + 1;
+ ev = (char*) __collector_allocCSize (__collector_heap, strsz, 1);
+ if (ev)
+ {
+ CALL_UTIL (snprintf)(ev, strsz, "%s=%s%s%s", envvar, str, separator, old_str);
+ assert (__collector_strlen (ev) + 1 == strsz);
+ }
+ else
+ TprintfT (DBG_LT2, "env_prepend(): could not allocate memory\n");
+ }
+ TprintfT (DBG_LT2, "env_prepend(\"%s\", \"%s\", \"%s\", \"%s\") returns \"%s\"\n",
+ envvar, str, separator, old_str, (ev == NULL ? "NULL" : ev));
+ return ev;
+}
+
+/*
+ function: putenv_prepend()
+ get environment variable <envvar>, check to see if <str>
+ is already defined by it. If not prepend <str>
+ and put it back to environment.
+ params:
+ envvar: environment variable
+ str: substring to find
+ return: 0==success, nonzero on failure.
+ */
+int
+putenv_prepend (const char *envvar, const char *str, const char *separator)
+{
+ if (!envvar || *envvar == 0)
+ return 1;
+ const char * old_str = CALL_UTIL (getenv)(envvar);
+ char * newstr = env_prepend (envvar, str, separator, old_str);
+ if (newstr)
+ // now put the new variable into the environment
+ if (CALL_UTIL (putenv)(newstr) != 0)
+ {
+ TprintfT (DBG_LT2, "putenv_prepend(): ERROR %s is not set!\n", newstr);
+ return 1;
+ }
+ return 0;
+}
+
+/*
+ function: env_strip()
+ Finds substr in origstr; Removes
+ all characters from previous ':' or ' '
+ up to and including any trailing ':' or ' '.
+ params:
+ env: environment variable contents
+ str: substring to find
+ return: count of instances removed from env
+ */
+static int
+env_strip (char *origstr, const char *substr)
+{
+ int removed = 0;
+ char *p, *q;
+ if (origstr == NULL || substr == NULL || *substr == 0)
+ return 0;
+ while ((p = q = CALL_UTIL (strstr)(origstr, substr)))
+ {
+ p += __collector_strlen (substr);
+ while (*p == ':' || *p == ' ') /* strip trailing separator */
+ p++;
+ while (*q != ':' && *q != ' ' && *q != '=' && q != origstr) /* strip path */
+ q--;
+ if (q != origstr) /* restore leading separator (if any) */
+ q++;
+ __collector_strlcpy (q, p, __collector_strlen (p) + 1);
+ removed++;
+ }
+ return removed;
+}
+
+/*
+ function: env_ld_preload_strip()
+ Removes known libcollector shared objects from envv.
+ params:
+ var: shared object name (leading characters don't have to match)
+ return: 0 = so's removed, non-zero = so's not found.
+ */
+static int
+env_ld_preload_strip (char *envv)
+{
+ if (!envv || *envv == 0)
+ {
+ TprintfT (DBG_LT2, "env_ld_preload_strip(): WARNING - envv is NULL\n");
+ return -1;
+ }
+ for (int v = 0; SP_PRELOAD[v]; v++)
+ if (env_strip (envv, sp_preloads[v]))
+ return 0;
+ if (line_mode != LM_CLOSED)
+ TprintfT (DBG_LT2, "env_ld_preload_strip(): WARNING - could not strip SP_PRELOADS from '%s'\n",
+ envv);
+ return -2;
+}
+
+void
+__collector_env_print (char * label)
+{
+#if DEBUG
+ TprintfT (DBG_LT2, "__collector_env_print(%s)\n", label);
+ for (int v = 0; v < MAX_LD_PRELOADS; v++)
+ TprintfT (DBG_LT2, " %s sp_preloads[%d] (0x%p)=%s\n", label,
+ v, sp_preloads[v], (sp_preloads[v] == NULL ? "NULL" : sp_preloads[v]));
+ for (int v = 0; SP_ENV[v]; v++)
+ {
+ char *s = CALL_UTIL (getenv)(SP_ENV[v]);
+ if (s == NULL)
+ s = "<null>";
+ TprintfT (DBG_LT2, " %s SP_ENV[%d] (0x%p): %s=\"%s\"\n", label, v, SP_ENV[v], SP_ENV[v], s);
+ }
+ for (int v = 0; LD_ENV[v]; v++)
+ {
+ char *s = CALL_UTIL (getenv)(LD_ENV[v]);
+ if (s == NULL)
+ s = "<null>";
+ TprintfT (DBG_LT2, " %s LD_ENV[%d] (0x%p): %s=\"%s\"\n", label, v, LD_ENV[v], LD_ENV[v], s);
+ }
+#endif
+}
+
+void
+__collector_env_printall (char *label, char *envp[])
+{
+#if DEBUG
+ TprintfT (DBG_LT2, "__collector_env_printall(%s): environment @ 0x%p\n", label, envp);
+ for (int i = 0; envp[i]; i++)
+ Tprintf (DBG_LT2, "\tenv[%d]@0x%p == %s\n", i, envp[i], envp[i]);
+#endif
+}
+
+/* match collector environment variable */
+int
+env_match (char *envp[], const char *envvar)
+{
+ int match = -1;
+ if (envp == NULL)
+ TprintfT (DBG_LT1, "env_match(%s): NULL envp!\n", envvar);
+ else
+ {
+ int i = 0;
+ while ((envp[i] != NULL) && (__collector_strStartWith (envp[i], envvar)))
+ i++;
+ if ((envp[i] == NULL) || (envp[i][__collector_strlen (envvar)] != '='))
+ TprintfT (DBG_LT4, "env_match(): @%p []%s not defined in envp\n", envp, envvar);
+ else
+ {
+ TprintfT (DBG_LT4, "env_match(): @%p [%d]%s defined in envp\n", envp, i, envp[i]);
+ match = i;
+ }
+ }
+ TprintfT (DBG_LT1, "env_match(%s): found in slot %d\n", envvar, match);
+ return (match);
+}
+
+/* allocate new environment with collector variables */
+/* 1) copy all current envp[] ptrs into a new array, coll_env[] */
+/* 2) if collector-related env ptrs not in envp[], append them to coll_env */
+/* from processes' "environ" (allocate_env==1) */
+/* or from sp_env_backup (allocate_env==0)*/
+/* If they already exist in envp, probably is an error... */
+/* 3) return coll_env */
+
+/* __collector__env_update() need be called after this to set LD_ENV*/
+char **
+__collector_env_allocate (char *const old_env[], int allocate_env)
+{
+ extern char **environ; /* the process' actual environment */
+ char **new_env; /* a new environment for collection */
+ TprintfT (DBG_LT3, "__collector_env_allocate(old_env=0x%p %s environ=0x%p)\n",
+ old_env, (old_env == environ) ? "==" : "!=", environ);
+ /* set up a copy of the provided old_env for collector use */
+ int old_env_size = 0;
+
+ /* determine number of (used) slots in old_env */
+ if (old_env)
+ while (old_env[old_env_size] != NULL)
+ old_env_size++;
+ /* allocate a new vector with additional slots */
+ int new_env_alloc_sz = old_env_size + NUM_SP_ENV_VARS + NUM_LD_ENV_VARS + 1;
+ new_env = (char**) __collector_allocCSize (__collector_heap, new_env_alloc_sz * sizeof (char*), 1);
+ if (new_env == NULL)
+ return NULL;
+ TprintfT (DBG_LT4, "__collector_env_allocate(): old_env has %d entries, new_env @ 0x%p\n", old_env_size, new_env);
+
+ /* copy provided old_env pointers to new collector environment */
+ int new_env_size = 0;
+ for (new_env_size = 0; new_env_size < old_env_size; new_env_size++)
+ new_env[new_env_size] = old_env[new_env_size];
+
+ /* check each required environment variable, adding as required */
+ const char * env_var;
+ int v;
+ for (v = 0; (env_var = SP_ENV[v]) != NULL; v++)
+ {
+ if (env_match ((char**) old_env, env_var) == -1)
+ {
+ int idx;
+ /* not found in old_env */
+ if (allocate_env)
+ {
+ if ((idx = env_match (environ, env_var)) != -1)
+ {
+ /* found in environ */
+ TprintfT (DBG_LT4, "__collector_env_allocate(): [%d]%s env restored!\n",
+ new_env_size, environ[idx]);
+ int varsz = __collector_strlen (environ[idx]) + 1;
+ char * var = (char*) __collector_allocCSize (__collector_heap, varsz, 1);
+ if (var == NULL)
+ return NULL;
+ __collector_strlcpy (var, environ[idx], varsz);
+ new_env[new_env_size++] = var;
+ }
+ else
+ {
+ /* not found in environ */
+ if ((__collector_strcmp (env_var, SP_COLLECTOR_PARAMS) == 0) ||
+ (__collector_strcmp (env_var, SP_COLLECTOR_EXPNAME) == 0))
+ TprintfT (DBG_LT1, "__collector_env_allocate(): note: %s environment variable not found\n",
+ env_var);
+ }
+ }
+ else
+ {
+ if ((idx = env_match (sp_env_backup, env_var)) != -1)
+ {
+ /* found in backup */
+ TprintfT (DBG_LT4, "__collector_env_allocate(): [%d]%s env restored!\n",
+ new_env_size, sp_env_backup[idx]);
+ new_env[new_env_size++] = sp_env_backup[idx];
+ }
+ else
+ {
+ /* not found in environ */
+ if ((__collector_strcmp (env_var, SP_COLLECTOR_PARAMS) == 0) ||
+ (__collector_strcmp (env_var, SP_COLLECTOR_EXPNAME) == 0))
+ TprintfT (DBG_LT1, "__collector_env_allocate(): note: %s environment variable not found\n",
+ env_var);
+ }
+ }
+ }
+ }
+
+ for (v = 0; (env_var = LD_ENV[v]) != NULL; v++)
+ {
+ if (env_match ((char**) old_env, env_var) == -1)
+ {
+ int idx;
+ /* not found in old_env */
+ if (allocate_env)
+ {
+ if ((idx = env_match (environ, env_var)) != -1)
+ {
+ /* found in environ */
+ TprintfT (DBG_LT4, "__collector_env_allocate(): [%d]%s env restored!\n",
+ new_env_size, environ[idx]);
+
+ int varsz = __collector_strlen (env_var) + 2;
+ char * var = (char*) __collector_allocCSize (__collector_heap, varsz, 1);
+ if (var == NULL)
+ return NULL;
+ // assume __collector_env_update() will fill content of env_var
+ CALL_UTIL (snprintf)(var, varsz, "%s=", env_var);
+ new_env[new_env_size++] = var;
+ }
+ }
+ else
+ {
+ if ((idx = env_match (sp_env_backup, env_var)) != -1)
+ {
+ /* found in backup */
+ TprintfT (DBG_LT4, "__collector_env_allocate(): [%d]%s env restored!\n",
+ new_env_size, sp_env_backup[idx]);
+ new_env[new_env_size++] = sp_env_backup[idx];
+ }
+ }
+ }
+ }
+
+ /* ensure new_env vector ends with NULL */
+ new_env[new_env_size] = NULL;
+ assert (new_env_size <= new_env_alloc_sz);
+ TprintfT (DBG_LT4, "__collector_env_allocate(): new_env has %d entries (%d added), new_env=0x%p\n",
+ new_env_size, new_env_size - old_env_size, new_env);
+ if (new_env_size != old_env_size && !allocate_env)
+ __collector_log_write ("<event kind=\"%s\" id=\"%d\">%d</event>\n",
+ SP_JCMD_CWARN, COL_WARN_EXECENV, new_env_size - old_env_size);
+ __collector_env_printall ("__collector_env_allocate", new_env);
+ return (new_env);
+}
+
+/* unset collection environment variables */
+/* if they exist in env... */
+/* 1) push non-collectorized version to env */
+
+/* Not mt safe */
+void
+__collector_env_unset (char *envp[])
+{
+ int v;
+ const char * env_name;
+ TprintfT (DBG_LT3, "env_unset(envp=0x%p)\n", envp);
+ if (envp == NULL)
+ {
+ for (v = 0; (env_name = LD_PRELOAD[v]); v++)
+ {
+ const char *env_val = CALL_UTIL (getenv)(env_name);
+ if (env_val && CALL_UTIL (strstr)(env_val, sp_preloads[v]))
+ {
+ size_t sz = __collector_strlen (env_name) + 1 + __collector_strlen (env_val) + 1;
+ char * ev = (char*) __collector_allocCSize (__collector_heap, sz, 1);
+ if (ev == NULL)
+ return;
+ CALL_UTIL (snprintf)(ev, sz, "%s=%s", env_name, env_val);
+ assert (__collector_strlen (ev) + 1 == sz);
+ TprintfT (DBG_LT4, "env_unset(): old %s\n", ev);
+ env_ld_preload_strip (ev);
+ CALL_UTIL (putenv)(ev);
+ TprintfT (DBG_LT4, "env_unset(): new %s\n", ev);
+ }
+ }
+ // unset JAVA_TOOL_OPTIONS
+ env_name = JAVA_TOOL_OPTIONS;
+ const char * env_val = CALL_UTIL (getenv)(env_name);
+ if (env_val && CALL_UTIL (strstr)(env_val, COLLECTOR_JVMTI_OPTION))
+ {
+ size_t sz = __collector_strlen (env_name) + 1 + __collector_strlen (env_val) + 1;
+ char * ev = (char*) __collector_allocCSize (__collector_heap, sz, 1);
+ if (ev == NULL)
+ return;
+ CALL_UTIL (snprintf)(ev, sz, "%s=%s", env_name, env_val);
+ assert (__collector_strlen (ev) + 1 == sz);
+ TprintfT (DBG_LT4, "env_unset(): old %s\n", ev);
+ env_strip (ev, COLLECTOR_JVMTI_OPTION);
+ CALL_UTIL (putenv)(ev);
+ TprintfT (DBG_LT4, "env_unset(): new %s\n", ev);
+ }
+ __collector_env_print ("__collector_env_unset");
+ }
+ else
+ {
+ __collector_env_printall ("__collector_env_unset, before", envp);
+ for (v = 0; (env_name = LD_PRELOAD[v]); v++)
+ {
+ int idx = env_match (envp, env_name);
+ if (idx != -1)
+ {
+ char *env_val = envp[idx];
+ TprintfT (DBG_LT4, "env_unset(): old %s\n", env_val);
+ envp[idx] = "junk="; /* xxxx is it ok to use original string? */
+ env_ld_preload_strip (env_val);
+ envp[idx] = env_val;
+ TprintfT (DBG_LT4, "env_unset(): new %s\n", envp[idx]);
+ }
+ }
+ // unset JAVA_TOOL_OPTIONS
+ env_name = JAVA_TOOL_OPTIONS;
+ int idx = env_match(envp, env_name);
+ if (idx != -1) {
+ char *env_val = envp[idx];
+ TprintfT(DBG_LT4, "env_unset(): old %s\n", env_val);
+ envp[idx] = "junk="; /* xxxx is it ok to use original string? */
+ env_strip(env_val, COLLECTOR_JVMTI_OPTION);
+ envp[idx] = env_val;
+ TprintfT(DBG_LT4, "env_unset(): new %s\n", envp[idx]);
+ }
+ __collector_env_printall ("__collector_env_unset, after", envp );
+ }
+}
+
+/* update collection environment variables */
+/* update LD_PRELOADs and push them */
+/* not mt safe */
+void
+__collector_env_update (char *envp[])
+{
+ const char *env_name;
+ TprintfT (DBG_LT1, "__collector_env_update(envp=0x%p)\n", envp);
+ extern char **environ;
+ if (envp == NULL)
+ {
+ int v;
+ TprintfT (DBG_LT2, "__collector_env_update(envp=NULL)\n");
+ __collector_env_printall (" environ array, before", environ);
+ __collector_env_print (" env_update at entry ");
+
+ /* SP_ENV */
+ for (v = 0; (env_name = SP_ENV[v]) != NULL; v++)
+ {
+ if (env_match (environ, env_name) == -1)
+ {
+ int idx;
+ if ((idx = env_match (sp_env_backup, env_name)) != -1)
+ {
+ unsigned strsz = __collector_strlen (sp_env_backup[idx]) + 1;
+ char *ev = (char*) __collector_allocCSize (__collector_heap, strsz, 1);
+ CALL_UTIL (snprintf)(ev, strsz, "%s", sp_env_backup[idx]);
+ if (CALL_UTIL (putenv)(ev) != 0)
+ TprintfT (DBG_LT2, "__collector_env_update(): ERROR %s is not set!\n",
+ sp_env_backup[idx]);
+ }
+ }
+ }
+ __collector_env_print (" env_update after SP_ENV settings ");
+
+ /* LD_LIBRARY_PATH */
+ for (v = 0; (env_name = LD_LIBRARY_PATH[v]); v++)
+ /* assumes same index used between LD and SP vars */
+ if (putenv_prepend (env_name, sp_libpaths[v], ":"))
+ TprintfT (DBG_LT2, "collector: ERROR %s=%s could not be set\n",
+ env_name, sp_libpaths[v]);
+ __collector_env_print (" env_update after LD_LIBRARY_PATH settings ");
+
+ /* LD_PRELOAD */
+ for (v = 0; (env_name = LD_PRELOAD[v]); v++)
+ /* assumes same index used between LD and SP vars */
+ if (putenv_prepend (env_name, sp_preloads[v], " "))
+ TprintfT (DBG_LT2, "collector: ERROR %s=%s could not be set\n",
+ env_name, sp_preloads[v]);
+ __collector_env_print (" env_update after LD_PRELOAD settings ");
+
+ /* JAVA_TOOL_OPTIONS */
+ if (java_mode)
+ if (putenv_prepend (JAVA_TOOL_OPTIONS, COLLECTOR_JVMTI_OPTION, " "))
+ TprintfT (DBG_LT2, "collector: ERROR %s=%s could not be set\n",
+ JAVA_TOOL_OPTIONS, COLLECTOR_JVMTI_OPTION);
+ __collector_env_print (" env_update after JAVA_TOOL settings ");
+ }
+ else
+ {
+ int v;
+ int idx;
+ TprintfT (DBG_LT2, "__collector_env_update(envp=0x%p) not NULL\n", envp);
+ __collector_env_printall ("__collector_env_update, before", envp);
+ /* LD_LIBRARY_PATH */
+ for (v = 0; (env_name = LD_LIBRARY_PATH[v]); v++)
+ {
+ int idx = env_match (envp, env_name);
+ if (idx != -1)
+ {
+ char *env_val = __collector_strchr (envp[idx], '=');
+ if (env_val)
+ env_val++; /* skip '=' */
+ /* assumes same index used between LD and SP vars */
+ char *new_str = env_prepend (env_name, sp_libpaths[v],
+ ":", env_val);
+ if (new_str)
+ envp[idx] = new_str;
+ }
+ }
+
+ /* LD_PRELOAD */
+ for (v = 0; (env_name = LD_PRELOAD[v]); v++)
+ {
+ int idx = env_match (envp, env_name);
+ if (idx != -1)
+ {
+ char *env_val = __collector_strchr (envp[idx], '=');
+ if (env_val)
+ env_val++; /* skip '=' */
+ /* assumes same index used between LD and SP vars */
+ char *new_str = env_prepend (env_name, sp_preloads[v],
+ " ", env_val);
+ if (new_str)
+ envp[idx] = new_str;
+ }
+ }
+
+ /* JAVA_TOOL_OPTIONS */
+ if (java_mode)
+ {
+ env_name = JAVA_TOOL_OPTIONS;
+ idx = env_match (envp, env_name);
+ if (idx != -1)
+ {
+ char *env_val = __collector_strchr (envp[idx], '=');
+ if (env_val)
+ env_val++; /* skip '=' */
+ char *new_str = env_prepend (env_name, COLLECTOR_JVMTI_OPTION,
+ " ", env_val);
+ if (new_str)
+ envp[idx] = new_str;
+ }
+ }
+ }
+ __collector_env_printall ("__collector_env_update, after", environ);
+}
+
+
+/*------------------------------------------------------------- putenv */
+int putenv () __attribute__ ((weak, alias ("__collector_putenv")));
+int _putenv () __attribute__ ((weak, alias ("__collector_putenv")));
+
+int
+__collector_putenv (char * string)
+{
+ if (CALL_UTIL (putenv) == __collector_putenv ||
+ CALL_UTIL (putenv) == NULL)
+ { // __collector_libc_funcs_init failed
+ CALL_UTIL (putenv) = (int(*)())dlsym (RTLD_NEXT, "putenv");
+ if (CALL_UTIL (putenv) == NULL || CALL_UTIL (putenv) == __collector_putenv)
+ CALL_UTIL (putenv) = (int(*)())dlsym (RTLD_DEFAULT, "putenv");
+ if (CALL_UTIL (putenv) == NULL || CALL_UTIL (putenv) == __collector_putenv)
+ {
+ TprintfT (DBG_LT2, "__collector_putenv(): ERROR: no pointer found.\n");
+ errno = EBUSY;
+ return -1;
+ }
+ }
+ if (user_follow_mode == FOLLOW_NONE)
+ return CALL_UTIL (putenv)(string);
+ char * envp[] = {string, NULL};
+ __collector_env_update (envp);
+ return CALL_UTIL (putenv)(envp[0]);
+}
+
+/*------------------------------------------------------------- setenv */
+int setenv () __attribute__ ((weak, alias ("__collector_setenv")));
+int _setenv () __attribute__ ((weak, alias ("__collector_setenv")));
+
+int
+__collector_setenv (const char *name, const char *value, int overwrite)
+{
+ if (CALL_UTIL (setenv) == __collector_setenv ||
+ CALL_UTIL (setenv) == NULL)
+ { // __collector_libc_funcs_init failed
+ CALL_UTIL (setenv) = (int(*)())dlsym (RTLD_NEXT, "setenv");
+ if (CALL_UTIL (setenv) == NULL || CALL_UTIL (setenv) == __collector_setenv)
+ CALL_UTIL (setenv) = (int(*)())dlsym (RTLD_DEFAULT, "setenv");
+ if (CALL_UTIL (setenv) == NULL || CALL_UTIL (setenv) == __collector_setenv)
+ {
+ TprintfT (DBG_LT2, "__collector_setenv(): ERROR: no pointer found.\n");
+ errno = EBUSY;
+ return -1;
+ }
+ }
+ if (user_follow_mode == FOLLOW_NONE || !overwrite)
+ return CALL_UTIL (setenv)(name, value, overwrite);
+ size_t sz = __collector_strlen (name) + 1 + __collector_strlen (value) + 1;
+ char *ev = (char*) __collector_allocCSize (__collector_heap, sz, 1);
+ if (ev == NULL)
+ return CALL_UTIL (setenv)(name, value, overwrite);
+ CALL_UTIL (snprintf)(ev, sz, "%s=%s", name, value);
+ char * envp[] = {ev, NULL};
+ __collector_env_update (envp);
+ if (envp[0] == ev)
+ {
+ __collector_freeCSize (__collector_heap, ev, sz);
+ return CALL_UTIL (setenv)(name, value, overwrite);
+ }
+ else
+ {
+ char *env_val = __collector_strchr (envp[0], '=');
+ if (env_val)
+ {
+ *env_val = '\0';
+ env_val++; /* skip '=' */
+ }
+ return CALL_UTIL (setenv)(envp[0], env_val, overwrite);
+ }
+}
+
+/*------------------------------------------------------------- unsetenv */
+int unsetenv () __attribute__ ((weak, alias ("__collector_unsetenv")));
+int _unsetenv () __attribute__ ((weak, alias ("__collector_unsetenv")));
+
+int
+__collector_unsetenv (const char *name)
+{
+ if (CALL_UTIL (unsetenv) == __collector_unsetenv ||
+ CALL_UTIL (unsetenv) == NULL)
+ { // __collector_libc_funcs_init failed
+ CALL_UTIL (unsetenv) = (int(*)())dlsym (RTLD_NEXT, "unsetenv");
+ if (CALL_UTIL (unsetenv) == NULL || CALL_UTIL (unsetenv) == __collector_unsetenv)
+ CALL_UTIL (unsetenv) = (int(*)())dlsym (RTLD_DEFAULT, "unsetenv");
+ if (CALL_UTIL (unsetenv) == NULL || CALL_UTIL (unsetenv) == __collector_unsetenv)
+ {
+ TprintfT (DBG_LT2, "__collector_unsetenv(): ERROR: no pointer found.\n");
+ errno = EBUSY;
+ return -1;
+ }
+ }
+ int ret = CALL_UTIL (unsetenv)(name);
+ if (user_follow_mode == FOLLOW_NONE)
+ return ret;
+ TprintfT (DBG_LT2, "__collector_unsetenv(): %d.\n", user_follow_mode);
+ size_t sz = __collector_strlen (name) + 1 + 1;
+ char *ev = (char*) __collector_allocCSize (__collector_heap, sz, 1);
+ if (ev == NULL)
+ return ret;
+ CALL_UTIL (snprintf)(ev, sz, "%s=", name);
+ char * envp[] = {ev, NULL};
+ __collector_env_update (envp);
+ if (envp[0] == ev)
+ __collector_freeCSize (__collector_heap, ev, sz);
+ else
+ CALL_UTIL (putenv)(envp[0]);
+ return ret;
+}
+
+/*------------------------------------------------------------- clearenv */
+int clearenv () __attribute__ ((weak, alias ("__collector_clearenv")));
+
+int
+__collector_clearenv (void)
+{
+ if (CALL_UTIL (clearenv) == __collector_clearenv || CALL_UTIL (clearenv) == NULL)
+ {
+ /* __collector_libc_funcs_init failed; look up clearenv now */
+ CALL_UTIL (clearenv) = (int(*)())dlsym (RTLD_NEXT, "clearenv");
+ if (CALL_UTIL (clearenv) == NULL || CALL_UTIL (clearenv) == __collector_clearenv)
+ /* still not found; try again */
+ CALL_UTIL (clearenv) = (int(*)())dlsym (RTLD_DEFAULT, "clearenv");
+ if (CALL_UTIL (clearenv) == NULL || CALL_UTIL (clearenv) == __collector_clearenv)
+ {
+ /* still not found -- a fatal error */
+ TprintfT (DBG_LT2, "__collector_clearenv(): ERROR: %s\n", dlerror ());
+ CALL_UTIL (fprintf)(stderr, "__collector_clearenv(): ERROR: %s\n", dlerror ());
+ errno = EBUSY;
+ return -1;
+ }
+ }
+ int ret = CALL_UTIL (clearenv)();
+ if (user_follow_mode == FOLLOW_NONE)
+ return ret;
+ if (sp_env_backup == NULL)
+ {
+ TprintfT (DBG_LT2, "__collector_clearenv: ERROR sp_env_backup is not set!\n");
+ return ret;
+ }
+ for (int v = 0; v < NUM_SP_ENV_VARS + NUM_LD_ENV_VARS; v++)
+ if (sp_env_backup[v] && CALL_UTIL (putenv)(sp_env_backup[v]) != 0)
+ TprintfT (DBG_LT2, "__collector_clearenv: ERROR %s is not set!\n",
+ sp_env_backup[v]);
+ return ret;
+}
diff --git a/gprofng/libcollector/gethrtime.c b/gprofng/libcollector/gethrtime.c
new file mode 100644
index 00000000000..002de7c77ba
--- /dev/null
+++ b/gprofng/libcollector/gethrtime.c
@@ -0,0 +1,46 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <time.h>
+#include "gp-time.h"
+
+/* CLOCK_MONOTONIC
+ Clock that cannot be set and represents monotonic time since some
+ unspecified starting point. */
+
+static hrtime_t
+linux_gethrtime (void)
+{
+ struct timespec tp;
+ hrtime_t rc = 0;
+
+#ifdef CLOCK_MONOTONIC_RAW
+ int r = clock_gettime (CLOCK_MONOTONIC_RAW, &tp);
+#else
+ int r = clock_gettime (CLOCK_MONOTONIC, &tp);
+#endif
+
+ if (r == 0)
+ rc = ((hrtime_t) tp.tv_sec)*1000000000 + (hrtime_t) tp.tv_nsec;
+ return rc;
+}
+
+hrtime_t (*__collector_gethrtime)() = linux_gethrtime;
diff --git a/gprofng/libcollector/heaptrace.c b/gprofng/libcollector/heaptrace.c
new file mode 100644
index 00000000000..470a269064f
--- /dev/null
+++ b/gprofng/libcollector/heaptrace.c
@@ -0,0 +1,503 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+/*
+ * Heap tracing events
+ */
+
+#include "config.h"
+#include <dlfcn.h>
+
+#include "gp-defs.h"
+#include "collector_module.h"
+#include "gp-experiment.h"
+#include "data_pckts.h"
+#include "tsd.h"
+
+/* TprintfT(<level>,...) definitions. Adjust per module as needed */
+#define DBG_LT0 0 // for high-level configuration, unexpected errors/warnings
+#define DBG_LT1 1 // for configuration details, warnings
+#define DBG_LT2 2
+#define DBG_LT3 3
+#define DBG_LT4 4
+
+/* define the packets to be written out */
+typedef struct Heap_packet
+{ /* Malloc/free tracing packet */
+ Common_packet comm;
+ Heap_type mtype; /* subtype of packet */
+ Size_type size; /* size of malloc/realloc request */
+ Vaddr_type vaddr; /* vaddr given to free or returned from malloc/realloc */
+ Vaddr_type ovaddr; /* Previous vaddr given to realloc */
+} Heap_packet;
+
+static int init_heap_intf ();
+static int open_experiment (const char *);
+static int start_data_collection (void);
+static int stop_data_collection (void);
+static int close_experiment (void);
+static int detach_experiment (void);
+
+static ModuleInterface module_interface = {
+ SP_HEAPTRACE_FILE, /* description */
+ NULL, /* initInterface */
+ open_experiment, /* openExperiment */
+ start_data_collection, /* startDataCollection */
+ stop_data_collection, /* stopDataCollection */
+ close_experiment, /* closeExperiment */
+ detach_experiment /* detachExperiment (fork child) */
+};
+
+static CollectorInterface *collector_interface = NULL;
+static int heap_mode = 0;
+static CollectorModule heap_hndl = COLLECTOR_MODULE_ERR;
+static unsigned heap_key = COLLECTOR_TSD_INVALID_KEY;
+
+#define CHCK_REENTRANCE(x) ( !heap_mode || ((x) = collector_interface->getKey( heap_key )) == NULL || (*(x) != 0) )
+#define PUSH_REENTRANCE(x) ((*(x))++)
+#define POP_REENTRANCE(x) ((*(x))--)
+#define CALL_REAL(x) (__real_##x)
+#define NULL_PTR(x) (__real_##x == NULL)
+#define gethrtime collector_interface->getHiResTime
+
+#ifdef DEBUG
+#define Tprintf(...) if (collector_interface) collector_interface->writeDebugInfo( 0, __VA_ARGS__ )
+#define TprintfT(...) if (collector_interface) collector_interface->writeDebugInfo( 1, __VA_ARGS__ )
+#else
+#define Tprintf(...)
+#define TprintfT(...)
+#endif
+
+static void *(*__real_malloc)(size_t) = NULL;
+static void (*__real_free)(void *);
+static void *(*__real_realloc)(void *, size_t);
+static void *(*__real_memalign)(size_t, size_t);
+static void *(*__real_calloc)(size_t, size_t);
+static void *(*__real_valloc)(size_t);
+static char *(*__real_strchr)(const char *, int);
+
+void *__libc_malloc (size_t);
+void __libc_free (void *);
+void *__libc_realloc (void *, size_t);
+
+static void
+collector_memset (void *s, int c, size_t n)
+{
+ unsigned char *s1 = s;
+ while (n--)
+ *s1++ = (unsigned char) c;
+}
+
+void
+__collector_module_init (CollectorInterface *_collector_interface)
+{
+ if (_collector_interface == NULL)
+ return;
+ collector_interface = _collector_interface;
+ Tprintf (0, "heaptrace: __collector_module_init\n");
+ heap_hndl = collector_interface->registerModule (&module_interface);
+
+ /* Initialize next module */
+ ModuleInitFunc next_init = (ModuleInitFunc) dlsym (RTLD_NEXT, "__collector_module_init");
+ if (next_init != NULL)
+ next_init (_collector_interface);
+ return;
+}
+
+static int
+open_experiment (const char *exp)
+{
+ if (collector_interface == NULL)
+ {
+ Tprintf (0, "heaptrace: collector_interface is null.\n");
+ return COL_ERROR_HEAPINIT;
+ }
+ if (heap_hndl == COLLECTOR_MODULE_ERR)
+ {
+ Tprintf (0, "heaptrace: handle create failed.\n");
+ collector_interface->writeLog ("<event kind=\"%s\" id=\"%d\">data handle not created</event>\n",
+ SP_JCMD_CERROR, COL_ERROR_HEAPINIT);
+ return COL_ERROR_HEAPINIT;
+ }
+ TprintfT (0, "heaptrace: open_experiment %s\n", exp);
+ if (NULL_PTR (malloc))
+ init_heap_intf ();
+
+ const char *params = collector_interface->getParams ();
+ while (params)
+ {
+ if ((params[0] == 'H') && (params[1] == ':'))
+ {
+ params += 2;
+ break;
+ }
+ params = CALL_REAL (strchr)(params, ';');
+ if (params)
+ params++;
+ }
+ if (params == NULL) /* Heap data collection not specified */
+ return COL_ERROR_HEAPINIT;
+
+ heap_key = collector_interface->createKey (sizeof ( int), NULL, NULL);
+ if (heap_key == (unsigned) - 1)
+ {
+ Tprintf (0, "heaptrace: TSD key create failed.\n");
+ collector_interface->writeLog ("<event kind=\"%s\" id=\"%d\">TSD key not created</event>\n",
+ SP_JCMD_CERROR, COL_ERROR_HEAPINIT);
+ return COL_ERROR_HEAPINIT;
+ }
+ collector_interface->writeLog ("<profile name=\"%s\">\n", SP_JCMD_HEAPTRACE);
+ collector_interface->writeLog (" <profdata fname=\"%s\"/>\n",
+ module_interface.description);
+
+ /* Record Heap_packet description */
+ Heap_packet *pp = NULL;
+ collector_interface->writeLog (" <profpckt kind=\"%d\" uname=\"Heap tracing data\">\n", HEAP_PCKT);
+ collector_interface->writeLog (" <field name=\"LWPID\" uname=\"Lightweight process id\" offset=\"%d\" type=\"%s\"/>\n",
+ &pp->comm.lwp_id, sizeof (pp->comm.lwp_id) == 4 ? "INT32" : "INT64");
+ collector_interface->writeLog (" <field name=\"THRID\" uname=\"Thread number\" offset=\"%d\" type=\"%s\"/>\n",
+ &pp->comm.thr_id, sizeof (pp->comm.thr_id) == 4 ? "INT32" : "INT64");
+ collector_interface->writeLog (" <field name=\"CPUID\" uname=\"CPU id\" offset=\"%d\" type=\"%s\"/>\n",
+ &pp->comm.cpu_id, sizeof (pp->comm.cpu_id) == 4 ? "INT32" : "INT64");
+ collector_interface->writeLog (" <field name=\"TSTAMP\" uname=\"High resolution timestamp\" offset=\"%d\" type=\"%s\"/>\n",
+ &pp->comm.tstamp, sizeof (pp->comm.tstamp) == 4 ? "INT32" : "INT64");
+ collector_interface->writeLog (" <field name=\"FRINFO\" offset=\"%d\" type=\"%s\"/>\n",
+ &pp->comm.frinfo, sizeof (pp->comm.frinfo) == 4 ? "INT32" : "INT64");
+ collector_interface->writeLog (" <field name=\"HTYPE\" uname=\"Heap trace function type\" offset=\"%d\" type=\"%s\"/>\n",
+ &pp->mtype, sizeof (pp->mtype) == 4 ? "INT32" : "INT64");
+ collector_interface->writeLog (" <field name=\"HSIZE\" uname=\"Memory size\" offset=\"%d\" type=\"%s\"/>\n",
+ &pp->size, sizeof (pp->size) == 4 ? "UINT32" : "UINT64");
+ collector_interface->writeLog (" <field name=\"HVADDR\" uname=\"Memory address\" offset=\"%d\" type=\"%s\"/>\n",
+ &pp->vaddr, sizeof (pp->vaddr) == 4 ? "UINT32" : "UINT64");
+ collector_interface->writeLog (" <field name=\"HOVADDR\" uname=\"Previous memory address\" offset=\"%d\" type=\"%s\"/>\n",
+ &pp->ovaddr, sizeof (pp->ovaddr) == 4 ? "UINT32" : "UINT64");
+ collector_interface->writeLog (" </profpckt>\n");
+ collector_interface->writeLog ("</profile>\n");
+ return COL_ERROR_NONE;
+}
+
+static int
+start_data_collection (void)
+{
+ heap_mode = 1;
+ Tprintf (0, "heaptrace: start_data_collection\n");
+ return 0;
+}
+
+static int
+stop_data_collection (void)
+{
+ heap_mode = 0;
+ Tprintf (0, "heaptrace: stop_data_collection\n");
+ return 0;
+}
+
+static int
+close_experiment (void)
+{
+ heap_mode = 0;
+ heap_key = COLLECTOR_TSD_INVALID_KEY;
+ Tprintf (0, "heaptrace: close_experiment\n");
+ return 0;
+}
+
+static int
+detach_experiment (void)
+/* fork child. Clean up state but don't write to experiment */
+{
+ heap_mode = 0;
+ heap_key = COLLECTOR_TSD_INVALID_KEY;
+ Tprintf (0, "heaptrace: detach_experiment\n");
+ return 0;
+}
+
+static int in_init_heap_intf = 0; // Flag that we are in init_heap_intf()
+
+static int
+init_heap_intf ()
+{
+ void *dlflag;
+ in_init_heap_intf = 1;
+ __real_malloc = (void*(*)(size_t))dlsym (RTLD_NEXT, "malloc");
+ if (__real_malloc == NULL)
+ {
+ /* We are probably dlopened after libthread/libc,
+ * try to search in the previously loaded objects
+ */
+ __real_malloc = (void*(*)(size_t))dlsym (RTLD_DEFAULT, "malloc");
+ if (__real_malloc == NULL)
+ {
+ Tprintf (0, "heaptrace: ERROR: real malloc not found\n");
+ in_init_heap_intf = 0;
+ return 1;
+ }
+ Tprintf (DBG_LT1, "heaptrace: real malloc found with RTLD_DEFAULT\n");
+ dlflag = RTLD_DEFAULT;
+ }
+ else
+ {
+ Tprintf (DBG_LT1, "heaptrace: real malloc found with RTLD_NEXT\n");
+ dlflag = RTLD_NEXT;
+ }
+ __real_free = (void(*)(void *))dlsym (dlflag, "free");
+ __real_realloc = (void*(*)(void *, size_t))dlsym (dlflag, "realloc");
+ __real_memalign = (void*(*)(size_t, size_t))dlsym (dlflag, "memalign");
+ __real_calloc = (void*(*)(size_t, size_t))dlsym (dlflag, "calloc");
+ __real_valloc = (void*(*)(size_t))dlsym (dlflag, "valloc");
+ __real_strchr = (char*(*)(const char *, int))dlsym (dlflag, "strchr");
+ Tprintf (0, "heaptrace: init_heap_intf done\n");
+ in_init_heap_intf = 0;
+ return 0;
+}
+
+/*------------------------------------------------------------- malloc */
+
+void *
+malloc (size_t size)
+{
+ void *ret;
+ int *guard;
+ Heap_packet hpacket;
+ /* Linux startup workaround */
+ if (!heap_mode)
+ {
+ void *ppp = (void *) __libc_malloc (size);
+ Tprintf (DBG_LT4, "heaptrace: LINUX malloc(%ld, %p)...\n", (long) size, ppp);
+ return ppp;
+ }
+ if (NULL_PTR (malloc))
+ init_heap_intf ();
+ if (CHCK_REENTRANCE (guard))
+ {
+ ret = (void *) CALL_REAL (malloc)(size);
+ Tprintf (DBG_LT4, "heaptrace: real malloc(%ld) = %p\n", (long) size, ret);
+ return ret;
+ }
+ PUSH_REENTRANCE (guard);
+
+ ret = (void *) CALL_REAL (malloc)(size);
+ collector_memset (&hpacket, 0, sizeof ( Heap_packet));
+ hpacket.comm.tsize = sizeof ( Heap_packet);
+ hpacket.comm.tstamp = gethrtime ();
+ hpacket.mtype = MALLOC_TRACE;
+ hpacket.size = (Size_type) size;
+ hpacket.vaddr = (Vaddr_type) ret;
+ hpacket.ovaddr = (Vaddr_type) 0;
+ hpacket.comm.frinfo = collector_interface->getFrameInfo (heap_hndl, hpacket.comm.tstamp, FRINFO_FROM_STACK, &hpacket);
+ collector_interface->writeDataRecord (heap_hndl, (Common_packet*) & hpacket);
+ POP_REENTRANCE (guard);
+ return (void *) ret;
+}
+
+/*------------------------------------------------------------- free */
+
+void
+free (void *ptr)
+{
+ int *guard;
+ Heap_packet hpacket;
+ /* Linux startup workaround */
+ if (!heap_mode)
+ {
+ // Tprintf(DBG_LT4,"heaptrace: LINUX free(%p)...\n",ptr);
+ __libc_free (ptr);
+ return;
+ }
+ if (NULL_PTR (malloc))
+ init_heap_intf ();
+ if (CHCK_REENTRANCE (guard))
+ {
+ CALL_REAL (free)(ptr);
+ return;
+ }
+ if (ptr == NULL)
+ return;
+ PUSH_REENTRANCE (guard);
+
+ /* Get a timestamp before 'free' to enforce consistency */
+ hrtime_t ts = gethrtime ();
+ CALL_REAL (free)(ptr);
+ collector_memset (&hpacket, 0, sizeof ( Heap_packet));
+ hpacket.comm.tsize = sizeof ( Heap_packet);
+ hpacket.comm.tstamp = ts;
+ hpacket.mtype = FREE_TRACE;
+ hpacket.size = (Size_type) 0;
+ hpacket.vaddr = (Vaddr_type) ptr;
+ hpacket.ovaddr = (Vaddr_type) 0;
+ hpacket.comm.frinfo = collector_interface->getFrameInfo (heap_hndl, hpacket.comm.tstamp, FRINFO_FROM_STACK, &hpacket);
+ collector_interface->writeDataRecord (heap_hndl, (Common_packet*) & hpacket);
+ POP_REENTRANCE (guard);
+ return;
+}
+
+/*------------------------------------------------------------- realloc */
+void *
+realloc (void *ptr, size_t size)
+{
+ void *ret;
+ int *guard;
+ Heap_packet hpacket;
+
+ /* Linux startup workaround */
+ if (!heap_mode)
+ {
+ void * ppp = (void *) __libc_realloc (ptr, size);
+ Tprintf (DBG_LT4, "heaptrace: LINUX realloc(%ld, %p->%p)...\n",
+ (long) size, ptr, ppp);
+ return ppp;
+ }
+ if (NULL_PTR (realloc))
+ init_heap_intf ();
+ if (CHCK_REENTRANCE (guard))
+ {
+ ret = (void *) CALL_REAL (realloc)(ptr, size);
+ return ret;
+ }
+ PUSH_REENTRANCE (guard);
+ hrtime_t ts = gethrtime ();
+ ret = (void *) CALL_REAL (realloc)(ptr, size);
+ collector_memset (&hpacket, 0, sizeof ( Heap_packet));
+ hpacket.comm.tsize = sizeof ( Heap_packet);
+ hpacket.comm.tstamp = ts;
+ hpacket.mtype = REALLOC_TRACE;
+ hpacket.size = (Size_type) size;
+ hpacket.vaddr = (Vaddr_type) ret;
+ hpacket.ovaddr = (Vaddr_type) ptr;
+ hpacket.comm.frinfo = collector_interface->getFrameInfo (heap_hndl, hpacket.comm.tstamp, FRINFO_FROM_STACK, &hpacket);
+ collector_interface->writeDataRecord (heap_hndl, (Common_packet*) & hpacket);
+ POP_REENTRANCE (guard);
+ return (void *) ret;
+}
+
+/*------------------------------------------------------------- memalign */
+void *
+memalign (size_t align, size_t size)
+{
+ void *ret;
+ int *guard;
+ Heap_packet hpacket;
+ if (NULL_PTR (memalign))
+ init_heap_intf ();
+ if (CHCK_REENTRANCE (guard))
+ {
+ ret = (void *) CALL_REAL (memalign)(align, size);
+ return ret;
+ }
+ PUSH_REENTRANCE (guard);
+ ret = (void *) CALL_REAL (memalign)(align, size);
+ collector_memset (&hpacket, 0, sizeof ( Heap_packet));
+ hpacket.comm.tsize = sizeof ( Heap_packet);
+ hpacket.comm.tstamp = gethrtime ();
+ hpacket.mtype = MALLOC_TRACE;
+ hpacket.size = (Size_type) size;
+ hpacket.vaddr = (Vaddr_type) ret;
+ hpacket.ovaddr = (Vaddr_type) 0;
+ hpacket.comm.frinfo = collector_interface->getFrameInfo (heap_hndl, hpacket.comm.tstamp, FRINFO_FROM_STACK, &hpacket);
+ collector_interface->writeDataRecord (heap_hndl, (Common_packet*) & hpacket);
+ POP_REENTRANCE (guard);
+ return ret;
+}
+
+/*------------------------------------------------------------- valloc */
+
+void *
+valloc (size_t size)
+{
+ void *ret;
+ int *guard;
+ Heap_packet hpacket;
+ if (NULL_PTR (memalign))
+ init_heap_intf ();
+ if (CHCK_REENTRANCE (guard))
+ {
+ ret = (void *) CALL_REAL (valloc)(size);
+ return ret;
+ }
+ PUSH_REENTRANCE (guard);
+ ret = (void *) CALL_REAL (valloc)(size);
+ collector_memset (&hpacket, 0, sizeof ( Heap_packet));
+ hpacket.comm.tsize = sizeof ( Heap_packet);
+ hpacket.comm.tstamp = gethrtime ();
+ hpacket.mtype = MALLOC_TRACE;
+ hpacket.size = (Size_type) size;
+ hpacket.vaddr = (Vaddr_type) ret;
+ hpacket.ovaddr = (Vaddr_type) 0;
+ hpacket.comm.frinfo = collector_interface->getFrameInfo (heap_hndl, hpacket.comm.tstamp, FRINFO_FROM_STACK, &hpacket);
+ collector_interface->writeDataRecord (heap_hndl, (Common_packet*) & hpacket);
+ POP_REENTRANCE (guard);
+ return ret;
+}
+
+/*------------------------------------------------------------- calloc */
+void *
+calloc (size_t size, size_t esize)
+{
+ void *ret;
+ int *guard;
+ Heap_packet hpacket;
+ if (NULL_PTR (calloc))
+ {
+ if (in_init_heap_intf != 0)
+ return NULL; // Terminate infinite loop
+ init_heap_intf ();
+ }
+ if (CHCK_REENTRANCE (guard))
+ {
+ ret = (void *) CALL_REAL (calloc)(size, esize);
+ return ret;
+ }
+ PUSH_REENTRANCE (guard);
+ ret = (void *) CALL_REAL (calloc)(size, esize);
+ collector_memset (&hpacket, 0, sizeof ( Heap_packet));
+ hpacket.comm.tsize = sizeof ( Heap_packet);
+ hpacket.comm.tstamp = gethrtime ();
+ hpacket.mtype = MALLOC_TRACE;
+ hpacket.size = (Size_type) (size * esize);
+ hpacket.vaddr = (Vaddr_type) ret;
+ hpacket.ovaddr = (Vaddr_type) 0;
+ hpacket.comm.frinfo = collector_interface->getFrameInfo (heap_hndl, hpacket.comm.tstamp, FRINFO_FROM_STACK, &hpacket);
+ collector_interface->writeDataRecord (heap_hndl, (Common_packet*) & hpacket);
+ POP_REENTRANCE (guard);
+ return ret;
+}
+
+/* __collector_heap_record is used to record java allocations/deallocations.
+ * It uses the same facilities as regular heap tracing for now.
+ */
+void
+__collector_heap_record (int mtype, size_t size, void *vaddr)
+{
+ int *guard;
+ Heap_packet hpacket;
+ if (CHCK_REENTRANCE (guard))
+ return;
+ PUSH_REENTRANCE (guard);
+ collector_memset (&hpacket, 0, sizeof ( Heap_packet));
+ hpacket.comm.tsize = sizeof ( Heap_packet);
+ hpacket.comm.tstamp = gethrtime ();
+ hpacket.mtype = mtype;
+ hpacket.size = (Size_type) size;
+ hpacket.vaddr = (Vaddr_type) vaddr;
+ hpacket.ovaddr = (Vaddr_type) 0;
+ hpacket.comm.frinfo = collector_interface->getFrameInfo (heap_hndl, hpacket.comm.tstamp, FRINFO_FROM_STACK, &hpacket);
+ collector_interface->writeDataRecord (heap_hndl, (Common_packet*) & hpacket);
+ POP_REENTRANCE (guard);
+ return;
+}
diff --git a/gprofng/libcollector/hwprofile.c b/gprofng/libcollector/hwprofile.c
new file mode 100644
index 00000000000..6fdaf1bd8ff
--- /dev/null
+++ b/gprofng/libcollector/hwprofile.c
@@ -0,0 +1,905 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+/* Hardware counter profiling */
+
+#include "config.h"
+#include <alloca.h>
+#include <dlfcn.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <errno.h>
+#include <sys/syscall.h>
+#include <signal.h>
+#include <ucontext.h>
+
+#include "gp-defs.h"
+#define _STRING_H 1 /* XXX MEZ: temporary workaround */
+#include "hwcdrv.h"
+#include "collector_module.h"
+#include "gp-experiment.h"
+#include "libcol_util.h"
+#include "hwprofile.h"
+#include "ABS.h"
+#include "tsd.h"
+
+/* TprintfT(<level>,...) definitions. Adjust per module as needed */
+#define DBG_LT0 0 // for high-level configuration, unexpected errors/warnings
+#define DBG_LT1 1 // for configuration details, warnings
+#define DBG_LT2 2
+#define DBG_LT3 3
+#define DBG_LT4 4
+#define DBG_LT5 5
+
+#define SD_OFF 0 /* before start or after close she shut down process */
+#define SD_PENDING 1 /* before running real_detach_experiment() */
+#define SD_COMPLETE 2 /* after running real_detach_experiment() */
+
+static int init_interface (CollectorInterface*);
+static int open_experiment (const char *);
+static int start_data_collection (void);
+static int stop_data_collection (void);
+static int close_experiment (void);
+static int detach_experiment (void);
+static int real_detach_experiment (void);
+
+static ModuleInterface module_interface ={
+ SP_HWCNTR_FILE, /* description */
+ init_interface, /* initInterface */
+ open_experiment, /* openExperiment */
+ start_data_collection, /* startDataCollection */
+ stop_data_collection, /* stopDataCollection */
+ close_experiment, /* closeExperiment */
+ detach_experiment /* detachExperiment (fork child) */
+};
+
+static CollectorInterface *collector_interface = NULL;
+
+
+/*---------------------------------------------------------------------------*/
+/* compile options and workarounds */
+
+/* Solaris: We set ITIMER_REALPROF to ensure that counters get started on
+ * LWPs that existed before the collector initialization.
+ *
+ * In addition, if the appropriate #define's are set, we check for:
+ * lost-hw-overflow -- the HW counters rollover, but the overflow
+ * interrupt is not generated (counters keep running)
+ * lost-sigemt -- the interrupt is received by the kernel,
+ * which stops the counters, but the kernel fails
+ * to deliver the signal.
+ */
+
+/*---------------------------------------------------------------------------*/
+/* typedefs */
+
+typedef enum {
+ HWCMODE_OFF, /* before start or after close */
+ HWCMODE_SUSPEND, /* stop_data_collection called */
+ HWCMODE_ACTIVE, /* counters are defined and after start_data_collection() */
+ HWCMODE_ABORT /* fatal error occured. Log a message, stop recording */
+} hwc_mode_t;
+
+/*---------------------------------------------------------------------------*/
+/* prototypes */
+static void init_ucontexts (void);
+static int hwc_initialize_handlers (void);
+static void collector_record_counter (ucontext_t*,
+ int timecvt,
+ ABST_type, hrtime_t,
+ unsigned, uint64_t);
+static void collector_hwc_ABORT (int errnum, const char *msg);
+static void hwclogwrite0 ();
+static void hwclogwrite (Hwcentry *);
+static void set_hwc_mode (hwc_mode_t);
+static void collector_sigemt_handler (int sig, siginfo_t *si, void *puc);
+
+/*---------------------------------------------------------------------------*/
+/* static variables */
+
+/* --- user counter selections and options */
+static int hwcdef_has_memspace; /* true to indicate use of extened packets */
+static unsigned hwcdef_cnt; /* number of *active* hardware counters */
+static unsigned hwcdef_num_sampling_ctrdefs; /* ctrs that use sampling */
+static unsigned hwcdef_num_overflow_ctrdefs; /* ctrs that use overflow */
+static Hwcentry **hwcdef; /* HWC definitions */
+static int cpcN_cpuver = CPUVER_UNDEFINED;
+static int hwcdrv_inited; /* Don't call hwcdrv_init() in fork_child */
+static hwcdrv_api_t *hwc_driver = NULL;
+static unsigned hwprofile_tsd_key = COLLECTOR_TSD_INVALID_KEY;
+static int hwprofile_tsd_sz = 0;
+static volatile hwc_mode_t hwc_mode = HWCMODE_OFF;
+static volatile unsigned int nthreads_in_sighandler = 0;
+static volatile unsigned int sd_state = SD_OFF;
+
+/* --- experiment logging state */
+static CollectorModule expr_hndl = COLLECTOR_MODULE_ERR;
+static ucontext_t expr_dummy_uc; // used for hacked "collector" frames
+static ucontext_t expr_out_of_range_uc; // used for "out-of-range" frames
+static ucontext_t expr_frozen_uc; // used for "frozen" frames
+static ucontext_t expr_nopc_uc; // used for not-program-related frames
+static ucontext_t expr_lostcounts_uc; // used for lost_counts frames
+
+/* --- signal handler state */
+static struct sigaction old_sigemt_handler; //overwritten in fork-child
+
+/*---------------------------------------------------------------------------*/
+/* macros */
+#define COUNTERS_ENABLED() (hwcdef_cnt)
+#define gethrtime collector_interface->getHiResTime
+
+#ifdef DEBUG
+#define Tprintf(...) if (collector_interface) collector_interface->writeDebugInfo( 0, __VA_ARGS__ )
+#define TprintfT(...) if (collector_interface) collector_interface->writeDebugInfo( 1, __VA_ARGS__ )
+#else
+#define Tprintf(...)
+#define TprintfT(...)
+#endif
+
+
+/*---------------------------------------------------------------------------*/
+
+/* Initialization routines */
+static hwcdrv_api_t *
+get_hwc_driver ()
+{
+ if (hwc_driver == NULL)
+ hwc_driver = __collector_get_hwcdrv ();
+ return hwc_driver;
+}
+
+static void init_module () __attribute__ ((constructor));
+static void
+init_module ()
+{
+ __collector_dlsym_guard = 1;
+ RegModuleFunc reg_module = (RegModuleFunc) dlsym (RTLD_DEFAULT, "__collector_register_module");
+ __collector_dlsym_guard = 0;
+ if (reg_module == NULL)
+ {
+ TprintfT (0, "hwprofile: init_module FAILED - reg_module = NULL\n");
+ return;
+ }
+ expr_hndl = reg_module (&module_interface);
+ if (expr_hndl == COLLECTOR_MODULE_ERR)
+ {
+ TprintfT (0, "hwprofile: ERROR: handle not created.\n");
+ if (collector_interface)
+ collector_interface->writeLog ("<event kind=\"%s\" id=\"%d\">data handle not created</event>\n",
+ SP_JCMD_CERROR, COL_ERROR_HWCINIT);
+ }
+}
+
+static int
+init_interface (CollectorInterface *_collector_interface)
+{
+ collector_interface = _collector_interface;
+ return COL_ERROR_NONE;
+}
+
+static void *
+hwprofile_get_tsd ()
+{
+ return collector_interface->getKey (hwprofile_tsd_key);
+}
+
+static int
+open_experiment (const char *exp)
+{
+ if (collector_interface == NULL)
+ {
+ TprintfT (0, "hwprofile: ERROR: collector_interface is null.\n");
+ return COL_ERROR_HWCINIT;
+ }
+ const char *params = collector_interface->getParams ();
+ while (params)
+ {
+ if (__collector_strStartWith (params, "h:*") == 0)
+ {
+ /* HWC counters set by default */
+ collector_interface->writeLog ("<%s %s=\"1\"/>\n",
+ SP_TAG_SETTING, SP_JCMD_HWC_DEFAULT);
+ params += 3;
+ break;
+ }
+ else if (__collector_strStartWith (params, "h:") == 0)
+ {
+ params += 2;
+ break;
+ }
+ params = CALL_UTIL (strchr)(params, ';');
+ if (params)
+ params++;
+ }
+ if (params == NULL) /* HWC profiling not specified */
+ return COL_ERROR_HWCINIT;
+ char *s = CALL_UTIL (strchr)(params, (int) ';');
+ int sz = s ? s - params : CALL_UTIL (strlen)(params);
+ char *defstring = (char*) alloca (sz + 1);
+ CALL_UTIL (strlcpy)(defstring, params, sz + 1);
+ TprintfT (0, "hwprofile: open_experiment %s -- %s\n", exp, defstring);
+
+ int err = COL_ERROR_NONE;
+ /* init counter library */
+ if (!hwcdrv_inited)
+ { /* do not call hwcdrv_init() from fork-child */
+ hwcdrv_inited = 1;
+ get_hwc_driver ();
+ if (hwc_driver->hwcdrv_init (collector_hwc_ABORT, &hwprofile_tsd_sz) == 0)
+ {
+ collector_interface->writeLog ("<event kind=\"%s\" id=\"%d\">%s</event>\n",
+ SP_JCMD_CERROR, COL_ERROR_HWCINIT, defstring);
+ TprintfT (0, "hwprofile: ERROR: hwcfuncs_init() failed\n");
+ return COL_ERROR_HWCINIT;
+ }
+
+ if (hwc_driver->hwcdrv_enable_mt (hwprofile_get_tsd))
+ {
+ // It is OK to call hwcdrv_enable_mt() before tsd key is created
+ collector_interface->writeLog ("<event kind=\"%s\" id=\"%d\">%s</event>\n",
+ SP_JCMD_CERROR, COL_ERROR_HWCINIT, defstring);
+ TprintfT (0, "hwprofile: ERROR: hwcdrv_enable_mt() failed\n");
+ return COL_ERROR_HWCINIT;
+ }
+
+ hwc_driver->hwcdrv_get_info (&cpcN_cpuver, NULL, NULL, NULL, NULL);
+ if (cpcN_cpuver < 0)
+ {
+ collector_interface->writeLog ("<event kind=\"%s\" id=\"%d\">%s</event>\n",
+ SP_JCMD_CERROR, COL_ERROR_HWCINIT, defstring);
+ TprintfT (0, "hwprofile: ERROR: hwcdrv_get_info() failed\n");
+ return COL_ERROR_HWCINIT;
+ }
+ }
+
+ if (hwprofile_tsd_sz)
+ {
+ hwprofile_tsd_key = collector_interface->createKey (hwprofile_tsd_sz, NULL, NULL);
+ if (hwprofile_tsd_key == COLLECTOR_TSD_INVALID_KEY)
+ {
+ collector_interface->writeLog ("<event kind=\"%s\" id=\"%d\">%s</event>\n",
+ SP_JCMD_CERROR, COL_ERROR_HWCINIT, defstring);
+ TprintfT (0, "hwprofile: ERROR: TSD createKey failed\n");
+ return COL_ERROR_HWCINIT;
+ }
+ }
+ hwcdef_cnt = 0;
+ hwcdef_has_memspace = 0;
+
+ /* create counters based on hwcdef[] */
+ err = __collector_hwcfuncs_bind_descriptor (defstring);
+ if (err)
+ {
+ err = err == HWCFUNCS_ERROR_HWCINIT ? COL_ERROR_HWCINIT : COL_ERROR_HWCARGS;
+ collector_interface->writeLog ("<event kind=\"%s\" id=\"%d\">%s</event>\n",
+ SP_JCMD_CERROR, err, defstring);
+ TprintfT (0, "hwprofile: ERROR: open_experiment() failed, RC=%d \n", err);
+ return err;
+ }
+
+ /* generate an array of counter structures for each requested counter */
+ hwcdef = __collector_hwcfuncs_get_ctrs (&hwcdef_cnt);
+ hwcdef_num_sampling_ctrdefs = hwcdef_num_overflow_ctrdefs = 0;
+ int idx;
+ for (idx = 0; idx < hwcdef_cnt; idx++)
+ {
+ if (HWCENTRY_USES_SAMPLING (hwcdef[idx]))
+ {
+ hwcdef_num_sampling_ctrdefs++;
+ }
+ else
+ {
+ hwcdef_num_overflow_ctrdefs++;
+ }
+ }
+
+ init_ucontexts ();
+
+ /* initialize the SIGEMT handler, and the periodic HWC checker */
+ err = hwc_initialize_handlers ();
+ if (err != COL_ERROR_NONE)
+ {
+ hwcdef_cnt = 0;
+ TprintfT (0, "hwprofile: ERROR: open_experiment() failed, RC=%d \n", err);
+ /* log written by hwc_initialize_handlers() */
+ return err;
+ }
+
+ for (idx = 0; idx < hwcdef_cnt; idx++)
+ if (ABST_BACKTRACK_ENABLED (hwcdef[idx]->memop))
+ hwcdef_has_memspace = 1;
+
+ /* record the hwc definitions in the log, based on the counter array */
+ hwclogwrite0 ();
+ for (idx = 0; idx < hwcdef_cnt; idx++)
+ hwclogwrite (hwcdef[idx]);
+ return COL_ERROR_NONE;
+}
+
+int
+__collector_ext_hwc_lwp_init ()
+{
+ return get_hwc_driver ()->hwcdrv_lwp_init ();
+}
+
+void
+__collector_ext_hwc_lwp_fini ()
+{
+ get_hwc_driver ()->hwcdrv_lwp_fini ();
+}
+
+int
+__collector_ext_hwc_lwp_suspend ()
+{
+ return get_hwc_driver ()->hwcdrv_lwp_suspend ();
+}
+
+int
+__collector_ext_hwc_lwp_resume ()
+{
+ return get_hwc_driver ()->hwcdrv_lwp_resume ();
+}
+
+/* Dummy routine, used to provide a context for non-program related profiles */
+void
+__collector_not_program_related () { }
+
+/* Dummy routine, used to provide a context for lost counts (perf_events) */
+void
+__collector_hwc_samples_lost () { }
+
+/* Dummy routine, used to provide a context */
+void
+__collector_hwcs_frozen () { }
+
+/* Dummy routine, used to provide a context */
+void
+__collector_hwcs_out_of_range () { }
+/* initialize some structures */
+static void
+init_ucontexts (void)
+{
+ /* initialize dummy context for "collector" frames */
+ getcontext (&expr_dummy_uc);
+ SETFUNCTIONCONTEXT (&expr_dummy_uc, NULL);
+
+ /* initialize dummy context for "out-of-range" frames */
+ getcontext (&expr_out_of_range_uc);
+ SETFUNCTIONCONTEXT (&expr_out_of_range_uc, &__collector_hwcs_out_of_range);
+
+ /* initialize dummy context for "frozen" frames */
+ getcontext (&expr_frozen_uc);
+ SETFUNCTIONCONTEXT (&expr_frozen_uc, &__collector_hwcs_frozen);
+
+ /* initialize dummy context for non-program-related frames */
+ getcontext (&expr_nopc_uc);
+ SETFUNCTIONCONTEXT (&expr_nopc_uc, &__collector_not_program_related);
+
+ /* initialize dummy context for lost-counts-related frames */
+ getcontext (&expr_lostcounts_uc);
+ SETFUNCTIONCONTEXT (&expr_lostcounts_uc, &__collector_hwc_samples_lost);
+}
+/* initialize the signal handler */
+static int
+hwc_initialize_handlers (void)
+{
+ /* install the signal handler for SIGEMT */
+ struct sigaction oact;
+ if (__collector_sigaction (HWCFUNCS_SIGNAL, NULL, &oact) != 0)
+ {
+ TprintfT (0, "hwc_initialize_handlers(): ERROR: hwc_initialize_handlers(): __collector_sigaction() failed to get oact\n");
+ collector_interface->writeLog ("<event kind=\"%s\" id=\"%d\">old handler could not be determined</event>\n", SP_JCMD_CERROR, COL_ERROR_HWCINIT);
+ return COL_ERROR_HWCINIT;
+ }
+ if (oact.sa_sigaction == collector_sigemt_handler)
+ {
+ /* signal handler is already in place; we are probably in a fork-child */
+ TprintfT (DBG_LT1, "hwc_initialize_handlers(): hwc_initialize_handlers() collector_sigemt_handler already installed\n");
+ }
+ else
+ {
+ /* set our signal handler */
+ struct sigaction c_act;
+ CALL_UTIL (memset)(&c_act, 0, sizeof c_act);
+ sigemptyset (&c_act.sa_mask);
+ sigaddset (&c_act.sa_mask, SIGPROF); /* block SIGPROF delivery in handler */
+ /* XXXX should probably also block sample_sig & pause_sig */
+ c_act.sa_sigaction = collector_sigemt_handler; /* note: used to set sa_handler instead */
+ c_act.sa_flags = SA_RESTART | SA_SIGINFO;
+ if (__collector_sigaction (HWCFUNCS_SIGNAL, &c_act, &old_sigemt_handler) != 0)
+ {
+ TprintfT (0, "hwc_initialize_handlers(): ERROR: hwc_initialize_handlers(): __collector_sigaction() failed to set cact\n");
+ collector_interface->writeLog ("<event kind=\"%s\" id=\"%d\">event handler could not be installed</event>\n", SP_JCMD_CERROR, COL_ERROR_HWCINIT);
+ return COL_ERROR_HWCINIT;
+ }
+ }
+ return COL_ERROR_NONE;
+}
+
+static int
+close_experiment (void)
+{
+ /* note: stop_data_collection() should have already been called by
+ * collector_close_experiment()
+ */
+ if (!COUNTERS_ENABLED ())
+ return COL_ERROR_NONE;
+ detach_experiment ();
+
+ /* cpc or libperfctr may still generate sigemts for a while */
+ /* verify that SIGEMT handler is still installed */
+ /* (still required with sigaction interposition and management,
+ since interposition is not done for attach experiments)
+ */
+ struct sigaction curr;
+ if (__collector_sigaction (HWCFUNCS_SIGNAL, NULL, &curr) == -1)
+ {
+ TprintfT (0, "hwprofile close_experiment: ERROR: hwc sigaction check failed: errno=%d\n", errno);
+ }
+ else if (curr.sa_sigaction != collector_sigemt_handler)
+ {
+ TprintfT (DBG_LT1, "hwprofile close_experiment: WARNING: collector sigemt handler replaced by 0x%p!\n", curr.sa_handler);
+ (void) collector_interface->writeLog ("<event kind=\"%s\" id=\"%d\">0x%p</event>\n",
+ SP_JCMD_CWARN, COL_WARN_SIGEMT, curr.sa_handler);
+ }
+ else
+ TprintfT (DBG_LT1, "hwprofile close_experiment: collector sigemt handler integrity verified!\n");
+ TprintfT (0, "hwprofile: close_experiment\n");
+ return 0;
+}
+
+static int
+detach_experiment (void)
+{
+ /* fork child. Clean up state but don't write to experiment */
+ /* note: stop_data_collection() has already been called by the fork_prologue */
+ // detach_experiment() can be called asynchronously
+ // from anywhere, even from within a sigemt handler
+ // via DBX detach.
+ // Important: stop_data_collection() _must_ be called
+ // before detach_experiment() is called.
+ if (!COUNTERS_ENABLED ())
+ return COL_ERROR_NONE;
+ TprintfT (0, "hwprofile: detach_experiment()\n");
+ if (SD_OFF != __collector_cas_32 (&sd_state, SD_OFF, SD_PENDING))
+ return 0;
+ // one and only one call should ever make it here here.
+ if (hwc_mode == HWCMODE_ACTIVE)
+ {
+ TprintfT (0, "hwprofile: ERROR: stop_data_collection() should have been called before detach_experiment()\n");
+ stop_data_collection ();
+ }
+
+ // Assumption: The only calls to sigemt_handler
+ // we should see at this point
+ // will be those that were already in-flight before
+ // stop_new_sigemts() was called.
+ if (nthreads_in_sighandler > 0)
+ {
+ // sigemt handlers should see
+ // SD_PENDING and should call real_detach_experiment()
+ // when the last handler is finished.
+ TprintfT (DBG_LT1, "hwprofile: detach in the middle of signal handler.\n");
+ return 0;
+ }
+
+ // If we get here, there should be no remaining
+ // sigemt handlers. However, we don't really know
+ // if there were ever any in flight, so call
+ // real_detach_experiment() here:
+ return real_detach_experiment (); // multiple calls to this OK
+}
+
+static int
+real_detach_experiment (void)
+{
+ /*multiple calls to this routine are OK.*/
+ if (SD_PENDING != __collector_cas_32 (&sd_state, SD_PENDING, SD_COMPLETE))
+ return 0;
+ // only the first caller to this routine should get here.
+ hwcdef_cnt = 0; /* since now deinstalled */
+ hwcdef = NULL;
+ set_hwc_mode (HWCMODE_OFF);
+ if (SD_COMPLETE != __collector_cas_32 (&sd_state, SD_COMPLETE, SD_OFF))
+ {
+ TprintfT (0, "hwprofile: ERROR: unexpected sd_state in real_detach_experiment()\n");
+ sd_state = SD_OFF;
+ }
+ hwprofile_tsd_key = COLLECTOR_TSD_INVALID_KEY;
+ TprintfT (DBG_LT0, "hwprofile: real_detach_experiment() detached from experiment.\n");
+ return 0;
+}
+
+/*---------------------------------------------------------------------------*/
+/* Record counter values. */
+
+/* <value> should already be adjusted to be "zero-based" (counting up from 0).*/
+static void
+collector_record_counter_internal (ucontext_t *ucp, int timecvt,
+ ABST_type ABS_memop, hrtime_t time,
+ unsigned tag, uint64_t value, uint64_t pc,
+ uint64_t va, uint64_t latency,
+ uint64_t data_source)
+{
+ MHwcntr_packet pckt;
+ CALL_UTIL (memset)(&pckt, 0, sizeof ( MHwcntr_packet));
+ pckt.comm.tstamp = time;
+ pckt.tag = tag;
+ if (timecvt > 1)
+ {
+ if (HWCVAL_HAS_ERR (value))
+ {
+ value = HWCVAL_CLR_ERR (value);
+ value *= timecvt;
+ value = HWCVAL_SET_ERR (value);
+ }
+ else
+ value *= timecvt;
+ }
+ pckt.interval = value;
+ pckt.comm.type = HW_PCKT;
+ pckt.comm.tsize = sizeof (Hwcntr_packet);
+ TprintfT (DBG_LT4, "hwprofile: %llu sample %lld tag %u recorded\n",
+ (unsigned long long) time, (long long) value, tag);
+ if (ABS_memop == ABST_NOPC)
+ ucp = &expr_nopc_uc;
+ pckt.comm.frinfo = collector_interface->getFrameInfo (expr_hndl, pckt.comm.tstamp, FRINFO_FROM_UC, ucp);
+ collector_interface->writeDataRecord (expr_hndl, (Common_packet*) & pckt);
+}
+
+static void
+collector_record_counter (ucontext_t *ucp, int timecvt, ABST_type ABS_memop,
+ hrtime_t time, unsigned tag, uint64_t value)
+{
+ collector_record_counter_internal (ucp, timecvt, ABS_memop, time, tag, value,
+ HWCFUNCS_INVALID_U64, HWCFUNCS_INVALID_U64,
+ HWCFUNCS_INVALID_U64, HWCFUNCS_INVALID_U64);
+}
+
+
+/*---------------------------------------------------------------------------*/
+/* Signal handlers */
+
+/* SIGEMT -- relayed from libcpc, when the counter overflows */
+
+/* Generates the appropriate event or events, and resets the counters */
+static void
+collector_sigemt_handler (int sig, siginfo_t *si, void *puc)
+{
+ int rc;
+ hwc_event_t sample, lost_samples;
+ if (sig != HWCFUNCS_SIGNAL)
+ {
+ TprintfT (0, "hwprofile: ERROR: %s: unexpected signal %d\n", "collector_sigemt_handler", sig);
+ return;
+ }
+ if (!COUNTERS_ENABLED ())
+ { /* apparently deinstalled */
+ TprintfT (0, "hwprofile: WARNING: SIGEMT detected after close_experiment()\n");
+ /* kills future sigemts since hwcdrv_sighlr_restart() not called */
+ return;
+ }
+
+ /* Typically, we expect HWC overflow signals to come from the kernel: si_code > 0.
+ * On Linux, however, dbx might be "forwarding" a signal using tkill()/tgkill().
+ * For more information on what si_code values can be expected on Linux, check:
+ * cmn_components/Collector_Interface/hwcdrv_pcl.c hwcdrv_overflow()
+ * cmn_components/Collector_Interface/hwcdrv_perfctr.c hdrv_perfctr_overflow()
+ */
+ if (puc == NULL || si == NULL || (si->si_code <= 0 && si->si_code != SI_TKILL))
+ {
+ TprintfT (DBG_LT3, "hwprofile: collector_sigemt_handler SIG%02d\n", sig);
+ if (old_sigemt_handler.sa_handler == SIG_DFL)
+ __collector_SIGDFL_handler (HWCFUNCS_SIGNAL);
+ else if (old_sigemt_handler.sa_handler != SIG_IGN &&
+ old_sigemt_handler.sa_sigaction != &collector_sigemt_handler)
+ {
+ /* Redirect the signal to the previous signal handler */
+ (old_sigemt_handler.sa_sigaction)(sig, si, puc);
+ TprintfT (DBG_LT1, "hwprofile: collector_sigemt_handler SIG%02d redirected to original handler\n", sig);
+ }
+ return;
+ }
+ rc = get_hwc_driver ()->hwcdrv_overflow (si, &sample, &lost_samples);
+ if (rc)
+ {
+ /* hwcdrv_sighlr_restart() should not be called */
+ TprintfT (0, "hwprofile: ERROR: collector_sigemt_handler: hwcdrv_overflow() failed\n");
+ return;
+ }
+
+ if (hwc_mode == HWCMODE_ACTIVE)
+ {
+ /* record the event only if counters are active */
+ /* The following has been copied from dispatcher.c */
+#if ARCH(SPARC)
+ /* 23340823 signal handler third argument should point to a ucontext_t */
+ /* Convert sigcontext to ucontext_t on sparc-Linux */
+ ucontext_t uctxmem;
+ struct sigcontext *sctx = (struct sigcontext*) puc;
+ ucontext_t *uctx = &uctxmem;
+ uctx->uc_link = NULL;
+#if WSIZE(32)
+ uctx->uc_mcontext.gregs[REG_PC] = sctx->si_regs.pc;
+ __collector_memcpy (&uctx->uc_mcontext.gregs[3],
+ sctx->si_regs.u_regs,
+ sizeof (sctx->si_regs.u_regs));
+#else
+ uctx->uc_mcontext.mc_gregs[MC_PC] = sctx->sigc_regs.tpc;
+ __collector_memcpy (&uctx->uc_mcontext.mc_gregs[3],
+ sctx->sigc_regs.u_regs,
+ sizeof (sctx->sigc_regs.u_regs));
+#endif /* WSIZE() */
+#else
+ ucontext_t *uctx = (ucontext_t*) puc;
+#endif /* ARCH() */
+
+ for (int ii = 0; ii < hwcdef_cnt; ii++)
+ if (lost_samples.ce_pic[ii])
+ collector_record_counter (&expr_lostcounts_uc, hwcdef[ii]->timecvt,
+ hwcdef[ii]->memop, lost_samples.ce_hrt,
+ hwcdef[ii]->sort_order, lost_samples.ce_pic[ii]);
+ for (int ii = 0; ii < hwcdef_cnt; ii++)
+ if (sample.ce_pic[ii])
+ collector_record_counter (uctx, hwcdef[ii]->timecvt,
+ hwcdef[ii]->memop, sample.ce_hrt,
+ hwcdef[ii]->sort_order, sample.ce_pic[ii]);
+ }
+ rc = get_hwc_driver ()->hwcdrv_sighlr_restart (NULL);
+}
+/* SIGPROF -- not installed as handler, but
+ * __collector_ext_hwc_check: called by (SIGPROF) dispatcher.
+ * Periodical check of integrity of HWC count/signal mechanism,
+ * as required for various chip/system bugs/workarounds.
+ */
+void
+__collector_ext_hwc_check (siginfo_t *info, ucontext_t *vcontext) { }
+
+/*---------------------------------------------------------------------------*/
+int
+collector_sigemt_sigaction (const struct sigaction *nact,
+ struct sigaction *oact)
+{
+ struct sigaction oact_check;
+ /* Error codes and messages that refer to HWC are tricky.
+ * E.g., HWC profiling might not even be on; we might
+ * encounter an error here simply because the user is
+ * trying to set a handler for a signal that happens to
+ * be HWCFUNCS_SIGNAL, which we aren't even using.
+ */
+ if (__collector_sigaction (HWCFUNCS_SIGNAL, NULL, &oact_check) != 0)
+ {
+ TprintfT (0, "hwprofile: ERROR: collector_sigemt_sigaction(): request to set handler for signal %d, but check on existing handler failed\n", HWCFUNCS_SIGNAL);
+ collector_interface->writeLog ("<event kind=\"%s\" id=\"%d\">old handler for signal %d could not be determined</event>\n", SP_JCMD_CERROR, COL_ERROR_HWCINIT, HWCFUNCS_SIGNAL);
+ return COL_ERROR_HWCINIT;
+ }
+
+ if (oact_check.sa_sigaction == collector_sigemt_handler)
+ {
+ /* dispatcher is in place, so nact/oact apply to old_sigemt_handler */
+ if (oact != NULL)
+ {
+ oact->sa_handler = old_sigemt_handler.sa_handler;
+ oact->sa_mask = old_sigemt_handler.sa_mask;
+ oact->sa_flags = old_sigemt_handler.sa_flags;
+ }
+ if (nact != NULL)
+ {
+ old_sigemt_handler.sa_handler = nact->sa_handler;
+ old_sigemt_handler.sa_mask = nact->sa_mask;
+ old_sigemt_handler.sa_flags = nact->sa_flags;
+ }
+ return COL_ERROR_NONE;
+ }
+ else /* no dispatcher in place, so just act like normal sigaction() */
+ return __collector_sigaction (HWCFUNCS_SIGNAL, nact, oact);
+}
+
+static void
+collector_hwc_ABORT (int errnum, const char *msg)
+{
+ TprintfT (0, "hwprofile: collector_hwc_ABORT: [%d] %s\n", errnum, msg);
+ if (hwc_mode == HWCMODE_ABORT) /* HWC collection already aborted! */
+ return;
+ set_hwc_mode (HWCMODE_ABORT); /* set global flag to disable handlers and indicate abort */
+
+ /* Write the error message to the experiment */
+ collector_interface->writeLog ("<event kind=\"%s\" id=\"%d\">%s: errno=%d</event>\n",
+ SP_JCMD_CERROR, COL_ERROR_HWCFAIL, msg, errnum);
+
+#ifdef REAL_DEBUG
+ abort ();
+#else
+ TprintfT (0, "hwprofile: Continuing without HWC collection...\n");
+#endif
+}
+
+static int
+start_data_collection (void)
+{
+ hwc_mode_t old_mode = hwc_mode;
+ if (!COUNTERS_ENABLED ())
+ return COL_ERROR_NONE;
+ TprintfT (0, "hwprofile: start_data_collection (hwc_mode=%d)\n", old_mode);
+ switch (old_mode)
+ {
+ case HWCMODE_OFF:
+ if (get_hwc_driver ()->hwcdrv_start ())
+ {
+ TprintfT (0, "hwprofile: ERROR: start_data_collection() failed in hwcdrv_start()\n");
+ collector_interface->writeLog ("<event kind=\"%s\" id=\"%d\">%s: errno=%d</event>\n",
+ SP_JCMD_CERROR, COL_ERROR_HWCFAIL,
+ "start_data_collection()", errno);
+ return COL_ERROR_HWCINIT;
+ }
+ set_hwc_mode (HWCMODE_ACTIVE); /* start handling events on signals */
+ break;
+ case HWCMODE_SUSPEND:
+ if (get_hwc_driver ()->hwcdrv_lwp_resume ())
+ {
+ TprintfT (0, "hwprofile: ERROR: start_data_collection() failed in hwcdrv_lwp_resume()\n");
+ /* ignore errors from lwp_resume() */
+ }
+ set_hwc_mode (HWCMODE_ACTIVE); /* start handling events on signals */
+ break;
+ default:
+ TprintfT (0, "hwprofile: ERROR: start_data_collection() invalid mode\n");
+ return COL_ERROR_HWCINIT;
+ }
+ return COL_ERROR_NONE;
+}
+
+static int
+stop_data_collection (void)
+{
+ hwc_mode_t old_mode = hwc_mode;
+ if (!COUNTERS_ENABLED ())
+ return COL_ERROR_NONE;
+ TprintfT (0, "hwprofile: stop_data_collection (hwc_mode=%d)\n", old_mode);
+ switch (old_mode)
+ {
+ case HWCMODE_SUSPEND:
+ return COL_ERROR_NONE;
+ case HWCMODE_ACTIVE:
+ set_hwc_mode (HWCMODE_SUSPEND); /* stop handling signals */
+ break;
+ default:
+ /* Don't change the mode, but attempt to suspend anyway... */
+ break;
+ }
+
+ if (get_hwc_driver ()->hwcdrv_lwp_suspend ())
+ /* ignore errors from lwp_suspend() */
+ TprintfT (0, "hwprofile: ERROR: stop_data_collection() failed in hwcdrv_lwp_suspend()\n");
+
+ /*
+ * hwcdrv_lwp_suspend() cannot guarantee that all SIGEMTs will stop
+ * but hwc_mode will prevent logging and counters will overflow once
+ * then stay frozen.
+ */
+ /* There may still be pending SIGEMTs so don't reset the SIG_DFL handler.
+ */
+ /* see comment in dispatcher.c */
+ /* ret = __collector_sigaction( SIGEMT, &old_sigemt_handler, NULL ); */
+ return COL_ERROR_NONE;
+}
+
+/*---------------------------------------------------------------------------*/
+
+/* utilities */
+static void
+set_hwc_mode (hwc_mode_t md)
+{
+ TprintfT (DBG_LT1, "hwprofile: set_hwc_mode(%d)\n", md);
+ hwc_mode = md;
+}
+
+int
+__collector_ext_hwc_active ()
+{
+ return (hwc_mode == HWCMODE_ACTIVE);
+}
+
+static void
+hwclogwrite0 ()
+{
+ collector_interface->writeLog ("<profdata fname=\"%s\"/>\n",
+ module_interface.description);
+ /* Record Hwcntr_packet description */
+ Hwcntr_packet *pp = NULL;
+ collector_interface->writeLog ("<profpckt kind=\"%d\" uname=\"" STXT ("Hardware counter profiling data") "\">\n", HW_PCKT);
+ collector_interface->writeLog (" <field name=\"LWPID\" uname=\"" STXT ("Lightweight process id") "\" offset=\"%d\" type=\"%s\"/>\n",
+ &pp->comm.lwp_id, sizeof (pp->comm.lwp_id) == 4 ? "INT32" : "INT64");
+ collector_interface->writeLog (" <field name=\"THRID\" uname=\"" STXT ("Thread number") "\" offset=\"%d\" type=\"%s\"/>\n",
+ &pp->comm.thr_id, sizeof (pp->comm.thr_id) == 4 ? "INT32" : "INT64");
+ collector_interface->writeLog (" <field name=\"CPUID\" uname=\"" STXT ("CPU id") "\" offset=\"%d\" type=\"%s\"/>\n",
+ &pp->comm.cpu_id, sizeof (pp->comm.cpu_id) == 4 ? "INT32" : "INT64");
+ collector_interface->writeLog (" <field name=\"TSTAMP\" uname=\"" STXT ("High resolution timestamp") "\" offset=\"%d\" type=\"%s\"/>\n",
+ &pp->comm.tstamp, sizeof (pp->comm.tstamp) == 4 ? "INT32" : "INT64");
+ collector_interface->writeLog (" <field name=\"FRINFO\" offset=\"%d\" type=\"%s\"/>\n",
+ &pp->comm.frinfo, sizeof (pp->comm.frinfo) == 4 ? "INT32" : "INT64");
+ collector_interface->writeLog (" <field name=\"HWCTAG\" uname=\"" STXT ("Hardware counter index") "\" offset=\"%d\" type=\"%s\"/>\n",
+ &pp->tag, sizeof (pp->tag) == 4 ? "INT32" : "INT64");
+ collector_interface->writeLog (" <field name=\"HWCINT\" uname=\"" STXT ("Hardware counter interval") "\" offset=\"%d\" type=\"%s\"/>\n",
+ &pp->interval, sizeof (pp->interval) == 4 ? "INT32" : "INT64");
+ collector_interface->writeLog ("</profpckt>\n");
+ if (hwcdef_has_memspace)
+ {
+ /* Record MHwcntr_packet description */
+ MHwcntr_packet *xpp = NULL;
+ collector_interface->writeLog ("<profpckt kind=\"%d\" uname=\"" STXT ("Hardware counter profiling data") "\">\n", MHWC_PCKT);
+ collector_interface->writeLog (" <field name=\"LWPID\" uname=\"" STXT ("Lightweight process id") "\" offset=\"%d\" type=\"%s\"/>\n",
+ &xpp->comm.lwp_id, sizeof (xpp->comm.lwp_id) == 4 ? "INT32" : "INT64");
+ collector_interface->writeLog (" <field name=\"THRID\" uname=\"" STXT ("Thread number") "\" offset=\"%d\" type=\"%s\"/>\n",
+ &xpp->comm.thr_id, sizeof (xpp->comm.thr_id) == 4 ? "INT32" : "INT64");
+ collector_interface->writeLog (" <field name=\"CPUID\" uname=\"" STXT ("CPU id") "\" offset=\"%d\" type=\"%s\"/>\n",
+ &xpp->comm.cpu_id, sizeof (xpp->comm.cpu_id) == 4 ? "INT32" : "INT64");
+ collector_interface->writeLog (" <field name=\"TSTAMP\" uname=\"" STXT ("High resolution timestamp") "\" offset=\"%d\" type=\"%s\"/>\n",
+ &xpp->comm.tstamp, sizeof (xpp->comm.tstamp) == 4 ? "INT32" : "INT64");
+ collector_interface->writeLog (" <field name=\"FRINFO\" offset=\"%d\" type=\"%s\"/>\n",
+ &xpp->comm.frinfo, sizeof (xpp->comm.frinfo) == 4 ? "INT32" : "INT64");
+ collector_interface->writeLog (" <field name=\"HWCTAG\" uname=\"" STXT ("Hardware counter index") "\" offset=\"%d\" type=\"%s\"/>\n",
+ &xpp->tag, sizeof (xpp->tag) == 4 ? "INT32" : "INT64");
+ collector_interface->writeLog (" <field name=\"HWCINT\" uname=\"" STXT ("Hardware counter interval") "\" offset=\"%d\" type=\"%s\"/>\n",
+ &xpp->interval, sizeof (xpp->interval) == 4 ? "INT32" : "INT64");
+ collector_interface->writeLog (" <field name=\"VADDR\" uname=\"" STXT ("Virtual address (data)") "\" offset=\"%d\" type=\"%s\"/>\n",
+ &xpp->ea_vaddr, sizeof (xpp->ea_vaddr) == 4 ? "UINT32" : "UINT64");
+ collector_interface->writeLog (" <field name=\"PADDR\" uname=\"" STXT ("Physical address (data)") "\" offset=\"%d\" type=\"%s\"/>\n",
+ &xpp->ea_paddr, sizeof (xpp->ea_paddr) == 4 ? "UINT32" : "UINT64");
+ collector_interface->writeLog (" <field name=\"VIRTPC\" uname=\"" STXT ("Virtual address (instruction)") "\" offset=\"%d\" type=\"%s\"/>\n",
+ &xpp->pc_vaddr, sizeof (xpp->pc_vaddr) == 4 ? "UINT32" : "UINT64");
+ collector_interface->writeLog (" <field name=\"PHYSPC\" uname=\"" STXT ("Physical address (instruction)") "\" offset=\"%d\" type=\"%s\"/>\n",
+ &xpp->pc_paddr, sizeof (xpp->pc_paddr) == 4 ? "UINT32" : "UINT64");
+ collector_interface->writeLog (" <field name=\"EA_PAGESIZE\" uname=\"" STXT ("Page size (data)") "\" offset=\"%d\" type=\"%s\"/>\n",
+ &xpp->ea_pagesz, sizeof (xpp->ea_pagesz) == 4 ? "INT32" : "INT64");
+ collector_interface->writeLog (" <field name=\"PC_PAGESIZE\" uname=\"" STXT ("Page size (instruction)") "\" offset=\"%d\" type=\"%s\"/>\n",
+ &xpp->pc_pagesz, sizeof (xpp->pc_pagesz) == 4 ? "INT32" : "INT64");
+ collector_interface->writeLog (" <field name=\"EA_LGRP\" uname=\"" STXT ("Page locality group (data)") "\" offset=\"%d\" type=\"%s\"/>\n",
+ &xpp->ea_lgrp, sizeof (xpp->ea_lgrp) == 4 ? "INT32" : "INT64");
+ collector_interface->writeLog (" <field name=\"PC_LGRP\" uname=\"" STXT ("Page locality group (instruction)") "\" offset=\"%d\" type=\"%s\"/>\n",
+ &xpp->pc_lgrp, sizeof (xpp->pc_lgrp) == 4 ? "INT32" : "INT64");
+ collector_interface->writeLog (" <field name=\"LWP_LGRP_HOME\" uname=\"" STXT ("LWP home lgroup id") "\" offset=\"%d\" type=\"%s\"/>\n",
+ &xpp->lgrp_lwp, sizeof (xpp->lgrp_lwp) == 4 ? "INT32" : "INT64");
+ collector_interface->writeLog (" <field name=\"PS_LGRP_HOME\" uname=\"" STXT ("Process home lgroup id") "\" offset=\"%d\" type=\"%s\"/>\n",
+ &xpp->lgrp_ps, sizeof (xpp->lgrp_ps) == 4 ? "INT32" : "INT64");
+ collector_interface->writeLog (" <field name=\"MEM_LAT\" uname=\"" STXT ("Memory Latency Cycles") "\" offset=\"%d\" type=\"%s\"/>\n",
+ &xpp->latency, sizeof (xpp->latency) == 4 ? "INT32" : "INT64");
+ collector_interface->writeLog (" <field name=\"MEM_SRC\" uname=\"" STXT ("Memory Data Source") "\" offset=\"%d\" type=\"%s\"/>\n",
+ &xpp->data_source, sizeof (xpp->data_source) == 4 ? "INT32" : "INT64");
+ collector_interface->writeLog ("</profpckt>\n");
+ }
+}
+
+static void
+hwclogwrite (Hwcentry * ctr)
+{
+ TprintfT (DBG_LT1, "hwprofile: writeLog(%s %u %s %d %u %d)\n",
+ SP_JCMD_HW_COUNTER, cpcN_cpuver, ctr->name ? ctr->name : "NULL",
+ ctr->val, ctr->sort_order, ctr->memop);
+ collector_interface->writeLog ("<profile name=\"%s\"", SP_JCMD_HW_COUNTER);
+ collector_interface->writeLog (" cpuver=\"%u\"", cpcN_cpuver);
+ collector_interface->writeLog (" hwcname=\"%s\"", ctr->name);
+ collector_interface->writeLog (" int_name=\"%s\"", ctr->int_name);
+ collector_interface->writeLog (" interval=\"%d\"", ctr->val);
+ collector_interface->writeLog (" tag=\"%u\"", ctr->sort_order);
+ collector_interface->writeLog (" memop=\"%d\"", ctr->memop);
+ collector_interface->writeLog ("/>\n");
+}
diff --git a/gprofng/libcollector/hwprofile.h b/gprofng/libcollector/hwprofile.h
new file mode 100644
index 00000000000..4d01bf17694
--- /dev/null
+++ b/gprofng/libcollector/hwprofile.h
@@ -0,0 +1,89 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _HWPROFILE_H
+#define _HWPROFILE_H
+
+#include <data_pckts.h>
+
+typedef struct Hwcntr_packet
+{ /* HW counter profiling packet */
+ Common_packet comm;
+ uint32_t tag; /* hw counter index, register */
+ uint64_t interval; /* overflow value */
+} Hwcntr_packet;
+
+typedef struct MHwcntr_packet
+{ /* extended (superset) Hwcntr_packet */
+ Common_packet comm;
+ uint32_t tag; /* hw counter index, register */
+ uint64_t interval; /* overflow value */
+ Vaddr_type ea_vaddr; /* virtual addr causing HWC event */
+ Vaddr_type pc_vaddr; /* candidate eventPC */
+ uint64_t ea_paddr; /* physical address for ea_vaddr */
+ uint64_t pc_paddr; /* physical address for pc_vaddr */
+ uint64_t ea_pagesz; /* pagesz (bytes) for ea_paddr */
+ uint64_t pc_pagesz; /* pagesz (bytes) for pc_paddr */
+ uint32_t ea_lgrp; /* latency group of ea_paddr */
+ uint32_t pc_lgrp; /* latency group of pc_paddr */
+ uint32_t lgrp_lwp; /* locality group of lwp */
+ uint32_t lgrp_ps; /* locality group of process */
+ uint64_t latency; /* latency in cycles (sampling only) */
+ uint64_t data_source; /* data source (sampling only) */
+} MHwcntr_packet;
+
+#if ARCH(SPARC)
+#define CONTEXT_PC MC_PC
+#define CONTEXT_SP MC_O6
+#define CONTEXT_FP MC_O7
+#define SETFUNCTIONCONTEXT(ucp,funcp) \
+ (ucp)->uc_mcontext.gregs[CONTEXT_PC] = (greg_t)(funcp); \
+ (ucp)->uc_mcontext.gregs[CONTEXT_SP] = 0; \
+ (ucp)->uc_mcontext.gregs[CONTEXT_FP] = 0;
+
+#elif ARCH(Intel)
+#include <sys/reg.h>
+
+#if WSIZE(64)
+#define CONTEXT_PC REG_RIP
+#define CONTEXT_FP REG_RBP
+#define CONTEXT_SP REG_RSP
+
+#elif WSIZE(32)
+#define CONTEXT_PC REG_EIP
+#define CONTEXT_FP REG_EBP
+#define CONTEXT_SP REG_ESP
+#endif /* WSIZE() */
+#define SETFUNCTIONCONTEXT(ucp,funcp) \
+ (ucp)->uc_mcontext.gregs[CONTEXT_PC] = (greg_t)(funcp); \
+ (ucp)->uc_mcontext.gregs[CONTEXT_SP] = 0; \
+ (ucp)->uc_mcontext.gregs[CONTEXT_FP] = 0;
+
+#elif ARCH(Aarch64)
+#define CONTEXT_PC 15
+#define CONTEXT_FP 14
+#define CONTEXT_SP 13
+#define SETFUNCTIONCONTEXT(ucp,funcp) \
+ (ucp)->uc_mcontext.regs[CONTEXT_PC] = (greg_t)(funcp); \
+ (ucp)->uc_mcontext.regs[CONTEXT_SP] = 0; \
+ (ucp)->uc_mcontext.regs[CONTEXT_FP] = 0;
+#endif /* ARCH() */
+
+#endif
diff --git a/gprofng/libcollector/iolib.c b/gprofng/libcollector/iolib.c
new file mode 100644
index 00000000000..6881f02fd30
--- /dev/null
+++ b/gprofng/libcollector/iolib.c
@@ -0,0 +1,1156 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <dlfcn.h>
+#include <pthread.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/mman.h>
+#include <sys/param.h>
+#include <sys/stat.h>
+
+#include "gp-defs.h"
+#include "collector.h"
+#include "gp-experiment.h"
+#include "memmgr.h"
+
+/* TprintfT(<level>,...) definitions. Adjust per module as needed */
+#define DBG_LT0 0 // for high-level configuration, unexpected errors/warnings
+#define DBG_LT1 1 // for configuration details, warnings
+#define DBG_LT2 2
+#define DBG_LT3 3
+
+/* ------------- Data and prototypes for block management --------- */
+#define IO_BLK 0 /* Concurrent requests */
+#define IO_SEQ 1 /* All requests are sequential, f.e. JAVA_CLASSES */
+#define IO_TXT 2 /* Sequential requests. Text strings. */
+#define ST_INIT 0 /* Initial state. Not allocated */
+#define ST_FREE 1 /* Available */
+#define ST_BUSY 2 /* Not available */
+
+/* IO_BLK, IO_SEQ */
+#define NCHUNKS 64
+
+/* IO_TXT */
+#define NBUFS 64 /* Number of text buffers */
+#define CUR_BUSY(x) ((uint32_t) ((x)>>63)) /* bit 63 */
+#define CUR_INDX(x) ((uint32_t) (((x)>>57) & 0x3fULL)) /* bits 62:57 */
+#define CUR_FOFF(x) ((x) & 0x01ffffffffffffffULL) /* bits 56: 0 */
+#define CUR_MAKE(busy, indx, foff) ((((uint64_t)(busy))<<63) | (((uint64_t)(indx))<<57) | ((uint64_t)(foff)) )
+
+typedef struct Buffer
+{
+ uint8_t *vaddr;
+ uint32_t left; /* bytes left */
+ uint32_t state; /* ST_FREE or ST_BUSY */
+} Buffer;
+
+typedef struct DataHandle
+{
+ Pckt_type kind; /* obsolete (to be removed) */
+ int iotype; /* IO_BLK, IO_SEQ, IO_TXT */
+ int active;
+ char fname[MAXPATHLEN]; /* data file name */
+
+ /* IO_BLK, IO_SEQ */
+ uint32_t nflow; /* number of data flows */
+ uint32_t *blkstate; /* block states, nflow*NCHUNKS array */
+ uint32_t *blkoff; /* block offset, nflow*NCHUNKS array */
+ uint32_t nchnk; /* number of active chunks, probably small for IO_BLK */
+ uint8_t *chunks[NCHUNKS]; /* chunks (nflow contiguous blocks in virtual memory) */
+ uint32_t chblk[NCHUNKS]; /* number of active blocks in a chunk */
+ uint32_t nblk; /* number of blocks in data file */
+ int exempt; /* if exempt from experiment size limit */
+
+ /* IO_TXT */
+ Buffer *buffers; /* array of text buffers */
+ uint64_t curpos; /* current buffer and file offset */
+} DataHandle;
+
+#define PROFILE_DATAHNDL_MAX 16
+static DataHandle data_hndls[PROFILE_DATAHNDL_MAX];
+static int initialized = 0;
+static long blksz; /* Block size. Multiple of page size. Power of two to make (x%blksz)==(x&(blksz-1)) fast. */
+static long log2blksz; /* log2(blksz) to make (x/blksz)==(x>>log2blksz) fast. */
+static uint32_t size_limit; /* Experiment size limit */
+static uint32_t cur_size; /* Current experiment size */
+static void init ();
+static void deleteHandle (DataHandle *hndl);
+static int exp_size_ck (int nblocks, char *fname);
+
+/* IO_BLK, IO_SEQ */
+static int allocateChunk (DataHandle *hndl, unsigned ichunk);
+static uint8_t *getBlock (DataHandle *hndl, unsigned iflow, unsigned ichunk);
+static int remapBlock (DataHandle *hndl, unsigned iflow, unsigned ichunk);
+static int newBlock (DataHandle *hndl, unsigned iflow, unsigned ichunk);
+static void deleteBlock (DataHandle *hndl, unsigned iflow, unsigned ichunk);
+
+/* IO_TXT */
+static int is_not_the_log_file (char *fname);
+static int mapBuffer (char *fname, Buffer *buf, off64_t foff);
+static int newBuffer (DataHandle *hndl, uint64_t pos);
+static void writeBuffer (Buffer *buf, int blk_off, char *src, int len);
+static void deleteBuffer (Buffer *buf);
+
+/*
+ * Common buffer management routines
+ */
+static void
+init ()
+{
+ /* set the block size */
+ long pgsz = CALL_UTIL (sysconf)(_SC_PAGESIZE);
+ blksz = pgsz;
+ log2blksz = 16; /* ensure a minimum size */
+ while ((1 << log2blksz) < blksz)
+ log2blksz += 1;
+ blksz = 1L << log2blksz; /* ensure that blksz is a power of two */
+ TprintfT (DBG_LT1, "iolib init: page size=%ld (0x%lx) blksz=%ld (0x%lx) log2blksz=%ld\n",
+ pgsz, pgsz, (long) blksz, (long) blksz, (long) log2blksz);
+ size_limit = 0;
+ cur_size = 0;
+ initialized = 1;
+}
+
+DataHandle *
+__collector_create_handle (char *descp)
+{
+ int exempt = 0;
+ char *desc = descp;
+ if (desc[0] == '*')
+ {
+ desc++;
+ exempt = 1;
+ }
+ if (!initialized)
+ init ();
+
+ /* set up header for file, file name, etc. */
+ if (__collector_exp_dir_name == NULL)
+ {
+ __collector_log_write ("<event kind=\"%s\" id=\"%d\">__collector_exp_dir_name==NULL</event>\n",
+ SP_JCMD_CERROR, COL_ERROR_EXPOPEN);
+ return NULL;
+ }
+ char fname[MAXPATHLEN];
+ CALL_UTIL (strlcpy)(fname, __collector_exp_dir_name, sizeof (fname));
+ CALL_UTIL (strlcat)(fname, "/", sizeof (fname));
+ Pckt_type kind = 0;
+ int iotype = IO_BLK;
+ if (__collector_strcmp (desc, SP_HEAPTRACE_FILE) == 0)
+ kind = HEAP_PCKT;
+ else if (__collector_strcmp (desc, SP_SYNCTRACE_FILE) == 0)
+ kind = SYNC_PCKT;
+ else if (__collector_strcmp (desc, SP_IOTRACE_FILE) == 0)
+ kind = IOTRACE_PCKT;
+ else if (__collector_strcmp (desc, SP_RACETRACE_FILE) == 0)
+ kind = RACE_PCKT;
+ else if (__collector_strcmp (desc, SP_PROFILE_FILE) == 0)
+ kind = PROF_PCKT;
+ else if (__collector_strcmp (desc, SP_OMPTRACE_FILE) == 0)
+ kind = OMP_PCKT;
+ else if (__collector_strcmp (desc, SP_HWCNTR_FILE) == 0)
+ kind = HW_PCKT;
+ else if (__collector_strcmp (desc, SP_DEADLOCK_FILE) == 0)
+ kind = DEADLOCK_PCKT;
+ else if (__collector_strcmp (desc, SP_FRINFO_FILE) == 0)
+ CALL_UTIL (strlcat)(fname, "data.", sizeof (fname));
+ else if (__collector_strcmp (desc, SP_LOG_FILE) == 0)
+ iotype = IO_TXT;
+ else if (__collector_strcmp (desc, SP_MAP_FILE) == 0)
+ iotype = IO_TXT;
+ else if (__collector_strcmp (desc, SP_JCLASSES_FILE) == 0)
+ iotype = IO_SEQ;
+ else
+ {
+ __collector_log_write ("<event kind=\"%s\" id=\"%d\">iolib unknown file desc %s</event>\n",
+ SP_JCMD_CERROR, COL_ERROR_EXPOPEN, desc);
+ return NULL;
+ }
+
+ CALL_UTIL (strlcat)(fname, desc, sizeof (fname));
+ TprintfT (DBG_LT1, "createHandle calling open on fname = `%s', desc = `%s' %s\n",
+ fname, desc, (exempt == 0 ? "non-exempt" : "exempt"));
+
+ /* allocate a handle -- not mt-safe */
+ DataHandle *hndl = NULL;
+ for (int i = 0; i < PROFILE_DATAHNDL_MAX; ++i)
+ if (data_hndls[i].active == 0)
+ {
+ hndl = &data_hndls[i];
+ break;
+ }
+
+ /* out of handles? */
+ if (hndl == NULL)
+ {
+ __collector_log_write ("<event kind=\"%s\" id=\"%d\">%s</event>\n",
+ SP_JCMD_CERROR, COL_ERROR_NOHNDL, fname);
+ return NULL;
+ }
+
+ hndl->kind = kind;
+ hndl->nblk = 0;
+ hndl->exempt = exempt;
+ CALL_UTIL (strlcpy)(hndl->fname, fname, sizeof (hndl->fname));
+ int fd = CALL_UTIL (open)(hndl->fname,
+ O_RDWR | O_CREAT | O_TRUNC | O_EXCL,
+ S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
+ if (fd < 0)
+ {
+ TprintfT (0, "createHandle open failed -- hndl->fname = `%s', SP_LOG_FILE = `%s': %s\n",
+ hndl->fname, SP_LOG_FILE, CALL_UTIL (strerror)(errno));
+ if (is_not_the_log_file (hndl->fname) == 0)
+ {
+ char errbuf[4096];
+ /* If we are trying to create the handle for the log file, write to stderr, not the experiment */
+ CALL_UTIL (snprintf)(errbuf, sizeof (errbuf),
+ "create_handle: COL_ERROR_LOG_OPEN %s: %s\n", hndl->fname, CALL_UTIL (strerror)(errno));
+ CALL_UTIL (write)(2, errbuf, CALL_UTIL (strlen)(errbuf));
+
+ }
+ else
+ __collector_log_write ("<event kind=\"%s\" id=\"%d\" ec=\"%d\">%s: create_handle</event>\n",
+ SP_JCMD_CERROR, COL_ERROR_FILEOPN, errno, hndl->fname);
+ return NULL;
+ }
+ CALL_UTIL (close)(fd);
+
+ hndl->iotype = iotype;
+ if (hndl->iotype == IO_TXT)
+ {
+ /* allocate our buffers in virtual memory */
+ /* later, we will remap buffers individually to the file */
+ uint8_t *memory = (uint8_t*) CALL_UTIL (mmap64)(0,
+ (size_t) (NBUFS * blksz),
+ PROT_READ | PROT_WRITE,
+#if ARCH(SPARC)
+ MAP_SHARED | MAP_ANON,
+#else
+ MAP_PRIVATE | MAP_ANON,
+#endif
+ -1,
+ (off64_t) 0);
+ if (memory == MAP_FAILED)
+ {
+ TprintfT (0, "create_handle: can't mmap MAP_ANON (for %s): %s\n", hndl->fname, CALL_UTIL (strerror)(errno));
+ /* see if this is the log file */
+ if (is_not_the_log_file (hndl->fname) == 0)
+ {
+ /* If we are trying to map the log file, write to stderr, not to the experiment */
+ char errbuf[4096];
+ CALL_UTIL (snprintf)(errbuf, sizeof (errbuf),
+ "create_handle: can't mmap MAP_ANON (for %s): %s\n", hndl->fname, CALL_UTIL (strerror)(errno));
+ CALL_UTIL (write)(2, errbuf, CALL_UTIL (strlen)(errbuf));
+ }
+ else /* write the error message into the experiment */
+ __collector_log_write ("<event kind=\"%s\" id=\"%d\" ec=\"%d\">MAP_ANON (for %s); create_handle</event>\n",
+ SP_JCMD_CERROR, COL_ERROR_FILEMAP, errno, hndl->fname);
+ return NULL;
+ }
+ TprintfT (DBG_LT2, " create_handle IO_TXT data buffer length=%ld (0x%lx) file='%s' memory=%p -- %p\n",
+ (long) (NBUFS * blksz), (long) (NBUFS * blksz), hndl->fname,
+ memory, memory + (NBUFS * blksz) - 1);
+
+ /* set up an array of buffers, pointing them to the virtual addresses */
+ TprintfT (DBG_LT2, "create_handle IO_TXT Buffer structures fname = `%s', NBUFS= %d, size = %ld (0x%lx)\n", fname,
+ NBUFS, (long) NBUFS * sizeof (Buffer), (long) NBUFS * sizeof (Buffer));
+ hndl->buffers = (Buffer*) __collector_allocCSize (__collector_heap, NBUFS * sizeof (Buffer), 1);
+ if (hndl->buffers == NULL)
+ {
+ TprintfT (0, "create_handle allocCSize for hndl->buffers failed\n");
+ CALL_UTIL (munmap)(memory, NBUFS * blksz);
+ return NULL;
+ }
+ for (int i = 0; i < NBUFS; i++)
+ {
+ Buffer *buf = &hndl->buffers[i];
+ buf->vaddr = memory + i * blksz;
+ buf->state = ST_FREE;
+ }
+ /* set the file pointer to the beginning of the file */
+ hndl->curpos = CUR_MAKE (0, 0, 0);
+ }
+ else
+ {
+ if (hndl->iotype == IO_BLK)
+ {
+ long nflow = CALL_UTIL (sysconf)(_SC_NPROCESSORS_ONLN);
+ if (nflow < 16)
+ nflow = 16;
+ hndl->nflow = (uint32_t) nflow;
+ }
+ else if (hndl->iotype == IO_SEQ)
+ hndl->nflow = 1;
+ TprintfT (DBG_LT2, "create_handle calling allocCSize blkstate fname=`%s' nflow=%d NCHUNKS=%d size=%ld (0x%lx)\n",
+ fname, hndl->nflow, NCHUNKS,
+ (long) (hndl->nflow * NCHUNKS * sizeof (uint32_t)),
+ (long) (hndl->nflow * NCHUNKS * sizeof (uint32_t)));
+ uint32_t *blkstate = (uint32_t*) __collector_allocCSize (__collector_heap, hndl->nflow * NCHUNKS * sizeof (uint32_t), 1);
+ if (blkstate == NULL)
+ return NULL;
+ for (int j = 0; j < hndl->nflow * NCHUNKS; ++j)
+ blkstate[j] = ST_INIT;
+ hndl->blkstate = blkstate;
+ TprintfT (DBG_LT2, "create_handle calling allocCSize blkoff fname=`%s' nflow=%d NCHUNKS=%d size=%ld (0x%lx)\n",
+ fname, hndl->nflow, NCHUNKS,
+ (long) (hndl->nflow * NCHUNKS * sizeof (uint32_t)),
+ (long) (hndl->nflow * NCHUNKS * sizeof (uint32_t)));
+ hndl->blkoff = (uint32_t*) __collector_allocCSize (__collector_heap, hndl->nflow * NCHUNKS * sizeof (uint32_t), 1);
+ if (hndl->blkoff == NULL)
+ return NULL;
+ hndl->nchnk = 0;
+ for (int j = 0; j < NCHUNKS; ++j)
+ {
+ hndl->chunks[j] = NULL;
+ hndl->chblk[j] = 0;
+ }
+ }
+ hndl->active = 1;
+ return hndl;
+}
+
+static void
+deleteHandle (DataHandle *hndl)
+{
+ if (hndl->active == 0)
+ return;
+ hndl->active = 0;
+
+ if (hndl->iotype == IO_BLK || hndl->iotype == IO_SEQ)
+ {
+ /* Delete all blocks. */
+ /* Since access to hndl->active is not synchronized it's still
+ * possible that we leave some blocks undeleted.
+ */
+ for (int j = 0; j < hndl->nflow * NCHUNKS; ++j)
+ {
+ uint32_t oldstate = hndl->blkstate[j];
+ if (oldstate != ST_FREE)
+ continue;
+ /* Mark as busy */
+ uint32_t state = __collector_cas_32 (hndl->blkstate + j, oldstate, ST_BUSY);
+ if (state != oldstate)
+ continue;
+ deleteBlock (hndl, j / NCHUNKS, j % NCHUNKS);
+ }
+ }
+ else if (hndl->iotype == IO_TXT)
+ {
+ /*
+ * First, make sure that buffers are in some "coherent" state:
+ *
+ * At this point, the handle is no longer active. But some threads
+ * might already have passed the active-handle check and are now
+ * trying to schedule writes. So, set the handle pointer to "busy".
+ * This will prevent new writes from being scheduled. Threads that
+ * polling will time out.
+ */
+ hrtime_t timeout = __collector_gethrtime () + 10 * ((hrtime_t) 1000000000);
+ volatile uint32_t busy = 0;
+ while (1)
+ {
+ uint32_t indx;
+ uint64_t opos, npos, foff;
+ int blk_off;
+ /* read the current pointer */
+ opos = hndl->curpos;
+ busy = CUR_BUSY (opos);
+ indx = CUR_INDX (opos);
+ foff = CUR_FOFF (opos);
+ if (busy == 1)
+ {
+ if (__collector_gethrtime () > timeout)
+ {
+ TprintfT (0, "deleteHandle ERROR: timeout cleaning up handle for %s\n", hndl->fname);
+ return;
+ }
+ continue;
+ }
+ blk_off = foff & (blksz - 1);
+ if (blk_off > 0)
+ foff += blksz - blk_off;
+ npos = CUR_MAKE (1, indx, foff);
+
+ /* try to update the handle position atomically */
+ if (__collector_cas_64p (&hndl->curpos, &opos, &npos) != opos)
+ continue;
+
+ /*
+ * If the last buffer won't be filled, account for
+ * the white space at the end so that the buffer will
+ * be deleted properly.
+ */
+ if (blk_off > 0)
+ {
+ Buffer *buf = &hndl->buffers[indx];
+ if (__collector_subget_32 (&buf->left, blksz - blk_off) == 0)
+ deleteBuffer (buf);
+ }
+ break;
+ }
+ /* wait for buffers to be deleted */
+ timeout = __collector_gethrtime () + 10 * ((hrtime_t) 1000000000);
+ for (int i = 0; i < NBUFS; i++)
+ {
+ Buffer *buf = &hndl->buffers[i];
+ while (__collector_cas_32 (&buf->state, ST_FREE, ST_INIT) != ST_FREE)
+ {
+ if (__collector_gethrtime () > timeout)
+ {
+ TprintfT (0, "deleteHandle ERROR: timeout waiting for buffer %d for %s\n", i, hndl->fname);
+ return;
+ }
+ }
+ CALL_UTIL (munmap)(buf->vaddr, blksz);
+ }
+
+ /* free buffer array */
+ __collector_freeCSize (__collector_heap, hndl->buffers, NBUFS * sizeof (Buffer));
+ }
+}
+
+void
+__collector_delete_handle (DataHandle *hndl)
+{
+ if (hndl == NULL)
+ return;
+ deleteHandle (hndl);
+}
+
+static int
+exp_size_ck (int nblocks, char *fname)
+{
+ if (size_limit == 0)
+ return 0;
+ /* do an atomic add to the cur_size */
+ uint32_t old_size = cur_size;
+ uint32_t new_size;
+ for (;;)
+ {
+ new_size = __collector_cas_32 (&cur_size, old_size, old_size + nblocks);
+ if (new_size == old_size)
+ {
+ new_size = old_size + nblocks;
+ break;
+ }
+ old_size = new_size;
+ }
+ TprintfT (DBG_LT2, "exp_size_ck() adding %d block(s); new_size = %d, limit = %d blocks; fname = %s\n",
+ nblocks, new_size, size_limit, fname);
+
+ /* pause the entire collector if we have exceeded the limit */
+ if (old_size < size_limit && new_size >= size_limit)
+ {
+ TprintfT (0, "exp_size_ck() experiment size limit exceeded; new_size = %ld, limit = %ld blocks; fname = %s\n",
+ (long) new_size, (long) size_limit, fname);
+ (void) __collector_log_write ("<event kind=\"%s\" id=\"%d\">%ld blocks (each %ld bytes)</event>\n",
+ SP_JCMD_CWARN, COL_ERROR_SIZELIM, (long) size_limit, (long) blksz);
+ __collector_pause_m ("size-limit");
+ __collector_terminate_expt ();
+ return -1;
+ }
+ return 0;
+}
+
+int
+__collector_set_size_limit (char *par)
+{
+ if (!initialized)
+ init ();
+
+ int lim = CALL_UTIL (strtol)(par, &par, 0);
+ size_limit = (uint32_t) ((uint64_t) lim * 1024 * 1024 / blksz);
+ TprintfT (DBG_LT0, "collector_size_limit set to %d MB. = %d blocks\n",
+ lim, size_limit);
+ (void) __collector_log_write ("<setting limit=\"%d\"/>\n", lim);
+ return COL_ERROR_NONE;
+}
+
+/*
+ * IO_BLK and IO_SEQ files
+ */
+
+/*
+ * Allocate a chunk (nflow blocks) contiguously in virtual memory.
+ * Its blocks will be mmapped to the file individually.
+ */
+static int
+allocateChunk (DataHandle *hndl, unsigned ichunk)
+{
+ /*
+ * hndl->chunks[ichunk] is one of:
+ * - NULL (initial value)
+ * - CHUNK_BUSY (transition state when allocating the chunk)
+ * - some address (the allocated chunk)
+ */
+ uint8_t *CHUNK_BUSY = (uint8_t *) 1;
+ hrtime_t timeout = 0;
+ while (1)
+ {
+ if (hndl->chunks[ichunk] > CHUNK_BUSY)
+ return 0; /* the chunk has already been allocated */
+ /* try to allocate the chunk (change: NULL => CHUNK_BUSY) */
+ if (__collector_cas_ptr (&hndl->chunks[ichunk], NULL, CHUNK_BUSY) == NULL)
+ {
+ /* allocate virtual memory */
+ uint8_t *newchunk = (uint8_t*) CALL_UTIL (mmap64)(0,
+ (size_t) (blksz * hndl->nflow),
+ PROT_READ | PROT_WRITE,
+#if ARCH(SPARC)
+ MAP_SHARED | MAP_ANON,
+#else
+ MAP_PRIVATE | MAP_ANON,
+#endif
+ -1, (off64_t) 0);
+ if (newchunk == MAP_FAILED)
+ {
+ deleteHandle (hndl);
+ TprintfT (DBG_LT1, " allocateChunk mmap: start=0x%x length=%ld (0x%lx), offset=%d ret=%p\n",
+ 0, (long) (blksz * hndl->nflow),
+ (long) (blksz * hndl->nflow), 0, newchunk);
+ TprintfT (0, "allocateChunk: can't mmap MAP_ANON (for %s): %s\n", hndl->fname, CALL_UTIL (strerror) (errno));
+ __collector_log_write ("<event kind=\"%s\" id=\"%d\" ec=\"%d\">MAP_ANON (for %s)</event>\n",
+ SP_JCMD_CERROR, COL_ERROR_FILEMAP, errno, hndl->fname);
+ return 1;
+ }
+
+ /* assign allocated address to our chunk */
+ if (__collector_cas_ptr (&hndl->chunks[ichunk], CHUNK_BUSY, newchunk) != CHUNK_BUSY)
+ {
+ TprintfT (0, "allocateChunk: can't release chunk CAS lock for %s\n", hndl->fname);
+ __collector_log_write ("<event kind=\"%s\" id=\"%d\">couldn't release chunk CAS lock (%s)</event>\n",
+ SP_JCMD_CERROR, COL_ERROR_GENERAL, hndl->fname);
+ }
+ __collector_inc_32 (&hndl->nchnk);
+ return 0;
+ }
+
+ /* check for time out */
+ if (timeout == 0)
+ timeout = __collector_gethrtime () + 10 * ((hrtime_t) 1000000000);
+ if (__collector_gethrtime () > timeout)
+ {
+ TprintfT (0, "allocateChunk: timeout for %s\n", hndl->fname);
+ __collector_log_write ("<event kind=\"%s\" id=\"%d\">timeout allocating chunk for %s</event>\n",
+ SP_JCMD_CERROR, COL_ERROR_GENERAL, hndl->fname);
+ return 1;
+ }
+ }
+}
+
+/*
+ * Get the address for block (iflow,ichunk).
+ */
+static uint8_t *
+getBlock (DataHandle *hndl, unsigned iflow, unsigned ichunk)
+{
+ return hndl->chunks[ichunk] + iflow * blksz;
+}
+
+/*
+ * Map block (iflow,ichunk) to the next part of the file.
+ */
+static int
+remapBlock (DataHandle *hndl, unsigned iflow, unsigned ichunk)
+{
+ int rc = 0;
+ int fd;
+ /* Get the old file nblk and increment it atomically. */
+ uint32_t oldblk = hndl->nblk;
+ for (;;)
+ {
+ uint32_t newblk = __collector_cas_32 (&hndl->nblk, oldblk, oldblk + 1);
+ if (newblk == oldblk)
+ break;
+ oldblk = newblk;
+ }
+ off64_t offset = (off64_t) oldblk * blksz;
+
+ /* 6618470: disable thread cancellation */
+ int old_cstate;
+ pthread_setcancelstate (PTHREAD_CANCEL_DISABLE, &old_cstate);
+
+ /* Open the file. */
+ int iter = 0;
+ hrtime_t tso = __collector_gethrtime ();
+ for (;;)
+ {
+ fd = CALL_UTIL (open)(hndl->fname, O_RDWR, 0);
+ if (fd < 0)
+ {
+ if (errno == EMFILE)
+ {
+ /* too many open files */
+ iter++;
+ if (iter > 1000)
+ {
+ /* we've tried 1000 times; kick error back to caller */
+ char errmsg[MAXPATHLEN + 50];
+ hrtime_t teo = __collector_gethrtime ();
+ double deltato = (double) (teo - tso) / 1000000.;
+ (void) CALL_UTIL (snprintf) (errmsg, sizeof (errmsg), " t=%d, %s: open-retries-failed = %d, %3.6f ms.; remap",
+ __collector_thr_self (), hndl->fname, iter, deltato);
+ __collector_log_write ("<event kind=\"%s\" id=\"%d\">%s</event>\n",
+ SP_JCMD_COMMENT, COL_COMMENT_NONE, errmsg);
+ rc = 1;
+ goto exit;
+ }
+ /* keep trying */
+ continue;
+ }
+ deleteHandle (hndl);
+ TprintfT (0, "remapBlock: can't open file: %s: %s\n", hndl->fname, STR (CALL_UTIL (strerror)(errno)));
+ __collector_log_write ("<event kind=\"%s\" id=\"%d\" ec=\"%d\">t=%llu, %s: remap </event>\n",
+ SP_JCMD_CERROR, COL_ERROR_FILEOPN, errno,
+ (unsigned long long) __collector_thr_self (),
+ hndl->fname);
+ rc = 1;
+ goto exit;
+ }
+ else
+ break;
+ }
+
+ /* report number of retries of the open due to too many open fd's */
+ if (iter > 0)
+ {
+ char errmsg[MAXPATHLEN + 50];
+ hrtime_t teo = __collector_gethrtime ();
+ double deltato = (double) (teo - tso) / 1000000.;
+ (void) CALL_UTIL (snprintf) (errmsg, sizeof (errmsg), " t=%d, %s: open-retries = %d, %3.6f ms.; remap",
+ __collector_thr_self (), hndl->fname, iter, deltato);
+ __collector_log_write ("<event kind=\"%s\" id=\"%d\">%s</event>\n",
+ SP_JCMD_COMMENT, COL_COMMENT_NONE, errmsg);
+ }
+
+ /* Ensure disk space is allocated and the block offset is 0 */
+ uint32_t zero = 0;
+ int n = CALL_UTIL (pwrite64)(fd, &zero, sizeof (zero), (off64_t) (offset + blksz - sizeof (zero)));
+ if (n <= 0)
+ {
+ deleteHandle (hndl);
+ TprintfT (0, "remapBlock: can't pwrite file: %s : errno=%d\n", hndl->fname, errno);
+ __collector_log_write ("<event kind=\"%s\" id=\"%d\" ec=\"%d\">%s: remap</event>\n",
+ SP_JCMD_CERROR, COL_ERROR_NOSPACE, errno, hndl->fname);
+ CALL_UTIL (close)(fd);
+ rc = 1;
+ goto exit;
+ }
+ hndl->blkoff[iflow * NCHUNKS + ichunk] = 0;
+
+ /* Map block to file */
+ uint8_t *bptr = getBlock (hndl, iflow, ichunk);
+ uint8_t *vaddr = (uint8_t *) CALL_UTIL (mmap64)(
+ (void*) bptr,
+ (size_t) blksz,
+ PROT_READ | PROT_WRITE,
+ MAP_SHARED | MAP_FIXED,
+ fd,
+ offset);
+
+ if (vaddr != bptr)
+ {
+ deleteHandle (hndl);
+ TprintfT (DBG_LT1, " remapBlock mmap: start=%p length=%ld (0x%lx) offset=0x%llx ret=%p\n",
+ bptr, (long) blksz, (long) blksz, (long long) offset, vaddr);
+ TprintfT (0, "remapBlock: can't mmap file: %s : errno=%d\n", hndl->fname, errno);
+ (void) __collector_log_write ("<event kind=\"%s\" id=\"%d\" ec=\"%d\">%s: remap</event>\n",
+ SP_JCMD_CERROR, COL_ERROR_FILEMAP, errno, hndl->fname);
+ CALL_UTIL (close)(fd);
+ rc = 1;
+ goto exit;
+ }
+ CALL_UTIL (close)(fd);
+
+ if (hndl->exempt == 0)
+ exp_size_ck (1, hndl->fname);
+ else
+ Tprintf (DBG_LT1, "exp_size_ck() bypassed for %d block(s); exempt fname = %s\n",
+ 1, hndl->fname);
+exit:
+ /* Restore the previous cancellation state */
+ pthread_setcancelstate (old_cstate, NULL);
+
+ return rc;
+}
+
+static int
+newBlock (DataHandle *hndl, unsigned iflow, unsigned ichunk)
+{
+ if (allocateChunk (hndl, ichunk) != 0)
+ return 1;
+ if (remapBlock (hndl, iflow, ichunk) != 0)
+ return 1;
+
+ /* Update the number of active blocks */
+ __collector_inc_32 (hndl->chblk + ichunk);
+ return 0;
+}
+
+static void
+deleteBlock (DataHandle *hndl, unsigned iflow, unsigned ichunk)
+{
+ uint8_t *bptr = getBlock (hndl, iflow, ichunk);
+ CALL_UTIL (munmap)((void*) bptr, blksz);
+ hndl->blkstate[iflow * NCHUNKS + ichunk] = ST_INIT;
+
+ /* Update the number of active blocks */
+ __collector_dec_32 (hndl->chblk + ichunk);
+}
+
+int
+__collector_write_record (DataHandle *hndl, Common_packet *pckt)
+{
+ if (hndl == NULL || !hndl->active)
+ return 1;
+ /* fill in the fields of the common packet structure */
+ if (pckt->type == 0)
+ pckt->type = hndl->kind;
+ if (pckt->tstamp == 0)
+ pckt->tstamp = __collector_gethrtime ();
+ if (pckt->lwp_id == 0)
+ pckt->lwp_id = __collector_lwp_self ();
+ if (pckt->thr_id == 0)
+ pckt->thr_id = __collector_thr_self ();
+ if (pckt->cpu_id == 0)
+ pckt->cpu_id = CALL_UTIL (getcpuid)();
+ if (pckt->tsize == 0)
+ pckt->tsize = sizeof (Common_packet);
+ TprintfT (DBG_LT3, "collector_write_record to %s, type:%d tsize:%d\n",
+ hndl->fname, pckt->type, pckt->tsize);
+ return __collector_write_packet (hndl, (CM_Packet*) pckt);
+}
+
+int
+__collector_write_packet (DataHandle *hndl, CM_Packet *pckt)
+{
+ if (hndl == NULL || !hndl->active)
+ return 1;
+
+ /* if the experiment is not open, there should be no writes */
+ if (__collector_expstate != EXP_OPEN)
+ {
+#ifdef DEBUG
+ char *xstate;
+ switch (__collector_expstate)
+ {
+ case EXP_INIT:
+ xstate = "EXP_INIT";
+ break;
+ case EXP_OPEN:
+ xstate = "EXP_OPEN";
+ break;
+ case EXP_PAUSED:
+ xstate = "EXP_PAUSED";
+ break;
+ case EXP_CLOSED:
+ xstate = "EXP_CLOSED";
+ break;
+ default:
+ xstate = "Unknown";
+ break;
+ }
+ TprintfT (0, "collector_write_packet: write to %s while experiment state is %s\n",
+ hndl->fname, xstate);
+#endif
+ return 1;
+ }
+ int recsz = pckt->tsize;
+ if (recsz > blksz)
+ {
+ TprintfT (0, "collector_write_packet: packet too long: %d (max %ld)\n", recsz, blksz);
+ return 1;
+ }
+ unsigned tid = (__collector_no_threads ? __collector_lwp_self () : __collector_thr_self ());
+ unsigned iflow = tid % hndl->nflow;
+
+ /* Acquire block */
+ uint32_t *sptr = &hndl->blkstate[iflow * NCHUNKS];
+ uint32_t state = ST_BUSY;
+ unsigned ichunk;
+ for (ichunk = 0; ichunk < NCHUNKS; ++ichunk)
+ {
+ uint32_t oldstate = sptr[ichunk];
+ if (oldstate == ST_BUSY)
+ continue;
+ /* Mark as busy */
+ state = __collector_cas_32 (sptr + ichunk, oldstate, ST_BUSY);
+ if (state == oldstate)
+ break;
+ if (state == ST_BUSY)
+ continue;
+ /* It's possible the state changed from ST_INIT to ST_FREE */
+ oldstate = state;
+ state = __collector_cas_32 (sptr + ichunk, oldstate, ST_BUSY);
+ if (state == oldstate)
+ break;
+ }
+
+ if (state == ST_BUSY || ichunk == NCHUNKS)
+ {
+ /* We are out of blocks for this data flow.
+ * We might switch to another flow but for now report and return.
+ */
+ TprintfT (0, "collector_write_packet: all %d blocks on flow %d for %s are busy\n",
+ NCHUNKS, iflow, hndl->fname);
+ return 1;
+ }
+
+ if (state == ST_INIT && newBlock (hndl, iflow, ichunk) != 0)
+ return 1;
+ uint8_t *bptr = getBlock (hndl, iflow, ichunk);
+ uint32_t blkoff = hndl->blkoff[iflow * NCHUNKS + ichunk];
+ if (blkoff + recsz > blksz)
+ {
+ /* The record doesn't fit. Close the block */
+ if (blkoff < blksz)
+ {
+ Common_packet *closed = (Common_packet *) (bptr + blkoff);
+ closed->type = CLOSED_PCKT;
+ closed->tsize = blksz - blkoff; /* redundant */
+ }
+ if (remapBlock (hndl, iflow, ichunk) != 0)
+ return 1;
+ blkoff = hndl->blkoff[iflow * NCHUNKS + ichunk];
+ }
+ if (blkoff + recsz < blksz)
+ {
+ /* Set the empty padding */
+ Common_packet *empty = (Common_packet *) (bptr + blkoff + recsz);
+ empty->type = EMPTY_PCKT;
+ empty->tsize = blksz - blkoff - recsz;
+ }
+ __collector_memcpy (bptr + blkoff, pckt, recsz);
+
+ /* Release block */
+ if (hndl->active == 0)
+ {
+ deleteBlock (hndl, iflow, ichunk);
+ return 0;
+ }
+ hndl->blkoff[iflow * NCHUNKS + ichunk] += recsz;
+ sptr[ichunk] = ST_FREE;
+ return 0;
+}
+
+/*
+ * IO_TXT files
+ *
+ * IO_TXT covers the case where many threads are trying to write text messages
+ * sequentially (atomically) to a file. Examples include SP_LOG_FILE and SP_MAP_FILE.
+ *
+ * The file is not written directly, but by writing to mmapped virtual memory.
+ * The granularity of the mapping is a "Buffer". There may be as many as
+ * NBUFS buffers at any one time.
+ *
+ * The current position of the file is handled via hndl->curpos.
+ *
+ * * It is accessed atomically with 64-bit CAS instructions.
+ *
+ * * This 64-bit word encapsulates:
+ * - busy: a bit to lock access to hndl->curpos
+ * - indx: an index indicating which Buffer to use for the current position
+ * - foff: the file offset
+ *
+ * * The contents are accessed with:
+ * - unpack macros: CUR_BUSY CUR_INDX CUR_FOFF
+ * - pack macro : CUR_MAKE
+ *
+ * Conceptually, what happens when a thread wants to write a message is:
+ * - acquire the hndl->curpos "busy" lock
+ * . acquire and map new Buffers if needed to complete the message
+ * . update the file offset
+ * . release the lock
+ * - write to the corresponding buffers
+ *
+ * Each Buffer has a buf->left field that tracks how many more bytes
+ * need to be written to the Buffer. After a thread writes to a Buffer,
+ * it decrements buf->left atomically. When buf->left reaches 0, the
+ * Buffer (mapping) is deleted, freeing the Buffer for a new mapping.
+ *
+ * The actual implementation has some twists:
+ *
+ * * If the entire text message fits into the current Buffer -- that is,
+ * no new Buffers are needed -- the thread does not acquire the lock.
+ * It simply updates hndl->curpos atomically to the new file offset.
+ *
+ * * There are various timeouts to prevent hangs in case of abnormalities.
+ */
+static int
+is_not_the_log_file (char *fname)
+{
+ if (CALL_UTIL (strstr)(fname, SP_LOG_FILE) == NULL)
+ return 1;
+ return 0;
+}
+
+static int
+mapBuffer (char *fname, Buffer *buf, off64_t foff)
+{
+ int rc = 0;
+ /* open fname */
+ int fd = CALL_UTIL (open)(fname, O_RDWR, 0);
+ if (fd < 0)
+ {
+ TprintfT (0, "mapBuffer ERROR: can't open file: %s\n", fname);
+ if (is_not_the_log_file (fname))
+ __collector_log_write ("<event kind=\"%s\" id=\"%d\" ec=\"%d\">%s: mapBuffer</event>\n",
+ SP_JCMD_CERROR, COL_ERROR_FILEOPN, errno, fname);
+ return 1;
+ }
+ TprintfT (DBG_LT2, "mapBuffer pwrite file %s at 0x%llx\n", fname, (long long) foff);
+
+ /* ensure disk space is allocated */
+ char nl = '\n';
+ int n = CALL_UTIL (pwrite64)(fd, &nl, sizeof (nl), (off64_t) (foff + blksz - sizeof (nl)));
+ if (n <= 0)
+ {
+ TprintfT (0, "mapBuffer ERROR: can't pwrite file %s at 0x%llx\n", fname,
+ (long long) (foff + blksz - sizeof (nl)));
+ if (is_not_the_log_file (fname))
+ __collector_log_write ("<event kind=\"%s\" id=\"%d\" ec=\"%d\">%s: mapBuffer</event>\n",
+ SP_JCMD_CERROR, COL_ERROR_FILETRNC, errno, fname);
+ rc = 1;
+ goto exit;
+ }
+ /* mmap buf->vaddr to fname at foff */
+ uint8_t *vaddr = CALL_UTIL (mmap64)(buf->vaddr, (size_t) blksz,
+ PROT_READ | PROT_WRITE, MAP_SHARED | MAP_FIXED, fd, foff);
+ if (vaddr != buf->vaddr)
+ {
+ TprintfT (DBG_LT1, " mapBuffer mmap: start=%p length=%ld (0x%lx) offset=0x%llx ret=%p\n",
+ buf->vaddr, blksz, blksz, (long long) foff, vaddr);
+ TprintfT (0, "mapBuffer ERROR: can't mmap %s: vaddr=%p size=%ld (0x%lx) ret=%p off=0x%llx errno=%d\n",
+ fname, buf->vaddr, blksz, blksz, vaddr, (long long) foff, errno);
+ if (is_not_the_log_file (fname))
+ __collector_log_write ("<event kind=\"%s\" id=\"%d\" ec=\"%d\">%s: mapBuffer</event>\n",
+ SP_JCMD_CERROR, COL_ERROR_FILEMAP, errno, fname);
+ rc = 1;
+ }
+ else
+ buf->left = blksz;
+exit:
+ CALL_UTIL (close)(fd);
+
+ /* Should we check buffer size? Let's not since:
+ * - IO_TXT is typically not going to be that big
+ * - we want log.xml to be treated specially
+ */
+ /* exp_size_ck( 1, fname ); */
+ return rc;
+}
+
+static int
+newBuffer (DataHandle *hndl, uint64_t foff)
+{
+ /* find a ST_FREE buffer and mark it ST_BUSY */
+ int ibuf;
+ for (ibuf = 0; ibuf < NBUFS; ibuf++)
+ if (__collector_cas_32 (&hndl->buffers[ibuf].state, ST_FREE, ST_BUSY) == ST_FREE)
+ break;
+ if (ibuf >= NBUFS)
+ {
+ TprintfT (0, "newBuffer ERROR: all buffers busy for %s\n", hndl->fname);
+ return -1;
+ }
+ Buffer *nbuf = hndl->buffers + ibuf;
+
+ /* map buffer */
+ if (mapBuffer (hndl->fname, nbuf, foff) != 0)
+ {
+ nbuf->state = ST_FREE;
+ ibuf = -1;
+ goto exit;
+ }
+exit:
+ return ibuf;
+}
+
+static void
+writeBuffer (Buffer *buf, int blk_off, char *src, int len)
+{
+ __collector_memcpy (buf->vaddr + blk_off, src, len);
+ if (__collector_subget_32 (&buf->left, len) == 0)
+ deleteBuffer (buf);
+}
+
+static void
+deleteBuffer (Buffer *buf)
+{
+ buf->state = ST_FREE;
+}
+
+int
+__collector_write_string (DataHandle *hndl, char *src, int len)
+{
+ if (hndl == NULL || !hndl->active)
+ return 1;
+ if (len <= 0)
+ return 0;
+
+ hrtime_t timeout = __collector_gethrtime () + 20 * ((hrtime_t) 1000000000);
+ volatile uint32_t busy = 0;
+ while (1)
+ {
+ uint32_t indx;
+ uint64_t opos, foff, base;
+ int blk_off, buf_indices[NBUFS], ibuf, nbufs;
+
+ /* read and decode the current pointer */
+ opos = hndl->curpos;
+ busy = CUR_BUSY (opos);
+ indx = CUR_INDX (opos);
+ foff = CUR_FOFF (opos);
+ if (busy == 1)
+ {
+ if (__collector_gethrtime () > timeout)
+ {
+ /*
+ * E.g., if another thread deleted the handle
+ * after we checked hndl->active.
+ */
+ TprintfT (0, "__collector_write_string ERROR: timeout writing length=%d to text file: %s\n", len, hndl->fname);
+ return 1;
+ }
+ continue;
+ }
+
+ /* initial block offset */
+ blk_off = foff & (blksz - 1);
+
+ /* number of new buffers to map */
+ int lastbuf = ((foff + len - 1) >> log2blksz); /* last block file index we will write */
+ int firstbuf = ((foff - 1) >> log2blksz); /* last block file index we have written */
+ nbufs = lastbuf - firstbuf;
+ TprintfT (DBG_LT2, "__collector_write_string firstbuf = %d, lastbuf = %d, nbufs = %d, log2blksz = %ld\n",
+ firstbuf, lastbuf, nbufs, log2blksz);
+ if (nbufs >= NBUFS)
+ {
+ Tprintf (0, "__collector_write_string ERROR: string of length %d too long to be written to text file: %s\n", len, hndl->fname);
+ return 1;
+ }
+
+ /* things are simple if we don't need new buffers */
+ if (nbufs == 0)
+ {
+ /* try to update the handle position atomically */
+ uint64_t npos = CUR_MAKE (0, indx, foff + len);
+ if (__collector_cas_64p (&hndl->curpos, &opos, &npos) != opos)
+ continue;
+
+ /* success! copy our string and we're done */
+ TprintfT (DBG_LT2, "__collector_write_string writeBuffer[%d]: vaddr = %p, len = %d, foff = %lld, '%s'\n",
+ indx, hndl->buffers[indx].vaddr, len, (long long) foff, src);
+ writeBuffer (&hndl->buffers[indx], foff & (blksz - 1), src, len);
+ break;
+ }
+
+ /* initialize the new signal mask */
+ sigset_t new_mask;
+ sigset_t old_mask;
+ CALL_UTIL (sigfillset)(&new_mask);
+
+ /* 6618470: disable thread cancellation */
+ int old_cstate;
+ pthread_setcancelstate (PTHREAD_CANCEL_DISABLE, &old_cstate);
+ /* block all signals */
+ CALL_UTIL (sigprocmask)(SIG_SETMASK, &new_mask, &old_mask);
+
+ /* but if we need new buffers, "lock" the handle pointer */
+ uint64_t lpos = CUR_MAKE (1, indx, foff);
+ if (__collector_cas_64p (&hndl->curpos, &opos, &lpos) != opos)
+ {
+ /* restore signal mask */
+ CALL_UTIL (sigprocmask)(SIG_SETMASK, &old_mask, NULL);
+ /* Restore the previous cancellation state */
+ pthread_setcancelstate (old_cstate, NULL);
+ continue;
+ }
+
+ /* map new buffers */
+ base = ((foff - 1) & ~(blksz - 1)); /* last buffer to have been mapped */
+ for (ibuf = 0; ibuf < nbufs; ibuf++)
+ {
+ base += blksz;
+ buf_indices[ibuf] = newBuffer (hndl, base);
+ if (buf_indices[ibuf] < 0)
+ break;
+ }
+
+ /* "unlock" the handle pointer */
+ uint64_t npos = CUR_MAKE (0, indx, foff);
+ if (ibuf == nbufs)
+ npos = CUR_MAKE (0, buf_indices[nbufs - 1], foff + len);
+ if (__collector_cas_64p (&hndl->curpos, &lpos, &npos) != lpos)
+ {
+ TprintfT (0, "__collector_write_string ERROR: file handle corrupted: %s\n", hndl->fname);
+ /*
+ * At this point, the handle is apparently corrupted and
+ * presumably locked. No telling what's going on. Still
+ * let's proceed and write our data and let a later thread
+ * raise an error if it encounters one.
+ */
+ }
+
+ /* restore signal mask */
+ CALL_UTIL (sigprocmask)(SIG_SETMASK, &old_mask, NULL);
+ /* Restore the previous cancellation state */
+ pthread_setcancelstate (old_cstate, NULL);
+
+ /* if we couldn't map all the buffers we needed, don't write any part of the string */
+ if (ibuf < nbufs)
+ {
+ TprintfT (0, "__collector_write_string ERROR: can't map new buffer: %s\n", hndl->fname);
+ return 1;
+ }
+
+ /* write any data to the old block */
+ if (blk_off > 0)
+ {
+ TprintfT (DBG_LT2, "__collector_write_string partial writeBuffer[%d]: len=%ld, foff = %d '%s'\n",
+ indx, blksz - blk_off, blk_off, src);
+ writeBuffer (&hndl->buffers[indx], blk_off, src, blksz - blk_off);
+ src += blksz - blk_off;
+ len -= blksz - blk_off;
+ }
+
+ /* write data to the new blocks */
+ for (ibuf = 0; ibuf < nbufs; ibuf++)
+ {
+ int clen = blksz;
+ if (clen > len)
+ clen = len;
+ TprintfT (DBG_LT2, "__collector_write_string continue writeBuffer[%d]: len= %d, %s",
+ ibuf, clen, src);
+ writeBuffer (&hndl->buffers[buf_indices[ibuf]], 0, src, clen);
+ src += clen;
+ len -= clen;
+ }
+ break;
+ }
+ return 0;
+}
+
diff --git a/gprofng/libcollector/iotrace.c b/gprofng/libcollector/iotrace.c
new file mode 100644
index 00000000000..9b47724bab9
--- /dev/null
+++ b/gprofng/libcollector/iotrace.c
@@ -0,0 +1,3717 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+/*
+ * IO events
+ */
+#include "config.h"
+#include <dlfcn.h>
+#include <errno.h>
+#include <stdarg.h>
+#include <stdlib.h>
+
+// create() and others are defined in fcntl.h.
+// Our 'create' should not have the __nonnull attribute
+#undef __nonnull
+#define __nonnull(x)
+#include <fcntl.h>
+
+#include "gp-defs.h"
+#include "collector_module.h"
+#include "gp-experiment.h"
+#include "data_pckts.h"
+#include "tsd.h"
+
+/* TprintfT(<level>,...) definitions. Adjust per module as needed */
+#define DBG_LT0 0 // for high-level configuration, unexpected errors/warnings
+#define DBG_LTT 0 // for interposition on GLIBC functions
+#define DBG_LT1 1 // for configuration details, warnings
+#define DBG_LT2 2
+#define DBG_LT3 3
+
+/* define the packet that will be written out */
+typedef struct IOTrace_packet
+{ /* IO tracing packet */
+ Common_packet comm;
+ IOTrace_type iotype; /* IO type */
+ int32_t fd; /* file descriptor */
+ Size_type nbyte; /* number of bytes */
+ hrtime_t requested; /* time of IO requested */
+ int32_t ofd; /* original file descriptor */
+ FileSystem_type fstype; /* file system type */
+ char fname; /* file name */
+} IOTrace_packet;
+
+typedef long long offset_t;
+
+static int open_experiment (const char *);
+static int start_data_collection (void);
+static int stop_data_collection (void);
+static int close_experiment (void);
+static int detach_experiment (void);
+static int init_io_intf ();
+
+static ModuleInterface module_interface ={
+ SP_IOTRACE_FILE, /* description */
+ NULL, /* initInterface */
+ open_experiment, /* openExperiment */
+ start_data_collection, /* startDataCollection */
+ stop_data_collection, /* stopDataCollection */
+ close_experiment, /* closeExperiment */
+ detach_experiment /* detachExperiment (fork child) */
+};
+
+static CollectorInterface *collector_interface = NULL;
+static struct Heap *io_heap = NULL;
+static int io_mode = 0;
+static CollectorModule io_hndl = COLLECTOR_MODULE_ERR;
+static unsigned io_key = COLLECTOR_TSD_INVALID_KEY;
+
+#define CHCK_REENTRANCE(x) (!io_mode || ((x) = collector_interface->getKey( io_key )) == NULL || (*(x) != 0))
+#define RECHCK_REENTRANCE(x) (!io_mode || ((x) = collector_interface->getKey( io_key )) == NULL || (*(x) == 0))
+#define PUSH_REENTRANCE(x) ((*(x))++)
+#define POP_REENTRANCE(x) ((*(x))--)
+
+#define CALL_REAL(x) (__real_##x)
+#define NULL_PTR(x) (__real_##x == NULL)
+
+#define gethrtime collector_interface->getHiResTime
+
+#ifdef DEBUG
+#define Tprintf(...) if (collector_interface) collector_interface->writeDebugInfo( 0, __VA_ARGS__ )
+#define TprintfT(...) if (collector_interface) collector_interface->writeDebugInfo( 1, __VA_ARGS__ )
+#else
+#define Tprintf(...)
+#define TprintfT(...)
+#endif
+
+/* interposition function handles */
+static int (*__real_open)(const char *path, int oflag, ...) = NULL;
+static int (*__real_fcntl)(int fildes, int cmd, ...) = NULL;
+static int (*__real_openat)(int fildes, const char *path, int oflag, ...) = NULL;
+static int (*__real_close)(int fildes) = NULL;
+static FILE *(*__real_fopen)(const char *filename, const char *mode) = NULL;
+static int (*__real_fclose)(FILE *stream) = NULL;
+static int (*__real_dup)(int fildes) = NULL;
+static int (*__real_dup2)(int fildes, int fildes2) = NULL;
+static int (*__real_pipe)(int fildes[2]) = NULL;
+static int (*__real_socket)(int domain, int type, int protocol) = NULL;
+static int (*__real_mkstemp)(char *template) = NULL;
+static int (*__real_mkstemps)(char *template, int slen) = NULL;
+static int (*__real_creat)(const char *path, mode_t mode) = NULL;
+static FILE *(*__real_fdopen)(int fildes, const char *mode) = NULL;
+static ssize_t (*__real_read)(int fildes, void *buf, size_t nbyte) = NULL;
+static ssize_t (*__real_write)(int fildes, const void *buf, size_t nbyte) = NULL;
+static ssize_t (*__real_readv)(int fildes, const struct iovec *iov, int iovcnt) = NULL;
+static ssize_t (*__real_writev)(int fildes, const struct iovec *iov, int iovcnt) = NULL;
+static size_t (*__real_fread)(void *ptr, size_t size, size_t nitems, FILE *stream) = NULL;
+static size_t (*__real_fwrite)(const void *ptr, size_t size, size_t nitems, FILE *stream) = NULL;
+static ssize_t (*__real_pread)(int fildes, void *buf, size_t nbyte, off_t offset) = NULL;
+static ssize_t (*__real_pwrite)(int fildes, const void *buf, size_t nbyte, off_t offset) = NULL;
+static ssize_t (*__real_pwrite64)(int fildes, const void *buf, size_t nbyte, off64_t offset) = NULL;
+static char *(*__real_fgets)(char *s, int n, FILE *stream) = NULL;
+static int (*__real_fputs)(const char *s, FILE *stream) = NULL;
+static int (*__real_fputc)(int c, FILE *stream) = NULL;
+static int (*__real_fprintf)(FILE *stream, const char *format, ...) = NULL;
+static int (*__real_vfprintf)(FILE *stream, const char *format, va_list ap) = NULL;
+static off_t (*__real_lseek)(int fildes, off_t offset, int whence) = NULL;
+static offset_t (*__real_llseek)(int fildes, offset_t offset, int whence) = NULL;
+static int (*__real_chmod)(const char *path, mode_t mode) = NULL;
+static int (*__real_access)(const char *path, int amode) = NULL;
+static int (*__real_rename)(const char *old, const char *new) = NULL;
+static int (*__real_mkdir)(const char *path, mode_t mode) = NULL;
+static int (*__real_getdents)(int fildes, struct dirent *buf, size_t nbyte) = NULL;
+static int (*__real_unlink)(const char *path) = NULL;
+static int (*__real_fseek)(FILE *stream, long offset, int whence) = NULL;
+static void (*__real_rewind)(FILE *stream) = NULL;
+static long (*__real_ftell)(FILE *stream) = NULL;
+static int (*__real_fgetpos)(FILE *stream, fpos_t *pos) = NULL;
+static int (*__real_fsetpos)(FILE *stream, const fpos_t *pos) = NULL;
+static int (*__real_fsync)(int fildes) = NULL;
+static struct dirent *(*__real_readdir)(DIR *dirp) = NULL;
+static int (*__real_flock)(int fd, int operation) = NULL;
+static int (*__real_lockf)(int fildes, int function, off_t size) = NULL;
+static int (*__real_fflush)(FILE *stream) = NULL;
+
+#if WSIZE(32)
+static int (*__real_open64)(const char *path, int oflag, ...) = NULL;
+static int (*__real_creat64)(const char *path, mode_t mode) = NULL;
+static int (*__real_fgetpos64)(FILE *stream, fpos64_t *pos) = NULL;
+static int (*__real_fsetpos64)(FILE *stream, const fpos64_t *pos) = NULL;
+
+#if ARCH(Intel)
+static FILE *(*__real_fopen_2_1)(const char *filename, const char *mode) = NULL;
+static int (*__real_fclose_2_1)(FILE *stream) = NULL;
+static FILE *(*__real_fdopen_2_1)(int fildes, const char *mode) = NULL;
+static int (*__real_fgetpos_2_2)(FILE *stream, fpos_t *pos) = NULL;
+static int (*__real_fsetpos_2_2)(FILE *stream, const fpos_t *pos) = NULL;
+static int (*__real_fgetpos64_2_2)(FILE *stream, fpos64_t *pos) = NULL;
+static int (*__real_fsetpos64_2_2)(FILE *stream, const fpos64_t *pos) = NULL;
+static int (*__real_open64_2_2)(const char *path, int oflag, ...) = NULL;
+static ssize_t (*__real_pread_2_2)(int fildes, void *buf, size_t nbyte, off_t offset) = NULL;
+static ssize_t (*__real_pwrite_2_2)(int fildes, const void *buf, size_t nbyte, off_t offset) = NULL;
+static ssize_t (*__real_pwrite64_2_2)(int fildes, const void *buf, size_t nbyte, off64_t offset) = NULL;
+static FILE *(*__real_fopen_2_0)(const char *filename, const char *mode) = NULL;
+static int (*__real_fclose_2_0)(FILE *stream) = NULL;
+static FILE *(*__real_fdopen_2_0)(int fildes, const char *mode) = NULL;
+static int (*__real_fgetpos_2_0)(FILE *stream, fpos_t *pos) = NULL;
+static int (*__real_fsetpos_2_0)(FILE *stream, const fpos_t *pos) = NULL;
+static int (*__real_fgetpos64_2_1)(FILE *stream, fpos64_t *pos) = NULL;
+static int (*__real_fsetpos64_2_1)(FILE *stream, const fpos64_t *pos) = NULL;
+static int (*__real_open64_2_1)(const char *path, int oflag, ...) = NULL;
+static ssize_t (*__real_pread_2_1)(int fildes, void *buf, size_t nbyte, off_t offset) = NULL;
+static ssize_t (*__real_pwrite_2_1)(int fildes, const void *buf, size_t nbyte, off_t offset) = NULL;
+static ssize_t (*__real_pwrite64_2_1)(int fildes, const void *buf, size_t nbyte, off64_t offset) = NULL;
+#endif /* ARCH() */
+#endif /* WSIZE(32) */
+
+static int
+collector_align_pktsize (int sz)
+{
+ int pktSize = sz;
+ if (sz <= 0)
+ return sz;
+ if ((sz % 8) != 0)
+ {
+ pktSize = (sz / 8) + 1;
+ pktSize *= 8;
+ }
+ return pktSize;
+}
+
+static void
+collector_memset (void *s, int c, size_t n)
+{
+ unsigned char *s1 = s;
+ while (n--)
+ *s1++ = (unsigned char) c;
+}
+
+static size_t
+collector_strlen (const char *s)
+{
+ if (s == NULL)
+ return 0;
+ int len = -1;
+ while (s[++len] != '\0')
+ ;
+ return len;
+}
+
+static size_t
+collector_strncpy (char *dst, const char *src, size_t dstsize)
+{
+ size_t i;
+ for (i = 0; i < dstsize; i++)
+ {
+ dst[i] = src[i];
+ if (src[i] == '\0')
+ break;
+ }
+ return i;
+}
+
+static char *
+collector_strchr (const char *s, int c)
+{
+ do
+ {
+ if (*s == (char) c)
+ return ((char *) s);
+ }
+ while (*s++);
+ return (NULL);
+}
+
+static FileSystem_type
+collector_fstype (const char *path)
+{
+ return UNKNOWNFS_TYPE;
+}
+
+void
+__collector_module_init (CollectorInterface *_collector_interface)
+{
+ if (_collector_interface == NULL)
+ return;
+ collector_interface = _collector_interface;
+ Tprintf (0, "iotrace: __collector_module_init\n");
+ io_hndl = collector_interface->registerModule (&module_interface);
+ /* Initialize next module */
+ ModuleInitFunc next_init = (ModuleInitFunc) dlsym (RTLD_NEXT, "__collector_module_init");
+ if (next_init != NULL)
+ next_init (_collector_interface);
+ return;
+}
+
+static int
+open_experiment (const char *exp)
+{
+ if (collector_interface == NULL)
+ {
+ Tprintf (0, "iotrace: collector_interface is null.\n");
+ return COL_ERROR_IOINIT;
+ }
+ if (io_hndl == COLLECTOR_MODULE_ERR)
+ {
+ Tprintf (0, "iotrace: handle create failed.\n");
+ collector_interface->writeLog ("<event kind=\"%s\" id=\"%d\">data handle not created</event>\n",
+ SP_JCMD_CERROR, COL_ERROR_IOINIT);
+ return COL_ERROR_IOINIT;
+ }
+ TprintfT (0, "iotrace: open_experiment %s\n", exp);
+ if (NULL_PTR (fopen))
+ init_io_intf ();
+ if (io_heap == NULL)
+ {
+ io_heap = collector_interface->newHeap ();
+ if (io_heap == NULL)
+ {
+ Tprintf (0, "iotrace: new heap failed.\n");
+ collector_interface->writeLog ("<event kind=\"%s\" id=\"%d\">new iotrace heap not created</event>\n",
+ SP_JCMD_CERROR, COL_ERROR_IOINIT);
+ return COL_ERROR_IOINIT;
+ }
+ }
+
+ const char *params = collector_interface->getParams ();
+ while (params)
+ {
+ if ((params[0] == 'i') && (params[1] == ':'))
+ {
+ params += 2;
+ break;
+ }
+ params = collector_strchr (params, ';');
+ if (params)
+ params++;
+ }
+ if (params == NULL) /* IO data collection not specified */
+ return COL_ERROR_IOINIT;
+
+ io_key = collector_interface->createKey (sizeof ( int), NULL, NULL);
+ if (io_key == (unsigned) - 1)
+ {
+ Tprintf (0, "iotrace: TSD key create failed.\n");
+ collector_interface->writeLog ("<event kind=\"%s\" id=\"%d\">TSD key not created</event>\n",
+ SP_JCMD_CERROR, COL_ERROR_IOINIT);
+ return COL_ERROR_IOINIT;
+ }
+
+ collector_interface->writeLog ("<profile name=\"%s\">\n", SP_JCMD_IOTRACE);
+ collector_interface->writeLog (" <profdata fname=\"%s\"/>\n",
+ module_interface.description);
+ /* Record IOTrace_packet description */
+ IOTrace_packet *pp = NULL;
+ collector_interface->writeLog (" <profpckt kind=\"%d\" uname=\"IO tracing data\">\n", IOTRACE_PCKT);
+ collector_interface->writeLog (" <field name=\"LWPID\" uname=\"Lightweight process id\" offset=\"%d\" type=\"%s\"/>\n",
+ &pp->comm.lwp_id, sizeof (pp->comm.lwp_id) == 4 ? "INT32" : "INT64");
+ collector_interface->writeLog (" <field name=\"THRID\" uname=\"Thread number\" offset=\"%d\" type=\"%s\"/>\n",
+ &pp->comm.thr_id, sizeof (pp->comm.thr_id) == 4 ? "INT32" : "INT64");
+ collector_interface->writeLog (" <field name=\"CPUID\" uname=\"CPU id\" offset=\"%d\" type=\"%s\"/>\n",
+ &pp->comm.cpu_id, sizeof (pp->comm.cpu_id) == 4 ? "INT32" : "INT64");
+ collector_interface->writeLog (" <field name=\"TSTAMP\" uname=\"High resolution timestamp\" offset=\"%d\" type=\"%s\"/>\n",
+ &pp->comm.tstamp, sizeof (pp->comm.tstamp) == 4 ? "INT32" : "INT64");
+ collector_interface->writeLog (" <field name=\"FRINFO\" offset=\"%d\" type=\"%s\"/>\n",
+ &pp->comm.frinfo, sizeof (pp->comm.frinfo) == 4 ? "INT32" : "INT64");
+ collector_interface->writeLog (" <field name=\"IOTYPE\" uname=\"IO trace function type\" offset=\"%d\" type=\"%s\"/>\n",
+ &pp->iotype, sizeof (pp->iotype) == 4 ? "INT32" : "INT64");
+ collector_interface->writeLog (" <field name=\"IOFD\" uname=\"File descriptor\" offset=\"%d\" type=\"%s\"/>\n",
+ &pp->fd, sizeof (pp->fd) == 4 ? "INT32" : "INT64");
+ collector_interface->writeLog (" <field name=\"IONBYTE\" uname=\"Number of bytes\" offset=\"%d\" type=\"%s\"/>\n",
+ &pp->nbyte, sizeof (pp->nbyte) == 4 ? "INT32" : "INT64");
+ collector_interface->writeLog (" <field name=\"IORQST\" uname=\"Time of IO requested\" offset=\"%d\" type=\"%s\"/>\n",
+ &pp->requested, sizeof (pp->requested) == 4 ? "INT32" : "INT64");
+ collector_interface->writeLog (" <field name=\"IOOFD\" uname=\"Original file descriptor\" offset=\"%d\" type=\"%s\"/>\n",
+ &pp->ofd, sizeof (pp->ofd) == 4 ? "INT32" : "INT64");
+ collector_interface->writeLog (" <field name=\"IOFSTYPE\" uname=\"File system type\" offset=\"%d\" type=\"%s\"/>\n",
+ &pp->fstype, sizeof (pp->fstype) == 4 ? "INT32" : "INT64");
+ collector_interface->writeLog (" <field name=\"IOFNAME\" uname=\"File name\" offset=\"%d\" type=\"%s\"/>\n",
+ &pp->fname, "STRING");
+ collector_interface->writeLog (" </profpckt>\n");
+ collector_interface->writeLog ("</profile>\n");
+ return COL_ERROR_NONE;
+}
+
+static int
+start_data_collection (void)
+{
+ io_mode = 1;
+ Tprintf (0, "iotrace: start_data_collection\n");
+ return 0;
+}
+
+static int
+stop_data_collection (void)
+{
+ io_mode = 0;
+ Tprintf (0, "iotrace: stop_data_collection\n");
+ return 0;
+}
+
+static int
+close_experiment (void)
+{
+ io_mode = 0;
+ io_key = COLLECTOR_TSD_INVALID_KEY;
+ if (io_heap != NULL)
+ {
+ collector_interface->deleteHeap (io_heap);
+ io_heap = NULL;
+ }
+ Tprintf (0, "iotrace: close_experiment\n");
+ return 0;
+}
+
+static int
+detach_experiment (void)
+{
+ /* fork child. Clean up state but don't write to experiment */
+ io_mode = 0;
+ io_key = COLLECTOR_TSD_INVALID_KEY;
+ if (io_heap != NULL)
+ {
+ collector_interface->deleteHeap (io_heap);
+ io_heap = NULL;
+ }
+ Tprintf (0, "iotrace: detach_experiment\n");
+ return 0;
+}
+
+static int
+init_io_intf ()
+{
+ void *dlflag;
+ int rc = 0;
+ /* if we detect recursion/reentrance, SEGV so we can get a stack */
+ static int init_io_intf_started;
+ static int init_io_intf_finished;
+ init_io_intf_started++;
+ if (!init_io_intf_finished && init_io_intf_started >= 3)
+ {
+ /* pull the plug if recursion occurs... */
+ abort ();
+ }
+
+ /* lookup fprint to print fatal error message */
+ void *ptr = dlsym (RTLD_NEXT, "fprintf");
+ if (ptr)
+ __real_fprintf = (int (*)(FILE*, const char*, ...)) ptr;
+ else
+ abort ();
+
+#if ARCH(Intel)
+#if WSIZE(32)
+#define SYS_FOPEN_X_VERSION "GLIBC_2.1"
+#define SYS_FGETPOS_X_VERSION "GLIBC_2.2"
+#define SYS_FGETPOS64_X_VERSION "GLIBC_2.2"
+#define SYS_OPEN64_X_VERSION "GLIBC_2.2"
+#define SYS_PREAD_X_VERSION "GLIBC_2.2"
+#define SYS_PWRITE_X_VERSION "GLIBC_2.2"
+#define SYS_PWRITE64_X_VERSION "GLIBC_2.2"
+#else /* WSIZE(64) */
+#define SYS_FOPEN_X_VERSION "GLIBC_2.2.5"
+#define SYS_FGETPOS_X_VERSION "GLIBC_2.2.5"
+#endif
+#elif ARCH(SPARC)
+#if WSIZE(32)
+#define SYS_FOPEN_X_VERSION "GLIBC_2.1"
+#define SYS_FGETPOS_X_VERSION "GLIBC_2.2"
+#else /* WSIZE(64) */
+#define SYS_FOPEN_X_VERSION "GLIBC_2.2"
+#define SYS_FGETPOS_X_VERSION "GLIBC_2.2"
+#endif
+#elif ARCH(Aarch64)
+#define SYS_FOPEN_X_VERSION "GLIBC_2.17"
+#define SYS_FGETPOS_X_VERSION "GLIBC_2.17"
+#endif /* ARCH() */
+
+#if WSIZE(32)
+ dlflag = RTLD_NEXT;
+ __real_fopen = (FILE * (*)(const char*, const char*))dlvsym (dlflag, "fopen", SYS_FOPEN_X_VERSION);
+ if (__real_fopen == NULL)
+ {
+ /* We are probably dlopened after libc,
+ * try to search in the previously loaded objects
+ */
+ __real_fopen = (FILE * (*)(const char*, const char*))dlvsym (RTLD_DEFAULT, "fopen", SYS_FOPEN_X_VERSION);
+ if (__real_fopen != NULL)
+ {
+ Tprintf (0, "iotrace: WARNING: init_io_intf() using RTLD_DEFAULT for Linux io routines\n");
+ dlflag = RTLD_DEFAULT;
+ }
+ else
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT fopen\n");
+ rc = COL_ERROR_IOINIT;
+ }
+ }
+
+ __real_fclose = (int (*)(FILE*))dlvsym (dlflag, "fclose", SYS_FOPEN_X_VERSION);
+ if (__real_fclose == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT fclose\n");
+ rc = COL_ERROR_IOINIT;
+ }
+
+ __real_fdopen = (FILE * (*)(int, const char*))dlvsym (dlflag, "fdopen", SYS_FOPEN_X_VERSION);
+ if (__real_fdopen == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT fdopen\n");
+ rc = COL_ERROR_IOINIT;
+ }
+
+ __real_fgetpos = (int (*)(FILE*, fpos_t*))dlvsym (dlflag, "fgetpos", SYS_FGETPOS_X_VERSION);
+ if (__real_fgetpos == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT fgetpos\n");
+ rc = COL_ERROR_IOINIT;
+ }
+
+ __real_fsetpos = (int (*)(FILE*, const fpos_t*))dlvsym (dlflag, "fsetpos", SYS_FGETPOS_X_VERSION);
+ if (__real_fsetpos == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT fsetpos\n");
+ rc = COL_ERROR_IOINIT;
+ }
+
+
+#if ARCH(Intel)
+ __real_fopen_2_1 = __real_fopen;
+ __real_fclose_2_1 = __real_fclose;
+ __real_fdopen_2_1 = __real_fdopen;
+ __real_fgetpos_2_2 = __real_fgetpos;
+ __real_fsetpos_2_2 = __real_fsetpos;
+
+ __real_fopen_2_0 = (FILE * (*)(const char*, const char*))dlvsym (dlflag, "fopen", "GLIBC_2.0");
+ if (__real_fopen_2_0 == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT fopen_2_0\n");
+ rc = COL_ERROR_IOINIT;
+ }
+
+ __real_fclose_2_0 = (int (*)(FILE*))dlvsym (dlflag, "fclose", "GLIBC_2.0");
+ if (__real_fclose_2_0 == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT fclose_2_0\n");
+ rc = COL_ERROR_IOINIT;
+ }
+
+ __real_fdopen_2_0 = (FILE * (*)(int, const char*))dlvsym (dlflag, "fdopen", "GLIBC_2.0");
+ if (__real_fdopen_2_0 == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT fdopen_2_0\n");
+ rc = COL_ERROR_IOINIT;
+ }
+
+ __real_fgetpos_2_0 = (int (*)(FILE*, fpos_t*))dlvsym (dlflag, "fgetpos", "GLIBC_2.0");
+ if (__real_fgetpos_2_0 == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT fgetpos_2_0\n");
+ rc = COL_ERROR_IOINIT;
+ }
+
+ __real_fsetpos_2_0 = (int (*)(FILE*, const fpos_t*))dlvsym (dlflag, "fsetpos", "GLIBC_2.0");
+ if (__real_fsetpos_2_0 == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT fsetpos_2_0\n");
+ rc = COL_ERROR_IOINIT;
+ }
+
+ __real_fgetpos64_2_1 = (int (*)(FILE*, fpos64_t*))dlvsym (dlflag, "fgetpos64", "GLIBC_2.1");
+ if (__real_fgetpos64_2_1 == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT fgetpos64_2_1\n");
+ rc = COL_ERROR_IOINIT;
+ }
+
+ __real_fsetpos64_2_1 = (int (*)(FILE*, const fpos64_t*))dlvsym (dlflag, "fsetpos64", "GLIBC_2.1");
+ if (__real_fsetpos64_2_1 == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT fsetpos64_2_1\n");
+ rc = COL_ERROR_IOINIT;
+ }
+
+ __real_open64_2_1 = (int (*)(const char*, int, ...))dlvsym (dlflag, "open64", "GLIBC_2.1");
+ if (__real_open64_2_1 == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT open64_2_1\n");
+ rc = COL_ERROR_IOINIT;
+ }
+
+ __real_pread_2_1 = (int (*)(int fildes, void *buf, size_t nbyte, off_t offset))dlvsym (dlflag, "pread", "GLIBC_2.1");
+ if (__real_pread_2_1 == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT pread_2_1\n");
+ rc = COL_ERROR_IOINIT;
+ }
+
+ __real_pwrite_2_1 = (int (*)(int fildes, const void *buf, size_t nbyte, off_t offset))dlvsym (dlflag, "pwrite", "GLIBC_2.1");
+ if (__real_pwrite_2_1 == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT pwrite_2_1\n");
+ rc = COL_ERROR_IOINIT;
+ }
+
+ __real_pwrite64_2_1 = (int (*)(int fildes, const void *buf, size_t nbyte, off64_t offset))dlvsym (dlflag, "pwrite64", "GLIBC_2.1");
+ if (__real_pwrite64_2_1 == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT pwrite64_2_1\n");
+ rc = COL_ERROR_IOINIT;
+ }
+
+ __real_fgetpos64_2_2 = (int (*)(FILE*, fpos64_t*))dlvsym (dlflag, "fgetpos64", SYS_FGETPOS64_X_VERSION);
+ if (__real_fgetpos64_2_2 == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT fgetpos64_2_2\n");
+ rc = COL_ERROR_IOINIT;
+ }
+
+ __real_fsetpos64_2_2 = (int (*)(FILE*, const fpos64_t*))dlvsym (dlflag, "fsetpos64", SYS_FGETPOS64_X_VERSION);
+ if (__real_fsetpos64_2_2 == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT fsetpos64_2_2\n");
+ rc = COL_ERROR_IOINIT;
+ }
+
+ __real_open64_2_2 = (int (*)(const char*, int, ...))dlvsym (dlflag, "open64", SYS_OPEN64_X_VERSION);
+ if (__real_open64_2_2 == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT open64_2_2\n");
+ rc = COL_ERROR_IOINIT;
+ }
+
+ __real_pread_2_2 = (int (*)(int fildes, void *buf, size_t nbyte, off_t offset))dlvsym (dlflag, "pread", SYS_PREAD_X_VERSION);
+ if (__real_pread_2_2 == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT pread_2_2\n");
+ rc = COL_ERROR_IOINIT;
+ }
+
+ __real_pwrite_2_2 = (int (*)(int fildes, const void *buf, size_t nbyte, off_t offset))dlvsym (dlflag, "pwrite", SYS_PWRITE_X_VERSION);
+ if (__real_pwrite_2_2 == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT pwrite_2_2\n");
+ rc = COL_ERROR_IOINIT;
+ }
+
+ __real_pwrite64_2_2 = (int (*)(int fildes, const void *buf, size_t nbyte, off64_t offset))dlvsym (dlflag, "pwrite64", SYS_PWRITE64_X_VERSION);
+ if (__real_pwrite64_2_2 == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT pwrite64_2_2\n");
+ rc = COL_ERROR_IOINIT;
+ }
+
+#endif
+
+#else /* WSIZE(64) */
+ dlflag = RTLD_NEXT;
+ __real_fopen = (FILE * (*)(const char*, const char*))dlvsym (dlflag, "fopen", SYS_FOPEN_X_VERSION);
+ if (__real_fopen == NULL)
+ {
+ /* We are probably dlopened after libc,
+ * try to search in the previously loaded objects
+ */
+ __real_fopen = (FILE * (*)(const char*, const char*))dlvsym (RTLD_DEFAULT, "fopen", SYS_FOPEN_X_VERSION);
+ if (__real_fopen != NULL)
+ {
+ Tprintf (0, "iotrace: WARNING: init_io_intf() using RTLD_DEFAULT for Linux io routines\n");
+ dlflag = RTLD_DEFAULT;
+ }
+ else
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT fopen\n");
+ rc = COL_ERROR_IOINIT;
+ }
+ }
+
+ __real_fclose = (int (*)(FILE*))dlvsym (dlflag, "fclose", SYS_FOPEN_X_VERSION);
+ if (__real_fclose == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT fclose\n");
+ rc = COL_ERROR_IOINIT;
+ }
+
+ __real_fdopen = (FILE * (*)(int, const char*))dlvsym (dlflag, "fdopen", SYS_FOPEN_X_VERSION);
+ if (__real_fdopen == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT fdopen\n");
+ rc = COL_ERROR_IOINIT;
+ }
+
+ __real_fgetpos = (int (*)(FILE*, fpos_t*))dlvsym (dlflag, "fgetpos", SYS_FGETPOS_X_VERSION);
+ if (__real_fgetpos == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT fgetpos\n");
+ rc = COL_ERROR_IOINIT;
+ }
+
+ __real_fsetpos = (int (*)(FILE*, const fpos_t*))dlvsym (dlflag, "fsetpos", SYS_FGETPOS_X_VERSION);
+ if (__real_fsetpos == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT fsetpos\n");
+ rc = COL_ERROR_IOINIT;
+ }
+#endif /* WSIZE(32) */
+
+ __real_open = (int (*)(const char*, int, ...))dlsym (dlflag, "open");
+ if (__real_open == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT open\n");
+ rc = COL_ERROR_IOINIT;
+ }
+
+#if WSIZE(32)
+ __real_open64 = (int (*)(const char*, int, ...))dlsym (dlflag, "open64");
+ if (__real_open64 == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT open64\n");
+ rc = COL_ERROR_IOINIT;
+ }
+#endif
+
+ __real_fcntl = (int (*)(int, int, ...))dlsym (dlflag, "fcntl");
+ if (__real_fcntl == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT fcntl\n");
+ rc = COL_ERROR_IOINIT;
+ }
+
+ __real_openat = (int (*)(int, const char*, int, ...))dlsym (dlflag, "openat");
+ if (__real_openat == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT openat\n");
+ rc = COL_ERROR_IOINIT;
+ }
+
+ __real_close = (int (*)(int))dlsym (dlflag, "close");
+ if (__real_close == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT close\n");
+ rc = COL_ERROR_IOINIT;
+ }
+
+ __real_dup = (int (*)(int))dlsym (dlflag, "dup");
+ if (__real_dup == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT dup\n");
+ rc = COL_ERROR_IOINIT;
+ }
+
+ __real_dup2 = (int (*)(int, int))dlsym (dlflag, "dup2");
+ if (__real_dup2 == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT dup2\n");
+ rc = COL_ERROR_IOINIT;
+ }
+
+ __real_pipe = (int (*)(int[]))dlsym (dlflag, "pipe");
+ if (__real_pipe == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT pipe\n");
+ rc = COL_ERROR_IOINIT;
+ }
+
+ __real_socket = (int (*)(int, int, int))dlsym (dlflag, "socket");
+ if (__real_socket == NULL)
+ {
+ __real_socket = (int (*)(int, int, int))dlsym (RTLD_NEXT, "socket");
+ if (__real_socket == NULL)
+ {
+#if 0
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERXXX_IOINIT socket\n");
+ rc = COL_ERROR_IOINIT;
+#endif
+ }
+ }
+
+ __real_mkstemp = (int (*)(char*))dlsym (dlflag, "mkstemp");
+ if (__real_mkstemp == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT mkstemp\n");
+ rc = COL_ERROR_IOINIT;
+ }
+
+ __real_mkstemps = (int (*)(char*, int))dlsym (dlflag, "mkstemps");
+ if (__real_mkstemps == NULL)
+ {
+#if 0
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERXXX_IOINIT mkstemps\n");
+ rc = COL_ERROR_IOINIT;
+#endif
+ }
+
+ __real_creat = (int (*)(const char*, mode_t))dlsym (dlflag, "creat");
+ if (__real_creat == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT creat\n");
+ rc = COL_ERROR_IOINIT;
+ }
+
+#if WSIZE(32)
+ __real_creat64 = (int (*)(const char*, mode_t))dlsym (dlflag, "creat64");
+ if (__real_creat64 == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT creat64\n");
+ rc = COL_ERROR_IOINIT;
+ }
+#endif
+
+ __real_read = (ssize_t (*)(int, void*, size_t))dlsym (dlflag, "read");
+ if (__real_read == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT read\n");
+ rc = COL_ERROR_IOINIT;
+ }
+
+ __real_write = (ssize_t (*)(int, const void*, size_t))dlsym (dlflag, "write");
+ if (__real_write == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT write\n");
+ rc = COL_ERROR_IOINIT;
+ }
+
+ __real_readv = (ssize_t (*)(int, const struct iovec*, int))dlsym (dlflag, "readv");
+ if (__real_readv == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT readv\n");
+ rc = COL_ERROR_IOINIT;
+ }
+
+ __real_writev = (ssize_t (*)(int, const struct iovec*, int))dlsym (dlflag, "writev");
+ if (__real_writev == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT writev\n");
+ rc = COL_ERROR_IOINIT;
+ }
+
+ __real_fread = (size_t (*)(void*, size_t, size_t, FILE*))dlsym (dlflag, "fread");
+ if (__real_fread == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT fread\n");
+ rc = COL_ERROR_IOINIT;
+ }
+
+ __real_fwrite = (size_t (*)(const void*, size_t, size_t, FILE*))dlsym (dlflag, "fwrite");
+ if (__real_fwrite == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT fwrite\n");
+ rc = COL_ERROR_IOINIT;
+ }
+
+ __real_pread = (ssize_t (*)(int, void*, size_t, off_t))dlsym (dlflag, "pread");
+ if (__real_pread == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT pread\n");
+ rc = COL_ERROR_IOINIT;
+ }
+
+ __real_pwrite = (ssize_t (*)(int, const void*, size_t, off_t))dlsym (dlflag, "pwrite");
+ if (__real_pwrite == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT pwrite\n");
+ rc = COL_ERROR_IOINIT;
+ }
+
+ __real_pwrite64 = (ssize_t (*)(int, const void*, size_t, off64_t))dlsym (dlflag, "pwrite64");
+ if (__real_pwrite64 == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT pwrite64\n");
+ rc = COL_ERROR_IOINIT;
+ }
+
+ __real_fgets = (char* (*)(char*, int, FILE*))dlsym (dlflag, "fgets");
+ if (__real_fgets == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT fgets\n");
+ rc = COL_ERROR_IOINIT;
+ }
+
+ __real_fputs = (int (*)(const char*, FILE*))dlsym (dlflag, "fputs");
+ if (__real_fputs == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT fputs\n");
+ rc = COL_ERROR_IOINIT;
+ }
+
+ __real_fputc = (int (*)(int, FILE*))dlsym (dlflag, "fputc");
+ if (__real_fputc == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT fputc\n");
+ rc = COL_ERROR_IOINIT;
+ }
+
+ __real_vfprintf = (int (*)(FILE*, const char*, va_list))dlsym (dlflag, "vfprintf");
+ if (__real_vfprintf == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT vfprintf\n");
+ rc = COL_ERROR_IOINIT;
+ }
+
+
+ __real_lseek = (off_t (*)(int, off_t, int))dlsym (dlflag, "lseek");
+ if (__real_lseek == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT lseek\n");
+ rc = COL_ERROR_IOINIT;
+ }
+
+ __real_llseek = (offset_t (*)(int, offset_t, int))dlsym (dlflag, "llseek");
+ if (__real_llseek == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT llseek\n");
+ rc = COL_ERROR_IOINIT;
+ }
+
+ __real_chmod = (int (*)(const char*, mode_t))dlsym (dlflag, "chmod");
+ if (__real_chmod == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT chmod\n");
+ rc = COL_ERROR_IOINIT;
+ }
+
+ __real_access = (int (*)(const char*, int))dlsym (dlflag, "access");
+ if (__real_access == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT access\n");
+ rc = COL_ERROR_IOINIT;
+ }
+
+ __real_rename = (int (*)(const char*, const char*))dlsym (dlflag, "rename");
+ if (__real_rename == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT rename\n");
+ rc = COL_ERROR_IOINIT;
+ }
+
+ __real_mkdir = (int (*)(const char*, mode_t))dlsym (dlflag, "mkdir");
+ if (__real_mkdir == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT mkdir\n");
+ rc = COL_ERROR_IOINIT;
+ }
+
+ __real_getdents = (int (*)(int, struct dirent*, size_t))dlsym (dlflag, "getdents");
+ if (__real_getdents == NULL)
+ {
+#if 0
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERXXX_IOINIT getdents\n");
+ rc = COL_ERROR_IOINIT;
+#endif
+ }
+
+ __real_unlink = (int (*)(const char*))dlsym (dlflag, "unlink");
+ if (__real_unlink == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT unlink\n");
+ rc = COL_ERROR_IOINIT;
+ }
+
+ __real_fseek = (int (*)(FILE*, long, int))dlsym (dlflag, "fseek");
+ if (__real_fseek == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT fseek\n");
+ rc = COL_ERROR_IOINIT;
+ }
+
+ __real_rewind = (void (*)(FILE*))dlsym (dlflag, "rewind");
+ if (__real_rewind == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT rewind\n");
+ rc = COL_ERROR_IOINIT;
+ }
+
+ __real_ftell = (long (*)(FILE*))dlsym (dlflag, "ftell");
+ if (__real_ftell == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT ftell\n");
+ rc = COL_ERROR_IOINIT;
+ }
+
+ __real_fsync = (int (*)(int))dlsym (dlflag, "fsync");
+ if (__real_fsync == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT fsync\n");
+ rc = COL_ERROR_IOINIT;
+ }
+
+ __real_readdir = (struct dirent * (*)(DIR*))dlsym (dlflag, "readdir");
+ if (__real_readdir == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT readdir\n");
+ rc = COL_ERROR_IOINIT;
+ }
+
+ __real_flock = (int (*)(int, int))dlsym (dlflag, "flock");
+ if (__real_flock == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT flock\n");
+ rc = COL_ERROR_IOINIT;
+ }
+
+ __real_lockf = (int (*)(int, int, off_t))dlsym (dlflag, "lockf");
+ if (__real_lockf == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT lockf\n");
+ rc = COL_ERROR_IOINIT;
+ }
+
+ __real_fflush = (int (*)(FILE*))dlsym (dlflag, "fflush");
+ if (__real_fflush == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT fflush\n");
+ rc = COL_ERROR_IOINIT;
+ }
+
+#if WSIZE(32)
+ __real_fgetpos64 = (int (*)(FILE*, fpos64_t*))dlsym (dlflag, "fgetpos64");
+ if (__real_fgetpos64 == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT fgetpos64\n");
+ rc = COL_ERROR_IOINIT;
+ }
+
+ __real_fsetpos64 = (int (*)(FILE*, const fpos64_t*))dlsym (dlflag, "fsetpos64");
+ if (__real_fsetpos64 == NULL)
+ {
+ CALL_REAL (fprintf)(stderr, "iotrace_init COL_ERROR_IOINIT fsetpos64\n");
+ rc = COL_ERROR_IOINIT;
+ }
+#endif
+ init_io_intf_finished++;
+ return rc;
+}
+
+/*------------------------------------------------------------- open */
+int
+open (const char *path, int oflag, ...)
+{
+ int *guard;
+ int fd;
+ void *packet;
+ IOTrace_packet *iopkt;
+ mode_t mode;
+ va_list ap;
+ size_t sz;
+ unsigned pktSize;
+
+ va_start (ap, oflag);
+ mode = va_arg (ap, mode_t);
+ va_end (ap);
+
+ if (NULL_PTR (open))
+ init_io_intf ();
+
+ if (CHCK_REENTRANCE (guard) || path == NULL)
+ return CALL_REAL (open)(path, oflag, mode);
+ PUSH_REENTRANCE (guard);
+ hrtime_t reqt = gethrtime ();
+ fd = CALL_REAL (open)(path, oflag, mode);
+ if (RECHCK_REENTRANCE (guard))
+ {
+ POP_REENTRANCE (guard);
+ return fd;
+ }
+ hrtime_t grnt = gethrtime ();
+ sz = collector_strlen (path);
+ pktSize = sizeof (IOTrace_packet) + sz;
+ pktSize = collector_align_pktsize (pktSize);
+ Tprintf (DBG_LT1, "iotrace allocating %u from io_heap\n", pktSize);
+ packet = collector_interface->allocCSize (io_heap, pktSize, 1);
+ if (packet != NULL)
+ {
+ iopkt = (IOTrace_packet *) packet;
+ collector_memset (iopkt, 0, pktSize);
+ iopkt->comm.tsize = pktSize;
+ iopkt->comm.tstamp = grnt;
+ iopkt->requested = reqt;
+ if (fd != -1)
+ iopkt->iotype = OPEN_TRACE;
+ else
+ iopkt->iotype = OPEN_TRACE_ERROR;
+ iopkt->fd = fd;
+ iopkt->fstype = collector_fstype (path);
+ collector_strncpy (&(iopkt->fname), path, sz);
+ iopkt->comm.frinfo = collector_interface->getFrameInfo (io_hndl, iopkt->comm.tstamp, FRINFO_FROM_STACK, &iopkt);
+ collector_interface->writeDataRecord (io_hndl, (Common_packet*) iopkt);
+ collector_interface->freeCSize (io_heap, packet, pktSize);
+ }
+ else
+ {
+ Tprintf (0, "iotrace: ERROR: open cannot allocate memory\n");
+ return -1;
+ }
+ POP_REENTRANCE (guard);
+ return fd;
+}
+
+/*------------------------------------------------------------- open64 */
+#if ARCH(Intel) && WSIZE(32)
+// map interposed symbol versions
+static int
+__collector_open64_symver (int(real_open64) (const char *, int, ...),
+ const char *path, int oflag, mode_t mode);
+
+SYMVER_ATTRIBUTE (__collector_open64_2_2, open64@@GLIBC_2.2)
+int
+__collector_open64_2_2 (const char *path, int oflag, ...)
+{
+ mode_t mode;
+ va_list ap;
+ va_start (ap, oflag);
+ mode = va_arg (ap, mode_t);
+ va_end (ap);
+ TprintfT (DBG_LTT,
+ "iotrace: __collector_open64_2_2@%p(path=%s, oflag=0%o, mode=0%o\n",
+ CALL_REAL (open64_2_2), path ? path : "NULL", oflag, mode);
+ if (NULL_PTR (open64))
+ init_io_intf ();
+ return __collector_open64_symver (CALL_REAL (open64_2_2), path, oflag, mode);
+}
+
+SYMVER_ATTRIBUTE (__collector_open64_2_1, open64@GLIBC_2.1)
+int
+__collector_open64_2_1 (const char *path, int oflag, ...)
+{
+ mode_t mode;
+ va_list ap;
+ va_start (ap, oflag);
+ mode = va_arg (ap, mode_t);
+ va_end (ap);
+ TprintfT (DBG_LTT,
+ "iotrace: __collector_open64_2_1@%p(path=%s, oflag=0%o, mode=0%o\n",
+ CALL_REAL (open64_2_1), path ? path : "NULL", oflag, mode);
+ if (NULL_PTR (open64))
+ init_io_intf ();
+ return __collector_open64_symver (CALL_REAL (open64_2_1), path, oflag, mode);
+}
+
+#endif /* ARCH(Intel) && WSIZE(32) */
+#if WSIZE(32)
+#if ARCH(Intel) && WSIZE(32)
+
+static int
+__collector_open64_symver (int(real_open64) (const char *, int, ...),
+ const char *path, int oflag, mode_t mode)
+{
+ int *guard;
+ int fd;
+ void *packet;
+ IOTrace_packet *iopkt;
+ size_t sz;
+ unsigned pktSize;
+ if (NULL_PTR (open64))
+ init_io_intf ();
+ if (CHCK_REENTRANCE (guard) || path == NULL)
+ return (real_open64) (path, oflag, mode);
+ PUSH_REENTRANCE (guard);
+ hrtime_t reqt = gethrtime ();
+ fd = real_open64 (path, oflag, mode);
+#else /* ^ARCH(Intel) && WSIZE(32) */
+
+int
+open64 (const char *path, int oflag, ...)
+{
+ int *guard;
+ int fd;
+ void *packet;
+ IOTrace_packet *iopkt;
+ mode_t mode;
+ va_list ap;
+ size_t sz;
+ unsigned pktSize;
+
+ va_start (ap, oflag);
+ mode = va_arg (ap, mode_t);
+ va_end (ap);
+ if (NULL_PTR (open64))
+ init_io_intf ();
+ if (CHCK_REENTRANCE (guard) || path == NULL)
+ return CALL_REAL (open64)(path, oflag, mode);
+ PUSH_REENTRANCE (guard);
+ hrtime_t reqt = gethrtime ();
+ fd = CALL_REAL (open64)(path, oflag, mode);
+#endif /* ^ARCH(Intel) && WSIZE(32) */
+
+ if (RECHCK_REENTRANCE (guard) || path == NULL)
+ {
+ POP_REENTRANCE (guard);
+ return fd;
+ }
+ hrtime_t grnt = gethrtime ();
+ sz = collector_strlen (path);
+ pktSize = sizeof (IOTrace_packet) + sz;
+ pktSize = collector_align_pktsize (pktSize);
+ Tprintf (DBG_LT1, "iotrace allocating %u from io_heap\n", pktSize);
+ packet = collector_interface->allocCSize (io_heap, pktSize, 1);
+ if (packet != NULL)
+ {
+ iopkt = (IOTrace_packet *) packet;
+ collector_memset (iopkt, 0, pktSize);
+ iopkt->comm.tsize = pktSize;
+ iopkt->comm.tstamp = grnt;
+ iopkt->requested = reqt;
+ if (fd != -1)
+ iopkt->iotype = OPEN_TRACE;
+ else
+ iopkt->iotype = OPEN_TRACE_ERROR;
+ iopkt->fd = fd;
+ iopkt->fstype = collector_fstype (path);
+ collector_strncpy (&(iopkt->fname), path, sz);
+ iopkt->comm.frinfo = collector_interface->getFrameInfo (io_hndl, iopkt->comm.tstamp, FRINFO_FROM_STACK, &iopkt);
+ collector_interface->writeDataRecord (io_hndl, (Common_packet*) iopkt);
+ collector_interface->freeCSize (io_heap, packet, pktSize);
+ }
+ else
+ {
+ Tprintf (0, "iotrace: ERROR: open64 cannot allocate memory\n");
+ return -1;
+ }
+ POP_REENTRANCE (guard);
+ return fd;
+}
+#endif
+
+#define F_ERROR_ARG 0
+#define F_INT_ARG 1
+#define F_LONG_ARG 2
+#define F_VOID_ARG 3
+
+/*
+ * The following macro is not defined in the
+ * older versions of Linux.
+ * #define F_DUPFD_CLOEXEC 1030
+ *
+ * Instead use the command that is defined below
+ * until we start compiling mpmt on the newer
+ * versions of Linux.
+ */
+#define TMP_F_DUPFD_CLOEXEC 1030
+
+/*------------------------------------------------------------- fcntl */
+int
+fcntl (int fildes, int cmd, ...)
+{
+ int *guard;
+ int fd = 0;
+ IOTrace_packet iopkt;
+ long long_arg = 0;
+ int int_arg = 0;
+ int which_arg = F_ERROR_ARG;
+ va_list ap;
+ switch (cmd)
+ {
+ case F_DUPFD:
+ case TMP_F_DUPFD_CLOEXEC:
+ case F_SETFD:
+ case F_SETFL:
+ case F_SETOWN:
+ case F_SETSIG:
+ case F_SETLEASE:
+ case F_NOTIFY:
+ case F_SETLK:
+ case F_SETLKW:
+ case F_GETLK:
+ va_start (ap, cmd);
+ long_arg = va_arg (ap, long);
+ va_end (ap);
+ which_arg = F_LONG_ARG;
+ break;
+ case F_GETFD:
+ case F_GETFL:
+ case F_GETOWN:
+ case F_GETLEASE:
+ case F_GETSIG:
+ which_arg = F_VOID_ARG;
+ break;
+ }
+ if (NULL_PTR (fcntl))
+ init_io_intf ();
+ if (CHCK_REENTRANCE (guard))
+ {
+ switch (which_arg)
+ {
+ case F_INT_ARG:
+ return CALL_REAL (fcntl)(fildes, cmd, int_arg);
+ case F_LONG_ARG:
+ return CALL_REAL (fcntl)(fildes, cmd, long_arg);
+ case F_VOID_ARG:
+ return CALL_REAL (fcntl)(fildes, cmd);
+ case F_ERROR_ARG:
+ Tprintf (0, "iotrace: ERROR: Unsupported fcntl command\n");
+ return -1;
+ }
+ return -1;
+ }
+ if (cmd != F_DUPFD && cmd != TMP_F_DUPFD_CLOEXEC)
+ {
+ switch (which_arg)
+ {
+ case F_INT_ARG:
+ return CALL_REAL (fcntl)(fildes, cmd, int_arg);
+ case F_LONG_ARG:
+ return CALL_REAL (fcntl)(fildes, cmd, long_arg);
+ case F_VOID_ARG:
+ return CALL_REAL (fcntl)(fildes, cmd);
+ case F_ERROR_ARG:
+ Tprintf (0, "iotrace: ERROR: Unsupported fcntl command\n");
+ return -1;
+ }
+ return -1;
+ }
+ PUSH_REENTRANCE (guard);
+ hrtime_t reqt = gethrtime ();
+ switch (cmd)
+ {
+ case F_DUPFD:
+ case TMP_F_DUPFD_CLOEXEC:
+ fd = CALL_REAL (fcntl)(fildes, cmd, long_arg);
+ break;
+ }
+ if (RECHCK_REENTRANCE (guard))
+ {
+ POP_REENTRANCE (guard);
+ return fd;
+ }
+ hrtime_t grnt = gethrtime ();
+ collector_memset (&iopkt, 0, sizeof (IOTrace_packet));
+ iopkt.comm.tsize = sizeof (IOTrace_packet);
+ iopkt.comm.tstamp = grnt;
+ iopkt.requested = reqt;
+ if (fd != -1)
+ iopkt.iotype = OPEN_TRACE;
+ else
+ iopkt.iotype = OPEN_TRACE_ERROR;
+ iopkt.fd = fd;
+ iopkt.ofd = fildes;
+ iopkt.fstype = UNKNOWNFS_TYPE;
+ iopkt.comm.frinfo = collector_interface->getFrameInfo (io_hndl, iopkt.comm.tstamp, FRINFO_FROM_STACK, &iopkt);
+ collector_interface->writeDataRecord (io_hndl, (Common_packet*) & iopkt);
+ POP_REENTRANCE (guard);
+ return fd;
+}
+
+/*------------------------------------------------------------- openat */
+int
+openat (int fildes, const char *path, int oflag, ...)
+{
+ int *guard;
+ int fd;
+ void *packet;
+ IOTrace_packet *iopkt;
+ mode_t mode;
+ va_list ap;
+ size_t sz;
+ unsigned pktSize;
+
+ va_start (ap, oflag);
+ mode = va_arg (ap, mode_t);
+ va_end (ap);
+ if (NULL_PTR (openat))
+ init_io_intf ();
+ if (CHCK_REENTRANCE (guard) || path == NULL)
+ return CALL_REAL (openat)(fildes, path, oflag, mode);
+ PUSH_REENTRANCE (guard);
+ hrtime_t reqt = gethrtime ();
+ fd = CALL_REAL (openat)(fildes, path, oflag, mode);
+ if (RECHCK_REENTRANCE (guard))
+ {
+ POP_REENTRANCE (guard);
+ return fd;
+ }
+ hrtime_t grnt = gethrtime ();
+ sz = collector_strlen (path);
+ pktSize = sizeof (IOTrace_packet) + sz;
+ pktSize = collector_align_pktsize (pktSize);
+ Tprintf (DBG_LT1, "iotrace allocating %u from io_heap\n", pktSize);
+ packet = collector_interface->allocCSize (io_heap, pktSize, 1);
+ if (packet != NULL)
+ {
+ iopkt = (IOTrace_packet *) packet;
+ collector_memset (iopkt, 0, pktSize);
+ iopkt->comm.tsize = pktSize;
+ iopkt->comm.tstamp = grnt;
+ iopkt->requested = reqt;
+ if (fd != -1)
+ iopkt->iotype = OPEN_TRACE;
+ else
+ iopkt->iotype = OPEN_TRACE_ERROR;
+ iopkt->fd = fd;
+ iopkt->fstype = collector_fstype (path);
+ collector_strncpy (&(iopkt->fname), path, sz);
+ iopkt->comm.frinfo = collector_interface->getFrameInfo (io_hndl, iopkt->comm.tstamp, FRINFO_FROM_STACK, &iopkt);
+ collector_interface->writeDataRecord (io_hndl, (Common_packet*) iopkt);
+ collector_interface->freeCSize (io_heap, packet, pktSize);
+ }
+ else
+ {
+ Tprintf (0, "iotrace: ERROR: openat cannot allocate memory\n");
+ return -1;
+ }
+ POP_REENTRANCE (guard);
+ return fd;
+}
+
+/*------------------------------------------------------------- creat */
+int
+creat (const char *path, mode_t mode)
+{
+ int *guard;
+ int fd;
+ void *packet;
+ IOTrace_packet *iopkt;
+ size_t sz;
+ unsigned pktSize;
+ if (NULL_PTR (creat))
+ init_io_intf ();
+ if (CHCK_REENTRANCE (guard) || path == NULL)
+ return CALL_REAL (creat)(path, mode);
+ PUSH_REENTRANCE (guard);
+ hrtime_t reqt = gethrtime ();
+ fd = CALL_REAL (creat)(path, mode);
+ if (RECHCK_REENTRANCE (guard))
+ {
+ POP_REENTRANCE (guard);
+ return fd;
+ }
+ hrtime_t grnt = gethrtime ();
+ sz = collector_strlen (path);
+ pktSize = sizeof (IOTrace_packet) + sz;
+ pktSize = collector_align_pktsize (pktSize);
+ Tprintf (DBG_LT1, "iotrace allocating %u from io_heap\n", pktSize);
+ packet = collector_interface->allocCSize (io_heap, pktSize, 1);
+ if (packet != NULL)
+ {
+ iopkt = (IOTrace_packet *) packet;
+ collector_memset (iopkt, 0, pktSize);
+ iopkt->comm.tsize = pktSize;
+ iopkt->comm.tstamp = grnt;
+ iopkt->requested = reqt;
+ if (fd != -1)
+ iopkt->iotype = OPEN_TRACE;
+ else
+ iopkt->iotype = OPEN_TRACE_ERROR;
+ iopkt->fd = fd;
+ iopkt->fstype = collector_fstype (path);
+ collector_strncpy (&(iopkt->fname), path, sz);
+ iopkt->comm.frinfo = collector_interface->getFrameInfo (io_hndl, iopkt->comm.tstamp, FRINFO_FROM_STACK, &iopkt);
+ collector_interface->writeDataRecord (io_hndl, (Common_packet*) iopkt);
+ collector_interface->freeCSize (io_heap, packet, pktSize);
+ }
+ else
+ {
+ Tprintf (0, "iotrace: ERROR: creat cannot allocate memory\n");
+ return -1;
+ }
+ POP_REENTRANCE (guard);
+ return fd;
+}
+
+/*------------------------------------------------------------- creat64 */
+#if WSIZE(32)
+int
+creat64 (const char *path, mode_t mode)
+{
+ int *guard;
+ int fd;
+ void *packet;
+ IOTrace_packet *iopkt;
+ size_t sz;
+ unsigned pktSize;
+
+ if (NULL_PTR (creat64))
+ init_io_intf ();
+ if (CHCK_REENTRANCE (guard) || path == NULL)
+ return CALL_REAL (creat64)(path, mode);
+ PUSH_REENTRANCE (guard);
+ hrtime_t reqt = gethrtime ();
+ fd = CALL_REAL (creat64)(path, mode);
+ if (RECHCK_REENTRANCE (guard))
+ {
+ POP_REENTRANCE (guard);
+ return fd;
+ }
+ hrtime_t grnt = gethrtime ();
+ sz = collector_strlen (path);
+ pktSize = sizeof (IOTrace_packet) + sz;
+ pktSize = collector_align_pktsize (pktSize);
+ Tprintf (DBG_LT1, "iotrace allocating %u from io_heap\n", pktSize);
+ packet = collector_interface->allocCSize (io_heap, pktSize, 1);
+ if (packet != NULL)
+ {
+ iopkt = (IOTrace_packet *) packet;
+ collector_memset (iopkt, 0, pktSize);
+ iopkt->comm.tsize = pktSize;
+ iopkt->comm.tstamp = grnt;
+ iopkt->requested = reqt;
+ if (fd != -1)
+ iopkt->iotype = OPEN_TRACE;
+ else
+ iopkt->iotype = OPEN_TRACE_ERROR;
+ iopkt->fd = fd;
+ iopkt->fstype = collector_fstype (path);
+ collector_strncpy (&(iopkt->fname), path, sz);
+ iopkt->comm.frinfo = collector_interface->getFrameInfo (io_hndl, iopkt->comm.tstamp, FRINFO_FROM_STACK, &iopkt);
+ collector_interface->writeDataRecord (io_hndl, (Common_packet*) iopkt);
+ collector_interface->freeCSize (io_heap, packet, pktSize);
+ }
+ else
+ {
+ Tprintf (0, "iotrace: ERROR: creat64 cannot allocate memory\n");
+ return -1;
+ }
+ POP_REENTRANCE (guard);
+ return fd;
+}
+#endif
+
+/*------------------------------------------------------------- mkstemp */
+int
+mkstemp (char *template)
+{
+ int *guard;
+ int fd;
+ void *packet;
+ IOTrace_packet *iopkt;
+ size_t sz;
+ unsigned pktSize;
+ if (NULL_PTR (mkstemp))
+ init_io_intf ();
+ if (CHCK_REENTRANCE (guard) || template == NULL)
+ return CALL_REAL (mkstemp)(template);
+ PUSH_REENTRANCE (guard);
+ hrtime_t reqt = gethrtime ();
+ fd = CALL_REAL (mkstemp)(template);
+ if (RECHCK_REENTRANCE (guard))
+ {
+ POP_REENTRANCE (guard);
+ return fd;
+ }
+ hrtime_t grnt = gethrtime ();
+ sz = collector_strlen (template);
+ pktSize = sizeof (IOTrace_packet) + sz;
+ pktSize = collector_align_pktsize (pktSize);
+ Tprintf (DBG_LT1, "iotrace allocating %u from io_heap\n", pktSize);
+ packet = collector_interface->allocCSize (io_heap, pktSize, 1);
+ if (packet != NULL)
+ {
+ iopkt = (IOTrace_packet *) packet;
+ collector_memset (iopkt, 0, pktSize);
+ iopkt->comm.tsize = pktSize;
+ iopkt->comm.tstamp = grnt;
+ iopkt->requested = reqt;
+ if (fd != -1)
+ iopkt->iotype = OPEN_TRACE;
+ else
+ iopkt->iotype = OPEN_TRACE_ERROR;
+ iopkt->fd = fd;
+ iopkt->fstype = collector_fstype (template);
+ collector_strncpy (&(iopkt->fname), template, sz);
+ iopkt->comm.frinfo = collector_interface->getFrameInfo (io_hndl, iopkt->comm.tstamp, FRINFO_FROM_STACK, &iopkt);
+ collector_interface->writeDataRecord (io_hndl, (Common_packet*) iopkt);
+ collector_interface->freeCSize (io_heap, packet, pktSize);
+ }
+ else
+ {
+ Tprintf (0, "iotrace: ERROR: mkstemp cannot allocate memory\n");
+ return -1;
+ }
+ POP_REENTRANCE (guard);
+ return fd;
+}
+
+/*------------------------------------------------------------- mkstemps */
+int
+mkstemps (char *template, int slen)
+{
+ int *guard;
+ int fd;
+ void *packet;
+ IOTrace_packet *iopkt;
+ size_t sz;
+ unsigned pktSize;
+ if (NULL_PTR (mkstemps))
+ init_io_intf ();
+ if (CHCK_REENTRANCE (guard) || template == NULL)
+ return CALL_REAL (mkstemps)(template, slen);
+ PUSH_REENTRANCE (guard);
+ hrtime_t reqt = gethrtime ();
+ fd = CALL_REAL (mkstemps)(template, slen);
+ if (RECHCK_REENTRANCE (guard))
+ {
+ POP_REENTRANCE (guard);
+ return fd;
+ }
+ hrtime_t grnt = gethrtime ();
+ sz = collector_strlen (template);
+ pktSize = sizeof (IOTrace_packet) + sz;
+ pktSize = collector_align_pktsize (pktSize);
+ Tprintf (DBG_LT1, "iotrace allocating %u from io_heap\n", pktSize);
+ packet = collector_interface->allocCSize (io_heap, pktSize, 1);
+ if (packet != NULL)
+ {
+ iopkt = (IOTrace_packet *) packet;
+ collector_memset (iopkt, 0, pktSize);
+ iopkt->comm.tsize = pktSize;
+ iopkt->comm.tstamp = grnt;
+ iopkt->requested = reqt;
+ if (fd != -1)
+ iopkt->iotype = OPEN_TRACE;
+ else
+ iopkt->iotype = OPEN_TRACE_ERROR;
+ iopkt->fd = fd;
+ iopkt->fstype = collector_fstype (template);
+ collector_strncpy (&(iopkt->fname), template, sz);
+ iopkt->comm.frinfo = collector_interface->getFrameInfo (io_hndl, iopkt->comm.tstamp, FRINFO_FROM_STACK, &iopkt);
+ collector_interface->writeDataRecord (io_hndl, (Common_packet*) iopkt);
+ collector_interface->freeCSize (io_heap, packet, pktSize);
+ }
+ else
+ {
+ Tprintf (0, "iotrace: ERROR: mkstemps cannot allocate memory\n");
+ return -1;
+ }
+ POP_REENTRANCE (guard);
+ return fd;
+}
+
+/*------------------------------------------------------------- close */
+int
+close (int fildes)
+{
+ int *guard;
+ int stat;
+ IOTrace_packet iopkt;
+ if (NULL_PTR (close))
+ init_io_intf ();
+ if (CHCK_REENTRANCE (guard))
+ return CALL_REAL (close)(fildes);
+ PUSH_REENTRANCE (guard);
+ hrtime_t reqt = gethrtime ();
+ stat = CALL_REAL (close)(fildes);
+ if (RECHCK_REENTRANCE (guard))
+ {
+ POP_REENTRANCE (guard);
+ return stat;
+ }
+ hrtime_t grnt = gethrtime ();
+ collector_memset (&iopkt, 0, sizeof (IOTrace_packet));
+ iopkt.comm.tsize = sizeof (IOTrace_packet);
+ iopkt.comm.tstamp = grnt;
+ iopkt.requested = reqt;
+ if (stat == 0)
+ iopkt.iotype = CLOSE_TRACE;
+ else
+ iopkt.iotype = CLOSE_TRACE_ERROR;
+ iopkt.fd = fildes;
+ iopkt.comm.frinfo = collector_interface->getFrameInfo (io_hndl, iopkt.comm.tstamp, FRINFO_FROM_STACK, &iopkt);
+ collector_interface->writeDataRecord (io_hndl, (Common_packet*) & iopkt);
+ POP_REENTRANCE (guard);
+ return stat;
+}
+
+/*------------------------------------------------------------- fopen */
+// map interposed symbol versions
+#if ARCH(Intel) && WSIZE(32)
+
+static FILE*
+__collector_fopen_symver (FILE*(real_fopen) (), const char *filename, const char *mode);
+
+SYMVER_ATTRIBUTE (__collector_fopen_2_1, fopen@@GLIBC_2.1)
+FILE*
+__collector_fopen_2_1 (const char *filename, const char *mode)
+{
+ if (NULL_PTR (fopen))
+ init_io_intf ();
+ TprintfT (DBG_LTT, "iotrace: __collector_fopen_2_1@%p\n", CALL_REAL (fopen_2_1));
+ return __collector_fopen_symver (CALL_REAL (fopen_2_1), filename, mode);
+}
+
+SYMVER_ATTRIBUTE (__collector_fopen_2_0, fopen@GLIBC_2.0)
+FILE*
+__collector_fopen_2_0 (const char *filename, const char *mode)
+{
+ if (NULL_PTR (fopen))
+ init_io_intf ();
+ TprintfT (DBG_LTT, "iotrace: __collector_fopen_2_0@%p\n", CALL_REAL (fopen_2_0));
+ return __collector_fopen_symver (CALL_REAL (fopen_2_0), filename, mode);
+}
+
+#endif
+
+#if ARCH(Intel) && WSIZE(32)
+
+static FILE*
+__collector_fopen_symver (FILE*(real_fopen) (), const char *filename, const char *mode)
+{
+#else
+
+FILE*
+fopen (const char *filename, const char *mode)
+{
+#endif
+ int *guard;
+ FILE *fp = NULL;
+ void *packet;
+ IOTrace_packet *iopkt;
+ size_t sz;
+ unsigned pktSize;
+ if (NULL_PTR (fopen))
+ init_io_intf ();
+ if (CHCK_REENTRANCE (guard) || filename == NULL)
+ {
+#if ARCH(Intel) && WSIZE(32)
+ return (real_fopen) (filename, mode);
+#else
+ return CALL_REAL (fopen)(filename, mode);
+#endif
+ }
+ PUSH_REENTRANCE (guard);
+ hrtime_t reqt = gethrtime ();
+
+#if ARCH(Intel) && WSIZE(32)
+ fp = (real_fopen) (filename, mode);
+#else
+ fp = CALL_REAL (fopen)(filename, mode);
+#endif
+ if (RECHCK_REENTRANCE (guard))
+ {
+ POP_REENTRANCE (guard);
+ return fp;
+ }
+ hrtime_t grnt = gethrtime ();
+ sz = collector_strlen (filename);
+ pktSize = sizeof (IOTrace_packet) + sz;
+ pktSize = collector_align_pktsize (pktSize);
+ Tprintf (DBG_LT1, "iotrace allocating %u from io_heap\n", pktSize);
+ packet = collector_interface->allocCSize (io_heap, pktSize, 1);
+ if (packet != NULL)
+ {
+ iopkt = (IOTrace_packet *) packet;
+ collector_memset (iopkt, 0, pktSize);
+ iopkt->comm.tsize = pktSize;
+ iopkt->comm.tstamp = grnt;
+ iopkt->requested = reqt;
+ if (fp != NULL)
+ {
+ iopkt->iotype = OPEN_TRACE;
+ iopkt->fd = fileno (fp);
+ }
+ else
+ {
+ iopkt->iotype = OPEN_TRACE_ERROR;
+ iopkt->fd = -1;
+ }
+ iopkt->fstype = collector_fstype (filename);
+ collector_strncpy (&(iopkt->fname), filename, sz);
+
+#if ARCH(Intel) && WSIZE(32)
+ iopkt->comm.frinfo = collector_interface->getFrameInfo (io_hndl, iopkt->comm.tstamp, FRINFO_FROM_STACK_ARG, &iopkt);
+#else
+ iopkt->comm.frinfo = collector_interface->getFrameInfo (io_hndl, iopkt->comm.tstamp, FRINFO_FROM_STACK, &iopkt);
+#endif
+ collector_interface->writeDataRecord (io_hndl, (Common_packet*) iopkt);
+ collector_interface->freeCSize (io_heap, packet, pktSize);
+ }
+ else
+ {
+ Tprintf (0, "iotrace: ERROR: fopen cannot allocate memory\n");
+ return NULL;
+ }
+ POP_REENTRANCE (guard);
+ return fp;
+}
+
+/*------------------------------------------------------------- fclose */
+// map interposed symbol versions
+#if ARCH(Intel) && WSIZE(32)
+
+static int
+__collector_fclose_symver (int(real_fclose) (), FILE *stream);
+
+SYMVER_ATTRIBUTE (__collector_fclose_2_1, fclose@@GLIBC_2.1)
+int
+__collector_fclose_2_1 (FILE *stream)
+{
+ if (NULL_PTR (fclose))
+ init_io_intf ();
+ TprintfT (DBG_LTT, "iotrace: __collector_fclose_2_1@%p\n", CALL_REAL (fclose_2_1));
+ return __collector_fclose_symver (CALL_REAL (fclose_2_1), stream);
+}
+
+SYMVER_ATTRIBUTE (__collector_fclose_2_0, fclose@GLIBC_2.0)
+int
+__collector_fclose_2_0 (FILE *stream)
+{
+ if (NULL_PTR (fclose))
+ init_io_intf ();
+ TprintfT (DBG_LTT, "iotrace: __collector_fclose_2_0@%p\n", CALL_REAL (fclose_2_0));
+ return __collector_fclose_symver (CALL_REAL (fclose_2_0), stream);
+}
+
+#endif
+
+#if ARCH(Intel) && WSIZE(32)
+
+static int
+__collector_fclose_symver (int(real_fclose) (), FILE *stream)
+{
+#else
+
+int
+fclose (FILE *stream)
+{
+#endif
+ int *guard;
+ int stat;
+ IOTrace_packet iopkt;
+ if (NULL_PTR (fclose))
+ init_io_intf ();
+ if (CHCK_REENTRANCE (guard) || stream == NULL)
+ {
+#if ARCH(Intel) && WSIZE(32)
+ return (real_fclose) (stream);
+#else
+ return CALL_REAL (fclose)(stream);
+#endif
+ }
+ PUSH_REENTRANCE (guard);
+ hrtime_t reqt = gethrtime ();
+#if ARCH(Intel) && WSIZE(32)
+ stat = (real_fclose) (stream);
+#else
+ stat = CALL_REAL (fclose)(stream);
+#endif
+ if (RECHCK_REENTRANCE (guard))
+ {
+ POP_REENTRANCE (guard);
+ return stat;
+ }
+ hrtime_t grnt = gethrtime ();
+ collector_memset (&iopkt, 0, sizeof (IOTrace_packet));
+ iopkt.comm.tsize = sizeof (IOTrace_packet);
+ iopkt.comm.tstamp = grnt;
+ iopkt.requested = reqt;
+ if (stat == 0)
+ iopkt.iotype = CLOSE_TRACE;
+ else
+ iopkt.iotype = CLOSE_TRACE_ERROR;
+ iopkt.fd = fileno (stream);
+
+#if ARCH(Intel) && WSIZE(32)
+ iopkt.comm.frinfo = collector_interface->getFrameInfo (io_hndl, iopkt.comm.tstamp, FRINFO_FROM_STACK_ARG, &iopkt);
+#else
+ iopkt.comm.frinfo = collector_interface->getFrameInfo (io_hndl, iopkt.comm.tstamp, FRINFO_FROM_STACK, &iopkt);
+#endif
+ collector_interface->writeDataRecord (io_hndl, (Common_packet*) & iopkt);
+ POP_REENTRANCE (guard);
+ return stat;
+}
+
+/*------------------------------------------------------------- fflush */
+int
+fflush (FILE *stream)
+{
+ int *guard;
+ int stat;
+ IOTrace_packet iopkt;
+ if (NULL_PTR (fflush))
+ init_io_intf ();
+ if (CHCK_REENTRANCE (guard))
+ return CALL_REAL (fflush)(stream);
+ PUSH_REENTRANCE (guard);
+ hrtime_t reqt = gethrtime ();
+ stat = CALL_REAL (fflush)(stream);
+ if (RECHCK_REENTRANCE (guard))
+ {
+ POP_REENTRANCE (guard);
+ return stat;
+ }
+ hrtime_t grnt = gethrtime ();
+ collector_memset (&iopkt, 0, sizeof (IOTrace_packet));
+ iopkt.comm.tsize = sizeof (IOTrace_packet);
+ iopkt.comm.tstamp = grnt;
+ iopkt.requested = reqt;
+ if (stat == 0)
+ iopkt.iotype = OTHERIO_TRACE;
+ else
+ iopkt.iotype = OTHERIO_TRACE_ERROR;
+ if (stream != NULL)
+ iopkt.fd = fileno (stream);
+ else
+ iopkt.fd = -1;
+ iopkt.comm.frinfo = collector_interface->getFrameInfo (io_hndl, iopkt.comm.tstamp, FRINFO_FROM_STACK, &iopkt);
+ collector_interface->writeDataRecord (io_hndl, (Common_packet*) & iopkt);
+ POP_REENTRANCE (guard);
+ return stat;
+}
+
+/*------------------------------------------------------------- fdopen */
+// map interposed symbol versions
+#if ARCH(Intel) && WSIZE(32)
+
+static FILE*
+__collector_fdopen_symver (FILE*(real_fdopen) (), int fildes, const char *mode);
+
+SYMVER_ATTRIBUTE (__collector_fdopen_2_1, fdopen@@GLIBC_2.1)
+FILE*
+__collector_fdopen_2_1 (int fildes, const char *mode)
+{
+ if (NULL_PTR (fdopen))
+ init_io_intf ();
+ TprintfT (DBG_LTT, "iotrace: __collector_fdopen_2_1@%p\n", CALL_REAL (fdopen_2_1));
+ return __collector_fdopen_symver (CALL_REAL (fdopen_2_1), fildes, mode);
+}
+
+SYMVER_ATTRIBUTE (__collector_fdopen_2_0, fdopen@GLIBC_2.0)
+FILE*
+__collector_fdopen_2_0 (int fildes, const char *mode)
+{
+ if (NULL_PTR (fdopen))
+ init_io_intf ();
+ TprintfT (DBG_LTT, "iotrace: __collector_fdopen_2_0@%p\n", CALL_REAL (fdopen_2_0));
+ return __collector_fdopen_symver (CALL_REAL (fdopen_2_0), fildes, mode);
+}
+
+#endif
+
+#if ARCH(Intel) && WSIZE(32)
+static FILE*
+__collector_fdopen_symver (FILE*(real_fdopen) (), int fildes, const char *mode)
+{
+#else
+FILE*
+fdopen (int fildes, const char *mode)
+{
+#endif
+ int *guard;
+ FILE *fp = NULL;
+ IOTrace_packet iopkt;
+ if (NULL_PTR (fdopen))
+ init_io_intf ();
+ if (CHCK_REENTRANCE (guard))
+ {
+#if ARCH(Intel) && WSIZE(32)
+ return (real_fdopen) (fildes, mode);
+#else
+ return CALL_REAL (fdopen)(fildes, mode);
+#endif
+ }
+ PUSH_REENTRANCE (guard);
+ hrtime_t reqt = gethrtime ();
+#if ARCH(Intel) && WSIZE(32)
+ fp = (real_fdopen) (fildes, mode);
+#else
+ fp = CALL_REAL (fdopen)(fildes, mode);
+#endif
+ if (RECHCK_REENTRANCE (guard))
+ {
+ POP_REENTRANCE (guard);
+ return fp;
+ }
+ hrtime_t grnt = gethrtime ();
+ collector_memset (&iopkt, 0, sizeof (IOTrace_packet));
+ iopkt.comm.tsize = sizeof (IOTrace_packet);
+ iopkt.comm.tstamp = grnt;
+ iopkt.requested = reqt;
+ if (fp != NULL)
+ iopkt.iotype = OPEN_TRACE;
+ else
+ iopkt.iotype = OPEN_TRACE_ERROR;
+ iopkt.fd = fildes;
+ iopkt.fstype = UNKNOWNFS_TYPE;
+#if ARCH(Intel) && WSIZE(32)
+ iopkt.comm.frinfo = collector_interface->getFrameInfo (io_hndl, iopkt.comm.tstamp, FRINFO_FROM_STACK_ARG, &iopkt);
+#else
+ iopkt.comm.frinfo = collector_interface->getFrameInfo (io_hndl, iopkt.comm.tstamp, FRINFO_FROM_STACK, &iopkt);
+#endif
+ collector_interface->writeDataRecord (io_hndl, (Common_packet*) & iopkt);
+ POP_REENTRANCE (guard);
+ return fp;
+}
+
+/*------------------------------------------------------------- dup */
+int
+dup (int fildes)
+{
+ int *guard;
+ int fd;
+ IOTrace_packet iopkt;
+ if (NULL_PTR (dup))
+ init_io_intf ();
+ if (CHCK_REENTRANCE (guard))
+ return CALL_REAL (dup)(fildes);
+ PUSH_REENTRANCE (guard);
+ hrtime_t reqt = gethrtime ();
+ fd = CALL_REAL (dup)(fildes);
+ if (RECHCK_REENTRANCE (guard))
+ {
+ POP_REENTRANCE (guard);
+ return fd;
+ }
+ hrtime_t grnt = gethrtime ();
+ collector_memset (&iopkt, 0, sizeof (IOTrace_packet));
+ iopkt.comm.tsize = sizeof (IOTrace_packet);
+ iopkt.comm.tstamp = grnt;
+ iopkt.requested = reqt;
+ if (fd != -1)
+ iopkt.iotype = OPEN_TRACE;
+ else
+ iopkt.iotype = OPEN_TRACE_ERROR;
+
+ iopkt.fd = fd;
+ iopkt.ofd = fildes;
+ iopkt.fstype = UNKNOWNFS_TYPE;
+ iopkt.comm.frinfo = collector_interface->getFrameInfo (io_hndl, iopkt.comm.tstamp, FRINFO_FROM_STACK, &iopkt);
+ collector_interface->writeDataRecord (io_hndl, (Common_packet*) & iopkt);
+ POP_REENTRANCE (guard);
+ return fd;
+}
+
+/*------------------------------------------------------------- dup2 */
+int
+dup2 (int fildes, int fildes2)
+{
+ int *guard;
+ int fd;
+ IOTrace_packet iopkt;
+ if (NULL_PTR (dup2))
+ init_io_intf ();
+ if (CHCK_REENTRANCE (guard))
+ return CALL_REAL (dup2)(fildes, fildes2);
+ PUSH_REENTRANCE (guard);
+ hrtime_t reqt = gethrtime ();
+ fd = CALL_REAL (dup2)(fildes, fildes2);
+ if (RECHCK_REENTRANCE (guard))
+ {
+ POP_REENTRANCE (guard);
+ return fd;
+ }
+ hrtime_t grnt = gethrtime ();
+ collector_memset (&iopkt, 0, sizeof (IOTrace_packet));
+ iopkt.comm.tsize = sizeof (IOTrace_packet);
+ iopkt.comm.tstamp = grnt;
+ iopkt.requested = reqt;
+ if (fd != -1)
+ iopkt.iotype = OPEN_TRACE;
+ else
+ iopkt.iotype = OPEN_TRACE_ERROR;
+ iopkt.fd = fd;
+ iopkt.ofd = fildes;
+ iopkt.fstype = UNKNOWNFS_TYPE;
+ iopkt.comm.frinfo = collector_interface->getFrameInfo (io_hndl, iopkt.comm.tstamp, FRINFO_FROM_STACK, &iopkt);
+ collector_interface->writeDataRecord (io_hndl, (Common_packet*) & iopkt);
+ POP_REENTRANCE (guard);
+ return fd;
+}
+
+/*------------------------------------------------------------- pipe */
+int
+pipe (int fildes[2])
+{
+ int *guard;
+ int ret;
+ IOTrace_packet iopkt;
+ if (NULL_PTR (pipe))
+ init_io_intf ();
+ if (CHCK_REENTRANCE (guard))
+ return CALL_REAL (pipe)(fildes);
+ PUSH_REENTRANCE (guard);
+ hrtime_t reqt = gethrtime ();
+ ret = CALL_REAL (pipe)(fildes);
+ if (RECHCK_REENTRANCE (guard))
+ {
+ POP_REENTRANCE (guard);
+ return ret;
+ }
+ hrtime_t grnt = gethrtime ();
+ collector_memset (&iopkt, 0, sizeof (IOTrace_packet));
+ iopkt.comm.tsize = sizeof (IOTrace_packet);
+ iopkt.comm.tstamp = grnt;
+ iopkt.requested = reqt;
+ if (ret != -1)
+ iopkt.iotype = OPEN_TRACE;
+ else
+ iopkt.iotype = OPEN_TRACE_ERROR;
+ iopkt.fd = fildes[0];
+ iopkt.fstype = UNKNOWNFS_TYPE;
+ iopkt.comm.frinfo = collector_interface->getFrameInfo (io_hndl, iopkt.comm.tstamp, FRINFO_FROM_STACK, &iopkt);
+ collector_interface->writeDataRecord (io_hndl, (Common_packet*) & iopkt);
+ collector_memset (&iopkt, 0, sizeof (IOTrace_packet));
+ iopkt.comm.tsize = sizeof (IOTrace_packet);
+ iopkt.comm.tstamp = grnt;
+ iopkt.requested = reqt;
+ if (ret != -1)
+ iopkt.iotype = OPEN_TRACE;
+ else
+ iopkt.iotype = OPEN_TRACE_ERROR;
+ iopkt.fd = fildes[1];
+ iopkt.fstype = UNKNOWNFS_TYPE;
+ iopkt.comm.frinfo = collector_interface->getFrameInfo (io_hndl, iopkt.comm.tstamp, FRINFO_FROM_STACK, &iopkt);
+ collector_interface->writeDataRecord (io_hndl, (Common_packet*) & iopkt);
+ POP_REENTRANCE (guard);
+ return ret;
+}
+
+/*------------------------------------------------------------- socket */
+int
+socket (int domain, int type, int protocol)
+{
+ int *guard;
+ int fd;
+ IOTrace_packet iopkt;
+ if (NULL_PTR (socket))
+ init_io_intf ();
+ if (CHCK_REENTRANCE (guard))
+ return CALL_REAL (socket)(domain, type, protocol);
+ PUSH_REENTRANCE (guard);
+ hrtime_t reqt = gethrtime ();
+ fd = CALL_REAL (socket)(domain, type, protocol);
+ if (RECHCK_REENTRANCE (guard))
+ {
+ POP_REENTRANCE (guard);
+ return fd;
+ }
+ hrtime_t grnt = gethrtime ();
+ collector_memset (&iopkt, 0, sizeof (IOTrace_packet));
+ iopkt.comm.tsize = sizeof (IOTrace_packet);
+ iopkt.comm.tstamp = grnt;
+ iopkt.requested = reqt;
+ if (fd != -1)
+ iopkt.iotype = OPEN_TRACE;
+ else
+ iopkt.iotype = OPEN_TRACE_ERROR;
+ iopkt.fd = fd;
+ iopkt.fstype = UNKNOWNFS_TYPE;
+ iopkt.comm.frinfo = collector_interface->getFrameInfo (io_hndl, iopkt.comm.tstamp, FRINFO_FROM_STACK, &iopkt);
+ collector_interface->writeDataRecord (io_hndl, (Common_packet*) & iopkt);
+ POP_REENTRANCE (guard);
+ return fd;
+}
+
+/*------------------------------------------------------------- read */
+ssize_t
+read (int fildes, void *buf, size_t nbyte)
+{
+ int *guard;
+ ssize_t ret;
+ IOTrace_packet iopkt;
+ if (NULL_PTR (read))
+ init_io_intf ();
+ if (CHCK_REENTRANCE (guard))
+ return CALL_REAL (read)(fildes, buf, nbyte);
+ PUSH_REENTRANCE (guard);
+ hrtime_t reqt = gethrtime ();
+ ret = CALL_REAL (read)(fildes, buf, nbyte);
+ if (RECHCK_REENTRANCE (guard))
+ {
+ POP_REENTRANCE (guard);
+ return ret;
+ }
+ hrtime_t grnt = gethrtime ();
+ collector_memset (&iopkt, 0, sizeof ( IOTrace_packet));
+ iopkt.comm.tsize = sizeof ( IOTrace_packet);
+ iopkt.comm.tstamp = grnt;
+ iopkt.requested = reqt;
+ if (ret >= 0)
+ iopkt.iotype = READ_TRACE;
+ else
+ iopkt.iotype = READ_TRACE_ERROR;
+ iopkt.fd = fildes;
+ iopkt.nbyte = ret;
+ iopkt.comm.frinfo = collector_interface->getFrameInfo (io_hndl, iopkt.comm.tstamp, FRINFO_FROM_STACK, &iopkt);
+ collector_interface->writeDataRecord (io_hndl, (Common_packet*) & iopkt);
+ POP_REENTRANCE (guard);
+ return ret;
+}
+
+/*------------------------------------------------------------- write */
+ssize_t
+write (int fildes, const void *buf, size_t nbyte)
+{
+ int *guard;
+ ssize_t ret;
+ IOTrace_packet iopkt;
+ if (NULL_PTR (write))
+ init_io_intf ();
+ if (CHCK_REENTRANCE (guard))
+ return CALL_REAL (write)(fildes, buf, nbyte);
+ PUSH_REENTRANCE (guard);
+ hrtime_t reqt = gethrtime ();
+ ret = CALL_REAL (write)(fildes, buf, nbyte);
+ if (RECHCK_REENTRANCE (guard))
+ {
+ POP_REENTRANCE (guard);
+ return ret;
+ }
+ hrtime_t grnt = gethrtime ();
+ collector_memset (&iopkt, 0, sizeof ( IOTrace_packet));
+ iopkt.comm.tsize = sizeof ( IOTrace_packet);
+ iopkt.comm.tstamp = grnt;
+ iopkt.requested = reqt;
+ if (ret >= 0)
+ iopkt.iotype = WRITE_TRACE;
+ else
+ iopkt.iotype = WRITE_TRACE_ERROR;
+ iopkt.fd = fildes;
+ iopkt.nbyte = ret;
+ iopkt.comm.frinfo = collector_interface->getFrameInfo (io_hndl, iopkt.comm.tstamp, FRINFO_FROM_STACK, &iopkt);
+ collector_interface->writeDataRecord (io_hndl, (Common_packet*) & iopkt);
+ POP_REENTRANCE (guard);
+ return ret;
+}
+
+/*------------------------------------------------------------- readv */
+ssize_t
+readv (int fildes, const struct iovec *iov, int iovcnt)
+{
+ int *guard;
+ ssize_t ret;
+ IOTrace_packet iopkt;
+ if (NULL_PTR (readv))
+ init_io_intf ();
+ if (CHCK_REENTRANCE (guard))
+ return CALL_REAL (readv)(fildes, iov, iovcnt);
+ PUSH_REENTRANCE (guard);
+ hrtime_t reqt = gethrtime ();
+ ret = CALL_REAL (readv)(fildes, iov, iovcnt);
+ if (RECHCK_REENTRANCE (guard))
+ {
+ POP_REENTRANCE (guard);
+ return ret;
+ }
+ hrtime_t grnt = gethrtime ();
+ collector_memset (&iopkt, 0, sizeof ( IOTrace_packet));
+ iopkt.comm.tsize = sizeof ( IOTrace_packet);
+ iopkt.comm.tstamp = grnt;
+ iopkt.requested = reqt;
+ if (ret >= 0)
+ iopkt.iotype = READ_TRACE;
+ else
+ iopkt.iotype = READ_TRACE_ERROR;
+ iopkt.fd = fildes;
+ iopkt.nbyte = ret;
+ iopkt.comm.frinfo = collector_interface->getFrameInfo (io_hndl, iopkt.comm.tstamp, FRINFO_FROM_STACK, &iopkt);
+ collector_interface->writeDataRecord (io_hndl, (Common_packet*) & iopkt);
+ POP_REENTRANCE (guard);
+ return ret;
+}
+
+/*------------------------------------------------------------- writev */
+ssize_t
+writev (int fildes, const struct iovec *iov, int iovcnt)
+{
+ int *guard;
+ ssize_t ret;
+ IOTrace_packet iopkt;
+ if (NULL_PTR (writev))
+ init_io_intf ();
+ if (CHCK_REENTRANCE (guard))
+ return CALL_REAL (writev)(fildes, iov, iovcnt);
+ PUSH_REENTRANCE (guard);
+ hrtime_t reqt = gethrtime ();
+ ret = CALL_REAL (writev)(fildes, iov, iovcnt);
+ if (RECHCK_REENTRANCE (guard))
+ {
+ POP_REENTRANCE (guard);
+ return ret;
+ }
+ hrtime_t grnt = gethrtime ();
+ collector_memset (&iopkt, 0, sizeof ( IOTrace_packet));
+ iopkt.comm.tsize = sizeof ( IOTrace_packet);
+ iopkt.comm.tstamp = grnt;
+ iopkt.requested = reqt;
+ if (ret >= 0)
+ iopkt.iotype = WRITE_TRACE;
+ else
+ iopkt.iotype = WRITE_TRACE_ERROR;
+ iopkt.fd = fildes;
+ iopkt.nbyte = ret;
+ iopkt.comm.frinfo = collector_interface->getFrameInfo (io_hndl, iopkt.comm.tstamp, FRINFO_FROM_STACK, &iopkt);
+ collector_interface->writeDataRecord (io_hndl, (Common_packet*) & iopkt);
+ POP_REENTRANCE (guard);
+ return ret;
+}
+
+/*------------------------------------------------------------- fread */
+size_t
+fread (void *ptr, size_t size, size_t nitems, FILE *stream)
+{
+ int *guard;
+ size_t ret;
+ IOTrace_packet iopkt;
+ if (NULL_PTR (fread))
+ init_io_intf ();
+ if (CHCK_REENTRANCE (guard) || stream == NULL)
+ return CALL_REAL (fread)(ptr, size, nitems, stream);
+ PUSH_REENTRANCE (guard);
+ hrtime_t reqt = gethrtime ();
+ ret = CALL_REAL (fread)(ptr, size, nitems, stream);
+ if (RECHCK_REENTRANCE (guard))
+ {
+ POP_REENTRANCE (guard);
+ return ret;
+ }
+ hrtime_t grnt = gethrtime ();
+ collector_memset (&iopkt, 0, sizeof ( IOTrace_packet));
+ iopkt.comm.tsize = sizeof ( IOTrace_packet);
+ iopkt.comm.tstamp = grnt;
+ iopkt.requested = reqt;
+ if (ferror (stream) == 0)
+ {
+ iopkt.iotype = READ_TRACE;
+ iopkt.nbyte = ret * size;
+ }
+ else
+ {
+ iopkt.iotype = READ_TRACE_ERROR;
+ iopkt.nbyte = 0;
+ }
+ iopkt.fd = fileno (stream);
+ iopkt.comm.frinfo = collector_interface->getFrameInfo (io_hndl, iopkt.comm.tstamp, FRINFO_FROM_STACK, &iopkt);
+ collector_interface->writeDataRecord (io_hndl, (Common_packet*) & iopkt);
+ POP_REENTRANCE (guard);
+ return ret;
+}
+
+/*------------------------------------------------------------- fwrite */
+size_t
+fwrite (const void *ptr, size_t size, size_t nitems, FILE *stream)
+{
+ int *guard;
+ size_t ret;
+ IOTrace_packet iopkt;
+ if (NULL_PTR (fwrite))
+ init_io_intf ();
+ if (CHCK_REENTRANCE (guard) || stream == NULL)
+ return CALL_REAL (fwrite)(ptr, size, nitems, stream);
+ PUSH_REENTRANCE (guard);
+ hrtime_t reqt = gethrtime ();
+ ret = CALL_REAL (fwrite)(ptr, size, nitems, stream);
+ if (RECHCK_REENTRANCE (guard))
+ {
+ POP_REENTRANCE (guard);
+ return ret;
+ }
+ hrtime_t grnt = gethrtime ();
+ collector_memset (&iopkt, 0, sizeof ( IOTrace_packet));
+ iopkt.comm.tsize = sizeof ( IOTrace_packet);
+ iopkt.comm.tstamp = grnt;
+ iopkt.requested = reqt;
+ if (ferror (stream) == 0)
+ {
+ iopkt.iotype = WRITE_TRACE;
+ iopkt.nbyte = ret * size;
+ }
+ else
+ {
+ iopkt.iotype = WRITE_TRACE_ERROR;
+ iopkt.nbyte = 0;
+ }
+ iopkt.fd = fileno (stream);
+ iopkt.comm.frinfo = collector_interface->getFrameInfo (io_hndl, iopkt.comm.tstamp, FRINFO_FROM_STACK, &iopkt);
+ collector_interface->writeDataRecord (io_hndl, (Common_packet*) & iopkt);
+ POP_REENTRANCE (guard);
+ return ret;
+}
+
+/*------------------------------------------------------------- pread */
+#if ARCH(Intel) && WSIZE(32)
+// map interposed symbol versions
+static int
+__collector_pread_symver (int(real_pread) (), int fildes, void *buf, size_t nbyte, off_t offset);
+
+SYMVER_ATTRIBUTE (__collector_pread_2_2, pread@@GLIBC_2.2)
+int
+__collector_pread_2_2 (int fildes, void *buf, size_t nbyte, off_t offset)
+{
+ TprintfT (DBG_LTT, "iotrace: __collector_pread_2_2@%p(fildes=%d, buf=%p, nbyte=%lld, offset=%lld)\n",
+ CALL_REAL (pread_2_2), fildes, buf, (long long) nbyte, (long long) offset);
+ if (NULL_PTR (pread))
+ init_io_intf ();
+ return __collector_pread_symver (CALL_REAL (pread_2_2), fildes, buf, nbyte, offset);
+}
+
+SYMVER_ATTRIBUTE (__collector_pread_2_1, pread@GLIBC_2.1)
+int
+__collector_pread_2_1 (int fildes, void *buf, size_t nbyte, off_t offset)
+{
+ TprintfT (DBG_LTT, "iotrace: __collector_pread_2_1@%p(fildes=%d, buf=%p, nbyte=%lld, offset=%lld)\n",
+ CALL_REAL (pread_2_1), fildes, buf, (long long) nbyte, (long long) offset);
+ if (NULL_PTR (pread))
+ init_io_intf ();
+ return __collector_pread_symver (CALL_REAL (pread_2_1), fildes, buf, nbyte, offset);
+}
+
+static int
+__collector_pread_symver (int(real_pread) (), int fildes, void *buf, size_t nbyte, off_t offset)
+{
+#else /* ^ARCH(Intel) && WSIZE(32) */
+
+ssize_t
+pread (int fildes, void *buf, size_t nbyte, off_t offset)
+{
+#endif
+ int *guard;
+ ssize_t ret;
+ IOTrace_packet iopkt;
+ if (NULL_PTR (pread))
+ init_io_intf ();
+ if (CHCK_REENTRANCE (guard))
+ {
+#if ARCH(Intel) && WSIZE(32)
+ return (real_pread) (fildes, buf, nbyte, offset);
+#else
+ return CALL_REAL (pread)(fildes, buf, nbyte, offset);
+#endif
+ }
+ PUSH_REENTRANCE (guard);
+ hrtime_t reqt = gethrtime ();
+#if ARCH(Intel) && WSIZE(32)
+ ret = (real_pread) (fildes, buf, nbyte, offset);
+#else
+ ret = CALL_REAL (pread)(fildes, buf, nbyte, offset);
+#endif
+ if (RECHCK_REENTRANCE (guard))
+ {
+ POP_REENTRANCE (guard);
+ return ret;
+ }
+ hrtime_t grnt = gethrtime ();
+ collector_memset (&iopkt, 0, sizeof ( IOTrace_packet));
+ iopkt.comm.tsize = sizeof ( IOTrace_packet);
+ iopkt.comm.tstamp = grnt;
+ iopkt.requested = reqt;
+ if (ret >= 0)
+ iopkt.iotype = READ_TRACE;
+ else
+ iopkt.iotype = READ_TRACE_ERROR;
+ iopkt.fd = fildes;
+ iopkt.nbyte = ret;
+ iopkt.comm.frinfo = collector_interface->getFrameInfo (io_hndl, iopkt.comm.tstamp, FRINFO_FROM_STACK, &iopkt);
+ collector_interface->writeDataRecord (io_hndl, (Common_packet*) & iopkt);
+ POP_REENTRANCE (guard);
+ return ret;
+}
+
+/*------------------------------------------------------------- pwrite */
+#if ARCH(Intel) && WSIZE(32)
+// map interposed symbol versions
+static int
+__collector_pwrite_symver (int(real_pwrite) (), int fildes, const void *buf, size_t nbyte, off_t offset);
+
+SYMVER_ATTRIBUTE (__collector_pwrite_2_2, pwrite@@GLIBC_2.2)
+int
+__collector_pwrite_2_2 (int fildes, const void *buf, size_t nbyte, off_t offset)
+{
+ TprintfT (DBG_LTT, "iotrace: __collector_pwrite_2_2@%p(fildes=%d, buf=%p, nbyte=%lld, offset=%lld)\n",
+ CALL_REAL (pwrite_2_2), fildes, buf, (long long) nbyte, (long long) offset);
+ if (NULL_PTR (pwrite))
+ init_io_intf ();
+ return __collector_pwrite_symver (CALL_REAL (pwrite_2_2), fildes, buf, nbyte, offset);
+}
+
+SYMVER_ATTRIBUTE (__collector_pwrite_2_1, pwrite@GLIBC_2.1)
+int
+__collector_pwrite_2_1 (int fildes, const void *buf, size_t nbyte, off_t offset)
+{
+ TprintfT (DBG_LTT, "iotrace: __collector_pwrite_2_1@%p(fildes=%d, buf=%p, nbyte=%lld, offset=%lld)\n",
+ CALL_REAL (pwrite_2_1), fildes, buf, (long long) nbyte, (long long) offset);
+ if (NULL_PTR (pwrite))
+ init_io_intf ();
+ return __collector_pwrite_symver (CALL_REAL (pwrite_2_1), fildes, buf, nbyte, offset);
+}
+
+static int
+__collector_pwrite_symver (int(real_pwrite) (), int fildes, const void *buf, size_t nbyte, off_t offset)
+{
+#else /* ^ARCH(Intel) && WSIZE(32) */
+
+ssize_t
+pwrite (int fildes, const void *buf, size_t nbyte, off_t offset)
+{
+#endif /* ^ARCH(Intel) && WSIZE(32) */
+ int *guard;
+ ssize_t ret;
+ IOTrace_packet iopkt;
+ if (NULL_PTR (pwrite))
+ init_io_intf ();
+ if (CHCK_REENTRANCE (guard))
+ {
+#if ARCH(Intel) && WSIZE(32)
+ return (real_pwrite) (fildes, buf, nbyte, offset);
+#else
+ return CALL_REAL (pwrite)(fildes, buf, nbyte, offset);
+#endif
+ }
+ PUSH_REENTRANCE (guard);
+ hrtime_t reqt = gethrtime ();
+#if ARCH(Intel) && WSIZE(32)
+ ret = (real_pwrite) (fildes, buf, nbyte, offset);
+#else
+ ret = CALL_REAL (pwrite)(fildes, buf, nbyte, offset);
+#endif
+ if (RECHCK_REENTRANCE (guard))
+ {
+ POP_REENTRANCE (guard);
+ return ret;
+ }
+ hrtime_t grnt = gethrtime ();
+ collector_memset (&iopkt, 0, sizeof ( IOTrace_packet));
+ iopkt.comm.tsize = sizeof ( IOTrace_packet);
+ iopkt.comm.tstamp = grnt;
+ iopkt.requested = reqt;
+ if (ret >= 0)
+ iopkt.iotype = WRITE_TRACE;
+ else
+ iopkt.iotype = WRITE_TRACE_ERROR;
+ iopkt.fd = fildes;
+ iopkt.nbyte = ret;
+ iopkt.comm.frinfo = collector_interface->getFrameInfo (io_hndl, iopkt.comm.tstamp, FRINFO_FROM_STACK, &iopkt);
+ collector_interface->writeDataRecord (io_hndl, (Common_packet*) & iopkt);
+ POP_REENTRANCE (guard);
+ return ret;
+}
+
+/*------------------------------------------------------------- pwrite64 */
+#if ARCH(Intel) && WSIZE(32)
+// map interposed symbol versions
+static int
+__collector_pwrite64_symver (int(real_pwrite64) (), int fildes, const void *buf, size_t nbyte, off64_t offset);
+
+SYMVER_ATTRIBUTE (__collector_pwrite64_2_2, pwrite64@@GLIBC_2.2)
+int
+__collector_pwrite64_2_2 (int fildes, const void *buf, size_t nbyte, off64_t offset)
+{
+ TprintfT (DBG_LTT, "iotrace: __collector_pwrite64_2_2@%p(fildes=%d, buf=%p, nbyte=%lld, offset=%lld)\n",
+ CALL_REAL (pwrite64_2_2), fildes, buf, (long long) nbyte, (long long) offset);
+ if (NULL_PTR (pwrite64))
+ init_io_intf ();
+ return __collector_pwrite64_symver (CALL_REAL (pwrite64_2_2), fildes, buf, nbyte, offset);
+}
+
+SYMVER_ATTRIBUTE (__collector_pwrite64_2_1, pwrite64@GLIBC_2.1)
+int
+__collector_pwrite64_2_1 (int fildes, const void *buf, size_t nbyte, off64_t offset)
+{
+ TprintfT (DBG_LTT, "iotrace: __collector_pwrite64_2_1@%p(fildes=%d, buf=%p, nbyte=%lld, offset=%lld)\n",
+ CALL_REAL (pwrite64_2_1), fildes, buf, (long long) nbyte, (long long) offset);
+ if (NULL_PTR (pwrite64))
+ init_io_intf ();
+ return __collector_pwrite64_symver (CALL_REAL (pwrite64_2_1), fildes, buf, nbyte, offset);
+}
+
+static int
+__collector_pwrite64_symver (int(real_pwrite64) (), int fildes, const void *buf, size_t nbyte, off64_t offset)
+{
+#else /* ^ARCH(Intel) && WSIZE(32) */
+
+ssize_t
+pwrite64 (int fildes, const void *buf, size_t nbyte, off64_t offset)
+{
+#endif /* ^ARCH(Intel) && WSIZE(32) */
+ int *guard;
+ ssize_t ret;
+ IOTrace_packet iopkt;
+ if (NULL_PTR (pwrite64))
+ init_io_intf ();
+ if (CHCK_REENTRANCE (guard))
+ {
+#if ARCH(Intel) && WSIZE(32)
+ return (real_pwrite64) (fildes, buf, nbyte, offset);
+#else
+ return CALL_REAL (pwrite64)(fildes, buf, nbyte, offset);
+#endif
+ }
+ PUSH_REENTRANCE (guard);
+ hrtime_t reqt = gethrtime ();
+#if ARCH(Intel) && WSIZE(32)
+ ret = (real_pwrite64) (fildes, buf, nbyte, offset);
+#else
+ ret = CALL_REAL (pwrite64)(fildes, buf, nbyte, offset);
+#endif
+ if (RECHCK_REENTRANCE (guard))
+ {
+ POP_REENTRANCE (guard);
+ return ret;
+ }
+ hrtime_t grnt = gethrtime ();
+ collector_memset (&iopkt, 0, sizeof ( IOTrace_packet));
+ iopkt.comm.tsize = sizeof ( IOTrace_packet);
+ iopkt.comm.tstamp = grnt;
+ iopkt.requested = reqt;
+ if (ret >= 0)
+ iopkt.iotype = WRITE_TRACE;
+ else
+ iopkt.iotype = WRITE_TRACE_ERROR;
+ iopkt.fd = fildes;
+ iopkt.nbyte = ret;
+ iopkt.comm.frinfo = collector_interface->getFrameInfo (io_hndl, iopkt.comm.tstamp, FRINFO_FROM_STACK, &iopkt);
+ collector_interface->writeDataRecord (io_hndl, (Common_packet*) & iopkt);
+ POP_REENTRANCE (guard);
+ return ret;
+}
+
+/*------------------------------------------------------------- fgets */
+char*
+fgets (char *s, int n, FILE *stream)
+{
+ int *guard;
+ char *ptr;
+ IOTrace_packet iopkt;
+ if (NULL_PTR (fgets))
+ init_io_intf ();
+ if (CHCK_REENTRANCE (guard) || stream == NULL)
+ return CALL_REAL (fgets)(s, n, stream);
+ PUSH_REENTRANCE (guard);
+ hrtime_t reqt = gethrtime ();
+ ptr = CALL_REAL (fgets)(s, n, stream);
+ if (RECHCK_REENTRANCE (guard))
+ {
+ POP_REENTRANCE (guard);
+ return ptr;
+ }
+ int error = errno;
+ hrtime_t grnt = gethrtime ();
+ collector_memset (&iopkt, 0, sizeof ( IOTrace_packet));
+ iopkt.comm.tsize = sizeof ( IOTrace_packet);
+ iopkt.comm.tstamp = grnt;
+ iopkt.requested = reqt;
+ if (ptr != NULL)
+ {
+ iopkt.iotype = READ_TRACE;
+ iopkt.nbyte = collector_strlen (ptr);
+ }
+ else if (ptr == NULL && error != EAGAIN && error != EBADF && error != EINTR &&
+ error != EIO && error != EOVERFLOW && error != ENOMEM && error != ENXIO)
+ {
+ iopkt.iotype = READ_TRACE;
+ iopkt.nbyte = 0;
+ }
+ else
+ iopkt.iotype = READ_TRACE_ERROR;
+ iopkt.fd = fileno (stream);
+ iopkt.comm.frinfo = collector_interface->getFrameInfo (io_hndl, iopkt.comm.tstamp, FRINFO_FROM_STACK, &iopkt);
+ collector_interface->writeDataRecord (io_hndl, (Common_packet*) & iopkt);
+ POP_REENTRANCE (guard);
+ return ptr;
+}
+
+/*------------------------------------------------------------- fputs */
+int
+fputs (const char *s, FILE *stream)
+{
+ int *guard;
+ int ret;
+ IOTrace_packet iopkt;
+ if (NULL_PTR (fputs))
+ init_io_intf ();
+ if (CHCK_REENTRANCE (guard) || stream == NULL)
+ return CALL_REAL (fputs)(s, stream);
+ PUSH_REENTRANCE (guard);
+ hrtime_t reqt = gethrtime ();
+ ret = CALL_REAL (fputs)(s, stream);
+ if (RECHCK_REENTRANCE (guard))
+ {
+ POP_REENTRANCE (guard);
+ return ret;
+ }
+ hrtime_t grnt = gethrtime ();
+ collector_memset (&iopkt, 0, sizeof ( IOTrace_packet));
+ iopkt.comm.tsize = sizeof ( IOTrace_packet);
+ iopkt.comm.tstamp = grnt;
+ iopkt.requested = reqt;
+ if (ret != EOF)
+ {
+ iopkt.iotype = WRITE_TRACE;
+ iopkt.nbyte = ret;
+ }
+ else
+ {
+ iopkt.iotype = WRITE_TRACE_ERROR;
+ iopkt.nbyte = 0;
+ }
+ iopkt.fd = fileno (stream);
+ iopkt.comm.frinfo = collector_interface->getFrameInfo (io_hndl, iopkt.comm.tstamp, FRINFO_FROM_STACK, &iopkt);
+ collector_interface->writeDataRecord (io_hndl, (Common_packet*) & iopkt);
+ POP_REENTRANCE (guard);
+ return ret;
+}
+
+/*------------------------------------------------------------- fputc */
+int
+fputc (int c, FILE *stream)
+{
+ int *guard;
+ int ret;
+ IOTrace_packet iopkt;
+ if (NULL_PTR (fputc))
+ init_io_intf ();
+ if (CHCK_REENTRANCE (guard) || stream == NULL)
+ return CALL_REAL (fputc)(c, stream);
+ PUSH_REENTRANCE (guard);
+ hrtime_t reqt = gethrtime ();
+ ret = CALL_REAL (fputc)(c, stream);
+ if (RECHCK_REENTRANCE (guard))
+ {
+ POP_REENTRANCE (guard);
+ return ret;
+ }
+ hrtime_t grnt = gethrtime ();
+ collector_memset (&iopkt, 0, sizeof ( IOTrace_packet));
+ iopkt.comm.tsize = sizeof ( IOTrace_packet);
+ iopkt.comm.tstamp = grnt;
+ iopkt.requested = reqt;
+ if (ret != EOF)
+ {
+ iopkt.iotype = WRITE_TRACE;
+ iopkt.nbyte = ret;
+ }
+ else
+ {
+ iopkt.iotype = WRITE_TRACE_ERROR;
+ iopkt.nbyte = 0;
+ }
+ iopkt.fd = fileno (stream);
+ iopkt.comm.frinfo = collector_interface->getFrameInfo (io_hndl, iopkt.comm.tstamp, FRINFO_FROM_STACK, &iopkt);
+ collector_interface->writeDataRecord (io_hndl, (Common_packet*) & iopkt);
+ POP_REENTRANCE (guard);
+ return ret;
+}
+
+/*------------------------------------------------------------- fprintf */
+int
+fprintf (FILE *stream, const char *format, ...)
+{
+ int *guard;
+ int ret;
+ IOTrace_packet iopkt;
+ va_list ap;
+ va_start (ap, format);
+ if (NULL_PTR (fprintf))
+ init_io_intf ();
+ if (NULL_PTR (vfprintf))
+ init_io_intf ();
+ if (CHCK_REENTRANCE (guard) || stream == NULL)
+ return CALL_REAL (vfprintf)(stream, format, ap);
+ PUSH_REENTRANCE (guard);
+ hrtime_t reqt = gethrtime ();
+ ret = CALL_REAL (vfprintf)(stream, format, ap);
+ if (RECHCK_REENTRANCE (guard))
+ {
+ POP_REENTRANCE (guard);
+ return ret;
+ }
+ hrtime_t grnt = gethrtime ();
+ collector_memset (&iopkt, 0, sizeof ( IOTrace_packet));
+ iopkt.comm.tsize = sizeof ( IOTrace_packet);
+ iopkt.comm.tstamp = grnt;
+ iopkt.requested = reqt;
+ if (ret >= 0)
+ iopkt.iotype = WRITE_TRACE;
+ else
+ iopkt.iotype = WRITE_TRACE_ERROR;
+ iopkt.fd = fileno (stream);
+ iopkt.nbyte = ret;
+ iopkt.comm.frinfo = collector_interface->getFrameInfo (io_hndl, iopkt.comm.tstamp, FRINFO_FROM_STACK, &iopkt);
+ collector_interface->writeDataRecord (io_hndl, (Common_packet*) & iopkt);
+ POP_REENTRANCE (guard);
+ return ret;
+}
+
+/*------------------------------------------------------------- vfprintf */
+int
+vfprintf (FILE *stream, const char *format, va_list ap)
+{
+ int *guard;
+ int ret;
+ IOTrace_packet iopkt;
+ if (NULL_PTR (vfprintf))
+ init_io_intf ();
+ if (CHCK_REENTRANCE (guard) || stream == NULL)
+ return CALL_REAL (vfprintf)(stream, format, ap);
+ PUSH_REENTRANCE (guard);
+ hrtime_t reqt = gethrtime ();
+ ret = CALL_REAL (vfprintf)(stream, format, ap);
+ if (RECHCK_REENTRANCE (guard))
+ {
+ POP_REENTRANCE (guard);
+ return ret;
+ }
+ hrtime_t grnt = gethrtime ();
+ collector_memset (&iopkt, 0, sizeof ( IOTrace_packet));
+ iopkt.comm.tsize = sizeof ( IOTrace_packet);
+ iopkt.comm.tstamp = grnt;
+ iopkt.requested = reqt;
+ if (ret >= 0)
+ iopkt.iotype = WRITE_TRACE;
+ else
+ iopkt.iotype = WRITE_TRACE_ERROR;
+ iopkt.fd = fileno (stream);
+ iopkt.nbyte = ret;
+ iopkt.comm.frinfo = collector_interface->getFrameInfo (io_hndl, iopkt.comm.tstamp, FRINFO_FROM_STACK, &iopkt);
+ collector_interface->writeDataRecord (io_hndl, (Common_packet*) & iopkt);
+ POP_REENTRANCE (guard);
+ return ret;
+}
+
+/*------------------------------------------------------------- lseek */
+off_t
+lseek (int fildes, off_t offset, int whence)
+{
+ int *guard;
+ off_t ret;
+ IOTrace_packet iopkt;
+ if (NULL_PTR (lseek))
+ init_io_intf ();
+ if (CHCK_REENTRANCE (guard))
+ return CALL_REAL (lseek)(fildes, offset, whence);
+ PUSH_REENTRANCE (guard);
+ hrtime_t reqt = gethrtime ();
+ ret = CALL_REAL (lseek)(fildes, offset, whence);
+ if (RECHCK_REENTRANCE (guard))
+ {
+ POP_REENTRANCE (guard);
+ return ret;
+ }
+ hrtime_t grnt = gethrtime ();
+ collector_memset (&iopkt, 0, sizeof (IOTrace_packet));
+ iopkt.comm.tsize = sizeof (IOTrace_packet);
+ iopkt.comm.tstamp = grnt;
+ iopkt.requested = reqt;
+ if (ret != -1)
+ iopkt.iotype = OTHERIO_TRACE;
+ else
+ iopkt.iotype = OTHERIO_TRACE_ERROR;
+ iopkt.fd = fildes;
+ iopkt.comm.frinfo = collector_interface->getFrameInfo (io_hndl, iopkt.comm.tstamp, FRINFO_FROM_STACK, &iopkt);
+ collector_interface->writeDataRecord (io_hndl, (Common_packet*) & iopkt);
+ POP_REENTRANCE (guard);
+ return ret;
+}
+
+/*------------------------------------------------------------- llseek */
+offset_t
+llseek (int fildes, offset_t offset, int whence)
+{
+ int *guard;
+ offset_t ret;
+ IOTrace_packet iopkt;
+ if (NULL_PTR (llseek))
+ init_io_intf ();
+ if (CHCK_REENTRANCE (guard))
+ return CALL_REAL (llseek)(fildes, offset, whence);
+ PUSH_REENTRANCE (guard);
+ hrtime_t reqt = gethrtime ();
+ ret = CALL_REAL (llseek)(fildes, offset, whence);
+ if (RECHCK_REENTRANCE (guard))
+ {
+ POP_REENTRANCE (guard);
+ return ret;
+ }
+ hrtime_t grnt = gethrtime ();
+ collector_memset (&iopkt, 0, sizeof (IOTrace_packet));
+ iopkt.comm.tsize = sizeof (IOTrace_packet);
+ iopkt.comm.tstamp = grnt;
+ iopkt.requested = reqt;
+ if (ret != -1)
+ iopkt.iotype = OTHERIO_TRACE;
+ else
+ iopkt.iotype = OTHERIO_TRACE_ERROR;
+ iopkt.fd = fildes;
+ iopkt.comm.frinfo = collector_interface->getFrameInfo (io_hndl, iopkt.comm.tstamp, FRINFO_FROM_STACK, &iopkt);
+ collector_interface->writeDataRecord (io_hndl, (Common_packet*) & iopkt);
+ POP_REENTRANCE (guard);
+ return ret;
+}
+
+/*------------------------------------------------------------- chmod */
+int
+chmod (const char *path, mode_t mode)
+{
+ int *guard;
+ int ret;
+ void *packet;
+ IOTrace_packet *iopkt;
+ size_t sz;
+ unsigned pktSize;
+ if (NULL_PTR (chmod))
+ init_io_intf ();
+ if (CHCK_REENTRANCE (guard) || path == NULL)
+ return CALL_REAL (chmod)(path, mode);
+ PUSH_REENTRANCE (guard);
+ hrtime_t reqt = gethrtime ();
+ ret = CALL_REAL (chmod)(path, mode);
+ if (RECHCK_REENTRANCE (guard))
+ {
+ POP_REENTRANCE (guard);
+ return ret;
+ }
+ hrtime_t grnt = gethrtime ();
+ sz = collector_strlen (path);
+ pktSize = sizeof (IOTrace_packet) + sz;
+ pktSize = collector_align_pktsize (pktSize);
+ Tprintf (DBG_LT1, "iotrace allocating %u from io_heap\n", pktSize);
+ packet = collector_interface->allocCSize (io_heap, pktSize, 1);
+ if (packet != NULL)
+ {
+ iopkt = (IOTrace_packet *) packet;
+ collector_memset (iopkt, 0, pktSize);
+ iopkt->comm.tsize = pktSize;
+ iopkt->comm.tstamp = grnt;
+ iopkt->requested = reqt;
+ if (ret != -1)
+ iopkt->iotype = OTHERIO_TRACE;
+ else
+ iopkt->iotype = OTHERIO_TRACE_ERROR;
+ collector_strncpy (&(iopkt->fname), path, sz);
+ iopkt->comm.frinfo = collector_interface->getFrameInfo (io_hndl, iopkt->comm.tstamp, FRINFO_FROM_STACK, &iopkt);
+ collector_interface->writeDataRecord (io_hndl, (Common_packet*) iopkt);
+ collector_interface->freeCSize (io_heap, packet, pktSize);
+ }
+ else
+ {
+ Tprintf (0, "iotrace: ERROR: chmod cannot allocate memory\n");
+ return 0;
+ }
+ POP_REENTRANCE (guard);
+ return ret;
+}
+
+/*------------------------------------------------------------- access */
+int
+access (const char *path, int amode)
+{
+ int *guard;
+ int ret;
+ void *packet;
+ IOTrace_packet *iopkt;
+ size_t sz;
+ unsigned pktSize;
+ if (NULL_PTR (access))
+ init_io_intf ();
+ if (CHCK_REENTRANCE (guard) || path == NULL)
+ return CALL_REAL (access)(path, amode);
+ PUSH_REENTRANCE (guard);
+ hrtime_t reqt = gethrtime ();
+ ret = CALL_REAL (access)(path, amode);
+ if (RECHCK_REENTRANCE (guard))
+ {
+ POP_REENTRANCE (guard);
+ return ret;
+ }
+ hrtime_t grnt = gethrtime ();
+ sz = collector_strlen (path);
+ pktSize = sizeof (IOTrace_packet) + sz;
+ pktSize = collector_align_pktsize (pktSize);
+ Tprintf (DBG_LT1, "iotrace allocating %u from io_heap\n", pktSize);
+ packet = collector_interface->allocCSize (io_heap, pktSize, 1);
+ if (packet != NULL)
+ {
+ iopkt = (IOTrace_packet *) packet;
+ collector_memset (iopkt, 0, pktSize);
+ iopkt->comm.tsize = pktSize;
+ iopkt->comm.tstamp = grnt;
+ iopkt->requested = reqt;
+ if (ret != -1)
+ iopkt->iotype = OTHERIO_TRACE;
+ else
+ iopkt->iotype = OTHERIO_TRACE_ERROR;
+ collector_strncpy (&(iopkt->fname), path, sz);
+ iopkt->comm.frinfo = collector_interface->getFrameInfo (io_hndl, iopkt->comm.tstamp, FRINFO_FROM_STACK, &iopkt);
+ collector_interface->writeDataRecord (io_hndl, (Common_packet*) iopkt);
+ collector_interface->freeCSize (io_heap, packet, pktSize);
+ }
+ else
+ {
+ Tprintf (0, "iotrace: ERROR: access cannot allocate memory\n");
+ return 0;
+ }
+ POP_REENTRANCE (guard);
+ return ret;
+}
+
+/*------------------------------------------------------------- rename */
+int
+rename (const char *old, const char *new)
+{
+ int *guard;
+ int ret;
+ void *packet;
+ IOTrace_packet *iopkt;
+ size_t sz;
+ unsigned pktSize;
+ if (NULL_PTR (rename))
+ init_io_intf ();
+ if (CHCK_REENTRANCE (guard) || new == NULL)
+ return CALL_REAL (rename)(old, new);
+ PUSH_REENTRANCE (guard);
+ hrtime_t reqt = gethrtime ();
+ ret = CALL_REAL (rename)(old, new);
+ if (RECHCK_REENTRANCE (guard))
+ {
+ POP_REENTRANCE (guard);
+ return ret;
+ }
+ hrtime_t grnt = gethrtime ();
+ sz = collector_strlen (new);
+ pktSize = sizeof (IOTrace_packet) + sz;
+ pktSize = collector_align_pktsize (pktSize);
+ Tprintf (DBG_LT1, "iotrace allocating %u from io_heap\n", pktSize);
+ packet = collector_interface->allocCSize (io_heap, pktSize, 1);
+ if (packet != NULL)
+ {
+ iopkt = (IOTrace_packet *) packet;
+ collector_memset (iopkt, 0, pktSize);
+ iopkt->comm.tsize = pktSize;
+ iopkt->comm.tstamp = grnt;
+ iopkt->requested = reqt;
+ if (ret != -1)
+ iopkt->iotype = OTHERIO_TRACE;
+ else
+ iopkt->iotype = OTHERIO_TRACE_ERROR;
+ collector_strncpy (&(iopkt->fname), new, sz);
+ iopkt->comm.frinfo = collector_interface->getFrameInfo (io_hndl, iopkt->comm.tstamp, FRINFO_FROM_STACK, &iopkt);
+ collector_interface->writeDataRecord (io_hndl, (Common_packet*) iopkt);
+ collector_interface->freeCSize (io_heap, packet, pktSize);
+ }
+ else
+ {
+ Tprintf (0, "iotrace: ERROR: rename cannot allocate memory\n");
+ return 0;
+ }
+ POP_REENTRANCE (guard);
+ return ret;
+}
+
+/*------------------------------------------------------------- mkdir */
+int
+mkdir (const char *path, mode_t mode)
+{
+ int *guard;
+ int ret;
+ void *packet;
+ IOTrace_packet *iopkt;
+ size_t sz;
+ unsigned pktSize;
+ if (NULL_PTR (mkdir))
+ init_io_intf ();
+ if (CHCK_REENTRANCE (guard) || path == NULL)
+ return CALL_REAL (mkdir)(path, mode);
+ PUSH_REENTRANCE (guard);
+ hrtime_t reqt = gethrtime ();
+ ret = CALL_REAL (mkdir)(path, mode);
+ if (RECHCK_REENTRANCE (guard))
+ {
+ POP_REENTRANCE (guard);
+ return ret;
+ }
+ hrtime_t grnt = gethrtime ();
+ sz = collector_strlen (path);
+ pktSize = sizeof (IOTrace_packet) + sz;
+ pktSize = collector_align_pktsize (pktSize);
+ Tprintf (DBG_LT1, "iotrace allocating %u from io_heap\n", pktSize);
+ packet = collector_interface->allocCSize (io_heap, pktSize, 1);
+ if (packet != NULL)
+ {
+ iopkt = (IOTrace_packet *) packet;
+ collector_memset (iopkt, 0, pktSize);
+ iopkt->comm.tsize = pktSize;
+ iopkt->comm.tstamp = grnt;
+ iopkt->requested = reqt;
+ if (ret != -1)
+ iopkt->iotype = OTHERIO_TRACE;
+ else
+ iopkt->iotype = OTHERIO_TRACE_ERROR;
+ collector_strncpy (&(iopkt->fname), path, sz);
+ iopkt->comm.frinfo = collector_interface->getFrameInfo (io_hndl, iopkt->comm.tstamp, FRINFO_FROM_STACK, &iopkt);
+ collector_interface->writeDataRecord (io_hndl, (Common_packet*) iopkt);
+ collector_interface->freeCSize (io_heap, packet, pktSize);
+ }
+ else
+ {
+ Tprintf (0, "iotrace: ERROR: mkdir cannot allocate memory\n");
+ return 0;
+ }
+ POP_REENTRANCE (guard);
+ return ret;
+}
+
+/*------------------------------------------------------------- getdents */
+int
+getdents (int fildes, struct dirent *buf, size_t nbyte)
+{
+ int *guard;
+ int ret;
+ IOTrace_packet iopkt;
+ if (NULL_PTR (getdents))
+ init_io_intf ();
+ if (CHCK_REENTRANCE (guard))
+ return CALL_REAL (getdents)(fildes, buf, nbyte);
+ PUSH_REENTRANCE (guard);
+ hrtime_t reqt = gethrtime ();
+ ret = CALL_REAL (getdents)(fildes, buf, nbyte);
+ if (RECHCK_REENTRANCE (guard))
+ {
+ POP_REENTRANCE (guard);
+ return ret;
+ }
+ hrtime_t grnt = gethrtime ();
+ collector_memset (&iopkt, 0, sizeof (IOTrace_packet));
+ iopkt.comm.tsize = sizeof (IOTrace_packet);
+ iopkt.comm.tstamp = grnt;
+ iopkt.requested = reqt;
+ if (ret != -1)
+ iopkt.iotype = OTHERIO_TRACE;
+ else
+ iopkt.iotype = OTHERIO_TRACE_ERROR;
+ iopkt.fd = fildes;
+ iopkt.comm.frinfo = collector_interface->getFrameInfo (io_hndl, iopkt.comm.tstamp, FRINFO_FROM_STACK, &iopkt);
+ collector_interface->writeDataRecord (io_hndl, (Common_packet*) & iopkt);
+ POP_REENTRANCE (guard);
+ return ret;
+}
+
+/*------------------------------------------------------------- unlink */
+int
+unlink (const char *path)
+{
+ int *guard;
+ int ret;
+ void *packet;
+ IOTrace_packet *iopkt;
+ size_t sz;
+ unsigned pktSize;
+ if (NULL_PTR (unlink))
+ init_io_intf ();
+ if (CHCK_REENTRANCE (guard) || path == NULL)
+ return CALL_REAL (unlink)(path);
+ PUSH_REENTRANCE (guard);
+ hrtime_t reqt = gethrtime ();
+ ret = CALL_REAL (unlink)(path);
+ if (RECHCK_REENTRANCE (guard))
+ {
+ POP_REENTRANCE (guard);
+ return ret;
+ }
+ hrtime_t grnt = gethrtime ();
+ sz = collector_strlen (path);
+ pktSize = sizeof (IOTrace_packet) + sz;
+ pktSize = collector_align_pktsize (pktSize);
+ Tprintf (DBG_LT1, "iotrace allocating %u from io_heap\n", pktSize);
+ packet = collector_interface->allocCSize (io_heap, pktSize, 1);
+ if (packet != NULL)
+ {
+ iopkt = (IOTrace_packet *) packet;
+ collector_memset (iopkt, 0, pktSize);
+ iopkt->comm.tsize = pktSize;
+ iopkt->comm.tstamp = grnt;
+ iopkt->requested = reqt;
+ if (ret != -1)
+ iopkt->iotype = OTHERIO_TRACE;
+ else
+ iopkt->iotype = OTHERIO_TRACE_ERROR;
+ collector_strncpy (&(iopkt->fname), path, sz);
+ iopkt->comm.frinfo = collector_interface->getFrameInfo (io_hndl, iopkt->comm.tstamp, FRINFO_FROM_STACK, &iopkt);
+ collector_interface->writeDataRecord (io_hndl, (Common_packet*) iopkt);
+ collector_interface->freeCSize (io_heap, packet, pktSize);
+ }
+ else
+ {
+ Tprintf (0, "iotrace: ERROR: unlink cannot allocate memory\n");
+ return 0;
+ }
+ POP_REENTRANCE (guard);
+ return ret;
+}
+
+/*------------------------------------------------------------- fseek */
+int
+fseek (FILE *stream, long offset, int whence)
+{
+ int *guard;
+ int ret;
+ IOTrace_packet iopkt;
+ if (NULL_PTR (fseek))
+ init_io_intf ();
+ if (CHCK_REENTRANCE (guard) || stream == NULL)
+ return CALL_REAL (fseek)(stream, offset, whence);
+ PUSH_REENTRANCE (guard);
+ hrtime_t reqt = gethrtime ();
+ ret = CALL_REAL (fseek)(stream, offset, whence);
+ if (RECHCK_REENTRANCE (guard))
+ {
+ POP_REENTRANCE (guard);
+ return ret;
+ }
+ hrtime_t grnt = gethrtime ();
+ collector_memset (&iopkt, 0, sizeof (IOTrace_packet));
+ iopkt.comm.tsize = sizeof (IOTrace_packet);
+ iopkt.comm.tstamp = grnt;
+ iopkt.requested = reqt;
+ if (ret != -1)
+ iopkt.iotype = OTHERIO_TRACE;
+ else
+ iopkt.iotype = OTHERIO_TRACE_ERROR;
+ iopkt.fd = fileno (stream);
+ iopkt.comm.frinfo = collector_interface->getFrameInfo (io_hndl, iopkt.comm.tstamp, FRINFO_FROM_STACK, &iopkt);
+ collector_interface->writeDataRecord (io_hndl, (Common_packet*) & iopkt);
+ POP_REENTRANCE (guard);
+ return ret;
+}
+
+/*------------------------------------------------------------- rewind */
+void
+rewind (FILE *stream)
+{
+ int *guard;
+ IOTrace_packet iopkt;
+ if (NULL_PTR (rewind))
+ init_io_intf ();
+ if (CHCK_REENTRANCE (guard) || stream == NULL)
+ {
+ CALL_REAL (rewind)(stream);
+ return;
+ }
+ PUSH_REENTRANCE (guard);
+ hrtime_t reqt = gethrtime ();
+ CALL_REAL (rewind)(stream);
+ if (RECHCK_REENTRANCE (guard))
+ {
+ POP_REENTRANCE (guard);
+ return;
+ }
+ hrtime_t grnt = gethrtime ();
+ collector_memset (&iopkt, 0, sizeof (IOTrace_packet));
+ iopkt.comm.tsize = sizeof (IOTrace_packet);
+ iopkt.comm.tstamp = grnt;
+ iopkt.requested = reqt;
+ iopkt.iotype = OTHERIO_TRACE;
+ iopkt.fd = fileno (stream);
+ iopkt.comm.frinfo = collector_interface->getFrameInfo (io_hndl, iopkt.comm.tstamp, FRINFO_FROM_STACK, &iopkt);
+ collector_interface->writeDataRecord (io_hndl, (Common_packet*) & iopkt);
+ POP_REENTRANCE (guard);
+}
+
+/*------------------------------------------------------------- ftell */
+long
+ftell (FILE *stream)
+{
+ int *guard;
+ long ret;
+ IOTrace_packet iopkt;
+ if (NULL_PTR (ftell))
+ init_io_intf ();
+ if (CHCK_REENTRANCE (guard) || stream == NULL)
+ return CALL_REAL (ftell)(stream);
+ PUSH_REENTRANCE (guard);
+ hrtime_t reqt = gethrtime ();
+ ret = CALL_REAL (ftell)(stream);
+ if (RECHCK_REENTRANCE (guard))
+ {
+ POP_REENTRANCE (guard);
+ return ret;
+ }
+ hrtime_t grnt = gethrtime ();
+ collector_memset (&iopkt, 0, sizeof (IOTrace_packet));
+ iopkt.comm.tsize = sizeof (IOTrace_packet);
+ iopkt.comm.tstamp = grnt;
+ iopkt.requested = reqt;
+ if (ret != -1)
+ iopkt.iotype = OTHERIO_TRACE;
+ else
+ iopkt.iotype = OTHERIO_TRACE_ERROR;
+ iopkt.fd = fileno (stream);
+ iopkt.comm.frinfo = collector_interface->getFrameInfo (io_hndl, iopkt.comm.tstamp, FRINFO_FROM_STACK, &iopkt);
+ collector_interface->writeDataRecord (io_hndl, (Common_packet*) & iopkt);
+ POP_REENTRANCE (guard);
+ return ret;
+}
+
+/*------------------------------------------------------------- fgetpos */
+// map interposed symbol versions
+#if ARCH(Intel) && WSIZE(32)
+static int
+__collector_fgetpos_symver (int(real_fgetpos) (), FILE *stream, fpos_t *pos);
+
+SYMVER_ATTRIBUTE (__collector_fgetpos_2_2, fgetpos@@GLIBC_2.2)
+int
+__collector_fgetpos_2_2 (FILE *stream, fpos_t *pos)
+{
+ if (NULL_PTR (fgetpos))
+ init_io_intf ();
+ TprintfT (DBG_LTT, "iotrace: __collector_fgetpos_2_2@%p\n", CALL_REAL (fgetpos_2_2));
+ return __collector_fgetpos_symver (CALL_REAL (fgetpos_2_2), stream, pos);
+}
+
+SYMVER_ATTRIBUTE (__collector_fgetpos_2_0, fgetpos@GLIBC_2.0)
+int
+__collector_fgetpos_2_0 (FILE *stream, fpos_t *pos)
+{
+ if (NULL_PTR (fgetpos))
+ init_io_intf ();
+ TprintfT (DBG_LTT, "iotrace: __collector_fgetpos_2_0@%p\n", CALL_REAL (fgetpos_2_0));
+ return __collector_fgetpos_symver (CALL_REAL (fgetpos_2_0), stream, pos);
+}
+#endif
+
+#if ARCH(Intel) && WSIZE(32)
+
+static int
+__collector_fgetpos_symver (int(real_fgetpos) (), FILE *stream, fpos_t *pos)
+{
+#else
+int
+fgetpos (FILE *stream, fpos_t *pos)
+{
+#endif
+ int *guard;
+ int ret;
+ IOTrace_packet iopkt;
+ if (NULL_PTR (fgetpos))
+ init_io_intf ();
+ if (CHCK_REENTRANCE (guard) || stream == NULL)
+ {
+#if ARCH(Intel) && WSIZE(32)
+ return (real_fgetpos) (stream, pos);
+#else
+ return CALL_REAL (fgetpos)(stream, pos);
+#endif
+ }
+ PUSH_REENTRANCE (guard);
+ hrtime_t reqt = gethrtime ();
+#if ARCH(Intel) && WSIZE(32)
+ ret = (real_fgetpos) (stream, pos);
+#else
+ ret = CALL_REAL (fgetpos)(stream, pos);
+#endif
+ if (RECHCK_REENTRANCE (guard))
+ {
+ POP_REENTRANCE (guard);
+ return ret;
+ }
+ hrtime_t grnt = gethrtime ();
+ collector_memset (&iopkt, 0, sizeof (IOTrace_packet));
+ iopkt.comm.tsize = sizeof (IOTrace_packet);
+ iopkt.comm.tstamp = grnt;
+ iopkt.requested = reqt;
+ if (ret == 0)
+ iopkt.iotype = OTHERIO_TRACE;
+ else
+ iopkt.iotype = OTHERIO_TRACE_ERROR;
+ iopkt.fd = fileno (stream);
+
+#if ARCH(Intel) && WSIZE(32)
+ iopkt.comm.frinfo = collector_interface->getFrameInfo (io_hndl, iopkt.comm.tstamp, FRINFO_FROM_STACK_ARG, &iopkt);
+#else
+ iopkt.comm.frinfo = collector_interface->getFrameInfo (io_hndl, iopkt.comm.tstamp, FRINFO_FROM_STACK, &iopkt);
+#endif
+ collector_interface->writeDataRecord (io_hndl, (Common_packet*) & iopkt);
+ POP_REENTRANCE (guard);
+ return ret;
+}
+
+#if WSIZE(32)
+/*------------------------------------------------------------- fgetpos64 */
+#if ARCH(Intel)
+// map interposed symbol versions
+
+static int
+__collector_fgetpos64_symver (int(real_fgetpos64) (), FILE *stream, fpos64_t *pos);
+
+SYMVER_ATTRIBUTE (__collector_fgetpos64_2_2, fgetpos64@@GLIBC_2.2)
+int
+__collector_fgetpos64_2_2 (FILE *stream, fpos64_t *pos)
+{
+ TprintfT (DBG_LTT, "iotrace: __collector_fgetpos64_2_2@%p(stream=%p, pos=%p)\n",
+ CALL_REAL (fgetpos64_2_2), stream, pos);
+ if (NULL_PTR (fgetpos64))
+ init_io_intf ();
+ return __collector_fgetpos64_symver (CALL_REAL (fgetpos64_2_2), stream, pos);
+}
+
+SYMVER_ATTRIBUTE (__collector_fgetpos64_2_1, fgetpos64@GLIBC_2.1)
+int
+__collector_fgetpos64_2_1 (FILE *stream, fpos64_t *pos)
+{
+ TprintfT (DBG_LTT, "iotrace: __collector_fgetpos64_2_1@%p(stream=%p, pos=%p)\n",
+ CALL_REAL (fgetpos64_2_1), stream, pos);
+ if (NULL_PTR (fgetpos64))
+ init_io_intf ();
+ return __collector_fgetpos64_symver (CALL_REAL (fgetpos64_2_1), stream, pos);
+}
+
+static int
+__collector_fgetpos64_symver (int(real_fgetpos64) (), FILE *stream, fpos64_t *pos)
+{
+#else
+int
+fgetpos64 (FILE *stream, fpos64_t *pos)
+{
+#endif
+ int *guard;
+ int ret;
+ IOTrace_packet iopkt;
+ if (NULL_PTR (fgetpos64))
+ init_io_intf ();
+ if (CHCK_REENTRANCE (guard) || stream == NULL)
+ {
+#if ARCH(Intel)
+ return (real_fgetpos64) (stream, pos);
+#else
+ return CALL_REAL (fgetpos64)(stream, pos);
+#endif
+ }
+ PUSH_REENTRANCE (guard);
+ hrtime_t reqt = gethrtime ();
+#if ARCH(Intel)
+ ret = (real_fgetpos64) (stream, pos);
+#else
+ ret = CALL_REAL (fgetpos64)(stream, pos);
+#endif
+ if (RECHCK_REENTRANCE (guard))
+ {
+ POP_REENTRANCE (guard);
+ return ret;
+ }
+ hrtime_t grnt = gethrtime ();
+ collector_memset (&iopkt, 0, sizeof (IOTrace_packet));
+ iopkt.comm.tsize = sizeof (IOTrace_packet);
+ iopkt.comm.tstamp = grnt;
+ iopkt.requested = reqt;
+ if (ret == 0)
+ iopkt.iotype = OTHERIO_TRACE;
+ else
+ iopkt.iotype = OTHERIO_TRACE_ERROR;
+ iopkt.fd = fileno (stream);
+#if ARCH(Intel)
+ iopkt.comm.frinfo = collector_interface->getFrameInfo (io_hndl, iopkt.comm.tstamp, FRINFO_FROM_STACK_ARG, &iopkt);
+#else
+ iopkt.comm.frinfo = collector_interface->getFrameInfo (io_hndl, iopkt.comm.tstamp, FRINFO_FROM_STACK, &iopkt);
+#endif
+ collector_interface->writeDataRecord (io_hndl, (Common_packet*) & iopkt);
+ POP_REENTRANCE (guard);
+ return ret;
+}
+#endif
+
+/*------------------------------------------------------------- fsetpos */
+// map interposed symbol versions
+#if ARCH(Intel) && WSIZE(32)
+static int
+__collector_fsetpos_symver (int(real_fsetpos) (), FILE *stream, const fpos_t *pos);
+
+SYMVER_ATTRIBUTE (__collector_fsetpos_2_2, fsetpos@@GLIBC_2.2)
+int
+__collector_fsetpos_2_2 (FILE *stream, const fpos_t *pos)
+{
+ if (NULL_PTR (fsetpos))
+ init_io_intf ();
+ TprintfT (DBG_LTT, "iotrace: __collector_fsetpos_2_2@%p\n", CALL_REAL (fsetpos_2_2));
+ return __collector_fsetpos_symver (CALL_REAL (fsetpos_2_2), stream, pos);
+}
+
+SYMVER_ATTRIBUTE (__collector_fsetpos_2_0, fsetpos@GLIBC_2.0)
+int
+__collector_fsetpos_2_0 (FILE *stream, const fpos_t *pos)
+{
+ if (NULL_PTR (fsetpos))
+ init_io_intf ();
+ TprintfT (DBG_LTT, "iotrace: __collector_fsetpos_2_0@%p\n", CALL_REAL (fsetpos_2_0));
+ return __collector_fsetpos_symver (CALL_REAL (fsetpos_2_0), stream, pos);
+}
+#endif
+
+#if ARCH(Intel) && WSIZE(32)
+
+static int
+__collector_fsetpos_symver (int(real_fsetpos) (), FILE *stream, const fpos_t *pos)
+{
+#else
+int
+fsetpos (FILE *stream, const fpos_t *pos)
+{
+#endif
+ int *guard;
+ int ret;
+ IOTrace_packet iopkt;
+ if (NULL_PTR (fsetpos))
+ init_io_intf ();
+ if (CHCK_REENTRANCE (guard) || stream == NULL)
+ {
+#if ARCH(Intel) && WSIZE(32)
+ return (real_fsetpos) (stream, pos);
+#else
+ return CALL_REAL (fsetpos)(stream, pos);
+#endif
+ }
+ PUSH_REENTRANCE (guard);
+ hrtime_t reqt = gethrtime ();
+#if ARCH(Intel) && WSIZE(32)
+ ret = (real_fsetpos) (stream, pos);
+#else
+ ret = CALL_REAL (fsetpos)(stream, pos);
+#endif
+ if (RECHCK_REENTRANCE (guard))
+ {
+ POP_REENTRANCE (guard);
+ return ret;
+ }
+ hrtime_t grnt = gethrtime ();
+ collector_memset (&iopkt, 0, sizeof (IOTrace_packet));
+ iopkt.comm.tsize = sizeof (IOTrace_packet);
+ iopkt.comm.tstamp = grnt;
+ iopkt.requested = reqt;
+ if (ret == 0)
+ iopkt.iotype = OTHERIO_TRACE;
+ else
+ iopkt.iotype = OTHERIO_TRACE_ERROR;
+ iopkt.fd = fileno (stream);
+#if ARCH(Intel) && WSIZE(32)
+ iopkt.comm.frinfo = collector_interface->getFrameInfo (io_hndl, iopkt.comm.tstamp, FRINFO_FROM_STACK_ARG, &iopkt);
+#else
+ iopkt.comm.frinfo = collector_interface->getFrameInfo (io_hndl, iopkt.comm.tstamp, FRINFO_FROM_STACK, &iopkt);
+#endif
+ collector_interface->writeDataRecord (io_hndl, (Common_packet*) & iopkt);
+ POP_REENTRANCE (guard);
+ return ret;
+}
+
+#if WSIZE(32)
+/*------------------------------------------------------------- fsetpos64 */
+#if ARCH(Intel)
+// map interposed symbol versions
+static int
+__collector_fsetpos64_symver (int(real_fsetpos64) (), FILE *stream, const fpos64_t *pos);
+
+SYMVER_ATTRIBUTE (__collector_fsetpos64_2_2, fsetpos64@@GLIBC_2.2)
+int
+__collector_fsetpos64_2_2 (FILE *stream, const fpos64_t *pos)
+{
+ TprintfT (DBG_LTT, "iotrace: __collector_fsetpos64_2_2@%p(stream=%p, pos=%p)\n",
+ CALL_REAL (fsetpos64_2_2), stream, pos);
+ if (NULL_PTR (fsetpos64))
+ init_io_intf ();
+ return __collector_fsetpos64_symver (CALL_REAL (fsetpos64_2_2), stream, pos);
+}
+
+SYMVER_ATTRIBUTE (__collector_fsetpos64_2_1, fsetpos64@GLIBC_2.1)
+int
+__collector_fsetpos64_2_1 (FILE *stream, const fpos64_t *pos)
+{
+ TprintfT (DBG_LTT, "iotrace: __collector_fsetpos64_2_1@%p(stream=%p, pos=%p)\n",
+ CALL_REAL (fsetpos64_2_1), stream, pos);
+ if (NULL_PTR (fsetpos64))
+ init_io_intf ();
+ return __collector_fsetpos64_symver (CALL_REAL (fsetpos64_2_1), stream, pos);
+}
+
+static int
+__collector_fsetpos64_symver (int(real_fsetpos64) (), FILE *stream, const fpos64_t *pos)
+{
+#else
+int
+fsetpos64 (FILE *stream, const fpos64_t *pos)
+{
+#endif
+ int *guard;
+ int ret;
+ IOTrace_packet iopkt;
+ if (NULL_PTR (fsetpos64))
+ init_io_intf ();
+ if (CHCK_REENTRANCE (guard) || stream == NULL)
+ {
+#if ARCH(Intel) && WSIZE(32)
+ return (real_fsetpos64) (stream, pos);
+#else
+ return CALL_REAL (fsetpos64)(stream, pos);
+#endif
+ }
+ PUSH_REENTRANCE (guard);
+ hrtime_t reqt = gethrtime ();
+#if ARCH(Intel) && WSIZE(32)
+ ret = (real_fsetpos64) (stream, pos);
+#else
+ ret = CALL_REAL (fsetpos64)(stream, pos);
+#endif
+ if (RECHCK_REENTRANCE (guard))
+ {
+ POP_REENTRANCE (guard);
+ return ret;
+ }
+ hrtime_t grnt = gethrtime ();
+ collector_memset (&iopkt, 0, sizeof (IOTrace_packet));
+ iopkt.comm.tsize = sizeof (IOTrace_packet);
+ iopkt.comm.tstamp = grnt;
+ iopkt.requested = reqt;
+ if (ret == 0)
+ iopkt.iotype = OTHERIO_TRACE;
+ else
+ iopkt.iotype = OTHERIO_TRACE_ERROR;
+ iopkt.fd = fileno (stream);
+#if ARCH(Intel)
+ iopkt.comm.frinfo = collector_interface->getFrameInfo (io_hndl, iopkt.comm.tstamp, FRINFO_FROM_STACK_ARG, &iopkt);
+#else
+ iopkt.comm.frinfo = collector_interface->getFrameInfo (io_hndl, iopkt.comm.tstamp, FRINFO_FROM_STACK, &iopkt);
+#endif
+ collector_interface->writeDataRecord (io_hndl, (Common_packet*) & iopkt);
+ POP_REENTRANCE (guard);
+ return ret;
+}
+#endif
+
+/*------------------------------------------------------------- fsync */
+int
+fsync (int fildes)
+{
+ int *guard;
+ int ret;
+ IOTrace_packet iopkt;
+ if (NULL_PTR (fsync))
+ init_io_intf ();
+ if (CHCK_REENTRANCE (guard))
+ return CALL_REAL (fsync)(fildes);
+ PUSH_REENTRANCE (guard);
+ hrtime_t reqt = gethrtime ();
+ ret = CALL_REAL (fsync)(fildes);
+ if (RECHCK_REENTRANCE (guard))
+ {
+ POP_REENTRANCE (guard);
+ return ret;
+ }
+ hrtime_t grnt = gethrtime ();
+ collector_memset (&iopkt, 0, sizeof (IOTrace_packet));
+ iopkt.comm.tsize = sizeof (IOTrace_packet);
+ iopkt.comm.tstamp = grnt;
+ iopkt.requested = reqt;
+ if (ret == 0)
+ iopkt.iotype = OTHERIO_TRACE;
+ else
+ iopkt.iotype = OTHERIO_TRACE_ERROR;
+ iopkt.fd = fildes;
+ iopkt.comm.frinfo = collector_interface->getFrameInfo (io_hndl, iopkt.comm.tstamp, FRINFO_FROM_STACK, &iopkt);
+ collector_interface->writeDataRecord (io_hndl, (Common_packet*) & iopkt);
+ POP_REENTRANCE (guard);
+ return ret;
+}
+
+/*------------------------------------------------------------- readdir */
+struct dirent*
+readdir (DIR *dirp)
+{
+ int *guard;
+ struct dirent *ptr;
+ IOTrace_packet iopkt;
+ if (NULL_PTR (readdir))
+ init_io_intf ();
+ if (CHCK_REENTRANCE (guard))
+ return CALL_REAL (readdir)(dirp);
+ PUSH_REENTRANCE (guard);
+ hrtime_t reqt = gethrtime ();
+ ptr = CALL_REAL (readdir)(dirp);
+ if (RECHCK_REENTRANCE (guard))
+ {
+ POP_REENTRANCE (guard);
+ return ptr;
+ }
+ hrtime_t grnt = gethrtime ();
+ collector_memset (&iopkt, 0, sizeof ( IOTrace_packet));
+ iopkt.comm.tsize = sizeof ( IOTrace_packet);
+ iopkt.comm.tstamp = grnt;
+ iopkt.requested = reqt;
+ if (ptr != NULL)
+ iopkt.iotype = OTHERIO_TRACE;
+ else
+ iopkt.iotype = OTHERIO_TRACE_ERROR;
+ iopkt.comm.frinfo = collector_interface->getFrameInfo (io_hndl, iopkt.comm.tstamp, FRINFO_FROM_STACK, &iopkt);
+ collector_interface->writeDataRecord (io_hndl, (Common_packet*) & iopkt);
+ POP_REENTRANCE (guard);
+ return ptr;
+}
+
+/*------------------------------------------------------------- flock */
+int
+flock (int fd, int operation)
+{
+ int *guard;
+ int ret;
+ IOTrace_packet iopkt;
+ if (NULL_PTR (flock))
+ init_io_intf ();
+ if (CHCK_REENTRANCE (guard))
+ return CALL_REAL (flock)(fd, operation);
+ PUSH_REENTRANCE (guard);
+ hrtime_t reqt = gethrtime ();
+ ret = CALL_REAL (flock)(fd, operation);
+ if (RECHCK_REENTRANCE (guard))
+ {
+ POP_REENTRANCE (guard);
+ return ret;
+ }
+ hrtime_t grnt = gethrtime ();
+ collector_memset (&iopkt, 0, sizeof (IOTrace_packet));
+ iopkt.comm.tsize = sizeof (IOTrace_packet);
+ iopkt.comm.tstamp = grnt;
+ iopkt.requested = reqt;
+ if (ret == 0)
+ iopkt.iotype = OTHERIO_TRACE;
+ else
+ iopkt.iotype = OTHERIO_TRACE_ERROR;
+ iopkt.fd = fd;
+ iopkt.comm.frinfo = collector_interface->getFrameInfo (io_hndl, iopkt.comm.tstamp, FRINFO_FROM_STACK, &iopkt);
+ collector_interface->writeDataRecord (io_hndl, (Common_packet*) & iopkt);
+ POP_REENTRANCE (guard);
+ return ret;
+}
+
+/*------------------------------------------------------------- lockf */
+int
+lockf (int fildes, int function, off_t size)
+{
+ int *guard;
+ int ret;
+ IOTrace_packet iopkt;
+ if (NULL_PTR (lockf))
+ init_io_intf ();
+ if (CHCK_REENTRANCE (guard))
+ return CALL_REAL (lockf)(fildes, function, size);
+ PUSH_REENTRANCE (guard);
+ hrtime_t reqt = gethrtime ();
+ ret = CALL_REAL (lockf)(fildes, function, size);
+ if (RECHCK_REENTRANCE (guard))
+ {
+ POP_REENTRANCE (guard);
+ return ret;
+ }
+ hrtime_t grnt = gethrtime ();
+ collector_memset (&iopkt, 0, sizeof (IOTrace_packet));
+ iopkt.comm.tsize = sizeof (IOTrace_packet);
+ iopkt.comm.tstamp = grnt;
+ iopkt.requested = reqt;
+ if (ret == 0)
+ iopkt.iotype = OTHERIO_TRACE;
+ else
+ iopkt.iotype = OTHERIO_TRACE_ERROR;
+ iopkt.fd = fildes;
+ iopkt.comm.frinfo = collector_interface->getFrameInfo (io_hndl, iopkt.comm.tstamp, FRINFO_FROM_STACK, &iopkt);
+ collector_interface->writeDataRecord (io_hndl, (Common_packet*) & iopkt);
+ POP_REENTRANCE (guard);
+ return ret;
+}
diff --git a/gprofng/libcollector/jprofile.c b/gprofng/libcollector/jprofile.c
new file mode 100644
index 00000000000..9daaa5a267e
--- /dev/null
+++ b/gprofng/libcollector/jprofile.c
@@ -0,0 +1,1315 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+
+#if defined(GPROFNG_JAVA_PROFILING)
+#include <alloca.h>
+#include <dlfcn.h> /* dlsym() */
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <errno.h>
+#include <sys/param.h> /* MAXPATHLEN */
+
+#include <jni.h>
+#include <jvmti.h>
+
+#include "gp-defs.h"
+#include "collector.h"
+#include "gp-experiment.h"
+#include "tsd.h"
+
+/* TprintfT(<level>,...) definitions. Adjust per module as needed */
+#define DBG_LT0 0 // for high-level configuration, unexpected errors/warnings
+#define DBG_LT1 1 // for configuration details, warnings
+#define DBG_LT2 2
+#define DBG_LT3 3
+
+/* ARCH_STRLEN is defined in dbe, copied here */
+#define ARCH_STRLEN(s) ((CALL_UTIL(strlen)(s) + 4 ) & ~0x3)
+
+/* call frame */
+typedef struct
+{
+ jint lineno; /* line number in the source file */
+ jmethodID method_id; /* method executed in this frame */
+} JVMPI_CallFrame;
+
+/* call trace */
+typedef struct
+{
+ JNIEnv *env_id; /* Env where trace was recorded */
+ jint num_frames; /* number of frames in this trace */
+ JVMPI_CallFrame *frames; /* frames */
+} JVMPI_CallTrace;
+
+extern void __collector_jprofile_enable_synctrace (void);
+int __collector_jprofile_start_attach (void);
+static int init_interface (CollectorInterface*);
+static int open_experiment (const char *);
+static int close_experiment (void);
+static int detach_experiment (void);
+static void jprof_find_asyncgetcalltrace (void);
+static char *apistr = NULL;
+
+static ModuleInterface module_interface = {
+ "*"SP_JCLASSES_FILE, /* description, exempt from limit */
+ init_interface, /* initInterface */
+ open_experiment, /* openExperiment */
+ NULL, /* startDataCollection */
+ NULL, /* stopDataCollection */
+ close_experiment, /* closeExperiment */
+ detach_experiment /* detachExperiment (fork child) */
+};
+
+static CollectorInterface *collector_interface = NULL;
+static CollectorModule jprof_hndl = COLLECTOR_MODULE_ERR;
+static int __collector_java_attach = 0;
+static JavaVM *jvm;
+static jmethodID getResource = NULL;
+static jmethodID toExternalForm = NULL;
+
+/* Java profiling thread specific data */
+typedef struct TSD_Entry
+{
+ JNIEnv *env;
+ hrtime_t tstamp;
+} TSD_Entry;
+
+static unsigned tsd_key = COLLECTOR_TSD_INVALID_KEY;
+static collector_mutex_t jclasses_lock = COLLECTOR_MUTEX_INITIALIZER;
+static int java_gc_on = 0;
+static int java_mem_mode = 0;
+static int java_sync_mode = 0;
+static int is_hotspot_vm = 0;
+static void get_jvm_settings ();
+static void rwrite (int fd, const void *buf, size_t nbyte);
+static void addToDynamicArchive (const char* name, const unsigned char* class_data, int class_data_len);
+static void (*AsyncGetCallTrace)(JVMPI_CallTrace*, jint, ucontext_t*) = NULL;
+static void (*collector_heap_record)(int, int, void*) = NULL;
+static void (*collector_jsync_begin)() = NULL;
+static void (*collector_jsync_end)(hrtime_t, void *) = NULL;
+
+#define gethrtime collector_interface->getHiResTime
+
+/*
+ * JVMTI declarations
+ */
+
+static jvmtiEnv *jvmti;
+static void jvmti_VMInit (jvmtiEnv*, JNIEnv*, jthread);
+static void jvmti_VMDeath (jvmtiEnv*, JNIEnv*);
+static void jvmti_ThreadStart (jvmtiEnv*, JNIEnv*, jthread);
+static void jvmti_ThreadEnd (jvmtiEnv*, JNIEnv*, jthread);
+static void jvmti_CompiledMethodLoad (jvmtiEnv*, jmethodID, jint, const void*,
+ jint, const jvmtiAddrLocationMap*, const void*);
+static void jvmti_CompiledMethodUnload (jvmtiEnv*, jmethodID, const void*);
+static void jvmti_DynamicCodeGenerated (jvmtiEnv*, const char*, const void*, jint);
+static void jvmti_ClassPrepare (jvmtiEnv*, JNIEnv*, jthread, jclass);
+static void jvmti_ClassLoad (jvmtiEnv*, JNIEnv*, jthread, jclass);
+//static void jvmti_ClassUnload( jvmtiEnv*, JNIEnv*, jthread, jclass );
+static void jvmti_MonitorEnter (jvmtiEnv *, JNIEnv*, jthread, jobject);
+static void jvmti_MonitorEntered (jvmtiEnv *, JNIEnv*, jthread, jobject);
+#if 0
+static void jvmti_MonitorWait (jvmtiEnv *, JNIEnv*, jthread, jobject, jlong);
+static void jvmti_MonitorWaited (jvmtiEnv *, JNIEnv*, jthread, jobject, jboolean);
+#endif
+static void jvmti_ClassFileLoadHook (jvmtiEnv *jvmti_env, JNIEnv* jni_env, jclass class_being_redefined,
+ jobject loader, const char* name, jobject protection_domain,
+ jint class_data_len, const unsigned char* class_data,
+ jint* new_class_data_len, unsigned char** new_class_data);
+static void jvmti_GarbageCollectionStart (jvmtiEnv *);
+static void
+jvmti_GarbageCollectionFinish (jvmtiEnv *);
+jvmtiEventCallbacks callbacks = {
+ jvmti_VMInit, // 50 jvmtiEventVMInit;
+ jvmti_VMDeath, // 51 jvmtiEventVMDeath;
+ jvmti_ThreadStart, // 52 jvmtiEventThreadStart;
+ jvmti_ThreadEnd, // 53 jvmtiEventThreadEnd;
+ jvmti_ClassFileLoadHook, // 54 jvmtiEventClassFileLoadHook;
+ jvmti_ClassLoad, // 55 jvmtiEventClassLoad;
+ jvmti_ClassPrepare, // 56 jvmtiEventClassPrepare;
+ NULL, // 57 reserved57;
+ NULL, // 58 jvmtiEventException;
+ NULL, // 59 jvmtiEventExceptionCatch;
+ NULL, // 60 jvmtiEventSingleStep;
+ NULL, // 61 jvmtiEventFramePop;
+ NULL, // 62 jvmtiEventBreakpoint;
+ NULL, // 63 jvmtiEventFieldAccess;
+ NULL, // 64 jvmtiEventFieldModification;
+ NULL, // 65 jvmtiEventMethodEntry;
+ NULL, // 66 jvmtiEventMethodExit;
+ NULL, // 67 jvmtiEventNativeMethodBind;
+ jvmti_CompiledMethodLoad, // 68 jvmtiEventCompiledMethodLoad;
+ jvmti_CompiledMethodUnload, // 69 jvmtiEventCompiledMethodUnload;
+ jvmti_DynamicCodeGenerated, // 70 jvmtiEventDynamicCodeGenerated;
+ NULL, // 71 jvmtiEventDataDumpRequest;
+ NULL, // 72 jvmtiEventDataResetRequest;
+ NULL, /*jvmti_MonitorWait,*/ // 73 jvmtiEventMonitorWait;
+ NULL, /*jvmti_MonitorWaited,*/ // 74 jvmtiEventMonitorWaited;
+ jvmti_MonitorEnter, // 75 jvmtiEventMonitorContendedEnter;
+ jvmti_MonitorEntered, // 76 jvmtiEventMonitorContendedEntered;
+ NULL, // 77 jvmtiEventMonitorContendedExit;
+ NULL, // 78 jvmtiEventReserved;
+ NULL, // 79 jvmtiEventReserved;
+ NULL, // 80 jvmtiEventReserved;
+ jvmti_GarbageCollectionStart, // 81 jvmtiEventGarbageCollectionStart;
+ jvmti_GarbageCollectionFinish, // 82 jvmtiEventGarbageCollectionFinish;
+ NULL, // 83 jvmtiEventObjectFree;
+ NULL // 84 jvmtiEventVMObjectAlloc;
+};
+
+typedef jint (JNICALL JNI_GetCreatedJavaVMs_t)(JavaVM **, jsize, jsize *);
+
+int
+init_interface (CollectorInterface *_collector_interface)
+{
+ collector_interface = _collector_interface;
+ return COL_ERROR_NONE;
+}
+
+static int
+open_experiment (const char *exp)
+{
+ if (collector_interface == NULL)
+ return COL_ERROR_JAVAINIT;
+ TprintfT (0, "jprofile: open_experiment %s\n", exp);
+ const char *params = collector_interface->getParams ();
+ const char *args = params;
+ while (args)
+ {
+ if (__collector_strStartWith (args, "j:") == 0)
+ {
+ args += 2;
+ break;
+ }
+ args = CALL_UTIL (strchr)(args, ';');
+ if (args)
+ args++;
+ }
+ if (args == NULL) /* Java profiling not specified */
+ return COL_ERROR_JAVAINIT;
+ tsd_key = collector_interface->createKey (sizeof ( TSD_Entry), NULL, NULL);
+ if (tsd_key == (unsigned) - 1)
+ {
+ TprintfT (0, "jprofile: TSD key create failed.\n");
+ collector_interface->writeLog ("<event kind=\"%s\" id=\"%d\">TSD key not created</event>\n",
+ SP_JCMD_CERROR, COL_ERROR_JAVAINIT);
+ return COL_ERROR_JAVAINIT;
+ }
+ else
+ Tprintf (DBG_LT2, "jprofile: TSD key create succeeded %d.\n", tsd_key);
+
+ args = params;
+ while (args)
+ {
+ if (__collector_strStartWith (args, "H:") == 0)
+ {
+ java_mem_mode = 1;
+ collector_heap_record = (void(*)(int, int, void*))dlsym (RTLD_DEFAULT, "__collector_heap_record");
+ }
+#if 0
+ else if (__collector_strStartWith (args, "s:") == 0)
+ {
+ java_sync_mode = 1;
+ collector_jsync_begin = (void(*)(hrtime_t, void *))dlsym (RTLD_DEFAULT, "__collector_jsync_begin");
+ collector_jsync_end = (void(*)(hrtime_t, void *))dlsym (RTLD_DEFAULT, "__collector_jsync_end");
+ }
+#endif
+ args = CALL_UTIL (strchr)(args, ';');
+ if (args)
+ args++;
+ }
+
+ /* synchronization tracing is enabled by the synctrace module, later in initialization */
+ __collector_java_mode = 1;
+ java_gc_on = 1;
+ return COL_ERROR_NONE;
+}
+
+/* routine called from the syntrace module to enable Java-API synctrace */
+void
+__collector_jprofile_enable_synctrace ()
+{
+ if (__collector_java_mode == 0)
+ {
+ TprintfT (DBG_LT1, "jprofile: not turning on Java synctrace; Java mode not enabled\n");
+ return;
+ }
+ java_sync_mode = 1;
+ collector_jsync_begin = (void(*)(hrtime_t, void *))dlsym (RTLD_DEFAULT, "__collector_jsync_begin");
+ collector_jsync_end = (void(*)(hrtime_t, void *))dlsym (RTLD_DEFAULT, "__collector_jsync_end");
+ TprintfT (DBG_LT1, "jprofile: turning on Java synctrace, and requesting events\n");
+}
+
+int
+__collector_jprofile_start_attach (void)
+{
+ if (!__collector_java_mode || __collector_java_asyncgetcalltrace_loaded)
+ return 0;
+ void *g_sHandle = RTLD_DEFAULT;
+ /* Now get the function addresses */
+ JNI_GetCreatedJavaVMs_t *pfnGetCreatedJavaVMs;
+ pfnGetCreatedJavaVMs = (JNI_GetCreatedJavaVMs_t *) dlsym (g_sHandle, "JNI_GetCreatedJavaVMs");
+ if (pfnGetCreatedJavaVMs != NULL)
+ {
+ TprintfT (0, "jprofile attach: pfnGetCreatedJavaVMs is detected.\n");
+ JavaVM * vmBuf[1]; // XXXX only detect on jvm
+ jsize nVMs = 0;
+ (*pfnGetCreatedJavaVMs)(vmBuf, 1, &nVMs);
+ if (vmBuf[0] != NULL && nVMs > 0)
+ {
+ jvm = vmBuf[0];
+ JNIEnv* jni_env = NULL;
+ (*jvm)->AttachCurrentThread (jvm, (void **) &jni_env, NULL);
+ Agent_OnLoad (jvm, NULL, NULL);
+ if ((*jvm)->GetEnv (jvm, (void **) &jni_env, JNI_VERSION_1_2) >= 0 && jni_env && jvmti)
+ {
+ jthread thread;
+ (*jvmti)->GetCurrentThread (jvmti, &thread);
+#ifdef DEBUG
+ collector_thread_t tid;
+ tid = __collector_thr_self ();
+ TprintfT (0, "jprofile attach: AttachCurrentThread: thread: %lu jni_env=%p jthread=%p\n",
+ (unsigned long) tid, jni_env, thread);
+#endif /* DEBUG */
+ jvmti_VMInit (jvmti, jni_env, thread);
+ (*jvmti)->GenerateEvents (jvmti, JVMTI_EVENT_COMPILED_METHOD_LOAD);
+ (*jvmti)->GenerateEvents (jvmti, JVMTI_EVENT_DYNAMIC_CODE_GENERATED);
+ __collector_java_attach = 1;
+ (*jvm)->DetachCurrentThread (jvm);
+ }
+ }
+ }
+ return 0;
+}
+
+static int
+close_experiment (void)
+{
+ /* fixme XXXXX add content here */
+ /* see detach_experiment() */
+ __collector_java_mode = 0;
+ __collector_java_asyncgetcalltrace_loaded = 0;
+ __collector_java_attach = 0;
+ java_gc_on = 0;
+ java_mem_mode = 0;
+ java_sync_mode = 0;
+ is_hotspot_vm = 0;
+ __collector_mutex_init (&jclasses_lock);
+ tsd_key = COLLECTOR_TSD_INVALID_KEY;
+ TprintfT (0, "jprofile: experiment closed.\n");
+ return 0;
+}
+
+static int
+detach_experiment (void)
+/* fork child. Clean up state but don't write to experiment */
+{
+ __collector_java_mode = 0;
+ java_gc_on = 0;
+ jvm = NULL;
+ java_mem_mode = 0;
+ java_sync_mode = 0;
+ is_hotspot_vm = 0;
+ jvmti = NULL;
+ apistr = NULL;
+ __collector_mutex_init (&jclasses_lock);
+ tsd_key = COLLECTOR_TSD_INVALID_KEY;
+ TprintfT (0, "jprofile: detached from experiment.\n");
+ return 0;
+}
+
+JNIEXPORT jint JNICALL
+JVM_OnLoad (JavaVM *vm, char *options, void *reserved)
+{
+ jvmtiError err;
+ int use_jvmti = 0;
+ if (!__collector_java_mode)
+ {
+ TprintfT (DBG_LT1, "jprofile: JVM_OnLoad invoked with java mode disabled\n");
+ return JNI_OK;
+ }
+ else
+ TprintfT (DBG_LT1, "jprofile: JVM_OnLoad invoked\n");
+ jvm = vm;
+ jvmti = NULL;
+ if ((*jvm)->GetEnv (jvm, (void **) &jvmti, JVMTI_VERSION_1_0) >= 0 && jvmti)
+ {
+ TprintfT (DBG_LT1, "jprofile: JVMTI found\n");
+ use_jvmti = 1;
+ }
+ if (!use_jvmti)
+ {
+ collector_interface->writeLog ("<event kind=\"%s\" id=\"%d\"/>\n",
+ SP_JCMD_CERROR, COL_ERROR_JVMNOTSUPP);
+ return JNI_ERR;
+ }
+ else
+ {
+ Tprintf (DBG_LT0, "\tjprofile: Initializing for JVMTI\n");
+ apistr = "JVMTI 1.0";
+
+ // setup JVMTI
+ jvmtiCapabilities cpblts;
+ err = (*jvmti)->GetPotentialCapabilities (jvmti, &cpblts);
+ if (err == JVMTI_ERROR_NONE)
+ {
+ jvmtiCapabilities cpblts_set;
+ CALL_UTIL (memset)(&cpblts_set, 0, sizeof (cpblts_set));
+
+ /* Add only those capabilities that are among potential ones */
+ cpblts_set.can_get_source_file_name = cpblts.can_get_source_file_name;
+ Tprintf (DBG_LT1, "\tjprofile: adding can_get_source_file_name capability: %u\n", cpblts.can_get_source_file_name);
+
+ cpblts_set.can_generate_compiled_method_load_events = cpblts.can_generate_compiled_method_load_events;
+ Tprintf (DBG_LT1, "\tjprofile: adding can_generate_compiled_method_load_events capability: %u\n", cpblts.can_generate_compiled_method_load_events);
+
+ if (java_sync_mode)
+ {
+ cpblts_set.can_generate_monitor_events = cpblts.can_generate_monitor_events;
+ Tprintf (DBG_LT1, "\tjprofile: adding can_generate_monitor_events capability: %u\n", cpblts.can_generate_monitor_events);
+ }
+ if (java_gc_on)
+ {
+ cpblts_set.can_generate_garbage_collection_events = cpblts.can_generate_garbage_collection_events;
+ Tprintf (DBG_LT1, "\tjprofile: adding can_generate_garbage_collection_events capability: %u\n", cpblts.can_generate_garbage_collection_events);
+ }
+ err = (*jvmti)->AddCapabilities (jvmti, &cpblts_set);
+ Tprintf (DBG_LT1, "\tjprofile: AddCapabilities() returns: %d\n", err);
+ }
+ err = (*jvmti)->SetEventCallbacks (jvmti, &callbacks, sizeof ( callbacks));
+ err = (*jvmti)->SetEventNotificationMode (jvmti, JVMTI_ENABLE, JVMTI_EVENT_VM_INIT, NULL);
+ err = (*jvmti)->SetEventNotificationMode (jvmti, JVMTI_ENABLE, JVMTI_EVENT_VM_DEATH, NULL);
+ err = (*jvmti)->SetEventNotificationMode (jvmti, JVMTI_ENABLE, JVMTI_EVENT_CLASS_PREPARE, NULL);
+ err = (*jvmti)->SetEventNotificationMode (jvmti, JVMTI_ENABLE, JVMTI_EVENT_CLASS_LOAD, NULL);
+ err = (*jvmti)->SetEventNotificationMode (jvmti, JVMTI_ENABLE, JVMTI_EVENT_COMPILED_METHOD_LOAD, NULL);
+ err = (*jvmti)->SetEventNotificationMode (jvmti, JVMTI_ENABLE, JVMTI_EVENT_COMPILED_METHOD_UNLOAD, NULL);
+ err = (*jvmti)->SetEventNotificationMode (jvmti, JVMTI_ENABLE, JVMTI_EVENT_DYNAMIC_CODE_GENERATED, NULL);
+ err = (*jvmti)->SetEventNotificationMode (jvmti, JVMTI_ENABLE, JVMTI_EVENT_THREAD_START, NULL);
+ err = (*jvmti)->SetEventNotificationMode (jvmti, JVMTI_ENABLE, JVMTI_EVENT_THREAD_END, NULL);
+ err = (*jvmti)->SetEventNotificationMode (jvmti, JVMTI_ENABLE, JVMTI_EVENT_CLASS_FILE_LOAD_HOOK, NULL);
+ if (java_gc_on)
+ {
+ err = (*jvmti)->SetEventNotificationMode (jvmti, JVMTI_ENABLE, JVMTI_EVENT_GARBAGE_COLLECTION_START, NULL);
+ err = (*jvmti)->SetEventNotificationMode (jvmti, JVMTI_ENABLE, JVMTI_EVENT_GARBAGE_COLLECTION_FINISH, NULL);
+ }
+ if (java_mem_mode)
+ {
+ // err = (*jvmti)->SetEventNotificationMode( jvmti, JVMTI_ENABLE, <no event for heap tracing> , NULL );
+ collector_interface->writeLog ("<event kind=\"%s\" id=\"%d\"/>\n",
+ SP_JCMD_CWARN, COL_WARN_NO_JAVA_HEAP);
+ java_mem_mode = 0;
+ }
+ if (java_sync_mode)
+ {
+ err = (*jvmti)->SetEventNotificationMode (jvmti, JVMTI_ENABLE, JVMTI_EVENT_MONITOR_CONTENDED_ENTER, NULL);
+ err = (*jvmti)->SetEventNotificationMode (jvmti, JVMTI_ENABLE, JVMTI_EVENT_MONITOR_CONTENDED_ENTERED, NULL);
+ //err = (*jvmti)->SetEventNotificationMode( jvmti, JVMTI_ENABLE, JVMTI_EVENT_MONITOR_WAIT, NULL );
+ //err = (*jvmti)->SetEventNotificationMode( jvmti, JVMTI_ENABLE, JVMTI_EVENT_MONITOR_WAITED, NULL );
+ }
+ Tprintf (DBG_LT0, "\tjprofile: JVMTI initialized\n");
+ }
+
+ /* JVM still uses collector API on Solaris to notify us about dynamically generated code.
+ * If we ask it to generate events we'll end up with duplicate entries in the
+ * map file.
+ */
+ if (use_jvmti)
+ {
+ err = (*jvmti)->GenerateEvents (jvmti, JVMTI_EVENT_DYNAMIC_CODE_GENERATED);
+ err = (*jvmti)->GenerateEvents (jvmti, JVMTI_EVENT_COMPILED_METHOD_LOAD);
+ }
+ Tprintf (DBG_LT1, "\tjprofile: JVM_OnLoad ok\n");
+ return JNI_OK;
+}
+
+/* This is currently just a placeholder */
+JNIEXPORT jint JNICALL
+Agent_OnLoad (JavaVM *vm, char *options, void *reserved)
+{
+ return JVM_OnLoad (vm, options, reserved);
+}
+
+static void
+rwrite (int fd, const void *buf, size_t nbyte)
+{
+ size_t left = nbyte;
+ size_t res;
+ char *ptr = (char*) buf;
+ while (left > 0)
+ {
+ res = CALL_UTIL (write)(fd, ptr, left);
+ if (res == -1)
+ {
+ /* XXX: we can't write this record, we probably
+ * can't write anything else. Ignore.
+ */
+ return;
+ }
+ left -= res;
+ ptr += res;
+ }
+}
+
+void
+get_jvm_settings ()
+{
+ jint res;
+ JNIEnv *jni;
+ jclass jcls;
+ jmethodID jmid;
+ jstring jstrin;
+ jstring jstrout;
+ const char *str;
+ res = (*jvm)->GetEnv (jvm, (void **) &jni, JNI_VERSION_1_2);
+ if (res < 0)
+ return;
+
+ /* I'm not checking if results are valid as JVM is extremely
+ * sensitive to exceptions that might occur during these JNI calls
+ * and will die with a fatal error later anyway.
+ */
+ jcls = (*jni)->FindClass (jni, "java/lang/System");
+ jmid = (*jni)->GetStaticMethodID (jni, jcls, "getProperty", "(Ljava/lang/String;)Ljava/lang/String;");
+ jstrin = (*jni)->NewStringUTF (jni, "java.class.path");
+ jstrout = (*jni)->CallStaticObjectMethod (jni, jcls, jmid, jstrin);
+ str = jstrout ? (*jni)->GetStringUTFChars (jni, jstrout, NULL) : NULL;
+ if (str)
+ {
+ collector_interface->writeLog ("<setting %s=\"%s\"/>\n", SP_JCMD_SRCHPATH, str);
+ (*jni)->ReleaseStringUTFChars (jni, jstrout, str);
+ }
+ jstrin = (*jni)->NewStringUTF (jni, "sun.boot.class.path");
+ jstrout = (*jni)->CallStaticObjectMethod (jni, jcls, jmid, jstrin);
+ str = jstrout ? (*jni)->GetStringUTFChars (jni, jstrout, NULL) : NULL;
+ if (str)
+ {
+ collector_interface->writeLog ("<setting %s=\"%s\"/>\n", SP_JCMD_SRCHPATH, str);
+ (*jni)->ReleaseStringUTFChars (jni, jstrout, str);
+ }
+ jstrin = (*jni)->NewStringUTF (jni, "java.home");
+ jstrout = (*jni)->CallStaticObjectMethod (jni, jcls, jmid, jstrin);
+ str = jstrout ? (*jni)->GetStringUTFChars (jni, jstrout, NULL) : NULL;
+ if (str)
+ {
+ collector_interface->writeLog ("<setting %s=\"%s/../src.zip\"/>\n", SP_JCMD_SRCHPATH, str);
+ (*jni)->ReleaseStringUTFChars (jni, jstrout, str);
+ }
+ jstrin = (*jni)->NewStringUTF (jni, "java.vm.version");
+ jstrout = (*jni)->CallStaticObjectMethod (jni, jcls, jmid, jstrin);
+ str = jstrout ? (*jni)->GetStringUTFChars (jni, jstrout, NULL) : NULL;
+ if (str)
+ {
+ (void) collector_interface->writeLog ("<profile name=\"jprofile\" %s=\"%s\" %s=\"%s\"/>\n",
+ SP_JCMD_JVERSION, str, "api", apistr != NULL ? apistr : "N/A");
+ if (__collector_strStartWith (str, "1.4.2_02") < 0)
+ {
+ (void) collector_interface->writeLog ("<event kind=\"%s\" id=\"%d\"/>\n",
+ SP_JCMD_CWARN, COL_WARN_OLDJAVA);
+ }
+ (*jni)->ReleaseStringUTFChars (jni, jstrout, str);
+ }
+ is_hotspot_vm = 0;
+ jstrin = (*jni)->NewStringUTF (jni, "sun.management.compiler");
+ jstrout = (*jni)->CallStaticObjectMethod (jni, jcls, jmid, jstrin);
+ str = jstrout ? (*jni)->GetStringUTFChars (jni, jstrout, NULL) : NULL;
+ if (str && __collector_strncmp (str, "HotSpot", 7) == 0)
+ is_hotspot_vm = 1;
+
+ /* Emulate System.setProperty( "collector.init", "true") */
+ jmid = (*jni)->GetStaticMethodID (jni, jcls, "setProperty",
+ "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;");
+ jstrin = (*jni)->NewStringUTF (jni, "collector.init");
+ jstrout = (*jni)->NewStringUTF (jni, "true");
+ (*jni)->CallStaticObjectMethod (jni, jcls, jmid, jstrin, jstrout);
+}
+
+/*
+ * JVMTI code
+ */
+
+static void
+jvmti_VMInit (jvmtiEnv *jvmti_env, JNIEnv* jni_env, jthread thread)
+{
+ jint class_count = 0;
+ jclass *classes = NULL;
+ int i;
+ TprintfT (DBG_LT1, "jprofile: jvmti_VMInit called\n");
+ get_jvm_settings ();
+
+ /* determine loaded classes */
+ (*jvmti_env)->GetLoadedClasses (jvmti_env, &class_count, &classes);
+ TprintfT (DBG_LT1, "jprofile: jvmti_VMInit initializing %d classes\n", class_count);
+ for (i = 0; i < class_count; i++)
+ {
+ // PushLocalFrame
+ jvmti_ClassPrepare (jvmti_env, jni_env, NULL, classes[i]);
+ // PopLocalFrame
+ // DeleteLocalRef( classes[i] );
+ }
+ (*jvmti_env)->Deallocate (jvmti_env, (unsigned char*) classes);
+ getResource = (*jni_env)->GetMethodID (jni_env, (*jni_env)->FindClass (jni_env, "java/lang/ClassLoader"), "getResource", "(Ljava/lang/String;)Ljava/net/URL;");
+ toExternalForm = (*jni_env)->GetMethodID (jni_env, (*jni_env)->FindClass (jni_env, "java/net/URL"), "toExternalForm", "()Ljava/lang/String;");
+
+ /* find the stack unwind routine */
+ jprof_find_asyncgetcalltrace ();
+}
+
+static void
+jvmti_VMDeath (jvmtiEnv *jvmti_env, JNIEnv* jni_env)
+{
+ __collector_java_mode = 0;
+ TprintfT (DBG_LT1, "jprofile: jvmti_VMDeath event received\n");
+}
+
+static void
+jvmti_ThreadStart (jvmtiEnv *jvmti_env, JNIEnv* jni_env, jthread thread)
+{
+ jvmtiError err;
+ jvmtiThreadInfo t_info;
+ char *thread_name, *group_name, *parent_name;
+ hrtime_t hrt;
+ collector_thread_t tid;
+ thread_name = group_name = parent_name = NULL;
+ hrt = gethrtime ();
+ tid = __collector_thr_self ();
+ TprintfT (DBG_LT1, "jprofile: jvmti_ThreadStart: thread: %lu jni_env=%p jthread=%p\n",
+ (unsigned long) tid, jni_env, thread);
+ err = (*jvmti_env)->GetThreadInfo (jvmti_env, thread, &t_info);
+ if (err == JVMTI_ERROR_NONE)
+ {
+ jvmtiThreadGroupInfo g_info;
+ thread_name = t_info.name;
+ if (t_info.thread_group)
+ {
+ err = (*jvmti_env)->GetThreadGroupInfo (jvmti_env, t_info.thread_group, &g_info);
+ if (err == JVMTI_ERROR_NONE)
+ {
+ group_name = g_info.name;
+ if (g_info.parent)
+ {
+ jvmtiThreadGroupInfo p_info;
+ err = (*jvmti_env)->GetThreadGroupInfo (jvmti_env, g_info.parent, &p_info);
+ if (err == JVMTI_ERROR_NONE)
+ {
+ parent_name = p_info.name;
+ // DeleteLocalRef( p_info.parent );
+ }
+ // DeleteLocalRef( g_info.parent );
+ }
+ }
+ }
+ // DeleteLocalRef( t_info.thread_group );
+ // DeleteLocalRef( t_info.context_class_loader );
+ }
+ if (thread_name == NULL)
+ thread_name = "";
+ if (group_name == NULL)
+ group_name = "";
+ if (parent_name == NULL)
+ parent_name = "";
+ collector_interface->writeLog ("<event kind=\"%s\" tstamp=\"%u.%09u\" name=\"%s\" grpname=\"%s\" prntname=\"%s\" tid=\"%lu\" jthr=\"0x%lx\" jenv=\"0x%lx\"/>\n",
+ SP_JCMD_JTHRSTART,
+ (unsigned) (hrt / NANOSEC), (unsigned) (hrt % NANOSEC),
+ thread_name,
+ group_name,
+ parent_name,
+ (unsigned long) tid,
+ thread,
+ jni_env
+ );
+ TSD_Entry *tsd = collector_interface->getKey (tsd_key);
+ if (tsd)
+ tsd->env = jni_env;
+}
+
+static void
+jvmti_ThreadEnd (jvmtiEnv *jvmti_env, JNIEnv* jni_env, jthread thread)
+{
+ hrtime_t hrt = gethrtime ();
+ collector_thread_t tid = __collector_thr_self ();
+ TprintfT (DBG_LT1, "jprofile: jvmti_ThreadEnd: thread: %lu jni_env=%p jthread=%p\n",
+ (unsigned long) tid, jni_env, thread);
+
+ collector_interface->writeLog ("<event kind=\"%s\" tstamp=\"%u.%09u\" tid=\"%lu\" jthr=\"0x%lx\" jenv=\"0x%lx\"/>\n",
+ SP_JCMD_JTHREND,
+ (unsigned) (hrt / NANOSEC), (unsigned) (hrt % NANOSEC),
+ (unsigned long) tid,
+ thread,
+ jni_env
+ );
+ TSD_Entry *tsd = collector_interface->getKey (tsd_key);
+ if (tsd)
+ tsd->env = NULL;
+}
+
+/* The following definitions are borrowed from file jvmticmlr.h, part of jdk7 */
+typedef enum
+{
+ JVMTI_CMLR_DUMMY = 1,
+ JVMTI_CMLR_INLINE_INFO = 2
+} jvmtiCMLRKind;
+
+/*
+ * Record that represents arbitrary information passed through JVMTI
+ * CompiledMethodLoadEvent void pointer.
+ */
+typedef struct _jvmtiCompiledMethodLoadRecordHeader
+{
+ jvmtiCMLRKind kind; /* id for the kind of info passed in the record */
+ jint majorinfoversion; /* major and minor info version values. Init'ed */
+ jint minorinfoversion; /* to current version value in jvmtiExport.cpp. */
+ struct _jvmtiCompiledMethodLoadRecordHeader* next;
+} jvmtiCompiledMethodLoadRecordHeader;
+
+/*
+ * Record that gives information about the methods on the compile-time
+ * stack at a specific pc address of a compiled method. Each element in
+ * the methods array maps to same element in the bcis array.
+ */
+typedef struct _PCStackInfo
+{
+ void* pc; /* the pc address for this compiled method */
+ jint numstackframes; /* number of methods on the stack */
+ jmethodID* methods; /* array of numstackframes method ids */
+ jint* bcis; /* array of numstackframes bytecode indices */
+} PCStackInfo;
+
+/*
+ * Record that contains inlining information for each pc address of
+ * an nmethod.
+ */
+typedef struct _jvmtiCompiledMethodLoadInlineRecord
+{
+ jvmtiCompiledMethodLoadRecordHeader header; /* common header for casting */
+ jint numpcs; /* number of pc descriptors in this nmethod */
+ PCStackInfo* pcinfo; /* array of numpcs pc descriptors */
+} jvmtiCompiledMethodLoadInlineRecord;
+
+static void
+jvmti_CompiledMethodLoad (jvmtiEnv *jvmti_env, jmethodID method,
+ jint code_size, const void *code_addr, jint map_length,
+ const jvmtiAddrLocationMap *map,
+ const void *compile_info)
+{
+ TprintfT (DBG_LT2, "jprofile: jvmti_CompiledMethodLoad: mid=0x%lx addr=%p sz=0x%lu map=%p info=%p\n",
+ (unsigned long) method, code_addr, (long) code_size, map, compile_info);
+ char name[32];
+ CALL_UTIL (snprintf)(name, sizeof (name), "0x%lx", (unsigned long) method);
+
+ /* Parse compile_info to get pc -> bci mapping.
+ * Don't interpret compile_info from JVMs other than HotSpot.
+ */
+ int lntsize = 0;
+ DT_lineno *lntable = NULL;
+ if (compile_info != NULL && is_hotspot_vm)
+ {
+ Tprintf (DBG_LT2, "Mapping from compile_info:\n");
+ jvmtiCompiledMethodLoadRecordHeader *currec =
+ (jvmtiCompiledMethodLoadRecordHeader*) compile_info;
+ while (currec != NULL)
+ {
+ if (currec->kind == JVMTI_CMLR_INLINE_INFO)
+ {
+ jvmtiCompiledMethodLoadInlineRecord *inrec =
+ (jvmtiCompiledMethodLoadInlineRecord*) currec;
+ if (inrec->numpcs <= 0)
+ break;
+ lntsize = inrec->numpcs;
+ lntable = (DT_lineno*) alloca (lntsize * sizeof (DT_lineno));
+ PCStackInfo *pcrec = inrec->pcinfo;
+ DT_lineno *lnorec = lntable;
+ for (int i = 0; i < lntsize; ++i)
+ {
+ for (int j = pcrec->numstackframes - 1; j >= 0; --j)
+ if (pcrec->methods[j] == method)
+ {
+ lnorec->offset = (char*) pcrec->pc - (char*) code_addr;
+ lnorec->lineno = pcrec->bcis[j];
+ Tprintf (DBG_LT2, " pc: 0x%lx bci: 0x%lx\n",
+ (long) lnorec->offset, (long) lnorec->lineno);
+ ++lnorec;
+ break;
+ }
+ ++pcrec;
+ }
+ break;
+ }
+ currec = currec->next;
+ }
+ }
+ else if (map != NULL)
+ {
+ Tprintf (DBG_LT2, "Mapping from jvmtiAddrLocationMap:\n");
+ lntsize = map_length;
+ lntable = (DT_lineno*) alloca (lntsize * sizeof (DT_lineno));
+ DT_lineno *lnorec = lntable;
+ for (int i = 0; i < map_length; ++i)
+ {
+ lnorec->offset = (char*) map[i].start_address - (char*) code_addr;
+ lnorec->lineno = (unsigned int) map[i].location;
+ Tprintf (DBG_LT2, " pc: 0x%lx bci: 0x%lx\n",
+ (long) lnorec->offset, (long) lnorec->lineno);
+ ++lnorec;
+ }
+ }
+ __collector_int_func_load (DFUNC_JAVA, name, NULL, (void*) code_addr,
+ code_size, lntsize, lntable);
+}
+
+static void
+jvmti_CompiledMethodUnload (jvmtiEnv *jvmti_env, jmethodID method, const void* code_addr)
+{
+ __collector_int_func_unload (DFUNC_API, (void*) code_addr);
+}
+
+static void
+jvmti_DynamicCodeGenerated (jvmtiEnv *jvmti_env, const char*name, const void *code_addr, jint code_size)
+{
+ __collector_int_func_load (DFUNC_API, (char*) name, NULL, (void*) code_addr,
+ code_size, 0, NULL);
+}
+
+static void
+addToDynamicArchive (const char* name, const unsigned char* class_data, int class_data_len)
+{
+ char path[MAXPATHLEN + 1];
+ mode_t fmode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH;
+ mode_t dmode = fmode | S_IXUSR | S_IXGRP | S_IXOTH;
+ if (name == NULL)
+ name = "";
+ const char *expdir = collector_interface->getExpDir ();
+ if (CALL_UTIL (strlen)(expdir) +
+ CALL_UTIL (strlen)(SP_DYNAMIC_CLASSES) +
+ CALL_UTIL (strlen)(name) + 8 > sizeof (path))
+ return;
+ CALL_UTIL (snprintf)(path, sizeof (path), "%s/%s/%s.class", expdir, SP_DYNAMIC_CLASSES, name);
+
+ /* Create all path components step by step starting with SP_DYNAMIC_CLASSES */
+ char *str = path + CALL_UTIL (strlen)(expdir) + 1 + CALL_UTIL (strlen)(SP_DYNAMIC_CLASSES);
+ while (str)
+ {
+ *str = '\0';
+ if (CALL_UTIL (mkdir)(path, dmode) != 0)
+ {
+ /* Checking for EEXIST is not enough, access() is more reliable */
+ if (CALL_UTIL (access)(path, F_OK) != 0)
+ {
+ collector_interface->writeLog ("<event kind=\"%s\" id=\"%d\" ec=\"%d\">%s</event>\n",
+ SP_JCMD_CERROR, COL_ERROR_MKDIR, errno, path);
+ return;
+ }
+ }
+ *str++ = '/';
+ str = CALL_UTIL (strchr)(str, '/');
+ }
+
+ int fd = CALL_UTIL (open)(path, O_WRONLY | O_CREAT | O_TRUNC, fmode);
+ if (fd < 0)
+ {
+ collector_interface->writeLog ("<event kind=\"%s\" id=\"%d\" ec=\"%d\">%s</event>\n",
+ SP_JCMD_CERROR, COL_ERROR_OVWOPEN, errno, path);
+ return;
+ }
+ rwrite (fd, class_data, class_data_len);
+ CALL_UTIL (close)(fd);
+}
+
+static void
+jvmti_ClassFileLoadHook (jvmtiEnv *jvmti_env, JNIEnv* jni_env, jclass class_being_redefined,
+ jobject loader, const char* name, jobject protection_domain, jint class_data_len,
+ const unsigned char* class_data, jint* new_class_data_len, unsigned char** new_class_data)
+{
+ jclass loaderlass;
+ int err;
+ jvmtiPhase phase_ptr;
+ char *cname = NULL;
+ (*jvmti_env)->GetPhase (jvmti_env, &phase_ptr);
+
+ /* skip non live phases */
+ if (phase_ptr != JVMTI_PHASE_LIVE)
+ return;
+
+ /* skip system class loaders */
+ if (!loader)
+ return;
+ loaderlass = (*jni_env)->GetObjectClass (jni_env, loader);
+ err = (*jvmti_env)->GetClassSignature (jvmti_env, loaderlass, &cname, NULL);
+ if (err != JVMTI_ERROR_NONE || !cname || *cname == (char) 0)
+ return;
+
+ /* skip classes loaded with AppClassLoader (java.class.path) */
+ if (__collector_strcmp (cname, "Lsun/misc/Launcher$AppClassLoader;") == 0)
+ return;
+ addToDynamicArchive (name, class_data, (int) class_data_len);
+}
+
+#define NO_CLASS_NAME "<noname>"
+#define NO_SOURCE_FILE "<Unknown>"
+
+static void
+record_jclass (uint64_t class_id, hrtime_t hrt, const char *cname, const char *sname)
+{
+ size_t clen = ARCH_STRLEN (cname);
+ size_t slen = ARCH_STRLEN (sname);
+ size_t sz = sizeof (ARCH_jclass) + clen + slen;
+ ARCH_jclass *jcls = (ARCH_jclass*) alloca (sz);
+ jcls->comm.tsize = sz;
+ jcls->comm.type = ARCH_JCLASS;
+ jcls->class_id = class_id;
+ jcls->tstamp = hrt;
+ char *str = (char*) (jcls + 1);
+ size_t i = CALL_UTIL (strlcpy)(str, cname, clen);
+ str += i;
+ while (i++ < clen)
+ *str++ = (char) 0; /* pad with 0's */
+ i = CALL_UTIL (strlcpy)(str, sname, slen);
+ str += i;
+ while (i++ < slen)
+ *str++ = (char) 0; /* pad with 0's */
+ collector_interface->writeDataPacket (jprof_hndl, (CM_Packet*) jcls);
+}
+
+static void
+record_jmethod (uint64_t class_id, uint64_t method_id,
+ const char *mname, const char *msign)
+{
+ size_t mnlen = mname ? ARCH_STRLEN (mname) : 0;
+ size_t mslen = msign ? ARCH_STRLEN (msign) : 0;
+ size_t sz = sizeof (ARCH_jmethod) + mnlen + mslen;
+ ARCH_jmethod *jmth = (ARCH_jmethod*) alloca (sz);
+ if (jmth == NULL)
+ {
+ TprintfT (DBG_LT1, "jprofile: record_jmethod ERROR: failed to alloca(%ld)\n", (long) sz);
+ return;
+ }
+ jmth->comm.tsize = sz;
+ jmth->comm.type = ARCH_JMETHOD;
+ jmth->class_id = class_id;
+ jmth->method_id = method_id;
+ char *str = (char*) (jmth + 1);
+ if (mname)
+ {
+ size_t i = CALL_UTIL (strlcpy)(str, mname, mnlen);
+ str += i;
+ while (i++ < mnlen)
+ *str++ = (char) 0; /* pad with 0's */
+ }
+ if (msign)
+ {
+ size_t i = CALL_UTIL (strlcpy)(str, msign, mslen);
+ str += i;
+ while (i++ < mslen)
+ *str++ = (char) 0; /* pad with 0's */
+ }
+ collector_interface->writeDataPacket (jprof_hndl, (CM_Packet*) jmth);
+}
+
+static void
+jvmti_ClassPrepare (jvmtiEnv *jvmti_env, JNIEnv* jni_env,
+ jthread thread, jclass klass)
+{
+ hrtime_t hrt;
+ jint mnum;
+ jmethodID *mptr;
+ char *cname, *sname;
+ char *str1 = NULL;
+ int err = (*jvmti_env)->GetClassSignature (jvmti_env, klass, &str1, NULL);
+ if (err != JVMTI_ERROR_NONE || str1 == NULL || *str1 == (char) 0)
+ cname = NO_CLASS_NAME;
+ else
+ cname = str1;
+ if (*cname != 'L')
+ {
+ DprintfT (SP_DUMP_JAVA | SP_DUMP_TIME, "jvmti_ClassPrepare: GetClassSignature failed. err=%d cname=%s\n", err, cname);
+ return;
+ }
+ char *str2 = NULL;
+ err = (*jvmti_env)->GetSourceFileName (jvmti_env, klass, &str2);
+ if (err != JVMTI_ERROR_NONE || str2 == NULL || *str2 == (char) 0)
+ sname = NO_SOURCE_FILE;
+ else
+ sname = str2;
+ DprintfT (SP_DUMP_JAVA | SP_DUMP_TIME, "jvmti_ClassPrepare: cname=%s sname=%s\n", STR (cname), STR (sname));
+
+ /* Lock the whole file */
+ __collector_mutex_lock (&jclasses_lock);
+ hrt = gethrtime ();
+ record_jclass ((unsigned long) klass, hrt, cname, sname);
+ (*jvmti_env)->Deallocate (jvmti_env, (unsigned char *) str1);
+ (*jvmti_env)->Deallocate (jvmti_env, (unsigned char *) str2);
+ err = (*jvmti_env)->GetClassMethods (jvmti_env, klass, &mnum, &mptr);
+ if (err == JVMTI_ERROR_NONE)
+ {
+ for (int i = 0; i < mnum; i++)
+ {
+ char *mname, *msign;
+ err = (*jvmti_env)->GetMethodName (jvmti_env, mptr[i], &mname, &msign, NULL);
+ if (err != JVMTI_ERROR_NONE)
+ continue;
+ record_jmethod ((unsigned long) klass, (unsigned long) mptr[i], mname, msign);
+ // DeleteLocalRef( mptr[i] );
+ }
+ (*jvmti_env)->Deallocate (jvmti_env, (unsigned char*) mptr);
+ }
+ /* Unlock the file */
+ __collector_mutex_unlock (&jclasses_lock);
+}
+
+/*
+ * The CLASS_LOAD event is enabled to enable AsyncGetCallTrace
+ */
+static void
+jvmti_ClassLoad (jvmtiEnv *jvmti_env, JNIEnv* jni_env, jthread thread, jclass klass)
+{
+ char *cname;
+ char *str1 = NULL;
+ int err = (*jvmti_env)->GetClassSignature (jvmti_env, klass, &str1, NULL);
+ if (err != JVMTI_ERROR_NONE || str1 == NULL || *str1 == (char) 0)
+ cname = NO_CLASS_NAME;
+ else
+ cname = str1;
+ jstring str = NULL;
+ const char* resourceName;
+ jobject classLoader = NULL;
+ err = (*jvmti)->GetClassLoader (jvmti, klass, &classLoader);
+ DprintfT (SP_DUMP_JAVA | SP_DUMP_TIME, "jprofile: jvmti_ClassLoad err=%d cname=%s\n", err, STR (cname));
+ if (err == 0)
+ {
+ if (classLoader == NULL)
+ {
+ // bootstrap class loader
+ resourceName = "";
+ }
+ else
+ {
+ char* name = (char *) alloca ((CALL_UTIL (strlen)(str1) + 32) * sizeof (char));
+ CALL_UTIL (strlcpy)(name, str1 + 1, CALL_UTIL (strlen)(str1));
+ name[CALL_UTIL (strlen)(name) - 1] = '\0'; // remove the last ';'
+ char* p;
+ for (p = name; *p != '\0'; p++)
+ if (*p == '.')
+ *p = '/';
+ CALL_UTIL (strlcat)(name, ".class", CALL_UTIL (strlen)(name) + CALL_UTIL (strlen)(".class") + 1);
+ if (getResource == NULL || toExternalForm == NULL)
+ {
+ resourceName = "";
+ DprintfT (SP_DUMP_JAVA | SP_DUMP_TIME, "jvmti_ClassLoad: class %s failed to get path with method missing\n", STR (cname));
+ }
+ else
+ {
+ jobject url = (*jni_env)->CallObjectMethod (jni_env, classLoader, getResource, (*jni_env)->NewStringUTF (jni_env, name));
+ if (url == NULL)
+ {
+ resourceName = "";
+ DprintfT (SP_DUMP_JAVA | SP_DUMP_TIME, "jvmti_ClassLoad: class %s failed to get path\n", STR (cname));
+ }
+ else
+ {
+ str = (jstring) (*jni_env)->CallObjectMethod (jni_env, url, toExternalForm);
+ resourceName = (*jni_env)->GetStringUTFChars (jni_env, str, NULL);
+ DprintfT (SP_DUMP_JAVA | SP_DUMP_TIME, "jvmti_ClassLoad: ARCH_JCLASS_LOCATION(Ox%x) class_id=0x%lx className='%s' fileName '%s'\n",
+ (int) ARCH_JCLASS_LOCATION, (unsigned long) klass, STR (cname), STR (resourceName));
+ size_t clen = ARCH_STRLEN (cname);
+ size_t slen = ARCH_STRLEN (resourceName);
+ size_t sz = sizeof (ARCH_jclass) + clen + slen;
+ ARCH_jclass_location *jcls = (ARCH_jclass_location*) alloca (sz);
+ jcls->comm.tsize = sz;
+ jcls->comm.type = ARCH_JCLASS_LOCATION;
+ jcls->class_id = (unsigned long) klass;
+ char *str = (char*) (jcls + 1);
+ size_t i = CALL_UTIL (strlcpy)(str, cname, clen);
+ str += i;
+ while (i++ < clen)
+ {
+ *str++ = (char) 0; /* pad with 0's */
+ }
+ i = CALL_UTIL (strlcpy)(str, resourceName, slen);
+ str += i;
+ while (i++ < slen)
+ {
+ *str++ = (char) 0; /* pad with 0's */
+ }
+ /* Lock the whole file */
+ __collector_mutex_lock (&jclasses_lock);
+ collector_interface->writeDataPacket (jprof_hndl, (CM_Packet*) jcls);
+ /* Unlock the file */
+ __collector_mutex_unlock (&jclasses_lock);
+ }
+ }
+ }
+ }
+}
+
+static void
+jvmti_MonitorEnter (jvmtiEnv *jvmti_env, JNIEnv* jni_env,
+ jthread thread, jobject object)
+{
+ if (collector_jsync_begin)
+ collector_jsync_begin ();
+ TSD_Entry *tsd = collector_interface->getKey (tsd_key);
+ if (tsd == NULL)
+ return;
+ tsd->tstamp = gethrtime ();
+}
+
+static void
+jvmti_MonitorEntered (jvmtiEnv *jvmti_env, JNIEnv* jni_env,
+ jthread thread, jobject object)
+{
+ TSD_Entry *tsd = collector_interface->getKey (tsd_key);
+ if (tsd == NULL)
+ return;
+ if (collector_jsync_end)
+ collector_jsync_end (tsd->tstamp, object);
+}
+
+static void
+jvmti_GarbageCollectionStart (jvmtiEnv *jvmti_env)
+{
+ hrtime_t hrt = gethrtime ();
+ collector_interface->writeLog ("<event kind=\"%s\" tstamp=\"%u.%09u\"/>\n",
+ SP_JCMD_GCSTART,
+ (unsigned) (hrt / NANOSEC), (unsigned) (hrt % NANOSEC)
+ );
+ TprintfT (DBG_LT1, "jprofile: jvmti_GarbageCollectionStart.\n");
+}
+
+static void
+jvmti_GarbageCollectionFinish (jvmtiEnv *jvmti_env)
+{
+ hrtime_t hrt = gethrtime ();
+ collector_interface->writeLog ("<event kind=\"%s\" tstamp=\"%u.%09u\"/>\n",
+ SP_JCMD_GCEND,
+ (unsigned) (hrt / NANOSEC), (unsigned) (hrt % NANOSEC)
+ );
+ TprintfT (DBG_LT1, "jprofile: jvmti_GarbageCollectionFinish.\n");
+}
+
+#if 0
+static void
+jvmti_MonitorWait (jvmtiEnv *jvmti_env, JNIEnv* jni_env, jthread thread,
+ jobject object, jlong timed_out)
+{
+ if (collector_sync_begin)
+ collector_sync_begin ();
+ TSD_Entry *tsd = collector_interface->getKey (tsd_key);
+ if (tsd == NULL)
+ return;
+ tsd->tstamp = gethrtime ();
+}
+
+static void
+jvmti_MonitorWaited (jvmtiEnv *jvmti_env, JNIEnv* jni_env, jthread thread,
+ jobject object, jboolean timed_out)
+{
+ TSD_Entry *tsd = collector_interface->getKey (tsd_key);
+ if (tsd == NULL)
+ return;
+ if (collector_sync_end)
+ collector_sync_end (tsd->tstamp, object);
+}
+#endif
+
+static void
+jprof_find_asyncgetcalltrace ()
+{
+ void *jvmhandle;
+ if (__collector_VM_ReadByteInstruction == NULL)
+ __collector_VM_ReadByteInstruction = (int(*)()) dlsym (RTLD_DEFAULT, "Async_VM_ReadByteInstruction");
+
+ /* look for stack unwind function using default path */
+ AsyncGetCallTrace = (void (*)(JVMPI_CallTrace*, jint, ucontext_t*))
+ dlsym (RTLD_DEFAULT, "AsyncGetCallTrace");
+ if (AsyncGetCallTrace != NULL)
+ {
+ __collector_java_asyncgetcalltrace_loaded = 1;
+ TprintfT (DBG_LT1, "jprofile: AsyncGetCallTrace found with RTLD_DEFAULT\n");
+ }
+ else
+ {
+ /* not found there, find libjvm.so, and ask again */
+ jvmhandle = dlopen ("libjvm.so", RTLD_LAZY | RTLD_NOLOAD);
+ if (jvmhandle != NULL)
+ {
+ AsyncGetCallTrace = (void (*)(JVMPI_CallTrace*, jint, ucontext_t*))
+ dlsym (jvmhandle, "AsyncGetCallTrace");
+ }
+ }
+
+ if (AsyncGetCallTrace == NULL)
+ {
+ /* we could not find it -- write collector error */
+ TprintfT (0, "jprofile: ERROR -- AsyncGetCallTrace not found in address space\n");
+ char *err = dlerror ();
+ collector_interface->writeLog ("<event kind=\"%s\" id=\"%d\">%s</event>\n",
+ SP_JCMD_CERROR, COL_ERROR_JVMNOJSTACK, err ? err : "");
+ __collector_java_mode = 0;
+ }
+ else
+ {
+ __collector_java_asyncgetcalltrace_loaded = 1;
+ TprintfT (DBG_LT1, "jprofile: AsyncGetCallTrace initialized in jprof_jvmpi_init_done_event\n");
+ }
+}
+
+int
+__collector_ext_jstack_unwind (char *ptr, int sz, ucontext_t *uc)
+{
+ if (AsyncGetCallTrace == NULL)
+ {
+ TprintfT (DBG_LT0, "jprofile: __collector_ext_jstack_unwind: AsyncGetCallTrace is NULL\n");
+ return 0;
+ }
+
+ TSD_Entry *tsd = collector_interface->getKey (tsd_key);
+ if (tsd == NULL)
+ {
+ TprintfT (DBG_LT3, "jprofile: __collector_ext_jstack_unwind: tsd is NULL\n");
+ return 0;
+ }
+ if (__collector_java_attach && tsd->env == NULL && jvmti != NULL && jvm != NULL)
+ {
+ TprintfT (DBG_LT3, "jprofile: __collector_ext_jstack_unwind: tsd->env is NULL under attach\n");
+ JNIEnv* jni_env = NULL;
+ (*jvm)->GetEnv (jvm, (void **) &jni_env, JNI_VERSION_1_2);
+ tsd->env = jni_env;
+ }
+ if (tsd->env == NULL)
+ {
+ TprintfT (DBG_LT3, "jprofile: __collector_ext_jstack_unwind: tsd->env is NULL\n");
+ return 0;
+ }
+
+ /* skip the Java stack whenever another signal handler is present */
+ if (uc->uc_link)
+ {
+ TprintfT (DBG_LT3, "jprofile: __collector_ext_jstack_unwind: uc->uc_link is non-NULL\n");
+ return 0;
+ }
+ /* we don't expect Java frames in signal handlers, so
+ * unroll the list of saved contexts to the topmost one
+ */
+ while (uc->uc_link)
+ uc = uc->uc_link;
+ Java_info *jinfo = (Java_info*) ptr;
+ jinfo->kind = JAVA_INFO;
+ jinfo->hsize = sizeof (Java_info);
+ ptr += sizeof (Java_info);
+ sz -= sizeof (Java_info);
+
+ JVMPI_CallTrace jtrace;
+ jtrace.env_id = tsd->env;
+ jtrace.frames = (JVMPI_CallFrame*) ptr;
+
+ /* nframes is how many frames we have room for */
+ jint nframes = sz / sizeof (JVMPI_CallFrame);
+
+#if WSIZE(64)
+ /* bug 6909545: garbage in 64-bit JAVA_INFO */
+ CALL_UTIL (memset)(jtrace.frames, 0, nframes * sizeof (JVMPI_CallFrame));
+#endif
+
+#if ARCH(SPARC)
+ // 21328946 JDK bug 8129933 causes <no java callstack recorded> on sparc-Linux
+ // convert from ucontext_t to sigcontext
+ struct sigcontext sctx;
+ sctx.sigc_regs.tpc = uc->uc_mcontext.mc_gregs[MC_PC];
+ __collector_memcpy (sctx.sigc_regs.u_regs, &uc->uc_mcontext.mc_gregs[3], sizeof (sctx.sigc_regs.u_regs));
+ uc = (ucontext_t *) (&sctx);
+#endif /* SPARC */
+ AsyncGetCallTrace (&jtrace, nframes, uc);
+
+ if (jtrace.num_frames == nframes)
+ {
+ JVMPI_CallFrame *last = &jtrace.frames[nframes - 1];
+ last->method_id = (jmethodID) SP_TRUNC_STACK_MARKER;
+ last->lineno = 0;
+ }
+
+ /* nframes is how many frames we actually got */
+ nframes = jtrace.num_frames;
+ TprintfT (DBG_LT3, "jprofile: __collector_ext_jstack_unwind: AsyncGetCallTrace jtrace.numframes = %d\n", nframes);
+ if (nframes <= 0)
+ {
+ /* negative values are error codes */
+ TprintfT (0, "jprofile: __collector_ext_jstack_unwind: AsyncGetCallTrace returned error: jtrace.numframes = %d\n", nframes);
+ nframes = 1;
+ JVMPI_CallFrame *err = (JVMPI_CallFrame*) ptr;
+ err->lineno = jtrace.num_frames; // bci = error code
+ err->method_id = 0; // artificial method id
+ }
+ jinfo->hsize += nframes * sizeof (JVMPI_CallFrame);
+ return jinfo->hsize;
+}
+
+/*
+ * Collector Java API implementation
+ */
+void
+Java_com_sun_forte_st_collector_CollectorAPI__1sample(JNIEnv *jEnv, jclass jCls, jstring jName)
+{
+ JNIEnv *jni;
+ jint res = (*jvm)->GetEnv (jvm, (void **) &jni, JNI_VERSION_1_2);
+ if (res < 0)
+ return;
+ const char *name = jName ? (*jni)->GetStringUTFChars (jni, jName, NULL) : NULL;
+ __collector_sample ((char*) name);
+}
+
+void
+Java_com_sun_forte_st_collector_CollectorAPI__1pause(JNIEnv *jEnv, jclass jCls)
+{
+ __collector_pause_m ("JAPI");
+}
+
+void
+Java_com_sun_forte_st_collector_CollectorAPI__1resume(JNIEnv *jEnv, jclass jCls)
+{
+ __collector_resume ();
+}
+
+void
+Java_com_sun_forte_st_collector_CollectorAPI__1terminate(JNIEnv *jEnv, jclass jCls)
+{
+ __collector_terminate_expt ();
+}
+#endif /* GPROFNG_JAVA_PROFILING */
+
+static void init_module () __attribute__ ((constructor));
+static void
+init_module ()
+{
+#if defined(GPROFNG_JAVA_PROFILING)
+ __collector_dlsym_guard = 1;
+ RegModuleFunc reg_module = (RegModuleFunc) dlsym (RTLD_DEFAULT, "__collector_register_module");
+ __collector_dlsym_guard = 0;
+ if (reg_module)
+ {
+ jprof_hndl = reg_module (&module_interface);
+ TprintfT (0, "jprofile: init_module.\n");
+ }
+#endif /* GPROFNG_JAVA_PROFILING */
+}
+
+int __collector_java_mode = 0;
+int __collector_java_asyncgetcalltrace_loaded = 0;
diff --git a/gprofng/libcollector/libcol-i386-dis.c b/gprofng/libcollector/libcol-i386-dis.c
new file mode 100644
index 00000000000..9b3882aad82
--- /dev/null
+++ b/gprofng/libcollector/libcol-i386-dis.c
@@ -0,0 +1,28 @@
+/* Copyright (C) 2022 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#if defined(__i386__) || defined(__x86_64)
+#include "opcodes/i386-dis.c"
+
+#undef _
+#undef M
+#include "libiberty/safe-ctype.c"
+#endif
+
diff --git a/gprofng/libcollector/libcol_hwcdrv.c b/gprofng/libcollector/libcol_hwcdrv.c
new file mode 100644
index 00000000000..f3bd932735f
--- /dev/null
+++ b/gprofng/libcollector/libcol_hwcdrv.c
@@ -0,0 +1,25 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include "collector.h" /* Tprintf*() */
+
+#define LIBCOLLECTOR_SRC
+#include "hwcdrv.c"
diff --git a/gprofng/libcollector/libcol_hwcfuncs.c b/gprofng/libcollector/libcol_hwcfuncs.c
new file mode 100644
index 00000000000..1f5ad68e05a
--- /dev/null
+++ b/gprofng/libcollector/libcol_hwcfuncs.c
@@ -0,0 +1,27 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include "collector.h" /* Tprintf*() */
+
+#define LIBCOLLECTOR_SRC
+#include "hwcfuncs.c"
+
+
diff --git a/gprofng/libcollector/libcol_util.c b/gprofng/libcollector/libcol_util.c
new file mode 100644
index 00000000000..c709b3c5ed1
--- /dev/null
+++ b/gprofng/libcollector/libcol_util.c
@@ -0,0 +1,1693 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <stdlib.h>
+#include <string.h>
+#include <signal.h>
+#include <dlfcn.h>
+#include <errno.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <sys/syscall.h>
+#include <sys/mman.h>
+#include <sys/ioctl.h>
+
+#include "gp-defs.h"
+#include "collector.h"
+#include "libcol_util.h"
+#include "gp-experiment.h"
+#include "Emsgnum.h"
+#include "memmgr.h" // __collector_allocCSize, __collector_freeCSize
+#include "tsd.h"
+
+/* TprintfT(<level>,...) definitions. Adjust per module as needed */
+#define DBG_LT0 0 // for high-level configuration, unexpected errors/warnings
+#define DBG_LT1 1 // for configuration details, warnings
+#define DBG_LT2 2
+#define DBG_LT3 3
+
+/*
+ * This file is intended for collector's own implementation of
+ * various routines to avoid interaction with libc and other
+ * libraries.
+ */
+
+/* ------- libc interface ----------------- */
+CollectorUtilFuncs __collector_util_funcs = {NULL};
+int __collector_dlsym_guard = 0;
+int(*__collector_sscanfp)(const char *restrict s, const char *restrict fmt, ...);
+
+/*
+ * We have calls on Solaris to get the thread ID.
+ * On Linux, there is a gettid() system call.
+ * From user space, we have to use syscall(__NR_gettid).
+ * The call is probably fast (with the tid in vdso), but dbx intercepts the syscall.
+ * 7182047 syscall() has large overhead under dbx on linux
+ * One option is to use an assembly call to get the tid.
+ * We know how to do this on x86, but not on SPARC.
+ * So another option is to do the syscall once and cache the result in thread-local storage.
+ * This solves the SPARC case.
+ * On x86 we could use one or both strategies. So there are opportunities here to simplify the code.
+ */
+static unsigned gettid_key = COLLECTOR_TSD_INVALID_KEY;
+
+void
+__collector_ext_gettid_tsd_create_key ()
+{
+ gettid_key = __collector_tsd_create_key (sizeof (pid_t), NULL, NULL);
+}
+
+pid_t
+__collector_gettid ()
+{
+ pid_t *tid_ptr = (pid_t *) __collector_tsd_get_by_key (gettid_key);
+ // check if we have a thread-specific tid and if it's been initialized
+ // (it's 0 before initialization and cannot be 0 after since pid 0 is the boot process)
+ if (tid_ptr && *tid_ptr > 0)
+ return *tid_ptr;
+ pid_t r;
+
+#if ARCH(Intel)
+#if WSIZE(32)
+#define syscall_instr "int $0x80"
+#define syscall_clobber "memory"
+#else //WSIZE(64)
+#define syscall_instr "syscall"
+#define syscall_clobber "rcx", "r11", "memory"
+#endif
+ __asm__ __volatile__(syscall_instr
+ : "=a" (r) : "0" (__NR_gettid)
+ : syscall_clobber);
+#else
+ r = syscall (__NR_gettid);
+#endif
+ if (tid_ptr)
+ *tid_ptr = r;
+ return r;
+}
+
+static inline int
+atomic_swap (volatile int * p, int v)
+{
+#if ARCH(Intel)
+ int r;
+ __asm__ __volatile__("xchg %1, %2" : "=r" (r) : "m" (*p), "0" (v));
+ return r;
+#else
+ /* Since the inline templates perfan/libcollector/src/inline.*.il all
+ * have implementations for __collector_cas_32(), how about we just
+ * use that interface for Intel as well and drop the "#if ARCH()" stuff here?
+ *
+ * As it is, we're using an atomic swap on Intel and
+ * compare-and-swap on SPARC. The semantics are different
+ * (cas requires an expected "compare" value and swaps ONLY
+ * if we match that value). Nevertheless, the results of the
+ * two operations
+ * Intel: atomic_swap(&lock, 1)
+ * SPARC: cas(&lock,0,1)
+ * happen to be the same for the two cases we're interested in:
+ * if lock==0 lock=1 return 0
+ * if lock==1 lock=1 return 1
+ * You CANNOT always simply substitute cas for swap.
+ */
+ return __collector_cas_32 ((volatile uint32_t *)p, 0, v);
+#endif
+}
+
+int
+__collector_mutex_lock (collector_mutex_t *lock_var)
+{
+ volatile unsigned int i; /* xxxx volatile may not be honored on amd64 -x04 */
+
+ if (!(*lock_var) && !atomic_swap (lock_var, 1))
+ return 0;
+
+ do
+ {
+ while ((collector_mutex_t) (*lock_var) == 1)
+ i++;
+ }
+ while (atomic_swap (lock_var, 1));
+ return 0;
+}
+
+int
+__collector_mutex_trylock (collector_mutex_t *lock_var)
+{
+ if (!(*lock_var) && !atomic_swap (lock_var, 1))
+ return 0;
+ return EBUSY;
+}
+
+int
+__collector_mutex_unlock (collector_mutex_t *lock_var)
+{
+ (*lock_var) = 0;
+ return 0;
+}
+
+#if ARCH(SPARC)
+void
+__collector_inc_32 (volatile uint32_t *mem)
+{
+ uint32_t t1, t2;
+ __asm__ __volatile__(" ld %2,%0 \n"
+ "1: add %0,1,%1 \n"
+ " cas %2,%0,%1 \n"
+ " cmp %0,%1 \n"
+ " bne,a 1b \n"
+ " mov %1,%0 \n"
+ : "=&r" (t1), "=&r" (t2)
+ : "m" (*mem)
+ : "cc"
+ );
+}
+
+void
+__collector_dec_32 (volatile uint32_t *mem)
+{
+ uint32_t t1, t2;
+ __asm__ __volatile__(" ld %2,%0 \n"
+ "1: sub %0,1,%1 \n"
+ " cas %2,%0,%1 \n"
+ " cmp %0,%1 \n"
+ " bne,a 1b \n"
+ " mov %1,%0 \n"
+ : "=&r" (t1), "=&r" (t2)
+ : "m" (*mem)
+ : "cc"
+ );
+}
+
+uint32_t
+__collector_cas_32 (volatile uint32_t *mem, uint32_t old, uint32_t new)
+{
+ __asm__ __volatile__("cas [%1],%2,%0"
+ : "+r" (new)
+ : "r" (mem), "r" (old));
+ return new;
+}
+
+uint32_t
+__collector_subget_32 (volatile uint32_t *mem, uint32_t val)
+{
+ uint32_t t1, t2;
+ __asm__ __volatile__(" ld %2,%0 \n"
+ "1: sub %0,%3,%1 \n"
+ " cas %2,%0,%1 \n"
+ " cmp %0,%1 \n"
+ " bne,a 1b \n"
+ " mov %1,%0 \n"
+ " sub %0,%3,%1 \n"
+ : "=&r" (t1), "=&r" (t2)
+ : "m" (*mem), "r" (val)
+ : "cc"
+ );
+ return t2;
+}
+
+#if WSIZE(32)
+
+void *
+__collector_cas_ptr (volatile void *mem, void *old, void *new)
+{
+ __asm__ __volatile__("cas [%1],%2,%0"
+ : "+r" (new)
+ : "r" (mem), "r" (old));
+ return new;
+}
+
+uint64_t
+__collector_cas_64p (volatile uint64_t *mem, uint64_t *old, uint64_t *new)
+{
+ uint64_t t;
+ __asm__ __volatile__(" ldx [%2],%2 \n"
+ " ldx [%3],%3 \n"
+ " casx [%1],%2,%3 \n"
+ " stx %3,%0 \n"
+ : "=m" (t)
+ : "r" (mem), "r" (old), "r" (new)
+ );
+ return t;
+}
+
+#elif WSIZE(64)
+
+void *
+__collector_cas_ptr (volatile void *mem, void *old, void *new)
+{
+ __asm__ __volatile__("casx [%1],%2,%0"
+ : "+r" (new)
+ : "r" (mem), "r" (old));
+ return new;
+}
+
+uint64_t
+__collector_cas_64p (volatile uint64_t *mem, uint64_t *old, uint64_t *new)
+{
+ uint64_t t;
+ __asm__ __volatile__(" ldx [%2],%2 \n"
+ " ldx [%3],%3 \n"
+ " casx [%1],%2,%3 \n"
+ " mov %3,%0 \n"
+ : "=&r" (t)
+ : "r" (mem), "r" (old), "r" (new)
+ );
+ return t;
+}
+
+#endif /* WSIZE() */
+#endif /* ARCH() */
+
+void *
+__collector_memcpy (void *s1, const void *s2, size_t n)
+{
+ char *cp1 = (char*) s1;
+ char *cp2 = (char*) s2;
+ while (n--)
+ *cp1++ = *cp2++;
+ return s1;
+}
+
+static void *
+collector_memset (void *s, int c, size_t n)
+{
+ unsigned char *s1 = s;
+ while (n--)
+ *s1++ = (unsigned char) c;
+ return s;
+}
+
+int
+__collector_strcmp (const char *s1, const char *s2)
+{
+ for (;;)
+ {
+ if (*s1 != *s2)
+ return *s1 - *s2;
+ if (*s1 == 0)
+ return 0;
+ s1++;
+ s2++;
+ }
+}
+
+int
+__collector_strncmp (const char *s1, const char *s2, size_t n)
+{
+ while (n > 0)
+ {
+ if (*s1 != *s2)
+ return *s1 - *s2;
+ if (*s1 == 0)
+ return 0;
+ s1++;
+ s2++;
+ n--;
+ }
+ return 0;
+}
+
+char *
+__collector_strstr (const char *s1, const char *s2)
+{
+ if (s2 == NULL || *s2 == 0)
+ return NULL;
+ size_t len = __collector_strlen (s2);
+ for (char c = *s2; *s1; s1++)
+ if (c == *s1 && __collector_strncmp (s1, s2, len) == 0)
+ return (char *) s1;
+ return NULL;
+}
+
+char *
+__collector_strchr (const char *str, int chr)
+{
+ if (chr == '\0')
+ return (char *) (str + __collector_strlen (str));
+ for (; *str; str++)
+ if (chr == (int) *str)
+ return (char *) str;
+ return NULL;
+}
+
+char *
+__collector_strrchr (const char *str, int chr)
+{
+ const char *p = str + __collector_strlen (str);
+ for (; p - str >= 0; p--)
+ if (chr == *p)
+ return (char *) p;
+ return NULL;
+}
+
+int
+__collector_strStartWith (const char *s1, const char *s2)
+{
+ size_t slen = __collector_strlen (s2);
+ return __collector_strncmp (s1, s2, slen);
+}
+
+size_t
+__collector_strlen (const char *s)
+{
+ int len = -1;
+ while (s[++len] != '\0')
+ ;
+ return len;
+}
+
+size_t
+__collector_strlcpy (char *dst, const char *src, size_t dstsize)
+{
+ size_t srcsize = 0;
+ size_t n = dstsize - 1;
+ char c;
+ while ((c = *src++) != 0)
+ if (srcsize++ < n)
+ *dst++ = c;
+ if (dstsize > 0)
+ *dst = '\0';
+ return srcsize;
+}
+
+size_t
+__collector_strncpy (char *dst, const char *src, size_t dstsize)
+{
+ size_t i;
+ for (i = 0; i < dstsize; i++)
+ {
+ dst[i] = src[i];
+ if (src[i] == '\0')
+ break;
+ }
+ return i;
+}
+
+char *
+__collector_strcat (char *dst, const char *src)
+{
+ size_t sz = __collector_strlen (dst);
+ for (size_t i = 0;; i++)
+ {
+ dst[sz + i] = src[i];
+ if (src[i] == '\0')
+ break;
+ }
+ return dst;
+}
+
+size_t
+__collector_strlcat (char *dst, const char *src, size_t dstsize)
+{
+ size_t sz = __collector_strlen (dst);
+ return sz + __collector_strlcpy (dst + sz, src, dstsize - sz);
+}
+
+void *
+__collector_malloc (size_t size)
+{
+ void * ptr = __collector_allocCSize (__collector_heap, size, 0);
+ return ptr;
+}
+
+void *
+__collector_calloc (size_t nelem, size_t elsize)
+{
+ size_t n = nelem * elsize;
+ void * ptr = __collector_malloc (n);
+ if (NULL == ptr)
+ return NULL;
+ collector_memset (ptr, 0, n);
+ return ptr;
+}
+
+char *
+__collector_strdup (const char * str)
+{
+ if (NULL == str)
+ return NULL;
+ size_t size = __collector_strlen (str);
+ char * dst = (char *) __collector_malloc (size + 1);
+ if (NULL == dst)
+ return NULL;
+ __collector_strncpy (dst, str, size + 1);
+ return dst;
+}
+
+#define C_FMT 1
+#define C_STR 2
+static char
+Printable[256] = {//characters should be escaped by xml: "'<>&
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, /* ................ */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* ................ */
+ 3, 3, 1, 3, 3, 3, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, /* !"#$%&'()*+,-./ */
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 3, 1, 3, /* 0123456789:;<=>? */
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, /* @ABCDEFGHIJKLMNO */
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, /* PQRSTUVWXYZ[\]^_ */
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, /* `abcdefghijklmno */
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, /* pqrstuvwxyz{|}~. */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* ................ */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* ................ */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* ................ */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* ................ */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* ................ */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* ................ */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* ................ */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 /* ................ */
+};
+static char hex[17] = "0123456789abcdef";
+static char HEX[17] = "0123456789ABCDEF";
+
+int
+__collector_xml_snprintf (char *s, size_t n, const char *format, ...)
+{
+ va_list args;
+ va_start (args, format);
+ int res = __collector_xml_vsnprintf (s, n, format, args);
+ va_end (args);
+ return res;
+}
+
+int
+__collector_xml_vsnprintf (char *s, size_t n, const char *format, va_list args)
+{
+ const char *src = format;
+ char *dst = s;
+ int cnt = 0;
+ unsigned char c;
+ while ((c = *src) != 0)
+ {
+ if (c == '%')
+ {
+ char numbuf[32];
+ int done = 0;
+ int jflag = 0;
+ int lflag = 0;
+ int zflag = 0;
+ int width = 0;
+ src++;
+ while (!done)
+ {
+ c = *src;
+ switch (c)
+ {
+ case '%':
+ {
+ if (cnt++ < n - 1)
+ *dst++ = '%';
+ if (cnt++ < n - 1)
+ *dst++ = hex[c / 16];
+ if (cnt++ < n - 1)
+ *dst++ = hex[c % 16];
+ if (cnt++ < n - 1)
+ *dst++ = '%';
+ src++;
+ done = 1;
+ break;
+ }
+ case '-':
+ {
+ if (jflag != 0)
+ done = 1;
+ else
+ {
+ jflag = 1;
+ src++;
+ }
+ break;
+ }
+ case 'l':
+ {
+ if (lflag != 0)
+ done = 1;
+ else
+ {
+ lflag = 1;
+ c = *++src;
+ if (c == 'l')
+ {
+ lflag++;
+ src++;
+ }
+ }
+ break;
+ }
+ case 'c':
+ {
+ unsigned char c1 = (unsigned char) va_arg (args, int);
+ if ((Printable[(int) c1] & C_STR) == 0)
+ {
+ if (c1 == '"')
+ {//&quot;
+ if (cnt++ < n - 1)
+ *dst++ = '&';
+ if (cnt++ < n - 1)
+ *dst++ = 'q';
+ if (cnt++ < n - 1)
+ *dst++ = 'u';
+ if (cnt++ < n - 1)
+ *dst++ = 'o';
+ if (cnt++ < n - 1)
+ *dst++ = 't';
+ if (cnt++ < n - 1)
+ *dst++ = ';';
+ }
+ else if (c1 == '\'')
+ {//&apos;
+ if (cnt++ < n - 1)
+ *dst++ = '&';
+ if (cnt++ < n - 1)
+ *dst++ = 'a';
+ if (cnt++ < n - 1)
+ *dst++ = 'p';
+ if (cnt++ < n - 1)
+ *dst++ = 'o';
+ if (cnt++ < n - 1)
+ *dst++ = 's';
+ if (cnt++ < n - 1)
+ *dst++ = ';';
+ }
+ else if (c1 == '&')
+ {//&amp;
+ if (cnt++ < n - 1)
+ *dst++ = '&';
+ if (cnt++ < n - 1)
+ *dst++ = 'a';
+ if (cnt++ < n - 1)
+ *dst++ = 'm';
+ if (cnt++ < n - 1)
+ *dst++ = 'p';
+ if (cnt++ < n - 1)
+ *dst++ = ';';
+ }
+ else if (c1 == '<')
+ {//&lt;
+ if (cnt++ < n - 1)
+ *dst++ = '&';
+ if (cnt++ < n - 1)
+ *dst++ = 'l';
+ if (cnt++ < n - 1)
+ *dst++ = 't';
+ if (cnt++ < n - 1)
+ *dst++ = ';';
+ }
+ else if (c1 == '>')
+ {//&gt;
+ if (cnt++ < n - 1)
+ *dst++ = '&';
+ if (cnt++ < n - 1)
+ *dst++ = 'g';
+ if (cnt++ < n - 1)
+ *dst++ = 't';
+ if (cnt++ < n - 1)
+ *dst++ = ';';
+ }
+ else
+ {
+ if (cnt++ < n - 1)
+ *dst++ = '%';
+ if (cnt++ < n - 1)
+ *dst++ = hex[c1 / 16];
+ if (cnt++ < n - 1)
+ *dst++ = hex[c1 % 16];
+ if (cnt++ < n - 1)
+ *dst++ = '%';
+ }
+ }
+ else if (cnt++ < n - 1)
+ *dst++ = c1;
+ src++;
+ done = 1;
+ break;
+ }
+ case 's':
+ {
+ /* Strings are always left justified */
+ char *str = va_arg (args, char*);
+ if (!str)
+ str = "<NULL>";
+ unsigned char c1;
+ while ((c1 = *str++) != 0)
+ {
+ if ((Printable[(int) c1] & C_STR) == 0)
+ {
+ if (c1 == '"')
+ {//&quot;
+ if (cnt++ < n - 1)
+ *dst++ = '&';
+ if (cnt++ < n - 1)
+ *dst++ = 'q';
+ if (cnt++ < n - 1)
+ *dst++ = 'u';
+ if (cnt++ < n - 1)
+ *dst++ = 'o';
+ if (cnt++ < n - 1)
+ *dst++ = 't';
+ if (cnt++ < n - 1)
+ *dst++ = ';';
+ }
+ else if (c1 == '\'')
+ {//&apos;
+ if (cnt++ < n - 1)
+ *dst++ = '&';
+ if (cnt++ < n - 1)
+ *dst++ = 'a';
+ if (cnt++ < n - 1)
+ *dst++ = 'p';
+ if (cnt++ < n - 1)
+ *dst++ = 'o';
+ if (cnt++ < n - 1)
+ *dst++ = 's';
+ if (cnt++ < n - 1)
+ *dst++ = ';';
+ }
+ else if (c1 == '&')
+ {//&amp;
+ if (cnt++ < n - 1)
+ *dst++ = '&';
+ if (cnt++ < n - 1)
+ *dst++ = 'a';
+ if (cnt++ < n - 1)
+ *dst++ = 'm';
+ if (cnt++ < n - 1)
+ *dst++ = 'p';
+ if (cnt++ < n - 1)
+ *dst++ = ';';
+ }
+ else if (c1 == '<')
+ {//&lt;
+ if (cnt++ < n - 1)
+ *dst++ = '&';
+ if (cnt++ < n - 1)
+ *dst++ = 'l';
+ if (cnt++ < n - 1)
+ *dst++ = 't';
+ if (cnt++ < n - 1)
+ *dst++ = ';';
+ }
+ else if (c1 == '>')
+ {//&gt;
+ if (cnt++ < n - 1)
+ *dst++ = '&';
+ if (cnt++ < n - 1)
+ *dst++ = 'g';
+ if (cnt++ < n - 1)
+ *dst++ = 't';
+ if (cnt++ < n - 1)
+ *dst++ = ';';
+ }
+ else
+ {
+ if (cnt++ < n - 1)
+ *dst++ = '%';
+ if (cnt++ < n - 1)
+ *dst++ = hex[c1 / 16];
+ if (cnt++ < n - 1)
+ *dst++ = hex[c1 % 16];
+ if (cnt++ < n - 1)
+ *dst++ = '%';
+ }
+ }
+ else if (cnt++ < n - 1)
+ *dst++ = c1;
+ width--;
+ }
+ while (width > 0)
+ {
+ if (cnt++ < n - 1)
+ *dst++ = ' ';
+ width--;
+ }
+ src++;
+ done = 1;
+ break;
+ }
+ case 'i':
+ case 'd':
+ case 'o':
+ case 'p':
+ case 'u':
+ case 'x':
+ case 'X':
+ {
+ int base = 10;
+ int uflag = 0;
+ int sflag = 0;
+ if (c == 'o')
+ {
+ uflag = 1;
+ base = 8;
+ }
+ else if (c == 'u')
+ uflag = 1;
+ else if (c == 'p')
+ {
+ lflag = 1;
+ uflag = 1;
+ base = 16;
+ }
+ else if (c == 'x' || c == 'X')
+ {
+ uflag = 1;
+ base = 16;
+ }
+ long long argll = 0LL;
+ if (lflag == 0)
+ {
+ if (uflag)
+ argll = va_arg (args, unsigned int);
+ else
+ argll = va_arg (args, int);
+ }
+ else if (lflag == 1)
+ {
+ if (uflag)
+ argll = va_arg (args, unsigned long);
+ else
+ argll = va_arg (args, long);
+ }
+ else if (lflag == 2)
+ argll = va_arg (args, long long);
+ unsigned long long argllu = 0ULL;
+ if (uflag || argll >= 0)
+ argllu = argll;
+ else
+ {
+ sflag = 1;
+ argllu = -argll;
+ }
+ int idx = sizeof (numbuf);
+ do
+ {
+ numbuf[--idx] = (c == 'X' ? HEX[argllu % base] : hex[argllu % base]);
+ argllu = argllu / base;
+ }
+ while (argllu != 0)
+ ;
+ if (sflag)
+ {
+ if (jflag || zflag)
+ {
+ if (cnt++ < n - 1)
+ *dst++ = '-';
+ }
+ else
+ numbuf[--idx] = '-';
+ }
+
+ if (jflag)
+ {
+ while (idx < sizeof (numbuf) && width > 0)
+ {
+ if (cnt++ < n - 1)
+ *dst++ = numbuf[idx];
+ idx++;
+ width--;
+ }
+ zflag = 0;
+ }
+
+ while (width > sizeof (numbuf) - idx)
+ {
+ if (cnt++ < n - 1)
+ *dst++ = zflag ? '0' : ' ';
+ width--;
+ }
+ while (idx != sizeof (numbuf))
+ {
+ if (cnt++ < n - 1)
+ *dst++ = numbuf[idx];
+ idx++;
+ }
+ src++;
+ done = 1;
+ break;
+ }
+ case '0':
+ zflag = 1;
+ case '1': case '2': case '3': case '4': case '5':
+ case '6': case '7': case '8': case '9':
+ {
+ while (c >= '0' && c <= '9')
+ {
+ width = width * 10 + (c - '0');
+ c = *++src;
+ }
+ break;
+ }
+ default:
+ done = 1;
+ break;
+ }
+ }
+ }
+ else if ((Printable[(int) c] & C_FMT) == 0)
+ {
+ if (cnt++ < n - 1)
+ *dst++ = '%';
+ if (cnt++ < n - 1)
+ *dst++ = hex[c / 16];
+ if (cnt++ < n - 1)
+ *dst++ = hex[c % 16];
+ if (cnt++ < n - 1)
+ *dst++ = '%';
+ src++;
+ }
+ else
+ {
+ if (cnt++ < n - 1)
+ *dst++ = c;
+ src++;
+ }
+ }
+
+ if (cnt < n - 1)
+ s[cnt] = '\0';
+ else
+ s[n - 1] = '\0';
+
+ return cnt;
+}
+
+/*
+ * Functions to be called directly from libc.so
+ */
+#if ARCH(Intel) /* intel-Linux */
+/*
+ * The CPUIDinfo/__collector_cpuid() code is old,
+ * incorrect, and complicated. It returns the apicid
+ * rather than the processor number.
+ *
+ * Unfortunately, the higher-level sched_getcpu() function,
+ * which we use on SPARC-Linux, is not available on Oracle
+ * Linux 5. So we have to test for its existence.
+ */
+
+/* a pointer to sched_getcpu(), in case we find it */
+typedef int (*sched_getcpu_ptr_t)(void);
+sched_getcpu_ptr_t sched_getcpu_ptr;
+static int need_warning = 0;
+
+/* the old, low-level code */
+static int useLeafB = 0;
+
+/* access to the CPUID instruction on Intel/AMD */
+typedef struct
+{
+ uint32_t eax, ebx, ecx, edx;
+} CPUIDinfo;
+
+/**
+ * This function returns the result of the "cpuid" instruction
+ */
+static __attribute__ ((always_inline)) inline void
+__collector_cpuid (CPUIDinfo* info)
+{
+ uint32_t ebx = info->ebx, ecx = info->ecx, edx = info->edx, eax = info->eax;
+ __asm__ ("cpuid" : "=b" (ebx), "=c" (ecx), "=d" (edx), "=a" (eax) : "a" (eax));
+ info->eax = eax;
+ info->ebx = ebx;
+ info->ecx = ecx;
+ info->edx = edx;
+}
+
+static void
+getcpuid_init ()
+{
+ CPUIDinfo info;
+ info.eax = 0; /* max input value for CPUID */
+ __collector_cpuid (&info);
+
+ if (info.eax >= 0xb)
+ {
+ info.eax = 0xb;
+ info.ecx = 0;
+ __collector_cpuid (&info);
+ useLeafB = info.ebx != 0;
+ }
+
+ /* indicate that we need a warning */
+ /* (need to wait until log mechanism has been initialized) */
+ need_warning = 1;
+}
+
+static uint32_t
+getcpuid ()
+{
+ /* if we found sched_getcpu(), use it */
+ if (sched_getcpu_ptr)
+ return (*sched_getcpu_ptr)();
+
+ /* otherwise, check if we need warning */
+ if (need_warning)
+ {
+ if (useLeafB)
+ (void) __collector_log_write ("<event kind=\"%s\" id=\"%d\">x2APIC</event>\n",
+ SP_JCMD_CWARN, COL_WARN_LINUX_X86_APICID);
+ else
+ (void) __collector_log_write ("<event kind=\"%s\" id=\"%d\">APIC</event>\n",
+ SP_JCMD_CWARN, COL_WARN_LINUX_X86_APICID);
+ need_warning = 0;
+ }
+
+ /* and use the old, low-level code */
+ CPUIDinfo info;
+ if (useLeafB)
+ {
+ info.eax = 0xb;
+ info.ecx = 0;
+ __collector_cpuid (&info);
+ return info.edx; /* x2APIC ID */
+ }
+ else
+ {
+ info.eax = 0x1;
+ info.ecx = 0;
+ __collector_cpuid (&info);
+ return info.ebx >> 24; /* APIC ID */
+ }
+}
+
+#else /* sparc-Linux */
+
+/*
+ * EUGENE
+ * How should sched_getcpu() be prototyped? Like this?
+ * #include <sched.h>
+ * Or like this?
+ * #define _GNU_SOURCE
+ * #include <utmpx.h>
+ * Or just prototype this function explicitly without bothering with include files.
+ */
+int sched_getcpu ();
+
+static int
+getcpuid ()
+{
+ return sched_getcpu ();
+}
+#endif
+
+/* if ever retries time-out, we will stop allowing them */
+static int exhausted_retries = 0;
+
+int
+__collector_open (const char *path, int oflag, ...)
+{
+ int fd;
+ mode_t mode = 0;
+
+ hrtime_t t_timeout = __collector_gethrtime () + 5 * ((hrtime_t) NANOSEC);
+ int nretries = 0;
+ long long delay = 100; /* start at some small, arbitrary value */
+
+ /* get optional mode argument if it's expected/required */
+ if (oflag | O_CREAT)
+ {
+ va_list ap;
+ va_start (ap, oflag);
+ mode = (mode_t) va_arg (ap, mode_t);
+ va_end (ap);
+ }
+
+ /* retry upon failure */
+ while ((fd = CALL_UTIL (open_bare)(path, oflag, mode)) < 0)
+ {
+ if (exhausted_retries)
+ break;
+
+ /* The particular condition we're willing to retry is if
+ * too many file descriptors were in use. The errno should
+ * be EMFILE, but apparently and mysteriously it can also be
+ * and often is ENOENT.
+ */
+ if ((errno != EMFILE) && (errno != ENOENT))
+ break;
+ if (__collector_gethrtime () > t_timeout)
+ {
+ exhausted_retries = 1;
+ break;
+ }
+
+ /* Oddly, if I replace this spin wait with
+ * - a usleep() call or
+ * - a loop on gethrtime() calls
+ * for roughly the same length of time, retries aren't very effective. */
+ int ispin;
+ double xdummy = 0.5;
+ for (ispin = 0; ispin < delay; ispin++)
+ xdummy = 0.5 * (xdummy + 1.);
+ if (xdummy < 0.1)
+ /* should never happen, but we check so the loop won't be optimized away */
+ break;
+ delay *= 2;
+ if (delay > 100000000)
+ delay = 100000000; /* cap at some large, arbitrary value */
+ nretries++;
+ }
+ return fd;
+}
+
+int
+__collector_util_init ()
+{
+ int oldos = 0;
+
+ /* Linux requires RTLD_LAZY, Solaris can do just RTLD_NOLOAD */
+ void *libc = dlopen (SYS_LIBC_NAME, RTLD_LAZY | RTLD_NOLOAD);
+ if (libc == NULL)
+ libc = dlopen (SYS_LIBC_NAME, RTLD_NOW | RTLD_LOCAL);
+ if (libc == NULL)
+ {
+ /* libcollector will subsequently abort, as all the pointers in the vector are NULL */
+#if 0
+ /* SP_COLLECTOR_TRACELEVEL is not yet set, so no Tprintf */
+ fprintf (stderr, "__collector_util_init: dlopen(%s) failed: %s\n", SYS_LIBC_NAME, dlerror ());
+ return COL_ERROR_UTIL_INIT;
+#endif
+ abort ();
+ }
+
+ void *ptr = dlsym (libc, "fprintf");
+ if (ptr)
+ __collector_util_funcs.fprintf = (int(*)(FILE *, const char *, ...))ptr;
+ else
+ {
+ // We can't write any error messages without a libc reference
+#if 0
+ fprintf (stderr, "__collector_util_init: COLERROR_UTIL_INIT fprintf: %s\n", dlerror ());
+ return COL_ERROR_UTIL_INIT;
+#endif
+ abort ();
+ }
+ int err = 0;
+
+ ptr = dlsym (libc, "mmap");
+ if (ptr)
+ __collector_util_funcs.mmap = (void*(*)(void *, size_t, int, int, int, off_t))ptr;
+ else
+ {
+ CALL_UTIL (fprintf)(stderr, "collector_util_init COL_ERROR_UTIL_INIT mmap: %s\n", dlerror ());
+ err = COL_ERROR_UTIL_INIT;
+ }
+
+ /* mmap64 is only in 32-bits; this call goes to mmap in 64-bits */
+ /* internal calls for mapping in libcollector call mmap64 */
+ ptr = dlsym (libc, "mmap64");
+ if (ptr)
+ __collector_util_funcs.mmap64 = (void*(*)(void *, size_t, int, int, int, off_t))ptr;
+ else
+ __collector_util_funcs.mmap64 = __collector_util_funcs.mmap;
+
+ ptr = dlsym (libc, "munmap");
+ if (ptr)
+ __collector_util_funcs.munmap = (int(*)())ptr;
+ else
+ {
+ CALL_UTIL (fprintf)(stderr, "collector_util_init COL_ERROR_UTIL_INIT munmap: %s\n", dlerror ());
+ err = COL_ERROR_UTIL_INIT;
+ }
+
+ ptr = dlsym (libc, "close");
+ if (ptr)
+ __collector_util_funcs.close = (int(*)())ptr;
+ else
+ {
+ CALL_UTIL (fprintf)(stderr, "collector_util_init COL_ERROR_UTIL_INIT close: %s\n", dlerror ());
+ err = COL_ERROR_UTIL_INIT;
+ }
+
+ ptr = dlsym (libc, "open");
+ if (ptr)
+ __collector_util_funcs.open = (int(*)(const char *path, int oflag, ...))ptr;
+ else
+ {
+ CALL_UTIL (fprintf)(stderr, "collector_util_init COL_ERROR_UTIL_INIT open: %s\n", dlerror ());
+ err = COL_ERROR_UTIL_INIT;
+ }
+
+#if ARCH(Intel) && WSIZE(32)
+ ptr = dlvsym (libc, "open64", "GLIBC_2.2"); // it is in /lib/libpthread.so.0
+ if (ptr)
+ __collector_util_funcs.open_bare = (int(*)(const char *path, int oflag, ...))ptr;
+ else
+ {
+ Tprintf (DBG_LT0, "libcol_util: WARNING: dlvsym for %s@%s failed. Using dlsym() instead.", "open64", "GLIBC_2.2");
+#endif /* ARCH(Intel) && WSIZE(32) */
+ ptr = dlsym (libc, "open64");
+ if (ptr)
+ __collector_util_funcs.open_bare = (int(*)(const char *path, int oflag, ...))ptr;
+ else
+ __collector_util_funcs.open_bare = __collector_util_funcs.open;
+#if ARCH(Intel) && WSIZE(32)
+ }
+#endif /* ARCH(Intel) && WSIZE(32) */
+
+ ptr = dlsym (libc, "close");
+ if (ptr)
+ __collector_util_funcs.close = (int(*)())ptr;
+ else
+ {
+ CALL_UTIL (fprintf)(stderr, "collector_util_init COL_ERROR_UTIL_INIT close: %s\n", dlerror ());
+ err = COL_ERROR_UTIL_INIT;
+ }
+
+ ptr = dlsym (libc, "read");
+ if (ptr)
+ __collector_util_funcs.read = (ssize_t (*)())ptr;
+ else
+ {
+ CALL_UTIL (fprintf)(stderr, "collector_util_init COL_ERROR_UTIL_INIT read: %s\n", dlerror ());
+ err = COL_ERROR_UTIL_INIT;
+ }
+
+ ptr = dlsym (libc, "write");
+ if (ptr)
+ __collector_util_funcs.write = (ssize_t (*)())ptr;
+ else
+ {
+ CALL_UTIL (fprintf)(stderr, "collector_util_init COL_ERROR_UTIL_INIT write: %s\n", dlerror ());
+ err = COL_ERROR_UTIL_INIT;
+ }
+
+#if ARCH(Intel) && WSIZE(32)
+ ptr = dlvsym (libc, "pwrite", "GLIBC_2.2"); // it is in /lib/libpthread.so.0
+ if (ptr)
+ __collector_util_funcs.pwrite = (ssize_t (*)())ptr;
+ else
+ {
+ Tprintf (DBG_LT0, "libcol_util: WARNING: dlvsym for %s@%s failed. Using dlsym() instead.", "pwrite", "GLIBC_2.2");
+#endif /* ARCH(Intel) && WSIZE(32) */
+ ptr = dlsym (libc, "pwrite");
+ if (ptr)
+ __collector_util_funcs.pwrite = (ssize_t (*)())ptr;
+ else
+ {
+ CALL_UTIL (fprintf)(stderr, "collector_util_init COL_ERROR_UTIL_INIT pwrite: %s\n", dlerror ());
+ err = COL_ERROR_UTIL_INIT;
+ }
+#if ARCH(Intel) && WSIZE(32)
+ }
+#endif
+
+#if ARCH(Intel) && WSIZE(32)
+ ptr = dlvsym (libc, "pwrite64", "GLIBC_2.2"); // it is in /lib/libpthread.so.0
+ if (ptr)
+ __collector_util_funcs.pwrite64 = (ssize_t (*)())ptr;
+ else
+ {
+ Tprintf (DBG_LT0, "libcol_util: WARNING: dlvsym for %s@%s failed. Using dlsym() instead.", "pwrite64", "GLIBC_2.2");
+#endif /* ARCH(Intel) && WSIZE(32) */
+ ptr = dlsym (libc, "pwrite64");
+ if (ptr)
+ __collector_util_funcs.pwrite64 = (ssize_t (*)())ptr;
+ else
+ __collector_util_funcs.pwrite64 = __collector_util_funcs.pwrite;
+#if ARCH(Intel) && WSIZE(32)
+ }
+#endif /* ARCH(Intel) && WSIZE(32) */
+
+ ptr = dlsym (libc, "lseek");
+ if (ptr)
+ __collector_util_funcs.lseek = (off_t (*)())ptr;
+ else
+ {
+ CALL_UTIL (fprintf)(stderr, "collector_util_init COL_ERROR_UTIL_INIT lseek: %s\n", dlerror ());
+ err = COL_ERROR_UTIL_INIT;
+ }
+
+ ptr = dlsym (libc, "access");
+ if (ptr)
+ __collector_util_funcs.access = (int(*)())ptr;
+ else
+ {
+ CALL_UTIL (fprintf)(stderr, "collector_util_init COL_ERROR_UTIL_INIT access: %s\n", dlerror ());
+ err = COL_ERROR_UTIL_INIT;
+ }
+
+ ptr = dlsym (libc, "mkdir");
+ if (ptr)
+ __collector_util_funcs.mkdir = (int(*)())ptr;
+ else
+ {
+ CALL_UTIL (fprintf)(stderr, "collector_util_init COL_ERROR_UTIL_INIT mkdir: %s\n", dlerror ());
+ err = COL_ERROR_UTIL_INIT;
+ }
+
+ ptr = dlsym (libc, "opendir");
+ if (ptr)
+ __collector_util_funcs.opendir = (DIR * (*)())ptr;
+ else
+ {
+ CALL_UTIL (fprintf)(stderr, "collector_util_init COL_ERROR_UTIL_INIT opendir: %s\n", dlerror ());
+ err = COL_ERROR_UTIL_INIT;
+ }
+
+ ptr = dlsym (libc, "closedir");
+ if (ptr)
+ __collector_util_funcs.closedir = (int(*)())ptr;
+ else
+ {
+ CALL_UTIL (fprintf)(stderr, "collector_util_init COL_ERROR_UTIL_INIT closedir: %s\n", dlerror ());
+ err = COL_ERROR_UTIL_INIT;
+ }
+
+ ptr = dlsym (libc, "execv");
+ if (ptr)
+ __collector_util_funcs.execv = (int(*)())ptr;
+ else
+ {
+ CALL_UTIL (fprintf)(stderr, "collector_util_init COL_ERROR_UTIL_INIT execv: %s\n", dlerror ());
+ err = COL_ERROR_UTIL_INIT;
+ }
+
+ ptr = dlsym (libc, "exit");
+ if (ptr)
+ __collector_util_funcs.exit = (void(*)())ptr;
+ else
+ {
+ CALL_UTIL (fprintf)(stderr, "collector_util_init COL_ERROR_UTIL_INIT exit: %s\n", dlerror ());
+ err = COL_ERROR_UTIL_INIT;
+ }
+
+ ptr = dlsym (libc, "vfork");
+ if (ptr)
+ __collector_util_funcs.vfork = (pid_t (*)())ptr;
+ else
+ {
+ CALL_UTIL (fprintf)(stderr, "collector_util_init COL_ERROR_UTIL_INIT vfork: %s\n", dlerror ());
+ err = COL_ERROR_UTIL_INIT;
+ }
+
+ ptr = dlsym (libc, "waitpid");
+ if (ptr)
+ __collector_util_funcs.waitpid = (pid_t (*)())ptr;
+ else
+ {
+ CALL_UTIL (fprintf)(stderr, "collector_util_init COL_ERROR_UTIL_INIT waitpid: %s\n", dlerror ());
+ err = COL_ERROR_UTIL_INIT;
+ }
+
+ int (*__collector_getcpuid)() = (int(*)()) & getcpuid;
+#if ARCH(Intel)
+ /* if sched_getcpu() not found, init our getcpuid() */
+ sched_getcpu_ptr = (sched_getcpu_ptr_t) dlsym (libc, "sched_getcpu");
+ if (sched_getcpu_ptr == NULL)
+ getcpuid_init ();
+#endif
+ __collector_util_funcs.getcpuid = __collector_getcpuid;
+ __collector_util_funcs.memset = collector_memset;
+
+ ptr = dlsym (libc, "malloc");
+ if (ptr)
+ __collector_util_funcs.malloc = (void *(*)(size_t))ptr;
+ else
+ {
+ CALL_UTIL (fprintf)(stderr, "collector_util_init COL_ERROR_UTIL_INIT malloc: %s\n", dlerror ());
+ err = COL_ERROR_UTIL_INIT;
+ }
+
+ ptr = dlsym (libc, "putenv");
+ if (ptr)
+ __collector_util_funcs.putenv = (int(*)())ptr;
+ else
+ {
+ CALL_UTIL (fprintf)(stderr, "collector_util_init COL_ERROR_UTIL_INIT putenv: %s\n", dlerror ());
+ err = COL_ERROR_UTIL_INIT;
+ }
+
+ ptr = dlsym (libc, "getenv");
+ if (ptr)
+ __collector_util_funcs.getenv = (char*(*)())ptr;
+ else
+ {
+ CALL_UTIL (fprintf)(stderr, "collector_util_init COL_ERROR_UTIL_INIT getenv: %s\n", dlerror ());
+ err = COL_ERROR_UTIL_INIT;
+ }
+
+ ptr = dlsym (libc, "time");
+ if (ptr)
+ __collector_util_funcs.time = (time_t (*)())ptr;
+ else
+ {
+ CALL_UTIL (fprintf)(stderr, "collector_util_init COL_ERROR_UTIL_INIT time: %s\n", dlerror ());
+ err = COL_ERROR_UTIL_INIT;
+ }
+
+ ptr = dlsym (libc, "mktime");
+ if (ptr)
+ __collector_util_funcs.mktime = (time_t (*)())ptr;
+ else
+ {
+ CALL_UTIL (fprintf)(stderr, "collector_util_init COL_ERROR_UTIL_INIT mktime: %s\n", dlerror ());
+ err = COL_ERROR_UTIL_INIT;
+ }
+
+ __collector_util_funcs.strcmp = __collector_strcmp;
+ __collector_util_funcs.strncmp = __collector_strncmp;
+ __collector_util_funcs.strncpy = __collector_strncpy;
+ __collector_util_funcs.strstr = __collector_strstr;
+
+ ptr = dlsym (libc, "gmtime_r");
+ if (ptr)
+ __collector_util_funcs.gmtime_r = (struct tm * (*)())ptr;
+ else
+ {
+ CALL_UTIL (fprintf)(stderr, "collector_util_init COL_ERROR_UTIL_INIT gmtime_r: %s\n", dlerror ());
+ err = COL_ERROR_UTIL_INIT;
+ }
+
+ ptr = dlsym (libc, "strtol");
+ if (ptr)
+ __collector_util_funcs.strtol = (long (*)())ptr;
+ else
+ {
+ CALL_UTIL (fprintf)(stderr, "collector_util_init COL_ERROR_UTIL_INIT strtol: %s\n", dlerror ());
+ err = COL_ERROR_UTIL_INIT;
+ }
+
+ ptr = dlsym (libc, "strtoll");
+ if (ptr)
+ __collector_util_funcs.strtoll = (long long (*)())ptr;
+ else
+ {
+ CALL_UTIL (fprintf)(stderr, "collector_util_init COL_ERROR_UTIL_INIT strtoll: %s\n", dlerror ());
+ err = COL_ERROR_UTIL_INIT;
+ }
+
+ __collector_util_funcs.strchr = __collector_strchr;
+ __collector_util_funcs.strrchr = __collector_strrchr;
+
+ ptr = dlsym (libc, "setenv");
+ if (ptr)
+ __collector_util_funcs.setenv = (int(*)())ptr;
+ else
+ {
+ CALL_UTIL (fprintf)(stderr, "collector_util_init COL_ERROR_UTIL_INIT setenv: %s\n", dlerror ());
+ err = COL_ERROR_UTIL_INIT;
+ }
+
+ ptr = dlsym (libc, "unsetenv");
+ if (ptr)
+ __collector_util_funcs.unsetenv = (int(*)())ptr;
+ else
+ {
+ CALL_UTIL (fprintf)(stderr, "collector_util_init COL_ERROR_UTIL_INIT unsetenv: %s\n", dlerror ());
+ err = COL_ERROR_UTIL_INIT;
+ }
+
+ ptr = dlsym (libc, "atof");
+ if (ptr)
+ __collector_util_funcs.atof = (double (*)())ptr;
+ else
+ {
+ CALL_UTIL (fprintf)(stderr, "collector_util_init COL_ERROR_UTIL_INIT atof: %s\n", dlerror ());
+ err = COL_ERROR_UTIL_INIT;
+ }
+
+ ptr = dlsym (libc, "sysinfo");
+ if (ptr)
+ __collector_util_funcs.sysinfo = (long (*)())ptr;
+ else
+ {
+ CALL_UTIL (fprintf)(stderr, "collector_util_init COL_ERROR_UTIL_INIT sysinfo: %s\n", dlerror ());
+ err = COL_ERROR_UTIL_INIT;
+ }
+
+ ptr = dlsym (libc, "clearenv");
+ if (ptr)
+ __collector_util_funcs.clearenv = (int(*)())ptr;
+ else
+ {
+ /* suppress warning on S10 or earlier Solaris */
+ if (oldos == 0)
+ CALL_UTIL (fprintf)(stderr, "collector_util_init COL_ERROR_UTIL_INIT clearenv: %s\n", dlerror ());
+ /* err = COL_ERROR_UTIL_INIT; */
+ /* don't treat this as fatal, so that S10 could work */
+ }
+
+#if ARCH(Intel) && WSIZE(32)
+ ptr = dlvsym (libc, "fopen", "GLIBC_2.1");
+ if (ptr)
+ __collector_util_funcs.fopen = (FILE * (*)())ptr;
+ else
+ {
+ Tprintf (DBG_LT0, "libcol_util: WARNING: dlvsym for %s@%s failed. Using dlsym() instead.", "fopen", "GLIBC_2.1");
+#endif /* ARCH(Intel) && WSIZE(32) */
+ ptr = dlsym (libc, "fopen");
+ if (ptr)
+ __collector_util_funcs.fopen = (FILE * (*)())ptr;
+ else
+ {
+ CALL_UTIL (fprintf)(stderr, "collector_util_init COL_ERROR_UTIL_INIT fopen: %s\n", dlerror ());
+ err = COL_ERROR_UTIL_INIT;
+ }
+#if ARCH(Intel) && WSIZE(32)
+ }
+#endif
+
+ ptr = dlsym (libc, "popen");
+ if (ptr)
+ __collector_util_funcs.popen = (FILE * (*)())ptr;
+ else
+ {
+ CALL_UTIL (fprintf)(stderr, "collector_util_init COL_ERROR_UTIL_INIT popen: %s\n", dlerror ());
+ err = COL_ERROR_UTIL_INIT;
+ }
+
+#if ARCH(Intel) && WSIZE(32)
+ ptr = dlvsym (libc, "fclose", "GLIBC_2.1");
+ if (ptr)
+ __collector_util_funcs.fclose = (int(*)())ptr;
+ else
+ {
+ Tprintf (DBG_LT0, "libcol_util: WARNING: dlvsym for %s@%s failed. Using dlsym() instead.", "fclose", "GLIBC_2.1");
+#endif /* ARCH(Intel) && WSIZE(32) */
+ ptr = dlsym (libc, "fclose");
+ if (ptr)
+ __collector_util_funcs.fclose = (int(*)())ptr;
+ else
+ {
+ CALL_UTIL (fprintf)(stderr, "collector_util_init COL_ERROR_UTIL_INIT fclose: %s\n", dlerror ());
+ err = COL_ERROR_UTIL_INIT;
+ }
+#if ARCH(Intel) && WSIZE(32)
+ }
+#endif
+
+ ptr = dlsym (libc, "pclose");
+ if (ptr)
+ __collector_util_funcs.pclose = (int(*)())ptr;
+ else
+ {
+ CALL_UTIL (fprintf)(stderr, "collector_util_init COL_ERROR_UTIL_INIT pclose: %s\n", dlerror ());
+ err = COL_ERROR_UTIL_INIT;
+ }
+
+ ptr = dlsym (libc, "fgets");
+ if (ptr)
+ __collector_util_funcs.fgets = (char*(*)())ptr;
+ else
+ {
+ CALL_UTIL (fprintf)(stderr, "collector_util_init COL_ERROR_UTIL_INIT fgets: %s\n", dlerror ());
+ err = COL_ERROR_UTIL_INIT;
+ }
+
+ ptr = dlsym (libc, "sscanf");
+ if (ptr)
+ __collector_sscanfp = (int(*)(const char *restrict s, const char *restrict fmt, ...))ptr;
+ else
+ {
+ CALL_UTIL (fprintf)(stderr, "collector_util_init COL_ERROR_UTIL_INIT sscanf: %s\n", dlerror ());
+ err = COL_ERROR_UTIL_INIT;
+ }
+
+ ptr = dlsym (libc, "snprintf");
+ if (ptr)
+ __collector_util_funcs.snprintf = (int(*)(char *, size_t, const char *, ...))ptr;
+ else
+ {
+ CALL_UTIL (fprintf)(stderr, "collector_util_init COL_ERROR_UTIL_INIT snprintf: %s\n", dlerror ());
+ err = COL_ERROR_UTIL_INIT;
+ }
+
+ ptr = dlsym (libc, "vsnprintf");
+ if (ptr)
+ __collector_util_funcs.vsnprintf = (int(*)())ptr;
+ else
+ {
+ CALL_UTIL (fprintf)(stderr, "collector_util_init COL_ERROR_UTIL_INIT vsnprintf: %s\n", dlerror ());
+ err = COL_ERROR_UTIL_INIT;
+ }
+
+ ptr = dlsym (libc, "atoi");
+ if (ptr)
+ __collector_util_funcs.atoi = (int(*)())ptr;
+ else
+ {
+ CALL_UTIL (fprintf)(stderr, "collector_util_init COL_ERROR_UTIL_INIT atoi: %s\n", dlerror ());
+ err = COL_ERROR_UTIL_INIT;
+ }
+
+ ptr = dlsym (libc, "calloc");
+ if (ptr)
+ __collector_util_funcs.calloc = (void*(*)())ptr;
+ else
+ {
+ CALL_UTIL (fprintf)(stderr, "collector_util_init COL_ERROR_UTIL_INIT calloc: %s\n", dlerror ());
+ err = COL_ERROR_UTIL_INIT;
+ }
+
+ ptr = dlsym (libc, "free");
+ if (ptr)
+ {
+ __collector_util_funcs.free = (void(*)())ptr;
+ }
+ else
+ {
+ CALL_UTIL (fprintf)(stderr, "collector_util_init COL_ERROR_UTIL_INIT free: %s\n", dlerror ());
+ err = COL_ERROR_UTIL_INIT;
+ }
+
+ ptr = dlsym (libc, "strdup");
+ if (ptr)
+ __collector_util_funcs.libc_strdup = (char*(*)())ptr;
+ else
+ {
+ CALL_UTIL (fprintf)(stderr, "collector_util_init COL_ERROR_UTIL_INIT strdup: %s\n", dlerror ());
+ err = COL_ERROR_UTIL_INIT;
+ }
+
+ __collector_util_funcs.strlen = __collector_strlen;
+ __collector_util_funcs.strlcat = __collector_strlcat;
+ __collector_util_funcs.strlcpy = __collector_strlcpy;
+
+ ptr = dlsym (libc, "strerror");
+ if (ptr)
+ __collector_util_funcs.strerror = (char*(*)())ptr;
+ else
+ {
+ CALL_UTIL (fprintf)(stderr, "collector_util_init COL_ERROR_UTIL_INIT strerror: %s\n", dlerror ());
+ err = COL_ERROR_UTIL_INIT;
+ }
+ ptr = dlsym (libc, "strerror_r");
+ if (ptr)
+ __collector_util_funcs.strerror_r = (int(*)())ptr;
+ else
+ {
+ CALL_UTIL (fprintf)(stderr, "collector_util_init COL_ERROR_UTIL_INIT strerror_r: %s\n", dlerror ());
+ err = COL_ERROR_UTIL_INIT;
+ }
+ ptr = dlsym (libc, "strspn");
+ if (ptr)
+ __collector_util_funcs.strspn = (size_t (*)())ptr;
+ else
+ {
+ CALL_UTIL (fprintf)(stderr, "collector_util_init COL_ERROR_UTIL_INIT strspn: %s\n", dlerror ());
+ err = COL_ERROR_UTIL_INIT;
+ }
+
+ ptr = dlsym (libc, "strtoul");
+ if (ptr)
+ __collector_util_funcs.strtoul = (unsigned long int(*)())ptr;
+ else
+ {
+ CALL_UTIL (fprintf)(stderr, "collector_util_init COL_ERROR_UTIL_INIT strtoul: %s\n", dlerror ());
+ err = COL_ERROR_UTIL_INIT;
+ }
+
+ ptr = dlsym (libc, "strtoull");
+ if (ptr)
+ __collector_util_funcs.strtoull = (unsigned long long int(*)())ptr;
+ else
+ {
+ CALL_UTIL (fprintf)(stderr, "collector_util_init COL_ERROR_UTIL_INIT strtoull: %s\n", dlerror ());
+ err = COL_ERROR_UTIL_INIT;
+ }
+
+ ptr = dlsym (libc, "fcntl");
+ if (ptr)
+ __collector_util_funcs.fcntl = (int(*)(int, int, ...))ptr;
+ else
+ {
+ CALL_UTIL (fprintf)(stderr, "collector_util_init COL_ERROR_UTIL_INIT fcntl: %s\n", dlerror ());
+ err = COL_ERROR_UTIL_INIT;
+ }
+
+ ptr = dlsym (libc, "ioctl");
+ if (ptr)
+ __collector_util_funcs.ioctl = (int(*)(int, int, ...))ptr;
+ else
+ {
+ CALL_UTIL (fprintf)(stderr, "collector_util_init COL_ERROR_UTIL_INIT ioctl: %s\n", dlerror ());
+ err = COL_ERROR_UTIL_INIT;
+ }
+
+ ptr = dlsym (libc, "symlink");
+ if (ptr)
+ __collector_util_funcs.symlink = (int(*)(const char*, const char*))ptr;
+ else
+ {
+ CALL_UTIL (fprintf)(stderr, "collector_util_init COL_ERROR_UTIL_INIT symlink: %s\n", dlerror ());
+ err = COL_ERROR_UTIL_INIT;
+ }
+
+ ptr = dlsym (libc, "syscall");
+ if (ptr)
+ __collector_util_funcs.syscall = (int(*)(int, ...))ptr;
+ else
+ {
+ CALL_UTIL (fprintf)(stderr, "collector_util_init COL_ERROR_UTIL_INIT syscall: %s\n", dlerror ());
+ err = COL_ERROR_UTIL_INIT;
+ }
+
+ ptr = dlsym (libc, "sysconf");
+ if (ptr)
+ __collector_util_funcs.sysconf = (long(*)())ptr;
+ else
+ {
+ CALL_UTIL (fprintf)(stderr, "collector_util_init COL_ERROR_UTIL_INIT sysconf: %s\n", dlerror ());
+ err = COL_ERROR_UTIL_INIT;
+ }
+
+ ptr = dlsym (libc, "sigfillset");
+ if (ptr)
+ __collector_util_funcs.sigfillset = (int(*)())ptr;
+ else
+ {
+ CALL_UTIL (fprintf)(stderr, "collector_util_init COL_ERROR_UTIL_INIT sigfillset: %s\n", dlerror ());
+ err = COL_ERROR_UTIL_INIT;
+ }
+
+ ptr = dlsym (libc, "sigprocmask");
+ if (ptr)
+ __collector_util_funcs.sigprocmask = (int(*)())ptr;
+ else
+ {
+ CALL_UTIL (fprintf)(stderr, "collector_util_init COL_ERROR_UTIL_INIT sigprocmask: %s\n", dlerror ());
+ err = COL_ERROR_UTIL_INIT;
+ }
+
+ return err;
+}
diff --git a/gprofng/libcollector/libcol_util.h b/gprofng/libcollector/libcol_util.h
new file mode 100644
index 00000000000..4384d47df5c
--- /dev/null
+++ b/gprofng/libcollector/libcol_util.h
@@ -0,0 +1,321 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _LIBCOL_UTIL_H
+#define _LIBCOL_UTIL_H
+
+#include <stdarg.h>
+#include <pthread.h>
+#include <signal.h>
+
+// LIBCOLLECTOR NOT I18N
+#define NTXT(x) x
+#define STXT(x) x
+
+extern int __collector_tracelevel;
+
+/* Initialization function */
+extern int __collector_util_init();
+extern void __collector_libkstat_funcs_init();
+extern void __collector_libscf_funcs_init();
+
+/* ------- functions from libcol_util.c ----------------- */
+extern void * __collector_memcpy (void *s1, const void *s2, size_t n);
+extern int (*__collector_sscanfp)(const char *restrict s, const char *restrict fmt, ...);
+extern char * __collector_strcat (char *s1, const char *s2);
+extern char * __collector_strchr (const char *s1, int chr);
+extern size_t __collector_strlcpy (char *dst, const char *src, size_t dstsize);
+extern char* __collector_strrchr (const char *str, int chr);
+extern size_t __collector_strlen (const char *s);
+extern size_t __collector_strlcat (char *dst, const char *src, size_t dstsize);
+extern char* __collector_strchr (const char *str, int chr);
+extern int __collector_strcmp (const char *s1, const char *s2);
+extern int __collector_strncmp (const char *s1, const char *s2, size_t n);
+extern char * __collector_strstr (const char *s1, const char *s2);
+extern size_t __collector_strncpy (char *dst, const char *src, size_t dstsize);
+extern size_t __collector_strncat (char *dst, const char *src, size_t dstsize);
+extern void * __collector_malloc (size_t size);
+extern void * __collector_calloc (size_t nelem, size_t elsize);
+extern char * __collector_strdup (const char * str);
+extern int __collector_strStartWith (const char *s1, const char *s2);
+extern int __collector_xml_snprintf (char *s, size_t n, const char *format, ...) __attribute__ ((format (printf, 3, 4)));
+extern int __collector_xml_vsnprintf (char *s, size_t n, const char *format, va_list args);
+
+/* ------- collector_thread ----------------- */
+pid_t __collector_gettid ();
+extern void __collector_ext_gettid_tsd_create_key ();
+#define collector_thread_t pthread_t // not using pid_t, since tid is defined as pthread_t in package structures, and other codes assume this type
+#define statvfs_t struct statvfs
+#define __collector_lwp_self() (collector_thread_t)__collector_gettid() // not using pthread_self()
+#define __collector_thr_self() (collector_thread_t)__collector_gettid() // not using pthread_self()
+
+/* ------- collector_mutex ----------------- */
+/*
+ * mutex_init is defined in libthread. If we don't want to interact
+ * with libthread we should use memset to initialize mutexes
+ */
+
+typedef volatile int collector_mutex_t;
+#define COLLECTOR_MUTEX_INITIALIZER 0
+extern int __collector_mutex_lock (collector_mutex_t *mp);
+extern int __collector_mutex_unlock (collector_mutex_t *mp);
+extern int __collector_mutex_trylock (collector_mutex_t *mp);
+
+#define __collector_mutex_init(xx) \
+ do { collector_mutex_t tmp=COLLECTOR_MUTEX_INITIALIZER; *(xx)=tmp; } while(0)
+
+void __collector_sample (char *name);
+void __collector_terminate_expt ();
+void __collector_pause ();
+void __collector_pause_m ();
+void __collector_resume ();
+
+struct DT_lineno;
+
+typedef enum
+{
+ DFUNC_API = 1, /* dynamic function declared with API */
+ DFUNC_JAVA, /* dynamically compiled java method */
+ DFUNC_KERNEL /* dynamic code mapped by the kernel (Linux) */
+} dfunc_mode_t;
+
+extern void __collector_int_func_load (dfunc_mode_t mode, char *name,
+ char *sourcename, void *vaddr,
+ int size, int lntsize,
+ struct DT_lineno *lntable);
+extern void __collector_int_func_unload (dfunc_mode_t mode, void *vaddr);
+
+extern int __collector_sigaction (int sig, const struct sigaction *nact,
+ struct sigaction *oact);
+extern void __collector_SIGDFL_handler (int sig);
+extern int __collector_ext_itimer_set (int period);
+
+#if ARCH(Intel)
+/* Atomic functions on x86/x64 */
+
+/**
+ * This function enables the inrementing (by one) of the value stored in target
+ * to occur in an atomic manner.
+ */
+static __attribute__ ((always_inline)) inline void
+__collector_inc_32 (uint32_t *ptr)
+{
+ __asm__ __volatile__("lock; incl %0"
+ : // "=m" (*ptr) // output
+ : "m" (*ptr)); // input
+}
+
+/**
+ * This function enables the decrementing (by one) of the value stored in target
+ * to occur in an atomic manner.
+ */
+static __attribute__ ((always_inline)) inline void
+__collector_dec_32 (volatile uint32_t *ptr)
+{
+ __asm__ __volatile__("lock; decl %0"
+ : // "=m" (*ptr) // output
+ : "m" (*ptr)); // input
+}
+/**
+ * This function subtrackts the value "off" of the value stored in target
+ * to occur in an atomic manner, and returns new value stored in target.
+ */
+static __attribute__ ((always_inline)) inline uint32_t
+__collector_subget_32 (uint32_t *ptr, uint32_t off)
+{
+ uint32_t r;
+ uint32_t offset = off;
+ __asm__ __volatile__("movl %2, %0; negl %0; lock; xaddl %0, %1"
+ : "=r" (r), "=m" (*ptr) /* output */
+ : "a" (off), "r" (*ptr) /* input */
+ );
+ return (r - offset);
+}
+/**
+ * This function returns the value of the stack pointer register
+ */
+static __attribute__ ((always_inline)) inline void *
+__collector_getsp ()
+{
+ void *r;
+#if WSIZE(64)
+ __asm__ __volatile__("movq %%rsp, %0"
+#else
+ __asm__ __volatile__("movl %%esp, %0"
+#endif
+ : "=r" (r)); // output
+ return r;
+}
+/**
+ * This function returns the value of the frame pointer register
+ */
+static __attribute__ ((always_inline)) inline void *
+__collector_getfp ()
+{
+ void *r;
+#if WSIZE(64)
+ __asm__ __volatile__("movq %%rbp, %0"
+#else
+ __asm__ __volatile__("movl %%ebp, %0"
+#endif
+ : "=r" (r)); // output
+ return r;
+}
+/**
+ * This function returns the value of the processor counter register
+ */
+static __attribute__ ((always_inline)) inline void *
+__collector_getpc ()
+{
+ void *r;
+ __asm__ __volatile__(
+#if WSIZE(32)
+ " call 1f \n"
+ "1: popl %0 \n"
+#else
+ " call 1f \n"
+ "1: popq %0 \n"
+#endif
+ : "=r" (r)); // output
+ return r;
+}
+
+/**
+ * This function enables a compare and swap operation to occur atomically.
+ * The 32-bit value stored in target is compared with "old". If these values
+ * are equal, the value stored in target is replaced with "new". The old
+ * 32-bit value stored in target is returned by the function whether or not
+ * the replacement occurred.
+ */
+static __attribute__ ((always_inline)) inline uint32_t
+__collector_cas_32 (volatile uint32_t *pdata, uint32_t old, uint32_t new)
+{
+ uint32_t r;
+ __asm__ __volatile__("lock; cmpxchgl %2, %1"
+ : "=a" (r), "=m" (*pdata) : "r" (new),
+ "a" (old), "m" (*pdata));
+ return r;
+}
+/**
+ * This function enables a compare and swap operation to occur atomically.
+ * The 64-bit value stored in target is compared with "old". If these values
+ * are equal, the value stored in target is replaced with "new". The old
+ * 64-bit value stored in target is returned by the function whether or not
+ * the replacement occurred.
+ */
+static __attribute__ ((always_inline)) inline uint64_t
+__collector_cas_64p (volatile uint64_t *mem, uint64_t *old, uint64_t * new)
+{
+ uint64_t r;
+#if WSIZE(32)
+ uint32_t old1 = (uint32_t) (*old & 0xFFFFFFFFL);
+ uint32_t old2 = (uint32_t) ((*old >> 32) & 0xFFFFFFFFL);
+ uint32_t new1 = (uint32_t) (*new & 0xFFFFFFFFL);
+ uint32_t new2 = (uint32_t) ((*new >> 32) & 0xFFFFFFFFL);
+ uint32_t res1 = 0;
+ uint32_t res2 = 0;
+ __asm__ __volatile__(
+ "movl %3, %%esi; lock; cmpxchg8b (%%esi); movl %%edx, %2; movl %%eax, %1"
+ : "=m" (r), "=m" (res1), "=m" (res2) /* output */
+ : "m" (mem), "a" (old1), "d" (old2), "b" (new1), "c" (new2) /* input */
+ : "memory", "cc", "esi" //, "edx", "ecx", "ebx", "eax" /* clobbered register */
+ );
+ r = (((uint64_t) res2) << 32) | ((uint64_t) res1);
+#else
+ __asm__ __volatile__( "lock; cmpxchgq %2, %1"
+ : "=a" (r), "=m" (*mem) /* output */
+ : "r" (*new), "a" (*old), "m" (*mem) /* input */
+ : "%rcx", "rdx" /* clobbered register */
+ );
+#endif
+ return r;
+}
+/**
+ * This function enables a compare and swap operation to occur atomically.
+ * The 32-/64-bit value stored in target is compared with "cmp". If these values
+ * are equal, the value stored in target is replaced with "new".
+ * The old value stored in target is returned by the function whether or not
+ * the replacement occurred.
+ */
+static __attribute__ ((always_inline)) inline void *
+__collector_cas_ptr (void *mem, void *cmp, void *new)
+{
+ void *r;
+#if WSIZE(32)
+ r = (void *) __collector_cas_32 ((volatile uint32_t *)mem, (uint32_t) cmp, (uint32_t)new);
+#else
+ __asm__ __volatile__("lock; cmpxchgq %2, (%1)"
+ : "=a" (r), "=b" (mem) /* output */
+ : "r" (new), "a" (cmp), "b" (mem) /* input */
+ );
+#endif
+ return r;
+}
+
+#elif ARCH(Aarch64)
+static __attribute__ ((always_inline)) inline uint32_t
+__collector_inc_32 (volatile uint32_t *ptr)
+{
+ return __sync_add_and_fetch (ptr, 1);
+}
+
+static __attribute__ ((always_inline)) inline uint32_t
+__collector_dec_32 (volatile uint32_t *ptr)
+{
+ return __sync_sub_and_fetch (ptr, 1);
+}
+
+static __attribute__ ((always_inline)) inline uint32_t
+__collector_subget_32 (volatile uint32_t *ptr, uint32_t off)
+{
+ return __sync_sub_and_fetch (ptr, off);
+}
+
+static __attribute__ ((always_inline)) inline uint32_t
+__collector_cas_32 (volatile uint32_t *ptr, uint32_t old, uint32_t new)
+{
+ return __sync_val_compare_and_swap (ptr, old, new);
+}
+
+static __attribute__ ((always_inline)) inline uint64_t
+__collector_cas_64p (volatile uint64_t *ptr, uint64_t *old, uint64_t * new)
+{
+ return __sync_val_compare_and_swap (ptr, *old, *new);
+}
+
+static __attribute__ ((always_inline)) inline void *
+__collector_cas_ptr (void *ptr, void *old, void *new)
+{
+ return (void *) __sync_val_compare_and_swap ((unsigned long *) ptr, (unsigned long) old, (unsigned long) new);
+}
+
+#else
+extern void __collector_flushw (); /* defined for SPARC only */
+extern void* __collector_getpc ();
+extern void* __collector_getsp ();
+extern void* __collector_getfp ();
+extern void __collector_inc_32 (volatile uint32_t *);
+extern void __collector_dec_32 (volatile uint32_t *);
+extern void* __collector_cas_ptr (volatile void *, void *, void *);
+extern uint32_t __collector_cas_32 (volatile uint32_t *, uint32_t, uint32_t);
+extern uint32_t __collector_subget_32 (volatile uint32_t *, uint32_t);
+extern uint64_t __collector_cas_64p (volatile uint64_t *, uint64_t *, uint64_t *);
+#endif /* ARCH() */
+#endif /* _LIBCOL_UTIL_H */
diff --git a/gprofng/libcollector/linetrace.c b/gprofng/libcollector/linetrace.c
new file mode 100644
index 00000000000..978c5503e2e
--- /dev/null
+++ b/gprofng/libcollector/linetrace.c
@@ -0,0 +1,1998 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+/*
+ * Lineage events for process fork, exec, etc.
+ */
+
+#include "config.h"
+#include <string.h>
+#include <elf.h>
+#include <regex.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/mman.h>
+
+#include "descendants.h"
+
+/* TprintfT(<level>,...) definitions. Adjust per module as needed */
+#define DBG_LT0 0 // for high-level configuration, unexpected errors/warnings
+#define DBG_LTT 0 // for interposition on GLIBC functions
+#define DBG_LT1 1 // for configuration details, warnings
+#define DBG_LT2 2
+#define DBG_LT3 3
+
+#define LT_MAXNAMELEN 1024
+#define LT_MAXPATHLEN 1024
+
+int __collector_linetrace_shutdown_hwcs_6830763_XXXX = 0;
+int dbg_current_mode = FOLLOW_NONE; /* for debug only */
+unsigned line_key = COLLECTOR_TSD_INVALID_KEY;
+line_mode_t line_mode = LM_DORMANT;
+int user_follow_mode = FOLLOW_ON;
+int java_mode = 0;
+
+static char *user_follow_spec;
+static char new_lineage[LT_MAXNAMELEN];
+static char curr_lineage[LT_MAXNAMELEN];
+static char linetrace_exp_dir_name[LT_MAXPATHLEN + 1]; // experiment directory
+
+/* lineage tracking for descendants of this process */
+
+static int fork_linenum = 0;
+static int line_initted = 0;
+static collector_mutex_t fork_lineage_lock = COLLECTOR_MUTEX_INITIALIZER;
+static collector_mutex_t clone_lineage_lock = COLLECTOR_MUTEX_INITIALIZER;
+
+/* interposition */
+#define CALL_REAL(x) (*(int(*)())__real_##x)
+#define CALL_REALC(x) (*(char*(*)())__real_##x)
+#define CALL_REALF(x) (*(FILE*(*)())__real_##x)
+#define NULL_PTR(x) ( __real_##x == NULL )
+
+// For a given Linux, which lib functions have more than one GLIBC version? Do this:
+// objdump -T `find /lib /lib64 -name "*.so*"` | grep GLIBC | grep text | grep \(
+static void *__real_fork = NULL;
+static void *__real_vfork = NULL;
+static void *__real_execve = NULL;
+static void *__real_execvp = NULL;
+static void *__real_execv = NULL;
+static void *__real_execle = NULL;
+static void *__real_execlp = NULL;
+static void *__real_execl = NULL;
+static void *__real_clone = NULL;
+static void *__real_grantpt = NULL;
+static void *__real_ptsname = NULL;
+static void *__real_popen = NULL;
+static int clone_linenum = 0;
+#if ARCH(Intel)
+#if WSIZE(32)
+static void *__real_popen_2_1 = NULL;
+static void *__real_popen_2_0 = NULL;
+static void *__real_posix_spawn_2_15 = NULL;
+static void *__real_posix_spawnp_2_15 = NULL;
+static void *__real_posix_spawn_2_2 = NULL;
+static void *__real_posix_spawnp_2_2 = NULL;
+#elif WSIZE(64)
+static void *__real_posix_spawn_2_15 = NULL;
+static void *__real_posix_spawnp_2_15 = NULL;
+static void *__real_posix_spawn_2_2_5 = NULL;
+static void *__real_posix_spawnp_2_2_5 = NULL;
+#endif /* WSIZE() */
+#endif /* ARCH(Intel) */
+static void *__real_system = NULL;
+static void *__real_posix_spawn = NULL;
+static void *__real_posix_spawnp = NULL;
+static void *__real_setuid = NULL;
+static void *__real_seteuid = NULL;
+static void *__real_setreuid = NULL;
+static void *__real_setgid = NULL;
+static void *__real_setegid = NULL;
+static void *__real_setregid = NULL;
+static void linetrace_dormant ();
+static int check_follow_fork ();
+static int check_follow_exec (const char *execfile);
+static int check_follow_combo (const char *execfile);
+static int path_collectable (const char *execfile);
+static char * build_experiment_path (char *instring, size_t instring_sz, const char *lineage_str);
+static int init_lineage_intf ();
+
+/* ------- "Previously dbx-visible" function prototypes ----------------- */
+static int linetrace_follow_experiment (const char *follow_spec, const char *lineage_str, const char *execfile);
+static char *lineage_from_expname (char *lineage_str, size_t lstr_sz, const char *expname);
+static void linetrace_ext_fork_prologue (const char *variant, char * new_lineage, int *following_fork);
+static void linetrace_ext_fork_epilogue (const char *variant, const pid_t ret, char * new_lineage, int *following_fork);
+static char **linetrace_ext_exec_prologue (const char *variant,
+ const char* path, char *const argv[], char *const envp[], int *following_exec);
+static void linetrace_ext_exec_epilogue (const char *variant, char *const envp[], const int ret, int *following_exec);
+static void linetrace_ext_combo_prologue (const char *variant, const char *cmd, int *following_combo);
+static void linetrace_ext_combo_epilogue (const char *variant, const int ret, int *following_combo);
+
+#ifdef DEBUG
+static int
+get_combo_flag ()
+{
+ int * guard = NULL;
+ int combo_flag = ((line_mode == LM_TRACK_LINEAGE) ? ((CHCK_REENTRANCE (guard)) ? 1 : 0) : 0);
+ return combo_flag;
+}
+#endif /* DEBUG */
+
+/* must be called for potentially live experiment */
+int
+__collector_ext_line_init (int *precord_this_experiment,
+ const char * progspec, const char * progname)
+{
+ *precord_this_experiment = 1;
+ TprintfT (DBG_LT0, "__collector_ext_line_init(%s)\n", progspec);
+ if (NULL_PTR (fork))
+ if (init_lineage_intf ())
+ {
+ TprintfT (DBG_LT0, "__collector_ext_line_init() ERROR: initialization failed.\n");
+ return COL_ERROR_LINEINIT;
+ }
+ /* check the follow spec */
+ user_follow_spec = CALL_UTIL (getenv)(SP_COLLECTOR_FOLLOW_SPEC);
+ if (user_follow_spec != NULL)
+ {
+ TprintfT (DBG_LT0, "collector: %s=%s\n", SP_COLLECTOR_FOLLOW_SPEC, user_follow_spec);
+ if (!linetrace_follow_experiment (user_follow_spec, curr_lineage, progname))
+ {
+ *precord_this_experiment = 0;
+ TprintfT (DBG_LT0, "collector: -F =<regex> does not match, will NOT be followed\n");
+ }
+ else
+ TprintfT (DBG_LT0, "collector: -F =<regex> matches, will be followed\n");
+ user_follow_mode = FOLLOW_ALL;
+ }
+ __collector_env_save_preloads ();
+ TprintfT (DBG_LT0, "__collector_ext_line_init(), progname=%s, followspec=%s, followthis=%d\n",
+ progname, user_follow_spec ? user_follow_spec : "NULL",
+ *precord_this_experiment);
+ line_mode = LM_TRACK_LINEAGE; /* even if we don't follow, we report the interposition */
+ line_initted = 1;
+ return COL_ERROR_NONE;
+}
+
+/*
+ * int __collector_ext_line_install(args)
+ * Check args to determine which line events to follow.
+ * Create tsd key for combo flag.
+ */
+int
+__collector_ext_line_install (char *args, const char * expname)
+{
+ if (!line_initted)
+ {
+ TprintfT (DBG_LT0, "__collector_ext_line_install(%s) ERROR: init hasn't be called yet\n", args);
+ return COL_ERROR_EXPOPEN;
+ }
+ TprintfT (DBG_LT0, "__collector_ext_line_install(%s, %s)\n", args, expname);
+ line_key = __collector_tsd_create_key (sizeof (int), NULL, NULL);
+
+ /* determine experiment name */
+ __collector_strlcpy (linetrace_exp_dir_name, expname, sizeof (linetrace_exp_dir_name));
+ lineage_from_expname (curr_lineage, sizeof (curr_lineage), linetrace_exp_dir_name);
+ user_follow_mode = CALL_UTIL (atoi)(args);
+ TprintfT (DBG_LT0, "__collector_ext_line_install() user_follow_mode=0x%X, linetrace_exp_dir_name=%s\n",
+ user_follow_mode, linetrace_exp_dir_name);
+
+ // determine java mode
+ char * java_follow_env = CALL_UTIL (getenv)(JAVA_TOOL_OPTIONS);
+ if (java_follow_env != NULL && CALL_UTIL (strstr)(java_follow_env, COLLECTOR_JVMTI_OPTION))
+ java_mode = 1;
+
+ // backup collector specific env
+ if (sp_env_backup == NULL)
+ {
+ sp_env_backup = __collector_env_backup ();
+ TprintfT (DBG_LT0, "__collector_ext_line_install creating sp_env_backup -- 0x%p\n", sp_env_backup);
+ }
+ else
+ TprintfT (DBG_LT0, "__collector_ext_line_install existing sp_env_backup -- 0x%p\n", sp_env_backup);
+ if (user_follow_mode == FOLLOW_NONE)
+ __collector_env_unset (NULL);
+
+ char logmsg[256];
+ logmsg[0] = '\0';
+ if (user_follow_mode != FOLLOW_NONE)
+ CALL_UTIL (strlcat)(logmsg, "fork|exec|combo", sizeof (logmsg));
+ size_t slen = __collector_strlen (logmsg);
+ if (slen > 0)
+ logmsg[slen] = '\0';
+ else
+ CALL_UTIL (strlcat)(logmsg, "none", sizeof (logmsg));
+
+ /* report which line events are followed */
+ (void) __collector_log_write ("<setting %s=\"%s\"/>\n", SP_JCMD_LINETRACE, logmsg);
+ TprintfT (DBG_LT0, "__collector_ext_line_install(%s): %s \n", expname, logmsg);
+ return COL_ERROR_NONE;
+}
+
+char *
+lineage_from_expname (char *lineage_str, size_t lstr_sz, const char *expname)
+{
+ TprintfT (DBG_LT0, "lineage_from_expname(%s, %s)\n", lineage_str, expname);
+ char *p = NULL;
+ if (lstr_sz < 1 || !lineage_str || !expname)
+ {
+ TprintfT (DBG_LT0, "lineage_from_expname(): ERROR, null string\n");
+ return NULL;
+ }
+ /* determine lineage from experiment name */
+ p = __collector_strrchr (expname, '/');
+ if ((p == NULL) || (*++p != '_'))
+ {
+ lineage_str[0] = 0;
+ TprintfT (DBG_LT2, "lineage_from_expname(): expt=%s lineage=\".\" (founder)\n", expname);
+ }
+ else
+ {
+ size_t tmp = __collector_strlcpy (lineage_str, p, lstr_sz);
+ if (tmp >= lstr_sz)
+ TprintfT (DBG_LT0, "lineage_from_expname(): ERROR: expt=%s lineage=\"%s\" truncated %ld characters\n",
+ expname, lineage_str, (long) (tmp - lstr_sz));
+ lineage_str[lstr_sz - 1] = 0;
+ p = __collector_strchr (lineage_str, '.');
+ if (p != NULL)
+ *p = '\0';
+ TprintfT (DBG_LT2, "lineage_from_expname(): expt=%s lineage=\"%s\"\n", expname, lineage_str);
+ }
+ return lineage_str;
+}
+
+/*
+ * void __collector_line_cleanup (void)
+ * Disable logging. Clear backup ENV.
+ */
+void
+__collector_line_cleanup (void)
+{
+ if (line_mode == LM_CLOSED)
+ {
+ TprintfT (DBG_LT0, "__collector_line_cleanup(): WARNING, line is already closed\n");
+ return;
+ }
+ else if (line_mode == LM_DORMANT)
+ TprintfT (DBG_LT0, "__collector_line_cleanup(): ERROR, line is DORMANT\n");
+ else
+ TprintfT (DBG_LT0, "__collector_line_cleanup()\n");
+ line_mode = LM_CLOSED;
+ user_follow_mode = FOLLOW_NONE;
+ dbg_current_mode = FOLLOW_NONE; /* for debug only */
+ line_key = COLLECTOR_TSD_INVALID_KEY;
+ java_mode = 0;
+ if (sp_env_backup != NULL)
+ {
+ __collector_env_backup_free ();
+ sp_env_backup = NULL;
+ }
+ return;
+}
+
+/*
+ * void __collector_ext_line_close (void)
+ * Disable logging. Cleans ENV vars. Clear backup ENV.
+ */
+void
+__collector_ext_line_close (void)
+{
+ TprintfT (DBG_LT0, "__collector_ext_line_close()\n");
+ __collector_line_cleanup ();
+ __collector_env_unset (NULL);
+ return;
+}
+
+/*
+ * void linetrace_dormant(void)
+ * Disable logging. Preserve ENV vars.
+ */
+static void
+linetrace_dormant (void)
+{
+ if (line_mode == LM_DORMANT)
+ {
+ TprintfT (DBG_LT0, "linetrace_dormant() -- already dormant\n");
+ return;
+ }
+ else if (line_mode == LM_CLOSED)
+ {
+ TprintfT (DBG_LT0, "linetrace_dormant(): ERROR, line is already CLOSED\n");
+ return;
+ }
+ else
+ TprintfT (DBG_LT0, "linetrace_dormant()\n");
+ line_mode = LM_DORMANT;
+ return;
+}
+
+static int
+check_follow_fork ()
+{
+ int follow = (user_follow_mode != FOLLOW_NONE);
+ TprintfT (DBG_LT0, "check_follow_fork()=%d\n", follow);
+ return follow;
+}
+
+static int
+check_follow_exec (const char *execfile)
+{
+ int follow = (user_follow_mode != FOLLOW_NONE);
+ if (follow)
+ {
+ /* revise based on collectability of execfile */
+ follow = path_collectable (execfile);
+ }
+ TprintfT (DBG_LT0, "check_follow_exec(%s)=%d\n", execfile, follow);
+ return follow;
+}
+
+static int
+check_follow_combo (const char *execfile)
+{
+ int follow = (user_follow_mode != FOLLOW_NONE);
+ TprintfT (DBG_LT0, "check_follow_combo(%s)=%d\n", execfile, follow);
+ return follow;
+}
+
+static int
+check_fd_dynamic (int fd)
+{
+ TprintfT (DBG_LT0, "check_fd_dynamic(%d)\n", fd);
+ off_t off = CALL_UTIL (lseek)(fd, (off_t) 0, SEEK_END);
+ size_t sz = (size_t) 8192; /* one page should suffice */
+ if (sz > off)
+ sz = off;
+ char *p = CALL_UTIL (mmap64)((char *) 0, sz, PROT_READ, MAP_PRIVATE, fd, (off64_t) 0);
+ if (p == MAP_FAILED)
+ {
+ TprintfT (DBG_LT0, "check_fd_dynamic(): ERROR/WARNING: mmap failed for `%d'\n", fd);
+ (void) __collector_log_write ("<event kind=\"%s\" id=\"%d\">%s</event>\n", SP_JCMD_CWARN,
+ COL_WARN_NOFOLLOW, "mmap-failed");
+ return 0;
+ }
+ char elfclass = p[EI_CLASS];
+ if ((p[EI_MAG0] != ELFMAG0) ||
+ (p[EI_MAG1] != ELFMAG1) ||
+ (p[EI_MAG2] != ELFMAG2) ||
+ (p[EI_MAG3] != ELFMAG3) ||
+ (elfclass != ELFCLASS32 && elfclass != ELFCLASS64)
+ )
+ {
+ TprintfT (DBG_LT0, "check_fd_dynamic(): WARNING: Command `%d' is not executable ELF!\n", fd);
+ CALL_UTIL (munmap)(p, sz);
+ return 1;
+ }
+ Elf32_Ehdr *ehdr32 = (Elf32_Ehdr*) p;
+ Elf64_Ehdr *ehdr64 = (Elf64_Ehdr*) p;
+ Elf64_Off e_phoff;
+ Elf64_Half e_phnum;
+ Elf64_Half e_phentsize;
+ if (elfclass == ELFCLASS32)
+ {
+ e_phoff = ehdr32->e_phoff;
+ e_phnum = ehdr32->e_phnum;
+ e_phentsize = ehdr32->e_phentsize;
+ }
+ else
+ {
+ e_phoff = ehdr64->e_phoff;
+ e_phnum = ehdr64->e_phnum;
+ e_phentsize = ehdr64->e_phentsize;
+ }
+ if ((sizeof (Elf32_Ehdr) > sz) ||
+ (sizeof (Elf64_Ehdr) > sz) ||
+ (e_phoff + e_phentsize * (e_phnum - 1) > sz))
+ {
+ TprintfT (DBG_LT0, "check_fd_dynamic(): WARNING: Command `%d' ELF file did not fit in page!\n", fd);
+#if 0
+ (void) __collector_log_write ("<event kind=\"%s\" id=\"%d\">%s</event>\n", SP_JCMD_CWARN,
+ COL_WARN_RISKYFOLLOW, "ELF header size");
+#endif
+ CALL_UTIL (munmap)(p, sz);
+ return 1;
+ }
+ TprintfT (DBG_LT2, "check_fd_dynamic(): elfclass=%d, e_phoff=%lu e_phnum=%lu e_phentsize=%lu\n",
+ (int) elfclass, (unsigned long) e_phoff, (unsigned long) e_phnum,
+ (unsigned long) e_phentsize);
+ int dynamic = 0;
+ Elf64_Half i;
+ for (i = 0; i < e_phnum; i++)
+ {
+ if (elfclass == ELFCLASS32)
+ {
+ if (PT_DYNAMIC ==
+ ((Elf32_Phdr*) (p + e_phoff + e_phentsize * i))->p_type)
+ {
+ dynamic = 1;
+ break;
+ }
+ }
+ else
+ {
+ if (PT_DYNAMIC ==
+ ((Elf64_Phdr*) (p + e_phoff + e_phentsize * i))->p_type)
+ {
+ dynamic = 1;
+ break;
+ }
+ }
+ }
+ if (!dynamic)
+ {
+ TprintfT (DBG_LT0, "check_fd_dynamic(): ERROR/WARNING: Command `%d' is not a dynamic executable!\n", fd);
+#if 0
+ (void) __collector_log_write ("<event kind=\"%s\" id=\"%d\">%s</event>\n", SP_JCMD_CWARN,
+ COL_WARN_NOFOLLOW, "!dynamic");
+#endif
+ }
+ else
+ TprintfT (DBG_LT2, "check_fd_dynamic(): Command `%d' is a dynamic executable!\n", fd);
+ CALL_UTIL (munmap)(p, sz);
+ return dynamic;
+}
+
+static int
+check_dynamic (const char *execfile)
+{
+ TprintfT (DBG_LT2, "check_dynamic(%s)\n", execfile);
+ int fd = CALL_UTIL (open)(execfile, O_RDONLY);
+ if (fd == -1)
+ {
+ TprintfT (DBG_LT0, "check_dynamic(): ERROR/WARNING: Command `%s' could not be opened!\n", execfile);
+ (void) __collector_log_write ("<event kind=\"%s\" id=\"%d\">%s</event>\n", SP_JCMD_CWARN,
+ COL_WARN_RISKYFOLLOW, "open");
+ return 1; /* follow, though exec will presumably fail */
+ }
+ int ret = check_fd_dynamic (fd);
+ CALL_UTIL (close)(fd);
+ return ret;
+}
+
+static int
+path_collectable (const char *execfile)
+{
+ TprintfT (DBG_LT0, "path_collectable(%s)\n", execfile);
+ /* Check that execfile exists and is a collectable executable */
+ /* logging warning when collection is likely to be unsuccessful */
+ /* (if check isn't accurate, generally best not to include it) */
+
+ if (execfile && !__collector_strchr (execfile, '/'))
+ { /* got an unqualified name */
+ /* XXXX locate execfile on PATH to be able to check it */
+ TprintfT (DBG_LT0, "path_collectable(): WARNING: Can't check unqualified executable `%s'\n", execfile);
+#if 0
+ (void) __collector_log_write ("<event kind=\"%s\" id=\"%d\">%s</event>\n", SP_JCMD_CWARN,
+ COL_WARN_RISKYFOLLOW, "path");
+#endif
+ return 1; /* follow unqualified execfile unchecked */
+ }
+ struct stat sbuf;
+ if (stat (execfile, &sbuf))
+ { /* can't stat it */
+ TprintfT (DBG_LT0, "path_collectable(): WARNING: Can't stat `%s'\n", execfile);
+#if 0
+ (void) __collector_log_write ("<event kind=\"%s\" id=\"%d\">%s</event>\n", SP_JCMD_CWARN,
+ COL_WARN_RISKYFOLLOW, "stat");
+#endif
+ return 1; /* follow, though exec will probably fail */
+ }
+ TprintfT (DBG_LT2, "path_collectable(%s) mode=0%o uid=%d gid=%d\n",
+ execfile, sbuf.st_mode, sbuf.st_uid, sbuf.st_gid);
+ if (((sbuf.st_mode & S_IXUSR) == 0) || ((sbuf.st_mode & S_IFMT) == S_IFDIR))
+ {
+ TprintfT (DBG_LT0, "path_collectable(): WARNING: Command `%s' is NOT an executable file!\n", execfile);
+#if 0
+ (void) __collector_log_write ("<event kind=\"%s\" id=\"%d\">%s</event>\n", SP_JCMD_CWARN,
+ COL_WARN_RISKYFOLLOW, "mode");
+#endif
+ return 1; /* follow, though exec will presumably fail */
+ }
+ /* XXXX setxid(root) is OK iff libcollector is registered as secure */
+ /* XXXX setxid(non-root) is OK iff umask is accomodating */
+ if (((sbuf.st_mode & S_ISUID) != 0) || ((sbuf.st_mode & S_ISGID) != 0))
+ {
+ TprintfT (DBG_LT0, "path_collectable(): WARNING: Command `%s' is SetXID!\n", execfile);
+#if 0
+ (void) __collector_log_write ("<event kind=\"%s\" id=\"%d\">%s</event>\n", SP_JCMD_CWARN,
+ COL_WARN_RISKYFOLLOW, "setxid");
+#endif
+ return 1; /* follow, though collection may be unreliable */
+ }
+ if (!check_dynamic (execfile))
+ {
+ TprintfT (DBG_LT0, "path_collectable(%s) WARNING/ERROR: not dynamic, not collectng!\n", execfile);
+ return 0; /* don't follow, collection will fail unpredictably */
+ }
+ TprintfT (DBG_LT2, "path_collectable(%s) OK!\n", execfile);
+ return 1; /* OK to follow */
+}
+
+static char *
+build_experiment_path (char * instring, size_t instring_sz, const char *lineage_str)
+{
+ TprintfT (DBG_LT0, "build_experiment_path(,%ld, %s)\n",
+ (long) instring_sz, lineage_str);
+ const char *p = CALL_UTIL (strstr)(linetrace_exp_dir_name, DESCENDANT_EXPT_KEY);
+ int basedir_sz;
+ if (p)
+ basedir_sz = p - linetrace_exp_dir_name + 4; /* +3 because of DESCENDANT_EXPT_KEY */
+ else
+ basedir_sz = __collector_strlen (linetrace_exp_dir_name) + 1;
+ int additional_sz = __collector_strlen (lineage_str) + 4;
+ if (basedir_sz + additional_sz > instring_sz)
+ {
+ TprintfT (DBG_LT0, "build_experiment_path(%s,%s): ERROR: path too long: %d > %ld\n",
+ linetrace_exp_dir_name, lineage_str,
+ basedir_sz + additional_sz, (long) instring_sz);
+ *instring = 0;
+ return NULL;
+ }
+ __collector_strlcpy (instring, linetrace_exp_dir_name, basedir_sz);
+ size_t slen = __collector_strlen (instring);
+ CALL_UTIL (snprintf)(instring + slen, instring_sz - slen, "/%s.er", lineage_str);
+ assert (__collector_strlen (instring) + 1 == basedir_sz + additional_sz);
+ return instring;
+}
+
+static void
+check_reuid_change (uid_t ruid, uid_t euid)
+{
+ uid_t curr_ruid = getuid ();
+ uid_t curr_euid = geteuid ();
+ mode_t curr_umask = umask (0);
+ umask (curr_umask); /* restore original umask */
+ int W_oth = !(curr_umask & S_IWOTH);
+ TprintfT (DBG_LT0, "check_reuid_change(%d,%d): umask=%03o\n", ruid, euid, curr_umask);
+ TprintfT (DBG_LT0, "check_reuid_change(): umask W usr=%d grp=%d oth=%d\n",
+ (int) (!(curr_umask & S_IWUSR)), (int) (!(curr_umask & S_IWGRP)), W_oth);
+ if (ruid != -1)
+ {
+ TprintfT (DBG_LT0, "check_reuid_change(%d->%d)\n", curr_ruid, ruid);
+ if ((curr_euid == 0) && (ruid != 0) && !W_oth)
+ {
+ /* changing to non-root ID, with umask blocking writes by other */
+ TprintfT (DBG_LT0, "check_reuid_change(): ERROR/WARNING: umask blocks write other after ruid change (%d->%d)\n",
+ curr_ruid, ruid);
+ (void) __collector_log_write ("<event kind=\"%s\" id=\"%d\">umask %03o ruid %d->%d</event>\n",
+ SP_JCMD_CWARN, COL_WARN_IDCHNG, curr_umask, curr_ruid, ruid);
+ }
+ }
+ if (euid != -1)
+ {
+ TprintfT (DBG_LT0, "check_reuid_change(%d->%d)\n", curr_euid, euid);
+ if ((curr_euid == 0) && (euid != 0) && !W_oth)
+ {
+ /* changing to non-root ID, with umask blocking writes by other */
+ TprintfT (DBG_LT0, "check_reuid_change(): ERROR/WARNING: umask blocks write other after euid change (%d->%d)\n",
+ curr_euid, euid);
+ (void) __collector_log_write ("<event kind=\"%s\" id=\"%d\">umask %03o euid %d->%d</event>\n",
+ SP_JCMD_CWARN, COL_WARN_IDCHNG, curr_umask, curr_euid, euid);
+ }
+ }
+}
+
+static void
+check_regid_change (gid_t rgid, gid_t egid)
+{
+ gid_t curr_rgid = getgid ();
+ gid_t curr_egid = getegid ();
+ uid_t curr_euid = geteuid ();
+ mode_t curr_umask = umask (0);
+ umask (curr_umask); /* restore original umask */
+ int W_oth = !(curr_umask & S_IWOTH);
+ TprintfT (DBG_LT0, "check_regid_change(%d,%d): umask=%03o euid=%d\n",
+ rgid, egid, curr_umask, curr_euid);
+ TprintfT (DBG_LT0, "umask W usr=%d grp=%d oth=%d\n",
+ (int) (!(curr_umask & S_IWUSR)), (int) (!(curr_umask & S_IWGRP)), W_oth);
+ if (rgid != -1)
+ {
+ TprintfT (DBG_LT0, "check_regid_change(%d->%d)\n", curr_rgid, rgid);
+ if ((curr_euid == 0) && (rgid != 0) && !W_oth)
+ {
+ /* changing to non-root ID, with umask blocking writes by other */
+ TprintfT (DBG_LT0, "check_regid_change(): WARNING/ERROR: umask blocks write other after rgid change (%d->%d)\n",
+ curr_rgid, rgid);
+ (void) __collector_log_write ("<event kind=\"%s\" id=\"%d\">umask %03o rgid %d->%d</event>\n",
+ SP_JCMD_CWARN, COL_WARN_IDCHNG, curr_umask, curr_rgid, rgid);
+ }
+ }
+ if (egid != -1)
+ {
+ TprintfT (DBG_LT0, "check_regid_change(): check_egid_change(%d->%d)\n", curr_egid, egid);
+ if ((curr_euid == 0) && (egid != 0) && !W_oth)
+ {
+ /* changing to non-root ID, with umask blocking writes by other */
+ TprintfT (DBG_LT0, "check_regid_change(): WARNING/ERROR: umask blocks write other after egid change (%d->%d)\n",
+ curr_egid, egid);
+ (void) __collector_log_write ("<event kind=\"%s\" id=\"%d\">umask %03o egid %d->%d</event>\n",
+ SP_JCMD_CWARN, COL_WARN_IDCHNG, curr_umask, curr_egid, egid);
+ }
+ }
+}
+
+static int
+init_lineage_intf ()
+{
+ void *dlflag;
+ TprintfT (DBG_LT2, "init_lineage_intf()\n");
+
+ static int nesting_check = 0;
+ if (nesting_check >= 2)
+ {
+ /* segv before stack blows up */
+ nesting_check /= (nesting_check - 2);
+ }
+ nesting_check++;
+
+ __real_fork = dlsym (RTLD_NEXT, "fork");
+ if (__real_fork == NULL)
+ {
+ __real_fork = dlsym (RTLD_DEFAULT, "fork");
+ if (__real_fork == NULL)
+ return 1;
+ dlflag = RTLD_DEFAULT;
+ }
+ else
+ dlflag = RTLD_NEXT;
+ TprintfT (DBG_LT2, "init_lineage_intf() using RTLD_%s\n",
+ dlflag == RTLD_DEFAULT ? "DEFAULT" : "NEXT");
+ TprintfT (DBG_LT2, "init_lineage_intf() @0x%p __real_fork\n", __real_fork);
+ __real_vfork = dlsym (dlflag, "vfork");
+ TprintfT (DBG_LT2, "init_lineage_intf() @0x%p __real_vfork\n", __real_vfork);
+ __real_execve = dlsym (dlflag, "execve");
+ TprintfT (DBG_LT2, "init_lineage_intf() @0x%p __real_execve\n", __real_execve);
+ __real_execvp = dlsym (dlflag, "execvp");
+ TprintfT (DBG_LT2, "init_lineage_intf() @0x%p __real_execvp\n", __real_execvp);
+ __real_execv = dlsym (dlflag, "execv");
+ TprintfT (DBG_LT2, "init_lineage_intf() @0x%p __real_execv\n", __real_execv);
+ __real_execle = dlsym (dlflag, "execle");
+ TprintfT (DBG_LT2, "init_lineage_intf() @0x%p __real_execle\n", __real_execle);
+ __real_execlp = dlsym (dlflag, "execlp");
+ TprintfT (DBG_LT2, "init_lineage_intf() @0x%p __real_execlp\n", __real_execlp);
+ __real_execl = dlsym (dlflag, "execl");
+ TprintfT (DBG_LT2, "init_lineage_intf() @0x%p __real_execl\n", __real_execl);
+ __real_clone = dlsym (dlflag, "clone");
+ TprintfT (DBG_LT2, "init_lineage_intf() @0x%p __real_clone\n", __real_clone);
+ __real_posix_spawn = dlsym (dlflag, "posix_spawn");
+ TprintfT (DBG_LT2, "init_lineage_intf() @0x%p __real_posix_spawn\n",
+ __real_posix_spawn);
+ __real_posix_spawnp = dlsym (dlflag, "posix_spawnp");
+ TprintfT (DBG_LT2, "init_lineage_intf() @0x%p __real_posix_spawnp\n",
+ __real_posix_spawnp);
+ __real_popen = dlvsym (dlflag, "popen", SYS_POPEN_VERSION);
+ TprintfT (DBG_LT2, "init_lineage_intf()[%s] @0x%p __real_popen\n",
+ SYS_POPEN_VERSION, __real_popen);
+#if ARCH(Intel)
+ __real_posix_spawn_2_15 = dlvsym (dlflag, "posix_spawn", SYS_POSIX_SPAWN_VERSION);
+ __real_posix_spawnp_2_15 = dlvsym (dlflag, "posix_spawnp", SYS_POSIX_SPAWN_VERSION);
+#if WSIZE(32)
+ __real_popen_2_1 = __real_popen;
+ __real_popen_2_0 = dlvsym (dlflag, "popen", "GLIBC_2.0");
+ __real_posix_spawn_2_2 = dlvsym (dlflag, "posix_spawn", "GLIBC_2.2");
+ __real_posix_spawnp_2_2 = dlvsym (dlflag, "posix_spawnp", "GLIBC_2.2");
+#elif WSIZE(64)
+ __real_posix_spawn_2_2_5 = dlvsym (dlflag, "posix_spawn", "GLIBC_2.2.5");
+ __real_posix_spawnp_2_2_5 = dlvsym (dlflag, "posix_spawnp", "GLIBC_2.2.5");
+#endif /* WSIZE() */
+#endif /* ARCH(Intel) */
+ __real_grantpt = dlsym (dlflag, "grantpt");
+ TprintfT (DBG_LT2, "init_lineage_intf() @0x%p __real_grantpt\n", __real_grantpt);
+ __real_ptsname = dlsym (dlflag, "ptsname");
+ TprintfT (DBG_LT2, "init_lineage_intf() @0x%p __real_ptsname\n", __real_ptsname);
+ __real_system = dlsym (dlflag, "system");
+ TprintfT (DBG_LT2, "init_lineage_intf() @0x%p __real_system\n", __real_system);
+ __real_setuid = dlsym (dlflag, "setuid");
+ TprintfT (DBG_LT2, "init_lineage_intf() @0x%p __real_setuid\n", __real_setuid);
+ __real_seteuid = dlsym (dlflag, "seteuid");
+ TprintfT (DBG_LT2, "init_lineage_intf() @0x%p __real_seteuid\n", __real_seteuid);
+ __real_setreuid = dlsym (dlflag, "setreuid");
+ TprintfT (DBG_LT2, "init_lineage_intf() @0x%p __real_setreuid\n", __real_setreuid);
+ __real_setgid = dlsym (dlflag, "setgid");
+ TprintfT (DBG_LT2, "init_lineage_intf() @0x%p __real_setgid\n", __real_setgid);
+ __real_setegid = dlsym (dlflag, "setegid");
+ TprintfT (DBG_LT2, "init_lineage_intf() @0x%p __real_setegid\n", __real_setegid);
+ __real_setregid = dlsym (dlflag, "setregid");
+ TprintfT (DBG_LT2, "init_lineage_intf() @0x%p __real_setregid\n", __real_setregid);
+ return 0;
+}
+
+/*------------------------------------------------------------------------ */
+/* Note: The following _prologue and _epilogue functions used to be dbx-visible.
+
+ They are used to appropriately manage lineage-changing events, by
+ quiescing and re-enabling/re-setting experiment collection before and after,
+ and logging the lineage-change in the process/experiment undertaking it.
+ As shown by the interposition functions for fork, exec, etc., which follow,
+ the _prologue should be called immediately prior (such as a breakpoint
+ action defined at function entry) and the _epilogue called immediately
+ after (such as a breakpoint action defined at function return).
+ */
+
+/*
+ Notes on MT from Solaris 10 man pthread_atfork:
+
+ All multithreaded applications that call fork() in a POSIX
+ threads program and do more than simply call exec(2) in the
+ child of the fork need to ensure that the child is protected
+ from deadlock.
+
+ Since the "fork-one" model results in duplicating only the
+ thread that called fork(), it is possible that at the time
+ of the call another thread in the parent owns a lock. This
+ thread is not duplicated in the child, so no thread will
+ unlock this lock in the child. Deadlock occurs if the sin-
+ gle thread in the child needs this lock.
+
+ The problem is more serious with locks in libraries. Since
+ a library writer does not know if the application using the
+ library calls fork(), the library must protect itself from
+ such a deadlock scenario. If the application that links
+ with this library calls fork() and does not call exec() in
+ the child, and if it needs a library lock that may be held
+ by some other thread in the parent that is inside the
+ library at the time of the fork, the application deadlocks
+ inside the library.
+ */
+
+static void
+linetrace_ext_fork_prologue (const char *variant, char * n_lineage, int *following_fork)
+{
+ TprintfT (DBG_LT0, "linetrace_ext_fork_prologue; variant=%s; new_lineage=%s; follow=%d\n",
+ variant, n_lineage, *following_fork);
+ __collector_env_print ("fork_prologue start");
+ if (dbg_current_mode != FOLLOW_NONE)
+ TprintfT (DBG_LT0, "linetrace_ext_fork_prologue(%s) ERROR: dbg_current_mode=%d, changing to FOLLOW_FORK!\n",
+ variant, dbg_current_mode);
+ dbg_current_mode = FOLLOW_ON;
+ if (__collector_strncmp ((char *) variant, "clone", sizeof ("clone") - 1) == 0)
+ {
+ __collector_mutex_lock (&clone_lineage_lock);
+ CALL_UTIL (snprintf)(n_lineage, LT_MAXNAMELEN, "%s_C%d", curr_lineage, ++clone_linenum);
+ __collector_mutex_unlock (&clone_lineage_lock);
+ }
+ else
+ {
+ __collector_mutex_lock (&fork_lineage_lock);
+ CALL_UTIL (snprintf)(n_lineage, LT_MAXNAMELEN, "%s_f%d", curr_lineage, ++fork_linenum);
+ __collector_mutex_unlock (&fork_lineage_lock);
+ }
+ *following_fork = check_follow_fork ();
+
+ /* write message before suspending, or it won't be written */
+ hrtime_t ts = GETRELTIME ();
+ TprintfT (DBG_LT0, "linetrace_ext_fork_prologue; variant=%s; new_lineage=%s; follow=%d\n",
+ variant, n_lineage, *following_fork);
+ __collector_log_write ("<event kind=\"%s\" tstamp=\"%u.%09u\" variant=\"%s\" lineage=\"%s\" follow=\"%d\"/>\n",
+ SP_JCMD_DESC_START,
+ (unsigned) (ts / NANOSEC), (unsigned) (ts % NANOSEC),
+ variant, n_lineage, *following_fork);
+ __collector_ext_dispatcher_thread_timer_suspend ();
+ __collector_ext_hwc_lwp_suspend ();
+ __collector_env_print ("fork_prologue end");
+}
+
+static void
+linetrace_ext_fork_epilogue (const char *variant, const pid_t ret, char * n_lineage, int *following_fork)
+{
+ if (dbg_current_mode == FOLLOW_NONE)
+ TprintfT (DBG_LT0, "linetrace_ext_fork_epilogue(%s) ERROR: dbg_current_mode=%d!\n",
+ variant, dbg_current_mode);
+ /* compute descendant experiment name */
+ char new_exp_name[LT_MAXPATHLEN];
+ /* save exp_name to global var */
+ if (!build_experiment_path (new_exp_name, sizeof (new_exp_name), n_lineage))
+ TprintfT (DBG_LT0, "linetrace_ext_fork_epilogue(%s): ERROR SP_COLLECTOR_EXPNAME not set\n", n_lineage);
+ TprintfT (DBG_LT0, "linetrace_ext_fork_epilogue(%s):%d() returned %d %s; child experiment name = %s\n",
+ variant, *following_fork, ret, (ret ? "parent" : "child"), new_exp_name);
+ if (ret == 0)
+ {
+ /* *************************************child */
+ __collector_env_print ("fork_epilogue child at start");
+ /* start a new line */
+ fork_linenum = 0;
+ __collector_mutex_init (&fork_lineage_lock);
+ clone_linenum = 0;
+ __collector_mutex_init (&clone_lineage_lock);
+ __collector_env_update (NULL);
+ __collector_env_print ("fork_epilogue child after env_update");
+ __collector_clean_state ();
+ __collector_env_print ("fork_epilogue child after clean_slate");
+ __collector_line_cleanup ();
+ __collector_env_print ("fork_epilogue child after line_cleanup");
+ if (*following_fork)
+ {
+ /* stop recording this experiment, but preserve env vars */
+ linetrace_dormant ();
+ __collector_env_print ("fork_epilogue child after linetrace_dormant");
+
+ //static char exp_name_env[LT_MAXPATHLEN];
+ char * exp_name_env = CALL_UTIL (calloc)(LT_MAXPATHLEN, 1);
+ CALL_UTIL (snprintf)(exp_name_env, LT_MAXPATHLEN, "%s=%s", SP_COLLECTOR_EXPNAME, new_exp_name);
+ CALL_UTIL (putenv)(exp_name_env);
+
+ const char *params = CALL_UTIL (getenv)(SP_COLLECTOR_PARAMS);
+ int ret;
+ if (new_exp_name == NULL)
+ TprintfT (DBG_LT0, "linetrace_ext_fork_epilogue: ERROR: getenv(%s) undefined -- new expt aborted!\n",
+ SP_COLLECTOR_EXPNAME);
+ else if (params == NULL)
+ TprintfT (DBG_LT0, "linetrace_ext_fork_epilogue: ERROR: getenv(%s) undefined -- new expt aborted!\n",
+ SP_COLLECTOR_PARAMS);
+ else if ((ret = __collector_open_experiment (new_exp_name, params, SP_ORIGIN_FORK)))
+ TprintfT (DBG_LT0, "linetrace_ext_fork_epilogue: ERROR: '%s' open failed, ret=%d\n",
+ new_exp_name, ret);
+ else
+ TprintfT (DBG_LT0, "linetrace_ext_fork_epilogue: opened(%s)\n", new_exp_name);
+ TprintfT (DBG_LT0, "linetrace_ext_fork_epilogue(%s) returning to *child*\n", variant);
+ }
+ else
+ {
+ /* disable current and further linetrace experiment resumption */
+ TprintfT (DBG_LT0, "linetrace_ext_fork_epilogue(%s) child calling line_close\n", variant);
+ __collector_ext_line_close ();
+ }
+ __collector_env_print ("fork_epilogue child at end");
+ /* *************************************end child */
+ }
+ else
+ {
+ /* *************************************parent */
+ __collector_env_print ("fork_epilogue parent at start");
+ __collector_ext_dispatcher_thread_timer_resume ();
+ __collector_ext_hwc_lwp_resume ();
+ hrtime_t ts = GETRELTIME ();
+ char msg[256 + LT_MAXPATHLEN];
+ if (ret >= 0)
+ CALL_UTIL (snprintf)(msg, sizeof (msg), "pid=%d", ret);
+ else
+ {
+ /* delete stillborn experiment? */
+ char errmsg[256];
+ strerror_r (errno, errmsg, sizeof (errmsg));
+ CALL_UTIL (snprintf)(msg, sizeof (msg), "err %s", errmsg);
+ }
+ __collector_log_write ("<event kind=\"%s\" tstamp=\"%u.%09u\" variant=\"%s\" lineage=\"%s\" follow=\"%d\" msg=\"%s\"/>\n",
+ SP_JCMD_DESC_STARTED,
+ (unsigned) (ts / NANOSEC), (unsigned) (ts % NANOSEC),
+ variant, n_lineage, *following_fork, msg);
+ /* environment remains set for collection */
+ __collector_env_print ("fork_epilogue parent at end");
+ /* *************************************end parent */
+ }
+ dbg_current_mode = FOLLOW_NONE;
+ *following_fork = 0;
+}
+
+static char**
+linetrace_ext_exec_prologue_end (const char *variant, const char* cmd_string,
+ char *const envp[], int following_exec)
+{
+ char **coll_env;
+ TprintfT (DBG_LT0, "linetrace_ext_exec_prologue_end; variant=%s; cmd_string=%s; follow=%d\n",
+ variant, cmd_string, following_exec);
+ /* write message before suspending, or it won't be written */
+ hrtime_t ts = GETRELTIME ();
+ __collector_log_write ("<event kind=\"%s\" tstamp=\"%u.%09u\" variant=\"%s\" lineage=\"%s\" follow=\"%d\" msg=\"%s\"/>\n",
+ SP_JCMD_EXEC_START,
+ (unsigned) (ts / NANOSEC), (unsigned) (ts % NANOSEC),
+ variant, new_lineage, following_exec, cmd_string);
+ if (following_exec)
+ {
+ coll_env = __collector_env_allocate (envp, 0);
+ __collector_env_update (coll_env);
+ extern char **environ; /* the process' actual environment */
+ if (environ == envp) /* user selected process environment */
+ environ = coll_env;
+ }
+ else
+ coll_env = (char**) envp;
+ __collector_env_printall ("linetrace_ext_exec_prologue_end", coll_env);
+ if (!CALL_UTIL (strstr)(variant, "posix_spawn"))
+ {
+ __collector_linetrace_shutdown_hwcs_6830763_XXXX = 1;
+ __collector_suspend_experiment ("suspend_for_exec");
+ __collector_linetrace_shutdown_hwcs_6830763_XXXX = 0;
+ }
+ if (CALL_UTIL (strstr)(variant, "posix_spawn"))
+ {
+ __collector_ext_dispatcher_thread_timer_suspend ();
+ __collector_linetrace_shutdown_hwcs_6830763_XXXX = 1;
+ __collector_ext_hwc_lwp_suspend ();
+ __collector_linetrace_shutdown_hwcs_6830763_XXXX = 0;
+ }
+ return (coll_env);
+}
+
+static char**
+linetrace_ext_exec_prologue (const char *variant,
+ const char* path, char *const argv[],
+ char *const envp[], int *following_exec)
+{
+ char cmd_string[_POSIX_ARG_MAX] = {'\0'};
+
+ if (dbg_current_mode != FOLLOW_NONE)
+ TprintfT (DBG_LT0, "linetrace_ext_exec_prologue() ERROR: dbg_current_mode=%d, changing to FOLLOW_EXEC!\n", dbg_current_mode);
+ dbg_current_mode = FOLLOW_ON;
+ *following_exec = check_follow_exec (path);
+ if (path != NULL)
+ {
+ /* escape any newline, " or \ characters in the exec command */
+ TprintfT (DBG_LT3, "linetrace_ext_exec_prologue(): arg0=%s\n", path);
+ /* leave space in log message for terminator (and header) */
+ __collector_strlcpy (cmd_string, path, sizeof (cmd_string));
+ size_t len;
+ unsigned argn = 0;
+ if (argv[0])
+ {
+ char *p;
+ while (((p = argv[++argn]) != 0) &&
+ (len = __collector_strlen (cmd_string)) < sizeof (cmd_string) - 2)
+ {
+ cmd_string[len++] = ' ';
+ __collector_strlcpy (cmd_string + len, p, sizeof (cmd_string) - len);
+ }
+ }
+ }
+ TprintfT (DBG_LT0, "linetrace_ext_exec_prologue(%s), lineage=%s, follow=%d, prog=%s, path=%s \n",
+ variant, new_lineage, *following_exec, cmd_string, path);
+ return linetrace_ext_exec_prologue_end (variant, cmd_string, envp, *following_exec);
+}
+
+static void
+linetrace_ext_exec_epilogue (const char *variant, char *const envp[], const int ret, int *following_exec)
+{
+ /* For exec, this routine is only entered if the exec failed */
+ /* However, posix_spawn() is expected to return */
+ if (dbg_current_mode == FOLLOW_NONE)
+ TprintfT (DBG_LT0, "linetrace_ext_exec_epilogue() ERROR: dbg_current_mode=%d!\n", dbg_current_mode);
+ TprintfT (DBG_LT0, "linetrace_ext_exec_epilogue(%s):%d returned: %d, errno=%d\n",
+ variant, *following_exec, ret, errno);
+ if (!CALL_UTIL (strstr)(variant, "posix_spawn"))
+ {
+ __collector_linetrace_shutdown_hwcs_6830763_XXXX = 1;
+ __collector_resume_experiment ();
+ __collector_linetrace_shutdown_hwcs_6830763_XXXX = 0;
+ }
+ if (CALL_UTIL (strstr)(variant, "posix_spawn"))
+ {
+ __collector_ext_dispatcher_thread_timer_resume ();
+ __collector_linetrace_shutdown_hwcs_6830763_XXXX = 1;
+ __collector_ext_hwc_lwp_resume ();
+ __collector_linetrace_shutdown_hwcs_6830763_XXXX = 0;
+ }
+ hrtime_t ts = GETRELTIME ();
+ char msg[256];
+ if (ret)
+ {
+ char errmsg[256];
+ strerror_r (errno, errmsg, sizeof (errmsg));
+ CALL_UTIL (snprintf)(msg, sizeof (msg), "err %s", errmsg);
+ }
+ else
+ CALL_UTIL (snprintf)(msg, sizeof (msg), "rc=%d", ret);
+ if (!CALL_UTIL (strstr)(variant, "posix_spawn"))
+ __collector_log_write ("<event kind=\"%s\" tstamp=\"%u.%09u\" variant=\"%s\" lineage=\"%s\" follow=\"%d\" msg=\"%s\"/>\n",
+ SP_JCMD_EXEC_ERROR,
+ (unsigned) (ts / NANOSEC), (unsigned) (ts % NANOSEC),
+ variant, new_lineage, *following_exec, msg);
+ if (envp == NULL)
+ TprintfT (DBG_LT0, "linetrace_ext_exec_epilogue() ERROR: envp NULL after %s!\n", variant);
+ dbg_current_mode = FOLLOW_NONE;
+ *following_exec = 0;
+}
+
+static void
+linetrace_ext_combo_prologue (const char *variant, const char *cmd, int *following_combo)
+{
+ char cmd_string[_POSIX_ARG_MAX] = {'\0'};
+ char execfile[_POSIX_ARG_MAX] = {'\0'};
+
+ if (dbg_current_mode != FOLLOW_NONE)
+ TprintfT (DBG_LT0, "linetrace_ext_combo_prologue() ERROR: dbg_current_mode=%d! changing to FOLLOW_ON\n",
+ dbg_current_mode);
+ dbg_current_mode = FOLLOW_ON;
+ if (cmd != NULL)
+ {
+ /* extract executable name from combo command */
+ unsigned len = strcspn (cmd, " ");
+ __collector_strlcpy (execfile, cmd, len + 1);
+
+ /* escape any newline, " or \ characters in the combo command */
+ /* leave space in log message for terminator (and header) */
+ __collector_strlcpy (cmd_string, cmd, sizeof (cmd_string));
+ }
+
+ *following_combo = check_follow_combo (execfile);
+ TprintfT (DBG_LT0, "linetrace_ext_combo_prologue(%s) follow=%d, prog=%s\n\n",
+ variant, *following_combo, cmd_string);
+
+ /* Construct the lineage string for the new image */
+ new_lineage[0] = 0;
+ __collector_strcat (new_lineage, "XXX");
+
+ /* write message before suspending, or it won't be written */
+ hrtime_t ts = GETRELTIME ();
+ __collector_log_write ("<event kind=\"%s\" tstamp=\"%u.%09u\" variant=\"%s\" lineage=\"%s\" follow=\"%d\" msg=\"%s\"/>\n",
+ SP_JCMD_DESC_START,
+ (unsigned) (ts / NANOSEC), (unsigned) (ts % NANOSEC),
+ variant, new_lineage, *following_combo, cmd_string);
+ if (*following_combo)
+ {
+ __collector_env_update (NULL);
+ TprintfT (DBG_LT0, "linetrace_ext_combo_prologue(): Following %s(\"%s\")\n", variant, execfile);
+ }
+ __collector_ext_dispatcher_thread_timer_suspend ();
+ __collector_linetrace_shutdown_hwcs_6830763_XXXX = 1;
+ __collector_ext_hwc_lwp_suspend ();
+ __collector_linetrace_shutdown_hwcs_6830763_XXXX = 0;
+}
+
+static void
+linetrace_ext_combo_epilogue (const char *variant, const int ret, int *following_combo)
+{
+ if (dbg_current_mode == FOLLOW_NONE)
+ TprintfT (DBG_LT0, "linetrace_ext_combo_epilogue() ERROR: dbg_current_mode=FOLLOW_NONE\n");
+ TprintfT (DBG_LT0, "linetrace_ext_combo_epilogue(%s):%d() returned %d\n",
+ variant, *following_combo, ret);
+ __collector_ext_dispatcher_thread_timer_resume ();
+ __collector_linetrace_shutdown_hwcs_6830763_XXXX = 1;
+ __collector_ext_hwc_lwp_resume ();
+ __collector_linetrace_shutdown_hwcs_6830763_XXXX = 0;
+ hrtime_t ts = GETRELTIME ();
+ __collector_log_write ("<event kind=\"%s\" tstamp=\"%u.%09u\" variant=\"%s\" follow=\"%d\" msg=\"rc=%d\"/>\n",
+ SP_JCMD_DESC_STARTED,
+ (unsigned) (ts / NANOSEC), (unsigned) (ts % NANOSEC),
+ variant, *following_combo, ret);
+
+ dbg_current_mode = FOLLOW_NONE;
+ *following_combo = 0;
+}
+
+/*------------------------------------------------------------- fork */
+pid_t fork () __attribute__ ((weak, alias ("__collector_fork")));
+pid_t _fork () __attribute__ ((weak, alias ("__collector_fork")));
+
+pid_t
+__collector_fork (void)
+{
+ pid_t ret;
+ if (NULL_PTR (fork))
+ {
+ TprintfT (DBG_LT0, "__collector_fork() calling init_lineage_intf()\n");
+ init_lineage_intf ();
+ }
+ __collector_env_print ("__collector_fork start");
+ int * guard = NULL;
+ int combo_flag = (line_mode == LM_TRACK_LINEAGE) ? ((CHCK_REENTRANCE (guard)) ? 1 : 0) : 0;
+ TprintfT (DBG_LT0, "__collector_fork() interposition: line_mode=%d combo=%d\n",
+ line_mode, combo_flag);
+ if ((line_mode != LM_TRACK_LINEAGE) || combo_flag)
+ {
+ TprintfT (DBG_LT0, "__collector_fork() not following, returning CALL_REAL(fork)()\n");
+ return CALL_REAL (fork)();
+ }
+ int following_fork = 0;
+ linetrace_ext_fork_prologue ("fork", new_lineage, &following_fork);
+
+ /* since libpthread/fork ends up calling fork1, it's a combo */
+ PUSH_REENTRANCE (guard);
+ ret = CALL_REAL (fork)();
+ POP_REENTRANCE (guard);
+ linetrace_ext_fork_epilogue ("fork", ret, new_lineage, &following_fork);
+ return ret;
+}
+
+/*------------------------------------------------------------- vfork */
+/* vfork interposition in the usual sense is not possible, since vfork(2)
+ relies on specifics of the stack frames in the parent and child which
+ only work when the child's exec (or _exit) are in the same stack frame
+ as the vfork: this isn't the case when there's interposition on exec.
+ As a workaround, the interposing vfork calls fork1 instead of the real
+ vfork. Note that fork1 is somewhat less efficient than vfork, and requires
+ additional memory, which may result in a change of application behaviour
+ when libcollector is loaded (even when collection is not active),
+ affecting not only direct use of vfork by the subject application,
+ but also indirect use through system, popen, and the other combos.
+ */
+pid_t vfork () __attribute__ ((weak, alias ("__collector_vfork")));
+pid_t _vfork () __attribute__ ((weak, alias ("__collector_vfork")));
+
+pid_t
+__collector_vfork (void)
+{
+ if (NULL_PTR (vfork))
+ init_lineage_intf ();
+
+ int * guard = NULL;
+ int combo_flag = (line_mode == LM_TRACK_LINEAGE) ? ((CHCK_REENTRANCE (guard)) ? 1 : 0) : 0;
+
+ TprintfT (DBG_LT0, "__collector_vfork() interposing: line_mode=%d combo=%d\n",
+ line_mode, combo_flag);
+ if ((line_mode != LM_TRACK_LINEAGE) || combo_flag)
+ return CALL_REAL (fork)();
+
+ /* this warning is also appropriate for combos which use vfork,
+ however, let's assume this is achieved elsewhere */
+ (void) __collector_log_write ("<event kind=\"%s\" id=\"%d\">%s</event>\n", SP_JCMD_CWARN,
+ COL_WARN_VFORK, "fork");
+
+ char new_lineage[LT_MAXNAMELEN];
+ new_lineage[0] = 0;
+ int following_fork = 0;
+ linetrace_ext_fork_prologue ("vfork", new_lineage, &following_fork);
+
+ pid_t ret = CALL_REAL (fork)();
+ linetrace_ext_fork_epilogue ("vfork", ret, new_lineage, &following_fork);
+ return ret;
+}
+
+/*------------------------------------------------------------- execve */
+int execve () __attribute__ ((weak, alias ("__collector_execve")));
+
+int
+__collector_execve (const char* path, char *const argv[], char *const envp[])
+{
+ static char **coll_env = NULL; /* environment for collection */
+ if (NULL_PTR (execve))
+ init_lineage_intf ();
+ int * guard = NULL;
+ int combo_flag = (line_mode == LM_TRACK_LINEAGE) ? ((CHCK_REENTRANCE (guard)) ? 1 : 0) : 0;
+ TprintfT (DBG_LT0,
+ "__collector_execve(path=%s, argv[0]=%s, env[0]=%s) interposing: line_mode=%d combo=%d\n",
+ path ? path : "NULL",
+ argv ? (argv[0] ? argv[0] : "NULL") : "NULL",
+ envp ? (envp[0] ? envp[0] : "NULL") : "NULL",
+ line_mode, combo_flag);
+ if (line_mode == LM_CLOSED) /* ensure collection environment is sanitised */
+ __collector_env_unset ((char**) envp);
+ if (line_mode != LM_TRACK_LINEAGE || combo_flag)
+ return CALL_REAL (execve)(path, argv, envp);
+
+ int following_exec = 0;
+ coll_env = linetrace_ext_exec_prologue ("execve", path, argv, envp, &following_exec);
+ TprintfT (DBG_LT2, "__collector_execve(): coll_env=0x%p\n", coll_env);
+ __collector_env_printall ("__collector_execve", coll_env);
+ int ret = CALL_REAL (execve)(path, argv, coll_env);
+ linetrace_ext_exec_epilogue ("execve", envp, ret, &following_exec);
+ return ret;
+}
+
+int execvp () __attribute__ ((weak, alias ("__collector_execvp")));
+
+int
+__collector_execvp (const char* file, char *const argv[])
+{
+ extern char **environ; /* the process' actual environment */
+ char ** envp = environ;
+ if (NULL_PTR (execvp))
+ init_lineage_intf ();
+ int * guard = NULL;
+ int combo_flag = (line_mode == LM_TRACK_LINEAGE) ? ((CHCK_REENTRANCE (guard)) ? 1 : 0) : 0;
+ TprintfT (DBG_LT0,
+ "__collector_execvp(file=%s, argv[0]=%s) interposing: line_mode=%d combo=%d\n",
+ file ? file : "NULL", argv ? (argv[0] ? argv[0] : "NULL") : "NULL",
+ line_mode, combo_flag);
+ if (line_mode == LM_CLOSED) /* ensure collection environment is sanitised */
+ __collector_env_unset ((char**) envp);
+ if ((line_mode != LM_TRACK_LINEAGE) || combo_flag)
+ return CALL_REAL (execvp)(file, argv);
+
+ int following_exec = 0;
+#ifdef DEBUG
+ char **coll_env = /* environment for collection */
+#endif /* DEBUG */
+ linetrace_ext_exec_prologue ("execvp", file, argv, envp, &following_exec);
+ TprintfT (DBG_LT0, "__collector_execvp(): coll_env=0x%p\n", coll_env);
+
+ int ret = CALL_REAL (execvp)(file, argv);
+ linetrace_ext_exec_epilogue ("execvp", envp, ret, &following_exec);
+ return ret;
+}
+
+int execv () __attribute__ ((weak, alias ("__collector_execv")));
+
+int
+__collector_execv (const char* path, char *const argv[])
+{
+ int ret;
+ extern char **environ; /* the process' actual environment */
+ char ** envp = environ;
+ TprintfT (DBG_LT0, "__collector_execv(path=%s, argv[0]=%s) interposing: line_mode=%d combo=%d\n",
+ path ? path : "NULL", argv ? (argv[0] ? argv[0] : "NULL") : "NULL",
+ line_mode, get_combo_flag ());
+
+ ret = __collector_execve (path, argv, envp);
+ return ret;
+}
+
+int execle (const char* path, const char *arg0, ...) __attribute__ ((weak, alias ("__collector_execle")));
+
+int
+__collector_execle (const char* path, const char *arg0, ...)
+{
+ TprintfT (DBG_LT0,
+ "__collector_execle(path=%s, arg0=%s) interposing: line_mode=%d combo=%d\n",
+ path ? path : "NULL", arg0 ? arg0 : "NULL",
+ line_mode, get_combo_flag ());
+
+ char **argp;
+ va_list args;
+ char **argvec;
+ register char **environmentp;
+ int nargs = 0;
+ char *nextarg;
+
+ va_start (args, arg0);
+ while (va_arg (args, char *) != (char *) 0)
+ nargs++;
+
+ /*
+ * save the environment pointer, which is at the end of the
+ * variable argument list
+ */
+ environmentp = va_arg (args, char **);
+ va_end (args);
+
+ /*
+ * load the arguments in the variable argument list
+ * into the argument vector, and add the terminating null pointer
+ */
+ va_start (args, arg0);
+ /* workaround for bugid 1242839 */
+ argvec = (char **) alloca ((size_t) ((nargs + 2) * sizeof (char *)));
+ argp = argvec;
+ *argp++ = (char *) arg0;
+ while ((nextarg = va_arg (args, char *)) != (char *) 0)
+ *argp++ = nextarg;
+ va_end (args);
+ *argp = (char *) 0;
+ return __collector_execve (path, argvec, environmentp);
+}
+
+int execlp (const char* file, const char *arg0, ...) __attribute__ ((weak, alias ("__collector_execlp")));
+
+int
+__collector_execlp (const char* file, const char *arg0, ...)
+{
+ TprintfT (DBG_LT0,
+ "__collector_execlp(file=%s, arg0=%s) interposing: line_mode=%d combo=%d\n",
+ file ? file : "NULL", arg0 ? arg0 : "NULL",
+ line_mode, get_combo_flag ());
+ char **argp;
+ va_list args;
+ char **argvec;
+ int nargs = 0;
+ char *nextarg;
+
+ va_start (args, arg0);
+ while (va_arg (args, char *) != (char *) 0)
+ nargs++;
+ va_end (args);
+
+ /*
+ * load the arguments in the variable argument list
+ * into the argument vector and add the terminating null pointer
+ */
+ va_start (args, arg0);
+
+ /* workaround for bugid 1242839 */
+ argvec = (char **) alloca ((size_t) ((nargs + 2) * sizeof (char *)));
+ argp = argvec;
+ *argp++ = (char *) arg0;
+ while ((nextarg = va_arg (args, char *)) != (char *) 0)
+ *argp++ = nextarg;
+ va_end (args);
+ *argp = (char *) 0;
+ return __collector_execvp (file, argvec);
+}
+
+int execl (const char* path, const char *arg0, ...) __attribute__ ((weak, alias ("__collector_execl")));
+
+int
+__collector_execl (const char* path, const char *arg0, ...)
+{
+ TprintfT (DBG_LT0,
+ "__collector_execl(path=%s, arg0=%s) interposing: line_mode=%d combo=%d\n",
+ path ? path : "NULL", arg0 ? arg0 : "NULL",
+ line_mode, get_combo_flag ());
+ char **argp;
+ va_list args;
+ char **argvec;
+ extern char **environ;
+ int nargs = 0;
+ char *nextarg;
+ va_start (args, arg0);
+ while (va_arg (args, char *) != (char *) 0)
+ nargs++;
+ va_end (args);
+
+ /*
+ * load the arguments in the variable argument list
+ * into the argument vector and add the terminating null pointer
+ */
+ va_start (args, arg0);
+
+ /* workaround for bugid 1242839 */
+ argvec = (char **) alloca ((size_t) ((nargs + 2) * sizeof (char *)));
+ argp = argvec;
+ *argp++ = (char *) arg0;
+ while ((nextarg = va_arg (args, char *)) != (char *) 0)
+ *argp++ = nextarg;
+ va_end (args);
+ *argp = (char *) 0;
+ return __collector_execve (path, argvec, environ);
+}
+
+#include <spawn.h>
+
+/*-------------------------------------------------------- posix_spawn */
+#if ARCH(Intel)
+// map interposed symbol versions
+static int
+__collector_posix_spawn_symver (int(real_posix_spawn) (),
+ pid_t *pidp, const char *path,
+ const posix_spawn_file_actions_t *file_actions,
+ const posix_spawnattr_t *attrp,
+ char *const argv[], char *const envp[]);
+
+SYMVER_ATTRIBUTE (__collector_posix_spawn_2_15, posix_spawn@@GLIBC_2.15)
+int
+__collector_posix_spawn_2_15 (pid_t *pidp, const char *path,
+ const posix_spawn_file_actions_t *file_actions,
+ const posix_spawnattr_t *attrp,
+ char *const argv[], char *const envp[])
+{
+ TprintfT (DBG_LTT, "linetrace: GLIBC: __collector_posix_spawn_2_15@%p(path=%s, argv[0]=%s, env[0]=%s)\n",
+ CALL_REAL (posix_spawn_2_15), path ? path : "NULL", argv ? (argv[0] ? argv[0] : "NULL") : "NULL", envp ? (envp[0] ? envp[0] : "NULL") : "NULL");
+ if (NULL_PTR (posix_spawn))
+ init_lineage_intf ();
+ return __collector_posix_spawn_symver (CALL_REAL (posix_spawn_2_15), pidp,
+ path, file_actions, attrp, argv, envp);
+}
+
+#if WSIZE(32)
+SYMVER_ATTRIBUTE (__collector_posix_spawn_2_2, posix_spawn@GLIBC_2.2)
+int
+__collector_posix_spawn_2_2 (pid_t *pidp, const char *path,
+ const posix_spawn_file_actions_t *file_actions,
+ const posix_spawnattr_t *attrp,
+ char *const argv[], char *const envp[])
+{
+ TprintfT (DBG_LTT, "linetrace: GLIBC: __collector_posix_spawn_2_2@%p(path=%s, argv[0]=%s, env[0]=%s)\n",
+ CALL_REAL (posix_spawn_2_2), path ? path : "NULL", argv ? (argv[0] ? argv[0] : "NULL") : "NULL", envp ? (envp[0] ? envp[0] : "NULL") : "NULL");
+ if (NULL_PTR (posix_spawn))
+ init_lineage_intf ();
+ return __collector_posix_spawn_symver (CALL_REAL (posix_spawn_2_2), pidp,
+ path, file_actions, attrp, argv, envp);
+}
+
+#else /* ^WSIZE(32) */
+SYMVER_ATTRIBUTE (__collector_posix_spawn_2_2_5, posix_spawn@GLIBC_2.2.5)
+int
+__collector_posix_spawn_2_2_5 (pid_t *pidp, const char *path,
+ const posix_spawn_file_actions_t *file_actions,
+ const posix_spawnattr_t *attrp,
+ char *const argv[], char *const envp[])
+{
+ TprintfT (DBG_LTT, "linetrace: GLIBC: __collector_posix_spawn_2_2_5@%p(path=%s, argv[0]=%s, env[0]=%s)\n",
+ CALL_REAL (posix_spawn_2_2_5), path ? path : "NULL", argv ? (argv[0] ? argv[0] : "NULL") : "NULL", envp ? (envp[0] ? envp[0] : "NULL") : "NULL");
+ if (NULL_PTR (posix_spawn))
+ init_lineage_intf ();
+ return __collector_posix_spawn_symver (CALL_REAL (posix_spawn_2_2_5), pidp,
+ path, file_actions, attrp, argv, envp);
+}
+#endif /* ^WSIZE(32) */
+
+static int
+__collector_posix_spawn_symver (int(real_posix_spawn) (),
+#else /* ^ARCH(Intel) */
+int
+__collector_posix_spawn (
+#endif /* ARCH() */
+ pid_t *pidp, const char *path,
+ const posix_spawn_file_actions_t *file_actions,
+ const posix_spawnattr_t *attrp,
+ char *const argv[], char *const envp[])
+{
+ int ret;
+ static char **coll_env = NULL; /* environment for collection */
+ if (NULL_PTR (posix_spawn))
+ init_lineage_intf ();
+ if (NULL_PTR (posix_spawn))
+ {
+ TprintfT (DBG_LT0, "__collector_posix_spawn(path=%s) interposing: ERROR, posix_spawn() not found by dlsym\n",
+ path ? path : "NULL");
+ return -1; /* probably should set errno */
+ }
+ int * guard = NULL;
+ int combo_flag = (line_mode == LM_TRACK_LINEAGE) ? ((CHCK_REENTRANCE (guard)) ? 1 : 0) : 0;
+ TprintfT (DBG_LT0, "__collector_posix_spawn(path=%s, argv[0]=%s, env[0]=%s) interposing: line_mode=%d combo=%d\n",
+ path ? path : "NULL", argv ? (argv[0] ? argv[0] : "NULL") : "NULL", envp ? (envp[0] ? envp[0] : "NULL") : "NULL", line_mode, combo_flag);
+ if (line_mode == LM_CLOSED) /* ensure collection environment is sanitised */
+ __collector_env_unset ((char**) envp);
+
+ if ((line_mode != LM_TRACK_LINEAGE) || combo_flag)
+ {
+#if ARCH(Intel)
+ return (real_posix_spawn) (pidp, path, file_actions, attrp, argv, envp);
+#else
+ return CALL_REAL (posix_spawn)(pidp, path, file_actions, attrp, argv, envp);
+#endif
+ }
+ int following_exec = 0;
+ coll_env = linetrace_ext_exec_prologue ("posix_spawn", path, argv, envp, &following_exec);
+ TprintfT (DBG_LT0, "__collector_posix_spawn(): coll_env=0x%p\n", coll_env);
+ __collector_env_printall ("__collector_posix_spawn", coll_env);
+ PUSH_REENTRANCE (guard);
+#if ARCH(Intel)
+ ret = (real_posix_spawn) (pidp, path, file_actions, attrp, argv, coll_env);
+#else
+ ret = CALL_REAL (posix_spawn)(pidp, path, file_actions, attrp, argv, coll_env);
+#endif
+ POP_REENTRANCE (guard);
+ linetrace_ext_exec_epilogue ("posix_spawn", envp, ret, &following_exec);
+ return ret;
+}
+
+/*-------------------------------------------------------- posix_spawnp */
+#if ARCH(Intel)
+// map interposed symbol versions
+
+static int
+__collector_posix_spawnp_symver (int(real_posix_spawnp) (), pid_t *pidp,
+ const char *path,
+ const posix_spawn_file_actions_t *file_actions,
+ const posix_spawnattr_t *attrp,
+ char *const argv[], char *const envp[]);
+
+SYMVER_ATTRIBUTE (__collector_posix_spawnp_2_15, posix_spawnp@@GLIBC_2.15)
+int // Common interposition
+__collector_posix_spawnp_2_15 (pid_t *pidp, const char *path,
+ const posix_spawn_file_actions_t *file_actions,
+ const posix_spawnattr_t *attrp,
+ char *const argv[], char *const envp[])
+{
+ TprintfT (DBG_LTT, "linetrace: GLIBC: __collector_posix_spawnp_2_15@%p(path=%s, argv[0]=%s, env[0]=%s)\n",
+ CALL_REAL (posix_spawnp_2_15), path ? path : "NULL", argv ? (argv[0] ? argv[0] : "NULL") : "NULL", envp ? (envp[0] ? envp[0] : "NULL") : "NULL");
+ if (NULL_PTR (posix_spawnp))
+ init_lineage_intf ();
+ return __collector_posix_spawnp_symver (CALL_REAL (posix_spawnp_2_15), pidp,
+ path, file_actions, attrp, argv, envp);
+}
+
+#if WSIZE(32)
+
+SYMVER_ATTRIBUTE (__collector_posix_spawnp_2_2, posix_spawnp@GLIBC_2.2)
+int
+__collector_posix_spawnp_2_2 (pid_t *pidp, const char *path,
+ const posix_spawn_file_actions_t *file_actions,
+ const posix_spawnattr_t *attrp,
+ char *const argv[], char *const envp[])
+{
+ TprintfT (DBG_LTT, "linetrace: GLIBC: __collector_posix_spawnp_2_2@%p(path=%s, argv[0]=%s, env[0]=%s)\n",
+ CALL_REAL (posix_spawnp_2_2), path ? path : "NULL", argv ? (argv[0] ? argv[0] : "NULL") : "NULL", envp ? (envp[0] ? envp[0] : "NULL") : "NULL");
+ if (NULL_PTR (posix_spawnp))
+ init_lineage_intf ();
+ return __collector_posix_spawnp_symver (CALL_REAL (posix_spawnp_2_2), pidp,
+ path, file_actions, attrp, argv, envp);
+}
+
+#else /* ^WSIZE(32) */
+SYMVER_ATTRIBUTE (__collector_posix_spawnp_2_2_5, posix_spawnp@GLIBC_2.2.5)
+int
+__collector_posix_spawnp_2_2_5 (pid_t *pidp, const char *path,
+ const posix_spawn_file_actions_t *file_actions,
+ const posix_spawnattr_t *attrp,
+ char *const argv[], char *const envp[])
+{
+ TprintfT (DBG_LTT, "linetrace: GLIBC: __collector_posix_spawnp_2_2_5@%p(path=%s, argv[0]=%s, env[0]=%s)\n",
+ CALL_REAL (posix_spawnp_2_2_5), path ? path : "NULL", argv ? (argv[0] ? argv[0] : "NULL") : "NULL", envp ? (envp[0] ? envp[0] : "NULL") : "NULL");
+ if (NULL_PTR (posix_spawnp))
+ init_lineage_intf ();
+ return __collector_posix_spawnp_symver (CALL_REAL (posix_spawnp_2_2_5), pidp,
+ path, file_actions, attrp, argv, envp);
+}
+
+#endif /* ^WSIZE(32) */
+
+static int
+__collector_posix_spawnp_symver (int(real_posix_spawnp) (),
+#else /* ^ARCH(Intel) */
+int
+__collector_posix_spawnp (
+#endif /* ARCH() */
+ pid_t *pidp, const char *path,
+ const posix_spawn_file_actions_t *file_actions,
+ const posix_spawnattr_t *attrp,
+ char *const argv[], char *const envp[]){
+ int ret;
+ static char **coll_env = NULL; /* environment for collection */
+ if (NULL_PTR (posix_spawnp))
+ init_lineage_intf ();
+ if (NULL_PTR (posix_spawnp))
+ {
+ TprintfT (DBG_LT0, "__collector_posix_spawnp(path=%s) interposing: ERROR, posix_spawnp() not found by dlsym\n",
+ path ? path : "NULL");
+ return -1; /* probably should set errno */
+ }
+ int * guard = NULL;
+ int combo_flag = (line_mode == LM_TRACK_LINEAGE) ? ((CHCK_REENTRANCE (guard)) ? 1 : 0) : 0;
+ TprintfT (DBG_LT0, "__collector_posix_spawnp(path=%s, argv[0]=%s, env[0]=%s) interposing: line_mode=%d combo=%d\n",
+ path ? path : "NULL", argv ? (argv[0] ? argv[0] : "NULL") : "NULL",
+ envp ? (envp[0] ? envp[0] : "NULL") : "NULL", line_mode, combo_flag);
+
+ if (line_mode == LM_CLOSED) /* ensure collection environment is sanitised */
+ __collector_env_unset ((char**) envp);
+ if (line_mode != LM_TRACK_LINEAGE || combo_flag)
+ {
+#if ARCH(Intel)
+ return (real_posix_spawnp) (pidp, path, file_actions, attrp, argv, envp);
+#else
+ return CALL_REAL (posix_spawnp)(pidp, path, file_actions, attrp, argv, envp);
+#endif
+ }
+ int following_exec = 0;
+ coll_env = linetrace_ext_exec_prologue ("posix_spawnp", path, argv, envp, &following_exec);
+ TprintfT (DBG_LT0, "__collector_posix_spawnp(): coll_env=0x%p\n", coll_env);
+ __collector_env_printall ("__collector_posix_spawnp", coll_env);
+ PUSH_REENTRANCE (guard);
+#if ARCH(Intel)
+ ret = (real_posix_spawnp) (pidp, path, file_actions, attrp, argv, coll_env);
+#else
+ ret = CALL_REAL (posix_spawnp)(pidp, path, file_actions, attrp, argv, coll_env);
+#endif
+ POP_REENTRANCE (guard);
+ linetrace_ext_exec_epilogue ("posix_spawnp", envp, ret, &following_exec);
+ return ret;
+}
+
+/*------------------------------------------------------------- system */
+int system () __attribute__ ((weak, alias ("__collector_system")));
+
+int
+__collector_system (const char *cmd)
+{
+ if (NULL_PTR (system))
+ init_lineage_intf ();
+ TprintfT (DBG_LT0,
+ "__collector_system(cmd=%s) interposing: line_mode=%d combo=%d\n",
+ cmd ? cmd : "NULL", line_mode, get_combo_flag ());
+ int *guard = NULL;
+ if (line_mode == LM_TRACK_LINEAGE)
+ INIT_REENTRANCE (guard);
+ if (guard == NULL)
+ return CALL_REAL (system)(cmd);
+ int following_combo = 0;
+ linetrace_ext_combo_prologue ("system", cmd, &following_combo);
+ PUSH_REENTRANCE (guard);
+ int ret = CALL_REAL (system)(cmd);
+ POP_REENTRANCE (guard);
+ linetrace_ext_combo_epilogue ("system", ret, &following_combo);
+ return ret;
+}
+
+/*------------------------------------------------------------- popen */
+// map interposed symbol versions
+#if ARCH(Intel) && WSIZE(32)
+static FILE *
+__collector_popen_symver (FILE*(real_popen) (), const char *cmd, const char *mode);
+
+SYMVER_ATTRIBUTE (__collector_popen_2_1, popen@@GLIBC_2.1)
+FILE *
+__collector_popen_2_1 (const char *cmd, const char *mode)
+{
+ if (NULL_PTR (popen))
+ init_lineage_intf ();
+ TprintfT (DBG_LTT, "linetrace: GLIBC: __collector_popen_2_1@%p\n", CALL_REAL (popen_2_1));
+ return __collector_popen_symver (CALL_REALF (popen_2_1), cmd, mode);
+}
+
+SYMVER_ATTRIBUTE (__collector_popen_2_0, popen@GLIBC_2.0)
+FILE *
+__collector_popen_2_0 (const char *cmd, const char *mode)
+{
+ if (NULL_PTR (popen))
+ init_lineage_intf ();
+ TprintfT (DBG_LTT, "linetrace: GLIBC: __collector_popen_2_0@%p\n", CALL_REAL (popen_2_0));
+ return __collector_popen_symver (CALL_REALF (popen_2_0), cmd, mode);
+}
+
+SYMVER_ATTRIBUTE (__collector__popen_2_1, _popen@@GLIBC_2.1)
+FILE *
+__collector__popen_2_1 (const char *cmd, const char *mode)
+{
+ if (NULL_PTR (popen))
+ init_lineage_intf ();
+ TprintfT (DBG_LTT, "linetrace: GLIBC: __collector__popen_2_1@%p\n", CALL_REAL (popen_2_1));
+ return __collector_popen_symver (CALL_REALF (popen_2_1), cmd, mode);
+}
+
+SYMVER_ATTRIBUTE (__collector__popen_2_0, _popen@GLIBC_2.0)
+FILE *
+__collector__popen_2_0 (const char *cmd, const char *mode)
+{
+ if (NULL_PTR (popen))
+ init_lineage_intf ();
+ return __collector_popen_symver (CALL_REALF (popen_2_0), cmd, mode);
+}
+#else // WSIZE(64)
+FILE * popen () __attribute__ ((weak, alias ("__collector_popen")));
+#endif
+
+#if ARCH(Intel) && WSIZE(32)
+static FILE *
+__collector_popen_symver (FILE*(real_popen) (), const char *cmd, const char *mode)
+#else
+
+FILE *
+__collector_popen (const char *cmd, const char *mode)
+#endif
+{
+ FILE *ret;
+ if (NULL_PTR (popen))
+ init_lineage_intf ();
+ TprintfT (DBG_LT0,
+ "__collector_popen(cmd=%s) interposing: line_mode=%d combo=%d\n",
+ cmd ? cmd : "NULL", line_mode, get_combo_flag ());
+ int *guard = NULL;
+ if (line_mode == LM_TRACK_LINEAGE)
+ INIT_REENTRANCE (guard);
+ if (guard == NULL)
+ {
+#if ARCH(Intel) && WSIZE(32)
+ return (real_popen) (cmd, mode);
+#else
+ return CALL_REALF (popen)(cmd, mode);
+#endif
+ }
+ int following_combo = 0;
+ linetrace_ext_combo_prologue ("popen", cmd, &following_combo);
+ PUSH_REENTRANCE (guard);
+#if ARCH(Intel) && WSIZE(32)
+ ret = (real_popen) (cmd, mode);
+#else
+ ret = CALL_REALF (popen)(cmd, mode);
+#endif
+ POP_REENTRANCE (guard);
+ linetrace_ext_combo_epilogue ("popen", (ret == NULL) ? (-1) : 0, &following_combo);
+ return ret;
+}
+
+/*------------------------------------------------------------- grantpt */
+int grantpt () __attribute__ ((weak, alias ("__collector_grantpt")));
+
+int
+__collector_grantpt (const int fildes)
+{
+ if (NULL_PTR (grantpt))
+ init_lineage_intf ();
+ TprintfT (DBG_LT0,
+ "__collector_grantpt(%d) interposing: line_mode=%d combo=%d\n",
+ fildes, line_mode, get_combo_flag ());
+ int *guard = NULL;
+ if (line_mode == LM_TRACK_LINEAGE)
+ INIT_REENTRANCE (guard);
+ if (guard == NULL)
+ return CALL_REAL (grantpt)(fildes);
+ int following_combo = 0;
+ linetrace_ext_combo_prologue ("grantpt", "/usr/lib/pt_chmod", &following_combo);
+ PUSH_REENTRANCE (guard);
+ int ret = CALL_REAL (grantpt)(fildes);
+ POP_REENTRANCE (guard);
+ linetrace_ext_combo_epilogue ("grantpt", ret, &following_combo);
+ return ret;
+}
+
+/*------------------------------------------------------------- ptsname */
+char *ptsname () __attribute__ ((weak, alias ("__collector_ptsname")));
+
+char *
+__collector_ptsname (const int fildes)
+{
+ if (NULL_PTR (ptsname))
+ init_lineage_intf ();
+ TprintfT (DBG_LT0,
+ "__collector_ptsname(%d) interposing: line_mode=%d combo=%d\n",
+ fildes, line_mode, get_combo_flag ());
+ int *guard = NULL;
+ if (line_mode == LM_TRACK_LINEAGE)
+ INIT_REENTRANCE (guard);
+ if (guard == NULL)
+ return CALL_REALC (ptsname)(fildes);
+ int following_combo = 0;
+ linetrace_ext_combo_prologue ("ptsname", "/usr/lib/pt_chmod", &following_combo);
+ PUSH_REENTRANCE (guard);
+ char *ret = CALL_REALC (ptsname)(fildes);
+ POP_REENTRANCE (guard);
+ linetrace_ext_combo_epilogue ("ptsname", (ret == NULL) ? (-1) : 1, &following_combo);
+ return ret;
+}
+
+/*------------------------------------------------------------- clone */
+/* clone can be fork-like or pthread_create-like, depending on whether
+ * the flag CLONE_VM is set. If CLONE_VM is not set, then we interpose
+ * clone in the way similar to interposing fork; if CLONE_VM is set,
+ * then we interpose clone in the way similar to interposing pthread_create.
+ * One special case is not handled: when CLONE_VM is set but CLONE_THREAD
+ * is not, if the parent process exits earlier than the child process,
+ * experiment will close, losing data from child process.
+ */
+typedef struct __collector_clone_arg
+{
+ int (*fn)(void *);
+ void * arg;
+ char * new_lineage;
+ int following_fork;
+} __collector_clone_arg_t;
+
+static int
+__collector_clone_fn (void *fn_arg)
+{
+ int (*fn)(void *) = ((__collector_clone_arg_t*) fn_arg)->fn;
+ void * arg = ((__collector_clone_arg_t*) fn_arg)->arg;
+ char * new_lineage = ((__collector_clone_arg_t*) fn_arg)->new_lineage;
+ int following_fork = ((__collector_clone_arg_t*) fn_arg)->following_fork;
+ __collector_freeCSize (__collector_heap, fn_arg, sizeof (__collector_clone_arg_t));
+ linetrace_ext_fork_epilogue ("clone", 0, new_lineage, &following_fork);
+ return fn (arg);
+}
+
+int clone (int (*fn)(void *), void *, int, void *, ...) __attribute__ ((weak, alias ("__collector_clone")));
+
+int
+__collector_clone (int (*fn)(void *), void *child_stack, int flags, void *arg,
+ ... /* pid_t *ptid, struct user_desc *tls, pid_t *" ctid" */)
+{
+ int ret;
+ va_list va;
+ if (flags & CLONE_VM)
+ {
+ va_start (va, arg);
+ ret = __collector_ext_clone_pthread (fn, child_stack, flags, arg, va);
+ va_end (va);
+ }
+ else
+ {
+ if (NULL_PTR (clone))
+ init_lineage_intf ();
+ int *guard = NULL;
+ int combo_flag = (line_mode == LM_TRACK_LINEAGE) ? ((CHCK_REENTRANCE (guard)) ? 1 : 0) : 0;
+ TprintfT (DBG_LT0, "__collector_clone() interposition: line_mode=%d combo=%d\n",
+ line_mode, combo_flag);
+ char new_lineage[LT_MAXNAMELEN];
+ int following_fork = 0;
+ __collector_clone_arg_t *funcinfo = __collector_allocCSize (__collector_heap, sizeof (__collector_clone_arg_t), 1);
+ (*funcinfo).fn = fn;
+ (*funcinfo).arg = arg;
+ (*funcinfo).new_lineage = new_lineage;
+ (*funcinfo).following_fork = 0;
+ pid_t * ptid = NULL;
+ struct user_desc * tls = NULL;
+ pid_t * ctid = NULL;
+ int num_args = 0;
+ va_start (va, arg);
+ if (flags & (CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID))
+ {
+ ptid = va_arg (va, pid_t *);
+ tls = va_arg (va, struct user_desc*);
+ ctid = va_arg (va, pid_t *);
+ num_args = 3;
+ }
+ else if (flags & CLONE_SETTLS)
+ {
+ ptid = va_arg (va, pid_t *);
+ tls = va_arg (va, struct user_desc*);
+ num_args = 2;
+ }
+ else if (flags & CLONE_PARENT_SETTID)
+ {
+ ptid = va_arg (va, pid_t *);
+ num_args = 1;
+ }
+ if ((line_mode != LM_TRACK_LINEAGE) || combo_flag || funcinfo == NULL)
+ {
+ switch (num_args)
+ {
+ case 3:
+ ret = CALL_REAL (clone)(fn, child_stack, flags, arg, ptid, tls, ctid);
+ break;
+ case 2:
+ ret = CALL_REAL (clone)(fn, child_stack, flags, arg, ptid, tls);
+ break;
+ case 1:
+ ret = CALL_REAL (clone)(fn, child_stack, flags, arg, ptid);
+ break;
+ default:
+ ret = CALL_REAL (clone)(fn, child_stack, flags, arg);
+ break;
+ }
+
+ va_end (va);
+ return ret;
+ }
+ linetrace_ext_fork_prologue ("clone", new_lineage, &following_fork);
+ (*funcinfo).following_fork = following_fork;
+ switch (num_args)
+ {
+ case 3:
+ ret = CALL_REAL (clone)(__collector_clone_fn, child_stack, flags, funcinfo, ptid, tls, ctid);
+ break;
+ case 2:
+ ret = CALL_REAL (clone)(__collector_clone_fn, child_stack, flags, funcinfo, ptid, tls);
+ break;
+ case 1:
+ ret = CALL_REAL (clone)(__collector_clone_fn, child_stack, flags, funcinfo, ptid);
+ break;
+ default:
+ ret = CALL_REAL (clone)(__collector_clone_fn, child_stack, flags, funcinfo);
+ break;
+ }
+ va_end (va);
+ if (ret < 0)
+ __collector_freeCSize (__collector_heap, funcinfo, sizeof (__collector_clone_arg_t));
+ TprintfT (DBG_LT0, "__collector_clone() interposing: pid=%d\n", ret);
+ linetrace_ext_fork_epilogue ("clone", ret, new_lineage, &following_fork);
+ }
+ return ret;
+}
+
+/*-------------------------------------------------------------------- setuid */
+int setuid () __attribute__ ((weak, alias ("__collector_setuid")));
+int _setuid () __attribute__ ((weak, alias ("__collector_setuid")));
+
+int
+__collector_setuid (uid_t ruid)
+{
+ if (NULL_PTR (setuid))
+ init_lineage_intf ();
+ TprintfT (DBG_LT0, "__collector_setuid(0x%x) interposing\n", ruid);
+ check_reuid_change (ruid, -1);
+ int ret = CALL_REAL (setuid)(ruid);
+ TprintfT (DBG_LT0, "__collector_setuid(0x%x) returning %d\n", ruid, ret);
+ return ret;
+}
+
+/*------------------------------------------------------------------- seteuid */
+int seteuid () __attribute__ ((weak, alias ("__collector_seteuid")));
+int _seteuid () __attribute__ ((weak, alias ("__collector_seteuid")));
+
+int
+__collector_seteuid (uid_t euid)
+{
+ if (NULL_PTR (seteuid))
+ init_lineage_intf ();
+ TprintfT (DBG_LT0, "__collector_seteuid(0x%x) interposing\n", euid);
+ check_reuid_change (-1, euid);
+ int ret = CALL_REAL (seteuid)(euid);
+ TprintfT (DBG_LT0, "__collector_seteuid(0x%x) returning %d\n", euid, ret);
+ return ret;
+}
+
+/*------------------------------------------------------------------ setreuid */
+int setreuid () __attribute__ ((weak, alias ("__collector_setreuid")));
+int _setreuid () __attribute__ ((weak, alias ("__collector_setreuid")));
+
+int
+__collector_setreuid (uid_t ruid, uid_t euid)
+{
+ if (NULL_PTR (setreuid))
+ init_lineage_intf ();
+ TprintfT (DBG_LT0, "__collector_setreuid(0x%x,0x%x) interposing\n", ruid, euid);
+ check_reuid_change (ruid, euid);
+ int ret = CALL_REAL (setreuid)(ruid, euid);
+ TprintfT (DBG_LT0, "__collector_setreuid(0x%x,0x%x) returning %d\n", ruid, euid, ret);
+ return ret;
+}
+
+/*-------------------------------------------------------------------- setgid */
+int setgid () __attribute__ ((weak, alias ("__collector_setgid")));
+int _setgid () __attribute__ ((weak, alias ("__collector_setgid")));
+
+int
+__collector_setgid (gid_t rgid)
+{
+ if (NULL_PTR (setgid))
+ init_lineage_intf ();
+ TprintfT (DBG_LT0, "__collector_setgid(0x%x) interposing\n", rgid);
+ check_regid_change (rgid, -1);
+ int ret = CALL_REAL (setgid)(rgid);
+ TprintfT (DBG_LT0, "__collector_setgid(0x%x) returning %d\n", rgid, ret);
+ return ret;
+}
+
+/*------------------------------------------------------------------- setegid */
+int setegid () __attribute__ ((weak, alias ("__collector_setegid")));
+int _setegid () __attribute__ ((weak, alias ("__collector_setegid")));
+
+int
+__collector_setegid (gid_t egid)
+{
+ if (NULL_PTR (setegid))
+ init_lineage_intf ();
+ TprintfT (DBG_LT0, "__collector_setegid(0x%x) interposing\n", egid);
+ check_regid_change (-1, egid);
+ int ret = CALL_REAL (setegid)(egid);
+ TprintfT (DBG_LT0, "__collector_setegid(0x%x) returning %d\n", egid, ret);
+ return ret;
+}
+
+/*------------------------------------------------------------------ setregid */
+int setregid () __attribute__ ((weak, alias ("__collector_setregid")));
+int _setregid () __attribute__ ((weak, alias ("__collector_setregid")));
+
+int
+__collector_setregid (gid_t rgid, gid_t egid)
+{
+ if (NULL_PTR (setregid))
+ init_lineage_intf ();
+ TprintfT (DBG_LT0, "__collector_setregid(0x%x,0x%x) interposing\n", rgid, egid);
+ check_regid_change (rgid, egid);
+ int ret = CALL_REAL (setregid)(rgid, egid);
+ TprintfT (DBG_LT0, "__collector_setregid(0x%x,0x%x) returning %d\n", rgid, egid, ret);
+ return ret;
+}
+
+/*------------------------------------------------------- selective following */
+
+static int
+linetrace_follow_experiment (const char *follow_spec, const char *lineage_str, const char *progname)
+{
+ regex_t regex_desc;
+ if (!follow_spec)
+ {
+ TprintfT (DBG_LT0, "linetrace_follow_experiment(): MATCHES NULL follow_spec\n");
+ return 1;
+ }
+ int ercode = regcomp (&regex_desc, follow_spec, REG_EXTENDED | REG_NOSUB | REG_NEWLINE);
+ if (ercode)
+ {
+ // syntax error in parsing string
+#ifdef DEBUG
+ char errbuf[256];
+ regerror (ercode, &regex_desc, errbuf, sizeof (errbuf));
+ TprintfT (DBG_LT0, "linetrace_follow_experiment: regerror()=%s\n", errbuf);
+#endif
+ return 1;
+ }
+ TprintfT (DBG_LT0, "linetrace_follow_experiment(): compiled spec='%s'\n", follow_spec);
+ if (lineage_str)
+ {
+ if (!regexec (&regex_desc, lineage_str, 0, NULL, 0))
+ {
+ TprintfT (DBG_LT0, "linetrace_follow_experiment(): MATCHES lineage (follow_spec=%s,lineage=%s)\n",
+ follow_spec, lineage_str);
+ return 1;
+ }
+ }
+ if (progname)
+ {
+ if (!regexec (&regex_desc, progname, 0, NULL, 0))
+ {
+ TprintfT (DBG_LT0, "linetrace_follow_experiment(): MATCHES progname (follow_spec=%s,progname=%s)\n",
+ follow_spec, progname);
+ return 1;
+ }
+ }
+ TprintfT (DBG_LT0, "linetrace_follow_experiment(): DOES NOT MATCH (follow_spec=%s,lineage=%s,progname=%s)\n",
+ follow_spec, lineage_str ? lineage_str : "NULL",
+ progname ? progname : "NULL");
+ return 0;
+}
diff --git a/gprofng/libcollector/mapfile.aarch64-Linux b/gprofng/libcollector/mapfile.aarch64-Linux
new file mode 100644
index 00000000000..84d6bbc5617
--- /dev/null
+++ b/gprofng/libcollector/mapfile.aarch64-Linux
@@ -0,0 +1,40 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+GLIBC_2.17 {
+ global:
+ posix_spawn;
+ posix_spawnp;
+ pthread_mutex_lock;
+ pthread_mutex_unlock;
+ pthread_join;
+ sem_wait;
+ pthread_create;
+ dlopen;
+ popen;
+ timer_create;
+ pthread_cond_wait;
+ pthread_cond_timedwait;
+ fopen;
+ fclose;
+ fdopen;
+ fgetpos;
+ fsetpos;
+};
diff --git a/gprofng/libcollector/mapfile.amd64-Linux b/gprofng/libcollector/mapfile.amd64-Linux
new file mode 100644
index 00000000000..213061fbec1
--- /dev/null
+++ b/gprofng/libcollector/mapfile.amd64-Linux
@@ -0,0 +1,79 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+GLIBC_2.2.5 {
+ global:
+ posix_spawn;
+ posix_spawnp;
+ pthread_mutex_lock;
+ pthread_mutex_unlock;
+ pthread_join;
+ sem_wait;
+ pthread_create;
+ dlopen;
+ popen;
+ timer_create;
+ pthread_cond_wait;
+ pthread_cond_timedwait;
+ fopen;
+ fclose;
+ fdopen;
+ fgetpos;
+ fsetpos;
+};
+
+GLIBC_2.3.2 {
+ global:
+ pthread_cond_wait;
+ pthread_cond_timedwait;
+};
+
+GLIBC_2.3.3 {
+ global:
+ timer_create;
+};
+
+GLIBC_2.15 {
+ global:
+ posix_spawn;
+ posix_spawnp;
+};
+
+GLIBC_2.17 {
+ global:
+ posix_spawn;
+ posix_spawnp;
+ pthread_mutex_lock;
+ pthread_mutex_unlock;
+ pthread_join;
+ sem_wait;
+ pthread_create;
+ dlopen;
+ popen;
+ timer_create;
+ pthread_cond_wait;
+ pthread_cond_timedwait;
+ fopen;
+ fclose;
+ fdopen;
+ fgetpos;
+ fsetpos;
+};
+
diff --git a/gprofng/libcollector/mapfile.intel-Linux b/gprofng/libcollector/mapfile.intel-Linux
new file mode 100644
index 00000000000..97482d2b0a4
--- /dev/null
+++ b/gprofng/libcollector/mapfile.intel-Linux
@@ -0,0 +1,81 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+GLIBC_2.0 {
+ global:
+ pthread_mutex_lock;
+ pthread_mutex_unlock;
+ pthread_join;
+ pthread_create;
+ dlopen;
+ popen;
+ sem_wait;
+ pthread_cond_wait;
+ pthread_cond_timedwait;
+ fopen;
+ fclose;
+ fdopen;
+ fgetpos;
+ fsetpos;
+};
+
+GLIBC_2.1 {
+ global:
+ sem_wait;
+ pthread_create;
+ dlopen;
+ open64;
+ pread;
+ pwrite;
+ pwrite64;
+ popen;
+ fopen;
+ fclose;
+ fdopen;
+ fgetpos64;
+ fsetpos64;
+};
+
+GLIBC_2.2 {
+ global:
+ open64;
+ posix_spawn;
+ posix_spawnp;
+ pread;
+ pwrite;
+ pwrite64;
+ timer_create;
+ fgetpos;
+ fsetpos;
+ fgetpos64;
+ fsetpos64;
+};
+
+GLIBC_2.3.2 {
+ global:
+ pthread_cond_wait;
+ pthread_cond_timedwait;
+};
+
+GLIBC_2.15 {
+ global:
+ posix_spawn;
+ posix_spawnp;
+};
diff --git a/gprofng/libcollector/mapfile.sparc-Linux b/gprofng/libcollector/mapfile.sparc-Linux
new file mode 100644
index 00000000000..30d3953f37e
--- /dev/null
+++ b/gprofng/libcollector/mapfile.sparc-Linux
@@ -0,0 +1,40 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+GLIBC_2.0 {
+ global:
+ pthread_mutex_lock;
+ pthread_mutex_unlock;
+ pthread_join;
+};
+
+GLIBC_2.1 {
+ global:
+ sem_wait;
+ pthread_create;
+ dlopen;
+ popen;
+};
+
+GLIBC_2.3.2 {
+ global:
+ pthread_cond_wait;
+ pthread_cond_timedwait;
+};
diff --git a/gprofng/libcollector/mapfile.sparcv9-Linux b/gprofng/libcollector/mapfile.sparcv9-Linux
new file mode 100644
index 00000000000..db797661a29
--- /dev/null
+++ b/gprofng/libcollector/mapfile.sparcv9-Linux
@@ -0,0 +1,58 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+GLIBC_2.0 {
+ global:
+ dlopen;
+};
+
+GLIBC_2.1 {
+ global:
+ dlopen;
+};
+
+GLIBC_2.2 {
+ global:
+ pthread_create;
+ popen;
+ pthread_mutex_lock;
+ pthread_mutex_unlock;
+ pthread_join;
+ sem_wait;
+ pthread_cond_wait;
+ pthread_cond_timedwait;
+ timer_create;
+ fopen;
+ fclose;
+ fdopen;
+ fgetpos;
+ fsetpos;
+};
+
+GLIBC_2.3.2 {
+ global:
+ pthread_cond_wait;
+ pthread_cond_timedwait;
+};
+
+GLIBC_2.3.3 {
+ global:
+ timer_create;
+};
diff --git a/gprofng/libcollector/memmgr.c b/gprofng/libcollector/memmgr.c
new file mode 100644
index 00000000000..5ada421f3f4
--- /dev/null
+++ b/gprofng/libcollector/memmgr.c
@@ -0,0 +1,396 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <sys/mman.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+
+#include "collector.h"
+#include "libcol_util.h"
+#include "gp-experiment.h"
+#include "memmgr.h"
+
+/* TprintfT(<level>,...) definitions. Adjust per module as needed */
+#define DBG_LT0 0 // for high-level configuration, unexpected errors/warnings
+#define DBG_LT1 1 // for configuration details, warnings
+#define DBG_LT2 2
+#define DBG_LT3 3
+#define DBG_LT4 4
+
+/*
+ * Memory allocation.
+ *
+ * Heap:
+ * chain[0] - linked list of chunks;
+ * chain[1] - linked list of free 16-byte objects;
+ * chain[2] - linked list of free 32-byte objects;
+ * ...
+ *
+ * Chunk:
+ *
+ * base lo hi
+ * V V V
+ * +------------------+---------+-------------------+--+--+-----+
+ * | Var size object | -> <-| Const size objects| | |Chunk|
+ * +------------------+---------+-------------------+--+--+-----+
+ *
+ * Limitations:
+ * - one var size object per chunk
+ * - can't allocate const size objects larger than 2^MAXCHAIN
+ */
+
+#define MAXCHAIN 32
+#define ALIGNMENT 4 /* 2^ALIGNMENT == minimal size and alignment */
+#define ALIGN(x) ((((x) - 1)/(1 << ALIGNMENT) + 1) * (1 << ALIGNMENT))
+
+struct Heap
+{
+ collector_mutex_t lock; /* master lock */
+ void *chain[MAXCHAIN]; /* chain[0] - chunks */
+ /* chain[i] - structs of size 2^i */
+};
+
+typedef struct Chunk
+{
+ size_t size;
+ char *base;
+ char *lo;
+ char *hi;
+ struct Chunk *next;
+} Chunk;
+
+static void
+not_implemented ()
+{
+ __collector_log_write ("<event kind=\"%s\" id=\"%d\">error memmgr not_implemented()</event>\n",
+ SP_JCMD_CERROR, COL_ERROR_NOZMEM);
+ return;
+}
+
+/*
+ * void __collector_mmgr_init_mutex_locks( Heap *heap )
+ * Iinitialize mmgr mutex locks.
+ */
+void
+__collector_mmgr_init_mutex_locks (Heap *heap)
+{
+ if (heap == NULL)
+ return;
+ if (__collector_mutex_trylock (&heap->lock))
+ {
+ /*
+ * We are in a child process immediately after the fork().
+ * Parent process was in the middle of critical section when the fork() happened.
+ * This is a placeholder for the cleanup.
+ * See CR 6997020 for details.
+ */
+ __collector_mutex_init (&heap->lock);
+ }
+ __collector_mutex_init (&heap->lock);
+}
+
+/*
+ * alloc_chunk( unsigned sz ) allocates a chunk of at least sz bytes.
+ * If sz == 0, allocates a chunk of the default size.
+ */
+static Chunk *
+alloc_chunk (unsigned sz, int log)
+{
+ static long pgsz = 0;
+ char *ptr;
+ Chunk *chnk;
+ size_t chunksz;
+ if (pgsz == 0)
+ {
+ pgsz = CALL_UTIL (sysconf)(_SC_PAGESIZE);
+ Tprintf (DBG_LT2, "memmgr: pgsz = %ld (0x%lx)\n", pgsz, pgsz);
+ }
+ /* Allocate 2^n >= sz bytes */
+ unsigned nsz = ALIGN (sizeof (Chunk)) + sz;
+ for (chunksz = pgsz; chunksz < nsz; chunksz *= 2);
+ if (log == 1)
+ Tprintf (DBG_LT2, "alloc_chunk mapping %u, rounded up from %u\n", (unsigned int) chunksz, sz);
+ /* mmap64 is only in 32-bits; this call goes to mmap in 64-bits */
+ ptr = (char*) CALL_UTIL (mmap64)(0, chunksz, PROT_READ | PROT_WRITE,
+ MAP_PRIVATE | MAP_ANON, (int) -1, (off64_t) 0);
+ if (ptr == MAP_FAILED)
+ {
+ Tprintf (0, "alloc_chunk mapping failed COL_ERROR_NOZMEMMAP: %s\n", CALL_UTIL (strerror)(errno));
+ __collector_log_write ("<event kind=\"%s\" id=\"%d\" ec=\"%d\">%s</event>\n",
+ SP_JCMD_CERROR, COL_ERROR_NOZMEMMAP, errno, "0");
+ return NULL;
+ }
+ /* Put the chunk descriptor at the end of the chunk */
+ chnk = (Chunk*) (ptr + chunksz - ALIGN (sizeof (Chunk)));
+ chnk->size = chunksz;
+ chnk->base = ptr;
+ chnk->lo = chnk->base;
+ chnk->hi = (char*) chnk;
+ chnk->next = (Chunk*) NULL;
+ if (log == 1)
+ Tprintf (DBG_LT2, "memmgr: returning new chunk @%p, chunksx=%ld sz=%ld\n",
+ ptr, (long) chunksz, (long) sz);
+ return chnk;
+}
+
+Heap *
+__collector_newHeap ()
+{
+ Heap *heap;
+ Chunk *chnk;
+ Tprintf (DBG_LT2, "__collector_newHeap calling alloc_chunk(0)\n");
+ chnk = alloc_chunk (0, 1);
+ if (chnk == NULL)
+ return NULL;
+
+ /* A bit of hackery: allocate heap from its own chunk */
+ chnk->hi -= ALIGN (sizeof (Heap));
+ heap = (Heap*) chnk->hi;
+ heap->chain[0] = (void*) chnk;
+ __collector_mutex_init (&heap->lock);
+ return heap;
+}
+
+void
+__collector_deleteHeap (Heap *heap)
+{
+ if (heap == NULL)
+ return;
+ /* Note: heap itself is in the last chunk */
+ for (Chunk *chnk = heap->chain[0]; chnk;)
+ {
+ Chunk *next = chnk->next;
+ CALL_UTIL (munmap)((void*) chnk->base, chnk->size);
+ chnk = next;
+ }
+}
+
+void *
+__collector_allocCSize (Heap *heap, unsigned sz, int log)
+{
+ void *res;
+ Chunk *chnk;
+ if (heap == NULL)
+ return NULL;
+
+ /* block all signals and acquire lock */
+ sigset_t old_mask, new_mask;
+ CALL_UTIL (sigfillset)(&new_mask);
+ CALL_UTIL (sigprocmask)(SIG_SETMASK, &new_mask, &old_mask);
+ __collector_mutex_lock (&heap->lock);
+
+ /* Allocate nsz = 2^idx >= sz bytes */
+ unsigned idx = ALIGNMENT;
+ unsigned nsz = 1 << idx;
+ while (nsz < sz)
+ nsz = 1 << ++idx;
+
+ /* Look in the corresponding chain first */
+ if (idx < MAXCHAIN)
+ {
+ if (heap->chain[idx] != NULL)
+ {
+ res = heap->chain[idx];
+ heap->chain[idx] = *(void**) res;
+ __collector_mutex_unlock (&heap->lock);
+ CALL_UTIL (sigprocmask)(SIG_SETMASK, &old_mask, NULL);
+ if (log == 1)
+ Tprintf (DBG_LT2, "memmgr: allocCSize %p sz %d (0x%x) req = 0x%x, from chain idx = %d\n", res, nsz, nsz, sz, idx);
+ return res;
+ }
+ }
+ else
+ {
+ not_implemented ();
+ __collector_mutex_unlock (&heap->lock);
+ CALL_UTIL (sigprocmask)(SIG_SETMASK, &old_mask, NULL);
+ return NULL;
+ }
+
+ /* Chain is empty, allocate from chunks */
+ for (chnk = (Chunk*) heap->chain[0]; chnk; chnk = chnk->next)
+ if (chnk->lo + nsz < chnk->hi)
+ break;
+ if (chnk == NULL)
+ {
+ /* Get a new chunk */
+ if (log == 1)
+ Tprintf (DBG_LT2, "__collector_allocCSize (%u) calling alloc_chunk(%u)\n", sz, nsz);
+ chnk = alloc_chunk (nsz, 1);
+ if (chnk == NULL)
+ {
+ __collector_mutex_unlock (&heap->lock);
+ CALL_UTIL (sigprocmask)(SIG_SETMASK, &old_mask, NULL);
+ return NULL;
+ }
+ chnk->next = (Chunk*) heap->chain[0];
+ heap->chain[0] = chnk;
+ }
+
+ /* Allocate from the chunk */
+ chnk->hi -= nsz;
+ res = (void*) chnk->hi;
+ __collector_mutex_unlock (&heap->lock);
+ CALL_UTIL (sigprocmask)(SIG_SETMASK, &old_mask, NULL);
+ if (log == 1)
+ Tprintf (DBG_LT2, "memmgr: allocCSize %p sz %d (0x%x) req = 0x%x, new chunk\n", res, nsz, nsz, sz);
+ return res;
+}
+
+void
+__collector_freeCSize (Heap *heap, void *ptr, unsigned sz)
+{
+ if (heap == NULL || ptr == NULL)
+ return;
+
+ /* block all signals and acquire lock */
+ sigset_t old_mask, new_mask;
+ CALL_UTIL (sigfillset)(&new_mask);
+ CALL_UTIL (sigprocmask)(SIG_SETMASK, &new_mask, &old_mask);
+ __collector_mutex_lock (&heap->lock);
+
+ /* Free 2^idx >= sz bytes */
+ unsigned idx = ALIGNMENT;
+ unsigned nsz = 1 << idx;
+ while (nsz < sz)
+ nsz = 1 << ++idx;
+ if (idx < MAXCHAIN)
+ {
+ *(void**) ptr = heap->chain[idx];
+ heap->chain[idx] = ptr;
+ }
+ else
+ not_implemented ();
+ __collector_mutex_unlock (&heap->lock);
+ CALL_UTIL (sigprocmask)(SIG_SETMASK, &old_mask, NULL);
+ Tprintf (DBG_LT4, "memmgr: freeC %p sz %ld\n", ptr, (long) sz);
+}
+
+static void *
+allocVSize_nolock (Heap *heap, unsigned sz)
+{
+ void *res;
+ Chunk *chnk;
+ if (sz == 0)
+ return NULL;
+
+ /* Find a good chunk */
+ for (chnk = (Chunk*) heap->chain[0]; chnk; chnk = chnk->next)
+ if (chnk->lo == chnk->base && chnk->lo + sz < chnk->hi)
+ break;
+ if (chnk == NULL)
+ {
+ /* Get a new chunk */
+ Tprintf (DBG_LT2, "allocVsize_nolock calling alloc_chunk(%u)\n", sz);
+ chnk = alloc_chunk (sz, 0);
+ if (chnk == NULL)
+ return NULL;
+ chnk->next = (Chunk*) heap->chain[0];
+ heap->chain[0] = chnk;
+ }
+ chnk->lo = chnk->base + sz;
+ res = (void*) (chnk->base);
+ Tprintf (DBG_LT4, "memmgr: allocV %p for %ld\n", res, (long) sz);
+ return res;
+}
+
+void *
+__collector_allocVSize (Heap *heap, unsigned sz)
+{
+ void *res;
+ if (heap == NULL)
+ return NULL;
+
+ /* block all signals and acquire lock */
+ sigset_t old_mask, new_mask;
+ CALL_UTIL (sigfillset)(&new_mask);
+ CALL_UTIL (sigprocmask)(SIG_SETMASK, &new_mask, &old_mask);
+ __collector_mutex_lock (&heap->lock);
+ res = allocVSize_nolock (heap, sz);
+ __collector_mutex_unlock (&heap->lock);
+ CALL_UTIL (sigprocmask)(SIG_SETMASK, &old_mask, NULL);
+ return res;
+}
+
+/*
+ * reallocVSize( Heap *heap, void *ptr, unsigned newsz )
+ * Changes the size of memory pointed by ptr to newsz.
+ * If ptr == NULL, allocates new memory of size newsz.
+ * If newsz == 0, frees ptr and returns NULL.
+ */
+void *
+__collector_reallocVSize (Heap *heap, void *ptr, unsigned newsz)
+{
+ Chunk *chnk;
+ void *res;
+ if (heap == NULL)
+ return NULL;
+ if (ptr == NULL)
+ return __collector_allocVSize (heap, newsz);
+
+ /* block all signals and acquire lock */
+ sigset_t old_mask, new_mask;
+ CALL_UTIL (sigfillset)(&new_mask);
+ CALL_UTIL (sigprocmask)(SIG_SETMASK, &new_mask, &old_mask);
+ __collector_mutex_lock (&heap->lock);
+
+ /* Find its chunk */
+ for (chnk = (Chunk*) heap->chain[0]; chnk; chnk = chnk->next)
+ if (ptr == chnk->base)
+ break;
+ if (chnk == NULL)
+ {
+ /* memory corrpution */
+ not_implemented ();
+ __collector_mutex_unlock (&heap->lock);
+ CALL_UTIL (sigprocmask)(SIG_SETMASK, &old_mask, NULL);
+ return NULL;
+ }
+ if (chnk->base + newsz < chnk->hi)
+ {
+ /* easy case */
+ chnk->lo = chnk->base + newsz;
+ res = newsz ? chnk->base : NULL;
+ __collector_mutex_unlock (&heap->lock);
+ CALL_UTIL (sigprocmask)(SIG_SETMASK, &old_mask, NULL);
+ Tprintf (DBG_LT4, "memmgr: reallocV %p for %ld\n", ptr, (long) newsz);
+ return res;
+ }
+ res = allocVSize_nolock (heap, newsz);
+ /* Copy to new location */
+ if (res)
+ {
+ int size = chnk->lo - chnk->base;
+ if (newsz < size)
+ size = newsz;
+ char *s1 = (char*) res;
+ char *s2 = chnk->base;
+ while (size--)
+ *s1++ = *s2++;
+ }
+ /* Free old memory*/
+ chnk->lo = chnk->base;
+ __collector_mutex_unlock (&heap->lock);
+ CALL_UTIL (sigprocmask)(SIG_SETMASK, &old_mask, NULL);
+ return res;
+}
diff --git a/gprofng/libcollector/memmgr.h b/gprofng/libcollector/memmgr.h
new file mode 100644
index 00000000000..78231c29abd
--- /dev/null
+++ b/gprofng/libcollector/memmgr.h
@@ -0,0 +1,59 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _MEMMGR_H
+#define _MEMMGR_H
+
+struct Heap;
+typedef struct Heap Heap;
+
+Heap *__collector_newHeap ();
+void __collector_deleteHeap (Heap *heap);
+
+/*
+ * Initialize memmgr mutex locks.
+ */
+void __collector_mmgr_init_mutex_locks (Heap *heap);
+
+/*
+ * Allocate non-resizable memory.
+ */
+void *__collector_allocCSize (Heap *heap, unsigned sz, int log);
+
+/*
+ * Free non-resizable memory.
+ */
+void __collector_freeCSize (Heap *heap, void *ptr, unsigned sz);
+
+/*
+ * Allocate resizable memory
+ */
+void *__collector_allocVSize (Heap *heap, unsigned sz);
+
+/*
+ * Change size of resizable memory.
+ * ptr - if not NULL, it must have been previously allocated from
+ * the same heap, otherwise returns allocVSize(heap, newsz);
+ * newsz - new size; if 0, memory is freed and no new allocation
+ * occurs;
+ */
+void *__collector_reallocVSize (Heap *heap, void *ptr, unsigned newsz);
+
+#endif
diff --git a/gprofng/libcollector/mmaptrace.c b/gprofng/libcollector/mmaptrace.c
new file mode 100644
index 00000000000..bf3294d4843
--- /dev/null
+++ b/gprofng/libcollector/mmaptrace.c
@@ -0,0 +1,1689 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+/*
+ * memory map tracking
+ * incorporating former "loadobjects" into more general "map"
+ * (including code and data segments and dynamic functions)
+ */
+
+#include "config.h"
+#include <alloca.h>
+#include <dlfcn.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <elf.h>
+#include <sys/mman.h>
+#include <sys/param.h>
+#include <stdint.h>
+
+#include "gp-defs.h"
+#include "collector.h"
+#include "gp-experiment.h"
+#include "memmgr.h"
+
+/*
+ * These are obsolete and unreliable.
+ * They are included here only for historical compatibility.
+ */
+#define MA_SHARED 0x08 /* changes are shared by mapped object */
+#define MA_ANON 0x40 /* anonymous memory (e.g. /dev/zero) */
+#define MA_ISM 0x80 /* intimate shared mem (shared MMU resources) */
+#define MA_BREAK 0x10 /* grown by brk(2) */
+#define MA_STACK 0x20 /* grown automatically on stack faults */
+
+typedef struct prmap_t
+{
+ unsigned long pr_vaddr; /* virtual address of mapping */
+ unsigned long pr_size; /* size of mapping in bytes */
+ char *pr_mapname; /* name in /proc/<pid>/object */
+ int pr_mflags; /* protection and attribute flags (see below) */
+ unsigned long pr_offset; /* offset into mapped object, if any */
+ unsigned long pr_dev;
+ unsigned long pr_ino;
+ int pr_pagesize; /* pagesize (bytes) for this mapping */
+} prmap_t;
+
+/* TprintfT(<level>,...) definitions. Adjust per module as needed */
+#define DBG_LT0 0 // for high-level configuration, unexpected errors/warnings
+#define DBG_LT1 1 // for configuration details, warnings
+#define DBG_LT2 2
+#define DBG_LT3 3
+#define DBG_LT4 4
+
+#define SYS_MMAP_NAME "mmap"
+#define SYS_MMAP64_NAME "mmap64"
+#define SYS_MUNMAP_NAME "munmap"
+#define SYS_DLOPEN_NAME "dlopen"
+#define SYS_DLCLOSE_NAME "dlclose"
+
+typedef struct MapInfo
+{
+ struct MapInfo *next;
+ unsigned long vaddr;
+ unsigned long size;
+ char *mapname; /* name in /proc/<pid>/object */
+ char *filename;
+ unsigned long offset;
+ int mflags;
+ int pagesize;
+} MapInfo;
+
+typedef struct NameInfo
+{
+ struct NameInfo *next;
+ char *mapname;
+ char filename[1]; /* dynamic length file name */
+} NameInfo;
+
+static NameInfo *namemaps = NULL;
+static MapInfo mmaps; /* current memory maps */
+static struct DataHandle *map_hndl = NULL;
+static char dyntext_fname[MAXPATHLEN];
+static void *mapcache = NULL;
+static char *maptext = NULL;
+static size_t maptext_sz = 4096; /* initial buffer size */
+static int mmap_mode = 0;
+static int mmap_initted = 0;
+static collector_mutex_t map_lock = COLLECTOR_MUTEX_INITIALIZER;
+static collector_mutex_t dyntext_lock = COLLECTOR_MUTEX_INITIALIZER;
+
+/* a reentrance guard for the interposition functions ensures that updates to
+ the map cache/file are sequential, with the first doing the final update */
+static int reentrance = 0;
+#define CHCK_REENTRANCE (reentrance || mmap_mode <= 0)
+#define CURR_REENTRANCE reentrance
+#define PUSH_REENTRANCE reentrance++
+#define POP_REENTRANCE reentrance--
+
+#define CALL_REAL(x) (__real_##x)
+#define NULL_PTR(x) (__real_##x == NULL)
+
+/* interposition function handles */
+static void *(*__real_mmap)(void* start, size_t length, int prot, int flags,
+ int fd, off_t offset) = NULL;
+static void *(*__real_mmap64)(void* start, size_t length, int prot, int flags,
+ int fd, off64_t offset) = NULL;
+static int (*__real_munmap)(void* start, size_t length) = NULL;
+static void *(*__real_dlopen)(const char* pathname, int mode) = NULL;
+#if (ARCH(Intel) && WSIZE(32)) || ARCH(SPARC)
+static void *(*__real_dlopen_2_1)(const char* pathname, int mode) = NULL;
+static void *(*__real_dlopen_2_0)(const char* pathname, int mode) = NULL;
+#endif
+static int (*__real_dlclose)(void* handle) = NULL;
+static void (*collector_heap_record)(int, size_t, void*) = NULL;
+
+/* internal function prototypes */
+static int init_mmap_intf ();
+static int init_mmap_files ();
+static void append_segment_record (char *format, ...);
+static void update_map_segments (hrtime_t hrt, int resolve);
+static void resolve_mapname (MapInfo *map, char *name);
+static void record_segment_map (hrtime_t timestamp, uint64_t loadaddr,
+ unsigned long msize, int pagesize, int modeflags,
+ long long offset, unsigned check, char *name);
+static void record_segment_unmap (hrtime_t timestamp, uint64_t loadaddr);
+
+/* Linux needs handling of the vsyscall page to get its data into the map.xml file */
+static void process_vsyscall_page ();
+
+#define MAXVSYSFUNCS 10
+static int nvsysfuncs = 0;
+static char *sysfuncname[MAXVSYSFUNCS];
+static uint64_t sysfuncvaddr[MAXVSYSFUNCS];
+static unsigned long sysfuncsize[MAXVSYSFUNCS];
+
+#define MAXDYN 20
+static int ndyn = 0;
+static char *dynname [MAXDYN];
+static void *dynvaddr [MAXDYN];
+static unsigned dynsize [MAXDYN];
+static char *dynfuncname[MAXDYN];
+
+/*===================================================================*/
+
+/*
+ * void __collector_mmap_init_mutex_locks()
+ * Iinitialize mmap mutex locks.
+ */
+void
+__collector_mmap_init_mutex_locks ()
+{
+ __collector_mutex_init (&map_lock);
+ __collector_mutex_init (&dyntext_lock);
+}
+
+/* __collector_ext_update_map_segments called by the audit agent
+ * Is is also called by dbx/collector when a (possible) map update
+ * is intimated, such as after dlopen/dlclose.
+ * Required when libcollector.so is not preloaded and interpositions inactive.
+ */
+int
+__collector_ext_update_map_segments (void)
+{
+ if (!mmap_initted)
+ return 0;
+ TprintfT (0, "__collector_ext_update_map_segments(%d)\n", CURR_REENTRANCE);
+ if (CHCK_REENTRANCE)
+ return 0;
+ PUSH_REENTRANCE;
+ update_map_segments (GETRELTIME (), 1);
+ POP_REENTRANCE;
+ return 0;
+}
+/*
+ * int __collector_ext_mmap_install()
+ * Install and initialise mmap tracing.
+ */
+int
+__collector_ext_mmap_install (int record)
+{
+ TprintfT (0, "__collector_ext_mmap_install(mmap_mode=%d)\n", mmap_mode);
+ if (NULL_PTR (mmap))
+ {
+ if (init_mmap_intf ())
+ {
+ TprintfT (0, "ERROR: collector mmap tracing initialization failed.\n");
+ return COL_ERROR_EXPOPEN;
+ }
+ }
+ else
+ TprintfT (DBG_LT2, "collector mmap tracing: mmap pointer not null\n");
+
+ /* Initialize side door interface with the heap tracing module */
+ collector_heap_record = (void(*)(int, size_t, void*))dlsym (RTLD_DEFAULT, "__collector_heap_record");
+ if (record)
+ {
+ map_hndl = __collector_create_handle (SP_MAP_FILE);
+ if (map_hndl == NULL)
+ return COL_ERROR_MAPOPEN;
+ if (init_mmap_files ())
+ {
+ TprintfT (0, "ERROR: collector init_mmap_files() failed.\n");
+ return COL_ERROR_EXPOPEN;
+ }
+ }
+ mmaps.next = NULL;
+ mapcache = NULL;
+ PUSH_REENTRANCE;
+ update_map_segments (GETRELTIME (), 1); // initial map
+ POP_REENTRANCE;
+ mmap_mode = 1;
+ mmap_initted = 1;
+ process_vsyscall_page ();
+ return COL_ERROR_NONE;
+}
+
+/*
+ * int __collector_ext_mmap_deinstall()
+ * Optionally update final map and stop tracing mmap events.
+ */
+int
+__collector_ext_mmap_deinstall (int update)
+{
+ if (!mmap_initted)
+ return COL_ERROR_NONE;
+ mmap_mode = 0;
+ if (update)
+ {
+ /* Final map */
+ PUSH_REENTRANCE;
+ update_map_segments (GETRELTIME (), 1);
+ POP_REENTRANCE;
+ }
+ TprintfT (0, "__collector_ext_mmap_deinstall(%d)\n", update);
+ if (map_hndl != NULL)
+ {
+ __collector_delete_handle (map_hndl);
+ map_hndl = NULL;
+ }
+ __collector_mutex_lock (&map_lock); // get lock before resetting
+
+ /* Free all memory maps */
+ MapInfo *mp;
+ for (mp = mmaps.next; mp;)
+ {
+ MapInfo *next = mp->next;
+ __collector_freeCSize (__collector_heap, mp, sizeof (*mp));
+ mp = next;
+ }
+ mmaps.next = NULL;
+
+ /* Free all name maps */
+ NameInfo *np;
+ for (np = namemaps; np;)
+ {
+ NameInfo *next = np->next;
+ __collector_freeCSize (__collector_heap, np, sizeof (*np) + __collector_strlen (np->filename));
+ np = next;
+ }
+ namemaps = NULL;
+ mapcache = __collector_reallocVSize (__collector_heap, mapcache, 0);
+ mmaps.next = NULL;
+ mapcache = NULL;
+ __collector_mutex_unlock (&map_lock);
+ TprintfT (0, "__collector_ext_mmap_deinstall done\n");
+ return 0;
+}
+
+/*
+ * void __collector_mmap_fork_child_cleanup()
+ * Perform all necessary cleanup steps in child process after fork().
+ */
+void
+__collector_mmap_fork_child_cleanup ()
+{
+ /* Initialize all mmap "mutex" locks */
+ __collector_mmap_init_mutex_locks ();
+ if (!mmap_initted)
+ return;
+ mmap_mode = 0;
+ __collector_delete_handle (map_hndl);
+ __collector_mutex_lock (&map_lock); // get lock before resetting
+
+ /* Free all memory maps */
+ MapInfo *mp;
+ for (mp = mmaps.next; mp;)
+ {
+ MapInfo *next = mp->next;
+ __collector_freeCSize (__collector_heap, mp, sizeof (*mp));
+ mp = next;
+ }
+ mmaps.next = NULL;
+
+ /* Free all name maps */
+ NameInfo *np;
+ for (np = namemaps; np;)
+ {
+ NameInfo *next = np->next;
+ __collector_freeCSize (__collector_heap, np, sizeof (*np) + __collector_strlen (np->filename));
+ np = next;
+ }
+ namemaps = NULL;
+ mapcache = __collector_reallocVSize (__collector_heap, mapcache, 0);
+ mmap_initted = 0;
+ reentrance = 0;
+ __collector_mutex_unlock (&map_lock);
+}
+
+static int
+init_mmap_files ()
+{
+ TprintfT (DBG_LT2, "init_mmap_files\n");
+ /* also create the headerless dyntext file (if required) */
+ CALL_UTIL (snprintf)(dyntext_fname, sizeof (dyntext_fname), "%s/%s",
+ __collector_exp_dir_name, SP_DYNTEXT_FILE);
+ if (CALL_UTIL (access)(dyntext_fname, F_OK) != 0)
+ {
+ int fd = CALL_UTIL (open)(dyntext_fname, O_RDWR | O_CREAT | O_TRUNC,
+ S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
+ if (fd == -1)
+ {
+ char errmsg[256];
+ TprintfT (0, "ERROR: init_mmap_files: open(%s) failed\n",
+ dyntext_fname);
+ __collector_log_write ("<event kind=\"%s\" id=\"%d\" ec=\"%d\">%s: %s</event>\n",
+ SP_JCMD_CERROR, COL_ERROR_DYNOPEN, errno,
+ dyntext_fname, errmsg);
+ return COL_ERROR_DYNOPEN;
+ }
+ else
+ CALL_UTIL (close)(fd);
+ }
+ return COL_ERROR_NONE;
+}
+
+static void
+append_segment_record (char *format, ...)
+{
+ char buf[1024];
+ char *bufptr = buf;
+ va_list va;
+ va_start (va, format);
+ int sz = __collector_xml_vsnprintf (bufptr, sizeof (buf), format, va);
+ va_end (va);
+
+ if (__collector_expstate != EXP_OPEN && __collector_expstate != EXP_PAUSED)
+ {
+ TprintfT (0, "append_segment_record: expt neither open nor paused (%d); "
+ "not writing to map.xml\n\t%s", __collector_expstate, buf);
+ return;
+ }
+ if (sz >= sizeof (buf))
+ {
+ /* Allocate a new buffer */
+ sz += 1; /* add the terminating null byte */
+ bufptr = (char*) alloca (sz);
+ va_start (va, format);
+ sz = __collector_xml_vsnprintf (bufptr, sz, format, va);
+ va_end (va);
+ }
+ int rc = __collector_write_string (map_hndl, bufptr, sz);
+ if (rc != 0)
+ (void) __collector_log_write ("<event kind=\"%s\" id=\"%d\"></event>\n",
+ SP_JCMD_CERROR, COL_ERROR_MAPWRITE);
+}
+
+static void
+record_segment_map (hrtime_t timestamp, uint64_t loadaddr, unsigned long msize,
+ int pagesize, int modeflags, long long offset,
+ unsigned check, char *name)
+{
+
+ TprintfT (DBG_LT2, "record_segment_map(%s @ 0x%llx)\n", name, (long long) loadaddr);
+ append_segment_record ("<event kind=\"map\" object=\"segment\" tstamp=\"%u.%09u\" "
+ "vaddr=\"0x%016llX\" size=\"%lu\" pagesz=\"%d\" foffset=\"%c0x%08llX\" "
+ "modes=\"0x%03X\" chksum=\"0x%0X\" name=\"%s\"/>\n",
+ (unsigned) (timestamp / NANOSEC),
+ (unsigned) (timestamp % NANOSEC),
+ loadaddr, msize, pagesize,
+ offset < 0 ? '-' : '+', offset < 0 ? -offset : offset,
+ modeflags, check, name);
+}
+
+static void
+record_segment_unmap (hrtime_t timestamp, uint64_t loadaddr)
+{
+ TprintfT (DBG_LT2, "record_segment_unmap(@ 0x%llx)\n", (long long) loadaddr);
+ append_segment_record ("<event kind=\"unmap\" tstamp=\"%u.%09u\" vaddr=\"0x%016llX\"/>\n",
+ (unsigned) (timestamp / NANOSEC),
+ (unsigned) (timestamp % NANOSEC), loadaddr);
+}
+
+#if WSIZE(64)
+#define ELF_EHDR Elf64_Ehdr
+#define ELF_PHDR Elf64_Phdr
+#define ELF_SHDR Elf64_Shdr
+#define ELF_DYN Elf64_Dyn
+#define ELF_AUX Elf64_auxv_t
+#define ELF_SYM Elf64_Sym
+#define ELF_ST_BIND ELF64_ST_BIND
+#define ELF_ST_TYPE ELF64_ST_TYPE
+#elif WSIZE(32)
+#define ELF_EHDR Elf32_Ehdr
+#define ELF_PHDR Elf32_Phdr
+#define ELF_SHDR Elf32_Shdr
+#define ELF_DYN Elf32_Dyn
+#define ELF_AUX Elf32_auxv_t
+#define ELF_SYM Elf32_Sym
+#define ELF_ST_BIND ELF32_ST_BIND
+#define ELF_ST_TYPE ELF32_ST_TYPE
+#endif
+
+static unsigned
+checksum_mapname (MapInfo* map)
+{
+ unsigned checksum = 0;
+ /* only checksum code segments */
+ if ((map->mflags & (PROT_EXEC | PROT_READ)) == 0 ||
+ (map->mflags & PROT_WRITE) != 0)
+ return 0;
+ checksum = (unsigned) - 1;
+ TprintfT (DBG_LT2, "checksum_mapname checksum = 0x%0X\n", checksum);
+ return checksum;
+}
+
+
+#if (ARCH(Intel) && WSIZE(32)) || ARCH(SPARC)
+static void*
+dlopen_searchpath_symver (void*(real_dlopen) (), void* caller_addr, const char* basename, int mode)
+#else
+static void*
+dlopen_searchpath (void* caller_addr, const char* basename, int mode)
+#endif
+{
+ TprintfT (DBG_LT2, "dlopen_searchpath(%p, %s, %d)\n", caller_addr, basename, mode);
+ Dl_info dl_info;
+ if (dladdr (caller_addr, &dl_info) == 0)
+ {
+ TprintfT (0, "ERROR: dladdr(%p): %s\n", caller_addr, dlerror ());
+ return 0;
+ }
+ TprintfT (DBG_LT2, "dladdr(%p): %p fname=%s\n",
+ caller_addr, dl_info.dli_fbase, dl_info.dli_fname);
+ int noload = RTLD_BINDING_MASK | RTLD_NOLOAD; //XXXX why RTLD_BINDING_MASK?
+#define WORKAROUND_RTLD_BUG 1
+#ifdef WORKAROUND_RTLD_BUG
+ // A dynamic linker dlopen bug can result in corruption/closure of open streams
+ // XXXX workaround should be removed once linker patches are all available
+#if WSIZE(64)
+#define MAINBASE 0x400000
+#elif WSIZE(32)
+#define MAINBASE 0x08048000
+#endif
+ const char* tmp_path =
+ (dl_info.dli_fbase == (void*) MAINBASE) ? NULL : dl_info.dli_fname;
+ void* caller_hndl = NULL;
+#if ((ARCH(Intel) && WSIZE(32)) || ARCH(SPARC))
+ caller_hndl = (real_dlopen) (tmp_path, noload);
+#else
+ caller_hndl = CALL_REAL (dlopen)(tmp_path, noload);
+#endif
+
+#else //XXXX workaround should be removed once linker patches are all available
+
+ void* caller_hndl = NULL;
+#if (ARCH(Intel) && WSIZE(32) || ARCH(SPARC)
+ caller_hndl = (real_dlopen) (dl_info.dli_fname, noload);
+#else
+ caller_hndl = CALL_REAL (dlopen)(dl_info.dli_fname, noload);
+#endif
+
+#endif //XXXX workaround should be removed once linker patches are all available
+
+ if (!caller_hndl)
+ {
+ TprintfT (0, "ERROR: dlopen(%s,NOLOAD): %s\n", dl_info.dli_fname, dlerror ());
+ return 0;
+ }
+ Dl_serinfo _info, *info = &_info;
+ Dl_serpath *path;
+
+ /* determine search path count and required buffer size */
+ dlinfo (caller_hndl, RTLD_DI_SERINFOSIZE, (void *) info);
+
+ /* allocate new buffer and initialize */
+ /*
+ CR# 7191331
+ There is a bug in Linux that causes the first call
+ to dlinfo() to return a small value for the dls_size.
+
+ The first call to dlinfo() determines the search path
+ count and the required buffer size. The second call to
+ dlinfo() tries to obtain the search path information.
+
+ However, the size of the buffer that is returned by
+ the first call to the dlinfo() is incorrect (too small).
+ The second call to dlinfo() uses the incorrect size to
+ allocate memory on the stack and internally uses the memcpy()
+ function to copy the search paths to the allocated memory space.
+ The length of the search path is much larger than the buffer
+ that is allocated on the stack. The memcpy() overwrites some
+ of the information that are saved on the stack, specifically,
+ it overwrites the "basename" parameter.
+
+ collect crashes right after the second call to dlinfo().
+
+ The search paths are used to locate the shared libraries.
+ dlinfo() creates the search paths based on the paths
+ that are assigned to LD_LIBRARY_PATH environment variable
+ and the standard library paths. The standard library paths
+ consists of the /lib and the /usr/lib paths. The
+ standard library paths are always included to the search
+ paths by dlinfo() even if the LD_LIBRARY_PATH environment
+ variable is not defined. Therefore, at the very least the
+ dls_cnt is assigned to 2 (/lib and /usr/lib) and dlinfo()
+ will never assign dls_cnt to zero. The dls_cnt is the count
+ of the potential paths for searching the shared libraries.
+
+ So we need to increase the buffer size before the second
+ call to dlinfo(). There are number of ways to increase
+ the buffer size. However, none of them can calculate the
+ buffer size precisely. Some users on the web have suggested
+ to multiply the MAXPATHLEN by dls_cnt for the buffer size.
+ The MAXPATHLEN is assigned to 1024 bytes. In my opinion
+ this is too much. So I have decided to multiply dls_size
+ by dls_cnt for the buffer size since the dls_size is much
+ smaller than 1024 bytes.
+
+ I have already confirmed with our user that the workaround
+ is working with his real application. Additionally,
+ the dlopen_searchpath() function is called only by the
+ libcorrector init() function when the experiment is started.
+ Therefore, allocating some extra bytes on the stack which
+ is local to this routine is harmless.
+ */
+
+ info = alloca (_info.dls_size * _info.dls_cnt);
+ info->dls_size = _info.dls_size;
+ info->dls_cnt = _info.dls_cnt;
+
+ /* obtain search path information */
+ dlinfo (caller_hndl, RTLD_DI_SERINFO, (void *) info);
+ path = &info->dls_serpath[0];
+
+ char pathname[MAXPATHLEN];
+ for (unsigned int cnt = 1; cnt <= info->dls_cnt; cnt++, path++)
+ {
+ __collector_strlcpy (pathname, path->dls_name, sizeof (pathname));
+ __collector_strlcat (pathname, "/", sizeof (pathname));
+ __collector_strlcat (pathname, basename, sizeof (pathname));
+ void* ret = NULL;
+#if (ARCH(Intel) && WSIZE(32)) || ARCH(SPARC)
+ ret = (real_dlopen) (pathname, mode);
+#else
+ ret = CALL_REAL (dlopen)(pathname, mode);
+#endif
+ TprintfT (DBG_LT2, "try %d/%d: %s = %p\n", cnt, info->dls_cnt, pathname, ret);
+ if (ret)
+ return ret; // success!
+ }
+ return 0;
+}
+
+static void
+resolve_mapname (MapInfo *map, char *name)
+{
+ map->filename = "";
+ map->mapname = "";
+ if (name == NULL || *name == '\0')
+ {
+ if (map->mflags & MA_STACK)
+ map->filename = "<" SP_MAP_STACK ">";
+ else if (map->mflags & MA_BREAK)
+ map->filename = "<" SP_MAP_HEAP ">";
+ else if (map->mflags & MA_ISM)
+ map->filename = "<" SP_MAP_SHMEM ">";
+ return;
+ }
+ NameInfo *np;
+ for (np = namemaps; np; np = np->next)
+ if (__collector_strcmp (np->mapname, name) == 0)
+ break;
+
+ if (np == NULL)
+ {
+ const char *fname;
+ fname = name;
+ /* Create and link a new name map */
+ size_t fnamelen = __collector_strlen (fname) + 1;
+ np = (NameInfo*) __collector_allocCSize (__collector_heap, sizeof (NameInfo) + fnamelen, 1);
+ if (np == NULL) // We could not get memory
+ return;
+ np->mapname = np->filename;
+ __collector_strlcpy (np->filename, fname, fnamelen);
+ np->next = namemaps;
+ namemaps = np;
+ }
+ map->mapname = np->mapname;
+ map->filename = np->filename;
+ if (map->filename[0] == (char) 0)
+ map->filename = map->mapname;
+ TprintfT (DBG_LT2, "resolve_mapname: %s resolved to %s\n", map->mapname, map->filename);
+}
+
+static unsigned long
+str2ulong (char **ss)
+{
+ char *s = *ss;
+ unsigned long val = 0UL;
+ const int base = 16;
+ for (;;)
+ {
+ char c = *s++;
+ if (c >= '0' && c <= '9')
+ val = val * base + (c - '0');
+ else if (c >= 'a' && c <= 'f')
+ val = val * base + (c - 'a') + 10;
+ else if (c >= 'A' && c <= 'F')
+ val = val * base + (c - 'A') + 10;
+ else
+ break;
+ }
+ *ss = s - 1;
+ return val;
+}
+
+static void
+update_map_segments (hrtime_t hrt, int resolve)
+{
+ size_t filesz;
+ if (__collector_mutex_trylock (&map_lock))
+ {
+ TprintfT (0, "WARNING: update_map_segments(resolve=%d) BUSY\n", resolve);
+ return;
+ }
+ TprintfT (DBG_LT2, "\n");
+ TprintfT (DBG_LT2, "begin update_map_segments(hrt, %d)\n", resolve);
+
+ // Note: there is similar code to read /proc/$PID/map[s] in
+ // perfan/er_kernel/src/KSubExp.cc KSubExp::write_subexpt_map()
+ const char* proc_map = "/proc/self/maps";
+ size_t bufsz = maptext_sz;
+ int done = 0;
+ filesz = 0;
+ int map_fd = CALL_UTIL (open)(proc_map, O_RDONLY);
+ while (!done)
+ {
+ bufsz *= 2;
+ maptext = __collector_reallocVSize (__collector_heap, maptext, bufsz);
+ TprintfT (DBG_LT2, " update_map_segments: Loop for bufsize=%ld\n",
+ (long) bufsz);
+ for (;;)
+ {
+ int n = CALL_UTIL (read)(map_fd, maptext + filesz, bufsz - filesz);
+ TprintfT (DBG_LT2, " update_map_segments: __collector_read(bufp=%p nbyte=%ld)=%d\n",
+ maptext + filesz, (long) ( bufsz - filesz), n);
+ if (n < 0)
+ {
+ TprintfT (0, "ERROR: update_map_segments: read(maps): errno=%d\n", errno);
+ (void) __collector_log_write ("<event kind=\"%s\" id=\"%d\" ec=\"%d\">%s</event>\n",
+ SP_JCMD_CERROR, COL_ERROR_MAPREAD, errno, proc_map);
+ CALL_UTIL (close)(map_fd);
+ __collector_mutex_unlock (&map_lock);
+ return;
+ }
+ else if (n == 0)
+ {
+ done = 1;
+ break;
+ }
+ filesz += n;
+ if (filesz >= bufsz) /* Buffer too small */
+ break;
+ }
+ }
+ CALL_UTIL (close)(map_fd);
+ maptext_sz = filesz;
+
+ int mapcache_entries = 0;
+ char *str, *str1;
+ for (str = maptext;; str = str1)
+ {
+ for (str1 = str; str1 - maptext < filesz; str1++)
+ {
+ if (*str1 == '\n')
+ {
+ *str1 = (char) 0;
+ break;
+ }
+ }
+ if (str1 - maptext >= filesz)
+ break;
+ str1++;
+ mapcache_entries++;
+ mapcache = __collector_reallocVSize (__collector_heap, mapcache,
+ sizeof (prmap_t) * mapcache_entries);
+ prmap_t *map = ((prmap_t *) mapcache) + (mapcache_entries - 1);
+ map->pr_vaddr = str2ulong (&str);
+ str++;
+ unsigned long eaddr = str2ulong (&str);
+ str++;
+ map->pr_size = eaddr - map->pr_vaddr;
+ map->pr_mflags = 0;
+ map->pr_mflags += (*str++ == 'r' ? PROT_READ : 0);
+ map->pr_mflags += (*str++ == 'w' ? PROT_WRITE : 0);
+ map->pr_mflags += (*str++ == 'x' ? PROT_EXEC : 0);
+ map->pr_mflags += (*str++ == 's' ? MA_SHARED : 0);
+ str++;
+ map->pr_offset = str2ulong (&str);
+ str++;
+ map->pr_dev = str2ulong (&str) * 0x100;
+ str++;
+ map->pr_dev += str2ulong (&str);
+ str++;
+ map->pr_ino = str2ulong (&str);
+ if (map->pr_dev == 0)
+ map->pr_mflags |= MA_ANON;
+ while (*str == ' ')
+ str++;
+ map->pr_mapname = str;
+ map->pr_pagesize = 4096;
+ }
+
+ /* Compare two maps and record all differences */
+ unsigned nidx = 0;
+ MapInfo *prev = &mmaps;
+ MapInfo *oldp = mmaps.next;
+ for (;;)
+ {
+ prmap_t *newp = nidx < mapcache_entries ?
+ (prmap_t*) mapcache + nidx : NULL;
+ if (oldp == NULL && newp == NULL)
+ break;
+
+ /* If two maps are equal proceed to the next pair */
+ if (oldp && newp &&
+ oldp->vaddr == newp->pr_vaddr &&
+ oldp->size == newp->pr_size &&
+ __collector_strcmp (oldp->mapname, newp->pr_mapname) == 0)
+ {
+ prev = oldp;
+ oldp = oldp->next;
+ nidx++;
+ continue;
+ }
+ /* Check if we need to unload the old map first */
+ if (newp == NULL || (oldp && oldp->vaddr <= newp->pr_vaddr))
+ {
+ if (oldp != NULL)
+ {
+ /* Don't record MA_ANON maps except MA_STACK and MA_BREAK */
+ if ((!(oldp->mflags & MA_ANON) || (oldp->mflags & (MA_STACK | MA_BREAK))))
+ record_segment_unmap (hrt, oldp->vaddr);
+ /* Remove and free map */
+ prev->next = oldp->next;
+ MapInfo *tmp = oldp;
+ oldp = oldp->next;
+ __collector_freeCSize (__collector_heap, tmp, sizeof (*tmp));
+ }
+ }
+ else
+ {
+ MapInfo *map = (MapInfo*) __collector_allocCSize (__collector_heap, sizeof (MapInfo), 1);
+ if (map == NULL)
+ {
+ __collector_mutex_unlock (&map_lock);
+ return;
+ }
+ map->vaddr = newp->pr_vaddr;
+ map->size = newp->pr_size;
+ map->offset = newp->pr_offset;
+ map->mflags = newp->pr_mflags;
+ map->pagesize = newp->pr_pagesize;
+ resolve_mapname (map, newp->pr_mapname);
+
+ /* Insert new map */
+ map->next = prev->next;
+ prev->next = map;
+ prev = map;
+
+ /* Don't record MA_ANON maps except MA_STACK and MA_BREAK */
+ if (!(newp->pr_mflags & MA_ANON) || (newp->pr_mflags & (MA_STACK | MA_BREAK)))
+ {
+ unsigned checksum = checksum_mapname (map);
+ record_segment_map (hrt, map->vaddr, map->size,
+ map->pagesize, map->mflags,
+ map->offset, checksum, map->filename);
+ }
+ nidx++;
+ }
+ }
+ TprintfT (DBG_LT2, "update_map_segments: done\n\n");
+ __collector_mutex_unlock (&map_lock);
+} /* update_map_segments */
+
+/*
+ * Map addr to a segment. Cope with split segments.
+ */
+int
+__collector_check_segment_internal (unsigned long addr, unsigned long *base,
+ unsigned long *end, int maxnretries, int MA_FLAGS)
+{
+ int number_of_tries = 0;
+retry:
+ ;
+
+ unsigned long curbase = 0;
+ unsigned long curfoff = 0;
+ unsigned long cursize = 0;
+
+ MapInfo *mp;
+ for (mp = mmaps.next; mp; mp = mp->next)
+ {
+
+ if (curbase + cursize == mp->vaddr &&
+ curfoff + cursize == mp->offset &&
+ ((mp->mflags & MA_FLAGS) == MA_FLAGS
+ || __collector_strncmp (mp->mapname, "[vdso]", 6) == 0
+ || __collector_strncmp (mp->mapname, "[vsyscall]", 10) == 0
+ ))
+ cursize = mp->vaddr + mp->size - curbase;
+ else if (addr < mp->vaddr)
+ break;
+ else if ((mp->mflags & MA_FLAGS) != MA_FLAGS
+ && __collector_strncmp (mp->mapname, "[vdso]", 6)
+ && __collector_strncmp (mp->mapname, "[vsyscall]", 10))
+ {
+ curbase = 0;
+ curfoff = 0;
+ cursize = 0;
+ }
+ else
+ {
+ curbase = mp->vaddr;
+ curfoff = mp->offset;
+ cursize = mp->size;
+ }
+ }
+
+ if (addr >= curbase && addr < curbase + cursize)
+ {
+ *base = curbase;
+ *end = curbase + cursize;
+ return 1;
+ }
+
+ /*
+ * 21275311 Unwind failure in native stack for java application running on jdk8 on x86
+ *
+ * On JDK8, we've observed cases where Java-compiled methods end up
+ * in virtual address segments that were "dead zones" (mflags&PROT_READ==0) at
+ * the time of the last update_map_segments() but are now "live". So if we
+ * fail to find a segment, let's call update_map_segments and then retry
+ * before giving up.
+ */
+ if (number_of_tries < maxnretries)
+ {
+ number_of_tries++;
+ __collector_ext_update_map_segments ();
+ goto retry;
+ }
+ *base = 0;
+ *end = 0;
+ return 0;
+}
+
+/**
+ * Check if address belongs to a readable and executable segment
+ * @param addr
+ * @param base
+ * @param end
+ * @param maxnretries
+ * @return 1 - yes, 0 - no
+ */
+int
+__collector_check_segment (unsigned long addr, unsigned long *base,
+ unsigned long *end, int maxnretries)
+{
+ int MA_FLAGS = PROT_READ | PROT_EXEC;
+ int res = __collector_check_segment_internal (addr, base, end, maxnretries, MA_FLAGS);
+ return res;
+}
+
+/**
+ * Check if address belongs to a readable segment
+ * @param addr
+ * @param base
+ * @param end
+ * @param maxnretries
+ * @return 1 - yes, 0 - no
+ */
+int
+__collector_check_readable_segment( unsigned long addr, unsigned long *base, unsigned long *end, int maxnretries )
+{
+ int MA_FLAGS = PROT_READ;
+ int res = __collector_check_segment_internal(addr, base, end, maxnretries, MA_FLAGS);
+ return res;
+}
+
+static ELF_AUX *auxv = NULL;
+
+static void
+process_vsyscall_page ()
+{
+ TprintfT (DBG_LT2, "process_vsyscall_page()\n");
+ if (ndyn != 0)
+ {
+ /* We've done this one in this process, and cached the results */
+ /* use the cached results */
+ for (int i = 0; i < ndyn; i++)
+ {
+ append_segment_record ("<event kind=\"map\" object=\"dynfunc\" name=\"%s\" "
+ "vaddr=\"0x%016lX\" size=\"%u\" funcname=\"%s\" />\n",
+ dynname[i], dynvaddr[i], dynsize[i], dynfuncname[i]);
+ TprintfT (DBG_LT2, "process_vsyscall_page: append_segment_record map dynfunc='%s' vaddr=0x%016lX size=%ld funcname='%s' -- from cache\n",
+ dynname[i], (unsigned long) dynvaddr[i],
+ (long) dynsize[i], dynfuncname[i]);
+ }
+ }
+ if (nvsysfuncs != 0)
+ {
+ /* We've done this one in this process, and cached the results */
+ /* use the cached results */
+ hrtime_t hrt = GETRELTIME ();
+ for (int i = 0; i < nvsysfuncs; i++)
+ {
+ append_segment_record ("<event kind=\"map\" object=\"function\" tstamp=\"%u.%09u\" "
+ "vaddr=\"0x%016lX\" size=\"%u\" name=\"%s\" />\n",
+ (unsigned) (hrt / NANOSEC), (unsigned) (hrt % NANOSEC),
+ (unsigned long) sysfuncvaddr[i], (unsigned) sysfuncsize[i], sysfuncname[i]);
+ TprintfT (DBG_LT2, "process_vsyscall_page: append_segment_record map function='%s' vaddr=0x%016lX size=%ld -- from cache\n",
+ sysfuncname[i], (unsigned long) sysfuncvaddr[i], (long) sysfuncsize[i]);
+ }
+ }
+ if (ndyn + nvsysfuncs != 0)
+ return;
+
+ /* After fork we can't rely on environ as it might have
+ * been moved by putenv(). Use the pointer saved by the parent.
+ */
+ if (auxv == NULL)
+ {
+ char **envp = (char**) environ;
+ if (envp == NULL)
+ return;
+ while (*envp++ != NULL);
+ auxv = (ELF_AUX*) envp;
+ }
+ TprintfT (DBG_LT2, "process_vsyscall_page, auxv = ox%p\n", auxv);
+
+ ELF_AUX *ap;
+#ifdef DEBUG
+ for (ap = auxv; ap->a_type != AT_NULL; ap++)
+ TprintfT (DBG_LT2, "process_vsyscall_page: ELF_AUX: "
+ " a_type = 0x%016llx %10lld "
+ " a_un.a_val = 0x%016llx %10lld\n",
+ (long long) ap->a_type, (long long) ap->a_type,
+ (long long) ap->a_un.a_val, (long long) ap->a_un.a_val);
+#endif
+
+ // find the first ELF_AUX of type AT_SYSINFO_EHDR
+ ELF_EHDR *ehdr = NULL;
+ for (ap = auxv; ap->a_type != AT_NULL; ap++)
+ {
+ if (ap->a_type == AT_SYSINFO_EHDR)
+ {
+ // newer Linuxes do not have a_ptr field, they just have a_val
+ ehdr = (ELF_EHDR*) ap->a_un.a_val;
+ if (ehdr != NULL)
+ break;
+ }
+ }
+
+ // If one is found
+ if (ehdr != NULL)
+ {
+ char *mapName = "SYSINFO_EHDR";
+ MapInfo *mp;
+ for (mp = mmaps.next; mp; mp = mp->next)
+ {
+ if ((unsigned long) ehdr == mp->vaddr)
+ {
+ mp->mflags |= PROT_EXEC;
+ if (mp->mapname && mp->mapname[0])
+ mapName = mp->mapname;
+ break;
+ }
+ }
+
+ // Find the dynsym section and record all symbols
+ char *base = (char*) ehdr;
+ ELF_SHDR *shdr = (ELF_SHDR*) (base + ehdr->e_shoff);
+ int i;
+
+#if 0
+ TprintfT (DBG_LT2, "process_vsyscall_page: ehdr: EI_CLASS=%lld EI_DATA=%lld EI_OSABI=%lld e_type=%lld e_machine=%lld e_version=%lld\n"
+ " e_entry =0x%016llx %10lld e_phoff =0x%016llx %10lld\n"
+ " e_shoff =0x%016llx %10lld e_flags =0x%016llx %10lld\n"
+ " e_ehsize =0x%016llx %10lld e_phentsize =0x%016llx %10lld\n"
+ " e_phnum =0x%016llx %10lld e_shentsize =0x%016llx %10lld\n"
+ " e_shnum =0x%016llx %10lld e_shstrndx =0x%016llx %10lld\n",
+ (long long) ehdr->e_ident[EI_CLASS], (long long) ehdr->e_ident[EI_DATA], (long long) ehdr->e_ident[EI_OSABI],
+ (long long) ehdr->e_type, (long long) ehdr->e_machine, (long long) ehdr->e_version,
+ (long long) ehdr->e_entry, (long long) ehdr->e_entry,
+ (long long) ehdr->e_phoff, (long long) ehdr->e_phoff,
+ (long long) ehdr->e_shoff, (long long) ehdr->e_shoff,
+ (long long) ehdr->e_flags, (long long) ehdr->e_flags,
+ (long long) ehdr->e_ehsize, (long long) ehdr->e_ehsize,
+ (long long) ehdr->e_phentsize, (long long) ehdr->e_phentsize,
+ (long long) ehdr->e_phnum, (long long) ehdr->e_phnum,
+ (long long) ehdr->e_shentsize, (long long) ehdr->e_shentsize,
+ (long long) ehdr->e_shnum, (long long) ehdr->e_shnum,
+ (long long) ehdr->e_shstrndx, (long long) ehdr->e_shstrndx);
+ for (i = 1; i < ehdr->e_shnum; i++)
+ {
+ TprintfT (DBG_LT2, "process_vsyscall_page: SECTION=%d sh_name=%lld '%s'\n"
+ " sh_type =0x%016llx %10lld\n"
+ " sh_flags =0x%016llx %10lld\n"
+ " sh_addr =0x%016llx %10lld\n"
+ " sh_offset =0x%016llx %10lld\n"
+ " sh_size =0x%016llx %10lld\n"
+ " sh_link =0x%016llx %10lld\n"
+ " sh_info =0x%016llx %10lld\n"
+ " sh_addralign =0x%016llx %10lld\n"
+ " sh_entsize =0x%016llx %10lld\n",
+ i, (long long) shdr[i].sh_name, base + shdr[ehdr->e_shstrndx].sh_offset + shdr[i].sh_name,
+ (long long) shdr[i].sh_type, (long long) shdr[i].sh_type,
+ (long long) shdr[i].sh_flags, (long long) shdr[i].sh_flags,
+ (long long) shdr[i].sh_addr, (long long) shdr[i].sh_addr,
+ (long long) shdr[i].sh_offset, (long long) shdr[i].sh_offset,
+ (long long) shdr[i].sh_size, (long long) shdr[i].sh_size,
+ (long long) shdr[i].sh_link, (long long) shdr[i].sh_link,
+ (long long) shdr[i].sh_info, (long long) shdr[i].sh_info,
+ (long long) shdr[i].sh_addralign, (long long) shdr[i].sh_addralign,
+ (long long) shdr[i].sh_entsize, (long long) shdr[i].sh_entsize);
+ }
+#endif
+
+ int dynSec = -1;
+ for (i = 1; i < ehdr->e_shnum; i++)
+ if (shdr[i].sh_type == SHT_DYNSYM)
+ {
+ dynSec = i;
+ break;
+ }
+ if (dynSec != -1)
+ {
+ char *symbase = base + shdr[shdr[dynSec].sh_link].sh_offset;
+ ELF_SYM *symbols = (ELF_SYM*) (base + shdr[dynSec].sh_offset);
+ int nextSec = 0;
+ int n = shdr[dynSec].sh_size / shdr[dynSec].sh_entsize;
+ for (i = 0; i < n; i++)
+ {
+ ELF_SYM *sym = symbols + i;
+ TprintfT (DBG_LT2, "process_vsyscall_page: symbol=%d st_name=%lld '%s'\n"
+ " st_size = 0x%016llx %10lld\n"
+ " st_value = 0x%016llx %10lld\n"
+ " st_shndx = 0x%016llx %10lld\n"
+ " st_info = 0x%016llx %10lld\n",
+ i, (long long) sym->st_name, symbase + sym->st_name,
+ (long long) sym->st_size, (long long) sym->st_size,
+ (long long) sym->st_value, (long long) sym->st_value,
+ (long long) sym->st_shndx, (long long) sym->st_shndx,
+ (long long) sym->st_info, (long long) sym->st_info);
+ if (sym->st_shndx <= 0 || sym->st_size <= 0 ||
+ ELF_ST_BIND (sym->st_info) != STB_GLOBAL || ELF_ST_TYPE (sym->st_info) != STT_FUNC)
+ continue;
+ if (nextSec == 0)
+ nextSec = sym->st_shndx;
+ else if (nextSec > sym->st_shndx)
+ nextSec = sym->st_shndx;
+ }
+ if (nextSec == 0)
+ ehdr = NULL;
+
+ while (nextSec != 0)
+ {
+ int curSec = nextSec;
+ char *bgn = base + shdr[curSec].sh_offset;
+ char *end = bgn + shdr[curSec].sh_size;
+ for (i = 0; i < n; i++)
+ {
+ ELF_SYM *sym = symbols + i;
+ if (sym->st_shndx <= 0 || sym->st_size <= 0 ||
+ ELF_ST_BIND (sym->st_info) != STB_GLOBAL || ELF_ST_TYPE (sym->st_info) != STT_FUNC)
+ continue;
+ if (sym->st_shndx > curSec)
+ {
+ if (nextSec == curSec)
+ nextSec = sym->st_shndx;
+ else if (nextSec > sym->st_shndx)
+ nextSec = sym->st_shndx;
+ nextSec = sym->st_shndx;
+ continue;
+ }
+ if (sym->st_shndx != curSec)
+ continue;
+ long long st_delta = (sym->st_value >= shdr[sym->st_shndx].sh_addr) ?
+ (sym->st_value - shdr[sym->st_shndx].sh_addr) : -1;
+ char *st_value = bgn + st_delta;
+ if (st_delta >= 0 && st_value + sym->st_size <= end)
+ {
+ append_segment_record ("<event kind=\"map\" object=\"dynfunc\" name=\"%s\" "
+ "vaddr=\"0x%016lX\" size=\"%u\" funcname=\"%s\" />\n",
+ mapName, (void*) st_value, sym->st_size, symbase + sym->st_name);
+
+ TprintfT (DBG_LT2, "process_vsyscall_page: append_segment_record map dynfunc='%s' vaddr=%016lX size=%ld funcname='%s'\n",
+ mapName, (unsigned long) st_value,
+ (long) sym->st_size, symbase + sym->st_name);
+
+ /* now cache this for a subsequent experiment */
+ if (ndyn >= MAXDYN)
+ __collector_log_write ("<event kind=\"%s\" id=\"%d\">MAXDYN=%d</event>\n",
+ SP_JCMD_CERROR, COL_ERROR_MAPCACHE, MAXDYN);
+ else
+ {
+ dynname [ndyn] = CALL_UTIL (libc_strdup)(mapName);
+ dynvaddr [ndyn] = (void *) st_value;
+ dynsize [ndyn] = (unsigned) sym->st_size;
+ dynfuncname[ndyn] = CALL_UTIL (libc_strdup)(symbase + sym->st_name);
+ TprintfT (DBG_LT2, "process_vsyscall_page: cached entry %d map function='%s' vaddr=0x%016lX size=%ld '%s'\n",
+ ndyn, dynname[ndyn], (unsigned long) dynvaddr[ndyn],
+ (long) dynsize[ndyn], dynfuncname[ndyn]);
+ ndyn++;
+ }
+ }
+ }
+ __collector_int_func_load (DFUNC_KERNEL, mapName, NULL,
+ (void*) (base + shdr[curSec].sh_offset), shdr[curSec].sh_size, 0, NULL);
+
+ /* now cache this function for a subsequent experiment */
+ if (nvsysfuncs >= MAXVSYSFUNCS)
+ __collector_log_write ("<event kind=\"%s\" id=\"%d\">MAXVSYSFUNCS=%d</event>\n",
+ SP_JCMD_CERROR, COL_ERROR_MAPCACHE, MAXVSYSFUNCS);
+ else
+ {
+ sysfuncname[nvsysfuncs] = CALL_UTIL (libc_strdup)(mapName);
+ sysfuncvaddr[nvsysfuncs] = (unsigned long) (base + shdr[curSec].sh_offset);
+ sysfuncsize[nvsysfuncs] = (unsigned long) (shdr[curSec].sh_size);
+ TprintfT (DBG_LT2, "process_vsyscall_page: cached entry %d map function='%s' vaddr=0x%016lX size=%ld\n",
+ nvsysfuncs, sysfuncname[nvsysfuncs],
+ (unsigned long) sysfuncvaddr[nvsysfuncs],
+ (long) sysfuncsize[nvsysfuncs]);
+ nvsysfuncs++;
+ }
+ TprintfT (DBG_LT2, "process_vsyscall_page: collector_int_func_load='%s' vaddr=0x%016lX size=%ld\n",
+ mapName, (unsigned long) (base + shdr[curSec].sh_offset),
+ (long) shdr[curSec].sh_size);
+ if (curSec == nextSec)
+ break;
+ }
+ }
+ }
+
+#if WSIZE(32)
+ unsigned long vsysaddr = (unsigned long) 0xffffe000;
+#elif WSIZE(64)
+ unsigned long vsysaddr = (unsigned long) 0xffffffffff600000;
+#endif
+ // Make sure the vsyscall map has PROT_EXEC
+ MapInfo *mp;
+ for (mp = mmaps.next; mp; mp = mp->next)
+ {
+ TprintfT (DBG_LT2, "MapInfo: vaddr=0x%016llx [size=%lld] mflags=0x%llx offset=%lld pagesize=%lld\n"
+ " mapname='%s' filename='%s'\n",
+ (unsigned long long) mp->vaddr, (long long) mp->size,
+ (long long) mp->mflags, (long long) mp->offset, (long long) mp->pagesize,
+ mp->mapname ? mp->mapname : "NULL",
+ mp->filename ? mp->filename : "NULL");
+ if (vsysaddr == mp->vaddr)
+ mp->mflags |= PROT_EXEC;
+ if ((unsigned long) ehdr == (unsigned long) mp->vaddr)
+ continue;
+ if (__collector_strncmp (mp->mapname, "[vdso]", 6) == 0
+ || __collector_strncmp (mp->mapname, "[vsyscall]", 10) == 0)
+ {
+ /*
+ * On rubbia ( 2.6.9-5.ELsmp #1 SMP 32-bit ) access to ehdr causes SEGV.
+ * There doesn't seem to be a way to reliably determine the actual presence
+ * of the page: even when /proc reports it's there it can't be accessed.
+ * We will have to put up with <Unknown> on some Linuxes until this is resolved.
+ __collector_int_func_load(DFUNC_KERNEL, mp->mapname, NULL, (void*) mp->vaddr, mp->size, 0, NULL);
+ */
+ hrtime_t hrt = GETRELTIME ();
+ append_segment_record (
+ "<event kind=\"map\" object=\"function\" tstamp=\"%u.%09u\" "
+ "vaddr=\"0x%016lX\" size=\"%u\" name=\"%s\" />\n",
+ (unsigned) (hrt / NANOSEC), (unsigned) (hrt % NANOSEC),
+ (unsigned long) mp->vaddr, (unsigned) mp->size, mp->mapname);
+ TprintfT (DBG_LT2, "process_vsyscall_page: append_segment_record map function = %s, vaddr = 0x%016lX, size = %u\n",
+ mp->mapname, (unsigned long) mp->vaddr, (unsigned) mp->size);
+
+ /* now cache this function for a subsequent experiment */
+ if (nvsysfuncs >= MAXVSYSFUNCS)
+ __collector_log_write ("<event kind=\"%s\" id=\"%d\">MAXVSYSFUNCS=%d</event>\n",
+ SP_JCMD_CERROR, COL_ERROR_MAPCACHE, MAXVSYSFUNCS);
+ else
+ {
+ sysfuncname[nvsysfuncs] = CALL_UTIL (libc_strdup)(mp->mapname);
+ sysfuncvaddr[nvsysfuncs] = mp->vaddr;
+ sysfuncsize[nvsysfuncs] = (unsigned long) mp->size;
+ TprintfT (DBG_LT2, "process_vsyscall_page: cached entry %d map function='%s' vaddr=0x%016lX size=%ld\n",
+ nvsysfuncs, sysfuncname[nvsysfuncs],
+ (unsigned long) sysfuncvaddr[nvsysfuncs],
+ (long) sysfuncsize[nvsysfuncs]);
+ nvsysfuncs++;
+
+ }
+ }
+ }
+}
+
+/*
+ * collector API for dynamic functions
+ */
+void collector_func_load () __attribute__ ((weak, alias ("__collector_func_load")));
+void
+__collector_func_load (char *name, char *alias, char *sourcename,
+ void *vaddr, int size, int lntsize, DT_lineno *lntable)
+{
+ __collector_int_func_load (DFUNC_API, name, sourcename,
+ vaddr, size, lntsize, lntable);
+}
+
+void collector_func_unload () __attribute__ ((weak, alias ("__collector_func_unload")));
+void
+__collector_func_unload (void *vaddr)
+{
+ __collector_int_func_unload (DFUNC_API, vaddr);
+}
+
+/* routines for handling dynamic functions */
+static void
+rwrite (int fd, void *buf, size_t nbyte)
+{
+ size_t left = nbyte;
+ size_t res;
+ char *ptr = (char*) buf;
+ while (left > 0)
+ {
+ res = CALL_UTIL (write)(fd, ptr, left);
+ if (res == -1)
+ {
+ TprintfT (0, "ERROR: rwrite(%s) failed: errno=%d\n", dyntext_fname, errno);
+ (void) __collector_log_write ("<event kind=\"%s\" id=\"%d\" ec=\"%d\">%s</event>\n",
+ SP_JCMD_CERROR, COL_ERROR_DYNWRITE, errno, dyntext_fname);
+ return;
+ }
+ left -= res;
+ ptr += res;
+ }
+}
+
+void
+__collector_int_func_load (dfunc_mode_t mode, char *name, char *sourcename,
+ void *vaddr, int size, int lntsize, DT_lineno *lntable)
+{
+ char name_buf[32];
+ int slen;
+ static char pad[16];
+ int padn;
+ if (!mmap_initted)
+ return;
+ hrtime_t hrt = GETRELTIME ();
+
+ if (name == NULL)
+ {
+ /* generate a name based on vaddr */
+ CALL_UTIL (snprintf)(name_buf, sizeof (name_buf), "0x%lx", (unsigned long) vaddr);
+ name = name_buf;
+ }
+
+ switch (mode)
+ {
+ case DFUNC_API:
+ case DFUNC_KERNEL:
+ append_segment_record ("<event kind=\"map\" object=\"function\" tstamp=\"%u.%09u\" "
+ "vaddr=\"0x%016lX\" size=\"%u\" name=\"%s\" />\n",
+ (unsigned) (hrt / NANOSEC), (unsigned) (hrt % NANOSEC),
+ (unsigned long) vaddr, (unsigned) size, name);
+ break;
+ case DFUNC_JAVA:
+ append_segment_record ("<event kind=\"map\" object=\"jcm\" tstamp=\"%u.%09u\" "
+ "vaddr=\"0x%016lX\" size=\"%u\" methodId=\"%s\" />\n",
+ (unsigned) (hrt / NANOSEC), (unsigned) (hrt % NANOSEC),
+ (unsigned long) vaddr, (unsigned) size, name);
+ break;
+ default:
+ return;
+ }
+
+ /* 21275311 Unwind failure in native stack for java application running on jdk8 on x86
+ * Check:
+ * - function starts in a known segment (base1 != 0)
+ * - function ends in the same segment (base1==base2 && end1==end2)
+ * If not, then call update_map_segments().
+ */
+ unsigned long base1, end1, base2, end2;
+ __collector_check_segment ((unsigned long) vaddr, &base1, &end1, 0);
+ if (base1)
+ __collector_check_segment (((unsigned long) vaddr)+((unsigned long) size), &base2, &end2, 0);
+ if (base1 == 0 || base1 != base2 || end1 != end2)
+ __collector_ext_update_map_segments ();
+
+ /* Write a copy of actual code to the "dyntext" file */
+ DT_header dt_hdr;
+ dt_hdr.type = DT_HEADER;
+ dt_hdr.size = sizeof (dt_hdr);
+ dt_hdr.time = hrt;
+ unsigned long t = (unsigned long) vaddr; /* to suppress a warning from gcc */
+ dt_hdr.vaddr = (uint64_t) t;
+
+ DT_code dt_code;
+ dt_code.type = DT_CODE;
+ void *code = vaddr;
+ if (vaddr != NULL && size > 0)
+ {
+ dt_code.size = sizeof (dt_code) + ((size + 0xf) & ~0xf);
+ if (mode == DFUNC_KERNEL)
+ {
+ /* Some Linuxes don't accept vaddrs from the vsyscall
+ * page in write(). Make a copy.
+ */
+ code = alloca (size);
+ __collector_memcpy (code, vaddr, size);
+ }
+ }
+ else
+ dt_code.size = 0;
+
+ DT_srcfile dt_src;
+ dt_src.type = DT_SRCFILE;
+ if (sourcename)
+ {
+ slen = CALL_UTIL (strlen)(sourcename) + 1;
+ dt_src.size = slen ? sizeof (dt_src) + ((slen + 0xf) & ~0xf) : 0;
+ }
+ else
+ {
+ slen = 0;
+ dt_src.size = 0;
+ }
+
+ DT_ltable dt_ltbl;
+ dt_ltbl.type = DT_LTABLE;
+ if (lntable != NULL && lntsize > 0)
+ dt_ltbl.size = sizeof (dt_ltbl) + lntsize * sizeof (DT_lineno);
+ else
+ dt_ltbl.size = 0;
+
+ int fd = CALL_UTIL (open)(dyntext_fname, O_RDWR | O_APPEND);
+ if (fd == -1)
+ {
+ TprintfT (0, "ERROR: __collector_int_func_load: open(%s) failed: errno=%d\n",
+ dyntext_fname, errno);
+ (void) __collector_log_write ("<event kind=\"%s\" id=\"%d\" ec=\"%d\">%s</event>\n",
+ SP_JCMD_CERROR, COL_ERROR_DYNOPEN, errno, dyntext_fname);
+ return;
+ }
+
+ /* Lock the whole file */
+ __collector_mutex_lock (&dyntext_lock);
+ rwrite (fd, &dt_hdr, sizeof (dt_hdr));
+ if (dt_code.size)
+ {
+ padn = dt_code.size - sizeof (dt_code) - size;
+ rwrite (fd, &dt_code, sizeof (dt_code));
+ rwrite (fd, code, size);
+ rwrite (fd, &pad, padn);
+ }
+ if (dt_src.size)
+ {
+ padn = dt_src.size - sizeof (dt_src) - slen;
+ rwrite (fd, &dt_src, sizeof (dt_src));
+ rwrite (fd, sourcename, slen);
+ rwrite (fd, &pad, padn);
+ }
+ if (dt_ltbl.size)
+ {
+ rwrite (fd, &dt_ltbl, sizeof (dt_ltbl));
+ rwrite (fd, lntable, dt_ltbl.size - sizeof (dt_ltbl));
+ }
+
+ /* Unlock the file */
+ __collector_mutex_unlock( &dyntext_lock );
+ CALL_UTIL(close( fd ) );
+}
+
+void
+__collector_int_func_unload (dfunc_mode_t mode, void *vaddr)
+{
+ if (!mmap_initted)
+ return;
+ hrtime_t hrt = GETRELTIME ();
+ if (mode == DFUNC_API)
+ append_segment_record ("<event kind=\"unmap\" tstamp=\"%u.%09u\" vaddr=\"0x%016lX\"/>\n",
+ (unsigned) (hrt / NANOSEC), (unsigned) (hrt % NANOSEC), (unsigned long) vaddr);
+ else if (mode == DFUNC_JAVA)
+ /* note that the "vaddr" is really a method id, not an address */
+ append_segment_record ("<event kind=\"unmap\" tstamp=\"%u.%09u\" methodId=\"0x%016lX\"/>\n",
+ (unsigned) (hrt / NANOSEC), (unsigned) (hrt % NANOSEC), (unsigned long) vaddr);
+ else
+ return;
+}
+
+/*
+ * int init_mmap_intf()
+ * Set up interposition (if not already done).
+ */
+static int
+init_mmap_intf ()
+{
+ if (__collector_dlsym_guard)
+ return 1;
+ void *dlflag;
+ __real_mmap = (void*(*)(void* addr, size_t len, int prot, int flags,
+ int fildes, off_t off))dlsym (RTLD_NEXT, SYS_MMAP_NAME);
+ if (__real_mmap == NULL)
+ {
+
+ /* We are probably dlopened after libthread/libc,
+ * try to search in the previously loaded objects
+ */
+ __real_mmap = (void*(*)(void* addr, size_t len, int prot, int flags,
+ int fildes, off_t off))dlsym (RTLD_DEFAULT, SYS_MMAP_NAME);
+ if (__real_mmap == NULL)
+ {
+ TprintfT (0, "ERROR: collector real mmap not found\n");
+ return 1;
+ }
+ TprintfT (DBG_LT2, "collector real mmap found with RTLD_DEFAULT\n");
+ dlflag = RTLD_DEFAULT;
+ }
+ else
+ {
+ TprintfT (DBG_LT2, "collector real mmap found with RTLD_NEXT\n");
+ dlflag = RTLD_NEXT;
+ }
+
+ TprintfT (DBG_LT2, "init_mmap_intf() @%p __real_mmap\n", __real_mmap);
+ __real_mmap64 = (void*(*)(void *, size_t, int, int, int, off64_t))
+ dlsym (dlflag, SYS_MMAP64_NAME);
+ TprintfT (DBG_LT2, "init_mmap_intf() @%p __real_mmap64\n", __real_mmap64);
+ __real_munmap = (int(*)(void *, size_t)) dlsym (dlflag, SYS_MUNMAP_NAME);
+ TprintfT (DBG_LT2, "init_mmap_intf() @%p __real_munmap\n", __real_munmap);
+
+ // dlopen/dlmopen/dlclose are in libdl.so
+ __real_dlopen = (void*(*)(const char *, int))
+ dlvsym (dlflag, SYS_DLOPEN_NAME, SYS_DLOPEN_VERSION);
+ TprintfT (DBG_LT2, "init_mmap_intf() [%s] @%p __real_dlopen\n",
+ SYS_DLOPEN_VERSION, __real_dlopen);
+#if (ARCH(Intel) && WSIZE(32)) || ARCH(SPARC)
+ __real_dlopen_2_1 = __real_dlopen;
+ __real_dlopen_2_0 = (void*(*)(const char *, int))
+ dlvsym (dlflag, SYS_DLOPEN_NAME, "GLIBC_2.0");
+#endif
+
+ __real_dlclose = (int(*)(void* handle))dlsym (dlflag, SYS_DLCLOSE_NAME);
+ TprintfT (DBG_LT2, "init_mmap_intf() @%p __real_dlclose\n", __real_dlclose);
+ TprintfT (DBG_LT2, "init_mmap_intf() done\n");
+
+ return 0;
+}
+
+/*------------------------------------------------------------- mmap */
+void *
+mmap (void *start, size_t length, int prot, int flags, int fd, off_t offset)
+{
+ int err = 0;
+ if (NULL_PTR (mmap))
+ err = init_mmap_intf ();
+ if (err)
+ return MAP_FAILED;
+
+ /* hrtime_t hrt = GETRELTIME(); */
+ void *ret = CALL_REAL (mmap)(start, length, prot, flags, fd, offset);
+
+ if (!CHCK_REENTRANCE && (ret != MAP_FAILED) && collector_heap_record != NULL)
+ {
+ PUSH_REENTRANCE;
+ /* write a separate record for mmap tracing */
+ collector_heap_record (MMAP_TRACE, length, ret);
+ POP_REENTRANCE;
+ }
+ TprintfT (DBG_LT2, "libcollector.mmap(%p, %ld, %d, %d, %d, 0x%lld) = %p\n",
+ start, (long) length, prot, flags, fd, (long long) offset, ret);
+ return ret;
+}
+
+/*------------------------------------------------------------- mmap64 */
+#if WSIZE(32) /* mmap64 only defined for non-64-bit */
+
+void *
+mmap64 (void *start, size_t length, int prot, int flags, int fd, off64_t offset)
+{
+ if (NULL_PTR (mmap64))
+ init_mmap_intf ();
+
+ /* hrtime_t hrt = GETRELTIME(); */
+ void *ret = CALL_REAL (mmap64)(start, length, prot, flags, fd, offset);
+ if (!CHCK_REENTRANCE && (ret != MAP_FAILED) && collector_heap_record != NULL)
+ {
+ PUSH_REENTRANCE;
+ /* write a separate record for mmap tracing */
+ collector_heap_record (MMAP_TRACE, length, ret);
+ POP_REENTRANCE;
+ }
+ TprintfT (DBG_LT2, "libcollector.mmap64(%p, %ld, %d, %d, %d, 0x%lld) = %p\n",
+ start, (long) length, prot, flags, fd, (long long) offset, ret);
+ return ret;
+}
+#endif /* WSIZE(32) */
+
+/*------------------------------------------------------------- munmap */
+int
+munmap (void *start, size_t length)
+{
+ if (NULL_PTR (munmap))
+ init_mmap_intf ();
+
+ /* hrtime_t hrt = GETRELTIME(); */
+ int rc = CALL_REAL (munmap)(start, length);
+ if (!CHCK_REENTRANCE && (rc == 0) && collector_heap_record != NULL)
+ {
+ PUSH_REENTRANCE;
+ /* write a separate record for mmap tracing */
+ collector_heap_record (MUNMAP_TRACE, length, start);
+ POP_REENTRANCE;
+ }
+ TprintfT (DBG_LT2, "libcollector.munmap(%p, %ld) = %d\n", start, (long) length, rc);
+ return rc;
+}
+
+
+/*------------------------------------------------------------- dlopen */
+// map interposed symbol versions
+#if (ARCH(Intel) && WSIZE(32)) || ARCH(SPARC)
+
+static void *
+__collector_dlopen_symver (void*(real_dlopen) (), void *caller, const char *pathname, int mode);
+
+SYMVER_ATTRIBUTE (__collector_dlopen_2_1, dlopen@@GLIBC_2.1)
+void *
+__collector_dlopen_2_1 (const char *pathname, int mode)
+{
+ if (NULL_PTR (dlopen))
+ init_mmap_intf ();
+ void *caller = __builtin_return_address (0); // must be called inside dlopen first layer interpostion
+ return __collector_dlopen_symver (CALL_REAL (dlopen_2_1), caller, pathname, mode);
+}
+
+SYMVER_ATTRIBUTE (__collector_dlopen_2_0, dlopen@GLIBC_2.0)
+void *
+__collector_dlopen_2_0 (const char *pathname, int mode)
+{
+ if (NULL_PTR (dlopen))
+ init_mmap_intf ();
+ void* caller = __builtin_return_address (0); // must be called inside dlopen first layer interpostion
+ return __collector_dlopen_symver (CALL_REAL (dlopen_2_0), caller, pathname, mode);
+}
+#endif
+
+#if (ARCH(Intel) && WSIZE(32)) || ARCH(SPARC)
+static void *
+__collector_dlopen_symver (void*(real_dlopen) (), void *caller, const char *pathname, int mode)
+#else
+void *
+dlopen (const char *pathname, int mode)
+#endif
+{
+ const char * real_pathname = pathname;
+ char new_pathname[MAXPATHLEN];
+ int origin_offset = 0;
+ TprintfT (DBG_LT2, "dlopen: pathname=%s, mode=%d\n", pathname ? pathname : "NULL", mode);
+ if (pathname && __collector_strStartWith (pathname, "$ORIGIN/") == 0)
+ origin_offset = 8;
+ else if (pathname && __collector_strStartWith (pathname, "${ORIGIN}/") == 0)
+ origin_offset = 10;
+ if (origin_offset)
+ {
+#if ! ((ARCH(Intel) && WSIZE(32)) || ARCH(SPARC))
+ // 'caller' is not passed as an argument
+ void * caller = __builtin_return_address (0); // must be called inside dlopen first layer interpostion
+#endif
+ Dl_info dl_info;
+ if (caller && dladdr (caller, &dl_info) != 0)
+ {
+ TprintfT (DBG_LT2, "dladdr(%p): %p fname=%s\n",
+ caller, dl_info.dli_fbase, dl_info.dli_fname);
+ new_pathname[0] = '\0';
+ const char *p = __collector_strrchr (dl_info.dli_fname, '/');
+ if (p)
+ __collector_strlcpy (new_pathname, dl_info.dli_fname,
+ (p - dl_info.dli_fname + 2) < MAXPATHLEN ? (p - dl_info.dli_fname + 2) : MAXPATHLEN);
+ __collector_strlcat (new_pathname, pathname + origin_offset, MAXPATHLEN - CALL_UTIL (strlen)(new_pathname));
+ real_pathname = new_pathname;
+ }
+ else
+ TprintfT (0, "ERROR: dladdr(%p): %s\n", caller, dlerror ());
+ }
+ if (NULL_PTR (dlopen))
+ init_mmap_intf ();
+ TprintfT (DBG_LT2, "libcollector.dlopen(%s,%d) interposing\n",
+ pathname ? pathname : "", mode);
+ void* ret = NULL;
+
+ // set guard for duration of handling dlopen, since want to ensure
+ // new mappings are resolved after the actual dlopen has occurred
+ PUSH_REENTRANCE;
+ hrtime_t hrt = GETRELTIME ();
+
+ if (real_pathname && !__collector_strchr (real_pathname, '/'))
+ { // got an unqualified name
+ // get caller and use its searchpath
+#if ! ((ARCH(Intel) && WSIZE(32)) || ARCH(SPARC))
+ void* caller = __builtin_return_address (0); // must be called inside dlopen
+#endif
+ if (caller)
+ {
+#if (ARCH(Intel) && WSIZE(32)) || ARCH(SPARC)
+ ret = dlopen_searchpath_symver (real_dlopen, caller, real_pathname, mode);
+#else
+ ret = dlopen_searchpath (caller, real_pathname, mode);
+#endif
+ }
+ }
+
+ if (!ret)
+ {
+#if (ARCH(Intel) && WSIZE(32)) || ARCH(SPARC)
+ ret = (real_dlopen) (real_pathname, mode);
+#else
+ ret = CALL_REAL (dlopen)(real_pathname, mode);
+#endif
+ }
+ TprintfT (DBG_LT2, "libcollector -- dlopen(%s) returning %p\n", pathname, ret);
+
+ /* Don't call update if dlopen failed: preserve dlerror() */
+ if (ret && (mmap_mode > 0) && !(mode & RTLD_NOLOAD))
+ update_map_segments (hrt, 1);
+ TprintfT (DBG_LT2, "libcollector -- dlopen(%s) returning %p\n", pathname, ret);
+ POP_REENTRANCE;
+ return ret;
+}
+
+/*------------------------------------------------------------- dlclose */
+int
+dlclose (void *handle)
+{
+ if (NULL_PTR (dlclose))
+ init_mmap_intf ();
+ TprintfT (DBG_LT2, "__collector_dlclose(%p) entered\n", handle);
+ hrtime_t hrt = GETRELTIME ();
+ if (!CHCK_REENTRANCE)
+ {
+ PUSH_REENTRANCE;
+ update_map_segments (hrt, 1);
+ POP_REENTRANCE;
+ hrt = GETRELTIME ();
+ }
+ int ret = CALL_REAL (dlclose)(handle);
+
+ /* Don't call update if dlclose failed: preserve dlerror() */
+ if (!ret && !CHCK_REENTRANCE)
+ {
+ PUSH_REENTRANCE;
+ update_map_segments (hrt, 1);
+ POP_REENTRANCE;
+ }
+ TprintfT (DBG_LT2, "__collector_dlclose(%p) returning %d\n", handle, ret);
+ return ret;
+}
diff --git a/gprofng/libcollector/profile.c b/gprofng/libcollector/profile.c
new file mode 100644
index 00000000000..996d3f09198
--- /dev/null
+++ b/gprofng/libcollector/profile.c
@@ -0,0 +1,287 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+/*
+ * Profile handling
+ *
+ * Note: SIGPROF signal-handling and interval timer (once exclusive to
+ * profile handling) are now common services provided by the dispatcher.
+ */
+
+#include "config.h"
+#include <dlfcn.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ucontext.h>
+#include <unistd.h>
+
+#include "gp-defs.h"
+#include "collector_module.h"
+#include "gp-experiment.h"
+#include "data_pckts.h"
+#include "libcol_util.h"
+#include "hwprofile.h"
+#include "tsd.h"
+
+/* TprintfT(<level>,...) definitions. Adjust per module as needed */
+#define DBG_LT0 0 // for high-level configuration, unexpected errors/warnings
+#define DBG_LT1 1 // for configuration details, warnings
+#define DBG_LT2 2
+#define DBG_LT3 3
+
+static int init_interface (CollectorInterface*);
+static int open_experiment (const char *);
+static int start_data_collection (void);
+static int stop_data_collection (void);
+static int close_experiment (void);
+static int detach_experiment (void);
+
+static ModuleInterface module_interface ={
+ SP_PROFILE_FILE, /* description */
+ init_interface, /* initInterface */
+ open_experiment, /* openExperiment */
+ start_data_collection, /* startDataCollection */
+ stop_data_collection, /* stopDataCollection */
+ close_experiment, /* closeExperiment */
+ detach_experiment /* detachExperiment (fork child) */
+};
+
+static CollectorInterface *collector_interface = NULL;
+static int prof_mode = 0;
+static CollectorModule prof_hndl = COLLECTOR_MODULE_ERR;
+static unsigned prof_key = COLLECTOR_TSD_INVALID_KEY;
+
+typedef struct ClockPacket
+{ /* clock profiling packet */
+ CM_Packet comm;
+ pthread_t lwp_id;
+ pthread_t thr_id;
+ uint32_t cpu_id;
+ hrtime_t tstamp __attribute__ ((packed));
+ uint64_t frinfo __attribute__ ((packed));
+ int mstate; /* kernel microstate */
+ int nticks; /* number of ticks in that state */
+} ClockPacket;
+
+/* XXX should be able to use local types */
+#define CLOCK_TYPE OPROF_PCKT
+
+#define CHCK_REENTRANCE(x) ( !prof_mode || ((x) = collector_interface->getKey( prof_key )) == NULL || (*(x) != 0) )
+#define PUSH_REENTRANCE(x) ((*(x))++)
+#define POP_REENTRANCE(x) ((*(x))--)
+
+#ifdef DEBUG
+#define Tprintf(...) if (collector_interface) collector_interface->writeDebugInfo( 0, __VA_ARGS__ )
+#define TprintfT(...) if (collector_interface) collector_interface->writeDebugInfo( 1, __VA_ARGS__ )
+#else
+#define Tprintf(...)
+#define TprintfT(...)
+#endif
+
+static void init_module () __attribute__ ((constructor));
+
+static void
+init_module ()
+{
+ __collector_dlsym_guard = 1;
+ RegModuleFunc reg_module = (RegModuleFunc) dlsym (RTLD_DEFAULT, "__collector_register_module");
+ __collector_dlsym_guard = 0;
+ if (reg_module == NULL)
+ {
+ TprintfT (0, "clockprof: init_module FAILED -- reg_module = NULL\n");
+ return;
+ }
+ prof_hndl = reg_module (&module_interface);
+ if (prof_hndl == COLLECTOR_MODULE_ERR && collector_interface != NULL)
+ {
+ Tprintf (0, "clockprof: ERROR: handle not created.\n");
+ collector_interface->writeLog ("<event kind=\"%s\" id=\"%d\">data handle not created</event>\n", SP_JCMD_CERROR, COL_ERROR_PROFINIT);
+ }
+ TprintfT (0, "clockprof: init_module, prof_hndl = %d\n", prof_hndl);
+ return;
+}
+
+static int
+init_interface (CollectorInterface *_collector_interface)
+{
+ collector_interface = _collector_interface;
+ return COL_ERROR_NONE;
+}
+
+static int
+open_experiment (const char *exp)
+{
+ if (collector_interface == NULL)
+ {
+ Tprintf (0, "clockprof: ERROR: collector_interface is null.\n");
+ return COL_ERROR_PROFINIT;
+ }
+ const char *params = collector_interface->getParams ();
+ while (params)
+ {
+ if (__collector_strStartWith (params, "p:") == 0)
+ {
+ params += 2;
+ break;
+ }
+ while (*params != 0 && *params != ';')
+ params++;
+ if (*params == 0)
+ params = NULL;
+ else
+ params++;
+ }
+ if (params == NULL) /* Clock profiling not specified */
+ return COL_ERROR_PROFINIT;
+ TprintfT (0, "clockprof: open_experiment %s -- %s\n", exp, params);
+ int prof_interval = CALL_UTIL (strtol)(params, NULL, 0);
+ prof_key = collector_interface->createKey (sizeof ( int), NULL, NULL);
+ if (prof_key == (unsigned) - 1)
+ {
+ Tprintf (0, "clockprof: ERROR: TSD key create failed.\n");
+ collector_interface->writeLog ("<event kind=\"%s\" id=\"%d\">TSD key not created</event>\n", SP_JCMD_CERROR, COL_ERROR_PROFINIT);
+ return COL_ERROR_PROFINIT;
+ }
+
+ /* set dispatcher interval timer period used for all timed activities */
+ int prof_interval_actual = __collector_ext_itimer_set (prof_interval);
+ TprintfT (0, "clockprof: open_experiment(): __collector_ext_itimer_set (actual period=%d, req_period=%d)\n",
+ prof_interval_actual, prof_interval);
+ if (prof_interval_actual <= 0)
+ {
+ collector_interface->writeLog ("<event kind=\"%s\" id=\"%d\">itimer could not be set</event>\n", SP_JCMD_CERROR, COL_ERROR_PROFINIT);
+ return COL_ERROR_PROFINIT;
+ }
+ if ((prof_interval_actual >= (prof_interval + prof_interval / 10)) ||
+ (prof_interval_actual <= (prof_interval - prof_interval / 10)))
+ collector_interface->writeLog ("<event kind=\"%s\" id=\"%d\">%d -> %d</event>\n", SP_JCMD_CWARN, COL_WARN_PROFRND, prof_interval, prof_interval_actual);
+ else if (prof_interval_actual != prof_interval)
+ collector_interface->writeLog ("<event kind=\"%s\" id=\"%d\">%d -> %d</event>\n", SP_JCMD_COMMENT, COL_WARN_PROFRND, prof_interval, prof_interval_actual);
+ prof_interval = prof_interval_actual;
+ collector_interface->writeLog ("<profile name=\"%s\" ptimer=\"%d\" numstates=\"%d\">\n",
+ SP_JCMD_PROFILE, prof_interval, LMS_MAGIC_ID_LINUX);
+ collector_interface->writeLog (" <profdata fname=\"%s\"/>\n",
+ module_interface.description);
+
+ /* Record Profile packet description */
+ ClockPacket *cp = NULL;
+ collector_interface->writeLog (" <profpckt kind=\"%d\" uname=\"" STXT ("Clock profiling data") "\">\n", CLOCK_TYPE);
+ collector_interface->writeLog (" <field name=\"LWPID\" uname=\"" STXT ("Lightweight process id") "\" offset=\"%d\" type=\"%s\"/>\n",
+ &cp->lwp_id, sizeof (cp->lwp_id) == 4 ? "INT32" : "INT64");
+ collector_interface->writeLog (" <field name=\"THRID\" uname=\"" STXT ("Thread number") "\" offset=\"%d\" type=\"%s\"/>\n",
+ &cp->thr_id, sizeof (cp->thr_id) == 4 ? "INT32" : "INT64");
+ collector_interface->writeLog (" <field name=\"CPUID\" uname=\"" STXT ("CPU id") "\" offset=\"%d\" type=\"%s\"/>\n",
+ &cp->cpu_id, sizeof (cp->cpu_id) == 4 ? "INT32" : "INT64");
+ collector_interface->writeLog (" <field name=\"TSTAMP\" uname=\"" STXT ("High resolution timestamp") "\" offset=\"%d\" type=\"%s\"/>\n",
+ &cp->tstamp, sizeof (cp->tstamp) == 4 ? "INT32" : "INT64");
+ collector_interface->writeLog (" <field name=\"FRINFO\" offset=\"%d\" type=\"%s\"/>\n",
+ &cp->frinfo, sizeof (cp->frinfo) == 4 ? "INT32" : "INT64");
+ collector_interface->writeLog (" <field name=\"MSTATE\" uname=\"" STXT ("Thread state") "\" offset=\"%d\" type=\"%s\"/>\n",
+ &cp->mstate, sizeof (cp->mstate) == 4 ? "INT32" : "INT64");
+ collector_interface->writeLog (" <field name=\"NTICK\" uname=\"" STXT ("Duration") "\" offset=\"%d\" type=\"%s\"/>\n",
+ &cp->nticks, sizeof (cp->nticks) == 4 ? "INT32" : "INT64");
+ collector_interface->writeLog (" </profpckt>\n");
+ collector_interface->writeLog ("</profile>\n");
+ return COL_ERROR_NONE;
+}
+
+static int
+start_data_collection (void)
+{
+ TprintfT (0, "clockprof: start_data_collection\n");
+ prof_mode = 1;
+ return 0;
+}
+
+static int
+stop_data_collection (void)
+{
+ prof_mode = 0;
+ TprintfT (0, "clockprof: stop_data_collection\n");
+ return 0;
+}
+
+static int
+close_experiment (void)
+{
+ prof_mode = 0;
+ prof_key = COLLECTOR_TSD_INVALID_KEY;
+ TprintfT (0, "clockprof: close_experiment\n");
+ return 0;
+}
+
+/* fork child. Clean up state but don't write to experiment */
+static int
+detach_experiment (void)
+{
+ prof_mode = 0;
+ prof_key = COLLECTOR_TSD_INVALID_KEY;
+ TprintfT (0, "clockprof: detach_experiment\n");
+ return 0;
+}
+
+/*
+ * void collector_lost_profile_context
+ * Placeholder/marker function used when profiling given NULL context.
+ */
+void
+__collector_lost_profile_context (void) { }
+
+/*
+ * void __collector_ext_profile_handler( siginfo_t *info, ucontext_t *context )
+ * Handle real profile events to collect profile data.
+ */
+void
+__collector_ext_profile_handler (siginfo_t *info, ucontext_t *context)
+{
+ int *guard;
+ if (!prof_mode) /* sigprof timer running only because hwprofile.c needs it */
+ return;
+ if (CHCK_REENTRANCE (guard))
+ {
+ TprintfT (0, "__collector_ext_profile_handler: ERROR: prof_mode=%d guard=%d!\n",
+ prof_mode, guard ? *guard : -2);
+ return;
+ }
+ PUSH_REENTRANCE (guard);
+ TprintfT (DBG_LT3, "__collector_ext_profile_handler\n");
+ ucontext_t uctxmem;
+ if (context == NULL)
+ {
+ /* assume this case is rare, and accept overhead of creating dummy_uc */
+ TprintfT (0, "collector_profile_handler: ERROR: got NULL context!\n");
+ context = &uctxmem;
+ getcontext (context); /* initialize dummy context */
+ SETFUNCTIONCONTEXT (context, &__collector_lost_profile_context);
+ }
+ ClockPacket pckt;
+ CALL_UTIL (memset)(&pckt, 0, sizeof ( pckt));
+ pckt.comm.tsize = sizeof ( pckt);
+ pckt.comm.type = CLOCK_TYPE;
+ pckt.lwp_id = __collector_lwp_self ();
+ pckt.thr_id = __collector_thr_self ();
+ pckt.cpu_id = CALL_UTIL (getcpuid)();
+ pckt.tstamp = collector_interface->getHiResTime ();
+ pckt.frinfo = collector_interface->getFrameInfo (COLLECTOR_MODULE_ERR, pckt.tstamp, FRINFO_FROM_UC, context);
+ pckt.mstate = LMS_LINUX_CPU;
+ pckt.nticks = 1;
+ collector_interface->writeDataPacket (prof_hndl, (CM_Packet*) & pckt);
+ POP_REENTRANCE (guard);
+}
diff --git a/gprofng/libcollector/synctrace.c b/gprofng/libcollector/synctrace.c
new file mode 100644
index 00000000000..969c681d842
--- /dev/null
+++ b/gprofng/libcollector/synctrace.c
@@ -0,0 +1,1061 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+/*
+ * Synchronization events
+ */
+#include "config.h"
+#include <alloca.h>
+#include <dlfcn.h>
+#include <unistd.h>
+#include <semaphore.h> /* sem_wait() */
+#include <stdlib.h>
+#include <string.h>
+#include <sys/param.h>
+#include <pthread.h>
+
+#include "gp-defs.h"
+#include "collector_module.h"
+#include "gp-experiment.h"
+#include "data_pckts.h"
+#include "i18n.h"
+#include "tsd.h"
+#include "cc_libcollector.h"
+
+/* TprintfT(<level>,...) definitions. Adjust per module as needed */
+#define DBG_LT0 0 // for high-level configuration, unexpected errors/warnings
+#define DBG_LTT 0 // for interposition on GLIBC functions
+#define DBG_LT1 1 // for configuration details, warnings
+#define DBG_LT2 2
+#define DBG_LT3 3
+
+/* define the packet that will be written out */
+typedef struct Sync_packet
+{ /* Synchronization delay tracing packet */
+ Common_packet comm;
+ hrtime_t requested; /* time of synchronization request */
+ Vaddr_type objp; /* vaddr of synchronization object */
+} Sync_packet;
+
+static int open_experiment (const char *);
+static int start_data_collection (void);
+static int stop_data_collection (void);
+static int close_experiment (void);
+static int detach_experiment (void);
+static int init_thread_intf ();
+static int sync_calibrate ();
+
+static ModuleInterface module_interface ={
+ SP_SYNCTRACE_FILE, /* description */
+ NULL, /* initInterface */
+ open_experiment, /* openExperiment */
+ start_data_collection, /* startDataCollection */
+ stop_data_collection, /* stopDataCollection */
+ close_experiment, /* closeExperiment */
+ detach_experiment /* detachExperiment (fork child) */
+};
+
+static CollectorInterface *collector_interface = NULL;
+static int sync_mode = 0;
+static long sync_scope = 0;
+static int sync_native = 0;
+static int sync_java = 0;
+static CollectorModule sync_hndl = COLLECTOR_MODULE_ERR;
+static unsigned sync_key = COLLECTOR_TSD_INVALID_KEY;
+static long sync_threshold = -1; /* calibrate the value */
+static int init_thread_intf_started = 0;
+static int init_thread_intf_finished = 0;
+
+#define CHCK_NREENTRANCE(x) (!sync_native || !sync_mode || ((x) = collector_interface->getKey( sync_key )) == NULL || (*(x) != 0))
+#define RECHCK_NREENTRANCE(x) (!sync_native || !sync_mode || ((x) = collector_interface->getKey( sync_key )) == NULL || (*(x) == 0))
+#define CHCK_JREENTRANCE(x) (!sync_java || !sync_mode || ((x) = collector_interface->getKey( sync_key )) == NULL || (*(x) != 0))
+#define RECHCK_JREENTRANCE(x) (!sync_java || !sync_mode || ((x) = collector_interface->getKey( sync_key )) == NULL || (*(x) == 0))
+#define PUSH_REENTRANCE(x) ((*(x))++)
+#define POP_REENTRANCE(x) ((*(x))--)
+
+#define CALL_REAL(x) (*(int(*)())__real_##x)
+#define NULL_PTR(x) ( __real_##x == NULL )
+#define gethrtime collector_interface->getHiResTime
+
+#ifdef DEBUG
+#define Tprintf(...) if (collector_interface) collector_interface->writeDebugInfo( 0, __VA_ARGS__ )
+#define TprintfT(...) if (collector_interface) collector_interface->writeDebugInfo( 1, __VA_ARGS__ )
+#else
+#define Tprintf(...)
+#define TprintfT(...)
+#endif
+
+/*
+ * In most cases, the functions which require interposition are implemented as
+ * weak symbols corresponding to an associated internal function named with a
+ * leading underscore: e.g., mutex_lock() is simply an alias for _mutex_lock().
+ * For the wait functions, however, the published version (used by applications)
+ * is distinct from the internal version (used by system libraries), i.e.,
+ * cond_wait() is an alias for _cond_wait_cancel() rather than _cond_wait().
+ */
+static void *__real_strtol = NULL;
+static void *__real_fprintf = NULL;
+static void *__real___collector_jprofile_enable_synctrace = NULL;
+static void *__real_pthread_mutex_lock = NULL;
+static void *__real_pthread_mutex_unlock = NULL; /* not interposed, used in calibrate */
+static void *__real_pthread_cond_wait = NULL;
+static void *__real_pthread_cond_timedwait = NULL;
+static void *__real_pthread_join = NULL;
+static void *__real_sem_wait = NULL;
+static void *__real_pthread_cond_wait_2_3_2 = NULL;
+static void *__real_pthread_cond_timedwait_2_3_2 = NULL;
+
+#if WSIZE(32)
+static void *__real_sem_wait_2_1 = NULL;
+static void *__real_sem_wait_2_0 = NULL;
+static void *__real_pthread_cond_wait_2_0 = NULL;
+static void *__real_pthread_cond_timedwait_2_0 = NULL;
+#elif WSIZE(64)
+#if ARCH(Intel)
+static void *__real_pthread_cond_wait_2_2_5 = NULL;
+static void *__real_pthread_cond_timedwait_2_2_5 = NULL;
+#elif ARCH(SPARC)
+static void *__real_pthread_cond_wait_2_2 = NULL;
+static void *__real_pthread_cond_timedwait_2_2 = NULL;
+#endif /* ARCH() */
+#endif /* WSIZE() */
+
+static void
+collector_memset (void *s, int c, size_t n)
+{
+ unsigned char *s1 = s;
+ while (n--)
+ *s1++ = (unsigned char) c;
+}
+
+void
+__collector_module_init (CollectorInterface *_collector_interface)
+{
+ if (_collector_interface == NULL)
+ return;
+ collector_interface = _collector_interface;
+ TprintfT (0, "synctrace: __collector_module_init\n");
+ sync_hndl = collector_interface->registerModule (&module_interface);
+
+ /* Initialize next module */
+ ModuleInitFunc next_init = (ModuleInitFunc) dlsym (RTLD_NEXT, "__collector_module_init");
+ if (next_init != NULL)
+ next_init (_collector_interface);
+}
+
+static int
+open_experiment (const char *exp)
+{
+ long thresh = 0;
+ if (init_thread_intf_finished == 0)
+ init_thread_intf ();
+ if (collector_interface == NULL)
+ {
+ Tprintf (0, "synctrace: collector_interface is null.\n");
+ return COL_ERROR_SYNCINIT;
+ }
+ if (sync_hndl == COLLECTOR_MODULE_ERR)
+ {
+ Tprintf (0, "synctrace: handle create failed.\n");
+ collector_interface->writeLog ("<event kind=\"%s\" id=\"%d\">data handle not created</event>\n",
+ SP_JCMD_CERROR, COL_ERROR_SYNCINIT);
+ return COL_ERROR_SYNCINIT;
+ }
+ TprintfT (0, "synctrace: open_experiment %s\n", exp);
+
+ char *params = (char *) collector_interface->getParams ();
+ while (params)
+ {
+ if ((params[0] == 's') && (params[1] == ':'))
+ {
+ char *ptr = params + 2;
+ Tprintf (DBG_LT1, "synctrace: open_experiment s: parameter = %s\n", ptr);
+ while (*ptr != ',' && *ptr != ';')
+ ptr++;
+ sync_scope = 0;
+ if (*ptr == ',')
+ {
+ sync_scope = CALL_REAL (strtol) (ptr + 1, NULL, 0);
+ switch (sync_scope)
+ {
+ case 1:
+ sync_java = 0;
+ sync_native = 1;
+ break;
+ case 2:
+ sync_java = 1;
+ sync_native = 0;
+ break;
+ default:
+ case 3:
+ sync_native = 1;
+ sync_java = 1;
+ break;
+ }
+ Tprintf (0, "\tsynctrace: sync_scope found as %ld\n", sync_scope);
+ }
+ else
+ {
+ /* the old-style descriptor, without scope */
+ /* if there was no comma, use the old default */
+ sync_scope = 3;
+ sync_java = 1;
+ sync_native = 1;
+ Tprintf (0, "\tsynctrace: sync_scope not found set to %ld\n", sync_scope);
+ }
+ if (__real___collector_jprofile_enable_synctrace == NULL)
+ sync_java = 0;
+ thresh = CALL_REAL (strtol)(params + 2, NULL, 0);
+ break; /* from the loop to find the "s:thresh,scope" entry */
+ }
+ else
+ params++;
+ }
+ if (params == NULL) /* Sync data collection not specified */
+ return COL_ERROR_SYNCINIT;
+ if (thresh < 0) /* calibrate the threshold, keep it as a negative number */
+ thresh = -sync_calibrate ();
+
+ sync_key = collector_interface->createKey (sizeof ( int), NULL, NULL);
+ if (sync_key == (unsigned) - 1)
+ {
+ Tprintf (0, "synctrace: TSD key create failed.\n");
+ collector_interface->writeLog ("<event kind=\"%s\" id=\"%d\">TSD key not created</event>\n",
+ SP_JCMD_CERROR, COL_ERROR_SYNCINIT);
+ return COL_ERROR_SYNCINIT;
+ }
+ /* if Java synctrace was requested, tell the jprofile module */
+ if (sync_java)
+ {
+ TprintfT (0, "synctrace: enabling Java synctrace\n");
+ CALL_REAL (__collector_jprofile_enable_synctrace)();
+ }
+ collector_interface->writeLog ("<profile name=\"%s\" threshold=\"%ld\" scope=\"%ld\">\n",
+ SP_JCMD_SYNCTRACE, thresh, sync_scope);
+ collector_interface->writeLog (" <profdata fname=\"%s\"/>\n",
+ module_interface.description);
+ /* Record Sync_packet description */
+ Sync_packet *pp = NULL;
+ collector_interface->writeLog (" <profpckt kind=\"%d\" uname=\"Synchronization tracing data\">\n", SYNC_PCKT);
+ collector_interface->writeLog (" <field name=\"LWPID\" uname=\"Lightweight process id\" offset=\"%d\" type=\"%s\"/>\n",
+ &pp->comm.lwp_id, sizeof (pp->comm.lwp_id) == 4 ? "INT32" : "INT64");
+ collector_interface->writeLog (" <field name=\"THRID\" uname=\"Thread number\" offset=\"%d\" type=\"%s\"/>\n",
+ &pp->comm.thr_id, sizeof (pp->comm.thr_id) == 4 ? "INT32" : "INT64");
+ collector_interface->writeLog (" <field name=\"CPUID\" uname=\"CPU id\" offset=\"%d\" type=\"%s\"/>\n",
+ &pp->comm.cpu_id, sizeof (pp->comm.cpu_id) == 4 ? "INT32" : "INT64");
+ collector_interface->writeLog (" <field name=\"TSTAMP\" uname=\"High resolution timestamp\" offset=\"%d\" type=\"%s\"/>\n",
+ &pp->comm.tstamp, sizeof (pp->comm.tstamp) == 4 ? "INT32" : "INT64");
+ collector_interface->writeLog (" <field name=\"FRINFO\" offset=\"%d\" type=\"%s\"/>\n",
+ &pp->comm.frinfo, sizeof (pp->comm.frinfo) == 4 ? "INT32" : "INT64");
+ collector_interface->writeLog (" <field name=\"SRQST\" uname=\"Synchronization start time\" offset=\"%d\" type=\"%s\"/>\n",
+ &pp->requested, sizeof (pp->requested) == 4 ? "INT32" : "INT64");
+ collector_interface->writeLog (" <field name=\"SOBJ\" uname=\"Synchronization object address\" offset=\"%d\" type=\"%s\"/>\n",
+ &pp->objp, sizeof (pp->objp) == 4 ? "INT32" : "INT64");
+ collector_interface->writeLog (" </profpckt>\n");
+ collector_interface->writeLog ("</profile>\n");
+
+ /* Convert threshold from microsec to nanosec */
+ sync_threshold = (thresh > 0 ? thresh : -thresh) * 1000;
+ TprintfT (0, "synctrace: open_experiment complete %ld\n", sync_threshold);
+ return COL_ERROR_NONE;
+}
+
+static int
+start_data_collection (void)
+{
+ sync_mode = 1;
+ TprintfT (0, "synctrace: start_data_collection\n");
+ return 0;
+}
+
+static int
+stop_data_collection (void)
+{
+ sync_mode = 0;
+ TprintfT (0, "synctrace: stop_data_collection\n");
+ return 0;
+}
+
+static int
+close_experiment (void)
+{
+ sync_mode = 0;
+ sync_threshold = -1;
+ sync_key = COLLECTOR_TSD_INVALID_KEY;
+ TprintfT (0, "synctrace: close_experiment\n");
+ return 0;
+}
+
+/* fork child. Clean up state but don't write to experiment */
+static int
+detach_experiment (void)
+{
+ sync_mode = 0;
+ sync_threshold = -1;
+ sync_key = COLLECTOR_TSD_INVALID_KEY;
+ TprintfT (0, "synctrace: detach_experiment\n");
+ return 0;
+}
+
+#define NUM_ITER 100 /* number of iterations in calibration */
+#define NUM_WARMUP 3 /* number of warm up iterations */
+
+static int
+sync_calibrate ()
+{
+ pthread_mutex_t mt = PTHREAD_MUTEX_INITIALIZER;
+ hrtime_t bt, at, delta;
+ hrtime_t avg, max, min;
+ int i;
+ int ret;
+ avg = (hrtime_t) 0;
+ min = max = (hrtime_t) 0;
+ for (i = 0; i < NUM_ITER + NUM_WARMUP; i++)
+ {
+ /* Here we simulate a real call */
+ bt = gethrtime ();
+ ret = CALL_REAL (pthread_mutex_lock)(&mt);
+ at = gethrtime ();
+ CALL_REAL (pthread_mutex_unlock)(&mt);
+ if (i < NUM_WARMUP) /* skip these iterations */
+ continue;
+ /* add the time of this one */
+ delta = at - bt;
+ avg += delta;
+ if (min == 0)
+ min = delta;
+ if (delta < min)
+ min = delta;
+ if (delta > max)
+ max = delta;
+ }
+ /* compute average time */
+ avg = avg / NUM_ITER;
+
+ /* pretty simple, let's see how it works */
+ if (max < 6 * avg)
+ max = 6 * avg;
+ /* round up to the nearest microsecond */
+ ret = (int) ((max + 999) / 1000);
+ return ret;
+}
+
+static int
+init_thread_intf ()
+{
+ void *dlflag = RTLD_NEXT;
+ int err = 0;
+ /* if we detect recursion/reentrance, SEGV so we can get a stack */
+ init_thread_intf_started++;
+ if (!init_thread_intf_finished && init_thread_intf_started >= 3)
+ {
+ /* pull the plug if recursion occurs... */
+ abort ();
+ }
+ /* lookup fprint to print fatal error message */
+ void *ptr = dlsym (RTLD_DEFAULT, "fprintf");
+ if (ptr)
+ {
+ __real_fprintf = (void *) ptr;
+ }
+ else
+ {
+ abort ();
+ }
+
+ /* find the __collector_jprofile_enable_synctrace routine in jprofile module */
+ ptr = dlsym (RTLD_DEFAULT, "__collector_jprofile_enable_synctrace");
+ if (ptr)
+ __real___collector_jprofile_enable_synctrace = (void *) ptr;
+ else
+ {
+#if defined(GPROFNG_JAVA_PROFILING)
+ CALL_REAL (fprintf)(stderr, "synctrace_init COL_ERROR_SYNCINIT __collector_jprofile_enable_synctrace\n");
+ err = COL_ERROR_SYNCINIT;
+#endif
+ sync_java = 0;
+ }
+
+#if WSIZE(32)
+ /* ########################################## begin WSIZE(32) */
+ /* IMPORTANT!! The GLIBC_* versions below must match those in the er_sync.*.mapfile ! */
+ dlflag = RTLD_NEXT;
+ ptr = dlvsym (dlflag, "pthread_mutex_lock", "GLIBC_2.0");
+ if (ptr == NULL)
+ {
+ /* We are probably dlopened after libthread/libc,
+ * try to search in the previously loaded objects
+ */
+ dlflag = RTLD_DEFAULT;
+ ptr = dlvsym (dlflag, "pthread_mutex_lock", "GLIBC_2.0");
+ if (ptr != NULL)
+ {
+ __real_pthread_mutex_lock = ptr;
+ Tprintf (0, "synctrace: WARNING: init_thread_intf() using RTLD_DEFAULT for OS sync routines\n");
+ }
+ else
+ {
+ CALL_REAL (fprintf)(stderr, "synctrace_init COL_ERROR_SYNCINIT pthread_mutex_lock\n");
+ err = COL_ERROR_SYNCINIT;
+ }
+ }
+ else
+ __real_pthread_mutex_lock = ptr;
+
+ ptr = dlvsym (dlflag, "pthread_mutex_unlock", "GLIBC_2.0");
+ if (ptr)
+ __real_pthread_mutex_unlock = (void *) ptr;
+ else
+ {
+ CALL_REAL (fprintf)(stderr, "synctrace_init COL_ERROR_SYNCINIT pthread_mutex_unlock\n");
+ err = COL_ERROR_SYNCINIT;
+ }
+ ptr = dlvsym (dlflag, "pthread_cond_wait", "GLIBC_2.3.2");
+ if (ptr)
+ __real_pthread_cond_wait = (void *) ptr;
+ else
+ {
+ CALL_REAL (fprintf)(stderr, "synctrace_init COL_ERROR_SYNCINIT pthread_cond_wait\n");
+ err = COL_ERROR_SYNCINIT;
+ }
+ ptr = dlvsym (dlflag, "pthread_cond_timedwait", "GLIBC_2.3.2");
+ if (ptr)
+ __real_pthread_cond_timedwait = (void *) ptr;
+ else
+ {
+ CALL_REAL (fprintf)(stderr, "synctrace_init COL_ERROR_SYNCINIT pthread_cond_timedwait\n");
+ err = COL_ERROR_SYNCINIT;
+ }
+ ptr = dlvsym (dlflag, "pthread_join", "GLIBC_2.0");
+ if (ptr)
+ __real_pthread_join = (void *) ptr;
+ else
+ {
+ CALL_REAL (fprintf)(stderr, "synctrace_init COL_ERROR_SYNCINIT pthread_join\n");
+ err = COL_ERROR_SYNCINIT;
+ }
+ ptr = dlvsym (dlflag, "sem_wait", "GLIBC_2.1");
+ if (ptr)
+ __real_sem_wait = (void *) ptr;
+ else
+ {
+ CALL_REAL (fprintf)(stderr, "synctrace_init COL_ERROR_SYNCINIT sem_wait\n");
+ err = COL_ERROR_SYNCINIT;
+ }
+
+#if ARCH(Intel)
+ /* ############## Intel specific additional pointers for 32-bits */
+ ptr = __real_sem_wait_2_1 = __real_sem_wait;
+ ptr = dlvsym (dlflag, "sem_wait", "GLIBC_2.0");
+ if (ptr)
+ __real_sem_wait_2_0 = (void *) ptr;
+ else
+ {
+ CALL_REAL (fprintf)(stderr, "synctrace_init COL_ERROR_SYNCINIT sem_wait_2_0\n");
+ err = COL_ERROR_SYNCINIT;
+ }
+ ptr = dlvsym (dlflag, "pthread_cond_wait", "GLIBC_2.0");
+ if (ptr)
+ __real_pthread_cond_wait_2_0 = (void *) ptr;
+ else
+ {
+ CALL_REAL (fprintf)(stderr, "synctrace_init COL_ERROR_SYNCINIT pthread_cond_wait_2_0\n");
+ err = COL_ERROR_SYNCINIT;
+ }
+ ptr = dlvsym (dlflag, "pthread_cond_timedwait", "GLIBC_2.0");
+ if (ptr)
+ __real_pthread_cond_timedwait_2_0 = (void *) ptr;
+ else
+ {
+ CALL_REAL (fprintf)(stderr, "synctrace_init COL_ERROR_SYNCINIT __real_pthread_cond_timedwait_2_0\n");
+ err = COL_ERROR_SYNCINIT;
+ }
+#endif /* ARCH(Intel) */
+
+#else /* WSIZE(64) */
+ /* # most versions are different between platforms */
+ /* # the few that are common are set after the ARCH ifdef */
+#if ARCH(Aarch64)
+ dlflag = RTLD_NEXT;
+#define GLIBC_N "GLIBC_2.17"
+ __real_pthread_mutex_lock = dlvsym(dlflag, "pthread_mutex_lock", GLIBC_N);
+ __real_pthread_mutex_unlock = dlvsym(dlflag, "pthread_mutex_unlock", GLIBC_N);
+ __real_pthread_cond_wait = dlvsym(dlflag, "pthread_cond_wait", GLIBC_N);
+ __real_pthread_cond_timedwait = dlvsym(dlflag, "pthread_cond_timedwait", GLIBC_N);
+ __real_pthread_join = dlvsym(dlflag, "pthread_join", GLIBC_N);
+ __real_sem_wait = dlvsym(dlflag, "sem_wait", GLIBC_N);
+
+#elif ARCH(Intel)
+ dlflag = RTLD_NEXT;
+ ptr = dlvsym (dlflag, "pthread_mutex_lock", "GLIBC_2.2.5");
+ if (ptr == NULL)
+ {
+ /* We are probably dlopened after libthread/libc,
+ * try to search in the previously loaded objects
+ */
+ dlflag = RTLD_DEFAULT;
+ ptr = dlvsym (dlflag, "pthread_mutex_lock", "GLIBC_2.2.5");
+ if (ptr != NULL)
+ {
+ __real_pthread_mutex_lock = ptr;
+ Tprintf (0, "synctrace: WARNING: init_thread_intf() using RTLD_DEFAULT for Solaris sync routines\n");
+ }
+ else
+ {
+ CALL_REAL (fprintf)(stderr, "synctrace_init COL_ERROR_SYNCINIT pthread_mutex_lock\n");
+ err = COL_ERROR_SYNCINIT;
+ }
+ }
+ else
+ __real_pthread_mutex_lock = ptr;
+ ptr = dlvsym (dlflag, "pthread_mutex_unlock", "GLIBC_2.2.5");
+ if (ptr)
+ __real_pthread_mutex_unlock = (void *) ptr;
+ else
+ {
+ CALL_REAL (fprintf)(stderr, "synctrace_init COL_ERROR_SYNCINIT pthread_mutex_unlock\n");
+ err = COL_ERROR_SYNCINIT;
+ }
+ ptr = dlvsym (dlflag, "pthread_cond_wait", "GLIBC_2.3.2");
+ if (ptr)
+ __real_pthread_cond_wait = (void *) ptr;
+ else
+ {
+ CALL_REAL (fprintf)(stderr, "synctrace_init COL_ERROR_SYNCINIT pthread_cond_wait\n");
+ err = COL_ERROR_SYNCINIT;
+ }
+ ptr = dlvsym (dlflag, "pthread_cond_timedwait", "GLIBC_2.3.2");
+ if (ptr)
+ __real_pthread_cond_timedwait = (void *) ptr;
+ else
+ {
+ CALL_REAL (fprintf)(stderr, "synctrace_init COL_ERROR_SYNCINIT pthread_cond_timedwait\n");
+ err = COL_ERROR_SYNCINIT;
+ }
+ ptr = dlvsym (dlflag, "pthread_join", "GLIBC_2.2.5");
+ if (ptr)
+ __real_pthread_join = (void *) ptr;
+ else
+ {
+ CALL_REAL (fprintf)(stderr, "synctrace_init COL_ERROR_SYNCINIT pthread_join\n");
+ err = COL_ERROR_SYNCINIT;
+ }
+ ptr = dlvsym (dlflag, "sem_wait", "GLIBC_2.2.5");
+ if (ptr)
+ __real_sem_wait = (void *) ptr;
+ else
+ {
+ CALL_REAL (fprintf)(stderr, "synctrace_init COL_ERROR_SYNCINIT sem_wait\n");
+ err = COL_ERROR_SYNCINIT;
+ }
+ ptr = dlvsym (dlflag, "pthread_cond_wait", "GLIBC_2.2.5");
+ if (ptr)
+ __real_pthread_cond_wait_2_2_5 = (void *) ptr;
+ else
+ {
+ CALL_REAL (fprintf)(stderr, "synctrace_init COL_ERROR_SYNCINIT pthread_cond_wait_2_2_5\n");
+ err = COL_ERROR_SYNCINIT;
+ }
+ ptr = dlvsym (dlflag, "pthread_cond_timedwait", "GLIBC_2.2.5");
+ if (ptr)
+ __real_pthread_cond_timedwait_2_2_5 = (void *) ptr;
+ else
+ {
+ CALL_REAL (fprintf)(stderr, "synctrace_init COL_ERROR_SYNCINIT pthread_cond_timedwait_2_2_5\n");
+ err = COL_ERROR_SYNCINIT;
+ }
+
+#elif ARCH(SPARC)
+ dlflag = RTLD_NEXT;
+ ptr = dlvsym (dlflag, "pthread_mutex_lock", "GLIBC_2.2");
+ if (ptr == NULL)
+ {
+ /* We are probably dlopened after libthread/libc,
+ * try to search in the previously loaded objects
+ */
+ dlflag = RTLD_DEFAULT;
+ ptr = dlvsym (dlflag, "pthread_mutex_lock", "GLIBC_2.2");
+ if (ptr != NULL)
+ {
+ __real_pthread_mutex_lock = ptr;
+ Tprintf (0, "synctrace: WARNING: init_thread_intf() using RTLD_DEFAULT for Solaris sync routines\n");
+ }
+ else
+ {
+ CALL_REAL (fprintf)(stderr, "synctrace_init COL_ERROR_SYNCINIT mutex_lock\n");
+ err = COL_ERROR_SYNCINIT;
+ }
+ }
+ else
+ __real_pthread_mutex_lock = ptr;
+ ptr = dlvsym (dlflag, "pthread_mutex_unlock", "GLIBC_2.2");
+ if (ptr)
+ __real_pthread_mutex_unlock = (void *) ptr;
+ else
+ {
+ CALL_REAL (fprintf)(stderr, "synctrace_init COL_ERROR_SYNCINIT pthread_mutex_unlock\n");
+ err = COL_ERROR_SYNCINIT;
+ }
+ ptr = dlvsym (dlflag, "pthread_cond_wait", "GLIBC_2.3.2");
+ if (ptr)
+ __real_pthread_cond_wait = (void *) ptr;
+ else
+ {
+ CALL_REAL (fprintf)(stderr, "synctrace_init COL_ERROR_SYNCINIT pthread_cond_wait\n");
+ err = COL_ERROR_SYNCINIT;
+ }
+ ptr = dlvsym (dlflag, "pthread_cond_timedwait", "GLIBC_2.3.2");
+ if (ptr)
+ __real_pthread_cond_timedwait = (void *) ptr;
+ else
+ {
+ CALL_REAL (fprintf)(stderr, "synctrace_init COL_ERROR_SYNCINIT pthread_cond_timedwait\n");
+ err = COL_ERROR_SYNCINIT;
+ }
+ ptr = dlvsym (dlflag, "pthread_join", "GLIBC_2.2");
+ if (ptr)
+ __real_pthread_join = (void *) ptr;
+ else
+ {
+ CALL_REAL (fprintf)(stderr, "synctrace_init COL_ERROR_SYNCINIT pthread_join\n");
+ err = COL_ERROR_SYNCINIT;
+ }
+ ptr = dlvsym (dlflag, "sem_wait", "GLIBC_2.2");
+ if (ptr)
+ __real_sem_wait = (void *) ptr;
+ else
+ {
+ CALL_REAL (fprintf)(stderr, "synctrace_init COL_ERROR_SYNCINIT sem_wait\n");
+ err = COL_ERROR_SYNCINIT;
+ }
+ ptr = dlvsym (dlflag, "pthread_cond_wait", "GLIBC_2.2");
+ if (ptr)
+ __real_pthread_cond_wait_2_2 = (void *) ptr;
+ else
+ {
+ CALL_REAL (fprintf)(stderr, "synctrace_init COL_ERROR_SYNCINIT pthread_cond_wait_2_2_5\n");
+ err = COL_ERROR_SYNCINIT;
+ }
+ ptr = dlvsym (dlflag, "pthread_cond_timedwait", "GLIBC_2.2");
+ if (ptr)
+ __real_pthread_cond_timedwait_2_2 = (void *) ptr;
+ else
+ {
+ CALL_REAL (fprintf)(stderr, "synctrace_init COL_ERROR_SYNCINIT pthread_cond_timedwait_2_2\n");
+ err = COL_ERROR_SYNCINIT;
+ }
+#endif /* ARCH() */
+#endif /* WSIZE(64) */
+ /* the pointers that are common to 32- and 64-bits, and to SPARC and Intel */
+
+ __real_pthread_cond_wait_2_3_2 = __real_pthread_cond_wait;
+ __real_pthread_cond_timedwait_2_3_2 = __real_pthread_cond_timedwait;
+ ptr = dlsym (dlflag, "strtol");
+ if (ptr)
+ __real_strtol = (void *) ptr;
+ else
+ {
+ CALL_REAL (fprintf)(stderr, "synctrace_init COL_ERROR_SYNCINIT strtol\n");
+ err = COL_ERROR_SYNCINIT;
+ }
+ init_thread_intf_finished++;
+ TprintfT (0, "synctrace init_thread_intf complete\n");
+ return err;
+}
+
+/* These next two routines are used from jprofile to record Java synctrace data */
+void
+__collector_jsync_begin ()
+{
+ int *guard;
+ if (CHCK_JREENTRANCE (guard))
+ {
+ Tprintf (DBG_LT1, "__collector_jsync_begin: skipped\n");
+ return;
+ }
+ Tprintf (DBG_LT1, "__collector_jsync_begin: start event\n");
+ PUSH_REENTRANCE (guard);
+}
+
+void
+__collector_jsync_end (hrtime_t reqt, void *object)
+{
+ int *guard;
+ if (RECHCK_JREENTRANCE (guard))
+ {
+ Tprintf (DBG_LT1, "__collector_jsync_end: skipped\n");
+ return;
+ }
+ hrtime_t grnt = gethrtime ();
+ if (grnt - reqt >= sync_threshold)
+ {
+ Sync_packet spacket;
+ collector_memset (&spacket, 0, sizeof ( Sync_packet));
+ spacket.comm.tsize = sizeof ( Sync_packet);
+ spacket.comm.tstamp = grnt;
+ spacket.requested = reqt;
+ spacket.objp = (Vaddr_type) object;
+ spacket.comm.frinfo = collector_interface->getFrameInfo (sync_hndl, spacket.comm.tstamp, FRINFO_FROM_STACK_ARG, &spacket);
+ collector_interface->writeDataRecord (sync_hndl, (Common_packet*) & spacket);
+ }
+ Tprintf (DBG_LT1, "__collector_jsync_begin: end event\n");
+ POP_REENTRANCE (guard);
+}
+
+/*-------------------------------------------------------- pthread_mutex_lock */
+int
+pthread_mutex_lock (pthread_mutex_t *mp)
+{
+ int *guard;
+ if (NULL_PTR (pthread_mutex_lock))
+ init_thread_intf ();
+ if (CHCK_NREENTRANCE (guard))
+ return CALL_REAL (pthread_mutex_lock)(mp);
+ PUSH_REENTRANCE (guard);
+ hrtime_t reqt = gethrtime ();
+ int ret = CALL_REAL (pthread_mutex_lock)(mp);
+ if (RECHCK_NREENTRANCE (guard))
+ {
+ POP_REENTRANCE (guard);
+ return ret;
+ }
+ hrtime_t grnt = gethrtime ();
+ if (grnt - reqt >= sync_threshold)
+ {
+ Sync_packet spacket;
+ collector_memset (&spacket, 0, sizeof ( Sync_packet));
+ spacket.comm.tsize = sizeof ( Sync_packet);
+ spacket.comm.tstamp = grnt;
+ spacket.requested = reqt;
+ spacket.objp = (Vaddr_type) mp;
+ spacket.comm.frinfo = collector_interface->getFrameInfo (sync_hndl, spacket.comm.tstamp, FRINFO_FROM_STACK, &spacket);
+ collector_interface->writeDataRecord (sync_hndl, (Common_packet*) & spacket);
+ }
+ POP_REENTRANCE (guard);
+ return ret;
+}
+
+
+/*------------------------------------------------------------- pthread_cond_wait */
+// map interposed symbol versions
+static int
+__collector_pthread_cond_wait_symver (int(real_pthread_cond_wait) (), pthread_cond_t *cond, pthread_mutex_t *mutex);
+
+#if ARCH(Intel) || ARCH(SPARC)
+SYMVER_ATTRIBUTE (__collector_pthread_cond_wait_2_3_2,
+ pthread_cond_wait@@GLIBC_2.3.2)
+#endif
+int
+__collector_pthread_cond_wait_2_3_2 (pthread_cond_t *cond, pthread_mutex_t *mutex)
+{
+ if (NULL_PTR (pthread_cond_wait))
+ init_thread_intf ();
+ TprintfT (DBG_LTT, "linetrace: GLIBC: __collector_pthread_cond_wait_2_3_2@%p\n", CALL_REAL (pthread_cond_wait_2_3_2));
+ return __collector_pthread_cond_wait_symver (CALL_REAL (pthread_cond_wait_2_3_2), cond, mutex);
+}
+
+#if WSIZE(32)
+
+SYMVER_ATTRIBUTE (__collector_pthread_cond_wait_2_0,
+ pthread_cond_wait@GLIBC_2.0)
+int
+__collector_pthread_cond_wait_2_0 (pthread_cond_t *cond, pthread_mutex_t *mutex)
+{
+ if (NULL_PTR (pthread_cond_wait))
+ init_thread_intf ();
+ TprintfT (DBG_LTT, "linetrace: GLIBC: __collector_pthread_cond_wait_2_0@%p\n", CALL_REAL (pthread_cond_wait_2_0));
+ return __collector_pthread_cond_wait_symver (CALL_REAL (pthread_cond_wait_2_0), cond, mutex);
+}
+#else // WSIZE(64)
+#if ARCH(Intel)
+SYMVER_ATTRIBUTE (__collector_pthread_cond_wait_2_2_5,
+ pthread_cond_wait@GLIBC_2.2.5)
+int
+__collector_pthread_cond_wait_2_2_5 (pthread_cond_t *cond, pthread_mutex_t *mutex)
+{
+ if (NULL_PTR (pthread_cond_wait))
+ init_thread_intf ();
+ TprintfT (DBG_LTT, "linetrace: GLIBC: __collector_pthread_cond_wait_2_2_5@%p\n", CALL_REAL (pthread_cond_wait_2_2_5));
+ return __collector_pthread_cond_wait_symver (CALL_REAL (pthread_cond_wait_2_2_5), cond, mutex);
+}
+#elif ARCH(SPARC)
+
+SYMVER_ATTRIBUTE (__collector_pthread_cond_wait_2_2,
+ pthread_cond_wait@GLIBC_2.2)
+int
+__collector_pthread_cond_wait_2_2 (pthread_cond_t *cond, pthread_mutex_t *mutex)
+{
+ if (NULL_PTR (pthread_cond_wait))
+ init_thread_intf ();
+ TprintfT (DBG_LTT, "linetrace: GLIBC: __collector_pthread_cond_wait_2_2@%p\n", CALL_REAL (pthread_cond_wait_2_2));
+ return __collector_pthread_cond_wait_symver (CALL_REAL (pthread_cond_wait_2_2), cond, mutex);
+}
+#endif // ARCH()
+#endif // WSIZE()
+
+static int
+__collector_pthread_cond_wait_symver (int(real_pthread_cond_wait) (), pthread_cond_t *cond, pthread_mutex_t *mutex)
+{
+ int *guard;
+ if (NULL_PTR (pthread_cond_wait))
+ init_thread_intf ();
+ if (CHCK_NREENTRANCE (guard))
+ return (real_pthread_cond_wait) (cond, mutex);
+ PUSH_REENTRANCE (guard);
+ hrtime_t reqt = gethrtime ();
+ int ret = -1;
+ ret = (real_pthread_cond_wait) (cond, mutex);
+ if (RECHCK_NREENTRANCE (guard))
+ {
+ POP_REENTRANCE (guard);
+ return ret;
+ }
+ hrtime_t grnt = gethrtime ();
+ if (grnt - reqt >= sync_threshold)
+ {
+ Sync_packet spacket;
+ collector_memset (&spacket, 0, sizeof ( Sync_packet));
+ spacket.comm.tsize = sizeof ( Sync_packet);
+ spacket.comm.tstamp = grnt;
+ spacket.requested = reqt;
+ spacket.objp = (Vaddr_type) mutex;
+ spacket.comm.frinfo = collector_interface->getFrameInfo (sync_hndl, spacket.comm.tstamp, FRINFO_FROM_STACK_ARG, &spacket);
+ collector_interface->writeDataRecord (sync_hndl, (Common_packet*) & spacket);
+ }
+ POP_REENTRANCE (guard);
+ return ret;
+}
+
+/*---------------------------------------------------- pthread_cond_timedwait */
+// map interposed symbol versions
+static int
+__collector_pthread_cond_timedwait_symver (int(real_pthread_cond_timedwait) (),
+ pthread_cond_t *cond,
+ pthread_mutex_t *mutex,
+ const struct timespec *abstime);
+
+#if ARCH(Intel) || ARCH(SPARC)
+SYMVER_ATTRIBUTE (__collector_pthread_cond_timedwait_2_3_2,
+ pthread_cond_timedwait@@GLIBC_2.3.2)
+#endif // ARCH()
+int
+__collector_pthread_cond_timedwait_2_3_2 (pthread_cond_t *cond,
+ pthread_mutex_t *mutex,
+ const struct timespec *abstime)
+{
+ if (NULL_PTR (pthread_cond_timedwait))
+ init_thread_intf ();
+ TprintfT (DBG_LTT, "linetrace: GLIBC: __collector_pthread_cond_timedwait_2_3_2@%p\n", CALL_REAL (pthread_cond_timedwait_2_3_2));
+ return __collector_pthread_cond_timedwait_symver (CALL_REAL (pthread_cond_timedwait_2_3_2), cond, mutex, abstime);
+}
+
+#if WSIZE(32)
+SYMVER_ATTRIBUTE (__collector_pthread_cond_timedwait_2_0,
+ pthread_cond_timedwait@GLIBC_2.0)
+int
+__collector_pthread_cond_timedwait_2_0 (pthread_cond_t *cond,
+ pthread_mutex_t *mutex,
+ const struct timespec *abstime)
+{
+ if (NULL_PTR (pthread_cond_timedwait))
+ init_thread_intf ();
+ TprintfT (DBG_LTT, "linetrace: GLIBC: __collector_pthread_cond_timedwait_2_0@%p\n", CALL_REAL (pthread_cond_timedwait_2_0));
+ return __collector_pthread_cond_timedwait_symver (CALL_REAL (pthread_cond_timedwait_2_0), cond, mutex, abstime);
+}
+#else // WSIZE(64)
+#if ARCH(Intel)
+SYMVER_ATTRIBUTE (__collector_pthread_cond_timedwait_2_2_5,
+ pthread_cond_timedwait@GLIBC_2.2.5)
+int
+__collector_pthread_cond_timedwait_2_2_5 (pthread_cond_t *cond,
+ pthread_mutex_t *mutex,
+ const struct timespec *abstime)
+{
+ if (NULL_PTR (pthread_cond_timedwait))
+ init_thread_intf ();
+ TprintfT (DBG_LTT, "linetrace: GLIBC: __collector_pthread_cond_timedwait_2_2_5@%p\n", CALL_REAL (pthread_cond_timedwait_2_2_5));
+ return __collector_pthread_cond_timedwait_symver (CALL_REAL (pthread_cond_timedwait_2_2_5), cond, mutex, abstime);
+}
+#elif ARCH(SPARC)
+
+SYMVER_ATTRIBUTE (__collector_pthread_cond_timedwait_2_2,
+ pthread_cond_timedwait@GLIBC_2.2)
+int
+__collector_pthread_cond_timedwait_2_2 (pthread_cond_t *cond,
+ pthread_mutex_t *mutex,
+ const struct timespec *abstime)
+{
+ if (NULL_PTR (pthread_cond_timedwait))
+ init_thread_intf ();
+ TprintfT (DBG_LTT, "linetrace: GLIBC: __collector_pthread_cond_timedwait_2_2@%p\n", CALL_REAL (pthread_cond_timedwait_2_2));
+ return __collector_pthread_cond_timedwait_symver (CALL_REAL (pthread_cond_timedwait_2_2), cond, mutex, abstime);
+}
+#endif // ARCH()
+#endif // WSIZE()
+
+static int
+__collector_pthread_cond_timedwait_symver (int(real_pthread_cond_timedwait) (),
+ pthread_cond_t *cond,
+ pthread_mutex_t *mutex,
+ const struct timespec *abstime)
+{
+ int *guard;
+ if (NULL_PTR (pthread_cond_timedwait))
+ init_thread_intf ();
+ if (CHCK_NREENTRANCE (guard))
+ return (real_pthread_cond_timedwait) (cond, mutex, abstime);
+ PUSH_REENTRANCE (guard);
+ hrtime_t reqt = gethrtime ();
+ int ret = -1;
+ ret = (real_pthread_cond_timedwait) (cond, mutex, abstime);
+ if (RECHCK_NREENTRANCE (guard))
+ {
+ POP_REENTRANCE (guard);
+ return ret;
+ }
+ hrtime_t grnt = gethrtime ();
+ if (grnt - reqt >= sync_threshold)
+ {
+ Sync_packet spacket;
+ collector_memset (&spacket, 0, sizeof ( Sync_packet));
+ spacket.comm.tsize = sizeof ( Sync_packet);
+ spacket.comm.tstamp = grnt;
+ spacket.requested = reqt;
+ spacket.objp = (Vaddr_type) mutex;
+ spacket.comm.frinfo = collector_interface->getFrameInfo (sync_hndl, spacket.comm.tstamp, FRINFO_FROM_STACK_ARG, &spacket);
+ collector_interface->writeDataRecord (sync_hndl, (Common_packet*) & spacket);
+ }
+ POP_REENTRANCE (guard);
+ return ret;
+}
+
+/*------------------------------------------------------------- pthread_join */
+int
+pthread_join (pthread_t target_thread, void **status)
+{
+ int *guard;
+ if (NULL_PTR (pthread_join))
+ init_thread_intf ();
+ if (CHCK_NREENTRANCE (guard))
+ return CALL_REAL (pthread_join)(target_thread, status);
+ PUSH_REENTRANCE (guard);
+ hrtime_t reqt = gethrtime ();
+ int ret = CALL_REAL (pthread_join)(target_thread, status);
+ if (RECHCK_NREENTRANCE (guard))
+ {
+ POP_REENTRANCE (guard);
+ return ret;
+ }
+ hrtime_t grnt = gethrtime ();
+ if (grnt - reqt >= sync_threshold)
+ {
+ Sync_packet spacket;
+ collector_memset (&spacket, 0, sizeof ( Sync_packet));
+ spacket.comm.tsize = sizeof ( Sync_packet);
+ spacket.comm.tstamp = grnt;
+ spacket.requested = reqt;
+ spacket.objp = (Vaddr_type) target_thread;
+ spacket.comm.frinfo = collector_interface->getFrameInfo (sync_hndl, spacket.comm.tstamp, FRINFO_FROM_STACK, &spacket);
+ collector_interface->writeDataRecord (sync_hndl, (Common_packet*) & spacket);
+ }
+ POP_REENTRANCE (guard);
+ return ret;
+}
+
+/*------------------------------------------------------------- sem_wait */
+// map interposed symbol versions
+#if ARCH(Intel) && WSIZE(32)
+static int
+__collector_sem_wait_symver (int(real_sem_wait) (), sem_t *sp);
+
+SYMVER_ATTRIBUTE (__collector_sem_wait_2_1, sem_wait@@GLIBC_2.1)
+int
+__collector_sem_wait_2_1 (sem_t *sp)
+{
+ if (NULL_PTR (sem_wait))
+ init_thread_intf ();
+ TprintfT (DBG_LTT, "linetrace: GLIBC: __collector_sem_wait_2_1@%p\n", CALL_REAL (sem_wait_2_1));
+ return __collector_sem_wait_symver (CALL_REAL (sem_wait_2_1), sp);
+}
+
+SYMVER_ATTRIBUTE (__collector_sem_wait_2_0, sem_wait@GLIBC_2.0)
+int
+__collector_sem_wait_2_0 (sem_t *sp)
+{
+ if (NULL_PTR (sem_wait))
+ init_thread_intf ();
+ TprintfT (DBG_LTT, "linetrace: GLIBC: __collector_sem_wait_2_0@%p\n", CALL_REAL (sem_wait_2_0));
+ return __collector_sem_wait_symver (CALL_REAL (sem_wait_2_0), sp);
+}
+#endif
+
+#if ARCH(Intel) && WSIZE(32)
+static int
+__collector_sem_wait_symver (int(real_sem_wait) (), sem_t *sp)
+{
+#else
+int
+sem_wait (sem_t *sp)
+{
+#endif
+ int *guard;
+ if (NULL_PTR (sem_wait))
+ init_thread_intf ();
+ if (CHCK_NREENTRANCE (guard))
+ {
+#if ARCH(Intel) && WSIZE(32)
+ return (real_sem_wait) (sp);
+#else
+ return CALL_REAL (sem_wait)(sp);
+#endif
+ }
+ PUSH_REENTRANCE (guard);
+ hrtime_t reqt = gethrtime ();
+ int ret = -1;
+#if ARCH(Intel) && WSIZE(32)
+ ret = (real_sem_wait) (sp);
+#else
+ ret = CALL_REAL (sem_wait)(sp);
+#endif
+ if (RECHCK_NREENTRANCE (guard))
+ {
+ POP_REENTRANCE (guard);
+ return ret;
+ }
+ hrtime_t grnt = gethrtime ();
+ if (grnt - reqt >= sync_threshold)
+ {
+ Sync_packet spacket;
+ collector_memset (&spacket, 0, sizeof ( Sync_packet));
+ spacket.comm.tsize = sizeof ( Sync_packet);
+ spacket.comm.tstamp = grnt;
+ spacket.requested = reqt;
+ spacket.objp = (Vaddr_type) sp;
+
+#if ARCH(Intel) && WSIZE(32)
+ spacket.comm.frinfo = collector_interface->getFrameInfo (sync_hndl, spacket.comm.tstamp, FRINFO_FROM_STACK_ARG, &spacket);
+#else
+ spacket.comm.frinfo = collector_interface->getFrameInfo (sync_hndl, spacket.comm.tstamp, FRINFO_FROM_STACK, &spacket);
+#endif
+ collector_interface->writeDataRecord (sync_hndl, (Common_packet*) & spacket);
+ }
+ POP_REENTRANCE (guard);
+ return ret;
+}
diff --git a/gprofng/libcollector/tsd.c b/gprofng/libcollector/tsd.c
new file mode 100644
index 00000000000..416c3e76778
--- /dev/null
+++ b/gprofng/libcollector/tsd.c
@@ -0,0 +1,149 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <pthread.h>
+
+#include "collector.h"
+#include "libcol_util.h"
+#include "tsd.h"
+#include "memmgr.h"
+
+/* TprintfT(<level>,...) definitions. Adjust per module as needed */
+#define DBG_LT0 0 // for high-level configuration, unexpected errors/warnings
+#define DBG_LT1 1 // for configuration details, warnings
+#define DBG_LT2 2
+#define DBG_LT3 3
+
+/*
+ * Build our thread-specific-data support on pthread interfaces.
+ */
+#define MAXNKEYS 64 /* hard-wired? really? well, it depends only on us and we have a sense for how many keys we will use */
+static pthread_key_t tsd_pkeys[MAXNKEYS];
+static size_t tsd_sizes[MAXNKEYS];
+static unsigned tsd_nkeys = 0;
+
+int
+__collector_tsd_init ()
+{
+ return 0;
+}
+
+void
+__collector_tsd_fini ()
+{
+ Tprintf (DBG_LT1, "tsd_fini()\n");
+ while (tsd_nkeys)
+ {
+ tsd_nkeys--;
+ pthread_key_delete (tsd_pkeys[tsd_nkeys]);
+ tsd_sizes[tsd_nkeys] = 0; // should be unneeded
+ }
+}
+
+int
+__collector_tsd_allocate ()
+{
+ return 0;
+}
+
+void
+__collector_tsd_release () { }
+
+static void
+tsd_destructor (void *p)
+{
+ if (p)
+ __collector_freeCSize (__collector_heap, p, *((size_t *) p));
+}
+
+unsigned
+__collector_tsd_create_key (size_t sz, void (*init)(void*), void (*fini)(void*))
+{
+ /*
+ * We no longer support init and fini arguments (and weren't using them anyhow).
+ * Our hard-wired MAXNKEYS presumably is considerably higher than the number of keys we use.
+ */
+ if (init || fini || (tsd_nkeys >= MAXNKEYS))
+ return COLLECTOR_TSD_INVALID_KEY;
+
+ /*
+ * A pthread key has a value that is (void *).
+ * We don't know where it is stored, and can access its value only through {get|set}specific.
+ * But libcollector expects a pointer to memory that it can modify.
+ * So we have to allocate that memory and store the pointer.
+ *
+ * For now, we just have to register a destructor that will free the memory
+ * when the thread finishes.
+ */
+ if (pthread_key_create (&tsd_pkeys[tsd_nkeys], &tsd_destructor))
+ return COLLECTOR_TSD_INVALID_KEY;
+ tsd_sizes[tsd_nkeys] = sz;
+ tsd_nkeys++;
+ return (tsd_nkeys - 1);
+}
+
+void *
+__collector_tsd_get_by_key (unsigned key_index)
+{
+ if (key_index == COLLECTOR_TSD_INVALID_KEY)
+ return NULL;
+ if (key_index < 0 || key_index >= tsd_nkeys)
+ return NULL;
+ pthread_key_t key = tsd_pkeys[key_index];
+ size_t sz = tsd_sizes[key_index];
+
+ /*
+ * When we use __collector_freeCSize(), we need to know the
+ * size that had been allocated. So, stick a header to the
+ * front of the allocation to hold the size. The header could
+ * just be sizeof(size_t), but pad it to preserve alignment for
+ * the usable area.
+ */
+ size_t header = 8;
+ void *value = pthread_getspecific (key);
+
+ // check whether we have allocated the memory
+ if (value == NULL)
+ {
+ // add room to record the size
+ value = __collector_allocCSize (__collector_heap, sz + header, 0);
+ if (value == NULL)
+ {
+ // do we need to guard against trying to alloc each time?
+ return NULL;
+ }
+ // write the size of the allocation
+ *((size_t *) value) = sz + header;
+ CALL_UTIL (memset)(((char *) value) + header, 0, sz);
+
+ // record the allocation for future retrieval
+ if (pthread_setspecific (key, value))
+ return NULL;
+ }
+ // return the pointer, skipping the header
+ return ((char *) value) +header;
+}
+
+void
+__collector_tsd_fork_child_cleanup ()
+{
+ __collector_tsd_fini ();
+}
diff --git a/gprofng/libcollector/tsd.h b/gprofng/libcollector/tsd.h
new file mode 100644
index 00000000000..38b3d53040e
--- /dev/null
+++ b/gprofng/libcollector/tsd.h
@@ -0,0 +1,80 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+/* Thread-specific data */
+
+#ifndef _TSD_H
+#define _TSD_H
+
+#include <sys/types.h>
+
+int __collector_tsd_init ();
+/* Function: Init tsd module. Call once before using other functions.
+ MT-Level: Unsafe
+ Return: 0 if successful
+ */
+
+void __collector_tsd_fini ();
+/* Function: Shutdown tsd module.
+ MT-Level: Unsafe
+ Return: None
+ */
+
+void __collector_tsd_fork_child_cleanup ();
+/* Function: Reset tsd module. Call immediately after fork() in child process.
+ MT-Level: Unsafe
+ Return: None
+ */
+
+int __collector_tsd_allocate ();
+/* Function: Allocate thread info.
+ Call from threads before using tsd_get_by_key().
+ Call from main thread should be made before calls from other threads.
+ MT-Level: First call is unsafe. Safe afterwards.
+ Return: 0 if successful
+ */
+
+void __collector_tsd_release ();
+/* Function: Free thread info.
+ Call from threads just before thread termination.
+ MT-Level: Safe
+ Return: None
+ */
+
+#define COLLECTOR_TSD_INVALID_KEY ((unsigned)-1)
+unsigned __collector_tsd_create_key (size_t memsize, void (*init)(void*), void (*fini)(void*));
+/* Function: Reserve TDS memory.
+ MT-Level: Unsafe
+ Inputs: <memsize>: number of bytes to reserve
+ <init>: key memory initialization. Must be callable even if
+ the associated thread has not yet been created.
+ <fini>: key memory finalization. Must be callable even if
+ the associated thread has been terminated.
+ Return: key or COLLECTOR_TSD_INVALID_KEY if not successful.
+ */
+
+void *__collector_tsd_get_by_key (unsigned key);
+/* Function: Get TSD memory.
+ Call from threads after calling tsd_allocate().
+ MT-Level: Safe
+ Inputs: <key>: return value from tsd_create_key()
+ Return: memory if successful, NULL otherwise
+ */
+#endif /* _TSD_H */
diff --git a/gprofng/libcollector/unwind.c b/gprofng/libcollector/unwind.c
new file mode 100644
index 00000000000..f309c54bd33
--- /dev/null
+++ b/gprofng/libcollector/unwind.c
@@ -0,0 +1,4639 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <alloca.h>
+#include <dlfcn.h>
+#include <stdlib.h>
+#include <signal.h>
+#include <unistd.h>
+#include <pthread.h>
+
+#include "gp-defs.h"
+#include "collector.h"
+#include "gp-experiment.h"
+#include "memmgr.h"
+#include "tsd.h"
+
+/* Get dynamic module interface*/
+#include "collector_module.h"
+
+/* Get definitions for SP_LEAF_CHECK_MARKER, SP_TRUNC_STACK_MARKER */
+#include "data_pckts.h"
+
+#if ARCH(SPARC)
+struct frame
+{
+ long fr_local[8]; /* saved locals */
+ long fr_arg[6]; /* saved arguments [0 - 5] */
+ struct frame *fr_savfp; /* saved frame pointer */
+ long fr_savpc; /* saved program counter */
+#if WSIZE(32)
+ char *fr_stret; /* struct return addr */
+#endif
+ long fr_argd[6]; /* arg dump area */
+ long fr_argx[1]; /* array of args past the sixth */
+};
+
+#elif ARCH(Intel)
+struct frame
+{
+ unsigned long fr_savfp;
+ unsigned long fr_savpc;
+};
+#endif
+
+/* Set the debug trace level */
+#define DBG_LT0 0
+#define DBG_LT1 1
+#define DBG_LT2 2
+#define DBG_LT3 3
+
+int (*__collector_VM_ReadByteInstruction)(unsigned char *) = NULL;
+#define VM_NO_ACCESS (-1)
+#define VM_NOT_VM_MEMORY (-2)
+#define VM_NOT_X_SEGMENT (-3)
+
+#define isInside(p, bgn, end) ((p) >= (bgn) && (p) < (end))
+
+/*
+ * Weed through all the arch dependent stuff to get the right definition
+ * for 'pc' in the ucontext structure. The system header files are mess
+ * dealing with all the arch (just look for PC, R_PC, REG_PC).
+ *
+ */
+
+#if ARCH(SPARC)
+
+#define IN_BARRIER(x) \
+ ( barrier_hdl && \
+ (unsigned long)x >= barrier_hdl && \
+ (unsigned long)x < barrier_hdlx )
+static unsigned long barrier_hdl = 0;
+static unsigned long barrier_hdlx = 0;
+
+#if WSIZE(64)
+#define STACK_BIAS 2047
+#define IN_TRAP_HANDLER(x) \
+ ( misalign_hdl && \
+ (unsigned long)x >= misalign_hdl && \
+ (unsigned long)x < misalign_hdlx )
+static unsigned long misalign_hdl = 0;
+static unsigned long misalign_hdlx = 0;
+#elif WSIZE(32)
+#define STACK_BIAS 0
+#endif
+
+#if WSIZE(64)
+#define GET_GREG(ctx,reg) (((ucontext_t*)ctx)->uc_mcontext.mc_gregs[(reg)])
+#define GET_SP(ctx) (((ucontext_t*)ctx)->uc_mcontext.mc_gregs[MC_O6])
+#define GET_PC(ctx) (((ucontext_t*)ctx)->uc_mcontext.mc_gregs[MC_PC])
+#else
+#define GET_GREG(ctx,reg) (((ucontext_t*)ctx)->uc_mcontext.gregs[(reg)])
+#define GET_SP(ctx) (((ucontext_t*)ctx)->uc_mcontext.gregs[REG_O6])
+#define GET_PC(ctx) (((ucontext_t*)ctx)->uc_mcontext.gregs[REG_PC])
+#endif
+
+#elif ARCH(Intel)
+#include "opcodes/disassemble.h"
+
+static int
+fprintf_func (void *arg ATTRIBUTE_UNUSED, const char *fmt ATTRIBUTE_UNUSED, ...)
+{
+ return 0;
+}
+
+static int
+fprintf_styled_func (void *arg ATTRIBUTE_UNUSED,
+ enum disassembler_style st ATTRIBUTE_UNUSED,
+ const char *fmt ATTRIBUTE_UNUSED, ...)
+{
+ return 0;
+}
+
+/* Get LENGTH bytes from info's buffer, at target address memaddr.
+ Transfer them to myaddr. */
+static int
+read_memory_func (bfd_vma memaddr, bfd_byte *myaddr, unsigned int length,
+ disassemble_info *info)
+{
+ unsigned int opb = info->octets_per_byte;
+ size_t end_addr_offset = length / opb;
+ size_t max_addr_offset = info->buffer_length / opb;
+ size_t octets = (memaddr - info->buffer_vma) * opb;
+ if (memaddr < info->buffer_vma
+ || memaddr - info->buffer_vma > max_addr_offset
+ || memaddr - info->buffer_vma + end_addr_offset > max_addr_offset
+ || (info->stop_vma && (memaddr >= info->stop_vma
+ || memaddr + end_addr_offset > info->stop_vma)))
+ return -1;
+ memcpy (myaddr, info->buffer + octets, length);
+ return 0;
+}
+
+static void
+print_address_func (bfd_vma addr ATTRIBUTE_UNUSED,
+ disassemble_info *info ATTRIBUTE_UNUSED) { }
+
+static asymbol *
+symbol_at_address_func (bfd_vma addr ATTRIBUTE_UNUSED,
+ disassemble_info *info ATTRIBUTE_UNUSED)
+{
+ return NULL;
+}
+
+static bfd_boolean
+symbol_is_valid (asymbol *sym ATTRIBUTE_UNUSED,
+ disassemble_info *info ATTRIBUTE_UNUSED)
+{
+ return TRUE;
+}
+
+static void
+memory_error_func (int status ATTRIBUTE_UNUSED, bfd_vma addr ATTRIBUTE_UNUSED,
+ disassemble_info *info ATTRIBUTE_UNUSED) { }
+
+
+#if WSIZE(32)
+#define GET_PC(ctx) (((ucontext_t*)ctx)->uc_mcontext.gregs[REG_EIP])
+#define GET_SP(ctx) (((ucontext_t*)ctx)->uc_mcontext.gregs[REG_ESP])
+#define GET_FP(ctx) (((ucontext_t*)ctx)->uc_mcontext.gregs[REG_EBP])
+
+#elif WSIZE(64)
+#define GET_PC(ctx) (((ucontext_t*)ctx)->uc_mcontext.gregs[REG_RIP])
+#define GET_SP(ctx) (((ucontext_t*)ctx)->uc_mcontext.gregs[REG_RSP])
+#define GET_FP(ctx) (((ucontext_t*)ctx)->uc_mcontext.gregs[REG_RBP])
+#endif /* WSIZE() */
+
+#elif ARCH(Aarch64)
+#define GET_PC(ctx) (((ucontext_t*)ctx)->uc_mcontext.regs[15])
+#define GET_SP(ctx) (((ucontext_t*)ctx)->uc_mcontext.regs[13])
+#define GET_FP(ctx) (((ucontext_t*)ctx)->uc_mcontext.regs[14])
+#endif /* ARCH() */
+
+/*
+ * FILL_CONTEXT() for all platforms
+ * Could use getcontext() except:
+ * - it's not guaranteed to be async signal safe
+ * - it's a system call and not that lightweight
+ * - it's not portable as of POSIX.1-2008
+ * So we just use low-level mechanisms to fill in the few fields we need.
+ */
+#if ARCH(SPARC)
+#if WSIZE(32)
+#define FILL_CONTEXT(context) \
+ { \
+ greg_t fp; \
+ __asm__ __volatile__( "mov %%i6, %0" : "=r" (fp) ); \
+ __asm__ __volatile__( "ta 3" ); \
+ GET_SP(context) = fp; \
+ GET_PC(context) = (greg_t)0; \
+ }
+
+#elif WSIZE(64)
+#define FILL_CONTEXT(context) \
+ { \
+ greg_t fp; \
+ __asm__ __volatile__( "mov %%i6, %0" : "=r" (fp) ); \
+ __asm__ __volatile__( "flushw" ); \
+ GET_SP(context) = fp; \
+ GET_PC(context) = (greg_t)0; \
+ }
+#endif /* WSIZE() */
+
+#elif ARCH(Intel)
+#define FILL_CONTEXT(context) \
+ { \
+ context->uc_link = NULL; \
+ void *sp = __collector_getsp(); \
+ GET_SP(context) = (greg_t)sp; \
+ GET_FP(context) = (greg_t)__collector_getfp(); \
+ GET_PC(context) = (greg_t)__collector_getpc(); \
+ context->uc_stack.ss_sp = sp; \
+ context->uc_stack.ss_size = 0x100000; \
+ }
+
+#elif ARCH(Aarch64)
+#define FILL_CONTEXT(context) \
+ { getcontext(context); \
+ context->uc_mcontext.sp = (__u64) __builtin_frame_address(0); \
+ }
+
+#endif /* ARCH() */
+
+static int
+getByteInstruction (unsigned char *p)
+{
+ if (__collector_VM_ReadByteInstruction)
+ {
+ int v = __collector_VM_ReadByteInstruction (p);
+ if (v != VM_NOT_VM_MEMORY)
+ return v;
+ }
+ return *p;
+}
+
+struct DataHandle *dhndl = NULL;
+
+static unsigned unwind_key = COLLECTOR_TSD_INVALID_KEY;
+
+/* To support two OpenMP API's we use a pointer
+ * to the actual function.
+ */
+int (*__collector_omp_stack_trace)(char*, int, hrtime_t, void*) = NULL;
+int (*__collector_mpi_stack_trace)(char*, int, hrtime_t) = NULL;
+
+#define DEFAULT_MAX_NFRAMES 256
+static int max_native_nframes = DEFAULT_MAX_NFRAMES;
+static int max_java_nframes = DEFAULT_MAX_NFRAMES;
+
+#define NATIVE_FRAME_BYTES(nframes) ( ((nframes)+1) * sizeof(long) )
+#define JAVA_FRAME_BYTES(nframes) ( ((nframes)+1) * sizeof(long) * 2 + 16 )
+#define OVERHEAD_BYTES ( 2 * sizeof(long) + 2 * sizeof(Stack_info) )
+
+#define ROOT_UID 801425552975190205ULL
+#define ROOT_UID_INV 92251691606677ULL
+#define ROOT_IDX 13907816567264074199ULL
+#define ROOT_IDX_INV 2075111ULL
+#define UIDTableSize 1048576
+static volatile uint64_t *UIDTable = NULL;
+static volatile int seen_omp = 0;
+
+static int stack_unwind (char *buf, int size, void *bptr, void *eptr, ucontext_t *context, int mode);
+static FrameInfo compute_uid (Frame_packet *frp);
+static int omp_no_walk = 0;
+
+#if ARCH(Intel)
+#define ValTableSize 1048576
+#define OmpValTableSize 65536
+static unsigned long *AddrTable_RA_FROMFP = NULL; // Cache for RA_FROMFP pcs
+static unsigned long *AddrTable_RA_EOSTCK = NULL; // Cache for RA_EOSTCK pcs
+static struct WalkContext *OmpCurCtxs = NULL;
+static struct WalkContext *OmpCtxs = NULL;
+static uint32_t *OmpVals = NULL;
+static unsigned long *OmpRAs = NULL;
+static unsigned long adjust_ret_addr (unsigned long ra, unsigned long segoff, unsigned long tend);
+static int parse_x86_AVX_instruction (unsigned char *pc);
+
+struct WalkContext
+{
+ unsigned long pc;
+ unsigned long sp;
+ unsigned long fp;
+ unsigned long ln;
+ unsigned long sbase; /* stack boundary */
+ unsigned long tbgn; /* current memory segment start */
+ unsigned long tend; /* current memory segment end */
+};
+#endif
+
+#if defined(DEBUG) && ARCH(Intel)
+#include <execinfo.h>
+
+static void
+dump_stack (int nline)
+{
+ if ((__collector_tracelevel & SP_DUMP_STACK) == 0)
+ return;
+
+ enum Constexpr { MAX_SIZE = 1024 };
+ void *array[MAX_SIZE];
+ size_t sz = backtrace (array, MAX_SIZE);
+ char **strings = backtrace_symbols (array, sz);
+ DprintfT (SP_DUMP_STACK, "\ndump_stack: %d size=%d\n", nline, (int) sz);
+ for (int i = 0; i < sz; i++)
+ DprintfT (SP_DUMP_STACK, " %3d: %p %s\n", i, array[i],
+ strings[i] ? strings[i] : "???");
+}
+
+#define dump_targets(nline, ntrg, targets) \
+ if ((__collector_tracelevel & SP_DUMP_UNWIND) != 0) \
+ for(int i = 0; i < ntrg; i++) \
+ DprintfT (SP_DUMP_UNWIND, " %2d: 0x%lx\n", i, (long) targets[i])
+#else
+#define dump_stack(x)
+#define dump_targets(nline, ntrg, targets)
+#endif
+
+void
+__collector_ext_unwind_key_init (int isPthread, void * stack)
+{
+ void * ptr = __collector_tsd_get_by_key (unwind_key);
+ if (ptr == NULL)
+ {
+ TprintfT (DBG_LT2, "__collector_ext_unwind_key_init: cannot get tsd\n");
+ return;
+ }
+ if (isPthread)
+ {
+ size_t stack_size = 0;
+ void *stack_addr = 0;
+ pthread_t pthread = pthread_self ();
+ pthread_attr_t attr;
+ int err = pthread_getattr_np (pthread, &attr);
+ TprintfT (DBG_LT1, "__collector_ext_unwind_key_init: pthread: 0x%lx err: %d\n", pthread, err);
+ if (err == 0)
+ {
+ err = pthread_attr_getstack (&attr, &stack_addr, &stack_size);
+ if (err == 0)
+ stack_addr = (char*) stack_addr + stack_size;
+ TprintfT (DBG_LT1, "__collector_ext_unwind_key_init: stack_size=0x%lx eos=%p err=%d\n",
+ (long) stack_size, stack_addr, err);
+ err = pthread_attr_destroy (&attr);
+ TprintfT (DBG_LT1, "__collector_ext_unwind_key_init: destroy: %d\n", err);
+ }
+ *(void**) ptr = stack_addr;
+ }
+ else
+ *(void**) ptr = stack; // cloned thread
+}
+
+void
+__collector_ext_unwind_init (int record)
+{
+ int sz = UIDTableSize * sizeof (*UIDTable);
+ UIDTable = (uint64_t*) __collector_allocCSize (__collector_heap, sz, 1);
+ if (UIDTable == NULL)
+ {
+ __collector_terminate_expt ();
+ return;
+ }
+ CALL_UTIL (memset)((void*) UIDTable, 0, sz);
+
+ char *str = CALL_UTIL (getenv)("GPROFNG_JAVA_MAX_CALL_STACK_DEPTH");
+ if (str != NULL && *str != 0)
+ {
+ char *endptr;
+ int n = CALL_UTIL (strtol)(str, &endptr, 0);
+ if (endptr != str && n >= 0)
+ {
+ if (n < 5)
+ n = 5;
+ if (n > MAX_STACKDEPTH)
+ n = MAX_STACKDEPTH;
+ max_java_nframes = n;
+ }
+ }
+
+ str = CALL_UTIL (getenv)("GPROFNG_MAX_CALL_STACK_DEPTH");
+ if (str != NULL && *str != 0)
+ {
+ char *endptr = str;
+ int n = CALL_UTIL (strtol)(str, &endptr, 0);
+ if (endptr != str && n >= 0)
+ {
+ if (n < 5)
+ n = 5;
+ if (n > MAX_STACKDEPTH)
+ n = MAX_STACKDEPTH;
+ max_native_nframes = n;
+ }
+ }
+
+ TprintfT (DBG_LT0, "GPROFNG_MAX_CALL_STACK_DEPTH=%d GPROFNG_JAVA_MAX_CALL_STACK_DEPTH=%d\n",
+ max_native_nframes, max_java_nframes);
+ omp_no_walk = 1;
+
+ if (__collector_VM_ReadByteInstruction == NULL)
+ __collector_VM_ReadByteInstruction = (int(*)()) dlsym (RTLD_DEFAULT, "Async_VM_ReadByteInstruction");
+
+#if ARCH(SPARC)
+#if WSIZE(64)
+ misalign_hdl = (unsigned long) dlsym (RTLD_DEFAULT, "__misalign_trap_handler");
+ misalign_hdlx = (unsigned long) dlsym (RTLD_DEFAULT, "__misalign_trap_handler_end");
+ if (misalign_hdlx == 0)
+ misalign_hdlx = misalign_hdl + 292;
+ barrier_hdl = (unsigned long) dlsym (RTLD_DEFAULT, "__mt_EndOfTask_Barrier_");
+ barrier_hdlx = (unsigned long) dlsym (RTLD_DEFAULT, "__mt_EndOfTask_Barrier_Dummy_");
+ if (barrier_hdlx == 0)
+ barrier_hdl = 0;
+#else
+ barrier_hdl = (unsigned long) dlsym (RTLD_DEFAULT, "__mt_EndOfTask_Barrier_");
+ barrier_hdlx = (unsigned long) dlsym (RTLD_DEFAULT, "__mt_EndOfTask_Barrier_Dummy_");
+ if (barrier_hdlx == 0)
+ barrier_hdl = 0;
+#endif /* WSIZE() */
+
+#elif ARCH(Intel)
+ sz = ValTableSize * sizeof (*AddrTable_RA_FROMFP);
+ AddrTable_RA_FROMFP = (unsigned long*) __collector_allocCSize (__collector_heap, sz, 1);
+ sz = ValTableSize * sizeof (*AddrTable_RA_EOSTCK);
+ AddrTable_RA_EOSTCK = (unsigned long*) __collector_allocCSize (__collector_heap, sz, 1);
+ if (omp_no_walk && (__collector_omp_stack_trace != NULL || __collector_mpi_stack_trace != NULL))
+ {
+ sz = OmpValTableSize * sizeof (*OmpCurCtxs);
+ OmpCurCtxs = (struct WalkContext *) __collector_allocCSize (__collector_heap, sz, 1);
+ sz = OmpValTableSize * sizeof (*OmpCtxs);
+ OmpCtxs = (struct WalkContext *) __collector_allocCSize (__collector_heap, sz, 1);
+ sz = OmpValTableSize * sizeof (*OmpVals);
+ OmpVals = (uint32_t*) __collector_allocCSize (__collector_heap, sz, 1);
+ sz = OmpValTableSize * sizeof (*OmpRAs);
+ OmpRAs = (unsigned long*) __collector_allocCSize (__collector_heap, sz, 1);
+ if (OmpCurCtxs == NULL || OmpCtxs == NULL || OmpVals == NULL || OmpRAs == NULL)
+ {
+ TprintfT (0, "unwind_init() ERROR: failed; terminating experiment\n");
+ __collector_terminate_expt ();
+ return;
+ }
+ }
+#endif /* ARCH() */
+
+ if (record)
+ {
+ dhndl = __collector_create_handle (SP_FRINFO_FILE);
+ __collector_log_write ("<%s name=\"%s\" format=\"binary\"/>\n", SP_TAG_DATAPTR, SP_FRINFO_FILE);
+ }
+
+ unwind_key = __collector_tsd_create_key (sizeof (void*), NULL, NULL);
+ if (unwind_key == COLLECTOR_TSD_INVALID_KEY)
+ {
+ TprintfT (0, "unwind_init: ERROR: TSD key create failed.\n");
+ __collector_log_write ("<%s kind=\"%s\" id=\"%d\">TSD key not created</%s>\n",
+ SP_TAG_EVENT, SP_JCMD_CERROR, COL_ERROR_GENERAL, SP_TAG_EVENT);
+ return;
+ }
+ TprintfT (0, "unwind_init() completed normally\n");
+ return;
+}
+
+void
+__collector_ext_unwind_close ()
+{
+ __collector_delete_handle (dhndl);
+ dhndl = NULL;
+}
+
+void*
+__collector_ext_return_address (unsigned level)
+{
+ if (NULL == UIDTable) //unwind not initialized yet
+ return NULL;
+ unsigned size = (level + 4) * sizeof (long); // need to strip __collector_get_return_address and its caller
+ ucontext_t context;
+ FILL_CONTEXT ((&context));
+ char* buf = (char*) alloca (size);
+ if (buf == NULL)
+ {
+ TprintfT (DBG_LT0, "__collector_get_return_address: ERROR: alloca(%d) fails\n", size);
+ return NULL;
+ }
+ int sz = stack_unwind (buf, size, NULL, NULL, &context, 0);
+ if (sz < (level + 3) * sizeof (long))
+ {
+ TprintfT (DBG_LT0, "__collector_get_return_address: size=%d, but stack_unwind returns %d\n", size, sz);
+ return NULL;
+ }
+ long *lbuf = (long*) buf;
+ TprintfT (DBG_LT2, "__collector_get_return_address: return %lx\n", lbuf[level + 2]);
+ return (void *) (lbuf[level + 2]);
+}
+/*
+ * Collector interface method getFrameInfo
+ */
+FrameInfo
+__collector_get_frame_info (hrtime_t ts, int mode, void *arg)
+{
+ ucontext_t *context = NULL;
+ void *bptr = NULL;
+ CM_Array *array = NULL;
+
+ int unwind_mode = 0;
+ int do_walk = 1;
+
+ if (mode & FRINFO_NO_WALK)
+ do_walk = 0;
+ int bmode = mode & 0xffff;
+ int pseudo_context = 0;
+ if (bmode == FRINFO_FROM_STACK_ARG || bmode == FRINFO_FROM_STACK)
+ {
+ bptr = arg;
+ context = (ucontext_t*) alloca (sizeof (ucontext_t));
+ FILL_CONTEXT (context);
+ unwind_mode |= bmode;
+ }
+ else if (bmode == FRINFO_FROM_UC)
+ {
+ context = (ucontext_t*) arg;
+ if (context == NULL)
+ return (FrameInfo) 0;
+ if (GET_SP (context) == 0)
+ pseudo_context = 1;
+ }
+ else if (bmode == FRINFO_FROM_ARRAY)
+ {
+ array = (CM_Array*) arg;
+ if (array == NULL || array->length <= 0)
+ return (FrameInfo) 0;
+ }
+ else
+ return (FrameInfo) 0;
+
+ int max_frame_size = OVERHEAD_BYTES + NATIVE_FRAME_BYTES (max_native_nframes);
+ if (__collector_java_mode && __collector_java_asyncgetcalltrace_loaded && context && !pseudo_context)
+ max_frame_size += JAVA_FRAME_BYTES (max_java_nframes);
+
+ Frame_packet *frpckt = alloca (sizeof (Frame_packet) + max_frame_size);
+ frpckt->type = FRAME_PCKT;
+ frpckt->hsize = sizeof (Frame_packet);
+
+ char *d = (char*) (frpckt + 1);
+ int size = max_frame_size;
+
+#define MIN(a,b) ((a)<(b)?(a):(b))
+ /* get Java info */
+ if (__collector_java_mode && __collector_java_asyncgetcalltrace_loaded && context && !pseudo_context)
+ {
+ /* use only 2/3 of the buffer and leave the rest for the native stack */
+ int tmpsz = MIN (size, JAVA_FRAME_BYTES (max_java_nframes));
+ if (tmpsz > 0)
+ {
+ int sz = __collector_ext_jstack_unwind (d, tmpsz, context);
+ d += sz;
+ size -= sz;
+ }
+ }
+
+ /* get native stack */
+ if (context)
+ {
+ Stack_info *sinfo = (Stack_info*) d;
+ int sz = sizeof (Stack_info);
+ d += sz;
+ size -= sz;
+#if ARCH(Intel)
+ if (omp_no_walk == 0)
+ do_walk = 1;
+#endif
+ if (do_walk == 0)
+ unwind_mode |= FRINFO_NO_WALK;
+
+ int tmpsz = MIN (size, NATIVE_FRAME_BYTES (max_native_nframes));
+ if (tmpsz > 0)
+ {
+ sz = stack_unwind (d, tmpsz, bptr, NULL, context, unwind_mode);
+ d += sz;
+ size -= sz;
+ }
+ sinfo->kind = STACK_INFO;
+ sinfo->hsize = (d - (char*) sinfo);
+ }
+
+ /* create a stack image from user data */
+ if (array && array->length > 0)
+ {
+ Stack_info *sinfo = (Stack_info*) d;
+ int sz = sizeof (Stack_info);
+ d += sz;
+ size -= sz;
+ sz = array->length;
+ if (sz > size)
+ sz = size; // YXXX should we mark this with truncation frame?
+ __collector_memcpy (d, array->bytes, sz);
+ d += sz;
+ size -= sz;
+ sinfo->kind = STACK_INFO;
+ sinfo->hsize = (d - (char*) sinfo);
+ }
+
+ /* Compute the total size */
+ frpckt->tsize = d - (char*) frpckt;
+ FrameInfo uid = compute_uid (frpckt);
+ return uid;
+}
+
+FrameInfo
+compute_uid (Frame_packet *frp)
+{
+ uint64_t idxs[LAST_INFO];
+ uint64_t uid = ROOT_UID;
+ uint64_t idx = ROOT_IDX;
+
+ Common_info *cinfo = (Common_info*) ((char*) frp + frp->hsize);
+ char *end = (char*) frp + frp->tsize;
+ for (;;)
+ {
+ if ((char*) cinfo >= end || cinfo->hsize == 0 ||
+ (char*) cinfo + cinfo->hsize > end)
+ break;
+
+ /* Start with a different value to avoid matching with uid */
+ uint64_t uidt = 1;
+ uint64_t idxt = 1;
+ long *ptr = (long*) ((char*) cinfo + cinfo->hsize);
+ long *bnd = (long*) ((char*) cinfo + sizeof (Common_info));
+ TprintfT (DBG_LT2, "compute_uid: Cnt=%ld: ", (long) cinfo->hsize);
+ while (ptr > bnd)
+ {
+ long val = *(--ptr);
+ tprintf (DBG_LT2, "0x%8.8llx ", (unsigned long long) val);
+ uidt = (uidt + val) * ROOT_UID;
+ idxt = (idxt + val) * ROOT_IDX;
+ uid = (uid + val) * ROOT_UID;
+ idx = (idx + val) * ROOT_IDX;
+ }
+ if (cinfo->kind == STACK_INFO || cinfo->kind == JAVA_INFO)
+ {
+ cinfo->uid = uidt;
+ idxs[cinfo->kind] = idxt;
+ }
+ cinfo = (Common_info*) ((char*) cinfo + cinfo->hsize);
+ }
+ tprintf (DBG_LT2, "\n");
+
+ /* Check if we have already recorded that uid.
+ * The following fragment contains benign data races.
+ * It's important, though, that all reads from UIDTable
+ * happen before writes.
+ */
+ int found1 = 0;
+ int idx1 = (int) ((idx >> 44) % UIDTableSize);
+ if (UIDTable[idx1] == uid)
+ found1 = 1;
+ int found2 = 0;
+ int idx2 = (int) ((idx >> 24) % UIDTableSize);
+ if (UIDTable[idx2] == uid)
+ found2 = 1;
+ int found3 = 0;
+ int idx3 = (int) ((idx >> 4) % UIDTableSize);
+ if (UIDTable[idx3] == uid)
+ found3 = 1;
+ if (!found1)
+ UIDTable[idx1] = uid;
+ if (!found2)
+ UIDTable[idx2] = uid;
+ if (!found3)
+ UIDTable[idx3] = uid;
+
+ if (found1 || found2 || found3)
+ return (FrameInfo) uid;
+ frp->uid = uid;
+
+ /* Compress info's */
+ cinfo = (Common_info*) ((char*) frp + frp->hsize);
+ for (;;)
+ {
+ if ((char*) cinfo >= end || cinfo->hsize == 0 ||
+ (char*) cinfo + cinfo->hsize > end)
+ break;
+ if (cinfo->kind == STACK_INFO || cinfo->kind == JAVA_INFO)
+ {
+ long *ptr = (long*) ((char*) cinfo + sizeof (Common_info));
+ long *bnd = (long*) ((char*) cinfo + cinfo->hsize);
+ uint64_t uidt = cinfo->uid;
+ uint64_t idxt = idxs[cinfo->kind];
+ int found = 0;
+ int first = 1;
+ while (ptr < bnd - 1)
+ {
+ int idx1 = (int) ((idxt >> 44) % UIDTableSize);
+ if (UIDTable[idx1] == uidt)
+ {
+ found = 1;
+ break;
+ }
+ else if (first)
+ {
+ first = 0;
+ UIDTable[idx1] = uidt;
+ }
+ long val = *ptr++;
+ uidt = uidt * ROOT_UID_INV - val;
+ idxt = idxt * ROOT_IDX_INV - val;
+ }
+ if (found)
+ {
+ char *d = (char*) ptr;
+ char *s = (char*) bnd;
+ if (!first)
+ {
+ int i;
+ for (i = 0; i<sizeof (uidt); i++)
+ {
+ *d++ = (char) uidt;
+ uidt = uidt >> 8;
+ }
+ }
+ int delta = s - d;
+ while (s < end)
+ *d++ = *s++;
+ cinfo->kind |= COMPRESSED_INFO;
+ cinfo->hsize -= delta;
+ frp->tsize -= delta;
+ end -= delta;
+ }
+ }
+ cinfo = (Common_info*) ((char*) cinfo + cinfo->hsize);
+ }
+ __collector_write_packet (dhndl, (CM_Packet*) frp);
+ return (FrameInfo) uid;
+}
+
+FrameInfo
+__collector_getUID (CM_Array *arg, FrameInfo suid)
+{
+ if (arg->length % sizeof (long) != 0 ||
+ (long) arg->bytes % sizeof (long) != 0)
+ return (FrameInfo) - 1;
+ if (arg->length == 0)
+ return suid;
+
+ uint64_t uid = suid ? suid : 1;
+ uint64_t idx = suid ? suid : 1;
+ long *ptr = (long*) ((char*) arg->bytes + arg->length);
+ long *bnd = (long*) (arg->bytes);
+ while (ptr > bnd)
+ {
+ long val = *(--ptr);
+ uid = (uid + val) * ROOT_UID;
+ idx = (idx + val) * ROOT_IDX;
+ }
+
+ /* Check if we have already recorded that uid.
+ * The following fragment contains benign data races.
+ * It's important, though, that all reads from UIDTable
+ * happen before writes.
+ */
+ int found1 = 0;
+ int idx1 = (int) ((idx >> 44) % UIDTableSize);
+ if (UIDTable[idx1] == uid)
+ found1 = 1;
+ int found2 = 0;
+ int idx2 = (int) ((idx >> 24) % UIDTableSize);
+ if (UIDTable[idx2] == uid)
+ found2 = 1;
+ int found3 = 0;
+ int idx3 = (int) ((idx >> 4) % UIDTableSize);
+ if (UIDTable[idx3] == uid)
+ found3 = 1;
+
+ if (!found1)
+ UIDTable[idx1] = uid;
+ if (!found2)
+ UIDTable[idx2] = uid;
+ if (!found3)
+ UIDTable[idx3] = uid;
+ if (found1 || found2 || found3)
+ return (FrameInfo) uid;
+
+ int sz = sizeof (Uid_packet) + arg->length;
+ if (suid)
+ sz += sizeof (suid);
+ Uid_packet *uidp = alloca (sz);
+ uidp->tsize = sz;
+ uidp->type = UID_PCKT;
+ uidp->flags = 0;
+ uidp->uid = uid;
+
+ /* Compress */
+ ptr = (long*) (arg->bytes);
+ bnd = (long*) ((char*) arg->bytes + arg->length);
+ long *dst = (long*) (uidp + 1);
+ uint64_t uidt = uid;
+ uint64_t idxt = idx;
+ uint64_t luid = suid; /* link uid */
+
+ while (ptr < bnd)
+ {
+
+ long val = *ptr++;
+ *dst++ = val;
+
+ if ((bnd - ptr) > sizeof (uidt))
+ {
+ uidt = uidt * ROOT_UID_INV - val;
+ idxt = idxt * ROOT_IDX_INV - val;
+ int idx1 = (int) ((idxt >> 44) % UIDTableSize);
+ if (UIDTable[idx1] == uidt)
+ {
+ luid = uidt;
+ break;
+ }
+ }
+ }
+ if (luid)
+ {
+ char *d = (char*) dst;
+ for (int i = 0; i<sizeof (luid); i++)
+ {
+ *d++ = (char) luid;
+ luid = luid >> 8;
+ }
+ uidp->flags |= COMPRESSED_INFO;
+ uidp->tsize = d - (char*) uidp;
+ }
+ __collector_write_packet (dhndl, (CM_Packet*) uidp);
+
+ return (FrameInfo) uid;
+}
+
+int
+__collector_getStackTrace (void *buf, int size, void *bptr, void *eptr, void *arg)
+{
+ if (arg == (void*) __collector_omp_stack_trace)
+ seen_omp = 1;
+ int do_walk = 1;
+ if (arg == NULL || arg == (void*) __collector_omp_stack_trace)
+ {
+ do_walk = (arg == (void*) __collector_omp_stack_trace && omp_no_walk) ? 0 : 1;
+ ucontext_t *context = (ucontext_t*) alloca (sizeof (ucontext_t));
+ FILL_CONTEXT (context);
+ arg = context;
+ }
+ int unwind_mode = 0;
+ if (do_walk == 0)
+ unwind_mode |= FRINFO_NO_WALK;
+ return stack_unwind (buf, size, bptr, eptr, arg, unwind_mode);
+}
+
+#if ARCH(SPARC)
+/*
+ * These are important data structures taken from the header files reg.h and
+ * ucontext.h. They are used for the stack trace algorithm explained below.
+ *
+ * typedef struct ucontext {
+ * u_long uc_flags;
+ * struct ucontext *uc_link;
+ * usigset_t uc_sigmask;
+ * stack_t uc_stack;
+ * mcontext_t uc_mcontext;
+ * long uc_filler[23];
+ * } ucontext_t;
+ *
+ * #define SPARC_MAXREGWINDOW 31
+ *
+ * struct rwindow {
+ * greg_t rw_local[8];
+ * greg_t rw_in[8];
+ * };
+ *
+ * #define rw_fp rw_in[6]
+ * #define rw_rtn rw_in[7]
+ *
+ * struct gwindows {
+ * int wbcnt;
+ * int *spbuf[SPARC_MAXREGWINDOW];
+ * struct rwindow wbuf[SPARC_MAXREGWINDOW];
+ * };
+ *
+ * typedef struct gwindows gwindows_t;
+ *
+ * typedef struct {
+ * gregset_t gregs;
+ * gwindows_t *gwins;
+ * fpregset_t fpregs;
+ * long filler[21];
+ * } mcontext_t;
+ *
+ * The stack would look like this when SIGPROF occurrs.
+ *
+ * ------------------------- <- high memory
+ * | |
+ * | |
+ * -------------------------
+ * | |
+ * ------------------------- <- fp' <-|
+ * | | |
+ * : : |
+ * | | |
+ * ------------------------- |
+ * | fp |----------|
+ * | |
+ * ------------------------- <- sp'
+ * | | | |
+ * | gwins | <- saved stack pointers & | |
+ * | | register windows | |- mcontext
+ * ------------------------- | |
+ * | gregs | <- saved registers | |
+ * ------------------------- |
+ * | | |- ucontext
+ * ------------------------- <- ucp (ucontext pointer) |
+ * | | |
+ * | | |- siginfo
+ * ------------------------- <- sip (siginfo pointer) |
+ * | |
+ * ------------------------- <- sp
+ *
+ * Then the signal handler is called with:
+ * handler( signo, sip, uip );
+ * When gwins is null, all the stack frames are saved in the user stack.
+ * In that case we can find sp' from gregs and walk the stack for a backtrace.
+ * However, if gwins is not null we will have a more complicated case.
+ * Wbcnt(in gwins) tells you how many saved register windows are valid.
+ * This is important because the kernel does not allocate the entire array.
+ * And the top most frame is saved in the lowest index element. The next
+ * paragraph explains the possible causes.
+ *
+ * There are two routines in the kernel to flush out user register windows.
+ * flush_user_windows and flush_user_windows_to_stack
+ * The first routine will not cause a page fault. Therefore if the user
+ * stack is not in memory, the register windows will be saved to the pcb.
+ * This can happen when the kernel is trying to deliver a signal and
+ * the user stack got swap out. The kernel will then build a new context for
+ * the signal handler and the saved register windows will
+ * be copied to the ucontext as show above. On the other hand,
+ * flush_user_windows_to_stack can cause a page fault, and if it failed
+ * then there is something wrong (stack overflow, misalign).
+ * The first saved register window does not necessary correspond to the
+ * first stack frame. So the current stack pointer must be compare with
+ * the stack pointers in spbuf to find a match.
+ *
+ * We will also follow the uc_link field in ucontext to trace also nested
+ * signal stack frames.
+ *
+ */
+
+/* Dealing with trap handlers.
+ * When a user defined trap handler is invoked the return address
+ * (or actually the address of an instruction that raised the trap)
+ * is passed to the trap handler in %l6, whereas saved %o7 contains
+ * garbage. First, we need to find out if a particular pc belongs
+ * to the trap handler, and if so, take the %l6 value from the stack rather
+ * than %o7 from either the stack or the register.
+ * There are three possible situations represented
+ * by the following stacks:
+ *
+ * MARKER MARKER MARKER
+ * trap handler pc __func pc before 'save' __func pc after 'save'
+ * %l6 %o7 from reg %o7 (garbage)
+ * ... %l6 trap handler pc
+ * ... %l6
+ * ...
+ * where __func is a function called from the trap handler.
+ *
+ * Currently this is implemented to only deal with __misalign_trap_handler
+ * set for v9 FORTRAN applications. Implementation of IN_TRAP_HANDLER
+ * macro shows it. A general solution is postponed.
+ */
+
+/* Special handling of unwind through the parallel loop barrier code:
+ *
+ * The library defines two symbols, __mt_EndOfTask_Barrier_ and
+ * __mt_EndOfTask_Barrier_Dummy_ representing the first word of
+ * the barrier sychronization code, and the first word following
+ * it. Whenever the leaf PC is between these two symbols,
+ * the unwind code is special-cased as follows:
+ * The __mt_EndOfTask_Barrier_ function is guaranteed to be a leaf
+ * function, so its return address is in a register, not saved on
+ * the stack.
+ *
+ * MARKER
+ * __mt_EndOfTask_Barrier_ PC -- the leaf PC
+ * loop body function address for the task -- implied caller of __mt_EndOfTask_Barrier_
+ * this address is taken from the %O0 register
+ * {mt_master or mt_slave} -- real caller of __mt_EndOfTask_Barrier_
+ * ...
+ *
+ * With this trick, the analyzer will show the time in the barrier
+ * attributed to the loop at the end of which the barrier synchronization
+ * is taking place. That loop body routine, will be shown as called
+ * from the function from which it was extracted, which will be shown
+ * as called from the real caller, either the slave or master library routine.
+ */
+
+/*
+ * These no-fault-load (0x82) assembly functions are courtesy of Rob Gardner.
+ *
+ * Note that 0x82 is ASI_PNF. See
+ * http://lxr.free-electrons.com/source/arch/sparc/include/uapi/asm/asi.h#L134
+ * ASI address space identifier; PNF primary no fault
+ */
+
+/* load an int from an address */
+
+/* if the address is illegal, return a 0 */
+static int
+SPARC_no_fault_load_int (void *addr)
+{
+ int val;
+ __asm__ __volatile__(
+ "lda [%1] 0x82, %0\n\t"
+ : "=r" (val)
+ : "r" (addr)
+ );
+
+ return val;
+}
+
+/* check if an address is invalid
+ *
+ * A no-fault load of an illegal address still faults, but it does so silently to the calling process.
+ * It returns a 0, but so could a load of a legal address.
+ * So, we time the load. A "fast" load must be a successful load.
+ * A "slow" load is probably a fault.
+ * Since it could also be a cache/TLB miss or other abnormality,
+ * it's safest to retry a slow load.
+ * The cost of trying a valid address should be some nanosecs.
+ * The cost of trying an invalid address up to 10 times could be some microsecs.
+ */
+#if 0
+static
+int invalid_SPARC_addr(void *addr)
+{
+ long t1, t2;
+ int i;
+
+ for (i=0; i<10; i++) {
+ __asm__ __volatile__(
+ "rd %%tick, %0\n\t"
+ "lduba [%2] 0x82, %%g0\n\t"
+ "rd %%tick, %1\n\t"
+ : "=r" (t1), "=r" (t2)
+ : "r" (addr) );
+ if ( (t2 - t1) < 100 )
+ return 0;
+ }
+ return 1;
+}
+#endif
+
+/*
+ * The standard SPARC procedure-calling convention is that the
+ * calling PC (for determining the return address when the procedure
+ * is finished) is placed in register %o7. A called procedure
+ * typically executes a "save" instruction that shifts the register
+ * window, and %o7 becomes %i7.
+ *
+ * Optimized leaf procedures do not shift the register window.
+ * They assume the return address will remain %o7. So when
+ * we process a leaf PC, we walk instructions to see if there
+ * is a call, restore, or other instruction that would indicate
+ * we can IGNORE %o7 because this is NOT a leaf procedure.
+ *
+ * If a limited instruction walk uncovers no such hint, we save
+ * not only the PC but the %o7 value as well... just to be safe.
+ * Later, in DBE post-processing of the call stacks, we decide
+ * whether any recorded %o7 value should be used as a caller
+ * frame or should be discarded.
+ */
+
+#define IS_ILLTRAP(x) (((x) & 0xc1c00000) == 0)
+#define IS_SAVE(x) (((x) & 0xc1f80000) == 0x81e00000)
+#define IS_MOVO7R(x) (((x) & 0xc1f8201f) == 0x8160000f)
+#define IS_MOVRO7(x) (((x) & 0xfff82000) == 0x9f600000)
+#define IS_ORRG0O7(x) (((x) & 0xff78201f) == 0x9e100000)
+#define IS_ORG0RO7(x) (((x) & 0xff7fe000) == 0x9e100000)
+#define IS_ORG0O7R(x) (((x) & 0xc17fe01f) == 0x8010000f)
+#define IS_ORO7G0R(x) (((x) & 0xc17fe01f) == 0x8013c000)
+#define IS_RESTORE(x) (((x) & 0xc1f80000) == 0x81e80000)
+#define IS_RET(x) ((x) == 0x81c7e008)
+#define IS_RETL(x) ((x) == 0x81c3e008)
+#define IS_RETURN(x) (((x) & 0xc1f80000) == 0x81c80000)
+#define IS_BRANCH(x) ((((x) & 0xc0000000) == 0) && (((x) & 0x01c00000) != 0x01000000))
+#define IS_CALL(x) (((x) & 0xc0000000) == 0x40000000)
+#define IS_LDO7(x) (((x) & 0xfff80000) == 0xde000000)
+
+static long pagesize = 0;
+
+static int
+process_leaf (long *lbuf, int ind, int lsize, void *context)
+{
+ greg_t pc = GET_PC (context);
+ greg_t o7 = GET_GREG (context, REG_O7);
+
+ /* omazur: TBR START -- not used */
+ if (IN_BARRIER (pc))
+ {
+ if (ind < lsize)
+ lbuf[ind++] = pc;
+ if (ind < lsize)
+ lbuf[ind++] = GET_GREG (context, REG_O0);
+ return ind;
+ }
+ /* omazur: TBR END */
+#if WSIZE(64)
+ if (IN_TRAP_HANDLER (pc))
+ {
+ if (ind < lsize)
+ lbuf[ind++] = pc;
+ return ind;
+ }
+#endif
+ unsigned *instrp = (unsigned *) pc;
+ unsigned *end_addr = instrp + 20;
+ while (instrp < end_addr)
+ {
+ unsigned instr = *instrp++;
+ if (IS_ILLTRAP (instr))
+ break;
+ else if (IS_SAVE (instr))
+ {
+ if (ind < lsize)
+ lbuf[ind++] = pc;
+ if (o7 && ind < lsize)
+ lbuf[ind++] = o7;
+ return ind;
+ }
+ else if (IS_MOVO7R (instr) || IS_ORG0O7R (instr) || IS_ORO7G0R (instr))
+ break;
+ else if (IS_MOVRO7 (instr) || IS_ORG0RO7 (instr))
+ {
+ int rs2 = (instr & 0x1f) + REG_G1 - 1;
+ o7 = (rs2 <= REG_O7) ? GET_GREG (context, rs2) : 0;
+ break;
+ }
+ else if (IS_ORRG0O7 (instr))
+ {
+ int rs2 = ((instr & 0x7c000) >> 14) + REG_G1 - 1;
+ o7 = (rs2 <= REG_O7) ? GET_GREG (context, rs2) : 0;
+ break;
+ }
+ else if (IS_RESTORE (instr))
+ {
+ o7 = 0;
+ break;
+ }
+ else if (IS_RETURN (instr))
+ {
+ o7 = 0;
+ break;
+ }
+ else if (IS_RET (instr))
+ {
+ o7 = 0;
+ break;
+ }
+ else if (IS_RETL (instr))
+ {
+ /* process delay slot */
+ instr = *instrp++;
+ if (IS_RESTORE (instr))
+ o7 = 0;
+ break;
+ }
+ else if (IS_BRANCH (instr))
+ {
+ unsigned *backbegin = ((unsigned *) pc - 1);
+ unsigned *backend = backbegin - 12 + (instrp - (unsigned *) pc);
+ while (backbegin > backend)
+ {
+ // 21920143 stack unwind: SPARC process_leaf backtracks too far
+ /*
+ * We've already dereferenced backbegin+1.
+ * So if backbegin is on the same page, we're fine.
+ * If we've gone to a different page, possibly things are not fine.
+ * We don't really know how to test that.
+ * Let's just assume the worst: that dereferencing backbegin would segv.
+ * We won't know if we're in a leaf function or not.
+ */
+ if (pagesize == 0)
+ pagesize = CALL_UTIL (sysconf)(_SC_PAGESIZE);
+ if ((((long) (backbegin + 1)) & (pagesize - 1)) < sizeof (unsigned*))
+ break;
+ unsigned backinstr = *backbegin--;
+ if (IS_LDO7 (backinstr))
+ {
+ o7 = 0;
+ break;
+ }
+ else if (IS_ILLTRAP (backinstr))
+ break;
+ else if (IS_RETURN (backinstr))
+ break;
+ else if (IS_RET (backinstr))
+ break;
+ else if (IS_RETL (backinstr))
+ break;
+ else if (IS_CALL (backinstr))
+ break;
+ else if (IS_SAVE (backinstr))
+ {
+ o7 = 0;
+ break;
+ }
+ }
+ break;
+ }
+ else if (IS_CALL (instr))
+ o7 = 0;
+ }
+
+#if WSIZE(64)
+ if (o7 != 0 && ((long) o7) < 32 && ((long) o7) > -32)
+ {
+ /* 20924821 SEGV in unwind code on SPARC/Linux
+ * We've seen this condition in some SPARC-Linux runs.
+ * o7 is non-zero but not a valid address.
+ * Values like 4 or -7 have been seen.
+ * Let's check if o7 is unreasonably small.
+ * If so, set to 0 so that it won't be recorded.
+ * Otherwise, there is risk of it being dereferenced in process_sigreturn().
+ */
+ // __collector_log_write("<event kind=\"%s\" id=\"%d\">time %lld, internal debug unwind at leaf; o7 = %ld, pc = %x</event>\n",
+ // SP_JCMD_COMMENT, COL_COMMENT_NONE, __collector_gethrtime() - __collector_start_time, (long) o7, pc );
+ o7 = 0;
+ }
+#endif
+
+ if (o7)
+ {
+ if (ind < lsize)
+ lbuf[ind++] = SP_LEAF_CHECK_MARKER;
+ if (ind < lsize)
+ lbuf[ind++] = pc;
+ if (ind < lsize)
+ lbuf[ind++] = o7;
+ }
+ else if (ind < lsize)
+ lbuf[ind++] = pc;
+ return ind;
+}
+
+#if WSIZE(64)
+// detect signal handler
+static int
+process_sigreturn (long *lbuf, int ind, int lsize, unsigned char * tpc,
+ struct frame **pfp, void * bptr, int extra_frame)
+{
+ // cheap checks whether tpc is obviously not an instruction address
+ if ((4096 > (unsigned long) tpc) // the first page is off limits
+ || (3 & (unsigned long) tpc))
+ return ind; // the address is not aligned
+
+ // get the instruction at tpc, skipping over as many as 7 nop's (0x01000000)
+ int insn, i;
+ for (i = 0; i < 7; i++)
+ {
+ insn = SPARC_no_fault_load_int ((void *) tpc);
+ if (insn != 0x01000000)
+ break;
+ tpc += 4;
+ }
+
+ // we're not expecting 0 (and it could mean an illegal address)
+ if (insn == 0)
+ return ind;
+
+ // We are looking for __rt_sigreturn_stub with the instruction
+ // 0x82102065 : mov 0x65 /* __NR_rt_sigreturn */, %g1
+ if (insn == 0x82102065)
+ {
+ /*
+ * according to linux kernel source code,
+ * syscall(_NR_rt_sigreturn) uses the following data in stack:
+ * struct rt_signal_frame {
+ * struct sparc_stackf ss;
+ * siginfo_t info;
+ * struct pt_regs regs;
+ * ....};
+ * sizeof(struct sparc_stackf) is 192;
+ * sizeof(siginfo_t) is 128;
+ * we need to get the register values from regs, which is defined as:
+ * struct pt_regs {
+ * unsigned long u_regs[16];
+ * unsigned long tstate;
+ * unsigned long tpc;
+ * unsigned long tnpc;
+ * ....};
+ * pc and fp register has offset of 120 and 112;
+ * the pc of kill() is stored in tnpc, whose offest is 136.
+ */
+ greg_t pc = *((unsigned long*) ((char*) ((*pfp)) + 192 + 128 + 136));
+ greg_t pc1 = *((unsigned long*) ((char*) ((*pfp)) + 192 + 128 + 120));
+ (*pfp) = *((struct frame**) ((char*) ((*pfp)) + 192 + 128 + 112));
+ if (pc && pc1)
+ {
+ if (bptr != NULL && extra_frame && ((char*) (*pfp) + STACK_BIAS) < (char*) bptr && ind < 2)
+ {
+ lbuf[0] = pc1;
+ if (ind == 0)
+ ind++;
+ }
+ if (bptr == NULL || ((char*) (*pfp) + STACK_BIAS) >= (char*) bptr)
+ {
+ if (ind < lsize)
+ lbuf[ind++] = (unsigned long) tpc;
+ if (ind < lsize)
+ lbuf[ind++] = pc;
+ if (ind < lsize)
+ lbuf[ind++] = pc1;
+ }
+ }
+ DprintfT (SP_DUMP_UNWIND, "unwind.c: resolved sigreturn pc=0x%lx, pc1=0x%lx, fp=0x%lx\n", pc, pc1, *(pfp));
+ }
+ return ind;
+}
+#endif
+
+/*
+ * int stack_unwind( char *buf, int size, ucontext_t *context )
+ * This routine looks into the mcontext and
+ * trace stack frames to record return addresses.
+ */
+int
+stack_unwind (char *buf, int size, void *bptr, void *eptr, ucontext_t *context, int mode)
+{
+ /*
+ * trace the stack frames from user stack.
+ * We are assuming that the frame pointer and return address
+ * are null when we are at the top level.
+ */
+ long *lbuf = (long*) buf;
+ int lsize = size / sizeof (long);
+ struct frame *fp = (struct frame *) GET_SP (context); /* frame pointer */
+ greg_t pc; /* program counter */
+ int extra_frame = 0;
+ if ((mode & 0xffff) == FRINFO_FROM_STACK)
+ extra_frame = 1;
+
+ int ind = 0;
+ if (bptr == NULL)
+ ind = process_leaf (lbuf, ind, lsize, context);
+
+ int extra_frame = 0;
+ if ((mode & 0xffff) == FRINFO_FROM_STACK)
+ extra_frame = 1;
+ int ind = 0;
+ if (bptr == NULL)
+ ind = process_leaf (lbuf, ind, lsize, context);
+
+ while (fp)
+ {
+ if (ind >= lsize)
+ break;
+ fp = (struct frame *) ((char *) fp + STACK_BIAS);
+ if (eptr && fp >= (struct frame *) eptr)
+ {
+ ind = ind >= 2 ? ind - 2 : 0;
+ break;
+ }
+#if WSIZE(64) // detect signal handler
+ unsigned char * tpc = ((unsigned char*) (fp->fr_savpc));
+ struct frame * tfp = (struct frame*) ((char*) (fp->fr_savfp) + STACK_BIAS);
+ int old_ind = ind;
+ ind = process_sigreturn (lbuf, old_ind, lsize, tpc, &tfp, bptr, extra_frame);
+ if (ind != old_ind)
+ {
+ pc = (greg_t) tpc;
+ fp = tfp;
+ }
+ else
+#endif
+ {
+#if WSIZE(64)
+ if (IN_TRAP_HANDLER (lbuf[ind - 1]))
+ pc = fp->fr_local[6];
+ else
+ pc = fp->fr_savpc;
+#else
+ pc = fp->fr_savpc;
+#endif
+ fp = fp->fr_savfp;
+ if (pc)
+ {
+ if (bptr != NULL && extra_frame && ((char*) fp + STACK_BIAS) < (char*) bptr && ind < 2)
+ {
+ lbuf[0] = pc;
+ if (ind == 0)
+ ind++;
+ }
+ if (bptr == NULL || ((char*) fp + STACK_BIAS) >= (char*) bptr)
+ lbuf[ind++] = pc;
+ }
+ }
+
+ /* 4616238: _door_return may have a frame that has non-zero
+ * saved stack pointer and zero pc
+ */
+ if (pc == (greg_t) NULL)
+ break;
+ }
+
+ if (ind >= lsize)
+ { /* truncated stack handling */
+ ind = lsize - 1;
+ lbuf[ind++] = SP_TRUNC_STACK_MARKER;
+ }
+ return ind * sizeof (long);
+}
+
+#elif ARCH(Intel)
+
+/* get __NR_<syscall_name> constants */
+#include <syscall.h>
+
+/*
+ * From uts/intel/ia32/os/sendsig.c:
+ *
+ * An amd64 signal frame looks like this on the stack:
+ *
+ * old %rsp:
+ * <128 bytes of untouched stack space>
+ * <a siginfo_t [optional]>
+ * <a ucontext_t>
+ * <siginfo_t *>
+ * <signal number>
+ * new %rsp: <return address (deliberately invalid)>
+ *
+ * The signal number and siginfo_t pointer are only pushed onto the stack in
+ * order to allow stack backtraces. The actual signal handling code expects the
+ * arguments in registers.
+ *
+ * An i386 SVR4/ABI signal frame looks like this on the stack:
+ *
+ * old %esp:
+ * <a siginfo32_t [optional]>
+ * <a ucontext32_t>
+ * <pointer to that ucontext32_t>
+ * <pointer to that siginfo32_t>
+ * <signo>
+ * new %esp: <return address (deliberately invalid)>
+ */
+
+#if WSIZE(32)
+#define OPC_REG(x) ((x)&0x7)
+#define MRM_REGD(x) (((x)>>3)&0x7)
+#define MRM_REGS(x) ((x)&0x7)
+#define RED_ZONE 0
+#elif WSIZE(64)
+#define OPC_REG(x) (B|((x)&0x7))
+#define MRM_REGD(x) (R|(((x)>>3)&0x7))
+#define MRM_REGS(x) (B|((x)&0x7))
+#define RED_ZONE 16
+#endif
+#define MRM_EXT(x) (((x)>>3)&0x7)
+#define MRM_MOD(x) ((x)&0xc0)
+
+#define RAX 0
+#define RDX 2
+#define RSP 4
+#define RBP 5
+
+struct AdvWalkContext
+{
+ unsigned char *pc;
+ unsigned long *sp;
+ unsigned long *sp_safe;
+ unsigned long *fp;
+ unsigned long *fp_sav;
+ unsigned long *fp_loc;
+ unsigned long rax;
+ unsigned long rdx;
+ unsigned long ra_sav;
+ unsigned long *ra_loc;
+ unsigned long regs[16];
+ int tidx; /* targets table index */
+ uint32_t cval; /* cache value */
+};
+
+static unsigned long
+getRegVal (struct AdvWalkContext *cur, int r, int *undefRez)
+{
+ if (cur->regs[r] == 0)
+ {
+ if (r == RBP)
+ {
+ tprintf (DBG_LT3, "getRegVal: returns cur->regs[RBP]=0x%lx cur->pc=0x%lx\n",
+ (unsigned long) cur->fp, (unsigned long) cur->pc);
+ return (unsigned long) cur->fp;
+ }
+ *undefRez = 1;
+ }
+ tprintf (DBG_LT3, "getRegVal: cur->regs[%d]=0x%lx cur->pc=0x%lx\n",
+ r, (unsigned long) cur->regs[r], (unsigned long) cur->pc);
+ return cur->regs[r];
+}
+
+static unsigned char *
+check_modrm (unsigned char *pc)
+{
+ unsigned char modrm = *pc++;
+ unsigned char mod = MRM_MOD (modrm);
+ if (mod == 0xc0)
+ return pc;
+ unsigned char regs = modrm & 0x07;
+ if (regs == RSP)
+ {
+ if (mod == 0x40)
+ return pc + 2; // SIB + disp8
+ if (mod == 0x80)
+ return pc + 5; // SIB + disp32
+ return pc + 1; // SIB
+ }
+ if (mod == 0x0)
+ {
+ if (regs == RBP)
+ pc += 4; // disp32
+ }
+ else if (mod == 0x40)
+ pc += 1; /* byte */
+ else if (mod == 0x80)
+ pc += 4; /* word */
+ return pc;
+}
+
+static int
+read_int (unsigned char *pc, int w)
+{
+ if (w == 1)
+ return *((char *) pc);
+ if (w == 2)
+ return *(short*) pc;
+ return *(int*) pc;
+}
+
+/* Return codes */
+enum
+{
+ RA_FAILURE = 0,
+ RA_SUCCESS,
+ RA_END_OF_STACK,
+ RA_SIGRETURN,
+ RA_RT_SIGRETURN
+};
+
+/* Cache value encodings */
+static const uint32_t RA_FROMFP = (uint32_t) - 1; /* get the RA from the frame pointer */
+static const uint32_t RA_EOSTCK = (uint32_t) - 2; /* end-of-stack */
+
+
+#define MAXCTX 16
+#define MAXTRGTS 64
+#define MAXJMPREG 2
+#define MAXJMPREGCTX 3
+
+#define DELETE_CURCTX() __collector_memcpy (cur, buf + (--nctx), sizeof (*cur))
+
+/**
+ * Look for pc in AddrTable_RA_FROMFP and in AddrTable_RA_EOSTCK
+ * @param wctx
+ * @return
+ */
+static int
+cache_get (struct WalkContext *wctx)
+{
+ unsigned long addr;
+ if (AddrTable_RA_FROMFP != NULL)
+ {
+ uint64_t idx = wctx->pc % ValTableSize;
+ addr = AddrTable_RA_FROMFP[ idx ];
+ if (addr == wctx->pc)
+ { // Found in AddrTable_RA_FROMFP
+ unsigned long *sp = NULL;
+ unsigned long fp = wctx->fp;
+ /* validate fp before use */
+ if (fp < wctx->sp || fp >= wctx->sbase - sizeof (*sp))
+ return RA_FAILURE;
+ sp = (unsigned long *) fp;
+ fp = *sp++;
+ unsigned long ra = *sp++;
+ unsigned long tbgn = wctx->tbgn;
+ unsigned long tend = wctx->tend;
+ if (ra < tbgn || ra >= tend)
+ if (!__collector_check_segment (ra, &tbgn, &tend, 0))
+ return RA_FAILURE;
+ unsigned long npc = adjust_ret_addr (ra, ra - tbgn, tend);
+ if (npc == 0)
+ return RA_FAILURE;
+ DprintfT (SP_DUMP_UNWIND, "unwind.c:%d cached pc=0x%lX\n", __LINE__, npc);
+ wctx->pc = npc;
+ wctx->sp = (unsigned long) sp;
+ wctx->fp = fp;
+ wctx->tbgn = tbgn;
+ wctx->tend = tend;
+ return RA_SUCCESS;
+ }
+ }
+ if (NULL == AddrTable_RA_EOSTCK)
+ return RA_FAILURE;
+ uint64_t idx = wctx->pc % ValTableSize;
+ addr = AddrTable_RA_EOSTCK[ idx ];
+ if (addr != wctx->pc)
+ return RA_FAILURE;
+ DprintfT (SP_DUMP_UNWIND, "unwind.c:%d cached RA_END_OF_STACK\n", __LINE__);
+ return RA_END_OF_STACK;
+}
+/**
+ * Save pc in RA_FROMFP or RA_EOSTCK cache depending on val
+ * @param wctx
+ */
+static void
+cache_put (struct WalkContext *wctx, const uint32_t val)
+{
+ if (RA_FROMFP == val)
+ {
+ // save pc in RA_FROMFP cache
+ if (NULL != AddrTable_RA_FROMFP)
+ {
+ uint64_t idx = wctx->pc % ValTableSize;
+ AddrTable_RA_FROMFP[ idx ] = wctx->pc;
+ if (NULL != AddrTable_RA_EOSTCK)
+ if (AddrTable_RA_EOSTCK[ idx ] == wctx->pc)
+ // invalidate pc in RA_EOSTCK cache
+ AddrTable_RA_EOSTCK[ idx ] = 0;
+ }
+ return;
+ }
+ if (RA_EOSTCK == val)
+ {
+ // save pc in RA_EOSTCK cache
+ if (NULL != AddrTable_RA_EOSTCK)
+ {
+ uint64_t idx = wctx->pc % ValTableSize;
+ AddrTable_RA_EOSTCK[ idx ] = wctx->pc;
+ if (NULL != AddrTable_RA_FROMFP)
+ {
+ if (AddrTable_RA_FROMFP[ idx ] == wctx->pc)
+ // invalidate pc in RA_FROMFP cache
+ AddrTable_RA_FROMFP[ idx ] = 0;
+ }
+ }
+ return;
+ }
+}
+
+static int
+process_return_real (struct WalkContext *wctx, struct AdvWalkContext *cur, int cache_on)
+{
+ if ((unsigned long) cur->sp >= wctx->sbase ||
+ (unsigned long) cur->sp < wctx->sp)
+ {
+ DprintfT (SP_DUMP_UNWIND, "unwind.c: not in stack: %p [0x%lX-0x%lX]\n",
+ cur->sp, wctx->sp, wctx->sbase);
+ return RA_FAILURE;
+ }
+
+ unsigned long ra;
+ if (cur->sp == cur->ra_loc)
+ {
+ ra = cur->ra_sav;
+ cur->sp++;
+ }
+ else if (cur->sp >= cur->sp_safe && (unsigned long) cur->sp < wctx->sbase)
+ ra = *cur->sp++;
+ else
+ {
+ DprintfT (SP_DUMP_UNWIND, "unwind.c: not safe: %p >= %p\n", cur->sp, cur->sp_safe);
+ return RA_FAILURE;
+ }
+ if (ra == 0)
+ {
+ if (cache_on)
+ cache_put (wctx, RA_EOSTCK);
+ wctx->pc = ra;
+ wctx->sp = (unsigned long) cur->sp;
+ wctx->fp = (unsigned long) cur->fp;
+ DprintfT (SP_DUMP_UNWIND, "unwind.c:%d RA_END_OF_STACK\n", __LINE__);
+ return RA_END_OF_STACK;
+ }
+
+ unsigned long tbgn = wctx->tbgn;
+ unsigned long tend = wctx->tend;
+ if (ra < tbgn || ra >= tend)
+ {
+ if (!__collector_check_segment (ra, &tbgn, &tend, 0))
+ {
+ DprintfT (SP_DUMP_UNWIND, "unwind.c: not in segment: 0x%lX [0x%lX-0x%lX]\n",
+ ra, wctx->tbgn, wctx->tend);
+ return RA_FAILURE;
+ }
+ }
+
+ if (cur->cval == RA_FROMFP)
+ {
+ if (wctx->fp == (unsigned long) (cur->sp - 2))
+ {
+ if (cache_on)
+ cache_put (wctx, RA_FROMFP);
+ }
+ else
+ cur->cval = 0;
+ }
+
+ unsigned long npc = adjust_ret_addr (ra, ra - tbgn, tend);
+ if (npc == 0)
+ {
+ if (cur->cval == RA_FROMFP)
+ {
+ /* We have another evidence that we can trust this RA */
+ DprintfT (SP_DUMP_UNWIND, "unwind.c: trusted fp, pc = 0x%lX\n", wctx->pc);
+ wctx->pc = ra;
+ }
+ else
+ {
+ DprintfT (SP_DUMP_UNWIND, "unwind.c: 0 after adjustment\n");
+ return RA_FAILURE;
+ }
+ }
+ else
+ wctx->pc = npc;
+ wctx->sp = (unsigned long) cur->sp;
+ wctx->fp = (unsigned long) cur->fp;
+ wctx->tbgn = tbgn;
+ wctx->tend = tend;
+ return RA_SUCCESS;
+}
+
+static int
+process_return (struct WalkContext *wctx, struct AdvWalkContext *cur)
+{
+ return process_return_real (wctx, cur, 1);
+}
+
+static void
+omp_cache_put (unsigned long *cur_sp_safe, struct WalkContext * wctx_pc_save,
+ struct WalkContext *wctx, uint32_t val)
+{
+ if (omp_no_walk && (OmpCurCtxs == NULL || OmpCtxs == NULL || OmpVals == NULL || OmpRAs == NULL))
+ {
+ size_t sz = OmpValTableSize * sizeof (*OmpCurCtxs);
+ OmpCurCtxs = (struct WalkContext *) __collector_allocCSize (__collector_heap, sz, 1);
+ sz = OmpValTableSize * sizeof (*OmpCtxs);
+ OmpCtxs = (struct WalkContext *) __collector_allocCSize (__collector_heap, sz, 1);
+ sz = OmpValTableSize * sizeof (*OmpVals);
+ OmpVals = (uint32_t*) __collector_allocCSize (__collector_heap, sz, 1);
+ sz = OmpValTableSize * sizeof (*OmpRAs);
+ OmpRAs = (unsigned long*) __collector_allocCSize (__collector_heap, sz, 1);
+ }
+ if (OmpCurCtxs == NULL || OmpCtxs == NULL || OmpVals == NULL || OmpRAs == NULL)
+ return;
+
+#define USE_18434988_OMP_CACHE_WORKAROUND
+#ifndef USE_18434988_OMP_CACHE_WORKAROUND
+ uint64_t idx = wctx_pc_save->pc * ROOT_IDX;
+ OmpVals[ idx % OmpValTableSize ] = val;
+ idx = (idx + val) * ROOT_IDX;
+ __collector_memcpy (&(OmpCurCtxs[ idx % OmpValTableSize ]), wctx_pc_save, sizeof (struct WalkContext));
+ idx = (idx + val) * ROOT_IDX;
+ __collector_memcpy (&(OmpCtxs[ idx % OmpValTableSize ]), wctx, sizeof (struct WalkContext));
+#endif
+ unsigned long *sp = NULL;
+ unsigned long fp = wctx_pc_save->fp;
+ int from_fp = 0;
+ if (val == RA_END_OF_STACK)
+ {
+ sp = (unsigned long *) (wctx->sp);
+ sp--;
+ TprintfT (DBG_LT1, "omp_cache_put: get sp from EOS, sp=%p\n", sp);
+ }
+ else
+ {
+ if (fp < wctx_pc_save->sp || fp >= wctx_pc_save->sbase - sizeof (*sp))
+ {
+ sp = (unsigned long *) (wctx->sp);
+ sp--;
+ TprintfT (DBG_LT1, "omp_cache_put: get sp from sp, sp=%p\n", sp);
+ }
+ else
+ {
+ TprintfT (DBG_LT1, "omp_cache_put: get sp from fp=0x%lx\n", fp);
+ sp = (unsigned long *) fp;
+ from_fp = 1;
+ }
+ }
+
+ if (sp < cur_sp_safe || ((unsigned long) sp >= wctx->sbase))
+ return;
+
+ unsigned long ra = *sp++;
+ if (from_fp)
+ {
+ unsigned long tbgn = wctx_pc_save->tbgn;
+ unsigned long tend = wctx_pc_save->tend;
+ if (ra < tbgn || ra >= tend)
+ {
+ sp = (unsigned long *) (wctx->sp);
+ sp--;
+ ra = *sp++;
+ }
+ }
+#ifdef USE_18434988_OMP_CACHE_WORKAROUND
+ uint64_t idx1 = wctx_pc_save->pc * ROOT_IDX;
+ uint64_t idx2 = (idx1 + val) * ROOT_IDX;
+ uint64_t idx3 = (idx2 + val) * ROOT_IDX;
+ uint64_t idx4 = (idx3 + val) * ROOT_IDX;
+ OmpRAs [ idx4 % OmpValTableSize ] = 0; // lock
+ OmpVals[ idx1 % OmpValTableSize ] = val;
+ __collector_memcpy (&(OmpCurCtxs[ idx2 % OmpValTableSize ]), wctx_pc_save, sizeof (struct WalkContext));
+ __collector_memcpy (&(OmpCtxs [ idx3 % OmpValTableSize ]), wctx, sizeof (struct WalkContext));
+ OmpRAs [ idx4 % OmpValTableSize ] = ra;
+#else
+ idx = (idx + val) * ROOT_IDX;
+ OmpRAs[ idx % OmpValTableSize ] = ra;
+#endif
+ TprintfT (DBG_LT1, "omp_cache_put: pc=0x%lx\n", wctx_pc_save->pc);
+}
+
+/*
+ * See bug 17166877 - malloc_internal unwind failure.
+ * Sometimes there are several calls right after ret, like:
+ * leave
+ * ret
+ * call xxx
+ * call xxxx
+ * call xxxxx
+ * If they are also jump targets, we should better not
+ * create new jump context for those, since they may
+ * end up into some other function.
+ */
+static int
+is_after_ret (unsigned char * npc)
+{
+ if (*npc != 0xe8)
+ return 0;
+ unsigned char * onpc = npc;
+ int ncall = 1;
+ int maxsteps = 10;
+ int mincalls = 3;
+ int steps = 0;
+ while (*(npc - 5) == 0xe8 && steps < maxsteps)
+ {
+ npc -= 5;
+ ncall++;
+ steps++;
+ }
+ if (*(npc - 1) != 0xc3 || *(npc - 2) != 0xc9)
+ return 0;
+ steps = 0;
+ while (*(onpc + 5) == 0xe8 && steps < maxsteps)
+ {
+ onpc += 5;
+ ncall++;
+ steps++;
+ }
+ if (ncall < mincalls)
+ return 0;
+ return 1;
+}
+
+static int
+find_i386_ret_addr (struct WalkContext *wctx, int do_walk)
+{
+ if (wctx->sp == 0)
+ // Some artificial contexts may have %sp set to 0. See SETFUNCTIONCONTEXT()
+ return RA_FAILURE;
+
+ /* Check cached values */
+ int retc = cache_get (wctx);
+ if (retc != RA_FAILURE)
+ return retc;
+
+ /* An attempt to perform code analysis for call stack tracing */
+ unsigned char opcode;
+ unsigned char extop;
+ unsigned char extop2;
+ unsigned char modrm;
+ int imm8; /* immediate operand, byte */
+ int immv; /* immediate operand, word(2) or doubleword(4) */
+ int reg; /* register code */
+
+ /* Buffer for branch targets (analysis stoppers) */
+ unsigned char *targets[MAXTRGTS];
+ int ntrg = 0; /* number of entries in the table */
+ targets[ntrg++] = (unsigned char*) wctx->pc;
+ targets[ntrg++] = (unsigned char*) - 1;
+
+ struct AdvWalkContext buf[MAXCTX];
+ struct AdvWalkContext *cur = buf;
+ CALL_UTIL (memset)((void*) cur, 0, sizeof (*cur));
+
+ cur->pc = (unsigned char*) wctx->pc;
+ cur->sp = (unsigned long*) wctx->sp;
+ cur->sp_safe = cur->sp - RED_ZONE; /* allow for the 128-byte red zone on amd64 */
+ cur->fp = (unsigned long*) wctx->fp;
+ cur->tidx = 1;
+ DprintfT (SP_DUMP_UNWIND, "\nstack_unwind (x86 walk):%d %p start\n", __LINE__, cur->pc);
+
+ int nctx = 1; /* number of contexts being processed */
+ int cnt = 8192; /* number of instructions to analyse */
+
+ /*
+ * The basic idea of our x86 stack unwind is that we don't know
+ * if we can trust the frame-pointer register. So we walk
+ * instructions to find a return instruction, at which point
+ * we know the return address is on the top of the stack, etc.
+ *
+ * A severe challenge to walking x86 instructions is when we
+ * encounter "jmp *(reg)" instructions, where we are expected
+ * to jump to the (unknown-to-us) contents of a register.
+ *
+ * The "jmp_reg" code here attempts to keep track of the
+ * context for such a jump, deferring any handling of such
+ * a difficult case. We continue with other contexts, hoping
+ * that some other walk will take us to a return instruction.
+ *
+ * If no other walk helps, we return to "jmp_reg" contexts.
+ * While we don't know the jump target, it is possible that the
+ * bytes immediately following the jmp_reg instruction represent
+ * one possible target, as might be the case when a "switch"
+ * statement is compiled.
+ *
+ * Unfortunately, the bytes following a "jmp_reg" instruction might
+ * instead be a jump target from somewhere else -- execution might
+ * never "fall through" from the preceding "jmp_reg". Those bytes
+ * might not even be instructions at all. There are many uses of
+ * jmp_reg instructions beyond just compiling switch statements.
+ *
+ * So walking the bytes after a "jmp_reg" instruction can lead
+ * to bugs and undefined behavior, including SEGV and core dump.
+ *
+ * We currently do not really understand the "jmp_reg" code below.
+ */
+ int jmp_reg_switch_mode = 0;
+ int num_jmp_reg = 0; // number of jmp *reg met when switch mode is off or when in current switch case
+ int total_num_jmp_reg = 0; // number of total jmp *reg met
+ struct AdvWalkContext * jmp_reg_ctx[MAXJMPREG]; // context of jmp *reg met when switch mode is off or when in current switch case
+ struct AdvWalkContext * jmp_reg_switch_ctx[MAXJMPREG]; // context of jmp *reg used in switch cases
+ struct AdvWalkContext * jmp_reg_switch_backup_ctx = NULL; // context of the first jmp *reg used in switch cases
+
+ int cur_jmp_reg_switch = 0; // current switch table
+ int num_jmp_reg_switch = 0; // number of switch table
+ int jmp_reg_switch_case = 0; // case number in current switch table
+ unsigned char * jmp_reg_switch_pc = NULL; // the start pc of current switch case
+ unsigned char * jmp_reg_switch_pc_old = NULL; // backup for deleteing context of jump target
+ unsigned char * jmp_reg_switch_base = NULL; // start pc for checking offsets
+ int max_jmp_reg_switch_case = 2;
+#if WSIZE(32)
+ int max_switch_pc_offset = 512;
+#else // WSIZE(64)
+ int max_switch_pc_offset = 1024;
+#endif
+ int expected_num_jmp_reg = 1; // should be smaller than MAXJMPREG
+ int max_num_jmp_reg_seen = 4; // try to resolve return if there are so many such instructions
+
+
+ int save_ctx = 0; // flag to save walk context in the cache to speed up unwind
+ struct WalkContext wctx_pc_save;
+ if (do_walk == 0)
+ // do_walk is the flag indicating not walking through the instructions, resolving the RA from the stack fp first
+ __collector_memcpy (&wctx_pc_save, wctx, sizeof (struct WalkContext));
+
+startWalk:
+ if (do_walk == 0)
+ { // try to resolve RA from stack frame pointer
+ if (OmpCurCtxs == NULL || OmpCtxs == NULL || OmpVals == NULL || OmpRAs == NULL)
+ {
+ do_walk = 1;
+ goto startWalk;
+ }
+ // before goto checkFP, try the RA from cache (key: WalkContext -> value: caller's WalkContext))
+ uint64_t idx = wctx->pc * ROOT_IDX;
+ uint32_t val = OmpVals[idx % OmpValTableSize];
+ idx = (idx + val) * ROOT_IDX;
+#ifdef USE_18434988_OMP_CACHE_WORKAROUND
+ // Check ra: if it is 0 - then cache is invalid
+ uint64_t idx4;
+ idx4 = (idx + val) * ROOT_IDX;
+ idx4 = (idx4 + val) * ROOT_IDX;
+ if (0 == OmpRAs[ idx4 % OmpValTableSize ]) // Invalid cache
+ goto checkFP;
+#endif
+ struct WalkContext saved_ctx;
+ __collector_memcpy (&saved_ctx, &OmpCurCtxs[ idx % OmpValTableSize ], sizeof (struct WalkContext));
+ if (wctx->pc == saved_ctx.pc
+ && wctx->sp == saved_ctx.sp
+ && wctx->fp == saved_ctx.fp
+ && wctx->tbgn == saved_ctx.tbgn
+ && wctx->tend == saved_ctx.tend)
+ { // key match, RA may be valid
+ idx = (idx + val) * ROOT_IDX;
+ unsigned long *sp = NULL;
+ unsigned long fp = wctx->fp;
+ int from_fp = 0;
+ if (val == RA_END_OF_STACK)
+ {
+ DprintfT (SP_DUMP_UNWIND, "find_i386_ret_addr:%d -- RA_END_OF_STACK: pc=0x%lx\n", __LINE__, wctx->pc);
+ __collector_memcpy (wctx, &OmpCtxs[ idx % OmpValTableSize ], sizeof (struct WalkContext));
+ return val;
+ }
+ else
+ {
+ if (fp < wctx->sp || fp >= wctx->sbase - sizeof (*sp))
+ {
+ TprintfT (DBG_LT1, "omp_cache_get -- wrong fp: pc=0x%lx\n", wctx->pc);
+ sp = (unsigned long *) (OmpCtxs[ idx % OmpValTableSize ].sp);
+ sp--;
+ if (sp < cur->sp_safe || (unsigned long) sp >= wctx->sbase)
+ {
+ goto checkFP;
+ }
+ unsigned long ra = *sp;
+ uint64_t idx2 = (idx + val) * ROOT_IDX;
+ if (OmpRAs[ idx2 % OmpValTableSize ] == ra)
+ {
+ __collector_memcpy (wctx, &OmpCtxs[ idx % OmpValTableSize ], sizeof (struct WalkContext));
+ TprintfT (DBG_LT1, "omp_cache_get -- ra match with target sp: pc=0x%lx, ra=0x%lx, val=%d\n", wctx->pc, ra, val);
+ return val;
+ }
+ TprintfT (DBG_LT1, "omp_cache_get -- ra mismatch: ra=0x%lx, expected ra=0x%lx, val=%d\n", ra, OmpRAs[ idx2 % OmpValTableSize ], val);
+ goto checkFP;
+ }
+ sp = (unsigned long *) fp;
+ from_fp = 1;
+ }
+
+ uint64_t idx2 = (idx + val) * ROOT_IDX;
+ unsigned long ra = *sp++;
+ if (from_fp)
+ {
+ unsigned long tbgn = wctx->tbgn;
+ unsigned long tend = wctx->tend;
+ if (ra < tbgn || ra >= tend)
+ {
+ sp = (unsigned long *) (OmpCtxs[ idx % OmpValTableSize ].sp);
+ sp--;
+ //if (sp < cur->sp_safe - 16 || (unsigned long)sp >= wctx->sbase - sizeof(*sp)) {
+ // The check above was replaced with the check below,
+ // because we do not know why "- 16" and "- sizeof(*sp)" was used.
+ if (sp < cur->sp_safe || (unsigned long) sp >= wctx->sbase)
+ goto checkFP;
+ else
+ ra = *sp;
+ }
+ }
+ if (OmpRAs[ idx2 % OmpValTableSize ] == ra)
+ {
+ TprintfT (DBG_LT1, "omp_cache_get -- ra match: pc=0x%lx\n", wctx->pc);
+ __collector_memcpy (wctx, &OmpCtxs[ idx % OmpValTableSize ], sizeof (struct WalkContext));
+ return val;
+ }
+ }
+ goto checkFP;
+ }
+ else
+ {
+ CALL_UTIL (memset)(jmp_reg_ctx, 0, MAXJMPREG * sizeof (struct AdvWalkContext *));
+ CALL_UTIL (memset)(jmp_reg_switch_ctx, 0, MAXJMPREG * sizeof (struct AdvWalkContext *));
+ }
+ while (cnt--)
+ {
+ if (nctx == 0 && (num_jmp_reg == expected_num_jmp_reg || jmp_reg_switch_mode == 1))
+ { // no context available, try jmp switch mode
+ int i = 0;
+ if (num_jmp_reg == expected_num_jmp_reg)
+ jmp_reg_switch_mode = 0; // first jmp reg expected, restart switch mode
+ DprintfT (SP_DUMP_UNWIND, "unwind.c: begin switch mode, num_jmp_reg = %d, jmp_reg_switch_backup_ctx=%p, jmp_reg_switch_case=%d, jmp_reg_switch_mode=%d.\n",
+ num_jmp_reg, jmp_reg_switch_backup_ctx, jmp_reg_switch_case, jmp_reg_switch_mode);
+ // the ideal asm of switch is
+ // jmp reg
+ // ...//case 1
+ // ret
+ // ...//case 2
+ // ret
+ // ...//etc
+ if (jmp_reg_switch_mode == 0)
+ {
+ num_jmp_reg_switch = num_jmp_reg; // backup num_jmp_reg
+ jmp_reg_switch_mode = 1; // begin switch mode
+ for (i = 0; i < num_jmp_reg_switch; i++)
+ {
+ if (jmp_reg_switch_ctx[i] == NULL)
+ jmp_reg_switch_ctx[i] = (struct AdvWalkContext*) alloca (sizeof (*jmp_reg_switch_ctx[i]));
+ if (jmp_reg_switch_ctx[i] != NULL)
+ { // backup jmp_reg_ctx
+ __collector_memcpy (jmp_reg_switch_ctx[i], jmp_reg_ctx[i], sizeof (*jmp_reg_switch_ctx[i]));
+ cur_jmp_reg_switch = 0; // reset the current switch table
+ jmp_reg_switch_case = 0; // reset the case number in current switch table
+ }
+ }
+ if (jmp_reg_switch_backup_ctx == NULL)
+ { // only backup when the first jmp *reg is met for restoring later, if switch mode fails to resolve RA
+ jmp_reg_switch_backup_ctx = (struct AdvWalkContext*) alloca (sizeof (*jmp_reg_switch_backup_ctx));
+ if (jmp_reg_switch_backup_ctx != NULL)
+ __collector_memcpy (jmp_reg_switch_backup_ctx, cur, sizeof (*cur));
+ DprintfT (SP_DUMP_UNWIND, "unwind.c: back up context for switch mode.\n");
+ }
+ }
+ if (jmp_reg_switch_mode == 1)
+ { // in the process of trying switch cases
+ if (cur_jmp_reg_switch == num_jmp_reg_switch)
+ {
+ DprintfT (SP_DUMP_UNWIND, "unwind.c: have tried all switch with max_jmp_reg_switch_case for each\n");
+ if (jmp_reg_switch_backup_ctx != NULL)
+ __collector_memcpy (cur, jmp_reg_switch_backup_ctx, sizeof (*cur));
+ int rc = process_return_real (wctx, cur, 0);
+ if (rc == RA_SUCCESS)
+ {
+ if (save_ctx)
+ omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, rc);
+ return rc;
+ }
+ break; // have tried all switch with max_jmp_reg_switch_case for each, goto checkFP
+ }
+ unsigned char *npc = jmp_reg_switch_ctx[cur_jmp_reg_switch]->pc;
+ if (jmp_reg_switch_case == 0)
+ // first switch case
+ npc = check_modrm (npc); // pc next to "jmp reg" instruction
+ else if (jmp_reg_switch_pc != NULL)
+ npc = jmp_reg_switch_pc; // // pc next to "ret" instruction of previous case
+ else
+ {
+ DprintfT (SP_DUMP_UNWIND, "unwind.c: unexpected jum switch mode situation, jmp_reg_switch_case=%d, jmp_reg_switch_pc=%p\n",
+ jmp_reg_switch_case, jmp_reg_switch_pc);
+ break; //goto checkFP
+ }
+ jmp_reg_switch_base = npc;
+ struct AdvWalkContext *new = buf + nctx;
+ nctx += 1;
+ __collector_memcpy (new, jmp_reg_switch_ctx[cur_jmp_reg_switch], sizeof (*new));
+ new->pc = npc;
+ cur = new; /* advance the new context first */
+ jmp_reg_switch_pc = NULL;
+ jmp_reg_switch_case++;
+ if (jmp_reg_switch_case == max_jmp_reg_switch_case)
+ { // done many cases, change to another switch table
+ cur_jmp_reg_switch++;
+ jmp_reg_switch_case = 0;
+ }
+ }
+ num_jmp_reg = 0;
+ }
+ if (jmp_reg_switch_mode == 1)
+ { // when processing switch cases, check pc each time
+ unsigned long tbgn = wctx->tbgn;
+ unsigned long tend = wctx->tend;
+ if ((unsigned long) (cur->pc) < tbgn || (unsigned long) (cur->pc) >= tend)
+ {
+ DprintfT (SP_DUMP_UNWIND, "unwind.c: pc out of range, pc=0x%lx\n", (unsigned long) (cur->pc));
+ break;
+ }
+ if (jmp_reg_switch_base != NULL && cur->pc > jmp_reg_switch_base + max_switch_pc_offset)
+ {
+ DprintfT (SP_DUMP_UNWIND, "unwind.c: limit the walk offset after jmp reg instruction\n");
+ if (jmp_reg_switch_backup_ctx != NULL)
+ __collector_memcpy (cur, jmp_reg_switch_backup_ctx, sizeof (*cur));
+ int rc = process_return_real (wctx, cur, 0);
+ if (rc == RA_SUCCESS)
+ {
+ if (save_ctx)
+ omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, rc);
+ return rc;
+ }
+ break; // limit the walk offset after jmp reg instruction, got checkFP
+ }
+ }
+
+ if (nctx == 0)
+ break;
+// dump_targets (__LINE__, ntrg, targets);
+ while (cur->pc > targets[cur->tidx])
+ cur->tidx += 1;
+ if (cur->pc == targets[cur->tidx])
+ {
+ /* Stop analysis. Delete context. */
+ if (jmp_reg_switch_mode == 0 || cur->pc != jmp_reg_switch_pc_old)
+ {
+ if (jmp_reg_switch_mode == 1 && nctx == 1 && jmp_reg_switch_pc == NULL)
+ {
+ DprintfT (SP_DUMP_UNWIND, "unwind.c:%d old target, cur->pc=%p, jmp_reg_switch_pc=%p, nctx=%d\n",
+ __LINE__, cur->pc, jmp_reg_switch_pc, nctx);
+ jmp_reg_switch_pc = cur->pc; // save cp before delete context, may be used as a start of switch case
+ jmp_reg_switch_pc_old = jmp_reg_switch_pc;
+ }
+ DprintfT (SP_DUMP_UNWIND, "unwind.c:%d delete context, old target.\n", __LINE__);
+ DELETE_CURCTX ();
+ if (cur >= buf + nctx)
+ cur = buf;
+ continue;
+ }
+ if (jmp_reg_switch_mode == 1 && cur->pc == jmp_reg_switch_pc_old)
+ jmp_reg_switch_pc_old = NULL; // reset jmp_reg_switch_pc_old to delete the context later when cur->pc != jmp_reg_switch_pc_old
+ }
+
+ /* let's walk the next x86 instruction */
+ DprintfT (SP_DUMP_UNWIND, "unwind.c:%d cur:%ld pc=0x%lx %02x %02x %02x %02x %02x %02x %02x sp=0x%lx\n",
+ __LINE__, (long) (cur - buf), (unsigned long) cur->pc,
+ (int) cur->pc[0], (int) cur->pc[1], (int) cur->pc[2],
+ (int) cur->pc[3], (int) cur->pc[4], (int) cur->pc[5],
+ (int) cur->pc[6], (unsigned long) cur->sp);
+ int v = 4; /* Operand size */
+ int a = 4; /* Address size */
+ /* int W = 0; REX.W bit */
+#if WSIZE(64)
+ int R = 0; /* REX.R bit */
+#endif
+ int X = 0; /* REX.X bit */
+ int B = 0; /* REX.B bit */
+ /* Check prefixes */
+ int done = 0;
+ while (!done)
+ {
+ opcode = *cur->pc++;
+ switch (opcode)
+ {
+ case 0x66: /* opd size override */
+ v = 2;
+ break;
+ case 0x67: /*addr size override */
+ a = 2;
+ break;
+#if WSIZE(64)
+ case 0x40: /* REX */
+ case 0x41:
+ case 0x42:
+ case 0x43:
+ case 0x44:
+ case 0x45:
+ case 0x46:
+ case 0x47:
+ case 0x48:
+ case 0x49:
+ case 0x4a:
+ case 0x4b:
+ case 0x4c:
+ case 0x4d:
+ case 0x4e:
+ case 0x4f:
+ B = (opcode & 0x1) ? 8 : 0;
+ X = (opcode & 0x2) ? 8 : 0;
+ R = (opcode & 0x4) ? 8 : 0;
+ if (opcode & 0x8) /* 64 bit operand size */
+ v = 8;
+ opcode = *cur->pc++;
+ done = 1;
+ break;
+#endif
+ default:
+ done = 1;
+ break;
+ }
+ }
+ int z = (v == 8) ? 4 : v;
+ switch (opcode)
+ {
+ case 0x0: /* add Eb,Gb */
+ case 0x01: /* add Ev,Gv */
+ case 0x02: /* add Gb,Eb */
+ case 0x03: /* add Gv,Ev */
+ cur->pc = check_modrm (cur->pc);
+ break;
+ case 0x04: /* add %al,Ib */
+ cur->pc += 1;
+ break;
+ case 0x05: /* add %eax,Iz */
+ cur->pc += z;
+ break;
+ case 0x06: /* push es */
+ cur->sp -= 1;
+ break;
+ case 0x07: /* pop es */
+ cur->sp += 1;
+ if (cur->sp - RED_ZONE > cur->sp_safe)
+ cur->sp_safe = cur->sp - RED_ZONE;
+ break;
+ case 0x08: /* or Eb,Gb */
+ case 0x09: /* or Ev,Gv */
+ case 0x0a: /* or Gb,Eb */
+ case 0x0b: /* or Gv,Ev */
+ cur->pc = check_modrm (cur->pc);
+ break;
+ case 0x0c: /* or %al,Ib */
+ cur->pc += 1;
+ break;
+ case 0x0d: /* or %eax,Iz */
+ cur->pc += z;
+ break;
+ case 0x0e: /* push cs */
+ cur->sp -= 1;
+ break;
+ case 0x0f: /* two-byte opcodes */
+ extop = *cur->pc++;
+ switch (extop)
+ { /* RTM or HLE */
+ case 0x01:
+ extop2 = *cur->pc;
+ switch (extop2)
+ {
+ case 0xd5: /* xend */
+ case 0xd6: /* xtest */
+ cur->pc++;
+ break;
+ default:
+ break;
+ }
+ break;
+ case 0x03:
+ cur->pc = check_modrm (cur->pc);
+ break;
+ case 0x0b:
+ DprintfT (SP_DUMP_UNWIND, "unwind.c:%d delete context, undefined instruction. opcode=0x%02x\n",
+ __LINE__, (int) opcode);
+ DELETE_CURCTX ();
+ break;
+ case 0x05: /* syscall */
+ case 0x34: /* sysenter */
+ if (cur->rax == __NR_exit)
+ {
+ DprintfT (SP_DUMP_UNWIND, "unwind.c:%d delete context, opcode=0x%02x\n",
+ __LINE__, (int) opcode);
+ DELETE_CURCTX ();
+ break;
+ }
+ else if (cur->rax == __NR_rt_sigreturn)
+ {
+ if (jmp_reg_switch_mode == 1)
+ {
+ DprintfT (SP_DUMP_UNWIND, "unwind.c:%d give up return address under jmp switch mode, opcode=0x%02x\n",
+ __LINE__, (int) opcode);
+ goto checkFP;
+ }
+ wctx->sp = (unsigned long) cur->sp;
+ if (save_ctx)
+ omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, RA_RT_SIGRETURN);
+ return RA_RT_SIGRETURN;
+ }
+#if WSIZE(32)
+ else if (cur->rax == __NR_sigreturn)
+ {
+ if (jmp_reg_switch_mode == 1)
+ {
+ DprintfT (SP_DUMP_UNWIND, "unwind.c: give up return address under jmp switch mode, opcode = 0x34\n");
+ goto checkFP;
+ }
+ wctx->sp = (unsigned long) cur->sp;
+ if (save_ctx)
+ omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, RA_SIGRETURN);
+ return RA_SIGRETURN;
+ }
+#endif
+ /* Check for Linus' trick in the vsyscall page */
+ while (*cur->pc == 0x90) /* nop */
+ cur->pc++;
+ if (*cur->pc == 0xeb) /* jmp imm8 */
+ cur->pc += 2;
+ break;
+ case 0x0d: /* nop Ev */
+ cur->pc = check_modrm (cur->pc);
+ break;
+ case 0x10: /* xmm Vq,Wq */
+ case 0x11:
+ case 0x12:
+ case 0x13:
+ case 0x14:
+ case 0x15:
+ case 0x16:
+ case 0x17:
+ cur->pc = check_modrm (cur->pc);
+ break;
+ case 0x18: /* prefetch */
+ cur->pc = check_modrm (cur->pc);
+ break;
+ case 0x1E: /* endbr64/endbr32 (f3 0f 1e .. ) is parsing as repz nop edx */
+ cur->pc += 2;
+ break;
+ case 0x1f: /* nop Ev */
+ cur->pc = check_modrm (cur->pc);
+ break;
+ case 0x28: /* xmm Vq,Wq */
+ case 0x29:
+ case 0x2a:
+ case 0x2b:
+ case 0x2c:
+ case 0x2d:
+ case 0x2e:
+ case 0x2f:
+ cur->pc = check_modrm (cur->pc);
+ break;
+ case 0x30: /* wrmsr */
+ case 0x31: /* rdtsc */
+ case 0x32: /* rdmsr */
+ case 0x33: /* rdpmc */
+ break;
+ /* case 0x34: sysenter (see above) */
+ case 0x38: case 0x3a:
+ extop2 = *cur->pc++;
+ cur->pc = check_modrm (cur->pc);
+ // 21275311 Unwind failure in native stack for java application running on jdk8
+ // Three-byte opcodes "66 0f 3a ??" should consume an additional "immediate" byte.
+ if (extop == 0x3a)
+ cur->pc++;
+ break;
+ case 0x40: case 0x41: case 0x42: case 0x43: /* CMOVcc Gv,Ev */
+ case 0x44: case 0x45: case 0x46: case 0x47:
+ case 0x48: case 0x49: case 0x4a: case 0x4b:
+ case 0x4c: case 0x4d: case 0x4e: case 0x4f:
+ cur->pc = check_modrm (cur->pc);
+ break;
+ case 0x50: case 0x51: case 0x52: case 0x53:
+ case 0x54: case 0x55: case 0x56: case 0x57:
+ case 0x58: case 0x59: case 0x5a: case 0x5b:
+ case 0x5c: case 0x5d: case 0x5e: case 0x5f:
+ case 0x60: case 0x61: case 0x62: case 0x63:
+ case 0x64: case 0x65: case 0x66: case 0x67:
+ case 0x68: case 0x69: case 0x6a: case 0x6b:
+ case 0x6c: case 0x6d: case 0x6e: case 0x6f:
+ cur->pc = check_modrm (cur->pc);
+ break;
+ case 0x70: case 0x71: case 0x72: case 0x73:
+ cur->pc = check_modrm (cur->pc) + 1;
+ break;
+ case 0x74: case 0x75: case 0x76:
+ cur->pc = check_modrm (cur->pc);
+ break;
+ case 0x77:
+ break;
+ case 0x7c: case 0x7d: case 0x7e: case 0x7f:
+ cur->pc = check_modrm (cur->pc);
+ break;
+ case 0x80: case 0x81: case 0x82: case 0x83: /* Jcc Jz */
+ case 0x84: case 0x85: case 0x86: case 0x87:
+ case 0x88: case 0x89: case 0x8a: case 0x8b:
+ case 0x8c: case 0x8d: case 0x8e: case 0x8f:
+ immv = read_int (cur->pc, z);
+ cur->pc += z;
+ if (nctx < (jmp_reg_switch_mode ? MAXJMPREGCTX : MAXCTX))
+ {
+ int tidx = 0;
+ unsigned char *npc = cur->pc + immv;
+ if ((unsigned long) npc < wctx->tbgn || (unsigned long) npc >= wctx->tend)
+ {
+ DprintfT (SP_DUMP_UNWIND, "unwind.c:%d delete context, opcode=0x%02x\n",
+ __LINE__, (int) opcode);
+ DELETE_CURCTX ();
+ break;
+ }
+ if (is_after_ret (npc))
+ break;
+ while (npc > targets[tidx])
+ tidx += 1;
+ if (npc != targets[tidx])
+ {
+ if (ntrg < MAXTRGTS)
+ {
+ for (int i = 0; i < nctx; i++)
+ if (buf[i].tidx >= tidx)
+ buf[i].tidx++;
+
+ /* insert a new target */
+ for (int i = ntrg; i > tidx; i--)
+ targets[i] = targets[i - 1];
+ ntrg += 1;
+ targets[tidx++] = npc;
+ }
+ else
+ DprintfT (SP_DUMP_UNWIND, "unwind.c:%d ntrg=max(%d)\n",
+ __LINE__, ntrg);
+ struct AdvWalkContext *new = buf + nctx;
+ nctx += 1;
+ __collector_memcpy (new, cur, sizeof (*new));
+ new->pc = npc;
+ new->tidx = tidx;
+ cur = new; /* advance the new context first */
+ continue;
+ }
+ }
+ else
+ DprintfT (SP_DUMP_UNWIND, "unwind.c:%d nctx=max(%d)\n",
+ __LINE__, ntrg);
+ break;
+ case 0x90: case 0x91: case 0x92: case 0x93: /* setcc Eb */
+ case 0x94: case 0x95: case 0x96: case 0x97:
+ case 0x98: case 0x99: case 0x9a: case 0x9b:
+ case 0x9c: case 0x9d: case 0x9e: case 0x9f:
+ cur->pc = check_modrm (cur->pc);
+ break;
+ case 0xa0: /* push fs */
+ cur->sp -= 1;
+ break;
+ case 0xa1: /* pop fs */
+ cur->sp += 1;
+ if (cur->sp - RED_ZONE > cur->sp_safe)
+ cur->sp_safe = cur->sp - RED_ZONE;
+ break;
+ case 0xa2: /* cpuid */
+ break;
+ case 0xa3: /* bt Ev,Gv */
+ cur->pc = check_modrm (cur->pc);
+ break;
+ case 0xa4: /* shld Ev,Gv,Ib */
+ cur->pc = check_modrm (cur->pc);
+ cur->pc += 1;
+ break;
+ case 0xa5: /* shld Ev,Gv,%cl */
+ cur->pc = check_modrm (cur->pc);
+ break;
+ case 0xa8: /* push gs */
+ cur->sp -= 1;
+ break;
+ case 0xa9: /* pop gs */
+ cur->sp += 1;
+ if (cur->sp - RED_ZONE > cur->sp_safe)
+ cur->sp_safe = cur->sp - RED_ZONE;
+ break;
+ case 0xaa: /* rsm */
+ break;
+ case 0xab: /* bts Ev,Gv */
+ cur->pc = check_modrm (cur->pc);
+ break;
+ case 0xac: /* shrd Ev,Gv,Ib */
+ cur->pc = check_modrm (cur->pc);
+ cur->pc += 1;
+ break;
+ case 0xad: /* shrd Ev,Gv,%cl */
+ cur->pc = check_modrm (cur->pc);
+ break;
+ case 0xae: /* group15 */
+ cur->pc = check_modrm (cur->pc);
+ break;
+ case 0xaf: /* imul Gv,Ev */
+ cur->pc = check_modrm (cur->pc);
+ break;
+ case 0xb1: /* cmpxchg Ev,Gv */
+ cur->pc = check_modrm (cur->pc);
+ break;
+ case 0xb3:
+ case 0xb6: /* movzx Gv,Eb */
+ case 0xb7: /* movzx Gv,Ew */
+ cur->pc = check_modrm (cur->pc);
+ break;
+ case 0xba: /* group8 Ev,Ib */
+ cur->pc = check_modrm (cur->pc);
+ cur->pc += 1;
+ break;
+ case 0xbb: /* btc Ev,Gv */
+ case 0xbc: /* bsf Gv,Ev */
+ case 0xbd: /* bsr Gv,Ev */
+ cur->pc = check_modrm (cur->pc);
+ break;
+ case 0xbe: /* movsx Gv,Eb */
+ case 0xbf: /* movsx Gv,Ew */
+ cur->pc = check_modrm (cur->pc);
+ break;
+ case 0xc0: /* xadd Eb,Gb */
+ case 0xc1: /* xadd Ev,Gv */
+ cur->pc = check_modrm (cur->pc);
+ break;
+ case 0xc2: /* cmpps V,W,Ib */
+ cur->pc = check_modrm (cur->pc);
+ cur->pc += 1;
+ break;
+ case 0xc3: /* movnti M,G */
+ cur->pc = check_modrm (cur->pc);
+ break;
+ case 0xc6: /* shufps V,W,Ib */
+ cur->pc = check_modrm (cur->pc);
+ cur->pc += 1;
+ break;
+ case 0xc7: /* RDRAND */
+ cur->pc = check_modrm (cur->pc);
+ break;
+ case 0xc8: case 0xc9: case 0xca: case 0xcb: /* bswap */
+ case 0xcc: case 0xcd: case 0xce: case 0xcf:
+ break;
+ case 0xd0: case 0xd1: case 0xd2: case 0xd3:
+ case 0xd4: case 0xd5: case 0xd6: case 0xd7:
+ case 0xd8: case 0xd9: case 0xda: case 0xdb:
+ case 0xdc: case 0xdd: case 0xde: case 0xdf:
+ case 0xe0: case 0xe1: case 0xe2: case 0xe3:
+ case 0xe4: case 0xe5: case 0xe6: case 0xe7:
+ case 0xe8: case 0xe9: case 0xea: case 0xeb:
+ case 0xec: case 0xed: case 0xee: case 0xef:
+ case 0xf0: case 0xf1: case 0xf2: case 0xf3:
+ case 0xf4: case 0xf5: case 0xf6: case 0xf7:
+ case 0xf8: case 0xf9: case 0xfa: case 0xfb:
+ case 0xfc: case 0xfd: case 0xfe: case 0xff:
+ cur->pc = check_modrm (cur->pc);
+ break;
+ default:
+ if (jmp_reg_switch_mode == 1 && extop == 0x0b)
+ DprintfT (SP_DUMP_UNWIND, "unwind.c:%d invalid opcode ub2: 0x0f %x jmp_reg_switch_mode=%d\n",
+ __LINE__, (int) extop, jmp_reg_switch_mode);
+ else
+ {
+ DprintfT (SP_DUMP_UNWIND, "unwind.c:%d unknown opcode: 0x0f %x jmp_reg_switch_mode=%d\n",
+ __LINE__, (int) extop, jmp_reg_switch_mode);
+ DELETE_CURCTX ();
+ }
+ break;
+ }
+ break;
+ case 0x10: /* adc Eb,Gb */
+ case 0x11: /* adc Ev,Gv */
+ case 0x12: /* adc Gb,Eb */
+ case 0x13: /* adc Gv,Ev */
+ cur->pc = check_modrm (cur->pc);
+ break;
+ case 0x14: /* adc %al,Ib */
+ cur->pc += 1;
+ break;
+ case 0x15: /* adc %eax,Iz */
+ cur->pc += z;
+ break;
+ case 0x16: /* push ss */
+ cur->sp -= 1;
+ break;
+ case 0x17: /* pop ss */
+ cur->sp += 1;
+ if (cur->sp - RED_ZONE > cur->sp_safe)
+ cur->sp_safe = cur->sp - RED_ZONE;
+ break;
+ case 0x18: /* sbb Eb,Gb */
+ case 0x19: /* sbb Ev,Gv */
+ case 0x1a: /* sbb Gb,Eb */
+ case 0x1b: /* sbb Gv,Ev */
+ cur->pc = check_modrm (cur->pc);
+ break;
+ case 0x1c: /* sbb %al,Ib */
+ cur->pc += 1;
+ break;
+ case 0x1d: /* sbb %eax,Iz */
+ cur->pc += z;
+ break;
+ case 0x1e: /* push ds */
+ cur->sp -= 1;
+ break;
+ case 0x1f: /* pop ds */
+ cur->sp += 1;
+ if (cur->sp - RED_ZONE > cur->sp_safe)
+ cur->sp_safe = cur->sp - RED_ZONE;
+ break;
+ case 0x20: /* and Eb,Gb */
+ case 0x21: /* and Ev,Gv */
+ case 0x22: /* and Gb,Eb */
+ case 0x23: /* and Gv,Ev */
+ cur->pc = check_modrm (cur->pc);
+ break;
+ case 0x24: /* and %al,Ib */
+ cur->pc += 1;
+ break;
+ case 0x25: /* and %eax,Iz */
+ cur->pc += z;
+ break;
+ case 0x26: /* seg=es prefix */
+ break;
+ case 0x27: /* daa */
+ break;
+ case 0x28: /* sub Eb,Gb */
+ case 0x29: /* sub Ev,Gv */
+ case 0x2a: /* sub Gb,Eb */
+ case 0x2b: /* sub Gv,Ev */
+ cur->pc = check_modrm (cur->pc);
+ break;
+ case 0x2c: /* sub %al,Ib */
+ cur->pc += 1;
+ break;
+ case 0x2d: /* sub %eax,Iz */
+ cur->pc += z;
+ break;
+ case 0x2e: /* seg=cs prefix */
+ break;
+ case 0x2f: /* das */
+ break;
+ case 0x30: /* xor Eb,Gb */
+ case 0x31: /* xor Ev,Gv */
+ case 0x32: /* xor Gb,Eb */
+ case 0x33: /* xor Gv,Ev */
+ cur->pc = check_modrm (cur->pc);
+ break;
+ case 0x34: /* xor %al,Ib */
+ cur->pc += 1;
+ break;
+ case 0x35: /* xor %eax,Iz */
+ cur->pc += z;
+ break;
+ case 0x36: /* seg=ss prefix */
+ break;
+ case 0x37: /* aaa */
+ break;
+ case 0x38: /* cmp Eb,Gb */
+ case 0x39: /* cmp Ev,Gv */
+ case 0x3a: /* cmp Gb,Eb */
+ case 0x3b: /* cmp Gv,Ev */
+ cur->pc = check_modrm (cur->pc);
+ break;
+ case 0x3c: /* cmp %al,Ib */
+ cur->pc += 1;
+ break;
+ case 0x3d: /* cmp %eax,Iz */
+ cur->pc += z;
+ break;
+ case 0x3e: /* seg=ds prefix */
+ break;
+ case 0x3f: /* aas */
+ break;
+#if WSIZE(32)
+ case 0x40: /* inc %eax */
+ case 0x41: /* inc %ecx */
+ case 0x42: /* inc %edx */
+ case 0x43: /* inc %ebx */
+ break;
+ case 0x44: /* inc %esp */
+ /* Can't be a valid stack pointer - delete context */
+ DprintfT (SP_DUMP_UNWIND, "unwind.c:%d delete context, opcode 0x44.\n", __LINE__);
+ DELETE_CURCTX ();
+ break;
+ case 0x45: /* inc %ebp */
+ case 0x46: /* inc %esi */
+ case 0x47: /* inc %edi */
+ case 0x48: /* dec %eax */
+ case 0x49: /* dec %ecx */
+ case 0x4a: /* dec %edx */
+ case 0x4b: /* dec %ebx */
+ break;
+ case 0x4c: /* dec %esp */
+ /* Can't be a valid stack pointer - delete context */
+ DprintfT (SP_DUMP_UNWIND, "unwind.c:%d delete context, opcode 0x4c.\n", __LINE__);
+ DELETE_CURCTX ();
+ break;
+ case 0x4d: /* dec %ebp */
+ case 0x4e: /* dec %esi */
+ case 0x4f: /* dec %edi */
+ break;
+#endif
+ case 0x50: /* push %eax */
+ case 0x51: /* push %ecx */
+ case 0x52: /* push %edx */
+ case 0x53: /* push %ebx */
+ case 0x54: /* push %esp */
+ case 0x55: /* push %ebp */
+ case 0x56: /* push %esi */
+ case 0x57: /* push %edi */
+ cur->sp -= 1;
+ reg = OPC_REG (opcode);
+ if (reg == RBP)
+ {
+#if 0
+ /* Don't do this check yet. Affects tail calls. */
+ /* avoid other function's prologue */
+ if ((cur->pc[0] == 0x89 && cur->pc[1] == 0xe5) ||
+ (cur->pc[0] == 0x8b && cur->pc[1] == 0xec))
+ {
+ /* mov %esp,%ebp */
+ DELETE_CURCTX ();
+ break;
+ }
+#endif
+ if (cur->fp_loc == NULL)
+ {
+ cur->fp_loc = cur->sp;
+ cur->fp_sav = cur->fp;
+ }
+ }
+ break;
+ case 0x58: /* pop %eax */
+ case 0x59: /* pop %ecx */
+ case 0x5a: /* pop %edx */
+ case 0x5b: /* pop %ebx */
+ case 0x5c: /* pop %esp */
+ case 0x5d: /* pop %ebp */
+ case 0x5e: /* pop %esi */
+ case 0x5f: /* pop %edi */
+ reg = OPC_REG (opcode);
+ cur->regs[reg] = 0;
+ if (isInside ((unsigned long) cur->sp, (unsigned long) cur->sp_safe, wctx->sbase))
+ cur->regs[reg] = *cur->sp;
+ DprintfT (SP_DUMP_UNWIND, "stack_unwind:%d cur->regs[%d]=0x%lx\n",
+ __LINE__, reg, (unsigned long) cur->regs[reg]);
+ if (reg == RDX)
+ {
+ if (cur->sp >= cur->sp_safe &&
+ (unsigned long) cur->sp < wctx->sbase)
+ cur->rdx = *cur->sp;
+ }
+ else if (reg == RBP)
+ {
+ if (cur->fp_loc == cur->sp)
+ {
+ cur->fp = cur->fp_sav;
+ cur->fp_loc = NULL;
+ }
+ else if (cur->sp >= cur->sp_safe &&
+ (unsigned long) cur->sp < wctx->sbase)
+ cur->fp = (unsigned long*) (*cur->sp);
+ }
+ else if (reg == RSP)
+ {
+ /* f.e. JVM I2CAdapter */
+ if (cur->sp >= cur->sp_safe && (unsigned long) cur->sp < wctx->sbase)
+ {
+ unsigned long *nsp = (unsigned long*) (*cur->sp);
+ if (nsp >= cur->sp && nsp <= cur->fp)
+ {
+ cur->sp = nsp;
+ }
+ else
+ {
+ DprintfT (SP_DUMP_UNWIND, "stack_unwind%d give up return address, opcode=0x%02x\n",
+ __LINE__, opcode);
+ goto checkFP;
+ }
+ }
+ else
+ {
+ DprintfT (SP_DUMP_UNWIND, "unwind.c:%d give up return address, opcode=0x%02x\n",
+ __LINE__, opcode);
+ goto checkFP;
+ }
+ break;
+ }
+ cur->sp += 1;
+ if (cur->sp - RED_ZONE > cur->sp_safe)
+ {
+ cur->sp_safe = cur->sp - RED_ZONE;
+ }
+ break;
+ case 0x60: /* pusha(d) */
+ cur->sp -= 8;
+ break;
+ case 0x61: /* popa(d) */
+ cur->sp += 8;
+ if (cur->sp - RED_ZONE > cur->sp_safe)
+ cur->sp_safe = cur->sp - RED_ZONE;
+ break;
+ case 0x62: /* group AVX, 4-bytes EVEX prefix */
+ {
+ unsigned char *pc = cur->pc - 1; // points to the beginning of the instruction
+ int len = parse_x86_AVX_instruction (pc);
+ if (len < 4)
+ {
+ DELETE_CURCTX ();
+ }
+ else
+ {
+ pc += len;
+ cur->pc = pc;
+ }
+ }
+ break;
+ case 0x63: /* arpl Ew,Gw (32) movsxd Gv,Ev (64)*/
+ cur->pc = check_modrm (cur->pc);
+ break;
+ case 0x64: /* seg=fs prefix */
+ case 0x65: /* seg=gs prefix */
+ break;
+ case 0x66: /* opd size override */
+ case 0x67: /* addr size override */
+ break;
+ case 0x68: /* push Iz */
+ cur->sp = (unsigned long*) ((long) cur->sp - z);
+ cur->pc += z;
+ break;
+ case 0x69: /* imul Gv,Ev,Iz */
+ cur->pc = check_modrm (cur->pc);
+ cur->pc += z;
+ break;
+ case 0x6a: /* push Ib */
+ cur->sp = (unsigned long*) ((long) cur->sp - v);
+ cur->pc += 1;
+ break;
+ case 0x6b: /* imul Gv,Ev,Ib */
+ cur->pc = check_modrm (cur->pc);
+ cur->pc += 1;
+ break;
+ case 0x6c: case 0x6d: case 0x6e: case 0x6f:
+ cur->pc = check_modrm (cur->pc);
+ break;
+ case 0x70: /* jo Jb */
+ case 0x71: /* jno Jb */
+ case 0x72: /* jb Jb */
+ case 0x73: /* jnb Jb */
+ case 0x74: /* jz Jb */
+ case 0x75: /* jnz Jb */
+ case 0x76: /* jna Jb */
+ case 0x77: /* ja Jb */
+ case 0x78: /* js Jb */
+ case 0x79: /* jns Jb */
+ case 0x7a: /* jp Jb */
+ case 0x7b: /* jnp Jb */
+ case 0x7c: /* jl Jb */
+ case 0x7d: /* jge Jb */
+ case 0x7e: /* jle Jb */
+ case 0x7f: /* jg Jb */
+ imm8 = *(char*) cur->pc++;
+ if (nctx < (jmp_reg_switch_mode ? MAXJMPREGCTX : MAXCTX))
+ {
+ int tidx = 0;
+ unsigned char *npc = cur->pc + imm8;
+ if (is_after_ret (npc))
+ break;
+ while (npc > targets[tidx])
+ tidx += 1;
+ if (npc != targets[tidx])
+ {
+ if (ntrg < MAXTRGTS)
+ {
+ for (int i = 0; i < nctx; i++)
+ if (buf[i].tidx >= tidx)
+ buf[i].tidx++;
+
+ /* insert a new target */
+ for (int i = ntrg; i > tidx; i--)
+ targets[i] = targets[i - 1];
+ ntrg += 1;
+ targets[tidx++] = npc;
+ }
+ else
+ DprintfT (SP_DUMP_UNWIND, "unwind.c:%d ntrg(%d)=max\n", __LINE__, ntrg);
+ struct AdvWalkContext *new = buf + nctx;
+ nctx += 1;
+ __collector_memcpy (new, cur, sizeof (*new));
+ new->pc = npc;
+ new->tidx = tidx;
+ cur = new; /* advance the new context first */
+ continue;
+ }
+ }
+ else
+ DprintfT (SP_DUMP_UNWIND, "unwind.c:%d nctx(%d)=max\n", __LINE__, nctx);
+ break;
+ case 0x80: /* group1 Eb,Ib */
+ cur->pc = check_modrm (cur->pc);
+ cur->pc += 1;
+ break;
+ case 0x81: /* group1 Ev,Iz */
+ modrm = *cur->pc;
+ if (MRM_MOD (modrm) == 0xc0 && MRM_REGS (modrm) == RSP)
+ {
+ int immz = read_int (cur->pc + 1, z);
+ extop = MRM_EXT (modrm);
+ if (extop == 0) /* add imm32,%esp */
+ cur->sp = (unsigned long*) ((long) cur->sp + immz);
+ else if (extop == 4) /* and imm32,%esp */
+ cur->sp = (unsigned long*) ((long) cur->sp & immz);
+ else if (extop == 5) /* sub imm32,%esp */
+ cur->sp = (unsigned long*) ((long) cur->sp - immz);
+ if (cur->sp - RED_ZONE > cur->sp_safe)
+ cur->sp_safe = cur->sp - RED_ZONE;
+ }
+ cur->pc = check_modrm (cur->pc);
+ cur->pc += z;
+ break;
+ case 0x82: /* group1 Eb,Ib */
+ cur->pc = check_modrm (cur->pc);
+ cur->pc += 1;
+ break;
+ case 0x83: /* group1 Ev,Ib */
+ modrm = *cur->pc;
+ if (MRM_MOD (modrm) == 0xc0 && MRM_REGS (modrm) == RSP)
+ {
+ imm8 = (char) cur->pc[1]; /* sign extension */
+ extop = MRM_EXT (modrm);
+ if (extop == 0) /* add imm8,%esp */
+ cur->sp = (unsigned long*) ((long) cur->sp + imm8);
+ else if (extop == 4) /* and imm8,%esp */
+ cur->sp = (unsigned long*) ((long) cur->sp & imm8);
+ else if (extop == 5) /* sub imm8,%esp */
+ cur->sp = (unsigned long*) ((long) cur->sp - imm8);
+ if (cur->sp - RED_ZONE > cur->sp_safe)
+ cur->sp_safe = cur->sp - RED_ZONE;
+ }
+ cur->pc = check_modrm (cur->pc);
+ cur->pc += 1;
+ break;
+ case 0x84: /* test Eb,Gb */
+ case 0x85: /* test Ev,Gv */
+ case 0x86: /* xchg Eb,Gb */
+ case 0x87: /* xchg Ev,Gv */
+ cur->pc = check_modrm (cur->pc);
+ break;
+ case 0x88: /* mov Eb,Gb */
+ cur->pc = check_modrm (cur->pc);
+ break;
+ case 0x89: /* mov Ev,Gv */
+ modrm = *cur->pc;
+ if (MRM_MOD (modrm) == 0xc0)
+ {
+ if (MRM_REGS (modrm) == RBP && MRM_REGD (modrm) == RSP)
+ /* movl %esp,%ebp */
+ cur->fp = cur->sp;
+ else if (MRM_REGS (modrm) == RSP && MRM_REGD (modrm) == RBP)
+ { /* mov %ebp,%esp */
+ cur->sp = cur->fp;
+ if (cur->sp - RED_ZONE > cur->sp_safe)
+ cur->sp_safe = cur->sp - RED_ZONE;
+ if (wctx->fp == (unsigned long) cur->sp)
+ cur->cval = RA_FROMFP;
+ }
+ }
+ else if (MRM_MOD (modrm) == 0x80)
+ {
+ if (MRM_REGS (modrm) == RSP && MRM_REGD (modrm) == RBP)
+ {
+ if (cur->pc[1] == 0x24)
+ { /* mov %ebp,disp32(%esp) - JVM */
+ immv = read_int (cur->pc + 2, 4);
+ cur->fp_loc = (unsigned long*) ((char*) cur->sp + immv);
+ cur->fp_sav = cur->fp;
+ }
+ }
+ }
+ else if (MRM_MOD (modrm) == 0x40)
+ {
+ if (MRM_REGS (modrm) == RSP && MRM_REGD (modrm) == RDX)
+ {
+ if (cur->pc[1] == 0x24 && cur->pc[2] == 0x0)
+ { /* movl %edx,0(%esp) */
+ cur->ra_loc = cur->sp;
+ cur->ra_sav = cur->rdx;
+ }
+ }
+ else if (MRM_REGS (modrm) == RSP && MRM_REGD (modrm) == RBP)
+ {
+ if (cur->pc[1] == 0x24)
+ { /* mov %ebp,disp8(%esp) - JVM */
+ imm8 = ((char*) (cur->pc))[2];
+ cur->fp_loc = (unsigned long*) ((char*) cur->sp + imm8);
+ cur->fp_sav = cur->fp;
+ }
+ }
+ }
+ else if (MRM_MOD (modrm) == 0x0)
+ {
+ if (MRM_REGS (modrm) == RSP && MRM_REGD (modrm) == RBP)
+ {
+ if (cur->pc[1] == 0x24)
+ { /* mov %ebp,(%esp) */
+ cur->fp_loc = cur->sp;
+ cur->fp_sav = cur->fp;
+ }
+ }
+ else if (MRM_REGS (modrm) == RSP && MRM_REGD (modrm) == RDX)
+ {
+ if (cur->pc[1] == 0x24)
+ { /* movl %edx,(%esp) */
+ cur->ra_loc = cur->sp;
+ cur->ra_sav = cur->rdx;
+ }
+ }
+ }
+ cur->pc = check_modrm (cur->pc);
+ break;
+ case 0x8a: /* mov Gb,Eb */
+ cur->pc = check_modrm (cur->pc);
+ break;
+ case 0x8b: /* mov Gv,Ev */
+ modrm = *cur->pc;
+ if (MRM_MOD (modrm) == 0xc0)
+ {
+ if (MRM_REGS (modrm) == RSP && MRM_REGD (modrm) == RBP)
+ /* mov %esp,%ebp */
+ cur->fp = cur->sp;
+ else if (MRM_REGS (modrm) == RBP && MRM_REGD (modrm) == RSP)
+ { /* mov %ebp,%esp */
+ cur->sp = cur->fp;
+ if (cur->sp - RED_ZONE > cur->sp_safe)
+ cur->sp_safe = cur->sp - RED_ZONE;
+ if (wctx->fp == (unsigned long) cur->sp)
+ cur->cval = RA_FROMFP;
+ }
+ }
+ else if (MRM_MOD (modrm) == 0x80)
+ {
+ if (MRM_REGS (modrm) == RSP && MRM_REGD (modrm) == RBP)
+ {
+ if (cur->pc[1] == 0x24)
+ { /* mov disp32(%esp),%ebp */
+ immv = read_int (cur->pc + 2, 4);
+ unsigned long *ptr = (unsigned long*) ((char*) cur->sp + immv);
+ if (cur->fp_loc == ptr)
+ {
+ cur->fp = cur->fp_sav;
+ cur->fp_loc = NULL;
+ }
+ else if (ptr >= cur->sp_safe && (unsigned long) ptr < wctx->sbase)
+ cur->fp = (unsigned long*) (*ptr);
+ }
+ }
+ }
+ else if (MRM_MOD (modrm) == 0x40)
+ {
+ if (MRM_REGS (modrm) == RSP && MRM_REGD (modrm) == RBP)
+ {
+ if (cur->pc[1] == 0x24)
+ { /* mov disp8(%esp),%ebp - JVM */
+ imm8 = ((char*) (cur->pc))[2];
+ unsigned long *ptr = (unsigned long*) ((char*) cur->sp + imm8);
+ if (cur->fp_loc == ptr)
+ {
+ cur->fp = cur->fp_sav;
+ cur->fp_loc = NULL;
+ }
+ else if (ptr >= cur->sp_safe && (unsigned long) ptr < wctx->sbase)
+ cur->fp = (unsigned long*) (*ptr);
+ }
+ }
+ }
+ else if (MRM_MOD (modrm) == 0x0)
+ {
+ if (MRM_REGS (modrm) == RSP && MRM_REGD (modrm) == RBP)
+ {
+ if (cur->pc[1] == 0x24)
+ { /* mov (%esp),%ebp */
+ if (cur->fp_loc == cur->sp)
+ {
+ cur->fp = cur->fp_sav;
+ cur->fp_loc = NULL;
+ }
+ else if (cur->sp >= cur->sp_safe &&
+ (unsigned long) cur->sp < wctx->sbase)
+ cur->fp = (unsigned long*) *cur->sp;
+ }
+ }
+ }
+ cur->pc = check_modrm (cur->pc);
+ break;
+ case 0x8c: /* mov Mw,Sw */
+ cur->pc = check_modrm (cur->pc);
+ break;
+ case 0x8d: /* lea Gv,M */
+ modrm = *cur->pc;
+ if (MRM_REGD (modrm) == RSP)
+ {
+ unsigned char *pc = cur->pc;
+ // Mez: need to use always regs[RSP/RBP] instead cur->sp(or fp):
+ cur->regs[RSP] = (unsigned long) cur->sp;
+ cur->regs[RBP] = (unsigned long) cur->fp;
+ cur->pc++;
+ int mod = (modrm >> 6) & 3;
+ int r_m = modrm & 7;
+ long val = 0;
+ int undefRez = 0;
+ if (mod == 0x3)
+ val = getRegVal (cur, MRM_REGS (modrm), &undefRez);
+ else if (r_m == 4)
+ { // SP or R12. Decode SIB-byte.
+ int sib = *cur->pc++;
+ int scale = 1 << (sib >> 6);
+ int index = X | ((sib >> 3) & 7);
+ int base = B | (sib & 7);
+ if (mod == 0)
+ {
+ if ((base & 7) == 5)
+ { // BP or R13
+ if (index != 4) // SP
+ val += getRegVal (cur, index, &undefRez) * scale;
+ val += read_int (cur->pc, 4);
+ cur->pc += 4;
+ }
+ else
+ {
+ val += getRegVal (cur, base, &undefRez);
+ if (index != 4) // SP
+ val += getRegVal (cur, index, &undefRez) * scale;
+ }
+ }
+ else
+ {
+ val += getRegVal (cur, base, &undefRez);
+ if (index != 4) // SP
+ val += getRegVal (cur, index, &undefRez) * scale;
+ if (mod == 1)
+ {
+ val += read_int (cur->pc, 1);
+ cur->pc++;
+ }
+ else
+ { // mod == 2
+ val += read_int (cur->pc, 4);
+ cur->pc += 4;
+ }
+ }
+ }
+ else if (mod == 0)
+ {
+ if (r_m == 5)
+ { // BP or R13
+ val += read_int (cur->pc, 4);
+ cur->pc += 4;
+ }
+ else
+ val += getRegVal (cur, MRM_REGS (modrm), &undefRez);
+ }
+ else
+ { // mod == 1 || mod == 2
+ val += getRegVal (cur, MRM_REGS (modrm), &undefRez);
+ if (mod == 1)
+ {
+ val += read_int (cur->pc, 1);
+ cur->pc++;
+ }
+ else
+ { // mod == 2
+ val += read_int (cur->pc, 4);
+ cur->pc += 4;
+ }
+ }
+ if (undefRez)
+ {
+ DprintfT (SP_DUMP_UNWIND, "stack_unwind%d cannot calculate RSP. cur->pc=0x%lx val=0x%lx\n",
+ __LINE__, (unsigned long) cur->pc, (unsigned long) val);
+ goto checkFP;
+ }
+ cur->regs[MRM_REGD (modrm)] = val;
+ DprintfT (SP_DUMP_UNWIND, "stack_unwind%d cur->pc=0x%lx val=0x%lx wctx->sp=0x%lx wctx->sbase=0x%lx\n",
+ __LINE__, (unsigned long) cur->pc, (unsigned long) val,
+ (unsigned long) wctx->sp, (unsigned long) wctx->sbase);
+ if (cur->pc != check_modrm (pc))
+ DprintfT (SP_DUMP_UNWIND, "stack_unwind%d ERROR: cur->pc=0x%lx != check_modrm(0x%lx)=0x%lx\n",
+ __LINE__, (unsigned long) cur->pc, (unsigned long) pc,
+ (unsigned long) check_modrm (pc));
+ if (MRM_REGD (modrm) == RSP)
+ {
+ if (!isInside ((unsigned long) val, wctx->sp, wctx->sbase))
+ {
+ DprintfT (SP_DUMP_UNWIND, "stack_unwind%d cannot calculate RSP. cur->pc=0x%lx opcode=0x%02x val=0x%lx wctx->sp=0x%lx wctx->sbase=0x%lx\n",
+ __LINE__, (unsigned long) cur->pc, opcode, (unsigned long) val,
+ (unsigned long) wctx->sp, (unsigned long) wctx->sbase);
+ goto checkFP;
+ }
+ cur->sp = (unsigned long *) val;
+ if (cur->sp - RED_ZONE > cur->sp_safe)
+ cur->sp_safe = cur->sp - RED_ZONE;
+ }
+ }
+ else
+ cur->pc = check_modrm (cur->pc);
+ break;
+ case 0x8e: /* mov Sw,Ew */
+ cur->pc = check_modrm (cur->pc);
+ break;
+ case 0x8f: /* pop Ev */
+ cur->pc = check_modrm (cur->pc);
+ cur->sp += 1;
+ if (cur->sp - RED_ZONE > cur->sp_safe)
+ cur->sp_safe = cur->sp - RED_ZONE;
+ break;
+ case 0x90: /* nop */
+ break;
+ case 0x91: /* xchg %eax,%ecx */
+ case 0x92: /* xchg %eax,%edx */
+ case 0x93: /* xchg %eax,%ebx */
+ case 0x94: /* xchg %eax,%esp XXXX */
+ case 0x95: /* xchg %eax,%ebp XXXX */
+ case 0x96: /* xchg %eax,%esi */
+ case 0x97: /* xchg %eax,%edi */
+ break;
+ case 0x98: /* cbw/cwde */
+ case 0x99: /* cwd/cwq */
+ break;
+ case 0x9a: /* callf Ap */
+ if (jmp_reg_switch_mode == 1)
+ {
+ struct AdvWalkContext* tmpctx = (struct AdvWalkContext *) alloca (sizeof (*cur));
+ __collector_memcpy (tmpctx, cur, sizeof (*cur));
+ int rc = process_return (wctx, tmpctx);
+ if (rc != RA_FAILURE)
+ {
+ if (save_ctx)
+ omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, rc);
+ return rc;
+ }
+ }
+ cur->pc += 2 + a;
+ break;
+ case 0x9b: /* fwait */
+ case 0x9c: /* pushf Fv */
+ case 0x9d: /* popf Fv */
+ case 0x9e: /* sahf */
+ case 0x9f: /* lahf */
+ break;
+ case 0xa0: /* mov al,Ob */
+ case 0xa1: /* mov eax,Ov */
+ case 0xa2: /* mov Ob,al */
+ case 0xa3: /* mov Ov,eax */
+ cur->pc += a;
+ break;
+ case 0xa4: /* movsb Yb,Xb */
+ case 0xa5: /* movsd Yv,Xv */
+ case 0xa6: /* cmpsb Yb,Xb */
+ case 0xa7: /* cmpsd Xv,Yv */
+ break;
+ case 0xa8: /* test al,Ib */
+ cur->pc += 1;
+ break;
+ case 0xa9: /* test eax,Iz */
+ cur->pc += z;
+ break;
+ case 0xaa: /* stosb Yb,%al */
+ case 0xab: /* stosd Yv,%eax */
+ case 0xac: /* lodsb %al,Xb */
+ case 0xad: /* lodsd %eax,Xv */
+ case 0xae: /* scasb %al,Yb */
+ case 0xaf: /* scasd %eax,Yv */
+ break;
+ case 0xb0: /* mov %al,Ib */
+ case 0xb1: /* mov %cl,Ib */
+ case 0xb2: /* mov %dl,Ib */
+ case 0xb3: /* mov %bl,Ib */
+ case 0xb4: /* mov %ah,Ib */
+ case 0xb5: /* mov %ch,Ib */
+ case 0xb6: /* mov %dh,Ib */
+ case 0xb7: /* mov %bh,Ib */
+ cur->pc += 1;
+ break;
+ case 0xb8: /* mov Iv,%eax */
+ case 0xb9: /* mov Iv,%ecx */
+ case 0xba: /* mov Iv,%edx */
+ case 0xbb: /* mov Iv,%ebx */
+ case 0xbc: /* mov Iv,%esp */
+ case 0xbd: /* mov Iv,%rbp */
+ case 0xbe: /* mov Iv,%esi */
+ case 0xbf: /* mov Iv,%edi */
+ reg = OPC_REG (opcode);
+ if (reg == RAX)
+ cur->rax = read_int (cur->pc, v);
+ cur->pc += v;
+ break;
+ case 0xc0: /* group2 Eb,Ib */
+ case 0xc1: /* group2 Ev,Ib */
+ cur->pc = check_modrm (cur->pc) + 1;
+ break;
+ case 0xc2: /* ret Iw */
+ /* In the dynamic linker we may see that
+ * the actual return address is at sp+immv,
+ * while sp points to the resolved address.
+ */
+ {
+ immv = read_int (cur->pc, 2);
+ int rc = process_return (wctx, cur);
+ if (rc != RA_FAILURE)
+ {
+ if (jmp_reg_switch_mode == 1)
+ {
+ DprintfT (SP_DUMP_UNWIND, "stack_unwind%d give up return address under jmp switch mode, opcode = 0xc2\n", __LINE__);
+ goto checkFP;
+ }
+ wctx->sp += immv;
+ if (save_ctx)
+ omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, rc);
+ return rc;
+ }
+ DprintfT (SP_DUMP_UNWIND, "unwind.c:%d delete context, opcode 0xc2.\n", __LINE__);
+ DELETE_CURCTX ();
+ }
+ break;
+ case 0xc3: /* ret */
+ {
+ int rc = process_return (wctx, cur);
+ if (rc != RA_FAILURE)
+ {
+ if (save_ctx)
+ omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, rc);
+ return rc;
+ }
+ if (jmp_reg_switch_mode == 1)
+ jmp_reg_switch_pc = cur->pc;
+ DprintfT (SP_DUMP_UNWIND, "unwind.c:%d delete context, opcode 0xc3.\n", __LINE__);
+ DELETE_CURCTX ();
+ }
+ break;
+ case 0xc4: /* group AVX, 3-bytes VEX prefix */
+ {
+ unsigned char *pc = cur->pc - 1; // points to the beginning of the instruction
+ int len = parse_x86_AVX_instruction (pc);
+ if (len < 3)
+ DELETE_CURCTX ();
+ else
+ {
+ pc += len;
+ cur->pc = pc;
+ }
+ }
+ break;
+ case 0xc5: /* group AVX, 2-bytes VEX prefix */
+ {
+ unsigned char *pc = cur->pc - 1; // points to the beginning of the instruction
+ int len = parse_x86_AVX_instruction (pc);
+ if (len < 2)
+ DELETE_CURCTX ();
+ else
+ {
+ pc += len;
+ cur->pc = pc;
+ }
+ }
+ break;
+ case 0xc6:
+ modrm = *cur->pc;
+ if (modrm == 0xf8) /* xabort */
+ cur->pc += 2;
+ else /* mov Eb,Ib */
+ cur->pc = check_modrm (cur->pc) + 1;
+ break;
+ case 0xc7:
+ modrm = *cur->pc;
+ if (modrm == 0xf8) /* xbegin */
+ cur->pc += v + 1;
+ else
+ { /* mov Ev,Iz */
+ extop = MRM_EXT (modrm);
+ if (extop != 0)
+ {
+ DprintfT (SP_DUMP_UNWIND, "unwind.c:%d give up return address, opcode = 0xc7\n", __LINE__);
+ goto checkFP;
+ }
+ if (MRM_MOD (modrm) == 0xc0 && MRM_REGS (modrm) == RAX)
+ cur->rax = read_int (cur->pc + 1, z);
+ cur->pc = check_modrm (cur->pc) + z;
+ }
+ break;
+ case 0xc8: /* enter Iw,Ib */
+ cur->pc += 3;
+ break;
+ case 0xc9: /* leave */
+ /* mov %ebp,%esp */
+ cur->sp = cur->fp;
+ /* pop %ebp */
+ if (cur->fp_loc == cur->sp)
+ {
+ cur->fp = cur->fp_sav;
+ cur->fp_loc = NULL;
+ }
+ else if (cur->sp >= cur->sp_safe &&
+ (unsigned long) cur->sp < wctx->sbase)
+ {
+ cur->fp = (unsigned long*) (*cur->sp);
+ if (wctx->fp == (unsigned long) cur->sp)
+ cur->cval = RA_FROMFP;
+ }
+ cur->sp += 1;
+ if (cur->sp - RED_ZONE > cur->sp_safe)
+ cur->sp_safe = cur->sp - RED_ZONE;
+ break;
+ case 0xca: /* retf Iw */
+ cur->pc += 2; /* XXXX process return */
+ break;
+ case 0xcb: /* retf */
+ break; /* XXXX process return */
+ case 0xcc: /* int 3 */
+ break;
+ case 0xcd: /* int Ib */
+ if (*cur->pc == 0x80)
+ {
+ if (cur->rax == __NR_exit)
+ {
+ DprintfT (SP_DUMP_UNWIND, "unwind.c:%d delete context, opcode 0xcd.\n", __LINE__);
+ DELETE_CURCTX ();
+ break;
+ }
+ else if (cur->rax == __NR_rt_sigreturn)
+ {
+ if (jmp_reg_switch_mode == 1)
+ {
+ DprintfT (SP_DUMP_UNWIND, "unwind.c:%d give up return address under jmp switch mode, opcode=0xcd\n",
+ __LINE__);
+ goto checkFP;
+ }
+ wctx->sp = (unsigned long) cur->sp;
+ if (save_ctx)
+ omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, RA_RT_SIGRETURN);
+ return RA_RT_SIGRETURN;
+ }
+#if WSIZE(32)
+ else if (cur->rax == __NR_sigreturn)
+ {
+ if (jmp_reg_switch_mode == 1)
+ {
+ DprintfT (SP_DUMP_UNWIND, "unwind.c:%d give up return address under jmp switch mode, opcode = 0xc2\n",
+ __LINE__);
+ goto checkFP;
+ }
+ wctx->sp = (unsigned long) cur->sp;
+ if (save_ctx)
+ omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, RA_SIGRETURN);
+ return RA_SIGRETURN;
+ }
+#endif
+ }
+ cur->pc += 1;
+ break;
+ case 0xce: /* into */
+ case 0xcf: /* iret */
+ break;
+ case 0xd0: /* shift group2 Eb,1 */
+ case 0xd1: /* shift group2 Ev,1 */
+ case 0xd2: /* shift group2 Eb,%cl */
+ case 0xd3: /* shift group2 Ev,%cl */
+ cur->pc = check_modrm (cur->pc);
+ break;
+ case 0xd4: /* aam Ib */
+ cur->pc += 1;
+ break;
+ case 0xd5: /* aad Ib */
+ cur->pc += 1;
+ break;
+ case 0xd6: /* falc? */
+ break;
+ case 0xd7:
+ cur->pc = check_modrm (cur->pc);
+ cur->pc++;
+ break;
+ case 0xd8: /* esc instructions */
+ case 0xd9:
+ case 0xda:
+ case 0xdb:
+ case 0xdc:
+ case 0xdd:
+ case 0xde:
+ case 0xdf:
+ cur->pc = check_modrm (cur->pc);
+ break;
+ case 0xe0: /* loopne Jb */
+ case 0xe1: /* loope Jb */
+ case 0xe2: /* loop Jb */
+ case 0xe3: /* jcxz Jb */
+ imm8 = *(char*) cur->pc++;
+ if (nctx < (jmp_reg_switch_mode ? MAXJMPREGCTX : MAXCTX))
+ {
+ int tidx = 0;
+ unsigned char *npc = cur->pc + imm8;
+ if (is_after_ret (npc))
+ break;
+ while (npc > targets[tidx])
+ tidx += 1;
+ if (npc != targets[tidx])
+ {
+ if (ntrg < MAXTRGTS)
+ {
+ for (int i = 0; i < nctx; i++)
+ if (buf[i].tidx >= tidx)
+ buf[i].tidx++;
+ /* insert a new target */
+ for (int i = ntrg; i > tidx; i--)
+ targets[i] = targets[i - 1];
+ ntrg += 1;
+ targets[tidx++] = npc;
+ }
+ else
+ DprintfT (SP_DUMP_UNWIND, "unwind.c: ntrg = max\n");
+ struct AdvWalkContext *new = buf + nctx;
+ nctx += 1;
+ __collector_memcpy (new, cur, sizeof (*new));
+ new->pc = npc;
+ new->tidx = tidx;
+ cur = new; /* advance the new context first */
+ continue;
+ }
+ }
+ else
+ DprintfT (SP_DUMP_UNWIND, "unwind.c: nctx = max\n");
+ break;
+ case 0xe4: case 0xe5:
+ cur->pc = check_modrm (cur->pc);
+ cur->pc++;
+ break;
+ case 0xe6: case 0xe7:
+ cur->pc++;
+ cur->pc = check_modrm (cur->pc);
+ break;
+ case 0xec: case 0xed: case 0xee: case 0xef:
+ cur->pc = check_modrm (cur->pc);
+ break;
+ case 0xe8: /* call Jz (f64) */
+ {
+ if (jmp_reg_switch_mode == 1)
+ {
+ struct AdvWalkContext* tmpctx = (struct AdvWalkContext *) alloca (sizeof (*cur));
+ __collector_memcpy (tmpctx, cur, sizeof (*cur));
+ int rc = process_return (wctx, tmpctx);
+ if (rc != RA_FAILURE)
+ {
+ if (save_ctx)
+ omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, rc);
+ return rc;
+ }
+ }
+ int immz = read_int (cur->pc, z);
+ if (immz == 0)
+ /* special case in PIC code */
+ cur->sp -= 1;
+ cur->pc += z;
+ }
+ break;
+ case 0xe9: /* jump Jz */
+ {
+ int immz = read_int (cur->pc, z);
+ unsigned char *npc = cur->pc + z + immz;
+ if ((unsigned long) npc < wctx->tbgn || (unsigned long) npc >= wctx->tend)
+ {
+ DprintfT (SP_DUMP_UNWIND, "unwind.c:%d delete context, opcode 0xe9.\n", __LINE__);
+ DELETE_CURCTX ();
+ break;
+ }
+ int tidx = 0;
+ while (npc > targets[tidx])
+ tidx += 1;
+ if (npc != targets[tidx])
+ {
+ if (ntrg < MAXTRGTS)
+ {
+ for (int i = 0; i < nctx; i++)
+ if (buf[i].tidx >= tidx)
+ buf[i].tidx++;
+ /* insert a new target */
+ for (int i = ntrg; i > tidx; i--)
+ targets[i] = targets[i - 1];
+ ntrg += 1;
+ targets[tidx++] = npc;
+ }
+ else
+ DprintfT (SP_DUMP_UNWIND, "unwind.c: ntrg = max\n");
+ cur->pc = npc;
+ cur->tidx = tidx;
+ continue; /* advance this context first */
+ }
+ else
+ {
+ /* Delete context */
+ DprintfT (SP_DUMP_UNWIND, "unwind.c:%d delete context, opcode 0xe9.\n", __LINE__);
+ DELETE_CURCTX ();
+ }
+ }
+ break;
+ case 0xeb: /* jump imm8 */
+ {
+ imm8 = *(char*) cur->pc++;
+ int tidx = 0;
+ unsigned char *npc = cur->pc + imm8;
+ while (npc > targets[tidx])
+ tidx += 1;
+ if (npc != targets[tidx])
+ {
+ if (ntrg < MAXTRGTS)
+ {
+ for (int i = 0; i < nctx; i++)
+ if (buf[i].tidx >= tidx)
+ buf[i].tidx++;
+ /* insert a new target */
+ for (int i = ntrg; i > tidx; i--)
+ targets[i] = targets[i - 1];
+ ntrg += 1;
+ targets[tidx++] = npc;
+ }
+ else
+ DprintfT (SP_DUMP_UNWIND, "unwind.c: ntrg = max\n");
+ cur->pc = npc;
+ cur->tidx = tidx;
+ continue; /* advance this context first */
+ }
+ else
+ {
+ /* Delete context */
+ DprintfT (SP_DUMP_UNWIND, "unwind.c:%d delete context, opcode 0xeb.\n", __LINE__);
+ DELETE_CURCTX ();
+ }
+ }
+ break;
+ case 0xf0: /* lock prefix */
+ case 0xf2: /* repne prefix */
+ case 0xf3: /* repz prefix */
+ break;
+ case 0xf4: /* hlt */
+ extop2 = *(cur->pc - 3);
+ if (extop2 == 0x90)
+ {
+ // 17851712 occasional SEGV in find_i386_ret_addr in unwind.c during attach
+ if (save_ctx)
+ omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, RA_END_OF_STACK);
+ DprintfT (SP_DUMP_UNWIND, "unwind.c:%d returns RA_END_OF_STACK\n", __LINE__);
+ return RA_END_OF_STACK;
+ }
+ /* We see 'hlt' in _start. Stop analysis, revert to FP */
+ /* A workaround for the Linux main stack */
+ if (nctx > 1)
+ {
+ DELETE_CURCTX ();
+ break;
+ }
+ if (cur->fp == 0)
+ {
+ if (jmp_reg_switch_mode == 1)
+ {
+ DprintfT (SP_DUMP_UNWIND, "unwind.c: give up return address under jmp switch mode, opcode = 0xf4\n");
+ goto checkFP;
+ }
+ cache_put (wctx, RA_EOSTCK);
+ wctx->pc = 0;
+ wctx->sp = 0;
+ wctx->fp = 0;
+ if (save_ctx)
+ omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, RA_END_OF_STACK);
+ DprintfT (SP_DUMP_UNWIND, "unwind.c:%d returns RA_END_OF_STACK\n", __LINE__);
+ return RA_END_OF_STACK;
+ }
+ DprintfT (SP_DUMP_UNWIND, "unwind.c:%d give up return address, opcode = 0xf4\n", __LINE__);
+ goto checkFP;
+ case 0xf5: /* cmc */
+ break;
+ case 0xf6: /* group3 Eb */
+ modrm = *cur->pc;
+ extop = MRM_EXT (modrm);
+ cur->pc = check_modrm (cur->pc);
+ if (extop == 0x0) /* test Ib */
+ cur->pc += 1;
+ break;
+ case 0xf7: /* group3 Ev */
+ modrm = *cur->pc;
+ extop = MRM_EXT (modrm);
+ cur->pc = check_modrm (cur->pc);
+ if (extop == 0x0) /* test Iz */
+ cur->pc += z;
+ break;
+ case 0xf8: /* clc */
+ case 0xf9: /* stc */
+ case 0xfa: /* cli */
+ case 0xfb: /* sti */
+ case 0xfc: /* cld */
+ case 0xfd: /* std */
+ break;
+ case 0xfe: /* group4 */
+ modrm = *cur->pc;
+ extop = MRM_EXT (modrm);
+ switch (extop)
+ {
+ case 0x0: /* inc Eb */
+ case 0x1: /* dec Eb */
+ cur->pc = check_modrm (cur->pc);
+ break;
+ case 0x7:
+ cur->pc = check_modrm (cur->pc);
+ break;
+ default:
+ DprintfT (SP_DUMP_UNWIND, "unwind.c:%d unknown opcode: 0xfe %x\n",
+ __LINE__, extop);
+ DELETE_CURCTX ();
+ break;
+ }
+ break;
+ case 0xff: /* group5 */
+ modrm = *cur->pc;
+ extop = MRM_EXT (modrm);
+ switch (extop)
+ {
+ case 0x0: /* inc Ev */
+ case 0x1: /* dec Ev */
+ cur->pc = check_modrm (cur->pc);
+ break;
+ case 0x2: /* calln Ev */
+ if (jmp_reg_switch_mode == 1)
+ {
+ struct AdvWalkContext* tmpctx = (struct AdvWalkContext *) alloca (sizeof (*cur));
+ __collector_memcpy (tmpctx, cur, sizeof (*cur));
+ int rc = process_return (wctx, tmpctx);
+ if (rc != RA_FAILURE)
+ {
+ if (save_ctx)
+ omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, rc);
+ return rc;
+ }
+ }
+ cur->pc = check_modrm (cur->pc);
+ break;
+ case 0x3: /* callf Ep */
+ if (jmp_reg_switch_mode == 1)
+ {
+ struct AdvWalkContext* tmpctx = (struct AdvWalkContext *) alloca (sizeof (*cur));
+ __collector_memcpy (tmpctx, cur, sizeof (*cur));
+ int rc = process_return (wctx, tmpctx);
+ if (rc != RA_FAILURE)
+ {
+ if (save_ctx)
+ omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, rc);
+ return rc;
+ }
+ }
+ cur->pc = check_modrm (cur->pc); /* XXXX */
+ break;
+ case 0x4: /* jumpn Ev */
+ /* This instruction appears in PLT or
+ * in tail call optimization.
+ * In both cases treat it as return.
+ * Save jump *(reg) - switch, etc, for later use when no ctx left
+ */
+ if (modrm == 0x25 || /* jumpn *disp32 */
+ MRM_MOD (modrm) == 0x40 || /* jumpn byte(reg) */
+ MRM_MOD (modrm) == 0x80) /* jumpn word(reg) */
+ {
+ DprintfT (SP_DUMP_UNWIND, "unwind.c: PLT or tail call: %p\n", cur->pc - 1);
+ int rc = process_return (wctx, cur);
+ if (rc != RA_FAILURE)
+ {
+ if (jmp_reg_switch_mode == 1 && total_num_jmp_reg < max_num_jmp_reg_seen)
+ {
+ DprintfT (SP_DUMP_UNWIND, "unwind.c: give up return address under jmp switch mode, opcode = 0xff\n");
+ goto checkFP;
+ }
+ if (save_ctx)
+ omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, rc);
+ return rc;
+ }
+ }
+ else if (modrm != 0x24 /*ignore SIB*/) /* jumpn *(reg) or jumpn reg */
+ {
+ // 22846120 stack unwind does not find caller of __memcpy_ssse3_back with B64 intel-Linux
+ /*
+ * For now, let's deal rather narrowly with this scenario. If:
+ * - we are in the middle of an "ff e2" instruction, and
+ * - the next instruction is undefined ( 0f 0b == ud2 )
+ * then test return. (Might eventually have to broaden the scope
+ * of this fix to other registers/etc.)
+ */
+ if (cur->pc[0] == 0xe2 && cur->pc[1] == 0x0f && cur->pc[2] == 0x0b)
+ {
+ int rc = process_return_real (wctx, cur, 0);
+ if (rc == RA_SUCCESS)
+ {
+ if (save_ctx)
+ omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, rc);
+ return rc;
+ }
+ }
+
+ // 22691241 shjsynprog, jsynprog core dump from find_i386_ret_addr
+ /*
+ * Here is another oddity. Java 9 seems to emit dynamically generated
+ * code where a code block ends with a "jmp *reg" and then padding to a
+ * multiple-of-16 boundary and then a bunch of 0s. In this case, let's
+ * not continue to walk bytes since we would be walking off the end of
+ * the instructions into ... something. Treating them as instructions
+ * can lead to unexpected results, including SEGV.
+ */
+ /*
+ * While the general problem deserves a better solution, let's look
+ * here only for one particular case:
+ * 0xff 0xe7 jmp *reg
+ * nop to bring us to a multiple-of-16 boundary
+ * 0x0000000000000a00 something that does not look like an instruction
+ *
+ * A different nop might be used depending on how much padding is needed
+ * to reach that multiple-of-16 boundary. We've seen two:
+ * 0x90 one byte
+ * 0x0f 0x1f 0x40 0x00 four bytes
+ */
+ // confirm the instruction is 0xff 0xe7
+ if (cur->pc[0] == 0xe7)
+ {
+ // check for correct-length nop and find next 16-byte boundary
+ int found_nop = 0;
+ unsigned long long *boundary = 0;
+ switch ((((unsigned long) (cur->pc)) & 0xf))
+ {
+ case 0xb: // look for 4-byte nop
+ if (*((unsigned *) (cur->pc + 1)) == 0x00401f0f)
+ found_nop = 1;
+ boundary = (unsigned long long *) (cur->pc + 5);
+ break;
+ case 0xe: // look for 1-byte nop
+ if (cur->pc[1] == 0x90)
+ found_nop = 1;
+ boundary = (unsigned long long *) (cur->pc + 2);
+ break;
+ default:
+ break;
+ }
+
+ // if nop is found, check what's at the boundary
+ if (found_nop && *boundary == 0x000000000a00)
+ {
+ DELETE_CURCTX ();
+ break;
+ }
+ }
+
+ DprintfT (SP_DUMP_UNWIND, "unwind.c: probably PLT or tail call or switch table: %p\n",
+ cur->pc - 1);
+ if (num_jmp_reg < expected_num_jmp_reg)
+ {
+ if (jmp_reg_ctx[num_jmp_reg] == NULL)
+ jmp_reg_ctx[num_jmp_reg] = (struct AdvWalkContext *) alloca (sizeof (*cur));
+ if (jmp_reg_ctx[num_jmp_reg] != NULL)
+ __collector_memcpy (jmp_reg_ctx[num_jmp_reg], cur, sizeof (*cur));
+ }
+ if (num_jmp_reg < expected_num_jmp_reg ||
+ (num_jmp_reg >= expected_num_jmp_reg &&
+ jmp_reg_ctx[expected_num_jmp_reg - 1] != NULL &&
+ cur->pc != jmp_reg_ctx[expected_num_jmp_reg - 1]->pc))
+ {
+ num_jmp_reg++;
+ total_num_jmp_reg++;
+ }
+ if (jmp_reg_switch_mode == 1 && total_num_jmp_reg >= max_num_jmp_reg_seen)
+ {
+ int rc = process_return_real (wctx, cur, 0);
+ if (rc == RA_SUCCESS)
+ {
+ if (save_ctx)
+ omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, rc);
+ return rc;
+ }
+ }
+ }
+ DprintfT (SP_DUMP_UNWIND, "unwind.c:%d delete context, opcode 0xff.\n", __LINE__);
+ DELETE_CURCTX ();
+ break;
+ case 0x5: /* jmpf Ep */
+ cur->pc = check_modrm (cur->pc); /* XXXX */
+ break;
+ case 0x6: /* push Ev */
+ cur->pc = check_modrm (cur->pc);
+ cur->sp -= 1;
+ break;
+ case 0x7:
+ cur->pc = check_modrm (cur->pc); /* XXXX */
+ if (jmp_reg_switch_mode == 1)
+ {
+ int rc = process_return_real (wctx, cur, 0);
+ if (rc == RA_SUCCESS)
+ {
+ if (save_ctx)
+ omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, rc);
+ return rc;
+ }
+ }
+ break;
+ default:
+ DprintfT (SP_DUMP_UNWIND, "unwind.c:%d unknown opcode: 0xff %x\n",
+ __LINE__, (int) extop);
+ DELETE_CURCTX ();
+ break;
+ }
+ break;
+ default:
+ DprintfT (SP_DUMP_UNWIND, "unwind.c:%d unknown opcode: 0x%x\n",
+ __LINE__, (int) opcode);
+ DELETE_CURCTX ();
+ break;
+ }
+
+ /* switch to next context */
+ if (++cur >= buf + nctx)
+ cur = buf;
+ DprintfT (SP_DUMP_UNWIND, "unwind.c:%d switch context: cur=0x%lx(%ld) nctx=%d cnt=%d\n",
+ __LINE__, (unsigned long) cur, (long) (cur - buf), (int) nctx, (int) cnt);
+ }
+
+checkFP:
+ Tprintf (DBG_LT3, "find_i386_ret_addr:%d checkFP: wctx=0x%lx fp=0x%lx ln=0x%lx pc=0x%lx sbase=0x%lx sp=0x%lx tbgn=0x%lx tend=0x%lx\n",
+ __LINE__, (unsigned long) wctx, (unsigned long) wctx->fp,
+ (unsigned long) wctx->ln, (unsigned long) wctx->pc, (unsigned long) wctx->sbase,
+ (unsigned long) wctx->sp, (unsigned long) wctx->tbgn, (unsigned long) wctx->tend);
+
+ if (jmp_reg_switch_mode == 1)
+ { // not deal with switch cases not ending with ret
+ if (jmp_reg_switch_backup_ctx != NULL)
+ __collector_memcpy (cur, jmp_reg_switch_backup_ctx, sizeof (*cur));
+ DprintfT (SP_DUMP_UNWIND, "stack_unwind jmp reg mode on: pc = 0x%lx cnt = %d, nctx = %d\n", wctx->pc, cnt, nctx);
+ }
+
+ unsigned long *cur_fp = cur->fp;
+ unsigned long *cur_sp = cur->sp;
+ if (do_walk == 0)
+ __collector_memcpy (&wctx_pc_save, wctx, sizeof (struct WalkContext));
+
+ /* Resort to the frame pointer */
+ if (cur->fp_loc)
+ cur->fp = cur->fp_sav;
+ cur->sp = cur->fp;
+ if ((unsigned long) cur->sp >= wctx->sbase ||
+ (unsigned long) cur->sp < wctx->sp)
+ {
+ DprintfT (SP_DUMP_UNWIND, "unwind.c:%d do_walk=%d cur->sp=0x%p out of range. wctx->sbase=0x%lx wctx->sp=0x%lx wctx->pc=0x%lx\n",
+ __LINE__, (int) do_walk, cur->sp, (unsigned long) wctx->sbase,
+ (unsigned long) wctx->sp, (unsigned long) wctx->pc);
+ if (do_walk == 0)
+ {
+ cur->sp = cur_sp;
+ cur->fp = cur_fp;
+ do_walk = 1;
+ save_ctx = 1;
+ goto startWalk;
+ }
+ if (save_ctx)
+ omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, RA_FAILURE);
+ return RA_FAILURE;
+ }
+
+ unsigned long fp = *cur->sp++;
+ if (fp <= (unsigned long) cur->sp || fp >= wctx->sbase)
+ {
+ DprintfT (SP_DUMP_UNWIND, "unwind.c:%d fp=0x%016llx out of range. cur->sp=%p wctx->sbase=0x%lx wctx->pc=0x%lx\n",
+ __LINE__, (unsigned long long) fp, cur->sp,
+ (unsigned long) wctx->sbase, (unsigned long) wctx->pc);
+ if (do_walk == 0)
+ {
+ cur->sp = cur_sp;
+ cur->fp = cur_fp;
+ do_walk = 1;
+ save_ctx = 1;
+ goto startWalk;
+ }
+ if (save_ctx)
+ omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, RA_FAILURE);
+ return RA_FAILURE;
+ }
+
+ unsigned long ra = *cur->sp++;
+ if (ra == 0)
+ {
+ cache_put (wctx, RA_EOSTCK);
+ DprintfT (SP_DUMP_UNWIND, "unwind.c:%d returns RA_END_OF_STACK wctx->pc = 0x%lx\n", __LINE__, wctx->pc);
+ if (save_ctx)
+ omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, RA_END_OF_STACK);
+ return RA_END_OF_STACK;
+ }
+
+ unsigned long tbgn = wctx->tbgn;
+ unsigned long tend = wctx->tend;
+ if (ra < tbgn || ra >= tend)
+ {
+ // We do not know yet if update_map_segments is really needed
+ if (!__collector_check_segment (ra, &tbgn, &tend, 0))
+ {
+ DprintfT (SP_DUMP_UNWIND, "unwind.c: __collector_check_segment fail. wctx->pc = 0x%lx\n", wctx->pc);
+ if (do_walk == 0)
+ {
+ cur->sp = cur_sp;
+ cur->fp = cur_fp;
+ do_walk = 1;
+ save_ctx = 1;
+ goto startWalk;
+ }
+ if (save_ctx)
+ omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, RA_FAILURE);
+ return RA_FAILURE;
+ }
+ }
+
+ unsigned long npc = adjust_ret_addr (ra, ra - tbgn, tend);
+ if (npc == 0)
+ {
+ DprintfT (SP_DUMP_UNWIND, "unwind.c: adjust_ret_addr fail. wctx->pc = 0x%lx\n", wctx->pc);
+ if (do_walk == 0)
+ {
+ cur->sp = cur_sp;
+ cur->fp = cur_fp;
+ do_walk = 1;
+ save_ctx = 1;
+ goto startWalk;
+ }
+ if (save_ctx)
+ omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, RA_FAILURE);
+ return RA_FAILURE;
+ }
+ wctx->pc = npc;
+ wctx->sp = (unsigned long) cur->sp;
+ wctx->fp = fp;
+ wctx->tbgn = tbgn;
+ wctx->tend = tend;
+
+ if (save_ctx)
+ {
+ omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, RA_SUCCESS);
+ DprintfT (SP_DUMP_UNWIND, "unwind.c: cache walk context. wctx_pc_save->pc = 0x%lx\n", wctx_pc_save.pc);
+ }
+ return RA_SUCCESS;
+}
+
+/*
+ * We have the return address, but we would like to report to the user
+ * the calling PC, which is the instruction immediately preceding the
+ * return address. Unfortunately, x86 instructions can have variable
+ * length. So we back up 8 bytes and try to figure out where the
+ * calling PC starts. (FWIW, call instructions are often 5-bytes long.)
+ */
+unsigned long
+adjust_ret_addr (unsigned long ra, unsigned long segoff, unsigned long tend)
+{
+ unsigned long npc = 0;
+ int i = segoff < 8 ? segoff : 8;
+ for (; i > 1; i--)
+ {
+ unsigned char *ptr = (unsigned char*) ra - i;
+ int z = 4;
+ int a = 4;
+ int done = 0;
+ int bVal;
+ while (!done)
+ {
+ bVal = getByteInstruction (ptr);
+ if (bVal < 0)
+ return 0;
+ switch (bVal)
+ {
+ case 0x26:
+ case 0x36:
+#if WSIZE(64)
+ ptr += 1;
+ break;
+#endif
+ case 0x64:
+ case 0x65:
+ bVal = getByteInstruction (ptr + 1);
+ if (bVal < 0)
+ return 0;
+ if (bVal == 0xe8)
+ // a workaround for bug 16193041, assuming "call Jz" has no segment override prefix
+ done = 1;
+ else
+ ptr += 1;
+ break;
+ case 0x66:
+ z = 2;
+ ptr += 1;
+ break;
+ case 0x67:
+ a = 2;
+ ptr += 1;
+ break;
+ default:
+ done = 1;
+ break;
+ }
+ }
+#if WSIZE(64)
+ bVal = getByteInstruction (ptr);
+ if (bVal < 0)
+ return 0;
+ if (bVal >= 0x40 && bVal <= 0x4f)
+ { /* XXXX not all REX codes applicable */
+ if (bVal & 0x8)
+ z = 4;
+ ptr += 1;
+ }
+#endif
+ int opcode = getByteInstruction (ptr);
+ if (opcode < 0)
+ return 0;
+ ptr++;
+ switch (opcode)
+ {
+ case 0xe8: /* call Jz (f64) */
+ ptr += z;
+ break;
+ case 0x9a: /* callf Ap */
+ ptr += 2 + a;
+ break;
+ case 0xff: /* calln Ev , callf Ep */
+ {
+ int extop = MRM_EXT (*ptr);
+ if (extop == 2 || extop == 3)
+ ptr = check_modrm (ptr);
+ }
+ break;
+ default:
+ continue;
+ }
+ if ((unsigned long) ptr == ra)
+ {
+ npc = ra - i;
+ break;
+ }
+ }
+ if (npc == 0)
+ {
+ unsigned char * ptr = (unsigned char *) ra;
+#if WSIZE(32)
+ // test __kernel_sigreturn or __kernel_rt_sigreturn
+ if ((ra + 7 < tend && getByteInstruction (ptr) == 0x58
+ && getByteInstruction (ptr + 1) == 0xb8
+ && getByteInstruction (ptr + 6) == 0xcd
+ && getByteInstruction (ptr + 7) == 0x80) /* pop %eax; mov $NNNN, %eax; int */
+ || (ra + 7 < tend && getByteInstruction (ptr) == 0x58
+ && getByteInstruction (ptr + 1) == 0xb8
+ && getByteInstruction (ptr + 6) == 0x0f
+ && getByteInstruction (ptr + 7) == 0x05) /* pop %eax; mov $NNNN, %eax; syscall */
+ || (ra + 6 < tend && getByteInstruction (ptr) == 0xb8
+ && getByteInstruction (ptr + 5) == 0xcd
+ && getByteInstruction (ptr + 6) == 0x80) /* mov $NNNN, %eax; int */
+ || (ra + 6 < tend && getByteInstruction (ptr) == 0xb8
+ && getByteInstruction (ptr + 5) == 0x0f
+ && getByteInstruction (ptr + 6) == 0x05)) /* mov $NNNN, %eax; syscall */
+#else //WSIZE(64)
+ // test __restore_rt
+ if (ra + 8 < tend && getByteInstruction (ptr) == 0x48
+ && getByteInstruction (ptr + 7) == 0x0f
+ && getByteInstruction (ptr + 8) == 0x05) /* mov $NNNNNNNN, %rax; syscall */
+#endif
+ {
+ npc = ra;
+ }
+ }
+ if (npc == 0 && __collector_java_mode
+ && __collector_java_asyncgetcalltrace_loaded)
+ { // detect jvm interpreter code for java user threads
+ unsigned char * ptr = (unsigned char *) ra;
+#if WSIZE(32)
+ // up to J170
+ /*
+ * ff 24 9d e0 64 02 f5 jmp *-0xafd9b20(,%ebx,4)
+ * 8b 4e 01 movl 1(%esi),%ecx
+ * f7 d1 notl %ecx
+ * 8b 5d ec movl -0x14(%ebp),%ebx
+ * c1 e1 02 shll $2,%ecx
+ * eb d8 jmp .-0x26 [ 0x92a ]
+ * 83 ec 08 subl $8,%esp || 8b 65 f8 movl -8(%ebp),%esp
+ * */
+ if (ra - 20 >= (ra - segoff) && ((*ptr == 0x83 && *(ptr + 1) == 0xec) || (*ptr == 0x8b && *(ptr + 1) == 0x65))
+ && *(ptr - 2) == 0xeb
+ && *(ptr - 5) == 0xc1 && *(ptr - 4) == 0xe1
+ && *(ptr - 8) == 0x8b && *(ptr - 7) == 0x5d
+ && *(ptr - 10) == 0xf7 && *(ptr - 9) == 0xd1
+ && *(ptr - 13) == 0x8b && *(ptr - 12) == 0x4e
+ && *(ptr - 20) == 0xff && *(ptr - 19) == 0x24 && *(ptr - 18) == 0x9d)
+ {
+ npc = ra - 20;
+ }
+ // J180 J190
+ // ff 24 9d ** ** ** ** jmp *-0x*******(,%ebx,4)
+ if (npc == 0
+ && ra - 7 >= (ra - segoff)
+ && *(ptr - 7) == 0xff
+ && *(ptr - 6) == 0x24
+ && *(ptr - 5) == 0x9d)
+ {
+ npc = ra - 7;
+ }
+#else //WSIZE(64)
+ // up to J170
+ /*
+ * 41 ff 24 da jmp *(%r10,%rbx,8)
+ * 41 8b 4d 01 movl 1(%r13),%ecx
+ * f7 d1 notl %ecx
+ * 48 8b 5d d8 movq -0x28(%rbp),%rbx
+ * c1 e1 02 shll $2,%ecx
+ * eb cc jmp .-0x32 [ 0xd23 ]
+ * 48 8b 65 f0 movq -0x10(%rbp),%rsp
+ */
+ if (ra - 19 >= (ra - segoff) && *ptr == 0x48 && ((*(ptr + 1) == 0x8b && *(ptr + 2) == 0x65) || (*(ptr + 1) == 0x83 && *(ptr + 2) == 0xec))
+ && *(ptr - 2) == 0xeb
+ && *(ptr - 5) == 0xc1 && *(ptr - 4) == 0xe1
+ && *(ptr - 9) == 0x48 && *(ptr - 8) == 0x8b && *(ptr - 7) == 0x5d
+ && *(ptr - 11) == 0xf7 && *(ptr - 10) == 0xd1
+ && *(ptr - 15) == 0x41 && *(ptr - 14) == 0x8b && *(ptr - 13) == 0x4d
+ && *(ptr - 19) == 0x41 && *(ptr - 18) == 0xff)
+ npc = ra - 19;
+ // J180 J190
+ // 41 ff 24 da jmp *(%r10,%rbx,8)
+ if (npc == 0
+ && ra - 4 >= (ra - segoff)
+ && *(ptr - 4) == 0x41
+ && *(ptr - 3) == 0xff
+ && *(ptr - 2) == 0x24
+ && *(ptr - 1) == 0xda)
+ npc = ra - 4;
+#endif
+ }
+
+ return npc;
+}
+
+/*
+ * Parses AVX instruction and returns its length.
+ * Returns 0 if parsing failed.
+ * https://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-instruction-set-reference-manual-325383.pdf
+ */
+static int
+parse_x86_AVX_instruction (unsigned char *pc)
+{
+ /*
+ * VEX prefix has a two-byte form (0xc5) and a three byte form (0xc4).
+ * If an instruction syntax can be encoded using the two-byte form,
+ * it can also be encoded using the three byte form of VEX.
+ * The latter increases the length of the instruction by one byte.
+ * This may be helpful in some situations for code alignment.
+ *
+ Byte 0 Byte 1 Byte 2 Byte 3
+ (Bit Position) 7 0 7 6 5 4 0 7 6 3 2 10
+ 3-byte VEX [ 11000100 ] [ R X B | m-mmmm ] [ W | vvvv | L | pp ]
+ 7 0 7 6 3 2 10
+ 2-byte VEX [ 11000101 ] [ R | vvvv | L | pp ]
+ 7 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
+ 4-byte EVEX [ 01100010 ] [ R X B R1 0 0 m m ] [ W v v v v 1 p p ] [ z L1 L B1 V1 a a a ]
+
+ R: REX.R in 1's complement (inverted) form
+ 0: Same as REX.R=1 (64-bit mode only)
+ 1: Same as REX.R=0 (must be 1 in 32-bit mode)
+
+ X: REX.X in 1's complement (inverted) form
+ 0: Same as REX.X=1 (64-bit mode only)
+ 1: Same as REX.X=0 (must be 1 in 32-bit mode)
+
+ B: REX.B in 1's complement (inverted) form
+ 0: Same as REX.B=1 (64-bit mode only)
+ 1: Same as REX.B=0 (Ignored in 32-bit mode).
+
+ W: opcode specific (use like REX.W, or used for opcode
+ extension, or ignored, depending on the opcode byte)
+
+ m-mmmm:
+ 00000: Reserved for future use (will #UD)
+ 00001: implied 0F leading opcode byte
+ 00010: implied 0F 38 leading opcode bytes
+ 00011: implied 0F 3A leading opcode bytes
+ 00100-11111: Reserved for future use (will #UD)
+
+ vvvv: a register specifier (in 1's complement form) or 1111 if unused.
+
+ L: Vector Length
+ 0: scalar or 128-bit vector
+ 1: 256-bit vector
+
+ pp: opcode extension providing equivalent functionality of a SIMD prefix
+ 00: None
+ 01: 66
+ 10: F3
+ 11: F2
+ *
+ * Example: 0xc5f877L vzeroupper
+ * VEX prefix: 0xc5 0x77
+ * Opcode: 0xf8
+ *
+ */
+ int len = 0;
+ disassemble_info dis_info;
+ dis_info.arch = bfd_arch_i386;
+ dis_info.mach = bfd_mach_x86_64;
+ dis_info.flavour = bfd_target_unknown_flavour;
+ dis_info.endian = BFD_ENDIAN_UNKNOWN;
+ dis_info.endian_code = dis_info.endian;
+ dis_info.octets_per_byte = 1;
+ dis_info.disassembler_needs_relocs = FALSE;
+ dis_info.fprintf_func = fprintf_func;
+ dis_info.fprintf_styled_func = fprintf_styled_func;
+ dis_info.stream = NULL;
+ dis_info.disassembler_options = NULL;
+ dis_info.read_memory_func = read_memory_func;
+ dis_info.memory_error_func = memory_error_func;
+ dis_info.print_address_func = print_address_func;
+ dis_info.symbol_at_address_func = symbol_at_address_func;
+ dis_info.symbol_is_valid = symbol_is_valid;
+ dis_info.display_endian = BFD_ENDIAN_UNKNOWN;
+ dis_info.symtab = NULL;
+ dis_info.symtab_size = 0;
+ dis_info.buffer_vma = 0;
+ dis_info.buffer = pc;
+ dis_info.buffer_length = 8;
+
+ disassembler_ftype disassemble = print_insn_i386;
+ if (disassemble == NULL)
+ {
+ DprintfT (SP_DUMP_UNWIND, "parse_x86_AVX_instruction ERROR: unsupported disassemble\n");
+ return 0;
+ }
+ len = disassemble (0, &dis_info);
+ DprintfT (SP_DUMP_UNWIND, "parse_x86_AVX_instruction: returned %d pc: %p\n", len, pc);
+ return len;
+}
+
+/*
+ * In the Intel world, a stack frame looks like this:
+ *
+ * %fp0->| |
+ * |-------------------------------|
+ * | Args to next subroutine |
+ * |-------------------------------|-\
+ * %sp0->| One word struct-ret address | |
+ * |-------------------------------| > minimum stack frame (8 bytes)
+ * | Previous frame pointer (%fp0)| |
+ * %fp1->|-------------------------------|-/
+ * | Local variables |
+ * %sp1->|-------------------------------|
+ *
+ */
+
+int
+stack_unwind (char *buf, int size, void *bptr, void *eptr, ucontext_t *context, int mode)
+{
+ long *lbuf = (long*) buf;
+ int lsize = size / sizeof (long);
+ int ind = 0;
+ int do_walk = 1;
+ int extra_frame = 0;
+ if (mode & FRINFO_NO_WALK)
+ do_walk = 0;
+ if ((mode & 0xffff) == FRINFO_FROM_STACK)
+ extra_frame = 1;
+
+ /*
+ * trace the stack frames from user stack.
+ * We are assuming that the frame pointer and return address
+ * are null when we are at the top level.
+ */
+ struct WalkContext wctx;
+ wctx.pc = GET_PC (context);
+ wctx.sp = GET_SP (context);
+ wctx.fp = GET_FP (context);
+ wctx.ln = (unsigned long) context->uc_link;
+ unsigned long *sbase = (unsigned long*) __collector_tsd_get_by_key (unwind_key);
+ if (sbase && *sbase > wctx.sp)
+ wctx.sbase = *sbase;
+ else
+ {
+ wctx.sbase = wctx.sp + 0x100000;
+ if (wctx.sbase < wctx.sp) /* overflow */
+ wctx.sbase = (unsigned long) - 1;
+ }
+ // We do not know yet if update_map_segments is really needed
+ __collector_check_segment (wctx.pc, &wctx.tbgn, &wctx.tend, 0);
+
+ for (;;)
+ {
+ if (ind >= lsize || wctx.pc == 0)
+ break;
+ if (bptr != NULL && extra_frame && wctx.sp <= (unsigned long) bptr && ind < 2)
+ {
+ lbuf[0] = wctx.pc;
+ if (ind == 0)
+ {
+ ind++;
+ if (ind >= lsize)
+ break;
+ }
+ }
+ if (bptr == NULL || wctx.sp > (unsigned long) bptr)
+ {
+ lbuf[ind++] = wctx.pc;
+ if (ind >= lsize)
+ break;
+ }
+
+ for (;;)
+ {
+ if (eptr != NULL && wctx.sp >= (unsigned long) eptr)
+ {
+ ind = ind >= 2 ? ind - 2 : 0;
+ goto exit;
+ }
+ int ret = find_i386_ret_addr (&wctx, do_walk);
+ DprintfT (SP_DUMP_UNWIND, "stack_unwind (x86 walk):%d find_i386_ret_addr returns %d\n", __LINE__, ret);
+ if (ret == RA_FAILURE)
+ {
+ /* lbuf[ind++] = SP_FAILED_UNWIND_MARKER; */
+ goto exit;
+ }
+
+ if (ret == RA_END_OF_STACK)
+ goto exit;
+#if WSIZE(32)
+ if (ret == RA_RT_SIGRETURN)
+ {
+ struct SigFrame
+ {
+ unsigned long arg0;
+ unsigned long arg1;
+ unsigned long arg2;
+ } *sframe = (struct SigFrame*) wctx.sp;
+ ucontext_t *ncontext = (ucontext_t*) sframe->arg2;
+ wctx.pc = GET_PC (ncontext);
+ if (!__collector_check_segment (wctx.pc, &wctx.tbgn, &wctx.tend, 0))
+ {
+ /* lbuf[ind++] = SP_FAILED_UNWIND_MARKER; */
+ goto exit;
+ }
+ unsigned long nsp = GET_SP (ncontext);
+ /* Check the new stack pointer */
+ if (nsp <= sframe->arg2 || nsp > sframe->arg2 + sizeof (ucontext_t) + 1024)
+ {
+ /* lbuf[ind++] = SP_FAILED_UNWIND_MARKER; */
+ goto exit;
+ }
+ wctx.sp = nsp;
+ wctx.fp = GET_FP (ncontext);
+ break;
+ }
+ else if (ret == RA_SIGRETURN)
+ {
+ struct sigcontext *sctx = (struct sigcontext*) wctx.sp;
+ wctx.pc = sctx->eip;
+ if (!__collector_check_segment (wctx.pc, &wctx.tbgn, &wctx.tend, 0))
+ {
+ /* lbuf[ind++] = SP_FAILED_UNWIND_MARKER; */
+ goto exit;
+ }
+ wctx.sp = sctx->esp;
+ wctx.fp = sctx->ebp;
+ break;
+ }
+#elif WSIZE(64)
+ if (ret == RA_RT_SIGRETURN)
+ {
+ ucontext_t *ncontext = (ucontext_t*) wctx.sp;
+ wctx.pc = GET_PC (ncontext);
+ if (!__collector_check_segment (wctx.pc, &wctx.tbgn, &wctx.tend, 0))
+ {
+ /* lbuf[ind++] = SP_FAILED_UNWIND_MARKER; */
+ goto exit;
+ }
+ unsigned long nsp = GET_SP (ncontext);
+ /* Check the new stack pointer */
+ if (nsp <= wctx.sp || nsp > wctx.sp + sizeof (ucontext_t) + 1024)
+ {
+ /* lbuf[ind++] = SP_FAILED_UNWIND_MARKER; */
+ goto exit;
+ }
+ wctx.sp = nsp;
+ wctx.fp = GET_FP (ncontext);
+ break;
+ }
+#endif /* WSIZE() */
+ if (bptr != NULL && extra_frame && wctx.sp <= (unsigned long) bptr && ind < 2)
+ {
+ lbuf[0] = wctx.pc;
+ if (ind == 0)
+ {
+ ind++;
+ if (ind >= lsize)
+ break;
+ }
+ }
+ if (bptr == NULL || wctx.sp > (unsigned long) bptr)
+ {
+ lbuf[ind++] = wctx.pc;
+ if (ind >= lsize)
+ goto exit;
+ }
+ }
+ }
+
+exit:
+#if defined(DEBUG)
+ if ((SP_DUMP_UNWIND & __collector_tracelevel) != 0)
+ {
+ DprintfT (SP_DUMP_UNWIND, "stack_unwind (x86 walk):%d found %d frames\n\n", __LINE__, ind);
+ for (int i = 0; i < ind; i++)
+ DprintfT (SP_DUMP_UNWIND, " %3d: 0x%lx\n", i, (unsigned long) lbuf[i]);
+ }
+#endif
+ dump_stack (__LINE__);
+ if (ind >= lsize)
+ {
+ ind = lsize - 1;
+ lbuf[ind++] = (unsigned long) SP_TRUNC_STACK_MARKER;
+ }
+ return ind * sizeof (long);
+}
+
+#elif ARCH(Aarch64)
+
+static int
+stack_unwind (char *buf, int size, void *bptr, void *eptr, ucontext_t *context, int mode)
+{
+ if (buf && bptr && eptr && context && size + mode > 0)
+ getByteInstruction ((unsigned char *) eptr);
+ int ind = 0;
+ __u64 *lbuf = (void *) buf;
+ int lsize = size / sizeof (__u64);
+ __u64 pc = context->uc_mcontext.pc;
+ __u64 sp = context->uc_mcontext.sp;
+ __u64 stack_base;
+ unsigned long tbgn = 0;
+ unsigned long tend = 0;
+
+ unsigned long *sbase = (unsigned long*) __collector_tsd_get_by_key (unwind_key);
+ if (sbase && *sbase > sp)
+ stack_base = *sbase;
+ else
+ {
+ stack_base = sp + 0x100000;
+ if (stack_base < sp) // overflow
+ stack_base = (__u64) -1;
+ }
+ DprintfT (SP_DUMP_UNWIND,
+ "unwind.c:%d stack_unwind %2d pc=0x%llx sp=0x%llx stack_base=0x%llx\n",
+ __LINE__, ind, (unsigned long long) pc, (unsigned long long) sp,
+ (unsigned long long) stack_base);
+
+ while (sp && pc)
+ {
+ DprintfT (SP_DUMP_UNWIND,
+ "unwind.c:%d stack_unwind %2d pc=0x%llx sp=0x%llx\n",
+ __LINE__, ind, (unsigned long long) pc, (unsigned long long) sp);
+// Dl_info dlinfo;
+// if (!dladdr ((void *) pc, &dlinfo))
+// break;
+// DprintfT (SP_DUMP_UNWIND, "%2d: %llx <%s+%llu> (%s)\n",
+// ind, (unsigned long long) pc,
+// dlinfo.dli_sname ? dlinfo.dli_sname : "(?)",
+// (unsigned long long) pc - (unsigned long long) dlinfo.dli_saddr,
+// dlinfo.dli_fname);
+ lbuf[ind++] = pc;
+ if (ind >= lsize || sp >= stack_base || (sp & 15) != 0)
+ break;
+ if (pc < tbgn || pc >= tend)
+ if (!__collector_check_segment ((unsigned long) pc, &tbgn, &tend, 0))
+ {
+ DprintfT (SP_DUMP_UNWIND,
+ "unwind.c:%d __collector_check_segment failed. sp=0x%lx\n",
+ __LINE__, (unsigned long) sp);
+ break;
+ }
+ pc = ((__u64 *) sp)[1];
+ __u64 old_sp = sp;
+ sp = ((__u64 *) sp)[0];
+ if (sp < old_sp)
+ break;
+ }
+ if (ind >= lsize)
+ {
+ ind = lsize - 1;
+ lbuf[ind++] = (__u64) SP_TRUNC_STACK_MARKER;
+ }
+ return ind * sizeof (__u64);
+}
+#endif /* ARCH() */
diff --git a/gprofng/src/ABS.h b/gprofng/src/ABS.h
new file mode 100644
index 00000000000..a5bcbea16b6
--- /dev/null
+++ b/gprofng/src/ABS.h
@@ -0,0 +1,62 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _ABS_H
+#define _ABS_H
+
+/*
+ * Apropos Backtracking Scheme definitions.
+ * Class: com_sun_forte_st_mpmt_timeline_HWCEvent
+ */
+
+/* ABS failure codes */
+typedef enum
+{
+ ABS_NULL = 0x00, /* undefined/disabled/inactive */
+ ABS_UNSUPPORTED = 0x01, /* inappropriate HWC event type */
+ ABS_BLOCKED = 0x02, /* runtime backtrack blocker reached */
+ ABS_INCOMPLETE = 0x03, /* runtime backtrack limit reached */
+ ABS_REG_LOSS = 0x04, /* address register contaminated */
+ ABS_INVALID_EA = 0x05, /* invalid effective address value */
+ ABS_NO_CTI_INFO = 0x10, /* no AnalyzerInfo for validation */
+ ABS_INFO_FAILED = 0x20, /* info failed to validate backtrack */
+ ABS_CTI_TARGET = 0x30, /* CTI target invalidated backtrack */
+ ABS_CODE_RANGE = 0xFF /* reserved ABS code range in Vaddr */
+} ABS_code;
+
+enum {
+ NUM_ABS_RT_CODES = 7,
+ NUM_ABS_PP_CODES = 5
+};
+
+extern const char *ABS_RT_CODES[NUM_ABS_RT_CODES];
+extern char *ABS_PP_CODES[NUM_ABS_PP_CODES];
+
+/* libcollector will mark HWC overflow values that appear to be invalid */
+/* dbe should check HWC values for errors */
+#define HWCVAL_ERR_FLAG (1ULL<<63)
+#define HWCVAL_SET_ERR(ctr) ((ctr) | HWCVAL_ERR_FLAG)
+#define HWCVAL_HAS_ERR(ctr) ((ctr) & HWCVAL_ERR_FLAG ? 1 : 0)
+#define HWCVAL_CLR_ERR(ctr) ((ctr) & ~HWCVAL_ERR_FLAG)
+
+#define ABS_GET_RT_CODE(EA) ((EA) & 0x0FLL)
+#define ABS_GET_PP_CODE(EA) (((EA) & 0xF0LL) / 0xF)
+
+#endif /* _ABS_H */
diff --git a/gprofng/src/Application.cc b/gprofng/src/Application.cc
new file mode 100644
index 00000000000..e28956c28f4
--- /dev/null
+++ b/gprofng/src/Application.cc
@@ -0,0 +1,259 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <stdlib.h>
+#include <strings.h>
+#include <sys/param.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+#include "Application.h"
+#include "Settings.h"
+#include "i18n.h"
+#include "util.h"
+
+Application::ProgressFunc Application::progress_func = NULL;
+Application *theApplication;
+
+Application::Application (int argc, char *argv[], char *fdhome)
+{
+ theApplication = this;
+ cur_dir = NULL;
+ prog_version = dbe_strdup (VERSION);
+ set_name (strchr (argv[0], '/') ? argv[0] : NULL);
+ whoami = get_basename (get_name ());
+
+ // set up a queue for comments
+ commentq = new Emsgqueue (NTXT ("app_commentq"));
+
+ // Locate where the binaries are installed
+ set_run_dir (fdhome);
+
+ // Initialize I18N
+ init_locale (run_dir);
+
+ // Initialize licensing data
+ lic_found = 0;
+ lic_err = NULL;
+
+ // Initialize worker threads
+ number_of_worker_threads = 1;
+#if DEBUG
+ char *use_worker_threads = getenv (NTXT ("SP_USE_WORKER_THREADS"));
+ if ((NULL != use_worker_threads) && (0 == strcasecmp (use_worker_threads, NTXT ("no"))))
+ {
+ number_of_worker_threads = 0;
+ }
+#endif /* DEBUG */
+ settings = new Settings (this);
+}
+
+Application::~Application ()
+{
+ delete commentq;
+ delete settings;
+ free (prog_version);
+ free (cur_dir);
+ free (prog_name);
+ free (run_dir);
+}
+
+// Set the name of the application (for messages)
+void
+Application::set_name (const char *_name)
+{
+ prog_name = get_realpath (_name);
+}
+
+char *
+Application::get_realpath (const char *_name)
+{
+ if (_name == NULL)
+ _name = "/proc/self/exe";
+ char *exe_name = realpath (_name, NULL);
+ if (exe_name)
+ return exe_name;
+ if (strchr (_name, '/') == NULL)
+ {
+ char *path = getenv ("PATH");
+ if (path)
+ for (char *s = path;; s++)
+ if (*s == ':' || *s == 0)
+ {
+ if (path != s)
+ {
+ char *nm = dbe_sprintf (NTXT ("%.*s/%s"), (int) (path - s - 1), path, _name);
+ exe_name = realpath (nm, NULL);
+ free (nm);
+ if (exe_name)
+ return exe_name;
+ }
+ if (*s == 0)
+ break;
+ path = s + 1;
+ }
+ }
+ return strdup (_name);
+}
+
+// Set the directory where all binaries are found
+void
+Application::set_run_dir (char *fdhome)
+{
+ run_dir_with_spaces = NULL;
+ if (fdhome)
+ {
+ char *path = dbe_sprintf ("%s/bin", fdhome);
+ struct stat sbuf;
+ if (stat (path, &sbuf) != -1)
+ run_dir = path;
+ else
+ {
+ free (path);
+ run_dir = dbe_strdup (fdhome);
+ }
+ }
+ else
+ {
+ run_dir = realpath (prog_name, NULL);
+ if (run_dir == NULL)
+ {
+ fprintf (stderr, // I18N won't work here -- not catopen yet.
+ GTXT ("Can't find location of %s\n"), prog_name);
+ run_dir = dbe_strdup (get_cur_dir ());
+ }
+ else
+ {
+ char *d = strrchr (run_dir, '/');
+ if (d)
+ *d = 0;
+ // Check if the installation path contains spaces
+ if (strchr (run_dir, ' ') != NULL)
+ {
+ // Create a symbolic link without spaces
+ const char *dir = NTXT ("/tmp/.gprofngLinks");
+ char *symbolic_link = dbe_create_symlink_to_path (run_dir, dir);
+ if (NULL != symbolic_link)
+ {
+ // Save old path to avoid memory leak
+ run_dir_with_spaces = run_dir;
+ // Use the path through symbolic link
+ run_dir = symbolic_link;
+ }
+ }
+ }
+ }
+}
+
+char *
+Application::get_cur_dir ()
+{
+ if (cur_dir == NULL)
+ {
+ char cwd[MAXPATHLEN];
+ if (getcwd (cwd, sizeof (cwd)) == NULL)
+ {
+ perror (prog_name);
+ exit (1);
+ }
+ cur_dir = dbe_strdup (canonical_path (cwd));
+ }
+ return cur_dir;
+}
+
+/**
+ * Get number of worker threads
+ * This is used to decide if it is ok to use worker threads for stat()
+ * and other actions that can hang for a long time
+ * @return number_of_worker_threads
+ */
+int
+Application::get_number_of_worker_threads ()
+{
+ return number_of_worker_threads;
+}
+
+int
+Application::check_args (int argc, char *argv[])
+{
+ int opt;
+ // Parsing the command line
+ opterr = 0;
+ while ((opt = getopt (argc, argv, "V")) != EOF)
+ switch (opt)
+ {
+ case 'V':
+// Ruud
+ Application::print_version_info ();
+/*
+ printf (NTXT ("GNU %s version %s\n"), get_basename (prog_name), VERSION);
+*/
+ exit (0);
+ default:
+ usage ();
+ }
+ return optind;
+}
+
+Emsg *
+Application::fetch_comments ()
+{
+ if (commentq == NULL)
+ return NULL;
+ return commentq->fetch ();
+}
+
+void
+Application::queue_comment (Emsg *m)
+{
+ commentq->append (m);
+}
+
+void
+Application::delete_comments ()
+{
+ if (commentq != NULL)
+ {
+ delete commentq;
+ commentq = new Emsgqueue (NTXT ("app_commentq"));
+ }
+}
+
+int
+Application::set_progress (int percentage, const char *proc_str)
+{
+ if (progress_func != NULL)
+ return progress_func (percentage, proc_str);
+ return 0;
+}
+
+// Ruud
+void
+Application::print_version_info ()
+{
+ printf ( GTXT (
+ "GNU %s binutils version %s\n"
+ "Copyright (C) 2021 Free Software Foundation, Inc.\n"
+ "License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.\n"
+ "This is free software: you are free to change and redistribute it.\n"
+ "There is NO WARRANTY, to the extent permitted by law.\n"),
+ get_basename (prog_name), VERSION);
+}
diff --git a/gprofng/src/Application.h b/gprofng/src/Application.h
new file mode 100644
index 00000000000..404383b6c49
--- /dev/null
+++ b/gprofng/src/Application.h
@@ -0,0 +1,108 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+/*
+ * The Application class is the base class for all C++ executables
+ * in the Performance Tools Suite
+ *
+ * It determines the directory from which the running binary came,
+ * sets up the I18N catalog, the program name, and initializes
+ * an instance of the Settings class to manage all user preferences
+ * and settings. It also manages usage tracking.
+ *
+ * Applications which read experiments are derived from a subclass
+ * named DbeApplication (q.v.)
+ */
+
+#ifndef _APPLICATION_H
+#define _APPLICATION_H
+
+#include "dbe_types.h"
+
+class Settings;
+class Emsg;
+class Emsgqueue;
+
+// Application object
+class Application
+{
+public:
+ Application (int argc, char *argv[], char *_run_dir = NULL);
+ virtual ~Application ();
+ void set_name (const char *_name);
+ char *get_cur_dir ();
+
+ // Control the settings of a progress bar, used for GUI applications
+ // this function also detects cancel requests and returns 1
+ // if yes, 0 otherwise
+ static int set_progress (int percentage, const char *proc_str);
+ static char *get_realpath (const char *_name);
+
+ // queue for messages (from reading er.rc files, ...)
+ void queue_comment (Emsg *m); // queue for messages
+ Emsg *fetch_comments (void); // fetch the queue of comment messages
+ void delete_comments (void); // delete the queue of comment messages
+
+ // worker threads (currently used in dbe_stat() for stat() calls)
+ int get_number_of_worker_threads ();
+
+ char *get_version () { return prog_version; }
+ char *get_name () { return prog_name; }
+ char *get_run_dir () { return run_dir; }
+ Emsgqueue *get_comments_queue () { return commentq; };
+
+protected: // methods
+ void set_run_dir (char *fdhome = NULL);
+ typedef int (*ProgressFunc)(int, const char *);
+
+ // Write a usage message; to be defined in derived class
+ virtual void usage () = 0;
+
+// Ruud
+ // Write a version message; to be defined in derived class
+ void print_version_info ();
+
+ // Can be overridden in derived class
+ virtual int check_args (int argc, char *argv[]);
+
+ void read_rc ();
+ static void set_progress_func (ProgressFunc func) { progress_func = func; }
+
+protected:
+ Emsgqueue *commentq;
+ Settings *settings;
+ char *prog_version;
+ char *prog_name;
+ char *whoami;
+ char *run_dir;
+ char *run_dir_with_spaces; // used in case there are spaces
+ char *cur_dir;
+ int lic_found;
+ char *lic_err;
+
+private:
+ void set_ut_email (int argc, char *argv[]);
+ int number_of_worker_threads;
+ static ProgressFunc progress_func;
+};
+
+extern Application *theApplication;
+
+#endif /* _APPLICATION_H */
diff --git a/gprofng/src/ArchiveExp.cc b/gprofng/src/ArchiveExp.cc
new file mode 100644
index 00000000000..e7ebfa913cc
--- /dev/null
+++ b/gprofng/src/ArchiveExp.cc
@@ -0,0 +1,149 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <stdio.h>
+#include <unistd.h>
+
+#include "util.h"
+#include "DbeSession.h"
+#include "LoadObject.h"
+#include "ArchiveExp.h"
+#include "DbeFile.h"
+#include "CallStack.h"
+#include "gp-archive.h"
+#include "Function.h"
+#include "Module.h"
+
+ArchiveExp::ArchiveExp (char *path) : Experiment ()
+{
+ force_flag = false;
+ copyso_flag = false;
+ use_fndr_archives = true;
+ status = find_expdir (path);
+ if (status == SUCCESS)
+ read_log_file ();
+}
+
+ArchiveExp::~ArchiveExp () { }
+
+void
+ArchiveExp::read_data (int s_option)
+{
+ read_archives ();
+ read_map_file ();
+ if (read_java_classes_file () == SUCCESS)
+ {
+ for (int i = 0, sz = loadObjs ? loadObjs->size () : 0; i < sz; i++)
+ {
+ LoadObject *lo = loadObjs->get (i);
+ Dprintf (DEBUG_ARCHIVE, NTXT ("%s:%d loadObjs[%d]=%-25s %s\n"),
+ get_basename (__FILE__), (int) __LINE__, i,
+ STR (lo->get_name ()), STR (lo->get_pathname ()));
+ if ((lo->dbeFile->filetype & DbeFile::F_JAVACLASS) == 0)
+ continue;
+ lo->isUsed = true;
+ if ((s_option & ARCH_EXE_ONLY) != 0)
+ continue;
+ lo->sync_read_stabs ();
+ }
+ }
+ if ((s_option & (ARCH_USED_EXE_ONLY | ARCH_USED_SRC_ONLY)) != 0)
+ {
+ read_frameinfo_file ();
+ resolveFrameInfo = true;
+ Vector<DataDescriptor*> *ddscr = getDataDescriptors ();
+ delete ddscr; // getDataDescriptors() forces reading of experiment data
+ CallStack *callStack = callTree ();
+ if (callStack)
+ {
+ if (DEBUG_ARCHIVE)
+ {
+ Dprintf (DEBUG_ARCHIVE, NTXT ("stacks=%p\n"), callStack);
+ callStack->print (NULL);
+ }
+ for (int n = 0;; n++)
+ {
+ CallStackNode *node = callStack->get_node (n);
+ if (node == NULL)
+ break;
+ do
+ {
+ Histable *h = node->get_instr ();
+ Histable::Type t = h->get_type ();
+ if (t == Histable::INSTR)
+ {
+ DbeInstr *dbeInstr = (DbeInstr *) h;
+ if (!dbeInstr->isUsed)
+ {
+ Function *func = (Function *) dbeInstr->convertto (Histable::FUNCTION);
+ if (!func->isUsed)
+ {
+ func->isUsed = true;
+ func->module->isUsed = true;
+ func->module->loadobject->isUsed = true;
+ }
+ DbeLine *dbeLine = (DbeLine *) dbeInstr->convertto (Histable::LINE);
+ if (dbeLine)
+ dbeLine->sourceFile->isUsed = true;
+ }
+ }
+ else if (t == Histable::LINE)
+ {
+ DbeLine * dbeLine = (DbeLine *) h;
+ dbeLine->sourceFile->isUsed = true;
+ }
+ node = node->ancestor;
+ }
+ while (node);
+ }
+ }
+ }
+}
+
+char *
+ArchiveExp::createLinkToFndrArchive (LoadObject *lo, int /* hide_msg */)
+{
+ // For example, archives of libc.so will be:
+ // <exp>/archives/<libc.so_check_sum>
+ // <exp>/M_r0.er/archives/libc.so_<hash> -> ../../archives/<libc.so_check_sum>
+ if (!create_dir (get_fndr_arch_name ()))
+ {
+ fprintf (stderr, GTXT ("Unable to create directory `%s'\n"), get_fndr_arch_name ());
+ return NULL;
+ }
+ uint32_t checksum = lo->get_checksum ();
+ char *linkName = dbe_sprintf (NTXT ("../../%s/%u"), SP_ARCHIVES_DIR, checksum);
+ char *nm = lo->get_pathname ();
+ char *symLinkName = getNameInArchive (nm, false);
+ if (symlink (linkName, symLinkName) != 0)
+ {
+ fprintf (stderr, GTXT ("Unable to create link `%s' -> `%s'\n"),
+ symLinkName, linkName);
+ free (linkName);
+ free (symLinkName);
+ return NULL;
+ }
+ free (linkName);
+ free (symLinkName);
+
+ // Return a full path inside founder archive:
+ return dbe_sprintf (NTXT ("%s/%u"), get_fndr_arch_name (), checksum);
+}
diff --git a/gprofng/src/ArchiveExp.h b/gprofng/src/ArchiveExp.h
new file mode 100644
index 00000000000..809ed58dc40
--- /dev/null
+++ b/gprofng/src/ArchiveExp.h
@@ -0,0 +1,41 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _ARCHIVE_EXP_H
+#define _ARCHIVE_EXP_H
+
+#include "Experiment.h"
+class LoadObject;
+
+class ArchiveExp : public Experiment
+{
+public:
+ ArchiveExp (char *path);
+ ~ArchiveExp ();
+ char *createLinkToFndrArchive (LoadObject *lo, int hide_msg);
+ void read_data (int s_option);
+
+private:
+ bool force_flag;
+ bool copyso_flag;
+ bool use_fndr_archives;
+};
+
+#endif /* _ARCHIVE_EXP_H */
diff --git a/gprofng/src/BaseMetric.cc b/gprofng/src/BaseMetric.cc
new file mode 100644
index 00000000000..bb51ddf62d3
--- /dev/null
+++ b/gprofng/src/BaseMetric.cc
@@ -0,0 +1,975 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <strings.h>
+#include <stdlib.h>
+
+#include "util.h"
+#include "BaseMetric.h"
+#include "DbeSession.h"
+#include "Expression.h"
+
+int BaseMetric::last_id = 0;
+
+void
+BaseMetric::init (Type t)
+{
+ id = last_id++;
+ type = t;
+ aux = NULL;
+ cmd = NULL;
+ username = NULL;
+ hw_ctr = NULL;
+ cond = NULL;
+ val = NULL;
+ expr = NULL;
+ cond_spec = NULL;
+ val_spec = NULL;
+ expr_spec = NULL;
+ legend = NULL;
+ definition = NULL;
+ dependent_bm = NULL;
+ zeroThreshold = 0;
+ clock_unit = (Presentation_clock_unit) 0;
+ for (int ii = 0; ii < NSUBTYPES; ii++)
+ default_visbits[ii] = VAL_NA;
+ valtype = VT_DOUBLE;
+ precision = METRIC_HR_PRECISION;
+ flavors = EXCLUSIVE | INCLUSIVE | ATTRIBUTED;
+ value_styles = VAL_TIMEVAL | VAL_PERCENT;
+}
+
+BaseMetric::BaseMetric (Type t)
+{
+ init (t);
+ switch (t)
+ {
+ case CP_LMS_USER:
+ case CP_LMS_SYSTEM:
+ case CP_LMS_WAIT_CPU:
+ case CP_LMS_USER_LOCK:
+ case CP_LMS_TFAULT:
+ case CP_LMS_DFAULT:
+ case OMP_MASTER_THREAD:
+ case CP_TOTAL:
+ case CP_TOTAL_CPU:
+ case CP_LMS_TRAP:
+ case CP_LMS_KFAULT:
+ case CP_LMS_SLEEP:
+ case CP_LMS_STOPPED:
+ case OMP_NONE:
+ case OMP_OVHD:
+ case OMP_WORK:
+ case OMP_IBAR:
+ case OMP_EBAR:
+ case OMP_WAIT:
+ case OMP_SERL:
+ case OMP_RDUC:
+ case OMP_LKWT:
+ case OMP_CTWT:
+ case OMP_ODWT:
+ case OMP_MSTR:
+ case OMP_SNGL:
+ case OMP_ORDD:
+ case CP_KERNEL_CPU:
+ // all of these are floating point, precision = clock profile tick
+ valtype = VT_DOUBLE;
+ precision = METRIC_SIG_PRECISION;
+ flavors = EXCLUSIVE | INCLUSIVE | ATTRIBUTED;
+ value_styles = VAL_TIMEVAL | VAL_PERCENT;
+ break;
+ case SYNC_WAIT_TIME:
+ case IO_READ_TIME:
+ case IO_WRITE_TIME:
+ case IO_OTHER_TIME:
+ case IO_ERROR_TIME:
+ // all of these are floating point, precision = hrtime tick
+ valtype = VT_DOUBLE;
+ precision = METRIC_HR_PRECISION;
+ flavors = EXCLUSIVE | INCLUSIVE | ATTRIBUTED;
+ value_styles = VAL_TIMEVAL | VAL_PERCENT;
+ break;
+ case SYNC_WAIT_COUNT:
+ case HEAP_ALLOC_CNT:
+ case HEAP_LEAK_CNT:
+ case IO_READ_CNT:
+ case IO_WRITE_CNT:
+ case IO_OTHER_CNT:
+ case IO_ERROR_CNT:
+ valtype = VT_LLONG;
+ precision = 1;
+ flavors = EXCLUSIVE | INCLUSIVE | ATTRIBUTED;
+ value_styles = VAL_VALUE | VAL_PERCENT;
+ break;
+ case RACCESS:
+ case DEADLOCKS:
+ // all of these are integer
+ valtype = VT_LLONG;
+ precision = 1;
+ flavors = EXCLUSIVE | INCLUSIVE | ATTRIBUTED;
+ value_styles = VAL_VALUE | VAL_PERCENT;
+ zeroThreshold = 1;
+ break;
+ case HEAP_ALLOC_BYTES:
+ case HEAP_LEAK_BYTES:
+ case IO_READ_BYTES:
+ case IO_WRITE_BYTES:
+ // all of these are longlong
+ valtype = VT_ULLONG;
+ precision = 1;
+ flavors = EXCLUSIVE | INCLUSIVE | ATTRIBUTED;
+ value_styles = VAL_VALUE | VAL_PERCENT;
+ break;
+ case SIZES:
+ valtype = VT_LLONG;
+ precision = 1;
+ flavors = STATIC;
+ value_styles = VAL_VALUE;
+ break;
+ case ADDRESS:
+ valtype = VT_ADDRESS;
+ precision = 1;
+ flavors = STATIC;
+ value_styles = VAL_VALUE;
+ break;
+ case ONAME:
+ valtype = VT_LABEL;
+ precision = 0;
+ flavors = STATIC;
+ value_styles = VAL_VALUE;
+ break;
+ case HWCNTR: // We should call the other constructor for hwc metric
+ default:
+ abort ();
+ }
+ specify ();
+}
+
+// Constructor for linked HW counters (base counter)
+BaseMetric::BaseMetric (Hwcentry *ctr, const char* _aux, const char* _username,
+ int v_styles, BaseMetric* _dependent_bm)
+{
+ hwc_init (ctr, _aux, _aux, _username, v_styles);
+ dependent_bm = _dependent_bm;
+}
+
+// Constructor for linked HW counters (derived counter)
+
+BaseMetric::BaseMetric (Hwcentry *ctr, const char *_aux, const char *_cmdname,
+ const char *_username, int v_styles)
+{
+ hwc_init (ctr, _aux, _cmdname, _username, v_styles);
+}
+
+void
+BaseMetric::hwc_init (Hwcentry *ctr, const char* _aux, const char* _cmdname,
+ const char* _username, int v_styles)
+{
+ init (HWCNTR);
+ aux = dbe_strdup (_aux); // HWC identifier
+ cmd = dbe_strdup (_cmdname); // may differ from _aux for cycles->time hwcs
+ username = dbe_strdup (_username);
+ flavors = EXCLUSIVE | INCLUSIVE | ATTRIBUTED;
+ value_styles = v_styles | VAL_PERCENT;
+ if ((value_styles & (VAL_TIMEVAL | VAL_VALUE)) == VAL_TIMEVAL)
+ valtype = VT_DOUBLE;
+ else
+ valtype = VT_ULLONG;
+ if (ABST_MEMSPACE_ENABLED (ctr->memop))
+ flavors |= DATASPACE; // only for ctrs with memop definitions
+ hw_ctr = ctr;
+ specify ();
+}
+
+// Constructor for derived metrics
+BaseMetric::BaseMetric (const char *_cmd, const char *_username,
+ Definition *def)
+{
+ init (DERIVED);
+ cmd = dbe_strdup (_cmd);
+ username = dbe_strdup (_username);
+ aux = dbe_strdup (_cmd);
+ definition = def;
+ flavors = EXCLUSIVE | INCLUSIVE | ATTRIBUTED;
+ clock_unit = CUNIT_NULL; // should it be CUNIT_TIME or 0 or something?
+
+ /* we're not going to process packets for derived metrics */
+ packet_type = (ProfData_type) (-1);
+ value_styles = VAL_VALUE;
+ valtype = VT_DOUBLE;
+ precision = 1000;
+}
+
+// Copy constructor
+BaseMetric::BaseMetric (const BaseMetric& m)
+{
+ id = m.id;
+ type = m.type;
+ aux = dbe_strdup (m.aux);
+ cmd = dbe_strdup (m.cmd);
+ username = dbe_strdup (m.username);
+ flavors = m.flavors;
+ value_styles = m.value_styles;
+ valtype = m.valtype;
+ precision = m.precision;
+ hw_ctr = m.hw_ctr;
+ packet_type = m.packet_type;
+ zeroThreshold = m.zeroThreshold;
+ clock_unit = m.clock_unit;
+ for (int ii = 0; ii < NSUBTYPES; ii++)
+ default_visbits[ii] = m.default_visbits[ii];
+ if (m.cond_spec)
+ {
+ cond_spec = strdup (m.cond_spec);
+ cond = m.cond->copy ();
+ }
+ else
+ {
+ cond = NULL;
+ cond_spec = NULL;
+ }
+ if (m.val_spec)
+ {
+ val_spec = strdup (m.val_spec);
+ val = m.val->copy ();
+ }
+ else
+ {
+ val = NULL;
+ val_spec = NULL;
+ }
+ if (m.expr_spec)
+ {
+ expr_spec = strdup (m.expr_spec);
+ expr = m.expr->copy ();
+ }
+ else
+ {
+ expr = NULL;
+ expr_spec = NULL;
+ }
+ legend = dbe_strdup (m.legend);
+ definition = NULL;
+ if (m.definition)
+ definition = Definition::add_definition (m.definition->def);
+ dependent_bm = m.dependent_bm;
+}
+
+BaseMetric::~BaseMetric ()
+{
+ free (aux);
+ free (cmd);
+ free (cond_spec);
+ free (val_spec);
+ free (expr_spec);
+ free (legend);
+ free (username);
+ delete cond;
+ delete val;
+ delete expr;
+ delete definition;
+}
+
+bool
+BaseMetric::is_internal ()
+{
+ return (get_value_styles () & VAL_INTERNAL) != 0;
+}
+
+int
+BaseMetric::get_default_visbits (SubType subtype)
+{
+ int rc = VAL_NA;
+ switch (subtype)
+ {
+ case STATIC:
+ case EXCLUSIVE:
+ rc = default_visbits[0];
+ break;
+ case INCLUSIVE:
+ rc = default_visbits[1];
+ break;
+ default:
+ break;
+ }
+ return rc;
+}
+
+void
+BaseMetric::set_default_visbits (SubType subtype, int _visbits)
+{
+ switch (subtype)
+ {
+ case STATIC:
+ case EXCLUSIVE:
+ default_visbits[0] = _visbits;
+ break;
+ case INCLUSIVE:
+ default_visbits[1] = _visbits;
+ break;
+ default:
+ break;
+ }
+}
+
+void
+BaseMetric::set_cond_spec (char *_cond_spec)
+{
+ if (cond_spec)
+ {
+ free (cond_spec);
+ delete cond;
+ cond_spec = NULL;
+ cond = NULL;
+ }
+ if (_cond_spec)
+ {
+ cond = dbeSession->ql_parse (_cond_spec);
+ if (cond == NULL)
+ {
+ fprintf (stderr, GTXT ("Invalid expression in metric specification `%s'\n"), _cond_spec);
+ abort ();
+ }
+ cond_spec = dbe_strdup (_cond_spec);
+ }
+}
+
+void
+BaseMetric::set_val_spec (char *_val_spec)
+{
+ if (val_spec)
+ {
+ free (val_spec);
+ delete val;
+ val_spec = NULL;
+ val = NULL;
+ }
+ if (_val_spec)
+ {
+ val = dbeSession->ql_parse (_val_spec);
+ if (val == NULL)
+ {
+ fprintf (stderr, GTXT ("Invalid expression in metric specification `%s'\n"), _val_spec);
+ abort ();
+ }
+ val_spec = dbe_strdup (_val_spec);
+ }
+}
+
+void
+BaseMetric::set_expr_spec (char *_expr_spec)
+{
+ id = last_id++;
+ if (expr_spec)
+ {
+ free (expr_spec);
+ delete expr;
+ expr_spec = NULL;
+ expr = NULL;
+ }
+ if (_expr_spec)
+ {
+ expr = dbeSession->ql_parse (_expr_spec);
+ if (expr == NULL)
+ {
+ fprintf (stderr, GTXT ("Invalid expression in metric specification `%s'\n"), _expr_spec);
+ return;
+ }
+ expr_spec = dbe_strdup (_expr_spec);
+ }
+}
+
+void
+BaseMetric::specify_mstate_metric (int st)
+{
+ char buf[128];
+ snprintf (buf, sizeof (buf), NTXT ("MSTATE==%d"), st);
+ specify_prof_metric (buf);
+}
+
+void
+BaseMetric::specify_ompstate_metric (int st)
+{
+ char buf[128];
+ snprintf (buf, sizeof (buf), NTXT ("OMPSTATE==%d"), st);
+ specify_prof_metric (buf);
+}
+
+void
+BaseMetric::specify_prof_metric (char *_cond_spec)
+{
+ packet_type = DATA_CLOCK;
+ specify_metric (_cond_spec, NTXT ("NTICK_USEC")); // microseconds
+}
+
+void
+BaseMetric::specify_metric (char *_cond_spec, char *_val_spec)
+{
+ set_cond_spec (_cond_spec);
+ set_val_spec (_val_spec);
+}
+
+void
+BaseMetric::specify ()
+{
+ enum
+ {
+ IDLE_STATE_BITS =
+ (1 << OMP_IDLE_STATE) | (1 << OMP_IBAR_STATE) | (1 << OMP_EBAR_STATE) |
+ (1 << OMP_LKWT_STATE) | (1 << OMP_CTWT_STATE) | (1 << OMP_ODWT_STATE) |
+ (1 << OMP_ATWT_STATE) | (1 << OMP_TSKWT_STATE),
+ LMS_USER_BITS =
+ (1 << OMP_NO_STATE) | (1 << OMP_WORK_STATE) | (1 << OMP_SERL_STATE) |
+ (1 << OMP_RDUC_STATE)
+ };
+
+ char buf[256];
+ char buf2[256];
+ packet_type = (ProfData_type) - 1; // illegal value
+ clock_unit = CUNIT_TIME;
+ switch (type)
+ {
+ case SIZES:
+ username = dbe_strdup (GTXT ("Size"));
+ clock_unit = CUNIT_BYTES;
+ cmd = dbe_strdup (NTXT ("size"));
+ break;
+ case ADDRESS:
+ username = dbe_strdup (GTXT ("PC Address"));
+ cmd = dbe_strdup (NTXT ("address"));
+ break;
+ case ONAME:
+ username = dbe_strdup (GTXT ("Name"));
+ cmd = dbe_strdup (NTXT ("name"));
+ break;
+ case CP_LMS_SYSTEM:
+ username = dbe_strdup (GTXT ("System CPU Time"));
+ specify_mstate_metric (LMS_SYSTEM);
+ cmd = dbe_strdup (NTXT ("system"));
+ break;
+ case CP_TOTAL_CPU:
+ username = dbe_strdup (GTXT ("Total CPU Time"));
+ snprintf (buf, sizeof (buf),
+ "(MSTATE==%d)||(MSTATE==%d)||(MSTATE==%d)||(MSTATE==%d)",
+ LMS_USER, LMS_SYSTEM, LMS_TRAP, LMS_LINUX_CPU);
+ specify_prof_metric (buf);
+ cmd = dbe_strdup (NTXT ("totalcpu"));
+ break;
+ case CP_TOTAL:
+ username = dbe_strdup (GTXT ("Total Thread Time"));
+ snprintf (buf, sizeof (buf), NTXT ("(MSTATE!=%d)&&(MSTATE!=%d)"),
+ LMS_KERNEL_CPU, LMS_LINUX_CPU);
+ specify_prof_metric (buf);
+ cmd = dbe_strdup (NTXT ("total"));
+ break;
+ case CP_KERNEL_CPU:
+ username = dbe_strdup (GTXT ("Kernel CPU Time"));
+ specify_mstate_metric (LMS_KERNEL_CPU);
+ cmd = dbe_strdup (NTXT ("kcpu"));
+ break;
+ case OMP_MASTER_THREAD:
+ username = dbe_strdup (GTXT ("Master Thread Time"));
+ specify_prof_metric (NTXT ("LWPID==1"));
+ cmd = dbe_strdup (NTXT ("masterthread"));
+ break;
+ case CP_LMS_USER:
+ username = dbe_strdup (GTXT ("User CPU Time"));
+ specify_mstate_metric (LMS_USER);
+ cmd = dbe_strdup (NTXT ("user"));
+ break;
+ case CP_LMS_WAIT_CPU:
+ username = dbe_strdup (GTXT ("Wait CPU Time"));
+ specify_mstate_metric (LMS_WAIT_CPU);
+ cmd = dbe_strdup (NTXT ("wait"));
+ break;
+ case CP_LMS_USER_LOCK:
+ username = dbe_strdup (GTXT ("User Lock Time"));
+ specify_mstate_metric (LMS_USER_LOCK);
+ cmd = dbe_strdup (NTXT ("lock"));
+ break;
+ case CP_LMS_TFAULT:
+ username = dbe_strdup (GTXT ("Text Page Fault Time"));
+ specify_mstate_metric (LMS_TFAULT);
+ cmd = dbe_strdup (NTXT ("textpfault"));
+ break;
+ case CP_LMS_DFAULT:
+ username = dbe_strdup (GTXT ("Data Page Fault Time"));
+ specify_mstate_metric (LMS_DFAULT);
+ cmd = dbe_strdup (NTXT ("datapfault"));
+ break;
+ case CP_LMS_TRAP:
+ username = dbe_strdup (GTXT ("Trap CPU Time"));
+ specify_mstate_metric (LMS_TRAP);
+ cmd = dbe_strdup (NTXT ("trap"));
+ break;
+ case CP_LMS_KFAULT:
+ username = dbe_strdup (GTXT ("Kernel Page Fault Time"));
+ specify_mstate_metric (LMS_KFAULT);
+ cmd = dbe_strdup (NTXT ("kernelpfault"));
+ break;
+ case CP_LMS_SLEEP:
+ username = dbe_strdup (GTXT ("Sleep Time"));
+ specify_mstate_metric (LMS_SLEEP);
+ cmd = dbe_strdup (NTXT ("sleep"));
+ break;
+ case CP_LMS_STOPPED:
+ username = dbe_strdup (GTXT ("Stopped Time"));
+ specify_mstate_metric (LMS_STOPPED);
+ cmd = dbe_strdup (NTXT ("stop"));
+ break;
+ case OMP_OVHD:
+ username = dbe_strdup (GTXT ("OpenMP Overhead Time"));
+ specify_ompstate_metric (OMP_OVHD_STATE);
+ cmd = dbe_strdup (NTXT ("ompovhd"));
+ break;
+ case OMP_WORK:
+ username = dbe_strdup (GTXT ("OpenMP Work Time"));
+ snprintf (buf, sizeof (buf),
+ NTXT ("(OMPSTATE>=0) && (MSTATE==%d) && ((1<<OMPSTATE) & %d)"),
+ LMS_USER, LMS_USER_BITS);
+ specify_prof_metric (buf);
+ cmd = dbe_strdup (NTXT ("ompwork"));
+ break;
+ case OMP_WAIT:
+ username = dbe_strdup (GTXT ("OpenMP Wait Time"));
+ snprintf (buf, sizeof (buf),
+ "OMPSTATE>=0 && ((1<<OMPSTATE) & ((MSTATE!=%d) ? %d : %d))",
+ LMS_USER, (LMS_USER_BITS | IDLE_STATE_BITS), IDLE_STATE_BITS);
+ specify_prof_metric (buf);
+ cmd = dbe_strdup (NTXT ("ompwait"));
+ break;
+ case OMP_IBAR:
+ username = dbe_strdup (GTXT ("OpenMP Implicit Barrier Time"));
+ specify_ompstate_metric (OMP_IBAR_STATE);
+ cmd = dbe_strdup (NTXT ("ompibar"));
+ break;
+ case OMP_EBAR:
+ username = dbe_strdup (GTXT ("OpenMP Explicit Barrier Time"));
+ specify_ompstate_metric (OMP_EBAR_STATE);
+ cmd = dbe_strdup (NTXT ("ompebar"));
+ break;
+ case OMP_SERL:
+ username = dbe_strdup (GTXT ("OpenMP Serial Time"));
+ specify_ompstate_metric (OMP_SERL_STATE);
+ cmd = dbe_strdup (NTXT ("ompserl"));
+ break;
+ case OMP_RDUC:
+ username = dbe_strdup (GTXT ("OpenMP Reduction Time"));
+ specify_ompstate_metric (OMP_RDUC_STATE);
+ cmd = dbe_strdup (NTXT ("omprduc"));
+ break;
+ case OMP_LKWT:
+ username = dbe_strdup (GTXT ("OpenMP Lock Wait Time"));
+ specify_ompstate_metric (OMP_LKWT_STATE);
+ cmd = dbe_strdup (NTXT ("omplkwt"));
+ break;
+ case OMP_CTWT:
+ username = dbe_strdup (GTXT ("OpenMP Critical Section Wait Time"));
+ specify_ompstate_metric (OMP_CTWT_STATE);
+ cmd = dbe_strdup (NTXT ("ompctwt"));
+ break;
+ case OMP_ODWT:
+ username = dbe_strdup (GTXT ("OpenMP Ordered Section Wait Time"));
+ specify_ompstate_metric (OMP_ODWT_STATE);
+ cmd = dbe_strdup (NTXT ("ompodwt"));
+ break;
+ case SYNC_WAIT_TIME:
+ packet_type = DATA_SYNCH;
+ username = dbe_strdup (GTXT ("Sync Wait Time"));
+ snprintf (buf, sizeof (buf), NTXT ("(EVT_TIME)/%lld"),
+ (long long) (NANOSEC / METRIC_HR_PRECISION));
+ specify_metric (NULL, buf);
+ cmd = dbe_strdup (NTXT ("sync"));
+ break;
+ case SYNC_WAIT_COUNT:
+ packet_type = DATA_SYNCH;
+ username = dbe_strdup (GTXT ("Sync Wait Count"));
+ specify_metric (NULL, NTXT ("1"));
+ cmd = dbe_strdup (NTXT ("syncn"));
+ break;
+ case HEAP_ALLOC_CNT:
+ packet_type = DATA_HEAP;
+ username = dbe_strdup (GTXT ("Allocations"));
+ snprintf (buf, sizeof (buf), NTXT ("(HTYPE!=%d)&&(HTYPE!=%d)&&HVADDR"),
+ FREE_TRACE, MUNMAP_TRACE);
+ specify_metric (buf, NTXT ("1"));
+ cmd = dbe_strdup (NTXT ("heapalloccnt"));
+ break;
+ case HEAP_ALLOC_BYTES:
+ packet_type = DATA_HEAP;
+ username = dbe_strdup (GTXT ("Bytes Allocated"));
+ snprintf (buf, sizeof (buf), NTXT ("(HTYPE!=%d)&&(HTYPE!=%d)&&HVADDR"),
+ FREE_TRACE, MUNMAP_TRACE);
+ specify_metric (buf, NTXT ("HSIZE"));
+ cmd = dbe_strdup (NTXT ("heapallocbytes"));
+ break;
+ case HEAP_LEAK_CNT:
+ packet_type = DATA_HEAP;
+ username = dbe_strdup (GTXT ("Leaks"));
+ snprintf (buf, sizeof (buf), "(HTYPE!=%d)&&(HTYPE!=%d)&&HVADDR&&HLEAKED",
+ FREE_TRACE, MUNMAP_TRACE);
+ specify_metric (buf, NTXT ("1"));
+ cmd = dbe_strdup (NTXT ("heapleakcnt"));
+ break;
+ case HEAP_LEAK_BYTES:
+ packet_type = DATA_HEAP;
+ username = dbe_strdup (GTXT ("Bytes Leaked"));
+ snprintf (buf, sizeof (buf), NTXT ("(HTYPE!=%d)&&(HTYPE!=%d)&&HVADDR"),
+ FREE_TRACE, MUNMAP_TRACE);
+ specify_metric (buf, NTXT ("HLEAKED"));
+ cmd = dbe_strdup (NTXT ("heapleakbytes"));
+ break;
+
+ case IO_READ_CNT:
+ packet_type = DATA_IOTRACE;
+ username = dbe_strdup (GTXT ("Read Count"));
+ snprintf (buf, sizeof (buf), "(IOTYPE==%d)", READ_TRACE);
+ specify_metric (buf, NTXT ("1"));
+ cmd = dbe_strdup (NTXT ("ioreadcnt"));
+ break;
+ case IO_WRITE_CNT:
+ packet_type = DATA_IOTRACE;
+ username = dbe_strdup (GTXT ("Write Count"));
+ snprintf (buf, sizeof (buf), "(IOTYPE==%d)", WRITE_TRACE);
+ specify_metric (buf, NTXT ("1"));
+ cmd = dbe_strdup (NTXT ("iowritecnt"));
+ break;
+ case IO_OTHER_CNT:
+ packet_type = DATA_IOTRACE;
+ username = dbe_strdup (GTXT ("Other I/O Count"));
+ snprintf (buf, sizeof (buf), "(IOTYPE==%d)||(IOTYPE==%d)||(IOTYPE==%d)",
+ OPEN_TRACE, CLOSE_TRACE, OTHERIO_TRACE);
+ specify_metric (buf, NTXT ("1"));
+ cmd = dbe_strdup (NTXT ("ioothercnt"));
+ break;
+ case IO_ERROR_CNT:
+ packet_type = DATA_IOTRACE;
+ username = dbe_strdup (GTXT ("I/O Error Count"));
+ snprintf (buf, sizeof (buf),
+ "(IOTYPE==%d)||(IOTYPE==%d)||(IOTYPE==%d)||(IOTYPE==%d)||(IOTYPE==%d)",
+ READ_TRACE_ERROR, WRITE_TRACE_ERROR, OPEN_TRACE_ERROR,
+ CLOSE_TRACE_ERROR, OTHERIO_TRACE_ERROR);
+ specify_metric (buf, NTXT ("1"));
+ cmd = dbe_strdup (NTXT ("ioerrorcnt"));
+ break;
+ case IO_READ_BYTES:
+ packet_type = DATA_IOTRACE;
+ username = dbe_strdup (GTXT ("Read Bytes"));
+ snprintf (buf, sizeof (buf), NTXT ("(IOTYPE==%d)&&IONBYTE"),
+ READ_TRACE);
+ specify_metric (buf, NTXT ("IONBYTE"));
+ cmd = dbe_strdup (NTXT ("ioreadbytes"));
+ break;
+ case IO_WRITE_BYTES:
+ packet_type = DATA_IOTRACE;
+ username = dbe_strdup (GTXT ("Write Bytes"));
+ snprintf (buf, sizeof (buf), "(IOTYPE==%d)&&IONBYTE", WRITE_TRACE);
+ specify_metric (buf, NTXT ("IONBYTE"));
+ cmd = dbe_strdup (NTXT ("iowritebytes"));
+ break;
+ case IO_READ_TIME:
+ packet_type = DATA_IOTRACE;
+ username = dbe_strdup (GTXT ("Read Time"));
+ snprintf (buf, sizeof (buf), "(IOTYPE==%d)&&EVT_TIME", READ_TRACE);
+ snprintf (buf2, sizeof (buf2), NTXT ("(EVT_TIME)/%lld"),
+ (long long) (NANOSEC / METRIC_HR_PRECISION));
+ specify_metric (buf, buf2);
+ cmd = dbe_strdup (NTXT ("ioreadtime"));
+ break;
+ case IO_WRITE_TIME:
+ packet_type = DATA_IOTRACE;
+ username = dbe_strdup (GTXT ("Write Time"));
+ snprintf (buf, sizeof (buf), NTXT ("(IOTYPE==%d)&&EVT_TIME"),
+ WRITE_TRACE);
+ snprintf (buf2, sizeof (buf2), NTXT ("(EVT_TIME)/%lld"),
+ (long long) (NANOSEC / METRIC_HR_PRECISION));
+ specify_metric (buf, buf2);
+ cmd = dbe_strdup (NTXT ("iowritetime"));
+ break;
+ case IO_OTHER_TIME:
+ packet_type = DATA_IOTRACE;
+ username = dbe_strdup (GTXT ("Other I/O Time"));
+ snprintf (buf, sizeof (buf),
+ "(IOTYPE==%d)||(IOTYPE==%d)||(IOTYPE==%d)&&EVT_TIME",
+ OPEN_TRACE, CLOSE_TRACE, OTHERIO_TRACE);
+ snprintf (buf2, sizeof (buf2), NTXT ("(EVT_TIME)/%lld"),
+ (long long) (NANOSEC / METRIC_HR_PRECISION));
+ specify_metric (buf, buf2);
+ cmd = dbe_strdup (NTXT ("ioothertime"));
+ break;
+ case IO_ERROR_TIME:
+ packet_type = DATA_IOTRACE;
+ username = dbe_strdup (GTXT ("I/O Error Time"));
+ snprintf (buf, sizeof (buf),
+ "(IOTYPE==%d)||(IOTYPE==%d)||(IOTYPE==%d)||(IOTYPE==%d)||(IOTYPE==%d)&&EVT_TIME",
+ READ_TRACE_ERROR, WRITE_TRACE_ERROR, OPEN_TRACE_ERROR,
+ CLOSE_TRACE_ERROR, OTHERIO_TRACE_ERROR);
+ snprintf (buf2, sizeof (buf2), NTXT ("(EVT_TIME)/%lld"),
+ (long long) (NANOSEC / METRIC_HR_PRECISION));
+ specify_metric (buf, buf2);
+ cmd = dbe_strdup (NTXT ("ioerrortime"));
+ break;
+ case RACCESS:
+ packet_type = DATA_RACE;
+ username = dbe_strdup (GTXT ("Race Accesses"));
+ specify_metric (NULL, NTXT ("RCNT"));
+ cmd = dbe_strdup (NTXT ("raccess"));
+ break;
+ case DEADLOCKS:
+ packet_type = DATA_DLCK;
+ username = dbe_strdup (GTXT ("Deadlocks"));
+ specify_metric (NULL, NTXT ("1"));
+ cmd = dbe_strdup (NTXT ("deadlocks"));
+ break;
+ case HWCNTR:
+ packet_type = DATA_HWC;
+ // username, cmd, and aux set by hwc constructor
+ if (valtype == VT_DOUBLE)
+ {
+ if (hw_ctr->timecvt > 0) // CPU cycles
+ specify_metric (NULL, NTXT ("((HWCINT*1000000)/FREQ_MHZ)"));
+ else if (hw_ctr->timecvt < 0)
+ { // reference clock (frequency is -timecvt MHz)
+ snprintf (buf, sizeof (buf), NTXT ("((HWCINT*1000000)/%d)"), -hw_ctr->timecvt);
+ specify_metric (NULL, buf);
+ }
+ else // shouldn't happen
+ specify_metric (NULL, NTXT ("0"));
+ // resulting unit: seconds * 1e12
+ precision = 1000000LL * 1000000LL; // Seconds * 1e12
+ }
+ else
+ {
+ specify_metric (NULL, NTXT ("HWCINT"));
+ precision = 1;
+ }
+ break;
+ case OMP_MSTR:
+ case OMP_SNGL:
+ case OMP_ORDD:
+ case OMP_NONE:
+ default:
+ username = dbe_strdup (GTXT ("****"));
+ fprintf (stderr, "BaseMetric::init Undefined basemetric %s\n",
+ get_basetype_name ());
+ }
+}
+
+#define CASE_S(x) case x: s = (char *) #x; break
+char *
+BaseMetric::get_basetype_name ()
+{
+ static char buf[128];
+ char *s;
+ switch (type)
+ {
+ CASE_S (CP_LMS_SYSTEM);
+ CASE_S (CP_TOTAL_CPU);
+ CASE_S (CP_TOTAL);
+ CASE_S (OMP_MASTER_THREAD);
+ CASE_S (CP_LMS_USER);
+ CASE_S (CP_LMS_WAIT_CPU);
+ CASE_S (CP_LMS_USER_LOCK);
+ CASE_S (CP_LMS_TFAULT);
+ CASE_S (CP_LMS_DFAULT);
+ CASE_S (CP_LMS_TRAP);
+ CASE_S (CP_LMS_KFAULT);
+ CASE_S (CP_LMS_SLEEP);
+ CASE_S (CP_LMS_STOPPED);
+ CASE_S (OMP_NONE);
+ CASE_S (OMP_OVHD);
+ CASE_S (OMP_WORK);
+ CASE_S (OMP_IBAR);
+ CASE_S (OMP_EBAR);
+ CASE_S (OMP_WAIT);
+ CASE_S (OMP_SERL);
+ CASE_S (OMP_RDUC);
+ CASE_S (OMP_LKWT);
+ CASE_S (OMP_CTWT);
+ CASE_S (OMP_ODWT);
+ CASE_S (OMP_MSTR);
+ CASE_S (OMP_SNGL);
+ CASE_S (OMP_ORDD);
+ CASE_S (CP_KERNEL_CPU);
+ CASE_S (SYNC_WAIT_TIME);
+ CASE_S (IO_READ_TIME);
+ CASE_S (IO_WRITE_TIME);
+ CASE_S (IO_OTHER_TIME);
+ CASE_S (IO_ERROR_TIME);
+ CASE_S (HWCNTR);
+ CASE_S (SYNC_WAIT_COUNT);
+ CASE_S (HEAP_ALLOC_CNT);
+ CASE_S (HEAP_LEAK_CNT);
+ CASE_S (IO_READ_CNT);
+ CASE_S (IO_WRITE_CNT);
+ CASE_S (IO_OTHER_CNT);
+ CASE_S (IO_ERROR_CNT);
+ CASE_S (RACCESS);
+ CASE_S (DEADLOCKS);
+ CASE_S (HEAP_ALLOC_BYTES);
+ CASE_S (HEAP_LEAK_BYTES);
+ CASE_S (IO_READ_BYTES);
+ CASE_S (IO_WRITE_BYTES);
+ CASE_S (SIZES);
+ CASE_S (ADDRESS);
+ CASE_S (ONAME);
+ CASE_S (DERIVED);
+ default:
+ s = NTXT ("???");
+ break;
+ }
+ snprintf (buf, sizeof (buf), NTXT ("%s(%d)"), s, type);
+ buf[sizeof (buf) - 1] = 0;
+ return buf;
+}
+
+char *
+BaseMetric::dump ()
+{
+ int len = 4;
+ char *msg = dbe_sprintf (NTXT ("id=%d %s aux='%s' cmd='%s' user_name='%s' expr_spec='%s'\n"
+ "%*c cond_spec='%s' val_spec='%s'"),
+ id, get_basetype_name (), STR (aux), STR (cmd),
+ STR (username), STR (expr_spec),
+ len, ' ', STR (cond_spec), STR (val_spec));
+ return msg;
+}
+
+Histable *
+BaseMetric::get_comparable_obj (Histable *obj)
+{
+ if (obj == NULL || expr == NULL)
+ return obj;
+ if (strncmp (expr_spec, NTXT ("EXPGRID=="), 9) == 0)
+ {
+ int n = atoi (expr_spec + 9);
+ Vector<Histable *> *cmpObjs = obj->get_comparable_objs ();
+ if (cmpObjs && cmpObjs->size () >= n)
+ return cmpObjs->get (n - 1);
+ return NULL;
+ }
+ return obj;
+}
+
+Definition::Definition (opType _op)
+{
+ op = _op;
+ bm = NULL;
+ arg1 = NULL;
+ arg2 = NULL;
+ def = NULL;
+ dependencies = NULL;
+ map = NULL;
+ index = 0;
+}
+
+Definition::~Definition ()
+{
+ delete arg1;
+ delete arg2;
+ delete dependencies;
+ delete[] map;
+}
+
+Vector<BaseMetric *> *
+Definition::get_dependencies ()
+{
+ if (dependencies == NULL)
+ {
+ if (arg1 && arg1->bm && arg2 && arg2->bm)
+ {
+ dependencies = new Vector<BaseMetric *>(2);
+ arg1->index = dependencies->size ();
+ dependencies->append (arg1->bm);
+ arg2->index = dependencies->size ();
+ dependencies->append (arg2->bm);
+ map = new long[2];
+ }
+ }
+ return dependencies;
+}
+
+long *
+Definition::get_map ()
+{
+ get_dependencies ();
+ return map;
+}
+
+Definition *
+Definition::add_definition (char *_def)
+{
+ // parse the definition
+ char *op_ptr = strchr (_def, '/');
+ if (op_ptr == NULL)
+ {
+ // it's a primitive metric
+ BaseMetric *bm = dbeSession->find_base_reg_metric (_def);
+ if (bm)
+ {
+ Definition *p = new Definition (opPrimitive);
+ p->bm = bm;
+ return p;
+ }
+ return NULL; // BaseMetric is not yet specified
+ }
+ Definition *p2 = add_definition (op_ptr + 1);
+ if (p2 == NULL)
+ return NULL;
+ _def = dbe_strdup (_def);
+ op_ptr = strchr (_def, '/');
+ *op_ptr = 0;
+ Definition *p1 = add_definition (_def);
+ if (p1)
+ {
+ *op_ptr = '/';
+ Definition *p = new Definition (opDivide);
+ p->arg1 = p1;
+ p->arg2 = p2;
+ p->def = _def;
+ return p;
+ }
+ free (_def);
+ delete p1;
+ delete p2;
+ return NULL;
+}
+
+double
+Definition::eval (long *indexes, TValue *values)
+{
+ switch (op)
+ {
+ case opPrimitive:
+ return values[indexes[index]].to_double ();
+ case opDivide:
+ {
+ double x2 = arg2->eval (indexes, values);
+ if (x2 == 0)
+ return 0.;
+ double x1 = arg1->eval (indexes, values);
+ return x1 / x2;
+ }
+ default:
+ fprintf (stderr, GTXT ("unknown expression\n"));
+ return 0.;
+ }
+}
diff --git a/gprofng/src/BaseMetric.h b/gprofng/src/BaseMetric.h
new file mode 100644
index 00000000000..e0569937a20
--- /dev/null
+++ b/gprofng/src/BaseMetric.h
@@ -0,0 +1,246 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _BASEMETRIC_H
+#define _BASEMETRIC_H
+
+#include "dbe_structs.h"
+#include "hwcentry.h"
+#include "Table.h"
+
+// METRIC_*_PRECISION determine the least threshold value
+// for time measured metrics. Any event that counts for less
+// than 1sec/METRIC_PRECISION is discarded.
+#define METRIC_SIG_PRECISION MICROSEC
+#define METRIC_HR_PRECISION MICROSEC
+
+class Expression;
+class Definition;
+class Histable;
+template <class ITEM> class Vector;
+
+class BaseMetric
+{
+public:
+ // sync enum changes with AnMetric.java
+ enum Type
+ { // Subtype==STATIC metrics:
+ ONAME = 1, //ONAME must be 1
+ SIZES,
+ ADDRESS,
+ // Clock Profiling, Derived Metrics:
+ CP_TOTAL,
+ CP_TOTAL_CPU,
+ // Clock profiling, Solaris Microstates (LMS_* defines)
+ CP_LMS_USER,
+ CP_LMS_SYSTEM,
+ CP_LMS_TRAP,
+ CP_LMS_TFAULT,
+ CP_LMS_DFAULT,
+ CP_LMS_KFAULT,
+ CP_LMS_USER_LOCK,
+ CP_LMS_SLEEP,
+ CP_LMS_WAIT_CPU,
+ CP_LMS_STOPPED,
+ // Kernel clock profiling
+ CP_KERNEL_CPU,
+ // Sync Tracing
+ SYNC_WAIT_TIME,
+ SYNC_WAIT_COUNT,
+ // HWC
+ HWCNTR,
+ // Heap Tracing:
+ HEAP_ALLOC_CNT,
+ HEAP_ALLOC_BYTES,
+ HEAP_LEAK_CNT,
+ HEAP_LEAK_BYTES,
+ // I/O Tracing:
+ IO_READ_BYTES,
+ IO_READ_CNT,
+ IO_READ_TIME,
+ IO_WRITE_BYTES,
+ IO_WRITE_CNT,
+ IO_WRITE_TIME,
+ IO_OTHER_CNT,
+ IO_OTHER_TIME,
+ IO_ERROR_CNT,
+ IO_ERROR_TIME,
+ // MPI Tracing:
+ MPI_TIME,
+ MPI_SEND,
+ MPI_BYTES_SENT,
+ MPI_RCV,
+ MPI_BYTES_RCVD,
+ MPI_OTHER,
+ // OMP states:
+ OMP_NONE,
+ OMP_OVHD,
+ OMP_WORK,
+ OMP_IBAR,
+ OMP_EBAR,
+ OMP_WAIT,
+ OMP_SERL,
+ OMP_RDUC,
+ OMP_LKWT,
+ OMP_CTWT,
+ OMP_ODWT,
+ OMP_MSTR,
+ OMP_SNGL,
+ OMP_ORDD,
+ OMP_MASTER_THREAD,
+ // MPI states:
+ MPI_WORK,
+ MPI_WAIT,
+ // Races and Deadlocks
+ RACCESS,
+ DEADLOCKS,
+ // Derived Metrics
+ DERIVED
+ };
+
+ // sync enum changes with AnMetric.java
+ enum SubType
+ {
+ STATIC = 1, // Type==SIZES, ADDRESS, ONAME
+ EXCLUSIVE = 2,
+ INCLUSIVE = 4,
+ ATTRIBUTED = 8,
+ DATASPACE = 16 // Can be accessed in dataspace views
+ };
+
+ BaseMetric (Type t);
+ BaseMetric (Hwcentry *ctr, const char* _aux, const char* _cmdname,
+ const char* _username, int v_styles); // depended bm
+ BaseMetric (Hwcentry *ctr, const char* _aux, const char* _username,
+ int v_styles, BaseMetric* _depended_bm = NULL); // master bm
+ BaseMetric (const char *_cmd, const char *_username, Definition *def); // derived metrics
+ BaseMetric (const BaseMetric& m);
+ virtual ~BaseMetric ();
+
+ int get_id () { return id; }
+ Type get_type () { return type; }
+ Hwcentry *get_hw_ctr () { return hw_ctr; }
+ char *get_aux () { return aux; }
+ char *get_username () { return username; }
+ char *get_cmd () { return cmd; }
+ int get_flavors () { return flavors; }
+ int get_clock_unit () { return clock_unit; }
+ long long get_precision () { return precision; }
+ ValueTag get_vtype () { return valtype; }
+ int get_value_styles () { return value_styles; }
+ bool is_zeroThreshold () { return zeroThreshold; }
+ ProfData_type get_packet_type () { return packet_type; }
+ Expression *get_cond () { return cond; }
+ Expression *get_val () { return val; }
+ Expression *get_expr () { return expr; }
+ char *get_expr_spec () { return expr_spec; }
+ Definition *get_definition () { return definition; };
+ BaseMetric *get_dependent_bm () { return dependent_bm; };
+
+ bool
+ comparable ()
+ {
+ return val_spec != NULL || type == DERIVED || type == SIZES || type == ADDRESS;
+ }
+
+ // setters..
+ void set_default_visbits (SubType subtype, int _visbits);
+ void set_id (int _id) { id = _id; } //TBR, if possible
+ // For comparison, set which packets to eval:
+ void set_expr_spec (char *_expr_spec);
+ void set_cond_spec (char *_cond_spec);
+ int get_default_visbits (SubType subtype);
+ char *dump ();
+ Histable *get_comparable_obj (Histable *obj);
+ bool is_internal (); // Invisible for users
+
+ char *legend; // for comparison: add'l column text
+
+private:
+ BaseMetric *dependent_bm; // for HWCs only: a link to the timecvt metric
+ Expression *cond; // determines which packets to evaluate
+ char *cond_spec; // used to generate "cond"
+ Expression *val; // determines the numeric value for packet
+ char *val_spec; // used to generate "val"
+ Expression *expr; // for comparison: an additional expression to determine
+ // which packets to eval. Should be NULL otherwise.
+ char *expr_spec; // used to generate "expr"
+ int id; // unique id (assigned to last_id @ "new")
+ Type type; // e.g. HWCNTR
+ char *aux; // for HWCs only: Hwcentry ctr->name
+ char *cmd; // the .rc metric command, e.g. "total"
+ char *username; // e.g. "GTXT("Total Wait Time")"
+ int flavors; // bitmask of SubType capabilities
+ int value_styles; // bitmask of ValueType capabilities
+ static const int NSUBTYPES = 2; // STATIC/EXCLUSIVE, INCLUSIVE
+ int default_visbits[NSUBTYPES]; // ValueType, e.g. VAL_VALUE|VAL_TIMEVAL
+ ValueTag valtype; // e.g. VT_LLONG
+ long long precision; // e.g. METRIC_SIG_PRECISION, 1, etc.
+ Hwcentry *hw_ctr; // HWC definition
+ ProfData_type packet_type; // e.g. DATA_HWC, or -1 for N/A
+ bool zeroThreshold; // deadlock stuff
+ Presentation_clock_unit clock_unit;
+
+ static int last_id; // incremented by 1 w/ every "new". Not MT-safe
+ Definition *definition;
+
+ void hwc_init (Hwcentry *ctr, const char* _aux, const char* _cmdname, const char* _username, int v_styles);
+ void init (Type t);
+ char *get_basetype_name ();
+ void specify ();
+ void specify_metric (char *_cond_spec, char *_val_spec);
+ void set_val_spec (char *_val_spec);
+ void specify_mstate_metric (int st);
+ void specify_ompstate_metric (int st);
+ void specify_prof_metric (char *_cond_spec);
+};
+
+class Definition
+{
+public:
+
+ enum opType
+ {
+ opNULL,
+ opPrimitive,
+ opDivide
+ };
+
+ Definition (opType _op);
+ ~Definition ();
+ static Definition *add_definition (char *_def);
+ Vector<BaseMetric *> *get_dependencies ();
+ long *get_map ();
+ double eval (long *indexes, TValue *values);
+
+ opType op;
+ Definition *arg1;
+ Definition *arg2;
+ char *def;
+
+private:
+ BaseMetric *bm;
+ long *map;
+ Vector<BaseMetric *> *dependencies;
+ long index;
+};
+
+#endif /* _BASEMETRIC_H */
+
diff --git a/gprofng/src/BaseMetricTreeNode.cc b/gprofng/src/BaseMetricTreeNode.cc
new file mode 100644
index 00000000000..2d1db99bd3a
--- /dev/null
+++ b/gprofng/src/BaseMetricTreeNode.cc
@@ -0,0 +1,329 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <stdio.h>
+#include <strings.h>
+#include <limits.h>
+#include <sys/param.h>
+
+#include "hwcentry.h"
+#include "DbeSession.h"
+#include "Experiment.h"
+#include "Expression.h"
+#include "Metric.h"
+#include "Table.h"
+#include "i18n.h"
+#include "debug.h"
+
+BaseMetricTreeNode::BaseMetricTreeNode ()
+{
+ init_vars ();
+ build_basic_tree ();
+}
+
+BaseMetricTreeNode::BaseMetricTreeNode (BaseMetric *item)
+{
+ init_vars ();
+ bm = item;
+ name = dbe_strdup (bm->get_cmd ());
+ uname = dbe_strdup (bm->get_username ());
+ unit = NULL; //YXXX populate from base_metric (requires updating base_metric)
+ unit_uname = NULL;
+}
+
+BaseMetricTreeNode::BaseMetricTreeNode (const char *_name, const char *_uname,
+ const char *_unit, const char *_unit_uname)
+{
+ init_vars ();
+ name = dbe_strdup (_name);
+ uname = dbe_strdup (_uname);
+ unit = dbe_strdup (_unit);
+ unit_uname = dbe_strdup (_unit_uname);
+}
+
+void
+BaseMetricTreeNode::init_vars ()
+{
+ name = NULL;
+ uname = NULL;
+ unit = NULL;
+ unit_uname = NULL;
+ root = this;
+ parent = NULL;
+ children = new Vector<BaseMetricTreeNode*>;
+ isCompositeMetric = false;
+ bm = NULL;
+ registered = false;
+ num_registered_descendents = 0;
+}
+
+BaseMetricTreeNode::~BaseMetricTreeNode ()
+{
+ children->destroy ();
+ delete children;
+ free (name);
+ free (uname);
+ free (unit);
+ free (unit_uname);
+}
+
+BaseMetricTreeNode *
+BaseMetricTreeNode::register_metric (BaseMetric *item)
+{
+ BaseMetricTreeNode *found = root->find (item->get_cmd ());
+ if (!found)
+ {
+ switch (item->get_type ())
+ {
+ case BaseMetric::CP_TOTAL:
+ found = root->find (L_CP_TOTAL);
+ break;
+ case BaseMetric::CP_TOTAL_CPU:
+ found = root->find (L_CP_TOTAL_CPU);
+ break;
+ }
+ if (found && found->bm == NULL)
+ found->bm = item;
+ }
+ if (!found)
+ {
+ switch (item->get_type ())
+ {
+ case BaseMetric::HEAP_ALLOC_BYTES:
+ case BaseMetric::HEAP_ALLOC_CNT:
+ case BaseMetric::HEAP_LEAK_BYTES:
+ case BaseMetric::HEAP_LEAK_CNT:
+ found = root->find (get_prof_data_type_name (DATA_HEAP));
+ break;
+ case BaseMetric::CP_KERNEL_CPU:
+ case BaseMetric::CP_TOTAL:
+ found = root->find (get_prof_data_type_name (DATA_CLOCK));
+ break;
+ case BaseMetric::CP_LMS_DFAULT:
+ case BaseMetric::CP_LMS_TFAULT:
+ case BaseMetric::CP_LMS_KFAULT:
+ case BaseMetric::CP_LMS_STOPPED:
+ case BaseMetric::CP_LMS_WAIT_CPU:
+ case BaseMetric::CP_LMS_SLEEP:
+ case BaseMetric::CP_LMS_USER_LOCK:
+ case BaseMetric::CP_TOTAL_CPU:
+ found = root->find (L_CP_TOTAL);
+ break;
+ case BaseMetric::CP_LMS_USER:
+ case BaseMetric::CP_LMS_SYSTEM:
+ case BaseMetric::CP_LMS_TRAP:
+ found = root->find (L_CP_TOTAL_CPU);
+ break;
+ case BaseMetric::HWCNTR:
+ found = root->find ((item->get_flavors () & BaseMetric::DATASPACE) != 0 ?
+ L2_HWC_DSPACE : L2_HWC_GENERAL);
+ break;
+ case BaseMetric::SYNC_WAIT_TIME:
+ case BaseMetric::SYNC_WAIT_COUNT:
+ found = root->find (get_prof_data_type_name (DATA_SYNCH));
+ break;
+ case BaseMetric::OMP_WORK:
+ case BaseMetric::OMP_WAIT:
+ case BaseMetric::OMP_OVHD:
+ found = root->find (get_prof_data_type_name (DATA_OMP));
+ break;
+ case BaseMetric::IO_READ_TIME:
+ case BaseMetric::IO_READ_BYTES:
+ case BaseMetric::IO_READ_CNT:
+ case BaseMetric::IO_WRITE_TIME:
+ case BaseMetric::IO_WRITE_BYTES:
+ case BaseMetric::IO_WRITE_CNT:
+ case BaseMetric::IO_OTHER_TIME:
+ case BaseMetric::IO_OTHER_CNT:
+ case BaseMetric::IO_ERROR_TIME:
+ case BaseMetric::IO_ERROR_CNT:
+ found = root->find (get_prof_data_type_name (DATA_IOTRACE));
+ break;
+ case BaseMetric::ONAME:
+ case BaseMetric::SIZES:
+ case BaseMetric::ADDRESS:
+ found = root->find (L1_STATIC);
+ break;
+ default:
+ found = root->find (L1_OTHER);
+ break;
+ }
+ assert (found != NULL);
+ switch (item->get_type ())
+ {
+ case BaseMetric::CP_TOTAL:
+ case BaseMetric::CP_TOTAL_CPU:
+ found->isCompositeMetric = true;
+ break;
+ }
+ found = found->add_child (item);
+ }
+ register_node (found);
+ return found;
+}
+
+void
+BaseMetricTreeNode::register_node (BaseMetricTreeNode *node)
+{
+ if (!node->registered)
+ {
+ node->registered = true;
+ BaseMetricTreeNode *tmp = node->parent;
+ while (tmp)
+ {
+ tmp->num_registered_descendents++;
+ tmp = tmp->parent;
+ }
+ }
+}
+
+BaseMetricTreeNode *
+BaseMetricTreeNode::find (const char *_name)
+{
+ BaseMetricTreeNode *found = NULL;
+ if (dbe_strcmp (get_name (), _name) == 0)
+ return this;
+ if (bm && dbe_strcmp (bm->get_cmd (), _name) == 0)
+ return this;
+ BaseMetricTreeNode *child;
+ int index;
+
+ Vec_loop (BaseMetricTreeNode*, children, index, child)
+ {
+ found = child->find (_name);
+ if (found)
+ return found;
+ }
+ return NULL;
+}
+
+static void
+int_get_registered_descendents (BaseMetricTreeNode* curr,
+ Vector<BaseMetricTreeNode*> *dest, bool nearest_only)
+{
+ if (!curr)
+ return;
+ if (curr->is_registered ())
+ {
+ dest->append (curr);
+ if (nearest_only)
+ return; // soon as we hit a live node, stop following branch
+ }
+ int index;
+ BaseMetricTreeNode *child;
+
+ Vec_loop (BaseMetricTreeNode*, curr->get_children (), index, child)
+ {
+ int_get_registered_descendents (child, dest, nearest_only);
+ }
+}
+
+void
+BaseMetricTreeNode::get_nearest_registered_descendents (Vector<BaseMetricTreeNode*> *dest)
+{
+ if (!dest || dest->size () != 0)
+ abort ();
+ bool nearest_only = true;
+ int_get_registered_descendents (this, dest, nearest_only);
+}
+
+void
+BaseMetricTreeNode::get_all_registered_descendents (Vector<BaseMetricTreeNode*> *dest)
+{
+ if (!dest || dest->size () != 0)
+ abort ();
+ bool nearest_only = false;
+ int_get_registered_descendents (this, dest, nearest_only);
+}
+
+char *
+BaseMetricTreeNode::get_description ()
+{
+ if (bm)
+ {
+ Hwcentry* hw_ctr = bm->get_hw_ctr ();
+ if (hw_ctr)
+ return hw_ctr->short_desc;
+ }
+ return NULL;
+}
+
+void
+BaseMetricTreeNode::build_basic_tree ()
+{
+#define TREE_INSERT_DATA_TYPE(t) add_child(get_prof_data_type_name (t), get_prof_data_type_uname (t))
+ BaseMetricTreeNode *level1, *level2;
+ // register L1_DURATION here because it has a value but is not a true metric
+ register_node (add_child (L1_DURATION, L1_DURATION_UNAME, UNIT_SECONDS,
+ UNIT_SECONDS_UNAME));
+ register_node (add_child (L1_GCDURATION, L1_GCDURATION_UNAME, UNIT_SECONDS,
+ UNIT_SECONDS_UNAME));
+ TREE_INSERT_DATA_TYPE (DATA_HEAP);
+ level1 = TREE_INSERT_DATA_TYPE (DATA_CLOCK);
+ level1 = level1->add_child (L_CP_TOTAL, GTXT ("XXX Total Thread Time"));
+ level1->isCompositeMetric = true;
+ level2 = level1->add_child (L_CP_TOTAL_CPU, GTXT ("XXX Total CPU Time"));
+ level2->isCompositeMetric = true;
+
+ add_child (L1_OTHER, L1_OTHER_UNAME);
+ level1 = TREE_INSERT_DATA_TYPE (DATA_HWC);
+ level1->add_child (L2_HWC_DSPACE, L2_HWC_DSPACE_UNAME);
+ level1->add_child (L2_HWC_GENERAL, L2_HWC_GENERAL_UNAME);
+ TREE_INSERT_DATA_TYPE (DATA_SYNCH);
+ TREE_INSERT_DATA_TYPE (DATA_OMP);
+ TREE_INSERT_DATA_TYPE (DATA_IOTRACE);
+ add_child (L1_STATIC, L1_STATIC_UNAME);
+}
+
+BaseMetricTreeNode *
+BaseMetricTreeNode::add_child (BaseMetric *item)
+{
+ return add_child (new BaseMetricTreeNode (item));
+}
+
+BaseMetricTreeNode *
+BaseMetricTreeNode::add_child (const char * _name, const char *_uname,
+ const char * _unit, const char * _unit_uname)
+{
+ return add_child (new BaseMetricTreeNode (_name, _uname, _unit, _unit_uname));
+}
+
+BaseMetricTreeNode *
+BaseMetricTreeNode::add_child (BaseMetricTreeNode *new_node)
+{
+ new_node->parent = this;
+ new_node->root = root;
+ children->append (new_node);
+ return new_node;
+}
+
+char *
+BaseMetricTreeNode::dump ()
+{
+ int len = 4;
+ char *s = bm ? bm->dump () : dbe_strdup ("<no base metric>");
+ char *msg = dbe_sprintf ("%s\n%*c %*c unit='%s' unit_uname='%s' uname='%s' name='%s'\n",
+ STR (s), len, ' ', len, ' ',
+ STR (get_unit_uname ()), STR (get_unit ()),
+ STR (get_user_name ()), STR (get_name ()));
+ free (s);
+ return msg;
+}
diff --git a/gprofng/src/BaseMetricTreeNode.h b/gprofng/src/BaseMetricTreeNode.h
new file mode 100644
index 00000000000..0076dff5efd
--- /dev/null
+++ b/gprofng/src/BaseMetricTreeNode.h
@@ -0,0 +1,100 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _BASEMETRICTREENODE_H
+#define _BASEMETRICTREENODE_H
+
+#include "BaseMetric.h"
+
+// Unit values
+#define UNIT_SECONDS "SECONDS"
+#define UNIT_SECONDS_UNAME GTXT("secs.")
+#define UNIT_BYTES "BYTES"
+#define UNIT_BYTES_UNAME GTXT("bytes")
+
+// Name values for intermediate parent nodes that aren't defined elsewhere
+#define L1_DURATION "PROFDATA_TYPE_DURATION"
+#define L1_DURATION_UNAME GTXT("Experiment Duration")
+#define L1_GCDURATION "PROFDATA_TYPE_GCDURATION"
+#define L1_GCDURATION_UNAME GTXT("Java Garbage Collection Duration")
+#define L2_HWC_DSPACE "PROFDATA_TYPE_HWC_DSPACE"
+#define L2_HWC_DSPACE_UNAME GTXT("Memoryspace Hardware Counters")
+#define L2_HWC_GENERAL "PROFDATA_TYPE_HWC_GENERAL"
+#define L2_HWC_GENERAL_UNAME GTXT("General Hardware Counters")
+#define L1_MPI_STATES "PROFDATA_TYPE_MPI_STATES"
+#define L1_MPI_STATES_UNAME GTXT("MPI States")
+#define L1_OTHER "PROFDATA_TYPE_OTHER"
+#define L1_OTHER_UNAME GTXT("Derived and Other Metrics")
+#define L1_STATIC "PROFDATA_TYPE_STATIC"
+#define L1_STATIC_UNAME GTXT("Static")
+#define L_CP_TOTAL "L_CP_TOTAL"
+#define L_CP_TOTAL_CPU "L_CP_TOTAL_CPU"
+
+class BaseMetricTreeNode
+{
+public:
+ BaseMetricTreeNode (); // builds basic metric tree (not including HWCs)
+ virtual ~BaseMetricTreeNode ();
+ BaseMetricTreeNode *register_metric (BaseMetric *item);
+ BaseMetricTreeNode *find (const char *name);
+ void get_nearest_registered_descendents (Vector<BaseMetricTreeNode*> *new_vec);
+ void get_all_registered_descendents (Vector<BaseMetricTreeNode*> *new_vec);
+ char *get_description();
+ char *dump();
+
+ BaseMetricTreeNode *get_root () { return root; }
+ BaseMetricTreeNode *get_parent () { return parent; }
+ Vector<BaseMetricTreeNode*> *get_children () { return children; }
+ bool is_registered () { return registered; }
+ int get_num_registered_descendents () { return num_registered_descendents; }
+ bool is_composite_metric () { return isCompositeMetric; }
+ BaseMetric *get_BaseMetric () { return bm; }
+ char *get_name () { return name; }
+ char *get_user_name () { return uname; }
+ char *get_unit () { return unit; }
+ char *get_unit_uname () { return unit_uname; }
+
+private:
+ BaseMetricTreeNode (BaseMetric *item);
+ BaseMetricTreeNode (const char *name, const char *uname,
+ const char *_unit, const char *_unit_uname);
+ void init_vars ();
+ void build_basic_tree ();
+ BaseMetricTreeNode *add_child (BaseMetric *item);
+ BaseMetricTreeNode *add_child (const char *name, const char *uname,
+ const char *unit = NULL, const char *unit_uname = NULL);
+ BaseMetricTreeNode *add_child (BaseMetricTreeNode *new_node);
+ void register_node (BaseMetricTreeNode *);
+
+ BaseMetricTreeNode *root; // root of tree
+ BaseMetricTreeNode *parent; // my parent
+ bool aggregation; // value is based on children's values
+ char *name; // bm->get_cmd() for metrics, unique string otherwise
+ char *uname; // user-visible text
+ char *unit; // see UNIT_* defines
+ char *unit_uname; // see UNIT_*_UNAME defines
+ Vector<BaseMetricTreeNode*> *children; // my children
+ bool isCompositeMetric; // value is sum of children
+ BaseMetric *bm; // metric for this node, or null
+ bool registered; // metric has been officially registered
+ int num_registered_descendents; // does not include self
+};
+
+#endif /* _BASEMETRICTREENODE_H */
diff --git a/gprofng/src/CacheMap.h b/gprofng/src/CacheMap.h
new file mode 100644
index 00000000000..a5757498ede
--- /dev/null
+++ b/gprofng/src/CacheMap.h
@@ -0,0 +1,186 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+/*
+ * Cache Map implementation.
+ *
+ * Cache Map makes the following assumptions:
+ * - Cache Map is used for very fast but not guaranteed mapping;
+ * - only REL_EQ Relation can be used;
+ * - all objects used as keys or values has to be managed
+ * outside CacheMap (f.e. deletion);
+ * - (Key_t)0 is invalid key;
+ * - (Value_t)0 is invalid value;
+ * - <TBC>
+ */
+
+#ifndef _DBE_CACHEMAP_H
+#define _DBE_CACHEMAP_H
+
+#include <assert.h>
+#include <vec.h>
+#include <Map.h>
+
+template <typename Key_t, typename Value_t>
+class CacheMap : public Map<Key_t, Value_t>
+{
+public:
+
+ CacheMap ();
+ ~CacheMap ();
+ void put (Key_t key, Value_t val);
+ Value_t get (Key_t key);
+ Value_t get (Key_t key, typename Map<Key_t, Value_t>::Relation rel);
+ Value_t
+ remove (Key_t key);
+
+private:
+
+ struct Entry
+ {
+ Key_t key;
+ Value_t val;
+
+ Entry ()
+ {
+ key = (Key_t) 0;
+ }
+ };
+
+ static const int INIT_SIZE;
+ static const int MAX_SIZE;
+
+ static unsigned hash (Key_t key);
+ Entry *getEntry (Key_t key);
+
+ int cursize;
+ int nputs;
+ int nchunks;
+ Entry **chunks;
+};
+
+template <typename Key_t, typename Value_t>
+const int CacheMap<Key_t, Value_t>::INIT_SIZE = 1 << 14;
+template <typename Key_t, typename Value_t>
+const int CacheMap<Key_t, Value_t>::MAX_SIZE = 1 << 20;
+
+template <typename Key_t, typename Value_t>CacheMap<Key_t, Value_t>
+::CacheMap ()
+{
+ cursize = INIT_SIZE;
+ chunks = new Entry*[32];
+ nchunks = 0;
+ chunks[nchunks++] = new Entry[cursize];
+ nputs = 0;
+}
+
+template <typename Key_t, typename Value_t>
+CacheMap<Key_t, Value_t>::~CacheMap ()
+{
+ for (int i = 0; i < nchunks; i++)
+ delete[] chunks[i];
+ delete[] chunks;
+}
+
+template <typename Key_t, typename Value_t>
+unsigned
+CacheMap<Key_t, Value_t>::hash (Key_t key)
+{
+ unsigned h = (unsigned) key ^ (unsigned) (key >> 32);
+ h ^= (h >> 20) ^ (h >> 12);
+ return h ^ (h >> 7) ^ (h >> 4);
+}
+
+template <typename Key_t, typename Value_t>
+void
+CacheMap<Key_t, Value_t>::put (Key_t key, Value_t val)
+{
+ if (nputs >= cursize && cursize < MAX_SIZE)
+ {
+ // Allocate new chunk for entries.
+ chunks[nchunks++] = new Entry[cursize];
+ cursize *= 2;
+
+ // Copy all old entries to the newly allocated chunk
+ Entry *newchunk = chunks[nchunks - 1];
+ int prevsz = 0;
+ int nextsz = INIT_SIZE;
+ for (int i = 0; i < nchunks - 1; i++)
+ {
+ Entry *oldchunk = chunks[i];
+ for (int j = prevsz; j < nextsz; j++)
+ newchunk[j] = oldchunk[j - prevsz];
+ prevsz = nextsz;
+ nextsz *= 2;
+ }
+ }
+ Entry *entry = getEntry (key);
+ entry->key = key;
+ entry->val = val;
+ nputs++;
+}
+
+template <typename Key_t, typename Value_t>
+typename CacheMap<Key_t, Value_t>::Entry *
+CacheMap<Key_t, Value_t>::getEntry (Key_t key)
+{
+ unsigned idx = hash (key);
+ int i = nchunks - 1;
+ int j = cursize / 2;
+ for (; i > 0; i -= 1, j /= 2)
+ if (idx & j)
+ break;
+ if (i == 0)
+ j *= 2;
+ return &chunks[i][idx & (j - 1)];
+}
+
+template <typename Key_t, typename Value_t>
+Value_t
+CacheMap<Key_t, Value_t>::get (Key_t key)
+{
+ Entry *entry = getEntry (key);
+ return entry->key == key ? entry->val : (Value_t) 0;
+}
+
+template <typename Key_t, typename Value_t>
+Value_t
+CacheMap<Key_t, Value_t>::get (Key_t key, typename Map<Key_t, Value_t>::Relation rel)
+{
+ if (rel != Map<Key_t, Value_t>::REL_EQ)
+ return (Value_t) 0;
+ return get (key);
+}
+
+template <typename Key_t, typename Value_t>
+Value_t
+CacheMap<Key_t, Value_t>::remove (Key_t key)
+{
+ Entry *entry = getEntry (key);
+ Value_t res = (Value_t) 0;
+ if (entry->key == key)
+ {
+ res = entry->val;
+ entry->val = (Value_t) 0;
+ }
+ return res;
+}
+
+#endif
diff --git a/gprofng/src/CallStack.cc b/gprofng/src/CallStack.cc
new file mode 100644
index 00000000000..7671f9ff21b
--- /dev/null
+++ b/gprofng/src/CallStack.cc
@@ -0,0 +1,1250 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <new>
+
+#include "util.h"
+#include "CacheMap.h"
+#include "CallStack.h"
+#include "DbeSession.h"
+#include "DbeView.h"
+#include "DbeLinkList.h"
+#include "Experiment.h"
+#include "Exp_Layout.h"
+#include "Function.h"
+#include "LoadObject.h"
+#include "Module.h"
+
+Descendants::Descendants ()
+{
+ count = 0;
+ limit = sizeof (first_data) / sizeof (CallStackNode *);
+ data = first_data;
+}
+
+Descendants::~Descendants ()
+{
+ if (data != first_data)
+ free (data);
+}
+
+CallStackNode *
+Descendants::find (Histable *hi, int *index)
+{
+ int cnt = count;
+ int left = 0;
+ for (int right = cnt - 1; left <= right;)
+ {
+ int ind = (left + right) / 2;
+ CallStackNode *node = data[ind];
+ Histable *instr = node->get_instr ();
+ if (instr == hi)
+ {
+ if (index)
+ *index = ind;
+ return node;
+ }
+ if (instr->id < hi->id)
+ right = ind - 1;
+ else
+ left = ind + 1;
+ }
+ if (index)
+ *index = left;
+ return NULL;
+}
+
+void
+Descendants::append (CallStackNode* item)
+{
+ if (count < limit)
+ data[count++] = item;
+ else
+ insert (count, item);
+}
+
+void
+Descendants::insert (int ind, CallStackNode* item)
+{
+ CallStackNode **old_data = data;
+ int old_cnt = count;
+ if (old_cnt + 1 >= limit)
+ {
+ int new_limit = (limit == 0) ? DELTA : limit * 2;
+ CallStackNode **new_data = (CallStackNode **) malloc (new_limit * sizeof (CallStackNode *));
+ for (int i = 0; i < ind; i++)
+ new_data[i] = old_data[i];
+ new_data[ind] = item;
+ for (int i = ind; i < old_cnt; i++)
+ new_data[i + 1] = old_data[i];
+ limit = new_limit;
+ data = new_data;
+ if (old_data != first_data)
+ free (old_data);
+ }
+ else
+ {
+ for (int i = ind; i < old_cnt; i++)
+ old_data[i + 1] = old_data[i];
+ old_data[ind] = item;
+ }
+ count++;
+}
+
+/*
+ * Private implementation of CallStack interface
+ */
+
+// When performing pipeline optimization on resolve_frame_info + add_stack
+// cstk_ctx structure contains the state (or context) for one iteration to pass on
+// from Phase 2 to Phase 3 (More details in Experiment.cc)
+class CallStackP : public CallStack
+{
+public:
+ CallStackP (Experiment *exp);
+
+ virtual ~CallStackP ();
+
+ virtual void add_stack (DataDescriptor *dDscr, long idx, FramePacket *frp, cstk_ctx_chunk *cstCtxChunk);
+ virtual void *add_stack (Vector<Histable*> *objs);
+ virtual CallStackNode *get_node (int n);
+ virtual void print (FILE *);
+
+private:
+
+ static const int CHUNKSZ = 16384;
+
+ Experiment *experiment;
+ CallStackNode *root;
+ CallStackNode *jvm_node;
+ int nodes;
+ int nchunks;
+ CallStackNode **chunks;
+ Map<uint64_t, CallStackNode *> *cstackMap;
+ DbeLock *cstackLock;
+
+ CallStackNode *add_stack (long start, long end, Vector<Histable*> *objs, CallStackNode *myRoot);
+ CallStackNode *new_Node (CallStackNode*, Histable*);
+ CallStackNode *find_preg_stack (uint64_t);
+ // objs are in the root..leaf order
+ void *add_stack_d (Vector<Histable*> *objs);
+ void add_stack_java (DataDescriptor *dDscr, long idx, FramePacket *frp, hrtime_t tstamp, uint32_t thrid, Vector<DbeInstr*>* natpcs, bool natpc_added, cstk_ctx_chunk *cstCtxChunk);
+ void add_stack_java_epilogue (DataDescriptor *dDscr, long idx, FramePacket *frp, hrtime_t tstamp, uint32_t thrid, Vector<DbeInstr*>* natpcs, Vector<Histable*>* jpcs, bool natpc_added);
+
+ // Adjust HW counter event to find better trigger PC, etc.
+ DbeInstr *adjustEvent (DbeInstr *leafPC, DbeInstr * candPC,
+ Vaddr &eventEA, int abst_type);
+ Vector<DbeInstr*> *natpcsP;
+ Vector<Histable*> *jpcsP;
+};
+
+CallStackP::CallStackP (Experiment *exp)
+{
+ experiment = exp;
+ nchunks = 0;
+ chunks = NULL;
+ nodes = 0;
+ cstackMap = new CacheMap<uint64_t, CallStackNode *>;
+ cstackLock = new DbeLock ();
+ Function *total = dbeSession->get_Total_Function ();
+ root = new_Node (0, total->find_dbeinstr (0, 0));
+ jvm_node = NULL;
+ natpcsP = NULL;
+ jpcsP = NULL;
+}
+
+CallStackP::~CallStackP ()
+{
+ delete cstackLock;
+ if (chunks)
+ {
+ for (int i = 0; i < nodes; i++)
+ {
+ CallStackNode *node = get_node (i);
+ node->~CallStackNode ();
+ }
+ for (int i = 0; i < nchunks; i++)
+ free (chunks[i]);
+ free (chunks);
+ }
+ delete natpcsP;
+ delete jpcsP;
+ destroy_map (CallStackNode *, cstackMap);
+}
+
+CallStackNode *
+CallStackP::new_Node (CallStackNode *anc, Histable *pcval)
+{
+ // cstackLock->aquireLock(); // Caller already locked it
+ if (nodes >= nchunks * CHUNKSZ)
+ {
+ CallStackNode **old_chunks = chunks;
+ nchunks++;
+
+ // Reallocate Node chunk array
+ chunks = (CallStackNode **) malloc (nchunks * sizeof (CallStackNode *));
+ for (int i = 0; i < nchunks - 1; i++)
+ chunks[i] = old_chunks[i];
+ free (old_chunks);
+ // Allocate new chunk for nodes.
+ chunks[nchunks - 1] = (CallStackNode *) malloc (CHUNKSZ * sizeof (CallStackNode));
+ }
+ nodes++;
+ CallStackNode *node = get_node (nodes - 1);
+ new (node) CallStackNode (anc, pcval);
+ // cstackLock->releaseLock();
+ return node;
+}
+
+CallStackNode *
+CallStackP::find_preg_stack (uint64_t prid)
+{
+ DataView *dview = experiment->getOpenMPdata ();
+ dview->sort (PROP_CPRID);
+ Datum tval;
+ tval.setUINT64 (prid);
+ long idx = dview->getIdxByVals (&tval, DataView::REL_EQ);
+ if (idx < 0)
+ return root;
+ CallStackNode *node = (CallStackNode*) dview->getObjValue (PROP_USTACK, idx);
+ if (node != NULL)
+ return node;
+ uint64_t pprid = dview->getLongValue (PROP_PPRID, idx);
+ if (pprid == prid)
+ return root;
+ void *nat_stack = dview->getObjValue (PROP_MSTACK, idx);
+ Vector<Histable*> *pcs = getStackPCs (nat_stack);
+
+ // Find the bottom frame
+ int btm;
+ bool inOMP = false;
+ DbeInstr *instr;
+ Histable *hist;
+ for (btm = 0; btm < pcs->size (); btm++)
+ {
+ hist = pcs->fetch (btm);
+ if (hist->get_type () == Histable::INSTR)
+ instr = (DbeInstr *) hist;
+ else // DBELINE
+ instr = (DbeInstr *) hist->convertto (Histable::INSTR);
+ LoadObject *lo = instr->func->module->loadobject;
+ if (!inOMP)
+ {
+ if (lo->flags & SEG_FLAG_OMP)
+ inOMP = true;
+ }
+ else if (!(lo->flags & SEG_FLAG_OMP))
+ break;
+ }
+
+ // Find the top frame
+ dview->sort (PROP_CPRID);
+ int top;
+ tval.setUINT64 (pprid);
+ long pidx = dview->getIdxByVals (&tval, DataView::REL_EQ);
+ if (pidx < 0) // No parent. Process the entire nat_stack
+ top = pcs->size () - 1;
+ else
+ {
+ uint32_t thrid = (uint32_t) dview->getIntValue (PROP_THRID, idx);
+ uint32_t pthrid = (uint32_t) dview->getIntValue (PROP_THRID, pidx);
+ if (thrid != pthrid)
+ {
+ // Parent is on a different stack.
+ // Process the entire nat_stack. Skip libthread.
+ for (top = pcs->size () - 1; top >= 0; top--)
+ {
+ hist = pcs->fetch (top);
+ if (hist->get_type () == Histable::INSTR)
+ instr = (DbeInstr *) hist;
+ else // DBELINE
+ instr = (DbeInstr *) hist->convertto (Histable::INSTR);
+ if (instr->func->module->loadobject->flags & SEG_FLAG_OMP)
+ break;
+ }
+ if (top < 0) // None found. May be incomplete call stack (x86)
+ top = pcs->size () - 1;
+ }
+ else
+ {
+ // Parent is on the same stack. Find match.
+ top = pcs->size () - 1;
+ void *pnat_stack = dview->getObjValue (PROP_MSTACK, pidx);
+ Vector<Histable*> *ppcs = getStackPCs (pnat_stack);
+ for (int ptop = ppcs->size () - 1; top >= 0 && ptop >= 0;
+ top--, ptop--)
+ {
+ if (pcs->fetch (top) != ppcs->fetch (ptop))
+ break;
+ }
+ delete ppcs;
+ }
+ }
+
+ // Process the found range
+ Vector<Histable*> *upcs = new Vector<Histable*>(128);
+ for (int i = btm; i <= top; ++i)
+ {
+ hist = (DbeInstr*) pcs->fetch (i);
+ if (hist->get_type () == Histable::INSTR)
+ instr = (DbeInstr *) hist;
+ else // DBELINE
+ instr = (DbeInstr *) hist->convertto (Histable::INSTR);
+
+ if (instr->func->module->loadobject->flags & SEG_FLAG_OMP)
+ // Skip all frames from libmtsk
+ continue;
+ upcs->append (instr);
+ }
+ delete pcs;
+ node = find_preg_stack (pprid);
+ while (node != root)
+ {
+ upcs->append (node->instr);
+ node = node->ancestor;
+ }
+ node = (CallStackNode *) add_stack (upcs);
+ dview->setObjValue (PROP_USTACK, idx, node);
+ delete upcs;
+ return node;
+}
+
+#define JNI_MARKER -3
+
+// This is one iteration if the third stage of
+// resolve_frame_info + add_stack pipeline. Works on building the java
+// stacks
+void
+CallStackP::add_stack_java (DataDescriptor *dDscr, long idx, FramePacket *frp,
+ hrtime_t tstamp, uint32_t thrid,
+ Vector<DbeInstr*>* natpcs, bool natpc_added,
+ cstk_ctx_chunk *cstCtxChunk)
+{
+ Vector<Histable*> *jpcs = NULL;
+ cstk_ctx *cstctx = NULL;
+ if (cstCtxChunk != NULL)
+ {
+ cstctx = cstCtxChunk->cstCtxAr[idx % CSTCTX_CHUNK_SZ];
+ jpcs = cstctx->jpcs;
+ jpcs->reset ();
+ }
+ if (jpcs == NULL)
+ {
+ // this is when we are not doing the pipeline optimization
+ // Temporary array for resolved addresses
+ // [leaf_pc .. root_pc] == [0..stack_size-1]
+ // Leave room for a possible "truncated" frame
+ if (jpcsP == NULL)
+ jpcsP = new Vector<Histable*>;
+ jpcs = jpcsP;
+ jpcs->reset ();
+ }
+
+ //
+ // Construct the user stack
+ //
+ // Construct Java user stack
+ int jstack_size = frp->stackSize (true);
+ if (jstack_size)
+ {
+ // jpcs = new Vector<Histable*>( jstack_size );
+ if (frp->isTruncatedStack (true))
+ {
+ Function *truncf = dbeSession->getSpecialFunction (DbeSession::TruncatedStackFunc);
+ jpcs->append (truncf->find_dbeinstr (0, 0));
+ }
+
+ int nind = natpcs->size () - 1; // first native frame
+ for (int jind = jstack_size - 1; jind >= 0; jind--)
+ {
+ bool jleaf = (jind == 0); // is current java frame a leaf?
+ Vaddr mid = frp->getMthdFromStack (jind);
+ int bci = frp->getBciFromStack (jind);
+ DbeInstr *cur_instr = experiment->map_jmid_to_PC (mid, bci, tstamp);
+ jpcs->append (cur_instr);
+ if (bci == JNI_MARKER)
+ {
+ JMethod *j_method = (JMethod*) cur_instr->func;
+ // Find matching native function on the native stack
+ bool found = false;
+ for (; nind >= 0; nind--)
+ {
+ DbeInstr *nat_addr = natpcs->fetch (nind);
+ if (0 == nat_addr)
+ continue;
+ Function *nat_func = nat_addr->func;
+ if (!found && j_method->jni_match (nat_func))
+ found = true;
+ if (found)
+ {
+ // XXX omazur: the following will skip JNI native method
+ // implemented in JVM itself.
+ // If we are back in JVM switch to processing Java
+ // frames if there are any.
+ if ((nat_func->module->loadobject->flags & SEG_FLAG_JVM) && !jleaf)
+ break;
+ jpcs->append (nat_addr);
+ }
+ }
+ }
+ }
+ }
+ add_stack_java_epilogue (dDscr, idx, frp, tstamp, thrid, natpcs, jpcs, natpc_added);
+}
+
+// This is one iteration if the fourth stage of
+// resolve_frame_info + add_stack pipeline.
+// It adds the native and java stacks to the stackmap
+
+void
+CallStackP::add_stack_java_epilogue (DataDescriptor *dDscr, long idx, FramePacket *frp, hrtime_t tstamp, uint32_t thrid, Vector<DbeInstr*>* natpcs, Vector<Histable*> *jpcs, bool natpc_added)
+{
+ CallStackNode *node = NULL;
+ if (!natpc_added)
+ {
+ node = (CallStackNode *) add_stack ((Vector<Histable*>*)natpcs);
+ dDscr->setObjValue (PROP_MSTACK, idx, node);
+ dDscr->setObjValue (PROP_XSTACK, idx, node);
+ dDscr->setObjValue (PROP_USTACK, idx, node);
+ }
+
+ int jstack_size = frp->stackSize (true);
+ if (jstack_size)
+ {
+ if (jpcs != NULL)
+ node = (CallStackNode *) add_stack_d (jpcs);
+ if (node == NULL)
+ node = (CallStackNode*) dDscr->getObjValue (PROP_USTACK, idx);
+ dDscr->setObjValue (PROP_USTACK, idx, node);
+ Function *func = (Function*) node->instr->convertto (Histable::FUNCTION);
+ if (func != dbeSession->get_JUnknown_Function ())
+ dDscr->setObjValue (PROP_XSTACK, idx, node);
+ }
+
+ JThread *jthread = experiment->map_pckt_to_Jthread (thrid, tstamp);
+ if (jthread == JTHREAD_NONE && jstack_size != 0 && node != NULL)
+ {
+ Function *func = (Function*) node->instr->convertto (Histable::FUNCTION);
+ if (func != dbeSession->get_JUnknown_Function ())
+ jthread = JTHREAD_DEFAULT;
+ }
+ dDscr->setObjValue (PROP_JTHREAD, idx, jthread);
+ if (jthread == JTHREAD_NONE || (jthread != JTHREAD_DEFAULT && jthread->is_system ()))
+ {
+ if (jvm_node == NULL)
+ {
+ Function *jvm = dbeSession->get_jvm_Function ();
+ if (jvm)
+ {
+ jvm_node = new_Node (root, jvm->find_dbeinstr (0, 0));
+ CommonPacket::jvm_overhead = jvm_node;
+ }
+ }
+ dDscr->setObjValue (PROP_USTACK, idx, jvm_node);
+ }
+}
+
+// This is one iteration of the 2nd stage of
+// resolve_frame_info + add_stack() pipeline. Builds the stack for a given framepacket.
+// When pipeline optimization is turnd off, cstctxchunk passed is NULL
+void
+CallStackP::add_stack (DataDescriptor *dDscr, long idx, FramePacket *frp,
+ cstk_ctx_chunk* cstCtxChunk)
+{
+ Vector<DbeInstr*> *natpcs = NULL;
+ cstk_ctx *cstctx = NULL;
+ int stack_size = frp->stackSize ();
+ if (cstCtxChunk != NULL)
+ {
+ cstctx = cstCtxChunk->cstCtxAr[idx % CSTCTX_CHUNK_SZ];
+ natpcs = cstctx->natpcs;
+ natpcs->reset ();
+ }
+ if (natpcs == NULL)
+ {
+ // this is when we are not doing the pipeline optimization
+ // Temporary array for resolved addresses
+ // [leaf_pc .. root_pc] == [0..stack_size-1]
+ // Leave room for a possible "truncated" frame
+ if (natpcsP == NULL)
+ natpcsP = new Vector<DbeInstr*>;
+ natpcs = natpcsP;
+ natpcs->reset ();
+ }
+
+ bool leaf = true;
+ hrtime_t tstamp = (hrtime_t) dDscr->getLongValue (PROP_TSTAMP, idx);
+ uint32_t thrid = (uint32_t) dDscr->getIntValue (PROP_THRID, idx);
+
+ enum
+ {
+ NONE,
+ CHECK_O7,
+ USE_O7,
+ SKIP_O7
+ } state = NONE;
+
+ Vaddr o7_to_skip = 0;
+ for (int index = 0; index < stack_size; index++)
+ {
+ if (frp->isLeafMark (index))
+ {
+ state = CHECK_O7;
+ continue;
+ }
+
+ if (state == SKIP_O7)
+ {
+ // remember this bad o7 value since OMP might not recognize it
+ o7_to_skip = frp->getFromStack (index);
+ state = NONE;
+ continue;
+ }
+
+ Vaddr va = frp->getFromStack (index);
+ DbeInstr *cur_instr = experiment->map_Vaddr_to_PC (va, tstamp);
+#if ARCH(Intel)// TBR? FIXUP_XXX_SPARC_LINUX: switch should be on experiment ARCH, not dbe ARCH
+ // We need to adjust return addresses on intel
+ // in order to attribute inclusive metrics to
+ // proper call instructions.
+ if (experiment->exp_maj_version <= 9)
+ if (!leaf && cur_instr->addr != 0)
+ cur_instr = cur_instr->func->find_dbeinstr (0, cur_instr->addr - 1);
+#endif
+
+ // Skip PC's from PLT, update leaf and state accordingly
+ if ((cur_instr->func->flags & FUNC_FLAG_PLT)
+ && (leaf || state == CHECK_O7))
+ {
+ if (state == CHECK_O7)
+ state = USE_O7;
+ leaf = false;
+ continue;
+ }
+ if (state == CHECK_O7)
+ {
+ state = USE_O7;
+ uint64_t saddr = cur_instr->func->save_addr;
+ if (cur_instr->func->isOutlineFunction)
+ // outline functions assume 'save' instruction
+ // Note: they accidentally have saddr == FUNC_ROOT
+ state = SKIP_O7;
+ else if (saddr == FUNC_ROOT)
+ {
+ // If a function is statically determined as a root
+ // but dynamically appears not, don't discard o7.
+ // One such case is __misalign_trap_handler on sparcv9.
+ if (stack_size == 3)
+ state = SKIP_O7;
+ }
+ else if (saddr != FUNC_NO_SAVE && cur_instr->addr > saddr)
+ state = SKIP_O7;
+ }
+ else if (state == USE_O7)
+ {
+ state = NONE;
+ if (cur_instr->flags & PCInvlFlag)
+ continue;
+ }
+ if (leaf)
+ {
+ Vaddr evpc = (Vaddr) dDscr->getLongValue (PROP_VIRTPC, idx);
+ if (evpc != 0
+ && !(index > 0 && frp->isLeafMark (index - 1)
+ && evpc == (Vaddr) (-1)))
+ {
+ /* contains hwcprof info */
+ cur_instr->func->module->read_hwcprof_info ();
+
+ // complete ABS validation of candidate eventPC/eventEA
+ // and correction/adjustment of collected callstack leaf PC
+ DbeInstr *candPC = experiment->map_Vaddr_to_PC (evpc, tstamp);
+ Vaddr vaddr = (Vaddr) dDscr->getLongValue (PROP_VADDR, idx);
+ Vaddr tmp_vaddr = vaddr;
+ int abst_type;
+ uint32_t tag = dDscr->getIntValue (PROP_HWCTAG, idx);
+ if (tag < 0 || tag >= MAX_HWCOUNT)
+ abst_type = ABST_NOPC;
+ else
+ abst_type = experiment->coll_params.hw_tpc[tag];
+
+ // We need to adjust addresses for ABST_EXACT_PEBS_PLUS1
+ // (Nehalem/SandyBridge PEBS identifies PC+1, not PC)
+ if (abst_type == ABST_EXACT_PEBS_PLUS1 && candPC->addr != 0)
+ candPC = candPC->func->find_dbeinstr (0, candPC->func->find_previous_addr (candPC->addr));
+
+ cur_instr = adjustEvent (cur_instr, candPC, tmp_vaddr, abst_type);
+ if (vaddr != tmp_vaddr)
+ {
+ if (tmp_vaddr < ABS_CODE_RANGE)
+ {
+ /* post processing backtrack failed */
+ dDscr->setValue (PROP_VADDR, idx, tmp_vaddr);
+ dDscr->setValue (PROP_PADDR, idx, ABS_NULL);
+ /* hwcp->eventVPC = xxxxx leave eventPC alone,
+ * or can we set it to leafpc? */
+ dDscr->setValue (PROP_PHYSPC, idx, ABS_NULL);
+ }
+ else
+ {
+ /* internal error: why would post-processing modify vaddr? */
+ dDscr->setValue (PROP_PADDR, idx, (Vaddr) (-1));
+ dDscr->setValue (PROP_PHYSPC, idx, (Vaddr) (-1));
+ }
+ }
+ }
+ }
+ natpcs->append (cur_instr);
+ leaf = false;
+
+ // A hack to deceive the user into believing that outlined code
+ // is called from the base function
+ DbeInstr *drvd = cur_instr->func->derivedNode;
+ if (drvd != NULL)
+ natpcs->append (drvd);
+ }
+ if (frp->isTruncatedStack ())
+ {
+ Function *truncf = dbeSession->getSpecialFunction (DbeSession::TruncatedStackFunc);
+ natpcs->append (truncf->find_dbeinstr (0, 0));
+ }
+ else if (frp->isFailedUnwindStack ())
+ {
+ Function *funwf = dbeSession->getSpecialFunction (DbeSession::FailedUnwindFunc);
+ natpcs->append (funwf->find_dbeinstr (0, 0));
+ }
+
+ CallStackNode *node = (CallStackNode*) add_stack ((Vector<Histable*>*)natpcs);
+ dDscr->setObjValue (PROP_MSTACK, idx, node);
+ dDscr->setObjValue (PROP_XSTACK, idx, node);
+ dDscr->setObjValue (PROP_USTACK, idx, node);
+
+ // OpenMP 3.0 stacks
+ stack_size = frp->ompstack->size ();
+ if (stack_size > 0 || frp->omp_state == OMP_IDLE_STATE)
+ {
+ Function *func;
+ Vector<Histable*> *omppcs = new Vector<Histable*>(stack_size);
+ Vector<Histable*> *ompxpcs = new Vector<Histable*>(stack_size);
+ switch (frp->omp_state)
+ {
+ case OMP_IDLE_STATE:
+ case OMP_RDUC_STATE:
+ case OMP_IBAR_STATE:
+ case OMP_EBAR_STATE:
+ case OMP_LKWT_STATE:
+ case OMP_CTWT_STATE:
+ case OMP_ODWT_STATE:
+ case OMP_ATWT_STATE:
+ {
+ func = dbeSession->get_OMP_Function (frp->omp_state);
+ DbeInstr *instr = func->find_dbeinstr (0, 0);
+ omppcs->append (instr);
+ ompxpcs->append (instr);
+ break;
+ }
+ }
+ Vector<Vaddr> *stck = frp->ompstack;
+ leaf = true;
+ for (int index = 0; index < stack_size; index++)
+ {
+ if (stck->fetch (index) == SP_LEAF_CHECK_MARKER)
+ {
+ state = CHECK_O7;
+ continue;
+ }
+ if (state == SKIP_O7)
+ {
+ state = NONE;
+ continue;
+ }
+
+ // The OMP stack might not have enough information to know to discard a bad o7.
+ // So just remember what the native stack skipped.
+ if (o7_to_skip == stck->fetch (index))
+ {
+ state = NONE;
+ continue;
+ }
+ Vaddr va = stck->fetch (index);
+ DbeInstr *cur_instr = experiment->map_Vaddr_to_PC (va, tstamp);
+
+ // Skip PC's from PLT, update leaf and state accordingly
+ if ((cur_instr->func->flags & FUNC_FLAG_PLT) &&
+ (leaf || state == CHECK_O7))
+ {
+ if (state == CHECK_O7)
+ state = USE_O7;
+ leaf = false;
+ continue;
+ }
+ if (state == CHECK_O7)
+ {
+ state = USE_O7;
+ uint64_t saddr = cur_instr->func->save_addr;
+ if (cur_instr->func->isOutlineFunction)
+ // outline functions assume 'save' instruction
+ // Note: they accidentally have saddr == FUNC_ROOT
+ state = SKIP_O7;
+ else if (saddr == FUNC_ROOT)
+ {
+ // If a function is statically determined as a root
+ // but dynamically appears not, don't discard o7.
+ // One such case is __misalign_trap_handler on sparcv9.
+ if (stack_size == 3)
+ state = SKIP_O7;
+ }
+ else if (saddr != FUNC_NO_SAVE && cur_instr->addr > saddr)
+ state = SKIP_O7;
+ }
+ else if (state == USE_O7)
+ {
+ state = NONE;
+ if (cur_instr->flags & PCInvlFlag)
+ continue;
+ }
+
+ DbeLine *dbeline = (DbeLine*) cur_instr->convertto (Histable::LINE);
+ if (cur_instr->func->usrfunc)
+ {
+ dbeline = dbeline->sourceFile->find_dbeline (cur_instr->func->usrfunc, dbeline->lineno);
+ omppcs->append (dbeline);
+ }
+ else if (dbeline->lineno > 0)
+ omppcs->append (dbeline);
+ else
+ omppcs->append (cur_instr);
+ if (dbeline->is_set (DbeLine::OMPPRAGMA) &&
+ frp->omp_state == OMP_WORK_STATE)
+ dDscr->setValue (PROP_OMPSTATE, idx, OMP_OVHD_STATE);
+ ompxpcs->append (cur_instr);
+ leaf = false;
+ }
+ if (frp->omptruncated == SP_TRUNC_STACK_MARKER)
+ {
+ func = dbeSession->getSpecialFunction (DbeSession::TruncatedStackFunc);
+ DbeInstr *instr = func->find_dbeinstr (0, 0);
+ omppcs->append (instr);
+ ompxpcs->append (instr);
+ }
+ else if (frp->omptruncated == SP_FAILED_UNWIND_MARKER)
+ {
+ func = dbeSession->getSpecialFunction (DbeSession::FailedUnwindFunc);
+ DbeInstr *instr = func->find_dbeinstr (0, 0);
+ omppcs->append (instr);
+ ompxpcs->append (instr);
+ }
+
+ // User model call stack
+ node = (CallStackNode*) add_stack (omppcs);
+ dDscr->setObjValue (PROP_USTACK, idx, node);
+ delete omppcs;
+
+ // Expert call stack
+ node = (CallStackNode*) add_stack (ompxpcs);
+ dDscr->setObjValue (PROP_XSTACK, idx, node);
+ delete ompxpcs;
+ dDscr->setObjValue (PROP_JTHREAD, idx, JTHREAD_DEFAULT);
+ return;
+ }
+
+ // OpenMP 2.5 stacks
+ if (frp->omp_cprid || frp->omp_state)
+ {
+ DataView *dview = experiment->getOpenMPdata ();
+ if (dview == NULL)
+ {
+ // It appears we may get OMP_SERL_STATE from a passive libmtsk
+ dDscr->setObjValue (PROP_JTHREAD, idx, JTHREAD_DEFAULT);
+ return;
+ }
+ if (dview->getDataDescriptor () == dDscr)
+ {
+ // Don't process the user stack for OpenMP fork events yet
+ dDscr->setObjValue (PROP_USTACK, idx, (void*) NULL);
+ dDscr->setObjValue (PROP_JTHREAD, idx, JTHREAD_DEFAULT);
+ return;
+ }
+ Vector<Histable*> *omppcs = new Vector<Histable*>(stack_size);
+
+ // Construct OMP user stack
+ // Find the bottom frame
+ int btm = 0;
+ switch (frp->omp_state)
+ {
+ case OMP_IDLE_STATE:
+ {
+ Function *func = dbeSession->get_OMP_Function (frp->omp_state);
+ omppcs->append (func->find_dbeinstr (0, 0));
+ // XXX: workaround for inconsistency between OMP_IDLE_STATE
+ // and omp_cprid != 0
+ frp->omp_cprid = 0;
+ btm = natpcs->size ();
+ break;
+ }
+ case OMP_RDUC_STATE:
+ case OMP_IBAR_STATE:
+ case OMP_EBAR_STATE:
+ case OMP_LKWT_STATE:
+ case OMP_CTWT_STATE:
+ case OMP_ODWT_STATE:
+ case OMP_ATWT_STATE:
+ {
+ Function *func = dbeSession->get_OMP_Function (frp->omp_state);
+ omppcs->append (func->find_dbeinstr (0, 0));
+ bool inOMP = false;
+ for (btm = 0; btm < natpcs->size (); btm++)
+ {
+ LoadObject *lo = natpcs->fetch (btm)->func->module->loadobject;
+ if (!inOMP)
+ {
+ if (lo->flags & SEG_FLAG_OMP)
+ inOMP = true;
+ }
+ else if (!(lo->flags & SEG_FLAG_OMP))
+ break;
+ }
+ break;
+ }
+ case OMP_NO_STATE:
+ case OMP_WORK_STATE:
+ case OMP_SERL_STATE:
+ default:
+ break;
+ }
+
+ // Find the top frame
+ int top = -1;
+ switch (frp->omp_state)
+ {
+ case OMP_IDLE_STATE:
+ break;
+ default:
+ {
+ dview->sort (PROP_CPRID);
+ Datum tval;
+ tval.setUINT64 (frp->omp_cprid);
+ long pidx = dview->getIdxByVals (&tval, DataView::REL_EQ);
+ if (pidx < 0) // No parent. Process the entire nat_stack
+ top = natpcs->size () - 1;
+ else
+ {
+ uint32_t pthrid = (uint32_t) dview->getIntValue (PROP_THRID, pidx);
+ if (thrid != pthrid)
+ {
+ // Parent is on a different stack.
+ // Process the entire nat_stack. Skip libthread.
+ for (top = natpcs->size () - 1; top >= 0; top--)
+ {
+ DbeInstr *instr = natpcs->fetch (top);
+ if (instr->func->module->loadobject->flags & SEG_FLAG_OMP)
+ break;
+ }
+ if (top < 0) // None found. May be incomplete call stack
+ top = natpcs->size () - 1;
+ }
+ else
+ {
+ // Parent is on the same stack. Find match.
+ top = natpcs->size () - 1;
+ void *pnat_stack = dview->getObjValue (PROP_MSTACK, pidx);
+ Vector<Histable*> *ppcs = getStackPCs (pnat_stack);
+ for (int ptop = ppcs->size () - 1; top >= 0 && ptop >= 0;
+ top--, ptop--)
+ {
+ if (natpcs->fetch (top) != ppcs->fetch (ptop))
+ break;
+ }
+ delete ppcs;
+ }
+ }
+ // If no frames are found for Barrier/Reduction save at least one
+ if ((frp->omp_state == OMP_RDUC_STATE
+ || frp->omp_state == OMP_IBAR_STATE
+ || frp->omp_state == OMP_EBAR_STATE)
+ && top < btm && btm < natpcs->size ())
+ top = btm;
+ }
+ }
+ for (int i = btm; i <= top; ++i)
+ {
+ DbeInstr *instr = natpcs->fetch (i);
+ if (instr->func->module->loadobject->flags & SEG_FLAG_OMP)
+ continue; // Skip all frames from libmtsk
+ omppcs->append (instr);
+ }
+ node = find_preg_stack (frp->omp_cprid);
+ while (node != root)
+ {
+ omppcs->append (node->instr);
+ node = node->ancestor;
+ }
+ node = (CallStackNode *) add_stack (omppcs);
+ dDscr->setObjValue (PROP_USTACK, idx, node);
+ delete omppcs;
+ dDscr->setObjValue (PROP_JTHREAD, idx, JTHREAD_DEFAULT);
+ return;
+ }
+
+ // Construct Java user stack
+ add_stack_java (dDscr, idx, frp, tstamp, thrid, natpcs, true, NULL);
+}
+
+// adjustment of leafPC/eventVA for XHWC packets with candidate eventPC
+// Called from CallStack during initial processing of the events
+DbeInstr *
+CallStackP::adjustEvent (DbeInstr *leafPC, DbeInstr *candPC, Vaddr &eventVA,
+ int abst_type)
+{
+ // increment counter of dataspace events
+ experiment->dsevents++;
+ bool isPrecise;
+ if (abst_type == ABST_EXACT_PEBS_PLUS1)
+ isPrecise = true;
+ else if (abst_type == ABST_EXACT)
+ isPrecise = true;
+ else
+ isPrecise = false;
+
+ if (isPrecise)
+ /* precise backtracking */
+ /* assume within 1 instruction of leaf (this could be checked here) */
+ // no change to eventVA or candPC
+ return candPC;
+
+ Function *func = leafPC->func;
+ unsigned int bt_entries = func->module->bTargets.size ();
+ DbeInstr *bestPC = NULL;
+
+ // bt == branch target (potential destination of a branch
+ if (bt_entries == 0)
+ { // no XHWCprof info for this module
+ // increment counter
+ experiment->dsnoxhwcevents++;
+
+ // see if event is to be processed anyway
+ if (!dbeSession->check_ignore_no_xhwcprof ())
+ {
+ // Don't ignore error
+ // XXX -- set error code in event VA -- replace with other mechanism
+ if (eventVA > ABS_CODE_RANGE)
+ eventVA = ABS_NULL;
+ eventVA |= ABS_NO_CTI_INFO; // => effective address can't be validated
+ bestPC = leafPC; // => no PC correction possible
+ }
+ else
+ bestPC = candPC; // assume the event valid
+ }
+ else
+ {
+ // we have the info to verify the backtracking
+ target_info_t *bt;
+ int bt_entry = bt_entries;
+ uint64_t leafPC_offset = func->img_offset + leafPC->addr;
+ uint64_t candPC_offset = candPC->func->img_offset + candPC->addr;
+ do
+ {
+ bt_entry--;
+ bt = func->module->bTargets.fetch (bt_entry);
+ /* bts seem to be sorted by offset, smallest to largest */
+ }
+ while (bt_entry > 0 && bt->offset > leafPC_offset);
+ /* if bt_entry == 0, all items have been checked */
+
+ if (bt->offset > leafPC_offset)
+ { /* XXXX isn't is possible that all bt's are after leafPC_offset? */
+ bestPC = leafPC; // actual event PC can't be determined
+ if (eventVA > ABS_CODE_RANGE)
+ eventVA = ABS_NULL;
+ eventVA |= ABS_INFO_FAILED; // effective address can't be validated
+ }
+ else if (bt->offset > candPC_offset)
+ {
+ // use synthetic PC corresponding to bTarget
+ bestPC = func->find_dbeinstr (PCTrgtFlag, bt->offset - func->img_offset);
+ if (eventVA > ABS_CODE_RANGE)
+ eventVA = ABS_NULL;
+ eventVA |= ABS_CTI_TARGET; // effective address can't be validated
+ }
+ else
+ bestPC = candPC; // accept provided virtual address as valid
+ }
+ return bestPC;
+}
+
+void *
+CallStackP::add_stack_d (Vector<Histable*> *objs)
+{
+ // objs: root..leaf
+ // Reverse objs
+ for (int i = 0, j = objs->size () - 1; i < j; ++i, --j)
+ objs->swap (i, j);
+ return add_stack (objs);
+}
+
+CallStackNode::CallStackNode (CallStackNode *_ancestor, Histable *_instr)
+{
+ ancestor = _ancestor;
+ instr = _instr;
+ alt_node = NULL;
+}
+
+CallStackNode::~CallStackNode () { }
+
+bool
+CallStackNode::compare (long start, long end, Vector<Histable*> *objs, CallStackNode *mRoot)
+{
+ CallStackNode *p = this;
+ for (long i = start; i < end; i++, p = p->get_ancestor ())
+ if (p == NULL || p->get_instr () != objs->get (i))
+ return false;
+ return p == mRoot;
+}
+
+void
+CallStackNode::dump ()
+{
+ const char *s = "";
+ int sz = 0;
+ for (CallStackNode *p = this; p; p = p->get_ancestor ())
+ {
+ fprintf (stderr, NTXT ("%.*s 0x%08llx id=0x%08llx %s\n"), sz, s,
+ (long long) p, (long long) p->get_instr ()->id,
+ STR (p->get_instr ()->get_name ()));
+ s = "-";
+ sz += 1;
+ }
+}
+
+long total_calls_add_stack, total_stacks, total_nodes, call_stack_size[201];
+
+void *
+CallStackP::add_stack (Vector<Histable*> *objs)
+{
+ // objs: leaf..root
+ uint64_t hash = objs->size ();
+ for (long i = objs->size () - 1; i >= 0; --i)
+ hash ^= (unsigned long long) objs->get (i);
+
+ uint64_t key = hash ? hash : 1;
+ CallStackNode *node = cstackMap->get (key);
+#ifdef DEBUG
+ if (DUMP_CALL_STACK)
+ {
+ total_calls_add_stack++;
+ call_stack_size[objs->size () > 200 ? 200 : objs->size ()]++;
+ Dprintf (DUMP_CALL_STACK,
+ "add_stack: %lld size=%lld key=0x%08llx cashNode=0x%08llx\n",
+ (long long) total_calls_add_stack, (long long) objs->size (),
+ (long long) key, (long long) node);
+ for (long i = 0, sz = VecSize (objs); i < sz; i++)
+ Dprintf (DUMP_CALL_STACK, " add_stack: %.*s 0x%08llx id=0x%08llx %s\n",
+ (int) i, NTXT (" "), (long long) objs->get (i),
+ (long long) objs->get (i)->id, STR (objs->get (i)->get_name ()));
+ }
+#endif
+ if (node && node->compare (0, objs->size (), objs, root))
+ {
+ Dprintf (DUMP_CALL_STACK, NTXT ("STACK FOUND: key=0x%08llx 0x%08llx id=0x%08llx %s\n"),
+ (long long) key, (long long) node,
+ (long long) node->get_instr ()->id,
+ STR (node->get_instr ()->get_name ()));
+ return node;
+ }
+ node = root;
+ for (long i = objs->size () - 1; i >= 0; i--)
+ {
+ Histable *instr = objs->get (i);
+ int old_count = node->count;
+ int left;
+ CallStackNode *nd = node->find (instr, &left);
+ if (nd)
+ {
+ node = nd;
+ continue;
+ }
+ cstackLock->aquireLock (); // Use one lock for all nodes
+ // node->aquireLock();
+ if (old_count != node->count)
+ {
+ nd = node->find (instr, &left);
+ if (nd)
+ { // the other thread has created this node
+ cstackLock->releaseLock ();
+ // node->releaseLock();
+ node = nd;
+ continue;
+ }
+ }
+ // New Call Stack
+ total_stacks++;
+ nd = node;
+ CallStackNode *first = NULL;
+ do
+ {
+ CallStackNode *anc = node;
+ total_nodes++;
+ node = new_Node (anc, objs->get (i));
+ if (first)
+ anc->append (node);
+ else
+ first = node;
+ }
+ while (i-- > 0);
+ nd->insert (left, first);
+ cstackLock->releaseLock ();
+ // nd->releaseLock();
+ break;
+ }
+ cstackMap->put (key, node);
+ if (DUMP_CALL_STACK)
+ node->dump ();
+ return node;
+}
+
+CallStackNode *
+CallStackP::get_node (int n)
+{
+ if (n < nodes)
+ return &chunks[n / CHUNKSZ][n % CHUNKSZ];
+ return NULL;
+}
+
+/*
+ * Debugging methods
+ */
+void
+CallStackP::print (FILE *fd)
+{
+ FILE *f = (fd == NULL ? stderr : fd);
+ fprintf (f, GTXT ("CallStack: nodes = %d\n\n"), nodes);
+ int maxdepth = 0;
+ int maxwidth = 0;
+ const char *t;
+ char *n;
+ for (int i = 0; i < nodes; i++)
+ {
+ CallStackNode *node = &chunks[i / CHUNKSZ][i % CHUNKSZ];
+ Histable *instr = node->instr;
+ if (instr->get_type () == Histable::LINE)
+ {
+ t = "L";
+ n = ((DbeLine *) instr)->func->get_name ();
+ }
+ else if (instr->get_type () == Histable::INSTR)
+ {
+ t = "I";
+ n = ((DbeInstr *) instr)->func->get_name ();
+ }
+ else
+ {
+ t = "O";
+ n = instr->get_name ();
+ }
+ long long addr = (long long) instr->get_addr ();
+ fprintf (f, GTXT ("node: 0x%016llx anc: 0x%016llx -- 0x%016llX: %s %s\n"),
+ (unsigned long long) node, (unsigned long long) node->ancestor,
+ addr, t, n);
+ }
+ fprintf (f, GTXT ("md = %d, mw = %d\n"), maxdepth, maxwidth);
+}
+
+/*
+ * Static CallStack methods
+ */
+CallStack *
+CallStack::getInstance (Experiment *exp)
+{
+ return new CallStackP (exp);
+}
+
+int
+CallStack::stackSize (void *stack)
+{
+ CallStackNode *node = (CallStackNode *) stack;
+ int sz = 0;
+ for (; node; node = node->ancestor)
+ sz++;
+ return sz - 1; // don't count the root node
+}
+
+Histable *
+CallStack::getStackPC (void *stack, int n)
+{
+ CallStackNode *node = (CallStackNode *) stack;
+ while (n-- && node)
+ node = node->ancestor;
+ if (node == NULL)
+ return dbeSession->get_Unknown_Function ()->find_dbeinstr (PCInvlFlag, 0);
+ return node->instr;
+}
+
+Vector<Histable*> *
+CallStack::getStackPCs (void *stack, bool get_hide_stack)
+{
+ Vector<Histable*> *res = new Vector<Histable*>;
+ CallStackNode *node = (CallStackNode *) stack;
+ if (get_hide_stack && node->alt_node != NULL)
+ node = node->alt_node;
+ while (node && node->ancestor)
+ { // skip the root node
+ res->append (node->instr);
+ node = node->ancestor;
+ }
+ return res;
+}
+
+int
+CallStack::compare (void *stack1, void *stack2)
+{
+ // Quick comparision
+ if (stack1 == stack2)
+ return 0;
+
+ CallStackNode *node1 = (CallStackNode *) stack1;
+ CallStackNode *node2 = (CallStackNode *) stack2;
+ while (node1 != NULL && node2 != NULL)
+ {
+ //to keep the result const on different platforms
+ //we use instr->id instead of instr
+ if (node1->instr->id < node2->instr->id)
+ return -1;
+ else if (node1->instr->id > node2->instr->id)
+ return 1;
+ node1 = node1->ancestor;
+ node2 = node2->ancestor;
+ }
+ if (node1 == NULL && node2 != NULL)
+ return -1;
+ else if (node1 != NULL && node2 == NULL)
+ return 1;
+ else
+ return 0;
+}
+
+// LIBRARY VISIBILITY
+
+void
+CallStack::setHideStack (void *stack, void *hideStack)
+{
+ CallStackNode *hNode = (CallStackNode *) stack;
+ hNode->alt_node = (CallStackNode *) hideStack;
+}
diff --git a/gprofng/src/CallStack.h b/gprofng/src/CallStack.h
new file mode 100644
index 00000000000..62e0686aa6c
--- /dev/null
+++ b/gprofng/src/CallStack.h
@@ -0,0 +1,114 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _CALLSTACK_H
+#define _CALLSTACK_H
+
+#include <stdio.h>
+#include "dbe_structs.h"
+#include "Experiment.h"
+#include "DbeLock.h"
+
+class DataDescriptor;
+class FramePacket;
+class DbeInstr;
+class Histable;
+template <class ITEM> class Vector;
+class CallStackNode;
+
+class Descendants /* : public DbeLock */
+{
+public:
+ Descendants ();
+ ~Descendants ();
+ CallStackNode *find (Histable *hi, int *index);
+ void append (CallStackNode *item);
+ void insert (int ind, CallStackNode *item);
+ int volatile count;
+
+private:
+
+ enum
+ {
+ DELTA = 8
+ };
+
+ int limit;
+ CallStackNode **data;
+ CallStackNode *first_data[4];
+};
+
+class CallStackNode : public Descendants
+{
+public:
+ CallStackNode (CallStackNode *_ancestor, Histable *_instr);
+ ~CallStackNode ();
+ bool compare (long start, long end, Vector<Histable*> *objs, CallStackNode *mRoot);
+ void dump ();
+
+ CallStackNode *
+ get_ancestor ()
+ {
+ return ancestor;
+ }
+
+ Histable *
+ get_instr ()
+ {
+ return instr;
+ }
+
+ CallStackNode *alt_node;
+ Histable *instr;
+ CallStackNode *ancestor;
+};
+
+class CallStack
+{
+public:
+ static CallStack *getInstance (Experiment *exp);
+ virtual ~CallStack () { };
+
+ virtual void add_stack (DataDescriptor *dDscr, long idx, FramePacket *frp,
+ cstk_ctx_chunk* cstCtxChunk) = 0;
+
+ // Creates a call stack representation for objs and
+ // returns an opaque pointer to it
+ virtual void *add_stack (Vector<Histable*> *objs) = 0;
+
+ // Debugging methods
+ virtual void print (FILE *) = 0;
+
+ // Call stack inquiries
+ static int stackSize (void *stack);
+ static Histable *getStackPC (void *stack, int n);
+ static Vector<Histable*> *getStackPCs (void *stack, bool get_hide_stack = false);
+ static void setHideStack (void *stack, void *hideStack);
+ static int compare (void *stack1, void *stack2);
+
+ virtual CallStackNode *
+ get_node (int)
+ {
+ return NULL;
+ };
+
+};
+
+#endif /* _CALLSTACK_H */
diff --git a/gprofng/src/CatchOutOfMemory.cc b/gprofng/src/CatchOutOfMemory.cc
new file mode 100644
index 00000000000..61b91cfcd0e
--- /dev/null
+++ b/gprofng/src/CatchOutOfMemory.cc
@@ -0,0 +1,59 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <new> // std::bad_alloc
+#include <stdio.h> // fprintf
+#include <stdlib.h> // exit
+#include "DbeApplication.h"
+
+static char *name = NULL;
+
+/**
+ * Out Of Memory exception handler
+ */
+void
+out_of_mem ()
+{
+ fprintf (stderr, "%s: %s: %s\n", "Error", name ? name : "", "Out of memory\n");
+ exit (2); // Out of memory
+ // throw bad_alloc();
+}
+
+/**
+ * Calls real_main inside try{...}catch(std::bad_alloc *)
+ */
+int
+catch_out_of_memory (int (*real_main)(int, char*[]), int argc, char *argv[])
+{
+ int i = 0;
+ name = argv[0];
+ std::set_new_handler (out_of_mem);
+ try
+ {
+ i = real_main (argc, argv);
+ }
+ catch (std::bad_alloc */*ba*/)
+ {
+ exit (2); // Out of memory
+ }
+ delete theDbeApplication;
+ return i;
+}
diff --git a/gprofng/src/ClassFile.cc b/gprofng/src/ClassFile.cc
new file mode 100644
index 00000000000..7dd64a796d3
--- /dev/null
+++ b/gprofng/src/ClassFile.cc
@@ -0,0 +1,1639 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "util.h"
+#include "DbeSession.h"
+#include "ClassFile.h"
+#include "Function.h"
+#include "StringBuilder.h"
+#include "DbeFile.h"
+
+class ByteCodeInfo
+{
+public:
+
+ ByteCodeInfo (JMethod *_func, int _bci, int _lno)
+ {
+ func = _func;
+ bci = _bci;
+ lno = _lno;
+ };
+
+ JMethod *func;
+ int bci;
+ int lno;
+};
+
+typedef unsigned char u1;
+typedef unsigned short u2;
+typedef unsigned int u4;
+
+// Class File Constants
+#define JAVA_MAGIC 0xcafebabe
+
+enum {
+ // First argument in access_flags_to_str()
+ ClassAccess = 1,
+ FieldAccess,
+ MethodAccess,
+ NestedClassAccess,
+
+ // jdk/src/share/classes/sun/tools/java/RuntimeConstants.java
+ // Type codes
+ T_CLASS = 0x00000002,
+ T_BOOLEAN = 0x00000004,
+ T_CHAR = 0x00000005,
+ T_FLOAT = 0x00000006,
+ T_DOUBLE = 0x00000007,
+ T_BYTE = 0x00000008,
+ T_SHORT = 0x00000009,
+ T_INT = 0x0000000a,
+ T_LONG = 0x0000000b,
+
+// Access and modifier flags
+ ACC_PUBLIC = 0x00000001,
+ ACC_PRIVATE = 0x00000002,
+ ACC_PROTECTED = 0x00000004,
+ ACC_STATIC = 0x00000008,
+ ACC_FINAL = 0x00000010,
+ ACC_SYNCHRONIZED = 0x00000020,
+ ACC_VOLATILE = 0x00000040,
+ ACC_TRANSIENT = 0x00000080,
+ ACC_NATIVE = 0x00000100,
+ ACC_INTERFACE = 0x00000200,
+ ACC_ABSTRACT = 0x00000400,
+ ACC_STRICT = 0x00000800,
+ ACC_SYNTHETIC = 0x00001000,
+ ACC_ANNOTATION = 0x00002000,
+ ACC_ENUM = 0x00004000,
+
+ ACC_SUPER = 0x00000020,
+ ACC_BRIDGE = 0x00000040,
+ ACC_VARARGS = 0x00000080,
+
+// Opcodes
+ opc_try = -3,
+ opc_dead = -2,
+ opc_label = -1,
+ opc_nop = 0,
+ opc_aconst_null = 1,
+ opc_iconst_m1 = 2,
+ opc_iconst_0 = 3,
+ opc_iconst_1 = 4,
+ opc_iconst_2 = 5,
+ opc_iconst_3 = 6,
+ opc_iconst_4 = 7,
+ opc_iconst_5 = 8,
+ opc_lconst_0 = 9,
+ opc_lconst_1 = 10,
+ opc_fconst_0 = 11,
+ opc_fconst_1 = 12,
+ opc_fconst_2 = 13,
+ opc_dconst_0 = 14,
+ opc_dconst_1 = 15,
+ opc_bipush = 16,
+ opc_sipush = 17,
+ opc_ldc = 18,
+ opc_ldc_w = 19,
+ opc_ldc2_w = 20,
+ opc_iload = 21,
+ opc_lload = 22,
+ opc_fload = 23,
+ opc_dload = 24,
+ opc_aload = 25,
+ opc_iload_0 = 26,
+ opc_iload_1 = 27,
+ opc_iload_2 = 28,
+ opc_iload_3 = 29,
+ opc_lload_0 = 30,
+ opc_lload_1 = 31,
+ opc_lload_2 = 32,
+ opc_lload_3 = 33,
+ opc_fload_0 = 34,
+ opc_fload_1 = 35,
+ opc_fload_2 = 36,
+ opc_fload_3 = 37,
+ opc_dload_0 = 38,
+ opc_dload_1 = 39,
+ opc_dload_2 = 40,
+ opc_dload_3 = 41,
+ opc_aload_0 = 42,
+ opc_aload_1 = 43,
+ opc_aload_2 = 44,
+ opc_aload_3 = 45,
+ opc_iaload = 46,
+ opc_laload = 47,
+ opc_faload = 48,
+ opc_daload = 49,
+ opc_aaload = 50,
+ opc_baload = 51,
+ opc_caload = 52,
+ opc_saload = 53,
+ opc_istore = 54,
+ opc_lstore = 55,
+ opc_fstore = 56,
+ opc_dstore = 57,
+ opc_astore = 58,
+ opc_istore_0 = 59,
+ opc_istore_1 = 60,
+ opc_istore_2 = 61,
+ opc_istore_3 = 62,
+ opc_lstore_0 = 63,
+ opc_lstore_1 = 64,
+ opc_lstore_2 = 65,
+ opc_lstore_3 = 66,
+ opc_fstore_0 = 67,
+ opc_fstore_1 = 68,
+ opc_fstore_2 = 69,
+ opc_fstore_3 = 70,
+ opc_dstore_0 = 71,
+ opc_dstore_1 = 72,
+ opc_dstore_2 = 73,
+ opc_dstore_3 = 74,
+ opc_astore_0 = 75,
+ opc_astore_1 = 76,
+ opc_astore_2 = 77,
+ opc_astore_3 = 78,
+ opc_iastore = 79,
+ opc_lastore = 80,
+ opc_fastore = 81,
+ opc_dastore = 82,
+ opc_aastore = 83,
+ opc_bastore = 84,
+ opc_castore = 85,
+ opc_sastore = 86,
+ opc_pop = 87,
+ opc_pop2 = 88,
+ opc_dup = 89,
+ opc_dup_x1 = 90,
+ opc_dup_x2 = 91,
+ opc_dup2 = 92,
+ opc_dup2_x1 = 93,
+ opc_dup2_x2 = 94,
+ opc_swap = 95,
+ opc_iadd = 96,
+ opc_ladd = 97,
+ opc_fadd = 98,
+ opc_dadd = 99,
+ opc_isub = 100,
+ opc_lsub = 101,
+ opc_fsub = 102,
+ opc_dsub = 103,
+ opc_imul = 104,
+ opc_lmul = 105,
+ opc_fmul = 106,
+ opc_dmul = 107,
+ opc_idiv = 108,
+ opc_ldiv = 109,
+ opc_fdiv = 110,
+ opc_ddiv = 111,
+ opc_irem = 112,
+ opc_lrem = 113,
+ opc_frem = 114,
+ opc_drem = 115,
+ opc_ineg = 116,
+ opc_lneg = 117,
+ opc_fneg = 118,
+ opc_dneg = 119,
+ opc_ishl = 120,
+ opc_lshl = 121,
+ opc_ishr = 122,
+ opc_lshr = 123,
+ opc_iushr = 124,
+ opc_lushr = 125,
+ opc_iand = 126,
+ opc_land = 127,
+ opc_ior = 128,
+ opc_lor = 129,
+ opc_ixor = 130,
+ opc_lxor = 131,
+ opc_iinc = 132,
+ opc_i2l = 133,
+ opc_i2f = 134,
+ opc_i2d = 135,
+ opc_l2i = 136,
+ opc_l2f = 137,
+ opc_l2d = 138,
+ opc_f2i = 139,
+ opc_f2l = 140,
+ opc_f2d = 141,
+ opc_d2i = 142,
+ opc_d2l = 143,
+ opc_d2f = 144,
+ opc_i2b = 145,
+ opc_i2c = 146,
+ opc_i2s = 147,
+ opc_lcmp = 148,
+ opc_fcmpl = 149,
+ opc_fcmpg = 150,
+ opc_dcmpl = 151,
+ opc_dcmpg = 152,
+ opc_ifeq = 153,
+ opc_ifne = 154,
+ opc_iflt = 155,
+ opc_ifge = 156,
+ opc_ifgt = 157,
+ opc_ifle = 158,
+ opc_if_icmpeq = 159,
+ opc_if_icmpne = 160,
+ opc_if_icmplt = 161,
+ opc_if_icmpge = 162,
+ opc_if_icmpgt = 163,
+ opc_if_icmple = 164,
+ opc_if_acmpeq = 165,
+ opc_if_acmpne = 166,
+ opc_goto = 167,
+ opc_jsr = 168,
+ opc_ret = 169,
+ opc_tableswitch = 170,
+ opc_lookupswitch = 171,
+ opc_ireturn = 172,
+ opc_lreturn = 173,
+ opc_freturn = 174,
+ opc_dreturn = 175,
+ opc_areturn = 176,
+ opc_return = 177,
+ opc_getstatic = 178,
+ opc_putstatic = 179,
+ opc_getfield = 180,
+ opc_putfield = 181,
+ opc_invokevirtual = 182,
+ opc_invokespecial = 183,
+ opc_invokestatic = 184,
+ opc_invokeinterface = 185,
+ opc_invokedynamic = 186,
+ opc_new = 187,
+ opc_newarray = 188,
+ opc_anewarray = 189,
+ opc_arraylength = 190,
+ opc_athrow = 191,
+ opc_checkcast = 192,
+ opc_instanceof = 193,
+ opc_monitorenter = 194,
+ opc_monitorexit = 195,
+ opc_wide = 196,
+ opc_multianewarray = 197,
+ opc_ifnull = 198,
+ opc_ifnonnull = 199,
+ opc_goto_w = 200,
+ opc_jsr_w = 201,
+ opc_breakpoint = 202,
+
+// Constant table
+ CONSTANT_UTF8 = 1,
+ CONSTANT_UNICODE = 2,
+ CONSTANT_INTEGER = 3,
+ CONSTANT_FLOAT = 4,
+ CONSTANT_LONG = 5,
+ CONSTANT_DOUBLE = 6,
+ CONSTANT_CLASS = 7,
+ CONSTANT_STRING = 8,
+ CONSTANT_FIELD = 9,
+ CONSTANT_METHOD = 10,
+ CONSTANT_INTERFACEMETHOD = 11,
+ CONSTANT_NAMEANDTYPE = 12,
+ CONSTANT_METHODHANDLE = 15,
+ CONSTANT_METHODTYPE = 16,
+ CONSTANT_INVOKEDYNAMIC = 18
+};
+
+static char *opcNames[] = {
+ NTXT ("nop"),
+ NTXT ("aconst_null"),
+ NTXT ("iconst_m1"),
+ NTXT ("iconst_0"),
+ NTXT ("iconst_1"),
+ NTXT ("iconst_2"),
+ NTXT ("iconst_3"),
+ NTXT ("iconst_4"),
+ NTXT ("iconst_5"),
+ NTXT ("lconst_0"),
+ NTXT ("lconst_1"),
+ NTXT ("fconst_0"),
+ NTXT ("fconst_1"),
+ NTXT ("fconst_2"),
+ NTXT ("dconst_0"),
+ NTXT ("dconst_1"),
+ NTXT ("bipush"),
+ NTXT ("sipush"),
+ NTXT ("ldc"),
+ NTXT ("ldc_w"),
+ NTXT ("ldc2_w"),
+ NTXT ("iload"),
+ NTXT ("lload"),
+ NTXT ("fload"),
+ NTXT ("dload"),
+ NTXT ("aload"),
+ NTXT ("iload_0"),
+ NTXT ("iload_1"),
+ NTXT ("iload_2"),
+ NTXT ("iload_3"),
+ NTXT ("lload_0"),
+ NTXT ("lload_1"),
+ NTXT ("lload_2"),
+ NTXT ("lload_3"),
+ NTXT ("fload_0"),
+ NTXT ("fload_1"),
+ NTXT ("fload_2"),
+ NTXT ("fload_3"),
+ NTXT ("dload_0"),
+ NTXT ("dload_1"),
+ NTXT ("dload_2"),
+ NTXT ("dload_3"),
+ NTXT ("aload_0"),
+ NTXT ("aload_1"),
+ NTXT ("aload_2"),
+ NTXT ("aload_3"),
+ NTXT ("iaload"),
+ NTXT ("laload"),
+ NTXT ("faload"),
+ NTXT ("daload"),
+ NTXT ("aaload"),
+ NTXT ("baload"),
+ NTXT ("caload"),
+ NTXT ("saload"),
+ NTXT ("istore"),
+ NTXT ("lstore"),
+ NTXT ("fstore"),
+ NTXT ("dstore"),
+ NTXT ("astore"),
+ NTXT ("istore_0"),
+ NTXT ("istore_1"),
+ NTXT ("istore_2"),
+ NTXT ("istore_3"),
+ NTXT ("lstore_0"),
+ NTXT ("lstore_1"),
+ NTXT ("lstore_2"),
+ NTXT ("lstore_3"),
+ NTXT ("fstore_0"),
+ NTXT ("fstore_1"),
+ NTXT ("fstore_2"),
+ NTXT ("fstore_3"),
+ NTXT ("dstore_0"),
+ NTXT ("dstore_1"),
+ NTXT ("dstore_2"),
+ NTXT ("dstore_3"),
+ NTXT ("astore_0"),
+ NTXT ("astore_1"),
+ NTXT ("astore_2"),
+ NTXT ("astore_3"),
+ NTXT ("iastore"),
+ NTXT ("lastore"),
+ NTXT ("fastore"),
+ NTXT ("dastore"),
+ NTXT ("aastore"),
+ NTXT ("bastore"),
+ NTXT ("castore"),
+ NTXT ("sastore"),
+ NTXT ("pop"),
+ NTXT ("pop2"),
+ NTXT ("dup"),
+ NTXT ("dup_x1"),
+ NTXT ("dup_x2"),
+ NTXT ("dup2"),
+ NTXT ("dup2_x1"),
+ NTXT ("dup2_x2"),
+ NTXT ("swap"),
+ NTXT ("iadd"),
+ NTXT ("ladd"),
+ NTXT ("fadd"),
+ NTXT ("dadd"),
+ NTXT ("isub"),
+ NTXT ("lsub"),
+ NTXT ("fsub"),
+ NTXT ("dsub"),
+ NTXT ("imul"),
+ NTXT ("lmul"),
+ NTXT ("fmul"),
+ NTXT ("dmul"),
+ NTXT ("idiv"),
+ NTXT ("ldiv"),
+ NTXT ("fdiv"),
+ NTXT ("ddiv"),
+ NTXT ("irem"),
+ NTXT ("lrem"),
+ NTXT ("frem"),
+ NTXT ("drem"),
+ NTXT ("ineg"),
+ NTXT ("lneg"),
+ NTXT ("fneg"),
+ NTXT ("dneg"),
+ NTXT ("ishl"),
+ NTXT ("lshl"),
+ NTXT ("ishr"),
+ NTXT ("lshr"),
+ NTXT ("iushr"),
+ NTXT ("lushr"),
+ NTXT ("iand"),
+ NTXT ("land"),
+ NTXT ("ior"),
+ NTXT ("lor"),
+ NTXT ("ixor"),
+ NTXT ("lxor"),
+ NTXT ("iinc"),
+ NTXT ("i2l"),
+ NTXT ("i2f"),
+ NTXT ("i2d"),
+ NTXT ("l2i"),
+ NTXT ("l2f"),
+ NTXT ("l2d"),
+ NTXT ("f2i"),
+ NTXT ("f2l"),
+ NTXT ("f2d"),
+ NTXT ("d2i"),
+ NTXT ("d2l"),
+ NTXT ("d2f"),
+ NTXT ("i2b"),
+ NTXT ("i2c"),
+ NTXT ("i2s"),
+ NTXT ("lcmp"),
+ NTXT ("fcmpl"),
+ NTXT ("fcmpg"),
+ NTXT ("dcmpl"),
+ NTXT ("dcmpg"),
+ NTXT ("ifeq"),
+ NTXT ("ifne"),
+ NTXT ("iflt"),
+ NTXT ("ifge"),
+ NTXT ("ifgt"),
+ NTXT ("ifle"),
+ NTXT ("if_icmpeq"),
+ NTXT ("if_icmpne"),
+ NTXT ("if_icmplt"),
+ NTXT ("if_icmpge"),
+ NTXT ("if_icmpgt"),
+ NTXT ("if_icmple"),
+ NTXT ("if_acmpeq"),
+ NTXT ("if_acmpne"),
+ NTXT ("goto"),
+ NTXT ("jsr"),
+ NTXT ("ret"),
+ NTXT ("tableswitch"),
+ NTXT ("lookupswitch"),
+ NTXT ("ireturn"),
+ NTXT ("lreturn"),
+ NTXT ("freturn"),
+ NTXT ("dreturn"),
+ NTXT ("areturn"),
+ NTXT ("return"),
+ NTXT ("getstatic"),
+ NTXT ("putstatic"),
+ NTXT ("getfield"),
+ NTXT ("putfield"),
+ NTXT ("invokevirtual"),
+ NTXT ("invokespecial"),
+ NTXT ("invokestatic"),
+ NTXT ("invokeinterface"),
+ NTXT ("invokedynamic"),
+ NTXT ("new"),
+ NTXT ("newarray"),
+ NTXT ("anewarray"),
+ NTXT ("arraylength"),
+ NTXT ("athrow"),
+ NTXT ("checkcast"),
+ NTXT ("instanceof"),
+ NTXT ("monitorenter"),
+ NTXT ("monitorexit"),
+ NTXT ("wide"),
+ NTXT ("multianewarray"),
+ NTXT ("ifnull"),
+ NTXT ("ifnonnull"),
+ NTXT ("goto_w"),
+ NTXT ("jsr_w"),
+ NTXT ("breakpoint")
+};
+
+
+#define APPEND_FLAG(len, buf, flag, x) \
+ if (((x) & (flag)) != 0) \
+ { \
+ flag &= ~(x); \
+ AppendString(len, buf, NTXT("%s%s"), delimiter, #x); \
+ delimiter = NTXT("|"); \
+ }
+
+static char *
+access_flags_to_str (int kind, int flag)
+{
+ static char buf[256];
+ size_t len = 0;
+ buf[0] = 0;
+ if (flag == 0)
+ {
+ AppendString (len, buf, NTXT ("0x%x"), (unsigned int) flag);
+ return buf;
+ }
+ const char *delimiter = "";
+ if (kind == ClassAccess)
+ {
+ APPEND_FLAG (len, buf, flag, ACC_FINAL);
+ APPEND_FLAG (len, buf, flag, ACC_SUPER);
+ APPEND_FLAG (len, buf, flag, ACC_INTERFACE);
+ APPEND_FLAG (len, buf, flag, ACC_ABSTRACT);
+ APPEND_FLAG (len, buf, flag, ACC_SYNTHETIC);
+ APPEND_FLAG (len, buf, flag, ACC_ANNOTATION);
+ APPEND_FLAG (len, buf, flag, ACC_ENUM);
+ if (flag)
+ AppendString (len, buf, "%s0x%x", delimiter, (unsigned int) (flag));
+ }
+ else if (kind == FieldAccess)
+ {
+ APPEND_FLAG (len, buf, flag, ACC_PUBLIC);
+ APPEND_FLAG (len, buf, flag, ACC_PRIVATE);
+ APPEND_FLAG (len, buf, flag, ACC_PROTECTED);
+ APPEND_FLAG (len, buf, flag, ACC_STATIC);
+ APPEND_FLAG (len, buf, flag, ACC_FINAL);
+ APPEND_FLAG (len, buf, flag, ACC_VOLATILE);
+ APPEND_FLAG (len, buf, flag, ACC_TRANSIENT);
+ APPEND_FLAG (len, buf, flag, ACC_SYNTHETIC);
+ APPEND_FLAG (len, buf, flag, ACC_ENUM);
+ if (flag)
+ AppendString (len, buf, "%s0x%x", delimiter, (unsigned int) (flag));
+ }
+ else if (kind == MethodAccess)
+ {
+ APPEND_FLAG (len, buf, flag, ACC_PUBLIC);
+ APPEND_FLAG (len, buf, flag, ACC_PRIVATE);
+ APPEND_FLAG (len, buf, flag, ACC_PROTECTED);
+ APPEND_FLAG (len, buf, flag, ACC_STATIC);
+ APPEND_FLAG (len, buf, flag, ACC_FINAL);
+ APPEND_FLAG (len, buf, flag, ACC_SYNCHRONIZED);
+ APPEND_FLAG (len, buf, flag, ACC_BRIDGE);
+ APPEND_FLAG (len, buf, flag, ACC_VARARGS);
+ APPEND_FLAG (len, buf, flag, ACC_NATIVE);
+ APPEND_FLAG (len, buf, flag, ACC_ABSTRACT);
+ APPEND_FLAG (len, buf, flag, ACC_STRICT);
+ APPEND_FLAG (len, buf, flag, ACC_SYNTHETIC);
+ if (flag)
+ AppendString (len, buf, "%s0x%x", delimiter, (unsigned int) (flag));
+ }
+ else if (kind == NestedClassAccess)
+ {
+ APPEND_FLAG (len, buf, flag, ACC_PUBLIC);
+ APPEND_FLAG (len, buf, flag, ACC_PRIVATE);
+ APPEND_FLAG (len, buf, flag, ACC_PROTECTED);
+ APPEND_FLAG (len, buf, flag, ACC_STATIC);
+ APPEND_FLAG (len, buf, flag, ACC_FINAL);
+ APPEND_FLAG (len, buf, flag, ACC_INTERFACE);
+ APPEND_FLAG (len, buf, flag, ACC_ABSTRACT);
+ APPEND_FLAG (len, buf, flag, ACC_SYNTHETIC);
+ APPEND_FLAG (len, buf, flag, ACC_ANNOTATION);
+ APPEND_FLAG (len, buf, flag, ACC_ENUM);
+ if (flag)
+ AppendString (len, buf, "%s0x%x", delimiter, (unsigned int) (flag));
+ }
+ return buf;
+}
+
+class DataReadException
+{
+public:
+
+ DataReadException (char *s)
+ {
+ str_err = s;
+ }
+
+ ~DataReadException ()
+ {
+ free (str_err);
+ }
+
+ char *
+ toString ()
+ {
+ return str_err;
+ }
+
+private:
+ char *str_err;
+};
+
+class DataInputStream
+{
+public:
+
+ DataInputStream (const unsigned char *bytes, int64_t sz)
+ {
+ bp = bp_orig = bytes;
+ bp_last = bp_orig + sz;
+ }
+
+ DataInputStream (DataInputStream *in)
+ {
+ bp = bp_orig = in->bp_orig;
+ bp_last = in->bp_last;
+ }
+
+ u1
+ readByte ()
+ {
+ check (1);
+ u1 val = *bp;
+ bp++;
+ return val;
+ }
+
+ u2
+ readUnsignedShort ()
+ {
+ check (2);
+ u2 val = (bp[0] << 8) | bp[1];
+ bp += 2;
+ return val;
+ }
+
+ u4
+ readUnsigned ()
+ {
+ check (4);
+ u4 val = (bp[0] << 24) | (bp[1] << 16) | (bp[2] << 8) | bp[3];
+ bp += 4;
+ return val;
+ }
+
+ const u1 *
+ getptr ()
+ {
+ return bp;
+ }
+
+ const size_t
+ get_offset ()
+ {
+ return bp - bp_orig;
+ }
+
+ void
+ skip (int n)
+ {
+ check (n);
+ bp += n;
+ }
+
+ void
+ reset ()
+ {
+ bp = bp_orig;
+ }
+
+ void
+ copy_bytes (char *buf, int64_t len)
+ {
+ check (len);
+ memcpy (buf, bp, len);
+ buf[len] = '\0';
+ }
+
+private:
+
+ void
+ check (int64_t sz)
+ {
+ if (sz < 0 || bp + sz > bp_last)
+ {
+ DataReadException *e1 = new DataReadException (
+ dbe_sprintf (GTXT ("(Cannot read %lld byte(s) offset=0x%llx)\n"),
+ (long long) sz, (long long) get_offset ()));
+ throw (e1);
+ }
+ };
+
+ const unsigned char *bp_last;
+ const unsigned char *bp_orig;
+ const unsigned char *bp;
+};
+
+class BinaryConstantPool
+{
+public:
+ BinaryConstantPool (DataInputStream &in);
+ ~BinaryConstantPool ();
+
+ u1
+ getType (int n)
+ {
+ return (n < nconst && n > 0) ? types[n] : 0;
+ };
+ char *getString (int index);
+
+private:
+ static char *getTypeName (int ty);
+ static char *type_name_to_str (int ty);
+ static char *offset_to_str (long long offset);
+ int nconst;
+ u1 *types;
+ int64_t *offsets;
+ char **strings;
+ DataInputStream *input;
+};
+
+char *
+BinaryConstantPool::type_name_to_str (int ty)
+{
+ static char buf[128];
+ char *tyName = getTypeName (ty);
+ snprintf (buf, sizeof (buf), NTXT ("%s(%d)"), tyName, ty);
+ return buf;
+}
+
+char *
+BinaryConstantPool::offset_to_str (long long offset)
+{
+ static char buf[128];
+ snprintf (buf, sizeof (buf), NTXT ("offset=0x%06llx (%llu)"), offset, offset);
+ return buf;
+}
+
+BinaryConstantPool::BinaryConstantPool (DataInputStream &in)
+{
+ nconst = 0;
+ types = NULL;
+ offsets = NULL;
+ strings = NULL;
+ input = new DataInputStream (in);
+ int cntConst = in.readUnsignedShort ();
+ if (cntConst > 0)
+ {
+ types = new u1[cntConst];
+ types[0] = 0;
+ offsets = new int64_t [cntConst];
+ strings = new char * [cntConst];
+ strings[0] = NULL;
+ }
+ Dprintf (DUMP_JAVA_CLASS, NTXT ("# BinaryConstantPool: %d\n"), (int) nconst);
+ for (int i = 1; i < cntConst; i++)
+ {
+ nconst = i + 1;
+ strings[i] = NULL;
+ types[i] = in.readByte ();
+ offsets[i] = in.get_offset ();
+ Dprintf (DUMP_JAVA_CLASS, NTXT (" %3d %-25s %-25s"), i, offset_to_str (offsets[i]), type_name_to_str (types[i]));
+ switch (types[i])
+ {
+ case CONSTANT_UTF8:
+ {
+ u2 length = in.readUnsignedShort ();
+ in.skip (length);
+ Dprintf (DUMP_JAVA_CLASS, " length=%u\n", (unsigned int) length);
+ break;
+ }
+ case CONSTANT_INTEGER:
+ {
+ u4 bytes = in.readUnsigned ();
+ Dprintf (DUMP_JAVA_CLASS, " bytes=0x%08x\n", (unsigned int) bytes);
+ break;
+ }
+ case CONSTANT_FLOAT:
+ {
+ u4 bytes = in.readUnsigned ();
+ Dprintf (DUMP_JAVA_CLASS, " bytes=0x%08x\n", (unsigned int) bytes);
+ break;
+ }
+ case CONSTANT_LONG:
+ case CONSTANT_DOUBLE:
+ {
+ // JVM 4.4.5: all 8-byte constants take up
+ // two entries in the constant_pool table.
+ i++;
+ nconst++;
+ offsets[i] = 0;
+ strings[i] = NULL;
+ u4 high_bytes = in.readUnsigned ();
+ u4 low_bytes = in.readUnsigned ();
+ Dprintf (DUMP_JAVA_CLASS, NTXT (" high_bytes=0x%08x low_bytes=0x%08x\n"),
+ (unsigned int) high_bytes, (unsigned int) low_bytes);
+ break;
+ }
+ case CONSTANT_CLASS:
+ {
+ u2 name_index = in.readUnsignedShort ();
+ Dprintf (DUMP_JAVA_CLASS, NTXT (" name_index=%6u\n"), (unsigned int) name_index);
+ break;
+ }
+ case CONSTANT_STRING:
+ {
+ u2 string_index = in.readUnsignedShort ();
+ Dprintf (DUMP_JAVA_CLASS, NTXT (" string_index=%4u\n"), (unsigned int) string_index);
+ break;
+ }
+ case CONSTANT_FIELD:
+ case CONSTANT_METHOD:
+ case CONSTANT_INTERFACEMETHOD:
+ {
+ u2 class_index = in.readUnsignedShort ();
+ u2 name_and_type_index = in.readUnsignedShort ();
+ Dprintf (DUMP_JAVA_CLASS, NTXT (" class_index=%5u name_and_type_index=%u\n"),
+ (unsigned int) class_index, (unsigned int) name_and_type_index);
+ break;
+ }
+ case CONSTANT_NAMEANDTYPE:
+ {
+ u2 name_index = in.readUnsignedShort ();
+ u2 descriptor_index = in.readUnsignedShort ();
+ Dprintf (DUMP_JAVA_CLASS, " name_index=%6u descriptor_index=%u\n",
+ (unsigned int) name_index, (unsigned int) descriptor_index);
+ break;
+ }
+ case CONSTANT_METHODHANDLE:
+ {
+ u1 reference_kind = in.readByte ();
+ u2 reference_index = in.readUnsignedShort ();
+ Dprintf (DUMP_JAVA_CLASS, " reference_kind=%u reference_index=%u\n",
+ (unsigned int) reference_kind, (unsigned int) reference_index);
+ break;
+ }
+ case CONSTANT_METHODTYPE:
+ {
+ u2 descriptor_index = in.readUnsignedShort ();
+ Dprintf (DUMP_JAVA_CLASS, NTXT (" descriptor_index=%u\n"),
+ (unsigned int) descriptor_index);
+ break;
+ }
+ case CONSTANT_INVOKEDYNAMIC:
+ {
+ u2 bootstrap_method_attr_index = in.readUnsignedShort ();
+ u2 name_and_type_index = in.readUnsignedShort ();
+ Dprintf (DUMP_JAVA_CLASS, NTXT (" bootstrap_method_attr_index=%5u name_and_type_index=%u\n"),
+ (unsigned int) bootstrap_method_attr_index,
+ (unsigned int) name_and_type_index);
+ break;
+ }
+ default:
+ Dprintf (DUMP_JAVA_CLASS, NTXT ("\n"));
+ DataReadException *e1 = new DataReadException (
+ dbe_sprintf (GTXT ("BinaryConstantPool[%d]: bad tag %d %s\n"),
+ i, types[i], offset_to_str (offsets[i])));
+ throw (e1);
+ }
+ }
+}
+
+BinaryConstantPool::~BinaryConstantPool ()
+{
+ delete[] types;
+ delete[] offsets;
+ delete input;
+ if (strings)
+ {
+ for (int i = 0; i < nconst; i++)
+ free (strings[i]);
+ delete[] strings;
+ }
+}
+
+#define CASE_S(x) case x: return (char *) #x
+
+char *
+BinaryConstantPool::getTypeName (int ty)
+{
+ switch (ty)
+ {
+ CASE_S (CONSTANT_UTF8);
+ CASE_S (CONSTANT_INTEGER);
+ CASE_S (CONSTANT_FLOAT);
+ CASE_S (CONSTANT_LONG);
+ CASE_S (CONSTANT_DOUBLE);
+ CASE_S (CONSTANT_CLASS);
+ CASE_S (CONSTANT_STRING);
+ CASE_S (CONSTANT_FIELD);
+ CASE_S (CONSTANT_METHOD);
+ CASE_S (CONSTANT_INTERFACEMETHOD);
+ CASE_S (CONSTANT_NAMEANDTYPE);
+ CASE_S (CONSTANT_METHODHANDLE);
+ CASE_S (CONSTANT_METHODTYPE);
+ CASE_S (CONSTANT_INVOKEDYNAMIC);
+ default: return NTXT ("UNKNOWN_TYPE");
+ }
+}
+
+char *
+BinaryConstantPool::getString (int index)
+{
+ if (index >= nconst || index <= 0)
+ return NULL;
+ if (strings[index])
+ return strings[index];
+ input->reset ();
+ input->skip (offsets[index]);
+ switch (types[index])
+ {
+ case CONSTANT_CLASS:
+ case CONSTANT_STRING:
+ case CONSTANT_NAMEANDTYPE:
+ strings[index] = dbe_strdup (getString (input->readUnsignedShort ()));
+ return strings[index];
+ case CONSTANT_METHOD:
+ input->readUnsignedShort (); // cl_inx
+ strings[index] = dbe_strdup (getString (input->readUnsignedShort ()));
+ return strings[index];
+ case CONSTANT_UTF8:
+ break;
+ default:
+ return NULL;
+ }
+ u2 len = input->readUnsignedShort ();
+ strings[index] = (char *) malloc (len + 1);
+ input->copy_bytes (strings[index], len);
+ return strings[index];
+}
+
+ClassFile::ClassFile () : Module ()
+{
+ input = NULL;
+ bcpool = NULL;
+ cf_buf = NULL;
+ cur_jmthd = NULL;
+ blanksCnt = 0;
+ cf_bufsz = 0;
+ lang_code = Sp_lang_java;
+ class_name = NULL;
+ class_filename = NULL;
+ source_name = NULL;
+ byteCodeInfo = NULL;
+}
+
+char *
+ClassFile::get_opc_name (int op)
+{
+ if (op >= 0 && ((size_t) op) < sizeof (opcNames) / sizeof (char*))
+ return opcNames[op];
+ switch (op)
+ {
+ case opc_try:
+ return NTXT ("try");
+ case opc_dead:
+ return NTXT ("dead");
+ case opc_label:
+ return NTXT ("label");
+ default:
+ return NTXT ("Unknown op code");
+ }
+}
+
+void
+ClassFile::openFile (const char *fname)
+{
+ if (fname == NULL)
+ return;
+ int fd = open64 (fname, O_RDONLY);
+ if (fd == -1)
+ {
+ append_msg (CMSG_ERROR, GTXT ("Cannot open file %s"), fname);
+ return;
+ }
+ struct stat64 stat_buf;
+ if ((fstat64 (fd, &stat_buf) == -1) || (stat_buf.st_size == 0))
+ {
+ close (fd);
+ append_msg (CMSG_ERROR, GTXT ("Cannot read file %s"), fname);
+ return;
+ }
+ cf_bufsz = stat_buf.st_size;
+ cf_buf = (unsigned char *) malloc (cf_bufsz);
+ if (cf_bufsz != read_from_file (fd, cf_buf, cf_bufsz))
+ {
+ free (cf_buf);
+ cf_buf = NULL;
+ close (fd);
+ append_msg (CMSG_ERROR, GTXT ("Cannot read file %s"), fname);
+ return;
+ }
+ close (fd);
+
+ input = new DataInputStream (cf_buf, cf_bufsz);
+ u4 c_magic = input->readUnsigned ();
+ if (c_magic != JAVA_MAGIC)
+ {
+ append_msg (CMSG_ERROR, GTXT ("Not a class file: %s"), fname);
+ return;
+ }
+ /* u2 minor = */ input->readUnsignedShort ();
+ /* u2 major = */ input->readUnsignedShort ();
+ status = AE_OK;
+}
+
+ClassFile::~ClassFile ()
+{
+ free (cf_buf);
+ free (class_name);
+ free (class_filename);
+ free (source_name);
+ delete bcpool;
+ delete input;
+}
+
+static void
+convertName (char *s)
+{
+ while (*s)
+ {
+ if (*s == '/')
+ *s = '.';
+ s++;
+ }
+}
+
+void
+ClassFile::printConstant (StringBuilder *sb, int index)
+{
+ u1 type = bcpool->getType (index);
+ switch (type)
+ {
+ case CONSTANT_METHOD:
+ {
+ char *str = bcpool->getString (index);
+ if (str)
+ {
+ convertName (str);
+ sb->append (str);
+ sb->append (NTXT ("()"));
+ }
+ break;
+ }
+ case CONSTANT_CLASS:
+ {
+ char *str = bcpool->getString (index);
+ if (str)
+ {
+ convertName (str);
+ sb->append (str);
+ }
+ break;
+ }
+ case CONSTANT_UTF8:
+ {
+ char *str = bcpool->getString (index);
+ if (str)
+ sb->append (str);
+ break;
+ }
+ case CONSTANT_STRING:
+ {
+ char *str = bcpool->getString (index);
+ if (str)
+ {
+ sb->append ('"');
+ sb->append (str);
+ sb->append ('"');
+ }
+ break;
+ }
+ default:
+ sb->append ('#');
+ sb->append ((int) index);
+ break;
+ }
+}
+
+long long
+ClassFile::printCodeSequence (StringBuilder *sb, uint64_t addr, DataInputStream *in)
+{
+ int64_t offset = in->get_offset ();
+ sb->appendf (NTXT ("%08llx: "), (long long) addr);
+ int opcode = in->readByte ();
+ if (opcode == opc_wide)
+ {
+ opcode = in->readByte ();
+ sb->append (get_opc_name (opcode));
+ sb->append (NTXT ("_w "));
+ int arg = in->readUnsignedShort ();
+ switch (opcode)
+ {
+ case opc_aload: case opc_astore:
+ case opc_fload: case opc_fstore:
+ case opc_iload: case opc_istore:
+ case opc_lload: case opc_lstore:
+ case opc_dload: case opc_dstore:
+ case opc_ret:
+ sb->append (arg);
+ break;
+ case opc_iinc:
+ sb->append (arg);
+ sb->append (' ');
+ sb->append (in->readUnsignedShort ());
+ break;
+ default:
+ sb->append (GTXT ("Invalid opcode"));
+ break;
+ }
+ }
+ else
+ {
+ sb->append (get_opc_name (opcode));
+ sb->append (' ');
+ switch (opcode)
+ {
+ case opc_aload: case opc_astore:
+ case opc_fload: case opc_fstore:
+ case opc_iload: case opc_istore:
+ case opc_lload: case opc_lstore:
+ case opc_dload: case opc_dstore:
+ case opc_ret:
+ sb->append (in->readByte ());
+ break;
+ case opc_iinc:
+ sb->append (in->readByte ());
+ sb->append (' ');
+ sb->append (in->readByte ());
+ break;
+ case opc_tableswitch:
+ {
+ int align = (addr + 1) % 4; // 1 byte is a length of opc_lookupswitch
+ if (align != 0)
+ {
+ in->skip (4 - align); // four byte boundry
+ }
+ long default_skip = in->readUnsigned ();
+ long low = in->readUnsigned ();
+ long high = in->readUnsigned ();
+ sb->appendf (GTXT ("%ld to %ld: default=0x%llx"),
+ (long) low, (long) high, (long long) (addr + default_skip));
+ for (long i = low; i <= high; ++i)
+ /* u4 i1 = */ in->readUnsigned ();
+ break;
+ }
+ case opc_lookupswitch:
+ {
+ int align = (addr + 1) % 4; // 1 byte is a length of opc_lookupswitch
+ if (align != 0)
+ in->skip (4 - align); // four byte boundry
+ u4 default_skip = in->readUnsigned ();
+ u4 npairs = in->readUnsigned ();
+ sb->appendf (GTXT ("%d: default=0x%llx"), npairs,
+ (long long) (addr + default_skip));
+ for (int i = 0, nints = npairs * 2; i < nints; i += 2)
+ {
+ /* u4 i1 = */ in->readUnsigned ();
+ /* u4 i2 = */ in->readUnsigned ();
+ }
+ break;
+ }
+ case opc_newarray:
+ switch (in->readByte ())
+ {
+ case T_INT:
+ sb->append (GTXT ("int"));
+ break;
+ case T_LONG:
+ sb->append (GTXT ("long"));
+ break;
+ case T_FLOAT:
+ sb->append (GTXT ("float"));
+ break;
+ case T_DOUBLE:
+ sb->append (GTXT ("double"));
+ break;
+ case T_CHAR:
+ sb->append (GTXT ("char"));
+ break;
+ case T_SHORT:
+ sb->append (GTXT ("short"));
+ break;
+ case T_BYTE:
+ sb->append (GTXT ("byte"));
+ break;
+ case T_BOOLEAN:
+ sb->append (GTXT ("boolean"));
+ break;
+ default:
+ sb->append (GTXT ("BOGUS TYPE"));
+ break;
+ }
+ break;
+ case opc_anewarray:
+ sb->append (GTXT ("class "));
+ printConstant (sb, in->readUnsignedShort ());
+ break;
+ case opc_sipush:
+ sb->append (in->readUnsignedShort ());
+ break;
+ case opc_bipush:
+ sb->append (in->readByte ());
+ break;
+ case opc_ldc:
+ printConstant (sb, in->readByte ());
+ break;
+ case opc_ldc_w: case opc_ldc2_w:
+ case opc_instanceof: case opc_checkcast:
+ case opc_new:
+ case opc_putstatic: case opc_getstatic:
+ case opc_putfield: case opc_getfield:
+ case opc_invokevirtual:
+ case opc_invokespecial:
+ case opc_invokestatic:
+ printConstant (sb, in->readUnsignedShort ());
+ break;
+ case opc_invokeinterface:
+ {
+ u2 index = in->readUnsignedShort ();
+ u1 count = in->readByte ();
+ /* u1 zero = */ in->readByte ();
+ sb->appendf (" #%u, %u) ", (unsigned int) index, (unsigned int) count);
+ printConstant (sb, index);
+ break;
+ }
+ case opc_multianewarray:
+ {
+ u2 index = in->readUnsignedShort ();
+ printConstant (sb, index);
+ sb->appendf (GTXT (" dim #%d "), index);
+ break;
+ }
+ case opc_jsr: case opc_goto:
+ case opc_ifeq: case opc_ifge: case opc_ifgt:
+ case opc_ifle: case opc_iflt: case opc_ifne:
+ case opc_if_icmpeq: case opc_if_icmpne: case opc_if_icmpge:
+ case opc_if_icmpgt: case opc_if_icmple: case opc_if_icmplt:
+ case opc_if_acmpeq: case opc_if_acmpne:
+ case opc_ifnull: case opc_ifnonnull:
+ sb->appendf (NTXT ("0x%llx"), (long long) (addr + (short) in->readUnsignedShort ()));
+ break;
+ case opc_jsr_w:
+ case opc_goto_w:
+ sb->append (addr + (int) in->readUnsigned ());
+ break;
+ default:
+ break;
+ }
+ }
+ return in->get_offset () - offset;
+}
+
+void
+ClassFile::readAttributes (int count)
+{
+ blanksCnt += 4;
+ for (int ax = 0; ax < count; ax++)
+ {
+ u2 attribute_name_index = input->readUnsignedShort ();
+ u4 attribute_length = input->readUnsigned ();
+ char *attribute_name = bcpool->getString (attribute_name_index);
+ if (!attribute_name)
+ {
+ Dprintf (DUMP_JAVA_CLASS, NTXT ("%*c %2d: attr_name=%3d %-15s len=%4d\n"),
+ (int) blanksCnt, ' ', (int) (ax + 1),
+ (int) attribute_name_index, STR (attribute_name), (int) attribute_length);
+ input->skip (attribute_length);
+ continue;
+ }
+
+ if (strcmp (attribute_name, NTXT ("SourceFile")) == 0)
+ {
+ u2 sourcefile_index = input->readUnsignedShort ();
+ source_name = dbe_strdup (bcpool->getString (sourcefile_index));
+ Dprintf (DUMP_JAVA_CLASS, NTXT ("%*c %2d: attr_name=%3d %-15s len=%4d file_name=%d %s\n"),
+ (int) blanksCnt, ' ', (int) (ax + 1),
+ (int) attribute_name_index, STR (attribute_name), (int) attribute_length,
+ (int) sourcefile_index, STR (source_name));
+ }
+ else if (strcmp (attribute_name, NTXT ("InnerClasses")) == 0)
+ {
+ int niclasses = input->readUnsignedShort ();
+ for (int ix = 0; ix < niclasses; ix++)
+ {
+ u2 inner_class_info_index = input->readUnsignedShort ();
+ u2 outer_class_info_index = input->readUnsignedShort ();
+ u2 inner_name_index = input->readUnsignedShort ();
+ u2 inner_class_access_flags = input->readUnsignedShort ();
+ Dprintf (DUMP_JAVA_CLASS,
+ NTXT ("%*c %2d: attr_name=%3d %-15s len=%4d name=%d '%s'\n"
+ "%*cinner_class_info_index=%d outer_class_info_index=%d flags=%s\n"),
+ (int) blanksCnt, ' ', (int) (ax + 1),
+ (int) attribute_name_index, STR (attribute_name), (int) attribute_length,
+ (int) inner_name_index, STR (bcpool->getString (inner_name_index)),
+ (int) (blanksCnt + 10), ' ',
+ (int) inner_class_info_index, (int) outer_class_info_index,
+ access_flags_to_str (NestedClassAccess, inner_class_access_flags));
+ }
+ }
+ else if (strcmp (attribute_name, NTXT ("Code")) == 0)
+ {
+ u2 max_stack = input->readUnsignedShort ();
+ u2 max_locals = input->readUnsignedShort ();
+ u4 code_length = input->readUnsigned ();
+ if (cur_jmthd)
+ {
+ cur_jmthd->size = code_length;
+ cur_jmthd->img_fname = dbeFile->get_location ();
+ cur_jmthd->img_offset = input->get_offset ();
+ }
+ input->skip (code_length);
+ u2 exception_table_length = input->readUnsignedShort ();
+ input->skip (exception_table_length * (2 + 2 + 2 + 2));
+ Dprintf (DUMP_JAVA_CLASS,
+ NTXT ("%*c %2d: attr_name=%3d %-15s len=%4d max_stack=%d max_locals=%d code_length=%d exception_table_length=%d\n"),
+ (int) blanksCnt, ' ', (int) (ax + 1),
+ (int) attribute_name_index, STR (attribute_name), (int) attribute_length,
+ (int) max_stack, (int) max_locals, (int) code_length, (int) exception_table_length);
+ readAttributes (input->readUnsignedShort ());
+ }
+ else if (strcmp (attribute_name, NTXT ("LineNumberTable")) == 0)
+ {
+ int nlines = input->readUnsignedShort ();
+ Dprintf (DUMP_JAVA_CLASS, NTXT ("%*c %2d: attr_name=%3d %-15s len=%4d nlines=%d\n"),
+ (int) blanksCnt, ' ', (int) (ax + 1),
+ (int) attribute_name_index, STR (attribute_name), (int) attribute_length,
+ (int) nlines);
+ for (int lx = 0; lx < nlines; lx++)
+ {
+ int bci = input->readUnsignedShort ();
+ int lno = input->readUnsignedShort ();
+ Dprintf (DUMP_JAVA_CLASS, NTXT ("%*c %3d: pc=%4d (0x%04x) line=%d\n"),
+ (int) (blanksCnt + 5), ' ', (int) (lx + 1), (int) bci, (int) bci, (int) lno);
+ if (cur_jmthd)
+ byteCodeInfo->append (new ByteCodeInfo (cur_jmthd, bci, lno));
+ }
+ }
+ else
+ {
+ Dprintf (DUMP_JAVA_CLASS, NTXT ("%*c %2d: attr_name=%3d %-15s len=%4d\n"),
+ (int) blanksCnt, ' ', (int) (ax + 1),
+ (int) attribute_name_index, STR (attribute_name),
+ (int) attribute_length);
+ input->skip (attribute_length);
+ }
+ }
+ blanksCnt -= 4;
+}
+
+int
+ClassFile::readFile ()
+{
+ if (status != AE_NOTREAD)
+ return status;
+ status = AE_OTHER;
+
+ // The ClassFile Structure http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html
+ try
+ {
+ blanksCnt = 4;
+ cur_jmthd = NULL;
+ char *fname = dbeFile->get_location ();
+ openFile (fname);
+ Dprintf (DUMP_JAVA_CLASS, NTXT ("\nClassFile::readFile status=%d %s location=%s\n"),
+ (unsigned int) status, STR (get_name ()), STR (fname));
+ if (status != AE_OK)
+ return status;
+ byteCodeInfo = new Vector<ByteCodeInfo *>(512);
+ bcpool = new BinaryConstantPool (*input);
+ u2 access_flags = input->readUnsignedShort ();
+ Dprintf (DUMP_JAVA_CLASS, NTXT ("\naccess_flags=%s; %s\n"),
+ access_flags_to_str (ClassAccess, access_flags),
+ STR (dbeFile->get_name ()));
+ u2 classNameInd = input->readUnsignedShort ();
+ class_filename = dbe_strdup (bcpool->getString (classNameInd));
+ if (class_filename)
+ {
+ class_name = strdup (class_filename);
+ convertName (class_name);
+ }
+
+ // Get superclass name
+ u2 superClassInd = input->readUnsignedShort ();
+ //char *str = bcpool->getString(superClassInd);
+ //super_name = str ? convertName( str ) : NULL;
+
+ // Read interfaces
+ int interfaces_count = input->readUnsignedShort ();
+ Dprintf (DUMP_JAVA_CLASS,
+ NTXT (" class_name=%3d %-20s superClass=%3d %s interfaces_count=%d\n"),
+ (int) classNameInd, STR (class_name),
+ (int) superClassInd, STR (bcpool->getString (superClassInd)),
+ (int) interfaces_count);
+ for (int i = 0; i < interfaces_count; i++)
+ {
+ u2 index = input->readUnsignedShort ();
+ Dprintf (DUMP_JAVA_CLASS, NTXT (" %6lld%s"), (long long) index,
+ (i % 8 == 7) || (i + 1 == interfaces_count) ? "\n" : "");
+ }
+
+ // Read fields
+ int fields_count = input->readUnsignedShort ();
+ Dprintf (DUMP_JAVA_CLASS, NTXT (" fields_count=%d\n"), fields_count);
+ for (int i = 0; i < fields_count; i++)
+ {
+ u2 fld_access_flags = input->readUnsignedShort ();
+ u2 name_index = input->readUnsignedShort ();
+ u2 descriptor_index = input->readUnsignedShort ();
+ u2 attributes_count = input->readUnsignedShort ();
+ Dprintf (DUMP_JAVA_CLASS,
+ NTXT (" %2d: name=%3d %-20s flags=%s; desc_ind=%d attr_count=%d\n"),
+ i, (int) name_index, STR (bcpool->getString (name_index)),
+ access_flags_to_str (FieldAccess, fld_access_flags),
+ (int) descriptor_index, (int) attributes_count);
+ readAttributes (attributes_count);
+ }
+
+ // Read methods
+ int methods_count = input->readUnsignedShort ();
+ Dprintf (DUMP_JAVA_CLASS, NTXT ("\n methods_count=%d\n"), (int) methods_count);
+ int func_cnt = functions->size ();
+ for (int i = 0; i < methods_count; i++)
+ {
+ u2 mthd_access_flags = input->readUnsignedShort ();
+ u2 name_index = input->readUnsignedShort ();
+ u2 descriptor_index = input->readUnsignedShort ();
+ char *mname = bcpool->getString (name_index);
+ if (mname == NULL)
+ {
+ DataReadException *e1 = new DataReadException (dbe_sprintf (GTXT ("method name[%d] is NULL\n"), i));
+ throw (e1);
+ }
+ char *msign = bcpool->getString (descriptor_index);
+ if (msign == NULL)
+ {
+ DataReadException *e1 = new DataReadException (dbe_sprintf (GTXT ("method signature[%d] is NULL\n"), i));
+ throw (e1);
+ }
+ size_t len = strlen (class_name);
+ cur_jmthd = NULL;
+ for (int idx = 0; idx < func_cnt; idx++)
+ {
+ JMethod *jmthd = (JMethod*) functions->fetch (idx);
+ char *jmt_name = jmthd->get_name (Histable::SHORT);
+ if (strncmp (jmt_name, class_name, len) == 0)
+ {
+ if (strcmp (jmt_name + len + 1, mname) == 0 &&
+ strcmp (jmthd->get_signature (), msign) == 0)
+ {
+ cur_jmthd = jmthd;
+ break;
+ }
+ }
+ }
+ if (cur_jmthd == NULL)
+ {
+ cur_jmthd = dbeSession->createJMethod ();
+ cur_jmthd->module = this;
+ cur_jmthd->set_signature (dbe_strdup (msign));
+ char *nm = dbe_sprintf (NTXT ("%s.%s"), class_name, mname);
+ cur_jmthd->set_name (nm);
+ free (nm);
+ functions->append (cur_jmthd);
+ }
+ if ((mthd_access_flags & ACC_NATIVE) != 0)
+ {
+ cur_jmthd->flags |= FUNC_FLAG_NATIVE;
+ }
+ u2 attributes_count = input->readUnsignedShort ();
+ Dprintf (DUMP_JAVA_CLASS,
+ NTXT (" %2d: name=%d %-20s flags=%s desc_ind=%d attr_count=%d\n"),
+ (int) (i + 1), (int) name_index, STR (bcpool->getString (name_index)),
+ access_flags_to_str (MethodAccess, mthd_access_flags),
+ (int) descriptor_index, (int) attributes_count);
+ readAttributes (attributes_count);
+ cur_jmthd->popSrcFile ();
+ }
+
+ // Read global attributes
+ u2 global_attributes_count = input->readUnsignedShort ();
+ Dprintf (DUMP_JAVA_CLASS, NTXT (" global_attributes_count=%d\n"), global_attributes_count);
+ readAttributes (global_attributes_count);
+ status = AE_OK;
+ }
+ catch (DataReadException *ex)
+ {
+ append_msg (CMSG_ERROR, GTXT ("Cannot read class file %s (%s)"), get_name (), ex->toString ());
+ delete ex;
+ status = AE_OTHER;
+ }
+
+ char *fnm = NULL;
+ if (class_filename)
+ {
+ if (strcmp (class_filename, get_name ()) != 0)
+ set_name (strdup (class_filename));
+ if (source_name)
+ {
+ char *bname = strrchr (class_filename, '/');
+ if (bname)
+ fnm = dbe_sprintf (NTXT ("%.*s/%s"), (int) (bname - class_filename),
+ class_filename, source_name);
+ else
+ fnm = strdup (source_name);
+ }
+ else
+ fnm = get_java_file_name (class_filename, false);
+ }
+ else if (source_name)
+ fnm = strdup (source_name);
+ if (fnm)
+ {
+ set_file_name (fnm);
+ main_source = findSource (file_name, true);
+ main_source->dbeFile->filetype |= DbeFile::F_JAVA_SOURCE;
+ }
+
+ for (long i = 0, sz = VecSize (functions); i < sz; i++)
+ functions->get (i)->def_source = main_source;
+ JMethod *func = NULL;
+ for (long i = 0, sz = VecSize (byteCodeInfo); i < sz; i++)
+ {
+ ByteCodeInfo *p = byteCodeInfo->get (i);
+ if (func != p->func)
+ {
+ if (func)
+ func->popSrcFile ();
+ func = p->func;
+ func->line_first = p->lno;
+ func->pushSrcFile (main_source, 0);
+ }
+ func->line_last = p->lno;
+ func->add_PC_info (p->bci, p->lno, main_source);
+ }
+ if (func)
+ func->popSrcFile ();
+ Destroy (byteCodeInfo);
+ Dprintf (DUMP_JAVA_CLASS, NTXT ("\n status=%d class_filename=%s class_name=%s source_name=%s file_name=%s %s\n"),
+ (unsigned int) status, STR (class_filename), STR (class_name),
+ STR (source_name), STR (file_name),
+ STR (get_name ()));
+ return status;
+}
+
+#define MAX_CLASS_SIZE 65536
+
+char *
+ClassFile::get_disasm (uint64_t inst_address, uint64_t end_address,
+ uint64_t start_address, uint64_t f_offset, int64_t &inst_size)
+{
+ int64_t offset = f_offset + (inst_address - start_address);
+ if ((cf_buf == NULL) || (inst_address >= end_address) || (offset >= cf_bufsz))
+ {
+ inst_size = 0;
+ return NULL;
+ }
+
+ // Check for an implausibly large size
+ if ((inst_address - start_address) > MAX_CLASS_SIZE)
+ {
+ append_msg (CMSG_ERROR, GTXT ("Cannot disassemble class file %s (%s), implausible size = %lld"),
+ get_name (), dbeFile->get_location (),
+ (end_address - start_address));
+ inst_size = 0;
+ return NULL;
+ }
+
+ StringBuilder sb;
+ DataInputStream *in = new DataInputStream (input);
+ try
+ {
+ in->skip (offset);
+ inst_size = printCodeSequence (&sb, inst_address - start_address, in);
+ }
+ catch (DataReadException *ex)
+ {
+ append_msg (CMSG_ERROR, GTXT ("Cannot disassemble class file %s (%s) %s"),
+ get_name (), dbeFile->get_location (), ex->toString ());
+ delete ex;
+ inst_size = 0;
+ }
+ delete in;
+ if (inst_size == 0)
+ return NULL;
+ return sb.toString ();
+}
+
+char *
+ClassFile::get_java_file_name (char *clname, bool classSuffix)
+{
+ size_t len = strlen (clname);
+ if (len > 6 && streq (clname + len - 6, NTXT (".class")))
+ len -= 6;
+ if (!classSuffix)
+ { // remove $SubClassName from "ClassName$SubClassName"
+ char *tmp = strchr (clname, '$');
+ if (tmp)
+ len = tmp - clname;
+ }
+ char *clpath = (char *) malloc (len + 10);
+ for (size_t i = 0; i < len; i++)
+ clpath[i] = (clname[i] == '.') ? '/' : clname[i];
+ snprintf (clpath + len, 10, classSuffix ? NTXT (".class") : NTXT (".java"));
+ return clpath;
+}
diff --git a/gprofng/src/ClassFile.h b/gprofng/src/ClassFile.h
new file mode 100644
index 00000000000..bd4c61bdc59
--- /dev/null
+++ b/gprofng/src/ClassFile.h
@@ -0,0 +1,63 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _CLASSFILE_H
+#define _CLASSFILE_H
+
+#include "Module.h"
+
+class DataInputStream;
+class BinaryConstantPool;
+class JMethod;
+class StringBuilder;
+class ByteCodeInfo;
+
+class ClassFile : public Module
+{
+public:
+ ClassFile ();
+ virtual ~ClassFile ();
+ virtual int readFile ();
+ virtual char *get_disasm (uint64_t inst_address, uint64_t end_address,
+ uint64_t start_address, uint64_t f_offset,
+ int64_t &inst_size);
+ static char *get_java_file_name (char *clname, bool classSuffix);
+
+private:
+
+ void openFile (const char *fname);
+ char *get_opc_name (int op);
+ void readAttributes (int count);
+ void printConstant (StringBuilder *sb, int index);
+ long long printCodeSequence (StringBuilder *sb, uint64_t addr, DataInputStream *in);
+
+ unsigned char *cf_buf;
+ int64_t cf_bufsz;
+ int blanksCnt;
+ DataInputStream *input;
+ BinaryConstantPool *bcpool;
+ JMethod *cur_jmthd;
+ char *class_name;
+ char *class_filename;
+ char *source_name;
+ Vector<ByteCodeInfo *> *byteCodeInfo;
+};
+
+#endif
diff --git a/gprofng/src/Command.cc b/gprofng/src/Command.cc
new file mode 100644
index 00000000000..d1620d7acd6
--- /dev/null
+++ b/gprofng/src/Command.cc
@@ -0,0 +1,562 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <string.h>
+#include <stdlib.h>
+#include <sys/param.h>
+
+#include "gp-defs.h"
+#include "Command.h"
+#include "DbeSession.h"
+#include "MemorySpace.h"
+#include "i18n.h"
+#include "StringBuilder.h"
+
+const char *Command::DEFAULT_CMD = "default"; // token for default
+const char *Command::ALL_CMD = "all"; // token for all
+const char *Command::ANY_CMD = "any"; // token for any
+const char *Command::NONE_CMD = "none"; // token for none
+const char *Command::HWC_CMD = "hwc"; // token for all HWC
+const char *Command::BIT_CMD = "bit"; // token for any bit-generated metric
+const char *Command::DEFAULT_METRICS = "ei.user:name"; // if no .rc files read
+const char *Command::DEFAULT_SORT = "e.user:name"; // if no .rc files read
+
+static char *fhdr, *cchdr, *lahdr, *iohdr, *sdhdr, *lsthdr, *lohdr;
+static char *methdr, *othdr, *mischdr, *deflthdr;
+static char *selhdr, *filthdr, *outhdr, *exphdr, *obj_allhdr;
+static char *unsuphdr, *indxobjhdr;
+static char *helphdr, *rahdr, *ddhdr, *typehdr, *typehdr2;
+
+// This is the list of commands, which governs the parser scan, as
+// well as the help command.
+// A line with the tag NO_CMD is skipped in parsing, but is used
+// to provide subheadings for the help
+// The HELP line must be the last one in the list of commands
+// to be shown by "-help"; The HHELP line must be the
+// last one to be shown by "-xhelp"
+// The LAST_CMD line must be the last one recognized by the parser
+//
+// The ordering of this list should match the ordering in the man
+// page, and the subheader lines should match the subheadings in
+// the man page.
+
+static char *desc[LAST_CMD];
+
+static Cmdtable cmd_lst[] = { // list of commands
+ // User Commands
+ { NO_CMD, "", NULL, NULL, 0, &fhdr},
+ { FUNCS, "functions", NULL, NULL, 0, &desc[FUNCS]},
+ { METRICS, "metrics", NULL, "metric_spec", 1, &desc[METRICS]},
+ { SORT, "sort", NULL, "metric_spec", 1, &desc[SORT]},
+ { FDETAIL, "fsummary", NULL, NULL, 0, &desc[FDETAIL]},
+ { FSINGLE, "fsingle", NULL, "function_name #", 2, &desc[FSINGLE]},
+
+ { NO_CMD, "", NULL, NULL, 0, &cchdr},
+ { GPROF, "callers-callees", "gprof", NULL, 0, &desc[GPROF]},
+ { CSINGLE, "csingle", NULL, "function_name #", 2, &desc[CSINGLE]},
+ { CPREPEND, "cprepend", NULL, "function_name #", 2, &desc[CPREPEND]},
+ { CAPPEND, "cappend", NULL, "function_name #", 2, &desc[CAPPEND]},
+ { CRMFIRST, "crmfirst", NULL, NULL, 0, &desc[CRMFIRST]},
+ { CRMLAST, "crmlast", NULL, NULL, 0, &desc[CRMLAST]},
+ { CALLTREE, "calltree", "ctree", NULL, 0, &desc[CALLTREE]},
+
+ { NO_CMD, "", NULL, NULL, 0, &lahdr},
+ { LEAKS, "leaks", NULL, NULL, 0, &desc[LEAKS]},
+ { ALLOCS, "allocs", NULL, NULL, 0, &desc[ALLOCS]},
+ { HEAP, "heap", NULL, NULL, 0, &desc[HEAP]},
+ { HEAPSTAT, "heapstat", NULL, NULL, 0, &desc[HEAPSTAT]},
+
+ { NO_CMD, "", NULL, NULL, 0, &iohdr},
+ { IOACTIVITY, "ioactivity", NULL, NULL, 0, &desc[IOACTIVITY]},
+ { IOVFD, "iodetail", NULL, NULL, 0, &desc[IOVFD]},
+ { IOCALLSTACK, "iocallstack", NULL, NULL, 0, &desc[IOCALLSTACK]},
+ { IOSTAT, "iostat", NULL, NULL, 0, &desc[IOSTAT]},
+
+ // PC, line, source and dissassembly commands
+ { NO_CMD, "", NULL, NULL, 0, &sdhdr},
+ { HOTPCS, "pcs", NULL, NULL, 0, &desc[HOTPCS]},
+ { PDETAIL, "psummary", NULL, NULL, 0, &desc[PDETAIL]},
+ { HOTLINES, "lines", NULL, NULL, 0, &desc[HOTLINES]},
+ { LDETAIL, "lsummary", NULL, NULL, 0, &desc[LDETAIL]},
+ { SOURCE, "source", NULL, "func/file #", 2, &desc[SOURCE]},
+ { DISASM, "disasm", NULL, "func/file #", 2, &desc[DISASM]},
+ { SCOMPCOM, "scc", NULL, "com_spec", 1, &desc[SCOMPCOM]},
+ { STHRESH, "sthresh", NULL, "value", 1, &desc[STHRESH]},
+ { DCOMPCOM, "dcc", NULL, "com_spec", 1, &desc[DCOMPCOM]},
+ { COMPCOM, "cc", NULL, "com_spec", 1, &desc[COMPCOM]},
+ { DTHRESH, "dthresh", NULL, "value", 1, &desc[DTHRESH]},
+ { SETPATH, "setpath", NULL, "path_list", 1, &desc[SETPATH]},
+ { ADDPATH, "addpath", NULL, "path_list", 1, &desc[ADDPATH]},
+ { PATHMAP, "pathmap", NULL, "old_prefix new_prefix", 2, &desc[PATHMAP]},
+ { LIBDIRS, "preload_libdirs", NULL, NULL, 1, &desc[PATHMAP]},
+
+ // Index Object commands
+ { NO_CMD, "", NULL, NULL, 0, &indxobjhdr},
+ { INDXOBJ, "indxobj", NULL, "type", 1, &desc[INDXOBJ]},
+ { INDXOBJLIST, "indxobj_list", NULL, NULL, 0, &desc[INDXOBJLIST]},
+ { INDXOBJDEF, "indxobj_define", NULL, "type \"index-expr\"", 2, &desc[INDXOBJDEF]},
+
+ // Deadlock detection commands
+ { NO_CMD, "", NULL, NULL, 0, &ddhdr},
+ { DEADLOCK_EVNTS, "deadlocks", NULL, NULL, 0, &desc[DEADLOCK_EVNTS]},
+ { DEADLOCK_SUM, "dsummary", NULL, "{deadlock_id|all}", 1, &desc[DEADLOCK_SUM]},
+
+ { NO_CMD, "", NULL, NULL, 0, &lsthdr},
+ { EXP_LIST, "experiment_list", "exp_list", NULL, 0, &desc[EXP_LIST]},
+ { SAMPLE_LIST, "sample_list", NULL, NULL, 0, &desc[SAMPLE_LIST]},
+ { LWP_LIST, "lwp_list", NULL, NULL, 0, &desc[LWP_LIST]},
+ { THREAD_LIST, "thread_list", NULL, NULL, 0, &desc[THREAD_LIST]},
+ { CPU_LIST, "cpu_list", NULL, NULL, 0, &desc[CPU_LIST]},
+
+ { NO_CMD, "", NULL, NULL, 0, &filthdr},
+ { FILTERS, "filters", NULL, "filter-specification", 1, &desc[FILTERS]},
+ { DESCRIBE, "describe", NULL, NULL, 0, &desc[DESCRIBE]},
+
+ { NO_CMD, "", NULL, NULL, 0, &selhdr},
+ { SAMPLE_SELECT, "sample_select", NULL, "sample_spec", 1, &desc[SAMPLE_SELECT]},
+ { LWP_SELECT, "lwp_select", NULL, "lwp_spec", 1, &desc[LWP_SELECT]},
+ { THREAD_SELECT, "thread_select", NULL, "thread_spec", 1, &desc[THREAD_SELECT]},
+ { CPU_SELECT, "cpu_select", NULL, "cpu_spec", 1, &desc[CPU_SELECT]},
+
+ { NO_CMD, "", NULL, NULL, 0, &lohdr},
+ { OBJECT_LIST, "object_list", NULL, NULL, 0, &desc[OBJECT_LIST]},
+ { OBJECT_SHOW, "object_show", NULL, "obj1,...", 1, &desc[OBJECT_SHOW]},
+ { OBJECT_HIDE, "object_hide", NULL, "obj1,...", 1, &desc[OBJECT_HIDE]},
+ { OBJECT_API, "object_api", NULL, "obj1,...", 1, &desc[OBJECT_API]},
+ { DUMMY_CMD, " ", NULL, NULL, 0, &obj_allhdr},
+ { OBJECTS_DEFAULT, "objects_default", NULL, NULL, 1, &desc[OBJECTS_DEFAULT]},
+
+ { OBJECT_SELECT, "object_select", NULL, "obj1,...", 1, &desc[OBJECT_SELECT]},
+
+ { NO_CMD, "", NULL, NULL, 0, &methdr},
+ { METRIC_LIST, "metric_list", NULL, NULL, 0, &desc[METRIC_LIST]},
+ { GMETRIC_LIST, "cmetric_list", "gmetric_list", NULL, 0, &desc[GMETRIC_LIST]},
+ { INDX_METRIC_LIST, "indx_metric_list", NULL, NULL, 1, &desc[INDX_METRIC_LIST]},
+
+ { NO_CMD, "", NULL, NULL, 0, &outhdr},
+ { OUTFILE, "outfile", NULL, "filename", 1, &desc[OUTFILE]},
+ { APPENDFILE, "appendfile", NULL, "filename", 1, &desc[APPENDFILE]},
+ { LIMIT, "limit", NULL, "n", 1, &desc[LIMIT]},
+ { NAMEFMT, "name", NULL, "{long|short|mangled}[:{soname|nosoname}]", 1, &desc[NAMEFMT]},
+ { VIEWMODE, "viewmode", NULL, "{user|expert|machine}", 1, &desc[VIEWMODE]},
+ { COMPARE, "compare", NULL, "{on|off|delta|ratio}", 1, &desc[COMPARE]},
+ { PRINTMODE, "printmode", NULL, "string", 1, &desc[PRINTMODE]},
+
+ { NO_CMD, "", NULL, NULL, 0, &othdr},
+ { HEADER, "header", NULL, "exp_id", 1, &desc[HEADER]},
+ { OBJECTS, "objects", NULL, NULL, 0, &desc[OBJECTS]},
+ { OVERVIEW_NEW, "overview", NULL, NULL, 0, &desc[OVERVIEW_NEW]},
+ { SAMPLE_DETAIL, "sample_detail", NULL, "exp_id", 1, &desc[SAMPLE_DETAIL]},
+ { STATISTICS, "statistics", NULL, "exp_id", 1, &desc[STATISTICS]},
+
+ { NO_CMD, "", NULL, NULL, 0, &exphdr},
+ { OPEN_EXP, "open_exp", NULL, "experiment", 1, &desc[OPEN_EXP]},
+ { ADD_EXP, "add_exp", NULL, "experiment", 1, &desc[ADD_EXP]},
+ { DROP_EXP, "drop_exp", NULL, "experiment", 1, &desc[DROP_EXP]},
+
+ { NO_CMD, "", NULL, NULL, 0, &deflthdr},
+ { DMETRICS, "dmetrics", NULL, "metric_spec", 1, &desc[DMETRICS]},
+ { DSORT, "dsort", NULL, "metric_spec", 1, &desc[DSORT]},
+ { EN_DESC, "en_desc", NULL, "{on|off|=<regex>}", 1, &desc[EN_DESC]},
+
+ { NO_CMD, "", NULL, NULL, 0, &mischdr},
+ { DUMMY_CMD, "<type>", NULL, NULL, 0, &typehdr},
+ { DUMMY_CMD, " ", NULL, NULL, 0, &typehdr2},
+
+ { IFREQ, "ifreq", NULL, NULL, 0, &desc[IFREQ]},
+ { PROCSTATS, "procstats", NULL, NULL, 0, &desc[PROCSTATS]},
+ { SCRIPT, "script", NULL, "file", 1, &desc[SCRIPT]},
+ { VERSION_cmd, "version", NULL, NULL, 0, &desc[VERSION_cmd]},
+ { QUIT, "quit", "exit", NULL, 0, &desc[QUIT]},
+
+ { NO_CMD, "", NULL, NULL, 0, &helphdr},
+ { HELP, "help", NULL, NULL, 0, &desc[HELP]},
+
+ { NO_CMD, "", NULL, NULL, 0, &unsuphdr},
+ { HELP, "-help", NULL, NULL, 0, &desc[HELP]},
+ { DUMPFUNC, "dfuncs", NULL, "string", 1, &desc[DUMPFUNC]},
+ { DUMPDOBJS, "ddobjs", NULL, "string", 1, &desc[DUMPDOBJS]},
+ { DUMPNODES, "dnodes", NULL, NULL, 0, &desc[DUMPNODES]},
+ { DUMPSTACKS, "dstacks", NULL, NULL, 0, &desc[DUMPSTACKS]},
+ { DUMPUNK, "dunkpc", NULL, NULL, 0, &desc[DUMPUNK]},
+ { DUMPMAP, "dmap", NULL, NULL, 0, &desc[DUMPMAP]},
+ { DUMPENTITIES, "dentities", NULL, NULL, 0, &desc[DUMPENTITIES]},
+ { IGNORE_NO_XHWCPROF, "ignore_no_xhwcprof", NULL, NULL, 0, &desc[IGNORE_NO_XHWCPROF]},
+ { IGNORE_FS_WARN, "ignore_fs_warn", NULL, NULL, 0, &desc[IGNORE_FS_WARN]},
+
+ { DUMP_PROFILE, "dprofile", NULL, NULL, 0, &desc[DUMP_PROFILE]},
+ { DUMP_SYNC, "dsync", NULL, NULL, 0, &desc[DUMP_SYNC]},
+ { DUMP_IOTRACE, "diotrace", NULL, NULL, 0, &desc[DUMP_IOTRACE]},
+ { DUMP_HWC, "dhwc", NULL, NULL, 0, &desc[DUMP_HWC]},
+ { DUMP_HEAP, "dheap", NULL, NULL, 0, &desc[DUMP_HEAP]},
+ { RACE_ACCS, "r_accs", NULL, NULL, 0, &desc[RACE_ACCS]},
+
+ { DMPI_FUNCS, "dmpi_funcs", NULL, NULL, 0, &desc[DMPI_FUNCS]},
+ { DMPI_MSGS, "dmpi_msgs", NULL, NULL, 0, &desc[DMPI_MSGS]},
+ { DMPI_EVENTS, "dmpi_events", NULL, NULL, 0, &desc[DMPI_EVENTS]},
+
+ { DMEM, "dmem", NULL, NULL, 1, &desc[DMEM]},
+ { DUMP_GC, "dumpgc", NULL, NULL, 0, &desc[DUMP_GC]},
+ { DKILL, "dkill", NULL, NULL, 2, &desc[DKILL]},
+
+ { QQUIT, "xquit", NULL, NULL, 0, &desc[QQUIT]},
+ // use xquit for memory leak detection in dbe; it's
+ // like quit, but deletes all data loaded
+
+ { HHELP, "xhelp", NULL, NULL, 0, &desc[HHELP]},
+ { WHOAMI, "-whoami", NULL, NULL, 0, &desc[WHOAMI]},
+
+ // these are not recognized at this point
+ { LOADOBJECT, "segments", "pmap", NULL, 0, &desc[LOADOBJECT]},
+ { LOADOBJECT_LIST, "segment_list", NULL, NULL, 0, &desc[LOADOBJECT_LIST]},
+ { LOADOBJECT_SELECT, "segment_select", NULL, "seg1,...", 1, &desc[LOADOBJECT_SELECT]},
+
+ { LAST_CMD, "xxxx", NULL, NULL, 0, NULL}
+};
+
+CmdType
+Command::get_command (char *cmd, int &arg_count, int &cparam)
+{
+ int i;
+ int len = (int) strlen (cmd);
+ bool got = false;
+ CmdType token = UNKNOWN_CMD;
+ arg_count = 0;
+ cparam = -1;
+ if (*cmd == '\0') // - command
+ return STDIN;
+ if (*cmd == '#') // comment
+ return COMMENT;
+ if (strcmp (cmd, "V") == 0 || strcmp (cmd, "-version") == 0)
+ return VERSION_cmd;
+ if (strcmp (cmd, "-help") == 0)
+ return HELP;
+ if (strncmp (cmd, NTXT ("-whoami="), 8) == 0)
+ {
+ cparam = 8;
+ return WHOAMI;
+ }
+
+ if (*cmd == '-')
+ cmd++;
+ for (i = 0;; i++)
+ {
+ if (cmd_lst[i].token == LAST_CMD)
+ break;
+ if (!strncasecmp (cmd, cmd_lst[i].str, len) ||
+ (cmd_lst[i].alt && !strncasecmp (cmd, cmd_lst[i].alt, len)))
+ {
+ // Is it unambiguous?
+ if (!strcasecmp (cmd, cmd_lst[i].str)
+ || (cmd_lst[i].alt && !strcasecmp (cmd, cmd_lst[i].alt)))
+ {
+ // exact, full-length match
+ token = cmd_lst[i].token;
+ arg_count = cmd_lst[i].arg_count;
+ return token;
+ }
+ if (got)
+ return AMBIGUOUS_CMD;
+ got = true;
+ token = cmd_lst[i].token;
+ arg_count = cmd_lst[i].arg_count;
+ }
+ }
+
+ // Did we find it?
+ if (token != UNKNOWN_CMD)
+ return token;
+
+ // See if it's the name of a index object
+ if (dbeSession)
+ {
+ int indxtype = dbeSession->findIndexSpaceByName (cmd);
+ if (indxtype >= 0)
+ {
+ // found it
+ cparam = indxtype;
+ return INDXOBJ;
+ }
+ }
+ return token;
+}
+
+const char *
+Command::get_cmd_str (CmdType type)
+{
+ for (int i = 0;; i++)
+ {
+ if (cmd_lst[i].token == LAST_CMD)
+ break;
+ if (type == cmd_lst[i].token)
+ return cmd_lst[i].str;
+ }
+ return "xxxx";
+}
+
+char *
+Command::get_err_string (Cmd_status err)
+{
+ switch (err)
+ {
+ case CMD_OK:
+ return NULL;
+ case CMD_BAD:
+ return GTXT ("command bad");
+ case CMD_AMBIGUOUS:
+ return GTXT ("command ambiguous");
+ case CMD_BAD_ARG:
+ return GTXT ("Invalid argument to command");
+ case CMD_OUTRANGE:
+ return GTXT ("argument to command is out-of-range");
+ case CMD_INVALID:
+ return GTXT ("invalid command");
+ }
+ return NULL;
+}
+
+void
+Command::print_help (char *prog_name, bool cmd_line, bool usermode, FILE *outf)
+{
+ char *fmt, *msg;
+ int i;
+ StringBuilder sb;
+ enum CmdType nc;
+ init_desc ();
+ if (usermode) // show the hidden ones, too
+ nc = HELP;
+ else
+ nc = HHELP;
+
+ if (cmd_line)
+ fprintf (outf, GTXT ("Usage: %s [ -script script | -command | - ] exper_1 ... exper_n\n"),
+ prog_name);
+ fprintf (outf, GTXT ("An alternate spelling for a command is shown in [], where applicable.\n\n"
+ "Those commands followed by a * may appear in .rc files.\n\n"
+ "Those commands followed by a $ can only appear in .rc files.\n\n"));
+ fmt = fmt_help (nc, ' ');
+ for (i = 0;; i++)
+ {
+ // check for end of list
+ if (cmd_lst[i].token == LAST_CMD)
+ break;
+ if (cmd_lst[i].token == NO_CMD) // this is a header line
+ fprintf (outf, NTXT (" %s\n"), *cmd_lst[i].desc);
+ else
+ {
+ if (strlen (cmd_lst[i].str) == 0)
+ continue;
+ // this is a real command line
+ sb.setLength (0);
+ sb.append (cmd_lst[i].str);
+ if (cmd_lst[i].alt)
+ {
+ sb.append ('[');
+ sb.append (cmd_lst[i].alt);
+ sb.append (']');
+ }
+ if (cmd_lst[i].arg)
+ {
+ sb.append (' ');
+ sb.append (cmd_lst[i].arg);
+ }
+ msg = sb.toString ();
+ fprintf (outf, fmt, msg, *cmd_lst[i].desc);
+ free (msg);
+ }
+ // check for end of list
+ if (cmd_lst[i].token == nc)
+ break;
+ }
+}
+
+// construct format for printing help
+char *
+Command::fmt_help (int nc, char head)
+{
+ int len, max_len, i;
+ static char fmt[BUFSIZ];
+
+ max_len = 0;
+ for (i = 0; i < nc; i++)
+ {
+ len = (int) strlen (cmd_lst[i].str);
+ if (cmd_lst[i].alt)
+ len += (int) strlen (cmd_lst[i].alt) + 2;
+ if (cmd_lst[i].arg)
+ len += (int) strlen (cmd_lst[i].arg) + 2;
+ if (max_len < len)
+ max_len = len;
+ }
+ snprintf (fmt, sizeof (fmt), NTXT (" %c%%-%ds %%s\n"), head, max_len + 1);
+ return fmt;
+}
+
+void
+Command::init_desc ()
+{
+ if (desc[0] != NULL)
+ return;
+ desc[FUNCS] = GTXT ("display functions with current metrics");
+ desc[HOTPCS] = GTXT ("display hot PC's with current metrics");
+ desc[HOTLINES] = GTXT ("display hot lines with current metrics");
+ desc[FDETAIL] = GTXT ("display summary metrics for each function");
+ desc[OBJECTS] = GTXT ("display object list with errors or warnings");
+ desc[COMPARE] = GTXT ("enable comparison mode for experiments *");
+ desc[PRINTMODE] = GTXT ("set the mode for printing tables *");
+ desc[LDETAIL] = GTXT ("display summary metrics for each hot line");
+ desc[PDETAIL] = GTXT ("display summary metrics for each hot PC");
+ desc[SOURCE] = GTXT ("display annotated source for function/file");
+ desc[DISASM] = GTXT ("display annotated disassembly for function/file");
+ desc[SCOMPCOM] = GTXT ("set compiler commentary classes for source *");
+ desc[STHRESH] = GTXT ("set highlight threshold for source *");
+ desc[DCOMPCOM] = GTXT ("set compiler commentary classes for disasm *");
+ desc[COMPCOM] = GTXT ("set compiler commentary classes for both source and disasm *");
+ desc[DTHRESH] = GTXT ("set highlight threshold for disasm *");
+ desc[METRIC_LIST] = GTXT ("display the available metrics and dmetrics keywords");
+ desc[METRICS] = GTXT ("set a new list of metrics");
+ desc[SORT] = GTXT ("sort tables by the specified metric");
+ desc[GPROF] = GTXT ("display the callers-callees for each function");
+ desc[CALLTREE] = GTXT ("display the tree of function calls");
+ desc[CALLFLAME] = GTXT ("request calltree flame chart -- not a command, but used in the tabs command");
+ desc[GMETRIC_LIST] = GTXT ("display the available callers-callees metrics");
+ desc[FSINGLE] = GTXT ("display the summary metrics for specified function");
+ desc[CSINGLE] = GTXT ("display the callers-callees for the specified function");
+ desc[CPREPEND] = GTXT ("add specified function to the head of the callstack fragment");
+ desc[CAPPEND] = GTXT ("add specified function to the end of the callstack fragment");
+ desc[CRMFIRST] = GTXT ("remove the first function from the callstack fragment");
+ desc[CRMLAST] = GTXT ("remove the last function from the callstack fragment");
+ desc[LEAKS] = GTXT ("display memory leaks, aggregated by callstack");
+ desc[ALLOCS] = GTXT ("display allocations, aggregated by callstack");
+ desc[HEAP] = GTXT ("display memory allocations and leaks, aggregated by callstack");
+ desc[HEAPSTAT] = GTXT ("display heap statistics report");
+ desc[IOACTIVITY] = GTXT ("display I/O activity report, aggregated by file name");
+ desc[IOVFD] = GTXT ("display I/O activity report, aggregated by file descriptor");
+ desc[IOCALLSTACK] = GTXT ("display I/O activity report, aggregated by callstack");
+ desc[IOSTAT] = GTXT ("display I/O statistics report");
+ desc[RACE_ACCS] = GTXT ("dump race access events");
+ desc[DMPI_MSGS] = GTXT ("dump mpi messages");
+ desc[DMPI_FUNCS] = GTXT ("dump mpi function calls");
+ desc[DMPI_EVENTS] = GTXT ("dump mpi trace events");
+ desc[DMEM] = GTXT ("debug command for internal use");
+ desc[DUMP_GC] = GTXT ("dump Java garbage collector events");
+ desc[DKILL] = GTXT ("send process p signal s");
+ desc[DEADLOCK_EVNTS] = GTXT ("display deadlock events");
+ desc[DEADLOCK_SUM] = GTXT ("display summary for the deadlock event");
+ desc[HEADER] = GTXT ("display information about the experiment");
+ desc[OVERVIEW_NEW] = GTXT ("display the overview of all loaded experiments");
+ desc[SAMPLE_DETAIL] = GTXT ("display the current sample list with data");
+ desc[STATISTICS] = GTXT ("display the execution statistics data");
+ desc[EXP_LIST] = GTXT ("display the existing experiments");
+ desc[DESCRIBE] = GTXT ("describe recorded data and tokens available for filtering data");
+ desc[OBJECT_SHOW] = GTXT ("set load objects to show all functions *");
+ desc[OBJECT_HIDE] = GTXT ("set load objects to hide functions *");
+ desc[OBJECT_API] = GTXT ("set load objects to show API (entry point) only *");
+ desc[OBJECTS_DEFAULT] = GTXT ("reset load objects show to defaults");
+ desc[OBJECT_LIST] = GTXT ("display load objects, functions-shown flag");
+ desc[OBJECT_SELECT] = GTXT ("set list of load objects whose functions are shown");
+ desc[SAMPLE_LIST] = GTXT ("display the list of existing samples");
+ desc[SAMPLE_SELECT] = GTXT ("set a new list of samples");
+ desc[THREAD_LIST] = GTXT ("display the list of existing threads");
+ desc[THREAD_SELECT] = GTXT ("set a new list of threads");
+ desc[LWP_LIST] = GTXT ("display the list of existing LWPs");
+ desc[LWP_SELECT] = GTXT ("set a new list of LWPs");
+ desc[CPU_LIST] = GTXT ("display the list of CPUs");
+ desc[CPU_SELECT] = GTXT ("set a new list of CPUs");
+ desc[OUTFILE] = GTXT ("open filename for subsequent output");
+ desc[APPENDFILE] = GTXT ("open filename for subsequent appended output");
+ desc[LIMIT] = GTXT ("limit output to the first n entries (n=0 for no limit)");
+ desc[NAMEFMT] = GTXT ("set long/short/mangled names for functions *");
+ desc[VIEWMODE] = GTXT ("set viewmode user|expert|machine *");
+ desc[EN_DESC] = GTXT ("enable descendant processes on|off|regex matches lineage or program name $");
+ desc[SETPATH] = GTXT ("set search path for annotated src/dis");
+ desc[ADDPATH] = GTXT ("add search path for annotated src/dis *");
+ desc[PATHMAP] = GTXT ("remap path prefix for annotated src/dis *");
+ desc[LIBDIRS] = GTXT ("set path where the gprofng libraries are installed");
+ desc[SCRIPT] = GTXT ("read er_print commands from script file");
+ desc[PROCSTATS] = GTXT ("display processing statistics");
+ desc[ADD_EXP] = GTXT ("add experiment or group");
+ desc[DROP_EXP] = GTXT ("drop experiment");
+ desc[OPEN_EXP] = GTXT ("open experiment or group (drops all loaded experiments first)");
+ desc[VERSION_cmd] = GTXT ("display the current release version");
+ desc[HELP] = GTXT ("display the list of available commands");
+ desc[QUIT] = GTXT ("terminate processing and exit");
+ desc[DMETRICS] = GTXT ("set default function list metrics $");
+ desc[DSORT] = GTXT ("set default function list sort metric $");
+ desc[TLMODE] = GTXT ("set default timeline mode, align, depth $");
+ desc[TLDATA] = GTXT ("set default timeline visible data $");
+ desc[TABS] = GTXT ("set default visible tabs $");
+ desc[RTABS] = GTXT ("set default visible tabs for Thread Analyzer Experiment $");
+ desc[INDXOBJ] = GTXT ("display index objects of a specified type with current metrics");
+ desc[INDXOBJLIST] = GTXT ("display list of index objects");
+ desc[INDXOBJDEF] = GTXT ("define a new index object type *");
+ desc[INDX_METRIC_LIST] = GTXT ("display the available index object metrics");
+ desc[IFREQ] = GTXT ("display instruction-frequency report");
+ desc[TIMELINE] = GTXT ("request timeline -- not a command, but used in the tabs command");
+ desc[MPI_TIMELINE] = GTXT ("request mpi-timeline -- not a command, but used in the tabs command");
+ desc[MPI_CHART] = GTXT ("request mpi chart -- not a command, but used in the tabs command");
+ desc[DUALSOURCE] = GTXT ("request dualsource tab -- not a command, but used in the tabs command");
+ desc[SOURCEDISAM] = GTXT ("request source/disassembly tab -- not a command, but used in the tabs command");
+ desc[DUMPNODES] = GTXT ("dump pathtree node table");
+ desc[DUMPSTACKS] = GTXT ("dump Experiment callstack tables");
+ desc[DUMPUNK] = GTXT ("dump <Unknown> PCs");
+ desc[DUMPFUNC] = GTXT ("dump functions whose name matches string");
+ desc[DUMPDOBJS] = GTXT ("dump dataobjects whose name matches string");
+ desc[DUMPMAP] = GTXT ("dump load-object map");
+ desc[DUMPENTITIES] = GTXT ("dump threads, lwps, cpus");
+ desc[DUMP_PROFILE] = GTXT ("dump clock profile events");
+ desc[DUMP_SYNC] = GTXT ("dump synchronization trace events");
+ desc[DUMP_IOTRACE] = GTXT ("dump IO trace events");
+ desc[DUMP_HWC] = GTXT ("dump HWC profile events");
+ desc[DUMP_HEAP] = GTXT ("dump heap trace events");
+ desc[IGNORE_NO_XHWCPROF] = GTXT ("ignore absence of -xhwcprof info in dataspace profiling $");
+ desc[IGNORE_FS_WARN] = GTXT ("ignore filesystem (nfs, ...) warning $");
+ desc[HHELP] = GTXT ("display help including unsupported commands");
+ desc[QQUIT] = GTXT ("terminate processing and exit");
+ desc[LOADOBJECT] = GTXT ("display the address map with current metrics");
+ desc[LOADOBJECT_LIST] = GTXT ("display segments, indicating which are selected");
+ desc[LOADOBJECT_SELECT] = GTXT ("set a new list of segments");
+ desc[FILTERS] = GTXT ("define a filter");
+
+ fhdr = GTXT ("\nCommands controlling the function list:");
+ cchdr = GTXT ("\nCommands controlling the callers-callees and calltree lists:");
+ lahdr = GTXT ("\nCommands controlling the leak and allocation lists:");
+ iohdr = GTXT ("\nCommand controlling the I/O activity report:");
+ rahdr = GTXT ("\nCommands controlling the race events lists:");
+ ddhdr = GTXT ("\nCommands controlling the deadlock events lists:");
+ typehdr = GTXT ("equivalent to \"memobj type\", or \"indxobj type\"");
+ typehdr2 = GTXT (" where type is a memory object or index object type");
+ sdhdr = GTXT ("\nCommands controlling the source and disassembly listings:");
+ lsthdr = GTXT ("\nCommands listing experiments, samples and threads:");
+ lohdr = GTXT ("\nCommands controlling load object selection:");
+ obj_allhdr = GTXT (" the special object name `all' refers to all load objects");
+ methdr = GTXT ("\nCommands that list metrics:");
+ othdr = GTXT ("\nCommands that print other displays:");
+ outhdr = GTXT ("\nCommands that control output:");
+ mischdr = GTXT ("\nMiscellaneous commands:");
+ exphdr = GTXT ("\nCommands for experiments (scripts and interactive mode only):");
+ deflthdr = GTXT ("\nDefault-setting commands:");
+ selhdr = GTXT ("\nCommands controlling old-style filters/selection:");
+ filthdr = GTXT ("\nCommands controlling filters:");
+ indxobjhdr = GTXT ("\nCommands controlling the index objects:");
+ unsuphdr = GTXT ("\nUnsupported commands:");
+ helphdr = GTXT ("\nHelp command:");
+}
diff --git a/gprofng/src/Command.h b/gprofng/src/Command.h
new file mode 100644
index 00000000000..4dd28adea42
--- /dev/null
+++ b/gprofng/src/Command.h
@@ -0,0 +1,286 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _COMMAND_H
+#define _COMMAND_H
+
+
+#include <stdio.h>
+#include <sys/types.h>
+
+#include "Metric.h"
+#include "Hist_data.h"
+#include "dbe_types.h"
+#include "vec.h"
+#include "enums.h"
+
+// This enum lists all the commands parsed by er_print
+// The ordering here is not important, but LAST_CMD must
+// be defined as the last command for which a help line will exist
+// Command.cc has a matching list, and the ordering in
+// that list determines what shows up under the help and xhelp commands.
+// In particular, the entry for HELP is the last one printed
+// for the help command, and the entry for HHELP is the last
+// one printed for xhelp.
+
+enum CmdType
+{
+ // Pathtree-related commands
+ FUNCS = 0,
+ HOTPCS,
+ HOTLINES,
+ FDETAIL,
+ OBJECTS,
+ LDETAIL,
+ PDETAIL,
+ SOURCE,
+ DISASM,
+ METRIC_LIST,
+ METRICS,
+ SORT,
+ GPROF,
+ GMETRIC_LIST,
+ FSINGLE,
+ CSINGLE,
+ CPREPEND,
+ CAPPEND,
+ CRMFIRST,
+ CRMLAST,
+ CALLTREE,
+ CALLFLAME,
+
+ // Source/disassembly control commands
+ SCOMPCOM,
+ STHRESH,
+ DCOMPCOM,
+ COMPCOM,
+ DTHRESH,
+
+ // Heap trace-related commands
+ LEAKS,
+ ALLOCS,
+ HEAP,
+ HEAPSTAT,
+
+ // I/O trace-related commands
+ IOACTIVITY,
+ IOVFD,
+ IOCALLSTACK,
+ IOSTAT,
+
+ // Race detection related commands
+ RACE_EVNTS,
+ RACE_SUM,
+
+ // Deadlock detection commands
+ DEADLOCK_EVNTS,
+ DEADLOCK_SUM,
+
+ // DataSpace commands
+ DOBJECTS,
+ DO_SINGLE,
+ DO_LAYOUT,
+ DO_METRIC_LIST,
+
+ // MemorySpace commands
+ MEMOBJ,
+ MEMOBJLIST,
+ MEMOBJDEF,
+ MEMOBJDROP,
+ MACHINEMODEL,
+
+ // Custom tab commands
+ INDXOBJDEF,
+ INDXOBJLIST,
+ INDXOBJ,
+ INDX_METRIC_LIST,
+
+ // Old-style filtering commands
+ OBJECT_LIST,
+ OBJECT_SELECT,
+ SAMPLE_LIST,
+ SAMPLE_SELECT,
+ THREAD_LIST,
+ THREAD_SELECT,
+ LWP_LIST,
+ LWP_SELECT,
+ CPU_LIST,
+ CPU_SELECT,
+
+ // Shared Object display commands
+ OBJECT_SHOW,
+ OBJECT_HIDE,
+ OBJECT_API,
+ OBJECTS_DEFAULT,
+
+ // the new filtering commands
+ FILTERS,
+
+ // Miscellaneous commands
+ COMPARE,
+ PRINTMODE,
+ HEADER,
+ OVERVIEW_NEW,
+ SAMPLE_DETAIL,
+ STATISTICS,
+ EXP_LIST,
+ DESCRIBE,
+ OUTFILE,
+ APPENDFILE,
+ LIMIT,
+ NAMEFMT,
+ VIEWMODE,
+ EN_DESC,
+ SETPATH,
+ ADDPATH,
+ PATHMAP,
+ LIBDIRS,
+ SCRIPT,
+ VERSION_cmd,
+ QUIT,
+ PROCSTATS,
+
+ // Experiments handling commands
+ ADD_EXP,
+ DROP_EXP,
+ OPEN_EXP,
+
+ // .rc-only Commands
+ DMETRICS,
+ DSORT,
+ TLMODE,
+ TLDATA,
+ TABS,
+ TIMELINE,
+ MPI_TIMELINE,
+ MPI_CHART,
+ TIMELINE_CLASSIC_TBR,
+ SOURCE_V2,
+ DISASM_V2,
+ RTABS,
+ DUALSOURCE,
+ SOURCEDISAM,
+
+ HELP, // this is the last of the commands listed with "help"
+ IFREQ,
+ DUMPNODES,
+ DUMPSTACKS,
+ DUMPUNK,
+ DUMPFUNC,
+ DUMPDOBJS,
+ DUMPMAP,
+ DUMPENTITIES,
+ DUMP_PROFILE,
+ DUMP_SYNC,
+ DUMP_HWC,
+ DUMP_HEAP,
+ DUMP_IOTRACE,
+ RACE_ACCS,
+ DMPI_FUNCS,
+ DMPI_MSGS,
+ DMPI_EVENTS,
+ DMEM,
+ DUMP_GC,
+ DKILL,
+ IGNORE_NO_XHWCPROF,
+ IGNORE_FS_WARN,
+ QQUIT,
+ HHELP, // this is the last command listed with "xhelp"
+ NO_CMD, // Dummy command, used for headers in help
+ DUMMY_CMD, // Dummy command, used for help
+
+ // unused commands
+ LOADOBJECT,
+ LOADOBJECT_LIST,
+ LOADOBJECT_SELECT,
+
+ // Internal-only Commands
+ LAST_CMD, // No more commands for which a help line is possible
+ STDIN,
+ COMMENT,
+ WHOAMI,
+
+ // Error return "commands"
+ AMBIGUOUS_CMD,
+ UNKNOWN_CMD
+};
+
+typedef struct
+{
+ const CmdType token; // command key
+ const char *str; // command string
+ const char *alt; // alternate command string
+ const char *arg; // argument string for help
+ const int arg_count; // no. of arguments
+ char **desc; // description for help
+} Cmdtable;
+
+// Command class: never instantiated, completely static
+class Command
+{
+public:
+
+ // look up a string in the command table, return type, set number of args
+ static CmdType get_command (char *cmd, int &arg_count, int &param);
+ static const char *get_cmd_str (CmdType type);
+ static void print_help (char *prog_name, bool cmd_line, bool usermode, FILE *outf);
+ static char *get_err_string (Cmd_status err);
+
+ static const char *DEFAULT_METRICS; // default if no .rc files read
+ static const char *DEFAULT_SORT; // default if no .rc files read
+ static const char *DEFAULT_CMD; // token for default
+ static const char *ALL_CMD; // token for all
+ static const char *ANY_CMD; // token for any
+ static const char *NONE_CMD; // token for none
+ static const char *HWC_CMD; // token for all HWC
+ static const char *BIT_CMD; // token for any bit-derived metric
+
+private:
+ static const int user_no; // the last user command
+ static const int hidden_no; // the last hidden command
+ static const int command_no; // the last parsable command
+
+ static void init_desc ();
+ static char *fmt_help (int nc, char head);
+};
+
+// Analyzer display tabs
+struct DispTab
+{
+ DispTab (int ntype, int num, bool vis, CmdType token)
+ {
+ type = ntype;
+ order = num;
+ visible = vis;
+ available = true;
+ cmdtoken = token;
+ }
+
+ void setAvailability (bool val) { available = val; }
+
+ int type; // Display type
+ int order; // Order in which tabs should appear in GUI
+ bool visible; // Is Tab visible
+ bool available; // Is tab available for this experiment
+ CmdType cmdtoken; // command token
+ int param; // command parameter (used for memory space)
+};
+
+#endif /* ! _COMMAND_H */
diff --git a/gprofng/src/CompCom.cc b/gprofng/src/CompCom.cc
new file mode 100644
index 00000000000..3a035a9e7f7
--- /dev/null
+++ b/gprofng/src/CompCom.cc
@@ -0,0 +1,313 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <locale.h>
+#include <sys/param.h>
+
+#include "demangle.h"
+#include "gp-defs.h"
+#include "StringBuilder.h"
+#include "CompCom.h"
+#include "Elf.h"
+#include "util.h"
+#include "i18n.h"
+#include "comp_com.c"
+
+CompComment::CompComment (Elf *_elf, int _compcom)
+{
+ elf = _elf;
+ compcom = _compcom;
+ elf_cls = elf->elf_getclass ();
+}
+
+CompComment::~CompComment () { }
+
+int
+CompComment::get_align (int64_t offset, int align)
+{
+ int val = (int) (offset % align);
+ if (val)
+ val = align - val;
+ return val;
+}
+
+/*
+ * Preprocesses the header structure, builds a table of messages with the line
+ * numbers, PCoffsets, original index, and compmsg pointer for each message.
+ * If the show_bits field is not in the message, this routine would fill it in
+ * from the mapping from COMPMSG_ID
+ */
+int
+CompComment::compcom_open (CheckSrcName check_src)
+{
+ if (check_src == NULL)
+ return 0;
+ Elf_Data *data = elf->elf_getdata (compcom);
+ uint64_t b_offset = data->d_off;
+ if (get_align (b_offset, 4)) // not align 4
+ return 0;
+ char *CommData = (char *) data->d_buf;
+ uint64_t offset = b_offset;
+ for (uint64_t e_offset = b_offset + data->d_size; offset < e_offset;)
+ {
+ offset += get_align (offset, (int) data->d_align);
+ if (offset >= e_offset)
+ return 0;
+ compcomhdr *hdr = (compcomhdr *) (CommData + (offset - b_offset));
+ int hdr_msgcount = elf->decode (hdr->msgcount);
+ int hdr_srcname = elf->decode (hdr->srcname);
+ int hdr_stringlen = elf->decode (hdr->stringlen);
+ int hdr_paramcount = elf->decode (hdr->paramcount);
+ size_t length = sizeof (compcomhdr) + hdr_msgcount * sizeof (compmsg) +
+ hdr_paramcount * sizeof (int32_t);
+ if (offset + length + hdr_stringlen > e_offset || hdr_srcname < 0
+ || hdr_srcname >= hdr_stringlen)
+ return 0;
+
+ // check source file
+ char *src_name = (char *) (((char*) hdr) + length + hdr_srcname);
+ if (check_src (src_name))
+ {
+ msgs = (compmsg *) (((char *) hdr) + sizeof (compcomhdr));
+ params = (int32_t *) ((char *) msgs + hdr_msgcount * sizeof (compmsg));
+ strs = (char *) ((char *) params + hdr_paramcount * sizeof (int32_t));
+
+ // initialize the I18N/L10N strings & set the visible table
+ ccm_vis_init ();
+ return hdr_msgcount;
+ }
+ offset += (length + hdr_stringlen);
+ }
+ return 0;
+}
+
+char *
+CompComment::get_demangle_name (char *fname)
+{
+ if (*fname == '_')
+ return cplus_demangle (fname, DMGL_PARAMS);
+ return NULL;
+}
+
+/*
+ * takes the message, and returns the I18N string for the message.
+ */
+char *
+CompComment::compcom_format (int index, compmsg *msg, int &visible)
+{
+ compmsg *p = msgs + index;
+ msg->instaddr = elf->decode (p->instaddr);
+ msg->lineno = elf->decode (p->lineno);
+ msg->msg_type = elf->decode (p->msg_type);
+ msg->nparam = elf->decode (p->nparam);
+ msg->param_index = elf->decode (p->param_index);
+
+ int vindex = ccm_vis_index (msg->msg_type);
+ char *mbuf;
+ Ccm_Primtype_t prim_ty;
+ visible = ccm_attrs[vindex].vis;
+ if (ccm_attrs[vindex].msg == NULL)
+ {
+ /* Print CCM_UNKNOWN message */
+ int uindex = ccm_vis_index (CCM_UNKNOWN);
+ visible = ccm_attrs[uindex].vis;
+ return dbe_sprintf (ccm_attrs[uindex].msg, vindex);
+ }
+
+ /*
+ * Construct the output buffer based on the primitive types of the
+ * message parameters.
+ *
+ * Parameter lists have to be handled carefully -- the 1 parameter
+ * is built up of all the elements separated by ", ".
+ *
+ * Old way: Case by message format string.
+ */
+ int *ind = params + msg->param_index;
+ int plist_idx = ccm_paramlist_index (msg->msg_type);
+ if (plist_idx <= 0)
+ {
+ /* No parameter list to handle; 0 parameters case is handled */
+
+ enum
+ {
+ MAX_COMPCOM_ARGS = 13
+ };
+ char *parms[MAX_COMPCOM_ARGS];
+ if (msg->nparam >= MAX_COMPCOM_ARGS)
+ {
+ fprintf (stderr,
+ GTXT ("Warning: improperly formatted compiler commentary message (%d parameters >= %d);\n please report this bug against the compiler\n"),
+ msg->nparam, MAX_COMPCOM_ARGS);
+ return NULL;
+ }
+ for (int i = 0; i < MAX_COMPCOM_ARGS; i++)
+ parms[i] = NULL; // initialize array
+ int prm_cnt = ccm_num_params (msg->msg_type);
+ if (prm_cnt != msg->nparam)
+ {
+ fprintf (stderr,
+ GTXT ("Warning, improperly formatted compiler commentary message (parameter count mismatch = %d, param# = %d, msg_type = %x, `%s');\n please report this bug against the compiler\n"),
+ prm_cnt, msg->nparam, msg->msg_type, ccm_attrs[vindex].msg);
+ return NULL;
+ }
+ for (int i = 0; i < msg->nparam; i++)
+ {
+ /* Parameters in message-type numbered from '1' */
+ prim_ty = ccm_param_primtype (msg->msg_type, i + 1);
+ if (prim_ty == CCM_PRIMTYPE_INTEGER)
+ {
+ unsigned long v = elf->decode (ind[i]);
+ parms[i] = (char*) v;
+ }
+ else if (prim_ty == CCM_PRIMTYPE_STRING)
+ {
+ char *fname = strs + elf->decode (ind[i]);
+ char *demName = get_demangle_name (fname);
+ parms[i] = demName ? demName : dbe_strdup (fname);
+ }
+ else if (prim_ty == CCM_PRIMTYPE_HEXSTRING)
+ parms[i] = dbe_sprintf (elf_cls == ELFCLASS32 ? NTXT ("0x%08llx") : NTXT ("0x%016llx"),
+ (unsigned long long) msg->instaddr);
+ else
+ {
+ fprintf (stderr,
+ GTXT ("Warning, improperly formatted compiler commentary message (unexpected primitive type %d);\n please report this bug against the compiler\n"),
+ prim_ty);
+ // Dummy code to avoid compiler's warning: static function ccm_param_hightype is not used
+ Ccm_Hitype_t hightype = CCM_HITYPE_NONE;
+ if (hightype != CCM_HITYPE_NONE)
+ hightype = ccm_param_hightype (msg->msg_type, i + 1);
+ return NULL;
+ }
+ }
+
+ /*
+ * Must make sure to pass _ALL_ params; may pass more because
+ * the format won't access the 'extra' parameters if all the
+ * rules for messages have been followed.
+ */
+ mbuf = dbe_sprintf (ccm_attrs[vindex].msg, parms[0], parms[1], parms[2],
+ parms[3], parms[4], parms[5], parms[6], parms[7],
+ parms[8], parms[9], parms[10], parms[11]);
+ // Cleanup allocated memory.
+ for (int i = 0; i < msg->nparam; i++)
+ {
+ prim_ty = ccm_param_primtype (msg->msg_type, i + 1);
+ if (prim_ty == CCM_PRIMTYPE_STRING || prim_ty == CCM_PRIMTYPE_HEXSTRING)
+ free (parms[i]);
+ }
+ }
+ else
+ {
+ /*
+ * Parameter list messages never have 0 parameters; the
+ * primitive type for the parameter list elements is always
+ * the same. And as of 22-Sep-2006, it was always
+ * CCM_PRIMTYPE_STRING.
+ *
+ * Account for different bases of parameter indices and
+ * 'nparam' count (1 and 0, respectively).
+ */
+ char *parms[3];
+ if (plist_idx > (int) ((sizeof (parms) / sizeof (char*))))
+ {
+ fprintf (stderr,
+ GTXT ("Warning: improperly formatted compiler commentary message (msg->nparam=%d plist_idx=%d);\n please report this bug against the compiler\n"),
+ msg->nparam, plist_idx);
+ return NULL;
+ }
+ for (size_t i = 0; i < (sizeof (parms) / sizeof (char*)); i++)
+ parms[i] = NULL; // initialize array
+
+ StringBuilder sb;
+ prim_ty = ccm_param_primtype (msg->msg_type, plist_idx);
+ for (int i = plist_idx - 1; i < msg->nparam; i++)
+ {
+ if (i != plist_idx - 1)
+ sb.append (GTXT (", "));
+ if (prim_ty == CCM_PRIMTYPE_INTEGER)
+ sb.append (elf->decode (ind[i]));
+ else if (prim_ty == CCM_PRIMTYPE_STRING)
+ {
+ char *fname = strs + elf->decode (ind[i]);
+ char *demName = get_demangle_name (fname);
+ if (demName)
+ {
+ sb.append (demName);
+ delete demName;
+ }
+ else
+ sb.append (fname);
+ }
+ else if (prim_ty == CCM_PRIMTYPE_HEXSTRING)
+ sb.appendf (elf_cls == ELFCLASS32 ? NTXT ("0x%08llx") : NTXT ("0x%016llx"),
+ (unsigned long long) msg->instaddr);
+ }
+ parms[plist_idx - 1] = sb.toString ();
+
+ for (int i = 0; i < plist_idx - 1; i++)
+ {
+ prim_ty = ccm_param_primtype (msg->msg_type, i + 1);
+ if (prim_ty == CCM_PRIMTYPE_INTEGER)
+ {
+ unsigned long v = elf->decode (ind[i]);
+ parms[i] = (char*) v;
+ }
+ else if (prim_ty == CCM_PRIMTYPE_STRING)
+ {
+ char *fname = strs + elf->decode (ind[i]);
+ char *demName = get_demangle_name (fname);
+ parms[i] = demName ? demName : dbe_strdup (fname);
+ }
+ else if (prim_ty == CCM_PRIMTYPE_HEXSTRING)
+ parms[i] = dbe_sprintf (elf_cls == ELFCLASS32 ? NTXT ("0x%08llx") : NTXT ("0x%016llx"),
+ (unsigned long long) msg->instaddr);
+ else
+ {
+ fprintf (stderr,
+ GTXT ("Warning, improperly formatted compiler commentary message (unexpected primitive type %d);\n please report this bug against the compiler\n"),
+ prim_ty);
+ return NULL;
+ }
+ }
+
+ /*
+ * We have reduced the parameter list to a single string (as
+ * the printf format specifier requires), so only have
+ * 'plist_idx' parameters.
+ */
+ mbuf = dbe_sprintf (ccm_attrs[vindex].msg, parms[0], parms[1], parms[2]);
+
+ // Cleanup allocated memory.
+ free (parms[plist_idx - 1]);
+ for (int i = 0; i < plist_idx - 1; i++)
+ {
+ prim_ty = ccm_param_primtype (msg->msg_type, i + 1);
+ if (prim_ty == CCM_PRIMTYPE_STRING || prim_ty == CCM_PRIMTYPE_STRING)
+ free (parms[i]);
+ }
+ }
+ return mbuf;
+}
diff --git a/gprofng/src/CompCom.h b/gprofng/src/CompCom.h
new file mode 100644
index 00000000000..e653939240b
--- /dev/null
+++ b/gprofng/src/CompCom.h
@@ -0,0 +1,63 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _COMPCOM_H
+#define _COMPCOM_H
+
+#include <sys/types.h>
+#include "comp_com.h"
+
+class Elf;
+typedef int (*CheckSrcName) (char *);
+
+class CompComment
+{
+public:
+ CompComment (Elf *_elf, int _compcom);
+ ~CompComment ();
+ int compcom_open (CheckSrcName check_src);
+ char *compcom_format (int index, compmsg *msg, int &visible);
+
+private:
+ int get_align (int64_t, int align);
+ char *get_demangle_name (char *fname);
+
+ Elf *elf;
+ int compcom, elf_cls;
+ compmsg *msgs; /* the array of messages */
+ int32_t *params; /* the parameters used in the messages parameters are
+ * either integers or string-indices */
+ char *strs; /* the strings used in the messages */
+};
+
+class ComC
+{
+public:
+ ComC () { com_str = NULL; };
+ ~ComC () { free (com_str); };
+
+ int sec;
+ int type;
+ int visible;
+ int line;
+ char *com_str;
+};
+
+#endif /* _COMPCOM_H */
diff --git a/gprofng/src/DataObject.cc b/gprofng/src/DataObject.cc
new file mode 100644
index 00000000000..870a5317747
--- /dev/null
+++ b/gprofng/src/DataObject.cc
@@ -0,0 +1,193 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <assert.h>
+#include <string.h>
+#include <ctype.h>
+
+#include "util.h"
+#include "DbeSession.h"
+#include "Application.h"
+#include "DataObject.h"
+#include "Module.h"
+#include "debug.h"
+
+DataObject::DataObject ()
+{
+ name = NULL;
+ parent = NULL;
+ master = NULL;
+ _unannotated_name = NULL;
+ _typename = NULL;
+ _instname = NULL;
+ scope = NULL;
+ EAs = new Vector<DbeEA*>;
+ size = 0;
+ offset = (uint64_t) (-1);
+}
+
+DataObject::~DataObject ()
+{
+ free (_unannotated_name);
+ free (_typename);
+ free (_instname);
+ EAs->destroy ();
+ delete EAs;
+}
+
+// get_addr() doesn't return an actual address for a DataObject
+// but rather synthesises an address-like identifier tuple.
+// XXXX since an aggregate and its first element have identical tuples
+// may need to arrange for special-purpose sorting "by address"
+uint64_t
+DataObject::get_addr ()
+{
+ uint64_t addr;
+ if (parent && parent->get_typename ())
+ addr = MAKE_ADDRESS (parent->id, offset); // element
+ else if (parent)
+ addr = MAKE_ADDRESS (parent->id, id) | 0x8000000000000000ULL; // Scalar, Unknown
+ else if (id == dbeSession->get_Scalars_DataObject ()->id)
+ addr = MAKE_ADDRESS (id, 0) | 0x8000000000000000ULL; // Scalar aggregate
+ else if (id == dbeSession->get_Unknown_DataObject ()->id)
+ addr = MAKE_ADDRESS (id, 0) | 0x8000000000000000ULL; // Unknown aggregate
+ else
+ addr = MAKE_ADDRESS (id, 0); // aggregate
+ return addr;
+}
+
+Histable *
+DataObject::convertto (Histable_type type, Histable *)
+{
+ return type == DOBJECT ? this : NULL;
+}
+
+char
+DataObject::get_offset_mark ()
+{
+ enum
+ {
+ blocksize = 32
+ };
+
+ if (size == 0 || offset == -1)
+ return '?'; // undefined
+ if (size > blocksize)
+ return '#'; // requires multiple blocks
+ if (size == blocksize && (offset % blocksize == 0))
+ return '<'; // fits block entirely
+ if (offset % blocksize == 0)
+ return '/'; // starts block
+ if ((offset + size) % blocksize == 0)
+ return '\\'; // closes block
+ if (offset / blocksize == ((offset + size) / blocksize))
+ return '|'; // inside block
+ return 'X'; // crosses blocks unnecessarily
+}
+
+char *
+DataObject::get_offset_name ()
+{
+ char *offset_name;
+ if (parent && parent->get_typename ()) // element
+ offset_name = dbe_sprintf (GTXT ("%c%+6lld .{%s %s}"),
+ get_offset_mark (), (long long) offset,
+ _typename ? _typename : GTXT ("NO_TYPE"),
+ _instname ? _instname : GTXT ("-")); // "NO_NAME"
+ else if ((offset != -1) && (offset > 0)) // filler
+ offset_name = dbe_sprintf (GTXT ("%c%+6lld %s"), get_offset_mark (),
+ (long long) offset, get_name ());
+ else if (parent) // Scalar/Unknown element
+ offset_name = dbe_sprintf (GTXT (" .%s"), get_unannotated_name ());
+ else // aggregate
+ offset_name = dbe_strdup (get_name ());
+ return offset_name;
+}
+
+void
+DataObject::set_dobjname (char *type_name, char *inst_name)
+{
+ _unannotated_name = _typename = _instname = NULL;
+ if (inst_name)
+ _instname = dbe_strdup (inst_name);
+
+ char *buf;
+ if (parent == dbeSession->get_Scalars_DataObject ())
+ {
+ if (type_name)
+ _typename = dbe_strdup (type_name);
+ _unannotated_name = dbe_sprintf (NTXT ("{%s %s}"), type_name,
+ inst_name ? inst_name : NTXT ("-"));
+ buf = dbe_sprintf (NTXT ("%s.%s"), parent->get_name (), _unannotated_name);
+ }
+ else if (parent == dbeSession->get_Unknown_DataObject ())
+ {
+ _unannotated_name = dbe_strdup (type_name);
+ buf = dbe_sprintf (NTXT ("%s.%s"), parent->get_name (), _unannotated_name);
+ }
+ else
+ {
+ if (type_name)
+ _typename = dbe_strdup (type_name);
+ if (parent && parent->get_typename ())
+ buf = dbe_sprintf (NTXT ("%s.{%s %s}"),
+ parent->get_name () ? parent->get_name () : NTXT ("ORPHAN"),
+ type_name ? type_name : NTXT ("NO_TYPE"),
+ inst_name ? inst_name : NTXT ("-")); // "NO_NAME"
+ else
+ buf = dbe_sprintf (NTXT ("{%s %s}"),
+ type_name ? type_name : NTXT ("NO_TYPE"),
+ inst_name ? inst_name : NTXT ("-")); // "NO_NAME"
+ }
+ name = buf;
+ dbeSession->dobj_updateHT (this);
+}
+
+void
+DataObject::set_name (char *string)
+{
+ name = dbe_strdup (string);
+ dbeSession->dobj_updateHT (this);
+}
+
+DbeEA *
+DataObject::find_dbeEA (Vaddr EA)
+{
+ DbeEA *dbeEA;
+ int left = 0;
+ int right = EAs->size () - 1;
+ while (left <= right)
+ {
+ int index = (left + right) / 2;
+ dbeEA = EAs->fetch (index);
+ if (EA < dbeEA->eaddr)
+ right = index - 1;
+ else if (EA > dbeEA->eaddr)
+ left = index + 1;
+ else
+ return dbeEA;
+ }
+
+ // None found, create a new one
+ dbeEA = new DbeEA (this, EA);
+ EAs->insert (left, dbeEA);
+ return dbeEA;
+}
diff --git a/gprofng/src/DataObject.h b/gprofng/src/DataObject.h
new file mode 100644
index 00000000000..f70bbad921e
--- /dev/null
+++ b/gprofng/src/DataObject.h
@@ -0,0 +1,82 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _DATAOBJECT_H
+#define _DATAOBJECT_H
+
+// A DataObject object represents a distinct dataobject.
+
+#include "dbe_structs.h"
+#include "Histable.h"
+
+extern char *DOBJ_UNSPECIFIED;
+extern char *DOBJ_UNIDENTIFIED;
+extern char *DOBJ_UNDETERMINED;
+extern char *DOBJ_ANON;
+extern char *DOBJ_UNASCERTAINABLE;
+extern char *DOBJ_UNVERIFIABLE;
+extern char *DOBJ_UNRESOLVABLE;
+
+class DataObject : public Histable
+{
+public:
+ DataObject ();
+ ~DataObject ();
+
+ static const unsigned UNSPECIFIED_ID = 0xFFFFFFFF;
+
+ int64_t size; // size of the dataobject in bytes
+ int64_t offset; // offset of dataobject from parent
+ DataObject *parent; // this dataobject's parent (if any)
+ Histable *scope; // scope of this dataobject
+ DataObject *master; // this dataobject's master (if any)
+
+ Histable_type get_type () { return DOBJECT; }
+ int64_t get_size () { return size; }
+ int64_t get_offset () { return offset; }
+ DataObject *get_parent () { return parent; }
+ DataObject *get_master () { return master; }
+ char *get_typename () { return _typename; }
+ char *get_instname () { return _instname; }
+ Histable *get_scope () { return scope; }
+
+ char *get_unannotated_name ()
+ { // name without a <Scalar> or <Unknown> prefix
+ if (_unannotated_name)
+ return _unannotated_name;
+ return get_name ();
+ }
+
+ uint64_t get_addr ();
+ char get_offset_mark ();
+ char *get_offset_name ();
+ void set_dobjname (char *type_name, char *inst_name); // dobj->parent must already be set
+ void set_name (char *);
+ Histable *convertto (Histable_type type, Histable *obj = NULL);
+ DbeEA *find_dbeEA (Vaddr EA);
+
+private:
+ char *_unannotated_name; // name without a <Scalar> or <Unknown> prefix
+ char *_typename; // name of this dataobject's type
+ char *_instname; // name of this dataobject instance
+ Vector<DbeEA*> *EAs;
+};
+
+#endif /* _DATAOBJECT_H */
diff --git a/gprofng/src/DataSpace.cc b/gprofng/src/DataSpace.cc
new file mode 100644
index 00000000000..e5b48ddeaa0
--- /dev/null
+++ b/gprofng/src/DataSpace.cc
@@ -0,0 +1,558 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <stdlib.h>
+#include <stdarg.h>
+
+#include "util.h"
+#include "Application.h"
+#include "CallStack.h"
+#include "Experiment.h"
+#include "Exp_Layout.h"
+#include "DataObject.h"
+#include "DbeSession.h"
+#include "MetricList.h"
+#include "Function.h"
+#include "Module.h"
+#include "MemObject.h"
+#include "DbeView.h"
+#include "Metric.h"
+#include "DataSpace.h"
+#include "LoadObject.h"
+
+#include "debug.h"
+#include "ABS.h"
+
+//char *DOBJ_UNSPECIFIED = STXT("(Not identified by the compiler as a memory-referencing instruction)");
+char *DOBJ_UNSPECIFIED = STXT("(No type information)");
+char *DOBJ_UNIDENTIFIED = STXT("(No identifying descriptor provided by the compiler)");
+char *DOBJ_UNDETERMINED = STXT("(Not determined from the symbolic information provided by the compiler)");
+char *DOBJ_ANON = STXT("(Padding in structure)");
+
+// run-time codes
+// ABS_UNSUPPORTED = 0x01, /* inappropriate HWC event type */
+// ABS_BLOCKED = 0x02, /* runtime backtrack blocker reached */
+// ABS_INCOMPLETE = 0x03, /* runtime backtrack limit reached */
+// ABS_REG_LOSS = 0x04, /* address register contaminated */
+// ABS_INVALID_EA = 0x05, /* invalid effective address value */
+
+const char *ABS_RT_CODES[NUM_ABS_RT_CODES] = {
+ "(OK)",
+ "(Dataspace data not requested during data collection)",
+ "(Backtracking was prevented by a jump or call instruction)",
+ "(Backtracking did not find trigger PC)",
+ "(Could not determine VA because registers changed after trigger instruction)",
+ "(Memory-referencing instruction did not specify a valid VA)",
+ "(UNKNOWN)"
+};
+
+// post-processing codes
+// ABS_NO_CTI_INFO = 0x10, /* no AnalyzerInfo for validation */
+// ABS_INFO_FAILED = 0x20, /* info failed to validate backtrack */
+// ABS_CTI_TARGET = 0x30, /* CTI target invalidated backtrack */
+char *DOBJ_UNASCERTAINABLE = STXT("(Module with trigger PC not compiled with -xhwcprof)");
+char *DOBJ_UNVERIFIABLE = STXT("(Backtracking failed to find a valid branch target)");
+char *DOBJ_UNRESOLVABLE = STXT("(Backtracking traversed a branch target)");
+
+char *ABS_PP_CODES[NUM_ABS_PP_CODES] = {
+ STXT ("(OK)"),
+ DOBJ_UNASCERTAINABLE,
+ DOBJ_UNVERIFIABLE,
+ DOBJ_UNRESOLVABLE,
+ STXT ("(<INTERNAL ERROR DURING POST-PROCESSING>)")
+};
+
+DataSpace::DataSpace (DbeView *_dbev, int /* _picked */)
+{
+ dbev = _dbev;
+}
+
+DataSpace::~DataSpace () { }
+
+void
+DataSpace::reset () { }
+
+char *
+DataSpace::status_str ()
+{
+ return NULL;
+}
+
+Histable *
+DataSpace::get_hist_obj (Histable::Type type, DataView *dview, long i)
+{
+ DataObject *dobj = NULL;
+ char *errcode = NTXT ("<internal error>");
+ switch (type)
+ {
+ case Histable::DOBJECT:
+ dobj = (DataObject*) dview->getObjValue (PROP_HWCDOBJ, i);
+ if (dobj == NULL)
+ {
+ Vaddr leafVA = (Vaddr) dview->getLongValue (PROP_VADDR, i);
+ unsigned rt_code = (unsigned) ABS_GET_RT_CODE (leafVA);
+ unsigned pp_code = (unsigned) ABS_GET_PP_CODE (leafVA);
+ if (leafVA < ABS_CODE_RANGE
+ && (pp_code || (rt_code && rt_code != ABS_REG_LOSS)))
+ {
+ if (rt_code >= NUM_ABS_RT_CODES)
+ rt_code = NUM_ABS_RT_CODES - 1;
+ if (pp_code >= NUM_ABS_PP_CODES)
+ pp_code = NUM_ABS_PP_CODES - 1;
+ if (rt_code)
+ errcode = PTXT (ABS_RT_CODES[rt_code]);
+ else
+ errcode = PTXT (ABS_PP_CODES[pp_code]);
+ }
+ else
+ {
+ // associate dataobject with event
+ int index;
+
+ // search for memop in Module infoList
+ void *cstack = dview->getObjValue (PROP_MSTACK, i);
+ Histable *leafPCObj = CallStack::getStackPC (cstack, 0);
+ DbeInstr *leafPC = NULL;
+ if (leafPCObj->get_type () == Histable::INSTR)
+ leafPC = (DbeInstr*) leafPCObj;
+ else // DBELINE
+ leafPC = (DbeInstr*) leafPCObj->convertto (Histable::INSTR);
+ Function *func = leafPC->func;
+ uint64_t leafPC_offset = func->img_offset + leafPC->addr;
+ Module *mod = func->module;
+ uint32_t dtype_id = 0;
+ inst_info_t *info = NULL;
+ Vec_loop (inst_info_t*, mod->infoList, index, info)
+ {
+ if (info->offset == leafPC_offset)
+ {
+ dtype_id = info->memop->datatype_id;
+ break;
+ }
+ }
+ dobj = mod->get_dobj (dtype_id);
+ if (dobj == NULL)
+ {
+ // ensure dobj is determined
+ if (dtype_id == DataObject::UNSPECIFIED_ID)
+ errcode = PTXT (DOBJ_UNSPECIFIED);
+ else
+ errcode = PTXT (DOBJ_UNIDENTIFIED);
+ }
+ else
+ {
+ // determine associated master dataobject
+ if (!dobj->master && dobj->scope)
+ dobj->master = dbeSession->createMasterDataObject (dobj);
+ if (dobj->scope)
+ dobj = dobj->master; // use associated master
+ }
+ }
+ if (!dobj)
+ {
+ // if dobj is not set yet, supply a dobj for errcode
+ // search for a dobj with the same name
+ dobj = dbeSession->find_dobj_by_name (errcode);
+ if (dobj == NULL)
+ {
+ // create new DataObject for unknown code
+ dobj = (DataObject*) dbeSession->createHistObject (Histable::DOBJECT);
+ dobj->size = 0;
+ dobj->offset = -1;
+ dobj->parent = dbeSession->get_Unknown_DataObject ();
+ dobj->set_dobjname (errcode, NULL); // dobj->parent must already be set
+ }
+ }
+ dview->setObjValue (PROP_HWCDOBJ, i, dobj);
+ }
+ break;
+ default:
+ break;
+ }
+ return dobj;
+}
+
+Hist_data *
+DataSpace::compute_metrics (MetricList *mlist, Histable::Type type,
+ Hist_data::Mode mode, Histable *sel_obj)
+{
+ int nmetrics = mlist->get_items ()->size ();
+ int sort_ind = -1;
+ Hist_data::HistItem *hi;
+ int index;
+
+ // reset event_data count for all datatypes
+ Vector<LoadObject*> *lobjs = dbeSession->get_text_segments ();
+ for (int i = 0, sz = lobjs ? lobjs->size () : -1; i < sz; i++)
+ {
+ LoadObject *lo = lobjs->fetch (i);
+ Vector<Module*> *modules = lo->seg_modules;
+ for (int j = 0, msize = modules ? modules->size () : -1; j < msize; j++)
+ {
+ Module *mod = modules->fetch (j);
+ mod->reset_datatypes ();
+ }
+ }
+ Hist_data *hist_data = new Hist_data (mlist, type, mode);
+
+ // add each experiment, skipping disabled and broken experiments
+ for (index = 0; index < dbeSession->nexps (); index++)
+ {
+ Experiment *exp = dbeSession->get_exp (index);
+ if (exp->broken)
+ continue;
+
+ Collection_params *params = exp->get_params ();
+ if (!params->xhw_mode)
+ continue;
+
+ char *expt_name = exp->get_expt_name ();
+ char *base_name = strrchr (expt_name, '/');
+ base_name = base_name ? base_name + 1 : expt_name;
+
+ // Determine mapping of experiment HWC metrics to hist_data metric list
+ int *xlate = new int[MAX_HWCOUNT];
+ for (unsigned i = 0; i < MAX_HWCOUNT; i++)
+ {
+ xlate[i] = -1;
+ if (params->hw_interval[i] > 0)
+ {
+ const char *ctr_name = params->hw_aux_name[i];
+ int mindex;
+ Metric *met;
+ Vec_loop (Metric*, mlist->get_items (), mindex, met)
+ {
+ if (dbe_strcmp (met->get_cmd (), ctr_name) == 0)
+ xlate[i] = mindex;
+ }
+ }
+ }
+
+ //
+ // Process hardware profiling data
+ //
+ DataView *dview = dbev->get_filtered_events (index, DATA_HWC);
+ if (dview)
+ {
+ DataDescriptor *ddscr = dview ->getDataDescriptor ();
+ if (ddscr->getProp (PROP_HWCDOBJ) == NULL)
+ {
+ PropDescr *prop = new PropDescr (PROP_HWCDOBJ, NTXT ("HWCDOBJ"));
+ prop->uname = NULL;
+ prop->vtype = TYPE_OBJ;
+ ddscr->addProperty (prop);
+ }
+ }
+ if (dview && dview->getSize () != 0)
+ {
+ char *msg = NULL;
+ for (long i = 0; i < dview->getSize (); i++)
+ {
+ if (i % 5000 == 0)
+ {
+ int percent = (int) (100.0 * i / dview->getSize ());
+ if (percent == 0 && msg == NULL)
+ msg = dbe_sprintf (GTXT ("Filtering HW Profile Address Data: %s"), base_name);
+ theApplication->set_progress (percent, (percent != 0) ? NULL : msg);
+ }
+
+ uint32_t tag = dview->getIntValue (PROP_HWCTAG, i);
+ if (tag < 0 || tag >= MAX_HWCOUNT)
+ continue; // invalid HWC tag in the record; ignore it
+ int mHwcntr_idx = xlate[tag];
+ if (mHwcntr_idx < 0)
+ continue;
+
+ Vaddr leafVA = (Vaddr) dview->getLongValue (PROP_VADDR, i);
+ if (leafVA == ABS_UNSUPPORTED)
+ continue; // skip this record
+ Histable *obj = get_hist_obj (type, dview, i);
+ if (obj == NULL)
+ continue;
+ uint64_t interval = dview->getLongValue (PROP_HWCINT, i);
+ if (HWCVAL_HAS_ERR (interval))
+ continue;
+ if (mode == Hist_data::ALL)
+ { // data_objects
+ hi = hist_data->append_hist_item (obj);
+ hi->value[mHwcntr_idx].ll += interval;
+ for (DataObject *dobj = ((DataObject *) obj)->parent; dobj; dobj = dobj->parent)
+ {
+ hi = hist_data->append_hist_item (dobj);
+ hi->value[mHwcntr_idx].ll += interval;
+ }
+ }
+ else if (mode == Hist_data::LAYOUT || mode == Hist_data::DETAIL)
+ { // data_single
+ {
+ // for data layout, insert elements that have no metrics yet
+ DataObject *tmpParent = ((DataObject *) obj)->parent;
+ if (tmpParent && tmpParent->get_typename ())
+ {
+ // dobj is an aggregate element
+ if (!hist_data->find_hist_item (tmpParent))
+ {
+ // parent not yet a member of hist_data
+ // supply parent's children with 0 values for layout
+ Vector<DataObject*> *elements = dbeSession->get_dobj_elements (tmpParent);
+ for (long eli = 0, sz = elements->size (); eli < sz; eli++)
+ {
+ DataObject* element = elements->fetch (eli);
+ assert (!hist_data->find_hist_item (element));
+ hi = hist_data->append_hist_item (element);
+ }
+ }
+ }
+ }
+
+ // Same as for mode == Hist_data::ALL:
+ hi = hist_data->append_hist_item (obj);
+ hi->value[mHwcntr_idx].ll += interval;
+ for (DataObject *dobj = ((DataObject *) obj)->parent; dobj; dobj = dobj->parent)
+ {
+ hi = hist_data->append_hist_item (dobj);
+ hi->value[mHwcntr_idx].ll += interval;
+ }
+ }
+ else if (mode == Hist_data::SELF)
+ { // used by dbeGetSummary()
+ if (obj == sel_obj)
+ {
+ hi = hist_data->append_hist_item (obj);
+ hi->value[mHwcntr_idx].ll += interval;
+ }
+ else
+ {
+ for (DataObject *dobj = ((DataObject *) obj)->parent; dobj; dobj = dobj->parent)
+ {
+ if ((Histable*) dobj == sel_obj)
+ {
+ hi = hist_data->append_hist_item (dobj);
+ hi->value[mHwcntr_idx].ll += interval;
+ break;
+ }
+ }
+ }
+ }
+ // Update total
+ hist_data->total->value[mHwcntr_idx].ll += interval;
+ }
+ free (msg);
+ theApplication->set_progress (0, NTXT (""));
+ }
+ delete[] xlate;
+ }
+
+ // include a regular HistItem for <Total> -- for all DataObjects, and MemObjects
+ DataObject *dtot = dbeSession->get_Total_DataObject ();
+ if (mode == Hist_data::ALL || mode == Hist_data::DETAIL
+ || mode == Hist_data::LAYOUT ||
+ sel_obj == dtot)
+ {
+ hi = hist_data->append_hist_item (dtot);
+ for (int mind = 0; mind < nmetrics; mind++)
+ hi->value[mind] = hist_data->total->value[mind];
+ }
+ if (hist_data->get_status () != Hist_data::SUCCESS)
+ return hist_data;
+ theApplication->set_progress (0, GTXT ("Constructing Metrics"));
+
+ // Determine by which metric to sort if any
+ bool rev_sort = mlist->get_sort_rev ();
+
+ // Compute static metrics: SIZES, ADDRESS.
+ for (int mind = 0; mind < nmetrics; mind++)
+ {
+ Metric *mtr = mlist->get_items ()->fetch (mind);
+ if (mlist->get_sort_ref_index () == mind)
+ sort_ind = mind;
+ else if (!mtr->is_visible () && !mtr->is_tvisible ()
+ && !mtr->is_pvisible ())
+ continue;
+ Metric::Type mtype = mtr->get_type ();
+ if (mtype == Metric::SIZES)
+ {
+ Vec_loop (Hist_data::HistItem *, hist_data->hist_items, index, hi)
+ {
+ Histable *h = mtr->get_comparable_obj (hi->obj);
+ hi->value[mind].tag = VT_LLONG;
+ hi->value[mind].ll = h ? h->get_size () : 0;
+ }
+ }
+ else if (mtype == Metric::ONAME
+ && (mode == Hist_data::SELF
+ || ((DataObject*) sel_obj == dbeSession->get_Total_DataObject ())))
+ {
+ Vec_loop (Hist_data::HistItem *, hist_data->hist_items, index, hi)
+ {
+ hi->value[mind].tag = VT_OFFSET; // offset labels
+ }
+ }
+ else if (mtype == Metric::ADDRESS)
+ { // pseudo-address
+ Vec_loop (Hist_data::HistItem *, hist_data->hist_items, index, hi)
+ {
+ hi->value[mind].tag = VT_ADDRESS;
+ Histable *h = mtr->get_comparable_obj (hi->obj);
+ hi->value[mind].ll = h ? h->get_addr () : 0;
+ }
+ // force sort by offset // XXXX should visibility also be set?
+ if (mode == Hist_data::SELF)
+ { // used by dbeGetSummary()
+ sort_ind = mind;
+ //hist_data->metrics->fetch(mind)->set_visible(T);
+ }
+ }
+ else
+ {
+ ValueTag vtype = mtr->get_vtype ();
+ switch (vtype)
+ {
+ case VT_ULLONG: // most Data-derived HWC metrics are VT_ULLONG
+ hist_data->total->value[mind].tag = vtype;
+ Vec_loop (Hist_data::HistItem *, hist_data->hist_items, index, hi)
+ {
+ hi->value[mind].tag = vtype;
+ }
+ break;
+ case VT_DOUBLE:
+ {
+ double prec = mtr->get_precision ();
+ hist_data->total->value[mind].tag = vtype;
+ hist_data->total->value[mind].d = hist_data->total->value[mind].ll / prec;
+ Vec_loop (Hist_data::HistItem *, hist_data->hist_items, index, hi)
+ {
+ hi->value[mind].tag = vtype;
+ hi->value[mind].d = hi->value[mind].ll / prec;
+ }
+ break;
+ }
+ default:
+ if (mtr->get_subtype () != Metric::STATIC)
+ abort ();
+ break;
+ }
+ }
+ }
+ hist_data->sort (sort_ind, rev_sort);
+ hist_data->compute_minmax ();
+ theApplication->set_progress (0, NTXT (""));
+ return hist_data;
+}
+
+
+// generate annotated structure info for data_layout
+// note: similar data traversal found in er_print_histogram::dump_detail()
+Hist_data *
+DataSpace::get_layout_data (Hist_data *sorted_data,
+ Vector<int> *marks, int /* _threshold */)
+{
+ Hist_data *data_items = NULL;
+ Hist_data::HistItem *new_item;
+ MetricList *mlist = new MetricList (sorted_data->get_metric_list ());
+ int no_metrics = mlist->get_items ()->size ();
+ int index, addr_index = -1, name_index = -1;
+ Dprintf (DEBUG_DATAOBJ, NTXT ("DataSpace::get_layout_data(ALL)\n"));
+
+ // Allocate a new Hist_data for the list, to be copied from the DataObect list
+ data_items = new Hist_data (mlist, Histable::DOBJECT, Hist_data::MODL);
+ data_items->set_status (sorted_data->get_status ());
+
+ // suppress threshold setting
+ // XXX this threshold should probably not be used
+ sorted_data->set_threshold ((double) 75. / 100.0);
+ TValue* all_empty = new TValue[no_metrics];
+ memset (all_empty, 0, sizeof (TValue) * no_metrics);
+
+ Metric *mitem;
+ Vec_loop (Metric*, mlist->get_items (), index, mitem)
+ {
+ // new data items have same total as original items
+ data_items->total->value[index] = sorted_data->total->value[index];
+ // empty metric items need matching types
+ all_empty[index].tag = mitem->get_vtype ();
+ if (mitem->get_type () == Metric::ONAME) name_index = index;
+ if (mitem->get_type () == Metric::ADDRESS) addr_index = index;
+ }
+
+ int64_t next_elem_offset = 0;
+ for (long i = 0; i < sorted_data->size (); i++)
+ {
+ Hist_data::HistItem* ditem = sorted_data->fetch (i);
+ DataObject* dobj = (DataObject*) (ditem->obj);
+ if (!dobj->get_parent ())
+ { // doesn't have a parent; top level item
+ next_elem_offset = 0;
+ if (i > 0)
+ { // add a blank line as separator
+ // fixme xxxxx, is it really ok to create a DataObject just for this?
+ DataObject* empty = new DataObject ();
+ empty->size = 0;
+ empty->offset = 0;
+ empty->set_name (NTXT (""));
+ new_item = sorted_data->new_hist_item (empty, Module::AT_EMPTY, all_empty);
+ new_item->value[name_index].tag = VT_LABEL;
+ new_item->value[name_index].l = NULL;
+ data_items->append_hist_item (new_item);
+ }
+ // then add the aggregate
+ new_item = sorted_data->new_hist_item (dobj, Module::AT_SRC, ditem->value);
+ new_item->value[name_index].tag = VT_OFFSET;
+ new_item->value[name_index].l = dbe_strdup (dobj->get_name ());
+ data_items->append_hist_item (new_item);
+ }
+ else
+ { // is a child
+ if (dobj->get_parent ()->get_typename ())
+ { // typed sub-element that has offset
+ if (dobj->offset > next_elem_offset)
+ { // filler entry
+ // hole in offsets
+ // fixme xxxxx, is it really ok to create a DataObject just for this?
+ DataObject* filler = new DataObject ();
+ filler->set_name (PTXT (DOBJ_ANON));
+ filler->size = (dobj->offset - next_elem_offset);
+ filler->offset = next_elem_offset;
+ new_item = sorted_data->new_hist_item (filler, Module::AT_EMPTY, all_empty);
+ new_item->value[name_index].tag = VT_OFFSET;
+ new_item->value[name_index].l = dbe_strdup (filler->get_offset_name ());
+ if (addr_index >= 0)
+ {
+ new_item->value[addr_index].tag = VT_ADDRESS;
+ new_item->value[addr_index].ll = (dobj->get_addr () - filler->size);
+ }
+ data_items->append_hist_item (new_item);
+ }
+ next_elem_offset = dobj->offset + dobj->size;
+ }
+ // then add the aggregate's subelement
+ if (marks)
+ if (sorted_data->above_threshold (ditem))
+ marks->append (data_items->size ());
+ new_item = sorted_data->new_hist_item (dobj, Module::AT_DIS, ditem->value);
+ new_item->value[name_index].tag = VT_OFFSET;
+ new_item->value[name_index].l = dbe_strdup (dobj->get_offset_name ());
+ data_items->append_hist_item (new_item);
+ }
+ }
+ delete[] all_empty;
+ return data_items;
+}
diff --git a/gprofng/src/DataSpace.h b/gprofng/src/DataSpace.h
new file mode 100644
index 00000000000..c4d80fba4e3
--- /dev/null
+++ b/gprofng/src/DataSpace.h
@@ -0,0 +1,55 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _DATASPACE_H
+#define _DATASPACE_H
+
+#include <stdio.h>
+
+#include "dbe_structs.h"
+#include "vec.h"
+#include "Exp_Layout.h"
+#include "Hist_data.h"
+#include "Histable.h"
+#include "Metric.h"
+
+class DbeView;
+class DataView;
+
+class DataSpace
+{
+public:
+ DataSpace (DbeView *_dbev, int picked = 0);
+ ~DataSpace ();
+ void reset ();
+ Hist_data *compute_metrics (MetricList *, Histable::Type,
+ Hist_data::Mode, Histable*);
+ Hist_data *get_layout_data (Hist_data *sorted_data, Vector<int> *marks,
+ int threshold);
+
+ static char *status_str ();
+
+private:
+ Histable *get_hist_obj (Histable::Type, DataView*, long);
+
+ DbeView *dbev;
+};
+
+#endif /* _DATASPACE_H */
diff --git a/gprofng/src/DataStream.cc b/gprofng/src/DataStream.cc
new file mode 100644
index 00000000000..8e244e22dd5
--- /dev/null
+++ b/gprofng/src/DataStream.cc
@@ -0,0 +1,55 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include "util.h"
+#include "DataStream.h"
+#include "debug.h"
+
+DataStream::DataStream (char *filename) : Data_window (filename)
+{
+ set_span (0, -1);
+}
+
+DataStream::~DataStream () { }
+
+void
+DataStream::set_span (int64_t f_offset, int64_t sz)
+{
+ span_offset = 0;
+ span_fileoffset = f_offset;
+ int64_t fsz = get_fsize ();
+ span_size = sz == -1 ? fsz : sz;
+ if (span_fileoffset >= fsz)
+ span_fileoffset = fsz;
+ if (span_size > fsz - span_fileoffset)
+ span_size = fsz - span_fileoffset;
+}
+
+int64_t
+DataStream::read (void *buf, int64_t len)
+{
+ if (len > span_size - span_offset)
+ len = span_size - span_offset;
+ int64_t off = span_offset + span_fileoffset;
+ span_offset += len;
+ get_data (off, len, buf);
+ return len;
+}
diff --git a/gprofng/src/DataStream.h b/gprofng/src/DataStream.h
new file mode 100644
index 00000000000..59ee293292f
--- /dev/null
+++ b/gprofng/src/DataStream.h
@@ -0,0 +1,51 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _DATASTREAM_H
+#define _DATASTREAM_H
+
+#include "Data_window.h"
+
+// sequential access to the file
+class DataStream : public Data_window
+{
+public:
+ // Create an empty data window.
+ DataStream (char *file_name);
+ ~DataStream ();
+ void set_span (int64_t f_offset, int64_t sz);
+ int64_t read (void *buf, int64_t len);
+
+ template <typename Key_t> inline int64_t
+ read (Key_t &val)
+ {
+ int64_t sz = read (&val, sizeof (val));
+ if (need_swap_endian && sz == sizeof (val))
+ swapByteOrder (&val, sizeof (val));
+ return sz;
+ }
+
+private:
+ int64_t span_offset;
+ int64_t span_size; // the window size
+ int64_t span_fileoffset; // the window begin on the file
+};
+
+#endif /* _DATASTREAM_H */
diff --git a/gprofng/src/Data_window.cc b/gprofng/src/Data_window.cc
new file mode 100644
index 00000000000..d9b006701ac
--- /dev/null
+++ b/gprofng/src/Data_window.cc
@@ -0,0 +1,241 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <sys/types.h>
+#include <sys/mman.h>
+#include <fcntl.h>
+#include <unistd.h> // for close();
+
+#include "util.h"
+#include "Data_window.h"
+#include "debug.h"
+
+enum
+{
+ MINBUFSIZE = 1 << 16,
+ WIN_ALIGN = 8
+};
+
+Data_window::Data_window (char *file_name)
+{
+ Dprintf (DEBUG_DATA_WINDOW, NTXT ("Data_window:%d %s\n"), (int) __LINE__, STR (file_name));
+ page_size = sysconf (_SC_PAGESIZE);
+ need_swap_endian = false;
+ opened = false;
+ fsize = 0;
+ base = NULL;
+ woffset = 0;
+ wsize = 0;
+ basesize = 0;
+ fname = dbe_strdup (file_name);
+ mmap_on_file = false;
+ use_mmap = false;
+#if DEBUG
+ if (DBE_USE_MMAP)
+ use_mmap = true;
+#endif /* DEBUG */
+ fd = open64 (fname, O_RDONLY);
+ if (fd == -1)
+ return;
+ fsize = lseek (fd, 0, SEEK_END);
+ if (fsize == 0)
+ {
+ close (fd);
+ fd = -1;
+ return;
+ }
+ opened = true;
+ if (use_mmap)
+ {
+ if (fsize != -1)
+ {
+ base = (void*) mmap (NULL, (size_t) fsize, PROT_READ, MAP_PRIVATE, fd, 0);
+ close (fd);
+ fd = -1;
+ if (base == MAP_FAILED)
+ {
+ base = NULL;
+ use_mmap = false;
+ return;
+ }
+ mmap_on_file = true;
+ wsize = fsize;
+ }
+ }
+}
+
+void *
+Data_window::bind (int64_t file_offset, int64_t minSize)
+{
+ Span span;
+ span.length = fsize - file_offset;
+ span.offset = file_offset;
+ return bind (&span, minSize);
+}
+
+void *
+Data_window::bind (Span *span, int64_t minSize)
+{
+ // Do any necessary mapping to access the desired span of data
+ // and return a pointer to the first byte.
+ Dprintf (DEBUG_DATA_WINDOW, NTXT ("Data_window:bind:%d offset=%llx:%lld minSize=%lld \n"),
+ (int) __LINE__, (long long) span->offset, (long long) span->length, (long long) minSize);
+ if (minSize == 0 || span->length < minSize)
+ return NULL;
+
+ if (span->offset < woffset || span->offset + minSize > woffset + wsize)
+ {
+ // Remap the window
+ if (span->offset + minSize > fsize)
+ return NULL;
+ int myfd = fd;
+ if (myfd == -1)
+ {
+ if (fname)
+ myfd = open64 (fname, O_RDONLY, 0);
+ if (myfd == -1)
+ return NULL;
+ }
+ bool remap_failed = true;
+ if (use_mmap)
+ {
+ if (base)
+ {
+ munmap ((caddr_t) base, (size_t) wsize);
+ base = NULL;
+ }
+ woffset = span->offset & ~(page_size - 1);
+ wsize = page_size * ((MINBUFSIZE + page_size - 1) / page_size);
+ if (span->offset + minSize > woffset + wsize)
+ // Extend a window
+ wsize += page_size * ((span->offset + minSize -
+ woffset - wsize + page_size - 1) / page_size);
+ base = (void *) mmap (0, (size_t) wsize, PROT_READ, MAP_SHARED, fd, woffset);
+ if (base == MAP_FAILED)
+ {
+ base = NULL;
+ use_mmap = false;
+ }
+ remap_failed = (base == NULL);
+ }
+ if (remap_failed)
+ {
+ remap_failed = false;
+ woffset = span->offset & ~(WIN_ALIGN - 1);
+ wsize = minSize + (span->offset % WIN_ALIGN);
+ if (wsize < MINBUFSIZE)
+ wsize = MINBUFSIZE;
+ if (wsize > fsize)
+ wsize = fsize;
+ if (basesize < wsize)
+ { // Need to realloc 'base'
+ free (base);
+ basesize = wsize;
+ base = (void *) malloc (basesize);
+ Dprintf (DEBUG_DATA_WINDOW,
+ NTXT ("Data_window:bind:%d realloc basesize=%llx woffset=%lld \n"),
+ (int) __LINE__, (long long) basesize, (long long) woffset);
+ if (base == NULL)
+ {
+ basesize = 0;
+ remap_failed = true;
+ }
+ }
+ if (wsize > fsize - woffset)
+ wsize = fsize - woffset;
+ off_t woff = (off_t) woffset;
+ if (base == NULL || woff != lseek (myfd, woff, SEEK_SET)
+ || wsize != read_from_file (myfd, base, wsize))
+ remap_failed = true;
+ }
+ if (fd == -1)
+ close (myfd);
+ if (remap_failed)
+ {
+ woffset = 0;
+ wsize = 0;
+ return NULL;
+ }
+ }
+ return (void *) ((char*) base + span->offset - woffset);
+}
+
+void *
+Data_window::get_data (int64_t offset, int64_t size, void *datap)
+{
+ if (size <= 0)
+ return NULL;
+ void *buf = bind (offset, size);
+ if (buf == NULL)
+ return NULL;
+ if (datap == NULL && !mmap_on_file)
+ // Can be remmaped or reallocated. Need to make a copy
+ datap = (void *) malloc (size);
+ if (datap)
+ {
+ memcpy (datap, buf, (size_t) size);
+ return datap;
+ }
+ return buf;
+}
+
+Data_window::~Data_window ()
+{
+ free (fname);
+ if (fd != -1)
+ close (fd);
+ if (base)
+ {
+ if (use_mmap)
+ munmap ((caddr_t) base, (size_t) wsize);
+ else
+ free (base);
+ }
+}
+
+int64_t
+Data_window::get_buf_size ()
+{
+ int64_t sz = MINBUFSIZE;
+ if (sz < basesize)
+ sz = basesize;
+ if (sz > fsize)
+ sz = fsize;
+ return sz;
+}
+
+int64_t
+Data_window::copy_to_file (int f, int64_t offset, int64_t size)
+{
+ long long bsz = get_buf_size ();
+ for (long long n = 0; n < size;)
+ {
+ long long sz = (bsz <= (size - n)) ? bsz : (size - n);
+ void *b = bind (offset + n, sz);
+ if (b == NULL)
+ return n;
+ long long len = write (f, b, sz);
+ if (len <= 0)
+ return n;
+ n += len;
+ }
+ return size;
+}
diff --git a/gprofng/src/Data_window.h b/gprofng/src/Data_window.h
new file mode 100644
index 00000000000..a3e98c01679
--- /dev/null
+++ b/gprofng/src/Data_window.h
@@ -0,0 +1,99 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _DATA_WINDOW_H
+#define _DATA_WINDOW_H
+
+// The Data_window class hiearchy is used to access raw data in the
+// experiment record.
+//
+// The Data_window base class implements a set of windows into a raw data file.
+// It is responsible for mapping and unmapping regions of the file as
+// requested by other levels inside of the DBE.
+
+#include "util.h"
+
+class Data_window
+{
+public:
+
+ // Span in data file
+ typedef struct
+ {
+ int64_t offset; // file offset
+ int64_t length; // span length
+ } Span;
+
+ Data_window (char *filename);
+ ~Data_window ();
+
+ // Return address of "offset" byte of window for "length" bytes.
+ // Return 0 on error or locked.
+ void *bind (Span *span, int64_t minSize);
+ void *bind (int64_t file_offset, int64_t minSize);
+ void *get_data (int64_t offset, int64_t size, void *datap);
+ int64_t get_buf_size ();
+ int64_t copy_to_file (int f, int64_t offset, int64_t size);
+
+ bool not_opened () { return !opened; }
+ off64_t get_fsize () { return fsize; }
+
+ template <typename Key_t> inline Key_t
+ get_align_val (Key_t *vp)
+ {
+ if (sizeof (Key_t) <= sizeof (int))
+ return *vp;
+ // 64-bit value can have a wrong alignment
+ Key_t val = (Key_t) 0;
+ uint32_t *p1 = (uint32_t *) vp;
+ uint32_t *p2 = (uint32_t*) (&val);
+ p2[0] = p1[0];
+ p2[1] = p1[1];
+ return val;
+ }
+
+ template <typename Key_t> inline Key_t
+ decode (Key_t &v)
+ {
+ Key_t val = get_align_val (&v);
+ if (need_swap_endian)
+ swapByteOrder (&val, sizeof (val));
+ return val;
+ }
+
+ bool need_swap_endian;
+ char *fname; // file name
+
+protected:
+ int fd; // file descriptor
+ bool mmap_on_file;
+
+private:
+ long page_size; // used in mmap()
+ bool use_mmap;
+ bool opened;
+ int64_t fsize; // file size
+ void *base; // current window
+ int64_t woffset; // offset of current window
+ int64_t wsize; // size of current window
+ int64_t basesize; // size of allocated window
+};
+
+#endif /* _DATA_WINDOW_H */
diff --git a/gprofng/src/Dbe.cc b/gprofng/src/Dbe.cc
new file mode 100644
index 00000000000..1a6e5214581
--- /dev/null
+++ b/gprofng/src/Dbe.cc
@@ -0,0 +1,10371 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <errno.h>
+#include <sys/types.h> // open, chmod
+#include <signal.h>
+#include <fcntl.h> // open
+#include <strings.h>
+#include <unistd.h>
+
+#include "util.h"
+#include "Histable.h"
+#include "DbeSession.h"
+#include "DbeView.h"
+#include "BaseMetric.h"
+#include "CallStack.h"
+#include "collctrl.h"
+#include "Command.h"
+#include "Dbe.h"
+#include "DbeApplication.h"
+#include "DefaultMap.h"
+#include "LoadObject.h"
+#include "Experiment.h"
+#include "IndexObject.h"
+#include "IOActivity.h"
+#include "PreviewExp.h"
+#include "Function.h"
+#include "Hist_data.h"
+#include "MetricList.h"
+#include "Module.h"
+#include "DataSpace.h"
+#include "MemorySpace.h"
+#include "DataObject.h"
+#include "MemObject.h"
+#include "Filter.h"
+#include "FilterSet.h"
+#include "FilterExp.h"
+#include "Sample.h"
+#include "Print.h"
+#include "StringBuilder.h"
+#include "dbe_types.h"
+#include "ExpGroup.h"
+#include "vec.h"
+#include "UserLabel.h"
+#include "DbeFile.h"
+#include "PathTree.h"
+
+// Data structures for managing the collector control info for Collection GUI
+static Coll_Ctrl *col_ctr = NULL;
+
+template<> VecType Vector<int>::type ()
+{
+ return VEC_INTEGER;
+}
+
+template<> VecType Vector<unsigned>::type ()
+{
+ return VEC_INTEGER;
+}
+
+template<> VecType Vector<char>::type ()
+{
+ return VEC_CHAR;
+}
+
+template<> VecType Vector<bool>::type ()
+{
+ return VEC_BOOL;
+}
+
+template<> VecType Vector<double>::type ()
+{
+ return VEC_DOUBLE;
+}
+
+template<> VecType Vector<long long>::type ()
+{
+ return VEC_LLONG;
+}
+
+template<> VecType Vector<uint64_t>::type ()
+{
+ return VEC_LLONG;
+}
+
+template<> VecType Vector<void*>::type ()
+{
+ return VEC_VOIDARR;
+}
+
+template<> VecType Vector<char*>::type ()
+{
+ return VEC_STRING;
+}
+
+template<> VecType Vector<Vector<int>*>::type ()
+{
+ return VEC_INTARR;
+}
+
+template<> VecType Vector<Vector<char*>*>::type ()
+{
+ return VEC_STRINGARR;
+}
+
+template<> VecType Vector<Vector<long long>*>::type ()
+{
+ return VEC_LLONGARR;
+}
+
+// gcc won't instantiate Vector<unsigned>::type() without it
+Vector<unsigned> __dummy_unsigned_vector;
+
+#define CASE_S(x) case x: return #x
+static const char *
+dsp_type_to_string (int t)
+{
+ switch (t)
+ {
+ CASE_S (DSP_FUNCTION);
+ CASE_S (DSP_LINE);
+ CASE_S (DSP_PC);
+ CASE_S (DSP_SOURCE);
+ CASE_S (DSP_DISASM);
+ CASE_S (DSP_SELF);
+ CASE_S (DSP_CALLER);
+ CASE_S (DSP_CALLEE);
+ CASE_S (DSP_CALLTREE);
+ CASE_S (DSP_TIMELINE);
+ CASE_S (DSP_STATIS);
+ CASE_S (DSP_EXP);
+ CASE_S (DSP_LEAKLIST);
+ CASE_S (DSP_MEMOBJ);
+ CASE_S (DSP_DATAOBJ);
+ CASE_S (DSP_DLAYOUT);
+ CASE_S (DSP_SRC_FILE);
+ CASE_S (DSP_IFREQ);
+ CASE_S (DSP_RACES);
+ CASE_S (DSP_INDXOBJ);
+ CASE_S (DSP_DUALSOURCE);
+ CASE_S (DSP_SOURCE_DISASM);
+ CASE_S (DSP_DEADLOCKS);
+ CASE_S (DSP_SOURCE_V2);
+ CASE_S (DSP_DISASM_V2);
+ CASE_S (DSP_IOACTIVITY);
+ CASE_S (DSP_OVERVIEW);
+ CASE_S (DSP_IOCALLSTACK);
+ CASE_S (DSP_HEAPCALLSTACK);
+ CASE_S (DSP_SAMPLE);
+ default:
+ break;
+ }
+ return NTXT ("ERROR");
+}
+
+enum
+{
+ COMPARE_BIT = 1 << 8,
+ MTYPE_MASK = (1 << 8) - 1,
+ GROUP_ID_SHIFT = 16
+};
+
+static DbeView *
+getDbeView (int dbevindex)
+{
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ return dbev;
+}
+
+
+Vector<char*> *
+dbeGetInitMessages ()
+{
+ // If any comments from the .rc files, send them to the GUI
+ Emsg *msg = theDbeApplication->fetch_comments ();
+ int size = 0;
+ while (msg != NULL)
+ {
+ size++;
+ msg = msg->next;
+ }
+
+ // Initialize Java String array
+ Vector<char*> *list = new Vector<char*>(size);
+ msg = theDbeApplication->fetch_comments ();
+ size = 0;
+ int i = 0;
+ while (msg != NULL)
+ {
+ char *str = msg->get_msg ();
+ list->store (i, dbe_strdup (str));
+ i++;
+ msg = msg->next;
+ }
+
+ // now delete the comments
+ theDbeApplication->delete_comments ();
+ return list;
+}
+
+Vector<char*> *
+dbeGetExpPreview (int /*dbevindex*/, char *exp_name)
+{
+ PreviewExp *preview = new PreviewExp ();
+ preview->experiment_open (exp_name);
+ preview->open_epilogue ();
+
+ // Initialize Java String array
+ Vector<char*> *info = preview->preview_info ();
+ int size = info->size ();
+ Vector<char*> *list = new Vector<char*>(size);
+
+ // Get experiment names
+ for (int i = 0; i < size; i++)
+ {
+ char *str = info->fetch (i);
+ if (str == NULL)
+ str = GTXT ("N/A");
+ list->store (i, dbe_strdup (str));
+ }
+ delete info;
+ delete preview;
+ return list;
+}
+
+char *
+dbeGetExpParams (int /*dbevindex*/, char *exp_name)
+{
+ PreviewExp *preview = new PreviewExp ();
+ preview->experiment_open (exp_name);
+
+ // Initialize Java String array
+ char *arg_list = dbe_strdup (preview->getArgList ());
+ delete preview;
+ return arg_list;
+}
+
+/**
+ * Gets File Attributes according to the specified format
+ * Supported formats:
+ * "/bin/ls -dl " - see 'man ls' for details
+ * @param filename
+ * @param format
+ * @return char * attributes
+ */
+char *
+dbeGetFileAttributes (const char *filename, const char *format)
+{
+ if (format != NULL)
+ {
+ if (!strcmp (format, NTXT ("/bin/ls -dl ")))
+ {
+ // A kind of "/bin/ls -dl " simulation
+ struct stat64 sbuf;
+ sbuf.st_mode = 0;
+ dbe_stat (filename, &sbuf);
+ if (S_IREAD & sbuf.st_mode)
+ { // Readable
+ if (S_ISDIR (sbuf.st_mode) != 0)
+ return dbe_sprintf (NTXT ("%s %s\n"), NTXT ("drwxrwxr-x"), filename);
+ else if (S_ISREG (sbuf.st_mode) != 0)
+ return dbe_sprintf (NTXT ("%s %s\n"), NTXT ("-rwxrwxr-x"), filename);
+ }
+ }
+ }
+ return dbe_strdup (NTXT (""));
+}
+
+/**
+ * Gets list of files for specified directory according to the specified format
+ * Supported formats:
+ * "/bin/ls -a" - see 'man ls' for details
+ * "/bin/ls -aF" - see 'man ls' for details
+ * @param dirname
+ * @param format
+ * @return char * files
+ */
+char *
+dbeGetFiles (const char *dirname, const char *format)
+{
+ if (format != NULL)
+ return dbe_read_dir (dirname, format);
+ return dbe_strdup (NTXT (""));
+}
+
+/**
+ * Creates the directory named by this full path name, including any
+ * necessary but nonexistent parent directories.
+ * @param dirname
+ * @return result
+ */
+char *
+dbeCreateDirectories (const char *dirname)
+{
+ if (dirname != NULL)
+ {
+ char *res = dbe_create_directories (dirname);
+ if (res != NULL)
+ return res;
+ }
+ return dbe_strdup (NTXT (""));
+}
+
+/**
+ * Deletes the file or the directory named by the specified path name.
+ * If this pathname denotes a directory, then the directory must be empty in order to be deleted.
+ * @param const char *pathname
+ * @return int result
+ */
+char *
+dbeDeleteFile (const char *pathname)
+{
+ // return unlink(pathname);
+ if (pathname != NULL)
+ {
+ char *res = dbe_delete_file (pathname);
+ if (res != NULL)
+ return res;
+ }
+ return dbe_strdup (NTXT (""));
+}
+
+/**
+ * Reads the file named by the specified path name.
+ * Temporary limitation: file should be "text only" and its size should be less than the 1 MB limit.
+ * If the operation was successful, the contents is in the first element, and second element is NULL.
+ * If the operation failed, then first element is NULL, and second element contains the error message.
+ * @param const char *pathname
+ * @return Vector<char*> *result
+ */
+Vector<char*> *
+dbeReadFile (const char *pathname)
+{
+ Vector<char*> *result = new Vector<char*>(2);
+ int limit = 1024 * 1024; // Temporary limit: 1 MB
+ char * contents = (char *) malloc (limit);
+ StringBuilder sb;
+ if (NULL == contents)
+ {
+ sb.sprintf (NTXT ("\nError: Cannot allocate %d bytes\n"), limit);
+ result->store (0, NULL);
+ result->store (1, sb.toString ()); // failure
+ return result;
+ }
+ int fd = open (pathname, O_RDONLY);
+ if (fd >= 0)
+ {
+ int64_t bytes = read_from_file (fd, contents, limit);
+ close (fd);
+ if (bytes >= limit)
+ {
+ sb.sprintf (NTXT ("\nError: file size is greater than the limit (%d bytes)\n"), limit);
+ result->store (0, NULL);
+ result->store (1, sb.toString ()); // failure
+ }
+ else
+ {
+ contents[bytes] = '\0'; // add string terminator
+ result->store (0, contents);
+ result->store (1, NULL); // success
+ }
+ }
+ else
+ {
+ sb.sprintf (NTXT ("\nError: Cannot open file %s\n"), pathname);
+ result->store (0, NULL);
+ result->store (1, sb.toString ()); // failure
+ free (contents);
+ }
+ return result;
+}
+
+/**
+ * Writes the file named by the specified path name.
+ * Temporary limitation: file should be "text only" and its size should be less than the 1 MB limit.
+ * If the operation failed, then -1 is returned.
+ * @param const char *pathname
+ * @return int result (written bytes)
+ */
+int
+dbeWriteFile (const char *pathname, const char *contents)
+{
+ int result = -1; // error
+ size_t len = 0;
+ if (NULL != contents)
+ len = strlen (contents);
+ size_t limit = 1024 * 1024; // Temporary limit: 1 MB
+ if (len > limit) return result;
+ unlink (pathname);
+ mode_t mode = S_IRUSR | S_IWUSR;
+ int fd = open (pathname, O_WRONLY | O_CREAT | O_TRUNC, mode);
+ if (fd >= 0)
+ { // replace file contents
+ chmod (pathname, /*S_IRUSR || S_IWUSR*/ 0600); // rw for owner only
+ ssize_t bytes = 0;
+ if (len > 0)
+ bytes = write (fd, contents, len);
+ close (fd);
+ result = (int) bytes;
+ }
+ return result;
+}
+
+/**
+ * Gets list of running processes according to the specified format
+ * Supported formats:
+ * "/bin/ps -ef" - see 'man ps' for details
+ * @param format
+ * @return char * processes
+ */
+char *
+dbeGetRunningProcesses (const char *format)
+{
+ if (format != NULL)
+ return dbe_get_processes (format);
+ return dbe_strdup (NTXT (""));
+}
+
+//
+// Open experiment
+//
+char *
+dbeOpenExperimentList (int /* dbevindex */, Vector<Vector<char*>*> *groups,
+ bool sessionRestart)
+{
+ if (sessionRestart)
+ dbeSession->reset ();
+ char *errstr;
+ // Open experiments
+ try
+ {
+ errstr = dbeSession->setExperimentsGroups (groups);
+ }
+ catch (ExperimentLoadCancelException *)
+ {
+ errstr = dbe_strdup (NTXT ("Experiment Load Cancelled"));
+ }
+ return errstr;
+}
+
+//
+// Drop experiments
+//
+char *
+dbeDropExperiment (int /* dbevindex */, Vector<int> *drop_index)
+{
+ for (int i = drop_index->size () - 1; i >= 0; i--)
+ {
+ char *ret = dbeSession->drop_experiment (drop_index->fetch (i));
+ if (ret != NULL)
+ return ret;
+ }
+ return NULL;
+}
+
+/**
+ * Read .er.rc file from the specified location
+ * @param path
+ * @return
+ */
+char *
+dbeReadRCFile (int dbevindex, char* path)
+{
+ DbeView *dbev = getDbeView (dbevindex);
+ char *err_msg = dbev->get_settings ()->read_rc (path);
+ return err_msg;
+}
+
+char *
+dbeSetExperimentsGroups (Vector<Vector<char*>*> *groups)
+{
+ int cmp_mode = dbeSession->get_settings ()->get_compare_mode ();
+ if (groups->size () < 2)
+ cmp_mode = CMP_DISABLE;
+ else if (cmp_mode == CMP_DISABLE)
+ cmp_mode = CMP_ENABLE;
+ for (int i = 0;; i++)
+ {
+ DbeView *dbev = dbeSession->getView (i);
+ if (dbev == NULL)
+ break;
+ dbev->get_settings ()->set_compare_mode (cmp_mode);
+ }
+ char *err_msg = dbeSession->setExperimentsGroups (groups);
+
+ // automatically load machine model if applicable
+ dbeDetectLoadMachineModel (0);
+ return err_msg;
+}
+
+Vector<Vector<char*>*> *
+dbeGetExperimensGroups ()
+{
+ Vector<Vector<char*>*> *grops = dbeSession->getExperimensGroups ();
+ return grops;
+}
+
+Vector<int> *
+dbeGetFounderExpId (Vector<int> *expIds)
+{
+ Vector<int> *ret = new Vector<int>(expIds->size ());
+ for (int i = 0; i < expIds->size (); i++)
+ {
+ int expId = expIds->fetch (i);
+ Experiment *exp = dbeSession->get_exp (expId);
+ if (exp != NULL)
+ {
+ int founderExpId = exp->getBaseFounder ()->getExpIdx ();
+ ret->store (i, founderExpId);
+ }
+ else
+ ret->store (i, -1);
+ }
+ return ret;
+}
+
+Vector<int> *
+dbeGetUserExpId (Vector<int> *expIds)
+{
+ // returns "User Visible" ids used for EXPID filters and timeline processes
+ Vector<int> *ret = new Vector<int>(expIds->size ());
+ for (int i = 0; i < expIds->size (); i++)
+ {
+ int expId = expIds->fetch (i);
+ Experiment *exp = dbeSession->get_exp (expId);
+ if (exp != NULL)
+ {
+ int userExpId = exp->getUserExpId ();
+ ret->store (i, userExpId);
+ }
+ else
+ ret->store (i, -1);
+ }
+ return ret;
+}
+
+//
+// Get experiment groupid
+//
+Vector<int> *
+dbeGetExpGroupId (Vector<int> *expIds)
+{
+ Vector<int> *ret = new Vector<int>(expIds->size ());
+ for (int i = 0; i < expIds->size (); i++)
+ {
+ int expId = expIds->fetch (i);
+ Experiment *exp = dbeSession->get_exp (expId);
+ if (exp != NULL)
+ {
+ int gId = exp->groupId;
+ ret->store (i, gId);
+ }
+ else
+ ret->store (i, -1);
+ }
+ return ret;
+}
+
+Vector<char*> *
+dbeGetExpsProperty (const char *prop_name)
+{
+ long nexps = dbeSession->nexps ();
+ if (prop_name == NULL || nexps == 0)
+ return NULL;
+ Vector<char*> *list = new Vector<char*>(nexps);
+ StringBuilder sb;
+ int empty = 1;
+ int prop = 99;
+ if (strcasecmp (prop_name, NTXT ("ERRORS")) == 0)
+ prop = 1;
+ else if (strcasecmp (prop_name, NTXT ("WARNINGS")) == 0)
+ prop = 2;
+ if (prop < 3)
+ {
+ for (long i = 0; i < nexps; i++)
+ {
+ Experiment *exp = dbeSession->get_exp (i);
+ char *nm = exp->get_expt_name ();
+ sb.setLength (0);
+ for (Emsg *emsg = (prop == 1) ? exp->fetch_errors () : exp->fetch_warnings ();
+ emsg; emsg = emsg->next)
+ sb.appendf (NTXT ("%s: %s\n"), STR (nm), STR (emsg->get_msg ()));
+ char *s = NULL;
+ if (sb.length () > 0)
+ {
+ s = sb.toString ();
+ empty = 0;
+ }
+ list->append (s);
+ }
+ }
+ if (empty)
+ {
+ delete list;
+ list = NULL;
+ }
+ return list;
+}
+
+//
+// Get experiment names
+//
+Vector<char*> *
+dbeGetExpName (int /*dbevindex*/)
+{
+ int size = dbeSession->nexps ();
+ if (size == 0)
+ return NULL;
+ // Initialize Java String array
+ Vector<char*> *list = new Vector<char*>(size);
+
+ // Get experiment names
+ for (int i = 0; i < size; i++)
+ {
+ Experiment *texp = dbeSession->get_exp (i);
+ char *buf = dbe_sprintf (NTXT ("%s [%s]"), texp->get_expt_name (),
+ texp->utargname != NULL ? texp->utargname : GTXT ("(unknown)"));
+ list->store (i, buf);
+ }
+ return list;
+}
+
+//
+// Get experiment state
+//
+Vector<int> *
+dbeGetExpState (int /* dbevindex */)
+{
+ int size = dbeSession->nexps ();
+ if (size == 0)
+ return NULL;
+ // Initialize Java array
+ Vector<int> *state = new Vector<int>(size);
+
+ // Get experiment state
+ for (int i = 0; i < size; i++)
+ {
+ Experiment *exp = dbeSession->get_exp (i);
+ int set = EXP_SUCCESS;
+ if (exp->get_status () == Experiment::FAILURE)
+ set |= EXP_FAILURE;
+ if (exp->get_status () == Experiment::INCOMPLETE)
+ set |= EXP_INCOMPLETE;
+ if (exp->broken)
+ set |= EXP_BROKEN;
+ if (exp->obsolete)
+ set |= EXP_OBSOLETE;
+ state->store (i, set);
+ }
+ return state;
+}
+
+//
+// Get enabled experiment indices
+//
+Vector<bool> *
+dbeGetExpEnable (int dbevindex)
+{
+ DbeView *dbev = getDbeView (dbevindex);
+ int size = dbeSession->nexps ();
+ if (dbev == NULL || size == 0)
+ return NULL;
+
+ // Get enabled experiment
+ Vector<bool> *enable = new Vector<bool>(size);
+ for (int i = 0; i < size; i++)
+ {
+ bool val = dbev->get_exp_enable (i) && !dbeSession->get_exp (i)->broken;
+ enable->store (i, val);
+ }
+ return enable;
+}
+
+//
+// Get enabled experiment indices
+//
+bool
+dbeSetExpEnable (int dbevindex, Vector<bool> *enable)
+{
+ DbeView *dbev = getDbeView (dbevindex);
+ bool ret = false;
+ int size = dbeSession->nexps ();
+ if (dbev == NULL || size == 0)
+ return false;
+
+ // set enable, as per input vector
+ for (int i = 0; i < size; i++)
+ if (!dbeSession->get_exp (i)->broken
+ && dbev->get_exp_enable (i) != enable->fetch (i))
+ {
+ dbev->set_exp_enable (i, enable->fetch (i));
+ ret = true;
+ }
+ return ret;
+}
+
+//
+// Get experiment info
+//
+Vector<char*> *
+dbeGetExpInfo (int dbevindex)
+{
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ int size = dbeSession->nexps ();
+ if (size == 0)
+ return NULL;
+
+ // Initialize Java String array
+ Vector<char*> *list = new Vector<char*>(size * 2 + 1);
+
+ // Get experiment names
+ Vector<LoadObject*> *text_segments = dbeSession->get_text_segments ();
+ char *msg = pr_load_objects (text_segments, NTXT (""));
+ delete text_segments;
+ list->store (0, msg);
+ int k = 1;
+ for (int i = 0; i < size; i++)
+ {
+ Experiment *exp = dbeSession->get_exp (i);
+ char *msg0 = pr_mesgs (exp->fetch_notes (), NTXT (""), NTXT (""));
+ char *msg1 = pr_mesgs (exp->fetch_errors (), GTXT ("No errors\n"), NTXT (""));
+ char *msg2 = pr_mesgs (exp->fetch_warnings (), GTXT ("No warnings\n"), NTXT (""));
+ char *msg3 = pr_mesgs (exp->fetch_comments (), NTXT (""), NTXT (""));
+ char *msg4 = pr_mesgs (exp->fetch_pprocq (), NTXT (""), NTXT (""));
+ msg = dbe_sprintf (NTXT ("%s%s%s%s"), msg1, msg2, msg3, msg4);
+ list->store (k++, msg0);
+ list->store (k++, msg);
+ free (msg1);
+ free (msg2);
+ free (msg3);
+ free (msg4);
+ }
+ return list;
+}
+
+bool
+dbeGetViewModeEnable ()
+{
+ return dbeSession->has_ompavail () || dbeSession->has_java ();
+}
+
+bool
+dbeGetJavaEnable ()
+{
+ return dbeSession->has_java ();
+}
+
+int
+dbeUpdateNotes (int dbevindex, int exp_id, int type, char* text, bool handle_file)
+{
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ int size = dbeSession->nexps ();
+ if (size == 0)
+ return -1;
+ Experiment *exp = dbeSession->get_exp (exp_id);
+ return (type == 0) ? exp->save_notes (text, handle_file) : exp->delete_notes (handle_file);
+}
+
+//
+// Get load object names
+//
+Vector<char*> *
+dbeGetLoadObjectName (int /* dbevindex */)
+{
+ Vector<LoadObject*> *lobjs = dbeSession->get_text_segments ();
+ int size = lobjs->size ();
+
+ // Initialize Java String array
+ Vector<char*> *list = new Vector<char*>(size);
+
+ // Get load object names
+ LoadObject *lo;
+ int index;
+ Vec_loop (LoadObject*, lobjs, index, lo)
+ {
+ list->store (index, dbe_strdup (lo->get_name ()));
+ }
+ delete lobjs;
+ return list;
+}
+
+// XXX Will use later when order has to be passed too,
+// Get complete List of tabs
+//
+Vector<void*> *
+dbeGetTabList (int /* dbevindex */)
+{
+ //DbeView *dbev = getDbeView (dbevindex);
+ //Vector<void*> *tabs = dbeSession->get_TabList();
+ //return tabs;
+ return NULL;
+}
+
+//
+// Returns list of available tabs
+//
+Vector<void*> *
+dbeGetTabListInfo (int dbevindex)
+{
+ int index;
+ DispTab *dsptab;
+ DbeView *dbev = getDbeView (dbevindex);
+
+ // make sure the tabs are initialized properly
+ dbev->get_settings ()->proc_tabs (theDbeApplication->rdtMode);
+ Vector<DispTab*> *tabs = dbev->get_TabList ();
+
+ // Get number of available tabs
+ int size = 0;
+ Vec_loop (DispTab*, tabs, index, dsptab)
+ {
+ if (!dsptab->available)
+ continue;
+ size++;
+ }
+ Vector<void*> *data = new Vector<void*>(2);
+ Vector<int> *typelist = new Vector<int>(size);
+ Vector<char*> *cmdlist = new Vector<char*>(size);
+ Vector<int> *ordlist = new Vector<int>(size);
+
+ // Build list of avaliable tabs
+ int i = 0;
+
+ Vec_loop (DispTab*, tabs, index, dsptab)
+ {
+ if (!dsptab->available)
+ continue;
+ typelist->store (i, dsptab->type);
+ cmdlist->store (i, dbe_strdup (Command::get_cmd_str (dsptab->cmdtoken)));
+ ordlist->store (i, dsptab->order);
+ i++;
+ }
+ data->store (0, typelist);
+ data->store (1, cmdlist);
+ data->store (2, ordlist);
+ return data;
+}
+
+// Return visibility state for all available tabs
+//
+Vector<bool> *
+dbeGetTabSelectionState (int dbevindex)
+{
+ int index;
+ DispTab *dsptab;
+ DbeView *dbev = getDbeView (dbevindex);
+ Vector<DispTab*> *tabs = dbev->get_TabList ();
+
+ // Get number of available tabs
+ int size = 0;
+ Vec_loop (DispTab*, tabs, index, dsptab)
+ {
+ if (!dsptab->available)
+ continue;
+ size++;
+ }
+ Vector<bool> *states = new Vector<bool>(size);
+
+ // Get visibility bit for all available tabs
+ int i = 0;
+ Vec_loop (DispTab*, tabs, index, dsptab)
+ {
+ if (!dsptab->available)
+ continue;
+ states->store (i++, dsptab->visible);
+ }
+ return states;
+}
+
+// Set visibility bit for a tab
+void
+dbeSetTabSelectionState (int dbevindex, Vector<bool> *selected)
+{
+ int index;
+ DispTab *dsptab;
+ DbeView *dbev = getDbeView (dbevindex);
+ Vector<DispTab*> *tabs = dbev->get_TabList ();
+ int i = 0;
+ Vec_loop (DispTab*, tabs, index, dsptab)
+ {
+ if (!dsptab->available)
+ continue;
+ dsptab->visible = selected->fetch (i++);
+ }
+}
+
+// Return visibility state for all available MemObj tabs
+Vector<bool> *
+dbeGetMemTabSelectionState (int dbevindex)
+{
+ int index;
+ bool dsptab;
+ DbeView *dbev = getDbeView (dbevindex);
+ Vector<bool> *memtabs = dbev->get_MemTabState ();
+
+ // set the output vector
+ int size = memtabs->size ();
+ Vector<bool> *states = new Vector<bool>(size);
+
+ // Get visibility bit for all available tabs
+ int i = 0;
+ Vec_loop (bool, memtabs, index, dsptab)
+ {
+ states->store (i++, dsptab);
+ }
+ return states;
+}
+
+// Set visibility bit for a memory tab
+//
+void
+dbeSetMemTabSelectionState (int dbevindex, Vector<bool> *selected)
+{
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ dbev->set_MemTabState (selected);
+}
+
+// Return visibility state for all available index tabs
+Vector<bool> *
+dbeGetIndxTabSelectionState (int dbevindex)
+{
+ int index;
+ bool dsptab;
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ Vector<bool> *indxtabs = dbev->get_IndxTabState ();
+
+ // set the output vector
+ int size = indxtabs->size ();
+ Vector<bool> *states = new Vector<bool>(size);
+
+ // Get visibility bit for all available tabs
+ int i = 0;
+ Vec_loop (bool, indxtabs, index, dsptab)
+ {
+ states->store (i++, dsptab);
+ }
+ return states;
+}
+
+// Set visibility bit for a index tab
+void
+dbeSetIndxTabSelectionState (int dbevindex, Vector<bool> *selected)
+{
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ dbev->set_IndxTabState (selected);
+}
+
+//
+// Get search path
+//
+Vector<char*> *
+dbeGetSearchPath (int /*dbevindex*/)
+{
+ Vector<char*> *path = dbeSession->get_search_path ();
+ int size = path->size ();
+ Vector<char*> *list = new Vector<char*>(size);
+ int index;
+ char *name;
+ Vec_loop (char*, path, index, name)
+ {
+ list->store (index, dbe_strdup (name));
+ }
+ return list;
+}
+
+//
+// Set search path
+//
+void
+dbeSetSearchPath (int /*dbevindex*/, Vector<char*> *path)
+{
+ dbeSession->set_search_path (path, true);
+ return;
+}
+
+//
+// Get pathmaps
+//
+Vector<void*> *
+dbeGetPathmaps (int /*dbevindex*/)
+{
+ int index;
+ pathmap_t *pthmap;
+ Vector<pathmap_t*> *path = dbeSession->get_pathmaps ();
+ int size = path->size ();
+ Vector<void*> *data = new Vector<void*>(2);
+ Vector<char*> *oldlist = new Vector<char*>(size);
+ Vector<char*> *newlist = new Vector<char*>(size);
+
+ int i = 0;
+ Vec_loop (pathmap_t*, path, index, pthmap)
+ {
+ oldlist->store (i, dbe_strdup (pthmap->old_prefix));
+ newlist->store (i, dbe_strdup (pthmap->new_prefix));
+ i++;
+ }
+ data->store (0, oldlist);
+ data->store (1, newlist);
+ return data;
+} // dbeGetPathmaps
+
+char *
+dbeSetPathmaps (Vector<char*> *from, Vector<char*> *to)
+{
+ if (from == NULL || to == NULL || from->size () != to->size ())
+ return dbe_strdup ("dbeSetPathmaps: size of 'from' does not match for size of 'to'\n");
+ Vector<pathmap_t*> *newPath = new Vector<pathmap_t*>(from->size ());
+ for (int i = 0, sz = from->size (); i < sz; i++)
+ {
+ char *err = Settings::add_pathmap (newPath, from->get (i), to->get (i));
+ if (err)
+ {
+ newPath->destroy ();
+ delete newPath;
+ return err;
+ }
+ }
+ dbeSession->set_pathmaps (newPath);
+ return NULL;
+}
+
+//
+// Add pathmap
+char *
+dbeAddPathmap (int /* dbevindex */, char *from, char *to)
+{
+ Vector<pathmap_t*> *pmp = dbeSession->get_pathmaps ();
+ char *err = Settings::add_pathmap (pmp, from, to);
+ return err;
+}
+
+//
+// Get error/warning string of data
+char *
+dbeGetMsg (int dbevindex, int type)
+{
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ char *msgstr = NULL;
+ if (type == ERROR_MSG)
+ msgstr = dbev->get_error_msg ();
+ else if (type == WARNING_MSG)
+ msgstr = dbev->get_warning_msg ();
+ else if (type == PSTAT_MSG)
+ msgstr = dbev->get_processor_msg (PSTAT_MSG);
+ else if (type == PWARN_MSG)
+ msgstr = dbev->get_processor_msg (PWARN_MSG);
+ return msgstr ? dbe_strdup (msgstr) : NULL;
+}
+
+// Create a DbeView, given new index, and index of view to clone
+int
+dbeInitView (int id, int cloneid)
+{
+ return dbeSession->createView (id, cloneid);
+}
+
+
+// Delete a DbeView
+void
+dbeDeleteView (int dbevindex)
+{
+ dbeSession->dropView (dbevindex);
+ return;
+} // dbeDeleteView
+
+MetricList *
+dbeGetMetricListV2 (int dbevindex, MetricType mtype,
+ Vector<int> *type, Vector<int> *subtype, Vector<bool> *sort,
+ Vector<int> *vis, Vector<char*> *cmd,
+ Vector<char*> *expr_spec, Vector<char*> *legends)
+{
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ MetricList *mlist = new MetricList (mtype);
+ for (int i = 0, msize = type->size (); i < msize; i++)
+ {
+ BaseMetric *bm = dbev->register_metric_expr ((BaseMetric::Type) type->fetch (i),
+ cmd->fetch (i),
+ expr_spec->fetch (i));
+ Metric *m = new Metric (bm, (Metric::SubType) subtype->fetch (i));
+ m->set_raw_visbits (vis->fetch (i));
+ if (m->legend == NULL)
+ m->legend = dbe_strdup (legends->fetch (i));
+ mlist->append (m);
+ if (sort->fetch (i))
+ {
+ mlist->set_sort_ref_index (i);
+ }
+ }
+ return mlist;
+}
+
+static Vector<void*> *
+dbeGetMetricList (MetricList *mlist)
+{
+ int clock_val = dbeSession->get_clock (-1);
+ Vector<Metric*> *items = mlist->get_items ();
+ int size = items->size ();
+
+ Vector<int> *type = new Vector<int>(size);
+ Vector<int> *subtype = new Vector<int>(size);
+ Vector<int> *clock = new Vector<int>(size);
+ Vector<int> *flavors = new Vector<int>(size);
+ Vector<int> *vis = new Vector<int>(size);
+ Vector<bool> *sorted = new Vector<bool>(size);
+ Vector<int> *value_styles = new Vector<int>(size);
+ Vector<char*> *aux = new Vector<char*>(size);
+ Vector<char*> *name = new Vector<char*>(size);
+ Vector<char*> *abbr = new Vector<char*>(size);
+ Vector<char*> *comd = new Vector<char*>(size);
+ Vector<char*> *unit = new Vector<char*>(size);
+ Vector<char*> *user_name = new Vector<char*>(size);
+ Vector<char*> *expr_spec = new Vector<char*>(size);
+ Vector<char*> *legend = new Vector<char*>(size);
+ Vector<int> *valtype = new Vector<int>(size);
+ Vector<char*> *data_type_name = new Vector<char*>(size);
+ Vector<char*> *data_type_uname = new Vector<char*>(size);
+ Vector<char*> *short_desc = new Vector<char*>(size);
+
+ int sort_index = mlist->get_sort_ref_index ();
+ // Fill metric elements
+ for (int i = 0; i < size; i++)
+ {
+ Metric *m = items->fetch (i);
+ type->append (m->get_type ());
+ subtype->append (m->get_subtype ());
+ flavors->append (m->get_flavors ());
+ abbr->append (dbe_strdup (m->get_abbr ()));
+ char *s = m->get_abbr_unit ();
+ if ((m->get_visbits () & VAL_RATIO) != 0)
+ s = NULL;
+ unit->append (dbe_strdup (s ? s : NTXT ("")));
+ value_styles->append (m->get_value_styles ());
+ vis->append (m->get_visbits ());
+ sorted->append (i == sort_index);
+ clock->append (m->get_type () == Metric::HWCNTR ? clock_val
+ : m->get_clock_unit ());
+ aux->append (dbe_strdup (m->get_aux ()));
+ name->append (dbe_strdup (m->get_name ()));
+ comd->append (dbe_strdup (m->get_cmd ()));
+ user_name->append (dbe_strdup (m->get_username ()));
+ expr_spec->append (dbe_strdup (m->get_expr_spec ()));
+ legend->append (dbe_strdup (m->legend));
+ valtype->append (m->get_vtype2 ());
+
+ char* _data_type_name = NULL;
+ char* _data_type_uname = NULL;
+ int data_type = m->get_packet_type ();
+ if (data_type >= 0 && data_type < DATA_LAST)
+ {
+ _data_type_name = dbe_strdup (get_prof_data_type_name (data_type));
+ _data_type_uname = dbe_strdup (get_prof_data_type_uname (data_type));
+ }
+ data_type_name->append (_data_type_name);
+ data_type_uname->append (_data_type_uname);
+
+ char* _short_desc = NULL;
+ if (m->get_type () == Metric::HWCNTR)
+ {
+ Hwcentry * hwctr = m->get_hw_ctr ();
+ if (hwctr)
+ _short_desc = dbe_strdup (hwctr->short_desc);
+ }
+ short_desc->append (_short_desc);
+ }
+
+ // Set Java array
+ Vector<void*> *data = new Vector<void*>(16);
+ data->append (type);
+ data->append (subtype);
+ data->append (clock);
+ data->append (flavors);
+ data->append (value_styles);
+ data->append (user_name);
+ data->append (expr_spec);
+ data->append (aux);
+ data->append (name);
+ data->append (abbr);
+ data->append (comd);
+ data->append (unit);
+ data->append (vis);
+ data->append (sorted);
+ data->append (legend);
+ data->append (valtype);
+ data->append (data_type_name);
+ data->append (data_type_uname);
+ data->append (short_desc);
+ return data;
+}
+
+Vector<void*> *
+dbeGetRefMetricsV2 ()
+{
+ MetricList *mlist = new MetricList (MET_NORMAL);
+ Vector<BaseMetric*> *base_metrics = dbeSession->get_base_reg_metrics ();
+ for (long i = 0, sz = base_metrics->size (); i < sz; i++)
+ {
+ BaseMetric *bm = base_metrics->fetch (i);
+ Metric *m;
+ if (bm->get_flavors () & Metric::EXCLUSIVE)
+ {
+ m = new Metric (bm, Metric::EXCLUSIVE);
+ m->enable_all_visbits ();
+ mlist->append (m);
+ }
+ else if (bm->get_flavors () & BaseMetric::STATIC)
+ {
+ m = new Metric (bm, BaseMetric::STATIC);
+ m->enable_all_visbits ();
+ mlist->append (m);
+ }
+ }
+ Vector<void*> *data = dbeGetMetricList (mlist);
+ delete mlist;
+ return data;
+}
+
+Vector<void*> *
+dbeGetCurMetricsV2 (int dbevindex, MetricType mtype)
+{
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ MetricList *mlist = dbev->get_metric_list (mtype);
+ Vector<void*> *data = dbeGetMetricList (mlist);
+ return data;
+}
+
+// YXXX we should refactor Metrics/BaseMetrics so that it no longer uses VAL_VALUE to enable time.
+static int
+convert_visbits_to_gui_checkbox_bits (BaseMetric *bm, const int visbits)
+{
+ // The purpose of this function is to handle the following case:
+ // When bm->get_value_styles() supports VAL_TIMEVAL but not VAL_VALUE
+ // Metric and BaseMetric use (visbits&VAL_VALUE) to enable time.
+ // However, the Overview expects the VAL_TIMEVAL bit to enable time.
+ // Inputs: visbits as returned by BaseMetric->get_default_visbits();
+ // Returns: valuebits, as used for checks in GUI checkboxes
+ int valuebits = visbits;
+ const int value_styles = bm->get_value_styles ();
+ if ((value_styles & VAL_TIMEVAL) && // supports time
+ !(value_styles & VAL_VALUE))
+ { // but not value
+ unsigned mask = ~(VAL_VALUE | VAL_TIMEVAL);
+ valuebits = (unsigned) valuebits & mask; // clear bits
+ if (visbits & VAL_VALUE)
+ valuebits |= VAL_TIMEVAL; // set VAL_TIMEVAL
+ if (visbits & VAL_TIMEVAL)
+ valuebits |= VAL_TIMEVAL; // weird, this should never happen.
+ }
+ return valuebits;
+}
+
+static Vector<void*> *
+dbeGetMetricTreeNode (BaseMetricTreeNode* curr, MetricList *mlist,
+ bool include_unregistered, bool has_clock_profiling_data)
+{
+ Vector<void*> *data = new Vector<void*>(2);
+
+ // ----- fields
+ Vector<void*> *fields = new Vector<void*>();
+ Vector<char*> *name = new Vector<char*>(1);
+ Vector<char*> *username = new Vector<char*>(1);
+ Vector<char*> *description = new Vector<char*>(1);
+ Vector<int> * flavors = new Vector<int>(1);
+ Vector<int> * vtype = new Vector<int>(1);
+ Vector<int> * vstyles_capable = new Vector<int>(1);
+
+ // Specifies which default styles should be enabled when a metric is enabled.
+ // Also, specifies if metric should start enabled
+ Vector<int> *vstyles_e_defaults = new Vector<int>(1);
+ Vector<int> *vstyles_i_defaults = new Vector<int>(1);
+ Vector<bool> *registered = new Vector<bool>(1);
+ Vector<bool> *aggregation = new Vector<bool>(1);
+ Vector<bool> *has_value = new Vector<bool>(1);
+ Vector<char*> *unit = new Vector<char*>(1);
+ Vector<char*> *unit_uname = new Vector<char*>(1);
+
+ char *_name = NULL;
+ char *_username = NULL;
+ char *_description = dbe_strdup (curr->get_description ());
+
+ // BaseMetric fields
+ int _flavors = 0; // SubType bitmask: (e.g. EXCLUSIVE)
+ int _vtype = 0; // ValueTag: e.g. VT_INT, VT_FLOAT, ...
+ int _vstyles_capable = 0; // ValueType bitmask, e.g. VAL_TIMEVAL
+ int _vstyles_e_default_values = 0; // default visibility settings, exclusive/static
+ int _vstyles_i_derault_values = 0; // default visibility settings, inclusive
+ bool _registered = curr->is_registered ()
+ || curr->get_num_registered_descendents () > 0;
+ bool _aggregation = curr->is_composite_metric ()
+ && curr->get_num_registered_descendents () > 0;
+ bool _has_value = false; //not used yet; for nodes that don't have metrics
+ char *_unit = NULL;
+ char *_unit_uname = NULL;
+
+ BaseMetric *bm = curr->get_BaseMetric ();
+ if (bm)
+ {
+ _name = dbe_strdup (bm->get_cmd ());
+ _username = dbe_strdup (bm->get_username ());
+ if (!include_unregistered && !curr->is_registered ())
+ abort ();
+ _flavors = bm->get_flavors ();
+ _vtype = bm->get_vtype ();
+ _vstyles_capable = bm->get_value_styles ();
+ int e_visbits = bm->get_default_visbits (BaseMetric::EXCLUSIVE);
+ int i_visbits = bm->get_default_visbits (BaseMetric::INCLUSIVE);
+ _vstyles_e_default_values = convert_visbits_to_gui_checkbox_bits (bm, e_visbits);
+ _vstyles_i_derault_values = convert_visbits_to_gui_checkbox_bits (bm, i_visbits);
+ // not all metrics shown in er_print cmd line should be selected in the GUI at startup:
+ if (has_clock_profiling_data && bm->get_hw_ctr ())
+ {
+ bool hide = true; // by default, hide HWCs
+ if (dbe_strcmp (bm->get_hw_ctr ()->name, NTXT ("c_stalls")) == 0 ||
+ dbe_strcmp (bm->get_hw_ctr ()->name, NTXT ("K_c_stalls")) == 0)
+ {
+ bool is_time = (bm->get_value_styles () & VAL_TIMEVAL) != 0;
+ if (is_time)
+ // By default, show time variant of c_stalls
+ hide = false;
+ }
+ if (hide)
+ {
+ _vstyles_e_default_values |= VAL_HIDE_ALL;
+ _vstyles_i_derault_values |= VAL_HIDE_ALL;
+ }
+ }
+ }
+ else
+ {
+ // not a base metric
+ _name = dbe_strdup (curr->get_name ());
+ _username = dbe_strdup (curr->get_user_name ());
+ if (curr->get_unit ())
+ { // represents a value
+ _has_value = true;
+ _unit = dbe_strdup (curr->get_unit ());
+ _unit_uname = dbe_strdup (curr->get_unit_uname ());
+ }
+ }
+ name->append (_name); // unique id string (dmetrics cmd)
+ username->append (_username); // user-visible name
+ description->append (_description);
+ flavors->append (_flavors); // SubType bitmask: (e.g. EXCLUSIVE)
+ vtype->append (_vtype); // ValueTag: e.g. VT_INT, VT_FLOAT, ...
+ vstyles_capable->append (_vstyles_capable); // ValueType bitmask, e.g. VAL_TIMEVAL
+ vstyles_e_defaults->append (_vstyles_e_default_values);
+ vstyles_i_defaults->append (_vstyles_i_derault_values);
+ registered->append (_registered); // is a "live" metric
+ aggregation->append (_aggregation); // value derived from children nodes
+ has_value->append (_has_value); // value generated from other source
+ unit->append (_unit); // See BaseMetric.h, e.g. UNIT_SECONDS
+ unit_uname->append (_unit_uname); //See BaseMetric.h,
+
+ fields->append (name);
+ fields->append (username);
+ fields->append (description);
+ fields->append (flavors);
+ fields->append (vtype);
+ fields->append (vstyles_capable);
+ fields->append (vstyles_e_defaults);
+ fields->append (vstyles_i_defaults);
+ fields->append (registered);
+ fields->append (aggregation);
+ fields->append (has_value);
+ fields->append (unit);
+ fields->append (unit_uname);
+ data->append (fields);
+
+ // ----- children
+ Vector<BaseMetricTreeNode*> *children = curr->get_children ();
+ int num_children = children->size ();
+ Vector<void*> *children_list = new Vector<void*>(num_children);
+ BaseMetricTreeNode *child_node;
+ int index;
+
+ Vec_loop (BaseMetricTreeNode*, children, index, child_node)
+ {
+ if (include_unregistered /* fetch everything */
+ || child_node->is_registered ()
+ || child_node->get_num_registered_descendents () > 0)
+ {
+ //Special case for metrics that aren't registered
+ // but have registered children
+ // Linux example: Total Time is unregistered, CPU Time is registered
+ if (!include_unregistered && /* not fetching everything */
+ !child_node->is_registered () &&
+ (child_node->get_BaseMetric () != NULL ||
+ child_node->is_composite_metric ()))
+ {
+ Vector<BaseMetricTreeNode*> *registered_descendents =
+ new Vector<BaseMetricTreeNode*>();
+ child_node->get_nearest_registered_descendents (registered_descendents);
+ int idx2;
+ BaseMetricTreeNode*desc_node;
+ Vec_loop (BaseMetricTreeNode*, registered_descendents, idx2, desc_node)
+ {
+ Vector<void*> *desc_data;
+ desc_data = dbeGetMetricTreeNode (desc_node, mlist,
+ include_unregistered, has_clock_profiling_data);
+ children_list->append (desc_data);
+ }
+ delete registered_descendents;
+ continue;
+ }
+ Vector<void*> *child_data;
+ child_data = dbeGetMetricTreeNode (child_node, mlist,
+ include_unregistered, has_clock_profiling_data);
+ children_list->append (child_data);
+ }
+ }
+ data->append (children_list);
+ return data;
+}
+
+Vector<void*> *
+dbeGetRefMetricTree (int dbevindex, bool include_unregistered)
+{
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ MetricList *mlist = dbev->get_metric_list (MET_NORMAL);
+ bool has_clock_profiling_data = false;
+ for (long i = 0, sz = mlist->get_items ()->size (); i < sz; i++)
+ {
+ Metric *m = mlist->get_items ()->fetch (i);
+ if (m->get_packet_type () == DATA_CLOCK)
+ {
+ has_clock_profiling_data = true;
+ break;
+ }
+ }
+ BaseMetricTreeNode *curr = dbeSession->get_reg_metrics_tree ();
+ return dbeGetMetricTreeNode (curr, mlist, include_unregistered, has_clock_profiling_data);
+}
+
+static Vector<void*> *
+dbeGetTableDataV2Data (DbeView *dbev, Hist_data *data);
+
+static Vector<void*> *dbeGetTableDataOneColumn (Hist_data *data, int met_ind);
+static Vector<void*> *
+dbeGetTableDataOneColumn (DbeView *dbev, Vector<Hist_data::HistItem*> *data,
+ ValueTag vtype, int metricColumnNumber);
+
+static hrtime_t
+dbeCalcGroupDuration (int grInd)
+{
+ int thisGroupSize = 1;
+ hrtime_t max_time = 0;
+ Experiment *exp;
+ if (dbeSession->expGroups->size () > 0)
+ {
+ ExpGroup *grp = dbeSession->expGroups->fetch (grInd);
+ thisGroupSize = grp->exps->size ();
+ for (int ii = 0; ii < thisGroupSize; ii++)
+ {
+ exp = grp->exps->fetch (ii);
+ Vector<DataDescriptor*> *ddscr = exp->getDataDescriptors ();
+ delete ddscr;// getDataDescriptors() forces reading of experiment data
+ if (exp != NULL)
+ {
+ hrtime_t tot_time = exp->getLastEvent () - exp->getStartTime ()
+ + exp->getRelativeStartTime ();
+ if (max_time < tot_time)
+ max_time = tot_time;
+ }
+ }
+ }
+ else
+ {
+ exp = dbeSession->get_exp (0);
+ if (exp != NULL)
+ max_time = exp->getLastEvent () - exp->getStartTime ();
+ }
+ return max_time; //nanoseconds
+}
+
+static hrtime_t
+dbeCalcGroupGCDuration (int grInd)
+{
+ int thisGroupSize = 1;
+ hrtime_t tot_time = 0;
+ Experiment *exp;
+ if (dbeSession->expGroups->size () > 0)
+ {
+ ExpGroup *grp = dbeSession->expGroups->fetch (grInd);
+ thisGroupSize = grp->exps->size ();
+ for (int ii = 0; ii < thisGroupSize; ii++)
+ {
+ exp = grp->exps->fetch (ii);
+ Vector<DataDescriptor*> *ddscr = exp->getDataDescriptors ();
+ delete ddscr; // getDataDescriptors() forces reading of experiment data
+ if (exp != NULL)
+ tot_time += exp->getGCDuration ();
+ }
+ }
+ else
+ {
+ exp = dbeSession->get_exp (0);
+ if (exp != NULL)
+ tot_time = exp->getGCDuration ();
+ }
+ return tot_time; //nanoseconds
+}
+
+Vector<void*> *
+dbeGetRefMetricTreeValues (int dbevindex, Vector<char *> *metric_cmds,
+ Vector<char *> *non_metric_cmds)
+{
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ // valueTable will have N "columns" of values, where N is the number of
+ // requested metrics and non-metrics.
+ // Each column will be a vector with M "rows", where M is the number of
+ // compare groups.
+ // highlightTable mirrors the structure of valueTable. Each cell indicates
+ // if the corresponding valueTable cell is "hot" (interesting)
+ int numMetrics = metric_cmds->size ();
+ int numNonMetrics = non_metric_cmds->size ();
+ int totalColumns = numMetrics + numNonMetrics; // Columns
+ Vector<void*> *valueTable = new Vector<void*>(totalColumns);
+ Vector<void*> *highlightTable = new Vector<void*>(totalColumns);
+
+ // the return value consists of the two tables discussed above.
+ Vector<void*> *rc = new Vector<void*>(2);
+ rc->append (valueTable);
+ rc->append (highlightTable);
+ if (dbeSession->nexps () == 0)
+ { // no experiments are loaded
+ for (int jj = 0; jj < totalColumns; jj++)
+ {
+ Vector<void *> *columnData = new Vector<void *>();
+ valueTable->append (columnData);
+ highlightTable->append (columnData);
+ }
+ return rc;
+ }
+
+ int ngroups = dbeSession->expGroups->size (); // Rows (one per compare group)
+ if (ngroups == 0 || !dbev->comparingExperiments ())
+ ngroups = 1;
+
+ Vector<double> *groupTotalTime = new Vector<double>(ngroups);
+ Vector<double> *groupCpuTime = new Vector<double>(ngroups);
+ // initialize highlight table
+ for (int ii = 0; ii < totalColumns; ii++)
+ { // metrics
+ Vector<bool> *columnData = new Vector<bool>(ngroups);
+ highlightTable->append (columnData);
+ for (int grInd = 0; grInd < ngroups; grInd++)
+ columnData->store (grInd, false); // non-highlight
+ }
+
+ if (numMetrics > 0)
+ {
+ MetricList *bmlist;
+ // set bmlist to list of requested base metrics
+ BaseMetricTreeNode *root = dbeSession->get_reg_metrics_tree ();
+ int index;
+ char *mcmd;
+ Vector<BaseMetric*> *base_metrics = new Vector<BaseMetric*>();
+ Vec_loop (char *, metric_cmds, index, mcmd)
+ {
+ BaseMetricTreeNode *bmt_node = root->find (mcmd);
+ if (!bmt_node)
+ abort (); //YXXX weird
+ BaseMetric * baseNetric = bmt_node->get_BaseMetric ();
+ if (!baseNetric)
+ abort ();
+ base_metrics->append (baseNetric);
+ }
+
+ // MET_INDX will create MetricList of Exclusive metrics
+ bmlist = new MetricList (base_metrics, MET_SRCDIS);
+
+ // Use the Function List to fetch <Total> values
+ // A temporary table, v_totals, stores <total> by group
+ Vector<Hist_data::HistItem *> *v_totals = new Vector<Hist_data::HistItem *>(ngroups);
+ for (int grInd = 0; grInd < ngroups; grInd++)
+ {
+ MetricList *mlist;
+ if (ngroups > 1)
+ mlist = dbev->get_compare_mlist (bmlist, grInd);
+ else
+ mlist = bmlist;
+ if (mlist->size () != numMetrics)
+ abort ();
+
+ Hist_data *data;
+ data = dbev->get_hist_data (mlist, Histable::FUNCTION, 0,
+ Hist_data::ALL);
+ Hist_data::HistItem * totals = data->get_totals ();
+ v_totals->append (totals);
+ }
+
+ // store the Hist_data totals in valueTable
+ {
+ Metric *mitem;
+ int index;
+ Vec_loop (Metric*, bmlist->get_items (), index, mitem)
+ {
+ Vector<void*> * columnData = dbeGetTableDataOneColumn (dbev,
+ v_totals, mitem->get_vtype (), index);
+ valueTable->append (columnData);
+ }
+ }
+
+ // 7207285: hack for hwc profiling cycles conversion:
+ {
+ Metric *mitem;
+ int index;
+ Vec_loop (Metric*, bmlist->get_items (), index, mitem)
+ {
+ if (mitem->is_time_val ()
+ && mitem->get_vtype () == VT_ULLONG)
+ {
+ Vector<long long> *cycleValues = (Vector<long long> *)valueTable->fetch (index);
+ Vector<double> *timeValues = new Vector<double>(ngroups);
+ assert (cycleValues->size () == ngroups);
+ for (int grInd = 0; grInd < ngroups; grInd++)
+ {
+ long long cycles = cycleValues->fetch (grInd);
+ int expId;
+ if (dbeSession->expGroups->size () > 0)
+ {
+ ExpGroup *gr = dbeSession->expGroups->fetch (grInd);
+ Experiment *exp = gr->exps->fetch (0);
+ expId = exp->getExpIdx ();
+ }
+ else
+ expId = -1;
+ int clock = dbeSession->get_clock (expId);
+ double time;
+ if (clock)
+ time = cycles / (1.e+6 * clock);
+ else
+ time = cycles; //weird
+ timeValues->store (grInd, time);
+ }
+ delete cycleValues;
+ valueTable->store (index, timeValues);
+ }
+ }
+ }
+
+ // Scan metrics for best measure of CPU time
+ int bestCpuTimeIndx = -1;
+ {
+ Metric *mitem;
+ int index;
+ Vec_loop (Metric*, bmlist->get_items (), index, mitem)
+ {
+ BaseMetric::Type type = mitem->get_type ();
+ if (type == BaseMetric::CP_KERNEL_CPU)
+ {
+ bestCpuTimeIndx = index;
+ break; // CP_KERNEL_CPU trumps other measures
+ }
+ if (type == BaseMetric::CP_TOTAL_CPU)
+ {
+ // clock profiling CPU time
+ bestCpuTimeIndx = index;
+ // keep looking in case CP_KERNEL_CPU also exists
+ continue;
+ }
+
+ bool isTime = ((mitem->get_value_styles () & VAL_TIMEVAL) != 0);
+ bool isHwcCycles = (type == BaseMetric::HWCNTR
+ && (dbe_strcmp (mitem->get_aux (), "cycles") == 0)
+ && isTime);
+ if (isHwcCycles)
+ if (bestCpuTimeIndx < 0)
+ bestCpuTimeIndx = index;
+ }
+ if (bestCpuTimeIndx >= 0)
+ {
+ Vector<double> *timeValues = (Vector<double> *)valueTable->fetch (bestCpuTimeIndx);
+ if (timeValues->type () == VEC_DOUBLE)
+ for (int grInd = 0; grInd < ngroups; grInd++)
+ {
+ double time = timeValues->fetch (grInd);
+ groupCpuTime->append (time);
+ }
+ }
+ }
+
+ // Scan metrics for Total Thread time
+ {
+ Metric *mitem;
+ int index;
+ Vec_loop (Metric*, bmlist->get_items (), index, mitem)
+ {
+ BaseMetric::Type type = mitem->get_type ();
+ if (type == BaseMetric::CP_TOTAL)
+ {
+ Vector<double> *timeValues = (Vector<double> *)valueTable->fetch (index);
+ if (timeValues->type () != VEC_DOUBLE)
+ continue; // weird
+ for (int grInd = 0; grInd < ngroups; grInd++)
+ {
+ double time = timeValues->fetch (grInd);
+ groupTotalTime->append (time);
+ }
+ break;
+ }
+ }
+ }
+
+ // highlight metrics based on cpu time
+#define CPUSEC_PERCENT_THRESHOLD 10.0
+#define HWC_OVERFLOWS_PER_CPUSEC_THRESHOLD 15
+ {
+ Metric *mitem;
+ int index;
+ Vec_loop (Metric*, bmlist->get_items (), index, mitem)
+ {
+ BaseMetric::Type type = mitem->get_type ();
+ Vector<bool> * columnHilites = (Vector<bool> *)highlightTable->fetch (index);
+
+ // always highlight the following
+ if (index == bestCpuTimeIndx)
+ {
+ for (int grInd = 0; grInd < ngroups; grInd++)
+ columnHilites->store (grInd, true);
+ continue;
+ }
+
+ // skip certain types
+ bool typeIsCycles = (type == BaseMetric::HWCNTR
+ && dbe_strcmp (mitem->get_aux (), NTXT ("cycles")) == 0);
+ bool typeIsInsts = (type == BaseMetric::HWCNTR
+ && dbe_strcmp (mitem->get_aux (), NTXT ("insts")) == 0);
+ if (type == BaseMetric::CP_TOTAL
+ || type == BaseMetric::CP_TOTAL_CPU
+ || type == BaseMetric::CP_LMS_USER
+ || type == BaseMetric::CP_LMS_SYSTEM
+ || type == BaseMetric::CP_LMS_TRAP
+ || type == BaseMetric::CP_LMS_USER_LOCK
+ || type == BaseMetric::CP_LMS_SLEEP
+ || type == BaseMetric::CP_KERNEL_CPU
+ || type == BaseMetric::OMP_WORK
+ || typeIsCycles
+ || typeIsInsts
+ // || type == BaseMetric::CP_TOTAL_WAIT
+ )
+ continue; // types we never highlight
+
+ // for time values, compare against CPUSEC_PERCENT_THRESHOLD
+ bool isTime = ((mitem->get_value_styles () & VAL_TIMEVAL) != 0);
+ if (isTime)
+ {
+ if (groupCpuTime->size () == 0)
+ continue; // no time to use as reference
+ Vector<double> *timeValues = (Vector<double> *)valueTable->fetch (index);
+ if (timeValues->type () != VEC_DOUBLE)
+ continue; // weird
+ for (int grInd = 0; grInd < ngroups; grInd++)
+ {
+ double thistime = timeValues->fetch (grInd);
+ double usertime = groupCpuTime->fetch (grInd);
+ if (thistime / (CPUSEC_PERCENT_THRESHOLD / 100) > usertime)
+ columnHilites->store (grInd, true);
+ }
+ continue;
+ }
+
+ // for HWC event counts, look at rate of events
+ if (type == BaseMetric::HWCNTR)
+ {
+ Hwcentry *hwctr = mitem->get_hw_ctr ();
+ if (!hwctr)
+ continue; // weird
+ if (!hwctr->metric)
+ continue; // raw counter
+ if (groupCpuTime->size () == 0)
+ continue; // no time to use as reference
+ if (mitem->get_base_metric ()->get_dependent_bm ())
+ continue; // has a derived time metric, only flag time version
+ Vector<long long> *llValues = (Vector<long long> *)valueTable->fetch (index);
+ if (llValues->type () != VEC_LLONG)
+ continue; // weird
+ int overflowVal = hwctr->val; //overflow count
+ if (!overflowVal)
+ continue; // weird
+ if (overflowVal > (4000000))
+ // cut off events that are very frequent like loads/stores
+ // 4Ghz * (0.01 seconds/event) / (4000000 events/overflow) = 10 cycles
+ continue;
+ // for HWCs we could base it on the overflow rate
+ for (int grInd = 0; grInd < ngroups; grInd++)
+ {
+ double thisVal = llValues->fetch (grInd);
+ thisVal /= overflowVal;
+ double usertime = groupCpuTime->fetch (grInd);
+ if (thisVal > usertime * HWC_OVERFLOWS_PER_CPUSEC_THRESHOLD)
+ columnHilites->store (grInd, true);
+ }
+ continue;
+ }
+
+ // check for non-zero counts of the following
+ if (type == BaseMetric::DEADLOCKS ||
+ type == BaseMetric::RACCESS ||
+ type == BaseMetric::HEAP_ALLOC_BYTES ||
+ type == BaseMetric::HEAP_LEAK_BYTES)
+ {
+ Vector<long long> *llValues = (Vector<long long> *)valueTable->fetch (index);
+ if (llValues->type () != VEC_LLONG)
+ continue; // weird
+ for (int grInd = 0; grInd < ngroups; grInd++)
+ {
+ long long thisVal = llValues->fetch (grInd);
+ if (thisVal)
+ columnHilites->store (grInd, true);
+ }
+ continue;
+ }
+ // continue adding cases as needed
+ }
+ }
+ }
+
+ if (numNonMetrics > 0)
+ {
+ int index;
+ char *mcmd;
+ Vec_loop (char *, non_metric_cmds, index, mcmd)
+ {
+ if (dbe_strcmp (mcmd, NTXT ("YXXX_TOTAL_TIME_PLUS_THREADS")) == 0
+ && groupCpuTime->size () == ngroups)
+ {
+ Vector<char *> *columnData = new Vector<char *>(ngroups);
+ for (int grInd = 0; grInd < ngroups; grInd++)
+ {
+ double totaltime = groupTotalTime->fetch (grInd);
+ columnData->append (dbe_sprintf (NTXT ("%0.3f %s"), totaltime, GTXT ("Seconds")));
+ }
+ valueTable->append (columnData);
+ }
+ else if (dbe_strcmp (mcmd, L1_DURATION) == 0)
+ {
+ Vector<double> *columnData = new Vector<double>(ngroups);
+ for (int grInd = 0; grInd < ngroups; grInd++)
+ {
+ hrtime_t duration = dbeCalcGroupDuration (grInd);
+ double seconds = duration * 1.e-9;
+ columnData->append (seconds);
+ }
+ valueTable->append (columnData);
+ }
+ else if (dbe_strcmp (mcmd, L1_GCDURATION) == 0)
+ {
+ Vector<double> *columnData = new Vector<double>(ngroups);
+ for (int grInd = 0; grInd < ngroups; grInd++)
+ {
+ hrtime_t duration = dbeCalcGroupGCDuration (grInd);
+ double seconds = duration * 1.e-9;
+ columnData->append (seconds);
+ }
+ valueTable->append (columnData);
+ }
+ else
+ {
+ Vector<char *> *columnData = new Vector<char *>(ngroups);
+ char * valueString = NTXT ("<unknown>");
+ for (int grInd = 0; grInd < ngroups; grInd++)
+ columnData->append (dbe_strdup (valueString));
+ valueTable->append (columnData);
+ }
+ }
+ }
+ return rc;
+}
+
+Vector<char*> *
+dbeGetOverviewText (int dbevindex)
+{
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ Vector<char*> *info = new Vector<char*>;
+ char *field;
+ int ngroups = dbeSession->expGroups->size (); // Rows (one per compare group)
+ if (ngroups == 0 || !dbev->comparingExperiments ())
+ ngroups = 1;
+ for (int grInd = 0; grInd < ngroups; grInd++)
+ {
+ int thisGroupSize = 1;
+ Experiment *exp;
+ if (dbeSession->expGroups->size () > 0)
+ {
+ ExpGroup *gr = dbeSession->expGroups->fetch (grInd);
+ exp = gr->exps->fetch (0);
+ thisGroupSize = gr->exps->size ();
+ }
+ else
+ {
+ if (dbeSession->nexps () == 0)
+ return info;
+ exp = dbeSession->get_exp (0);
+ }
+ char * expHeader;
+ if (ngroups == 1)
+ expHeader = dbe_strdup (GTXT ("Experiment :"));
+ else if (grInd == 0)
+ expHeader = dbe_strdup (GTXT ("Base Group : "));
+ else if (ngroups == 2)
+ expHeader = dbe_strdup (GTXT ("Compare Group : "));
+ else
+ expHeader = dbe_sprintf (GTXT ("Compare Group %d : "), grInd);
+ if (thisGroupSize == 1)
+ info->append (dbe_sprintf ("%s%s", expHeader, exp->get_expt_name ()));
+ else
+ info->append (dbe_sprintf ("%s%s (plus %d more)",
+ expHeader, exp->get_expt_name (), thisGroupSize - 1));
+ free (expHeader);
+ field = exp->uarglist;
+ if (field && field[0])
+ info->append (dbe_sprintf (GTXT (" Target : '%s'"), field));
+ field = exp->hostname;
+ if (field && field[0])
+ info->append (dbe_sprintf (NTXT (" %s %s (%s, %s)"),
+ GTXT ("Host :"),
+ field,
+ exp->architecture ? exp->architecture
+ : GTXT ("<CPU architecture not recorded>"),
+ exp->os_version ? exp->os_version
+ : GTXT ("<OS version not recorded>")));
+ long start_sec = exp->start_sec;
+ char *p = ctime (&start_sec); // does this need to be freed? YXXX
+ hrtime_t tot_time = dbeCalcGroupDuration (grInd);
+ double seconds = tot_time * 1.e-9;
+ info->append (dbe_sprintf (NTXT (" %s %s %s %0.3f %s"),
+ GTXT ("Start Time :"), p,
+ GTXT ("Duration :"), seconds,
+ GTXT ("Seconds")));
+ // Number of descendants/processes would be nice
+ info->append (dbe_strdup (NTXT ("")));
+ }
+ return info;
+}
+
+//--------------------------------------------------------------------------
+// Set Sort by index
+//
+void
+dbeSetSort (int dbevindex, int sort_index, MetricType mtype, bool reverse)
+{
+ DbeView *dbev;
+
+ dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ dbev->setSort (sort_index, mtype, reverse);
+ return;
+}
+
+//
+// Get annotation setting
+//
+Vector<int> *
+dbeGetAnoValue (int dbevindex)
+{
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ Vector<int> *set = new Vector<int>(9);
+ set->store (0, dbev->get_src_compcom ());
+ set->store (1, dbev->get_dis_compcom ());
+ set->store (2, dbev->get_thresh_src ());
+ set->store (3, dbev->get_thresh_src ());
+ set->store (4, dbev->get_src_visible ());
+ set->store (5, (int) dbev->get_srcmetric_visible ());
+ set->store (6, (int) dbev->get_hex_visible ());
+ set->store (7, (int) dbev->get_cmpline_visible ());
+ set->store (8, (int) dbev->get_func_scope ());
+ return set;
+}
+
+//
+// Set annotation setting
+//
+void
+dbeSetAnoValue (int dbevindex, Vector<int> *set)
+{
+ DbeView *dbev;
+ dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ if (set->size () != 10)
+ return;
+ dbev->set_src_compcom (set->fetch (0));
+ dbev->set_dis_compcom (set->fetch (1));
+ dbev->set_thresh_src (set->fetch (2));
+ dbev->set_thresh_dis (set->fetch (3));
+ dbev->set_src_visible (set->fetch (4));
+ dbev->set_srcmetric_visible ((bool)set->fetch (5));
+ dbev->set_hex_visible ((bool)set->fetch (6));
+ dbev->set_cmpline_visible ((bool)set->fetch (7));
+ dbev->set_func_scope (set->fetch (8));
+ dbev->set_funcline_visible ((bool)set->fetch (9));
+ return;
+}
+
+//
+// Get name formats
+//
+int
+dbeGetNameFormat (int dbevindex)
+{
+ DbeView *dbev;
+ dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ Histable::NameFormat fmt = dbev->get_name_format ();
+ return Histable::fname_fmt (fmt);
+}
+
+bool
+dbeGetSoName (int dbevindex)
+{
+ DbeView *dbev;
+ dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ Histable::NameFormat fmt = dbev->get_name_format ();
+ return Histable::soname_fmt (fmt);
+}
+
+//
+// Set name formats
+//
+void
+dbeSetNameFormat (int dbevindex, int nformat, bool soname)
+{
+ DbeView *dbev;
+ dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ dbev->set_name_format (nformat, soname);
+}
+
+//
+// Get View mode
+//
+int
+dbeGetViewMode (int dbevindex)
+{
+ DbeView *dbev;
+ dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ return (int) dbev->get_view_mode ();
+}
+
+// Set View mode
+void
+dbeSetViewMode (int dbevindex, int nmode)
+{
+ DbeView *dbev;
+ dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ dbev->set_view_mode ((VMode) nmode);
+ return;
+}
+
+// Get timeline setting
+//
+Vector<void*> *
+dbeGetTLValue (int dbevindex)
+{
+ DbeView *dbev;
+ dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ Vector<char *> *strings = new Vector<char *>();
+ char *tldata_cmd = dbev->get_tldata ();
+ strings->store (0, tldata_cmd);
+
+ Vector<int> *ints = new Vector<int>(3);
+ int val;
+ val = dbev->get_tlmode ();
+ ints->store (0, val);
+ val = dbev->get_stack_align ();
+ ints->store (1, val);
+ val = dbev->get_stack_depth ();
+ ints->store (2, val);
+
+ Vector<void*> *objs = new Vector<void*>(2);
+ objs->store (0, strings);
+ objs->store (1, ints);
+ return objs;
+}
+
+//
+// Set timeline setting
+//
+void
+dbeSetTLValue (int dbevindex, const char *tldata_cmd,
+ int entitiy_prop_id, int stackalign, int stackdepth)
+{
+ DbeView *dbev;
+ dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ dbev->set_tldata (tldata_cmd);
+ dbev->set_tlmode (entitiy_prop_id);
+ dbev->set_stack_align (stackalign);
+ dbev->set_stack_depth (stackdepth);
+ return;
+}
+
+//
+// Get founder experiments and their descendants
+//
+Vector<void*> *
+dbeGetExpFounderDescendants ()
+{
+ int size = dbeSession->nexps ();
+ if (size == 0)
+ return NULL;
+ Vector<void*> *table = new Vector<void*>(2);
+ Vector<int> *founderExpIds = new Vector<int>();
+ Vector<Vector<int> *> *subExpIds = new Vector<Vector<int>*>();
+ for (int index = 0; index < size; index++)
+ {
+ Experiment *exp = dbeSession->get_exp (index);
+ if (exp->founder_exp == NULL)
+ {
+ founderExpIds->append (exp->getExpIdx ());
+ Vector<int> *subExps = new Vector<int>();
+ for (int i = 0; i < exp->children_exps->size (); i++)
+ {
+ Experiment * subExp = exp->children_exps->fetch (i);
+ subExps->append (subExp->getExpIdx ());
+ }
+ subExpIds->append (subExps);
+ }
+ }
+ table->store (0, founderExpIds);
+ table->store (1, subExpIds);
+ return table;
+}
+
+//
+// Get experiment selection
+//
+Vector<void*> *
+dbeGetExpSelection (int dbevindex)
+{
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ int size = dbeSession->nexps ();
+ if (size == 0)
+ return NULL;
+ Vector<void*> *table = new Vector<void*>(3);
+ Vector<char*> *names = new Vector<char*>(size);
+ Vector<bool> *enable = new Vector<bool>(size);
+ Vector<int> *userExpIds = new Vector<int>(size);
+
+ // Get experiment names
+ for (int index = 0; index < size; index++)
+ {
+ Experiment *exp = dbeSession->get_exp (index);
+ char *buf = dbeGetName (dbevindex, index);
+ names->store (index, buf);
+ bool val;
+ val = dbev->get_exp_enable (index);
+ enable->store (index, val);
+ userExpIds->store (index, exp->getUserExpId ());
+ }
+ table->store (0, names);
+ table->store (1, enable);
+ table->store (2, userExpIds);
+ return table;
+}
+
+int
+dbeValidateFilterExpression (char *str_expr)
+{
+ if (str_expr == NULL)
+ return 0;
+ Expression *expr = dbeSession->ql_parse (str_expr);
+ if (expr == NULL)
+ return 0;
+ delete expr;
+ return 1;
+}
+
+Vector<void*> *
+dbeGetFilterKeywords (int /* dbevindex */)
+{
+ Vector <char*> *kwCategory = new Vector<char *>();
+ Vector <char*> *kwCategoryI18N = new Vector<char *>();
+ Vector <char*> *kwDataType = new Vector<char *>();
+ Vector <char*> *kwKeyword = new Vector<char *>();
+ Vector <char*> *kwFormula = new Vector<char *>();
+ Vector <char*> *kwDescription = new Vector<char *>();
+ Vector <void*> *kwEnumDescs = new Vector<void *>();
+
+ Vector<void*> *res = new Vector<void*>(7);
+ res->append (kwCategory);
+ res->append (kwCategoryI18N);
+ res->append (kwDataType);
+ res->append (kwKeyword);
+ res->append (kwFormula);
+ res->append (kwDescription);
+ res->append (kwEnumDescs);
+
+ char *vtypeNames[] = VTYPE_TYPE_NAMES;
+ // section header for global definitions
+ kwCategory->append (dbe_strdup (NTXT ("FK_SECTION")));
+ kwCategoryI18N->append (dbe_strdup (GTXT ("Global Definitions")));
+ kwDataType->append (NULL);
+ kwKeyword->append (NULL);
+ kwFormula->append (NULL);
+ kwDescription->append (NULL);
+ kwEnumDescs->append (NULL);
+ dbeSession->get_filter_keywords (res);
+ MemorySpace::get_filter_keywords (res);
+
+ // loop thru all founder experiments
+ int nexp = dbeSession->nexps ();
+ for (int ii = 0; ii < nexp; ++ii)
+ {
+ Experiment* fexp = dbeSession->get_exp (ii);
+ if (fexp->founder_exp != NULL)
+ continue; // is a child; should be covered when we get to founder
+
+ // section header for each founder
+ // section header for founder experiment
+ kwCategory->append (dbe_strdup (NTXT ("FK_SECTION")));
+ kwCategoryI18N->append (dbe_sprintf (NTXT ("%s [EXPGRID==%d]"),
+ fexp->get_expt_name (),
+ fexp->groupId));
+ kwDataType->append (NULL);
+ kwKeyword->append (NULL);
+ kwFormula->append (NULL);
+ kwDescription->append (NULL);
+ kwEnumDescs->append (NULL);
+
+ int nchildren = fexp->children_exps->size ();
+ Experiment *exp;
+ // category header: Experiments
+ {
+ char *propUName = dbeSession->getPropUName (PROP_EXPID);
+
+ // store list of subexperiments in kwEnumDescs
+ Vector <char*> *enumDescs = new Vector<char *>();
+ int jj = 0;
+ exp = fexp;
+ while (1)
+ {
+ char * expBasename = get_basename (exp->get_expt_name ());
+ char * targetName = exp->utargname ? exp->utargname
+ : (char *) GTXT ("(unknown)");
+ enumDescs->append (dbe_sprintf (NTXT ("(%d) -> %s [%s, PID %d]"),
+ exp->getUserExpId (), expBasename,
+ targetName, exp->getPID ()));
+ if (jj >= nchildren)
+ break;
+ exp = fexp->children_exps->fetch (jj);
+ jj++;
+ }
+ kwCategory->append (dbe_strdup (NTXT ("FK_EXPLIST")));
+ kwCategoryI18N->append (dbe_strdup (GTXT ("Experiments")));
+ kwDataType->append (dbe_strdup (vtypeNames[TYPE_INT32]));
+ kwKeyword->append (dbe_strdup (NTXT ("EXPID")));
+ kwFormula->append (NULL);
+ kwDescription->append (propUName);
+ kwEnumDescs->append (enumDescs);
+ }
+
+ // select representative experiment
+ if (nchildren == 0)
+ exp = fexp; // founder
+ else
+ exp = fexp->children_exps->fetch (0); // first child
+ int expIdx = exp->getExpIdx ();
+ Vector<void*> *data = dbeGetDataDescriptorsV2 (expIdx);
+ if (data == NULL)
+ continue;
+ Vector<int> *dataId = (Vector<int>*)data->fetch (0);
+ Vector<char*> *dataName = (Vector<char*>*)data->fetch (1);
+ Vector<char*> *dataUName = (Vector<char*>*)data->fetch (2);
+ if (dataId == NULL || dataName == NULL)
+ {
+ destroy (data);
+ continue;
+ }
+ // loop thru data descriptors
+ int ndata = dataId->size ();
+ for (int j = 0; j < ndata; ++j)
+ {
+ // category: data name (e.g. Clock Profiling)
+ char * catName = dataName->fetch (j);
+ char * dUname = dataUName ? dataUName->fetch (j) : catName;
+ char * catUname = dUname ? dUname : catName;
+
+ Vector<void*> *props = dbeGetDataPropertiesV2 (expIdx, dataId->fetch (j));
+ if (props == NULL)
+ continue;
+ Vector<char*> *propUName = (Vector<char*>*)props->fetch (1);
+ Vector<int> *propTypeId = (Vector<int> *)props->fetch (2);
+ Vector<char*> *propType = (Vector<char*>*)props->fetch (3);
+ Vector<char*> *propName = (Vector<char*>*)props->fetch (5);
+ Vector<Vector<char*>*> *propStateNames =
+ (Vector<Vector<char*>*> *)props->fetch (6);
+ Vector<Vector<char*>*> *propStateUNames =
+ (Vector<Vector<char*>*> *)props->fetch (7);
+ if (propName == NULL || propUName == NULL || propType == NULL
+ || propName->size () <= 0)
+ {
+ destroy (props);
+ continue;
+ }
+ int nprop = propName->size ();
+ for (int k = 0; k < nprop; ++k)
+ {
+ if (propTypeId->fetch (k) == TYPE_OBJ)
+ continue;
+ if (dbe_strcmp (propName->fetch (k), NTXT ("FRINFO")) == 0)
+ continue;
+
+ // store list of states in kwEnumDescs
+ Vector<char*> *enumDescs = new Vector<char *>();
+ Vector<char*>* stateNames = propStateNames->fetch (k);
+ Vector<char*>* stateUNames = propStateUNames->fetch (k);
+ int nStates = stateNames ? stateNames->size () : 0;
+ for (int kk = 0; kk < nStates; ++kk)
+ {
+ const char *stateName = stateNames->fetch (kk);
+ if (stateName == NULL || strlen (stateName) == 0)
+ continue;
+ const char *stateUName = stateUNames->fetch (kk);
+ if (stateUName == NULL || strlen (stateUName) == 0)
+ stateUName = stateName;
+ enumDescs->append (dbe_sprintf (NTXT ("(%d) -> %s"), kk, stateUName));
+ }
+ kwCategory->append (dbe_strdup (catName));
+ kwCategoryI18N->append (dbe_strdup (catUname));
+ kwDataType->append (dbe_strdup (propType->fetch (k)));
+ kwKeyword->append (dbe_strdup (propName->fetch (k)));
+ kwFormula->append (NULL);
+ kwDescription->append (dbe_strdup (propUName->fetch (k)));
+ kwEnumDescs->append (enumDescs);
+ }
+ destroy (props);
+ }
+ destroy (data);
+ }
+ return (res);
+}
+
+// GetFilters -- returns the list of filters for the indexed experiment
+// returns false if there's a problem; true otherwise
+//
+Vector<void*> *
+dbeGetFilters (int dbevindex, int nexp)
+{
+ FilterNumeric *filt;
+ int index;
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ Vector<FilterNumeric *>*filters = dbev->get_all_filters (nexp);
+ if (filters == NULL)
+ return NULL;
+
+ // return an array of filter data for that experiment
+ Vector <int> *findex = new Vector<int>(); // index of the filters
+ Vector <char*> *shortname = new Vector<char *>();
+ // short name of filter
+ Vector <char*> *i18n_name = new Vector<char *>();
+ // External I18N'd name of filter
+ Vector <char*> *pattern = new Vector<char *>();
+ // current setting string
+ Vector <char*> *status = new Vector<char *>();
+ // current status of filter (%, range, etc.)
+
+ Vec_loop (FilterNumeric *, filters, index, filt)
+ {
+ findex->append (index);
+ shortname->append (dbe_strdup (filt->get_cmd ()));
+ i18n_name->append (dbe_strdup (filt->get_name ()));
+ pattern->append (dbe_strdup (filt->get_pattern ()));
+ status->append (dbe_strdup (filt->get_status ()));
+ }
+ Vector<void*> *res = new Vector<void*>(5);
+ res->store (0, findex);
+ res->store (1, shortname);
+ res->store (2, i18n_name);
+ res->store (3, pattern);
+ res->store (4, status);
+ return (res);
+}
+
+// Set a filter string for a view
+// Returns NULL if OK, error message if not
+
+char *
+dbeSetFilterStr (int dbevindex, char *filter_str)
+{
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ dbev->clear_error_msg ();
+ dbev->clear_warning_msg ();
+ char *ret = dbev->set_filter (filter_str);
+ return ret;
+}
+
+// Get the current filter setting for the view
+char *
+dbeGetFilterStr (int dbevindex)
+{
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ char *ret = dbev->get_filter ();
+ return ret;
+}
+
+// Update a filters for a single experiment
+// Returns true if any filter->set_pattern() returns true,
+// implying rereading the data is needed (i.e., a filter changed)
+//
+bool
+dbeUpdateFilters (int dbevindex, Vector<bool> *selected, Vector<char *> *pattern_str)
+{
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ dbev->clear_error_msg ();
+ dbev->clear_warning_msg ();
+
+ // Get index of first selected experiment
+ int size = selected->size ();
+ int nselexp = -1;
+ for (int index = 0; index < size; index++)
+ {
+ if (selected->fetch (index) == true)
+ {
+ nselexp = index;
+ break;
+ }
+ }
+ if (nselexp == -1) // No experiment selected
+ return false;
+
+ bool ret = false;
+ for (int j = 0; j < size; j++)
+ {
+ if (selected->fetch (j) == false)
+ continue;
+ bool error;
+ if (dbev->set_pattern (j, pattern_str, &error))
+ ret = true;
+ }
+ dbev->update_advanced_filter ();
+ return ret;
+}
+
+char *
+dbeComposeFilterClause (int dbevindex, int type, int subtype, Vector<int> *selections)
+{
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ // ask the cached data to generate the string
+ Hist_data *data;
+ switch (type)
+ {
+ case DSP_FUNCTION:
+ data = dbev->func_data;
+ break;
+ case DSP_DLAYOUT:
+ data = dbev->dlay_data;
+ break;
+ case DSP_DATAOBJ:
+ data = dbev->dobj_data;
+ break;
+ case DSP_MEMOBJ:
+ case DSP_INDXOBJ:
+ data = dbev->get_indxobj_data (subtype);
+ break;
+ case DSP_LINE:
+ data = dbev->line_data;
+ break;
+ case DSP_PC:
+ data = dbev->pc_data;
+ break;
+ case DSP_SOURCE:
+ data = dbev->src_data;
+ break;
+ case DSP_DISASM:
+ data = dbev->dis_data;
+ break;
+ case DSP_IOACTIVITY:
+ data = dbev->iofile_data;
+ break;
+ case DSP_IOVFD:
+ data = dbev->iovfd_data;
+ break;
+ case DSP_IOCALLSTACK:
+ data = dbev->iocs_data;
+ break;
+ case DSP_HEAPCALLSTACK:
+ data = dbev->heapcs_data;
+ break;
+ default:
+ return NULL;
+ }
+ if (data == NULL)
+ return NULL;
+
+ // Get array of object indices, and compose filter string
+ Vector<uint64_t> *obj_ids = data->get_object_indices (selections);
+ if (obj_ids == NULL || obj_ids->size () == 0)
+ return NULL;
+
+ uint64_t sel;
+ int index;
+ int found = 0;
+ char buf[128];
+ StringBuilder sb;
+ sb.append ('(');
+ switch (type)
+ {
+ case DSP_LINE:
+ case DSP_PC:
+ case DSP_SOURCE:
+ case DSP_DISASM:
+ case DSP_FUNCTION:
+ sb.append (NTXT ("LEAF IN "));
+ break;
+ case DSP_MEMOBJ:
+ case DSP_INDXOBJ:
+ sb.append (dbeSession->getIndexSpaceName (subtype));
+ sb.append (NTXT (" IN "));
+ break;
+ }
+ Vec_loop (uint64_t, obj_ids, index, sel)
+ {
+ if (found == 0)
+ {
+ found = 1;
+ sb.append ('(');
+ }
+ else
+ sb.append (NTXT (", "));
+ snprintf (buf, sizeof (buf), NTXT ("%llu"), (long long) sel);
+ sb.append (buf);
+ }
+ if (found == 1)
+ sb.append (')');
+
+ switch (type)
+ {
+ case DSP_DLAYOUT:
+ case DSP_DATAOBJ:
+ sb.append (NTXT (" SOME IN DOBJ"));
+ break;
+ }
+ sb.append (')');
+ return sb.toString ();
+}
+
+//
+// Get load object states
+//
+Vector<void *> *
+dbeGetLoadObjectList (int dbevindex)
+{
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ Vector<LoadObject*> *lobjs = dbeSession->get_text_segments ();
+ int size = lobjs->size ();
+
+ // Initialize Java boolean array
+ Vector<char *> *names = new Vector<char *>(size);
+ Vector<int> *states = new Vector<int>(size);
+ Vector<int> *indices = new Vector<int>(size);
+ Vector<char *> *paths = new Vector<char *>(size);
+ Vector<int> *isJava = new Vector<int>(size);
+
+ // Get load object states
+ int index;
+ LoadObject *lo;
+ char *lo_name;
+
+ // lobjectsNoJava is a trimmed list of indices provided to front-end skipping the Java
+ // classes. lobjectsNoJava preserves the mapping of the index into the complete lobjs
+ // vector. What front-end sees as lobj[i] is really lobj[lobjectsNoJava[i]];
+
+ // This list is constructed every time GetLoadObjectList() or GetLoadObjectState() is
+ // called. Possibility of further optimization by making it more persistent.
+ // Only consumer of this list is dbeSetLoadObjectState
+ int new_index = 0;
+ if (dbev->lobjectsNoJava == NULL)
+ dbev->lobjectsNoJava = new Vector<int>(1);
+ else
+ dbev->lobjectsNoJava->reset ();
+
+ Vec_loop (LoadObject*, lobjs, index, lo)
+ {
+ // Set 0, 1, or 2 for show/hide/api
+ enum LibExpand expand = dbev->get_lo_expand (lo->seg_idx);
+
+ lo_name = lo->get_name ();
+ if (lo_name != NULL)
+ {
+ size_t len = strlen (lo_name);
+ if (len > 7 && streq (lo_name + len - 7, NTXT (".class>")))
+ isJava->store (new_index, 1);
+ else
+ isJava->store (new_index, 0);
+ }
+ else
+ isJava->store (new_index, 0);
+ dbev->lobjectsNoJava->append (index);
+
+ names->store (new_index, dbe_sprintf (NTXT ("%s"), lo_name));
+ states->store (new_index, (int) expand);
+ indices->store (new_index, (int) lo->seg_idx);
+ paths->store (new_index, dbe_sprintf (NTXT ("%s"), lo->get_pathname ()));
+ new_index++;
+ }
+ Vector<void*> *res = new Vector<void*>(5);
+ res->store (0, names);
+ res->store (1, states);
+ res->store (2, indices);
+ res->store (3, paths);
+ res->store (4, isJava);
+ delete lobjs;
+ return res;
+}
+
+Vector<int> *
+dbeGetLoadObjectState (int dbevindex)
+{
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ Vector<LoadObject*> *lobjs = dbeSession->get_text_segments ();
+ int size = lobjs->size ();
+
+ // Initialize Java boolean array
+ Vector<int> *states = new Vector<int>(size);
+ char *lo_name;
+
+ // lobjectsNoJava is a trimmed list of indices provided to front-end skipping the Java
+ // classes. lobjectsNoJava preserves the mapping of the index into the complete lobjs
+ // vector. What front-end sees as lobj[i] is really lobj[lobjectsNoJava[i]];
+
+ // This list is constructed every time GetLoadObjectList() or GetLoadObjectState() is
+ // called. Possibility of further optimization by making it more persistent.
+ // Only consumer of this list is dbeSetLoadObjectState
+ int new_index = 0;
+ if (dbev->lobjectsNoJava == NULL)
+ dbev->lobjectsNoJava = new Vector<int>(1);
+ else
+ dbev->lobjectsNoJava->reset ();
+
+ // Get load object states
+ int index;
+ LoadObject *lo;
+
+ Vec_loop (LoadObject*, lobjs, index, lo)
+ {
+ // Set 0, 1, or 2 for show/hide/api
+ lo_name = lo->get_name ();
+ if (lo_name != NULL)
+ {
+ size_t len = strlen (lo_name);
+ if (len > 7 && streq (lo_name + len - 7, NTXT (".class>")))
+ continue;
+ }
+ else
+ dbev->lobjectsNoJava->append (index);
+
+ enum LibExpand expand = dbev->get_lo_expand (lo->seg_idx);
+ states->store (new_index, (int) expand);
+ new_index++;
+ }
+ delete lobjs;
+ return states;
+}
+
+// Set load object states
+void
+dbeSetLoadObjectState (int dbevindex, Vector<int> *selected)
+{
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ Vector<LoadObject*> *lobjs = dbeSession->get_text_segments ();
+
+ int index;
+ bool changed = false;
+
+ LoadObject *lo;
+ int new_index = 0;
+ dbev->setShowAll ();
+ Vec_loop (LoadObject*, lobjs, index, lo)
+ {
+ if (dbev->lobjectsNoJava != NULL)
+ {
+ // This loadobject is a java class and was skipped
+ if (dbev->lobjectsNoJava->fetch (new_index) != index)
+ continue;
+ }
+ // Get array of settings
+ enum LibExpand expand = (enum LibExpand) selected->fetch (new_index);
+ if (expand == LIBEX_HIDE)
+ {
+ dbev->resetShowAll ();
+ dbeSession->set_lib_visibility_used ();
+ }
+ changed = changed | dbev->set_libexpand (lo->get_pathname (), expand);
+ new_index++;
+ }
+ delete lobjs;
+ if (changed == true)
+ {
+ dbev->setShowHideChanged ();
+ dbev->update_lo_expands ();
+ }
+
+ return;
+}
+
+// Reset load object states
+void
+dbeSetLoadObjectDefaults (int dbevindex)
+{
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ dbev->set_libdefaults ();
+}
+
+// Get Machine model
+Vector<char*>*
+dbeGetCPUVerMachineModel (int dbevindex)
+{
+ Vector<char*>* table = new Vector<char*>();
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ char * mach_model = dbev->get_settings ()->get_machinemodel ();
+ if (mach_model != NULL)
+ {
+ table->append (mach_model);
+ return table;
+ }
+ int grsize = dbeSession->expGroups->size ();
+ for (int j = 0; j < grsize; j++)
+ {
+ ExpGroup *gr = dbeSession->expGroups->fetch (j);
+ Vector<Experiment*> *exps = gr->exps;
+ for (int i = 0, sz = exps->size (); i < sz; i++)
+ {
+ Experiment *exp = exps->fetch (i);
+ char *model = exp->machinemodel;
+ if (model != NULL)
+ table->append (dbe_strdup (model));
+ }
+ }
+ return table;
+}
+
+// automatically load machine model if applicable
+void
+dbeDetectLoadMachineModel (int dbevindex)
+{
+ if (dbeSession->is_datamode_available ())
+ {
+ char *model = dbeGetMachineModel ();
+ if (model == NULL)
+ {
+ Vector<char*>* models = dbeGetCPUVerMachineModel (dbevindex);
+ char * machineModel = NTXT ("generic");
+ if (models->size () > 0)
+ {
+ machineModel = models->get (0);
+ for (int i = 1; i < models->size (); i++)
+ {
+ if (strncmp (models->get (i), machineModel, strlen (machineModel)) == 0)
+ {
+ machineModel = NTXT ("generic");
+ break;
+ }
+ }
+ dbeLoadMachineModel (machineModel);
+ }
+ delete models;
+ }
+ }
+}
+
+// Managing Memory Objects
+char *
+dbeDefineMemObj (char *name, char *index_expr, char *machinemodel,
+ char *sdesc, char *ldesc)
+{
+ return MemorySpace::mobj_define (name, index_expr, machinemodel, sdesc, ldesc);
+}
+
+char *
+dbeDeleteMemObj (char *name)
+{
+ return MemorySpace::mobj_delete (name);
+}
+
+Vector<void*> *
+dbeGetMemObjects (int /*dbevindex*/)
+{
+ Vector<void*> *res = MemorySpace::getMemObjects ();
+ return res;
+}
+
+// Managing machine model
+char *
+dbeLoadMachineModel (char *name)
+{
+ return dbeSession->load_mach_model (name);
+}
+
+char *
+dbeGetMachineModel ()
+{
+ return dbeSession->get_mach_model ();
+}
+
+Vector <char *> *
+dbeListMachineModels ()
+{
+ return dbeSession->list_mach_models ();
+}
+
+// Managing Index Objects
+char *
+dbeDefineIndxObj (char *name, char *index_expr, char *sdesc, char *ldesc)
+{
+ return dbeSession->indxobj_define (name, NULL, index_expr, sdesc, ldesc);
+}
+
+Vector<void*> *
+dbeGetIndxObjDescriptions (int /*dbevindex*/)
+{
+ Vector<void*> *res = dbeSession->getIndxObjDescriptions ();
+ return res;
+}
+
+Vector<void*> *
+dbeGetCustomIndxObjects (int /*dbevindex*/)
+{
+ Vector<void*> *res = dbeSession->getCustomIndxObjects ();
+ return res;
+}
+
+void
+dbeSetSelObj (int dbevindex, Obj sel_obj_or_ind, int type, int subtype)
+{
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ Histable *sel_obj;
+ Hist_data *data;
+ int sel_ind = (int) sel_obj_or_ind;
+
+ switch (type)
+ {
+ case DSP_FUNCTION:
+ data = dbev->func_data;
+ break;
+ case DSP_LINE:
+ data = dbev->line_data;
+ break;
+ case DSP_PC:
+ data = dbev->pc_data;
+ break;
+ case DSP_CALLER:
+ data = dbev->callers;
+ break;
+ case DSP_CALLEE:
+ data = dbev->callees;
+ break;
+ case DSP_SOURCE:
+ data = dbev->src_data;
+ break;
+ case DSP_DISASM:
+ data = dbev->dis_data;
+ break;
+ case DSP_DLAYOUT:
+ data = dbev->dlay_data;
+ if (data == NULL)
+ {
+ dbev->sel_binctx = NULL;
+ return;
+ }
+ if (sel_ind >= 0 && sel_ind < dbev->dlay_data->size ())
+ dbev->sel_dobj = dbev->dlay_data->fetch (sel_ind)->obj;
+ return;
+ case DSP_DATAOBJ:
+ data = dbev->dobj_data;
+ if (data == NULL)
+ {
+ dbev->sel_binctx = NULL;
+ return;
+ }
+ if (sel_ind >= 0 && sel_ind < dbev->dobj_data->size ())
+ dbev->sel_dobj = dbev->dobj_data->fetch (sel_ind)->obj;
+ return;
+ case DSP_MEMOBJ:
+ case DSP_INDXOBJ:
+ dbev->set_indxobj_sel (subtype, sel_ind);
+ sel_obj = dbev->get_indxobj_sel (subtype);
+ if (sel_obj && sel_obj->get_type () == Histable::INDEXOBJ)
+ dbev->set_sel_obj (((IndexObject*) sel_obj)->get_obj ());
+ return;
+ case DSP_SOURCE_V2:
+ case DSP_DISASM_V2:
+ case DSP_TIMELINE:
+ case DSP_LEAKLIST:
+ case DSP_RACES:
+ case DSP_DEADLOCKS:
+ case DSP_DUALSOURCE:
+ case DSP_SOURCE_DISASM:
+ case DSP_IOACTIVITY:
+ case DSP_IOVFD:
+ case DSP_IOCALLSTACK:
+ case DSP_HEAPCALLSTACK:
+ case DSP_MINICALLER:
+ dbev->set_sel_obj ((Histable *) sel_obj_or_ind);
+ return;
+ default:
+ // abort();
+ return;
+ }
+ if (type != DSP_SOURCE && type != DSP_DISASM && type != DSP_SOURCE_V2
+ && type != DSP_DISASM_V2)
+ dbev->sel_binctx = NULL;
+
+ if (data == NULL || data->get_status () != Hist_data::SUCCESS
+ || sel_ind >= data->size ())
+ return;
+
+ if (sel_ind >= 0 && sel_ind < data->size ())
+ dbev->set_sel_obj (data->fetch (sel_ind)->obj);
+}
+
+void
+dbeSetSelObjV2 (int dbevindex, uint64_t id)
+{
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ dbev->set_sel_obj (dbeSession->findObjectById (id));
+}
+
+Obj
+dbeGetSelObj (int dbevindex, int type, int subtype)
+{
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ Histable *sel_obj = NULL;
+ switch (type)
+ {
+ case DSP_FUNCTION:
+ sel_obj = dbev->get_sel_obj (Histable::FUNCTION);
+ break;
+ case DSP_LINE:
+ case DSP_SOURCE:
+ case DSP_SOURCE_V2:
+ sel_obj = dbev->get_sel_obj (Histable::LINE);
+ break;
+ case DSP_PC:
+ case DSP_DISASM:
+ case DSP_DISASM_V2:
+ sel_obj = dbev->get_sel_obj (Histable::INSTR);
+ break;
+ case DSP_SRC_FILE:
+ sel_obj = dbev->get_sel_obj (Histable::SOURCEFILE);
+ break;
+ case DSP_DATAOBJ:
+ case DSP_DLAYOUT:
+ if (dbev->sel_dobj)
+ sel_obj = dbev->sel_dobj->convertto (Histable::DOBJECT);
+ break;
+ case DSP_MEMOBJ:
+ case DSP_INDXOBJ:
+ sel_obj = dbev->get_indxobj_sel (subtype);
+ break;
+ default:
+ abort ();
+ }
+ Dprintf (DEBUG_DBE, NTXT ("### dbeGetSelObj: Dbe.cc:%d %s (%d) returns %s\n"),
+ __LINE__, dsp_type_to_string (type), type, sel_obj ? sel_obj->dump () : "NULL");
+ return (Obj) sel_obj;
+}
+
+Obj
+dbeConvertSelObj (Obj obj, int type)
+{
+ Histable *sel_obj = (Histable *) obj;
+ Dprintf (DEBUG_DBE, NTXT ("### dbeConvertSelObj: Dbe.cc:%d %s (%d) sel_obj=%s\n"),
+ __LINE__, dsp_type_to_string (type), type, sel_obj ? sel_obj->dump ()
+ : "NULL");
+ if (sel_obj == NULL)
+ return (Obj) NULL;
+ switch (type)
+ {
+ case DSP_FUNCTION:
+ return (Obj) sel_obj->convertto (Histable::FUNCTION);
+ case DSP_LINE:
+ return (Obj) sel_obj->convertto (Histable::LINE);
+ case DSP_SOURCE:
+ case DSP_SOURCE_V2:
+ {
+ SourceFile* srcCtx = NULL;
+ if (sel_obj->get_type () == Histable::INSTR)
+ {
+ DbeInstr* dbei = (DbeInstr *) sel_obj;
+ srcCtx = (SourceFile*) dbei->convertto (Histable::SOURCEFILE);
+ }
+ else if (sel_obj->get_type () == Histable::LINE)
+ {
+ DbeLine * dbel = (DbeLine *) sel_obj;
+ srcCtx = dbel->sourceFile;
+ }
+ sel_obj = sel_obj->convertto (Histable::LINE, srcCtx);
+ Dprintf (DEBUG_DBE, NTXT ("### dbeConvertSelObj: Dbe.cc:%d %s (%d) returns %s\n"),
+ __LINE__, dsp_type_to_string (type), type, sel_obj ? sel_obj->dump () : "NULL");
+ if (sel_obj && sel_obj->get_type () == Histable::LINE)
+ {
+ DbeLine * dbel = (DbeLine *) sel_obj;
+ return (Obj) dbel->dbeline_base;
+ }
+ return (Obj) sel_obj->convertto (Histable::LINE, srcCtx);
+ }
+ case DSP_PC:
+ case DSP_DISASM:
+ case DSP_DISASM_V2:
+ return (Obj) sel_obj->convertto (Histable::INSTR);
+ case DSP_SRC_FILE:
+ return (Obj) sel_obj->convertto (Histable::SOURCEFILE);
+ default:
+ abort ();
+ }
+ return (Obj) NULL;
+}
+
+uint64_t
+dbeGetSelObjV2 (int dbevindex, char *typeStr)
+{
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ Histable *obj = NULL;
+ if (typeStr != NULL)
+ {
+ if (streq (typeStr, NTXT ("FUNCTION")))
+ obj = dbev->get_sel_obj (Histable::FUNCTION);
+ else if (streq (typeStr, NTXT ("INSTRUCTION")))
+ obj = dbev->get_sel_obj (Histable::INSTR);
+ else if (streq (typeStr, NTXT ("SOURCELINE")))
+ obj = dbev->get_sel_obj (Histable::LINE);
+ else if (streq (typeStr, NTXT ("SOURCEFILE")))
+ obj = dbev->get_sel_obj (Histable::SOURCEFILE);
+ }
+ Dprintf (DEBUG_DBE, NTXT ("### dbeGetSelObjV2: Dbe.cc:%d %s returns %s\n"),
+ __LINE__, STR (typeStr), obj ? obj->dump () : "NULL");
+ return obj != NULL ? obj->id : (uint64_t) - 1;
+}
+
+Vector<uint64_t> *
+dbeGetSelObjsIO (int dbevindex, Vector<uint64_t> *ids, int type)
+{
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ Vector<uint64_t> *res = NULL;
+ Vector<uint64_t> *result = new Vector<uint64_t>();
+ for (int i = 0; i < ids->size (); i++)
+ {
+ res = dbeGetSelObjIO (dbevindex, ids->fetch (i), type);
+ if (res != NULL)
+ {
+ result->addAll (res);
+ delete res;
+ }
+ }
+ return result;
+}
+
+Vector<uint64_t> *
+dbeGetSelObjIO (int dbevindex, uint64_t id, int type)
+{
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ Histable *obj = NULL;
+ Vector<uint64_t> *res = NULL;
+ int size = 0;
+ switch (type)
+ {
+ case DSP_IOACTIVITY:
+ obj = dbev->get_sel_obj_io (id, Histable::IOACTFILE);
+ size = obj != NULL ? ((FileData*) obj)->getVirtualFds ()->size () : 0;
+ if (size)
+ {
+ res = new Vector<uint64_t>();
+ Vector<int64_t> *vfds = ((FileData*) obj)->getVirtualFds ();
+ for (int i = 0; i < size; i++)
+ res->append (vfds->fetch (i));
+ }
+ break;
+ case DSP_IOVFD:
+ obj = dbev->get_sel_obj_io (id, Histable::IOACTVFD);
+ if (obj)
+ {
+ res = new Vector<uint64_t>();
+ res->append (obj->id);
+ }
+ break;
+ case DSP_IOCALLSTACK:
+ obj = dbev->get_sel_obj_io (id, Histable::IOCALLSTACK);
+ if (obj)
+ {
+ Vector<Obj> *instrs = dbeGetStackPCs (dbevindex, obj->id);
+ if (instrs == NULL)
+ return NULL;
+ int stsize = instrs->size ();
+ res = new Vector<uint64_t>(stsize);
+ for (int i = 0; i < stsize; i++)
+ {
+ Histable *objFunc = (DbeInstr*) (instrs->fetch (i));
+ if (objFunc->get_type () != Histable::LINE)
+ {
+ objFunc = objFunc->convertto (Histable::FUNCTION);
+ res->insert (0, objFunc->id);
+ }
+ }
+ delete instrs;
+ }
+ break;
+ default:
+ break;
+ }
+ return res;
+}
+
+uint64_t
+dbeGetSelObjHeapTimestamp (int dbevindex, uint64_t id)
+{
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ Histable *obj = NULL;
+ uint64_t res = 0;
+ Vector<uint64_t> *peakStackIds;
+ Vector<hrtime_t> *peakTimestamps;
+
+ // Find and return the timestamp for the peak
+ bool foundPeakId = false;
+ if (id > 0)
+ {
+ obj = dbev->get_sel_obj_heap (0);
+ if (obj != NULL)
+ {
+ peakStackIds = ((HeapData*) obj)->getPeakStackIds ();
+ peakTimestamps = ((HeapData*) obj)->getPeakTimestamps ();
+ for (int i = 0; i < peakStackIds->size (); i++)
+ {
+ if (id == peakStackIds->fetch (i))
+ {
+ res = peakTimestamps->fetch (i);
+ foundPeakId = true;
+ break;
+ }
+ }
+ }
+ }
+
+ // Return the first timestamp for the peak
+ // if the callstack id is zero or it
+ // doesn't match with the peak stack id
+ if (id == 0 || !foundPeakId)
+ {
+ obj = dbev->get_sel_obj_heap (0);
+ res = obj != NULL ? ((HeapData*) obj)->getPeakTimestamps ()->fetch (0) : 0;
+ }
+ return res;
+}
+
+int
+dbeGetSelObjHeapUserExpId (int dbevindex, uint64_t id)
+{
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ Histable *obj = NULL;
+ int res = 0;
+ obj = dbev->get_sel_obj_heap (id);
+ res = obj != NULL ? ((HeapData*) obj)->getUserExpId () : 0;
+ return res;
+}
+
+//
+// Get index of selected function/object
+//
+int
+dbeGetSelIndex (int dbevindex, Obj sel_obj, int type, int subtype)
+{
+ Hist_data *data;
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ switch (type)
+ {
+ case DSP_FUNCTION:
+ data = dbev->func_data;
+ break;
+ case DSP_LINE:
+ data = dbev->line_data;
+ break;
+ case DSP_PC:
+ data = dbev->pc_data;
+ break;
+ case DSP_SOURCE:
+ case DSP_SOURCE_V2:
+ data = dbev->src_data;
+ break;
+ case DSP_DISASM:
+ case DSP_DISASM_V2:
+ data = dbev->dis_data;
+ break;
+ case DSP_DLAYOUT:
+ data = dbev->dlay_data;
+ break;
+ case DSP_DATAOBJ:
+ data = dbev->dobj_data;
+ break;
+ case DSP_MEMOBJ:
+ case DSP_INDXOBJ:
+ data = dbev->get_indxobj_data (subtype);
+ break;
+ default:
+ data = NULL;
+ break;
+ }
+ if (data == NULL || data->get_status () != Hist_data::SUCCESS)
+ return -1;
+
+ Histable *chk_obj = (Histable *) sel_obj;
+ Vector<Hist_data::HistItem*> *histItems = data->get_hist_items ();
+ if (histItems == NULL || chk_obj == NULL)
+ return -1;
+ for (int i = 0, sz = histItems->size (); i < sz; i++)
+ {
+ if (histItems->get (i)->obj == chk_obj)
+ return i;
+ if (histItems->get (i)->obj == NULL)
+ continue;
+ if (histItems->get (i)->obj->get_type () == Histable::LINE
+ && chk_obj->get_type () == Histable::LINE)
+ {
+ if (((DbeLine*) histItems->get (i)->obj)->convertto (Histable::FUNCTION)
+ == ((DbeLine*) chk_obj)->convertto (Histable::FUNCTION)
+ && ((DbeLine*) histItems->get (i)->obj)->lineno
+ == ((DbeLine*) chk_obj)->lineno)
+ return i;
+ }
+ else if (histItems->get (i)->obj->get_type () == Histable::INSTR
+ && chk_obj->get_type () == Histable::INSTR)
+ if (((DbeInstr*) histItems->get (i)->obj)->convertto (Histable::FUNCTION)
+ == ((DbeInstr*) chk_obj)->convertto (Histable::FUNCTION)
+ && ((DbeInstr*) histItems->get (i)->obj)->addr
+ == ((DbeInstr*) chk_obj)->addr)
+ return i;
+ }
+
+ Histable *chk_obj1 = NULL;
+ switch (type)
+ {
+ case DSP_FUNCTION:
+ chk_obj1 = chk_obj->convertto (Histable::FUNCTION);
+ break;
+ case DSP_LINE:
+ case DSP_SOURCE:
+ case DSP_SOURCE_V2:
+ chk_obj1 = chk_obj->convertto (Histable::LINE);
+ break;
+ case DSP_PC:
+ case DSP_DISASM:
+ case DSP_DISASM_V2:
+ chk_obj1 = chk_obj->convertto (Histable::INSTR);
+ break;
+ }
+ if (chk_obj1 && chk_obj != chk_obj1)
+ for (int i = 0, sz = histItems->size (); i < sz; i++)
+ if (histItems->get (i)->obj == chk_obj1)
+ return i;
+
+ if (type == DSP_LINE)
+ {
+ for (int i = 0, sz = histItems->size (); i < sz; i++)
+ if (histItems->get (i)->obj != NULL
+ && chk_obj->convertto (Histable::FUNCTION)
+ == histItems->get (i)->obj->convertto (Histable::FUNCTION))
+ return i;
+ }
+ else if (type == DSP_PC)
+ {
+ for (int i = 0, sz = histItems->size (); i < sz; i++)
+ if (histItems->get (i)->obj != NULL
+ && (histItems->get (i)->obj)->convertto (Histable::FUNCTION)
+ == (chk_obj)->convertto (Histable::FUNCTION)
+ && ((DbeLine*) histItems->get (i)->obj->convertto (Histable::LINE))->lineno
+ == ((DbeLine*) chk_obj->convertto (Histable::LINE))->lineno)
+ return i;
+ for (int i = 0, sz = histItems->size (); i < sz; i++)
+ if (histItems->get (i)->obj != NULL
+ && (histItems->get (i)->obj)->convertto (Histable::FUNCTION)
+ == (chk_obj)->convertto (Histable::FUNCTION))
+ return i;
+ }
+
+ // If we clicked on an mfunction line in the called-by call mini in user mode for omp
+ // we might not find that function in func data
+ if (dbev->isOmpDisMode () && type == DSP_FUNCTION)
+ {
+ int p = dbeGetSelIndex (dbevindex, sel_obj, DSP_DISASM, subtype);
+ if (p != -1)
+ return p;
+ }
+ return -1;
+}
+
+// Print data
+//
+char *
+dbePrintData (int dbevindex, int type, int subtype, char *printer,
+ char *fname, FILE *outfile)
+{
+ Histable *current_obj;
+ Function *func;
+ Module *module;
+ MetricList *mlist_orig;
+ bool header;
+ Print_params params;
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+
+ // Set print parameters
+ if (printer != NULL)
+ {
+ params.dest = DEST_PRINTER;
+ params.name = printer;
+ }
+ else if (outfile != NULL)
+ {
+ params.dest = DEST_OPEN_FILE;
+ params.openfile = outfile;
+ params.name = NULL;
+ }
+ else
+ {
+ params.dest = DEST_FILE;
+ params.name = fname;
+ if (*(params.name) == '\0')
+ {
+ free (params.name);
+ return dbe_strdup (GTXT ("Please enter the name of the file to which to print"));
+ }
+ }
+ params.ncopies = 1;
+ if (outfile != NULL)
+ header = false;
+ else
+ header = !(type == DSP_SOURCE || type == DSP_SOURCE_V2 || type == DSP_DISASM_V2);
+
+ params.header = header;
+
+ // figure out what kind of metrics to use
+ if (type == DSP_SELF || type == DSP_CALLER || type == DSP_CALLEE
+ || type == DSP_CALLTREE)
+ mlist_orig = dbev->get_metric_list (MET_CALL);
+ else if (type == DSP_DATAOBJ || type == DSP_DLAYOUT || type == DSP_MEMOBJ)
+ mlist_orig = dbev->get_metric_list (MET_DATA);
+ else if (type == DSP_INDXOBJ)
+ mlist_orig = dbev->get_metric_list (MET_INDX);
+ else if (type == DSP_IOACTIVITY || type == DSP_IOVFD
+ || type == DSP_IOCALLSTACK)
+ mlist_orig = dbev->get_metric_list (MET_IO);
+ else if (type == DSP_HEAPCALLSTACK)
+ mlist_orig = dbev->get_metric_list (MET_HEAP);
+ else
+ mlist_orig = dbev->get_metric_list (MET_NORMAL);
+
+ // make a compacted version of the input list
+ // the list will either be moved to the generated data,
+ // or freed below if it wasn't needed
+ MetricList *mlist = new MetricList (mlist_orig);
+ Hist_data *data = NULL;
+ er_print_common_display *cd = NULL;
+ int ix;
+ // Set data
+ switch (type)
+ {
+ case DSP_FUNCTION:
+ case DSP_LINE:
+ case DSP_PC:
+ case DSP_MEMOBJ:
+ case DSP_INDXOBJ:
+ case DSP_DATAOBJ:
+ data = dbev->get_hist_data (mlist,
+ ((type == DSP_FUNCTION) ? Histable::FUNCTION :
+ (type == DSP_LINE) ? Histable::LINE :
+ (type == DSP_PC) ? Histable::INSTR :
+ (type == DSP_INDXOBJ) ? Histable::INDEXOBJ :
+ (type == DSP_MEMOBJ) ? Histable::MEMOBJ
+ : Histable::DOBJECT),
+ subtype, Hist_data::ALL);
+ if (data->get_status () != Hist_data::SUCCESS)
+ return DbeView::status_str (DbeView::DBEVIEW_NO_DATA); // no strdup()
+
+ cd = new er_print_histogram (dbev, data, mlist, MODE_LIST,
+ dbev->get_limit (),
+ mlist->get_sort_name (), NULL, true, true);
+ break;
+ case DSP_DLAYOUT:
+ {
+ data = dbev->get_hist_data (mlist, Histable::DOBJECT, 0, Hist_data::LAYOUT);
+ if (data->get_status () != Hist_data::SUCCESS)
+ return DbeView::status_str (DbeView::DBEVIEW_NO_DATA); // no strdup()
+ cd = new er_print_histogram (dbev, data, mlist, MODE_ANNOTATED,
+ dbev->get_thresh_dis (),
+ mlist->get_sort_name (), NULL, true, true);
+ break;
+ }
+
+ // source and disassembly
+ case DSP_SOURCE:
+ case DSP_DISASM:
+ case DSP_SOURCE_V2:
+ case DSP_DISASM_V2:
+ if (dbev->sel_obj == NULL)
+ return NULL;
+ current_obj = dbev->sel_obj->convertto (Histable::FUNCTION);
+ if (current_obj->get_type () != Histable::FUNCTION)
+ return dbe_strdup (GTXT ("Not a real function; no source or disassembly available."));
+ func = (Function*) current_obj->convertto (Histable::FUNCTION);
+ if (func->flags & FUNC_FLAG_SIMULATED)
+ return dbe_strdup (GTXT ("Not a real function; no source or disassembly available."));
+ if (func->get_name () == NULL)
+ return dbe_strdup (GTXT ("Source location not recorded in experiment"));
+ module = func->module;
+ if (module == NULL || module->get_name () == NULL)
+ return dbe_strdup (GTXT ("Object name not recorded in experiment"));
+ ix = module->loadobject->seg_idx;
+ if (dbev->get_lo_expand (ix) == LIBEX_HIDE)
+ return dbe_strdup (GTXT ("No source or disassembly available for hidden object"));
+ cd = new er_print_histogram (dbev, dbev->func_data, mlist, MODE_ANNOTATED,
+ type == DSP_DISASM || type == DSP_DISASM_V2,
+ mlist->get_sort_name (),
+ func, false, false);
+ break;
+
+ // callers-callees
+ case DSP_SELF:
+ case DSP_CALLER:
+ case DSP_CALLEE:
+ if (dbev->sel_obj == NULL)
+ return NULL;
+ current_obj = dbev->sel_obj->convertto (Histable::FUNCTION);
+ cd = new er_print_histogram (dbev, dbev->func_data, mlist, MODE_GPROF, 1,
+ mlist->get_sort_name (), current_obj,
+ false, false);
+ break;
+
+ // statistics; this won't use the metric list copied above, so delete it
+ case DSP_STATIS:
+ cd = new er_print_experiment (dbev, 0, dbeSession->nexps () - 1,
+ true, true, true, true, false);
+ delete mlist;
+ break;
+ case DSP_EXP:
+ cd = new er_print_experiment (dbev, 0, dbeSession->nexps () - 1,
+ true, true, false, false, false);
+ delete mlist;
+ break;
+ case DSP_LEAKLIST:
+ cd = new er_print_leaklist (dbev, true, true, dbev->get_limit ());
+ delete mlist;
+ break;
+ case DSP_HEAPCALLSTACK:
+ cd = new er_print_heapactivity (dbev, Histable::HEAPCALLSTACK, false,
+ dbev->get_limit ());
+ delete mlist;
+ break;
+ case DSP_IOACTIVITY:
+ cd = new er_print_ioactivity (dbev, Histable::IOACTFILE, false,
+ dbev->get_limit ());
+ delete mlist;
+ break;
+ case DSP_IOVFD:
+ cd = new er_print_ioactivity (dbev, Histable::IOACTVFD, false,
+ dbev->get_limit ());
+ delete mlist;
+ break;
+
+ // the io call stack
+ case DSP_IOCALLSTACK:
+ cd = new er_print_ioactivity (dbev, Histable::IOCALLSTACK, false,
+ dbev->get_limit ());
+ delete mlist;
+ break;
+
+ // some unknown panel -- return an error string
+ default:
+ delete mlist;
+ return dbe_strdup (GTXT ("Print not available"));
+ }
+
+ // Start printing
+ char *buf = NULL;
+
+ // first open the file/device/whatever
+ if (cd->open (&params) == 0)
+ {
+ // now call the actual print routine
+ cd->data_dump ();
+ if (params.dest == DEST_PRINTER)
+ {
+ if (streq ((char *) params.name, NTXT ("-")))
+ {
+ // Special case - return report to the GUI
+ int maxbytes = 2 * 1024 * 1024; // IPC large buffer limit
+ char *report = cd->get_output (maxbytes);
+ delete data;
+ delete cd;
+ return report; // TEMPORARY
+ }
+ }
+ if (cd->print_output () == false)
+ buf = dbe_sprintf (NTXT ("%s: %s"),
+ GTXT ("Unable to submit print request to"),
+ params.name);
+ }
+ else
+ // if unable to set up the print, return an error
+ buf = dbe_sprintf (NTXT ("%s: %s"),
+ GTXT ("Unable to open file"),
+ params.name);
+
+ // dbe_free((void *) params.name); XXX when should this happen?
+ if (data)
+ if (data->isViewOwned () == false)
+ delete data;
+ delete cd;
+ return buf;
+}
+
+// Set limit for print data
+//
+char *
+dbeSetPrintLimit (int dbevindex, int limit)
+{
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ return (dbev->set_limit (limit));
+}
+
+// get limit for print data
+int
+dbeGetPrintLimit (int dbevindex)
+{
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ int limit = dbev->get_limit ();
+ return limit;
+}
+
+// set printmode for data
+char *
+dbeSetPrintMode (int dbevindex, char * pmode)
+{
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ char *r = dbev->set_printmode (pmode);
+ return r;
+}
+
+// get printmode for data
+int
+dbeGetPrintMode (int dbevindex)
+{
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ return (dbev->get_printmode ());
+}
+
+// get printmode for data
+char *
+dbeGetPrintModeString (int dbevindex)
+{
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ return ( dbev->get_printmode_str ());
+}
+
+// get print delimiter for csv data
+char
+dbeGetPrintDelim (int dbevindex)
+{
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ return (dbev->get_printdelimiter ());
+}
+
+// Set Source/Object/Load-Object file names
+static void
+set_file_names (Function *func, char *names[3])
+{
+ Module *module = func->module;
+ LoadObject *loadobject = module->loadobject;
+ if (loadobject == NULL)
+ loadobject = dbeSession->get_Unknown_LoadObject ();
+ free (names[0]);
+ free (names[1]);
+ free (names[2]);
+ SourceFile *sf = func->getDefSrc ();
+ char *src_name = sf->dbeFile->get_location_info ();
+ DbeFile *df = module->dbeFile;
+ if (df == NULL || (df->filetype & DbeFile::F_JAVACLASS) == 0)
+ df = module->loadobject->dbeFile;
+ char *lo_name = df->get_location_info ();
+ char *dot_o_name = lo_name;
+ if (module->dot_o_file)
+ dot_o_name = module->dot_o_file->dbeFile->get_location_info ();
+ names[0] = dbe_sprintf (NTXT ("%s: %s"), GTXT ("Source File"), src_name);
+ names[1] = dbe_sprintf (NTXT ("%s: %s"), GTXT ("Object File"), dot_o_name);
+ names[2] = dbe_sprintf (NTXT ("%s: %s"), GTXT ("Load Object"), lo_name);
+}
+
+// dbeSetFuncData
+// Master function to generate all Tab data for the analyzer
+// Returns the index of the selected item in the specified list
+//
+// After calling it to set up, the Analyzer calls dbeGetFuncList
+// to format the generated data and return the table
+// Most of the data is destined for a JTable
+//
+int
+dbeSetFuncData (int dbevindex, Obj sel_obj, int type, int subtype)
+{
+ MetricList *_mlist;
+ Histable *org_obj;
+ Hist_data *data = NULL;
+ int index, sel_index;
+ Function *func;
+ char *name;
+ int ix;
+
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ sel_index = -1;
+ dbev->resetOmpDisMode ();
+ dbev->error_msg = dbev->warning_msg = NULL;
+
+ // get metric list, make a compact duplicate
+ _mlist = dbev->get_metric_list (MET_NORMAL);
+ MetricList *mlist = new MetricList (_mlist);
+
+ // Remove old function/obj list data & Get new function/obj list data
+ org_obj = (Histable *) sel_obj;
+
+ // Figure out which "function" data is being asked for, i.e.,
+ // which of the analyzer displays is asking for data
+ switch (type)
+ {
+ // the various tables: functions, lines, PCs, DataObjects, IndexObjects
+ case DSP_FUNCTION:
+ case DSP_LINE:
+ case DSP_PC:
+ case DSP_DATAOBJ:
+ case DSP_MEMOBJ:
+ case DSP_INDXOBJ:
+ switch (type)
+ {
+ case DSP_FUNCTION:
+ if (dbev->func_data)
+ delete dbev->func_data;
+ dbev->func_data = data = dbev->get_hist_data (mlist,
+ Histable::FUNCTION, subtype, Hist_data::ALL);
+ break;
+ case DSP_LINE:
+ if (dbev->line_data)
+ delete dbev->line_data;
+ dbev->line_data = data = dbev->get_hist_data (mlist,
+ Histable::LINE, subtype, Hist_data::ALL);
+ break;
+ case DSP_PC:
+ if (dbev->pc_data)
+ delete dbev->pc_data;
+ dbev->pc_data = data = dbev->get_hist_data (mlist,
+ Histable::INSTR, subtype, Hist_data::ALL);
+ break;
+ case DSP_DATAOBJ:
+ if (dbev->dobj_data)
+ delete dbev->dobj_data;
+ mlist = dbev->get_metric_list (MET_DATA);
+ dbev->dobj_data = data = dbev->get_hist_data (mlist,
+ Histable::DOBJECT, subtype, Hist_data::ALL);
+ break;
+ case DSP_MEMOBJ:
+ mlist = dbev->get_metric_list (MET_DATA);
+ data = dbev->get_hist_data (mlist, Histable::MEMOBJ, subtype,
+ Hist_data::ALL);
+ dbev->indx_data->store (subtype, data);
+ break;
+ case DSP_INDXOBJ:
+ mlist = dbev->get_metric_list (MET_INDX);
+ data = dbev->get_hist_data (mlist, Histable::INDEXOBJ, subtype,
+ Hist_data::ALL);
+ dbev->indx_data->store (subtype, data);
+ break;
+ default:
+ break;
+ }
+
+ // Set the selection of row item
+ if (data->get_status () == Hist_data::SUCCESS)
+ {
+ // otherwise, look for it
+ sel_index = -1;
+ if (org_obj)
+ {
+ Hist_data::HistItem *hi;
+ Vec_loop (Hist_data::HistItem*, data->get_hist_items (), index, hi)
+ {
+ if (hi->obj == org_obj)
+ {
+ sel_index = index;
+ break;
+ }
+ }
+ if (sel_index == -1 && (type == DSP_LINE || type == DSP_PC))
+ {
+ Vec_loop (Hist_data::HistItem*, data->get_hist_items (), index, hi)
+ {
+ name = hi->obj->get_name ();
+ if (strcmp (name, NTXT ("<Total>")) &&
+ strcmp (name, GTXT ("<Unknown>")))
+ {
+ int done = 0;
+ switch (type)
+ {
+ case DSP_LINE:
+ if (org_obj->convertto (Histable::FUNCTION)
+ == hi->obj->convertto (Histable::FUNCTION))
+ {
+ sel_index = index;
+ done = 1;
+ }
+ break;
+ case DSP_PC:
+ if (hi->obj->convertto (Histable::FUNCTION)
+ == org_obj->convertto (Histable::FUNCTION)
+ && ((DbeLine*) hi->obj->convertto (Histable::LINE))->lineno
+ == ((DbeLine*) org_obj->convertto (Histable::LINE))->lineno)
+ {
+ sel_index = index;
+ done = 1;
+ }
+ break;
+ }
+ if (done)
+ break;
+ }
+ }
+ }
+ if (sel_index == -1 && type == DSP_PC)
+ {
+ Vec_loop (Hist_data::HistItem*, data->get_hist_items (), index, hi)
+ {
+ name = hi->obj->get_name ();
+ if (strcmp (name, NTXT ("<Total>")) &&
+ strcmp (name, GTXT ("<Unknown>")))
+ {
+ int done = 0;
+ if (hi->obj->convertto (Histable::FUNCTION) ==
+ org_obj->convertto (Histable::FUNCTION))
+ {
+ sel_index = index;
+ done = 1;
+ }
+ if (done)
+ break;
+ }
+ }
+ }
+ }
+ if (sel_index == -1)
+ {
+ Hist_data::HistItem *hi;
+ Vec_loop (Hist_data::HistItem*, data->get_hist_items (), index, hi)
+ {
+ name = hi->obj->get_name ();
+ if (strcmp (name, NTXT ("<Total>")) &&
+ strcmp (name, GTXT ("<Unknown>")))
+ {
+ sel_index = index;
+ break;
+ }
+ }
+ }
+ }
+ else
+ dbev->error_msg = DbeView::status_str (DbeView::DBEVIEW_NO_DATA);
+ return sel_index;
+ // the end of the code for the regular tables
+
+ // Data Layout
+ case DSP_DLAYOUT:
+ if (dbev->dlay_data)
+ delete dbev->dlay_data;
+ dbev->marks->reset ();
+ mlist = dbev->get_metric_list (MET_DATA);
+
+ // initial dobj list ...
+ data = dbev->get_hist_data (mlist, Histable::DOBJECT, subtype,
+ Hist_data::LAYOUT);
+ // .. provides metric data for layout
+ dbev->dlay_data = data = dbev->get_data_space ()->get_layout_data (data,
+ dbev->marks, dbev->get_thresh_dis ());
+ if (data->get_status () != Hist_data::SUCCESS)
+ dbev->error_msg = DbeView::status_str (DbeView::DBEVIEW_NO_DATA);
+ return sel_index;
+
+ // Source or disassembly
+ case DSP_SOURCE_V2:
+ case DSP_DISASM_V2:
+ case DSP_SOURCE:
+ case DSP_DISASM:
+ {
+ if (org_obj == NULL)
+ {
+ dbev->error_msg = DbeView::status_str (DbeView::DBEVIEW_NO_SEL_OBJ);
+ return sel_index;
+ }
+ if (org_obj->get_type () != Histable::FUNCTION)
+ {
+ dbev->error_msg = dbe_strdup (
+ GTXT ("Not a real function; no source or disassembly available."));
+ return sel_index;
+ }
+ func = (Function *) org_obj;
+ if (func->flags & FUNC_FLAG_SIMULATED)
+ {
+ dbev->error_msg = dbe_strdup (
+ GTXT ("Not a real function; no source or disassembly available."));
+ return sel_index;
+ }
+ if (func->get_name () == NULL)
+ {
+ dbev->error_msg = dbe_strdup (
+ GTXT ("Source location not recorded in experiment"));
+ return sel_index;
+ }
+ Module *module = func->module;
+ if ((module == NULL) || (module->get_name () == NULL))
+ {
+ dbev->error_msg = dbe_strdup (
+ GTXT ("Object name not recorded in experiment"));
+ return sel_index;
+ }
+ ix = module->loadobject->seg_idx;
+ if (dbev->get_lo_expand (ix) == LIBEX_HIDE)
+ {
+ dbev->error_msg = dbe_strdup (
+ GTXT ("No source or disassembly available for hidden object"));
+ return sel_index;
+ }
+
+ if ((type == DSP_DISASM || type == DSP_DISASM_V2)
+ && dbev->get_view_mode () == VMODE_USER
+ && dbeSession->is_omp_available ())
+ dbev->setOmpDisMode ();
+
+ dbev->marks->reset ();
+ SourceFile *srcContext = NULL;
+ switch (dbev->sel_obj->get_type ())
+ {
+ case Histable::FUNCTION:
+ {
+ Function *f = (Function *) dbev->sel_obj;
+ srcContext = f->getDefSrc ();
+ dbev->sel_binctx = f->module;
+ break;
+ }
+ case Histable::LINE:
+ {
+ DbeLine *dl = (DbeLine *) dbev->sel_obj;
+ srcContext = dl->sourceFile;
+ Function *f = dl->func;
+ if (f)
+ dbev->sel_binctx = f;
+ break;
+ }
+ case Histable::INSTR:
+ {
+ Function *f = (Function *) dbev->sel_obj->convertto (Histable::FUNCTION);
+ if (f)
+ {
+ dbev->sel_binctx = f;
+ srcContext = f->getDefSrc ();
+ }
+ break;
+ }
+ default:
+ break;
+ }
+ mlist = dbev->get_metric_list (MET_SRCDIS);
+
+ // for source and disassembly the name needs to be invisible,
+ // but that's handled in the module code
+ if (type == DSP_SOURCE)
+ {
+ if (dbev->src_data)
+ delete dbev->src_data;
+
+ // func_data computation needed for get_totals
+ if (dbev->func_data == NULL)
+ dbev->func_data = data = dbev->get_hist_data (mlist,
+ Histable::FUNCTION, subtype, Hist_data::ALL);
+ dbev->marks2dsrc->reset ();
+ dbev->marks2dsrc_inc->reset ();
+ data = dbev->src_data = module->get_data (dbev, mlist,
+ Histable::LINE, dbev->func_data->get_totals ()->value,
+ srcContext, func, dbev->marks,
+ dbev->get_thresh_src (), dbev->get_src_compcom (),
+ dbev->get_src_visible (), dbev->get_hex_visible (),
+ false, false, dbev->marks2dsrc, dbev->marks2dsrc_inc);
+ set_file_names (func, dbev->names_src);
+ if (srcContext)
+ {
+ free (dbev->names_src[0]);
+ dbev->names_src[0] = dbe_sprintf (GTXT ("Source File: %s"),
+ srcContext->dbeFile->get_location_info ());
+ }
+ Obj obj = (Obj) func->convertto (Histable::LINE, srcContext);
+ sel_index = dbeGetSelIndex (dbevindex, obj, type, subtype);
+ }
+ else
+ { /* type == DSP_DISASM */
+ if (dbev->dis_data)
+ delete dbev->dis_data;
+
+ // func_data computation needed for get_totals
+ if (dbev->func_data == NULL)
+ dbev->func_data = data = dbev->get_hist_data (mlist,
+ Histable::FUNCTION, subtype, Hist_data::ALL);
+ dbev->marks2ddis->reset ();
+ dbev->marks2ddis_inc->reset ();
+ data = dbev->dis_data = module->get_data (dbev, mlist,
+ Histable::INSTR, dbev->func_data->get_totals ()->value,
+ srcContext, func, dbev->marks, dbev->get_thresh_dis (),
+ dbev->get_dis_compcom (), dbev->get_src_visible (),
+ dbev->get_hex_visible (), dbev->get_func_scope (),
+ false, dbev->marks2ddis, dbev->marks2ddis_inc);
+ set_file_names (func, dbev->names_dis);
+ if (srcContext)
+ {
+ free (dbev->names_dis[0]);
+ dbev->names_dis[0] = dbe_sprintf (GTXT ("Source File: %s"),
+ srcContext->dbeFile->get_location_info ());
+ }
+ Obj obj = (Obj) func->convertto (Histable::INSTR);
+ sel_index = dbeGetSelIndex (dbevindex, obj, type, subtype);
+ }
+ return sel_index;
+ }
+
+ // the three cases for caller-callee
+ case DSP_SELF:
+ case DSP_CALLER:
+ case DSP_CALLEE:
+ if (org_obj == NULL)
+ {
+ dbev->error_msg = DbeView::status_str (DbeView::DBEVIEW_NO_SEL_OBJ);
+ return sel_index;
+ }
+
+ // Caller data
+ if (dbev->callers)
+ delete dbev->callers;
+ mlist = dbev->get_metric_list (MET_CALL);
+ dbev->callers = dbev->get_hist_data (mlist, Histable::FUNCTION, subtype,
+ Hist_data::CALLERS, org_obj);
+ if (dbev->callers->get_status () != Hist_data::SUCCESS)
+ {
+ dbev->error_msg = DbeView::status_str (DbeView::DBEVIEW_NO_DATA);
+ return sel_index;
+ }
+
+ // Callee data
+ if (dbev->callees)
+ delete dbev->callees;
+ dbev->callees = dbev->get_hist_data (mlist, Histable::FUNCTION, subtype,
+ Hist_data::CALLEES, org_obj);
+ if (dbev->callees->get_status () != Hist_data::SUCCESS)
+ {
+ dbev->error_msg = DbeView::status_str (DbeView::DBEVIEW_NO_DATA);
+ return sel_index;
+ }
+
+ // Center Function item
+ if (dbev->fitem_data)
+ delete dbev->fitem_data;
+ dbev->fitem_data = dbev->get_hist_data (mlist, Histable::FUNCTION, subtype,
+ Hist_data::SELF, org_obj);
+ if (dbev->fitem_data->get_status () != Hist_data::SUCCESS)
+ {
+ dbev->error_msg = DbeView::status_str (DbeView::DBEVIEW_NO_DATA);
+ return sel_index;
+ }
+ return sel_index;
+ default:
+ abort ();
+ }
+ return sel_index;
+}
+
+Vector<void*>*
+dbeGetTotals (int dbevindex, int dsptype, int subtype)
+{
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ MetricList *mlist = dbev->get_metric_list (dsptype, subtype);
+ Hist_data *data = dbev->get_hist_data (mlist, Histable::FUNCTION, 0,
+ Hist_data::ALL);
+ Hist_data::HistItem *totals = data->get_totals ();
+ Vector<void*> *tbl = new Vector<void*>(mlist->size ());
+ for (long i = 0, sz = mlist->size (); i < sz; i++)
+ {
+ Metric *m = mlist->get (i);
+ switch (m->get_vtype ())
+ {
+ case VT_DOUBLE:
+ {
+ Vector<double> *lst = new Vector<double>(1);
+ lst->append (totals->value[i].d);
+ tbl->append (lst);
+ break;
+ }
+ case VT_INT:
+ {
+ Vector<int> *lst = new Vector<int>(1);
+ lst->append (totals->value[i].i);
+ tbl->append (lst);
+ break;
+ }
+ case VT_LLONG:
+ case VT_ULLONG:
+ case VT_ADDRESS:
+ {
+ Vector<long long> *lst = new Vector<long long>(1);
+ lst->append (totals->value[i].ll);
+ tbl->append (lst);
+ break;
+ }
+ case VT_LABEL:
+ {
+ Vector<char *> *lst = new Vector<char *>(1);
+ Histable::NameFormat nfmt = dbev->get_name_format ();
+ lst->append (dbe_strdup (totals->obj->get_name (nfmt)));
+ tbl->append (lst);
+ break;
+ }
+ default:
+ abort ();
+ }
+ }
+ Vector<void*> *res = new Vector<void*>(2);
+ res->append (dbeGetMetricList (mlist));
+ res->append (tbl);
+ return res;
+}
+
+Vector<void*>*
+dbeGetHotMarks (int dbevindex, int type)
+{
+ Vector<void*>* table = new Vector<void*>(2);
+ Vector<int>* table0 = new Vector<int> ();
+ Vector<int>* table1 = new Vector<int> ();
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ return NULL;
+
+ switch (type)
+ {
+ case DSP_SOURCE:
+ case DSP_SOURCE_V2:
+ for (int i = 0; i < dbev->marks2dsrc->size (); i++)
+ {
+ table0->append (dbev->marks2dsrc->fetch (i).index1);
+ table1->append (dbev->marks2dsrc->fetch (i).index2);
+ }
+ break;
+ case DSP_DISASM:
+ case DSP_DISASM_V2:
+ for (int i = 0; i < dbev->marks2ddis->size (); i++)
+ {
+ table0->append (dbev->marks2ddis->fetch (i).index1);
+ table1->append (dbev->marks2ddis->fetch (i).index2);
+ }
+ break;
+ default:
+ break;
+ }
+ table->store (0, table0);
+ table->store (1, table1);
+ return table;
+}
+
+Vector<void*>*
+dbeGetHotMarksInc (int dbevindex, int type)
+{
+ Vector<void*>* table = new Vector<void*>(2);
+ Vector<int>* table0 = new Vector<int> ();
+ Vector<int>* table1 = new Vector<int> ();
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ return NULL;
+
+ switch (type)
+ {
+ case DSP_SOURCE:
+ case DSP_SOURCE_V2:
+ for (int i = 0; i < dbev->marks2dsrc_inc->size (); i++)
+ {
+ table0->append (dbev->marks2dsrc_inc->fetch (i).index1);
+ table1->append (dbev->marks2dsrc_inc->fetch (i).index2);
+ }
+ break;
+ case DSP_DISASM:
+ case DSP_DISASM_V2:
+ for (int i = 0; i < dbev->marks2ddis_inc->size (); i++)
+ {
+ table0->append (dbev->marks2ddis_inc->fetch (i).index1);
+ table1->append (dbev->marks2ddis_inc->fetch (i).index2);
+ }
+ break;
+ default:
+ break;
+ }
+ table->store (0, table0);
+ table->store (1, table1);
+ return table;
+}
+
+Vector<void*>*
+dbeGetSummaryHotMarks (int dbevindex, Vector<Obj> *sel_objs, int type)
+{
+ Vector<void*>* table = new Vector<void*>(2);
+ Vector<int>* table0 = new Vector<int> ();
+ Vector<int>* table1 = new Vector<int> ();
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ return NULL;
+ if (sel_objs == NULL || sel_objs->size () == 0)
+ return NULL;
+
+ Hist_data *data;
+ Vector<int_pair_t> *marks2d;
+ Vector<int_pair_t>* marks2d_inc;
+ switch (type)
+ {
+ case DSP_SOURCE:
+ case DSP_SOURCE_V2:
+ data = dbev->src_data;
+ marks2d = dbev->marks2dsrc;
+ marks2d_inc = dbev->marks2dsrc_inc;
+ break;
+ case DSP_DISASM:
+ case DSP_DISASM_V2:
+ data = dbev->dis_data;
+ marks2d = dbev->marks2ddis;
+ marks2d_inc = dbev->marks2ddis_inc;
+ break;
+ default:
+ data = NULL;
+ marks2d = NULL;
+ marks2d_inc = NULL;
+ break;
+ }
+ if (data == NULL || data->get_status () != Hist_data::SUCCESS
+ || marks2d_inc == NULL || marks2d == NULL)
+ return NULL;
+
+ MetricList *orig_mlist = data->get_metric_list ();
+ MetricList *prop_mlist = new MetricList (dbev->get_metric_ref (MET_NORMAL));
+ if (prop_mlist && dbev->comparingExperiments ())
+ prop_mlist = dbev->get_compare_mlist (prop_mlist, 0);
+ Metric *mitem;
+ int index, index2;
+ index2 = 0;
+ Vec_loop (Metric*, prop_mlist->get_items (), index, mitem)
+ {
+ if (mitem->get_subtype () == Metric::STATIC)
+ continue;
+
+ for (int i = 0; i < marks2d_inc->size (); i++)
+ {
+ int found = 0;
+ for (int j = 0; j < sel_objs->size (); j++)
+ {
+ int sel_index = (int) sel_objs->fetch (j);
+ int marked_index = marks2d_inc->fetch (i).index1;
+ if (sel_index == marked_index)
+ {
+ found = 1;
+ break;
+ }
+ }
+ if (!found)
+ continue;
+ int mindex = marks2d_inc->fetch (i).index2;
+ Metric *orig_metric = orig_mlist->get_items ()->fetch (mindex);
+ if (orig_metric->get_id () == mitem->get_id ()
+ && mitem->get_subtype () == Metric::INCLUSIVE)
+ {
+ table0->append (index2);
+ table1->append (1);
+ }
+ }
+
+ for (int i = 0; i < marks2d->size (); i++)
+ {
+ int found = 0;
+ for (int j = 0; j < sel_objs->size (); j++)
+ {
+ int sel_index = (int) sel_objs->fetch (j);
+ int marked_index = marks2d->fetch (i).index1;
+ if (sel_index == marked_index)
+ {
+ found = 1;
+ break;
+ }
+ }
+ if (!found)
+ continue;
+ int mindex = marks2d->fetch (i).index2;
+ Metric *orig_metric = orig_mlist->get_items ()->fetch (mindex);
+ if (orig_metric->get_id () == mitem->get_id ()
+ && mitem->get_subtype () == Metric::EXCLUSIVE)
+ {
+ table0->append (index2);
+ table1->append (0);
+ }
+ }
+ if (!(mitem->get_subtype () == Metric::EXCLUSIVE
+ || mitem->get_subtype () == Metric::DATASPACE))
+ index2++;
+ }
+ table->store (0, table0);
+ table->store (1, table1);
+ return table;
+}
+
+// Get a vector of function ids of data(begin, begin + length - 1)
+// Currently only support source/disassembly view
+Vector<uint64_t>*
+dbeGetFuncId (int dbevindex, int type, int begin, int length)
+{
+ Vector<uint64_t>* table = new Vector<uint64_t > ();
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+
+ Hist_data *data;
+ Function* given_func = NULL;
+ switch (type)
+ {
+ case DSP_SOURCE:
+ case DSP_SOURCE_V2:
+ data = dbev->src_data;
+ break;
+ case DSP_DISASM:
+ case DSP_DISASM_V2:
+ data = dbev->dis_data;
+ break;
+ default:
+ data = NULL;
+ abort ();
+ }
+
+ if (data == NULL || data->get_status () != Hist_data::SUCCESS)
+ return NULL;
+
+ if (begin < 0 || begin + length > data->size ())
+ return NULL;
+
+ switch (type)
+ {
+ case DSP_SOURCE:
+ case DSP_SOURCE_V2:
+ case DSP_DISASM:
+ case DSP_DISASM_V2:
+ {
+ for (int i = begin; i < begin + length; i++)
+ {
+ given_func = NULL;
+ Histable * sel_obj = data->fetch (i)->obj;
+ if (sel_obj != NULL)
+ given_func = (Function*) (sel_obj)->convertto (Histable::FUNCTION, (Histable*) dbev);
+ if (given_func == NULL)
+ table->append (0);
+ else
+ table->append (given_func->id);
+ }
+ }
+ break;
+ default:
+ abort ();
+ }
+ return table;
+}
+
+Vector<void*>*
+dbeGetFuncCallerInfo (int dbevindex, int type, Vector<int>* idxs, int groupId)
+{
+ Vector<void*>* data = new Vector<void*>();
+ if (type == DSP_SOURCE_V2 || type == DSP_DISASM_V2)
+ {
+ Obj sel_func = dbeGetSelObj (dbevindex, DSP_FUNCTION, 0);
+ if (sel_func == 0)
+ return data;
+ Vector<Obj> * cmpObjs = dbeGetComparableObjsV2 (dbevindex, sel_func, type);
+ if (cmpObjs == NULL)
+ return data;
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ int mtype = MET_COMMON | COMPARE_BIT | ((groupId + 1) << GROUP_ID_SHIFT);
+ MetricList *mlist = dbev->get_metric_list ((MetricType) (mtype & MTYPE_MASK),
+ (mtype & COMPARE_BIT) != 0,
+ mtype >> GROUP_ID_SHIFT);
+ Histable *selObj = (Histable *) cmpObjs->fetch (groupId);
+ int subtype = 0;
+ Hist_data *hist_data = dbev->get_data (mlist, selObj, type, subtype);
+ if (hist_data == NULL)
+ return data;
+ }
+ for (int i = 0; i < idxs->size (); i++)
+ data->append (dbeGetFuncCallerInfoById (dbevindex, type, idxs->fetch (i)));
+ return data;
+}
+
+//
+// Get Table of Caller info:
+// param: idx -- selected AT_FUNC row
+// return: callsite_id, callsite_name (function: file: line)
+Vector<void*>*
+dbeGetFuncCallerInfoById (int dbevindex, int type, int idx)
+{
+ Vector<void*>* table = new Vector<void*>(3);
+ Vector<uint64_t>* table0 = new Vector<uint64_t> ();
+ Vector<int>* table1 = new Vector<int> ();
+ Vector<char*>* table2 = new Vector<char*>();
+
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ Hist_data *data;
+ Function* given_func = NULL;
+ Vector<Histable*> *instr_info = NULL;
+ switch (type)
+ {
+ case DSP_SOURCE:
+ case DSP_SOURCE_V2:
+ data = dbev->src_data;
+ break;
+ case DSP_DISASM:
+ case DSP_DISASM_V2:
+ data = dbev->dis_data;
+ break;
+ default:
+ data = NULL;
+ abort ();
+ }
+ if (data == NULL || data->get_status () != Hist_data::SUCCESS)
+ return NULL;
+
+ if (idx < 0 || idx >= data->size ())
+ return NULL;
+ switch (type)
+ {
+ case DSP_SOURCE:
+ case DSP_SOURCE_V2:
+ case DSP_DISASM:
+ case DSP_DISASM_V2:
+ {
+ Histable * sel_obj = data->fetch (idx)->obj;
+ if (sel_obj == NULL)
+ return NULL;
+ given_func = (Function*) (sel_obj)->convertto (Histable::FUNCTION, (Histable*) dbev);
+ if (given_func == NULL)
+ return NULL;
+ PathTree * ptree = dbev->get_path_tree ();
+ if (ptree == NULL)
+ return NULL;
+ instr_info = ptree->get_clr_instr (given_func);
+ DefaultMap<uint64_t, int> * line_seen = new DefaultMap<uint64_t, int>();
+ for (int j = 0; j < ((Vector<Histable*>*)instr_info)->size (); j++)
+ {
+ Histable *instr = ((Vector<Histable*>*)instr_info)->fetch (j);
+ Function *cur_func = NULL;
+ if (instr->get_type () == Histable::INSTR)
+ cur_func = ((DbeInstr*) instr)->func;
+ else if (instr->get_type () == Histable::LINE)
+ cur_func = ((DbeLine*) instr)->func;
+ if (cur_func == NULL || (cur_func->flags & FUNC_FLAG_SIMULATED))
+ continue; // skip functions like <Total>
+ Histable* line;
+ switch (type)
+ {
+ case DSP_SOURCE:
+ case DSP_SOURCE_V2:
+ if (cur_func != NULL)
+ {
+ SourceFile *sourceFile = cur_func->getDefSrc ();
+ if (sourceFile == NULL ||
+ (sourceFile->flags & SOURCE_FLAG_UNKNOWN) != 0)
+ continue; // skip functions like <Function: %s, instructions without line numbers>
+ }
+ line = instr->convertto (Histable::LINE, NULL);
+ break;
+ case DSP_DISASM:
+ case DSP_DISASM_V2:
+ line = instr->convertto (Histable::INSTR, NULL);
+ break;
+ default:
+ abort ();
+ }
+ uint64_t func_id = cur_func->id;
+ uint64_t line_id = instr->id;
+ int is_null = 0;
+ int line_no = -1;
+ switch (type)
+ {
+ case DSP_SOURCE:
+ case DSP_SOURCE_V2:
+ is_null = (((DbeLine*) line)->func == NULL) ? 1 : 0;
+ if (is_null)
+ ((DbeLine*) line)->func = cur_func;
+ line_no = ((DbeLine*) line)->lineno;
+ if (line_seen->get (line_id) == 0)
+ {
+ line_seen->put (line_id, 1);
+ table0->append (func_id);
+ table1->append (line_no);
+ Histable::NameFormat nfmt = dbev->get_name_format ();
+ table2->append (dbe_strdup (line->get_name (nfmt)));
+ }
+ if (is_null)
+ ((DbeLine*) line)->func = NULL;
+ break;
+ case DSP_DISASM:
+ case DSP_DISASM_V2:
+ is_null = (((DbeInstr*) line)->func == NULL) ? 1 : 0;
+ if (is_null)
+ ((DbeInstr*) line)->func = cur_func;
+ line_no = ((DbeInstr*) line)->addr;
+ if (line_seen->get (line_id) == 0)
+ {
+ line_seen->put (line_id, 1);
+ table0->append (func_id);
+ table1->append (line_no);
+ Histable::NameFormat nfmt = dbev->get_name_format ();
+ table2->append (dbe_strdup (line->get_name (nfmt)));
+ }
+ if (is_null)
+ ((DbeInstr*) line)->func = NULL;
+ break;
+ default:
+ abort ();
+ }
+ }
+ delete line_seen;
+ delete instr_info;
+ }
+ break;
+ default:
+ abort ();
+ }
+ table->store (0, table0);
+ table->store (1, table1);
+ table->store (2, table2);
+ return table;
+}
+
+Vector<void*>*
+dbeGetFuncCalleeInfo (int dbevindex, int type, Vector<int>* idxs, int groupId)
+{
+ Vector<void*>* data = new Vector<void*>();
+ if (type == DSP_SOURCE_V2 || type == DSP_DISASM_V2)
+ {
+ Obj sel_func = dbeGetSelObj (dbevindex, DSP_FUNCTION, 0);
+ if (sel_func == 0)
+ return data;
+ Vector<Obj> * cmpObjs = dbeGetComparableObjsV2 (dbevindex, sel_func, type);
+ if (cmpObjs == NULL)
+ return data;
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ int mtype = MET_COMMON | COMPARE_BIT | ((groupId + 1) << GROUP_ID_SHIFT);
+ MetricList *mlist = dbev->get_metric_list ((MetricType) (mtype & MTYPE_MASK),
+ (mtype & COMPARE_BIT) != 0,
+ mtype >> GROUP_ID_SHIFT);
+ Histable *selObj = (Histable *) cmpObjs->fetch (groupId);
+ int subtype = 0;
+ Hist_data *hist_data = dbev->get_data (mlist, selObj, type, subtype);
+ if (hist_data == NULL)
+ return data;
+ }
+
+ for (int i = 0; i < idxs->size (); i++)
+ data->append (dbeGetFuncCalleeInfoById (dbevindex, type, idxs->fetch (i)));
+ return data;
+}
+
+//
+// Get Table of Callee info:
+// param: idx -- selected AT_FUNC row
+// return: callsite_row, callee_id, callee_name
+//
+Vector<void*>*
+dbeGetFuncCalleeInfoById (int dbevindex, int type, int idx)
+{
+ Vector<void*>* table = new Vector<void*>(3);
+ Vector<int>* table0 = new Vector<int>();
+ Vector<uint64_t>* table1 = new Vector<uint64_t > ();
+ Vector<char*>* table2 = new Vector<char*>();
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ Hist_data *data;
+ Function* given_func = NULL;
+ Vector<Histable*> *instr_info = NULL;
+ Vector<void*> *func_info = NULL;
+
+ switch (type)
+ {
+ case DSP_SOURCE:
+ case DSP_SOURCE_V2:
+ data = dbev->src_data;
+ break;
+ case DSP_DISASM:
+ case DSP_DISASM_V2:
+ data = dbev->dis_data;
+ break;
+ default:
+ data = NULL;
+ abort ();
+ }
+ if (data == NULL || data->get_status () != Hist_data::SUCCESS)
+ return NULL;
+ if (idx < 0 || idx >= data->size ())
+ return NULL;
+ switch (type)
+ {
+ case DSP_SOURCE:
+ case DSP_SOURCE_V2:
+ case DSP_DISASM:
+ case DSP_DISASM_V2:
+ {
+ Histable * sel_obj = data->fetch (idx)->obj;
+ if (sel_obj == NULL)
+ return NULL;
+ given_func = (Function*) (sel_obj)->convertto (Histable::FUNCTION, (Histable*) dbev);
+ if (given_func == NULL)
+ return NULL;
+ PathTree * ptree = dbev->get_path_tree ();
+ if (ptree == NULL)
+ return NULL;
+ Vector<Histable*> *instrs = NULL;
+ Vector<void*> *callee_instrs = ptree->get_cle_instr (given_func, instrs);
+ func_info = new Vector<void*>();
+ instr_info = new Vector<Histable*>();
+ for (long a = 0, sz_a = callee_instrs ? callee_instrs->size () : 0; a < sz_a; a++)
+ {
+ Vector<Histable*> *temp = ((Vector<Vector<Histable*>*>*)callee_instrs)->get (a);
+ DefaultMap<Function*, int> * func_seen = new DefaultMap<Function*, int>();
+ Histable* instr0 = (Histable*) instrs->fetch (a);
+ for (long b = 0, sz_b = temp ? temp->size () : 0; b < sz_b; b++)
+ {
+ Histable *instr = temp->get (b);
+ if (instr->get_type () == Histable::INSTR)
+ {
+ Function* func1 = ((DbeInstr *) instr)->func;
+ func_seen->put (func1, 1);
+ }
+ else if (instr->get_type () == Histable::LINE)
+ {
+ Function* func1 = ((DbeLine *) instr)->func;
+ func_seen->put (func1, 1);
+ }
+ }
+ Vector<Function*> *funcs = func_seen->keySet ();
+ delete func_seen;
+ if (funcs->size () > 0)
+ {
+ instr_info->append (instr0);
+ func_info->append (funcs);
+ }
+ }
+ delete instrs;
+ destroy (callee_instrs);
+
+ DefaultMap<uint64_t, Vector<int>* > * instr_idxs = new DefaultMap<uint64_t, Vector<int>* >();
+ DefaultMap<uint64_t, int> * func_idxs = new DefaultMap<uint64_t, int>();
+ for (long j = 0, sz_j = instr_info ? instr_info->size () : 0; j < sz_j; j++)
+ {
+ Histable *instr = instr_info->get (j);
+ Function *cur_func = NULL;
+ if (instr->get_type () == Histable::INSTR)
+ cur_func = ((DbeInstr*) instr)->func;
+ else if (instr->get_type () == Histable::LINE)
+ cur_func = ((DbeLine*) instr)->func;
+ if (cur_func != NULL && (cur_func->flags & FUNC_FLAG_SIMULATED))
+ continue; // skip functions like <Total>
+ Histable* line;
+ switch (type)
+ {
+ case DSP_SOURCE:
+ case DSP_SOURCE_V2:
+ if (cur_func != NULL)
+ {
+ SourceFile *sourceFile = cur_func->getDefSrc ();
+ if (sourceFile == NULL ||
+ (sourceFile->flags & SOURCE_FLAG_UNKNOWN) != 0)
+ // skip functions like <Function: %s, instructions without line numbers>
+ continue;
+ }
+ line = instr->convertto (Histable::LINE, NULL);
+ if (type == DSP_SOURCE_V2)
+ line = dbev->get_compare_obj (line);
+ break;
+ case DSP_DISASM:
+ case DSP_DISASM_V2:
+ line = instr;
+ if (type == DSP_DISASM_V2)
+ line = dbev->get_compare_obj (line);
+ break;
+ default:
+ abort ();
+ }
+ if (func_idxs->get (line->id) == 0)
+ {
+ func_idxs->put (line->id, 1);
+ Vector<int> *temp_idx = new Vector<int>();
+ temp_idx->append (j);
+ instr_idxs->put (line->id, temp_idx);
+ }
+ else
+ {
+ Vector<int> *temp_idx = instr_idxs->get (line->id);
+ temp_idx->append (j);
+ }
+ }
+ for (long i = 0; i < data->size (); i++)
+ {
+ Histable* line = data->fetch (i)->obj;
+ if (line == NULL)
+ continue;
+ Vector<int> * instr_idx = instr_idxs->get (line->id);
+ if (instr_idx == NULL)
+ continue;
+ for (long j = 0; j < instr_idx->size (); j++)
+ {
+ Vector<void*>* callee_funcs_vec = (Vector<void*>*)func_info;
+ if (callee_funcs_vec->size () == 0)
+ continue;
+ Vector<Function*>* callee_funcs_value = (Vector<Function*>*)callee_funcs_vec->fetch (instr_idx->fetch (j));
+ for (int k = 0; callee_funcs_value != NULL && k < callee_funcs_value->size (); k++)
+ {
+ uint64_t funcobj_id = ((Function*) callee_funcs_value->fetch (k))->id;
+ int old_size = table0->size ();
+ if (old_size > 0 && i == table0->fetch (old_size - 1)
+ && funcobj_id == table1->fetch (old_size - 1))
+ continue;
+ table0->append (i);
+ table1->append (funcobj_id);
+ table2->append (dbe_strdup (((Function*) callee_funcs_value->fetch (k))->get_name ()));
+ }
+ }
+ }
+ delete instr_idxs;
+ delete func_idxs;
+ destroy (func_info);
+ delete instr_info;
+ }
+ break;
+ default:
+ abort ();
+ }
+ table->store (0, table0);
+ table->store (1, table1);
+ table->store (2, table2);
+ return table;
+}
+
+//
+// Get Table of Function List data with only total values
+//
+Vector<void*> *
+dbeGetFuncListMini (int dbevindex, int type, int /*subtype*/)
+{
+ Hist_data *data;
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ switch (type)
+ {
+ case DSP_FUNCTION:
+ data = dbev->func_data;
+ break;
+ default:
+ data = NULL;
+ break;
+ }
+ if (data == NULL || data->get_status () != Hist_data::SUCCESS)
+ return NULL;
+
+ MetricList *mlist = data->get_metric_list ();
+
+ // Get table size: count visible metrics
+ int nvisible = 0;
+ for (long i = 0, sz = mlist->size (); i < sz; i++)
+ {
+ Metric *m = mlist->get (i);
+ if (m->is_visible () || m->is_tvisible () || m->is_pvisible ())
+ nvisible++;
+ }
+ Vector<void*> *table = new Vector<void*>(nvisible + 1);
+
+ // Fill function list elements
+ Hist_data::HistItem *totals = data->get_totals ();
+ for (long i = 0, sz = mlist->size (); i < sz; i++)
+ {
+ Metric *m = mlist->get (i);
+ if (!m->is_visible () && !m->is_tvisible () && !m->is_pvisible ())
+ continue;
+ TValue res;
+ TValue *v = data->get_value (&res, i, totals);
+ if ((m->get_visbits () & VAL_RATIO) != 0)
+ {
+ Vector<double> *col = new Vector<double>(1);
+ double d = (v->tag != VT_LABEL) ? v->to_double () : 100.; // NaN
+ col->append (d);
+ table->append (col);
+ continue;
+ }
+ switch (m->get_vtype ())
+ {
+ case VT_INT:
+ {
+ Vector<int> *col = new Vector<int>(1);
+ col->append (v->i);
+ table->append (col);
+ break;
+ }
+ case VT_ADDRESS:
+ case VT_ULLONG:
+ case VT_LLONG:
+ {
+ Vector<long long> *col = new Vector<long long>(1);
+ col->append (v->ll);
+ table->append (col);
+ break;
+ }
+ case VT_LABEL:
+ {
+ Vector<char *> *col = new Vector<char *>(1);
+ col->append (dbe_strdup (v->l));
+ table->append (col);
+ break;
+ }
+ case VT_DOUBLE:
+ default:
+ {
+ Vector<double> *col = new Vector<double>(1);
+ col->append (v->d);
+ table->append (col);
+ break;
+ }
+ }
+ }
+ table->append (NULL);
+ return table;
+}
+
+// Get Table of Function List data
+Vector<void*> *
+dbeGetFuncList (int dbevindex, int type, int subtype)
+{
+ MetricList *mlist;
+ Metric *mitem;
+ int nitems, nvisible;
+ int index, index2, nv;
+ char *cell;
+ Vector<int> *ji_list;
+ Hist_data *data;
+ Hist_data::HistItem *item;
+
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+
+ // fprintf(stderr, NTXT("XXX dbeGetFuncList, FuncListDisp_type = %d\n"), type);
+ switch (type)
+ {
+ case DSP_FUNCTION:
+ data = dbev->func_data;
+ break;
+ case DSP_LINE:
+ data = dbev->line_data;
+ break;
+ case DSP_PC:
+ data = dbev->pc_data;
+ break;
+ case DSP_SOURCE:
+ case DSP_SOURCE_V2:
+ data = dbev->src_data;
+ break;
+ case DSP_DISASM:
+ case DSP_DISASM_V2:
+ data = dbev->dis_data;
+ break;
+ case DSP_SELF:
+ data = dbev->fitem_data;
+ break;
+ case DSP_CALLER:
+ data = dbev->callers;
+ break;
+ case DSP_CALLEE:
+ data = dbev->callees;
+ break;
+ case DSP_DLAYOUT:
+ data = dbev->dlay_data;
+ break;
+ case DSP_DATAOBJ:
+ data = dbev->dobj_data;
+ break;
+ case DSP_MEMOBJ:
+ case DSP_INDXOBJ:
+ data = dbev->get_indxobj_data (subtype);
+ break;
+ default:
+ data = NULL;
+ break;
+ }
+ if (data == NULL || data->get_status () != Hist_data::SUCCESS)
+ return NULL;
+ mlist = data->get_metric_list ();
+
+ // Get table size: count visible metrics
+ nitems = data->size ();
+ nvisible = 0;
+ Vec_loop (Metric*, mlist->get_items (), index, mitem)
+ {
+ if (mitem->is_visible () || mitem->is_tvisible () || mitem->is_pvisible ())
+ nvisible++;
+ }
+
+ // Initialize Java String array
+ Vector<void*> *table = new Vector<void*>(nvisible + 1);
+
+ // Mark Hi-value metric items for annotated src/dis/layout
+ if (type == DSP_SOURCE || type == DSP_DISASM || type == DSP_DLAYOUT
+ || type == DSP_SOURCE_V2 || type == DSP_DISASM_V2)
+ {
+ ji_list = new Vector<int>(nitems);
+
+ if (dbev->marks->size () > 0)
+ index = dbev->marks->fetch (0);
+ else
+ index = -1;
+ int mindex = 0;
+ for (index2 = 0; index2 < nitems; index2++)
+ {
+ item = data->fetch (index2);
+ if (index2 == index)
+ {
+ ji_list->store (index2, -item->type);
+ if (++mindex < dbev->marks->size ())
+ index = dbev->marks->fetch (mindex);
+ else
+ index = -1;
+ }
+ else
+ ji_list->store (index2, item->type);
+ }
+ table->store (nvisible, ji_list);
+ }
+ else
+ table->store (nvisible, NULL);
+
+ // Fill function list elements
+ nv = 0;
+
+ Vec_loop (Metric*, mlist->get_items (), index, mitem)
+ {
+ if (!mitem->is_visible () && !mitem->is_tvisible () &&
+ !mitem->is_pvisible ())
+ continue;
+
+ // Fill values
+ switch (mitem->get_vtype ())
+ {
+ case VT_LABEL:
+ {
+ Vector<char*> *jobjects = new Vector<char*>(nitems);
+ char *buf = NULL;
+ size_t bufsz = 0;
+ int lspace = 0;
+ if (type == DSP_SOURCE || type == DSP_DISASM || type == DSP_SOURCE_V2
+ || type == DSP_DISASM_V2)
+ {
+ // if this is source or disassembly, where we'll insert
+ // a preface into the output line, figure out how wide
+ // it needs to be
+ // first, scan all the lines, to get the maximum line number
+ bufsz = 1024;
+ buf = (char *) malloc (bufsz);
+ int max_lineno = 0;
+ int hidx;
+ Hist_data::HistItem *hitem;
+ Vec_loop (Hist_data::HistItem*, data, hidx, hitem)
+ {
+ if (!hitem->obj)
+ continue;
+ if (hitem->obj->get_type () == Histable::LINE &&
+ ((DbeLine*) hitem->obj)->lineno > max_lineno)
+ max_lineno = ((DbeLine*) hitem->obj)->lineno;
+ else if (hitem->obj->get_type () == Histable::INSTR
+ && ((DbeInstr*) hitem->obj)->lineno > max_lineno)
+ max_lineno = ((DbeInstr*) hitem->obj)->lineno;
+ }
+
+ // we have the maximum integer over all linenumbers in the file
+ // figure out how many digits are needed
+ lspace = snprintf (buf, bufsz, NTXT ("%d"), max_lineno);
+ }
+ for (index2 = 0; index2 < nitems; index2++)
+ {
+ item = data->fetch (index2);
+ if (type == DSP_DLAYOUT)
+ cell = dbe_strdup (((DataObject*) (item->obj))->get_offset_name ());
+ else if (type == DSP_SOURCE || type == DSP_DISASM || type == DSP_SOURCE_V2 || type == DSP_DISASM_V2)
+ {
+ // This code is duplicated in output.cc, yet it's
+ // intended for presentation purpose and thus is
+ // potentially different for er_print and analyzer.
+ switch (item->type)
+ {
+ case Module::AT_SRC_ONLY:
+ case Module::AT_SRC:
+ if (item->obj == NULL)
+ snprintf (buf, bufsz, NTXT (" %*c. "), lspace, ' ');
+ else
+ snprintf (buf, bufsz, NTXT (" %*d. "), lspace, ((DbeLine*) item->obj)->lineno);
+ break;
+ case Module::AT_FUNC:
+ case Module::AT_QUOTE:
+ snprintf (buf, bufsz, NTXT ("%*c"), lspace + 3, ' ');
+ break;
+ case Module::AT_DIS:
+ case Module::AT_DIS_ONLY:
+ if (item->obj == NULL || ((DbeInstr*) item->obj)->lineno == -1)
+ snprintf (buf, bufsz, NTXT ("%*c[%*s] "), lspace + 3, ' ', lspace, NTXT ("?"));
+ else
+ snprintf (buf, bufsz, NTXT ("%*c[%*d] "), lspace + 3, ' ', lspace,
+ ((DbeInstr*) item->obj)->lineno);
+ break;
+ case Module::AT_COM:
+ case Module::AT_EMPTY:
+ *buf = (char) 0;
+ break;
+ }
+ // get the line's text
+ char *s = item->value[index].l;
+ if (s != NULL)
+ {
+ // copy the string expanding all tabulations
+ // (JTable doesn't render them)
+ char *d = buf + strlen (buf);
+ char c;
+ size_t column = 0;
+ do
+ {
+ c = *s++;
+ if (c == '\t')
+ {
+ do
+ {
+ *d++ = ' ';
+ column++;
+ }
+ while (column & 07);
+ }
+ else
+ {
+ *d++ = c;
+ column++;
+ }
+ if (column + 32 > bufsz)
+ {
+ // Reallocate the buffer
+ size_t curlen = d - buf;
+ bufsz += 1024;
+ char *buf_new = (char *) malloc (bufsz);
+ strncpy (buf_new, buf, curlen);
+ buf_new[curlen] = '\0';
+ free (buf);
+ buf = buf_new;
+ d = buf + curlen;
+ }
+ }
+ while (c != (char) 0);
+ }
+ cell = dbe_strdup (buf);
+ free (item->value[index].l);
+ item->value[index].l = NULL; //YXXX missing from dbeGetFuncListV2
+ }
+ else
+ {
+ // omazur: why don't we have it as metric value
+ Histable::NameFormat nfmt = dbev->get_name_format ();
+ cell = dbe_strdup (item->obj->get_name (nfmt));
+ }
+ jobjects->store (index2, cell);
+ }
+ if (type == DSP_SOURCE || type == DSP_DISASM || type == DSP_SOURCE_V2
+ || type == DSP_DISASM_V2)
+ free (buf);
+ table->store (nv++, jobjects);
+ break;
+ }
+ default:
+ table->store (nv++, dbeGetTableDataOneColumn (data, index));
+ break;
+ }
+ }
+ return table;
+}
+
+Vector<Obj> *
+dbeGetComparableObjsV2 (int /* dbevindex */, Obj sel_obj, int type)
+{
+ long grsize = dbeSession->expGroups->size ();
+ Vector<Obj> *res = new Vector<Obj> (grsize + 1);
+ for (long j = 0; j < grsize; j++)
+ res->append ((Obj) NULL);
+ res->append (sel_obj);
+ Histable *obj = (Histable *) sel_obj;
+ if (obj == NULL)
+ return res;
+ Function *func = (Function *) obj->convertto (Histable::FUNCTION);
+ if (func == NULL)
+ return res;
+ Vector<Histable *> *cmpObjs = func->get_comparable_objs ();
+ if (cmpObjs == NULL || cmpObjs->size () != grsize)
+ return res;
+
+ Histable::Type conv_type = (type == DSP_SOURCE || type == DSP_SOURCE_V2) ?
+ Histable::LINE : Histable::INSTR;
+ switch (obj->get_type ())
+ {
+ case Histable::FUNCTION:
+ for (long j = 0; j < grsize; j++)
+ res->store (j, (Obj) cmpObjs->get (j));
+ return res;
+ case Histable::INSTR:
+ case Histable::LINE:
+ {
+ SourceFile *srcContext = (SourceFile *) obj->convertto (Histable::SOURCEFILE);
+ char *bname = get_basename (srcContext->get_name ());
+ for (long j = 0; j < grsize; j++)
+ {
+ Function *func1 = (Function *) cmpObjs->get (j);
+ if (func == func1)
+ {
+ if (conv_type == Histable::LINE)
+ res->store (j, (Obj) obj);
+ else
+ res->store (j, (Obj) obj->convertto (conv_type, srcContext));
+ continue;
+ }
+ if (func1 == NULL)
+ continue;
+ Vector<SourceFile*> *sources = func1->get_sources ();
+ SourceFile *sf = NULL;
+ for (long j1 = 0, sz1 = sources ? sources->size () : 0; j1 < sz1; j1++)
+ {
+ SourceFile *sf1 = sources->get (j1);
+ if (sf1 == srcContext)
+ { // the same file
+ sf = srcContext;
+ break;
+ }
+ else if (sf == NULL)
+ {
+ char *bname1 = get_basename (sf1->get_name ());
+ if (dbe_strcmp (bname, bname1) == 0)
+ sf = sf1;
+ }
+ }
+ res->store (j, (Obj) func1->convertto (conv_type, srcContext));
+ }
+ break;
+ }
+ default:
+ break;
+ }
+ return res;
+}
+
+// Get Table of Function List data
+Vector<void *> *
+dbeGetFuncListV2 (int dbevindex, int mtype, Obj sel_obj, int type, int subtype)
+{
+ Metric *mitem;
+ int nitems, nvisible;
+ int index, index2, nv;
+ char *cell;
+ Hist_data::HistItem *item;
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ dbev->error_msg = dbev->warning_msg = NULL;
+ MetricList *mlist = dbev->get_metric_list ((MetricType) (mtype & MTYPE_MASK),
+ (mtype & COMPARE_BIT) != 0,
+ mtype >> GROUP_ID_SHIFT);
+ Histable *selObj = (Histable *) sel_obj;
+ int old_compare_mode = dbev->get_compare_mode ();
+ if ((mtype & COMPARE_BIT) != 0)
+ dbev->reset_compare_mode (CMP_DISABLE);
+ Hist_data *data = dbev->get_data (mlist, selObj, type, subtype);
+ dbev->reset_compare_mode (old_compare_mode);
+ if (data == NULL || data->get_status () != Hist_data::SUCCESS)
+ return NULL;
+ nitems = data->size ();
+ nvisible = mlist->get_items ()->size ();
+
+ // Initialize Java String array
+ Vector<void*> *table = new Vector<void*>(nvisible + 3);
+ // Mark Hi-value metric items for annotated src/dis/layout
+ if (type == DSP_SOURCE || type == DSP_DISASM || type == DSP_DLAYOUT
+ || type == DSP_SOURCE_V2 || type == DSP_DISASM_V2)
+ {
+ Vector<int> *types = new Vector<int>(nitems);
+ Vector<Obj> *ids = new Vector<Obj > (nitems);
+ if (dbev->marks->size () > 0)
+ index = dbev->marks->fetch (0);
+ else
+ index = -1;
+ int mindex = 0;
+ for (int i = 0; i < nitems; i++)
+ {
+ item = data->fetch (i);
+ ids->store (i, (Obj) item->obj);
+ if (i == index)
+ {
+ types->store (i, -item->type);
+ if (++mindex < dbev->marks->size ())
+ index = dbev->marks->fetch (mindex);
+ else
+ index = -1;
+ }
+ else
+ types->store (i, item->type);
+ }
+ table->store (nvisible, types);
+ table->store (nvisible + 1, ids);
+ }
+ else
+ {
+ table->store (nvisible, NULL);
+ table->store (nvisible + 1, NULL);
+ }
+
+ // Fill function list elements
+ nv = 0;
+ Vec_loop (Metric*, mlist->get_items (), index, mitem)
+ {
+ if (!mitem->is_visible () && !mitem->is_tvisible () &&
+ !mitem->is_pvisible ())
+ continue;
+
+ // Fill values
+ switch (mitem->get_vtype ())
+ {
+ default:
+ table->store (nv++, dbeGetTableDataOneColumn (data, index));
+ break;
+ case VT_LABEL:
+ Vector<char*> *jobjects = new Vector<char*>(nitems);
+ char *buf = NULL;
+ size_t bufsz = 0;
+ int lspace = 0;
+ if (type == DSP_SOURCE || type == DSP_DISASM || type == DSP_SOURCE_V2
+ || type == DSP_DISASM_V2)
+ {
+ // if this is source or disassembly, where we'll insert
+ // a preface into the output line, figure out how wide
+ // it needs to be
+ // first, scan all the lines, to get the maximum line number
+ bufsz = 1024;
+ buf = (char *) malloc (bufsz);
+ int max_lineno = 0;
+ int hidx;
+ Hist_data::HistItem *hitem;
+ Vec_loop (Hist_data::HistItem*, data, hidx, hitem)
+ {
+ if (!hitem->obj)
+ continue;
+ if (hitem->obj->get_type () == Histable::LINE &&
+ ((DbeLine*) hitem->obj)->lineno > max_lineno)
+ max_lineno = ((DbeLine*) hitem->obj)->lineno;
+ else if (hitem->obj->get_type () == Histable::INSTR
+ && ((DbeInstr*) hitem->obj)->lineno > max_lineno)
+ max_lineno = ((DbeInstr*) hitem->obj)->lineno;
+ }
+
+ // we have the maximum integer over all linenumbers in the file
+ // figure out how many digits are needed
+ lspace = snprintf (buf, bufsz, NTXT ("%d"), max_lineno);
+ }
+
+ for (index2 = 0; index2 < nitems; index2++)
+ {
+ item = data->fetch (index2);
+ if (type == DSP_DLAYOUT)
+ cell = dbe_strdup (((DataObject*) (item->obj))->get_offset_name ());
+ else if (type == DSP_SOURCE || type == DSP_DISASM || type == DSP_SOURCE_V2 || type == DSP_DISASM_V2)
+ {
+ // This code is duplicated in output.cc, yet it's
+ // intended for presentation purpose and thus is
+ // potentially different for er_print and analyzer.
+ switch (item->type)
+ {
+ case Module::AT_SRC_ONLY:
+ case Module::AT_SRC:
+ if (item->obj == NULL)
+ snprintf (buf, bufsz, NTXT (" %*c. "), lspace, ' ');
+ else
+ snprintf (buf, bufsz, NTXT (" %*d. "), lspace,
+ ((DbeLine*) item->obj)->lineno);
+ break;
+ case Module::AT_FUNC:
+ case Module::AT_QUOTE:
+ snprintf (buf, bufsz, NTXT ("%*c"), lspace + 3, ' ');
+ break;
+ case Module::AT_DIS:
+ case Module::AT_DIS_ONLY:
+ if (item->obj == NULL || ((DbeInstr*) item->obj)->lineno == -1)
+ snprintf (buf, bufsz, NTXT ("%*c[%*s] "), lspace + 3, ' ',
+ lspace, NTXT ("?"));
+ else
+ snprintf (buf, bufsz, NTXT ("%*c[%*d] "), lspace + 3, ' ',
+ lspace,
+ ((DbeInstr*) item->obj)->lineno);
+ break;
+ case Module::AT_COM:
+ case Module::AT_EMPTY:
+ *buf = (char) 0;
+ break;
+ }
+ // get the line's text
+ char *s = item->value[index].l;
+ if (s != NULL)
+ {
+ // copy the string expanding all tabulations
+ // (JTable doesn't render them)
+ char *d = buf + strlen (buf);
+ char c;
+ size_t column = 0;
+ do
+ {
+ c = *s++;
+ if (c == '\t')
+ {
+ do
+ {
+ *d++ = ' ';
+ column++;
+ }
+ while (column & 07);
+ }
+ else
+ {
+ *d++ = c;
+ column++;
+ }
+ if (column + 32 > bufsz)
+ {
+ // Reallocate the buffer
+ size_t curlen = d - buf;
+ bufsz += 1024;
+ char *buf_new = (char *) malloc (bufsz);
+ strncpy (buf_new, buf, curlen);
+ buf_new[curlen] = '\0';
+ free (buf);
+ buf = buf_new;
+ d = buf + curlen;
+ }
+ }
+ while (c != (char) 0);
+ }
+ cell = dbe_strdup (buf);
+ }
+ else
+ {
+ Histable::NameFormat nfmt = dbev->get_name_format ();
+ cell = dbe_strdup (item->obj->get_name (nfmt));
+ }
+ jobjects->store (index2, cell);
+ }
+
+ if (type == DSP_SOURCE || type == DSP_DISASM || type == DSP_SOURCE_V2
+ || type == DSP_DISASM_V2)
+ free (buf);
+ table->store (nv++, jobjects);
+ break;
+ }
+ }
+ table->append (dbeGetMetricList (mlist));
+ return table;
+} // dbeGetFuncListV2
+
+//
+// Get Table DataV2
+//
+Vector<void*> *
+dbeGetTableDataV2 (int dbevindex, char *mlistStr, char *modeStr, char *typeStr,
+ char *subtypeStr, Vector<uint64_t> *ids)
+{
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+
+ // Process metric list specification
+ if (mlistStr == NULL)
+ return NULL;
+ bool met_call = false;
+ MetricList *mlist = NULL;
+ if (streq (mlistStr, NTXT ("MET_NORMAL")))
+ mlist = dbev->get_metric_list (MET_NORMAL);
+ else if (streq (mlistStr, NTXT ("MET_CALL")))
+ {
+ met_call = true;
+ mlist = dbev->get_metric_list (MET_CALL);
+ }
+ else if (streq (mlistStr, NTXT ("MET_CALL_AGR")))
+ mlist = dbev->get_metric_list (MET_CALL_AGR);
+ else if (streq (mlistStr, NTXT ("MET_DATA")))
+ mlist = dbev->get_metric_list (MET_DATA);
+ else if (streq (mlistStr, NTXT ("MET_INDX")))
+ mlist = dbev->get_metric_list (MET_INDX);
+ else if (streq (mlistStr, NTXT ("MET_IO")))
+ mlist = dbev->get_metric_list (MET_IO);
+ else if (streq (mlistStr, NTXT ("MET_HEAP")))
+ mlist = dbev->get_metric_list (MET_HEAP);
+ else
+ return NULL;
+
+ // Process mode specification
+ if (modeStr == NULL)
+ return NULL;
+ Hist_data::Mode mode = (Hist_data::Mode)0;
+ if (streq (modeStr, NTXT ("CALLERS")))
+ mode = Hist_data::CALLERS;
+ else if (streq (modeStr, NTXT ("CALLEES")))
+ mode = Hist_data::CALLEES;
+ else if (streq (modeStr, NTXT ("SELF")))
+ mode = Hist_data::SELF;
+ else if (streq (modeStr, NTXT ("ALL")))
+ mode = Hist_data::ALL;
+ else
+ return NULL;
+
+ // Process type specification
+ if (typeStr == NULL)
+ return NULL;
+ Histable::Type type = Histable::OTHER;
+ if (streq (typeStr, NTXT ("FUNCTION")))
+ type = Histable::FUNCTION;
+ else if (streq (typeStr, NTXT ("INDEXOBJ")))
+ type = Histable::INDEXOBJ;
+ else if (streq (typeStr, NTXT ("IOACTFILE")))
+ type = Histable::IOACTFILE;
+ else if (streq (typeStr, NTXT ("IOACTVFD")))
+ type = Histable::IOACTVFD;
+ else if (streq (typeStr, NTXT ("IOCALLSTACK")))
+ type = Histable::IOCALLSTACK;
+ else if (streq (typeStr, NTXT ("HEAPCALLSTACK")))
+ type = Histable::HEAPCALLSTACK;
+ else if (streq (typeStr, NTXT ("LINE")))
+ type = Histable::LINE;
+ else if (streq (typeStr, NTXT ("INSTR")))
+ type = Histable::INSTR;
+ else
+ // XXX Accepting objects other than above may require a different
+ // implementation of the id -> Histable mapping below
+ return NULL;
+
+ // Process subtype specification
+ int subtype = 0;
+ if (subtypeStr != NULL)
+ subtype = atoi (subtypeStr);
+ Vector<Histable*> *hobjs = NULL;
+ if (ids != NULL)
+ {
+ hobjs = new Vector<Histable*>();
+ for (int i = 0; i < ids->size (); ++i)
+ {
+ Histable::Type obj_type = type;
+ if ((obj_type == Histable::LINE || obj_type == Histable::INSTR)
+ && subtype == 0)
+ obj_type = Histable::FUNCTION;
+ Histable *hobj = dbeSession->findObjectById (obj_type, subtype, ids->fetch (i));
+ if ((obj_type == Histable::LINE || obj_type == Histable::INSTR)
+ && subtype == 0 && hobj == NULL)
+ return NULL;
+ hobjs->append (hobj);
+ }
+ }
+
+ PathTree::PtreeComputeOption flag = PathTree::COMPUTEOPT_NONE;
+ if (dbev->isOmpDisMode () && type == Histable::FUNCTION
+ && mode == Hist_data::CALLEES && met_call)
+ flag = PathTree::COMPUTEOPT_OMP_CALLEE;
+
+ Hist_data *data = dbev->get_hist_data (mlist, type, subtype, mode, hobjs, NULL, NULL, flag);
+ return dbeGetTableDataV2Data (dbev, data);
+}
+
+static Vector<void*> *
+dbeGetTableDataV2Data (DbeView * /*dbev*/, Hist_data *data)
+{
+ if (data == NULL || data->get_status () != Hist_data::SUCCESS)
+ return NULL;
+ MetricList *mlist;
+ mlist = data->get_metric_list ();
+ int nitems = data->size ();
+
+ // Initialize Java String array
+ Vector<void*> *table = new Vector<void*>(mlist->size () + 1);
+
+ // Fill function list elements
+ for (long i = 0, sz = mlist->size (); i < sz; i++)
+ {
+ Metric *mitem = mlist->get (i);
+ if (!mitem->is_visible () && !mitem->is_tvisible () &&
+ !mitem->is_pvisible ())
+ continue;
+ table->append (dbeGetTableDataOneColumn (data, i));
+ }
+
+ // Add an array of Histable IDs
+ Vector<uint64_t> *idList = new Vector<uint64_t>(nitems);
+ for (int i = 0; i < nitems; ++i)
+ {
+ Hist_data::HistItem *item = data->fetch (i);
+ if (item->obj->get_type () == Histable::LINE
+ || item->obj->get_type () == Histable::INSTR)
+ idList->store (i, (uint64_t) (item->obj));
+ else
+ idList->store (i, item->obj->id);
+ }
+ table->append (idList);
+ return table;
+} // dbeGetTableData
+
+//YXXX try to use the following to consolidate similar cut/paste code
+
+static Vector<void*> *
+dbeGetTableDataOneColumn (Hist_data *data, int met_ind)
+{
+ // Allocates a vector and fills it with metric values for one column
+ TValue res;
+ Metric *m = data->get_metric_list ()->get (met_ind);
+ if ((m->get_visbits () & VAL_RATIO) != 0)
+ {
+ Vector<double> *col = new Vector<double>(data->size ());
+ for (long row = 0, sz_row = data->size (); row < sz_row; row++)
+ {
+ TValue *v = data->get_value (&res, met_ind, row);
+ double d = (v->tag != VT_LABEL) ? v->to_double () : 100.; // NaN
+ col->append (d);
+ }
+ return (Vector<void*> *) col;
+ }
+
+ switch (m->get_vtype ())
+ {
+ case VT_DOUBLE:
+ {
+ Vector<double> *col = new Vector<double>(data->size ());
+ for (long row = 0, sz_row = data->size (); row < sz_row; row++)
+ {
+ TValue *v = data->get_value (&res, met_ind, row);
+ col->append (v->d);
+ }
+ return (Vector<void*> *) col;
+ }
+ case VT_INT:
+ {
+ Vector<int> *col = new Vector<int>(data->size ());
+ for (long row = 0, sz_row = data->size (); row < sz_row; row++)
+ {
+ TValue *v = data->get_value (&res, met_ind, row);
+ col->append (v->i);
+ }
+ return (Vector<void*> *) col;
+ }
+ case VT_ULLONG:
+ case VT_LLONG:
+ {
+ Vector<long long> *col = new Vector<long long>(data->size ());
+ for (long row = 0, sz_row = data->size (); row < sz_row; row++)
+ {
+ TValue *v = data->get_value (&res, met_ind, row);
+ col->append (v->ll);
+ }
+ return (Vector<void*> *) col;
+ }
+ case VT_ADDRESS:
+ {
+ Vector<long long> *col = new Vector<long long>(data->size ());
+ for (long row = 0, sz_row = data->size (); row < sz_row; row++)
+ {
+ TValue *v = data->get_value (&res, met_ind, row);
+ // set the highest bit to mark this jlong as
+ // a VT_ADDRESS (rather than a regular VT_LLONG)
+ col->append (v->ll | 0x8000000000000000ULL);
+ }
+ return (Vector<void*> *) col;
+ }
+ case VT_LABEL:
+ {
+ Vector<char *> *col = new Vector<char *>(data->size ());
+ for (long row = 0, sz_row = data->size (); row < sz_row; row++)
+ {
+ TValue *v = data->get_value (&res, met_ind, row);
+ col->append (dbe_strdup (v->l));
+ }
+ return (Vector<void*> *) col;
+ }
+ default:
+ return NULL;
+ }
+}
+
+static Vector<void*> *
+dbeGetTableDataOneColumn (DbeView *dbev, Vector<Hist_data::HistItem*> *data,
+ ValueTag vtype, int metricColumnNumber)
+// Allocates a vector and fills it with metric values for one column
+{
+ Vector<void*> *column_data = NULL;
+ int nitems = data->size (); // number of rows
+ int index = metricColumnNumber;
+ switch (vtype)
+ {
+ case VT_DOUBLE:
+ {
+ Vector<double> *jd_list = new Vector<double>(nitems);
+ for (int index2 = 0; index2 < nitems; index2++)
+ {
+ Hist_data::HistItem *item = data->fetch (index2);
+ jd_list->store (index2, item->value[index].d);
+ }
+ column_data = (Vector<void*> *)jd_list;
+ break;
+ }
+ case VT_INT:
+ {
+ Vector<int> *ji_list = new Vector<int>(nitems);
+ for (int index2 = 0; index2 < nitems; index2++)
+ {
+ Hist_data::HistItem *item = data->fetch (index2);
+ ji_list->store (index2, item->value[index].i);
+ }
+ column_data = (Vector<void*> *)ji_list;
+ break;
+ }
+ case VT_ULLONG:
+ case VT_LLONG:
+ {
+ Vector<long long> *jl_list = new Vector<long long>(nitems);
+ for (int index2 = 0; index2 < nitems; index2++)
+ {
+ Hist_data::HistItem *item = data->fetch (index2);
+ jl_list->store (index2, item->value[index].ll);
+ }
+ column_data = (Vector<void*> *)jl_list;
+ break;
+ }
+ case VT_ADDRESS:
+ {
+ Vector<long long> *jl_list = new Vector<long long>(nitems);
+ for (int index2 = 0; index2 < nitems; index2++)
+ {
+ Hist_data::HistItem *item = data->fetch (index2);
+
+ // set the highest bit to mark this jlong as
+ // a VT_ADDRESS (rather than a regular VT_LLONG)
+ uint64_t addr = item->value[index].ll;
+ addr |= 0x8000000000000000ULL;
+ jl_list->store (index2, addr);
+ }
+ column_data = (Vector<void*> *)jl_list;
+ break;
+ }
+ case VT_LABEL:
+ {
+ Vector<char*> *jobjects = new Vector<char*>(nitems);
+ for (int index2 = 0; index2 < nitems; index2++)
+ {
+ Hist_data::HistItem *item = data->fetch (index2);
+
+ // omazur: why don't we have it as metric value
+ Histable::NameFormat nfmt = dbev->get_name_format ();
+ char *str = dbe_strdup (item->obj->get_name (nfmt));
+ jobjects->store (index2, str);
+ }
+ column_data = (Vector<void*> *)jobjects;
+ break;
+ }
+ default:
+ abort ();
+ }
+ return column_data;
+}
+
+int
+dbeGetCallTreeNumLevels (int dbevindex)
+{
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ PathTree * ptree = dbev->get_path_tree ();
+ if (ptree == NULL)
+ return 0;
+ return ptree->get_ftree_depth ();
+}
+
+Vector<void*>*
+dbeGetCallTreeLevel (int dbevindex, char *mcmd, int level)
+{
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ PathTree * ptree = dbev->get_path_tree ();
+ if (ptree == NULL)
+ return NULL;
+ if (mcmd == NULL)
+ return NULL;
+ BaseMetric *bm = dbeSession->find_base_reg_metric (mcmd);
+ if (bm == NULL)
+ return NULL;
+ return ptree->get_ftree_level (bm, level);
+}
+
+Vector<void*>*
+dbeGetCallTreeLevels (int dbevindex, char *mcmd)
+{
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ PathTree * ptree = dbev->get_path_tree ();
+ if (ptree == NULL)
+ return NULL;
+ if (mcmd == NULL)
+ return NULL;
+ BaseMetric *bm = dbeSession->find_base_reg_metric (mcmd);
+ if (bm == NULL)
+ return NULL;
+
+ int depth = ptree->get_ftree_depth ();
+ Vector<void*> *results = new Vector<void*>(depth);
+ for (int ii = 0; ii < depth; ii++)
+ results->append (ptree->get_ftree_level (bm, ii));
+ return results;
+}
+
+Vector<void*>*
+dbeGetCallTreeLevelFuncs (int dbevindex, int start_level, int end_level)
+{ // (0,-1) -> all levels
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ PathTree * ptree = dbev->get_path_tree ();
+ if (ptree == NULL)
+ return NULL;
+
+ int depth = ptree->get_ftree_depth ();
+ if (start_level < 0)
+ start_level = 0;
+ if (end_level < 0 || end_level >= depth)
+ end_level = depth - 1;
+
+ Histable::NameFormat nfmt = dbev->get_name_format (); //YXXX or fixed format?
+ Vector<char*> *funcNames = new Vector<char*>();
+ Vector<long long> *funcIds = new Vector<long long>();
+ Vector<Obj> *funcObjs = new Vector<Obj>();
+
+ if (start_level == 0 && end_level == depth - 1)
+ return dbeGetCallTreeFuncs (dbevindex);
+ else
+ {
+ for (int ii = start_level; ii <= end_level; ii++)
+ {
+ Vector<void*> *info = ptree->get_ftree_level (NULL, ii); /*no metric*/
+ if (!info)
+ continue;
+ Vector<long long> *fids = (Vector<long long> *)info->get (2);
+ if (!fids)
+ continue;
+ int index;
+ long long fid;
+ Vec_loop (long long, fids, index, fid)
+ {
+ funcIds->append (fid);
+ Histable *obj = dbeSession->findObjectById (fid);
+ char * fname = obj ? dbe_strdup (obj->get_name (nfmt)) : NULL;
+ funcNames->append (fname);
+ funcObjs->append ((unsigned long) obj); // avoiding sign extension
+ }
+ destroy (info);
+ }
+ }
+ Vector<void*> *results = new Vector<void*>(3);
+ results->append (funcIds);
+ results->append (funcNames);
+ results->append (funcObjs);
+ return results;
+}
+
+Vector<void*> *
+dbeGetCallTreeFuncs (int dbevindex)
+{ // does not require ptree->get_ftree_level() to be computed
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ PathTree * ptree = dbev->get_path_tree ();
+ if (ptree == NULL)
+ return 0;
+ Vector<Function*>* funcs = ptree->get_funcs (); // Unique functions in tree
+ if (funcs == NULL)
+ return NULL;
+
+ long sz = funcs->size ();
+ Vector<void*> *results = new Vector<void*>(3);
+ Vector<long long> *funcIds = new Vector<long long>(sz);
+ Vector<char*> *funcNames = new Vector<char*>(sz);
+ Vector<Obj> *funcObjs = new Vector<Obj>(sz);
+
+ int index;
+ Function * func;
+ Histable::NameFormat nfmt = dbev->get_name_format (); //YXXX or fixed format?
+ Vec_loop (Function *, funcs, index, func)
+ {
+ funcIds->append (func->id); // do we need IDs?
+ char *fname = dbe_strdup (func->get_name (nfmt));
+ funcNames->append (fname);
+ funcObjs->append ((unsigned long) func); // avoiding sign extension
+ }
+ results->put (0, funcIds);
+ results->put (1, funcNames);
+ results->put (2, funcObjs);
+ destroy (funcs);
+ return results;
+}
+
+Vector<void*>*
+dbeGetCallTreeChildren (int dbevindex, char *mcmd, Vector<int /*NodeIdx*/>*node_idxs)
+{
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ if (node_idxs == NULL || node_idxs->size () == 0)
+ return NULL;
+ long sz = node_idxs->size ();
+ PathTree * ptree = dbev->get_path_tree ();
+ if (ptree == NULL)
+ return NULL;
+ if (mcmd == NULL)
+ return NULL;
+ BaseMetric *bm = dbeSession->find_base_reg_metric (mcmd);
+ if (bm == NULL)
+ return NULL;
+
+ Vector<void*> *results = new Vector<void*>(sz);
+ for (long ii = 0; ii < sz; ii++)
+ {
+ PathTree::NodeIdx nodeIdx = node_idxs->get (ii); // upcasted from int
+ results->append (ptree->get_ftree_node_children (bm, nodeIdx));
+ }
+ return results;
+}
+
+Vector<int> *
+dbeGetGroupIds (int /*dbevindex*/)
+{
+ Vector<ExpGroup*> *groups = dbeSession->expGroups;
+ int sz = groups->size ();
+ Vector<int> *grIds = new Vector<int>(sz);
+ for (int i = 0; i < sz; i++)
+ grIds->store (i, groups->fetch (i)->groupId);
+ return grIds;
+}
+
+//
+// Get label for name column
+//
+Vector<char*> *
+dbeGetNames (int dbevindex, int type, Obj sel_obj)
+{
+ char *s0, *s1, *s2;
+ bool need_strdup = true;
+ switch (type)
+ {
+ case DSP_SOURCE_V2:
+ case DSP_DISASM_V2:
+ case DSP_SOURCE:
+ case DSP_DISASM:
+ {
+ if (sel_obj)
+ {
+ Histable *selObj = (Histable*) sel_obj;
+ Function *func = (Function *) selObj->convertto (Histable::FUNCTION);
+ if (func)
+ {
+ char *names[3] = {NULL, NULL, NULL};
+ set_file_names (func, names);
+ s0 = names[0];
+ s1 = names[1];
+ s2 = names[2];
+ need_strdup = false;
+ break;
+ }
+ }
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ char **names = type == DSP_SOURCE || type == DSP_SOURCE_V2 ? dbev->names_src : dbev->names_dis;
+ s0 = names[0];
+ s1 = names[1];
+ s2 = names[2];
+ break;
+ }
+ case DSP_LINE:
+ s0 = GTXT ("Lines");
+ s1 = GTXT ("Function, line # in \"sourcefile\"");
+ s2 = NTXT ("");
+ break;
+ case DSP_PC:
+ s0 = GTXT ("PCs");
+ s1 = GTXT ("Function + offset");
+ s2 = NTXT ("");
+ break;
+ case DSP_DLAYOUT:
+ s0 = GTXT ("Name");
+ s1 = GTXT ("* +offset .element");
+ s2 = NTXT ("");
+ break;
+ default:
+ s0 = GTXT ("Name");
+ s1 = s2 = NTXT ("");
+ break;
+ }
+ if (need_strdup)
+ {
+ s0 = dbe_strdup (s0);
+ s1 = dbe_strdup (s1);
+ s2 = dbe_strdup (s2);
+ }
+ Vector<char*> *table = new Vector<char*>(3);
+ table->store (0, s0);
+ table->store (1, s1);
+ table->store (2, s2);
+ return table;
+}
+
+//
+// Get Total/Maximum element of Function List
+//
+Vector<void*> *
+dbeGetTotalMax (int dbevindex, int type, int subtype)
+{
+ Hist_data *data;
+ int index;
+ Hist_data::HistItem *total_item, *maximum_item;
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+
+ switch (type)
+ {
+ case DSP_LINE:
+ data = dbev->line_data;
+ break;
+ case DSP_PC:
+ data = dbev->pc_data;
+ break;
+ case DSP_CALLER:
+ data = dbev->callers;
+ break;
+ case DSP_SELF:
+ case DSP_CALLEE:
+ data = dbev->callees;
+ break;
+ case DSP_DLAYOUT:
+ data = dbev->dlay_data;
+ break;
+ case DSP_DATAOBJ:
+ data = dbev->dobj_data;
+ break;
+ case DSP_MEMOBJ:
+ data = dbev->get_indxobj_data (subtype);
+ break;
+ case DSP_INDXOBJ:
+ data = dbev->get_indxobj_data (subtype);
+ break;
+ case DSP_FUNCTION: // annotated src/dis use func total/max
+ case DSP_SOURCE:
+ case DSP_DISASM:
+ case DSP_SOURCE_V2:
+ case DSP_DISASM_V2:
+ data = dbev->func_data;
+ break;
+ default:
+ abort ();
+ }
+ if (data == NULL || data->get_status () != Hist_data::SUCCESS)
+ return NULL;
+
+ // Get list size
+ // XXX -- the original list has all items, visible or not;
+ // XXX -- the one from Hist_data has only visible items,
+ // XXX -- and should be the only ones computed
+ // XXX -- Analyzer got confused (yesterday), when we used the shorter list
+ // XXX -- Why can we fetch total/max for metrics never
+ // XXX -- computed without core dumping?
+ MetricList *mlist2 = data->get_metric_list ();
+ int size = mlist2->get_items ()->size ();
+
+ // Initialize Java array
+ Vector<void*> *total_max = new Vector<void*>(2);
+ Vector<double> *total = new Vector<double>(size);
+ Vector<double> *maximum = new Vector<double>(size);
+
+ // Fill total/maximum element
+ total_item = data->get_totals ();
+ maximum_item = data->get_maximums ();
+
+ for (index = 0; index < size; index++)
+ {
+ total->store (index, total_item->value[index].to_double ());
+ maximum->store (index, maximum_item->value[index].to_double ());
+ }
+ total_max->store (0, total);
+ total_max->store (1, maximum);
+ return total_max;
+}
+
+//
+// Get Table of Overview List
+Vector<void*> *
+dbeGetStatisOverviewList (int dbevindex)
+{
+ int size;
+ Ovw_data **data;
+ Ovw_data::Ovw_item labels, *totals;
+ int nitems;
+ int index, index2;
+
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ dbev->error_msg = dbev->warning_msg = NULL;
+
+ size = dbeSession->nexps ();
+ totals = new Ovw_data::Ovw_item[size + 1];
+ data = new Ovw_data*[size + 1];
+ data[0] = new Ovw_data ();
+
+ for (index = 1; index <= size; index++)
+ {
+ data[index] = dbev->get_ovw_data (index - 1);
+ if (data[index] == NULL)
+ {
+ Ovw_data::reset_item (&totals[index]); // set contents to zeros
+ continue;
+ }
+ data[0]->sum (data[index]);
+ totals[index] = data[index]->get_totals (); //shallow copy!
+ }
+ totals[0] = data[0]->get_totals ();
+
+ // Get table size
+ labels = data[0]->get_labels ();
+ nitems = labels.size + 4;
+
+ // Initialize Java String array
+ Vector<void*> *table = new Vector<void*>(size + 4);
+ Vector<char*> *jobjects = new Vector<char*>(nitems);
+
+ // Set the label
+ jobjects->store (0, dbe_strdup (GTXT ("Start Time (sec.)")));
+ jobjects->store (1, dbe_strdup (GTXT ("End Time (sec.)")));
+ jobjects->store (2, dbe_strdup (GTXT ("Duration (sec.)")));
+ jobjects->store (3, dbe_strdup (GTXT ("Total Thread Time (sec.)")));
+ jobjects->store (4, dbe_strdup (GTXT ("Average number of Threads")));
+
+ for (index2 = 5; index2 < nitems; index2++)
+ jobjects->store (index2, dbe_strdup (labels.values[index2 - 4].l));
+ table->store (0, jobjects);
+
+ // Set the data
+ for (index = 0; index <= size; index++)
+ {
+ Vector<double> *jd_list = new Vector<double>(nitems);
+ jd_list->store (0, tstodouble (totals[index].start));
+ jd_list->store (1, tstodouble (totals[index].end));
+ jd_list->store (2, tstodouble (totals[index].duration));
+ jd_list->store (3, tstodouble (totals[index].tlwp));
+ jd_list->store (4, totals[index].nlwp);
+ for (index2 = 5; index2 < nitems; index2++)
+ jd_list->store (index2, tstodouble (totals[index].values[index2 - 4].t));
+ table->store (index + 1, jd_list);
+ }
+ for (index = 0; index <= size; index++)
+ delete data[index];
+ delete[] data;
+ delete[] totals;
+ return table;
+}
+
+// Get Table of Statistics List
+Vector<void*> *
+dbeGetStatisList (int dbevindex)
+{
+ int size;
+ Stats_data **data;
+ int nitems;
+ int index, index2;
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ dbev->error_msg = dbev->warning_msg = NULL;
+ if ((size = dbeSession->nexps ()) == 0)
+ return NULL;
+
+ // Get statistics data
+ data = (Stats_data **) malloc ((size + 1) * sizeof (Stats_data *));
+ data[0] = new Stats_data ();
+ for (index = 1; index <= size; index++)
+ {
+ data[index] = dbev->get_stats_data (index - 1);
+ if (data[index] == NULL)
+ continue;
+ data[0]->sum (data[index]);
+ }
+
+ // Get table size
+ nitems = data[0]->size ();
+
+ // Initialize Java String array
+ Vector<void*> *table = new Vector<void*>(size + 2);
+ Vector<char*> *jobjects = new Vector<char*>(nitems);
+
+ // Set the label
+ for (index2 = 0; index2 < nitems; index2++)
+ jobjects->store (index2, dbe_strdup (data[0]->fetch (index2).label));
+ table->store (0, jobjects);
+
+ // Set the data
+ for (index = 0; index <= size; index++)
+ {
+ Vector<double> *jd_list = new Vector<double>(nitems);
+ for (index2 = 0; index2 < nitems; index2++)
+ {
+ double val = 0;
+ if (data[index])
+ val = data[index]->fetch (index2).value.to_double ();
+ jd_list->store (index2, val);
+ }
+ table->store (index + 1, jd_list);
+ }
+ if (data)
+ {
+ for (index = 0; index <= size; index++)
+ delete data[index];
+ free (data);
+ }
+ return table;
+}
+
+
+//
+// Set summary list
+//
+static void
+setSummary (Vector<Histable*> *objs, Vector<int> *saligns,
+ Vector<char> *mnemonic, Vector<char*> *jlabels, Vector<char*> *jvalues)
+{
+ char *sname = NULL, *oname = NULL, *lname = NULL, *alias = NULL,
+ *mangle = NULL, *address = NULL, *size = NULL,
+ *name_0 = NULL, *sname_0 = NULL, *oname_0 = NULL, *lname_0 = NULL,
+ *alias_0 = NULL, *mangle_0 = NULL;
+ Function *func, *last_func = NULL;
+ int one_func = 1;
+
+ // Get the source/object/load-object files & aliases
+ long long ll_size = 0;
+ for (long i = 0; i < objs->size (); i++)
+ {
+ Histable *current_obj = objs->fetch (i);
+ Histable::Type htype = current_obj->get_type ();
+ if (htype == Histable::LOADOBJECT)
+ lname = ((LoadObject *) current_obj)->dbeFile->get_location_info ();
+ else if ((func = (Function*) current_obj->convertto (Histable::FUNCTION)) != NULL)
+ {
+ if (one_func && last_func != NULL && last_func != func)
+ one_func = 0;
+ last_func = func;
+ sname = NULL;
+ DbeLine *dbeline = (DbeLine*) current_obj->convertto (Histable::LINE);
+ if (dbeline)
+ {
+ SourceFile *sf;
+ if (dbeline->lineno == 0 && dbeline->include != NULL)
+ sf = dbeline->include;
+ else if (dbeline->sourceFile != NULL)
+ sf = dbeline->sourceFile;
+ else
+ sf = func->getDefSrc ();
+ if (sf)
+ sname = sf->dbeFile->get_location_info ();
+ }
+ char *func_name = func->get_name ();
+ mangle = func->get_mangled_name ();
+ if (mangle && streq (func_name, mangle))
+ mangle = NULL;
+ Module *module = func->module;
+ if (module != NULL)
+ {
+ module->read_stabs ();
+ if (sname == NULL || strlen (sname) == 0)
+ {
+ SourceFile *sf = module->getMainSrc ();
+ sname = sf->dbeFile->get_location_info ();
+ }
+ DbeFile *df = module->dbeFile;
+ if (df == NULL || (df->filetype & DbeFile::F_JAVACLASS) == 0)
+ df = module->loadobject->dbeFile;
+ lname = df->get_location_info ();
+ oname = lname;
+ if (module->dot_o_file)
+ oname = module->dot_o_file->dbeFile->get_location_info ();
+ }
+
+ if (htype == Histable::INSTR && dbeSession->is_datamode_available ())
+ alias = ((DbeInstr*) current_obj)->get_descriptor ();
+ }
+
+ char *name = current_obj->get_name ();
+ if (i == 0)
+ {
+ name_0 = name;
+ lname_0 = lname;
+ sname_0 = sname;
+ oname_0 = oname;
+ mangle_0 = mangle;
+ alias_0 = alias;
+ if (objs->size () == 1)
+ {
+ uint64_t addr = current_obj->get_addr ();
+ address = dbe_sprintf (NTXT ("%lld:0x%08llX"),
+ (long long) ADDRESS_SEG (addr),
+ (long long) ADDRESS_OFF (addr));
+ }
+ }
+ else
+ {
+ if (name_0 != name)
+ name_0 = NULL;
+ if (lname_0 != lname)
+ lname_0 = NULL;
+ if (sname_0 != sname)
+ sname_0 = NULL;
+ if (oname_0 != oname)
+ oname_0 = NULL;
+ if (mangle_0 != mangle)
+ mangle_0 = NULL;
+ if (alias_0 != alias)
+ alias_0 = NULL;
+ }
+ if (current_obj->get_size () == -1)
+ {
+ if (size == NULL)
+ size = dbe_strdup (GTXT ("(Unknown)"));
+ }
+ else
+ ll_size += current_obj->get_size ();
+ }
+ if (size == NULL)
+ size = dbe_sprintf (NTXT ("%lld"), ll_size);
+ if (name_0 == NULL)
+ {
+ if (objs->size () > 1)
+ {
+ char *func_name = last_func == NULL ? NULL :
+ (one_func == 0 ? NULL : last_func->get_name ());
+ name_0 = dbe_sprintf (NTXT ("%s%s%s (%lld %s)"),
+ func_name == NULL ? "" : func_name,
+ func_name == NULL ? "" : ": ",
+ GTXT ("Multiple Selection"),
+ (long long) objs->size (),
+ GTXT ("objects"));
+ }
+ }
+ else
+ name_0 = dbe_strdup (name_0);
+
+ // Set the name area
+ saligns->store (0, TEXT_LEFT);
+ mnemonic->store (0, 'N');
+ jlabels->store (0, dbe_strdup (GTXT ("Name")));
+ jvalues->store (0, name_0);
+
+ saligns->store (1, TEXT_LEFT);
+ mnemonic->store (1, 'P');
+ jlabels->store (1, dbe_strdup (GTXT ("PC Address")));
+ jvalues->store (1, address);
+
+ saligns->store (2, TEXT_LEFT);
+ mnemonic->store (2, 'z');
+ jlabels->store (2, dbe_strdup (GTXT ("Size")));
+ jvalues->store (2, size);
+
+ saligns->store (3, TEXT_RIGHT);
+ mnemonic->store (3, 'r');
+ jlabels->store (3, dbe_strdup (GTXT ("Source File")));
+ jvalues->store (3, dbe_strdup (sname_0));
+
+ saligns->store (4, TEXT_RIGHT);
+ mnemonic->store (4, 'b');
+ jlabels->store (4, dbe_strdup (GTXT ("Object File")));
+ jvalues->store (4, dbe_strdup (oname_0));
+
+ saligns->store (5, TEXT_LEFT);
+ mnemonic->store (5, 'j');
+ jlabels->store (5, dbe_strdup (GTXT ("Load Object")));
+ jvalues->store (5, dbe_strdup (lname_0));
+
+ saligns->store (6, TEXT_LEFT);
+ mnemonic->store (6, 'm');
+ jlabels->store (6, dbe_strdup (GTXT ("Mangled Name")));
+ jvalues->store (6, dbe_strdup (mangle_0));
+
+ saligns->store (7, TEXT_LEFT);
+ mnemonic->store (7, 'A');
+ jlabels->store (7, dbe_strdup (GTXT ("Aliases")));
+ jvalues->store (7, dbe_strdup (alias_0));
+}
+
+// Set memory-object summary list
+//
+static void
+setMemSummary (Vector<Histable*> *objs, Vector<int> *saligns,
+ Vector<char> *mnemonic, Vector<char*> *jlabels,
+ Vector<char*> *jvalues)
+{
+ saligns->store (0, TEXT_LEFT);
+ mnemonic->store (0, 'M');
+ jlabels->store (0, dbe_strdup (GTXT ("Memory Object")));
+ if (objs->size () == 1)
+ {
+ Histable *current_obj = objs->fetch (0);
+ jvalues->store (0, dbe_strdup (current_obj->get_name ()));
+ }
+ else
+ {
+ char *name = dbe_sprintf (NTXT ("%s (%lld %s)"),
+ GTXT ("Multiple Selection"),
+ (long long) objs->size (), GTXT ("objects"));
+ jvalues->store (0, name);
+ }
+}
+
+// Set index-object summary list
+//
+static void
+setIndxSummary (Vector<Histable*> *objs, Vector<int> *saligns,
+ Vector<char> *mnemonic, Vector<char*> *jlabels,
+ Vector<char*> *jvalues)
+{
+ saligns->store (0, TEXT_LEFT);
+ mnemonic->store (0, 'I');
+ jlabels->store (0, dbe_strdup (GTXT ("Index Object")));
+
+ if (objs->size () == 1)
+ {
+ Histable *current_obj = objs->fetch (0);
+ jvalues->store (0, dbe_strdup (current_obj->get_name ()));
+ }
+ else
+ {
+ char *name = dbe_sprintf (NTXT ("%s (%lld %s)"), GTXT ("Multiple Selection"),
+ (long long) objs->size (), GTXT ("objects"));
+ jvalues->store (0, name);
+ }
+}
+
+// Set I/O activity summary list
+//
+static void
+setIOActivitySummary (Vector<Histable*> *objs, Vector<int> *saligns,
+ Vector<char> *mnemonic, Vector<char*> *jlabels,
+ Vector<char*> *jvalues)
+{
+ saligns->store (0, TEXT_LEFT);
+ mnemonic->store (0, 'O');
+ jlabels->store (0, dbe_strdup (GTXT ("I/O Activity")));
+ if (objs->size () == 1)
+ {
+ Histable *current_obj = objs->fetch (0);
+ jvalues->store (0, dbe_strdup (current_obj->get_name ()));
+ }
+ else
+ {
+ char *name = dbe_sprintf (NTXT ("%s (%lld %s)"), GTXT ("Multiple Selection"),
+ (long long) objs->size (), GTXT ("objects"));
+ jvalues->store (0, name);
+ }
+}
+
+// Set heap activity summary list
+//
+static void
+setHeapActivitySummary (Vector<Histable*> *objs, Vector<int> *saligns,
+ Vector<char> *mnemonic, Vector<char*> *jlabels,
+ Vector<char*> *jvalues)
+{
+ saligns->store (0, TEXT_LEFT);
+ mnemonic->store (0, 'O');
+ jlabels->store (0, dbe_strdup (GTXT ("Heap Activity")));
+
+ if (objs->size () == 1)
+ {
+ Histable *current_obj = objs->fetch (0);
+ jvalues->store (0, dbe_strdup (current_obj->get_name ()));
+ }
+ else
+ {
+ char *name = dbe_sprintf (NTXT ("%s (%lld %s)"), GTXT ("Multiple Selection"),
+ (long long) objs->size (), GTXT ("objects"));
+ jvalues->store (0, name);
+ }
+}
+
+//
+// Set data-object summary list
+//
+static void
+setDataSummary (Vector<Histable*> *objs, Vector<int> *saligns,
+ Vector<char> *mnemonic, Vector<char*> *jlabels,
+ Vector<char*> *jvalues)
+{
+ char *name, *type, *member, *elist;
+ DataObject *dobj;
+ Vector<DataObject *> *delem;
+ Histable *scope;
+ int index;
+ char *size, *offset, *elements, *scopename;
+
+ // Get the data object elements
+ member = elist = type = size = offset = elements = scopename = NULL;
+
+ if (objs->size () == 1)
+ {
+ Histable *current_obj = objs->fetch (0);
+ name = dbe_strdup (current_obj->get_name ());
+ dobj = (DataObject *) current_obj;
+ type = dobj->get_typename ();
+ scope = dobj->get_scope ();
+ delem = dbeSession->get_dobj_elements (dobj);
+ if (type == NULL)
+ type = GTXT ("(Synthetic)");
+ if (!scope)
+ scopename = dbe_strdup (GTXT ("(Global)"));
+ else
+ {
+ switch (scope->get_type ())
+ {
+ case Histable::FUNCTION:
+ scopename = dbe_sprintf (NTXT ("%s(%s)"),
+ ((Function*) scope)->module->get_name (),
+ scope->get_name ());
+ break;
+ case Histable::LOADOBJECT:
+ case Histable::MODULE:
+ default:
+ scopename = dbe_strdup (scope->get_name ());
+ break;
+ }
+ }
+
+ if (dobj->get_offset () != -1)
+ {
+ if (dobj->get_parent ())
+ member = dbe_strdup (dobj->get_parent ()->get_name ());
+ offset = dbe_sprintf (NTXT ("%lld"), (long long) dobj->get_offset ());
+ }
+ size = dbe_sprintf ("%lld", (long long) dobj->get_size ());
+
+ if (delem->size () > 0)
+ {
+ elements = dbe_sprintf (NTXT ("%lld"), (long long) delem->size ());
+ StringBuilder sb_tmp, sb;
+ sb.append (GTXT ("Offset Size Name\n"));
+ for (index = 0; index < delem->size (); index++)
+ {
+ DataObject *ditem = delem->fetch (index);
+ sb_tmp.sprintf (NTXT ("%6lld %5lld %s\n"),
+ (long long) ditem->get_offset (),
+ (long long) ditem->get_size (), ditem->get_name ());
+ sb.append (&sb_tmp);
+ }
+ if (sb.charAt (sb.length () - 1) == '\n')
+ sb.setLength (sb.length () - 1);
+ elist = sb.toString ();
+ }
+ }
+ else
+ name = dbe_sprintf (NTXT ("%s (%lld %s)"), GTXT ("Multiple Selection"),
+ (long long) objs->size (), GTXT ("objects"));
+
+ saligns->store (0, TEXT_LEFT);
+ mnemonic->store (0, 'D');
+ jlabels->store (0, dbe_strdup (GTXT ("Data Object")));
+ jvalues->store (0, name);
+
+ saligns->store (1, TEXT_LEFT);
+ mnemonic->store (1, 'S');
+ jlabels->store (1, dbe_strdup (GTXT ("Scope")));
+ jvalues->store (1, scopename);
+
+ saligns->store (2, TEXT_LEFT);
+ mnemonic->store (2, 'T');
+ jlabels->store (2, dbe_strdup (GTXT ("Type")));
+ jvalues->store (2, dbe_strdup (type));
+
+ saligns->store (3, TEXT_LEFT);
+ mnemonic->store (3, 'M');
+ jlabels->store (3, dbe_strdup (GTXT ("Member of")));
+ jvalues->store (3, member);
+
+ saligns->store (4, TEXT_LEFT);
+ mnemonic->store (4, 'O');
+ jlabels->store (4, dbe_strdup (GTXT ("Offset")));
+ jvalues->store (4, offset);
+
+ saligns->store (5, TEXT_LEFT);
+ mnemonic->store (5, 'z');
+ jlabels->store (5, dbe_strdup (GTXT ("Size")));
+ jvalues->store (5, size);
+
+ saligns->store (6, TEXT_LEFT);
+ mnemonic->store (6, 'E');
+ jlabels->store (6, dbe_strdup (GTXT ("Elements")));
+ jvalues->store (6, elements);
+
+ saligns->store (7, TEXT_LEFT);
+ mnemonic->store (7, 'L');
+ jlabels->store (7, dbe_strdup (GTXT ("List")));
+ jvalues->store (7, elist);
+}
+
+#define SUMMARY_NAME 8
+#define DSUMMARY_NAME 8
+#define LSUMMARY_NAME 7
+#define IMSUMMARY_NAME 1
+
+Vector<void*> *
+dbeGetSummaryV2 (int dbevindex, Vector<Obj> *sel_objs, int type, int subtype)
+{
+ if (sel_objs == NULL || sel_objs->size () == 0)
+ return NULL;
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ Vector<Histable*>*objs = new Vector<Histable*>(sel_objs->size ());
+ for (int i = 0; i < sel_objs->size (); i++)
+ {
+ Histable *obj = (Histable *) sel_objs->fetch (i);
+ if (obj == NULL)
+ continue;
+ char *nm = obj->get_name ();
+ if (streq (nm, NTXT ("<Total>")))
+ {
+ // Special case for 'Total'.
+ // Multi selection which includes 'Total' is only 'Total'
+ objs->reset ();
+ objs->append (obj);
+ break;
+ }
+ objs->append (obj);
+ }
+ if (objs->size () == 0)
+ return NULL;
+
+ // Set name area
+ int nname = SUMMARY_NAME;
+ Vector<int> *saligns = new Vector<int>(nname);
+ Vector<char>*mnemonic = new Vector<char>(nname);
+ Vector<char*> *jlabels = new Vector<char*>(nname);
+ Vector<char*> *jvalues = new Vector<char*>(nname);
+ Vector<void*> *name_objs = new Vector<void*>(4);
+ name_objs->store (0, saligns);
+ name_objs->store (1, mnemonic);
+ name_objs->store (2, jlabels);
+ name_objs->store (3, jvalues);
+ setSummary (objs, saligns, mnemonic, jlabels, jvalues);
+
+ MetricList *prop_mlist = new MetricList (dbev->get_metric_ref (MET_NORMAL));
+ if (prop_mlist && dbev->comparingExperiments ())
+ prop_mlist = dbev->get_compare_mlist (prop_mlist, 0);
+
+ int nitems = prop_mlist->get_items ()->size ();
+
+ // Set the metrics area
+ jlabels = new Vector<char*>(nitems);
+ Vector<double> *clock_list = new Vector<double>(nitems);
+ Vector<double> *excl_list = new Vector<double>(nitems);
+ Vector<double> *ep_list = new Vector<double>(nitems);
+ Vector<double> *incl_list = new Vector<double>(nitems);
+ Vector<double> *ip_list = new Vector<double>(nitems);
+ Vector<int> *vtype = new Vector<int>(nitems);
+
+ // Initialize Java String array
+ Vector<void*> *metric_objs = new Vector<void*>(8);
+ metric_objs->store (0, jlabels);
+ metric_objs->store (1, clock_list);
+ metric_objs->store (2, excl_list);
+ metric_objs->store (3, ep_list);
+ metric_objs->store (4, incl_list);
+ metric_objs->store (5, ip_list);
+ metric_objs->store (6, vtype);
+
+ int last_init = -1;
+ for (int i = 0; i < objs->size (); i++)
+ {
+ Histable *obj = objs->fetch (i);
+ // Get the data to be displayed
+ Hist_data *data = dbev->get_hist_data (prop_mlist, obj->get_type (), subtype,
+ Hist_data::SELF, obj, dbev->sel_binctx, objs);
+
+ if (data->get_status () != Hist_data::SUCCESS)
+ {
+ if (type != DSP_DLAYOUT)
+ { // For data_layout, rows with zero metrics are OK
+ delete data;
+ continue;
+ }
+ }
+ TValue *values = NULL;
+ if (data->get_status () == Hist_data::SUCCESS)
+ {
+ Hist_data::HistItem *hi = data->fetch (0);
+ if (hi)
+ values = hi->value;
+ }
+ Hist_data::HistItem *total = data->get_totals ();
+ int index2 = 0;
+ char *tstr = GTXT (" Time");
+ char *estr = GTXT ("Exclusive ");
+ size_t len = strlen (estr);
+
+ // get the metric list from the data
+ MetricList *mlist = data->get_metric_list ();
+ int index;
+ Metric *mitem;
+ double clock;
+ Vec_loop (Metric*, mlist->get_items (), index, mitem)
+ {
+ if (mitem->get_subtype () == Metric::STATIC)
+ continue;
+ if (last_init < index2)
+ {
+ last_init = index2;
+ jlabels->store (index2, NULL);
+ clock_list->store (index2, 0.0);
+ excl_list->store (index2, 0.0);
+ ep_list->store (index2, 0.0);
+ incl_list->store (index2, 0.0);
+ ip_list->store (index2, 0.0);
+ vtype->store (index2, 0);
+ }
+ double dvalue = (values != NULL) ? values[index].to_double () : 0.0;
+ double dtotal = total->value[index].to_double ();
+ if (mitem->is_time_val ())
+ clock = 1.e+6 * dbeSession->get_clock (-1);
+ else
+ clock = 0.0;
+
+ clock_list->store (index2, clock);
+ if ((mitem->get_subtype () == Metric::EXCLUSIVE) ||
+ (mitem->get_subtype () == Metric::DATASPACE))
+ {
+ if (i == 0)
+ {
+ char *sstr = mitem->get_name ();
+ if (!strncmp (sstr, estr, len))
+ sstr += len;
+ char *buf, *lstr = strstr (sstr, tstr);
+ if (lstr)
+ buf = dbe_strndup (sstr, lstr - sstr);
+ else
+ buf = dbe_strdup (sstr);
+ jlabels->store (index2, buf);
+ vtype->store (index2, mitem->get_vtype ());
+ }
+ dvalue += excl_list->fetch (index2);
+ double percent = dtotal == 0.0 ? dtotal : (dvalue / dtotal) * 100;
+ excl_list->store (index2, dvalue);
+ ep_list->store (index2, percent);
+ }
+ else
+ {
+ dvalue += incl_list->fetch (index2);
+ if (dvalue > dtotal)
+ dvalue = dtotal; // temporary correction
+ double percent = dtotal == 0.0 ? dtotal : (dvalue / dtotal) * 100;
+ incl_list->store (index2, dvalue);
+ ip_list->store (index2, percent);
+ index2++;
+ }
+ }
+ delete data;
+ }
+ delete prop_mlist;
+ Vector<void*> *summary = new Vector<void*>(2);
+ summary->store (0, name_objs);
+ summary->store (1, metric_objs);
+ return summary;
+}
+
+// Get Summary List
+Vector<void*> *
+dbeGetSummary (int dbevindex, Vector<Obj> *sel_objs, int type, int subtype)
+{
+ bool is_data, is_mem, is_indx, is_iodata, is_heapdata;
+ Hist_data::HistItem *total;
+ MetricList *prop_mlist; // as passed to get_hist_data
+ MetricList *mlist; // as stored in the data
+ Metric *mitem;
+ int i, nname, nitems, index, index2;
+ TValue *values;
+ double dvalue, clock;
+ Hist_data *data;
+ Vector<double> *percent_scale;
+
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ if (sel_objs == NULL || sel_objs->size () == 0)
+ return NULL;
+
+ is_mem = false;
+ is_data = false;
+ is_indx = false;
+ is_iodata = false;
+ is_heapdata = false;
+ nname = SUMMARY_NAME;
+ Vector<Histable*>*objs = new Vector<Histable*>(sel_objs->size ());
+ if (type == DSP_TIMELINE)
+ objs->append ((Histable *) sel_objs->fetch (0));
+ else
+ {
+ switch (type)
+ {
+ case DSP_FUNCTION:
+ data = dbev->func_data;
+ break;
+ case DSP_LINE:
+ data = dbev->line_data;
+ break;
+ case DSP_PC:
+ data = dbev->pc_data;
+ break;
+ case DSP_SELF:
+ data = dbev->fitem_data;
+ break;
+ case DSP_SOURCE:
+ case DSP_SOURCE_V2:
+ data = dbev->src_data;
+ break;
+ case DSP_DISASM:
+ case DSP_DISASM_V2:
+ data = dbev->dis_data;
+ break;
+ case DSP_DLAYOUT:
+ is_data = true;
+ nname = LSUMMARY_NAME;
+ data = dbev->dlay_data;
+ break;
+ case DSP_DATAOBJ:
+ is_data = true;
+ nname = DSUMMARY_NAME;
+ data = dbev->dobj_data;
+ break;
+ case DSP_MEMOBJ:
+ is_data = true;
+ is_mem = true;
+ nname = IMSUMMARY_NAME;
+ data = dbev->get_indxobj_data (subtype);
+ break;
+ case DSP_INDXOBJ:
+ is_indx = true;
+ nname = IMSUMMARY_NAME;
+ data = dbev->get_indxobj_data (subtype);
+ break;
+ case DSP_IOACTIVITY:
+ is_iodata = true;
+ nname = IMSUMMARY_NAME;
+ data = dbev->iofile_data;
+ break;
+ case DSP_IOVFD:
+ is_iodata = true;
+ nname = IMSUMMARY_NAME;
+ data = dbev->iovfd_data;
+ break;
+ case DSP_IOCALLSTACK:
+ is_iodata = true;
+ nname = IMSUMMARY_NAME;
+ data = dbev->iocs_data;
+ break;
+ case DSP_HEAPCALLSTACK:
+ is_heapdata = true;
+ nname = IMSUMMARY_NAME;
+ data = dbev->heapcs_data;
+ break;
+ default:
+ data = NULL;
+ break;
+ }
+ if (data == NULL || data->get_status () != Hist_data::SUCCESS)
+ return NULL;
+
+ Hist_data::HistItem *current_item;
+ for (i = 0; i < sel_objs->size (); i++)
+ {
+ int sel_index = (int) sel_objs->fetch (i);
+ if (type != DSP_IOACTIVITY && type != DSP_IOVFD &&
+ type != DSP_IOCALLSTACK && type != DSP_HEAPCALLSTACK)
+ {
+ if (sel_index < 0 || sel_index >= data->size ())
+ continue;
+ current_item = data->fetch (sel_index);
+ if (current_item->obj == NULL)
+ continue;
+ }
+ else
+ {
+ if (sel_index < 0)
+ continue;
+ bool found = false;
+ for (int j = 0; j < data->size (); j++)
+ {
+ current_item = data->fetch (j);
+ if ((current_item->obj != NULL) && (current_item->obj->id == sel_index))
+ {
+ found = true;
+ break;
+ }
+ }
+ if (!found)
+ continue;
+ }
+ char *nm = current_item->obj->get_name ();
+ if (streq (nm, NTXT ("<Total>")))
+ {
+ // Special case for 'Total'.
+ // Multi selection which includes 'Total' is only 'Total'
+ objs->reset ();
+ objs->append (current_item->obj);
+ break;
+ }
+ objs->append (current_item->obj);
+ }
+ }
+ if (objs->size () == 0)
+ return NULL;
+
+ // Set name area
+ Vector<int> *saligns = new Vector<int>(nname);
+ Vector<char>*mnemonic = new Vector<char>(nname);
+ Vector<char*> *jlabels = new Vector<char*>(nname);
+ Vector<char*> *jvalues = new Vector<char*>(nname);
+ Vector<void*> *name_objs = new Vector<void*>(4);
+ name_objs->store (0, saligns);
+ name_objs->store (1, mnemonic);
+ name_objs->store (2, jlabels);
+ name_objs->store (3, jvalues);
+ if (is_mem)
+ setMemSummary (objs, saligns, mnemonic, jlabels, jvalues);
+ else if (is_indx)
+ setIndxSummary (objs, saligns, mnemonic, jlabels, jvalues);
+ else if (is_data)
+ setDataSummary (objs, saligns, mnemonic, jlabels, jvalues);
+ else if (is_iodata)
+ setIOActivitySummary (objs, saligns, mnemonic, jlabels, jvalues);
+ else if (is_heapdata)
+ setHeapActivitySummary (objs, saligns, mnemonic, jlabels, jvalues);
+ else
+ setSummary (objs, saligns, mnemonic, jlabels, jvalues);
+
+ // Get the reference metrics
+ if (is_data)
+ prop_mlist = new MetricList (dbev->get_metric_ref (MET_DATA));
+ else if (is_indx)
+ prop_mlist = new MetricList (dbev->get_metric_ref (MET_INDX));
+ else if (is_iodata)
+ prop_mlist = new MetricList (dbev->get_metric_ref (MET_IO));
+ else if (is_heapdata)
+ prop_mlist = new MetricList (dbev->get_metric_ref (MET_HEAP));
+ else
+ prop_mlist = new MetricList (dbev->get_metric_ref (MET_NORMAL));
+
+ // XXXX a workaround to avoid aggregated data for compare mode, only show base experiment data
+ if (prop_mlist && dbev->comparingExperiments ())
+ prop_mlist = dbev->get_compare_mlist (prop_mlist, 0);
+ nitems = prop_mlist->get_items ()->size ();
+
+ // Set the metrics area
+ jlabels = new Vector<char*>(nitems);
+ Vector<double> *clock_list = new Vector<double>(nitems);
+ Vector<double> *excl_list = new Vector<double>(nitems);
+ Vector<double> *ep_list = new Vector<double>(nitems);
+ Vector<double> *incl_list = new Vector<double>(nitems);
+ Vector<double> *ip_list = new Vector<double>(nitems);
+ Vector<int> *vtype = new Vector<int>(nitems);
+
+ // Initialize Java String array
+ Vector<void*> *metric_objs = new Vector<void*>(8);
+ metric_objs->store (0, jlabels);
+ metric_objs->store (1, clock_list);
+ metric_objs->store (2, excl_list);
+ metric_objs->store (3, ep_list);
+ metric_objs->store (4, incl_list);
+ metric_objs->store (5, ip_list);
+ metric_objs->store (6, vtype);
+ percent_scale = new Vector<double>();
+ int last_init = -1;
+ for (i = 0; i < objs->size (); i++)
+ {
+ Histable *current_obj = objs->fetch (i);
+ // Get the data to be displayed
+ data = dbev->get_hist_data (prop_mlist, current_obj->get_type (), subtype,
+ Hist_data::SELF, current_obj, dbev->sel_binctx, objs);
+ if (data->get_status () != Hist_data::SUCCESS)
+ {
+ if (type != DSP_DLAYOUT)
+ { // For data_layout, rows with zero metrics are OK
+ delete data;
+ continue;
+ }
+ }
+ Hist_data::HistItem *hi = data->fetch (0);
+ values = hi ? hi->value : NULL;
+ total = data->get_totals ();
+ index2 = 0;
+
+ // get the metric list from the data
+ mlist = data->get_metric_list ();
+
+ // We loop over the metrics in mlist.
+ // We construct index2, which tells us
+ // the corresponding entry in the metric_objs lists.
+ // We need this mapping multiple times.
+ // So, if you change the looping in any way here,
+ // do so as well in other similar loops.
+ // All such loops are marked so:
+ // See discussion on "mlist-to-index2 mapping".
+
+ Vec_loop (Metric*, mlist->get_items (), index, mitem)
+ {
+ if (mitem->get_subtype () == Metric::STATIC)
+ continue;
+ if (last_init < index2)
+ {
+ last_init = index2;
+ jlabels->store (index2, NULL);
+ clock_list->store (index2, 0.0);
+ excl_list->store (index2, 0.0);
+ ep_list->store (index2, 0.0);
+ incl_list->store (index2, 0.0);
+ ip_list->store (index2, 0.0);
+ vtype->store (index2, 0);
+ }
+ dvalue = (values != NULL) ? values[index].to_double () : 0.0;
+ double dtotal = total->value[index].to_double ();
+ percent_scale->store (index, dtotal == 0. ? 0. : 100. / dtotal);
+ if (mitem->is_time_val ())
+ clock = 1.e+6 * dbeSession->get_clock (-1);
+ else
+ clock = 0.0;
+
+ clock_list->store (index2, clock);
+ if (mitem->get_subtype () == Metric::EXCLUSIVE ||
+ mitem->get_subtype () == Metric::DATASPACE)
+ {
+ if (i == 0)
+ {
+ char *sstr = mitem->get_username ();
+ char *buf = dbe_strdup (sstr);
+ jlabels->store (index2, buf);
+ vtype->store (index2, mitem->get_vtype ());
+ }
+ dvalue += excl_list->fetch (index2);
+ double percent = dvalue * percent_scale->fetch (index);
+ excl_list->store (index2, dvalue);
+ ep_list->store (index2, percent);
+ if (is_data || is_indx || is_iodata || is_heapdata)
+ // move to next row, except if there's inclusive data, too
+ index2++;
+ }
+ else
+ {
+ dvalue += incl_list->fetch (index2);
+ if (dvalue > dtotal && mitem->get_type () != BaseMetric::DERIVED)
+ dvalue = dtotal; // temporary correction
+ double percent = dvalue * percent_scale->fetch (index);
+ incl_list->store (index2, dvalue);
+ ip_list->store (index2, percent);
+ index2++;
+ }
+ }
+ delete data;
+ }
+
+ // for multi-selection, we have to recompute the derived metrics
+ if (objs->size () > 1 &&
+ dbev->get_derived_metrics () != NULL &&
+ dbev->get_derived_metrics ()->get_items () != NULL &&
+ dbev->get_derived_metrics ()->get_items ()->size () > 0)
+ {
+ // See discussion on "mlist-to-index2 mapping".
+ Vector<Metric*> *mvec = new Vector<Metric*>(nitems);
+ index2 = 0;
+ Vec_loop (Metric*, prop_mlist->get_items (), index, mitem)
+ {
+ if (mitem->get_subtype () == Metric::STATIC)
+ continue;
+ if (mitem->get_subtype () == Metric::EXCLUSIVE ||
+ mitem->get_subtype () == Metric::DATASPACE)
+ {
+ mvec->store (index2, mitem);
+ if (is_data || is_indx || is_iodata || is_heapdata)
+ index2++;
+ }
+ else
+ {
+ assert (strcmp (mvec->fetch (index2)->get_cmd (), mitem->get_cmd ()) == 0);
+ index2++;
+ }
+ }
+ int *map = dbev->get_derived_metrics ()->construct_map (mvec, BaseMetric::EXCLUSIVE, mvec->fetch (0)->get_expr_spec ());
+ if (map != NULL)
+ {
+ int nmetrics = mvec->size ();
+ double *evalues = (double *) malloc (nmetrics * sizeof (double));
+ double *ivalues = (double *) malloc (nmetrics * sizeof (double));
+ for (index2 = 0; index2 < nmetrics; index2++)
+ {
+ evalues[index2] = excl_list->fetch (index2);
+ ivalues[index2] = incl_list->fetch (index2);
+ }
+
+ // evaluate derived metrics
+ dbev->get_derived_metrics ()->eval (map, evalues);
+ dbev->get_derived_metrics ()->eval (map, ivalues);
+ for (index2 = 0; index2 < nmetrics; index2++)
+ {
+ excl_list->store (index2, evalues[index2]);
+ incl_list->store (index2, ivalues[index2]);
+ }
+
+ // recompute percentages for derived metrics EUGENE maybe all percentage computations should be moved here
+ // See discussion on "mlist-to-index2 mapping".
+ index2 = 0;
+ Vec_loop (Metric*, prop_mlist->get_items (), index, mitem)
+ {
+ if (mitem->get_subtype () == Metric::STATIC)
+ continue;
+ if (mitem->get_subtype () == Metric::EXCLUSIVE ||
+ mitem->get_subtype () == Metric::DATASPACE)
+ {
+ if (mitem->get_type () == BaseMetric::DERIVED)
+ ep_list->store (index2, excl_list->fetch (index2) * percent_scale->fetch (index));
+ if (is_data || is_indx || is_iodata || is_heapdata)
+ index2++;
+ }
+ else
+ {
+ if (mitem->get_type () == BaseMetric::DERIVED)
+ ip_list->store (index2, incl_list->fetch (index2) * percent_scale->fetch (index));
+ index2++;
+ }
+ }
+ free (evalues);
+ free (ivalues);
+ free (map);
+ }
+ delete mvec;
+ }
+ delete prop_mlist;
+ Vector<void*> *summary = new Vector<void*>(2);
+ summary->store (0, name_objs);
+ summary->store (1, metric_objs);
+ delete objs;
+ delete percent_scale;
+ return summary;
+}
+
+char *
+dbeGetExpName (int /*dbevindex*/, char *dir_name)
+{
+ char *ret;
+ char *warn;
+ if (col_ctr == NULL)
+ col_ctr = new Coll_Ctrl (1); // Potential race condition?
+ if (dir_name != NULL)
+ {
+ ret = col_ctr->set_directory (dir_name, &warn);
+ // note that the warning and error msgs are written to stderr, not returned to caller
+ if (warn != NULL)
+ fprintf (stderr, NTXT ("%s"), warn);
+ if (ret != NULL)
+ fprintf (stderr, NTXT ("%s"), ret);
+ }
+ return dbe_strdup (col_ctr->get_expt ());
+}
+
+// === CollectDialog HWC info ===
+
+Vector<Vector<char*>*> *
+dbeGetHwcSets (int /*dbevindex*/, bool forKernel)
+{
+ Vector<Vector<char*>*> *list = new Vector<Vector<char*>*>(2);
+ char * defctrs = hwc_get_default_cntrs2 (forKernel, 1);
+ Vector<char*> *i18n = new Vector<char*>(1); // User name
+ Vector<char*> *name = new Vector<char*>(1); // Internal name
+ if (NULL != defctrs)
+ {
+ i18n->store (0, strdup (defctrs));
+ name->store (0, strdup (NTXT ("default")));
+ }
+ list->store (0, i18n);
+ list->store (1, name);
+ return list;
+}
+
+static Vector<void*> *
+dbeGetHwcs (Hwcentry **hwcs)
+{
+ int sz;
+ for (sz = 0; hwcs && hwcs[sz]; sz++)
+ ;
+ Vector<void*> *list = new Vector<void*>(9);
+ Vector<char*> *i18n = new Vector<char*>(sz);
+ Vector<char*> *name = new Vector<char*>(sz);
+ Vector<char*> *int_name = new Vector<char*>(sz);
+ Vector<char*> *metric = new Vector<char*>(sz);
+ Vector<long long> *val = new Vector<long long>(sz);
+ Vector<int> *timecvt = new Vector<int>(sz);
+ Vector<int> *memop = new Vector<int>(sz);
+ Vector<char*> *short_desc = new Vector<char*>(sz);
+ Vector<Vector<int>*> *reglist_v = new Vector<Vector<int>*>(sz);
+ Vector<bool> *supportsAttrs = new Vector<bool>(sz);
+ Vector<bool> *supportsMemspace = new Vector<bool>(sz);
+
+ for (int i = 0; i < sz; i++)
+ {
+ Hwcentry *ctr = hwcs[i];
+ Vector<int> *registers = new Vector<int>(MAX_PICS);
+ regno_t *reglist = ctr->reg_list;
+ for (int k = 0; !REG_LIST_EOL (reglist[k]) && k < MAX_PICS; k++)
+ registers->store (k, reglist[k]);
+
+ i18n->store (i, dbe_strdup (hwc_i18n_metric (ctr)));
+ name->store (i, dbe_strdup (ctr->name));
+ int_name->store (i, dbe_strdup (ctr->int_name));
+ metric->store (i, dbe_strdup (ctr->metric));
+ val->store (i, ctr->val); // signed promotion from int
+ timecvt->store (i, ctr->timecvt);
+ memop->store (i, ctr->memop);
+ reglist_v->store (i, registers);
+ short_desc->store (i, dbe_strdup (ctr->short_desc));
+ supportsAttrs->store (i, true);
+ supportsMemspace->store (i, ABST_MEMSPACE_ENABLED (ctr->memop));
+ }
+ list->store (0, i18n);
+ list->store (1, name);
+ list->store (2, int_name);
+ list->store (3, metric);
+ list->store (4, val);
+ list->store (5, timecvt);
+ list->store (6, memop);
+ list->store (7, short_desc);
+ list->store (8, reglist_v);
+ list->store (9, supportsAttrs);
+ list->store (10, supportsMemspace);
+ return list;
+}
+
+Vector<void *> *
+dbeGetHwcsAll (int /*dbevindex*/, bool forKernel)
+{
+ Vector<void*> *list = new Vector<void*>(2);
+ list->store (0, dbeGetHwcs (hwc_get_std_ctrs (forKernel)));
+ list->store (1, dbeGetHwcs (hwc_get_raw_ctrs (forKernel)));
+ return list;
+}
+
+Vector<char*> *
+dbeGetHwcHelp (int /*dbevindex*/, bool forKernel)
+{
+ Vector<char*> *strings = new Vector<char*>(32);
+ FILE *f = tmpfile ();
+ hwc_usage_f (forKernel, f, "", 0, 0, 1); // writes to f
+ fflush (f);
+ fseek (f, 0, SEEK_SET);
+#define MAX_LINE_LEN 2048
+ char buff[MAX_LINE_LEN];
+ int ii = 0;
+ while (fgets (buff, MAX_LINE_LEN, f))
+ strings->store (ii++, dbe_strdup (buff));
+ fclose (f);
+ return strings;
+}
+
+Vector<char*> *
+dbeGetHwcAttrList (int /*dbevindex*/, bool forKernel)
+{
+ char ** attr_list = hwc_get_attrs (forKernel); // Get Attribute list
+ int size;
+ for (size = 0; attr_list && attr_list[size]; size++)
+ ;
+
+ Vector<char*> *name = new Vector<char*>(size);
+ for (int i = 0; i < size; i++)
+ name->store (i, dbe_strdup (attr_list[i]));
+ return name;
+}
+
+//Get maximum number of simultaneous counters
+int
+dbeGetHwcMaxConcurrent (int /*dbevindex*/, bool forKernel)
+{
+ return hwc_get_max_concurrent (forKernel);
+}
+
+// === End CollectDialog HWC info ===
+
+
+// Instruction-frequency data
+Vector<char*> *
+dbeGetIfreqData (int dbevindex)
+{
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ if (!dbeSession->is_ifreq_available ())
+ return NULL;
+ int size = dbeSession->nexps ();
+ if (size == 0)
+ return NULL;
+
+ // Initialize Java String array
+ Vector<char*> *list = new Vector<char*>();
+ for (int i = 0; i < size; i++)
+ {
+ Experiment *exp = dbeSession->get_exp (i);
+ if (exp->broken || !dbev->get_exp_enable (i) || !exp->ifreqavail)
+ continue;
+ // write a header for the experiment
+ list->append (dbe_sprintf (GTXT ("Instruction frequency data from experiment %s\n\n"),
+ exp->get_expt_name ()));
+ // add its instruction frequency messages
+ char *ifreq = pr_mesgs (exp->fetch_ifreq (), NTXT (""), NTXT (""));
+ list->append (ifreq);
+ }
+ return list;
+}
+
+// LeakList related methods
+//
+Vector<void*> *
+dbeGetLeakListInfo (int dbevindex, bool leakflag)
+{
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ MetricList *origmlist = dbev->get_metric_list (MET_NORMAL);
+ MetricList *nmlist = new MetricList (origmlist);
+ if (leakflag)
+ nmlist->set_metrics (NTXT ("e.heapleakbytes:e.heapleakcnt:name"), true,
+ dbev->get_derived_metrics ());
+ else
+ nmlist->set_metrics (NTXT ("e.heapallocbytes:e.heapalloccnt:name"), true,
+ dbev->get_derived_metrics ());
+ MetricList *mlist = new MetricList (nmlist);
+ delete nmlist;
+
+ CStack_data *lam = dbev->get_cstack_data (mlist);
+ if (lam == NULL || lam->size () == 0)
+ {
+ delete lam;
+ delete mlist;
+ return NULL;
+ }
+ Vector<Vector<Obj>*> *evalue = new Vector<Vector<Obj>*>(lam->size ());
+ Vector<Vector<Obj>*> *pcstack = new Vector<Vector<Obj>*>(lam->size ());
+ Vector<Vector<Obj>*> *offstack = new Vector<Vector<Obj>*>(lam->size ());
+ Vector<Vector<Obj>*> *fpcstack = new Vector<Vector<Obj>*>(lam->size ());
+ Vector<Vector<Obj>*> *sumval = new Vector<Vector<Obj>*>(lam->size ());
+
+ int index;
+ CStack_data::CStack_item *lae;
+ Vec_loop (CStack_data::CStack_item*, lam->cstack_items, index, lae)
+ {
+ Vector<Obj> *jivals = NULL;
+ if (lae != NULL)
+ {
+ jivals = new Vector<Obj>(4);
+ jivals->store (0, (Obj) (index + 1));
+ jivals->store (1, (Obj) lae->value[1].ll);
+ jivals->store (2, (Obj) lae->value[0].ll);
+ jivals->store (3, (Obj) (leakflag ? 1 : 2));
+ }
+ evalue->store (index, jivals);
+ int snum = lae->stack->size ();
+ Vector<Obj> *jivals1 = new Vector<Obj>(snum);
+ Vector<Obj> *jivals2 = new Vector<Obj>(snum);
+ Vector<Obj> *jivals3 = new Vector<Obj>(snum);
+ if (lae->stack != NULL)
+ {
+ for (int i = lae->stack->size () - 1; i >= 0; i--)
+ {
+ DbeInstr *instr = lae->stack->fetch (i);
+ jivals1->store (i, (Obj) instr);
+ jivals2->store (i, (Obj) instr->func);
+ jivals3->store (i, (Obj) instr->addr);
+ }
+ }
+ fpcstack->store (index, jivals1);
+ pcstack->store (index, jivals2);
+ offstack->store (index, jivals3);
+ lae++;
+ }
+ Vector<Obj> *jivals4 = new Vector<Obj>(3);
+ jivals4->store (0, (Obj) lam->size ());
+ jivals4->store (1, (Obj) lam->total->value[1].ll);
+ jivals4->store (2, (Obj) lam->total->value[0].ll);
+ sumval->store (0, jivals4);
+ delete lam;
+ delete mlist;
+ Vector<void*> *earray = new Vector<void*>(5);
+ earray->store (0, evalue);
+ earray->store (1, pcstack);
+ earray->store (2, offstack);
+ earray->store (3, fpcstack);
+ earray->store (4, sumval);
+ return earray;
+}
+
+// Map timeline address to function instr
+//
+Obj
+dbeGetObject (int dbevindex, Obj sel_func, Obj sel_pc)
+{
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ if (sel_pc)
+ return sel_pc;
+ return sel_func;
+}
+
+char *
+dbeGetName (int /*dbevindex*/, int exp_id)
+// This function's name is not descriptive enough - it returns a string
+// containing the full experiment name with path, process name, and PID.
+// There are various dbe functions that provide experiment name and experiment
+// details, and they should probably be consolidated/refactored. (TBR)
+// For another example of similar output formatting, see dbeGetExpName().
+{
+ int id = (exp_id < 0) ? 0 : exp_id;
+ Experiment *exp = dbeSession->get_exp (id);
+ if (exp == NULL)
+ return NULL;
+ char *buf =
+ dbe_sprintf (NTXT ("%s [%s, PID %d]"),
+ exp->get_expt_name (),
+ exp->utargname != NULL ? exp->utargname : GTXT ("(unknown)"),
+ exp->getPID ());
+ return buf;
+}
+
+Vector<char*> *
+dbeGetExpVerboseName (Vector<int> *exp_ids)
+{
+ int len = exp_ids->size ();
+ Vector<char*> *list = new Vector<char*>(len);
+ for (int i = 0; i < len; i++)
+ {
+ char * verboseName = dbeGetName (0, exp_ids->fetch (i)); // no strdup()
+ list->store (i, verboseName);
+ }
+ return list;
+}
+
+long long
+dbeGetStartTime (int /*dbevindex*/, int exp_id)
+{
+ int id = (exp_id < 0) ? 0 : exp_id;
+ Experiment *exp = dbeSession->get_exp (id);
+ return exp ? exp->getStartTime () : (long long) 0;
+}
+
+long long
+dbeGetRelativeStartTime (int /*dbevindex*/, int exp_id)
+{
+ int id = (exp_id < 0) ? 0 : exp_id;
+ Experiment *exp = dbeSession->get_exp (id);
+ return exp ? exp->getRelativeStartTime () : (long long) 0;
+}
+
+long long
+dbeGetEndTime (int /*dbevindex*/, int exp_id)
+{
+ int id = (exp_id < 0) ? 0 : exp_id;
+ Experiment *exp = dbeSession->get_exp (id);
+
+ // Experiment::getEndTime was initially implemented as
+ // returning exp->last_event. To preserve the semantics
+ // new Experiment::getLastEvent() is used here.
+ return exp ? exp->getLastEvent () : (long long) 0;
+}
+
+int
+dbeGetClock (int /*dbevindex*/, int exp_id)
+{
+ return dbeSession->get_clock (exp_id);
+}
+
+long long
+dbeGetWallStartSec (int /*dbevindex*/, int exp_id)
+{
+ int id = (exp_id < 0) ? 0 : exp_id;
+ Experiment *exp = dbeSession->get_exp (id);
+ return exp ? exp->getWallStartSec () : 0ll;
+}
+
+char *
+dbeGetHostname (int /*dbevindex*/, int exp_id)
+{
+ int id = (exp_id < 0) ? 0 : exp_id;
+ Experiment *exp = dbeSession->get_exp (id);
+ return exp ? dbe_strdup (exp->hostname) : NULL;
+}
+
+static DataView *
+getTimelinePackets (int dbevindex, int exp_id, int data_id, int entity_prop_id)
+{
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ const int sortprop_count = 3;
+ const int sortprops[sortprop_count] = {
+ PROP_HWCTAG, // aux
+ entity_prop_id,
+ PROP_TSTAMP
+ };
+ DataView *packets = dbev->get_filtered_events (exp_id, data_id,
+ sortprops, sortprop_count);
+ return packets;
+}
+
+static long
+getIdxByVals (DataView * packets, int aux, int entity_prop_val,
+ uint64_t time, DataView::Relation rel)
+{
+ const int sortprop_count = 3;
+ Datum tval[sortprop_count];
+ tval[0].setUINT32 (aux);
+ tval[1].setUINT32 (entity_prop_val); //CPUID, LWPID, THRID are downsized to 32
+ tval[2].setUINT64 (time);
+ long idx = packets->getIdxByVals (tval, rel);
+ return idx;
+}
+
+static bool
+isValidIdx (DataView * packets, int entity_prop_id,
+ int aux, int entity_prop_val, long idx)
+{
+ if (idx < 0 || idx >= packets->getSize ())
+ return false;
+ int pkt_aux = packets->getIntValue (PROP_HWCTAG, idx);
+ if (pkt_aux != aux)
+ return false;
+ if (entity_prop_id == PROP_EXPID)
+ return true; // not a packet property; we know the packet is in this experiment
+ if (entity_prop_id == PROP_NONE)
+ return true; // not a packet property; we know the packet is in this experiment
+ int pkt_ent = packets->getIntValue (entity_prop_id, idx);
+ if (pkt_ent != entity_prop_val)
+ return false;
+ return true;
+}
+
+static bool
+hasInvisbleTLEvents (Experiment *exp, VMode view_mode)
+{
+ if (exp->has_java && view_mode == VMODE_USER)
+ return true;
+ return false;
+}
+
+static bool
+isVisibleTLEvent (Experiment *exp, VMode view_mode, DataView* packets, long idx)
+{
+ if (hasInvisbleTLEvents (exp, view_mode))
+ {
+ JThread *jthread = (JThread*) packets->getObjValue (PROP_JTHREAD, idx);
+ if (jthread == JTHREAD_NONE || (jthread != NULL && jthread->is_system ()))
+ return false;
+ }
+ return true;
+}
+
+static long
+getTLVisibleIdxByStepping (Experiment *exp, VMode view_mode, int entity_prop_id,
+ DataView * packets, int aux, int entity_prop_val,
+ long idx, long move_count, int direction)
+{
+ assert (move_count >= 0);
+ assert (direction == 1 || direction == -1 || direction == 0);
+ if (direction == 0 /* precise hit required */)
+ move_count = 0;
+ do
+ {
+ if (!isValidIdx (packets, entity_prop_id, aux, entity_prop_val, idx))
+ return -1;
+ if (isVisibleTLEvent (exp, view_mode, packets, idx))
+ {
+ if (move_count <= 0)
+ break;
+ move_count--;
+ }
+ if (direction == 0)
+ return -1;
+ idx += direction;
+ }
+ while (1);
+ return idx;
+}
+
+static long
+getTLVisibleIdxByVals (Experiment *exp, VMode view_mode, int entity_prop_id,
+ DataView * packets,
+ int aux, int entity_prop_val, uint64_t time, DataView::Relation rel)
+{
+ long idx = getIdxByVals (packets, aux, entity_prop_val, time, rel);
+ if (!hasInvisbleTLEvents (exp, view_mode))
+ return idx;
+ if (idx < 0)
+ return idx;
+ if (rel == DataView::REL_EQ)
+ return -1; // would require bi-directional search... not supported for now
+ int direction = (rel == DataView::REL_LT || rel == DataView::REL_LTEQ) ? -1 : 1;
+ idx = getTLVisibleIdxByStepping (exp, view_mode, entity_prop_id, packets,
+ aux, entity_prop_val,
+ idx, 0 /* first match */, direction);
+ return idx;
+}
+
+// In thread mode, the entity name for non Java thread should be the 1st func
+// from the current thread's stack. See #4961315
+static char*
+getThreadRootFuncName (int, int, int, int, VMode)
+{
+ return NULL; // until we figure out what we want to show... YXXX
+}
+
+Vector<void*> *
+dbeGetEntityProps (int dbevindex) //YXXX TBD, should this be exp-specific?
+{
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ Vector<int> *prop_id = new Vector<int>();
+ Vector<char*> *prop_name = new Vector<char*>();
+ Vector<char*> *prop_uname = new Vector<char*>();
+ Vector<char*> *prop_cname = new Vector<char*>(); //must match TLModeCmd vals!
+
+ prop_id->append (PROP_NONE);
+ prop_name->append (dbe_strdup (GTXT ("NONE")));
+ prop_uname->append (dbe_strdup (GTXT ("Unknown")));
+ prop_cname->append (dbe_strdup (NTXT ("unknown")));
+
+ prop_id->append (PROP_LWPID);
+ prop_name->append (dbe_strdup (GTXT ("LWPID")));
+ prop_uname->append (dbe_strdup (GTXT ("LWP")));
+ prop_cname->append (dbe_strdup (NTXT ("lwp")));
+
+ prop_id->append (PROP_THRID);
+ prop_name->append (dbe_strdup (GTXT ("THRID")));
+ prop_uname->append (dbe_strdup (GTXT ("Thread")));
+ prop_cname->append (dbe_strdup (NTXT ("thread")));
+
+ prop_id->append (PROP_CPUID);
+ prop_name->append (dbe_strdup (GTXT ("CPUID")));
+ prop_uname->append (dbe_strdup (GTXT ("CPU")));
+ prop_cname->append (dbe_strdup (NTXT ("cpu")));
+
+ prop_id->append (PROP_EXPID);
+ prop_name->append (dbe_strdup (GTXT ("EXPID")));
+ prop_uname->append (dbe_strdup (GTXT ("Process"))); // placeholder...
+ // ...until we finalize how to expose user-level Experiments, descendents
+ prop_cname->append (dbe_strdup (NTXT ("experiment")));
+ Vector<void*> *darray = new Vector<void*>();
+ darray->store (0, prop_id);
+ darray->store (1, prop_name);
+ darray->store (2, prop_uname);
+ darray->store (3, prop_cname);
+ return darray;
+}
+
+Vector<void*> *
+dbeGetEntities (int dbevindex, int exp_id, int entity_prop_id)
+{
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ Experiment *exp = dbeSession->get_exp (exp_id);
+ if (exp == NULL)
+ return NULL;
+
+ // Recognize and skip faketime experiments
+ if (exp->timelineavail == false)
+ return NULL;
+ Vector<Histable*> *tagObjs = exp->getTagObjs ((Prop_type) entity_prop_id);
+ int total_nelem;
+ if (tagObjs)
+ total_nelem = (int) tagObjs->size ();
+ else
+ total_nelem = 0;
+ const VMode view_mode = dbev->get_view_mode ();
+ bool show_java_threadnames = (entity_prop_id == PROP_THRID &&
+ view_mode != VMODE_MACHINE);
+ // allocate the structures for the return
+ Vector<int> *entity_prop_vals = new Vector<int>();
+ Vector<char*> *jthr_names = new Vector<char*>();
+ Vector<char*> *jthr_g_names = new Vector<char*>();
+ Vector<char*> *jthr_p_names = new Vector<char*>();
+
+ // now walk the tagObjs from the experiment, and check for filtering
+ for (int tagObjsIdx = 0; tagObjsIdx < total_nelem; tagObjsIdx++)
+ {
+ int entity_prop_val = (int) ((Other *) tagObjs->fetch (tagObjsIdx))->tag;
+ entity_prop_vals->append (entity_prop_val);
+ char *jname, *jgname, *jpname;
+ JThread *jthread = NULL;
+ bool has_java_threadnames = false;
+ if (show_java_threadnames)
+ {
+ jthread = exp->get_jthread (entity_prop_val);
+ has_java_threadnames = (jthread != JTHREAD_DEFAULT
+ && jthread != JTHREAD_NONE);
+ }
+ if (!has_java_threadnames)
+ {
+ jname = jgname = jpname = NULL;
+ if (entity_prop_id == PROP_THRID || entity_prop_id == PROP_LWPID)
+ // if non Java thread, set thread name to the 1st func
+ // from the current thread's stack. see #4961315
+ jname = getThreadRootFuncName (dbevindex, exp_id, entity_prop_id,
+ entity_prop_val, view_mode);
+ }
+ else
+ {
+ jname = dbe_strdup (jthread->name);
+ jgname = dbe_strdup (jthread->group_name);
+ jpname = dbe_strdup (jthread->parent_name);
+ }
+ jthr_names->append (jname);
+ jthr_g_names->append (jgname);
+ jthr_p_names->append (jpname);
+ }
+ Vector<char*> *entity_prop_name_v = new Vector<char*>();
+ char* entity_prop_name = dbeSession->getPropName (entity_prop_id);
+ entity_prop_name_v->append (entity_prop_name);
+ Vector<void*> *darray = new Vector<void*>(5);
+ darray->store (0, entity_prop_vals);
+ darray->store (1, jthr_names);
+ darray->store (2, jthr_g_names);
+ darray->store (3, jthr_p_names);
+ darray->store (4, entity_prop_name_v); // vector only has 1 element
+ return darray;
+}
+
+// TBR: dbeGetEntities() can be set to private now that we have dbeGetEntitiesV2()
+Vector<void*> *
+dbeGetEntitiesV2 (int dbevindex, Vector<int> *exp_ids, int entity_prop_id)
+{
+ int sz = exp_ids->size ();
+ Vector<void*> *res = new Vector<void*>(sz);
+ for (int ii = 0; ii < sz; ii++)
+ {
+ int expIdx = exp_ids->fetch (ii);
+ Vector<void*>* ents = dbeGetEntities (dbevindex, expIdx, entity_prop_id);
+ res->store (ii, ents);
+ }
+ return res;
+}
+
+//YXXX old-tl packets still used for details
+static Vector<void*> *
+getTLDetailValues (int dbevindex, Experiment * exp, int data_id,
+ VMode view_mode, DataView *packets, long idx)
+{
+ Vector<long long> *value = new Vector<long long>(15);
+ long i = idx;
+ if (data_id == DATA_SAMPLE || data_id == DATA_GCEVENT)
+ {
+ //YXXX DATA_SAMPLE not handled but could be.
+ }
+ Obj stack = (unsigned long) getStack (view_mode, packets, i);
+ Vector<Obj> *funcs = stack ? dbeGetStackFunctions (dbevindex, stack) : NULL;
+ Function *func = (Function*)
+ getStackPC (0, view_mode, packets, i)->convertto (Histable::FUNCTION);
+ // Fill common data
+ value->store (0, packets->getIntValue (PROP_LWPID, i));
+ value->store (1, packets->getIntValue (PROP_THRID, i));
+ value->store (2, packets->getIntValue (PROP_CPUID, i));
+ value->store (3, packets->getLongValue (PROP_TSTAMP, i));
+ value->store (4, (unsigned long) stack);
+ value->store (5, (unsigned long) func);
+
+ // Fill specific data
+ switch (data_id)
+ {
+ case DATA_CLOCK:
+ value->store (6, packets->getIntValue (PROP_MSTATE, i));
+ {
+ hrtime_t interval = exp->get_params ()->ptimer_usec * 1000LL // nanoseconds
+ * packets->getLongValue (PROP_NTICK, i);
+ value->store (7, interval);
+ }
+ value->store (8, packets->getIntValue (PROP_OMPSTATE, i));
+ value->store (9, packets->getLongValue (PROP_EVT_TIME, i)); // visual duration
+ break;
+ case DATA_SYNCH:
+ value->store (6, packets->getLongValue (PROP_EVT_TIME, i));
+ value->store (7, packets->getLongValue (PROP_SOBJ, i));
+ break;
+ case DATA_HWC:
+ value->store (6, packets->getLongValue (PROP_HWCINT, i));
+ value->store (7, packets->getLongValue (PROP_VADDR, i)); // data vaddr
+ value->store (8, packets->getLongValue (PROP_PADDR, i)); // data paddr
+ value->store (9, packets->getLongValue (PROP_VIRTPC, i)); // pc paddr
+ value->store (10, packets->getLongValue (PROP_PHYSPC, i)); // pc vaddr
+ break;
+ case DATA_RACE:
+ value->store (6, packets->getIntValue (PROP_RTYPE, i));
+ value->store (7, packets->getIntValue (PROP_RID, i));
+ value->store (8, packets->getLongValue (PROP_RVADDR, i));
+ break;
+ case DATA_DLCK:
+ value->store (6, packets->getIntValue (PROP_DTYPE, i));
+ value->store (7, packets->getIntValue (PROP_DLTYPE, i));
+ value->store (8, packets->getIntValue (PROP_DID, i));
+ value->store (9, packets->getLongValue (PROP_DVADDR, i));
+ break;
+ case DATA_HEAP:
+ case DATA_HEAPSZ:
+ value->store (6, packets->getIntValue (PROP_HTYPE, i));
+ value->store (7, packets->getLongValue (PROP_HSIZE, i));
+ value->store (8, packets->getLongValue (PROP_HVADDR, i));
+ value->store (9, packets->getLongValue (PROP_HOVADDR, i));
+ value->store (10, packets->getLongValue (PROP_HLEAKED, i));
+ value->store (11, packets->getLongValue (PROP_HFREED, i));
+ value->store (12, packets->getLongValue (PROP_HCUR_ALLOCS, i)); // signed int64_t
+ value->store (13, packets->getLongValue (PROP_HCUR_LEAKS, i));
+ break;
+ case DATA_IOTRACE:
+ value->store (6, packets->getIntValue (PROP_IOTYPE, i));
+ value->store (7, packets->getIntValue (PROP_IOFD, i));
+ value->store (8, packets->getLongValue (PROP_IONBYTE, i));
+ value->store (9, packets->getLongValue (PROP_EVT_TIME, i));
+ value->store (10, packets->getIntValue (PROP_IOVFD, i));
+ break;
+ }
+ Vector<void*> *result = new Vector<void*>(5);
+ result->store (0, value);
+ result->store (1, funcs); // Histable::Function*
+ result->store (2, funcs ? dbeGetFuncNames (dbevindex, funcs) : 0); // formatted func names
+ result->store (3, stack ? dbeGetStackPCs (dbevindex, stack) : 0); // Histable::DbeInstr*
+ result->store (4, stack ? dbeGetStackNames (dbevindex, stack) : 0); // formatted pc names
+ return result;
+}
+
+Vector<void*> *
+dbeGetTLDetails (int dbevindex, int exp_id, int data_id,
+ int entity_prop_id, Obj event_id)
+{
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ Experiment *exp = dbeSession->get_exp (exp_id < 0 ? 0 : exp_id);
+ if (exp == NULL)
+ return NULL;
+ DataView *packets =
+ getTimelinePackets (dbevindex, exp_id, data_id, entity_prop_id);
+ if (!packets)
+ return NULL;
+
+ VMode view_mode = dbev->get_view_mode ();
+ long idx = (long) event_id;
+ Vector<void*> *values = getTLDetailValues (dbevindex, exp, data_id, view_mode, packets, idx);
+ return values;
+}
+
+Vector<Obj> *
+dbeGetStackFunctions (int dbevindex, Obj stack)
+{
+ Vector<Obj> *instrs = dbeGetStackPCs (dbevindex, stack);
+ if (instrs == NULL)
+ return NULL;
+ int stsize = instrs->size ();
+ Vector<Obj> *jivals = new Vector<Obj>(stsize);
+ for (int i = 0; i < stsize; i++)
+ {
+ Histable *obj = (Histable*) instrs->fetch (i);
+ // if ( obj->get_type() != Histable::LINE ) {//YXXX what is this?
+ // Remove the above check: why not do this conversion for lines -
+ // otherwise filtering in timeline by function stack in omp user mode is broken
+ obj = obj->convertto (Histable::FUNCTION);
+ jivals->store (i, (Obj) obj);
+ }
+ delete instrs;
+ return jivals;
+}
+
+Vector<void*> *
+dbeGetStacksFunctions (int dbevindex, Vector<Obj> *stacks)
+{
+ long sz = stacks->size ();
+ Vector<void*> *res = new Vector<void*>(sz);
+ for (int ii = 0; ii < sz; ii++)
+ {
+ Obj stack = stacks->fetch (ii);
+ Vector<Obj> *jivals = dbeGetStackFunctions (dbevindex, stack);
+ res->store (ii, jivals);
+ }
+ return res;
+}
+
+Vector<Obj> *
+dbeGetStackPCs (int dbevindex, Obj stack)
+{
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ if (stack == 0)
+ return NULL;
+
+ bool show_all = dbev->isShowAll ();
+ Vector<Histable*> *instrs = CallStack::getStackPCs ((void *) stack, !show_all);
+ int stsize = instrs->size ();
+ int istart = 0;
+ bool showAll = dbev->isShowAll ();
+ for (int i = 0; i < stsize - 1; i++)
+ {
+ Function *func = (Function*) instrs->fetch (i)->convertto (Histable::FUNCTION);
+ int ix = func->module->loadobject->seg_idx;
+ if (showAll && dbev->get_lo_expand (ix) == LIBEX_API)
+ // truncate stack here: LIBRARY_VISIBILITY if we are using API only but no hide
+ istart = i;
+ }
+ stsize = stsize - istart;
+ Vector<Obj> *jlvals = new Vector<Obj>(stsize);
+ for (int i = 0; i < stsize; i++)
+ {
+ Histable *instr = instrs->fetch (i + istart);
+ jlvals->store (i, (Obj) instr);
+ }
+ delete instrs;
+ return jlvals;
+}
+
+Vector<char*> *
+dbeGetStackNames (int dbevindex, Obj stack)
+{
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ Vector<Obj> *instrs = dbeGetStackPCs (dbevindex, stack);
+ if (instrs == NULL)
+ return NULL;
+ int stsize = instrs->size ();
+ Vector<char*> *list = new Vector<char*>(stsize);
+ bool showAll = dbev->isShowAll ();
+ for (int i = 0; i < stsize; i++)
+ {
+ Histable* instr = (Histable*) instrs->fetch (i);
+ if (!showAll)
+ {
+ // LIBRARY_VISIBILITY
+ Function *func = (Function*) instr->convertto (Histable::FUNCTION);
+ LoadObject *lo = ((Function*) func)->module->loadobject;
+ if (dbev->get_lo_expand (lo->seg_idx) == LIBEX_HIDE)
+ {
+ list->store (i, dbe_strdup (lo->get_name ()));
+ continue;
+ }
+ }
+ list->store (i, dbe_strdup (instr->get_name (dbev->get_name_format ())));
+ }
+ delete instrs;
+ return list;
+}
+
+Vector<void*> *
+dbeGetSamples (int dbevindex, int exp_id, int64_t lo_idx, int64_t hi_idx)
+{
+ DataView * packets =
+ getTimelinePackets (dbevindex, exp_id, DATA_SAMPLE, PROP_EXPID);
+ if (packets == NULL || packets->getSize () == 0)
+ return NULL;
+ long lo;
+ if (lo_idx < 0)
+ lo = 0;
+ else
+ lo = (long) lo_idx;
+
+ long long max = packets->getSize () - 1;
+ long hi;
+ if (hi_idx < 0 || hi_idx > max)
+ hi = (long) max;
+ else
+ hi = (long) hi_idx;
+
+ Vector<Vector<long long>*> *sarray = new Vector<Vector<long long>*>;
+ Vector<long long>* starts = new Vector<long long>;
+ Vector<long long>* ends = new Vector<long long>;
+ Vector<long long>* rtimes = new Vector<long long>;
+ Vector<char*> *startNames = new Vector<char*>;
+ Vector<char*> *endNames = new Vector<char*>;
+ Vector<int> *sampId = new Vector<int>;
+
+ for (long index = lo; index <= hi; index++)
+ {
+ Sample *sample = (Sample*) packets->getObjValue (PROP_SMPLOBJ, index);
+ PrUsage *prusage = sample->get_usage ();
+ if (prusage == NULL)
+ prusage = new PrUsage;
+ Vector<long long> *states = prusage->getMstateValues ();
+ sarray->append (states);
+ starts->append (sample->get_start_time ());
+ ends->append (sample->get_end_time ());
+ rtimes->append (prusage->pr_rtime);
+ startNames->append (dbe_strdup (sample->get_start_label ()));
+ endNames->append (dbe_strdup (sample->get_end_label ()));
+ sampId->append (sample->get_number ());
+ }
+ Vector<void *> *res = new Vector<void*>(6);
+ res->store (0, sarray);
+ res->store (1, starts);
+ res->store (2, ends);
+ res->store (3, rtimes);
+ res->store (4, startNames);
+ res->store (5, endNames);
+ res->store (6, sampId);
+ return res;
+}
+
+Vector<void*> *
+dbeGetGCEvents (int dbevindex, int exp_id, int64_t lo_idx, int64_t hi_idx)
+{
+ DataView *packets =
+ getTimelinePackets (dbevindex, exp_id, DATA_GCEVENT, PROP_EXPID);
+ if (packets == NULL || packets->getSize () == 0)
+ return NULL;
+
+ long lo;
+ if (lo_idx < 0)
+ lo = 0;
+ else
+ lo = (long) lo_idx;
+ long long max = packets->getSize () - 1;
+ long hi;
+ if (hi_idx < 0 || hi_idx > max)
+ hi = (long) max;
+ else
+ hi = (long) hi_idx;
+
+ Vector<long long>* starts = new Vector<long long>;
+ Vector<long long>* ends = new Vector<long long>;
+ Vector<int> *eventId = new Vector<int>;
+ for (long index = lo; index <= hi; index++)
+ {
+ GCEvent *gcevent = (GCEvent*) packets->getObjValue (PROP_GCEVENTOBJ, index);
+ if (gcevent)
+ {
+ starts->append (gcevent->start);
+ ends->append (gcevent->end);
+ eventId->append (gcevent->id);
+ }
+ }
+ Vector<void *> *res = new Vector<void*>(3);
+ res->store (0, starts);
+ res->store (1, ends);
+ res->store (2, eventId);
+ return res;
+}
+
+Vector<Vector<char*>*>*
+dbeGetIOStatistics (int dbevindex)
+{
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ Hist_data *hist_data;
+ Hist_data::HistItem *hi;
+ FileData *fDataTotal;
+
+ hist_data = dbev->iofile_data;
+ if (hist_data == NULL)
+ return NULL;
+ hi = hist_data->fetch (0);
+ fDataTotal = (FileData*) hi->obj;
+
+ Vector<char*> *writeStat = new Vector<char*>;
+ Vector<char*> *readStat = new Vector<char*>;
+ Vector<char*> *otherStat = new Vector<char*>;
+ Vector<char*> *errorStat = new Vector<char*>;
+
+ writeStat->append (dbe_strdup (GTXT ("Write Statistics")));
+ readStat->append (dbe_strdup (GTXT ("Read Statistics")));
+ otherStat->append (dbe_strdup (GTXT ("Other I/O Statistics")));
+ errorStat->append (dbe_strdup (GTXT ("I/O Error Statistics")));
+
+ StringBuilder sb;
+ if (fDataTotal->getWriteCnt () > 0)
+ {
+ if (fDataTotal->getW0KB1KBCnt () > 0)
+ {
+ sb.sprintf (GTXT ("0KB - 1KB"));
+ writeStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), fDataTotal->getW0KB1KBCnt ());
+ writeStat->append (sb.toString ());
+ }
+ if (fDataTotal->getW1KB8KBCnt () > 0)
+ {
+ sb.sprintf (GTXT ("1KB - 8KB"));
+ writeStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), fDataTotal->getW1KB8KBCnt ());
+ writeStat->append (sb.toString ());
+ }
+ if (fDataTotal->getW8KB32KBCnt () > 0)
+ {
+ sb.sprintf (GTXT ("8KB - 32KB"));
+ writeStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), fDataTotal->getW8KB32KBCnt ());
+ writeStat->append (sb.toString ());
+ }
+ if (fDataTotal->getW32KB128KBCnt () > 0)
+ {
+ sb.sprintf (GTXT ("32KB - 128KB"));
+ writeStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), fDataTotal->getW32KB128KBCnt ());
+ writeStat->append (sb.toString ());
+ }
+ if (fDataTotal->getW128KB256KBCnt () > 0)
+ {
+ sb.sprintf (GTXT ("128KB - 256KB"));
+ writeStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), fDataTotal->getW128KB256KBCnt ());
+ writeStat->append (sb.toString ());
+ }
+ if (fDataTotal->getW256KB512KBCnt () > 0)
+ {
+ sb.sprintf (GTXT ("256KB - 512KB"));
+ writeStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), fDataTotal->getW256KB512KBCnt ());
+ writeStat->append (sb.toString ());
+ }
+ if (fDataTotal->getW512KB1000KBCnt () > 0)
+ {
+ sb.sprintf (GTXT ("512KB - 1000KB"));
+ writeStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), fDataTotal->getW512KB1000KBCnt ());
+ writeStat->append (sb.toString ());
+ }
+ if (fDataTotal->getW1000KB10MBCnt () > 0)
+ {
+ sb.sprintf (GTXT ("1000KB - 10MB"));
+ writeStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), fDataTotal->getW1000KB10MBCnt ());
+ writeStat->append (sb.toString ());
+ }
+ if (fDataTotal->getW10MB100MBCnt () > 0)
+ {
+ sb.sprintf (GTXT ("10MB - 100MB"));
+ writeStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), fDataTotal->getW10MB100MBCnt ());
+ writeStat->append (sb.toString ());
+ }
+ if (fDataTotal->getW100MB1GBCnt () > 0)
+ {
+ sb.sprintf (GTXT ("100MB - 1GB"));
+ writeStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), fDataTotal->getW100MB1GBCnt ());
+ writeStat->append (sb.toString ());
+ }
+ if (fDataTotal->getW1GB10GBCnt () > 0)
+ {
+ sb.sprintf (GTXT ("1GB - 10GB"));
+ writeStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), fDataTotal->getW1GB10GBCnt ());
+ writeStat->append (sb.toString ());
+ }
+ if (fDataTotal->getW10GB100GBCnt () > 0)
+ {
+ sb.sprintf (GTXT ("10GB - 100GB"));
+ writeStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), fDataTotal->getW10GB100GBCnt ());
+ writeStat->append (sb.toString ());
+ }
+ if (fDataTotal->getW100GB1TBCnt () > 0)
+ {
+ sb.sprintf (GTXT ("100GB - 1TB"));
+ writeStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), fDataTotal->getW100GB1TBCnt ());
+ writeStat->append (sb.toString ());
+ }
+ if (fDataTotal->getW1TB10TBCnt () > 0)
+ {
+ sb.sprintf (GTXT ("1TB - 10TB"));
+ writeStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), fDataTotal->getW1TB10TBCnt ());
+ writeStat->append (sb.toString ());
+ }
+
+ sb.sprintf (GTXT ("Longest write"));
+ writeStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%.6f (secs.)"),
+ (double) (fDataTotal->getWSlowestBytes () / (double) NANOSEC));
+ writeStat->append (sb.toString ());
+
+ sb.sprintf (GTXT ("Smallest write bytes"));
+ writeStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), (int) (fDataTotal->getWSmallestBytes ()));
+ writeStat->append (sb.toString ());
+
+ sb.sprintf (GTXT ("Largest write bytes"));
+ writeStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), (int) (fDataTotal->getWLargestBytes ()));
+ writeStat->append (sb.toString ());
+
+ sb.sprintf (GTXT ("Total time"));
+ writeStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%.6f (secs.)"),
+ (double) (fDataTotal->getWriteTime () / (double) NANOSEC));
+ writeStat->append (sb.toString ());
+
+ sb.sprintf (GTXT ("Total calls"));
+ writeStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), (int) (fDataTotal->getWriteCnt ()));
+ writeStat->append (sb.toString ());
+
+ sb.sprintf (GTXT ("Total bytes"));
+ writeStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%lld"), (long long) (fDataTotal->getWriteBytes ()));
+ writeStat->append (sb.toString ());
+ }
+
+ if (fDataTotal->getReadCnt () > 0)
+ {
+ if (fDataTotal->getR0KB1KBCnt () > 0)
+ {
+ sb.sprintf (GTXT ("0KB - 1KB"));
+ readStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), fDataTotal->getR0KB1KBCnt ());
+ readStat->append (sb.toString ());
+ }
+ if (fDataTotal->getR1KB8KBCnt () > 0)
+ {
+ sb.sprintf (GTXT ("1KB - 8KB"));
+ readStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), fDataTotal->getR1KB8KBCnt ());
+ readStat->append (sb.toString ());
+ }
+ if (fDataTotal->getR8KB32KBCnt () > 0)
+ {
+ sb.sprintf (GTXT ("8KB - 32KB"));
+ readStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), fDataTotal->getR8KB32KBCnt ());
+ readStat->append (sb.toString ());
+ }
+ if (fDataTotal->getR32KB128KBCnt () > 0)
+ {
+ sb.sprintf (GTXT ("32KB - 128KB"));
+ readStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), fDataTotal->getR32KB128KBCnt ());
+ readStat->append (sb.toString ());
+ }
+ if (fDataTotal->getR128KB256KBCnt () > 0)
+ {
+ sb.sprintf (GTXT ("128KB - 256KB"));
+ readStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), fDataTotal->getR128KB256KBCnt ());
+ readStat->append (sb.toString ());
+ }
+ if (fDataTotal->getR256KB512KBCnt () > 0)
+ {
+ sb.sprintf (GTXT ("256KB - 512KB"));
+ readStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), fDataTotal->getR256KB512KBCnt ());
+ readStat->append (sb.toString ());
+ }
+ if (fDataTotal->getR512KB1000KBCnt () > 0)
+ {
+ sb.sprintf (GTXT ("512KB - 1000KB"));
+ readStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), fDataTotal->getR512KB1000KBCnt ());
+ readStat->append (sb.toString ());
+ }
+ if (fDataTotal->getR1000KB10MBCnt () > 0)
+ {
+ sb.sprintf (GTXT ("1000KB - 10MB"));
+ readStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), fDataTotal->getR1000KB10MBCnt ());
+ readStat->append (sb.toString ());
+ }
+ if (fDataTotal->getR10MB100MBCnt () > 0)
+ {
+ sb.sprintf (GTXT ("10MB - 100MB"));
+ readStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), fDataTotal->getR10MB100MBCnt ());
+ readStat->append (sb.toString ());
+ }
+ if (fDataTotal->getR100MB1GBCnt () > 0)
+ {
+ sb.sprintf (GTXT ("100MB - 1GB"));
+ readStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), fDataTotal->getR100MB1GBCnt ());
+ readStat->append (sb.toString ());
+ }
+ if (fDataTotal->getR1GB10GBCnt () > 0)
+ {
+ sb.sprintf (GTXT ("1GB - 10GB"));
+ readStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), fDataTotal->getR1GB10GBCnt ());
+ readStat->append (sb.toString ());
+ }
+ if (fDataTotal->getR10GB100GBCnt () > 0)
+ {
+ sb.sprintf (GTXT ("10GB - 100GB"));
+ readStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), fDataTotal->getR10GB100GBCnt ());
+ readStat->append (sb.toString ());
+ }
+ if (fDataTotal->getR100GB1TBCnt () > 0)
+ {
+ sb.sprintf (GTXT ("100GB - 1TB"));
+ readStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), fDataTotal->getR100GB1TBCnt ());
+ readStat->append (sb.toString ());
+ }
+ if (fDataTotal->getR1TB10TBCnt () > 0)
+ {
+ sb.sprintf (GTXT ("1TB - 10TB"));
+ readStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), fDataTotal->getR1TB10TBCnt ());
+ readStat->append (sb.toString ());
+ }
+
+ sb.sprintf (GTXT ("Longest read"));
+ readStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%.6f (secs.)"),
+ (double) (fDataTotal->getRSlowestBytes () / (double) NANOSEC));
+ readStat->append (sb.toString ());
+
+ sb.sprintf (GTXT ("Smallest read bytes"));
+ readStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), (int) (fDataTotal->getRSmallestBytes ()));
+ readStat->append (sb.toString ());
+
+ sb.sprintf (GTXT ("Largest read bytes"));
+ readStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), (int) (fDataTotal->getRLargestBytes ()));
+ readStat->append (sb.toString ());
+
+ sb.sprintf (GTXT ("Total time"));
+ readStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%.6f (secs.)"),
+ (double) (fDataTotal->getReadTime () / (double) NANOSEC));
+ readStat->append (sb.toString ());
+
+ sb.sprintf (GTXT ("Total calls"));
+ readStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), (int) (fDataTotal->getReadCnt ()));
+ readStat->append (sb.toString ());
+
+ sb.sprintf (GTXT ("Total bytes"));
+ readStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%lld"), (long long) (fDataTotal->getReadBytes ()));
+ readStat->append (sb.toString ());
+ }
+
+ if (fDataTotal->getOtherCnt () > 0)
+ {
+ sb.sprintf (GTXT ("Total time"));
+ otherStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%.6f (secs.)"),
+ (double) (fDataTotal->getOtherTime () / (double) NANOSEC));
+ otherStat->append (sb.toString ());
+
+ sb.sprintf (GTXT ("Total calls"));
+ otherStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), (int) (fDataTotal->getOtherCnt ()));
+ otherStat->append (sb.toString ());
+ }
+
+ if (fDataTotal->getErrorCnt () > 0)
+ {
+ sb.sprintf (GTXT ("Total time"));
+ errorStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%.6f (secs.)"),
+ (double) (fDataTotal->getErrorTime () / (double) NANOSEC));
+ errorStat->append (sb.toString ());
+
+ sb.sprintf (GTXT ("Total calls"));
+ errorStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), (int) (fDataTotal->getErrorCnt ()));
+ errorStat->append (sb.toString ());
+ }
+ Vector<Vector<char*>*>* statisticsData = new Vector<Vector<char*>*>(4);
+ statisticsData->store (0, writeStat);
+ statisticsData->store (1, readStat);
+ statisticsData->store (2, otherStat);
+ statisticsData->store (3, errorStat);
+ return statisticsData;
+}
+
+Vector<Vector<char*>*>*
+dbeGetHeapStatistics (int dbevindex)
+{
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ Hist_data *hist_data;
+ Hist_data::HistItem *hi;
+ HeapData *hDataTotal;
+ hist_data = dbev->heapcs_data;
+ if (hist_data == NULL)
+ return NULL;
+
+ hi = hist_data->fetch (0);
+ hDataTotal = (HeapData*) hi->obj;
+ Vector<char*> *memoryUsage = new Vector<char*>;
+ Vector<char*> *allocStat = new Vector<char*>;
+ Vector<char*> *leakStat = new Vector<char*>;
+
+ memoryUsage->append (dbe_strdup (GTXT ("Process With Highest Peak Memory Usage")));
+ allocStat->append (dbe_strdup (GTXT ("Memory Allocations Statistics")));
+ leakStat->append (dbe_strdup (GTXT ("Memory Leaks Statistics")));
+ StringBuilder sb;
+ if (hDataTotal->getPeakMemUsage () > 0)
+ {
+ sb.sprintf (GTXT ("Heap size bytes"));
+ memoryUsage->append (sb.toString ());
+ sb.sprintf (NTXT ("%lld"), (long long) (hDataTotal->getPeakMemUsage ()));
+ memoryUsage->append (sb.toString ());
+
+ sb.sprintf (GTXT ("Experiment Id"));
+ memoryUsage->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), (int) (hDataTotal->getUserExpId ()));
+ memoryUsage->append (sb.toString ());
+
+ sb.sprintf (GTXT ("Process Id"));
+ memoryUsage->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), (int) (hDataTotal->getPid ()));
+ memoryUsage->append (sb.toString ());
+
+ Vector<hrtime_t> *pTimestamps;
+ pTimestamps = hDataTotal->getPeakTimestamps ();
+ if (pTimestamps != NULL)
+ {
+ for (int i = 0; i < pTimestamps->size (); i++)
+ {
+ sb.sprintf (GTXT ("Time of peak"));
+ memoryUsage->append (sb.toString ());
+ sb.sprintf (NTXT ("%.3f (secs.)"), (double) (pTimestamps->fetch (i) / (double) NANOSEC));
+ memoryUsage->append (sb.toString ());
+ }
+ }
+ }
+
+ if (hDataTotal->getAllocCnt () > 0)
+ {
+ if (hDataTotal->getA0KB1KBCnt () > 0)
+ {
+ sb.sprintf (GTXT ("0KB - 1KB"));
+ allocStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), hDataTotal->getA0KB1KBCnt ());
+ allocStat->append (sb.toString ());
+ }
+ if (hDataTotal->getA1KB8KBCnt () > 0)
+ {
+ sb.sprintf (GTXT ("1KB - 8KB"));
+ allocStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), hDataTotal->getA1KB8KBCnt ());
+ allocStat->append (sb.toString ());
+ }
+ if (hDataTotal->getA8KB32KBCnt () > 0)
+ {
+ sb.sprintf (GTXT ("8KB - 32KB"));
+ allocStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), hDataTotal->getA8KB32KBCnt ());
+ allocStat->append (sb.toString ());
+ }
+ if (hDataTotal->getA32KB128KBCnt () > 0)
+ {
+ sb.sprintf (GTXT ("32KB - 128KB"));
+ allocStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), hDataTotal->getA32KB128KBCnt ());
+ allocStat->append (sb.toString ());
+ }
+ if (hDataTotal->getA128KB256KBCnt () > 0)
+ {
+ sb.sprintf (GTXT ("128KB - 256KB"));
+ allocStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), hDataTotal->getA128KB256KBCnt ());
+ allocStat->append (sb.toString ());
+ }
+ if (hDataTotal->getA256KB512KBCnt () > 0)
+ {
+ sb.sprintf (GTXT ("256KB - 512KB"));
+ allocStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), hDataTotal->getA256KB512KBCnt ());
+ allocStat->append (sb.toString ());
+ }
+ if (hDataTotal->getA512KB1000KBCnt () > 0)
+ {
+ sb.sprintf (GTXT ("512KB - 1000KB"));
+ allocStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), hDataTotal->getA512KB1000KBCnt ());
+ allocStat->append (sb.toString ());
+ }
+ if (hDataTotal->getA1000KB10MBCnt () > 0)
+ {
+ sb.sprintf (GTXT ("1000KB - 10MB"));
+ allocStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), hDataTotal->getA1000KB10MBCnt ());
+ allocStat->append (sb.toString ());
+ }
+ if (hDataTotal->getA10MB100MBCnt () > 0)
+ {
+ sb.sprintf (GTXT ("10MB - 100MB"));
+ allocStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), hDataTotal->getA10MB100MBCnt ());
+ allocStat->append (sb.toString ());
+ }
+ if (hDataTotal->getA100MB1GBCnt () > 0)
+ {
+ sb.sprintf (GTXT ("100MB - 1GB"));
+ allocStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), hDataTotal->getA100MB1GBCnt ());
+ allocStat->append (sb.toString ());
+ }
+ if (hDataTotal->getA1GB10GBCnt () > 0)
+ {
+ sb.sprintf (GTXT ("1GB - 10GB"));
+ allocStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), hDataTotal->getA1GB10GBCnt ());
+ allocStat->append (sb.toString ());
+ }
+ if (hDataTotal->getA10GB100GBCnt () > 0)
+ {
+ sb.sprintf (GTXT ("10GB - 100GB"));
+ allocStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), hDataTotal->getA10GB100GBCnt ());
+ allocStat->append (sb.toString ());
+ }
+ if (hDataTotal->getA100GB1TBCnt () > 0)
+ {
+ sb.sprintf (GTXT ("100GB - 1TB"));
+ allocStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), hDataTotal->getA100GB1TBCnt ());
+ allocStat->append (sb.toString ());
+ }
+ if (hDataTotal->getA1TB10TBCnt () > 0)
+ {
+ sb.sprintf (GTXT ("1TB - 10TB"));
+ allocStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), hDataTotal->getA1TB10TBCnt ());
+ allocStat->append (sb.toString ());
+ }
+
+ sb.sprintf (GTXT ("Smallest allocation bytes"));
+ allocStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), (int) (hDataTotal->getASmallestBytes ()));
+ allocStat->append (sb.toString ());
+
+ sb.sprintf (GTXT ("Largest allocation bytes"));
+ allocStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), (int) (hDataTotal->getALargestBytes ()));
+ allocStat->append (sb.toString ());
+
+ sb.sprintf (GTXT ("Total allocations"));
+ allocStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), (int) (hDataTotal->getAllocCnt ()));
+ allocStat->append (sb.toString ());
+
+ sb.sprintf (GTXT ("Total bytes"));
+ allocStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%lld"), (long long) (hDataTotal->getAllocBytes ()));
+ allocStat->append (sb.toString ());
+ }
+
+ if (hDataTotal->getLeakCnt () > 0)
+ {
+ if (hDataTotal->getL0KB1KBCnt () > 0)
+ {
+ sb.sprintf (GTXT ("0KB - 1KB"));
+ leakStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), hDataTotal->getL0KB1KBCnt ());
+ leakStat->append (sb.toString ());
+ }
+ if (hDataTotal->getL1KB8KBCnt () > 0)
+ {
+ sb.sprintf (GTXT ("1KB - 8KB"));
+ leakStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), hDataTotal->getL1KB8KBCnt ());
+ leakStat->append (sb.toString ());
+ }
+ if (hDataTotal->getL8KB32KBCnt () > 0)
+ {
+ sb.sprintf (GTXT ("8KB - 32KB"));
+ leakStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), hDataTotal->getL8KB32KBCnt ());
+ leakStat->append (sb.toString ());
+ }
+ if (hDataTotal->getL32KB128KBCnt () > 0)
+ {
+ sb.sprintf (GTXT ("32KB - 128KB"));
+ leakStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), hDataTotal->getL32KB128KBCnt ());
+ leakStat->append (sb.toString ());
+ }
+ if (hDataTotal->getL128KB256KBCnt () > 0)
+ {
+ sb.sprintf (GTXT ("128KB - 256KB"));
+ leakStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), hDataTotal->getL128KB256KBCnt ());
+ leakStat->append (sb.toString ());
+ }
+ if (hDataTotal->getL256KB512KBCnt () > 0)
+ {
+ sb.sprintf (GTXT ("256KB - 512KB"));
+ leakStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), hDataTotal->getL256KB512KBCnt ());
+ leakStat->append (sb.toString ());
+ }
+ if (hDataTotal->getL512KB1000KBCnt () > 0)
+ {
+ sb.sprintf (GTXT ("512KB - 1000KB"));
+ leakStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), hDataTotal->getL512KB1000KBCnt ());
+ leakStat->append (sb.toString ());
+ }
+ if (hDataTotal->getL1000KB10MBCnt () > 0)
+ {
+ sb.sprintf (GTXT ("1000KB - 10MB"));
+ leakStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), hDataTotal->getL1000KB10MBCnt ());
+ leakStat->append (sb.toString ());
+ }
+ if (hDataTotal->getL10MB100MBCnt () > 0)
+ {
+ sb.sprintf (GTXT ("10MB - 100MB"));
+ leakStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), hDataTotal->getL10MB100MBCnt ());
+ leakStat->append (sb.toString ());
+ }
+ if (hDataTotal->getL100MB1GBCnt () > 0)
+ {
+ sb.sprintf (GTXT ("100MB - 1GB"));
+ leakStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), hDataTotal->getL100MB1GBCnt ());
+ leakStat->append (sb.toString ());
+ }
+ if (hDataTotal->getL1GB10GBCnt () > 0)
+ {
+ sb.sprintf (GTXT ("1GB - 10GB"));
+ leakStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), hDataTotal->getL1GB10GBCnt ());
+ leakStat->append (sb.toString ());
+ }
+ if (hDataTotal->getL10GB100GBCnt () > 0)
+ {
+ sb.sprintf (GTXT ("10GB - 100GB"));
+ leakStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), hDataTotal->getL10GB100GBCnt ());
+ leakStat->append (sb.toString ());
+ }
+ if (hDataTotal->getL100GB1TBCnt () > 0)
+ {
+ sb.sprintf (GTXT ("100GB - 1TB"));
+ leakStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), hDataTotal->getL100GB1TBCnt ());
+ leakStat->append (sb.toString ());
+ }
+ if (hDataTotal->getL1TB10TBCnt () > 0)
+ {
+ sb.sprintf (GTXT ("1TB - 10TB"));
+ leakStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), hDataTotal->getL1TB10TBCnt ());
+ leakStat->append (sb.toString ());
+ }
+
+ sb.sprintf (GTXT ("Smallest leaked bytes"));
+ leakStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), (int) (hDataTotal->getLSmallestBytes ()));
+ leakStat->append (sb.toString ());
+
+ sb.sprintf (GTXT ("Largest leaked bytes"));
+ leakStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), (int) (hDataTotal->getLLargestBytes ()));
+ leakStat->append (sb.toString ());
+
+ sb.sprintf (GTXT ("Total leaked"));
+ leakStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%d"), (int) (hDataTotal->getLeakCnt ()));
+ leakStat->append (sb.toString ());
+
+ sb.sprintf (GTXT ("Total bytes"));
+ leakStat->append (sb.toString ());
+ sb.sprintf (NTXT ("%lld"), (long long) (hDataTotal->getLeakBytes ()));
+ leakStat->append (sb.toString ());
+ }
+ Vector<Vector<char*>*>* statisticsData = new Vector<Vector<char*>*>(3);
+ statisticsData->store (0, memoryUsage);
+ statisticsData->store (1, allocStat);
+ statisticsData->store (2, leakStat);
+ return statisticsData;
+}
+
+Vector<char*> *
+dbeGetFuncNames (int dbevindex, Vector<Obj> *funcs)
+{
+ int len = funcs->size ();
+ Vector<char*> *list = new Vector<char*>(len);
+ for (int i = 0; i < len; i++)
+ list->store (i, dbeGetFuncName (dbevindex, funcs->fetch (i))); // no strdup()
+ return list;
+}
+
+Vector<char*> *
+dbeGetObjNamesV2 (int dbevindex, Vector<uint64_t> *ids)
+{
+ int len = ids->size ();
+ Vector<char*> *list = new Vector<char*>(len);
+ for (int i = 0; i < len; i++)
+ list->store (i, dbeGetObjNameV2 (dbevindex, ids->fetch (i))); // no strdup()
+ return list;
+}
+
+char *
+dbeGetFuncName (int dbevindex, Obj func)
+{
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ if (func == 0)
+ return NULL;
+ char *fname;
+ fname = ((Histable *) func)->get_name (dbev->get_name_format ());
+ return fname ? dbe_strdup (fname) : NULL;
+}
+
+Vector<uint64_t> *
+dbeGetFuncIds (int dbevindex, Vector<Obj> *funcs)
+{
+ int len = funcs->size ();
+ Vector<uint64_t> *list = new Vector<uint64_t>(len);
+ for (int i = 0; i < len; i++)
+ list->store (i, dbeGetFuncId (dbevindex, funcs->fetch (i)));
+ return list;
+}
+
+uint64_t
+dbeGetFuncId (int dbevindex, Obj func)
+{
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ if (func == 0)
+ return 0;
+ uint64_t id = ((Histable *) func)->id;
+ return id;
+}
+
+char *
+dbeGetObjNameV2 (int dbevindex, uint64_t id)
+{
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ Histable *obj = dbeSession->findObjectById (id);
+ if (obj == NULL)
+ return NULL;
+ char *fname = obj->get_name (dbev->get_name_format ());
+ return fname ? dbe_strdup (fname) : NULL;
+}
+
+char *
+dbeGetDataspaceTypeDesc (int /*dbevindex*/, Obj stack)
+{
+ if (stack == 0)
+ return NULL;
+ Histable *hist = CallStack::getStackPC ((void *) stack, 0);
+ DbeInstr *instr;
+ Histable::Type type = hist->get_type ();
+ if (type != Histable::INSTR)
+ return NULL;
+ else
+ instr = (DbeInstr *) hist;
+ char *descriptor = instr->get_descriptor ();
+ return descriptor ? dbe_strdup (descriptor) : NULL;
+}
+
+Vector<void*> *
+dbeGetDataDescriptorsV2 (int exp_id)
+{
+ Experiment *exp = dbeSession->get_exp (exp_id);
+ if (exp == NULL)
+ return NULL;
+ Vector<int> *dataId = new Vector<int>;
+ Vector<char*> *dataName = new Vector<char*>;
+ Vector<char*> *dataUName = new Vector<char*>;
+ Vector<int> *auxProp = new Vector<int>;
+ Vector<DataDescriptor*> *ddscr = exp->getDataDescriptors ();
+ for (int i = 0; i < ddscr->size (); i++)
+ {
+ DataDescriptor *dataDscr = ddscr->fetch (i);
+ if (dataDscr->getFlags () & DDFLAG_NOSHOW)
+ continue;
+ int data_id = dataDscr->getId ();
+ int aux_prop_id = (data_id == DATA_HWC) ? PROP_HWCTAG : PROP_NONE;
+ dataId->append (data_id);
+ dataName->append (strdup (dataDscr->getName ()));
+ dataUName->append (strdup (dataDscr->getUName ()));
+ auxProp->append (aux_prop_id);
+ }
+ delete ddscr;
+ Vector<void*> *res = new Vector<void*>(3);
+ res->store (0, dataId);
+ res->store (1, dataName);
+ res->store (2, dataUName);
+ res->store (3, auxProp);
+ return res;
+}
+
+Vector<void*> *
+dbeGetDataPropertiesV2 (int exp_id, int data_id)
+{
+ Experiment *exp = dbeSession->get_exp (exp_id);
+ if (exp == NULL)
+ return NULL;
+ DataDescriptor *dataDscr = exp->get_raw_events (data_id);
+ if (dataDscr == NULL)
+ return NULL;
+ Vector<PropDescr*> *props = dataDscr->getProps ();
+ Vector<int> *propId = new Vector<int>(props->size ());
+ Vector<char*> *propUName = new Vector<char*>(props->size ());
+ Vector<int> *propTypeId = new Vector<int>(props->size ());
+ Vector<char*> *propTypeName = new Vector<char*>(props->size ());
+ Vector<int> *propFlags = new Vector<int>(props->size ());
+ Vector<char*> *propName = new Vector<char*>(props->size ());
+ Vector<void*> *propStateNames = new Vector<void*>(props->size ());
+ Vector<void*> *propStateUNames = new Vector<void*>(props->size ());
+
+ for (int i = 0; i < props->size (); i++)
+ {
+ PropDescr *prop = props->fetch (i);
+ char *pname = prop->name;
+ if (pname == NULL)
+ pname = NTXT ("");
+ char *uname = prop->uname;
+ if (uname == NULL)
+ uname = pname;
+ int vtypeNum = prop->vtype;
+ if (vtypeNum < 0 || vtypeNum >= TYPE_LAST)
+ vtypeNum = TYPE_NONE;
+ const char * vtypeNames[] = VTYPE_TYPE_NAMES;
+ const char *vtype = vtypeNames[prop->vtype];
+ Vector<char*> *stateNames = NULL;
+ Vector<char*> *stateUNames = NULL;
+ int nStates = prop->getMaxState ();
+ if (nStates > 0)
+ {
+ stateNames = new Vector<char*>(nStates);
+ stateUNames = new Vector<char*>(nStates);
+ for (int kk = 0; kk < nStates; kk++)
+ {
+ const char * stateName = prop->getStateName (kk);
+ stateNames->store (kk, dbe_strdup (stateName));
+ const char * Uname = prop->getStateUName (kk);
+ stateUNames->store (kk, dbe_strdup (Uname));
+ }
+ }
+ propId->store (i, prop->propID);
+ propUName->store (i, dbe_strdup (uname));
+ propTypeId->store (i, prop->vtype);
+ propTypeName->store (i, dbe_strdup (vtype));
+ propFlags->store (i, prop->flags);
+ propName->store (i, dbe_strdup (pname));
+ propStateNames->store (i, stateNames);
+ propStateUNames->store (i, stateUNames);
+ }
+ Vector<void*> *res = new Vector<void*>(7);
+ res->store (0, propId);
+ res->store (1, propUName);
+ res->store (2, propTypeId);
+ res->store (3, propTypeName);
+ res->store (4, propFlags);
+ res->store (5, propName);
+ res->store (6, propStateNames);
+ res->store (7, propStateUNames);
+ return res;
+}
+
+Vector<void *> *
+dbeGetExperimentTimeInfo (Vector<int> *exp_ids)
+{
+ int sz = exp_ids->size ();
+ Vector<long long> *offset_time = new Vector<long long> (sz);
+ Vector<long long> *start_time = new Vector<long long> (sz);
+ Vector<long long> *end_time = new Vector<long long> (sz);
+ Vector<long long> *start_wall_sec = new Vector<long long> (sz);
+ Vector<char* > *hostname = new Vector<char*> (sz);
+ Vector<int> *cpu_freq = new Vector<int> (sz);
+ for (int ii = 0; ii < sz; ii++)
+ {
+ int expIdx = exp_ids->fetch (ii);
+ { // update end_time by forcing fetch of experiment data
+ // workaround until dbeGetEndTime() is more robust
+ int id = (expIdx < 0) ? 0 : expIdx;
+ Experiment *exp = dbeSession->get_exp (id);
+ if (exp)
+ {
+ Vector<DataDescriptor*> *ddscr = exp->getDataDescriptors ();
+ delete ddscr;
+ }
+ }
+ offset_time->store (ii, dbeGetRelativeStartTime (0, expIdx));
+ start_time->store (ii, dbeGetStartTime (0, expIdx));
+ end_time->store (ii, dbeGetEndTime (0, expIdx));
+ start_wall_sec->store (ii, dbeGetWallStartSec (0, expIdx));
+ hostname->store (ii, dbeGetHostname (0, expIdx));
+ cpu_freq->store (ii, dbeGetClock (0, expIdx));
+ }
+ Vector<void*> *res = new Vector<void*>(4);
+ res->store (0, offset_time);
+ res->store (1, start_time);
+ res->store (2, end_time);
+ res->store (3, start_wall_sec);
+ res->store (4, hostname);
+ res->store (5, cpu_freq);
+ return res;
+}
+
+Vector<void *> *
+dbeGetExperimentDataDescriptors (Vector<int> *exp_ids)
+{
+ int sz = exp_ids->size ();
+ Vector<void*> *exp_dscr_info = new Vector<void*> (sz);
+ Vector<void*> *exp_dscr_props = new Vector<void*> (sz);
+
+ for (int ii = 0; ii < sz; ii++)
+ {
+ int expIdx = exp_ids->fetch (ii);
+ Vector<void*> *ddscrInfo = dbeGetDataDescriptorsV2 (expIdx);
+ Vector<void*> *ddscrProps = new Vector<void*> (); // one entry per ddscrInfo
+ if (ddscrInfo)
+ {
+ Vector<int> *dataId = (Vector<int>*)ddscrInfo->fetch (0);
+ if (dataId)
+ {
+ // loop thru data descriptors
+ int ndata = dataId->size ();
+ for (int j = 0; j < ndata; ++j)
+ {
+ Vector<void*> *props = dbeGetDataPropertiesV2 (expIdx, dataId->fetch (j));
+ ddscrProps->store (j, props);
+ }
+ }
+ }
+ exp_dscr_info->store (ii, ddscrInfo);
+ exp_dscr_props->store (ii, ddscrProps);
+ }
+ Vector<void*> *res = new Vector<void*>(2);
+ res->store (0, exp_dscr_info);
+ res->store (1, exp_dscr_props);
+ return res;
+}
+
+static Vector<void *> *
+dbeGetTLDataRepVals (VMode view_mode, hrtime_t start_ts, hrtime_t delta,
+ int numDeltas, DataView*packets,
+ Vector<long> *representativeEvents, bool showDuration);
+
+static bool
+dbeHasTLData (int dbevindex, int exp_id, int data_id, int entity_prop_id,
+ int entity_prop_value, int aux)
+{
+ DataView *packets =
+ getTimelinePackets (dbevindex, exp_id, data_id, entity_prop_id);
+ if (!packets || packets->getSize () == 0)
+ return false;
+ long start_ind = getIdxByVals (packets, aux, entity_prop_value,
+ 0, DataView::REL_GTEQ); // time >= 0
+ if (start_ind < 0)
+ return false;
+
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ VMode view_mode = dbev->get_view_mode ();
+ Experiment *exp = dbeSession->get_exp (exp_id);
+ if (!hasInvisbleTLEvents (exp, view_mode))
+ return true; // all events are visible, no further checking required
+ long end_ind = getIdxByVals (packets, aux, entity_prop_value,
+ MAX_TIME, DataView::REL_LTEQ);
+ for (long ii = start_ind; ii <= end_ind; ii++)
+ {
+ if (!isVisibleTLEvent (exp, view_mode, packets, ii))
+ continue;
+ return true; // first visible packet => has data
+ }
+ return false;
+}
+
+Vector<bool> *
+dbeHasTLData (int dbev_index, Vector<int> *exp_ids, Vector<int> *data_ids,
+ Vector<int> *entity_prop_ids, // LWP,CPU,THR, etc
+ Vector<int> *entity_prop_values, Vector<int> *auxs)
+{
+ DbeView *dbev = dbeSession->getView (dbev_index);
+ if (!dbev->isShowAll () && (dbev->isShowHideChanged ()
+ || dbev->isNewViewMode ()))
+ {
+ // LIBRARY_VISIBILITY
+ dbev->resetAndConstructShowHideStacks ();
+ if (dbev->isNewViewMode ())
+ dbev->resetNewViewMode ();
+ if (dbev->isShowHideChanged ())
+ dbev->resetShowHideChanged ();
+ }
+
+ int sz = exp_ids->size ();
+ Vector<bool> *hasVec = new Vector<bool>(sz);
+ for (int ii = 0; ii < sz; ii++)
+ {
+ bool hasData = dbeHasTLData (dbev_index, exp_ids->fetch (ii),
+ data_ids->fetch (ii),
+ entity_prop_ids->fetch (ii),
+ entity_prop_values->fetch (ii),
+ auxs->fetch (ii));
+ hasVec->store (ii, hasData);
+ }
+ return hasVec;
+}
+
+/*
+ * dbeGetTLData implements:
+ * FROM data_id
+ * DURATION >= delta AND ( start_ts <= TSTAMP < start_ts+num*delta OR
+ * start_ts <= TSTAMP-DURATION < start_ts+num*delta )
+ * OR
+ * FAIR( DURATION < delta AND ( start_ts <= TSTAMP < start_ts+num*delta ) )
+ * WHERE lfilter
+ */
+
+Vector<void *> *
+dbeGetTLData (
+ int dbevindex,
+ int exp_id,
+ int data_id, // DATA_*
+ int entity_prop_id, // Show PROP_LWPID, PROP_CPUID, PROP_THRID, PROP_EXPID, or N/A
+ int entity_prop_value, // which LWPID, CPUID, THRID, EXPID for this request
+ int aux,
+ hrtime_t param_start_ts,
+ hrtime_t param_delta,
+ int param_numDeltas,
+ bool getRepresentatives, // fetch TL representatives
+ Vector<char *> *chartProps) // calculate sums for these property vals
+{
+ const hrtime_t start_ts = param_start_ts;
+ const hrtime_t delta = param_delta;
+ const int numDeltas = param_numDeltas;
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ if (dbev == NULL)
+ abort ();
+ Experiment *exp = dbeSession->get_exp (exp_id);
+ if (exp == NULL)
+ return NULL;
+ if (getRepresentatives == false && chartProps == NULL)
+ return NULL;
+ if (delta <= 0)
+ return NULL;
+
+ hrtime_t tmp_ts = start_ts + delta * numDeltas;
+ if (tmp_ts < start_ts)
+ tmp_ts = MAX_TIME;
+ const hrtime_t end_ts = tmp_ts;
+ if (exp->get_status () == Experiment::INCOMPLETE &&
+ exp->getLastEvent () < end_ts)
+ exp->update ();
+ DataView *packets =
+ getTimelinePackets (dbevindex, exp_id, data_id, entity_prop_id);
+ if (packets == NULL)
+ return NULL; // strange, no data view?
+
+ VMode view_mode = dbev->get_view_mode (); // user, expert, machine //YXXX yuck
+
+ // storage for calculating timeline representative events
+ Vector<long> *representativeEvents = NULL;
+ // list of representative events to be displayed on TL
+ Vector<int> *binRepIdx = NULL;
+ // for each bin, index of current "best" representativeEvent
+ Vector<void*> *representativeVals = NULL;
+ // TL representative packets' values
+
+ // storage for calculating charts
+ Vector<int> *propIds = NULL; // [propIdx], which prop to measure
+ Vector<void*> *propVals = NULL; // [propIdx][bin], prop vals
+ Vector<int> *propNumStates = NULL; // [propIdx], how many states for prop?
+ Vector<bool> *propCumulativeChart = NULL; // [propIdx], data represents cumulative totals
+ Vector<long long> *propCumulativeRecentBinLastVal = NULL; // [propIdx], most recent value
+ Vector<long long> *propCumulativeRecentBinHighVal = NULL; // [propIdx], highest value for propCumulativeRecentBin
+ Vector<int> *propCumulativeRecentBin = NULL; // [propIdx], most recent bin
+
+ // determine when to show duration of events
+ bool tmp_repsShowDuration = false;
+ bool tmp_statesUseDuration = false;
+ bool tmp_extendMicrostates = false;
+ const hrtime_t ptimerTickDuration = exp->get_params ()->ptimer_usec * 1000LL; // nanoseconds per tick
+ const bool hasDuration = packets->getProp (PROP_EVT_TIME) ? true : false;
+ if (hasDuration)
+ {
+ switch (entity_prop_id)
+ {
+ case PROP_CPUID:
+ tmp_repsShowDuration = false;
+ tmp_statesUseDuration = false;
+ break;
+ case PROP_THRID:
+ case PROP_LWPID:
+ tmp_repsShowDuration = true;
+ tmp_statesUseDuration = true;
+ tmp_extendMicrostates = (DATA_CLOCK == data_id) && (ptimerTickDuration < param_delta);
+ break;
+ case PROP_EXPID:
+ case PROP_NONE: // experiment summary row uses this
+ default:
+ if (DATA_SAMPLE == data_id)
+ {
+ tmp_repsShowDuration = true;
+ tmp_statesUseDuration = true;
+ }
+ else if (DATA_GCEVENT == data_id)
+ {
+ tmp_repsShowDuration = true;
+ tmp_statesUseDuration = true;
+ }
+ else if (DATA_CLOCK == data_id)
+ {
+ tmp_repsShowDuration = false;
+ tmp_statesUseDuration = true;
+ tmp_extendMicrostates = true;
+ }
+ else
+ {
+ tmp_repsShowDuration = false;
+ tmp_statesUseDuration = true;
+ }
+ break;
+ }
+ }
+ const bool repsShowDuration = tmp_repsShowDuration; // show stretched callstacks
+ const bool statesUseDuration = tmp_statesUseDuration; // use duration to calculate state charts
+ const bool extendMicrostates = tmp_extendMicrostates; // we show discrete profiling microstates with
+ // width=(tick-1), but for computing
+ // zoomed-out graphs we need to extend to
+ // account for all ticks, width=(ntick)
+ const bool reverseScan = repsShowDuration || extendMicrostates; // scan packets in reverse
+
+ // determine range of packet indices (lo_pkt_idx, hi_pkt_idx)
+ long lo_pkt_idx, hi_pkt_idx;
+ if (extendMicrostates && !(entity_prop_id == PROP_THRID || entity_prop_id == PROP_LWPID))
+ {
+ // merging data from multiple threads, need to scan all packets with timestamp [start_ts, exp end]
+ hrtime_t exp_end_time = exp->getLastEvent () + 1;
+ hi_pkt_idx = getIdxByVals (packets, aux, entity_prop_value,
+ exp_end_time, DataView::REL_LT); // last item
+ }
+ else
+ hi_pkt_idx = getIdxByVals (packets, aux, entity_prop_value,
+ end_ts, DataView::REL_LT);
+ if (repsShowDuration)
+ {
+ // There are two issues to deal with
+ // 1. events that end "off screen" to the right
+ // 2. overlapping events
+
+ // 1. events that end "off screen" to the right
+ // For now, we only consistently handle the case where events don't overlap.
+ // Note that packet timestamps mark end of duration, not start.
+ // This means that the rightmost event won't be within hi_pkt_idx.
+ // Solution: Check if end+1 packet _started_ in-range
+ // Caveat: because we only look ahead by one packet, if there are
+ // overlapping duration events (e.g. EXPID aggregation)), zoom level
+ // and panning combo may cause events with TSTAMP>end_ts
+ // to appear/disappear. A complete solution would involve
+ // a solution to 2.
+
+ // 2. overlapping events
+ // For now, we have a simplistic solution that makes "wide" events win. However,
+ // a future solution for deterministically dealing with overlap might look like this:
+ // - find all packets that touch the visible time range
+ // - possibly use two DataViews: one with TSTAMP_HI sort and one with TSTAMP_LO
+ // sort to allow efficient determination of packets with HI and LO endpoints in-range
+ // - create buckets to capture "winning" event for each bin (each pixel, that is)
+ // - sort the new list of packets by TSTAMP_HI (for example)
+ // - looping thru the packets that are in-range, update every bin it touches with it's id
+ // - if there is overlap, earlier packets will be kicked out of bins
+ // - On the GUI side, paint one event at a time, as normal.
+ // - However, for selections, recognize that duration of event may span many bins
+ //
+ long idx;
+ if (hi_pkt_idx >= 0)
+ // a packet was found to the left of the end time
+ idx = hi_pkt_idx + 1; // attempt to go one packet right
+ else
+ idx = getIdxByVals (packets, aux, entity_prop_value,
+ end_ts, DataView::REL_GTEQ);
+ if (isValidIdx (packets, entity_prop_id, aux, entity_prop_value, idx))
+ {
+ int64_t pkt_ts = packets->getLongValue (PROP_TSTAMP, idx);
+ int64_t duration = packets->getLongValue (PROP_EVT_TIME, idx);
+ pkt_ts -= duration;
+ if (pkt_ts < end_ts)
+ hi_pkt_idx = idx;
+ }
+ }
+ lo_pkt_idx = getIdxByVals (packets, aux, entity_prop_value,
+ start_ts, DataView::REL_GTEQ);
+
+ // allocate structs that return chart data
+ bool hasCumulativeCharts = false;
+ if (chartProps && chartProps->size () > 0)
+ {
+ int nprops = chartProps->size ();
+ // pre-allocate storage
+ propIds = new Vector<int> (nprops);
+ propVals = new Vector<void*>(nprops);
+ propNumStates = new Vector<int> (nprops);
+ propCumulativeChart = new Vector<bool>(nprops);
+ propCumulativeRecentBinLastVal = new Vector<long long>(nprops);
+ propCumulativeRecentBinHighVal = new Vector<long long>(nprops);
+ propCumulativeRecentBin = new Vector<int>(nprops);
+ for (int propNum = 0; propNum < nprops; propNum++)
+ {
+ const char* propStr = chartProps->fetch (propNum);
+ int items_per_prop = 0;
+ int prop_id = PROP_NONE;
+ if (!strcmp (propStr, "EVT_COUNT"))
+ items_per_prop = 1; // use PROP_NONE for counting packets
+ else
+ {
+ int lookup_prop_id = dbeSession->getPropIdByName (propStr);
+ PropDescr *propDscr = packets->getProp (lookup_prop_id);
+ if (propDscr != NULL)
+ {
+ switch (propDscr->vtype)
+ {
+ case TYPE_INT32:
+ case TYPE_UINT32:
+ case TYPE_INT64:
+ case TYPE_UINT64:
+ items_per_prop = propDscr->getMaxState () + 1;
+ // add extra slot to store values with out-of-range idx
+ prop_id = lookup_prop_id;
+ break;
+ case TYPE_DOUBLE:
+ break; // not implemented yet
+ case TYPE_STRING:
+ case TYPE_OBJ:
+ case TYPE_DATE:
+ default:
+ break;
+ }
+ }
+ }
+ void *vals;
+ if (!items_per_prop)
+ vals = NULL;
+ else if (items_per_prop == 1)
+ {
+ Vector<long long> *longVals = new Vector<long long> ();
+ longVals->store (numDeltas - 1, 0); // initialize all elements
+ vals = longVals;
+ }
+ else
+ {
+ Vector<Vector<long long>*> *stateVals =
+ new Vector<Vector<long long>*> ();
+ vals = stateVals;
+ // initialize only on-demand, some may not be needed
+ }
+
+ bool isCumulativeChart;
+#define YXXX_HEAP_VS_TIME 1 // YXXX add data meaning to properties?
+#if YXXX_HEAP_VS_TIME
+ isCumulativeChart = (prop_id == PROP_HCUR_LEAKS || prop_id == PROP_HCUR_ALLOCS);
+#endif
+ if (isCumulativeChart)
+ hasCumulativeCharts = true;
+ propIds->store (propNum, prop_id);
+ propVals->store (propNum, vals);
+ propNumStates->store (propNum, items_per_prop);
+ propCumulativeRecentBinLastVal->store (propNum, 0);
+ propCumulativeRecentBinHighVal->store (propNum, 0);
+ propCumulativeRecentBin->store (propNum, 0);
+ propCumulativeChart->store (propNum, isCumulativeChart);
+ }
+ }
+
+ // Adjust idx range for calculating 'cumulative charts' e.g. heap size
+ if (hasCumulativeCharts)
+ {
+ // set initial values if earlier packet exists
+ long lo_idx;
+ if (lo_pkt_idx >= 0)
+ // packet was found to the right of start
+ lo_idx = lo_pkt_idx - 1; // attempt to go left by one event
+ else
+ // no packet was to the right of start, look left of start
+ lo_idx = getIdxByVals (packets, aux, entity_prop_value,
+ start_ts, DataView::REL_LT);
+ if (isValidIdx (packets, entity_prop_id, aux, entity_prop_value, lo_idx))
+ {
+ // preceding packet found
+ // update initial values
+ int nprops = propCumulativeChart->size ();
+ for (int propNum = 0; propNum < nprops; propNum++)
+ {
+ if (!propCumulativeChart->fetch (propNum))
+ continue;
+ int propId = propIds->fetch (propNum);
+ long long value = packets->getLongValue (propId, lo_idx);
+ propCumulativeRecentBinLastVal->store (propNum, value);
+ propCumulativeRecentBinHighVal->store (propNum, value);
+ }
+ // update indices used for iterating
+ lo_pkt_idx = lo_idx;
+ if (hi_pkt_idx < lo_pkt_idx)
+ hi_pkt_idx = lo_pkt_idx;
+ }
+ }
+ if (lo_pkt_idx < 0 || hi_pkt_idx < 0)
+ goto dbeGetTLData_done; // no data; return empty vectors, not null
+
+ // representative events (subset of callstacks to represent on TL)
+ if (getRepresentatives)
+ {
+ representativeEvents = new Vector<long>(numDeltas);
+ // per-bin, longest event's index
+ binRepIdx = new Vector<int>(numDeltas);
+ for (int ii = 0; ii < numDeltas; ++ii)
+ binRepIdx->append (-1);
+ }
+ // While packets are sorted by _end_ timestamp (TSTAMP),
+ // after calculating start times for non-zero durations,
+ // start times are not guaranteed be monotonically increasing.
+ // For packets with duration, we'll scan them in reverse order to
+ // take advantage of the monotonically decreasing _end_ timestamps.
+ long start_idx, idx_inc;
+ if (!reverseScan)
+ {
+ start_idx = lo_pkt_idx;
+ idx_inc = 1;
+ }
+ else
+ {
+ start_idx = hi_pkt_idx;
+ idx_inc = -1;
+ }
+ for (long ii = start_idx; ii >= lo_pkt_idx && ii <= hi_pkt_idx; ii += idx_inc)
+ {
+ if (!isVisibleTLEvent (exp, view_mode, packets, ii) && !hasCumulativeCharts)
+ continue;
+
+ // determine packet time duration and start bin
+ int tmp_start_bin; // packet start bin
+ int tmp_end_bin; // packet end bin (inclusive)
+ const hrtime_t pkt_end_ts = packets->getLongValue (PROP_TSTAMP, ii);
+ const hrtime_t pkt_dur = packets->getLongValue (PROP_EVT_TIME, ii);
+ const hrtime_t pkt_start_ts = pkt_end_ts - pkt_dur;
+ if (pkt_end_ts < start_ts && !hasCumulativeCharts)
+ continue; // weird, should not happen
+ if (pkt_start_ts >= end_ts)
+ continue; // could happen
+ hrtime_t bin_end_ts = pkt_end_ts;
+ if (bin_end_ts >= end_ts)
+ bin_end_ts = end_ts - 1;
+ tmp_end_bin = (int) ((bin_end_ts - start_ts) / delta);
+ hrtime_t bin_start_ts = pkt_start_ts;
+ if (bin_start_ts < start_ts)
+ bin_start_ts = start_ts; // event truncated to left.
+ tmp_start_bin = (int) ((bin_start_ts - start_ts) / delta);
+ // By definition
+ // (end_ts - start_ts) == delta * numDeltas
+ // and we know
+ // pkt_start < end_ts
+ // therefore
+ // (pkt_start - start_ts) < delta * numDeltas
+ // (pkt_start - start_ts) / delta < numDeltas
+ // bin < numDeltas
+ assert (tmp_end_bin < numDeltas);
+ assert (tmp_start_bin < numDeltas);
+ const bool is_offscreen = tmp_end_bin < 0 ? true : false;
+ if (tmp_end_bin < 0)
+ tmp_end_bin = 0;
+ const int pkt_end_bin = tmp_end_bin; // packet end bin (inclusive)
+ const int pkt_start_bin = tmp_start_bin;
+ if (getRepresentatives && !is_offscreen)
+ { // find best representative
+ // Note: for events with duration, we're scanning packets in order
+ // of decreasing end-timestamp. This means that the first packet
+ // that hits a particular _start_ bin will have the longest duration
+ // of any later packet that might hit that start bin. The
+ // the first packet will be the best (longest) packet.
+ const int bin = reverseScan ? pkt_start_bin : pkt_end_bin;
+ int eventIdx = binRepIdx->fetch (bin);
+ if (eventIdx == -1)
+ {
+ eventIdx = representativeEvents->size (); // append to end
+ representativeEvents->append (ii);
+ binRepIdx->store (bin, eventIdx);
+ }
+ }
+ if (propIds)
+ { // per-bin chart: sum across filtered packets
+ for (int propNum = 0; propNum < propIds->size (); propNum++)
+ {
+ void *thisProp = propVals->fetch (propNum);
+ if (thisProp == NULL)
+ continue; // no valid data
+ if (is_offscreen && !propCumulativeChart->fetch (propNum))
+ continue; // offscreen events are only processed for cumulative charts
+ int propId = propIds->fetch (propNum);
+ long long val;
+ if (propId == PROP_NONE)
+ val = 1; // count
+ else
+ val = packets->getLongValue (propId, ii);
+ long nitems = propNumStates->fetch (propNum);
+ if (nitems < 1)
+ continue;
+ else if (nitems == 1)
+ {
+ // chart is not based on not multiple states
+ Vector<long long>* thisPropVals =
+ (Vector<long long>*)thisProp;
+ if (thisPropVals->size () == 0)
+ thisPropVals->store (numDeltas - 1, 0);
+ const int bin = statesUseDuration ? pkt_start_bin : pkt_end_bin;
+ if (!propCumulativeChart->fetch (propNum))
+ {
+ val += thisPropVals->fetch (bin);
+ thisPropVals->store (bin, val);
+ }
+ else
+ {
+ // propCumulativeChart
+ long long high_value = propCumulativeRecentBinHighVal->fetch (propNum);
+ int last_bin = propCumulativeRecentBin->fetch (propNum);
+ if (last_bin < bin)
+ {
+ // backfill from previous event
+ // last_bin: store largest value (in case of multiple events)
+ thisPropVals->store (last_bin, high_value);
+ // propagate forward the bin's last value
+ long long last_value = propCumulativeRecentBinLastVal->fetch (propNum);
+ for (int kk = last_bin + 1; kk < bin; kk++)
+ thisPropVals->store (kk, last_value);
+ // prepare new bin for current event
+ high_value = 0; // high value of next bin is 0.
+ propCumulativeRecentBinHighVal->store (propNum, high_value);
+ propCumulativeRecentBin->store (propNum, bin);
+ }
+ long long this_value = packets->getLongValue (propId, ii);
+ propCumulativeRecentBinLastVal->store (propNum, this_value);
+ if (high_value < this_value)
+ {
+ // record the max
+ high_value = this_value;
+ propCumulativeRecentBinHighVal->store (propNum, high_value);
+ }
+ if (ii == hi_pkt_idx)
+ {
+ // bin: show largest value (in case of multiple events
+ thisPropVals->store (bin, high_value);
+ //forward fill remaining bins
+ for (int kk = bin + 1; kk < numDeltas; kk++)
+ thisPropVals->store (kk, this_value);
+ }
+ }
+ }
+ else
+ {
+ // means val is actually a state #
+ Vector<Vector<long long>*>* thisPropStateVals =
+ (Vector<Vector<long long>*>*)thisProp;
+ if (thisPropStateVals->size () == 0)
+ thisPropStateVals->store (numDeltas - 1, 0);
+ long stateNum;
+ if (val >= 0 && val < nitems)
+ stateNum = (long) val;
+ else
+ stateNum = nitems - 1; // out of range, use last slot
+ hrtime_t graph_pkt_dur = pkt_dur;
+ hrtime_t graph_pkt_start_ts = pkt_start_ts;
+ int tmp2_start_bin = pkt_start_bin;
+ if (propId == PROP_MSTATE)
+ {
+ if (statesUseDuration && extendMicrostates)
+ {
+ // microstate stacks are shown and filtered with width=NTICK-1
+ // but for microstate graph calcs use width=NTICK.
+ graph_pkt_dur += ptimerTickDuration;
+ graph_pkt_start_ts -= ptimerTickDuration;
+ hrtime_t bin_start_ts = graph_pkt_start_ts;
+ if (bin_start_ts < start_ts)
+ bin_start_ts = start_ts; // event truncated to left.
+ tmp2_start_bin = (int) ((bin_start_ts - start_ts) / delta);
+ }
+ }
+ const int graph_pkt_start_bin = statesUseDuration ? tmp2_start_bin : pkt_end_bin;
+
+ // We will distribute the state's presence evenly over duration of the event.
+ // When only a 'partial bin' is touched by an event, adjust accordingly.
+ long long value_per_bin; // weight to be applied to each bin
+ {
+ long long weight;
+ if (propId == PROP_MSTATE) // ticks to nanoseconds
+ weight = packets->getLongValue (PROP_NTICK, ii) * ptimerTickDuration;
+ else if (graph_pkt_dur)
+ weight = graph_pkt_dur; // nanoseconds
+ else
+ weight = 1; // no duration; indicate presence
+ if (graph_pkt_start_bin != pkt_end_bin)
+ {
+ // spans multiple bins
+ double nbins = (double) graph_pkt_dur / delta;
+ value_per_bin = weight / nbins;
+ }
+ else
+ value_per_bin = weight;
+ }
+ for (int evtbin = graph_pkt_start_bin; evtbin <= pkt_end_bin; evtbin++)
+ {
+ Vector<long long>* stateValues =
+ (Vector<long long>*) thisPropStateVals->fetch (evtbin);
+ if (stateValues == NULL)
+ {
+ // on-demand storage
+ stateValues = new Vector<long long>(nitems);
+ stateValues->store (nitems - 1, 0); // force memset of full vector
+ thisPropStateVals->store (evtbin, stateValues);
+ }
+ long long new_val = stateValues->fetch (stateNum);
+ if (graph_pkt_start_bin == pkt_end_bin ||
+ (evtbin > graph_pkt_start_bin && evtbin < pkt_end_bin))
+ {
+ new_val += value_per_bin;
+ }
+ else
+ {
+ // partial bin
+ const hrtime_t bin_start = start_ts + evtbin * delta;
+ const hrtime_t bin_end = start_ts + (evtbin + 1) * delta - 1;
+ if (evtbin == graph_pkt_start_bin)
+ {
+ // leftmost bin
+ if (graph_pkt_start_ts < bin_start)
+ new_val += value_per_bin;
+ else
+ {
+ double percent = (double) (bin_end - graph_pkt_start_ts) / delta;
+ new_val += value_per_bin*percent;
+ }
+ }
+ else
+ {
+ // rightmost bin
+ if (pkt_end_ts > bin_end)
+ new_val += value_per_bin;
+ else
+ {
+ double percent = (double) (pkt_end_ts - bin_start) / delta;
+ new_val += value_per_bin*percent;
+ }
+ }
+ }
+ stateValues->store (stateNum, new_val);
+ }
+ }
+ }
+ }
+ }
+ delete binRepIdx;
+ delete propIds;
+ delete propCumulativeChart;
+ delete propCumulativeRecentBinLastVal;
+ delete propCumulativeRecentBinHighVal;
+ delete propCumulativeRecentBin;
+ if (representativeEvents != NULL && reverseScan)
+ {
+ if (repsShowDuration)
+ {
+ //YXXX for now prune here, but in the future, let gui decide what to show
+ // Prune events that are completely obscured long duration events.
+ // Note: representativeEvents is sorted by decreasing _end_ timestamps.
+ Vector<long> *prunedEvents = new Vector<long>(numDeltas);
+ hrtime_t prev_start_ts = MAX_TIME;
+ long repCnt = representativeEvents->size ();
+ for (long kk = 0; kk < repCnt; kk++)
+ {
+ long ii = representativeEvents->fetch (kk);
+ hrtime_t tmp_end_ts = packets->getLongValue (PROP_TSTAMP, ii);
+ hrtime_t tmp_dur = packets->getLongValue (PROP_EVT_TIME, ii);
+ hrtime_t tmp_start_ts = tmp_end_ts - tmp_dur;
+ if (tmp_start_ts >= prev_start_ts)
+ // this event would be completely hidden
+ // (because of sorting, we know tmp_end_ts <= prev_end_ts)
+ continue;
+ prev_start_ts = tmp_start_ts;
+ prunedEvents->append (ii);
+ }
+ // invert order to to get increasing _end_ timestamps
+ representativeEvents->reset ();
+ for (long kk = prunedEvents->size () - 1; kk >= 0; kk--)
+ {
+ long packet_idx = prunedEvents->fetch (kk);
+ representativeEvents->append (packet_idx);
+ }
+ delete prunedEvents;
+ }
+ else
+ { // !repsShowDuration
+ // Note: representativeEvents is sorted by decreasing _end_ timestamps.
+ // Reverse the order:
+ long hi_idx = representativeEvents->size () - 1;
+ long lo_idx = 0;
+ while (hi_idx > lo_idx)
+ {
+ // swap
+ long lo = representativeEvents->fetch (lo_idx);
+ long hi = representativeEvents->fetch (hi_idx);
+ representativeEvents->store (lo_idx, hi);
+ representativeEvents->store (hi_idx, lo);
+ hi_idx--;
+ lo_idx++;
+ }
+ }
+ }
+
+dbeGetTLData_done:
+ if (getRepresentatives)
+ {
+ representativeVals = dbeGetTLDataRepVals (view_mode, start_ts, delta,
+ numDeltas, packets, representativeEvents, repsShowDuration);
+ delete representativeEvents;
+ }
+ Vector<void*> *results = new Vector<void*> (2);
+ results->store (0, representativeVals);
+ results->store (1, propVals);
+ return results;
+}
+
+// add representative events to return buffer
+
+static Vector<void *> *
+dbeGetTLDataRepVals (VMode view_mode, hrtime_t start_ts, hrtime_t delta,
+ int numDeltas, DataView*packets,
+ Vector<long> *representativeEvents, bool showDuration)
+{
+ int numrecs = representativeEvents ? representativeEvents->size () : 0;
+ // allocate storage for results
+ Vector<int> *startBins = new Vector<int>(numrecs);
+ Vector<int> *numBins = new Vector<int>(numrecs);
+ Vector<Obj> *eventIdxs = new Vector<Obj>(numrecs);
+ Vector<Obj> *stackIds = NULL;
+ if (packets->getProp (PROP_FRINFO))
+ stackIds = new Vector<Obj>(numrecs);
+ Vector<int> *mstates = NULL;
+ if (packets->getProp (PROP_MSTATE))
+ mstates = new Vector<int>(numrecs);
+ Vector<Vector<long long>*> *sampleVals = NULL;
+ if (packets->getProp (PROP_SMPLOBJ))
+ sampleVals = new Vector<Vector<long long>*>(numrecs);
+ Vector<long long> *timeStart = new Vector<long long>(numrecs);
+ Vector<long long> *timeEnd = new Vector<long long>(numrecs);
+ int prevEndBin = -1; // make sure we don't overlap bins
+ for (int eventIdx = 0; eventIdx < numrecs; eventIdx++)
+ {
+ long packetIdx = representativeEvents->fetch (eventIdx);
+ // long eventId = packets->getIdByIdx( packetIdx );
+ const hrtime_t pkt_tstamp = packets->getLongValue (PROP_TSTAMP, packetIdx);
+ const hrtime_t pkt_dur = showDuration ? packets->getLongValue (PROP_EVT_TIME, packetIdx) : 0;
+ timeStart->store (eventIdx, pkt_tstamp - pkt_dur);
+ timeEnd->store (eventIdx, pkt_tstamp);
+
+ // calc startBin
+ int startBin = (int) ((pkt_tstamp - pkt_dur - start_ts) / delta);
+ if (startBin <= prevEndBin)
+ startBin = prevEndBin + 1;
+ // calc binCnt
+ int endBin = (int) ((pkt_tstamp - start_ts) / delta);
+ if (endBin >= numDeltas)
+ endBin = numDeltas - 1;
+ int binCnt = endBin - startBin + 1;
+ prevEndBin = endBin;
+ startBins->store (eventIdx, startBin);
+ numBins->store (eventIdx, binCnt);
+ eventIdxs->store (eventIdx, packetIdx); // store packet's idx
+ if (stackIds != NULL)
+ {
+ void* stackId = getStack (view_mode, packets, packetIdx);
+ stackIds->store (eventIdx, (Obj) (unsigned long) stackId);
+ }
+ if (mstates != NULL)
+ {
+ int mstate = packets->getIntValue (PROP_MSTATE, packetIdx);
+ mstates->store (eventIdx, mstate);
+ }
+ if (sampleVals != NULL)
+ {
+ Sample* sample = (Sample*) packets->getObjValue (PROP_SMPLOBJ, packetIdx);
+ if (!sample || !sample->get_usage ())
+ sample = sample;
+ else
+ {
+ PrUsage* prusage = sample->get_usage ();
+ Vector<long long> *mstateVals = prusage->getMstateValues ();
+ sampleVals->store (eventIdx, mstateVals);
+ }
+ }
+ }
+ // caller responsible for: delete representativeEvents;
+ Vector<void*> *results = new Vector<void*> (8);
+ results->store (0, startBins);
+ results->store (1, numBins);
+ results->store (2, eventIdxs);
+ results->store (3, stackIds);
+ results->store (4, mstates);
+ results->store (5, sampleVals);
+ results->store (6, timeStart);
+ results->store (7, timeEnd);
+ return results;
+}
+
+// starting from <event_id> packet idx, step <move_count> visible events
+// return the resulting idx and that packet's center time, or null if no event.
+Vector<long long> *
+dbeGetTLEventCenterTime (int dbevindex, int exp_id, int data_id,
+ int entity_prop_id, int entity_prop_val, int aux,
+ long long event_id, long long move_count)
+{
+ DataView *packets = getTimelinePackets (dbevindex, exp_id, data_id,
+ entity_prop_id);
+ if (packets == NULL)
+ return NULL;
+ long idx = (long) event_id;
+
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ VMode view_mode = dbev->get_view_mode ();
+ Experiment *exp = dbeSession->get_exp (exp_id);
+ int direction;
+ if (move_count == 0)
+ direction = 0;
+ else if (move_count < 0)
+ {
+ move_count = -move_count;
+ direction = -1;
+ }
+ else
+ direction = 1;
+ idx = getTLVisibleIdxByStepping (exp, view_mode, entity_prop_id, packets, aux,
+ entity_prop_val, idx, move_count, direction);
+ if (idx >= 0)
+ {
+ long long ts = packets->getLongValue (PROP_TSTAMP, idx);
+ long long dur = packets->getLongValue (PROP_EVT_TIME, idx);
+ long long center = ts - dur / 2;
+ Vector<long long> *results = new Vector<long long> (2);
+ results->store (0, idx); // result idx
+ results->store (1, center); // result timestamp
+ return results;
+ }
+ return NULL;
+}
+
+long long
+dbeGetTLEventIdxNearTime (int dbevindex, int exp_id, int data_id,
+ int entity_prop_id, int entity_prop_val, int aux,
+ int searchDirection, long long tstamp)
+{
+ DataView *packets = getTimelinePackets (dbevindex, exp_id, data_id,
+ entity_prop_id);
+ if (packets == NULL)
+ return -1;
+ DbeView *dbev = dbeSession->getView (dbevindex);
+ VMode view_mode = dbev->get_view_mode ();
+ Experiment *exp = dbeSession->get_exp (exp_id);
+ if (searchDirection < 0)
+ {
+ int idx = getTLVisibleIdxByVals (exp, view_mode, entity_prop_id,
+ packets, aux, entity_prop_val, tstamp,
+ DataView::REL_LTEQ);
+ if (idx != -1)
+ return idx;
+ searchDirection = 1; // couldn't find to left, try to right
+ }
+ if (searchDirection > 0)
+ {
+ int idx = getTLVisibleIdxByVals (exp, view_mode, entity_prop_id,
+ packets, aux, entity_prop_val, tstamp,
+ DataView::REL_GTEQ);
+ if (idx != -1)
+ return idx;
+ // couldn't find to right, fall through to generic
+ }
+ // search left and right of timestamp
+ long idx1, idx2;
+ idx1 = getTLVisibleIdxByVals (exp, view_mode, entity_prop_id,
+ packets, aux, entity_prop_val, tstamp,
+ DataView::REL_LT);
+ idx2 = getTLVisibleIdxByVals (exp, view_mode, entity_prop_id,
+ packets, aux, entity_prop_val, tstamp,
+ DataView::REL_GTEQ);
+ if (idx1 == -1)
+ return idx2;
+ else if (idx2 == -1)
+ return idx1;
+
+ // both valid, so need to compare to see which is closer
+ long long t1 = packets->getLongValue (PROP_TSTAMP, idx1);
+ long long t2 = packets->getLongValue (PROP_TSTAMP, idx2);
+ long long t2dur = packets->getLongValue (PROP_EVT_TIME, idx2);
+ long long delta1 = tstamp - t1; // should always be positive
+ long long delta2 = (t2 - t2dur) - tstamp; // if negative, overlaps idx1
+ if (delta1 > delta2)
+ return idx2;
+ else
+ return idx1;
+}
+
+enum Aggr_type
+{
+ AGGR_NONE,
+ AGGR_FAIR,
+ AGGR_MAX,
+ AGGR_MIN,
+ AGGR_CNT,
+ AGGR_SUM,
+ AGGR_AVG
+};
+
+static Aggr_type
+getAggrFunc (char *aname)
+{
+ Aggr_type agrfn = AGGR_NONE;
+ if (aname == NULL)
+ return agrfn;
+ if (strcmp (aname, NTXT ("FAIR")) == 0)
+ agrfn = AGGR_FAIR;
+ else if (strcmp (aname, NTXT ("MAX")) == 0)
+ agrfn = AGGR_MAX;
+ else if (strcmp (aname, NTXT ("MIN")) == 0)
+ agrfn = AGGR_MIN;
+ else if (strcmp (aname, NTXT ("CNT")) == 0)
+ agrfn = AGGR_CNT;
+ else if (strcmp (aname, NTXT ("SUM")) == 0)
+ agrfn = AGGR_SUM;
+ else if (strcmp (aname, NTXT ("AVG")) == 0)
+ agrfn = AGGR_AVG;
+ return agrfn;
+}
+
+static long long
+computeAggrVal (DefaultMap<long long, long long> *fval_map, Aggr_type agrfn)
+{
+ long long aval = 0;
+ long cnt = 0;
+ Vector<long long> *fvals = fval_map->values ();
+ long nvals = fvals->size ();
+ for (int i = 0; i < nvals; ++i)
+ {
+ long long val = fvals->fetch (i);
+ switch (agrfn)
+ {
+ case AGGR_FAIR:
+ aval = val;
+ break;
+ case AGGR_MAX:
+ if (aval < val || cnt == 0)
+ aval = val;
+ break;
+ case AGGR_MIN:
+ if (aval > val || cnt == 0)
+ aval = val;
+ break;
+ case AGGR_CNT:
+ aval = cnt + 1;
+ break;
+ case AGGR_SUM:
+ case AGGR_AVG:
+ aval += val;
+ break;
+ case AGGR_NONE:
+ break;
+ }
+ if (agrfn == AGGR_FAIR)
+ break;
+ cnt += 1;
+ }
+
+ // Finalize aggregation
+ if (agrfn == AGGR_AVG)
+ if (cnt > 0)
+ aval = (aval + cnt / 2) / cnt;
+ delete fvals;
+ return aval;
+}
+
+Vector<long long> *
+dbeGetAggregatedValue (int data_id, // data table id
+ char *lfilter, // local filter
+ char *fexpr, // function expression
+ char *pname_ts, // property name for timestamp
+ hrtime_t start_ts, // start of the first time interval
+ hrtime_t delta, // time interval length
+ int num, // number of time intervals
+ char *pname_key, // property name for aggregation key
+ char *aggr_func) // aggregation function
+{
+ Vector<long long> *res = new Vector<long long>;
+ Experiment *exp = dbeSession->get_exp (0);
+ if (exp == NULL)
+ return res;
+ hrtime_t end_ts = start_ts + delta * num;
+ if (end_ts < start_ts) // check overflow
+ end_ts = MAX_TIME;
+
+ if (exp->get_status () == Experiment::INCOMPLETE
+ && exp->getLastEvent () < end_ts)
+ exp->update ();
+
+ DataDescriptor *dataDscr = exp->get_raw_events (data_id);
+ if (dataDscr == NULL)
+ return res;
+
+ // Process timestamp argument
+ int prop_ts = dbeSession->getPropIdByName (pname_ts);
+ if (prop_ts == PROP_NONE)
+ return res;
+ assert (prop_ts == -1);
+
+ // Parse all expressions
+ Expression *flt_expr = NULL;
+ if (lfilter != NULL)
+ flt_expr = dbeSession->ql_parse (lfilter);
+ Expression *func_expr = NULL;
+ if (fexpr != NULL)
+ func_expr = dbeSession->ql_parse (fexpr);
+ if (func_expr == NULL) // Not specified or malformed
+ return res;
+
+ // Process aggregation key argument
+ int prop_key = PROP_NONE;
+ Data *data_key = NULL;
+ if (pname_key != NULL)
+ {
+ prop_key = dbeSession->getPropIdByName (pname_key);
+ data_key = dataDscr->getData (prop_key);
+ if (data_key == NULL) // Specified but not found
+ return res;
+ }
+
+ // Process aggregation function argument
+ Aggr_type agrfn = AGGR_FAIR;
+ if (aggr_func != NULL)
+ {
+ agrfn = getAggrFunc (aggr_func);
+ if (agrfn == AGGR_NONE) // Specified but not recognized
+ return res;
+ }
+ DefaultMap<long long, long long> *
+ fval_map = new DefaultMap<long long, long long>; // key_val -> func_val
+ Vector<long long> *key_set = NULL;
+ assert (key_set != NULL);
+ if (key_set == NULL)
+ {
+ key_set = new Vector<long long>;
+ key_set->append (0L);
+ }
+ DefaultMap<long long, int> *key_seen = new DefaultMap<long long, int>;
+ long idx_prev = -1;
+ for (int tidx = 0; tidx < num; ++tidx)
+ {
+ long idx_cur = -1;
+ assert (idx_cur != -1);
+ int left = key_set->size ();
+ key_seen->clear ();
+ for (long idx = idx_cur; idx > idx_prev; --idx)
+ {
+ long id = 0;
+ assert (id != 0);
+
+ // Pre-create expression context
+ Expression::Context ctx (dbeSession->getView (0), exp, NULL, id);
+ // First use the filter
+ if (flt_expr != NULL)
+ if (flt_expr->eval (&ctx) == 0)
+ continue;
+
+ // Calculate the key
+ // keys are limited to integral values
+ long long key = 0;
+ if (data_key != NULL)
+ key = data_key->fetchLong (id);
+
+ // Check if already seen
+ if (key_seen->get (key) == 1)
+ continue;
+ key_seen->put (key, 1);
+ left -= 1;
+
+ // Calculate function value
+ // function values are limited to integral values
+ long long fval = func_expr->eval (&ctx);
+ fval_map->put (key, fval);
+ if (left == 0)
+ break;
+ }
+ idx_prev = idx_cur;
+ long long aval = computeAggrVal (fval_map, agrfn);
+ res->store (tidx, aval);
+ }
+ delete key_seen;
+ delete fval_map;
+ delete flt_expr;
+ delete func_expr;
+ return res;
+}
+
+Vector<char*> *
+dbeGetLineInfo (Obj pc)
+{
+ DbeInstr *instr = (DbeInstr*) pc;
+ if (instr == NULL || instr->get_type () != Histable::INSTR)
+ return NULL;
+ DbeLine *dbeline = (DbeLine*) instr->convertto (Histable::LINE);
+ const char *fname = dbeline ? dbeline->sourceFile->get_name () : NTXT ("");
+ char lineno[16];
+ *lineno = '\0';
+ if (dbeline != NULL)
+ snprintf (lineno, sizeof (lineno), NTXT ("%d"), dbeline->lineno);
+ Vector<char*> *res = new Vector<char*>(2);
+ res->store (0, strdup (fname));
+ res->store (1, strdup (lineno));
+ return res;
+}
+
+int
+dbeSetAlias (char *name, char *uname, char *expr)
+{
+ char *res = dbeSession->indxobj_define (name, uname, expr, NULL, NULL);
+ return res == NULL ? 0 : 1;
+}
+
+Vector<char*> *
+dbeGetAlias (char *name)
+{
+ Vector<char*> *res = new Vector<char*>;
+ int idx = dbeSession->findIndexSpaceByName (name);
+ if (idx >= 0)
+ {
+ char *str = dbeSession->getIndexSpaceDescr (idx);
+ res->append (dbe_strdup (str));
+ str = dbeSession->getIndexSpaceExprStr (idx);
+ res->append (dbe_strdup (str));
+ }
+ return res;
+}
+
+static int
+key_cmp (const void *p1, const void *p2)
+{
+ long long ll1 = *(long long*) p1;
+ long long ll2 = *(long long*) p2;
+ return ll1 < ll2 ? -1 : ll1 > ll2 ? 1 : 0;
+}
+
+Vector<Vector<long long>*> *
+dbeGetXYPlotData (
+ int data_id, // data table id
+ char *lfilter, // local filter expression
+ char *arg, // name for the argument
+ char *func1, // expression for the first axis (x)
+ char *aggr1, // aggregation function for func1: "SUM","CNT",...
+ char *func2, // expression for the second axis (y)
+ char *aggr2, // aggregation function for func2
+ char *func3, // expression for the third axis (color)
+ char *aggr3) // aggregation function for func3
+{
+ Vector<Vector<long long>*> *res = new Vector<Vector<long long>*>;
+ Experiment *exp = dbeSession->get_exp (0);
+ if (exp == NULL)
+ return res;
+ if (exp->get_status () == Experiment::INCOMPLETE)
+ exp->update ();
+
+ DataDescriptor *dataDscr = exp->get_raw_events (data_id);
+ if (dataDscr == NULL)
+ return res;
+
+ // Parse all expressions
+ Vector<Expression*> *funcs = new Vector<Expression*>;
+ Vector<Aggr_type> *aggrs = new Vector<Aggr_type>;
+ Vector<DefaultMap<long long, long long>*> *fval_maps =
+ new Vector<DefaultMap<long long, long long>*>;
+ Vector<DefaultMap<long long, long>*> *cnt_maps =
+ new Vector<DefaultMap<long long, long>*>;
+ if (func1 != NULL)
+ {
+ Expression *expr = dbeSession->ql_parse (func1);
+ funcs->append (expr);
+ aggrs->append (getAggrFunc (aggr1));
+ fval_maps->append (new DefaultMap<long long, long long>);
+ cnt_maps->append (new DefaultMap<long long, long>);
+ res->append (new Vector<long long>);
+ if (func2 != NULL)
+ {
+ expr = dbeSession->ql_parse (func2);
+ funcs->append (expr);
+ aggrs->append (getAggrFunc (aggr2));
+ fval_maps->append (new DefaultMap<long long, long long>);
+ cnt_maps->append (new DefaultMap<long long, long>);
+ res->append (new Vector<long long>);
+ if (func3 != NULL)
+ {
+ expr = dbeSession->ql_parse (func3);
+ funcs->append (expr);
+ aggrs->append (getAggrFunc (aggr3));
+ fval_maps->append (new DefaultMap<long long, long long>);
+ cnt_maps->append (new DefaultMap<long long, long>);
+ res->append (new Vector<long long>);
+ }
+ }
+ }
+ if (funcs->size () == 0)
+ {
+ funcs->destroy ();
+ delete funcs;
+ fval_maps->destroy ();
+ delete fval_maps;
+ cnt_maps->destroy ();
+ delete cnt_maps;
+ delete aggrs;
+ return res;
+ }
+ Expression *arg_expr = NULL;
+ if (arg != NULL)
+ arg_expr = dbeSession->ql_parse (arg);
+ if (arg_expr == NULL)
+ {
+ funcs->destroy ();
+ delete funcs;
+ fval_maps->destroy ();
+ delete fval_maps;
+ cnt_maps->destroy ();
+ delete cnt_maps;
+ delete aggrs;
+ return res;
+ }
+ Expression *flt_expr = NULL;
+ if (lfilter != NULL)
+ flt_expr = dbeSession->ql_parse (lfilter);
+ Vector<long long> *kidx_map = new Vector<long long>(); // key_idx -> key_val
+ for (long i = 0; i < dataDscr->getSize (); i++)
+ {
+ Expression::Context ctx (dbeSession->getView (0), exp, NULL, i);
+ // First use the filter
+ if (flt_expr != NULL)
+ if (flt_expr->eval (&ctx) == 0)
+ continue;
+
+ // Compute the argument
+ long long key = arg_expr->eval (&ctx);
+ if (kidx_map->find (key) == -1)
+ kidx_map->append (key);
+ for (long j = 0; j < funcs->size (); ++j)
+ {
+ Expression *func = funcs->fetch (j);
+ Aggr_type aggr = aggrs->fetch (j);
+ DefaultMap<long long, long long> *fval_map = fval_maps->fetch (j);
+ DefaultMap<long long, long> *cnt_map = cnt_maps->fetch (j);
+ long long fval = func->eval (&ctx);
+ long long aval = fval_map->get (key);
+ long cnt = cnt_map->get (key);
+ switch (aggr)
+ {
+ case AGGR_NONE:
+ case AGGR_FAIR:
+ if (cnt == 0)
+ aval = fval;
+ break;
+ case AGGR_MAX:
+ if (aval < fval || cnt == 0)
+ aval = fval;
+ break;
+ case AGGR_MIN:
+ if (aval > fval || cnt == 0)
+ aval = fval;
+ break;
+ case AGGR_CNT:
+ aval = cnt + 1;
+ break;
+ case AGGR_SUM:
+ case AGGR_AVG:
+ aval += fval;
+ break;
+ }
+ cnt_map->put (key, cnt + 1);
+ fval_map->put (key, aval);
+ }
+ }
+ kidx_map->sort (key_cmp);
+
+ // Finalize aggregation, prepare result
+ for (long j = 0; j < funcs->size (); ++j)
+ {
+ Aggr_type aggr = aggrs->fetch (j);
+ Vector<long long> *resj = res->fetch (j);
+ DefaultMap<long long, long long> *
+ fval_map = fval_maps->fetch (j);
+ DefaultMap<long long, long> *
+ cnt_map = cnt_maps->fetch (j);
+ for (int kidx = 0; kidx < kidx_map->size (); ++kidx)
+ {
+ long long key = kidx_map->fetch (kidx);
+ long long aval = fval_map->get (key);
+ if (aggr == AGGR_AVG)
+ {
+ long cnt = cnt_map->get (key);
+ if (cnt > 0)
+ aval = (aval + cnt / 2) / cnt;
+ }
+ resj->append (aval);
+ }
+ }
+ delete flt_expr;
+ funcs->destroy ();
+ delete funcs;
+ delete aggrs;
+ delete arg_expr;
+ delete kidx_map;
+ fval_maps->destroy ();
+ delete fval_maps;
+ cnt_maps->destroy ();
+ delete cnt_maps;
+ return res;
+}
+
+/* ********************************************************************* */
+/* Routines for use by Collector GUI */
+/**
+ * Returns signal value for provided name. Example of name: "SIGUSR1"
+ * @param signal
+ * @return value
+ */
+int
+dbeGetSignalValue (char *signal)
+{
+ int ret = -1;
+ if (signal == NULL)
+ return ret;
+ if (strcmp (signal, "SIGUSR1") == 0)
+ return (SIGUSR1);
+ if (strcmp (signal, "SIGUSR2") == 0)
+ return (SIGUSR2);
+ if (strcmp (signal, "SIGPROF") == 0)
+ return (SIGPROF);
+ return ret;
+}
+
+char *
+dbeSendSignal (pid_t p, int signum)
+{
+ int ret = kill (p, signum);
+ if (p == 0 || p == -1)
+ return (dbe_sprintf (GTXT ("kill of process %d not supported\n"), p));
+ if (ret == 0)
+ return NULL;
+ char *msg = dbe_sprintf (GTXT ("kill(%d, %d) failed: %s\n"), p, signum,
+ strerror (errno));
+ return msg;
+}
+
+char *
+dbeGetCollectorControlValue (char *control)
+{
+ if (control == NULL)
+ return NULL;
+ if (col_ctr == NULL)
+ col_ctr = new Coll_Ctrl (1);
+ char *msg = col_ctr->get (control);
+ return msg;
+}
+
+char *
+dbeSetCollectorControlValue (char *control, char * value)
+{
+ if (control == NULL)
+ return NULL;
+ if (col_ctr == NULL)
+ col_ctr = new Coll_Ctrl (1);
+ char *msg = col_ctr->set (control, value);
+ return msg;
+}
+
+char *
+dbeUnsetCollectorControlValue (char *control)
+{
+ if (control == NULL)
+ return NULL;
+ if (col_ctr == NULL)
+ col_ctr = new Coll_Ctrl (1);
+ char *msg = col_ctr->unset (control);
+ return msg;
+}
+
+void
+dbeSetLocation (const char *fname, const char *location)
+{
+ Vector<SourceFile*> *sources = dbeSession->get_sources ();
+ for (long i = 0, sz = sources ? sources->size () : 0; i < sz; i++)
+ {
+ SourceFile *src = sources->get (i);
+ DbeFile *df = src->dbeFile;
+ if (df && (strcmp (fname, df->get_name ()) == 0))
+ {
+ df->find_file ((char *) location);
+ break;
+ }
+ }
+}
+
+void
+dbeSetLocations (Vector<const char *> *fnames, Vector<const char *> *locations)
+{
+ if (fnames == NULL || locations == NULL
+ || fnames->size () != locations->size ())
+ return;
+ for (long i = 0, sz = fnames->size (); i < sz; i++)
+ dbeSetLocation (fnames->get (i), locations->get (i));
+}
+
+Vector<void*> *
+dbeResolvedWith_setpath (const char *path)
+{
+ Vector<char*> *names = new Vector<char*>();
+ Vector<char*> *pathes = new Vector<char*>();
+ Vector<long long> *ids = new Vector<long long>();
+ Vector<SourceFile*> *sources = dbeSession->get_sources ();
+ for (long i = 0, sz = sources ? sources->size () : 0; i < sz; i++)
+ {
+ SourceFile *src = sources->get (i);
+ DbeFile *df = src->dbeFile;
+ if (df == NULL || (df->filetype & DbeFile::F_FICTION) != 0)
+ continue;
+ char *fnm = df->get_name ();
+ if ((df->filetype & (DbeFile::F_JAVACLASS | DbeFile::F_JAVA_SOURCE)) != 0)
+ {
+ char *jnm = dbe_sprintf (NTXT ("%s/%s"), path, fnm);
+ if (df->check_access (jnm) == DbeFile::F_FILE)
+ {
+ names->append (dbe_strdup (fnm));
+ pathes->append (jnm);
+ ids->append (src->id);
+ continue;
+ }
+ free (jnm);
+ }
+ char *nm = dbe_sprintf (NTXT ("%s/%s"), path, get_basename (fnm));
+ if (df->check_access (nm) == DbeFile::F_FILE)
+ {
+ names->append (dbe_strdup (fnm));
+ pathes->append (nm);
+ ids->append (src->id);
+ continue;
+ }
+ free (nm);
+ }
+ if (names->size () != 0)
+ {
+ Vector<void*> *data = new Vector<void*>(3);
+ data->append (names);
+ data->append (pathes);
+ data->append (ids);
+ return data;
+ }
+ return NULL;
+}
+
+Vector<void*> *
+dbeResolvedWith_pathmap (const char *old_prefix, const char *new_prefix)
+{
+ size_t len = strlen (old_prefix);
+ Vector<char*> *names = new Vector<char*>();
+ Vector<char*> *pathes = new Vector<char*>();
+ Vector<long long> *ids = new Vector<long long>();
+ Vector<SourceFile*> *sources = dbeSession->get_sources ();
+ for (long i = 0, sz = sources ? sources->size () : 0; i < sz; i++)
+ {
+ SourceFile *src = sources->get (i);
+ DbeFile *df = src->dbeFile;
+ if (df == NULL || (df->filetype & DbeFile::F_FICTION) != 0)
+ continue;
+ char *fnm = df->get_name ();
+ if (strncmp (old_prefix, fnm, len) == 0
+ && (fnm[len] == '/' || fnm[len] == '\0'))
+ {
+ char *nm = dbe_sprintf (NTXT ("%s/%s"), new_prefix, fnm + len);
+ if (df->check_access (nm) == DbeFile::F_FILE)
+ {
+ names->append (dbe_strdup (fnm));
+ pathes->append (nm);
+ ids->append (src->id);
+ continue;
+ }
+ if ((df->filetype & DbeFile::F_JAVA_SOURCE) != 0)
+ {
+ free (nm);
+ nm = dbe_sprintf (NTXT ("%s/%s"), new_prefix, fnm);
+ if (df->check_access (nm) == DbeFile::F_FILE)
+ {
+ names->append (dbe_strdup (fnm));
+ pathes->append (nm);
+ ids->append (src->id);
+ continue;
+ }
+ }
+ free (nm);
+ }
+ }
+ if (names->size () != 0)
+ {
+ Vector<void*> *data = new Vector<void*>(3);
+ data->append (names);
+ data->append (pathes);
+ data->append (ids);
+ return data;
+ }
+ return NULL;
+}
+
+void
+dbe_archive (Vector<long long> *ids, Vector<const char *> *locations)
+{
+ if (ids == NULL || locations == NULL || ids->size () != locations->size ())
+ return;
+ Experiment *exp = dbeSession->get_exp (0);
+ if (exp == NULL)
+ return;
+ Vector<SourceFile*> *sources = dbeSession->get_sources ();
+ for (long i1 = 0, sz1 = ids->size (); i1 < sz1; i1++)
+ {
+ long long id = ids->get (i1);
+ for (long i = 0, sz = sources ? sources->size () : 0; i < sz; i++)
+ {
+ SourceFile *src = sources->get (i);
+ if (src->id == id)
+ {
+ DbeFile *df = src->dbeFile;
+ if (df)
+ {
+ char *fnm = df->find_file ((char *) locations->get (i1));
+ if (fnm)
+ {
+ char *nm = df->get_name ();
+ char *anm = exp->getNameInArchive (nm, false);
+ exp->copy_file (fnm, anm, true);
+ free (anm);
+ }
+ }
+ }
+ }
+ }
+}
+
+/* ************************************************************************ */
+
+/* Routines to check connection between Remote Analyzer Client and er_print */
+char *
+dbeCheckConnection (char *str)
+{
+ return dbe_strdup (str);
+}
diff --git a/gprofng/src/Dbe.h b/gprofng/src/Dbe.h
new file mode 100644
index 00000000000..f81109674ba
--- /dev/null
+++ b/gprofng/src/Dbe.h
@@ -0,0 +1,294 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _DBE_H_
+#define _DBE_H_
+
+#include <stdio.h>
+#include "enums.h"
+
+class MetricList;
+template <class ITEM> class Vector;
+typedef long long Obj;
+
+Vector<char*> *dbeGetInitMessages (void);
+Vector<char*> *dbeGetExpPreview (int dbevindex, char *exp_name);
+char *dbeGetExpParams (int dbevindex, char *exp_name);
+char *dbeCreateDirectories (const char *dirname);
+char *dbeDeleteFile (const char *pathname);
+Vector<char*> *dbeReadFile (const char *pathname);
+int dbeWriteFile (const char *pathname, const char *contents);
+char *dbeGetFileAttributes (const char *filename, const char *format);
+char *dbeGetFiles (const char *dirname, const char *format);
+char *dbeGetRunningProcesses (const char *format);
+char *dbeOpenExperimentList (int dbevindex, Vector<Vector<char*>*> *groups,
+ bool sessionRestart);
+char *dbeReadRCFile (int dbevindex, char* path);
+char *dbeSetExperimentsGroups (Vector<Vector<char*>*> *groups);
+Vector<Vector<char*>*> *dbeGetExperimensGroups ();
+char *dbeDropExperiment (int dbevindex, Vector<int> *drop_index);
+Vector<char*> *dbeGetExpsProperty (const char *prop_name);
+Vector<char*> *dbeGetExpName (int dbevindex);
+Vector<int> *dbeGetExpState (int dbevindex);
+Vector<bool> *dbeGetExpEnable (int dbevindex);
+bool dbeSetExpEnable (int dbevindex, Vector<bool> *enable);
+Vector<char*> *dbeGetExpInfo (int dbevindex);
+bool dbeGetViewModeEnable ();
+bool dbeGetJavaEnable ();
+int dbeUpdateNotes (int dbevindex, int exp_id, int type, char* text,
+ bool handle_file);
+Vector<void*> *dbeGetTabListInfo (int dbevindex);
+Vector<bool> *dbeGetTabSelectionState (int dbevindex);
+void dbeSetTabSelectionState (int dbevindex, Vector<bool> *selected);
+Vector<bool> *dbeGetMemTabSelectionState (int dbevindex);
+void dbeSetMemTabSelectionState (int dbevindex, Vector<bool> *selected);
+Vector<bool> *dbeGetIndxTabSelectionState (int dbevindex);
+void dbeSetIndxTabSelectionState (int dbevindex, Vector<bool> *selected);
+Vector<char*> *dbeGetLoadObjectName (int dbevindex);
+Vector<void *> *dbeGetLoadObjectList (int dbevindex);
+Vector<char*> *dbeGetSearchPath (int dbevindex);
+void dbeSetSearchPath (int dbevindex, Vector<char*> *path);
+Vector<void*> *dbeGetPathmaps (int dbevindex);
+char *dbeSetPathmaps (Vector<char*> *from, Vector<char*> *to);
+char *dbeAddPathmap (int dbevindex, char *from, char *to);
+char *dbeGetMsg (int dbevindex, int type);
+int dbeInitView (int index, int cloneindex);
+void dbeDeleteView (int dbevindex);
+
+// methods concerning metrics
+MetricList *dbeGetMetricListV2 (int dbevindex, MetricType mtype,
+ Vector<int> *type, Vector<int> *subtype,
+ Vector<bool> *sort, Vector<int> *vis,
+ Vector<char*> *aux, Vector<char*> *expr_spec,
+ Vector<char*> *legends);
+Vector<void*> *dbeGetRefMetricsV2 ();
+Vector<void*> *dbeGetCurMetricsV2 (int dbevindex, MetricType mtype);
+void dbeSetSort (int dbevindex, int sort_index, MetricType mtype, bool reverse);
+
+// methods concerning metrics for Overview Tab
+Vector<void*> *dbeGetRefMetricTree (int dbevindex, bool include_unregistered);
+Vector<void*> *dbeGetRefMetricTreeValues (int dbevindex, Vector<char *> *met_cmds,
+ Vector<char *> *non_met_cmds);
+Vector<char*> *dbeGetOverviewText (int dbevindex);
+Vector<int> *dbeGetAnoValue (int dbevindex);
+void dbeSetAnoValue (int dbevindex, Vector<int> *set);
+int dbeGetNameFormat (int dbevindex);
+bool dbeGetSoName (int dbevindex);
+void dbeSetNameFormat (int dbevindex, int fnames, bool soname);
+int dbeGetViewMode (int dbevindex);
+void dbeSetViewMode (int dbevindex, int nmode);
+Vector<void*> *dbeGetTLValue (int dbevindex);
+void dbeSetTLValue (int dbevindex, const char *tldata_cmd,
+ int entitiy_prop_id, int stackalign, int stackdepth);
+Vector<void*> *dbeGetExpFounderDescendants ();
+Vector<void*> *dbeGetExpSelection (int dbevindex);
+Vector<void*> *dbeGetSampleStatus (int dbevindex, int nselected,
+ Vector<bool> *selected);
+Vector<unsigned> *dbeGetSampleSize (int dbevindex, Vector<bool> *selected);
+char *dbeCheckPattern (int dbevindex, Vector<bool> *selected, char *pattern,
+ int type);
+char *dbeSetFilterStr (int dbevindex, char *filter_str);
+char *dbeGetFilterStr (int dbevindex);
+int dbeValidateFilterExpression (char *str_expr);
+Vector<void*> *dbeGetFilterKeywords (int dbevindex);
+Vector<void*> *dbeGetFilters (int dbevindex, int nexp);
+bool dbeUpdateFilters (int dbevindex, Vector<bool> *selected,
+ Vector<char*> *pattern_str);
+char *dbeComposeFilterClause (int dbevindex, int type, int subtype,
+ Vector<int>*selections);
+Vector<int> *dbeGetLoadObjectState (int dbevindex);
+void dbeSetLoadObjectState (int dbevindex, Vector<int> *selected);
+void dbeSetLoadObjectDefaults (int dbevindex);
+Vector<void*> *dbeGetMemObjects (int dbevindex);
+char *dbeDefineMemObj (char *name, char *index_expr, char *_machmodel,
+ char *sdesc, char *ldesc);
+char *dbeDeleteMemObj (char *name);
+Vector<char*> *dbeGetCPUVerMachineModel (int dbevindex);
+char *dbeLoadMachineModel (char *name);
+char *dbeGetMachineModel ();
+Vector<char*> *dbeListMachineModels ();
+void dbeDetectLoadMachineModel (int dbevindex);
+Vector<void*> *dbeGetIndxObjDescriptions (int dbevindex);
+Vector<void*> *dbeGetCustomIndxObjects (int dbevindex);
+char *dbeDefineIndxObj (char *name, char *index_expr, char *sdesc, char *ldesc);
+void dbeSetSelObj (int dbevindex, Obj sel_obj, int type, int subtype);
+void dbeSetSelObjV2 (int dbevindex, uint64_t id);
+Obj dbeGetSelObj (int dbevindex, int type, int subtype);
+uint64_t dbeGetSelObjV2 (int dbevindex, char *typeStr);
+int dbeGetSelIndex (int dbevindex, Obj sel_obj, int type, int subtype);
+Vector<uint64_t> *dbeGetSelObjsIO (int dbevindex, Vector<uint64_t> *ids, int type);
+Vector<uint64_t> *dbeGetSelObjIO (int dbevindex, uint64_t id, int type);
+uint64_t dbeGetSelObjHeapTimestamp (int dbevindex, uint64_t id);
+int dbeGetSelObjHeapUserExpId (int dbevindex, uint64_t id);
+char *dbeSetPrintLimit (int dbevindex, int limit);
+int dbeGetPrintLimit (int dbevindex);
+char *dbeSetPrintMode (int dbevindex, char *printmode);
+int dbeGetPrintMode (int dbevindex);
+char *dbeGetPrintModeString (int dbevindex);
+char dbeGetPrintDelim (int dbevindex);
+Vector<void*> *dbeGetTotals (int dbevindex, int dsptype, int subtype);
+Vector<void*> *dbeGetHotMarks (int dbevindex, int type);
+Vector<void*> *dbeGetHotMarksInc (int dbevindex, int type);
+Vector<void*> *dbeGetSummaryHotMarks (int dbevindex, Vector<Obj> *sel_objs, int type);
+Vector<uint64_t> *dbeGetFuncId (int dbevindex, int type, int begin, int length);
+Vector<void*> *dbeGetFuncCalleeInfo (int dbevindex, int type, Vector<int>* idxs, int groupId);
+Vector<void*> *dbeGetFuncCallerInfo (int dbevindex, int type, Vector<int>* idxs, int groupId);
+Vector<void*> *dbeGetFuncCalleeInfoById (int dbevindex, int type, int idx);
+Vector<void*> *dbeGetFuncCallerInfoById (int dbevindex, int type, int idx);
+char *dbePrintData (int dbevindex, int type, int subtype, char *printer,
+ char *fname, FILE *outfile);
+int dbeSetFuncData (int dbevindex, Obj sel_obj, int type, int subtype);
+Vector<void*> *dbeGetFuncList (int dbevindex, int type, int subtype);
+Vector<void*> *dbeGetFuncListV2 (int dbevindex, int mtype, Obj sel_obj, int type, int subtype);
+Vector<void*> *dbeGetFuncListMini (int dbevindex, int type, int subtype);
+Vector<Obj> *dbeGetComparableObjsV2 (int dbevindex, Obj sel_obj, int type);
+Obj dbeConvertSelObj (Obj obj, int type);
+Vector<int> *dbeGetGroupIds (int dbevindex);
+Vector<void*> *dbeGetTableDataV2 (int dbevindex, char *mlistStr, char *modeStr,
+ char *typeStr, char *subtypeStr, Vector<uint64_t> *ids);
+
+int dbeGetCallTreeNumLevels (int dbevindex);
+Vector<void*> *dbeGetCallTreeLevel (int dbevindex, char *mcmd, int level);
+Vector<void*> *dbeGetCallTreeLevels (int dbevindex, char *mcmd);
+Vector<void*> *dbeGetCallTreeChildren (int dbevindex, char *mcmd, Vector<int /*NodeIdx*/>*nodes);
+Vector<void*> *dbeGetCallTreeLevelFuncs (int dbevindex, int level_start, int level_end);
+Vector<void*> *dbeGetCallTreeFuncs (int dbevindex);
+Vector<char*> *dbeGetNames (int dbevindex, int type, Obj sel_obj);
+Vector<void*> *dbeGetTotalMax (int dbevindex, int type, int subtype);
+Vector<void*> *dbeGetStatisOverviewList (int dbevindex);
+Vector<void*> *dbeGetStatisList (int dbevindex);
+Vector<void*> *dbeGetSummary (int dbevindex, Vector<Obj> *objs, int type, int subtype);
+Vector<void*> *dbeGetSummaryV2 (int dbevindex, Vector<Obj> *objs, int type, int subtype);
+Vector<int> *dbeGetFounderExpId (Vector<int> *expIds);
+Vector<int> *dbeGetUserExpId (Vector<int> *expIds); // filter "user visible" experiment id
+Vector<int> *dbeGetExpGroupId (Vector<int> *expIds);
+char *dbeGetExpName (int dbevindex, char *dir_name);
+Vector<char*> *dbeGetHwcHelp (int dbevindex, bool forKernel);
+Vector<Vector<char*>*> *dbeGetHwcSets (int dbevindex, bool forKernel);
+Vector<void*> *dbeGetHwcsAll (int dbevindex, bool forKernel);
+Vector<char*> *dbeGetHwcAttrList (int dbevindex, bool forKernel);
+int dbeGetHwcMaxConcurrent (int dbevindex, bool forKernel);
+int dbeGetHwcMaxReg (int dbevindex); // TBR?
+
+Vector<char*> *dbeGetIfreqData (int dbevindex);
+Vector<void*> *dbeGetLeakListInfo (int dbevindex, bool leakflag);
+Vector<void*> *dbeMpviewGetTlFuncReps (int dbevindex, int exp_id,
+ long long binSizeTime, long long startTime, long long endTime,
+ long long binSizeRank, long long startRank, long long endRank);
+Vector<void*> *dbeMpviewGetTlMsgReps (int dbevindex, int exp_id, int throttle,
+ long long binSizeTime, long long startTime, long long endTime,
+ long long binSizeRank, long long startRank, long long endRank);
+Vector<long long> *dbeMpviewGetAxisRange (int dbevindex, int exp_id,
+ int chart_type, int axis_type);
+Vector<char*> *dbeMpviewGetAxisDiscreteLabels (int dbevindex, int exp_id,
+ int chart_type, int axis_type);
+Vector<void*> *dbeMpviewGetFuncDetails (int dbevindex, int exp_id, Obj funcId);
+Vector<void*> *dbeMpviewGetMesgDetails (int dbevindex, int exp_id, Obj mesgId);
+Vector<long long> *dbeMpviewGetChartData (int dbevindex, int exp_id, int ctype,
+ int attr1, long long start1,
+ long long end1, int nbins1,
+ int attr2, long long start2,
+ long long end2, int nbins2,
+ int metric, int reduction);
+void dbeMpviewFilterSet (int dbevindex, int exp_id, Vector<int> *ctid,
+ Vector<int > *axid, Vector<long long> *startVal,
+ Vector<long long> *endVal);
+void dbeMpviewLoadStacks (int dbevindex, int exp_id);
+
+
+Obj dbeGetObject (int dbevindex, Obj sel_func, Obj sel_pc);
+char *dbeGetName (int dbevindex, int exp_id);
+Vector<char*> *dbeGetExpVerboseName (Vector<int> *exp_ids);
+long long dbeGetStartTime (int dbevindex, int exp_id);
+long long dbeGetRelativeStartTime (int dbevindex, int exp_id);
+long long dbeGetEndTime (int dbevindex, int exp_id);
+int dbeGetClock (int dbevindex, int exp_id);
+long long dbeGetWallStartSec (int dbevindex, int exp_id);
+char *dbeGetHostname (int dbevindex, int exp_id);
+Vector<void*> *dbeGetEntityProps (int dbevindex);
+Vector<void*> *dbeGetEntities (int dbevindex, int exp_id, int ekind);
+Vector<void*> *dbeGetEntitiesV2 (int dbevindex, Vector<int> *exp_ids, int ekind);
+Vector<void*> *dbeGetTLDetails (int dbevindex, int exp_id, int data_id,
+ int entity_prop_id, Obj event_id);
+Vector<Obj> *dbeGetStackFunctions (int dbevindex, Obj stack);
+Vector<void*> *dbeGetStacksFunctions (int dbevindex, Vector<Obj> *stacks);
+Vector<Obj> *dbeGetStackPCs (int dbevindex, Obj stack);
+Vector<char*> *dbeGetStackNames (int dbevindex, Obj stack);
+Vector<void*> *dbeGetSamples (int dbevindex, int exp_id, int64_t lo, int64_t hi);
+Vector<void*> *dbeGetGCEvents (int dbevindex, int exp_id, int64_t lo, int64_t hi);
+Vector<Vector<char*>*>* dbeGetIOStatistics (int dbevindex);
+Vector<Vector<char*>*>* dbeGetHeapStatistics (int dbevindex);
+Vector<char*> *dbeGetFuncNames (int dbevindex, Vector<Obj> *funcs);
+Vector<char*> *dbeGetObjNamesV2 (int dbevindex, Vector<uint64_t> *ids);
+char *dbeGetFuncName (int dbevindex, Obj func);
+char *dbeGetObjNameV2 (int dbevindex, uint64_t id);
+Vector<uint64_t> *dbeGetFuncIds (int dbevindex, Vector<Obj> *funcs);
+uint64_t dbeGetFuncId (int dbevindex, Obj func);
+char *dbeGetDataspaceTypeDesc (int dbevindex, Obj stack);
+Vector<void*> *dbeGetDataDescriptorsV2 (int exp_id);
+Vector<void*> *dbeGetDataPropertiesV2 (int exp_id, int data_id);
+Vector<void*> *dbeGetExperimentTimeInfo (Vector<int> *exp_ids);
+Vector<void*> *dbeGetExperimentDataDescriptors (Vector<int> *exp_ids);
+
+/* New Timeline Interface */
+Vector<long long> *dbeGetAggregatedValue (int data_id, char *lfilter, char *fexpr,
+ char *pname_ts, hrtime_t start_ts,
+ hrtime_t delta, int num,
+ char *pname_key, char *aggr_func);
+Vector<char*> *dbeGetLineInfo (Obj pc);
+int dbeSetAlias (char *name, char *uname, char *expr);
+Vector<char*> *dbeGetAlias (char *name);
+Vector<Vector<long long>*> *dbeGetXYPlotData (int data_id, char *lfilter,
+ char *arg, char *func1, char *aggr1,
+ char *func2, char *aggr2,
+ char *func3, char *aggr3);
+Vector<bool> *dbeHasTLData (int dbev_index, Vector<int> *exp_ids,
+ Vector<int> *data_ids, // DATA_*
+ Vector<int> *entity_prop_ids, // LWP,CPU,THR, etc
+ Vector<int> *entity_prop_values,
+ Vector<int> *auxs);
+Vector<void*> *dbeGetTLData (int dbevindex, int exp_id, int data_id,
+ int entity_prop_id, int entity_prop_val, int aux,
+ hrtime_t start_ts, hrtime_t delta, int num,
+ bool getRepresentatives, Vector<char*> *chartProperties);
+Vector<long long> *dbeGetTLEventCenterTime (int dbevindex, int exp_id,
+ int data_id, int entity_prop_id,
+ int entity_prop_val, int aux,
+ long long event_idx, long long move_count);
+long long dbeGetTLEventIdxNearTime (int dbevindex, int exp_id,
+ int data_id,
+ int entity_prop_id, int entity_prop_val, int aux,
+ int searchDirection,
+ long long timestamp);
+
+/* Interface for use by Collector GUI */
+int dbeGetSignalValue (char *);
+char *dbeSendSignal (pid_t, int);
+char *dbeGetCollectorControlValue (char *);
+char *dbeSetCollectorControlValue (char *, char *);
+char *dbeUnsetCollectorControlValue (char *);
+char *dbeCheckConnection (char *);
+void dbe_archive (Vector<long long> *ids, Vector<const char *> *locations);
+void dbeSetLocation (const char *fname, const char *location);
+void dbeSetLocations (Vector<const char *> *fnames, Vector<const char *> *locations);
+Vector<void*> *dbeResolvedWith_setpath (const char *path);
+Vector<void*> *dbeResolvedWith_pathmap (const char *old_prefix, const char *new_prefix);
+
+#endif /* _DBE_H_ */
diff --git a/gprofng/src/DbeApplication.cc b/gprofng/src/DbeApplication.cc
new file mode 100644
index 00000000000..382bd45f433
--- /dev/null
+++ b/gprofng/src/DbeApplication.cc
@@ -0,0 +1,113 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <strings.h>
+
+#include "DbeSession.h"
+#include "DbeApplication.h"
+#include "LoadObject.h"
+#include "Experiment.h"
+#include "PreviewExp.h"
+#include "Function.h"
+#include "Hist_data.h"
+#include "Module.h"
+#include "DataObject.h"
+#include "Sample.h"
+#include "CallStack.h"
+#include "Print.h"
+#include "util.h"
+#include "libgen.h"
+#include "i18n.h"
+
+DbeApplication *theDbeApplication;
+
+DbeApplication::DbeApplication (int argc, char *argv[], char* _run_dir)
+: Application (argc, argv, _run_dir)
+{
+ theDbeApplication = this;
+ ipcMode = false;
+ rdtMode = false;
+ if (argc > 1)
+ if (strcmp (argv[1], NTXT ("-IPC")) == 0
+ || strcmp (argv[1], NTXT ("-DIPC")) == 0)
+ ipcMode = true;
+ lic_found = 0;
+ lic_err = NULL;
+
+ // Instantiate a session
+ (void) new DbeSession (settings, ipcMode, rdtMode);
+}
+
+DbeApplication::~DbeApplication ()
+{
+ delete dbeSession;
+ theDbeApplication = NULL;
+}
+
+Vector<char*> *
+DbeApplication::initApplication (char *fdhome, char *licpath, ProgressFunc func)
+{
+ // set the home directory
+ if (fdhome != NULL)
+ set_run_dir (fdhome);
+
+ // Set progress function
+ set_progress_func (func);
+
+ // Get license
+ char *license_err = NULL;
+ char *sts;
+ if (licpath != NULL)
+ {
+ lic_found = 0;
+ if (lic_found == 0)
+ {
+ lic_err = dbe_strdup (DbeApplication::get_version ());
+ sts = dbe_strdup (GTXT ("OK"));
+ }
+ else if (lic_found == 2)
+ {
+ lic_err = dbe_strdup (license_err);
+ sts = dbe_strdup (GTXT ("WARN"));
+ }
+ else if (lic_found == 3)
+ {
+ lic_err = dbe_strdup (license_err);
+ sts = dbe_strdup (GTXT ("FATAL"));
+ }
+ else
+ {
+ lic_err = dbe_strdup (license_err);
+ sts = dbe_strdup (GTXT ("ERROR"));
+ }
+ }
+ else
+ {
+ lic_err = dbe_strdup (DbeApplication::get_version ());
+ sts = dbe_strdup (GTXT ("OK"));
+ }
+ Vector<char*> *data = new Vector<char*>(2);
+ data->store (0, sts);
+ data->store (1, lic_err);
+ return data;
+}
diff --git a/gprofng/src/DbeApplication.h b/gprofng/src/DbeApplication.h
new file mode 100644
index 00000000000..b6bdaaf28ff
--- /dev/null
+++ b/gprofng/src/DbeApplication.h
@@ -0,0 +1,50 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+/*
+ * The DbeApplication class is the base class for all C++ executables
+ * that read Experiments
+ *
+ * It is derived from the Application class, and differs from it
+ * only in that it instantiates a DbeSession (q.v.) to manage
+ * the reading and processing of Experiments
+ */
+
+#ifndef _DBEAPPLICATION_H
+#define _DBEAPPLICATION_H
+
+#include "Application.h"
+
+template <class ITEM> class Vector;
+
+class DbeApplication : public Application
+{
+public:
+ DbeApplication (int argc, char *argv[], char *_run_dir = NULL);
+ ~DbeApplication ();
+ Vector<char*> *initApplication (char *fdhome, char *licpath, ProgressFunc func);
+
+ bool rdtMode;
+ bool ipcMode;
+};
+
+extern DbeApplication *theDbeApplication;
+
+#endif /* _DBEAPPLICATION_H */
diff --git a/gprofng/src/DbeArray.h b/gprofng/src/DbeArray.h
new file mode 100644
index 00000000000..af7c36ed627
--- /dev/null
+++ b/gprofng/src/DbeArray.h
@@ -0,0 +1,99 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _DbeArray_H
+#define _DbeArray_H
+
+template <typename ITEM> class DbeArray
+{
+public:
+
+ DbeArray (long sz)
+ {
+ count = 0;
+ limit = sz;
+ data = new ITEM[limit];
+ };
+
+ virtual
+ ~DbeArray ()
+ {
+ delete[] data;
+ }
+
+ int
+ append (const ITEM &item)
+ {
+ int n = allocate (1);
+ ITEM *p = get (n);
+ *p = item;
+ return n;
+ };
+
+ ITEM *
+ get (long index)
+ {
+ return (index < count && index >= 0) ? data + index : (ITEM *) NULL;
+ };
+
+ int
+ allocate (int cnt)
+ {
+ count += cnt;
+ resize (count);
+ return count - cnt;
+ };
+
+ int
+ size ()
+ {
+ return (int) count;
+ };
+
+ void
+ reset ()
+ {
+ count = 0;
+ };
+
+private:
+
+ void
+ resize (long cnt)
+ {
+ if (limit <= cnt)
+ {
+ limit *= 2;
+ if (limit < cnt)
+ limit = cnt + 1;
+ ITEM *d = new ITEM[limit];
+ if (count > 0)
+ memcpy (d, data, sizeof (ITEM) * count);
+ delete[] data;
+ data = d;
+ }
+ };
+
+ ITEM *data; // Pointer to data vector
+ long count; // Number of items
+ long limit; // Array length
+};
+
+#endif /* _DbeArray_H */
diff --git a/gprofng/src/DbeCacheMap.h b/gprofng/src/DbeCacheMap.h
new file mode 100644
index 00000000000..4c51a34740a
--- /dev/null
+++ b/gprofng/src/DbeCacheMap.h
@@ -0,0 +1,109 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+/*
+ * Dbe Cache Map implementation.
+ *
+ * Simple Cache Map makes the following assumptions:
+ * - Cache Map is used for very fast but not guaranteed mapping;
+ * - No Relations can be used;
+ * - all objects used as keys or values has to be managed
+ * outside CacheMap (f.e. deletion);
+ */
+
+#ifndef _DbeCacheMap_h
+#define _DbeCacheMap_h
+
+#include <Map.h>
+
+template <typename Key_t, class ITEM>
+class DbeCacheMap : public Map<Key_t, ITEM *>
+{
+public:
+
+ DbeCacheMap (int _size = DefaultSize)
+ { // _size should be 2 ** N
+ size = _size;
+ table = new DbeCache_T[size];
+ memset (table, 0, size * sizeof (DbeCache_T));
+ };
+
+ ~DbeCacheMap ()
+ {
+ delete[] table;
+ };
+
+ void
+ put (Key_t key, ITEM *val)
+ {
+ int ind = get_hash (key);
+ table[ind].key = key;
+ table[ind].value = val;
+ };
+
+ ITEM *
+ get (Key_t key)
+ {
+ int ind = get_hash (key);
+ if (table[ind].key == key)
+ return table[ind].value;
+ return (ITEM *) NULL;
+ };
+
+ ITEM *
+ remove (Key_t key)
+ {
+ int ind = get_hash (key);
+ ITEM *v = table[ind].value;
+ table[ind].value = (ITEM *) NULL;
+ return v;
+ };
+
+ ITEM *
+ get (Key_t /* key */, typename Map<Key_t, ITEM *>::Relation /* rel */)
+ {
+ return (ITEM *) NULL;
+ };
+
+private:
+
+ enum
+ {
+ DefaultSize = (1 << 13)
+ };
+
+ typedef struct DbeCache_S
+ {
+ Key_t key;
+ ITEM *value;
+ } DbeCache_T;
+ DbeCache_T *table;
+ int size;
+
+ int
+ get_hash (Key_t key)
+ {
+ unsigned long long h = (unsigned long long) key;
+ h ^= (h >> 20) ^ (h >> 12);
+ return (h ^ (h >> 7) ^ (h >> 4)) & (size - 1);
+ }
+};
+
+#endif
diff --git a/gprofng/src/DbeFile.cc b/gprofng/src/DbeFile.cc
new file mode 100644
index 00000000000..9e1fe1c2017
--- /dev/null
+++ b/gprofng/src/DbeFile.cc
@@ -0,0 +1,541 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include "util.h"
+#include "DbeSession.h"
+#include "Experiment.h"
+#include "DbeFile.h"
+#include "ExpGroup.h"
+#include "DbeJarFile.h"
+
+DbeFile::DbeFile (const char *filename)
+{
+ filetype = 0;
+ name = dbe_strdup (filename);
+ name = canonical_path (name);
+ orig_location = NULL;
+ location = NULL;
+ location_info = NULL;
+ jarFile = NULL;
+ container = NULL;
+ need_refind = true;
+ inArchive = false;
+ sbuf.st_atim.tv_sec = 0;
+ experiment = NULL;
+}
+
+DbeFile::~DbeFile ()
+{
+ free (name);
+ free (location);
+ free (orig_location);
+ free (location_info);
+}
+
+void
+DbeFile::set_need_refind (bool val)
+{
+ if (val != need_refind)
+ {
+ free (location_info);
+ location_info = NULL;
+ need_refind = val;
+ }
+}
+
+void
+DbeFile::set_location (const char *filename)
+{
+ free (location);
+ location = NULL;
+ if (filename)
+ {
+ if (strncmp (filename, NTXT ("./"), 2) == 0)
+ filename += 2;
+ location = canonical_path (dbe_strdup (filename));
+ }
+ free (location_info);
+ location_info = NULL;
+ set_need_refind (false);
+}
+
+char *
+DbeFile::get_location_info ()
+{
+ if (location_info == NULL)
+ {
+ char *fnm = get_name ();
+ char *loc = get_location ();
+ Dprintf (DEBUG_DBE_FILE, NTXT ("DbeFile::get_location_info: %s %s\n"),
+ STR (fnm), STR (loc));
+ if (loc == NULL)
+ {
+ if (filetype & F_FICTION)
+ location_info = dbe_strdup (fnm);
+ else
+ location_info = dbe_sprintf (GTXT ("%s (not found)"),
+ get_relative_path (fnm));
+ }
+ else
+ {
+ char *r_fnm = get_relative_path (fnm);
+ char *r_loc = get_relative_path (loc);
+ if (strcmp (r_fnm, r_loc) == 0)
+ location_info = dbe_strdup (r_fnm);
+ else
+ {
+ char *bname = get_basename (r_fnm);
+ if (strcmp (bname, r_loc) == 0) // found in current directory
+ location_info = dbe_strdup (bname);
+ else
+ location_info = dbe_sprintf (GTXT ("%s (found as %s)"), bname, r_loc);
+ }
+ }
+ }
+ return location_info;
+}
+
+char *
+DbeFile::getResolvedPath ()
+{
+ if (get_location ())
+ return location;
+ return name;
+}
+
+DbeFile *
+DbeFile::getJarDbeFile (char *fnm, int sym)
+{
+ Dprintf (DEBUG_DBE_FILE, NTXT ("DbeFile::getJarDbeFile: %s fnm='%s' sym=%d\n"),
+ STR (name), STR (fnm), sym);
+ DbeFile *df = NULL;
+ if (sym)
+ {
+ char *s = strchr (fnm, sym);
+ if (s)
+ {
+ s = dbe_strndup (fnm, s - fnm);
+ df = dbeSession->getDbeFile (s, F_JAR_FILE | F_FILE);
+ free (s);
+ }
+ }
+ if (df == NULL)
+ df = dbeSession->getDbeFile (fnm, F_JAR_FILE | F_FILE);
+ if (df && (df->experiment == NULL))
+ df->experiment = experiment;
+ return df;
+}
+
+char *
+DbeFile::get_location (bool find_needed)
+{
+ Dprintf (DEBUG_DBE_FILE, NTXT ("get_location 0x%x %s\n"), filetype, STR (name));
+ if (!find_needed)
+ return need_refind ? NULL : location;
+ if (location || !need_refind)
+ return location;
+ set_need_refind (false);
+ if ((filetype & F_FICTION) != 0)
+ return NULL;
+ if (filetype == F_DIR_OR_JAR)
+ {
+ find_in_archives (name);
+ if (location)
+ {
+ filetype |= F_JAR_FILE | F_FILE;
+ return location;
+ }
+ find_in_pathmap (name);
+ if (location)
+ return location;
+ if (check_access (name) == F_DIRECTORY)
+ {
+ filetype |= F_DIRECTORY;
+ set_location (name);
+ return location;
+ }
+ }
+
+ if ((filetype & F_FILE) != 0)
+ {
+ if (experiment)
+ {
+ char *fnm = experiment->checkFileInArchive (name, false);
+ if (fnm)
+ {
+ set_location (fnm);
+ inArchive = true;
+ sbuf.st_mtime = 0; // Don't check timestamps
+ free (fnm);
+ return location;
+ }
+ if ((filetype & F_JAVACLASS) != 0)
+ {
+ if (orig_location)
+ {
+ Dprintf (DEBUG_DBE_FILE, NTXT ("DbeFile::get_location:%d name='%s' orig_location='%s'\n"),
+ (int) __LINE__, name, orig_location);
+ // Parse a fileName attribute. There are 4 possibilities:
+ // file:<Class_Name>
+ // file:<name_of_jar_or_zip_file>
+ // jar:file:<name_of_jar_or_zip_file>!<Class_Name>
+ // zip:<name_of_jar_or_zip_file>!<Class_Name>
+ DbeFile *jar_df = NULL;
+ if (strncmp (orig_location, NTXT ("zip:"), 4) == 0)
+ jar_df = getJarDbeFile (orig_location + 4, '!');
+ else if (strncmp (orig_location, NTXT ("jar:file:"), 9) == 0)
+ jar_df = getJarDbeFile (orig_location + 9, '!');
+ else if (strncmp (orig_location, NTXT ("file:"), 5) == 0
+ && isJarOrZip (orig_location + 5))
+ jar_df = getJarDbeFile (orig_location + 5, 0);
+ if (jar_df)
+ {
+ if (find_in_jar_file (name, jar_df->get_jar_file ()))
+ {
+ Dprintf (DEBUG_DBE_FILE, NTXT ("DbeFile::get_location:%d FOUND name='%s' location='%s' jar='%s'\n"),
+ (int) __LINE__, name, STR (location), STR (jar_df->get_location ()));
+ inArchive = jar_df->inArchive;
+ container = jar_df;
+ return location;
+ }
+ }
+ if (strncmp (orig_location, NTXT ("file:"), 5) == 0
+ && !isJarOrZip (orig_location + 5))
+ {
+ DbeFile *df = new DbeFile (orig_location + 5);
+ df->filetype = DbeFile::F_FILE;
+ df->experiment = experiment;
+ fnm = df->get_location ();
+ if (fnm)
+ {
+ set_location (fnm);
+ inArchive = df->inArchive;
+ sbuf.st_mtime = df->sbuf.st_mtime;
+ Dprintf (DEBUG_DBE_FILE, NTXT ("DbeFile::get_location:%d FOUND name='%s' orig_location='%s' location='%s'\n"),
+ (int) __LINE__, name, orig_location, fnm);
+ delete df;
+ return location;
+ }
+ delete df;
+ }
+ }
+ fnm = dbe_sprintf (NTXT ("%s/%s/%s"), experiment->get_expt_name (), SP_DYNAMIC_CLASSES, name);
+ if (find_file (fnm))
+ {
+ inArchive = true;
+ sbuf.st_mtime = 0; // Don't check timestamps
+ Dprintf (DEBUG_DBE_FILE, NTXT ("DbeFile::get_location:%d FOUND name='%s' location='%s'\n"),
+ (int) __LINE__, name, fnm);
+ free (fnm);
+ return location;
+ }
+ free (fnm);
+ }
+ }
+ }
+
+ if (dbeSession->archive_mode)
+ {
+ find_file (name);
+ if (location)
+ return location;
+ }
+
+ bool inPathMap = find_in_pathmap (name);
+ if (location)
+ return location;
+ find_in_setpath (name, dbeSession->get_search_path ());
+ if (location)
+ return location;
+ if ((filetype & (F_JAVACLASS | F_JAVA_SOURCE)) != 0)
+ {
+ find_in_classpath (name, dbeSession->get_classpath ());
+ if (location)
+ return location;
+ }
+ if (!inPathMap)
+ find_file (name);
+ Dprintf (DEBUG_DBE_FILE && (location == NULL),
+ "DbeFile::get_location:%d NOT FOUND name='%s'\n", __LINE__, name);
+ return location;
+}
+
+int
+DbeFile::check_access (const char *filename)
+{
+ if (filename == NULL)
+ return F_NOT_FOUND;
+ int st = dbe_stat (filename, &sbuf);
+ Dprintf (DEBUG_DBE_FILE, NTXT ("check_access: %d 0x%x %s\n"), st, filetype, filename);
+ if (st == 0)
+ {
+ if (S_ISDIR (sbuf.st_mode))
+ return F_DIRECTORY;
+ else if (S_ISREG (sbuf.st_mode))
+ return F_FILE;
+ return F_UNKNOWN; // Symbolic link or unknown type of file
+ }
+ sbuf.st_atim.tv_sec = 0;
+ sbuf.st_mtime = 0; // Don't check timestamps
+ return F_NOT_FOUND; // File not found
+}
+
+bool
+DbeFile::isJarOrZip (const char *fnm)
+{
+ size_t len = strlen (fnm) - 4;
+ return len > 0 && (strcmp (fnm + len, NTXT (".jar")) == 0
+ || strcmp (fnm + len, NTXT (".zip")) == 0);
+}
+
+char *
+DbeFile::find_file (const char *filename)
+{
+ switch (check_access (filename))
+ {
+ case F_DIRECTORY:
+ if (filetype == F_DIR_OR_JAR)
+ filetype |= F_DIRECTORY;
+ if ((filetype & F_DIRECTORY) != 0)
+ set_location (filename);
+ break;
+ case F_FILE:
+ if (filetype == F_DIR_OR_JAR)
+ {
+ filetype |= F_FILE;
+ if (isJarOrZip (filename))
+ filetype |= F_JAR_FILE;
+ }
+ if ((filetype & F_DIRECTORY) == 0)
+ set_location (filename);
+ break;
+ }
+ return location;
+}
+
+DbeJarFile *
+DbeFile::get_jar_file ()
+{
+ if (jarFile == NULL)
+ {
+ char *fnm = get_location ();
+ if (fnm)
+ jarFile = dbeSession->get_JarFile (fnm);
+ }
+ return jarFile;
+}
+
+char *
+DbeFile::find_package_name (const char *filename, const char *dirname)
+{
+ char *nm = dbe_sprintf (NTXT ("%s/%s"), dirname, filename);
+ if (!find_in_pathmap (nm))
+ find_file (nm);
+ free (nm);
+ return location;
+}
+
+char *
+DbeFile::find_in_directory (const char *filename, const char *dirname)
+{
+ if (filename && dirname)
+ {
+ char *nm = dbe_sprintf (NTXT ("%s/%s"), dirname, filename);
+ find_file (nm);
+ free (nm);
+ }
+ return location;
+}
+
+char *
+DbeFile::find_in_jar_file (const char *filename, DbeJarFile *jfile)
+{
+ // Read .jar or .zip
+ if (jfile == NULL)
+ return NULL;
+ int entry = jfile->get_entry (filename);
+ if (entry >= 0)
+ {
+ char *fnm = dbeSession->get_tmp_file_name (filename, true);
+ long long fsize = jfile->copy (fnm, entry);
+ if (fsize >= 0)
+ {
+ dbeSession->tmp_files->append (fnm);
+ set_location (fnm);
+ sbuf.st_size = fsize;
+ sbuf.st_mtime = 0; // Don't check timestamps
+ fnm = NULL;
+ }
+ free (fnm);
+ }
+ return location;
+}
+
+bool
+DbeFile::find_in_pathmap (char *filename)
+{
+ Vector<pathmap_t*> *pathmaps = dbeSession->get_pathmaps ();
+ bool inPathMap = false;
+ if (strncmp (filename, NTXT ("./"), 2) == 0)
+ filename += 2;
+ for (int i = 0, sz = pathmaps ? pathmaps->size () : 0; i < sz; i++)
+ {
+ pathmap_t *pmp = pathmaps->fetch (i);
+ size_t len = strlen (pmp->old_prefix);
+ if (strncmp (pmp->old_prefix, filename, len) == 0
+ && (filename[len] == '/' || filename[len] == '\0'))
+ {
+ inPathMap = true;
+ if (find_in_directory (filename + len, pmp->new_prefix))
+ {
+ return inPathMap;
+ }
+ }
+ }
+ return inPathMap;
+}
+
+void
+DbeFile::find_in_archives (char *filename)
+{
+ for (int i1 = 0, sz1 = dbeSession->expGroups->size (); i1 < sz1; i1++)
+ {
+ ExpGroup *gr = dbeSession->expGroups->fetch (i1);
+ if (gr->founder)
+ {
+ char *nm = gr->founder->checkFileInArchive (filename, false);
+ if (nm)
+ {
+ find_file (nm);
+ if (location)
+ {
+ sbuf.st_mtime = 0; // Don't check timestamps
+ return;
+ }
+ }
+ }
+ }
+}
+
+void
+DbeFile::find_in_setpath (char *filename, Vector<char*> *searchPath)
+{
+ char *base = get_basename (filename);
+ for (int i = 0, sz = searchPath ? searchPath->size () : 0; i < sz; i++)
+ {
+ char *spath = searchPath->fetch (i);
+ // Check file in each experiment directory
+ if (streq (spath, "$") || streq (spath, NTXT ("$expts")))
+ {
+ // find only in founders and only LoadObj.
+ for (int i1 = 0, sz1 = dbeSession->expGroups->size (); i1 < sz1; i1++)
+ {
+ ExpGroup *gr = dbeSession->expGroups->fetch (i1);
+ char *exp_name = gr->founder->get_expt_name ();
+ if (gr->founder)
+ {
+ if ((filetype & (F_JAVACLASS | F_JAVA_SOURCE)) != 0)
+ {
+ // Find with the package name
+ if (find_in_directory (filename, exp_name))
+ return;
+ }
+ if (find_in_directory (base, exp_name))
+ return;
+ }
+ }
+ continue;
+ }
+ DbeFile *df = dbeSession->getDbeFile (spath, DbeFile::F_DIR_OR_JAR);
+ if (df->get_location () == NULL)
+ continue;
+ if ((filetype & (F_JAVACLASS | F_JAVA_SOURCE)) != 0)
+ {
+ if ((df->filetype & F_JAR_FILE) != 0)
+ {
+ if (find_in_jar_file (filename, df->get_jar_file ()))
+ {
+ container = df;
+ return;
+ }
+ continue;
+ }
+ else if ((df->filetype & F_DIRECTORY) != 0)
+ // Find with the package name
+ if (find_package_name (filename, spath))
+ return;
+ }
+ if ((df->filetype & F_DIRECTORY) != 0)
+ if (find_in_directory (base, df->get_location ()))
+ return;
+ }
+}
+
+void
+DbeFile::find_in_classpath (char *filename, Vector<DbeFile*> *classPath)
+{
+ for (int i = 0, sz = classPath ? classPath->size () : 0; i < sz; i++)
+ {
+ DbeFile *df = classPath->fetch (i);
+ if (df->get_location () == NULL)
+ continue;
+ if ((df->filetype & F_JAR_FILE) != 0)
+ {
+ if (find_in_jar_file (filename, df->get_jar_file ()))
+ {
+ container = df;
+ return;
+ }
+ }
+ else if ((df->filetype & F_DIRECTORY) != 0)
+ // Find with the package name
+ if (find_package_name (filename, df->get_name ()))
+ return;
+ }
+}
+
+struct stat64 *
+DbeFile::get_stat ()
+{
+ if (sbuf.st_atim.tv_sec == 0)
+ {
+ int st = check_access (get_location (false));
+ if (st == F_NOT_FOUND)
+ return NULL;
+ }
+ return &sbuf;
+}
+
+bool
+DbeFile::compare (DbeFile *df)
+{
+ if (df == NULL)
+ return false;
+ struct stat64 *st1 = get_stat ();
+ struct stat64 *st2 = df->get_stat ();
+ if (st1 == NULL || st2 == NULL)
+ return false;
+ if (st1->st_size != st2->st_size)
+ return false;
+ if (st1->st_mtim.tv_sec != st2->st_mtim.tv_sec)
+ return false;
+ return true;
+}
diff --git a/gprofng/src/DbeFile.h b/gprofng/src/DbeFile.h
new file mode 100644
index 00000000000..abd7180dc75
--- /dev/null
+++ b/gprofng/src/DbeFile.h
@@ -0,0 +1,103 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _DBE_FILE_H
+#define _DBE_FILE_H
+
+#include <fcntl.h>
+
+class DbeJarFile;
+class Experiment;
+template <class ITEM> class Vector;
+
+class DbeFile
+{
+public:
+
+ enum
+ {
+ F_NOT_FOUND = 0,
+ F_FICTION = 1,
+ F_LOADOBJ = 2,
+ F_SOURCE = 4,
+ F_JAVACLASS = 8,
+ F_JAVA_SOURCE = 16,
+ F_DOT_O = 32,
+ F_DEBUG_FILE = 64,
+ F_DOT_A_LIB = 128,
+ F_DIR_OR_JAR = 256,
+ F_DIRECTORY = 512,
+ F_FILE = 1024,
+ F_JAR_FILE = 2048,
+ F_UNKNOWN = 65536
+ };
+
+ DbeFile (const char *filename);
+ ~DbeFile ();
+
+ char *
+ get_name ()
+ {
+ return name;
+ };
+
+ bool
+ get_need_refind ()
+ {
+ return need_refind;
+ };
+
+ char *get_location (bool find_needed = true);
+ char *getResolvedPath ();
+ char *get_location_info ();
+ struct stat64 *get_stat ();
+ bool compare (DbeFile *df);
+ void set_need_refind (bool val);
+ void set_location (const char *filename);
+ int check_access (const char *filename);
+ char *find_file (const char *filename);
+ DbeFile *getJarDbeFile (char *fnm, int sym);
+ char *find_in_jar_file (const char *filename, DbeJarFile *jfile);
+ DbeJarFile *get_jar_file ();
+
+ bool inArchive;
+ int filetype;
+ struct stat64 sbuf;
+ DbeFile *container;
+ char *orig_location;
+ Experiment *experiment;
+
+protected:
+ static bool isJarOrZip (const char *fnm);
+ char *find_package_name (const char *filename, const char *dirname);
+ char *find_in_directory (const char *filename, const char *dirname);
+ bool find_in_pathmap (char *filename);
+ void find_in_archives (char *filename);
+ void find_in_setpath (char *filename, Vector<char*> *searchPath);
+ void find_in_classpath (char *filename, Vector<DbeFile*> *classPath);
+
+ char *name;
+ char *location;
+ char *location_info;
+ bool need_refind;
+ DbeJarFile *jarFile;
+};
+
+#endif /* _DBE_FILE_H */
diff --git a/gprofng/src/DbeJarFile.cc b/gprofng/src/DbeJarFile.cc
new file mode 100644
index 00000000000..90295124e1d
--- /dev/null
+++ b/gprofng/src/DbeJarFile.cc
@@ -0,0 +1,505 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <sys/types.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <errno.h>
+
+#include "zlib.h"
+#include "util.h"
+#include "DbeJarFile.h"
+#include "Data_window.h"
+#include "vec.h"
+
+static uint32_t
+get_u1 (unsigned char *b)
+{
+ return (uint32_t) ((b)[0]);
+}
+
+static uint32_t
+get_u2 (unsigned char *b)
+{
+ return (get_u1 (b + 1) << 8) | get_u1 (b);
+}
+
+static uint32_t
+get_u4 (unsigned char *b)
+{
+ return (get_u2 (b + 2) << 16) | get_u2 (b);
+}
+
+static uint64_t
+get_u8 (unsigned char *b)
+{
+ return (((uint64_t) get_u4 (b + 4)) << 32) | get_u4 (b);
+}
+
+enum
+{
+ END_CENT_DIR_SIZE = 22,
+ LOC_FILE_HEADER_SIZE = 30,
+ CENT_FILE_HEADER_SIZE = 46,
+ ZIP64_LOCATOR_SIZE = 20,
+ ZIP64_CENT_DIR_SIZE = 56,
+ ZIP_BUF_SIZE = 65536
+};
+
+struct EndCentDir
+{
+ uint64_t count;
+ uint64_t size;
+ uint64_t offset;
+};
+
+class ZipEntry
+{
+public:
+
+ ZipEntry ()
+ {
+ name = NULL;
+ data_offset = 0;
+ }
+
+ ~ZipEntry ()
+ {
+ free (name);
+ }
+
+ int
+ compare (ZipEntry *ze)
+ {
+ return dbe_strcmp (name, ze->name);
+ }
+
+ char *name; // entry name
+ int time; // modification time
+ int64_t size; // size of uncompressed data
+ int64_t csize; // size of compressed data (zero if uncompressed)
+ uint32_t compressionMethod;
+ int64_t offset; // offset of LOC header
+ int64_t data_offset;
+};
+
+static int
+cmp_names (const void *a, const void *b)
+{
+ ZipEntry *e1 = *((ZipEntry **) a);
+ ZipEntry *e2 = *((ZipEntry **) b);
+ return e1->compare (e2);
+}
+
+template<> void Vector<ZipEntry *>::dump (const char *msg)
+{
+ Dprintf (1, NTXT ("Vector<ZipEntry *> %s [%lld]\n"), msg ? msg : NTXT (""), (long long) size ());
+ for (long i = 0, sz = size (); i < sz; i++)
+ {
+ ZipEntry *ze = get (i);
+ Dprintf (1, NTXT (" %lld offset:%lld (0x%llx) size: %lld --> %lld %s\n"),
+ (long long) i, (long long) ze->offset, (long long) ze->offset,
+ (long long) ze->csize, (long long) ze->size, STR (ze->name));
+ }
+}
+
+DbeJarFile::DbeJarFile (const char *jarName)
+{
+ name = strdup (jarName);
+ fnames = NULL;
+ dwin = new Data_window (name);
+ get_entries ();
+}
+
+DbeJarFile::~DbeJarFile ()
+{
+ free (name);
+ delete fnames;
+}
+
+void
+DbeJarFile::get_entries ()
+{
+ Dprintf (DUMP_JAR_FILE, NTXT ("\nArchive: %s\n"), STR (name));
+ if (dwin->not_opened ())
+ {
+ append_msg (CMSG_ERROR, GTXT ("Cannot open file `%s'"), name);
+ return;
+ }
+ struct EndCentDir endCentDir;
+ if (get_EndCentDir (&endCentDir) == 0)
+ return;
+
+ if (endCentDir.count == 0)
+ {
+ append_msg (CMSG_WARN, GTXT ("No files in %s"), name);
+ return;
+ }
+ unsigned char *b = (unsigned char *) dwin->bind (endCentDir.offset, endCentDir.size);
+ if (b == NULL)
+ {
+ append_msg (CMSG_ERROR, GTXT ("%s: cannot read the central directory record"), name);
+ return;
+ }
+
+ fnames = new Vector<ZipEntry*>(endCentDir.count);
+ for (uint64_t i = 0, offset = endCentDir.offset, last = endCentDir.offset + endCentDir.size; i < endCentDir.count; i++)
+ {
+ if ((last - offset) < CENT_FILE_HEADER_SIZE)
+ {
+ append_msg (CMSG_ERROR, GTXT ("%s: cannot read the central file header (%lld (from %lld), offset=0x%016llx last=0x%016llx"),
+ name, (long long) i, (long long) endCentDir.count, (long long) offset, (long long) last);
+ break;
+ }
+ b = (unsigned char *) dwin->bind (offset, CENT_FILE_HEADER_SIZE);
+ // Central file header
+ // Offset Bytes Description
+ // 0 4 central file header signature = 0x02014b50
+ // 4 2 version made by
+ // 6 2 version needed to extract
+ // 8 2 general purpose bit flag
+ // 10 2 compression method
+ // 12 2 last mod file time
+ // 14 2 last mod file date
+ // 16 4 crc-32
+ // 20 4 compressed size
+ // 24 4 uncompressed size
+ // 28 2 file name length
+ // 30 2 extra field length
+ // 32 2 file comment length
+ // 34 2 disk number start
+ // 36 2 internal file attributes
+ // 38 4 external file attributes
+ // 42 4 relative offset of local header
+ // 46 file name (variable size)
+ // extra field (variable size)
+ // file comment (variable size)
+ uint32_t signature = get_u4 (b);
+ if (signature != 0x02014b50)
+ {
+ append_msg (CMSG_ERROR, GTXT ("%s: wrong header signature (%lld (total %lld), offset=0x%016llx last=0x%016llx"),
+ name, (long long) i, (long long) endCentDir.count, (long long) offset, (long long) last);
+ break;
+ }
+ ZipEntry *ze = new ZipEntry ();
+ fnames->append (ze);
+ uint32_t name_len = get_u2 (b + 28);
+ uint32_t extra_len = get_u2 (b + 30);
+ uint32_t comment_len = get_u2 (b + 32);
+ ze->compressionMethod = get_u2 (b + 10);
+ ze->csize = get_u4 (b + 20);
+ ze->size = get_u4 (b + 24);
+ ze->offset = get_u4 (b + 42);
+ char *nm = (char *) dwin->bind (offset + 46, name_len);
+ if (nm)
+ {
+ ze->name = (char *) malloc (name_len + 1);
+ strncpy (ze->name, nm, name_len);
+ ze->name[name_len] = 0;
+ }
+ offset += CENT_FILE_HEADER_SIZE + name_len + extra_len + comment_len;
+ }
+ fnames->sort (cmp_names);
+ if (DUMP_JAR_FILE)
+ fnames->dump (get_basename (name));
+}
+
+int
+DbeJarFile::get_entry (const char *fname)
+{
+ if (fnames == NULL)
+ return -1;
+ ZipEntry zipEntry, *ze = &zipEntry;
+ ze->name = (char *) fname;
+ int ind = fnames->bisearch (0, -1, &ze, cmp_names);
+ ze->name = NULL;
+ return ind;
+}
+
+long long
+DbeJarFile::copy (char *toFileNname, int fromEntryNum)
+{
+ if (fromEntryNum < 0 || fromEntryNum >= VecSize (fnames))
+ return -1;
+ ZipEntry *ze = fnames->get (fromEntryNum);
+ if (ze->data_offset == 0)
+ {
+ // Local file header
+ // Offset Bytes Description
+ // 0 4 local file header signature = 0x04034b50
+ // 4 2 version needed to extract
+ // 6 2 general purpose bit flag
+ // 8 2 compression method
+ // 10 2 last mod file time
+ // 12 2 last mod file date
+ // 14 4 crc-32
+ // 18 4 compressed size
+ // 22 4 uncompressed size
+ // 26 2 file name length
+ // 28 2 extra field length
+ // 30 2 file name (variable size)
+ // extra field (variable size)
+ unsigned char *b = (unsigned char *) dwin->bind (ze->offset, LOC_FILE_HEADER_SIZE);
+ if (b == NULL)
+ {
+ append_msg (CMSG_ERROR,
+ GTXT ("%s: Cannot read a local file header (%s offset=0x%lld"),
+ name, STR (ze->name), (long long) ze->offset);
+ return -1;
+ }
+ uint32_t signature = get_u4 (b);
+ if (signature != 0x04034b50)
+ {
+ append_msg (CMSG_ERROR,
+ GTXT ("%s: wrong local header signature ('%s' offset=%lld (0x%llx)"),
+ name, STR (ze->name), (long long) ze->offset,
+ (long long) ze->offset);
+ return -1;
+ }
+ ze->data_offset = ze->offset + LOC_FILE_HEADER_SIZE + get_u2 (b + 26) + get_u2 (b + 28);
+ }
+
+ if (ze->compressionMethod == 0)
+ {
+ int fd = open (toFileNname, O_CREAT | O_WRONLY | O_LARGEFILE, 0644);
+ if (fd == -1)
+ {
+ append_msg (CMSG_ERROR, GTXT ("Cannot create file %s (%s)"), toFileNname, STR (strerror (errno)));
+ return -1;
+ }
+ long long len = dwin->copy_to_file (fd, ze->data_offset, ze->size);
+ close (fd);
+ if (len != ze->size)
+ {
+ append_msg (CMSG_ERROR, GTXT ("%s: Cannot write %lld bytes (only %lld)"),
+ toFileNname, (long long) ze->size, (long long) len);
+ unlink (toFileNname);
+ return -1;
+ }
+ return len;
+ }
+
+ unsigned char *b = (unsigned char *) dwin->bind (ze->data_offset, ze->csize);
+ if (b == NULL)
+ {
+ append_msg (CMSG_ERROR,
+ GTXT ("%s: Cannot extract file %s (offset=0x%lld csize=%lld)"),
+ name, STR (ze->name), (long long) ze->offset,
+ (long long) ze->csize);
+ return -1;
+ }
+ z_stream strm;
+ strm.zalloc = Z_NULL;
+ strm.zfree = Z_NULL;
+ strm.opaque = Z_NULL;
+ strm.next_in = Z_NULL;
+ strm.avail_in = 0;
+ if (inflateInit2 (&strm, -MAX_WBITS) != Z_OK)
+ {
+ append_msg (CMSG_ERROR, GTXT ("%s: inflateInit2 failed (%s)"), STR (ze->name), STR (strm.msg));
+ return -1;
+ }
+ strm.avail_in = ze->csize;
+ strm.next_in = b;
+ int retval = ze->size;
+ unsigned char *buf = (unsigned char *) malloc (ze->size);
+ for (;;)
+ {
+ strm.next_out = buf;
+ strm.avail_out = ze->size;
+ int ret = inflate (&strm, Z_SYNC_FLUSH);
+ if ((ret == Z_NEED_DICT) || (ret == Z_DATA_ERROR) || (ret == Z_MEM_ERROR) || (ret == Z_STREAM_ERROR))
+ {
+ append_msg (CMSG_ERROR, GTXT ("%s: inflate('%s') error %d (%s)"), name, STR (ze->name), ret, STR (strm.msg));
+ retval = -1;
+ break;
+ }
+ if (strm.avail_out != 0)
+ break;
+ }
+ inflateEnd (&strm);
+ if (retval != -1)
+ {
+ int fd = open (toFileNname, O_CREAT | O_WRONLY | O_LARGEFILE, 0644);
+ if (fd == -1)
+ {
+ append_msg (CMSG_ERROR, GTXT ("Cannot create file %s (%s)"), toFileNname, STR (strerror (errno)));
+ retval = -1;
+ }
+ else
+ {
+ long long len = write (fd, buf, ze->size);
+ if (len != ze->size)
+ {
+ append_msg (CMSG_ERROR, GTXT ("%s: Cannot write %lld bytes (only %lld)"),
+ toFileNname, (long long) strm.avail_out, (long long) len);
+ retval = -1;
+ }
+ close (fd);
+ }
+ }
+ free (buf);
+ return retval;
+}
+
+int
+DbeJarFile::get_EndCentDir (struct EndCentDir *endCentDir)
+{
+ int64_t fsize = dwin->get_fsize ();
+ int64_t sz = (fsize < ZIP_BUF_SIZE) ? fsize : ZIP_BUF_SIZE;
+
+ // Find the end of central directory record:
+ unsigned char *b = (unsigned char *) dwin->bind (fsize - sz, sz);
+ if (b == NULL)
+ {
+ append_msg (CMSG_ERROR, GTXT ("%s: cannot find the central directory record (fsize=%lld)"),
+ name, (long long) fsize);
+ return 0;
+ }
+
+ // End of central directory record:
+ // Offset Bytes Description
+ // 0 4 end of central directory signature = 0x06054b50
+ // 4 2 number of this disk
+ // 6 2 disk where central directory starts
+ // 8 2 number of central directory records on this disk
+ // 10 2 total number of central directory records
+ // 12 4 size of central directory(bytes)
+ // 16 4 offset of start of central directory, relative to start of archive
+ // 20 2 comment length(n)
+ // 22 n comment
+
+ endCentDir->count = 0;
+ endCentDir->size = 0;
+ endCentDir->offset = 0;
+ int64_t ecdrOffset = fsize;
+ for (int64_t i = END_CENT_DIR_SIZE; i < sz; i++)
+ {
+ b = (unsigned char *) dwin->bind (fsize - i, END_CENT_DIR_SIZE);
+ if (b == NULL)
+ {
+ append_msg (CMSG_ERROR, GTXT ("%s: read failed (offset:0x%llx bytes:%lld"),
+ name, (long long) (fsize - i), (long long) END_CENT_DIR_SIZE);
+ break;
+ }
+ uint32_t signature = get_u4 (b);
+ if (signature == 0x06054b50)
+ {
+ int64_t len_comment = get_u2 (b + 20);
+ if (i != (len_comment + END_CENT_DIR_SIZE))
+ continue;
+ ecdrOffset = fsize - i;
+ endCentDir->count = get_u2 (b + 10);
+ endCentDir->size = get_u4 (b + 12);
+ endCentDir->offset = get_u4 (b + 16);
+ Dprintf (DUMP_JAR_FILE,
+ " Zip archive file size: %10lld (0x%016llx)\n"
+ " end-cent-dir record offset: %10lld (0x%016llx)\n"
+ " cent-dir offset: %10lld (0x%016llx)\n"
+ " cent-dir size: %10lld (0x%016llx)\n"
+ " cent-dir entries: %10lld\n",
+ (long long) fsize, (long long) fsize,
+ (long long) ecdrOffset, (long long) ecdrOffset,
+ (long long) endCentDir->offset, (long long) endCentDir->offset,
+ (long long) endCentDir->size, (long long) endCentDir->size,
+ (long long) endCentDir->count);
+ break;
+ }
+ }
+ if (ecdrOffset == fsize)
+ {
+ append_msg (CMSG_ERROR,
+ GTXT ("%s: cannot find the central directory record"), name);
+ return 0;
+ }
+ if (endCentDir->count == 0xffff || endCentDir->offset == 0xffffffff
+ || endCentDir->size == 0xffffffff)
+ {
+ // Zip64 format:
+ // Zip64 end of central directory record
+ // Zip64 end of central directory locator ( Can be absent )
+ // End of central directory record
+ b = (unsigned char *) dwin->bind (ecdrOffset - ZIP64_LOCATOR_SIZE,
+ ZIP64_LOCATOR_SIZE);
+ if (b == NULL)
+ {
+ append_msg (CMSG_ERROR,
+ GTXT ("%s: cannot find the Zip64 central directory record"), name);
+ return 0;
+ }
+ uint32_t signature = get_u4 (b);
+ if (signature == 0x07064b50)
+ { // Get an offset from the Zip64 cent-dir locator
+ // Zip64 end of central directory locator
+ // Offset Bytes Description
+ // 0 4 Zip64 end of central dir locator signature = 0x07064b50
+ // 4 4 number of the disk with the start of the zip64 end of central directory
+ // 8 8 relative offset of the Zip64 end of central directory record
+ // 12 4 total number of disks
+ Dprintf (DUMP_JAR_FILE, " cent-dir locator offset %10lld (0x%016llx)\n",
+ (long long) (ecdrOffset - ZIP64_LOCATOR_SIZE), (long long) (ecdrOffset - ZIP64_LOCATOR_SIZE));
+ ecdrOffset = get_u8 (b + 8);
+ }
+ else // the Zip64 end of central directory locator is absent
+ ecdrOffset -= ZIP64_CENT_DIR_SIZE;
+ Dprintf (DUMP_JAR_FILE, NTXT (" Zip64 end-cent-dir record offset: %10lld (0x%016llx)\n"),
+ (long long) ecdrOffset, (long long) ecdrOffset);
+
+ b = (unsigned char *) dwin->bind (ecdrOffset, ZIP64_CENT_DIR_SIZE);
+ if (b == NULL)
+ {
+ append_msg (CMSG_ERROR,
+ GTXT ("%s: cannot find the Zip64 central directory record"), name);
+ return 0;
+ }
+ // Zip64 end of central directory record
+ // Offset Bytes Description
+ // 0 4 Zip64 end of central dir signature = 0x06064b50
+ // 4 8 size of zip64 end of central directory record
+ // 12 2 version made by
+ // 14 2 version needed to extract
+ // 16 4 number of this disk
+ // 20 4 number of the disk with the start of the central directory
+ // 24 8 total number of entries in the central directory on this disk
+ // 32 8 total number of entries in the central directory
+ // 40 8 size of the central directory
+ // 48 8 offset of start of centraldirectory with respect to the starting disk number
+ // 56 Zip64 extensible data sector (variable size)
+ signature = get_u4 (b);
+ if (signature != 0x06064b50)
+ {
+ append_msg (CMSG_ERROR, GTXT ("%s: cannot find the Zip64 central directory record"), name);
+ return 0;
+ }
+ endCentDir->count = get_u8 (b + 32);
+ endCentDir->size = get_u8 (b + 40);
+ endCentDir->offset = get_u8 (b + 48);
+ Dprintf (DUMP_JAR_FILE,
+ NTXT (" cent-dir offset: %10lld (0x%016llx)\n"
+ " cent-dir size: %10lld (0x%016llx)\n"
+ " cent-dir entries: %10lld\n"),
+ (long long) endCentDir->offset, (long long) endCentDir->offset,
+ (long long) endCentDir->size, (long long) endCentDir->size,
+ (long long) endCentDir->count);
+ }
+ return 1;
+}
+
diff --git a/gprofng/src/DbeJarFile.h b/gprofng/src/DbeJarFile.h
new file mode 100644
index 00000000000..f0b4f7b9607
--- /dev/null
+++ b/gprofng/src/DbeJarFile.h
@@ -0,0 +1,46 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _DBE_JAR_FILE_H
+#define _DBE_JAR_FILE_H
+
+#include "Emsg.h"
+
+class Data_window;
+class ZipEntry;
+template <class ITEM> class Vector;
+
+class DbeJarFile : public DbeMessages
+{
+public:
+ DbeJarFile (const char *jarName);
+ ~DbeJarFile ();
+
+ int get_entry (const char *fname);
+ long long copy (char *toFileNname, int fromEntryNum);
+
+private:
+ void get_entries ();
+ int get_EndCentDir (struct EndCentDir *endCentDir);
+ char *name;
+ Vector<ZipEntry *> *fnames;
+ Data_window *dwin;
+};
+#endif /* _DBE_JAR_FILE_H */
diff --git a/gprofng/src/DbeLinkList.h b/gprofng/src/DbeLinkList.h
new file mode 100644
index 00000000000..760cc67c357
--- /dev/null
+++ b/gprofng/src/DbeLinkList.h
@@ -0,0 +1,73 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _DbeLinkList_h
+#define _DbeLinkList_h
+
+template <typename ITEM> class DbeLinkList
+{
+public:
+
+ DbeLinkList (ITEM _item)
+ {
+ item = _item;
+ next = NULL;
+ };
+
+ ~DbeLinkList () { };
+
+ ITEM
+ get_item ()
+ {
+ return item;
+ }
+
+ DbeLinkList<ITEM> *
+ get_next ()
+ {
+ return next;
+ }
+
+ void
+ set_next (DbeLinkList<ITEM> *p)
+ {
+ next = p;
+ }
+
+ void
+ destroy (bool deleteItem = false)
+ {
+ for (DbeLinkList<ITEM> *p = next; p;)
+ {
+ DbeLinkList<ITEM> *p1 = p->get_next ();
+ if (deleteItem)
+ delete p->get_item ();
+ delete p;
+ p = p1;
+ }
+ next = NULL;
+ }
+
+private:
+ ITEM item;
+ DbeLinkList<ITEM> *next;
+};
+
+#endif /* _DbeLinkList_h */
diff --git a/gprofng/src/DbeLock.cc b/gprofng/src/DbeLock.cc
new file mode 100644
index 00000000000..14a1eb387c7
--- /dev/null
+++ b/gprofng/src/DbeLock.cc
@@ -0,0 +1,41 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include "DbeLock.h"
+
+DbeLock::DbeLock ()
+{
+ pthread_mutex_init (&lock, NULL);
+}
+
+DbeLock::~DbeLock () { }
+
+void
+DbeLock::aquireLock ()
+{
+ pthread_mutex_lock (&lock);
+}
+
+void
+DbeLock::releaseLock ()
+{
+ pthread_mutex_unlock (&lock);
+}
diff --git a/gprofng/src/DbeLock.h b/gprofng/src/DbeLock.h
new file mode 100644
index 00000000000..28dfb6ea4c3
--- /dev/null
+++ b/gprofng/src/DbeLock.h
@@ -0,0 +1,38 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _DBE_LOCK_H
+#define _DBE_LOCK_H
+
+#include <pthread.h>
+
+class DbeLock
+{
+public:
+ DbeLock ();
+ ~DbeLock ();
+ void aquireLock ();
+ void releaseLock ();
+
+private:
+ pthread_mutex_t lock;
+};
+
+#endif /* _DBE_LOCK_H */
diff --git a/gprofng/src/DbeSession.cc b/gprofng/src/DbeSession.cc
new file mode 100644
index 00000000000..94b8f6b762b
--- /dev/null
+++ b/gprofng/src/DbeSession.cc
@@ -0,0 +1,3525 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <ctype.h>
+#include <stdio.h>
+#include <dirent.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <errno.h>
+#include <sys/param.h>
+
+#include "util.h"
+#include "Application.h"
+#include "Experiment.h"
+#include "ExpGroup.h"
+#include "Expression.h"
+#include "DataObject.h"
+#include "Elf.h"
+#include "Function.h"
+#include "DbeSession.h"
+#include "LoadObject.h"
+#include "DbeSyncMap.h"
+#include "DbeThread.h"
+#include "ClassFile.h"
+#include "IndexObject.h"
+#include "PathTree.h"
+#include "Print.h"
+
+// Bison 3.0 doesn't define YY_NULLPTR. I copied this from QLParser.tab.cc.
+// Why this is not in QLParser.tab.hh ? YY_NULLPTR is used in QLParser.tab.hh
+# ifndef YY_NULLPTR
+# if defined __cplusplus && 201103L <= __cplusplus
+# define YY_NULLPTR nullptr
+# else
+# define YY_NULLPTR 0
+# endif
+# endif
+#include "QLParser.tab.hh"
+#include "DbeView.h"
+#include "MemorySpace.h"
+#include "Module.h"
+#include "SourceFile.h"
+#include "StringBuilder.h"
+#include "BaseMetric.h"
+#include "BaseMetricTreeNode.h"
+#include "Command.h"
+#include "UserLabel.h"
+#include "StringMap.h"
+#include "DbeFile.h"
+#include "DbeJarFile.h"
+#include "IOActivity.h"
+#include "HeapActivity.h"
+
+// This is a universal List structure to organize objects
+// of various types, even if different.
+struct List
+{
+ List *next;
+ void *val;
+};
+
+struct Countable
+{
+ Countable (void *_item)
+ {
+ item = _item;
+ ref_count = 0;
+ }
+
+ void *item;
+ int ref_count;
+};
+
+Platform_t DbeSession::platform =
+#if ARCH(SPARC)
+ Sparc;
+#elif ARCH(Aarch64)
+ Aarch64;
+#else // ARCH(Intel)
+ Intel;
+#endif
+
+// This constant determines the size of the data object name hash table.
+static const int HTableSize = 8192;
+static int DEFAULT_TINY_THRESHOLD = -1;
+
+unsigned int mpmt_debug_opt = 0;
+DbeSession *dbeSession = NULL;
+
+DbeSession::DbeSession (Settings *_settings, bool _ipc_mode, bool _rdt_mode)
+{
+ dbeSession = this;
+ ipc_mode = _ipc_mode;
+ rdt_mode = _rdt_mode;
+ settings = new Settings (_settings);
+ views = new Vector<DbeView*>;
+ exps = new Vector<Experiment*>;
+ lobjs = new Vector<LoadObject*>;
+ objs = new Vector<Histable*>;
+ dobjs = new Vector<DataObject*>;
+ metrics = new Vector<Countable*>;
+ reg_metrics = new Vector<BaseMetric*>;
+ hwcentries = NULL;
+ reg_metrics_tree = NULL; // BaseMetric() requires DbeSession::ql_parse
+ idxobjs = new Vector<HashMap<uint64_t, Histable*>*>;
+ tmp_files = new Vector<char*>;
+ search_path = new Vector<char*>;
+ classpath = new Vector<char*>;
+ classpath_df = NULL;
+ expGroups = new Vector<ExpGroup*>;
+ sourcesMap = new HashMap<char*, SourceFile*>;
+ sources = new Vector<SourceFile*>;
+ comp_lobjs = new HashMap<char*, LoadObject*>;
+ comp_dbelines = new HashMap<char*, DbeLine*>;
+ comp_sources = new HashMap<char*, SourceFile*>;
+ loadObjMap = new DbeSyncMap<LoadObject>;
+ f_special = new Vector<Function*>(LastSpecialFunction);
+ omp_functions = new Vector<Function*>(OMP_LAST_STATE);
+ interactive = false;
+ lib_visibility_used = false;
+
+ // Define all known property names
+ propNames = new Vector<PropDescr*>;
+ propNames_name_store (PROP_NONE, NTXT (""));
+ propNames_name_store (PROP_ATSTAMP, NTXT ("ATSTAMP"));
+ propNames_name_store (PROP_ETSTAMP, NTXT ("ETSTAMP"));
+ propNames_name_store (PROP_TSTAMP, NTXT ("TSTAMP"));
+ propNames_name_store (PROP_THRID, NTXT ("THRID"));
+ propNames_name_store (PROP_LWPID, NTXT ("LWPID"));
+ propNames_name_store (PROP_CPUID, NTXT ("CPUID"));
+ propNames_name_store (PROP_FRINFO, NTXT ("FRINFO"));
+ propNames_name_store (PROP_EVT_TIME, NTXT ("EVT_TIME"));
+
+ // Samples
+ propNames_name_store (PROP_SMPLOBJ, NTXT ("SMPLOBJ"));
+ propNames_name_store (PROP_SAMPLE, NTXT ("SAMPLE"));
+
+ // GCEvents
+ propNames_name_store (PROP_GCEVENTOBJ, NTXT ("GCEVENTOBJ"));
+ propNames_name_store (PROP_GCEVENT, NTXT ("GCEVENT"));
+
+ // Metadata used by some packet types
+ propNames_name_store (PROP_VOIDP_OBJ, NTXT ("VOIDP_OBJ"),
+ NULL, TYPE_UINT64, DDFLAG_NOSHOW);
+
+ // Clock profiling properties
+ propNames_name_store (PROP_UCPU, NTXT ("UCPU"));
+ propNames_name_store (PROP_SCPU, NTXT ("SCPU"));
+ propNames_name_store (PROP_TRAP, NTXT ("TRAP"));
+ propNames_name_store (PROP_TFLT, NTXT ("TFLT"));
+ propNames_name_store (PROP_DFLT, NTXT ("DFLT"));
+ propNames_name_store (PROP_KFLT, NTXT ("KFLT"));
+ propNames_name_store (PROP_ULCK, NTXT ("ULCK"));
+ propNames_name_store (PROP_TSLP, NTXT ("TSLP"));
+ propNames_name_store (PROP_WCPU, NTXT ("WCPU"));
+ propNames_name_store (PROP_TSTP, NTXT ("TSTP"));
+
+ propNames_name_store (PROP_MSTATE, NTXT ("MSTATE"));
+ propNames_name_store (PROP_NTICK, NTXT ("NTICK"));
+ propNames_name_store (PROP_OMPSTATE, NTXT ("OMPSTATE"));
+
+ // Synchronization tracing properties
+ propNames_name_store (PROP_SRQST, NTXT ("SRQST"));
+ propNames_name_store (PROP_SOBJ, NTXT ("SOBJ"));
+
+ // Hardware counter profiling properties
+ propNames_name_store (PROP_HWCTAG, NTXT ("HWCTAG"));
+ propNames_name_store (PROP_HWCINT, NTXT ("HWCINT"));
+ propNames_name_store (PROP_VADDR, NTXT ("VADDR"));
+ propNames_name_store (PROP_PADDR, NTXT ("PADDR"));
+ propNames_name_store (PROP_VIRTPC, NTXT ("VIRTPC"));
+ propNames_name_store (PROP_PHYSPC, NTXT ("PHYSPC"));
+ propNames_name_store (PROP_LWP_LGRP_HOME, NTXT ("LWP_LGRP_HOME"));
+ propNames_name_store (PROP_PS_LGRP_HOME, NTXT ("PS_LGRP_HOME"));
+ propNames_name_store (PROP_EA_PAGESIZE, NTXT ("EA_PAGESIZE"));
+ propNames_name_store (PROP_EA_LGRP, NTXT ("EA_LGRP"));
+ propNames_name_store (PROP_PC_PAGESIZE, NTXT ("PC_PAGESIZE"));
+ propNames_name_store (PROP_PC_LGRP, NTXT ("PC_LGRP"));
+ propNames_name_store (PROP_HWCDOBJ, NTXT ("HWCDOBJ"));
+ propNames_name_store (PROP_MEM_LAT, NTXT ("MEM_LAT"));
+ propNames_name_store (PROP_MEM_SRC, NTXT ("MEM_SRC"));
+
+ // Heap tracing properties
+ propNames_name_store (PROP_HTYPE, NTXT ("HTYPE"));
+ propNames_name_store (PROP_HSIZE, NTXT ("HSIZE"));
+ propNames_name_store (PROP_HVADDR, NTXT ("HVADDR"));
+ propNames_name_store (PROP_HOVADDR, NTXT ("HOVADDR"));
+ propNames_name_store (PROP_HLEAKED, NTXT ("HLEAKED"),
+ GTXT ("Leaked bytes"), TYPE_UINT64, 0);
+ propNames_name_store (PROP_HMEM_USAGE, NTXT ("HMEM_USAGE"));
+ propNames_name_store (PROP_HFREED, NTXT ("HFREED"),
+ GTXT ("Freed bytes"), TYPE_UINT64, 0);
+ propNames_name_store (PROP_HCUR_ALLOCS, NTXT ("HCUR_ALLOCS"),
+ GTXT ("Current allocations"), TYPE_INT64, 0);
+ propNames_name_store (PROP_HCUR_NET_ALLOC, NTXT ("HCUR_NET_ALLOC"),
+ NULL, TYPE_INT64, DDFLAG_NOSHOW);
+ propNames_name_store (PROP_HCUR_LEAKS, NTXT ("HCUR_LEAKS"),
+ GTXT ("Current leaks"), TYPE_UINT64, 0);
+ propNames_name_store (PROP_DDSCR_LNK, NTXT ("DDSCR_LNK"),
+ NULL, TYPE_UINT64, DDFLAG_NOSHOW);
+
+ // IO tracing properties
+ propNames_name_store (PROP_IOTYPE, NTXT ("IOTYPE"));
+ propNames_name_store (PROP_IOFD, NTXT ("IOFD"));
+ propNames_name_store (PROP_IONBYTE, NTXT ("IONBYTE"));
+ propNames_name_store (PROP_IORQST, NTXT ("IORQST"));
+ propNames_name_store (PROP_IOOFD, NTXT ("IOOFD"));
+ propNames_name_store (PROP_IOFNAME, NTXT ("IOFNAME"));
+ propNames_name_store (PROP_IOVFD, NTXT ("IOVFD"));
+ propNames_name_store (PROP_IOFSTYPE, NTXT ("IOFSTYPE"));
+
+ // omptrace raw properties
+ propNames_name_store (PROP_CPRID, NTXT ("CPRID"));
+ propNames_name_store (PROP_PPRID, NTXT ("PPRID"));
+ propNames_name_store (PROP_TSKID, NTXT ("TSKID"));
+ propNames_name_store (PROP_PTSKID, NTXT ("PTSKID"));
+ propNames_name_store (PROP_PRPC, NTXT ("PRPC"));
+
+ // Data race detection properties
+ propNames_name_store (PROP_RID, NTXT ("RID"));
+ propNames_name_store (PROP_RTYPE, NTXT ("RTYPE"));
+ propNames_name_store (PROP_LEAFPC, NTXT ("LEAFPC"));
+ propNames_name_store (PROP_RVADDR, NTXT ("RVADDR"));
+ propNames_name_store (PROP_RCNT, NTXT ("RCNT"));
+
+ // Deadlock detection properties
+ propNames_name_store (PROP_DID, NTXT ("DID"));
+ propNames_name_store (PROP_DLTYPE, NTXT ("DLTYPE"));
+ propNames_name_store (PROP_DTYPE, NTXT ("DTYPE"));
+ propNames_name_store (PROP_DVADDR, NTXT ("DVADDR"));
+
+ // Synthetic properties (queries only)
+ propNames_name_store (PROP_STACK, NTXT ("STACK"));
+ propNames_name_store (PROP_MSTACK, NTXT ("MSTACK"));
+ propNames_name_store (PROP_USTACK, NTXT ("USTACK"));
+ propNames_name_store (PROP_XSTACK, NTXT ("XSTACK"));
+ propNames_name_store (PROP_HSTACK, NTXT ("HSTACK"));
+ propNames_name_store (PROP_STACKID, NTXT ("STACKID"));
+ //propNames_name_store( PROP_CPRID, NTXT("CPRID") );
+ //propNames_name_store( PROP_TSKID, NTXT("TSKID") );
+ propNames_name_store (PROP_JTHREAD, NTXT ("JTHREAD"),
+ GTXT ("Java thread number"), TYPE_UINT64, 0);
+
+ propNames_name_store (PROP_LEAF, NTXT ("LEAF"));
+ propNames_name_store (PROP_DOBJ, NTXT ("DOBJ"));
+ propNames_name_store (PROP_SAMPLE_MAP, NTXT ("SAMPLE_MAP"));
+ propNames_name_store (PROP_GCEVENT_MAP, NTXT ("GCEVENT_MAP"));
+ propNames_name_store (PROP_PID, NTXT ("PID"),
+ GTXT ("Process id"), TYPE_UINT64, 0);
+ propNames_name_store (PROP_EXPID, NTXT ("EXPID"),
+ GTXT ("Experiment id"), TYPE_UINT64, DDFLAG_NOSHOW);
+ propNames_name_store (PROP_EXPID_CMP, NTXT ("EXPID_CMP"),
+ GTXT ("Comparable Experiment Id"), TYPE_UINT64,
+ DDFLAG_NOSHOW); //YXXX find better description
+ propNames_name_store (PROP_EXPGRID, NTXT ("EXPGRID"),
+ GTXT ("Comparison Group id"), TYPE_UINT64, 0);
+ propNames_name_store (PROP_PARREG, NTXT ("PARREG"));
+ propNames_name_store (PROP_TSTAMP_LO, NTXT ("TSTAMP_LO"),
+ GTXT ("Start Timestamp (nanoseconds)"), TYPE_UINT64, 0);
+ propNames_name_store (PROP_TSTAMP_HI, NTXT ("TSTAMP_HI"),
+ GTXT ("End Timestamp (nanoseconds)"), TYPE_UINT64, 0);
+ propNames_name_store (PROP_TSTAMP2, NTXT ("TSTAMP2"),
+ GTXT ("End Timestamp (nanoseconds)"), TYPE_UINT64,
+ DDFLAG_NOSHOW);
+ propNames_name_store (PROP_FREQ_MHZ, NTXT ("FREQ_MHZ"),
+ GTXT ("CPU Frequency, MHz"), TYPE_UINT32, 0);
+ propNames_name_store (PROP_NTICK_USEC, NTXT ("NTICK_USEC"),
+ GTXT ("Clock Profiling Interval, Microseconds"),
+ TYPE_UINT64, 0);
+
+ propNames_name_store (PROP_IOHEAPBYTES, NTXT ("IOHEAPBYTES"));
+
+ propNames_name_store (PROP_STACKL, NTXT ("STACKL"));
+ propNames_name_store (PROP_MSTACKL, NTXT ("MSTACKL"));
+ propNames_name_store (PROP_USTACKL, NTXT ("USTACKL"));
+ propNames_name_store (PROP_XSTACKL, NTXT ("XSTACKL"));
+
+ propNames_name_store (PROP_STACKI, NTXT ("STACKI"));
+ propNames_name_store (PROP_MSTACKI, NTXT ("MSTACKI"));
+ propNames_name_store (PROP_USTACKI, NTXT ("USTACKI"));
+ propNames_name_store (PROP_XSTACKI, NTXT ("XSTACKI"));
+
+ // Make sure predefined names are not used for dynamic properties
+ propNames_name_store (PROP_LAST, NTXT (""));
+
+ localized_SP_UNKNOWN_NAME = GTXT ("(unknown)");
+
+ // define Index objects
+ dyn_indxobj = new Vector<IndexObjType_t*>();
+ dyn_indxobj_indx = 0;
+ char *s = dbe_sprintf (NTXT ("((EXPID_CMP<<%llu) | THRID)"),
+ (unsigned long long) IndexObject::INDXOBJ_EXPID_SHIFT);
+ indxobj_define (NTXT ("Threads"), GTXT ("Threads"), s, NULL, NULL);
+ free (s);
+ indxobj_define (NTXT ("CPUs"), GTXT ("CPUs"), NTXT ("(CPUID)"), NULL, NULL);
+ indxobj_define (NTXT ("Samples"), GTXT ("Samples"), NTXT ("(SAMPLE_MAP)"),
+ NULL, NULL);
+ indxobj_define (NTXT ("GCEvents"), GTXT ("GCEvents"), NTXT ("(GCEVENT_MAP)"),
+ NULL, NULL);
+ indxobj_define (NTXT ("Seconds"), GTXT ("Seconds"),
+ NTXT ("(TSTAMP/1000000000)"), NULL, NULL);
+ indxobj_define (NTXT ("Processes"), GTXT ("Processes"), NTXT ("(EXPID_CMP)"),
+ NULL, NULL);
+ s = dbe_sprintf (NTXT ("((EXPGRID<<%llu) | (EXPID<<%llu))"),
+ (unsigned long long) IndexObject::INDXOBJ_EXPGRID_SHIFT,
+ (unsigned long long) IndexObject::INDXOBJ_EXPID_SHIFT);
+ indxobj_define (NTXT ("Experiment_IDs"), GTXT ("Experiment_IDs"), s, NULL, NULL);
+ free (s);
+ indxobj_define (NTXT ("Datasize"), GTXT ("Datasize"),
+ "(IOHEAPBYTES==0?0:"
+ "((IOHEAPBYTES<=(1<<0)?(1<<0):"
+ "((IOHEAPBYTES<=(1<<2)?(1<<2):"
+ "((IOHEAPBYTES<=(1<<4)?(1<<4):"
+ "((IOHEAPBYTES<=(1<<6)?(1<<6):"
+ "((IOHEAPBYTES<=(1<<8)?(1<<8):"
+ "((IOHEAPBYTES<=(1<<10)?(1<<10):"
+ "((IOHEAPBYTES<=(1<<12)?(1<<12):"
+ "((IOHEAPBYTES<=(1<<14)?(1<<14):"
+ "((IOHEAPBYTES<=(1<<16)?(1<<16):"
+ "((IOHEAPBYTES<=(1<<18)?(1<<18):"
+ "((IOHEAPBYTES<=(1<<20)?(1<<20):"
+ "((IOHEAPBYTES<=(1<<22)?(1<<22):"
+ "((IOHEAPBYTES<=(1<<24)?(1<<24):"
+ "((IOHEAPBYTES<=(1<<26)?(1<<26):"
+ "((IOHEAPBYTES<=(1<<28)?(1<<28):"
+ "((IOHEAPBYTES<=(1<<30)?(1<<30):"
+ "((IOHEAPBYTES<=(1<<32)?(1<<32):"
+ "((IOHEAPBYTES<=(1<<34)?(1<<34):"
+ "((IOHEAPBYTES<=(1<<36)?(1<<36):"
+ "((IOHEAPBYTES<=(1<<38)?(1<<38):"
+ "((IOHEAPBYTES<=(1<<40)?(1<<40):"
+ "((IOHEAPBYTES<=(1<<42)?(1<<42):"
+ "((IOHEAPBYTES<=(1<<44)?(1<<44):"
+ "((IOHEAPBYTES<=(1<<46)?(1<<46):"
+ "((IOHEAPBYTES<=(1<<48)?(1<<48):"
+ "((IOHEAPBYTES<=(1<<50)?(1<<50):"
+ "(IOHEAPBYTES==-1?-1:(1<<50|1)"
+ "))))))))))))))))))))))))))))))))))))))))))))))))))))))",
+ NULL, NULL);
+ indxobj_define (NTXT ("Duration"), GTXT ("Duration"),
+ "((TSTAMP_HI-TSTAMP_LO)==0?0:"
+ "(((TSTAMP_HI-TSTAMP_LO)<=1000?1000:"
+ "(((TSTAMP_HI-TSTAMP_LO)<=10000?10000:"
+ "(((TSTAMP_HI-TSTAMP_LO)<=100000?100000:"
+ "(((TSTAMP_HI-TSTAMP_LO)<=1000000?1000000:"
+ "(((TSTAMP_HI-TSTAMP_LO)<=10000000?10000000:"
+ "(((TSTAMP_HI-TSTAMP_LO)<=100000000?100000000:"
+ "(((TSTAMP_HI-TSTAMP_LO)<=1000000000?1000000000:"
+ "(((TSTAMP_HI-TSTAMP_LO)<=10000000000?10000000000:"
+ "(((TSTAMP_HI-TSTAMP_LO)<=100000000000?100000000000:"
+ "(((TSTAMP_HI-TSTAMP_LO)<=1000000000000?1000000000000:"
+ "(((TSTAMP_HI-TSTAMP_LO)<=10000000000000?10000000000000:"
+ "(10000000000001))))))))))))))))))))))))", NULL, NULL);
+ dyn_indxobj_indx_fixed = dyn_indxobj_indx;
+ Elf::elf_init ();
+ defExpName = NULL;
+ mach_model_loaded = NULL;
+ tmp_dir_name = NULL;
+ settings->read_rc (ipc_mode || rdt_mode);
+
+ init ();
+}
+
+DbeSession::~DbeSession ()
+{
+ Destroy (views);
+ Destroy (exps);
+ Destroy (dobjs);
+ Destroy (metrics);
+ Destroy (search_path);
+ Destroy (classpath);
+ Destroy (propNames);
+ Destroy (expGroups);
+ Destroy (userLabels);
+ if (hwcentries)
+ {
+ for (long i = 0, sz = hwcentries->size (); i < sz; i++)
+ {
+ Hwcentry *h = hwcentries->get (i);
+ free (h->int_name);
+ free (h->name);
+ delete h;
+ }
+ delete hwcentries;
+ }
+
+ if (idxobjs)
+ {
+ for (int i = 0; i < idxobjs->size (); ++i)
+ {
+ HashMap<uint64_t, Histable*> *hMap = idxobjs->get (i);
+ if (hMap)
+ {
+ hMap->values ()->destroy ();
+ delete hMap;
+ }
+ }
+ delete idxobjs;
+ }
+
+ for (int i = 0; i < HTableSize; i++)
+ {
+ List *list = dnameHTable[i];
+ while (list)
+ {
+ List *tmp = list;
+ list = list->next;
+ delete tmp;
+ }
+ }
+ delete[] dnameHTable;
+ delete classpath_df;
+ Destroy (objs);
+ Destroy (reg_metrics);
+ Destroy (dyn_indxobj);
+ delete lobjs;
+ delete f_special;
+ destroy_map (DbeFile *, dbeFiles);
+ destroy_map (DbeJarFile *, dbeJarFiles);
+ delete loadObjMap;
+ delete omp_functions;
+ delete sourcesMap;
+ delete sources;
+ delete comp_lobjs;
+ delete comp_dbelines;
+ delete comp_sources;
+ delete reg_metrics_tree;
+ delete settings;
+ free (mach_model_loaded);
+
+ if (defExpName != NULL)
+ {
+ StringBuilder *sb = new StringBuilder ();
+ sb->append (NTXT ("/bin/rm -rf "));
+ sb->append (defExpName);
+ char *cmd = sb->toString ();
+ system (cmd);
+ free (cmd);
+ delete sb;
+ free (defExpName);
+ }
+ unlink_tmp_files ();
+ delete tmp_files;
+ dbeSession = NULL;
+}
+
+void
+DbeSession::unlink_tmp_files ()
+{
+ if (tmp_files)
+ {
+ for (int i = 0, sz = tmp_files->size (); i < sz; i++)
+ unlink (tmp_files->fetch (i));
+ tmp_files->destroy ();
+ delete tmp_files;
+ tmp_files = NULL;
+ }
+ if (tmp_dir_name)
+ {
+ char *cmd = dbe_sprintf (NTXT ("/bin/rm -rf %s"), tmp_dir_name);
+ system (cmd);
+ free (cmd);
+ free (tmp_dir_name);
+ tmp_dir_name = NULL;
+ }
+}
+
+char *
+DbeSession::get_tmp_file_name (const char *nm, bool for_java)
+{
+ if (tmp_dir_name == NULL)
+ {
+ tmp_dir_name = dbe_sprintf (NTXT ("/tmp/analyzer.%llu.%lld"),
+ (unsigned long long) getuid (), (long long) getpid ());
+ mkdir (tmp_dir_name, S_IRWXU);
+ }
+ char *fnm = dbe_sprintf (NTXT ("%s/%s"), tmp_dir_name, nm);
+ if (for_java)
+ for (char *s = fnm + strlen (tmp_dir_name) + 1; *s; s++)
+ if (*s == '/')
+ *s = '.';
+ return fnm;
+}
+
+void
+DbeSession::init ()
+{
+ user_exp_id_counter = 0;
+ status_ompavail = 0;
+ archive_mode = 0;
+
+#if DEBUG
+ char *s = getenv (NTXT ("MPMT_DEBUG"));
+ if (s)
+ mpmt_debug_opt = atoi (s);
+#endif /* DEBUG */
+ dbeFiles = new StringMap<DbeFile*>();
+ dbeJarFiles = new StringMap<DbeJarFile*>(128, 128);
+
+ // set up the initial (after .rc file reading) search path
+ set_search_path (settings->str_search_path, true);
+ userLabels = NULL;
+
+ // Preset all objects as they may reuse each other
+ lo_unknown = NULL;
+ f_unknown = NULL;
+ j_unknown = NULL;
+ lo_total = NULL;
+ sf_unknown = NULL;
+ f_total = NULL;
+ f_jvm = NULL;
+ d_total = NULL;
+ d_scalars = NULL;
+ d_unknown = NULL;
+ expGroups->destroy ();
+ f_special->reset ();
+ for (int i = 0; i < LastSpecialFunction; i++)
+ f_special->append (NULL);
+
+ lo_omp = NULL;
+ omp_functions->reset ();
+ for (int i = 0; i < OMP_LAST_STATE; i++)
+ omp_functions->append (NULL);
+
+ // make sure the metric list is initialized
+ register_metric (Metric::SIZES);
+ register_metric (Metric::ADDRESS);
+ register_metric (Metric::ONAME);
+
+ // This is needed only to maintain loadobject id's
+ // for <Total> and <Unknown> in tests
+ (void) get_Unknown_LoadObject ();
+ (void) get_Total_LoadObject ();
+
+ // Create the data object name hash table.
+ dnameHTable = new List*[HTableSize];
+ for (int i = 0; i < HTableSize; i++)
+ dnameHTable[i] = NULL;
+
+ d_total = createDataObject ();
+ d_total->set_name (NTXT ("<Total>"));
+
+ // XXXX <Scalars> only appropriate for Program/Data-oriented analyses
+ d_scalars = createDataObject ();
+ d_scalars->set_name (GTXT ("<Scalars>"));
+
+ d_unknown = createDataObject ();
+ d_unknown->set_name (GTXT ("<Unknown>"));
+
+ // assign d_unknown's children so data_olayout has consistent sorting
+ for (unsigned pp_code = 1; pp_code < NUM_ABS_PP_CODES + 2; pp_code++)
+ {
+ char *errcode;
+ DataObject* dobj = createDataObject ();
+ switch (pp_code)
+ {
+ case NUM_ABS_PP_CODES + 1:
+ errcode = PTXT (DOBJ_UNDETERMINED);
+ break;
+ case NUM_ABS_PP_CODES:
+ errcode = PTXT (DOBJ_UNSPECIFIED);
+ break;
+ case NUM_ABS_PP_CODES - 1:
+ errcode = PTXT (DOBJ_UNIDENTIFIED);
+ break;
+ default:
+ errcode = PTXT (ABS_PP_CODES[pp_code]);
+ }
+ dobj->parent = d_unknown;
+ dobj->set_dobjname (errcode, NULL); // dobj->parent must already be set
+ }
+
+ for (unsigned rt_code = 1; rt_code < NUM_ABS_RT_CODES - 1; rt_code++)
+ {
+ DataObject* dobj = createDataObject ();
+ dobj->parent = d_unknown;
+ dobj->set_dobjname (PTXT (ABS_RT_CODES[rt_code]), NULL); // dobj->parent must already be set
+ }
+}
+
+void
+DbeSession::reset_data ()
+{
+ for (long i = 0, sz = VecSize (idxobjs); i < sz; ++i)
+ if (idxobjs->get (i))
+ idxobjs->get (i)->reset ();
+}
+
+void
+DbeSession::reset ()
+{
+ loadObjMap->reset ();
+ DbeView *dbev;
+ int index;
+
+ Vec_loop (DbeView*, views, index, dbev)
+ {
+ dbev->reset ();
+ }
+
+ destroy_map (DbeFile *, dbeFiles);
+ destroy_map (DbeJarFile *, dbeJarFiles);
+ exps->destroy ();
+ lobjs->reset (); // all LoadObjects belong to objs
+ dobjs->destroy (); // deletes d_unknown and d_total as well
+ objs->destroy ();
+ comp_lobjs->clear ();
+ comp_dbelines->clear ();
+ comp_sources->clear ();
+ sourcesMap->clear ();
+ sources->reset ();
+
+ // Delete the data object name hash table.
+ for (int i = 0; i < HTableSize; i++)
+ {
+ List *list = dnameHTable[i];
+ while (list)
+ {
+ List *tmp = list;
+ list = list->next;
+ delete tmp;
+ }
+ }
+ delete[] dnameHTable;
+
+ // IndexObect definitions remain, objects themselves may go
+ for (int i = 0; i < idxobjs->size (); ++i)
+ {
+ HashMap<uint64_t, Histable*> *v = idxobjs->fetch (i);
+ if (v != NULL)
+ {
+ v->values ()->destroy ();
+ v->clear ();
+ }
+ }
+ init ();
+}
+
+Vector<SourceFile*> *
+DbeSession::get_sources ()
+{
+ return sources;
+}
+
+DbeFile *
+DbeSession::getDbeFile (char *filename, int filetype)
+{
+ Dprintf (DEBUG_DBE_FILE, NTXT ("DbeSession::getDbeFile filetype=0x%x %s\n"), filetype, filename);
+ if (strncmp (filename, NTXT ("./"), 2) == 0)
+ filename += 2;
+ DbeFile *dbeFile = dbeFiles->get (filename);
+ if (dbeFile == NULL)
+ {
+ dbeFile = new DbeFile (filename);
+ dbeFiles->put (filename, dbeFile);
+ }
+ dbeFile->filetype |= filetype;
+ return dbeFile;
+}
+
+LoadObject *
+DbeSession::get_Total_LoadObject ()
+{
+ if (lo_total == NULL)
+ {
+ lo_total = createLoadObject (NTXT ("<Total>"));
+ lo_total->dbeFile->filetype |= DbeFile::F_FICTION;
+ }
+ return lo_total;
+}
+
+Function *
+DbeSession::get_Total_Function ()
+{
+ if (f_total == NULL)
+ {
+ f_total = createFunction ();
+ f_total->flags |= FUNC_FLAG_SIMULATED | FUNC_FLAG_NO_OFFSET;
+ f_total->set_name (NTXT ("<Total>"));
+ Module *mod = get_Total_LoadObject ()->noname;
+ f_total->module = mod;
+ mod->functions->append (f_total);
+ }
+ return f_total;
+}
+
+LoadObject *
+DbeSession::get_Unknown_LoadObject ()
+{
+ if (lo_unknown == NULL)
+ {
+ lo_unknown = createLoadObject (GTXT ("<Unknown>"));
+ lo_unknown->type = LoadObject::SEG_TEXT; // makes it expandable
+ lo_unknown->dbeFile->filetype |= DbeFile::F_FICTION;
+
+ // force creation of the <Unknown> function
+ (void) get_Unknown_Function ();
+ }
+ return lo_unknown;
+}
+
+SourceFile *
+DbeSession::get_Unknown_Source ()
+{
+ if (sf_unknown == NULL)
+ {
+ sf_unknown = createSourceFile (localized_SP_UNKNOWN_NAME);
+ sf_unknown->dbeFile->filetype |= DbeFile::F_FICTION;
+ sf_unknown->flags |= SOURCE_FLAG_UNKNOWN;
+ }
+ return sf_unknown;
+}
+
+Function *
+DbeSession::get_Unknown_Function ()
+{
+ if (f_unknown == NULL)
+ {
+ f_unknown = createFunction ();
+ f_unknown->flags |= FUNC_FLAG_SIMULATED;
+ f_unknown->set_name (GTXT ("<Unknown>"));
+ Module *mod = get_Unknown_LoadObject ()->noname;
+ f_unknown->module = mod;
+ mod->functions->append (f_unknown);
+ }
+ return f_unknown;
+}
+
+// LIBRARY_VISIBILITY
+
+Function *
+DbeSession::create_hide_function (LoadObject *lo)
+{
+ Function *h_function = createFunction ();
+ h_function->set_name (lo->get_name ());
+ h_function->module = lo->noname;
+ h_function->isHideFunc = true;
+ lo->noname->functions->append (h_function);
+ return h_function;
+}
+
+Function *
+DbeSession::get_JUnknown_Function ()
+{
+ if (j_unknown == NULL)
+ {
+ j_unknown = createFunction ();
+ j_unknown->flags |= FUNC_FLAG_SIMULATED;
+ j_unknown->set_name (GTXT ("<no Java callstack recorded>"));
+ Module *mod = get_Unknown_LoadObject ()->noname;
+ j_unknown->module = mod;
+ mod->functions->append (j_unknown);
+ }
+ return j_unknown;
+}
+
+Function *
+DbeSession::get_jvm_Function ()
+{
+ if (f_jvm == NULL)
+ {
+ f_jvm = createFunction ();
+ f_jvm->flags |= FUNC_FLAG_SIMULATED | FUNC_FLAG_NO_OFFSET;
+ f_jvm->set_name (GTXT ("<JVM-System>"));
+
+ // Find the JVM LoadObject
+ LoadObject *jvm = get_Unknown_LoadObject ();
+ for (int i = 0; i < lobjs->size (); ++i)
+ {
+ LoadObject *lo = lobjs->fetch (i);
+ if (lo->flags & SEG_FLAG_JVM)
+ {
+ jvm = lo;
+ break;
+ }
+ }
+ Module *mod = jvm->noname;
+ f_jvm->module = mod;
+ mod->functions->append (f_jvm);
+ // XXXX is it required? no consistency among all special functions
+ // jvm->functions->append( f_jvm );
+ }
+ return f_jvm;
+}
+
+Function *
+DbeSession::getSpecialFunction (SpecialFunction kind)
+{
+ if (kind < 0 || kind >= LastSpecialFunction)
+ return NULL;
+
+ Function *func = f_special->fetch (kind);
+ if (func == NULL)
+ {
+ char *fname;
+ switch (kind)
+ {
+ case TruncatedStackFunc:
+ fname = GTXT ("<Truncated-stack>");
+ break;
+ case FailedUnwindFunc:
+ fname = GTXT ("<Stack-unwind-failed>");
+ break;
+ default:
+ return NULL;
+ }
+ func = createFunction ();
+ func->flags |= FUNC_FLAG_SIMULATED | FUNC_FLAG_NO_OFFSET;
+ Module *mod = get_Total_LoadObject ()->noname;
+ func->module = mod;
+ mod->functions->append (func);
+ func->set_name (fname);
+ f_special->store (kind, func);
+ }
+ return func;
+}
+
+LoadObject *
+DbeSession::get_OMP_LoadObject ()
+{
+ if (lo_omp == NULL)
+ {
+ for (int i = 0, sz = lobjs->size (); i < sz; i++)
+ {
+ LoadObject *lo = lobjs->fetch (i);
+ if (lo->flags & SEG_FLAG_OMP)
+ {
+ lo_omp = lo;
+ return lo_omp;
+ }
+ }
+ lo_omp = createLoadObject (GTXT ("<OMP>"));
+ lo_omp->type = LoadObject::SEG_TEXT;
+ lo_omp->dbeFile->filetype |= DbeFile::F_FICTION;
+ }
+ return lo_omp;
+}
+
+Function *
+DbeSession::get_OMP_Function (int n)
+{
+ if (n < 0 || n >= OMP_LAST_STATE)
+ return NULL;
+
+ Function *func = omp_functions->fetch (n);
+ if (func == NULL)
+ {
+ char *fname;
+ switch (n)
+ {
+ case OMP_OVHD_STATE:
+ fname = GTXT ("<OMP-overhead>");
+ break;
+ case OMP_IDLE_STATE:
+ fname = GTXT ("<OMP-idle>");
+ break;
+ case OMP_RDUC_STATE:
+ fname = GTXT ("<OMP-reduction>");
+ break;
+ case OMP_IBAR_STATE:
+ fname = GTXT ("<OMP-implicit_barrier>");
+ break;
+ case OMP_EBAR_STATE:
+ fname = GTXT ("<OMP-explicit_barrier>");
+ break;
+ case OMP_LKWT_STATE:
+ fname = GTXT ("<OMP-lock_wait>");
+ break;
+ case OMP_CTWT_STATE:
+ fname = GTXT ("<OMP-critical_section_wait>");
+ break;
+ case OMP_ODWT_STATE:
+ fname = GTXT ("<OMP-ordered_section_wait>");
+ break;
+ case OMP_ATWT_STATE:
+ fname = GTXT ("<OMP-atomic_wait>");
+ break;
+ default:
+ return NULL;
+ }
+ func = createFunction ();
+ func->flags |= FUNC_FLAG_SIMULATED | FUNC_FLAG_NO_OFFSET;
+ func->set_name (fname);
+
+ LoadObject *omp = get_OMP_LoadObject ();
+ func->module = omp->noname;
+ omp->noname->functions->append (func);
+ omp->functions->append (func);
+ omp_functions->store (n, func);
+ }
+ return func;
+}
+
+// Divide the original createExperiment() into two steps
+// In part1, we just create the data structure, in part2, if
+// we decide to keep the experiment around, add it to various
+// lists in DbeSession
+Experiment *
+DbeSession::createExperimentPart1 ()
+{
+ Experiment *exp = new Experiment ();
+ return exp;
+}
+
+void
+DbeSession::createExperimentPart2 (Experiment *exp)
+{
+ int ind = expGroups->size ();
+ if (ind > 0)
+ {
+ ExpGroup *gr = expGroups->fetch (ind - 1);
+ exp->groupId = gr->groupId;
+ gr->append (exp);
+ }
+ exp->setExpIdx (exps->size ());
+ exp->setUserExpId (++user_exp_id_counter);
+ exps->append (exp);
+}
+
+Experiment *
+DbeSession::createExperiment ()
+{
+ Experiment *exp = new Experiment ();
+ append (exp);
+ return exp;
+}
+
+void
+DbeSession::append (Experiment *exp)
+{
+ exp->setExpIdx (exps->size ());
+ exp->setUserExpId (++user_exp_id_counter);
+ exps->append (exp);
+ if (exp->founder_exp)
+ {
+ if (exp->founder_exp->children_exps == NULL)
+ exp->founder_exp->children_exps = new Vector<Experiment *>;
+ exp->founder_exp->children_exps->append (exp);
+ if (exp->founder_exp->groupId > 0)
+ {
+ exp->groupId = exp->founder_exp->groupId;
+ expGroups->get (exp->groupId - 1)->append (exp);
+ }
+ }
+ if (exp->groupId == 0)
+ {
+ long ind = VecSize (expGroups);
+ if (ind > 0)
+ {
+ ExpGroup *gr = expGroups->get (ind - 1);
+ exp->groupId = gr->groupId;
+ gr->append (exp);
+ }
+ }
+}
+
+void
+DbeSession::append (Hwcentry *h)
+{
+ if (hwcentries == NULL)
+ hwcentries = new Vector<Hwcentry*>;
+ hwcentries->append (h);
+}
+
+int
+DbeSession::ngoodexps ()
+{
+ return exps->size ();
+}
+
+int
+DbeSession::createView (int index, int cloneindex)
+{
+ // ensure that there is no view with that index
+ DbeView *dbev = getView (index);
+ if (dbev != NULL)
+ abort ();
+
+ // find the view to be cloned
+ dbev = getView (cloneindex);
+ DbeView *newview;
+ if (dbev == NULL)
+ newview = new DbeView (theApplication, settings, index);
+ else
+ newview = new DbeView (dbev, index);
+ views->append (newview);
+ return index;
+}
+
+DbeView *
+DbeSession::getView (int index)
+{
+ int i;
+ DbeView *dbev;
+ Vec_loop (DbeView*, views, i, dbev)
+ {
+ if (dbev->vindex == index)
+ return dbev;
+ }
+ return NULL;
+}
+
+void
+DbeSession::dropView (int index)
+{
+ int i;
+ DbeView *dbev;
+
+ Vec_loop (DbeView*, views, i, dbev)
+ {
+ if (dbev->vindex == index)
+ {
+ views->remove (i);
+ delete dbev;
+ return;
+ }
+ }
+ // view not found; ignore for now
+}
+
+Vector<char*> *
+DbeSession::get_group_or_expt (char *path)
+{
+ Vector<char*> *exp_list = new Vector<char*>;
+ FILE *fptr;
+ char *new_path, buf[MAXPATHLEN], name[MAXPATHLEN];
+
+ fptr = fopen (path, NTXT ("r"));
+ if (!fptr || !fgets (buf, (int) sizeof (buf), fptr)
+ || strncmp (buf, SP_GROUP_HEADER, strlen (SP_GROUP_HEADER)))
+ {
+ // it's not an experiment group
+ new_path = dbe_strdup (path);
+ new_path = canonical_path (new_path);
+ exp_list->append (new_path);
+ }
+ else
+ {
+ // it is an experiment group, read the list to get them all
+ while (fgets (buf, (int) sizeof (buf), fptr))
+ {
+ if ((*buf != '#') && (sscanf (buf, NTXT ("%s"), name) == 1))
+ {
+ new_path = dbe_strdup (name);
+ new_path = canonical_path (new_path);
+ exp_list->append (new_path);
+ }
+ }
+ }
+ if (fptr)
+ fclose (fptr);
+ return exp_list;
+}
+
+#define GET_INT_VAL(v, s, len) \
+ for (v = len = 0; isdigit(*s); s++, len++) { v = v * 10 + (*s -'0'); }
+
+static int
+dir_name_cmp (const void *a, const void *b)
+{
+ char *s1 = *((char **) a);
+ char *s2 = *((char **) b);
+ while (*s1)
+ {
+ if (isdigit (*s1) && isdigit (*s2))
+ {
+ int v1, v2, len1, len2;
+ GET_INT_VAL (v1, s1, len1);
+ GET_INT_VAL (v2, s2, len2);
+ if (v1 != v2)
+ return v1 - v2;
+ if (len1 != len2)
+ return len2 - len1;
+ continue;
+ }
+ if (*s1 != *s2)
+ break;
+ s1++;
+ s2++;
+ }
+ return *s1 - *s2;
+}
+
+static int
+read_experiment_data_in_parallel (void *arg)
+{
+ exp_ctx *ctx = (exp_ctx *) arg;
+ Experiment *dexp = ctx->exp;
+ bool read_ahead = ctx->read_ahead;
+ dexp->read_experiment_data (read_ahead);
+ free (ctx);
+ return 0;
+}
+
+void
+DbeSession::open_experiment (Experiment *exp, char *path)
+{
+ exp->open (path);
+ if (exp->get_status () != Experiment::FAILURE)
+ exp->read_experiment_data (false);
+ exp->open_epilogue ();
+
+ // Update all DbeViews
+ for (int i = 0, sz = views->size (); i < sz; i++)
+ {
+ DbeView *dbev = views->fetch (i);
+ dbev->add_experiment (exp->getExpIdx (), true);
+ }
+
+ if (exp->get_status () == Experiment::FAILURE)
+ {
+ check_tab_avail ();
+ return;
+ }
+
+ char *discard_tiny = getenv (NTXT ("SP_ANALYZER_DISCARD_TINY_EXPERIMENTS"));
+ int user_specified_tiny_threshold = DEFAULT_TINY_THRESHOLD; // in milliseconds
+ if (discard_tiny != NULL)
+ {
+ user_specified_tiny_threshold = (atoi (discard_tiny));
+ if (user_specified_tiny_threshold < 0)
+ user_specified_tiny_threshold = DEFAULT_TINY_THRESHOLD;
+ }
+
+ // Open descendant experiments
+ DIR *exp_dir = opendir (path);
+ if (exp_dir == NULL)
+ {
+ check_tab_avail ();
+ return;
+ }
+
+ Vector<char*> *exp_names = new Vector<char*>();
+ struct dirent *entry = NULL;
+ while ((entry = readdir (exp_dir)) != NULL)
+ {
+ if (entry->d_name[0] != '_')
+ continue;
+ size_t len = strlen (entry->d_name);
+ if (len < 3 || strcmp (entry->d_name + len - 3, NTXT (".er")) != 0)
+ continue;
+ exp_names->append (dbe_strdup (entry->d_name));
+ }
+ closedir (exp_dir);
+ exp_names->sort (dir_name_cmp);
+ Experiment **t_exp_list = new Experiment *[exp_names->size ()];
+ int nsubexps = 0;
+
+ for (int j = 0, jsz = exp_names->size (); j < jsz; j++)
+ {
+ t_exp_list[j] = NULL;
+
+ char *lineage_name = exp_names->fetch (j);
+ struct stat64 sbuf;
+ char *dpath = dbe_sprintf (NTXT ("%s/%s"), path, lineage_name);
+
+ // look for experiments with no profile collected
+ if (user_specified_tiny_threshold == DEFAULT_TINY_THRESHOLD)
+ {
+ char *frinfoname = dbe_sprintf (NTXT ("%s/%s"), dpath, "data." SP_FRINFO_FILE);
+ int st = dbe_stat (frinfoname, &sbuf);
+ free (frinfoname);
+ if (st == 0)
+ {
+ // if no profile/trace data do not process this experiment any further
+ if (sbuf.st_size == 0)
+ {
+ free (dpath);
+ continue;
+ }
+ }
+ }
+ else
+ { // check if dpath is a directory
+ if (dbe_stat (dpath, &sbuf) != 0)
+ {
+ free (dpath);
+ continue;
+ }
+ else if (!S_ISDIR (sbuf.st_mode))
+ {
+ free (dpath);
+ continue;
+ }
+ }
+ size_t lineage_name_len = strlen (lineage_name);
+ lineage_name[lineage_name_len - 3] = 0; /* remove .er */
+ Experiment *dexp = new Experiment ();
+ dexp->founder_exp = exp;
+ if (user_specified_tiny_threshold > DEFAULT_TINY_THRESHOLD)
+ {
+ dexp->setTinyThreshold (user_specified_tiny_threshold);
+ dexp->open (dpath);
+ if (dexp->isDiscardedTinyExperiment ())
+ {
+ delete dexp;
+ free (dpath);
+ continue;
+ }
+ }
+ else
+ dexp->open (dpath);
+ append (dexp);
+ t_exp_list[j] = dexp;
+ nsubexps++;
+ dexp->set_clock (exp->clock);
+
+ // DbeView add_experiment() is split into two parts
+ // add_subexperiment() is called repeeatedly for
+ // all sub_experiments, later add_experiment_epilogue() finishes up the task
+ for (int i = 0, sz = views->size (); i < sz; i++)
+ {
+ DbeView *dbev = views->fetch (i);
+ bool enabled = settings->check_en_desc (lineage_name, dexp->utargname);
+ dbev->add_subexperiment (dexp->getExpIdx (), enabled);
+ }
+ free (dpath);
+ }
+
+ for (int i = 0, sz = views->size (); i < sz; i++)
+ {
+ DbeView *dbev = views->fetch (i);
+ dbev->add_experiment_epilogue ();
+ }
+
+ DbeThreadPool * threadPool = new DbeThreadPool (-1);
+ for (int j = 0, jsz = exp_names->size (); j < jsz; j++)
+ {
+ if (t_exp_list[j] == NULL) continue;
+ Experiment *dexp = t_exp_list[j];
+ exp_ctx *new_ctx = (exp_ctx*) malloc (sizeof (exp_ctx));
+ new_ctx->path = NULL;
+ new_ctx->exp = dexp;
+ new_ctx->ds = this;
+ new_ctx->read_ahead = true;
+ DbeQueue *q = new DbeQueue (read_experiment_data_in_parallel, new_ctx);
+ threadPool->put_queue (q);
+ }
+ threadPool->wait_queues ();
+ delete threadPool;
+
+ for (long j = 0, jsz = exp_names->size (); j < jsz; j++)
+ {
+ if (t_exp_list[j] == NULL) continue;
+ Experiment *dexp = t_exp_list[j];
+ dexp->open_epilogue ();
+ }
+ exp_names->destroy ();
+ delete[] t_exp_list;
+ delete exp_names;
+
+ // update setting for leaklist and dataspace
+ check_tab_avail ();
+}
+
+void
+DbeSession::append_mesgs (StringBuilder *sb, char *path, Experiment *exp)
+{
+ if (exp->fetch_errors () != NULL)
+ {
+ // yes, there were errors
+ char *ststr = pr_mesgs (exp->fetch_errors (), NTXT (""), NTXT (""));
+ sb->append (path);
+ sb->append (NTXT (": "));
+ sb->append (ststr);
+ free (ststr);
+ }
+
+ Emsg *m = exp->fetch_warnings ();
+ if (m != NULL)
+ {
+ sb->append (path);
+ sb->append (NTXT (": "));
+ if (!is_interactive ())
+ sb->append (GTXT ("Experiment has warnings, see header for details\n"));
+ else
+ sb->append (GTXT ("Experiment has warnings, see experiment panel for details\n"));
+ }
+
+ // Check for descendant experiments that are not loaded
+ int num_desc = VecSize (exp->children_exps);
+ if ((num_desc > 0) && !settings->check_en_desc (NULL, NULL))
+ {
+ char *s;
+ if (!is_interactive ())
+ s = dbe_sprintf (GTXT ("Has %d descendant(s), use commands controlling selection to load descendant data\n"), num_desc);
+ else
+ s = dbe_sprintf (GTXT ("Has %d descendant(s), use filter panel to load descendant data\n"), num_desc);
+ sb->append (path);
+ sb->append (NTXT (": "));
+ sb->append (s);
+ free (s);
+ }
+}
+
+Experiment *
+DbeSession::get_exp (int exp_ind)
+{
+ if (exp_ind < 0 || exp_ind >= exps->size ())
+ return NULL;
+ Experiment *exp = exps->fetch (exp_ind);
+ exp->setExpIdx (exp_ind);
+ return exp;
+}
+
+Vector<Vector<char*>*> *
+DbeSession::getExperimensGroups ()
+{
+ if (dbeSession->expGroups == NULL || dbeSession->expGroups->size () == 0)
+ return NULL;
+ bool compare_mode = expGroups->size () > 1;
+ Vector<Vector<char*>*> *groups = new Vector<Vector<char*>*> (
+ compare_mode ? expGroups->size () : 1);
+ for (int i = 0; i < expGroups->size (); i++)
+ {
+ ExpGroup *grp = expGroups->fetch (i);
+ Vector<Experiment*> *founders = grp->get_founders ();
+ if (founders && founders->size () != 0)
+ {
+ Vector<char *> *names = new Vector<char*> (founders->size ());
+ for (int j = 0; j < founders->size (); j++)
+ {
+ Experiment *exp = founders->fetch (j);
+ names->append (dbe_strdup (exp->get_expt_name ()));
+ }
+ if (compare_mode || groups->size () == 0)
+ groups->append (names);
+ else
+ groups->fetch (0)->addAll (names);
+ }
+ delete founders;
+ }
+ return groups;
+}
+
+char *
+DbeSession::setExperimentsGroups (Vector<Vector<char*>*> *groups)
+{
+ StringBuilder sb;
+ for (int i = 0; i < groups->size (); i++)
+ {
+ Vector<char *> *names = groups->fetch (i);
+ ExpGroup *grp;
+ if (names->size () == 1)
+ grp = new ExpGroup (names->fetch (0));
+ else
+ {
+ char *nm = dbe_sprintf (GTXT ("Group %d"), i + 1);
+ grp = new ExpGroup (nm);
+ free (nm);
+ }
+ expGroups->append (grp);
+ grp->groupId = expGroups->size ();
+
+ for (int j = 0; j < names->size (); j++)
+ {
+ char *path = names->fetch (j);
+ size_t len = strlen (path);
+ if ((len > 4) && !strcmp (path + len - 4, NTXT (".erg")))
+ {
+ Vector<char*> *lst = get_group_or_expt (path);
+ for (int j1 = 0; j1 < lst->size (); j1++)
+ {
+ Experiment *exp = new Experiment ();
+ append (exp);
+ open_experiment (exp, lst->get (j1));
+ if (exp->get_status () == Experiment::FAILURE)
+ append_mesgs (&sb, path, exp);
+ }
+ lst->destroy ();
+ delete lst;
+ }
+ else
+ {
+ Experiment *exp = new Experiment ();
+ append (exp);
+ open_experiment (exp, path);
+ if (exp->get_status () == Experiment::FAILURE)
+ append_mesgs (&sb, path, exp);
+ }
+ }
+ }
+
+ for (int i = 0, sz = views->size (); i < sz; i++)
+ {
+ DbeView *dbev = views->fetch (i);
+ dbev->update_advanced_filter ();
+ int cmp = dbev->get_settings ()->get_compare_mode ();
+ dbev->set_compare_mode (CMP_DISABLE);
+ dbev->set_compare_mode (cmp);
+ }
+ return sb.length () == 0 ? NULL : sb.toString ();
+}
+
+char *
+DbeSession::drop_experiment (int exp_ind)
+{
+ DbeView *dbev;
+ int index;
+ Experiment *exp2;
+
+ status_ompavail = -1;
+ Experiment *exp = exps->fetch (exp_ind);
+
+ // If this is a sub experiment, don't do it
+ if (exp->founder_exp != NULL) // this is a sub experiment; don't do it
+ return (dbe_strdup (GTXT ("Can not drop subexperiments")));
+
+ if (VecSize (exp->children_exps) > 0)
+ for (;;)
+ {
+ // search the list of experiments to find all that have this one as founder
+ bool found = false;
+ Vec_loop (Experiment*, exps, index, exp2)
+ {
+ if (exp2->founder_exp == exp)
+ {
+ exp2->founder_exp = NULL;
+ drop_experiment (index);
+ found = true;
+ break;
+ }
+ }
+ if (found == false)
+ break;
+ }
+
+ // then proceed to finish the drop
+ Vec_loop (DbeView*, views, index, dbev)
+ {
+ dbev->drop_experiment (exp_ind);
+ }
+
+ int old_cnt = expGroups->size ();
+ for (int i = 0; i < old_cnt; i++)
+ {
+ ExpGroup *gr = expGroups->fetch (i);
+ if (gr->groupId == exp->groupId)
+ {
+ gr->drop_experiment (exp);
+ if ((gr->founder == NULL) && (gr->exps->size () == 0))
+ {
+ delete gr;
+ expGroups->remove (i);
+ }
+ break;
+ }
+ }
+ delete exps->remove (exp_ind);
+ if (old_cnt != expGroups->size ())
+ {
+ for (int i = 0, sz = expGroups->size (); i < sz; i++)
+ {
+ ExpGroup *gr = expGroups->fetch (i);
+ gr->groupId = i + 1;
+ Vector<Experiment*> *expList = gr->exps;
+ for (int i1 = 0, sz1 = expList->size (); i1 < sz1; i1++)
+ expList->fetch (i1)->groupId = gr->groupId;
+ }
+ for (int i = 0, sz = views->size (); i < sz; i++)
+ {
+ dbev = views->fetch (i);
+ int cmp = dbev->get_compare_mode ();
+ dbev->set_compare_mode (CMP_DISABLE);
+ dbev->set_compare_mode (cmp);
+ }
+ }
+ check_tab_avail (); // update tab availability
+ return NULL;
+}
+
+int
+DbeSession::find_experiment (char *path)
+{
+ Experiment *exp;
+ int index;
+ Vec_loop (Experiment*, exps, index, exp)
+ {
+ if (strcmp (exp->get_expt_name (), path) == 0)
+ return exp->getExpIdx ();
+ }
+ return -1;
+}
+
+LoadObject *
+DbeSession::createLoadObject (const char *nm, int64_t cksum)
+{
+ return loadObjMap->sync_create_item (nm, cksum);
+}
+
+LoadObject *
+DbeSession::createLoadObject (const char *nm, const char *runTimePath, DbeFile *df)
+{
+ return loadObjMap->sync_create_item (nm, runTimePath, df);
+}
+
+void
+DbeSession::append (LoadObject *lobj)
+{
+ Histable *obj = lobj; // workaround for a C++ problem
+ objs->append (obj);
+ lobj->id = objs->size () - 1;
+ lobjs->append (lobj);
+ lobj->seg_idx = lobjs->size () - 1;
+ char *loname = lobj->get_pathname ();
+ dbeFiles->put (loname, lobj->dbeFile);
+}
+
+DbeJarFile *
+DbeSession::get_JarFile (const char *name)
+{
+ DbeJarFile *jf = dbeJarFiles->get (name);
+ if (jf == NULL)
+ {
+ jf = new DbeJarFile (name);
+ dbeJarFiles->put (name, jf);
+ }
+ return jf;
+}
+
+Module *
+DbeSession::createModule (LoadObject *lo, const char *nm)
+{
+ Module *mod = new Module ();
+ Histable *obj = mod; // workaround for a C++ problem
+ objs->append (obj);
+ mod->id = objs->size () - 1;
+ mod->loadobject = lo;
+ mod->set_name (dbe_strdup (nm ? nm : localized_SP_UNKNOWN_NAME));
+ lo->seg_modules->append (mod);
+ return mod;
+}
+
+Module *
+DbeSession::createUnknownModule (LoadObject *lo)
+{
+ Module *mod = createModule (lo, localized_SP_UNKNOWN_NAME);
+ mod->flags |= MOD_FLAG_UNKNOWN;
+ mod->set_file_name (dbe_strdup (localized_SP_UNKNOWN_NAME));
+ return mod;
+}
+
+SourceFile *
+DbeSession::createSourceFile (const char *_path)
+{
+ char *path = (char *) _path;
+ if (strncmp (path, NTXT ("./"), 2) == 0)
+ path += 2;
+ SourceFile *source = sourcesMap->get (path);
+ if (source == NULL)
+ {
+ source = new SourceFile (path);
+ (void) sourcesMap->put (path, source);
+ append (source);
+ }
+ return source;
+}
+
+Function *
+DbeSession::createFunction ()
+{
+ Function *func = new Function (objs->size ());
+ Histable *obj = func; // workaround for a C++ problem
+ objs->append (obj);
+ return func;
+}
+
+JMethod *
+DbeSession::createJMethod ()
+{
+ JMethod *jmthd = new JMethod (objs->size ());
+ Histable *obj = jmthd; // workaround for a C++ problem
+ objs->append (obj);
+ return jmthd;
+}
+
+Module *
+DbeSession::createClassFile (char *className)
+{
+ ClassFile *cls = new ClassFile ();
+ cls->set_name (className);
+ char *clpath = cls->get_java_file_name (className, true);
+ cls->dbeFile = getDbeFile (clpath, DbeFile::F_JAVACLASS);
+ free (clpath);
+ Histable *obj = cls; // workaround for a C++ problem
+ objs->append (obj);
+ cls->id = objs->size () - 1;
+ return cls;
+}
+
+Histable *
+DbeSession::createHistObject (Histable::Type type)
+{
+ switch (type)
+ {
+ case Histable::DOBJECT:
+ {
+ DataObject *dataobj = new DataObject ();
+ dobjs->append (dataobj);
+ dataobj->id = dobjs->size () - 1;
+ return dataobj;
+ }
+ default:
+ assert (0);
+ }
+ return NULL;
+}
+
+DataObject *
+DbeSession::createDataObject ()
+{
+ DataObject *dataobj = new DataObject ();
+ dobjs->append (dataobj);
+ dataobj->id = dobjs->size () - 1;
+ return dataobj;
+}
+
+DataObject *
+DbeSession::createDataObject (DataObject *dobj, DataObject *parent)
+{
+ DataObject *dataobj = new DataObject ();
+ dataobj->size = dobj->size;
+ dataobj->offset = dobj->offset;
+ dataobj->parent = parent;
+ dataobj->set_dobjname (dobj->get_typename (), dobj->get_instname ());
+ dobjs->append (dataobj);
+ dataobj->id = dobjs->size () - 1;
+ return dataobj;
+}
+
+DataObject *
+DbeSession::createMasterDataObject (DataObject *dobj)
+{
+ DataObject *parent = NULL;
+ if (dobj->parent)
+ { // define master parent first
+ parent = find_dobj_master (dobj->parent);
+ if (!parent)
+ { // clone master from this dataobject parent
+ parent = createDataObject (dobj->parent);
+ parent->scope = NULL; // master is scope-less
+ Dprintf (DEBUG_DATAOBJ,
+ "Master DataObject(%llu) cloned from (%llu) %s\n",
+ (ull_t) parent->id, (ull_t) dobj->parent->id,
+ dobj->parent->get_name ());
+ // clone master DataObject elements
+ Vector<DataObject*> *delem = get_dobj_elements (dobj->parent);
+ int element_index = 0;
+ DataObject *element = NULL;
+ Vec_loop (DataObject*, delem, element_index, element)
+ {
+ DataObject *master_element = createDataObject (element, parent);
+ master_element->scope = NULL; // master is scope-less
+ Dprintf (DEBUG_DATAOBJ,
+ "Member DataObject(%llu) cloned from (%llu) %s\n",
+ (ull_t) master_element->id, (ull_t) element->id,
+ element->get_name ());
+ }
+ }
+ else
+ Dprintf (DEBUG_DATAOBJ, "Master DataObject(%llu) clone found (%llu) %s\n",
+ (ull_t) parent->id, (ull_t) dobj->parent->id,
+ dobj->parent->get_name ());
+ }
+
+ DataObject *master = find_dobj_master (dobj);
+ if (!master)
+ { // clone master from this dataobject
+ master = createDataObject (dobj, parent);
+ master->scope = NULL; // master is scope-less
+ Dprintf (DEBUG_DATAOBJ, "Master DataObject(%llu) cloned from (%llu) %s\n",
+ (ull_t) master->id, (ull_t) dobj->id, dobj->get_name ());
+ }
+ else
+ Dprintf (DEBUG_DATAOBJ, "Master DataObject(%llu) clone found (%llu) %s\n",
+ (ull_t) master->id, (ull_t) dobj->id, dobj->get_name ());
+ return master;
+}
+
+void
+DbeSession::insert_metric (BaseMetric *mtr, Vector<BaseMetric*> *mlist)
+{
+ if ((mtr->get_flavors () & Metric::STATIC) == 0)
+ {
+ // insert in front of the first STATIC
+ for (int i = 0, mlist_sz = mlist->size (); i < mlist_sz; i++)
+ {
+ BaseMetric *m = mlist->fetch (i);
+ if (m->get_flavors () & Metric::STATIC)
+ {
+ mlist->insert (i, mtr);
+ return;
+ }
+ }
+ }
+ mlist->append (mtr);
+}
+
+BaseMetricTreeNode*
+DbeSession::get_reg_metrics_tree ()
+{
+ if (reg_metrics_tree == NULL)
+ // Can't init earlier because BaseMetric() requires DbeSession::ql_parse
+ reg_metrics_tree = new BaseMetricTreeNode ();
+ return reg_metrics_tree;
+}
+
+void
+DbeSession::update_metric_tree (BaseMetric *m)
+{
+ get_reg_metrics_tree ()->register_metric (m);
+}
+
+BaseMetric *
+DbeSession::register_metric_expr (BaseMetric::Type type, char *cmd, char *expr_spec)
+{
+ BaseMetric *m = find_metric (type, cmd, expr_spec);
+ if (m)
+ return m;
+ BaseMetric *bm = find_metric (type, cmd, NULL); // clone this version
+ m = new BaseMetric (*bm);
+ m->set_expr_spec (expr_spec);
+ insert_metric (m, reg_metrics);
+ return m;
+}
+
+BaseMetric *
+DbeSession::register_metric (BaseMetric::Type type)
+{
+ BaseMetric *m = find_metric (type, NULL, NULL);
+ if (m)
+ return m;
+ m = new BaseMetric (type);
+ insert_metric (m, reg_metrics);
+ update_metric_tree (m);
+ return m;
+}
+
+BaseMetric *
+DbeSession::register_metric (Hwcentry *ctr, const char* aux, const char* username)
+{
+ BaseMetric *m = find_metric (BaseMetric::HWCNTR, aux, NULL);
+ if (m)
+ // That may be a problem when metrics aren't an exact match.
+ // For example, memoryspace is disabled in one experiment and not in another.
+ return m;
+ if (ctr->timecvt)
+ {
+ char *time_cmd = dbe_sprintf (NTXT ("t%s"), aux);
+ char *time_username = dbe_sprintf (GTXT ("%s Time"),
+ ctr->metric ? ctr->metric :
+ (ctr->name ? ctr->name : ctr->int_name));
+ BaseMetric *m1;
+ if (ipc_mode)
+ {
+ // Two visible metrics are presented in GUI
+ m1 = new BaseMetric (ctr, aux, time_cmd, time_username, VAL_TIMEVAL);
+ insert_metric (m1, reg_metrics);
+ update_metric_tree (m1);
+ m = new BaseMetric (ctr, aux, username, VAL_VALUE, m1);
+ }
+ else
+ {
+ // Only one visible metric is presented in er_print
+ m1 = new BaseMetric (ctr, aux, time_cmd, time_username, VAL_TIMEVAL | VAL_INTERNAL);
+ insert_metric (m1, reg_metrics);
+ m = new BaseMetric (ctr, aux, username, VAL_TIMEVAL | VAL_VALUE, m1);
+ }
+ free (time_cmd);
+ free (time_username);
+ }
+ else
+ m = new BaseMetric (ctr, aux, username, VAL_VALUE);
+ insert_metric (m, reg_metrics);
+ update_metric_tree (m);
+ return m;
+}
+
+BaseMetric *
+DbeSession::register_metric (char *name, char *username, char *_def)
+{
+ BaseMetric *m = find_metric (BaseMetric::DERIVED, name, NULL);
+ if (m)
+ return m;
+ Definition *p = Definition::add_definition (_def);
+ if (p == NULL)
+ return NULL;
+ m = new BaseMetric (name, username, p);
+ insert_metric (m, reg_metrics);
+ update_metric_tree (m);
+ return m;
+}
+
+void
+DbeSession::drop_metric (BaseMetric *mtr)
+{
+ Countable *cnt;
+ int index;
+
+ Vec_loop (Countable*, metrics, index, cnt)
+ {
+ if (mtr == (BaseMetric *) cnt->item)
+ {
+ cnt->ref_count--;
+ if (cnt->ref_count == 0)
+ {
+ // Remove this metric from all views
+ DbeView *dbev;
+ int index2;
+ Vec_loop (DbeView*, views, index2, dbev)
+ {
+ dbev->reset_metrics ();
+ }
+ delete metrics->remove (index);
+ delete mtr;
+ return;
+ }
+ }
+ }
+}
+
+BaseMetric *
+DbeSession::find_metric (BaseMetric::Type type, const char *cmd, const char *expr_spec)
+{
+ for (int i = 0, sz = reg_metrics->size (); i < sz; i++)
+ {
+ BaseMetric *bm = reg_metrics->fetch (i);
+ if (bm->get_type () == type && dbe_strcmp (bm->get_expr_spec (), expr_spec) == 0)
+ {
+ if ((type == BaseMetric::DERIVED || type == BaseMetric::HWCNTR)
+ && dbe_strcmp (bm->get_cmd (), cmd) != 0)
+ continue;
+ return bm;
+ }
+ }
+ return NULL;
+}
+
+BaseMetric *
+DbeSession::find_base_reg_metric (char * mcmd)
+{
+ for (int i = 0, sz = reg_metrics->size (); i < sz; i++)
+ {
+ BaseMetric *bm = reg_metrics->fetch (i);
+ if (bm->get_expr_spec () != NULL)
+ continue; // skip compare metrics
+ if (dbe_strcmp (bm->get_cmd (), mcmd) == 0)
+ return bm;
+ }
+ return NULL;
+}
+
+Vector<BaseMetric*> *
+DbeSession::get_base_reg_metrics ()
+{
+ Vector<BaseMetric*> *mlist = new Vector<BaseMetric*>;
+ Vector<BaseMetric*> *ml = get_all_reg_metrics ();
+ for (int i = 0, sz = ml->size (); i < sz; i++)
+ {
+ BaseMetric *m = ml->fetch (i);
+ if (m->get_expr_spec () == NULL)
+ mlist->append (m);
+ }
+ return mlist;
+}
+
+void
+DbeSession::check_tab_avail ()
+{
+ DbeView *dbev;
+ int index;
+ // tell the views to update their tab lists
+ Vec_loop (DbeView*, views, index, dbev)
+ {
+ dbev->get_settings ()->updateTabAvailability ();
+ }
+}
+
+bool
+DbeSession::is_datamode_available ()
+{
+ Experiment *exp;
+ int index;
+ Vec_loop (Experiment*, exps, index, exp)
+ {
+ if (exp->dataspaceavail)
+ return true;
+ }
+ return false;
+}
+
+bool
+DbeSession::is_leaklist_available ()
+{
+ Experiment *exp;
+ int index;
+ Vec_loop (Experiment*, exps, index, exp)
+ {
+ if (exp->leaklistavail)
+ return true;
+ }
+ return false;
+}
+
+bool
+DbeSession::is_heapdata_available ()
+{
+ Experiment *exp;
+ int index;
+ Vec_loop (Experiment*, exps, index, exp)
+ {
+ if (exp->heapdataavail)
+ return true;
+ }
+ return false;
+}
+
+bool
+DbeSession::is_iodata_available ()
+{
+ Experiment *exp;
+ int index;
+ Vec_loop (Experiment*, exps, index, exp)
+ {
+ if (exp->iodataavail)
+ return true;
+ }
+ return false;
+}
+
+bool
+DbeSession::is_racelist_available ()
+{
+ Experiment *exp;
+ int index;
+ Vec_loop (Experiment*, exps, index, exp)
+ {
+ if (exp->racelistavail)
+ return true;
+ }
+ return false;
+}
+
+bool
+DbeSession::is_deadlocklist_available ()
+{
+ Experiment *exp;
+ int index;
+ Vec_loop (Experiment*, exps, index, exp)
+ {
+ if (exp->deadlocklistavail)
+ return true;
+ }
+ return false;
+}
+
+bool
+DbeSession::is_timeline_available ()
+{
+ Experiment *exp;
+ int index;
+ Vec_loop (Experiment*, exps, index, exp)
+ {
+ if (exp->timelineavail)
+ return true;
+ }
+ return false;
+}
+
+bool
+DbeSession::is_ifreq_available ()
+{
+ Experiment *exp;
+ int index;
+ Vec_loop (Experiment*, exps, index, exp)
+ {
+ if (exp->ifreqavail)
+ return true;
+ }
+ return false;
+}
+
+bool
+DbeSession::is_omp_available ()
+{
+ if (status_ompavail == -1)
+ {
+ status_ompavail = 0;
+ for (int i = 0, sz = exps ? exps->size () : 0; i < sz; i++)
+ {
+ Experiment *exp = exps->fetch (i);
+ if (exp->ompavail)
+ {
+ status_ompavail = 1;
+ break;
+ }
+ }
+ }
+ return status_ompavail == 1;
+}
+
+bool
+DbeSession::has_java ()
+{
+ int status_has_java = 0;
+ for (int i = 0, sz = exps ? exps->size () : 0; i < sz; i++)
+ {
+ Experiment *exp = exps->fetch (i);
+ if (exp->has_java)
+ {
+ status_has_java = 1;
+ break;
+ }
+ }
+ return status_has_java == 1;
+}
+
+bool
+DbeSession::has_ompavail ()
+{
+ int status_has_ompavail = 0;
+ for (int i = 0, sz = exps ? exps->size () : 0; i < sz; i++)
+ {
+ Experiment *exp = exps->fetch (i);
+ if (exp->ompavail)
+ {
+ status_has_ompavail = 1;
+ break;
+ }
+ }
+ return status_has_ompavail == 1;
+}
+
+int
+DbeSession::get_clock (int whichexp)
+{
+ // XXXX clock frequency should be an attribute of each CPU,
+ // XXX and not a property of the session
+ // if whichexp is -1, pick the first exp that has a clock
+ // otherwise return the clock from the numbered experiment
+ Experiment *exp;
+ if (whichexp != -1)
+ {
+ exp = get_exp (whichexp);
+ if (exp != NULL)
+ return exp->clock;
+ return 0;
+ }
+ int n = nexps ();
+ for (int i = 0; i < n; i++)
+ {
+ exp = get_exp (i);
+ if (exp != NULL && exp->clock != 0)
+ return exp->clock;
+ }
+ return 0;
+}
+
+LoadObject *
+DbeSession::find_lobj_by_name (const char *lobj_name, int64_t cksum)
+{
+ return loadObjMap->get (lobj_name, cksum);
+}
+
+static unsigned
+hash (char *s)
+{
+ unsigned res = 0;
+ for (int i = 0; i < 64 && *s; i++)
+ res = res * 13 + *s++;
+ return res;
+}
+
+// This method is introduced to fix performance
+// problems with the data space profiling in the
+// current release. A better design is desired.
+void
+DbeSession::dobj_updateHT (DataObject *dobj)
+{
+ unsigned index = hash (dobj->get_unannotated_name ()) % HTableSize;
+ List *list = new List;
+ list->val = (void*) dobj;
+ list->next = dnameHTable[index];
+ dnameHTable[index] = list;
+}
+
+DataObject *
+DbeSession::find_dobj_by_name (char *dobj_name)
+{
+ unsigned index = hash (dobj_name) % HTableSize;
+ List *list = dnameHTable[index];
+ for (; list; list = list->next)
+ {
+ DataObject *d = (DataObject*) list->val;
+ if (strcmp (d->get_unannotated_name (), dobj_name) == 0)
+ return d;
+ }
+ return (DataObject *) NULL;
+}
+
+DataObject *
+DbeSession::find_dobj_match (DataObject *dobj)
+{
+ char *dobj_name = dobj->get_unannotated_name ();
+ unsigned index = hash (dobj_name) % HTableSize;
+ List *list = dnameHTable[index];
+ for (; list; list = list->next)
+ {
+ DataObject *d = (DataObject*) list->val;
+ if (strcmp (d->get_unannotated_name (), dobj_name) == 0
+ && d->size == dobj->size && d->offset == dobj->offset
+ && d->scope == dobj->scope)
+ return d;
+ }
+ return (DataObject *) NULL;
+}
+
+DataObject *
+DbeSession::find_dobj_master (DataObject *dobj)
+{
+ char *dobj_name = dobj->get_unannotated_name ();
+ unsigned index = hash (dobj_name) % HTableSize;
+ List *list = dnameHTable[index];
+ for (; list; list = list->next)
+ {
+ DataObject *d = (DataObject*) list->val;
+ // XXXX should parent also match?
+ if (strcmp (d->get_unannotated_name (), dobj_name) == 0
+ && d->size == dobj->size && d->offset == dobj->offset
+ && d->master == NULL && d->scope == NULL)
+ return d;
+ }
+ return (DataObject *) NULL;
+}
+
+Vector<DataObject*>*
+DbeSession::get_dobj_elements (DataObject *dobj)
+{
+ DataObject *d;
+ int index;
+ Vector<DataObject*> *elements = new Vector<DataObject*>;
+ if (dobj == d_total)
+ return elements;
+ Vec_loop (DataObject*, dobjs, index, d)
+ {
+ if (d->get_parent () && d->get_parent () == dobj)
+ elements->append (d);
+ }
+ return elements;
+}
+
+Vector<LoadObject*>*
+DbeSession::get_text_segments ()
+{
+ LoadObject *lo;
+ int index;
+ Vector<LoadObject*> *tlobjs = new Vector<LoadObject*>;
+ Vec_loop (LoadObject*, lobjs, index, lo)
+ {
+ if (lo->type == LoadObject::SEG_TEXT)
+ tlobjs->append (lo);
+ }
+ return tlobjs;
+}
+
+static long long
+getNumber (const char *s, char * &last)
+{
+ long long val;
+ char *sp;
+ errno = 0;
+ val = strtoll (s, &sp, 0);
+ if (errno == EINVAL)
+ last = NULL;
+ else
+ {
+ while (isspace (*sp))
+ sp++;
+ last = sp;
+ }
+ return (val);
+}
+
+bool
+DbeSession::find_obj (FILE *dis_file, FILE *inp_file, Histable *&obj,
+ char *name, const char *sel, Histable::Type type, bool xdefault)
+{
+ Vector<Histable*> *obj_lst;
+ int which = -1;
+ char *last = NULL;
+ if (type != Histable::FUNCTION && sel)
+ {
+ // check that a number has been provided
+ which = (int) getNumber (sel, last);
+ if (last == NULL || *last != '\0')
+ {
+ fprintf (stderr, GTXT ("Error: Invalid number entered: %s\n"), sel);
+ sel = NULL;
+ which = 0;
+ }
+ which--;
+ }
+ obj_lst = new Vector<Histable*>;
+ switch (type)
+ {
+ case Histable::FUNCTION:
+ obj = map_NametoFunction (name, obj_lst, sel);
+ break;
+ case Histable::MODULE:
+ obj = map_NametoModule (name, obj_lst, which);
+ break;
+ case Histable::LOADOBJECT:
+ obj = map_NametoLoadObject (name, obj_lst, which);
+ break;
+ case Histable::DOBJECT:
+ obj = map_NametoDataObject (name, obj_lst, which);
+ break;
+ default:
+ abort (); // unexpected Histable!
+ }
+
+ if ((obj == NULL) && (obj_lst->size () > 0))
+ {
+ if (obj_lst->size () == 1)
+ which = 0;
+ else
+ {
+ if (sel && (which < 0 || which >= obj_lst->size ()))
+ fprintf (stderr, GTXT ("Error: Invalid number entered: %s\n"), sel);
+ if (xdefault)
+ {
+ fprintf (stderr, GTXT ("Default selection \"1\" made\n"));
+ which = 0;
+ }
+ else
+ {
+ which = ask_which (dis_file, inp_file, obj_lst, name);
+ if (which == -1)
+ {
+ delete obj_lst;
+ return false;
+ }
+ }
+ }
+ obj = obj_lst->fetch (which);
+ }
+ delete obj_lst;
+ return true;
+}
+
+int
+DbeSession::ask_which (FILE *dis_file, FILE *inp_file,
+ Vector<Histable*> *list, char *name)
+{
+ Histable *hitem;
+ Function *func;
+ Module *module;
+ int which, index, index1;
+ char *item_name, *lo_name, *fname, *last;
+ char buf[BUFSIZ];
+ for (;;)
+ {
+ fprintf (dis_file, GTXT ("Available name list:\n"));
+ fprintf (dis_file, GTXT ("%8d) Cancel\n"), 0);
+ Vec_loop (Histable*, list, index, hitem)
+ {
+ index1 = index + 1;
+ item_name = hitem->get_name ();
+ switch (hitem->get_type ())
+ {
+ case Histable::FUNCTION:
+ func = (Function *) hitem;
+ module = func->module;
+
+ // id == -1 indicates er_src invocation
+ if (module == NULL || (module->lang_code == Sp_lang_java
+ && module->loadobject->id == -1))
+ fprintf (dis_file, NTXT ("%8d) %s\n"), index1, item_name);
+ else
+ {
+ lo_name = module->loadobject->get_pathname ();
+ fname = (module->file_name && *module->file_name) ?
+ module->file_name : module->get_name ();
+ if (fname && *fname)
+ fprintf (dis_file, NTXT ("%8d) %s %s:0x%llx (%s)\n"), index1,
+ item_name, lo_name, (ull_t) func->img_offset, fname);
+ else
+ fprintf (dis_file, NTXT ("%8d) %s %s:0x%llx\n"), index1,
+ item_name, lo_name, (ull_t) func->img_offset);
+ }
+ break;
+ case Histable::MODULE:
+ module = (Module *) hitem;
+ lo_name = module->loadobject->get_pathname ();
+ if (name[strlen (name) - 1] ==
+ module->file_name[strlen (module->file_name) - 1])
+ fprintf (dis_file, NTXT ("%8d) %s(%s)\n"), index1,
+ module->file_name, lo_name);
+ else
+ fprintf (dis_file, NTXT ("%8d) %s(%s)\n"), index1, item_name,
+ lo_name);
+ break;
+ default:
+ fprintf (dis_file, NTXT ("%8d) %s\n"), index1, item_name);
+ break;
+ }
+ }
+ if (inp_file != stdin)
+ return -1;
+ fprintf (dis_file, GTXT ("Enter selection: "));
+ if (fgets (buf, (int) sizeof (buf), inp_file) == NULL)
+ {
+ fprintf (stderr, GTXT ("Error: Invalid number entered:\n"));
+ return -1;
+ }
+ which = (int) getNumber (buf, last);
+ if (last && *last == '\0')
+ if (which >= 0 && which <= list->size ())
+ return which - 1;
+ fprintf (stderr, GTXT ("Error: Invalid number entered: %s\n"), buf);
+ }
+}
+
+static bool
+match_basename (char *name, char *full_name, int len = -1)
+{
+ if (full_name == NULL)
+ return false;
+ if (!strchr (name, '/'))
+ full_name = get_basename (full_name);
+ if (len == -1)
+ return streq (name, full_name);
+ return strncmp (name, full_name, len) == 0;
+}
+
+LoadObject *
+DbeSession::map_NametoLoadObject (char *name, Vector<Histable*> *list, int which)
+{
+ // Search the tree to find the first module whose module name
+ // matches "name" or whose source file name matches "name"
+ // Issues: is the name a pathname, or a base name?
+ // Should we look at suffix to disambiguate?
+ LoadObject *loitem;
+ int index;
+ Vec_loop (LoadObject*, lobjs, index, loitem)
+ {
+ // try pathname first
+ // if failed, try object name next
+ if (match_basename (name, loitem->get_pathname ()) ||
+ match_basename (name, loitem->get_name ()))
+ {
+ if (which == list->size ())
+ return loitem;
+ list->append (loitem);
+ }
+ }
+ return (LoadObject *) NULL;
+}
+
+Module *
+DbeSession::map_NametoModule (char *name, Vector<Histable*> *list, int which)
+{
+ // Search the tree to find the first loadobject whose loadobject name
+ // matches "name".
+
+ // Issues: is the name a pathname, or a base name?
+ // Should we look at suffix to disambiguate?
+ LoadObject *loitem;
+ Module *mitem;
+ int index1, index2;
+ Vec_loop (LoadObject*, lobjs, index1, loitem)
+ {
+ Vec_loop (Module*, loitem->seg_modules, index2, mitem)
+ {
+ // try source name first
+ // if failed, try object name next
+ if (match_basename (name, mitem->file_name) ||
+ match_basename (name, mitem->get_name ()))
+ {
+ if (which == list->size ())
+ return mitem;
+ list->append (mitem);
+ }
+ }
+ }
+ return (Module *) NULL;
+}
+
+Function *
+DbeSession::map_NametoFunction (char *name, Vector<Histable*> *list,
+ const char *sel)
+{
+ // Search the tree to find the first function whose
+ // name matches "name".
+ // Issues: is the name a full name, or a short name?
+ // Is it a demangled name? If so, what about spaces
+ // within the name?
+ // Is there a way to return all names that match?
+ // How can the user specify a particular function of that name?
+ LoadObject *loitem;
+ Function *fitem, *main_func = NULL;
+ Module *mitem, *main_mod = NULL;
+ int index1, index2, index3, which = -1;
+ if (sel)
+ {
+ char *last = NULL;
+ if (*sel == '@')
+ { // 'sel' is "@seg_num:address"
+ which = (int) getNumber (sel + 1, last);
+ if (last == NULL || *last != ':' || (which < 0) || (which >= lobjs->size ()))
+ {
+ fprintf (stderr, GTXT ("Error: Invalid number entered: %s\n"), sel);
+ return NULL;
+ }
+ uint64_t address = getNumber (last + 1, last);
+ if (last == NULL || *last != '\0')
+ {
+ fprintf (stderr, GTXT ("Error: Invalid number entered: %s\n"), sel);
+ return NULL;
+ }
+ loitem = lobjs->fetch (which);
+ Vec_loop (Module*, loitem->seg_modules, index2, mitem)
+ {
+ Vec_loop (Function*, mitem->functions, index3, fitem)
+ {
+ if (address == fitem->img_offset && match_FName (name, fitem))
+ return fitem;
+ }
+ }
+ return NULL;
+ }
+
+ which = (int) getNumber (sel, last);
+ if (last == NULL || *last != '\0')
+ {
+ fprintf (stderr, GTXT ("Error: Invalid number entered: %s\n"), sel);
+ return NULL;
+ }
+ which--;
+ }
+
+ int len_path = 0;
+ char *with_path = name;
+ name = StrRchr (name, '`');
+ if (name != with_path)
+ len_path = (int) (name - with_path);
+ else
+ with_path = NULL;
+
+ Vec_loop (LoadObject*, lobjs, index1, loitem)
+ {
+ Vec_loop (Module*, loitem->seg_modules, index2, mitem)
+ {
+ if (with_path)
+ { // with file name
+ // try source name first
+ // if failed, try object name next
+ if (!match_basename (with_path, mitem->file_name, len_path) &&
+ !match_basename (with_path, mitem->get_name (), len_path))
+ continue;
+ }
+ Vec_loop (Function*, mitem->functions, index3, fitem)
+ {
+ if (match_FName (name, fitem))
+ {
+ if (which == list->size ())
+ return fitem;
+ list->append (fitem);
+ continue;
+ }
+ if (streq (fitem->get_name (), NTXT ("MAIN_")) && mitem->is_fortran ())
+ {
+ main_func = fitem;
+ main_mod = mitem;
+ }
+ }
+ }
+ }
+
+ if (main_mod && main_func)
+ {
+ main_mod->read_stabs ();
+ if (streq (main_func->get_match_name (), name) && which <= 1)
+ return main_func;
+ }
+ return (Function *) NULL;
+}
+
+DataObject *
+DbeSession::map_NametoDataObject (char *name, Vector<Histable*> *list,
+ int which)
+{
+ // Search master list to find dataobjects whose names match "name"
+ // selecting only the entry corresponding to "which" if it is not -1.
+ // Issues: is the name fully qualified or only partially?
+ DataObject *ditem = NULL;
+ int index;
+ char *full_name;
+ Vec_loop (DataObject*, dobjs, index, ditem)
+ {
+ if (ditem->scope) continue; // skip non-master dataobjects
+
+ // try fully-qualified dataobject name first
+ if ((full_name = ditem->get_name ()) != NULL)
+ {
+ if (streq (name, full_name))
+ {
+ if (which == list->size ())
+ return ditem;
+ list->append (ditem);
+ }
+ }
+ }
+ if (list->size () > 0)
+ return ditem; // return fully-qualified match
+
+ // if fully-qualified name doesn't match anything, try a partial match
+ Vec_loop (DataObject*, dobjs, index, ditem)
+ {
+ if (ditem->scope) continue; // skip non-master dataobjects
+
+ // try fully-qualified dataobject name first
+ if ((full_name = ditem->get_name ()) != NULL)
+ {
+ if (strstr (full_name, name))
+ {
+ if (which == list->size ())
+ return ditem;
+ list->append (ditem);
+ }
+ }
+ }
+ return (DataObject *) NULL;
+}
+
+bool
+DbeSession::match_FName (char *name, Function *func)
+{
+ size_t len;
+ char buf[MAXDBUF];
+ char *full_name;
+ if (streq (func->get_name (), name)) // try full name comparison
+ return true;
+ if (streq (func->get_mangled_name (), name)) // try mangled name
+ return true;
+ if (streq (func->get_match_name (), name)) // try match name
+ return true;
+
+ Module *md = func->module; // try FORTRAN name
+ if (md && md->is_fortran ())
+ {
+ char *mangled_name = func->get_mangled_name ();
+ len = strlen (name);
+ if (((len + 1) == strlen (mangled_name)) &&
+ (strncmp (name, mangled_name, len) == 0))
+ return true;
+ }
+ snprintf (buf, sizeof (buf), NTXT ("%s"), func->get_name ());
+ full_name = buf;
+ char *arg = NULL; // find modifier and C++ class name
+ int i = get_paren (buf);
+ if (i >= 0)
+ {
+ arg = buf + i;
+ *arg = '\0';
+ }
+
+ char *mod = strchr (full_name, ' ');
+ char *cls = strchr (full_name, ':');
+
+ if (mod)
+ {
+ len = mod - full_name + 1;
+ if (!strncmp (full_name, name, len))
+ name += len;
+ full_name += len;
+ if (streq (full_name, name)) // try without modifier
+ return true;
+ }
+
+ size_t len_cmp = strlen (name);
+ if (arg)
+ {
+ *arg = '(';
+ len = arg - full_name; // try without 'args'
+ if (len_cmp == len && !strncmp (full_name, name, len))
+ return true;
+ if (cls)
+ {
+ len = arg - cls - 2; // and without 'class name'
+ if ((len_cmp == len) && !strncmp (cls + 2, name, len))
+ return true;
+ }
+ }
+
+ if (cls)
+ {
+ len = cls - full_name; // try C++ class name only
+ if (len_cmp == len && !strncmp (full_name, name, len))
+ return true;
+ if (streq (cls + 2, name)) // try without 'class name'
+ return true;
+ }
+ return false;
+}
+
+bool
+DbeSession::add_path (char *path)
+{
+ return add_path (path, get_search_path ());
+}
+
+bool
+DbeSession::add_classpath (char *path)
+{
+ return add_path (path, classpath);
+}
+
+Vector<DbeFile*> *
+DbeSession::get_classpath ()
+{
+ if (classpath_df == NULL)
+ classpath_df = new Vector<DbeFile*>;
+ for (int i = classpath_df->size (), sz = classpath->size (); i < sz; i++)
+ classpath_df->store (i, getDbeFile (classpath->fetch (i),
+ DbeFile::F_DIR_OR_JAR));
+ return classpath_df;
+}
+
+bool
+DbeSession::add_path (char *path, Vector<char*> *pathes)
+{
+ bool result = false;
+ Vector <char *> *tokens = split_str (path, ':');
+ for (long j = 0, jsz = VecSize (tokens); j < jsz; j++)
+ {
+ char *spath = tokens->get (j);
+ // Don't append path if it's already there
+ bool got = false;
+ for (int i = 0, sz = pathes->size (); i < sz; i++)
+ {
+ char *nm = pathes->get (i);
+ if (streq (nm, spath))
+ {
+ got = true;
+ break;
+ }
+ }
+ if (!got)
+ {
+ pathes->append (spath);
+ result = true;
+ }
+ else
+ free (spath);
+ }
+ delete tokens;
+ return result;
+}
+
+void
+DbeSession::set_need_refind ()
+{
+ Vector<DbeFile*> *f_list = dbeFiles->values ();
+ for (long i = 0, sz = f_list == NULL ? 0 : f_list->size (); i < sz; i++)
+ {
+ DbeFile *f = f_list->get (i);
+ f->set_need_refind (true);
+ }
+ delete f_list;
+ for (long i = 0, sz = sources == NULL ? 0 : sources->size (); i < sz; i++)
+ {
+ SourceFile *f = sources->get (i);
+ if (f && f->dbeFile)
+ f->dbeFile->set_need_refind (true);
+ }
+}
+
+void
+DbeSession::set_search_path (Vector<char*> *path, bool reset)
+{
+ if (reset)
+ search_path->destroy ();
+ for (int i = 0, sz = path == NULL ? 0 : path->size (); i < sz; i++)
+ {
+ char *name = path->fetch (i);
+ if (add_path (name))
+ reset = true;
+ }
+ if (reset)
+ {
+ set_need_refind ();
+
+ // now reset the string setting for it
+ StringBuilder sb;
+ for (int i = 0, sz = search_path == NULL ? 0 : search_path->size (); i < sz; i++)
+ {
+ char *name = search_path->fetch (i);
+ if (sb.length () != 0)
+ sb.append (':');
+ sb.append (name);
+ }
+ free (settings->str_search_path);
+ settings->str_search_path = sb.toString ();
+ }
+}
+
+void
+DbeSession::set_search_path (char *_lpath, bool reset)
+{
+ Vector<char *> *path = new Vector<char*>;
+ char *lpath = dbe_strdup (_lpath);
+ for (char *s = lpath; s;)
+ {
+ path->append (s);
+ s = strchr (s, ':');
+ if (s)
+ {
+ *s = 0;
+ s++;
+ }
+ }
+ set_search_path (path, reset);
+ delete path;
+ free (lpath);
+}
+
+void
+DbeSession::set_pathmaps (Vector<pathmap_t*> *newPathMap)
+{
+ set_need_refind ();
+ settings->set_pathmaps (newPathMap);
+}
+
+Vector<pathmap_t*> *
+DbeSession::get_pathmaps ()
+{
+ return settings->pathmaps;
+}
+
+void
+DbeSession::mobj_define (MemObjType_t *mobj)
+{
+ settings->mobj_define (mobj, false);
+ DbeView *dbev;
+ int index;
+ Vec_loop (DbeView*, views, index, dbev)
+ {
+ dbev->get_settings ()->mobj_define (mobj, false);
+ }
+}
+
+void
+DbeSession::dump_segments (FILE *out)
+{
+ int index;
+ LoadObject *loitem;
+ Vec_loop (LoadObject*, lobjs, index, loitem)
+ {
+ fprintf (out, NTXT ("Segment %d -- %s -- %s\n\n"),
+ index, loitem->get_name (), loitem->get_pathname ());
+ loitem->dump_functions (out);
+ fprintf (out, NTXT ("\n End Segment %d -- %s -- %s\n\n"),
+ index, loitem->get_name (), loitem->get_pathname ());
+ }
+}
+
+void
+DbeSession::dump_dataobjects (FILE *out)
+{
+ DataObject *ditem;
+ int index;
+
+ fprintf (out, NTXT ("\nMaster list of DataObjects:\n"));
+ Vec_loop (DataObject*, dobjs, index, ditem)
+ {
+ Histable* scope = ditem->get_scope ();
+ DataObject* parent = ditem->get_parent ();
+ DataObject* master = ditem->get_master ();
+ if (parent != NULL)
+ fprintf (out, "id %6lld: [%4lld] parent = %6lld, offset = %+4lld %s\n",
+ (ll_t) ditem->id, (ll_t) ditem->get_size (),
+ (ll_t) parent->id, (ll_t) ditem->get_offset (),
+ ditem->get_name ());
+ else
+ {
+ // parent is NULL
+ fprintf (out, NTXT ("id %6lld: [%4lld] %s "),
+ (ll_t) ditem->id, (ll_t) ditem->get_size (),
+ ditem->get_name ());
+ if (master != NULL)
+ fprintf (out, NTXT (" master=%lld "), (ll_t) master->id);
+ else if (scope != NULL)
+ fprintf (out, NTXT (" master=?? "));
+ else
+ fprintf (out, NTXT (" MASTER "));
+#if DEBUG
+ if (scope != NULL)
+ {
+ switch (scope->get_type ())
+ {
+ case Histable::LOADOBJECT:
+ case Histable::FUNCTION:
+ fprintf (out, NTXT ("%s"), scope->get_name ());
+ break;
+ case Histable::MODULE:
+ {
+ char *filename = get_basename (scope->get_name ());
+ fprintf (out, NTXT ("%s"), filename);
+ break;
+ }
+ default:
+ fprintf (out, NTXT (" Unexpected scope %d:%s"),
+ scope->get_type (), scope->get_name ());
+ }
+ }
+#endif
+ fprintf (out, NTXT ("\n"));
+ }
+ }
+}
+
+void
+DbeSession::dump_map (FILE *out)
+{
+ Experiment *exp;
+ int index;
+ Vec_loop (Experiment*, exps, index, exp)
+ {
+ exp->dump_map (out);
+ }
+}
+
+void
+DbeSession::dump_stacks (FILE *outfile)
+{
+ Experiment *exp;
+ int n = nexps ();
+ FILE *f = (outfile == NULL ? stderr : outfile);
+ for (int i = 0; i < n; i++)
+ {
+ exp = get_exp (i);
+ fprintf (f, GTXT ("Experiment %d -- %s\n"), i, exp->get_expt_name ());
+ exp->dump_stacks (f);
+ }
+}
+
+void
+DbeSession::propNames_name_store (int propId, const char *propName)
+{
+ PropDescr *prop = new PropDescr (propId, propName);
+ prop->flags = PRFLAG_NOSHOW; // do not show descriptions
+ propNames->store (propId, prop);
+}
+
+void
+DbeSession::propNames_name_store (int propId, const char* propName,
+ const char* propUname, VType_type dataType,
+ int flags)
+{
+ PropDescr *prop = new PropDescr (propId, propName);
+ prop->vtype = dataType;
+ prop->uname = dbe_strdup (propUname);
+ prop->flags = flags;
+ propNames->store (propId, prop);
+}
+
+char *
+DbeSession::propNames_name_fetch (int i)
+{
+ PropDescr *prop = propNames->fetch (i);
+ if (prop)
+ return prop->name;
+ return NULL;
+}
+
+int
+DbeSession::registerPropertyName (const char *name)
+{
+ if (name == NULL)
+ return PROP_NONE;
+ for (int i = 0; i < propNames->size (); i++)
+ {
+ char *pname = propNames_name_fetch (i);
+ if (pname && strcasecmp (pname, name) == 0)
+ return i;
+ }
+ int propId = propNames->size ();
+ propNames_name_store (propId, name);
+ return propId;
+}
+
+int
+DbeSession::getPropIdByName (const char *name)
+{
+ if (name == NULL)
+ return PROP_NONE;
+ for (int i = 0; i < propNames->size (); i++)
+ {
+ char *pname = propNames_name_fetch (i);
+ if (pname && strcasecmp (pname, name) == 0)
+ return i;
+ }
+ return PROP_NONE;
+}
+
+char *
+DbeSession::getPropName (int propId)
+{
+ if (!propNames)
+ return NULL;
+ if (propId < 0 || propId >= propNames->size ())
+ return NULL;
+ return dbe_strdup (propNames_name_fetch (propId));
+}
+
+char *
+DbeSession::getPropUName (int propId)
+{
+ if (!propNames)
+ return NULL;
+ if (propId < 0 || propId >= propNames->size ())
+ return NULL;
+ PropDescr *prop = propNames->fetch (propId);
+ if (prop)
+ return dbe_strdup (prop->uname);
+ return NULL;
+}
+
+void
+DbeSession::append (UserLabel *lbl)
+{
+ if (lbl->expr)
+ {
+ if (userLabels == NULL)
+ userLabels = new Vector<UserLabel*> ();
+ userLabels->append (lbl);
+ }
+}
+
+void
+DbeSession::append (SourceFile *sf)
+{
+ sources->append (sf);
+ objs->append (sf);
+}
+
+UserLabel *
+DbeSession::findUserLabel (const char *name)
+{
+ for (int i = 0, sz = userLabels ? userLabels->size () : 0; i < sz; i++)
+ {
+ UserLabel *lbl = userLabels->fetch (i);
+ if (strcasecmp (lbl->name, name) == 0)
+ return lbl;
+ }
+ return NULL;
+}
+
+Expression *
+DbeSession::findObjDefByName (const char *name)
+{
+ Expression *expr = NULL;
+
+ MemObjType_t *mot = MemorySpace::findMemSpaceByName (name);
+ if (mot != NULL)
+ {
+ char *index_expr_str = mot->index_expr;
+ expr = ql_parse (index_expr_str);
+ }
+
+ if (expr == NULL)
+ {
+ int indxtype = findIndexSpaceByName (name);
+ expr = getIndexSpaceExpr (indxtype);
+ }
+ if (expr == NULL)
+ {
+ UserLabel *ulbl = findUserLabel (name);
+ if (ulbl)
+ expr = ulbl->expr;
+ }
+ return expr;
+}
+
+Expression *
+DbeSession::ql_parse (const char *expr_spec)
+{
+ if (expr_spec == NULL)
+ expr_spec = "";
+ QL::Result result (expr_spec);
+ QL::Parser qlparser (result);
+ if (qlparser.parse () != 0)
+ return NULL;
+ return result ();
+}
+
+Vector<void*> *
+DbeSession::getIndxObjDescriptions ()
+{
+ int size = dyn_indxobj_indx;
+ if (size == 0)
+ return NULL;
+ Vector<int> *type = new Vector<int>(dyn_indxobj_indx);
+ Vector<char*> *desc = new Vector<char*>(dyn_indxobj_indx);
+ Vector<char*> *i18ndesc = new Vector<char*>(dyn_indxobj_indx);
+ Vector<char> *mnemonic = new Vector<char>(dyn_indxobj_indx);
+ Vector<int> *orderList = new Vector<int>(dyn_indxobj_indx);
+ Vector<char*> *exprList = new Vector<char*>(dyn_indxobj_indx);
+ Vector<char*> *sdesc = new Vector<char*>(dyn_indxobj_indx);
+ Vector<char*> *ldesc = new Vector<char*>(dyn_indxobj_indx);
+
+ for (long i = 0, sz = VecSize (dyn_indxobj); i < sz; i++)
+ {
+ IndexObjType_t *tot = dyn_indxobj->get (i);
+ if (tot->memObj == NULL)
+ {
+ type->append ((int) tot->type);
+ desc->append (dbe_strdup (tot->name));
+ i18ndesc->append (dbe_strdup (tot->i18n_name));
+ sdesc->append (dbe_strdup (tot->short_description));
+ ldesc->append (dbe_strdup (tot->long_description));
+ mnemonic->append (tot->mnemonic);
+ orderList->append (settings->indx_tab_order->fetch (i));
+ exprList->append (dbe_strdup (tot->index_expr_str));
+ }
+ }
+ Vector<void*> *res = new Vector<void*>(8);
+ res->store (0, type);
+ res->store (1, desc);
+ res->store (2, mnemonic);
+ res->store (3, i18ndesc);
+ res->store (4, orderList);
+ res->store (5, exprList);
+ res->store (6, sdesc);
+ res->store (7, ldesc);
+ return (res);
+}
+
+// Static function to get a vector of custom index object definitions
+Vector<void*> *
+DbeSession::getCustomIndxObjects ()
+{
+ Vector<char*> *name = new Vector<char*>;
+ Vector<char*> *formula = new Vector<char*>;
+ for (long i = dyn_indxobj_indx_fixed, sz = VecSize (dyn_indxobj); i < sz; i++)
+ {
+ IndexObjType_t *tot = dyn_indxobj->get (i);
+ if (tot->memObj == NULL)
+ {
+ name->append (dbe_strdup (tot->name));
+ formula->append (dbe_strdup (tot->index_expr_str));
+ }
+ }
+ Vector<void*> *res = new Vector<void*>(2);
+ res->store (0, name);
+ res->store (1, formula);
+ return (res);
+}
+
+// Static function to define a new index object type
+char *
+DbeSession::indxobj_define (const char *mname, char *i18nname, const char *index_expr_str, char *short_description, char *long_description)
+{
+ if (mname == NULL)
+ return dbe_strdup (GTXT ("No index object type name has been specified."));
+ if (isalpha ((int) (mname[0])) == 0)
+ return dbe_sprintf (GTXT ("Index Object type name %s does not begin with an alphabetic character"),
+ mname);
+ const char *p = mname;
+ while (*p != 0)
+ {
+ if ((isalnum ((int) (*p)) == 0) && (*p != '_'))
+ return dbe_sprintf (GTXT ("Index Object type name %s contains a non-alphanumeric character"),
+ mname);
+ p++;
+ }
+
+ // make sure the name is not in use
+ if (MemorySpace::findMemSpaceByName (mname) != NULL)
+ return dbe_sprintf (GTXT ("Memory/Index Object type name %s is already defined"),
+ mname);
+
+ int idxx = findIndexSpaceByName (mname);
+ if (idxx >= 0)
+ {
+ IndexObjType_t *mt = dyn_indxobj->fetch (idxx);
+ if (strcmp (mt->index_expr_str, index_expr_str) == 0)
+ // It's a redefinition, but the new definition is the same
+ return NULL;
+ return dbe_sprintf (GTXT ("Memory/Index Object type name %s is already defined"),
+ mname);
+ }
+ if (index_expr_str == NULL)
+ return dbe_strdup (GTXT ("No index-expr has been specified."));
+ if (strlen (index_expr_str) == 0)
+ return dbe_sprintf (GTXT ("Index Object index expression is invalid: %s"),
+ index_expr_str);
+
+ // verify that the index expression parses correctly
+ char *expr_str = dbe_strdup (index_expr_str);
+ Expression *expr = ql_parse (expr_str);
+ if (expr == NULL)
+ return dbe_sprintf (GTXT ("Index Object index expression is invalid: %s"),
+ expr_str);
+
+ // It's OK, create the new table entry
+ IndexObjType_t *tot = new IndexObjType_t;
+ tot->type = dyn_indxobj_indx++;
+ tot->name = dbe_strdup (mname);
+ tot->i18n_name = dbe_strdup (i18nname);
+ tot->short_description = dbe_strdup (short_description);
+ tot->long_description = dbe_strdup (long_description);
+ tot->index_expr_str = expr_str;
+ tot->index_expr = expr;
+ tot->mnemonic = mname[0];
+
+ // add it to the list
+ dyn_indxobj->append (tot);
+ idxobjs->append (new HashMap<uint64_t, Histable*>);
+
+ // tell the session
+ settings->indxobj_define (tot->type, false);
+
+ DbeView *dbev;
+ int index;
+ Vec_loop (DbeView*, views, index, dbev)
+ {
+ dbev->addIndexSpace (tot->type);
+ }
+ return NULL;
+}
+
+char *
+DbeSession::getIndexSpaceName (int index)
+{
+ if (index < 0 || index >= dyn_indxobj->size ())
+ return NULL;
+ return dyn_indxobj->fetch (index)->name;
+}
+
+char *
+DbeSession::getIndexSpaceDescr (int index)
+{
+ if (index < 0 || index >= dyn_indxobj->size ())
+ return NULL;
+ return dyn_indxobj->fetch (index)->i18n_name;
+}
+
+Expression *
+DbeSession::getIndexSpaceExpr (int index)
+{
+ if (index < 0 || index >= dyn_indxobj->size ())
+ return NULL;
+ return dyn_indxobj->fetch (index)->index_expr;
+}
+
+char *
+DbeSession::getIndexSpaceExprStr (int index)
+{
+ if (index < 0 || index >= dyn_indxobj->size ())
+ return NULL;
+ return dyn_indxobj->fetch (index)->index_expr_str;
+}
+
+int
+DbeSession::findIndexSpaceByName (const char *mname)
+{
+ int idx;
+ IndexObjType_t *mt;
+ Vec_loop (IndexObjType_t*, dyn_indxobj, idx, mt)
+ {
+ if (strcasecmp (mt->name, mname) == 0)
+ return idx;
+ }
+ return -1;
+}
+
+void
+DbeSession::removeIndexSpaceByName (const char *mname)
+{
+ IndexObjType_t *indObj = findIndexSpace (mname);
+ if (indObj)
+ indObj->name[0] = 0;
+}
+
+IndexObjType_t *
+DbeSession::getIndexSpace (int index)
+{
+ return ((index < 0) || (index >= VecSize (dyn_indxobj))) ? NULL : dyn_indxobj->get (index);
+}
+
+IndexObjType_t *
+DbeSession::findIndexSpace (const char *mname)
+{
+ return getIndexSpace (findIndexSpaceByName (mname));
+}
+
+void
+DbeSession::get_filter_keywords (Vector<void*> *res)
+{
+ Vector <char*> *kwCategory = (Vector<char*>*) res->fetch (0);
+ Vector <char*> *kwCategoryI18N = (Vector<char*>*) res->fetch (1);
+ Vector <char*> *kwDataType = (Vector<char*>*) res->fetch (2);
+ Vector <char*> *kwKeyword = (Vector<char*>*) res->fetch (3);
+ Vector <char*> *kwFormula = (Vector<char*>*) res->fetch (4);
+ Vector <char*> *kwDescription = (Vector<char*>*) res->fetch (5);
+ Vector <void*> *kwEnumDescs = (Vector<void*>*) res->fetch (6);
+
+ char *vtypeNames[] = VTYPE_TYPE_NAMES;
+ for (long i = 0, sz = userLabels ? userLabels->size () : 0; i < sz; i++)
+ {
+ UserLabel *lbl = userLabels->fetch (i);
+ kwCategory->append (dbe_strdup (NTXT ("FK_LABEL")));
+ kwCategoryI18N->append (dbe_strdup (GTXT ("Labels")));
+ kwDataType->append (dbe_strdup (vtypeNames[TYPE_BOOL]));
+ kwKeyword->append (dbe_strdup (lbl->name));
+ kwFormula->append (dbe_strdup (lbl->str_expr));
+ kwDescription->append (dbe_strdup (lbl->comment));
+ kwEnumDescs->append (NULL);
+ }
+
+ for (long i = 0, sz = propNames ? propNames->size () : 0; i < sz; i++)
+ {
+ PropDescr *prop = propNames->fetch (i);
+ char *pname = prop ? prop->name : NULL;
+ if (pname == NULL || *pname == 0 || prop->flags & PRFLAG_NOSHOW)
+ continue;
+ int vtypeNum = prop->vtype;
+ if (vtypeNum < 0 || vtypeNum >= TYPE_LAST)
+ vtypeNum = TYPE_NONE;
+ kwCategory->append (dbe_strdup (NTXT ("FK_EVTPROP"))); //Event Property
+ kwCategoryI18N->append (dbe_strdup (GTXT ("Misc. Definitions")));
+ kwDataType->append (dbe_strdup (vtypeNames[vtypeNum]));
+ kwKeyword->append (dbe_strdup (pname));
+ kwFormula->append (NULL);
+ kwDescription->append (dbe_strdup (prop->uname));
+ kwEnumDescs->append (NULL);
+ }
+
+ for (long i = 0, sz = dyn_indxobj ? dyn_indxobj->size () : 0; i < sz; i++)
+ {
+ IndexObjType_t *obj = dyn_indxobj->get (i);
+ if (obj->memObj)
+ continue;
+ kwCategory->append (dbe_strdup (NTXT ("FK_IDXOBJ")));
+ kwCategoryI18N->append (dbe_strdup (GTXT ("Index Object Definitions")));
+ kwDataType->append (dbe_strdup (vtypeNames[TYPE_INT64]));
+ kwKeyword->append (dbe_strdup (obj->name));
+ kwFormula->append (dbe_strdup (obj->index_expr_str));
+ kwDescription->append (dbe_strdup (obj->i18n_name));
+ kwEnumDescs->append (NULL);
+ }
+}
+
+Histable *
+DbeSession::findIndexObject (int idxtype, uint64_t idx)
+{
+ HashMap<uint64_t, Histable*> *iobjs = idxobjs->fetch (idxtype);
+ return iobjs->get (idx);
+}
+
+Histable *
+DbeSession::createIndexObject (int idxtype, int64_t idx)
+{
+ HashMap<uint64_t, Histable*> *iobjs = idxobjs->fetch (idxtype);
+
+ Histable *idxobj = iobjs->get (idx);
+ if (idxobj == NULL)
+ {
+ idxobj = new IndexObject (idxtype, idx);
+ if (idx == -1)
+ idxobj->set_name (dbe_strdup (GTXT ("<Unknown>")));
+ iobjs->put (idx, idxobj);
+ }
+
+ return idxobj;
+}
+
+Histable *
+DbeSession::createIndexObject (int idxtype, Histable *hobj)
+{
+ HashMap<uint64_t, Histable*> *iobjs = idxobjs->fetch (idxtype);
+ int64_t idx = hobj ? hobj->id : -1;
+ Histable *idxobj = iobjs->get (idx);
+ if (idxobj == NULL)
+ {
+ idxobj = new IndexObject (idxtype, hobj);
+ if (idx == -1)
+ idxobj->set_name (dbe_strdup (GTXT ("<Unknown>")));
+ iobjs->put (idx, idxobj);
+ }
+
+ return idxobj;
+}
+
+Histable *
+DbeSession::findObjectById (Histable::Type type, int subtype, uint64_t id)
+{
+ switch (type)
+ {
+ case Histable::FUNCTION:
+ case Histable::MODULE:
+ case Histable::LOADOBJECT:
+ return ( id < (uint64_t) objs->size ()) ? objs->fetch ((int) id) : NULL;
+ case Histable::INDEXOBJ:
+ return findIndexObject (subtype, id);
+ // ignoring the following cases
+ case Histable::INSTR:
+ case Histable::LINE:
+ case Histable::EADDR:
+ case Histable::MEMOBJ:
+ case Histable::PAGE:
+ case Histable::DOBJECT:
+ case Histable::SOURCEFILE:
+ case Histable::IOACTFILE:
+ case Histable::IOACTVFD:
+ case Histable::IOCALLSTACK:
+ case Histable::HEAPCALLSTACK:
+ case Histable::OTHER:
+ case Histable::EXPERIMENT:
+ break;
+ }
+ return NULL;
+}
+
+// return a vector of Functions that match the regular expression input string
+Vector<JThread *> *
+DbeSession::match_java_threads (char *ustr, int matchParent,
+ Vector<uint64_t> * &grids,
+ Vector<uint64_t> * &expids)
+{
+ if (ustr == NULL)
+ return NULL;
+
+ char *str = dbe_sprintf (NTXT ("^%s$"), ustr);
+ regex_t regex_desc;
+ int rc = regcomp (&regex_desc, str, REG_EXTENDED | REG_NOSUB | REG_NEWLINE);
+ free (str);
+ if (rc) // syntax error in parsing string
+ return NULL;
+
+ // allocate the new vector
+ Vector<JThread *> *ret = new Vector<JThread*>;
+ grids = new Vector<uint64_t>;
+ expids = new Vector<uint64_t>;
+
+ int index;
+ JThread *jthread;
+ int expid;
+ Experiment* exp;
+ Vec_loop (Experiment*, exps, expid, exp)
+ {
+
+ Vec_loop (JThread*, exp->get_jthreads (), index, jthread)
+ {
+ const char * name;
+ if (matchParent)
+ name = jthread->parent_name;
+ else
+ name = jthread->group_name;
+ if (name == NULL)
+ name = "";
+ if (!regexec (&regex_desc, name, 0, NULL, 0))
+ {
+ // this one matches
+ ret->append (jthread);
+ grids->append (exp->groupId);
+ expids->append (exp->getUserExpId ());
+ }
+ }
+ }
+
+ regfree (&regex_desc);
+ return ret;
+}
+
+// return a vector of Functions that match the regular expression input string
+Vector<Function *> *
+DbeSession::match_func_names (const char *ustr, Histable::NameFormat nfmt)
+{
+ if (ustr == NULL)
+ return NULL;
+ char *str = dbe_sprintf (NTXT ("^%s$"), ustr);
+ regex_t regex_desc;
+ int rc = regcomp (&regex_desc, str, REG_EXTENDED | REG_NOSUB | REG_NEWLINE);
+ free (str);
+ if (rc) // syntax error in parsing string
+ return NULL;
+
+ // allocate the new vector
+ Vector<Function *> *ret = new Vector<Function*>;
+
+ int index;
+ Histable *obj;
+ Vec_loop (Histable*, objs, index, obj)
+ {
+ if (obj->get_type () == Histable::FUNCTION)
+ {
+ Function *func = (Function*) obj;
+ if (!regexec (&regex_desc, func->get_name (nfmt), 0, NULL, 0))
+ // this one matches
+ ret->append (func);
+ }
+ }
+ regfree (&regex_desc);
+ return ret;
+}
+
+// return a vector of Functions that match the regular expression input string
+Vector<FileData *> *
+DbeSession::match_file_names (char *ustr, Histable::NameFormat nfmt)
+{
+ if (ustr == NULL)
+ return NULL;
+ char *str = dbe_sprintf (NTXT ("^%s$"), ustr);
+ regex_t regex_desc;
+ int rc = regcomp (&regex_desc, str, REG_EXTENDED | REG_NOSUB | REG_NEWLINE);
+ free (str);
+ if (rc) // syntax error in parsing string
+ return NULL;
+
+ // allocate the new vector
+ Vector<FileData *> *ret = new Vector<FileData*>;
+ int numExps = nexps ();
+ DefaultMap<int64_t, FileData*>* fDataMap;
+ Vector<FileData *> *fDataObjs;
+ FileData *fData;
+ int size;
+ for (int i = 0; i < numExps; i++)
+ {
+ Experiment *exp = get_exp (i);
+ fDataMap = exp->getFDataMap ();
+ fDataObjs = fDataMap->values ();
+ size = fDataObjs->size ();
+ for (int j = 0; j < size; j++)
+ {
+ fData = fDataObjs->fetch (j);
+ if (fData
+ && !regexec (&regex_desc, fData->get_raw_name (nfmt), 0, NULL, 0))
+ // this one matches
+ ret->append (fData);
+ }
+ }
+ regfree (&regex_desc);
+ return ret;
+}
+
+// return a vector of DataObjects that match the regular expression input string
+Vector<DataObject *> *
+DbeSession::match_dobj_names (char *ustr)
+{
+ if (ustr == NULL)
+ return NULL;
+ char *str = dbe_sprintf (NTXT ("^%s$"), ustr);
+ regex_t regex_desc;
+ int rc = regcomp (&regex_desc, str, REG_EXTENDED | REG_NOSUB | REG_NEWLINE);
+ free (str);
+ if (rc) // syntax error in parsing string
+ return NULL;
+
+ // allocate the new vector
+ Vector<DataObject *> *ret = new Vector<DataObject*>;
+ int index;
+ DataObject *ditem;
+ Vec_loop (DataObject*, dobjs, index, ditem)
+ {
+ // does this one match
+ if (!regexec (&regex_desc, ditem->get_name (), 0, NULL, 0))
+ // this one matches
+ ret->append (ditem);
+ }
+ regfree (&regex_desc);
+ return ret;
+}
+
+void
+DbeSession::dump (char *msg, Vector<BaseMetric*> *mlist)
+{
+ if (msg)
+ fprintf (stderr, "%s\n", msg);
+ int sz = mlist ? mlist->size () : -1;
+ for (int i = 0; i < sz; i++)
+ {
+ BaseMetric *m = mlist->fetch (i);
+ char *s = m->dump ();
+ fprintf (stderr, "%2d %s\n", i, s);
+ free (s);
+ }
+ fprintf (stderr, "======END of mlist[%d] =========\n", sz);
+}
+
+void
+DbeSession::dump (char *msg, Vector<Metric*> *mlist)
+{
+ if (msg)
+ fprintf (stderr, "%s\n", msg);
+ int sz = mlist ? mlist->size () : -1;
+ for (int i = 0; i < sz; i++)
+ {
+ Metric *m = mlist->fetch (i);
+ char *s = m->dump ();
+ fprintf (stderr, "%2d %s\n", i, s);
+ free (s);
+ }
+ fprintf (stderr, "======END of mlist[%d] =========\n", sz);
+}
diff --git a/gprofng/src/DbeSession.cc.1 b/gprofng/src/DbeSession.cc.1
new file mode 100644
index 00000000000..7d635d23add
--- /dev/null
+++ b/gprofng/src/DbeSession.cc.1
@@ -0,0 +1,3531 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <ctype.h>
+#include <stdio.h>
+#include <dirent.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <errno.h>
+#include <sys/param.h>
+
+#include "util.h"
+#include "Application.h"
+#include "Experiment.h"
+#include "ExpGroup.h"
+#include "Expression.h"
+#include "DataObject.h"
+#include "Elf.h"
+#include "Function.h"
+#include "DbeSession.h"
+#include "LoadObject.h"
+#include "DbeSyncMap.h"
+#include "DbeThread.h"
+#include "ClassFile.h"
+#include "IndexObject.h"
+#include "PathTree.h"
+#include "Print.h"
+#include "QLParser.tab.hh"
+#include "DbeView.h"
+#include "MemorySpace.h"
+#include "Module.h"
+#include "SourceFile.h"
+#include "StringBuilder.h"
+#include "BaseMetric.h"
+#include "BaseMetricTreeNode.h"
+#include "Command.h"
+#include "UserLabel.h"
+#include "StringMap.h"
+#include "DbeFile.h"
+#include "DbeJarFile.h"
+#include "IOActivity.h"
+#include "HeapActivity.h"
+
+// This is a universal List structure to organize objects
+// of various types, even if different.
+struct List
+{
+ List *next;
+ void *val;
+};
+
+struct Countable
+{
+ Countable (void *_item)
+ {
+ item = _item;
+ ref_count = 0;
+ }
+
+ void *item;
+ int ref_count;
+};
+
+Platform_t DbeSession::platform =
+#if ARCH(SPARC)
+ Sparc;
+#elif ARCH(Aarch64)
+ Aarch64;
+#else // ARCH(Intel)
+ Intel;
+#endif
+
+// This constant determines the size of the data object name hash table.
+static const int HTableSize = 8192;
+static int DEFAULT_TINY_THRESHOLD = -1;
+
+unsigned int mpmt_debug_opt = 0;
+DbeSession *dbeSession = NULL;
+
+DbeSession::DbeSession (Settings *_settings, bool _ipc_mode, bool _rdt_mode)
+{
+ dbeSession = this;
+ ipc_mode = _ipc_mode;
+ rdt_mode = _rdt_mode;
+ settings = new Settings (_settings);
+ views = new Vector<DbeView*>;
+ exps = new Vector<Experiment*>;
+ lobjs = new Vector<LoadObject*>;
+ objs = new Vector<Histable*>;
+ dobjs = new Vector<DataObject*>;
+ metrics = new Vector<Countable*>;
+ reg_metrics = new Vector<BaseMetric*>;
+ hwcentries = NULL;
+ reg_metrics_tree = NULL; // BaseMetric() requires DbeSession::ql_parse
+ idxobjs = new Vector<HashMap<uint64_t, Histable*>*>;
+ tmp_files = new Vector<char*>;
+ search_path = new Vector<char*>;
+ classpath = new Vector<char*>;
+ classpath_df = NULL;
+ expGroups = new Vector<ExpGroup*>;
+ sourcesMap = new HashMap<char*, SourceFile*>;
+ sources = new Vector<SourceFile*>;
+ comp_lobjs = new HashMap<char*, LoadObject*>;
+ comp_dbelines = new HashMap<char*, DbeLine*>;
+ comp_sources = new HashMap<char*, SourceFile*>;
+ loadObjMap = new DbeSyncMap<LoadObject>;
+ f_special = new Vector<Function*>(LastSpecialFunction);
+ omp_functions = new Vector<Function*>(OMP_LAST_STATE);
+ interactive = false;
+ lib_visibility_used = false;
+
+ // Define all known property names
+ propNames = new Vector<PropDescr*>;
+ propNames_name_store (PROP_NONE, NTXT (""));
+ propNames_name_store (PROP_ATSTAMP, NTXT ("ATSTAMP"));
+ propNames_name_store (PROP_ETSTAMP, NTXT ("ETSTAMP"));
+ propNames_name_store (PROP_TSTAMP, NTXT ("TSTAMP"));
+ propNames_name_store (PROP_THRID, NTXT ("THRID"));
+ propNames_name_store (PROP_LWPID, NTXT ("LWPID"));
+ propNames_name_store (PROP_CPUID, NTXT ("CPUID"));
+ propNames_name_store (PROP_FRINFO, NTXT ("FRINFO"));
+ propNames_name_store (PROP_EVT_TIME, NTXT ("EVT_TIME"));
+
+ // Samples
+ propNames_name_store (PROP_SMPLOBJ, NTXT ("SMPLOBJ"));
+ propNames_name_store (PROP_SAMPLE, NTXT ("SAMPLE"));
+
+ // GCEvents
+ propNames_name_store (PROP_GCEVENTOBJ, NTXT ("GCEVENTOBJ"));
+ propNames_name_store (PROP_GCEVENT, NTXT ("GCEVENT"));
+
+ // Metadata used by some packet types
+ propNames_name_store (PROP_VOIDP_OBJ, NTXT ("VOIDP_OBJ"),
+ NULL, TYPE_UINT64, DDFLAG_NOSHOW);
+
+ // Clock profiling properties
+ propNames_name_store (PROP_UCPU, NTXT ("UCPU"));
+ propNames_name_store (PROP_SCPU, NTXT ("SCPU"));
+ propNames_name_store (PROP_TRAP, NTXT ("TRAP"));
+ propNames_name_store (PROP_TFLT, NTXT ("TFLT"));
+ propNames_name_store (PROP_DFLT, NTXT ("DFLT"));
+ propNames_name_store (PROP_KFLT, NTXT ("KFLT"));
+ propNames_name_store (PROP_ULCK, NTXT ("ULCK"));
+ propNames_name_store (PROP_TSLP, NTXT ("TSLP"));
+ propNames_name_store (PROP_WCPU, NTXT ("WCPU"));
+ propNames_name_store (PROP_TSTP, NTXT ("TSTP"));
+
+ propNames_name_store (PROP_MSTATE, NTXT ("MSTATE"));
+ propNames_name_store (PROP_NTICK, NTXT ("NTICK"));
+ propNames_name_store (PROP_OMPSTATE, NTXT ("OMPSTATE"));
+
+ // Synchronization tracing properties
+ propNames_name_store (PROP_SRQST, NTXT ("SRQST"));
+ propNames_name_store (PROP_SOBJ, NTXT ("SOBJ"));
+
+ // Hardware counter profiling properties
+ propNames_name_store (PROP_HWCTAG, NTXT ("HWCTAG"));
+ propNames_name_store (PROP_HWCINT, NTXT ("HWCINT"));
+ propNames_name_store (PROP_VADDR, NTXT ("VADDR"));
+ propNames_name_store (PROP_PADDR, NTXT ("PADDR"));
+ propNames_name_store (PROP_VIRTPC, NTXT ("VIRTPC"));
+ propNames_name_store (PROP_PHYSPC, NTXT ("PHYSPC"));
+ propNames_name_store (PROP_LWP_LGRP_HOME, NTXT ("LWP_LGRP_HOME"));
+ propNames_name_store (PROP_PS_LGRP_HOME, NTXT ("PS_LGRP_HOME"));
+ propNames_name_store (PROP_EA_PAGESIZE, NTXT ("EA_PAGESIZE"));
+ propNames_name_store (PROP_EA_LGRP, NTXT ("EA_LGRP"));
+ propNames_name_store (PROP_PC_PAGESIZE, NTXT ("PC_PAGESIZE"));
+ propNames_name_store (PROP_PC_LGRP, NTXT ("PC_LGRP"));
+ propNames_name_store (PROP_HWCDOBJ, NTXT ("HWCDOBJ"));
+ propNames_name_store (PROP_MEM_LAT, NTXT ("MEM_LAT"));
+ propNames_name_store (PROP_MEM_SRC, NTXT ("MEM_SRC"));
+
+ // Heap tracing properties
+ propNames_name_store (PROP_HTYPE, NTXT ("HTYPE"));
+ propNames_name_store (PROP_HSIZE, NTXT ("HSIZE"));
+ propNames_name_store (PROP_HVADDR, NTXT ("HVADDR"));
+ propNames_name_store (PROP_HOVADDR, NTXT ("HOVADDR"));
+ propNames_name_store (PROP_HLEAKED, NTXT ("HLEAKED"),
+ GTXT ("Leaked bytes"), TYPE_UINT64, 0);
+ propNames_name_store (PROP_HMEM_USAGE, NTXT ("HMEM_USAGE"));
+ propNames_name_store (PROP_HFREED, NTXT ("HFREED"),
+ GTXT ("Freed bytes"), TYPE_UINT64, 0);
+ propNames_name_store (PROP_HCUR_ALLOCS, NTXT ("HCUR_ALLOCS"),
+ GTXT ("Current allocations"), TYPE_INT64, 0);
+ propNames_name_store (PROP_HCUR_NET_ALLOC, NTXT ("HCUR_NET_ALLOC"),
+ NULL, TYPE_INT64, DDFLAG_NOSHOW);
+ propNames_name_store (PROP_HCUR_LEAKS, NTXT ("HCUR_LEAKS"),
+ GTXT ("Current leaks"), TYPE_UINT64, 0);
+ propNames_name_store (PROP_DDSCR_LNK, NTXT ("DDSCR_LNK"),
+ NULL, TYPE_UINT64, DDFLAG_NOSHOW);
+
+ // IO tracing properties
+ propNames_name_store (PROP_IOTYPE, NTXT ("IOTYPE"));
+ propNames_name_store (PROP_IOFD, NTXT ("IOFD"));
+ propNames_name_store (PROP_IONBYTE, NTXT ("IONBYTE"));
+ propNames_name_store (PROP_IORQST, NTXT ("IORQST"));
+ propNames_name_store (PROP_IOOFD, NTXT ("IOOFD"));
+ propNames_name_store (PROP_IOFNAME, NTXT ("IOFNAME"));
+ propNames_name_store (PROP_IOVFD, NTXT ("IOVFD"));
+ propNames_name_store (PROP_IOFSTYPE, NTXT ("IOFSTYPE"));
+
+ // omptrace raw properties
+ propNames_name_store (PROP_CPRID, NTXT ("CPRID"));
+ propNames_name_store (PROP_PPRID, NTXT ("PPRID"));
+ propNames_name_store (PROP_TSKID, NTXT ("TSKID"));
+ propNames_name_store (PROP_PTSKID, NTXT ("PTSKID"));
+ propNames_name_store (PROP_PRPC, NTXT ("PRPC"));
+
+ // Data race detection properties
+ propNames_name_store (PROP_RID, NTXT ("RID"));
+ propNames_name_store (PROP_RTYPE, NTXT ("RTYPE"));
+ propNames_name_store (PROP_LEAFPC, NTXT ("LEAFPC"));
+ propNames_name_store (PROP_RVADDR, NTXT ("RVADDR"));
+ propNames_name_store (PROP_RCNT, NTXT ("RCNT"));
+
+ // Deadlock detection properties
+ propNames_name_store (PROP_DID, NTXT ("DID"));
+ propNames_name_store (PROP_DLTYPE, NTXT ("DLTYPE"));
+ propNames_name_store (PROP_DTYPE, NTXT ("DTYPE"));
+ propNames_name_store (PROP_DVADDR, NTXT ("DVADDR"));
+
+ // Synthetic properties (queries only)
+ propNames_name_store (PROP_STACK, NTXT ("STACK"));
+ propNames_name_store (PROP_MSTACK, NTXT ("MSTACK"));
+ propNames_name_store (PROP_USTACK, NTXT ("USTACK"));
+ propNames_name_store (PROP_XSTACK, NTXT ("XSTACK"));
+ propNames_name_store (PROP_HSTACK, NTXT ("HSTACK"));
+ propNames_name_store (PROP_STACKID, NTXT ("STACKID"));
+ //propNames_name_store( PROP_CPRID, NTXT("CPRID") );
+ //propNames_name_store( PROP_TSKID, NTXT("TSKID") );
+ propNames_name_store (PROP_JTHREAD, NTXT ("JTHREAD"),
+ GTXT ("Java thread number"), TYPE_UINT64, 0);
+
+ propNames_name_store (PROP_LEAF, NTXT ("LEAF"));
+ propNames_name_store (PROP_DOBJ, NTXT ("DOBJ"));
+ propNames_name_store (PROP_SAMPLE_MAP, NTXT ("SAMPLE_MAP"));
+ propNames_name_store (PROP_GCEVENT_MAP, NTXT ("GCEVENT_MAP"));
+ propNames_name_store (PROP_PID, NTXT ("PID"),
+ GTXT ("Process id"), TYPE_UINT64, 0);
+ propNames_name_store (PROP_EXPID, NTXT ("EXPID"),
+ GTXT ("Experiment id"), TYPE_UINT64, DDFLAG_NOSHOW);
+ propNames_name_store (PROP_EXPID_CMP, NTXT ("EXPID_CMP"),
+ GTXT ("Comparable Experiment Id"), TYPE_UINT64,
+ DDFLAG_NOSHOW); //YXXX find better description
+ propNames_name_store (PROP_EXPGRID, NTXT ("EXPGRID"),
+ GTXT ("Comparison Group id"), TYPE_UINT64, 0);
+ propNames_name_store (PROP_PARREG, NTXT ("PARREG"));
+ propNames_name_store (PROP_TSTAMP_LO, NTXT ("TSTAMP_LO"),
+ GTXT ("Start Timestamp (nanoseconds)"), TYPE_UINT64, 0);
+ propNames_name_store (PROP_TSTAMP_HI, NTXT ("TSTAMP_HI"),
+ GTXT ("End Timestamp (nanoseconds)"), TYPE_UINT64, 0);
+ propNames_name_store (PROP_TSTAMP2, NTXT ("TSTAMP2"),
+ GTXT ("End Timestamp (nanoseconds)"), TYPE_UINT64,
+ DDFLAG_NOSHOW);
+ propNames_name_store (PROP_FREQ_MHZ, NTXT ("FREQ_MHZ"),
+ GTXT ("CPU Frequency, MHz"), TYPE_UINT32, 0);
+ propNames_name_store (PROP_NTICK_USEC, NTXT ("NTICK_USEC"),
+ GTXT ("Clock Profiling Interval, Microseconds"),
+ TYPE_UINT64, 0);
+
+ propNames_name_store (PROP_IOHEAPBYTES, NTXT ("IOHEAPBYTES"));
+
+ propNames_name_store (PROP_STACKL, NTXT ("STACKL"));
+ propNames_name_store (PROP_MSTACKL, NTXT ("MSTACKL"));
+ propNames_name_store (PROP_USTACKL, NTXT ("USTACKL"));
+ propNames_name_store (PROP_XSTACKL, NTXT ("XSTACKL"));
+
+ propNames_name_store (PROP_STACKI, NTXT ("STACKI"));
+ propNames_name_store (PROP_MSTACKI, NTXT ("MSTACKI"));
+ propNames_name_store (PROP_USTACKI, NTXT ("USTACKI"));
+ propNames_name_store (PROP_XSTACKI, NTXT ("XSTACKI"));
+
+ // Make sure predefined names are not used for dynamic properties
+ propNames_name_store (PROP_LAST, NTXT (""));
+
+ localized_SP_UNKNOWN_NAME = GTXT ("(unknown)");
+
+ // define Index objects
+ dyn_indxobj = new Vector<IndexObjType_t*>();
+ dyn_indxobj_indx = 0;
+ char *s = dbe_sprintf (NTXT ("((EXPID_CMP<<%llu) | THRID)"),
+ (unsigned long long) IndexObject::INDXOBJ_EXPID_SHIFT);
+ indxobj_define (NTXT ("Threads"), GTXT ("Threads"), s, NULL, NULL);
+ free (s);
+ indxobj_define (NTXT ("CPUs"), GTXT ("CPUs"), NTXT ("(CPUID)"), NULL, NULL);
+ indxobj_define (NTXT ("Samples"), GTXT ("Samples"), NTXT ("(SAMPLE_MAP)"),
+ NULL, NULL);
+ indxobj_define (NTXT ("GCEvents"), GTXT ("GCEvents"), NTXT ("(GCEVENT_MAP)"),
+ NULL, NULL);
+ indxobj_define (NTXT ("Seconds"), GTXT ("Seconds"),
+ NTXT ("(TSTAMP/1000000000)"), NULL, NULL);
+ indxobj_define (NTXT ("Processes"), GTXT ("Processes"), NTXT ("(EXPID_CMP)"),
+ NULL, NULL);
+ s = dbe_sprintf (NTXT ("((EXPGRID<<%llu) | (EXPID<<%llu))"),
+ (unsigned long long) IndexObject::INDXOBJ_EXPGRID_SHIFT,
+ (unsigned long long) IndexObject::INDXOBJ_EXPID_SHIFT);
+ indxobj_define (NTXT ("Experiment_IDs"), GTXT ("Experiment_IDs"), s, NULL, NULL);
+ free (s);
+ indxobj_define (NTXT ("Datasize"), GTXT ("Datasize"),
+ "(IOHEAPBYTES==0?0:"
+ "((IOHEAPBYTES<=(1<<0)?(1<<0):"
+ "((IOHEAPBYTES<=(1<<2)?(1<<2):"
+ "((IOHEAPBYTES<=(1<<4)?(1<<4):"
+ "((IOHEAPBYTES<=(1<<6)?(1<<6):"
+ "((IOHEAPBYTES<=(1<<8)?(1<<8):"
+ "((IOHEAPBYTES<=(1<<10)?(1<<10):"
+ "((IOHEAPBYTES<=(1<<12)?(1<<12):"
+ "((IOHEAPBYTES<=(1<<14)?(1<<14):"
+ "((IOHEAPBYTES<=(1<<16)?(1<<16):"
+ "((IOHEAPBYTES<=(1<<18)?(1<<18):"
+ "((IOHEAPBYTES<=(1<<20)?(1<<20):"
+ "((IOHEAPBYTES<=(1<<22)?(1<<22):"
+ "((IOHEAPBYTES<=(1<<24)?(1<<24):"
+ "((IOHEAPBYTES<=(1<<26)?(1<<26):"
+ "((IOHEAPBYTES<=(1<<28)?(1<<28):"
+ "((IOHEAPBYTES<=(1<<30)?(1<<30):"
+ "((IOHEAPBYTES<=(1<<32)?(1<<32):"
+ "((IOHEAPBYTES<=(1<<34)?(1<<34):"
+ "((IOHEAPBYTES<=(1<<36)?(1<<36):"
+ "((IOHEAPBYTES<=(1<<38)?(1<<38):"
+ "((IOHEAPBYTES<=(1<<40)?(1<<40):"
+ "((IOHEAPBYTES<=(1<<42)?(1<<42):"
+ "((IOHEAPBYTES<=(1<<44)?(1<<44):"
+ "((IOHEAPBYTES<=(1<<46)?(1<<46):"
+ "((IOHEAPBYTES<=(1<<48)?(1<<48):"
+ "((IOHEAPBYTES<=(1<<50)?(1<<50):"
+ "(IOHEAPBYTES==-1?-1:(1<<50|1)"
+ "))))))))))))))))))))))))))))))))))))))))))))))))))))))",
+ NULL, NULL);
+ indxobj_define (NTXT ("Duration"), GTXT ("Duration"),
+ "((TSTAMP_HI-TSTAMP_LO)==0?0:"
+ "(((TSTAMP_HI-TSTAMP_LO)<=1000?1000:"
+ "(((TSTAMP_HI-TSTAMP_LO)<=10000?10000:"
+ "(((TSTAMP_HI-TSTAMP_LO)<=100000?100000:"
+ "(((TSTAMP_HI-TSTAMP_LO)<=1000000?1000000:"
+ "(((TSTAMP_HI-TSTAMP_LO)<=10000000?10000000:"
+ "(((TSTAMP_HI-TSTAMP_LO)<=100000000?100000000:"
+ "(((TSTAMP_HI-TSTAMP_LO)<=1000000000?1000000000:"
+ "(((TSTAMP_HI-TSTAMP_LO)<=10000000000?10000000000:"
+ "(((TSTAMP_HI-TSTAMP_LO)<=100000000000?100000000000:"
+ "(((TSTAMP_HI-TSTAMP_LO)<=1000000000000?1000000000000:"
+ "(((TSTAMP_HI-TSTAMP_LO)<=10000000000000?10000000000000:"
+ "(10000000000001))))))))))))))))))))))))", NULL, NULL);
+ dyn_indxobj_indx_fixed = dyn_indxobj_indx;
+ Elf::elf_init ();
+ defExpName = NULL;
+ mach_model_loaded = NULL;
+ tmp_dir_name = NULL;
+ settings->read_rc (ipc_mode || rdt_mode);
+
+ init ();
+}
+
+DbeSession::~DbeSession ()
+{
+ Destroy (views);
+ Destroy (exps);
+ Destroy (dobjs);
+ Destroy (metrics);
+ Destroy (search_path);
+ Destroy (classpath);
+ Destroy (propNames);
+ Destroy (expGroups);
+ Destroy (userLabels);
+ if (hwcentries)
+ {
+ for (long i = 0, sz = hwcentries->size (); i < sz; i++)
+ {
+ Hwcentry *h = hwcentries->get (i);
+ free (h->int_name);
+ free (h->name);
+ delete h;
+ }
+ delete hwcentries;
+ }
+
+ if (idxobjs)
+ {
+ for (int i = 0; i < idxobjs->size (); ++i)
+ {
+ HashMap<uint64_t, Histable*> *hMap = idxobjs->get (i);
+ if (hMap)
+ {
+ hMap->values ()->destroy ();
+ delete hMap;
+ }
+ }
+ delete idxobjs;
+ }
+
+ for (int i = 0; i < HTableSize; i++)
+ {
+ List *list = dnameHTable[i];
+ while (list)
+ {
+ List *tmp = list;
+ list = list->next;
+ delete tmp;
+ }
+ }
+ delete[] dnameHTable;
+ delete classpath_df;
+ Destroy (objs);
+ Destroy (reg_metrics);
+ Destroy (dyn_indxobj);
+ delete lobjs;
+ delete f_special;
+ destroy_map (DbeFile *, dbeFiles);
+ destroy_map (DbeJarFile *, dbeJarFiles);
+ delete loadObjMap;
+ delete omp_functions;
+ delete sourcesMap;
+ delete sources;
+ delete comp_lobjs;
+ delete comp_dbelines;
+ delete comp_sources;
+ delete reg_metrics_tree;
+ delete settings;
+ free (mach_model_loaded);
+
+ if (defExpName != NULL)
+ {
+ StringBuilder *sb = new StringBuilder ();
+ sb->append (NTXT ("/bin/rm -rf "));
+ sb->append (defExpName);
+ char *cmd = sb->toString ();
+ system (cmd);
+ free (cmd);
+ delete sb;
+ free (defExpName);
+ }
+ unlink_tmp_files ();
+ delete tmp_files;
+ dbeSession = NULL;
+}
+
+void
+DbeSession::unlink_tmp_files ()
+{
+ if (tmp_files)
+ {
+ for (int i = 0, sz = tmp_files->size (); i < sz; i++)
+ unlink (tmp_files->fetch (i));
+ tmp_files->destroy ();
+ delete tmp_files;
+ tmp_files = NULL;
+ }
+ if (tmp_dir_name)
+ {
+ char *cmd = dbe_sprintf (NTXT ("/bin/rm -rf %s"), tmp_dir_name);
+ system (cmd);
+ free (cmd);
+ free (tmp_dir_name);
+ tmp_dir_name = NULL;
+ }
+}
+
+char *
+DbeSession::get_tmp_file_name (const char *nm, bool for_java)
+{
+ if (tmp_dir_name == NULL)
+ {
+ tmp_dir_name = dbe_sprintf (NTXT ("/tmp/analyzer.%llu.%lld"),
+ (unsigned long long) getuid (), (long long) getpid ());
+ mkdir (tmp_dir_name, S_IRWXU);
+ }
+ char *fnm = dbe_sprintf (NTXT ("%s/%s"), tmp_dir_name, nm);
+ if (for_java)
+ for (char *s = fnm + strlen (tmp_dir_name) + 1; *s; s++)
+ if (*s == '/')
+ *s = '.';
+ return fnm;
+}
+
+void
+DbeSession::init ()
+{
+ user_exp_id_counter = 0;
+ status_ompavail = 0;
+ archive_mode = 0;
+
+#if DEBUG
+ char *s = getenv (NTXT ("MPMT_DEBUG"));
+ if (s)
+ mpmt_debug_opt = atoi (s);
+#endif /* DEBUG */
+ dbeFiles = new StringMap<DbeFile*>();
+ dbeJarFiles = new StringMap<DbeJarFile*>(128, 128);
+
+ // set up the initial (after .rc file reading) search path
+ set_search_path (settings->str_search_path, true);
+ userLabels = NULL;
+
+ // Preset all objects as they may reuse each other
+ lo_unknown = NULL;
+ f_unknown = NULL;
+ j_unknown = NULL;
+ lo_total = NULL;
+ sf_unknown = NULL;
+ f_total = NULL;
+ f_jvm = NULL;
+ d_total = NULL;
+ d_scalars = NULL;
+ d_unknown = NULL;
+ expGroups->destroy ();
+ f_special->reset ();
+ for (int i = 0; i < LastSpecialFunction; i++)
+ f_special->append (NULL);
+
+ lo_omp = NULL;
+ omp_functions->reset ();
+ for (int i = 0; i < OMP_LAST_STATE; i++)
+ omp_functions->append (NULL);
+
+ // make sure the metric list is initialized
+ register_metric (Metric::SIZES);
+ register_metric (Metric::ADDRESS);
+ register_metric (Metric::ONAME);
+
+ // This is needed only to maintain loadobject id's
+ // for <Total> and <Unknown> in tests
+ (void) get_Unknown_LoadObject ();
+ (void) get_Total_LoadObject ();
+
+ // Create the data object name hash table.
+ dnameHTable = new List*[HTableSize];
+ for (int i = 0; i < HTableSize; i++)
+ dnameHTable[i] = NULL;
+
+ d_total = createDataObject ();
+ d_total->set_name (NTXT ("<Total>"));
+
+ // XXXX <Scalars> only appropriate for Program/Data-oriented analyses
+ d_scalars = createDataObject ();
+ d_scalars->set_name (GTXT ("<Scalars>"));
+
+ d_unknown = createDataObject ();
+ d_unknown->set_name (GTXT ("<Unknown>"));
+
+ // assign d_unknown's children so data_olayout has consistent sorting
+ for (unsigned pp_code = 1; pp_code < NUM_ABS_PP_CODES + 2; pp_code++)
+ {
+ char *errcode;
+ DataObject* dobj = createDataObject ();
+ switch (pp_code)
+ {
+ case NUM_ABS_PP_CODES + 1:
+ errcode = PTXT (DOBJ_UNDETERMINED);
+ break;
+ case NUM_ABS_PP_CODES:
+ errcode = PTXT (DOBJ_UNSPECIFIED);
+ break;
+ case NUM_ABS_PP_CODES - 1:
+ errcode = PTXT (DOBJ_UNIDENTIFIED);
+ break;
+ default:
+ errcode = PTXT (ABS_PP_CODES[pp_code]);
+ }
+ dobj->parent = d_unknown;
+ dobj->set_dobjname (errcode, NULL); // dobj->parent must already be set
+ }
+
+ for (unsigned rt_code = 1; rt_code < NUM_ABS_RT_CODES - 1; rt_code++)
+ {
+ DataObject* dobj = createDataObject ();
+ dobj->parent = d_unknown;
+ dobj->set_dobjname (PTXT (ABS_RT_CODES[rt_code]), NULL); // dobj->parent must already be set
+ }
+}
+
+void
+DbeSession::reset_data ()
+{
+ for (long i = 0, sz = VecSize (idxobjs); i < sz; ++i)
+ if (idxobjs->get (i))
+ idxobjs->get (i)->reset ();
+}
+
+void
+DbeSession::reset ()
+{
+ loadObjMap->reset ();
+ DbeView *dbev;
+ int index;
+
+ Vec_loop (DbeView*, views, index, dbev)
+ {
+ dbev->reset ();
+ }
+
+ destroy_map (DbeFile *, dbeFiles);
+ destroy_map (DbeJarFile *, dbeJarFiles);
+ exps->destroy ();
+ lobjs->reset (); // all LoadObjects belong to objs
+ dobjs->destroy (); // deletes d_unknown and d_total as well
+ objs->destroy ();
+ comp_lobjs->clear ();
+ comp_dbelines->clear ();
+ comp_sources->clear ();
+ sourcesMap->clear ();
+ sources->reset ();
+
+ // Delete the data object name hash table.
+ for (int i = 0; i < HTableSize; i++)
+ {
+ List *list = dnameHTable[i];
+ while (list)
+ {
+ List *tmp = list;
+ list = list->next;
+ delete tmp;
+ }
+ }
+ delete[] dnameHTable;
+
+ // IndexObect definitions remain, objects themselves may go
+ for (int i = 0; i < idxobjs->size (); ++i)
+ {
+ HashMap<uint64_t, Histable*> *v = idxobjs->fetch (i);
+ if (v != NULL)
+ {
+ v->values ()->destroy ();
+ v->clear ();
+ }
+ }
+ init ();
+}
+
+Vector<SourceFile*> *
+DbeSession::get_sources ()
+{
+ return sources;
+}
+
+DbeFile *
+DbeSession::getDbeFile (char *filename, int filetype)
+{
+ Dprintf (DEBUG_DBE_FILE, NTXT ("DbeSession::getDbeFile filetype=0x%x %s\n"), filetype, filename);
+ if (strncmp (filename, NTXT ("./"), 2) == 0)
+ filename += 2;
+ DbeFile *dbeFile = dbeFiles->get (filename);
+ if (dbeFile == NULL)
+ {
+ dbeFile = new DbeFile (filename);
+ dbeFiles->put (filename, dbeFile);
+ }
+ dbeFile->filetype |= filetype;
+ return dbeFile;
+}
+
+LoadObject *
+DbeSession::get_Total_LoadObject ()
+{
+ if (lo_total == NULL)
+ {
+ lo_total = createLoadObject (NTXT ("<Total>"));
+ lo_total->dbeFile->filetype |= DbeFile::F_FICTION;
+ }
+ return lo_total;
+}
+
+Function *
+DbeSession::get_Total_Function ()
+{
+ if (f_total == NULL)
+ {
+ f_total = createFunction ();
+ f_total->flags |= FUNC_FLAG_SIMULATED | FUNC_FLAG_NO_OFFSET;
+ f_total->set_name (NTXT ("<Total>"));
+ Module *mod = get_Total_LoadObject ()->noname;
+ f_total->module = mod;
+ mod->functions->append (f_total);
+ }
+ return f_total;
+}
+
+LoadObject *
+DbeSession::get_Unknown_LoadObject ()
+{
+ if (lo_unknown == NULL)
+ {
+ lo_unknown = createLoadObject (GTXT ("<Unknown>"));
+ lo_unknown->type = LoadObject::SEG_TEXT; // makes it expandable
+ lo_unknown->dbeFile->filetype |= DbeFile::F_FICTION;
+
+ // force creation of the <Unknown> function
+ (void) get_Unknown_Function ();
+ }
+ return lo_unknown;
+}
+
+SourceFile *
+DbeSession::get_Unknown_Source ()
+{
+ if (sf_unknown == NULL)
+ {
+ sf_unknown = createSourceFile (localized_SP_UNKNOWN_NAME);
+ sf_unknown->dbeFile->filetype |= DbeFile::F_FICTION;
+ sf_unknown->flags |= SOURCE_FLAG_UNKNOWN;
+ }
+ return sf_unknown;
+}
+
+Function *
+DbeSession::get_Unknown_Function ()
+{
+ if (f_unknown == NULL)
+ {
+ f_unknown = createFunction ();
+ f_unknown->flags |= FUNC_FLAG_SIMULATED;
+ f_unknown->set_name (GTXT ("<Unknown>"));
+ Module *mod = get_Unknown_LoadObject ()->noname;
+ f_unknown->module = mod;
+ mod->functions->append (f_unknown);
+ }
+ return f_unknown;
+}
+
+// LIBRARY_VISIBILITY
+
+Function *
+DbeSession::create_hide_function (LoadObject *lo)
+{
+ Function *h_function = createFunction ();
+ h_function->set_name (lo->get_name ());
+ h_function->module = lo->noname;
+ h_function->isHideFunc = true;
+ lo->noname->functions->append (h_function);
+ return h_function;
+}
+
+Function *
+DbeSession::get_JUnknown_Function ()
+{
+ if (j_unknown == NULL)
+ {
+ j_unknown = createFunction ();
+ j_unknown->flags |= FUNC_FLAG_SIMULATED;
+ j_unknown->set_name (GTXT ("<no Java callstack recorded>"));
+ Module *mod = get_Unknown_LoadObject ()->noname;
+ j_unknown->module = mod;
+ mod->functions->append (j_unknown);
+ }
+ return j_unknown;
+}
+
+Function *
+DbeSession::get_jvm_Function ()
+{
+ if (f_jvm == NULL)
+ {
+ f_jvm = createFunction ();
+ f_jvm->flags |= FUNC_FLAG_SIMULATED | FUNC_FLAG_NO_OFFSET;
+ f_jvm->set_name (GTXT ("<JVM-System>"));
+
+ // Find the JVM LoadObject
+ LoadObject *jvm = get_Unknown_LoadObject ();
+ for (int i = 0; i < lobjs->size (); ++i)
+ {
+ LoadObject *lo = lobjs->fetch (i);
+ if (lo->flags & SEG_FLAG_JVM)
+ {
+ jvm = lo;
+ break;
+ }
+ }
+ Module *mod = jvm->noname;
+ f_jvm->module = mod;
+ mod->functions->append (f_jvm);
+ // XXXX is it required? no consistency among all special functions
+ // jvm->functions->append( f_jvm );
+ }
+ return f_jvm;
+}
+
+Function *
+DbeSession::getSpecialFunction (SpecialFunction kind)
+{
+ if (kind < 0 || kind >= LastSpecialFunction)
+ return NULL;
+
+ Function *func = f_special->fetch (kind);
+ if (func == NULL)
+ {
+ char *fname;
+ switch (kind)
+ {
+ case TruncatedStackFunc:
+ fname = GTXT ("<Truncated-stack>");
+ break;
+ case FailedUnwindFunc:
+ fname = GTXT ("<Stack-unwind-failed>");
+ break;
+ default:
+ return NULL;
+ }
+ func = createFunction ();
+ func->flags |= FUNC_FLAG_SIMULATED | FUNC_FLAG_NO_OFFSET;
+ Module *mod = get_Total_LoadObject ()->noname;
+ func->module = mod;
+ mod->functions->append (func);
+ func->set_name (fname);
+ f_special->store (kind, func);
+ }
+ return func;
+}
+
+LoadObject *
+DbeSession::get_OMP_LoadObject ()
+{
+ if (lo_omp == NULL)
+ {
+ for (int i = 0, sz = lobjs->size (); i < sz; i++)
+ {
+ LoadObject *lo = lobjs->fetch (i);
+ if (lo->flags & SEG_FLAG_OMP)
+ {
+ lo_omp = lo;
+ return lo_omp;
+ }
+ }
+ lo_omp = createLoadObject (GTXT ("<OMP>"));
+ lo_omp->type = LoadObject::SEG_TEXT;
+ lo_omp->dbeFile->filetype |= DbeFile::F_FICTION;
+ }
+ return lo_omp;
+}
+
+Function *
+DbeSession::get_OMP_Function (int n)
+{
+ if (n < 0 || n >= OMP_LAST_STATE)
+ return NULL;
+
+ Function *func = omp_functions->fetch (n);
+ if (func == NULL)
+ {
+ char *fname;
+ switch (n)
+ {
+ case OMP_OVHD_STATE:
+ fname = GTXT ("<OMP-overhead>");
+ break;
+ case OMP_IDLE_STATE:
+ fname = GTXT ("<OMP-idle>");
+ break;
+ case OMP_RDUC_STATE:
+ fname = GTXT ("<OMP-reduction>");
+ break;
+ case OMP_IBAR_STATE:
+ fname = GTXT ("<OMP-implicit_barrier>");
+ break;
+ case OMP_EBAR_STATE:
+ fname = GTXT ("<OMP-explicit_barrier>");
+ break;
+ case OMP_LKWT_STATE:
+ fname = GTXT ("<OMP-lock_wait>");
+ break;
+ case OMP_CTWT_STATE:
+ fname = GTXT ("<OMP-critical_section_wait>");
+ break;
+ case OMP_ODWT_STATE:
+ fname = GTXT ("<OMP-ordered_section_wait>");
+ break;
+ case OMP_ATWT_STATE:
+ fname = GTXT ("<OMP-atomic_wait>");
+ break;
+ default:
+ return NULL;
+ }
+ func = createFunction ();
+ func->flags |= FUNC_FLAG_SIMULATED | FUNC_FLAG_NO_OFFSET;
+ func->set_name (fname);
+
+ LoadObject *omp = get_OMP_LoadObject ();
+ func->module = omp->noname;
+ omp->noname->functions->append (func);
+ omp->functions->append (func);
+ omp_functions->store (n, func);
+ }
+ return func;
+}
+
+// Divide the original createExperiment() into two steps
+// In part1, we just create the data structure, in part2, if
+// we decide to keep the experiment around, add it to various
+// lists in DbeSession
+Experiment *
+DbeSession::createExperimentPart1 ()
+{
+ Experiment *exp = new Experiment ();
+ return exp;
+}
+
+void
+DbeSession::createExperimentPart2 (Experiment *exp)
+{
+ int ind = expGroups->size ();
+ if (ind > 0)
+ {
+ ExpGroup *gr = expGroups->fetch (ind - 1);
+ exp->groupId = gr->groupId;
+ gr->append (exp);
+ }
+ exp->setExpIdx (exps->size ());
+ exp->setUserExpId (++user_exp_id_counter);
+ exps->append (exp);
+}
+
+Experiment *
+DbeSession::createExperiment ()
+{
+ Experiment *exp = new Experiment ();
+ append (exp);
+ return exp;
+}
+
+void
+DbeSession::append (Experiment *exp)
+{
+ exp->setExpIdx (exps->size ());
+ exp->setUserExpId (++user_exp_id_counter);
+ exps->append (exp);
+ if (exp->founder_exp)
+ {
+ if (exp->founder_exp->children_exps == NULL)
+ exp->founder_exp->children_exps = new Vector<Experiment *>;
+ exp->founder_exp->children_exps->append (exp);
+ if (exp->founder_exp->groupId > 0)
+ {
+ exp->groupId = exp->founder_exp->groupId;
+ expGroups->get (exp->groupId - 1)->append (exp);
+ }
+ }
+ if (exp->groupId == 0)
+ {
+ long ind = VecSize (expGroups);
+ if (ind > 0)
+ {
+ ExpGroup *gr = expGroups->get (ind - 1);
+ exp->groupId = gr->groupId;
+ gr->append (exp);
+ }
+ }
+}
+
+void
+DbeSession::append (Hwcentry *h)
+{
+ if (hwcentries == NULL)
+ hwcentries = new Vector<Hwcentry*>;
+ hwcentries->append (h);
+}
+
+int
+DbeSession::ngoodexps ()
+{
+ int cnt = 0;
+ for (long i = 0, sz = VecSize (exps); i < sz; i++)
+ if (exps->get (i)->get_status () == Experiment::SUCCESS)
+ cnt++;
+ return cnt;
+}
+
+int
+DbeSession::createView (int index, int cloneindex)
+{
+ // ensure that there is no view with that index
+ DbeView *dbev = getView (index);
+ if (dbev != NULL)
+ abort ();
+
+ // find the view to be cloned
+ dbev = getView (cloneindex);
+ DbeView *newview;
+ if (dbev == NULL)
+ newview = new DbeView (theApplication, settings, index);
+ else
+ newview = new DbeView (dbev, index);
+ views->append (newview);
+ return index;
+}
+
+DbeView *
+DbeSession::getView (int index)
+{
+ int i;
+ DbeView *dbev;
+ Vec_loop (DbeView*, views, i, dbev)
+ {
+ if (dbev->vindex == index)
+ return dbev;
+ }
+ return NULL;
+}
+
+void
+DbeSession::dropView (int index)
+{
+ int i;
+ DbeView *dbev;
+
+ Vec_loop (DbeView*, views, i, dbev)
+ {
+ if (dbev->vindex == index)
+ {
+ views->remove (i);
+ delete dbev;
+ return;
+ }
+ }
+ // view not found; ignore for now
+}
+
+Vector<char*> *
+DbeSession::get_group_or_expt (char *path)
+{
+ Vector<char*> *exp_list = new Vector<char*>;
+ FILE *fptr;
+ char *new_path, buf[MAXPATHLEN], name[MAXPATHLEN];
+
+ fptr = fopen (path, NTXT ("r"));
+ if (!fptr || !fgets (buf, (int) sizeof (buf), fptr)
+ || strncmp (buf, SP_GROUP_HEADER, strlen (SP_GROUP_HEADER)))
+ {
+ // it's not an experiment group
+ new_path = dbe_strdup (path);
+ new_path = canonical_path (new_path);
+ exp_list->append (new_path);
+ }
+ else
+ {
+ // it is an experiment group, read the list to get them all
+ while (fgets (buf, (int) sizeof (buf), fptr))
+ {
+ if ((*buf != '#') && (sscanf (buf, NTXT ("%s"), name) == 1))
+ {
+ new_path = dbe_strdup (name);
+ new_path = canonical_path (new_path);
+ exp_list->append (new_path);
+ }
+ }
+ }
+ if (fptr)
+ fclose (fptr);
+ return exp_list;
+}
+
+#define GET_INT_VAL(v, s, len) \
+ for (v = len = 0; isdigit(*s); s++, len++) { v = v * 10 + (*s -'0'); }
+
+static int
+dir_name_cmp (const void *a, const void *b)
+{
+ char *s1 = *((char **) a);
+ char *s2 = *((char **) b);
+ while (*s1)
+ {
+ if (isdigit (*s1) && isdigit (*s2))
+ {
+ int v1, v2, len1, len2;
+ GET_INT_VAL (v1, s1, len1);
+ GET_INT_VAL (v2, s2, len2);
+ if (v1 != v2)
+ return v1 - v2;
+ if (len1 != len2)
+ return len2 - len1;
+ continue;
+ }
+ if (*s1 != *s2)
+ break;
+ s1++;
+ s2++;
+ }
+ return *s1 - *s2;
+}
+
+static int
+read_experiment_data_in_parallel (void *arg)
+{
+ exp_ctx *ctx = (exp_ctx *) arg;
+ Experiment *dexp = ctx->exp;
+ bool read_ahead = ctx->read_ahead;
+ dexp->read_experiment_data (read_ahead);
+ free (ctx);
+ return 0;
+}
+
+void
+DbeSession::open_experiment (Experiment *exp, char *path)
+{
+ exp->open (path);
+ if (exp->get_status () != Experiment::FAILURE)
+ exp->read_experiment_data (false);
+ exp->open_epilogue ();
+
+ // Update all DbeViews
+ for (int i = 0, sz = views->size (); i < sz; i++)
+ {
+ DbeView *dbev = views->fetch (i);
+ dbev->add_experiment (exp->getExpIdx (), true);
+ }
+
+ if (exp->get_status () == Experiment::FAILURE)
+ {
+ check_tab_avail ();
+ return;
+ }
+
+ char *discard_tiny = getenv (NTXT ("SP_ANALYZER_DISCARD_TINY_EXPERIMENTS"));
+ int user_specified_tiny_threshold = DEFAULT_TINY_THRESHOLD; // in milliseconds
+ if (discard_tiny != NULL)
+ {
+ user_specified_tiny_threshold = (atoi (discard_tiny));
+ if (user_specified_tiny_threshold < 0)
+ user_specified_tiny_threshold = DEFAULT_TINY_THRESHOLD;
+ }
+
+ // Open descendant experiments
+ DIR *exp_dir = opendir (path);
+ if (exp_dir == NULL)
+ {
+ check_tab_avail ();
+ return;
+ }
+
+ Vector<char*> *exp_names = new Vector<char*>();
+ struct dirent *entry = NULL;
+ while ((entry = readdir (exp_dir)) != NULL)
+ {
+ if (entry->d_name[0] != '_')
+ continue;
+ size_t len = strlen (entry->d_name);
+ if (len < 3 || strcmp (entry->d_name + len - 3, NTXT (".er")) != 0)
+ continue;
+ exp_names->append (dbe_strdup (entry->d_name));
+ }
+ closedir (exp_dir);
+ exp_names->sort (dir_name_cmp);
+ Experiment **t_exp_list = new Experiment *[exp_names->size ()];
+ int nsubexps = 0;
+
+ for (int j = 0, jsz = exp_names->size (); j < jsz; j++)
+ {
+ t_exp_list[j] = NULL;
+
+ char *lineage_name = exp_names->fetch (j);
+ struct stat64 sbuf;
+ char *dpath = dbe_sprintf (NTXT ("%s/%s"), path, lineage_name);
+
+ // look for experiments with no profile collected
+ if (user_specified_tiny_threshold == DEFAULT_TINY_THRESHOLD)
+ {
+ char *frinfoname = dbe_sprintf (NTXT ("%s/%s"), dpath, "data." SP_FRINFO_FILE);
+ int st = dbe_stat (frinfoname, &sbuf);
+ free (frinfoname);
+ if (st == 0)
+ {
+ // if no profile/trace data do not process this experiment any further
+ if (sbuf.st_size == 0)
+ {
+ free (dpath);
+ continue;
+ }
+ }
+ }
+ else
+ { // check if dpath is a directory
+ if (dbe_stat (dpath, &sbuf) != 0)
+ {
+ free (dpath);
+ continue;
+ }
+ else if (!S_ISDIR (sbuf.st_mode))
+ {
+ free (dpath);
+ continue;
+ }
+ }
+ size_t lineage_name_len = strlen (lineage_name);
+ lineage_name[lineage_name_len - 3] = 0; /* remove .er */
+ Experiment *dexp = new Experiment ();
+ dexp->founder_exp = exp;
+ if (user_specified_tiny_threshold > DEFAULT_TINY_THRESHOLD)
+ {
+ dexp->setTinyThreshold (user_specified_tiny_threshold);
+ dexp->open (dpath);
+ if (dexp->isDiscardedTinyExperiment ())
+ {
+ delete dexp;
+ free (dpath);
+ continue;
+ }
+ }
+ else
+ dexp->open (dpath);
+ append (dexp);
+ t_exp_list[j] = dexp;
+ nsubexps++;
+ dexp->set_clock (exp->clock);
+
+ // DbeView add_experiment() is split into two parts
+ // add_subexperiment() is called repeeatedly for
+ // all sub_experiments, later add_experiment_epilogue() finishes up the task
+ for (int i = 0, sz = views->size (); i < sz; i++)
+ {
+ DbeView *dbev = views->fetch (i);
+ bool enabled = settings->check_en_desc (lineage_name, dexp->utargname);
+ dbev->add_subexperiment (dexp->getExpIdx (), enabled);
+ }
+ free (dpath);
+ }
+
+ for (int i = 0, sz = views->size (); i < sz; i++)
+ {
+ DbeView *dbev = views->fetch (i);
+ dbev->add_experiment_epilogue ();
+ }
+
+ DbeThreadPool * threadPool = new DbeThreadPool (-1);
+ for (int j = 0, jsz = exp_names->size (); j < jsz; j++)
+ {
+ if (t_exp_list[j] == NULL) continue;
+ Experiment *dexp = t_exp_list[j];
+ exp_ctx *new_ctx = (exp_ctx*) malloc (sizeof (exp_ctx));
+ new_ctx->path = NULL;
+ new_ctx->exp = dexp;
+ new_ctx->ds = this;
+ new_ctx->read_ahead = true;
+ DbeQueue *q = new DbeQueue (read_experiment_data_in_parallel, new_ctx);
+ threadPool->put_queue (q);
+ }
+ threadPool->wait_queues ();
+ delete threadPool;
+
+ for (long j = 0, jsz = exp_names->size (); j < jsz; j++)
+ {
+ if (t_exp_list[j] == NULL) continue;
+ Experiment *dexp = t_exp_list[j];
+ dexp->open_epilogue ();
+ }
+ exp_names->destroy ();
+ delete[] t_exp_list;
+ delete exp_names;
+
+ // update setting for leaklist and dataspace
+ check_tab_avail ();
+}
+
+void
+DbeSession::append_mesgs (StringBuilder *sb, char *path, Experiment *exp)
+{
+ if (exp->fetch_errors () != NULL)
+ {
+ // yes, there were errors
+ char *ststr = pr_mesgs (exp->fetch_errors (), NTXT (""), NTXT (""));
+ sb->append (path);
+ sb->append (NTXT (": "));
+ sb->append (ststr);
+ free (ststr);
+ }
+
+ Emsg *m = exp->fetch_warnings ();
+ if (m != NULL)
+ {
+ sb->append (path);
+ sb->append (NTXT (": "));
+ if (!is_interactive ())
+ sb->append (GTXT ("Experiment has warnings, see header for details\n"));
+ else
+ sb->append (GTXT ("Experiment has warnings, see experiment panel for details\n"));
+ }
+
+ // Check for descendant experiments that are not loaded
+ int num_desc = VecSize (exp->children_exps);
+ if ((num_desc > 0) && !settings->check_en_desc (NULL, NULL))
+ {
+ char *s;
+ if (!is_interactive ())
+ s = dbe_sprintf (GTXT ("Has %d descendant(s), use commands controlling selection to load descendant data\n"), num_desc);
+ else
+ s = dbe_sprintf (GTXT ("Has %d descendant(s), use filter panel to load descendant data\n"), num_desc);
+ sb->append (path);
+ sb->append (NTXT (": "));
+ sb->append (s);
+ free (s);
+ }
+}
+
+Experiment *
+DbeSession::get_exp (int exp_ind)
+{
+ if (exp_ind < 0 || exp_ind >= exps->size ())
+ return NULL;
+ Experiment *exp = exps->fetch (exp_ind);
+ exp->setExpIdx (exp_ind);
+ return exp;
+}
+
+Vector<Vector<char*>*> *
+DbeSession::getExperimensGroups ()
+{
+ if (dbeSession->expGroups == NULL || dbeSession->expGroups->size () == 0)
+ return NULL;
+ bool compare_mode = expGroups->size () > 1;
+ Vector<Vector<char*>*> *groups = new Vector<Vector<char*>*> (
+ compare_mode ? expGroups->size () : 1);
+ for (int i = 0; i < expGroups->size (); i++)
+ {
+ ExpGroup *grp = expGroups->fetch (i);
+ Vector<Experiment*> *founders = grp->get_founders ();
+ if (founders && founders->size () != 0)
+ {
+ Vector<char *> *names = new Vector<char*> (founders->size ());
+ for (int j = 0; j < founders->size (); j++)
+ {
+ Experiment *exp = founders->fetch (j);
+ names->append (dbe_strdup (exp->get_expt_name ()));
+ }
+ if (compare_mode || groups->size () == 0)
+ groups->append (names);
+ else
+ groups->fetch (0)->addAll (names);
+ }
+ delete founders;
+ }
+ return groups;
+}
+
+char *
+DbeSession::setExperimentsGroups (Vector<Vector<char*>*> *groups)
+{
+ StringBuilder sb;
+ for (int i = 0; i < groups->size (); i++)
+ {
+ Vector<char *> *names = groups->fetch (i);
+ ExpGroup *grp;
+ if (names->size () == 1)
+ grp = new ExpGroup (names->fetch (0));
+ else
+ {
+ char *nm = dbe_sprintf (GTXT ("Group %d"), i + 1);
+ grp = new ExpGroup (nm);
+ free (nm);
+ }
+ expGroups->append (grp);
+ grp->groupId = expGroups->size ();
+
+ for (int j = 0; j < names->size (); j++)
+ {
+ char *path = names->fetch (j);
+ size_t len = strlen (path);
+ if ((len > 4) && !strcmp (path + len - 4, NTXT (".erg")))
+ {
+ Vector<char*> *lst = get_group_or_expt (path);
+ for (int j1 = 0; j1 < lst->size (); j1++)
+ {
+ Experiment *exp = new Experiment ();
+ append (exp);
+ open_experiment (exp, lst->get (j1));
+ if (exp->get_status () == Experiment::FAILURE)
+ append_mesgs (&sb, path, exp);
+ }
+ lst->destroy ();
+ delete lst;
+ }
+ else
+ {
+ Experiment *exp = new Experiment ();
+ append (exp);
+ open_experiment (exp, path);
+ if (exp->get_status () == Experiment::FAILURE)
+ append_mesgs (&sb, path, exp);
+ }
+ }
+ }
+
+ for (int i = 0, sz = views->size (); i < sz; i++)
+ {
+ DbeView *dbev = views->fetch (i);
+ dbev->update_advanced_filter ();
+ int cmp = dbev->get_settings ()->get_compare_mode ();
+ dbev->set_compare_mode (CMP_DISABLE);
+ dbev->set_compare_mode (cmp);
+ }
+ return sb.length () == 0 ? NULL : sb.toString ();
+}
+
+char *
+DbeSession::drop_experiment (int exp_ind)
+{
+ DbeView *dbev;
+ int index;
+ Experiment *exp2;
+
+ status_ompavail = -1;
+ Experiment *exp = exps->fetch (exp_ind);
+
+ // If this is a sub experiment, don't do it
+ if (exp->founder_exp != NULL) // this is a sub experiment; don't do it
+ return (dbe_strdup (GTXT ("Can not drop subexperiments")));
+
+ if (VecSize (exp->children_exps) > 0)
+ for (;;)
+ {
+ // search the list of experiments to find all that have this one as founder
+ bool found = false;
+ Vec_loop (Experiment*, exps, index, exp2)
+ {
+ if (exp2->founder_exp == exp)
+ {
+ exp2->founder_exp = NULL;
+ drop_experiment (index);
+ found = true;
+ break;
+ }
+ }
+ if (found == false)
+ break;
+ }
+
+ // then proceed to finish the drop
+ Vec_loop (DbeView*, views, index, dbev)
+ {
+ dbev->drop_experiment (exp_ind);
+ }
+
+ int old_cnt = expGroups->size ();
+ for (int i = 0; i < old_cnt; i++)
+ {
+ ExpGroup *gr = expGroups->fetch (i);
+ if (gr->groupId == exp->groupId)
+ {
+ gr->drop_experiment (exp);
+ if ((gr->founder == NULL) && (gr->exps->size () == 0))
+ {
+ delete gr;
+ expGroups->remove (i);
+ }
+ break;
+ }
+ }
+ delete exps->remove (exp_ind);
+ if (old_cnt != expGroups->size ())
+ {
+ for (int i = 0, sz = expGroups->size (); i < sz; i++)
+ {
+ ExpGroup *gr = expGroups->fetch (i);
+ gr->groupId = i + 1;
+ Vector<Experiment*> *expList = gr->exps;
+ for (int i1 = 0, sz1 = expList->size (); i1 < sz1; i1++)
+ expList->fetch (i1)->groupId = gr->groupId;
+ }
+ for (int i = 0, sz = views->size (); i < sz; i++)
+ {
+ dbev = views->fetch (i);
+ int cmp = dbev->get_compare_mode ();
+ dbev->set_compare_mode (CMP_DISABLE);
+ dbev->set_compare_mode (cmp);
+ }
+ }
+ check_tab_avail (); // update tab availability
+ return NULL;
+}
+
+int
+DbeSession::find_experiment (char *path)
+{
+ Experiment *exp;
+ int index;
+ Vec_loop (Experiment*, exps, index, exp)
+ {
+ if (strcmp (exp->get_expt_name (), path) == 0)
+ return exp->getExpIdx ();
+ }
+ return -1;
+}
+
+LoadObject *
+DbeSession::createLoadObject (const char *nm, int64_t cksum)
+{
+ return loadObjMap->sync_create_item (nm, cksum);
+}
+
+LoadObject *
+DbeSession::createLoadObject (const char *nm, const char *runTimePath, DbeFile *df)
+{
+ return loadObjMap->sync_create_item (nm, runTimePath, df);
+}
+
+void
+DbeSession::append (LoadObject *lobj)
+{
+ Histable *obj = lobj; // workaround for a C++ problem
+ objs->append (obj);
+ lobj->id = objs->size () - 1;
+ lobjs->append (lobj);
+ lobj->seg_idx = lobjs->size () - 1;
+ char *loname = lobj->get_pathname ();
+ dbeFiles->put (loname, lobj->dbeFile);
+}
+
+DbeJarFile *
+DbeSession::get_JarFile (const char *name)
+{
+ DbeJarFile *jf = dbeJarFiles->get (name);
+ if (jf == NULL)
+ {
+ jf = new DbeJarFile (name);
+ dbeJarFiles->put (name, jf);
+ }
+ return jf;
+}
+
+Module *
+DbeSession::createModule (LoadObject *lo, const char *nm)
+{
+ Module *mod = new Module ();
+ Histable *obj = mod; // workaround for a C++ problem
+ objs->append (obj);
+ mod->id = objs->size () - 1;
+ mod->loadobject = lo;
+ mod->set_name (dbe_strdup (nm ? nm : localized_SP_UNKNOWN_NAME));
+ lo->seg_modules->append (mod);
+ return mod;
+}
+
+Module *
+DbeSession::createUnknownModule (LoadObject *lo)
+{
+ Module *mod = createModule (lo, localized_SP_UNKNOWN_NAME);
+ mod->flags |= MOD_FLAG_UNKNOWN;
+ mod->set_file_name (dbe_strdup (localized_SP_UNKNOWN_NAME));
+ return mod;
+}
+
+SourceFile *
+DbeSession::createSourceFile (const char *_path)
+{
+ char *path = (char *) _path;
+ if (strncmp (path, NTXT ("./"), 2) == 0)
+ path += 2;
+ SourceFile *source = sourcesMap->get (path);
+ if (source == NULL)
+ {
+ source = new SourceFile (path);
+ (void) sourcesMap->put (path, source);
+ append (source);
+ }
+ return source;
+}
+
+Function *
+DbeSession::createFunction ()
+{
+ Function *func = new Function (objs->size ());
+ Histable *obj = func; // workaround for a C++ problem
+ objs->append (obj);
+ return func;
+}
+
+JMethod *
+DbeSession::createJMethod ()
+{
+ JMethod *jmthd = new JMethod (objs->size ());
+ Histable *obj = jmthd; // workaround for a C++ problem
+ objs->append (obj);
+ return jmthd;
+}
+
+Module *
+DbeSession::createClassFile (char *className)
+{
+ ClassFile *cls = new ClassFile ();
+ cls->set_name (className);
+ char *clpath = cls->get_java_file_name (className, true);
+ cls->dbeFile = getDbeFile (clpath, DbeFile::F_JAVACLASS);
+ free (clpath);
+ Histable *obj = cls; // workaround for a C++ problem
+ objs->append (obj);
+ cls->id = objs->size () - 1;
+ return cls;
+}
+
+Histable *
+DbeSession::createHistObject (Histable::Type type)
+{
+ switch (type)
+ {
+ case Histable::DOBJECT:
+ {
+ DataObject *dataobj = new DataObject ();
+ dobjs->append (dataobj);
+ dataobj->id = dobjs->size () - 1;
+ return dataobj;
+ }
+ default:
+ assert (0);
+ }
+ return NULL;
+}
+
+DataObject *
+DbeSession::createDataObject ()
+{
+ DataObject *dataobj = new DataObject ();
+ dobjs->append (dataobj);
+ dataobj->id = dobjs->size () - 1;
+ return dataobj;
+}
+
+DataObject *
+DbeSession::createDataObject (DataObject *dobj, DataObject *parent)
+{
+ DataObject *dataobj = new DataObject ();
+ dataobj->size = dobj->size;
+ dataobj->offset = dobj->offset;
+ dataobj->parent = parent;
+ dataobj->set_dobjname (dobj->get_typename (), dobj->get_instname ());
+ dobjs->append (dataobj);
+ dataobj->id = dobjs->size () - 1;
+ return dataobj;
+}
+
+DataObject *
+DbeSession::createMasterDataObject (DataObject *dobj)
+{
+ DataObject *parent = NULL;
+ if (dobj->parent)
+ { // define master parent first
+ parent = find_dobj_master (dobj->parent);
+ if (!parent)
+ { // clone master from this dataobject parent
+ parent = createDataObject (dobj->parent);
+ parent->scope = NULL; // master is scope-less
+ Dprintf (DEBUG_DATAOBJ,
+ "Master DataObject(%llu) cloned from (%llu) %s\n",
+ (ull_t) parent->id, (ull_t) dobj->parent->id,
+ dobj->parent->get_name ());
+ // clone master DataObject elements
+ Vector<DataObject*> *delem = get_dobj_elements (dobj->parent);
+ int element_index = 0;
+ DataObject *element = NULL;
+ Vec_loop (DataObject*, delem, element_index, element)
+ {
+ DataObject *master_element = createDataObject (element, parent);
+ master_element->scope = NULL; // master is scope-less
+ Dprintf (DEBUG_DATAOBJ,
+ "Member DataObject(%llu) cloned from (%llu) %s\n",
+ (ull_t) master_element->id, (ull_t) element->id,
+ element->get_name ());
+ }
+ }
+ else
+ Dprintf (DEBUG_DATAOBJ, "Master DataObject(%llu) clone found (%llu) %s\n",
+ (ull_t) parent->id, (ull_t) dobj->parent->id,
+ dobj->parent->get_name ());
+ }
+
+ DataObject *master = find_dobj_master (dobj);
+ if (!master)
+ { // clone master from this dataobject
+ master = createDataObject (dobj, parent);
+ master->scope = NULL; // master is scope-less
+ Dprintf (DEBUG_DATAOBJ, "Master DataObject(%llu) cloned from (%llu) %s\n",
+ (ull_t) master->id, (ull_t) dobj->id, dobj->get_name ());
+ }
+ else
+ Dprintf (DEBUG_DATAOBJ, "Master DataObject(%llu) clone found (%llu) %s\n",
+ (ull_t) master->id, (ull_t) dobj->id, dobj->get_name ());
+ return master;
+}
+
+void
+DbeSession::insert_metric (BaseMetric *mtr, Vector<BaseMetric*> *mlist)
+{
+ if ((mtr->get_flavors () & Metric::STATIC) == 0)
+ {
+ // insert in front of the first STATIC
+ for (int i = 0, mlist_sz = mlist->size (); i < mlist_sz; i++)
+ {
+ BaseMetric *m = mlist->fetch (i);
+ if (m->get_flavors () & Metric::STATIC)
+ {
+ mlist->insert (i, mtr);
+ return;
+ }
+ }
+ }
+ mlist->append (mtr);
+}
+
+BaseMetricTreeNode*
+DbeSession::get_reg_metrics_tree ()
+{
+ if (reg_metrics_tree == NULL)
+ // Can't init earlier because BaseMetric() requires DbeSession::ql_parse
+ reg_metrics_tree = new BaseMetricTreeNode ();
+ return reg_metrics_tree;
+}
+
+void
+DbeSession::update_metric_tree (BaseMetric *m)
+{
+ get_reg_metrics_tree ()->register_metric (m);
+}
+
+BaseMetric *
+DbeSession::register_metric_expr (BaseMetric::Type type, char *cmd, char *expr_spec)
+{
+ BaseMetric *m = find_metric (type, cmd, expr_spec);
+ if (m)
+ return m;
+ BaseMetric *bm = find_metric (type, cmd, NULL); // clone this version
+ m = new BaseMetric (*bm);
+ m->set_expr_spec (expr_spec);
+ insert_metric (m, reg_metrics);
+ return m;
+}
+
+BaseMetric *
+DbeSession::register_metric (BaseMetric::Type type)
+{
+ BaseMetric *m = find_metric (type, NULL, NULL);
+ if (m)
+ return m;
+ m = new BaseMetric (type);
+ insert_metric (m, reg_metrics);
+ update_metric_tree (m);
+ return m;
+}
+
+BaseMetric *
+DbeSession::register_metric (Hwcentry *ctr, const char* aux, const char* username)
+{
+ BaseMetric *m = find_metric (BaseMetric::HWCNTR, aux, NULL);
+ if (m)
+ // That may be a problem when metrics aren't an exact match.
+ // For example, memoryspace is disabled in one experiment and not in another.
+ return m;
+ if (ctr->timecvt)
+ {
+ char *time_cmd = dbe_sprintf (NTXT ("t%s"), aux);
+ char *time_username = dbe_sprintf (GTXT ("%s Time"),
+ ctr->metric ? ctr->metric :
+ (ctr->name ? ctr->name : ctr->int_name));
+ BaseMetric *m1;
+ if (ipc_mode)
+ {
+ // Two visible metrics are presented in GUI
+ m1 = new BaseMetric (ctr, aux, time_cmd, time_username, VAL_TIMEVAL);
+ insert_metric (m1, reg_metrics);
+ update_metric_tree (m1);
+ m = new BaseMetric (ctr, aux, username, VAL_VALUE, m1);
+ }
+ else
+ {
+ // Only one visible metric is presented in er_print
+ m1 = new BaseMetric (ctr, aux, time_cmd, time_username, VAL_TIMEVAL | VAL_INTERNAL);
+ insert_metric (m1, reg_metrics);
+ m = new BaseMetric (ctr, aux, username, VAL_TIMEVAL | VAL_VALUE, m1);
+ }
+ free (time_cmd);
+ free (time_username);
+ }
+ else
+ m = new BaseMetric (ctr, aux, username, VAL_VALUE);
+ insert_metric (m, reg_metrics);
+ update_metric_tree (m);
+ return m;
+}
+
+BaseMetric *
+DbeSession::register_metric (char *name, char *username, char *_def)
+{
+ BaseMetric *m = find_metric (BaseMetric::DERIVED, name, NULL);
+ if (m)
+ return m;
+ Definition *p = Definition::add_definition (_def);
+ if (p == NULL)
+ return NULL;
+ m = new BaseMetric (name, username, p);
+ insert_metric (m, reg_metrics);
+ update_metric_tree (m);
+ return m;
+}
+
+void
+DbeSession::drop_metric (BaseMetric *mtr)
+{
+ Countable *cnt;
+ int index;
+
+ Vec_loop (Countable*, metrics, index, cnt)
+ {
+ if (mtr == (BaseMetric *) cnt->item)
+ {
+ cnt->ref_count--;
+ if (cnt->ref_count == 0)
+ {
+ // Remove this metric from all views
+ DbeView *dbev;
+ int index2;
+ Vec_loop (DbeView*, views, index2, dbev)
+ {
+ dbev->reset_metrics ();
+ }
+ delete metrics->remove (index);
+ delete mtr;
+ return;
+ }
+ }
+ }
+}
+
+BaseMetric *
+DbeSession::find_metric (BaseMetric::Type type, const char *cmd, const char *expr_spec)
+{
+ for (int i = 0, sz = reg_metrics->size (); i < sz; i++)
+ {
+ BaseMetric *bm = reg_metrics->fetch (i);
+ if (bm->get_type () == type && dbe_strcmp (bm->get_expr_spec (), expr_spec) == 0)
+ {
+ if ((type == BaseMetric::DERIVED || type == BaseMetric::HWCNTR)
+ && dbe_strcmp (bm->get_cmd (), cmd) != 0)
+ continue;
+ return bm;
+ }
+ }
+ return NULL;
+}
+
+BaseMetric *
+DbeSession::find_base_reg_metric (char * mcmd)
+{
+ for (int i = 0, sz = reg_metrics->size (); i < sz; i++)
+ {
+ BaseMetric *bm = reg_metrics->fetch (i);
+ if (bm->get_expr_spec () != NULL)
+ continue; // skip compare metrics
+ if (dbe_strcmp (bm->get_cmd (), mcmd) == 0)
+ return bm;
+ }
+ return NULL;
+}
+
+Vector<BaseMetric*> *
+DbeSession::get_base_reg_metrics ()
+{
+ Vector<BaseMetric*> *mlist = new Vector<BaseMetric*>;
+ Vector<BaseMetric*> *ml = get_all_reg_metrics ();
+ for (int i = 0, sz = ml->size (); i < sz; i++)
+ {
+ BaseMetric *m = ml->fetch (i);
+ if (m->get_expr_spec () == NULL)
+ mlist->append (m);
+ }
+ return mlist;
+}
+
+void
+DbeSession::check_tab_avail ()
+{
+ DbeView *dbev;
+ int index;
+ // tell the views to update their tab lists
+ Vec_loop (DbeView*, views, index, dbev)
+ {
+ dbev->get_settings ()->updateTabAvailability ();
+ }
+}
+
+bool
+DbeSession::is_datamode_available ()
+{
+ Experiment *exp;
+ int index;
+ Vec_loop (Experiment*, exps, index, exp)
+ {
+ if (exp->dataspaceavail)
+ return true;
+ }
+ return false;
+}
+
+bool
+DbeSession::is_leaklist_available ()
+{
+ Experiment *exp;
+ int index;
+ Vec_loop (Experiment*, exps, index, exp)
+ {
+ if (exp->leaklistavail)
+ return true;
+ }
+ return false;
+}
+
+bool
+DbeSession::is_heapdata_available ()
+{
+ Experiment *exp;
+ int index;
+ Vec_loop (Experiment*, exps, index, exp)
+ {
+ if (exp->heapdataavail)
+ return true;
+ }
+ return false;
+}
+
+bool
+DbeSession::is_iodata_available ()
+{
+ Experiment *exp;
+ int index;
+ Vec_loop (Experiment*, exps, index, exp)
+ {
+ if (exp->iodataavail)
+ return true;
+ }
+ return false;
+}
+
+bool
+DbeSession::is_racelist_available ()
+{
+ Experiment *exp;
+ int index;
+ Vec_loop (Experiment*, exps, index, exp)
+ {
+ if (exp->racelistavail)
+ return true;
+ }
+ return false;
+}
+
+bool
+DbeSession::is_deadlocklist_available ()
+{
+ Experiment *exp;
+ int index;
+ Vec_loop (Experiment*, exps, index, exp)
+ {
+ if (exp->deadlocklistavail)
+ return true;
+ }
+ return false;
+}
+
+bool
+DbeSession::is_timeline_available ()
+{
+ Experiment *exp;
+ int index;
+ Vec_loop (Experiment*, exps, index, exp)
+ {
+ if (exp->timelineavail)
+ return true;
+ }
+ return false;
+}
+
+bool
+DbeSession::is_ifreq_available ()
+{
+ Experiment *exp;
+ int index;
+ Vec_loop (Experiment*, exps, index, exp)
+ {
+ if (exp->ifreqavail)
+ return true;
+ }
+ return false;
+}
+
+bool
+DbeSession::is_omp_available ()
+{
+ if (status_ompavail == -1)
+ {
+ status_ompavail = 0;
+ for (int i = 0, sz = exps ? exps->size () : 0; i < sz; i++)
+ {
+ Experiment *exp = exps->fetch (i);
+ if (exp->ompavail)
+ {
+ status_ompavail = 1;
+ break;
+ }
+ }
+ }
+ return status_ompavail == 1;
+}
+
+bool
+DbeSession::has_java ()
+{
+ int status_has_java = 0;
+ for (int i = 0, sz = exps ? exps->size () : 0; i < sz; i++)
+ {
+ Experiment *exp = exps->fetch (i);
+ if (exp->has_java)
+ {
+ status_has_java = 1;
+ break;
+ }
+ }
+ return status_has_java == 1;
+}
+
+bool
+DbeSession::has_ompavail ()
+{
+ int status_has_ompavail = 0;
+ for (int i = 0, sz = exps ? exps->size () : 0; i < sz; i++)
+ {
+ Experiment *exp = exps->fetch (i);
+ if (exp->ompavail)
+ {
+ status_has_ompavail = 1;
+ break;
+ }
+ }
+ return status_has_ompavail == 1;
+}
+
+int
+DbeSession::get_clock (int whichexp)
+{
+ // XXXX clock frequency should be an attribute of each CPU,
+ // XXX and not a property of the session
+ // if whichexp is -1, pick the first exp that has a clock
+ // otherwise return the clock from the numbered experiment
+ Experiment *exp;
+ if (whichexp != -1)
+ {
+ exp = get_exp (whichexp);
+ if (exp != NULL)
+ return exp->clock;
+ return 0;
+ }
+ int n = nexps ();
+ for (int i = 0; i < n; i++)
+ {
+ exp = get_exp (i);
+ if (exp != NULL && exp->clock != 0)
+ return exp->clock;
+ }
+ return 0;
+}
+
+LoadObject *
+DbeSession::find_lobj_by_name (const char *lobj_name, int64_t cksum)
+{
+ return loadObjMap->get (lobj_name, cksum);
+}
+
+static unsigned
+hash (char *s)
+{
+ unsigned res = 0;
+ for (int i = 0; i < 64 && *s; i++)
+ res = res * 13 + *s++;
+ return res;
+}
+
+// This method is introduced to fix performance
+// problems with the data space profiling in the
+// current release. A better design is desired.
+void
+DbeSession::dobj_updateHT (DataObject *dobj)
+{
+ unsigned index = hash (dobj->get_unannotated_name ()) % HTableSize;
+ List *list = new List;
+ list->val = (void*) dobj;
+ list->next = dnameHTable[index];
+ dnameHTable[index] = list;
+}
+
+DataObject *
+DbeSession::find_dobj_by_name (char *dobj_name)
+{
+ unsigned index = hash (dobj_name) % HTableSize;
+ List *list = dnameHTable[index];
+ for (; list; list = list->next)
+ {
+ DataObject *d = (DataObject*) list->val;
+ if (strcmp (d->get_unannotated_name (), dobj_name) == 0)
+ return d;
+ }
+ return (DataObject *) NULL;
+}
+
+DataObject *
+DbeSession::find_dobj_match (DataObject *dobj)
+{
+ char *dobj_name = dobj->get_unannotated_name ();
+ unsigned index = hash (dobj_name) % HTableSize;
+ List *list = dnameHTable[index];
+ for (; list; list = list->next)
+ {
+ DataObject *d = (DataObject*) list->val;
+ if (strcmp (d->get_unannotated_name (), dobj_name) == 0
+ && d->size == dobj->size && d->offset == dobj->offset
+ && d->scope == dobj->scope)
+ return d;
+ }
+ return (DataObject *) NULL;
+}
+
+DataObject *
+DbeSession::find_dobj_master (DataObject *dobj)
+{
+ char *dobj_name = dobj->get_unannotated_name ();
+ unsigned index = hash (dobj_name) % HTableSize;
+ List *list = dnameHTable[index];
+ for (; list; list = list->next)
+ {
+ DataObject *d = (DataObject*) list->val;
+ // XXXX should parent also match?
+ if (strcmp (d->get_unannotated_name (), dobj_name) == 0
+ && d->size == dobj->size && d->offset == dobj->offset
+ && d->master == NULL && d->scope == NULL)
+ return d;
+ }
+ return (DataObject *) NULL;
+}
+
+Vector<DataObject*>*
+DbeSession::get_dobj_elements (DataObject *dobj)
+{
+ DataObject *d;
+ int index;
+ Vector<DataObject*> *elements = new Vector<DataObject*>;
+ if (dobj == d_total)
+ return elements;
+ Vec_loop (DataObject*, dobjs, index, d)
+ {
+ if (d->get_parent () && d->get_parent () == dobj)
+ elements->append (d);
+ }
+ return elements;
+}
+
+Vector<LoadObject*>*
+DbeSession::get_text_segments ()
+{
+ LoadObject *lo;
+ int index;
+ Vector<LoadObject*> *tlobjs = new Vector<LoadObject*>;
+ Vec_loop (LoadObject*, lobjs, index, lo)
+ {
+ if (lo->type == LoadObject::SEG_TEXT)
+ tlobjs->append (lo);
+ }
+ return tlobjs;
+}
+
+static long long
+getNumber (const char *s, char * &last)
+{
+ long long val;
+ char *sp;
+ errno = 0;
+ val = strtoll (s, &sp, 0);
+ if (errno == EINVAL)
+ last = NULL;
+ else
+ {
+ while (isspace (*sp))
+ sp++;
+ last = sp;
+ }
+ return (val);
+}
+
+bool
+DbeSession::find_obj (FILE *dis_file, FILE *inp_file, Histable *&obj,
+ char *name, const char *sel, Histable::Type type, bool xdefault)
+{
+ Vector<Histable*> *obj_lst;
+ int which = -1;
+ char *last = NULL;
+ if (type != Histable::FUNCTION && sel)
+ {
+ // check that a number has been provided
+ which = (int) getNumber (sel, last);
+ if (last == NULL || *last != '\0')
+ {
+ fprintf (stderr, GTXT ("Error: Invalid number entered: %s\n"), sel);
+ sel = NULL;
+ which = 0;
+ }
+ which--;
+ }
+ obj_lst = new Vector<Histable*>;
+ switch (type)
+ {
+ case Histable::FUNCTION:
+ obj = map_NametoFunction (name, obj_lst, sel);
+ break;
+ case Histable::MODULE:
+ obj = map_NametoModule (name, obj_lst, which);
+ break;
+ case Histable::LOADOBJECT:
+ obj = map_NametoLoadObject (name, obj_lst, which);
+ break;
+ case Histable::DOBJECT:
+ obj = map_NametoDataObject (name, obj_lst, which);
+ break;
+ default:
+ abort (); // unexpected Histable!
+ }
+
+ if ((obj == NULL) && (obj_lst->size () > 0))
+ {
+ if (obj_lst->size () == 1)
+ which = 0;
+ else
+ {
+ if (sel && (which < 0 || which >= obj_lst->size ()))
+ fprintf (stderr, GTXT ("Error: Invalid number entered: %s\n"), sel);
+ if (xdefault)
+ {
+ fprintf (stderr, GTXT ("Default selection \"1\" made\n"));
+ which = 0;
+ }
+ else
+ {
+ which = ask_which (dis_file, inp_file, obj_lst, name);
+ if (which == -1)
+ {
+ delete obj_lst;
+ return false;
+ }
+ }
+ }
+ obj = obj_lst->fetch (which);
+ }
+ delete obj_lst;
+ return true;
+}
+
+int
+DbeSession::ask_which (FILE *dis_file, FILE *inp_file,
+ Vector<Histable*> *list, char *name)
+{
+ Histable *hitem;
+ Function *func;
+ Module *module;
+ int which, index, index1;
+ char *item_name, *lo_name, *fname, *last;
+ char buf[BUFSIZ];
+ for (;;)
+ {
+ fprintf (dis_file, GTXT ("Available name list:\n"));
+ fprintf (dis_file, GTXT ("%8d) Cancel\n"), 0);
+ Vec_loop (Histable*, list, index, hitem)
+ {
+ index1 = index + 1;
+ item_name = hitem->get_name ();
+ switch (hitem->get_type ())
+ {
+ case Histable::FUNCTION:
+ func = (Function *) hitem;
+ module = func->module;
+
+ // id == -1 indicates er_src invocation
+ if (module == NULL || (module->lang_code == Sp_lang_java
+ && module->loadobject->id == -1))
+ fprintf (dis_file, NTXT ("%8d) %s\n"), index1, item_name);
+ else
+ {
+ lo_name = module->loadobject->get_pathname ();
+ fname = (module->file_name && *module->file_name) ?
+ module->file_name : module->get_name ();
+ if (fname && *fname)
+ fprintf (dis_file, NTXT ("%8d) %s %s:0x%llx (%s)\n"), index1,
+ item_name, lo_name, (ull_t) func->img_offset, fname);
+ else
+ fprintf (dis_file, NTXT ("%8d) %s %s:0x%llx\n"), index1,
+ item_name, lo_name, (ull_t) func->img_offset);
+ }
+ break;
+ case Histable::MODULE:
+ module = (Module *) hitem;
+ lo_name = module->loadobject->get_pathname ();
+ if (name[strlen (name) - 1] ==
+ module->file_name[strlen (module->file_name) - 1])
+ fprintf (dis_file, NTXT ("%8d) %s(%s)\n"), index1,
+ module->file_name, lo_name);
+ else
+ fprintf (dis_file, NTXT ("%8d) %s(%s)\n"), index1, item_name,
+ lo_name);
+ break;
+ default:
+ fprintf (dis_file, NTXT ("%8d) %s\n"), index1, item_name);
+ break;
+ }
+ }
+ if (inp_file != stdin)
+ return -1;
+ fprintf (dis_file, GTXT ("Enter selection: "));
+ if (fgets (buf, (int) sizeof (buf), inp_file) == NULL)
+ {
+ fprintf (stderr, GTXT ("Error: Invalid number entered:\n"));
+ return -1;
+ }
+ which = (int) getNumber (buf, last);
+ if (last && *last == '\0')
+ if (which >= 0 && which <= list->size ())
+ return which - 1;
+ fprintf (stderr, GTXT ("Error: Invalid number entered: %s\n"), buf);
+ }
+}
+
+static bool
+match_basename (char *name, char *full_name, int len = -1)
+{
+ if (full_name == NULL)
+ return false;
+ if (!strchr (name, '/'))
+ full_name = get_basename (full_name);
+ if (len == -1)
+ return streq (name, full_name);
+ return strncmp (name, full_name, len) == 0;
+}
+
+LoadObject *
+DbeSession::map_NametoLoadObject (char *name, Vector<Histable*> *list, int which)
+{
+ // Search the tree to find the first module whose module name
+ // matches "name" or whose source file name matches "name"
+ // Issues: is the name a pathname, or a base name?
+ // Should we look at suffix to disambiguate?
+ LoadObject *loitem;
+ int index;
+ Vec_loop (LoadObject*, lobjs, index, loitem)
+ {
+ // try pathname first
+ // if failed, try object name next
+ if (match_basename (name, loitem->get_pathname ()) ||
+ match_basename (name, loitem->get_name ()))
+ {
+ if (which == list->size ())
+ return loitem;
+ list->append (loitem);
+ }
+ }
+ return (LoadObject *) NULL;
+}
+
+Module *
+DbeSession::map_NametoModule (char *name, Vector<Histable*> *list, int which)
+{
+ // Search the tree to find the first loadobject whose loadobject name
+ // matches "name".
+
+ // Issues: is the name a pathname, or a base name?
+ // Should we look at suffix to disambiguate?
+ LoadObject *loitem;
+ Module *mitem;
+ int index1, index2;
+ Vec_loop (LoadObject*, lobjs, index1, loitem)
+ {
+ Vec_loop (Module*, loitem->seg_modules, index2, mitem)
+ {
+ // try source name first
+ // if failed, try object name next
+ if (match_basename (name, mitem->file_name) ||
+ match_basename (name, mitem->get_name ()))
+ {
+ if (which == list->size ())
+ return mitem;
+ list->append (mitem);
+ }
+ }
+ }
+ return (Module *) NULL;
+}
+
+Function *
+DbeSession::map_NametoFunction (char *name, Vector<Histable*> *list,
+ const char *sel)
+{
+ // Search the tree to find the first function whose
+ // name matches "name".
+ // Issues: is the name a full name, or a short name?
+ // Is it a demangled name? If so, what about spaces
+ // within the name?
+ // Is there a way to return all names that match?
+ // How can the user specify a particular function of that name?
+ LoadObject *loitem;
+ Function *fitem, *main_func = NULL;
+ Module *mitem, *main_mod = NULL;
+ int index1, index2, index3, which = -1;
+ if (sel)
+ {
+ char *last = NULL;
+ if (*sel == '@')
+ { // 'sel' is "@seg_num:address"
+ which = (int) getNumber (sel + 1, last);
+ if (last == NULL || *last != ':' || (which < 0) || (which >= lobjs->size ()))
+ {
+ fprintf (stderr, GTXT ("Error: Invalid number entered: %s\n"), sel);
+ return NULL;
+ }
+ uint64_t address = getNumber (last + 1, last);
+ if (last == NULL || *last != '\0')
+ {
+ fprintf (stderr, GTXT ("Error: Invalid number entered: %s\n"), sel);
+ return NULL;
+ }
+ loitem = lobjs->fetch (which);
+ Vec_loop (Module*, loitem->seg_modules, index2, mitem)
+ {
+ Vec_loop (Function*, mitem->functions, index3, fitem)
+ {
+ if (address == fitem->img_offset && match_FName (name, fitem))
+ return fitem;
+ }
+ }
+ return NULL;
+ }
+
+ which = (int) getNumber (sel, last);
+ if (last == NULL || *last != '\0')
+ {
+ fprintf (stderr, GTXT ("Error: Invalid number entered: %s\n"), sel);
+ return NULL;
+ }
+ which--;
+ }
+
+ int len_path = 0;
+ char *with_path = name;
+ name = StrRchr (name, '`');
+ if (name != with_path)
+ len_path = (int) (name - with_path);
+ else
+ with_path = NULL;
+
+ Vec_loop (LoadObject*, lobjs, index1, loitem)
+ {
+ Vec_loop (Module*, loitem->seg_modules, index2, mitem)
+ {
+ if (with_path)
+ { // with file name
+ // try source name first
+ // if failed, try object name next
+ if (!match_basename (with_path, mitem->file_name, len_path) &&
+ !match_basename (with_path, mitem->get_name (), len_path))
+ continue;
+ }
+ Vec_loop (Function*, mitem->functions, index3, fitem)
+ {
+ if (match_FName (name, fitem))
+ {
+ if (which == list->size ())
+ return fitem;
+ list->append (fitem);
+ continue;
+ }
+ if (streq (fitem->get_name (), NTXT ("MAIN_")) && mitem->is_fortran ())
+ {
+ main_func = fitem;
+ main_mod = mitem;
+ }
+ }
+ }
+ }
+
+ if (main_mod && main_func)
+ {
+ main_mod->read_stabs ();
+ if (streq (main_func->get_match_name (), name) && which <= 1)
+ return main_func;
+ }
+ return (Function *) NULL;
+}
+
+DataObject *
+DbeSession::map_NametoDataObject (char *name, Vector<Histable*> *list,
+ int which)
+{
+ // Search master list to find dataobjects whose names match "name"
+ // selecting only the entry corresponding to "which" if it is not -1.
+ // Issues: is the name fully qualified or only partially?
+ DataObject *ditem = NULL;
+ int index;
+ char *full_name;
+ Vec_loop (DataObject*, dobjs, index, ditem)
+ {
+ if (ditem->scope) continue; // skip non-master dataobjects
+
+ // try fully-qualified dataobject name first
+ if ((full_name = ditem->get_name ()) != NULL)
+ {
+ if (streq (name, full_name))
+ {
+ if (which == list->size ())
+ return ditem;
+ list->append (ditem);
+ }
+ }
+ }
+ if (list->size () > 0)
+ return ditem; // return fully-qualified match
+
+ // if fully-qualified name doesn't match anything, try a partial match
+ Vec_loop (DataObject*, dobjs, index, ditem)
+ {
+ if (ditem->scope) continue; // skip non-master dataobjects
+
+ // try fully-qualified dataobject name first
+ if ((full_name = ditem->get_name ()) != NULL)
+ {
+ if (strstr (full_name, name))
+ {
+ if (which == list->size ())
+ return ditem;
+ list->append (ditem);
+ }
+ }
+ }
+ return (DataObject *) NULL;
+}
+
+bool
+DbeSession::match_FName (char *name, Function *func)
+{
+ size_t len;
+ char buf[MAXDBUF];
+ char *full_name;
+ if (streq (func->get_name (), name)) // try full name comparison
+ return true;
+ if (streq (func->get_mangled_name (), name)) // try mangled name
+ return true;
+ if (streq (func->get_match_name (), name)) // try match name
+ return true;
+
+ Module *md = func->module; // try FORTRAN name
+ if (md && md->is_fortran ())
+ {
+ char *mangled_name = func->get_mangled_name ();
+ len = strlen (name);
+ if (((len + 1) == strlen (mangled_name)) &&
+ (strncmp (name, mangled_name, len) == 0))
+ return true;
+ }
+ snprintf (buf, sizeof (buf), NTXT ("%s"), func->get_name ());
+ full_name = buf;
+ char *arg = NULL; // find modifier and C++ class name
+ int i = get_paren (buf);
+ if (i >= 0)
+ {
+ arg = buf + i;
+ *arg = '\0';
+ }
+
+ char *mod = strchr (full_name, ' ');
+ char *cls = strchr (full_name, ':');
+
+ if (mod)
+ {
+ len = mod - full_name + 1;
+ if (!strncmp (full_name, name, len))
+ name += len;
+ full_name += len;
+ if (streq (full_name, name)) // try without modifier
+ return true;
+ }
+
+ size_t len_cmp = strlen (name);
+ if (arg)
+ {
+ *arg = '(';
+ len = arg - full_name; // try without 'args'
+ if (len_cmp == len && !strncmp (full_name, name, len))
+ return true;
+ if (cls)
+ {
+ len = arg - cls - 2; // and without 'class name'
+ if ((len_cmp == len) && !strncmp (cls + 2, name, len))
+ return true;
+ }
+ }
+
+ if (cls)
+ {
+ len = cls - full_name; // try C++ class name only
+ if (len_cmp == len && !strncmp (full_name, name, len))
+ return true;
+ if (streq (cls + 2, name)) // try without 'class name'
+ return true;
+ }
+ return false;
+}
+
+bool
+DbeSession::add_path (char *path)
+{
+ return add_path (path, get_search_path ());
+}
+
+bool
+DbeSession::add_classpath (char *path)
+{
+ return add_path (path, classpath);
+}
+
+Vector<DbeFile*> *
+DbeSession::get_classpath ()
+{
+ if (classpath_df == NULL)
+ classpath_df = new Vector<DbeFile*>;
+ for (int i = classpath_df->size (), sz = classpath->size (); i < sz; i++)
+ classpath_df->store (i, getDbeFile (classpath->fetch (i),
+ DbeFile::F_DIR_OR_JAR));
+ return classpath_df;
+}
+
+bool
+DbeSession::add_path (char *path, Vector<char*> *pathes)
+{
+ bool result = false;
+ Vector <char *> *tokens = split_str (path, ':');
+ for (long j = 0, jsz = VecSize (tokens); j < jsz; j++)
+ {
+ char *spath = tokens->get (j);
+ // Don't append path if it's already there
+ bool got = false;
+ for (int i = 0, sz = pathes->size (); i < sz; i++)
+ {
+ char *nm = pathes->get (i);
+ if (streq (nm, spath))
+ {
+ got = true;
+ break;
+ }
+ }
+ if (!got)
+ {
+ pathes->append (spath);
+ result = true;
+ }
+ else
+ free (spath);
+ }
+ delete tokens;
+ return result;
+}
+
+void
+DbeSession::set_need_refind ()
+{
+ Vector<DbeFile*> *f_list = dbeFiles->values ();
+ for (long i = 0, sz = f_list == NULL ? 0 : f_list->size (); i < sz; i++)
+ {
+ DbeFile *f = f_list->get (i);
+ f->set_need_refind (true);
+ }
+ delete f_list;
+ for (long i = 0, sz = sources == NULL ? 0 : sources->size (); i < sz; i++)
+ {
+ SourceFile *f = sources->get (i);
+ if (f && f->dbeFile)
+ f->dbeFile->set_need_refind (true);
+ }
+}
+
+void
+DbeSession::set_search_path (Vector<char*> *path, bool reset)
+{
+ if (reset)
+ search_path->destroy ();
+ for (int i = 0, sz = path == NULL ? 0 : path->size (); i < sz; i++)
+ {
+ char *name = path->fetch (i);
+ if (add_path (name))
+ reset = true;
+ }
+ if (reset)
+ {
+ set_need_refind ();
+
+ // now reset the string setting for it
+ StringBuilder sb;
+ for (int i = 0, sz = search_path == NULL ? 0 : search_path->size (); i < sz; i++)
+ {
+ char *name = search_path->fetch (i);
+ if (sb.length () != 0)
+ sb.append (':');
+ sb.append (name);
+ }
+ free (settings->str_search_path);
+ settings->str_search_path = sb.toString ();
+ }
+}
+
+void
+DbeSession::set_search_path (char *_lpath, bool reset)
+{
+ Vector<char *> *path = new Vector<char*>;
+ char *lpath = dbe_strdup (_lpath);
+ for (char *s = lpath; s;)
+ {
+ path->append (s);
+ s = strchr (s, ':');
+ if (s)
+ {
+ *s = 0;
+ s++;
+ }
+ }
+ set_search_path (path, reset);
+ delete path;
+ free (lpath);
+}
+
+void
+DbeSession::set_pathmaps (Vector<pathmap_t*> *newPathMap)
+{
+ set_need_refind ();
+ settings->set_pathmaps (newPathMap);
+}
+
+Vector<pathmap_t*> *
+DbeSession::get_pathmaps ()
+{
+ return settings->pathmaps;
+}
+
+void
+DbeSession::mobj_define (MemObjType_t *mobj)
+{
+ settings->mobj_define (mobj, false);
+ DbeView *dbev;
+ int index;
+ Vec_loop (DbeView*, views, index, dbev)
+ {
+ dbev->get_settings ()->mobj_define (mobj, false);
+ }
+}
+
+void
+DbeSession::dump_segments (FILE *out)
+{
+ int index;
+ LoadObject *loitem;
+ Vec_loop (LoadObject*, lobjs, index, loitem)
+ {
+ fprintf (out, NTXT ("Segment %d -- %s -- %s\n\n"),
+ index, loitem->get_name (), loitem->get_pathname ());
+ loitem->dump_functions (out);
+ fprintf (out, NTXT ("\n End Segment %d -- %s -- %s\n\n"),
+ index, loitem->get_name (), loitem->get_pathname ());
+ }
+}
+
+void
+DbeSession::dump_dataobjects (FILE *out)
+{
+ DataObject *ditem;
+ int index;
+
+ fprintf (out, NTXT ("\nMaster list of DataObjects:\n"));
+ Vec_loop (DataObject*, dobjs, index, ditem)
+ {
+ Histable* scope = ditem->get_scope ();
+ DataObject* parent = ditem->get_parent ();
+ DataObject* master = ditem->get_master ();
+ if (parent != NULL)
+ fprintf (out, "id %6lld: [%4lld] parent = %6lld, offset = %+4lld %s\n",
+ (ll_t) ditem->id, (ll_t) ditem->get_size (),
+ (ll_t) parent->id, (ll_t) ditem->get_offset (),
+ ditem->get_name ());
+ else
+ {
+ // parent is NULL
+ fprintf (out, NTXT ("id %6lld: [%4lld] %s "),
+ (ll_t) ditem->id, (ll_t) ditem->get_size (),
+ ditem->get_name ());
+ if (master != NULL)
+ fprintf (out, NTXT (" master=%lld "), (ll_t) master->id);
+ else if (scope != NULL)
+ fprintf (out, NTXT (" master=?? "));
+ else
+ fprintf (out, NTXT (" MASTER "));
+#if DEBUG
+ if (scope != NULL)
+ {
+ switch (scope->get_type ())
+ {
+ case Histable::LOADOBJECT:
+ case Histable::FUNCTION:
+ fprintf (out, NTXT ("%s"), scope->get_name ());
+ break;
+ case Histable::MODULE:
+ {
+ char *filename = get_basename (scope->get_name ());
+ fprintf (out, NTXT ("%s"), filename);
+ break;
+ }
+ default:
+ fprintf (out, NTXT (" Unexpected scope %d:%s"),
+ scope->get_type (), scope->get_name ());
+ }
+ }
+#endif
+ fprintf (out, NTXT ("\n"));
+ }
+ }
+}
+
+void
+DbeSession::dump_map (FILE *out)
+{
+ Experiment *exp;
+ int index;
+ Vec_loop (Experiment*, exps, index, exp)
+ {
+ exp->dump_map (out);
+ }
+}
+
+void
+DbeSession::dump_stacks (FILE *outfile)
+{
+ Experiment *exp;
+ int n = nexps ();
+ FILE *f = (outfile == NULL ? stderr : outfile);
+ for (int i = 0; i < n; i++)
+ {
+ exp = get_exp (i);
+ fprintf (f, GTXT ("Experiment %d -- %s\n"), i, exp->get_expt_name ());
+ exp->dump_stacks (f);
+ }
+}
+
+void
+DbeSession::propNames_name_store (int propId, const char *propName)
+{
+ PropDescr *prop = new PropDescr (propId, propName);
+ prop->flags = PRFLAG_NOSHOW; // do not show descriptions
+ propNames->store (propId, prop);
+}
+
+void
+DbeSession::propNames_name_store (int propId, const char* propName,
+ const char* propUname, VType_type dataType,
+ int flags)
+{
+ PropDescr *prop = new PropDescr (propId, propName);
+ prop->vtype = dataType;
+ prop->uname = dbe_strdup (propUname);
+ prop->flags = flags;
+ propNames->store (propId, prop);
+}
+
+char *
+DbeSession::propNames_name_fetch (int i)
+{
+ PropDescr *prop = propNames->fetch (i);
+ if (prop)
+ return prop->name;
+ return NULL;
+}
+
+int
+DbeSession::registerPropertyName (const char *name)
+{
+ if (name == NULL)
+ return PROP_NONE;
+ for (int i = 0; i < propNames->size (); i++)
+ {
+ char *pname = propNames_name_fetch (i);
+ if (pname && strcasecmp (pname, name) == 0)
+ return i;
+ }
+ int propId = propNames->size ();
+ propNames_name_store (propId, name);
+ return propId;
+}
+
+int
+DbeSession::getPropIdByName (const char *name)
+{
+ if (name == NULL)
+ return PROP_NONE;
+ for (int i = 0; i < propNames->size (); i++)
+ {
+ char *pname = propNames_name_fetch (i);
+ if (pname && strcasecmp (pname, name) == 0)
+ return i;
+ }
+ return PROP_NONE;
+}
+
+char *
+DbeSession::getPropName (int propId)
+{
+ if (!propNames)
+ return NULL;
+ if (propId < 0 || propId >= propNames->size ())
+ return NULL;
+ return dbe_strdup (propNames_name_fetch (propId));
+}
+
+char *
+DbeSession::getPropUName (int propId)
+{
+ if (!propNames)
+ return NULL;
+ if (propId < 0 || propId >= propNames->size ())
+ return NULL;
+ PropDescr *prop = propNames->fetch (propId);
+ if (prop)
+ return dbe_strdup (prop->uname);
+ return NULL;
+}
+
+void
+DbeSession::append (UserLabel *lbl)
+{
+ if (lbl->expr)
+ {
+ if (userLabels == NULL)
+ userLabels = new Vector<UserLabel*> ();
+ userLabels->append (lbl);
+ }
+}
+
+void
+DbeSession::append (SourceFile *sf)
+{
+ sources->append (sf);
+ objs->append (sf);
+}
+
+UserLabel *
+DbeSession::findUserLabel (char *name)
+{
+ for (int i = 0, sz = userLabels ? userLabels->size () : 0; i < sz; i++)
+ {
+ UserLabel *lbl = userLabels->fetch (i);
+ if (strcasecmp (lbl->name, name) == 0)
+ return lbl;
+ }
+ return NULL;
+}
+
+Expression *
+DbeSession::findObjDefByName (char *name)
+{
+ Expression *expr = NULL;
+
+ MemObjType_t *mot = MemorySpace::findMemSpaceByName (name);
+ if (mot != NULL)
+ {
+ char *index_expr_str = mot->index_expr;
+ expr = ql_parse (index_expr_str);
+ }
+
+ if (expr == NULL)
+ {
+ int indxtype = findIndexSpaceByName (name);
+ expr = getIndexSpaceExpr (indxtype);
+ }
+ if (expr == NULL)
+ {
+ UserLabel *ulbl = findUserLabel (name);
+ if (ulbl)
+ expr = ulbl->expr;
+ }
+ return expr;
+}
+
+Expression *
+DbeSession::ql_parse (const char *expr_spec)
+{
+ /* (This slight duplication means we don't need to worry about copy
+ constructors for the QL::Result, nor about the lifetime of the
+ expr_spec.) */
+ if (expr_spec != NULL)
+ {
+ QL::Result result (expr_spec);
+ QL::Parser qlparser (result);
+ if (qlparser () != 0)
+ return NULL;
+ return result ();
+ }
+ else
+ {
+ QL::Result result;
+ QL::Parser qlparser (result);
+ if (qlparser () != 0)
+ return NULL;
+ return result ();
+ }
+}
+
+Vector<void*> *
+DbeSession::getIndxObjDescriptions ()
+{
+ int size = dyn_indxobj_indx;
+ if (size == 0)
+ return NULL;
+ Vector<int> *type = new Vector<int>(dyn_indxobj_indx);
+ Vector<char*> *desc = new Vector<char*>(dyn_indxobj_indx);
+ Vector<char*> *i18ndesc = new Vector<char*>(dyn_indxobj_indx);
+ Vector<char> *mnemonic = new Vector<char>(dyn_indxobj_indx);
+ Vector<int> *orderList = new Vector<int>(dyn_indxobj_indx);
+ Vector<char*> *exprList = new Vector<char*>(dyn_indxobj_indx);
+ Vector<char*> *sdesc = new Vector<char*>(dyn_indxobj_indx);
+ Vector<char*> *ldesc = new Vector<char*>(dyn_indxobj_indx);
+
+ for (long i = 0, sz = VecSize (dyn_indxobj); i < sz; i++)
+ {
+ IndexObjType_t *tot = dyn_indxobj->get (i);
+ if (tot->memObj == NULL)
+ {
+ type->append ((int) tot->type);
+ desc->append (dbe_strdup (tot->name));
+ i18ndesc->append (dbe_strdup (tot->i18n_name));
+ sdesc->append (dbe_strdup (tot->short_description));
+ ldesc->append (dbe_strdup (tot->long_description));
+ mnemonic->append (tot->mnemonic);
+ orderList->append (settings->indx_tab_order->fetch (i));
+ exprList->append (dbe_strdup (tot->index_expr_str));
+ }
+ }
+ Vector<void*> *res = new Vector<void*>(8);
+ res->store (0, type);
+ res->store (1, desc);
+ res->store (2, mnemonic);
+ res->store (3, i18ndesc);
+ res->store (4, orderList);
+ res->store (5, exprList);
+ res->store (6, sdesc);
+ res->store (7, ldesc);
+ return (res);
+}
+
+// Static function to get a vector of custom index object definitions
+Vector<void*> *
+DbeSession::getCustomIndxObjects ()
+{
+ Vector<char*> *name = new Vector<char*>;
+ Vector<char*> *formula = new Vector<char*>;
+ for (long i = dyn_indxobj_indx_fixed, sz = VecSize (dyn_indxobj); i < sz; i++)
+ {
+ IndexObjType_t *tot = dyn_indxobj->get (i);
+ if (tot->memObj == NULL)
+ {
+ name->append (dbe_strdup (tot->name));
+ formula->append (dbe_strdup (tot->index_expr_str));
+ }
+ }
+ Vector<void*> *res = new Vector<void*>(2);
+ res->store (0, name);
+ res->store (1, formula);
+ return (res);
+}
+
+// Static function to define a new index object type
+char *
+DbeSession::indxobj_define (const char *mname, char *i18nname, const char *index_expr_str, char *short_description, char *long_description)
+{
+ if (mname == NULL)
+ return dbe_strdup (GTXT ("No index object type name has been specified."));
+ if (isalpha ((int) (mname[0])) == 0)
+ return dbe_sprintf (GTXT ("Index Object type name %s does not begin with an alphabetic character"),
+ mname);
+ const char *p = mname;
+ while (*p != 0)
+ {
+ if ((isalnum ((int) (*p)) == 0) && (*p != '_'))
+ return dbe_sprintf (GTXT ("Index Object type name %s contains a non-alphanumeric character"),
+ mname);
+ p++;
+ }
+
+ // make sure the name is not in use
+ if (MemorySpace::findMemSpaceByName (mname) != NULL)
+ return dbe_sprintf (GTXT ("Memory/Index Object type name %s is already defined"),
+ mname);
+
+ int idxx = findIndexSpaceByName (mname);
+ if (idxx >= 0)
+ {
+ IndexObjType_t *mt = dyn_indxobj->fetch (idxx);
+ if (strcmp (mt->index_expr_str, index_expr_str) == 0)
+ // It's a redefinition, but the new definition is the same
+ return NULL;
+ return dbe_sprintf (GTXT ("Memory/Index Object type name %s is already defined"),
+ mname);
+ }
+ if (index_expr_str == NULL)
+ return dbe_strdup (GTXT ("No index-expr has been specified."));
+ if (strlen (index_expr_str) == 0)
+ return dbe_sprintf (GTXT ("Index Object index expression is invalid: %s"),
+ index_expr_str);
+
+ // verify that the index expression parses correctly
+ char *expr_str = dbe_strdup (index_expr_str);
+ Expression *expr = ql_parse (expr_str);
+ if (expr == NULL)
+ return dbe_sprintf (GTXT ("Index Object index expression is invalid: %s"),
+ expr_str);
+
+ // It's OK, create the new table entry
+ IndexObjType_t *tot = new IndexObjType_t;
+ tot->type = dyn_indxobj_indx++;
+ tot->name = dbe_strdup (mname);
+ tot->i18n_name = dbe_strdup (i18nname);
+ tot->short_description = dbe_strdup (short_description);
+ tot->long_description = dbe_strdup (long_description);
+ tot->index_expr_str = expr_str;
+ tot->index_expr = expr;
+ tot->mnemonic = mname[0];
+
+ // add it to the list
+ dyn_indxobj->append (tot);
+ idxobjs->append (new HashMap<uint64_t, Histable*>);
+
+ // tell the session
+ settings->indxobj_define (tot->type, false);
+
+ DbeView *dbev;
+ int index;
+ Vec_loop (DbeView*, views, index, dbev)
+ {
+ dbev->addIndexSpace (tot->type);
+ }
+ return NULL;
+}
+
+char *
+DbeSession::getIndexSpaceName (int index)
+{
+ if (index < 0 || index >= dyn_indxobj->size ())
+ return NULL;
+ return dyn_indxobj->fetch (index)->name;
+}
+
+char *
+DbeSession::getIndexSpaceDescr (int index)
+{
+ if (index < 0 || index >= dyn_indxobj->size ())
+ return NULL;
+ return dyn_indxobj->fetch (index)->i18n_name;
+}
+
+Expression *
+DbeSession::getIndexSpaceExpr (int index)
+{
+ if (index < 0 || index >= dyn_indxobj->size ())
+ return NULL;
+ return dyn_indxobj->fetch (index)->index_expr;
+}
+
+char *
+DbeSession::getIndexSpaceExprStr (int index)
+{
+ if (index < 0 || index >= dyn_indxobj->size ())
+ return NULL;
+ return dyn_indxobj->fetch (index)->index_expr_str;
+}
+
+int
+DbeSession::findIndexSpaceByName (const char *mname)
+{
+ int idx;
+ IndexObjType_t *mt;
+ Vec_loop (IndexObjType_t*, dyn_indxobj, idx, mt)
+ {
+ if (strcasecmp (mt->name, mname) == 0)
+ return idx;
+ }
+ return -1;
+}
+
+void
+DbeSession::removeIndexSpaceByName (const char *mname)
+{
+ IndexObjType_t *indObj = findIndexSpace (mname);
+ if (indObj)
+ indObj->name[0] = 0;
+}
+
+IndexObjType_t *
+DbeSession::getIndexSpace (int index)
+{
+ return ((index < 0) || (index >= VecSize (dyn_indxobj))) ? NULL : dyn_indxobj->get (index);
+}
+
+IndexObjType_t *
+DbeSession::findIndexSpace (const char *mname)
+{
+ return getIndexSpace (findIndexSpaceByName (mname));
+}
+
+void
+DbeSession::get_filter_keywords (Vector<void*> *res)
+{
+ Vector <char*> *kwCategory = (Vector<char*>*) res->fetch (0);
+ Vector <char*> *kwCategoryI18N = (Vector<char*>*) res->fetch (1);
+ Vector <char*> *kwDataType = (Vector<char*>*) res->fetch (2);
+ Vector <char*> *kwKeyword = (Vector<char*>*) res->fetch (3);
+ Vector <char*> *kwFormula = (Vector<char*>*) res->fetch (4);
+ Vector <char*> *kwDescription = (Vector<char*>*) res->fetch (5);
+ Vector <void*> *kwEnumDescs = (Vector<void*>*) res->fetch (6);
+
+ char *vtypeNames[] = VTYPE_TYPE_NAMES;
+ for (long i = 0, sz = userLabels ? userLabels->size () : 0; i < sz; i++)
+ {
+ UserLabel *lbl = userLabels->fetch (i);
+ kwCategory->append (dbe_strdup (NTXT ("FK_LABEL")));
+ kwCategoryI18N->append (dbe_strdup (GTXT ("Labels")));
+ kwDataType->append (dbe_strdup (vtypeNames[TYPE_BOOL]));
+ kwKeyword->append (dbe_strdup (lbl->name));
+ kwFormula->append (dbe_strdup (lbl->str_expr));
+ kwDescription->append (dbe_strdup (lbl->comment));
+ kwEnumDescs->append (NULL);
+ }
+
+ for (long i = 0, sz = propNames ? propNames->size () : 0; i < sz; i++)
+ {
+ PropDescr *prop = propNames->fetch (i);
+ char *pname = prop ? prop->name : NULL;
+ if (pname == NULL || *pname == 0 || prop->flags & PRFLAG_NOSHOW)
+ continue;
+ int vtypeNum = prop->vtype;
+ if (vtypeNum < 0 || vtypeNum >= TYPE_LAST)
+ vtypeNum = TYPE_NONE;
+ kwCategory->append (dbe_strdup (NTXT ("FK_EVTPROP"))); //Event Property
+ kwCategoryI18N->append (dbe_strdup (GTXT ("Misc. Definitions")));
+ kwDataType->append (dbe_strdup (vtypeNames[vtypeNum]));
+ kwKeyword->append (dbe_strdup (pname));
+ kwFormula->append (NULL);
+ kwDescription->append (dbe_strdup (prop->uname));
+ kwEnumDescs->append (NULL);
+ }
+
+ for (long i = 0, sz = dyn_indxobj ? dyn_indxobj->size () : 0; i < sz; i++)
+ {
+ IndexObjType_t *obj = dyn_indxobj->get (i);
+ if (obj->memObj)
+ continue;
+ kwCategory->append (dbe_strdup (NTXT ("FK_IDXOBJ")));
+ kwCategoryI18N->append (dbe_strdup (GTXT ("Index Object Definitions")));
+ kwDataType->append (dbe_strdup (vtypeNames[TYPE_INT64]));
+ kwKeyword->append (dbe_strdup (obj->name));
+ kwFormula->append (dbe_strdup (obj->index_expr_str));
+ kwDescription->append (dbe_strdup (obj->i18n_name));
+ kwEnumDescs->append (NULL);
+ }
+}
+
+Histable *
+DbeSession::findIndexObject (int idxtype, uint64_t idx)
+{
+ HashMap<uint64_t, Histable*> *iobjs = idxobjs->fetch (idxtype);
+ return iobjs->get (idx);
+}
+
+Histable *
+DbeSession::createIndexObject (int idxtype, int64_t idx)
+{
+ HashMap<uint64_t, Histable*> *iobjs = idxobjs->fetch (idxtype);
+
+ Histable *idxobj = iobjs->get (idx);
+ if (idxobj == NULL)
+ {
+ idxobj = new IndexObject (idxtype, idx);
+ if (idx == -1)
+ idxobj->set_name (dbe_strdup (GTXT ("<Unknown>")));
+ iobjs->put (idx, idxobj);
+ }
+
+ return idxobj;
+}
+
+Histable *
+DbeSession::createIndexObject (int idxtype, Histable *hobj)
+{
+ HashMap<uint64_t, Histable*> *iobjs = idxobjs->fetch (idxtype);
+ int64_t idx = hobj ? hobj->id : -1;
+ Histable *idxobj = iobjs->get (idx);
+ if (idxobj == NULL)
+ {
+ idxobj = new IndexObject (idxtype, hobj);
+ if (idx == -1)
+ idxobj->set_name (dbe_strdup (GTXT ("<Unknown>")));
+ iobjs->put (idx, idxobj);
+ }
+
+ return idxobj;
+}
+
+Histable *
+DbeSession::findObjectById (Histable::Type type, int subtype, uint64_t id)
+{
+ switch (type)
+ {
+ case Histable::FUNCTION:
+ case Histable::MODULE:
+ case Histable::LOADOBJECT:
+ return ( id < (uint64_t) objs->size ()) ? objs->fetch ((int) id) : NULL;
+ case Histable::INDEXOBJ:
+ return findIndexObject (subtype, id);
+ // ignoring the following cases
+ case Histable::INSTR:
+ case Histable::LINE:
+ case Histable::EADDR:
+ case Histable::MEMOBJ:
+ case Histable::PAGE:
+ case Histable::DOBJECT:
+ case Histable::SOURCEFILE:
+ case Histable::IOACTFILE:
+ case Histable::IOACTVFD:
+ case Histable::IOCALLSTACK:
+ case Histable::HEAPCALLSTACK:
+ case Histable::OTHER:
+ case Histable::EXPERIMENT:
+ break;
+ }
+ return NULL;
+}
+
+// return a vector of Functions that match the regular expression input string
+Vector<JThread *> *
+DbeSession::match_java_threads (char *ustr, int matchParent,
+ Vector<uint64_t> * &grids,
+ Vector<uint64_t> * &expids)
+{
+ if (ustr == NULL)
+ return NULL;
+
+ char *str = dbe_sprintf (NTXT ("^%s$"), ustr);
+ regex_t regex_desc;
+ int rc = regcomp (&regex_desc, str, REG_EXTENDED | REG_NOSUB | REG_NEWLINE);
+ free (str);
+ if (rc) // syntax error in parsing string
+ return NULL;
+
+ // allocate the new vector
+ Vector<JThread *> *ret = new Vector<JThread*>;
+ grids = new Vector<uint64_t>;
+ expids = new Vector<uint64_t>;
+
+ int index;
+ JThread *jthread;
+ int expid;
+ Experiment* exp;
+ Vec_loop (Experiment*, exps, expid, exp)
+ {
+
+ Vec_loop (JThread*, exp->get_jthreads (), index, jthread)
+ {
+ const char * name;
+ if (matchParent)
+ name = jthread->parent_name;
+ else
+ name = jthread->group_name;
+ if (name == NULL)
+ name = "";
+ if (!regexec (&regex_desc, name, 0, NULL, 0))
+ {
+ // this one matches
+ ret->append (jthread);
+ grids->append (exp->groupId);
+ expids->append (exp->getUserExpId ());
+ }
+ }
+ }
+
+ regfree (&regex_desc);
+ return ret;
+}
+
+// return a vector of Functions that match the regular expression input string
+Vector<Function *> *
+DbeSession::match_func_names (const char *ustr, Histable::NameFormat nfmt)
+{
+ if (ustr == NULL)
+ return NULL;
+ char *str = dbe_sprintf (NTXT ("^%s$"), ustr);
+ regex_t regex_desc;
+ int rc = regcomp (&regex_desc, str, REG_EXTENDED | REG_NOSUB | REG_NEWLINE);
+ free (str);
+ if (rc) // syntax error in parsing string
+ return NULL;
+
+ // allocate the new vector
+ Vector<Function *> *ret = new Vector<Function*>;
+
+ int index;
+ Histable *obj;
+ Vec_loop (Histable*, objs, index, obj)
+ {
+ if (obj->get_type () == Histable::FUNCTION)
+ {
+ Function *func = (Function*) obj;
+ if (!regexec (&regex_desc, func->get_name (nfmt), 0, NULL, 0))
+ // this one matches
+ ret->append (func);
+ }
+ }
+ regfree (&regex_desc);
+ return ret;
+}
+
+// return a vector of Functions that match the regular expression input string
+Vector<FileData *> *
+DbeSession::match_file_names (char *ustr, Histable::NameFormat nfmt)
+{
+ if (ustr == NULL)
+ return NULL;
+ char *str = dbe_sprintf (NTXT ("^%s$"), ustr);
+ regex_t regex_desc;
+ int rc = regcomp (&regex_desc, str, REG_EXTENDED | REG_NOSUB | REG_NEWLINE);
+ free (str);
+ if (rc) // syntax error in parsing string
+ return NULL;
+
+ // allocate the new vector
+ Vector<FileData *> *ret = new Vector<FileData*>;
+ int numExps = nexps ();
+ DefaultMap<int64_t, FileData*>* fDataMap;
+ Vector<FileData *> *fDataObjs;
+ FileData *fData;
+ int size;
+ for (int i = 0; i < numExps; i++)
+ {
+ Experiment *exp = get_exp (i);
+ fDataMap = exp->getFDataMap ();
+ fDataObjs = fDataMap->values ();
+ size = fDataObjs->size ();
+ for (int j = 0; j < size; j++)
+ {
+ fData = fDataObjs->fetch (j);
+ if (fData
+ && !regexec (&regex_desc, fData->get_raw_name (nfmt), 0, NULL, 0))
+ // this one matches
+ ret->append (fData);
+ }
+ }
+ regfree (&regex_desc);
+ return ret;
+}
+
+// return a vector of DataObjects that match the regular expression input string
+Vector<DataObject *> *
+DbeSession::match_dobj_names (char *ustr)
+{
+ if (ustr == NULL)
+ return NULL;
+ char *str = dbe_sprintf (NTXT ("^%s$"), ustr);
+ regex_t regex_desc;
+ int rc = regcomp (&regex_desc, str, REG_EXTENDED | REG_NOSUB | REG_NEWLINE);
+ free (str);
+ if (rc) // syntax error in parsing string
+ return NULL;
+
+ // allocate the new vector
+ Vector<DataObject *> *ret = new Vector<DataObject*>;
+ int index;
+ DataObject *ditem;
+ Vec_loop (DataObject*, dobjs, index, ditem)
+ {
+ // does this one match
+ if (!regexec (&regex_desc, ditem->get_name (), 0, NULL, 0))
+ // this one matches
+ ret->append (ditem);
+ }
+ regfree (&regex_desc);
+ return ret;
+}
+
+void
+DbeSession::dump (char *msg, Vector<BaseMetric*> *mlist)
+{
+ if (msg)
+ fprintf (stderr, "%s\n", msg);
+ int sz = mlist ? mlist->size () : -1;
+ for (int i = 0; i < sz; i++)
+ {
+ BaseMetric *m = mlist->fetch (i);
+ char *s = m->dump ();
+ fprintf (stderr, "%2d %s\n", i, s);
+ free (s);
+ }
+ fprintf (stderr, "======END of mlist[%d] =========\n", sz);
+}
+
+void
+DbeSession::dump (char *msg, Vector<Metric*> *mlist)
+{
+ if (msg)
+ fprintf (stderr, "%s\n", msg);
+ int sz = mlist ? mlist->size () : -1;
+ for (int i = 0; i < sz; i++)
+ {
+ Metric *m = mlist->fetch (i);
+ char *s = m->dump ();
+ fprintf (stderr, "%2d %s\n", i, s);
+ free (s);
+ }
+ fprintf (stderr, "======END of mlist[%d] =========\n", sz);
+}
diff --git a/gprofng/src/DbeSession.h b/gprofng/src/DbeSession.h
new file mode 100644
index 00000000000..0173f1a891c
--- /dev/null
+++ b/gprofng/src/DbeSession.h
@@ -0,0 +1,481 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+/* The DbeSession class is instantiated by a DbeApplication, and contains
+ * all the data referring to a set of loaded experiments
+ *
+ * It manages a set of tables for the Experiments, for the LoadObjects
+ * referenced in them, and for the other objects representing the
+ * elements in the program hierarchy that can have metrics associated
+ * with them. It also has a master list of all the metrics available
+ * from all the loaded experiments.
+ *
+ * It gets an instance of the Settings class, instantiated as a copy
+ * of the one in the DbeApplication that instantiated the DbeSession.
+ *
+ * In addition, it manages a vector of DbeView's (q.v.); each DbeView
+ * represents a window into the DbeSession, and has its own set of
+ * Settings, and FilterSets for the Experiments, and is the access point
+ * for all processed data.
+ */
+
+#ifndef _DBESESSION_H
+#define _DBESESSION_H
+
+
+#include <stdio.h>
+#include "dbe_structs.h"
+#include "vec.h"
+#include "Hist_data.h"
+#include "Histable.h"
+#include "BaseMetric.h"
+#include "BaseMetricTreeNode.h"
+#include "MemorySpace.h"
+#include "hwcentry.h"
+#include "dbe_types.h"
+#include "Settings.h"
+#include "HashMap.h"
+#include "Table.h"
+#include "Experiment.h"
+
+class DbeSession;
+class Experiment;
+class Expression;
+class ExpGroup;
+class Function;
+class JMethod;
+class Histable;
+class DbeView;
+class Module;
+class LoadObject;
+class DataObject;
+class SourceFile;
+class Settings;
+class StringBuilder;
+class UserLabel;
+class DbeFile;
+class DbeJarFile;
+class FileData;
+class HeapData;
+template <typename ITEM> class DbeSyncMap;
+template <class ITEM> class Vector;
+
+struct DispTab;
+struct List;
+struct Countable;
+class IndexObjType_t;
+
+typedef struct
+{
+ char *path;
+ Experiment *exp;
+ DbeSession *ds;
+ bool read_ahead;
+} exp_ctx;
+
+class DbeSession
+{
+public:
+ DbeSession (Settings *_settings, bool _ipc_mode, bool _rdt_mode);
+ ~DbeSession ();
+
+ void reset ();
+ void reset_data ();
+
+ void
+ set_interactive (bool _interactive)
+ {
+ interactive = _interactive;
+ }
+
+ bool
+ is_interactive ()
+ {
+ return interactive;
+ }
+
+ bool is_datamode_available ();
+ bool is_leaklist_available ();
+ bool is_heapdata_available ();
+ bool is_iodata_available ();
+ bool is_racelist_available ();
+ bool is_deadlocklist_available ();
+ bool is_timeline_available ();
+ bool is_ifreq_available ();
+ bool is_omp_available ();
+ bool has_java ();
+ bool has_ompavail ();
+
+ // XXX get_clock should be removed, to support cpus with different clocks
+ // XXX means reworking time-convertible HWC code
+ int get_clock (int id);
+
+ // Access functions for DbeView's
+ int createView ();
+ int createView (int index, int cloneindex);
+ DbeView *getView (int index);
+ void dropView (int index);
+
+ // Access functions controlling the experiment list
+ Vector<char*> *get_group_or_expt (char *path); // load an experiment or group
+
+ void open_experiment (Experiment *exp, char *path);
+ Experiment *get_exp (int exp_ind);
+ Vector<Vector<char*>*> *getExperimensGroups ();
+ char *setExperimentsGroups (Vector<Vector<char*>*> *groups);
+ char *drop_experiment (int exp_ind);
+ int find_experiment (char *path);
+
+ int
+ nexps ()
+ {
+ return exps->size ();
+ }
+ int ngoodexps ();
+
+ // Access functions controlling the DataObject list
+ DataObject *createDataObject ();
+ DataObject *createDataObject (DataObject *d, DataObject *p = NULL);
+ DataObject *createMasterDataObject (DataObject *);
+ Vector<DataObject*> *get_dobj_elements (DataObject *);
+
+ DataObject *
+ get_Total_DataObject ()
+ {
+ return d_total;
+ };
+
+ DataObject *
+ get_Unknown_DataObject ()
+ {
+ return d_unknown;
+ };
+
+ DataObject *
+ get_Scalars_DataObject ()
+ {
+ return d_scalars;
+ };
+
+ DataObject *find_dobj_by_name (char *dobj_name);
+ DataObject *find_dobj_match (DataObject *dobj);
+ DataObject *find_dobj_master (DataObject *dobj);
+
+ int
+ ndobjs ()
+ {
+ return dobjs->size ();
+ }
+
+ // check if no -xhwcprof should be ignored
+ bool
+ check_ignore_no_xhwcprof ()
+ {
+ return settings->get_ignore_no_xhwcprof ();
+ };
+
+ // check if FS warning should be comment, or real warning
+ bool
+ check_ignore_fs_warn ()
+ {
+ return settings->get_ignore_fs_warn ();
+ };
+
+ // Access functions controlling the LoadObject list
+ DbeSyncMap<LoadObject> *loadObjMap;
+ void append (LoadObject *lobj);
+ LoadObject *createLoadObject (const char *nm, int64_t cksum = 0);
+ LoadObject *createLoadObject (const char *nm, const char *runTimePath, DbeFile *df);
+
+ Vector<LoadObject *> *
+ get_LoadObjects ()
+ {
+ return lobjs;
+ };
+
+ void dobj_updateHT (DataObject *dobj);
+ LoadObject *get_Total_LoadObject ();
+ Vector<LoadObject*> *get_text_segments ();
+ LoadObject *get_Unknown_LoadObject ();
+ LoadObject *find_lobj_by_name (const char *lobj_name, int64_t cksum = 0);
+
+ // Access functions controlling the Tab list
+ Vector<DispTab*> *
+ get_TabList ()
+ {
+ return settings->get_TabList ();
+ };
+
+ Vector<bool> *
+ get_MemTabList ()
+ {
+ return settings->get_MemTabState ();
+ };
+
+ void mobj_define (MemObjType_t *);
+
+ // Access functions controlling metrics
+ BaseMetric *find_base_reg_metric (char *mcmd);
+ Vector<BaseMetric*> *get_base_reg_metrics (); // excludes comparison (expr) variants
+
+ Vector<BaseMetric*> *
+ get_all_reg_metrics ()
+ {
+ return reg_metrics; // includes comparison (expr) variants
+ };
+
+ BaseMetricTreeNode *get_reg_metrics_tree ();
+ BaseMetric *register_metric_expr (BaseMetric::Type type, char *aux, char *expr_spec);
+ BaseMetric *register_metric (BaseMetric::Type type);
+ BaseMetric *register_metric (char *name, char *username, char *_def);
+ BaseMetric *register_metric (Hwcentry *ctr, const char* cmdname, const char* username);
+ void drop_metric (BaseMetric *);
+ Module *createModule (LoadObject *lo, const char *nm);
+ Module *createUnknownModule (LoadObject *lo);
+ Module *createClassFile (char *className);
+ DbeFile *getDbeFile (char *filename, int filetype);
+ SourceFile *get_Unknown_Source ();
+ SourceFile *createSourceFile (const char *path);
+ Histable *createHistObject (Histable::Type);
+ Function *createFunction ();
+ Function *create_hide_function (LoadObject *lo);
+ Function *get_Total_Function ();
+ Function *get_Unknown_Function ();
+ Function *get_JUnknown_Function ();
+ Function *get_jvm_Function ();
+ LoadObject *get_OMP_LoadObject ();
+ Function *get_OMP_Function (int);
+ JMethod *createJMethod ();
+ Histable *createIndexObject (int idxtype, int64_t idx);
+ Histable *createIndexObject (int idxtype, Histable *hobj);
+
+ enum SpecialFunction
+ {
+ TruncatedStackFunc,
+ FailedUnwindFunc,
+ LastSpecialFunction
+ };
+ Function *getSpecialFunction (SpecialFunction);
+
+ Histable *
+ findObjectById (uint64_t _id)
+ {
+ long id = (long) _id;
+ return (id >= 0 && id < objs->size ()) ? objs->fetch (id) : NULL;
+ }
+
+ Histable *findObjectById (Histable::Type type, int subtype, uint64_t id);
+
+ // Other access functions
+ bool find_obj (FILE *dis_file, FILE *inp_file, Histable *&obj, char *name,
+ const char *sel, Histable::Type type, bool xdefault);
+ int ask_which (FILE *dis_file, FILE *inp_file, Vector<Histable*> *list, char *name);
+ LoadObject *map_NametoLoadObject (char *name, Vector<Histable*> *, int which);
+ Module *map_NametoModule (char *name, Vector<Histable*> *, int which);
+ Function *map_NametoFunction (char *, Vector<Histable*> *, const char *);
+ DataObject *map_NametoDataObject (char *name, Vector<Histable*> *, int which);
+ bool match_FName (char *name, Function *func);
+
+ // Functions to convert a string to all matching Functions/DataObjects
+ Vector<Function *> *match_func_names (const char *ustr, Histable::NameFormat nfmt);
+ Vector<DataObject *> *match_dobj_names (char *);
+
+ // Functions to convert a string to all matching JThreads
+ Vector<JThread*> *match_java_threads (char *ustr, int matchParent,
+ Vector<uint64_t> * &grids,
+ Vector<uint64_t> * &expids);
+ // Function to convert a string to all matching File names
+ Vector<FileData *> *match_file_names (char *ustr, Histable::NameFormat nfmt);
+
+ // Access functions concerning the search path
+ Vector<char*> *
+ get_search_path ()
+ {
+ return search_path;
+ }
+
+ Vector<DbeFile*>*get_classpath ();
+ void set_search_path (Vector<char*> *path, bool reset);
+ void set_search_path (char *lpath, bool reset);
+ bool add_classpath (char *path);
+ bool add_path (char *path);
+ void set_pathmaps (Vector<pathmap_t*> *newPathMap);
+ Vector<pathmap_t*> *get_pathmaps ();
+
+ // functions to aid debugging
+ void dump_stacks (FILE *);
+ void dump_dataobjects (FILE *);
+ void dump_segments (FILE *);
+ void dump_map (FILE *);
+
+ // Find dynamic property by name
+ int registerPropertyName (const char *name);
+ int getPropIdByName (const char *name);
+ char* getPropName (int propId);
+ char* getPropUName (int propId);
+
+ Vector<UserLabel*> *userLabels; // List of er_labels
+ UserLabel *findUserLabel (const char *name);
+ DbeJarFile *get_JarFile (const char *name);
+ void append (UserLabel *lbl);
+ void append (SourceFile *sf);
+ void append (Experiment *exp);
+ void append (Hwcentry *exp);
+ void set_need_refind ();
+
+ // Find user defined object by name
+ Expression *findObjDefByName (const char *);
+ void get_filter_keywords (Vector<void*> *res);
+
+ // Get the Settings class object
+ Settings *
+ get_settings ()
+ {
+ return settings;
+ }
+
+ // static members, used to define or fetch the various IndexSpaces
+ Vector<void*> *getIndxObjDescriptions (void);
+ Vector<void*> *getCustomIndxObjects (void);
+ char *indxobj_define (const char *, char *, const char *, char *, char *);
+ char *getIndexSpaceName (int index);
+ char *getIndexSpaceDescr (int index);
+ Expression *getIndexSpaceExpr (int index);
+ char *getIndexSpaceExprStr (int index);
+ int findIndexSpaceByName (const char *mname);
+ void removeIndexSpaceByName (const char *mname);
+ IndexObjType_t *getIndexSpace (int index);
+ IndexObjType_t *findIndexSpace (const char *mname);
+ Expression *ql_parse (const char *expr_spec);
+ BaseMetric *find_metric (BaseMetric::Type type, const char *cmd, const char *expr_spec = NULL);
+ static void dump (char *msg, Vector<Metric*> *mlist);
+ static void dump (char *msg, Vector<BaseMetric*> *mlist);
+ static Platform_t platform; // Sparc, Intel
+ Vector<ExpGroup *> *expGroups;
+ HashMap<char*, LoadObject *> *comp_lobjs; // list of comparable LoadObjects
+ HashMap<char*, DbeLine *> *comp_dbelines; // list of comparable DbeLines
+ HashMap<char*, SourceFile*>*comp_sources; // list of comparable SourceFiles
+ char *localized_SP_UNKNOWN_NAME;
+
+ void
+ set_lib_visibility_used ()
+ {
+ lib_visibility_used = true;
+ }
+
+ bool
+ is_lib_visibility_used ()
+ {
+ return lib_visibility_used;
+ }
+
+ void unlink_tmp_files ();
+ char *get_tmp_file_name (const char *nm, bool for_java);
+
+ Vector<char *> *tmp_files;
+ int status_ompavail;
+ int archive_mode;
+ bool ipc_mode;
+ bool rdt_mode;
+
+ // data and methods concerning the machine model
+ // methods are in source file MachineModel.cc
+ Vector<char*> *list_mach_models (); // scan . and system lib directory for models
+ char *load_mach_model (char *);
+
+ char *
+ get_mach_model ()
+ {
+ return dbe_strdup (mach_model_loaded);
+ };
+ Vector<SourceFile *> *get_sources ();
+
+private:
+ void init ();
+ void check_tab_avail ();
+ bool add_path (char *path, Vector<char*> *pathes);
+ Experiment *createExperiment ();
+
+ // Divide the regular createExperiment into two parts -
+ // Part1 creates just the Experiment data structure
+ // Part2 updates related fields and vectors
+ Experiment *createExperimentPart1 ();
+ void createExperimentPart2 (Experiment *exp);
+
+ Histable *findIndexObject (int idxtype, uint64_t idx);
+ void append_mesgs (StringBuilder *sb, char *path, Experiment *exp);
+ static void insert_metric (BaseMetric *mtr, Vector<BaseMetric*> *mlist);
+ void update_metric_tree (BaseMetric *m);
+
+ char *find_mach_model (char *); // fine machine model file by name
+ Vector<Experiment*> *exps; // Master list of experiments
+ Vector<Histable*> *objs; // Master list of Functions,Modules,Segments
+ Vector<DataObject*> *dobjs; // Master list of DataObjects
+ Vector<LoadObject*> *lobjs; // Auxiliary list of LoadObjects
+ Vector<Hwcentry*> *hwcentries;
+ Vector<HashMap<uint64_t, Histable*>*> *idxobjs; // Master list of IndexObjects
+ HashMap<char*, SourceFile*> *sourcesMap; // list of Source which were not archived
+ Vector<SourceFile*> *sources; // list of SourceFiles
+ Map<const char*, DbeJarFile*>*dbeJarFiles;
+ Vector<Countable*> *metrics;
+ Vector<BaseMetric*> *reg_metrics; // Master list of BaseMetrics
+ BaseMetricTreeNode* reg_metrics_tree; // Hierarchy of BaseMetrics
+ Vector<char*> *search_path;
+ Vector<char*> *classpath;
+ Vector<DbeFile*> *classpath_df;
+ Map<const char*, DbeFile*>*dbeFiles;
+ Vector<DbeView*> *views; // Master list of DbeViews
+ bool interactive; // interactive mode
+ bool lib_visibility_used;
+ LoadObject *lo_total; // Total LoadObject
+ Function *f_total; // Total function
+ LoadObject *lo_unknown; // Unknown LoadObject
+ Function *f_unknown; // Unknown function
+ SourceFile *sf_unknown; // Unknown source file
+ Function *f_jvm; // pseudo-function <JVM-System>
+ Vector<Function*> *f_special; // pseudo-functions
+ Function *j_unknown; // pseudo-function <no Java callstack>
+ LoadObject *lo_omp; // OMP LoadObject (libmtsk)
+ Vector<Function*> *omp_functions; // OMP-overhead, etc.
+ DataObject *d_unknown; // Unknown dataobject
+ DataObject *d_scalars; // Scalars dataobject
+ DataObject *d_total; // Total dataobject
+ List **dnameHTable; // DataObject name hash table
+ Settings *settings; // setting/defaults structure
+ Vector<IndexObjType_t*> *dyn_indxobj; // Index Object definitions
+ int dyn_indxobj_indx;
+ int dyn_indxobj_indx_fixed;
+
+ void propNames_name_store (int propId, const char *propName);
+ void propNames_name_store (int propId, const char *propName,
+ const char *propUName, VType_type vType, int flags);
+ char* propNames_name_fetch (int propId);
+ Vector<PropDescr*> *propNames;
+ char *defExpName;
+ int user_exp_id_counter;
+ char *mach_model_loaded;
+ char *tmp_dir_name;
+};
+
+// For now, there's only one, so keep its pointer
+extern DbeSession *dbeSession;
+
+extern Vector<char *> *split_str (char *str, char delimiter);
+#endif /* _DBESESSION_H */
diff --git a/gprofng/src/DbeSyncMap.h b/gprofng/src/DbeSyncMap.h
new file mode 100644
index 00000000000..f13f7b422dc
--- /dev/null
+++ b/gprofng/src/DbeSyncMap.h
@@ -0,0 +1,224 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _DbeSyncMap_h
+#define _DbeSyncMap_h
+
+#include "DbeLock.h"
+#include "DbeLinkList.h"
+#include "vec.h"
+
+typedef unsigned long hash_ty;
+
+template <class ITEM> class DbeSyncMap : public DbeLock
+{
+public:
+ DbeSyncMap (int _chunkSize = DefaultChunkSize);
+ virtual ~DbeSyncMap ();
+ void reset ();
+ ITEM *get (const char *nm, int64_t chksum);
+ ITEM *sync_create_item (const char *nm, int64_t chksum);
+ ITEM *get (const char *nm, const char *path, DbeFile *df);
+ ITEM *sync_create_item (const char *nm, const char *path, DbeFile *df);
+ virtual void dump ();
+
+ Vector<ITEM *> *
+ values ()
+ {
+ return items;
+ };
+
+private:
+ hash_ty hash (const char *key);
+
+ DbeLinkList<ITEM *> **chunk;
+ Vector<ITEM *> *items;
+ long chunkSize;
+
+ enum
+ {
+ DefaultChunkSize = 1024
+ };
+};
+
+template <class ITEM>
+DbeSyncMap<ITEM>::DbeSyncMap (int _chunkSize)
+{
+ chunkSize = _chunkSize;
+ chunk = new DbeLinkList<ITEM *> * [chunkSize];
+ for (long i = 0; i < chunkSize; i++)
+ chunk[i] = NULL;
+ items = new Vector<ITEM *>(512);
+}
+
+template <class ITEM>
+DbeSyncMap<ITEM>::~DbeSyncMap ()
+{
+ for (long i = 0; i < chunkSize; i++)
+ Destroy (chunk[i]);
+ delete[] chunk;
+ delete items;
+}
+
+template <class ITEM>
+void
+DbeSyncMap<ITEM>::reset ()
+{
+ for (long i = 0; i < chunkSize; i++)
+ {
+ Destroy (chunk[i]);
+ chunk[i] = NULL;
+ }
+ items->reset ();
+}
+
+template <class ITEM>
+ITEM *
+DbeSyncMap<ITEM>::get (const char *nm, int64_t chksum)
+{
+ hash_ty h = hash (nm);
+ for (DbeLinkList<ITEM *> *dl = chunk[h]; dl; dl = dl->get_next ())
+ {
+ ITEM *item = dl->get_item ();
+ if (item->compare (nm, chksum))
+ return item;
+ }
+ return NULL;
+}
+
+template <class ITEM>
+hash_ty
+DbeSyncMap<ITEM>::hash (const char *key)
+{
+ return (hash_ty) (crc64 (key, strlen (key)) % chunkSize);
+}
+
+template <class ITEM>
+ITEM *
+DbeSyncMap<ITEM>::sync_create_item (const char *nm, int64_t chksum)
+{
+ hash_ty h = hash (nm);
+ for (DbeLinkList<ITEM *> *dl = chunk[h]; dl; dl = dl->get_next ())
+ {
+ ITEM *item = dl->get_item ();
+ if (item->compare (nm, chksum))
+ return item;
+ }
+ aquireLock ();
+ for (DbeLinkList<ITEM *> *dl = chunk[h]; dl; dl = dl->get_next ())
+ {
+ ITEM *item = dl->get_item ();
+ if (item->compare (nm, chksum))
+ {
+ releaseLock ();
+ return item;
+ }
+ }
+ ITEM *item = ITEM::create_item (nm, chksum);
+ DbeLinkList<ITEM *> *dl = new DbeLinkList<ITEM *>(item);
+ dl->set_next (chunk[h]);
+ chunk[h] = dl;
+ items->append (item);
+ releaseLock ();
+ return item;
+}
+
+template <class ITEM>
+ITEM *
+DbeSyncMap<ITEM>::get (const char *nm, const char *path, DbeFile *df)
+{
+ int mask = 1 + (path != NULL ? 2 : 0) + (df != NULL ? 4 : 0);
+ hash_ty h = hash (nm);
+ for (DbeLinkList<ITEM *> *dl = chunk[h]; dl; dl = dl->get_next ())
+ {
+ ITEM *item = dl->get_item ();
+ if (mask == item->compare (nm, path, df))
+ return item;
+ }
+ return NULL;
+}
+
+template <class ITEM>
+ITEM *
+DbeSyncMap<ITEM>::sync_create_item (const char *nm, const char *path, DbeFile *df)
+{
+ int mask = CMP_PATH;
+ if (path != NULL)
+ mask += CMP_RUNTIMEPATH;
+ if (df != NULL)
+ mask += CMP_CHKSUM;
+ hash_ty h = hash (nm);
+ for (DbeLinkList<ITEM *> *dl = chunk[h]; dl; dl = dl->get_next ())
+ {
+ ITEM *item = dl->get_item ();
+ if (mask == item->compare (nm, path, df))
+ return item;
+ }
+ aquireLock ();
+ for (DbeLinkList<ITEM *> *dl = chunk[h]; dl; dl = dl->get_next ())
+ {
+ ITEM *item = dl->get_item ();
+ if (mask == item->compare (nm, path, df))
+ {
+ releaseLock ();
+ return item;
+ }
+ }
+ ITEM *item = ITEM::create_item (nm, path, df);
+ DbeLinkList<ITEM *> *dl = new DbeLinkList<ITEM *>(item);
+ dl->set_next (chunk[h]);
+ chunk[h] = dl;
+ items->append (item);
+ releaseLock ();
+ return item;
+}
+
+template <class ITEM>
+void
+DbeSyncMap<ITEM>::dump ()
+{
+ Dprintf (1, NTXT ("\nDbeSyncMap::dump: vals=%ld\n"), (long) VecSize (items));
+ int tot = 0;
+ int max_cnt = 0;
+ for (long i = 0; i < chunkSize; i++)
+ {
+ DbeLinkList<ITEM *> *lp = chunk[i];
+ if (lp)
+ {
+ int cnt = 0;
+ for (DbeLinkList<ITEM *> *lp1 = lp; lp1; lp1 = lp1->get_next ())
+ cnt++;
+ tot += cnt;
+ if (max_cnt < cnt)
+ max_cnt = cnt;
+ cnt = 1;
+ for (DbeLinkList<ITEM *> *lp1 = lp; lp1; lp1 = lp1->get_next ())
+ {
+ ITEM *p = lp1->get_item ();
+ Dprintf (1, NTXT (" %2d %s\n"), cnt, p->get_name ());
+ cnt++;
+ }
+ }
+ }
+ Dprintf (1, NTXT ("\nDbeSyncMap::dump: vals=%ld max_cnt=%d tot=%d\n"),
+ (long) VecSize (items), max_cnt, tot);
+}
+
+#endif /* _DbeSyncMap_h */
diff --git a/gprofng/src/DbeThread.cc b/gprofng/src/DbeThread.cc
new file mode 100644
index 00000000000..7eb3cb74f42
--- /dev/null
+++ b/gprofng/src/DbeThread.cc
@@ -0,0 +1,224 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+#include "DbeThread.h"
+#include "util.h"
+#include "vec.h"
+
+static void
+cleanup_free_mutex (void* arg) {
+ // pthread_mutex_t *p_mutex = (pthread_mutex_t *) arg;
+ // if (p_mutex)
+ // pthread_mutex_unlock (p_mutex);
+}
+
+static void*
+thread_pool_loop (void* arg)
+{
+ DbeThreadPool *thrp = (DbeThreadPool*) arg;
+ Dprintf (DEBUG_THREADS, "thread_pool_loop:%d starting thread=%llu\n",
+ __LINE__, (unsigned long long) pthread_self ());
+
+ /* set my cancel state to 'enabled', and cancel type to 'defered'. */
+ pthread_setcancelstate (PTHREAD_CANCEL_ENABLE, NULL);
+ pthread_setcanceltype (PTHREAD_CANCEL_DEFERRED, NULL);
+
+ /* set thread cleanup handler */
+ pthread_cleanup_push (cleanup_free_mutex, (void*) & (thrp->p_mutex));
+ for (;;)
+ {
+ DbeQueue *q = thrp->get_queue ();
+ if (q)
+ { /* a request is pending */
+ Dprintf (DEBUG_THREADS,
+ "thread_pool_loop:%d thread=%llu queue=%d start\n",
+ __LINE__, (unsigned long long) pthread_self (), q->id);
+ q->func (q->arg);
+ Dprintf (DEBUG_THREADS,
+ "thread_pool_loop:%d thread=%llu queue=%d done\n",
+ __LINE__, (unsigned long long) pthread_self (), q->id);
+ delete q;
+ continue;
+ }
+ if (thrp->no_new_queues)
+ {
+ Dprintf (DEBUG_THREADS, "thread_pool_loop:%d exit thread=%llu\n",
+ __LINE__, (unsigned long long) pthread_self ());
+ pthread_exit (NULL);
+ }
+ Dprintf (DEBUG_THREADS,
+ "thread_pool_loop:%d before pthread_cond_wait thread=%llu\n",
+ __LINE__, (unsigned long long) pthread_self ());
+ pthread_mutex_lock (&thrp->p_mutex);
+ pthread_cond_wait (&thrp->p_cond_var, &thrp->p_mutex);
+ Dprintf (DEBUG_THREADS,
+ "thread_pool_loop:%d after pthread_cond_wait thread=%llu\n",
+ __LINE__, (unsigned long long) pthread_self ());
+ pthread_mutex_unlock (&thrp->p_mutex);
+ }
+
+ // never reached, but we must use it here. See `man pthread_cleanup_push`
+ pthread_cleanup_pop (0);
+}
+
+DbeThreadPool::DbeThreadPool (int _max_threads)
+{
+ static const int DBE_NTHREADS_DEFAULT = 4;
+ char *s = getenv ("GPROFNG_DBE_NTHREADS");
+ if (s)
+ {
+ max_threads = atoi (s);
+ if (max_threads < 0)
+ max_threads = 0;
+ if (_max_threads > 0 && max_threads < _max_threads)
+ max_threads = _max_threads;
+ }
+ else
+ {
+ max_threads = _max_threads;
+ if (max_threads < 0)
+ max_threads = DBE_NTHREADS_DEFAULT;
+ }
+ Dprintf (DEBUG_THREADS, "DbeThreadPool:%d max_threads %d ---> %d\n",
+ __LINE__, _max_threads, max_threads);
+ pthread_mutex_init (&p_mutex, NULL);
+ pthread_cond_init (&p_cond_var, NULL);
+ threads = new Vector <pthread_t>(max_threads);
+ queue = NULL;
+ last_queue = NULL;
+ no_new_queues = false;
+ queues_cnt = 0;
+ total_queues = 0;
+}
+
+DbeThreadPool::~DbeThreadPool ()
+{
+ delete threads;
+}
+
+DbeQueue *
+DbeThreadPool::get_queue ()
+{
+ pthread_mutex_lock (&p_mutex);
+ DbeQueue *q = queue;
+ Dprintf (DEBUG_THREADS,
+ "get_queue:%d thr: %lld id=%d queues_cnt=%d threads_cnt=%d max_threads=%d\n",
+ __LINE__, (unsigned long long) pthread_self (),
+ q ? q->id : -1, queues_cnt, (int) threads->size (), max_threads);
+ if (q)
+ {
+ queue = q->next;
+ queues_cnt--;
+ }
+ pthread_mutex_unlock (&p_mutex);
+ return q;
+}
+
+void
+DbeThreadPool::put_queue (DbeQueue *q)
+{
+ if (max_threads == 0)
+ {
+ // nothing runs in parallel
+ q->id = ++total_queues;
+ Dprintf (DEBUG_THREADS, NTXT ("put_queue:%d thr=%lld max_threads=%d queue (%d) runs on the worked thread\n"),
+ __LINE__, (unsigned long long) pthread_self (), max_threads, q->id);
+ q->func (q->arg);
+ delete q;
+ return;
+ }
+
+ pthread_mutex_lock (&p_mutex);
+ // nothing runs in parallel
+ q->id = ++total_queues;
+ Dprintf (DEBUG_THREADS, "put_queue:%d thr=%lld max_threads=%d queue (%d)\n",
+ __LINE__, (unsigned long long) pthread_self (), max_threads, q->id);
+ if (queue)
+ {
+ last_queue->next = q;
+ last_queue = q;
+ }
+ else
+ {
+ queue = q;
+ last_queue = q;
+ }
+ queues_cnt++;
+ Dprintf (DEBUG_THREADS,
+ "put_queue:%d id=%d queues_cnt=%d threads_cnt=%d max_threads=%d\n",
+ __LINE__, q->id, queues_cnt, (int) threads->size (), max_threads);
+ if (queues_cnt > threads->size () && threads->size () < max_threads)
+ {
+ pthread_t thr;
+ int r = pthread_create (&thr, NULL, thread_pool_loop, (void *) this);
+ Dprintf (DEBUG_THREADS,
+ "put_queue:%d pthread_create returns %d thr=%llu\n",
+ __LINE__, r, (unsigned long long) thr);
+ if (r)
+ fprintf (stderr, GTXT ("pthread_create failed. errnum=%d (%s)\n"), r,
+ STR (strerror (r)));
+ else
+ threads->append (thr);
+ }
+ pthread_cond_signal (&p_cond_var);
+ pthread_mutex_unlock (&p_mutex);
+}
+
+void
+DbeThreadPool::wait_queues ()
+{
+ pthread_mutex_lock (&p_mutex);
+ no_new_queues = true;
+ pthread_mutex_unlock (&p_mutex);
+ pthread_cond_broadcast (&p_cond_var);
+ for (;;) // Run requests on the worked thread too
+ {
+ DbeQueue *q = get_queue ();
+ if (q == NULL)
+ break;
+ Dprintf (DEBUG_THREADS, "wait_queues:%d thread=%llu queue=%d start\n",
+ __LINE__, (unsigned long long) pthread_self (), q->id);
+ q->func (q->arg);
+ Dprintf (DEBUG_THREADS, "wait_queues:%d thread=%llu queue=%d done\n",
+ __LINE__, (unsigned long long) pthread_self (), q->id);
+ delete q;
+ }
+ for (int i = 0, sz = threads->size (); i < sz; i++)
+ {
+ void *retval;
+ pthread_join (threads->get (i), &retval);
+ }
+}
+
+DbeQueue::DbeQueue (int (*_func) (void *arg), void *_arg)
+{
+ func = _func;
+ arg = _arg;
+ next = NULL;
+}
+
+DbeQueue::~DbeQueue () { }
diff --git a/gprofng/src/DbeThread.h b/gprofng/src/DbeThread.h
new file mode 100644
index 00000000000..8ee148b4ed7
--- /dev/null
+++ b/gprofng/src/DbeThread.h
@@ -0,0 +1,61 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _DBETHREAD_H
+#define _DBETHREAD_H
+#include <pthread.h>
+#include "DbeLinkList.h"
+
+template <class ITEM> class Vector;
+
+class DbeQueue
+{
+public:
+ DbeQueue (int (*_func)(void *arg), void *_arg);
+ ~DbeQueue ();
+
+ int (*func) (void *arg);
+ void *arg;
+ int id;
+ DbeQueue *next;
+};
+
+class DbeThreadPool
+{
+public:
+ DbeThreadPool (int _max_threads);
+ ~DbeThreadPool ();
+ DbeQueue *get_queue ();
+ void put_queue (DbeQueue *q);
+ void wait_queues ();
+
+ pthread_mutex_t p_mutex;
+ pthread_cond_t p_cond_var;
+ volatile bool no_new_queues;
+private:
+ Vector<pthread_t> *threads;
+ int max_threads;
+ DbeQueue *volatile queue;
+ DbeQueue *volatile last_queue;
+ volatile int queues_cnt;
+ volatile int total_queues;
+};
+
+#endif
diff --git a/gprofng/src/DbeView.cc b/gprofng/src/DbeView.cc
new file mode 100644
index 00000000000..68613a56f09
--- /dev/null
+++ b/gprofng/src/DbeView.cc
@@ -0,0 +1,3126 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include "util.h"
+#include "Application.h"
+#include "DbeSession.h"
+#include "CallStack.h"
+#include "Command.h"
+#include "DataObject.h"
+#include "Experiment.h"
+#include "ExpGroup.h"
+#include "FilterExp.h"
+#include "FilterSet.h"
+#include "Function.h"
+#include "DbeView.h"
+#include "PathTree.h"
+#include "DataSpace.h"
+#include "MemorySpace.h"
+#include "IOActivity.h"
+#include "HeapActivity.h"
+#include "Print.h"
+#include "MetricList.h"
+#include "Module.h"
+#include "Filter.h"
+#include "LoadObject.h"
+#include "dbe_types.h"
+#include "StringBuilder.h"
+
+DbeView::DbeView (Application *_app, Settings *_settings, int _vindex)
+{
+ init ();
+ phaseIdx = 0;
+ settings = new Settings (_settings);
+ ptree = new PathTree (this);
+ dspace = new DataSpace (this);
+ memspaces = new Vector<MemorySpace*>;
+ iospace = new IOActivity (this);
+ heapspace = new HeapActivity (this);
+ filters = new Vector<FilterSet*>;
+ lo_expands = new Vector<enum LibExpand>;
+ cur_filter_str = NULL;
+ prev_filter_str = NULL;
+ cur_filter_expr = NULL;
+ filter_active = false;
+ noParFilter = false;
+ dataViews = new Vector<Vector<DataView*>*>;
+ names_src[0] = NULL;
+ names_src[1] = NULL;
+ names_src[2] = NULL;
+ names_dis[0] = NULL;
+ names_dis[1] = NULL;
+ names_dis[2] = NULL;
+ marks = new Vector<int>;
+ marks2dsrc = new Vector<int_pair_t>;
+ marks2dsrc_inc = new Vector<int_pair_t>;
+ marks2ddis = new Vector<int_pair_t>;
+ marks2ddis_inc = new Vector<int_pair_t>;
+ app = _app;
+
+ // set the view's index
+ vindex = _vindex;
+
+ // clear the precomputed data
+ func_data = NULL;
+ line_data = NULL;
+ pc_data = NULL;
+ src_data = NULL;
+ dis_data = NULL;
+ fitem_data = NULL;
+ callers = NULL;
+ callees = NULL;
+ dobj_data = NULL;
+ dlay_data = NULL;
+ iofile_data = NULL;
+ iovfd_data = NULL;
+ iocs_data = NULL;
+ heapcs_data = NULL;
+
+ // and clear the selections
+ sel_obj = NULL;
+ sel_dobj = NULL;
+ sel_binctx = NULL;
+ func_scope = false;
+ lastSelInstr = NULL;
+ lastSelFunc = NULL;
+
+ // Initialize index spaces
+ int sz = settings->get_IndxTabState ()->size ();
+ indxspaces = new Vector<PathTree*>(sz);
+ indx_data = new Vector<Hist_data*>(sz);
+ sel_idxobj = new Vector<Histable*>(sz);
+ for (int i = 0; i < sz; i++)
+ {
+ PathTree *is = new PathTree (this, i);
+ indxspaces->store (i, is);
+ indx_data->store (i, NULL);
+ sel_idxobj->store (i, NULL);
+ }
+ reset ();
+
+ lobjectsNoJava = NULL;
+
+ // set lo_expands for already existing LoadObjects
+ int idx;
+ LoadObject *lo;
+ Vector<LoadObject*> *lobjs = dbeSession->get_text_segments ();
+ Vec_loop (LoadObject*, lobjs, idx, lo)
+ {
+ lo_expands->store (lo->seg_idx, LIBEX_SHOW);
+ set_lo_expand (lo->seg_idx, LIBEX_SHOW);
+ }
+ delete lobjs;
+}
+
+DbeView::DbeView (DbeView *dbev, int _vindex)
+{
+ init ();
+ phaseIdx = 0;
+ settings = new Settings (dbev->settings);
+ ptree = new PathTree (this);
+ dspace = new DataSpace (this);
+ iospace = new IOActivity (this);
+ heapspace = new HeapActivity (this);
+ memspaces = new Vector<MemorySpace*>;
+ filters = new Vector<FilterSet*>;
+ lo_expands = new Vector<enum LibExpand>;
+ cur_filter_str = NULL;
+ prev_filter_str = NULL;
+ cur_filter_expr = NULL;
+ noParFilter = false;
+ dataViews = new Vector<Vector<DataView*>*>;
+ names_src[0] = NULL;
+ names_src[1] = NULL;
+ names_src[2] = NULL;
+ names_dis[0] = NULL;
+ names_dis[1] = NULL;
+ names_dis[2] = NULL;
+ marks = new Vector<int>;
+ marks2dsrc = new Vector<int_pair_t>;
+ marks2dsrc_inc = new Vector<int_pair_t>;
+ marks2ddis = new Vector<int_pair_t>;
+ marks2ddis_inc = new Vector<int_pair_t>;
+ app = dbev->app;
+
+ // set the view's index
+ vindex = _vindex;
+
+ // clear the precomputed data
+ func_data = NULL;
+ line_data = NULL;
+ pc_data = NULL;
+ src_data = NULL;
+ dis_data = NULL;
+ fitem_data = NULL;
+ callers = NULL;
+ callees = NULL;
+ dobj_data = NULL;
+ dlay_data = NULL;
+ iofile_data = NULL;
+ iovfd_data = NULL;
+ iocs_data = NULL;
+ heapcs_data = NULL;
+
+ // and clear the selections
+ sel_obj = NULL;
+ sel_dobj = NULL;
+ sel_binctx = NULL;
+ func_scope = false;
+ lastSelInstr = NULL;
+ lastSelFunc = NULL;
+
+ // create the vector of IndexSpaces
+ int sz = dbev->indxspaces->size ();
+ indxspaces = new Vector<PathTree*>(sz);
+ indx_data = new Vector<Hist_data*>(sz);
+ sel_idxobj = new Vector<Histable*>(sz);
+ for (int i = 0; i < sz; i++)
+ {
+ PathTree *is = new PathTree (this, i);
+ indxspaces->store (i, is);
+ indx_data->store (i, NULL);
+ sel_idxobj->store (i, NULL);
+ }
+ reset ();
+
+ // now copy the relevant information from the original view
+ for (int i = 0; i < dbeSession->nexps (); i++)
+ add_experiment (i, dbev->get_exp_enable (i));
+ update_advanced_filter ();
+ delete lo_expands;
+ lo_expands = dbev->lo_expands->copy ();
+ lobjectsNoJava = NULL;
+}
+
+DbeView::~DbeView ()
+{
+ delete settings;
+ delete ptree;
+ delete dspace;
+ delete iospace;
+ delete heapspace;
+ Destroy (memspaces);
+ Destroy (filters);
+ delete lo_expands;
+ free (cur_filter_str);
+ free (prev_filter_str);
+ delete cur_filter_expr;
+ for (int exp_id = 0; exp_id < dataViews->size (); ++exp_id)
+ {
+ Vector<DataView*> *expDataViewList = dataViews->fetch (exp_id);
+ Destroy (expDataViewList);
+ }
+ delete dataViews;
+ delete reg_metrics;
+ metrics_lists->destroy ();
+ delete metrics_lists;
+ metrics_ref_lists->destroy ();
+ delete metrics_ref_lists;
+ delete derived_metrics;
+ delete marks;
+ delete marks2dsrc;
+ delete marks2dsrc_inc;
+ delete marks2ddis;
+ delete marks2ddis_inc;
+
+ // Index spaces
+ indxspaces->destroy ();
+ delete indxspaces;
+
+ indx_data->destroy ();
+ delete indx_data;
+ delete sel_idxobj;
+ delete lobjectsNoJava;
+}
+
+void
+DbeView::init ()
+{
+ phaseIdx = 0;
+ reg_metrics = new Vector<BaseMetric*>;
+ metrics_lists = new Vector<MetricList*>;
+ metrics_ref_lists = new Vector<MetricList*>;
+ for (int i = 0; i <= MET_HEAP; i++)
+ {
+ metrics_lists->append (NULL);
+ metrics_ref_lists->append (NULL);
+ }
+ derived_metrics = new DerivedMetrics;
+ derived_metrics->add_definition (GTXT ("CPI"), GTXT ("Cycles Per Instruction"), GTXT ("cycles/insts"));
+ derived_metrics->add_definition (GTXT ("IPC"), GTXT ("Instructions Per Cycle"), GTXT ("insts/cycles"));
+ derived_metrics->add_definition (GTXT ("K_CPI"), GTXT ("Kernel Cycles Per Instruction"), GTXT ("K_cycles/K_insts"));
+ derived_metrics->add_definition (GTXT ("K_IPC"), GTXT ("Kernel Instructions Per Cycle"), GTXT ("K_insts/K_cycles"));
+}
+
+bool
+DbeView::set_libexpand (char *liblist, enum LibExpand flag)
+{
+ bool changed = settings->set_libexpand (liblist, flag, false);
+ // Show/hide performance optimization:
+ // No need to call update_lo_expand for every library because dbev->set_libexpand()
+ // is called from a loop in Dbe.cc SetLoadObjectState for every load object.
+ // It is sufficient to call update_lo_expand() just once at the end of the loop.
+ // At all other places such as er_print.cc which calls specific set_libexpand()
+ // explicitly call update_lo_expands();
+ return changed;
+}
+
+bool
+DbeView::set_libdefaults ()
+{
+ bool changed = settings->set_libdefaults ();
+ if (changed == true)
+ update_lo_expands ();
+ return changed;
+}
+
+void
+DbeView::update_lo_expands ()
+{
+ int index;
+ LoadObject *lo;
+
+ // search all load objects
+ Vector<LoadObject*> *lobjs = dbeSession->get_text_segments ();
+ Vec_loop (LoadObject*, lobjs, index, lo)
+ {
+ // now search the settings list for this one
+ enum LibExpand flag = settings->get_lo_setting (lo->get_pathname ());
+ set_lo_expand (lo->seg_idx, flag);
+ }
+ delete lobjs;
+}
+
+enum LibExpand
+DbeView::get_lo_expand (int idx)
+{
+ if (idx < lo_expands->size ())
+ return lo_expands->get (idx);
+ return LIBEX_SHOW;
+}
+
+bool
+DbeView::set_lo_expand (int idx, enum LibExpand flag)
+{
+ // LIBRARY_VISIBILITY
+ if (flag == LIBEX_HIDE)
+ {
+ resetShowAll ();
+ dbeSession->set_lib_visibility_used ();
+ }
+ // if no change
+ if (idx < lo_expands->size () && flag == get_lo_expand (idx))
+ return false;
+ setShowHideChanged (); // this is necessary if called from er_print
+
+ // change the flag
+ lo_expands->store (idx, flag);
+
+ // and reset the data
+ fflush (stderr);
+ purge_events ();
+ reset_data (true);
+ return true;
+}
+
+void
+DbeView::reset ()
+{
+ phaseIdx++;
+
+ // reset all the per-experiment arrays
+ filters->destroy ();
+ lo_expands->reset ();
+ free (cur_filter_str);
+ cur_filter_str = NULL;
+ free (prev_filter_str);
+ prev_filter_str = NULL;
+ delete cur_filter_expr;
+ cur_filter_expr = NULL;
+ noParFilter = false;
+ for (int exp_id = 0; exp_id < dataViews->size (); ++exp_id)
+ {
+ Vector<DataView*> *expDataViewList = dataViews->fetch (exp_id);
+ if (expDataViewList)
+ expDataViewList->destroy ();
+ }
+ dataViews->destroy ();
+ reset_metrics ();
+
+ // now reset any cached data
+ reset_data (true);
+ ompDisMode = false;
+ showAll = true;
+ showHideChanged = false;
+ newViewMode = false;
+}
+
+void
+DbeView::reset_data (bool all)
+{
+ // clear the precomputed data
+ if (func_data != NULL)
+ {
+ delete func_data;
+ func_data = NULL;
+ }
+ if (line_data != NULL)
+ {
+ delete line_data;
+ line_data = NULL;
+ }
+ if (pc_data != NULL)
+ {
+ delete pc_data;
+ pc_data = NULL;
+ }
+ if (src_data != NULL)
+ {
+ delete src_data;
+ src_data = NULL;
+ }
+ if (dis_data != NULL)
+ {
+ delete dis_data;
+ dis_data = NULL;
+ }
+ if (fitem_data != NULL)
+ {
+ delete fitem_data;
+ fitem_data = NULL;
+ }
+ if (callers != NULL)
+ {
+ delete callers;
+ callers = NULL;
+ }
+ if (callees != NULL)
+ {
+ delete callees;
+ callees = NULL;
+ }
+ if (dobj_data != NULL)
+ {
+ delete dobj_data;
+ dobj_data = NULL;
+ }
+ if (dlay_data != NULL)
+ {
+ delete dlay_data;
+ dlay_data = NULL;
+ }
+ if (iofile_data != NULL)
+ {
+ delete iofile_data;
+ iofile_data = NULL;
+ }
+ if (iovfd_data != NULL)
+ {
+ delete iovfd_data;
+ iovfd_data = NULL;
+ }
+ if (iocs_data != NULL)
+ {
+ delete iocs_data;
+ iocs_data = NULL;
+ }
+ if (heapcs_data != NULL)
+ {
+ delete heapcs_data;
+ heapcs_data = NULL;
+ }
+
+ // and reset the selections
+ if (all)
+ {
+ sel_obj = NULL;
+ sel_dobj = NULL;
+ lastSelInstr = NULL;
+ lastSelFunc = NULL;
+ // Set selected object <Total> if possible
+ Function * ft = dbeSession->get_Total_Function ();
+ set_sel_obj (ft);
+ }
+ sel_binctx = NULL;
+
+ dspace->reset ();
+ iospace->reset ();
+ heapspace->reset ();
+
+ // loop over MemorySpaces, resetting each one
+ for (long i = 0, sz = VecSize (memspaces); i < sz; i++)
+ {
+ MemorySpace *ms = memspaces->get (i);
+ ms->reset ();
+ }
+
+ // loop over IndexSpaces, resetting cached data
+ indx_data->destroy ();
+ for (long i = 0, sz = VecSize (indxspaces); i < sz; i++)
+ {
+ indx_data->store (i, NULL);
+ sel_idxobj->store (i, NULL);
+ }
+}
+
+Vector<BaseMetric*> *
+DbeView::get_all_reg_metrics ()
+{
+ Vector<BaseMetric*> *mlist = dbeSession->get_all_reg_metrics ();
+ return mlist;
+}
+
+BaseMetric *
+DbeView::register_metric_expr (BaseMetric::Type type, char *cmd, char *expr_spec)
+{
+ BaseMetric *bm = dbeSession->register_metric_expr (type, cmd, expr_spec);
+ return bm;
+}
+
+Metric *
+DbeView::get_compare_metric (Metric *mtr, int groupNum)
+{
+ if (groupNum == 0 || !mtr->comparable ())
+ return new Metric (*mtr);
+ ExpGroup *gr = dbeSession->expGroups->get (groupNum - 1);
+ char buf[128];
+ snprintf (buf, sizeof (buf), NTXT ("EXPGRID==%d"), gr->groupId);
+ BaseMetric *bm = register_metric_expr (mtr->get_type (), mtr->get_cmd (), buf);
+ Metric *m = new Metric (bm, mtr->get_subtype ());
+ m->set_raw_visbits (mtr->get_visbits ());
+ if (m->legend == NULL)
+ m->legend = dbe_strdup (get_basename (gr->name));
+ return m;
+}
+
+MetricList *
+DbeView::get_metric_ref (MetricType mtype)
+{
+ if (metrics_ref_lists->fetch (MET_COMMON) == NULL)
+ {
+ Vector<BaseMetric*> *base_metrics = dbeSession->get_base_reg_metrics ();
+ metrics_ref_lists->store (MET_SRCDIS, new MetricList (base_metrics, MET_SRCDIS));
+ metrics_ref_lists->store (MET_COMMON, new MetricList (base_metrics, MET_COMMON));
+ metrics_ref_lists->store (MET_NORMAL, new MetricList (base_metrics, MET_NORMAL));
+ metrics_ref_lists->store (MET_CALL, new MetricList (base_metrics, MET_CALL));
+ metrics_ref_lists->store (MET_CALL_AGR, new MetricList (base_metrics, MET_CALL_AGR));
+ metrics_ref_lists->store (MET_DATA, new MetricList (base_metrics, MET_DATA));
+ metrics_ref_lists->store (MET_INDX, new MetricList (base_metrics, MET_INDX));
+ metrics_ref_lists->store (MET_IO, new MetricList (base_metrics, MET_IO));
+ metrics_ref_lists->store (MET_HEAP, new MetricList (base_metrics, MET_HEAP));
+ delete base_metrics;
+ }
+ return metrics_ref_lists->fetch (mtype);
+}
+
+// logically, the function list must be created first, and it
+// will create the other two;
+MetricList *
+DbeView::get_metric_list (MetricType mtype)
+{
+ if (metrics_lists->fetch (MET_COMMON) == NULL)
+ {
+ Vector<BaseMetric*> *base_metrics = dbeSession->get_base_reg_metrics ();
+ metrics_lists->store (MET_SRCDIS, new MetricList (base_metrics, MET_SRCDIS));
+ metrics_lists->store (MET_COMMON, new MetricList (base_metrics, MET_COMMON));
+ metrics_lists->store (MET_NORMAL, new MetricList (base_metrics, MET_NORMAL));
+ metrics_lists->store (MET_CALL, new MetricList (base_metrics, MET_CALL));
+ metrics_lists->store (MET_CALL_AGR, new MetricList (base_metrics, MET_CALL_AGR));
+ metrics_lists->store (MET_DATA, new MetricList (base_metrics, MET_DATA));
+ metrics_lists->store (MET_INDX, new MetricList (base_metrics, MET_INDX));
+ metrics_lists->store (MET_IO, new MetricList (base_metrics, MET_IO));
+ metrics_lists->store (MET_HEAP, new MetricList (base_metrics, MET_HEAP));
+ delete base_metrics;
+
+ // set the defaults
+ if (settings->str_dmetrics == NULL)
+ settings->str_dmetrics = strdup (Command::DEFAULT_METRICS);
+ char *status = setMetrics (settings->str_dmetrics, true);
+ if (status != NULL)
+ {
+ fprintf (stderr, "XXX setMetrics(\"%s\") failed: %s\n", settings->str_dmetrics, status);
+ abort ();
+ }
+
+ // set the default sort
+ setSort (settings->str_dsort, MET_NORMAL, true);
+ }
+ return metrics_lists->fetch (mtype);
+}
+
+MetricList *
+DbeView::get_metric_list (int dsptype, int subtype)
+{
+ MetricList *mlist;
+ switch (dsptype)
+ {
+ case DSP_DISASM:
+ case DSP_SOURCE:
+ case DSP_SOURCE_DISASM:
+ mlist = get_metric_list (MET_COMMON);
+ mlist = new MetricList (mlist);
+ if (subtype != 0)
+ {
+ for (long i = 0, sz = mlist->size (); i < sz; i++)
+ {
+ Metric *m = mlist->get (i);
+ if (m->comparable ())
+ {
+ Metric *m1 = get_compare_metric (m, subtype);
+ mlist->put (i, m1);
+ delete m;
+ }
+ }
+ }
+ break;
+ default:
+ mlist = get_metric_list (MET_NORMAL);
+ mlist = new MetricList (mlist);
+ break;
+ }
+ return mlist;
+}
+
+void
+DbeView::reset_metrics ()
+{
+ for (int i = 0, sz = metrics_lists->size (); i < sz; i++)
+ {
+ delete metrics_lists->fetch (i);
+ metrics_lists->store (i, NULL);
+ }
+ for (int i = 0, sz = metrics_ref_lists->size (); i < sz; i++)
+ {
+ delete metrics_ref_lists->fetch (i);
+ metrics_ref_lists->store (i, NULL);
+ }
+}
+
+bool
+DbeView::comparingExperiments ()
+{
+ if (dbeSession->expGroups->size () <= 1)
+ return false;
+ return 0 != (settings->get_compare_mode () & (CMP_DELTA | CMP_ENABLE | CMP_RATIO));
+}
+
+void
+DbeView::set_compare_mode (int mode)
+{
+ if (mode == get_compare_mode ())
+ return;
+ settings->set_compare_mode (mode);
+ if (comparingExperiments ())
+ {
+ Vector<BaseMetric*> *bm_list = dbeSession->get_base_reg_metrics ();
+ for (int i = 0, sz = bm_list->size (); i < sz; i++)
+ {
+ BaseMetric *m = bm_list->fetch (i);
+ if (m->get_expr_spec () || !m->comparable ())
+ continue;
+ for (int i1 = 0, sz1 = dbeSession->expGroups->size (); i1 < sz1; i1++)
+ {
+ ExpGroup *gr = dbeSession->expGroups->fetch (i1);
+ char buf[128];
+ snprintf (buf, sizeof (buf), NTXT ("EXPGRID==%d"), gr->groupId);
+ register_metric_expr (m->get_type (), m->get_cmd (), buf);
+ }
+ }
+ }
+ MetricList *mlist = get_metric_list (MET_NORMAL);
+ MetricList *gmlist = get_metric_list (MET_CALL);
+ MetricList *dmlist = get_metric_list (MET_DATA);
+ MetricList *imlist = get_metric_list (MET_INDX);
+ if (comparingExperiments ())
+ {
+ add_compare_metrics (mlist);
+ add_compare_metrics (gmlist);
+ add_compare_metrics (dmlist);
+ add_compare_metrics (imlist);
+ }
+ else
+ {
+ remove_compare_metrics (mlist);
+ remove_compare_metrics (gmlist);
+ remove_compare_metrics (dmlist);
+ remove_compare_metrics (imlist);
+ }
+}
+
+void
+DbeView::ifreq (FILE *outfile)
+{
+ if (!dbeSession->is_ifreq_available ())
+ {
+ fprintf (outfile, GTXT ("No instruction frequency data available\n"));
+ return;
+ }
+ for (int index = 0; index < filters->size (); index++)
+ {
+ Experiment *exp = dbeSession->get_exp (index);
+ if (exp->broken || !get_exp_enable (index) || !exp->ifreqavail)
+ continue;
+
+ // this experiment has the data; print it
+ fprintf (outfile,
+ GTXT ("Instruction frequency data from experiment %s\n\n"),
+ exp->get_expt_name ());
+ fprintf (outfile, NTXT ("%s"), pr_mesgs (exp->fetch_ifreq (), "", ""));
+ }
+}
+
+// When adding multiple sub-experiments of an experiment, it is
+// not necessary to do the following every-time. It is sufficient to call reset_metrics()
+// and call get_metric_ref() and get_metric_list() in the end after all the sub-experiments
+// have been added
+void
+DbeView::add_experiment_epilogue ()
+{
+ bool flag_LIBEX_HIDE = false;
+ bool flag_ShowHideChanged = false;
+ Vector<LoadObject*> *lobjs = dbeSession->get_LoadObjects ();
+ for (long i = lo_expands->size (), sz = lobjs ? lobjs->size () : 0; i < sz; i++)
+ {
+ flag_ShowHideChanged = true;
+ LoadObject *lo = lobjs->get (i);
+ enum LibExpand flag = settings->get_lo_setting (lo->get_pathname ());
+ if (flag == LIBEX_HIDE)
+ flag_LIBEX_HIDE = true;
+ lo_expands->store (lo->seg_idx, flag);
+ }
+ if (flag_LIBEX_HIDE)
+ {
+ resetShowAll ();
+ dbeSession->set_lib_visibility_used ();
+ }
+ if (flag_ShowHideChanged)
+ {
+ setShowHideChanged (); // this is necessary if called from er_print
+ purge_events ();
+ reset_data (true);
+ }
+ reset_metrics ();
+ (void) get_metric_ref (MET_NORMAL);
+ (void) get_metric_ref (MET_CALL);
+ (void) get_metric_ref (MET_CALL_AGR);
+ (void) get_metric_ref (MET_DATA);
+ (void) get_metric_ref (MET_INDX);
+ (void) get_metric_ref (MET_IO);
+ (void) get_metric_ref (MET_HEAP);
+ (void) get_metric_list (MET_NORMAL);
+ (void) get_metric_list (MET_CALL);
+ (void) get_metric_list (MET_CALL_AGR);
+ (void) get_metric_list (MET_DATA);
+ (void) get_metric_list (MET_INDX);
+ (void) get_metric_list (MET_IO);
+ (void) get_metric_list (MET_HEAP);
+}
+
+// When adding multiple sub-experiments of an experiment, avoid invoking the steps in
+// add_experiment_epilogue() every time and instead call it separately in the end
+// after all sub-experiments have been added
+void
+DbeView::add_subexperiment (int index, bool enabled)
+{
+ // phaseIdx doesn't change, PathTree can handle adding
+ // new experiments without reset
+
+ // Set up the FilterSet for the experiments
+ Experiment *exp = dbeSession->get_exp (index);
+ FilterSet *filterset = new FilterSet (this, exp);
+ filterset->set_enabled (enabled);
+ filters->store (index, filterset);
+
+ assert (index == dataViews->size ());
+ Vector<DataView*> *expDataViewList = new Vector<DataView*>;
+ for (int data_id = 0; data_id < DATA_LAST; ++data_id)
+ expDataViewList->append (NULL); //experiment data_id's are not known yet
+ dataViews->store (index, expDataViewList);
+}
+
+void
+DbeView::add_experiment (int index, bool enabled)
+{
+ // phaseIdx doesn't change, PathTree can handle adding
+ // new experiments without reset
+
+ // delete any cached data
+ reset_data (true);
+
+ // Set up the FilterSet for the experiments
+ Experiment *exp = dbeSession->get_exp (index);
+ FilterSet *filterset = new FilterSet (this, exp);
+ filterset->set_enabled (enabled);
+ filters->store (index, filterset);
+
+ assert (index == dataViews->size ());
+ Vector<DataView*> *expDataViewList = new Vector<DataView*>;
+ for (int data_id = 0; data_id < DATA_LAST; ++data_id)
+ expDataViewList->append (NULL); //experiment data_id's are not known yet
+ dataViews->store (index, expDataViewList);
+
+ reset_metrics ();
+ (void) get_metric_ref (MET_NORMAL);
+ (void) get_metric_ref (MET_CALL);
+ (void) get_metric_ref (MET_CALL_AGR);
+ (void) get_metric_ref (MET_DATA);
+ (void) get_metric_ref (MET_INDX);
+ (void) get_metric_ref (MET_IO);
+ (void) get_metric_ref (MET_HEAP);
+ (void) get_metric_list (MET_NORMAL);
+ (void) get_metric_list (MET_CALL);
+ (void) get_metric_list (MET_CALL_AGR);
+ (void) get_metric_list (MET_DATA);
+ (void) get_metric_list (MET_INDX);
+ (void) get_metric_list (MET_IO);
+ (void) get_metric_list (MET_HEAP);
+}
+
+void
+DbeView::drop_experiment (int index)
+{
+ phaseIdx++;
+ filters->remove (index);
+
+ // reset any cached data
+ reset_data (true);
+
+ Vector<DataView*> *expDataViewList = dataViews->remove (index);
+ if (expDataViewList)
+ {
+ expDataViewList->destroy ();
+ delete expDataViewList;
+ }
+}
+
+bool
+DbeView::get_exp_enable (int n)
+{
+ return filters ? filters->fetch (n)->get_enabled () : true;
+}
+
+void
+DbeView::set_exp_enable (int n, bool e)
+{
+ FilterSet *fs = filters->fetch (n);
+ if (fs->get_enabled () != e)
+ {
+ fs->set_enabled (e);
+ purge_events (n);
+ phaseIdx++;
+ }
+}
+
+void
+DbeView::reset_metric_list (MetricList *mlist, int cmp_mode)
+{
+ MetricType mtype = mlist->get_type ();
+ switch (mtype)
+ {
+ case MET_NORMAL:
+ case MET_COMMON:
+ delete metrics_lists->fetch (MET_COMMON);
+ metrics_lists->store (MET_COMMON, new MetricList (mlist));
+ remove_compare_metrics (metrics_lists->fetch (MET_COMMON));
+ break;
+ // ignoring the following cases (why?)
+ case MET_SRCDIS:
+ case MET_CALL:
+ case MET_DATA:
+ case MET_INDX:
+ case MET_CALL_AGR:
+ case MET_IO:
+ case MET_HEAP:
+ break;
+ }
+
+ if (cmp_mode != -1)
+ {
+ settings->set_compare_mode (cmp_mode);
+ if (comparingExperiments ())
+ add_compare_metrics (mlist);
+ }
+
+ switch (mtype)
+ {
+ case MET_NORMAL:
+ delete metrics_lists->fetch (mtype);
+ metrics_lists->store (mtype, mlist);
+ // fall through to next case
+ case MET_COMMON:
+ metrics_lists->fetch (MET_SRCDIS)->set_metrics (mlist);
+ metrics_lists->fetch (MET_CALL)->set_metrics (mlist);
+ metrics_lists->fetch (MET_CALL_AGR)->set_metrics (mlist);
+ remove_compare_metrics (metrics_lists->fetch (MET_CALL_AGR));
+ metrics_lists->fetch (MET_DATA)->set_metrics (mlist);
+ metrics_lists->fetch (MET_INDX)->set_metrics (mlist);
+ metrics_lists->fetch (MET_IO)->set_metrics (mlist);
+ metrics_lists->fetch (MET_HEAP)->set_metrics (mlist);
+ break;
+ case MET_CALL_AGR:
+ delete metrics_lists->fetch (MET_CALL_AGR);
+ metrics_lists->store (MET_CALL_AGR, mlist);
+ remove_compare_metrics (mlist);
+ break;
+ case MET_SRCDIS:
+ case MET_CALL:
+ case MET_DATA:
+ case MET_INDX:
+ case MET_IO:
+ case MET_HEAP:
+ delete metrics_lists->fetch (mtype);
+ metrics_lists->store (mtype, mlist);
+ break;
+ default:
+ abort ();
+ }
+ reset_data (false);
+}
+
+void
+DbeView::add_compare_metrics (MetricList *mlist)
+{
+ if (mlist == NULL || !comparingExperiments ())
+ return;
+ int sort_ref_index = mlist->get_sort_ref_index ();
+ Vector<Metric*> *items = mlist->get_items ();
+ Vector<Metric*> *newItems = new Vector<Metric*>();
+ int mode = get_compare_mode ();
+ int cmp_vbits = 0;
+ if ((mode & CMP_DELTA) != 0)
+ cmp_vbits = VAL_DELTA;
+ else if ((mode & CMP_RATIO) != 0)
+ cmp_vbits = VAL_RATIO;
+ for (long i = 0, sz = items->size (); i < sz; i++)
+ {
+ Metric *mtr = items->get (i);
+ if (sort_ref_index == i)
+ mlist->set_sort_ref_index (newItems->size ());
+ int vbits = mtr->get_visbits () & ~(VAL_DELTA | VAL_RATIO);
+ mtr->set_raw_visbits (vbits);
+ if (!mtr->comparable ())
+ {
+ newItems->append (mtr);
+ continue;
+ }
+ if (mtr->get_expr_spec ())
+ {
+ if (strcmp (mtr->get_expr_spec (), NTXT ("EXPGRID==1")) != 0)
+ {
+ if ((cmp_vbits & VAL_RATIO) != 0)
+ // for ratios, make sure VAL_TIMEVAL is off and VAL_VALUE is on
+ mtr->set_raw_visbits ((vbits | VAL_VALUE | cmp_vbits) & ~VAL_TIMEVAL);
+ else
+ {
+ int ind = mlist->get_listorder (mtr->get_cmd (), mtr->get_subtype (), NTXT ("EXPGRID==1"));
+ if (ind >= 0)
+ // take VAL_VALUE and VAL_TIMEVAL from base experiment
+ mtr->set_raw_visbits (cmp_vbits
+ | (vbits & ~(VAL_VALUE | VAL_TIMEVAL))
+ | (mlist->get (ind)->get_visbits ()
+ & (VAL_VALUE | VAL_TIMEVAL)));
+ else
+ mtr->set_raw_visbits (cmp_vbits | vbits);
+ }
+ }
+ newItems->append (mtr);
+ continue;
+ }
+ for (long i1 = 0, sz1 = dbeSession->expGroups->size (); i1 < sz1; i1++)
+ {
+ Metric *m = get_compare_metric (mtr, i1 + 1);
+ switch (m->get_vtype ())
+ {
+ case VT_LABEL:
+ case VT_ADDRESS:
+ case VT_OFFSET:
+ m->set_raw_visbits (vbits);
+ break;
+ default:
+ if (i1 == 0)
+ m->set_raw_visbits (vbits);
+ else if (cmp_vbits == VAL_RATIO
+ && ((vbits & (VAL_VALUE | VAL_TIMEVAL))
+ == (VAL_VALUE | VAL_TIMEVAL)))
+ // make ratios for VAL_VALUE only
+ m->set_raw_visbits ((vbits | VAL_VALUE | cmp_vbits) & ~VAL_TIMEVAL);
+ else
+ m->set_raw_visbits (vbits | cmp_vbits);
+ break;
+ }
+ newItems->append (m);
+ }
+ }
+ items->reset ();
+ items->addAll (newItems);
+ delete newItems;
+ phaseIdx++;
+ reset_data (false);
+}
+
+MetricList *
+DbeView::get_compare_mlist (MetricList *met_list, int grInd)
+{
+ MetricList *mlist = new MetricList (met_list->get_type ());
+ mlist->set_sort_ref_index (met_list->get_sort_ref_index ());
+ mlist->set_sort_rev (met_list->get_sort_rev ());
+
+ Vector<Metric*> *items_old = met_list->get_items ();
+ for (int i = 0, sz = items_old->size (); i < sz; i++)
+ {
+ Metric *m = get_compare_metric (items_old->get (i), grInd + 1);
+ mlist->append (m);
+ }
+ return mlist;
+}
+
+void
+DbeView::remove_compare_metrics (MetricList *mlist)
+{
+ Vector<Metric*> *items = mlist->get_items ();
+ Vector<Metric*> *items_old = items->copy ();
+ items->reset ();
+ int sort_index = mlist->get_sort_ref_index ();
+ mlist->set_sort_ref_index (0);
+ for (int i = 0, sz = items_old->size (); i < sz; i++)
+ {
+ Metric *m = items_old->fetch (i);
+ if (m->get_expr_spec () == NULL)
+ {
+ // this is a 'non-compare' metric; add it
+ items->append (m);
+ if (sort_index == i)
+ mlist->set_sort_ref_index (items->size () - 1);
+ continue;
+ }
+ // is the 'non-compare' version of the metric already in the list?
+ int ind = mlist->get_listorder (m->get_cmd (), m->get_subtype ());
+ if (ind == -1)
+ {
+ // not in the list; add it
+ BaseMetric *bm = dbeSession->find_metric (m->get_type (), m->get_cmd (), NULL);
+ Metric *new_met = new Metric (bm, m->get_subtype ());
+ new_met->set_raw_visbits (m->get_visbits () & ~(CMP_DELTA | CMP_RATIO));
+ items->append (new_met);
+ if (sort_index == i)
+ mlist->set_sort_ref_index (items->size () - 1);
+ }
+ delete m;
+ }
+ delete items_old;
+ reset_data (false);
+}
+
+// setMetrics -- set the metric list according to specification
+// The previous sort is preserved, if possible
+// Otherwise, the default sort setting is used
+// Returns NULL if OK, or an error string if not
+//YXXX only MET_NORMAL appears to be used... code could be simplified
+char *
+DbeView::setMetrics (char *mspec, bool fromRcFile)
+{
+ char *ret;
+ MetricType mtype = MET_NORMAL;
+ // note that setting the default is done here, while all else is in MetricList
+ if (mspec == NULL) abort ();
+ if (strcasecmp (mspec, Command::DEFAULT_CMD) == 0)
+ {
+ mspec = settings->get_default_metrics ();
+ fromRcFile = true;
+ }
+ MetricList *mlist = get_metric_list (mtype);
+ mlist = new MetricList (mlist);
+ ret = mlist->set_metrics (mspec, fromRcFile, derived_metrics);
+ if (ret == NULL)
+ {
+ switch (mtype)
+ {
+ case MET_NORMAL:
+ case MET_COMMON:
+ delete metrics_lists->fetch (MET_COMMON);
+ metrics_lists->store (MET_COMMON, new MetricList (mlist));
+ break;
+ // ignoring the following cases (why?)
+ case MET_SRCDIS:
+ case MET_CALL:
+ case MET_DATA:
+ case MET_INDX:
+ case MET_CALL_AGR:
+ case MET_IO:
+ case MET_HEAP:
+ break;
+ }
+ add_compare_metrics (mlist);
+
+ //YXXX looks like cut/paste code here, see reset_metric_list()
+ switch (mtype)
+ {
+ case MET_NORMAL:
+ delete metrics_lists->fetch (mtype);
+ metrics_lists->store (mtype, mlist);
+ //YXXX is lack of break intentional? If so, add comment...
+ case MET_COMMON:
+ metrics_lists->fetch (MET_SRCDIS)->set_metrics (mlist);
+ metrics_lists->fetch (MET_CALL)->set_metrics (mlist);
+ metrics_lists->fetch (MET_CALL_AGR)->set_metrics (mlist);
+ remove_compare_metrics (metrics_lists->fetch (MET_CALL_AGR));
+ metrics_lists->fetch (MET_DATA)->set_metrics (mlist);
+ metrics_lists->fetch (MET_INDX)->set_metrics (mlist);
+ metrics_lists->fetch (MET_IO)->set_metrics (mlist);
+ metrics_lists->fetch (MET_HEAP)->set_metrics (mlist);
+ break;
+ case MET_CALL_AGR:
+ delete metrics_lists->fetch (MET_CALL_AGR);
+ metrics_lists->store (MET_CALL_AGR, mlist);
+ remove_compare_metrics (mlist);
+ break;
+ case MET_SRCDIS:
+ case MET_CALL:
+ case MET_DATA:
+ case MET_INDX:
+ case MET_IO:
+ case MET_HEAP:
+ delete metrics_lists->fetch (mtype);
+ metrics_lists->store (mtype, mlist);
+ break;
+ default:
+ abort ();
+ }
+ reset_data (false);
+ }
+ else
+ delete mlist;
+ return ret;
+}
+
+
+// Set Sort by name (er_print)
+char *
+DbeView::setSort (char * sort_list, MetricType mtype, bool fromRcFile)
+{
+ MetricList *mlist = NULL;
+
+ // note that setting the default is done here, while all else is in MetricList
+ if ((sort_list == NULL) || (strcmp (sort_list, Command::DEFAULT_CMD) == 0))
+ {
+ if (settings->str_dsort == NULL)
+ settings->str_dsort = strdup (Command::DEFAULT_METRICS);
+ sort_list = settings->get_default_sort ();
+ }
+ mlist = get_metric_list (mtype);
+
+ if (mlist == NULL)
+ abort ();
+
+ // set the new sort
+ char *ret = mlist->set_sort (sort_list, fromRcFile);
+ if (ret != NULL)
+ return ret;
+
+ // now resort all cached data
+ resortData (mtype);
+ return NULL;
+}
+
+// Set sort from the visible index (Analyzer)
+void
+DbeView::setSort (int visindex, MetricType mtype, bool reverse)
+{
+ MetricList *mlist = get_metric_list (mtype);
+ Vector<Metric*> *items = mlist->get_items ();
+ if (visindex >= items->size ())
+ return;
+ mlist->set_sort (visindex, reverse);
+ resortData (mtype);
+ if (mtype == MET_NORMAL)
+ {
+ int idx_cc = -1;
+ MetricList *mlist_cc = get_metric_list (MET_CALL);
+ Vector<Metric*> *items_cc = mlist_cc->get_items ();
+ for (int i = 0; i < items_cc->size (); i++)
+ {
+ char * name_cc = items_cc->fetch (i)->get_username ();
+ char * name_normal = items->fetch (visindex)->get_username ();
+ if (0 == strncmp (name_cc, name_normal, strlen (name_cc)))
+ {
+ idx_cc = i;
+ break;
+ }
+ }
+ if (idx_cc != -1)
+ {
+ mlist_cc->set_sort (idx_cc, reverse);
+ resortData (MET_CALL);
+ // Change a sort metric for MET_CALL_AGR
+ Metric *m = items_cc->fetch (idx_cc);
+ MetricList *cList = get_metric_list (MET_CALL_AGR);
+ Metric *m1 = cList->find_metric (m->get_cmd (), m->get_subtype ());
+ if (m1)
+ cList->set_sort_metric (m1->get_cmd (), m1->get_subtype (), reverse);
+ }
+ }
+ if (mtype == MET_CALL)
+ {
+ int idx_norm = -1;
+ MetricList *mlist_norm = get_metric_list (MET_NORMAL);
+ Vector<Metric*> *items_norm = mlist_norm->get_items ();
+ for (int i = 0; i < items_norm->size (); i++)
+ {
+ char * name_norm = items_norm->fetch (i)->get_username ();
+ char * name_cc = items->fetch (visindex)->get_username ();
+ if (mlist_norm->get_sort_ref_index () == i
+ && 0 == strncmp (name_norm, name_cc, strlen (name_norm)))
+ {
+ idx_norm = i;
+ break;
+ }
+ }
+ if (idx_norm == -1)
+ {
+ for (int i = 0; i < items_norm->size (); i++)
+ {
+ char * name_norm = items_norm->fetch (i)->get_username ();
+ char * name_cc = items->fetch (visindex)->get_username ();
+ if (0 == strncmp (name_norm, name_cc, strlen (name_norm)))
+ {
+ idx_norm = i;
+ break;
+ }
+ }
+ }
+ if (idx_norm != -1)
+ {
+ mlist_norm->set_sort (idx_norm, reverse);
+ resortData (MET_NORMAL);
+ }
+ // Change a sort metric for MET_CALL_AGR
+ Metric *m = items->fetch (visindex);
+ MetricList *cList = get_metric_list (MET_CALL_AGR);
+ Metric *m1 = cList->find_metric (m->get_cmd (), m->get_subtype ());
+ if (m1)
+ cList->set_sort_metric (m1->get_cmd (), m1->get_subtype (), reverse);
+ }
+}
+
+void
+DbeView::resortData (MetricType mtype)
+{
+ int idx;
+ Hist_data *data;
+
+ MetricList *mlist = get_metric_list (mtype);
+ switch (mtype)
+ {
+ case MET_NORMAL:
+ if (func_data != NULL)
+ func_data->resort (mlist);
+ if (line_data != NULL)
+ line_data->resort (mlist);
+ if (pc_data != NULL)
+ pc_data->resort (mlist);
+ break;
+ case MET_CALL:
+ case MET_CALL_AGR:
+ if (fitem_data != NULL)
+ fitem_data->resort (mlist);
+ if (callers != NULL)
+ callers->resort (mlist);
+ if (callees != NULL)
+ callees->resort (mlist);
+ break;
+ case MET_DATA:
+ if (dobj_data != NULL)
+ dobj_data->resort (mlist);
+ if (dlay_data != NULL)
+ {
+ delete dlay_data;
+ dlay_data = NULL;
+ }
+ break;
+ case MET_INDX:
+ Vec_loop (Hist_data*, indx_data, idx, data)
+ {
+ if (data)
+ data->resort (mlist);
+ }
+ break;
+ case MET_IO:
+ if (iofile_data != NULL)
+ iofile_data->resort (mlist);
+ if (iovfd_data != NULL)
+ iovfd_data->resort (mlist);
+ if (iocs_data != NULL)
+ iocs_data->resort (mlist);
+ break;
+ case MET_HEAP:
+ if (heapcs_data != NULL)
+ heapcs_data->resort (mlist);
+ break;
+ case MET_COMMON:
+ case MET_SRCDIS:
+ break;
+ }
+}
+
+// Get the sort metric name
+char *
+DbeView::getSort (MetricType mtype)
+{
+ MetricList *mlist = get_metric_list (mtype);
+ return mlist->get_sort_name ();
+}
+
+// Get the sort command (to use for resetting)
+char *
+DbeView::getSortCmd (MetricType mtype)
+{
+ MetricList *mlist = get_metric_list (mtype);
+ return mlist->get_sort_cmd ();
+}
+
+int
+DbeView::get_sel_ind (Histable *selObj, int type, int subtype)
+{
+ Hist_data *data;
+ switch (type)
+ {
+ case DSP_FUNCTION:
+ data = func_data;
+ break;
+ case DSP_LINE:
+ data = line_data;
+ break;
+ case DSP_PC:
+ data = pc_data;
+ break;
+ case DSP_SOURCE:
+ case DSP_SOURCE_V2:
+ data = src_data;
+ break;
+ case DSP_DISASM:
+ case DSP_DISASM_V2:
+ data = dis_data;
+ break;
+ case DSP_DLAYOUT:
+ data = dlay_data;
+ break;
+ case DSP_DATAOBJ:
+ data = dobj_data;
+ break;
+ case DSP_IOACTIVITY:
+ data = iofile_data;
+ break;
+ case DSP_IOVFD:
+ data = iovfd_data;
+ break;
+ case DSP_IOCALLSTACK:
+ data = iocs_data;
+ break;
+ case DSP_HEAPCALLSTACK:
+ data = heapcs_data;
+ break;
+ case DSP_MEMOBJ:
+ case DSP_INDXOBJ:
+ data = get_indxobj_data (subtype);
+ break;
+ default:
+ data = NULL;
+ break;
+ }
+ if (data == NULL || data->get_status () != Hist_data::SUCCESS)
+ return -1;
+ Vector<Hist_data::HistItem*> *hi_data = data->get_hist_items ();
+ for (int i = 0, sz = hi_data->size (); i < sz; i++)
+ {
+ Hist_data::HistItem *hi = hi_data->fetch (i);
+ if (hi->obj == selObj)
+ return i;
+ }
+ return -1;
+}
+
+MetricList *
+DbeView::get_metric_list (MetricType mtype, bool compare, int gr_num)
+{
+ MetricList *mlist;
+ switch (mtype)
+ {
+ case MET_COMMON:// comparison mode, src & disasm views
+ if (gr_num == 0)
+ {// signifies same src file (or load obj) used by all groups
+ // show compare metrics in columns (not in separate source panels)
+ mlist = get_metric_list (MET_NORMAL);
+ break;
+ }
+ // once source panel per group; get metrics for this group
+ mlist = get_metric_list (mtype);
+ if (compare)
+ {
+ mlist = get_compare_mlist (mlist, gr_num - 1);
+ int mode = get_compare_mode ();
+ if ((mode & (CMP_DELTA | CMP_RATIO)) != 0)
+ {
+ for (long i = 0, sz = mlist->size (); i < sz; i++)
+ {
+ Metric *m = mlist->get (i);
+ char *expr_spec = m->get_expr_spec ();
+ if (expr_spec && (strcmp (expr_spec, NTXT ("EXPGRID==1")) != 0))
+ {
+ int vbits = m->get_visbits () & ~(VAL_DELTA | VAL_RATIO);
+ if ((mode & CMP_RATIO) != 0)
+ vbits |= VAL_RATIO;
+ else if ((mode & CMP_DELTA) != 0)
+ vbits |= VAL_DELTA;
+ m->set_raw_visbits (vbits);
+ }
+ }
+ }
+ }
+ break;
+ default:
+ mlist = get_metric_list (mtype);
+ break;
+ }
+ return mlist;
+}
+
+Hist_data *
+DbeView::get_data (MetricList *mlist, Histable *selObj, int type, int subtype)
+{
+ Hist_data *data;
+ switch (type)
+ {
+ case DSP_FUNCTION:
+ delete func_data;
+ mlist = new MetricList (mlist);
+ func_data = get_hist_data (mlist, Histable::FUNCTION, subtype, Hist_data::ALL);
+ return func_data;
+ case DSP_LINE:
+ delete line_data;
+ mlist = new MetricList (mlist);
+ line_data = get_hist_data (mlist, Histable::LINE, subtype, Hist_data::ALL);
+ return line_data;
+ case DSP_PC:
+ delete pc_data;
+ mlist = new MetricList (mlist);
+ pc_data = get_hist_data (mlist, Histable::INSTR, subtype, Hist_data::ALL);
+ return pc_data;
+ case DSP_DATAOBJ:
+ delete dobj_data;
+ dobj_data = get_hist_data (mlist, Histable::DOBJECT, subtype,
+ Hist_data::ALL);
+ break;
+ case DSP_MEMOBJ:
+ return get_hist_data (mlist, Histable::MEMOBJ, subtype, Hist_data::ALL);
+ case DSP_INDXOBJ:
+ data = get_hist_data (mlist, Histable::INDEXOBJ, subtype, Hist_data::ALL);
+ indx_data->store (subtype, data);
+ return data;
+ case DSP_DLAYOUT:
+ delete dlay_data;
+ marks->reset ();
+ data = get_hist_data (mlist, Histable::DOBJECT, subtype,
+ Hist_data::LAYOUT);
+ // .. provides metric data for layout
+ dlay_data = get_data_space ()->get_layout_data (data, marks,
+ get_thresh_dis ());
+ return dlay_data;
+ case DSP_CALLER:
+ delete callers;
+ callers = get_hist_data (mlist, Histable::FUNCTION, subtype,
+ Hist_data::CALLERS, selObj);
+ return callers;
+ case DSP_CALLEE:
+ delete callees;
+ callees = get_hist_data (mlist, Histable::FUNCTION, subtype,
+ Hist_data::CALLEES, selObj);
+ return callees;
+ case DSP_SELF:
+ // Center Function item
+ delete fitem_data;
+ fitem_data = get_hist_data (mlist, Histable::FUNCTION, subtype,
+ Hist_data::SELF, selObj);
+ return fitem_data;
+ case DSP_SOURCE_V2:
+ case DSP_DISASM_V2:
+ case DSP_SOURCE:
+ case DSP_DISASM:
+ {
+ // Source or disassembly
+ if (selObj == NULL)
+ {
+ error_msg = status_str (DBEVIEW_NO_SEL_OBJ);
+ return NULL;
+ }
+ Function *func = (Function *) selObj->convertto (Histable::FUNCTION);
+ if (func == NULL)
+ {
+ error_msg = dbe_strdup (GTXT ("Not a real function; no source or disassembly available."));
+ return NULL;
+ }
+ if (func->flags & FUNC_FLAG_SIMULATED)
+ {
+ error_msg = dbe_strdup (GTXT ("Not a real function; no source or disassembly available."));
+ return NULL;
+ }
+ if (func->get_name () == NULL)
+ {
+ error_msg = dbe_strdup (GTXT ("Source location not recorded in experiment"));
+ return NULL;
+ }
+ Module *module = func->module;
+ if (module == NULL || module->get_name () == NULL)
+ {
+ error_msg = dbe_strdup (GTXT ("Object name not recorded in experiment"));
+ return NULL;
+ }
+ marks->reset ();
+ SourceFile *srcContext = (SourceFile *) selObj->convertto (Histable::SOURCEFILE);
+ sel_binctx = func;
+
+ if (func_data == NULL)
+ func_data = get_hist_data (mlist, Histable::FUNCTION, subtype, Hist_data::ALL);
+
+ // for source and disassembly the name needs to be invisible,
+ // but that's handled in the module code
+ if (type == DSP_SOURCE || type == DSP_SOURCE_V2)
+ {
+ marks2dsrc->reset ();
+ marks2dsrc_inc->reset ();
+ delete src_data;
+ data = src_data = module->get_data (this, mlist, Histable::LINE,
+ func_data->get_totals ()->value, srcContext, func,
+ marks, get_thresh_src (), get_src_compcom (),
+ get_src_visible (), get_hex_visible (),
+ false, false, marks2dsrc, marks2dsrc_inc);
+ }
+ else
+ { /* type == DSP_DISASM */
+ marks2ddis->reset ();
+ marks2ddis_inc->reset ();
+ delete dis_data;
+ data = dis_data = module->get_data (this, mlist, Histable::INSTR,
+ func_data->get_totals ()->value, srcContext, func,
+ marks, get_thresh_dis (), get_dis_compcom (),
+ get_src_visible (), get_hex_visible (),
+ get_func_scope (), false, marks2ddis,
+ marks2ddis_inc);
+ }
+ return data;
+ }
+ default:
+ abort ();
+ }
+ return NULL;
+}
+
+Histable *
+DbeView::get_compare_obj (Histable *obj)
+{
+ char *nm;
+ switch (obj->get_type ())
+ {
+ case Histable::LINE:
+ nm = obj->get_name ();
+ if (nm == NULL)
+ break;
+ if (dbeSession->comp_dbelines == NULL)
+ dbeSession->comp_dbelines = new HashMap<char*, DbeLine*>;
+ return dbeSession->comp_dbelines->get (nm, (DbeLine*) obj);
+ case Histable::SOURCEFILE:
+ nm = obj->get_name ();
+ if (nm == NULL)
+ break;
+ nm = get_basename (nm);
+ if (dbeSession->comp_sources == NULL)
+ dbeSession->comp_sources = new HashMap<char*, SourceFile*>;
+ return dbeSession->comp_sources->get (nm, (SourceFile*) obj);
+ default:
+ return obj->get_compare_obj ();
+ }
+ return obj;
+}
+
+//
+// get_hist_data() creates a new Hist_data object;
+// it's caller's responsibility to delete it.
+Hist_data *
+DbeView::get_hist_data (MetricList *mlist_orig, Histable::Type type,
+ int subtype, Hist_data::Mode mode, Histable *obj,
+ Histable *context, Vector<Histable*> *sel_objs,
+ PathTree::PtreeComputeOption flag)
+{
+ Vector<Histable*> *objs = NULL;
+ if (obj != NULL)
+ {
+ objs = new Vector<Histable*>();
+ objs->append (obj);
+ }
+ Hist_data *res = get_hist_data (mlist_orig, type, subtype, mode, objs, context, sel_objs, flag);
+ delete objs;
+ return res;
+}
+
+Hist_data *
+DbeView::get_hist_data (MetricList *mlist_orig, Histable::Type type,
+ int subtype, Hist_data::Mode mode,
+ Vector<Histable*> *objs,
+ Histable *context, Vector<Histable*> *sel_objs,
+ PathTree::PtreeComputeOption flag)
+{
+ MetricList *mlist = new MetricList (mlist_orig);
+ /*
+ * mlist differs from mlist_orig in two ways:
+ * - extra metrics have been added as needed to compute derived metrics
+ * - extra metrics have been added as needed to compute time for HWC (time converted) metrics
+ * (We don't drop those extra metrics but we don't display they to user.)
+ * - visibility bits have been added for compare mode (e.g., VAL_DELTA or VAL_RATIO)
+ * (We want to preserve those visbits.)
+ */
+ // loop over mlist to add missing dependencies for derived metrics
+ for (long i = 0, sz = mlist->get_items ()->size (); i < sz; i++)
+ {
+ Metric *m = mlist->get_items ()->fetch (i);
+ char *expr_spec = m->get_expr_spec ();
+ if (expr_spec && (strcmp (expr_spec, NTXT ("EXPGRID==1")) != 0))
+ {
+ int ind = mlist->get_listorder (m->get_cmd (), m->get_subtype (), NTXT ("EXPGRID==1"));
+ if (ind < 0)
+ {
+ BaseMetric *bm1 = dbeSession->find_metric (m->get_type (), m->get_cmd (), NTXT ("EXPGRID==1"));
+ Metric *m1 = new Metric (bm1, m->get_subtype ());
+ m1->set_dmetrics_visbits (VAL_VALUE);
+ mlist->append (m1);
+ }
+ }
+ }
+
+ for (long i = 0, sz = mlist->get_items ()->size (); i < sz; i++)
+ {
+ Metric *m = mlist->get_items ()->fetch (i);
+ if (m->get_type () == BaseMetric::DERIVED)
+ {
+ Definition *def = m->get_definition ();
+ Vector<BaseMetric*> *dependencies = def->get_dependencies ();
+ long *map = def->get_map ();
+ for (long i1 = 0, sz1 = dependencies ? dependencies->size () : 0; i1 < sz1; i1++)
+ {
+ BaseMetric *bm = dependencies->fetch (i1);
+ int ind = mlist->get_listorder (bm->get_cmd (), m->get_subtype (), m->get_expr_spec ());
+ if (ind < 0)
+ {
+ BaseMetric *bm1 = dbeSession->find_metric (bm->get_type (), bm->get_cmd (), m->get_expr_spec ());
+ assert (bm1 != NULL);
+ Metric *m1 = new Metric (bm1, m->get_subtype ());
+ m1->set_dmetrics_visbits (VAL_VALUE);
+ ind = mlist->size ();
+ mlist->append (m1);
+ }
+ map[i1] = ind;
+ }
+ }
+ else if (m->get_type () == BaseMetric::HWCNTR)
+ {
+ if (m->is_tvisible () && m->get_dependent_bm ())
+ {
+ int ii = mlist->get_listorder (m->get_dependent_bm ()->get_cmd (),
+ m->get_subtype (), m->get_expr_spec ());
+ if (ii < 0)
+ {
+ BaseMetric *bm1 = dbeSession->find_metric (m->get_type (),
+ m->get_dependent_bm ()->get_cmd (),
+ m->get_expr_spec ());
+ assert (bm1 != NULL);
+ Metric *m1 = new Metric (bm1, m->get_subtype ());
+ m1->set_dmetrics_visbits ((m->get_visbits ()
+ & ~VAL_VALUE) | VAL_TIMEVAL);
+ mlist->append (m1);
+ }
+ }
+ }
+ }
+
+ // compute Hist_data
+ Hist_data *data;
+ switch (type)
+ {
+ case Histable::INSTR:
+ case Histable::LINE:
+ data = ptree->compute_metrics (mlist, type, mode, objs, context, sel_objs);
+ break;
+ case Histable::FUNCTION:
+ case Histable::MODULE:
+ case Histable::LOADOBJECT:
+ data = ptree->compute_metrics (mlist, type, mode, objs, NULL,
+ sel_objs, flag);
+ break;
+ case Histable::DOBJECT:
+ data = dspace->compute_metrics (mlist, type, mode,
+ objs ? objs->fetch (0) : NULL);
+ break;
+ case Histable::MEMOBJ:
+ case Histable::INDEXOBJ:
+ data = indxspaces->get (subtype)->compute_metrics (mlist, type, mode,
+ objs, NULL);
+ break;
+ case Histable::IOACTFILE:
+ if (objs == NULL)
+ {
+ data = iofile_data = iospace->compute_metrics (mlist, type, mode,
+ NULL);
+ break;
+ }
+ else
+ {
+ data = iospace->compute_metrics (mlist, type, mode, objs->fetch (0));
+ break;
+ }
+ case Histable::IOACTVFD:
+ if (objs == NULL)
+ data = iovfd_data = iospace->compute_metrics (mlist, type, mode, NULL);
+ else
+ data = iospace->compute_metrics (mlist, type, mode, objs->fetch (0));
+ break;
+ case Histable::IOCALLSTACK:
+ if (objs == NULL)
+ data = iocs_data = iospace->compute_metrics (mlist, type, mode, NULL);
+ else
+ data = iospace->compute_metrics (mlist, type, mode, objs->fetch (0));
+ break;
+ case Histable::HEAPCALLSTACK:
+ if (objs == NULL)
+ data = heapcs_data = heapspace->compute_metrics (mlist, type, mode, NULL);
+ else
+ data = heapspace->compute_metrics (mlist, type, mode, objs->fetch (0));
+ break;
+ default:
+ data = NULL;
+ break;
+ }
+ for (long i = mlist_orig->get_items ()->size (),
+ sz = mlist->get_items ()->size (); i < sz; i++)
+ {
+ Metric *m = mlist->get_items ()->get (i);
+ m->set_dmetrics_visbits (VAL_HIDE_ALL | m->get_visbits ());
+ }
+ if (data)
+ data->nmetrics = mlist_orig->size ();
+ return data;
+}
+
+char *
+DbeView::get_mobj_name (int subtype)
+{
+ MemorySpace *ms = getMemorySpace (subtype);
+ if (ms == NULL)
+ ms = addMemorySpace (subtype);
+ return ms->getMemObjTypeName ();
+}
+
+MemorySpace *
+DbeView::getMemorySpace (int subtype)
+{
+ for (long i = 0, sz = VecSize (memspaces); i < sz; i++)
+ {
+ MemorySpace *ms = memspaces->get (i);
+ if (subtype == ms->getMemObjType ())
+ return ms;
+ }
+ return NULL;
+}
+
+MemorySpace *
+DbeView::addMemorySpace (int subtype)
+{
+ MemorySpace *ms = new MemorySpace (this, subtype);
+ memspaces->append (ms);
+ return ms;
+}
+
+Hist_data *
+DbeView::get_indxobj_data (int subtype)
+{
+ if (subtype < 0 || subtype >= indx_data->size ())
+ return NULL;
+ return indx_data->fetch (subtype);
+}
+
+void
+DbeView::set_indxobj_sel (int subtype, int sel_ind)
+{
+ Hist_data *data = get_indxobj_data (subtype);
+ if (data == NULL)
+ return;
+ if (sel_ind >= 0 && sel_ind < data->size ())
+ {
+ Histable *obj = data->fetch (sel_ind)->obj;
+ sel_idxobj->store (subtype, obj);
+ }
+}
+
+Histable *
+DbeView::get_indxobj_sel (int subtype)
+{
+ return sel_idxobj->fetch (subtype);
+}
+
+void
+DbeView::addIndexSpace (int subtype)
+{
+ PathTree *is = new PathTree (this, subtype);
+ indxspaces->store (subtype, is);
+ indx_data->store (subtype, NULL);
+ sel_idxobj->store (subtype, NULL);
+ settings->indxobj_define (subtype, false);
+}
+
+Histable *
+DbeView::get_sel_obj_io (uint64_t id, Histable::Type type)
+{
+ if (iospace == NULL)
+ return NULL;
+ Histable *obj = NULL;
+ Hist_data *data = NULL;
+ switch (type)
+ {
+ case Histable::IOACTFILE:
+ data = iofile_data;
+ break;
+ case Histable::IOACTVFD:
+ data = iovfd_data;
+ break;
+ case Histable::IOCALLSTACK:
+ data = iocs_data;
+ break;
+ default:
+ break;
+ }
+ if (data == NULL)
+ return NULL;
+
+ Vector<Hist_data::HistItem*> *hi_data = data->get_hist_items ();
+ int size = hi_data->size ();
+ for (int i = 0; i < size; i++)
+ {
+ Hist_data::HistItem *hi = hi_data->fetch (i);
+ if (hi->obj != NULL && (uint64_t) hi->obj->id == id)
+ {
+ obj = hi->obj;
+ break;
+ }
+ }
+ return obj;
+}
+
+Histable *
+DbeView::get_sel_obj_heap (uint64_t id)
+{
+ if (heapspace == NULL || heapcs_data == NULL)
+ return NULL;
+ Histable *obj = NULL;
+ Hist_data *data = heapcs_data;
+ Vector<Hist_data::HistItem*> *hi_data = data->get_hist_items ();
+ int size = hi_data->size ();
+ for (int i = 0; i < size; i++)
+ {
+ Hist_data::HistItem *hi = hi_data->fetch (i);
+ if ((hi->obj != NULL) && ((uint64_t) hi->obj->id) == id)
+ {
+ obj = hi->obj;
+ break;
+ }
+ }
+ return obj;
+}
+
+CStack_data *
+DbeView::get_cstack_data (MetricList *mlist)
+{
+ return ptree->get_cstack_data (mlist);
+}
+
+Stats_data *
+DbeView::get_stats_data (int index)
+{
+ DataView *packets = get_filtered_events (index, DATA_SAMPLE);
+ if (packets == NULL)
+ return NULL;
+ return new Stats_data (packets);
+}
+
+Ovw_data *
+DbeView::get_ovw_data (int index)
+{
+ DataView *packets = get_filtered_events (index, DATA_SAMPLE);
+ Experiment* exp = dbeSession->get_exp (index);
+ hrtime_t starttime = 0;
+ if (exp != NULL)
+ starttime = exp->getStartTime ();
+ if (packets == NULL)
+ return NULL;
+ return new Ovw_data (packets, starttime);
+}
+
+char *
+DbeView::set_filter (const char *filter_spec)
+{
+ if (dbe_strcmp (filter_spec, cur_filter_str) == 0) // Nothing was changed
+ return NULL;
+
+ // if string is NULL, delete the filter
+ if (filter_spec == NULL)
+ {
+ if (cur_filter_str)
+ {
+ free (cur_filter_str);
+ cur_filter_str = NULL;
+ }
+ if (cur_filter_expr)
+ {
+ delete cur_filter_expr;
+ cur_filter_expr = NULL;
+ }
+ noParFilter = false;
+ purge_events ();
+ reset_data (false);
+ return NULL;
+ }
+
+ // process the filter
+ Expression *expr = dbeSession->ql_parse (filter_spec);
+ if (expr == NULL)
+ return dbe_sprintf (GTXT ("Invalid filter specification `%s'\n"), filter_spec);
+
+ if (dbe_strcmp (filter_spec, "1") == 0)
+ noParFilter = false;
+ else if (sel_obj != NULL)
+ if (sel_obj->get_type () == Histable::LINE)
+ if (expr->verifyObjectInExpr (sel_obj))
+ noParFilter = true;
+
+ // valid new filter
+ if (cur_filter_str != NULL)
+ {
+ free (prev_filter_str);
+ prev_filter_str = dbe_strdup (cur_filter_str);
+ }
+ free (cur_filter_str);
+ cur_filter_str = dbe_strdup (filter_spec);
+ delete cur_filter_expr;
+ cur_filter_expr = expr;
+ purge_events ();
+ reset_data (false);
+ return NULL;
+}
+
+FilterExp *
+DbeView::get_FilterExp (Experiment *exp)
+{
+ if (cur_filter_expr == NULL)
+ return NULL;
+ Expression::Context *ctx = new Expression::Context (this, exp);
+ return new FilterExp (cur_filter_expr, ctx, noParFilter);
+}
+
+char *
+DbeView::get_filter ()
+{
+ return dbe_strdup (cur_filter_str);
+}
+
+FilterSet *
+DbeView::get_filter_set (int n)
+{
+ fflush (stderr);
+ if (n >= filters->size ())
+ return NULL;
+ return ( filters->fetch (n));
+}
+
+Vector<FilterNumeric*> *
+DbeView::get_all_filters (int nexp)
+{
+ FilterSet *fs = get_filter_set (nexp);
+ return fs ? fs->get_all_filters () : NULL;
+}
+
+FilterNumeric *
+DbeView::get_FilterNumeric (int nexp, int idx)
+{
+ FilterSet *fs = get_filter_set (nexp);
+ return fs ? fs->get_filter (idx) : NULL;
+}
+
+void
+DbeView::backtrack_filter()
+{
+ if (prev_filter_str != NULL)
+ set_filter(prev_filter_str);
+ else set_filter("1"); // reset
+
+}
+
+void
+DbeView::update_advanced_filter ()
+{
+ char *s = get_advanced_filter ();
+ if (dbe_strcmp (s, cur_filter_str))
+ {
+ phaseIdx++;
+ char *err_msg = set_filter (s);
+ if (err_msg)
+ {
+#ifdef DEBUG
+ fprintf (stderr, NTXT ("ERROR: Advanced Filter: '%s'\n"), err_msg);
+#endif
+ }
+ }
+ free (s);
+}
+
+bool
+DbeView::set_pattern (int n, Vector<char *> *pattern_str, bool *error)
+{
+ Vector<FilterNumeric*> *filts = get_all_filters (n);
+
+ bool ret = false;
+ *error = false;
+ int imax = pattern_str->size ();
+ if (imax > filts->size ())
+ imax = filts->size ();
+ for (int i = 0; i < imax; i++)
+ {
+ FilterNumeric *f = filts->fetch (i);
+ char *s = pattern_str->fetch (i);
+ if (s == NULL)
+ continue;
+ if (f->set_pattern (s, error))
+ ret = true;
+ }
+
+ if (ret || cur_filter_expr)
+ {
+ update_advanced_filter ();
+ filter_active = true;
+ }
+ return ret;
+}
+
+static void
+append_experiments (StringBuilder *sb, int first, int last)
+{
+ if (first == -1)
+ return;
+ if (sb->length () != 0)
+ sb->append (NTXT (" || "));
+ sb->append ('(');
+ if (first == last)
+ {
+ sb->append (NTXT ("EXPID=="));
+ sb->append (first);
+ }
+ else
+ {
+ sb->append (NTXT ("EXPID>="));
+ sb->append (first);
+ sb->append (NTXT (" && EXPID<="));
+ sb->append (last);
+ }
+ sb->append (')');
+}
+
+char *
+DbeView::get_advanced_filter ()
+{
+ StringBuilder sb;
+ bool wasFalse = false;
+ int first = -1, last = -1;
+ for (int n = 0, nexps = dbeSession->nexps (); n < nexps; n++)
+ {
+ FilterSet *fs = get_filter_set (n);
+ char *s = fs->get_advanced_filter ();
+ if (s)
+ {
+ if (streq (s, NTXT ("1")))
+ {
+ last = n + 1;
+ if (first == -1)
+ first = last;
+ continue;
+ }
+ append_experiments (&sb, first, last);
+ first = -1;
+ if (streq (s, NTXT ("0")))
+ {
+ wasFalse = true;
+ continue;
+ }
+ if (sb.length () != 0)
+ sb.append (NTXT (" || "));
+ sb.append (NTXT ("(EXPID=="));
+ sb.append (n + 1);
+ sb.append (NTXT (" && ("));
+ sb.append (s);
+ free (s);
+ sb.append (NTXT ("))"));
+ }
+ else
+ {
+ last = n + 1;
+ if (first == -1)
+ first = last;
+ }
+ }
+ if (first != 1)
+ {
+ append_experiments (&sb, first, last);
+ first = -1;
+ }
+ if (sb.length () == 0)
+ sb.append (wasFalse ? '0' : '1');
+ else
+ append_experiments (&sb, first, last);
+ return sb.toString ();
+}
+
+bool
+DbeView::set_pattern (int m, char *pattern)
+{
+ bool error = false;
+
+ // Store original setting in case of error
+ int nexps = dbeSession->nexps ();
+ int orig_phaseIdx = phaseIdx;
+ bool *orig_enable = new bool[nexps];
+ char **orig_pattern = new char*[nexps];
+ for (int i = 0; i < nexps; i++)
+ {
+ orig_pattern[i] = get_FilterNumeric (i, m)->get_pattern ();
+ orig_enable[i] = get_exp_enable (i);
+ set_exp_enable (i, false);
+ }
+
+ // Copy the pattern so that we could safely modify it
+ char *buf = dbe_strdup (pattern);
+ FilterNumeric *fexp = NULL;
+ char *pb, *pe;
+ pb = pe = buf;
+ for (bool done = false; !done; pe++)
+ {
+ if (*pe == ':')
+ {
+ // experiment filter;
+ *pe = '\0';
+ fexp = new FilterNumeric (NULL, NULL, NULL);
+ fexp->set_range (1, nexps, nexps);
+ fexp->set_pattern (pb, &error);
+ if (error)
+ break;
+ pb = pe + 1;
+ }
+ else if (*pe == '+' || *pe == '\0')
+ {
+ // entity filter
+ if (*pe == '\0')
+ done = true;
+ else
+ *pe = '\0';
+ for (int i = 0; i < nexps; i++)
+ {
+ if (!fexp || fexp->is_selected (i + 1))
+ {
+ FilterNumeric *f = get_FilterNumeric (i, m);
+ f->set_pattern (pb, &error);
+ if (error)
+ break;
+ set_exp_enable (i, true);
+ }
+ }
+ if (error)
+ break;
+ delete fexp;
+ fexp = NULL;
+ pb = pe + 1;
+ }
+ }
+
+ if (error)
+ {
+ for (int i = 0; i < nexps; i++)
+ {
+ bool err;
+ set_exp_enable (i, orig_enable[i]);
+ FilterNumeric *f = get_FilterNumeric (i, m);
+ f->set_pattern (orig_pattern[i], &err);
+ free (orig_pattern[i]);
+ }
+ phaseIdx = orig_phaseIdx;
+ }
+ else
+ {
+ update_advanced_filter ();
+ filter_active = true;
+ }
+ delete[] orig_enable;
+ delete[] orig_pattern;
+ delete fexp;
+ free (buf);
+ return !error;
+}
+
+void
+DbeView::set_view_mode (VMode newmode)
+{
+ if (newmode != settings->get_view_mode ())
+ {
+
+ // For OpenMP, the expert mode path-tree is already present with the user mode
+ // No need to increase the phaseIdx to trigger recomputation of path-tree
+ // if we toggle between user and expert modes
+ if (!(dbeSession->is_omp_available ()
+ && ((newmode == VMODE_EXPERT
+ && settings->get_view_mode () == VMODE_USER)
+ || (newmode == VMODE_USER
+ && settings->get_view_mode () == VMODE_EXPERT))))
+ phaseIdx++; // For all other cases
+ setNewViewMode ();
+ settings->set_view_mode (newmode);
+ }
+}
+
+Cmd_status
+DbeView::set_view_mode (char *str, bool fromRC)
+{
+ VMode old = settings->get_view_mode ();
+ Cmd_status ret = settings->set_view_mode (str, fromRC);
+ if (old != settings->get_view_mode ())
+ phaseIdx++;
+ return ret;
+}
+
+Cmd_status
+DbeView::set_en_desc (char *str, bool fromRC)
+{
+ // Tell the session
+ Settings *s = dbeSession->get_settings ();
+ s->set_en_desc (str, fromRC);
+
+ // and tell our settings
+ return settings->set_en_desc (str, fromRC);
+}
+
+// Get processor stats messages
+char *
+DbeView::get_processor_msg (int type)
+{
+ if (ptree == NULL) // if no PathTree, no messages
+ return NULL;
+
+ StringBuilder sb;
+ Emsg *m = (type == PSTAT_MSG) ? ptree->fetch_stats () : ptree->fetch_warnings ();
+ for (; m != NULL; m = m->next)
+ {
+ char* newmsg = m->get_msg ();
+ sb.append (newmsg);
+ sb.append ("\n");
+ }
+
+ if (type == PSTAT_MSG)
+ ptree->delete_stats ();
+ else
+ ptree->delete_warnings ();
+ return (sb.length () > 0) ? sb.toString () : NULL;
+}
+
+void
+DbeView::dump_nodes (FILE *outfile)
+{
+ FILE *f = (outfile == NULL ? stderr : outfile);
+ ptree->print (f);
+}
+
+// Dump the clock profile events
+void
+DbeView::dump_profile (FILE *out_file)
+{
+ for (int idx = 0; idx < dbeSession->nexps (); idx++)
+ {
+ Experiment *exp = dbeSession->get_exp (idx);
+ VMode view_mode = get_view_mode ();
+ char * stateNames [/*LMS_NUM_STATES*/] = LMS_STATE_STRINGS;
+
+ // Process clock profile date
+ DataView *packets = get_filtered_events (idx, DATA_CLOCK);
+ if (packets && packets->getSize () != 0)
+ {
+ hrtime_t start = exp->getStartTime ();
+ fprintf (out_file,
+ GTXT ("\nTotal Clock Profiling Packets: %d Experiment: %s\n"),
+ (int) packets->getSize (), exp->get_expt_name ());
+ for (long i = 0; i < packets->getSize (); i++)
+ {
+ hrtime_t expr_ts = (hrtime_t) packets->getLongValue (PROP_TSTAMP, i);
+ hrtime_t ts = expr_ts - start;
+
+ // get the properties from the packet
+ uint32_t thrid = (uint32_t) packets->getIntValue (PROP_THRID, i);
+ uint32_t cpuid = (uint32_t) packets->getIntValue (PROP_CPUID, i);
+ int mstate = (int) packets->getIntValue (PROP_MSTATE, i);
+ int nticks = (int) packets->getIntValue (PROP_NTICK, i);
+
+ char *sname;
+ char buf[1024];
+ if (mstate >= 0 && mstate < LMS_NUM_STATES)
+ sname = stateNames[mstate];
+ else
+ {
+ snprintf (buf, sizeof (buf), NTXT ("Unexpected mstate = %d"), mstate);
+ sname = buf;
+ }
+
+ // get the stack IGNORE HIDE
+ Vector<Histable*> *stack = getStackPCs (view_mode, packets, i);
+ int stack_size = stack->size ();
+
+ // print the packet header with the count of stack frames
+ fprintf (out_file,
+ GTXT ("#%6ld: %lld, %3lld.%09lld (%4lld.%09lld) t = %d, cpu = %d, frames = %d\n"),
+ i, expr_ts, ts / NANOSEC, ts % NANOSEC,
+ expr_ts / NANOSEC, expr_ts % NANOSEC,
+ thrid, cpuid, stack_size);
+ fprintf (out_file,
+ GTXT (" mstate = %d (%s), nticks = %d\n"),
+ mstate, sname, nticks);
+
+ // dump the callstack
+ for (int j = stack_size - 1; j >= 0; j--)
+ {
+ Histable *frame = stack->fetch (j);
+ fprintf (out_file, GTXT (" %s [0x%016llx]\n"), frame->get_name (), (long long) frame);
+ }
+ fprintf (out_file, "\n");
+ }
+ }
+ else
+ fprintf (out_file,
+ GTXT ("\nNo Clock Profiling Packets in Experiment: %s\n"),
+ exp->get_expt_name ());
+ }
+}
+
+// Dump the sync trace events
+void
+DbeView::dump_sync (FILE *out_file)
+{
+ for (int idx = 0; idx < dbeSession->nexps (); idx++)
+ {
+ Experiment *exp = dbeSession->get_exp (idx);
+ VMode view_mode = get_view_mode ();
+
+ // Process heap trace date
+ DataView *packets = get_filtered_events (idx, DATA_SYNCH);
+ if (packets && packets->getSize () != 0)
+ {
+ hrtime_t start = exp->getStartTime ();
+ fprintf (out_file,
+ GTXT ("\nTotal Synctrace Packets: %d Experiment: %s\n"),
+ (int) packets->getSize (), exp->get_expt_name ());
+
+ for (long i = 0; i < packets->getSize (); i++)
+ {
+ hrtime_t expr_ts = (hrtime_t) packets->getLongValue (PROP_TSTAMP, i);
+ hrtime_t ts = expr_ts - start;
+
+ // get the properties from the packet
+ uint32_t thrid = (uint32_t) packets->getIntValue (PROP_THRID, i);
+ uint32_t cpuid = (uint32_t) packets->getIntValue (PROP_CPUID, i);
+ uint64_t syncobj = (uint64_t) packets->getLongValue (PROP_SOBJ, i);
+ hrtime_t syncrtime = (uint64_t) packets->getLongValue (PROP_SRQST, i);
+ hrtime_t syncdelay = expr_ts - syncrtime;
+
+ // get the stack IGNORE HIDE
+ Vector<Histable*> *stack = getStackPCs (view_mode, packets, i);
+ int stack_size = stack->size ();
+
+ // print the packet header with the count of stack frames
+ fprintf (out_file,
+ GTXT ("#%6ld: %lld, %3lld.%09lld (%4lld.%09lld) t = %d, cpu = %d, frames = %d\n"),
+ i, expr_ts, ts / NANOSEC, ts % NANOSEC,
+ expr_ts / NANOSEC, expr_ts % NANOSEC, thrid,
+ cpuid, stack_size);
+ fprintf (stderr,
+ GTXT (" synchronization object @ 0x%016llx; synchronization delay %3lld.%09lld\n"),
+ (unsigned long long) syncobj, (long long) (syncdelay / NANOSEC), (long long) (syncdelay % NANOSEC));
+
+ // dump the callstack
+ for (int j = stack_size - 1; j >= 0; j--)
+ {
+ Histable *frame = stack->fetch (j);
+ fprintf (out_file, GTXT (" %s [0x%016llx]\n"), frame->get_name (), (long long) frame);
+ }
+ fprintf (out_file, "\n");
+ }
+ }
+ else
+ fprintf (out_file, GTXT ("\nNo Synctrace Packets in Experiment: %s\n"),
+ exp->get_expt_name ());
+ }
+}
+
+// Dump the IO trace events
+void
+DbeView::dump_iotrace (FILE *out_file)
+{
+ for (int idx = 0; idx < dbeSession->nexps (); idx++)
+ {
+ Experiment *exp = dbeSession->get_exp (idx);
+ VMode view_mode = get_view_mode ();
+
+ // Process IO trace date
+ DataView *packets = get_filtered_events (idx, DATA_IOTRACE);
+ if (packets && packets->getSize () != 0)
+ {
+ hrtime_t start = exp->getStartTime ();
+ fprintf (out_file,
+ GTXT ("\nTotal IO trace Packets: %d Experiment: %s\n"),
+ (int) packets->getSize (), exp->get_expt_name ());
+ for (long i = 0; i < packets->getSize (); i++)
+ {
+ hrtime_t expr_ts = (hrtime_t) packets->getLongValue (PROP_TSTAMP, i);
+ hrtime_t ts = expr_ts - start;
+
+ // get the properties from the packet
+ uint32_t thrid = (uint32_t) packets->getIntValue (PROP_THRID, i);
+ uint32_t cpuid = (uint32_t) packets->getIntValue (PROP_CPUID, i);
+ IOTrace_type iotrtype = (IOTrace_type) packets->getIntValue (PROP_IOTYPE, i);
+ uint32_t iofd = (uint32_t) packets->getIntValue (PROP_IOFD, i);
+ uint64_t ionbyte = (uint64_t) packets->getIntValue (PROP_IONBYTE, i);
+ hrtime_t iorqst = (hrtime_t) packets->getLongValue (PROP_IORQST, i);
+ uint32_t ioofd = (uint32_t) packets->getIntValue (PROP_IOOFD, i);
+ FileSystem_type iofstype = (FileSystem_type) packets->getIntValue (PROP_CPUID, i);
+ int64_t iovfd = (int64_t) packets->getIntValue (PROP_IOVFD, i);
+
+ char *fName = NULL;
+ StringBuilder *sb = (StringBuilder*) packets->getObjValue (PROP_IOFNAME, i);
+ if (sb != NULL && sb->length () > 0)
+ fName = sb->toString ();
+
+ // get the stack IGNORE HIDE
+ Vector<Histable*> *stack = getStackPCs (view_mode, packets, i);
+ int stack_size = stack->size ();
+ const char *iotrname;
+ switch (iotrtype)
+ {
+ case READ_TRACE:
+ iotrname = "ReadTrace";
+ break;
+ case WRITE_TRACE:
+ iotrname = "WriteTrace";
+ break;
+ case OPEN_TRACE:
+ iotrname = "OpenTrace";
+ break;
+ case CLOSE_TRACE:
+ iotrname = "CloseTrace";
+ break;
+ case OTHERIO_TRACE:
+ iotrname = "OtherIOTrace";
+ break;
+ case READ_TRACE_ERROR:
+ iotrname = "ReadTraceError";
+ break;
+ case WRITE_TRACE_ERROR:
+ iotrname = "WriteTraceError";
+ break;
+ case OPEN_TRACE_ERROR:
+ iotrname = "OpenTraceError";
+ break;
+ case CLOSE_TRACE_ERROR:
+ iotrname = "CloseTraceError";
+ break;
+ case OTHERIO_TRACE_ERROR:
+ iotrname = "OtherIOTraceError";
+ break;
+ default:
+ iotrname = "UnknownIOTraceType";
+ break;
+ }
+
+ // print the packet header with the count of stack frames
+ fprintf (out_file,
+ GTXT ("#%6ld: %lld, %3lld.%09lld (%4lld.%09lld) t = %d, cpu = %d, frames = %d\n"),
+ i, expr_ts, ts / NANOSEC, ts % NANOSEC,
+ expr_ts / NANOSEC, expr_ts % NANOSEC,
+ thrid, cpuid, stack_size);
+ fprintf (out_file,
+ GTXT (" %s: fd = %d, ofd = %d, vfd = %lld, fstype = %d, rqst = %3lld.%09lld\n"),
+ iotrname, (int) iofd, (int) ioofd, (long long) iovfd,
+ (int) iofstype, (long long) (iorqst / NANOSEC),
+ (long long) (iorqst % NANOSEC));
+ fprintf (out_file, GTXT (" filename = `%s', nbytes = %d\n"),
+ STR (fName), (int) ionbyte);
+ free (fName);
+
+ // dump the callstack
+ for (int j = stack_size - 1; j >= 0; j--)
+ {
+ Histable *frame = stack->fetch (j);
+ fprintf (out_file, GTXT (" %s [0x%016llx]\n"), frame->get_name (), (long long) frame);
+ }
+ fprintf (out_file, "\n");
+ }
+ }
+ else
+ fprintf (out_file, GTXT ("\nNo IO trace Packets in Experiment: %s\n"),
+ exp->get_expt_name ());
+ }
+}
+
+// Dump the HWC Profiling events
+void
+DbeView::dump_hwc (FILE *out_file)
+{
+ for (int idx = 0; idx < dbeSession->nexps (); idx++)
+ {
+ Experiment *exp = dbeSession->get_exp (idx);
+ VMode view_mode = get_view_mode ();
+
+ // Dump HWC profiling data
+ DataView *packets = get_filtered_events (idx, DATA_HWC);
+ if (packets && packets->getSize () != 0)
+ {
+ hrtime_t start = exp->getStartTime ();
+ fprintf (out_file,
+ GTXT ("\nTotal HW Counter Profiling Packets: %d Experiment: %s\n"),
+ (int) packets->getSize (), exp->get_expt_name ());
+ for (long i = 0; i < packets->getSize (); i++)
+ {
+ const char * hwc_name;
+ hrtime_t expr_ts = (hrtime_t) packets->getLongValue (PROP_TSTAMP, i);
+ hrtime_t ts = expr_ts - start;
+ uint32_t tag = (uint32_t) packets->getIntValue (PROP_HWCTAG, i);
+ uint32_t thrid = (uint32_t) packets->getIntValue (PROP_THRID, i);
+ uint32_t cpuid = (uint32_t) packets->getIntValue (PROP_CPUID, i);
+
+ // This will work even with a different counter in every packet.
+ if (tag < 0 || tag >= MAX_HWCOUNT
+ || !exp->coll_params.hw_aux_name[tag])
+ // if the packet has an invalid tag, use <invalid> as its name
+ hwc_name = "<invalid>";
+ else
+ hwc_name = exp->coll_params.hw_aux_name[tag];
+ int64_t mval = packets->getLongValue (PROP_HWCINT, i);
+ const char *err = HWCVAL_HAS_ERR (mval) ? " $$" : "";
+
+ // get the stack IGNORE HIDE
+ Vector<Histable*> *stack = getStackPCs (view_mode, packets, i);
+ int stack_size = stack->size ();
+
+ // print the packet header with the count of stack frames
+ fprintf (out_file,
+ GTXT ("#%6ld: %lld, %3lld.%09lld (%4lld.%09lld) t = %d, cpu = %d, frames = %d\n count = %10lld (0x%016llx), tag = %d (%s)%s\n"),
+ (long) i, (long long) expr_ts,
+ (long long) (ts / NANOSEC), (long long) (ts % NANOSEC),
+ (long long) (expr_ts / NANOSEC), (long long) (expr_ts % NANOSEC),
+ (int) thrid, (int) cpuid, (int) stack_size,
+ (long long) (HWCVAL_CLR_ERR (mval)), (long long) mval,
+ (int) tag, hwc_name, err);
+
+ // dump extended HWC packets values
+ uint64_t va = (uint64_t) packets->getLongValue (PROP_VADDR, i);
+ uint64_t pa = (uint64_t) packets->getLongValue (PROP_PADDR, i);
+ fprintf (out_file, GTXT (" va = 0x%016llx, pa = 0x%016llx\n"),
+ (unsigned long long) va, (unsigned long long) pa);
+
+ // dump the callstack
+ for (int j = stack_size - 1; j >= 0; j--)
+ {
+ Histable *frame = stack->fetch (j);
+ fprintf (out_file, GTXT (" %s [0x%016llx]\n"), frame->get_name (), (long long) frame);
+ }
+ fprintf (out_file, "\n");
+ }
+ }
+ else
+ fprintf (out_file,
+ GTXT ("\nNo HWC Profiling Packets in Experiment: %s\n"),
+ exp->get_expt_name ());
+ }
+}
+
+// Dump the Heap events
+void
+DbeView::dump_heap (FILE *out_file)
+{
+ char *heapstrings[] = HEAPTYPE_STATE_USTRINGS;
+ for (int idx = 0; idx < dbeSession->nexps (); idx++)
+ {
+ Experiment *exp = dbeSession->get_exp (idx);
+ VMode view_mode = get_view_mode ();
+
+ // Process heap trace date
+ DataView *packets = get_filtered_events (idx, DATA_HEAP);
+ if (packets && packets->getSize () != 0)
+ {
+ hrtime_t start = exp->getStartTime ();
+ fprintf (out_file, GTXT ("\nTotal Heaptrace Packets: %d Experiment: %s\n"),
+ (int) packets->getSize (), exp->get_expt_name ());
+ for (long i = 0; i < packets->getSize (); i++)
+ {
+ hrtime_t expr_ts = (hrtime_t) packets->getLongValue (PROP_TSTAMP, i);
+ hrtime_t ts = expr_ts - start;
+
+ // get the properties from the packet
+ uint32_t thrid = (uint32_t) packets->getIntValue (PROP_THRID, i);
+ uint32_t cpuid = (uint32_t) packets->getIntValue (PROP_CPUID, i);
+ uint32_t heaptype = (uint32_t) packets->getIntValue (PROP_HTYPE, i);
+ uint64_t heapsize = (uint64_t) packets->getULongValue (PROP_HSIZE, i);
+ uint64_t heapvaddr = (uint64_t) packets->getULongValue (PROP_HVADDR, i);
+ uint64_t heapovaddr = (uint64_t) packets->getULongValue (PROP_HOVADDR, i);
+ if (heaptype == MUNMAP_TRACE)
+ {
+ heapsize = (uint64_t) packets->getULongValue (PROP_HOVADDR, i);
+ heapovaddr = 0;
+ }
+
+ // get the stack IGNORE HIDE
+ Vector<Histable*> *stack = getStackPCs (view_mode, packets, i);
+ int stack_size = stack->size ();
+
+ // print the packet header with the count of stack frames
+ fprintf (out_file,
+ GTXT ("#%6ld: %lld, %3lld.%09lld (%4lld.%09lld) t = %d, cpu = %d, frames = %d\n"),
+ i, expr_ts, ts / NANOSEC, ts % NANOSEC,
+ expr_ts / NANOSEC, expr_ts % NANOSEC,
+ thrid, cpuid, stack_size);
+ char *typestr = heapstrings[heaptype];
+ fprintf (out_file,
+ GTXT (" type = %d (%s), size = %llu (0x%llx), VADDR = 0x%016llx, OVADDR = 0x%016llx\n"),
+ (int) heaptype, typestr, (long long unsigned int) heapsize,
+ (long long unsigned int) heapsize,
+ (long long unsigned int) heapvaddr,
+ (long long unsigned int) heapovaddr);
+
+ // dump the callstack
+ for (int j = stack_size - 1; j >= 0; j--)
+ {
+ Histable *frame = stack->fetch (j);
+ fprintf (out_file, GTXT (" %s [0x%016llx]\n"), frame->get_name (), (long long) frame);
+ }
+ fprintf (out_file, "\n");
+ }
+ }
+ else
+ fprintf (out_file, GTXT ("\nNo Heaptrace Packets in Experiment: %s\n"),
+ exp->get_expt_name ());
+ }
+}
+
+// Dump the Java garbage collector events
+void
+DbeView::dump_gc_events (FILE *out_file)
+{
+ for (int idx = 0; idx < dbeSession->nexps (); idx++)
+ {
+ Experiment *exp = dbeSession->get_exp (idx);
+ if (!exp->has_java)
+ fprintf (out_file,
+ GTXT ("# No GC events in experiment %d, %s (PID %d, %s)\n"),
+ idx, exp->get_expt_name (), exp->getPID (), exp->utargname);
+ else
+ {
+ Vector<GCEvent*> *gce = exp->get_gcevents ();
+ GCEvent *this_event;
+ int index;
+ fprintf (out_file,
+ GTXT ("# %li events in experiment %d: %s (PID %d, %s)\n"),
+ gce->size (), idx,
+ exp->get_expt_name (), exp->getPID (), exp->utargname);
+ fprintf (out_file,
+ GTXT ("# exp:idx GC_start, GC_end, GC_duration\n"));
+ Vec_loop (GCEvent*, gce, index, this_event)
+ {
+ hrtime_t start = this_event->start - exp->getStartTime ();
+ hrtime_t end = this_event->end - exp->getStartTime ();
+ hrtime_t delta = this_event->end - this_event->start;
+ fprintf (out_file,
+ "%5d:%d, %3lld.%09lld, %3lld.%09lld, %3lld.%09lld\n",
+ idx, index,
+ (long long) (start / NANOSEC), (long long) (start % NANOSEC),
+ (long long) (end / NANOSEC), (long long) (end % NANOSEC),
+ (long long) (delta / NANOSEC), (long long) (delta % NANOSEC));
+ }
+ }
+ }
+}
+
+void
+DbeView::purge_events (int n)
+{
+ phaseIdx++;
+ int lst;
+ if (n == -1)
+ lst = filters->size ();
+ else
+ lst = n > filters->size () ? filters->size () : n + 1;
+ for (int i = n == -1 ? 0 : n; i < lst; i++)
+ {
+ Vector<DataView*> *expDataViewList = dataViews->fetch (i);
+ if (expDataViewList)
+ {
+ // clear out all the data_ids, but don't change the vector size
+ for (int data_id = 0; data_id < expDataViewList->size (); ++data_id)
+ {
+ delete expDataViewList->fetch (data_id);
+ expDataViewList->store (data_id, NULL);
+ }
+ }
+ }
+ filter_active = false;
+}
+
+
+// LIBRARY_VISIBILITY
+void
+DbeView::resetAndConstructShowHideStacks ()
+{
+ for (int n = 0, nexps = dbeSession->nexps (); n < nexps; n++)
+ {
+ Experiment *exp = dbeSession->get_exp (n);
+ if (exp != NULL)
+ resetAndConstructShowHideStack (exp);
+ }
+}
+
+// LIBRARY_VISIBILITY
+void
+DbeView::resetAndConstructShowHideStack (Experiment *exp)
+{
+ exp->resetShowHideStack ();
+ /* Vector<DataDescriptor*> *dDscrs = */ exp->getDataDescriptors ();
+
+ DataDescriptor *dd;
+ // Construct show hide stack only for objects which have call stacks
+ // list below similar to path tree. What about HEAP_SZ? (DBFIXME)
+ dd = exp->get_raw_events (DATA_CLOCK);
+ if (dd != NULL)
+ constructShowHideStack (dd, exp);
+ dd = exp->get_raw_events (DATA_SYNCH);
+ if (dd != NULL)
+ constructShowHideStack (dd, exp);
+ dd = exp->get_raw_events (DATA_IOTRACE);
+ if (dd != NULL)
+ constructShowHideStack (dd, exp);
+ dd = exp->get_raw_events (DATA_HWC);
+ if (dd != NULL)
+ constructShowHideStack (dd, exp);
+ dd = exp->get_raw_events (DATA_HEAP);
+ if (dd != NULL)
+ constructShowHideStack (dd, exp);
+ dd = exp->get_raw_events (DATA_RACE);
+ if (dd != NULL)
+ constructShowHideStack (dd, exp);
+ dd = exp->get_raw_events (DATA_DLCK);
+ if (dd != NULL)
+ constructShowHideStack (dd, exp);
+}
+
+// LIBRARY_VISIBILITY
+void
+DbeView::constructShowHideStack (DataDescriptor *dDscr, Experiment *exp)
+{
+ if (dDscr == NULL)
+ return;
+ int stack_prop = PROP_NONE;
+ VMode view_mode = get_view_mode ();
+ if (view_mode == VMODE_MACHINE)
+ stack_prop = PROP_MSTACK;
+ else if (view_mode == VMODE_EXPERT)
+ stack_prop = PROP_XSTACK;
+ else if (view_mode == VMODE_USER)
+ stack_prop = PROP_USTACK;
+
+ for (long j = 0, sz = dDscr->getSize (); j < sz; j++)
+ {
+ void *stackId = dDscr->getObjValue (stack_prop, j);
+ Vector<Histable*> *stack = (Vector<Histable*>*)CallStack::getStackPCs (stackId);
+ int stack_size = stack->size ();
+ bool hide_on = false;
+ LoadObject *hide_lo = NULL;
+ Histable *last_addr = NULL;
+ Histable *api_addr = NULL;
+ DbeInstr *h_instr;
+
+ Vector<Histable*> *hidepcs = new Vector<Histable*>;
+ for (int i = stack_size - 1; i >= 0; i--)
+ {
+ bool leaf = (i == 0);
+ Histable *cur_addr = stack->fetch (i);
+ Function *func = (Function*) cur_addr->convertto (Histable::FUNCTION);
+ if (func != NULL)
+ {
+ Module *mod = func->module;
+ LoadObject *lo = mod->loadobject;
+ int segx = lo->seg_idx;
+ if ((get_lo_expand (segx) == LIBEX_API) && (i != (stack_size - 1)))
+ {
+ leaf = true;
+ api_addr = cur_addr;
+ }
+ else if (get_lo_expand (segx) == LIBEX_HIDE)
+ {
+ if (hide_on)
+ {
+ if (lo != hide_lo)
+ {
+ // Changed hidden loadobject
+ if (last_addr != NULL)
+ {
+ h_instr = hide_lo->get_hide_instr ((DbeInstr*) last_addr);
+ hidepcs->append (h_instr);
+ last_addr = cur_addr;
+ }
+ hide_lo = lo;
+ }
+ }
+ else
+ {
+ // Start hide
+ hide_on = true;
+ last_addr = cur_addr;
+ hide_lo = lo;
+ }
+ if (!leaf)
+ continue;
+ }
+ else
+ {
+ hide_on = false;
+ if (last_addr != NULL)
+ {
+ h_instr = hide_lo->get_hide_instr ((DbeInstr*) last_addr);
+ hidepcs->append (h_instr);
+ last_addr = NULL;
+ }
+ }
+ }
+ if (last_addr != NULL && leaf) cur_addr = last_addr;
+ if (hide_on)
+ {
+ h_instr = hide_lo->get_hide_instr ((DbeInstr*) cur_addr);
+ hidepcs->append (h_instr);
+ if (api_addr != NULL)
+ hidepcs->append (api_addr);
+ }
+ else
+ hidepcs->append (cur_addr);
+ if (leaf)
+ break;
+ }
+ for (int i = 0, k = hidepcs->size () - 1; i < k; ++i, --k)
+ hidepcs->swap (i, k);
+
+ CallStack *cstkSH = exp->callTreeShowHide ();
+ CallStackNode *hstack = (CallStackNode *) cstkSH->add_stack (hidepcs);
+ dDscr->setObjValue (PROP_HSTACK, j, hstack);
+ CallStack::setHideStack (stackId, hstack);
+ delete hidepcs;
+ delete stack;
+ }
+}
+
+DataView *
+DbeView::get_filtered_events (int idx, int data_id)
+{
+ if (idx < 0 || idx >= dataViews->size ())
+ return NULL;
+ Vector<DataView*> *expDataViewList = dataViews->fetch (idx);
+ if (!expDataViewList)
+ return NULL; // Weird
+
+ DataView *dview = expDataViewList->fetch (data_id);
+ Experiment *exp = dbeSession->get_exp (idx);
+ if (dview)
+ {
+ // if show-hide is on force a reconstruction of hide stacks
+ // LIBRARY_VISIBILITY
+ if (!showAll && (showHideChanged || newViewMode))
+ {
+ DataDescriptor *dDscr = exp->get_raw_events (data_id);
+ constructShowHideStack (dDscr, exp);
+ }
+ return dview;
+ }
+
+ int orig_data_id = data_id;
+ data_id = exp->base_data_id (data_id);
+ if (orig_data_id != data_id)
+ // orig_data_id is a derived DataView. Get the master DataView:
+ dview = expDataViewList->fetch (data_id);
+ if (dview == NULL)
+ {
+ Expression *saved = cur_filter_expr;
+ if (!adjust_filter (exp))
+ return NULL;
+
+ DataDescriptor *dDscr = exp->get_raw_events (data_id);
+ if (!showAll && (showHideChanged || newViewMode))
+ constructShowHideStack (dDscr, exp);
+
+ Emsg *m = exp->fetch_warnings ();
+ if (m != NULL)
+ this->warning_msg = m->get_msg ();
+
+ if (dDscr != NULL)
+ {
+ FilterExp *filter = get_FilterExp (exp);
+ dview = dDscr->createView ();
+ dview->setFilter (filter);
+ if (dview->getSize () < dDscr->getSize ())
+ filter_active = true;
+ }
+ expDataViewList->store (data_id, dview);
+
+ if (saved)
+ {
+ delete cur_filter_expr;
+ cur_filter_expr = saved;
+ }
+ }
+ if (orig_data_id != data_id)
+ {
+ // create the derived DataView:
+ dview = exp->create_derived_data_view (orig_data_id, dview);
+ expDataViewList->store (orig_data_id, dview);
+ }
+ return dview;
+}
+
+DataView *
+DbeView::get_filtered_events (int idx, int data_id,
+ const int sortprops[], int sortprop_count)
+{
+ DataView *packets = get_filtered_events (idx, data_id);
+ if (packets)
+ packets->sort (sortprops, sortprop_count);
+ return packets;
+}
+
+bool
+DbeView::adjust_filter (Experiment *exp)
+{
+ if (cur_filter_expr)
+ {
+ Expression::Context ctx (this, exp);
+ resetFilterHideMode ();
+ Expression *fltr = cur_filter_expr->pEval (&ctx);
+ if (fltr->complete ())
+ { // Filter is a constant
+ if (fltr->eval (NULL) == 0)
+ return false;
+ delete fltr;
+ fltr = NULL;
+ }
+ cur_filter_expr = fltr;
+ }
+ return true;
+}
+
+// Moved from Cacheable.cc:
+char *
+DbeView::status_str (DbeView_status status)
+{
+ switch (status)
+ {
+ case DBEVIEW_SUCCESS:
+ return NULL;
+ case DBEVIEW_NO_DATA:
+ return dbe_strdup (GTXT ("Data not available for this filter selection"));
+ case DBEVIEW_IO_ERROR:
+ return dbe_strdup (GTXT ("Unable to open file"));
+ case DBEVIEW_BAD_DATA:
+ return dbe_strdup (GTXT ("Data corrupted"));
+ case DBEVIEW_BAD_SYMBOL_DATA:
+ return dbe_strdup (GTXT ("Functions/Modules information corrupted"));
+ case DBEVIEW_NO_SEL_OBJ:
+ return dbe_strdup (GTXT ("No selected object, bring up Functions Tab"));
+ }
+ return NULL;
+}
+
+Histable *
+DbeView::set_sel_obj (Histable *obj)
+{
+ if (obj)
+ {
+ switch (obj->get_type ())
+ {
+ case Histable::INSTR:
+ lastSelInstr = (DbeInstr *) obj;
+ lastSelFunc = lastSelInstr->func;
+ this->sel_binctx = lastSelFunc;
+ break;
+ case Histable::FUNCTION:
+ if (lastSelInstr && lastSelInstr->func != obj)
+ lastSelInstr = NULL;
+ lastSelFunc = (Function *) obj;
+ break;
+ case Histable::LINE:
+ {
+ DbeLine *dbeLine = (DbeLine *) obj;
+ if (dbeLine->func)
+ {
+ // remember previous DbeInstr and DbeFunc
+ lastSelFunc = dbeLine->func;
+ if (lastSelInstr && lastSelInstr->func != lastSelFunc)
+ lastSelInstr = NULL;
+ this->sel_binctx = lastSelFunc;
+ }
+ else
+ this->sel_binctx = dbeLine->convertto (Histable::FUNCTION);
+ break;
+ }
+ case Histable::MODULE:
+ case Histable::LOADOBJECT:
+ case Histable::EADDR:
+ case Histable::MEMOBJ:
+ case Histable::INDEXOBJ:
+ case Histable::PAGE:
+ case Histable::DOBJECT:
+ case Histable::SOURCEFILE:
+ case Histable::IOACTFILE:
+ case Histable::IOACTVFD:
+ case Histable::IOCALLSTACK:
+ case Histable::HEAPCALLSTACK:
+ case Histable::EXPERIMENT:
+ case Histable::OTHER:
+ break;
+ }
+ }
+ sel_obj = obj;
+ Dprintf (DEBUG_DBE, NTXT ("### set_sel_obj: DbeView.cc:%d obj %s\n"),
+ __LINE__, obj ? obj->dump () : "NULL");
+ Dprintf (DEBUG_DBE, NTXT ("### set_sel_obj: DbeView.cc:%d sel_obj %s\n"),
+ __LINE__, sel_obj ? sel_obj->dump () : "NULL");
+ Dprintf (DEBUG_DBE, NTXT ("### set_sel_obj: DbeView.cc:%d lastSelFunc %s\n"),
+ __LINE__, lastSelFunc ? lastSelFunc->dump () : "NULL");
+ Dprintf (DEBUG_DBE, NTXT ("### set_sel_obj: DbeView.cc:%d lastSelInstr %s\n"),
+ __LINE__, lastSelInstr ? lastSelInstr->dump () : "NULL");
+ return sel_obj;
+}
+
+DbeInstr *
+DbeView::convert_line_to_instr (DbeLine *dbeLine)
+{
+ Dprintf (DEBUG_DBE, "### convert_line_to_instr DbeView::%d dbeLine=%s\n", __LINE__, dbeLine->dump ());
+ Function *func = convert_line_to_func (dbeLine);
+ if (func)
+ {
+ Dprintf (DEBUG_DBE, "### convert_line_to_instr DbeView::%d func=%s\n", __LINE__, func->dump ());
+ DbeInstr *dbeInstr = func->mapLineToPc (dbeLine);
+ Dprintf (DEBUG_DBE && dbeInstr, "### convert_line_to_instr DbeView::%d dbeInstr=%s\n", __LINE__, dbeInstr->dump ());
+ return dbeInstr;
+ }
+ Dprintf (DEBUG_DBE && lastSelInstr, "### convert_line_to_instr DbeView::%d lastSelInstr=%s\n", __LINE__, lastSelInstr->dump ());
+ return lastSelInstr;
+}
+
+DbeInstr *
+DbeView::convert_func_to_instr (Function *func)
+{
+ return (lastSelInstr && lastSelInstr->func == func) ?
+ lastSelInstr : (DbeInstr *) func->convertto (Histable::INSTR);
+}
+
+Function *
+DbeView::convert_line_to_func (DbeLine *dbeLine)
+{
+ Function *func = dbeLine->func;
+ if (func)
+ return func;
+ if (lastSelFunc != NULL)
+ // Can be mapped to the same function ?
+ for (DbeLine *dl = dbeLine->dbeline_base; dl; dl = dl->dbeline_func_next)
+ if (dl->func == lastSelFunc)
+ return lastSelFunc;
+
+ PathTree *pathTree = NULL;
+ Function *firstFunc = NULL;
+ for (DbeLine *dl = dbeLine->dbeline_base; dl; dl = dl->dbeline_func_next)
+ {
+ // Find a first function with non-zero metrics
+ if (dl->func)
+ {
+ if (pathTree == NULL)
+ pathTree = get_path_tree ();
+ if (pathTree->get_func_nodeidx (dl->func))
+ return dl->func;
+ if (firstFunc == NULL)
+ firstFunc = dl->func;
+ }
+ }
+ // Take a first function
+ return firstFunc;
+}
+
+Histable *
+DbeView::get_sel_obj (Histable::Type type)
+{
+ Histable *lastSelObj = sel_obj;
+ Dprintf (DEBUG_DBE, NTXT ("### get_sel_obj: DbeView.cc:%d type=%d sel_obj %s\n"),
+ __LINE__, type, lastSelObj ? lastSelObj->dump () : "NULL");
+ if (lastSelObj == NULL)
+ return NULL;
+ switch (type)
+ {
+ case Histable::INSTR:
+ if (!showAll)
+ {
+ // DBFIXME LIBRARY VISIBILITY
+ // hack to get to the hide mode object for PCs when filtering
+ // with a PC in timeline
+ if (lastSelObj->get_type () == Histable::INSTR)
+ {
+ Function *func = (Function*) (lastSelObj->convertto (Histable::FUNCTION));
+ LoadObject *lo = func->module->loadobject;
+ if (get_lo_expand (lo->seg_idx) == LIBEX_HIDE)
+ return lo->get_hide_function ();
+ }
+ }
+ if (lastSelObj->get_type () == Histable::LINE)
+ return convert_line_to_instr ((DbeLine*) lastSelObj);
+ else if (lastSelObj->get_type () == Histable::FUNCTION)
+ return convert_func_to_instr ((Function *) lastSelObj);
+ return lastSelObj->convertto (type);
+ case Histable::FUNCTION:
+ if (lastSelObj->get_type () == Histable::LINE)
+ {
+ Function *func = convert_line_to_func ((DbeLine*) lastSelObj);
+ if (func)
+ return func;
+ return NULL;
+ }
+ return lastSelObj->convertto (type);
+ case Histable::LINE:
+ default:
+ return lastSelObj->convertto (type);
+ }
+}
diff --git a/gprofng/src/DbeView.h b/gprofng/src/DbeView.h
new file mode 100644
index 00000000000..bb6bb901e79
--- /dev/null
+++ b/gprofng/src/DbeView.h
@@ -0,0 +1,842 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+/*
+ * The DbeView class represents a window into the data managed by a DbeSession
+ *
+ * A DbeView has a Settings class that determines the user preferences,
+ * instantiated initially as a copy of the one in the DbeSession
+ * that created it, or in the DbeView being cloned by the DbeSession
+ *
+ * A DbeView has a vector of Experiment pointers, matching the one in the
+ * DbeSession, and a vector of enable bits governing which of the
+ * Experiments are currently being used to process the data.
+ *
+ * A DbeView has three vectors of Metrics, one for functions, etc.,
+ * a second for callers/callees, and a third for dataspace/memoryspace.
+ *
+ * A DbeView has a vector of FilterSet's (q.v.), one for each Experiment,
+ * used to determine how the data is filtered.
+ *
+ * Each DbeView has its own instantiation of the objects representing
+ * the processed, filtered data. Currently these are a PathTree
+ * for computing text-based metrics, a DataSpace for computing
+ * data-based metrics, and a MemorySpace used for computing
+ * memory-object-based metrics.
+ */
+
+#ifndef _DBEVIEW_H
+#define _DBEVIEW_H
+
+#include <stdio.h>
+#include "dbe_structs.h"
+#include "vec.h"
+#include "enums.h"
+#include "util.h"
+#include "DerivedMetrics.h"
+#include "Histable.h"
+#include "Hist_data.h"
+#include "Settings.h"
+#include "Metric.h"
+#include "Table.h"
+#include "PathTree.h"
+
+class Application;
+class DataView;
+class Experiment;
+class Expression;
+class FilterSet;
+class FilterNumeric;
+class FilterExp;
+class Function;
+class Histable;
+class MetricList;
+class Module;
+class Ovw_data;
+class PathTree;
+class DataSpace;
+class MemorySpace;
+class Stats_data;
+class LoadObject;
+class IOActivity;
+class HeapActivity;
+
+class DbeView
+{
+public:
+ DbeView (Application *app, Settings *_settings, int _vindex);
+ DbeView (DbeView *dbev, int _vindex);
+ ~DbeView ();
+
+ // Access functions for settings in the view
+ Settings *
+ get_settings ()
+ {
+ return settings;
+ };
+
+ // Get the list of tabs for this view
+ Vector<DispTab*> *
+ get_TabList ()
+ {
+ return settings->get_TabList ();
+ };
+
+ // Get the list of memory tabs for this view
+ Vector<bool> *
+ get_MemTabState ()
+ {
+ return settings->get_MemTabState ();
+ };
+
+ // Set the list of memory tabs for this view
+ void
+ set_MemTabState (Vector<bool>*sel)
+ {
+ settings->set_MemTabState (sel);
+ };
+
+ // Get the list of index tabs for this view
+ Vector<bool> *
+ get_IndxTabState ()
+ {
+ return settings->get_IndxTabState ();
+ };
+
+ // Set the list of memory tabs for this view
+ void
+ set_IndxTabState (Vector<bool>*sel)
+ {
+ settings->set_IndxTabState (sel);
+ };
+
+ // controlling the name format
+ Cmd_status
+ set_name_format (char *str)
+ {
+ return settings->set_name_format (str);
+ };
+
+ void
+ set_name_format (int fname_format, bool soname)
+ {
+ settings->set_name_format (fname_format, soname);
+ };
+
+ Histable::NameFormat
+ get_name_format ()
+ {
+ return settings->name_format;
+ }
+
+ // processing modes: view_mode
+ Cmd_status set_view_mode (char *str, bool fromRC); // from a string
+ void set_view_mode (VMode mode); // from the analyzer
+
+ VMode
+ get_view_mode ()
+ {
+ return settings->get_view_mode ();
+ };
+
+ // handling of descendant processes
+ Cmd_status set_en_desc (char *str, bool rc); // from a string
+
+ bool
+ check_en_desc (const char * lineage_name = NULL, const char *targname = NULL)
+ {
+ return settings->check_en_desc (lineage_name, targname);
+ };
+
+ // Controlling the print line-limit
+ char *
+ set_limit (char *str, bool rc) // from a string
+ {
+ settings->set_limit (str, rc);
+ return NULL;
+ };
+
+ char *
+ set_limit (int _limit)
+ {
+ settings->limit = _limit;
+ return NULL;
+ };
+
+ int
+ get_limit ()
+ {
+ return settings->limit;
+ };
+
+ // Controlling the print format mode
+ char *
+ set_printmode (char *str)
+ {
+ return settings->set_printmode (str);
+ };
+
+ enum PrintMode
+ get_printmode ()
+ {
+ return settings->print_mode;
+ };
+
+ char
+ get_printdelimiter ()
+ {
+ return settings->print_delim;
+ };
+
+ char *
+ get_printmode_str ()
+ {
+ return dbe_strdup (settings->str_printmode);
+ };
+
+ // processing compiler commentary visibility bits, and other source annotation
+ // controls
+ Cmd_status
+ proc_compcom (const char *cmd, bool isSrc, bool rc)
+ {
+ return settings->proc_compcom (cmd, isSrc, rc);
+ };
+
+ char *
+ get_str_scompcom ()
+ {
+ return settings->str_scompcom;
+ };
+
+ char *
+ get_str_dcompcom ()
+ {
+ return settings->str_dcompcom;
+ };
+
+ void
+ set_src_compcom (int v)
+ {
+ settings->src_compcom = v;
+ };
+
+ int
+ get_src_compcom ()
+ {
+ return settings->src_compcom;
+ };
+
+ void
+ set_dis_compcom (int v)
+ {
+ settings->dis_compcom = v;
+ };
+
+ int
+ get_dis_compcom ()
+ {
+ return settings->dis_compcom;
+ };
+
+ void
+ set_cmpline_visible (bool vis)
+ {
+ settings->set_cmpline_visible (vis);
+ }
+
+ int
+ get_cmpline_visible ()
+ {
+ return settings->cmpline_visible;
+ }
+
+ void
+ set_funcline_visible (bool vis)
+ {
+ settings->set_funcline_visible (vis);
+ }
+
+ int
+ get_funcline_visible ()
+ {
+ return settings->funcline_visible;
+ }
+
+ // controls for disassembly presentation
+ void
+ set_src_visible (int vis)
+ {
+ settings->set_src_visible (vis);
+ }
+
+ int
+ get_src_visible ()
+ {
+ return settings->src_visible;
+ }
+
+ void
+ set_srcmetric_visible (bool vis)
+ {
+ settings->set_srcmetric_visible (vis);
+ }
+
+ bool
+ get_srcmetric_visible ()
+ {
+ return settings->srcmetric_visible;
+ }
+
+ void
+ set_hex_visible (bool vis)
+ {
+ settings->set_hex_visible (vis);
+ }
+
+ bool
+ get_hex_visible ()
+ {
+ return settings->hex_visible;
+ }
+
+ // processing and accessing the threshold settings
+ Cmd_status
+ proc_thresh (char *cmd, bool isSrc, bool rc)
+ {
+ return settings->proc_thresh (cmd, isSrc, rc);
+ };
+
+ void
+ set_thresh_src (int v)
+ {
+ settings->threshold_src = v;
+ };
+
+ int
+ get_thresh_src ()
+ {
+ return settings->threshold_src;
+ };
+
+ void
+ set_thresh_dis (int v)
+ {
+ settings->threshold_dis = v;
+ };
+
+ int
+ get_thresh_dis ()
+ {
+ return settings->threshold_dis;
+ };
+
+ // controls for the Timeline mode, stack presentation
+ Cmd_status
+ proc_tlmode (char *cmd, bool rc)
+ {
+ return settings->proc_tlmode (cmd, rc);
+ };
+
+ void
+ set_tlmode (int _tlmode)
+ {
+ settings->tlmode = _tlmode;
+ };
+
+ int
+ get_tlmode ()
+ {
+ return settings->tlmode;
+ };
+
+ void
+ set_stack_align (int _stack_align)
+ {
+ settings->stack_align = _stack_align;
+ };
+
+ int
+ get_stack_align ()
+ {
+ return settings->stack_align;
+ };
+
+ void
+ set_stack_depth (int _stack_depth)
+ {
+ settings->stack_depth = _stack_depth;
+ };
+
+ int
+ get_stack_depth ()
+ {
+ return settings->stack_depth;
+ };
+
+ // Controls for which data is shown in Timeline
+ Cmd_status
+ proc_tldata (char *cmd, bool rc)
+ {
+ return settings->proc_tldata (cmd, rc);
+ };
+
+ void
+ set_tldata (const char* tldata_cmd)
+ {
+ settings->set_tldata (tldata_cmd);
+ };
+
+ char*
+ get_tldata ()
+ {
+ return settings->get_tldata ();
+ };
+
+ // settings controlling the expand/collapse of functions within each LoadObject
+ enum LibExpand get_lo_expand (int idx);
+
+ // set_lo_expand -- returns true if any change
+ bool set_lo_expand (int idx, enum LibExpand how);
+
+ // set_libexpand -- returns true if any change
+ bool set_libexpand (char *liblist, enum LibExpand flag);
+ void update_lo_expands ();
+ bool set_libdefaults ();
+ void reset ();
+ void reset_data (bool all);
+
+ char *
+ get_error_msg ()
+ {
+ return error_msg;
+ };
+
+ void
+ clear_error_msg ()
+ {
+ error_msg = NULL;
+ };
+
+ char *
+ get_warning_msg ()
+ {
+ return warning_msg;
+ };
+
+ void
+ clear_warning_msg ()
+ {
+ warning_msg = NULL;
+ };
+ char *get_processor_msg (int type);
+
+ // methods controlling the metric list
+ BaseMetric *register_metric_expr (BaseMetric::Type type, char *aux, char *expr_spec);
+ Vector<BaseMetric*> *get_all_reg_metrics ();
+ void reset_metric_list (MetricList *mlist, int cmp_mode);
+
+ // Get the various metric master lists
+ MetricList *get_metric_ref (MetricType mtype);
+
+ // Get the various current metric lists
+ MetricList *get_metric_list (int dsptype, int subtype);
+ MetricList *get_metric_list (MetricType mtype);
+ MetricList *get_metric_list (MetricType mtype, bool compare, int gr_num);
+ MetricList *get_compare_mlist (MetricList *met_list, int grInd);
+
+ // Set the metric list, from a string specification
+ char *setMetrics (char *metricspec, bool fromRcFile);
+
+ // Set the sort metric, from its name
+ char *setSort (char *sortname, MetricType mtype, bool fromRcFile);
+
+ // Set the sort metric, from its visible index (Analyzer)
+ void setSort (int visindex, MetricType mtype, bool reverse);
+
+ // Resort any cached data, after changing sort
+ void resortData (MetricType mtype);
+
+ // Get the sort metric
+ char *getSort (MetricType mtype);
+ char *getSortCmd (MetricType mtype);
+
+ // reset the metrics
+ void reset_metrics ();
+ bool comparingExperiments ();
+
+ int
+ get_compare_mode ()
+ {
+ return settings->compare_mode;
+ };
+
+ void
+ reset_compare_mode (int mode)
+ {
+ settings->compare_mode = mode;
+ };
+
+ void set_compare_mode (int mode); // modifies the global MET_* arrays
+ void add_compare_metrics (MetricList *mlist);
+ void remove_compare_metrics (MetricList *mlist);
+ Histable *get_compare_obj (Histable *obj);
+
+ // method for printing the instruction-frequency report
+ void ifreq (FILE *);
+
+ // methods controlling the experiment list
+ void add_experiment (int index, bool enabled);
+ void add_subexperiment (int index, bool enabled);
+ void add_experiment_epilogue ();
+ void drop_experiment (int index);
+ bool get_exp_enable (int n);
+ void set_exp_enable (int n, bool e);
+
+ // method for new-style filtering
+ char *set_filter (const char *filter_spec);
+ char *get_filter (void);
+ char *get_advanced_filter ();
+ void backtrack_filter ();
+ void update_advanced_filter ();
+ FilterExp *get_FilterExp (Experiment *exp);
+
+ Expression *
+ get_filter_expr ()
+ {
+ return cur_filter_expr;
+ };
+
+ // methods controlling old-style filtering
+ Vector<FilterNumeric*> *get_all_filters (int nexp);
+ FilterNumeric *get_FilterNumeric (int nexp, int idx);
+ bool set_pattern (int n, Vector<char *> *pattern_str, bool *error);
+ bool set_pattern (int m, char *pattern);
+
+ // Data processing objects
+ PathTree *
+ get_path_tree ()
+ {
+ return ptree;
+ };
+
+ DataSpace *
+ get_data_space ()
+ {
+ return dspace;
+ };
+
+ IOActivity *
+ get_io_space ()
+ {
+ return iospace;
+ };
+
+ HeapActivity *
+ get_heap_space ()
+ {
+ return heapspace;
+ };
+ Hist_data *get_data (MetricList *mlist, Histable *selObj, int type, int subtype);
+ int get_sel_ind (Histable *selObj, int type, int subtype);
+
+ // Return histogram data for the specified arguments.
+ Hist_data *get_hist_data (MetricList *mlist, Histable::Type type,
+ int subtype, // used for memory objects only
+ Hist_data::Mode mode,
+ Vector<Histable*> *objs = NULL,
+ Histable *context = NULL,
+ Vector<Histable*> *sel_objs = NULL,
+ PathTree::PtreeComputeOption flag = PathTree::COMPUTEOPT_NONE
+ );
+ Hist_data *get_hist_data (MetricList *mlist, Histable::Type type,
+ int subtype, // used for memory objects only
+ Hist_data::Mode mode, Histable *obj,
+ Histable *context = NULL,
+ Vector<Histable*> *sel_objs = NULL,
+ PathTree::PtreeComputeOption flag = PathTree::COMPUTEOPT_NONE
+ );
+ CStack_data *get_cstack_data (MetricList *);
+ Stats_data *get_stats_data (int index);
+ Ovw_data *get_ovw_data (int index);
+
+ char *names_src[3]; // names for anno-src
+ char *names_dis[3]; // names for anno-dis
+
+ // Get filtered packets. Ordering is NOT guaranteed to be
+ // stable between calls; DataView indexes are not persistent -
+ // use underlying DataDescriptor ids if you don't consume data right away.
+ // Parameters: idx==exp_id, data_id==kind==ProfData_type
+ DataView *get_filtered_events (int idx, int data_id);
+ DataView *get_filtered_events (int idx, int data_id,
+ const int sortprops[], int sortprop_count);
+
+ // SORT is not used for PathTree.
+ // PathTree reads data once and discards. It doesn't
+ // depend on the indices so sort can be performed w/o recomputing pathtree.
+ // Timeline is the primary consumer of sort(), however Races also need to sort.
+ //
+ // YM: I can't remember the context for the following note, but
+ // In case I need it when we refactor more TBR stuff, here it is:
+ // base metrics like USER_CPU are known,(but we should/should not?)
+ // explicitly set DATA_CLOCK as a property/attribute?
+ bool adjust_filter (Experiment *exp);
+
+ // Generated report data
+ Hist_data *func_data; // function list data
+ Hist_data *line_data; // hot line list data
+ Hist_data *pc_data; // hot PC list data
+ Hist_data *src_data; // annotated source data
+ Hist_data *dis_data; // annotated disasm data
+ Hist_data *fitem_data; // func item for callers/callees
+ Hist_data *callers; // callers data
+ Hist_data *callees; // callees data
+ Hist_data *dobj_data; // data object list data
+ Hist_data *dlay_data; // data layout data
+ Hist_data *iofile_data; // io data aggregated by file name
+ Hist_data *iovfd_data; // io data aggregated by virtual fd
+ Hist_data *iocs_data; // io data aggregated by call stack
+ Hist_data *heapcs_data; // heap data aggregated by call stack
+ Vector<Hist_data*> *indx_data; // index object data
+ Vector<int> *lobjectsNoJava; // List of indices into LoadObjects excluding java classes
+
+ // memory object data -- create MemorySpace, if needed
+ MemorySpace *getMemorySpace (int subtype);
+ char *get_mobj_name (int subtype);
+ void addIndexSpace (int type);
+ Hist_data *get_indxobj_data (int subtype);
+ void set_indxobj_sel (int subtype, int sel_ind);
+ Histable *get_indxobj_sel (int subtype);
+ void set_obj_sel_io (int type, long sel_ind);
+ Histable *set_sel_obj (Histable *obj);
+ Histable *get_sel_obj (Histable::Type type);
+ Histable *get_sel_obj_io (uint64_t id, Histable::Type type);
+ Histable *get_sel_obj_heap (uint64_t id);
+ Histable *sel_obj; // current selected obj
+ Histable *sel_dobj; // current selected data obj
+ Histable *sel_binctx; // current binary context
+ Vector<Histable*> *sel_idxobj; // selected index objects
+ char *error_msg; // error message
+ char *warning_msg; // warning message
+ Vector<int> *marks; // flagged as important for anno src/dis
+ Vector<int_pair_t> *marks2dsrc;
+ Vector<int_pair_t> *marks2dsrc_inc;
+ Vector<int_pair_t> *marks2ddis;
+ Vector<int_pair_t> *marks2ddis_inc;
+
+ void dump_nodes (FILE *); // dump out the pathtree nodes
+ void dump_profile (FILE *); // dump out the clock profiling events
+ void dump_sync (FILE *); // dump out the synctrace events
+ void dump_iotrace (FILE *); // dump out the IO trace events
+ void dump_hwc (FILE *); // dump out the HWC Profiling events
+ void dump_heap (FILE *); // dump out the heap trace events
+ void dump_gc_events (FILE *); // dump out the Java garbage collector events
+
+ int vindex; // index of this view -- set by Analyzer
+ bool func_scope;
+
+ bool
+ get_func_scope ()
+ {
+ return func_scope;
+ };
+
+ void
+ set_func_scope (bool scope_only)
+ {
+ func_scope = scope_only;
+ };
+
+ // value set T if filtering is active, i.e., some packets were dropped
+ bool filter_active;
+
+ bool
+ get_filter_active ()
+ {
+ return filter_active;
+ };
+
+ DerivedMetrics *
+ get_derived_metrics ()
+ {
+ return derived_metrics;
+ }
+
+ // Internal time (time means change)
+ int
+ getPhaseIdx ()
+ {
+ return phaseIdx;
+ }
+
+ enum DbeView_status
+ {
+ DBEVIEW_SUCCESS = 0,
+ DBEVIEW_NO_DATA,
+ DBEVIEW_IO_ERROR,
+ DBEVIEW_BAD_DATA,
+ DBEVIEW_BAD_SYMBOL_DATA,
+ DBEVIEW_NO_SEL_OBJ
+ };
+ static char *status_str (DbeView_status status);
+
+ bool
+ isOmpDisMode ()
+ {
+ return ompDisMode;
+ }
+
+ void
+ setOmpDisMode ()
+ {
+ ompDisMode = true;
+ }
+
+ void
+ resetOmpDisMode ()
+ {
+ ompDisMode = false;
+ }
+
+ bool
+ isShowHideChanged ()
+ {
+ return showHideChanged;
+ }
+
+ void
+ setShowHideChanged ()
+ {
+ showHideChanged = true;
+ }
+
+ void
+ resetShowHideChanged ()
+ {
+ showHideChanged = false;
+ }
+
+ bool
+ isNewViewMode ()
+ {
+ return newViewMode;
+ }
+
+ void
+ setNewViewMode ()
+ {
+ newViewMode = true;
+ }
+
+ void
+ resetNewViewMode ()
+ {
+ newViewMode = false;
+ }
+
+ bool
+ isFilterHideMode ()
+ {
+ return filterHideMode;
+ }
+
+ void
+ setFilterHideMode ()
+ {
+ filterHideMode = true;
+ }
+
+ void
+ resetFilterHideMode ()
+ {
+ filterHideMode = false;
+ }
+
+ bool
+ isShowAll ()
+ {
+ return showAll;
+ }
+
+ void
+ setShowAll ()
+ {
+ showAll = true;
+ }
+
+ void
+ resetShowAll ()
+ {
+ showAll = false;
+ }
+ void resetAndConstructShowHideStacks ();
+
+private:
+ void init ();
+ Metric *get_compare_metric (Metric *mtr, int groupNum);
+
+ // methods controlling old-style filtering
+ FilterSet *get_filter_set (int n);
+
+ void purge_events (int n = -1);
+
+ char *cur_filter_str;
+ char *prev_filter_str;
+ Expression *cur_filter_expr;
+ bool noParFilter;
+
+ // MemorySpace's -- added when a request is made; for now, never dropped
+ Vector<MemorySpace*> *memspaces;
+ MemorySpace *addMemorySpace (int mtype);
+
+ Vector<FilterSet*> *filters;
+ Vector<enum LibExpand> *lo_expands;
+ Vector<BaseMetric*> *reg_metrics; // vector of registered metrics
+ Vector<MetricList*> *metrics_lists; // metrics list of MET_NORMAL, MET_CALL...
+ // note: includes compare metrics
+ Vector<MetricList*> *metrics_ref_lists;
+ DerivedMetrics *derived_metrics; // vector of derived metrics
+
+ DataSpace *dspace;
+ PathTree *ptree;
+ Vector<PathTree *> *indxspaces;
+ IOActivity *iospace;
+ HeapActivity *heapspace;
+ int phaseIdx;
+ bool ompDisMode;
+ bool filterHideMode;
+ bool showAll;
+ bool showHideChanged;
+ bool newViewMode;
+
+ // Filtered events
+ Vector<Vector<DataView*>*> *dataViews; //outer idx is exp_id, inner is data_id
+ Settings *settings;
+
+ Application *app;
+ Function *convert_line_to_func (DbeLine *dbeLine);
+ DbeInstr *convert_line_to_instr (DbeLine *dbeLine);
+ DbeInstr *convert_func_to_instr (Function *func);
+ DbeInstr *lastSelInstr;
+ Function *lastSelFunc;
+ void constructShowHideStack (DataDescriptor* dDscr, Experiment *exp);
+ void resetAndConstructShowHideStack (Experiment *exp);
+};
+
+#endif /* _DBEVIEW_H */
diff --git a/gprofng/src/DefaultHandler.h b/gprofng/src/DefaultHandler.h
new file mode 100644
index 00000000000..4c3d82c802a
--- /dev/null
+++ b/gprofng/src/DefaultHandler.h
@@ -0,0 +1,114 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+/*
+ * org/xml/sax/helpers/DefaultHandler.java
+ * Based on JavaTM 2 Platform Standard Ed. 5.0
+ */
+
+#ifndef _DefaultHandler_h
+#define _DefaultHandler_h
+
+/*
+ * org/xml/sax/Attributes.java
+ */
+class Attributes
+{
+public:
+ virtual ~Attributes () { };
+
+ virtual int getLength () = 0;
+ virtual const char *getQName (int index) = 0;
+ virtual const char *getValue (int index) = 0;
+ virtual int getIndex (const char *qName) = 0;
+ virtual const char *getValue (const char *qName) = 0;
+};
+
+/*
+ * org/xml/sax/SAXException.java
+ */
+class SAXException
+{
+public:
+ SAXException ();
+ SAXException (const char *message);
+ virtual ~SAXException ();
+ char *getMessage ();
+
+private:
+ char *message;
+};
+
+class SAXParseException : public SAXException
+{
+public:
+ SAXParseException (char *message, int lineNumber, int columnNumber);
+
+ int
+ getLineNumber ()
+ {
+ return lineNumber;
+ }
+
+ int
+ getColumnNumber ()
+ {
+ return columnNumber;
+ }
+
+private:
+ int lineNumber;
+ int columnNumber;
+};
+
+class DefaultHandler
+{
+public:
+ virtual ~DefaultHandler () { };
+
+ virtual void startDocument () = 0;
+ virtual void endDocument () = 0;
+ virtual void startElement (char *uri, char *localName, char *qName,
+ Attributes *attributes) = 0;
+ virtual void endElement (char *uri, char *localName, char *qName) = 0;
+ virtual void characters (char *ch, int start, int length) = 0;
+ virtual void ignorableWhitespace (char *ch, int start, int length) = 0;
+
+ virtual void
+ warning (SAXParseException *e)
+ {
+ delete e;
+ }
+
+ virtual void
+ error (SAXParseException *e)
+ {
+ delete e;
+ }
+
+ virtual void
+ fatalError (SAXParseException *e)
+ {
+ throw ( e);
+ }
+ void dump_startElement (const char *qName, Attributes *attributes);
+};
+
+#endif /* _DefaultHandler_h */
diff --git a/gprofng/src/DefaultMap.h b/gprofng/src/DefaultMap.h
new file mode 100644
index 00000000000..4a87fcc5b24
--- /dev/null
+++ b/gprofng/src/DefaultMap.h
@@ -0,0 +1,232 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _DBE_DEFAULTMAP_H
+#define _DBE_DEFAULTMAP_H
+
+#include <assert.h>
+#include <vec.h>
+#include <Map.h>
+
+template <typename Key_t, typename Value_t>
+class DefaultMap : public Map<Key_t, Value_t>
+{
+public:
+
+ DefaultMap ();
+ ~DefaultMap ();
+ void clear ();
+ void put (Key_t key, Value_t val);
+ Value_t get (Key_t key);
+ Value_t get (Key_t key, typename Map<Key_t, Value_t>::Relation rel);
+ Value_t remove (Key_t);
+ Vector<Key_t> *keySet ();
+ Vector<Value_t> *values ();
+
+private:
+
+ struct Entry
+ {
+ Key_t key;
+ Value_t val;
+ };
+
+ static const int CHUNK_SIZE;
+ static const int HTABLE_SIZE;
+
+ int entries;
+ int nchunks;
+ Entry **chunks;
+ Vector<Entry*> *index;
+ Entry **hashTable;
+};
+
+
+template <typename Key_t, typename Value_t>
+const int DefaultMap<Key_t, Value_t>::CHUNK_SIZE = 16384;
+template <typename Key_t, typename Value_t>
+const int DefaultMap<Key_t, Value_t>::HTABLE_SIZE = 1024;
+
+template <typename Key_t, typename Value_t>
+DefaultMap<Key_t, Value_t>::DefaultMap ()
+{
+ entries = 0;
+ nchunks = 0;
+ chunks = NULL;
+ index = new Vector<Entry*>;
+ hashTable = new Entry*[HTABLE_SIZE];
+ for (int i = 0; i < HTABLE_SIZE; i++)
+ hashTable[i] = NULL;
+}
+
+template <typename Key_t, typename Value_t>
+DefaultMap<Key_t, Value_t>::~DefaultMap ()
+{
+ for (int i = 0; i < nchunks; i++)
+ delete[] chunks[i];
+ delete[] chunks;
+ delete index;
+ delete[] hashTable;
+}
+
+template <typename Key_t, typename Value_t>
+void
+DefaultMap<Key_t, Value_t>::clear ()
+{
+ entries = 0;
+ index->reset ();
+ for (int i = 0; i < HTABLE_SIZE; i++)
+ hashTable[i] = NULL;
+}
+
+template <typename Key_t>
+inline unsigned
+hash (Key_t key)
+{
+ unsigned h = (unsigned) ((unsigned long) key);
+ h ^= (h >> 20) ^ (h >> 12);
+ return (h ^ (h >> 7) ^ (h >> 4));
+}
+
+template <typename Key_t, typename Value_t>
+void
+DefaultMap<Key_t, Value_t>::put (Key_t key, Value_t val)
+{
+ unsigned idx = hash (key) % HTABLE_SIZE;
+ Entry *entry = hashTable[idx];
+ if (entry && entry->key == key)
+ {
+ entry->val = val;
+ return;
+ }
+ int lo = 0;
+ int hi = entries - 1;
+ while (lo <= hi)
+ {
+ int md = (lo + hi) / 2;
+ entry = index->fetch (md);
+ int cmp = entry->key < key ? -1 : entry->key > key ? 1 : 0;
+ if (cmp < 0)
+ lo = md + 1;
+ else if (cmp > 0)
+ hi = md - 1;
+ else
+ {
+ entry->val = val;
+ return;
+ }
+ }
+ if (entries >= nchunks * CHUNK_SIZE)
+ {
+ nchunks++;
+ // Reallocate Entry chunk array
+ Entry **new_chunks = new Entry*[nchunks];
+ for (int i = 0; i < nchunks - 1; i++)
+ new_chunks[i] = chunks[i];
+ delete[] chunks;
+ chunks = new_chunks;
+
+ // Allocate new chunk for entries.
+ chunks[nchunks - 1] = new Entry[CHUNK_SIZE];
+ }
+ entry = &chunks[entries / CHUNK_SIZE][entries % CHUNK_SIZE];
+ entry->key = key;
+ entry->val = val;
+ index->insert (lo, entry);
+ hashTable[idx] = entry;
+ entries++;
+}
+
+template <typename Key_t, typename Value_t>
+Value_t
+DefaultMap<Key_t, Value_t>::get (Key_t key)
+{
+ unsigned idx = hash (key) % HTABLE_SIZE;
+ Entry *entry = hashTable[idx];
+ if (entry && entry->key == key)
+ return entry->val;
+
+ int lo = 0;
+ int hi = entries - 1;
+ while (lo <= hi)
+ {
+ int md = (lo + hi) / 2;
+ entry = index->fetch (md);
+ int cmp = entry->key < key ? -1 : entry->key > key ? 1 : 0;
+ if (cmp < 0)
+ lo = md + 1;
+ else if (cmp > 0)
+ hi = md - 1;
+ else
+ {
+ hashTable[idx] = entry;
+ return entry->val;
+ }
+ }
+ return (Value_t) 0;
+}
+
+template <typename Key_t, typename Value_t>
+Value_t
+DefaultMap<Key_t, Value_t>::get (Key_t key,
+ typename Map<Key_t, Value_t>::Relation rel)
+{
+ if (rel != Map<Key_t, Value_t>::REL_EQ)
+ return (Value_t) 0;
+ return get (key);
+}
+
+template <typename Key_t, typename Value_t>
+Value_t
+DefaultMap<Key_t, Value_t>::remove (Key_t)
+{
+ // Not implemented
+ if (1)
+ assert (0);
+ return (Value_t) 0;
+}
+
+template <typename Key_t, typename Value_t>
+Vector<Value_t> *
+DefaultMap<Key_t, Value_t>::values ()
+{
+ Vector<Value_t> *vals = new Vector<Value_t>(entries);
+ for (int i = 0; i < entries; ++i)
+ {
+ Entry *entry = index->fetch (i);
+ vals->append (entry->val);
+ }
+ return vals;
+}
+
+template <typename Key_t, typename Value_t>
+Vector<Key_t> *
+DefaultMap<Key_t, Value_t>::keySet ()
+{
+ Vector<Key_t> *keys = new Vector<Key_t>(entries);
+ for (int i = 0; i < entries; ++i)
+ {
+ Entry *entry = index->fetch (i);
+ keys->append (entry->key);
+ }
+ return keys;
+}
+
+#endif
diff --git a/gprofng/src/DefaultMap2D.h b/gprofng/src/DefaultMap2D.h
new file mode 100644
index 00000000000..8045aad6669
--- /dev/null
+++ b/gprofng/src/DefaultMap2D.h
@@ -0,0 +1,147 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _DBE_DEFAULTMAP2D_H
+#define _DBE_DEFAULTMAP2D_H
+
+#include <assert.h>
+#include <vec.h>
+#include <DefaultMap.h>
+#include <IntervalMap.h>
+#include <Map2D.h>
+
+/*
+ * Default Map2D implementation.
+ *
+ * Default Map2D is a cartesian product of two default Maps.
+ */
+
+template <typename Key1_t, typename Key2_t, typename Value_t>
+class DefaultMap2D : public Map2D<Key1_t, Key2_t, Value_t>
+{
+public:
+ DefaultMap2D ();
+ DefaultMap2D (typename Map2D<Key1_t, Key2_t, Value_t>::MapType _type);
+ ~DefaultMap2D ();
+ void put (Key1_t key1, Key2_t key2, Value_t val);
+ Value_t get (Key1_t key1, Key2_t key2);
+ Value_t get (Key1_t key1, Key2_t key2,
+ typename Map2D<Key1_t, Key2_t, Value_t>::Relation rel);
+ Value_t remove (Key1_t, Key2_t);
+
+private:
+ typename Map2D<Key1_t, Key2_t, Value_t>::MapType type;
+ Map<Key1_t, Map<Key2_t, Value_t>*> *map1;
+ Vector<Map<Key2_t, Value_t>*> *map2list;
+};
+
+template <typename Key1_t, typename Key2_t, typename Value_t>
+DefaultMap2D<Key1_t, Key2_t, Value_t>::DefaultMap2D ()
+{
+ type = Map2D<Key1_t, Key2_t, Value_t>::Default;
+ map1 = new DefaultMap<Key1_t, Map<Key2_t, Value_t>*>;
+ map2list = new Vector<Map<Key2_t, Value_t>*>;
+}
+
+template <typename Key1_t, typename Key2_t, typename Value_t>
+DefaultMap2D<Key1_t, Key2_t, Value_t>::DefaultMap2D (
+ typename Map2D<Key1_t, Key2_t, Value_t>::MapType _type)
+{
+ type = _type;
+ map1 = new DefaultMap<Key1_t, Map<Key2_t, Value_t>*>;
+ map2list = new Vector<Map<Key2_t, Value_t>*>;
+}
+
+template <typename Key1_t, typename Key2_t, typename Value_t>
+DefaultMap2D<Key1_t, Key2_t, Value_t>::~DefaultMap2D ()
+{
+ map2list->destroy ();
+ delete map2list;
+ delete map1;
+}
+
+template <typename Key1_t, typename Key2_t, typename Value_t>
+void
+DefaultMap2D<Key1_t, Key2_t, Value_t>::put (Key1_t key1, Key2_t key2, Value_t val)
+{
+ Map<Key2_t, Value_t> *map2 = map1->get (key1);
+ if (map2 == NULL)
+ {
+ if (type == Map2D<Key1_t, Key2_t, Value_t>::Interval)
+ map2 = new IntervalMap<Key2_t, Value_t>;
+ else
+ map2 = new DefaultMap<Key2_t, Value_t>;
+ map2list->append (map2);
+ map1->put (key1, map2);
+ }
+ map2->put (key2, val);
+}
+
+template <typename Key1_t, typename Key2_t, typename Value_t>
+Value_t
+DefaultMap2D<Key1_t, Key2_t, Value_t>::get (Key1_t key1, Key2_t key2)
+{
+ Map<Key2_t, Value_t> *map2 = map1->get (key1);
+ if (map2 == NULL)
+ return (Value_t) 0;
+ return map2->get (key2);
+}
+
+template <typename Key1_t, typename Key2_t, typename Value_t>
+Value_t
+DefaultMap2D<Key1_t, Key2_t, Value_t>::get (Key1_t key1, Key2_t key2,
+ typename Map2D<Key1_t, Key2_t, Value_t>::Relation rel)
+{
+ Map<Key2_t, Value_t> *map2 = map1->get (key1);
+ if (map2 == NULL)
+ return (Value_t) 0;
+ typename Map<Key2_t, Value_t>::Relation rel2;
+ switch (rel)
+ {
+ case Map2D<Key1_t, Key2_t, Value_t>::REL_EQLT:
+ rel2 = map2->REL_LT;
+ break;
+ case Map2D<Key1_t, Key2_t, Value_t>::REL_EQLE:
+ rel2 = map2->REL_LE;
+ break;
+ case Map2D<Key1_t, Key2_t, Value_t>::REL_EQGE:
+ rel2 = map2->REL_GE;
+ break;
+ case Map2D<Key1_t, Key2_t, Value_t>::REL_EQGT:
+ rel2 = map2->REL_GT;
+ break;
+ default:
+ rel2 = map2->REL_EQ;
+ break;
+ }
+ return map2->get (key2, rel2);
+}
+
+template <typename Key1_t, typename Key2_t, typename Value_t>
+Value_t
+DefaultMap2D<Key1_t, Key2_t, Value_t>::remove (Key1_t, Key2_t)
+{
+ // Not implemented
+ if (1)
+ assert (0);
+ return (Value_t) 0;
+}
+
+#endif
diff --git a/gprofng/src/DerivedMetrics.cc b/gprofng/src/DerivedMetrics.cc
new file mode 100644
index 00000000000..9f504a5a32f
--- /dev/null
+++ b/gprofng/src/DerivedMetrics.cc
@@ -0,0 +1,293 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <strings.h>
+#include "DerivedMetrics.h"
+#include "util.h"
+
+enum opType
+{
+ opNULL,
+ opPrimitive,
+ opDivide
+};
+
+class definition
+{
+public:
+ definition();
+ ~definition();
+ char *name;
+ char *def;
+ opType op;
+ definition *arg1;
+ definition *arg2;
+ int index;
+};
+
+definition::definition ()
+{
+ name = def = NULL;
+ arg1 = arg2 = NULL;
+}
+
+definition::~definition ()
+{
+ free (name);
+ free (def);
+}
+
+DerivedMetrics::DerivedMetrics ()
+{
+ items = new Vector<definition*>;
+}
+
+DerivedMetrics::~DerivedMetrics ()
+{
+ Destroy (items);
+}
+
+definition *
+DerivedMetrics::add_definition (char *_name, char *_username, char *_def)
+{
+ definition *p;
+
+ // if the name doesn't matter, maybe there is a duplicate we can use
+ if (_name == NULL)
+ {
+ int i;
+ Vec_loop (definition*, items, i, p)
+ {
+ if (strcmp (p->def, _def) == 0)
+ return p;
+ }
+ }
+
+ p = new definition;
+ p->name = dbe_strdup (_name);
+ p->def = dbe_strdup (_def);
+
+ // parse the definition
+ if (strchr (_def, '/') == NULL)
+ {
+ // it's a primitive metric
+ p->op = opPrimitive;
+ p->arg1 = p->arg2 = NULL;
+
+ }
+ else
+ {
+ // it's some operation on arguments
+ p->op = opDivide;
+ char *op_ptr = strchr (p->def, '/');
+ *op_ptr = 0;
+ p->arg1 = add_definition (NULL, NULL, p->def);
+ *op_ptr = '/';
+ p->arg2 = add_definition (NULL, NULL, op_ptr + 1);
+ }
+ p->index = items->size ();
+ items->append (p);
+ return p;
+}
+
+int *
+DerivedMetrics::construct_map (Vector<Metric*> *mitems, BaseMetric::SubType st, char *expr_spec)
+{
+ if (items == NULL)
+ return NULL;
+ int ndm = items->size ();
+ if (ndm == 0)
+ return NULL;
+ int nmetrics = mitems->size ();
+
+ // allocate arrays for the mapping between derived metrics and requested values
+ int *map = (int *) malloc (ndm * sizeof (int));
+
+ // map derived metrics to requested metrics // EUGENE explain this more clearly
+ // 0 means not mapped
+ // >0 means primitive metric maps to map-1
+ // <0 means derived metric maps to 1-map
+ int ndm_requested = 0;
+ for (int idm = 0; idm < ndm; idm++)
+ {
+ definition *defdm = items->fetch (idm);
+ map[idm] = 0;
+
+ // figure out what name to use for this derived metric
+ char *dname;
+ if (defdm->op == opPrimitive)
+ dname = defdm->def;
+ else
+ {
+ dname = defdm->name;
+ if (dname == NULL) break;
+ }
+
+ // look for this name among metrics
+ int im;
+ for (im = 0; im < nmetrics; im++)
+ {
+ Metric *m = mitems->fetch (im);
+ if (strcmp (dname, m->get_cmd ()) == 0 && m->get_subtype () == st)
+ // apparent match, but let's check comparison mode
+ if (dbe_strcmp (expr_spec, m->get_expr_spec ()) == 0)
+ break;
+ }
+
+ // encode the mapping
+ if (im >= nmetrics)
+ map[idm] = 0; // does not map to requested metrics
+ else if (defdm->op == opPrimitive)
+ map[idm] = +1 + im; // encode as a positive index
+ else
+ {
+ map[idm] = -1 - im; // encode as a negative index
+ ndm_requested++;
+ }
+ }
+ if (ndm_requested == 0)
+ {
+ free (map);
+ map = NULL;
+ }
+ return map;
+}
+
+void
+DerivedMetrics::fill_dependencies (definition *def, int *vec)
+{
+ switch (def->op)
+ {
+ case opPrimitive:
+ vec[def->index] = 1;
+ break;
+ case opDivide:
+ fill_dependencies (def->arg1, vec);
+ fill_dependencies (def->arg2, vec);
+ break;
+ default:
+ break;
+ }
+}
+
+Vector<definition*> *
+DerivedMetrics::get_dependencies (definition *def)
+{
+ int n = items->size ();
+
+ // zero out a vector representing definitions
+ int *vec = (int *) malloc (n * sizeof (int));
+ for (int i = 0; i < n; i++)
+ vec[i] = 0;
+ fill_dependencies (def, vec);
+
+ // construct the dependency vector
+ Vector<definition*> *dependencies = new Vector<definition*>;
+ for (int i = 0; i < n; i++)
+ if (vec[i] == 1)
+ dependencies->append (items->fetch (i));
+ free (vec);
+ return dependencies;
+}
+
+void
+DerivedMetrics::dump (FILE *dis_file, int verbosity)
+{
+ int i;
+ definition *item;
+
+ // deal with the possibility that names might be NULL
+ const char *UNNAMED = "(unnamed)";
+#define NAME(x) ( (x) ? (x) : UNNAMED)
+
+ Vec_loop (definition*, items, i, item)
+ {
+ // at low verbosity, skip over some items
+ if (verbosity == 0)
+ {
+ if (item->name == NULL)
+ continue;
+ if (strcmp (item->name, item->def) && item->op == opPrimitive)
+ continue;
+ }
+
+ // dump the definition
+ switch (item->op)
+ {
+ case opPrimitive:
+ fprintf (dis_file, "%s [%s] is a primitive metric\n", NAME (item->name),
+ item->def);
+ break;
+ case opDivide:
+ fprintf (dis_file, "%s [%s] = %s [%s] / %s [%s]\n", NAME (item->name),
+ item->def, NAME (item->arg1->name), item->arg1->def,
+ NAME (item->arg2->name), item->arg2->def);
+ break;
+ default:
+ fprintf (dis_file, "%s [%s] has an unrecognized op %d\n",
+ NAME (item->name), item->def, item->op);
+ break;
+ }
+ }
+}
+
+double
+DerivedMetrics::eval_one_item (definition *def, int *map, double *values)
+{
+ switch (def->op)
+ {
+ case opNULL:
+ fprintf (stderr, GTXT ("cannot eval NULL expression\n"));
+ return 0.;
+ case opPrimitive:
+ {
+ int ival = map[def->index];
+ if (ival <= 0) return 0.;
+ ival--;
+ return values[ival];
+ }
+ case opDivide:
+ {
+ double x1 = eval_one_item (def->arg1, map, values);
+ double x2 = eval_one_item (def->arg2, map, values);
+ if (x2 == 0) return 0.;
+ return (x1 / x2);
+ }
+ default:
+ fprintf (stderr, GTXT ("unknown expression\n"));
+ return 0.;
+ }
+}
+
+int
+DerivedMetrics::eval (int *map, double *values)
+{
+ for (int i = 0, n = items->size (); i < n; i++)
+ {
+ if (map[i] < 0)
+ {
+ int ival = -1 - map[i];
+ values[ival] = eval_one_item (items->fetch (i), map, values);
+ }
+ }
+ return 0;
+}
+
diff --git a/gprofng/src/DerivedMetrics.h b/gprofng/src/DerivedMetrics.h
new file mode 100644
index 00000000000..b457e5ebbfd
--- /dev/null
+++ b/gprofng/src/DerivedMetrics.h
@@ -0,0 +1,54 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _DERIVEDMETRICS_H
+#define _DERIVEDMETRICS_H
+
+#include <stdio.h>
+#include "BaseMetric.h"
+#include "Metric.h"
+
+class definition;
+
+class DerivedMetrics
+{
+public:
+ DerivedMetrics ();
+ ~DerivedMetrics ();
+ definition *add_definition (char *_name, char *_username, char *_def);
+ int *construct_map (Vector<Metric*> *mitems, BaseMetric::SubType st,
+ char *expr_spec);
+ void dump (FILE *dis_file, int verbosity);
+ double eval_one_item (definition *def, int *map, double *values);
+ int eval (int *map, double *values);
+ void fill_dependencies (definition *def, int *vec);
+ Vector<definition*> *get_dependencies (definition *def);
+
+ Vector<definition*> *
+ get_items ()
+ {
+ return items;
+ }
+
+private:
+ Vector<definition*> *items;
+};
+
+#endif
diff --git a/gprofng/src/Disasm.cc b/gprofng/src/Disasm.cc
new file mode 100644
index 00000000000..a5cca13950f
--- /dev/null
+++ b/gprofng/src/Disasm.cc
@@ -0,0 +1,419 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <stdio.h>
+#include <string.h>
+#include <sys/param.h>
+
+#include "disassemble.h"
+#include "dis-asm.h"
+#include "demangle.h"
+#include "dbe_types.h"
+#include "DbeSession.h"
+#include "Elf.h"
+#include "Disasm.h"
+#include "Stabs.h"
+#include "i18n.h"
+#include "util.h"
+#include "StringBuilder.h"
+
+struct DisContext
+{
+ bool is_Intel;
+ Stabs *stabs;
+ uint64_t pc; // first_pc <= pc < last_pc
+ uint64_t first_pc;
+ uint64_t last_pc;
+ uint64_t f_offset; // file offset for first_pc
+ int codeptr[4]; // longest instruction length may not be > 16
+ Data_window *elf;
+};
+
+static const int MAX_DISASM_STR = 2048;
+static const int MAX_INSTR_SIZE = 8;
+
+Disasm::Disasm (char *fname)
+{
+ dwin = NULL;
+ dis_str = NULL;
+ need_swap_endian = false;
+ my_stabs = Stabs::NewStabs (fname, fname);
+ if (my_stabs == NULL)
+ return;
+ stabs = my_stabs;
+ platform = stabs->get_platform ();
+ disasm_open ();
+}
+
+Disasm::Disasm (Platform_t _platform, Stabs *_stabs)
+{
+ dwin = NULL;
+ dis_str = NULL;
+ need_swap_endian = false;
+ stabs = _stabs;
+ platform = _platform;
+ my_stabs = NULL;
+ disasm_open ();
+}
+
+static int
+fprintf_func (void *arg, const char *fmt, ...)
+{
+ char buf[512];
+ va_list vp;
+ va_start (vp, fmt);
+ int cnt = vsnprintf (buf, sizeof (buf), fmt, vp);
+ va_end (vp);
+
+ Disasm *dis = (Disasm *) arg;
+ dis->dis_str->append (buf);
+ return cnt;
+}
+
+static int
+fprintf_styled_func (void *arg, enum disassembler_style st ATTRIBUTE_UNUSED,
+ const char *fmt, ...)
+{
+ char buf[512];
+ va_list vp;
+ va_start (vp, fmt);
+ int cnt = vsnprintf (buf, sizeof (buf), fmt, vp);
+ va_end (vp);
+
+ Disasm *dis = (Disasm *) arg;
+ dis->dis_str->append (buf);
+ return cnt;
+}
+
+/* Get LENGTH bytes from info's buffer, at target address memaddr.
+ Transfer them to myaddr. */
+static int
+read_memory_func (bfd_vma memaddr, bfd_byte *myaddr, unsigned int length,
+ disassemble_info *info)
+{
+ unsigned int opb = info->octets_per_byte;
+ size_t end_addr_offset = length / opb;
+ size_t max_addr_offset = info->buffer_length / opb;
+ size_t octets = (memaddr - info->buffer_vma) * opb;
+ if (memaddr < info->buffer_vma
+ || memaddr - info->buffer_vma > max_addr_offset
+ || memaddr - info->buffer_vma + end_addr_offset > max_addr_offset
+ || (info->stop_vma && (memaddr >= info->stop_vma
+ || memaddr + end_addr_offset > info->stop_vma)))
+ return -1;
+ memcpy (myaddr, info->buffer + octets, length);
+ return 0;
+}
+
+static void
+print_address_func (bfd_vma addr, disassemble_info *info)
+{
+ (*info->fprintf_func) (info->stream, "0x%llx", (unsigned long long) addr);
+}
+
+static asymbol *
+symbol_at_address_func (bfd_vma addr ATTRIBUTE_UNUSED,
+ disassemble_info *info ATTRIBUTE_UNUSED)
+{
+ return NULL;
+}
+
+static bfd_boolean
+symbol_is_valid (asymbol * sym ATTRIBUTE_UNUSED,
+ disassemble_info *info ATTRIBUTE_UNUSED)
+{
+ return TRUE;
+}
+
+static void
+memory_error_func (int status, bfd_vma addr, disassemble_info *info)
+{
+ info->fprintf_func (info->stream, "Address 0x%llx is out of bounds.\n",
+ (unsigned long long) addr);
+}
+
+void
+Disasm::disasm_open ()
+{
+ hex_visible = 1;
+ snprintf (addr_fmt, sizeof (addr_fmt), NTXT ("%s"), NTXT ("%8llx: "));
+ if (dis_str == NULL)
+ dis_str = new StringBuilder;
+
+ switch (platform)
+ {
+ case Aarch64:
+ case Intel:
+ case Amd64:
+ need_swap_endian = (DbeSession::platform == Sparc);
+ break;
+ case Sparcv8plus:
+ case Sparcv9:
+ case Sparc:
+ default:
+ need_swap_endian = (DbeSession::platform != Sparc);
+ break;
+ }
+
+ memset (&dis_info, 0, sizeof (dis_info));
+ dis_info.flavour = bfd_target_unknown_flavour;
+ dis_info.endian = BFD_ENDIAN_UNKNOWN;
+ dis_info.endian_code = dis_info.endian;
+ dis_info.octets_per_byte = 1;
+ dis_info.disassembler_needs_relocs = FALSE;
+ dis_info.fprintf_func = fprintf_func;
+ dis_info.fprintf_styled_func = fprintf_styled_func;
+ dis_info.stream = this;
+ dis_info.disassembler_options = NULL;
+ dis_info.read_memory_func = read_memory_func;
+ dis_info.memory_error_func = memory_error_func;
+ dis_info.print_address_func = print_address_func;
+ dis_info.symbol_at_address_func = symbol_at_address_func;
+ dis_info.symbol_is_valid = symbol_is_valid;
+ dis_info.display_endian = BFD_ENDIAN_UNKNOWN;
+ dis_info.symtab = NULL;
+ dis_info.symtab_size = 0;
+ dis_info.buffer_vma = 0;
+ switch (platform)
+ {
+ case Aarch64:
+ dis_info.arch = bfd_arch_aarch64;
+ dis_info.mach = bfd_mach_aarch64;
+ break;
+ case Intel:
+ case Amd64:
+ dis_info.arch = bfd_arch_i386;
+ dis_info.mach = bfd_mach_x86_64;
+ break;
+ case Sparcv8plus:
+ case Sparcv9:
+ case Sparc:
+ default:
+ dis_info.arch = bfd_arch_unknown;
+ dis_info.endian = BFD_ENDIAN_UNKNOWN;
+ break;
+ }
+ dis_info.display_endian = dis_info.endian = BFD_ENDIAN_BIG;
+ dis_info.display_endian = dis_info.endian = BFD_ENDIAN_LITTLE;
+ dis_info.display_endian = dis_info.endian = BFD_ENDIAN_UNKNOWN;
+ disassemble_init_for_target (&dis_info);
+}
+
+Disasm::~Disasm ()
+{
+ delete my_stabs;
+ delete dwin;
+ delete dis_str;
+}
+
+void
+Disasm::set_img_name (char *img_fname)
+{
+ if (stabs == NULL && img_fname && dwin == NULL)
+ {
+ dwin = new Data_window (img_fname);
+ if (dwin->not_opened ())
+ {
+ delete dwin;
+ dwin = NULL;
+ return;
+ }
+ dwin->need_swap_endian = need_swap_endian;
+ }
+}
+
+void
+Disasm::remove_disasm_hndl (void *hndl)
+{
+ DisContext *ctx = (DisContext *) hndl;
+ delete ctx;
+}
+
+#if 0
+int
+Disasm::get_instr_size (uint64_t vaddr, void *hndl)
+{
+ DisContext *ctx = (DisContext *) hndl;
+ if (ctx == NULL || vaddr < ctx->first_pc || vaddr >= ctx->last_pc)
+ return -1;
+ ctx->pc = vaddr;
+ size_t sz = ctx->is_Intel ? sizeof (ctx->codeptr) : 4;
+ if (sz > ctx->last_pc - vaddr)
+ sz = (size_t) (ctx->last_pc - vaddr);
+ if (ctx->elf->get_data (ctx->f_offset + (vaddr - ctx->first_pc),
+ sz, ctx->codeptr) == NULL)
+ return -1;
+
+ char buf[MAX_DISASM_STR];
+ *buf = 0;
+ uint64_t inst_vaddr = vaddr;
+#if MEZ_NEED_TO_FIX
+ size_t instrs_cnt = 0;
+ disasm_err_code_t status = disasm (handle, &inst_vaddr, ctx->last_pc, 1,
+ ctx, buf, sizeof (buf), &instrs_cnt);
+ if (instrs_cnt != 1 || status != disasm_err_ok)
+ return -1;
+#endif
+ return (int) (inst_vaddr - vaddr);
+}
+#endif
+
+void
+Disasm::set_addr_end (uint64_t end_address)
+{
+ char buf[32];
+ int len = snprintf (buf, sizeof (buf), "%llx", (long long) end_address);
+ snprintf (addr_fmt, sizeof (addr_fmt), "%%%dllx: ", len < 8 ? 8 : len);
+}
+
+char *
+Disasm::get_disasm (uint64_t inst_address, uint64_t end_address,
+ uint64_t start_address, uint64_t f_offset, int64_t &inst_size)
+{
+ inst_size = 0;
+ if (inst_address >= end_address)
+ return NULL;
+ Data_window *dw = stabs ? stabs->openElf (false) : dwin;
+ if (dw == NULL)
+ return NULL;
+
+ unsigned char buffer[MAX_DISASM_STR];
+ dis_info.buffer = buffer;
+ dis_info.buffer_length = end_address - inst_address;
+ if (dis_info.buffer_length > sizeof (buffer))
+ dis_info.buffer_length = sizeof (buffer);
+ dw->get_data (f_offset + (inst_address - start_address),
+ dis_info.buffer_length, dis_info.buffer);
+
+ dis_str->setLength (0);
+ bfd abfd;
+ disassembler_ftype disassemble = disassembler (dis_info.arch, dis_info.endian,
+ dis_info.mach, &abfd);
+ if (disassemble == NULL)
+ {
+ printf ("ERROR: unsupported disassemble\n");
+ return NULL;
+ }
+ inst_size = disassemble (0, &dis_info);
+ if (inst_size <= 0)
+ {
+ inst_size = 0;
+ return NULL;
+ }
+ StringBuilder sb;
+ sb.appendf (addr_fmt, inst_address); // Write address
+
+ // Write hex bytes of instruction
+ if (hex_visible)
+ {
+ char bytes[64];
+ *bytes = '\0';
+ for (int i = 0; i < inst_size; i++)
+ {
+ unsigned int hex_value = buffer[i] & 0xff;
+ snprintf (bytes + 3 * i, sizeof (bytes) - 3 * i, "%02x ", hex_value);
+ }
+ const char *fmt = "%s ";
+ if (platform == Intel)
+ fmt = "%-21s "; // 21 = 3 * 7 - maximum instruction length on Intel
+ sb.appendf (fmt, bytes);
+ }
+ sb.append (dis_str);
+#if MEZ_NEED_TO_FIX
+ // Write instruction
+ if (ctx.is_Intel) // longest instruction length for Intel is 7
+ sb.appendf (NTXT ("%-7s %s"), parts_array[1], parts_array[2]);
+ else // longest instruction length for SPARC is 11
+ sb.appendf (NTXT ("%-11s %s"), parts_array[1], parts_array[2]);
+ if (strcmp (parts_array[1], NTXT ("call")) == 0)
+ {
+ if (strncmp (parts_array[2], NTXT ("0x"), 2) == 0)
+ sb.append (GTXT ("\t! (Unable to determine target symbol)"));
+ }
+#endif
+ return sb.toString ();
+}
+
+#if MEZ_NEED_TO_FIX
+void *
+Disasm::get_inst_ptr (disasm_handle_t, uint64_t vaddr, void *pass_through)
+{
+ // Actually it fetches only one instruction at a time for sparc,
+ // and one byte at a time for intel.
+ DisContext *ctx = (DisContext*) pass_through;
+ size_t sz = ctx->is_Intel ? 1 : 4;
+ if (vaddr + sz > ctx->last_pc)
+ {
+ ctx->codeptr[0] = -1;
+ return ctx->codeptr;
+ }
+ if (ctx->elf->get_data (ctx->f_offset + (vaddr - ctx->first_pc), sz, ctx->codeptr) == NULL)
+ {
+ ctx->codeptr[0] = -1;
+ return ctx->codeptr;
+ }
+ if (ctx->elf->need_swap_endian && !ctx->is_Intel)
+ ctx->codeptr[0] = ctx->elf->decode (ctx->codeptr[0]);
+ return ctx->codeptr;
+}
+
+// get a symbol name for an address
+disasm_err_code_t
+Disasm::get_sym_name (disasm_handle_t, // an open disassembler handle
+ uint64_t target_address, // the target virtual address
+ uint64_t inst_address, // virtual address of instruction
+ // being disassembled
+ int use_relocation, // flag to use relocation information
+ char *buffer, // places the symbol here
+ size_t buffer_size, // limit on symbol length
+ int *, // sys/elf_{SPARC.386}.h
+ uint64_t *offset, // from the symbol to the address
+ void *pass_through) // disassembler context
+{
+ char buf[MAXPATHLEN];
+ if (!use_relocation)
+ return disasm_err_symbol;
+
+ DisContext *ctxp = (DisContext*) pass_through;
+ char *name = NULL;
+ if (ctxp->stabs)
+ {
+ uint64_t addr = ctxp->f_offset + (inst_address - ctxp->first_pc);
+ name = ctxp->stabs->sym_name (target_address, addr, use_relocation);
+ }
+ if (name == NULL)
+ return disasm_err_symbol;
+
+ char *s = NULL;
+ if (*name == '_')
+ s = cplus_demangle (name, DMGL_PARAMS);
+ if (s)
+ {
+ snprintf (buffer, buffer_size, NTXT ("%s"), s);
+ free (s);
+ }
+ else
+ snprintf (buffer, buffer_size, NTXT ("%s"), name);
+
+ *offset = 0;
+ return disasm_err_ok;
+}
+#endif
diff --git a/gprofng/src/Disasm.h b/gprofng/src/Disasm.h
new file mode 100644
index 00000000000..c1530cc6d26
--- /dev/null
+++ b/gprofng/src/Disasm.h
@@ -0,0 +1,66 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _DISASM_H
+#define _DISASM_H
+
+#include "disassemble.h"
+
+class Data_window;
+class Stabs;
+class StringBuilder;
+enum Platform_t;
+
+class Disasm
+{
+public:
+ Disasm (char *fname);
+ Disasm (Platform_t _platform, Stabs *_stabs);
+ ~Disasm ();
+ void remove_disasm_hndl (void *hndl);
+ void *get_disasm_hndl (uint64_t vaddr, uint64_t f_offset, size_t size);
+ int get_instr_size (uint64_t vaddr, void *hndl);
+ void set_addr_end (uint64_t end_address);
+
+ void
+ set_hex_visible (int set)
+ {
+ hex_visible = set;
+ }
+
+ char *get_disasm (uint64_t inst_address, uint64_t end_address,
+ uint64_t start_address, uint64_t f_offset, int64_t &inst_size);
+ void set_img_name (char *fname); // Only for dynfunc
+
+ StringBuilder *dis_str;
+
+private:
+ void disasm_open ();
+
+ disassemble_info dis_info;
+ Data_window *dwin;
+ Stabs *stabs, *my_stabs;
+ Platform_t platform;
+ char addr_fmt[32];
+ int hex_visible;
+ bool need_swap_endian;
+};
+
+#endif /* _DISASM_H */
diff --git a/gprofng/src/Dwarf.cc b/gprofng/src/Dwarf.cc
new file mode 100644
index 00000000000..eb8bd9e1478
--- /dev/null
+++ b/gprofng/src/Dwarf.cc
@@ -0,0 +1,1041 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include "util.h"
+#include "DbeSession.h"
+#include "Elf.h"
+#include "Stabs.h"
+#include "Dwarf.h"
+#include "DataObject.h"
+#include "Function.h"
+#include "LoadObject.h"
+#include "Module.h"
+#include "DefaultMap.h"
+
+static int
+datatypeCmp (const void *a, const void *b)
+{
+ uint32_t o1 = ((datatype_t *) a)->datatype_id;
+ uint32_t o2 = ((datatype_t *) b)->datatype_id;
+ return o1 == o2 ? 0 : (o1 < o2 ? -1 : 1);
+}
+
+static int
+targetOffsetCmp (const void *a, const void *b)
+{
+ uint32_t o1 = ((target_info_t *) a)->offset;
+ uint32_t o2 = ((target_info_t *) b)->offset;
+ return o1 == o2 ? 0 : (o1 < o2 ? -1 : 1);
+}
+
+
+//////////////////////////////////////////////////////////
+// class Dwr_type
+class Dwr_type
+{
+public:
+
+ Dwr_type (int64_t _cu_die_offset, int _tag)
+ {
+ cu_die_offset = _cu_die_offset;
+ tag = _tag;
+ name = NULL;
+ dobj_name = NULL;
+ dtype = NULL;
+ extent = 0;
+ parent = 0;
+ child = 0;
+ next = 0;
+ ref_type = 0;
+ size = 0;
+ elems = 0;
+ offset = -1;
+ bit_size = 0;
+ };
+
+ char *name, *dobj_name;
+ int64_t cu_die_offset, ref_type, extent, parent, child, next;
+ int64_t size, elems, offset;
+ int tag, bit_size;
+
+ DataObject *get_dobj (Dwarf_cnt *ctx);
+ char *get_dobjname (Dwarf_cnt *ctx);
+ char *dump ();
+
+private:
+ datatype_t *dtype;
+ datatype_t *get_datatype (Dwarf_cnt *ctx);
+ void get_dobj_for_members (Dwarf_cnt *ctx);
+ void set_dobjname (char *spec, char *nm);
+};
+
+
+//////////////////////////////////////////////////////////
+// class Dwarf_cnt
+Dwarf_cnt::Dwarf_cnt ()
+{
+ cu_offset = 0;
+ parent = 0;
+ module = NULL;
+ name = NULL;
+ func = NULL;
+ fortranMAIN = NULL;
+ dwr_types = NULL;
+ inlinedSubr = NULL;
+ level = 0;
+}
+
+Dwr_type *
+Dwarf_cnt::get_dwr_type (int64_t cu_die_offset)
+{
+ Dwr_type *t = dwr_types->get (cu_die_offset);
+ if (t == NULL)
+ {
+ Dprintf (DUMP_DWARFLIB, "DWARF_ERROR: %s:%d wrong cu_die_offset=%lld in Dwarf_cnt::get_dwr_type\n",
+ get_basename (__FILE__), (int) __LINE__,
+ (long long) cu_die_offset);
+ t = put_dwr_type (cu_die_offset, 0); // DOBJ_UNSPECIFIED
+ }
+ return t;
+}
+
+Dwr_type *
+Dwarf_cnt::put_dwr_type (int64_t cu_die_offset, int tag)
+{
+ Dwr_type *t = new Dwr_type (cu_die_offset, tag);
+ dwr_types->put (cu_die_offset, t);
+ return t;
+}
+
+Dwr_type *
+Dwarf_cnt::put_dwr_type (Dwr_Tag *dwrTag)
+{
+ Dwr_type *t = new Dwr_type (dwrTag->die, dwrTag->tag);
+ dwr_types->put (dwrTag->die, t);
+ return t;
+}
+
+//////////////////////////////////////////////////////////
+// class Dwr_type
+char *
+Dwr_type::dump ()
+{
+ char *s = dbe_sprintf ("%lld %-15s name='%s' parent=%lld next=%lld child=%lld dtype=%llx",
+ (long long) cu_die_offset, DwrCU::tag2str (tag),
+ STR (name), (long long) parent, (long long) next,
+ (long long) child, (long long) dtype);
+ return s;
+}
+
+void
+Dwr_type::set_dobjname (char *spec, char *nm)
+{
+ if (spec)
+ {
+ if (nm)
+ dobj_name = dbe_sprintf ("%s%s", spec, nm);
+ else
+ dobj_name = dbe_sprintf ("%s<ANON=%lld>", spec,
+ (long long) cu_die_offset);
+ }
+ else
+ {
+ if (nm)
+ dobj_name = dbe_sprintf ("%s", nm);
+ else
+ dobj_name = dbe_sprintf ("<ANON=%lld>", (long long) cu_die_offset);
+ }
+}
+
+char *
+Dwr_type::get_dobjname (Dwarf_cnt *ctx)
+{
+ if (dobj_name)
+ return dobj_name;
+ switch (tag)
+ {
+ case DW_TAG_base_type:
+ set_dobjname (NULL, name);
+ for (int i = 0, len = (int) strlen (dobj_name); i < len; i++)
+ {
+ if (dobj_name[i] == ' ')
+ dobj_name[i] = '_';
+ }
+ break;
+ case DW_TAG_constant:
+ case DW_TAG_formal_parameter:
+ case DW_TAG_variable:
+ {
+ Dwr_type *t = ctx->get_dwr_type (ref_type);
+ set_dobjname (NULL, t->get_dobjname (ctx));
+ break;
+ }
+ case DW_TAG_unspecified_type:
+ set_dobjname (NTXT ("unspecified:"), name);
+ break;
+ case DW_TAG_enumeration_type:
+ set_dobjname (NTXT ("enumeration:"), name);
+ break;
+ case DW_TAG_typedef:
+ {
+ Dwr_type *t = ctx->get_dwr_type (ref_type);
+ dobj_name = dbe_sprintf ("%s=%s", name, t->get_dobjname (ctx));
+ break;
+ }
+ case DW_TAG_const_type:
+ set_dobjname (NTXT ("const+"), name);
+ break;
+ case DW_TAG_volatile_type:
+ set_dobjname (NTXT ("volatile+"), name);
+ break;
+ case DW_TAG_pointer_type:
+ {
+ Dwr_type *t = ctx->get_dwr_type (ref_type);
+ set_dobjname (NTXT ("pointer+"), t->get_dobjname (ctx));
+ break;
+ }
+ case DW_TAG_reference_type:
+ {
+ Dwr_type *t = ctx->get_dwr_type (ref_type);
+ set_dobjname (NTXT ("reference+"), t->get_dobjname (ctx));
+ break;
+ }
+ case DW_TAG_array_type:
+ {
+ Dwr_type *t = ctx->get_dwr_type (ref_type);
+ if (elems > 0)
+ dobj_name = dbe_sprintf ("array[%lld]:%s",
+ (long long) elems, t->get_dobjname (ctx));
+ else
+ dobj_name = dbe_sprintf ("array[]:%s", t->get_dobjname (ctx));
+ break;
+ }
+ case DW_TAG_structure_type:
+ set_dobjname (NTXT ("structure:"), name);
+ break;
+ case DW_TAG_union_type:
+ set_dobjname (NTXT ("union:"), name);
+ break;
+ case DW_TAG_class_type:
+ set_dobjname (NTXT ("class:"), name);
+ break;
+ case DW_TAG_member:
+ {
+ Dwr_type *t = ctx->get_dwr_type (ref_type);
+ if (bit_size > 0)
+ dobj_name = dbe_sprintf (NTXT ("%s:%lld"), t->get_dobjname (ctx),
+ (long long) bit_size);
+ else
+ dobj_name = dbe_sprintf (NTXT ("%s"), t->get_dobjname (ctx));
+ break;
+ }
+ default:
+ Dprintf (DUMP_DWARFLIB, NTXT ("DWARF_ERROR: %s:%d No case for %s cu_die_offset=%lld\n"),
+ get_basename (__FILE__), (int) __LINE__,
+ DwrCU::tag2str (tag), (long long) cu_die_offset);
+ set_dobjname (NTXT ("Undefined:"), NULL);
+ break;
+ }
+ return dobj_name;
+}
+
+datatype_t*
+Dwr_type::get_datatype (Dwarf_cnt *ctx)
+{
+ if (dtype)
+ return dtype;
+ dtype = new datatype_t;
+ dtype->datatype_id = (unsigned) cu_die_offset;
+ dtype->memop_refs = 0;
+ dtype->event_data = 0;
+ dtype->dobj = NULL;
+ ctx->module->datatypes->incorporate (dtype, datatypeCmp);
+ return dtype;
+}
+
+DataObject *
+Dwr_type::get_dobj (Dwarf_cnt *ctx)
+{
+ if (dtype == NULL)
+ dtype = get_datatype (ctx);
+ dtype->memop_refs++;
+ DataObject *dobj = dtype->dobj;
+ if (dobj)
+ return dobj;
+
+ if (tag == 0)
+ dobj = dbeSession->find_dobj_by_name (PTXT (DOBJ_UNSPECIFIED));
+ else
+ {
+ dobj = dbeSession->createDataObject ();
+ dobj->size = size;
+ dobj->offset = offset;
+ dobj->scope = ctx->func ? (Histable*) ctx->func : (Histable*) ctx->module;
+ }
+ dtype->dobj = dobj;
+ if (parent)
+ {
+ Dwr_type *t = ctx->get_dwr_type (parent);
+ dobj->parent = t->get_dobj (ctx);
+ }
+
+ if (ref_type)
+ {
+ Dwr_type *t = ctx->get_dwr_type (ref_type);
+ t->get_dobj (ctx);
+ if (size == 0)
+ {
+ size = t->size;
+ dobj->size = size;
+ }
+ }
+
+ switch (tag)
+ {
+ case 0:
+ break;
+ case DW_TAG_array_type:
+ case DW_TAG_base_type:
+ case DW_TAG_unspecified_type:
+ case DW_TAG_enumeration_type:
+ case DW_TAG_typedef:
+ case DW_TAG_const_type:
+ case DW_TAG_volatile_type:
+ case DW_TAG_pointer_type:
+ case DW_TAG_reference_type:
+ dobj->set_dobjname (get_dobjname (ctx), NULL);
+ break;
+ case DW_TAG_structure_type:
+ case DW_TAG_union_type:
+ case DW_TAG_class_type:
+ dobj->set_dobjname (get_dobjname (ctx), NULL);
+ dobj->master = dbeSession->find_dobj_by_name (dobj_name);
+ get_dobj_for_members (ctx);
+ break;
+ case DW_TAG_constant:
+ case DW_TAG_formal_parameter:
+ case DW_TAG_member:
+ case DW_TAG_variable:
+ if (dobj->parent == NULL)
+ dobj->parent = dbeSession->get_Scalars_DataObject ();
+ dobj->set_dobjname (get_dobjname (ctx), name);
+ break;
+ default:
+ Dprintf (DUMP_DWARFLIB, NTXT ("DWARF_ERROR: %s:%d No case for %s cu_die_offset=%lld\n"),
+ get_basename (__FILE__), (int) __LINE__,
+ DwrCU::tag2str (tag), (long long) cu_die_offset);
+ break;
+ }
+ return dobj;
+}
+
+void
+Dwr_type::get_dobj_for_members (Dwarf_cnt *ctx)
+{
+ for (int64_t i = child; i != 0;)
+ {
+ Dwr_type *t = ctx->get_dwr_type (i);
+ t->get_dobj (ctx);
+ i = t->next;
+ }
+}
+
+//////////////////////////////////////////////////////////
+// class Dwarf
+Dwarf::Dwarf (Stabs *_stabs)
+{
+ stabs = _stabs;
+ status = Stabs::DBGD_ERR_NONE;
+ dwrCUs = 0;
+ debug_infoSec = NULL;
+ debug_abbrevSec = NULL;
+ debug_strSec = NULL;
+ debug_lineSec = NULL;
+ debug_rangesSec = NULL;
+ elf = stabs->openElf (true);
+ if (elf == NULL)
+ {
+ status = Stabs::DBGD_ERR_BAD_ELF_FORMAT;
+ return;
+ }
+ debug_infoSec = dwrGetSec (NTXT (".debug_info"));
+ if (debug_infoSec)
+ {
+ debug_infoSec->reloc = ElfReloc::get_elf_reloc (elf, NTXT (".rela.debug_info"), NULL);
+ debug_infoSec->reloc = ElfReloc::get_elf_reloc (elf, NTXT (".rel.debug_info"), debug_infoSec->reloc);
+ if (debug_infoSec->reloc)
+ debug_infoSec->reloc->dump ();
+ }
+ debug_abbrevSec = dwrGetSec (NTXT (".debug_abbrev"));
+ debug_strSec = dwrGetSec (NTXT (".debug_str"));
+ debug_lineSec = dwrGetSec (NTXT (".debug_line"));
+ debug_rangesSec = dwrGetSec (NTXT (".debug_ranges"));
+
+ if ((debug_infoSec == NULL) || (debug_abbrevSec == NULL) || (debug_lineSec == NULL))
+ {
+ status = Stabs::DBGD_ERR_NO_DWARF;
+ return;
+ }
+}
+
+Dwarf::~Dwarf ()
+{
+ delete debug_infoSec;
+ delete debug_abbrevSec;
+ delete debug_strSec;
+ delete debug_lineSec;
+ delete debug_rangesSec;
+ Destroy (dwrCUs);
+}
+
+DwrSec *
+Dwarf::dwrGetSec (const char *sec_name)
+{
+ int secN = elf->elf_get_sec_num (sec_name);
+ if (secN > 0)
+ {
+ Elf_Data *elfData = elf->elf_getdata (secN);
+ if (elfData)
+ return new DwrSec ((unsigned char *) elfData->d_buf, elfData->d_size,
+ elf->need_swap_endian,
+ elf->elf_getclass () == ELFCLASS32);
+ }
+ return NULL;
+}
+
+uint64_t
+DwrCU::get_low_pc ()
+{
+ uint64_t pc = Dwarf_addr (DW_AT_low_pc);
+ if (pc)
+ return pc;
+ return pc;
+}
+
+char *
+DwrCU::get_linkage_name ()
+{
+ char *nm = Dwarf_string (DW_AT_linkage_name);
+ if (nm != NULL)
+ return nm;
+ nm = Dwarf_string (DW_AT_SUN_link_name);
+ if (nm != NULL)
+ return nm;
+ return Dwarf_string (DW_AT_MIPS_linkage_name);
+}
+
+void
+DwrCU::parseChild (Dwarf_cnt *ctx)
+{
+ if (!dwrTag.hasChild)
+ return;
+ uint64_t old_size = debug_infoSec->size;
+ uint64_t next_die_offset = 0;
+ Dwarf_Die next_die;
+ if (read_ref_attr (DW_AT_sibling, &next_die) == DW_DLV_OK)
+ {
+ next_die_offset = next_die + cu_offset;
+ if (next_die_offset <= debug_infoSec->offset)
+ {
+ Dprintf (DEBUG_ERR_MSG, NTXT ("DwrCU::parseChild: next_die(0x%llx) <= debug_infoSec->offset(%llx)\n"),
+ (long long) next_die, (long long) debug_infoSec->offset);
+ next_die_offset = 0;
+ }
+ else if (debug_infoSec->size > next_die_offset)
+ debug_infoSec->size = next_die_offset;
+ }
+ dwrTag.level++;
+ ctx->level++;
+ for (;;)
+ {
+ if (set_die (0) != DW_DLV_OK)
+ break;
+ Function *func;
+ char *old_name;
+ int hasChild = dwrTag.hasChild;
+ switch (dwrTag.tag)
+ {
+ case DW_TAG_imported_declaration:
+ if (Stabs::is_fortran (ctx->module->lang_code))
+ {
+ char *link_name = Dwarf_string (DW_AT_name);
+ ctx->fortranMAIN = NULL;
+ parseChild (ctx);
+ hasChild = 0;
+ if (ctx->fortranMAIN)
+ {
+ ctx->fortranMAIN->set_match_name (link_name);
+ ctx->fortranMAIN = NULL;
+ }
+ }
+ break;
+ case DW_TAG_subprogram:
+ if (dwrTag.get_attr (DW_AT_abstract_origin))
+ break;
+ if (dwrTag.get_attr (DW_AT_declaration))
+ {
+ // Only declaration
+ if (Stabs::is_fortran (ctx->module->lang_code))
+ {
+ char *link_name = Dwarf_string (DW_AT_name);
+ if (link_name && streq (link_name, NTXT ("MAIN")))
+ ctx->fortranMAIN = Stabs::find_func (NTXT ("MAIN"), ctx->module->functions, true, true);
+ }
+ if (get_linkage_name () == NULL)
+ break;
+ }
+ func = append_Function (ctx);
+ if (func)
+ {
+ if (Stabs::is_fortran (ctx->module->lang_code) &&
+ streq (func->get_match_name (), NTXT ("MAIN")))
+ ctx->fortranMAIN = func;
+ old_name = ctx->name;
+ Function *old_func = ctx->func;
+ ctx->name = func->get_match_name ();
+ ctx->func = func;
+ parseChild (ctx);
+ hasChild = 0;
+ ctx->name = old_name;
+ ctx->func = old_func;
+ }
+ break;
+ case DW_TAG_module:
+ old_name = ctx->name;
+ ctx->name = Dwarf_string (DW_AT_SUN_link_name);
+ parseChild (ctx);
+ hasChild = 0;
+ ctx->name = old_name;
+ break;
+ case DW_TAG_class_type:
+ old_name = ctx->name;
+ ctx->name = Dwarf_string (DW_AT_name);
+ parseChild (ctx);
+ hasChild = 0;
+ ctx->name = old_name;
+ break;
+ case DW_TAG_structure_type:
+ old_name = ctx->name;
+ ctx->name = NULL;
+ parseChild (ctx);
+ hasChild = 0;
+ ctx->name = old_name;
+ break;
+ case DW_TAG_namespace:
+ old_name = ctx->name;
+ ctx->name = Dwarf_string (DW_AT_name);
+ parseChild (ctx);
+ hasChild = 0;
+ ctx->name = old_name;
+ break;
+ case DW_TAG_lexical_block:
+ old_name = ctx->name;
+ ctx->name = NULL;
+ parseChild (ctx);
+ hasChild = 0;
+ ctx->name = old_name;
+ break;
+ case DW_TAG_SUN_memop_info:
+ isMemop = true;
+ break;
+ case DW_TAG_inlined_subroutine:
+ if (ctx->module)
+ {
+ parse_inlined_subroutine (ctx);
+ hasChild = 0;
+ }
+ break;
+ default: // No more special cases
+ break;
+ }
+ if (hasChild)
+ parseChild (ctx);
+ }
+ ctx->level--;
+ dwrTag.level--;
+ if (next_die_offset != 0)
+ debug_infoSec->offset = next_die_offset;
+ debug_infoSec->size = old_size;
+}
+
+bool
+Dwarf::archive_Dwarf (LoadObject *lo)
+{
+ if (debug_infoSec == NULL)
+ return false;
+ if (dwrCUs)
+ return true;
+ dwrCUs = new Vector<DwrCU *>;
+
+ debug_infoSec->offset = 0;
+ while (debug_infoSec->offset < debug_infoSec->sizeSec)
+ {
+ DwrCU *dwrCU = new DwrCU (this);
+ dwrCUs->append (dwrCU);
+ debug_infoSec->size = debug_infoSec->sizeSec;
+ debug_infoSec->offset = dwrCU->next_cu_offset;
+
+ if (dwrCU->set_die (dwrCU->cu_header_offset) != DW_DLV_OK)
+ {
+ Dprintf (1, "DwrCU::archive_Dwarf: CU=%lld (offset=0x%llx); set_die(0x%llx) failed\n",
+ (long long) dwrCUs->size (), (long long) dwrCU->cu_offset,
+ (long long) dwrCU->cu_header_offset);
+ continue;
+ }
+
+ Module *mod = dwrCU->parse_cu_header (lo);
+ if (mod)
+ {
+ mod->hdrOffset = dwrCUs->size ();
+ DwrLineRegs *lineReg = dwrCU->get_dwrLineReg ();
+ dwrCU->srcFiles = new Vector<SourceFile *> (VecSize (lineReg->file_names));
+ for (long i = 0, sz = VecSize (lineReg->file_names); i < sz; i++)
+ {
+ char *fname = lineReg->getPath (i + 1);
+ SourceFile *sf = mod->findSource (fname, true);
+ dwrCU->srcFiles->append (sf);
+ }
+
+ Dwarf_cnt ctx;
+ ctx.module = mod;
+ dwrCU->parseChild (&ctx);
+ if (dwrCU->dwrInlinedSubrs && DUMP_DWARFLIB)
+ {
+ char msg[128];
+ char *lo_name = mod->loadobject ? mod->loadobject->get_name ()
+ : NULL;
+ snprintf (msg, sizeof (msg), NTXT ("\ndwrCUs[%lld]: %s:%s\n"),
+ (long long) dwrCUs->size (),
+ STR (lo_name), STR (mod->get_name ()));
+ dwrCU->dwrInlinedSubrs->dump (msg);
+ }
+ }
+ }
+ return true;
+}
+
+void
+Dwarf::srcline_Dwarf (Module *module)
+{
+ if (module == NULL || module->hdrOffset == 0)
+ return;
+ DwrCU *dwrCU = dwrCUs->get (module->hdrOffset - 1);
+ dwrCU->map_dwarf_lines (module);
+}
+
+
+// parse hwcprof info for given module in loadobject
+
+void
+Dwarf::read_hwcprof_info (Module *module)
+{
+ if (module->datatypes || (module->hdrOffset == 0))
+ return;
+ DwrCU *dwrCU = dwrCUs->get (module->hdrOffset - 1);
+ if (!dwrCU->isMemop)
+ return;
+ module->datatypes = new Vector<datatype_t*>;
+ if (dwrCU->set_die (dwrCU->cu_header_offset) != DW_DLV_OK)
+ {
+ Dprintf (1, "Dwarf::read_hwcprof_info: CU=%lld (offset=0x%llx); set_die(0x%llx) failed\n",
+ (long long) module->hdrOffset, (long long) dwrCU->cu_offset,
+ (long long) dwrCU->cu_header_offset);
+ return;
+ }
+ Dwarf_cnt ctx;
+ ctx.module = module;
+ ctx.cu_offset = dwrCU->cu_offset; // CU header offset;
+ ctx.dwr_types = new DefaultMap<int64_t, Dwr_type*>;
+ ctx.put_dwr_type (0, 0); // for DOBJ_UNSPECIFIED
+ dwrCU->read_hwcprof_info (&ctx);
+
+ Vector<inst_info_t*> *infoList = module->infoList;
+ Dprintf (DUMP_DWARFLIB,
+ "\n\n ### Dwarf::read_hwcprof_info: module: '%s' infoList->size()=%lld\n",
+ STR (module->get_name ()),
+ (long long) (infoList ? infoList->size () : -1));
+ for (int i = 0, sz = infoList ? infoList->size () : -1; i < sz; i++)
+ {
+ inst_info_t *ip = infoList->fetch (i);
+ memop_info_t *mp = ip->memop;
+ Dwr_type *t = ctx.get_dwr_type (mp->datatype_id);
+ t->get_dobj (&ctx);
+ }
+
+#ifdef DEBUG
+ Dprintf (DUMP_DWARFLIB,
+ "\n\n ### Dwarf::read_hwcprof_info: '%s' infoList->size()=%lld\n",
+ STR (module->get_name ()),
+ (long long) (infoList ? infoList->size () : 1));
+ for (int i = 0, sz = infoList ? infoList->size () : -1; i < sz; i++)
+ {
+ inst_info_t *ip = infoList->fetch (i);
+ memop_info_t *mp = ip->memop;
+ Dprintf (DUMP_DWARFLIB,
+ " %d id=%lld offset=%lld signature=%lld datatype_id=%lld \n",
+ i, (long long) mp->id, (long long) mp->offset,
+ (long long) mp->signature, (long long) mp->datatype_id);
+ }
+
+ Vector<int64_t> *keys = ctx.dwr_types->keySet ();
+ Dprintf (DUMP_DWARFLIB,
+ "\n\n ### Dwarf::read_hwcprof_info: '%s' keys->size()=%lld\n",
+ STR (module->get_name ()), (long long) (keys ? keys->size () : -1));
+ for (int i = 0, sz = keys->size (); i < sz; i++)
+ {
+ int64_t ind = keys->fetch (i);
+ Dwr_type *t = ctx.get_dwr_type (ind);
+ Dprintf (DUMP_DWARFLIB, NTXT (" %d %lld %s\n"), i,
+ (long long) ind, t->dump ());
+ }
+#endif
+}
+
+void
+DwrCU::read_hwcprof_info (Dwarf_cnt *ctx)
+{
+ if (!dwrTag.hasChild)
+ return;
+ uint64_t old_size = debug_infoSec->size;
+ uint64_t next_die_offset = 0;
+ Dwarf_Die next_die;
+ if (read_ref_attr (DW_AT_sibling, &next_die) == DW_DLV_OK)
+ {
+ next_die_offset = next_die + cu_offset;
+ if (next_die_offset <= debug_infoSec->offset)
+ next_die_offset = 0;
+ else if (debug_infoSec->size > next_die_offset)
+ debug_infoSec->size = next_die_offset;
+ }
+ dwrTag.level++;
+ ctx->level++;
+ for (;;)
+ {
+ if (set_die (0) != DW_DLV_OK)
+ break;
+ Dprintf (DUMP_DWARFLIB, NTXT ("%s:%d <%lld:%lld> cu_die=%lld %-15s\n"),
+ get_basename (__FILE__), (int) __LINE__, (long long) ctx->level,
+ (long long) dwrTag.die, (long long) dwrTag.offset,
+ DwrCU::tag2str (dwrTag.tag));
+ switch (dwrTag.tag)
+ {
+ case DW_TAG_SUN_memop_info:
+ {
+ if (ctx->func == NULL)
+ break;
+ Dwarf_Unsigned mid = Dwarf_data (DW_AT_SUN_profile_id);
+ Dwarf_Unsigned off = Dwarf_data (DW_AT_SUN_func_offset);
+ Dwarf_Unsigned sig = Dwarf_data (DW_AT_SUN_memop_signature);
+ Dwarf_Off ref = Dwarf_ref (DW_AT_SUN_memop_type_ref);
+
+ // define memop entry
+ memop_info_t *memop = new memop_info_t;
+ memop->id = (unsigned) mid;
+ memop->signature = (unsigned) sig;
+ memop->datatype_id = ref ? (unsigned) ref : 0;
+ memop->offset = (unsigned) (ctx->func->img_offset + off);
+
+ // define instop entry
+ inst_info_t *instop = new inst_info_t;
+ instop->type = CPF_INSTR_TYPE_PREFETCH; // XXXX UNKNOWN
+ instop->offset = memop->offset;
+ instop->memop = memop;
+ if (ctx->module->infoList == NULL)
+ ctx->module->infoList = new Vector<inst_info_t*>;
+ ctx->module->infoList->append (instop);
+ break;
+ }
+ case DW_TAG_SUN_codeflags:
+ {
+ if (ctx->func == NULL)
+ break;
+ Dwarf_Unsigned kind = Dwarf_data (DW_AT_SUN_cf_kind);
+ if (kind == DW_ATCF_SUN_branch_target)
+ {
+ DwrSec *secp = Dwarf_block (DW_AT_SUN_func_offsets);
+ if (secp)
+ {
+ int foffset = 0;
+ for (int i = 0; secp->offset < secp->size; i++)
+ {
+ int val = (int) secp->GetSLEB128 ();
+ if (i == 0 || val != 0)
+ {
+ foffset += val;
+ target_info_t *t = new target_info_t;
+ t->offset = (unsigned) (ctx->func->img_offset + foffset);
+ ctx->module->bTargets.incorporate (t, targetOffsetCmp);
+ }
+ }
+ delete(secp);
+ }
+ }
+ break;
+ }
+ case DW_TAG_subprogram:
+ {
+ Function *old_func = ctx->func;
+ if (dwrTag.get_attr (DW_AT_abstract_origin)
+ || dwrTag.get_attr (DW_AT_declaration))
+ ctx->func = NULL;
+ else
+ ctx->func = append_Function (ctx);
+ read_hwcprof_info (ctx);
+ ctx->func = old_func;
+ break;
+ }
+ case DW_TAG_base_type:
+ {
+ Dwr_type *t = ctx->put_dwr_type (dwrTag.die, dwrTag.tag);
+ t->name = Dwarf_string (DW_AT_name);
+ t->size = Dwarf_data (DW_AT_byte_size);
+ break;
+ }
+ case DW_TAG_unspecified_type:
+ ctx->put_dwr_type (dwrTag.die, dwrTag.tag);
+ break;
+ case DW_TAG_enumeration_type:
+ {
+ Dwr_type *t = ctx->put_dwr_type (dwrTag.die, dwrTag.tag);
+ t->name = Dwarf_string (DW_AT_name);
+ t->size = Dwarf_data (DW_AT_byte_size);
+ break;
+ }
+ case DW_TAG_constant:
+ case DW_TAG_formal_parameter:
+ case DW_TAG_variable:
+ case DW_TAG_typedef:
+ case DW_TAG_const_type:
+ case DW_TAG_volatile_type:
+ {
+ Dwr_type *t = ctx->put_dwr_type (dwrTag.die, dwrTag.tag);
+ t->name = Dwarf_string (DW_AT_name);
+ t->ref_type = Dwarf_ref (DW_AT_type);
+ break;
+ }
+ case DW_TAG_pointer_type:
+ case DW_TAG_reference_type:
+ {
+ Dwr_type *t = ctx->put_dwr_type (dwrTag.die, dwrTag.tag);
+ t->name = Dwarf_string (DW_AT_name);
+ t->ref_type = Dwarf_ref (DW_AT_type);
+ t->size = (dwarf->stabs->get_class () == W64) ? 8 : 4;
+ break;
+ }
+ case DW_TAG_array_type:
+ {
+ Dwr_type *t = ctx->put_dwr_type (dwrTag.die, dwrTag.tag);
+ t->name = Dwarf_string (DW_AT_name);
+ t->ref_type = Dwarf_ref (DW_AT_type);
+ t->size = Dwarf_data (DW_AT_byte_size);
+ ctx->size = -1;
+ read_hwcprof_info (ctx);
+ t->elems = ctx->size;
+ break;
+ }
+ case DW_TAG_subrange_type:
+ {
+ int64_t ref_type = Dwarf_ref (DW_AT_type);
+ int64_t hi = Dwarf_data (DW_AT_upper_bound);
+ int64_t lo = Dwarf_data (DW_AT_lower_bound);
+ int64_t ss = Dwarf_data (DW_AT_stride_size);
+ ctx->size = 1 + hi - lo;
+ if (ss != 0)
+ ctx->size /= ss;
+ Dprintf (DUMP_DWARFLIB,
+ "Got subrange [%lld:%lld:%lld] indexed <%lld>: size=%lld\n",
+ (long long) lo, (long long) hi, (long long) ss,
+ (long long) ref_type, (long long) ctx->size);
+ break;
+ }
+ case DW_TAG_structure_type:
+ case DW_TAG_union_type:
+ case DW_TAG_class_type:
+ {
+ Dwr_type *t = ctx->put_dwr_type (dwrTag.die, dwrTag.tag);
+ t->name = Dwarf_string (DW_AT_name);
+ t->size = Dwarf_data (DW_AT_byte_size);
+ t->extent = Dwarf_ref (DW_AT_sibling);
+ int64_t old_parent = ctx->parent;
+ ctx->parent = t->cu_die_offset;
+
+ char *old_name = ctx->name;
+ ctx->name = (dwrTag.tag == DW_TAG_class_type) ? Dwarf_string (DW_AT_name) : NULL;
+ read_hwcprof_info (ctx);
+ ctx->name = old_name;
+ ctx->parent = old_parent;
+ // Reverse children
+ for (int64_t i = t->child, last = 0; i != 0;)
+ {
+ Dwr_type *t1 = ctx->get_dwr_type (i);
+ t->child = i;
+ i = t1->next;
+ t1->next = last;
+ last = t->child;
+ }
+ break;
+ }
+ case DW_TAG_member:
+ {
+ if (ctx->parent == 0)
+ {
+ Dprintf (DUMP_DWARFLIB, NTXT ("DWARF_ERROR: %s:%d %s cu_die_offset=%lld\n"),
+ get_basename (__FILE__), (int) __LINE__,
+ DwrCU::tag2str (dwrTag.tag), (long long) dwrTag.die);
+ break;
+ }
+ Dwr_type *t = ctx->put_dwr_type (dwrTag.die, dwrTag.tag);
+ t->name = Dwarf_string (DW_AT_name);
+ t->ref_type = Dwarf_ref (DW_AT_type);
+ t->offset = Dwarf_location (DW_AT_data_member_location);
+ Dwr_type *parent = ctx->get_dwr_type (ctx->parent);
+ t->parent = ctx->parent;
+ t->next = parent->child; // a reverse order of members
+ parent->child = t->cu_die_offset;
+ t->bit_size = (uint32_t) Dwarf_data (DW_AT_bit_size);
+ break;
+ }
+ case DW_TAG_module:
+ {
+ char *old_name = ctx->name;
+ ctx->name = Dwarf_string (DW_AT_SUN_link_name);
+ read_hwcprof_info (ctx);
+ ctx->name = old_name;
+ break;
+ }
+ case DW_TAG_namespace:
+ {
+ char *old_name = ctx->name;
+ ctx->name = Dwarf_string (DW_AT_name);
+ read_hwcprof_info (ctx);
+ ctx->name = old_name;
+ break;
+ }
+ case DW_TAG_lexical_block:
+ {
+ char *old_name = ctx->name;
+ ctx->name = NULL;
+ read_hwcprof_info (ctx);
+ ctx->name = old_name;
+ break;
+ }
+ default: // No more special cases
+ read_hwcprof_info (ctx);
+ break;
+ }
+ }
+ ctx->level--;
+ dwrTag.level--;
+ if (next_die_offset != 0)
+ debug_infoSec->offset = next_die_offset;
+ debug_infoSec->size = old_size;
+}
+
+// Append function to module
+Function *
+DwrCU::append_Function (Dwarf_cnt *ctx)
+{
+ char *outerName = ctx->name, *name, tmpname[2048];
+ Function *func;
+ char *fname = Dwarf_string (DW_AT_name);
+ if (fname && outerName && !strchr (fname, '.'))
+ {
+ size_t outerlen = strlen (outerName);
+ if (outerlen > 0 && outerName[outerlen - 1] == '_')
+ {
+ outerlen--;
+ snprintf (tmpname, sizeof (tmpname), NTXT ("%s"), outerName);
+ snprintf (tmpname + outerlen, sizeof (tmpname) - outerlen, NTXT (".%s_"), fname);
+ }
+ else
+ snprintf (tmpname, sizeof (tmpname), NTXT ("%s.%s"), outerName, fname);
+ name = tmpname;
+ Dprintf (DUMP_DWARFLIB, NTXT ("Generated innerfunc name %s\n"), name);
+ }
+ else
+ name = fname;
+
+ char *link_name = get_linkage_name ();
+ if (link_name == NULL)
+ link_name = name;
+
+ uint64_t pc = get_low_pc ();
+ func = dwarf->stabs->append_Function (module, link_name, pc);
+ if (func != NULL)
+ {
+ int lineno = (int) Dwarf_data (DW_AT_decl_line);
+ func->set_match_name (name);
+ if (lineno > 0)
+ {
+ func->setLineFirst (lineno);
+ if (dwrLineReg == NULL)
+ dwrLineReg = new DwrLineRegs (new DwrSec (dwarf->debug_lineSec,
+ stmt_list_offset), comp_dir);
+ int fileno = ((int) Dwarf_data (DW_AT_decl_file)) - 1;
+ SourceFile *sf = ((fileno >= 0) && (fileno < VecSize (srcFiles))) ? srcFiles->get (fileno)
+ : module->getMainSrc ();
+ func->setDefSrc (sf);
+ func->pushSrcFile (func->def_source, 0);
+ func->popSrcFile ();
+ }
+ }
+ return func;
+}
+
+// Get language code
+Sp_lang_code
+DwrCU::Dwarf_lang ()
+{
+ char *str = Dwarf_string (DW_AT_producer);
+ if (str && strncmp (str, NTXT ("GNU"), 3) == 0)
+ isGNU = true;
+ int64_t lang = Dwarf_data (DW_AT_language);
+ switch (lang)
+ {
+ case DW_LANG_C89:
+ case DW_LANG_C:
+ return Sp_lang_c; // Sp_lang_ansic?
+ case DW_LANG_C99:
+ return Sp_lang_c99;
+ case DW_LANG_C_plus_plus:
+ return isGNU ? Sp_lang_gcc : Sp_lang_cplusplus;
+ case DW_LANG_Fortran90:
+ return Sp_lang_fortran90;
+ case DW_LANG_Fortran77:
+ return Sp_lang_fortran;
+ case DW_LANG_Java:
+ return Sp_lang_java;
+ case DW_LANG_Mips_Assembler:
+ case DW_LANG_SUN_Assembler:
+ return Sp_lang_asm;
+ case DW_LANG_Pascal83:
+ return Sp_lang_pascal;
+ default:
+ case DW_LANG_Ada83:
+ case DW_LANG_Cobol74:
+ case DW_LANG_Cobol85:
+ case DW_LANG_Modula2:
+ case DW_LANG_Ada95:
+ case DW_LANG_Fortran95:
+ case DW_LANG_lo_user:
+ return Sp_lang_unknown;
+ }
+}
diff --git a/gprofng/src/Dwarf.h b/gprofng/src/Dwarf.h
new file mode 100644
index 00000000000..12ffbc00264
--- /dev/null
+++ b/gprofng/src/Dwarf.h
@@ -0,0 +1,87 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _Dwarf_h_
+#define _Dwarf_h_ 1
+
+#include "dwarf2.h"
+
+#include "Stabs.h"
+#include "dbe_structs.h"
+#include "DwarfLib.h"
+
+enum
+{
+ /* ICC extensions */
+ DW_AT_icc_flags = 0x3b01,
+ DW_TAG_icc_compile_unit = 0x7000,
+
+ /* Sun extensions */
+ DW_ATCF_SUN_branch_target = 0x46,
+ DW_AT_SUN_command_line = 0x2205,
+ DW_AT_SUN_func_offsets = 0x2211,
+ DW_AT_SUN_cf_kind = 0x2212,
+ DW_AT_SUN_func_offset = 0x2216,
+ DW_AT_SUN_memop_type_ref = 0x2217,
+ DW_AT_SUN_profile_id = 0x2218,
+ DW_AT_SUN_memop_signature = 0x2219,
+ DW_AT_SUN_obj_dir = 0x2220,
+ DW_AT_SUN_obj_file = 0x2221,
+ DW_AT_SUN_original_name = 0x2222,
+ DW_AT_SUN_link_name = 0x2226,
+
+ DW_TAG_SUN_codeflags = 0x4206,
+ DW_TAG_SUN_memop_info = 0x4207,
+ DW_TAG_SUN_dtor_info = 0x420a,
+ DW_TAG_SUN_dtor = 0x420b,
+
+ DW_LANG_SUN_Assembler = 0x9001
+};
+
+
+class LoadObject;
+class Module;
+class DwrCU;
+class DwrSec;
+
+class Dwarf
+{
+public:
+ Dwarf (Stabs *_stabs);
+ ~Dwarf ();
+ bool archive_Dwarf (LoadObject *lo);
+ void srcline_Dwarf (Module *module);
+ void read_hwcprof_info (Module *module);
+
+ Stabs::Stab_status status;
+ Vector<DwrCU *> *dwrCUs;
+ DwrSec *debug_infoSec;
+ DwrSec *debug_abbrevSec;
+ DwrSec *debug_strSec;
+ DwrSec *debug_lineSec;
+ DwrSec *debug_rangesSec;
+ Elf *elf;
+ Stabs *stabs;
+
+private:
+ DwrSec *dwrGetSec (const char *sec_name);
+};
+
+#endif /* _Dwarf_h_ */
diff --git a/gprofng/src/DwarfLib.cc b/gprofng/src/DwarfLib.cc
new file mode 100644
index 00000000000..c8af0ab5e60
--- /dev/null
+++ b/gprofng/src/DwarfLib.cc
@@ -0,0 +1,2203 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <ctype.h>
+
+#include "util.h"
+#include "Dwarf.h"
+#include "DwarfLib.h"
+#include "Elf.h"
+#include "Function.h"
+#include "Module.h"
+#include "StringBuilder.h"
+#include "DbeArray.h"
+#include "DbeSession.h"
+
+#define CASE_S(x) case x: s = (char *) #x; break
+
+static char *
+gelf_st_type2str (int type)
+{
+ static char buf[128];
+ char *s;
+ switch (type)
+ {
+ CASE_S (STT_NOTYPE);
+ CASE_S (STT_OBJECT);
+ CASE_S (STT_FUNC);
+ CASE_S (STT_SECTION);
+ CASE_S (STT_FILE);
+ CASE_S (STT_COMMON);
+ CASE_S (STT_TLS);
+ // CASE_S(STT_NUM);
+ CASE_S (STT_LOPROC);
+ CASE_S (STT_HIPROC);
+ default: s = NTXT ("???");
+ break;
+ }
+ snprintf (buf, sizeof (buf), NTXT ("%s(%d)"), s, type);
+ buf[sizeof (buf) - 1] = 0;
+ return buf;
+}
+
+static char *
+special_opcode2str (int opcode)
+{
+ static char buf[128];
+ snprintf (buf, sizeof (buf), NTXT ("SpecialOpcode: %3d"), opcode);
+ buf[sizeof (buf) - 1] = 0;
+ return buf;
+}
+
+static char *
+extended_opcode2str (int opcode)
+{
+ static char buf[128];
+ char *s;
+ switch (opcode)
+ {
+ CASE_S (DW_LNE_end_sequence);
+ CASE_S (DW_LNE_set_address);
+ CASE_S (DW_LNE_define_file);
+ default:
+ snprintf (buf, sizeof (buf), NTXT ("??? (%d)"), opcode);
+ buf[sizeof (buf) - 1] = 0;
+ s = buf;
+ break;
+ }
+ return s;
+}
+
+static char *
+standard_opcode2str (int opcode)
+{
+ static char buf[128];
+ char *s;
+ switch (opcode)
+ {
+ CASE_S (DW_LNS_copy);
+ CASE_S (DW_LNS_advance_pc);
+ CASE_S (DW_LNS_advance_line);
+ CASE_S (DW_LNS_set_file);
+ CASE_S (DW_LNS_set_column);
+ CASE_S (DW_LNS_negate_stmt);
+ CASE_S (DW_LNS_set_basic_block);
+ CASE_S (DW_LNS_const_add_pc);
+ CASE_S (DW_LNS_fixed_advance_pc);
+ default:
+ snprintf (buf, sizeof (buf), NTXT ("??? (%d)"), opcode);
+ buf[sizeof (buf) - 1] = 0;
+ s = buf;
+ break;
+ }
+ return s;
+}
+
+template<> void Vector<DwrInlinedSubr *>
+::dump (const char *msg)
+{
+ Dprintf (1, NTXT ("%s Vector<DwrInlinedSubr *> [%lld]\n"),
+ msg ? msg : NTXT (""), (long long) size ());
+ for (long i = 0, sz = size (); i < sz; i++)
+ {
+ DwrInlinedSubr *p = get (i);
+ Dprintf (1, NTXT ("%ld: "), (long) i);
+ p->dump ();
+ }
+}
+
+template<> void Vector<DwrLine *>
+::dump (const char *msg)
+{
+ Dprintf (1, "%s Vector<DwrLine *> [%lld]:\n address [file line column]\n",
+ msg ? msg : NTXT (""), (long long) size ());
+ for (long i = 0, sz = size (); i < sz; i++)
+ {
+ DwrLine *lnp = get (i);
+ Dprintf (1, NTXT (" %2lld 0x%08llx [ %2lld, %lld, %lld ] \n"),
+ (long long) i, (long long) lnp->address, (long long) lnp->file,
+ (long long) lnp->line, (long long) lnp->column);
+ }
+ Dprintf (1, NTXT ("\n\n"));
+}
+
+//////////////////////////////////////////////////////////
+// class ElfReloc
+
+ElfReloc::ElfReloc (Elf *_elf)
+{
+ elf = _elf;
+ reloc = NULL;
+ cur_reloc_ind = 0;
+}
+
+ElfReloc::~ElfReloc ()
+{
+ if (reloc)
+ {
+ reloc->destroy ();
+ delete reloc;
+ }
+}
+
+void
+ElfReloc::dump_rela_debug_sec (int sec)
+{
+ if (!DUMP_RELA_SEC)
+ return;
+ Elf_Internal_Shdr *shdr = elf->get_shdr (sec);
+ if (shdr == NULL)
+ return;
+
+ Elf_Data *data = elf->elf_getdata (sec);
+ if (data == NULL)
+ return;
+
+ uint64_t ScnSize = data->d_size;
+ uint64_t EntSize = shdr->sh_entsize;
+ if (ScnSize == 0 || EntSize == 0)
+ return;
+
+ Elf_Internal_Shdr *shdr_sym = elf->get_shdr (shdr->sh_link);
+ if (shdr_sym == NULL)
+ return;
+ Elf_Data *data_sym = elf->elf_getdata (shdr->sh_link);
+ Elf_Data *data_str = elf->elf_getdata (shdr_sym->sh_link);
+ char *Strtab = data_str ? (char*) data_str->d_buf : NULL;
+ Elf_Internal_Rela rela;
+ int n, cnt = (int) (ScnSize / EntSize);
+
+ char *sec_name = elf->get_sec_name (sec);
+ if (sec_name == NULL) // It can not be, but let's check
+ return;
+ Dprintf (DUMP_RELA_SEC,
+ "======= DwarfLib::dump_rela_debug_sec Section:%2d '%s'\n",
+ sec, sec_name);
+ Dprintf (DUMP_RELA_SEC,
+ " N |addend| offset | r_info | stt_type |\n");
+ for (n = 0; n < cnt; n++)
+ {
+ if (strncmp (sec_name, NTXT (".rela."), 6) == 0)
+ elf->elf_getrela (data, n, &rela);
+ else
+ {
+ elf->elf_getrel (data, n, &rela);
+ rela.r_addend = 0;
+ }
+ int ndx = (int) GELF_R_SYM (rela.r_info);
+ Elf_Internal_Shdr *secHdr;
+ Elf_Internal_Sym sym;
+ elf->elf_getsym (data_sym, ndx, &sym);
+ Dprintf (DUMP_RELA_SEC, NTXT ("%3d:%5d |%11lld |0x%016llx | %-15s|"),
+ n, (int) rela.r_addend,
+ (long long) rela.r_offset, (long long) rela.r_info,
+ gelf_st_type2str ((int) GELF_ST_TYPE (sym.st_info)));
+ switch (GELF_ST_TYPE (sym.st_info))
+ {
+ case STT_FUNC:
+ case STT_OBJECT:
+ case STT_NOTYPE:
+ secHdr = elf->get_shdr (sym.st_shndx);
+ if (secHdr)
+ Dprintf (DUMP_RELA_SEC, NTXT (" img_offset=0x%llx"),
+ (long long) (sym.st_value + secHdr->sh_offset));
+ if (Strtab && sym.st_name)
+ Dprintf (DUMP_RELA_SEC, NTXT (" %s"), Strtab + sym.st_name);
+ break;
+ case STT_SECTION:
+ secHdr = elf->get_shdr (sym.st_shndx);
+ if (secHdr)
+ {
+ Dprintf (DUMP_RELA_SEC, NTXT (" value=0x%016llx (%lld)"),
+ (long long) (secHdr->sh_offset + rela.r_addend),
+ (long long) (secHdr->sh_offset + rela.r_addend));
+ }
+ break;
+ default:
+ break;
+ }
+ Dprintf (DUMP_RELA_SEC, NTXT ("\n"));
+ }
+ Dprintf (DUMP_RELA_SEC, NTXT ("\n"));
+}
+
+void
+ElfReloc::dump ()
+{
+ if (!DUMP_ELF_RELOC || (reloc == NULL) || (reloc->size () == 0))
+ return;
+ Dprintf (DUMP_ELF_RELOC, NTXT ("======= ElfReloc::dump\n"));
+ Dprintf (DUMP_ELF_RELOC, NTXT (" N | offset | value | STT_TYPE\n"));
+ for (int i = 0; i < reloc->size (); i++)
+ {
+ Sreloc *srlc = reloc->fetch (i);
+ Dprintf (DUMP_ELF_RELOC, NTXT ("%3d:%11lld |%11lld | %s\n"),
+ i, (long long) srlc->offset, (long long) srlc->value,
+ gelf_st_type2str (srlc->stt_type));
+ }
+ Dprintf (DUMP_ELF_RELOC, NTXT ("\n"));
+}
+
+static int
+DwrRelocOffsetCmp (const void *a, const void *b)
+{
+ ElfReloc::Sreloc *item1 = *((ElfReloc::Sreloc **) a);
+ ElfReloc::Sreloc *item2 = *((ElfReloc::Sreloc **) b);
+ return item1->offset < item2->offset ? -1 :
+ item1->offset == item2->offset ? 0 : 1;
+}
+
+ElfReloc *
+ElfReloc::get_elf_reloc (Elf *elfp, char *sec_name, ElfReloc *rlc)
+{
+ int et = elfp->elf_getehdr ()->e_type;
+ if (et == ET_EXEC || et == ET_DYN)
+ return rlc;
+ int sec = elfp->elf_get_sec_num (sec_name);
+ if (sec == 0)
+ return rlc;
+ Elf_Internal_Shdr *shdr = elfp->get_shdr (sec);
+ if (shdr == NULL || shdr->sh_entsize == 0)
+ return rlc;
+
+ Elf_Data *data = elfp->elf_getdata (sec);
+ if (data == NULL || data->d_size == 0)
+ return rlc;
+
+ int cnt = (int) (data->d_size / shdr->sh_entsize);
+ Elf_Internal_Shdr *shdr_sym = elfp->get_shdr (shdr->sh_link);
+ if (shdr_sym == NULL)
+ return rlc;
+ Elf_Data *data_sym = elfp->elf_getdata (shdr->sh_link);
+ Vector<Sreloc *> *vp = NULL;
+
+ for (int n = 0; n < cnt; n++)
+ {
+ Elf_Internal_Shdr *secHdr;
+ Sreloc *srlc;
+ Elf_Internal_Rela rela;
+ if (strncmp (sec_name, NTXT (".rela."), 6) == 0)
+ elfp->elf_getrela (data, n, &rela);
+ else
+ {
+ elfp->elf_getrel (data, n, &rela);
+ rela.r_addend = 0;
+ }
+ int ndx = (int) GELF_R_SYM (rela.r_info);
+ Elf_Internal_Sym sym;
+ elfp->elf_getsym (data_sym, ndx, &sym);
+
+ srlc = new Sreloc;
+ srlc->offset = rela.r_offset;
+ srlc->value = 0;
+ srlc->stt_type = (int) GELF_ST_TYPE (sym.st_info);
+ switch (GELF_ST_TYPE (sym.st_info))
+ {
+ case STT_FUNC:
+ secHdr = elfp->get_shdr (sym.st_shndx);
+ if (secHdr)
+ srlc->value = secHdr->sh_offset + sym.st_value;
+ break;
+ case STT_OBJECT:
+ case STT_NOTYPE:
+ secHdr = elfp->get_shdr (shdr->sh_info);
+ if (secHdr)
+ {
+ srlc->offset = rela.r_info;
+ srlc->value = secHdr->sh_offset + rela.r_addend;
+ }
+ break;
+ case STT_SECTION:
+ secHdr = elfp->get_shdr (sym.st_shndx);
+ if (secHdr)
+ srlc->value = rela.r_addend;
+ break;
+ default:
+ srlc->value = 0;
+ break;
+ }
+ if (rlc == NULL)
+ {
+ rlc = new ElfReloc (elfp);
+ vp = rlc->reloc;
+ }
+ if (vp == NULL)
+ {
+ vp = new Vector<Sreloc*>;
+ rlc->reloc = vp;
+ }
+ vp->append (srlc);
+ }
+ if (vp)
+ vp->sort (DwrRelocOffsetCmp);
+ if (rlc)
+ {
+ rlc->dump_rela_debug_sec (sec);
+ rlc->dump ();
+ }
+ return rlc;
+}
+
+long long
+ElfReloc::get_reloc_addr (long long offset)
+{
+ Sreloc *srlc;
+ int i = cur_reloc_ind - 1;
+ if (i >= 0 && i < reloc->size ())
+ {
+ srlc = reloc->fetch (i);
+ if (srlc->offset > offset) // need to reset
+ cur_reloc_ind = 0;
+ }
+ for (; cur_reloc_ind < reloc->size (); cur_reloc_ind++)
+ {
+ srlc = reloc->fetch (cur_reloc_ind);
+ if (srlc->offset == offset)
+ return srlc->value;
+ if (srlc->offset > offset)
+ return 0;
+ }
+ return 0;
+}
+
+DwrLocation *
+DwrCU::dwr_get_location (DwrSec *secp, DwrLocation *lp)
+{
+ lp->offset = secp->offset;
+ lp->lc_number = 0;
+ lp->lc_number2 = 0;
+ lp->op = secp->Get_8 ();
+ switch (lp->op)
+ {
+ // registers
+ case DW_OP_reg0:
+ case DW_OP_reg1:
+ case DW_OP_reg2:
+ case DW_OP_reg3:
+ case DW_OP_reg4:
+ case DW_OP_reg5:
+ case DW_OP_reg6:
+ case DW_OP_reg7:
+ case DW_OP_reg8:
+ case DW_OP_reg9:
+ case DW_OP_reg10:
+ case DW_OP_reg11:
+ case DW_OP_reg12:
+ case DW_OP_reg13:
+ case DW_OP_reg14:
+ case DW_OP_reg15:
+ case DW_OP_reg16:
+ case DW_OP_reg17:
+ case DW_OP_reg18:
+ case DW_OP_reg19:
+ case DW_OP_reg20:
+ case DW_OP_reg21:
+ case DW_OP_reg22:
+ case DW_OP_reg23:
+ case DW_OP_reg24:
+ case DW_OP_reg25:
+ case DW_OP_reg26:
+ case DW_OP_reg27:
+ case DW_OP_reg28:
+ case DW_OP_reg29:
+ case DW_OP_reg30:
+ case DW_OP_reg31:
+ break;
+ case DW_OP_regx:
+ lp->lc_number = secp->GetULEB128 ();
+ break;
+ case DW_OP_breg0:
+ case DW_OP_breg1:
+ case DW_OP_breg2:
+ case DW_OP_breg3:
+ case DW_OP_breg4:
+ case DW_OP_breg5:
+ case DW_OP_breg6:
+ case DW_OP_breg7:
+ case DW_OP_breg8:
+ case DW_OP_breg9:
+ case DW_OP_breg10:
+ case DW_OP_breg11:
+ case DW_OP_breg12:
+ case DW_OP_breg13:
+ case DW_OP_breg14:
+ case DW_OP_breg15:
+ case DW_OP_breg16:
+ case DW_OP_breg17:
+ case DW_OP_breg18:
+ case DW_OP_breg19:
+ case DW_OP_breg20:
+ case DW_OP_breg21:
+ case DW_OP_breg22:
+ case DW_OP_breg23:
+ case DW_OP_breg24:
+ case DW_OP_breg25:
+ case DW_OP_breg26:
+ case DW_OP_breg27:
+ case DW_OP_breg28:
+ case DW_OP_breg29:
+ case DW_OP_breg30:
+ case DW_OP_breg31:
+ lp->lc_number = secp->GetSLEB128 ();
+ break;
+ case DW_OP_fbreg:
+ lp->lc_number = secp->GetSLEB128 ();
+ break;
+ case DW_OP_bregx:
+ lp->lc_number = secp->GetULEB128 ();
+ lp->lc_number2 = secp->GetSLEB128 ();
+ break;
+ case DW_OP_lit0:
+ case DW_OP_lit1:
+ case DW_OP_lit2:
+ case DW_OP_lit3:
+ case DW_OP_lit4:
+ case DW_OP_lit5:
+ case DW_OP_lit6:
+ case DW_OP_lit7:
+ case DW_OP_lit8:
+ case DW_OP_lit9:
+ case DW_OP_lit10:
+ case DW_OP_lit11:
+ case DW_OP_lit12:
+ case DW_OP_lit13:
+ case DW_OP_lit14:
+ case DW_OP_lit15:
+ case DW_OP_lit16:
+ case DW_OP_lit17:
+ case DW_OP_lit18:
+ case DW_OP_lit19:
+ case DW_OP_lit20:
+ case DW_OP_lit21:
+ case DW_OP_lit22:
+ case DW_OP_lit23:
+ case DW_OP_lit24:
+ case DW_OP_lit25:
+ case DW_OP_lit26:
+ case DW_OP_lit27:
+ case DW_OP_lit28:
+ case DW_OP_lit29:
+ case DW_OP_lit30:
+ case DW_OP_lit31:
+ lp->lc_number = lp->op - DW_OP_lit0;
+ break;
+ case DW_OP_addr:
+ lp->lc_number = secp->GetADDR ();
+ break;
+ case DW_OP_const1u:
+ lp->lc_number = secp->Get_8 ();
+ break;
+ case DW_OP_const1s:
+ {
+ signed char x;
+ x = secp->Get_8 ();
+ lp->lc_number = x;
+ }
+ break;
+ case DW_OP_const2u:
+ lp->lc_number = secp->Get_16 ();
+ break;
+ case DW_OP_const2s:
+ {
+ signed short x;
+ x = secp->Get_16 ();
+ lp->lc_number = x;
+ }
+ break;
+ case DW_OP_const4u:
+ lp->lc_number = secp->Get_32 ();
+ break;
+ case DW_OP_const4s:
+ {
+ signed int x;
+ x = secp->Get_32 ();
+ lp->lc_number = x;
+ }
+ break;
+ case DW_OP_const8u:
+ lp->lc_number = secp->Get_64 ();
+ break;
+ case DW_OP_const8s:
+ {
+ signed long long x;
+ x = secp->Get_64 ();
+ lp->lc_number = x;
+ }
+ break;
+ case DW_OP_plus_uconst:
+ case DW_OP_constu:
+ lp->lc_number = secp->GetULEB128 ();
+ break;
+ case DW_OP_consts:
+ lp->lc_number = secp->GetSLEB128 ();
+ break;
+
+ // Stack operations
+ case DW_OP_pick:
+ case DW_OP_deref_size:
+ case DW_OP_xderef_size:
+ lp->lc_number = secp->Get_8 ();
+ break;
+ case DW_OP_dup:
+ case DW_OP_drop:
+ case DW_OP_over:
+ case DW_OP_swap:
+ case DW_OP_rot:
+ case DW_OP_deref:
+ case DW_OP_xderef:
+ // Arithmetic and Logical Operations
+ case DW_OP_abs:
+ case DW_OP_and:
+ case DW_OP_div:
+ case DW_OP_minus:
+ case DW_OP_mod:
+ case DW_OP_mul:
+ case DW_OP_neg:
+ case DW_OP_not:
+ case DW_OP_or:
+ case DW_OP_plus:
+ case DW_OP_shl:
+ case DW_OP_shr:
+ case DW_OP_shra:
+ case DW_OP_xor:
+ case DW_OP_le:
+ case DW_OP_ge:
+ case DW_OP_eq:
+ case DW_OP_lt:
+ case DW_OP_gt:
+ case DW_OP_ne:
+ case DW_OP_nop:
+ break;
+ case DW_OP_skip:
+ case DW_OP_bra:
+ lp->lc_number = secp->Get_16 ();
+ break;
+ case DW_OP_piece:
+ lp->lc_number = secp->GetULEB128 ();
+ break;
+ case DW_OP_push_object_address: /* DWARF3 */
+ break;
+ case DW_OP_call2: /* DWARF3 */
+ lp->lc_number = secp->Get_16 ();
+ break;
+ case DW_OP_call4: /* DWARF3 */
+ lp->lc_number = secp->Get_32 ();
+ break;
+ case DW_OP_call_ref: /* DWARF3 */
+ lp->lc_number = secp->GetADDR ();
+ break;
+ default:
+ return (NULL);
+ }
+ return lp;
+}
+
+char *
+DwrCU::tag2str (int tag)
+{
+ static char buf[128];
+ char *s;
+
+ switch (tag)
+ {
+ CASE_S (DW_TAG_array_type);
+ CASE_S (DW_TAG_class_type);
+ CASE_S (DW_TAG_entry_point);
+ CASE_S (DW_TAG_enumeration_type);
+ CASE_S (DW_TAG_formal_parameter);
+ CASE_S (DW_TAG_imported_declaration);
+ CASE_S (DW_TAG_label);
+ CASE_S (DW_TAG_lexical_block);
+ CASE_S (DW_TAG_member);
+ CASE_S (DW_TAG_pointer_type);
+ CASE_S (DW_TAG_reference_type);
+ CASE_S (DW_TAG_compile_unit);
+ CASE_S (DW_TAG_string_type);
+ CASE_S (DW_TAG_structure_type);
+ CASE_S (DW_TAG_subroutine_type);
+ CASE_S (DW_TAG_typedef);
+ CASE_S (DW_TAG_union_type);
+ CASE_S (DW_TAG_unspecified_parameters);
+ CASE_S (DW_TAG_variant);
+ CASE_S (DW_TAG_common_block);
+ CASE_S (DW_TAG_common_inclusion);
+ CASE_S (DW_TAG_inheritance);
+ CASE_S (DW_TAG_inlined_subroutine);
+ CASE_S (DW_TAG_module);
+ CASE_S (DW_TAG_ptr_to_member_type);
+ CASE_S (DW_TAG_set_type);
+ CASE_S (DW_TAG_subrange_type);
+ CASE_S (DW_TAG_with_stmt);
+ CASE_S (DW_TAG_access_declaration);
+ CASE_S (DW_TAG_base_type);
+ CASE_S (DW_TAG_catch_block);
+ CASE_S (DW_TAG_const_type);
+ CASE_S (DW_TAG_constant);
+ CASE_S (DW_TAG_enumerator);
+ CASE_S (DW_TAG_file_type);
+ CASE_S (DW_TAG_friend);
+ CASE_S (DW_TAG_namelist);
+ CASE_S (DW_TAG_namelist_item);
+ CASE_S (DW_TAG_packed_type);
+ CASE_S (DW_TAG_subprogram);
+ CASE_S (DW_TAG_template_type_param);
+ CASE_S (DW_TAG_template_value_param);
+ CASE_S (DW_TAG_thrown_type);
+ CASE_S (DW_TAG_try_block);
+ CASE_S (DW_TAG_variant_part);
+ CASE_S (DW_TAG_variable);
+ CASE_S (DW_TAG_volatile_type);
+ CASE_S (DW_TAG_dwarf_procedure);
+ CASE_S (DW_TAG_restrict_type);
+ CASE_S (DW_TAG_interface_type);
+ CASE_S (DW_TAG_namespace);
+ CASE_S (DW_TAG_imported_module);
+ CASE_S (DW_TAG_unspecified_type);
+ CASE_S (DW_TAG_partial_unit);
+ CASE_S (DW_TAG_imported_unit);
+ CASE_S (DW_TAG_lo_user);
+ CASE_S (DW_TAG_MIPS_loop);
+ CASE_S (DW_TAG_format_label);
+ CASE_S (DW_TAG_function_template);
+ CASE_S (DW_TAG_class_template);
+ CASE_S (DW_TAG_GNU_BINCL);
+ CASE_S (DW_TAG_GNU_EINCL);
+ CASE_S (DW_TAG_GNU_call_site);
+ CASE_S (DW_TAG_GNU_call_site_parameter);
+ CASE_S (DW_TAG_SUN_codeflags);
+ CASE_S (DW_TAG_SUN_memop_info);
+ CASE_S (DW_TAG_hi_user);
+ CASE_S (DW_TAG_icc_compile_unit);
+ default: s = NTXT ("???");
+ break;
+ }
+ snprintf (buf, sizeof (buf), NTXT ("%s(%d)"), s, tag);
+ buf[sizeof (buf) - 1] = 0;
+ return buf;
+}
+
+char *
+DwrCU::at2str (int tag)
+{
+ static char buf[128];
+ char *s;
+ switch (tag)
+ {
+ CASE_S (DW_AT_sibling);
+ CASE_S (DW_AT_location);
+ CASE_S (DW_AT_name);
+ CASE_S (DW_AT_ordering);
+ CASE_S (DW_AT_subscr_data);
+ CASE_S (DW_AT_byte_size);
+ CASE_S (DW_AT_bit_offset);
+ CASE_S (DW_AT_bit_size);
+ CASE_S (DW_AT_element_list);
+ CASE_S (DW_AT_stmt_list);
+ CASE_S (DW_AT_low_pc);
+ CASE_S (DW_AT_high_pc);
+ CASE_S (DW_AT_language);
+ CASE_S (DW_AT_member);
+ CASE_S (DW_AT_discr);
+ CASE_S (DW_AT_discr_value);
+ CASE_S (DW_AT_visibility);
+ CASE_S (DW_AT_import);
+ CASE_S (DW_AT_string_length);
+ CASE_S (DW_AT_common_reference);
+ CASE_S (DW_AT_comp_dir);
+ CASE_S (DW_AT_const_value);
+ CASE_S (DW_AT_containing_type);
+ CASE_S (DW_AT_default_value);
+ CASE_S (DW_AT_inline);
+ CASE_S (DW_AT_is_optional);
+ CASE_S (DW_AT_lower_bound);
+ CASE_S (DW_AT_producer);
+ CASE_S (DW_AT_prototyped);
+ CASE_S (DW_AT_return_addr);
+ CASE_S (DW_AT_start_scope);
+ CASE_S (DW_AT_stride_size);
+ CASE_S (DW_AT_upper_bound);
+ CASE_S (DW_AT_abstract_origin);
+ CASE_S (DW_AT_accessibility);
+ CASE_S (DW_AT_address_class);
+ CASE_S (DW_AT_artificial);
+ CASE_S (DW_AT_base_types);
+ CASE_S (DW_AT_calling_convention);
+ CASE_S (DW_AT_count);
+ CASE_S (DW_AT_data_member_location);
+ CASE_S (DW_AT_decl_column);
+ CASE_S (DW_AT_decl_file);
+ CASE_S (DW_AT_decl_line);
+ CASE_S (DW_AT_declaration);
+ CASE_S (DW_AT_discr_list);
+ CASE_S (DW_AT_encoding);
+ CASE_S (DW_AT_external);
+ CASE_S (DW_AT_frame_base);
+ CASE_S (DW_AT_friend);
+ CASE_S (DW_AT_identifier_case);
+ CASE_S (DW_AT_macro_info);
+ CASE_S (DW_AT_namelist_item);
+ CASE_S (DW_AT_priority);
+ CASE_S (DW_AT_segment);
+ CASE_S (DW_AT_specification);
+ CASE_S (DW_AT_static_link);
+ CASE_S (DW_AT_type);
+ CASE_S (DW_AT_use_location);
+ CASE_S (DW_AT_variable_parameter);
+ CASE_S (DW_AT_virtuality);
+ CASE_S (DW_AT_vtable_elem_location);
+ CASE_S (DW_AT_allocated);
+ CASE_S (DW_AT_associated);
+ CASE_S (DW_AT_data_location);
+ CASE_S (DW_AT_byte_stride);
+ CASE_S (DW_AT_entry_pc);
+ CASE_S (DW_AT_use_UTF8);
+ CASE_S (DW_AT_extension);
+ CASE_S (DW_AT_ranges);
+ CASE_S (DW_AT_trampoline);
+ CASE_S (DW_AT_call_column);
+ CASE_S (DW_AT_call_file);
+ CASE_S (DW_AT_call_line);
+ CASE_S (DW_AT_description);
+ CASE_S (DW_AT_binary_scale);
+ CASE_S (DW_AT_decimal_scale);
+ CASE_S (DW_AT_small);
+ CASE_S (DW_AT_decimal_sign);
+ CASE_S (DW_AT_digit_count);
+ CASE_S (DW_AT_picture_string);
+ CASE_S (DW_AT_mutable);
+ CASE_S (DW_AT_threads_scaled);
+ CASE_S (DW_AT_explicit);
+ CASE_S (DW_AT_object_pointer);
+ CASE_S (DW_AT_endianity);
+ CASE_S (DW_AT_elemental);
+ CASE_S (DW_AT_pure);
+ CASE_S (DW_AT_recursive);
+ CASE_S (DW_AT_signature);
+ CASE_S (DW_AT_main_subprogram);
+ CASE_S (DW_AT_data_bit_offset);
+ CASE_S (DW_AT_const_expr);
+ CASE_S (DW_AT_enum_class);
+ CASE_S (DW_AT_linkage_name);
+ CASE_S (DW_AT_lo_user);
+ CASE_S (DW_AT_MIPS_fde);
+ CASE_S (DW_AT_MIPS_loop_begin);
+ CASE_S (DW_AT_MIPS_tail_loop_begin);
+ CASE_S (DW_AT_MIPS_epilog_begin);
+ CASE_S (DW_AT_MIPS_loop_unroll_factor);
+ CASE_S (DW_AT_MIPS_software_pipeline_depth);
+ CASE_S (DW_AT_MIPS_linkage_name);
+ CASE_S (DW_AT_MIPS_stride);
+ CASE_S (DW_AT_MIPS_abstract_name);
+ CASE_S (DW_AT_MIPS_clone_origin);
+ CASE_S (DW_AT_MIPS_has_inlines);
+ CASE_S (DW_AT_sf_names);
+ CASE_S (DW_AT_src_info);
+ CASE_S (DW_AT_mac_info);
+ CASE_S (DW_AT_src_coords);
+ CASE_S (DW_AT_body_begin);
+ CASE_S (DW_AT_body_end);
+ CASE_S (DW_AT_GNU_vector);
+ CASE_S (DW_AT_GNU_guarded_by);
+ CASE_S (DW_AT_GNU_pt_guarded_by);
+ CASE_S (DW_AT_GNU_guarded);
+ CASE_S (DW_AT_GNU_pt_guarded);
+ CASE_S (DW_AT_GNU_locks_excluded);
+ CASE_S (DW_AT_GNU_exclusive_locks_required);
+ CASE_S (DW_AT_GNU_shared_locks_required);
+ CASE_S (DW_AT_GNU_odr_signature);
+ CASE_S (DW_AT_GNU_template_name);
+ CASE_S (DW_AT_GNU_call_site_value);
+ CASE_S (DW_AT_GNU_call_site_data_value);
+ CASE_S (DW_AT_GNU_call_site_target);
+ CASE_S (DW_AT_GNU_call_site_target_clobbered);
+ CASE_S (DW_AT_GNU_tail_call);
+ CASE_S (DW_AT_GNU_all_tail_call_sites);
+ CASE_S (DW_AT_GNU_all_call_sites);
+ CASE_S (DW_AT_GNU_all_source_call_sites);
+ CASE_S (DW_AT_SUN_command_line);
+ CASE_S (DW_AT_SUN_func_offsets);
+ CASE_S (DW_AT_SUN_cf_kind);
+ CASE_S (DW_AT_SUN_func_offset);
+ CASE_S (DW_AT_SUN_memop_type_ref);
+ CASE_S (DW_AT_SUN_profile_id);
+ CASE_S (DW_AT_SUN_memop_signature);
+ CASE_S (DW_AT_SUN_obj_dir);
+ CASE_S (DW_AT_SUN_obj_file);
+ CASE_S (DW_AT_SUN_original_name);
+ CASE_S (DW_AT_SUN_link_name);
+ CASE_S (DW_AT_hi_user);
+ CASE_S (DW_AT_icc_flags);
+ default: s = NTXT ("???");
+ break;
+ }
+ snprintf (buf, sizeof (buf), NTXT ("%s(%d)"), s, tag);
+ buf[sizeof (buf) - 1] = 0;
+ return buf;
+}
+
+char *
+DwrCU::form2str (int tag)
+{
+ static char buf[128];
+ char *s;
+ switch (tag)
+ {
+ CASE_S (DW_FORM_addr);
+ CASE_S (DW_FORM_block2);
+ CASE_S (DW_FORM_block4);
+ CASE_S (DW_FORM_data2);
+ CASE_S (DW_FORM_data4);
+ CASE_S (DW_FORM_data8);
+ CASE_S (DW_FORM_string);
+ CASE_S (DW_FORM_block);
+ CASE_S (DW_FORM_block1);
+ CASE_S (DW_FORM_data1);
+ CASE_S (DW_FORM_flag);
+ CASE_S (DW_FORM_sdata);
+ CASE_S (DW_FORM_strp);
+ CASE_S (DW_FORM_udata);
+ CASE_S (DW_FORM_ref_addr);
+ CASE_S (DW_FORM_ref1);
+ CASE_S (DW_FORM_ref2);
+ CASE_S (DW_FORM_ref4);
+ CASE_S (DW_FORM_ref8);
+ CASE_S (DW_FORM_ref_udata);
+ CASE_S (DW_FORM_indirect);
+ CASE_S (DW_FORM_sec_offset);
+ CASE_S (DW_FORM_exprloc);
+ CASE_S (DW_FORM_flag_present);
+ CASE_S (DW_FORM_ref_sig8);
+ default: s = NTXT ("???");
+ break;
+ }
+ snprintf (buf, sizeof (buf), NTXT ("%s(%d)"), s, tag);
+ buf[sizeof (buf) - 1] = 0;
+ return buf;
+}
+
+void
+Dwr_Tag::dump ()
+{
+ Dprintf (DUMP_DWARFLIB,
+ "\n<%2d>:<0x%08llx> %-30s <abbrev %lld> offset=0x%llx %s\n",
+ (int) level, (long long) die, DwrCU::tag2str (tag), (long long) num,
+ (long long) offset,
+ hasChild ? NTXT ("DW_children_yes") : NTXT ("DW_children_no"));
+ for (int i1 = firstAttribute; i1 < lastAttribute; i1++)
+ {
+ Dwr_Attr *atrp = abbrevAtForm->get (i1);
+ Dprintf (DUMP_DWARFLIB, " %-30s ", DwrCU::at2str (atrp->at_name));
+ switch (atrp->at_form)
+ {
+ case DW_FORM_strp:
+ case DW_FORM_string:
+ Dprintf (DUMP_DWARFLIB, " \"%s\" len=%ld",
+ atrp->u.str ? atrp->u.str : NTXT ("<NULL>"),
+ (long) atrp->len);
+ break;
+ case DW_FORM_block:
+ case DW_FORM_block1:
+ case DW_FORM_block2:
+ case DW_FORM_block4:
+ Dprintf (DUMP_DWARFLIB, " len=%3ld %p", (long) atrp->len,
+ atrp->u.str);
+ break;
+ case DW_FORM_addr:
+ case DW_FORM_data2:
+ case DW_FORM_data4:
+ case DW_FORM_data8:
+ case DW_FORM_data1:
+ case DW_FORM_flag:
+ case DW_FORM_sdata:
+ case DW_FORM_udata:
+ case DW_FORM_ref_addr:
+ case DW_FORM_ref1:
+ case DW_FORM_ref2:
+ case DW_FORM_ref4:
+ case DW_FORM_ref8:
+ case DW_FORM_ref_udata:
+ case DW_FORM_indirect:
+ case DW_FORM_sec_offset:
+ case DW_FORM_exprloc:
+ case DW_FORM_ref_sig8:
+ case DW_FORM_flag_present:
+ Dprintf (DUMP_DWARFLIB, " 0x%llx (%lld)", (long long) atrp->u.val,
+ (long long) atrp->u.val);
+ break;
+ default:
+ DEBUG_CODE
+ {
+ Dprintf (1, "Attribute form 0x%llx (%lld) is not implemented\n",
+ (long long) atrp->at_form, (long long) atrp->at_form);
+ assert (false);
+ }
+ }
+ Dprintf (DUMP_DWARFLIB, NTXT ("\n"));
+ }
+}
+
+
+//////////////////////////////////////////////////////////
+// class DwrSec
+
+DwrSec::DwrSec (unsigned char *_data, uint64_t _size, bool _need_swap_endian, bool _addr32)
+{
+ isCopy = false;
+ data = _data;
+ sizeSec = _size;
+ size = (data ? _size : 0);
+ offset = 0;
+ fmt64 = false;
+ reloc = NULL;
+ need_swap_endian = _need_swap_endian;
+ addr32 = _addr32;
+}
+
+DwrSec::DwrSec (DwrSec *secp, uint64_t _offset)
+{
+ isCopy = true;
+ data = secp->data;
+ sizeSec = secp->sizeSec;
+ size = secp->size;
+ offset = _offset;
+ fmt64 = secp->fmt64;
+ reloc = secp->reloc;
+ need_swap_endian = secp->need_swap_endian;
+ addr32 = secp->addr32;
+}
+
+DwrSec::~DwrSec ()
+{
+ if (!isCopy)
+ delete reloc;
+}
+
+bool
+DwrSec::bounds_violation (uint64_t sz)
+{
+ if (offset + sz > size)
+ {
+ Dprintf (DEBUG_ERR_MSG, "DwrSec::bounds_violation: offset=%lld + sz=%lld > size=%lld\n",
+ (long long) offset, (long long) sz, (long long) size);
+ return true;
+ }
+ return false;
+}
+
+uint64_t
+DwrSec::ReadLength ()
+{
+ fmt64 = false;
+ uint64_t val = Get_32 ();
+ if (((uint32_t) val) == 0xffffffff)
+ {
+ fmt64 = true;
+ val = Get_64 ();
+ }
+ size = (val + offset < sizeSec) ? val + offset : sizeSec;
+ return size;
+}
+
+unsigned char
+DwrSec::Get_8 ()
+{
+ unsigned char n = 0;
+ if (bounds_violation (sizeof (char)))
+ return n;
+ n = data[offset];
+ offset += sizeof (char);
+ return n;
+}
+
+unsigned short
+DwrSec::Get_16 ()
+{
+ unsigned short n = 0;
+ if (bounds_violation (sizeof (short)))
+ return n;
+ memcpy ((char *) &n, data + offset, sizeof (short));
+ offset += sizeof (short);
+ if (need_swap_endian)
+ SWAP_ENDIAN (n);
+ return n;
+}
+
+uint32_t
+DwrSec::Get_32 ()
+{
+ uint32_t n = 0;
+ if (bounds_violation (sizeof (uint32_t)))
+ return n;
+ memcpy ((char *) &n, data + offset, sizeof (uint32_t));
+ offset += sizeof (uint32_t);
+ if (need_swap_endian)
+ SWAP_ENDIAN (n);
+ return n;
+}
+
+uint64_t
+DwrSec::Get_64 ()
+{
+ uint64_t n = 0;
+ if (bounds_violation (sizeof (uint64_t)))
+ return n;
+ memcpy ((char *) &n, data + offset, sizeof (uint64_t));
+ offset += sizeof (uint64_t);
+ if (need_swap_endian)
+ SWAP_ENDIAN (n);
+ return n;
+}
+
+char *
+DwrSec::GetData (uint64_t len)
+{
+ char *s = ((char *) data) + offset;
+ if (bounds_violation (len))
+ s = NULL;
+ offset += len;
+ return s;
+}
+
+char *
+DwrSec::GetString (uint64_t *lenp)
+{
+ if (offset < size)
+ {
+ uint64_t len = 0;
+ for (char *s = ((char *) data) + offset; offset + len < size; len++)
+ {
+ if (s[len] == 0)
+ { // '\0' is inside section
+ offset += len + 1;
+ if (len == 0)
+ return NULL;
+ if (lenp)
+ *lenp = len + 1;
+ return s;
+ }
+ }
+ offset += len;
+ return NULL; // The section is not '\0' terminated
+ }
+ return NULL;
+}
+
+uint64_t
+DwrSec::GetLong ()
+{
+ if (fmt64)
+ return Get_64 ();
+ return Get_32 ();
+}
+
+uint64_t
+DwrSec::GetADDR_32 ()
+{
+ uint64_t res = reloc ? reloc->get_reloc_addr (offset) : 0;
+ res += Get_32 ();
+ return res;
+}
+
+uint64_t
+DwrSec::GetADDR_64 ()
+{
+ uint64_t res = reloc ? reloc->get_reloc_addr (offset) : 0;
+ res += Get_64 ();
+ return res;
+}
+
+uint64_t
+DwrSec::GetADDR ()
+{
+ if (addr32)
+ return GetADDR_32 ();
+ return GetADDR_64 ();
+}
+
+uint64_t
+DwrSec::GetRef ()
+{
+ if (fmt64)
+ return GetADDR_64 ();
+ return GetADDR_32 ();
+}
+
+ULEB128
+DwrSec::GetULEB128 ()
+{
+ ULEB128 res = 0;
+ for (int shift = 0;; shift += 7)
+ {
+ ULEB128 val = Get_8 ();
+ res |= (val & 0x7f) << shift;
+ if ((val & 0x80) == 0)
+ break;
+ }
+ return res;
+}
+
+SLEB128
+DwrSec::GetSLEB128 ()
+{
+ ULEB128 res = 0, val = 0;
+ size_t shift;
+ for (shift = 0;;)
+ {
+ val = Get_8 ();
+ res |= (val & 0x7f) << shift;
+ shift += 7;
+ if ((val & 0x80) == 0)
+ break;
+ }
+ if ((val & 0x40) && (shift < 8 * sizeof (res)))
+ res |= -(((ULEB128) 1) << shift);
+ return (SLEB128) res;
+}
+
+static void
+fillBuf (unsigned char *s, int len, int col, unsigned char *buf)
+{
+ const char *nameX = "0123456789abcdef";
+ int i, n, posCh = 2 * col + col / 4 + 5;
+
+ if (len >= col)
+ len = col;
+ for (i = n = 0; i < len; i++, n += 2)
+ {
+ if ((i % 4) == 0 && i > 0)
+ {
+ buf[n] = ' ';
+ n++;
+ }
+ buf[n] = nameX[s[i] >> 4];
+ buf[n + 1] = nameX[s[i] & 0xf];
+ buf[posCh + i] = isprint (s[i]) ? s[i] : ' ';
+ }
+ buf[posCh + i] = 0;
+ for (i = n; i < posCh; i++)
+ buf[i] = ' ';
+}
+
+static void
+dumpArr (unsigned char *s, int len, int col, int num)
+{
+ unsigned char buf[128];
+ if (col <= 0)
+ return;
+ for (int i = 0; i < len; i += col, num += col)
+ {
+ fillBuf (s + i, len - i, col, buf);
+ Dprintf (DUMP_DWARFLIB, "%5d: %s\n", num, buf);
+ }
+}
+
+void
+DwrSec::dump (char *msg)
+{
+ if (sizeSec > 0)
+ {
+ Dprintf (DUMP_DWARFLIB, NTXT ("======= DwrSec::dump\n"));
+ if (msg)
+ Dprintf (DUMP_DWARFLIB, NTXT ("%s:\n"), msg);
+ dumpArr (data, (int) sizeSec, 32, 0);
+ Dprintf (DUMP_DWARFLIB, NTXT ("\n"));
+ }
+}
+
+//////////////////////////////////////////////////////////
+// class DwrFileNames
+
+DwrFileName::DwrFileName (char *_fname)
+{
+ path = NULL;
+ fname = _fname;
+ dir_index = 0;
+ timestamp = 0;
+ file_size = 0;
+ isUsed = false;
+}
+
+DwrFileName::~DwrFileName ()
+{
+ if (path != fname)
+ free (path);
+}
+
+
+//////////////////////////////////////////////////////////
+// class DwrLine
+DwrLine::DwrLine ()
+{
+ address = 0;
+ file = 0;
+ line = 0;
+ column = 0;
+}
+
+DwrLine::~DwrLine () { }
+
+
+//////////////////////////////////////////////////////////
+// class DwrLineRegs
+static int
+LineRegsCmp (const void *a, const void *b)
+{
+ DwrLine *item1 = *((DwrLine **) a);
+ DwrLine *item2 = *((DwrLine **) b);
+ return item1->address == item2->address ? 0 :
+ item1->address > item2->address ? 1 : -1;
+}
+
+DwrLineRegs::DwrLineRegs (DwrSec *secp, char *dirName)
+{
+ // `dwarfdump -vv -l` shows a line section (.debug_line)
+ debug_lineSec = secp;
+ uint64_t stmt_offset = debug_lineSec->offset;
+ uint64_t next_cu_offset = debug_lineSec->ReadLength ();
+ uint64_t header_offset = debug_lineSec->offset;
+ debug_lineSec->size = next_cu_offset;
+ version = debug_lineSec->Get_16 ();
+ header_length = debug_lineSec->GetLong ();
+ opcode_start = debug_lineSec->offset + header_length;
+ minimum_instruction_length = debug_lineSec->Get_8 ();
+ op_index_register = 0;
+ if (version == 4)
+ maximum_operations_per_instruction = debug_lineSec->Get_8 ();
+ else
+ maximum_operations_per_instruction = 1;
+ default_is_stmt = debug_lineSec->Get_8 ();
+ is_stmt = (default_is_stmt != 0);
+ line_base = debug_lineSec->Get_8 ();
+ line_range = debug_lineSec->Get_8 ();
+ opcode_base = debug_lineSec->Get_8 ();
+ standard_opcode_length = (Dwarf_Small*) debug_lineSec->GetData (opcode_base - 1);
+
+ if (DUMP_DWR_LINE_REGS)
+ {
+ Dprintf (DUMP_DWR_LINE_REGS,
+ "\n.debug_line version=%d stmt_offset=0x%llx"
+ "header_offset=0x%llx size=%lld dirname='%s'\n"
+ " header_length=0x%llx opcode_start=0x%llx"
+ "minimum_instruction_length=%d default_is_stmt=%d\n"
+ " line_base=%d line_range=%d opcode_base=%d\n",
+ (int) version, (long long) stmt_offset,
+ (long long) header_offset,
+ (long long) (next_cu_offset - header_offset), STR (dirName),
+ (long long) header_length, (long long) opcode_start,
+ (int) minimum_instruction_length, (int) default_is_stmt,
+ (int) line_base, (int) line_range, (int) opcode_base);
+ if (standard_opcode_length == NULL)
+ Dprintf (DUMP_DWR_LINE_REGS, "ERROR: standard_opcode_length is NULL\n");
+ for (int i = 0, sz = standard_opcode_length ? opcode_base - 1 : 0;
+ i < sz; i++)
+ Dprintf (DUMP_DWR_LINE_REGS, " opcode[%2d] length %2d\n", i,
+ (int) standard_opcode_length[i]);
+ }
+
+ include_directories = new Vector<char *>;
+ include_directories->append (dirName);
+ while (true)
+ {
+ char *s = debug_lineSec->GetString (NULL);
+ if (s == NULL)
+ break;
+ include_directories->append (s);
+ }
+
+ file_names = new Vector<DwrFileName *>;
+ while (true)
+ {
+ char *s = debug_lineSec->GetString (NULL);
+ if (s == NULL)
+ break;
+ DwrFileName *fnp = new DwrFileName (s);
+ fnp->path = NULL;
+ fnp->fname = s;
+ fnp->dir_index = debug_lineSec->GetULEB128_32 ();
+ fnp->timestamp = debug_lineSec->GetULEB128 ();
+ fnp->file_size = debug_lineSec->GetULEB128 ();
+ file_names->append (fnp);
+ }
+ lines = NULL;
+ dump ();
+}
+
+DwrLineRegs::~DwrLineRegs ()
+{
+ Destroy (file_names);
+ Destroy (lines);
+ delete debug_lineSec;
+ delete include_directories;
+}
+
+void
+DwrLineRegs::dump ()
+{
+ if (!DUMP_DWR_LINE_REGS)
+ return;
+ Dprintf (DUMP_DWR_LINE_REGS, NTXT ("\ninclude_directories size=%lld\n"), (long long) VecSize (include_directories));
+ for (long i = 0, sz = VecSize (include_directories); i < sz; i++)
+ {
+ char *s = include_directories->get (i);
+ Dprintf (DUMP_DWR_LINE_REGS, NTXT (" %2lld %s\n"), (long long) i, STR (s));
+ }
+
+ Dprintf (DUMP_DWR_LINE_REGS, NTXT ("\nfile_names size=%lld\n"), (long long) VecSize (file_names));
+ for (long i = 0, sz = VecSize (file_names); i < sz; i++)
+ {
+ DwrFileName *fnp = file_names->get (i);
+ Dprintf (DUMP_DWR_LINE_REGS, NTXT (" %2lld %-40s dir_index=%4lld timestamp=%8lld file_size=%lld\n"),
+ (long long) i, STR (fnp->fname),
+ (long long) fnp->dir_index, (long long) fnp->timestamp, (long long) fnp->file_size);
+ }
+ if (lines)
+ lines->dump (fname);
+ Dprintf (DUMP_DWR_LINE_REGS, NTXT ("\n\n"));
+}
+
+void
+DwrLineRegs::DoExtendedOpcode ()
+{
+ uint64_t size = debug_lineSec->GetULEB128 ();
+ if (size == 0)
+ {
+ Dprintf (DUMP_DWR_LINE_REGS, NTXT ("%-20s"), NTXT ("ExtendedOpCode: size=0"));
+ return;
+ }
+ Dwarf_Small opcode = debug_lineSec->Get_8 ();
+ Dprintf (DUMP_DWR_LINE_REGS, NTXT ("%-20s"), extended_opcode2str (opcode));
+ switch (opcode)
+ {
+ case DW_LNE_end_sequence:
+ end_sequence = true;
+ reset ();
+ break;
+ case DW_LNE_set_address:
+ address = debug_lineSec->GetADDR ();
+ break;
+ case DW_LNE_define_file:
+ // TODO, add file to file list
+ fname = debug_lineSec->GetString (NULL);
+ dir_index = debug_lineSec->GetULEB128 ();
+ timestamp = debug_lineSec->GetULEB128 ();
+ file_size = debug_lineSec->GetULEB128 ();
+ break;
+ default:
+ debug_lineSec->GetData (size - 1); // skip unknown opcode
+ break;
+ }
+}
+
+void
+DwrLineRegs::DoStandardOpcode (int opcode)
+{
+ switch (opcode)
+ {
+ case DW_LNS_copy:
+ basic_block = false;
+ EmitLine ();
+ break;
+ case DW_LNS_advance_pc:
+ address += debug_lineSec->GetULEB128 () * minimum_instruction_length;
+ break;
+ case DW_LNS_advance_line:
+ line += (int) debug_lineSec->GetSLEB128 ();
+ break;
+ case DW_LNS_set_file:
+ file = debug_lineSec->GetULEB128_32 ();
+ break;
+ case DW_LNS_set_column:
+ column = debug_lineSec->GetULEB128_32 ();
+ break;
+ case DW_LNS_negate_stmt:
+ is_stmt = -is_stmt;
+ break;
+ case DW_LNS_set_basic_block:
+ basic_block = true;
+ break;
+ case DW_LNS_const_add_pc:
+ address += ((255 - opcode_base) / line_range) * minimum_instruction_length;
+ break;
+ case DW_LNS_fixed_advance_pc:
+ address += debug_lineSec->Get_16 ();
+ break;
+ default: // skip unknown opcode/operands
+ debug_lineSec->GetData (standard_opcode_length ?
+ standard_opcode_length[opcode] : 1);
+ break;
+ }
+}
+
+void
+DwrLineRegs::DoSpecialOpcode (int opcode)
+{
+ int max_op_per_instr = maximum_operations_per_instruction == 0 ? 1
+ : maximum_operations_per_instruction;
+ int operation_advance = (opcode / line_range);
+ address += minimum_instruction_length * ((op_index_register + operation_advance) / max_op_per_instr);
+ op_index_register = (op_index_register + operation_advance) % max_op_per_instr;
+ line += line_base + (opcode % line_range);
+ basic_block = false;
+ EmitLine ();
+}
+
+void
+DwrLineRegs::reset ()
+{
+ dir_index = 0;
+ timestamp = 0;
+ file_size = 0;
+ address = 0;
+ file = 1;
+ line = 1;
+ column = 0;
+ is_stmt = (default_is_stmt != 0);
+ basic_block = false;
+ end_sequence = false;
+}
+
+void
+DwrLineRegs::EmitLine ()
+{
+ DwrLine *lnp = new DwrLine;
+
+ lnp->file = file;
+ lnp->line = line;
+ lnp->column = column;
+ lnp->address = address;
+ lines->append (lnp);
+ if ((file > 0) && (file < VecSize (file_names)))
+ {
+ DwrFileName *fnp = file_names->get (file);
+ fnp->isUsed = true;
+ }
+}
+
+Vector<DwrLine *> *
+DwrLineRegs::get_lines ()
+{
+ if (lines == NULL)
+ {
+ lines = new Vector<DwrLine *>;
+ debug_lineSec->offset = opcode_start;
+ reset ();
+ Dprintf (DUMP_DWR_LINE_REGS, "\n offset code address (file, line, column) stmt blck end_seq \n");
+ while (debug_lineSec->offset < debug_lineSec->size)
+ {
+ Dprintf (DUMP_DWR_LINE_REGS, NTXT ("0x%08llx "),
+ (long long) debug_lineSec->offset);
+ Dwarf_Small opcode = debug_lineSec->Get_8 ();
+ if (opcode == 0)
+ DoExtendedOpcode ();
+ else if (opcode < opcode_base)
+ {
+ DoStandardOpcode (opcode);
+ Dprintf (DUMP_DWR_LINE_REGS, NTXT ("%-20s"), standard_opcode2str (opcode));
+ }
+ else
+ {
+ DoSpecialOpcode (opcode - opcode_base);
+ Dprintf (DUMP_DWR_LINE_REGS, NTXT ("%-20s"),
+ special_opcode2str (opcode - opcode_base));
+ }
+ Dprintf (DUMP_DWR_LINE_REGS,
+ " 0x%08llx (%lld, %lld, %lld) %c %c %c\n",
+ (long long) address, (long long) file, (long long) line,
+ (long long) column, is_stmt ? 'T' : 'F',
+ basic_block ? 'T' : 'F', end_sequence ? 'T' : 'F');
+ }
+ lines->sort (LineRegsCmp);
+ if (DUMP_DWR_LINE_REGS)
+ lines->dump (fname);
+ }
+ return lines;
+}
+
+char *
+DwrLineRegs::getPath (int fn)
+{
+ fn--;
+ if ((fn >= VecSize (file_names)) || (fn < 0))
+ {
+ Dprintf (DEBUG_ERR_MSG, NTXT ("DwrLineRegs::getPath: fn=0x%lld file_names->size()=%lld\n"),
+ (long long) fn, (long long) VecSize (file_names));
+ return NULL;
+ }
+ DwrFileName *fnp = file_names->fetch (fn);
+ if (fnp->path)
+ return fnp->path;
+
+ char *dir = fnp->dir_index < include_directories->size () ?
+ include_directories->fetch (fnp->dir_index) : NULL;
+ if ((fnp->fname[0] == '/') || (dir == NULL) || (*dir == 0))
+ {
+ fnp->path = fnp->fname;
+ return fnp->path;
+ }
+
+ StringBuilder sb;
+ if (*dir != '/')
+ { // not absolute
+ char *s = include_directories->fetch (0);
+ sb.append (s);
+ sb.append ('/');
+ }
+ sb.append (dir);
+ sb.append ('/');
+ sb.append (fnp->fname);
+ fnp->path = canonical_path (sb.toString ());
+ return fnp->path;
+}
+
+DwrCU::DwrCU (Dwarf *_dwarf)
+{
+ dwarf = _dwarf;
+ cu_offset = dwarf->debug_infoSec->offset;
+ debug_infoSec = new DwrSec (dwarf->debug_infoSec, cu_offset);
+ next_cu_offset = debug_infoSec->ReadLength ();
+ if (next_cu_offset > debug_infoSec->sizeSec)
+ {
+ Dprintf (DEBUG_ERR_MSG,
+ "DwrCU::DwrCU: next_cu_offset(0x%llx) > debug_infoSec->sizeSec(%llx)\n",
+ (long long) next_cu_offset, (long long) debug_infoSec->sizeSec);
+ next_cu_offset = debug_infoSec->sizeSec;
+ }
+ debug_infoSec->size = next_cu_offset;
+ version = debug_infoSec->Get_16 ();
+ debug_abbrev_offset = debug_infoSec->GetLong ();
+ address_size = debug_infoSec->Get_8 ();
+ cu_header_offset = debug_infoSec->offset;
+ comp_dir = NULL;
+ module = NULL;
+ abbrevTable = NULL;
+ dwrInlinedSubrs = NULL;
+ srcFiles = NULL;
+ stmt_list_offset = 0;
+ dwrLineReg = NULL;
+ isMemop = false;
+ isGNU = false;
+ dwrTag.level = 0;
+
+ build_abbrevTable (dwarf->debug_abbrevSec, debug_abbrev_offset);
+#ifdef DEBUG
+ if (DUMP_DWARFLIB)
+ {
+ Dprintf (DUMP_DWARFLIB,
+ "CU_HEADER: header_offset = 0x%08llx %lld"
+ "next_header_offset=0x%08llx %lld\n"
+ " abbrev_offset = 0x%08llx %lld\n"
+ " unit_length = %lld\n"
+ " version = %d\n"
+ " address_size = %d\n"
+ " fmt64 = %s\n"
+ "debug_info: need_swap_endian=%s fmt64=%s addr32=%s\n",
+ (long long) cu_offset, (long long) cu_offset,
+ (long long) next_cu_offset, (long long) next_cu_offset,
+ (long long) debug_abbrev_offset, (long long) debug_abbrev_offset,
+ (long long) (next_cu_offset - cu_offset),
+ (int) version, (int) address_size,
+ debug_infoSec->fmt64 ? "true" : "false",
+ debug_infoSec->need_swap_endian ? "true" : "false",
+ debug_infoSec->fmt64 ? "true" : "false",
+ debug_infoSec->addr32 ? "true" : "false");
+ Dprintf (DUMP_DWARFLIB, "\n.debug_abbrev cnt=%d offset=0x%08llx %lld\n",
+ (int) VecSize (abbrevTable), (long long) debug_abbrev_offset,
+ (long long) debug_abbrev_offset);
+ for (int i = 1, sz = VecSize (abbrevTable); i < sz; i++)
+ {
+ DwrAbbrevTable *abbTbl = abbrevTable->get (i);
+ Dprintf (DUMP_DWARFLIB, NTXT ("%5d: %-30s %-20s offset=0x%08llx\n"),
+ (int) i, DwrCU::tag2str (abbTbl->tag),
+ abbTbl->hasChild ? "DW_children_yes" : "DW_children_no",
+ (long long) abbTbl->offset);
+ for (int i1 = abbTbl->firstAtForm; i1 < abbTbl->lastAtForm; i1++)
+ {
+ Dwr_Attr *atf = abbrevAtForm->get (i1);
+ Dprintf (DUMP_DWARFLIB, " %-30s %s\n",
+ DwrCU::at2str (atf->at_name),
+ DwrCU::form2str (atf->at_form));
+ }
+ }
+ }
+#endif
+}
+
+DwrCU::~DwrCU ()
+{
+ delete debug_infoSec;
+ delete abbrevTable;
+ delete abbrevAtForm;
+ Destroy (dwrInlinedSubrs);
+ delete srcFiles;
+ delete dwrLineReg;
+ free (comp_dir);
+}
+
+void
+DwrCU::build_abbrevTable (DwrSec *_debug_abbrevSec, uint64_t _offset)
+{
+ if (abbrevTable)
+ return;
+ DwrSec *debug_abbrevSec = new DwrSec (_debug_abbrevSec, _offset);
+ abbrevTable = new DbeArray <DwrAbbrevTable>(128);
+ abbrevAtForm = new DbeArray <Dwr_Attr>(512);
+ abbrevTable->allocate (1); // skip first
+ abbrevAtForm->allocate (1); // skip first
+ for (int i = 1; debug_abbrevSec->offset < debug_abbrevSec->size; i++)
+ {
+ DwrAbbrevTable abbTbl;
+ abbTbl.offset = debug_abbrevSec->offset;
+ abbTbl.code = debug_abbrevSec->GetULEB128_32 ();
+ if (abbTbl.code == 0)
+ break;
+ else if (i != abbTbl.code)
+ {
+ dwarf->elf->append_msg (CMSG_ERROR, GTXT ("%s: the abbreviations table is corrupted (%lld <--> %lld)\n"),
+ get_basename (dwarf->elf->get_location ()),
+ (long long) i, (long long) abbTbl.code);
+ break;
+ }
+ abbTbl.tag = debug_abbrevSec->GetULEB128_32 ();
+ abbTbl.hasChild = (DW_children_yes == debug_abbrevSec->Get_8 ());
+ abbTbl.firstAtForm = abbrevAtForm->size ();
+ while (debug_abbrevSec->offset < debug_abbrevSec->size)
+ {
+ Dwr_Attr atf;
+ atf.at_name = debug_abbrevSec->GetULEB128_32 ();
+ atf.at_form = debug_abbrevSec->GetULEB128_32 ();
+ if (atf.at_name == 0 && atf.at_form == 0)
+ break;
+ abbrevAtForm->append (atf);
+ }
+ abbTbl.lastAtForm = abbrevAtForm->size ();
+ abbrevTable->append (abbTbl);
+ }
+ delete debug_abbrevSec;
+}
+
+int
+DwrCU::set_die (Dwarf_Die die)
+{
+ if (die > 0)
+ debug_infoSec->offset = die;
+ if (debug_infoSec->offset < cu_header_offset
+ || debug_infoSec->offset >= debug_infoSec->size)
+ return DW_DLV_ERROR;
+ dwrTag.offset = debug_infoSec->offset;
+ dwrTag.die = debug_infoSec->offset - cu_offset;
+ dwrTag.num = debug_infoSec->GetULEB128_32 ();
+ if (dwrTag.num == 0)
+ return DW_DLV_NO_ENTRY;
+ dwrTag.abbrevAtForm = abbrevAtForm;
+ DwrAbbrevTable *abbTbl = abbrevTable->get (dwrTag.num);
+ if (abbTbl == NULL)
+ { // corrupt dwarf
+ dwarf->elf->append_msg (CMSG_ERROR, GTXT ("%s: the abbreviation code (%lld) does not match for the Dwarf entry (0x%llx)\n"),
+ get_basename (dwarf->elf->get_location ()),
+ (long long) dwrTag.num, (long long) dwrTag.offset);
+ return DW_DLV_ERROR;
+ }
+ dwrTag.tag = abbTbl->tag;
+ dwrTag.hasChild = abbTbl->hasChild;
+ dwrTag.firstAttribute = abbTbl->firstAtForm;
+ dwrTag.lastAttribute = abbTbl->lastAtForm;
+ for (int k = abbTbl->firstAtForm; k < abbTbl->lastAtForm; k++)
+ {
+ Dwr_Attr *atf = abbrevAtForm->get (k);
+ int at_form = atf->at_form;
+ if (at_form == DW_FORM_indirect)
+ at_form = debug_infoSec->GetULEB128_32 ();
+ switch (at_form)
+ {
+ case DW_FORM_addr:
+ atf->u.offset = (address_size == 4) ? debug_infoSec->GetADDR_32 ()
+ : debug_infoSec->GetADDR_64 ();
+ break;
+ case DW_FORM_flag:
+ atf->u.offset = debug_infoSec->Get_8 ();
+ break;
+ case DW_FORM_block:
+ atf->len = debug_infoSec->GetULEB128 ();
+ atf->u.str = debug_infoSec->GetData (atf->len);
+ break;
+ case DW_FORM_block1:
+ atf->len = debug_infoSec->Get_8 ();
+ atf->u.str = debug_infoSec->GetData (atf->len);
+ break;
+ case DW_FORM_block2:
+ atf->len = debug_infoSec->Get_16 ();
+ atf->u.str = debug_infoSec->GetData (atf->len);
+ break;
+ case DW_FORM_block4:
+ atf->len = debug_infoSec->Get_32 ();
+ atf->u.str = debug_infoSec->GetData (atf->len);
+ break;
+ case DW_FORM_ref1:
+ atf->u.offset = debug_infoSec->Get_8 ();
+ break;
+ case DW_FORM_ref2:
+ atf->u.offset = debug_infoSec->Get_16 ();
+ break;
+ case DW_FORM_ref4:
+ atf->u.offset = debug_infoSec->Get_32 ();
+ break;
+ case DW_FORM_ref8:
+ atf->u.offset = debug_infoSec->Get_64 ();
+ break;
+ case DW_FORM_ref_udata:
+ atf->u.offset = debug_infoSec->GetULEB128 ();
+ break;
+ case DW_FORM_data1:
+ atf->u.offset = debug_infoSec->Get_8 ();
+ break;
+ case DW_FORM_data2:
+ atf->u.offset = debug_infoSec->Get_16 ();
+ break;
+ case DW_FORM_data4:
+ atf->u.offset = debug_infoSec->Get_32 ();
+ break;
+ case DW_FORM_data8:
+ atf->u.offset = debug_infoSec->Get_64 ();
+ break;
+ case DW_FORM_string:
+ atf->u.str = debug_infoSec->GetString (&atf->len);
+ break;
+ case DW_FORM_strp:
+ atf->u.offset = debug_infoSec->GetRef ();
+ if (dwarf->debug_strSec == NULL)
+ {
+ atf->u.str = NULL;
+ atf->len = 0;
+ }
+ else
+ {
+ dwarf->debug_strSec->offset = atf->u.offset;
+ atf->u.str = dwarf->debug_strSec->GetString (&atf->len);
+ }
+ break;
+ case DW_FORM_sdata:
+ atf->u.val = debug_infoSec->GetSLEB128 ();
+ break;
+ case DW_FORM_udata:
+ atf->u.offset = debug_infoSec->GetULEB128 ();
+ break;
+ case DW_FORM_ref_addr:
+ atf->u.offset = debug_infoSec->GetADDR ();
+ break;
+ case DW_FORM_sec_offset:
+ atf->u.offset = debug_infoSec->GetRef ();
+ break;
+ case DW_FORM_exprloc:
+ atf->u.offset = debug_infoSec->GetULEB128 ();
+ debug_infoSec->offset += atf->u.offset;
+ break;
+ case DW_FORM_flag_present:
+ atf->u.val = 1;
+ break;
+ case DW_FORM_ref_sig8:
+ atf->u.offset = debug_infoSec->GetADDR_64 ();
+ break;
+ default:
+ DEBUG_CODE
+ {
+ Dprintf (1, "Attribute form 0x%llx (%lld) is not implemented\n",
+ (long long) atf->at_form, (long long) atf->at_form);
+ assert (0);
+ }
+ atf->u.str = NULL;
+ atf->len = 0;
+ break;
+ }
+ }
+ dwrTag.dump ();
+ return DW_DLV_OK;
+}
+
+static char *
+composePath (char *dname, char *fname)
+{
+ char *s;
+ if (*fname == '/' || dname == NULL)
+ s = dbe_sprintf (NTXT ("%s"), fname);
+ else
+ s = dbe_sprintf (NTXT ("%s/%s"), dname, fname);
+ return canonical_path (s);
+}
+
+Module *
+DwrCU::parse_cu_header (LoadObject *lo)
+{
+ // Is tag always DW_TAG_compile_unit?
+ if (dwrTag.tag != DW_TAG_compile_unit)
+ {
+ Dprintf (DEBUG_ERR_MSG,
+ "parse_cu_header: die=0x%llx tag=%lld is not DW_TAG_compile_unit\n",
+ (long long) cu_offset, (long long) dwrTag.tag);
+ return NULL;
+ }
+
+ char *name = Dwarf_string (DW_AT_name);
+ if (name == NULL)
+ name = NTXT ("UnnamedUnit");
+ stmt_list_offset = Dwarf_data (DW_AT_stmt_list);
+ comp_dir = dbe_strdup (Dwarf_string (DW_AT_comp_dir));
+ char *dir_name = comp_dir ? StrChr (comp_dir, ':') : NULL;
+ char *orig_name = Dwarf_string (DW_AT_SUN_original_name);
+ char *path = composePath (dir_name, orig_name ? orig_name : name);
+
+ module = dwarf->stabs->append_Module (lo, path);
+ free (path);
+ if (module == NULL)
+ return NULL;
+ module->hasDwarf = true;
+ if (orig_name)
+ module->linkerStabName = composePath (dir_name, name);
+ module->lang_code = Dwarf_lang ();
+ module->comp_flags = dbe_strdup (Dwarf_string (DW_AT_SUN_command_line));
+ if (module->comp_flags == NULL)
+ module->comp_flags = dbe_strdup (Dwarf_string (DW_AT_icc_flags));
+ module->comp_dir = dbe_strdup (dir_name);
+
+ char *obj_file = Dwarf_string (DW_AT_SUN_obj_file);
+ char *obj_dir = Dwarf_string (DW_AT_SUN_obj_dir);
+ if (obj_dir && obj_file)
+ {
+ // object information may not be available
+ dir_name = StrChr (obj_dir, ':');
+ path = composePath (dir_name, obj_file);
+ if (module->dot_o_file == NULL)
+ module->dot_o_file = module->createLoadObject (path);
+ }
+ else
+ path = dbe_strdup (dwarf->stabs->path);
+ module->set_name (path);
+ return module;
+}
+
+Dwr_Attr *
+Dwr_Tag::get_attr (Dwarf_Half attr)
+{
+ for (long i = firstAttribute; i < lastAttribute; i++)
+ {
+ Dwr_Attr *atf = abbrevAtForm->get (i);
+ if (atf->at_name == attr)
+ return atf;
+ }
+ return NULL;
+}
+
+char *
+DwrCU::Dwarf_string (Dwarf_Half attr)
+{
+ Dwr_Attr *dwrAttr = dwrTag.get_attr (attr);
+ return dwrAttr ? dwrAttr->u.str : NULL;
+}
+
+uint64_t
+DwrCU::get_high_pc (uint64_t low_pc)
+{
+ Dwr_Attr *dwrAttr = dwrTag.get_attr (DW_AT_high_pc);
+ if (dwrAttr)
+ switch (dwrAttr->at_form)
+ {
+ case DW_FORM_addr:
+ return dwrAttr->u.offset;
+ default:
+ return dwrAttr->u.offset + low_pc;
+ }
+ return 0;
+}
+
+Dwarf_Addr
+DwrCU::Dwarf_addr (Dwarf_Half attr)
+{
+ Dwr_Attr *dwrAttr = dwrTag.get_attr (attr);
+ if (dwrAttr)
+ switch (dwrAttr->at_form)
+ {
+ case DW_FORM_addr:
+ return dwrAttr->u.offset;
+ }
+ return 0;
+}
+
+DwrSec*
+DwrCU::Dwarf_block (Dwarf_Half attr)
+{
+ Dwr_Attr *dwrAttr = dwrTag.get_attr (attr);
+ if (dwrAttr && dwrAttr->u.block)
+ switch (dwrAttr->at_form)
+ {
+ case DW_FORM_block:
+ case DW_FORM_block1:
+ case DW_FORM_block2:
+ case DW_FORM_block4:
+ return new DwrSec (dwrAttr->u.block, dwrAttr->len,
+ dwarf->elf->need_swap_endian,
+ dwarf->elf->elf_getclass () == ELFCLASS32);
+ }
+ return NULL;
+}
+
+int
+DwrCU::read_data_attr (Dwarf_Half attr, int64_t *retVal)
+{
+ Dwr_Attr *dwrAttr = dwrTag.get_attr (attr);
+ if (dwrAttr)
+ switch (dwrAttr->at_form)
+ {
+ case DW_FORM_data1:
+ case DW_FORM_data2:
+ case DW_FORM_data4:
+ case DW_FORM_data8:
+ case DW_FORM_udata:
+ case DW_FORM_sec_offset:
+ *retVal = dwrAttr->u.val;
+ return DW_DLV_OK;
+
+ }
+ return DW_DLV_ERROR;
+}
+
+int
+DwrCU::read_ref_attr (Dwarf_Half attr, int64_t *retVal)
+{
+ Dwr_Attr *dwrAttr = dwrTag.get_attr (attr);
+ if (dwrAttr)
+ switch (dwrAttr->at_form)
+ {
+ case DW_FORM_ref1:
+ case DW_FORM_ref2:
+ case DW_FORM_ref4:
+ case DW_FORM_ref8:
+ case DW_FORM_ref_udata:
+ case DW_FORM_sec_offset:
+ case DW_FORM_exprloc:
+ case DW_FORM_ref_sig8:
+ *retVal = dwrAttr->u.val;
+ return DW_DLV_OK;
+ }
+ return DW_DLV_ERROR;
+}
+
+int64_t
+DwrCU::Dwarf_data (Dwarf_Half attr)
+{
+ int64_t retVal;
+ if (read_data_attr (attr, &retVal) == DW_DLV_OK)
+ return retVal;
+ return 0;
+}
+
+int64_t
+DwrCU::Dwarf_ref (Dwarf_Half attr)
+{
+ int64_t retVal;
+ if (read_ref_attr (attr, &retVal) == DW_DLV_OK)
+ return retVal;
+ return 0;
+}
+
+Dwarf_Addr
+DwrCU::Dwarf_location (Dwarf_Attribute attr)
+{
+ DwrSec *secp = Dwarf_block (attr);
+ if (secp)
+ {
+ DwrLocation loc;
+ DwrLocation *lp = dwr_get_location (secp, &loc);
+ delete secp;
+ if (lp)
+ return lp->lc_number;
+ }
+ return 0;
+}
+
+void
+DwrCU::map_dwarf_lines (Module *mod)
+{
+ DwrLineRegs *lineReg = get_dwrLineReg ();
+ long inlinedSubrCnt = VecSize (dwrInlinedSubrs);
+ if (isGNU && (inlinedSubrCnt > 0))
+ {
+ Function *func = NULL;
+ mod->inlinedSubr = (InlinedSubr *) malloc (inlinedSubrCnt
+ * sizeof (InlinedSubr));
+ for (long i = 0; i < inlinedSubrCnt; i++)
+ {
+ DwrInlinedSubr *inlinedSubr = dwrInlinedSubrs->get (i);
+ uint64_t low_pc;
+ Function *f = dwarf->stabs->map_PC_to_func (inlinedSubr->low_pc,
+ low_pc, mod->functions);
+ if (f == NULL)
+ continue;
+ if (func != f)
+ {
+ func = f;
+ func->inlinedSubrCnt = 0;
+ func->inlinedSubr = mod->inlinedSubr + i;
+ }
+ InlinedSubr *p = func->inlinedSubr + func->inlinedSubrCnt;
+ func->inlinedSubrCnt++;
+ int fileno = inlinedSubr->file - 1;
+ SourceFile *sf = ((fileno >= 0) && (fileno < VecSize (srcFiles))) ?
+ srcFiles->get (fileno) : dbeSession->get_Unknown_Source ();
+ p->dbeLine = sf->find_dbeline (inlinedSubr->line);
+ p->high_pc = inlinedSubr->high_pc - low_pc;
+ p->low_pc = inlinedSubr->low_pc - low_pc;
+ p->level = inlinedSubr->level;
+ p->func = NULL;
+ p->fname = NULL;
+ if (set_die (inlinedSubr->abstract_origin) == DW_DLV_OK)
+ p->fname = dbe_strdup (Dwarf_string (DW_AT_name));
+ if (p->fname)
+ p->func = Stabs::find_func (p->fname, mod->functions,
+ Stabs::is_fortran (mod->lang_code));
+ }
+ }
+ Vector<DwrLine *> *lines = lineReg->get_lines ();
+
+ Include *includes = new Include;
+ includes->new_src_file (mod->getMainSrc (), 0, NULL);
+ char *path = NULL;
+ SourceFile *cur_src = NULL;
+ Function *cur_func = NULL;
+ for (long i = 0, sz = VecSize (lines); i < sz; i++)
+ {
+ DwrLine *dwrLine = lines->get (i);
+ char *filename = dwrLineReg->getPath (dwrLine->file);
+ if (filename == NULL)
+ continue;
+ uint64_t pc = dwrLine->address;
+ int lineno = dwrLine->line;
+ if (path != filename)
+ {
+ path = filename;
+ char *name = StrChr (path, ':');
+ SourceFile *src = mod->setIncludeFile (name);
+ if (cur_src != src)
+ {
+ includes->new_src_file (src, lineno, cur_func);
+ cur_src = src;
+ }
+ }
+ uint64_t low_pc;
+ Function *func = dwarf->stabs->map_PC_to_func (pc, low_pc, mod->functions);
+ if (func && (func->module == mod))
+ {
+ if (func != cur_func)
+ {
+ if (cur_func)
+ while (cur_func->popSrcFile () != NULL)
+ ;
+ cur_func = func;
+ includes->push_src_files (cur_func);
+ }
+ cur_func->add_PC_info (pc - low_pc, lineno);
+ }
+ }
+ if (cur_func)
+ while (cur_func->popSrcFile ())
+ ;
+ delete includes;
+}
+
+DwrLineRegs *
+DwrCU::get_dwrLineReg ()
+{
+ if (dwrLineReg == NULL)
+ dwrLineReg = new DwrLineRegs (new DwrSec (dwarf->debug_lineSec,
+ stmt_list_offset), comp_dir);
+ return dwrLineReg;
+}
+
+void
+DwrCU::parse_inlined_subroutine (Dwarf_cnt *ctx)
+{
+ int64_t abstract_origin = Dwarf_ref (DW_AT_abstract_origin);
+ int fileno = (int) Dwarf_data (DW_AT_call_file);
+ int lineno = (int) Dwarf_data (DW_AT_call_line);
+ int level = ctx->inlinedSubr ? (ctx->inlinedSubr->level + 1) : 0;
+ DwrInlinedSubr *inlinedSubr_old = ctx->inlinedSubr;
+
+ if (dwrInlinedSubrs == NULL)
+ dwrInlinedSubrs = new Vector<DwrInlinedSubr*>;
+ Dwr_Attr *dwrAttr = dwrTag.get_attr (DW_AT_ranges);
+ if (dwrAttr)
+ {
+ uint64_t ranges = Dwarf_ref (DW_AT_ranges);
+ if (dwarf->debug_rangesSec && (ranges < dwarf->debug_rangesSec->size))
+ {
+ dwarf->debug_rangesSec->offset = ranges;
+ for (;;)
+ {
+ uint64_t low_pc = dwarf->debug_rangesSec->GetADDR ();
+ uint64_t high_pc = dwarf->debug_rangesSec->GetADDR ();
+ if ((low_pc > 0) && (low_pc <= high_pc))
+ {
+ DwrInlinedSubr *p = new DwrInlinedSubr (abstract_origin,
+ low_pc, high_pc, fileno, lineno, level);
+ dwrInlinedSubrs->append (p);
+ ctx->inlinedSubr = p;
+ }
+ else
+ break;
+ }
+ }
+ }
+ else
+ {
+ uint64_t low_pc = Dwarf_addr (DW_AT_low_pc);
+ uint64_t high_pc = get_high_pc (low_pc);
+ if ((low_pc > 0) && (low_pc <= high_pc))
+ {
+ DwrInlinedSubr *p = new DwrInlinedSubr (abstract_origin, low_pc,
+ high_pc, fileno, lineno, level);
+ dwrInlinedSubrs->append (p);
+ ctx->inlinedSubr = p;
+ }
+ }
+ parseChild (ctx);
+ ctx->inlinedSubr = inlinedSubr_old;
+}
+
+
+//////////////////////////////////////////////////////////
+// class DwrInlinedSubr
+DwrInlinedSubr::DwrInlinedSubr (int64_t _abstract_origin, uint64_t _low_pc,
+ uint64_t _high_pc, int _file, int _line, int _level)
+{
+ abstract_origin = _abstract_origin;
+ low_pc = _low_pc;
+ high_pc = _high_pc;
+ file = _file;
+ line = _line;
+ level = _level;
+}
+
+void
+DwrInlinedSubr::dump ()
+{
+ Dprintf (DUMP_DWARFLIB,
+ " level=%d 0x%08llx [0x%08llx - 0x%08llx] file=%d line=%d\n",
+ (int) level, (long long) abstract_origin, (long long) low_pc,
+ (long long) high_pc, (int) file, (int) line);
+}
diff --git a/gprofng/src/DwarfLib.h b/gprofng/src/DwarfLib.h
new file mode 100644
index 00000000000..95eff5751ff
--- /dev/null
+++ b/gprofng/src/DwarfLib.h
@@ -0,0 +1,313 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _DWARFLIB_H_
+#define _DWARFLIB_H_
+
+#include "dwarf2.h"
+
+class ElfReloc;
+class Dwr_type;
+class SourceFile;
+
+template <class ITEM> class Vector;
+template <class ITEM> class DbeArray;
+template <typename Key_t, typename Value_t> class DefaultMap;
+
+typedef uint64_t ULEB128;
+typedef int64_t SLEB128;
+typedef unsigned short Dwarf_Half;
+typedef unsigned char Dwarf_Small;
+typedef uint64_t Dwarf_Off;
+typedef uint64_t Dwarf_Addr;
+typedef uint64_t Dwarf_Unsigned;
+typedef int64_t Dwarf_Die;
+typedef int32_t Dwarf_Debug;
+typedef int32_t Dwarf_Attribute;
+
+
+class DwrSec
+{
+public:
+ DwrSec (unsigned char *_data, uint64_t _size, bool _need_swap_endian, bool _addr32);
+ DwrSec (DwrSec *secp, uint64_t _offset);
+ ~DwrSec ();
+ unsigned char Get_8 ();
+ unsigned short Get_16 ();
+ uint32_t Get_32 ();
+ uint64_t Get_64 ();
+ uint64_t GetRef ();
+ uint64_t GetADDR ();
+ uint64_t GetADDR_32 ();
+ uint64_t GetADDR_64 ();
+ uint64_t GetLong ();
+ uint64_t ReadLength ();
+ SLEB128 GetSLEB128 ();
+ ULEB128 GetULEB128 ();
+ char *GetString (uint64_t *lenp);
+ char *GetData (uint64_t len);
+ void dump (char *msg);
+
+ inline uint32_t
+ GetULEB128_32 ()
+ {
+ return (uint32_t) GetULEB128 ();
+ }
+
+ bool
+ inRange (uint64_t left, uint64_t right)
+ {
+ return (offset >= left) && (offset < right);
+ };
+
+ ElfReloc *reloc;
+ uint64_t sizeSec;
+ uint64_t size;
+ uint64_t offset;
+ bool fmt64;
+ bool addr32;
+ bool need_swap_endian;
+
+private:
+ bool isCopy;
+ unsigned char *data;
+ bool bounds_violation (uint64_t sz);
+};
+
+class DwrFileName
+{
+public:
+ DwrFileName (char *_fname);
+ ~DwrFileName ();
+ uint64_t timestamp;
+ uint64_t file_size;
+ int dir_index;
+ char *fname;
+ char *path;
+ bool isUsed;
+};
+
+class DwrLine
+{
+public:
+ DwrLine ();
+ ~DwrLine ();
+ uint64_t address;
+ uint32_t file;
+ uint32_t line;
+ uint32_t column;
+};
+
+class DwrInlinedSubr
+{
+public:
+ DwrInlinedSubr (int64_t _abstract_origin, uint64_t _low_pc, uint64_t _high_pc,
+ int _file, int _line, int _level);
+ void dump ();
+ int64_t abstract_origin;
+ uint64_t low_pc;
+ uint64_t high_pc;
+ int file;
+ int line;
+ int level;
+};
+
+class DwrLineRegs
+{
+public:
+ DwrLineRegs (DwrSec *_secp, char *dirName);
+ ~DwrLineRegs ();
+ char *getPath (int fn);
+ Vector<DwrLine *> *get_lines ();
+ void dump ();
+
+ Vector<DwrFileName *> *file_names;
+
+private:
+ void DoExtendedOpcode ();
+ void DoStandardOpcode (int opcode);
+ void DoSpecialOpcode (int opcode);
+ void EmitLine ();
+ void reset ();
+
+ char *fname;
+ uint64_t dir_index;
+ uint64_t timestamp;
+ uint64_t file_size;
+ uint64_t address;
+ uint32_t file;
+ uint32_t line;
+ uint32_t column;
+ Dwarf_Half version;
+ uint64_t op_index_register;
+ Dwarf_Small maximum_operations_per_instruction;
+ Dwarf_Small minimum_instruction_length;
+ Dwarf_Small default_is_stmt;
+ Dwarf_Small line_range;
+ Dwarf_Small opcode_base;
+ signed char line_base;
+ bool is_stmt;
+ bool basic_block;
+ bool end_sequence;
+ Vector<DwrLine *> *lines;
+ Vector<char *> *include_directories;
+ Dwarf_Small *standard_opcode_length;
+ DwrSec *debug_lineSec;
+ uint64_t header_length;
+ uint64_t opcode_start;
+};
+
+typedef struct Dwr_Attr
+{
+ union
+ {
+ char *str;
+ unsigned char *block;
+ uint64_t offset;
+ int64_t val;
+ } u;
+ uint64_t len; // length of u.str
+ int at_form;
+ int at_name;
+} Dwr_Attr;
+
+typedef struct Dwr_Tag
+{
+public:
+ Dwr_Attr *get_attr (Dwarf_Half attr);
+ void dump ();
+
+ DbeArray<Dwr_Attr> *abbrevAtForm;
+ int64_t die;
+ int64_t offset;
+ int firstAttribute;
+ int lastAttribute;
+ int tag;
+ int hasChild;
+ int num;
+ int level;
+} Dwr_Tag;
+
+enum
+{
+ DW_DLV_OK,
+ DW_DLV_NO_ENTRY,
+ DW_DLV_ERROR,
+ DW_DLV_BAD_ELF,
+ DW_DLV_NO_DWARF,
+ DW_DLV_WRONG_ARG
+};
+
+typedef struct DwrLocation
+{
+ uint64_t offset;
+ uint64_t lc_number;
+ uint64_t lc_number2;
+ uint32_t op;
+} DwrLocation;
+
+typedef struct DwrAbbrevTable
+{
+ int64_t offset;
+ int firstAtForm;
+ int lastAtForm;
+ int code;
+ int tag;
+ bool hasChild;
+} DwrAbbrevTable;
+
+class Dwarf_cnt
+{
+public:
+ Dwarf_cnt ();
+ int64_t cu_offset;
+ int64_t parent;
+ int64_t size;
+ Module *module;
+ char *name;
+ Function *func;
+ Function *fortranMAIN;
+ datatype_t *dtype;
+ DwrInlinedSubr *inlinedSubr;
+ DefaultMap <int64_t, Dwr_type*> *dwr_types;
+ int level;
+
+ Dwr_type *get_dwr_type (int64_t cu_die_offset);
+ Dwr_type *put_dwr_type (int64_t cu_die_offset, int tag);
+ Dwr_type *put_dwr_type (Dwr_Tag *dwrTag);
+};
+
+class DwrCU
+{
+public:
+ DwrCU (Dwarf *_dwarf);
+ ~DwrCU ();
+ Module *parse_cu_header (LoadObject *lo);
+ void parseChild (Dwarf_cnt *ctx);
+ void read_hwcprof_info (Dwarf_cnt *ctx);
+ void map_dwarf_lines (Module *mod);
+ int set_die (Dwarf_Die die);
+ DwrLineRegs *get_dwrLineReg ();
+
+ static char *at2str (int tag);
+ static char *form2str (int tag);
+ static char *tag2str (int tag);
+
+ uint64_t cu_header_offset;
+ uint64_t cu_offset;
+ uint64_t next_cu_offset;
+ Vector<DwrInlinedSubr*> *dwrInlinedSubrs;
+ Vector<SourceFile *> *srcFiles;
+ bool isMemop;
+ bool isGNU;
+
+private:
+ void build_abbrevTable (DwrSec *debug_abbrevSec, uint64_t stmt_list_offset);
+ Function *append_Function (Dwarf_cnt *ctx);
+ void parse_inlined_subroutine (Dwarf_cnt *ctx);
+ uint64_t get_low_pc ();
+ uint64_t get_high_pc (uint64_t low_pc);
+ DwrLocation *dwr_get_location (DwrSec *secp, DwrLocation *lp);
+ int read_data_attr (Dwarf_Half attr, int64_t *retVal);
+ int read_ref_attr (Dwarf_Half attr, int64_t *retVal);
+ char *get_linkage_name ();
+ char *Dwarf_string (Dwarf_Half attr);
+ int64_t Dwarf_data (Dwarf_Half attr);
+ int64_t Dwarf_ref (Dwarf_Half attr);
+ DwrSec *Dwarf_block (Dwarf_Half attr);
+ Dwarf_Addr Dwarf_addr (Dwarf_Half attr);
+ Dwarf_Addr Dwarf_location (Dwarf_Attribute attr);
+ Sp_lang_code Dwarf_lang ();
+
+ Dwarf *dwarf;
+ DwrSec *debug_infoSec;
+ uint64_t debug_abbrev_offset;
+ uint64_t stmt_list_offset; // offset in .debug_line section (DW_AT_stmt_list)
+ char *comp_dir; // compilation directory (DW_AT_comp_dir)
+ Module *module;
+ Dwarf_Half version;
+ Dwarf_Small address_size;
+ Dwr_Tag dwrTag;
+ DwrLineRegs *dwrLineReg;
+ DbeArray<DwrAbbrevTable> *abbrevTable;
+ DbeArray<Dwr_Attr> *abbrevAtForm;
+};
+
+#endif /* _DWARFLIB_H_ */
diff --git a/gprofng/src/Elf.cc b/gprofng/src/Elf.cc
new file mode 100644
index 00000000000..4117cf2aa2d
--- /dev/null
+++ b/gprofng/src/Elf.cc
@@ -0,0 +1,1138 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <unistd.h>
+
+#include "util.h"
+#include "bfd.h"
+#include "elf-bfd.h"
+#include "Elf.h"
+#include "Map.h"
+#include "StringBuilder.h"
+#include "DbeFile.h"
+
+typedef uint32_t Elf32_Word;
+typedef uint32_t Elf64_Word;
+typedef uint32_t Elf32_Addr;
+typedef uint64_t Elf64_Addr;
+typedef uint64_t Elf64_Xword;
+typedef int32_t Elf32_Sword;
+typedef int64_t Elf64_Sxword;
+typedef uint16_t Elf32_Half;
+typedef uint16_t Elf64_Half;
+
+// Ancillary entry
+typedef struct
+{
+ Elf32_Word a_tag; /* how to interpret value */
+ union
+ {
+ Elf32_Word a_val;
+ Elf32_Addr a_ptr;
+ } a_un;
+} Elf32_Ancillary;
+
+struct S_Elf64_Ancillary
+{
+ Elf64_Xword a_tag; /* how to interpret value */
+ union
+ {
+ Elf64_Xword a_val;
+ Elf64_Addr a_ptr;
+ } a_un;
+};
+
+/* Dynamic section entry. */
+typedef struct
+{
+ Elf32_Sword d_tag; /* Dynamic entry type */
+
+ union
+ {
+ Elf32_Word d_val; /* Integer value */
+ Elf32_Addr d_ptr; /* Address value */
+ } d_un;
+} Elf32_Dyn;
+
+struct S_Elf64_Dyn
+{
+ Elf64_Sxword d_tag; /* Dynamic entry type */
+
+ union
+ {
+ Elf64_Xword d_val; /* Integer value */
+ Elf64_Addr d_ptr; /* Address value */
+ } d_un;
+};
+
+
+// Symbol table
+typedef struct
+{
+ Elf32_Word st_name;
+ Elf32_Addr st_value;
+ Elf32_Word st_size;
+ unsigned char st_info; /* bind, type: ELF_32_ST_... */
+ unsigned char st_other;
+ Elf32_Half st_shndx; /* SHN_... */
+} Elf32_Sym;
+
+typedef struct
+{
+ Elf64_Word st_name;
+ unsigned char st_info; /* bind, type: ELF_64_ST_... */
+ unsigned char st_other;
+ Elf64_Half st_shndx; /* SHN_... */
+ Elf64_Addr st_value;
+ Elf64_Xword st_size;
+} Elf64_Sym;
+
+
+// Relocation
+typedef struct
+{
+ Elf32_Addr r_offset;
+ Elf32_Word r_info; /* sym, type: ELF32_R_... */
+} Elf32_Rel;
+
+typedef struct
+{
+ Elf32_Addr r_offset;
+ Elf32_Word r_info; /* sym, type: ELF32_R_... */
+ Elf32_Sword r_addend;
+} Elf32_Rela;
+
+typedef struct
+{
+ Elf64_Addr r_offset;
+ Elf64_Xword r_info; /* sym, type: ELF64_R_... */
+} Elf64_Rel;
+
+typedef struct
+{
+ Elf64_Addr r_offset;
+ Elf64_Xword r_info; /* sym, type: ELF64_R_... */
+ Elf64_Sxword r_addend;
+} Elf64_Rela;
+
+int Elf::bfd_status = -1;
+
+void
+Elf::elf_init ()
+{
+ if (bfd_status == -1)
+ bfd_status = bfd_init ();
+}
+
+Elf::Elf (char *filename) : DbeMessages (), Data_window (filename)
+{
+ ehdrp = NULL;
+ data = NULL;
+ ancillary_files = NULL;
+ elfSymbols = NULL;
+ gnu_debug_file = NULL;
+ dbeFile = NULL;
+ abfd = NULL;
+ if (bfd_status != BFD_INIT_MAGIC)
+ {
+ status = ELF_ERR_CANT_OPEN_FILE;
+ return;
+ }
+ abfd = bfd_openr (filename, NULL);
+ if (abfd == NULL)
+ {
+ status = ELF_ERR_CANT_OPEN_FILE;
+ return;
+ }
+ if (!bfd_check_format (abfd, bfd_object))
+ {
+ bfd_close (abfd);
+ abfd = NULL;
+ status = ELF_ERR_CANT_OPEN_FILE;
+ return;
+ }
+ ehdrp = elf_getehdr ();
+ if (ehdrp == NULL)
+ {
+ bfd_close (abfd);
+ abfd = NULL;
+ status = ELF_ERR_BAD_ELF_FORMAT;
+ return;
+ }
+ elf_class = ehdrp->e_ident[EI_CLASS];
+ elf_datatype = ehdrp->e_ident[EI_DATA];
+
+ if (not_opened ())
+ {
+ status = ELF_ERR_CANT_OPEN_FILE;
+ return;
+ }
+ status = ELF_ERR_NONE;
+
+#if ARCH(SPARC)
+ need_swap_endian = is_Intel ();
+#else
+ need_swap_endian = !is_Intel ();
+#endif
+
+ analyzerInfo = 0;
+ SUNW_ldynsym = 0;
+ gnuLink = 0;
+ stab = 0;
+ stabStr = 0;
+ stabIndex = 0;
+ stabIndexStr = 0;
+ stabExcl = 0;
+ stabExclStr = 0;
+ symtab = 0;
+ dynsym = 0;
+ info = 0;
+ plt = 0;
+ dwarf = false;
+
+ for (unsigned int sec = 1; sec < elf_getehdr ()->e_shnum; sec++)
+ {
+ char *name = get_sec_name (sec);
+ if (name == NULL)
+ continue;
+ if (streq (name, NTXT (".stab")))
+ stab = sec;
+ else if (streq (name, NTXT (".stabstr")))
+ stabStr = sec;
+ else if (streq (name, NTXT (".stab.index")))
+ stabIndex = sec;
+ else if (streq (name, NTXT (".stab.indexstr")))
+ stabIndexStr = sec;
+ else if (streq (name, NTXT (".stab.excl")))
+ stabExcl = sec;
+ else if (streq (name, NTXT (".stab.exclstr")))
+ stabExclStr = sec;
+ else if (streq (name, NTXT (".gnu_debuglink")))
+ gnuLink = sec;
+ else if (streq (name, NTXT (".__analyzer_info")))
+ analyzerInfo = sec;
+ else if (streq (name, NTXT (".info")))
+ info = true;
+ else if (streq (name, NTXT (".plt")))
+ plt = sec;
+ else if (streq (name, NTXT (".SUNW_ldynsym")))
+ SUNW_ldynsym = sec;
+ else if (streq (name, NTXT (".dynsym")))
+ dynsym = sec;
+ else if (streq (name, NTXT (".symtab")))
+ symtab = sec;
+ else if (strncmp (name, NTXT (".debug"), 6) == 0)
+ dwarf = true;
+ }
+ if (fd != -1)
+ {
+ close (fd);
+ fd = -1;
+ }
+}
+
+Elf::~Elf ()
+{
+ if (data)
+ {
+ for (int i = 0; i < (int) ehdrp->e_shnum; i++)
+ {
+ Elf_Data *p = data[i];
+ if (p && !mmap_on_file && (p->d_flags & SHF_SUNW_ABSENT) == 0)
+ free (p->d_buf);
+ delete p;
+ }
+ free (data);
+ }
+ if (ancillary_files)
+ {
+ ancillary_files->destroy ();
+ delete ancillary_files;
+ }
+ delete elfSymbols;
+ delete gnu_debug_file;
+ delete dbeFile;
+ if (abfd)
+ bfd_close (abfd);
+}
+
+Elf_Internal_Ehdr *
+Elf::elf_getehdr ()
+{
+ if (ehdrp == NULL && abfd)
+ ehdrp = elf_elfheader (abfd);
+ return ehdrp;
+}
+
+Elf_Internal_Phdr *
+Elf::get_phdr (unsigned int ndx)
+{
+ if (ehdrp == NULL || ndx >= ehdrp->e_phnum)
+ return NULL;
+ return &(elf_tdata (abfd)->phdr[ndx]);
+}
+
+Elf_Internal_Shdr *
+Elf::get_shdr (unsigned int ndx)
+{
+ if (ehdrp == NULL || ndx >= ehdrp->e_shnum)
+ return NULL;
+ return elf_elfsections (abfd)[ndx];
+}
+
+Elf64_Dyn *
+Elf::elf_getdyn (Elf_Internal_Phdr *phdr, unsigned int ndx, Elf64_Dyn *pdyn)
+{
+ if (elf_getclass () == ELFCLASS32)
+ {
+ if (ndx * sizeof (Elf32_Dyn) >= phdr->p_filesz)
+ return NULL;
+ Elf32_Dyn *hdr = (Elf32_Dyn*) bind (phdr->p_offset + ndx * sizeof (Elf32_Dyn),
+ sizeof (Elf32_Dyn));
+ if (hdr == NULL)
+ return NULL;
+ pdyn->d_tag = decode (hdr->d_tag);
+ pdyn->d_un.d_val = decode (hdr->d_un.d_val);
+ }
+ else
+ {
+ if (ndx * sizeof (Elf64_Dyn) >= phdr->p_filesz)
+ return NULL;
+ Elf64_Dyn *hdr = (Elf64_Dyn*) bind (phdr->p_offset + ndx * sizeof (Elf64_Dyn),
+ sizeof (Elf64_Dyn));
+ if (hdr == NULL)
+ return NULL;
+ pdyn->d_tag = decode (hdr->d_tag);
+ pdyn->d_un.d_val = decode (hdr->d_un.d_val);
+ }
+ return pdyn;
+}
+
+unsigned
+Elf::elf_version (unsigned ver)
+{
+ // We compile locally, no need to check the version
+ return ver;
+}
+
+Elf *
+Elf::elf_begin (char *fname, Elf_status *stp)
+{
+ if (fname == NULL)
+ {
+ if (stp)
+ *stp = ELF_ERR_CANT_OPEN_FILE;
+ return NULL;
+ }
+ Elf *elf = new Elf (fname);
+ if (stp)
+ *stp = elf->status;
+ if (elf->status != ELF_ERR_NONE)
+ {
+ delete elf;
+ return NULL;
+ }
+#if DEBUG
+ if (DUMP_ELF_SEC)
+ {
+ char *str = elf->dump ();
+ fprintf (stderr, NTXT ("%s\n\n"), str);
+ free (str);
+ }
+#endif /* DEBUG */
+ return elf;
+}
+
+unsigned int
+Elf::elf_get_sec_num (const char *name)
+{
+ if (name == NULL || ehdrp == NULL)
+ return 0;
+ for (unsigned int sec = 1; sec < ehdrp->e_shnum; sec++)
+ {
+ Elf_Internal_Shdr *shdr = get_shdr (sec);
+ if (shdr == NULL)
+ continue;
+ char *sname = elf_strptr (ehdrp->e_shstrndx, shdr->sh_name);
+ if (sname != NULL && strcmp (name, sname) == 0)
+ return sec;
+ }
+ return 0;
+}
+
+char *
+Elf::get_sec_name (unsigned int sec)
+{
+ Elf_Internal_Shdr *shdr = get_shdr (sec);
+ if (ehdrp == NULL || shdr == NULL)
+ return NULL;
+ return elf_strptr (ehdrp->e_shstrndx, shdr->sh_name);
+}
+
+Elf_Data *
+Elf::elf_getdata (unsigned int sec)
+{
+ if (data == NULL)
+ {
+ data = (Elf_Data **) malloc (ehdrp->e_shnum * sizeof (Elf_Data *));
+ for (int i = 0; i < (int) ehdrp->e_shnum; i++)
+ data[i] = NULL;
+ }
+ Elf_Data *edta = data[sec];
+ if (edta == NULL)
+ {
+ Elf_Internal_Shdr *shdr = get_shdr (sec);
+ if (shdr == NULL)
+ return NULL;
+ edta = new Elf_Data;
+ data[sec] = edta;
+ if ((shdr->sh_flags & SHF_SUNW_ABSENT) != 0)
+ {
+ char *sname = get_sec_name (sec);
+ for (int i = 0, sz = VecSize(ancillary_files); i < sz; i++)
+ {
+ Elf *ancElf = ancillary_files->fetch (i);
+ int secNum = sec;
+ if (dbe_strcmp (sname, ancElf->get_sec_name (sec)) != 0)
+ {
+ append_msg (CMSG_WARN,
+ "Warning: the section #%d (%s) is mismatch in ancillary file '%s')\n",
+ sec, STR (sname), STR (ancElf->fname));
+ secNum = ancElf->elf_get_sec_num (sname);
+ }
+ if (secNum > 0)
+ {
+ Elf_Data *ed = ancElf->elf_getdata (secNum);
+ if (ed && ed->d_buf)
+ {
+ *edta = *ed;
+ edta->d_flags |= SHF_SUNW_ABSENT;
+ return edta;
+ }
+ }
+ }
+ }
+ edta->d_buf = get_data (shdr->sh_offset, (size_t) shdr->sh_size, NULL);
+ edta->d_flags = shdr->sh_flags;
+ edta->d_size = ((edta->d_buf == NULL) || (shdr->sh_type == SHT_NOBITS)) ? 0 : shdr->sh_size;
+ edta->d_off = shdr->sh_offset;
+ edta->d_align = shdr->sh_addralign;
+ }
+ return edta;
+}
+
+int64_t
+Elf::elf_checksum ()
+{
+ if (ehdrp == NULL)
+ return 0;
+ int64_t chk = 0;
+ for (unsigned int ndx = 0; ndx < ehdrp->e_phnum; ndx++)
+ {
+ Elf_Internal_Phdr *phdr = get_phdr (ndx);
+ if (phdr == NULL)
+ continue;
+ if (phdr->p_type == PT_DYNAMIC)
+ {
+ Elf64_Dyn edyn;
+ for (unsigned int i = 0; elf_getdyn (phdr, i, &edyn) != NULL; i++)
+ {
+ if (!edyn.d_tag)
+ break;
+ if (edyn.d_tag == DT_CHECKSUM)
+ {
+ chk = edyn.d_un.d_val;
+ break;
+ }
+ }
+ }
+ }
+ return normalize_checksum (chk);
+}
+
+uint64_t
+Elf::get_baseAddr ()
+{
+ uint64_t addr = 0;
+ for (unsigned int pnum = 0; pnum < elf_getehdr ()->e_phnum; pnum++)
+ {
+ Elf_Internal_Phdr *phdr = get_phdr (pnum);
+ if (phdr->p_type == PT_LOAD && phdr->p_flags == (PF_R | PF_X))
+ {
+ if (addr == 0)
+ addr = phdr->p_vaddr;
+ else
+ {
+ addr = 0;
+ break;
+ }
+ }
+ }
+ return addr;
+}
+
+char *
+Elf::elf_strptr (unsigned int sec, uint64_t off)
+{
+ Elf_Data *edta = elf_getdata (sec);
+ if (edta && edta->d_buf && edta->d_size > off)
+ return ((char *) edta->d_buf) + off;
+ return NULL;
+}
+
+Elf_Internal_Sym *
+Elf::elf_getsym (Elf_Data *edta, unsigned int ndx, Elf_Internal_Sym *dst)
+{
+ if (dst == NULL || edta == NULL)
+ return NULL;
+ if (elf_getclass () == ELFCLASS32)
+ {
+ if (edta->d_size <= ndx * sizeof (Elf32_Sym))
+ return NULL;
+ Elf32_Sym *hdr = (Elf32_Sym*) bind (edta->d_off + ndx * sizeof (Elf32_Sym), sizeof (Elf32_Sym));
+ if (hdr == NULL)
+ return NULL;
+ dst->st_name = decode (hdr->st_name);
+ dst->st_value = decode (hdr->st_value);
+ dst->st_size = decode (hdr->st_size);
+ dst->st_info = ELF64_ST_INFO (ELF32_ST_BIND (decode (hdr->st_info)),
+ ELF32_ST_TYPE (decode (hdr->st_info)));
+ dst->st_other = decode (hdr->st_other);
+ dst->st_shndx = decode (hdr->st_shndx);
+ }
+ else
+ {
+ if (edta->d_size <= ndx * sizeof (Elf64_Sym))
+ return NULL;
+ Elf64_Sym *hdr = (Elf64_Sym*) bind (edta->d_off + ndx * sizeof (Elf64_Sym),
+ sizeof (Elf64_Sym));
+ if (hdr == NULL)
+ return NULL;
+ dst->st_name = decode (hdr->st_name);
+ dst->st_value = decode (hdr->st_value);
+ dst->st_size = decode (hdr->st_size);
+ dst->st_info = decode (hdr->st_info);
+ dst->st_other = decode (hdr->st_other);
+ dst->st_shndx = decode (hdr->st_shndx);
+ }
+ return dst;
+}
+
+Elf_Internal_Rela *
+Elf::elf_getrel (Elf_Data *edta, unsigned int ndx, Elf_Internal_Rela *dst)
+{
+ if (dst == NULL || edta == NULL || edta->d_buf == NULL)
+ return NULL;
+ if (elf_getclass () == ELFCLASS32)
+ {
+ Elf32_Rel *rel = ((Elf32_Rel *) edta->d_buf) + ndx;
+ dst->r_offset = decode (rel->r_offset);
+ dst->r_info = ELF64_R_INFO (ELF32_R_SYM (decode (rel->r_info)),
+ ELF32_R_TYPE (decode (rel->r_info)));
+ }
+ else
+ {
+ Elf64_Rel *rel = ((Elf64_Rel *) edta->d_buf) + ndx;
+ dst->r_offset = decode (rel->r_offset);
+ dst->r_info = decode (rel->r_info);
+ }
+ return dst;
+}
+
+Elf_Internal_Rela *
+Elf::elf_getrela (Elf_Data *edta, unsigned int ndx, Elf_Internal_Rela *dst)
+{
+ if (dst == NULL || edta == NULL || edta->d_buf == NULL)
+ return NULL;
+ if (elf_getclass () == ELFCLASS32)
+ {
+ Elf32_Rela *rela = ((Elf32_Rela *) edta->d_buf) + ndx;
+ dst->r_offset = decode (rela->r_offset);
+ dst->r_addend = decode (rela->r_addend);
+ dst->r_info = ELF64_R_INFO (ELF32_R_SYM (decode (rela->r_info)),
+ ELF32_R_TYPE (decode (rela->r_info)));
+ }
+ else
+ {
+ Elf64_Rela *rela = ((Elf64_Rela *) edta->d_buf) + ndx;
+ dst->r_offset = decode (rela->r_offset);
+ dst->r_addend = decode (rela->r_addend);
+ dst->r_info = decode (rela->r_info);
+ }
+ return dst;
+}
+
+Elf64_Ancillary *
+Elf::elf_getancillary (Elf_Data *edta, unsigned int ndx, Elf64_Ancillary *dst)
+{
+ if (dst == NULL || edta == NULL || edta->d_buf == NULL)
+ return NULL;
+ if (elf_getclass () == ELFCLASS32)
+ {
+ Elf32_Ancillary *p = ((Elf32_Ancillary *) edta->d_buf) + ndx;
+ dst->a_tag = decode (p->a_tag);
+ dst->a_un.a_val = decode (p->a_un.a_val);
+ }
+ else
+ {
+ Elf64_Ancillary *p = ((Elf64_Ancillary *) edta->d_buf) + ndx;
+ dst->a_tag = decode (p->a_tag);
+ dst->a_un.a_val = decode (p->a_un.a_val);
+ }
+ return dst;
+}
+
+Elf *
+Elf::get_related_file (const char *lo_name, const char *nm)
+{
+ DbeFile *df;
+ if (*nm == '/')
+ {
+ df = new DbeFile (nm);
+ df->filetype |= (DbeFile::F_FILE | DbeFile::F_DEBUG_FILE);
+ }
+ else
+ {
+ char *bname = get_basename (lo_name);
+ char *fnm = dbe_sprintf ("%.*s/%s", (int) (bname - lo_name), lo_name, nm);
+ df = new DbeFile (fnm);
+ df->filetype |= (DbeFile::F_FILE | DbeFile::F_DEBUG_FILE);
+ free (fnm);
+ }
+ Dprintf (DEBUG_STABS, "get_related_file: %s -> '%s'\n", nm, df->get_name ());
+ Elf_status st = ELF_ERR_CANT_OPEN_FILE;
+ Elf *elf = elf_begin (df->get_location (), &st);
+ if (elf)
+ {
+ elf->dbeFile = df;
+ return elf;
+ }
+ switch (st)
+ {
+ case ELF_ERR_CANT_OPEN_FILE:
+ append_msg (CMSG_ERROR, GTXT ("Cannot open file `%s'"), df->get_name ());
+ break;
+ case ELF_ERR_BAD_ELF_FORMAT:
+ default:
+ append_msg (CMSG_ERROR, GTXT ("Cannot read ELF header of `%s'"),
+ df->get_name ());
+ break;
+ }
+ delete df;
+ return NULL;
+}
+
+Elf *
+Elf::find_ancillary_files (char *lo_name)
+{
+ // read the .gnu_debuglink and .SUNW_ancillary seections
+ if (gnu_debug_file)
+ return gnu_debug_file;
+ unsigned int sec = elf_get_sec_num (NTXT (".gnu_debuglink"));
+ if (sec > 0)
+ {
+ Elf_Data *dp = elf_getdata (sec);
+ if (dp)
+ {
+ gnu_debug_file = get_related_file (lo_name, (char *) (dp->d_buf));
+ if (gnu_debug_file)
+ return gnu_debug_file;
+ }
+ }
+
+ sec = elf_get_sec_num (NTXT (".SUNW_ancillary"));
+ if (sec > 0)
+ {
+ Elf_Internal_Shdr *shdr = get_shdr (sec);
+ uint64_t check_sum = 0;
+ char *ancName = NULL;
+ if (shdr)
+ {
+ Elf_Data *dp = elf_getdata (sec);
+ for (int i = 0, sz = (int) (shdr->sh_size / shdr->sh_entsize);
+ i < sz; i++)
+ {
+ Elf64_Ancillary anc;
+ if (elf_getancillary (dp, i, &anc) == NULL
+ || anc.a_tag == ANC_SUNW_NULL)
+ break;
+ if (anc.a_tag == ANC_SUNW_MEMBER)
+ ancName = elf_strptr (shdr->sh_link, anc.a_un.a_ptr);
+ else if (anc.a_tag == ANC_SUNW_CHECKSUM)
+ {
+ if (i == 0)
+ {
+ check_sum = anc.a_un.a_val;
+ continue;
+ }
+ if (check_sum == anc.a_un.a_val)
+ ancName = NULL;
+ if (ancName)
+ {
+ Elf *ancElf = get_related_file (lo_name, ancName);
+ if (ancElf == NULL)
+ continue;
+ int ancSec = ancElf->elf_get_sec_num (".SUNW_ancillary");
+ if (ancSec > 0)
+ {
+ Elf_Internal_Shdr *ancHdr = ancElf->get_shdr (ancSec);
+ if (ancHdr)
+ {
+ Elf_Data *anc_dp = ancElf->elf_getdata (ancSec);
+ Elf64_Ancillary anc1;
+ if (ancElf->elf_getancillary (anc_dp, 0, &anc1)
+ && (anc1.a_tag == ANC_SUNW_CHECKSUM) &&
+ anc1.a_un.a_val == anc.a_un.a_val)
+ {
+ if (ancillary_files == NULL)
+ ancillary_files = new Vector<Elf*>(2);
+ ancillary_files->append (ancElf);
+ }
+ else
+ append_msg (CMSG_WARN, GTXT ("Load Object: '%s' (checksum Ox%lld). The .anc file '%s' has checksum Ox%llx"),
+ STR (fname), (long long) check_sum,
+ STR (ancElf->dbeFile->get_location ()),
+ (long long) anc1.a_un.a_val);
+ }
+ }
+ ancName = NULL;
+ }
+ }
+ }
+ }
+ }
+ return NULL;
+}
+
+char*
+Elf::get_location ()
+{
+ return dbeFile ? dbeFile->get_location () : fname;
+}
+
+#define RET_S(x) if (t == x) return (char *) #x
+
+static char *
+get_elf_class_name (int t)
+{
+ RET_S (ELFCLASSNONE);
+ RET_S (ELFCLASS32);
+ RET_S (ELFCLASS64);
+ return NTXT ("ELFCLASS_UNKNOWN");
+}
+
+static char *
+get_elf_data_name (int t)
+{
+ RET_S (ELFDATANONE);
+ RET_S (ELFDATA2LSB);
+ RET_S (ELFDATA2MSB);
+ return NTXT ("ELFDATA_UNKNOWN");
+}
+
+static char *
+get_elf_osabi_name (int t)
+{
+ RET_S (ELFOSABI_NONE);
+ RET_S (ELFOSABI_HPUX);
+ RET_S (ELFOSABI_NETBSD);
+ RET_S (ELFOSABI_LINUX);
+ RET_S (ELFOSABI_SOLARIS);
+ RET_S (ELFOSABI_AIX);
+ RET_S (ELFOSABI_IRIX);
+ RET_S (ELFOSABI_FREEBSD);
+ RET_S (ELFOSABI_TRU64);
+ RET_S (ELFOSABI_MODESTO);
+ RET_S (ELFOSABI_OPENBSD);
+ return NTXT ("ELFOSABI_UNKNOWN");
+}
+
+static char *
+get_elf_etype_name (int t)
+{
+ RET_S (ET_NONE);
+ RET_S (ET_REL);
+ RET_S (ET_EXEC);
+ RET_S (ET_DYN);
+ RET_S (ET_CORE);
+ RET_S (ET_LOPROC);
+ RET_S (ET_HIPROC);
+ return NTXT ("ETYPE_UNKNOWN");
+}
+
+static char *
+get_elf_ptype_name (int t)
+{
+ RET_S (PT_NULL);
+ RET_S (PT_LOAD);
+ RET_S (PT_DYNAMIC);
+ RET_S (PT_INTERP);
+ RET_S (PT_NOTE);
+ RET_S (PT_SHLIB);
+ RET_S (PT_PHDR);
+ RET_S (PT_TLS);
+ RET_S (PT_LOOS);
+ RET_S (PT_GNU_EH_FRAME);
+ RET_S (PT_GNU_EH_FRAME);
+ RET_S (PT_HIOS);
+ RET_S (PT_LOPROC);
+ RET_S (PT_HIPROC);
+ return NTXT ("PTYPE_UNKNOWN");
+}
+
+static char *
+get_elf_shtype_name (unsigned int t)
+{
+ RET_S (SHT_NULL);
+ RET_S (SHT_PROGBITS);
+ RET_S (SHT_SYMTAB);
+ RET_S (SHT_STRTAB);
+ RET_S (SHT_RELA);
+ RET_S (SHT_HASH);
+ RET_S (SHT_DYNAMIC);
+ RET_S (SHT_NOTE);
+ RET_S (SHT_NOBITS);
+ RET_S (SHT_REL);
+ RET_S (SHT_SHLIB);
+ RET_S (SHT_DYNSYM);
+ RET_S (SHT_INIT_ARRAY);
+ RET_S (SHT_FINI_ARRAY);
+ RET_S (SHT_PREINIT_ARRAY);
+ RET_S (SHT_GROUP);
+ RET_S (SHT_SYMTAB_SHNDX);
+ RET_S (SHT_LOOS);
+ RET_S (SHT_SUNW_verdef);
+ RET_S (SHT_SUNW_verneed);
+ RET_S (SHT_HIOS);
+ RET_S (SHT_LOPROC);
+ RET_S (SHT_HIPROC);
+ RET_S (SHT_LOUSER);
+ RET_S (SHT_HIUSER);
+ return NTXT ("SHTYPE_UNKNOWN");
+}
+
+static char *
+get_elf_machine_name (int t)
+{
+ RET_S (EM_NONE);
+ RET_S (EM_M32);
+ RET_S (EM_SPARC);
+ RET_S (EM_386);
+ RET_S (EM_68K);
+ RET_S (EM_88K);
+ RET_S (EM_860);
+ RET_S (EM_MIPS);
+ RET_S (EM_S370);
+ RET_S (EM_MIPS_RS3_LE);
+ RET_S (EM_SPARC32PLUS);
+ RET_S (EM_960);
+ RET_S (EM_PPC);
+ RET_S (EM_PPC64);
+ RET_S (EM_V800);
+ RET_S (EM_FR20);
+ RET_S (EM_RH32);
+ RET_S (EM_RCE);
+ RET_S (EM_ARM);
+ RET_S (EM_ALPHA);
+ RET_S (EM_SH);
+ RET_S (EM_SPARCV9);
+ RET_S (EM_TRICORE);
+ RET_S (EM_ARC);
+ RET_S (EM_H8_300);
+ RET_S (EM_H8_300H);
+ RET_S (EM_H8S);
+ RET_S (EM_H8_500);
+ RET_S (EM_IA_64);
+ RET_S (EM_MIPS_X);
+ RET_S (EM_COLDFIRE);
+ RET_S (EM_68HC12);
+ RET_S (EM_MMA);
+ RET_S (EM_PCP);
+ RET_S (EM_NCPU);
+ RET_S (EM_NDR1);
+ RET_S (EM_STARCORE);
+ RET_S (EM_ME16);
+ RET_S (EM_ST100);
+ RET_S (EM_TINYJ);
+ RET_S (EM_X86_64);
+ RET_S (EM_PDSP);
+ RET_S (EM_FX66);
+ RET_S (EM_ST9PLUS);
+ RET_S (EM_ST7);
+ RET_S (EM_68HC16);
+ RET_S (EM_68HC11);
+ RET_S (EM_68HC08);
+ RET_S (EM_68HC05);
+ RET_S (EM_SVX);
+ RET_S (EM_ST19);
+ RET_S (EM_VAX);
+ RET_S (EM_CRIS);
+ RET_S (EM_JAVELIN);
+ RET_S (EM_FIREPATH);
+ RET_S (EM_ZSP);
+ RET_S (EM_MMIX);
+ RET_S (EM_HUANY);
+ RET_S (EM_PRISM);
+ RET_S (EM_AVR);
+ RET_S (EM_FR30);
+ RET_S (EM_D10V);
+ RET_S (EM_D30V);
+ RET_S (EM_V850);
+ RET_S (EM_M32R);
+ RET_S (EM_MN10300);
+ RET_S (EM_MN10200);
+ RET_S (EM_PJ);
+ RET_S (EM_OPENRISC);
+ RET_S (EM_XTENSA);
+ return NTXT ("ELFMACHINE_UNKNOWN");
+}
+
+static char *
+get_elf_version_name (int t)
+{
+ RET_S (EV_NONE);
+ RET_S (EV_CURRENT);
+ return NTXT ("VERSION_UNKNOWN");
+}
+
+static char *
+get_elf_ancillary_tag (int t)
+{
+ RET_S (ANC_SUNW_NULL);
+ RET_S (ANC_SUNW_CHECKSUM);
+ RET_S (ANC_SUNW_MEMBER);
+ RET_S (ANC_SUNW_NUM);
+ return NTXT ("ANCILLARY_TAG_UNKNOWN");
+}
+
+#define ADD_S(x) if ((f & (x)) == (x)) { sb->append(' '); sb->append(#x); f &= ~(x); }
+
+static void
+dump_sh_flags (StringBuilder *sb, long long flags)
+{
+ long long f = flags;
+ if (f != 0)
+ {
+ sb->append (NTXT (" ["));
+ ADD_S (SHF_WRITE)
+ ADD_S (SHF_ALLOC)
+ ADD_S (SHF_EXECINSTR)
+ ADD_S (SHF_MERGE)
+ ADD_S (SHF_STRINGS)
+ ADD_S (SHF_INFO_LINK)
+ ADD_S (SHF_LINK_ORDER)
+ ADD_S (SHF_OS_NONCONFORMING)
+ ADD_S (SHF_GROUP)
+ ADD_S (SHF_TLS)
+ ADD_S (SHF_SUNW_ABSENT)
+ ADD_S (SHF_EXCLUDE)
+ if (f != 0 && f != flags)
+ sb->appendf (NTXT (" 0x%llx"), (long long) f);
+ sb->append (NTXT (" ]"));
+ }
+ sb->append (NTXT ("\n"));
+}
+
+static void
+dump_p_flags (StringBuilder *sb, long long flags)
+{
+ long long f = flags;
+ if (f != 0)
+ {
+ sb->append (NTXT (" ["));
+ ADD_S (PF_X)
+ ADD_S (PF_W)
+ ADD_S (PF_R)
+ ADD_S (PF_MASKPROC)
+ if (f != 0 && f != flags)
+ sb->appendf (NTXT (" 0x%llx"), (long long) f);
+ sb->append (NTXT (" ]"));
+ }
+ sb->append (NTXT ("\n"));
+}
+
+char *
+Elf::dump ()
+{
+ StringBuilder sb;
+ sb.sprintf (NTXT ("ELF Header: %s\n"), fname ? fname : GTXT ("(unknown)"));
+ if (ehdrp == NULL)
+ {
+ sb.appendf (GTXT ("\n\n Cannot read Elf header\n"));
+ return sb.toString ();
+ }
+ sb.appendf (NTXT (" %-15s "), NTXT ("e_ident"));
+ for (int i = 0; i < EI_NIDENT; i++)
+ sb.appendf (NTXT ("%x"), ehdrp->e_ident[i]);
+ sb.append (NTXT ("\n"));
+ char *fmt0 = NTXT (" %-15s %10lld ( %s )\n");
+ char *fmt1 = NTXT (" %-15s 0x%08llx ( %lld )\n");
+ char *fmt2 = NTXT (" %-15s 0x%08llx");
+ sb.appendf (fmt0, NTXT ("EI_CLASS"), (long long) ehdrp->e_ident[EI_CLASS],
+ get_elf_class_name (ehdrp->e_ident[EI_CLASS]));
+ sb.appendf (fmt0, NTXT ("EI_DATA"), (long long) ehdrp->e_ident[EI_DATA],
+ get_elf_data_name (ehdrp->e_ident[EI_DATA]));
+ sb.appendf (fmt0, NTXT ("EI_OSABI"), (long long) ehdrp->e_ident[EI_OSABI],
+ get_elf_osabi_name (ehdrp->e_ident[EI_OSABI]));
+ sb.appendf (fmt0, NTXT ("e_type"), (long long) ehdrp->e_type,
+ get_elf_etype_name (ehdrp->e_type));
+ sb.appendf (fmt0, NTXT ("e_machine"), (long long) ehdrp->e_machine,
+ get_elf_machine_name (ehdrp->e_machine));
+ sb.appendf (fmt0, NTXT ("e_version"), (long long) ehdrp->e_version,
+ get_elf_version_name (ehdrp->e_version));
+ sb.appendf (fmt1, NTXT ("e_entry"), (long long) ehdrp->e_entry,
+ (long long) ehdrp->e_entry);
+ sb.appendf (fmt1, NTXT ("e_phoff"), (long long) ehdrp->e_phoff,
+ (long long) ehdrp->e_phoff);
+ sb.appendf (fmt1, NTXT ("e_shoff"), (long long) ehdrp->e_shoff,
+ (long long) ehdrp->e_shoff);
+ sb.appendf (fmt1, NTXT ("e_flags"), (long long) ehdrp->e_flags,
+ (long long) ehdrp->e_flags);
+ sb.appendf (fmt1, NTXT ("e_ehsize"), (long long) ehdrp->e_ehsize,
+ (long long) ehdrp->e_ehsize);
+ sb.appendf (fmt1, NTXT ("e_phentsize"), (long long) ehdrp->e_phentsize,
+ (long long) ehdrp->e_phentsize);
+ sb.appendf (fmt1, NTXT ("e_phnum"), (long long) ehdrp->e_phnum,
+ (long long) ehdrp->e_phnum);
+ sb.appendf (fmt1, NTXT ("e_shentsize"), (long long) ehdrp->e_shentsize,
+ (long long) ehdrp->e_shentsize);
+ sb.appendf (fmt1, NTXT ("e_shnum"), (long long) ehdrp->e_shnum,
+ (long long) ehdrp->e_shnum);
+ sb.appendf (fmt1, NTXT ("e_shstrndx"), (long long) ehdrp->e_shstrndx,
+ (long long) ehdrp->e_shstrndx);
+
+ for (unsigned int i = 0; i < ehdrp->e_phnum; i++)
+ {
+ sb.appendf (NTXT ("\nProgram Header[%d]:\n"), i);
+ Elf_Internal_Phdr *phdr = get_phdr (i);
+ if (phdr == NULL)
+ {
+ sb.appendf (NTXT (" ERROR: get_phdr(%d) failed\n"), i);
+ continue;
+ }
+ sb.appendf (fmt0, "p_type", (long long) phdr->p_type,
+ get_elf_ptype_name (phdr->p_type));
+ sb.appendf (fmt2, "p_flags", (long long) phdr->p_flags);
+ dump_p_flags (&sb, phdr->p_flags);
+ sb.appendf (fmt1, "p_offset", (long long) phdr->p_offset,
+ (long long) phdr->p_offset);
+ sb.appendf (fmt1, "p_vaddr", (long long) phdr->p_vaddr,
+ (long long) phdr->p_vaddr);
+ sb.appendf (fmt1, "p_paddr", (long long) phdr->p_paddr,
+ (long long) phdr->p_paddr);
+ sb.appendf (fmt1, "p_filesz", (long long) phdr->p_filesz,
+ (long long) phdr->p_filesz);
+ sb.appendf (fmt1, "p_memsz", (long long) phdr->p_memsz,
+ (long long) phdr->p_memsz);
+ sb.appendf (fmt1, "p_align", (long long) phdr->p_align,
+ (long long) phdr->p_align);
+ }
+
+ for (unsigned int i = 1; i < ehdrp->e_shnum; i++)
+ {
+ sb.appendf (NTXT ("\nSection Header[%d]:\n"), i);
+ Elf_Internal_Shdr *shdr = get_shdr (i);
+ if (shdr == NULL)
+ {
+ sb.appendf (NTXT (" ERROR: get_shdr(%d) failed\n"), i);
+ continue;
+ }
+ char *s = get_sec_name (i);
+ sb.appendf (fmt0, "sh_name", (long long) shdr->sh_name,
+ s ? s : NTXT ("NULL"));
+ sb.appendf (fmt0, "sh_type", (long long) shdr->sh_type,
+ get_elf_shtype_name (shdr->sh_type));
+ sb.appendf (fmt2, "sh_flags", (long long) shdr->sh_flags);
+ dump_sh_flags (&sb, shdr->sh_flags);
+ sb.appendf (fmt1, "sh_addr", (long long) shdr->sh_addr,
+ (long long) shdr->sh_addr);
+ sb.appendf (fmt1, "sh_offset", (long long) shdr->sh_offset,
+ (long long) shdr->sh_offset);
+ sb.appendf (fmt1, "sh_size", (long long) shdr->sh_size,
+ (long long) shdr->sh_size);
+ sb.appendf (fmt1, "sh_link", (long long) shdr->sh_link,
+ (long long) shdr->sh_link);
+ sb.appendf (fmt1, "sh_info", (long long) shdr->sh_info,
+ (long long) shdr->sh_info);
+ sb.appendf (fmt1, "sh_addralign", (long long) shdr->sh_addralign,
+ (long long) shdr->sh_addralign);
+ sb.appendf (fmt1, "sh_entsize", (long long) shdr->sh_entsize,
+ (long long) shdr->sh_entsize);
+ }
+
+ for (unsigned int i = 1; i < ehdrp->e_shnum; i++)
+ {
+ Elf_Internal_Shdr *shdr = get_shdr (i);
+ if (shdr == NULL)
+ continue;
+ char *secName = get_sec_name (i);
+ if (secName == NULL)
+ continue;
+ if (strcmp (NTXT (".SUNW_ancillary"), secName) == 0)
+ {
+ sb.appendf (NTXT ("\nSection[%d]: %s\n"), i, secName);
+ Elf_Data *dp = elf_getdata (i);
+ for (int j = 0, cnt = (int) (shdr->sh_size / shdr->sh_entsize);
+ j < cnt; j++)
+ {
+ Elf64_Ancillary anc;
+ if (elf_getancillary (dp, j, &anc) == NULL)
+ break;
+ sb.appendf (NTXT ("%10d %-20s 0x%08llx %6lld"), j,
+ get_elf_ancillary_tag ((int) anc.a_tag),
+ (long long) anc.a_un.a_ptr, (long long) anc.a_un.a_ptr);
+ if (anc.a_tag == ANC_SUNW_MEMBER)
+ sb.appendf (NTXT (" %s\n"), STR (elf_strptr (shdr->sh_link, anc.a_un.a_ptr)));
+ else
+ sb.append (NTXT ("\n"));
+ }
+ }
+ }
+ return sb.toString ();
+}
+
+void
+Elf::dump_elf_sec ()
+{
+ if (!DUMP_ELF_SEC)
+ return;
+ if (ehdrp == NULL)
+ return;
+ Dprintf (DUMP_ELF_SEC, "======= DwarfLib::dump_elf_sec\n"
+ " N |type|flags| sh_addr | sh_offset | sh_size | sh_link |"
+ " sh_info | sh_addralign | sh_entsize | sh_name | name\n");
+ for (unsigned int sec = 1; sec < ehdrp->e_shnum; sec++)
+ {
+ Elf_Internal_Shdr *shdr = get_shdr (sec);
+ if (shdr == NULL)
+ continue;
+ char *name = elf_strptr (ehdrp->e_shstrndx, shdr->sh_name);
+ Dprintf (DUMP_ELF_SEC, "%3d:%3d |%4d |%9lld | %9lld |%8lld |%8lld |"
+ "%8lld |%14d |%11lld | %6lld %s\n",
+ sec, (int) shdr->sh_type, (int) shdr->sh_flags,
+ (long long) shdr->sh_addr, (long long) shdr->sh_offset,
+ (long long) shdr->sh_size, (long long) shdr->sh_link,
+ (long long) shdr->sh_info,
+ (int) shdr->sh_addralign, (long long) shdr->sh_entsize,
+ (long long) shdr->sh_name, name ? name : NTXT ("NULL"));
+ }
+ Dprintf (DUMP_ELF_SEC, NTXT ("\n"));
+}
diff --git a/gprofng/src/Elf.h b/gprofng/src/Elf.h
new file mode 100644
index 00000000000..3648b882632
--- /dev/null
+++ b/gprofng/src/Elf.h
@@ -0,0 +1,170 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _Elf_h_
+#define _Elf_h_
+
+#include <string.h>
+#include "ansidecl.h"
+#include "bfd.h"
+#include "elf/common.h"
+#include "elf/internal.h"
+
+#include "Data_window.h"
+#include "Emsg.h"
+
+class Symbol;
+class DbeFile;
+template <class ITEM> class Vector;
+template <typename Key_t, typename Value_t> class Map;
+
+#define GELF_R_SYM(info) ((info)>>32)
+#define GELF_ST_TYPE(info) ((info) & 0xf)
+#define GELF_ST_BIND(info) ((info) >> 4)
+#define GELF_R_TYPE(info) ((((uint64_t)(info))<<56)>>56)
+
+#define SHF_SUNW_ABSENT 0x00200000 /* section data not present */
+
+// Ancillary values.
+#define ANC_SUNW_NULL 0
+#define ANC_SUNW_CHECKSUM 1 /* elf checksum */
+#define ANC_SUNW_MEMBER 2 /* name of ancillary group object */
+#define ANC_SUNW_NUM 3
+
+
+typedef struct S_Elf64_Dyn Elf64_Dyn;
+typedef struct S_Elf64_Ancillary Elf64_Ancillary;
+
+typedef struct
+{
+ void *d_buf;
+ uint64_t d_flags;
+ uint64_t d_size;
+ uint64_t d_off; // offset into section
+ uint64_t d_align; // alignment in section
+} Elf_Data;
+
+class Elf : public DbeMessages, public Data_window
+{
+public:
+ enum Elf_status
+ {
+ ELF_ERR_NONE,
+ ELF_ERR_CANT_OPEN_FILE,
+ ELF_ERR_CANT_MMAP,
+ ELF_ERR_BIG_FILE,
+ ELF_ERR_BAD_ELF_FORMAT,
+ ELF_ERR_READ_FILE
+ };
+
+ Elf (char *_fname);
+ ~Elf ();
+
+ static void elf_init ();
+ static unsigned elf_version (unsigned ver);
+ static Elf *elf_begin (char *_fname, Elf_status *stp = NULL);
+
+ unsigned int elf_get_sec_num (const char *sec_name);
+ char *get_sec_name (unsigned int sec);
+ Elf_Internal_Ehdr *elf_getehdr ();
+ Elf_Internal_Phdr *get_phdr (unsigned int ndx);
+ Elf_Internal_Shdr *get_shdr (unsigned int ndx);
+ Elf64_Dyn *elf_getdyn (Elf_Internal_Phdr *phdr, unsigned int ndx, Elf64_Dyn *pdyn);
+ Elf_Data *elf_getdata (unsigned int sec);
+ int64_t elf_checksum ();
+ uint64_t get_baseAddr();
+ char *elf_strptr (unsigned int sec, uint64_t off);
+ Elf_Internal_Sym *elf_getsym (Elf_Data *edta, unsigned int ndx, Elf_Internal_Sym *dst);
+ Elf_Internal_Rela *elf_getrel (Elf_Data *edta, unsigned int ndx, Elf_Internal_Rela *dst);
+ Elf_Internal_Rela *elf_getrela (Elf_Data *edta, unsigned int ndx, Elf_Internal_Rela *dst);
+ Elf64_Ancillary *elf_getancillary (Elf_Data *edta, unsigned int ndx, Elf64_Ancillary *dst);
+ Elf *find_ancillary_files (char *lo_name); // read the .gnu_debuglink and .SUNW_ancillary seections
+ char *get_location ();
+ char *dump ();
+ void dump_elf_sec ();
+
+ static inline int64_t
+ normalize_checksum (int64_t chk)
+ {
+ return (chk == 0xffffffff || chk == -1) ? 0 : chk;
+ };
+
+ inline bool
+ is_Intel ()
+ {
+ return elf_datatype == ELFDATA2LSB;
+ };
+
+ inline int
+ elf_getclass ()
+ {
+ return elf_class;
+ };
+
+ inline int
+ elf_getdatatype ()
+ {
+ return elf_datatype;
+ };
+
+ Elf_status status;
+ Vector<Elf*> *ancillary_files;
+ Elf *gnu_debug_file;
+ DbeFile *dbeFile;
+ Map<const char*, Symbol*> *elfSymbols;
+ unsigned int gnuLink, analyzerInfo, SUNW_ldynsym, stab, stabStr, symtab, dynsym;
+ unsigned int stabIndex, stabIndexStr, stabExcl, stabExclStr, info, plt;
+ bool dwarf;
+
+protected:
+ Elf *get_related_file (const char *lo_name, const char *nm);
+ int elf_class;
+ int elf_datatype;
+ Elf_Internal_Ehdr *ehdrp;
+ Elf_Data **data;
+ bfd *abfd;
+ static int bfd_status;
+};
+
+
+class ElfReloc
+{
+public:
+ struct Sreloc
+ {
+ long long offset;
+ long long value;
+ int stt_type;
+ };
+
+ static ElfReloc *get_elf_reloc (Elf *elf, char *sec_name, ElfReloc *rlc);
+ ElfReloc (Elf *_elf);
+ ~ElfReloc ();
+ long long get_reloc_addr (long long offset);
+ void dump ();
+ void dump_rela_debug_sec (int sec);
+
+private:
+ Elf *elf;
+ Vector<Sreloc *> *reloc;
+ int cur_reloc_ind;
+};
+
+#endif
diff --git a/gprofng/src/Emsg.cc b/gprofng/src/Emsg.cc
new file mode 100644
index 00000000000..11bad97d1b7
--- /dev/null
+++ b/gprofng/src/Emsg.cc
@@ -0,0 +1,614 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <stdarg.h>
+
+#include "util.h"
+#include "Emsg.h"
+#include "StringBuilder.h"
+
+// The Emsg, experiment message, has as objects I18N'd messages
+// in a structure suitable for attaching to and fetching
+// from a queue of such messages. It is intended to
+// be used for collector errors, collector warnings, parser
+// errors, and er_archive errors that are encountered when
+// reading an experiment
+
+// ----------------------- Message --------------------------
+
+Emsg::Emsg (Cmsg_warn w, const char *i18n_text)
+{
+ warn = w;
+ flavor = 0;
+ par = NULL;
+ text = strdup (i18n_text);
+ next = NULL;
+}
+
+Emsg::Emsg (Cmsg_warn w, StringBuilder& sb)
+{
+ warn = w;
+ flavor = 0;
+ par = NULL;
+ text = sb.toString ();
+ next = NULL;
+}
+
+Emsg::Emsg (Cmsg_warn w, int f, const char *param)
+{
+ char *type;
+ warn = w;
+ flavor = f;
+ if (param != NULL)
+ par = dbe_strdup (param);
+ else
+ par = dbe_strdup ("");
+ next = NULL;
+
+ // determine type
+ switch (warn)
+ {
+ case CMSG_WARN:
+ type = GTXT ("*** Collector Warning");
+ break;
+ case CMSG_ERROR:
+ type = GTXT ("*** Collector Error");
+ break;
+ case CMSG_FATAL:
+ type = GTXT ("*** Collector Fatal Error");
+ break;
+ case CMSG_COMMENT:
+ type = GTXT ("Comment");
+ break;
+ case CMSG_PARSER:
+ type = GTXT ("*** Log Error");
+ break;
+ case CMSG_ARCHIVE:
+ type = GTXT ("*** Archive Error");
+ break;
+ default:
+ type = GTXT ("*** Internal Error");
+ break;
+ };
+
+ // now convert the message to its I18N'd string
+ switch (flavor)
+ {
+ case COL_ERROR_NONE:
+ text = dbe_sprintf (GTXT ("%s: No error"), type);
+ break;
+ case COL_ERROR_ARGS2BIG:
+ text = dbe_sprintf (GTXT ("%s: Data argument too long"), type);
+ break;
+ case COL_ERROR_BADDIR:
+ text = dbe_sprintf (GTXT ("%s: Bad experiment directory name"), type);
+ break;
+ case COL_ERROR_ARGS:
+ text = dbe_sprintf (GTXT ("%s: Data argument format error `%s'"), type, par);
+ break;
+ case COL_ERROR_PROFARGS:
+ text = dbe_sprintf (GTXT ("%s: [UNUSED] Bad clock-profiling argument"), type);
+ break;
+ case COL_ERROR_SYNCARGS:
+ text = dbe_sprintf (GTXT ("%s: [UNUSED] Bad synchronization tracing argument"), type);
+ break;
+ case COL_ERROR_HWCARGS:
+ text = dbe_sprintf (GTXT ("%s: Bad hardware counter profiling argument"), type);
+ break;
+ case COL_ERROR_DIRPERM:
+ text = dbe_sprintf (GTXT ("%s: Experiment directory is not writeable; check umask and permissions"), type);
+ break;
+ case COL_ERROR_NOMSACCT:
+ text = dbe_sprintf (GTXT ("%s: Turning on microstate accounting failed"), type);
+ break;
+ case COL_ERROR_PROFINIT:
+ text = dbe_sprintf (GTXT ("%s: Initializing clock-profiling failed"), type);
+ break;
+ case COL_ERROR_SYNCINIT:
+ text = dbe_sprintf (GTXT ("%s: Initializing synchronization tracing failed"), type);
+ break;
+ case COL_ERROR_HWCINIT:
+ text = dbe_sprintf (GTXT ("%s: Initializing hardware counter profiling failed -- %s"), type, par);
+ break;
+ case COL_ERROR_HWCFAIL:
+ text = dbe_sprintf (GTXT ("%s: HW counter data collection failed; likely cause is that another process preempted the counters"), type);
+ break;
+ case COL_ERROR_EXPOPEN:
+ text = dbe_sprintf (GTXT ("%s: Experiment initialization failed, %s"), type, par);
+ break;
+ case COL_ERROR_SIZELIM:
+ text = dbe_sprintf (GTXT ("%s: Experiment size limit exceeded, writing %s"), type, par);
+ break;
+ case COL_ERROR_SYSINFO:
+ text = dbe_sprintf (GTXT ("%s: system name can not be determined"), type);
+ break;
+ case COL_ERROR_OVWOPEN:
+ text = dbe_sprintf (GTXT ("%s: Can't open overview %s"), type, par);
+ break;
+ case COL_ERROR_OVWWRITE:
+ text = dbe_sprintf (GTXT ("%s: Can't write overview %s"), type, par);
+ break;
+ case COL_ERROR_OVWREAD:
+ text = dbe_sprintf (GTXT ("%s: Can't read overview data for %s"), type, par);
+ break;
+ case COL_ERROR_NOZMEM:
+ text = dbe_sprintf (GTXT ("%s: Open of /dev/zero failed: %s"), type, par);
+ break;
+ case COL_ERROR_NOZMEMMAP:
+ text = dbe_sprintf (GTXT ("%s: Mmap of /dev/zero failed: %s"), type, par);
+ break;
+ case COL_ERROR_NOHNDL:
+ text = dbe_sprintf (GTXT ("%s: Out of data handles for %s"), type, par);
+ break;
+ case COL_ERROR_FILEOPN:
+ text = dbe_sprintf (GTXT ("%s: Open failed %s"), type, par);
+ break;
+ case COL_ERROR_FILETRNC:
+ text = dbe_sprintf (GTXT ("%s: Truncate failed for file %s"), type, par);
+ break;
+ case COL_ERROR_FILEMAP:
+ text = dbe_sprintf (GTXT ("%s: Mmap failed %s"), type, par);
+ break;
+ case COL_ERROR_HEAPINIT:
+ text = dbe_sprintf (GTXT ("%s: Initializing heap tracing failed"), type);
+ break;
+ case COL_ERROR_DISPINIT:
+ text = dbe_sprintf (GTXT ("%s: Initializing SIGPROF dispatcher failed"), type);
+ break;
+ case COL_ERROR_ITMRINIT:
+ text = dbe_sprintf (GTXT ("%s: Initializing interval timer failed; %s"), type, par);
+ break;
+ case COL_ERROR_SMPLINIT:
+ text = dbe_sprintf (GTXT ("%s: Initializing periodic sampling failed"), type);
+ break;
+ case COL_ERROR_MPIINIT:
+ text = dbe_sprintf (GTXT ("%s: Initializing MPI tracing failed"), type);
+ break;
+ case COL_ERROR_JAVAINIT:
+ text = dbe_sprintf (GTXT ("%s: Initializing Java profiling failed"), type);
+ break;
+ case COL_ERROR_LINEINIT:
+ text = dbe_sprintf (GTXT ("%s: Initializing descendant process lineage failed"), type);
+ break;
+ case COL_ERROR_NOSPACE:
+ text = dbe_sprintf (GTXT ("%s: Out of disk space writing `%s'"), type, par);
+ break;
+ case COL_ERROR_ITMRRST:
+ text = dbe_sprintf (GTXT ("%s: Resetting interval timer failed: %s"), type, par);
+ break;
+ case COL_ERROR_MKDIR:
+ text = dbe_sprintf (GTXT ("%s: Unable to create directory `%s'"), type, par);
+ break;
+ case COL_ERROR_JVM2NEW:
+ text = dbe_sprintf (GTXT ("%s: JVM version with JVMTI requires more recent release of the performance tools; please upgrade"), type);
+ break;
+ case COL_ERROR_JVMNOTSUPP:
+ text = dbe_sprintf (GTXT ("%s: JVM version does not support JVMTI; no java profiling is available"), type);
+ break;
+ case COL_ERROR_JVMNOJSTACK:
+ text = dbe_sprintf (GTXT ("%s: JVM version does not support java callstacks; java mode data will not be recorded"), type);
+ break;
+ case COL_ERROR_DYNOPEN:
+ text = dbe_sprintf (GTXT ("%s: Can't open dyntext file `%s'"), type, par);
+ break;
+ case COL_ERROR_DYNWRITE:
+ text = dbe_sprintf (GTXT ("%s: Can't write dyntext file `%s'"), type, par);
+ break;
+ case COL_ERROR_MAPOPEN:
+ text = dbe_sprintf (GTXT ("%s: Can't open map file `%s'"), type, par);
+ break;
+ case COL_ERROR_MAPREAD:
+ text = dbe_sprintf (GTXT ("%s: Can't read map file `%s'"), type, par);
+ break;
+ case COL_ERROR_MAPWRITE:
+ text = dbe_sprintf (GTXT ("%s: Can't write map file"), type);
+ break;
+ case COL_ERROR_RESOLVE:
+ text = dbe_sprintf (GTXT ("%s: Can't resolve map file `%s'"), type, par);
+ break;
+ case COL_ERROR_OMPINIT:
+ text = dbe_sprintf (GTXT ("%s: Initializing OpenMP tracing failed"), type);
+ break;
+ case COL_ERROR_DURATION_INIT:
+ text = dbe_sprintf (GTXT ("%s: Initializing experiment-duration setting to `%s' failed"), type, par);
+ break;
+ case COL_ERROR_RDTINIT:
+ text = dbe_sprintf (GTXT ("%s: Initializing RDT failed"), type);
+ break;
+ case COL_ERROR_GENERAL:
+ if (strlen (par))
+ text = dbe_sprintf (GTXT ("%s: %s"), type, par);
+ else
+ text = dbe_sprintf (GTXT ("%s: General error"), type);
+ break;
+ case COL_ERROR_EXEC_FAIL:
+ text = dbe_sprintf (GTXT ("%s: Exec of process failed"), type);
+ break;
+ case COL_ERROR_THR_MAX:
+ text = dbe_sprintf (GTXT ("%s: Thread count exceeds maximum (%s); set SP_COLLECTOR_NUMTHREADS for higher value"), type, par);
+ break;
+ case COL_ERROR_IOINIT:
+ text = dbe_sprintf (GTXT ("%s: Initializing IO tracing failed"), type);
+ break;
+ case COL_ERROR_NODATA:
+ text = dbe_sprintf (GTXT ("%s: No data was recorded in the experiment"), type);
+ break;
+ case COL_ERROR_DTRACE_FATAL:
+ text = dbe_sprintf (GTXT ("%s: Fatal error reported from DTrace -- %s"), type, par);
+ break;
+ case COL_ERROR_MAPSEEK:
+ text = dbe_sprintf (GTXT ("%s: Seek error on map file `%s'"), type, par);
+ break;
+ case COL_ERROR_UNEXP_FOUNDER:
+ text = dbe_sprintf (GTXT ("%s: Unexpected value for founder `%s'"), type, par);
+ break;
+ case COL_ERROR_LOG_OPEN:
+ text = dbe_sprintf (GTXT ("%s: Failure to open log file"), type);
+ break;
+ case COL_ERROR_TSD_INIT:
+ text = dbe_sprintf (GTXT ("%s: TSD could not be initialized"), type);
+ break;
+ case COL_ERROR_UTIL_INIT:
+ text = dbe_sprintf (GTXT ("%s: libcol_util.c initialization failed"), type);
+ break;
+ case COL_ERROR_MAPCACHE:
+ text = dbe_sprintf (GTXT ("%s: Unable to cache mappings; internal error (`%s')"), type, par);
+ break;
+ case COL_WARN_NONE:
+ text = dbe_sprintf (GTXT ("%s: No warning"), type);
+ break;
+ case COL_WARN_FSTYPE:
+ text = dbe_sprintf (GTXT ("%s: Experiment was written to a filesystem of type `%s'; data may be distorted"), type, par);
+ break;
+ case COL_WARN_PROFRND:
+ text = dbe_sprintf (GTXT ("%s: Profiling interval was changed from requested %s (microsecs.) used"), type, par);
+ break;
+ case COL_WARN_SIZELIM:
+ text = dbe_sprintf (GTXT ("%s: Experiment size limit exceeded"), type);
+ break;
+ case COL_WARN_SIGPROF:
+ text = dbe_sprintf (GTXT ("%s: SIGPROF handler was changed (%s) during the run; profile data may be unreliable"), type, par);
+ break;
+ case COL_WARN_SMPLADJ:
+ text = dbe_sprintf (GTXT ("%s: Periodic sampling rate adjusted %s microseconds"), type, par);
+ break;
+ case COL_WARN_ITMROVR:
+ text = dbe_sprintf (GTXT ("%s: Application's attempt to set interval timer period to %s was ignored; its behavior may be changed"), type, par);
+ break;
+ case COL_WARN_ITMRREP:
+ text = dbe_sprintf (GTXT ("%s: Collection interval timer period was changed (%s); profile data may be unreliable"), type, par);
+ break;
+ case COL_WARN_SIGEMT:
+ text = dbe_sprintf (GTXT ("%s: SIGEMT handler was changed during the run; profile data may be unreliable"), type);
+ break;
+ case COL_WARN_CPCBLK:
+ text = dbe_sprintf (GTXT ("%s: libcpc access blocked for hardware counter profiling"), type);
+ break;
+ case COL_WARN_VFORK:
+ text = dbe_sprintf (GTXT ("%s: vfork(2) replaced by %s; execution may be affected"), type, par);
+ break;
+ case COL_WARN_EXECENV:
+ text = dbe_sprintf (GTXT ("%s: exec environment augmented with %s missing collection variables"), type, par);
+ break;
+ case COL_WARN_SAMPSIGUSED:
+ text = dbe_sprintf (GTXT ("%s: target installed handler for sample signal %s; samples may be lost"), type, par);
+ break;
+ case COL_WARN_PAUSESIGUSED:
+ text = dbe_sprintf (GTXT ("%s: target installed handler for pause/resume signal %s; data may be lost or unexpected"),
+ type, par);
+ break;
+ case COL_WARN_CPCNOTRESERVED:
+ text = dbe_sprintf (GTXT ("%s: unable to reserve HW counters; data may be distorted by other users of the counters"), type);
+ break;
+ case COL_WARN_LIBTHREAD_T1: /* par contains the aslwpid... do we want to report it? */
+ text = dbe_sprintf (GTXT ("%s: application ran with a libthread version that may distort data; see collect(1) man page"), type);
+ break;
+ case COL_WARN_SIGMASK:
+ text = dbe_sprintf (GTXT ("%s: Blocking %s ignored while in use for collection"), type, par);
+ break;
+ case COL_WARN_NOFOLLOW:
+ text = dbe_sprintf (GTXT ("%s: Following disabled for uncollectable target (%s)"), type, par);
+ break;
+ case COL_WARN_RISKYFOLLOW:
+ text = dbe_sprintf (GTXT ("%s: Following unqualified target may be unreliable (%s)"), type, par);
+ break;
+ case COL_WARN_IDCHNG:
+ text = dbe_sprintf (GTXT ("%s: Imminent process ID change (%s) may result in an inconsistent experiment"), type, par);
+ break;
+ case COL_WARN_OLDJAVA:
+ text = dbe_sprintf (GTXT ("%s: Java profiling requires JVM version 1.4.2_02 or later"), type);
+ break;
+ case COL_WARN_ITMRPOVR:
+ text = dbe_sprintf (GTXT ("%s: Collector reset application's profile timer %s; application behavior may be changed"), type, par);
+ break;
+ case COL_WARN_NO_JAVA_HEAP:
+ text = dbe_sprintf (GTXT ("%s: Java heap profiling is not supported by JVMTI; disabled "), type);
+ break;
+ case COL_WARN_RDT_PAUSE_NOMEM:
+ text = dbe_sprintf (GTXT ("%s: Data race detection paused at %s because of running out of internal memory"), type, par);
+ break;
+ case COL_WARN_RDT_RESUME:
+ text = dbe_sprintf (GTXT ("%s: Data race detection resumed"), type);
+ break;
+ case COL_WARN_RDT_THROVER:
+ text = dbe_sprintf (GTXT ("%s: Too many concurrent/created threads; accesses with thread IDs above limit are not checked"), type);
+ break;
+ case COL_WARN_THR_PAUSE_RESUME:
+ text = dbe_sprintf (GTXT ("%s: The collector_thread_pause/collector_thread_resume APIs are deprecated, and will be removed in a future release"), type);
+ break;
+ case COL_WARN_NOPROF_DATA:
+ text = dbe_sprintf (GTXT ("%s: No profile data recorded in experiment"), type);
+ break;
+ case COL_WARN_LONG_FSTAT:
+ text = dbe_sprintf (GTXT ("%s: Long fstat call -- %s"), type, par);
+ break;
+ case COL_WARN_LONG_READ:
+ text = dbe_sprintf (GTXT ("%s: Long read call -- %s"), type, par);
+ break;
+ case COL_WARN_LINUX_X86_APICID:
+ text = dbe_sprintf (GTXT ("%s: Linux libc sched_getcpu() not found; using x86 %s IDs rather than CPU IDs"), type, par);
+ break;
+
+ case COL_COMMENT_NONE:
+ text = dbe_sprintf (GTXT ("%s"), par);
+ break;
+ case COL_COMMENT_CWD:
+ text = dbe_sprintf (GTXT ("Initial execution directory `%s'"), par);
+ break;
+ case COL_COMMENT_ARGV:
+ text = dbe_sprintf (GTXT ("Argument list `%s'"), par);
+ break;
+ case COL_COMMENT_MAYASSNAP:
+ text = dbe_sprintf (GTXT ("Mayas snap file `%s'"), par);
+ break;
+
+ case COL_COMMENT_LINEFORK:
+ text = dbe_sprintf (GTXT ("Target fork: %s"), par);
+ break;
+ case COL_COMMENT_LINEEXEC:
+ text = dbe_sprintf (GTXT ("Target exec: %s"), par);
+ break;
+ case COL_COMMENT_LINECOMBO:
+ text = dbe_sprintf (GTXT ("Target fork/exec: %s"), par);
+ break;
+ case COL_COMMENT_FOXSNAP:
+ text = dbe_sprintf (GTXT ("Fox snap file `%s'"), par);
+ break;
+ case COL_COMMENT_ROCKSNAP:
+ text = dbe_sprintf (GTXT ("Rock simulator snap file `%s'"), par);
+ break;
+ case COL_COMMENT_BITINSTRDATA:
+ text = dbe_sprintf (GTXT ("Bit instrument data file `%s'"), par);
+ break;
+ case COL_COMMENT_BITSNAP:
+ text = dbe_sprintf (GTXT ("Bit snap file `%s'"), par);
+ break;
+ case COL_COMMENT_SIMDSPSNAP:
+ text = dbe_sprintf (GTXT ("Simulator dataspace profiling snap file `%s'"), par);
+ break;
+ case COL_COMMENT_HWCADJ:
+ text = dbe_sprintf (GTXT ("%s: HWC overflow interval adjusted: %s"), type, par);
+ break;
+ case COL_WARN_APP_NOT_READY:
+ text = dbe_sprintf (GTXT ("*** Collect: %s"), par);
+ break;
+ case COL_WARN_RDT_DL_TERMINATE:
+ text = dbe_sprintf (GTXT ("%s: Actual deadlock detected; process terminated"), type);
+ break;
+ case COL_WARN_RDT_DL_TERMINATE_CORE:
+ text = dbe_sprintf (GTXT ("%s: Actual deadlock detected; process terminated and core dumped"), type);
+ break;
+ case COL_WARN_RDT_DL_CONTINUE:
+ text = dbe_sprintf (GTXT ("%s: Actual deadlock detected; process allowed to continue"), type);
+ break;
+ default:
+ text = dbe_sprintf (GTXT ("%s: Number %d (\"%s\")"), type, flavor, par);
+ break;
+ };
+}
+
+Emsg::~Emsg ()
+{
+ free (par);
+ free (text);
+}
+
+// ----------------------- Message Queue --------------------
+Emsgqueue::Emsgqueue (char *_qname)
+{
+ first = NULL;
+ last = NULL;
+ qname = strdup (_qname);
+}
+
+Emsgqueue::~Emsgqueue ()
+{
+ free (qname);
+ clear ();
+}
+
+Emsg *
+Emsgqueue::find_msg (Cmsg_warn w, char *msg)
+{
+ for (Emsg *m = first; m; m = m->next)
+ if (m->get_warn () == w && strcmp (m->get_msg (), msg) == 0)
+ return m;
+ return NULL;
+}
+
+Emsg *
+Emsgqueue::append (Cmsg_warn w, char *msg)
+{
+ Emsg *m = find_msg (w, msg);
+ if (m)
+ return m;
+ m = new Emsg (w, msg);
+ append (m);
+ return m;
+}
+
+// Append a single message to a queue
+void
+Emsgqueue::append (Emsg* m)
+{
+ m->next = NULL;
+ if (last == NULL)
+ {
+ first = m;
+ last = m;
+ }
+ else
+ {
+ last->next = m;
+ last = m;
+ }
+}
+
+// Append a queue of messages to a queue
+void
+Emsgqueue::appendqueue (Emsgqueue* mq)
+{
+ Emsg *m = mq->first;
+ if (m == NULL)
+ return;
+ if (last == NULL)
+ first = m;
+ else
+ last->next = m;
+ // now find the new last
+ while (m->next != NULL)
+ m = m->next;
+ last = m;
+}
+
+Emsg *
+Emsgqueue::fetch (void)
+{
+ return first;
+}
+
+// Empty the queue, deleting all messages
+void
+Emsgqueue::clear (void)
+{
+ Emsg *pp;
+ Emsg *p = first;
+ while (p != NULL)
+ {
+ pp = p;
+ p = p->next;
+ delete pp;
+ }
+ first = NULL;
+ last = NULL;
+}
+
+// Mark the queue empty, without deleting the messages --
+// used when the messages have been requeued somewhere else
+void
+Emsgqueue::mark_clear (void)
+{
+ first = NULL;
+ last = NULL;
+}
+
+DbeMessages::DbeMessages ()
+{
+ msgs = NULL;
+}
+
+DbeMessages::~DbeMessages ()
+{
+ if (msgs)
+ {
+ msgs->destroy ();
+ delete msgs;
+ }
+}
+
+Emsg *
+DbeMessages::get_error ()
+{
+ for (int i = msgs ? msgs->size () - 1 : -1; i >= 0; i--)
+ {
+ Emsg *msg = msgs->get (i);
+ if (msg->get_warn () == CMSG_ERROR)
+ return msg;
+ }
+ return NULL;
+}
+
+void
+DbeMessages::remove_msg (Emsg *msg)
+{
+ for (int i = 0, sz = msgs ? msgs->size () : 0; i < sz; i++)
+ if (msg == msgs->get (i))
+ {
+ msgs->remove (i);
+ delete msg;
+ return;
+ }
+}
+
+Emsg *
+DbeMessages::append_msg (Cmsg_warn w, const char *fmt, ...)
+{
+ char buffer[256];
+ size_t buf_size;
+ Emsg *msg;
+ va_list vp;
+
+ va_start (vp, fmt);
+ buf_size = vsnprintf (buffer, sizeof (buffer), fmt, vp) + 1;
+ va_end (vp);
+ if (buf_size < sizeof (buffer))
+ msg = new Emsg (w, buffer);
+ else
+ {
+ va_start (vp, fmt);
+ char *buf = (char *) malloc (buf_size);
+ vsnprintf (buf, buf_size, fmt, vp);
+ va_end (vp);
+ msg = new Emsg (w, buf);
+ free (buf);
+ }
+
+ if (msgs == NULL)
+ msgs = new Vector<Emsg*>();
+ msgs->append (msg);
+ Dprintf (DEBUG_ERR_MSG, NTXT ("Warning: %s\n"), msg->get_msg ());
+ return msg;
+}
+
+void
+DbeMessages::append_msgs (Vector<Emsg*> *lst)
+{
+ if (lst && (lst->size () != 0))
+ {
+ if (msgs == NULL)
+ msgs = new Vector<Emsg*>();
+ for (int i = 0, sz = lst->size (); i < sz; i++)
+ {
+ Emsg *m = lst->fetch (i);
+ msgs->append (new Emsg (m->get_warn (), m->get_msg ()));
+ }
+ }
+}
diff --git a/gprofng/src/Emsg.h b/gprofng/src/Emsg.h
new file mode 100644
index 00000000000..f1d47c5b1a4
--- /dev/null
+++ b/gprofng/src/Emsg.h
@@ -0,0 +1,112 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _EMSG_H
+#define _EMSG_H
+
+#include "Emsgnum.h"
+#include "vec.h"
+
+//
+// The Emsg, experiment message, has as objects I18N'd messages
+// in a structure suitable for attaching to and fetching
+// from a queue of such messages. It is intended to
+// be used for collector errors, collector warnings, parser
+// errors, and er_archive errors that are encountered when
+// reading an experiment
+
+class Emsg;
+class Emsgqueue;
+class StringBuilder;
+
+typedef enum
+{
+ CMSG_WARN = 0,
+ CMSG_ERROR,
+ CMSG_FATAL,
+ CMSG_COMMENT,
+ CMSG_PARSER,
+ CMSG_ARCHIVE
+} Cmsg_warn;
+
+class Emsg
+{
+public:
+ friend class Emsgqueue;
+
+ Emsg (Cmsg_warn w, const char *i18n_text);
+ Emsg (Cmsg_warn w, StringBuilder& sb);
+ Emsg (Cmsg_warn w, int f, const char *param);
+ ~Emsg ();
+
+ char *
+ get_msg ()
+ {
+ return text;
+ };
+
+ Cmsg_warn
+ get_warn ()
+ {
+ return warn;
+ };
+
+ Emsg *next; // next message in a queue
+
+protected:
+ Cmsg_warn warn; // error/warning/...
+ int flavor; // the message flavor
+ char *par; // the input parameter string
+ char *text; // The I18N text of the message
+};
+
+class Emsgqueue
+{
+public:
+ Emsgqueue (char *);
+ ~Emsgqueue ();
+
+ void append (Emsg*);
+ Emsg *append (Cmsg_warn w, char *msg);
+ Emsg *find_msg (Cmsg_warn w, char *msg);
+ void appendqueue (Emsgqueue*);
+ Emsg *fetch (void);
+ void clear (void); // empty the queue
+ void mark_clear (void); // mark the queue empty, without touching messages
+
+protected:
+ Emsg *first;
+ Emsg *last;
+ char *qname;
+};
+
+class DbeMessages
+{
+public:
+ DbeMessages ();
+ ~DbeMessages ();
+ Vector<Emsg*> *msgs;
+ void remove_msg (Emsg *msg);
+ Emsg *get_error ();
+ Emsg *append_msg (Cmsg_warn w, const char *fmt, ...);
+ void append_msgs (Vector<Emsg*> *lst);
+};
+
+#endif /* _EMSG_H */
diff --git a/gprofng/src/Emsgnum.h b/gprofng/src/Emsgnum.h
new file mode 100644
index 00000000000..cef8332dc1a
--- /dev/null
+++ b/gprofng/src/Emsgnum.h
@@ -0,0 +1,135 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _EMSGNUM_H
+#define _EMSGNUM_H
+
+// Define numerical codes for all messages and warnings
+
+#define COL_ERROR_NONE 0 /* OK */
+#define COL_ERROR_ARGS2BIG 1 /* data descriptor too long */
+#define COL_ERROR_BADDIR 2 /* experiment directory error */
+#define COL_ERROR_ARGS 3 /* data descriptor format error */
+#define COL_ERROR_PROFARGS 4 /* clock profile parameter error */
+#define COL_ERROR_SYNCARGS 5 /* synctrace parameter error */
+#define COL_ERROR_HWCARGS 6 /* HWC profile parameter error */
+#define COL_ERROR_DIRPERM 7 /* experiment directory not writable */
+#define COL_ERROR_NOMSACCT 8 /* failed to turn on microstate accounting */
+#define COL_ERROR_PROFINIT 9 /* failed to initialize profiling */
+#define COL_ERROR_SYNCINIT 10 /* failed to initialize synchronization tracing */
+#define COL_ERROR_HWCINIT 11 /* failed to initialize HWC profiling */
+#define COL_ERROR_HWCFAIL 12 /* HWC profiling failed during run */
+#define COL_ERROR_EXPOPEN 13 /* Experiment initialization failed */
+#define COL_ERROR_SIZELIM 14 /* Experiment exceeded size limit */
+#define COL_ERROR_SYSINFO 15 /* uname call failed */
+#define COL_ERROR_OVWOPEN 16 /* Opening the overview file failed */
+#define COL_ERROR_OVWWRITE 17 /* Writing the overview file failed */
+#define COL_ERROR_OVWREAD 18 /* Reading the overview data failed */
+#define COL_ERROR_NOZMEM 19 /* Unable to open /dev/zero */
+#define COL_ERROR_NOZMEMMAP 20 /* Unable to map /dev/zero */
+#define COL_ERROR_NOHNDL 21 /* No more handles available for data */
+#define COL_ERROR_FILEOPN 22 /* Unable to open file */
+#define COL_ERROR_FILETRNC 23 /* Unable to truncate file */
+#define COL_ERROR_FILEMAP 24 /* Unable to mmap file */
+#define COL_ERROR_HEAPINIT 25 /* Unable to install heap tracing */
+#define COL_ERROR_DISPINIT 26 /* Failed to install dispatcher */
+#define COL_ERROR_ITMRINIT 27 /* Failed to install interval timer */
+#define COL_ERROR_SMPLINIT 28 /* Failed to initialize periodic sampling */
+#define COL_ERROR_MPIINIT 29 /* Failed to initialize MPI tracing */
+#define COL_ERROR_JAVAINIT 30 /* Failed to initialize Java profiling */
+#define COL_ERROR_LINEINIT 31 /* Failed to initialize lineage tracing */
+#define COL_ERROR_NOSPACE 32 /* Ran out of disk space writing file */
+#define COL_ERROR_ITMRRST 33 /* Failed to reset interval timer */
+#define COL_ERROR_MKDIR 34 /* Failed to create (sub)directory */
+#define COL_ERROR_JVM2NEW 35 /* JVM is too new for us to cope (JVMTI interface) */
+#define COL_ERROR_JVMNOTSUPP 36 /* JVM does not support profiling (no JVMTI interface) */
+#define COL_ERROR_JVMNOJSTACK 37 /* JVM does not support java stack unwind */
+#define COL_ERROR_DYNOPEN 38 /* Unable to open dyntext file */
+#define COL_ERROR_DYNWRITE 39 /* Unable to write dyntext file */
+#define COL_ERROR_MAPOPEN 40 /* Unable to open map file */
+#define COL_ERROR_MAPREAD 41 /* Unable to read map file */
+#define COL_ERROR_MAPWRITE 42 /* Unable to write map file */
+#define COL_ERROR_RESOLVE 43 /* Unable to resolve map file */
+#define COL_ERROR_OMPINIT 44 /* Failure to initialize OpenMP tracing */
+#define COL_ERROR_DURATION_INIT 45 /* Failure to initialize -t (duration) processing */
+#define COL_ERROR_RDTINIT 46 /* Unable to install RDT */
+#define COL_ERROR_GENERAL 47 /* General error */
+#define COL_ERROR_EXEC_FAIL 48 /* Can't exec the process */
+#define COL_ERROR_THR_MAX 49 /* More threads than are supported */
+#define COL_ERROR_IOINIT 50 /* failed to initialize IO tracing */
+#define COL_ERROR_NODATA 51 /* No data recorded in experiment */
+#define COL_ERROR_DTRACE_FATAL 52 /* Fatal error from er_kernel DTrace code */
+#define COL_ERROR_MAPSEEK 53 /* Error on seek of map file */
+#define COL_ERROR_UNEXP_FOUNDER 54 /* Unexpected value for SP_COLLECTOR_FOUNDER */
+#define COL_ERROR_LOG_OPEN 55 /* Failure to open log.xml file */
+#define COL_ERROR_TSD_INIT 56 /* TSD could not be initialized */
+#define COL_ERROR_UTIL_INIT 57 /* libcol_util.c could not be initialized */
+#define COL_ERROR_MAPCACHE 58 /* Unable to cache mappings */
+
+#define COL_WARN_NONE 200 /* just a note, not a real warning */
+#define COL_WARN_FSTYPE 201 /* Writing to a potentially-distorting file system */
+#define COL_WARN_PROFRND 202 /* Profile interval rounded */
+#define COL_WARN_SIZELIM 203 /* Size limit specified */
+#define COL_WARN_SIGPROF 204 /* SIGPROF handler replaced */
+#define COL_WARN_SMPLADJ 205 /* Periodic sampling rate adjusted */
+#define COL_WARN_ITMROVR 206 /* Application interval timer resetting prevented */
+#define COL_WARN_ITMRREP 207 /* Collection interval timer found to have been overridden */
+#define COL_WARN_SIGEMT 208 /* SIGEMT handler replaced */
+#define COL_WARN_CPCBLK 209 /* libcpc access blocked */
+#define COL_WARN_VFORK 210 /* vfork(2) switched to fork1(2) */
+#define COL_WARN_EXECENV 211 /* incomplete exec environment */
+#define COL_WARN_SAMPSIGUSED 212 /* target installed handler for sample signal */
+#define COL_WARN_PAUSESIGUSED 213 /* target installed handler for pause signal */
+#define COL_WARN_CPCNOTRESERVED 214 /* unable to reserve HW counters for kernel profiling */
+#define COL_WARN_LIBTHREAD_T1 215 /* collection with classic libthread */
+#define COL_WARN_SIGMASK 216 /* profiling signal masking overridden */
+#define COL_WARN_NOFOLLOW 217 /* descendant following disabled */
+#define COL_WARN_RISKYFOLLOW 218 /* descendant following unqualified */
+#define COL_WARN_IDCHNG 219 /* process ID change requested */
+#define COL_WARN_OLDJAVA 220 /* Java profiling requires JVM version 1.4.2_02 or later */
+#define COL_WARN_ITMRPOVR 221 /* Overriding app-set interval timer */
+#define COL_WARN_NO_JAVA_HEAP 222 /* Java heap tracing not supported (JVM 1.5) */
+#define COL_WARN_RDT_PAUSE_NOMEM 223 /* RDT paused because of running out of memory */
+#define COL_WARN_RDT_RESUME 224 /* RDT resumed */
+#define COL_WARN_RDT_THROVER 225 /* RDT: too many threads */
+#define COL_WARN_THR_PAUSE_RESUME 226 /* use of thread pause/resume API is deprecateds */
+#define COL_WARN_APP_NOT_READY 227 /* Application is not instrumented for RDT */
+#define COL_WARN_RDT_DL_TERMINATE 228 /* RDT: terminate execution on actual deadlock */
+#define COL_WARN_RDT_DL_TERMINATE_CORE 229 /* RDT: dump core and terminate execution on actual deadlock */
+#define COL_WARN_RDT_DL_CONTINUE 230 /* RDT: continue execution on actual deadlock */
+#define COL_WARN_NOPROF_DATA 231 /* No profile data recorded in experiment */
+#define COL_WARN_LONG_FSTAT 232 /* fstat call on /proc/self/map took > 200 ms. */
+#define COL_WARN_LONG_READ 233 /* read call on /proc/self/map took > 200 ms. */
+#define COL_WARN_LINUX_X86_APICID 234 /* using x86 APIC IDs rather than Linux sched_getcpu() */
+
+#define COL_COMMENT_NONE 400 /* no comment */
+#define COL_COMMENT_CWD 401 /* initial execution directory */
+#define COL_COMMENT_ARGV 402 /* arguments */
+#define COL_COMMENT_MAYASSNAP 403 /* Mayas snap file name */
+#define COL_COMMENT_LINEFORK 404 /* process fork'd */
+#define COL_COMMENT_LINEEXEC 405 /* process exec'd */
+#define COL_COMMENT_LINECOMBO 406 /* process combo fork/exec */
+#define COL_COMMENT_FOXSNAP 407 /* Fox snap file name */
+#define COL_COMMENT_ROCKSNAP 408 /* Rock simulator snap file name */
+#define COL_COMMENT_BITINSTRDATA 409 /* Bit instrdata file name */
+#define COL_COMMENT_BITSNAP 410 /* Bit snap file name */
+#define COL_COMMENT_SIMDSPSNAP 411 /* Simulator dataspace profiling snap file name */
+#define COL_COMMENT_HWCADJ 412 /* HWC overflow interval adjusted */
+#endif /* _EMSGNUM_H */
diff --git a/gprofng/src/ExpGroup.cc b/gprofng/src/ExpGroup.cc
new file mode 100644
index 00000000000..0ad269a2383
--- /dev/null
+++ b/gprofng/src/ExpGroup.cc
@@ -0,0 +1,163 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include "util.h"
+#include "ExpGroup.h"
+#include "Experiment.h"
+#include "LoadObject.h"
+#include "DbeSession.h"
+
+//////////////////////////////////////////////////////////
+// class ExpGroup
+
+int ExpGroup::phaseCompareIdx = 0;
+
+ExpGroup::ExpGroup (char *nm)
+{
+ name = dbe_strdup (nm);
+ canonical_path (name);
+ exps = new Vector<Experiment*>;
+ founder = NULL;
+ groupId = 0;
+ phaseCompareIdx++;
+ loadObjs = NULL;
+ loadObjsMap = NULL;
+}
+
+ExpGroup::~ExpGroup ()
+{
+ phaseCompareIdx++;
+ free (name);
+ delete exps;
+ delete loadObjs;
+ delete loadObjsMap;
+}
+
+void
+ExpGroup::append (Experiment *exp)
+{
+ for (int i = 0, sz = exps->size (); i < sz; i++)
+ {
+ Experiment *e = exps->fetch (i);
+ if (exp == e)
+ return;
+ }
+ exps->append (exp);
+ if (exps->size () == 1)
+ founder = exp;
+}
+
+void
+ExpGroup::drop_experiment (Experiment *exp)
+{
+ for (int i = 0, sz = exps->size (); i < sz; i++)
+ {
+ Experiment *e = exps->fetch (i);
+ if (exp == e)
+ {
+ exps->remove (i);
+ break;
+ }
+ }
+ if (founder == exp)
+ founder = NULL;
+}
+
+Vector<Experiment*> *
+ExpGroup::get_founders ()
+{
+ Vector<Experiment*> *expList = NULL;
+ for (int i = 0, sz = exps ? exps->size () : 0; i < sz; i++)
+ {
+ Experiment *exp = exps->fetch (i);
+ if (exp->founder_exp == NULL)
+ {
+ if (expList == NULL)
+ expList = new Vector<Experiment*>;
+ expList->append (exp);
+ }
+ }
+ return expList;
+}
+
+void
+ExpGroup::create_list_of_loadObjects ()
+{
+ if (loadObjs == NULL)
+ {
+ loadObjs = new Vector<LoadObject*>();
+ loadObjsMap = new DefaultMap<LoadObject*, int>();
+ for (int i = 0, sz = exps ? exps->size () : 0; i < sz; i++)
+ {
+ Experiment *exp = exps->fetch (i);
+ for (int i1 = 0, sz1 = VecSize(exp->loadObjs); i1 < sz1; i1++)
+ {
+ LoadObject *lo = exp->loadObjs->fetch (i1);
+ if (!loadObjsMap->get (lo))
+ {
+ loadObjs->append (lo);
+ loadObjsMap->put (lo, loadObjs->size ());
+ }
+ }
+ }
+ }
+}
+
+LoadObject *
+ExpGroup::get_comparable_loadObject (LoadObject *lo)
+{
+ create_list_of_loadObjects ();
+ if (loadObjsMap->get (lo))
+ return lo;
+ if ((lo->flags & SEG_FLAG_EXE) != 0)
+ if (dbeSession->expGroups->size () == dbeSession->nexps ())
+ for (int i = 0, sz = loadObjs ? loadObjs->size () : 0; i < sz; i++)
+ {
+ LoadObject *lobj = loadObjs->fetch (i);
+ if ((lobj->flags & SEG_FLAG_EXE) != 0)
+ return lobj;
+ }
+
+ long first_ind = -1;
+ char *bname = get_basename (lo->get_pathname ());
+ for (long i = 0, sz = loadObjs ? loadObjs->size () : 0; i < sz; i++)
+ {
+ LoadObject *lobj = loadObjs->get (i);
+ if (lobj->comparable_objs == NULL
+ && strcmp (bname, get_basename (lobj->get_pathname ())) == 0)
+ {
+ if (lo->platform == lobj->platform)
+ {
+ if ((lo->flags & SEG_FLAG_DYNAMIC) != 0)
+ {
+ if (dbe_strcmp (lo->firstExp->uarglist,
+ lobj->firstExp->uarglist) == 0)
+ return lobj;
+ }
+ else
+ return lobj;
+ }
+ if (first_ind == -1)
+ first_ind = i;
+ }
+ }
+ return first_ind == -1 ? NULL : loadObjs->get (first_ind);
+}
diff --git a/gprofng/src/ExpGroup.h b/gprofng/src/ExpGroup.h
new file mode 100644
index 00000000000..b3c9422e5bc
--- /dev/null
+++ b/gprofng/src/ExpGroup.h
@@ -0,0 +1,50 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _EXPGROUP_H
+#define _EXPGROUP_H
+
+#include "vec.h"
+#include "Map.h"
+
+class Experiment;
+class LoadObject;
+
+class ExpGroup
+{
+public:
+ ExpGroup (char *nm);
+ ~ExpGroup ();
+ void append (Experiment *exp);
+ void drop_experiment (Experiment *exp);
+ Vector<Experiment*> *get_founders ();
+ void create_list_of_loadObjects ();
+ LoadObject *get_comparable_loadObject (LoadObject *lo);
+
+ Vector<Experiment*> *exps;
+ Vector<LoadObject*> *loadObjs;
+ Map <LoadObject*, int> *loadObjsMap;
+ Experiment *founder;
+ char *name;
+ int groupId;
+ static int phaseCompareIdx;
+};
+
+#endif /* _EXPGROUP_H */
diff --git a/gprofng/src/Exp_Layout.cc b/gprofng/src/Exp_Layout.cc
new file mode 100644
index 00000000000..dfe143203fd
--- /dev/null
+++ b/gprofng/src/Exp_Layout.cc
@@ -0,0 +1,422 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include "CallStack.h"
+#include "DbeSession.h"
+#include "Exp_Layout.h"
+#include "Experiment.h"
+#include "Function.h"
+#include "Table.h"
+#include "dbe_types.h"
+#include "util.h"
+
+/*
+ * PrUsage is a class which wraps access to the values of prusage
+ * system structure. It was expanded to 64 bit entities in 2.7
+ * (experiment version 6 & 7).
+ */
+PrUsage::PrUsage ()
+{
+ pr_tstamp = pr_create = pr_term = pr_rtime = (hrtime_t) 0;
+ pr_utime = pr_stime = pr_ttime = pr_tftime = pr_dftime = (hrtime_t) 0;
+ pr_kftime = pr_ltime = pr_slptime = pr_wtime = pr_stoptime = (hrtime_t) 0;
+
+ pr_minf = pr_majf = pr_nswap = pr_inblk = pr_oublk = 0;
+ pr_msnd = pr_mrcv = pr_sigs = pr_vctx = pr_ictx = pr_sysc = pr_ioch = 0;
+}
+
+/*
+ * Resource usage. /proc/<pid>/usage /proc/<pid>/lwp/<lwpid>/lwpusage
+ */
+struct timestruc_32
+{ /* v8 timestruc_t */
+ uint32_t tv_sec; /* seconds */
+ uint32_t tv_nsec; /* and nanoseconds */
+};
+
+typedef struct ana_prusage
+{
+ id_t pr_lwpid; /* lwp id. 0: process or defunct */
+ int pr_count; /* number of contributing lwps */
+ timestruc_32 pr_tstamp; /* current time stamp */
+ timestruc_32 pr_create; /* process/lwp creation time stamp */
+ timestruc_32 pr_term; /* process/lwp termination time stamp */
+ timestruc_32 pr_rtime; /* total lwp real (elapsed) time */
+ timestruc_32 pr_utime; /* user level cpu time */
+ timestruc_32 pr_stime; /* system call cpu time */
+ timestruc_32 pr_ttime; /* other system trap cpu time */
+ timestruc_32 pr_tftime; /* text page fault sleep time */
+ timestruc_32 pr_dftime; /* data page fault sleep time */
+ timestruc_32 pr_kftime; /* kernel page fault sleep time */
+ timestruc_32 pr_ltime; /* user lock wait sleep time */
+ timestruc_32 pr_slptime; /* all other sleep time */
+ timestruc_32 pr_wtime; /* wait-cpu (latency) time */
+ timestruc_32 pr_stoptime; /* stopped time */
+ timestruc_32 filltime[6]; /* filler for future expansion */
+ uint32_t pr_minf; /* minor page faults */
+ uint32_t pr_majf; /* major page faults */
+ uint32_t pr_nswap; /* swaps */
+ uint32_t pr_inblk; /* input blocks */
+ uint32_t pr_oublk; /* output blocks */
+ uint32_t pr_msnd; /* messages sent */
+ uint32_t pr_mrcv; /* messages received */
+ uint32_t pr_sigs; /* signals received */
+ uint32_t pr_vctx; /* voluntary context switches */
+ uint32_t pr_ictx; /* involuntary context switches */
+ uint32_t pr_sysc; /* system calls */
+ uint32_t pr_ioch; /* chars read and written */
+ uint32_t filler[10]; /* filler for future expansion */
+} raw_prusage_32;
+
+uint64_t
+PrUsage::bind32Size ()
+{
+ uint64_t bindSize = sizeof (raw_prusage_32);
+ return bindSize;
+}
+
+#define timestruc2hr(x) ((hrtime_t)(x).tv_sec*NANOSEC + (hrtime_t)(x).tv_nsec)
+
+PrUsage *
+PrUsage::bind32 (void *p, bool need_swap_endian)
+{
+ if (p == NULL)
+ return NULL;
+ raw_prusage_32 pu, *tmp = (raw_prusage_32*) p;
+ if (need_swap_endian)
+ {
+ pu = *tmp;
+ tmp = &pu;
+ SWAP_ENDIAN (pu.pr_tstamp.tv_sec);
+ SWAP_ENDIAN (pu.pr_tstamp.tv_nsec);
+ SWAP_ENDIAN (pu.pr_create.tv_sec);
+ SWAP_ENDIAN (pu.pr_create.tv_nsec);
+ SWAP_ENDIAN (pu.pr_term.tv_sec);
+ SWAP_ENDIAN (pu.pr_term.tv_nsec);
+ SWAP_ENDIAN (pu.pr_rtime.tv_sec);
+ SWAP_ENDIAN (pu.pr_rtime.tv_nsec);
+ SWAP_ENDIAN (pu.pr_utime.tv_sec);
+ SWAP_ENDIAN (pu.pr_utime.tv_nsec);
+ SWAP_ENDIAN (pu.pr_stime.tv_sec);
+ SWAP_ENDIAN (pu.pr_stime.tv_nsec);
+ SWAP_ENDIAN (pu.pr_ttime.tv_sec);
+ SWAP_ENDIAN (pu.pr_ttime.tv_nsec);
+ SWAP_ENDIAN (pu.pr_tftime.tv_sec);
+ SWAP_ENDIAN (pu.pr_tftime.tv_nsec);
+ SWAP_ENDIAN (pu.pr_dftime.tv_sec);
+ SWAP_ENDIAN (pu.pr_dftime.tv_nsec);
+ SWAP_ENDIAN (pu.pr_kftime.tv_sec);
+ SWAP_ENDIAN (pu.pr_kftime.tv_nsec);
+ SWAP_ENDIAN (pu.pr_ltime.tv_sec);
+ SWAP_ENDIAN (pu.pr_ltime.tv_nsec);
+ SWAP_ENDIAN (pu.pr_slptime.tv_sec);
+ SWAP_ENDIAN (pu.pr_slptime.tv_nsec);
+ SWAP_ENDIAN (pu.pr_wtime.tv_sec);
+ SWAP_ENDIAN (pu.pr_wtime.tv_nsec);
+ SWAP_ENDIAN (pu.pr_stoptime.tv_sec);
+ SWAP_ENDIAN (pu.pr_stoptime.tv_nsec);
+ SWAP_ENDIAN (pu.pr_minf);
+ SWAP_ENDIAN (pu.pr_majf);
+ SWAP_ENDIAN (pu.pr_nswap);
+ SWAP_ENDIAN (pu.pr_inblk);
+ SWAP_ENDIAN (pu.pr_oublk);
+ SWAP_ENDIAN (pu.pr_msnd);
+ SWAP_ENDIAN (pu.pr_mrcv);
+ SWAP_ENDIAN (pu.pr_sigs);
+ SWAP_ENDIAN (pu.pr_vctx);
+ SWAP_ENDIAN (pu.pr_ictx);
+ SWAP_ENDIAN (pu.pr_sysc);
+ SWAP_ENDIAN (pu.pr_ioch);
+ }
+ pr_tstamp = timestruc2hr (tmp->pr_tstamp);
+ pr_create = timestruc2hr (tmp->pr_create);
+ pr_term = timestruc2hr (tmp->pr_term);
+ pr_rtime = timestruc2hr (tmp->pr_rtime);
+ pr_utime = timestruc2hr (tmp->pr_utime);
+ pr_stime = timestruc2hr (tmp->pr_stime);
+ pr_ttime = timestruc2hr (tmp->pr_ttime);
+ pr_tftime = timestruc2hr (tmp->pr_tftime);
+ pr_dftime = timestruc2hr (tmp->pr_dftime);
+ pr_kftime = timestruc2hr (tmp->pr_kftime);
+ pr_ltime = timestruc2hr (tmp->pr_ltime);
+ pr_slptime = timestruc2hr (tmp->pr_slptime);
+ pr_wtime = timestruc2hr (tmp->pr_wtime);
+ pr_stoptime = timestruc2hr (tmp->pr_stoptime);
+ pr_minf = tmp->pr_minf;
+ pr_majf = tmp->pr_majf;
+ pr_nswap = tmp->pr_nswap;
+ pr_inblk = tmp->pr_inblk;
+ pr_oublk = tmp->pr_oublk;
+ pr_msnd = tmp->pr_msnd;
+ pr_mrcv = tmp->pr_mrcv;
+ pr_sigs = tmp->pr_sigs;
+ pr_vctx = tmp->pr_vctx;
+ pr_ictx = tmp->pr_ictx;
+ pr_sysc = tmp->pr_sysc;
+ pr_ioch = tmp->pr_ioch;
+ return this;
+}
+
+struct timestruc_64
+{ /* 64-bit timestruc_t */
+ uint64_t tv_sec; /* seconds */
+ uint64_t tv_nsec; /* and nanoseconds */
+};
+
+typedef struct
+{
+ id_t pr_lwpid; /* lwp id. 0: process or defunct */
+ int pr_count; /* number of contributing lwps */
+ timestruc_64 pr_tstamp; /* current time stamp */
+ timestruc_64 pr_create; /* process/lwp creation time stamp */
+ timestruc_64 pr_term; /* process/lwp termination time stamp */
+ timestruc_64 pr_rtime; /* total lwp real (elapsed) time */
+ timestruc_64 pr_utime; /* user level cpu time */
+ timestruc_64 pr_stime; /* system call cpu time */
+ timestruc_64 pr_ttime; /* other system trap cpu time */
+ timestruc_64 pr_tftime; /* text page fault sleep time */
+ timestruc_64 pr_dftime; /* data page fault sleep time */
+ timestruc_64 pr_kftime; /* kernel page fault sleep time */
+ timestruc_64 pr_ltime; /* user lock wait sleep time */
+ timestruc_64 pr_slptime; /* all other sleep time */
+ timestruc_64 pr_wtime; /* wait-cpu (latency) time */
+ timestruc_64 pr_stoptime; /* stopped time */
+ timestruc_64 filltime[6]; /* filler for future expansion */
+ uint64_t pr_minf; /* minor page faults */
+ uint64_t pr_majf; /* major page faults */
+ uint64_t pr_nswap; /* swaps */
+ uint64_t pr_inblk; /* input blocks */
+ uint64_t pr_oublk; /* output blocks */
+ uint64_t pr_msnd; /* messages sent */
+ uint64_t pr_mrcv; /* messages received */
+ uint64_t pr_sigs; /* signals received */
+ uint64_t pr_vctx; /* voluntary context switches */
+ uint64_t pr_ictx; /* involuntary context switches */
+ uint64_t pr_sysc; /* system calls */
+ uint64_t pr_ioch; /* chars read and written */
+ uint64_t filler[10]; /* filler for future expansion */
+} raw_prusage_64;
+
+uint64_t
+PrUsage::bind64Size ()
+{
+ uint64_t bindSize = sizeof (raw_prusage_64);
+ return bindSize;
+}
+
+PrUsage *
+PrUsage::bind64 (void *p, bool need_swap_endian)
+{
+ if (p == NULL)
+ {
+ return NULL;
+ }
+ raw_prusage_64 pu, *tmp = (raw_prusage_64*) p;
+ if (need_swap_endian)
+ {
+ pu = *tmp;
+ tmp = &pu;
+ SWAP_ENDIAN (pu.pr_tstamp.tv_sec);
+ SWAP_ENDIAN (pu.pr_tstamp.tv_nsec);
+ SWAP_ENDIAN (pu.pr_create.tv_sec);
+ SWAP_ENDIAN (pu.pr_create.tv_nsec);
+ SWAP_ENDIAN (pu.pr_term.tv_sec);
+ SWAP_ENDIAN (pu.pr_term.tv_nsec);
+ SWAP_ENDIAN (pu.pr_rtime.tv_sec);
+ SWAP_ENDIAN (pu.pr_rtime.tv_nsec);
+ SWAP_ENDIAN (pu.pr_utime.tv_sec);
+ SWAP_ENDIAN (pu.pr_utime.tv_nsec);
+ SWAP_ENDIAN (pu.pr_stime.tv_sec);
+ SWAP_ENDIAN (pu.pr_stime.tv_nsec);
+ SWAP_ENDIAN (pu.pr_ttime.tv_sec);
+ SWAP_ENDIAN (pu.pr_ttime.tv_nsec);
+ SWAP_ENDIAN (pu.pr_tftime.tv_sec);
+ SWAP_ENDIAN (pu.pr_tftime.tv_nsec);
+ SWAP_ENDIAN (pu.pr_dftime.tv_sec);
+ SWAP_ENDIAN (pu.pr_dftime.tv_nsec);
+ SWAP_ENDIAN (pu.pr_kftime.tv_sec);
+ SWAP_ENDIAN (pu.pr_kftime.tv_nsec);
+ SWAP_ENDIAN (pu.pr_ltime.tv_sec);
+ SWAP_ENDIAN (pu.pr_ltime.tv_nsec);
+ SWAP_ENDIAN (pu.pr_slptime.tv_sec);
+ SWAP_ENDIAN (pu.pr_slptime.tv_nsec);
+ SWAP_ENDIAN (pu.pr_wtime.tv_sec);
+ SWAP_ENDIAN (pu.pr_wtime.tv_nsec);
+ SWAP_ENDIAN (pu.pr_stoptime.tv_sec);
+ SWAP_ENDIAN (pu.pr_stoptime.tv_nsec);
+ SWAP_ENDIAN (pu.pr_minf);
+ SWAP_ENDIAN (pu.pr_majf);
+ SWAP_ENDIAN (pu.pr_nswap);
+ SWAP_ENDIAN (pu.pr_inblk);
+ SWAP_ENDIAN (pu.pr_oublk);
+ SWAP_ENDIAN (pu.pr_msnd);
+ SWAP_ENDIAN (pu.pr_mrcv);
+ SWAP_ENDIAN (pu.pr_sigs);
+ SWAP_ENDIAN (pu.pr_vctx);
+ SWAP_ENDIAN (pu.pr_ictx);
+ SWAP_ENDIAN (pu.pr_sysc);
+ SWAP_ENDIAN (pu.pr_ioch);
+ }
+
+ pr_tstamp = timestruc2hr (tmp->pr_tstamp);
+ pr_create = timestruc2hr (tmp->pr_create);
+ pr_term = timestruc2hr (tmp->pr_term);
+ pr_rtime = timestruc2hr (tmp->pr_rtime);
+ pr_utime = timestruc2hr (tmp->pr_utime);
+ pr_stime = timestruc2hr (tmp->pr_stime);
+ pr_ttime = timestruc2hr (tmp->pr_ttime);
+ pr_tftime = timestruc2hr (tmp->pr_tftime);
+ pr_dftime = timestruc2hr (tmp->pr_dftime);
+ pr_kftime = timestruc2hr (tmp->pr_kftime);
+ pr_ltime = timestruc2hr (tmp->pr_ltime);
+ pr_slptime = timestruc2hr (tmp->pr_slptime);
+ pr_wtime = timestruc2hr (tmp->pr_wtime);
+ pr_stoptime = timestruc2hr (tmp->pr_stoptime);
+ pr_minf = tmp->pr_minf;
+ pr_majf = tmp->pr_majf;
+ pr_nswap = tmp->pr_nswap;
+ pr_inblk = tmp->pr_inblk;
+ pr_oublk = tmp->pr_oublk;
+ pr_msnd = tmp->pr_msnd;
+ pr_mrcv = tmp->pr_mrcv;
+ pr_sigs = tmp->pr_sigs;
+ pr_vctx = tmp->pr_vctx;
+ pr_ictx = tmp->pr_ictx;
+ pr_sysc = tmp->pr_sysc;
+ pr_ioch = tmp->pr_ioch;
+ return this;
+}
+
+Vector<long long> *
+PrUsage::getMstateValues ()
+{
+ const PrUsage *prusage = this;
+ Vector<long long> *states = new Vector<long long>;
+ states->store (0, prusage->pr_utime);
+ states->store (1, prusage->pr_stime);
+ states->store (2, prusage->pr_ttime);
+ states->store (3, prusage->pr_tftime);
+ states->store (4, prusage->pr_dftime);
+ states->store (5, prusage->pr_kftime);
+ states->store (6, prusage->pr_ltime);
+ states->store (7, prusage->pr_slptime);
+ states->store (8, prusage->pr_wtime);
+ states->store (9, prusage->pr_stoptime);
+ assert (LMS_NUM_SOLARIS_MSTATES == states->size ());
+ return states;
+}
+
+void* CommonPacket::jvm_overhead = NULL;
+
+CommonPacket::CommonPacket ()
+{
+ for (int i = 0; i < NTAGS; i++)
+ tags[i] = 0;
+ tstamp = 0;
+ jthread_TBR = NULL;
+ frinfo = 0;
+ leafpc = 0;
+ nat_stack = NULL;
+ user_stack = NULL;
+}
+
+int
+CommonPacket::cmp (const void *a, const void *b)
+{
+ if ((*(CommonPacket **) a)->tstamp > (*(CommonPacket **) b)->tstamp)
+ return 1;
+ else if ((*(CommonPacket **) a)->tstamp < (*(CommonPacket **) b)->tstamp)
+ return -1;
+ else
+ return 0;
+}
+
+void *
+CommonPacket::getStack (VMode view_mode)
+{
+ if (view_mode == VMODE_MACHINE)
+ return nat_stack;
+ else if (view_mode == VMODE_USER)
+ {
+ if (jthread_TBR == JTHREAD_NONE || (jthread_TBR && jthread_TBR->is_system ()))
+ return jvm_overhead;
+ }
+ else if (view_mode == VMODE_EXPERT)
+ {
+ Histable *hist = CallStack::getStackPC (user_stack, 0);
+ if (hist->get_type () == Histable::INSTR)
+ {
+ DbeInstr *instr = (DbeInstr*) hist;
+ if (instr->func == dbeSession->get_JUnknown_Function ())
+ return nat_stack;
+ }
+ else if (hist->get_type () == Histable::LINE)
+ {
+ DbeLine *line = (DbeLine *) hist;
+ if (line->func == dbeSession->get_JUnknown_Function ())
+ return nat_stack;
+ }
+ }
+ return user_stack;
+}
+
+Histable *
+CommonPacket::getStackPC (int n, VMode view_mode)
+{
+ return CallStack::getStackPC (getStack (view_mode), n);
+}
+
+Vector<Histable*> *
+CommonPacket::getStackPCs (VMode view_mode)
+{
+ return CallStack::getStackPCs (getStack (view_mode));
+}
+
+void *
+getStack (VMode view_mode, DataView *dview, long idx)
+{
+ void *stack = NULL;
+ if (view_mode == VMODE_MACHINE)
+ stack = dview->getObjValue (PROP_MSTACK, idx);
+ else if (view_mode == VMODE_USER)
+ stack = dview->getObjValue (PROP_USTACK, idx);
+ else if (view_mode == VMODE_EXPERT)
+ stack = dview->getObjValue (PROP_XSTACK, idx);
+ return stack;
+}
+
+int
+stackSize (VMode view_mode, DataView *dview, long idx)
+{
+ return CallStack::stackSize (getStack (view_mode, dview, idx));
+}
+
+Histable *
+getStackPC (int n, VMode view_mode, DataView *dview, long idx)
+{
+ return CallStack::getStackPC (getStack (view_mode, dview, idx), n);
+}
+
+Vector<Histable*> *
+getStackPCs (VMode view_mode, DataView *dview, long idx)
+{
+ return CallStack::getStackPCs (getStack (view_mode, dview, idx));
+}
diff --git a/gprofng/src/Exp_Layout.h b/gprofng/src/Exp_Layout.h
new file mode 100644
index 00000000000..c5fbe4cddeb
--- /dev/null
+++ b/gprofng/src/Exp_Layout.h
@@ -0,0 +1,158 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _EXP_LAYOUT_H
+#define _EXP_LAYOUT_H
+
+#include <sys/time.h>
+#include <sys/types.h>
+
+#include "dbe_types.h"
+#include "gp-experiment.h"
+#include "data_pckts.h"
+#include "ABS.h"
+#include "Data_window.h"
+#include "Histable.h"
+#include "vec.h"
+
+class PrUsage
+{
+public:
+ PrUsage ();
+ PrUsage *bind32 (void *p, bool need_swap_endian);
+ PrUsage *bind64 (void *p, bool need_swap_endian);
+ static uint64_t bind32Size ();
+ static uint64_t bind64Size ();
+ Vector<long long> * getMstateValues ();
+
+ hrtime_t pr_tstamp;
+ hrtime_t pr_create;
+ hrtime_t pr_term;
+ hrtime_t pr_rtime;
+
+ // the following correspond to PROP_MSTATE LMS_* offsets; see newMstateVec()
+ hrtime_t pr_utime;
+ hrtime_t pr_stime;
+ hrtime_t pr_ttime;
+ hrtime_t pr_tftime;
+ hrtime_t pr_dftime;
+ hrtime_t pr_kftime;
+ hrtime_t pr_ltime;
+ hrtime_t pr_slptime;
+ hrtime_t pr_wtime;
+ hrtime_t pr_stoptime;
+
+ uint64_t pr_minf;
+ uint64_t pr_majf;
+ uint64_t pr_nswap;
+ uint64_t pr_inblk;
+ uint64_t pr_oublk;
+ uint64_t pr_msnd;
+ uint64_t pr_mrcv;
+ uint64_t pr_sigs;
+ uint64_t pr_vctx;
+ uint64_t pr_ictx;
+ uint64_t pr_sysc;
+ uint64_t pr_ioch;
+};
+
+class DataView;
+extern void *getStack (VMode, DataView*, long);
+extern int stackSize (VMode, DataView*, long);
+extern Histable *getStackPC (int, VMode, DataView*, long);
+extern Vector<Histable*> *getStackPCs (VMode, DataView*, long);
+
+class CommonPacket // use only for RacePacket, please
+{
+public:
+ CommonPacket ();
+ void *getStack (VMode);
+ Histable *getStackPC (int, VMode);
+ Vector<Histable*>*getStackPCs (VMode);
+ static int cmp (const void *a, const void *b);
+
+ enum Tag_type { LWP, THR, CPU };
+ static const int NTAGS = 3;
+ uint32_t tags[NTAGS]; // lwp_id, thr_id, cpu_id
+ hrtime_t tstamp;
+ struct JThread *jthread_TBR; // pointer to JThread or NULL
+ uint64_t frinfo; // frame info
+ Vaddr leafpc; // raw leaf PC if availabe
+ void *nat_stack; // native stack
+ void *user_stack; // user stack (Java, OMP, etc.)
+ static void *jvm_overhead;
+};
+
+class FramePacket
+{
+public:
+ int
+ stackSize (bool java = false)
+ {
+ return java ? jstack->size () / 2 : stack->size ();
+ }
+
+ Vaddr
+ getFromStack (int n)
+ {
+ return stack->fetch (n);
+ }
+
+ Vaddr
+ getMthdFromStack (int n)
+ {
+ return jstack->fetch (2 * n + 1);
+ }
+
+ int
+ getBciFromStack (int n)
+ {
+ return (int) jstack->fetch (2 * n);
+ }
+
+ bool
+ isLeafMark (int n)
+ {
+ return stack->fetch (n) == (Vaddr) SP_LEAF_CHECK_MARKER;
+ }
+
+ bool
+ isTruncatedStack (bool java = false)
+ {
+ return java ? jtruncated : truncated == (Vaddr) SP_TRUNC_STACK_MARKER;
+ }
+
+ bool
+ isFailedUnwindStack ()
+ {
+ return truncated == (Vaddr) SP_FAILED_UNWIND_MARKER;
+ }
+ uint32_t omp_state; // OpenMP thread state
+ uint32_t mpi_state; // MPI state
+ uint64_t omp_cprid; // OpenMP parallel region id (omptrace)
+ Vector<Vaddr> *stack;
+ Vaddr truncated;
+ Vector<Vaddr> *jstack;
+ bool jtruncated;
+ Vector<Vaddr> *ompstack;
+ Vaddr omptruncated;
+};
+
+#endif /* _EXP_LAYOUT_H */
diff --git a/gprofng/src/Experiment.cc b/gprofng/src/Experiment.cc
new file mode 100644
index 00000000000..a23c10c30a3
--- /dev/null
+++ b/gprofng/src/Experiment.cc
@@ -0,0 +1,6961 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <errno.h>
+#include <utime.h>
+#include <alloca.h>
+#include <dirent.h>
+#include <ctype.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/param.h>
+#include <set>
+
+#include "util.h"
+#include "CacheMap.h"
+#include "DbeFile.h"
+#include "DbeCacheMap.h"
+#include "DefaultHandler.h"
+#include "DefaultMap2D.h"
+#include "Emsg.h"
+#include "Elf.h"
+#include "SAXParser.h"
+#include "SAXParserFactory.h"
+#include "StringBuilder.h"
+#include "DbeSession.h"
+#include "DbeThread.h"
+#include "Application.h"
+#include "CallStack.h"
+#include "Experiment.h"
+#include "Exp_Layout.h"
+#include "DataStream.h"
+#include "Expression.h"
+#include "Function.h"
+#include "HeapMap.h"
+#include "LoadObject.h"
+#include "Module.h"
+#include "Ovw_data.h"
+#include "PRBTree.h"
+#include "Sample.h"
+#include "SegMem.h"
+#include "StringMap.h"
+#include "UserLabel.h"
+#include "Table.h"
+#include "dbe_types.h"
+#include "FileData.h"
+#include "cc_libcollector.h"
+#include "ExpGroup.h"
+
+int nPush;
+int nPop;
+int pushCnt;
+int popCnt;
+int pushCnt3;
+int popCnt3;
+
+struct Experiment::UIDnode
+{
+ uint64_t uid;
+ uint64_t val;
+ UIDnode *next;
+};
+
+struct Experiment::RawFramePacket
+{
+ uint64_t uid;
+ UIDnode *uidn;
+ UIDnode *uidj;
+ UIDnode *omp_uid;
+ uint32_t omp_state;
+};
+
+static hrtime_t
+parseTStamp (const char *s)
+{
+ hrtime_t ts = (hrtime_t) 0;
+ ts = (hrtime_t) atoi (s) * NANOSEC;
+ s = strchr (s, '.');
+ if (s != NULL)
+ ts += (hrtime_t) atoi (s + 1);
+ return ts;
+}
+
+class Experiment::ExperimentFile
+{
+public:
+
+ enum
+ {
+ EF_NOT_OPENED,
+ EF_OPENED,
+ EF_CLOSED,
+ EF_FAILURE
+ };
+
+ ExperimentFile (Experiment *_exp, const char *_fname);
+ ~ExperimentFile ();
+
+ bool open (bool new_open = false);
+
+ char *
+ get_name ()
+ {
+ return fname;
+ }
+
+ inline int
+ get_status ()
+ {
+ return ef_status;
+ }
+
+ char *fgets ();
+ void close ();
+
+ FILE *fh;
+
+private:
+ Experiment *exp;
+ char *fname;
+ off64_t offset;
+ int bufsz, ef_status;
+ char *buffer;
+};
+
+class Experiment::ExperimentHandler : public DefaultHandler
+{
+public:
+
+ ExperimentHandler (Experiment *_exp);
+ ~ExperimentHandler ();
+
+ void
+ startDocument () { }
+ void endDocument ();
+ void startElement (char *uri, char *localName, char *qName, Attributes *attrs);
+ void endElement (char *uri, char *localName, char *qName);
+ void characters (char *ch, int start, int length);
+
+ void
+ ignorableWhitespace (char*, int, int) { }
+ void
+ error (SAXParseException *e);
+
+private:
+
+ enum Element
+ {
+ EL_NONE,
+ EL_EXPERIMENT,
+ EL_COLLECTOR,
+ EL_SETTING,
+ EL_PROCESS,
+ EL_SYSTEM,
+ EL_EVENT,
+ EL_PROFILE,
+ EL_DATAPTR,
+ EL_PROFDATA,
+ EL_PROFPCKT,
+ EL_FIELD,
+ EL_CPU,
+ EL_STATE,
+ EL_FREQUENCY,
+ EL_POWERM,
+ EL_DTRACEFATAL
+ };
+
+ static int toInt (Attributes *attrs, const char *atr);
+ static char*toStr (Attributes *attrs, const char *atr);
+ void pushElem (Element);
+ void popElem ();
+
+ Experiment *exp;
+ Element curElem;
+ Vector<Element> *stack;
+ Module *dynfuncModule;
+ DataDescriptor *dDscr;
+ PacketDescriptor *pDscr;
+ PropDescr *propDscr;
+ char *text;
+ Cmsg_warn mkind;
+ int mnum;
+ int mec;
+};
+
+
+// HTableSize is the size of smemHTable and instHTable
+// omazur: both HTableSize and the hash function haven't been tuned;
+static const int HTableSize = 8192;
+
+//-------------------------------------------------- Experiment file handler
+
+Experiment::ExperimentFile::ExperimentFile (Experiment *_exp, const char *_fname)
+{
+ exp = _exp;
+ fh = NULL;
+ bufsz = 0;
+ buffer = NULL;
+ ef_status = EF_NOT_OPENED;
+ offset = 0;
+ fname = dbe_sprintf (NTXT ("%s/%s"), exp->expt_name, _fname);
+}
+
+Experiment::ExperimentFile::~ExperimentFile ()
+{
+ close ();
+ free (buffer);
+ free (fname);
+}
+
+bool
+Experiment::ExperimentFile::open (bool new_open)
+{
+ if (fh == NULL)
+ {
+ fh = fopen64 (fname, NTXT ("r"));
+ if (fh == NULL)
+ {
+ ef_status = EF_FAILURE;
+ return false;
+ }
+ ef_status = EF_OPENED;
+ if (new_open)
+ offset = 0;
+ if (offset != 0)
+ fseeko64 (fh, offset, SEEK_SET);
+ }
+ return true;
+}
+
+char *
+Experiment::ExperimentFile::fgets ()
+{
+ if (bufsz == 0)
+ {
+ bufsz = 1024;
+ buffer = (char *) malloc (bufsz);
+ if (buffer == NULL)
+ return NULL;
+ buffer[bufsz - 1] = (char) 1; // sentinel
+ }
+ char *res = ::fgets (buffer, bufsz, fh);
+ if (res == NULL)
+ return NULL;
+ while (buffer[bufsz - 1] == (char) 0)
+ {
+ int newsz = bufsz + 1024;
+ char *newbuf = (char *) malloc (newsz);
+ if (newbuf == NULL)
+ return NULL;
+ memcpy (newbuf, buffer, bufsz);
+ free (buffer);
+ buffer = newbuf;
+ buffer[newsz - 1] = (char) 1; // sentinel
+ // we don't care about fgets result here
+ ::fgets (buffer + bufsz - 1, newsz - bufsz + 1, fh);
+ bufsz = newsz;
+ }
+ return buffer;
+}
+
+void
+Experiment::ExperimentFile::close ()
+{
+ if (fh)
+ {
+ offset = ftello64 (fh);
+ fclose (fh);
+ ef_status = EF_CLOSED;
+ fh = NULL;
+ }
+}
+
+
+//-------------------------------------------------- Experiment XML parser
+int
+Experiment::ExperimentHandler::toInt (Attributes *attrs, const char *atr)
+{
+ const char *str = attrs->getValue (atr);
+ return str ? atoi (str) : 0;
+}
+
+char *
+Experiment::ExperimentHandler::toStr (Attributes *attrs, const char *atr)
+{
+ const char *str = attrs->getValue (atr);
+ return dbe_strdup (str ? str : NTXT (""));
+}
+
+Experiment::ExperimentHandler::ExperimentHandler (Experiment *_exp)
+{
+ exp = _exp;
+ stack = new Vector<Element>;
+ pushElem (EL_NONE);
+ dynfuncModule = NULL;
+ dDscr = NULL;
+ pDscr = NULL;
+ propDscr = NULL;
+ text = NULL;
+ mkind = (Cmsg_warn) - 1; // CMSG_NONE
+ mnum = -1;
+ mec = -1;
+}
+
+Experiment::ExperimentHandler::~ExperimentHandler ()
+{
+ delete stack;
+ free (text);
+}
+
+void
+Experiment::ExperimentHandler::endDocument ()
+{
+ { // SP_TAG_STATE should be used to describe states, but it isn't
+ // let's do it here:
+ DataDescriptor *dd = exp->getDataDescriptor (DATA_HEAP);
+ if (dd != NULL)
+ {
+ PropDescr *prop = dd->getProp (PROP_HTYPE);
+ if (prop != NULL)
+ {
+ char * stateNames [HEAPTYPE_LAST] = HEAPTYPE_STATE_STRINGS;
+ char * stateUNames[HEAPTYPE_LAST] = HEAPTYPE_STATE_USTRINGS;
+ for (int ii = 0; ii < HEAPTYPE_LAST; ii++)
+ prop->addState (ii, stateNames[ii], stateUNames[ii]);
+ }
+ }
+ dd = exp->getDataDescriptor (DATA_IOTRACE);
+ if (dd != NULL)
+ {
+ PropDescr *prop = dd->getProp (PROP_IOTYPE);
+ if (prop != NULL)
+ {
+ char * stateNames [IOTRACETYPE_LAST] = IOTRACETYPE_STATE_STRINGS;
+ char * stateUNames[IOTRACETYPE_LAST] = IOTRACETYPE_STATE_USTRINGS;
+ for (int ii = 0; ii < IOTRACETYPE_LAST; ii++)
+ prop->addState (ii, stateNames[ii], stateUNames[ii]);
+ }
+ }
+ }
+}
+
+void
+Experiment::ExperimentHandler::pushElem (Element elem)
+{
+ curElem = elem;
+ stack->append (curElem);
+}
+
+void
+Experiment::ExperimentHandler::popElem ()
+{
+ stack->remove (stack->size () - 1);
+ curElem = stack->fetch (stack->size () - 1);
+}
+
+void
+Experiment::ExperimentHandler::startElement (char*, char*, char *qName, Attributes *attrs)
+{
+ DEBUG_CODE if (DEBUG_SAXPARSER) dump_startElement (qName, attrs);
+ if (strcmp (qName, SP_TAG_EXPERIMENT) == 0)
+ {
+ pushElem (EL_EXPERIMENT);
+ const char *str = attrs->getValue (NTXT ("version"));
+ if (str != NULL)
+ {
+ int major = atoi (str);
+ str = strchr (str, '.');
+ int minor = str ? atoi (str + 1) : 0;
+ exp->exp_maj_version = major;
+ exp->exp_min_version = minor;
+ if (major != SUNPERF_VERNUM || minor != SUNPERF_VERNUM_MINOR)
+ {
+ // not the current version, see if we support some earlier versions
+ if (major < 12)
+ {
+ StringBuilder sb;
+ sb.sprintf (GTXT ("*** Error: experiment %s version %d.%d is not supported;\nuse the version of the tools that recorded the experiment to read it"),
+ exp->get_expt_name (), major, minor);
+ // exp->errorq->append( new Emsg(CMSG_FATAL, sb) );
+ exp->status = FAILURE;
+ exp->obsolete = 1;
+ throw new SAXException (sb.toString ());
+ }
+ }
+ }
+ }
+ else if (strcmp (qName, SP_TAG_COLLECTOR) == 0)
+ pushElem (EL_COLLECTOR);
+ else if (strcmp (qName, SP_TAG_SETTING) == 0)
+ {
+ int found = 0;
+ pushElem (EL_SETTING);
+ const char *str = attrs->getValue (SP_JCMD_LIMIT);
+ if (str != NULL)
+ {
+ found = 1;
+ exp->coll_params.limit = atoi (str);
+ }
+ str = attrs->getValue (SP_JCMD_BLKSZ);
+ if (str != NULL)
+ {
+ found = 1;
+ exp->blksz = strtol (str, NULL, 0);
+ }
+ str = attrs->getValue (SP_JCMD_STACKBASE);
+ if (str)
+ {
+ found = 1;
+ exp->stack_base = strtoull (str, NULL, 0);
+ }
+ str = attrs->getValue (SP_JCMD_HWC_DEFAULT);
+ if (str != NULL)
+ {
+ found = 1;
+ exp->hwc_default = true;
+ }
+ str = attrs->getValue (SP_JCMD_NOIDLE);
+ if (str != NULL)
+ {
+ found = 1;
+ exp->commentq->append (new Emsg (CMSG_COMMENT,
+ GTXT ("*** Note: experiment does not have events from idle CPUs")));
+ }
+ str = attrs->getValue (SP_JCMD_FAKETIME);
+ if (str != NULL)
+ {
+ found = 1;
+ exp->timelineavail = false;
+ exp->commentq->append (new Emsg (CMSG_COMMENT,
+ GTXT ("*** Note: experiment does not have timestamps; timeline unavailable")));
+ }
+ str = attrs->getValue (SP_JCMD_DELAYSTART);
+ if (str != NULL)
+ {
+ found = 1;
+ exp->coll_params.start_delay = strdup (str);
+ }
+ str = attrs->getValue (SP_JCMD_TERMINATE);
+ if (str != NULL)
+ {
+ found = 1;
+ exp->coll_params.terminate = strdup (str);
+ }
+ str = attrs->getValue (SP_JCMD_PAUSE_SIG);
+ if (str != NULL)
+ {
+ found = 1;
+ exp->coll_params.pause_sig = strdup (str);
+ }
+ str = attrs->getValue (SP_JCMD_SAMPLE_PERIOD);
+ if (str != NULL)
+ {
+ found = 1;
+ exp->coll_params.sample_periodic = 1;
+ exp->coll_params.sample_timer = atoi (str);
+ }
+ str = attrs->getValue (SP_JCMD_SAMPLE_SIG);
+ if (str != NULL)
+ {
+ found = 1;
+ exp->coll_params.sample_sig = str;
+ }
+ str = attrs->getValue (SP_JCMD_SRCHPATH);
+ if (str != NULL)
+ {
+ found = 1;
+ StringBuilder sb;
+ sb.sprintf (GTXT ("Search path: %s"), str);
+ exp->runlogq->append (new Emsg (CMSG_COMMENT, sb));
+ dbeSession->add_classpath ((char*) str);
+ }
+ str = attrs->getValue (SP_JCMD_LINETRACE);
+ if (str != NULL)
+ {
+ found = 1;
+ exp->coll_params.linetrace = strdup (str);
+ }
+
+ str = attrs->getValue (SP_JCMD_COLLENV);
+ if (str != NULL)
+ {
+ found = 1;
+ StringBuilder sb;
+ sb.sprintf (GTXT (" Data collection environment variable: %s"), str);
+ exp->runlogq->append (new Emsg (CMSG_COMMENT, sb));
+ }
+ if (found == 0)
+ {
+ int nattr = attrs->getLength ();
+ if (nattr != 0)
+ {
+ fprintf (stderr, "XXX Unexpected setting found; %d attributes:\n",
+ nattr);
+ for (int k = 0; k < nattr; k++)
+ {
+ const char *qn = attrs->getQName (k);
+ const char *vl = attrs->getValue (k);
+ fprintf (stderr, "XXX %s = %s\n", qn, vl);
+ }
+ }
+ }
+ // END OF CODE FOR "setting"
+ }
+ else if (strcmp (qName, SP_TAG_SYSTEM) == 0)
+ {
+ pushElem (EL_SYSTEM);
+ const char *str = attrs->getValue (NTXT ("hostname"));
+ if (str != NULL)
+ exp->hostname = strdup (str);
+ str = attrs->getValue (NTXT ("os"));
+ if (str != NULL)
+ {
+ exp->os_version = strdup (str);
+ /* For Linux experiments expect sparse thread ID's */
+ if (strncmp (str, NTXT ("SunOS"), 5) != 0)
+ exp->sparse_threads = true;
+ }
+ str = attrs->getValue (NTXT ("arch"));
+ if (str != NULL)
+ {
+ if (strcmp (str, "i86pc") == 0 || strcmp (str, "i686") == 0
+ || strcmp (str, "x86_64") == 0)
+ exp->platform = Intel;
+ else if (strcmp (str, "aarch64") == 0)
+ exp->platform = Aarch64;
+ else
+ exp->platform = Sparc;
+ exp->need_swap_endian = (DbeSession::platform == Sparc) ?
+ (exp->platform != Sparc) : (exp->platform == Sparc);
+ exp->architecture = strdup (str);
+ }
+ str = attrs->getValue (NTXT ("pagesz"));
+ if (str != NULL)
+ exp->page_size = atoi (str);
+ str = attrs->getValue (NTXT ("npages"));
+ if (str != NULL)
+ exp->npages = atoi (str);
+ }
+ else if (strcmp (qName, SP_TAG_POWERM) == 0)
+ pushElem (EL_POWERM);
+ else if (strcmp (qName, SP_TAG_FREQUENCY) == 0)
+ {
+ pushElem (EL_FREQUENCY);
+ const char *str = attrs->getValue (NTXT ("clk"));
+ if (str != NULL)
+ exp->set_clock (atoi (str));
+ // check for frequency_scaling or turbo_mode recorded from libcollector under dbx
+ str = attrs->getValue (NTXT ("frequency_scaling"));
+ const char *str2 = attrs->getValue (NTXT ("turbo_mode"));
+ if (str != NULL || str2 != NULL)
+ exp->varclock = 1;
+ }
+ else if (strcmp (qName, SP_TAG_CPU) == 0)
+ {
+ pushElem (EL_CPU);
+ exp->ncpus++;
+ const char *str = attrs->getValue (NTXT ("clk"));
+ if (str != NULL)
+ {
+ int clk = atoi (str);
+ if (exp->maxclock == 0)
+ {
+ exp->minclock = clk;
+ exp->maxclock = clk;
+ }
+ else
+ {
+ if (clk < exp->minclock)
+ exp->minclock = clk;
+ if (clk > exp->maxclock)
+ exp->maxclock = clk;
+ }
+ exp->clock = clk;
+ }
+ // check for frequency_scaling or turbo_mode
+ str = attrs->getValue (NTXT ("frequency_scaling"));
+ const char *str2 = attrs->getValue (NTXT ("turbo_mode"));
+ if (str != NULL || str2 != NULL)
+ exp->varclock = 1;
+ }
+ else if (strcmp (qName, SP_TAG_PROCESS) == 0)
+ {
+ pushElem (EL_PROCESS);
+ const char *str = attrs->getValue (NTXT ("wsize"));
+ if (str != NULL)
+ {
+ int wsz = atoi (str);
+ if (wsz == 32)
+ exp->wsize = W32;
+ else if (wsz == 64)
+ exp->wsize = W64;
+ }
+ str = attrs->getValue (NTXT ("pid"));
+ if (str != NULL)
+ exp->pid = atoi (str);
+ str = attrs->getValue (NTXT ("ppid"));
+ if (str != NULL)
+ exp->ppid = atoi (str);
+ str = attrs->getValue (NTXT ("pgrp"));
+ if (str != NULL)
+ exp->pgrp = atoi (str);
+ str = attrs->getValue (NTXT ("sid"));
+ if (str != NULL)
+ exp->sid = atoi (str);
+ str = attrs->getValue (NTXT ("cwd"));
+ if (str != NULL)
+ exp->ucwd = strdup (str);
+ str = attrs->getValue (NTXT ("pagesz"));
+ if (str != NULL)
+ exp->page_size = atoi (str);
+ }
+ else if (strcmp (qName, SP_TAG_EVENT) == 0)
+ { // Start code for event
+ pushElem (EL_EVENT);
+ hrtime_t ts = (hrtime_t) 0;
+ const char *str = attrs->getValue (NTXT ("tstamp"));
+ if (str != NULL)
+ ts = parseTStamp (str);
+ str = attrs->getValue (NTXT ("kind"));
+ if (str != NULL)
+ {
+ if (strcmp (str, SP_JCMD_RUN) == 0)
+ {
+ exp->broken = 0;
+ exp->exp_start_time = ts;
+ str = attrs->getValue (NTXT ("time"));
+ if (str != NULL)
+ exp->start_sec = atol (str);
+ str = attrs->getValue (NTXT ("pid"));
+ if (str != NULL)
+ exp->pid = atoi (str);
+ str = attrs->getValue (NTXT ("ppid"));
+ if (str != NULL)
+ exp->ppid = atoi (str);
+ str = attrs->getValue (NTXT ("pgrp"));
+ if (str != NULL)
+ exp->pgrp = atoi (str);
+ str = attrs->getValue (NTXT ("sid"));
+ if (str != NULL)
+ exp->sid = atoi (str);
+ exp->status = Experiment::INCOMPLETE;
+ }
+ else if (strcmp (str, SP_JCMD_ARCHIVE) == 0)
+ {
+ StringBuilder sb;
+ sb.sprintf (GTXT ("er_archive run: XXXXXXX"));
+ exp->pprocq->append (new Emsg (CMSG_WARN, sb));
+ }
+ else if (strcmp (str, SP_JCMD_SAMPLE) == 0)
+ {
+ exp->update_last_event (exp->exp_start_time + ts); // ts is 0-based
+ str = attrs->getValue (NTXT ("id"));
+ int id = str ? atoi (str) : -1;
+ char *label = dbe_strdup (attrs->getValue (NTXT ("label")));
+ exp->process_sample_cmd (NULL, ts, id, label);
+ }
+ else if (strcmp (str, SP_JCMD_EXIT) == 0)
+ {
+ // don't treat EXIT as an event w.r.t. last_event and non_paused_time
+ exp->status = Experiment::SUCCESS;
+ }
+ else if (strcmp (str, SP_JCMD_CERROR) == 0)
+ {
+ mkind = CMSG_ERROR;
+ str = attrs->getValue (NTXT ("id"));
+ if (str != NULL)
+ {
+ mnum = atoi (str);
+ }
+ str = attrs->getValue (NTXT ("ec"));
+ if (str != NULL)
+ {
+ mec = atoi (str);
+ }
+ }
+ else if (strcmp (str, SP_JCMD_CWARN) == 0)
+ {
+ mkind = CMSG_WARN;
+ str = attrs->getValue (NTXT ("id"));
+ if (str != NULL)
+ mnum = atoi (str);
+ }
+ else if (strcmp (str, SP_JCMD_COMMENT) == 0)
+ {
+ mkind = CMSG_COMMENT;
+ str = attrs->getValue (NTXT ("id"));
+ if (str != NULL)
+ mnum = atoi (str);
+ str = attrs->getValue (NTXT ("text"));
+ if (str != NULL)
+ {
+ StringBuilder sb;
+ sb.sprintf (GTXT ("*** Note: %s"), str);
+ exp->commentq->append (new Emsg (CMSG_COMMENT, sb));
+ }
+ }
+ else if (strcmp (str, SP_JCMD_DESC_START) == 0)
+ {
+ char *variant = toStr (attrs, NTXT ("variant"));
+ char *lineage = toStr (attrs, NTXT ("lineage"));
+ int follow = toInt (attrs, NTXT ("follow"));
+ char *msg = toStr (attrs, NTXT ("msg"));
+ exp->process_desc_start_cmd (NULL, ts, variant, lineage, follow, msg);
+ }
+ else if (strcmp (str, SP_JCMD_DESC_STARTED) == 0)
+ {
+ char *variant = toStr (attrs, NTXT ("variant"));
+ char *lineage = toStr (attrs, NTXT ("lineage"));
+ int follow = toInt (attrs, NTXT ("follow"));
+ char *msg = toStr (attrs, NTXT ("msg"));
+ exp->process_desc_started_cmd (NULL, ts, variant, lineage, follow, msg);
+ }
+ else if (strcmp (str, SP_JCMD_EXEC_START) == 0)
+ {
+ // if successful, acts like experiment termination - no "exit" entry will follow
+ exp->update_last_event (exp->exp_start_time + ts); // ts is 0-based
+ char *variant = toStr (attrs, NTXT ("variant"));
+ char *lineage = toStr (attrs, NTXT ("lineage"));
+ int follow = toInt (attrs, NTXT ("follow"));
+ char *msg = toStr (attrs, NTXT ("msg"));
+ exp->process_desc_start_cmd (NULL, ts, variant, lineage, follow, msg);
+ exp->exec_started = true;
+ }
+ else if (strcmp (str, SP_JCMD_EXEC_ERROR) == 0)
+ {
+ exp->update_last_event (exp->exp_start_time + ts); // ts is 0-based
+ char *variant = toStr (attrs, NTXT ("variant"));
+ char *lineage = toStr (attrs, NTXT ("lineage"));
+ int follow = toInt (attrs, NTXT ("follow"));
+ char *msg = toStr (attrs, NTXT ("msg"));
+ exp->process_desc_started_cmd (NULL, ts, variant, lineage, follow, msg);
+ exp->exec_started = false;
+ }
+ else if (strcmp (str, SP_JCMD_JTHRSTART) == 0)
+ {
+ char *name = dbe_strdup (attrs->getValue (NTXT ("name")));
+ char *grpname = dbe_strdup (attrs->getValue (NTXT ("grpname")));
+ char *prntname = dbe_strdup (attrs->getValue (NTXT ("prntname")));
+ str = attrs->getValue (NTXT ("tid"));
+ uint64_t tid = str ? strtoull (str, NULL, 0) : 0;
+ str = attrs->getValue (NTXT ("jthr"));
+ Vaddr jthr = str ? strtoull (str, NULL, 0) : 0;
+ str = attrs->getValue (NTXT ("jenv"));
+ Vaddr jenv = str ? strtoull (str, NULL, 0) : 0;
+ exp->process_jthr_start_cmd (NULL, name, grpname, prntname, tid, jthr, jenv, ts);
+ }
+ else if (strcmp (str, SP_JCMD_JTHREND) == 0)
+ {
+ str = attrs->getValue (NTXT ("tid"));
+ uint64_t tid = str ? strtoull (str, NULL, 0) : 0;
+ str = attrs->getValue (NTXT ("jthr"));
+ Vaddr jthr = str ? strtoull (str, NULL, 0) : 0;
+ str = attrs->getValue (NTXT ("jenv"));
+ Vaddr jenv = str ? strtoull (str, NULL, 0) : 0;
+ exp->process_jthr_end_cmd (NULL, tid, jthr, jenv, ts);
+ }
+ else if (strcmp (str, SP_JCMD_GCEND) == 0)
+ {
+ if (exp->getDataDescriptor (DATA_GCEVENT) == NULL)
+ exp->newDataDescriptor (DATA_GCEVENT);
+ exp->process_gc_end_cmd (ts);
+ }
+ else if (strcmp (str, SP_JCMD_GCSTART) == 0)
+ {
+ if (exp->getDataDescriptor (DATA_GCEVENT) == NULL)
+ exp->newDataDescriptor (DATA_GCEVENT);
+ exp->process_gc_start_cmd (ts);
+ }
+ else if (strcmp (str, SP_JCMD_PAUSE) == 0)
+ {
+ if (exp->resume_ts != MAX_TIME)
+ {
+ // data collection was active
+ hrtime_t delta = ts - exp->resume_ts;
+ exp->non_paused_time += delta;
+ exp->resume_ts = MAX_TIME; // collection is paused
+ }
+ StringBuilder sb;
+ str = attrs->getValue (NTXT ("name"));
+ if (str == NULL)
+ sb.sprintf (GTXT ("Pause: %ld.%09ld"), (long) (ts / NANOSEC),
+ (long) (ts % NANOSEC));
+ else
+ sb.sprintf (GTXT ("Pause (%s): %ld.%09ld"), str,
+ (long) (ts / NANOSEC), (long) (ts % NANOSEC));
+ exp->runlogq->append (new Emsg (CMSG_COMMENT, sb));
+ }
+ else if (strcmp (str, SP_JCMD_RESUME) == 0)
+ {
+ if (exp->resume_ts == MAX_TIME)
+ // data collection was paused
+ exp->resume_ts = ts; // remember start time
+ StringBuilder sb;
+ sb.sprintf (GTXT ("Resume: %ld.%09ld"), (long) (ts / NANOSEC), (long) (ts % NANOSEC));
+ exp->runlogq->append (new Emsg (CMSG_COMMENT, sb));
+ if (exp->exp_start_time == ZERO_TIME)
+ exp->exp_start_time = ts;
+ }
+ else if (strcmp (str, SP_JCMD_THREAD_PAUSE) == 0)
+ {
+ str = attrs->getValue (NTXT ("tid"));
+ uint64_t tid = str ? strtoull (str, NULL, 0) : 0;
+ StringBuilder sb;
+ sb.sprintf (GTXT ("Thread %llu pause: %ld.%09ld"), (unsigned long long) tid,
+ (long) (ts / NANOSEC), (long) (ts % NANOSEC));
+ exp->runlogq->append (new Emsg (CMSG_COMMENT, sb));
+ }
+ else if (strcmp (str, SP_JCMD_THREAD_RESUME) == 0)
+ {
+ str = attrs->getValue (NTXT ("tid"));
+ uint64_t tid = str ? strtoull (str, NULL, 0) : 0;
+ StringBuilder sb;
+ sb.sprintf (GTXT ("Thread %llu resume: %ld.%09ld"), (unsigned long long) tid,
+ (long) (ts / NANOSEC), (long) (ts % NANOSEC));
+ exp->runlogq->append (new Emsg (CMSG_COMMENT, sb));
+ }
+ else if (strcmp (str, NTXT ("map")) == 0)
+ {
+ ts += exp->exp_start_time;
+ str = attrs->getValue (NTXT ("vaddr"));
+ Vaddr vaddr = str ? strtoull (str, NULL, 0) : 0;
+ str = attrs->getValue (NTXT ("size"));
+ int msize = str ? atoi (str) : 0;
+ str = attrs->getValue (NTXT ("foffset"));
+ int64_t offset = str ? strtoll (str, NULL, 0) : 0;
+ str = attrs->getValue (NTXT ("modes"));
+ int64_t modes = str ? strtoll (str, NULL, 0) : 0;
+ str = attrs->getValue (NTXT ("chksum"));
+ int64_t chksum = 0;
+ if (str)
+ chksum = Elf::normalize_checksum (strtoll (str, NULL, 0));
+ char *name = (char *) attrs->getValue (NTXT ("name"));
+ str = attrs->getValue (NTXT ("object"));
+ if (strcmp (str, NTXT ("segment")) == 0)
+ {
+ if (strcmp (name, NTXT ("LinuxKernel")) == 0)
+ exp->process_Linux_kernel_cmd (ts);
+ else
+ exp->process_seg_map_cmd (NULL, ts, vaddr, msize, 0,
+ offset, modes, chksum, name);
+ }
+ else if (strcmp (str, NTXT ("function")) == 0)
+ {
+ exp->process_fn_load_cmd (dynfuncModule, name, vaddr, msize, ts);
+ dynfuncModule = NULL;
+ }
+ else if (strcmp (str, NTXT ("dynfunc")) == 0)
+ {
+ if (dynfuncModule == NULL)
+ {
+ dynfuncModule = dbeSession->createModule (exp->get_dynfunc_lo (DYNFUNC_SEGMENT), name);
+ dynfuncModule->flags |= MOD_FLAG_UNKNOWN;
+ dynfuncModule->set_file_name (dbe_strdup (dynfuncModule->getMainSrc ()->get_name ()));
+ }
+ (void) exp->create_dynfunc (dynfuncModule,
+ (char*) attrs->getValue (NTXT ("funcname")), vaddr, msize);
+ }
+ else if (strcmp (str, NTXT ("jcm")) == 0)
+ {
+ str = attrs->getValue (NTXT ("methodId"));
+ Vaddr mid = str ? strtoull (str, NULL, 0) : 0;
+ exp->process_jcm_load_cmd (NULL, mid, vaddr, msize, ts);
+ }
+ }
+ else if (strcmp (str, NTXT ("unmap")) == 0)
+ {
+ ts += exp->exp_start_time;
+ str = attrs->getValue (NTXT ("vaddr"));
+ Vaddr vaddr = str ? strtoull (str, NULL, 0) : 0;
+ exp->process_seg_unmap_cmd (NULL, ts, vaddr);
+ }
+ }
+ // end of code for event
+ }
+ else if (strcmp (qName, SP_TAG_PROFILE) == 0)
+ {
+ pushElem (EL_PROFILE);
+ const char *str = attrs->getValue (NTXT ("name"));
+ if (str == NULL)
+ return;
+ if (strcmp (str, NTXT ("profile")) == 0)
+ {
+ exp->coll_params.profile_mode = 1;
+ str = attrs->getValue (NTXT ("numstates"));
+ if (str != NULL)
+ exp->coll_params.lms_magic_id = atoi (str);
+ str = attrs->getValue (NTXT ("ptimer"));
+ if (str != NULL)
+ exp->coll_params.ptimer_usec = atoi (str); // microseconds
+
+ PropDescr *mstate_prop = NULL;
+ char * stateNames [/*LMS_NUM_STATES*/] = LMS_STATE_STRINGS;
+ char * stateUNames[/*LMS_NUM_STATES*/] = LMS_STATE_USTRINGS;
+ {
+ dDscr = exp->newDataDescriptor (DATA_CLOCK);
+ PropDescr *prop = new PropDescr (PROP_MSTATE, NTXT ("MSTATE"));
+ prop->uname = dbe_strdup (GTXT ("Thread state"));
+ prop->vtype = TYPE_UINT32;
+ // (states added below)
+ dDscr->addProperty (prop);
+ mstate_prop = prop;
+
+ prop = new PropDescr (PROP_NTICK, NTXT ("NTICK"));
+ prop->uname = dbe_strdup (GTXT ("Number of Profiling Ticks"));
+ prop->vtype = TYPE_UINT32;
+ dDscr->addProperty (prop);
+ }
+
+ switch (exp->coll_params.lms_magic_id)
+ {
+ case LMS_MAGIC_ID_SOLARIS:
+ exp->register_metric (Metric::CP_TOTAL);
+ exp->register_metric (Metric::CP_TOTAL_CPU);
+ exp->register_metric (Metric::CP_LMS_USER);
+ exp->register_metric (Metric::CP_LMS_SYSTEM);
+ exp->register_metric (Metric::CP_LMS_TRAP);
+ exp->register_metric (Metric::CP_LMS_DFAULT);
+ exp->register_metric (Metric::CP_LMS_TFAULT);
+ exp->register_metric (Metric::CP_LMS_KFAULT);
+ exp->register_metric (Metric::CP_LMS_STOPPED);
+ exp->register_metric (Metric::CP_LMS_WAIT_CPU);
+ exp->register_metric (Metric::CP_LMS_SLEEP);
+ exp->register_metric (Metric::CP_LMS_USER_LOCK);
+ for (int ii = 0; ii < LMS_NUM_SOLARIS_MSTATES; ii++)
+ mstate_prop->addState (ii, stateNames[ii], stateUNames[ii]);
+ break;
+ case LMS_MAGIC_ID_ERKERNEL_KERNEL:
+ exp->register_metric (Metric::CP_KERNEL_CPU);
+ {
+ int ii = LMS_KERNEL_CPU;
+ mstate_prop->addState (ii, stateNames[ii], stateUNames[ii]);
+ }
+ break;
+ case LMS_MAGIC_ID_ERKERNEL_USER:
+ exp->register_metric (Metric::CP_TOTAL_CPU);
+ exp->register_metric (Metric::CP_LMS_USER);
+ exp->register_metric (Metric::CP_LMS_SYSTEM);
+ {
+ int ii = LMS_KERNEL_CPU;
+ mstate_prop->addState (ii, stateNames[ii], stateUNames[ii]);
+ ii = LMS_USER;
+ mstate_prop->addState (ii, stateNames[ii], stateUNames[ii]);
+ ii = LMS_SYSTEM;
+ mstate_prop->addState (ii, stateNames[ii], stateUNames[ii]);
+ }
+ break;
+ case LMS_MAGIC_ID_LINUX:
+ exp->register_metric (Metric::CP_TOTAL_CPU);
+ {
+ int ii = LMS_LINUX_CPU;
+ mstate_prop->addState (ii, stateNames[ii], stateUNames[ii]);
+ }
+ break;
+ default:
+ // odd
+ break;
+ }
+ }
+ else if (strcmp (str, NTXT ("heaptrace")) == 0)
+ {
+ exp->coll_params.heap_mode = 1;
+ exp->leaklistavail = true;
+ exp->heapdataavail = true;
+ exp->register_metric (Metric::HEAP_ALLOC_BYTES);
+ exp->register_metric (Metric::HEAP_ALLOC_CNT);
+ exp->register_metric (Metric::HEAP_LEAK_BYTES);
+ exp->register_metric (Metric::HEAP_LEAK_CNT);
+ dDscr = exp->newDataDescriptor (DATA_HEAP);
+ }
+ else if (strcmp (str, NTXT ("iotrace")) == 0)
+ {
+ exp->coll_params.io_mode = 1;
+ exp->iodataavail = true;
+ exp->register_metric (Metric::IO_READ_TIME);
+ exp->register_metric (Metric::IO_READ_BYTES);
+ exp->register_metric (Metric::IO_READ_CNT);
+ exp->register_metric (Metric::IO_WRITE_TIME);
+ exp->register_metric (Metric::IO_WRITE_BYTES);
+ exp->register_metric (Metric::IO_WRITE_CNT);
+ exp->register_metric (Metric::IO_OTHER_TIME);
+ exp->register_metric (Metric::IO_OTHER_CNT);
+ exp->register_metric (Metric::IO_ERROR_TIME);
+ exp->register_metric (Metric::IO_ERROR_CNT);
+ dDscr = exp->newDataDescriptor (DATA_IOTRACE);
+ }
+ else if (strcmp (str, NTXT ("synctrace")) == 0)
+ {
+ exp->coll_params.sync_mode = 1;
+ str = attrs->getValue (NTXT ("threshold"));
+ if (str != NULL)
+ exp->coll_params.sync_threshold = atoi (str);
+ str = attrs->getValue (NTXT ("scope"));
+ if (str != NULL)
+ exp->coll_params.sync_scope = atoi (str);
+ else // Should only happen with old experiments; use the old default
+ exp->coll_params.sync_scope = SYNCSCOPE_NATIVE | SYNCSCOPE_JAVA;
+ exp->register_metric (Metric::SYNC_WAIT_TIME);
+ exp->register_metric (Metric::SYNC_WAIT_COUNT);
+ dDscr = exp->newDataDescriptor (DATA_SYNCH);
+ }
+ else if (strcmp (str, NTXT ("omptrace")) == 0)
+ {
+ exp->coll_params.omp_mode = 1;
+ dDscr = exp->newDataDescriptor (DATA_OMP, DDFLAG_NOSHOW);
+ }
+ else if (strcmp (str, NTXT ("hwcounter")) == 0)
+ {
+ str = attrs->getValue (NTXT ("cpuver"));
+ int cpuver = str ? atoi (str) : 0;
+ char *counter = dbe_strdup (attrs->getValue (NTXT ("hwcname")));
+ char *int_name = dbe_strdup (attrs->getValue (NTXT ("int_name"))); // may not be present
+ str = attrs->getValue (NTXT ("interval"));
+ int interval = str ? atoi (str) : 0;
+ str = attrs->getValue (NTXT ("tag"));
+ int tag = str ? atoi (str) : 0;
+ str = attrs->getValue (NTXT ("memop"));
+ int i_tpc = str ? atoi (str) : 0;
+ char *modstr = dbe_strdup (attrs->getValue (NTXT ("modstr")));
+ exp->process_hwcounter_cmd (NULL, cpuver, counter, int_name, interval, tag, i_tpc, modstr);
+ dDscr = exp->newDataDescriptor (DATA_HWC);
+ }
+ else if (strcmp (str, NTXT ("hwsimctr")) == 0)
+ {
+ int cpuver = toInt (attrs, NTXT ("cpuver"));
+ char *hwcname = dbe_strdup (attrs->getValue (NTXT ("hwcname")));
+ char *int_name = dbe_strdup (attrs->getValue (NTXT ("int_name")));
+ char *metric = dbe_strdup (attrs->getValue (NTXT ("metric")));
+ int reg = toInt (attrs, NTXT ("reg_num"));
+ int interval = toInt (attrs, NTXT ("interval"));
+ int timecvt = toInt (attrs, NTXT ("timecvt"));
+ int i_tpc = toInt (attrs, NTXT ("memop"));
+ int tag = toInt (attrs, NTXT ("tag"));
+ exp->process_hwsimctr_cmd (NULL, cpuver, hwcname, int_name, metric, reg,
+ interval, timecvt, i_tpc, tag);
+ dDscr = exp->newDataDescriptor (DATA_HWC);
+ }
+ else if (strcmp (str, NTXT ("dversion")) == 0)
+ exp->dversion = dbe_strdup (attrs->getValue (NTXT ("version")));
+ else if (strcmp (str, NTXT ("jprofile")) == 0)
+ {
+ exp->has_java = true;
+ str = attrs->getValue (NTXT ("jversion"));
+ if (str != NULL)
+ exp->jversion = strdup (str);
+ }
+ else if (strcmp (str, NTXT ("datarace")) == 0)
+ {
+ exp->coll_params.race_mode = 1;
+ exp->racelistavail = true;
+ str = attrs->getValue (NTXT ("scheme"));
+ exp->coll_params.race_stack = str ? atoi (str) : 0;
+ exp->register_metric (Metric::RACCESS);
+ dDscr = exp->newDataDescriptor (DATA_RACE);
+ }
+ else if (strcmp (str, NTXT ("deadlock")) == 0)
+ {
+ exp->coll_params.deadlock_mode = 1;
+ exp->deadlocklistavail = true;
+ exp->register_metric (Metric::DEADLOCKS);
+ dDscr = exp->newDataDescriptor (DATA_DLCK);
+ }
+ }
+ /* XXX -- obsolete tag, but is still written to experiments */
+ else if (strcmp (qName, SP_TAG_DATAPTR) == 0)
+ {
+ pushElem (EL_DATAPTR);
+ return;
+ }
+ else if (strcmp (qName, SP_TAG_PROFDATA) == 0)
+ {
+ pushElem (EL_PROFDATA);
+ // SS12 HWC experiments are not well structured
+ const char *fname = attrs->getValue (NTXT ("fname"));
+ if (fname && strcmp (fname, SP_HWCNTR_FILE) == 0)
+ dDscr = exp->newDataDescriptor (DATA_HWC);
+ }
+ else if (strcmp (qName, SP_TAG_PROFPCKT) == 0)
+ {
+ pushElem (EL_PROFPCKT);
+ const char *str = attrs->getValue (NTXT ("kind")); // see Pckt_type
+ int kind = str ? atoi (str) : -1;
+ if (kind < 0)
+ return;
+ if (exp->coll_params.omp_mode == 1)
+ {
+ if (kind == OMP_PCKT)
+ dDscr = exp->newDataDescriptor (DATA_OMP, DDFLAG_NOSHOW);
+ else if (kind == OMP2_PCKT)
+ dDscr = exp->newDataDescriptor (DATA_OMP2, DDFLAG_NOSHOW);
+ else if (kind == OMP3_PCKT)
+ dDscr = exp->newDataDescriptor (DATA_OMP3, DDFLAG_NOSHOW);
+ else if (kind == OMP4_PCKT)
+ dDscr = exp->newDataDescriptor (DATA_OMP4, DDFLAG_NOSHOW);
+ else if (kind == OMP5_PCKT)
+ dDscr = exp->newDataDescriptor (DATA_OMP5, DDFLAG_NOSHOW);
+ }
+ pDscr = exp->newPacketDescriptor (kind, dDscr);
+ return;
+ }
+ else if (strcmp (qName, SP_TAG_FIELD) == 0)
+ {
+ pushElem (EL_FIELD);
+ if (pDscr != NULL)
+ {
+ const char *name = attrs->getValue (NTXT ("name"));
+ if (name == NULL)
+ return;
+ int propID = dbeSession->registerPropertyName (name);
+ propDscr = new PropDescr (propID, name);
+ FieldDescr *fldDscr = new FieldDescr (propID, name);
+
+ const char *str = attrs->getValue (NTXT ("type"));
+ if (str)
+ {
+ if (strcmp (str, NTXT ("INT32")) == 0)
+ fldDscr->vtype = TYPE_INT32;
+ else if (strcmp (str, NTXT ("UINT32")) == 0)
+ fldDscr->vtype = TYPE_UINT32;
+ else if (strcmp (str, NTXT ("INT64")) == 0)
+ fldDscr->vtype = TYPE_INT64;
+ else if (strcmp (str, NTXT ("UINT64")) == 0)
+ fldDscr->vtype = TYPE_UINT64;
+ else if (strcmp (str, NTXT ("STRING")) == 0)
+ fldDscr->vtype = TYPE_STRING;
+ else if (strcmp (str, NTXT ("DOUBLE")) == 0)
+ fldDscr->vtype = TYPE_DOUBLE;
+ else if (strcmp (str, NTXT ("DATE")) == 0)
+ {
+ fldDscr->vtype = TYPE_DATE;
+ const char *fmt = attrs->getValue (NTXT ("format"));
+ fldDscr->format = strdup (fmt ? fmt : "");
+ }
+ }
+ propDscr->vtype = fldDscr->vtype;
+
+ // TYPE_DATE is converted to TYPE_UINT64 in propDscr
+ if (fldDscr->vtype == TYPE_DATE)
+ propDscr->vtype = TYPE_UINT64;
+
+ // Fix some types until they are fixed in libcollector
+ if (propID == PROP_VIRTPC || propID == PROP_PHYSPC)
+ {
+ if (fldDscr->vtype == TYPE_INT32)
+ propDscr->vtype = TYPE_UINT32;
+ else if (fldDscr->vtype == TYPE_INT64)
+ propDscr->vtype = TYPE_UINT64;
+ }
+
+ // The following props get mapped to 32-bit values in readPacket
+ if (propID == PROP_CPUID || propID == PROP_THRID
+ || propID == PROP_LWPID)
+ propDscr->vtype = TYPE_UINT32; // override experiment property
+
+ str = attrs->getValue (NTXT ("uname"));
+ if (str)
+ propDscr->uname = strdup (PTXT ((char*) str));
+ str = attrs->getValue (NTXT ("noshow"));
+ if (str && atoi (str) != 0)
+ propDscr->flags |= PRFLAG_NOSHOW;
+
+ if (dDscr == NULL)
+ {
+ StringBuilder sb;
+ sb.sprintf (GTXT ("*** Error: data parsing failed. Log file is corrupted."));
+ exp->warnq->append (new Emsg (CMSG_ERROR, sb));
+ throw new SAXException (sb.toString ());
+ }
+
+ dDscr->addProperty (propDscr);
+ str = attrs->getValue (NTXT ("offset"));
+ if (str)
+ fldDscr->offset = atoi (str);
+ pDscr->addField (fldDscr);
+ }
+ }
+ else if (strcmp (qName, SP_TAG_STATE) == 0)
+ {
+ pushElem (EL_STATE);
+ if (propDscr != NULL)
+ {
+ const char *str = attrs->getValue (NTXT ("value"));
+ int value = str ? atoi (str) : -1;
+ str = attrs->getValue (NTXT ("name"));
+ const char *ustr = attrs->getValue (NTXT ("uname"));
+ propDscr->addState (value, str, ustr);
+ }
+ }
+ else if (strcmp (qName, SP_TAG_DTRACEFATAL) == 0)
+ pushElem (EL_DTRACEFATAL);
+ else
+ {
+ StringBuilder sb;
+ sb.sprintf (GTXT ("*** Warning: unrecognized element %s"), qName);
+ exp->warnq->append (new Emsg (CMSG_WARN, sb));
+ pushElem (EL_NONE);
+ }
+}
+
+void
+Experiment::ExperimentHandler::characters (char *ch, int start, int length)
+{
+ switch (curElem)
+ {
+ case EL_COLLECTOR:
+ exp->cversion = dbe_strndup (ch + start, length);
+ break;
+ case EL_PROCESS:
+ exp->process_arglist_cmd (NULL, dbe_strndup (ch + start, length));
+ break;
+ case EL_EVENT:
+ free (text);
+ text = dbe_strndup (ch + start, length);
+ break;
+ default:
+ break;
+ }
+}
+
+void
+Experiment::ExperimentHandler::endElement (char*, char*, char*)
+{
+ if (curElem == EL_EVENT && mkind >= 0 && mnum >= 0)
+ {
+ char *str;
+ if (mec > 0)
+ str = dbe_sprintf ("%s -- %s", text != NULL ? text : "", strerror (mec));
+ else
+ str = dbe_sprintf ("%s", text != NULL ? text : "");
+ Emsg *msg = new Emsg (mkind, mnum, str);
+ if (mkind == CMSG_WARN)
+ {
+ if (mnum != COL_WARN_FSTYPE
+ || dbeSession->check_ignore_fs_warn () == false)
+ exp->warnq->append (msg);
+ else
+ exp->commentq->append (msg);
+ }
+ else if (mkind == CMSG_ERROR || mkind == CMSG_FATAL)
+ exp->errorq->append (msg);
+ else if (mkind == CMSG_COMMENT)
+ exp->commentq->append (msg);
+ else
+ delete msg;
+ mkind = (Cmsg_warn) - 1;
+ mnum = -1;
+ mec = -1;
+ }
+ else if (curElem == EL_PROFILE)
+ dDscr = NULL;
+ else if (curElem == EL_PROFPCKT)
+ pDscr = NULL;
+ else if (curElem == EL_FIELD)
+ propDscr = NULL;
+ free (text);
+ text = NULL;
+ popElem ();
+}
+
+void
+Experiment::ExperimentHandler::error (SAXParseException *e)
+{
+ StringBuilder sb;
+ sb.sprintf (GTXT ("%s at line %d, column %d"),
+ e->getMessage (), e->getLineNumber (), e->getColumnNumber ());
+ char *msg = sb.toString ();
+ SAXException *e1 = new SAXException (msg);
+ free (msg);
+ throw ( e1);
+}
+
+//-------------------------------------------------- Experiment
+
+Experiment::Experiment ()
+{
+ groupId = 0;
+ userExpId = expIdx = -1;
+ founder_exp = NULL;
+ baseFounder = NULL;
+ children_exps = new Vector<Experiment*>;
+ loadObjs = new Vector<LoadObject*>;
+ loadObjMap = new StringMap<LoadObject*>(128, 128);
+ sourcesMap = NULL;
+
+ // Initialize configuration information.
+ status = FAILURE;
+ start_sec = 0;
+ mtime = 0;
+ hostname = NULL;
+ username = NULL;
+ architecture = NULL;
+ os_version = NULL;
+ uarglist = NULL;
+ utargname = NULL;
+ ucwd = NULL;
+ cversion = NULL;
+ dversion = NULL;
+ jversion = NULL;
+ exp_maj_version = 0;
+ exp_min_version = 0;
+ platform = Unknown;
+ wsize = Wnone;
+ page_size = 4096;
+ npages = 0;
+ stack_base = 0xf0000000;
+ broken = 1;
+ obsolete = 0;
+ hwc_bogus = 0;
+ hwc_lost_int = 0;
+ hwc_scanned = 0;
+ hwc_default = false;
+ invalid_packet = 0;
+
+ // clear HWC event stats
+ dsevents = 0;
+ dsnoxhwcevents = 0;
+
+ memset (&coll_params, 0, sizeof (coll_params));
+ ncpus = 0;
+ minclock = 0;
+ maxclock = 0;
+ clock = 0;
+ varclock = 0;
+ exec_started = false;
+ timelineavail = true;
+ leaklistavail = false;
+ heapdataavail = false;
+ iodataavail = false;
+ dataspaceavail = false;
+ ifreqavail = false;
+ racelistavail = false;
+ deadlocklistavail = false;
+ ompavail = false;
+ tiny_threshold = -1;
+ pid = 0;
+ ppid = 0;
+ pgrp = 0;
+ sid = 0;
+
+ gc_duration = ZERO_TIME;
+ exp_start_time = ZERO_TIME; // not known. Wall-clock hrtime (not zero based)
+ last_event = ZERO_TIME; // not known. Wall-clock hrtime (not zero based)
+ non_paused_time = 0; // 0 non-paused time (will sum as experiment is processed)
+ resume_ts = 0; // by default, collection is "resumed" (not paused) from time=0
+ need_swap_endian = false;
+ exp_rel_start_time_set = false;
+ exp_rel_start_time = ZERO_TIME;
+ has_java = false;
+ hex_field_width = 8;
+ hw_cpuver = CPUVER_UNDEFINED;
+ machinemodel = NULL;
+ expt_name = NULL;
+ arch_name = NULL;
+ fndr_arch_name = NULL;
+ logFile = NULL;
+
+ dataDscrs = new Vector<DataDescriptor*>;
+ for (int i = 0; i < DATA_LAST; ++i)
+ dataDscrs->append (NULL);
+
+ pcktDscrs = new Vector<PacketDescriptor*>;
+ blksz = PROFILE_BUFFER_CHUNK;
+ jthreads = new Vector<JThread*>;
+ jthreads_idx = new Vector<JThread*>;
+ gcevents = new Vector<GCEvent*>;
+ gcevent_last_used = (GCEvent *) NULL;
+ heapUnmapEvents = new Vector<UnmapChunk*>;
+ cstack = NULL;
+ cstackShowHide = NULL;
+ frmpckts = new Vector<RawFramePacket*>;
+ typedef DefaultMap2D<uint32_t, hrtime_t, uint64_t> OmpMap0;
+ mapPRid = new OmpMap0 (OmpMap0::Interval);
+ typedef DefaultMap2D<uint32_t, hrtime_t, void*> OmpMap;
+ mapPReg = new OmpMap (OmpMap::Interval);
+ mapTask = new OmpMap (OmpMap::Interval);
+ openMPdata = NULL;
+ archiveMap = NULL;
+ nnodes = 0;
+ nchunks = 0;
+ chunks = 0;
+ uidHTable = NULL;
+ uidnodes = new Vector<UIDnode*>;
+ mrecs = new Vector<MapRecord*>;
+ samples = new Vector<Sample*>;
+ sample_last_used = (Sample *) NULL;
+ first_sample_label = (char*) NULL;
+ fDataMap = NULL;
+ vFdMap = NULL;
+ resolveFrameInfo = true;
+ discardTiny = false;
+ init ();
+}
+
+Experiment::~Experiment ()
+{
+ fini ();
+ free (coll_params.linetrace);
+ for (int i = 0; i < MAX_HWCOUNT; i++)
+ {
+ free (coll_params.hw_aux_name[i]);
+ free (coll_params.hw_username[i]);
+ }
+ free (hostname);
+ free (username);
+ free (architecture);
+ free (os_version);
+ free (uarglist);
+ free (utargname);
+ free (ucwd);
+ free (cversion);
+ free (dversion);
+ free (jversion);
+ delete logFile;
+ free (expt_name);
+ free (arch_name);
+ free (fndr_arch_name);
+ delete jthreads_idx;
+ delete cstack;
+ delete cstackShowHide;
+ delete mapPRid;
+ delete mapPReg;
+ delete mapTask;
+ delete openMPdata;
+ destroy_map (DbeFile *, archiveMap);
+ delete[] uidHTable;
+ delete uidnodes;
+ delete mrecs;
+ delete children_exps;
+ delete loadObjs;
+ delete loadObjMap;
+ delete sourcesMap;
+ free (first_sample_label);
+ free (machinemodel);
+
+ dataDscrs->destroy ();
+ delete dataDscrs;
+ pcktDscrs->destroy ();
+ delete pcktDscrs;
+ jthreads->destroy ();
+ delete jthreads;
+ gcevents->destroy ();
+ delete gcevents;
+ heapUnmapEvents->destroy ();
+ delete heapUnmapEvents;
+ frmpckts->destroy ();
+ delete frmpckts;
+ samples->destroy ();
+ delete samples;
+ delete fDataMap;
+ delete vFdMap;
+
+ for (long i = 0; i < nchunks; i++)
+ delete[] chunks[i];
+ delete[] chunks;
+}
+
+void
+Experiment::init_cache ()
+{
+ if (smemHTable)
+ return;
+ smemHTable = new SegMem*[HTableSize];
+ instHTable = new DbeInstr*[HTableSize];
+ for (int i = 0; i < HTableSize; i++)
+ {
+ smemHTable[i] = NULL;
+ instHTable[i] = NULL;
+ }
+ uidHTable = new UIDnode*[HTableSize];
+ for (int i = 0; i < HTableSize; i++)
+ uidHTable[i] = NULL;
+
+ cstack = CallStack::getInstance (this);
+ cstackShowHide = CallStack::getInstance (this);
+}
+
+void
+Experiment::init ()
+{
+ userLabels = NULL;
+ seg_items = new Vector<SegMem*>;
+ maps = new PRBTree ();
+ jmaps = NULL; // used by JAVA_CLASSES only
+ jmidHTable = NULL;
+ smemHTable = NULL;
+ instHTable = NULL;
+ min_thread = (uint64_t) - 1;
+ max_thread = 0;
+ thread_cnt = 0;
+ min_lwp = (uint64_t) - 1;
+ max_lwp = 0;
+ lwp_cnt = 0;
+ min_cpu = (uint64_t) - 1;
+ max_cpu = 0;
+ cpu_cnt = 0;
+
+ commentq = new Emsgqueue (NTXT ("commentq"));
+ runlogq = new Emsgqueue (NTXT ("runlogq"));
+ errorq = new Emsgqueue (NTXT ("errorq"));
+ warnq = new Emsgqueue (NTXT ("warnq"));
+ notesq = new Emsgqueue (NTXT ("notesq"));
+ pprocq = new Emsgqueue (NTXT ("pprocq"));
+ ifreqq = NULL;
+
+ metrics = new Vector<BaseMetric*>;
+ tagObjs = new Vector<Vector<Histable*>*>;
+ tagObjs->store (PROP_THRID, new Vector<Histable*>);
+ tagObjs->store (PROP_LWPID, new Vector<Histable*>);
+ tagObjs->store (PROP_CPUID, new Vector<Histable*>);
+ tagObjs->store (PROP_EXPID, new Vector<Histable*>);
+ sparse_threads = false;
+}
+
+void
+Experiment::fini ()
+{
+ seg_items->destroy ();
+ delete seg_items;
+ delete maps;
+ delete jmaps;
+ delete[] smemHTable;
+ delete[] instHTable;
+ delete jmidHTable;
+ delete commentq;
+ delete runlogq;
+ delete errorq;
+ delete warnq;
+ delete notesq;
+ delete pprocq;
+ if (ifreqq != NULL)
+ {
+ delete ifreqq;
+ ifreqq = NULL;
+ }
+
+ int index;
+ BaseMetric *mtr;
+ Vec_loop (BaseMetric*, metrics, index, mtr)
+ {
+ dbeSession->drop_metric (mtr);
+ }
+ delete metrics;
+ tagObjs->fetch (PROP_THRID)->destroy ();
+ tagObjs->fetch (PROP_LWPID)->destroy ();
+ tagObjs->fetch (PROP_CPUID)->destroy ();
+ tagObjs->fetch (PROP_EXPID)->destroy ();
+ tagObjs->destroy ();
+ delete tagObjs;
+}
+
+// These are the data files which can be read in parallel
+// for multiple sub-experiments.
+// Postpone calling resolve_frame_info()
+void
+Experiment::read_experiment_data (bool read_ahead)
+{
+
+ read_frameinfo_file ();
+ if (read_ahead)
+ {
+ resolveFrameInfo = false;
+ (void) get_profile_events ();
+ resolveFrameInfo = true;
+ }
+}
+
+Experiment::Exp_status
+Experiment::open_epilogue ()
+{
+
+ // set up mapping for tagObj(PROP_EXPID)
+ (void) mapTagValue (PROP_EXPID, userExpId);
+
+ post_process ();
+ if (last_event != ZERO_TIME)
+ { // if last_event is known
+ StringBuilder sb;
+ hrtime_t ts = last_event - exp_start_time;
+ sb.sprintf (GTXT ("Experiment Ended: %ld.%09ld\nData Collection Duration: %ld.%09ld"),
+ (long) (ts / NANOSEC), (long) (ts % NANOSEC),
+ (long) (non_paused_time / NANOSEC),
+ (long) (non_paused_time % NANOSEC));
+ runlogq->append (new Emsg (CMSG_COMMENT, sb));
+ }
+
+ // Check for incomplete experiment, and inform the user
+ if (status == INCOMPLETE)
+ {
+ if (exec_started == true)
+ // experiment ended with the exec, not abnormally
+ status = SUCCESS;
+ else
+ {
+ char * cmnt = GTXT ("*** Note: experiment was not closed");
+ commentq->append (new Emsg (CMSG_COMMENT, cmnt));
+ // runlogq->append(new Emsg(CMSG_COMMENT, cmnt));
+ }
+ }
+ // write a descriptive header for the experiment
+ write_header ();
+ return status;
+}
+
+Experiment::Exp_status
+Experiment::open (char *path)
+{
+
+ // Find experiment directory
+ if (find_expdir (path) != SUCCESS)
+ // message will have been queued and status set
+ return status;
+
+ // Get creation time for experiment
+ struct stat64 st;
+ if (dbe_stat (path, &st) == 0)
+ mtime = st.st_mtime;
+
+ // Read the warnings file
+ read_warn_file ();
+
+ // Open the log file
+ read_log_file ();
+ if (status == SUCCESS && last_event // last event is initialized
+ && (last_event - exp_start_time) / 1000000 < tiny_threshold)
+ {
+ // Process "tiny_threshold" (SP_ANALYZER_DISCARD_TINY_EXPERIMENTS)
+ // At this point, we've only processed log.xml.
+ // Note: if an experiment terminated abnormally, last_event will not yet
+ // represent events from clock profiling and other metrics.
+ // Other events will often have timestamps after the last log.xml entry.
+ discardTiny = true;
+ return status;
+ }
+ if (status == FAILURE)
+ {
+ if (logFile->get_status () == ExperimentFile::EF_FAILURE)
+ {
+ Emsg *m = new Emsg (CMSG_FATAL, GTXT ("*** Error: log file in experiment cannot be read"));
+ errorq->append (m);
+ }
+ else if (fetch_errors () == NULL)
+ {
+ if (broken == 1)
+ {
+ Emsg *m = new Emsg (CMSG_FATAL, GTXT ("*** Error: log does not show target starting"));
+ errorq->append (m);
+ }
+ else
+ {
+ Emsg *m = new Emsg (CMSG_FATAL, GTXT ("*** Error: log file in experiment could not be parsed"));
+ errorq->append (m);
+ }
+ }
+ return status;
+ }
+ init_cache ();
+ if (varclock != 0)
+ {
+ StringBuilder sb;
+ sb.sprintf (
+ GTXT ("*** Warning: system has variable clock frequency, which may cause variable execution times and inaccurate conversions of cycle counts into time."));
+ warnq->append (new Emsg (CMSG_WARN, sb));
+ }
+
+ // Read the notes file
+ read_notes_file ();
+ read_labels_file ();
+ read_archives ();
+
+ // The log file shows experiment started
+ read_java_classes_file ();
+
+ read_map_file ();
+
+ // Dyntext file has to be processed after loadobjects file
+ // as we need to be able to map (vaddr,ts) to dynamic functions.
+ read_dyntext_file ();
+
+ // Read the overview file and create samples.
+ // Profiling data hasn't been read yet so we may have
+ // events after the last recorded sample.
+ // We'll create a fake sample to cover all those
+ // events later.
+ read_overview_file ();
+
+ // Check if instruction frequency data is available
+ read_ifreq_file ();
+
+ // Check if OMP data is available
+ read_omp_file ();
+
+ return status;
+}
+
+/* XXX -- update() is a no-op now, but may be needed for auto-update */
+Experiment::Exp_status
+Experiment::update ()
+{
+ return status;
+}
+
+void
+Experiment::append (LoadObject *lo)
+{
+ loadObjs->append (lo);
+ char *obj_name = lo->get_pathname ();
+ char *bname = get_basename (obj_name);
+ loadObjMap->put (obj_name, lo);
+ loadObjMap->put (bname, lo);
+ if (lo->flags & SEG_FLAG_EXE)
+ loadObjMap->put (COMP_EXE_NAME, lo);
+}
+
+void
+Experiment::read_notes_file ()
+{
+ Emsg *m;
+
+ // Open log file:
+ char *fname = dbe_sprintf (NTXT ("%s/%s"), expt_name, SP_NOTES_FILE);
+ FILE *f = fopen (fname, NTXT ("r"));
+ free (fname);
+ if (f == NULL)
+ return;
+ if (!dbeSession->is_interactive ())
+ {
+ m = new Emsg (CMSG_COMMENT, NTXT ("Notes:"));
+ notesq->append (m);
+ }
+
+ while (1)
+ {
+ char str[MAXPATHLEN];
+ char *e = fgets (str, ((int) sizeof (str)) - 1, f);
+ if (e == NULL)
+ {
+ if (!dbeSession->is_interactive ())
+ {
+ m = new Emsg (CMSG_COMMENT,
+ "============================================================");
+ notesq->append (m);
+ }
+ break;
+ }
+ size_t i = strlen (str);
+ if (i > 0 && str[i - 1] == '\n')
+ // remove trailing nl
+ str[i - 1] = 0;
+ m = new Emsg (CMSG_COMMENT, str);
+ notesq->append (m);
+ }
+ (void) fclose (f);
+}
+
+int
+Experiment::save_notes (char* text, bool handle_file)
+{
+ if (handle_file)
+ {
+ FILE *fnotes;
+ char *fname = dbe_sprintf (NTXT ("%s/%s"), expt_name, SP_NOTES_FILE);
+ fnotes = fopen (fname, NTXT ("w"));
+ free (fname);
+ if (fnotes != NULL)
+ {
+ (void) fprintf (fnotes, NTXT ("%s"), text);
+ fclose (fnotes);
+ }
+ else
+ return 1; // Cannot write file
+ }
+ notesq->clear ();
+ Emsg *m = new Emsg (CMSG_COMMENT, text);
+ notesq->append (m);
+
+ return 0;
+}
+
+int
+Experiment::delete_notes (bool handle_file)
+{
+ if (handle_file)
+ {
+ char *fname = dbe_sprintf (NTXT ("%s/%s"), expt_name, SP_NOTES_FILE);
+ if (unlink (fname) != 0)
+ {
+ free (fname);
+ return 1; // Cannot delete file
+ }
+ free (fname);
+ }
+ notesq->clear ();
+ return 0;
+}
+
+int
+Experiment::read_warn_file ()
+{
+ int local_status = SUCCESS;
+
+ ExperimentFile *warnFile = new ExperimentFile (this, SP_WARN_FILE);
+ if (warnFile == NULL)
+ return FAILURE;
+ if (!warnFile->open ())
+ {
+ delete warnFile;
+ return FAILURE;
+ }
+ SAXParserFactory *factory = SAXParserFactory::newInstance ();
+ SAXParser *saxParser = factory->newSAXParser ();
+ DefaultHandler *dh = new ExperimentHandler (this);
+ try
+ {
+ saxParser->parse ((File*) warnFile->fh, dh);
+ }
+ catch (SAXException *e)
+ {
+ // Fatal error in the parser
+ StringBuilder sb;
+ sb.sprintf (NTXT ("%s: %s"), SP_WARN_FILE, e->getMessage ());
+ char *str = sb.toString ();
+ Emsg *m = new Emsg (CMSG_FATAL, str);
+ errorq->append (m);
+ local_status = FAILURE;
+ delete e;
+ }
+ delete warnFile;
+ delete dh;
+ delete saxParser;
+ delete factory;
+
+ return local_status;
+}
+
+int
+Experiment::read_log_file ()
+{
+ if (logFile == NULL)
+ logFile = new ExperimentFile (this, SP_LOG_FILE);
+ if (!logFile->open ())
+ {
+ status = FAILURE;
+ return status;
+ }
+
+ SAXParserFactory *factory = SAXParserFactory::newInstance ();
+ SAXParser *saxParser = factory->newSAXParser ();
+ DefaultHandler *dh = new ExperimentHandler (this);
+ try
+ {
+ saxParser->parse ((File*) logFile->fh, dh);
+ }
+ catch (SAXException *e)
+ {
+ // Fatal error in the parser
+ StringBuilder sb;
+ if (obsolete == 1)
+ sb.sprintf (NTXT ("%s"), e->getMessage ());
+ else
+ sb.sprintf (NTXT ("%s: %s"), SP_LOG_FILE, e->getMessage ());
+ char *str = sb.toString ();
+ Emsg *m = new Emsg (CMSG_FATAL, str);
+ errorq->append (m);
+ status = FAILURE;
+ delete e;
+ }
+ logFile->close ();
+ dbeSession->register_metric (GTXT ("IPC"), GTXT ("Instructions Per Cycle"),
+ NTXT ("insts/cycles"));
+ dbeSession->register_metric (GTXT ("CPI"), GTXT ("Cycles Per Instruction"),
+ NTXT ("cycles/insts"));
+ dbeSession->register_metric (GTXT ("K_IPC"),
+ GTXT ("Kernel Instructions Per Cycle"),
+ NTXT ("K_insts/K_cycles"));
+ dbeSession->register_metric (GTXT ("K_CPI"),
+ GTXT ("Kernel Cycles Per Instruction"),
+ NTXT ("K_cycles/K_insts"));
+
+ delete dh;
+ delete saxParser;
+ delete factory;
+
+ return status;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// class Experiment::ExperimentLabelsHandler
+//
+
+class Experiment::ExperimentLabelsHandler : public DefaultHandler
+{
+public:
+
+ ExperimentLabelsHandler (Experiment *_exp)
+ {
+ exp = _exp;
+ }
+
+ ~ExperimentLabelsHandler () { };
+ void startDocument () { }
+ void endDocument () { }
+ void endElement (char * /*uri*/, char * /*localName*/, char * /*qName*/) { }
+ void characters (char * /*ch*/, int /*start*/, int /*length*/) { }
+ void ignorableWhitespace (char*, int, int) { }
+ void error (SAXParseException * /*e*/) { }
+
+ void startElement (char *uri, char *localName, char *qName, Attributes *attrs);
+
+private:
+
+ inline const char *
+ s2s (const char *s)
+ {
+ return s ? s : "NULL";
+ }
+
+ Experiment *exp;
+ char *hostname;
+ hrtime_t time, tstamp;
+};
+
+void
+Experiment::ExperimentLabelsHandler::startElement (char*, char*, char *qName,
+ Attributes *attrs)
+{
+ DEBUG_CODE if (DEBUG_SAXPARSER) dump_startElement (qName, attrs);
+ if (qName == NULL || strcmp (qName, NTXT ("id")) != 0)
+ return;
+ char *name = NULL, *all_times = NULL, *comment = NULL, *hostName = NULL;
+ long startSec = 0;
+ // long tm_zone = 0;
+ hrtime_t startHrtime = (hrtime_t) 0;
+ long long lbl_ts = 0;
+ int relative = 0;
+ timeval start_tv;
+ start_tv.tv_usec = start_tv.tv_sec = 0;
+ for (int i = 0, sz = attrs ? attrs->getLength () : 0; i < sz; i++)
+ {
+ const char *qn = attrs->getQName (i);
+ const char *vl = attrs->getValue (i);
+ if (strcmp (qn, NTXT ("name")) == 0)
+ name = dbe_xml2str (vl);
+ else if (strcmp (qn, NTXT ("cmd")) == 0)
+ all_times = dbe_xml2str (vl);
+ else if (strcmp (qn, NTXT ("comment")) == 0)
+ comment = dbe_xml2str (vl);
+ else if (strcmp (qn, NTXT ("relative")) == 0)
+ relative = atoi (vl);
+ else if (strcmp (qn, NTXT ("hostname")) == 0)
+ hostName = dbe_xml2str (vl);
+ else if (strcmp (qn, NTXT ("time")) == 0)
+ startSec = atol (vl);
+ else if (strcmp (qn, NTXT ("tstamp")) == 0)
+ startHrtime = parseTStamp (vl);
+ else if (strcmp (qn, NTXT ("lbl_ts")) == 0)
+ {
+ if (*vl == '-')
+ lbl_ts = -parseTStamp (vl + 1);
+ else
+ lbl_ts = parseTStamp (vl);
+ }
+ }
+ if (name == NULL || hostName == NULL || (all_times == NULL && comment == NULL))
+ {
+ free (name);
+ free (hostName);
+ free (all_times);
+ free (comment);
+ return;
+ }
+ UserLabel *lbl = new UserLabel (name);
+ lbl->comment = comment;
+ lbl->hostname = hostName;
+ lbl->start_sec = startSec;
+ lbl->start_hrtime = startHrtime;
+ exp->userLabels->append (lbl);
+ if (all_times)
+ {
+ lbl->all_times = all_times;
+ lbl->start_tv = start_tv;
+ lbl->relative = relative;
+ if (relative == UserLabel::REL_TIME)
+ lbl->atime = lbl_ts;
+ else
+ { // relative == UserLabel::CUR_TIME
+ long long delta = 0;
+ if (exp->hostname && strcmp (lbl->hostname, exp->hostname) == 0)
+ delta = lbl_ts + (lbl->start_hrtime - exp->exp_start_time);
+ else
+ for (int i = 0; i < exp->userLabels->size (); i++)
+ {
+ UserLabel *firstLbl = exp->userLabels->fetch (i);
+ if (strcmp (lbl->hostname, firstLbl->hostname) == 0)
+ {
+ delta = lbl_ts + (lbl->start_hrtime - firstLbl->start_hrtime) +
+ ((long long) (firstLbl->start_sec - exp->start_sec)) * NANOSEC;
+ break;
+ }
+ }
+ lbl->atime = delta > 0 ? delta : 0;
+ }
+ }
+}
+
+static int
+sortUserLabels (const void *a, const void *b)
+{
+ UserLabel *l1 = *((UserLabel **) a);
+ UserLabel *l2 = *((UserLabel **) b);
+ int v = dbe_strcmp (l1->name, l2->name);
+ if (v != 0)
+ return v;
+ if (l1->atime < l2->atime)
+ return -1;
+ else if (l1->atime > l2->atime)
+ return 1;
+ if (l1->id < l2->id)
+ return -1;
+ else if (l1->id > l2->id)
+ return 1;
+ return 0;
+}
+
+static char *
+append_string (char *s, char *str)
+{
+ if (s == NULL)
+ return dbe_strdup (str);
+ char *new_s = dbe_sprintf (NTXT ("%s %s"), s, str);
+ free (s);
+ return new_s;
+}
+
+void
+Experiment::read_labels_file ()
+{
+ ExperimentFile *fp = new ExperimentFile (this, SP_LABELS_FILE);
+ if (!fp->open ())
+ {
+ delete fp;
+ return;
+ }
+ userLabels = new Vector<UserLabel*>();
+ SAXParserFactory *factory = SAXParserFactory::newInstance ();
+ SAXParser *saxParser = factory->newSAXParser ();
+ DefaultHandler *dh = new ExperimentLabelsHandler (this);
+ try
+ {
+ saxParser->parse ((File*) fp->fh, dh);
+ }
+ catch (SAXException *e)
+ {
+ // Fatal error in the parser
+ StringBuilder sb;
+ sb.sprintf (NTXT ("%s: %s"), SP_LABELS_FILE, e->getMessage ());
+ char *str = sb.toString ();
+ Emsg *m = new Emsg (CMSG_FATAL, str);
+ errorq->append (m);
+ delete e;
+ }
+ fp->close ();
+ delete fp;
+ delete dh;
+ delete saxParser;
+ delete factory;
+
+ userLabels->sort (sortUserLabels);
+ UserLabel::dump ("After sortUserLabels:", userLabels);
+ UserLabel *ulbl = NULL;
+ for (int i = 0, sz = userLabels->size (); i < sz; i++)
+ {
+ UserLabel *lbl = userLabels->fetch (i);
+ if (ulbl == NULL)
+ ulbl = new UserLabel (lbl->name);
+ else if (dbe_strcmp (lbl->name, ulbl->name) != 0)
+ { // new Label
+ ulbl->register_user_label (groupId);
+ if (ulbl->expr == NULL)
+ delete ulbl;
+ ulbl = new UserLabel (lbl->name);
+ }
+ if (lbl->all_times)
+ {
+ if (strncmp (lbl->all_times, NTXT ("start"), 5) == 0)
+ {
+ if (!ulbl->start_f)
+ {
+ ulbl->start_f = true;
+ ulbl->timeStart = lbl->atime;
+ }
+ }
+ else
+ { // stop
+ if (!ulbl->start_f)
+ continue;
+ ulbl->all_times = append_string (ulbl->all_times, lbl->all_times);
+ ulbl->stop_f = true;
+ ulbl->timeStop = lbl->atime;
+ ulbl->gen_expr ();
+ }
+ }
+ if (lbl->comment != NULL)
+ ulbl->comment = append_string (ulbl->comment, lbl->comment);
+ }
+ if (ulbl)
+ {
+ ulbl->register_user_label (groupId);
+ if (ulbl->expr == NULL)
+ delete ulbl;
+ }
+ Destroy (userLabels);
+}
+
+void
+Experiment::read_archives ()
+{
+ if (founder_exp)
+ return;
+ char *allocated_str = NULL;
+ char *nm = get_arch_name ();
+ DIR *exp_dir = opendir (nm);
+ if (exp_dir == NULL)
+ {
+ if (founder_exp == NULL)
+ {
+ // Check if the user uses a subexperiment only
+ nm = dbe_sprintf (NTXT ("%s/../%s"), expt_name, SP_ARCHIVES_DIR);
+ exp_dir = opendir (nm);
+ if (exp_dir == NULL)
+ {
+ free (nm);
+ return;
+ }
+ allocated_str = nm;
+ }
+ else
+ return;
+ }
+
+ StringBuilder sb;
+ sb.append (nm);
+ sb.append ('/');
+ int dlen = sb.length ();
+ free (allocated_str);
+ archiveMap = new StringMap<DbeFile *>();
+
+ struct dirent *entry = NULL;
+ while ((entry = readdir (exp_dir)) != NULL)
+ {
+ char *dname = entry->d_name;
+ if (dname[0] == '.'
+ && (dname[1] == '\0' || (dname[1] == '.' && dname[2] == '\0')))
+ // skip links to ./ or ../
+ continue;
+ sb.setLength (dlen);
+ sb.append (dname);
+ char *fnm = sb.toString ();
+ DbeFile *df = new DbeFile (fnm);
+ df->set_location (fnm);
+ df->filetype |= DbeFile::F_FILE;
+ df->inArchive = true;
+ df->experiment = this;
+ archiveMap->put (dname, df);
+ free (fnm);
+ }
+ closedir (exp_dir);
+}
+
+static char *
+gen_file_name (const char *packet_name, const char *src_name)
+{
+ char *fnm, *bname = get_basename (packet_name);
+ if (bname == packet_name)
+ fnm = dbe_strdup (src_name);
+ else
+ fnm = dbe_sprintf ("%.*s%s", (int) (bname - packet_name),
+ packet_name, src_name);
+
+ // convert "java.lang.Object/Integer.java" => "java/lang/Object/Integer.java"
+ bname = get_basename (fnm);
+ for (char *s = fnm; s < bname; s++)
+ if (*s == '.')
+ *s = '/';
+ return fnm;
+}
+
+static char *
+get_jlass_name (const char *nm)
+{
+ // Convert "Ljava/lang/Object;" => "java/lang/Object.class"
+ if (*nm == 'L')
+ {
+ size_t len = strlen (nm);
+ if (nm[len - 1] == ';')
+ return dbe_sprintf ("%.*s.class", (int) (len - 2), nm + 1);
+ }
+ return dbe_strdup (nm);
+}
+
+static char *
+get_jmodule_name (const char *nm)
+{
+ // convert "Ljava/lang/Object;" => "java.lang.Object"
+ if (*nm == 'L')
+ {
+ size_t len = strlen (nm);
+ if (nm[len - 1] == ';')
+ {
+ char *mname = dbe_sprintf (NTXT ("%.*s"), (int) (len - 2), nm + 1);
+ for (char *s = mname; *s; s++)
+ if (*s == '/')
+ *s = '.';
+ return mname;
+ }
+ }
+ return dbe_strdup (nm);
+}
+
+LoadObject *
+Experiment::get_j_lo (const char *className, const char *fileName)
+{
+ char *class_name = get_jlass_name (className);
+ Dprintf (DUMP_JCLASS_READER,
+ "Experiment::get_j_lo: className='%s' class_name='%s' fileName='%s'\n",
+ STR (className), STR (class_name), STR (fileName));
+ LoadObject *lo = loadObjMap->get (class_name);
+ if (lo == NULL)
+ {
+ lo = createLoadObject (class_name, fileName);
+ lo->type = LoadObject::SEG_TEXT;
+ lo->mtime = (time_t) 0;
+ lo->size = 0;
+ lo->set_platform (Java, wsize);
+ lo->dbeFile->filetype |= DbeFile::F_FILE | DbeFile::F_JAVACLASS;
+ append (lo);
+ Dprintf (DUMP_JCLASS_READER,
+ "Experiment::get_j_lo: creates '%s' location='%s'\n",
+ STR (lo->get_name ()), STR (lo->dbeFile->get_location (false)));
+ }
+ free (class_name);
+ return lo;
+}
+
+Module *
+Experiment::get_jclass (const char *className, const char *fileName)
+{
+ LoadObject *lo = get_j_lo (className, NULL);
+ char *mod_name = get_jmodule_name (className);
+ Module *mod = lo->find_module (mod_name);
+ if (mod == NULL)
+ {
+ mod = dbeSession->createClassFile (mod_name);
+ mod->loadobject = lo;
+ if (strcmp (fileName, NTXT ("<Unknown>")) != 0)
+ mod->set_file_name (gen_file_name (lo->get_pathname (), fileName));
+ else
+ mod->set_file_name (dbe_strdup (fileName));
+ lo->append_module (mod);
+ mod_name = NULL;
+ }
+ else if (mod->file_name && (strcmp (mod->file_name, "<Unknown>") == 0)
+ && strcmp (fileName, "<Unknown>") != 0)
+ mod->set_file_name (gen_file_name (lo->get_pathname (), fileName));
+ Dprintf (DUMP_JCLASS_READER,
+ "Experiment::get_jclass: class_name='%s' mod_name='%s' fileName='%s'\n",
+ mod->loadobject->get_pathname (), mod->get_name (), mod->file_name);
+ free (mod_name);
+ return mod;
+}
+
+#define ARCH_STRLEN(s) ( ( strlen(s) + 4 ) & ~0x3 )
+
+int
+Experiment::read_java_classes_file ()
+{
+ char *data_file_name = dbe_sprintf (NTXT ("%s/%s"), expt_name, SP_JCLASSES_FILE);
+ Data_window *dwin = new Data_window (data_file_name);
+ free (data_file_name);
+ if (dwin->not_opened ())
+ {
+ delete dwin;
+ return INCOMPLETE;
+ }
+ dwin->need_swap_endian = need_swap_endian;
+ jmaps = new PRBTree ();
+ jmidHTable = new DbeCacheMap<unsigned long long, JMethod>;
+
+ hrtime_t cur_loaded = 0;
+ Module *cur_mod = NULL;
+ for (int64_t offset = 0;;)
+ {
+ CM_Packet *cpkt = (CM_Packet*) dwin->bind (offset, sizeof (CM_Packet));
+ if (cpkt == NULL)
+ break;
+ uint16_t v16 = (uint16_t) cpkt->tsize;
+ size_t cpktsize = dwin->decode (v16);
+ cpkt = (CM_Packet*) dwin->bind (offset, cpktsize);
+ if ((cpkt == NULL) || (cpktsize == 0))
+ {
+ char *buf = dbe_sprintf (GTXT ("archive file malformed %s"),
+ arch_name);
+ errorq->append (new Emsg (CMSG_ERROR, buf));
+ free (buf);
+ break;
+ }
+ v16 = (uint16_t) cpkt->type;
+ v16 = dwin->decode (v16);
+ switch (v16)
+ {
+ case ARCH_JCLASS:
+ {
+ ARCH_jclass *ajcl = (ARCH_jclass*) cpkt;
+ uint64_t class_id = dwin->decode (ajcl->class_id);
+ char *className = ((char*) ajcl) + sizeof (*ajcl);
+ char *fileName = className + ARCH_STRLEN (className);
+ Dprintf (DUMP_JCLASS_READER,
+ "read_java_classes_file: ARCH_JCLASS(Ox%x)"
+ "class_id=Ox%llx className='%s' fileName='%s' \n",
+ (int) v16, (long long) class_id, className, fileName);
+ cur_mod = NULL;
+ if (*className == 'L')
+ { // Old libcollector generated '[' (one array dimension).
+ cur_mod = get_jclass (className, fileName);
+ cur_loaded = dwin->decode (ajcl->tstamp);
+ jmaps->insert (class_id, cur_loaded, cur_mod);
+ }
+ break;
+ }
+ case ARCH_JCLASS_LOCATION:
+ {
+ ARCH_jclass_location *ajcl = (ARCH_jclass_location *) cpkt;
+ uint64_t class_id = dwin->decode (ajcl->class_id);
+ char *className = ((char*) ajcl) + sizeof (*ajcl);
+ char *fileName = className + ARCH_STRLEN (className);
+ Dprintf (DUMP_JCLASS_READER,
+ "read_java_classes_file: ARCH_JCLASS_LOCATION(Ox%x)"
+ "class_id=Ox%llx className='%s' fileName='%s' \n",
+ (int) v16, (long long) class_id, className, fileName);
+ get_j_lo (className, fileName);
+ break;
+ }
+ case ARCH_JMETHOD:
+ {
+ if (cur_mod == NULL)
+ break;
+ ARCH_jmethod *ajmt = (ARCH_jmethod*) cpkt;
+ uint64_t method_id = dwin->decode (ajmt->method_id);
+ char *s_name = ((char*) ajmt) + sizeof (*ajmt);
+ char *s_signature = s_name + ARCH_STRLEN (s_name);
+ char *fullname = dbe_sprintf ("%s.%s", cur_mod->get_name (), s_name);
+ Dprintf (DUMP_JCLASS_READER,
+ "read_java_classes_file: ARCH_JMETHOD(Ox%x) "
+ "method_id=Ox%llx name='%s' signature='%s' fullname='%s'\n",
+ (int) v16, (long long) method_id, s_name,
+ s_signature, fullname);
+ JMethod *jmthd = cur_mod->find_jmethod (fullname, s_signature);
+ if (jmthd == NULL)
+ {
+ jmthd = dbeSession->createJMethod ();
+ jmthd->size = (unsigned) - 1; // unknown until later (maybe)
+ jmthd->module = cur_mod;
+ jmthd->set_signature (s_signature);
+ jmthd->set_name (fullname);
+ cur_mod->functions->append (jmthd);
+ cur_mod->loadobject->functions->append (jmthd);
+ Dprintf (DUMP_JCLASS_READER,
+ "read_java_classes_file: ARCH_JMETHOD CREATE fullname=%s\n",
+ fullname);
+ }
+ jmaps->insert (method_id, cur_loaded, jmthd);
+ free (fullname);
+ break;
+ }
+ default:
+ Dprintf (DUMP_JCLASS_READER,
+ "read_java_classes_file: type=Ox%x (%d) cpktsize=%d\n",
+ (int) v16, (int) v16, (int) cpktsize);
+ break; // ignore unknown packets
+ }
+ offset += cpktsize;
+ }
+ delete dwin;
+ return SUCCESS;
+}
+
+void
+Experiment::read_map_file ()
+{
+ ExperimentFile *mapFile = new ExperimentFile (this, SP_MAP_FILE);
+ if (!mapFile->open ())
+ {
+ delete mapFile;
+ return;
+ }
+
+ SAXParserFactory *factory = SAXParserFactory::newInstance ();
+ SAXParser *saxParser = factory->newSAXParser ();
+ DefaultHandler *dh = new ExperimentHandler (this);
+ try
+ {
+ saxParser->parse ((File*) mapFile->fh, dh);
+ }
+ catch (SAXException *e)
+ {
+ // Fatal error in the parser
+ StringBuilder sb;
+ sb.sprintf (NTXT ("%s: %s"), SP_MAP_FILE, e->getMessage ());
+ char *str = sb.toString ();
+ Emsg *m = new Emsg (CMSG_FATAL, str);
+ errorq->append (m);
+ status = FAILURE;
+ free (str);
+ delete e;
+ }
+ delete mapFile;
+ delete dh;
+ delete saxParser;
+ delete factory;
+
+ for (int i = 0, sz = mrecs ? mrecs->size () : 0; i < sz; i++)
+ {
+ MapRecord *mrec = mrecs->fetch (i);
+ SegMem *smem, *sm_lo, *sm_hi;
+ switch (mrec->kind)
+ {
+ case MapRecord::LOAD:
+ smem = new SegMem;
+ smem->base = mrec->base;
+ smem->size = mrec->size;
+ smem->load_time = mrec->ts;
+ smem->unload_time = MAX_TIME;
+ smem->obj = mrec->obj;
+ smem->set_file_offset (mrec->foff);
+ seg_items->append (smem); // add to the master list
+
+ // Check if the new segment overlaps other active segments
+ sm_lo = (SegMem*) maps->locate (smem->base, smem->load_time);
+ if (sm_lo && sm_lo->base + sm_lo->size > smem->base)
+ {
+ // check to see if it is a duplicate record: same address and size, and
+ if ((smem->base == sm_lo->base) && (smem->size == sm_lo->size))
+ {
+ // addresses and sizes match, check name
+ if (strstr (smem->obj->get_name (), sm_lo->obj->get_name ()) != NULL
+ || strstr (sm_lo->obj->get_name (), smem->obj->get_name ()) != NULL)
+ // this is a duplicate; just move on the the next map record
+ continue;
+ fprintf (stderr,
+ GTXT ("*** Warning: Segment `%s' loaded with same address, size as `%s' [0x%llx-0x%llx]\n"),
+ smem->obj->get_name (), sm_lo->obj->get_name (),
+ sm_lo->base, sm_lo->base + sm_lo->size);
+ }
+
+ // Not a duplicate; implicitly unload the old one
+ // Note: implicit unloading causes high <Unknown>
+ // when such overlapping is bogus
+ StringBuilder sb;
+ sb.sprintf (GTXT ("*** Warning: Segment %s [0x%llx-0x%llx] overlaps %s [0x%llx-0x%llx], which has been implicitly unloaded"),
+ smem->obj->get_name (), smem->base, smem->base + smem->size,
+ sm_lo->obj->get_name (), sm_lo->base, sm_lo->base + sm_lo->size);
+ warnq->append (new Emsg (CMSG_WARN, sb));
+ }
+
+ // now look for other segments with which this might overlap
+ sm_hi = (SegMem*) maps->locate_up (smem->base, smem->load_time);
+ while (sm_hi && sm_hi->base < smem->base + smem->size)
+ {
+
+ // Note: implicit unloading causes high <Unknown> when such overlapping is bogus
+ // maps->remove( sm_hi->base, smem->load_time );
+ StringBuilder sb;
+ sb.sprintf (GTXT ("*** Warning: Segment %s [0x%llx-0x%llx] overlaps %s [0x%llx-0x%llx], which has been implicitly unloaded"),
+ smem->obj->get_name (), smem->base,
+ smem->base + smem->size, sm_hi->obj->get_name (),
+ sm_hi->base, sm_hi->base + sm_hi->size);
+ warnq->append (new Emsg (CMSG_WARN, sb));
+ sm_hi = (SegMem*) maps->locate_up (sm_hi->base + sm_hi->size,
+ smem->load_time);
+ }
+
+ maps->insert (smem->base, smem->load_time, smem);
+ break;
+ case MapRecord::UNLOAD:
+ smem = (SegMem*) maps->locate (mrec->base, mrec->ts);
+ if (smem && smem->base == mrec->base)
+ {
+ smem->unload_time = mrec->ts;
+ maps->remove (mrec->base, mrec->ts);
+ }
+ break;
+ }
+ }
+ mrecs->destroy ();
+
+ // See if there are comments or warnings for a load object;
+ // if so, queue them to Experiment
+ for (long i = 0, sz = loadObjs ? loadObjs->size () : 0; i < sz; i++)
+ {
+ LoadObject *lo = loadObjs->get (i);
+ for (Emsg *m = lo->fetch_warnings (); m; m = m->next)
+ warnq->append (m->get_warn (), m->get_msg ());
+ for (Emsg *m = lo->fetch_comments (); m; m = m->next)
+ commentq->append (m->get_warn (), m->get_msg ());
+ }
+}
+
+void
+Experiment::read_frameinfo_file ()
+{
+ init_cache ();
+ char *base_name = get_basename (expt_name);
+ char *msg = dbe_sprintf (GTXT ("Loading CallStack Data: %s"), base_name);
+ read_data_file ("data." SP_FRINFO_FILE, msg);
+ free (msg);
+ frmpckts->sort (frUidCmp);
+ uidnodes->sort (uidNodeCmp);
+}
+
+void
+Experiment::read_omp_preg ()
+{
+ // Parallel region descriptions
+ DataDescriptor *pregDdscr = getDataDescriptor (DATA_OMP4);
+ if (pregDdscr == NULL)
+ return;
+ DataView *pregData = pregDdscr->createView ();
+ pregData->sort (PROP_CPRID); // omptrace PROP_CPRID
+
+ // OpenMP enter parreg events
+ DataDescriptor *dDscr = getDataDescriptor (DATA_OMP2);
+ if (dDscr == NULL || dDscr->getSize () == 0)
+ {
+ delete pregData;
+ return;
+ }
+
+ char *idxname = NTXT ("OMP_preg");
+ delete dbeSession->indxobj_define (idxname, GTXT ("OpenMP Parallel Region"),
+ NTXT ("CPRID"), NULL, NULL);
+ int idxtype = dbeSession->findIndexSpaceByName (idxname);
+ if (idxtype < 0)
+ {
+ delete pregData;
+ return;
+ }
+ ompavail = true;
+
+ // Pre-create parallel region with id == 0
+ Histable *preg0 = dbeSession->createIndexObject (idxtype, (int64_t) 0);
+ preg0->set_name (dbe_strdup (GTXT ("Implicit OpenMP Parallel Region")));
+
+ // Take care of the progress bar
+ char *msg = dbe_sprintf (GTXT ("Processing OpenMP Parallel Region Data: %s"),
+ get_basename (expt_name));
+ theApplication->set_progress (0, msg);
+ free (msg);
+ long deltaReport = 1000;
+ long nextReport = 0;
+ long errors_found = 0;
+ Vector<Histable*> pregs;
+
+ long size = dDscr->getSize ();
+ for (long i = 0; i < size; ++i)
+ {
+ if (i == nextReport)
+ {
+ int percent = (int) (i * 100 / size);
+ if (percent > 0)
+ theApplication->set_progress (percent, NULL);
+ nextReport += deltaReport;
+ }
+
+ uint32_t thrid = dDscr->getIntValue (PROP_THRID, i);
+ hrtime_t tstamp = dDscr->getLongValue (PROP_TSTAMP, i);
+ uint64_t cprid = dDscr->getLongValue (PROP_CPRID, i); // omptrace CPRID
+ mapPRid->put (thrid, tstamp, cprid);
+
+ pregs.reset ();
+ /*
+ * We will use 2 pointers to make sure there is no loop.
+ * First pointer "curpreg" goes to the next element,
+ * second pointer "curpreg_loop_control" goes to the next->next element.
+ * If these pointers have the same value - there is a loop.
+ */
+ uint64_t curpreg_loop_control = cprid;
+ Datum tval_loop_control;
+ if (curpreg_loop_control != 0)
+ {
+ tval_loop_control.setUINT64 (curpreg_loop_control);
+ long idx = pregData->getIdxByVals (&tval_loop_control, DataView::REL_EQ);
+ if (idx < 0)
+ curpreg_loop_control = 0;
+ else
+ curpreg_loop_control = pregData->getLongValue (PROP_PPRID, idx);
+ }
+ for (uint64_t curpreg = cprid; curpreg != 0;)
+ {
+ Histable *val = NULL;
+ Datum tval;
+ tval.setUINT64 (curpreg);
+ long idx = pregData->getIdxByVals (&tval, DataView::REL_EQ);
+ if (idx < 0)
+ break;
+ /*
+ * Check if there is a loop
+ */
+ if (0 != curpreg_loop_control)
+ {
+ if (curpreg == curpreg_loop_control)
+ {
+ errors_found++;
+ if (1 == errors_found)
+ {
+ Emsg *m = new Emsg (CMSG_WARN, GTXT ("*** Warning: circular links in OMP regions; data may not be correct."));
+ warnq->append (m);
+ }
+ break;
+ }
+ }
+ uint64_t pragmapc = pregData->getLongValue (PROP_PRPC, idx);
+ DbeInstr *instr = map_Vaddr_to_PC (pragmapc, tstamp);
+ if (instr == NULL)
+ {
+ break;
+ }
+ val = instr;
+ DbeLine *dbeline = (DbeLine*) instr->convertto (Histable::LINE);
+ if (dbeline->lineno > 0)
+ {
+ if (instr->func->usrfunc)
+ dbeline = dbeline->sourceFile->find_dbeline
+ (instr->func->usrfunc, dbeline->lineno);
+ dbeline->set_flag (DbeLine::OMPPRAGMA);
+ val = dbeline;
+ }
+ val = dbeSession->createIndexObject (idxtype, val);
+ pregs.append (val);
+
+ curpreg = pregData->getLongValue (PROP_PPRID, idx);
+ /*
+ * Update curpreg_loop_control
+ */
+ if (0 != curpreg_loop_control)
+ {
+ tval_loop_control.setUINT64 (curpreg_loop_control);
+ idx = pregData->getIdxByVals
+ (&tval_loop_control, DataView::REL_EQ);
+ if (idx < 0)
+ curpreg_loop_control = 0;
+ else
+ {
+ curpreg_loop_control = pregData->getLongValue
+ (PROP_PPRID, idx);
+ tval_loop_control.setUINT64 (curpreg_loop_control);
+ idx = pregData->getIdxByVals
+ (&tval_loop_control, DataView::REL_EQ);
+ if (idx < 0)
+ curpreg_loop_control = 0;
+ else
+ curpreg_loop_control = pregData->getLongValue
+ (PROP_PPRID, idx);
+ }
+ }
+ }
+ pregs.append (preg0);
+ void *prstack = cstack->add_stack (&pregs);
+ mapPReg->put (thrid, tstamp, prstack);
+ }
+ theApplication->set_progress (0, NTXT (""));
+ delete pregData;
+}
+
+void
+Experiment::read_omp_task ()
+{
+ // Task description
+ DataDescriptor *taskDataDdscr = getDataDescriptor (DATA_OMP5);
+ if (taskDataDdscr == NULL)
+ return;
+
+ //7035272: previously, DataView was global; now it's local...is this OK?
+ DataView *taskData = taskDataDdscr->createView ();
+ taskData->sort (PROP_TSKID); // omptrace PROP_TSKID
+
+ // OpenMP enter task events
+ DataDescriptor *dDscr = getDataDescriptor (DATA_OMP3);
+ if (dDscr == NULL || dDscr->getSize () == 0)
+ {
+ delete taskData;
+ return;
+ }
+
+ char *idxname = NTXT ("OMP_task");
+ // delete a possible error message. Ugly.
+ delete dbeSession->indxobj_define (idxname, GTXT ("OpenMP Task"), NTXT ("TSKID"), NULL, NULL);
+ int idxtype = dbeSession->findIndexSpaceByName (idxname);
+ if (idxtype < 0)
+ {
+ delete taskData;
+ return;
+ }
+ ompavail = true;
+
+ // Pre-create task with id == 0
+ Histable *task0 = dbeSession->createIndexObject (idxtype, (int64_t) 0);
+ task0->set_name (dbe_strdup (GTXT ("OpenMP Task from Implicit Parallel Region")));
+
+ // Take care of the progress bar
+ char *msg = dbe_sprintf (GTXT ("Processing OpenMP Task Data: %s"), get_basename (expt_name));
+ theApplication->set_progress (0, msg);
+ free (msg);
+ long deltaReport = 1000;
+ long nextReport = 0;
+
+ Vector<Histable*> tasks;
+ long size = dDscr->getSize ();
+ long errors_found = 0;
+ for (long i = 0; i < size; ++i)
+ {
+ if (i == nextReport)
+ {
+ int percent = (int) (i * 100 / size);
+ if (percent > 0)
+ theApplication->set_progress (percent, NULL);
+ nextReport += deltaReport;
+ }
+
+ uint32_t thrid = dDscr->getIntValue (PROP_THRID, i);
+ hrtime_t tstamp = dDscr->getLongValue (PROP_TSTAMP, i);
+ uint64_t tskid = dDscr->getLongValue (PROP_TSKID, i); //omptrace TSKID
+ tasks.reset ();
+ /*
+ * We will use 2 pointers to make sure there is no loop.
+ * First pointer "curtsk" goes to the next element,
+ * second pointer "curtsk_loop_control" goes to the next->next element.
+ * If these pointers have the same value - there is a loop.
+ */
+ uint64_t curtsk_loop_control = tskid;
+ Datum tval_loop_control;
+ if (curtsk_loop_control != 0)
+ {
+ tval_loop_control.setUINT64 (curtsk_loop_control);
+ long idx = taskData->getIdxByVals (&tval_loop_control, DataView::REL_EQ);
+ if (idx < 0)
+ curtsk_loop_control = 0;
+ else
+ curtsk_loop_control = taskData->getLongValue (PROP_PTSKID, idx);
+ }
+ for (uint64_t curtsk = tskid; curtsk != 0;)
+ {
+ Histable *val = NULL;
+
+ Datum tval;
+ tval.setUINT64 (curtsk);
+ long idx = taskData->getIdxByVals (&tval, DataView::REL_EQ);
+ if (idx < 0)
+ break;
+ /*
+ * Check if there is a loop
+ */
+ if (0 != curtsk_loop_control)
+ {
+ if (curtsk == curtsk_loop_control)
+ {
+ errors_found++;
+ if (1 == errors_found)
+ {
+ Emsg *m = new Emsg (CMSG_WARN, GTXT ("*** Warning: circular links in OMP tasks; data may not be correct."));
+ warnq->append (m);
+ }
+ break;
+ }
+ }
+ uint64_t pragmapc = taskData->getLongValue (PROP_PRPC, idx);
+ DbeInstr *instr = map_Vaddr_to_PC (pragmapc, tstamp);
+ if (instr == NULL)
+ break;
+ val = instr;
+ DbeLine *dbeline = (DbeLine*) instr->convertto (Histable::LINE);
+ if (dbeline->lineno > 0)
+ {
+ if (instr->func->usrfunc)
+ dbeline = dbeline->sourceFile->find_dbeline
+ (instr->func->usrfunc, dbeline->lineno);
+ dbeline->set_flag (DbeLine::OMPPRAGMA);
+ val = dbeline;
+ }
+ val = dbeSession->createIndexObject (idxtype, val);
+ tasks.append (val);
+
+ curtsk = taskData->getLongValue (PROP_PTSKID, idx);
+ /*
+ * Update curtsk_loop_control
+ */
+ if (0 != curtsk_loop_control)
+ {
+ tval_loop_control.setUINT64 (curtsk_loop_control);
+ idx = taskData->getIdxByVals (&tval_loop_control, DataView::REL_EQ);
+ if (idx < 0)
+ curtsk_loop_control = 0;
+ else
+ {
+ curtsk_loop_control = taskData->getLongValue (PROP_PTSKID, idx);
+ tval_loop_control.setUINT64 (curtsk_loop_control);
+ idx = taskData->getIdxByVals (&tval_loop_control,
+ DataView::REL_EQ);
+ if (idx < 0)
+ curtsk_loop_control = 0;
+ else
+ curtsk_loop_control = taskData->getLongValue (PROP_PTSKID,
+ idx);
+ }
+ }
+ }
+ tasks.append (task0);
+ void *tskstack = cstack->add_stack (&tasks);
+ mapTask->put (thrid, tstamp, tskstack);
+ }
+ theApplication->set_progress (0, NTXT (""));
+ delete taskData;
+}
+
+void
+Experiment::read_omp_file ()
+{
+ // DATA_OMP2 table is common between OpenMP 2.5 and 3.0 profiling
+ DataDescriptor *dDscr = getDataDescriptor (DATA_OMP2);
+ if (dDscr == NULL)
+ return;
+ if (dDscr->getSize () == 0)
+ {
+ char *base_name = get_basename (expt_name);
+ char *msg = dbe_sprintf (GTXT ("Loading OpenMP Data: %s"), base_name);
+ read_data_file (SP_OMPTRACE_FILE, msg);
+ free (msg);
+
+ // OpenMP fork events
+ dDscr = getDataDescriptor (DATA_OMP);
+ long sz = dDscr->getSize ();
+ if (sz > 0)
+ {
+ // progress bar
+ msg = dbe_sprintf (GTXT ("Processing OpenMP Parallel Region Data: %s"),
+ base_name);
+ theApplication->set_progress (0, msg);
+ free (msg);
+ long deltaReport = 5000;
+ long nextReport = 0;
+ for (int i = 0; i < sz; ++i)
+ {
+ if (i == nextReport)
+ {
+ int percent = (int) (i * 100 / sz);
+ if (percent > 0)
+ theApplication->set_progress (percent, NULL);
+ nextReport += deltaReport;
+ }
+ uint32_t thrid = dDscr->getIntValue (PROP_THRID, i);
+ hrtime_t tstamp = dDscr->getLongValue (PROP_TSTAMP, i);
+ uint64_t cprid = dDscr->getLongValue (PROP_CPRID, i); //omptrace
+ mapPRid->put (thrid, tstamp, cprid);
+ }
+ theApplication->set_progress (0, NTXT (""));
+
+ ompavail = true;
+ openMPdata = dDscr->createView ();
+ openMPdata->sort (PROP_CPRID); // omptrace PROP_CPRID
+
+ // thread enters parreg events
+ dDscr = getDataDescriptor (DATA_OMP2);
+ sz = dDscr->getSize ();
+
+ // progress bar
+ msg = dbe_sprintf (GTXT ("Processing OpenMP Parallel Region Data: %s"),
+ base_name);
+ theApplication->set_progress (0, msg);
+ free (msg);
+ deltaReport = 5000;
+ nextReport = 0;
+
+ for (int i = 0; i < sz; ++i)
+ {
+ if (i == nextReport)
+ {
+ int percent = (int) (i * 100 / sz);
+ if (percent > 0)
+ theApplication->set_progress (percent, NULL);
+ nextReport += deltaReport;
+ }
+ uint32_t thrid = dDscr->getIntValue (PROP_THRID, i);
+ hrtime_t tstamp = dDscr->getLongValue (PROP_TSTAMP, i);
+ uint64_t cprid = dDscr->getLongValue (PROP_CPRID, i); //omptrace
+ mapPRid->put (thrid, tstamp, cprid);
+ }
+ theApplication->set_progress (0, NTXT (""));
+ }
+ else
+ {
+ read_omp_preg ();
+ read_omp_task ();
+ }
+ if (ompavail && coll_params.profile_mode)
+ {
+ dbeSession->status_ompavail = 1;
+ register_metric (Metric::OMP_WORK);
+ register_metric (Metric::OMP_WAIT);
+ register_metric (Metric::OMP_OVHD);
+ if (coll_params.lms_magic_id == LMS_MAGIC_ID_SOLARIS)
+ register_metric (Metric::OMP_MASTER_THREAD);
+ }
+ }
+}
+
+void
+Experiment::read_ifreq_file ()
+{
+ char *fname = dbe_sprintf (NTXT ("%s/%s"), expt_name, SP_IFREQ_FILE);
+ FILE *f = fopen (fname, NTXT ("r"));
+ free (fname);
+ if (f == NULL)
+ {
+ ifreqavail = false;
+ return;
+ }
+ ifreqavail = true;
+ ifreqq = new Emsgqueue (NTXT ("ifreqq"));
+
+ while (1)
+ {
+ Emsg *m;
+ char str[MAXPATHLEN];
+ char *e = fgets (str, ((int) sizeof (str)) - 1, f);
+ if (e == NULL)
+ {
+ // end the list from the experiment
+ m = new Emsg (CMSG_COMMENT,
+ GTXT ("============================================================"));
+ ifreqq->append (m);
+ break;
+ }
+ // get the string
+ size_t i = strlen (str);
+ if (i > 0 && str[i - 1] == '\n')
+ // remove trailing nl
+ str[i - 1] = 0;
+ // and append it
+ m = new Emsg (CMSG_COMMENT, str);
+ ifreqq->append (m);
+ }
+ (void) fclose (f);
+}
+
+Experiment *
+Experiment::getBaseFounder ()
+{
+ if (baseFounder)
+ return baseFounder;
+ Experiment *founder = this;
+ Experiment *parent = founder->founder_exp;
+ while (parent)
+ {
+ founder = parent;
+ parent = founder->founder_exp;
+ }
+ baseFounder = founder;
+ return baseFounder;
+}
+
+hrtime_t
+Experiment::getRelativeStartTime ()
+{
+ if (exp_rel_start_time_set)
+ return exp_rel_start_time;
+ Experiment *founder = getBaseFounder ();
+ hrtime_t child_start = this->getStartTime ();
+ hrtime_t founder_start = founder->getStartTime ();
+ exp_rel_start_time = child_start - founder_start;
+ if (child_start == 0 && founder_start)
+ exp_rel_start_time = 0; // when descendents have incomplete log.xml
+ exp_rel_start_time_set = true;
+ return exp_rel_start_time;
+}
+
+DataDescriptor *
+Experiment::get_raw_events (int data_id)
+{
+ DataDescriptor *dDscr;
+ switch (data_id)
+ {
+ case DATA_CLOCK:
+ dDscr = get_profile_events ();
+ break;
+ case DATA_SYNCH:
+ dDscr = get_sync_events ();
+ break;
+ case DATA_HWC:
+ dDscr = get_hwc_events ();
+ break;
+ case DATA_HEAP:
+ dDscr = get_heap_events ();
+ break;
+ case DATA_HEAPSZ:
+ dDscr = get_heapsz_events ();
+ break;
+ case DATA_IOTRACE:
+ dDscr = get_iotrace_events ();
+ break;
+ case DATA_RACE:
+ dDscr = get_race_events ();
+ break;
+ case DATA_DLCK:
+ dDscr = get_deadlock_events ();
+ break;
+ case DATA_SAMPLE:
+ dDscr = get_sample_events ();
+ break;
+ case DATA_GCEVENT:
+ dDscr = get_gc_events ();
+ break;
+ default:
+ dDscr = NULL;
+ break;
+ }
+ return dDscr;
+}
+
+int
+Experiment::base_data_id (int data_id)
+{
+ switch (data_id)
+ {
+ case DATA_HEAPSZ:
+ return DATA_HEAP; // DATA_HEAPSZ DataView is based on DATA_HEAP's DataView
+ default:
+ break;
+ }
+ return data_id;
+}
+
+DataView *
+Experiment::create_derived_data_view (int data_id, DataView *dview)
+{
+ // dview contains filtered packets
+ switch (data_id)
+ {
+ case DATA_HEAPSZ:
+ return create_heapsz_data_view (dview);
+ default:
+ break;
+ }
+ return NULL;
+}
+
+DataDescriptor *
+Experiment::get_profile_events ()
+{
+ DataDescriptor *dDscr = getDataDescriptor (DATA_CLOCK);
+ if (dDscr == NULL)
+ return NULL;
+ if (dDscr->getSize () == 0)
+ {
+ char *base_name = get_basename (expt_name);
+ char *msg = dbe_sprintf (GTXT ("Loading Profile Data: %s"), base_name);
+ read_data_file (SP_PROFILE_FILE, msg);
+ free (msg);
+ add_evt_time_to_profile_events (dDscr);
+ resolve_frame_info (dDscr);
+ }
+ else if (!dDscr->isResolveFrInfoDone ())
+ resolve_frame_info (dDscr);
+ return dDscr;
+}
+
+void
+Experiment::add_evt_time_to_profile_events (DataDescriptor *dDscr)
+{
+ if (coll_params.lms_magic_id != LMS_MAGIC_ID_SOLARIS)
+ return;
+
+ DataView *dview = dDscr->createView ();
+ dview->sort (PROP_THRID, PROP_TSTAMP);
+
+ // add PROP_EVT_TIME
+ PropDescr* tmp_propDscr = new PropDescr (PROP_EVT_TIME, "EVT_TIME");
+ tmp_propDscr->uname = dbe_strdup (GTXT ("Event duration"));
+ tmp_propDscr->vtype = TYPE_INT64;
+ dDscr->addProperty (tmp_propDscr);
+
+ long sz = dview->getSize ();
+ long long ptimer_usec = get_params ()->ptimer_usec;
+ for (long i = 0; i < sz; i++)
+ {
+ int next_sample;
+ int jj;
+ {
+ hrtime_t this_tstamp = dview->getLongValue (PROP_TSTAMP, i);
+ long this_thrid = dview->getLongValue (PROP_THRID, i);
+ for (jj = i + 1; jj < sz; jj++)
+ {
+ hrtime_t tmp_tstamp = dview->getLongValue (PROP_TSTAMP, jj);
+ if (tmp_tstamp != this_tstamp)
+ break;
+ long tmp_thrid = dview->getLongValue (PROP_THRID, jj);
+ if (tmp_thrid != this_thrid)
+ break;
+ }
+ next_sample = jj;
+ }
+
+ long nticks = 0;
+ for (jj = i; jj < next_sample; jj++)
+ nticks += dview->getLongValue (PROP_NTICK, jj);
+ if (nticks <= 1)
+ continue; // no duration
+
+ nticks--;
+ hrtime_t duration = ptimer_usec * 1000LL * nticks; // nanoseconds
+ for (jj = i; jj < next_sample; jj++)
+ dview->setValue (PROP_EVT_TIME, jj, duration);
+ i = jj - 1;
+ }
+ delete dview;
+}
+
+DataDescriptor *
+Experiment::get_sync_events ()
+{
+ DataDescriptor *dDscr = getDataDescriptor (DATA_SYNCH);
+ if (dDscr == NULL)
+ return NULL;
+ if (dDscr->getSize () > 0)
+ return dDscr;
+
+ // fetch data
+ {
+ char *base_name = get_basename (expt_name);
+ char *msg = dbe_sprintf (GTXT ("Loading Synctrace Data: %s"), base_name);
+ read_data_file (SP_SYNCTRACE_FILE, msg);
+ free (msg);
+ resolve_frame_info (dDscr);
+ }
+
+ // check for PROP_EVT_TIME
+ PropDescr *tmp_propDscr = dDscr->getProp (PROP_EVT_TIME);
+ if (tmp_propDscr)
+ return dDscr;
+
+ // add PROP_EVT_TIME
+ tmp_propDscr = new PropDescr (PROP_EVT_TIME, "EVT_TIME");
+ tmp_propDscr->uname = dbe_strdup (GTXT ("Event duration"));
+ tmp_propDscr->vtype = TYPE_INT64;
+ dDscr->addProperty (tmp_propDscr);
+
+ long sz = dDscr->getSize ();
+ for (long i = 0; i < sz; i++)
+ {
+ uint64_t event_duration = dDscr->getLongValue (PROP_TSTAMP, i);
+ event_duration -= dDscr->getLongValue (PROP_SRQST, i);
+ dDscr->setValue (PROP_EVT_TIME, i, event_duration);
+ }
+ return dDscr;
+}
+
+DataDescriptor *
+Experiment::get_hwc_events ()
+{
+ DataDescriptor *dDscr = getDataDescriptor (DATA_HWC);
+ if (dDscr == NULL)
+ return NULL;
+ if (dDscr->getSize () == 0)
+ {
+ char *base_name = get_basename (expt_name);
+ char *msg = dbe_sprintf (GTXT ("Loading HW Profile Data: %s"), base_name);
+
+ // clear HWC event stats
+ dsevents = 0;
+ dsnoxhwcevents = 0;
+ read_data_file (SP_HWCNTR_FILE, msg);
+ free (msg);
+ resolve_frame_info (dDscr);
+
+ // describe the HW counters in PropDescr
+ PropDescr *prop = dDscr->getProp (PROP_HWCTAG);
+ if (prop)
+ {
+ Collection_params *cparam = get_params ();
+ if (cparam->hw_mode != 0)
+ for (int aux = 0; aux < MAX_HWCOUNT; aux++)
+ if (cparam->hw_aux_name[aux])
+ {
+ const char* cmdname = cparam->hw_aux_name[aux];
+ const char* uname = cparam->hw_username[aux];
+ prop->addState (aux, cmdname, uname);
+ }
+ }
+ else
+ assert (0);
+
+ double dserrrate = 100.0 * ((double) dsnoxhwcevents) / ((double) dsevents);
+ if ((dsevents > 0) && (dserrrate > 10.0))
+ {
+ // warn the user that rate is high
+ StringBuilder sb;
+ if (dbeSession->check_ignore_no_xhwcprof ())
+ sb.sprintf (
+ GTXT ("Warning: experiment %s has %.1f%%%% (%lld of %lld) dataspace events that were accepted\n without verification; data may be incorrect or misleading\n recompile with -xhwcprof and rerecord to get better data\n"),
+ base_name, dserrrate, (long long) dsnoxhwcevents,
+ (long long) dsevents);
+ else
+ sb.sprintf (
+ GTXT ("Warning: experiment %s has %.1f%%%% (%lld of %lld) dataspace events that could not be verified\n recompile with -xhwcprof and rerecord to get better data\n"),
+ base_name, dserrrate, (long long) dsnoxhwcevents,
+ (long long) dsevents);
+ errorq->append (new Emsg (CMSG_WARN, sb));
+ }
+
+ // see if we've scanned the data
+ if (hwc_scanned == 0)
+ {
+ // no, scan the packets to see how many are bogus, or represent lost interrupts
+ long hwc_cnt = 0;
+
+ // loop over the packets, counting the bad ones
+ if (hwc_bogus != 0 || hwc_lost_int != 0)
+ {
+ // hwc counter data had bogus packets and/or packets reflecting lost interrupts
+ double bogus_rate = 100. * (double) hwc_bogus / (double) hwc_cnt;
+ if (bogus_rate > 5.)
+ {
+ StringBuilder sb;
+ sb.sprintf (
+ GTXT ("WARNING: Too many invalid HW counter profile events (%ld/%ld = %3.2f%%) in experiment %d (`%s'); data may be unreliable"),
+ (long) hwc_bogus, (long) hwc_cnt, bogus_rate,
+ (int) userExpId, base_name);
+ Emsg *m = new Emsg (CMSG_WARN, sb);
+ warnq->append (m);
+ }
+ hwc_scanned = 1;
+ }
+ }
+ }
+ return dDscr;
+}
+
+DataDescriptor *
+Experiment::get_iotrace_events ()
+{
+ DataDescriptor *dDscr = getDataDescriptor (DATA_IOTRACE);
+ if (dDscr == NULL)
+ return NULL;
+
+ if (dDscr->getSize () > 0)
+ return dDscr;
+
+ char *base_name = get_basename (expt_name);
+ char *msg = dbe_sprintf (GTXT ("Loading IO Trace Data: %s"), base_name);
+ read_data_file (SP_IOTRACE_FILE, msg);
+ free (msg);
+
+ if (dDscr->getSize () == 0)
+ return dDscr;
+ resolve_frame_info (dDscr);
+
+ // check for PROP_EVT_TIME
+ PropDescr *tmp_propDscr = dDscr->getProp (PROP_EVT_TIME);
+ if (tmp_propDscr)
+ return dDscr;
+
+ // add PROP_EVT_TIME
+ tmp_propDscr = new PropDescr (PROP_EVT_TIME, "EVT_TIME");
+ tmp_propDscr->uname = dbe_strdup (GTXT ("Event duration"));
+ tmp_propDscr->vtype = TYPE_INT64;
+ dDscr->addProperty (tmp_propDscr);
+
+ // add PROP_IOVFD
+ tmp_propDscr = new PropDescr (PROP_IOVFD, "IOVFD");
+ tmp_propDscr->uname = dbe_strdup (GTXT ("Virtual File Descriptor"));
+ tmp_propDscr->vtype = TYPE_INT64;
+ dDscr->addProperty (tmp_propDscr);
+
+ delete fDataMap;
+ fDataMap = new DefaultMap<int64_t, FileData*>;
+
+ delete vFdMap;
+ vFdMap = new DefaultMap<int, int64_t>;
+
+ static int64_t virtualFd = 0;
+
+ FileData *fData;
+ virtualFd += 10;
+ fData = fDataMap->get (VIRTUAL_FD_STDIN);
+ if (fData == NULL)
+ {
+ fData = new FileData (STDIN_FILENAME);
+ fData->setVirtualFd (VIRTUAL_FD_STDIN);
+ fData->id = VIRTUAL_FD_STDIN;
+ fData->setFileDes (STDIN_FD);
+ fDataMap->put (VIRTUAL_FD_STDIN, fData);
+ vFdMap->put (STDIN_FD, VIRTUAL_FD_STDIN);
+ }
+
+ fData = fDataMap->get (VIRTUAL_FD_STDOUT);
+ if (fData == NULL)
+ {
+ fData = new FileData (STDOUT_FILENAME);
+ fData->setVirtualFd (VIRTUAL_FD_STDOUT);
+ fData->id = VIRTUAL_FD_STDOUT;
+ fData->setFileDes (STDOUT_FD);
+ fDataMap->put (VIRTUAL_FD_STDOUT, fData);
+ vFdMap->put (STDOUT_FD, VIRTUAL_FD_STDOUT);
+ }
+
+ fData = fDataMap->get (VIRTUAL_FD_STDERR);
+ if (fData == NULL)
+ {
+ fData = new FileData (STDERR_FILENAME);
+ fData->setVirtualFd (VIRTUAL_FD_STDERR);
+ fData->id = VIRTUAL_FD_STDERR;
+ fData->setFileDes (STDERR_FD);
+ fDataMap->put (VIRTUAL_FD_STDERR, fData);
+ vFdMap->put (STDERR_FD, VIRTUAL_FD_STDERR);
+ }
+
+ fData = fDataMap->get (VIRTUAL_FD_OTHERIO);
+ if (fData == NULL)
+ {
+ fData = new FileData (OTHERIO_FILENAME);
+ fData->setVirtualFd (VIRTUAL_FD_OTHERIO);
+ fData->id = VIRTUAL_FD_OTHERIO;
+ fData->setFileDes (OTHERIO_FD);
+ fDataMap->put (VIRTUAL_FD_OTHERIO, fData);
+ }
+
+ DataView *dview = dDscr->createView ();
+ dview->sort (PROP_TSTAMP);
+ long sz = dview->getSize ();
+ for (long i = 0; i < sz; i++)
+ {
+ hrtime_t event_duration = dview->getLongValue (PROP_TSTAMP, i);
+ hrtime_t event_start = dview->getLongValue (PROP_IORQST, i);
+ if (event_start > 0)
+ event_duration -= event_start;
+ else
+ event_duration = 0;
+ dview->setValue (PROP_EVT_TIME, i, event_duration);
+
+ int32_t fd = -1;
+ int64_t vFd = VIRTUAL_FD_NONE;
+ char *fName = NULL;
+ int32_t origFd = -1;
+ StringBuilder *sb = NULL;
+ FileData *fDataOrig = NULL;
+ FileSystem_type fsType;
+
+ IOTrace_type ioType = (IOTrace_type) dview->getIntValue (PROP_IOTYPE, i);
+ switch (ioType)
+ {
+ case READ_TRACE:
+ case WRITE_TRACE:
+ case READ_TRACE_ERROR:
+ case WRITE_TRACE_ERROR:
+ fd = dview->getIntValue (PROP_IOFD, i);
+ vFd = vFdMap->get (fd);
+ if (vFd == 0 || vFd == VIRTUAL_FD_NONE
+ || (fData = fDataMap->get (vFd)) == NULL)
+ {
+ fData = new FileData (UNKNOWNFD_FILENAME);
+ fData->setVirtualFd (virtualFd);
+ fData->setFsType ("N/A");
+ fData->setFileDes (fd);
+ fDataMap->put (virtualFd, fData);
+ vFdMap->put (fd, virtualFd);
+ vFd = virtualFd;
+ virtualFd++;
+ }
+ dview->setValue (PROP_IOVFD, i, vFd);
+ break;
+ case OPEN_TRACE:
+ fName = NULL;
+ sb = (StringBuilder*) dview->getObjValue (PROP_IOFNAME, i);
+ if (sb != NULL && sb->length () > 0)
+ fName = sb->toString ();
+ fd = dview->getIntValue (PROP_IOFD, i);
+ origFd = dview->getIntValue (PROP_IOOFD, i);
+ fsType = (FileSystem_type) dview->getIntValue (PROP_IOFSTYPE, i);
+
+ if (fName != NULL)
+ {
+ fData = new FileData (fName);
+ fDataMap->put (virtualFd, fData);
+ vFdMap->put (fd, virtualFd);
+ fData->setFileDes (fd);
+ fData->setFsType (fsType);
+ fData->setVirtualFd (virtualFd);
+ vFd = virtualFd;
+ virtualFd++;
+ }
+ else if (origFd > 0)
+ {
+ vFd = vFdMap->get (origFd);
+ if (vFd == 0 || vFd == VIRTUAL_FD_NONE)
+ {
+ Dprintf (DEBUG_IO,
+ "*** Error I/O tracing: (open) cannot get the virtual file descriptor, fd=%d origFd=%d\n",
+ fd, origFd);
+ continue;
+ }
+ else if ((fDataOrig = fDataMap->get (vFd)) == NULL)
+ {
+ Dprintf (DEBUG_IO,
+ "*** Error IO tracing: (open) cannot get original FileData object, fd=%d origFd=%d\n",
+ fd, origFd);
+ continue;
+ }
+ else
+ {
+ fName = fDataOrig->getFileName ();
+ fData = new FileData (fName);
+ fData->setFileDes (fd);
+ fData->setFsType (fDataOrig->getFsType ());
+ fData->setVirtualFd (virtualFd);
+ fDataMap->put (virtualFd, fData);
+ vFdMap->put (fd, virtualFd);
+ vFd = virtualFd;
+ virtualFd++;
+ }
+ }
+ else if (fd >= 0)
+ {
+ vFd = vFdMap->get (fd);
+ if (vFd == 0 || vFd == VIRTUAL_FD_NONE
+ || (fData = fDataMap->get (vFd)) == NULL)
+ {
+ fData = new FileData (UNKNOWNFD_FILENAME);
+ fData->setVirtualFd (virtualFd);
+ fData->setFsType ("N/A");
+ fData->setFileDes (fd);
+ fDataMap->put (virtualFd, fData);
+ vFdMap->put (fd, virtualFd);
+ vFd = virtualFd;
+ virtualFd++;
+ }
+ }
+ else
+ {
+ Dprintf (DEBUG_IO,
+ NTXT ("*** Error IO tracing: (open) unknown open IO type, fd=%d origFd=%d\n"), fd, origFd);
+ continue;
+ }
+
+ dview->setValue (PROP_IOVFD, i, vFd);
+ break;
+
+ case OPEN_TRACE_ERROR:
+ fName = NULL;
+
+ sb = (StringBuilder*) dview->getObjValue (PROP_IOFNAME, i);
+ if (sb != NULL && sb->length () > 0)
+ fName = sb->toString ();
+ fd = dview->getIntValue (PROP_IOFD, i);
+ origFd = dview->getIntValue (PROP_IOOFD, i);
+ fsType = (FileSystem_type) dview->getIntValue (PROP_IOFSTYPE, i);
+
+ if (fName != NULL)
+ {
+ fData = new FileData (fName);
+ fDataMap->put (virtualFd, fData);
+ fData->setFileDes (fd);
+ fData->setFsType (fsType);
+ fData->setVirtualFd (virtualFd);
+ vFd = virtualFd;
+ virtualFd++;
+ }
+ else if (origFd > 0)
+ {
+ vFd = vFdMap->get (origFd);
+ if (vFd == 0 || vFd == VIRTUAL_FD_NONE)
+ {
+ Dprintf (DEBUG_IO,
+ "*** Error IO tracing: (open error) cannot get the virtual file descriptor, fd=%d origFd=%d\n",
+ fd, origFd);
+ continue;
+ }
+ else if ((fDataOrig = fDataMap->get (vFd)) == NULL)
+ {
+ Dprintf (DEBUG_IO,
+ "*** Error IO tracing: (open error) cannot get original FileData object, fd=%d origFd=%d\n",
+ fd, origFd);
+ continue;
+ }
+ else
+ {
+ fName = fDataOrig->getFileName ();
+ fData = new FileData (fName);
+ fData->setFileDes (fd);
+ fData->setFsType (fDataOrig->getFsType ());
+ fData->setVirtualFd (virtualFd);
+ fDataMap->put (virtualFd, fData);
+ vFd = virtualFd;
+ virtualFd++;
+ }
+ }
+
+ dview->setValue (PROP_IOVFD, i, vFd);
+ break;
+
+ case CLOSE_TRACE:
+ case CLOSE_TRACE_ERROR:
+ fd = dview->getIntValue (PROP_IOFD, i);
+ vFd = vFdMap->get (fd);
+ if (vFd == 0 || vFd == VIRTUAL_FD_NONE)
+ {
+ Dprintf (DEBUG_IO,
+ "*** Error IO tracing: (close) cannot get the virtual file descriptor, fd=%d\n",
+ fd);
+ continue;
+ }
+ fData = fDataMap->get (vFd);
+ if (fData == NULL)
+ {
+ Dprintf (DEBUG_IO,
+ "*** Error IO tracing: (close) cannot get the FileData object, fd=%d\n",
+ fd);
+ continue;
+ }
+
+ vFdMap->put (fd, VIRTUAL_FD_NONE);
+ dview->setValue (PROP_IOVFD, i, vFd);
+ break;
+
+ case OTHERIO_TRACE:
+ case OTHERIO_TRACE_ERROR:
+ vFd = VIRTUAL_FD_OTHERIO;
+ fData = fDataMap->get (vFd);
+ if (fData == NULL)
+ {
+ Dprintf (DEBUG_IO,
+ "*** Error IO tracing: (other IO) cannot get the FileData object\n");
+ continue;
+ }
+
+ dview->setValue (PROP_IOVFD, i, vFd);
+ break;
+ case IOTRACETYPE_LAST:
+ break;
+ }
+ }
+
+ delete dview;
+
+ return dDscr;
+}
+
+DataDescriptor *
+Experiment::get_heap_events ()
+{
+ DataDescriptor *dDscr = getDataDescriptor (DATA_HEAP);
+ if (dDscr == NULL)
+ return NULL;
+ if (dDscr->getSize () > 0)
+ return dDscr;
+
+ char *base_name = get_basename (expt_name);
+ char *msg = dbe_sprintf (GTXT ("Loading Heap Trace Data: %s"), base_name);
+ read_data_file (SP_HEAPTRACE_FILE, msg);
+ free (msg);
+
+ if (dDscr->getSize () == 0)
+ return dDscr;
+ resolve_frame_info (dDscr);
+
+ // Match FREE to MALLOC
+ PropDescr *prop = new PropDescr (PROP_HLEAKED, NTXT ("HLEAKED"));
+ prop->uname = dbe_strdup (GTXT ("Bytes Leaked"));
+ prop->vtype = TYPE_UINT64;
+ dDscr->addProperty (prop);
+
+ prop = new PropDescr (PROP_HMEM_USAGE, NTXT ("HMEM_USAGE"));
+ prop->uname = dbe_strdup (GTXT ("Heap Memory Usage"));
+ prop->vtype = TYPE_UINT64;
+ dDscr->addProperty (prop);
+
+ prop = new PropDescr (PROP_HFREED, NTXT ("HFREED"));
+ prop->uname = dbe_strdup (GTXT ("Bytes Freed"));
+ prop->vtype = TYPE_UINT64;
+ dDscr->addProperty (prop);
+
+ prop = new PropDescr (PROP_HCUR_ALLOCS, NTXT ("HCUR_ALLOCS"));
+ prop->uname = dbe_strdup (GTXT ("Net Bytes Allocated"));
+ prop->vtype = TYPE_INT64;
+ dDscr->addProperty (prop);
+
+ prop = new PropDescr (PROP_HCUR_LEAKS, NTXT ("HCUR_LEAKS"));
+ prop->uname = dbe_strdup (GTXT ("Net Bytes Leaked"));
+ prop->vtype = TYPE_UINT64;
+ dDscr->addProperty (prop);
+
+ prop = new PropDescr (PROP_HCUR_NET_ALLOC, NTXT ("HCUR_NET_ALLOC"));
+ prop->vtype = TYPE_INT64;
+ prop->flags = DDFLAG_NOSHOW;
+ dDscr->addProperty (prop);
+
+ prop = new PropDescr (PROP_DDSCR_LNK, NTXT ("DDSCR_LNK"));
+ prop->vtype = TYPE_UINT64;
+ prop->flags = DDFLAG_NOSHOW;
+ dDscr->addProperty (prop);
+
+ prop = new PropDescr (PROP_VOIDP_OBJ, NTXT ("VOIDP_OBJ"));
+ prop->vtype = TYPE_OBJ;
+ prop->flags = DDFLAG_NOSHOW;
+ dDscr->addProperty (prop);
+
+ prop = new PropDescr (PROP_TSTAMP2, NTXT ("TSTAMP2"));
+ prop->uname = dbe_strdup (GTXT ("End Timestamp (nanoseconds)"));
+ prop->vtype = TYPE_UINT64;
+ prop->flags = DDFLAG_NOSHOW;
+ dDscr->addProperty (prop);
+
+ DataView *dview = dDscr->createView ();
+ dview->sort (PROP_TSTAMP);
+
+ // Keep track of memory usage
+ Size memoryUsage = 0;
+
+ HeapMap *heapmap = new HeapMap ();
+ long sz = dview->getSize ();
+ for (long i = 0; i < sz; i++)
+ {
+
+ Heap_type mtype = (Heap_type) dview->getIntValue (PROP_HTYPE, i);
+ Vaddr vaddr = dview->getULongValue (PROP_HVADDR, i);
+ Vaddr ovaddr = dview->getULongValue (PROP_HOVADDR, i);
+ Size hsize = dview->getULongValue (PROP_HSIZE, i);
+ hrtime_t tstamp = dview->getLongValue (PROP_TSTAMP, i);
+
+ switch (mtype)
+ {
+ case MALLOC_TRACE:
+ dview->setValue (PROP_TSTAMP2, i, (uint64_t) MAX_TIME);
+ if (vaddr)
+ {
+ dview->setValue (PROP_HLEAKED, i, hsize);
+ heapmap->allocate (vaddr, i + 1);
+
+ // Increase heap size
+ memoryUsage += hsize;
+ dview->setValue (PROP_HMEM_USAGE, i, memoryUsage);
+ }
+ break;
+
+ case FREE_TRACE:
+ if (vaddr)
+ {
+ long idx = heapmap->deallocate (vaddr) - 1;
+ if (idx >= 0)
+ {
+ // Decrease heap size
+ Size leaked = dview->getLongValue (PROP_HLEAKED, idx);
+ memoryUsage -= leaked;
+ dview->setValue (PROP_HMEM_USAGE, i, memoryUsage);
+
+ Size alloc = dview->getLongValue (PROP_HSIZE, idx);
+ // update allocation
+ dview->setValue (PROP_HLEAKED, idx, (uint64_t) 0);
+ dview->setValue (PROP_TSTAMP2, idx, tstamp);
+ dview->setValue (PROP_DDSCR_LNK, idx, dview->getIdByIdx (i) + 1);
+ // update this event
+ dview->setValue (PROP_HFREED, i, alloc);
+ }
+ }
+ break;
+
+ case REALLOC_TRACE:
+ dview->setValue (PROP_TSTAMP2, i, (uint64_t) MAX_TIME);
+ if (ovaddr)
+ {
+ long idx = heapmap->deallocate (ovaddr) - 1;
+ if (idx >= 0)
+ {
+ // Decrease heap size
+ Size leaked = dview->getLongValue (PROP_HLEAKED, idx);
+ memoryUsage -= leaked;
+ dview->setValue (PROP_HMEM_USAGE, i, memoryUsage);
+
+ Size alloc = dview->getLongValue (PROP_HSIZE, idx);
+ // update allocation
+ dview->setValue (PROP_HLEAKED, idx, (uint64_t) 0);
+ dview->setValue (PROP_TSTAMP2, idx, tstamp);
+ dview->setValue (PROP_DDSCR_LNK, idx, dview->getIdByIdx (i) + 1);
+ // update this event
+ dview->setValue (PROP_HFREED, i, alloc);
+ }
+ }
+ if (vaddr)
+ {
+ dview->setValue (PROP_HLEAKED, i, hsize);
+ heapmap->allocate (vaddr, i + 1);
+
+ // Increase heap size
+ memoryUsage += hsize;
+ dview->setValue (PROP_HMEM_USAGE, i, memoryUsage);
+ }
+ break;
+ case MMAP_TRACE:
+ case MUNMAP_TRACE:
+ // Adjust the size to be multiple of page_size
+ //hsize = (( hsize - 1 ) / page_size + 1 ) * page_size;
+ if (vaddr)
+ {
+ UnmapChunk *list;
+ if (mtype == MMAP_TRACE)
+ {
+ dview->setValue (PROP_TSTAMP2, i, (uint64_t) MAX_TIME);
+ dview->setValue (PROP_HLEAKED, i, hsize);
+ list = heapmap->mmap (vaddr, hsize, i);
+
+ // Increase heap size
+ memoryUsage += hsize;
+ dview->setValue (PROP_HMEM_USAGE, i, memoryUsage);
+ }
+ else
+ { // MUNMAP_TRACE
+ list = heapmap->munmap (vaddr, hsize);
+
+ // Set allocation size to zero
+ // Note: We're currently reusing PROP_HSIZE to mean allocation size
+ // If we ever need to save the original HSIZE, we'll need to
+ // create a new PROP_* to represent event allocation size
+ //
+ // For now, tuck the original size away as HOVADDR
+ dview->setValue (PROP_HOVADDR, i, (uint64_t) hsize);
+ dview->setValue (PROP_HSIZE, i, (uint64_t) 0);
+ }
+ Size total_freed = 0;
+ while (list)
+ {
+ long idx = list->val;
+ total_freed += list->size;
+ Size leaked = dview->getLongValue (PROP_HLEAKED, idx);
+
+ // Decrease heap size
+ memoryUsage -= list->size;
+ dview->setValue (PROP_HMEM_USAGE, i, memoryUsage);
+
+ Size leak_update = leaked - list->size;
+ // update allocation
+ dview->setValue (PROP_HLEAKED, idx, leak_update);
+ // update allocation's list of frees
+ {
+ UnmapChunk *copy = new UnmapChunk;
+ heapUnmapEvents->append (copy);
+ copy->val = dview->getIdByIdx (i);
+ copy->size = list->size;
+ copy->next = (UnmapChunk *) dview->getObjValue (PROP_VOIDP_OBJ, idx);
+ dview->setObjValue (PROP_VOIDP_OBJ, idx, copy);
+ }
+ if (leak_update <= 0)
+ if (leak_update == 0)
+ dview->setValue (PROP_TSTAMP2, idx, tstamp);
+ UnmapChunk *t = list;
+ list = list->next;
+ delete t;
+ }
+ // update this event
+ if (total_freed)
+ // only need to write value if it is non-zero
+ dview->setValue (PROP_HFREED, i, total_freed);
+ }
+ break;
+ // ignoring HEAPTYPE_LAST, which will never be recorded
+ case HEAPTYPE_LAST:
+ break;
+ }
+ }
+ delete heapmap;
+ delete dview;
+
+ return dDscr;
+}
+
+DataDescriptor *
+Experiment::get_heapsz_events ()
+{
+ DataDescriptor *dDscr = getDataDescriptor (DATA_HEAPSZ);
+ if (dDscr)
+ return dDscr;
+ dDscr = get_heap_events (); // derived from DATA_HEAP
+ if (dDscr == NULL)
+ return NULL;
+ dDscr = newDataDescriptor (DATA_HEAPSZ, 0, dDscr);
+ return dDscr;
+}
+
+static void
+update_heapsz_packet (std::set<long> &pkt_id_set, DataView *dview,
+ long alloc_pkt_id, int64_t net_alloc, uint64_t leaks)
+{
+ // pkt_id_set: set is updated to include packet
+ // alloc_pkt_id: data descriptor id (NOT dview idx)
+ // net_alloc: adjustment to net allocation for this packet (note: signed value)
+ // leaks: leak bytes to attribute to alloc_pkt_id
+ std::pair < std::set<long>::iterator, bool> ret;
+ ret = pkt_id_set.insert (alloc_pkt_id); // add to set
+ bool new_to_set = ret.second; // was not in set
+ if (!new_to_set)
+ {
+ // Has been seen before, update values
+ net_alloc += dview->getDataDescriptorValue (PROP_HCUR_NET_ALLOC, alloc_pkt_id);
+ if (leaks)
+ {
+ uint64_t old = dview->getDataDescriptorValue (PROP_HCUR_LEAKS, alloc_pkt_id);
+ if (old != 0)
+ leaks = old;
+ }
+ }
+ dview->setDataDescriptorValue (PROP_HCUR_NET_ALLOC, alloc_pkt_id, net_alloc);
+ dview->setDataDescriptorValue (PROP_HCUR_LEAKS, alloc_pkt_id, leaks);
+}
+
+DataView *
+Experiment::create_heapsz_data_view (DataView *heap_dview)
+{
+ // heap_dview has DATA_HEAP _filtered_ packets.
+ // This creates, populates, and returns DATA_HEAPSZ DataView
+ DataDescriptor *dDscr = get_heapsz_events ();
+ if (dDscr == NULL)
+ return NULL;
+ std::set<long> pkt_id_set;
+ DataView *dview = heap_dview;
+ long sz = dview->getSize ();
+ for (long i = 0; i < sz; i++)
+ {
+ int64_t hsize = (int64_t) dview->getULongValue (PROP_HSIZE, i);
+ uint64_t leaks = dview->getULongValue (PROP_HLEAKED, i);
+ long alloc_pkt_id = dview->getIdByIdx (i);
+ update_heapsz_packet (pkt_id_set, dview, alloc_pkt_id, hsize, leaks);
+
+ // linked free
+ UnmapChunk *mmap_frees = (UnmapChunk *) dview->getObjValue (PROP_VOIDP_OBJ, i); // mmap metadata
+ if (mmap_frees)
+ {
+ // mmap: all frees associated with this packet
+ while (mmap_frees)
+ {
+ long free_pkt_id = mmap_frees->val;
+ int64_t free_sz = mmap_frees->size;
+ update_heapsz_packet (pkt_id_set, dview, free_pkt_id, -free_sz, 0);
+ mmap_frees = mmap_frees->next;
+ }
+ }
+ else
+ {
+ // malloc: check for associated free
+ long free_pkt_id = dview->getLongValue (PROP_DDSCR_LNK, i) - 1;
+ if (free_pkt_id >= 0)
+ update_heapsz_packet (pkt_id_set, dview, free_pkt_id, -hsize, 0);
+ }
+ }
+
+ // create a new DataView based on the filtered-in and associated free events
+ std::set<long>::iterator it;
+ DataView *heapsz_dview = dDscr->createExtManagedView ();
+ for (it = pkt_id_set.begin (); it != pkt_id_set.end (); ++it)
+ {
+ long ddscr_pkt_id = *it;
+ heapsz_dview->appendDataDescriptorId (ddscr_pkt_id);
+ }
+ compute_heapsz_data_view (heapsz_dview);
+ return heapsz_dview;
+}
+
+void
+Experiment::compute_heapsz_data_view (DataView *heapsz_dview)
+{
+ DataView *dview = heapsz_dview;
+
+ // Keep track of memory usage
+ int64_t currentAllocs = 0;
+ Size currentLeaks = 0;
+ dview->sort (PROP_TSTAMP);
+ long sz = dview->getSize ();
+ for (long i = 0; i < sz; i++)
+ {
+ int64_t net_alloc = dview->getLongValue (PROP_HCUR_NET_ALLOC, i);
+ currentAllocs += net_alloc;
+ dview->setValue (PROP_HCUR_ALLOCS, i, currentAllocs);
+
+ Size leaks = dview->getULongValue (PROP_HCUR_LEAKS, i);
+ currentLeaks += leaks;
+ dview->setValue (PROP_HCUR_LEAKS, i, currentLeaks);
+ }
+}
+
+void
+Experiment::DBG_memuse (Sample * s)
+{
+ DataDescriptor *dDscr = getDataDescriptor (DATA_HEAP);
+ if (dDscr == NULL || dDscr->getSize () == 0)
+ return;
+
+ DataView *dview = dDscr->createView ();
+ dview->sort (PROP_TSTAMP);
+ hrtime_t ts1 = s->get_start_time ();
+ hrtime_t ts2 = s->get_end_time ();
+
+ HeapMap *heapmap = new HeapMap ();
+ long sz = dview->getSize ();
+ Size maxSize = 0;
+ Size curSize = 0;
+ hrtime_t maxTime = 0;
+ for (long i = 0; i < sz; i++)
+ {
+ hrtime_t tstamp = dview->getLongValue (PROP_TSTAMP, i);
+ if (tstamp < ts1)
+ continue;
+ if (tstamp >= ts2)
+ break;
+
+ Heap_type mtype = (Heap_type) dview->getIntValue (PROP_HTYPE, i);
+ Vaddr vaddr = dview->getULongValue (PROP_HVADDR, i);
+ Vaddr ovaddr = dview->getULongValue (PROP_HOVADDR, i);
+ switch (mtype)
+ {
+ case REALLOC_TRACE:
+ break;
+ case MALLOC_TRACE:
+ ovaddr = 0;
+ break;
+ case FREE_TRACE:
+ ovaddr = vaddr;
+ vaddr = 0;
+ break;
+ default:
+ vaddr = 0;
+ ovaddr = 0;
+ break;
+ }
+ if (ovaddr)
+ {
+ long idx = heapmap->deallocate (ovaddr) - 1;
+ if (idx >= 0)
+ curSize -= dview->getULongValue (PROP_HSIZE, idx);
+ }
+ if (vaddr)
+ {
+ heapmap->allocate (vaddr, i + 1);
+ curSize += dview->getULongValue (PROP_HSIZE, i);
+ if (curSize > maxSize)
+ {
+ maxSize = curSize;
+ maxTime = tstamp;
+ }
+ }
+ }
+ printf ("SAMPLE=%s (id=%d) MEMUSE=%lld TSTAMP=%lld\n", s->get_start_label (),
+ s->get_number (), maxSize, maxTime - getStartTime ());
+ delete dview;
+ delete heapmap;
+}
+
+void
+Experiment::DBG_memuse (const char *sname)
+{
+ for (int i = 0; i < samples->size (); ++i)
+ {
+ Sample *sample = samples->fetch (i);
+ if (streq (sname, sample->get_start_label ()))
+ {
+ DBG_memuse (sample);
+ break;
+ }
+ }
+}
+
+DataDescriptor *
+Experiment::get_race_events ()
+{
+ DataDescriptor *dDscr = getDataDescriptor (DATA_RACE);
+ if (dDscr == NULL)
+ return NULL;
+ if (dDscr->getSize () == 0)
+ {
+ char *base_name = get_basename (expt_name);
+ char *msg = dbe_sprintf (GTXT ("Loading Race Data: %s"), base_name);
+ read_data_file (SP_RACETRACE_FILE, msg);
+ free (msg);
+ resolve_frame_info (dDscr);
+ }
+ return dDscr;
+}
+
+DataDescriptor *
+Experiment::get_deadlock_events ()
+{
+ DataDescriptor *dDscr = getDataDescriptor (DATA_DLCK);
+ if (dDscr == NULL)
+ return NULL;
+ if (dDscr->getSize () == 0)
+ {
+ char *base_name = get_basename (expt_name);
+ char *msg = dbe_sprintf (GTXT ("Loading Deadlocks Data: %s"), base_name);
+ read_data_file (SP_DEADLOCK_FILE, msg);
+ free (msg);
+ resolve_frame_info (dDscr);
+ }
+ return dDscr;
+}
+
+DataDescriptor *
+Experiment::get_sample_events ()
+{
+ DataDescriptor *dDscr = getDataDescriptor (DATA_SAMPLE);
+ if (dDscr == NULL)
+ return NULL;
+ if (dDscr->getSize () > 0)
+ return dDscr;
+
+ // read_overview_file(); //YXXX do this here at some point instead of:
+ PropDescr *tmp_propDscr;
+ tmp_propDscr = new PropDescr (PROP_SMPLOBJ, NTXT ("SMPLOBJ"));
+ tmp_propDscr->uname = NULL;
+ tmp_propDscr->vtype = TYPE_OBJ;
+ dDscr->addProperty (tmp_propDscr);
+
+ tmp_propDscr = new PropDescr (PROP_TSTAMP, NTXT ("TSTAMP"));
+ tmp_propDscr->uname = dbe_strdup ("High resolution timestamp");
+ tmp_propDscr->vtype = TYPE_UINT64;
+ dDscr->addProperty (tmp_propDscr);
+
+ tmp_propDscr = new PropDescr (PROP_SAMPLE, NTXT ("SAMPLE"));
+ tmp_propDscr->uname = dbe_strdup ("Sample number");
+ tmp_propDscr->vtype = TYPE_UINT64;
+ dDscr->addProperty (tmp_propDscr);
+
+ tmp_propDscr = new PropDescr (PROP_EVT_TIME, NTXT ("EVT_TIME"));
+ tmp_propDscr->uname = dbe_strdup ("Event duration");
+ tmp_propDscr->vtype = TYPE_UINT64;
+ dDscr->addProperty (tmp_propDscr);
+
+ long ssize = samples->size ();
+ for (long ii = 0; ii < ssize; ii++)
+ {
+ Sample * sample = samples->fetch (ii);
+ long recn = dDscr->addRecord ();
+ hrtime_t sduration = sample->get_end_time () - sample->get_start_time ();
+ dDscr->setObjValue (PROP_SMPLOBJ, recn, sample);
+ dDscr->setValue (PROP_SAMPLE, recn, sample->get_number ());
+ dDscr->setValue (PROP_TSTAMP, recn, sample->get_end_time ());
+ dDscr->setValue (PROP_EVT_TIME, recn, sduration);
+ }
+ return dDscr;
+}
+
+DataDescriptor *
+Experiment::get_gc_events ()
+{
+ DataDescriptor *dDscr = getDataDescriptor (DATA_GCEVENT);
+ if (dDscr == NULL)
+ return NULL;
+ if (dDscr->getSize () > 0)
+ return dDscr;
+
+ // read_overview_file(); //YXXX do this here at some point instead of:
+ PropDescr *tmp_propDscr;
+ tmp_propDscr = new PropDescr (PROP_GCEVENTOBJ, NTXT ("GCEVENTOBJ"));
+ tmp_propDscr->uname = NULL;
+ tmp_propDscr->vtype = TYPE_OBJ;
+ dDscr->addProperty (tmp_propDscr);
+
+ tmp_propDscr = new PropDescr (PROP_TSTAMP, NTXT ("TSTAMP"));
+ tmp_propDscr->uname = dbe_strdup ("High resolution timestamp");
+ tmp_propDscr->vtype = TYPE_UINT64;
+ dDscr->addProperty (tmp_propDscr);
+
+ tmp_propDscr = new PropDescr (PROP_GCEVENT, NTXT ("GCEVENT"));
+ tmp_propDscr->uname = dbe_strdup ("GCEvent number");
+ tmp_propDscr->vtype = TYPE_UINT64;
+ dDscr->addProperty (tmp_propDscr);
+
+ tmp_propDscr = new PropDescr (PROP_EVT_TIME, NTXT ("EVT_TIME"));
+ tmp_propDscr->uname = dbe_strdup ("Event duration");
+ tmp_propDscr->vtype = TYPE_UINT64;
+ dDscr->addProperty (tmp_propDscr);
+
+ long ssize = gcevents->size ();
+ for (long ii = 0; ii < ssize; ii++)
+ {
+ GCEvent * gcevent = gcevents->fetch (ii);
+ long recn = dDscr->addRecord ();
+ hrtime_t sduration = gcevent->end - gcevent->start;
+ dDscr->setObjValue (PROP_GCEVENTOBJ, recn, gcevent);
+ dDscr->setValue (PROP_GCEVENT, recn, gcevent->id);
+ dDscr->setValue (PROP_TSTAMP, recn, gcevent->end);
+ dDscr->setValue (PROP_EVT_TIME, recn, sduration);
+ }
+ return dDscr;
+}
+
+void
+Experiment::update_last_event (hrtime_t ts/*wall_ts*/)
+{
+ if (last_event == ZERO_TIME)
+ {
+ // not yet initialized
+ last_event = ts;
+ }
+ if (last_event - exp_start_time < ts - exp_start_time)
+ // compare deltas to avoid hrtime_t wrap
+ last_event = ts;
+}
+
+void
+Experiment::write_header ()
+{
+ StringBuilder sb;
+
+ // write commentary to the experiment, describing the parameters
+ if (dbeSession->ipc_mode || dbeSession->rdt_mode)
+ {
+ // In GUI: print start time at the beginning
+ char *start_time = ctime (&start_sec);
+ if (start_time != NULL)
+ {
+ sb.setLength (0);
+ sb.sprintf (GTXT ("Experiment started %s"), start_time);
+ commentq->append (new Emsg (CMSG_COMMENT, sb));
+ }
+ }
+ // write message with target arglist
+ if (uarglist != NULL)
+ {
+ sb.setLength (0);
+ sb.sprintf (GTXT ("\nTarget command (%s): '%s'"),
+ (wsize == W32 ? "32-bit" : "64-bit"), uarglist);
+ commentq->append (new Emsg (CMSG_COMMENT, sb));
+ }
+
+ sb.setLength (0);
+ sb.sprintf (GTXT ("Process pid %d, ppid %d, pgrp %d, sid %d"),
+ pid, ppid, pgrp, sid);
+ commentq->append (new Emsg (CMSG_COMMENT, sb));
+
+ // add comment for user name, if set
+ if (username != NULL)
+ {
+ sb.setLength (0);
+ sb.sprintf (GTXT ("User: `%s'"), username);
+ commentq->append (new Emsg (CMSG_COMMENT, sb));
+ }
+
+ // add comment for current working directory
+ if (ucwd != NULL)
+ {
+ sb.setLength (0);
+ sb.sprintf (GTXT ("Current working directory: %s"), ucwd);
+ commentq->append (new Emsg (CMSG_COMMENT, sb));
+ }
+
+ // add comment for collector version string
+ if (cversion != NULL)
+ {
+ char *wstring;
+ switch (wsize)
+ {
+ case Wnone:
+ wstring = NTXT ("?");
+ break;
+ case W32:
+ wstring = GTXT ("32-bit");
+ break;
+ case W64:
+ wstring = GTXT ("64-bit");
+ break;
+ default:
+ wstring = NTXT ("??");
+ break;
+ }
+ sb.setLength (0);
+ sb.sprintf (GTXT ("Collector version: `%s'; experiment version %d.%d (%s)"),
+ cversion, exp_maj_version, exp_min_version, wstring);
+ commentq->append (new Emsg (CMSG_COMMENT, sb));
+ }
+
+ // add comment for driver version string (er_kernel)
+ if (dversion != NULL)
+ {
+ sb.setLength (0);
+ sb.sprintf (GTXT ("Kernel driver version: `%s'"), dversion);
+ commentq->append (new Emsg (CMSG_COMMENT, sb));
+ }
+
+ if (jversion != NULL)
+ {
+ sb.setLength (0);
+ sb.sprintf (GTXT ("JVM version: `%s'"), jversion);
+ commentq->append (new Emsg (CMSG_COMMENT, sb));
+ }
+
+ // add comment for hostname, parameters
+ if (hostname == NULL)
+ hostname = dbe_strdup (GTXT ("unknown"));
+ if (os_version == NULL)
+ os_version = dbe_strdup (GTXT ("unknown"));
+ if (architecture == NULL)
+ architecture = dbe_strdup (GTXT ("unknown"));
+ sb.setLength (0);
+ sb.sprintf (GTXT ("Host `%s', OS `%s', page size %d, architecture `%s'"),
+ hostname, os_version, page_size, architecture);
+ commentq->append (new Emsg (CMSG_COMMENT, sb));
+
+ sb.setLength (0);
+ if (maxclock != minclock)
+ {
+ clock = maxclock;
+ sb.sprintf (
+ GTXT (" %d CPUs, with clocks ranging from %d to %d MHz.; max of %d MHz. assumed"),
+ ncpus, minclock, maxclock, clock);
+ }
+ else
+ sb.sprintf (GTXT (" %d CPU%s, clock speed %d MHz."),
+ ncpus, (ncpus == 1 ? NTXT ("") : "s"), clock);
+ commentq->append (new Emsg (CMSG_COMMENT, sb));
+
+ // add comment for machine memory size
+ if (page_size > 0 && npages > 0)
+ {
+ long long memsize = ((long long) npages * page_size) / (1024 * 1024);
+ sb.setLength (0);
+ sb.sprintf (GTXT (" Memory: %d pages @ %d = %lld MB."),
+ npages, page_size, memsize);
+ commentq->append (new Emsg (CMSG_COMMENT, sb));
+ }
+
+ // add comment for machine memory size
+ if (machinemodel != NULL)
+ {
+ sb.setLength (0);
+ sb.sprintf (GTXT (" Machine model: %s"), machinemodel);
+ commentq->append (new Emsg (CMSG_COMMENT, sb));
+ }
+
+ // add comment for start time
+ char *p = ctime (&start_sec);
+ sb.setLength (0);
+ if (p != NULL)
+ sb.sprintf (GTXT ("Experiment started %s"), p);
+ else
+ sb.sprintf (GTXT ("\nExperiment start not recorded"));
+ write_coll_params ();
+ commentq->append (new Emsg (CMSG_COMMENT, sb));
+ commentq->appendqueue (runlogq);
+ runlogq->mark_clear ();
+}
+
+void
+Experiment::write_coll_params ()
+{
+ StringBuilder sb;
+
+ // now write the various collection parameters as comments
+ sb.setLength (0);
+ sb.append (GTXT ("Data collection parameters:"));
+ commentq->append (new Emsg (CMSG_COMMENT, sb));
+ if (coll_params.profile_mode == 1)
+ {
+ sb.setLength (0);
+ sb.sprintf (GTXT (" Clock-profiling, interval = %d microsecs."),
+ (int) (coll_params.ptimer_usec));
+ commentq->append (new Emsg (CMSG_COMMENT, sb));
+ }
+ if (coll_params.sync_mode == 1)
+ {
+ sb.setLength (0);
+ char *scope_str = NTXT ("");
+ switch (coll_params.sync_scope)
+ {
+ case 0:
+ scope_str = GTXT ("Native- and Java-APIs");
+ break;
+ case SYNCSCOPE_JAVA:
+ scope_str = GTXT ("JAVA-APIs");
+ break;
+ case SYNCSCOPE_NATIVE:
+ scope_str = GTXT ("Native-APIs");
+ break;
+ case SYNCSCOPE_JAVA | SYNCSCOPE_NATIVE:
+ scope_str = GTXT ("Native- and Java-APIs");
+ break;
+ }
+ if (coll_params.sync_threshold < 0)
+ sb.sprintf (GTXT (" Synchronization tracing, threshold = %d microsecs. (calibrated); %s"),
+ -coll_params.sync_threshold, scope_str);
+ else
+ sb.sprintf (GTXT (" Synchronization tracing, threshold = %d microsecs.; %s"),
+ coll_params.sync_threshold, scope_str);
+ commentq->append (new Emsg (CMSG_COMMENT, sb));
+ }
+ if (coll_params.heap_mode == 1)
+ {
+ sb.setLength (0);
+ sb.append (GTXT (" Heap tracing"));
+ commentq->append (new Emsg (CMSG_COMMENT, sb));
+ }
+ if (coll_params.io_mode == 1)
+ {
+ sb.setLength (0);
+ sb.append (GTXT (" IO tracing"));
+ commentq->append (new Emsg (CMSG_COMMENT, sb));
+ }
+ if (coll_params.race_mode == 1)
+ {
+ sb.setLength (0);
+ char *race_stack_name;
+ switch (coll_params.race_stack)
+ {
+ case 0:
+ race_stack_name = GTXT ("dual-stack");
+ break;
+ case 1:
+ race_stack_name = GTXT ("single-stack");
+ break;
+ case 2:
+ race_stack_name = GTXT ("leaf");
+ break;
+ default:
+ abort ();
+ }
+ sb.sprintf (GTXT (" Datarace detection, %s"), race_stack_name);
+ commentq->append (new Emsg (CMSG_COMMENT, sb));
+ }
+ if (coll_params.deadlock_mode == 1)
+ {
+ sb.setLength (0);
+ sb.append (GTXT (" Deadlock detection"));
+ commentq->append (new Emsg (CMSG_COMMENT, sb));
+ }
+ if (coll_params.hw_mode == 1)
+ {
+ sb.setLength (0);
+ if (hwc_default == true)
+ sb.append (GTXT (" HW counter-profiling (default); counters:"));
+ else
+ sb.append (GTXT (" HW counter-profiling; counters:"));
+ commentq->append (new Emsg (CMSG_COMMENT, sb));
+ for (int i = 0; i < MAX_HWCOUNT; i++)
+ {
+ if (!coll_params.hw_aux_name[i])
+ continue;
+ sb.setLength (0);
+ sb.sprintf (GTXT (" %s, tag %d, interval %d, memop %d"),
+ coll_params.hw_aux_name[i], i,
+ coll_params.hw_interval[i], coll_params.hw_tpc[i]);
+ commentq->append (new Emsg (CMSG_COMMENT, sb));
+ }
+ }
+ if (coll_params.sample_periodic == 1)
+ {
+ sb.setLength (0);
+ sb.sprintf (GTXT (" Periodic sampling, %d secs."),
+ coll_params.sample_timer);
+ commentq->append (new Emsg (CMSG_COMMENT, sb));
+ }
+ if (coll_params.limit != 0)
+ {
+ sb.setLength (0);
+ sb.sprintf (GTXT (" Experiment size limit, %d"),
+ coll_params.limit);
+ commentq->append (new Emsg (CMSG_COMMENT, sb));
+ }
+ if (coll_params.linetrace != NULL)
+ {
+ sb.setLength (0);
+ sb.sprintf (GTXT (" Follow descendant processes from: %s"),
+ coll_params.linetrace);
+ commentq->append (new Emsg (CMSG_COMMENT, sb));
+ }
+ if (coll_params.pause_sig != NULL)
+ {
+ sb.setLength (0);
+ sb.sprintf (GTXT (" Pause signal %s"), coll_params.pause_sig);
+ commentq->append (new Emsg (CMSG_COMMENT, sb));
+ }
+ if (coll_params.sample_sig != NULL)
+ {
+ sb.setLength (0);
+ sb.sprintf (GTXT (" Sample signal %s"), coll_params.sample_sig);
+ commentq->append (new Emsg (CMSG_COMMENT, sb));
+ }
+ if (coll_params.start_delay != NULL)
+ {
+ sb.setLength (0);
+ sb.sprintf (GTXT (" Data collection delay start %s seconds"), coll_params.start_delay);
+ commentq->append (new Emsg (CMSG_COMMENT, sb));
+ }
+ if (coll_params.terminate != NULL)
+ {
+ sb.setLength (0);
+ sb.sprintf (GTXT (" Data collection termination after %s seconds"), coll_params.terminate);
+ commentq->append (new Emsg (CMSG_COMMENT, sb));
+ }
+ // add a blank line after data description
+ commentq->append (new Emsg (CMSG_COMMENT, NTXT ("")));
+}
+
+
+/*
+ * Raw packet processing
+ */
+static int
+check_mstate (char *ptr, PacketDescriptor *pDscr, int arg)
+{
+ switch (arg)
+ {
+ case PROP_UCPU:
+ case PROP_SCPU:
+ case PROP_TRAP:
+ case PROP_TFLT:
+ case PROP_DFLT:
+ case PROP_KFLT:
+ case PROP_ULCK:
+ case PROP_TSLP:
+ case PROP_WCPU:
+ case PROP_TSTP:
+ break;
+ default:
+ return 0;
+ }
+ Vector<FieldDescr*> *fields = pDscr->getFields ();
+ for (int i = 0, sz = fields->size (); i < sz; i++)
+ {
+ FieldDescr *fDscr = fields->fetch (i);
+ if (fDscr->propID == arg)
+ return *((int*) (ptr + fDscr->offset));
+ }
+ return 0;
+}
+
+#define PACKET_ALIGNMENT 4
+
+uint64_t
+Experiment::readPacket (Data_window *dwin, Data_window::Span *span)
+{
+ Common_packet *rcp = (Common_packet *) dwin->bind (span,
+ sizeof (CommonHead_packet));
+ uint16_t v16;
+ uint64_t size = 0;
+ if (rcp)
+ {
+ if ((((long) rcp) % PACKET_ALIGNMENT) != 0)
+ {
+ invalid_packet++;
+ size = PROFILE_BUFFER_CHUNK - span->offset % PROFILE_BUFFER_CHUNK;
+ return size;
+ }
+ v16 = (uint16_t) rcp->tsize;
+ size = dwin->decode (v16);
+ if (size == 0)
+ {
+ size = PROFILE_BUFFER_CHUNK - span->offset % PROFILE_BUFFER_CHUNK;
+ return size;
+ }
+ rcp = (Common_packet *) dwin->bind (span, size);
+ }
+ if (rcp == NULL)
+ return 0;
+
+ if ((((long) rcp) % PACKET_ALIGNMENT) != 0)
+ {
+ invalid_packet++;
+ size = PROFILE_BUFFER_CHUNK - span->offset % PROFILE_BUFFER_CHUNK;
+ return size;
+ }
+ v16 = (uint16_t) rcp->type;
+ uint32_t rcptype = dwin->decode (v16);
+ if (rcptype == EMPTY_PCKT)
+ return size;
+ if (rcptype == FRAME_PCKT)
+ {
+ RawFramePacket *fp = new RawFramePacket;
+ fp->uid = dwin->decode (((Frame_packet*) rcp)->uid);
+ fp->uidn = NULL;
+ fp->uidj = NULL;
+ fp->omp_uid = NULL;
+ fp->omp_state = 0;
+ char *ptr = (char*) rcp + dwin->decode (((Frame_packet*) rcp)->hsize);
+ if ((((long) ptr) % PACKET_ALIGNMENT) != 0)
+ {
+ invalid_packet++;
+ delete fp;
+ return size;
+ }
+ v16 = (uint16_t) ((Frame_packet*) rcp)->tsize;
+ char *end = (char*) rcp + dwin->decode (v16);
+ for (; ptr < end;)
+ {
+ Common_info *cinfo = (Common_info*) ptr;
+ uint32_t hsize = dwin->decode (cinfo->hsize);
+ if (hsize == 0 || ptr + hsize > end)
+ break;
+ int kind = dwin->decode (cinfo->kind);
+ bool compressed = false;
+ if (kind & COMPRESSED_INFO)
+ {
+ compressed = true;
+ kind &= ~COMPRESSED_INFO;
+ }
+ switch (kind)
+ {
+ case STACK_INFO:
+ {
+ char *stack = ptr + sizeof (Stack_info);
+ size_t stack_size = hsize - sizeof (Stack_info);
+ uint64_t uidn = dwin->decode (((Stack_info*) cinfo)->uid);
+ if (stack_size <= 0)
+ {
+ fp->uidn = get_uid_node (uidn);
+ break;
+ }
+ uint64_t link_uid = (uint64_t) 0;
+ if (compressed)
+ {
+ stack_size -= sizeof (uint64_t);
+ unsigned char *s = (unsigned char*) (stack + stack_size);
+ int shift = 0;
+ for (size_t i = 0; i<sizeof (link_uid); i++)
+ {
+ link_uid |= (uint64_t) * s++ << shift;
+ shift += 8;
+ }
+ }
+ if (wsize == W32)
+ fp->uidn = add_uid (dwin, uidn,
+ (int) (stack_size / sizeof (uint32_t)),
+ (uint32_t*) stack, link_uid);
+ else
+ fp->uidn = add_uid (dwin, uidn,
+ (int) (stack_size / sizeof (uint64_t)),
+ (uint64_t*) stack, link_uid);
+ break;
+ }
+ case JAVA_INFO:
+ {
+ char *stack = ptr + sizeof (Java_info);
+ size_t stack_size = hsize - sizeof (Java_info);
+ uint64_t uidj = dwin->decode (((Java_info*) cinfo)->uid);
+ if (stack_size <= 0)
+ {
+ fp->uidj = get_uid_node (uidj);
+ break;
+ }
+
+ uint64_t link_uid = (uint64_t) 0;
+ if (compressed)
+ {
+ stack_size -= sizeof (uint64_t);
+ unsigned char *s = (unsigned char*) (stack + stack_size);
+ int shift = 0;
+ for (size_t i = 0; i<sizeof (link_uid); i++)
+ {
+ link_uid |= (uint64_t) * s++ << shift;
+ shift += 8;
+ }
+ }
+ if (wsize == W32)
+ fp->uidj = add_uid (dwin, uidj,
+ (int) (stack_size / sizeof (uint32_t)),
+ (uint32_t*) stack, link_uid);
+ else
+ {
+ // bug 6909545: garbage in 64-bit JAVA_INFO
+ char *nstack = (char*) malloc (stack_size);
+ char *dst = nstack;
+ char *srcmax = stack + stack_size - sizeof (uint64_t);
+ for (char *src = stack; src <= srcmax;)
+ {
+ int64_t val = dwin->decode (*(int32_t*) src);
+ *(uint64_t*) dst = dwin->decode (val);
+ src += sizeof (uint64_t);
+ dst += sizeof (uint64_t);
+ if (src > srcmax)
+ {
+ fprintf (stderr, "er_print: Experiment::readPacket: Error in data: src=%llx greater than %llx\n",
+ (long long) src, (long long) srcmax);
+ break;
+ }
+ *(uint64_t*) dst = *(uint64_t*) src;
+ src += sizeof (uint64_t);
+ dst += sizeof (uint64_t);
+ }
+ fp->uidj = add_uid (dwin, uidj,
+ (int) (stack_size / sizeof (uint64_t)),
+ (uint64_t*) nstack, link_uid);
+ free (nstack);
+ }
+ break;
+ }
+ case OMP_INFO:
+ fp->omp_state = dwin->decode (((OMP_info*) ptr)->omp_state);
+ break;
+ case OMP2_INFO:
+ {
+ uint64_t omp_uid = dwin->decode (((OMP2_info*) ptr)->uid);
+ fp->omp_uid = get_uid_node (omp_uid);
+ fp->omp_state = dwin->decode (((OMP2_info*) ptr)->omp_state);
+ break;
+ }
+ default:
+ break;
+ }
+ ptr += hsize;
+ }
+ frmpckts->append (fp);
+ return size;
+ }
+ else if (rcptype == UID_PCKT)
+ {
+ Uid_packet *uidp = (Uid_packet*) rcp;
+ uint64_t uid = dwin->decode (uidp->uid);
+ char *arr_bytes = (char*) (uidp + 1);
+ v16 = (uint16_t) rcp->tsize;
+ size_t arr_length = dwin->decode (v16) - sizeof (Uid_packet);
+ if (arr_length <= 0)
+ return size;
+ uint64_t link_uid = (uint64_t) 0;
+ if (dwin->decode (uidp->flags) & COMPRESSED_INFO)
+ {
+ arr_length -= sizeof (uint64_t);
+ unsigned char *s = (unsigned char*) (arr_bytes + arr_length);
+ int shift = 0;
+ for (size_t i = 0; i<sizeof (link_uid); i++)
+ {
+ link_uid |= (uint64_t) * s++ << shift;
+ shift += 8;
+ }
+ }
+ if (wsize == W32)
+ add_uid (dwin, uid, (int) (arr_length / sizeof (uint32_t)),
+ (uint32_t*) arr_bytes, link_uid);
+ else
+ add_uid (dwin, uid, (int) (arr_length / sizeof (uint64_t)),
+ (uint64_t*) arr_bytes, link_uid);
+ return size;
+ }
+
+ PacketDescriptor *pcktDescr = getPacketDescriptor (rcptype);
+ if (pcktDescr == NULL)
+ return size;
+ DataDescriptor *dataDescr = pcktDescr->getDataDescriptor ();
+ if (dataDescr == NULL)
+ return size;
+
+ /* omazur: TBR START -- old experiment */
+ if (rcptype == PROF_PCKT)
+ {
+ // For backward compatibility with older SS12 experiments
+ int numstates = get_params ()->lms_magic_id; // ugly, for old experiments
+ if (numstates > LMS_NUM_SOLARIS_MSTATES)
+ numstates = LMS_NUM_SOLARIS_MSTATES;
+ for (int i = 0; i < numstates; i++)
+ if (check_mstate ((char*) rcp, pcktDescr, PROP_UCPU + i))
+ readPacket (dwin, (char*) rcp, pcktDescr, dataDescr, PROP_UCPU + i,
+ size);
+ }
+ else
+ readPacket (dwin, (char*) rcp, pcktDescr, dataDescr, 0, size);
+ return size;
+}
+
+void
+Experiment::readPacket (Data_window *dwin, char *ptr, PacketDescriptor *pDscr,
+ DataDescriptor *dDscr, int arg, uint64_t pktsz)
+{
+ union Value
+ {
+ uint32_t val32;
+ uint64_t val64;
+ } *v;
+
+ long recn = dDscr->addRecord ();
+ Vector<FieldDescr*> *fields = pDscr->getFields ();
+ int sz = fields->size ();
+ for (int i = 0; i < sz; i++)
+ {
+ FieldDescr *field = fields->fetch (i);
+ v = (Value*) (ptr + field->offset);
+ if (field->propID == arg)
+ {
+ dDscr->setValue (PROP_NTICK, recn, dwin->decode (v->val32));
+ dDscr->setValue (PROP_MSTATE, recn, (uint32_t) (field->propID - PROP_UCPU));
+ }
+ if (field->propID == PROP_THRID || field->propID == PROP_LWPID
+ || field->propID == PROP_CPUID)
+ {
+ uint64_t tmp64 = 0;
+ switch (field->vtype)
+ {
+ case TYPE_INT32:
+ case TYPE_UINT32:
+ tmp64 = dwin->decode (v->val32);
+ break;
+ case TYPE_INT64:
+ case TYPE_UINT64:
+ tmp64 = dwin->decode (v->val64);
+ break;
+ case TYPE_STRING:
+ case TYPE_DOUBLE:
+ case TYPE_OBJ:
+ case TYPE_DATE:
+ case TYPE_BOOL:
+ case TYPE_ENUM:
+ case TYPE_LAST:
+ case TYPE_NONE:
+ break;
+ }
+ uint32_t tag = mapTagValue ((Prop_type) field->propID, tmp64);
+ dDscr->setValue (field->propID, recn, tag);
+ }
+ else
+ {
+ switch (field->vtype)
+ {
+ case TYPE_INT32:
+ case TYPE_UINT32:
+ dDscr->setValue (field->propID, recn, dwin->decode (v->val32));
+ break;
+ case TYPE_INT64:
+ case TYPE_UINT64:
+ dDscr->setValue (field->propID, recn, dwin->decode (v->val64));
+ break;
+ case TYPE_STRING:
+ {
+ int len = (int) (pktsz - field->offset);
+ if ((len > 0) && (ptr[field->offset] != 0))
+ {
+ StringBuilder *sb = new StringBuilder ();
+ sb->append (ptr + field->offset, 0, len);
+ dDscr->setObjValue (field->propID, recn, sb);
+ }
+ break;
+ }
+ // ignoring the following cases (why?)
+ case TYPE_DOUBLE:
+ case TYPE_OBJ:
+ case TYPE_DATE:
+ case TYPE_BOOL:
+ case TYPE_ENUM:
+ case TYPE_LAST:
+ case TYPE_NONE:
+ break;
+ }
+ }
+ }
+}
+
+#define PROG_BYTE 102400 // update progress bar every PROG_BYTE bytes
+
+void
+Experiment::read_data_file (const char *fname, const char *msg)
+{
+ Data_window::Span span;
+ off64_t total_len, remain_len;
+ char *progress_bar_msg;
+ int progress_bar_percent = -1;
+
+ char *data_file_name = dbe_sprintf (NTXT ("%s/%s"), expt_name, fname);
+ Data_window *dwin = new Data_window (data_file_name);
+ // Here we can call stat(data_file_name) to get file size,
+ // and call a function to reallocate vectors for clock profiling data
+ free (data_file_name);
+ if (dwin->not_opened ())
+ {
+ delete dwin;
+ return;
+ }
+ dwin->need_swap_endian = need_swap_endian;
+
+ span.offset = 0;
+ span.length = dwin->get_fsize ();
+ total_len = remain_len = span.length;
+ progress_bar_msg = dbe_sprintf (NTXT ("%s %s"), NTXT (" "), msg);
+ invalid_packet = 0;
+ for (;;)
+ {
+ uint64_t pcktsz = readPacket (dwin, &span);
+ if (pcktsz == 0)
+ break;
+ // Update progress bar
+ if ((span.length <= remain_len) && (remain_len > 0))
+ {
+ int percent = (int) (100 * (total_len - remain_len) / total_len);
+ if (percent > progress_bar_percent)
+ {
+ progress_bar_percent += 10;
+ theApplication->set_progress (percent, progress_bar_msg);
+ }
+ remain_len -= PROG_BYTE;
+ }
+ span.length -= pcktsz;
+ span.offset += pcktsz;
+ }
+ delete dwin;
+
+ if (invalid_packet)
+ {
+ StringBuilder sb;
+ sb.sprintf (GTXT ("WARNING: There are %d invalid packet(s) in the %s file"),
+ invalid_packet, fname);
+ Emsg *m = new Emsg (CMSG_WARN, sb);
+ warnq->append (m);
+ }
+
+ theApplication->set_progress (0, NTXT (""));
+ free (progress_bar_msg);
+}
+
+int
+Experiment::read_overview_file ()
+{
+ char *data_file_name = dbe_sprintf ("%s/%s", expt_name, SP_OVERVIEW_FILE);
+ Data_window *dwin = new Data_window (data_file_name);
+ free (data_file_name);
+ if (dwin->not_opened ())
+ {
+ delete dwin;
+ return 0;
+ }
+ dwin->need_swap_endian = need_swap_endian;
+ newDataDescriptor (DATA_SAMPLE);
+
+ Data_window::Span span;
+ span.offset = 0;
+ span.length = dwin->get_fsize ();
+
+ PrUsage *data = NULL, *data_prev = NULL;
+ Sample *sample;
+ int sample_number = 1;
+
+ int64_t prDataSize;
+ if (wsize == W32)
+ prDataSize = PrUsage::bind32Size ();
+ else
+ prDataSize = PrUsage::bind64Size ();
+
+ while (span.length > 0)
+ {
+ data_prev = data;
+ data = new PrUsage ();
+
+ void *dw = dwin->bind (&span, prDataSize);
+ if ((dw == NULL) || (prDataSize > span.length))
+ {
+ Emsg *m = new Emsg (CMSG_ERROR, GTXT ("Warning: overview data file can't be read"));
+ warnq->append (m);
+ status = FAILURE;
+ delete dwin;
+ return status;
+ }
+
+ if (wsize == W32)
+ data->bind32 (dw, need_swap_endian);
+ else
+ data->bind64 (dw, need_swap_endian);
+ span.length -= prDataSize;
+ span.offset += prDataSize;
+
+ // Skip the first packet
+ if (data_prev == NULL)
+ continue;
+ if (sample_number > samples->size ())
+ { // inconsistent log/overview
+ sample = new Sample (sample_number);
+ char * label = GTXT ("<unknown>");
+ sample->start_label = dbe_strdup (label);
+ sample->end_label = dbe_strdup (label);
+ samples->append (sample);
+ }
+ else
+ sample = samples->fetch (sample_number - 1);
+ sample_number++;
+ sample->start_time = data_prev->pr_tstamp + 1;
+ sample->end_time = data->pr_tstamp;
+ sample->prusage = data_prev;
+
+ data_prev->pr_rtime = data->pr_rtime - data_prev->pr_rtime;
+ data_prev->pr_utime = data->pr_utime - data_prev->pr_utime;
+ data_prev->pr_stime = data->pr_stime - data_prev->pr_stime;
+ data_prev->pr_ttime = data->pr_ttime - data_prev->pr_ttime;
+ data_prev->pr_tftime = data->pr_tftime - data_prev->pr_tftime;
+ data_prev->pr_dftime = data->pr_dftime - data_prev->pr_dftime;
+ data_prev->pr_kftime = data->pr_kftime - data_prev->pr_kftime;
+ data_prev->pr_ltime = data->pr_ltime - data_prev->pr_ltime;
+ data_prev->pr_slptime = data->pr_slptime - data_prev->pr_slptime;
+ data_prev->pr_wtime = data->pr_wtime - data_prev->pr_wtime;
+ data_prev->pr_stoptime = data->pr_stoptime - data_prev->pr_stoptime;
+ data_prev->pr_minf = data->pr_minf - data_prev->pr_minf;
+ data_prev->pr_majf = data->pr_majf - data_prev->pr_majf;
+ data_prev->pr_nswap = data->pr_nswap - data_prev->pr_nswap;
+ data_prev->pr_inblk = data->pr_inblk - data_prev->pr_inblk;
+ data_prev->pr_oublk = data->pr_oublk - data_prev->pr_oublk;
+ data_prev->pr_msnd = data->pr_msnd - data_prev->pr_msnd;
+ data_prev->pr_mrcv = data->pr_mrcv - data_prev->pr_mrcv;
+ data_prev->pr_sigs = data->pr_sigs - data_prev->pr_sigs;
+ data_prev->pr_vctx = data->pr_vctx - data_prev->pr_vctx;
+ data_prev->pr_ictx = data->pr_ictx - data_prev->pr_ictx;
+ data_prev->pr_sysc = data->pr_sysc - data_prev->pr_sysc;
+ data_prev->pr_ioch = data->pr_ioch - data_prev->pr_ioch;
+ sample->get_usage (); // force validation
+ }
+
+ for (long smpNum = samples->size (); smpNum >= sample_number; smpNum--)
+ {
+ // overview file was truncated
+ sample = samples->remove (smpNum - 1);
+ delete sample;
+ }
+
+ if (data)
+ {
+ // Update last_event so that getEndTime() covers
+ // all loadobjects, too.
+ update_last_event (data->pr_tstamp);
+ delete data;
+ }
+ delete dwin;
+ return SUCCESS;
+}
+
+int
+Experiment::uidNodeCmp (const void *a, const void *b)
+{
+ UIDnode *nd1 = *(UIDnode**) a;
+ UIDnode *nd2 = *(UIDnode**) b;
+ if (nd1->uid == nd2->uid)
+ return 0;
+ return nd1->uid < nd2->uid ? -1 : 1;
+}
+
+static uint64_t
+funcAddr (uint32_t val)
+{
+ if (val == (uint32_t) SP_LEAF_CHECK_MARKER)
+ return (uint64_t) SP_LEAF_CHECK_MARKER;
+ if (val == (uint32_t) SP_TRUNC_STACK_MARKER)
+ return (uint64_t) SP_TRUNC_STACK_MARKER;
+ if (val == (uint32_t) SP_FAILED_UNWIND_MARKER)
+ return (uint64_t) SP_FAILED_UNWIND_MARKER;
+ return val;
+}
+
+Experiment::UIDnode *
+Experiment::add_uid (Data_window *dwin, uint64_t uid, int size,
+ uint32_t *array, uint64_t link_uid)
+{
+ if (uid == (uint64_t) 0)
+ return NULL;
+ uint64_t val = funcAddr (dwin->decode (array[0]));
+ UIDnode *node = NULL;
+ UIDnode *res = get_uid_node (uid, val);
+ UIDnode *next = res;
+ for (int i = 0; i < size; i++)
+ {
+ val = funcAddr (dwin->decode (array[i]));
+ if (next == NULL)
+ {
+ next = get_uid_node ((uint64_t) 0, val);
+ if (node != NULL)
+ node->next = next;
+ }
+ node = next;
+ next = node->next;
+ if (node->val == 0)
+ node->val = val;
+ else if (node->val != val) // Algorithmic error (should never happen)
+ node->val = (uint64_t) SP_LEAF_CHECK_MARKER;
+ }
+ if (next == NULL && link_uid != (uint64_t) 0 && node != NULL)
+ node->next = get_uid_node (link_uid);
+ return res;
+}
+
+Experiment::UIDnode *
+Experiment::add_uid (Data_window *dwin, uint64_t uid, int size, uint64_t *array, uint64_t link_uid)
+{
+ if (uid == (uint64_t) 0)
+ return NULL;
+ UIDnode *node = NULL;
+ uint64_t val = dwin->decode (array[0]);
+ UIDnode *res = get_uid_node (uid, val);
+ UIDnode *next = res;
+ for (int i = 0; i < size; i++)
+ {
+ val = dwin->decode (array[i]);
+ if (next == NULL)
+ {
+ next = get_uid_node ((uint64_t) 0, val);
+ if (node != NULL)
+ node->next = next;
+ }
+ node = next;
+ next = node->next;
+ if (node->val == (uint64_t) 0)
+ node->val = val;
+ else if (node->val != val) // Algorithmic error (should never happen)
+ node->val = (uint64_t) - 1;
+ }
+ if (next == NULL && link_uid != (uint64_t) 0 && node != NULL)
+ node->next = get_uid_node (link_uid);
+ return res;
+}
+
+Experiment::UIDnode *
+Experiment::new_uid_node (uint64_t uid, uint64_t val)
+{
+#define NCHUNKSTEP 1024
+ if (nnodes >= nchunks * CHUNKSZ)
+ {
+ // Reallocate Node chunk array
+ UIDnode** old_chunks = chunks;
+ chunks = new UIDnode*[nchunks + NCHUNKSTEP];
+ memcpy (chunks, old_chunks, nchunks * sizeof (UIDnode*));
+ nchunks += NCHUNKSTEP;
+ delete[] old_chunks;
+ // Clean future pointers
+ memset (&chunks[nchunks - NCHUNKSTEP], 0, NCHUNKSTEP * sizeof (UIDnode*));
+ }
+
+ if (NULL == chunks[nnodes / CHUNKSZ]) // Allocate new chunk for nodes.
+ chunks[nnodes / CHUNKSZ] = new UIDnode[CHUNKSZ];
+ UIDnode *node = &chunks[nnodes / CHUNKSZ][nnodes % CHUNKSZ];
+ node->uid = uid;
+ node->val = val;
+ node->next = NULL;
+ nnodes++;
+ return node;
+}
+
+Experiment::UIDnode *
+Experiment::get_uid_node (uint64_t uid, uint64_t val)
+{
+ int hash = (((int) uid) >> 4) & (HTableSize - 1);
+ if (uid != (uint64_t) 0)
+ {
+ UIDnode *node = uidHTable[hash];
+ if (node && node->uid == uid)
+ return node;
+ }
+ UIDnode *node = new_uid_node (uid, val);
+ if (uid != (uint64_t) 0)
+ {
+ uidHTable[hash] = node;
+ uidnodes->append (node);
+ }
+ return node;
+}
+
+Experiment::UIDnode *
+Experiment::get_uid_node (uint64_t uid)
+{
+ if (uid == (uint64_t) 0)
+ return NULL;
+ int hash = (((int) uid) >> 4) & (HTableSize - 1);
+ UIDnode *node = uidHTable[hash];
+ if (node && node->uid == uid)
+ return node;
+ node = new_uid_node (uid, (uint64_t) 0);
+ node->next = node;
+ return node;
+}
+
+Experiment::UIDnode *
+Experiment::find_uid_node (uint64_t uid)
+{
+ int hash = (((int) uid) >> 4) & (HTableSize - 1);
+ UIDnode *node = uidHTable[hash];
+ if (node && node->uid == uid)
+ return node;
+ int lt = 0;
+ int rt = uidnodes->size () - 1;
+ while (lt <= rt)
+ {
+ int md = (lt + rt) / 2;
+ node = uidnodes->fetch (md);
+ if (node->uid < uid)
+ lt = md + 1;
+ else if (node->uid > uid)
+ rt = md - 1;
+ else
+ {
+ uidHTable[hash] = node;
+ return node;
+ }
+ }
+ return NULL;
+}
+
+int
+Experiment::frUidCmp (const void *a, const void *b)
+{
+ RawFramePacket *fp1 = *(RawFramePacket**) a;
+ RawFramePacket *fp2 = *(RawFramePacket**) b;
+ if (fp1->uid == fp2->uid)
+ return 0;
+ return fp1->uid < fp2->uid ? -1 : 1;
+}
+
+Experiment::RawFramePacket *
+Experiment::find_frame_packet (uint64_t uid)
+{
+ int lt = 0;
+ int rt = frmpckts->size () - 1;
+ while (lt <= rt)
+ {
+ int md = (lt + rt) / 2;
+ RawFramePacket *fp = frmpckts->fetch (md);
+ if (fp->uid < uid)
+ lt = md + 1;
+ else if (fp->uid > uid)
+ rt = md - 1;
+ else
+ return fp;
+ }
+
+ return NULL;
+}
+
+#define FRINFO_CACHEOPT_SIZE_LIMIT 4000000
+#define FRINFO_PIPELINE_SIZE_LIMIT 500000
+#define FRINFO_PIPELINE_NUM_STAGES 3
+
+// Pipelined execution of resolve_frame_info() and add_stack().
+// Since this is the largest time consuming part of loading an experiment (especially
+// so for large java experiments) - executing this part as a 3 stage pipeline can
+// give significant performance gain - and this concept can be aggressively applied
+// to enhance the gain further in future. The three stages are:
+// Phase 1: resolve_frame_info()
+// Phase 2: first part of add_stack() where the native stack is built
+// Phase 3: second part og add_stack() where the java stack is built
+// Phase 4: insert the native and java stacks into the stack map
+// The main thread operates in the first Phase and the other stages are
+// operated by a ssplib sequential queue - The threads working on the queues run concurrently
+// with each other and with the main thread. But within a particular queue, jobs are
+// executed sequentially
+
+
+// This is the second phase of the pipeline of resolve_frame_info and add_stack
+// It works on a chunk of iterations (size CSTCTX_CHUNK_SZ) and invokes add_stack()
+// for each one of them
+
+void
+Experiment::resolve_frame_info (DataDescriptor *dDscr)
+{
+ if (!resolveFrameInfo)
+ return;
+ if (NULL == cstack)
+ return;
+ dDscr->setResolveFrInfoDone ();
+
+ // Check for TSTAMP
+ int propID = dbeSession->getPropIdByName (NTXT ("TSTAMP"));
+ Data *dataTStamp = dDscr->getData (propID);
+ if (dataTStamp == NULL)
+ return;
+
+ propID = dbeSession->getPropIdByName (NTXT ("FRINFO"));
+ Data *dataFrinfo = dDscr->getData (propID);
+
+ propID = dbeSession->getPropIdByName (NTXT ("THRID"));
+ Data *dataThrId = dDscr->getData (propID);
+
+ // We can get frame info either by FRINFO or by [THRID,STKIDX]
+ if (dataFrinfo == NULL)
+ return;
+
+ char *propName = NTXT ("MSTACK");
+ propID = dbeSession->getPropIdByName (propName);
+ PropDescr *prMStack = new PropDescr (propID, propName);
+ prMStack->uname = dbe_strdup (GTXT ("Machine Call Stack"));
+ prMStack->vtype = TYPE_OBJ;
+ dDscr->addProperty (prMStack);
+
+ propName = NTXT ("USTACK");
+ propID = dbeSession->getPropIdByName (propName);
+ PropDescr *prUStack = new PropDescr (propID, propName);
+ prUStack->uname = dbe_strdup (GTXT ("User Call Stack"));
+ prUStack->vtype = TYPE_OBJ;
+ dDscr->addProperty (prUStack);
+
+ propName = NTXT ("XSTACK");
+ propID = dbeSession->getPropIdByName (propName);
+ PropDescr *prXStack = new PropDescr (propID, propName);
+ prXStack->uname = dbe_strdup (GTXT ("Expert Call Stack"));
+ prXStack->vtype = TYPE_OBJ;
+ dDscr->addProperty (prXStack);
+
+ propName = NTXT ("HSTACK");
+ propID = dbeSession->getPropIdByName (propName);
+ PropDescr *prHStack = new PropDescr (propID, propName);
+ prHStack->uname = dbe_strdup (GTXT ("ShowHide Call Stack"));
+ prHStack->vtype = TYPE_OBJ;
+ dDscr->addProperty (prHStack);
+
+ if (has_java)
+ {
+ propName = NTXT ("JTHREAD");
+ propID = dbeSession->getPropIdByName (propName);
+ PropDescr *prJThread = new PropDescr (propID, propName);
+ prJThread->uname = dbe_strdup (GTXT ("Java Thread"));
+ prJThread->vtype = TYPE_OBJ;
+ dDscr->addProperty (prJThread);
+ }
+
+ if (ompavail)
+ {
+ PropDescr *prop = new PropDescr (PROP_OMPSTATE, NTXT ("OMPSTATE"));
+ prop->uname = dbe_strdup (GTXT ("OpenMP state"));
+ prop->vtype = TYPE_UINT32;
+ char * stateNames [OMP_LAST_STATE] = OMP_THR_STATE_STRINGS;
+ char * stateUNames[OMP_LAST_STATE] = OMP_THR_STATE_USTRINGS;
+ for (int ii = 0; ii < OMP_LAST_STATE; ii++)
+ prop->addState (ii, stateNames[ii], stateUNames[ii]);
+ dDscr->addProperty (prop);
+
+ // add PROP_CPRID to profiling data (not same as omptrace's PROP_CPRID)
+ prop = dDscr->getProp (PROP_CPRID);
+ if (prop)
+ {
+ VType_type type = prop->vtype;
+ assert (type == TYPE_OBJ); //see 7040526
+ }
+ prop = new PropDescr (PROP_CPRID, NTXT ("CPRID")); //profiling PROP_CPRID
+ prop->uname = dbe_strdup (GTXT ("OpenMP parallel region"));
+ prop->vtype = TYPE_OBJ;
+ dDscr->addProperty (prop);
+
+ // add PROP_TSKID to profiling data (not same as omptrace's PROP_TSKID)
+ prop = dDscr->getProp (PROP_TSKID);
+ if (prop)
+ {
+ VType_type type = prop->vtype;
+ assert (type == TYPE_OBJ); //see 7040526
+ }
+ prop = new PropDescr (PROP_TSKID, NTXT ("TSKID")); //profiling PROP_TSKID
+ prop->uname = dbe_strdup (GTXT ("OpenMP task"));
+ prop->vtype = TYPE_OBJ;
+ dDscr->addProperty (prop);
+ }
+ char *progress_bar_msg = dbe_sprintf (NTXT ("%s %s: %s"), NTXT (" "),
+ GTXT ("Processing CallStack Data"),
+ get_basename (expt_name));
+ int progress_bar_percent = -1;
+ long deltaReport = 5000;
+ long nextReport = 0;
+
+ long size = dDscr->getSize ();
+ // bool resolve_frinfo_pipelined = size > FRINFO_PIPELINE_SIZE_LIMIT && !ompavail;
+ bool resolve_frinfo_pipelined = false;
+
+ Map<uint64_t, uint64_t> *nodeCache = NULL;
+ Map<uint64_t, uint64_t> *frameInfoCache = NULL;
+ if (size > FRINFO_CACHEOPT_SIZE_LIMIT && dversion == NULL)
+ {
+ frameInfoCache = new CacheMap<uint64_t, uint64_t>;
+ nodeCache = new CacheMap<uint64_t, uint64_t>;
+ }
+
+ pushCnt = popCnt = pushCnt3 = popCnt3 = 0;
+ nPush = nPop = 0;
+
+ FramePacket *fp = NULL;
+ // DbeThreadPool * threadPool = new DbeThreadPool(5);
+ fp = new FramePacket;
+ fp->stack = new Vector<Vaddr>;
+ fp->jstack = new Vector<Vaddr>;
+ fp->ompstack = new Vector<Vaddr>;
+ fp->omp_state = 0;
+ fp->mpi_state = 0;
+
+ // piggyback on post-processing to calculate exp->last_event
+ const hrtime_t _exp_start_time = getStartTime (); // wall clock time
+ hrtime_t exp_duration = getLastEvent () == ZERO_TIME ? 0
+ : getLastEvent () - _exp_start_time; // zero-based
+
+ int missed_fi = 0;
+ int total_fi = 0;
+
+ for (long i = 0; i < size; i++)
+ {
+ if (i == nextReport)
+ {
+ int percent = (int) (i * 100 / size);
+ if (percent > progress_bar_percent)
+ {
+ progress_bar_percent += 10;
+ theApplication->set_progress (percent, progress_bar_msg);
+ }
+ nextReport += deltaReport;
+ }
+
+ uint32_t thrid = (uint32_t) dataThrId->fetchInt (i);
+ hrtime_t tstamp = (hrtime_t) dataTStamp->fetchLong (i);
+
+ // piggyback on post-processing to calculate exp->last_event
+ {
+ hrtime_t relative_timestamp = tstamp - _exp_start_time;
+ if (exp_duration < relative_timestamp)
+ exp_duration = relative_timestamp;
+ }
+ uint64_t frinfo = (uint64_t) dataFrinfo->fetchLong (i);
+
+ RawFramePacket *rfp = NULL;
+ if (frinfo)
+ {
+ // CacheMap does not work with NULL key
+ if (frameInfoCache != NULL)
+ rfp = (RawFramePacket *) frameInfoCache->get (frinfo);
+ }
+ if (rfp == 0)
+ {
+ rfp = find_frame_packet (frinfo);
+ if (rfp != 0)
+ {
+ if (frameInfoCache != NULL)
+ frameInfoCache->put (frinfo, (uint64_t) rfp);
+ }
+ else
+ missed_fi++;
+ total_fi++;
+ }
+
+ // Process OpenMP properties
+ if (ompavail)
+ {
+ fp->omp_state = rfp ? rfp->omp_state : 0;
+ dDscr->setValue (PROP_OMPSTATE, i, fp->omp_state);
+
+ fp->omp_cprid = mapPRid->get (thrid, tstamp, mapPRid->REL_EQLE);
+ void *omp_preg = mapPReg->get (thrid, tstamp, mapPReg->REL_EQLE);
+ if (!omp_preg)
+ {
+ char *idxname = NTXT ("OMP_preg");
+ int idxtype = dbeSession->findIndexSpaceByName (idxname);
+ if (idxtype != -1)
+ {
+ Histable *preg0 = dbeSession->findObjectById (Histable::INDEXOBJ, idxtype, (int64_t) 0);
+ if (preg0)
+ {
+ Vector<Histable*> pregs;
+ pregs.append (preg0);
+ omp_preg = cstack->add_stack (&pregs);
+ mapPReg->put (thrid, tstamp, omp_preg);
+ }
+ }
+ }
+ dDscr->setObjValue (PROP_CPRID, i, omp_preg); //profiling PROP_CPRID
+ void *omp_task = mapTask->get (thrid, tstamp, mapTask->REL_EQLE);
+ if (!omp_task)
+ {
+ char *idxname = NTXT ("OMP_task");
+ int idxtype = dbeSession->findIndexSpaceByName (idxname);
+ if (idxtype != -1)
+ {
+ Histable *task0 = dbeSession->findObjectById (Histable::INDEXOBJ, idxtype, (int64_t) 0);
+ if (task0)
+ {
+ Vector<Histable*> tasks;
+ tasks.append (task0);
+ omp_task = cstack->add_stack (&tasks);
+ mapTask->put (thrid, tstamp, omp_task);
+ }
+ }
+ }
+ dDscr->setObjValue (PROP_TSKID, i, omp_task); //profiling PROP_TSKID
+ }
+ else
+ {
+ fp->omp_state = 0;
+ fp->omp_cprid = 0;
+ }
+
+ // Construct the native stack
+ fp->stack->reset ();
+ Vaddr leafpc = dDscr->getULongValue (PROP_LEAFPC, i);
+ if (leafpc)
+ fp->stack->append (leafpc);
+ UIDnode *node = rfp ? rfp->uidn : NULL;
+ while (node)
+ {
+ if (node->next == node)
+ // this node contains link_uid
+ node = find_uid_node (node->uid);
+ else
+ {
+ fp->stack->append (node->val);
+ node = node->next;
+ }
+ }
+ fp->truncated = 0;
+ int last = fp->stack->size () - 1;
+ if (last >= 0)
+ {
+ switch (fp->stack->fetch (last))
+ {
+ case SP_TRUNC_STACK_MARKER:
+ fp->truncated = (Vaddr) SP_TRUNC_STACK_MARKER;
+ fp->stack->remove (last);
+ break;
+ case SP_FAILED_UNWIND_MARKER:
+ fp->truncated = (Vaddr) SP_FAILED_UNWIND_MARKER;
+ fp->stack->remove (last);
+ break;
+ }
+ }
+
+ // Construct the Java stack
+ fp->jstack->reset ();
+ node = rfp ? rfp->uidj : NULL;
+ while (node)
+ {
+ if (node->next == node)
+ {
+ // this node contains link_uid
+ UIDnode *n = NULL;
+ if (node->uid)
+ {
+ // CacheMap does not work with NULL key
+ if (nodeCache != NULL)
+ n = (UIDnode *) nodeCache->get (node->uid);
+ }
+ if (n == NULL)
+ {
+ n = find_uid_node (node->uid);
+ if (n != NULL)
+ {
+ if (nodeCache != NULL)
+ nodeCache->put (node->uid, (uint64_t) n);
+ }
+ }
+ node = n;
+ }
+ else
+ {
+ fp->jstack->append (node->val);
+ node = node->next;
+ }
+ }
+ fp->jtruncated = false;
+ last = fp->jstack->size () - 1;
+ if (last >= 1 && fp->jstack->fetch (last) == SP_TRUNC_STACK_MARKER)
+ {
+ fp->jtruncated = true;
+ fp->jstack->remove (last);
+ fp->jstack->remove (last - 1);
+ }
+
+ // Construct the OpenMP stack
+ if (ompavail)
+ {
+ fp->ompstack->reset ();
+ if (rfp && rfp->omp_uid)
+ {
+ if (leafpc)
+ fp->ompstack->append (leafpc);
+ node = rfp->omp_uid;
+ while (node)
+ {
+ if (node->next == node)
+ // this node contains link_uid
+ node = find_uid_node (node->uid);
+ else
+ {
+ fp->ompstack->append (node->val);
+ node = node->next;
+ }
+ }
+ fp->omptruncated = false;
+ last = fp->ompstack->size () - 1;
+ if (last >= 0)
+ {
+ switch (fp->ompstack->fetch (last))
+ {
+ case SP_TRUNC_STACK_MARKER:
+ fp->omptruncated = (Vaddr) SP_TRUNC_STACK_MARKER;
+ fp->ompstack->remove (last);
+ break;
+ case SP_FAILED_UNWIND_MARKER:
+ fp->omptruncated = (Vaddr) SP_FAILED_UNWIND_MARKER;
+ fp->ompstack->remove (last);
+ break;
+ }
+ }
+ }
+ }
+ cstack->add_stack (dDscr, i, fp, NULL);
+ }
+
+ // piggyback on post-processing to calculate exp->last_event
+ {
+ hrtime_t exp_end_time = _exp_start_time + exp_duration;
+ update_last_event (exp_end_time);
+ }
+
+ if (missed_fi > 0)
+ {
+ StringBuilder sb;
+ sb.sprintf (
+ GTXT ("*** Warning: %d frameinfo packets are missing from total of %d when resolving %s."),
+ missed_fi, total_fi, dDscr->getName ());
+ warnq->append (new Emsg (CMSG_WARN, sb));
+ }
+
+ // threadPool->wait_group();
+ // delete threadPool;
+ theApplication->set_progress (0, NTXT (""));
+ free (progress_bar_msg);
+ if (!resolve_frinfo_pipelined && fp != NULL)
+ {
+ delete fp->ompstack;
+ delete fp->jstack;
+ delete fp->stack;
+ delete fp;
+ }
+ delete frameInfoCache;
+ frameInfoCache = NULL;
+ delete nodeCache;
+ nodeCache = NULL;
+}
+
+void
+Experiment::post_process ()
+{
+ // update non_paused_time after final update to "last_event"
+ if (resume_ts != MAX_TIME && last_event)
+ {
+ hrtime_t ts = last_event - exp_start_time;
+ hrtime_t delta = ts - resume_ts;
+ non_paused_time += delta;
+ resume_ts = MAX_TIME; // collection is paused
+ }
+
+ // GC: prune events outside of experiment duration, calculate GC duration, update indices
+ int index;
+ GCEvent * gcevent;
+ gc_duration = ZERO_TIME;
+ if (gcevents != NULL)
+ {
+ // delete events that finish before exp_start_time or start after last_event
+ for (int ii = 0; ii < gcevents->size ();)
+ {
+ gcevent = gcevents->fetch (ii);
+ if (gcevent->end - exp_start_time < 0
+ || last_event - gcevent->start < 0)
+ delete gcevents->remove (ii);
+ else
+ ii++;
+ }
+ }
+ Vec_loop (GCEvent*, gcevents, index, gcevent)
+ {
+ gcevent->id = index + 1; // renumber to account for any deleted events
+ if (gcevent->start - exp_start_time < 0 || gcevent->start == ZERO_TIME)
+ // truncate events that start before experiment start
+ gcevent->start = exp_start_time;
+ if (last_event - gcevent->end < 0)
+ // truncate events that end after experiment end
+ gcevent->end = last_event;
+ gc_duration += gcevent->end - gcevent->start;
+ }
+}
+
+Experiment::Exp_status
+Experiment::find_expdir (char *path)
+{
+ // This function checks that the experiment directory
+ // is of the proper form, and accessible
+ struct stat64 sbuf;
+
+ // Save the name
+ expt_name = dbe_strdup (path);
+
+ // Check that the name ends in .er
+ size_t i = strlen (path);
+ if (i > 0 && path[i - 1] == '/')
+ path[--i] = '\0';
+
+ if (i < 4 || strcmp (&path[i - 3], NTXT (".er")) != 0)
+ {
+ Emsg *m = new Emsg (CMSG_FATAL,
+ GTXT ("*** Error: not a valid experiment name"));
+ errorq->append (m);
+ status = FAILURE;
+ return FAILURE;
+ }
+
+ // Check if new directory structure (i.e., no pointer file)
+ if (dbe_stat (path, &sbuf))
+ {
+ Emsg *m = new Emsg (CMSG_FATAL, GTXT ("*** Error: experiment not found"));
+ errorq->append (m);
+ status = FAILURE;
+ return FAILURE;
+ }
+ if (S_ISDIR (sbuf.st_mode) == 0)
+ {
+ // ignore pointer-file experiments
+ Emsg *m = new Emsg (CMSG_FATAL,
+ GTXT ("*** Error: experiment was recorded with an earlier version, and can not be read"));
+ errorq->append (m);
+ obsolete = 1;
+ status = FAILURE;
+ return FAILURE;
+ }
+ return SUCCESS;
+}
+
+void
+Experiment::purge ()
+{
+ // This routine will purge all of the caches of releasable storage.
+ for (int i = 0; i < dataDscrs->size (); ++i)
+ {
+ DataDescriptor *dataDscr = dataDscrs->fetch (i);
+ if (dataDscr == NULL)
+ continue;
+ dataDscr->reset ();
+ }
+ delete cstack;
+ delete cstackShowHide;
+ cstack = CallStack::getInstance (this);
+ cstackShowHide = CallStack::getInstance (this);
+}
+
+void
+Experiment::resetShowHideStack ()
+{
+ delete cstackShowHide;
+ cstackShowHide = CallStack::getInstance (this);
+}
+
+#define GET_INT_VAL(v, s, len) \
+ for (v = len = 0; isdigit(*s); s++, len++) { v = v * 10 + (*s -'0'); }
+
+static int
+dir_name_cmp (const void *a, const void *b)
+{
+ char *s1 = *((char **) a);
+ char *s2 = *((char **) b);
+ while (*s1)
+ {
+ if (isdigit (*s1) && isdigit (*s2))
+ {
+ int v1, v2, len1, len2;
+ GET_INT_VAL (v1, s1, len1);
+ GET_INT_VAL (v2, s2, len2);
+ if (v1 != v2)
+ return v1 - v2;
+ if (len1 != len2)
+ return len2 - len1;
+ continue;
+ }
+ if (*s1 != *s2)
+ break;
+ s1++;
+ s2++;
+ }
+ return *s1 - *s2;
+}
+
+Vector<char*> *
+Experiment::get_descendants_names ()
+{
+ char *dir_name = get_expt_name ();
+ if (dir_name == NULL)
+ return NULL;
+ DIR *exp_dir = opendir (dir_name);
+ if (exp_dir == NULL)
+ return NULL;
+ Vector<char*> *exp_names = new Vector<char*>();
+ for (struct dirent *entry = readdir (exp_dir); entry;
+ entry = readdir (exp_dir))
+ {
+ if (entry->d_name[0] == '_' || strncmp (entry->d_name, "M_r", 3) == 0)
+ {
+ char *dpath = dbe_sprintf (NTXT ("%s/%s"), dir_name, entry->d_name);
+ struct stat64 sbuf;
+ if (dbe_stat (dpath, &sbuf) == 0 && S_ISDIR (sbuf.st_mode))
+ exp_names->append (dpath);
+ else
+ free (dpath);
+ }
+ }
+ closedir (exp_dir);
+ if (exp_names->size () == 0)
+ {
+ delete exp_names;
+ return NULL;
+ }
+ exp_names->sort (dir_name_cmp);
+ return exp_names;
+}
+
+bool
+Experiment::create_dir (char *dname)
+{
+ if (mkdir (dname, S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH) == 0)
+ {
+ return true;
+ }
+ struct stat64 sbuf;
+ if (dbe_stat (dname, &sbuf) != 0 || S_ISDIR (sbuf.st_mode) == 0)
+ {
+ char *buf = dbe_sprintf (GTXT ("Unable to create directory `%s'\n"),
+ dname);
+ errorq->append (new Emsg (CMSG_ERROR, buf));
+ free (buf);
+ return false;
+ }
+ return true;
+}
+
+char *
+Experiment::get_arch_name ()
+{
+ if (arch_name == NULL)
+ {
+ // Determine the master experiment directory.
+ // omazur: should do it in a less hacky way. XXXX
+ char *ptr = strstr_r (expt_name, DESCENDANT_EXPT_KEY);
+ ptr = ptr ? ptr + 3 : expt_name + strlen (expt_name);
+ arch_name = dbe_sprintf (NTXT ("%.*s/%s"), (int) (ptr - expt_name),
+ expt_name, SP_ARCHIVES_DIR);
+ }
+ return arch_name;
+}
+
+char *
+Experiment::get_fndr_arch_name ()
+{
+ if (fndr_arch_name == NULL)
+ // Determine the founder experiment directory.
+ fndr_arch_name = dbe_strdup (get_arch_name ());
+ return fndr_arch_name;
+}
+
+enum
+{
+ HASH_NAME_LEN = 11 // (64 / 6 + 1) = 11
+};
+
+static char *
+get_hash_string (char buf[HASH_NAME_LEN + 1], uint64_t hash)
+{
+ static const char *har =
+ "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_";
+ for (int i = 0; i < HASH_NAME_LEN; i++)
+ {
+ buf[i] = har[hash & 0x3f];
+ hash = hash >> 6;
+ }
+ buf[HASH_NAME_LEN] = 0;
+ return buf;
+}
+
+char *
+Experiment::getNameInArchive (const char *fname, bool archiveFile)
+{
+ char *aname = get_archived_name (fname, archiveFile);
+ char *ret = dbe_sprintf (NTXT ("%s/%s"), get_arch_name (), aname);
+ free (aname);
+ return ret;
+}
+
+#define MAX_ARCHIVE_FILENAME_LEN (256 - HASH_NAME_LEN - 2)
+
+char *
+Experiment::get_archived_name (const char *fname, bool archiveFile)
+{
+ char *bname = get_basename (fname);
+
+ // dirname_hash:
+ char dirnameHash[HASH_NAME_LEN + 1];
+ // Treat "a.out" and "./a.out" equally
+ uint64_t hash = bname != fname ? crc64 (fname, bname - fname)
+ : crc64 (NTXT ("./"), 2);
+ get_hash_string (dirnameHash, hash);
+
+ char *ret;
+ long bname_len = dbe_sstrlen (bname);
+ if (bname_len > MAX_ARCHIVE_FILENAME_LEN)
+ {
+ char basenameHash[HASH_NAME_LEN + 1];
+ hash = crc64 (bname, bname_len);
+ get_hash_string (basenameHash, hash);
+ ret = dbe_sprintf ("%.*s%c%s_%s",
+ MAX_ARCHIVE_FILENAME_LEN - HASH_NAME_LEN - 1,
+ bname, archiveFile ? '.' : '_',
+ dirnameHash, basenameHash);
+ }
+ else
+ ret = dbe_sprintf ("%s%c%s", bname, archiveFile ? '.' : '_', dirnameHash);
+ return ret;
+}
+
+char *
+Experiment::checkFileInArchive (const char *fname, bool archiveFile)
+{
+ if (archiveMap)
+ {
+ char *aname = get_archived_name (fname, archiveFile);
+ DbeFile *df = archiveMap->get (aname);
+ free (aname);
+ if (df)
+ return strdup (df->get_location ());
+ return NULL;
+ }
+ if (founder_exp)
+ return founder_exp->checkFileInArchive (fname, archiveFile);
+ return NULL;
+}
+
+
+// Comparing SegMem
+
+static int
+SegMemCmp (const void *a, const void *b)
+{
+ SegMem *item1 = *((SegMem **) a);
+ SegMem *item2 = *((SegMem **) b);
+ return item1->unload_time > item2->unload_time ? 1 :
+ item1->unload_time == item2->unload_time ? 0 : -1;
+}
+
+SegMem*
+Experiment::update_ts_in_maps (Vaddr addr, hrtime_t ts)
+{
+ Vector<SegMem *> *segMems = (Vector<SegMem *> *) maps->values ();
+ if (!segMems->is_sorted ())
+ {
+ Dprintf (DEBUG_MAPS, NTXT ("update_ts_in_maps: segMems.size=%lld\n"), (long long) segMems->size ());
+ segMems->sort (SegMemCmp);
+ }
+ for (int i = 0, sz = segMems ? segMems->size () : 0; i < sz; i++)
+ {
+ SegMem *sm = segMems->fetch (i);
+ if (ts < sm->unload_time)
+ {
+ for (; i < sz; i++)
+ {
+ sm = segMems->fetch (i);
+ if ((addr >= sm->base) && (addr < sm->base + sm->size))
+ {
+ Dprintf (DEBUG_MAPS,
+ "update_ts_in_maps: old:%u.%09u -> %u.%09u addr=0x%08llx size=%lld\n",
+ (unsigned) (sm->load_time / NANOSEC),
+ (unsigned) (sm->load_time % NANOSEC),
+ (unsigned) (ts / NANOSEC), (unsigned) (ts % NANOSEC),
+ (unsigned long long) sm->base, (long long) sm->size);
+ maps->remove (sm->base, sm->load_time);
+ sm->load_time = ts;
+ maps->insert (sm->base, ts, sm);
+ return sm;
+ }
+ }
+ }
+ }
+ Dprintf (DEBUG_MAPS, "update_ts_in_maps: NOT FOUND %u.%09u addr=0x%08llx\n",
+ (unsigned) (ts / NANOSEC), (unsigned) (ts % NANOSEC),
+ (unsigned long long) addr);
+ return NULL;
+}
+
+DbeInstr*
+Experiment::map_Vaddr_to_PC (Vaddr addr, hrtime_t ts)
+{
+ // Look up in the hash table first
+ int hash = (((int) addr) >> 8) & (HTableSize - 1);
+ SegMem *si = smemHTable[hash];
+ if (si == NULL || addr < si->base || addr >= si->base + si->size
+ || ts < si->load_time || ts >= si->unload_time)
+ {
+ // Not in the hash table
+ si = (SegMem*) maps->locate (addr, ts);
+ if (si == NULL || addr < si->base || addr >= si->base + si->size
+ || ts < si->load_time || ts >= si->unload_time)
+ {
+ si = update_ts_in_maps (addr, ts);
+ if (si == NULL)
+ return dbeSession->get_Unknown_Function ()->find_dbeinstr (PCInvlFlag, addr);
+ }
+ smemHTable[hash] = si;
+ }
+
+ // Calculate the file offset of 'addr'
+ uint64_t f_offset = si->get_file_offset () + (addr - si->base);
+
+ DbeInstr *instr;
+ if (si->obj->get_type () == Histable::LOADOBJECT)
+ {
+ LoadObject *lo = (LoadObject*) si->obj;
+ lo->sync_read_stabs ();
+ instr = lo->find_dbeinstr (f_offset);
+ }
+ else
+ {
+ int hash2 = ((((int) addr) & 0xFFFC00) | (((int) f_offset) >> 2))
+ & (HTableSize - 1);
+ instr = instHTable[hash2];
+ if (instr == NULL || instr->func != si->obj || instr->addr != f_offset)
+ {
+ // Not in the hash table
+ Function *fp = (Function *) si->obj;
+ instr = fp->find_dbeinstr (0, f_offset);
+ instHTable[hash2] = instr;
+ }
+ }
+ if (!instr->func->isUsed)
+ {
+ instr->func->isUsed = true;
+ instr->func->module->isUsed = true;
+ instr->func->module->loadobject->isUsed = true;
+ }
+ return instr;
+}
+
+Sample *
+Experiment::map_event_to_Sample (hrtime_t ts)
+{
+ Sample *sample;
+ int index;
+
+ // Check if the last used sample is the right one,
+ // if not then find it.
+ if (sample_last_used && ts >= sample_last_used->start_time
+ && ts <= sample_last_used->end_time)
+ return sample_last_used;
+
+ Vec_loop (Sample*, samples, index, sample)
+ {
+ if ((ts >= sample->start_time) &&
+ (ts <= sample->end_time))
+ {
+ sample_last_used = sample;
+ return sample;
+ }
+ }
+ return (Sample*) NULL;
+}
+
+GCEvent *
+Experiment::map_event_to_GCEvent (hrtime_t ts)
+{
+ GCEvent *gcevent;
+ int index;
+
+ // Check if the last used sample is the right one,
+ // if not then find it.
+ if (gcevent_last_used && ts >= gcevent_last_used->start
+ && ts <= gcevent_last_used->end)
+ return gcevent_last_used;
+ Vec_loop (GCEvent*, gcevents, index, gcevent)
+ {
+ if ((ts >= gcevent->start) &&
+ (ts <= gcevent->end))
+ {
+ gcevent_last_used = gcevent;
+ return gcevent;
+ }
+ }
+ return (GCEvent*) NULL;
+}
+
+DbeInstr*
+Experiment::map_jmid_to_PC (Vaddr mid, int bci, hrtime_t ts)
+{
+ if (mid == 0 || jmaps == NULL)
+ // special case: no Java stack was recorded, bci - error code
+ return dbeSession->get_JUnknown_Function ()->find_dbeinstr (0, bci);
+
+ JMethod *jmthd = jmidHTable->get (mid);
+ if (jmthd == NULL)
+ {
+ jmthd = (JMethod *) jmaps->locate_exact_match (mid, ts);
+ if (jmthd)
+ jmidHTable->put (mid, jmthd);
+ }
+ if (jmthd == NULL || jmthd->get_type () != Histable::FUNCTION)
+ return dbeSession->get_JUnknown_Function ()->find_dbeinstr (0, (uint64_t) mid);
+ return jmthd->find_dbeinstr (0, bci);
+}
+
+Emsg *
+Experiment::fetch_comments ()
+{
+ return commentq->fetch ();
+}
+
+Emsg *
+Experiment::fetch_runlogq ()
+{
+ return runlogq->fetch ();
+}
+
+Emsg *
+Experiment::fetch_errors ()
+{
+ return errorq->fetch ();
+}
+
+Emsg *
+Experiment::fetch_warnings ()
+{
+ return warnq->fetch ();
+}
+
+Emsg *
+Experiment::fetch_notes ()
+{
+ return notesq->fetch ();
+}
+
+Emsg *
+Experiment::fetch_ifreq ()
+{
+ return ifreqq->fetch ();
+}
+
+Emsg *
+Experiment::fetch_pprocq ()
+{
+ return pprocq->fetch ();
+}
+
+int
+Experiment::read_dyntext_file ()
+{
+ char *data_file_name = dbe_sprintf ("%s/%s", expt_name, SP_DYNTEXT_FILE);
+ Data_window *dwin = new Data_window (data_file_name);
+ if (dwin->not_opened ())
+ {
+ free (data_file_name);
+ delete dwin;
+ return 1;
+ }
+ dwin->need_swap_endian = need_swap_endian;
+
+ Function *fp = NULL;
+ char *progress_msg = NULL; // Message for the progress bar
+ for (int64_t offset = 0;;)
+ {
+ DT_common *cpckt = (DT_common *) dwin->bind (offset, sizeof (DT_common));
+ if (cpckt == NULL)
+ break;
+ size_t cpcktsize = dwin->decode (cpckt->size);
+ cpckt = (DT_common *) dwin->bind (offset, cpcktsize);
+ if (cpckt == NULL)
+ break;
+ switch (dwin->decode (cpckt->type))
+ {
+ case DT_HEADER:
+ {
+ DT_header *hdr = (DT_header*) cpckt;
+ hrtime_t ts = dwin->decode (hdr->time) + exp_start_time;
+ SegMem *si = (SegMem*) maps->locate (dwin->decode (hdr->vaddr), ts);
+ fp = si ? (Function *) si->obj : NULL;
+ if (fp && (fp->get_type () != Histable::FUNCTION
+ || !(fp->flags & FUNC_FLAG_DYNAMIC)))
+ fp = NULL;
+ break;
+ }
+ case DT_CODE:
+ if (fp)
+ {
+ fp->img_fname = data_file_name;
+ fp->img_offset = offset + sizeof (DT_common);
+ if ((platform != Intel) && (platform != Amd64))
+ { //ARCH(SPARC)
+ // Find out 'save' instruction address for SPARC
+ char *ptr = ((char*) cpckt) + sizeof (DT_common);
+ size_t img_size = cpcktsize - sizeof (DT_common);
+ for (size_t i = 0; i < img_size; i += 4)
+ if (ptr[i] == (char) 0x9d && ptr[i + 1] == (char) 0xe3)
+ {
+ fp->save_addr = i;
+ break;
+ }
+ }
+ }
+ break;
+ case DT_SRCFILE:
+ if (fp)
+ {
+ char *srcname = dbe_strndup (((char*) cpckt) + sizeof (DT_common),
+ cpcktsize - sizeof (DT_common));
+ LoadObject *ds = fp->module ? fp->module->loadobject : NULL;
+ assert (ds != NULL);
+ Module *mod = dbeSession->createModule (ds, NULL);
+ mod->set_file_name (srcname);
+ //}
+ if (fp->module)
+ {
+ // It's most likely (unknown). Remove fp from it.
+ long idx = fp->module->functions->find (fp);
+ if (idx >= 0)
+ fp->module->functions->remove (idx);
+ }
+ fp->module = mod;
+ mod->functions->append (fp);
+ }
+ break;
+ case DT_LTABLE:
+ if (fp)
+ {
+ DT_lineno *ltab = (DT_lineno*) ((char*) cpckt + sizeof (DT_common));
+ size_t sz = (cpcktsize - sizeof (DT_common)) / sizeof (DT_lineno);
+ if (sz <= 0)
+ break;
+ // Take care of the progress bar
+ static int percent = 0;
+ static long deltaReport = sz / 100; // 1000;
+ static long nextReport = 0;
+ static long progress_count = 0;
+ fp->pushSrcFile (fp->getDefSrc (), 0);
+ for (size_t i = 0; i < sz; i++)
+ {
+ int lineno = dwin->decode (ltab[i].lineno);
+ if (fp->usrfunc != NULL)
+ {
+ // Update progress bar
+ if (dbeSession->is_interactive ())
+ {
+ if (progress_count == nextReport)
+ {
+ if (percent < 99)
+ {
+ percent++;
+ if (NULL == progress_msg)
+ {
+ progress_msg = dbe_sprintf (GTXT ("Processing Dynamic Text: %s"),
+ get_basename (expt_name));
+ }
+ theApplication->set_progress (percent, progress_msg);
+ nextReport += deltaReport;
+ }
+ }
+ progress_count++;
+ }
+ DbeLine *dbeline = fp->usrfunc->mapPCtoLine (lineno, NULL);
+ lineno = dbeline != NULL ? dbeline->lineno : -1;
+ }
+ fp->add_PC_info (dwin->decode (ltab[i].offset), lineno);
+ }
+ fp->popSrcFile ();
+ }
+ break;
+ default:
+ // skip unknown records
+ break;
+ }
+ offset += cpcktsize;
+ }
+ free (progress_msg);
+ free (data_file_name);
+ delete dwin;
+ return 0;
+}
+
+uint32_t
+Experiment::mapTagValue (Prop_type prop, uint64_t value)
+{
+ Vector<Histable*> *objs = tagObjs->fetch (prop);
+ int lt = 0;
+ int rt = objs->size () - 1;
+ while (lt <= rt)
+ {
+ int md = (lt + rt) / 2;
+ Other *obj = (Other*) objs->fetch (md);
+ if (obj->value64 < value)
+ lt = md + 1;
+ else if (obj->value64 > value)
+ rt = md - 1;
+ else
+ return obj->tag;
+ }
+
+ uint32_t tag;
+ if (sparse_threads && (prop == PROP_THRID || prop == PROP_LWPID))
+ tag = objs->size () + 1; // "+ 1" related to 7038295
+ else
+ tag = (int) value; // truncation; See 6788767
+
+ Other *obj = new Other ();
+ obj->value64 = value;
+ obj->tag = tag;
+ if (lt == objs->size ())
+ objs->append (obj);
+ else
+ objs->insert (lt, obj);
+
+ // Update min and max tags
+ if (prop == PROP_LWPID)
+ {
+ if ((uint64_t) tag < min_lwp)
+ min_lwp = (uint64_t) tag;
+ if ((uint64_t) tag > max_lwp)
+ max_lwp = (uint64_t) tag;
+ lwp_cnt++;
+ }
+ else if (prop == PROP_THRID)
+ {
+ if ((uint64_t) tag < min_thread)
+ min_thread = (uint64_t) tag;
+ if ((uint64_t) tag > max_thread)
+ max_thread = (uint64_t) tag;
+ thread_cnt++;
+ }
+ else if (prop == PROP_CPUID)
+ {
+ // On Solaris 8, we don't get CPU id -- don't change
+ if (value != (uint64_t) - 1)
+ {//YXXX is this related only to solaris 8?
+ if ((uint64_t) tag < min_cpu)
+ min_cpu = (uint64_t) tag;
+ if ((uint64_t) tag > max_cpu)
+ max_cpu = (uint64_t) tag;
+ }
+ cpu_cnt++;
+ }
+ return obj->tag;
+}
+
+Vector<Histable*> *
+Experiment::getTagObjs (Prop_type prop)
+{
+ return tagObjs->fetch (prop);
+}
+
+Histable *
+Experiment::getTagObj (Prop_type prop, uint32_t tag)
+{
+ Vector<Histable*> *objs = tagObjs->fetch (prop);
+ if (objs == NULL)
+ return NULL;
+ for (int i = 0; i < objs->size (); i++)
+ {
+ Other *obj = (Other*) objs->fetch (i);
+ if (obj->tag == tag)
+ return obj;
+ }
+ return NULL;
+}
+
+JThread *
+Experiment::map_pckt_to_Jthread (uint32_t tid, hrtime_t tstamp)
+{
+ if (!has_java)
+ return JTHREAD_DEFAULT;
+ int lt = 0;
+ int rt = jthreads_idx->size () - 1;
+ while (lt <= rt)
+ {
+ int md = (lt + rt) / 2;
+ JThread *jthread = jthreads_idx->fetch (md);
+ if (jthread->tid < tid)
+ lt = md + 1;
+ else if (jthread->tid > tid)
+ rt = md - 1;
+ else
+ {
+ for (; jthread; jthread = jthread->next)
+ if (tstamp >= jthread->start && tstamp < jthread->end)
+ return jthread;
+ break;
+ }
+ }
+
+ return JTHREAD_NONE;
+}
+
+JThread*
+Experiment::get_jthread (uint32_t tid)
+{
+ if (!has_java)
+ return JTHREAD_DEFAULT;
+ int lt = 0;
+ int rt = jthreads_idx->size () - 1;
+ while (lt <= rt)
+ {
+ int md = (lt + rt) / 2;
+ JThread *jthread = jthreads_idx->fetch (md);
+ if (jthread->tid < tid)
+ lt = md + 1;
+ else if (jthread->tid > tid)
+ rt = md - 1;
+ else
+ {
+ JThread *jthread_first = jthread;
+ while ((jthread = jthread->next) != NULL)
+ if (!jthread->is_system () &&
+ jthread->jthr_id < jthread_first->jthr_id)
+ jthread_first = jthread;
+ return jthread_first;
+ }
+ }
+
+ return JTHREAD_NONE;
+}
+
+// SS12 experiment
+DataDescriptor *
+Experiment::newDataDescriptor (int data_id, int flags,
+ DataDescriptor *master_dDscr)
+{
+ DataDescriptor *dataDscr = NULL;
+ if (data_id >= 0 && data_id < dataDscrs->size ())
+ {
+ dataDscr = dataDscrs->fetch (data_id);
+ if (dataDscr != NULL)
+ return dataDscr;
+ }
+
+ assert (data_id >= 0 && data_id < DATA_LAST);
+ const char *nm = get_prof_data_type_name (data_id);
+ const char *uname = get_prof_data_type_uname (data_id);
+
+ if (master_dDscr)
+ dataDscr = new DataDescriptor (data_id, nm, uname, master_dDscr);
+ else
+ dataDscr = new DataDescriptor (data_id, nm, uname, flags);
+ dataDscrs->store (data_id, dataDscr);
+ return dataDscr;
+}
+
+Vector<DataDescriptor*> *
+Experiment::getDataDescriptors ()
+{
+ Vector<DataDescriptor*> *result = new Vector<DataDescriptor*>;
+ for (int i = 0; i < dataDscrs->size (); ++i)
+ {
+ DataDescriptor *dd;
+ dd = get_raw_events (i); // force data fetch
+ if (dd != NULL)
+ result->append (dd);
+ }
+ return result;
+}
+
+DataDescriptor *
+Experiment::getDataDescriptor (int data_id)
+{
+ if (data_id < 0 || data_id >= dataDscrs->size ())
+ return NULL;
+ return dataDscrs->fetch (data_id);
+}
+
+PacketDescriptor *
+Experiment::newPacketDescriptor (int kind, DataDescriptor *dDscr)
+{
+ PacketDescriptor *pDscr = new PacketDescriptor (dDscr);
+ pcktDscrs->store (kind, pDscr);
+ return pDscr;
+}
+
+PacketDescriptor *
+Experiment::getPacketDescriptor (int kind)
+{
+ if (kind < 0 || kind >= pcktDscrs->size ())
+ return NULL;
+ return pcktDscrs->fetch (kind);
+}
+
+void
+Experiment::set_clock (int clk)
+{
+ if (clk > 0)
+ {
+ if (maxclock < clk)
+ {
+ maxclock = clk;
+ clock = maxclock;
+ }
+ if (minclock == 0 || minclock > clk)
+ minclock = clk;
+ }
+}
+
+bool
+JThread::is_system ()
+{
+ if (group_name == NULL)
+ return false;
+ return strcmp (group_name, NTXT ("system")) == 0;
+}
+
+void
+Experiment::dump_stacks (FILE *outfile)
+{
+ cstack->print (outfile);
+}
+
+void
+Experiment::dump_map (FILE *outfile)
+{
+ int index;
+ SegMem *s;
+ fprintf (outfile, GTXT ("Experiment %s\n"), get_expt_name ());
+ fprintf (outfile, GTXT ("Address Size (hex) Load time Unload time Checksum Name\n"));
+ Vec_loop (SegMem*, seg_items, index, s)
+ {
+ timestruc_t load;
+ timestruc_t unload;
+ hr2timestruc (&load, (s->load_time - exp_start_time));
+ if (load.tv_nsec < 0)
+ {
+ load.tv_sec--;
+ load.tv_nsec += NANOSEC;
+ }
+ if (s->unload_time == MAX_TIME)
+ {
+ unload.tv_sec = 0;
+ unload.tv_nsec = 0;
+ }
+ else
+ hr2timestruc (&unload, (s->unload_time - exp_start_time));
+ if (load.tv_nsec < 0)
+ {
+ load.tv_sec--;
+ load.tv_nsec += NANOSEC;
+ }
+ fprintf (outfile,
+ "0x%08llx %8lld (0x%08llx) %5ld.%09ld %5ld.%09ld \"%s\"\n",
+ s->base, s->size, s->size, load.tv_sec, load.tv_nsec,
+ unload.tv_sec, unload.tv_nsec, s->obj->get_name ());
+ }
+ fprintf (outfile, NTXT ("\n"));
+}
+
+/**
+ * Copy file to archive
+ * @param name
+ * @param aname
+ * @param hide_msg
+ * @return 0 - success, 1 - error
+ */
+int
+Experiment::copy_file_to_archive (const char *name, const char *aname, int hide_msg)
+{
+ errno = 0;
+ int fd_w = open64 (aname, O_WRONLY | O_CREAT | O_EXCL, 0644);
+ if (fd_w == -1)
+ {
+ if (errno == EEXIST)
+ return 0;
+ fprintf (stderr, GTXT ("er_archive: unable to copy `%s': %s\n"),
+ name, STR (strerror (errno)));
+ return 1;
+ }
+
+ if (dbe_stat_file (name, NULL) != 0)
+ {
+ fprintf (stderr, GTXT ("er_archive: cannot access file `%s': %s\n"),
+ name, STR (strerror (errno)));
+ close (fd_w);
+ return 1;
+ }
+
+ int fd_r = open64 (name, O_RDONLY);
+ if (fd_r == -1)
+ {
+ fprintf (stderr, GTXT ("er_archive: unable to open `%s': %s\n"),
+ name, strerror (errno));
+ close (fd_w);
+ unlink (aname);
+ return 1;
+ }
+
+ if (!hide_msg)
+ fprintf (stderr, GTXT ("Copying `%s' to `%s'\n"), name, aname);
+ bool do_unlink = false;
+ for (;;)
+ {
+ unsigned char buf[65536];
+ int n, n1;
+ n = (int) read (fd_r, (void *) buf, sizeof (buf));
+ if (n <= 0)
+ break;
+ n1 = (int) write (fd_w, buf, n);
+ if (n != n1)
+ {
+ fprintf (stderr, GTXT ("er_archive: unable to write %d bytes to `%s': %s\n"),
+ n, aname, STR (strerror (errno)));
+ do_unlink = true;
+ break;
+ }
+ }
+ close (fd_w);
+
+ struct stat64 s_buf;
+ if (fstat64 (fd_r, &s_buf) == 0)
+ {
+ struct utimbuf u_buf;
+ u_buf.actime = s_buf.st_atime;
+ u_buf.modtime = s_buf.st_mtime;
+ utime (aname, &u_buf);
+ }
+ close (fd_r);
+ if (do_unlink)
+ {
+ if (!hide_msg)
+ fprintf (stderr, GTXT ("er_archive: remove %s\n"), aname);
+ unlink (aname);
+ return 1;
+ }
+ return 0;
+}
+
+/**
+ * Copy file to common archive
+ * Algorithm:
+ * Calculate checksum
+ * Generate file name to be created in common archive
+ * Check if it is not in common archive yet
+ * Copy file to the common archive directory if it is not there yet
+ * Create symbolic link: "aname" -> "caname", where "caname" is the name in common archive
+ * @param name - original file name
+ * @param aname - file name in experiment archive
+ * @param common_archive - common archive directory
+ * @return 0 - success, 1 - error
+ */
+int
+Experiment::copy_file_to_common_archive (const char *name, const char *aname,
+ int hide_msg,
+ const char *common_archive,
+ int relative_path)
+{
+ if (!name || !aname || !common_archive)
+ {
+ if (!name)
+ fprintf (stderr, GTXT ("er_archive: Internal error: file name is NULL\n"));
+ if (!aname)
+ fprintf (stderr, GTXT ("er_archive: Internal error: file name in archive is NULL\n"));
+ if (!common_archive)
+ fprintf (stderr, GTXT ("er_archive: Internal error: path to common archive is NULL\n"));
+ return 1;
+ }
+ // Check if file is already archived
+ if (dbe_stat (aname, NULL) == 0)
+ return 0; // File is already archived
+ // Generate full path to common archive directory
+ char *cad = NULL;
+ char *abs_aname = NULL;
+ if ((common_archive[0] != '/') || (aname[0] != '/'))
+ {
+ long size = pathconf (NTXT ("."), _PC_PATH_MAX);
+ if (size < 0)
+ {
+ fprintf (stderr, GTXT ("er_archive: Fatal error: pathconf(\".\", _PC_PATH_MAX) failed\n"));
+ return 1;
+ }
+ char *buf = (char *) malloc ((size_t) size);
+ if (buf == NULL)
+ {
+ fprintf (stderr, GTXT ("er_archive: Fatal error: unable to allocate memory\n"));
+ return 1;
+ }
+ char *ptr = getcwd (buf, (size_t) size);
+ if (ptr == NULL)
+ {
+ fprintf (stderr, GTXT ("er_archive: Fatal error: cannot determine current directory\n"));
+ free (buf);
+ return 1;
+ }
+ if (common_archive[0] != '/')
+ cad = dbe_sprintf (NTXT ("%s/%s"), ptr, common_archive);
+ else
+ cad = dbe_strdup (common_archive);
+ if (aname[0] != '/')
+ abs_aname = dbe_sprintf (NTXT ("%s/%s"), ptr, aname);
+ else
+ abs_aname = dbe_strdup (aname);
+ free (buf);
+ }
+ else
+ {
+ cad = dbe_strdup (common_archive);
+ abs_aname = dbe_strdup (aname);
+ }
+ // Calculate checksum
+ char * errmsg = NULL;
+ uint32_t crcval = get_cksum (name, &errmsg);
+ if (0 == crcval)
+ { // error
+ free (cad);
+ free (abs_aname);
+ if (NULL != errmsg)
+ {
+ fprintf (stderr, GTXT ("er_archive: Fatal error: %s\n"), errmsg);
+ free (errmsg);
+ return 1;
+ }
+ fprintf (stderr,
+ GTXT ("er_archive: Fatal error: get_cksum(%s) returned %d\n"),
+ name, crcval);
+ return 1;
+ }
+ // Generate file name to be created in common archive
+ char *fname = get_basename (name);
+ char *abs_caname = dbe_sprintf (NTXT ("%s/%u_%s"), cad, crcval, fname);
+ if (abs_caname == NULL)
+ {
+ free (cad);
+ free (abs_aname);
+ fprintf (stderr,
+ GTXT ("er_archive: Fatal error: unable to allocate memory\n"));
+ return 1;
+ }
+ // Check if full name is not too long
+ long len = dbe_sstrlen (abs_caname);
+ long max = pathconf (cad, _PC_PATH_MAX);
+ if ((max < 0) || (len <= 0))
+ { // unknown error
+ fprintf (stderr, GTXT ("er_archive: Fatal error: pathconf(%s, _PC_PATH_MAX) failed\n"),
+ cad);
+ free (abs_caname);
+ free (cad);
+ free (abs_aname);
+ return 1;
+ }
+ if (len >= max)
+ {
+ // Try to truncate the name
+ if ((len - max) <= dbe_sstrlen (fname))
+ {
+ // Yes, we can do it
+ abs_caname[max - 1] = 0;
+ if (!hide_msg)
+ fprintf (stderr, GTXT ("er_archive: file path is too long - truncated:%s\n"),
+ abs_caname);
+ }
+ }
+ // Check if file name is not too long
+ char *cafname = get_basename (abs_caname);
+ len = dbe_sstrlen (cafname);
+ max = pathconf (cad, _PC_NAME_MAX);
+ if ((max < 0) || (len <= 0))
+ { // unknown error
+ fprintf (stderr, GTXT ("er_archive: Fatal error: pathconf(%s, _PC_NAME_MAX) failed\n"),
+ cad);
+ free (abs_caname);
+ free (cad);
+ free (abs_aname);
+ return 1;
+ }
+ if (len >= max)
+ {
+ // Try to truncate the name
+ if ((len - max) <= dbe_sstrlen (fname))
+ {
+ // Yes, we can do it
+ cafname[max - 1] = 0;
+ if (!hide_msg)
+ fprintf (stderr, GTXT ("er_archive: file name is too long - truncated:%s\n"),
+ abs_caname);
+ }
+ }
+ // Copy file to the common archive directory if it is not there yet
+ int res = 0;
+ if (dbe_stat_file (abs_caname, NULL) != 0)
+ {
+ // Use temporary file to avoid synchronization problems
+ char *t = dbe_sprintf ("%s/archive_%llx", cad, (unsigned long long) gethrtime());
+ free (cad);
+ // Copy file to temporary file
+ res = copy_file_to_archive (name, t, hide_msg); // hide messages
+ if (res != 0)
+ {
+ fprintf (stderr, GTXT ("er_archive: Fatal error: cannot copy file %s to temporary file: %s\n"),
+ name, t);
+ unlink (t);
+ free (t);
+ free (abs_caname);
+ free (abs_aname);
+ return 1;
+ }
+ // Set read-only permissions
+ struct stat64 statbuf;
+ if (0 == dbe_stat_file (name, &statbuf))
+ {
+ mode_t mask = S_IRUSR | S_IXUSR | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH;
+ mode_t mode = statbuf.st_mode & mask;
+ chmod (t, mode);
+ }
+ // Try to rename temporary file "t" to "abs_caname"
+ // res = link(t, abs_caname); // link() fails on some f/s - use rename()
+ res = rename (t, abs_caname);
+ if (res != 0)
+ {
+ if (errno != EEXIST)
+ {
+ fprintf (stderr, GTXT ("er_archive: Fatal error: rename(%s, %s) returned error: %d\n"),
+ t, abs_caname, res);
+ unlink (t);
+ free (t);
+ free (abs_caname);
+ free (abs_aname);
+ return 1;
+ }
+ // File "abs_caname" is already there - continue
+ }
+ unlink (t);
+ free (t);
+ }
+ else
+ free (cad);
+ char *lname = NULL;
+ if (relative_path)
+ {
+ if (common_archive[0] != '/' && aname[0] != '/')
+ {
+ // compare one relative path to another and find common beginning
+ char *rel_caname = dbe_sprintf ("%s/%s", common_archive, cafname);
+ if (rel_caname == NULL)
+ {
+ fprintf (stderr, GTXT ("er_archive: Fatal error: unable to allocate memory\n"));
+ return 1;
+ }
+ lname = get_relative_link (rel_caname, aname);
+ free (rel_caname);
+ }
+ else
+ {
+ if (abs_aname == NULL)
+ {
+ fprintf (stderr, GTXT ("er_archive: Fatal error: unable to allocate memory\n"));
+ return 1;
+ }
+ lname = get_relative_link (abs_caname, abs_aname);
+ }
+ }
+ else // absolute path
+ lname = dbe_strdup (abs_caname);
+ free (abs_aname);
+ if (lname == NULL)
+ {
+ fprintf (stderr, GTXT ("er_archive: Fatal error: unable to allocate memory\n"));
+ return 1;
+ }
+ // Create symbolic link: aname -> lname
+ if (dbe_stat_file (abs_caname, NULL) == 0)
+ {
+ res = symlink (lname, aname);
+ if (res != 0)
+ {
+ fprintf (stderr, GTXT ("er_archive: Fatal error: symlink(%s, %s) returned error: %d (errno=%s)\n"),
+ lname, aname, res, strerror (errno));
+ free (abs_caname);
+ free (lname);
+ return 1;
+ }
+ if (!hide_msg)
+ fprintf (stderr, GTXT ("Created symbolic link %s to file in common archive: %s\n"),
+ aname, lname);
+ }
+ else
+ {
+ fprintf (stderr, GTXT ("er_archive: Internal error: file does not exist in common archive: %s\n"),
+ abs_caname);
+ res = 1;
+ }
+ free (abs_caname);
+ free (lname);
+ return res;
+}
+
+/**
+ * Copy file to archive
+ * @param name
+ * @param aname
+ * @param hide_msg
+ * @param common_archive
+ * @return 0 - success
+ */
+int
+Experiment::copy_file (char *name, char *aname, int hide_msg, char *common_archive, int relative_path)
+{
+ if (common_archive)
+ {
+ if (0 == copy_file_to_common_archive (name, aname, hide_msg,
+ common_archive, relative_path))
+ return 0;
+ // Error. For now - fatal error. Message is already printed.
+ fprintf (stderr, GTXT ("er_archive: Fatal error: cannot copy file %s to common archive %s\n"),
+ name, common_archive);
+ return 1;
+ }
+ return (copy_file_to_archive (name, aname, hide_msg));
+}
+
+LoadObject *
+Experiment::createLoadObject (const char *path, uint64_t chksum)
+{
+ LoadObject *lo = dbeSession->createLoadObject (path, chksum);
+ if (lo->firstExp == NULL)
+ lo->firstExp = this;
+ return lo;
+}
+
+LoadObject *
+Experiment::createLoadObject (const char *path, const char *runTimePath)
+{
+ DbeFile *df = findFileInArchive (path, runTimePath);
+ if (df && (df->get_stat () == NULL))
+ df = NULL; // No access to file
+ LoadObject *lo = dbeSession->createLoadObject (path, runTimePath, df);
+ if (df && (lo->dbeFile->get_location (false) == NULL))
+ {
+ lo->dbeFile->set_location (df->get_location ());
+ lo->dbeFile->inArchive = df->inArchive;
+ lo->dbeFile->sbuf = df->sbuf;
+ lo->dbeFile->experiment = df->experiment;
+ lo->firstExp = df->experiment;
+ }
+ if (lo->firstExp == NULL)
+ {
+ lo->firstExp = this;
+ lo->dbeFile->experiment = this;
+ }
+ return lo;
+}
+
+SourceFile *
+Experiment::get_source (const char *path)
+{
+ if (founder_exp && (founder_exp != this))
+ return founder_exp->get_source (path);
+ if (sourcesMap == NULL)
+ sourcesMap = new StringMap<SourceFile*>(1024, 1024);
+ if (strncmp (path, NTXT ("./"), 2) == 0)
+ path += 2;
+ SourceFile *sf = sourcesMap->get (path);
+ if (sf)
+ return sf;
+ char *fnm = checkFileInArchive (path, false);
+ if (fnm)
+ {
+ sf = new SourceFile (path);
+ dbeSession->append (sf);
+ DbeFile *df = sf->dbeFile;
+ df->set_location (fnm);
+ df->inArchive = true;
+ df->check_access (fnm); // init 'sbuf'
+ df->sbuf.st_mtime = 0; // Don't check timestamps
+ free (fnm);
+ }
+ else
+ sf = dbeSession->createSourceFile (path);
+ sourcesMap->put (path, sf);
+ return sf;
+}
+
+Vector<Histable*> *
+Experiment::get_comparable_objs ()
+{
+ update_comparable_objs ();
+ if (comparable_objs || dbeSession->expGroups->size () <= 1)
+ return comparable_objs;
+ comparable_objs = new Vector<Histable*>(dbeSession->expGroups->size ());
+ for (long i = 0, sz = dbeSession->expGroups->size (); i < sz; i++)
+ {
+ ExpGroup *gr = dbeSession->expGroups->get (i);
+ if (groupId == gr->groupId)
+ {
+ comparable_objs->append (this);
+ continue;
+ }
+ Histable *h = NULL;
+ for (long i1 = 0, sz1 = gr->exps ? gr->exps->size () : 0; i1 < sz1; i1++)
+ {
+ Experiment *exp = gr->exps->get (i1);
+ if ((exp->comparable_objs == NULL) && (dbe_strcmp (utargname, exp->utargname) == 0))
+ {
+ exp->phaseCompareIdx = phaseCompareIdx;
+ h = exp;
+ h->comparable_objs = comparable_objs;
+ break;
+ }
+ }
+ comparable_objs->append (h);
+ }
+ dump_comparable_objs ();
+ return comparable_objs;
+}
+
+DbeFile *
+Experiment::findFileInArchive (const char *fname)
+{
+ if (archiveMap)
+ {
+ char *aname = get_archived_name (fname);
+ DbeFile *df = archiveMap->get (aname);
+ free (aname);
+ return df;
+ }
+ if (founder_exp)
+ return founder_exp->findFileInArchive (fname);
+ return NULL;
+}
+
+DbeFile *
+Experiment::findFileInArchive (const char *className, const char *runTimePath)
+{
+ DbeFile *df = NULL;
+ if (runTimePath)
+ {
+ const char *fnm = NULL;
+ if (strncmp (runTimePath, NTXT ("zip:"), 4) == 0)
+ fnm = runTimePath + 4;
+ else if (strncmp (runTimePath, NTXT ("jar:file:"), 9) == 0)
+ fnm = runTimePath + 9;
+ if (fnm)
+ {
+ const char *s = strchr (fnm, '!');
+ if (s)
+ {
+ char *s1 = dbe_strndup (fnm, s - fnm);
+ df = findFileInArchive (s1);
+ free (s1);
+ }
+ else
+ df = findFileInArchive (fnm);
+ if (df)
+ df->filetype |= DbeFile::F_JAR_FILE;
+ }
+ else if (strncmp (runTimePath, NTXT ("file:"), 5) == 0)
+ {
+ fnm = runTimePath + 5;
+ df = findFileInArchive (fnm);
+ }
+ else
+ df = findFileInArchive (runTimePath);
+ }
+ if (df == NULL)
+ df = findFileInArchive (className);
+ return df;
+}
diff --git a/gprofng/src/Experiment.h b/gprofng/src/Experiment.h
new file mode 100644
index 00000000000..41c44e4a08a
--- /dev/null
+++ b/gprofng/src/Experiment.h
@@ -0,0 +1,689 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _EEXPERIMENT_H
+#define _EEXPERIMENT_H
+
+// The experiment class is responsible for managing all the data
+// for an individual experiment
+
+#include "Metric.h"
+#include "Histable.h"
+#include "Stats_data.h"
+#include "DefaultMap.h"
+#include "HeapMap.h"
+
+class Data_window;
+class DbeFile;
+class CallStack;
+class JMethod;
+class Sample;
+class SegMem;
+class LoadObject;
+class SourceFile;
+class UserLabel;
+class PRBTree;
+class Emsg;
+class Emsgqueue;
+struct JThread;
+struct GCEvent;
+class FileData;
+class Module;
+class Experiment;
+template <class ITEM> class Vector;
+
+#define JTHREAD_DEFAULT ((JThread*)0)
+#define JTHREAD_NONE ((JThread*)-1)
+
+// When we perform the pipelined optimization on resolve_frame_info() and add_stack()
+// this is the number of iterations one phase works on before passing on the work to
+// the next phase
+
+#define CSTCTX_CHUNK_SZ 10000
+#define PIPELINE_QUEUE_SZ_HI 8
+#define PIPELINE_QUEUE_SZ_LOW 2
+
+// the add_stack_ctx structure contains the intermediate state (context) after
+// CSTCTX_CHUNK_SZ number of iterations to pass on the work to another thread to
+// operate on the next stage
+typedef struct
+{
+ Vector<DbeInstr*> *natpcs;
+ Vector<Histable*> *jpcs;
+ long idx;
+ FramePacket *frp;
+ hrtime_t tstamp;
+ uint32_t thrid;
+ bool last_ctx;
+} cstk_ctx;
+
+// To minimize threadpool overhead, the granularity of a job submitted is made larger:
+// containing a chunk of iterations (of size CSTCTX_CHUNK_SZ)
+typedef struct
+{
+ cstk_ctx* cstCtxAr[CSTCTX_CHUNK_SZ];
+ int last_idx;
+ long idx_begin;
+ long idx_end;
+ DataDescriptor *dDscr;
+ Experiment *exp;
+ void *cstk;
+} cstk_ctx_chunk;
+
+class Experiment : public Histable, public DbeMessages
+{
+public:
+
+ enum Exp_status
+ {
+ SUCCESS,
+ INCOMPLETE,
+ FAILURE
+ };
+
+ Experiment ();
+ virtual ~Experiment ();
+
+ virtual Histable_type
+ get_type ()
+ {
+ return EXPERIMENT;
+ };
+ virtual Vector<Histable*> *get_comparable_objs ();
+
+ int groupId;
+ Experiment *founder_exp; // parent of this experiment
+ Vector<Experiment*> *children_exps; // children of this experiment
+
+ // Configuration Information
+ char *hostname; // Hosthame (e.g. mymachine)
+ long start_sec; // Starting timeval secs.
+ char *username; // name of person performing the test
+ char *architecture; // Architecture name ("sun4")
+ Platform_t platform; // Sparc,Sparcv9,Intel
+ WSize_t wsize; // word size: may be w32 or w64
+ int clock; // CPU clock frequency, Mhz
+ int varclock; // Set if CPU clock frequency can change: turbo-mode
+ int maxclock; // max. CPU clock frequency on MP machine
+ int minclock; // min. CPU clock frequency on MP machine
+ int ncpus; // count of CPUs where expt was recorded
+ int hw_cpuver; // CPU version from libcpc
+ char *machinemodel; // machine model of machine on which experiment was recorded
+ char *os_version; // Operating system name
+ int page_size; // Page size (bytes)
+ int npages; // Number of page size
+ int exp_maj_version; // major version number of current experiment
+ int exp_min_version; // minor version number of current experiment
+ int hex_field_width; // number of digits in hex form of address
+ // for current experiment, i.e. 8 for 32bit addresses
+ int broken; // If SP_JCMD_RUN line not seen
+ int obsolete; // If pointer file experiment detected
+ bool hwc_default; // True if HW counters were enabled by default
+ int hwc_bogus; // Count of bogus HWC packets
+ int hwc_lost_int; // Count of packets reflecting lost interrupt
+ int hwc_scanned; // If the HWC packets have been scanned
+ int invalid_packet; // Count of invalid packets
+ bool exec_started; // True if exec was called, and exec error not yet seen
+ bool dataspaceavail; // True if dataspace data is in the experiment
+ bool leaklistavail; // True if leaklist data is in the experiment
+ bool heapdataavail; // True if heap data is in the experiment
+ bool racelistavail; // true if there are race events in the experiment
+ bool iodataavail; // true if there are io events in the experiment
+ bool deadlocklistavail; // true if there are deadlock events in the experiment
+ bool timelineavail; // true if there are valid timestamps in the experiment
+ bool ifreqavail; // True if instruction-frequency data is in the experiment
+ bool ompavail; // true if there is OpenMP data in the experiment
+ bool has_java;
+ char *uarglist; // argv[] array, as a string
+ char *utargname; // basename of argv[0] extracted from uarglist
+ char *ucwd; // working directory
+ char *cversion; // collector version string
+ char *dversion; // driver version string (er_kernel)
+ char *jversion; // Java version string (java profiling)
+
+ // Open the named experiment record and process log file
+ Exp_status open (char *directory_name);
+
+ // Update experiment (read and process new data)
+ Exp_status update ();
+
+ // Returns collector parameters for the current sample selection
+ Collection_params *
+ get_params ()
+ {
+ return &coll_params;
+ }
+
+ Exp_status
+ get_status ()
+ {
+ return status;
+ }
+
+ // Returns the number of samples. For use by FilterNumeric
+ int
+ nsamples ()
+ {
+ return samples->size ();
+ }
+
+ // Release any releasable memory.
+ void purge ();
+
+ void resetShowHideStack ();
+ int save_notes (char*, bool);
+ int delete_notes (bool);
+ Experiment *getBaseFounder (); // returns topmost founder or this if no descendents
+
+ hrtime_t
+ getStartTime ()
+ {
+ return exp_start_time;
+ }
+ hrtime_t getRelativeStartTime (); // delta between start and founder's start
+
+ hrtime_t
+ getWallStartSec ()
+ {
+ return start_sec;
+ }
+
+ hrtime_t
+ getLastEvent ()
+ {
+ if (last_event != ZERO_TIME)
+ return last_event;
+ return exp_start_time;
+ }
+
+ hrtime_t
+ getGCDuration ()
+ {
+ return gc_duration;
+ }
+
+ int
+ getPID ()
+ {
+ return pid;
+ }
+
+ int
+ getUserExpId ()
+ {
+ return userExpId;
+ }
+
+ int
+ getExpIdx ()
+ {
+ return expIdx;
+ }
+
+ void
+ setExpIdx (int idx)
+ {
+ expIdx = idx;
+ }
+
+ void
+ setUserExpId (int idx)
+ {
+ userExpId = idx;
+ }
+
+ void
+ setTinyThreshold (int limit)
+ {
+ tiny_threshold = limit;
+ }
+
+ bool
+ isDiscardedTinyExperiment ()
+ {
+ return discardTiny;
+ }
+
+ Exp_status open_epilogue ();
+ void read_experiment_data (bool read_ahead);
+ static int copy_file_to_archive (const char *name, const char *aname, int hide_msg);
+ static int copy_file_to_common_archive (const char *name, const char *aname,
+ int hide_msg, const char *common_archive, int relative_path = 0);
+ static int copy_file (char *name, char *aname, int hide_msg,
+ char *common_archive = NULL, int relative_path = 0);
+
+ // get_raw_events()
+ // action: get unfiltered packets, loading them if required
+ // parameters: data_id (see ProfData_type)
+ DataDescriptor *get_raw_events (int data_id);
+ Vector<DataDescriptor*> *getDataDescriptors ();
+
+ // Some DATA_* types are derived from others, e.g. DATA_HEAPSZ is derived from DATA_HEAP
+ // The following hooks support derived DataViews
+ int base_data_id (int data_id); // returns base data_id type (ProfData_type DATA_*)
+ DataView *create_derived_data_view (int data_id, DataView *dview);
+
+ Vector<BaseMetric*>*
+ get_metric_list ()
+ {
+ return metrics;
+ }
+
+ char *
+ get_expt_name ()
+ {
+ return expt_name; // Return the pathname to the experiment
+ };
+
+ Vector<char*> *get_descendants_names ();
+ char *get_fndr_arch_name ();
+ char *get_arch_name ();
+ char *getNameInArchive (const char *fname, bool archiveFile = false);
+ char *checkFileInArchive (const char *fname, bool archiveFile = false);
+ DbeFile *findFileInArchive (const char *className, const char *runTimePath);
+ DbeFile *findFileInArchive (const char *fname);
+ bool create_dir (char *dname);
+
+ Vaddr
+ ret_stack_base ()
+ {
+ return stack_base;
+ };
+
+ // Map a virtual address to a PC pair
+ DbeInstr *map_Vaddr_to_PC (Vaddr addr, hrtime_t ts);
+ DbeInstr *map_jmid_to_PC (Vaddr mid, int lineno, hrtime_t ts);
+ Sample *map_event_to_Sample (hrtime_t ts);
+ GCEvent *map_event_to_GCEvent (hrtime_t ts);
+
+ DataView *
+ getOpenMPdata ()
+ {
+ return openMPdata;
+ }
+
+ time_t
+ get_mtime ()
+ {
+ return mtime;
+ }
+
+ Emsg *fetch_comments (void); // fetch the queue of comment messages
+ Emsg *fetch_runlogq (void); // fetch the queue of run log messages
+ Emsg *fetch_errors (void); // fetch the queue of error messages
+ Emsg *fetch_warnings (void); // fetch the queue of warning messages
+ Emsg *fetch_notes (void); // fetch the queue of notes messages
+ Emsg *fetch_ifreq (void); // fetch the queue of ifreq messages
+ Emsg *fetch_pprocq (void); // fetch the queue of post-processing messages
+
+ // message queues
+ Emsgqueue *commentq; // comments for the experiment header
+ Emsgqueue *runlogq; // used temporarily; after log file processing,
+ // messages are appended to the commentq
+ Emsgqueue *errorq; // error messages
+ Emsgqueue *warnq; // warning messages
+ Emsgqueue *notesq; // user-written notes messages
+ Emsgqueue *pprocq; // postprocessing messages
+ Emsgqueue *ifreqq; // Instruction frequency data, from count experiment
+ Map<const char*, LoadObject*> *loadObjMap;
+ Vector<LoadObject*> *loadObjs;
+ void append (LoadObject *lo);
+ LoadObject *createLoadObject (const char *path, uint64_t chksum = 0);
+ LoadObject *createLoadObject (const char *path, const char *runTimePath);
+ SourceFile *get_source (const char *path);
+ void set_clock (int clk);
+
+ CallStack *
+ callTree ()
+ {
+ return cstack;
+ }
+
+ CallStack *
+ callTreeShowHide ()
+ {
+ return cstackShowHide;
+ }
+
+ uint32_t mapTagValue (Prop_type, uint64_t value);
+ Histable *getTagObj (Prop_type, uint32_t idx);
+ Vector<Histable*> *getTagObjs (Prop_type);
+
+ JThread *map_pckt_to_Jthread (uint32_t tid, hrtime_t tstamp);
+ JThread *get_jthread (uint32_t tid);
+
+ Vector<JThread*> *
+ get_jthreads ()
+ {
+ return jthreads;
+ }
+
+ Vector<GCEvent*> *
+ get_gcevents ()
+ {
+ return gcevents;
+ }
+
+ bool need_swap_endian;
+ Collection_params coll_params; // Collection params
+
+ // Ranges for threads, lwps, cpu
+ uint64_t min_thread;
+ uint64_t max_thread;
+ uint64_t thread_cnt;
+ uint64_t min_lwp;
+ uint64_t max_lwp;
+ uint64_t lwp_cnt;
+ uint64_t min_cpu;
+ uint64_t max_cpu;
+ uint64_t cpu_cnt;
+ uint64_t dsevents; // count of dataspace events
+ uint64_t dsnoxhwcevents; /* count of ds events that could be be validated
+ * because of no branch target info */
+
+ PacketDescriptor *newPacketDescriptor (int kind, DataDescriptor *dDscr);
+ PacketDescriptor *getPacketDescriptor (int kind);
+
+ // debugging aids -- dump_stacks, dump_map
+ void dump_stacks (FILE *);
+ void dump_map (FILE *);
+
+ // These methods are used in nightly performance regression testing
+ void DBG_memuse (Sample *);
+ void DBG_memuse (const char *sname);
+ void init_cache ();
+
+ DefaultMap<int64_t, FileData*> *
+ getFDataMap ()
+ {
+ return fDataMap;
+ }
+ CallStack *cstack;
+
+protected:
+
+ Exp_status status; // Error status
+ Vector<SegMem*> *seg_items; // Master list of seg_items
+ CallStack *cstackShowHide;
+ PRBTree *maps; // All maps in (Vaddr,time)
+
+ hrtime_t gc_duration; // wall-clock hrtime of total GC intervals
+ hrtime_t exp_start_time; // wall-clock hrtime at exp start
+ hrtime_t last_event; // wall-clock hrtime of last known sample or log.xml entry
+ hrtime_t non_paused_time; // sum of periods where data collection is active (not paused)
+ hrtime_t resume_ts; // tracks log.xml start/resume times
+ void update_last_event (hrtime_t ts /*wall time (not 0-based)*/);
+
+ char *expt_name; // name of experiment
+ char *arch_name; // <experiment>/archive
+ char *fndr_arch_name; // <founder_experiment>/archive
+ //TBR? hrtime_t sample_time; // total of sample durations
+ int yyparse (); // Allow yyparse actions to access
+ Vaddr stack_base; // Stack base
+
+ // Write experiment header to comment queue
+ void write_header ();
+ void write_coll_params ();
+
+ Exp_status find_expdir (char *directory_name);
+
+ // Invoke the parser to process a file.
+ void read_data_file (const char*, const char*);
+ int read_log_file ();
+ void read_labels_file ();
+ void read_notes_file ();
+ void read_archives ();
+ int read_java_classes_file ();
+ void read_map_file ();
+ int read_overview_file ();
+ int read_dyntext_file ();
+ void read_omp_file ();
+ void read_omp_preg ();
+ void read_omp_task ();
+ void read_ifreq_file ();
+ void read_frameinfo_file ();
+
+ // Functions to process the log and loadobjects file entries
+ // They are deliberately made virtual to overload them
+ // in er_export.
+ virtual int process_arglist_cmd (char *, char *);
+ virtual int process_desc_start_cmd (char *, hrtime_t, char *, char *, int, char *);
+ virtual int process_desc_started_cmd (char *, hrtime_t, char *, char *, int, char *);
+ virtual int process_fn_load_cmd (Module *mod, char *fname, Vaddr vaddr, int fsize, hrtime_t ts);
+ virtual int process_fn_unload_cmd (char *, Vaddr, hrtime_t);
+ virtual int process_hwcounter_cmd (char *, int, char *, char *, int, int, int, char *);
+ virtual int process_hwsimctr_cmd (char *, int, char *, char *, char*, int, int, int, int, int);
+ virtual int process_jcm_load_cmd (char*, Vaddr, Vaddr, int, hrtime_t);
+ virtual int process_jcm_unload_cmd (char*, Vaddr, hrtime_t);
+ virtual int process_Linux_kernel_cmd (hrtime_t);
+ virtual int process_jthr_end_cmd (char *, uint64_t, Vaddr, Vaddr, hrtime_t);
+ virtual int process_jthr_start_cmd (char *, char *, char *, char *, uint64_t, Vaddr, Vaddr, hrtime_t);
+ virtual int process_gc_end_cmd (hrtime_t);
+ virtual int process_gc_start_cmd (hrtime_t);
+ virtual int process_sample_cmd (char *, hrtime_t, int id, char *lbl);
+ virtual int process_sample_sig_cmd (char *, int);
+ virtual int process_seg_map_cmd (char *, hrtime_t, Vaddr, int, int, int64_t, int64_t, int64_t, char *);
+ virtual int process_seg_unmap_cmd (char *, hrtime_t, Vaddr);
+
+ // creation time for experiment
+ time_t mtime;
+ hrtime_t exp_rel_start_time; // start of exp. relative to founder
+ bool exp_rel_start_time_set;
+ Vector<UserLabel*> *userLabels; // List of er_labels
+ int userExpId; // user value for EXPID
+ int expIdx; // DbeSession exp identifier
+ PRBTree *jmaps; // JAVA_CLASSES: (id,time)->Histable
+ Experiment* baseFounder; // outermost experiment (null until lazily computed)
+
+ // Represents a file in experiment
+ class ExperimentFile;
+
+ // XML handler to parse various experiment files
+ class ExperimentHandler;
+ class ExperimentLabelsHandler;
+
+ uint64_t readPacket (Data_window *dwin, Data_window::Span *span);
+ void readPacket (Data_window *dwin, char *ptr, PacketDescriptor *pDscr,
+ DataDescriptor *dDscr, int arg, uint64_t pktsz);
+
+ // read data
+ DataDescriptor *get_profile_events ();
+ DataDescriptor *get_sync_events ();
+ DataDescriptor *get_hwc_events ();
+ DataDescriptor *get_heap_events ();
+ DataDescriptor *get_heapsz_events ();
+ DataDescriptor *get_iotrace_events ();
+ DataDescriptor *get_race_events ();
+ DataDescriptor *get_deadlock_events ();
+ DataDescriptor *get_sample_events ();
+ DataDescriptor *get_gc_events ();
+ DataDescriptor *getDataDescriptor (int data_id);
+ DataDescriptor *newDataDescriptor (int data_id, int flags = 0,
+ DataDescriptor *master_dDscr = NULL);
+
+ // Frame info data structures and methods
+ struct UIDnode;
+ struct RawFramePacket;
+
+ Vector<RawFramePacket*>*frmpckts; // frame info data
+ static int frUidCmp (const void*, const void*);
+ RawFramePacket *find_frame_packet (uint64_t uid);
+
+ static const int CHUNKSZ = 16384;
+ long nnodes;
+ long nchunks;
+ UIDnode **chunks;
+ UIDnode **uidHTable;
+ Vector<UIDnode*> *uidnodes;
+ bool resolveFrameInfo;
+ bool discardTiny;
+ int tiny_threshold; /* optimize away tiny experiments which ran
+ * for less than specified time (ms): default 0 */
+
+ static int uidNodeCmp (const void *a, const void *b);
+ UIDnode *add_uid (Data_window *dwin, uint64_t uid, int size, uint32_t *array, uint64_t link_uid);
+ UIDnode *add_uid (Data_window *dwin, uint64_t uid, int size, uint64_t *array, uint64_t link_uid);
+ UIDnode *new_uid_node (uint64_t uid, uint64_t val);
+ UIDnode *get_uid_node (uint64_t uid, uint64_t val);
+ UIDnode *get_uid_node (uint64_t uid);
+ UIDnode *find_uid_node (uint64_t uid);
+
+ ExperimentFile *logFile;
+
+ // Data descriptors
+ Vector<DataDescriptor*> *dataDscrs;
+ Vector<PacketDescriptor*> *pcktDscrs;
+ long blksz; // binary data file block size
+
+ // Processed data packets
+ DataView *openMPdata; // OMP fork events
+
+ // Map events to OpenMP parallel regions and tasks
+ Map2D<uint32_t, hrtime_t, uint64_t> *mapPRid;
+ Map2D<uint32_t, hrtime_t, void*> *mapPReg;
+ Map2D<uint32_t, hrtime_t, void*> *mapTask;
+
+ // Archive content
+ Map<const char*, DbeFile *> *archiveMap;
+ Map<const char*, SourceFile*>*sourcesMap;
+
+ void init ();
+ void fini ();
+ void post_process ();
+ void constructJavaStack (FramePacket *, UIDnode *, Map<uint64_t, uint64_t> *);
+ void resolve_frame_info (DataDescriptor*);
+ void cleanup_cstk_ctx_chunk ();
+ void register_metric (Metric::Type type);
+ void register_metric (Hwcentry *ctr, const char* aux, const char* username);
+
+ Sample *sample_last_used;
+ GCEvent *gcevent_last_used;
+ char *first_sample_label;
+ Module *get_jclass (const char *className, const char *fileName);
+ LoadObject *get_j_lo (const char *className, const char *fileName);
+
+ Vector<BaseMetric*> *metrics;
+ Vector<JThread*> *jthreads; // master list of Java threads
+ Vector<JThread*> *jthreads_idx; // index in the master list
+ Vector<GCEvent*> *gcevents;
+ Vector<UnmapChunk*> *heapUnmapEvents;
+ Vector<Sample*> *samples; // Array of Sample pointers
+
+ DefaultMap<int64_t, FileData*> *fDataMap; // list of FileData objects using the virtual File descriptor as the key
+ DefaultMap<int, int64_t> *vFdMap; // list of virtual file descrptors using the file descriptor as the key
+
+ Vector<Vector<Histable*>*> *tagObjs; // tag objects
+ bool sparse_threads;
+
+ SegMem **smemHTable; // hash table for SegMem's
+ DbeInstr **instHTable; // hash table for DbeInstr
+ Map<unsigned long long, JMethod*> *jmidHTable; // hash table for jmid
+
+ // identity of target process
+ int pid;
+ int ppid;
+ int pgrp;
+ int sid;
+
+ // Map file processing related data
+ struct MapRecord
+ {
+
+ enum
+ {
+ LOAD, UNLOAD
+ } kind;
+ Histable *obj;
+ Vaddr base;
+ Size size;
+ hrtime_t ts;
+ uint64_t foff;
+ };
+
+ void mrec_insert (MapRecord *mrec);
+ SegMem *update_ts_in_maps (Vaddr addr, hrtime_t ts);
+ int read_warn_file ();
+ LoadObject *get_dynfunc_lo (const char *loName);
+ Function *create_dynfunc (Module *mod, char *fname, int64_t vaddr, int64_t fsize);
+ char *get_archived_name (const char *fname, bool archiveFile = false);
+
+ Vector<MapRecord*> *mrecs;
+
+private:
+ void add_evt_time_to_profile_events (DataDescriptor *dDscr);
+ DataView *create_heapsz_data_view (DataView *heap_dview);
+ void compute_heapsz_data_view (DataView *heapsz_dview);
+};
+
+struct JThread
+{
+ JThread *next;
+ char *name;
+ char *group_name;
+ char *parent_name;
+ uint32_t tid; // system thread id
+ Vaddr jthr; // recorded Java thread id
+ Vaddr jenv; // recorded JNIEnv id
+ uint32_t jthr_id; // internal JThread object id
+ hrtime_t start;
+ hrtime_t end;
+
+ JThread ()
+ {
+ name = NULL;
+ group_name = NULL;
+ parent_name = NULL;
+ }
+
+ ~JThread ()
+ {
+ free (name);
+ free (group_name);
+ free (parent_name);
+ }
+ bool is_system ();
+};
+
+struct GCEvent
+{
+
+ GCEvent ()
+ {
+ id = -1;
+ }
+
+ ~GCEvent () { }
+
+ hrtime_t start;
+ hrtime_t end;
+ int id;
+};
+
+class ExperimentLoadCancelException
+{
+public:
+
+ ExperimentLoadCancelException () { };
+
+ ~ExperimentLoadCancelException () { };
+};
+
+
+#endif /* _EEXPERIMENT_H */
diff --git a/gprofng/src/Expression.cc b/gprofng/src/Expression.cc
new file mode 100644
index 00000000000..df440927e79
--- /dev/null
+++ b/gprofng/src/Expression.cc
@@ -0,0 +1,1281 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <assert.h>
+#include "CallStack.h"
+#include "DbeSession.h"
+#include "DbeView.h"
+#include "DataObject.h"
+#include "Exp_Layout.h"
+#include "Experiment.h"
+#include "Module.h"
+#include "LoadObject.h"
+#include "Expression.h"
+#include "Function.h"
+#include "Histable.h"
+#include "Sample.h"
+#include "Table.h"
+
+//////////////////////////////////////////////////////////
+// class Expression::Context
+
+static const uint64_t INDXOBJ_EXPGRID_SHIFT = 60;
+static const uint64_t INDXOBJ_EXPID_SHIFT = 32;
+
+Expression::Context::Context (DbeView *_dbev, Experiment *_exp)
+{
+ dbev = _dbev;
+ exp = _exp;
+ dview = NULL;
+ eventId = 0;
+}
+
+Expression::Context::Context (DbeView *_dbev, Experiment *_exp,
+ DataView *_dview, long _eventId)
+{
+ dbev = _dbev;
+ exp = _exp;
+ dview = _dview;
+ eventId = _eventId;
+}
+
+//////////////////////////////////////////////////////////
+// class Expression
+Expression::Expression (OpCode _op, uint64_t _v)
+{
+ op = _op;
+ v = Value (_v);
+ arg0 = NULL;
+ arg1 = NULL;
+}
+
+Expression::Expression (OpCode _op, const Expression *_arg0,
+ const Expression *_arg1)
+{
+ op = _op;
+ v = Value ();
+ arg0 = NULL;
+ arg1 = NULL;
+ if (_arg0)
+ arg0 = _arg0->copy ();
+ if (_arg1)
+ arg1 = _arg1->copy ();
+}
+
+Expression::~Expression ()
+{
+ delete arg0;
+ delete arg1;
+}
+
+Expression::Expression (const Expression &rhs)
+{
+ op = rhs.op;
+ arg0 = NULL;
+ arg1 = NULL;
+ v = Value (rhs.v);
+ if (rhs.arg0)
+ {
+ arg0 = rhs.arg0->copy ();
+ if (v.next)
+ {
+ assert (arg0 && v.next == &(rhs.arg0->v));
+ v.next = &(arg0->v);
+ }
+ }
+ if (rhs.arg1)
+ arg1 = rhs.arg1->copy ();
+}
+
+Expression::Expression (const Expression *rhs)
+{
+ arg0 = NULL;
+ arg1 = NULL;
+ copy (rhs);
+}
+
+void
+Expression::copy (const Expression *rhs)
+{
+ op = rhs->op;
+ delete arg0;
+ delete arg1;
+ arg0 = NULL;
+ arg1 = NULL;
+ v = Value (rhs->v);
+ if (rhs->arg0)
+ {
+ arg0 = rhs->arg0->copy ();
+ if (v.next)
+ {
+ assert (arg0 && v.next == &(rhs->arg0->v));
+ v.next = &(arg0->v);
+ }
+ }
+ if (rhs->arg1)
+ arg1 = rhs->arg1->copy ();
+}
+
+Expression &
+Expression::operator= (const Expression &rhs)
+{
+ if (this == &rhs)
+ return *this;
+ copy (&rhs);
+ return *this;
+}
+
+bool
+Expression::getVal (int propId, Context *ctx)
+{
+ v.val = 0;
+ v.next = NULL;
+ int origPropId = propId;
+ switch (propId)
+ {
+ default:
+ {
+ if (!ctx->dview)
+ return false;
+ PropDescr *propDscr = ctx->dview->getProp (propId);
+ if (!propDscr)
+ return false;
+ switch (propDscr->vtype)
+ {
+ case TYPE_INT32:
+ v.val = ctx->dview->getIntValue (propId, ctx->eventId);
+ break;
+ case TYPE_UINT32:
+ v.val = (uint32_t) ctx->dview->getIntValue (propId, ctx->eventId); //prevent sign extension
+ break;
+ case TYPE_INT64:
+ case TYPE_UINT64:
+ v.val = ctx->dview->getLongValue (propId, ctx->eventId);
+ break;
+ case TYPE_OBJ:
+ // YM: not sure if we should allow this
+ v.val = (long long) ctx->dview->getObjValue (propId, ctx->eventId);
+ break;
+ case TYPE_STRING:
+ case TYPE_DOUBLE:
+ default:
+ return false; // Weird, programming error?
+ }
+ break;
+ }
+ case PROP_FREQ_MHZ:
+ if (ctx->exp && ctx->exp->clock)
+ v.val = ctx->exp->clock;
+ else
+ return false;
+ break;
+ case PROP_PID:
+ if (ctx->exp == NULL)
+ return false;
+ v.val = ctx->exp->getPID ();
+ break;
+ case PROP_EXPID:
+ if (ctx->exp == NULL)
+ return false;
+ v.val = ctx->exp->getUserExpId ();
+ break;
+ case PROP_EXPID_CMP:
+ if (ctx->exp == NULL)
+ return false;
+ else
+ {
+ Experiment *exp = ctx->exp;
+ if (ctx->dbev && ctx->dbev->comparingExperiments ())
+ exp = (Experiment *) exp->get_compare_obj ();
+ v.val = exp->getUserExpId ();
+ }
+ break;
+ case PROP_EXPGRID:
+ if (ctx->exp == NULL)
+ return false;
+ v.val = ctx->exp->groupId;
+ break;
+ case PROP_NTICK_USEC:
+ if (ctx->exp == NULL)
+ return false;
+ if (ctx->dview && ctx->dview->getProp (PROP_NTICK))
+ v.val = ctx->dview->getIntValue (PROP_NTICK, ctx->eventId)
+ * ctx->exp->get_params ()->ptimer_usec;
+ else
+ return false;
+ break;
+ case PROP_ATSTAMP:
+ case PROP_ETSTAMP:
+ if (ctx->exp == NULL)
+ return false;
+ if (ctx->dview && ctx->dview->getProp (PROP_TSTAMP))
+ v.val = ctx->dview->getLongValue (PROP_TSTAMP, ctx->eventId);
+ else
+ return false;
+ if (propId == PROP_ATSTAMP)
+ break; // absolute time, no adjustments
+ // propId==PROP_ETSTAMP
+ // calculate relative time from start of this experiment
+ v.val -= ctx->exp->getStartTime ();
+ break;
+ case PROP_TSTAMP:
+ case PROP_TSTAMP_LO:
+ case PROP_TSTAMP_HI:
+ {
+ if (ctx->exp == NULL)
+ return false;
+ if (!(ctx->dview && ctx->dview->getProp (PROP_TSTAMP)))
+ return false;
+ hrtime_t tstamp = ctx->dview->getLongValue (PROP_TSTAMP, ctx->eventId);
+ // compute relative time from start of founder experiment
+ v.val = tstamp - ctx->exp->getStartTime ()
+ + ctx->exp->getRelativeStartTime ();
+ if (propId == PROP_TSTAMP)
+ break;
+ if (ctx->dview->getProp (PROP_EVT_TIME))
+ {
+ hrtime_t delta = ctx->dview->getLongValue (PROP_EVT_TIME, ctx->eventId);
+ if (propId == PROP_TSTAMP_LO)
+ {
+ if (delta > 0)
+ { // positive delta means TSTAMP is at end
+ // TSTAMP_LO = TSTAMP-delta
+ v.val -= delta;
+ break;
+ }
+ break;
+ }
+ else
+ { // PROP_TSTAMP_HI
+ if (delta < 0)
+ { // negative delta means TSTAMP is at start
+ // TSTAMP_HI = TSTAMP+(-delta)
+ v.val -= delta;
+ break;
+ }
+ break;
+ }
+ }
+ else if (ctx->dview->getProp (PROP_TSTAMP2))
+ {
+ if (propId == PROP_TSTAMP_HI)
+ {
+ hrtime_t tstamp2 = ctx->dview->getLongValue (PROP_TSTAMP2,
+ ctx->eventId);
+ if (tstamp2 == 0)
+ break; // if not initialized, event does not have duration
+ if (tstamp2 == MAX_TIME)
+ tstamp2 = ctx->exp->getLastEvent ();
+ hrtime_t delta = tstamp2 - tstamp;
+ if (delta >= 0)
+ {
+ v.val += delta;
+ break;
+ }
+ break; // weird, delta should not be negative
+ }
+ break; // PROP_TSTAMP_LO, no modification needed
+ }
+ break; // should never be hit
+ }
+ case PROP_IOHEAPBYTES:
+ {
+ propId = PROP_IONBYTE;
+ if (ctx->dview == NULL)
+ return false;
+ if (!ctx->dview->getProp (propId))
+ { // has property?
+ propId = PROP_HSIZE;
+ if (!ctx->dview->getProp (propId))
+ return false;
+ }
+ v.val = ctx->dview->getLongValue (propId, ctx->eventId);
+ break;
+ }
+ case PROP_SAMPLE_MAP:
+ {
+ if (ctx->exp == NULL)
+ return false;
+ if (ctx->dview == NULL)
+ return false;
+ if (ctx->dview->getProp (PROP_SAMPLE))
+ v.val = ctx->dview->getIntValue (PROP_SAMPLE, ctx->eventId);
+ else
+ { // does not have property, convert to time.
+ uint64_t tstamp;
+ tstamp = ctx->dview->getLongValue (PROP_TSTAMP, ctx->eventId);
+ Sample *sample = ctx->exp->map_event_to_Sample (tstamp);
+ v.val = sample ? sample->get_number () : -1;
+ }
+ break;
+ }
+ case PROP_GCEVENT_MAP:
+ {
+ if (ctx->exp == NULL)
+ return false;
+ if (ctx->dview == NULL)
+ return false;
+ if (ctx->dview->getProp (PROP_GCEVENT))
+ v.val = ctx->dview->getIntValue (PROP_GCEVENT, ctx->eventId);
+ else
+ { // does not have property, convert to time.
+ uint64_t tstamp;
+ tstamp = ctx->dview->getLongValue (PROP_TSTAMP, ctx->eventId);
+ GCEvent *gcevent = ctx->exp->map_event_to_GCEvent (tstamp);
+ v.val = gcevent ? gcevent->id : 0;
+ }
+ break;
+ }
+ case PROP_LEAF:
+ {
+ if (ctx->dview == NULL)
+ return false;
+ VMode vmode = ctx->dbev ? ctx->dbev->get_view_mode () : VMODE_USER;
+ int prop_id;
+ if (vmode == VMODE_MACHINE)
+ prop_id = PROP_MSTACK;
+ else if (vmode == VMODE_EXPERT)
+ prop_id = PROP_XSTACK;
+ else
+ prop_id = PROP_USTACK;
+ if (!ctx->dview->getProp (prop_id))
+ return false;
+ Histable *obj = CallStack::getStackPC (ctx->dview->getObjValue (prop_id, ctx->eventId), 0);
+ Function *func = (Function*) obj->convertto (Histable::FUNCTION);
+ v.val = func->id; // LEAF
+ break;
+ }
+ case PROP_STACKID:
+ {
+ VMode vmode = ctx->dbev ? ctx->dbev->get_view_mode () : VMODE_USER;
+ if (vmode == VMODE_MACHINE)
+ propId = PROP_MSTACK;
+ else if (vmode == VMODE_EXPERT)
+ propId = PROP_XSTACK;
+ else
+ propId = PROP_USTACK;
+ if (ctx->dview == NULL)
+ return false;
+ if (!ctx->dview->getProp (propId))
+ return false;
+ v.val = (long) ctx->dview->getObjValue (propId, ctx->eventId);
+ break;
+ }
+ case PROP_STACKL:
+ case PROP_STACKI:
+ case PROP_STACK:
+ {
+ VMode vmode = ctx->dbev ? ctx->dbev->get_view_mode () : VMODE_USER;
+ if (vmode == VMODE_MACHINE)
+ propId = PROP_MSTACK;
+ else if (vmode == VMODE_EXPERT)
+ propId = PROP_XSTACK;
+ else
+ propId = PROP_USTACK;
+ }
+ // no break;
+ case PROP_MSTACKL:
+ case PROP_XSTACKL:
+ case PROP_USTACKL:
+ case PROP_MSTACKI:
+ case PROP_XSTACKI:
+ case PROP_USTACKI:
+ switch (propId)
+ {
+ case PROP_MSTACKL:
+ case PROP_MSTACKI:
+ propId = PROP_MSTACK;
+ break;
+ case PROP_XSTACKL:
+ case PROP_XSTACKI:
+ propId = PROP_XSTACK;
+ break;
+ case PROP_USTACKL:
+ case PROP_USTACKI:
+ propId = PROP_USTACK;
+ break;
+ default:
+ break;
+ }
+ // no break;
+ case PROP_MSTACK:
+ case PROP_XSTACK:
+ case PROP_USTACK:
+ {
+ if (ctx->dview == NULL)
+ return false;
+ if (!ctx->dview->getProp (propId))
+ return false;
+ bool hide_mode = !ctx->dbev->isShowAll ()
+ || ctx->dbev->isFilterHideMode ();
+ Expression *cur = this;
+ for (CallStackNode *stack = (CallStackNode *)
+ ctx->dview->getObjValue (propId, ctx->eventId);
+ stack; stack = stack->get_ancestor ())
+ {
+ Histable *hist = stack->get_instr ();
+ if (origPropId == PROP_STACK || origPropId == PROP_MSTACK
+ || origPropId == PROP_XSTACK || origPropId == PROP_USTACK)
+ {
+ cur->v.val = hist->convertto (Histable::FUNCTION)->id;
+ cur->v.fn = cur->v.val;
+ }
+ else if (origPropId == PROP_STACKL || origPropId == PROP_MSTACKL
+ || origPropId == PROP_XSTACKL || origPropId == PROP_USTACKL)
+ {
+ cur->v.val = hist->convertto (Histable::LINE)->id;
+ if (hide_mode)
+ cur->v.fn = hist->convertto (Histable::FUNCTION)->id;
+ else
+ cur->v.fn = 0;
+ }
+ else if (origPropId == PROP_STACKI || origPropId == PROP_MSTACKI
+ || origPropId == PROP_XSTACKI || origPropId == PROP_USTACKI)
+ {
+ cur->v.val = hist->convertto (Histable::INSTR)->id;
+ if (hide_mode)
+ cur->v.fn = hist->convertto (Histable::FUNCTION)->id;
+ else
+ cur->v.fn = 0;
+ }
+ if (cur->arg1 == NULL)
+ cur->arg1 = new Expression (OP_NONE, (uint64_t) 0);
+ if (stack->get_ancestor () == NULL)
+ {
+ if (origPropId == PROP_STACKL || origPropId == PROP_MSTACKL
+ || origPropId == PROP_XSTACKL || origPropId == PROP_USTACKL
+ || origPropId == PROP_STACKI || origPropId == PROP_MSTACKI
+ || origPropId == PROP_XSTACKI || origPropId == PROP_USTACKI)
+ {
+ cur->v.next = NULL;
+ continue;
+ }
+ }
+ cur->v.next = &cur->arg1->v;
+ cur = cur->arg1;
+ }
+ if (origPropId == PROP_STACK || origPropId == PROP_MSTACK
+ || origPropId == PROP_XSTACK || origPropId == PROP_USTACK)
+ {
+ cur->v.val = dbeSession->get_Total_Function ()->id;
+ cur->v.fn = cur->v.val;
+ cur->v.next = NULL;
+ }
+ break;
+ }
+ case PROP_DOBJ:
+ {
+ if (ctx->dview == NULL)
+ return false;
+ if (!ctx->dview->getProp (PROP_DOBJ))
+ return false;
+ DataObject *dobj = (DataObject*)
+ ctx->dview->getObjValue (PROP_DOBJ, ctx->eventId);
+ if (dobj != NULL)
+ {
+ Expression *cur = this;
+ for (;;)
+ {
+ cur->v.val = dobj->id;
+ dobj = dobj->parent;
+ if (dobj == NULL)
+ break;
+ if (cur->arg1 == NULL)
+ cur->arg1 = new Expression (OP_NONE, (uint64_t) 0);
+ cur->v.next = &cur->arg1->v;
+ cur = cur->arg1;
+ }
+ cur->v.next = NULL;
+ }
+ break;
+ }
+ case PROP_CPRID:
+ case PROP_TSKID:
+ {
+ if (ctx->dview == NULL)
+ return false;
+ if (!ctx->dview->getProp (propId))
+ return false;
+ CallStackNode *ompstack = (CallStackNode *)
+ ctx->dview->getObjValue (propId, ctx->eventId);
+ Histable *hobj = ompstack->get_instr ();
+ if (hobj != NULL)
+ v.val = hobj->id;
+ break;
+ }
+ case PROP_JTHREAD:
+ {
+ if (ctx->exp == NULL)
+ return false;
+ if (ctx->dview == NULL)
+ return false;
+ if (!ctx->dview->getProp (propId))
+ return false;
+ uint64_t tstamp;
+ tstamp = ctx->dview->getLongValue (PROP_TSTAMP, ctx->eventId);
+ uint32_t thrid;
+ uint64_t jthr_id = 0;
+ thrid = ctx->dview->getIntValue (PROP_THRID, ctx->eventId);
+ JThread *jthread = ctx->exp->map_pckt_to_Jthread (thrid, tstamp);
+ if (jthread != JTHREAD_NONE && jthread != JTHREAD_DEFAULT)
+ {
+ jthr_id = jthread->jthr_id;
+ uint64_t grid = ctx->exp->groupId;
+ uint64_t expid = ctx->exp->getUserExpId ();
+ v.val = (grid << INDXOBJ_EXPGRID_SHIFT) |
+ (expid << INDXOBJ_EXPID_SHIFT) | jthr_id;
+ }
+ break;
+ }
+ }
+ return true;
+}
+
+bool
+Expression::bEval (Context *ctx)
+{
+ uint64_t v0, v1;
+ switch (op)
+ {
+ case OP_DEG:
+ if (!arg1->bEval (ctx))
+ return false;
+ if (arg1->v.val < 0)
+ {
+ v.val = 0;
+ return true;
+ }
+ if (!arg0->bEval (ctx))
+ {
+ return false;
+ }
+ v0 = arg0->v.val;
+ v1 = arg1->v.val;
+ for (v.val = 1; v1 > 0; v1--)
+ v.val *= v0;
+ return true;
+ case OP_MUL:
+ if (arg0->bEval (ctx) && arg1->bEval (ctx))
+ {
+ v.val = arg0->v.val * arg1->v.val;
+ return true;
+ }
+ return false;
+ case OP_DIV:
+ if (arg0->bEval (ctx) && arg1->bEval (ctx))
+ {
+ v1 = arg1->v.val;
+ v.val = (v1 == 0) ? 0 : (arg0->v.val / v1);
+ return true;
+ }
+ return false;
+ case OP_REM:
+ if (arg0->bEval (ctx) && arg1->bEval (ctx))
+ {
+ v1 = arg1->v.val;
+ v.val = (v1 == 0) ? 0 : (arg0->v.val % v1);
+ return true;
+ }
+ return false;
+ case OP_ADD:
+ if (arg0->bEval (ctx) && arg1->bEval (ctx))
+ {
+ v.val = arg0->v.val + arg1->v.val;
+ // DBFIXME LIBRARY VISIBILITY
+ // hack to pass v.fn value to new expression for leaf filters USTACK+0
+ v.fn = arg0->v.fn + arg1->v.fn;
+ return true;
+ }
+ return false;
+ case OP_MINUS:
+ if (arg0->bEval (ctx) && arg1->bEval (ctx))
+ {
+ v.val = arg0->v.val - arg1->v.val;
+ return true;
+ }
+ return false;
+ case OP_LS:
+ if (arg0->bEval (ctx) && arg1->bEval (ctx))
+ {
+ v.val = arg0->v.val << arg1->v.val;
+ return true;
+ }
+ return false;
+ case OP_RS:
+ if (arg0->bEval (ctx) && arg1->bEval (ctx))
+ {
+ v.val = arg0->v.val >> arg1->v.val;
+ return true;
+ }
+ return false;
+ case OP_LT:
+ if (arg0->bEval (ctx) && arg1->bEval (ctx))
+ {
+ v.val = arg0->v.val < arg1->v.val ? 1 : 0;
+ return true;
+ }
+ return false;
+ case OP_LE:
+ if (arg0->bEval (ctx) && arg1->bEval (ctx))
+ {
+ v.val = arg0->v.val <= arg1->v.val ? 1 : 0;
+ return true;
+ }
+ return false;
+ case OP_GT:
+ if (arg0->bEval (ctx) && arg1->bEval (ctx))
+ {
+ v.val = arg0->v.val > arg1->v.val ? 1 : 0;
+ return true;
+ }
+ return false;
+ case OP_GE:
+ if (arg0->bEval (ctx) && arg1->bEval (ctx))
+ {
+ v.val = arg0->v.val >= arg1->v.val ? 1 : 0;
+ return true;
+ }
+ return false;
+ case OP_EQ:
+ if (arg0->bEval (ctx) && arg1->bEval (ctx))
+ {
+ v.val = arg0->v.val == arg1->v.val ? 1 : 0;
+ return true;
+ }
+ return false;
+ case OP_NE:
+ if (arg0->bEval (ctx) && arg1->bEval (ctx))
+ {
+ v.val = arg0->v.val != arg1->v.val ? 1 : 0;
+ return true;
+ }
+ return false;
+ case OP_BITAND:
+ if (arg0->bEval (ctx) && arg1->bEval (ctx))
+ {
+ v.val = arg0->v.val & arg1->v.val;
+ return true;
+ }
+ return false;
+ case OP_BITXOR:
+ if (arg0->bEval (ctx) && arg1->bEval (ctx))
+ {
+ v.val = arg0->v.val ^ arg1->v.val;
+ return true;
+ }
+ return false;
+ case OP_BITOR:
+ if (arg0->bEval (ctx) && arg1->bEval (ctx))
+ {
+ v.val = arg0->v.val | arg1->v.val;
+ return true;
+ }
+ return false;
+ case OP_AND:
+ if (arg0->bEval (ctx))
+ {
+ if (arg0->v.val == 0)
+ {
+ v.val = 0;
+ return true;
+ }
+ if (arg1->bEval (ctx))
+ {
+ v.val = arg1->v.val == 0 ? 0 : 1;
+ return true;
+ }
+ return false;
+ }
+ if (arg1->bEval (ctx) && arg1->v.val == 0)
+ {
+ v.val = 0;
+ return true;
+ }
+ return false;
+ case OP_OR:
+ if (arg0->bEval (ctx))
+ {
+ if (arg0->v.val != 0)
+ {
+ v.val = 1;
+ return true;
+ }
+ if (arg1->bEval (ctx))
+ {
+ v.val = arg1->v.val == 0 ? 0 : 1;
+ return true;
+ }
+ return false;
+ }
+ if (arg1->bEval (ctx) && arg1->v.val != 0)
+ {
+ v.val = 1;
+ return true;
+ }
+ return false;
+ case OP_NEQV:
+ if (arg0->bEval (ctx) && arg1->bEval (ctx))
+ {
+ v0 = arg0->v.val;
+ v1 = arg1->v.val;
+ v.val = (v0 == 0 && v1 != 0) || (v0 != 0 && v1 == 0) ? 1 : 0;
+ return true;
+ }
+ return false;
+ case OP_EQV:
+ if (arg0->bEval (ctx) && arg1->bEval (ctx))
+ {
+ v0 = arg0->v.val;
+ v1 = arg1->v.val;
+ v.val = (v0 == 0 && v1 == 0) || (v0 != 0 && v1 != 0) ? 1 : 0;
+ return true;
+ }
+ return false;
+ case OP_QWE:
+ if (arg0->bEval (ctx))
+ {
+ if (arg0->v.val != 0)
+ {
+ if (arg1->arg0->bEval (ctx))
+ {
+ v.val = arg1->arg0->v.val;
+ return true;
+ }
+ }
+ else
+ {
+ if (arg1->arg1->bEval (ctx))
+ {
+ v.val = arg1->arg1->v.val;
+ return true;
+ }
+ }
+ }
+ return false;
+ case OP_COMMA:
+ if (arg0->bEval (ctx))
+ {
+ v.next = &arg0->v;
+ if (arg1->bEval (ctx))
+ {
+ v.val = arg1->v.val;
+ return true;
+ }
+ }
+ return false;
+ case OP_IN:
+ if (arg0->bEval (ctx) && arg1->bEval (ctx))
+ {
+ for (Value *s = &arg0->v; s; s = s->next)
+ {
+ bool found = false;
+ for (Value *t = &arg1->v; t; t = t->next)
+ {
+ if (t->val == s->val)
+ {
+ found = true;
+ break;
+ }
+ }
+ if (!found)
+ {
+ v.val = 0;
+ return true;
+ }
+ }
+ v.val = 1;
+ return true;
+ }
+ return false;
+ case OP_SOMEIN:
+ if (arg0->bEval (ctx) && arg1->bEval (ctx))
+ {
+ for (Value *s = &arg0->v; s; s = s->next)
+ {
+ for (Value *t = &arg1->v; t; t = t->next)
+ {
+ if (t->val == s->val)
+ {
+ v.val = 1;
+ return true;
+ }
+ }
+ }
+ v.val = 0;
+ return true;
+ }
+ return false;
+ case OP_ORDRIN:
+ if (arg0->bEval (ctx) && arg1->bEval (ctx))
+ {
+ for (Value *t0 = &arg1->v; t0; t0 = t0->next)
+ {
+ bool found = true;
+ for (Value *s = &arg0->v, *t = t0; s; s = s->next, t = t->next)
+ {
+ if (t == NULL || t->val != s->val)
+ {
+ found = false;
+ break;
+ }
+ }
+ if (found)
+ {
+ v.val = 1;
+ return true;
+ }
+ }
+ v.val = 0;
+ return true;
+ }
+ return false;
+ // LIBRARY_VISIBILITY
+ case OP_LIBRARY_IN:
+ if (arg0->bEval (ctx) && arg1->bEval (ctx))
+ {
+ for (Value *s = &arg0->v; s; s = s->next)
+ {
+ bool found = false;
+ uint64_t objId = s->val;
+ Histable *obj = dbeSession->findObjectById (objId);
+ bool libraryFound = false;
+ Function *fn;
+ if (obj != NULL && obj->get_type () == Histable::FUNCTION)
+ {
+ fn = (Function *) obj;
+ if (fn->isHideFunc)
+ // this belongss to a loadobject in hide/library mode
+ libraryFound = true;
+ }
+
+ if (libraryFound)
+ {
+ uint64_t lo_id = fn->module->loadobject->id;
+ for (Value *t = &arg1->v; t; t = t->next)
+ {
+ uint64_t t_id = t->fn;
+ Histable *obj2 = dbeSession->findObjectById (t_id);
+ if (obj2 != NULL
+ && obj2->get_type () == Histable::FUNCTION)
+ {
+ Function *func2 = (Function *) obj2;
+ uint64_t lo_id2 = func2->module->loadobject->id;
+ if (lo_id2 == lo_id)
+ {
+ found = true;
+ break;
+ }
+ }
+ }
+ }
+ else
+ {
+ // Not a loadobject
+ for (Value *t = &arg1->v; t; t = t->next)
+ {
+ if (t->val == s->val)
+ {
+ found = true;
+ break;
+ }
+ }
+ }
+ if (!found)
+ {
+ v.val = 0;
+ return true;
+ }
+ }
+ v.val = 1;
+ return true;
+ }
+ return false;
+ case OP_LIBRARY_SOMEIN:
+ if (arg0->bEval (ctx) && arg1->bEval (ctx))
+ {
+ for (Value *s = &arg0->v; s; s = s->next)
+ {
+ uint64_t objId = s->val;
+ Histable *obj = dbeSession->findObjectById (objId);
+ bool libraryFound = false;
+ Function *fn;
+ if (obj != NULL && obj->get_type () == Histable::FUNCTION)
+ {
+ fn = (Function *) obj;
+ if (fn->isHideFunc)
+ // this belongs to a loadobject in hide/library mode
+ libraryFound = true;
+ }
+
+ if (libraryFound)
+ {
+ uint64_t lo_id = fn->module->loadobject->id;
+ for (Value *t = &arg1->v; t; t = t->next)
+ {
+ uint64_t t_id = t->fn;
+ Histable *obj2 = dbeSession->findObjectById (t_id);
+ if (obj2 != NULL && obj2->get_type () == Histable::FUNCTION)
+ {
+ Function *func2 = (Function *) obj2;
+ uint64_t lo_id2 = func2->module->loadobject->id;
+ if (lo_id2 == lo_id)
+ {
+ v.val = 1;
+ return true;
+ }
+ }
+ }
+ }
+ else
+ {
+ for (Value *t = &arg1->v; t; t = t->next)
+ if (t->val == s->val)
+ {
+ v.val = 1;
+ return true;
+ }
+ }
+ }
+ v.val = 0;
+ return true;
+ }
+ return false;
+ case OP_LIBRARY_ORDRIN:
+ if (arg0->bEval (ctx) && arg1->bEval (ctx))
+ {
+ for (Value *t0 = &arg1->v; t0; t0 = t0->next)
+ {
+ bool found = true;
+ Value *t = t0;
+ for (Value *s = &arg0->v; s; s = s->next)
+ {
+ // start comparing s->val with t->val
+ // if matches move on to s->next and t->next
+ uint64_t objId = s->val;
+ Histable *obj = dbeSession->findObjectById (objId);
+ bool libraryFound = false;
+ Function *fn;
+ if (obj != NULL && obj->get_type () == Histable::FUNCTION)
+ {
+ fn = (Function *) obj;
+ if (fn->isHideFunc)
+ libraryFound = true;
+ }
+ if (libraryFound)
+ {
+ // s->val is from a loadobject
+ // check if t->val is a func whose loadobject matches s->val
+ uint64_t lo_id = fn->module->loadobject->id;
+ uint64_t t_id = t->fn;
+ Histable *obj2 = dbeSession->findObjectById (t_id);
+ if (obj2 != NULL
+ && obj2->get_type () == Histable::FUNCTION)
+ {
+ Function *func2 = (Function *) obj2;
+ uint64_t lo_id2 = func2->module->loadobject->id;
+ if (lo_id2 != lo_id)
+ {
+ // no match
+ found = false;
+ break;
+ }
+ else
+ {
+ // t->val is a func whose loadobject matches s->val
+ while (t != NULL && lo_id2 == lo_id)
+ {
+ // skip frames with same load object
+ t = t->next;
+ t_id = t->fn;
+ obj2 = dbeSession->findObjectById (t_id);
+ if (obj2 != NULL
+ && obj2->get_type () == Histable::FUNCTION)
+ {
+ func2 = (Function *) obj2;
+ lo_id2 = func2->module->loadobject->id;
+ }
+ }
+ }
+ }
+ }
+ else
+ {
+ if (t == NULL || t->val != s->val)
+ {
+ found = false;
+ break;
+ }
+ t = t->next;
+ }
+ }
+ if (found)
+ {
+ v.val = 1;
+ return true;
+ }
+ }
+ v.val = 0;
+ return true;
+ }
+ return false;
+ case OP_BITNOT:
+ if (arg0->bEval (ctx))
+ {
+ v.val = ~arg0->v.val;
+ return true;
+ }
+ return false;
+ case OP_NOT:
+ if (arg0->bEval (ctx))
+ {
+ v.val = !arg0->v.val;
+ return true;
+ }
+ return false;
+ case OP_NUM:
+ return true;
+ case OP_NAME:
+ if (ctx && arg0->bEval (ctx) && getVal ((int) arg0->v.val, ctx))
+ return true;
+ return false;
+ case OP_FUNC:
+ // FNAME is completely processed by pEval for now
+ v.val = 0;
+ return true;
+ case OP_HASPROP:
+ if (!ctx || !ctx->dview)
+ return false; // can't be resolved (occurs during pEval() )
+ else if (arg0->op != OP_NAME || !arg0->arg0)
+ return false; // weird, wrong arg type
+ else
+ {
+ int propId = (int) arg0->arg0->v.val;
+ if (ctx->dview->getProp (propId))
+ v.val = 1;
+ else
+ v.val = 0;
+ return true;
+ }
+ case OP_FILE:
+ // FILENAME is completely processed by pEval for now
+ v.val = 0;
+ return true;
+ case OP_JAVA:
+ //JGROUP & JPARENT is completely processed by pEval for now
+ v.val = 0;
+ return true;
+ case OP_COLON:
+ return false; // OK for arg1 of OP_QWE
+ default:
+#ifdef IPC_LOG
+ fprintf (stderr, "INTERNAL ERROR: Expression::eval op=%d\n", op);
+#endif
+ return false;
+ }
+ return false;
+}
+
+Expression *
+Expression::pEval (Context *ctx) // partial evaluation (dview may be NULL)
+{
+ Expression *res = NULL;
+ switch (op)
+ {
+ case OP_FUNC:
+ {
+ Vector<Histable*> *objs = NULL;
+ if (arg0->v.val == FUNC_FNAME)
+ {
+ Histable::NameFormat nfmt = ctx ? ctx->dbev->get_name_format () : Histable::NA;
+ objs = (Vector<Histable*>*)dbeSession->match_func_names ((char*) arg1->v.val, nfmt);
+ }
+ else if (arg0->v.val == FUNC_DNAME)
+ objs = (Vector<Histable*>*)dbeSession->match_dobj_names ((char*) arg1->v.val);
+ Expression *cur = new Expression (Expression::OP_NUM, (uint64_t) 0);
+ res = cur;
+ int i = objs ? objs->size () - 1 : -1;
+ for (; i >= 0; i--)
+ {
+ cur->v.val = objs->fetch (i)->id;
+ if (i == 0)
+ break;
+ cur->arg0 = new Expression (OP_NONE, (uint64_t) 0);
+ cur->v.next = &cur->arg0->v;
+ cur = cur->arg0;
+ }
+ cur->v.next = NULL;
+ if (objs)
+ delete objs;
+ break;
+ }
+ case OP_JAVA:
+ {
+ Vector<JThread*> *objs = NULL;
+ Vector<uint64_t> *grids = NULL;
+ Vector<uint64_t> *expids = NULL;
+ if (arg0->v.val == JAVA_JGROUP)
+ objs = dbeSession->match_java_threads ((char*) arg1->v.val, 0, grids,
+ expids);
+ else if (arg0->v.val == JAVA_JPARENT)
+ objs = dbeSession->match_java_threads ((char*) arg1->v.val, 1, grids,
+ expids);
+ Expression *cur = new Expression (Expression::OP_NUM, (uint64_t) 0);
+ res = cur;
+ int i = objs ? objs->size () - 1 : -1;
+ for (; i >= 0; i--)
+ {
+ uint64_t jthr_id = 0;
+ JThread *jthread = (JThread *) (objs->fetch (i));
+ jthr_id = jthread->jthr_id;
+ uint64_t grid = grids->fetch (i);
+ uint64_t expid = expids->fetch (i);
+ cur->v.val = (grid << INDXOBJ_EXPGRID_SHIFT) |
+ (expid << INDXOBJ_EXPID_SHIFT) | jthr_id;
+ if (i == 0)
+ break;
+ cur->arg0 = new Expression (OP_NONE, (uint64_t) 0);
+ cur->v.next = &cur->arg0->v;
+ cur = cur->arg0;
+ }
+ cur->v.next = NULL;
+ delete objs;
+ delete grids;
+ delete expids;
+ break;
+ }
+ case OP_FILE:
+ {
+ Vector<Histable*> *objs = NULL;
+ Histable::NameFormat nfmt = ctx ? ctx->dbev->get_name_format () : Histable::NA;
+ if (ctx)
+ objs = (Vector<Histable*>*)dbeSession->match_file_names ((char*) arg1->v.val, nfmt);
+ Expression *cur = new Expression (Expression::OP_NUM, (uint64_t) 0);
+ res = cur;
+ int i = objs ? objs->size () - 1 : -1;
+ for (; i >= 0; i--)
+ {
+ cur->v.val = objs->fetch (i)->id;
+ if (i == 0)
+ break;
+ cur->arg0 = new Expression (OP_NONE, (uint64_t) 0);
+ cur->v.next = &cur->arg0->v;
+ cur = cur->arg0;
+ }
+ cur->v.next = NULL;
+ if (objs)
+ delete objs;
+ break;
+ }
+ case OP_NUM:
+ case OP_COMMA:
+ res = copy ();
+ break;
+ case OP_IN:
+ case OP_SOMEIN:
+ case OP_ORDRIN:
+ {
+ // LIBRARY_VISIBILITY:
+ // Evaluate the arg0 of OP_IN, OP_SOMEIN, OP_ORDRIN to see if it has any library/loadobject
+ // Change it to OP_LIBRARY_IN, OP_LIBRARY_SOMEIN or OP_LIBRARY_ORDRIN respectively
+ if (dbeSession->is_lib_visibility_used () && (arg0->hasLoadObject ()
+ || arg1->hasLoadObject ()))
+ {
+ OpCode new_op;
+ switch (op)
+ {
+ case OP_IN:
+ new_op = OP_LIBRARY_IN;
+ break;
+ case OP_SOMEIN:
+ new_op = OP_LIBRARY_SOMEIN;
+ break;
+ case OP_ORDRIN:
+ new_op = OP_LIBRARY_ORDRIN;
+ break;
+ default:
+ new_op = op; // Should never reach here
+ break;
+ }
+ if (arg1->hasLoadObject ())
+ res = new Expression (new_op, arg1 ? arg1->pEval (ctx) : NULL,
+ arg0 ? arg0->pEval (ctx) : NULL);
+ else
+ res = new Expression (new_op, arg0 ? arg0->pEval (ctx) : NULL,
+ arg1 ? arg1->pEval (ctx) : NULL);
+ res->v = v;
+ ctx->dbev->setFilterHideMode ();
+ return res;
+ }
+ }
+ // no break; if no loadobjects found fall thru to the default case
+ default:
+ if (bEval (ctx))
+ {
+ res = new Expression (OP_NUM, v.val);
+ break;
+ }
+ res = new Expression (op, arg0 ? arg0->pEval (ctx) : NULL,
+ arg1 ? arg1->pEval (ctx) : NULL);
+ res->v = v;
+ break;
+ }
+ return res;
+}
+
+bool
+Expression::verifyObjectInExpr (Histable *obj)
+{
+ uint64_t id = ((uint64_t) obj->id);
+ if (op == OP_NUM && v.val == id)
+ return true;
+ bool inArg0 = false;
+ bool inArg1 = false;
+ if (arg0 != NULL)
+ inArg0 = arg0->verifyObjectInExpr (obj);
+ if (inArg0)
+ return true;
+ if (arg1 != NULL)
+ inArg1 = arg1->verifyObjectInExpr (obj);
+ if (inArg1)
+ return true;
+ return false;
+}
+
+bool
+Expression::hasLoadObject ()
+{
+ if (op == OP_NUM)
+ {
+ uint64_t id = v.val;
+ Histable *obj = dbeSession->findObjectById (id);
+ if (obj != NULL && obj->get_type () == Histable::FUNCTION)
+ {
+ Function *func = (Function *) obj;
+ if (func->isHideFunc)
+ return true;
+ }
+ }
+ if (arg0 && arg0->hasLoadObject ())
+ return true;
+ if (arg1 && arg1->hasLoadObject ())
+ return true;
+ return false;
+}
diff --git a/gprofng/src/Expression.h b/gprofng/src/Expression.h
new file mode 100644
index 00000000000..29d3e4e720f
--- /dev/null
+++ b/gprofng/src/Expression.h
@@ -0,0 +1,178 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _EXPRESSION_H
+#define _EXPRESSION_H
+
+#include <inttypes.h>
+
+class Experiment;
+class DataView;
+class DbeView;
+class Histable;
+
+class Expression
+{
+public:
+
+ class Context
+ {
+ public:
+ Context (DbeView *_dbev, Experiment *_exp = 0);
+ Context (DbeView *_dbev, Experiment *_exp, DataView *_dview, long _eventId);
+
+ ~Context () { };
+
+ void
+ put (DataView *d, long id)
+ {
+ dview = d;
+ eventId = id;
+ };
+
+ void
+ put (Experiment *_exp)
+ {
+ exp = _exp;
+ };
+
+ Experiment *exp;
+ DataView *dview;
+ DbeView *dbev;
+ long eventId;
+ };
+
+ enum OpCode
+ {
+ OP_NONE,
+ OP_QWE,
+ OP_COLON,
+ OP_OR,
+ OP_AND,
+ OP_NOT,
+ OP_EQV,
+ OP_NEQV,
+ OP_BITOR,
+ OP_BITAND,
+ OP_BITXOR,
+ OP_BITNOT,
+ OP_EQ,
+ OP_NE,
+ OP_LT,
+ OP_GT,
+ OP_LE,
+ OP_GE,
+ OP_LS,
+ OP_RS,
+ OP_ADD,
+ OP_MINUS,
+ OP_MUL,
+ OP_DIV,
+ OP_REM,
+ OP_DEG,
+ OP_COMMA,
+ OP_IN,
+ OP_SOMEIN,
+ OP_ORDRIN,
+ OP_NUM,
+ OP_NAME,
+ OP_FUNC,
+ OP_FILE,
+ OP_JAVA,
+ OP_HASPROP,
+ OP_LIBRARY_IN,
+ OP_LIBRARY_SOMEIN,
+ OP_LIBRARY_ORDRIN
+ };
+
+ enum FuncCode
+ {
+ FUNC_FNAME,
+ FUNC_DNAME
+ };
+
+ enum JavaCode
+ {
+ JAVA_JGROUP,
+ JAVA_JPARENT
+ };
+
+ Expression (OpCode, const Expression*, const Expression* = 0);
+ Expression (OpCode, uint64_t);
+ Expression (const Expression &rhs);
+ Expression (const Expression *rhs);
+ Expression &operator= (const Expression &rhs);
+ ~Expression ();
+
+ Expression *
+ copy () const
+ {
+ return new Expression (this);
+ }
+ void copy (const Expression *rhs);
+
+ uint64_t
+ eval (Context *ctx)
+ {
+ return bEval (ctx) ? v.val : 0;
+ };
+
+ bool
+ passes (Context *ctx)
+ {
+ return bEval (ctx) ? v.val != 0 : true;
+ };
+
+ bool
+ complete ()
+ {
+ return op == OP_NUM;
+ };
+
+ bool verifyObjectInExpr (Histable *obj);
+ Expression *
+ pEval (Context *ctx); // Partial evaluation to simplify expression
+
+private:
+
+ struct Value
+ {
+
+ Value (uint64_t _val = 0, Value *_next = 0) : val (_val), next (_next)
+ {
+ fn = 0;
+ }
+ uint64_t val;
+ uint64_t fn;
+ Value *next;
+ };
+
+ bool getVal (int propId, Context *ctx);
+ bool bEval (Context *ctx);
+ bool hasLoadObject ();
+
+ OpCode op;
+ Value v;
+ Expression *arg0;
+ Expression *arg1;
+};
+
+
+#endif /* _EXPRESSION_H */
diff --git a/gprofng/src/FileData.cc b/gprofng/src/FileData.cc
new file mode 100644
index 00000000000..7a941f5f8ef
--- /dev/null
+++ b/gprofng/src/FileData.cc
@@ -0,0 +1,400 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <assert.h>
+#include <string.h>
+
+#include "util.h"
+#include "FileData.h"
+
+void
+FileData::init ()
+{
+ readTime = 0;
+ writeTime = 0;
+ otherTime = 0;
+ errorTime = 0;
+ readBytes = 0;
+ writeBytes = 0;
+ readCnt = 0;
+ writeCnt = 0;
+ otherCnt = 0;
+ errorCnt = 0;
+ wSlowestBytes = 0;
+ wSmallestBytes = _10TB;
+ wLargestBytes = 0;
+ w0KB1KBCnt = 0;
+ w1KB8KBCnt = 0;
+ w8KB32KBCnt = 0;
+ w32KB128KBCnt = 0;
+ w128KB256KBCnt = 0;
+ w256KB512KBCnt = 0;
+ w512KB1000KBCnt = 0;
+ w1000KB10MBCnt = 0;
+ w10MB100MBCnt = 0;
+ w100MB1GBCnt = 0;
+ w1GB10GBCnt = 0;
+ w10GB100GBCnt = 0;
+ w100GB1TBCnt = 0;
+ w1TB10TBCnt = 0;
+ rSlowestBytes = 0;
+ rSmallestBytes = _10TB;
+ rLargestBytes = 0;
+ r0KB1KBCnt = 0;
+ r1KB8KBCnt = 0;
+ r8KB32KBCnt = 0;
+ r32KB128KBCnt = 0;
+ r128KB256KBCnt = 0;
+ r256KB512KBCnt = 0;
+ r512KB1000KBCnt = 0;
+ r1000KB10MBCnt = 0;
+ r10MB100MBCnt = 0;
+ r100MB1GBCnt = 0;
+ r1GB10GBCnt = 0;
+ r10GB100GBCnt = 0;
+ r100GB1TBCnt = 0;
+ r1TB10TBCnt = 0;
+}
+
+FileData::FileData (const char *fName)
+{
+ fileName = dbe_strdup (fName);
+ fileDesList = new Vector<int>;
+ virtualFds = new Vector<int64_t>;
+ virtualFd = -1;
+ fileDes = -1;
+ fsType[0] = '\0';
+ histType = Histable::IOACTVFD;
+ init ();
+}
+
+FileData::FileData (FileData *fData)
+{
+ fileName = dbe_strdup (fData->fileName);
+ fileDesList = new Vector<int>;
+ Vector<int> *fdList = fData->fileDesList;
+ int fd;
+ if (fdList != NULL)
+ for (int i = 0; i < fdList->size (); i++)
+ if ((fd = fdList->fetch (i)) == -1)
+ fileDesList->append (fd);
+
+ virtualFds = new Vector<int64_t>;
+ Vector<int64_t> *vfds = fData->virtualFds;
+ int64_t vfd;
+ if (vfds != NULL)
+ for (int i = 0; i < vfds->size (); i++)
+ if ((vfd = vfds->fetch (i)) == -1)
+ virtualFds->append (vfd);
+ virtualFd = fData->virtualFd;
+ fileDes = fData->fileDes;
+ histType = fData->histType;
+
+ for (int i = 0; i < FSTYPESZ; i++)
+ fsType[i] = fData->fsType[i];
+
+ readTime = fData->readTime;
+ writeTime = fData->writeTime;
+ otherTime = fData->otherTime;
+ errorTime = fData->errorTime;
+ readBytes = fData->readBytes;
+ writeBytes = fData->writeBytes;
+ readCnt = fData->readCnt;
+ writeCnt = fData->writeCnt;
+ otherCnt = fData->otherCnt;
+ errorCnt = fData->errorCnt;
+ wSlowestBytes = fData->wSlowestBytes;
+ wSmallestBytes = fData->wSmallestBytes;
+ wLargestBytes = fData->wLargestBytes;
+ w0KB1KBCnt = fData->w0KB1KBCnt;
+ w1KB8KBCnt = fData->w1KB8KBCnt;
+ w8KB32KBCnt = fData->w8KB32KBCnt;
+ w32KB128KBCnt = fData->w32KB128KBCnt;
+ w128KB256KBCnt = fData->w128KB256KBCnt;
+ w256KB512KBCnt = fData->w256KB512KBCnt;
+ w512KB1000KBCnt = fData->w512KB1000KBCnt;
+ w1000KB10MBCnt = fData->w1000KB10MBCnt;
+ w10MB100MBCnt = fData->w10MB100MBCnt;
+ w100MB1GBCnt = fData->w100MB1GBCnt;
+ w1GB10GBCnt = fData->w1GB10GBCnt;
+ w10GB100GBCnt = fData->w10GB100GBCnt;
+ w100GB1TBCnt = fData->w100GB1TBCnt;
+ w1TB10TBCnt = fData->w1TB10TBCnt;
+ rSlowestBytes = fData->rSlowestBytes;
+ rSmallestBytes = fData->rSmallestBytes;
+ rLargestBytes = fData->rLargestBytes;
+ r0KB1KBCnt = fData->r0KB1KBCnt;
+ r1KB8KBCnt = fData->r1KB8KBCnt;
+ r8KB32KBCnt = fData->r8KB32KBCnt;
+ r32KB128KBCnt = fData->r32KB128KBCnt;
+ r128KB256KBCnt = fData->r128KB256KBCnt;
+ r256KB512KBCnt = fData->r256KB512KBCnt;
+ r512KB1000KBCnt = fData->r512KB1000KBCnt;
+ r1000KB10MBCnt = fData->r1000KB10MBCnt;
+ r10MB100MBCnt = fData->r10MB100MBCnt;
+ r100MB1GBCnt = fData->r100MB1GBCnt;
+ r1GB10GBCnt = fData->r1GB10GBCnt;
+ r10GB100GBCnt = fData->r10GB100GBCnt;
+ r100GB1TBCnt = fData->r100GB1TBCnt;
+ r1TB10TBCnt = fData->r1TB10TBCnt;
+}
+
+FileData::~FileData ()
+{
+ free (fileName);
+ delete fileDesList;
+ delete virtualFds;
+}
+
+void
+FileData::setVirtualFds (int64_t vfd)
+{
+ for (int i = 0; i < virtualFds->size (); i++)
+ if (vfd == virtualFds->fetch (i))
+ return;
+ virtualFds->append (vfd);
+}
+
+void
+FileData::setFileDesList (int fd)
+{
+ for (int i = 0; i < fileDesList->size (); i++)
+ if (fd == fileDesList->fetch (i))
+ return;
+ fileDesList->append (fd);
+}
+
+void
+FileData::setFsType (const char* fst)
+{
+ size_t len = strlen (fst);
+ if (len > 0 && len < FSTYPESZ)
+ snprintf (fsType, sizeof (fsType), NTXT ("%s"), fst);
+ else
+ snprintf (fsType, sizeof (fsType), GTXT ("error"));
+}
+
+Histable*
+FileData::convertto (Histable_type type, Histable*)
+{
+ return (type == histType ? this : NULL);
+}
+
+char*
+FileData::get_name (Histable::NameFormat /*_nfmt*/)
+{
+ if (histType == Histable::IOACTVFD)
+ {
+ if (!streq (fileName, NTXT ("<Total>")))
+ {
+ if (fileDes >= 0)
+ return dbe_sprintf (GTXT ("%s (IOVFD=%lld, FD=%d)"), fileName,
+ (long long) virtualFd, (int) fileDes);
+ return dbe_sprintf (GTXT ("%s (IOVFD=%lld)"), fileName,
+ (long long) virtualFd);
+ }
+ else
+ return fileName;
+ }
+ else if (histType == Histable::IOACTFILE)
+ {
+ if (!streq (fileName, NTXT ("<Total>")))
+ {
+ if (!streq (fsType, NTXT ("N/A")))
+ return dbe_sprintf (GTXT ("%s (FS=%s)"), fileName, fsType);
+ return fileName;
+ }
+ return fileName;
+ }
+ return fileName;
+}
+
+char*
+FileData::get_raw_name (Histable::NameFormat /*_nfmt*/)
+{
+ return fileName;
+}
+
+void
+FileData::setFsType (FileSystem_type fst)
+{
+ const char *fsName;
+ switch (fst)
+ {
+ case ZFS_TYPE:
+ fsName = "zfs";
+ break;
+ case NFS_TYPE:
+ fsName = "nfs";
+ break;
+ case UFS_TYPE:
+ fsName = "ufs";
+ break;
+ case UDFS_TYPE:
+ fsName = "udfs";
+ break;
+ case LOFS_TYPE:
+ fsName = "lofs";
+ break;
+ case VXFS_TYPE:
+ fsName = "vxfs";
+ break;
+ case TMPFS_TYPE:
+ fsName = "tmpfs";
+ break;
+ case PCFS_TYPE:
+ fsName = "pcfs";
+ break;
+ case HSFS_TYPE:
+ fsName = "hsfs";
+ break;
+ case PROCFS_TYPE:
+ fsName = "procfs";
+ break;
+ case FIFOFS_TYPE:
+ fsName = "fifofs";
+ break;
+ case SWAPFS_TYPE:
+ fsName = "swapfs";
+ break;
+ case CACHEFS_TYPE:
+ fsName = "cachefs";
+ break;
+ case AUTOFS_TYPE:
+ fsName = "autofs";
+ break;
+ case SPECFS_TYPE:
+ fsName = "specfs";
+ break;
+ case SOCKFS_TYPE:
+ fsName = "sockfs";
+ break;
+ case FDFS_TYPE:
+ fsName = "fdfs";
+ break;
+ case MNTFS_TYPE:
+ fsName = "mntfs";
+ break;
+ case NAMEFS_TYPE:
+ fsName = "namefs";
+ break;
+ case OBJFS_TYPE:
+ fsName = "objfs";
+ break;
+ case SHAREFS_TYPE:
+ fsName = "sharefs";
+ break;
+ case EXT2FS_TYPE:
+ fsName = "ext2";
+ break;
+ case EXT3FS_TYPE:
+ fsName = "ext3";
+ break;
+ case EXT4FS_TYPE:
+ fsName = "ext4";
+ break;
+ case UNKNOWNFS_TYPE:
+ fsName = "N/A";
+ break;
+ default:
+ fsName = "N/A";
+ break;
+ }
+ setFsType (fsName);
+}
+
+void
+FileData::setWriteStat (hrtime_t wt, int64_t nb)
+{
+ if (wSlowestBytes < wt)
+ wSlowestBytes = wt;
+ if (nb != 0 && wSmallestBytes > nb)
+ wSmallestBytes = nb;
+ if (wLargestBytes < nb)
+ wLargestBytes = nb;
+ if (nb >= 0 && nb <= _1KB)
+ w0KB1KBCnt++;
+ else if (nb <= _8KB)
+ w1KB8KBCnt++;
+ else if (nb <= _32KB)
+ w8KB32KBCnt++;
+ else if (nb <= _128KB)
+ w32KB128KBCnt++;
+ else if (nb <= _256KB)
+ w128KB256KBCnt++;
+ else if (nb <= _512KB)
+ w256KB512KBCnt++;
+ else if (nb <= _1000KB)
+ w512KB1000KBCnt++;
+ else if (nb <= _10MB)
+ w1000KB10MBCnt++;
+ else if (nb <= _100MB)
+ w10MB100MBCnt++;
+ else if (nb <= _1GB)
+ w100MB1GBCnt++;
+ else if (nb <= _10GB)
+ w1GB10GBCnt++;
+ else if (nb <= _100GB)
+ w10GB100GBCnt++;
+ else if (nb <= _1TB)
+ w100GB1TBCnt++;
+ else if (nb <= _10TB)
+ w1TB10TBCnt++;
+}
+
+void
+FileData::setReadStat (hrtime_t rt, int64_t nb)
+{
+ if (rSlowestBytes < rt)
+ rSlowestBytes = rt;
+ if (nb != 0 && rSmallestBytes > nb)
+ rSmallestBytes = nb;
+ if (rLargestBytes < nb)
+ rLargestBytes = nb;
+ if (nb >= 0 && nb <= _1KB)
+ r0KB1KBCnt++;
+ else if (nb <= _8KB)
+ r1KB8KBCnt++;
+ else if (nb <= _32KB)
+ r8KB32KBCnt++;
+ else if (nb <= _128KB)
+ r32KB128KBCnt++;
+ else if (nb <= _256KB)
+ r128KB256KBCnt++;
+ else if (nb <= _512KB)
+ r256KB512KBCnt++;
+ else if (nb <= _1000KB)
+ r512KB1000KBCnt++;
+ else if (nb <= _10MB)
+ r1000KB10MBCnt++;
+ else if (nb <= _100MB)
+ r10MB100MBCnt++;
+ else if (nb <= _1GB)
+ r100MB1GBCnt++;
+ else if (nb <= _10GB)
+ r1GB10GBCnt++;
+ else if (nb <= _100GB)
+ r10GB100GBCnt++;
+ else if (nb <= _1TB)
+ r100GB1TBCnt++;
+ else if (nb <= _10TB)
+ r1TB10TBCnt++;
+}
diff --git a/gprofng/src/FileData.h b/gprofng/src/FileData.h
new file mode 100644
index 00000000000..67de68947fc
--- /dev/null
+++ b/gprofng/src/FileData.h
@@ -0,0 +1,522 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _FILEDATA_H
+#define _FILEDATA_H
+
+#include "gp-defs.h"
+#include "gp-time.h"
+
+#include "vec.h"
+#include "data_pckts.h"
+#include "Histable.h"
+
+#define FSTYPESZ 16
+
+#define VIRTUAL_FD_TOTAL 0
+#define VIRTUAL_FD_STDIN 1
+#define VIRTUAL_FD_STDOUT 2
+#define VIRTUAL_FD_STDERR 3
+#define VIRTUAL_FD_OTHERIO 4
+#define VIRTUAL_FD_NONE -1
+
+#define STDIN_FD 0
+#define STDOUT_FD 1
+#define STDERR_FD 2
+#define OTHERIO_FD -1
+
+#define OTHERIO_FILENAME "<Other IO activity>"
+#define STDIN_FILENAME "<stdin>"
+#define STDOUT_FILENAME "<stdout>"
+#define STDERR_FILENAME "<stderr>"
+#define TOTAL_FILENAME NTXT("<Total>")
+#define UNKNOWNFD_FILENAME "<pipe(), socket(), or other fds>"
+
+#define _1KB 1024
+#define _8KB 8192
+#define _32KB 32768
+#define _128KB 131072
+#define _256KB 262144
+#define _512KB 524288
+#define _1000KB 1048576
+#define _10MB 10485760
+#define _100MB 104857600
+#define _1GB 1073741824
+#define _10GB 10737418240
+#define _100GB 107374182400
+#define _1TB 1099511627776
+#define _10TB 10995116277760
+
+class FileData : public Histable
+{
+ friend class IOActivity;
+public:
+ FileData (const char *fName);
+ FileData (FileData *fData);
+ ~FileData ();
+
+ virtual char *get_name (Histable::NameFormat nfmt);
+ virtual Histable *convertto (Histable_type, Histable* = NULL);
+
+ char *get_raw_name (Histable::NameFormat nfmt);
+ void setFsType (FileSystem_type fst);
+ void setFsType (const char* fst);
+
+ virtual Histable_type
+ get_type ()
+ {
+ return histType;
+ };
+
+ virtual uint64_t
+ get_addr ()
+ {
+ return virtualFd;
+ };
+
+ uint64_t
+ get_index ()
+ {
+ return virtualFd;
+ };
+
+ void init ();
+
+ char *
+ getFileName ()
+ {
+ return fileName;
+ }
+
+ void
+ addReadEvent (hrtime_t rt, int64_t nb)
+ {
+ readTime += rt;
+ readBytes += nb;
+ readCnt++;
+ }
+
+ hrtime_t
+ getReadTime ()
+ {
+ return readTime;
+ }
+
+ int64_t
+ getReadBytes ()
+ {
+ return readBytes;
+ }
+
+ int32_t
+ getReadCnt ()
+ {
+ return readCnt;
+ }
+
+ void
+ addWriteEvent (hrtime_t wt, int64_t nb)
+ {
+ writeTime += wt;
+ writeBytes += nb;
+ writeCnt++;
+ }
+
+ hrtime_t
+ getWriteTime ()
+ {
+ return writeTime;
+ }
+
+ int64_t
+ getWriteBytes ()
+ {
+ return writeBytes;
+ }
+
+ int32_t
+ getWriteCnt ()
+ {
+ return writeCnt;
+ }
+
+ void
+ addOtherEvent (hrtime_t ot)
+ {
+ otherTime += ot;
+ otherCnt++;
+ }
+
+ hrtime_t
+ getOtherTime ()
+ {
+ return otherTime;
+ }
+
+ int32_t
+ getOtherCnt ()
+ {
+ return otherCnt;
+ }
+
+ void
+ addErrorEvent (hrtime_t er)
+ {
+ errorTime += er;
+ errorCnt++;
+ }
+
+ hrtime_t
+ getErrorTime ()
+ {
+ return errorTime;
+ }
+
+ int32_t
+ getErrorCnt ()
+ {
+ return errorCnt;
+ }
+
+ void setFileDesList (int fd);
+
+ Vector<int> *
+ getFileDesList ()
+ {
+ return fileDesList;
+ }
+
+ void
+ setFileDes (int fd)
+ {
+ fileDes = fd;
+ }
+
+ int32_t
+ getFileDes ()
+ {
+ return fileDes;
+ }
+
+ void setVirtualFds (int64_t vfd);
+
+ Vector<int64_t> *
+ getVirtualFds ()
+ {
+ return virtualFds;
+ }
+
+ char *
+ getFsType ()
+ {
+ return fsType;
+ }
+
+ void
+ setVirtualFd (int64_t vFd)
+ {
+ virtualFd = vFd;
+ }
+
+ int64_t
+ getVirtualFd ()
+ {
+ return virtualFd;
+ }
+
+ void
+ setHistType (Histable::Type hType)
+ {
+ histType = hType;
+ }
+
+ Histable::Type
+ getHistType ()
+ {
+ return histType;
+ }
+
+ void setWriteStat (hrtime_t wt, int64_t nb);
+
+ hrtime_t
+ getWSlowestBytes ()
+ {
+ return wSlowestBytes;
+ }
+
+ int64_t
+ getWSmallestBytes ()
+ {
+ return wSmallestBytes;
+ }
+
+ int64_t
+ getWLargestBytes ()
+ {
+ return wLargestBytes;
+ }
+
+ int32_t
+ getW0KB1KBCnt ()
+ {
+ return w0KB1KBCnt;
+ }
+
+ int32_t
+ getW1KB8KBCnt ()
+ {
+ return w1KB8KBCnt;
+ }
+
+ int32_t
+ getW8KB32KBCnt ()
+ {
+ return w8KB32KBCnt;
+ }
+
+ int32_t
+ getW32KB128KBCnt ()
+ {
+ return w32KB128KBCnt;
+ }
+
+ int32_t
+ getW128KB256KBCnt ()
+ {
+ return w128KB256KBCnt;
+ }
+
+ int32_t
+ getW256KB512KBCnt ()
+ {
+ return w256KB512KBCnt;
+ }
+
+ int32_t
+ getW512KB1000KBCnt ()
+ {
+ return w512KB1000KBCnt;
+ }
+
+ int32_t
+ getW1000KB10MBCnt ()
+ {
+ return w1000KB10MBCnt;
+ }
+
+ int32_t
+ getW10MB100MBCnt ()
+ {
+ return w10MB100MBCnt;
+ }
+
+ int32_t
+ getW100MB1GBCnt ()
+ {
+ return w100MB1GBCnt;
+ }
+
+ int32_t
+ getW1GB10GBCnt ()
+ {
+ return w1GB10GBCnt;
+ }
+
+ int32_t
+ getW10GB100GBCnt ()
+ {
+ return w10GB100GBCnt;
+ }
+
+ int32_t
+ getW100GB1TBCnt ()
+ {
+ return w100GB1TBCnt;
+ }
+
+ int32_t
+ getW1TB10TBCnt ()
+ {
+ return w1TB10TBCnt;
+ }
+
+ void setReadStat (hrtime_t rt, int64_t nb);
+
+ hrtime_t
+ getRSlowestBytes ()
+ {
+ return rSlowestBytes;
+ }
+
+ int64_t
+ getRSmallestBytes ()
+ {
+ return rSmallestBytes;
+ }
+
+ int64_t
+ getRLargestBytes ()
+ {
+ return rLargestBytes;
+ }
+
+ int32_t
+ getR0KB1KBCnt ()
+ {
+ return r0KB1KBCnt;
+ }
+
+ int32_t
+ getR1KB8KBCnt ()
+ {
+ return r1KB8KBCnt;
+ }
+
+ int32_t
+ getR8KB32KBCnt ()
+ {
+ return r8KB32KBCnt;
+ }
+
+ int32_t
+ getR32KB128KBCnt ()
+ {
+ return r32KB128KBCnt;
+ }
+
+ int32_t
+ getR128KB256KBCnt ()
+ {
+ return r128KB256KBCnt;
+ }
+
+ int32_t
+ getR256KB512KBCnt ()
+ {
+ return r256KB512KBCnt;
+ }
+
+ int32_t
+ getR512KB1000KBCnt ()
+ {
+ return r512KB1000KBCnt;
+ }
+
+ int32_t
+ getR1000KB10MBCnt ()
+ {
+ return r1000KB10MBCnt;
+ }
+
+ int32_t
+ getR10MB100MBCnt ()
+ {
+ return r10MB100MBCnt;
+ }
+
+ int32_t
+ getR100MB1GBCnt ()
+ {
+ return r100MB1GBCnt;
+ }
+
+ int32_t
+ getR1GB10GBCnt ()
+ {
+ return r1GB10GBCnt;
+ }
+
+ int32_t
+ getR10GB100GBCnt ()
+ {
+ return r10GB100GBCnt;
+ }
+
+ int32_t
+ getR100GB1TBCnt ()
+ {
+ return r100GB1TBCnt;
+ }
+
+ int32_t
+ getR1TB10TBCnt ()
+ {
+ return r1TB10TBCnt;
+ }
+
+private:
+ char *fileName; // File name
+ hrtime_t readTime; // The Total time for read operations;
+ hrtime_t writeTime; // The Total time for write operations;
+ hrtime_t otherTime; // The Total time for other IO operations;
+ hrtime_t errorTime; // The Total time for failed IO operations;
+ int64_t readBytes; //The total bytes read
+ int64_t writeBytes; //The total bytes written
+ int32_t readCnt; // The read count
+ int32_t writeCnt; // The write count
+ int32_t otherCnt; // The other IO count
+ int32_t errorCnt; // The failed IO count
+ Vector<int> *fileDesList; // The list of file descriptors
+ Vector<int64_t> *virtualFds; // The list of file virtual descriptors
+ char fsType[FSTYPESZ]; // The file system type
+ int64_t virtualFd; // The virtual file descriptor
+ int32_t fileDes; // The file descriptor
+ Histable::Type histType; // The Histable type: IOACTFILE, IOACTVFD, ...
+
+ // Write statistics
+ hrtime_t wSlowestBytes;
+ int64_t wSmallestBytes;
+ int64_t wLargestBytes;
+ int32_t w0KB1KBCnt;
+ int32_t w1KB8KBCnt;
+ int32_t w8KB32KBCnt;
+ int32_t w32KB128KBCnt;
+ int32_t w128KB256KBCnt;
+ int32_t w256KB512KBCnt;
+ int32_t w512KB1000KBCnt;
+ int32_t w1000KB10MBCnt;
+ int32_t w10MB100MBCnt;
+ int32_t w100MB1GBCnt;
+ int32_t w1GB10GBCnt;
+ int32_t w10GB100GBCnt;
+ int32_t w100GB1TBCnt;
+ int32_t w1TB10TBCnt;
+
+ // Read statistics
+ hrtime_t rSlowestBytes;
+ int64_t rSmallestBytes;
+ int64_t rLargestBytes;
+ int32_t r0KB1KBCnt;
+ int32_t r1KB8KBCnt;
+ int32_t r8KB32KBCnt;
+ int32_t r32KB128KBCnt;
+ int32_t r128KB256KBCnt;
+ int32_t r256KB512KBCnt;
+ int32_t r512KB1000KBCnt;
+ int32_t r1000KB10MBCnt;
+ int32_t r10MB100MBCnt;
+ int32_t r100MB1GBCnt;
+ int32_t r1GB10GBCnt;
+ int32_t r10GB100GBCnt;
+ int32_t r100GB1TBCnt;
+ int32_t r1TB10TBCnt;
+};
+
+#endif
diff --git a/gprofng/src/Filter.cc b/gprofng/src/Filter.cc
new file mode 100644
index 00000000000..34eda0d7eff
--- /dev/null
+++ b/gprofng/src/Filter.cc
@@ -0,0 +1,514 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <ctype.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+#include <errno.h>
+#include "Filter.h"
+#include "util.h"
+#include "i18n.h"
+#include "data_pckts.h"
+#include "StringBuilder.h"
+#include "Experiment.h"
+
+
+// ========================================================================
+// Subclass: FilterNumeric
+// Public Methods
+
+FilterNumeric::FilterNumeric (Experiment *_exp, const char *_cmd,
+ const char *_name)
+{
+ exp = _exp;
+ cmd = dbe_strdup (_cmd);
+ name = dbe_strdup (_name);
+ pattern = NULL;
+ status = NULL;
+ items = NULL;
+ prop_name = NULL;
+ first = (uint64_t) - 1;
+ last = (uint64_t) - 1;
+ nselected = 0;
+ nitems = 0;
+}
+
+FilterNumeric::~FilterNumeric ()
+{
+ free (cmd);
+ free (name);
+ free (pattern);
+ free (status);
+ Destroy (items);
+}
+
+// sets min and max for this filter; should be called when the range is
+// known -- that comes after the first PathTree build, in the current
+// sequence of things
+void
+FilterNumeric::set_range (uint64_t findex, uint64_t lindex, uint64_t total)
+{
+ if (first == findex && last == lindex)
+ return;
+ first = findex;
+ last = lindex;
+ nitems = total;
+ nselected = nitems;
+ if (pattern)
+ {
+ free (pattern);
+ pattern = NULL;
+ }
+ if (status)
+ {
+ free (status);
+ status = NULL;
+ }
+}
+
+void
+FilterNumeric::update_range ()
+{
+ if (exp == NULL)
+ return;
+ if (streq (cmd, NTXT ("sample")))
+ set_range (1, (uint64_t) exp->nsamples (), exp->nsamples ());
+ else if (streq (cmd, NTXT ("thread")))
+ set_range (exp->min_thread, exp->max_thread, exp->thread_cnt);
+ else if (streq (cmd, NTXT ("LWP")))
+ set_range (exp->min_lwp, exp->max_lwp, exp->lwp_cnt);
+ else if (streq (cmd, NTXT ("cpu")))
+ {
+ if (exp->min_cpu != (uint64_t) - 1)
+ set_range (exp->min_cpu, exp->max_cpu, exp->cpu_cnt);
+ }
+}
+
+// get_advanced_filter -- returns a string matching the current setting
+char *
+FilterNumeric::get_advanced_filter ()
+{
+ if (items == NULL)
+ return NULL;
+ if (items->size () == 0)
+ return dbe_strdup (NTXT ("0"));
+
+ StringBuilder sb;
+ if (items->size () > 1)
+ sb.append ('(');
+ for (int i = 0; i < items->size (); i++)
+ {
+ RangePair *rp = items->fetch (i);
+ if (i > 0)
+ sb.append (NTXT (" || "));
+ sb.append ('(');
+ sb.append (prop_name);
+ if (rp->first == rp->last)
+ {
+ sb.append (NTXT ("=="));
+ sb.append ((long long) rp->first);
+ }
+ else
+ {
+ sb.append (NTXT (">="));
+ sb.append ((long long) rp->first);
+ sb.append (NTXT (" && "));
+ sb.append (prop_name);
+ sb.append (NTXT ("<="));
+ sb.append ((long long) rp->last);
+ }
+ sb.append (')');
+ }
+ if (items->size () > 1)
+ sb.append (')');
+ return sb.toString ();
+}
+
+
+// get_pattern -- returns a string matching the current setting
+
+char *
+FilterNumeric::get_pattern ()
+{
+ update_range ();
+ if (pattern)
+ return pattern;
+ StringBuilder sb;
+ if (items == NULL)
+ {
+ if (last == (uint64_t) - 1 && last == first)
+ // neither set; data not available
+ sb.append (GTXT ("(data not recorded)"));
+ else
+ sb.append (GTXT ("all"));
+ }
+ else if (items->size () == 0)
+ sb.append (GTXT ("none"));
+ else
+ {
+ for (int i = 0; i < items->size (); i++)
+ {
+ RangePair *rp = items->fetch (i);
+ if (i > 0)
+ sb.append (',');
+ sb.append ((long long) rp->first);
+ if (rp->first != rp->last)
+ {
+ sb.append ('-');
+ sb.append ((long long) rp->last);
+ }
+ }
+ }
+ pattern = sb.toString ();
+ return pattern;
+}
+
+char *
+FilterNumeric::get_status ()
+{
+ update_range ();
+ if (status == NULL)
+ update_status ();
+ return dbe_strdup (status);
+}
+
+// set_pattern -- set the filter to a new pattern
+// set error true/false if there was or was not an error parsing string
+// Returns true/false if the filter changed, implying a rebuild of data
+bool
+FilterNumeric::set_pattern (char *str, bool *error)
+{
+ update_range ();
+ // save the old filter
+ Vector<RangePair *> *olditems = items;
+ *error = false;
+ if (strcmp (str, NTXT ("all")) == 0)
+ // if all, leave items NULL
+ items = NULL;
+ else if (strcmp (str, NTXT ("none")) == 0)
+ // if none, leave items as a zero-length vector
+ items = new Vector<RangePair *>(0);
+ else
+ {
+ uint64_t val, val2;
+ char *s = str;
+ char *nexts = s;
+ items = NULL;
+ for (bool done = false; done == false;)
+ {
+ // tokenize the string
+ // Does it start with a "-" ?
+ if (*nexts == '-')
+ val = first; // yes, set val to first, and see what follows
+ else
+ {
+ // it must start with a number
+ val = get_next_number (s, &nexts, error);
+ if (*error == true)
+ break;
+ }
+
+ // look at the next character
+ switch (*nexts)
+ {
+ case ',':
+ s = ++nexts;
+ *error = include_range (val, val);
+ if (*error == true)
+ done = true;
+ break;
+ case '-':
+ s = ++nexts;
+ if (*nexts == ',' || *nexts == '\0')
+ val2 = last;
+ else
+ {
+ val2 = get_next_number (s, &nexts, error);
+ if (*error == true)
+ {
+ done = true;
+ break;
+ }
+ }
+ if (val > val2)
+ {
+ *error = true;
+ done = true;
+ break;
+ }
+ *error = include_range (val, val2);
+ if (*error == true)
+ {
+ done = true;
+ break;
+ }
+ if (*nexts == ',')
+ {
+ s = ++nexts;
+ break;
+ }
+ if (*nexts == '\0')
+ {
+ done = true;
+ break;
+ }
+ break;
+ case '\0':
+ *error = include_range (val, val);
+ done = true;
+ break;
+ default:
+ *error = true;
+ done = true;
+ break;
+ }
+ }
+ // if there was a parser error leave old setting
+ if (*error == true)
+ {
+ if (items)
+ {
+ items->destroy ();
+ delete items;
+ }
+ items = olditems;
+ return false;
+ }
+ }
+
+ if (first != (uint64_t) - 1 && last != (uint64_t) - 1)
+ {
+ for (long i = VecSize (items) - 1; i >= 0; i--)
+ {
+ RangePair *rp = items->get (i);
+ if ((rp->first > last) || (rp->last < first))
+ {
+ delete rp;
+ items->remove (i);
+ continue;
+ }
+ if (rp->first < first)
+ rp->first = first;
+ if (rp->last > last)
+ rp->last = last;
+ }
+ if (VecSize (items) == 1)
+ {
+ RangePair *rp = items->get (0);
+ if ((rp->first == first) && (rp->last == last))
+ {
+ // All, leave items NULL
+ items->destroy ();
+ delete items;
+ items = NULL;
+ }
+ }
+ }
+
+ // no error, delete the old setting
+ if (olditems != NULL)
+ {
+ olditems->destroy ();
+ delete olditems;
+ }
+
+ bool changed;
+ // regenerate the pattern
+ if (pattern == NULL)
+ changed = true;
+ else
+ {
+ char *oldpattern = pattern;
+ pattern = NULL; // to force a recompute with new values
+ (void) get_pattern ();
+ changed = strcmp (pattern, oldpattern) != 0;
+ free (oldpattern);
+ }
+ return changed;
+}
+
+//================================================================
+// Protected methods
+
+// set_status -- regenerate the status line, describing the current setting
+void
+FilterNumeric::update_status ()
+{
+ // regenerate the status line
+ free (status);
+ nselected = 0;
+ if (items == NULL)
+ {
+ if (last == (uint64_t) - 1 && last == first)
+ // neither set; data not available
+ status = dbe_sprintf (GTXT ("(data not recorded)"));
+ else if (first == (uint64_t) - 1 || last == (uint64_t) - 1)
+ // range was not set
+ status = dbe_sprintf (GTXT ("(all)"));
+ else
+ // range was set, compute percentage
+ status = dbe_sprintf (GTXT ("total %lld, range: %lld-%lld"),
+ (long long) nitems, (long long) first,
+ (long long) last);
+ }
+ else
+ {
+ // some are selected
+ int index;
+ RangePair *rp;
+ Vec_loop (RangePair *, items, index, rp)
+ {
+ nselected += rp->last - rp->first + 1;
+ }
+ if (last == (uint64_t) - 1)
+ // range was not set
+ status = dbe_sprintf (GTXT ("(%lld items selected)"),
+ (long long) nselected);
+ else
+ // range was set
+ status = dbe_sprintf (GTXT ("total %lld, range: %lld-%lld"),
+ (long long) nitems, (long long) first,
+ (long long) last);
+ }
+}
+
+// Add a range to the filter; called from set_pattern for each index,
+// or index pair
+bool
+FilterNumeric::include_range (uint64_t findex, uint64_t lindex)
+{
+ int index;
+ RangePair *rp;
+ if (findex > lindex)
+ return true;
+
+ bool done = false;
+ if (items == NULL)
+ items = new Vector<RangePair *>(0);
+
+ Vec_loop (RangePair *, items, index, rp)
+ {
+ if (findex < rp->first)
+ {
+ // Case where the new pair starts before the old
+ if (lindex + 1 < rp->first)
+ {
+ // this pair comes cleanly in front of the current item
+ RangePair *rp2 = new RangePair ();
+ rp2->first = findex;
+ rp2->last = lindex;
+ items->insert (index, rp2);
+ done = true;
+ break;
+ }
+ // This new one extends the previous from the front
+ rp->first = findex;
+chkextend:
+ if (lindex <= rp->last)
+ {
+ // but does not extend the back
+ done = true;
+ break;
+ }
+ // extend this one out
+ rp->last = lindex;
+
+ // does it go into the next range?
+ if (index == items->size () - 1)
+ {
+ // this is the last range, so it does not
+ done = true;
+ break;
+ }
+ RangePair *next = items->fetch (index + 1);
+ if (lindex + 1 < next->first)
+ {
+ // no extension, we're done
+ done = true;
+ break;
+ }
+ // it does extend the next one
+ next->first = rp->first;
+ rp = next;
+ // remove the current one, promoting next
+ items->remove (index);
+ goto chkextend;
+ }
+ else if (findex > rp->last + 1)
+ // the new one is completely beyond the current
+ continue;
+ else
+ {
+ // the new one may start at or after the current, but it
+ // extends it out; set the current
+ // this pair overlaps the current item
+ // rp-> first is OK -- it's equal or less than findex
+ goto chkextend;
+ }
+ }
+
+ if (done != true)
+ {
+ // fall through -- append to list
+ rp = new RangePair ();
+ rp->first = findex;
+ rp->last = lindex;
+ items->append (rp);
+ }
+
+ return false;
+}
+
+// Scan the filter to see if the number given is filtered in or out
+// return true if number is in, false if it's out
+bool
+FilterNumeric::is_selected (uint64_t number)
+{
+ int index;
+ RangePair *rp;
+ if (items == NULL)
+ return true;
+ if (items->size () == 0)
+ return false;
+
+ Vec_loop (RangePair *, items, index, rp)
+ {
+ if (number >= rp->first && number <= rp->last)
+ return true;
+ }
+ return false;
+}
+
+// get_next_number
+// Called from parser to extract a number from the current string position
+// Sets fail true if there was an error, false otherwise
+// returns the number as parsed
+uint64_t
+FilterNumeric::get_next_number (char *s, char **e, bool *fail)
+{
+ errno = 0;
+ *fail = false;
+ uint64_t val = strtoll (s, e, 10);
+ if (errno == EINVAL)
+ *fail = true;
+ return (val);
+}
diff --git a/gprofng/src/Filter.h b/gprofng/src/Filter.h
new file mode 100644
index 00000000000..13382188e45
--- /dev/null
+++ b/gprofng/src/Filter.h
@@ -0,0 +1,111 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _FILTER_H
+#define _FILTER_H
+
+// A sample selection specifies a set of samples the user is interested in
+// viewing as a whole.
+
+#include "vec.h"
+#include "data_pckts.h"
+
+class Experiment;
+
+class FilterNumeric
+{
+public:
+ FilterNumeric (Experiment *, const char *, const char *);
+ ~FilterNumeric ();
+
+ // set or update the range of items first and last
+ void set_range (uint64_t findex, uint64_t lindex, uint64_t total);
+
+ // Return a string representation of the current ranges
+ // E.g. "1-5,7,9,10,12-13,73"
+ char *get_pattern ();
+
+ // Return a string for the current status: %, range, ...
+ // E.g. "100%" "100% [1-7]" "25% [1-4]"
+ char *get_status ();
+
+ char *get_advanced_filter ();
+
+ // Sets selection according to the string representation
+ // See above for return values and error handling
+ bool set_pattern (char *, bool *);
+
+ // Return true if "number" is included in selection
+ bool is_selected (uint64_t number);
+
+ char *
+ get_cmd ()
+ {
+ return cmd;
+ };
+
+ char *
+ get_name ()
+ {
+ return name;
+ };
+
+ uint64_t
+ nelem ()
+ {
+ return nitems;
+ };
+
+ char *prop_name; // name in advanced filter
+
+private:
+
+ typedef struct
+ {
+ uint64_t first;
+ uint64_t last;
+ } RangePair;
+
+ void update_status ();
+ void update_range ();
+
+ // Include "range" in selection
+ bool include_range (uint64_t findex, uint64_t lindex);
+
+ // Parse a number from the string
+ uint64_t get_next_number (char *s, char **e, bool *fail);
+
+ // Data
+ Vector<RangePair *> *items; // sorted array of items
+ uint64_t nselected;
+ uint64_t nitems;
+
+ Experiment *exp;
+ char *cmd;
+ char *name;
+ char *pattern;
+ char *status;
+
+ // First and Last items in selection
+ uint64_t first;
+ uint64_t last;
+};
+
+#endif /* _FILTER_H */
diff --git a/gprofng/src/FilterExp.h b/gprofng/src/FilterExp.h
new file mode 100644
index 00000000000..b186af1d9b3
--- /dev/null
+++ b/gprofng/src/FilterExp.h
@@ -0,0 +1,56 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _FILTEREXP_H
+#define _FILTEREXP_H
+
+#include "Expression.h"
+
+class FilterExp
+{
+public:
+
+ FilterExp (Expression *_expr, Expression::Context *_ctx, bool _noParFilter) :
+ expr (_expr), ctx (_ctx), noParFilter (_noParFilter) { };
+
+ ~FilterExp ()
+ {
+ delete ctx;
+ }
+
+ bool
+ passes ()
+ {
+ return expr ? expr->passes (ctx) : true;
+ }
+
+ void
+ put (DataView *dview, long eventId)
+ {
+ ctx->put (dview, eventId);
+ }
+
+ Expression *expr;
+ Expression::Context *ctx;
+ bool noParFilter;
+};
+
+
+#endif /* _FILTEREXP_H */
diff --git a/gprofng/src/FilterSet.cc b/gprofng/src/FilterSet.cc
new file mode 100644
index 00000000000..29dc437d98b
--- /dev/null
+++ b/gprofng/src/FilterSet.cc
@@ -0,0 +1,106 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include "Experiment.h"
+#include "StringBuilder.h"
+#include "FilterSet.h"
+#include "Filter.h"
+#include "i18n.h"
+
+FilterSet::FilterSet (DbeView *_dbev, Experiment *_exp)
+{
+ dbev = _dbev;
+ exp = _exp;
+ enbl = false;
+ dfilter = new Vector<FilterNumeric *>;
+ FilterNumeric *f;
+ f = new FilterNumeric (exp, "sample", GTXT ("Samples"));
+ f->prop_name = NTXT ("SAMPLE_MAP");
+ dfilter->append (f);
+ f = new FilterNumeric (exp, "thread", GTXT ("Threads"));
+ f->prop_name = NTXT ("THRID");
+ dfilter->append (f);
+ f = new FilterNumeric (exp, "LWP", GTXT ("LWPs"));
+ f->prop_name = NTXT ("LWPID");
+ dfilter->append (f);
+ f = new FilterNumeric (exp, "cpu", GTXT ("CPUs"));
+ f->prop_name = NTXT ("CPUID");
+ dfilter->append (f);
+ f = new FilterNumeric (exp, "gcevent", GTXT ("GCEvents"));
+ f->prop_name = NTXT ("GCEVENT_MAP");
+ dfilter->append (f); // must add new numeric below
+}
+
+FilterSet::~FilterSet ()
+{
+ dfilter->destroy ();
+ delete dfilter;
+}
+
+FilterNumeric *
+FilterSet::get_filter (int index)
+{
+ if (index < dfilter->size () && index >= 0)
+ return dfilter->fetch (index);
+ return NULL;
+}
+
+char *
+FilterSet::get_advanced_filter ()
+{
+ StringBuilder sb;
+ bool filtrIsFalse = false;
+
+ if (get_enabled ())
+ {
+ Vector<FilterNumeric*> *filts = get_all_filters ();
+ if (filts == NULL)
+ return NULL;
+ for (int i = 0; i < filts->size (); i++)
+ {
+ FilterNumeric *f = filts->fetch (i);
+ if (f == NULL)
+ continue;
+ char *s = f->get_advanced_filter ();
+ if (s == NULL)
+ continue;
+ if (streq (s, NTXT ("0")))
+ {
+ free (s);
+ sb.setLength (0);
+ filtrIsFalse = true;
+ break;
+ }
+ if (sb.length () != 0)
+ sb.append (NTXT (" && "));
+ sb.append (s);
+ free (s);
+ }
+ }
+ else
+ filtrIsFalse = true;
+ if (filtrIsFalse)
+ sb.append ('0');
+ else if (sb.length () == 0)
+ return NULL;
+ return sb.toString ();
+}
+
diff --git a/gprofng/src/FilterSet.h b/gprofng/src/FilterSet.h
new file mode 100644
index 00000000000..6908565cc26
--- /dev/null
+++ b/gprofng/src/FilterSet.h
@@ -0,0 +1,72 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _FILTERSET_H
+#define _FILTERSET_H
+
+#include "dbe_types.h"
+#include "vec.h"
+
+class Experiment;
+class FilterNumeric;
+class DbeView;
+
+#define SAMPLE_FILTER_IDX 0
+#define THREAD_FILTER_IDX 1
+#define LWP_FILTER_IDX 2
+#define CPU_FILTER_IDX 3
+
+class FilterSet
+{
+public:
+
+ FilterSet (DbeView *_dbev, Experiment *_exp);
+ ~FilterSet ();
+ char *get_advanced_filter ();
+ FilterNumeric *get_filter (int);
+
+ bool
+ get_enabled ()
+ {
+ return enbl;
+ }
+
+ void
+ set_enabled (bool b)
+ {
+ enbl = b;
+ }
+
+ Vector<FilterNumeric*> *
+ get_all_filters ()
+ {
+ return dfilter;
+ }
+
+private:
+
+ DbeView *dbev;
+ Experiment *exp;
+ bool enbl;
+ Vector<FilterNumeric*> *dfilter;
+};
+
+#endif /* _FILTERSET_H */
+
diff --git a/gprofng/src/Function.cc b/gprofng/src/Function.cc
new file mode 100644
index 00000000000..b0e4a8ff16a
--- /dev/null
+++ b/gprofng/src/Function.cc
@@ -0,0 +1,1160 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <assert.h>
+#include <string.h>
+#include <ctype.h>
+
+#include "demangle.h"
+#include "util.h"
+#include "DbeSession.h"
+#include "Function.h"
+#include "Module.h"
+#include "LoadObject.h"
+#include "Settings.h"
+#include "DbeFile.h"
+#include "DbeView.h"
+
+struct SrcInfo
+{
+ DbeLine *src_line;
+ SrcInfo *included_from;
+ SrcInfo *next;
+};
+
+struct PCInfo
+{
+ int64_t offset;
+ int64_t size;
+ SrcInfo *src_info;
+};
+
+Function::Function (uint64_t _id)
+{
+ id = _id;
+ instr_id = id << 32;
+ derivedNode = NULL;
+ module = NULL;
+ line_first = line_last = -1;
+ isOutlineFunction = false;
+ name = NULL;
+ mangled_name = NULL;
+ match_name = NULL;
+ comparable_name = NULL;
+ img_fname = NULL;
+ img_offset = 0;
+ chksum = 0;
+ flags = 0;
+ size = 0;
+ save_addr = FUNC_NO_SAVE;
+ linetab = NULL;
+ def_source = NULL;
+ indexStabsLink = NULL;
+ elfSym = NULL;
+ sources = NULL;
+ instrs = new Vector<DbeInstr*>;
+ addrs = NULL;
+ name_buf = NULL;
+ current_name_format = Histable::NA;
+ curr_srcinfo = NULL;
+ curr_srcfile = NULL;
+ srcinfo_list = NULL;
+ defaultDbeLine = NULL;
+ usrfunc = NULL;
+ alias = NULL;
+ instHTable = NULL;
+ addrIndexHTable = NULL;
+ isUsed = false;
+ isHideFunc = false;
+ inlinedSubr = NULL;
+ inlinedSubrCnt = 0;
+}
+
+Function::~Function ()
+{
+ free (mangled_name);
+ free (match_name);
+ free (comparable_name);
+ free (name_buf);
+ Destroy (linetab);
+ Destroy (instrs);
+
+ while (srcinfo_list)
+ {
+ SrcInfo *t = srcinfo_list;
+ srcinfo_list = t->next;
+ delete t;
+ }
+ delete sources;
+ delete addrs;
+ delete[] instHTable;
+ delete[] addrIndexHTable;
+ if (indexStabsLink)
+ // Remove a link to the current function
+ indexStabsLink->indexStabsLink = NULL;
+}
+
+char *
+Function::get_name (NameFormat nfmt)
+{
+ if (nfmt == Histable::NA)
+ {
+ DbeView *dbeView = dbeSession->getView (0);
+ if (dbeView)
+ nfmt = dbeView->get_name_format ();
+ }
+ if (name_buf && (nfmt == current_name_format || nfmt == Histable::NA))
+ return name_buf;
+ free (name_buf);
+ current_name_format = nfmt;
+
+ bool soname_fmt = Histable::soname_fmt (nfmt);
+ int fname_fmt = Histable::fname_fmt (nfmt);
+ if (fname_fmt == Histable::MANGLED)
+ name_buf = strdup (mangled_name);
+ else
+ {
+ if (module && module->is_fortran ()
+ && (streq (name, "MAIN") || streq (name, "MAIN_")))
+ name_buf = strdup (match_name);
+ else
+ name_buf = strdup (name);
+
+ if (fname_fmt == Histable::SHORT)
+ {
+ int i = get_paren (name_buf);
+ if (i != -1)
+ name_buf[i] = (char) 0;
+ }
+ }
+ if (soname_fmt)
+ {
+ char *fname = dbe_sprintf (NTXT ("%s [%s]"), name_buf, module->loadobject->get_name ());
+ free (name_buf);
+ name_buf = fname;
+ }
+ return name_buf;
+}
+
+uint64_t
+Function::get_addr ()
+{
+ LoadObject *lo = module ? module->loadobject : NULL;
+ int seg_idx = lo ? lo->seg_idx : -1;
+ return MAKE_ADDRESS (seg_idx, img_offset);
+}
+
+Histable *
+Function::convertto (Histable_type type, Histable *obj)
+{
+ Histable *res = NULL;
+ SourceFile *source = (SourceFile*) obj;
+ switch (type)
+ {
+ case INSTR:
+ res = find_dbeinstr (0, 0);
+ break;
+ case LINE:
+ {
+ // mapPCtoLine will implicitly read line info if necessary
+ res = mapPCtoLine (0, source);
+ break;
+ }
+ case FUNCTION:
+ res = this;
+ break;
+ case SOURCEFILE:
+ res = def_source;
+ break;
+ default:
+ assert (0);
+ }
+ return res;
+}
+
+void
+Function::set_name (char *string)
+{
+ if (string == NULL)
+ return;
+ set_mangled_name (string);
+
+ // strip away any globalization prefix, and save result for matching
+ char *mname = string;
+ if (strncmp (string, "$X", 2) == 0 || strncmp (string, ".X", 2) == 0)
+ {
+ // name was globalized
+ char *n = strchr (string + 2, (int) '.');
+ if (n != NULL)
+ mname = n + 1;
+ }
+ set_match_name (mname);
+ name = NULL;
+ if (module)
+ {
+ if (name == NULL && *match_name == '_')
+ {
+ int flag = DMGL_PARAMS;
+ if (module->lang_code == Sp_lang_java)
+ flag |= DMGL_JAVA;
+ name = cplus_demangle (match_name, flag);
+ }
+ }
+ if (name == NULL) // got demangled string
+ name = dbe_strdup (match_name);
+ set_comparable_name (name);
+}
+
+void
+Function::set_mangled_name (const char *string)
+{
+ if (string)
+ {
+ free (mangled_name);
+ mangled_name = dbe_strdup (string);
+ }
+}
+
+void
+Function::set_match_name (const char *string)
+{
+ if (string)
+ {
+ free (match_name);
+ match_name = dbe_strdup (string);
+ }
+}
+
+void
+Function::set_comparable_name (const char *string)
+{
+ if (string)
+ {
+ free (comparable_name);
+ comparable_name = dbe_strdup (string);
+
+ // remove blanks from comparable_name
+ for (char *s = comparable_name, *s1 = comparable_name;;)
+ {
+ if (*s == 0)
+ {
+ *s1 = 0;
+ break;
+ }
+ else if (*s != ' ')
+ {
+ *s1 = *s;
+ s1++;
+ }
+ s++;
+ }
+ }
+}
+
+// This function looks at the name of a function, and determines whether
+// or not it may be a derived function -- outline, mtask, or clone --
+// If it is, it writes the function name as demangled,
+// and sets a pointer to the function from which it was derived
+void
+Function::findDerivedFunctions ()
+
+{
+ MPFuncTypes ftype;
+ int index;
+ Function *fitem;
+ unsigned long long line_no;
+ char *namefmt;
+ char *subname = mangled_name;
+ char *demname;
+
+ // see if we've already done this
+ if ((flags & FUNC_FLAG_RESDER) != 0)
+ return;
+
+ // set flag for future
+ flags = flags | FUNC_FLAG_RESDER;
+ if (module == NULL)
+ return;
+ if (*subname != '_' || subname[1] != '$') // Not a specially named function
+ return;
+
+ // look for the current versions of naming
+ if (strncmp (subname + 2, NTXT ("d1"), 2) == 0) // doall function
+ ftype = MPF_DOALL;
+ else if (strncmp (subname + 2, "p1", 2) == 0) // parallel region function
+ ftype = MPF_PAR;
+ else if (strncmp (subname + 2, "l1", 2) == 0) // single thread loop setup
+ ftype = MPF_DOALL;
+ else if (strncmp (subname + 2, "s1", 2) == 0) // parallel section function
+ ftype = MPF_SECT;
+ else if (strncmp (subname + 2, "t1", 2) == 0) // task function
+ ftype = MPF_TASK;
+ else if (strncmp (subname + 2, "o1", 2) == 0) // outline function
+ {
+ ftype = MPF_OUTL;
+ isOutlineFunction = true;
+ }
+ else if (strncmp (subname + 2, "c1", 2) == 0) // clone function
+ ftype = MPF_CLONE;
+ else // Not an encoded name, just return
+ return;
+
+ // we know it's one of the above prefixes
+ char *sub = dbe_strdup (name + 4); // starting with base-26 number
+ char *p = sub;
+
+ // skip the base-26 number, and extract the line number
+ while (isalpha ((int) (*p)) != 0 && *p != 0)
+ p++;
+ line_no = atoll (p);
+
+ // skip past the number to to the .
+ while (*p != '.' && *p != 0)
+ p++;
+ if (*p == 0)
+ {
+ // can't be right
+ free (sub);
+ return;
+ }
+ // skip the trailing .
+ p++;
+ subname = p;
+ bool foundmatch = false;
+
+ // Find the function from which it is derived -- the one that matched subname
+ Vec_loop (Function*, module->functions, index, fitem)
+ {
+ if (streq (subname, fitem->mangled_name))
+ { // found it
+ foundmatch = true;
+ usrfunc = fitem;
+
+ // set the derived node
+ if ((fitem->flags & FUNC_FLAG_RESDER) == 0)
+ // ensure that it, too, is resolved if derived
+ fitem->findDerivedFunctions ();
+
+ // Build a demangled name
+ switch (ftype)
+ {
+ case MPF_OUTL:
+ isOutlineFunction = true;
+ namefmt = GTXT ("%s -- outline code from line %lld [%s]");
+ derivedNode = fitem->find_dbeinstr (PCLineFlag, line_no);
+ break;
+ case MPF_PAR:
+ namefmt = GTXT ("%s -- OMP parallel region from line %lld [%s]");
+ break;
+ case MPF_DOALL:
+ namefmt = GTXT ("%s -- Parallel loop from line %lld [%s]");
+ break;
+ case MPF_SECT:
+ namefmt = GTXT ("%s -- OMP sections from line %lld [%s]");
+ break;
+ case MPF_CLONE:
+ // Note that clones are handled differently -- no line number and
+ // clones are NOT shown as called from the original
+ // so after constructing the name, just return
+ // later, establish link from clone to parent
+ demname = dbe_sprintf (GTXT ("%s -- cloned version [%s]"),
+ fitem->get_name (), name);
+ free (name);
+ // set the name to the demangled version
+ name = demname;
+ free (sub);
+ derivedNode = fitem->find_dbeinstr (PCLineFlag, line_no);
+ return;
+ case MPF_TASK:
+ namefmt = GTXT ("%s -- OMP task from line %lld [%s]");
+ break;
+ default:
+ free (sub);
+ return;
+
+ }
+
+ // Finally, construct the demangled name
+ demname = dbe_sprintf (namefmt, fitem->get_name (), line_no, name);
+ free (name);
+ name = demname;
+ setLineFirst ((int) line_no);
+ break;
+ }
+ }
+
+ if (foundmatch == false && ftype == MPF_OUTL)
+ {
+ // Even if derived node was not found, we can demangle
+ demname = dbe_sprintf (GTXT ("%s -- outline code [%s]"), subname,
+ mangled_name);
+ free (name);
+ name = demname;
+ }
+ free (sub);
+}
+
+SrcInfo *
+Function::new_srcInfo ()
+{
+ SrcInfo *t = new SrcInfo ();
+ t->next = srcinfo_list;
+ srcinfo_list = t;
+ return t;
+}
+
+void
+Function::pushSrcFile (SourceFile* source, int /*lineno*/)
+{
+ // create new file stack
+ if (curr_srcfile == NULL)
+ {
+ curr_srcfile = source;
+ return;
+ }
+
+ SrcInfo *src_info = new_srcInfo ();
+ // In the ideal world, we need a DbeLine(III) here,
+ // but right now it would make us later believe that there are
+ // instructions generated for #include lines. To avoid that,
+ // we ask for a DbeLine(II).
+ src_info->src_line = curr_srcfile->find_dbeline (this, 0 /*lineno*/);
+ if (src_info->src_line)
+ {
+ src_info->included_from = curr_srcinfo;
+ curr_srcinfo = src_info;
+ }
+ curr_srcfile = source;
+ setSource ();
+}
+
+SourceFile *
+Function::popSrcFile ()
+{
+ if (curr_srcinfo != NULL)
+ {
+ curr_srcfile = curr_srcinfo->src_line->sourceFile;
+ curr_srcinfo = curr_srcinfo->included_from;
+ }
+ else
+ curr_srcfile = NULL;
+ return curr_srcfile;
+}
+
+void
+Function::copy_PCInfo (Function *from)
+{
+ if (line_first <= 0)
+ line_first = from->line_first;
+ if (line_last <= 0)
+ line_last = from->line_last;
+ if (def_source == NULL)
+ def_source = from->def_source;
+ for (int i = 0, sz = from->linetab ? from->linetab->size () : 0; i < sz; i++)
+ {
+ PCInfo *pcinf = from->linetab->fetch (i);
+ DbeLine *dbeLine = pcinf->src_info->src_line;
+ add_PC_info (pcinf->offset, dbeLine->lineno, dbeLine->sourceFile);
+ }
+}
+
+void
+Function::add_PC_info (uint64_t offset, int lineno, SourceFile *cur_src)
+{
+ if (lineno <= 0 || size < 0 || offset >= (uint64_t) size)
+ return;
+ if (cur_src == NULL)
+ cur_src = curr_srcfile ? curr_srcfile : def_source;
+ if (linetab == NULL)
+ linetab = new Vector<PCInfo*>;
+
+ int left = 0;
+ int right = linetab->size () - 1;
+ DbeLine *dbeline;
+ while (left <= right)
+ {
+ int x = (left + right) / 2;
+ PCInfo *pcinf = linetab->fetch (x);
+ uint64_t pcinf_offset = ((uint64_t) pcinf->offset);
+ if (offset == pcinf_offset)
+ {
+ dbeline = cur_src->find_dbeline (this, lineno);
+ dbeline->init_Offset (offset);
+ pcinf->src_info->src_line = dbeline;
+ // Ignore duplicate offset
+ return;
+ }
+ else if (offset > pcinf_offset)
+ left = x + 1;
+ else
+ right = x - 1;
+ }
+ PCInfo *pcinfo = new PCInfo;
+ pcinfo->offset = offset;
+
+ // Form new SrcInfo
+ SrcInfo *srcInfo = new_srcInfo ();
+ dbeline = cur_src->find_dbeline (this, lineno);
+ dbeline->init_Offset (offset);
+ srcInfo->src_line = dbeline;
+ // For now don't build included_from list.
+ // We need better compiler support for that.
+ //srcInfo->included_from = curr_srcinfo;
+ srcInfo->included_from = NULL;
+ pcinfo->src_info = srcInfo;
+
+ // Update the size of the current line in both structures:
+ // current PCInfo and corresponding DbeLine.
+ if (left < linetab->size ())
+ pcinfo->size = linetab->fetch (left)->offset - offset;
+ else
+ pcinfo->size = size - offset;
+ pcinfo->src_info->src_line->size += pcinfo->size;
+
+ // If not the first line, update the size of the previous line
+ if (left > 0)
+ {
+ PCInfo *pcinfo_prev = linetab->fetch (left - 1);
+ int64_t delta = (offset - pcinfo_prev->offset) - pcinfo_prev->size;
+ pcinfo_prev->size += delta;
+ pcinfo_prev->src_info->src_line->size += delta;
+ }
+
+ linetab->insert (left, pcinfo);
+ if (cur_src == def_source)
+ {
+ if (line_first <= 0)
+ setLineFirst (lineno);
+ if (line_last <= 0 || lineno > line_last)
+ line_last = lineno;
+ }
+}
+
+PCInfo *
+Function::lookup_PCInfo (uint64_t offset)
+{
+ module->read_stabs ();
+ if (linetab == NULL)
+ linetab = new Vector<PCInfo*>;
+
+ int left = 0;
+ int right = linetab->size () - 1;
+ while (left <= right)
+ {
+ int x = (left + right) / 2;
+ PCInfo *pcinfo = linetab->fetch (x);
+ if (offset >= ((uint64_t) pcinfo->offset))
+ {
+ if (offset < (uint64_t) (pcinfo->offset + pcinfo->size))
+ return pcinfo;
+ left = x + 1;
+ }
+ else
+ right = x - 1;
+ }
+ return NULL;
+}
+
+DbeInstr*
+Function::mapLineToPc (DbeLine *dbeLine)
+{
+ if (dbeLine && linetab)
+ {
+ DbeLine *dbl = dbeLine->dbeline_base;
+ for (int i = 0, sz = linetab->size (); i < sz; i++)
+ {
+ PCInfo *pcinfo = linetab->get (i);
+ if (pcinfo->src_info
+ && (pcinfo->src_info->src_line->dbeline_base == dbl))
+ {
+ DbeInstr *dbeInstr = find_dbeinstr (PCLineFlag, pcinfo->offset);
+ if (dbeInstr)
+ {
+ dbeInstr->lineno = dbeLine->lineno;
+ return dbeInstr;
+ }
+ }
+ }
+ }
+ return NULL;
+}
+
+DbeLine*
+Function::mapPCtoLine (uint64_t addr, SourceFile *src)
+{
+ PCInfo *pcinfo = lookup_PCInfo (addr);
+ if (pcinfo == NULL)
+ {
+ if (defaultDbeLine == NULL)
+ defaultDbeLine = getDefSrc ()->find_dbeline (this, 0);
+ return defaultDbeLine;
+ }
+ DbeLine *dbeline = pcinfo->src_info->src_line;
+
+ // If source-context is not specified return the line
+ // from which this pc has been generated.
+ if (src == NULL)
+ return dbeline;
+ if (dbeline->sourceFile == src)
+ return dbeline->dbeline_base;
+ return src->find_dbeline (this, 0);
+}
+
+DbeInstr *
+Function::find_dbeinstr (int flag, uint64_t addr)
+{
+ DbeInstr *instr;
+
+ enum
+ {
+ FuncInstHTableSize = 128
+ };
+
+ int hash = (((int) addr) >> 2) & (FuncInstHTableSize - 1);
+ if (instHTable == NULL)
+ {
+ if (size > 2048)
+ {
+ instHTable = new DbeInstr*[FuncInstHTableSize];
+ for (int i = 0; i < FuncInstHTableSize; i++)
+ instHTable[i] = NULL;
+ }
+ }
+ else
+ {
+ instr = instHTable[hash];
+ if (instr && instr->addr == addr && instr->flags == flag)
+ return instr;
+ }
+
+ int left = 0;
+ int right = instrs->size () - 1;
+ while (left <= right)
+ {
+ int index = (left + right) / 2;
+ instr = instrs->fetch (index);
+ if (addr < instr->addr)
+ right = index - 1;
+ else if (addr > instr->addr)
+ left = index + 1;
+ else
+ {
+ if (flag == instr->flags)
+ {
+ if (instHTable)
+ instHTable[hash] = instr;
+ return instr;
+ }
+ else if (flag < instr->flags)
+ right = index - 1;
+ else
+ left = index + 1;
+ }
+ }
+
+ // None found, create a new one
+ instr = new DbeInstr (instr_id++, flag, this, addr);
+ instrs->insert (left, instr);
+ if (instHTable)
+ instHTable[hash] = instr;
+ return instr;
+}
+
+// LIBRARY_VISIBILITY
+DbeInstr *
+Function::create_hide_instr (DbeInstr *instr)
+{
+ DbeInstr *new_instr = new DbeInstr (instr_id++, 0, this, instr->addr);
+ return new_instr;
+}
+
+uint64_t
+Function::find_previous_addr (uint64_t addr)
+{
+ if (addrs == NULL)
+ {
+ addrs = module->getAddrs (this);
+ if (addrs == NULL)
+ return addr;
+ }
+
+ int index = -1, not_found = 1;
+
+ enum
+ {
+ FuncAddrIndexHTableSize = 128
+ };
+ int hash = (((int) addr) >> 2) & (FuncAddrIndexHTableSize - 1);
+ if (addrIndexHTable == NULL)
+ {
+ if (size > 2048)
+ {
+ addrIndexHTable = new int[FuncAddrIndexHTableSize];
+ for (int i = 0; i < FuncAddrIndexHTableSize; i++)
+ addrIndexHTable[i] = -1;
+ }
+ }
+ else
+ {
+ index = addrIndexHTable[hash];
+ if (index >= 0 && addrs->fetch (index) == addr)
+ not_found = 0;
+ }
+
+ int left = 0;
+ int right = addrs->size () - 1;
+ while (not_found && left <= right)
+ {
+ index = (left + right) / 2;
+ uint64_t addr_test = addrs->fetch (index);
+ if (addr < addr_test)
+ right = index - 1;
+ else if (addr > addr_test)
+ left = index + 1;
+ else
+ {
+ if (addrIndexHTable)
+ addrIndexHTable[hash] = index;
+ not_found = 0;
+ }
+ }
+ if (not_found)
+ return addr;
+ if (index > 0)
+ index--;
+ return addrs->fetch (index);
+}
+
+void
+Function::setSource ()
+{
+ SourceFile *sf = module->getIncludeFile ();
+ if (sf == NULL)
+ sf = getDefSrc ();
+ if (def_source == NULL)
+ setDefSrc (sf);
+ if (sf == def_source)
+ return;
+ if (sources == NULL)
+ {
+ sources = new Vector<SourceFile*>;
+ sources->append (def_source);
+ sources->append (sf);
+ }
+ else if (sources->find (sf) < 0)
+ sources->append (sf);
+}
+
+void
+Function::setDefSrc (SourceFile *sf)
+{
+ if (sf)
+ {
+ def_source = sf;
+ if (line_first > 0)
+ add_PC_info (0, line_first, def_source);
+ }
+}
+
+void
+Function::setLineFirst (int lineno)
+{
+ if (lineno > 0)
+ {
+ line_first = lineno;
+ if (line_last <= 0)
+ line_last = lineno;
+ if (def_source)
+ add_PC_info (0, line_first, def_source);
+ }
+}
+
+Vector<SourceFile*> *
+Function::get_sources ()
+{
+ if (module)
+ module->read_stabs ();
+ if (sources == NULL)
+ {
+ sources = new Vector<SourceFile*>;
+ sources->append (getDefSrc ());
+ }
+ return sources;
+}
+
+SourceFile*
+Function::getDefSrc ()
+{
+ if (module)
+ module->read_stabs ();
+ if (def_source == NULL)
+ setDefSrc (module->getMainSrc ());
+ return def_source;
+}
+
+char *
+Function::getDefSrcName ()
+{
+ SourceFile *sf = getDefSrc ();
+ if (sf)
+ return sf->dbeFile->getResolvedPath ();
+ if (module)
+ return module->file_name;
+ sf = dbeSession->get_Unknown_Source ();
+ return sf->get_name ();
+}
+
+#define cmpValue(a, b) ((a) > (b) ? 1 : (a) == (b) ? 0 : -1)
+
+int
+Function::func_cmp (Function *func, SourceFile *srcContext)
+{
+ if (def_source != func->def_source)
+ {
+ if (srcContext == NULL)
+ srcContext = getDefSrc ();
+ if (def_source == srcContext)
+ return -1;
+ if (func->def_source == srcContext)
+ return 1;
+ return cmpValue (img_offset, func->img_offset);
+ }
+
+ if (line_first == func->line_first)
+ return cmpValue (img_offset, func->img_offset);
+ if (line_first <= 0)
+ {
+ if (func->line_first > 0)
+ return 1;
+ return cmpValue (img_offset, func->img_offset);
+ }
+ if (func->line_first <= 0)
+ return -1;
+ return cmpValue (line_first, func->line_first);
+}
+
+Vector<Histable*> *
+Function::get_comparable_objs ()
+{
+ update_comparable_objs ();
+ if (comparable_objs || dbeSession->expGroups->size () <= 1 || module == NULL)
+ return comparable_objs;
+ if (module == NULL || module->loadobject == NULL)
+ return NULL;
+ Vector<Histable*> *comparableModules = module->get_comparable_objs ();
+ if (comparableModules == NULL)
+ {
+ return NULL;
+ }
+ comparable_objs = new Vector<Histable*>(comparableModules->size ());
+ for (long i = 0, sz = comparableModules->size (); i < sz; i++)
+ {
+ Function *func = NULL;
+ comparable_objs->store (i, func);
+ Module *mod = (Module*) comparableModules->fetch (i);
+ if (mod == NULL)
+ continue;
+ if (mod == module)
+ func = this;
+ else
+ {
+ for (long i1 = 0, sz1 = VecSize (mod->functions); i1 < sz1; i1++)
+ {
+ Function *f = mod->functions->get (i1);
+ if ((f->comparable_objs == NULL)
+ && (strcmp (f->comparable_name, comparable_name) == 0))
+ {
+ func = f;
+ func->comparable_objs = comparable_objs;
+ break;
+ }
+ }
+ }
+ comparable_objs->store (i, func);
+ }
+ Vector<Histable*> *comparableLoadObjs =
+ module->loadobject->get_comparable_objs ();
+ if (VecSize (comparableLoadObjs) == VecSize (comparable_objs))
+ {
+ for (long i = 0, sz = VecSize (comparableLoadObjs); i < sz; i++)
+ {
+ LoadObject *lo = (LoadObject *) comparableLoadObjs->get (i);
+ Function *func = (Function *) comparable_objs->get (i);
+ if (func || (lo == NULL))
+ continue;
+ if (module->loadobject == lo)
+ func = this;
+ else
+ {
+ for (long i1 = 0, sz1 = VecSize (lo->functions); i1 < sz1; i1++)
+ {
+ Function *f = lo->functions->fetch (i1);
+ if ((f->comparable_objs == NULL)
+ && (strcmp (f->comparable_name, comparable_name) == 0))
+ {
+ func = f;
+ func->comparable_objs = comparable_objs;
+ break;
+ }
+ }
+ }
+ comparable_objs->store (i, func);
+ }
+ }
+ dump_comparable_objs ();
+ return comparable_objs;
+}
+
+JMethod::JMethod (uint64_t _id) : Function (_id)
+{
+ mid = 0LL;
+ addr = (Vaddr) 0;
+ signature = NULL;
+ jni_function = NULL;
+}
+
+JMethod::~JMethod ()
+{
+ free (signature);
+}
+
+uint64_t
+JMethod::get_addr ()
+{
+ if (addr != (Vaddr) 0)
+ return addr;
+ else
+ return Function::get_addr ();
+}
+
+typedef struct
+{
+ size_t used_in;
+ size_t used_out;
+} MethodField;
+
+static void
+write_buf (char* buf, char* str)
+{
+ while ((*buf++ = *str++));
+}
+
+/** Translate one field from the nane buffer.
+ * return how many chars were read from name and how many bytes were used in buf.
+ */
+static MethodField
+translate_method_field (const char* name, char* buf)
+{
+ MethodField out, t;
+ switch (*name)
+ {
+ case 'L':
+ name++;
+ out.used_in = 1;
+ out.used_out = 0;
+ while (*name != ';')
+ {
+ *buf = *name++;
+ if (*buf == '/')
+ *buf = '.';
+ buf++;
+ out.used_in++;
+ out.used_out++;
+ }
+ out.used_in++; /* the ';' is also used. */
+ break;
+ case 'Z':
+ write_buf (buf, NTXT ("boolean"));
+ out.used_out = 7;
+ out.used_in = 1;
+ break;
+ case 'B':
+ write_buf (buf, NTXT ("byte"));
+ out.used_out = 4;
+ out.used_in = 1;
+ break;
+ case 'C':
+ write_buf (buf, NTXT ("char"));
+ out.used_out = 4;
+ out.used_in = 1;
+ break;
+ case 'S':
+ write_buf (buf, NTXT ("short"));
+ out.used_out = 5;
+ out.used_in = 1;
+ break;
+ case 'I':
+ write_buf (buf, NTXT ("int"));
+ out.used_out = 3;
+ out.used_in = 1;
+ break;
+ case 'J':
+ write_buf (buf, NTXT ("long"));
+ out.used_out = 4;
+ out.used_in = 1;
+ break;
+ case 'F':
+ write_buf (buf, NTXT ("float"));
+ out.used_out = 5;
+ out.used_in = 1;
+ break;
+ case 'D':
+ write_buf (buf, NTXT ("double"));
+ out.used_out = 6;
+ out.used_in = 1;
+ break;
+ case 'V':
+ write_buf (buf, NTXT ("void"));
+ out.used_out = 4;
+ out.used_in = 1;
+ break;
+ case '[':
+ t = translate_method_field (name + 1, buf);
+ write_buf (buf + t.used_out, NTXT ("[]"));
+ out.used_out = t.used_out + 2;
+ out.used_in = t.used_in + 1;
+ break;
+ default:
+ out.used_out = 0;
+ out.used_in = 0;
+ }
+ return out;
+}
+
+/**
+ * translate method name to full method signature
+ * into the output buffer (buf).
+ * ret_type - true for printing result type
+ */
+static bool
+translate_method (char* mname, char *signature, bool ret_type, char* buf)
+{
+ MethodField p;
+ size_t l;
+ int first = 1;
+ if (signature == NULL)
+ return false;
+
+ const char *c = strchr (signature, ')');
+ if (c == NULL)
+ return false;
+ if (ret_type)
+ {
+ p = translate_method_field (++c, buf);
+ buf += p.used_out;
+ *buf++ = ' ';
+ }
+
+ l = strlen (mname);
+ memcpy (buf, mname, l + 1);
+ buf += l;
+ // *buf++ = ' '; // space before ()
+ *buf++ = '(';
+
+ c = signature + 1;
+ while (*c != ')')
+ {
+ if (!first)
+ {
+ *buf++ = ',';
+ *buf++ = ' ';
+ }
+ first = 0;
+ p = translate_method_field (c, buf);
+ c += p.used_in;
+ buf += p.used_out;
+ }
+
+ *buf++ = ')';
+ *buf = '\0';
+ return true;
+}
+
+void
+JMethod::set_name (char *string)
+{
+ if (string == NULL)
+ return;
+ set_mangled_name (string);
+
+ char buf[MAXDBUF];
+ *buf = '\0';
+ if (translate_method (string, signature, false, buf))
+ {
+ name = dbe_strdup (buf); // got translated string
+ Dprintf (DUMP_JCLASS_READER,
+ "JMethod::set_name: true name=%s string=%s signature=%s\n",
+ STR (name), STR (string), STR (signature));
+ }
+ else
+ {
+ name = dbe_strdup (string);
+ Dprintf (DUMP_JCLASS_READER,
+ "JMethod::set_name: false name=%s signature=%s\n",
+ STR (name), STR (signature));
+ }
+ set_match_name (name);
+ set_comparable_name (name);
+}
+
+bool
+JMethod::jni_match (Function *func)
+{
+ if (func == NULL || (func->flags & FUNC_NOT_JNI) != 0)
+ return false;
+ if (jni_function == func)
+ return true;
+
+ char *fname = func->get_name ();
+ if ((func->flags & FUNC_JNI_CHECKED) == 0)
+ {
+ func->flags |= FUNC_JNI_CHECKED;
+ if (strncmp (func->get_name (), NTXT ("Java_"), 5) != 0)
+ {
+ func->flags |= FUNC_NOT_JNI;
+ return false;
+ }
+ }
+
+ char *d = name;
+ char *s = fname + 5;
+ while (*d && *d != '(' && *d != ' ')
+ {
+ if (*d == '.')
+ {
+ if (*s++ != '_')
+ return false;
+ d++;
+ }
+ else if (*d == '_')
+ {
+ if (*s++ != '_')
+ return false;
+ if (*s++ != '1')
+ return false;
+ d++;
+ }
+ else if (*d++ != *s++)
+ return false;
+ }
+ jni_function = func;
+ return true;
+}
diff --git a/gprofng/src/Function.h b/gprofng/src/Function.h
new file mode 100644
index 00000000000..b0a856b7dad
--- /dev/null
+++ b/gprofng/src/Function.h
@@ -0,0 +1,222 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _DBE_FUNCTION_H
+#define _DBE_FUNCTION_H
+
+// A Function object represents an individual function in a .o file.
+
+#include "util.h"
+#include "Histable.h"
+#include "SourceFile.h"
+
+class Module;
+class Symbol;
+class InlinedSubr;
+struct SrcInfo;
+struct PCInfo;
+template <class ITEM> class Vector;
+
+const uint64_t FUNC_NO_SAVE = (uint64_t) - 1;
+const uint64_t FUNC_ROOT = (uint64_t) - 2;
+
+enum
+{
+ FUNC_FLAG_PLT = 1,
+ FUNC_FLAG_DYNAMIC = 2,
+ FUNC_FLAG_RESDER = 4, // set if derived function resolution has been done
+ FUNC_FLAG_NO_OFFSET = 8, // set if disassembly should not show offset from function
+ FUNC_FLAG_SIMULATED = 16, // not a real function like <Total>, <Unknown>, etc.
+ FUNC_FLAG_NATIVE = 32, // no byte code for JMethod
+ FUNC_NOT_JNI = 64, // a function name is not "Java_..."
+ FUNC_JNI_CHECKED = 128 // already checked for "Java_..."
+};
+
+const int MAXDBUF = 32768; // the longest demangled name handled
+
+class Function : public Histable
+{
+public:
+
+ enum MPFuncTypes
+ {
+ MPF_DOALL,
+ MPF_PAR,
+ MPF_SECT,
+ MPF_TASK,
+ MPF_CLONE,
+ MPF_OUTL
+ };
+
+ Function (uint64_t _id);
+ virtual ~Function ();
+
+ virtual uint64_t get_addr ();
+ virtual char *get_name (NameFormat = NA);
+ virtual Vector<Histable*> *get_comparable_objs ();
+ virtual void set_name (char *); // Set the demangled name
+ virtual Histable *convertto (Histable_type type, Histable *obj = NULL);
+
+ virtual Histable_type
+ get_type ()
+ {
+ return FUNCTION;
+ };
+
+ virtual int64_t
+ get_size ()
+ {
+ return size;
+ };
+
+ void set_comparable_name (const char *string);
+ void set_mangled_name (const char *string);
+ void set_match_name (const char *string);
+
+ // Find any derived functions, and set their derivedNode
+ void findDerivedFunctions ();
+ void findKrakatoaDerivedFunctions ();
+ void add_PC_info (uint64_t offset, int lineno, SourceFile *cur_src = NULL);
+ void pushSrcFile (SourceFile* source, int lineno);
+ SourceFile *popSrcFile ();
+ int func_cmp (Function *func, SourceFile *srcContext = NULL);
+ void copy_PCInfo (Function *f);
+ DbeLine *mapPCtoLine (uint64_t addr, SourceFile *src = NULL);
+ DbeInstr *mapLineToPc (DbeLine *dbeLine);
+ DbeInstr *find_dbeinstr (int flag, uint64_t addr);
+ DbeInstr *create_hide_instr (DbeInstr *instr);
+ uint64_t find_previous_addr (uint64_t addr);
+ SourceFile *getDefSrc ();
+ char *getDefSrcName ();
+ void setDefSrc (SourceFile *sf);
+ void setLineFirst (int lineno);
+ Vector<SourceFile*> *get_sources ();
+
+ char *
+ get_mangled_name ()
+ {
+ return mangled_name;
+ }
+
+ char *
+ get_match_name ()
+ {
+ return match_name;
+ }
+
+ inline Function *
+ cardinal ()
+ {
+ return alias ? alias : this;
+ }
+
+ unsigned int flags; // FUNC_FLAG_*
+ Module *module; // pointer to module containing source
+ int line_first; // range of line numbers for function
+ int line_last;
+ int64_t size; // size of the function in bytes
+ uint64_t save_addr; // used for detection of leaf routines
+ DbeInstr *derivedNode; // If derived from another function
+ bool isOutlineFunction; // if outline (save assumed)
+ unsigned int chksum; // check sum of instructions
+ char *img_fname; // file containing function image
+ uint64_t img_offset; // file offset of the image
+ SourceFile *curr_srcfile;
+ DbeLine *defaultDbeLine;
+ Function *usrfunc; // User function
+ Function *alias;
+ bool isUsed;
+ bool isHideFunc;
+ SourceFile *def_source;
+ Function *indexStabsLink; // correspondent function for the .o file
+ Symbol *elfSym;
+ InlinedSubr *inlinedSubr;
+ int inlinedSubrCnt;
+
+private:
+ DbeInstr **instHTable; // hash table for DbeInstr
+ int *addrIndexHTable; // hash table for addrs index
+ void setSource ();
+ PCInfo *lookup_PCInfo (uint64_t offset);
+ SrcInfo *new_srcInfo ();
+
+ char *mangled_name;
+ char *match_name; // mangled name, with globalization stripped
+ char *comparable_name; // demangled name, with globalization and blanks stripped
+ char *name_buf;
+ NameFormat current_name_format;
+ Vector<PCInfo*> *linetab;
+ Vector<DbeInstr*> *instrs;
+ Vector<uint64_t> *addrs;
+ uint64_t instr_id;
+ Vector<SourceFile*> *sources;
+ SrcInfo *curr_srcinfo; // the current source stack of the function
+ SrcInfo *srcinfo_list; // master list for SrcInfo
+};
+
+class JMethod : public Function
+{
+public:
+ JMethod (uint64_t _id);
+ virtual ~JMethod ();
+ virtual void set_name (char *);
+ virtual uint64_t get_addr ();
+
+ void
+ set_addr (Vaddr _addr)
+ {
+ addr = _addr;
+ }
+
+ uint64_t
+ get_mid ()
+ {
+ return mid;
+ }
+
+ void
+ set_mid (uint64_t _mid)
+ {
+ mid = _mid;
+ }
+
+ char *
+ get_signature ()
+ {
+ return signature;
+ }
+
+ void
+ set_signature (const char *s)
+ {
+ signature = dbe_strdup (s);
+ }
+
+ // Returns true if func's name matches method's as its JNI implementation
+ bool jni_match (Function *func);
+
+private:
+ uint64_t mid;
+ Vaddr addr;
+ char *signature;
+ Function *jni_function;
+};
+
+#endif /* _DBE_FUNCTION_H */
diff --git a/gprofng/src/HashMap.h b/gprofng/src/HashMap.h
new file mode 100644
index 00000000000..f66a6fe8064
--- /dev/null
+++ b/gprofng/src/HashMap.h
@@ -0,0 +1,435 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+// java.util.HashMap
+
+#ifndef _DBE_HASHMAP_H
+#define _DBE_HASHMAP_H
+
+#include "vec.h"
+#include "util.h"
+#include "StringBuilder.h"
+#include "Histable.h"
+#include "MemObject.h"
+
+template <typename Key_t> inline int get_hash_code (Key_t a);
+template <typename Key_t> inline bool is_equals (Key_t a, Key_t b);
+template <typename Key_t> inline Key_t copy_key (Key_t a);
+template <typename Key_t> inline void delete_key (Key_t a);
+
+// Specialization for char*
+template<> inline int
+get_hash_code (char *a)
+{
+ return (int) (crc64 (a, strlen (a)) & 0x7fffffff);
+}
+
+template<> inline bool
+is_equals (char *a, char *b)
+{
+ return dbe_strcmp (a, b) == 0;
+}
+
+template<> inline char *
+copy_key (char *a)
+{
+ return dbe_strdup (a);
+}
+
+template<> inline void
+delete_key (char *a)
+{
+ return free (a);
+}
+
+template<> inline int
+get_hash_code (uint64_t a)
+{
+ return (int) (a & 0x7fffffff);
+}
+
+template<> inline bool
+is_equals (uint64_t a, uint64_t b)
+{
+ return a == b;
+}
+
+template<> inline uint64_t
+copy_key (uint64_t a)
+{
+ return a;
+}
+
+template<> inline void
+delete_key (uint64_t a)
+{
+ a = a;
+}
+
+template<> inline int
+get_hash_code (Histable* a)
+{
+ return (int) (a->id & 0x7fffffff);
+}
+
+template<> inline bool
+is_equals (Histable* a, Histable* b)
+{
+ return a == b;
+}
+
+template<> inline Histable*
+copy_key (Histable* a)
+{
+ return a;
+}
+
+template<> inline void
+delete_key (Histable* a)
+{
+ a->id = a->id;
+}
+
+template<> inline int
+get_hash_code (MemObj* a)
+{
+ return (int) (a->id & 0x7fffffff);
+}
+
+template<> inline bool
+is_equals (MemObj* a, MemObj* b)
+{
+ return a == b;
+}
+
+template<> inline MemObj*
+copy_key (MemObj* a)
+{
+ return a;
+}
+
+template<> inline void
+delete_key (MemObj* a)
+{
+ a->id = a->id;
+}
+
+template <typename Key_t, typename Value_t>
+class HashMap
+{
+public:
+ HashMap (int initialCapacity = 0);
+
+ ~HashMap ()
+ {
+ clear ();
+ delete vals;
+ delete[] hashTable;
+ }
+
+ Value_t put (Key_t key, Value_t val);
+ Value_t get (Key_t key);
+ Value_t get (Key_t key, Value_t val); // Create a new map if key is not here
+ void clear ();
+ Value_t remove (Key_t);
+ Vector<Value_t> *values (Key_t key); // Return a list of values for 'key'
+
+ bool
+ containsKey (Key_t key)
+ {
+ Value_t p = get (key);
+ return p != NULL;
+ };
+
+ Vector<Value_t> *
+ values ()
+ {
+ return vals;
+ }
+
+ void
+ reset ()
+ {
+ clear ();
+ }
+
+ int
+ get_phaseIdx ()
+ {
+ return phaseIdx;
+ }
+
+ void
+ set_phaseIdx (int phase)
+ {
+ if (phase == 0) clear ();
+ phaseIdx = phase;
+ }
+ char *dump ();
+
+private:
+
+ enum
+ {
+ HASH_SIZE = 511,
+ MAX_HASH_SIZE = 1048575
+ };
+
+ typedef struct Hash
+ {
+ Key_t key;
+ Value_t val;
+ struct Hash *next;
+ } Hash_t;
+
+ void resize ();
+
+ int
+ hashCode (Key_t key)
+ {
+ return get_hash_code (key) % hash_sz;
+ }
+
+ bool
+ equals (Key_t a, Key_t b)
+ {
+ return is_equals (a, b);
+ }
+
+ Key_t
+ copy (Key_t key)
+ {
+ return copy_key (key);
+ }
+
+ Hash_t **hashTable;
+ Vector<Value_t> *vals;
+ int phaseIdx;
+ int hash_sz;
+ int nelem;
+};
+
+template <typename Key_t, typename Value_t>
+HashMap<Key_t, Value_t>
+::HashMap (int initialCapacity)
+{
+ if (initialCapacity > 0)
+ vals = new Vector<Value_t>(initialCapacity);
+ else
+ vals = new Vector<Value_t>();
+ phaseIdx = 0;
+ nelem = 0;
+ hash_sz = HASH_SIZE;
+ hashTable = new Hash_t*[hash_sz];
+ for (int i = 0; i < hash_sz; i++)
+ hashTable[i] = NULL;
+}
+
+template <typename Key_t, typename Value_t>
+void
+HashMap<Key_t, Value_t>::clear ()
+{
+ vals->reset ();
+ phaseIdx = 0;
+ nelem = 0;
+ for (int i = 0; i < hash_sz; i++)
+ {
+ Hash_t *next;
+ for (Hash_t *p = hashTable[i]; p; p = next)
+ {
+ next = p->next;
+ delete_key (p->key);
+ delete p;
+ }
+ hashTable[i] = NULL;
+ }
+}
+
+template <typename Key_t, typename Value_t>
+void
+HashMap<Key_t, Value_t>::resize ()
+{
+ int old_hash_sz = hash_sz;
+ hash_sz = old_hash_sz * 2 + 1;
+ Hash_t **old_hash_table = hashTable;
+ hashTable = new Hash_t*[hash_sz];
+ for (int i = 0; i < hash_sz; i++)
+ hashTable[i] = NULL;
+ nelem = 0;
+ for (int i = 0; i < old_hash_sz; i++)
+ {
+ if (old_hash_table[i] != NULL)
+ {
+ Hash_t *old_p;
+ Hash_t *p = old_hash_table[i];
+ while (p != NULL)
+ {
+ put (p->key, p->val);
+ old_p = p;
+ p = p->next;
+ delete old_p;
+ }
+ }
+ }
+ delete[] old_hash_table;
+}
+
+template <typename Key_t, typename Value_t>
+Value_t
+HashMap<Key_t, Value_t>::get (Key_t key)
+{
+ int hash_code = hashCode (key);
+ for (Hash_t *p = hashTable[hash_code]; p; p = p->next)
+ if (equals (key, p->key))
+ return p->val;
+ return NULL;
+}
+
+template <typename Key_t, typename Value_t>
+Vector<Value_t> *
+HashMap<Key_t, Value_t>::values (Key_t key)
+{
+ Vector<Value_t> *list = new Vector<Value_t>();
+ int hash_code = hashCode (key);
+ for (Hash_t *p = hashTable[hash_code]; p; p = p->next)
+ {
+ if (equals (key, p->key))
+ list->append (p->val);
+ }
+ return list;
+}
+
+template <typename Key_t, typename Value_t>
+Value_t
+HashMap<Key_t, Value_t>::get (const Key_t key, Value_t val)
+{
+ int hash_code = hashCode (key);
+ Hash_t *p, *first = NULL;
+ for (p = hashTable[hash_code]; p; p = p->next)
+ {
+ if (equals (key, p->key))
+ {
+ if (first == NULL)
+ first = p;
+ if (val == p->val)
+ return first->val; // Always return the first value
+ }
+ }
+ vals->append (val);
+ p = new Hash_t ();
+ p->val = val;
+ p->key = copy (key);
+ if (first)
+ {
+ p->next = first->next;
+ first->next = p;
+ return first->val; // Always return the first value
+ }
+ else
+ {
+ p->next = hashTable[hash_code];
+ hashTable[hash_code] = p;
+ return val;
+ }
+}
+
+template <typename Key_t, typename Value_t>
+Value_t
+HashMap<Key_t, Value_t>::remove (Key_t key)
+{
+ int hash_code = hashCode (key);
+ Value_t val = NULL;
+ for (Hash_t *prev = NULL, *p = hashTable[hash_code]; p != NULL;)
+ {
+ if (equals (key, p->key))
+ {
+ if (prev == NULL)
+ hashTable[hash_code] = p->next;
+ else
+ prev->next = p->next;
+ if (val == NULL)
+ val = p->val;
+ delete_key (p->key);
+ delete p;
+ }
+ else
+ {
+ prev = p;
+ p = p->next;
+ }
+ }
+ return val;
+}
+
+template <typename Key_t, typename Value_t>
+Value_t
+HashMap<Key_t, Value_t>::put (Key_t key, Value_t val)
+{
+ int hash_code = hashCode (key);
+ vals->append (val);
+ for (Hash_t *p = hashTable[hash_code]; p != NULL; p = p->next)
+ {
+ if (equals (key, p->key))
+ {
+ Value_t v = p->val;
+ p->val = val;
+ return v;
+ }
+ }
+ Hash_t *p = new Hash_t ();
+ p->val = val;
+ p->key = copy (key);
+ p->next = hashTable[hash_code];
+ hashTable[hash_code] = p;
+ nelem++;
+ if (nelem == hash_sz)
+ resize ();
+ return val;
+}
+
+template <typename Key_t, typename Value_t>
+char *
+HashMap<Key_t, Value_t>::dump ()
+{
+ StringBuilder sb;
+ char buf[128];
+ snprintf (buf, sizeof (buf), "HashMap: size=%d ##########\n", vals->size ());
+ sb.append (buf);
+ for (int i = 0; i < hash_sz; i++)
+ {
+ if (hashTable[i] == NULL)
+ continue;
+ snprintf (buf, sizeof (buf), "%3d:", i);
+ sb.append (buf);
+ char *s = NTXT (" ");
+ for (Hash_t *p = hashTable[i]; p; p = p->next)
+ {
+ sb.append (s);
+ s = NTXT (" ");
+ sb.append (p->key);
+ snprintf (buf, sizeof (buf), " --> 0x%p '%s'\n",
+ p->val, p->val->get_name ());
+ sb.append (buf);
+ }
+ }
+ return sb.toString ();
+}
+
+#endif // _DBE_HASHMAP_H
diff --git a/gprofng/src/HeapActivity.cc b/gprofng/src/HeapActivity.cc
new file mode 100644
index 00000000000..943183d8914
--- /dev/null
+++ b/gprofng/src/HeapActivity.cc
@@ -0,0 +1,408 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include "DbeSession.h"
+#include "HeapData.h"
+#include "StringBuilder.h"
+#include "i18n.h"
+#include "util.h"
+#include "HeapActivity.h"
+#include "MetricList.h"
+#include "Application.h"
+#include "Experiment.h"
+#include "DbeView.h"
+#include "Exp_Layout.h"
+#include "i18n.h"
+
+HeapActivity::HeapActivity (DbeView *_dbev)
+{
+ dbev = _dbev;
+ hDataTotal = NULL;
+ hDataObjs = NULL;
+ hDataObjsCallStack = NULL;
+ hasCallStack = false;
+ hDataCalStkMap = NULL;
+ hist_data_callstack_all = NULL;
+}
+
+void
+HeapActivity::reset ()
+{
+ delete hDataTotal;
+ hDataTotal = NULL;
+ delete hDataObjsCallStack;
+ hDataObjsCallStack = NULL;
+ hasCallStack = false;
+ hDataObjs = NULL;
+ delete hDataCalStkMap;
+ hDataCalStkMap = NULL;
+ hist_data_callstack_all = NULL;
+}
+
+void
+HeapActivity::createHistItemTotals (Hist_data *hist_data, MetricList *mlist,
+ Histable::Type hType, bool empty)
+{
+ int mIndex;
+ Metric *mtr;
+ Hist_data::HistItem *hi;
+ HeapData *hData = NULL;
+ if (hDataTotal == NULL)
+ {
+ hDataTotal = new HeapData (TOTAL_HEAPNAME);
+ hDataTotal->setHistType (hType);
+ hDataTotal->setStackId (TOTAL_STACK_ID);
+ hDataTotal->id = 0;
+ }
+
+ hData = new HeapData (hDataTotal);
+ hData->setHistType (hType);
+ hi = hist_data->append_hist_item (hData);
+
+ Vec_loop (Metric *, mlist->get_items (), mIndex, mtr)
+ {
+ if (!mtr->is_visible () && !mtr->is_tvisible () && !mtr->is_pvisible ())
+ continue;
+
+ Metric::Type mtype = mtr->get_type ();
+ ValueTag vType = mtr->get_vtype ();
+
+ hist_data->total->value[mIndex].tag = vType;
+ hi->value[mIndex].tag = vType;
+ switch (mtype)
+ {
+ case BaseMetric::HEAP_ALLOC_BYTES:
+ if (!empty)
+ {
+ hist_data->total->value[mIndex].ll = hDataTotal->getAllocBytes ();
+ hi->value[mIndex].ll = hDataTotal->getAllocBytes ();
+ }
+ else
+ {
+ hist_data->total->value[mIndex].ll = 0;
+ hi->value[mIndex].ll = 0;
+ }
+ break;
+ case BaseMetric::HEAP_ALLOC_CNT:
+ if (!empty)
+ {
+ hist_data->total->value[mIndex].ll = hDataTotal->getAllocCnt ();
+ hi->value[mIndex].ll = hDataTotal->getAllocCnt ();
+ }
+ else
+ {
+ hist_data->total->value[mIndex].ll = 0;
+ hi->value[mIndex].ll = 0;
+ }
+ break;
+ case BaseMetric::HEAP_LEAK_BYTES:
+ if (!empty)
+ {
+ hist_data->total->value[mIndex].ll = hDataTotal->getLeakBytes ();
+ hi->value[mIndex].ll = hDataTotal->getLeakBytes ();
+ }
+ else
+ {
+ hist_data->total->value[mIndex].ll = 0;
+ hi->value[mIndex].ll = 0;
+ }
+ break;
+ case BaseMetric::HEAP_LEAK_CNT:
+ if (!empty)
+ {
+ hist_data->total->value[mIndex].ll = hDataTotal->getLeakCnt ();
+ hi->value[mIndex].ll = hDataTotal->getLeakCnt ();
+ }
+ else
+ {
+ hist_data->total->value[mIndex].ll = 0;
+ hi->value[mIndex].ll = 0;
+ }
+ break;
+ default:
+ break;
+ }
+ }
+}
+
+void
+HeapActivity::computeHistTotals (Hist_data *hist_data, MetricList *mlist)
+{
+ int mIndex;
+ Metric *mtr;
+ Vec_loop (Metric *, mlist->get_items (), mIndex, mtr)
+ {
+ if (!mtr->is_visible () && !mtr->is_tvisible () && !mtr->is_pvisible ())
+ continue;
+
+ Metric::Type mtype = mtr->get_type ();
+ ValueTag vType = mtr->get_vtype ();
+
+ hist_data->total->value[mIndex].tag = vType;
+ switch (mtype)
+ {
+ case BaseMetric::HEAP_ALLOC_BYTES:
+ hist_data->total->value[mIndex].ll = hDataTotal->getAllocBytes ();
+ break;
+ case BaseMetric::HEAP_ALLOC_CNT:
+ hist_data->total->value[mIndex].ll = hDataTotal->getAllocCnt ();
+ break;
+ case BaseMetric::HEAP_LEAK_BYTES:
+ hist_data->total->value[mIndex].ll = hDataTotal->getLeakBytes ();
+ break;
+ case BaseMetric::HEAP_LEAK_CNT:
+ hist_data->total->value[mIndex].ll = hDataTotal->getLeakCnt ();
+ break;
+ default:
+ break;
+ }
+ }
+}
+
+void
+HeapActivity::computeHistData (Hist_data *hist_data, MetricList *mlist,
+ Hist_data::Mode mode, Histable *selObj)
+{
+
+ Hist_data::HistItem *hi = NULL;
+
+ int numObjs = hDataObjs->size ();
+ int numMetrics = mlist->get_items ()->size ();
+ for (int i = 0; i < numObjs; i++)
+ {
+ HeapData *hData = hDataObjs->fetch (i);
+ if (mode == Hist_data::ALL)
+ hi = hist_data->append_hist_item (hData);
+ else if (mode == Hist_data::SELF)
+ {
+ if (hData->id == selObj->id)
+ hi = hist_data->append_hist_item (hData);
+ else
+ continue;
+ }
+
+ for (int mIndex = 0; mIndex < numMetrics; mIndex++)
+ {
+ Metric *mtr = mlist->get_items ()->fetch (mIndex);
+ if (!mtr->is_visible () && !mtr->is_tvisible ()
+ && !mtr->is_pvisible ())
+ continue;
+
+ Metric::Type mtype = mtr->get_type ();
+ ValueTag vType = mtr->get_vtype ();
+ hi->value[mIndex].tag = vType;
+ switch (mtype)
+ {
+ case BaseMetric::HEAP_ALLOC_BYTES:
+ hi->value[mIndex].ll = hData->getAllocBytes ();
+ break;
+ case BaseMetric::HEAP_ALLOC_CNT:
+ hi->value[mIndex].ll = hData->getAllocCnt ();
+ break;
+ case BaseMetric::HEAP_LEAK_BYTES:
+ hi->value[mIndex].ll = hData->getLeakBytes ();
+ break;
+ case BaseMetric::HEAP_LEAK_CNT:
+ hi->value[mIndex].ll = hData->getLeakCnt ();
+ break;
+ default:
+ break;
+ }
+ }
+ }
+}
+
+Hist_data *
+HeapActivity::compute_metrics (MetricList *mlist, Histable::Type type,
+ Hist_data::Mode mode, Histable *selObj)
+{
+ // it's already there, just return it
+ if (mode == Hist_data::ALL && type == Histable::HEAPCALLSTACK
+ && hist_data_callstack_all != NULL)
+ return hist_data_callstack_all;
+
+ bool has_data = false;
+ Hist_data *hist_data = NULL;
+ VMode viewMode = dbev->get_view_mode ();
+ switch (type)
+ {
+ case Histable::HEAPCALLSTACK:
+ if (!hasCallStack) // It is not computed yet
+ computeCallStack (type, viewMode);
+
+ // computeCallStack() creates hDataObjsCallStack
+ // hDataObjsCallStack contains the list of call stack objects
+ if (hDataObjsCallStack != NULL)
+ {
+ hDataObjs = hDataObjsCallStack;
+ has_data = true;
+ }
+ else
+ has_data = false;
+
+ if (has_data && mode == Hist_data::ALL && hist_data_callstack_all == NULL)
+ {
+ hist_data_callstack_all = new Hist_data (mlist, type, mode, true);
+ hist_data = hist_data_callstack_all;
+ }
+ else if (has_data)
+ hist_data = new Hist_data (mlist, type, mode, false);
+ else
+ {
+ hist_data = new Hist_data (mlist, type, mode, false);
+ createHistItemTotals (hist_data, mlist, type, true);
+ return hist_data;
+ }
+ break;
+ default:
+ fprintf (stderr,
+ "HeapActivity cannot process data due to wrong Histable (type=%d) \n",
+ type);
+ abort ();
+ }
+
+ if (mode == Hist_data::ALL || (mode == Hist_data::SELF && selObj->id == 0))
+ createHistItemTotals (hist_data, mlist, type, false);
+ else
+ computeHistTotals (hist_data, mlist);
+ computeHistData (hist_data, mlist, mode, selObj);
+
+ // Determine by which metric to sort if any
+ bool rev_sort = mlist->get_sort_rev ();
+ int sort_ind = -1;
+ int nmetrics = mlist->get_items ()->size ();
+
+ for (int mind = 0; mind < nmetrics; mind++)
+ if (mlist->get_sort_ref_index () == mind)
+ sort_ind = mind;
+
+ hist_data->sort (sort_ind, rev_sort);
+ hist_data->compute_minmax ();
+
+ return hist_data;
+}
+
+void
+HeapActivity::computeCallStack (Histable::Type type, VMode viewMode)
+{
+ bool has_data = false;
+ reset ();
+ uint64_t stackIndex = 0;
+ HeapData *hData = NULL;
+
+ delete hDataCalStkMap;
+ hDataCalStkMap = new DefaultMap<uint64_t, HeapData*>;
+
+ delete hDataTotal;
+ hDataTotal = new HeapData (TOTAL_HEAPNAME);
+ hDataTotal->setHistType (type);
+
+ // There is no call stack for total, use the index for id
+ hDataTotal->id = stackIndex++;
+
+ // get the list of io events from DbeView
+ int numExps = dbeSession->nexps ();
+
+ for (int k = 0; k < numExps; k++)
+ {
+ // Investigate the performance impact of processing the heap events twice.
+ // This is a 2*n performance issue
+ dbev->get_filtered_events (k, DATA_HEAPSZ);
+
+ DataView *heapPkts = dbev->get_filtered_events (k, DATA_HEAP);
+ if (heapPkts == NULL)
+ continue;
+
+ Experiment *exp = dbeSession->get_exp (k);
+ long sz = heapPkts->getSize ();
+ int pid = 0;
+ int userExpId = 0;
+ if (sz > 0)
+ {
+ pid = exp->getPID ();
+ userExpId = exp->getUserExpId ();
+ }
+ for (long i = 0; i < sz; ++i)
+ {
+ uint64_t nByte = heapPkts->getULongValue (PROP_HSIZE, i);
+ uint64_t stackId = (uint64_t) getStack (viewMode, heapPkts, i);
+ Heap_type heapType = (Heap_type) heapPkts->getIntValue (PROP_HTYPE, i);
+ uint64_t leaked = heapPkts->getULongValue (PROP_HLEAKED, i);
+ int64_t heapSize = heapPkts->getLongValue (PROP_HCUR_ALLOCS, i);
+ hrtime_t packetTimestamp = heapPkts->getLongValue (PROP_TSTAMP, i);
+ hrtime_t timestamp = packetTimestamp - exp->getStartTime () +
+ exp->getRelativeStartTime ();
+
+ switch (heapType)
+ {
+ case MMAP_TRACE:
+ case MALLOC_TRACE:
+ case REALLOC_TRACE:
+ if (stackId != 0)
+ {
+ hData = hDataCalStkMap->get (stackId);
+ if (hData == NULL)
+ {
+ char *stkName = dbe_sprintf (GTXT ("Stack 0x%llx"),
+ (unsigned long long) stackId);
+ hData = new HeapData (stkName);
+ hDataCalStkMap->put (stackId, hData);
+ hData->id = (int64_t) stackId;
+ hData->setStackId (stackIndex);
+ stackIndex++;
+ hData->setHistType (type);
+ }
+ }
+ else
+ continue;
+
+ hData->addAllocEvent (nByte);
+ hDataTotal->addAllocEvent (nByte);
+ hDataTotal->setAllocStat (nByte);
+ hDataTotal->setPeakMemUsage (heapSize, hData->getStackId (),
+ timestamp, pid, userExpId);
+ if (leaked > 0)
+ {
+ hData->addLeakEvent (leaked);
+ hDataTotal->addLeakEvent (leaked);
+ hDataTotal->setLeakStat (leaked);
+ }
+ break;
+ case MUNMAP_TRACE:
+ case FREE_TRACE:
+ if (hData == NULL)
+ hData = new HeapData (TOTAL_HEAPNAME);
+ hDataTotal->setPeakMemUsage (heapSize, hData->getStackId (),
+ timestamp, pid, userExpId);
+ break;
+ case HEAPTYPE_LAST:
+ break;
+ }
+ has_data = true;
+ }
+ }
+
+ if (has_data)
+ {
+ hDataObjsCallStack = hDataCalStkMap->values ()->copy ();
+ hasCallStack = true;
+ }
+}
diff --git a/gprofng/src/HeapActivity.h b/gprofng/src/HeapActivity.h
new file mode 100644
index 00000000000..582b0b7b038
--- /dev/null
+++ b/gprofng/src/HeapActivity.h
@@ -0,0 +1,76 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _HEAPACTIVITY_H
+#define _HEAPACTIVITY_H
+
+
+#include <stdio.h>
+
+#include "vec.h"
+#include "Histable.h"
+#include "Hist_data.h"
+#include "Metric.h"
+#include "HeapData.h"
+#include "DefaultMap.h"
+#include "dbe_types.h"
+
+class Experiment;
+class Expression;
+class DataView;
+class DbeView;
+
+class HeapActivity
+{
+public:
+
+ HeapActivity (DbeView *_dbev);
+
+ ~HeapActivity ()
+ {
+ this->reset ();
+ }
+
+ void reset (void);
+ Hist_data *compute_metrics (MetricList *, Histable::Type,
+ Hist_data::Mode, Histable*);
+
+private:
+
+ void computeCallStack (Histable::Type, VMode viewMode);
+ void createHistItemTotals (Hist_data *, MetricList *, Histable::Type, bool);
+ void computeHistTotals (Hist_data *, MetricList *);
+ void computeHistData (Hist_data *, MetricList *, Hist_data::Mode, Histable *);
+
+ Vector<HeapData*> *hDataObjs;
+ Vector<HeapData*> *hDataObjsCallStack;
+ bool hasCallStack;
+ HeapData *hDataTotal;
+
+ // list of HeapData objects using the stack id as the key
+ DefaultMap<uint64_t, HeapData*> *hDataCalStkMap;
+
+ // the cached data for mode=Hist_Data::ALL
+ Hist_data *hist_data_callstack_all;
+
+ DbeView *dbev;
+};
+
+#endif /* _HEAPACTIVITY_H */
diff --git a/gprofng/src/HeapData.cc b/gprofng/src/HeapData.cc
new file mode 100644
index 00000000000..5f001ad4ac7
--- /dev/null
+++ b/gprofng/src/HeapData.cc
@@ -0,0 +1,284 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <assert.h>
+#include <string.h>
+
+#include "util.h"
+#include "HeapData.h"
+
+void
+HeapData::init ()
+{
+ allocBytes = 0;
+ leakBytes = 0;
+ allocCnt = 0;
+ leakCnt = 0;
+ stackId = 0;
+ histType = Histable::HEAPCALLSTACK;
+ peakMemUsage = 0;
+ timestamp = 0;
+ pid = 0;
+ userExpId = 0;
+ aSmallestBytes = _10TB;
+ aLargestBytes = 0;
+ a0KB1KBCnt = 0;
+ a1KB8KBCnt = 0;
+ a8KB32KBCnt = 0;
+ a32KB128KBCnt = 0;
+ a128KB256KBCnt = 0;
+ a256KB512KBCnt = 0;
+ a512KB1000KBCnt = 0;
+ a1000KB10MBCnt = 0;
+ a10MB100MBCnt = 0;
+ a100MB1GBCnt = 0;
+ a1GB10GBCnt = 0;
+ a10GB100GBCnt = 0;
+ a100GB1TBCnt = 0;
+ a1TB10TBCnt = 0;
+
+ lSmallestBytes = _10TB;
+ lLargestBytes = 0;
+ l0KB1KBCnt = 0;
+ l1KB8KBCnt = 0;
+ l8KB32KBCnt = 0;
+ l32KB128KBCnt = 0;
+ l128KB256KBCnt = 0;
+ l256KB512KBCnt = 0;
+ l512KB1000KBCnt = 0;
+ l1000KB10MBCnt = 0;
+ l10MB100MBCnt = 0;
+ l100MB1GBCnt = 0;
+ l1GB10GBCnt = 0;
+ l10GB100GBCnt = 0;
+ l100GB1TBCnt = 0;
+ l1TB10TBCnt = 0;
+}
+
+HeapData::HeapData (char *sName)
+{
+ stackName = dbe_strdup (sName);
+ peakStackIds = new Vector<uint64_t>;
+ peakTimestamps = new Vector<hrtime_t>;
+ init ();
+}
+
+HeapData::HeapData (HeapData *hData)
+{
+ stackName = dbe_strdup (hData->stackName);
+ stackId = hData->stackId;
+ histType = hData->histType;
+ allocBytes = hData->allocBytes;
+ leakBytes = hData->leakBytes;
+ allocCnt = hData->allocCnt;
+ leakCnt = hData->leakCnt;
+ peakMemUsage = hData->peakMemUsage;
+ timestamp = hData->timestamp;
+ pid = hData->getPid ();
+ userExpId = hData->getUserExpId ();
+ peakStackIds = new Vector<uint64_t>;
+ Vector<uint64_t> *sIds = hData->peakStackIds;
+ uint64_t sId;
+ if (sIds != NULL)
+ for (int i = 0; i < sIds->size (); i++)
+ {
+ sId = sIds->fetch (i);
+ peakStackIds->append (sId);
+ }
+
+ peakTimestamps = new Vector<hrtime_t>;
+ Vector<hrtime_t> *pts = hData->peakTimestamps;
+ hrtime_t ts;
+ if (pts != NULL)
+ for (int i = 0; i < pts->size (); i++)
+ {
+ ts = pts->fetch (i);
+ peakTimestamps->append (ts);
+ }
+
+ aSmallestBytes = hData->aSmallestBytes;
+ aLargestBytes = hData->aLargestBytes;
+ a0KB1KBCnt = hData->a0KB1KBCnt;
+ a1KB8KBCnt = hData->a1KB8KBCnt;
+ a8KB32KBCnt = hData->a8KB32KBCnt;
+ a32KB128KBCnt = hData->a32KB128KBCnt;
+ a128KB256KBCnt = hData->a128KB256KBCnt;
+ a256KB512KBCnt = hData->a256KB512KBCnt;
+ a512KB1000KBCnt = hData->a512KB1000KBCnt;
+ a1000KB10MBCnt = hData->a1000KB10MBCnt;
+ a10MB100MBCnt = hData->a10MB100MBCnt;
+ a100MB1GBCnt = hData->a100MB1GBCnt;
+ a1GB10GBCnt = hData->a1GB10GBCnt;
+ a10GB100GBCnt = hData->a10GB100GBCnt;
+ a100GB1TBCnt = hData->a100GB1TBCnt;
+ a1TB10TBCnt = hData->a1TB10TBCnt;
+
+ lSmallestBytes = hData->lSmallestBytes;
+ lLargestBytes = hData->lLargestBytes;
+ l0KB1KBCnt = hData->l0KB1KBCnt;
+ l1KB8KBCnt = hData->l1KB8KBCnt;
+ l8KB32KBCnt = hData->l8KB32KBCnt;
+ l32KB128KBCnt = hData->l32KB128KBCnt;
+ l128KB256KBCnt = hData->l128KB256KBCnt;
+ l256KB512KBCnt = hData->l256KB512KBCnt;
+ l512KB1000KBCnt = hData->l512KB1000KBCnt;
+ l1000KB10MBCnt = hData->l1000KB10MBCnt;
+ l10MB100MBCnt = hData->l10MB100MBCnt;
+ l100MB1GBCnt = hData->l100MB1GBCnt;
+ l1GB10GBCnt = hData->l1GB10GBCnt;
+ l10GB100GBCnt = hData->l10GB100GBCnt;
+ l100GB1TBCnt = hData->l100GB1TBCnt;
+ l1TB10TBCnt = hData->l1TB10TBCnt;
+}
+
+HeapData::~HeapData ()
+{
+ free (stackName);
+ delete peakStackIds;
+ delete peakTimestamps;
+}
+
+Histable*
+HeapData::convertto (Histable_type type, Histable*)
+{
+ return type == histType ? this : NULL;
+}
+
+char*
+HeapData::get_name (Histable::NameFormat /*_nfmt*/)
+{
+ return stackName;
+}
+
+char*
+HeapData::get_raw_name (Histable::NameFormat /*_nfmt*/)
+{
+ return stackName;
+}
+
+void
+HeapData::set_name (char* _name)
+{
+ free (stackName);
+ stackName = dbe_strdup (_name);
+}
+
+void
+HeapData::setPeakMemUsage (int64_t pmu, uint64_t sId, hrtime_t ts, int procId, int uei)
+{
+ if (peakMemUsage < pmu)
+ {
+ peakMemUsage = pmu;
+ peakStackIds->reset ();
+ peakStackIds->append (sId);
+ peakTimestamps->reset ();
+ peakTimestamps->append (ts);
+ pid = procId;
+ userExpId = uei;
+ }
+ else if (peakMemUsage == pmu)
+ {
+ for (int i = 0; i < peakStackIds->size (); i++)
+ {
+ uint64_t curSId = peakStackIds->fetch (i);
+ if (curSId == sId)
+ return;
+ }
+ peakStackIds->append (sId);
+ peakTimestamps->append (ts);
+ pid = procId;
+ userExpId = uei;
+ }
+}
+
+void
+HeapData::setAllocStat (int64_t nb)
+{
+ if (aSmallestBytes > nb)
+ aSmallestBytes = nb;
+ if (aLargestBytes < nb)
+ aLargestBytes = nb;
+ if (nb >= 0 && nb <= _1KB)
+ a0KB1KBCnt++;
+ else if (nb <= _8KB)
+ a1KB8KBCnt++;
+ else if (nb <= _32KB)
+ a8KB32KBCnt++;
+ else if (nb <= _128KB)
+ a32KB128KBCnt++;
+ else if (nb <= _256KB)
+ a128KB256KBCnt++;
+ else if (nb <= _512KB)
+ a256KB512KBCnt++;
+ else if (nb <= _1000KB)
+ a512KB1000KBCnt++;
+ else if (nb <= _10MB)
+ a1000KB10MBCnt++;
+ else if (nb <= _100MB)
+ a10MB100MBCnt++;
+ else if (nb <= _1GB)
+ a100MB1GBCnt++;
+ else if (nb <= _10GB)
+ a1GB10GBCnt++;
+ else if (nb <= _100GB)
+ a10GB100GBCnt++;
+ else if (nb <= _1TB)
+ a100GB1TBCnt++;
+ else if (nb <= _10TB)
+ a1TB10TBCnt++;
+}
+
+void
+HeapData::setLeakStat (int64_t nb)
+{
+ if (lSmallestBytes > nb)
+ lSmallestBytes = nb;
+ if (lLargestBytes < nb)
+ lLargestBytes = nb;
+ if (nb >= 0 && nb <= _1KB)
+ l0KB1KBCnt++;
+ else if (nb <= _8KB)
+ l1KB8KBCnt++;
+ else if (nb <= _32KB)
+ l8KB32KBCnt++;
+ else if (nb <= _128KB)
+ l32KB128KBCnt++;
+ else if (nb <= _256KB)
+ l128KB256KBCnt++;
+ else if (nb <= _512KB)
+ l256KB512KBCnt++;
+ else if (nb <= _1000KB)
+ l512KB1000KBCnt++;
+ else if (nb <= _10MB)
+ l1000KB10MBCnt++;
+ else if (nb <= _100MB)
+ l10MB100MBCnt++;
+ else if (nb <= _1GB)
+ l100MB1GBCnt++;
+ else if (nb <= _10GB)
+ l1GB10GBCnt++;
+ else if (nb <= _100GB)
+ l10GB100GBCnt++;
+ else if (nb <= _1TB)
+ l100GB1TBCnt++;
+ else if (nb <= _10TB)
+ l1TB10TBCnt++;
+}
diff --git a/gprofng/src/HeapData.h b/gprofng/src/HeapData.h
new file mode 100644
index 00000000000..7ff68e95516
--- /dev/null
+++ b/gprofng/src/HeapData.h
@@ -0,0 +1,450 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _HEAPDATA_H
+#define _HEAPDATA_H
+
+#include "gp-defs.h"
+#include "gp-time.h"
+
+#include "vec.h"
+#include "data_pckts.h"
+#include "Histable.h"
+
+#define TOTAL_HEAPNAME NTXT("<Total>")
+#define TOTAL_STACK_ID 0
+#define _1KB 1024
+#define _8KB 8192
+#define _32KB 32768
+#define _128KB 131072
+#define _256KB 262144
+#define _512KB 524288
+#define _1000KB 1048576
+#define _10MB 10485760
+#define _100MB 104857600
+#define _1GB 1073741824
+#define _10GB 10737418240
+#define _100GB 107374182400
+#define _1TB 1099511627776
+#define _10TB 10995116277760
+
+class HeapData : public Histable
+{
+ friend class HeapActivity;
+public:
+ HeapData (char *sName);
+ HeapData (HeapData *hData);
+ ~HeapData ();
+ char *get_raw_name (Histable::NameFormat nfmt);
+ void init ();
+ void setStackName (char* sName);
+ void setPeakMemUsage (int64_t pmu, uint64_t sId, hrtime_t ts, int procId, int uei);
+
+ virtual char *get_name (Histable::NameFormat nfmt);
+ virtual void set_name (char * _name);
+ virtual Histable *convertto (Histable_type, Histable* = NULL);
+
+ virtual Histable_type
+ get_type ()
+ {
+ return histType;
+ }
+
+ virtual uint64_t
+ get_addr ()
+ {
+ return stackId;
+ }
+
+ uint64_t
+ get_index ()
+ {
+ return stackId;
+ }
+
+ char *
+ getStackName ()
+ {
+ return stackName;
+ }
+
+ void
+ addAllocEvent (uint64_t nb)
+ {
+ allocBytes += nb;
+ allocCnt++;
+ }
+
+ uint64_t
+ getAllocBytes ()
+ {
+ return allocBytes;
+ }
+
+ int32_t
+ getAllocCnt ()
+ {
+ return allocCnt;
+ }
+
+ void
+ addLeakEvent (uint64_t nb)
+ {
+ leakBytes += nb;
+ leakCnt++;
+ }
+
+ uint64_t
+ getLeakBytes ()
+ {
+ return leakBytes;
+ }
+
+ int32_t
+ getLeakCnt ()
+ {
+ return leakCnt;
+ }
+
+ void
+ setStackId (uint64_t sId)
+ {
+ stackId = sId;
+ }
+
+ uint64_t
+ getStackId ()
+ {
+ return stackId;
+ }
+
+ void
+ setTimestamp (hrtime_t ts)
+ {
+ timestamp = ts;
+ }
+
+ hrtime_t
+ getTimestamp ()
+ {
+ return timestamp;
+ }
+
+ void
+ setHistType (Histable::Type hType)
+ {
+ histType = hType;
+ }
+
+ Histable::Type
+ getHistType ()
+ {
+ return histType;
+ }
+
+ int64_t
+ getPeakMemUsage ()
+ {
+ return peakMemUsage;
+ }
+
+ Vector<uint64_t> *
+ getPeakStackIds ()
+ {
+ return peakStackIds;
+ }
+
+ Vector<hrtime_t> *
+ getPeakTimestamps ()
+ {
+ return peakTimestamps;
+ }
+
+ void
+ setPid (int procId)
+ {
+ pid = procId;
+ }
+
+ int
+ getPid ()
+ {
+ return pid;
+ }
+
+ void
+ setUserExpId (int uei)
+ {
+ userExpId = uei;
+ }
+
+ int
+ getUserExpId ()
+ {
+ return userExpId;
+ }
+
+ void setAllocStat (int64_t nb);
+
+ int64_t
+ getASmallestBytes ()
+ {
+ return aSmallestBytes;
+ }
+
+ int64_t
+ getALargestBytes ()
+ {
+ return aLargestBytes;
+ }
+
+ int32_t
+ getA0KB1KBCnt ()
+ {
+ return a0KB1KBCnt;
+ }
+
+ int32_t
+ getA1KB8KBCnt ()
+ {
+ return a1KB8KBCnt;
+ }
+
+ int32_t
+ getA8KB32KBCnt ()
+ {
+ return a8KB32KBCnt;
+ }
+
+ int32_t
+ getA32KB128KBCnt ()
+ {
+ return a32KB128KBCnt;
+ }
+
+ int32_t
+ getA128KB256KBCnt ()
+ {
+ return a128KB256KBCnt;
+ }
+
+ int32_t
+ getA256KB512KBCnt ()
+ {
+ return a256KB512KBCnt;
+ }
+
+ int32_t
+ getA512KB1000KBCnt ()
+ {
+ return a512KB1000KBCnt;
+ }
+
+ int32_t
+ getA1000KB10MBCnt ()
+ {
+ return a1000KB10MBCnt;
+ }
+
+ int32_t
+ getA10MB100MBCnt ()
+ {
+ return a10MB100MBCnt;
+ }
+
+ int32_t
+ getA100MB1GBCnt ()
+ {
+ return a100MB1GBCnt;
+ }
+
+ int32_t
+ getA1GB10GBCnt ()
+ {
+ return a1GB10GBCnt;
+ }
+
+ int32_t
+ getA10GB100GBCnt ()
+ {
+ return a10GB100GBCnt;
+ }
+
+ int32_t
+ getA100GB1TBCnt ()
+ {
+ return a100GB1TBCnt;
+ }
+
+ int32_t
+ getA1TB10TBCnt ()
+ {
+ return a1TB10TBCnt;
+ }
+
+ void setLeakStat (int64_t nb);
+
+ int64_t
+ getLSmallestBytes ()
+ {
+ return lSmallestBytes;
+ }
+
+ int64_t
+ getLLargestBytes ()
+ {
+ return lLargestBytes;
+ }
+
+ int32_t
+ getL0KB1KBCnt ()
+ {
+ return l0KB1KBCnt;
+ }
+
+ int32_t
+ getL1KB8KBCnt ()
+ {
+ return l1KB8KBCnt;
+ }
+
+ int32_t
+ getL8KB32KBCnt ()
+ {
+ return l8KB32KBCnt;
+ }
+
+ int32_t
+ getL32KB128KBCnt ()
+ {
+ return l32KB128KBCnt;
+ }
+
+ int32_t
+ getL128KB256KBCnt ()
+ {
+ return l128KB256KBCnt;
+ }
+
+ int32_t
+ getL256KB512KBCnt ()
+ {
+ return l256KB512KBCnt;
+ }
+
+ int32_t
+ getL512KB1000KBCnt ()
+ {
+ return l512KB1000KBCnt;
+ }
+
+ int32_t
+ getL1000KB10MBCnt ()
+ {
+ return l1000KB10MBCnt;
+ }
+
+ int32_t
+ getL10MB100MBCnt ()
+ {
+ return l10MB100MBCnt;
+ }
+
+ int32_t
+ getL100MB1GBCnt ()
+ {
+ return l100MB1GBCnt;
+ }
+
+ int32_t
+ getL1GB10GBCnt ()
+ {
+ return l1GB10GBCnt;
+ }
+
+ int32_t
+ getL10GB100GBCnt ()
+ {
+ return l10GB100GBCnt;
+ }
+
+ int32_t
+ getL100GB1TBCnt ()
+ {
+ return l100GB1TBCnt;
+ }
+
+ int32_t
+ getL1TB10TBCnt ()
+ {
+ return l1TB10TBCnt;
+ }
+
+private:
+ char *stackName; // stack name
+ uint64_t allocBytes; // The total bytes allocated
+ uint64_t leakBytes; // The total bytes leaked
+ int32_t allocCnt; // The alloc count
+ int32_t leakCnt; // The leak count
+ Histable::Type histType; // The Histable type: HEAPCALLSTACK
+ int64_t peakMemUsage; // Keep track of peak memory usage
+ uint64_t stackId;
+ Vector<uint64_t> *peakStackIds; // The peak memory usage stack ids
+ hrtime_t timestamp;
+ Vector<hrtime_t> *peakTimestamps; // The peak data
+ int pid; // The process id
+ int userExpId; // The experiment id
+
+ int64_t aSmallestBytes;
+ int64_t aLargestBytes;
+ int32_t a0KB1KBCnt;
+ int32_t a1KB8KBCnt;
+ int32_t a8KB32KBCnt;
+ int32_t a32KB128KBCnt;
+ int32_t a128KB256KBCnt;
+ int32_t a256KB512KBCnt;
+ int32_t a512KB1000KBCnt;
+ int32_t a1000KB10MBCnt;
+ int32_t a10MB100MBCnt;
+ int32_t a100MB1GBCnt;
+ int32_t a1GB10GBCnt;
+ int32_t a10GB100GBCnt;
+ int32_t a100GB1TBCnt;
+ int32_t a1TB10TBCnt;
+
+ int64_t lSmallestBytes;
+ int64_t lLargestBytes;
+ int32_t l0KB1KBCnt;
+ int32_t l1KB8KBCnt;
+ int32_t l8KB32KBCnt;
+ int32_t l32KB128KBCnt;
+ int32_t l128KB256KBCnt;
+ int32_t l256KB512KBCnt;
+ int32_t l512KB1000KBCnt;
+ int32_t l1000KB10MBCnt;
+ int32_t l10MB100MBCnt;
+ int32_t l100MB1GBCnt;
+ int32_t l1GB10GBCnt;
+ int32_t l10GB100GBCnt;
+ int32_t l100GB1TBCnt;
+ int32_t l1TB10TBCnt;
+};
+
+#endif
diff --git a/gprofng/src/HeapMap.cc b/gprofng/src/HeapMap.cc
new file mode 100644
index 00000000000..8e6c009bf48
--- /dev/null
+++ b/gprofng/src/HeapMap.cc
@@ -0,0 +1,325 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include "util.h"
+#include "HeapMap.h"
+
+#define HEAPCHUNKSZ 1024 // number of HeapObj's in a chunk
+#define HEAPCHAINS 9192 // number of address-based chains
+#define hash(x) (((x) >> 6) % HEAPCHAINS)
+
+typedef struct HeapObj
+{
+ uint64_t addr;
+ uint64_t size;
+ long val;
+ HeapObj *next;
+} HeapObj;
+
+typedef struct HeapChunk
+{
+ void *addr;
+ HeapChunk *next;
+} HeapChunk;
+
+HeapMap::HeapMap ()
+{
+ chunks = NULL;
+ empty = NULL;
+ chain = new HeapObj*[HEAPCHAINS];
+ for (int i = 0; i < HEAPCHAINS; i++)
+ chain[i] = NULL;
+
+ mmaps = new HeapObj;
+ mmaps->addr = (uint64_t) 0;
+ mmaps->size = (uint64_t) 0;
+ mmaps->val = -1;
+ mmaps->next = NULL;
+}
+
+HeapMap::~HeapMap ()
+{
+ // free up all the chunks
+ HeapChunk *c = chunks;
+ while (c != NULL)
+ {
+ HeapChunk *next = c->next;
+ delete c;
+ c = next;
+ }
+ delete[] chain;
+ delete mmaps;
+}
+
+void
+HeapMap::allocate (uint64_t addr, long val)
+{
+ // get a HeapObj, and set it up for the allocated block
+ HeapObj *incoming = getHeapObj ();
+ incoming->addr = addr;
+ incoming->val = val;
+ incoming->next = NULL;
+
+ // determine which chain the block belongs on
+ int ichain = (int) hash (addr);
+
+ // if this is the first, just set it up and return
+ if (chain[ichain] == NULL)
+ {
+ chain[ichain] = incoming;
+ return;
+ }
+ // chain is non-empty -- find the slot for this one
+ // chain is maintained in reverse address order
+ HeapObj *prev = NULL;
+ HeapObj *next = chain[ichain];
+
+ for (;;)
+ {
+ if ((next == NULL) || (next->addr < incoming->addr))
+ {
+ // we've found the spot
+ incoming->next = next;
+ if (prev == NULL)
+ chain[ichain] = incoming;
+ else
+ prev->next = incoming;
+ return;
+ }
+ if (next->addr == incoming->addr)
+ {
+ // error -- two blocks with same address active
+ // ignore the new one
+ releaseHeapObj (incoming);
+ return;
+ }
+ // not yet, keep looking
+ prev = next;
+ next = next->next;
+ }
+}
+
+long
+HeapMap::deallocate (uint64_t addr)
+{
+ int ichain = (int) hash (addr);
+ HeapObj *cur = chain[ichain];
+ HeapObj *prev = NULL;
+ while (cur != NULL)
+ {
+ if (cur->addr == addr)
+ {
+ // we've found the block
+ long val = cur->val;
+
+ // delete the block from the chain
+ if (prev == NULL)
+ chain[ichain] = cur->next;
+ else
+ prev->next = cur->next;
+ releaseHeapObj (cur);
+ return val;
+ }
+ prev = cur;
+ cur = cur->next;
+ }
+
+ // block not found
+ return 0;
+}
+
+void
+HeapMap::allocateChunk ()
+{
+ // allocate the memory
+ HeapChunk *c = new HeapChunk;
+ HeapObj *newc = new HeapObj[HEAPCHUNKSZ];
+
+ // set up the chunk, and queue it for destructor's use
+ c->addr = (void *) newc;
+ c->next = chunks;
+ chunks = c;
+
+ // Initialize the HeapObj's in the chunk to one chain
+ // last entry is left NULL, terminating the chain
+ for (int i = 0; i < (HEAPCHUNKSZ - 1); i++)
+ newc[i].next = newc + i + 1;
+ newc[HEAPCHUNKSZ - 1].next = NULL;
+
+ // put that chain on the empty queue
+ empty = newc;
+}
+
+HeapObj *
+HeapMap::getHeapObj ()
+{
+ if (empty == NULL)
+ allocateChunk ();
+ HeapObj *ret = empty;
+ empty = ret->next;
+ return ret;
+}
+
+void
+HeapMap::releaseHeapObj (HeapObj *obj)
+{
+ obj->next = empty;
+ empty = obj;
+}
+
+UnmapChunk*
+HeapMap::mmap (uint64_t addr, int64_t size, long val)
+{
+ HeapObj *incoming = getHeapObj ();
+ incoming->addr = addr;
+ incoming->size = size;
+ incoming->val = val;
+ incoming->next = NULL;
+ UnmapChunk* list = process (incoming, addr, size);
+ return list;
+}
+
+UnmapChunk*
+HeapMap::munmap (uint64_t addr, int64_t size)
+{
+ UnmapChunk* list = process (NULL, addr, size);
+ return list;
+}
+
+UnmapChunk*
+HeapMap::process (HeapObj *obj, uint64_t addr, int64_t size)
+{
+ // Some graphics are used to clarify the alignment of mmap regions
+ // obj, shown as consecutive pages: "NNNNNN"
+ // cur, shown as consecutive pages: "CCCCCC"
+
+ // Find the first overlap, start of N is before end of C. Examples:
+ // CCCCC
+ // NNNNN
+ // or
+ // CCCCC
+ // NNN
+ // or
+ // CCCCC
+ // NNNNN
+ // or
+ // CCCCC
+ // NNNNNNN
+ HeapObj *prev = mmaps;
+ HeapObj *cur = prev->next;
+ while (cur)
+ {
+ if (addr < cur->addr + cur->size)
+ break;
+ prev = cur;
+ cur = prev->next;
+ }
+
+ // None found
+ if (cur == NULL)
+ {
+ prev->next = obj;
+ return NULL;
+ }
+
+ UnmapChunk* list = NULL;
+ if (addr > cur->addr)
+ {
+ if (cur->addr + cur->size <= addr + size)
+ {
+ // Process overlap on the left (low side) of new allocation
+ // New range: N-start to C-end (gets freed below)
+ prev = cur;
+ cur = getHeapObj ();
+ cur->addr = addr;
+ cur->size = prev->addr + prev->size - addr;
+ cur->val = prev->val;
+ cur->next = prev->next;
+
+ // Truncate range: C-start to N-start
+ prev->size = addr - prev->addr;
+ }
+ else
+ {
+ // Process new allocation that fits completely within old allocation
+ // New range: N-start to N-end (freed below)
+ int64_t c_end = cur->addr + cur->size;
+ prev = cur;
+ cur = getHeapObj ();
+ cur->addr = addr;
+ cur->size = size;
+ cur->val = prev->val;
+ cur->next = prev->next;
+
+ // Truncate range: C-start to N-start
+ prev->size = addr - prev->addr;
+
+ // New range: N-end to C-end.
+ HeapObj *next = getHeapObj ();
+ next->addr = addr + size;
+ next->size = c_end - next->addr;
+ next->val = cur->val;
+ next->next = cur->next;
+ cur->next = next;
+ }
+ }
+
+ // Process all full overlaps.
+ // Copy details of cur to UnmapChunk list, remove cur from mmaps
+ while (cur && cur->addr + cur->size <= addr + size)
+ {
+
+ UnmapChunk* uc = new UnmapChunk;
+ uc->val = cur->val;
+ uc->size = cur->size;
+ uc->next = list;
+ list = uc;
+
+ HeapObj *t = cur;
+ cur = cur->next;
+ releaseHeapObj (t);
+ }
+
+ if (cur && cur->addr < addr + size)
+ {
+ // Process the last overlap (right side of new allocation)
+ // Copy details of cur to UnmapChunk list
+ UnmapChunk* uc = new UnmapChunk;
+ uc->val = cur->val;
+ uc->size = addr + size - cur->addr;
+ uc->next = list;
+ list = uc;
+
+ // Truncate left side of cur
+ cur->size -= uc->size;
+ cur->addr = addr + size;
+ }
+
+ // Insert new allocation
+ if (obj)
+ {
+ prev->next = obj;
+ obj->next = cur;
+ }
+ else
+ prev->next = cur;
+ return list;
+}
diff --git a/gprofng/src/HeapMap.h b/gprofng/src/HeapMap.h
new file mode 100644
index 00000000000..c46129dc0da
--- /dev/null
+++ b/gprofng/src/HeapMap.h
@@ -0,0 +1,59 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _HEAPMAP_H
+#define _HEAPMAP_H
+
+#include "dbe_types.h"
+#include "vec.h"
+
+struct HeapObj;
+struct HeapChunk;
+
+typedef struct UnmapChunk
+{
+ long val;
+ int64_t size;
+ UnmapChunk *next;
+} UnmapChunk;
+
+class HeapMap
+{
+public:
+ HeapMap ();
+ ~HeapMap ();
+ void allocate (uint64_t addr, long val);
+ long deallocate (uint64_t addr);
+ UnmapChunk *mmap (uint64_t addr, int64_t size, long val);
+ UnmapChunk *munmap (uint64_t addr, int64_t size);
+
+private:
+ void allocateChunk ();
+ HeapObj *getHeapObj ();
+ void releaseHeapObj (HeapObj*);
+ UnmapChunk *process (HeapObj *obj, uint64_t addr, int64_t size);
+
+ HeapChunk *chunks;
+ HeapObj *empty;
+ HeapObj **chain;
+ HeapObj *mmaps;
+};
+
+#endif /* _HEAPMAP_H */
diff --git a/gprofng/src/Hist_data.cc b/gprofng/src/Hist_data.cc
new file mode 100644
index 00000000000..44122039b0c
--- /dev/null
+++ b/gprofng/src/Hist_data.cc
@@ -0,0 +1,1886 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <assert.h>
+
+#include "util.h"
+#include "DefaultMap.h"
+#include "DbeSession.h"
+#include "Experiment.h"
+#include "DataObject.h"
+#include "Function.h"
+#include "Hist_data.h"
+#include "Histable.h"
+#include "MemObject.h"
+#include "IndexObject.h"
+#include "MetricList.h"
+#include "Metric.h"
+#include "Module.h"
+#include "LoadObject.h"
+#include "Settings.h"
+#include "StringBuilder.h"
+#include "ExpGroup.h"
+#include "PathTree.h"
+#include "DbeView.h"
+#include "FileData.h"
+
+Hist_data::HistItem::HistItem (long n)
+{
+ obj = NULL;
+ type = 0;
+ size = n;
+ value = new TValue[n];
+ memset (value, 0, sizeof (TValue) * n);
+}
+
+Hist_data::HistItem::~HistItem ()
+{
+ for (long i = 0; i < size; i++)
+ if (value[i].tag == VT_LABEL)
+ free (value[i].l);
+ delete[] value;
+}
+
+long
+Hist_data::size ()
+{
+ // If the data values have not been computed, do so
+ // Return the total number of items
+ return hist_items->size ();
+}
+
+Hist_data::HistItem *
+Hist_data::fetch (long index)
+{
+ return (index < VecSize (hist_items)) ? hist_items->get (index) : NULL;
+}
+
+int
+Hist_data::sort_compare (HistItem *hi_1, HistItem *hi_2, Sort_type stype,
+ long ind, Hist_data *hdata)
+{
+ // Sort the data depending upon order and type
+ int result = 0;
+ Histable::Type type = hi_1->obj->get_type ();
+ if (stype == ALPHA)
+ {
+ if (type != Histable::MEMOBJ && type != Histable::INDEXOBJ
+ && type != Histable::IOACTVFD && type != Histable::IOACTFILE
+ && type != Histable::IOCALLSTACK)
+ {
+ char *nm1 = hi_1->obj->get_name ();
+ char *nm2 = hi_2->obj->get_name ();
+ if (nm1 != NULL && nm2 != NULL)
+ result = strcoll (nm1, nm2);
+ }
+ else if (type == Histable::IOCALLSTACK || type == Histable::IOACTVFD
+ || type == Histable::IOACTFILE)
+ {
+ uint64_t idx1, idx2;
+ idx1 = ((FileData *) (hi_1->obj))->get_index ();
+ idx2 = ((FileData *) (hi_2->obj))->get_index ();
+ if (idx1 < idx2)
+ result = -1;
+ else if (idx1 > idx2)
+ result = 1;
+ else
+ result = 0;
+ }
+ else
+ {
+ // for memory and index objects, "alphabetic" is really by index
+ // <Total> has index -2, and always comes first
+ // <Unknown> has index -1, and always comes second.
+ uint64_t i1, i2;
+ bool needsStringCompare = false;
+ if (type == Histable::MEMOBJ)
+ {
+ i1 = ((MemObj *) (hi_1->obj))->get_index ();
+ i2 = ((MemObj *) (hi_2->obj))->get_index ();
+ }
+ else if (type == Histable::INDEXOBJ)
+ {
+ i1 = ((IndexObject *) (hi_1->obj))->get_index ();
+ i2 = ((IndexObject *) (hi_2->obj))->get_index ();
+ needsStringCompare =
+ ((IndexObject *) (hi_1->obj))->requires_string_sort ();
+ }
+ else
+ abort ();
+ if (i1 == (uint64_t) - 2)
+ result = -1;
+ else if (i2 == (uint64_t) - 2)
+ result = 1;
+ else if (i1 == (uint64_t) - 1)
+ result = -1;
+ else if (i2 == (uint64_t) - 1)
+ result = 1;
+ else if (needsStringCompare)
+ {
+ char *nm1 = hi_1->obj->get_name ();
+ char *nm2 = hi_2->obj->get_name ();
+ if (nm1 != NULL && nm2 != NULL)
+ {
+ char nm1_lead = nm1[0];
+ char nm2_lead = nm2[0];
+ // put "(unknown)" and friends at end of list
+ if (nm1_lead == '(' && nm1_lead != nm2_lead)
+ result = 1;
+ else if (nm2_lead == '(' && nm1_lead != nm2_lead)
+ result = -1;
+ else
+ result = strcoll (nm1, nm2);
+ }
+ }
+ if (result == 0)
+ { // matches, resolve by index
+ if (i1 < i2)
+ result = -1;
+ else if (i1 > i2)
+ result = 1;
+ }
+ }
+ }
+ else if (stype == AUX)
+ {
+ switch (type)
+ {
+ case Histable::INSTR:
+ {
+ DbeInstr *instr1 = (DbeInstr*) hi_1->obj;
+ DbeInstr *instr2 = (DbeInstr*) hi_2->obj;
+ result = instr1 ? instr1->pc_cmp (instr2) : instr2 ? 1 : 0;
+ break;
+ }
+ case Histable::LINE:
+ {
+ DbeLine *dbl1 = (DbeLine*) hi_1->obj;
+ DbeLine *dbl2 = (DbeLine*) hi_2->obj;
+ result = dbl1->line_cmp (dbl2);
+ }
+ break;
+ default:
+ assert (0);
+ }
+ }
+ else if (stype == VALUE)
+ {
+ Metric *m = hdata->get_metric_list ()->get (ind);
+ if ((m->get_visbits () & (VAL_DELTA | VAL_RATIO)) != 0)
+ {
+ TValue v1, v2;
+ int first_ind = hdata->hist_metrics[ind].indFirstExp;
+ if ((m->get_visbits () & VAL_DELTA) != 0)
+ {
+ v1.make_delta (hi_1->value + ind, hi_1->value + first_ind);
+ v2.make_delta (hi_2->value + ind, hi_2->value + first_ind);
+ }
+ else
+ {
+ v1.make_ratio (hi_1->value + ind, hi_1->value + first_ind);
+ v2.make_ratio (hi_2->value + ind, hi_2->value + first_ind);
+ }
+ result = v1.compare (&v2);
+ }
+ else
+ result = hi_1->value[ind].compare (hi_2->value + ind);
+ }
+ return result;
+}
+
+int
+Hist_data::sort_compare_all (const void *a, const void *b, const void *arg)
+{
+ HistItem *hi_1 = *((HistItem **) a);
+ HistItem *hi_2 = *((HistItem **) b);
+
+ Hist_data *hdata = (Hist_data*) arg;
+ int result = sort_compare (hi_1, hi_2, hdata->sort_type, hdata->sort_ind, hdata);
+ if (hdata->sort_order == DESCEND)
+ result = -result;
+
+ // Use the name as the 2d sort key (always ASCEND)
+ // except for MemoryObjects and IndexObjects, where the index is used
+ // For the Alphabetic sort
+ if (result == 0)
+ {
+ result = sort_compare (hi_1, hi_2, ALPHA, 0, NULL);
+ if (result == 0)
+ {
+ for (long i = 0, sz = hdata->metrics->size (); i < sz; i++)
+ {
+ Metric *m = hdata->metrics->get (i);
+ if (m->get_type () != Metric::ONAME)
+ {
+ result = sort_compare (hi_1, hi_2, VALUE, i, hdata);
+ if (result != 0)
+ {
+ if (hdata->sort_order == DESCEND)
+ result = -result;
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ // Use the address as the 3d sort key
+ // ( FUNCTION only, always ASCEND )
+ if (result == 0 && hi_1->obj->get_type () == Histable::FUNCTION)
+ {
+ Function *f1 = (Function*) hi_1->obj;
+ Function *f2 = (Function*) hi_2->obj;
+ if (f1->get_addr () < f2->get_addr ())
+ result = -1;
+ else if (f1->get_addr () > f2->get_addr ())
+ result = 1;
+ }
+
+ // Use the Histable id (ID of function, line, etc.) as the 4th sort key
+ // Note that IDs are not guaranteed to be stable,
+ if (result == 0)
+ {
+ if (hi_1->obj->id < hi_2->obj->id)
+ result = -1;
+ else if (hi_1->obj->id > hi_2->obj->id)
+ result = 1;
+ }
+
+ if (result == 0)
+ return result; // shouldn't happen in most cases; line allows for breakpoint
+ if (hdata->rev_sort)
+ result = -result;
+ return result;
+}
+
+int
+Hist_data::sort_compare_dlayout (const void *a, const void *b, const void *arg)
+{
+ assert ((a != (const void *) NULL));
+ assert ((b != (const void *) NULL));
+ HistItem *hi_1 = *((HistItem **) a);
+ HistItem *hi_2 = *((HistItem **) b);
+ DataObject * dobj1 = (DataObject *) (hi_1->obj);
+ DataObject * dobj2 = (DataObject *) (hi_2->obj);
+ DataObject * parent1 = dobj1->parent;
+ DataObject * parent2 = dobj2->parent;
+
+ Hist_data *hdata = (Hist_data*) arg;
+
+ // are the two items members of the same object?
+ if (parent1 == parent2)
+ {
+ // yes
+ if (parent1)
+ {
+ // and they have real parents...
+ if (parent1->get_typename ())
+ { // element
+ // use dobj1/dobj2 offset for sorting
+ uint64_t off1 = dobj1->get_offset ();
+ uint64_t off2 = dobj2->get_offset ();
+ if (off1 < off2)
+ return -1;
+ if (off1 > off2)
+ return 1;
+ return 0;
+ }
+ }
+ }
+ else
+ { // parents differ
+ if (parent1)
+ {
+ if (parent1 == dobj2)
+ // sorting an object and its parent: parent always first
+ return 1;
+ dobj1 = parent1;
+ }
+ if (parent2)
+ {
+ if (parent2 == dobj1)
+ return -1;
+ dobj2 = parent2;
+ }
+ }
+ // Either two unknowns, or two scalars, or two parents
+ hi_1 = hdata->hi_map->get (dobj1);
+ hi_2 = hdata->hi_map->get (dobj2);
+ return sort_compare_all ((const void*) &hi_1, (const void*) &hi_2, hdata);
+}
+
+Hist_data::Hist_data (MetricList *_metrics, Histable::Type _type,
+ Hist_data::Mode _mode, bool _viewowned)
+{
+ hist_items = new Vector<HistItem*>;
+ metrics = _metrics;
+ nmetrics = metrics->get_items ()->size ();
+ type = _type;
+ mode = _mode;
+ gprof_item = new_hist_item (NULL);
+ viewowned = _viewowned;
+ sort_ind = -1;
+ rev_sort = false;
+
+ Histable *tobj = new Other;
+ tobj->name = dbe_strdup (NTXT ("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"));
+ minimum = new_hist_item (tobj);
+
+ tobj = new Other;
+ tobj->name = dbe_strdup (NTXT (""));
+ maximum = new_hist_item (tobj);
+
+ tobj = new Other;
+ tobj->name = dbe_strdup (NTXT ("xxxxxxxxxxxxxxxxxxxxxx"));
+ maximum_inc = new_hist_item (tobj);
+
+ tobj = new Other;
+ tobj->name = dbe_strdup (NTXT ("<Total>"));
+ total = new_hist_item (tobj);
+
+ tobj = new Other;
+ tobj->name = dbe_strdup (NTXT ("XXXX Threshold XXXX"));
+ threshold = new_hist_item (tobj);
+
+ hi_map = new HashMap<Histable*, HistItem*>;
+ callsite_mark = new DefaultMap<Histable*, int>;
+ hist_metrics = new Metric::HistMetric[metrics->size ()];
+ for (long i = 0, sz = metrics->size (); i < sz; i++)
+ {
+ Metric::HistMetric *h = hist_metrics + i;
+ h->init ();
+ Metric *m = metrics->get (i);
+ if (0 != (m->get_visbits () & (VAL_DELTA | VAL_RATIO)))
+ h->indFirstExp =
+ metrics->get_listorder (m->get_cmd (),
+ m->get_subtype (), "EXPGRID==1");
+ if (m->is_tvisible () && m->get_type () == BaseMetric::HWCNTR
+ && m->get_dependent_bm ())
+ h->indTimeVal =
+ metrics->get_listorder (m->get_dependent_bm ()->get_cmd (),
+ m->get_subtype (), m->get_expr_spec ());
+ }
+ status = NO_DATA;
+}
+
+Hist_data::~Hist_data ()
+{
+ delete[] hist_metrics;
+ if (hist_items)
+ {
+ hist_items->destroy ();
+ delete hist_items;
+ hist_items = NULL;
+ }
+ if (gprof_item)
+ {
+ delete gprof_item;
+ gprof_item = NULL;
+ }
+ if (maximum)
+ {
+ delete maximum->obj;
+ delete maximum;
+ maximum = NULL;
+ }
+ if (maximum_inc)
+ {
+ delete maximum_inc->obj;
+ delete maximum_inc;
+ maximum_inc = NULL;
+ }
+ if (minimum)
+ {
+ delete minimum->obj;
+ delete minimum;
+ minimum = NULL;
+ }
+ if (total)
+ {
+ delete total->obj;
+ delete total;
+ total = NULL;
+ }
+ if (threshold)
+ {
+ delete threshold->obj;
+ delete threshold;
+ threshold = NULL;
+ }
+ delete metrics;
+ delete hi_map;
+ delete callsite_mark;
+}
+
+void
+Hist_data::dump (char *msg, FILE *f)
+{
+ fprintf (f, " Hist_data dump: %s\n", msg);
+ fprintf (f, " %d=%d metrics\n", (int) nmetrics, (int) metrics->size ());
+ for (int i = 0; i < nmetrics; i++)
+ {
+ Metric *m = metrics->get_items ()->fetch (i);
+ char *s = m->get_expr_spec ();
+ fprintf (f, " %4d %15s %4d %15s\n", i, m->get_mcmd (0),
+ m->get_id (), s ? s : "(NULL)");
+ }
+
+ fprintf (f, NTXT (" HistItem listing\n"));
+ int n = hist_items->size ();
+ for (int j = -1; j < n; j++)
+ {
+ HistItem *hi;
+ if (j < 0)
+ {
+ hi = total;
+ fprintf (f, NTXT (" total"));
+ }
+ else
+ {
+ hi = hist_items->fetch (j);
+ fprintf (f, NTXT ("%30s"), hi->obj->get_name ());
+ }
+ for (int i = 0; i < nmetrics; i++)
+ {
+ char *stmp = hi->value[i].l;
+ switch (hi->value[i].tag)
+ {
+ case VT_SHORT: fprintf (f, NTXT (" %d"), hi->value[i].s);
+ break;
+ case VT_INT: fprintf (f, NTXT (" %d"), hi->value[i].i);
+ break;
+ case VT_LLONG: fprintf (f, NTXT (" %12lld"), hi->value[i].ll);
+ break;
+ case VT_FLOAT: fprintf (f, NTXT (" %f"), hi->value[i].f);
+ break;
+ case VT_DOUBLE: fprintf (f, NTXT (" %12.6lf"), hi->value[i].d);
+ break;
+ case VT_HRTIME: fprintf (f, NTXT (" %12llu"), hi->value[i].ull);
+ break;
+ case VT_LABEL: fprintf (f, NTXT (" %s"), stmp ? stmp: "(unnamed)");
+ break;
+ case VT_ADDRESS: fprintf (f, NTXT (" %12lld"), hi->value[i].ll);
+ break;
+ case VT_OFFSET: fprintf (f, NTXT (" %p"), hi->value[i].p);
+ break;
+ case VT_ULLONG: fprintf (f, NTXT (" %12llu"), hi->value[i].ull);
+ break;
+ default: fprintf (f, NTXT (" "));
+ break;
+ }
+ }
+ fprintf (f, NTXT ("\n"));
+ }
+}
+
+void
+Hist_data::sort (long ind, bool reverse)
+{
+ if (mode != MODL && ind != -1 && ind == sort_ind && reverse == rev_sort)
+ // there's no change to the sorting
+ return;
+
+ if (mode == MODL)
+ {
+ sort_type = AUX;
+ sort_order = ASCEND;
+ }
+ else
+ {
+ if (ind == -1)
+ return;
+ Metric::Type mtype = metrics->get_items ()->fetch (ind)->get_type ();
+ sort_type = mtype == Metric::ONAME ? ALPHA : VALUE;
+ sort_order = (mtype == Metric::ONAME || mtype == Metric::ADDRESS) ?
+ ASCEND : DESCEND;
+ sort_ind = ind;
+ rev_sort = reverse;
+ }
+
+ if (mode == Hist_data::LAYOUT || mode == Hist_data::DETAIL)
+ hist_items->sort ((CompareFunc) sort_compare_dlayout, this);
+ else
+ hist_items->sort ((CompareFunc) sort_compare_all, this);
+
+ // ensure that <Total> comes first/last
+ char *tname = NTXT ("<Total>");
+ for (int i = 0; i < hist_items->size (); ++i)
+ {
+ HistItem *hi = hist_items->fetch (i);
+ char *name = hi->obj->get_name ();
+ if (name != NULL && streq (name, tname))
+ {
+ int idx0 = rev_sort ? hist_items->size () - 1 : 0;
+ if (i != idx0)
+ {
+ hist_items->remove (i);
+ hist_items->insert (idx0, hi);
+ }
+ break;
+ }
+ }
+}
+
+void
+Hist_data::resort (MetricList *mlist)
+{
+ if (mlist->get_type () != metrics->get_type ())
+ if (metrics->get_type () == MET_CALL)
+ // wrong type of list -- internal error
+ abort ();
+
+ // get the new sort order
+ int ind = mlist->get_sort_ref_index ();
+ bool reverse = mlist->get_sort_rev ();
+ sort (ind, reverse);
+}
+
+void
+Hist_data::compute_minmax ()
+{
+ HistItem *hi;
+ int index;
+
+ for (int mind = 0; mind < nmetrics; mind++)
+ {
+ Metric *mtr = metrics->get_items ()->fetch (mind);
+ if (mtr->get_subtype () == Metric::STATIC)
+ continue;
+ if (!mtr->is_visible () && !mtr->is_tvisible () && !mtr->is_pvisible ())
+ continue;
+ ValueTag vtype = mtr->get_vtype2 ();
+
+ switch (vtype)
+ {
+ case VT_INT:
+ minimum->value[mind].tag = VT_INT;
+ minimum->value[mind].i = 0;
+ maximum->value[mind].tag = VT_INT;
+ maximum->value[mind].i = 0;
+ maximum_inc->value[mind].tag = VT_INT;
+ maximum_inc->value[mind].i = 0;
+
+ Vec_loop (HistItem *, hist_items, index, hi)
+ {
+ if (metrics->get_type () == MET_SRCDIS
+ && callsite_mark->get (hi->obj))
+ {
+ if (hi->value[mind].i > maximum_inc->value[mind].i)
+ maximum_inc->value[mind].i = hi->value[mind].i;
+ // ignore ones that has inclusive time for src/dis view
+ }
+ else if (hi->value[mind].i > maximum->value[mind].i)
+ maximum->value[mind].i = hi->value[mind].i;
+ if (hi->value[mind].i < minimum->value[mind].i)
+ minimum->value[mind].i = hi->value[mind].i;
+ }
+ break;
+ case VT_DOUBLE:
+ minimum->value[mind].tag = VT_DOUBLE;
+ minimum->value[mind].d = 0.0;
+ maximum->value[mind].tag = VT_DOUBLE;
+ maximum->value[mind].d = 0.0;
+ maximum_inc->value[mind].tag = VT_DOUBLE;
+ maximum_inc->value[mind].d = 0.0;
+ Vec_loop (HistItem*, hist_items, index, hi)
+ {
+ if (metrics->get_type () == MET_SRCDIS && callsite_mark->get (hi->obj))
+ {
+ if (hi->value[mind].d > maximum_inc->value[mind].d)
+ {
+ maximum_inc->value[mind].d = hi->value[mind].d;
+ maximum_inc->value[mind].sign = hi->value[mind].sign;
+ }
+ // ignore ones that has inclusive time for src/dis view
+ }
+ else
+ {
+ if (hi->value[mind].d > maximum->value[mind].d)
+ {
+ maximum->value[mind].d = hi->value[mind].d;
+ maximum->value[mind].sign = hi->value[mind].sign;
+ }
+ if (hi->value[mind].d < minimum->value[mind].d)
+ {
+ minimum->value[mind].d = hi->value[mind].d;
+ minimum->value[mind].sign = hi->value[mind].sign;
+ }
+ }
+ }
+ break;
+ case VT_LLONG:
+ case VT_ULLONG:
+ case VT_ADDRESS:
+ minimum->value[mind].tag = vtype;
+ minimum->value[mind].ll = 0;
+ maximum->value[mind].tag = vtype;
+ maximum->value[mind].ll = 0;
+ maximum_inc->value[mind].tag = vtype;
+ maximum_inc->value[mind].ll = 0;
+ Vec_loop (HistItem*, hist_items, index, hi)
+ {
+ if (metrics->get_type () == MET_SRCDIS && callsite_mark->get (hi->obj))
+ {
+ if (hi->value[mind].ll > maximum_inc->value[mind].ll)
+ {
+ maximum_inc->value[mind].ll = hi->value[mind].ll;
+ maximum_inc->value[mind].sign = hi->value[mind].sign;
+ }
+ // ignore ones that has inclusive time for src/dis view
+ }
+ else
+ {
+ if (hi->value[mind].ll > maximum->value[mind].ll)
+ {
+ maximum->value[mind].ll = hi->value[mind].ll;
+ maximum->value[mind].sign = hi->value[mind].sign;
+ }
+ if (hi->value[mind].ll < minimum->value[mind].ll)
+ {
+ minimum->value[mind].ll = hi->value[mind].ll;
+ minimum->value[mind].sign = hi->value[mind].sign;
+ }
+ }
+ }
+ break;
+ default:
+ break;
+ }
+ }
+}
+
+Hist_data::HistItem *
+Hist_data::new_hist_item (Histable *obj)
+{
+ long sz = get_metric_list ()->size ();
+ HistItem *hi = new HistItem (sz);
+ hi->obj = obj;
+
+ // We precalculate all metrics as integer values
+ // and convert them to appropriate types later.
+ for (long i = 0; i < sz; i++)
+ {
+ hi->value[i].tag = VT_INT;
+ hi->value[i].i = 0;
+ }
+ return hi;
+}
+
+Hist_data::HistItem *
+Hist_data::new_hist_item (Histable *obj, int itype, TValue *value)
+{
+ long sz = get_metric_list ()->size ();
+ HistItem *hi = new HistItem (sz);
+ hi->obj = obj;
+ hi->type = itype;
+ if (value)
+ for (long i = 0; i < sz; i++)
+ hi->value[i] = value[i];
+
+ return hi;
+}
+
+Hist_data::HistItem *
+Hist_data::find_hist_item (Histable *obj)
+{
+ if (obj == NULL)
+ return NULL;
+ return hi_map->get (obj);
+}
+
+Hist_data::HistItem *
+Hist_data::append_hist_item (Histable *obj)
+{
+ if (obj == NULL)
+ return NULL;
+ HistItem *hi = hi_map->get (obj);
+ if (hi == NULL)
+ {
+ hi = new_hist_item (obj);
+ hist_items->append (hi);
+ hi_map->put (obj, hi);
+ }
+ if (status == NO_DATA)
+ status = SUCCESS;
+ return hi;
+}
+
+void
+Hist_data::append_hist_item (HistItem *hi)
+{
+ hist_items->append (hi);
+}
+
+bool
+Hist_data::above_threshold (HistItem* hi)
+{
+ bool mark = false;
+ int index;
+ Metric *mitem;
+
+ Vec_loop (Metric*, metrics->get_items (), index, mitem)
+ {
+ if (mitem->get_subtype () == Metric::STATIC)
+ continue;
+ switch (hi->value[index].tag)
+ {
+ case VT_DOUBLE:
+ if (hi->value[index].d > threshold->value[index].d)
+ mark = true;
+ break;
+ case VT_INT:
+ if (hi->value[index].i > threshold->value[index].i)
+ mark = true;
+ break;
+ case VT_LLONG:
+ if (hi->value[index].ll > threshold->value[index].ll)
+ mark = true;
+ break;
+ case VT_ULLONG:
+ if (hi->value[index].ull > threshold->value[index].ull)
+ mark = true;
+ break;
+ // ignoring the following cases (why?)
+ case VT_SHORT:
+ case VT_FLOAT:
+ case VT_HRTIME:
+ case VT_LABEL:
+ case VT_ADDRESS:
+ case VT_OFFSET:
+ break;
+ }
+ }
+ return mark;
+}
+
+void
+Hist_data::set_threshold (double proportion)
+{
+ int index;
+ Metric *mitem;
+ Vec_loop (Metric*, metrics->get_items (), index, mitem)
+ {
+ TValue *thresh = &threshold->value[index];
+ TValue *mtotal = &total->value[index];
+ thresh->tag = mitem->get_vtype ();
+
+ if (mitem->get_subtype () == Metric::STATIC)
+ continue;
+ switch (thresh->tag)
+ {
+ case VT_INT:
+ thresh->i = (int) (proportion * (double) mtotal->i);
+ break;
+ case VT_DOUBLE:
+ thresh->d = proportion * mtotal->d;
+ break;
+ case VT_LLONG:
+ case VT_ULLONG:
+ thresh->ull = (unsigned long long) (proportion * (double) mtotal->ll);
+ break;
+ case VT_SHORT:
+ case VT_FLOAT:
+ case VT_HRTIME:
+ case VT_LABEL:
+ case VT_ADDRESS:
+ case VT_OFFSET:
+ break;
+ }
+ }
+}
+
+double
+Hist_data::get_percentage (double value, int mindex)
+{
+ double total_value;
+ if (value == 0.0)
+ return 0.0;
+
+ // Get the total value of this sample set.
+ // The value must be greater than 0.
+ total_value = total->value[mindex].to_double ();
+
+ // Find out what percentage of the total value this item is.
+ // Make sure we don't divide by zero.
+ if (total_value == 0.0)
+ return 0.0;
+ return value / total_value;
+}
+
+int
+Hist_data::print_label (FILE *out_file, Metric::HistMetric *hist_metric,
+ int space)
+{
+ int name_offset = 0;
+ StringBuilder sb, sb1, sb2, sb3;
+ if (space > 0)
+ {
+ char *fmt = NTXT ("%*s");
+ sb.appendf (fmt, space, NTXT (""));
+ sb1.appendf (fmt, space, NTXT (""));
+ sb2.appendf (fmt, space, NTXT (""));
+ sb3.appendf (fmt, space, NTXT (""));
+ }
+ for (int i = 0; i < nmetrics; i++)
+ {
+ Metric *m = metrics->get (i);
+ Metric::HistMetric *hm = &hist_metric[i];
+ int len = hm->width;
+ char *fmt = NTXT ("%-*s");
+ if ((i > 0) && (m->get_type () == Metric::ONAME))
+ {
+ name_offset = sb1.length ();
+ fmt = NTXT (" %-*s");
+ len--;
+ }
+ sb.appendf (fmt, len, m->legend ? m->legend : NTXT (""));
+ sb1.appendf (fmt, len, hm->legend1);
+ sb2.appendf (fmt, len, hm->legend2);
+ sb3.appendf (fmt, len, hm->legend3);
+ }
+ sb.trim ();
+ if (sb.length () != 0)
+ {
+ sb.toFileLn (out_file);
+ }
+ sb1.toFileLn (out_file);
+ sb2.toFileLn (out_file);
+ sb3.toFileLn (out_file);
+ return name_offset;
+}
+
+void
+Hist_data::print_content (FILE *out_file, Metric::HistMetric *hist_metric, int limit)
+{
+ StringBuilder sb;
+ int cnt = VecSize (hist_items);
+ if (cnt > limit && limit > 0)
+ cnt = limit;
+ for (int i = 0; i < cnt; i++)
+ {
+ sb.setLength (0);
+ print_row (&sb, i, hist_metric, NTXT (" "));
+ sb.toFileLn (out_file);
+ }
+}
+
+static void
+append_str (StringBuilder *sb, char *s, size_t len, int vis_bits)
+{
+ if ((vis_bits & VAL_RATIO) != 0)
+ {
+ if (*s != 'N') // Nan
+ sb->appendf (NTXT ("x "));
+ else
+ sb->appendf (NTXT (" "));
+ sb->appendf (NTXT ("%*s"), (int) (len - 2), s);
+ }
+ else
+ sb->appendf (NTXT ("%*s"), (int) len, s);
+}
+
+void
+Hist_data::print_row (StringBuilder *sb, int row, Metric::HistMetric *hmp, char *mark)
+{
+ TValue res;
+ char buf[256];
+ // Print only a list of user's metrics. ( nmetrics <= mlist->size() )
+ for (long i = 0; i < nmetrics; i++)
+ {
+ // Print only a list of user's metrics.
+ Metric *m = metrics->get (i);
+ if (!m->is_any_visible ())
+ continue;
+ Metric::HistMetric *hm = hmp + i;
+ int len = sb->length ();
+ if (m->is_tvisible ())
+ {
+ TValue *v = get_value (&res, hist_metrics[i].indTimeVal, row);
+ char *s = v->to_str (buf, sizeof (buf));
+ append_str (sb, s, hm->maxtime_width, m->get_visbits ());
+ }
+ if (m->is_visible ())
+ {
+ TValue *v = get_value (&res, i, row);
+ char *s = v->to_str (buf, sizeof (buf));
+ if (m->get_type () == BaseMetric::ONAME)
+ {
+ sb->append (mark);
+ if (i + 1 == nmetrics)
+ sb->appendf (NTXT ("%s"), s);
+ else
+ sb->appendf (NTXT ("%-*s "), (int) hm->maxvalue_width, s);
+ continue;
+ }
+ else
+ {
+ if (len != sb->length ())
+ sb->append (' ');
+ append_str (sb, s, hm->maxvalue_width, m->get_visbits ());
+ }
+ }
+ if (m->is_pvisible ())
+ {
+ if (len != sb->length ())
+ sb->append (' ');
+ long met_ind = i;
+ if (m->is_tvisible () && !m->is_visible ())
+ met_ind = hist_metrics[i].indTimeVal;
+ TValue *v = get_real_value (&res, met_ind, row);
+ double percent = get_percentage (v->to_double (), met_ind);
+ if (percent == 0.0)
+ // adjust to change format from xx.yy%
+ sb->append (NTXT (" 0. "));
+ else
+ // adjust format below to change format from xx.yy%
+ sb->appendf (NTXT ("%6.2f"), (100.0 * percent));
+ }
+ len = sb->length () - len;
+ if (hm->width > len && i + 1 != nmetrics)
+ sb->appendf (NTXT ("%*s"), (int) (hm->width - len), NTXT (" "));
+ }
+}
+
+TValue *
+Hist_data::get_real_value (TValue *res, int met_index, int row)
+{
+ HistItem *hi = hist_items->get (row);
+ Metric *m = metrics->get (met_index);
+ if (m->get_type () == BaseMetric::ONAME)
+ {
+ res->l = dbe_strdup (hi->obj->get_name ());
+ res->tag = VT_LABEL;
+ return res;
+ }
+ return hi->value + met_index;
+}
+
+TValue *
+Hist_data::get_value (TValue *res, int met_index, int row)
+{
+ HistItem *hi = hist_items->get (row);
+ Metric *m = metrics->get (met_index);
+ if ((m->get_visbits () & (VAL_DELTA | VAL_RATIO)) != 0)
+ {
+ int ind = hist_metrics[met_index].indFirstExp;
+ if ((m->get_visbits () & VAL_DELTA) != 0)
+ res->make_delta (hi->value + met_index, hi->value + ind);
+ else
+ res->make_ratio (hi->value + met_index, hi->value + ind);
+ return res;
+ }
+ return get_real_value (res, met_index, row);
+}
+
+TValue *
+Hist_data::get_value (TValue *res, int met_index, HistItem *hi)
+{
+ Metric *m = metrics->get (met_index);
+ if ((m->get_visbits () & (VAL_DELTA | VAL_RATIO)) != 0)
+ {
+ int ind = hist_metrics[met_index].indFirstExp;
+ if ((m->get_visbits () & VAL_DELTA) != 0)
+ res->make_delta (hi->value + met_index, hi->value + ind);
+ else
+ res->make_ratio (hi->value + met_index, hi->value + ind);
+ return res;
+ }
+ if (m->get_type () == BaseMetric::ONAME)
+ {
+ res->l = dbe_strdup (hi->obj->get_name ());
+ res->tag = VT_LABEL;
+ return res;
+ }
+ return hi->value + met_index;
+}
+
+Metric::HistMetric *
+Hist_data::get_histmetrics ()
+{
+ // find the width for each column.
+ for (long i = 0, sz = metrics->size (); i < sz; i++)
+ {
+ Metric *m = metrics->get (i);
+ Metric::HistMetric *hm = hist_metrics + i;
+ if (m->is_value_visible ())
+ {
+ TValue res;
+ for (long i1 = 0, sz1 = VecSize(hist_items); i1 < sz1; i1++)
+ {
+ TValue *v = get_value (&res, i, i1);
+ long len = v->get_len ();
+ if (hm->maxvalue_width < len)
+ hm->maxvalue_width = len;
+ }
+ if ((m->get_visbits () & VAL_RATIO) != 0)
+ hm->maxvalue_width += 2; // "x "
+ }
+ }
+
+ for (long i = 0, sz = metrics->size (); i < sz; i++)
+ {
+ Metric *m = metrics->get (i);
+ Metric::HistMetric *hm = hist_metrics + i;
+ if (m->is_time_visible ())
+ // take a value from depended metric
+ hm->maxtime_width = hist_metrics[hm->indTimeVal].maxvalue_width;
+ m->legend_width (hm, 2);
+ }
+ return hist_metrics;
+}
+
+void
+Hist_data::update_total (Hist_data::HistItem *new_total)
+{
+ for (long i = 0, sz = metrics->size (); i < sz; i++)
+ total->value[i] = new_total->value[i];
+}
+
+void
+Hist_data::update_max (Metric::HistMetric *hm_tmp)
+{
+ Metric::HistMetric *hms = get_histmetrics ();
+ for (int i = 0; i < nmetrics; i++)
+ {
+ Metric::HistMetric *hm = hms + i;
+ Metric::HistMetric *hm1 = hm_tmp + i;
+ if (hm1->maxtime_width < hm->maxtime_width)
+ hm1->maxtime_width = hm->maxtime_width;
+ if (hm1->maxvalue_width < hm->maxvalue_width)
+ hm1->maxvalue_width = hm->maxvalue_width;
+ }
+}
+
+void
+Hist_data::update_legend_width (Metric::HistMetric *hm_tmp)
+{
+ for (int i = 0; i < nmetrics; i++)
+ {
+ Metric *m = metrics->get (i);
+ m->legend_width (hm_tmp + i, 2);
+ }
+}
+
+void
+Metric::HistMetric::update_max (Metric::HistMetric *hm)
+{
+ if (maxtime_width < hm->maxtime_width)
+ maxtime_width = hm->maxtime_width;
+ if (maxvalue_width < hm->maxvalue_width)
+ maxvalue_width = hm->maxvalue_width;
+}
+
+void
+Metric::HistMetric::init ()
+{
+ width = 0;
+ maxvalue_width = 0;
+ maxtime_width = 0;
+ legend1[0] = 0;
+ legend2[0] = 0;
+ legend3[0] = 0;
+ indFirstExp = -1;
+ indTimeVal = -1;
+}
+
+size_t
+Hist_data::value_maxlen (int mindex)
+{
+ size_t maxlen = maximum->value[mindex].get_len ();
+ size_t minlen = minimum->value[mindex].get_len ();
+ // minlen can be bigger than maxlen only for negative value
+ return minlen > maxlen ? minlen : maxlen;
+}
+
+size_t
+Hist_data::time_len (TValue *value, int clock)
+{
+ TValue tm_value;
+ tm_value.tag = VT_DOUBLE;
+ tm_value.sign = value->sign;
+ tm_value.d = 1.e-6 * value->ll / clock;
+ return tm_value.get_len ();
+}
+
+size_t
+Hist_data::time_maxlen (int mindex, int clock)
+{
+ size_t maxlen = time_len (&(maximum->value[mindex]), clock);
+ size_t minlen = time_len (&(minimum->value[mindex]), clock);
+ // minlen can be bigger than maxlen only for negative value
+ return minlen > maxlen ? minlen : maxlen;
+}
+
+size_t
+Hist_data::name_len (HistItem *item)
+{
+ char *name = item->obj->get_name ();
+ return strlen (name);
+}
+
+size_t
+Hist_data::name_maxlen ()
+{
+ size_t res = 0;
+ for (long i = 0; i < size (); i++)
+ {
+ HistItem *hi = fetch (i);
+ size_t len = name_len (hi);
+ if (res < len)
+ res = len;
+ }
+ return res;
+}
+
+// Returns vector of object ids for the vector of selections
+// returns NULL if no valid selections
+Vector<uint64_t> *
+Hist_data::get_object_indices (Vector<int> *selections)
+{
+ // if no selections, return NULL
+ if (selections == NULL || selections->size () == 0)
+ return NULL;
+
+ Vector<uint64_t> *indices = new Vector<uint64_t>;
+ for (long i = 0, sz = selections->size (); i < sz; i++)
+ {
+ int sel = selections->get (i);
+ HistItem *hi = hist_items->get (sel);
+ if (hi == NULL || hi->obj == NULL)
+ continue;
+ Vector<Histable*> *v = hi->obj->get_comparable_objs ();
+ for (long i1 = 0, sz1 = v ? v->size () : 0; i1 < sz1; i1++)
+ {
+ Histable *h1 = v->get (i1);
+ if (h1 && (indices->find_r (h1->id) < 0))
+ indices->append (h1->id);
+ }
+ if (indices->find_r (hi->obj->id) < 0)
+ indices->append (hi->obj->id);
+ }
+ return indices;
+}
+
+DbeInstr::DbeInstr (uint64_t _id, int _flags, Function *_func, uint64_t _addr)
+{
+ id = _id;
+ flags = _flags;
+ addr = _addr;
+ func = _func;
+ img_offset = addr + func->img_offset;
+ lineno = -1;
+ size = 0;
+ current_name_format = NA;
+ isUsed = false;
+ inlinedInd = -1;
+}
+
+int
+DbeInstr::pc_cmp (DbeInstr *instr2)
+{
+ int result = 0;
+ if (instr2 == NULL)
+ return -1;
+
+ // All PC's with the Line flag go to the
+ // end of the list. See Module::init_index()
+ if (flags & PCLineFlag)
+ {
+ if (instr2->flags & PCLineFlag)
+ {
+ if (addr < instr2->addr)
+ result = -1;
+ else if (addr > instr2->addr)
+ result = 1;
+ else
+ result = 0;
+ }
+ else
+ result = 1;
+ }
+ else if (instr2->flags & PCLineFlag)
+ result = -1;
+ else if (func == instr2->func)
+ {
+ if (size == 0)
+ {
+ if (addr < instr2->addr)
+ result = -1;
+ else if (addr == instr2->addr)
+ result = 0;
+ else if (addr >= instr2->addr + instr2->size)
+ result = 1;
+ else
+ result = 0;
+ }
+ else if (instr2->size == 0)
+ {
+ if (addr > instr2->addr)
+ result = 1;
+ else if (addr + size <= instr2->addr)
+ result = -1;
+ else
+ result = 0;
+ }
+ else if (addr < instr2->addr)
+ result = -1;
+ else if (addr > instr2->addr)
+ result = 1;
+ else
+ result = 0;
+
+ if (result == 0)
+ {
+ if (flags & PCTrgtFlag)
+ {
+ if (!(instr2->flags & PCTrgtFlag))
+ result = -1;
+ }
+ else if (instr2->flags & PCTrgtFlag)
+ result = 1;
+ }
+ }
+ else
+ result = func->func_cmp (instr2->func);
+ return result;
+}
+
+char *
+DbeInstr::get_name (NameFormat nfmt)
+{
+ if (name && (nfmt == current_name_format || nfmt == Histable::NA))
+ return name;
+
+ free (name);
+ name = NULL;
+ current_name_format = nfmt;
+ char *fname = func->get_name (nfmt);
+
+ if (func->flags & FUNC_FLAG_NO_OFFSET)
+ name = dbe_strdup (fname);
+ else if (addr == (uint64_t) - 1
+ && func != dbeSession->get_JUnknown_Function ())
+ // We use three heuristics above to recognize this special case.
+ // Once the original problem with bci == -1 is fixed, we don't
+ // need it any more.
+ name = dbe_sprintf (GTXT ("<Function %s: HotSpot-compiled leaf instructions>"),
+ fname);
+ else if (addr == (uint64_t) - 3)
+ name = dbe_sprintf (GTXT ("%s <Java native method>"), fname);
+ else
+ {
+ char buf[64], *typetag = NTXT (""), *alloc_typetag = NULL;
+ StringBuilder sb;
+ sb.append (fname);
+ if (func != dbeSession->get_JUnknown_Function ())
+ {
+ if (addr <= 0xFFFFFFFFU)
+ snprintf (buf, sizeof (buf), " + 0x%08X", (unsigned int) addr);
+ else
+ snprintf (buf, sizeof (buf), " + 0x%016llX",
+ (unsigned long long) addr);
+ }
+ else
+ {
+ char *subname;
+ switch ((long int) addr)
+ {
+ case -1:
+ subname = GTXT ("agent error");
+ break;
+ case -2:
+ subname = GTXT ("GC active");
+ break;
+ case -3:
+ subname = GTXT ("unknown non-Java frame");
+ break;
+ case -4:
+ subname = GTXT ("unwalkable non-Java frame");
+ break;
+ case -5:
+ subname = GTXT ("unknown Java frame");
+ break;
+ case -6:
+ subname = GTXT ("unwalkable Java frame");
+ break;
+ case -7:
+ subname = GTXT ("unknown thread state");
+ break;
+ case -8:
+ subname = GTXT ("thread in exit");
+ break;
+ case -9:
+ subname = GTXT ("deopt in process ticks");
+ break;
+ case -10:
+ subname = GTXT ("safepoint synchronizing ticks");
+ break;
+ default:
+ subname = GTXT ("unexpected error");
+ break;
+ }
+ snprintf (buf, sizeof (buf), "<%s (%d)>", subname, (int) addr);
+ }
+ sb.append (buf);
+ if (flags & PCTrgtFlag)
+ // annotate synthetic instruction
+ sb.append ('*'); // special distinguishing marker
+
+ DbeLine *dbeline = mapPCtoLine (NULL);
+ char *str = NULL;
+ if (dbeline && dbeline->lineno > 0)
+ str = strrchr (dbeline->get_name (nfmt), ',');
+ if (str)
+ sb.append (str);
+ if (strlen (typetag) > 0)
+ { // include padding for alignment
+ do
+ {
+ sb.append (' ');
+ }
+ while (sb.length () < 40);
+ sb.append (typetag);
+ delete alloc_typetag;
+ }
+ if (inlinedInd >= 0)
+ add_inlined_info (&sb);
+ name = sb.toString ();
+ }
+ return name;
+}
+
+DbeLine*
+DbeInstr::mapPCtoLine (SourceFile *sf)
+{
+ if (inlinedInd == -1)
+ {
+ inlinedInd = -2;
+ for (int i = 0; i < func->inlinedSubrCnt; i++)
+ {
+ InlinedSubr *p = func->inlinedSubr + i;
+ if (p->level == 0)
+ {
+ if (addr < p->low_pc)
+ break;
+ if (p->contains (addr))
+ {
+ inlinedInd = i;
+ break;
+ }
+ }
+ }
+ }
+ if (inlinedInd >= 0)
+ {
+ DbeLine *dl = func->inlinedSubr[inlinedInd].dbeLine;
+ return dl->sourceFile->find_dbeline (func, dl->lineno);
+ }
+ return func->mapPCtoLine (addr, sf);
+}
+
+void
+DbeInstr::add_inlined_info (StringBuilder *sb)
+{
+ do
+ {
+ sb->append (' ');
+ }
+ while (sb->length () < 40);
+ sb->append (NTXT ("<-- "));
+
+ InlinedSubr *last = NULL;
+ for (int i = inlinedInd; i < func->inlinedSubrCnt; i++)
+ {
+ InlinedSubr *p = func->inlinedSubr + i;
+ if (p->level == 0 && i > inlinedInd)
+ break;
+ if (!p->contains (addr))
+ continue;
+ if (last)
+ {
+ if (last->fname)
+ {
+ sb->append (last->fname);
+ sb->append (' ');
+ }
+ DbeLine *dl = p->dbeLine;
+ sb->appendf (NTXT ("%s:%lld <-- "), get_basename (dl->sourceFile->get_name ()), (long long) dl->lineno);
+ }
+ last = p;
+ }
+ if (last)
+ {
+ if (last->fname)
+ {
+ sb->append (last->fname);
+ sb->append (' ');
+ }
+ }
+ DbeLine *dl = func->mapPCtoLine (addr, NULL);
+ sb->appendf ("%s:%lld ", get_basename (dl->sourceFile->get_name ()),
+ (long long) dl->lineno);
+}
+
+char *
+DbeInstr::get_descriptor ()
+{
+ char *typetag = NTXT ("");
+ if ((flags & PCTrgtFlag) == 0) // not synthetic instruction
+ { // use memop descriptor, if available
+ Module *mod = func->module;
+ if (mod->hwcprof && mod->infoList)
+ {
+ long i;
+ inst_info_t *info = NULL;
+ Vec_loop (inst_info_t*, mod->infoList, i, info)
+ {
+ if (info->offset == func->img_offset + addr) break;
+ }
+ if (info)
+ {
+ long t;
+ datatype_t *dtype = NULL;
+ Vec_loop (datatype_t*, mod->datatypes, t, dtype)
+ {
+ if (dtype->datatype_id == info->memop->datatype_id)
+ break;
+ }
+ if (dtype && dtype->dobj)
+ typetag = dtype->dobj->get_name ();
+ }
+ }
+ }
+ return dbe_strdup (typetag);
+}
+
+int64_t
+DbeInstr::get_size ()
+{
+ // Function *func = (Function*)dbeSession->get_hobj( pc );
+ // Module *mod = func ? func->module : NULL;
+ // return mod ? mod->instrSize( func->img_offset + addr ) : 0;
+ return size;
+}
+
+uint64_t
+DbeInstr::get_addr ()
+{
+ return func->get_addr () + addr;
+}
+
+Histable *
+DbeInstr::convertto (Type type, Histable *obj)
+{
+ Histable *res = NULL;
+ SourceFile *source = (SourceFile*) obj;
+ switch (type)
+ {
+ case INSTR:
+ res = this;
+ break;
+ case LINE:
+ res = mapPCtoLine (source);
+ break;
+ case SOURCEFILE:
+ res = mapPCtoLine (source);
+ if (res)
+ res = ((DbeLine*) res)->sourceFile;
+ break;
+ case FUNCTION:
+ res = func;
+ break;
+ default:
+ assert (0);
+ }
+ return res;
+}
+
+char *
+DbeEA::get_name (NameFormat)
+{
+ if (name == NULL)
+ // generate one
+ name = dbe_strdup (dbeSession->localized_SP_UNKNOWN_NAME);
+ return name;
+}
+
+Histable *
+DbeEA::convertto (Type type, Histable *obj)
+{
+ Histable *res = NULL;
+ assert (obj == NULL);
+ switch (type)
+ {
+ case EADDR:
+ res = this;
+ break;
+ case DOBJECT:
+ res = dobj;
+ break;
+ default:
+ assert (0);
+ }
+ return res;
+}
+
+DbeLine::DbeLine (Function *_func, SourceFile *sf, int _lineno)
+{
+ func = _func;
+ lineno = _lineno;
+ sourceFile = sf;
+ id = sf->id + _lineno;
+ offset = 0;
+ size = 0;
+ flags = 0;
+ include = NULL;
+ dbeline_func_next = NULL;
+ dbeline_base = this;
+ current_name_format = Histable::NA;
+}
+
+DbeLine::~DbeLine ()
+{
+ delete dbeline_func_next;
+}
+
+int
+DbeLine::line_cmp (DbeLine *dbl)
+{
+ return lineno - dbl->lineno;
+}
+
+void
+DbeLine::init_Offset (uint64_t p_offset)
+{
+ if (offset == 0)
+ offset = p_offset;
+ if (dbeline_base && dbeline_base->offset == 0)
+ dbeline_base->offset = p_offset;
+}
+
+char *
+DbeLine::get_name (NameFormat nfmt)
+{
+ char *srcname = NULL, *basename, *fname;
+
+ if (func == NULL)
+ {
+ if (name)
+ return name;
+ srcname = sourceFile->get_name ();
+ basename = get_basename (srcname);
+ name = dbe_sprintf (GTXT ("line %u in \"%s\""), lineno, basename);
+ return name;
+ }
+
+ if (name && (nfmt == current_name_format || nfmt == Histable::NA))
+ return name;
+
+ current_name_format = nfmt;
+ free (name);
+ fname = func->get_name (nfmt);
+ if (func->flags & (FUNC_FLAG_SIMULATED | FUNC_FLAG_NO_OFFSET))
+ {
+ name = dbe_strdup (fname);
+ return name;
+ }
+
+ if (sourceFile)
+ srcname = sourceFile->get_name ();
+ if (!srcname || strlen (srcname) == 0)
+ srcname = func->getDefSrcName ();
+ basename = get_basename (srcname);
+
+ if (lineno != 0)
+ {
+ if (sourceFile == func->getDefSrc ())
+ name = dbe_sprintf (GTXT ("%s, line %u in \"%s\""), fname, lineno,
+ basename);
+ else
+ name = dbe_sprintf (GTXT ("%s, line %u in alternate source context \"%s\""),
+ fname, lineno, basename);
+ }
+ else if (sourceFile == NULL || (sourceFile->flags & SOURCE_FLAG_UNKNOWN) != 0)
+ name = dbe_sprintf (GTXT ("<Function: %s, instructions without line numbers>"),
+ fname);
+ else
+ name = dbe_sprintf (GTXT ("<Function: %s, instructions from source file %s>"),
+ fname, basename);
+ return name;
+}
+
+int64_t
+DbeLine::get_size ()
+{
+ return size;
+}
+
+uint64_t
+DbeLine::get_addr ()
+{
+ if (func == NULL && dbeline_func_next == NULL)
+ return (uint64_t) 0;
+ Function *f = func ? func : dbeline_func_next->func;
+ return f->get_addr () + offset;
+}
+
+Histable *
+DbeLine::convertto (Type type, Histable *obj)
+{
+ Histable *res = NULL;
+ switch (type)
+ {
+ case INSTR:
+ {
+ Function *f = (Function *) convertto (FUNCTION, NULL);
+ if (f)
+ res = f->find_dbeinstr (0, offset);
+ break;
+ }
+ case LINE:
+ res = dbeline_base;
+ break;
+ case FUNCTION:
+ if (func)
+ {
+ res = func;
+ break;
+ }
+ else
+ {
+ int not_found = 1;
+ for (DbeLine *dl = dbeline_base; dl; dl = dl->dbeline_func_next)
+ {
+ Function *f = dl->func;
+ not_found = (obj == NULL // XXXX pass dbeview as Histable*
+ || ((DbeView*) obj)->get_path_tree ()->get_func_nodeidx (f) == 0);
+ if (f && f->def_source == sourceFile && (!not_found))
+ {
+ res = f;
+ break;
+ }
+ }
+ if (res == NULL && dbeline_func_next)
+ {
+ for (DbeLine *dl = dbeline_base; dl; dl = dl->dbeline_func_next)
+ {
+ Function *f = dl->func;
+ if (f && f->def_source == sourceFile)
+ {
+ res = f;
+ break;
+ }
+ }
+ }
+ if (res == NULL && dbeline_func_next)
+ res = dbeline_func_next->func;
+ }
+ break;
+ case SOURCEFILE:
+ res = (include) ? include : sourceFile;
+ break;
+ default:
+ assert (0);
+ }
+ return res;
+}
+
+CStack_data::CStack_data (MetricList *_metrics)
+{
+ metrics = _metrics;
+ total = new_cstack_item ();
+ cstack_items = new Vector<CStack_item*>;
+}
+
+CStack_data::CStack_item::CStack_item (long n)
+{
+ stack = NULL;
+ count = 0;
+ val = 0;
+ value = new TValue[n];
+ memset (value, 0, sizeof (TValue) * n);
+}
+
+CStack_data::CStack_item::~CStack_item ()
+{
+ delete stack;
+ delete[] value;
+}
+
+CStack_data::CStack_item *
+CStack_data::new_cstack_item ()
+{
+ int nmetrics = metrics->get_items ()->size ();
+ CStack_item *item = new CStack_item (nmetrics);
+
+ // We precalculate all metrics as integer values
+ // and convert them to appropriate types later.
+ for (int i = 0; i < nmetrics; i++)
+ item->value[i].tag = metrics->get_items ()->fetch (i)->get_vtype ();
+ return item;
+}
+
+HistableFile::HistableFile ()
+{
+ dbeFile = NULL;
+ isUsed = false;
+}
+
+Histable::Histable ()
+{
+ name = NULL;
+ id = 0;
+ comparable_objs = NULL;
+ phaseCompareIdx = -1;
+}
+
+Histable::~Histable ()
+{
+ delete_comparable_objs ();
+ free (name);
+}
+
+void
+Histable::delete_comparable_objs ()
+{
+ if (comparable_objs)
+ {
+ Vector<Histable*> *v = comparable_objs;
+ for (int i = 0; i < v->size (); i++)
+ {
+ Histable *h = v->fetch (i);
+ if (h)
+ {
+ h->comparable_objs = NULL;
+ h->phaseCompareIdx = phaseCompareIdx;
+ }
+ }
+ delete v;
+ }
+}
+
+void
+Histable::update_comparable_objs ()
+{
+ if (phaseCompareIdx != ExpGroup::phaseCompareIdx)
+ {
+ phaseCompareIdx = ExpGroup::phaseCompareIdx;
+ delete_comparable_objs ();
+ }
+}
+
+Vector<Histable*> *
+Histable::get_comparable_objs ()
+{
+ return comparable_objs;
+}
+
+Histable *
+Histable::get_compare_obj ()
+{
+ Vector<Histable*> *v = get_comparable_objs ();
+ for (long i = 0, sz = VecSize (v); i < sz; i++)
+ {
+ Histable *h = v->get (i);
+ if (h)
+ return h;
+ }
+ return this;
+}
+
+#define CASE_S(x) case x: return (char *) #x
+
+char *
+Histable::type_to_string ()
+{
+ switch (get_type ())
+ {
+ CASE_S (INSTR);
+ CASE_S (LINE);
+ CASE_S (FUNCTION);
+ CASE_S (MODULE);
+ CASE_S (LOADOBJECT);
+ CASE_S (EADDR);
+ CASE_S (MEMOBJ);
+ CASE_S (INDEXOBJ);
+ CASE_S (PAGE);
+ CASE_S (DOBJECT);
+ CASE_S (SOURCEFILE);
+ CASE_S (EXPERIMENT);
+ CASE_S (OTHER);
+ default:
+ break;
+ }
+ return NTXT ("ERROR");
+}
+
+void
+Histable::dump_comparable_objs ()
+{
+ Dprintf (DEBUG_COMPARISON,
+ "# Histable::dump_comparable_objs type=%s(%d) 0x%lx id=%lld %s\n",
+ type_to_string (), get_type (), (unsigned long) this, (long long) id,
+ STR (get_name ()));
+ for (int i = 0, sz = comparable_objs ? comparable_objs->size () : 0; i < sz; i++)
+ {
+ Histable *h = comparable_objs->fetch (i);
+ Dprintf (DEBUG_COMPARISON, " %d type=%s(%d) 0x%lx id=%lld %s\n", i,
+ h ? h->type_to_string () : "", h ? h->get_type () : -1,
+ (unsigned long) h, (long long) (h ? h->id : 0),
+ h ? STR (h->get_name ()) : NTXT (""));
+ }
+}
+
+char *
+Histable::dump ()
+{
+ StringBuilder sb;
+ sb.appendf (sizeof (long) == 32
+ ? " 0x%08lx : type=%s(%d) id=%lld %s"
+ : " 0x%016lx : type=%s(%d) id=%lld %s",
+ (unsigned long) this, type_to_string (), get_type (),
+ (long long) id, STR (get_name ()));
+ switch (get_type ())
+ {
+ case INSTR:
+ {
+ DbeInstr *o = (DbeInstr *) this;
+ sb.appendf (sizeof (long) == 32
+ ? " func=0x%08lx lineno=%lld"
+ : " func=0x%016lx lineno=%lld",
+ (unsigned long) o->func, (long long) o->lineno);
+ break;
+ }
+ case LINE:
+ {
+ DbeLine *o = (DbeLine *) this;
+ sb.appendf (sizeof (long) == 32
+ ? " func=0x%08lx sourceFile=0x%08lx lineno=%lld"
+ : " func=0x%016lx sourceFile=0x%016lx lineno=%lld",
+ (unsigned long) o->func, (unsigned long) o->sourceFile,
+ (long long) o->lineno);
+ break;
+ }
+ default:
+ break;
+ }
+ return sb.toString ();
+}
diff --git a/gprofng/src/Hist_data.h b/gprofng/src/Hist_data.h
new file mode 100644
index 00000000000..c5f7281abbf
--- /dev/null
+++ b/gprofng/src/Hist_data.h
@@ -0,0 +1,292 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _HIST_DATA_H
+#define _HIST_DATA_H
+
+// A Hist_data object is used to obtain data used for constructing
+// a histogram display.
+
+#include <sys/types.h>
+
+#include <vec.h>
+#include <Map.h>
+#include <HashMap.h>
+
+#include "dbe_structs.h"
+#include "Histable.h"
+#include "DerivedMetrics.h"
+
+class DbeLine;
+class MetricList;
+
+class Hist_data
+{
+public:
+ friend class DbeView;
+ friend class er_print_histogram;
+ friend class PathTree;
+ friend class DataSpace;
+ friend class MemorySpace;
+ friend class IOActivity;
+ friend class HeapActivity;
+
+ // HistItem contains all the data about a single histogram item.
+ struct HistItem
+ {
+ HistItem (long n);
+ ~HistItem ();
+ Histable *obj; // info on the object
+ int type; // annotated src/dis: type
+ TValue *value; // numeric values
+ long size;
+ };
+
+ enum Hist_status
+ {
+ SUCCESS = 0,
+ NO_DATA
+ };
+
+ enum Mode
+ {
+ ALL,
+ CALLERS,
+ CALLEES,
+ SELF,
+ MODL,
+ LAYOUT,
+ DETAIL
+ };
+
+ enum Sort_order
+ {
+ ASCEND,
+ DESCEND
+ };
+
+ enum Sort_type
+ {
+ ALPHA,
+ VALUE,
+ AUX
+ };
+
+ Hist_data (MetricList *, Histable::Type, Mode, bool _viewowned = false);
+
+ virtual ~Hist_data ();
+ void dump (char *msg, FILE *f);
+
+ Hist_status
+ get_status (void)
+ {
+ return status;
+ }
+
+ // Return the view ownership flag
+ bool
+ isViewOwned (void)
+ {
+ return viewowned;
+ }
+
+ // Return the total number of items
+ long size (void);
+
+ // Append a new HistItem for the specified Histable
+ HistItem *append_hist_item (Histable *obj);
+ void append_hist_item (HistItem *hi);
+ TValue *get_real_value (TValue *res, int met_index, int row);
+ TValue *get_value (TValue *res, int met_index, int row);
+ TValue *get_value (TValue *res, int met_index, HistItem *hi);
+ void print_row (StringBuilder *sb, int row, Metric::HistMetric *hist_metric, char *mark);
+ void print_content (FILE *out_file, Metric::HistMetric *hist_metric, int limit);
+ int print_label (FILE *out_file, Metric::HistMetric *hist_metric, int space);
+ void update_total (Hist_data::HistItem *new_total);
+ void update_max (Metric::HistMetric *hm_tmp);
+ void update_legend_width (Metric::HistMetric *hm_tmp);
+
+ // Find an existing HistItem
+ HistItem *find_hist_item (Histable *obj);
+
+ // sort the data
+ void sort (long ind, bool reverse);
+
+ // resort the data, if metric sort or direction has changed
+ void resort (MetricList *mlist);
+
+ // compute minima and maxima
+ void compute_minmax (void);
+
+ // fetch() takes a hist item index and returns a ptr to the item
+ HistItem *fetch (long index);
+
+ HistItem *
+ get_maximums (void)
+ {
+ return maximum;
+ }
+
+ HistItem *
+ get_maximums_inc (void)
+ {
+ return maximum_inc;
+ }
+
+ HistItem *
+ get_minimums (void)
+ {
+ return minimum;
+ }
+
+ HistItem *
+ get_totals (void)
+ {
+ return total;
+ }
+
+ Vector<HistItem*> *
+ get_hist_items (void)
+ {
+ return hist_items;
+ }
+
+ void
+ set_status (Hist_status st)
+ {
+ status = st;
+ }
+
+ MetricList *
+ get_metric_list (void)
+ {
+ return metrics;
+ }
+
+ Map<Histable*, int> *
+ get_callsite_mark ()
+ {
+ return callsite_mark;
+ }
+
+ Metric::HistMetric *get_histmetrics ();
+ void set_threshold (double proportion);
+ bool above_threshold (HistItem *hi);
+ double get_percentage (double value, int mindex);
+ size_t value_maxlen (int mindex); // Return the drawing length
+ size_t time_len (TValue *value, int clock);
+ size_t time_maxlen (int mindex, int clock);
+ size_t name_len (HistItem *item);
+ size_t name_maxlen ();
+ HistItem *new_hist_item (Histable *obj, int itype, TValue *value);
+ HistItem *update_hist_item (HistItem *hi, TValue *value);
+ Vector<uint64_t> *get_object_indices (Vector<int> *selections);
+
+private:
+
+ Metric::HistMetric *hist_metrics;
+ Vector<HistItem*> *hist_items; // Actual histogram values
+ HashMap<Histable*, HistItem*>*hi_map; // map: Histable -> HistItem
+ Map<Histable*, int>*callsite_mark;
+ Hist_status status;
+ int nmetrics; // number of metrics
+ MetricList *metrics;
+ Histable::Type type;
+ Sort_order sort_order;
+ Sort_type sort_type;
+ int sort_ind;
+ bool rev_sort; // true if sort is reversed
+
+ Mode mode;
+ HistItem *gprof_item; // used for gprof-style info
+ Histable *spontaneous;
+
+ // Private state variables
+ HistItem *maximum;
+ HistItem *minimum;
+ HistItem *maximum_inc;
+ HistItem *total;
+ HistItem *threshold;
+
+ // Perform the sort operation with this function
+ static int sort_compare_all (const void *a, const void *b, const void *arg);
+ static int sort_compare_dlayout (const void *a, const void *b, const void *arg);
+ static int sort_compare (HistItem *hi_1, HistItem *hi_2, Sort_type stype,
+ long ind, Hist_data *hdata);
+
+ // Allocate a new structure of dynamic size
+ HistItem *new_hist_item (Histable *obj);
+
+ // Flag indicating whether or not the Hist_data structure
+ // is owned by a DbeView, which has responsibility for
+ // deleting it, or not, in which case the last user deletes it.
+ // XXX this is very ugly, and arises from the inconsistent handling
+ // XXX of the Hist_data structure in various bits of code.
+ bool viewowned;
+};
+
+// This structure is destined to merge with Hist_data.
+// We currently use it to present callstack data such as
+// leak and allocation lists.
+
+class DbeInstr;
+
+struct CStack_data
+{
+
+ struct CStack_item
+ {
+ CStack_item (long n);
+ ~CStack_item ();
+ long count;
+ int64_t val;
+ Vector<DbeInstr*> *stack;
+ TValue *value; // numeric values
+ };
+
+ Vector<CStack_item*> *cstack_items;
+ CStack_item *total;
+
+ CStack_item *new_cstack_item ();
+ CStack_data (MetricList *);
+
+ long
+ size ()
+ {
+ return cstack_items->size ();
+ }
+
+ CStack_item *
+ fetch (long i)
+ {
+ return cstack_items->fetch (i);
+ }
+
+ ~CStack_data ()
+ {
+ cstack_items->destroy ();
+ delete cstack_items;
+ delete total;
+ }
+
+ MetricList *metrics;
+};
+
+#endif /* _HIST_DATA_H */
diff --git a/gprofng/src/Histable.h b/gprofng/src/Histable.h
new file mode 100644
index 00000000000..c4cf85475c5
--- /dev/null
+++ b/gprofng/src/Histable.h
@@ -0,0 +1,333 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _HISTABLE_H
+#define _HISTABLE_H
+
+//
+// The Histable class hierarchy is used to build up a representation of
+// the codeobjects (functions, modules, loadObjects, etc.) that make up the
+// text address space of a program. The hierarchy is as follows:
+//
+// Histable (public)
+// LoadObject (public)
+// Module (public)
+// Function (public)
+//
+// Dataobjects are objects from the data address space of a program.
+// The reason for calling the base class "Histable" is because these
+// objects are all valid objects for computing histograms on.
+
+// A Histable object represents an object in the program text or data.
+
+#include "dbe_structs.h"
+#include "Emsg.h"
+#include "Expression.h"
+
+class DataObject;
+class Function;
+class SourceFile;
+class DbeFile;
+class DbeLine;
+template <class ITEM> class Vector;
+
+class Histable
+{
+ friend class Hist_data;
+public:
+
+ enum Type
+ {
+ INSTR, LINE, FUNCTION, MODULE, LOADOBJECT,
+ EADDR, MEMOBJ, INDEXOBJ, PAGE, DOBJECT,
+ SOURCEFILE, IOACTFILE, IOACTVFD, IOCALLSTACK,
+ HEAPCALLSTACK, EXPERIMENT, OTHER
+ };
+
+ // NameFormat for functions and function based objects
+
+ enum NameFormat
+ {
+ NA, LONG, SHORT, MANGLED, SONAME = 0x10
+ };
+
+ static NameFormat
+ make_fmt (int fnfmt, bool sofmt = false)
+ {
+ return (NameFormat) (sofmt ? fnfmt | SONAME : fnfmt);
+ }
+
+ static int
+ fname_fmt (NameFormat fmt)
+ {
+ return (fmt & ~SONAME);
+ }
+
+ static bool
+ soname_fmt (NameFormat fmt)
+ {
+ return (fmt & SONAME);
+ }
+
+ Histable ();
+ char *dump ();
+
+ virtual ~Histable ();
+
+ virtual char *
+ get_name (NameFormat = NA)
+ {
+ return name; // Return the name of the object
+ }
+
+ virtual void
+ set_name (char * _name)
+ {
+ name = _name;
+ }
+
+ virtual void set_name_from_context (Expression::Context *) { }
+ virtual Type get_type () = 0;
+
+ virtual int64_t
+ get_size ()
+ {
+ return 0;
+ }
+
+ virtual uint64_t
+ get_addr ()
+ {
+ return 0ULL;
+ }
+
+ virtual Vector<Histable*> *get_comparable_objs ();
+ Histable *get_compare_obj ();
+
+ virtual Histable *
+ convertto (Type, Histable* = NULL)
+ {
+ return this;
+ }
+
+ Vector<Histable*> *comparable_objs;
+ int64_t id; // A unique id of this object, within its specific Type
+
+protected:
+ char *name; // Object name
+ int phaseCompareIdx;
+ void update_comparable_objs ();
+ void dump_comparable_objs ();
+ char *type_to_string ();
+ void delete_comparable_objs ();
+};
+
+typedef Histable::Type Histable_type;
+
+// An Other object represents some random histable object
+class Other : public Histable
+{
+public:
+
+ virtual Type
+ get_type ()
+ {
+ return OTHER;
+ }
+
+ uint64_t value64;
+ uint32_t tag;
+};
+
+// DbeInstr represents an instruction.
+//
+// Used by Analyzer for: Disassembly, PCs, Timeline, and Event tabs.
+//
+class DbeInstr : public Histable
+{
+public:
+ DbeInstr (uint64_t _id, int _flags, Function *_func, uint64_t _addr);
+
+ virtual Type
+ get_type ()
+ {
+ return INSTR;
+ }
+
+ virtual char *get_name (NameFormat = NA);
+ virtual int64_t get_size ();
+ virtual uint64_t get_addr ();
+ virtual Histable *convertto (Type type, Histable *obj = NULL);
+ DbeLine *mapPCtoLine (SourceFile *sf);
+ void add_inlined_info (StringBuilder *sb);
+ char *get_descriptor ();
+ int pc_cmp (DbeInstr *instr2);
+
+ uint64_t addr;
+ uint64_t img_offset; // file offset of the image
+ int flags;
+ Function *func;
+ int lineno;
+ int inlinedInd;
+ int64_t size;
+ bool isUsed;
+
+private:
+ NameFormat current_name_format;
+};
+
+class DbeEA : public Histable
+{
+public:
+
+ DbeEA (DataObject *_dobj, Vaddr _eaddr)
+ {
+ dobj = _dobj;
+ eaddr = _eaddr;
+ };
+
+ virtual Type
+ get_type ()
+ {
+ return EADDR;
+ };
+
+ virtual int64_t
+ get_size ()
+ {
+ return 1;
+ };
+
+ virtual uint64_t
+ get_addr ()
+ {
+ return eaddr;
+ };
+
+ virtual char *get_name (NameFormat = NA);
+ virtual Histable *convertto (Type type, Histable *obj = NULL);
+
+ DataObject *dobj;
+ Vaddr eaddr;
+};
+
+// DbeLine represents a line in a source file.
+//
+// For each top-level DbeLine instance, there are three DbeLine subtypes:
+//
+// A The top-level DbeLine is associated with a sourceFile & lineno, but
+// not any particular function. This form of DbeLine is used
+// to represent Analyzer Source tab lines.
+//
+// B Function-specific lines, those associated with a function in addition
+// to the the sourceFile & lineno, are stored in a linked list.
+// (see "dbeline_func_next").
+// This subtype is used to differentiate a line found in #included source
+// that is referenced by multiple functions.
+// It is used in the Analyzer Lines tab.
+//
+// C Function-specific "lines" that don't have line number info are referenced
+// from each linked-list element's "dbeline_func_pseudo" field.
+// This subtype is needed when a binary doesn't identify line numbers.
+// It is used in the Analyzer Lines tab.
+//
+// When the user switches views between tabs, a selected object in the old
+// tab must be translated to an approprate object in the new tab.
+// When switching to the Source Tab, the top-level DbeLine (dbeline_base)
+// should be used.
+// When switching to the Lines Tab, a function-specific dbeline_func_*
+// should be used.
+//
+
+class DbeLine : public Histable
+{
+public:
+
+ enum Flag
+ {
+ OMPPRAGMA = 1
+ };
+
+ DbeLine (Function *_func, SourceFile *sf, int _lineno);
+ virtual ~DbeLine ();
+ virtual char *get_name (NameFormat = NA);
+ virtual int64_t get_size ();
+ virtual uint64_t get_addr ();
+ virtual Histable *convertto (Type type, Histable *obj = NULL);
+
+ void init_Offset (uint64_t p_offset);
+ int line_cmp (DbeLine *dbl);
+
+ virtual Type
+ get_type ()
+ {
+ return LINE;
+ }
+
+ void
+ set_flag (Flag flag)
+ {
+ flags |= flag;
+ }
+
+ bool
+ is_set (Flag flag)
+ {
+ return (flags & flag) != 0;
+ }
+
+ Function *func; // note: will be NULL in the base (head) dbeline
+ int lineno;
+ int64_t size;
+ SourceFile *sourceFile; // Default source file
+ SourceFile *include; // included source file or NULL
+
+ DbeLine *dbeline_base;
+ // Head of list, a dbeline associated with sourceFile & lineno, but not func:
+ // dbeline_base->lineno: non-zero
+ // dbeline_base->sourceFile: non-null
+ // dbeline_base->func: NULL
+ // dbeline_base->dbeline_base: this
+ // dbeline_base->dbeline_func_next: first func-specific dbeline
+
+ DbeLine *dbeline_func_next;
+ // If non-null, pointer to a function-specific dbeline where:
+ // dbeline_func_next->lineno: same as dbeline_base->lineno
+ // dbeline_func_next->sourceFile: same as dbeline_base->sourceFile
+ // dbeline_func_next->func: pointer to unique function
+ // dbeline_func_next->dbeline_base: head of the linked list.
+ // dbeline_func_next->dbeline_func_next: next function-specific dbeline.
+
+private:
+ int current_name_format;
+ int64_t offset;
+ int flags;
+};
+
+class HistableFile : public Histable, public DbeMessages
+{
+public:
+ HistableFile ();
+
+ bool isUsed;
+ DbeFile *dbeFile;
+};
+
+#endif /* _HISTABLE_H */
diff --git a/gprofng/src/IOActivity.cc b/gprofng/src/IOActivity.cc
new file mode 100644
index 00000000000..401cab5b39e
--- /dev/null
+++ b/gprofng/src/IOActivity.cc
@@ -0,0 +1,825 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include "DbeSession.h"
+#include "FileData.h"
+#include "StringBuilder.h"
+#include "i18n.h"
+#include "util.h"
+#include "IOActivity.h"
+#include "MetricList.h"
+#include "Application.h"
+#include "Experiment.h"
+#include "DbeView.h"
+#include "Exp_Layout.h"
+#include "i18n.h"
+
+IOActivity::IOActivity (DbeView *_dbev)
+{
+ dbev = _dbev;
+ fDataHash = NULL;
+ fDataTotal = NULL;
+ fDataObjs = NULL;
+ fDataObjsFile = NULL;
+ hasFile = false;
+ fDataObjsVfd = NULL;
+ hasVfd = false;
+ fDataObjsCallStack = NULL;
+ hasCallStack = false;
+ fDataCalStkMap = NULL;
+ fDataVfdMap = NULL;
+ hist_data_file_all = NULL;
+ hist_data_vfd_all = NULL;
+ hist_data_callstack_all = NULL;
+}
+
+void
+IOActivity::reset ()
+{
+ int numExps = dbeSession->nexps ();
+ FileData *fData = NULL;
+ DefaultMap<int64_t, FileData*>* fDataMap;
+ for (int k = 0; k < numExps; k++)
+ {
+ Experiment *exp = dbeSession->get_exp (k);
+ fDataMap = exp->getFDataMap ();
+ if (fDataMap == NULL)
+ continue;
+
+ fDataObjs = fDataMap->values ();
+ if (fDataObjs == NULL)
+ continue;
+ int numFiles = fDataObjs->size ();
+ for (int j = 0; j < numFiles; j++)
+ {
+ fData = fDataObjs->fetch (j);
+ fData->init ();
+ }
+ }
+
+ delete fDataHash;
+ fDataHash = NULL;
+ delete fDataTotal;
+ fDataTotal = NULL;
+
+ delete fDataObjsFile;
+ fDataObjsFile = NULL;
+ hasFile = false;
+
+ delete fDataObjsVfd;
+ fDataObjsVfd = NULL;
+ hasVfd = false;
+
+ delete fDataObjsCallStack;
+ fDataObjsCallStack = NULL;
+ hasCallStack = false;
+
+ delete fDataObjs;
+ fDataObjs = NULL;
+ delete fDataCalStkMap;
+ fDataCalStkMap = NULL;
+ delete fDataVfdMap;
+ fDataVfdMap = NULL;
+
+ // These three pointers are deleted by DbeView
+ // They are named iofile_data, iovfd_data, and iocs_data
+ hist_data_file_all = NULL;
+ hist_data_vfd_all = NULL;
+ hist_data_callstack_all = NULL;
+}
+
+void
+IOActivity::createHistItemTotals (Hist_data *hist_data, MetricList *mlist,
+ Histable::Type hType, bool empty)
+{
+ int mIndex;
+ Metric *mtr;
+ Hist_data::HistItem *hi;
+ FileData *fData = NULL;
+
+ if (fDataTotal == NULL)
+ {
+ fDataTotal = new FileData (TOTAL_FILENAME);
+ fDataTotal->setHistType (hType);
+ fDataTotal->setVirtualFd (VIRTUAL_FD_TOTAL);
+ fDataTotal->id = 0;
+ }
+
+ fData = new FileData (fDataTotal);
+ fData->setHistType (hType);
+ hi = hist_data->append_hist_item (fData);
+ Vec_loop (Metric *, mlist->get_items (), mIndex, mtr)
+ {
+ if (!mtr->is_visible () && !mtr->is_tvisible () && !mtr->is_pvisible ())
+ continue;
+
+ Metric::Type mtype = mtr->get_type ();
+ ValueTag vType = mtr->get_vtype ();
+ hist_data->total->value[mIndex].tag = vType;
+ hi->value[mIndex].tag = vType;
+ double prec = (double) NANOSEC;
+ switch (mtype)
+ {
+ case BaseMetric::IO_READ_BYTES:
+ if (!empty)
+ {
+ hist_data->total->value[mIndex].ll = fDataTotal->getReadBytes ();
+ hi->value[mIndex].ll = fDataTotal->getReadBytes ();
+ }
+ else
+ {
+ hist_data->total->value[mIndex].ll = 0;
+ hi->value[mIndex].ll = 0;
+ }
+ break;
+ case BaseMetric::IO_READ_CNT:
+ if (!empty)
+ {
+ hist_data->total->value[mIndex].ll = fDataTotal->getReadCnt ();
+ hi->value[mIndex].ll = fDataTotal->getReadCnt ();
+ }
+ else
+ {
+ hist_data->total->value[mIndex].ll = 0;
+ hi->value[mIndex].ll = 0;
+ }
+ break;
+ case BaseMetric::IO_READ_TIME:
+ if (!empty)
+ {
+ hist_data->total->value[mIndex].d =
+ (double) fDataTotal->getReadTime () / prec;
+ hi->value[mIndex].d = hist_data->total->value[mIndex].d;
+ }
+ else
+ {
+ hist_data->total->value[mIndex].d = 0.0;
+ hi->value[mIndex].d = 0.0;
+ }
+ break;
+ case BaseMetric::IO_WRITE_BYTES:
+ if (!empty)
+ {
+ hist_data->total->value[mIndex].ll = fDataTotal->getWriteBytes ();
+ hi->value[mIndex].ll = fDataTotal->getWriteBytes ();
+ }
+ else
+ {
+ hist_data->total->value[mIndex].ll = 0;
+ hi->value[mIndex].ll = 0;
+ }
+ break;
+ case BaseMetric::IO_WRITE_CNT:
+ if (!empty)
+ {
+ hist_data->total->value[mIndex].ll = fDataTotal->getWriteCnt ();
+ hi->value[mIndex].ll = fDataTotal->getWriteCnt ();
+ }
+ else
+ {
+ hist_data->total->value[mIndex].ll = 0;
+ hi->value[mIndex].ll = 0;
+ }
+ break;
+ case BaseMetric::IO_WRITE_TIME:
+ if (!empty)
+ {
+ hist_data->total->value[mIndex].d =
+ (double) fDataTotal->getWriteTime () / prec;
+ hi->value[mIndex].d = hist_data->total->value[mIndex].d;
+ }
+ else
+ {
+ hist_data->total->value[mIndex].d = 0.0;
+ hi->value[mIndex].d = 0.0;
+ }
+ break;
+ case BaseMetric::IO_OTHER_CNT:
+ if (!empty)
+ {
+ hist_data->total->value[mIndex].ll = fDataTotal->getOtherCnt ();
+ hi->value[mIndex].ll = fDataTotal->getOtherCnt ();
+ }
+ else
+ {
+ hist_data->total->value[mIndex].ll = 0;
+ hi->value[mIndex].ll = 0;
+ }
+ break;
+ case BaseMetric::IO_OTHER_TIME:
+ if (!empty)
+ {
+ hist_data->total->value[mIndex].d =
+ (double) fDataTotal->getOtherTime () / prec;
+ hi->value[mIndex].d = hist_data->total->value[mIndex].d;
+ }
+ else
+ {
+ hist_data->total->value[mIndex].d = 0.0;
+ hi->value[mIndex].d = 0.0;
+ }
+ break;
+ case BaseMetric::IO_ERROR_CNT:
+ if (!empty)
+ {
+ hist_data->total->value[mIndex].ll = fDataTotal->getErrorCnt ();
+ hi->value[mIndex].ll = fDataTotal->getErrorCnt ();
+ }
+ else
+ {
+ hist_data->total->value[mIndex].ll = 0;
+ hi->value[mIndex].ll = 0;
+ }
+ break;
+ case BaseMetric::IO_ERROR_TIME:
+ if (!empty)
+ {
+ hist_data->total->value[mIndex].d = (double) fDataTotal->getErrorTime () / prec;
+ hi->value[mIndex].d = hist_data->total->value[mIndex].d;
+ }
+ else
+ {
+ hist_data->total->value[mIndex].d = 0.0;
+ hi->value[mIndex].d = 0.0;
+ }
+ break;
+ default:
+ break;
+ }
+ }
+}
+
+void
+IOActivity::computeHistTotals (Hist_data *hist_data, MetricList *mlist)
+{
+ int mIndex;
+ Metric *mtr;
+ Vec_loop (Metric *, mlist->get_items (), mIndex, mtr)
+ {
+ if (!mtr->is_visible () && !mtr->is_tvisible () && !mtr->is_pvisible ())
+ continue;
+
+ Metric::Type mtype = mtr->get_type ();
+ ValueTag vType = mtr->get_vtype ();
+ hist_data->total->value[mIndex].tag = vType;
+ double prec = (double) NANOSEC;
+ switch (mtype)
+ {
+ case BaseMetric::IO_READ_BYTES:
+ hist_data->total->value[mIndex].ll = fDataTotal->getReadBytes ();
+ break;
+ case BaseMetric::IO_READ_CNT:
+ hist_data->total->value[mIndex].ll = fDataTotal->getReadCnt ();
+ break;
+ case BaseMetric::IO_READ_TIME:
+ hist_data->total->value[mIndex].d =
+ (double) fDataTotal->getReadTime () / prec;
+ break;
+ case BaseMetric::IO_WRITE_BYTES:
+ hist_data->total->value[mIndex].ll = fDataTotal->getWriteBytes ();
+ break;
+ case BaseMetric::IO_WRITE_CNT:
+ hist_data->total->value[mIndex].ll = fDataTotal->getWriteCnt ();
+ break;
+ case BaseMetric::IO_WRITE_TIME:
+ hist_data->total->value[mIndex].d =
+ (double) fDataTotal->getWriteTime () / prec;
+ break;
+ case BaseMetric::IO_OTHER_CNT:
+ hist_data->total->value[mIndex].ll = fDataTotal->getOtherCnt ();
+ break;
+ case BaseMetric::IO_OTHER_TIME:
+ hist_data->total->value[mIndex].d =
+ (double) fDataTotal->getOtherTime () / prec;
+ break;
+ case BaseMetric::IO_ERROR_CNT:
+ hist_data->total->value[mIndex].ll = fDataTotal->getErrorCnt ();
+ break;
+ case BaseMetric::IO_ERROR_TIME:
+ hist_data->total->value[mIndex].d =
+ (double) fDataTotal->getErrorTime () / prec;
+ break;
+ default:
+ break;
+ }
+ }
+}
+
+void
+IOActivity::computeHistData (Hist_data *hist_data, MetricList *mlist,
+ Hist_data::Mode mode, Histable *selObj)
+{
+
+ Hist_data::HistItem *hi = NULL;
+ int numObjs = fDataObjs->size ();
+ int numMetrics = mlist->get_items ()->size ();
+
+ for (int i = 0; i < numObjs; i++)
+ {
+ FileData *fData = fDataObjs->fetch (i);
+ if (mode == Hist_data::ALL)
+ hi = hist_data->append_hist_item (fData);
+ else if (mode == Hist_data::SELF)
+ {
+ if (fData->id == selObj->id)
+ hi = hist_data->append_hist_item (fData);
+ else
+ continue;
+ }
+
+ for (int mIndex = 0; mIndex < numMetrics; mIndex++)
+ {
+ Metric *mtr = mlist->get_items ()->fetch (mIndex);
+ if (!mtr->is_visible () && !mtr->is_tvisible ()
+ && !mtr->is_pvisible ())
+ continue;
+
+ Metric::Type mtype = mtr->get_type ();
+ ValueTag vType = mtr->get_vtype ();
+ hi->value[mIndex].tag = vType;
+
+ double prec = (double) NANOSEC;
+ switch (mtype)
+ {
+ case BaseMetric::IO_READ_BYTES:
+ hi->value[mIndex].ll = fData->getReadBytes ();
+ break;
+ case BaseMetric::IO_READ_CNT:
+ hi->value[mIndex].ll = fData->getReadCnt ();
+ break;
+ case BaseMetric::IO_READ_TIME:
+ hi->value[mIndex].d = (double) fData->getReadTime () / prec;
+ break;
+ case BaseMetric::IO_WRITE_BYTES:
+ hi->value[mIndex].ll = fData->getWriteBytes ();
+ break;
+ case BaseMetric::IO_WRITE_CNT:
+ hi->value[mIndex].ll = fData->getWriteCnt ();
+ break;
+ case BaseMetric::IO_WRITE_TIME:
+ hi->value[mIndex].d = (double) fData->getWriteTime () / prec;
+ break;
+ case BaseMetric::IO_OTHER_CNT:
+ hi->value[mIndex].ll = fData->getOtherCnt ();
+ break;
+ case BaseMetric::IO_OTHER_TIME:
+ hi->value[mIndex].d = (double) fData->getOtherTime () / prec;
+ break;
+ case BaseMetric::IO_ERROR_CNT:
+ hi->value[mIndex].ll = fData->getErrorCnt ();
+ break;
+ case BaseMetric::IO_ERROR_TIME:
+ hi->value[mIndex].d = (double) fData->getErrorTime () / prec;
+ break;
+ default:
+ break;
+ }
+ }
+ }
+}
+
+Hist_data *
+IOActivity::compute_metrics (MetricList *mlist, Histable::Type type,
+ Hist_data::Mode mode, Histable *selObj)
+{
+
+ // it's already there, just return it
+ if (mode == Hist_data::ALL)
+ {
+ if (type == Histable::IOACTFILE && hist_data_file_all)
+ return hist_data_file_all;
+ else if (type == Histable::IOACTVFD && hist_data_vfd_all)
+ return hist_data_vfd_all;
+ else if (type == Histable::IOCALLSTACK && hist_data_callstack_all)
+ return hist_data_callstack_all;
+ }
+
+ bool has_data = false;
+ Hist_data *hist_data = NULL;
+ VMode viewMode = dbev->get_view_mode ();
+
+ switch (type)
+ {
+ case Histable::IOACTVFD:
+ if (!hasVfd)
+ computeData (type);
+
+ // computeData() creates fDataObjsVfd
+ // fDataObjsVfd contains the list of vfd objects
+ if (fDataObjsVfd != NULL)
+ {
+ // fDataObjs is used in other methods
+ fDataObjs = fDataObjsVfd;
+ has_data = true;
+ }
+ else
+ has_data = false;
+
+ if (has_data && mode == Hist_data::ALL && hist_data_vfd_all == NULL)
+ {
+ hist_data_vfd_all = new Hist_data (mlist, type, mode, true);
+ hist_data = hist_data_vfd_all;
+ }
+ else if (has_data)
+ hist_data = new Hist_data (mlist, type, mode, false);
+ else
+ {
+ hist_data = new Hist_data (mlist, type, mode, false);
+ createHistItemTotals (hist_data, mlist, type, true);
+ return hist_data;
+ }
+ break;
+ case Histable::IOACTFILE:
+ if (!hasFile)
+ computeData (type);
+
+ // computeData() creates fDataObjsFile
+ // fDataObjsFile contains the list of file objects
+ if (fDataObjsFile != NULL)
+ {
+ fDataObjs = fDataObjsFile;
+ has_data = true;
+ }
+ else
+ has_data = false;
+
+ if (has_data && mode == Hist_data::ALL && hist_data_file_all == NULL)
+ {
+ hist_data_file_all = new Hist_data (mlist, type, mode, true);
+ hist_data = hist_data_file_all;
+ }
+ else if (has_data)
+ hist_data = new Hist_data (mlist, type, mode, false);
+ else
+ {
+ hist_data = new Hist_data (mlist, type, mode, false);
+ createHistItemTotals (hist_data, mlist, type, true);
+ return hist_data;
+ }
+ break;
+ case Histable::IOCALLSTACK:
+ if (!hasCallStack)
+ computeCallStack (type, viewMode);
+
+ // computeCallStack() creates fDataObjsCallStack
+ // fDataObjsCallStack contains the list of call stack objects
+ if (fDataObjsCallStack != NULL)
+ {
+ fDataObjs = fDataObjsCallStack;
+ has_data = true;
+ }
+ else
+ has_data = false;
+
+ if (has_data && (mode == Hist_data::ALL) && (hist_data_callstack_all == NULL))
+ {
+ hist_data_callstack_all = new Hist_data (mlist, type, mode, true);
+ hist_data = hist_data_callstack_all;
+ }
+ else if (has_data)
+ hist_data = new Hist_data (mlist, type, mode, false);
+ else
+ {
+ hist_data = new Hist_data (mlist, type, mode, false);
+ createHistItemTotals (hist_data, mlist, type, true);
+ return hist_data;
+ }
+ break;
+ default:
+ fprintf (stderr,
+ "IOActivity cannot process data due to wrong Histable (type=%d) \n",
+ type);
+ abort ();
+ }
+
+ if (mode == Hist_data::ALL || (mode == Hist_data::SELF && selObj->id == 0))
+ createHistItemTotals (hist_data, mlist, type, false);
+ else
+ computeHistTotals (hist_data, mlist);
+ computeHistData (hist_data, mlist, mode, selObj);
+
+ // Determine by which metric to sort if any
+ bool rev_sort = mlist->get_sort_rev ();
+ int sort_ind = -1;
+ int nmetrics = mlist->get_items ()->size ();
+ for (int mind = 0; mind < nmetrics; mind++)
+ if (mlist->get_sort_ref_index () == mind)
+ sort_ind = mind;
+
+ hist_data->sort (sort_ind, rev_sort);
+ hist_data->compute_minmax ();
+ return hist_data;
+}
+
+void
+IOActivity::computeData (Histable::Type type)
+{
+ bool has_iodata = false;
+ reset ();
+ int64_t histableId = 0; // It is used by fDataAggr only
+ // fData uses vfd for histable id
+
+ fDataHash = new HashMap<char*, FileData*>;
+ FileData *fData = NULL;
+ FileData *fDataAggr = NULL;
+
+ fDataTotal = new FileData (TOTAL_FILENAME);
+ fDataTotal->setHistType (type);
+ fDataTotal->setVirtualFd (VIRTUAL_FD_TOTAL);
+ fDataTotal->id = histableId++;
+
+ FileData *fDataStdin = new FileData (STDIN_FILENAME);
+ fDataStdin->setFileDes (STDIN_FD);
+ fDataStdin->setHistType (type);
+ fDataStdin->setFsType ("N/A");
+ fDataStdin->id = histableId++;
+
+ FileData *fDataStdout = new FileData (STDOUT_FILENAME);
+ fDataStdout->setFileDes (STDOUT_FD);
+ fDataStdout->setHistType (type);
+ fDataStdout->setFsType ("N/A");
+ fDataStdout->id = histableId++;
+
+ FileData *fDataStderr = new FileData (STDERR_FILENAME);
+ fDataStderr->setFileDes (STDERR_FD);
+ fDataStderr->setHistType (type);
+ fDataStderr->setFsType ("N/A");
+ fDataStderr->id = histableId++;
+
+ FileData *fDataOtherIO = new FileData (OTHERIO_FILENAME);
+ fDataOtherIO->setFileDes (OTHERIO_FD);
+ fDataOtherIO->setHistType (type);
+ fDataOtherIO->setFsType ("N/A");
+ fDataOtherIO->id = histableId++;
+
+ DefaultMap<int64_t, FileData*>* fDataMap;
+ fDataObjsFile = NULL;
+ fDataObjsVfd = NULL;
+
+ // get the list of io events from DbeView
+ int numExps = dbeSession->nexps ();
+
+ for (int k = 0; k < numExps; k++)
+ {
+ DataView *ioPkts = dbev->get_filtered_events (k, DATA_IOTRACE);
+ if (ioPkts == NULL || ioPkts->getSize () <= 0)
+ continue;
+ Experiment *exp = dbeSession->get_exp (k);
+ fDataMap = exp->getFDataMap ();
+ if (fDataMap == NULL)
+ continue;
+ delete fDataVfdMap;
+ fDataVfdMap = new DefaultMap<long, FileData*>;
+
+ long sz = ioPkts->getSize ();
+ for (long i = 0; i < sz; ++i)
+ {
+ hrtime_t event_duration = ioPkts->getLongValue (PROP_EVT_TIME, i);
+ int64_t nByte = ioPkts->getLongValue (PROP_IONBYTE, i);
+ IOTrace_type ioType = (IOTrace_type) ioPkts->getIntValue (PROP_IOTYPE, i);
+ int64_t vFd = ioPkts->getLongValue (PROP_IOVFD, i);
+ if (vFd >= 0)
+ {
+ fData = fDataMap->get (vFd);
+ if (fData == NULL)
+ continue;
+ }
+ else
+ continue;
+
+ if (fDataVfdMap->get (vFd) == NULL)
+ fDataVfdMap->put (vFd, fData);
+
+ switch (ioType)
+ {
+ case READ_TRACE:
+ fData->addReadEvent (event_duration, nByte);
+ // Set the Histable id for IOVFD
+ fData->id = fData->getVirtualFd ();
+ fDataTotal->addReadEvent (event_duration, nByte);
+ fDataTotal->setReadStat (event_duration, nByte);
+ break;
+ case WRITE_TRACE:
+ fData->addWriteEvent (event_duration, nByte);
+ // Set the Histable id for IOVFD
+ fData->id = fData->getVirtualFd ();
+ fDataTotal->addWriteEvent (event_duration, nByte);
+ fDataTotal->setWriteStat (event_duration, nByte);
+ break;
+ case OPEN_TRACE:
+ fData->addOtherEvent (event_duration);
+ // Set the Histable id for IOVFD
+ fData->id = fData->getVirtualFd ();
+ fDataTotal->addOtherEvent (event_duration);
+ break;
+ case CLOSE_TRACE:
+ case OTHERIO_TRACE:
+ fData->addOtherEvent (event_duration);
+ // Set the Histable id for IOVFD
+ fData->id = fData->getVirtualFd ();
+ fDataTotal->addOtherEvent (event_duration);
+ break;
+ case READ_TRACE_ERROR:
+ case WRITE_TRACE_ERROR:
+ case OPEN_TRACE_ERROR:
+ case CLOSE_TRACE_ERROR:
+ case OTHERIO_TRACE_ERROR:
+ fData->addErrorEvent (event_duration);
+ // Set the Histable id for IOVFD
+ fData->id = fData->getVirtualFd ();
+ fDataTotal->addErrorEvent (event_duration);
+ break;
+
+ case IOTRACETYPE_LAST:
+ break;
+ }
+
+ if (type == Histable::IOACTFILE)
+ {
+ fDataAggr = fDataHash->get (fData->getFileName ());
+ if (fDataAggr == NULL)
+ {
+ bool setInfo = false;
+ if (vFd == VIRTUAL_FD_STDIN)
+ fDataAggr = fDataStdin;
+ else if (vFd == VIRTUAL_FD_STDOUT)
+ fDataAggr = fDataStdout;
+ else if (vFd == VIRTUAL_FD_STDERR)
+ fDataAggr = fDataStderr;
+ else if (vFd == VIRTUAL_FD_OTHERIO)
+ fDataAggr = fDataOtherIO;
+ else
+ {
+ fDataAggr = new FileData (fData->getFileName ());
+ setInfo = true;
+ }
+ fDataHash->put (fData->getFileName (), fDataAggr);
+
+ if (setInfo)
+ {
+ fDataAggr->setFsType (fData->getFsType ());
+ fDataAggr->setHistType (type);
+ // Set the Histable id for aggregated file name
+ fDataAggr->id = histableId;
+ fDataAggr->setVirtualFd (histableId);
+ histableId++;
+ }
+ }
+
+ fDataAggr->setFileDesList (fData->getFileDes ());
+ fDataAggr->setVirtualFds (fData->getVirtualFd ());
+ switch (ioType)
+ {
+ case READ_TRACE:
+ fDataAggr->addReadEvent (event_duration, nByte);
+ break;
+ case WRITE_TRACE:
+ fDataAggr->addWriteEvent (event_duration, nByte);
+ break;
+ case OPEN_TRACE:
+ fDataAggr->addOtherEvent (event_duration);
+ break;
+ case CLOSE_TRACE:
+ case OTHERIO_TRACE:
+ fDataAggr->addOtherEvent (event_duration);
+ break;
+ case READ_TRACE_ERROR:
+ case WRITE_TRACE_ERROR:
+ case OPEN_TRACE_ERROR:
+ case CLOSE_TRACE_ERROR:
+ case OTHERIO_TRACE_ERROR:
+ fDataAggr->addErrorEvent (event_duration);
+ break;
+ case IOTRACETYPE_LAST:
+ break;
+ }
+ }
+ has_iodata = true;
+ }
+ if (sz > 0)
+ {
+ if (fDataObjsVfd == NULL)
+ fDataObjsVfd = new Vector<FileData*>;
+ fDataObjsVfd->addAll (fDataVfdMap->values ());
+ hasVfd = true;
+ }
+ }
+ if (has_iodata && type == Histable::IOACTFILE)
+ {
+ fDataObjsFile = fDataHash->values ()->copy ();
+ hasFile = true;
+ }
+}
+
+void
+IOActivity::computeCallStack (Histable::Type type, VMode viewMode)
+{
+ bool has_data = false;
+ int64_t stackIndex = 0;
+ FileData *fData = NULL;
+ delete fDataCalStkMap;
+ fDataCalStkMap = new DefaultMap<void*, FileData*>;
+ delete fDataTotal;
+ fDataTotal = new FileData (TOTAL_FILENAME);
+ fDataTotal->setHistType (type);
+
+ // There is no call stack for total, use the index for id
+ fDataTotal->id = stackIndex++;
+
+ // get the list of io events from DbeView
+ int numExps = dbeSession->nexps ();
+ for (int k = 0; k < numExps; k++)
+ {
+ DataView *ioPkts = dbev->get_filtered_events (k, DATA_IOTRACE);
+ if (ioPkts == NULL || ioPkts->getSize () <= 0)
+ continue;
+ long sz = ioPkts->getSize ();
+ for (long i = 0; i < sz; ++i)
+ {
+ hrtime_t event_duration = ioPkts->getLongValue (PROP_EVT_TIME, i);
+ int64_t nByte = ioPkts->getLongValue (PROP_IONBYTE, i);
+ void *stackId = getStack (viewMode, ioPkts, i);
+ IOTrace_type ioType =
+ (IOTrace_type) ioPkts->getIntValue (PROP_IOTYPE, i);
+ int64_t vFd = ioPkts->getLongValue (PROP_IOVFD, i);
+
+ if (stackId != NULL && vFd > 0)
+ {
+ fData = fDataCalStkMap->get (stackId);
+ if (fData == NULL)
+ {
+ char *stkName = dbe_sprintf (GTXT ("Stack 0x%llx"),
+ (unsigned long long) stackId);
+ fData = new FileData (stkName);
+ fDataCalStkMap->put (stackId, fData);
+ fData->id = (int64_t) stackId;
+ fData->setVirtualFd (stackIndex);
+ stackIndex++;
+ fData->setHistType (type);
+ }
+ }
+ else
+ continue;
+
+ switch (ioType)
+ {
+ case READ_TRACE:
+ fData->addReadEvent (event_duration, nByte);
+ fDataTotal->addReadEvent (event_duration, nByte);
+ fDataTotal->setReadStat (event_duration, nByte);
+ break;
+ case WRITE_TRACE:
+ fData->addWriteEvent (event_duration, nByte);
+ fDataTotal->addWriteEvent (event_duration, nByte);
+ fDataTotal->setWriteStat (event_duration, nByte);
+ break;
+ case OPEN_TRACE:
+ fData->addOtherEvent (event_duration);
+ fDataTotal->addOtherEvent (event_duration);
+ break;
+ case CLOSE_TRACE:
+ case OTHERIO_TRACE:
+ fData->addOtherEvent (event_duration);
+ fDataTotal->addOtherEvent (event_duration);
+ break;
+ case READ_TRACE_ERROR:
+ case WRITE_TRACE_ERROR:
+ case OPEN_TRACE_ERROR:
+ fData->addErrorEvent (event_duration);
+ fDataTotal->addErrorEvent (event_duration);
+ break;
+ case CLOSE_TRACE_ERROR:
+ case OTHERIO_TRACE_ERROR:
+ fData->addErrorEvent (event_duration);
+ fDataTotal->addErrorEvent (event_duration);
+ break;
+ case IOTRACETYPE_LAST:
+ break;
+ }
+ has_data = true;
+ }
+ }
+ if (has_data)
+ {
+ fDataObjsCallStack = fDataCalStkMap->values ()->copy ();
+ hasCallStack = true;
+ }
+}
diff --git a/gprofng/src/IOActivity.h b/gprofng/src/IOActivity.h
new file mode 100644
index 00000000000..35c4517d07b
--- /dev/null
+++ b/gprofng/src/IOActivity.h
@@ -0,0 +1,86 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _IOACTIVITY_H
+#define _IOACTIVITY_H
+
+
+#include <stdio.h>
+
+#include "vec.h"
+#include "Histable.h"
+#include "Hist_data.h"
+#include "Metric.h"
+#include "FileData.h"
+#include "DefaultMap.h"
+#include "dbe_types.h"
+
+class Experiment;
+class Expression;
+class DataView;
+class DbeView;
+
+class IOActivity
+{
+public:
+
+ IOActivity (DbeView *_dbev);
+ void reset (void);
+ Hist_data *compute_metrics (MetricList *, Histable::Type, Hist_data::Mode,
+ Histable*);
+
+ ~IOActivity ()
+ {
+ this->reset ();
+ }
+
+private:
+ void computeData (Histable::Type);
+ void computeCallStack (Histable::Type, VMode viewMode);
+ void createHistItemTotals (Hist_data *, MetricList *, Histable::Type, bool);
+ void computeHistTotals (Hist_data *, MetricList *);
+ void computeHistData (Hist_data *, MetricList *, Hist_data::Mode, Histable *);
+
+ Vector<FileData*> *fDataObjs;
+ Vector<FileData*> *fDataObjsFile;
+ Vector<FileData*> *fDataObjsVfd;
+ Vector<FileData*> *fDataObjsCallStack;
+ bool hasFile;
+ bool hasVfd;
+ bool hasCallStack;
+ HashMap<char*, FileData*> *fDataHash;
+ FileData *fDataTotal;
+
+ // list of FileData objects using the stack id as the key
+ DefaultMap<void*, FileData*> *fDataCalStkMap;
+
+ // list of FileData objects using the VFD as the key
+ DefaultMap<long, FileData*> *fDataVfdMap;
+
+ // the cached data for mode=Hist_Data::ALL
+ Hist_data *hist_data_file_all;
+ Hist_data *hist_data_vfd_all;
+ Hist_data *hist_data_callstack_all;
+ Hist_data *hist_data_callstack;
+
+ DbeView *dbev;
+};
+
+#endif /* _IOACTIVITY_H */
diff --git a/gprofng/src/IndexMap2D.h b/gprofng/src/IndexMap2D.h
new file mode 100644
index 00000000000..0f68a3a4893
--- /dev/null
+++ b/gprofng/src/IndexMap2D.h
@@ -0,0 +1,119 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+/*
+ * Index Map2D implementation.
+ *
+ * Index Map2D is dynamic two dimensional array
+ */
+
+#ifndef _DBE_INDEXMAP2D_H
+#define _DBE_INDEXMAP2D_H
+
+#include <assert.h>
+#include <vec.h>
+#include <Map2D.h>
+
+template <typename Key1_t, typename Key2_t, typename Value_t>
+class IndexMap2D : public Map2D<Key1_t, Key2_t, Value_t>
+{
+public:
+
+ IndexMap2D ();
+ ~IndexMap2D ();
+
+ void put (Key1_t key1, Key2_t key2, Value_t val);
+ Value_t get (Key1_t key1, Key2_t key2);
+ Value_t get (Key1_t key1, Key2_t key2,
+ typename Map2D<Key1_t, Key2_t, Value_t>::Relation rel);
+ Value_t remove (Key1_t key1, Key2_t key2);
+
+private:
+
+ Vector<Vector<Value_t>*> *map1;
+};
+
+template <typename Key1_t, typename Key2_t, typename Value_t>
+IndexMap2D<Key1_t, Key2_t, Value_t>::IndexMap2D ()
+{
+ map1 = new Vector<Vector<Value_t>*>;
+}
+
+template <typename Key1_t, typename Key2_t, typename Value_t>
+IndexMap2D<Key1_t, Key2_t, Value_t>::~IndexMap2D ()
+{
+ map1->destroy ();
+ delete map1;
+}
+
+template <typename Key1_t, typename Key2_t, typename Value_t>
+void
+IndexMap2D<Key1_t, Key2_t, Value_t>::put (Key1_t key1, Key2_t key2, Value_t val)
+{
+ if (key1 < 0 || key2 < 0)
+ return;
+ Vector<Value_t> *map2 = NULL;
+ if (key1 < map1->size ())
+ map2 = map1->fetch ((int) key1);
+ if (map2 == NULL)
+ {
+ map2 = new Vector<Value_t>;
+ map1->store ((int) key1, map2);
+ }
+ map2->store ((int) key2, val);
+}
+
+template <typename Key1_t, typename Key2_t, typename Value_t>
+Value_t
+IndexMap2D<Key1_t, Key2_t, Value_t>::get (Key1_t key1, Key2_t key2)
+{
+ if (key1 < 0 || key1 >= map1->size () || key2 < 0)
+ return (Value_t) 0;
+ Vector<Value_t> *map2 = map1->fetch ((int) key1);
+ if (map2 == NULL || key2 >= map2->size ())
+ return (Value_t) 0;
+ return map2->fetch ((int) key2);
+}
+
+template <typename Key1_t, typename Key2_t, typename Value_t>
+Value_t
+IndexMap2D<Key1_t, Key2_t, Value_t>::get (Key1_t key1, Key2_t key2,
+ typename Map2D<Key1_t, Key2_t, Value_t>::Relation rel)
+{
+ if (rel != Map2D<Key1_t, Key2_t, Value_t>::REL_EQEQ)
+ return (Value_t) 0;
+ return get (key1, key2);
+}
+
+template <typename Key1_t, typename Key2_t, typename Value_t>
+Value_t
+IndexMap2D<Key1_t, Key2_t, Value_t>::remove (Key1_t key1, Key2_t key2)
+{
+ if (key1 < 0 || key1 >= map1->size () || key2 < 0)
+ return (Value_t) 0;
+ Vector<Value_t> *map2 = map1->fetch ((int) key1);
+ if (map2 == NULL || key2 >= map2->size ())
+ return (Value_t) 0;
+ Value_t res = map2->fetch ((int) key2);
+ map2->store ((int) key2, (Value_t) 0);
+ return res;
+}
+
+#endif
diff --git a/gprofng/src/IndexObject.cc b/gprofng/src/IndexObject.cc
new file mode 100644
index 00000000000..a7c8a376aaf
--- /dev/null
+++ b/gprofng/src/IndexObject.cc
@@ -0,0 +1,554 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include "util.h"
+#include "DbeSession.h"
+#include "DbeView.h"
+#include "IndexObject.h"
+#include "StringBuilder.h"
+
+IndexObject::IndexObject (int _indextype, uint64_t _index)
+{
+ indextype = _indextype;
+ obj = NULL;
+ id = _index;
+ name = NULL;
+ nameIsFinal = false;
+}
+
+IndexObject::IndexObject (int _indextype, Histable *_obj)
+{
+ indextype = _indextype;
+ obj = _obj;
+ id = obj ? obj->id : (uint64_t) - 1;
+ name = NULL;
+ nameIsFinal = false;
+}
+
+void
+IndexObject::set_name (char * other_name)
+{
+ if (name == NULL)
+ {
+ name = other_name;
+ nameIsFinal = true;
+ }
+}
+
+static uint64_t
+extractExpgrid (uint64_t id)
+{
+ return (id >> IndexObject::INDXOBJ_EXPGRID_SHIFT)
+ & IndexObject::INDXOBJ_EXPGRID_MASK;
+}
+
+static uint64_t
+extractExpid (uint64_t id)
+{
+ return (id >> IndexObject::INDXOBJ_EXPID_SHIFT)
+ & IndexObject::INDXOBJ_EXPID_MASK;
+}
+
+static uint64_t
+extractPayload (uint64_t id)
+{
+ return (id >> IndexObject::INDXOBJ_PAYLOAD_SHIFT)
+ & IndexObject::INDXOBJ_PAYLOAD_MASK;
+}
+
+static void
+printCompareLabel (StringBuilder *sb, uint64_t grpId);
+
+static bool
+printThread (StringBuilder *sbIn, Expression::Context * ctx, uint64_t id)
+{
+ uint64_t proc = extractExpid (id);
+ uint64_t thrid = extractPayload (id);
+ bool isFinal = true;
+ bool hasJava = false;
+ bool javaThread = false;
+ if (ctx)
+ {
+ if (ctx->dview && ctx->dview->getProp (PROP_JTHREAD))
+ {
+ hasJava = true;
+ uint64_t tstamp = ctx->dview->getLongValue (PROP_TSTAMP, ctx->eventId);
+ JThread *jthread = ctx->exp->map_pckt_to_Jthread (thrid, tstamp);
+ if (jthread != JTHREAD_NONE && jthread != JTHREAD_DEFAULT)
+ {
+ sbIn->appendf (GTXT ("Process %llu, Thread %llu, JThread %llu \'%s\', Group \'%s\', Parent \'%s\'"),
+ (unsigned long long) proc,
+ (unsigned long long) thrid,
+ (unsigned long long) jthread->jthr_id,
+ get_str(jthread->name, ""),
+ get_str(jthread->group_name, ""),
+ get_str(jthread->parent_name, ""));
+ javaThread = true;
+ }
+ }
+ }
+ if (!javaThread)
+ {
+ sbIn->appendf (GTXT ("Process %llu, Thread %llu"),
+ (unsigned long long) proc, (unsigned long long) thrid);
+ if (hasJava)
+ // sometimes threads start as native and later become Java; keep checking
+ isFinal = false;
+ }
+ if (ctx && ctx->dbev && ctx->dbev->comparingExperiments ())
+ {
+ Vector <Histable *> *v = ctx->exp->get_comparable_objs ();
+ int st = 0;
+ for (long i = 0, sz = VecSize (v); i < sz; i++)
+ {
+ Experiment *exp = (Experiment *) v->get (i);
+ if (exp)
+ {
+ if (st == 0)
+ {
+ st = 1;
+ continue;
+ }
+ sbIn->appendf (GTXT (" [ Group %llu Process %llu ]"),
+ (unsigned long long) exp->groupId - 1,
+ (unsigned long long) exp->getUserExpId ());
+ }
+ }
+ }
+ return isFinal;
+}
+
+static bool
+printProcess (StringBuilder *sbIn, Expression::Context * ctx, uint64_t id)
+{
+ uint64_t proc = id;
+ if (ctx && ctx->exp)
+ {
+ int st = 0;
+ if (ctx->dbev && ctx->dbev->comparingExperiments ())
+ {
+ Vector <Histable *> *v = ctx->exp->get_comparable_objs ();
+ for (long i = 0, sz = VecSize (v); i < sz; i++)
+ {
+ Experiment *exp = (Experiment *) v->get (i);
+ if (exp)
+ {
+ if (st == 0)
+ {
+ st = 1;
+ sbIn->appendf (GTXT ("%s, Process %3llu, PID %llu"),
+ get_str (exp->utargname, GTXT ("(unknown)")),
+ (unsigned long long) proc,
+ (unsigned long long) exp->getPID ());
+ continue;
+ }
+ sbIn->appendf (GTXT (" [ Group %llu, Process %llu, PID %llu ]"),
+ (unsigned long long) exp->groupId - 1,
+ (unsigned long long) exp->getUserExpId (),
+ (unsigned long long) exp->getPID ());
+ }
+ }
+ }
+ if (st == 0)
+ sbIn->appendf (GTXT ("%s, Process %3llu, PID %llu"),
+ get_str (ctx->exp->utargname, GTXT ("(unknown)")),
+ (unsigned long long) proc,
+ (unsigned long long) ctx->exp->getPID ());
+ }
+ else
+ sbIn->appendf (GTXT ("Process %3llu"), (unsigned long long) proc);
+ return true; //name is final
+}
+
+static bool
+printExperiment (StringBuilder *sbIn, Expression::Context * ctx, uint64_t id)
+{
+ uint64_t grpId = extractExpgrid (id);
+ uint64_t expid = extractExpid (id);
+ if (ctx && ctx->dbev->comparingExperiments ())
+ printCompareLabel (sbIn, grpId);
+ if (ctx)
+ {
+ Experiment *hasFounder = ctx->exp->founder_exp;
+ int pid = ctx->exp->getPID ();
+ uint64_t founderExpid;
+ if (hasFounder)
+ founderExpid = hasFounder->getUserExpId ();
+ else
+ founderExpid = expid;
+ sbIn->appendf (GTXT ("Base Experiment %llu, Process %llu, PID %llu, %s"),
+ (unsigned long long) founderExpid,
+ (unsigned long long) expid,
+ (unsigned long long) pid,
+ get_str (ctx->exp->utargname, GTXT ("(unknown)")));
+ }
+ else
+ sbIn->appendf (GTXT ("Process %llu"), (unsigned long long) expid);
+ return true; // name is final
+}
+
+void
+IndexObject::set_name_from_context (Expression::Context * ctx)
+{
+ if (name != NULL)
+ if (nameIsFinal && strstr (name, GTXT ("(unknown)")) == NULL)
+ return;
+ if (ctx == NULL || ctx->dview == NULL || ctx->dbev == NULL)
+ return;
+ StringBuilder sb;
+ switch (indextype)
+ {
+ case INDEX_THREADS:
+ nameIsFinal = printThread (&sb, ctx, id);
+ break;
+ case INDEX_PROCESSES:
+ nameIsFinal = printProcess (&sb, ctx, id);
+ break;
+ case INDEX_EXPERIMENTS:
+ nameIsFinal = printExperiment (&sb, ctx, id);
+ break;
+ default:
+ name = NULL;
+ return;
+ }
+ if (sb.length ())
+ name = sb.toString ();
+}
+
+static void
+printCompareLabel (StringBuilder *sbIn, uint64_t grpId)
+{
+ static const char *labels[] = {"", GTXT ("Baseline"), GTXT ("Comparison")};
+ static int length;
+ if (!length)
+ {
+ length = strlen (labels[1]);
+ int length2 = strlen (labels[2]);
+ if (length < length2)
+ length = length2;
+ length += 5; // for open/close brace and grpId number and spaces
+ }
+ char *s = NULL;
+ if (grpId != 0)
+ {
+ if (grpId <= 2)
+ s = dbe_sprintf ("[%s]", labels[grpId]);
+ else
+ s = dbe_sprintf ("[%s-%llu]", labels[2],
+ (unsigned long long) (grpId - 1));
+ }
+ sbIn->appendf ("%-*s", length, get_str (s, ""));
+ free (s);
+}
+
+char *
+IndexObject::get_name (NameFormat fmt)
+{
+ if (name == NULL)
+ {
+ StringBuilder sb;
+ int64_t upper;
+ int64_t num1;
+ int64_t num2;
+ switch (indextype)
+ {
+ case INDEX_THREADS:
+ printThread (&sb, NULL, id);
+ break;
+
+ case INDEX_CPUS:
+ sb.sprintf (GTXT ("CPU %llu"), (unsigned long long) id);
+ break;
+
+ case INDEX_SAMPLES:
+ sb.sprintf (GTXT ("Sample %llu"), (unsigned long long) id);
+ break;
+
+ case INDEX_GCEVENTS:
+ if (id == 0)
+ {
+ sb.sprintf (GTXT ("Not in any GCEvent"));
+ }
+ else
+ {
+ sb.sprintf (GTXT ("GCEvent %llu"), (unsigned long long) id);
+ }
+ break;
+
+ case INDEX_SECONDS:
+ sb.sprintf (GTXT ("Second of execution %llu"), (unsigned long long) id);
+ break;
+
+ case INDEX_PROCESSES:
+ printProcess (&sb, NULL, id);
+ break;
+
+ case INDEX_EXPERIMENTS:
+ printExperiment (&sb, NULL, id);
+ break;
+ case INDEX_BYTES:
+ upper = id;
+ if (id == -1)
+ {
+ break;
+ }
+ if (id % 2 == 1 && id > 1)
+ {
+ upper = id - 1;
+ if (upper >= 1099511627776)
+ {
+ num1 = upper / 1099511627776;
+ sb.sprintf (GTXT (">= %3llu TB"), (unsigned long long) num1);
+ }
+ else
+ {
+ // XXXX do nothing, this should not happen
+ }
+ }
+ else
+ {
+ if (upper >= 1099511627776)
+ {
+ num1 = upper / 1099511627776;
+ num2 = num1 / 4;
+ if (num2)
+ {
+ sb.sprintf (GTXT ("%3lluTB < n <= %3lluTB"), (unsigned long long) num2, (unsigned long long) num1);
+ }
+ else
+ {
+ sb.sprintf (GTXT ("256GB < n <= %3lluTB"), (unsigned long long) num1);
+ }
+ }
+ else if (upper >= 1073741824)
+ {
+ num1 = upper / 1073741824;
+ num2 = num1 / 4;
+ if (num2)
+ {
+ sb.sprintf (GTXT ("%3lluGB < n <= %3lluGB"), (unsigned long long) num2, (unsigned long long) num1);
+ }
+ else
+ {
+ sb.sprintf (GTXT ("256MB < n <= %3lluGB"), (unsigned long long) num1);
+ }
+ }
+ else if (upper >= 1048576)
+ {
+ num1 = upper / 1048576;
+ num2 = num1 / 4;
+ if (num2)
+ {
+ sb.sprintf (GTXT ("%3lluMB < n <= %3lluMB"), (unsigned long long) num2, (unsigned long long) num1);
+ }
+ else
+ {
+ sb.sprintf (GTXT ("256KB < n <= %3lluMB"), (unsigned long long) num1);
+ }
+ }
+ else if (upper >= 1024)
+ {
+ num1 = upper / 1024;
+ num2 = num1 / 4;
+ if (num2)
+ {
+ sb.sprintf (GTXT ("%3lluKB < n <= %3lluKB"), (unsigned long long) num2, (unsigned long long) num1);
+ }
+ else
+ {
+ sb.sprintf (GTXT (" 256 < n <= %3lluKB"), (unsigned long long) num1);
+ }
+ }
+ else if (upper > 0)
+ {
+ num1 = upper;
+ num2 = num1 / 4;
+ if (num1 == 1)
+ {
+ sb.sprintf (GTXT (" 1 Byte"));
+ }
+ else
+ {
+ sb.sprintf (GTXT ("%5llu < n <= %5llu Bytes"), (unsigned long long) num2, (unsigned long long) num1);
+ }
+ }
+ else if (upper == 0)
+ {
+ sb.sprintf (GTXT (" 0 Bytes"));
+ }
+ else
+ {
+ sb.sprintf (GTXT ("<No Data>"));
+ }
+ }
+ break;
+ case INDEX_DURATION:
+ if (id == -1)
+ {
+ break;
+ }
+
+ if (id > 10000000000000)
+ {
+ sb.sprintf (GTXT ("n > 10000s"));
+ }
+ else if (id > 1000000000000)
+ {
+ sb.sprintf (GTXT ("1000s < n <= 10000s"));
+ }
+ else if (id > 100000000000)
+ {
+ sb.sprintf (GTXT (" 100s < n <= 1000s"));
+ }
+ else if (id > 10000000000)
+ {
+ sb.sprintf (GTXT (" 10s < n <= 100s"));
+ }
+ else if (id > 1000000000)
+ {
+ sb.sprintf (GTXT (" 1s < n <= 10s"));
+ }
+ else if (id > 100000000)
+ {
+ sb.sprintf (GTXT ("100ms < n <= 1s"));
+ }
+ else if (id > 10000000)
+ {
+ sb.sprintf (GTXT (" 10ms < n <= 100ms"));
+ }
+ else if (id > 1000000)
+ {
+ sb.sprintf (GTXT (" 1ms < n <= 10ms"));
+ }
+ else if (id > 100000)
+ {
+ sb.sprintf (GTXT ("100us < n <= 1ms"));
+ }
+ else if (id > 10000)
+ {
+ sb.sprintf (GTXT (" 10us < n <= 100us"));
+ }
+ else if (id > 1000)
+ {
+ sb.sprintf (GTXT (" 1us < n <= 10us"));
+ }
+ else if (id > 0)
+ {
+ sb.sprintf (GTXT (" 0s < n <= 1us"));
+ }
+ else if (id == 0)
+ {
+ sb.sprintf (GTXT (" 0s"));
+ }
+ else
+ {
+ sb.sprintf (GTXT ("<No Data>"));
+ }
+ break;
+
+ // Custom index objects
+ default:
+ if (obj)
+ sb.sprintf (GTXT ("%s from %s"),
+ dbeSession->getIndexSpaceDescr (indextype), obj->get_name (fmt));
+ else
+ {
+ IndexObjType_t *indexObj = dbeSession->getIndexSpace (indextype);
+ if (indexObj->memObj)
+ {
+ if (strcasecmp (indexObj->name, NTXT ("Memory_page_size")) == 0)
+ {
+ if (id == 0)
+ sb.append (GTXT ("<Unknown>"));
+ else
+ sb.sprintf (NTXT ("%s 0x%16.16llx (%llu)"), indexObj->name,
+ (unsigned long long) id, (unsigned long long) id);
+ }
+ else if (strcasecmp (indexObj->name, NTXT ("Memory_in_home_lgrp")) == 0)
+ {
+ if (id == 0 || id == 1)
+ sb.sprintf (NTXT ("%s: %s"), indexObj->name,
+ id == 1 ? GTXT ("True") : GTXT ("False"));
+ else
+ sb.sprintf (NTXT ("%s %s (0x%llx"), indexObj->name,
+ GTXT ("<Unknown>"), (unsigned long long) id);
+ }
+ else if (strcasecmp (indexObj->name, NTXT ("Memory_lgrp")) == 0)
+ {
+ if (id == 0)
+ sb.append (GTXT ("<Unknown>"));
+ else
+ sb.sprintf (NTXT ("%s %llu"), indexObj->name, (unsigned long long) id);
+ }
+ else
+ sb.sprintf (NTXT ("%s 0x%16.16llx"), indexObj->name, (unsigned long long) id);
+ }
+ else
+ sb.sprintf ("%s 0x%16.16llx (%llu)", indexObj->name,
+ (unsigned long long) id, (unsigned long long) id);
+ }
+ }
+ name = sb.toString ();
+ nameIsFinal = true;
+ }
+ return name;
+}
+
+bool
+IndexObject::requires_string_sort ()
+{
+ if (indextype == INDEX_PROCESSES || indextype >= INDEX_LAST)
+ return true;
+ return false;
+}
+
+Histable *
+IndexObject::convertto (Histable_type type, Histable *ext)
+{
+ if (type == INDEXOBJ)
+ return this;
+ if (obj)
+ return obj->convertto (type, ext);
+ return NULL;
+}
+
+IndexObjType_t::IndexObjType_t ()
+{
+ type = 0;
+ name = NULL;
+ i18n_name = NULL;
+ index_expr_str = NULL;
+ index_expr = NULL;
+ mnemonic = 0;
+ short_description = NULL;
+ long_description = NULL;
+ memObj = NULL;
+}
+
+IndexObjType_t::~IndexObjType_t ()
+{
+ free (name);
+ free (i18n_name);
+ free (index_expr_str);
+ delete index_expr;
+ free (short_description);
+ free (long_description);
+}
diff --git a/gprofng/src/IndexObject.h b/gprofng/src/IndexObject.h
new file mode 100644
index 00000000000..23f21d36481
--- /dev/null
+++ b/gprofng/src/IndexObject.h
@@ -0,0 +1,111 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _INDEXOBJECT_H
+#define _INDEXOBJECT_H
+
+#include "Histable.h"
+#include "Expression.h"
+
+class IndexObject : public Histable
+{
+public:
+ IndexObject (int _indextype, uint64_t _index);
+ IndexObject (int _indextype, Histable *_obj);
+ bool requires_string_sort (); // name column should be sorted using name text
+
+ virtual Histable_type
+ get_type ()
+ {
+ return INDEXOBJ;
+ }
+
+ virtual char *get_name (NameFormat = NA);
+ virtual void set_name (char*);
+ virtual void set_name_from_context (Expression::Context *);
+ virtual Histable *convertto (Histable_type, Histable* = NULL);
+
+ virtual uint64_t
+ get_addr ()
+ {
+ return id;
+ }
+
+ uint64_t
+ get_index ()
+ {
+ return id;
+ }
+
+ Histable *
+ get_obj ()
+ {
+ return obj;
+ }
+
+ // for use in index object definitions
+ static const uint64_t INDXOBJ_EXPGRID_SHIFT = 60;
+ static const uint64_t INDXOBJ_EXPID_SHIFT = 32;
+ static const uint64_t INDXOBJ_PAYLOAD_SHIFT = 0;
+ static const uint64_t INDXOBJ_EXPGRID_MASK =
+ ((1LLU << (64 - INDXOBJ_EXPGRID_SHIFT)) - 1);
+ static const uint64_t INDXOBJ_EXPID_MASK =
+ ((1LLU << (INDXOBJ_EXPGRID_SHIFT - INDXOBJ_EXPID_SHIFT)) - 1);
+ static const uint64_t INDXOBJ_PAYLOAD_MASK =
+ ((1LLU << (INDXOBJ_EXPID_SHIFT - INDXOBJ_PAYLOAD_SHIFT)) - 1);
+
+private:
+
+ int indextype;
+ Histable *obj;
+ bool nameIsFinal;
+};
+
+typedef enum IndexObjTypes
+{
+ INDEX_THREADS = 0,
+ INDEX_CPUS,
+ INDEX_SAMPLES,
+ INDEX_GCEVENTS,
+ INDEX_SECONDS,
+ INDEX_PROCESSES,
+ INDEX_EXPERIMENTS,
+ INDEX_BYTES,
+ INDEX_DURATION,
+ INDEX_LAST // never used; marks the count of precompiled items
+} IndexObjTypes_t;
+
+class IndexObjType_t
+{
+public:
+ IndexObjType_t ();
+ ~IndexObjType_t ();
+ int type;
+ char *name; // used as input
+ char *i18n_name; // used for output
+ char *index_expr_str;
+ Expression *index_expr;
+ char mnemonic;
+ char *short_description;
+ char *long_description;
+ MemObjType_t *memObj;
+};
+
+#endif /* _INDEXOBJECT_H */
diff --git a/gprofng/src/IntervalMap.h b/gprofng/src/IntervalMap.h
new file mode 100644
index 00000000000..8c204746243
--- /dev/null
+++ b/gprofng/src/IntervalMap.h
@@ -0,0 +1,194 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+/*
+ * Interval Map implementation.
+ *
+ * Interval Map makes the following assumptions:
+ * - if duplicate keys, the last one will be stored
+ * - <TBC>
+ */
+#ifndef _DBE_INTERVALMAP_H
+#define _DBE_INTERVALMAP_H
+
+#include <assert.h>
+#include <vec.h>
+#include <Map.h>
+
+template <typename Key_t, typename Value_t>
+class IntervalMap : public Map<Key_t, Value_t>
+{
+public:
+
+ IntervalMap ();
+ ~IntervalMap ();
+ void put (Key_t key, Value_t val);
+ Value_t get (Key_t key);
+ Value_t get (Key_t key, typename Map<Key_t, Value_t>::Relation rel);
+ Value_t remove (Key_t key);
+
+private:
+
+ struct Entry
+ {
+ Key_t key;
+ Value_t val;
+ };
+
+ static const int CHUNK_SIZE;
+
+ int entries;
+ int nchunks;
+ Entry **chunks;
+ Vector<Entry*> *index;
+};
+
+template <typename Key_t, typename Value_t>
+const int IntervalMap<Key_t, Value_t>::CHUNK_SIZE = 16384;
+
+template <typename Key_t, typename Value_t>
+IntervalMap<Key_t, Value_t>::IntervalMap ()
+{
+ entries = 0;
+ nchunks = 0;
+ chunks = NULL;
+ index = new Vector<Entry*>;
+}
+
+template <typename Key_t, typename Value_t>
+IntervalMap<Key_t, Value_t>::~IntervalMap ()
+{
+ for (int i = 0; i < nchunks; i++)
+ delete[] chunks[i];
+ delete[] chunks;
+ delete index;
+}
+
+template <typename Key_t, typename Value_t>
+void
+IntervalMap<Key_t, Value_t>::put (Key_t key, Value_t val)
+{
+ int lo = 0;
+ int hi = entries - 1;
+ while (lo <= hi)
+ {
+ int md = (lo + hi) / 2;
+ Entry *entry = index->fetch (md);
+ int cmp = entry->key < key ? -1 : entry->key > key ? 1 : 0;
+ if (cmp < 0)
+ lo = md + 1;
+ else if (cmp > 0)
+ hi = md - 1;
+ else
+ {
+ entry->val = val;
+ return;
+ }
+ }
+
+ if (entries >= nchunks * CHUNK_SIZE)
+ {
+ nchunks++;
+ // Reallocate Entry chunk array
+ Entry **new_chunks = new Entry*[nchunks];
+ for (int i = 0; i < nchunks - 1; i++)
+ new_chunks[i] = chunks[i];
+ delete chunks;
+ chunks = new_chunks;
+
+ // Allocate new chunk for entries.
+ chunks[nchunks - 1] = new Entry[CHUNK_SIZE];
+ }
+ Entry *entry = &chunks[entries / CHUNK_SIZE][entries % CHUNK_SIZE];
+ entry->key = key;
+ entry->val = val;
+ index->insert (lo, entry);
+ entries++;
+}
+
+template <typename Key_t, typename Value_t>
+Value_t
+IntervalMap<Key_t, Value_t>::get (Key_t key)
+{
+ return get (key, Map<Key_t, Value_t>::REL_EQ);
+}
+
+template <typename Key_t, typename Value_t>
+Value_t
+IntervalMap<Key_t, Value_t>::get (Key_t key, typename Map<Key_t, Value_t>::Relation rel)
+{
+ int lo = 0;
+ int hi = entries - 1;
+ while (lo <= hi)
+ {
+ int md = (lo + hi) / 2;
+ Entry *entry = index->fetch (md);
+ int cmp = entry->key < key ? -1 : entry->key > key ? 1 : 0;
+ switch (rel)
+ {
+ case Map<Key_t, Value_t>::REL_LT:
+ if (cmp < 0)
+ lo = md + 1;
+ else
+ hi = md - 1;
+ break;
+ case Map<Key_t, Value_t>::REL_GT:
+ if (cmp <= 0)
+ lo = md + 1;
+ else
+ hi = md - 1;
+ break;
+ case Map<Key_t, Value_t>::REL_LE:
+ case Map<Key_t, Value_t>::REL_GE:
+ case Map<Key_t, Value_t>::REL_EQ:
+ if (cmp < 0)
+ lo = md + 1;
+ else if (cmp > 0)
+ hi = md - 1;
+ else
+ return entry->val;
+ break;
+ }
+ }
+ switch (rel)
+ {
+ case Map<Key_t, Value_t>::REL_LT:
+ case Map<Key_t, Value_t>::REL_LE:
+ return hi >= 0 ? index->fetch (hi)->val : (Value_t) 0;
+ case Map<Key_t, Value_t>::REL_GT:
+ case Map<Key_t, Value_t>::REL_GE:
+ return lo < entries ? index->fetch (lo)->val : (Value_t) 0;
+ case Map<Key_t, Value_t>::REL_EQ:
+ break;
+ }
+ return (Value_t) 0;
+}
+
+template <typename Key_t, typename Value_t>
+Value_t
+IntervalMap<Key_t, Value_t>::remove (Key_t)
+{
+ // Not implemented
+ if (1)
+ assert (0);
+ return (Value_t) 0;
+}
+
+#endif
diff --git a/gprofng/src/LoadObject.cc b/gprofng/src/LoadObject.cc
new file mode 100644
index 00000000000..d9ce3e847db
--- /dev/null
+++ b/gprofng/src/LoadObject.cc
@@ -0,0 +1,1242 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <errno.h>
+
+#include "util.h"
+#include "StringBuilder.h"
+#include "Application.h"
+#include "DbeSession.h"
+#include "Experiment.h"
+#include "Exp_Layout.h"
+#include "DataObject.h"
+#include "Elf.h"
+#include "Function.h"
+#include "Module.h"
+#include "ClassFile.h"
+#include "Stabs.h"
+#include "LoadObject.h"
+#include "dbe_types.h"
+#include "DbeFile.h"
+#include "ExpGroup.h"
+
+enum
+{
+ LO_InstHTableSize = 4096,
+ HTableSize = 1024
+};
+
+LoadObject *
+LoadObject::create_item (const char *nm, int64_t chksum)
+{
+ LoadObject *lo = new LoadObject (nm);
+ lo->checksum = chksum;
+ dbeSession->append (lo);
+ return lo;
+}
+
+LoadObject *
+LoadObject::create_item (const char *nm, const char *_runTimePath, DbeFile *df)
+{
+ LoadObject *lo = new LoadObject (nm);
+ lo->runTimePath = dbe_strdup (_runTimePath);
+ lo->dbeFile->orig_location = dbe_strdup (_runTimePath);
+ if (df)
+ {
+ if ((df->filetype & DbeFile::F_JAR_FILE) != 0)
+ {
+ if (lo->dbeFile->find_in_jar_file (nm, df->get_jar_file ()))
+ {
+ lo->dbeFile->inArchive = df->inArchive;
+ lo->dbeFile->container = df;
+ }
+ }
+ else
+ {
+ lo->dbeFile->set_location (df->get_location ());
+ lo->dbeFile->sbuf = df->sbuf;
+ lo->dbeFile->inArchive = df->inArchive;
+ }
+ }
+ dbeSession->append (lo);
+ return lo;
+}
+
+LoadObject::LoadObject (const char *loname)
+{
+ flags = 0;
+ size = 0;
+ type = SEG_UNKNOWN;
+ isReadStabs = false;
+ need_swap_endian = false;
+ instHTable = new DbeInstr*[LO_InstHTableSize];
+ for (int i = 0; i < LO_InstHTableSize; i++)
+ instHTable[i] = NULL;
+
+ functions = new Vector<Function*>;
+ funcHTable = new Function*[HTableSize];
+ for (int i = 0; i < HTableSize; i++)
+ funcHTable[i] = NULL;
+
+ seg_modules = new Vector<Module*>;
+ modules = new HashMap<char*, Module*>;
+ platform = Unknown;
+ noname = dbeSession->createUnknownModule (this);
+ modules->put (noname->get_name (), noname);
+ pathname = NULL;
+ arch_name = NULL;
+ runTimePath = NULL;
+ objStabs = NULL;
+ firstExp = NULL;
+ seg_modules_map = NULL;
+ comp_funcs = NULL;
+ warnq = new Emsgqueue (NTXT ("lo_warnq"));
+ commentq = new Emsgqueue (NTXT ("lo_commentq"));
+ elf_lo = NULL;
+ elf_inited = false;
+ checksum = 0;
+ isUsed = false;
+ h_function = NULL;
+ h_instr = NULL;
+
+ char *nm = (char *) loname;
+ if (strncmp (nm, NTXT ("./"), 2) == 0)
+ nm += 2;
+ set_name (nm);
+ dbeFile = new DbeFile (nm);
+ dbeFile->filetype |= DbeFile::F_LOADOBJ | DbeFile::F_FILE;
+}
+
+LoadObject::~LoadObject ()
+{
+ delete seg_modules_map;
+ delete functions;
+ delete[] instHTable;
+ delete[] funcHTable;
+ delete seg_modules;
+ delete modules;
+ delete elf_lo;
+ free (pathname);
+ free (arch_name);
+ free (runTimePath);
+ delete objStabs;
+ delete warnq;
+ delete commentq;
+ delete h_instr;
+}
+
+Elf *
+LoadObject::get_elf ()
+{
+ if (elf_lo == NULL)
+ {
+ if (dbeFile->get_need_refind ())
+ elf_inited = false;
+ if (elf_inited)
+ return NULL;
+ elf_inited = true;
+ char *fnm = dbeFile->get_location ();
+ if (fnm == NULL)
+ {
+ append_msg (CMSG_ERROR, GTXT ("Cannot find file: `%s'"),
+ dbeFile->get_name ());
+ return NULL;
+ }
+ Elf::Elf_status st = Elf::ELF_ERR_CANT_OPEN_FILE;
+ elf_lo = Elf::elf_begin (fnm, &st);
+ if (elf_lo == NULL)
+ switch (st)
+ {
+ case Elf::ELF_ERR_CANT_OPEN_FILE:
+ append_msg (CMSG_ERROR, GTXT ("Cannot open ELF file `%s'"), fnm);
+ break;
+ case Elf::ELF_ERR_BAD_ELF_FORMAT:
+ default:
+ append_msg (CMSG_ERROR, GTXT ("Cannot read ELF header of `%s'"),
+ fnm);
+ break;
+ }
+ }
+ return elf_lo;
+}
+
+Stabs *
+LoadObject::openDebugInfo (char *fname, Stabs::Stab_status *stp)
+{
+ if (objStabs == NULL)
+ {
+ if (fname == NULL)
+ return NULL;
+ objStabs = new Stabs (fname, get_pathname ());
+ Stabs::Stab_status st = objStabs->get_status ();
+ if ((st == Stabs::DBGD_ERR_NONE) && (checksum != 0))
+ {
+ Elf *elf = get_elf ();
+ if (elf && (checksum != elf->elf_checksum ()))
+ {
+ char *buf = dbe_sprintf (GTXT ("*** Note: '%s' has an unexpected checksum value; perhaps it was rebuilt. File ignored"),
+ fname);
+ commentq->append (new Emsg (CMSG_ERROR, buf));
+ delete buf;
+ st = Stabs::DBGD_ERR_CHK_SUM;
+ }
+ }
+ if (stp)
+ *stp = st;
+ if (st != Stabs::DBGD_ERR_NONE)
+ {
+ delete objStabs;
+ objStabs = NULL;
+ }
+ }
+ return objStabs;
+}
+
+uint64_t
+LoadObject::get_addr ()
+{
+ return MAKE_ADDRESS (seg_idx, 0);
+}
+
+bool
+LoadObject::compare (const char *_path, int64_t _checksum)
+{
+ return _checksum == checksum && dbe_strcmp (_path, get_pathname ()) == 0;
+}
+
+int
+LoadObject::compare (const char *_path, const char *_runTimePath, DbeFile *df)
+{
+ int ret = 0;
+ if (dbe_strcmp (_path, get_pathname ()) != 0)
+ return ret;
+ ret |= CMP_PATH;
+ if (_runTimePath)
+ {
+ if (dbe_strcmp (_runTimePath, runTimePath) != 0)
+ return ret;
+ ret |= CMP_RUNTIMEPATH;
+ }
+ if (df && dbeFile->compare (df))
+ ret |= CMP_CHKSUM;
+ return ret;
+}
+
+void
+LoadObject::set_platform (Platform_t pltf, int wsz)
+{
+ switch (pltf)
+ {
+ case Sparc:
+ case Sparcv9:
+ case Sparcv8plus:
+ platform = (wsz == W64) ? Sparcv9 : Sparc;
+ break;
+ case Intel:
+ case Amd64:
+ platform = (wsz == W64) ? Amd64 : Intel;
+ break;
+ default:
+ platform = pltf;
+ break;
+ }
+};
+
+void
+LoadObject::set_name (char *string)
+{
+ char *p;
+ pathname = dbe_strdup (string);
+
+ p = get_basename (pathname);
+ if (p[0] == '<')
+ name = dbe_strdup (p);
+ else // set a short name to "<basename>"
+ name = dbe_sprintf (NTXT ("<%s>"), p);
+}
+
+void
+LoadObject::dump_functions (FILE *out)
+{
+ int index;
+ Function *fitem;
+ char *sname, *mname;
+ if (platform == Java)
+ {
+ JMethod *jmthd;
+ Vector<JMethod*> *jmethods = (Vector<JMethod*>*)functions;
+ Vec_loop (JMethod*, jmethods, index, jmthd)
+ {
+ fprintf (out, "id %6llu, @0x%llx sz-%lld %s (module = %s)\n",
+ (unsigned long long) jmthd->id, (long long) jmthd->get_mid (),
+ (long long) jmthd->size, jmthd->get_name (),
+ jmthd->module ? jmthd->module->file_name : noname->file_name);
+ }
+ }
+ else
+ {
+ Vec_loop (Function*, functions, index, fitem)
+ {
+ if (fitem->alias && fitem->alias != fitem)
+ fprintf (out, "id %6llu, @0x%llx - %s == alias of '%s'\n",
+ (ull_t) fitem->id, (ull_t) fitem->img_offset,
+ fitem->get_name (), fitem->alias->get_name ());
+ else
+ {
+ mname = fitem->module ? fitem->module->file_name : noname->file_name;
+ sname = fitem->getDefSrcName ();
+ fprintf (out,
+ "id %6llu, @0x%llx - 0x%llx [save 0x%llx] o-%lld sz-%lld %s (module = %s)",
+ (ull_t) fitem->id, (ull_t) fitem->img_offset,
+ (ull_t) (fitem->img_offset + fitem->size),
+ (ull_t) fitem->save_addr, (ull_t) fitem->img_offset,
+ (ll_t) fitem->size, fitem->get_name (), mname);
+ if (sname && !streq (sname, mname))
+ fprintf (out, " (Source = %s)", sname);
+ fprintf (out, "\n");
+ }
+ }
+ }
+}
+
+int
+LoadObject::get_index (Function *func)
+{
+ Function *fp;
+ uint64_t offset;
+ int x;
+ int left = 0;
+ int right = functions->size () - 1;
+ offset = func->img_offset;
+ while (left <= right)
+ {
+ x = (left + right) / 2;
+ fp = functions->fetch (x);
+
+ if (left == right)
+ {
+ if (offset >= fp->img_offset + fp->size)
+ return -1;
+ if (offset >= fp->img_offset)
+ return x;
+ return -1;
+ }
+ if (offset < fp->img_offset)
+ right = x - 1;
+ else if (offset >= fp->img_offset + fp->size)
+ left = x + 1;
+ else
+ return x;
+ }
+ return -1;
+}
+
+char *
+LoadObject::get_alias (Function *func)
+{
+ Function *fp, *alias;
+ int index, nsize;
+ static char buf[1024];
+ if (func->img_offset == 0 || func->alias == NULL)
+ return NULL;
+ int fid = get_index (func);
+ if (fid == -1)
+ return NULL;
+
+ nsize = functions->size ();
+ alias = func->alias;
+ for (index = fid; index < nsize; index++)
+ {
+ fp = functions->fetch (index);
+ if (fp->alias != alias)
+ {
+ fid = index;
+ break;
+ }
+ }
+
+ *buf = '\0';
+ for (index--; index >= 0; index--)
+ {
+ fp = functions->fetch (index);
+ if (fp->alias != alias)
+ break;
+ if (fp != alias)
+ {
+ size_t len = strlen (buf);
+ if (*buf != '\0')
+ {
+ snprintf (buf + len, sizeof (buf) - len, NTXT (", "));
+ len = strlen (buf);
+ }
+ snprintf (buf + len, sizeof (buf) - len, "%s", fp->get_name ());
+ }
+ }
+ return buf;
+}
+
+DbeInstr*
+LoadObject::find_dbeinstr (uint64_t file_off)
+{
+ int hash = (((int) file_off) >> 2) & (LO_InstHTableSize - 1);
+ DbeInstr *instr = instHTable[hash];
+ if (instr && instr->img_offset == file_off)
+ return instr;
+ Function *fp = find_function (file_off);
+ if (fp == NULL)
+ fp = dbeSession->get_Unknown_Function ();
+ uint64_t func_off = file_off - fp->img_offset;
+ instr = fp->find_dbeinstr (0, func_off);
+ instHTable[hash] = instr;
+ return instr;
+}
+
+Function *
+LoadObject::find_function (uint64_t foff)
+{
+ // Look up in the hash table
+ int hash = (((int) foff) >> 6) & (HTableSize - 1);
+ Function *func = funcHTable[hash];
+ if (func && foff >= func->img_offset && foff < func->img_offset + func->size)
+ return func->alias ? func->alias : func;
+
+ // Use binary search
+ func = NULL;
+ int left = 0;
+ int right = functions->size () - 1;
+ while (left <= right)
+ {
+ int x = (left + right) / 2;
+ Function *fp = functions->fetch (x);
+ assert (fp != NULL);
+
+ if (foff < fp->img_offset)
+ right = x - 1;
+ else if (foff >= fp->img_offset + fp->size)
+ left = x + 1;
+ else
+ {
+ func = fp;
+ break;
+ }
+ }
+
+ // Plug the hole with a static function
+ char *func_name = NULL;
+ Size low_bound = 0, high_bound = 0;
+ if (func == NULL)
+ {
+ int last = functions->size () - 1;
+ uint64_t usize = (uint64_t) size;
+ if (foff >= usize)
+ {
+ // Cannot map to this LoadObject. Probably LoadObject was changed.
+ if (last >= 0 && functions->fetch (last)->img_offset == usize)
+ {
+ // Function is already created
+ func = functions->fetch (last);
+ if (func->size < 0 || (uint64_t) func->size < foff - usize)
+ func->size = foff - usize;
+ }
+ else
+ {
+ low_bound = size;
+ high_bound = foff;
+ func_name = dbe_sprintf (GTXT ("<static>@0x%llx (%s) -- no functions found"),
+ low_bound, name);
+ }
+ }
+ else if (last < 0)
+ {
+ low_bound = 0;
+ high_bound = size;
+ func_name = dbe_sprintf (GTXT ("<static>@0x%llx (%s) -- no functions found"),
+ low_bound, name);
+ }
+ else if (foff < functions->fetch (0)->img_offset)
+ {
+ low_bound = 0;
+ high_bound = functions->fetch (0)->img_offset;
+ }
+ else
+ {
+ Function *fp = functions->fetch (last);
+ if (foff >= fp->img_offset + fp->size)
+ {
+ low_bound = fp->img_offset + fp->size;
+ high_bound = size;
+ }
+ else
+ {
+ fp = functions->fetch (left);
+ if (foff >= fp->img_offset + fp->size)
+ {
+ low_bound = fp->img_offset + fp->size;
+ high_bound = functions->fetch (left + 1)->img_offset;
+ }
+ else
+ {
+ Function *fp1 = functions->fetch (left - 1);
+ low_bound = fp1->img_offset + fp1->size;
+ high_bound = fp->img_offset;
+ }
+ }
+ }
+ }
+
+ if (func == NULL)
+ {
+ func = dbeSession->createFunction ();
+ func->size = (unsigned) (high_bound - low_bound);
+ func->module = noname;
+ func->img_fname = get_pathname ();
+ func->img_offset = (off_t) low_bound;
+ noname->functions->append (func); // unordered
+ if (func_name == NULL)
+ func_name = dbe_sprintf (GTXT ("<static>@0x%llx (%s)"), low_bound,
+ name);
+ func->set_name (func_name);
+ free (func_name);
+
+ // now insert the function
+ functions->insert (left, func);
+ }
+
+ // Update the hash table
+ funcHTable[hash] = func;
+ return func->alias ? func->alias : func;
+}
+
+static void
+fixFuncAlias (Vector<Function*> *SymLst)
+{
+ int ind, i, k;
+ int64_t len, bestLen, maxSize;
+ Function *sym, *bestAlias;
+
+ // XXXX it is a clone of Stabs::fixSymtabAlias()
+ ind = SymLst->size () - 1;
+ for (i = 0; i < ind; i++)
+ {
+ bestAlias = SymLst->fetch (i);
+ if (bestAlias->img_offset == 0) // Ignore this bad symbol
+ continue;
+ sym = SymLst->fetch (i + 1);
+ if (bestAlias->img_offset != sym->img_offset)
+ {
+ if (bestAlias->size == 0
+ || sym->img_offset < bestAlias->img_offset + bestAlias->size)
+ bestAlias->size = (int) (sym->img_offset - bestAlias->img_offset);
+ continue;
+ }
+
+ // Find a "best" alias
+ bestLen = strlen (bestAlias->get_name ());
+ maxSize = bestAlias->size;
+ for (k = i + 1; k <= ind; k++)
+ {
+ sym = SymLst->fetch (k);
+ if (bestAlias->img_offset != sym->img_offset)
+ { // no more aliases
+ if ((maxSize == 0) ||
+ (sym->img_offset < bestAlias->img_offset + maxSize))
+ maxSize = sym->img_offset - bestAlias->img_offset;
+ break;
+ }
+ if (maxSize < sym->size)
+ maxSize = sym->size;
+ len = strlen (sym->get_name ());
+ if (len < bestLen)
+ {
+ bestAlias = sym;
+ bestLen = len;
+ }
+ }
+ for (; i < k; i++)
+ {
+ sym = SymLst->fetch (i);
+ sym->alias = bestAlias;
+ sym->size = maxSize;
+ }
+ i--;
+ }
+}
+
+void
+LoadObject::post_process_functions ()
+{
+ if (flags & SEG_FLAG_DYNAMIC || platform == Java)
+ return;
+
+ char *msg = GTXT ("Processing Load Object Data");
+ if (dbeSession->is_interactive ())
+ theApplication->set_progress (1, msg);
+
+ // First sort the functions
+ functions->sort (func_compare);
+ fixFuncAlias (functions);
+
+ Module *mitem;
+ int index;
+ Vec_loop (Module*, seg_modules, index, mitem)
+ {
+ mitem->functions->sort (func_compare);
+ }
+
+ // Find any derived functions, and set their derivedNode
+ Function *fitem;
+ Vec_loop (Function*, functions, index, fitem)
+ {
+ if (dbeSession->is_interactive () && index % 5000 == 0)
+ {
+ int percent = (int) (100.0 * index / functions->size ());
+ theApplication->set_progress (percent, (percent != 0) ? NULL : msg);
+ }
+ fitem->findDerivedFunctions ();
+ }
+
+ // 4987698: get the alias name for MAIN_
+ fitem = find_function (NTXT ("MAIN_"));
+ if (fitem)
+ fitem->module->read_stabs ();
+ fitem = find_function (NTXT ("@plt"));
+ if (fitem)
+ fitem->flags |= FUNC_FLAG_PLT;
+ if (dbeSession->is_interactive ())
+ theApplication->set_progress (0, NTXT (""));
+}
+
+int
+LoadObject::func_compare (const void *p1, const void *p2)
+{
+ Function *f1 = *(Function **) p1;
+ Function *f2 = *(Function **) p2;
+ if (f1->img_offset != f2->img_offset)
+ return f1->img_offset > f2->img_offset ? 1 : -1;
+
+ // annotated source not available for weak symbols.
+ if ((f1->module->flags & MOD_FLAG_UNKNOWN) != 0)
+ {
+ if ((f2->module->flags & MOD_FLAG_UNKNOWN) == 0)
+ return -1;
+ }
+ else if ((f2->module->flags & MOD_FLAG_UNKNOWN) != 0)
+ return 1;
+ return strcoll (f1->get_name (), f2->get_name ());
+}
+
+Function *
+LoadObject::find_function (char *fname)
+{
+ Function *fitem;
+ int index;
+ Vec_loop (Function*, functions, index, fitem)
+ {
+ if (strcmp (fitem->get_name (), fname) == 0)
+ return fitem;
+ }
+ return (Function *) NULL;
+}
+
+Function *
+LoadObject::find_function (char *fname, unsigned int chksum)
+{
+ Function *fitem;
+ int index;
+ Vec_loop (Function*, functions, index, fitem)
+ {
+ if (fitem->chksum == chksum && strcmp (fitem->get_name (), fname) == 0)
+ return fitem;
+ }
+ return (Function *) NULL;
+}
+
+Module *
+LoadObject::find_module (char *mname)
+{
+ for (int i = 0, sz = seg_modules ? seg_modules->size () : 0; i < sz; i++)
+ {
+ Module *module = seg_modules->fetch (i);
+ if (strcmp (module->get_name (), mname) == 0)
+ return module;
+ }
+ return (Module *) NULL;
+}
+
+LoadObject::Arch_status
+LoadObject::sync_read_stabs ()
+{
+ Arch_status st = ARCHIVE_SUCCESS;
+ if (!isReadStabs)
+ {
+ aquireLock ();
+ if (!isReadStabs)
+ {
+ st = read_stabs ();
+ post_process_functions ();
+ isReadStabs = true;
+ }
+ releaseLock ();
+ }
+ return st;
+}
+
+LoadObject::Arch_status
+LoadObject::read_stabs ()
+{
+ if ((dbeFile->filetype & DbeFile::F_FICTION) != 0)
+ return ARCHIVE_SUCCESS;
+ Arch_status stabs_status = ARCHIVE_ERR_OPEN;
+ if (platform == Java)
+ {
+ Module *cf = NULL;
+ for (int i = 0, sz = seg_modules ? seg_modules->size () : 0; i < sz; i++)
+ {
+ Module *mod = seg_modules->fetch (i);
+ if (mod->dbeFile
+ && (mod->dbeFile->filetype & DbeFile::F_JAVACLASS) != 0)
+ {
+ cf = mod;
+ break;
+ }
+ }
+ if (cf)
+ {
+ int status = cf->readFile ();
+ switch (status)
+ {
+ case Module::AE_OK:
+ stabs_status = ARCHIVE_SUCCESS;
+ break;
+ case Module::AE_NOSTABS:
+ stabs_status = ARCHIVE_NO_STABS;
+ break;
+ case Module::AE_NOTREAD:
+ default:
+ stabs_status = ARCHIVE_ERR_OPEN;
+ break;
+ }
+ }
+ }
+ else if (strchr (pathname, '`'))
+ return ARCHIVE_SUCCESS;
+ else
+ {
+ Arch_status st = ARCHIVE_WRONG_ARCH;
+ Elf *elf = get_elf ();
+ if (elf == NULL)
+ {
+ if (read_archive () == 0)
+ st = ARCHIVE_SUCCESS;
+ else
+ {
+ char *msg = dbe_sprintf (GTXT ("*** Warning: Can't open file: %s"),
+ dbeFile->get_name ());
+ warnq->append (new Emsg (CMSG_ERROR, msg));
+ delete msg;
+ }
+ }
+ else if (checksum != 0 && checksum != elf->elf_checksum ())
+ {
+ if (read_archive () == 0)
+ st = ARCHIVE_SUCCESS;
+ else
+ {
+ char *msg = dbe_sprintf (
+ GTXT ("*** Note: '%s' has an unexpected checksum value; perhaps it was rebuilt. File ignored"),
+ dbeFile->get_location ());
+ commentq->append (new Emsg (CMSG_ERROR, msg));
+ delete msg;
+ }
+ }
+ if (st == ARCHIVE_SUCCESS) // An old archive is used
+ return st;
+
+ Stabs::Stab_status status = Stabs::DBGD_ERR_CANT_OPEN_FILE;
+ char *location = dbeFile->get_location (true);
+ if (location == NULL)
+ return ARCHIVE_ERR_OPEN;
+
+ if (openDebugInfo (location, &status))
+ {
+ status = objStabs->read_archive (this);
+ isRelocatable = objStabs->is_relocatable ();
+ size = objStabs->get_textsz ();
+ platform = objStabs->get_platform ();
+ wsize = objStabs->get_class ();
+ }
+
+ switch (status)
+ {
+ case Stabs::DBGD_ERR_NONE:
+ stabs_status = ARCHIVE_SUCCESS;
+ break;
+ case Stabs::DBGD_ERR_CANT_OPEN_FILE:
+ stabs_status = ARCHIVE_ERR_OPEN;
+ break;
+ case Stabs::DBGD_ERR_BAD_ELF_LIB:
+ case Stabs::DBGD_ERR_BAD_ELF_FORMAT:
+ stabs_status = ARCHIVE_BAD_STABS;
+ break;
+ case Stabs::DBGD_ERR_NO_STABS:
+ stabs_status = ARCHIVE_NO_STABS;
+ break;
+ case Stabs::DBGD_ERR_NO_DWARF:
+ stabs_status = ARCHIVE_NO_DWARF;
+ break;
+ default:
+ stabs_status = ARCHIVE_BAD_STABS;
+ break;
+ }
+ }
+ return stabs_status;
+}
+
+#define ARCH_STRLEN(s) ((strlen(s) + 4) & ~0x3 )
+
+static int
+offsetCmp (const void *a, const void *b)
+{
+ uint32_t o1 = ((inst_info_t *) a)->offset;
+ uint32_t o2 = ((inst_info_t *) b)->offset;
+ return o1 == o2 ? 0 : (o1 < o2 ? -1 : 1);
+}
+
+int
+LoadObject::read_archive ()
+{
+ if (arch_name == NULL)
+ return 1;
+ Module *mod = NULL;
+ Function *func = NULL;
+ char *buf;
+ Data_window *dwin = new Data_window (arch_name);
+ if (dwin->not_opened ())
+ {
+ delete dwin;
+ buf = dbe_sprintf (GTXT ("*** Warning: Error opening file for reading: %s: %s"),
+ arch_name, strerror (errno));
+ warnq->append (new Emsg (CMSG_ERROR, buf));
+ delete buf;
+ return 1;
+ }
+ dwin->need_swap_endian = need_swap_endian;
+
+ // Prevent reading earlier archive files, which didn't support versioning.
+ int64_t offset = 0;
+ ARCH_common *cpkt = (ARCH_common*) dwin->bind (offset, sizeof (ARCH_common));
+ uint16_t v16;
+ if (cpkt)
+ {
+ v16 = (uint16_t) cpkt->type;
+ if (dwin->decode (v16) != ARCH_SEGMENT)
+ cpkt = NULL;
+ }
+ if (cpkt == NULL)
+ {
+ buf = dbe_sprintf (GTXT ("archive file malformed %s"), arch_name);
+ warnq->append (new Emsg (CMSG_WARN, buf));
+ delete buf;
+ return 1;
+ }
+
+ char *msg = NULL;
+ unsigned long long pointer_invalid = 0;
+ for (int64_t last_offset = -5000;;)
+ {
+ cpkt = (ARCH_common*) dwin->bind (offset, sizeof (ARCH_common));
+ if (cpkt == NULL)
+ break;
+ v16 = (uint16_t) cpkt->size;
+ uint32_t cpktsize = dwin->decode (v16);
+ cpkt = (ARCH_common*) dwin->bind (offset, cpktsize);
+ if ((cpkt == NULL) || (cpktsize == 0))
+ {
+ buf = dbe_sprintf (GTXT ("archive file malformed %s"), arch_name);
+ warnq->append (new Emsg (CMSG_WARN, buf));
+ delete buf;
+ break;
+ }
+
+ // Update the progress bar
+ if (dbeSession->is_interactive () && ((offset - last_offset) >= 5000))
+ {
+ last_offset = offset;
+ int percent = (int) (100.0 * offset / dwin->get_fsize ());
+ if (msg == NULL)
+ msg = dbe_sprintf (GTXT ("Reading Load Object Data: %s"), name);
+ theApplication->set_progress (percent, (percent != 0) ? NULL : msg);
+ }
+ char *ptr = (char *) cpkt;
+ v16 = (uint16_t) cpkt->type;
+ switch (dwin->decode (v16))
+ {
+ case ARCH_SEGMENT:
+ {
+ ARCH_segment *aseg = (ARCH_segment*) cpkt;
+ if (dwin->decode (aseg->version) != ARCH_VERSION)
+ {
+ buf = dbe_sprintf (GTXT ("Archive file version mismatch for %s"), arch_name);
+ warnq->append (new Emsg (CMSG_ERROR, buf));
+ delete buf;
+ if (dbeSession->is_interactive ())
+ theApplication->set_progress (0, "");
+ return 1;
+ }
+ if (size == 0)
+ size = dwin->decode (aseg->textsz);
+ Platform_t pltf = (Platform_t) dwin->decode (aseg->platform);
+ if (pltf != Unknown)
+ {
+ platform = pltf; // override if known
+ wsize = (platform == Sparcv9 || platform == Amd64) ? W64 : W32;
+ }
+ break;
+ }
+ case ARCH_MSG:
+ {
+ ARCH_message *amsg = (ARCH_message*) cpkt;
+ buf = status_str ((Arch_status) dwin->decode (amsg->errcode));
+ commentq->append (new Emsg (CMSG_ARCHIVE, buf));
+ free (buf);
+ break;
+ }
+ case ARCH_INF:
+ {
+ ARCH_info *ainf = (ARCH_info*) cpkt;
+ Emsg *m = new Emsg (CMSG_ARCHIVE, (char*) (ainf + 1));
+ commentq->append (m);
+ break;
+ }
+ case ARCH_MODULE:
+ {
+ ARCH_module *amod = (ARCH_module*) cpkt;
+ char *str = ((char*) amod) + sizeof (ARCH_module);
+ if (streq (str, SP_UNKNOWN_NAME) &&
+ streq (str + ARCH_STRLEN (str), SP_UNKNOWN_NAME))
+ {
+ mod = noname;
+ break;
+ }
+ mod = dbeSession->createModule (this, str);
+ mod->lang_code = (Sp_lang_code) dwin->decode (amod->lang_code);
+ mod->fragmented = dwin->decode (amod->fragmented);
+ str += ARCH_STRLEN (str);
+ mod->set_file_name (dbe_strdup (str));
+ modules->put (get_basename (str), mod);
+ break;
+ }
+ case ARCH_FUNCTION:
+ {
+ if (mod == NULL)
+ break;
+ ARCH_function *afnc = (ARCH_function*) cpkt;
+ func = dbeSession->createFunction ();
+ func->img_offset = dwin->decode (afnc->offset);
+ func->size = dwin->decode (afnc->size);
+ func->save_addr = dwin->decode (afnc->save_addr)
+ - dwin->decode (afnc->offset);
+ func->module = mod;
+ func->set_name (((char*) afnc) + sizeof (ARCH_function));
+ mod->functions->append (func);
+ functions->append (func);
+ break;
+ }
+ case ARCH_LDINSTR:
+ if (mod == NULL)
+ break;
+ Dprintf (DEBUG_LOADOBJ, "LDINSTR list for %s\n", mod->get_name ());
+ if (mod->infoList == NULL)
+ mod->infoList = new Vector<inst_info_t*>;
+ for (memop_info_t *mp = (memop_info_t*) (ptr + sizeof (ARCH_aninfo));
+ (char*) mp < ptr + cpktsize; mp++)
+ {
+ memop_info_t *memop = new memop_info_t;
+ memop->offset = dwin->decode (mp->offset);
+ memop->id = dwin->decode (mp->id);
+ memop->signature = dwin->decode (mp->signature);
+ memop->datatype_id = dwin->decode (mp->datatype_id);
+ mod->ldMemops.append (memop);
+
+ inst_info_t *instop = new inst_info_t;
+ instop->type = CPF_INSTR_TYPE_LD;
+ instop->offset = memop->offset;
+ instop->memop = memop;
+ mod->infoList->incorporate (instop, offsetCmp);
+ Dprintf (DEBUG_LOADOBJ,
+ "ld: offset=0x%04x id=0x%08x sig=0x%08x dtid=0x%08x\n",
+ memop->offset, memop->id, memop->signature,
+ memop->datatype_id);
+ }
+ Dprintf (DEBUG_LOADOBJ, "LDINSTR list of %lld for %s\n",
+ (long long) mod->ldMemops.size (), mod->get_name ());
+ break;
+ case ARCH_STINSTR:
+ if (mod == NULL)
+ break;
+ Dprintf (DEBUG_LOADOBJ, NTXT ("STINSTR list for %s\n"), mod->get_name ());
+ if (mod->infoList == NULL)
+ mod->infoList = new Vector<inst_info_t*>;
+ for (memop_info_t *mp = (memop_info_t*) (ptr + sizeof (ARCH_aninfo));
+ ((char *) mp) < ptr + cpktsize; mp++)
+ {
+ memop_info_t *memop = new memop_info_t;
+ memop->offset = dwin->decode (mp->offset);
+ memop->id = dwin->decode (mp->id);
+ memop->signature = dwin->decode (mp->signature);
+ memop->datatype_id = dwin->decode (mp->datatype_id);
+ mod->stMemops.append (memop);
+
+ inst_info_t *instop = new inst_info_t;
+ instop->type = CPF_INSTR_TYPE_ST;
+ instop->offset = memop->offset;
+ instop->memop = memop;
+ mod->infoList->incorporate (instop, offsetCmp);
+ Dprintf (DEBUG_LOADOBJ,
+ "st: offset=0x%04x id=0x%08x sig=0x%08x dtid=0x%08x\n",
+ memop->offset, memop->id, memop->signature,
+ memop->datatype_id);
+ }
+ Dprintf (DEBUG_LOADOBJ, "STINSTR list of %lld for %s\n",
+ (long long) mod->stMemops.size (), mod->get_name ());
+ break;
+ case ARCH_PREFETCH:
+ if (mod == NULL)
+ break;
+ Dprintf (DEBUG_LOADOBJ, "PFINSTR list for %s\n", mod->get_name ());
+ if (mod->infoList == NULL)
+ mod->infoList = new Vector<inst_info_t*>;
+ for (memop_info_t *mp = (memop_info_t*) (ptr + sizeof (ARCH_aninfo));
+ ((char*) mp) < ptr + cpkt->size; mp++)
+ {
+ memop_info_t *memop = new memop_info_t;
+ memop->offset = dwin->decode (mp->offset);
+ memop->id = dwin->decode (mp->id);
+ memop->signature = dwin->decode (mp->signature);
+ memop->datatype_id = dwin->decode (mp->datatype_id);
+ mod->pfMemops.append (memop);
+
+ inst_info_t *instop = new inst_info_t;
+ instop->type = CPF_INSTR_TYPE_PREFETCH;
+ instop->offset = memop->offset;
+ instop->memop = memop;
+ mod->infoList->incorporate (instop, offsetCmp);
+ Dprintf (DEBUG_LOADOBJ,
+ "pf: offset=0x%04x id=0x%08x sig=0x%08x dtid=0x%08x\n",
+ memop->offset, memop->id, memop->signature,
+ memop->datatype_id);
+ }
+ Dprintf (DEBUG_LOADOBJ, "PFINSTR list of %lld for %s\n",
+ (long long) mod->pfMemops.size (), mod->get_name ());
+ break;
+ case ARCH_BRTARGET:
+ if (mod == NULL)
+ break;
+ for (target_info_t *tp = (target_info_t*) (ptr + sizeof (ARCH_aninfo));
+ ((char*) tp) < ptr + cpkt->size; tp++)
+ {
+ target_info_t *bTarget = new target_info_t;
+ bTarget->offset = dwin->decode (tp->offset);
+ mod->bTargets.append (bTarget);
+ }
+ Dprintf (DEBUG_LOADOBJ, "BRTARGET list of %lld for %s\n",
+ (long long) mod->infoList->size (), mod->get_name ());
+ break;
+ default:
+ /* Check if the prointer is valid - should be even. */
+ pointer_invalid = (unsigned long long) (offset + cpktsize) & 1;
+ break; // ignore unknown packets
+ }
+ if (pointer_invalid)
+ break;
+ offset += cpktsize;
+ }
+ delete msg;
+ delete dwin;
+
+ if (dbeSession->is_interactive ())
+ theApplication->set_progress (0, NTXT (""));
+ return 0;
+}
+
+char *
+LoadObject::status_str (Arch_status rv, char */*arg*/)
+{
+ switch (rv)
+ {
+ case ARCHIVE_SUCCESS:
+ case ARCHIVE_EXIST:
+ return NULL;
+ case ARCHIVE_BAD_STABS:
+ return dbe_sprintf (GTXT ("Error: unable to read symbol table of %s"),
+ name);
+ case ARCHIVE_ERR_SEG:
+ return dbe_sprintf (GTXT ("Error: unable to read load object file %s"),
+ pathname);
+ case ARCHIVE_ERR_OPEN:
+ return dbe_sprintf (GTXT ("Error: unable to open file %s"),
+ pathname);
+ case ARCHIVE_ERR_MAP:
+ return dbe_sprintf (GTXT ("Error: unable to map file %s"),
+ pathname);
+ case ARCHIVE_WARN_CHECKSUM:
+ return dbe_sprintf (GTXT ("Note: checksum differs from that recorded in experiment for %s"),
+ name);
+ case ARCHIVE_WARN_MTIME:
+ return dbe_sprintf (GTXT ("Warning: last-modified time differs from that recorded in experiment for %s"),
+ name);
+ case ARCHIVE_WARN_HOST:
+ return dbe_sprintf (GTXT ("Try running er_archive -F on the experiment, on the host where it was recorded"));
+ case ARCHIVE_ERR_VERSION:
+ return dbe_sprintf (GTXT ("Error: Wrong version of archive for %s"),
+ pathname);
+ case ARCHIVE_NO_STABS:
+ return dbe_sprintf (GTXT ("Note: no stabs or dwarf information in %s"),
+ name);
+ case ARCHIVE_WRONG_ARCH:
+#if ARCH(SPARC)
+ return dbe_sprintf (GTXT ("Error: file %s is built for Intel, and can't be read on SPARC"),
+ name);
+#else
+ return dbe_sprintf (GTXT ("Error: file %s is built for SPARC, and can't be read on Intel"),
+ name);
+#endif
+ case ARCHIVE_NO_LIBDWARF:
+ return dbe_strdup (GTXT ("Warning: no libdwarf found to read DWARF symbol tables"));
+ case ARCHIVE_NO_DWARF:
+ return dbe_sprintf (GTXT ("Note: no DWARF symbol table in %s"), name);
+ default:
+ return dbe_sprintf (GTXT ("Warning: unexpected archive error %d"),
+ (int) rv);
+ }
+}
+
+uint32_t
+LoadObject::get_checksum ()
+{
+ char *errmsg = NULL;
+ uint32_t crcval = get_cksum (pathname, &errmsg);
+ if (0 == crcval && errmsg)
+ {
+ warnq->append (new Emsg (CMSG_ERROR, errmsg));
+ free (errmsg);
+ }
+ return crcval;
+}
+
+static char*
+get_module_map_key (Module *mod)
+{
+ return mod->lang_code == Sp_lang_java ? mod->get_name () : mod->file_name;
+}
+
+Module *
+LoadObject::get_comparable_Module (Module *mod)
+{
+ if (mod->loadobject == this)
+ return mod;
+ if (get_module_map_key (mod) == NULL)
+ return NULL;
+ if (seg_modules_map == NULL)
+ {
+ seg_modules_map = new HashMap<char*, Module*>;
+ for (int i = 0; i < seg_modules->size (); i++)
+ {
+ Module *m = seg_modules->fetch (i);
+ char *key = get_module_map_key (m);
+ if (key)
+ {
+ seg_modules_map->put (m->file_name, m);
+ char *bname = get_basename (key);
+ if (bname != key)
+ seg_modules_map->put (bname, m);
+ }
+ }
+ }
+
+ char *key = get_module_map_key (mod);
+ Module *cmpMod = seg_modules_map->get (key);
+ if (cmpMod && cmpMod->comparable_objs == NULL)
+ return cmpMod;
+ char *bname = get_basename (key);
+ if (bname != key)
+ {
+ cmpMod = seg_modules_map->get (bname);
+ if (cmpMod && cmpMod->comparable_objs == NULL)
+ return cmpMod;
+ }
+ return NULL;
+}
+
+Vector<Histable*> *
+LoadObject::get_comparable_objs ()
+{
+ update_comparable_objs ();
+ if (comparable_objs || dbeSession->expGroups->size () <= 1)
+ return comparable_objs;
+ comparable_objs = new Vector<Histable*>(dbeSession->expGroups->size ());
+ for (int i = 0, sz = dbeSession->expGroups->size (); i < sz; i++)
+ {
+ ExpGroup *gr = dbeSession->expGroups->fetch (i);
+ Histable *h = gr->get_comparable_loadObject (this);
+ comparable_objs->append (h);
+ if (h)
+ h->comparable_objs = comparable_objs;
+ }
+ dump_comparable_objs ();
+ return comparable_objs;
+}
+
+void
+LoadObject::append_module (Module *mod)
+{
+ seg_modules->append (mod);
+ if (seg_modules_map == NULL)
+ seg_modules_map = new HashMap<char*, Module*>;
+ char *key = get_module_map_key (mod);
+ if (key)
+ {
+ seg_modules_map->put (key, mod);
+ char *bname = get_basename (key);
+ if (bname != key)
+ seg_modules_map->put (bname, mod);
+ }
+}
+
+// LIBRARY_VISIBILITY
+Function *
+LoadObject::get_hide_function ()
+{
+ if (h_function == NULL)
+ h_function = dbeSession->create_hide_function (this);
+ return h_function;
+}
+
+DbeInstr *
+LoadObject::get_hide_instr (DbeInstr *instr)
+{
+ if (h_instr == NULL)
+ {
+ Function *hf = get_hide_function ();
+ h_instr = hf->create_hide_instr (instr);
+ }
+ return h_instr;
+}
diff --git a/gprofng/src/LoadObject.h b/gprofng/src/LoadObject.h
new file mode 100644
index 00000000000..0c997e3f2e8
--- /dev/null
+++ b/gprofng/src/LoadObject.h
@@ -0,0 +1,210 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _LOADOBJECT_H
+#define _LOADOBJECT_H
+
+// A Segment object represents a segment of the program text.
+
+#include "Histable.h"
+#include "Stabs.h"
+#include "DbeLock.h"
+
+#define JAVA_COMPILED_METHODS "JAVA_COMPILED_METHODS"
+#define DYNFUNC_SEGMENT "DYNAMIC_FUNCTIONS"
+#define SEG_FLAG_DYNAMIC 0x01
+#define SEG_FLAG_JVM 0x02
+#define SEG_FLAG_OMP 0x04
+#define SEG_FLAG_EXE 0x08
+#define SEG_FLAG_REORDER 0x10
+
+/* Hash name for all comparable executions */
+#define COMP_EXE_NAME "<COMP_EXE_NAME>"
+
+class Emsg;
+class Elf;
+class Experiment;
+class Function;
+class Module;
+template <typename Key_t, typename Value_t> class HashMap;
+template <typename Key_t, typename Value_t> class Map;
+template <class ITEM> class Vector;
+
+enum
+{
+ CMP_PATH = 1,
+ CMP_RUNTIMEPATH = 2,
+ CMP_CHKSUM = 4
+};
+
+class LoadObject : public HistableFile, public DbeLock
+{
+public:
+
+ // The various segments types.
+ enum seg_type
+ {
+ SEG_TEXT,
+ SEG_DATA,
+ SEG_BSS,
+ SEG_HEAP,
+ SEG_STACK,
+ SEG_DEVICE,
+ SEG_UNKNOWN
+ };
+
+ // These codes are stored in *.archive files
+ enum Arch_status
+ {
+ ARCHIVE_SUCCESS,
+ ARCHIVE_EXIST,
+ ARCHIVE_BAD_STABS,
+ ARCHIVE_ERR_SEG,
+ ARCHIVE_ERR_OPEN,
+ ARCHIVE_ERR_MAP,
+ ARCHIVE_WARN_MTIME,
+ ARCHIVE_WARN_HOST,
+ ARCHIVE_ERR_VERSION,
+ ARCHIVE_NO_STABS,
+ ARCHIVE_WRONG_ARCH,
+ ARCHIVE_NO_LIBDWARF,
+ ARCHIVE_NO_DWARF,
+ ARCHIVE_WARN_CHECKSUM
+ };
+
+ LoadObject (const char *loname);
+
+ static LoadObject *create_item (const char *nm, int64_t chksum);
+ static LoadObject *create_item (const char *nm, const char *_runTimePath, DbeFile *df);
+
+ virtual ~LoadObject ();
+ virtual void set_name (char *string);
+ virtual uint64_t get_addr ();
+ virtual Vector<Histable*> *get_comparable_objs ();
+
+ virtual Histable_type
+ get_type ()
+ {
+ return LOADOBJECT;
+ };
+
+ virtual int64_t
+ get_size ()
+ {
+ return size;
+ }
+
+ char *
+ get_pathname ()
+ {
+ return pathname;
+ }
+
+ void
+ set_archname (char *aname)
+ {
+ free (arch_name);
+ arch_name = aname;
+ }
+
+ bool
+ is_relocatable ()
+ {
+ return isRelocatable;
+ }
+
+ bool compare (const char *nm, int64_t _checksum);
+ int compare (const char *_path, const char *_runTimePath, DbeFile *df);
+ void set_platform (Platform_t pltf, int wsz);
+ void dump_functions (FILE *);
+ int get_index (Function *func);
+ char *get_alias (Function *func);
+ DbeInstr *find_dbeinstr (uint64_t file_off);
+ Function *find_function (uint64_t offset);
+ Function *find_function (char *fname);
+ Function *find_function (char *fname, unsigned int chksum);
+ Module *find_module (char *mname);
+ Module *get_comparable_Module (Module *mod);
+ void append_module (Module *mod);
+ Elf *get_elf ();
+ Stabs *openDebugInfo (char *fname, Stabs::Stab_status *stp = NULL);
+ Arch_status read_stabs ();
+ Arch_status sync_read_stabs ();
+ void post_process_functions ();
+ char *status_str (Arch_status rv, char *arg = NULL);
+ Function *get_hide_function ();
+ DbeInstr *get_hide_instr (DbeInstr *instr);
+ uint32_t get_checksum ();
+
+ Emsg *
+ fetch_warnings (void) // fetch the queue of warning messages
+ {
+ return warnq->fetch ();
+ }
+
+ Emsg *
+ fetch_comments (void) // fetch the queue of comment messages
+ {
+ return commentq->fetch ();
+ }
+
+ unsigned int flags; // SEG_FLAG_*
+ bool isReadStabs;
+ bool need_swap_endian;
+ int seg_idx; // for compatibility (ADDRESS)
+ seg_type type;
+ int64_t size; // size of loadobject in bytes
+ int64_t max_size; // Maximum size of loadobject in bytes
+ int64_t min_size; // Min size of loadobject in bytes.
+ Vector<Function*> *functions; // Ordered list of functions
+ Vector<Module*> *seg_modules; // list of modules
+ HashMap<char*, Module*> *modules;
+ Module *noname; // Module pointer to unknown name
+ Platform_t platform; // Sparc, Sparcv9, Intel
+ WSize_t wsize; // word size: 32,64
+ Stabs *objStabs;
+ HashMap<char*, Function*> *comp_funcs; // list of comparable functions
+ Experiment *firstExp;
+ char *runTimePath;
+ time_t mtime; // file timestamp (in seconds)
+ int64_t checksum; // file checksum
+
+private:
+ Elf *elf_lo;
+ bool elf_inited;
+ DbeInstr **instHTable; // hash table for DbeInstr
+ char *pathname; // User name of object file
+ ino64_t inode; // inode number of segment file
+ bool isRelocatable; // is relocatable .o
+ char *arch_name; // .archive name
+ Emsgqueue *warnq;
+ Emsgqueue *commentq;
+ Function **funcHTable; // hash table for functions
+ Function *h_function; // hide pseudo function
+ DbeInstr *h_instr; // hide pseudo instr
+ HashMap<char*, Module*> *seg_modules_map; // to find a comparable module
+
+ static int func_compare (const void *p1, const void *p2);
+ int read_archive ();
+ void init_datatypes ();
+ void update_datatypes (Module*, Vaddr, uint32_t datatype_id);
+};
+
+#endif /* _LOADOBJECT_H */
diff --git a/gprofng/src/MachineModel.cc b/gprofng/src/MachineModel.cc
new file mode 100644
index 00000000000..15f493aeaf6
--- /dev/null
+++ b/gprofng/src/MachineModel.cc
@@ -0,0 +1,317 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <string.h>
+#include <unistd.h>
+#include <dirent.h>
+
+#include "DbeSession.h"
+#include "Command.h"
+#include "Application.h"
+#include "MemorySpace.h"
+#include "i18n.h"
+
+#define MAXARGS 20
+
+static const char *LIBNAME = "../lib/analyzer/lib/machinemodels";
+
+char *
+DbeSession::find_mach_model (char *name)
+{
+ // Read current working directory to see if it's there
+ if (name[0] == '/')
+ {
+ // Absolute path given
+ char *path = dbe_sprintf (NTXT ("%s.ermm"), name);
+ if (access (path, R_OK | F_OK) == 0)
+ return path;
+ free (path);
+ // Don't try anywhere else
+ return NULL;
+ }
+
+ char *path = dbe_sprintf (NTXT ("./%s.ermm"), name);
+ if (access (path, R_OK | F_OK) == 0)
+ return path;
+ free (path);
+
+
+ // Read the user's home directory to see if it's there
+ char *home = getenv (NTXT ("HOME"));
+ if (home != NULL)
+ {
+ path = dbe_sprintf (NTXT ("%s/%s.ermm"), home, name);
+ if (access (path, R_OK | F_OK) == 0)
+ return path;
+ free (path);
+ }
+ if (strchr (name, (int) '/') != NULL)
+ // name has a slash; don't look in system installation directory
+ return NULL;
+
+ // Read system installation directory to see if it's there
+ path = dbe_sprintf ("%s/%s/%s.ermm", theApplication->get_run_dir (),
+ LIBNAME, name);
+ if (access (path, R_OK | F_OK) == 0)
+ return path;
+ free (path);
+ return NULL;
+}
+
+// Handle the definitions from a machinemodel file
+// Return value is NULL if it was OK, or an error message if not
+char *
+DbeSession::load_mach_model (char *_name)
+{
+ CmdType cmd_type;
+ int arg_count, cparam;
+ char *cmd, *end_cmd;
+ char *arglist[MAXARGS];
+ char *ret = NULL;
+ char *path = NULL;
+ FILE *fptr = NULL;
+
+ // Does name have .ermm suffix? If so, strip it away
+ char *name = dbe_strdup (_name);
+ size_t len = strlen (name);
+ if (len > 5 && strcmp (name + len - 5, ".ermm") == 0)
+ name[len - 5] = 0;
+
+ if ((mach_model_loaded != NULL) && (strcmp (name, mach_model_loaded) == 0))
+ {
+ ret = dbe_sprintf (GTXT ("Machine model %s is already loaded\n"), name);
+ free (name);
+ return ret;
+ }
+ else if (mach_model_loaded == NULL && len == 0)
+ {
+ ret = dbe_sprintf (GTXT ("No Machine model is loaded\n"));
+ free (name);
+ return ret;
+ }
+
+ if (len != 0)
+ {
+ // zero-length just means unload any previously loaded model; only look if non-zero
+ path = find_mach_model (name);
+ if (path == NULL)
+ {
+ ret = dbe_sprintf (GTXT ("Machine model %s not found\n"), name);
+ free (name);
+ return ret;
+ }
+ fptr = fopen (path, NTXT ("r"));
+ if (fptr == NULL)
+ {
+ ret = dbe_sprintf (GTXT ("Open of Machine model %s, file %s failed\n"), name, path);
+ free (path);
+ free (name);
+ return ret;
+ }
+ }
+
+ // We are now committed to make the new machine model the loaded one;
+ // Delete any MemoryObjects from any previously loaded machinemodel
+ if (dbeSession->mach_model_loaded != NULL)
+ {
+ Vector <char *> *oldobjs = MemorySpace::getMachineModelMemObjs
+ (dbeSession->mach_model_loaded);
+ for (int i = 0; i < oldobjs->size (); i++)
+ MemorySpace::mobj_delete (oldobjs->fetch (i));
+ delete oldobjs;
+ free (mach_model_loaded);
+ }
+ if (len == 0)
+ {
+ mach_model_loaded = NULL;
+ free (name);
+ // and there's no "loading" to do; just return
+ return NULL;
+ }
+ else
+ mach_model_loaded = name;
+
+ int line_no = 0;
+ end_cmd = NULL;
+
+ while (!feof (fptr))
+ {
+ char *script = read_line (fptr);
+ if (script == NULL)
+ continue;
+
+ line_no++;
+ strtok (script, NTXT ("\n"));
+
+ // extract the command
+ cmd = strtok (script, NTXT (" \t"));
+ if (cmd == NULL || *cmd == '#' || *cmd == '\n')
+ {
+ free (script);
+ continue;
+ }
+
+ char *remainder = strtok (NULL, NTXT ("\n"));
+ // now extract the arguments
+ int nargs = 0;
+ for (;;)
+ {
+ if (nargs >= MAXARGS)
+ {
+ ret = dbe_sprintf (GTXT ("Warning: more than %d arguments to %s command, line %d\n"),
+ MAXARGS, cmd, line_no);
+ continue;
+ }
+
+ char *nextarg = strtok (remainder, NTXT ("\n"));
+
+ if (nextarg == NULL || *nextarg == '#')
+ // either the end of the line, or a comment indicator
+ break;
+ arglist[nargs++] = parse_qstring (nextarg, &end_cmd);
+ remainder = end_cmd;
+ if (remainder == NULL)
+ break;
+
+ // skip any blanks or tabs to get to next argument
+ while ((*remainder == ' ') || (*remainder == '\t'))
+ remainder++;
+ }
+
+ cmd_type = Command::get_command (cmd, arg_count, cparam);
+ // check for extra arguments
+ if (cmd_type != UNKNOWN_CMD && cmd_type != INDXOBJDEF && nargs > arg_count)
+ ret = dbe_sprintf (GTXT ("Warning: extra arguments to %s command, line %d\n"),
+ cmd, line_no);
+ if (nargs < arg_count)
+ {
+ ret = dbe_sprintf (GTXT ("Error: missing arguments to %s command, line %d\n"),
+ cmd, line_no);
+
+ // ignore this command
+ free (script);
+ continue;
+ }
+
+ switch (cmd_type)
+ {
+ case INDXOBJDEF:
+ {
+ char *err = dbeSession->indxobj_define (arglist[0], NULL,
+ arglist[1], (nargs >= 3) ? PTXT (arglist[2]) : NULL,
+ (nargs >= 4) ? PTXT (arglist[3]) : NULL);
+ if (err != NULL)
+ ret = dbe_sprintf (GTXT (" %s: line %d `%s %s %s'\n"),
+ err, line_no, cmd, arglist[0], arglist[1]);
+ break;
+ }
+ case COMMENT:
+ // ignore the line
+ break;
+ default:
+ {
+ // unexpected command in a machinemodel file
+ ret = dbe_sprintf (GTXT ("Unexpected command in machinemodel file %s on line %d: `%.64s'\n"),
+ path, line_no, cmd);
+ break;
+ }
+ }
+ free (script);
+ }
+ fclose (fptr);
+ return ret;
+}
+
+Vector<char*> *
+DbeSession::list_mach_models ()
+{
+ Vector<char*> *model_names = new Vector<char*>();
+
+ // Open the current directory to read the entries there
+ DIR *dir = opendir (NTXT ("."));
+ if (dir != NULL)
+ {
+ struct dirent *entry = NULL;
+ while ((entry = readdir (dir)) != NULL)
+ {
+ size_t len = strlen (entry->d_name);
+ if (len < 5 || strcmp (entry->d_name + len - 5, ".ermm") != 0)
+ continue;
+ char *model = dbe_strdup (entry->d_name);
+
+ // remove the .ermm suffix
+ model[len - 5] = 0;
+
+ // add to vector
+ model_names->append (dbe_strdup (model));
+ }
+ closedir (dir);
+ }
+
+ // Read the user's home directory to list the models there
+ char *home = getenv ("HOME");
+ if (home != NULL)
+ {
+ dir = opendir (home);
+ if (dir != NULL)
+ {
+ struct dirent *entry = NULL;
+ while ((entry = readdir (dir)) != NULL)
+ {
+ size_t len = strlen (entry->d_name);
+ if (len < 5 || strcmp (entry->d_name + len - 5, ".ermm") != 0)
+ continue;
+ char *model = dbe_strdup (entry->d_name);
+
+ // remove the .ermm suffix
+ model[len - 5] = 0;
+
+ // add to vector
+ model_names->append (dbe_strdup (model));
+ }
+ closedir (dir);
+ }
+ }
+
+ // Read system installation directory to list the models there
+ char *sysdir = dbe_sprintf ("%s/%s", theApplication->get_run_dir (), LIBNAME);
+
+ dir = opendir (sysdir);
+ if (dir != NULL)
+ {
+ struct dirent *entry = NULL;
+ while ((entry = readdir (dir)) != NULL)
+ {
+ size_t len = strlen (entry->d_name);
+ if (len < 5 || strcmp (entry->d_name + len - 5, ".ermm") != 0)
+ continue;
+ char *model = dbe_strdup (entry->d_name);
+
+ // remove the .ermm suffix
+ model[len - 5] = 0;
+
+ // add to vector
+ model_names->append (dbe_strdup (model));
+ }
+ closedir (dir);
+ }
+ return model_names;
+}
diff --git a/gprofng/src/Makefile.am b/gprofng/src/Makefile.am
new file mode 100644
index 00000000000..0718ab61162
--- /dev/null
+++ b/gprofng/src/Makefile.am
@@ -0,0 +1,217 @@
+## Process this file with automake to generate Makefile.in
+#
+# Copyright (C) 2021 Free Software Foundation, Inc.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 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; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+AUTOMAKE_OPTIONS = foreign
+ACLOCAL_AMFLAGS = -I . -I .. -I ../..
+
+CCSOURCES = \
+ Application.cc \
+ BaseMetric.cc \
+ BaseMetricTreeNode.cc \
+ CallStack.cc \
+ CatchOutOfMemory.cc \
+ ClassFile.cc \
+ Command.cc \
+ CompCom.cc \
+ DataObject.cc \
+ DataSpace.cc \
+ Data_window.cc \
+ DataStream.cc \
+ DbeApplication.cc \
+ DbeFile.cc \
+ DbeJarFile.cc \
+ DbeLock.cc \
+ DbeSession.cc \
+ DbeThread.cc \
+ DbeView.cc \
+ DerivedMetrics.cc \
+ Disasm.cc \
+ Dwarf.cc \
+ DwarfLib.cc \
+ Elf.cc \
+ Emsg.cc \
+ Experiment.cc \
+ Exp_Layout.cc \
+ ExpGroup.cc \
+ Expression.cc \
+ FileData.cc \
+ Filter.cc \
+ FilterSet.cc \
+ Function.cc \
+ HeapMap.cc \
+ HeapData.cc \
+ HeapActivity.cc \
+ Hist_data.cc \
+ IndexObject.cc \
+ IOActivity.cc \
+ LoadObject.cc \
+ MachineModel.cc \
+ MemObject.cc \
+ MemorySpace.cc \
+ Metric.cc \
+ MetricList.cc \
+ Module.cc \
+ Ovw_data.cc \
+ PRBTree.cc \
+ PathTree.cc \
+ PreviewExp.cc \
+ Print.cc \
+ SAXParserFactory.cc \
+ Sample.cc \
+ Settings.cc \
+ SourceFile.cc \
+ Stabs.cc \
+ Stats_data.cc \
+ StringBuilder.cc \
+ Table.cc \
+ QLParser.tab.cc \
+ dbe_collctrl.cc \
+ i18n.cc \
+ parse.cc \
+ UserLabel.cc \
+ util.cc \
+ Dbe.cc \
+ $(NULL)
+
+CSOURCES = \
+ dbe_hwcdrv.c \
+ dbe_hwcfuncs.c \
+ dbe_hwctable.c \
+ dbe_memmgr.c \
+ gethrtime.c \
+ $(NULL)
+
+LIBGPROFNG = libgprofng.la
+
+# This is where we get zlib from. zlibdir is -L../zlib and zlibinc is
+# -I../zlib, unless we were configured with --with-system-zlib, in which
+# case both are empty.
+ZLIB = @zlibdir@ -lz
+ZLIBINC = @zlibinc@
+
+AM_CPPFLAGS = $(GPROFNG_CPPFLAGS) -DLOCALEDIR=\"@localedir@\" -I.. -I$(srcdir) \
+ -I$(srcdir)/../common \
+ -I$(srcdir)/../../include -I$(srcdir)/../../opcodes \
+ -I../../bfd -I$(srcdir)/../../bfd $(ZLIBINC)
+AM_CFLAGS = $(GPROFNG_CFLAGS) $(PTHREAD_CFLAGS) \
+ $(GPROFNG_NO_FORMAT_TRUNCATION_CFLAGS) \
+ $(GPROFNG_NO_SWITCH_CFLAGS)
+AM_CXXFLAGS = $(AM_CFLAGS)
+
+QLParser.tab.cc QLParser.tab.hh: QLParser.yy
+ $(BISON) $^
+
+man_MANS = gprofng.1 \
+ gp-archive.1 \
+ gp-collect-app.1 \
+ gp-display-src.1 \
+ gp-display-text.1
+
+MAINTAINERCLEANFILES = $(man_MANS)
+
+BUILT_SOURCES = QLParser.tab.hh
+EXTRA_DIST = QLParser.yy $(man_MANS)
+
+
+pkglib_LTLIBRARIES = $(LIBGPROFNG)
+libgprofng_la_SOURCES = $(CCSOURCES) $(CSOURCES)
+libgprofng_la_LDFLAGS = -version-info 0:0:0
+libgprofng_la_LIBADD = $(top_builddir)/../opcodes/libopcodes.la \
+ $(top_builddir)/../bfd/libbfd.la \
+ $(GPROFNG_LIBADD) \
+ $(PTHREAD_LIBS) -ldl
+
+dbedir = $(prefix)/etc
+dbe_DATA = $(srcdir)/gprofng.rc
+
+
+bin_PROGRAMS = gp-archive gp-collect-app gprofng gp-display-text gp-display-src
+
+gp_archive_SOURCES = gp-archive.cc ArchiveExp.cc
+gp_archive_LDADD = $(LIBGPROFNG) $(CLOCK_GETTIME_LINK) $(ZLIB)
+
+gp_collect_app_SOURCES = gp-collect-app.cc checks.cc envsets.cc count.cc
+gp_collect_app_LDADD = $(LIBGPROFNG) $(CLOCK_GETTIME_LINK) $(ZLIB)
+
+gprofng_SOURCES = gprofng.cc
+gprofng_LDADD = $(LIBGPROFNG) $(CLOCK_GETTIME_LINK) $(ZLIB)
+
+gp_display_src_SOURCES = gp-display-src.cc
+gp_display_src_LDADD = $(LIBGPROFNG) $(CLOCK_GETTIME_LINK) $(ZLIB)
+
+gp_display_text_SOURCES = gp-display-text.cc ipc.cc ipcio.cc
+gp_display_text_LDADD = $(LIBGPROFNG) $(CLOCK_GETTIME_LINK) $(ZLIB)
+
+
+if BUILD_MAN
+
+# The man pages depend on the version number and on a help2man include file.
+common_mandeps = $(top_srcdir)/../bfd/version.m4
+
+# Use -o so that the `missing' program can infer the output file.
+# Embolden subcommand names in the output, and include a SEE ALSO.
+# Arrange to regenerate the output if we have help2man, but leave the
+# disted output there otherwise.
+# Some extra annoying complexity is in place so that people without
+# help2man dno't accidentally overwrite the manpage.
+
+INFO_PAGE = "gprofng"
+MANUAL = "User Commands"
+TEXT_GPROFNG = "the driver for the gprofng tool suite"
+TEXT_GP_ARCHIVE = "archive gprofng experiment data"
+TEXT_GP_COLLECT_APP = "collect performance data for the target application"
+TEXT_GP_DISPLAY_SRC = "display the source code, optionally interleaved with the disassembly of the target object"
+TEXT_GP_DISPLAY_TEXT = "display the performance data in plain text format"
+
+HELP2MAN_OPT = --libtool --no-info --info-page=$(INFO_PAGE) --manual=$(MANUAL)
+H2M_FILTER = | sed 's/\.TP/\.TP\n.B/' | sed 's/Commands:/\.SH COMMANDS/' \
+ | sed 's/See also:/\.SH SEE ALSO/' | sed 's/Documentation:/.SH DOCUMENTATION/' \
+ | sed 's/Limitations:/.SH LIMITATIONS/'
+
+gprofng.1: $(srcdir)/gprofng.cc $(common_mandeps) | ./gprofng$(EXEEXT)
+ $(AM_V_GEN)_BUILDING_MANPAGE=1 $(HELP2MAN) $(HELP2MAN_OPT) \
+ --name=$(TEXT_GPROFNG) ./gprofng$(EXEEXT) $(H2M_FILTER) > $@
+
+gp-archive.1: $(srcdir)/gp-archive.cc $(common_mandeps) | ./gp-archive$(EXEEXT)
+ $(AM_V_GEN)_BUILDING_MANPAGE=1 $(HELP2MAN) $(HELP2MAN_OPT) \
+ --name=$(TEXT_GP_ARCHIVE) ./gp-archive$(EXEEXT) $(H2M_FILTER) > $@
+
+gp-collect-app.1: $(srcdir)/gp-collect-app.cc $(common_mandeps) | ./gp-collect-app$(EXEEXT)
+ $(AM_V_GEN)_BUILDING_MANPAGE=1 $(HELP2MAN) $(HELP2MAN_OPT) \
+ --name=$(TEXT_GP_COLLECT_APP) ./gp-collect-app$(EXEEXT) $(H2M_FILTER) > $@
+
+gp-display-src.1: $(srcdir)/gp-display-src.cc $(srcdir)/Command.cc \
+ $(common_mandeps) | ./gp-display-src$(EXEEXT)
+ $(AM_V_GEN)_BUILDING_MANPAGE=1 $(HELP2MAN) $(HELP2MAN_OPT) \
+ --name=$(TEXT_GP_DISPLAY_SRC) ./gp-display-src$(EXEEXT) $(H2M_FILTER) > $@
+
+gp-display-text.1: $(srcdir)/gp-display-text.cc $(srcdir)/Command.cc \
+ $(common_mandeps) | ./gp-display-text$(EXEEXT)
+ $(AM_V_GEN)_BUILDING_MANPAGE=1 $(HELP2MAN) $(HELP2MAN_OPT) \
+ --name=$(TEXT_GP_DISPLAY_TEXT) ./gp-display-text$(EXEEXT) $(H2M_FILTER) > $@
+
+endif
+
+# Distribution involves building the binaries to generate the manpage,
+# so ensure that the necessary libraries are built at dist time.
+dist-hook: $(LIBGPROFNG)
+
+.PHONY: install-data-local
+
+install-data-local: install-pkglibLTLIBRARIES
+ rm -f $(DESTDIR)/$(pkglibdir)/*.la $(DESTDIR)/$(pkglibdir)/*.a
diff --git a/gprofng/src/Makefile.in b/gprofng/src/Makefile.in
new file mode 100644
index 00000000000..1de9b36c2b7
--- /dev/null
+++ b/gprofng/src/Makefile.in
@@ -0,0 +1,1206 @@
+# Makefile.in generated by automake 1.15.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2017 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+#
+# Copyright (C) 2021 Free Software Foundation, Inc.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 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; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+bin_PROGRAMS = gp-archive$(EXEEXT) gp-collect-app$(EXEEXT) \
+ gprofng$(EXEEXT) gp-display-text$(EXEEXT) \
+ gp-display-src$(EXEEXT)
+subdir = src
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/../libtool.m4 \
+ $(top_srcdir)/../ltoptions.m4 $(top_srcdir)/../ltsugar.m4 \
+ $(top_srcdir)/../ltversion.m4 $(top_srcdir)/../lt~obsolete.m4 \
+ $(top_srcdir)/acinclude.m4 $(top_srcdir)/../config/warnings.m4 \
+ $(top_srcdir)/../config/enable.m4 \
+ $(top_srcdir)/../config/ax_pthread.m4 \
+ $(top_srcdir)/config/bison.m4 $(top_srcdir)/../bfd/version.m4 \
+ $(top_srcdir)/../config/zlib.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+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)$(pkglibdir)" "$(DESTDIR)$(bindir)" \
+ "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(dbedir)"
+LTLIBRARIES = $(pkglib_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libgprofng_la_DEPENDENCIES = $(top_builddir)/../opcodes/libopcodes.la \
+ $(top_builddir)/../bfd/libbfd.la $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1)
+am__objects_1 = Application.lo BaseMetric.lo BaseMetricTreeNode.lo \
+ CallStack.lo CatchOutOfMemory.lo ClassFile.lo Command.lo \
+ CompCom.lo DataObject.lo DataSpace.lo Data_window.lo \
+ DataStream.lo DbeApplication.lo DbeFile.lo DbeJarFile.lo \
+ DbeLock.lo DbeSession.lo DbeThread.lo DbeView.lo \
+ DerivedMetrics.lo Disasm.lo Dwarf.lo DwarfLib.lo Elf.lo \
+ Emsg.lo Experiment.lo Exp_Layout.lo ExpGroup.lo Expression.lo \
+ FileData.lo Filter.lo FilterSet.lo Function.lo HeapMap.lo \
+ HeapData.lo HeapActivity.lo Hist_data.lo IndexObject.lo \
+ IOActivity.lo LoadObject.lo MachineModel.lo MemObject.lo \
+ MemorySpace.lo Metric.lo MetricList.lo Module.lo Ovw_data.lo \
+ PRBTree.lo PathTree.lo PreviewExp.lo Print.lo \
+ SAXParserFactory.lo Sample.lo Settings.lo SourceFile.lo \
+ Stabs.lo Stats_data.lo StringBuilder.lo Table.lo \
+ QLParser.tab.lo dbe_collctrl.lo i18n.lo parse.lo UserLabel.lo \
+ util.lo Dbe.lo
+am__objects_2 = dbe_hwcdrv.lo dbe_hwcfuncs.lo dbe_hwctable.lo \
+ dbe_memmgr.lo gethrtime.lo
+am_libgprofng_la_OBJECTS = $(am__objects_1) $(am__objects_2)
+libgprofng_la_OBJECTS = $(am_libgprofng_la_OBJECTS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+libgprofng_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
+ $(AM_CXXFLAGS) $(CXXFLAGS) $(libgprofng_la_LDFLAGS) $(LDFLAGS) \
+ -o $@
+PROGRAMS = $(bin_PROGRAMS)
+am_gp_archive_OBJECTS = gp-archive.$(OBJEXT) ArchiveExp.$(OBJEXT)
+gp_archive_OBJECTS = $(am_gp_archive_OBJECTS)
+gp_archive_DEPENDENCIES = $(LIBGPROFNG) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1)
+am_gp_collect_app_OBJECTS = gp-collect-app.$(OBJEXT) checks.$(OBJEXT) \
+ envsets.$(OBJEXT) count.$(OBJEXT)
+gp_collect_app_OBJECTS = $(am_gp_collect_app_OBJECTS)
+gp_collect_app_DEPENDENCIES = $(LIBGPROFNG) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1)
+am_gp_display_src_OBJECTS = gp-display-src.$(OBJEXT)
+gp_display_src_OBJECTS = $(am_gp_display_src_OBJECTS)
+gp_display_src_DEPENDENCIES = $(LIBGPROFNG) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1)
+am_gp_display_text_OBJECTS = gp-display-text.$(OBJEXT) ipc.$(OBJEXT) \
+ ipcio.$(OBJEXT)
+gp_display_text_OBJECTS = $(am_gp_display_text_OBJECTS)
+gp_display_text_DEPENDENCIES = $(LIBGPROFNG) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1)
+am_gprofng_OBJECTS = gprofng.$(OBJEXT)
+gprofng_OBJECTS = $(am_gprofng_OBJECTS)
+gprofng_DEPENDENCIES = $(LIBGPROFNG) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1)
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/../depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CXXFLAGS) $(CXXFLAGS)
+AM_V_CXX = $(am__v_CXX_@AM_V@)
+am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@)
+am__v_CXX_0 = @echo " CXX " $@;
+am__v_CXX_1 =
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
+ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CXXLD = $(am__v_CXXLD_@AM_V@)
+am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@)
+am__v_CXXLD_0 = @echo " CXXLD " $@;
+am__v_CXXLD_1 =
+SOURCES = $(libgprofng_la_SOURCES) $(gp_archive_SOURCES) \
+ $(gp_collect_app_SOURCES) $(gp_display_src_SOURCES) \
+ $(gp_display_text_SOURCES) $(gprofng_SOURCES)
+DIST_SOURCES = $(libgprofng_la_SOURCES) $(gp_archive_SOURCES) \
+ $(gp_collect_app_SOURCES) $(gp_display_src_SOURCES) \
+ $(gp_display_text_SOURCES) $(gprofng_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+man1dir = $(mandir)/man1
+NROFF = nroff
+MANS = $(man_MANS)
+DATA = $(dbe_DATA)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/../depcomp \
+ $(top_srcdir)/../mkinstalldirs
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BISON = @BISON@
+BUILD_SUBDIRS = @BUILD_SUBDIRS@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CLOCK_GETTIME_LINK = @CLOCK_GETTIME_LINK@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+EXPECT = @EXPECT@
+FGREP = @FGREP@
+GPROFNG_BROKEN_JAVAC = @GPROFNG_BROKEN_JAVAC@
+GPROFNG_CFLAGS = @GPROFNG_CFLAGS@
+GPROFNG_CPPFLAGS = @GPROFNG_CPPFLAGS@
+GPROFNG_LIBADD = @GPROFNG_LIBADD@
+GPROFNG_NO_FORMAT_TRUNCATION_CFLAGS = @GPROFNG_NO_FORMAT_TRUNCATION_CFLAGS@
+GPROFNG_NO_SWITCH_CFLAGS = @GPROFNG_NO_SWITCH_CFLAGS@
+GREP = @GREP@
+HELP2MAN = @HELP2MAN@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+JAVA = @JAVA@
+JAVAC = @JAVAC@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LD_NO_AS_NEEDED = @LD_NO_AS_NEEDED@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+WERROR = @WERROR@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+gprofng_cflags = @gprofng_cflags@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+jdk_inc = @jdk_inc@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+zlibdir = @zlibdir@
+zlibinc = @zlibinc@
+AUTOMAKE_OPTIONS = foreign
+ACLOCAL_AMFLAGS = -I . -I .. -I ../..
+CCSOURCES = \
+ Application.cc \
+ BaseMetric.cc \
+ BaseMetricTreeNode.cc \
+ CallStack.cc \
+ CatchOutOfMemory.cc \
+ ClassFile.cc \
+ Command.cc \
+ CompCom.cc \
+ DataObject.cc \
+ DataSpace.cc \
+ Data_window.cc \
+ DataStream.cc \
+ DbeApplication.cc \
+ DbeFile.cc \
+ DbeJarFile.cc \
+ DbeLock.cc \
+ DbeSession.cc \
+ DbeThread.cc \
+ DbeView.cc \
+ DerivedMetrics.cc \
+ Disasm.cc \
+ Dwarf.cc \
+ DwarfLib.cc \
+ Elf.cc \
+ Emsg.cc \
+ Experiment.cc \
+ Exp_Layout.cc \
+ ExpGroup.cc \
+ Expression.cc \
+ FileData.cc \
+ Filter.cc \
+ FilterSet.cc \
+ Function.cc \
+ HeapMap.cc \
+ HeapData.cc \
+ HeapActivity.cc \
+ Hist_data.cc \
+ IndexObject.cc \
+ IOActivity.cc \
+ LoadObject.cc \
+ MachineModel.cc \
+ MemObject.cc \
+ MemorySpace.cc \
+ Metric.cc \
+ MetricList.cc \
+ Module.cc \
+ Ovw_data.cc \
+ PRBTree.cc \
+ PathTree.cc \
+ PreviewExp.cc \
+ Print.cc \
+ SAXParserFactory.cc \
+ Sample.cc \
+ Settings.cc \
+ SourceFile.cc \
+ Stabs.cc \
+ Stats_data.cc \
+ StringBuilder.cc \
+ Table.cc \
+ QLParser.tab.cc \
+ dbe_collctrl.cc \
+ i18n.cc \
+ parse.cc \
+ UserLabel.cc \
+ util.cc \
+ Dbe.cc \
+ $(NULL)
+
+CSOURCES = \
+ dbe_hwcdrv.c \
+ dbe_hwcfuncs.c \
+ dbe_hwctable.c \
+ dbe_memmgr.c \
+ gethrtime.c \
+ $(NULL)
+
+LIBGPROFNG = libgprofng.la
+
+# This is where we get zlib from. zlibdir is -L../zlib and zlibinc is
+# -I../zlib, unless we were configured with --with-system-zlib, in which
+# case both are empty.
+ZLIB = @zlibdir@ -lz
+ZLIBINC = @zlibinc@
+AM_CPPFLAGS = $(GPROFNG_CPPFLAGS) -DLOCALEDIR=\"@localedir@\" -I.. -I$(srcdir) \
+ -I$(srcdir)/../common \
+ -I$(srcdir)/../../include -I$(srcdir)/../../opcodes \
+ -I../../bfd -I$(srcdir)/../../bfd $(ZLIBINC)
+
+AM_CFLAGS = $(GPROFNG_CFLAGS) $(PTHREAD_CFLAGS) \
+ $(GPROFNG_NO_FORMAT_TRUNCATION_CFLAGS) \
+ $(GPROFNG_NO_SWITCH_CFLAGS)
+
+AM_CXXFLAGS = $(AM_CFLAGS)
+man_MANS = gprofng.1 \
+ gp-archive.1 \
+ gp-collect-app.1 \
+ gp-display-src.1 \
+ gp-display-text.1
+
+MAINTAINERCLEANFILES = $(man_MANS)
+BUILT_SOURCES = QLParser.tab.hh
+EXTRA_DIST = QLParser.yy $(man_MANS)
+pkglib_LTLIBRARIES = $(LIBGPROFNG)
+libgprofng_la_SOURCES = $(CCSOURCES) $(CSOURCES)
+libgprofng_la_LDFLAGS = -version-info 0:0:0
+libgprofng_la_LIBADD = $(top_builddir)/../opcodes/libopcodes.la \
+ $(top_builddir)/../bfd/libbfd.la \
+ $(GPROFNG_LIBADD) \
+ $(PTHREAD_LIBS) -ldl
+
+dbedir = $(prefix)/etc
+dbe_DATA = $(srcdir)/gprofng.rc
+gp_archive_SOURCES = gp-archive.cc ArchiveExp.cc
+gp_archive_LDADD = $(LIBGPROFNG) $(CLOCK_GETTIME_LINK) $(ZLIB)
+gp_collect_app_SOURCES = gp-collect-app.cc checks.cc envsets.cc count.cc
+gp_collect_app_LDADD = $(LIBGPROFNG) $(CLOCK_GETTIME_LINK) $(ZLIB)
+gprofng_SOURCES = gprofng.cc
+gprofng_LDADD = $(LIBGPROFNG) $(CLOCK_GETTIME_LINK) $(ZLIB)
+gp_display_src_SOURCES = gp-display-src.cc
+gp_display_src_LDADD = $(LIBGPROFNG) $(CLOCK_GETTIME_LINK) $(ZLIB)
+gp_display_text_SOURCES = gp-display-text.cc ipc.cc ipcio.cc
+gp_display_text_LDADD = $(LIBGPROFNG) $(CLOCK_GETTIME_LINK) $(ZLIB)
+
+# The man pages depend on the version number and on a help2man include file.
+@BUILD_MAN_TRUE@common_mandeps = $(top_srcdir)/../bfd/version.m4
+
+# Use -o so that the `missing' program can infer the output file.
+# Embolden subcommand names in the output, and include a SEE ALSO.
+# Arrange to regenerate the output if we have help2man, but leave the
+# disted output there otherwise.
+# Some extra annoying complexity is in place so that people without
+# help2man dno't accidentally overwrite the manpage.
+@BUILD_MAN_TRUE@INFO_PAGE = "gprofng"
+@BUILD_MAN_TRUE@MANUAL = "User Commands"
+@BUILD_MAN_TRUE@TEXT_GPROFNG = "the driver for the gprofng tool suite"
+@BUILD_MAN_TRUE@TEXT_GP_ARCHIVE = "archive gprofng experiment data"
+@BUILD_MAN_TRUE@TEXT_GP_COLLECT_APP = "collect performance data for the target application"
+@BUILD_MAN_TRUE@TEXT_GP_DISPLAY_SRC = "display the source code, optionally interleaved with the disassembly of the target object"
+@BUILD_MAN_TRUE@TEXT_GP_DISPLAY_TEXT = "display the performance data in plain text format"
+@BUILD_MAN_TRUE@HELP2MAN_OPT = --libtool --no-info --info-page=$(INFO_PAGE) --manual=$(MANUAL)
+@BUILD_MAN_TRUE@H2M_FILTER = | sed 's/\.TP/\.TP\n.B/' | sed 's/Commands:/\.SH COMMANDS/' \
+@BUILD_MAN_TRUE@ | sed 's/See also:/\.SH SEE ALSO/' | sed 's/Documentation:/.SH DOCUMENTATION/' \
+@BUILD_MAN_TRUE@ | sed 's/Limitations:/.SH LIMITATIONS/'
+
+all: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .cc .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign src/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+install-pkglibLTLIBRARIES: $(pkglib_LTLIBRARIES)
+ @$(NORMAL_INSTALL)
+ @list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \
+ list2=; for p in $$list; do \
+ if test -f $$p; then \
+ list2="$$list2 $$p"; \
+ else :; fi; \
+ done; \
+ test -z "$$list2" || { \
+ echo " $(MKDIR_P) '$(DESTDIR)$(pkglibdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(pkglibdir)" || exit 1; \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pkglibdir)'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pkglibdir)"; \
+ }
+
+uninstall-pkglibLTLIBRARIES:
+ @$(NORMAL_UNINSTALL)
+ @list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkglibdir)/$$f'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkglibdir)/$$f"; \
+ done
+
+clean-pkglibLTLIBRARIES:
+ -test -z "$(pkglib_LTLIBRARIES)" || rm -f $(pkglib_LTLIBRARIES)
+ @list='$(pkglib_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+
+libgprofng.la: $(libgprofng_la_OBJECTS) $(libgprofng_la_DEPENDENCIES) $(EXTRA_libgprofng_la_DEPENDENCIES)
+ $(AM_V_CXXLD)$(libgprofng_la_LINK) -rpath $(pkglibdir) $(libgprofng_la_OBJECTS) $(libgprofng_la_LIBADD) $(LIBS)
+install-binPROGRAMS: $(bin_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+ fi; \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed 's/$(EXEEXT)$$//' | \
+ while read p p1; do if test -f $$p \
+ || test -f $$p1 \
+ ; then echo "$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n;h' \
+ -e 's|.*|.|' \
+ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+ sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) files[d] = files[d] " " $$1; \
+ else { print "f", $$3 "/" $$4, $$1; } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-binPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+ -e 's/$$/$(EXEEXT)/' \
+ `; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(bindir)" && rm -f $$files
+
+clean-binPROGRAMS:
+ @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+
+gp-archive$(EXEEXT): $(gp_archive_OBJECTS) $(gp_archive_DEPENDENCIES) $(EXTRA_gp_archive_DEPENDENCIES)
+ @rm -f gp-archive$(EXEEXT)
+ $(AM_V_CXXLD)$(CXXLINK) $(gp_archive_OBJECTS) $(gp_archive_LDADD) $(LIBS)
+
+gp-collect-app$(EXEEXT): $(gp_collect_app_OBJECTS) $(gp_collect_app_DEPENDENCIES) $(EXTRA_gp_collect_app_DEPENDENCIES)
+ @rm -f gp-collect-app$(EXEEXT)
+ $(AM_V_CXXLD)$(CXXLINK) $(gp_collect_app_OBJECTS) $(gp_collect_app_LDADD) $(LIBS)
+
+gp-display-src$(EXEEXT): $(gp_display_src_OBJECTS) $(gp_display_src_DEPENDENCIES) $(EXTRA_gp_display_src_DEPENDENCIES)
+ @rm -f gp-display-src$(EXEEXT)
+ $(AM_V_CXXLD)$(CXXLINK) $(gp_display_src_OBJECTS) $(gp_display_src_LDADD) $(LIBS)
+
+gp-display-text$(EXEEXT): $(gp_display_text_OBJECTS) $(gp_display_text_DEPENDENCIES) $(EXTRA_gp_display_text_DEPENDENCIES)
+ @rm -f gp-display-text$(EXEEXT)
+ $(AM_V_CXXLD)$(CXXLINK) $(gp_display_text_OBJECTS) $(gp_display_text_LDADD) $(LIBS)
+
+gprofng$(EXEEXT): $(gprofng_OBJECTS) $(gprofng_DEPENDENCIES) $(EXTRA_gprofng_DEPENDENCIES)
+ @rm -f gprofng$(EXEEXT)
+ $(AM_V_CXXLD)$(CXXLINK) $(gprofng_OBJECTS) $(gprofng_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Application.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ArchiveExp.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BaseMetric.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BaseMetricTreeNode.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CallStack.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CatchOutOfMemory.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ClassFile.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Command.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CompCom.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DataObject.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DataSpace.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DataStream.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Data_window.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Dbe.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DbeApplication.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DbeFile.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DbeJarFile.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DbeLock.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DbeSession.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DbeThread.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DbeView.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DerivedMetrics.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Disasm.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Dwarf.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DwarfLib.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Elf.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Emsg.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ExpGroup.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Exp_Layout.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Experiment.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Expression.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FileData.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Filter.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FilterSet.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Function.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/HeapActivity.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/HeapData.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/HeapMap.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Hist_data.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/IOActivity.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/IndexObject.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LoadObject.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MachineModel.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MemObject.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MemorySpace.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Metric.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MetricList.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Module.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Ovw_data.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PRBTree.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PathTree.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PreviewExp.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Print.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/QLParser.tab.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SAXParserFactory.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Sample.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Settings.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SourceFile.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Stabs.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Stats_data.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/StringBuilder.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Table.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/UserLabel.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/checks.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/count.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dbe_collctrl.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dbe_hwcdrv.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dbe_hwcfuncs.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dbe_hwctable.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dbe_memmgr.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/envsets.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gethrtime.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gp-archive.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gp-collect-app.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gp-display-src.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gp-display-text.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gprofng.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i18n.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipcio.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parse.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/util.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
+@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+.cc.o:
+@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $<
+
+.cc.obj:
+@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
+@am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cc.lo:
+@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
+@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-man1: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man1dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.1[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man1:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man1dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.1[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir)
+install-dbeDATA: $(dbe_DATA)
+ @$(NORMAL_INSTALL)
+ @list='$(dbe_DATA)'; test -n "$(dbedir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(dbedir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(dbedir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dbedir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(dbedir)" || exit $$?; \
+ done
+
+uninstall-dbeDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(dbe_DATA)'; test -n "$(dbedir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(dbedir)'; $(am__uninstall_files_from_dir)
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$(top_distdir)" distdir="$(distdir)" \
+ dist-hook
+check-am: all-am
+check: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(MANS) $(DATA)
+installdirs:
+ for dir in "$(DESTDIR)$(pkglibdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(dbedir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ 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:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic clean-libtool \
+ clean-pkglibLTLIBRARIES mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local install-dbeDATA install-man
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-binPROGRAMS install-pkglibLTLIBRARIES
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man: install-man1
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS uninstall-dbeDATA uninstall-man \
+ uninstall-pkglibLTLIBRARIES
+
+uninstall-man: uninstall-man1
+
+.MAKE: all check install install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \
+ clean-binPROGRAMS clean-generic clean-libtool \
+ clean-pkglibLTLIBRARIES cscopelist-am ctags ctags-am dist-hook \
+ distclean distclean-compile distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-binPROGRAMS \
+ install-data install-data-am install-data-local \
+ install-dbeDATA install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-man1 install-pdf \
+ install-pdf-am install-pkglibLTLIBRARIES install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
+ uninstall-am uninstall-binPROGRAMS uninstall-dbeDATA \
+ uninstall-man uninstall-man1 uninstall-pkglibLTLIBRARIES
+
+.PRECIOUS: Makefile
+
+
+QLParser.tab.cc QLParser.tab.hh: QLParser.yy
+ $(BISON) $^
+
+@BUILD_MAN_TRUE@gprofng.1: $(srcdir)/gprofng.cc $(common_mandeps) | ./gprofng$(EXEEXT)
+@BUILD_MAN_TRUE@ $(AM_V_GEN)_BUILDING_MANPAGE=1 $(HELP2MAN) $(HELP2MAN_OPT) \
+@BUILD_MAN_TRUE@ --name=$(TEXT_GPROFNG) ./gprofng$(EXEEXT) $(H2M_FILTER) > $@
+
+@BUILD_MAN_TRUE@gp-archive.1: $(srcdir)/gp-archive.cc $(common_mandeps) | ./gp-archive$(EXEEXT)
+@BUILD_MAN_TRUE@ $(AM_V_GEN)_BUILDING_MANPAGE=1 $(HELP2MAN) $(HELP2MAN_OPT) \
+@BUILD_MAN_TRUE@ --name=$(TEXT_GP_ARCHIVE) ./gp-archive$(EXEEXT) $(H2M_FILTER) > $@
+
+@BUILD_MAN_TRUE@gp-collect-app.1: $(srcdir)/gp-collect-app.cc $(common_mandeps) | ./gp-collect-app$(EXEEXT)
+@BUILD_MAN_TRUE@ $(AM_V_GEN)_BUILDING_MANPAGE=1 $(HELP2MAN) $(HELP2MAN_OPT) \
+@BUILD_MAN_TRUE@ --name=$(TEXT_GP_COLLECT_APP) ./gp-collect-app$(EXEEXT) $(H2M_FILTER) > $@
+
+@BUILD_MAN_TRUE@gp-display-src.1: $(srcdir)/gp-display-src.cc $(srcdir)/Command.cc \
+@BUILD_MAN_TRUE@ $(common_mandeps) | ./gp-display-src$(EXEEXT)
+@BUILD_MAN_TRUE@ $(AM_V_GEN)_BUILDING_MANPAGE=1 $(HELP2MAN) $(HELP2MAN_OPT) \
+@BUILD_MAN_TRUE@ --name=$(TEXT_GP_DISPLAY_SRC) ./gp-display-src$(EXEEXT) $(H2M_FILTER) > $@
+
+@BUILD_MAN_TRUE@gp-display-text.1: $(srcdir)/gp-display-text.cc $(srcdir)/Command.cc \
+@BUILD_MAN_TRUE@ $(common_mandeps) | ./gp-display-text$(EXEEXT)
+@BUILD_MAN_TRUE@ $(AM_V_GEN)_BUILDING_MANPAGE=1 $(HELP2MAN) $(HELP2MAN_OPT) \
+@BUILD_MAN_TRUE@ --name=$(TEXT_GP_DISPLAY_TEXT) ./gp-display-text$(EXEEXT) $(H2M_FILTER) > $@
+
+# Distribution involves building the binaries to generate the manpage,
+# so ensure that the necessary libraries are built at dist time.
+dist-hook: $(LIBGPROFNG)
+
+.PHONY: install-data-local
+
+install-data-local: install-pkglibLTLIBRARIES
+ rm -f $(DESTDIR)/$(pkglibdir)/*.la $(DESTDIR)/$(pkglibdir)/*.a
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/gprofng/src/Map.h b/gprofng/src/Map.h
new file mode 100644
index 00000000000..530dcfc1c54
--- /dev/null
+++ b/gprofng/src/Map.h
@@ -0,0 +1,61 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _DBE_MAP_H
+#define _DBE_MAP_H
+
+#include "vec.h"
+
+template <typename Key_t, typename Value_t>
+class Map
+{
+public:
+
+ enum Relation
+ {
+ REL_LT,
+ REL_LE,
+ REL_EQ,
+ REL_GE,
+ REL_GT
+ };
+
+ virtual ~Map () { };
+ virtual void put (Key_t key, Value_t val) = 0;
+ virtual Value_t get (Key_t key) = 0;
+ virtual Value_t get (Key_t key, Relation rel) = 0;
+ virtual Value_t remove (Key_t key) = 0;
+
+ virtual Vector<Key_t> *
+ keySet ()
+ {
+ return NULL;
+ }
+
+ virtual Vector<Value_t> *
+ values ()
+ {
+ return NULL;
+ }
+};
+
+#define destroy_map(t, p) if (p) { Vector<t> *v = p->values (); Destroy (v); delete p; }
+
+#endif
diff --git a/gprofng/src/Map2D.h b/gprofng/src/Map2D.h
new file mode 100644
index 00000000000..41b2be27c7c
--- /dev/null
+++ b/gprofng/src/Map2D.h
@@ -0,0 +1,53 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _DBE_MAP2D_H
+#define _DBE_MAP2D_H
+
+template <typename Key1_t, typename Key2_t, typename Value_t>
+class Map2D
+{
+public:
+
+ enum MapType
+ {
+ Default,
+ Interval
+ };
+
+ // Relation for the first key is always EQUAL
+ enum Relation
+ {
+ REL_EQLT,
+ REL_EQLE,
+ REL_EQEQ,
+ REL_EQGE,
+ REL_EQGT
+ };
+
+ virtual ~Map2D () { };
+ virtual void put (Key1_t key1, Key2_t key2, Value_t val) = 0;
+ virtual Value_t get (Key1_t key1, Key2_t key2) = 0;
+ virtual Value_t get (Key1_t key1, Key2_t key2, Relation rel) = 0;
+ virtual Value_t remove (Key1_t key1, Key2_t key2) = 0;
+
+};
+
+#endif
diff --git a/gprofng/src/MemObject.cc b/gprofng/src/MemObject.cc
new file mode 100644
index 00000000000..d207a99b777
--- /dev/null
+++ b/gprofng/src/MemObject.cc
@@ -0,0 +1,44 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include "Exp_Layout.h"
+#include "MemObject.h"
+#include "DataSpace.h"
+#include "ABS.h"
+#include "Dbe.h"
+#include "i18n.h"
+
+MemObj::MemObj (uint64_t _index, char *_name)
+{
+ id = _index;
+ name = _name;
+}
+
+MemObj::~MemObj ()
+{
+ free (name);
+}
+
+Histable *
+MemObj::convertto (Histable_type type, Histable*)
+{
+ return type == MEMOBJ ? this : NULL;
+}
diff --git a/gprofng/src/MemObject.h b/gprofng/src/MemObject.h
new file mode 100644
index 00000000000..6bc459ff9d6
--- /dev/null
+++ b/gprofng/src/MemObject.h
@@ -0,0 +1,62 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _MEMOBJECT_H
+#define _MEMOBJECT_H
+
+#include "Histable.h"
+#include "util.h"
+
+class MemObj : public Histable
+{
+public:
+ friend class MemorySpace;
+
+ MemObj (uint64_t _index, char *_name);
+ ~MemObj ();
+
+ virtual Histable *convertto (Histable_type, Histable* = NULL);
+
+ virtual Histable_type
+ get_type ()
+ {
+ return MEMOBJ;
+ }
+
+ virtual char *
+ get_name (NameFormat = NA)
+ {
+ return dbe_strdup (name);
+ }
+
+ virtual uint64_t
+ get_addr ()
+ {
+ return id;
+ }
+
+ uint64_t
+ get_index ()
+ {
+ return id;
+ }
+};
+
+#endif /* _MEMOBJECT_H */
diff --git a/gprofng/src/MemorySpace.cc b/gprofng/src/MemorySpace.cc
new file mode 100644
index 00000000000..3f7c78d958f
--- /dev/null
+++ b/gprofng/src/MemorySpace.cc
@@ -0,0 +1,452 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <ctype.h>
+
+#include "util.h"
+#include "DbeSession.h"
+#include "Application.h"
+#include "Experiment.h"
+#include "Exp_Layout.h"
+#include "MetricList.h"
+#include "MemObject.h"
+#include "PathTree.h"
+#include "DbeView.h"
+#include "Metric.h"
+#include "MemorySpace.h"
+#include "Table.h"
+#include "IndexObject.h"
+
+MemObjType_t::MemObjType_t ()
+{
+ type = -1;
+ name = NULL;
+ index_expr = NULL;
+ machmodel = NULL;
+ mnemonic = 0;
+ short_description = NULL;
+ long_description = NULL;
+}
+
+MemObjType_t::~MemObjType_t ()
+{
+ free (name);
+ free (index_expr);
+ free (machmodel);
+ free (short_description);
+ free (long_description);
+}
+
+MemorySpace::MemorySpace (DbeView *_dbev, int _mstype)
+{
+ char *mname;
+ dbev = _dbev;
+ phaseIdx = -1;
+
+ // set up the MemoryObject information
+ objs = new HashMap<uint64_t, MemObj*>;
+ mstype = _mstype;
+ msindex_exp = NULL;
+ msname = NULL;
+ msindex_exp_str = NULL;
+
+ // find the memory space in the table
+ MemObjType_t *mot = findMemSpaceByIndex (mstype);
+ if (mot)
+ {
+ msname = dbe_strdup (mot->name);
+ if (mot->index_expr != NULL)
+ {
+ msindex_exp_str = dbe_strdup (mot->index_expr);
+ msindex_exp = dbeSession->ql_parse (msindex_exp_str);
+ if (msindex_exp == NULL)
+ // this was checked when the definition was created
+ abort ();
+ }
+ }
+
+ // create the Total and Unknown objects
+ mname = dbe_strdup (NTXT ("<Total>"));
+ total_memobj = createMemObject ((uint64_t) - 2, mname);
+ mname = dbe_strdup (GTXT ("<Unknown>"));
+ unk_memobj = createMemObject ((uint64_t) - 1, mname);
+ hist_data_all = NULL;
+ selected_mo_index = (uint64_t) - 3;
+ sel_ind = -1;
+}
+
+MemorySpace::~MemorySpace ()
+{
+ reset ();
+ delete objs;
+ free (msname);
+ free (msindex_exp);
+ free (msindex_exp_str);
+}
+
+void
+MemorySpace::reset ()
+{
+ if (hist_data_all != NULL)
+ {
+ delete hist_data_all;
+ hist_data_all = NULL;
+ }
+ // do not clear the selected object's index
+ // selected_mo_index = (uint64_t)-3;
+
+ // destroy any existing objects, but keep the vector
+ // Now that we have a hashmap, which has its own vector,
+ // safe to delete and reallocate
+ delete objs;
+ objs = new HashMap<uint64_t, MemObj*>;
+}
+
+// find a memory object by its memory-object index
+int
+MemorySpace::findMemObject (uint64_t indx)
+{
+ int index;
+ Hist_data::HistItem *hi;
+ if (indx == (uint64_t) - 3)
+ return -1;
+
+ Vec_loop (Hist_data::HistItem *, hist_data_all->hist_items, index, hi)
+ {
+ if (((uint64_t) ((MemObj *) hi->obj)->id) == indx)
+ return index;
+ }
+ // object does not exist; filter change eliminated it, for example
+ return -1;
+}
+
+// find the object referenced in the packet
+MemObj *
+MemorySpace::lookupMemObject (Experiment *exp, DataView *packets, long i)
+{
+ uint64_t idx;
+ uint64_t va = (uint64_t) packets->getLongValue (PROP_VADDR, i);
+ if (va == ABS_UNSUPPORTED)
+ // return NULL, to ignore the record
+ return NULL;
+ if (va < ABS_CODE_RANGE)
+ // The va is not valid, rather, it's an error code
+ // return the <Unknown> object
+ return unk_memobj;
+
+ Expression::Context ctx (dbev, exp, packets, i);
+ idx = msindex_exp->eval (&ctx);
+ if (idx == (uint64_t) - 1)
+ return unk_memobj;
+
+ // do a binary search for the memory object
+ MemObj *res = objs->get (idx);
+ if (res == NULL)
+ {
+ res = createMemObject (idx, NULL);
+ objs->put (idx, res);
+ }
+ else
+ return res;
+
+ // recompute range
+ if (idx < idx_min)
+ idx_min = idx;
+ if (idx > idx_max)
+ idx_max = idx;
+ return res;
+}
+
+MemObj *
+MemorySpace::createMemObject (uint64_t index, char *moname)
+{
+ MemObj *res;
+ char *name;
+ if (moname != NULL)
+ {
+ res = new MemObj (index, moname);
+ return res;
+ }
+
+ // Custom memory objects
+ // The memory_page_size is defined in the machine model file such
+ // as ./machinemodels/t4.ermm.
+ // Most users prefer to look at the hexadecimal version of virtual
+ // addresses. Display only the hexadecimal version of virtual addresses
+ // for all machine model views with an exception of virtual page size.
+ if (dbe_strcmp (msname, NTXT ("Memory_page_size")) == 0)
+ name = dbe_sprintf (NTXT ("%s 0x%16.16llx (%llu)"), msname,
+ (long long) index, (unsigned long long) index);
+ else if (dbe_strcmp (msname, NTXT ("Memory_in_home_lgrp")) == 0)
+ name = dbe_sprintf (NTXT ("%s: %s"), msname,
+ index == 1 ? GTXT ("True") : index == 0 ? GTXT ("False")
+ : GTXT ("<Unknown>"));
+ else if (dbe_strcmp (msname, NTXT ("Memory_lgrp")) == 0)
+ name = dbe_sprintf (NTXT ("%s %llu"), msname, (unsigned long long) index);
+ else
+ name = dbe_sprintf (NTXT ("%s 0x%16.16llx"), msname, (long long) index);
+
+ res = new MemObj (index, name);
+ return res;
+}
+
+
+static Vector<MemObjType_t*> dyn_memobj_vec;
+static Vector<MemObjType_t*> *dyn_memobj = &dyn_memobj_vec;
+static Vector<int> *ordlist;
+
+// Static function to get a vector of custom memory object definitions
+
+Vector<void*> *
+MemorySpace::getMemObjects ()
+{
+ MemObjType_t *mot;
+ int ii;
+ int size = dyn_memobj->size ();
+ Vector<int> *indx = new Vector<int>(size);
+ Vector<char*> *name = new Vector<char*>(size);
+ Vector<char> *mnemonic = new Vector<char>(size);
+ Vector<char*> *formula = new Vector<char*>(size);
+ Vector<char*> *machmodel = new Vector<char*>(size);
+ Vector<int> *order = new Vector<int>(size);
+ Vector<char*> *sdesc = new Vector<char*>(size);
+ Vector<char*> *ldesc = new Vector<char*>(size);
+
+ if (size > 0)
+ {
+ Vec_loop (MemObjType_t *, dyn_memobj, ii, mot)
+ {
+ indx->store (ii, mot->type);
+ order->store (ii, ii);
+ name->store (ii, dbe_strdup (mot->name));
+ formula->store (ii, dbe_strdup (mot->index_expr));
+ mnemonic->store (ii, mot->mnemonic);
+ sdesc->store (ii, mot->short_description == NULL ? NULL
+ : dbe_strdup (mot->short_description));
+ ldesc->store (ii, mot->long_description == NULL ? NULL
+ : dbe_strdup (mot->long_description));
+ if (mot->machmodel == NULL)
+ machmodel->store (ii, NULL);
+ else
+ machmodel->store (ii, dbe_strdup (mot->machmodel));
+ }
+ }
+ Vector<void*> *res = new Vector<void*>(8);
+ res->store (0, indx);
+ res->store (1, name);
+ res->store (2, mnemonic);
+ res->store (3, formula);
+ res->store (4, machmodel);
+ res->store (5, order);
+ res->store (6, sdesc);
+ res->store (7, ldesc);
+ return (res);
+}
+
+// Static function to set order of memory object tabs
+void
+MemorySpace::set_MemTabOrder (Vector<int> *orders)
+{
+ int size = orders->size ();
+ ordlist = new Vector<int>(size);
+ for (int i = 0; i < size; i++)
+ ordlist->store (i, orders->fetch (i));
+}
+
+// Static function to define a new memory object type
+char *
+MemorySpace::mobj_define (char *mname, char *mindex_exp, char *_machmodel,
+ char *short_description, char *long_description)
+{
+ MemObjType_t *mot;
+
+ if (mname == NULL)
+ return dbe_strdup (GTXT ("No memory object name has been specified."));
+ if (isalpha ((int) (mname[0])) == 0)
+ return dbe_sprintf (GTXT ("Memory Object type name %s does not begin with an alphabetic character"),
+ mname);
+ char *p = mname;
+ while (*p != 0)
+ {
+ if (isalnum ((int) (*p)) == 0 && *p != '_')
+ return dbe_sprintf (GTXT ("Memory Object type name %s contains a non-alphanumeric character"),
+ mname);
+ p++;
+ }
+
+ mot = findMemSpaceByName (mname);
+ if (mot != NULL)
+ {
+ if (strcmp (mot->index_expr, mindex_exp) == 0)
+ // It's a redefinition, but the new definition is the same
+ return NULL;
+ return dbe_sprintf (GTXT ("Memory/Index Object type name %s is already defined"),
+ mname);
+ }
+
+ // make sure the name is not in use
+ if (dbeSession->findIndexSpaceByName (mname) >= 0)
+ return dbe_sprintf (GTXT ("Memory/Index Object type name %s is already defined"),
+ mname);
+
+ if (mindex_exp == NULL || *mindex_exp == 0)
+ return dbe_strdup (GTXT ("No index-expr has been specified."));
+
+ // verify that the index expression parses correctly
+ Expression *e = dbeSession->ql_parse (mindex_exp);
+ if (e == NULL)
+ return dbe_sprintf (GTXT ("Memory Object index expression is invalid: %s"),
+ mindex_exp);
+ delete e;
+
+ // It's OK, create the new table entry
+ char *s = dbeSession->indxobj_define (mname, NULL, mindex_exp,
+ short_description, long_description);
+ if (s)
+ return s;
+ IndexObjType_t *indObj = dbeSession->findIndexSpace (mname);
+
+ mot = new MemObjType_t;
+ mot->type = indObj->type;
+ indObj->memObj = mot;
+ mot->name = dbe_strdup (mname);
+ mot->index_expr = dbe_strdup (mindex_exp);
+ mot->mnemonic = MemorySpace::pickMnemonic (mname);
+ mot->machmodel = dbe_strdup (_machmodel);
+ mot->short_description = dbe_strdup (short_description);
+ mot->long_description = dbe_strdup (long_description);
+
+ // add it to the list
+ dyn_memobj->append (mot);
+
+ // tell the session
+ if (dbeSession != NULL)
+ dbeSession->mobj_define (mot);
+ return NULL;
+}
+
+// Static function to delete a new memory object type
+
+char *
+MemorySpace::mobj_delete (char *mname)
+{
+ if (mname == NULL)
+ return dbe_strdup (GTXT ("No memory object name has been specified.\n"));
+
+ // search the dynamic types
+ for (long idx = 0, sz = VecSize (dyn_memobj); idx < sz; idx++)
+ {
+ MemObjType_t *mt = dyn_memobj->get (idx);
+ if (strcasecmp (mt->name, mname) == 0)
+ {
+ // delete it from the vector
+ mt = dyn_memobj->remove (idx);
+ delete mt;
+ dbeSession->removeIndexSpaceByName (mname);
+ return NULL;
+ }
+ }
+ return dbe_sprintf (GTXT ("Memory object `%s' is not defined.\n"), mname);
+}
+
+// Static function to get a list of memory object names from a machine model
+
+Vector <char*> *
+MemorySpace::getMachineModelMemObjs (char *mname)
+{
+ Vector <char *> *ret = new Vector <char *> ();
+ if (mname == NULL)
+ return ret;
+
+ // search the memory objects
+ int idx;
+ MemObjType_t *mt;
+ Vec_loop (MemObjType_t*, dyn_memobj, idx, mt)
+ {
+ if (mt->machmodel != NULL && strcmp (mt->machmodel, mname) == 0)
+ {
+ char *n = dbe_strdup (mt->name);
+ ret->append (n);
+ }
+ }
+ return ret;
+}
+
+char
+MemorySpace::pickMnemonic (char *name)
+{
+ return name[0];
+}
+
+void
+MemorySpace::get_filter_keywords (Vector <void*> *res)
+{
+ Vector <char*> *kwCategory = (Vector<char*>*) res->fetch (0);
+ Vector <char*> *kwCategoryI18N = (Vector<char*>*) res->fetch (1);
+ Vector <char*> *kwDataType = (Vector<char*>*) res->fetch (2);
+ Vector <char*> *kwKeyword = (Vector<char*>*) res->fetch (3);
+ Vector <char*> *kwFormula = (Vector<char*>*) res->fetch (4);
+ Vector <char*> *kwDescription = (Vector<char*>*) res->fetch (5);
+ Vector <void*> *kwEnumDescs = (Vector<void*>*) res->fetch (6);
+
+ char *vtypeNames[] = VTYPE_TYPE_NAMES;
+ for (int i = 0, sz = dyn_memobj ? dyn_memobj->size () : 0; i < sz; i++)
+ {
+ MemObjType_t *obj = dyn_memobj->fetch (i);
+ kwCategory->append (dbe_strdup (NTXT ("FK_MEMOBJ")));
+ kwCategoryI18N->append (dbe_strdup (GTXT ("Memory Object Definitions")));
+ kwDataType->append (dbe_strdup (vtypeNames[TYPE_INT64]));
+ kwKeyword->append (dbe_strdup (obj->name));
+ kwFormula->append (dbe_strdup (obj->index_expr));
+ kwDescription->append (NULL);
+ kwEnumDescs->append (NULL);
+ }
+}
+
+MemObjType_t *
+MemorySpace::findMemSpaceByName (const char *mname)
+{
+ int idx;
+ MemObjType_t *mt;
+
+ // search the dynamic types
+ Vec_loop (MemObjType_t*, dyn_memobj, idx, mt)
+ {
+ if (strcasecmp (mt->name, mname) == 0)
+ return mt;
+ }
+ return NULL;
+}
+
+MemObjType_t *
+MemorySpace::findMemSpaceByIndex (int index)
+{
+ int idx;
+ MemObjType_t *mt;
+
+ // search the dynamic types
+ Vec_loop (MemObjType_t*, dyn_memobj, idx, mt)
+ {
+ if (mt->type == index)
+ return mt;
+ }
+ return NULL;
+}
diff --git a/gprofng/src/MemorySpace.h b/gprofng/src/MemorySpace.h
new file mode 100644
index 00000000000..7d02e5eb170
--- /dev/null
+++ b/gprofng/src/MemorySpace.h
@@ -0,0 +1,113 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _MEMORYSPACE_H
+#define _MEMORYSPACE_H
+
+#include <stdio.h>
+
+#include "dbe_structs.h"
+#include "vec.h"
+#include "Exp_Layout.h"
+#include "Histable.h"
+#include "Hist_data.h"
+#include "Metric.h"
+#include "HashMap.h"
+
+class Experiment;
+class Expression;
+class DataView;
+class DbeView;
+class MemObj;
+
+class MemObjType_t
+{
+public:
+ MemObjType_t ();
+ ~MemObjType_t ();
+ int type;
+ char *name;
+ char *index_expr;
+ char *machmodel;
+ char mnemonic;
+ char *short_description;
+ char *long_description;
+};
+
+class MemorySpace
+{
+public:
+
+ MemorySpace (DbeView *_dbev, int subtype);
+ ~MemorySpace ();
+
+ void reset (void);
+
+ int
+ getMemObjType (void)
+ {
+ return mstype;
+ }
+
+ char *
+ getMemObjTypeName (void)
+ {
+ return msname;
+ }
+
+ Expression *
+ getMemObjDef (void)
+ {
+ return msindex_exp;
+ }
+
+ // static members, used to define or fetch the various MemorySpaces
+ static void get_filter_keywords (Vector <void*> *res);
+ static Vector<void*> *getMemObjects (void);
+ static void set_MemTabOrder (Vector<int> *);
+ static char *mobj_define (char *, char *, char *, char *, char *);
+ static char *mobj_delete (char *);
+ static MemObjType_t *findMemSpaceByName (const char *mname);
+ static MemObjType_t *findMemSpaceByIndex (int index);
+ static char pickMnemonic (char *name);
+ static Vector<char *> *getMachineModelMemObjs (char *);
+
+private:
+ HashMap<uint64_t, MemObj*> *objs;
+ int findMemObject (uint64_t indx);
+ MemObj *lookupMemObject (Experiment *exp, DataView*, long);
+ MemObj *createMemObject (uint64_t, char *moname);
+
+ int mstype; // type of this memory space
+ char *msname; // name of this memory space
+ Expression *msindex_exp; // index-expression for this memory space
+ char *msindex_exp_str; // string for index-expression
+ Hist_data *hist_data_all; // the cached data for mode=Hist_Data::ALL
+ uint64_t selected_mo_index; // which page, cacheline, etc.
+ int sel_ind; // index of selected object in list
+ DbeView *dbev;
+ int phaseIdx;
+ uint64_t idx_min;
+ uint64_t idx_max;
+ MemObj *unk_memobj;
+ MemObj *total_memobj;
+};
+
+#endif /* _MEMORYSPACE_H */
diff --git a/gprofng/src/Metric.cc b/gprofng/src/Metric.cc
new file mode 100644
index 00000000000..3b026ff80b1
--- /dev/null
+++ b/gprofng/src/Metric.cc
@@ -0,0 +1,1660 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <stdio.h>
+#include <strings.h>
+#include <limits.h>
+#include <sys/param.h>
+
+#include "util.h"
+#include "DbeSession.h"
+#include "Experiment.h"
+#include "Expression.h"
+#include "Metric.h"
+
+Metric::Metric (BaseMetric *item, SubType st) : BaseMetric (*item)
+{
+ name = NULL;
+ abbr = NULL;
+ abbr_unit = NULL;
+ baseMetric = item;
+ set_subtype (st);
+ visbits = VAL_NA;
+ if (item->get_type () == DERIVED)
+ visbits = VAL_VALUE;
+}
+
+Metric::Metric (const Metric& item) : BaseMetric (item)
+{
+ baseMetric = item.baseMetric;
+ subtype = item.subtype;
+ name = dbe_strdup (item.name);
+ abbr = dbe_strdup (item.abbr);
+ abbr_unit = dbe_strdup (item.abbr_unit);
+ visbits = item.visbits;
+}
+
+Metric::~Metric ()
+{
+ free (name);
+ free (abbr);
+ free (abbr_unit);
+}
+
+// Note that BaseMetric::get_vtype() has the base value type.
+// Here, we get the value type for the displayed metric,
+// which may be different if comparison is used.
+
+ValueTag
+Metric::get_vtype2 ()
+{
+ ValueTag vtype = get_vtype ();
+ if (visbits & VAL_DELTA)
+ {
+ switch (vtype)
+ {
+ case VT_ULLONG: return VT_LLONG;
+ default: return vtype;
+ }
+ }
+ if (visbits & VAL_RATIO)
+ {
+ switch (vtype)
+ {
+ case VT_INT:
+ case VT_LLONG:
+ case VT_ULLONG:
+ case VT_FLOAT:
+ case VT_DOUBLE: return VT_DOUBLE;
+ default: return vtype;
+ }
+ }
+ return vtype;
+}
+
+void
+Metric::set_subtype (SubType st)
+{
+ subtype = st;
+ free (name);
+ free (abbr);
+ free (abbr_unit);
+ name = NULL;
+ abbr = NULL;
+ abbr_unit = NULL;
+
+ switch (get_type ())
+ {
+ case CP_LMS_USER:
+ abbr_unit = dbe_strdup (GTXT ("sec."));
+ if (st == EXCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Exclusive User CPU Time"));
+ abbr = dbe_strdup (GTXT ("Excl. User CPU"));
+ }
+ else if (st == INCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Inclusive User CPU Time"));
+ abbr = dbe_strdup (GTXT ("Incl. User CPU"));
+ }
+ else if (st == ATTRIBUTED)
+ {
+ name = dbe_strdup (GTXT ("Attributed User CPU Time"));
+ abbr = dbe_strdup (GTXT ("Attr. User CPU"));
+ }
+ else
+ {
+ name = dbe_sprintf (GTXT ("Unexpected CP_LMS_USER metric subtype %d"),
+ st);
+ abbr = dbe_strdup (NTXT ("??"));
+ abort ();
+ }
+ break;
+
+ case CP_LMS_WAIT_CPU:
+ abbr_unit = dbe_strdup (GTXT ("sec."));
+ if (st == EXCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Exclusive Wait CPU Time"));
+ abbr = dbe_strdup (GTXT ("Excl. Wait CPU"));
+ }
+ else if (st == INCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Inclusive Wait CPU Time"));
+ abbr = dbe_strdup (GTXT ("Incl. Wait CPU"));
+ }
+ else if (st == ATTRIBUTED)
+ {
+ name = dbe_strdup (GTXT ("Attributed Wait CPU Time"));
+ abbr = dbe_strdup (GTXT ("Attr. Wait CPU"));
+ }
+ else
+ {
+ name = dbe_sprintf (GTXT ("Unexpected CP_LMS_WAIT_CPU metric subtype %d"),
+ st);
+ abbr = dbe_strdup (NTXT ("??"));
+ }
+ break;
+
+ case CP_LMS_USER_LOCK:
+ abbr_unit = dbe_strdup (GTXT ("sec."));
+ if (st == EXCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Exclusive User Lock Time"));
+ abbr = dbe_strdup (GTXT ("Excl. User Lock"));
+ }
+ else if (st == INCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Inclusive User Lock Time"));
+ abbr = dbe_strdup (GTXT ("Incl. User Lock"));
+ }
+ else if (st == ATTRIBUTED)
+ {
+ name = dbe_strdup (GTXT ("Attributed User Lock Time"));
+ abbr = dbe_strdup (GTXT ("Attr. User Lock"));
+ }
+ else
+ {
+ name = dbe_sprintf (GTXT ("Unexpected CP_LMS_USER_LOCK metric subtype %d"),
+ st);
+ abbr = dbe_strdup (NTXT ("??"));
+ }
+ break;
+
+ case CP_LMS_SYSTEM:
+ abbr_unit = dbe_strdup (GTXT ("sec."));
+ if (st == EXCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Exclusive System CPU Time"));
+ abbr = dbe_strdup (GTXT ("Excl. Sys. CPU"));
+ }
+ else if (st == INCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Inclusive System CPU Time"));
+ abbr = dbe_strdup (GTXT ("Incl. Sys. CPU"));
+ }
+ else if (st == ATTRIBUTED)
+ {
+ name = dbe_strdup (GTXT ("Attributed System CPU Time"));
+ abbr = dbe_strdup (GTXT ("Attr. Sys. CPU"));
+ }
+ else
+ {
+ name = dbe_sprintf (GTXT ("Unexpected CP_LMS_SYSTEM metric subtype %d"),
+ st);
+ abbr = dbe_strdup (NTXT ("??"));
+ }
+ break;
+
+ case SYNC_WAIT_TIME:
+ abbr_unit = dbe_strdup (GTXT ("sec."));
+ if (st == EXCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Exclusive Sync Wait Time"));
+ abbr = dbe_strdup (GTXT ("Excl. Sync Wait"));
+ }
+ else if (st == INCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Inclusive Sync Wait Time"));
+ abbr = dbe_strdup (GTXT ("Incl. Sync Wait"));
+ }
+ else if (st == ATTRIBUTED)
+ {
+ name = dbe_strdup (GTXT ("Attributed Sync Wait Time"));
+ abbr = dbe_strdup (GTXT ("Attr. Sync Wait"));
+ }
+ else
+ {
+ name = dbe_sprintf (GTXT ("Unexpected LWT metric subtype %d"), st);
+ abbr = dbe_strdup (NTXT ("??"));
+ }
+ break;
+
+ case CP_LMS_TFAULT:
+ abbr_unit = dbe_strdup (GTXT ("sec."));
+ if (st == EXCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Exclusive Text Page Fault Time"));
+ abbr = dbe_strdup (GTXT ("Excl. Text Fault"));
+ }
+ else if (st == INCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Inclusive Text Page Fault Time"));
+ abbr = dbe_strdup (GTXT ("Incl. Text Fault"));
+ }
+ else if (st == ATTRIBUTED)
+ {
+ name = dbe_strdup (GTXT ("Attributed Text Page Fault Time"));
+ abbr = dbe_strdup (GTXT ("Attr. Text Fault"));
+ }
+ else
+ {
+ name = dbe_sprintf (GTXT ("Unexpected CP_LMS_TFAULT metric subtype %d"),
+ st);
+ abbr = dbe_strdup (NTXT ("??"));
+ }
+ break;
+
+ case CP_LMS_DFAULT:
+ abbr_unit = dbe_strdup (GTXT ("sec."));
+ if (st == EXCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Exclusive Data Page Fault Time"));
+ abbr = dbe_strdup (GTXT ("Excl. Data Fault"));
+ }
+ else if (st == INCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Inclusive Data Page Fault Time"));
+ abbr = dbe_strdup (GTXT ("Incl. Data Fault"));
+ }
+ else if (st == ATTRIBUTED)
+ {
+ name = dbe_strdup (GTXT ("Attributed Data Page Fault Time"));
+ abbr = dbe_strdup (GTXT ("Attr. Data Fault"));
+ }
+ else
+ {
+ name = dbe_sprintf (GTXT ("Unexpected CP_LMS_DFAULT metric subtype %d"),
+ st);
+ abbr = dbe_strdup (NTXT ("??"));
+ }
+ break;
+
+ case CP_KERNEL_CPU:
+ abbr_unit = dbe_strdup (GTXT ("sec."));
+ if (st == EXCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Exclusive Kernel CPU Time"));
+ abbr = dbe_strdup (GTXT ("Excl. Kernel CPU"));
+ }
+ else if (st == INCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Inclusive Kernel CPU Time"));
+ abbr = dbe_strdup (GTXT ("Incl. Kernel CPU"));
+ }
+ else if (st == ATTRIBUTED)
+ {
+ name = dbe_strdup (GTXT ("Attributed Kernel CPU Time"));
+ abbr = dbe_strdup (GTXT ("Attr. Kernel CPU"));
+ }
+ else
+ {
+ name = dbe_sprintf (GTXT ("Unexpected CP_KERNEL_CPU metric subtype %d"),
+ st);
+ abbr = dbe_strdup (NTXT ("??"));
+ }
+ break;
+
+ case HWCNTR:
+ {
+ char *sstr, *estr1, *estr2;
+ if (get_hw_ctr () == NULL)
+ abort ();
+ sstr = get_username ();
+ if (st == EXCLUSIVE)
+ {
+ estr1 = GTXT ("Exclusive ");
+ estr2 = GTXT ("Excl. ");
+ }
+ else if (st == INCLUSIVE)
+ {
+ estr1 = GTXT ("Inclusive ");
+ estr2 = GTXT ("Incl. ");
+ }
+ else if (st == ATTRIBUTED)
+ {
+ estr1 = GTXT ("Attributed ");
+ estr2 = GTXT ("Attr. ");
+ }
+ else if (st == DATASPACE)
+ {
+ estr1 = GTXT ("Data-derived ");
+ estr2 = GTXT ("Data. ");
+ }
+ else
+ {
+ estr1 = dbe_sprintf (GTXT ("Unexpected hwc %s metric subtype %d"),
+ get_aux (), st);
+ estr2 = dbe_strdup (NTXT ("??"));
+ }
+ name = dbe_sprintf (NTXT ("%s%s"), estr1, sstr);
+ abbr = dbe_sprintf (NTXT ("%s%s"), estr2, sstr);
+ break;
+ }
+
+ case DERIVED:
+ {
+ switch (st)
+ {
+ case EXCLUSIVE:
+ name = dbe_sprintf (GTXT ("Exclusive %s"), get_username ());
+ abbr = dbe_sprintf (GTXT ("Excl. %s"), get_cmd ());
+ break;
+ case INCLUSIVE:
+ name = dbe_sprintf (GTXT ("Inclusive %s"), get_username ());
+ abbr = dbe_sprintf (GTXT ("Incl. %s"), get_cmd ());
+ break;
+ case ATTRIBUTED:
+ name = dbe_sprintf (GTXT ("Attributed %s"), get_username ());
+ abbr = dbe_sprintf (GTXT ("Attr. %s"), get_cmd ());
+ break;
+ default:
+ name = dbe_sprintf (GTXT ("Unexpected derived %s metric subtype %d"),
+ get_username (), st);
+ abbr = dbe_strdup (NTXT ("??"));
+ break;
+ }
+ break;
+ }
+
+ case OMP_MASTER_THREAD:
+ abbr_unit = dbe_strdup (GTXT ("sec."));
+ if (st == EXCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Exclusive Master Thread Time"));
+ abbr = dbe_strdup (GTXT ("Excl. Master Thread"));
+ }
+ else if (st == INCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Inclusive Master Thread Time"));
+ abbr = dbe_strdup (GTXT ("Incl. Master Thread"));
+ }
+ else if (st == ATTRIBUTED)
+ {
+ name = dbe_strdup (GTXT ("Attributed Master Thread Time"));
+ abbr = dbe_strdup (GTXT ("Attr. Master Thread"));
+ }
+ else
+ {
+ name = dbe_sprintf (GTXT ("Unexpected Master Thread metric subtype %d"),
+ st);
+ abbr = dbe_strdup (NTXT ("??"));
+ }
+ break;
+
+ case CP_TOTAL:
+ abbr_unit = dbe_strdup (GTXT ("sec."));
+ if (st == EXCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Exclusive Total Thread Time"));
+ abbr = dbe_strdup (GTXT ("Excl. Total Thread"));
+ }
+ else if (st == INCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Inclusive Total Thread Time"));
+ abbr = dbe_strdup (GTXT ("Incl. Total Thread"));
+ }
+ else if (st == ATTRIBUTED)
+ {
+ name = dbe_strdup (GTXT ("Attributed Total Thread Time"));
+ abbr = dbe_strdup (GTXT ("Attr. Total Thread"));
+ }
+ else
+ {
+ name = dbe_sprintf (GTXT ("Unexpected TOTAL metric subtype %d"), st);
+ abbr = dbe_strdup (NTXT ("??"));
+ }
+ break;
+
+ case SYNC_WAIT_COUNT:
+ if (st == EXCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Exclusive Sync Wait Count"));
+ abbr = dbe_strdup (GTXT ("Excl. Sync Wait Count"));
+ }
+ else if (st == INCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Inclusive Sync Wait Count"));
+ abbr = dbe_strdup (GTXT ("Incl. Sync Wait Count"));
+ }
+ else if (st == ATTRIBUTED)
+ {
+ name = dbe_strdup (GTXT ("Attributed Sync Wait Count"));
+ abbr = dbe_strdup (GTXT ("Attr. Sync Wait Count"));
+ }
+ else
+ {
+ name = dbe_sprintf (GTXT ("Unexpected LWCNT metric subtype %d"), st);
+ abbr = dbe_strdup (NTXT ("??"));
+ }
+ break;
+
+ case CP_TOTAL_CPU:
+ abbr_unit = dbe_strdup (GTXT ("sec."));
+ if (st == EXCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Exclusive Total CPU Time"));
+ abbr = dbe_strdup (GTXT ("Excl. Total CPU"));
+ }
+ else if (st == INCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Inclusive Total CPU Time"));
+ abbr = dbe_strdup (GTXT ("Incl. Total CPU"));
+ }
+ else if (st == ATTRIBUTED)
+ {
+ name = dbe_strdup (GTXT ("Attributed Total CPU Time"));
+ abbr = dbe_strdup (GTXT ("Attr. Total CPU"));
+ }
+ else
+ {
+ name = dbe_sprintf (GTXT ("Unexpected TOTAL_CPU metric subtype %d"),
+ st);
+ abbr = dbe_strdup (NTXT ("??"));
+ }
+ break;
+ case CP_LMS_TRAP:
+ abbr_unit = dbe_strdup (GTXT ("sec."));
+ if (st == EXCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Exclusive Trap CPU Time"));
+ abbr = dbe_strdup (GTXT ("Excl. Trap CPU"));
+ }
+ else if (st == INCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Inclusive Trap CPU Time"));
+ abbr = dbe_strdup (GTXT ("Incl. Trap CPU"));
+ }
+ else if (st == ATTRIBUTED)
+ {
+ name = dbe_strdup (GTXT ("Attributed Trap CPU Time"));
+ abbr = dbe_strdup (GTXT ("Attr. Trap CPU"));
+ }
+ else
+ {
+ name = dbe_sprintf (GTXT ("Unexpected CP_LMS_TRAP metric subtype %d"),
+ st);
+ abbr = dbe_strdup (NTXT ("??"));
+ }
+ break;
+
+ case CP_LMS_KFAULT:
+ abbr_unit = dbe_strdup (GTXT ("sec."));
+ if (st == EXCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Exclusive Kernel Page Fault Time"));
+ abbr = dbe_strdup (GTXT ("Excl. Kernel Page Fault"));
+ }
+ else if (st == INCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Inclusive Kernel Page Fault Time"));
+ abbr = dbe_strdup (GTXT ("Incl. Kernel Page Fault"));
+ }
+ else if (st == ATTRIBUTED)
+ {
+ name = dbe_strdup (GTXT ("Attributed Kernel Page Fault Time"));
+ abbr = dbe_strdup (GTXT ("Attr. Kernel Page Fault"));
+ }
+ else
+ {
+ name = dbe_sprintf (GTXT ("Unexpected CP_LMS_KFAULT metric subtype %d"),
+ st);
+ abbr = dbe_strdup (NTXT ("??"));
+ }
+ break;
+
+ case CP_LMS_SLEEP:
+ abbr_unit = dbe_strdup (GTXT ("sec."));
+ if (st == EXCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Exclusive Sleep Time"));
+ abbr = dbe_strdup (GTXT ("Excl. Sleep"));
+ }
+ else if (st == INCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Inclusive Sleep Time"));
+ abbr = dbe_strdup (GTXT ("Incl. Sleep"));
+ }
+ else if (st == ATTRIBUTED)
+ {
+ name = dbe_strdup (GTXT ("Attributed Sleep Time"));
+ abbr = dbe_strdup (GTXT ("Attr. Sleep"));
+ }
+ else
+ {
+ name = dbe_sprintf (GTXT ("Unexpected CP_LMS_SLEEP metric subtype %d"),
+ st);
+ abbr = dbe_strdup (NTXT ("??"));
+ }
+ break;
+
+ case CP_LMS_STOPPED:
+ abbr_unit = dbe_strdup (GTXT ("sec."));
+ if (st == EXCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Exclusive Stopped Time"));
+ abbr = dbe_strdup (GTXT ("Excl. Stopped"));
+ }
+ else if (st == INCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Inclusive Stopped Time"));
+ abbr = dbe_strdup (GTXT ("Incl. Stopped"));
+ }
+ else if (st == ATTRIBUTED)
+ {
+ name = dbe_strdup (GTXT ("Attributed Stopped Time"));
+ abbr = dbe_strdup (GTXT ("Attr. Stopped"));
+ }
+ else
+ {
+ name = dbe_sprintf (GTXT ("Unexpected CP_LMS_STOPPED metric subtype %d"),
+ st);
+ abbr = dbe_strdup (NTXT ("??"));
+ }
+ break;
+
+ case HEAP_ALLOC_BYTES:
+ if (st == EXCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Exclusive Bytes Allocated"));
+ abbr = dbe_strdup (GTXT ("Excl. Bytes Allocated"));
+ }
+ else if (st == INCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Inclusive Bytes Allocated"));
+ abbr = dbe_strdup (GTXT ("Incl. Bytes Allocated"));
+ }
+ else if (st == ATTRIBUTED)
+ {
+ name = dbe_strdup (GTXT ("Attributed Bytes Allocated"));
+ abbr = dbe_strdup (GTXT ("Attr. Bytes Allocated"));
+ }
+ else
+ {
+ name = dbe_sprintf (GTXT ("Unexpected BYTES_MALLOCD metric subtype %d"),
+ st);
+ abbr = dbe_strdup (NTXT ("??"));
+ }
+ break;
+
+ case HEAP_ALLOC_CNT:
+ if (st == EXCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Exclusive Allocations"));
+ abbr = dbe_strdup (GTXT ("Excl. Allocations"));
+ }
+ else if (st == INCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Inclusive Allocations"));
+ abbr = dbe_strdup (GTXT ("Incl. Allocations"));
+ }
+ else if (st == ATTRIBUTED)
+ {
+ name = dbe_strdup (GTXT ("Attributed Allocations"));
+ abbr = dbe_strdup (GTXT ("Attr. Allocations"));
+ }
+ else
+ {
+ name = dbe_sprintf (GTXT ("Unexpected MALLOCS metric subtype %d"), st);
+ abbr = dbe_strdup (NTXT ("??"));
+ }
+ break;
+
+ case HEAP_LEAK_BYTES:
+ if (st == EXCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Exclusive Bytes Leaked"));
+ abbr = dbe_strdup (GTXT ("Excl. Bytes Leaked"));
+ }
+ else if (st == INCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Inclusive Bytes Leaked"));
+ abbr = dbe_strdup (GTXT ("Incl. Bytes Leaked"));
+ }
+ else if (st == ATTRIBUTED)
+ {
+ name = dbe_strdup (GTXT ("Attributed Bytes Leaked"));
+ abbr = dbe_strdup (GTXT ("Attr. Bytes Leaked"));
+ }
+ else
+ {
+ name = dbe_sprintf (GTXT ("Unexpected BYTES_LEAKED metric subtype %d"),
+ st);
+ abbr = dbe_strdup (NTXT ("??"));
+ }
+ break;
+
+ case HEAP_LEAK_CNT:
+ if (st == EXCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Exclusive Leaks"));
+ abbr = dbe_strdup (GTXT ("Excl. Leaks"));
+ }
+ else if (st == INCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Inclusive Leaks"));
+ abbr = dbe_strdup (GTXT ("Incl. Leaks"));
+ }
+ else if (st == ATTRIBUTED)
+ {
+ name = dbe_strdup (GTXT ("Attributed Leaks"));
+ abbr = dbe_strdup (GTXT ("Attr. Leaks"));
+ }
+ else
+ {
+ name = dbe_sprintf (GTXT ("Unexpected LEAKS metric subtype %d"), st);
+ abbr = dbe_strdup (NTXT ("??"));
+ }
+ break;
+
+ case IO_READ_BYTES:
+ if (st == EXCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Exclusive Read Bytes"));
+ abbr = dbe_strdup (GTXT ("Excl. Read Bytes"));
+ }
+ else if (st == INCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Inclusive Read Bytes"));
+ abbr = dbe_strdup (GTXT ("Incl. Read Bytes"));
+ }
+ else if (st == ATTRIBUTED)
+ {
+ name = dbe_strdup (GTXT ("Attributed Read Bytes"));
+ abbr = dbe_strdup (GTXT ("Attr. Read Bytes"));
+ }
+ else
+ {
+ name = dbe_sprintf (GTXT ("Unexpected READ_BYTES metric subtype %d"), st);
+ abbr = dbe_strdup (NTXT ("??"));
+ }
+ break;
+
+ case IO_WRITE_BYTES:
+ if (st == EXCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Exclusive Write Bytes"));
+ abbr = dbe_strdup (GTXT ("Excl. Write Bytes"));
+ }
+ else if (st == INCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Inclusive Write Bytes"));
+ abbr = dbe_strdup (GTXT ("Incl. Write Bytes"));
+ }
+ else if (st == ATTRIBUTED)
+ {
+ name = dbe_strdup (GTXT ("Attributed Write Bytes"));
+ abbr = dbe_strdup (GTXT ("Attr. Write Bytes"));
+ }
+ else
+ {
+ name = dbe_sprintf (GTXT ("Unexpected WRITE_BYTES metric subtype %d"), st);
+ abbr = dbe_strdup (NTXT ("??"));
+ }
+ break;
+
+ case IO_READ_CNT:
+ if (st == EXCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Exclusive Read Count"));
+ abbr = dbe_strdup (GTXT ("Excl. Read Count"));
+ }
+ else if (st == INCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Inclusive Read Count"));
+ abbr = dbe_strdup (GTXT ("Incl. Read Count"));
+ }
+ else if (st == ATTRIBUTED)
+ {
+ name = dbe_strdup (GTXT ("Attributed Read Count"));
+ abbr = dbe_strdup (GTXT ("Attr. Read Count"));
+ }
+ else
+ {
+ name = dbe_sprintf (GTXT ("Unexpected READCNT metric subtype %d"), st);
+ abbr = dbe_strdup (NTXT ("??"));
+ }
+ break;
+
+ case IO_WRITE_CNT:
+ if (st == EXCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Exclusive Write Count"));
+ abbr = dbe_strdup (GTXT ("Excl. Write Count"));
+ }
+ else if (st == INCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Inclusive Write Count"));
+ abbr = dbe_strdup (GTXT ("Incl. Write Count"));
+ }
+ else if (st == ATTRIBUTED)
+ {
+ name = dbe_strdup (GTXT ("Attributed Write Count"));
+ abbr = dbe_strdup (GTXT ("Attr. Write Count"));
+ }
+ else
+ {
+ name = dbe_sprintf (GTXT ("Unexpected WRITECNT metric subtype %d"), st);
+ abbr = dbe_strdup (NTXT ("??"));
+ }
+ break;
+
+ case IO_OTHER_CNT:
+ if (st == EXCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Exclusive Other I/O Count"));
+ abbr = dbe_strdup (GTXT ("Excl. Other I/O Count"));
+ }
+ else if (st == INCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Inclusive Other I/O Count"));
+ abbr = dbe_strdup (GTXT ("Incl. Other I/O Count"));
+ }
+ else if (st == ATTRIBUTED)
+ {
+ name = dbe_strdup (GTXT ("Attributed Other I/O Count"));
+ abbr = dbe_strdup (GTXT ("Attr. Other I/O Count"));
+ }
+ else
+ {
+ name = dbe_sprintf (GTXT ("Unexpected OTHERIOCNT metric subtype %d"), st);
+ abbr = dbe_strdup (NTXT ("??"));
+ }
+ break;
+
+ case IO_ERROR_CNT:
+ if (st == EXCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Exclusive I/O Error Count"));
+ abbr = dbe_strdup (GTXT ("Excl. I/O Error Count"));
+ }
+ else if (st == INCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Inclusive I/O Error Count"));
+ abbr = dbe_strdup (GTXT ("Incl. I/O Error Count"));
+ }
+ else if (st == ATTRIBUTED)
+ {
+ name = dbe_strdup (GTXT ("Attributed I/O Error Count"));
+ abbr = dbe_strdup (GTXT ("Attr. I/O Error Count"));
+ }
+ else
+ {
+ name = dbe_sprintf (GTXT ("Unexpected IOERRORCNT metric subtype %d"), st);
+ abbr = dbe_strdup (NTXT ("??"));
+ }
+ break;
+
+ case IO_READ_TIME:
+ abbr_unit = dbe_strdup (GTXT ("sec."));
+ if (st == EXCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Exclusive Read Time"));
+ abbr = dbe_strdup (GTXT ("Excl. Read Time"));
+ }
+ else if (st == INCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Inclusive Read Time"));
+ abbr = dbe_strdup (GTXT ("Incl. Read Time"));
+ }
+ else if (st == ATTRIBUTED)
+ {
+ name = dbe_strdup (GTXT ("Attributed Read Time"));
+ abbr = dbe_strdup (GTXT ("Attr. Read Time"));
+ }
+ else
+ {
+ name = dbe_sprintf (GTXT ("Unexpected READ_TIME metric subtype %d"), st);
+ abbr = dbe_strdup (NTXT ("??"));
+ }
+ break;
+
+ case IO_WRITE_TIME:
+ abbr_unit = dbe_strdup (GTXT ("sec."));
+ if (st == EXCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Exclusive Write Time"));
+ abbr = dbe_strdup (GTXT ("Excl. Write Time"));
+ }
+ else if (st == INCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Inclusive Write Time"));
+ abbr = dbe_strdup (GTXT ("Incl. Write Time"));
+ }
+ else if (st == ATTRIBUTED)
+ {
+ name = dbe_strdup (GTXT ("Attributed Write Time"));
+ abbr = dbe_strdup (GTXT ("Attr. Write Time"));
+ }
+ else
+ {
+ name = dbe_sprintf (GTXT ("Unexpected WRITE_TIME metric subtype %d"), st);
+ abbr = dbe_strdup (NTXT ("??"));
+ }
+ break;
+
+ case IO_OTHER_TIME:
+ abbr_unit = dbe_strdup (GTXT ("sec."));
+ if (st == EXCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Exclusive Other I/O Time"));
+ abbr = dbe_strdup (GTXT ("Excl. Other I/O Time"));
+ }
+ else if (st == INCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Inclusive Other I/O Time"));
+ abbr = dbe_strdup (GTXT ("Incl. Other I/O Time"));
+ }
+ else if (st == ATTRIBUTED)
+ {
+ name = dbe_strdup (GTXT ("Attributed Other I/O Time"));
+ abbr = dbe_strdup (GTXT ("Attr. Other I/O Time"));
+ }
+ else
+ {
+ name = dbe_sprintf (GTXT ("Unexpected OTHERIO_TIME metric subtype %d"), st);
+ abbr = dbe_strdup (NTXT ("??"));
+ }
+ break;
+
+ case IO_ERROR_TIME:
+ abbr_unit = dbe_strdup (GTXT ("sec."));
+ if (st == EXCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Exclusive I/O Error Time"));
+ abbr = dbe_strdup (GTXT ("Excl. I/O Error Time"));
+ }
+ else if (st == INCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Inclusive I/O Error Time"));
+ abbr = dbe_strdup (GTXT ("Incl. I/O Error Time"));
+ }
+ else if (st == ATTRIBUTED)
+ {
+ name = dbe_strdup (GTXT ("Attributed I/O Error Time"));
+ abbr = dbe_strdup (GTXT ("Attr. I/O Error Time"));
+ }
+ else
+ {
+ name = dbe_sprintf (GTXT ("Unexpected IOERROR_TIME metric subtype %d"), st);
+ abbr = dbe_strdup (NTXT ("??"));
+ }
+ break;
+
+ case SIZES:
+ name = dbe_strdup (GTXT ("Size"));
+ abbr = dbe_strdup (GTXT ("Size"));
+ abbr_unit = dbe_strdup (GTXT ("bytes"));
+ break;
+
+ case ADDRESS:
+ name = dbe_strdup (GTXT ("PC Address"));
+ abbr = dbe_strdup (GTXT ("PC Addr."));
+ break;
+
+ case ONAME:
+ name = dbe_strdup (GTXT ("Name"));
+ abbr = dbe_strdup (GTXT ("Name"));
+ break;
+
+ case OMP_NONE:
+ abbr_unit = dbe_strdup (GTXT ("sec."));
+ if (st == EXCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Exclusive Non-OpenMP Time"));
+ abbr = dbe_strdup (GTXT ("Excl. Non-OMP"));
+ }
+ else if (st == INCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Inclusive Non-OpenMP Time"));
+ abbr = dbe_strdup (GTXT ("Incl. Non-OMP"));
+ }
+ else if (st == ATTRIBUTED)
+ {
+ name = dbe_strdup (GTXT ("Attributed Non-OpenMP Time"));
+ abbr = dbe_strdup (GTXT ("Attr. Non-OMP"));
+ }
+ else
+ {
+ name = dbe_sprintf (GTXT ("Unexpected Non-OpenMP metric subtype %d"), st);
+ abbr = dbe_strdup (NTXT ("??"));
+ }
+ break;
+ case OMP_OVHD:
+ abbr_unit = dbe_strdup (GTXT ("sec."));
+ if (st == EXCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Exclusive OpenMP Overhead Time"));
+ abbr = dbe_strdup (GTXT ("Excl. OMP ovhd."));
+ }
+ else if (st == INCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Inclusive OpenMP Overhead Time"));
+ abbr = dbe_strdup (GTXT ("Incl. OMP ovhd."));
+ }
+ else if (st == ATTRIBUTED)
+ {
+ name = dbe_strdup (GTXT ("Attributed OpenMP Overhead Time"));
+ abbr = dbe_strdup (GTXT ("Attr. OMP ovhd."));
+ }
+ else
+ {
+ name = dbe_sprintf (GTXT ("Unexpected OpenMP Overhead metric subtype %d"), st);
+ abbr = dbe_strdup (NTXT ("??"));
+ }
+ break;
+ case OMP_WORK:
+ abbr_unit = dbe_strdup (GTXT ("sec."));
+ if (st == EXCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Exclusive OpenMP Work Time"));
+ abbr = dbe_strdup (GTXT ("Excl. OMP Work"));
+ }
+ else if (st == INCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Inclusive OpenMP Work Time"));
+ abbr = dbe_strdup (GTXT ("Incl. OMP Work"));
+ }
+ else if (st == ATTRIBUTED)
+ {
+ name = dbe_strdup (GTXT ("Attributed OpenMP Work Time"));
+ abbr = dbe_strdup (GTXT ("Attr. OMP Work"));
+ }
+ else
+ {
+ name = dbe_sprintf (GTXT ("Unexpected OpenMP Work metric subtype %d"), st);
+ abbr = dbe_strdup (NTXT ("??"));
+ }
+ break;
+ case OMP_IBAR:
+ abbr_unit = dbe_strdup (GTXT ("sec."));
+ if (st == EXCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Exclusive OpenMP Implicit Barrier Time"));
+ abbr = dbe_strdup (GTXT ("Excl. OMP i-barr."));
+ }
+ else if (st == INCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Inclusive OpenMP Implicit Barrier Time"));
+ abbr = dbe_strdup (GTXT ("Incl. OMP i-barr."));
+ }
+ else if (st == ATTRIBUTED)
+ {
+ name = dbe_strdup (GTXT ("Attributed OpenMP Implicit Barrier Time"));
+ abbr = dbe_strdup (GTXT ("Attr. OMP i-barr."));
+ }
+ else
+ {
+ name = dbe_sprintf (GTXT ("Unexpected OpenMP Implicit Barrier metric subtype %d"), st);
+ abbr = dbe_strdup (NTXT ("??"));
+ }
+ break;
+ case OMP_EBAR:
+ abbr_unit = dbe_strdup (GTXT ("sec."));
+ if (st == EXCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Exclusive OpenMP Explicit Barrier Time"));
+ abbr = dbe_strdup (GTXT ("Excl. OMP e-barr."));
+ }
+ else if (st == INCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Inclusive OpenMP Explicit Barrier Time"));
+ abbr = dbe_strdup (GTXT ("Incl. OMP e-barr."));
+ }
+ else if (st == ATTRIBUTED)
+ {
+ name = dbe_strdup (GTXT ("Attributed OpenMP Explicit Barrier Time"));
+ abbr = dbe_strdup (GTXT ("Attr. OMP e-barr."));
+ }
+ else
+ {
+ name = dbe_sprintf (GTXT ("Unexpected OpenMP Explicit Barrier metric subtype %d"), st);
+ abbr = dbe_strdup (NTXT ("??"));
+ }
+ break;
+ case OMP_WAIT:
+ abbr_unit = dbe_strdup (GTXT ("sec."));
+ if (st == EXCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Exclusive OpenMP Wait Time"));
+ abbr = dbe_strdup (GTXT ("Excl. OMP Wait"));
+ }
+ else if (st == INCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Inclusive OpenMP Wait Time"));
+ abbr = dbe_strdup (GTXT ("Incl. OMP Wait"));
+ }
+ else if (st == ATTRIBUTED)
+ {
+ name = dbe_strdup (GTXT ("Attributed OpenMP Wait Time"));
+ abbr = dbe_strdup (GTXT ("Attr. OMP Wait"));
+ }
+ else
+ {
+ name = dbe_sprintf (GTXT ("Unexpected OpenMP Wait metric subtype %d"), st);
+ abbr = dbe_strdup (NTXT ("??"));
+ }
+ break;
+ case OMP_SERL:
+ abbr_unit = dbe_strdup (GTXT ("sec."));
+ if (st == EXCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Exclusive OpenMP Serial Time"));
+ abbr = dbe_strdup (GTXT ("Excl. OMP serl"));
+ }
+ else if (st == INCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Inclusive OpenMP Serial Time"));
+ abbr = dbe_strdup (GTXT ("Incl. OMP serl"));
+ }
+ else if (st == ATTRIBUTED)
+ {
+ name = dbe_strdup (GTXT ("Attributed OpenMP Serial Time"));
+ abbr = dbe_strdup (GTXT ("Attr. OMP serl"));
+ }
+ else
+ {
+ name = dbe_sprintf (GTXT ("Unexpected OpenMP Slave Idle metric subtype %d"), st);
+ abbr = dbe_strdup (NTXT ("??"));
+ }
+ break;
+ case OMP_RDUC:
+ abbr_unit = dbe_strdup (GTXT ("sec."));
+ if (st == EXCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Exclusive OpenMP Reduction Time"));
+ abbr = dbe_strdup (GTXT ("Excl. OMP rduc"));
+ }
+ else if (st == INCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Inclusive OpenMP Reduction Time"));
+ abbr = dbe_strdup (GTXT ("Incl. OMP rduc"));
+ }
+ else if (st == ATTRIBUTED)
+ {
+ name = dbe_strdup (GTXT ("Attributed OpenMP Reduction Time"));
+ abbr = dbe_strdup (GTXT ("Attr. OMP rduc"));
+ }
+ else
+ {
+ name = dbe_sprintf (GTXT ("Unexpected OpenMP Reduction metric subtype %d"), st);
+ abbr = dbe_strdup (NTXT ("??"));
+ }
+ break;
+ case OMP_LKWT:
+ abbr_unit = dbe_strdup (GTXT ("sec."));
+ if (st == EXCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Exclusive OpenMP Lock Wait Time"));
+ abbr = dbe_strdup (GTXT ("Excl. OMP lkwt"));
+ }
+ else if (st == INCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Inclusive OpenMP Lock Wait Time"));
+ abbr = dbe_strdup (GTXT ("Incl. OMP lkwt"));
+ }
+ else if (st == ATTRIBUTED)
+ {
+ name = dbe_strdup (GTXT ("Attributed OpenMP Lock Wait Time"));
+ abbr = dbe_strdup (GTXT ("Attr. OMP lkwt"));
+ }
+ else
+ {
+ name = dbe_sprintf (GTXT ("Unexpected OpenMP Lock Wait metric subtype %d"), st);
+ abbr = dbe_strdup (NTXT ("??"));
+ }
+ break;
+ case OMP_CTWT:
+ abbr_unit = dbe_strdup (GTXT ("sec."));
+ if (st == EXCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Exclusive OpenMP Critical Section Wait Time"));
+ abbr = dbe_strdup (GTXT ("Excl. OMP ctwt"));
+ }
+ else if (st == INCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Inclusive OpenMP Critical Section Wait Time"));
+ abbr = dbe_strdup (GTXT ("Incl. OMP ctwt"));
+ }
+ else if (st == ATTRIBUTED)
+ {
+ name = dbe_strdup (GTXT ("Attributed OpenMP Critical Section Wait Time"));
+ abbr = dbe_strdup (GTXT ("Attr. OMP ctwt"));
+ }
+ else
+ {
+ name = dbe_sprintf (GTXT ("Unexpected OpenMP Critical Section Wait metric subtype %d"), st);
+ abbr = dbe_strdup (NTXT ("??"));
+ }
+ break;
+ case OMP_ODWT:
+ abbr_unit = dbe_strdup (GTXT ("sec."));
+ if (st == EXCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Exclusive OpenMP Ordered Section Wait Time"));
+ abbr = dbe_strdup (GTXT ("Excl. OMP odwt"));
+ }
+ else if (st == INCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Inclusive OpenMP Ordered Section Wait Time"));
+ abbr = dbe_strdup (GTXT ("Incl. OMP odwt"));
+ }
+ else if (st == ATTRIBUTED)
+ {
+ name = dbe_strdup (GTXT ("Attributed OpenMP Ordered Section Wait Time"));
+ abbr = dbe_strdup (GTXT ("Attr. OMP odwt"));
+ }
+ else
+ {
+ name = dbe_sprintf (GTXT ("Unexpected OpenMP Ordered Section Wait metric subtype %d"), st);
+ abbr = dbe_strdup (NTXT ("??"));
+ }
+ break;
+ case OMP_MSTR:
+ abbr_unit = dbe_strdup (GTXT ("sec."));
+ if (st == EXCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Exclusive OpenMP Master Serial Time"));
+ abbr = dbe_strdup (GTXT ("Excl. OMP ser."));
+ }
+ else if (st == INCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Inclusive OpenMP Master Serial Time"));
+ abbr = dbe_strdup (GTXT ("Incl. OMP ser."));
+ }
+ else if (st == ATTRIBUTED)
+ {
+ name = dbe_strdup (GTXT ("Attributed OpenMP Master Serial Time"));
+ abbr = dbe_strdup (GTXT ("Attr. OMP ser."));
+ }
+ else
+ {
+ name = dbe_sprintf (GTXT ("Unexpected OpenMP Master Serial metric subtype %d"), st);
+ abbr = dbe_strdup (NTXT ("??"));
+ }
+ break;
+ case OMP_SNGL:
+ abbr_unit = dbe_strdup (GTXT ("sec."));
+ if (st == EXCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Exclusive OpenMP Single Region Time"));
+ abbr = dbe_strdup (GTXT ("Excl. OMP sngl"));
+ }
+ else if (st == INCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Inclusive OpenMP Single Region Time"));
+ abbr = dbe_strdup (GTXT ("Incl. OMP sngl"));
+ }
+ else if (st == ATTRIBUTED)
+ {
+ name = dbe_strdup (GTXT ("Attributed OpenMP Single Region Time"));
+ abbr = dbe_strdup (GTXT ("Attr. OMP sngl"));
+ }
+ else
+ {
+ name = dbe_sprintf (GTXT ("Unexpected OpenMP Single Region metric subtype %d"), st);
+ abbr = dbe_strdup (NTXT ("??"));
+ }
+ break;
+ case OMP_ORDD:
+ abbr_unit = dbe_strdup (GTXT ("sec."));
+ if (st == EXCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Exclusive OpenMP Ordered Region Time"));
+ abbr = dbe_strdup (GTXT ("Excl. OMP ordd"));
+ }
+ else if (st == INCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Inclusive OpenMP Ordered Region Time"));
+ abbr = dbe_strdup (GTXT ("Incl. OMP ordd"));
+ }
+ else if (st == ATTRIBUTED)
+ {
+ name = dbe_strdup (GTXT ("Attributed OpenMP Ordered Region Time"));
+ abbr = dbe_strdup (GTXT ("Attr. OMP ordd"));
+ }
+ else
+ {
+ name = dbe_sprintf (GTXT ("Unexpected OpenMP Ordered Region metric subtype %d"), st);
+ abbr = dbe_strdup (NTXT ("??"));
+ }
+ break;
+ case RACCESS:
+ if (st == EXCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Exclusive Race Accesses"));
+ abbr = dbe_strdup (GTXT ("Excl. Race Accesses"));
+ }
+ else if (st == INCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Inclusive Race Accesses"));
+ abbr = dbe_strdup (GTXT ("Incl. Race Accesses"));
+ }
+ else if (st == ATTRIBUTED)
+ {
+ name = dbe_strdup (GTXT ("Attributed Race Accesses"));
+ abbr = dbe_strdup (GTXT ("Attr. Race Accesses"));
+ }
+ else
+ {
+ name = dbe_sprintf (GTXT ("Unexpected Race Access metric subtype %d"), st);
+ abbr = dbe_strdup (NTXT ("??"));
+ }
+ break;
+ case DEADLOCKS:
+ if (st == EXCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Exclusive Deadlocks"));
+ abbr = dbe_strdup (GTXT ("Excl. Deadlocks"));
+ }
+ else if (st == INCLUSIVE)
+ {
+ name = dbe_strdup (GTXT ("Inclusive Deadlocks"));
+ abbr = dbe_strdup (GTXT ("Incl. Deadlocks"));
+ }
+ else if (st == ATTRIBUTED)
+ {
+ name = dbe_strdup (GTXT ("Attributed Deadlocks"));
+ abbr = dbe_strdup (GTXT ("Attr. Deadlocks"));
+ }
+ else
+ {
+ name = dbe_sprintf (GTXT ("Unexpected Deadlocks metric subtype %d"), st);
+ abbr = dbe_strdup (NTXT ("??"));
+ }
+ break;
+ default:
+ abort ();
+ }
+} //Metric::set_subtype
+
+static bool
+is_width_ok (int lines, size_t width, size_t *tlen, int last)
+{
+ size_t len = 0;
+ for (int i = 0; i <= last; i++)
+ {
+ if (len != 0)
+ len++;
+ if (len + tlen[i] > width)
+ {
+ if (--lines == 0)
+ return false;
+ len = 0;
+ }
+ len += tlen[i];
+ }
+ return true;
+}
+
+void
+Metric::legend_width (HistMetric *hitem, int gap)
+{
+ size_t tlen[MAX_LEN];
+ char *tok[MAX_LEN], buf[MAX_LEN], unit[MAX_LEN];
+ hitem->width = hitem->maxtime_width;
+ if (hitem->maxvalue_width > 0)
+ {
+ if (hitem->width > 0)
+ hitem->width++;
+ hitem->width += hitem->maxvalue_width;
+ }
+ if (is_pvisible ())
+ {
+ if (hitem->width > 0)
+ {
+ hitem->width++;
+ }
+ hitem->width += 6; // adjust to change format from xx.yy%
+ }
+ snprintf (buf, sizeof (buf), "%s", get_abbr ());
+ size_t max_len = hitem->width;
+ if (legend)
+ {
+ size_t legend_len = strlen (legend);
+ if (max_len < legend_len)
+ max_len = legend_len;
+ }
+ tok[0] = buf;
+ int last = 0;
+ for (int i = 0;; i++)
+ {
+ if (buf[i] == ' ')
+ {
+ buf[i] = '\0';
+ while (buf[i + 1] == ' ')
+ i++;
+ tlen[last] = strlen (tok[last]);
+ if (max_len < tlen[last])
+ max_len = tlen[last];
+ last++;
+ tok[last] = buf + i + 1;
+ }
+ else if (buf[i] == '\0')
+ {
+ tlen[last] = strlen (tok[last]);
+ if (max_len < tlen[last])
+ max_len = tlen[last];
+ if (tlen[last] == 0 && last > 0)
+ last--;
+ break;
+ }
+ }
+
+ *unit = '\0'; // get the extra unit tokens
+ int max_lines = 3;
+ if (is_tvisible ())
+ {
+ char *s = GTXT ("sec.");
+ if ((get_visbits () & VAL_DELTA) != 0)
+ s = GTXT ("delta");
+ else if ((get_visbits () & VAL_RATIO) != 0)
+ s = GTXT ("ratio");
+ long len = strlen (s);
+ if (hitem->maxtime_width < len)
+ {
+ hitem->width += len - hitem->maxtime_width;
+ hitem->maxtime_width = len;
+ }
+ snprintf (unit, sizeof (unit), "%*s", (int) hitem->maxtime_width, s);
+ }
+ if (is_visible ())
+ {
+ char *s = NTXT ("");
+ if (!is_tvisible ())
+ {
+ if ((get_visbits () & VAL_DELTA) != 0)
+ s = GTXT ("delta");
+ else if ((get_visbits () & VAL_RATIO) != 0)
+ s = GTXT ("ratio");
+ else if ((get_value_styles () & VAL_TIMEVAL) != 0 && !is_time_val ())
+ s = GTXT ("sec.");
+ }
+ long len = strlen (s);
+ if (hitem->maxvalue_width < len)
+ {
+ hitem->width += len - hitem->maxvalue_width;
+ hitem->maxvalue_width = len;
+ }
+ if (*unit)
+ {
+ max_lines = 2;
+ len = strlen (unit);
+ snprintf (unit + len, sizeof (unit) - len, " %*s",
+ (int) hitem->maxvalue_width, s);
+ }
+ else
+ snprintf (unit, sizeof (unit), "%*s", (int) hitem->maxvalue_width, s);
+ }
+ if (is_pvisible ())
+ {
+ max_lines = 2;
+ if (*unit)
+ {
+ size_t len = strlen (unit);
+ snprintf (unit + len, sizeof (unit) - len, GTXT (" %%"));
+ }
+ else
+ snprintf (unit, sizeof (unit), GTXT (" %%"));
+ }
+ for (size_t i = strlen (unit); i > 0;)
+ { // remove trailing spaces
+ i--;
+ if (unit[i] != ' ')
+ break;
+ unit[i] = 0;
+ }
+
+ if (*unit)
+ {
+ last++;
+ tlen[last] = strlen (unit);
+ tok[last] = unit;
+ if (max_len < tlen[last])
+ max_len = tlen[last];
+ if (max_lines == 3 && *unit == ' ')
+ {
+ char *str = unit;
+ while (*str == ' ')
+ str++;
+ tlen[last] = strlen (str);
+ tok[last] = str;
+ }
+ }
+
+ int last1 = max_lines == 3 ? last : last - 1;
+ while (!is_width_ok (max_lines, max_len, tlen, last1))
+ max_len++;
+ hitem->width = max_len + gap;
+
+ char *legends[3];
+ legends[0] = hitem->legend1;
+ legends[1] = hitem->legend2;
+ legends[2] = hitem->legend3;
+ for (int i = 0, ind = 0; i < 3; i++)
+ {
+ char *str = legends[i];
+ *str = 0;
+ for (; ind <= last; ind++)
+ {
+ if (*unit && (ind == last))
+ {
+ // Try to put 'unit' in 'legend3'
+ if (i != 2)
+ {
+ tok[last] = unit; // restore a formated 'unit'
+ break;
+ }
+ }
+ size_t len = strlen (str);
+ if (len != 0)
+ {
+ if (len + 1 + tlen[ind] > max_len)
+ break;
+ snprintf (str + len, MAX_LEN - len, NTXT (" %s"), tok[ind]);
+ }
+ else
+ {
+ if (len + tlen[ind] > max_len)
+ break;
+ snprintf (str + len, MAX_LEN - len, NTXT ("%s"), tok[ind]);
+ }
+ }
+ }
+}
+
+int
+Metric::get_real_visbits ()
+{
+ int v = visbits;
+ if (!is_time_val () && (visbits & (VAL_TIMEVAL | VAL_VALUE)) != 0)
+ {
+ v &= ~(VAL_TIMEVAL | VAL_VALUE);
+ v |= (get_value_styles () & (VAL_TIMEVAL | VAL_VALUE));
+ }
+ return v;
+}
+
+char *
+Metric::get_vis_string (int vis)
+{
+ char *vis_str;
+ if (subtype == STATIC)
+ vis_str = NTXT ("");
+ else
+ {
+ int v;
+ if (is_time_val ())
+ v = vis & (VAL_TIMEVAL | VAL_VALUE | VAL_PERCENT);
+ else
+ {
+ v = vis & VAL_PERCENT;
+ if ((vis & (VAL_TIMEVAL | VAL_VALUE)) != 0)
+ v |= (get_value_styles () & (VAL_TIMEVAL | VAL_VALUE));
+ }
+ switch (v)
+ {
+ case VAL_TIMEVAL:
+ vis_str = NTXT (".");
+ break;
+ case VAL_VALUE:
+ vis_str = NTXT ("+");
+ break;
+ case VAL_TIMEVAL | VAL_VALUE:
+ vis_str = NTXT (".+");
+ break;
+ case VAL_PERCENT:
+ vis_str = NTXT ("%");
+ break;
+ case VAL_TIMEVAL | VAL_PERCENT:
+ vis_str = NTXT (".%");
+ break;
+ case VAL_VALUE | VAL_PERCENT:
+ vis_str = NTXT ("+%");
+ break;
+ case VAL_TIMEVAL | VAL_VALUE | VAL_PERCENT:
+ vis_str = NTXT (".+%");
+ break;
+ default:
+ vis_str = NTXT ("!");
+ break;
+ }
+ }
+ return vis_str;
+}
+
+char *
+Metric::get_vis_str ()
+{
+ char *vis_str = NULL;
+ if (visbits == -1)
+ {
+ // unitialized, return all possible with a trailing -
+ if (subtype == STATIC)
+ vis_str = NTXT (".-");
+ else if (is_time_val ())
+ vis_str = NTXT (".+%-");
+ else
+ vis_str = NTXT (".%-");
+ }
+ else
+ vis_str = get_vis_string (get_real_visbits ());
+ return vis_str;
+}
+
+void
+Metric::set_dmetrics_visbits (int dmetrics_visbits)
+{
+ visbits = VAL_NA; // clear global state
+
+ // process the "show" bits
+ int _visbits = dmetrics_visbits & ~VAL_HIDE_ALL;
+ assert (_visbits != -1);
+ if (_visbits == 0)
+ return; // done. (Ignore VAL_HIDE_ALL since there's nothing to hide.)
+ if (get_subtype () == STATIC)
+ // percent, time value not applicable
+ visbits = VAL_VALUE;
+ else
+ {
+ // now or in the bits, but manage . and + according to the is_time_val setting
+ if (is_time_val () == 0)
+ {
+ if ((_visbits & VAL_VALUE) || (_visbits & VAL_TIMEVAL))
+ visbits |= VAL_VALUE;
+ }
+ else
+ visbits |= (_visbits & (VAL_VALUE | VAL_TIMEVAL));
+ visbits |= (_visbits & (VAL_PERCENT | VAL_RATIO | VAL_DELTA));
+ }
+ // process the "hide" bit
+ if (dmetrics_visbits & VAL_HIDE_ALL)
+ visbits |= VAL_HIDE_ALL;
+}
+
+void
+Metric::set_vvisible (bool set)
+{
+ if (set)
+ {
+ visbits |= VAL_VALUE;
+ visbits &= ~VAL_HIDE_ALL;
+ }
+ else
+ visbits &= ~VAL_VALUE;
+}
+
+void
+Metric::set_tvisible (bool set)
+{
+ if (set)
+ {
+ visbits |= VAL_TIMEVAL;
+ visbits &= ~VAL_HIDE_ALL;
+ }
+ else
+ visbits &= ~VAL_TIMEVAL;
+}
+
+void
+Metric::set_pvisible (bool set)
+{
+ if (set)
+ {
+ visbits |= VAL_PERCENT;
+ visbits &= ~VAL_HIDE_ALL;
+ }
+ else
+ visbits &= ~VAL_PERCENT;
+}
+
+char *
+Metric::get_mcmd (bool allPossible)
+{
+ char *sc = NTXT (""); // subtype == STATIC
+ char *hide;
+ char *vis = get_vis_string (allPossible ? get_value_styles ()
+ : get_real_visbits ());
+ if (subtype == INCLUSIVE)
+ sc = NTXT ("i");
+ else if (subtype == EXCLUSIVE)
+ sc = NTXT ("e");
+ else if (subtype == ATTRIBUTED)
+ sc = NTXT ("a");
+ else if (subtype == DATASPACE)
+ sc = NTXT ("d");
+ if (allPossible)
+ hide = NTXT ("");
+ else if (visbits == VAL_NA || (visbits & VAL_HIDE_ALL) != 0)
+ hide = NTXT ("!");
+ else
+ hide = NTXT ("");
+
+ char *mcmd = get_cmd ();
+ return dbe_sprintf (GTXT ("%s%s%s%s"), sc, hide, vis, mcmd);
+}
+
+char *
+Metric::dump ()
+{
+ int len = 4;
+ BaseMetric *bm = (BaseMetric *) this;
+ char *s = bm->dump ();
+ char *msg = dbe_sprintf ("%s\n%*c subtype=%d time_val=%d vis=%d tvis=%d"
+ " pvis=%d\n%*c abbr='%s' cmd='%s' name='%s'\n",
+ STR (s), len, ' ', get_subtype (), is_time_val (),
+ is_visible (), is_tvisible (), is_pvisible (),
+ len, ' ', STR (get_abbr ()), STR (get_cmd ()),
+ STR (get_name ()));
+ free (s);
+ return msg;
+}
+
diff --git a/gprofng/src/Metric.h b/gprofng/src/Metric.h
new file mode 100644
index 00000000000..a2b37786301
--- /dev/null
+++ b/gprofng/src/Metric.h
@@ -0,0 +1,188 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _METRIC_H
+#define _METRIC_H
+
+#include "dbe_structs.h"
+#include "vec.h"
+#include "enums.h"
+#include "BaseMetric.h"
+
+#define MAX_LEN 1024
+
+class Expression;
+
+// The metric class defines the metrics that are available. The metrics are
+// registered when the experiment's log file is read.
+class Metric : public BaseMetric
+{
+public:
+
+ typedef struct HistMetricS
+ {
+ int width;
+ int maxvalue_width;
+ int maxtime_width;
+ char legend1[MAX_LEN];
+ char legend2[MAX_LEN];
+ char legend3[MAX_LEN];
+ int indFirstExp; // only for -compare=[delta|ratio]
+ int indTimeVal; // only for HWC time-converted metrics
+ void update_max (struct HistMetricS *hm);
+ void init ();
+ } HistMetric;
+
+ Metric (const Metric& item); // copy constructor
+ Metric (BaseMetric *item, SubType st);
+ Metric (char *_name, SubType st); // for derived metrics
+ virtual ~Metric ();
+
+ char *get_mcmd (bool); // e.user, a.total, etc. NOTI18N
+ int get_real_visbits (); // methods for managing visibility
+ ValueTag get_vtype2 (); // takes comparison visbits into account
+ void set_dmetrics_visbits (int _dmetrics_visbits);
+
+ // fetch various fields from a Metric
+ SubType
+ get_subtype ()
+ {
+ return subtype;
+ }
+
+ char *
+ get_name ()
+ {
+ return name;
+ }
+
+ char *
+ get_abbr ()
+ {
+ return abbr;
+ }
+
+ char *
+ get_abbr_unit ()
+ {
+ return abbr_unit;
+ }
+
+ BaseMetric *
+ get_base_metric ()
+ {
+ return baseMetric;
+ }
+
+ int
+ get_visbits ()
+ {
+ return visbits;
+ }
+
+ void
+ set_raw_visbits (int _visbits)
+ {
+ visbits = _visbits;
+ }
+
+ void
+ clear_all_visbits ()
+ {
+ visbits = VAL_NA;
+ }
+
+ void
+ enable_all_visbits ()
+ {
+ visbits = get_value_styles ();
+ }
+
+
+#define VAL_IS_HIDDEN(n) ((n) == -1 || (n) == VAL_NA || ((n) & VAL_HIDE_ALL) != 0)
+
+ bool
+ is_any_visible ()
+ {
+ return !VAL_IS_HIDDEN (visbits)
+ && (visbits & (VAL_VALUE | VAL_TIMEVAL | VAL_PERCENT));
+ }
+
+ bool
+ is_value_visible ()
+ {
+ return (visbits & VAL_VALUE) != 0
+ || (!is_time_val () && (visbits & VAL_TIMEVAL) != 0);
+ }
+
+ bool
+ is_time_visible ()
+ {
+ return is_time_val () && (visbits & VAL_TIMEVAL) != 0;
+ }
+
+ bool
+ is_visible ()
+ {
+ return !VAL_IS_HIDDEN (visbits) && is_value_visible ();
+ }
+
+ bool
+ is_tvisible ()
+ {
+ return !VAL_IS_HIDDEN (visbits) && is_time_visible ();
+ }
+
+ bool
+ is_pvisible ()
+ {
+ return !VAL_IS_HIDDEN (visbits) && (visbits & VAL_PERCENT) != 0;
+ }
+
+ bool
+ is_time_val ()
+ {
+ int v = VAL_TIMEVAL | VAL_VALUE;
+ return (get_value_styles () & v) == v;
+ }
+
+ // per-bit handling of visbits
+ // Note: Forces VAL_HIDE_ALL to zero. Use only on temporary Metric objects.
+ void set_vvisible (bool set);
+ void set_tvisible (bool set);
+ void set_pvisible (bool set);
+
+ void set_subtype (SubType st);
+ void legend_width (HistMetric *hitem, int gap);
+ char *get_vis_str ();
+ char *get_vis_string (int vis);
+ char *dump ();
+
+
+private:
+ BaseMetric *baseMetric;
+ SubType subtype; // specific variant for this Metric
+ char *name;
+ char *abbr;
+ char *abbr_unit;
+ int visbits; // ValueType, e.g. VAL_VALUE|VAL_TIMEVAL
+};
+
+#endif /* _METRIC_H */
diff --git a/gprofng/src/MetricList.cc b/gprofng/src/MetricList.cc
new file mode 100644
index 00000000000..75965245caf
--- /dev/null
+++ b/gprofng/src/MetricList.cc
@@ -0,0 +1,1075 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include "util.h"
+#include "Command.h"
+#include "DbeSession.h"
+#include "MetricList.h"
+#include "StringBuilder.h"
+
+// Build a metric reference list
+MetricList::MetricList (Vector<BaseMetric*> *base_metrics, MetricType _mtype)
+{
+ mtype = _mtype;
+ items = new Vector<Metric*>;
+ sort_ref_index = 0;
+ sort_reverse = false;
+
+ Metric *mitem;
+ // loop over the base_metrics, and add in all the appropriate subtypes
+ for (long i = 0, sz = base_metrics ? base_metrics->size () : 0; i < sz; i++)
+ {
+ BaseMetric *mtr = base_metrics->get (i);
+ if (mtr->is_internal ())
+ continue;
+ switch (mtype)
+ {
+ case MET_DATA:
+ if ((mtr->get_flavors () & BaseMetric::DATASPACE) != 0)
+ {
+ mitem = new Metric (mtr, BaseMetric::DATASPACE);
+ items->append (mitem);
+ }
+ break;
+
+ case MET_INDX:
+ {
+ if ((mtr->get_flavors () & BaseMetric::INCLUSIVE) != 0
+ || (mtr->get_flavors () & BaseMetric::EXCLUSIVE) != 0)
+ {
+ int index2;
+ Metric *item2 = NULL;
+ bool found = false;
+ Vec_loop (Metric*, items, index2, item2)
+ {
+ if (item2->get_subtype () == BaseMetric::EXCLUSIVE
+ && dbe_strcmp (item2->get_cmd (), mtr->get_cmd ()) == 0)
+ {
+ found = true;
+ break;
+ }
+ }
+ if (found == false)
+ {
+ mitem = new Metric (mtr, BaseMetric::EXCLUSIVE);
+ items->append (mitem);
+ }
+ }
+ }
+ break;
+
+ case MET_CALL:
+ case MET_CALL_AGR:
+ if ((mtr->get_flavors () & BaseMetric::ATTRIBUTED) != 0)
+ {
+ mitem = new Metric (mtr, BaseMetric::ATTRIBUTED);
+ items->append (mitem);
+ }
+ // now fall through to add exclusive and inclusive
+
+ case MET_NORMAL:
+ case MET_COMMON:
+ if (mtr->get_flavors () & BaseMetric::EXCLUSIVE)
+ {
+ mitem = new Metric (mtr, BaseMetric::EXCLUSIVE);
+ items->append (mitem);
+ }
+ if (mtr->get_flavors () & BaseMetric::INCLUSIVE)
+ {
+ mitem = new Metric (mtr, BaseMetric::INCLUSIVE);
+ items->append (mitem);
+ }
+ break;
+ case MET_SRCDIS:
+ if (mtr->get_flavors () & BaseMetric::INCLUSIVE)
+ {
+ mitem = new Metric (mtr, BaseMetric::INCLUSIVE);
+ items->append (mitem);
+ }
+ break;
+ case MET_IO:
+ {
+ if (mtr->get_packet_type () == DATA_IOTRACE
+ && ((mtr->get_flavors () & BaseMetric::INCLUSIVE) != 0
+ || (mtr->get_flavors () & BaseMetric::EXCLUSIVE) != 0))
+ {
+ int index2;
+ Metric *item2 = NULL;
+ bool found = false;
+ Vec_loop (Metric*, items, index2, item2)
+ {
+ if (item2->get_subtype () == BaseMetric::EXCLUSIVE
+ && dbe_strcmp (item2->get_cmd (), mtr->get_cmd ()) == 0)
+ {
+ found = true;
+ break;
+ }
+ }
+ if (found == false)
+ {
+ mitem = new Metric (mtr, BaseMetric::EXCLUSIVE);
+ items->append (mitem);
+ }
+ }
+ }
+ break;
+ case MET_HEAP:
+ {
+ if (mtr->get_packet_type () == DATA_HEAP
+ && ((mtr->get_flavors () & BaseMetric::INCLUSIVE) != 0
+ || (mtr->get_flavors () & BaseMetric::EXCLUSIVE) != 0))
+ {
+ int index2;
+ Metric *item2 = NULL;
+ bool found = false;
+ Vec_loop (Metric*, items, index2, item2)
+ {
+ if ((item2->get_subtype () == BaseMetric::EXCLUSIVE) &&
+ (dbe_strcmp (item2->get_cmd (), mtr->get_cmd ()) == 0))
+ {
+ found = true;
+ break;
+ }
+ }
+ if (found == false)
+ {
+ mitem = new Metric (mtr, BaseMetric::EXCLUSIVE);
+ items->append (mitem);
+ }
+ }
+ }
+ break;
+ }
+
+ // add the static
+ if (mtr->get_flavors () & BaseMetric::STATIC)
+ {
+ switch (mtype)
+ {
+ case MET_NORMAL:
+ case MET_COMMON:
+ case MET_CALL:
+ case MET_CALL_AGR:
+ case MET_SRCDIS:
+ mitem = new Metric (mtr, BaseMetric::STATIC);
+ items->append (mitem);
+ break;
+ default:
+ if (mtr->get_type () == BaseMetric::ONAME)
+ {
+ mitem = new Metric (mtr, BaseMetric::STATIC);
+ items->append (mitem);
+ }
+ break;
+ }
+ }
+ }
+ // set all metrics visible
+ for (long i = 0, sz = items ? items->size () : 0; i < sz; i++)
+ items->get (i)->enable_all_visbits ();
+}
+
+// Constructor for an empty list -- items will be added one at a time
+MetricList::MetricList (MetricType _mtype)
+{
+ mtype = _mtype;
+ items = new Vector<Metric*>;
+ sort_ref_index = 0;
+ sort_reverse = false;
+}
+
+MetricList::~MetricList ()
+{
+ Destroy (items);
+}
+
+// Duplicate a metric list
+MetricList::MetricList (MetricList *old)
+{
+ mtype = old->mtype;
+
+ // get an empty vector
+ items = new Vector<Metric*>;
+ Metric *item;
+ Metric *nitem;
+ int index;
+ sort_ref_index = old->get_sort_ref_index ();
+ sort_reverse = old->get_sort_rev ();
+ Vec_loop (Metric*, old->items, index, item)
+ {
+ nitem = new Metric (*item);
+ items->append (nitem);
+ }
+}
+
+// set_metrics:
+// Sets the particular metric list, according to the metric spec
+// If fromRcFile, updates dbeSession->get_reg_metrics_tree() with new defaults.
+char *
+MetricList::set_metrics (const char *mspec, bool fromRcFile,
+ DerivedMetrics * /* derived_metrics */)
+{
+ BaseMetric::SubType subtypes[10];
+ int nsubtypes;
+ int dmetrics_vis; // literal translation of metrics/dmetrics %.+
+ bool parseOK = false;
+ char *errbuf;
+ Vector<Metric*> *old_items = items;
+ items = new Vector<Metric*>;
+ Vector<BaseMetric*> *base_items = dbeSession->get_base_reg_metrics ();
+
+ // and copy the input specification
+ char *buf = dbe_strdup (mspec);
+
+ // append metric items from parsing the string
+ for (char *mcmd = strtok (buf, NTXT (":")); mcmd != NULL;
+ mcmd = strtok (NULL, NTXT (":")))
+ {
+ // parse the single metric_spec, based on the type of list being constructed, into:
+ // a vector of SubTypes (any of [iead] or STATIC)
+ // a integer mask for the visibility bits
+ // and the string name of the base metric
+ // it might be "all", "any", or "hwc" or it should match a metric in the list
+ // it might also be "bit", meaning any bit-computed metric
+ char *mname = parse_metric_spec (mcmd, subtypes, &nsubtypes,
+ &dmetrics_vis, &parseOK);
+ if (!parseOK)
+ {
+ // error parsing the metric specification
+ // not from an rc file, it's an error
+ if (!fromRcFile)
+ {
+ delete base_items;
+ items->destroy ();
+ delete items;
+ items = old_items;
+ free (buf);
+ return mname;
+ }
+ continue;
+ }
+
+ // loop over subtypes requested
+ // set the visibility of and sort order according to the vis bits,
+ // and the order of encounter in the processing
+ int ret = add_matching_dmetrics (base_items, mname, subtypes, nsubtypes,
+ dmetrics_vis, fromRcFile);
+ if (ret != 0 && !fromRcFile)
+ {
+ if (ret == 1)
+ errbuf = dbe_sprintf (GTXT ("No data recorded to support metric specification: %s\n"),
+ mcmd);
+ else
+ errbuf = dbe_sprintf (GTXT ("Metric specification for `%s' has appeared before in %s"),
+ mcmd, mspec);
+ delete base_items;
+ items->destroy ();
+ delete items;
+ items = old_items;
+ free (buf);
+ return errbuf;
+ }
+ } // we've processed the entire spec
+
+ // update metric defaults
+ if (fromRcFile)
+ {
+ for (long i = 0, sz = items->size (); i < sz; i++)
+ {
+ Metric *m = items->get (i);
+ int visbits = m->get_visbits ();
+ BaseMetric::SubType subtype = m->get_subtype ();
+ BaseMetric *reg_bm = m->get_base_metric ();
+ reg_bm->set_default_visbits (subtype, visbits);
+ BaseMetricTreeNode *mtree = dbeSession->get_reg_metrics_tree ();
+ BaseMetricTreeNode *bmtnode = mtree->register_metric (m);
+ BaseMetric *tree_bm = bmtnode->get_BaseMetric ();
+ tree_bm->set_default_visbits (subtype, visbits);
+ }
+ }
+
+ // ensure that name is present, remove hidden metrics
+ nsubtypes = 1;
+ for (long i = items->size () - 1; i >= 0; i--)
+ {
+ Metric *m = items->fetch (i);
+ if (!m->is_any_visible ())
+ {
+ delete m;
+ items->remove (i);
+ continue;
+ }
+ if (m->get_type () == BaseMetric::ONAME)
+ nsubtypes = 0;
+ }
+
+ // did we get at least one valid match?
+ if (items->size () == 0 && !fromRcFile)
+ {
+ errbuf = dbe_sprintf (GTXT ("No valid metrics specified in `%s'\n"), mspec);
+ delete base_items;
+ items->destroy ();
+ delete items;
+ items = old_items;
+ free (buf);
+ return errbuf;
+ }
+
+ if (nsubtypes == 1)
+ {
+ subtypes[0] = BaseMetric::STATIC;
+ (void) add_matching_dmetrics (base_items, NTXT ("name"), subtypes, 1, VAL_VALUE, true);
+ }
+
+ // replace the old list of items, with the new set
+ if (old_items)
+ {
+ old_items->destroy ();
+ delete old_items;
+ }
+ set_fallback_sort ();
+ free (buf);
+ delete base_items;
+ return NULL;
+}
+
+void
+MetricList::set_fallback_sort ()
+{
+ // sort by first visible of the appropriate flavor
+ char *sortcmd = NULL;
+ switch (mtype)
+ {
+ case MET_NORMAL:
+ case MET_COMMON:
+ sortcmd = NTXT ("ei.any:name");
+ break;
+ case MET_SRCDIS:
+ sortcmd = NTXT ("i.any:name");
+ break;
+ case MET_CALL:
+ case MET_CALL_AGR:
+ sortcmd = NTXT ("a.any:name");
+ break;
+ case MET_DATA:
+ sortcmd = NTXT ("d.any:name");
+ break;
+ case MET_INDX:
+ sortcmd = NTXT ("e.any:name");
+ break;
+ case MET_IO:
+ sortcmd = NTXT ("e.any:name");
+ break;
+ case MET_HEAP:
+ sortcmd = NTXT ("e.any:name");
+ break;
+ }
+ if (NULL != sortcmd)
+ (void) set_sort (sortcmd, true);
+}
+
+void
+MetricList::set_metrics (MetricList *mlist)
+{
+ // verify that the type is appropriate for the call
+ if (mtype == MET_NORMAL || mtype == MET_COMMON
+ || (mlist->mtype != MET_NORMAL && mlist->mtype != MET_COMMON))
+ abort ();
+
+ Vector<Metric*> *mlist_items = mlist->get_items ();
+ items->destroy ();
+ items->reset ();
+
+ int sort_ind = mlist->get_sort_ref_index ();
+ for (int i = 0, mlist_sz = mlist_items->size (); i < mlist_sz; i++)
+ {
+ Metric *mtr = mlist_items->fetch (i);
+ if (!mtr->is_any_visible ())
+ continue;
+
+ // Add a new Metric with probably a new sub_type to this->items:
+ // for MET_CALL and MET_CALL_AGR the matching entry to an e. or i. is itself
+ // for MET_DATA, the matching entry to an e. or i. is the d. metric
+ // for MET_INDX, the matching entry to an e. or i. is the e. metric
+ // for MET_IO, the matching entry to an e. or i. is the e. metric
+ // for MET_HEAP, the matching entry to an e. or i. is the e. metric
+ // Save static entries (SIZES and ADDRESS) only for MET_NORMAL, MET_CALL, MET_CALL_AGR, MET_SRCDIS
+ switch (mtr->get_type ())
+ {
+ case BaseMetric::SIZES:
+ case BaseMetric::ADDRESS:
+ switch (mtype)
+ {
+ case MET_NORMAL:
+ case MET_COMMON:
+ case MET_CALL:
+ case MET_CALL_AGR:
+ case MET_SRCDIS:
+ break;
+ default:
+ continue;
+ }
+ break;
+ default:
+ break;
+ }
+
+ BaseMetric::SubType st = mtr->get_subtype ();
+ if (st != BaseMetric::STATIC)
+ {
+ if (mtype == MET_CALL || mtype == MET_CALL_AGR)
+ {
+ if ((mtr->get_flavors () & BaseMetric::ATTRIBUTED) == 0)
+ continue;
+ st = BaseMetric::ATTRIBUTED;
+ }
+ else if (mtype == MET_DATA)
+ {
+ if ((mtr->get_flavors () & BaseMetric::DATASPACE) == 0)
+ continue;
+ st = BaseMetric::DATASPACE;
+ }
+ else if (mtype == MET_INDX)
+ {
+ if ((mtr->get_flavors () & BaseMetric::EXCLUSIVE) == 0)
+ continue;
+ st = BaseMetric::EXCLUSIVE;
+ }
+ else if (mtype == MET_IO)
+ {
+ if (mtr->get_packet_type () != DATA_IOTRACE ||
+ (mtr->get_flavors () & BaseMetric::EXCLUSIVE) == 0)
+ continue;
+ st = BaseMetric::EXCLUSIVE;
+ }
+ else if (mtype == MET_HEAP)
+ {
+ if (mtr->get_packet_type () != DATA_HEAP ||
+ (mtr->get_flavors () & BaseMetric::EXCLUSIVE) == 0)
+ continue;
+ st = BaseMetric::EXCLUSIVE;
+ }
+ else if (mtype == MET_SRCDIS)
+ {
+ if ((mtr->get_flavors () & BaseMetric::INCLUSIVE) == 0)
+ continue;
+ st = BaseMetric::INCLUSIVE;
+ }
+ }
+
+ bool found = false;
+ for (int i1 = 0, items_sz = items->size (); i1 < items_sz; i1++)
+ {
+ Metric *m1 = items->fetch (i1);
+ if (mtr->get_id () == m1->get_id () && st == m1->get_subtype ())
+ {
+ if (sort_ind == i)
+ sort_ind = i1;
+ found = true;
+ break;
+ }
+ }
+ if (found)
+ continue;
+ Metric *m = new Metric (*mtr);
+ m->set_subtype (st);
+ m->set_raw_visbits (mtr->get_visbits ());
+ if (sort_ind == i)
+ sort_ind = items->size ();
+ items->append (m);
+ }
+ if (sort_ind >= items->size ())
+ sort_ind = 0;
+ if (mtype == MET_IO)
+ sort_ind = 0;
+ if (mtype == MET_HEAP)
+ sort_ind = 0;
+ sort_ref_index = sort_ind;
+
+}
+
+
+// set_sort:
+// Sets the sort for the metric list to the first metric
+// in mspec that is present; if fromRcFile is false, then
+// only one metric may be specified. The requested sort
+// metric must be visible, or it won't be in the metric list
+
+char *
+MetricList::set_sort (const char *mspec, bool fromRcFile)
+{
+ char *mcmd;
+ BaseMetric::SubType subtypes[10];
+ int nsubtypes;
+ int vis;
+ bool parseOK = false;
+ bool reverse = false;
+ char buf[BUFSIZ];
+ char *list = buf;
+ char *mname;
+
+ // copy the input specification
+ snprintf (buf, sizeof (buf), NTXT ("%s"), mspec);
+ char *listp = list;
+ if (*listp == '-')
+ {
+ // reverse sort specified
+ reverse = true;
+ listp++;
+ }
+
+ // search for metric items from parsing the string
+ while ((mcmd = strtok (listp, NTXT (":"))) != NULL)
+ {
+ listp = NULL; // let strtok keep track
+
+ // parse the single metric_spec, based on the type of list being constructed, into:
+ // a vector of SubTypes (any of [iead] or STATIC)
+ // a integer mask for the visibility bits
+ // and the string name of the base metric
+ mname = parse_metric_spec (mcmd, subtypes, &nsubtypes, &vis, &parseOK);
+ if (!parseOK)
+ {
+ // error parsing the metric specification
+ // not from an rc file, it's an error
+ if (!fromRcFile)
+ return (mname);
+ continue;
+ }
+ if (VAL_IS_HIDDEN (vis))
+ continue;
+
+ // loop over subtypes requested to find metric
+ // add a metric of that subtype, with specified vis.bits
+ for (int i = 0; i < nsubtypes; i++)
+ {
+ // make sure the subtype is acceptable
+ if ((mtype == MET_CALL || mtype == MET_CALL_AGR)
+ && subtypes[i] != BaseMetric::ATTRIBUTED
+ && subtypes[i] != BaseMetric::STATIC)
+ return dbe_sprintf (GTXT ("Inclusive, Exclusive, or Data metrics cannot be specified for caller-callee sort: %s\n"),
+ mcmd);
+ if (mtype == MET_DATA && subtypes[i] != BaseMetric::DATASPACE
+ && subtypes[i] != BaseMetric::STATIC)
+ return dbe_sprintf (GTXT ("Inclusive, Exclusive, or Attributed metrics cannot be specified for data-derived sort: %s\n"),
+ mcmd);
+ if (mtype == MET_INDX && subtypes[i] != BaseMetric::EXCLUSIVE
+ && subtypes[i] != BaseMetric::STATIC)
+ return dbe_sprintf (GTXT ("Inclusive, Data or Attributed metrics cannot be specified for index sort: %s\n"),
+ mcmd);
+ if ((mtype == MET_NORMAL || mtype == MET_COMMON
+ || mtype == MET_SRCDIS)
+ && (subtypes[i] == BaseMetric::DATASPACE
+ || subtypes[i] == BaseMetric::ATTRIBUTED))
+ return dbe_sprintf (GTXT ("Data or Attributed metrics cannot be specified for sort: %s\n"), mcmd);
+ if (set_sort_metric (mname, subtypes[i], reverse))
+ return NULL;
+ }
+ // continue looking at entries
+ }
+
+ // not found on the list at all
+ switch (mtype)
+ {
+ case MET_NORMAL:
+ case MET_COMMON:
+ case MET_SRCDIS:
+ return dbe_sprintf (GTXT ("Invalid sort specification: %s\n"), mspec);
+ case MET_CALL:
+ case MET_CALL_AGR:
+ return dbe_sprintf (GTXT ("Invalid caller-callee sort specification: %s\n"),
+ mspec);
+ case MET_DATA:
+ return dbe_sprintf (GTXT ("Invalid data-derived sort specification: %s\n"),
+ mspec);
+ case MET_INDX:
+ return dbe_sprintf (GTXT ("Invalid index sort specification: %s\n"),
+ mspec);
+ case MET_IO:
+ return dbe_sprintf (GTXT ("Invalid I/O sort specification: %s\n"), mspec);
+ case MET_HEAP:
+ return dbe_sprintf (GTXT ("Invalid heap sort specification: %s\n"),
+ mspec);
+ }
+ return NULL;
+}
+
+// set_sort to the metric with the given visible index
+
+void
+MetricList::set_sort (int visindex, bool reverse)
+{
+ Metric *mitem;
+ if (visindex < items->size ())
+ {
+ mitem = items->fetch (visindex);
+ if (mitem->is_any_visible ())
+ {
+ sort_ref_index = visindex;
+ sort_reverse = reverse;
+ return;
+ }
+ }
+ set_fallback_sort ();
+}
+
+bool
+MetricList::set_sort_metric (char *mname, BaseMetric::SubType mst, bool reverse)
+{
+ bool any = false, hwc = false, bit = false;
+
+ // check keywords 'any', 'all', 'bit' and 'hwc'
+ if (!strcasecmp (mname, Command::ANY_CMD))
+ any = true;
+ else if (!strcasecmp (mname, Command::ALL_CMD))
+ any = true;
+ else if (!strcasecmp (mname, Command::HWC_CMD))
+ hwc = true;
+ else if (!strcasecmp (mname, Command::BIT_CMD))
+ bit = true;
+
+ for (int i = 0, items_sz = items->size (); i < items_sz; i++)
+ {
+ Metric *m = items->fetch (i);
+ if (mst == m->get_subtype ()
+ && (any || (hwc && m->get_type () == BaseMetric::HWCNTR)
+ || (bit && m->get_cmd ()
+ && strncmp (Command::BIT_CMD, m->get_cmd (),
+ strlen (Command::BIT_CMD)) == 0)
+ || dbe_strcmp (mname, m->get_cmd ()) == 0))
+ {
+ sort_ref_index = i;
+ sort_reverse = reverse;
+ return true;
+ }
+ }
+ return false;
+}
+
+// Print to a file of a list of metrics from a supplied vector
+// Debug flag = 1, prints the short name and address of the list
+// Debug flag = 2, prints the details of the list
+void
+MetricList::print_metric_list (FILE *dis_file, char *leader, int debug)
+{
+ Metric *item;
+ int index;
+ char fmt_name[64];
+ fprintf (dis_file, NTXT ("%s"), leader);
+ if (items == NULL)
+ {
+ fprintf (dis_file, GTXT ("NULL metric list can not be printed; aborting"));
+ abort ();
+ }
+
+ if (items->size () == 0)
+ {
+ fprintf (dis_file, GTXT ("metric list is empty; aborting\n"));
+ abort ();
+ }
+
+ // if debugging, print list address and string, and sort name
+ if (debug != 0)
+ {
+ char *s = get_metrics ();
+ fprintf (dis_file, "\tmetriclist at 0x%lx: %s, %lld metrics; sort by %s\n",
+ (unsigned long) this, s, (long long) items->size (),
+ get_sort_name ());
+ free (s);
+ if (debug == 1)
+ return;
+ }
+
+ // Find the longest metric name & command
+ size_t max_len = 0;
+ size_t max_len2 = 0;
+
+ Vec_loop (Metric*, items, index, item)
+ {
+ // get the name
+ char *mn = item->get_name ();
+ size_t len = strlen (mn);
+ if (max_len < len)
+ max_len = len;
+
+ mn = item->get_mcmd (true);
+ len = strlen (mn);
+ if (max_len2 < len)
+ max_len2 = len;
+ free (mn);
+
+ }
+ if (debug == 2)
+ snprintf (fmt_name, sizeof (fmt_name), "%%%ds: %%-%ds", (int) max_len,
+ (int) max_len2);
+ else
+ snprintf (fmt_name, sizeof (fmt_name), "%%%ds: %%s", (int) max_len);
+
+ Vec_loop (Metric*, items, index, item)
+ {
+ char *mcmd = item->get_mcmd (true);
+ fprintf (dis_file, fmt_name, item->get_name (), mcmd);
+ free (mcmd);
+ if (debug == 2)
+ fprintf (dis_file, "\t[st %2d, VT %d, vis = %4s, T=%d, sort = %c]",
+ item->get_subtype (), item->get_vtype (),
+ item->get_vis_str (), item->is_time_val (),
+ sort_ref_index == index ? 'Y' : 'N');
+ fputc ('\n', dis_file);
+ }
+
+ fputc ('\n', dis_file);
+ fflush (dis_file);
+}
+
+// Return a string formatted from a vector of metrics
+// string is in the form suitable for a "metrics <string>" command
+char *
+MetricList::get_metrics ()
+{
+ Metric *item;
+ int index;
+ StringBuilder sb;
+ Vec_loop (Metric*, items, index, item)
+ {
+ if (sb.length () != 0)
+ sb.append (':');
+ char *mcmd = item->get_mcmd (false);
+ sb.append (mcmd);
+ free (mcmd);
+ }
+ return sb.toString ();
+}
+
+int
+MetricList::get_listorder (Metric *mtr)
+{
+ for (int i = 0, items_sz = items->size (); i < items_sz; i++)
+ {
+ Metric *m = items->fetch (i);
+ if (m->get_subtype () == mtr->get_subtype ()
+ && m->get_id () == mtr->get_id ())
+ return i;
+ }
+ return -1;
+}
+
+int
+MetricList::get_listorder (char *cmd, BaseMetric::SubType st, const char *expr)
+{
+ for (long i = 0, items_sz = items->size (); i < items_sz; i++)
+ {
+ Metric *m = items->fetch (i);
+ if (m->get_subtype () == st && dbe_strcmp (m->get_cmd (), cmd) == 0
+ && dbe_strcmp (m->get_expr_spec (), expr) == 0)
+ return (int) i;
+ }
+ return -1;
+}
+
+Metric *
+MetricList::find_metric_by_name (char *cmd)
+{
+ for (long i = 0, items_sz = items->size (); i < items_sz; i++)
+ {
+ Metric *m = items->fetch (i);
+ if (dbe_strcmp (m->get_cmd (), cmd) == 0)
+ return m;
+ }
+ return NULL;
+}
+
+// find a metric by name and subtype
+Metric *
+MetricList::find_metric (char *cmd, BaseMetric::SubType st)
+{
+ int i = get_listorder (cmd, st);
+ if (i < 0)
+ return NULL;
+ return items->fetch (i);
+}
+
+// Get the sort metric from a list; forces sort by first if not set
+Metric *
+MetricList::get_sort_metric ()
+{
+ int i = get_sort_ref_index ();
+ return i >= 0 ? items->fetch (i) : NULL;
+}
+
+char *
+MetricList::get_sort_name ()
+{
+ Metric *item = get_sort_metric ();
+ if (item == NULL)
+ return dbe_strdup (NTXT (""));
+ char *n = item->get_name ();
+ return sort_reverse ? dbe_sprintf ("-%s", n) : dbe_strdup (n);
+}
+
+char *
+MetricList::get_sort_cmd ()
+{
+ char *buf;
+ Metric *item = get_sort_metric ();
+ if (item == NULL)
+ return dbe_strdup (NTXT (""));
+ char *n = item->get_mcmd (false);
+ if (sort_reverse)
+ {
+ buf = dbe_sprintf (NTXT ("-%s"), n);
+ free (n);
+ }
+ else
+ buf = n;
+ return buf;
+}
+
+Metric *
+MetricList::append (BaseMetric *bm, BaseMetric::SubType st, int visbits)
+{
+ for (long i = 0, sz = items->size (); i < sz; i++)
+ {
+ Metric *m = items->get (i);
+ if (m->get_id () == bm->get_id () && m->get_subtype () == st)
+ return NULL;
+ }
+ Metric *met = new Metric (bm, st);
+ met->set_dmetrics_visbits (visbits);
+ items->append (met);
+ return met;
+}
+
+int
+MetricList::add_matching_dmetrics (Vector<BaseMetric*> *base_items,
+ char *mcmd, BaseMetric::SubType *_subtypes,
+ int nsubtypes, int dmetrics_visbits,
+ bool fromRcFile)
+{
+ bool any = false, hwc = false, bit = false;
+ int got_metric = 1;
+
+ // check keywords 'any', 'all', 'bit', and 'hwc'
+ if (!strcasecmp (mcmd, Command::ANY_CMD))
+ any = true;
+ else if (!strcasecmp (mcmd, Command::ALL_CMD))
+ any = true;
+ else if (!strcasecmp (mcmd, Command::HWC_CMD))
+ hwc = true;
+ else if (!strcasecmp (mcmd, Command::BIT_CMD))
+ bit = true;
+
+ BaseMetric::SubType *subtypes = _subtypes;
+ BaseMetric::SubType all_subtypes[2] =
+ { BaseMetric::EXCLUSIVE, BaseMetric::INCLUSIVE };
+
+ if (nsubtypes == 0 || (nsubtypes == 1 && subtypes[0] == BaseMetric::STATIC))
+ {
+ // user did not specify ei; treat as wildcard and supply both.
+ subtypes = all_subtypes;
+ nsubtypes = 2;
+ }
+
+ // scan the metrics to find all matches
+ for (int i = 0, base_sz = base_items->size (); i < base_sz; i++)
+ {
+ BaseMetric *item = base_items->fetch (i);
+ if (!(any || (hwc && item->get_type () == BaseMetric::HWCNTR)
+ || (bit && item->get_cmd ()
+ && strncmp (item->get_cmd (), Command::BIT_CMD,
+ strlen (Command::BIT_CMD)) == 0)
+ || dbe_strcmp (item->get_cmd (), mcmd) == 0))
+ continue;
+ if (item->is_internal ())
+ continue;
+ if (item->get_flavors () & BaseMetric::STATIC)
+ {
+ got_metric = 0;
+ int vis = item->get_type () != BaseMetric::ONAME ?
+ dmetrics_visbits : VAL_VALUE;
+ if (append (item, BaseMetric::STATIC, vis) == NULL && !fromRcFile)
+ return 2;
+ continue;
+ }
+
+ // special case for omp metrics: make visible only if
+ // omp data has been collected
+ if (!dbeSession->is_omp_available ()
+ && (strcasecmp (mcmd, "ompwork") == 0
+ || strcasecmp (mcmd, "ompwait") == 0))
+ continue;
+
+ for (int j = 0; j < nsubtypes; j++)
+ {
+ if (append (item, subtypes[j], dmetrics_visbits) == NULL
+ && !fromRcFile)
+ return 2;
+ }
+ got_metric = 0;
+ if (!(any || hwc || bit))
+ break;
+ }
+ return got_metric;
+}
+
+// parse a single metric specification, to give:
+// a vector of subtypes, and a count of the number of them
+// an integer visibility
+// return the string for the metric name
+
+char *
+MetricList::parse_metric_spec (char *mcmd, BaseMetric::SubType *subtypes,
+ int *nsubtypes, int *dmetrics_visb, bool *isOK)
+{
+ size_t len_vtype;
+ int index;
+ int vis;
+ bool got_e, got_i, got_a, got_d;
+ char *str = mcmd;
+ char *str2;
+
+ *isOK = true;
+
+ // For dynamic metrics, each keyword is of the form <flavor><visibility><metric-name>
+ // For static metrics, each keyword is of the form [<visibility>]<metric-name>
+ // <flavor> can be either "i" for inclusive or "e" for exclusive
+ // <visibility> can be any combination of "." (to show the metric as a time),
+ // "%" (to show it as a percentage), "+" (to show it as a count), and "!" (turn off the metric)
+
+ // find subtype
+ index = 0;
+ size_t len_subtype = strspn (str, NTXT ("eiad"));
+ str2 = str + len_subtype;
+
+ // find vis
+ if (len_subtype == 0)
+ {
+ // only a . or ! is possible if no subtypes
+ len_vtype = strspn (str2, NTXT (".!"));
+ vis = VAL_VALUE;
+ }
+ else
+ {
+ len_vtype = strspn (str2, NTXT (".+%!"));
+ vis = VAL_NA;
+ }
+
+ // if no visibility bits, there can't be a subtype
+ if (len_vtype == 0)
+ len_subtype = 0;
+
+ if (len_subtype == 0)
+ {
+ // must be a static metric
+ subtypes[index++] = BaseMetric::STATIC;
+ vis = VAL_VALUE;
+ }
+ else
+ {
+ // figure out which subtypes are specified
+ got_e = got_i = got_a = got_d = false;
+ for (size_t i = 0; i < len_subtype; i++)
+ {
+ str += len_subtype;
+ if (mcmd[i] == 'e')
+ { // exclusive
+ if (mtype == MET_DATA)
+ {
+ *isOK = false;
+ return dbe_sprintf (GTXT ("Invalid metric specification: %s inapplicable for data metrics\n"),
+ mcmd);
+ }
+ if (!got_e)
+ {
+ got_e = true;
+ subtypes[index++] = BaseMetric::EXCLUSIVE;
+ }
+ }
+ else if (mcmd[i] == 'i')
+ { // inclusive
+ if (mtype == MET_DATA)
+ {
+ *isOK = false;
+ return dbe_sprintf (GTXT ("Invalid metric specification: %s inapplicable for data metrics\n"),
+ mcmd);
+ }
+ if (mtype == MET_INDX)
+ {
+ *isOK = false;
+ return dbe_sprintf (GTXT ("Invalid metric specification: %s inapplicable for index metrics\n"),
+ mcmd);
+ }
+ if (!got_i)
+ {
+ got_i = true;
+ subtypes[index++] = BaseMetric::INCLUSIVE;
+ }
+ }
+ else if (mcmd[i] == 'a')
+ { // attributed
+ if (mtype != MET_CALL && mtype != MET_CALL_AGR)
+ {
+ *isOK = false;
+ return dbe_sprintf (GTXT ("Invalid metric specification: %s applicable for caller-callee metrics only\n"),
+ mcmd);
+ }
+ if (!got_a)
+ {
+ got_a = true;
+ subtypes[index++] = BaseMetric::ATTRIBUTED;
+ }
+ }
+ else if (mcmd[i] == 'd')
+ { // data-space
+ if (mtype != MET_DATA)
+ {
+ *isOK = false;
+ return dbe_sprintf (GTXT ("Invalid metric specification: %s applicable for data-derived metrics only\n"),
+ mcmd);
+ }
+ if (!got_d)
+ {
+ got_d = true;
+ subtypes[index++] = BaseMetric::DATASPACE;
+ }
+ }
+ }
+ }
+ *nsubtypes = index;
+
+ // now determine the visiblity bits
+ if (len_vtype > 0)
+ {
+ for (size_t i = 0; i < len_vtype; i++)
+ {
+ if (str2[i] == '+')
+ vis = (vis | VAL_VALUE);
+ else if (str2[i] == '.')
+ vis = (vis | VAL_TIMEVAL);
+ else if (str2[i] == '%')
+ vis = (vis | VAL_PERCENT);
+ else if (str2[i] == '!')
+ vis = (vis | VAL_HIDE_ALL);
+ }
+ }
+ *dmetrics_visb = vis;
+ return mcmd + len_subtype + len_vtype;
+}
diff --git a/gprofng/src/MetricList.h b/gprofng/src/MetricList.h
new file mode 100644
index 00000000000..b8486c1eed5
--- /dev/null
+++ b/gprofng/src/MetricList.h
@@ -0,0 +1,163 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _METRICLIST_H
+#define _METRICLIST_H
+
+#include "dbe_structs.h"
+#include "vec.h"
+#include "enums.h"
+#include "Metric.h"
+#include "DerivedMetrics.h"
+#include <stdio.h>
+
+//
+// The MetricList class is used to manage a list of metrics
+
+class MetricList
+{
+public:
+
+ MetricList (Vector<BaseMetric*> *base_metrics, MetricType type);
+ MetricList (MetricList *old);
+ MetricList (MetricType _mtype);
+ ~MetricList ();
+
+ // Methods concerning a list of metrics
+ // set metrics -- text, caller-callee, data, and index flavors
+ // flavor depends on mtype in the list
+ // returns NULL if OK, or an error string if not
+ // always returns NULL if fromRcFile is TRUE
+ char *set_metrics (const char *metric_cmd, bool fromRcFile, DerivedMetrics *derived_metrics);
+
+ // update the caller-callee or dataspace metrics to match normal metrics
+ // It is assumed that this->mtype is MET_CALL, MET_DATA, or MET_INDX and
+ // that metrics_list->mtype is MET_NORMAL
+ void set_metrics (MetricList *metrics_list);
+
+ // produce a string for the metrics from a vector
+ char *get_metrics ();
+
+ // set the sort metric for a list from a metric string
+ // returns NULL if OK, or an error string if not
+ char *set_sort (const char *metric_cmd, bool fromRcFile);
+
+ // set the sort metric for a list from the first visible index
+ void set_fallback_sort ();
+
+ // set the sort metric for a list from a visible index
+ void set_sort (int visindex, bool reverse);
+
+ char *get_sort_name (); // get the name of the sort metric from a vector
+
+ bool
+ get_sort_rev () // get the boolean reverse for the sort metric
+ {
+ return sort_reverse;
+ }
+
+ void
+ set_sort_rev (bool v)
+ {
+ sort_reverse = v;
+ }
+
+ int
+ get_sort_ref_index ()
+ {
+ return sort_ref_index;
+ }
+
+ void
+ set_sort_ref_index (int ind)
+ {
+ sort_ref_index = ind;
+ }
+
+ bool set_sort_metric (char *metric_cmd, BaseMetric::SubType mst, bool reverse);
+ Metric *find_metric (char *cmd, BaseMetric::SubType st);
+ Metric *find_metric_by_name (char *cmd);
+ int get_listorder (char *cmd, BaseMetric::SubType st, const char *expr = NULL);
+ int get_listorder (Metric *mtr);
+ Metric *get_sort_metric (); // get the sort metric from a vector
+ char *get_sort_cmd (); // get the command name of the sort metric
+
+ MetricType
+ get_type ()
+ {
+ return mtype;
+ }
+
+ Vector<Metric*> *
+ get_items () // get the vector of metrics from the list
+ {
+ return items;
+ }
+
+ Metric *
+ get (long i)
+ {
+ return items->get (i);
+ }
+
+ void
+ put (long i, Metric *m)
+ {
+ items->put (i, m);
+ }
+
+ void
+ append (Metric *m)
+ {
+ items->append (m);
+ }
+
+ long
+ size ()
+ {
+ return items ? items->size () : 0;
+ }
+
+ Metric *append (BaseMetric *bm, BaseMetric::SubType st, int visbits);
+
+ // produce a list of all metrics from a vector
+ void print_metric_list (FILE *dis_file, char *leader, int debug);
+
+ // Add any and all matching metrics to the growing list
+ // return value is zero for OK, 1 for no match
+ int add_matching_dmetrics (Vector<BaseMetric*> *base_items, char *cmd,
+ BaseMetric::SubType *subtypes, int nsubtypes,
+ int dmetrics_vis, // literal translation of dmetrics +. etc.
+ bool fromRcFile);
+
+private:
+ // parse a metric specification substring, based on type of list
+ char *parse_metric_spec (char *cmd, BaseMetric::SubType *subtypes,
+ int *nsubtypes, int *dmetrics_visb, bool *isOK);
+
+ Vector<Metric*> *items;
+ MetricType mtype;
+
+ // the sort reference index
+ int sort_ref_index;
+ bool sort_reverse;
+};
+
+#endif /* _METRICLIST_H */
diff --git a/gprofng/src/Module.cc b/gprofng/src/Module.cc
new file mode 100644
index 00000000000..1e61b429e95
--- /dev/null
+++ b/gprofng/src/Module.cc
@@ -0,0 +1,1840 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <unistd.h>
+#include <ar.h>
+#include <ctype.h>
+#include <sys/param.h>
+
+#include "util.h"
+#include "DbeSession.h"
+#include "Experiment.h"
+#include "DataObject.h"
+#include "Function.h"
+#include "DbeView.h"
+#include "MetricList.h"
+#include "Module.h"
+#include "ClassFile.h"
+#include "LoadObject.h"
+#include "Disasm.h"
+#include "CompCom.h"
+#include "Dwarf.h"
+#include "DbeFile.h"
+#include "PathTree.h"
+#include "Elf.h"
+
+Module::Module ()
+{
+ lang_code = Sp_lang_unknown;
+ flags = 0;
+ status = AE_NOTREAD;
+ openSourceFlag = AE_NOTREAD;
+ hexVisible = false;
+ disPath = NULL;
+ stabsPath = NULL;
+ stabsTmp = NULL;
+ disName = NULL;
+ stabsName = NULL;
+ indexStabsLink = NULL;
+ file_name = NULL;
+ functions = new Vector<Function*>;
+ loadobject = NULL;
+ dot_o_file = NULL;
+ main_source = dbeSession->get_Unknown_Source ();
+ srcContext = main_source;
+ includes = new Vector<SourceFile*>;
+ includes->append (main_source);
+ curr_inc = NULL;
+ fragmented = 0;
+ hwcprof = 0;
+ hdrOffset = 0;
+ hasDwarf = false;
+ hasStabs = false;
+ readStabs = false;
+ comComs = NULL;
+ infoList = NULL;
+ datatypes = NULL;
+ objStabs = NULL;
+ disasm = NULL;
+ comp_flags = NULL;
+ comp_dir = NULL;
+ linkerStabName = NULL;
+ disMTime = (time_t) 0;
+ stabsMTime = (time_t) 0;
+ real_timestamp = 0;
+ curr_timestamp = 0;
+ src_items = NULL;
+ dis_items = NULL;
+ data_items = NULL;
+ cur_dbev = NULL;
+ maximum = NULL;
+ maximum_inc = NULL;
+ empty = NULL;
+ inlinedSubr = NULL;
+}
+
+Module::~Module ()
+{
+ removeStabsTmp ();
+ delete includes;
+ if (comComs != NULL)
+ {
+ comComs->destroy ();
+ delete comComs;
+ }
+ free (comp_flags);
+ free (comp_dir);
+ free (linkerStabName);
+ free (disPath);
+ free (stabsPath);
+ free (disName);
+ free (stabsName);
+ delete functions;
+ free (file_name);
+ if (indexStabsLink)
+ // Remove a link to the current module
+ indexStabsLink->indexStabsLink = NULL;
+
+ if (dot_o_file)
+ {
+ delete dot_o_file->dbeFile;
+ delete dot_o_file;
+ }
+ delete src_items;
+ delete dis_items;
+ delete disasm;
+ free (inlinedSubr);
+ if (lang_code != Sp_lang_java)
+ delete dbeFile;
+
+}
+
+Stabs *
+Module::openDebugInfo ()
+{
+ setFile ();
+ objStabs = loadobject->openDebugInfo (disPath);
+ return objStabs;
+}
+
+void
+Module::removeStabsTmp ()
+{
+ // Remove temporary *.o (got from *.a) after reading Stabs
+ if (stabsTmp != NULL)
+ {
+ unlink (stabsTmp);
+ free (stabsTmp);
+ stabsTmp = NULL;
+ }
+}
+
+int64_t
+Module::get_size ()
+{
+ Function *fp;
+ int index;
+ int64_t result = 0;
+ Vec_loop (Function*, functions, index, fp)
+ {
+ result += fp->size;
+ }
+ return result;
+}
+
+bool
+Module::is_fortran ()
+{
+ return Stabs::is_fortran (lang_code);
+}
+
+SourceFile *
+Module::findSource (const char *fname, bool create)
+{
+ SourceFile *sf = NULL;
+ if (loadobject && loadobject->firstExp)
+ sf = loadobject->firstExp->get_source (fname);
+ if (sf == NULL)
+ sf = dbeSession->createSourceFile (fname);
+ for (int i = 0, sz = includes ? includes->size () : 0; i < sz; i++)
+ {
+ SourceFile *sf1 = includes->fetch (i);
+ if (sf == sf1)
+ return sf;
+ }
+ if (create)
+ {
+ if (includes == NULL)
+ includes = new Vector<SourceFile*>;
+ includes->append (sf);
+ return sf;
+ }
+ return NULL;
+}
+
+SourceFile *
+Module::setIncludeFile (char *includeFile)
+{
+ curr_inc = NULL;
+ if (includeFile)
+ curr_inc = findSource (includeFile, true);
+ return curr_inc;
+}
+
+char *
+Module::anno_str (char *fnm)
+{
+ char timebuf1[26], timebuf2[26];
+ const time_t real_time = (time_t) (unsigned int) real_timestamp;
+ const time_t curr_time = (time_t) (unsigned int) curr_timestamp;
+
+ switch (status)
+ {
+ case AE_OK:
+ case AE_NOTREAD:
+ return NULL;
+ case AE_NOSRC:
+ return dbe_sprintf (GTXT ("Source file `%s' not readable"),
+ fnm ? fnm : file_name);
+ case AE_NOOBJ:
+ if (lang_code == Sp_lang_java)
+ {
+ Emsg *emsg = get_error ();
+ if (emsg)
+ {
+ char *s = dbe_strdup (emsg->get_msg ());
+ remove_msg (emsg);
+ return s;
+ }
+ return dbe_sprintf (GTXT ("Object file `%s.class' not readable"),
+ name);
+ }
+ return dbe_sprintf (GTXT ("Object file `%s' not readable"), get_name ());
+ case AE_NOLOBJ:
+ if (lang_code == Sp_lang_java)
+ return dbe_sprintf (GTXT ("Object file `%s' not readable"),
+ dbeFile ? dbeFile->get_name () : name);
+ return dbe_sprintf (GTXT ("Object file `%s' not readable"), loadobject->get_pathname ());
+ case AE_NOSTABS:
+ return dbe_sprintf (GTXT ("Error reading line-number information in object `%s'; source annotation not available"),
+ stabsPath ? stabsPath : NTXT (""));
+ case AE_NOSYMTAB:
+ return dbe_sprintf (GTXT ("Error reading symbol table in object `%s'; disassembly annotation not available"),
+ disPath ? disPath : NTXT (""));
+ case AE_TIMESRC:
+ return dbe_sprintf (GTXT ("Warning! Source file `%s' is newer than the experiment data"),
+ main_source->dbeFile->getResolvedPath ());
+ case AE_TIMEDIS:
+ return dbe_sprintf (GTXT ("Warning! Object file `%s' is newer than the experiment data"),
+ disName ? disName : NTXT (""));
+ case AE_TIMESTABS:
+ return dbe_sprintf (GTXT ("Warning! Object file `%s' is newer than the experiment data"),
+ stabsName ? stabsName : NTXT (""));
+ case AE_TIMESTABS_DIFF:
+ snprintf (timebuf1, sizeof (timebuf1), NTXT ("%s"), ctime (&curr_time));
+ snprintf (timebuf2, sizeof (timebuf2), NTXT ("%s"), ctime (&real_time));
+ timebuf1[24] = timebuf2[24] = '\0';
+ return dbe_sprintf (GTXT ("Warning! Object file `%s' is not the same one that was linked into executable.\n"
+ "\tObject file: `%s'\n\tcompiled on: %s\n"
+ "\tExecutable contains object file compiled on: %s"),
+ getResolvedObjectPath (), getResolvedObjectPath (),
+ timebuf1, timebuf2);
+ case AE_OTHER:
+ default:
+ return dbe_strdup (GTXT ("Annotation computation error"));
+ }
+}//anno_str
+
+LoadObject *
+Module::createLoadObject (const char *lo_name)
+{
+ LoadObject *lo = new LoadObject (lo_name);
+ lo->dbeFile->filetype |= DbeFile::F_DOT_O;
+ return lo;
+}
+
+static bool
+tsIsNewer (time_t t1, time_t t2)
+{
+ return t1 != 0 && t2 != 0 && t1 < t2;
+}
+
+Module::Anno_Errors
+Module::checkTimeStamp (bool chkDis)
+{
+ /* Check the linked and the real object timestamps due to bug #4796329 */
+ if (real_timestamp && curr_timestamp && real_timestamp != curr_timestamp)
+ return AE_TIMESTABS_DIFF;
+
+ time_t srctime = main_source->getMTime ();
+ for (int index = 0; index < dbeSession->nexps (); index++)
+ {
+ time_t mtime = dbeSession->get_exp (index)->get_mtime ();
+ if (tsIsNewer (mtime, srctime))
+ return AE_TIMESRC;
+ if (tsIsNewer (mtime, stabsMTime))
+ return AE_TIMESTABS;
+ if (chkDis && tsIsNewer (mtime, disMTime))
+ return AE_TIMEDIS;
+ }
+ return AE_OK;
+}//checkTimeStamp
+
+static size_t
+get_ar_size (char *s, size_t len)
+{
+ size_t sz = 0;
+ for (size_t i = 0; i < len; i++)
+ {
+ if (s[i] < '0' || s[i] > '9')
+ break;
+ sz = sz * 10 + (s[i] - '0');
+ }
+ return sz;
+}
+
+static void
+dump_hdr_field (char *nm, char *s, size_t len)
+{
+ Dprintf (DEBUG_READ_AR, NTXT (" %s "), nm);
+ for (size_t i = 0; i < len; i++)
+ Dprintf (DEBUG_READ_AR, "%c", isprint (s[i]) ? s[i] : '?');
+ Dprintf (DEBUG_READ_AR, NTXT (" "));
+ for (size_t i = 0; i < len; i++)
+ Dprintf (DEBUG_READ_AR, NTXT (" %d"), s[i]);
+ Dprintf (DEBUG_READ_AR, NTXT (" \n"));
+}
+
+static void
+dump_ar_hdr (int lineNum, struct ar_hdr *hdr)
+{
+ if (DEBUG_READ_AR)
+ {
+ Dprintf (DEBUG_READ_AR, NTXT ("Module::read_ar %d\n"), lineNum);
+ dump_hdr_field (NTXT ("ar_name"), hdr->ar_name, sizeof (hdr->ar_name));
+ dump_hdr_field (NTXT ("ar_date"), hdr->ar_date, sizeof (hdr->ar_date));
+ dump_hdr_field (NTXT ("ar_uid"), hdr->ar_uid, sizeof (hdr->ar_uid));
+ dump_hdr_field (NTXT ("ar_gid"), hdr->ar_gid, sizeof (hdr->ar_gid));
+ dump_hdr_field (NTXT ("ar_mode"), hdr->ar_mode, sizeof (hdr->ar_mode));
+ dump_hdr_field (NTXT ("ar_size"), hdr->ar_size, sizeof (hdr->ar_size));
+ dump_hdr_field (NTXT ("ar_fmag"), hdr->ar_fmag, sizeof (hdr->ar_fmag));
+ }
+}
+
+bool
+Module::read_ar (int ar, int obj, char *obj_base)
+{
+ struct ar_hdr hdr; // Archive header
+ char magic[SARMAG]; // Magic string from archive
+ Dprintf (DEBUG_READ_AR, "Module::read_ar %d %p %s %s \n", __LINE__,
+ this, STR (obj_base), STR (get_name ()));
+ // Check the magic string
+ if ((read_from_file (ar, magic, SARMAG) != SARMAG)
+ || strncmp (magic, ARMAG, SARMAG))
+ return false;
+
+ // Read and skip the first file in the archive (index file to ld)
+ if (read_from_file (ar, &hdr, sizeof (hdr)) != sizeof (hdr))
+ return false;
+ DEBUG_CODE dump_ar_hdr (__LINE__, &hdr);
+ if (lseek (ar, get_ar_size (hdr.ar_size, sizeof (hdr.ar_size)), SEEK_CUR)
+ == -1)
+ return false;
+
+ // Read the string file where it keeps long file names (if exist)
+ if (read_from_file (ar, &hdr, sizeof (hdr)) != sizeof (hdr))
+ return false;
+ DEBUG_CODE dump_ar_hdr (__LINE__, &hdr);
+ char *longnames = NULL; // Area with names longer than ~13
+ size_t longnames_size = 0;
+ if (!strncmp (hdr.ar_name, NTXT ("//"), 2))
+ {
+ longnames_size = get_ar_size (hdr.ar_size, sizeof (hdr.ar_size));
+ longnames = (char *) malloc (longnames_size + 1);
+ int64_t cnt = read_from_file (ar, longnames, longnames_size);
+ if (cnt != (int64_t) longnames_size)
+ {
+ free (longnames);
+ return false;
+ }
+ longnames[longnames_size] = 0;
+ }
+ else
+ // back out, no long file names
+ lseek (ar, -(sizeof (hdr)), SEEK_CUR);
+
+ // Search the ar for the object file name
+ char ar_buf[sizeof (hdr.ar_name) + 1];
+ ar_buf[sizeof (hdr.ar_name)] = 0;
+ while (1)
+ {
+ if (read_from_file (ar, &hdr, sizeof (hdr)) != sizeof (hdr))
+ break;
+ DEBUG_CODE dump_ar_hdr (__LINE__, &hdr);
+ char *ar_name;
+ if (hdr.ar_name[0] != '/')
+ { // Name is in the header
+ for (size_t i = 0; i < sizeof (hdr.ar_name); i++)
+ {
+ if (hdr.ar_name[i] == '/')
+ {
+ ar_buf[i] = 0;
+ break;
+ }
+ ar_buf[i] = hdr.ar_name[i];
+ }
+ ar_name = ar_buf;
+ }
+ else if (hdr.ar_name[1] == ' ')
+ { // Name is blank
+ ar_buf[0] = 0;
+ ar_name = ar_buf;
+ }
+ else
+ { // Name is in the string table
+ if (longnames == NULL)
+ break;
+ size_t offset = get_ar_size (hdr.ar_name + 1,
+ sizeof (hdr.ar_name) - 1);
+ if (offset >= longnames_size)
+ break;
+ for (size_t i = offset; i < longnames_size; i++)
+ {
+ if (longnames[i] == '/')
+ {
+ longnames[i] = 0;
+ break;
+ }
+ }
+ ar_name = longnames + offset;
+ }
+ Dprintf (DEBUG_READ_AR, "Module::read_ar %d ar_name=%s\n", __LINE__,
+ ar_name);
+
+ if (streq (ar_name, obj_base))
+ { // create object file
+ free (longnames);
+ for (size_t objsize = get_ar_size (hdr.ar_size, sizeof (hdr.ar_size));
+ objsize > 0;)
+ {
+ char buf[MAXPATHLEN];
+ size_t n = objsize < sizeof (buf) ? objsize : sizeof (buf);
+ int64_t cnt = read_from_file (ar, buf, n);
+ if (cnt != (int64_t) n)
+ return false;
+ cnt = write (obj, buf, n);
+ if (cnt != (int64_t) n)
+ return false;
+ objsize -= n;
+ }
+ return true;
+ }
+ if (lseek (ar, get_ar_size (hdr.ar_size, sizeof (hdr.ar_size)),
+ SEEK_CUR) == -1)
+ break;
+ }
+ free (longnames);
+ return false;
+}
+
+static char *
+get_obj_name_from_lib (char *nm)
+{
+ char *base = strrchr (nm, '(');
+ if (base)
+ {
+ size_t last = strlen (base) - 1;
+ if (base[last] == ')')
+ return base;
+ }
+ return NULL;
+}
+
+bool
+Module::setFile ()
+{
+ if ((loadobject->flags & SEG_FLAG_DYNAMIC) != 0)
+ return true;
+ if ((loadobject->dbeFile->filetype & DbeFile::F_FICTION) != 0)
+ return false;
+ if ((flags & MOD_FLAG_UNKNOWN) != 0)
+ return true;
+
+ if (lang_code == Sp_lang_java)
+ {
+ if (dbeFile->get_need_refind ())
+ {
+ char *fnm = dbeFile->get_location ();
+ stabsPath = dbe_strdup (fnm);
+ stabsName = dbe_strdup (fnm);
+ disPath = dbe_strdup (fnm);
+ disName = dbe_strdup (fnm);
+ stabsMTime = dbeFile->sbuf.st_mtime;
+ }
+ return dbeFile->get_location () != NULL;
+ }
+
+ if (dbeFile == NULL)
+ {
+ char *objname = get_obj_name_from_lib (name);
+ if (objname)
+ {
+ // in the format of libpath(obj)
+ objname = dbe_strdup (objname + 1);
+ size_t last = strlen (objname) - 1;
+ objname[last] = '\0';
+ }
+ dbeFile = new DbeFile (objname ? objname : name);
+ free (objname);
+ dbeFile->filetype |= DbeFile::F_DOT_O;
+ }
+ if (dbeFile->get_need_refind ())
+ {
+ disMTime = (time_t) 0;
+ stabsMTime = (time_t) 0;
+ free (disName);
+ free (stabsName);
+ disName = NULL;
+ stabsName = NULL;
+
+ // Find the Executable/Shared-Object file of module
+ char *path = loadobject->dbeFile->get_location ();
+ if (path)
+ {
+ disPath = strdup (path);
+ disName = strdup (path);
+ disMTime = loadobject->dbeFile->sbuf.st_mtime;
+ }
+
+ char *objname = get_obj_name_from_lib (name);
+ if (objname)
+ {
+ // in the format of libpath(obj)
+ char *namebuf = dbe_strdup (name);
+ char *base = namebuf + (objname - name);
+ *base = '\0';
+ base++;
+ size_t last = strlen (base) - 1;
+ base[last] = '\0';
+ stabsTmp = dbeSession->get_tmp_file_name (base, false);
+ dbeSession->tmp_files->append (strdup (stabsTmp));
+
+ DbeFile *dbf = dbeSession->getDbeFile (namebuf,
+ DbeFile::F_DOT_A_LIB | DbeFile::F_FILE);
+ path = dbf->get_location ();
+ int ar = -1, obj = -1;
+ if (path != NULL)
+ {
+ ar = open64 (path, O_RDONLY | O_LARGEFILE);
+ if (ar != -1)
+ obj = open64 (stabsTmp, O_CREAT | O_WRONLY | O_LARGEFILE, 0600);
+ }
+ if (ar != -1 && obj != -1 && read_ar (ar, obj, base))
+ {
+ dbeFile->set_location (stabsTmp);
+ dbeFile->check_access (stabsTmp); // init 'sbuf'
+ dbeFile->sbuf.st_mtime = 0; // Don't check timestamps
+ dbeFile->container = dbf;
+ stabsPath = strdup (stabsTmp);
+ stabsName = strdup (path);
+ stabsMTime = dbeFile->sbuf.st_mtime;
+ }
+ else
+ {
+ removeStabsTmp ();
+ objname = NULL;
+ }
+ if (ar != -1)
+ close (ar);
+ if (obj != -1)
+ close (obj);
+ free (namebuf);
+ }
+ if (objname == NULL)
+ {
+ path = dbeFile->get_location ();
+ if (path != NULL)
+ {
+ stabsPath = strdup (path);
+ stabsName = strdup (path);
+ stabsMTime = hasDwarf ? 0 : dbeFile->sbuf.st_mtime;
+ }
+ }
+
+ // First, try to access the symbol table of the module itself
+ // If failed, access the symbol table of the executable
+ if (stabsPath == NULL)
+ {
+ if (disPath == NULL)
+ return false;
+ stabsPath = strdup (disPath);
+ stabsName = strdup (disName);
+ stabsMTime = disMTime;
+ }
+ else if (disPath == NULL)
+ {
+ disPath = strdup (stabsPath);
+ disName = strdup (stabsName);
+ disMTime = stabsMTime;
+ }
+ }
+ return stabsPath != NULL;
+}
+
+// openStabs -- open mappings from PCs to source lines
+bool
+Module::openStabs (bool all)
+{
+ if ((loadobject->flags & SEG_FLAG_DYNAMIC) != 0
+ || (flags & MOD_FLAG_UNKNOWN) != 0)
+ return true;
+ if (loadobject->platform == Java)
+ {
+ setIncludeFile (NULL);
+ readFile ();
+ return ( status == AE_OK);
+ }
+ if (readStabs)
+ return true;
+
+ // Read Stabs info.
+ int64_t Inode = main_source->getInode ();
+ char *fname = strrchr (file_name, (int) '/');
+ char *mname = strrchr (main_source->get_name (), (int) '/');
+ if (fname && mname && !streq (fname, mname))
+ {
+ SourceFile *sf = findSource (file_name, false);
+ if (sf != NULL)
+ Inode = sf->getInode ();
+ }
+
+ comComs = new Vector<ComC*>;
+ Stabs *stabs = openDebugInfo ();
+ if (stabs == NULL)
+ return false;
+ int st = stabs->read_stabs (Inode, this, comComs, true);
+ if (!hasDwarf && hasStabs && !streq (stabsPath, disPath))
+ {
+ // Read stabs from .o file
+ if (dot_o_file == NULL)
+ {
+ if (dbeFile->get_location ())
+ {
+ dot_o_file = createLoadObject (dbeFile->get_name ());
+ dot_o_file->dbeFile->set_location (dbeFile->get_location ());
+ dot_o_file->dbeFile->sbuf = dbeFile->sbuf;
+ dot_o_file->dbeFile->container = dbeFile->container;
+ }
+ }
+ if (dot_o_file
+ && dot_o_file->sync_read_stabs () == LoadObject::ARCHIVE_SUCCESS)
+ {
+ Stabs *stabs_o = dot_o_file->objStabs;
+ if (stabs_o)
+ {
+ st = stabs_o->read_stabs (Inode, this,
+ comComs->size () > 0 ? NULL : comComs);
+ Elf *elf_o = stabs_o->openElf (false);
+ if (elf_o->dwarf)
+ stabs->read_dwarf_from_dot_o (this);
+ }
+ }
+ }
+ if (all)
+ read_hwcprof_info ();
+
+ readStabs = true;
+ return st == Stabs::DBGD_ERR_NONE;
+}
+
+char *
+Module::get_disasm (uint64_t inst_address, uint64_t end_address,
+ uint64_t start_address, uint64_t address, int64_t &inst_size)
+{
+ return disasm->get_disasm (inst_address, end_address, start_address,
+ address, inst_size);
+}
+
+void
+Module::read_stabs (bool all)
+{
+ if (openSourceFlag == AE_NOTREAD)
+ {
+ openSourceFlag = AE_OK;
+ if (lang_code == Sp_lang_java)
+ {
+ char *clpath = file_name;
+ if (clpath == NULL || strcmp (clpath, "<Unknown>") == 0)
+ clpath = ClassFile::get_java_file_name (name, false);
+ main_source = findSource (clpath, true);
+ main_source->dbeFile->filetype |= DbeFile::F_JAVA_SOURCE;
+ if (clpath != file_name)
+ free (clpath);
+ }
+ else
+ main_source = findSource (file_name, true);
+ if (setFile ())
+ openStabs (all);
+ }
+}
+
+bool
+Module::openDisPC ()
+{
+ if (disasm == NULL)
+ {
+ if (!(loadobject->flags & SEG_FLAG_DYNAMIC) && loadobject->platform != Java)
+ {
+ // Read Stabs & Symbol tables
+ if (openDebugInfo () == NULL)
+ return false;
+ if (!objStabs->read_symbols (functions))
+ return false;
+ }
+ disasm = new Disasm (loadobject->platform, objStabs);
+ }
+ return true;
+}
+
+static SourceFile *cmpSrcContext; // Use only for func_cmp
+
+static int
+func_cmp (const void *a, const void *b)
+{
+ Function *fp1 = *((Function **) a);
+ Function *fp2 = *((Function **) b);
+ return fp1->func_cmp (fp2, cmpSrcContext);
+}
+
+bool
+Module::computeMetrics (DbeView *dbev, Function *func, MetricList *metrics,
+ Histable::Type type, bool src_metric,
+ bool func_scope, SourceFile *source)
+{
+ name_idx = metrics->get_listorder (NTXT ("name"), Metric::STATIC);
+ if (name_idx < 0)
+ {
+ metrics->print_metric_list (stderr,
+ GTXT ("Fatal: no name metric in Module::computeMetrics mlist:\n"),
+ 1);
+ abort ();
+ }
+
+ // Now find the metrics for size and address, if present
+ size_index = metrics->get_listorder (NTXT ("size"), Metric::STATIC);
+ addr_index = metrics->get_listorder (NTXT ("address"), Metric::STATIC);
+
+ // free the old cached data for both src and disassembly
+ // If it's disassembly with visible source metrics, we use both
+ if (dis_items)
+ {
+ delete dis_items;
+ dis_items = NULL;
+ }
+ if (src_items)
+ {
+ delete src_items;
+ src_items = NULL;
+ }
+
+ // ask the DbeView to generate new data to be cached
+ if (src_metric || type == Histable::LINE)
+ {
+ Histable *obj = (func_scope) ? (Histable*) func : (Histable*)this;
+ if (lang_code == Sp_lang_java)
+ obj = func_scope ? (Histable *) func :
+ (source && source->get_type () == Histable::SOURCEFILE ?
+ (Histable *) source : (Histable *) this);
+ src_items = dbev->get_hist_data (metrics, Histable::LINE, 0,
+ Hist_data::MODL, obj, source);
+ }
+ if (type == Histable::INSTR)
+ dis_items = dbev->get_hist_data (metrics, Histable::INSTR, 0,
+ Hist_data::MODL,
+ func_scope ? (Histable*) func : (Histable*) this,
+ source);
+
+ Hist_data *cur_hist_data;
+ if (type == Histable::INSTR)
+ cur_hist_data = dis_items;
+ else
+ cur_hist_data = src_items;
+
+ Vector<Metric*> *items = cur_hist_data->get_metric_list ()->get_items ();
+ long sz = items->size ();
+ empty = new TValue[sz];
+ memset (empty, 0, sizeof (TValue) * sz);
+ for (long i = 0; i < sz; i++)
+ empty[i].tag = items->get (i)->get_vtype ();
+ return true;
+}
+
+// Method to get annotated source or disassembly for the module
+// or a function within it
+Hist_data *
+Module::get_data (DbeView *dbev, MetricList *mlist, Histable::Type type,
+ TValue *ftotal, SourceFile *srcFile, Function *func,
+ Vector<int> *marks, int threshold, int vis_bits,
+ int src_visible, bool hex_vis, bool func_scope,
+ bool /*src_only*/, Vector<int_pair_t> *marks2d,
+ Vector<int_pair_t> *marks2d_inc)
+{
+ cur_dbev = dbev;
+ srcContext = srcFile ? srcFile : main_source;
+ read_stabs ();
+ status = AE_OK;
+ dbev->warning_msg = NULL;
+ dbev->error_msg = NULL;
+ if (type == Histable::LINE)
+ {
+ if (!srcContext->readSource ())
+ {
+ status = AE_NOSRC;
+ dbev->error_msg = anno_str (srcContext->get_name ());
+ return NULL;
+ }
+ if (!computeMetrics (dbev, func, mlist, type, false, func_scope, srcContext))
+ {
+ status = AE_OTHER;
+ dbev->error_msg = anno_str ();
+ return NULL;
+ }
+ status = checkTimeStamp (false);
+ }
+ else
+ { // Histable::INSTR
+ Anno_Errors src_status = AE_OK;
+ if (!srcContext->readSource ())
+ {
+ src_status = AE_NOSRC;
+ dbev->error_msg = anno_str (srcContext->get_name ());
+ }
+ if (!setFile ())
+ status = AE_NOLOBJ;
+ else
+ {
+ if (!openStabs ())
+ src_status = AE_NOSTABS;
+ if (!openDisPC ())
+ status = AE_NOSYMTAB;
+ }
+ if (status != AE_OK)
+ {
+ dbev->error_msg = anno_str ();
+ return NULL;
+ }
+ if (src_status != AE_OK && func != NULL)
+ {
+ if (loadobject->platform == Java && (func->flags & FUNC_FLAG_NATIVE) != 0)
+ {
+ append_msg (CMSG_ERROR,
+ GTXT ("`%s' is a native method; byte code not available\n"),
+ func->get_name ());
+ status = AE_NOOBJ;
+ dbev->error_msg = anno_str ();
+ return NULL;
+ }
+ func_scope = true;
+ }
+ // get the disassembly-line metric data
+ if (!computeMetrics (dbev, func, mlist, type,
+ (src_visible & SRC_METRIC) != 0,
+ func_scope, srcContext))
+ {
+ status = AE_OTHER;
+ dbev->error_msg = anno_str ();
+ return NULL;
+ }
+ status = checkTimeStamp (true);
+ }
+ total = ftotal;
+
+ // initialize line number
+ init_line ();
+
+ // initialize data -- get duplicate metric list for the line texts
+ // pick up the metric list from the computed data
+ MetricList *nmlist = NULL;
+ if (type == Histable::INSTR)
+ {
+ mlist = dis_items->get_metric_list ();
+ nmlist = new MetricList (mlist);
+ data_items = new Hist_data (nmlist, Histable::INSTR, Hist_data::MODL);
+ data_items->set_status (dis_items->get_status ());
+ set_dis_data (func, vis_bits, dbev->get_cmpline_visible (),
+ src_visible, hex_vis, func_scope,
+ dbev->get_funcline_visible ());
+ }
+ else
+ {
+ mlist = src_items->get_metric_list ();
+ nmlist = new MetricList (mlist);
+ data_items = new Hist_data (nmlist, Histable::LINE, Hist_data::MODL);
+ data_items->set_status (src_items->get_status ());
+ set_src_data (func_scope ? func : NULL, vis_bits,
+ dbev->get_cmpline_visible (),
+ dbev->get_funcline_visible ());
+ }
+ data_items->compute_minmax ();
+
+ Metric *mitem;
+ int index;
+ Hist_data::HistItem *max_item;
+ TValue *value;
+ Hist_data::HistItem *max_item_inc;
+ TValue *value_inc;
+ double dthreshold = threshold / 100.0;
+
+ int sz = data_items->get_metric_list ()->get_items ()->size ();
+ maximum = new TValue[sz];
+ maximum_inc = new TValue[sz];
+ memset (maximum, 0, sizeof (TValue) * sz);
+ memset (maximum_inc, 0, sizeof (TValue) * sz);
+ max_item = data_items->get_maximums ();
+ max_item_inc = data_items->get_maximums_inc ();
+
+ Vec_loop (Metric*, data_items->get_metric_list ()->get_items (), index, mitem)
+ {
+ maximum_inc[index].tag = maximum[index].tag = mitem->get_vtype ();
+
+ if (mitem->get_subtype () == Metric::STATIC)
+ continue;
+ if (!mitem->is_visible () && !mitem->is_tvisible ()
+ && !mitem->is_pvisible ())
+ continue;
+
+ value = &max_item->value[index];
+ value_inc = &max_item_inc->value[index];
+
+ double dthresh;
+ if (mitem->is_zeroThreshold () == true)
+ dthresh = 0;
+ else
+ dthresh = dthreshold;
+ switch (value->tag)
+ {
+ case VT_INT:
+ maximum[index].i = (int) (dthresh * (double) value->i);
+ maximum_inc[index].i = (int) (dthresh * (double) value_inc->i);
+ break;
+ case VT_DOUBLE:
+ maximum[index].d = dthresh * value->d;
+ maximum_inc[index].d = dthresh * value_inc->d;
+ break;
+ case VT_LLONG:
+ maximum[index].ll = (unsigned long long) (dthresh * (double) value->ll);
+ maximum_inc[index].ll = (unsigned long long)
+ (dthresh * (double) value_inc->ll);
+ break;
+ case VT_ULLONG:
+ maximum[index].ull = (unsigned long long)
+ (dthresh * (double) value->ull);
+ maximum_inc[index].ull = (unsigned long long)
+ (dthresh * (double) value_inc->ull);
+ break;
+ default:
+ // not needed for non-numerical metrics
+ break;
+ }
+ }
+
+ // mark all high values
+ for (int index1 = 0; index1 < data_items->size (); index1++)
+ {
+ Hist_data::HistItem *hi = data_items->fetch (index1);
+ int index2;
+ Vec_loop (Metric*, nmlist->get_items (), index2, mitem)
+ {
+ bool mark = false;
+ if (mitem->get_subtype () == Metric::STATIC)
+ continue;
+ if (!mitem->is_visible () && !mitem->is_tvisible ()
+ && !mitem->is_pvisible ())
+ continue;
+
+ switch (hi->value[index2].tag)
+ {
+ case VT_DOUBLE:
+ if (nmlist->get_type () == MET_SRCDIS
+ && data_items->get_callsite_mark ()->get (hi->obj))
+ {
+ if (hi->value[index2].d > maximum_inc[index2].d)
+ mark = true;
+ break;
+ }
+ if (hi->value[index2].d > maximum[index2].d)
+ mark = true;
+ break;
+ case VT_INT:
+ if (nmlist->get_type () == MET_SRCDIS
+ && data_items->get_callsite_mark ()->get (hi->obj))
+ {
+ if (hi->value[index2].i > maximum_inc[index2].i)
+ mark = true;
+ break;
+ }
+ if (hi->value[index2].i > maximum[index2].i)
+ mark = true;
+ break;
+ case VT_LLONG:
+ if (nmlist->get_type () == MET_SRCDIS
+ && data_items->get_callsite_mark ()->get (hi->obj))
+ {
+ if (hi->value[index2].ll > maximum_inc[index2].ll)
+ mark = true;
+ break;
+ }
+ if (hi->value[index2].ll > maximum[index2].ll)
+ mark = true;
+ break;
+ case VT_ULLONG:
+ if (nmlist->get_type () == MET_SRCDIS
+ && data_items->get_callsite_mark ()->get (hi->obj))
+ {
+ if (hi->value[index2].ull > maximum_inc[index2].ull)
+ mark = true;
+ break;
+ }
+ if (hi->value[index2].ull > maximum[index2].ull)
+ mark = true;
+ break;
+ // ignoring the following cases (why?)
+ case VT_SHORT:
+ case VT_FLOAT:
+ case VT_HRTIME:
+ case VT_LABEL:
+ case VT_ADDRESS:
+ case VT_OFFSET:
+ break;
+ }
+ if (mark)
+ {
+ marks->append (index1);
+ break;
+ }
+ }
+ }
+
+ // mark all high values to marks2d
+ if (marks2d != NULL && marks2d_inc != NULL)
+ {
+ for (int index1 = 0; index1 < data_items->size (); index1++)
+ {
+ Hist_data::HistItem *hi = data_items->fetch (index1);
+ int index2;
+ Vec_loop (Metric*, nmlist->get_items (), index2, mitem)
+ {
+ Metric::SubType subType = mitem->get_subtype ();
+ if (subType == Metric::STATIC)
+ continue;
+ if (!mitem->is_visible () && !mitem->is_tvisible ()
+ && !mitem->is_pvisible ())
+ continue;
+ switch (hi->value[index2].tag)
+ {
+ case VT_DOUBLE:
+ if (nmlist->get_type () == MET_SRCDIS
+ && data_items->get_callsite_mark ()->get (hi->obj))
+ {
+ if (hi->value[index2].d > maximum_inc[index2].d)
+ {
+ int_pair_t pair = {index1, index2};
+ marks2d_inc->append (pair);
+ }
+ break;
+ }
+ if (hi->value[index2].d > maximum[index2].d)
+ {
+ int_pair_t pair = {index1, index2};
+ marks2d->append (pair);
+ }
+ break;
+ case VT_INT:
+ if (nmlist->get_type () == MET_SRCDIS
+ && data_items->get_callsite_mark ()->get (hi->obj))
+ {
+ if (hi->value[index2].i > maximum_inc[index2].i)
+ {
+ int_pair_t pair = {index1, index2};
+ marks2d_inc->append (pair);
+ }
+ break;
+ }
+ if (hi->value[index2].i > maximum[index2].i)
+ {
+ int_pair_t pair = {index1, index2};
+ marks2d->append (pair);
+ }
+ break;
+ case VT_LLONG:
+ if (nmlist->get_type () == MET_SRCDIS
+ && data_items->get_callsite_mark ()->get (hi->obj))
+ {
+ if (hi->value[index2].ll > maximum_inc[index2].ll)
+ {
+ int_pair_t pair = {index1, index2};
+ marks2d_inc->append (pair);
+ }
+ break;
+ }
+ if (hi->value[index2].ll > maximum[index2].ll)
+ {
+ int_pair_t pair = {index1, index2};
+ marks2d->append (pair);
+ }
+ break;
+ case VT_ULLONG:
+ if (nmlist->get_type () == MET_SRCDIS
+ && data_items->get_callsite_mark ()->get (hi->obj))
+ {
+ if (hi->value[index2].ull > maximum_inc[index2].ull)
+ {
+ int_pair_t pair = {index1, index2};
+ marks2d_inc->append (pair);
+ }
+ break;
+ }
+ if (hi->value[index2].ull > maximum[index2].ull)
+ {
+ int_pair_t pair = {index1, index2};
+ marks2d->append (pair);
+ }
+ break;
+ case VT_SHORT:
+ case VT_FLOAT:
+ case VT_HRTIME:
+ case VT_LABEL:
+ case VT_ADDRESS:
+ case VT_OFFSET:
+ break;
+ }
+ }
+ }
+ }
+
+ // free memory used by Computing & Printing metrics
+ delete[] maximum;
+ delete[] maximum_inc;
+ delete[] empty;
+ maximum = NULL;
+ maximum_inc = NULL;
+ empty = NULL;
+ dbev->warning_msg = anno_str ();
+ return data_items;
+}
+
+Vector<uint64_t> *
+Module::getAddrs (Function *func)
+{
+ uint64_t start_address = func->img_offset;
+ uint64_t end_address = start_address + func->size;
+ int64_t inst_size = 0;
+
+ // initialize "disasm" if necessary
+ if (!openDisPC ())
+ return NULL;
+
+ Vector<uint64_t> *addrs = new Vector<uint64_t>;
+ for (uint64_t inst_address = start_address; inst_address < end_address;)
+ {
+ char *s = disasm->get_disasm (inst_address, end_address, start_address,
+ func->img_offset, inst_size);
+ free (s);
+ addrs->append (inst_address - start_address);
+ inst_address += inst_size;
+ if (inst_size == 0)
+ break;
+ }
+ return addrs;
+}
+
+void
+Module::init_line ()
+{
+ // initialize the compiler commentary data
+ cindex = 0;
+ if (comComs != NULL && comComs->size () > 0)
+ cline = comComs->fetch (cindex)->line;
+ else
+ cline = -1;
+
+ sindex = 0;
+ if (src_items && src_items->size () > 0)
+ sline = ((DbeLine*) src_items->fetch (0)->obj)->lineno;
+ else
+ sline = -1;
+
+ dindex = 0;
+ mindex = 0;
+ mline = -1;
+ if (dis_items && dis_items->size () > 0)
+ {
+ daddr = (DbeInstr*) dis_items->fetch (0)->obj;
+
+ // After sorting all HistItems with PCLineFlag appear
+ // at the end of the list. Find the first one.
+ for (mindex = dis_items->size () - 1; mindex >= 0; mindex--)
+ {
+ Hist_data::HistItem *item = dis_items->fetch (mindex);
+ if (!(((DbeInstr*) item->obj)->flags & PCLineFlag))
+ break;
+ mline = (unsigned) (((DbeInstr*) item->obj)->addr);
+ }
+ mindex++;
+ }
+ else
+ daddr = NULL;
+}
+
+void
+Module::set_src_data (Function *func, int vis_bits, int cmpline_visible,
+ int funcline_visible)
+{
+ Function *curr_func = NULL;
+
+ // start at the top of the file, and loop over all lines in the file (source context)
+ for (curline = 1; curline <= srcContext->getLineCount (); curline++)
+ {
+ // Before writing the line, see if there's compiler commentary to insert
+ if (cline == curline)
+ set_ComCom (vis_bits);
+
+ // Find out if we need to print zero metrics with the line
+ DbeLine *dbeline = srcContext->find_dbeline (NULL, curline);
+ Anno_Types type = AT_SRC_ONLY;
+ if (dbeline->dbeline_func_next)
+ {
+ if (func)
+ for (DbeLine *dl = dbeline->dbeline_func_next; dl; dl = dl->dbeline_func_next)
+ {
+ if (dl->func == func)
+ {
+ type = AT_SRC;
+ break;
+ }
+ }
+ else
+ type = AT_SRC;
+ }
+
+ if (funcline_visible)
+ { // show red lines
+ // is there a function index line to insert?
+ Function *func_next = NULL;
+ for (DbeLine *dl = dbeline; dl; dl = dl->dbeline_func_next)
+ {
+ Function *f = dl->func;
+ if (f && f->line_first == curline
+ && f->getDefSrc () == srcContext)
+ {
+ if (lang_code == Sp_lang_java
+ && (f->flags & FUNC_FLAG_DYNAMIC))
+ continue;
+ if (cur_dbev && cur_dbev->get_path_tree ()->get_func_nodeidx (f))
+ {
+ func_next = f;
+ break;
+ }
+ else if (func_next == NULL)
+ func_next = f;
+ }
+ }
+ if (func_next && curr_func != func_next)
+ {
+ curr_func = func_next;
+ char *func_name = curr_func->get_name ();
+ if (is_fortran () && streq (func_name, NTXT ("MAIN_")))
+ func_name = curr_func->get_match_name ();
+ Hist_data::HistItem *item =
+ src_items->new_hist_item (curr_func, AT_FUNC, empty);
+ item->value[name_idx].l = dbe_sprintf (GTXT ("<Function: %s>"),
+ func_name);
+ data_items->append_hist_item (item);
+ }
+ } // end of red line
+ set_src (type, dbeline); // add the source line
+ } // end of loop over source lines
+
+ // See if compiler flags are set; if so, append them
+ if (cmpline_visible && comp_flags)
+ {
+ Hist_data::HistItem *item = src_items->new_hist_item (NULL, AT_EMPTY,
+ empty);
+ item->value[name_idx].l = strdup (NTXT (""));
+ data_items->append_hist_item (item);
+ item = src_items->new_hist_item (NULL, AT_COM, empty);
+ item->value[name_idx].l = dbe_sprintf (GTXT ("Compile flags: %s"),
+ comp_flags);
+ data_items->append_hist_item (item);
+ }
+}
+
+void
+Module::set_dis_data (Function *func, int vis_bits, int cmpline_visible,
+ int src_visible, bool hex_vis, bool func_scope,
+ int funcline_visible)
+{
+ bool nextFile = false;
+
+ // initialize the source output, if any
+ curline = (srcContext->getLineCount () > 0) ? 1 : -1;
+ if (func)
+ nextFile = srcContext != func->getDefSrc ();
+ curr_inc = srcContext;
+
+ bool src_code = (src_visible & SRC_CODE);
+ Anno_Types src_type = (src_visible & SRC_METRIC) ? AT_SRC : AT_SRC_ONLY;
+
+ char *img_fname = func ? func->img_fname : NULL;
+
+ // Build a new Function list
+ Vector<Function*> *FuncLst = new Vector<Function*>;
+ if (func_scope)
+ {
+ if (func)
+ FuncLst->append (func);
+ }
+ else
+ {
+ for (int i = 0, sz = functions ? functions->size () : 0; i < sz; i++)
+ {
+ Function *fitem = functions->fetch (i);
+ if (fitem != fitem->cardinal ())
+ continue;
+ if (img_fname == NULL)
+ img_fname = fitem->img_fname;
+ if (fitem->img_fname == NULL || strcmp (fitem->img_fname, img_fname))
+ continue;
+ FuncLst->append (fitem);
+ }
+ }
+ if (FuncLst->size () == 0)
+ { // no function is good
+ delete FuncLst;
+ return;
+ }
+ cmpSrcContext = srcContext;
+ FuncLst->sort (func_cmp);
+
+ disasm->set_hex_visible (hex_vis);
+ for (int index = 0, sz = FuncLst->size (); index < sz; index++)
+ {
+ Function *fitem = FuncLst->fetch (index);
+ uint64_t start_address, end_address;
+ int64_t inst_size;
+ if (fitem->getDefSrc () != srcContext && curline > 0)
+ {
+ // now flush the left source line, if available
+ for (; curline <= srcContext->getLineCount (); curline++)
+ {
+ // see if there's a compiler comment line to dump
+ if (cline == curline)
+ set_ComCom (vis_bits);
+ if (src_code)
+ set_src (src_type, srcContext->find_dbeline (curline));
+ }
+ curline = -1;
+ }
+
+ curr_inc = NULL;
+ // disassemble one function
+ start_address = objStabs ?
+ objStabs->mapOffsetToAddress (fitem->img_offset) : 0;
+ end_address = start_address + fitem->size;
+ inst_size = 0;
+
+ disasm->set_addr_end (end_address);
+ if ((loadobject->flags & SEG_FLAG_DYNAMIC)
+ && loadobject->platform != Java)
+ disasm->set_img_name (img_fname);
+
+ for (uint64_t inst_address = start_address; inst_address < end_address;)
+ {
+ uint64_t address = inst_address - start_address;
+ DbeInstr *instr = fitem->find_dbeinstr (0, address);
+ DbeLine *dbeline = (DbeLine *) (instr->convertto (Histable::LINE));
+ if (instr->lineno == -1 && dbeline && dbeline->lineno > 0)
+ instr->lineno = dbeline->lineno;
+
+ // now write the unannotated source line, if available
+ if (curline > 0)
+ { // source is present
+ int lineno = curline - 1;
+ if (instr->lineno != -1)
+ {
+ if (dbeline && streq (dbeline->sourceFile->get_name (),
+ srcContext->get_name ()))
+ lineno = instr->lineno;
+ }
+ else if (curr_inc == NULL && srcContext == fitem->def_source
+ && fitem->line_first > 0)
+ lineno = fitem->line_first;
+
+ for (; curline <= lineno; curline++)
+ {
+ // see if there's a compiler comment line to dump
+ if (cline == curline)
+ set_ComCom (vis_bits);
+ if (mline == curline)
+ set_MPSlave ();
+ if (src_code)
+ set_src (src_type, srcContext->find_dbeline (curline));
+ if (curline >= srcContext->getLineCount ())
+ {
+ curline = -1;
+ break;
+ }
+ }
+ }
+
+ if (funcline_visible)
+ { // show red lines
+ if (!curr_inc || (dbeline && curr_inc != dbeline->sourceFile))
+ {
+ Hist_data::HistItem *item = dis_items->new_hist_item (dbeline, AT_FUNC, empty);
+ curr_inc = dbeline ? dbeline->sourceFile : srcContext;
+ char *str;
+ if (curr_inc != srcContext)
+ {
+ char *fileName = curr_inc->dbeFile->getResolvedPath ();
+ str = dbe_sprintf (GTXT ("<Function: %s, instructions from source file %s>"),
+ fitem->get_name (), fileName);
+ }
+ else
+ str = dbe_sprintf (GTXT ("<Function: %s>"),
+ fitem->get_name ());
+ item->value[name_idx].l = str;
+ data_items->append_hist_item (item);
+ }
+ }
+
+ char *dis_str = get_disasm (inst_address, end_address, start_address,
+ fitem->img_offset, inst_size);
+ if (inst_size == 0)
+ break;
+ else if (instr->size == 0)
+ instr->size = (unsigned int) inst_size;
+ inst_address += inst_size;
+
+ // stomp out control characters
+ for (size_t i = 0, len = strlen (dis_str); i < len; i++)
+ {
+ if (dis_str[i] == '\t')
+ dis_str[i] = ' ';
+ }
+
+ for (int i = 0; i < bTargets.size (); i++)
+ {
+ target_info_t *bTarget = bTargets.fetch (i);
+ if (bTarget->offset == fitem->img_offset + address)
+ {
+ // insert a new line for the bTarget
+ size_t colon = strcspn (dis_str, NTXT (":"));
+ char *msg = GTXT ("* <branch target>");
+ size_t len = colon + strlen (msg);
+ len = (len < 50) ? (50 - len) : 1;
+ char *new_dis_str = dbe_sprintf ("%.*s%s%*c <===----<<<",
+ (int) colon, dis_str, msg,
+ (int) len, ' ');
+ DbeInstr *bt = fitem->find_dbeinstr (PCTrgtFlag, address);
+ bt->lineno = instr->lineno;
+ bt->size = 0;
+ set_dis (bt, AT_DIS, nextFile, new_dis_str);
+ break;
+ }
+ }
+
+ // AnalyzerInfo/Datatype annotations
+ if (infoList != NULL)
+ {
+ inst_info_t *info = NULL;
+ int pinfo;
+ Vec_loop (inst_info_t*, infoList, pinfo, info)
+ {
+ if (info->offset == fitem->img_offset + address) break;
+ }
+ if (info != NULL)
+ { // got a matching memop
+ char typetag[400];
+ typetag[0] = '\0';
+ long t;
+ datatype_t *dtype = NULL;
+ Vec_loop (datatype_t*, datatypes, t, dtype)
+ {
+ if (dtype->datatype_id == info->memop->datatype_id)
+ break;
+ }
+ if (datatypes != NULL)
+ {
+ size_t len = strlen (typetag);
+ if (dtype == NULL || t == datatypes->size ())
+ snprintf (typetag + len, sizeof (typetag) - len, "%s",
+ PTXT (DOBJ_UNSPECIFIED));
+ else if (dtype->dobj == NULL)
+ snprintf (typetag + len, sizeof (typetag) - len, "%s",
+ PTXT (DOBJ_UNDETERMINED));
+ else
+ snprintf (typetag + len, sizeof (typetag) - len, "%s",
+ dtype->dobj->get_name ());
+ }
+ if (strlen (typetag) > 1)
+ {
+ char *new_dis_str;
+ new_dis_str = dbe_sprintf ("%-50s %s", dis_str, typetag);
+ free (dis_str);
+ dis_str = new_dis_str;
+ }
+ }
+ }
+ set_dis (instr, AT_DIS, nextFile, dis_str);
+ }
+ }
+
+ // now flush the left source line, if available
+ if (curline > 0)
+ { // source is present
+ for (; curline <= srcContext->getLineCount (); curline++)
+ {
+ // see if there's a compiler comment line to dump
+ if (cline == curline)
+ set_ComCom (vis_bits);
+
+ if (src_code)
+ set_src (src_type, srcContext->find_dbeline (curline));
+ }
+ }
+
+ // See if compiler flags are set; if so, append them
+ if (cmpline_visible && comp_flags)
+ {
+ Hist_data::HistItem *item = dis_items->new_hist_item (NULL, AT_EMPTY,
+ empty);
+ item->value[name_idx].l = dbe_strdup (NTXT (""));
+ data_items->append_hist_item (item);
+ item = dis_items->new_hist_item (NULL, AT_COM, empty);
+ item->value[name_idx].l = dbe_sprintf (GTXT ("Compile flags: %s"),
+ comp_flags);
+ data_items->append_hist_item (item);
+ }
+ delete FuncLst;
+}
+
+// set_src -- inserts one or more lines into the growing data list
+void
+Module::set_src (Anno_Types type, DbeLine *dbeline)
+{
+ Hist_data::HistItem *item;
+
+ // Flush items that are not represented in source
+ while (sline >= 0 && sline < curline)
+ {
+ item = src_items->fetch (sindex);
+ if (((DbeLine*) item->obj)->lineno > 0)
+ set_one (item, AT_QUOTE, item->obj->get_name ());
+
+ if (++sindex < src_items->size ()) // get next line with metrics
+ sline = ((DbeLine*) src_items->fetch (sindex)->obj)->lineno;
+ else
+ sline = -1;
+ }
+
+ // write values in the metric fields for the given source line
+ if (curline == sline)
+ { // got metrics for this line
+ item = src_items->fetch (sindex);
+ if (((DbeLine*) item->obj)->lineno > 0)
+ set_one (item, AT_SRC, srcContext->getLine (curline));
+
+ if (++sindex < src_items->size ()) // get next line metric index
+ sline = ((DbeLine*) src_items->fetch (sindex)->obj)->lineno;
+ else
+ sline = -1;
+ }
+ else
+ {
+ item = data_items->new_hist_item (dbeline, type, empty);
+ if (size_index != -1)
+ item->value[size_index].ll = dbeline->get_size ();
+ if (addr_index != -1)
+ item->value[addr_index].ll = dbeline->get_addr ();
+ item->value[name_idx].l = dbe_strdup (srcContext->getLine (curline));
+ data_items->append_hist_item (item);
+ }
+}
+
+void
+Module::set_dis (DbeInstr *instr, Anno_Types type, bool nextFile, char *dis_str)
+{
+ // Flush items that are not represented in disassembly
+ while (daddr && daddr->pc_cmp (instr) < 0)
+ {
+ if (!nextFile)
+ set_one (dis_items->fetch (dindex), AT_QUOTE, daddr->get_name ());
+ if (++dindex < dis_items->size ()) // get next line metric index
+ daddr = (DbeInstr*) dis_items->fetch (dindex)->obj;
+ else
+ daddr = NULL;
+ }
+
+ // Write values in the metric fields for the given pc index value
+ if (instr->inlinedInd >= 0)
+ {
+ StringBuilder sb;
+ sb.append (dis_str);
+ instr->add_inlined_info (&sb);
+ free (dis_str);
+ dis_str = sb.toString ();
+ }
+ if (daddr && daddr->pc_cmp (instr) == 0)
+ {
+ Hist_data::HistItem *item = data_items->new_hist_item (instr, type,
+ dis_items->fetch (dindex)->value);
+ item->value[name_idx].tag = VT_LABEL;
+ item->value[name_idx].l = dis_str;
+ data_items->append_hist_item (item);
+ if (dis_items->get_callsite_mark ()->get (dis_items->fetch (dindex)->obj))
+ data_items->get_callsite_mark ()->put (item->obj, 1);
+
+ if (++dindex < dis_items->size ()) // get next line metric index
+ daddr = (DbeInstr*) dis_items->fetch (dindex)->obj;
+ else
+ daddr = NULL;
+ }
+ else
+ {
+ // create a new item for this PC
+ Hist_data::HistItem *item = dis_items->new_hist_item (instr, type, empty);
+ if (size_index != -1)
+ item->value[size_index].ll = instr->size;
+ if (addr_index != -1)
+ item->value[addr_index].ll = instr->get_addr ();
+ item->value[name_idx].tag = VT_LABEL;
+ item->value[name_idx].l = dis_str;
+ data_items->append_hist_item (item);
+ }
+}
+
+void
+Module::set_MPSlave ()
+{
+ Hist_data::HistItem *item;
+ Function *fp;
+ int index;
+
+ // write the inclusive metrics for slave threads
+ while (mline == curline)
+ {
+ item = dis_items->fetch (mindex);
+ DbeInstr *instr = (DbeInstr *) item->obj;
+ Vec_loop (Function*, functions, index, fp)
+ {
+ if (fp->derivedNode == instr)
+ {
+ set_one (item, AT_QUOTE, (fp->isOutlineFunction) ?
+ GTXT ("<inclusive metrics for outlined functions>") :
+ GTXT ("<inclusive metrics for slave threads>"));
+ break;
+ }
+ }
+
+ mindex++;
+ if (mindex < dis_items->size ())
+ mline = (unsigned) ((DbeInstr*) (dis_items->fetch (mindex)->obj))->addr;
+ else
+ mline = -1;
+ }
+}//set_MPSlave
+
+void
+Module::set_one (Hist_data::HistItem *org_item, Anno_Types type,
+ const char *text)
+{
+ if (org_item == NULL)
+ return;
+ Hist_data::HistItem *item = data_items->new_hist_item (org_item->obj, type,
+ org_item->value);
+ item->value[name_idx].tag = VT_LABEL;
+ item->value[name_idx].l = dbe_strdup (text);
+ data_items->append_hist_item (item);
+ if (org_item != NULL && src_items != NULL
+ && src_items->get_callsite_mark ()->get (org_item->obj))
+ data_items->get_callsite_mark ()->put (item->obj, 1);
+}//set_one
+
+void
+Module::set_ComCom (int vis_bits)
+{
+ Hist_data::HistItem *item;
+ Function *func = dbeSession->get_Unknown_Function ();
+
+ if (vis_bits)
+ {
+ // precede the compiler commentary with a blank line
+ item = data_items->new_hist_item (func, AT_EMPTY, empty);
+ item->value[name_idx].l = dbe_strdup (NTXT (""));
+ data_items->append_hist_item (item);
+ }
+ while (cline == curline)
+ {
+ ComC *comm = comComs->fetch (cindex);
+ if (comm->visible & vis_bits)
+ {
+ // write the compiler commentary
+ item = data_items->new_hist_item (func, AT_COM, empty);
+ item->value[name_idx].l = dbe_strdup (comm->com_str);
+ data_items->append_hist_item (item);
+ }
+ if (++cindex < comComs->size ())
+ cline = comComs->fetch (cindex)->line;
+ else
+ cline = -1;
+ }
+}
+
+void
+Module::dump_dataobjects (FILE *out)
+{
+ int index;
+ datatype_t *dtype;
+ Vec_loop (datatype_t*, datatypes, index, dtype)
+ {
+ fprintf (out, NTXT ("[0x%08X,%6lld] %4d %6d %s "), dtype->datatype_id,
+ dtype->dobj ? dtype->dobj->id : 0LL,
+ dtype->memop_refs, dtype->event_data,
+ (dtype->dobj != NULL ? (dtype->dobj->get_name () ?
+ dtype->dobj->get_name () : "<NULL>") : "<no object>"));
+#if DEBUG
+ Histable* scope = dtype->dobj ? dtype->dobj->get_scope () : NULL;
+ if (scope != NULL)
+ {
+ switch (scope->get_type ())
+ {
+ case Histable::LOADOBJECT:
+ case Histable::FUNCTION:
+ fprintf (out, NTXT ("%s"), scope->get_name ());
+ break;
+ case Histable::MODULE:
+ {
+ char *filename = get_basename (scope->get_name ());
+ fprintf (out, NTXT ("%s"), filename);
+ break;
+ }
+ default:
+ fprintf (out, NTXT ("\tUnexpected scope %d:%s"),
+ scope->get_type (), scope->get_name ());
+ }
+ }
+#endif
+ fprintf (out, NTXT ("\n"));
+ }
+}
+
+void
+Module::set_name (char *str)
+{
+ free (name);
+ name = str;
+}
+
+void
+Module::read_hwcprof_info ()
+{
+ if (hwcprof == 0)
+ {
+ hwcprof = 1;
+ Stabs *stabs = openDebugInfo ();
+ if (stabs)
+ stabs->read_hwcprof_info (this);
+ }
+}
+
+void
+Module::reset_datatypes ()
+{
+ for (int i = 0, sz = datatypes ? datatypes->size () : -1; i < sz; i++)
+ {
+ datatype_t *t = datatypes->fetch (i);
+ t->event_data = 0;
+ }
+}
+
+DataObject *
+Module::get_dobj (uint32_t dtype_id)
+{
+ read_hwcprof_info ();
+ for (int i = 0, sz = datatypes ? datatypes->size () : -1; i < sz; i++)
+ {
+ datatype_t *t = datatypes->fetch (i);
+ if (t->datatype_id == dtype_id)
+ {
+ t->event_data++;
+ return t->dobj;
+ }
+ }
+ return NULL;
+}
+
+int
+Module::readFile ()
+{
+ return AE_OK;
+}
+
+Vector<Histable*> *
+Module::get_comparable_objs ()
+{
+ update_comparable_objs ();
+ if (comparable_objs || dbeSession->expGroups->size () <= 1 || loadobject == NULL)
+ return comparable_objs;
+ Vector<Histable*> *comparableLoadObjs = loadobject->get_comparable_objs ();
+ if (comparableLoadObjs == NULL)
+ return NULL;
+ comparable_objs = new Vector<Histable*>(comparableLoadObjs->size ());
+ for (int i = 0, sz = comparableLoadObjs->size (); i < sz; i++)
+ {
+ Module *mod = NULL;
+ LoadObject *lo = (LoadObject*) comparableLoadObjs->fetch (i);
+ if (lo)
+ {
+ mod = lo->get_comparable_Module (this);
+ if (mod)
+ mod->comparable_objs = comparable_objs;
+ }
+ comparable_objs->store (i, mod);
+ }
+ dump_comparable_objs ();
+ return comparable_objs;
+}
+
+JMethod *
+Module::find_jmethod (const char *nm, const char *sig)
+{
+ // Vladimir: Probably we should not use linear search
+ for (long i = 0, sz = VecSize (functions); i < sz; i++)
+ {
+ JMethod *jmthd = (JMethod*) functions->get (i);
+ char *jmt_name = jmthd->get_name (Histable::SHORT);
+ if (strcmp (jmt_name, nm) == 0
+ && strcmp (jmthd->get_signature (), sig) == 0)
+ return jmthd;
+ }
+ return NULL;
+}
diff --git a/gprofng/src/Module.h b/gprofng/src/Module.h
new file mode 100644
index 00000000000..39c4322623e
--- /dev/null
+++ b/gprofng/src/Module.h
@@ -0,0 +1,284 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _MODULE_H
+#define _MODULE_H
+
+// A Module object represents a .o file that was used to build up a segement.
+// Its main function is to compute source and disassembly annotations
+// Text reordering and/or function outlining imply that a module may
+// not be contiguous.
+
+#include "Histable.h"
+#include "Hist_data.h"
+
+#define MOD_FLAG_UNKNOWN 0x01
+
+class LoadObject;
+class MetricList;
+class ComC;
+class Disasm;
+class Hist_data;
+class Stabs;
+class SourceFile;
+class DataObject;
+class JMethod;
+template <class ITEM> class Vector;
+
+class InlinedSubr
+{
+public:
+ InlinedSubr ();
+ DbeLine *dbeLine;
+ Function *func;
+ char *fname;
+ uint64_t low_pc;
+ uint64_t high_pc;
+ int level;
+
+ bool
+ contains (InlinedSubr *p)
+ {
+ return low_pc <= p->low_pc && high_pc >= p->high_pc;
+ }
+
+ bool
+ contains (uint64_t pc)
+ {
+ return low_pc <= pc && high_pc > pc;
+ }
+};
+
+class Module : public HistableFile
+{
+public:
+ // Annotated Source or Disassembly
+ enum Anno_Errors
+ {
+ AE_OK,
+ AE_NOTREAD,
+ AE_NOSRC,
+ AE_NOOBJ,
+ AE_NOLOBJ,
+ AE_NOSTABS,
+ AE_NOSYMTAB,
+ AE_TIMESRC,
+ AE_TIMEDIS,
+ AE_TIMESTABS,
+ AE_TIMESTABS_DIFF,
+ AE_OTHER
+ };
+
+ // The following enums are duplicated in Java
+ enum Anno_Types
+ {
+ AT_LIST = 0,
+ AT_SRC,
+ AT_SRC_ONLY,
+ AT_DIS,
+ AT_COM,
+ AT_QUOTE,
+ AT_FUNC,
+ AT_EMPTY,
+ AT_DIS_ONLY
+ };
+
+ Module ();
+ virtual ~Module ();
+ virtual int64_t get_size ();
+ virtual void set_name (char *str);
+ virtual Vector<Histable*> *get_comparable_objs ();
+ virtual int readFile ();
+
+ virtual Histable_type
+ get_type ()
+ {
+ return MODULE;
+ }
+
+ inline Anno_Errors
+ get_status ()
+ {
+ return status;
+ }
+
+ inline void
+ set_file_name (char *fnm)
+ {
+ free (file_name);
+ file_name = fnm;
+ }
+
+ // get error string
+ char *anno_str (char *fnm = NULL);
+
+ // generate annotated source/disassembly data
+ Hist_data *get_data (DbeView *dbev, MetricList *mlist,
+ Histable::Type type, TValue *ftotal, SourceFile *srcFile,
+ Function *func, Vector<int> *marks, int threshold,
+ int vis_bits, int src_visible, bool hex_visible,
+ bool func_scope, bool src_only,
+ Vector<int_pair_t> *marks2d = NULL,
+ Vector<int_pair_t> *marks2d_inc = NULL);
+
+ Vector<uint64_t> *getAddrs (Function *func);
+ SourceFile *setIncludeFile (char *includeFile);
+
+ SourceFile *
+ getIncludeFile ()
+ {
+ return curr_inc;
+ }
+
+ SourceFile *
+ getMainSrc ()
+ {
+ return main_source;
+ }
+
+ char *
+ getResolvedObjectPath ()
+ {
+ return stabsPath ? stabsPath : get_name ();
+ }
+
+ char *
+ getDebugPath ()
+ {
+ setFile ();
+ return stabsPath;
+ }
+
+ void read_stabs (bool all = true);
+ void dump_dataobjects (FILE *out);
+ DataObject *get_dobj (uint32_t dtype_id);
+ void reset_datatypes ();
+ void read_hwcprof_info ();
+ bool is_fortran ();
+ SourceFile *findSource (const char *fname, bool create);
+ bool openStabs (bool all = true);
+ LoadObject *createLoadObject (const char *lo_name);
+ JMethod *find_jmethod (const char *nm, const char *sig);
+
+ unsigned int flags; // flags used for marking traversals
+ Sp_lang_code lang_code; // What is source lang. in module
+ char *file_name; // Full path to actual source file
+ Vector<Function*> *functions; // Unordered list of functions
+ LoadObject *loadobject; // Parent loadobject
+ LoadObject *dot_o_file; // The .o file with debug information
+ unsigned fragmented; // -xF used when compiling module
+ int real_timestamp; // Linked timestamp from N_OPT stab
+ int curr_timestamp; // Current object timestamp from N_OPT stab
+ char *comp_flags; // compiler flags used to compile module
+ char *comp_dir; // directory used to compile module
+ char *linkerStabName; // Name from 'N_UNDF' stab
+ Stabs *objStabs; // stabs of object file
+ bool readStabs;
+ bool hasStabs;
+ bool hasDwarf;
+ uint64_t hdrOffset; // offset in .debug_info
+ unsigned hwcprof; // hwcprof info status
+ Vector<inst_info_t*> *infoList; // merged list
+ Vector<memop_info_t*> ldMemops; // load instructions
+ Vector<memop_info_t*> stMemops; // store instructions
+ Vector<memop_info_t*> pfMemops; // prefetch instructions
+ Vector<target_info_t*> bTargets; // branch targets
+ Vector<datatype_t*> *datatypes; // object type descriptors
+ Vector<SourceFile*> *includes;
+ Module *indexStabsLink; // correspondent module for the .o file
+ InlinedSubr *inlinedSubr;
+
+protected:
+ void removeStabsTmp (); // Remove temporary *.o (got from *.a)
+
+ // Check timestamp, warn users if src/dis/stabs later than exp.
+ Anno_Errors checkTimeStamp (bool chkDis);
+
+ // Set paths for reading Stabs and Symbols
+ bool read_ar (int ar, int obj, char *obj_base);
+ bool setFile ();
+
+ // Open appropriate symbol tables, construct set of PC ranges,
+ // and maps to source lines for each PC
+ Stabs *openDebugInfo ();
+
+ // Construct PC index table
+ bool openDisPC ();
+
+ // Compute data--scan data to compute metrics per-src-line/dis-line
+ bool computeMetrics (DbeView *dbev, Function *func, MetricList *mlist,
+ Histable::Type type, bool src_metric,
+ bool func_scope, SourceFile *source);
+ void init_line ();
+ void init_index (Hist_data *witems, int &wlindex, int &wmsize, int &wmindex);
+
+ void set_src_data (Function *func, int vis_bits, int cmpline_visible,
+ int funcline_visible);
+ void set_dis_data (Function *func, int vis_bits, int cmpline_visible,
+ int src_visible, bool hex_vis, bool func_scope,
+ int funcline_visible);
+ void set_src (Anno_Types type, DbeLine *dbeline);
+ void set_dis (DbeInstr *instr, Anno_Types type, bool nextFile, char *dis_str);
+ void set_MPSlave ();
+ void set_one (Hist_data::HistItem *org_item, Anno_Types type, const char *text);
+ void set_ComCom (int vis_bits);
+
+ virtual char *get_disasm (uint64_t inst_address, uint64_t end_address,
+ uint64_t start_address, uint64_t f_offset,
+ int64_t &inst_size);
+
+ Anno_Errors status;
+ Anno_Errors openSourceFlag;
+ bool hexVisible; // show hex code in disasm
+ time_t disMTime; // Creating time for disassembly
+ time_t stabsMTime; // Creating time for stabs
+ SourceFile *main_source;
+ SourceFile *curr_inc; // pointer to include file or NULL
+ SourceFile *srcContext;
+ Vector<ComC*> *comComs; // table of compiler comments
+ Disasm *disasm;
+ Hist_data *src_items;
+ Hist_data *dis_items;
+ Hist_data *data_items;
+ DbeView * cur_dbev;
+ TValue *total;
+ TValue *maximum;
+ TValue *maximum_inc;
+ TValue *empty;
+ int name_idx; // index of name metric in list for src/dis
+ int size_index; // index of size metric in list for src/dis
+ int addr_index; // index of address metric in list for src/dis
+
+ int curline; // line# of next source line to be processed
+ int cindex, cline; // index and src line of next compiler-comment
+ int sindex, sline; // index and src line of next item in src_items
+ int dindex;
+ DbeInstr *daddr; // pointer to next DbeInstr with metrics
+ int mindex; // MP index and src line of next metric-value
+ int mline; // MP line to be processed by source
+
+ char *disPath; // path for disassembly
+ char *stabsPath; // path for reading stabs
+ char *stabsTmp; // temporary *.o from *.a
+ char *disName; // library/path for disassembly
+ char *stabsName; // library/path for stabs
+};
+
+#endif /* _MODULE_H */
diff --git a/gprofng/src/Ovw_data.cc b/gprofng/src/Ovw_data.cc
new file mode 100644
index 00000000000..2cd57180783
--- /dev/null
+++ b/gprofng/src/Ovw_data.cc
@@ -0,0 +1,242 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <memory.h>
+#include <values.h>
+#include <assert.h>
+#include "Data_window.h"
+#include "Exp_Layout.h"
+#include "Table.h"
+#include "Ovw_data.h"
+#include "Sample.h"
+#include "data_pckts.h"
+#include "util.h"
+#include "i18n.h"
+
+void
+Ovw_data::sum (Ovw_data *data)
+{
+ Ovw_item data_totals = data->get_totals ();
+ if (totals == NULL)
+ {
+ totals = reset_item (new Ovw_item);
+ *totals = data_totals;
+ totals->start.tv_sec = totals->end.tv_sec = -1;
+ totals->start.tv_nsec = totals->end.tv_nsec = 0;
+ }
+ else
+ {
+ tsadd (&totals->duration, &data_totals.duration);
+ tsadd (&totals->tlwp, &data_totals.tlwp);
+ if (tstodouble (totals->duration) != 0)
+ totals->nlwp = tstodouble (totals->tlwp) / tstodouble (totals->duration);
+
+ for (int i = 0, size = totals->size; i < size; i++)
+ tsadd (&totals->values[i].t, &data_totals.values[i].t);
+ }
+}
+
+Ovw_data::Ovw_item *
+Ovw_data::reset_item (Ovw_data::Ovw_item *item)
+{
+ memset (item, 0, sizeof (*item));
+ return item;
+}
+
+Ovw_data::Ovw_item
+Ovw_data::get_totals ()
+{
+ // This routine will return the totals values for item in the sample.
+ // Compute maximums and totals only once, and save the result.
+ // On subsequent calls, just return the saved result.
+ // If maximums is NULL, then totals is also NULL
+ if (totals != NULL)
+ return *totals;
+
+ timestruc_t zero = {0, 0};
+ totals = reset_item (new Ovw_item);
+ totals->start.tv_sec = MAXINT; // new
+ totals->start.tv_nsec = MAXINT; // new
+ totals->start_label = totals->end_label = NTXT ("Total");
+ totals->type = VT_HRTIME;
+
+ int nsampsel = 0;
+ for (int index = 0; index < size (); index++)
+ {
+ Ovw_item item = fetch (index);
+ nsampsel++;
+
+ // Compute totals
+ for (int i = 0; i < OVW_NUMVALS + 1; i++)
+ tsadd (&totals->values[i].t, &item.values[i].t);
+
+ int_max (&totals->states, item.states);
+ tsadd (&totals->total.t, &item.total.t);
+ int_max (&totals->size, item.size);
+ tsadd (&totals->duration, &item.duration);
+ tsadd (&totals->tlwp, &item.tlwp);
+ totals->number += item.number;
+ if (tscmp (&totals->start, &item.start) > 0)
+ totals->start = item.start;
+ if (tscmp (&totals->end, &item.end) < 0)
+ totals->end = item.end;
+ }
+
+ if (totals->start.tv_sec == MAXINT && totals->start.tv_nsec == MAXINT)
+ totals->start = zero;
+ totals->nlwp = tstodouble (totals->tlwp) / tstodouble (totals->duration);
+
+ if (nsampsel == 0)
+ {
+ totals->size = OVW_NUMVALS + 1;
+ totals->start.tv_sec = totals->end.tv_sec = -1;
+ totals->start.tv_nsec = totals->end.tv_nsec = 0;
+ totals->nlwp = -1;
+ }
+ return *totals;
+}
+
+Ovw_data::Ovw_item
+Ovw_data::get_labels ()
+{
+ Ovw_item ovw_item;
+ Value *values;
+ memset (&ovw_item, 0, sizeof (Ovw_item));
+ values = &ovw_item.values[0];
+
+ char *stateUNames[/*LMS_NUM_STATES*/] = LMS_STATE_USTRINGS;
+ values[0].l = dbe_strdup (GTXT ("Leftover"));
+ values[OVW_LMS_USER + 1].l = stateUNames[LMS_USER];
+ values[OVW_LMS_SYSTEM + 1].l = stateUNames[LMS_SYSTEM];
+ values[OVW_LMS_WAIT_CPU + 1].l = stateUNames[LMS_WAIT_CPU];
+ values[OVW_LMS_USER_LOCK + 1].l = stateUNames[LMS_USER_LOCK];
+ values[OVW_LMS_TFAULT + 1].l = stateUNames[LMS_TFAULT];
+ values[OVW_LMS_DFAULT + 1].l = stateUNames[LMS_DFAULT];
+ values[OVW_LMS_KFAULT + 1].l = stateUNames[LMS_KFAULT];
+ values[OVW_LMS_SLEEP + 1].l = stateUNames[LMS_SLEEP];
+ values[OVW_LMS_STOPPED + 1].l = stateUNames[LMS_STOPPED];
+ values[OVW_LMS_TRAP + 1].l = stateUNames[LMS_TRAP];
+
+ ovw_item.size = OVW_NUMVALS + 1;
+ ovw_item.states = 0;
+ ovw_item.type = VT_LABEL;
+ return ovw_item;
+}
+
+Ovw_data::Ovw_data ()
+{
+ packets = NULL;
+ ovw_items = new Vector<Ovw_item*>;
+ totals = NULL;
+}
+
+Ovw_data::Ovw_data (DataView *_packets, hrtime_t exp_start)
+{
+ packets = _packets;
+ ovw_items = new Vector<Ovw_item*>;
+ totals = NULL;
+ long npackets = packets->getSize ();
+ for (long index = 0; index < npackets; index++)
+ {
+ Ovw_item *ovw_item = new Ovw_item;
+ memset (ovw_item, 0, sizeof (Ovw_item));
+ Sample *sample = (Sample*) packets->getObjValue (PROP_SMPLOBJ, index);
+ extract_data (ovw_item, sample);
+ hr2timestruc (&ovw_item->start, sample->get_start_time () - exp_start);
+ hr2timestruc (&ovw_item->end, sample->get_end_time () - exp_start);
+ // No need to check for duration, as duration has to be > 0.
+ // If not, it would have been found out in yyparse.
+ tssub (&ovw_item->duration, &ovw_item->end, &ovw_item->start);
+ ovw_item->number = sample->get_number ();
+ ovw_item->start_label = sample->get_start_label ();
+ ovw_item->end_label = sample->get_end_label ();
+
+ int size = ovw_item->size;
+ for (int j = 0; j < size; j++)
+ tsadd (&ovw_item->tlwp, &ovw_item->values[j].t);
+ if (tstodouble (ovw_item->duration) != 0)
+ ovw_item->nlwp = tstodouble (ovw_item->tlwp) /
+ tstodouble (ovw_item->duration);
+ ovw_items->append (ovw_item);
+ }
+}
+
+Ovw_data::~Ovw_data ()
+{
+ ovw_items->destroy ();
+ delete ovw_items;
+ delete totals;
+}
+
+void
+Ovw_data::extract_data (Ovw_data::Ovw_item *ovw_item, Sample *sample)
+{
+ // This routine break out the data in "data" into buckets in "ovw_item"
+ int index;
+ int states;
+ timestruc_t sum, rtime;
+ timestruc_t zero = {0, 0};
+ Value *values;
+ PrUsage *prusage = sample->get_usage ();
+ if (prusage == NULL)
+ prusage = new PrUsage;
+
+ values = &ovw_item->values[0];
+ hr2timestruc (&values[OVW_LMS_USER + 1].t, prusage->pr_utime);
+ hr2timestruc (&values[OVW_LMS_SYSTEM + 1].t, prusage->pr_stime);
+ hr2timestruc (&values[OVW_LMS_WAIT_CPU + 1].t, prusage->pr_wtime);
+ hr2timestruc (&values[OVW_LMS_USER_LOCK + 1].t, prusage->pr_ltime);
+ hr2timestruc (&values[OVW_LMS_TFAULT + 1].t, prusage->pr_tftime);
+ hr2timestruc (&values[OVW_LMS_DFAULT + 1].t, prusage->pr_dftime);
+ hr2timestruc (&values[OVW_LMS_TRAP + 1].t, prusage->pr_ttime);
+ hr2timestruc (&values[OVW_LMS_KFAULT + 1].t, prusage->pr_kftime);
+ hr2timestruc (&values[OVW_LMS_SLEEP + 1].t, prusage->pr_slptime);
+ hr2timestruc (&values[OVW_LMS_STOPPED + 1].t, prusage->pr_stoptime);
+ ovw_item->size = OVW_NUMVALS + 1;
+
+ //XXX: Compute values[0] as rtime - sum_of(other_times)
+ sum = zero;
+ states = 0;
+ for (index = 1; index < ovw_item->size; index++)
+ {
+ if (values[index].t.tv_sec != 0 || values[index].t.tv_nsec != 0)
+ states++;
+ tsadd (&sum, &values[index].t);
+ }
+
+ // If the sum of all times is greater than rtime then adjust
+ // rtime to be equal to sum and also adjust the pr_rtime field
+ hr2timestruc (&rtime, prusage->pr_rtime);
+ if (tscmp (&sum, &rtime) > 0)
+ {
+ ovw_item->total.t = sum;
+ values[0].t = zero;
+ }
+ else
+ {
+ ovw_item->total.t = rtime;
+ tssub (&rtime, &rtime, &sum);
+ tsadd (&values[0].t, &rtime);
+ states++;
+ }
+ ovw_item->type = VT_HRTIME;
+ ovw_item->states = states;
+}
diff --git a/gprofng/src/Ovw_data.h b/gprofng/src/Ovw_data.h
new file mode 100644
index 00000000000..0c3372c5037
--- /dev/null
+++ b/gprofng/src/Ovw_data.h
@@ -0,0 +1,102 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _OVW_DATA_H
+#define _OVW_DATA_H
+
+// An Ovw_data object is used to supply data for constructing an overview
+// display.
+
+#include "dbe_structs.h"
+
+class Sample;
+class DataView;
+
+class Ovw_data
+{
+public:
+
+ enum OVW_LMS_STORAGE
+ {// in display order, not LMS_* order
+ // Note: use same display order of LMS_* in: er.rc, TimelineVariable.java,
+ // Ovw_data.h, BaseMetricTreeNode.cc and Experiment.cc metric registration
+ OVW_LMS_USER,
+ OVW_LMS_SYSTEM,
+ OVW_LMS_TRAP,
+ OVW_LMS_USER_LOCK,
+ OVW_LMS_DFAULT,
+ OVW_LMS_TFAULT,
+ OVW_LMS_KFAULT,
+ OVW_LMS_STOPPED,
+ OVW_LMS_WAIT_CPU,
+ OVW_LMS_SLEEP,
+ OVW_NUMVALS // must be last
+ };
+
+ // Ovw_item contains one slice of data
+ struct Ovw_item
+ {
+ Value values [OVW_NUMVALS + 1]; // Value list (value[0] is left over)
+ int states; // Number of non-zero states
+ Value total; // Total of all values
+ int size; // Number of values
+ timestruc_t start; // Start time of sample
+ timestruc_t duration; // Duration of sample
+ timestruc_t end; // End time of sample
+ timestruc_t tlwp; // Total LWP time
+ double nlwp; // Average number of LWPs
+ ValueTag type; // Type of value
+ int number; // Sample number
+ char *start_label; // Sample start label
+ char *end_label; // Sample end label
+ };
+
+ Ovw_data (DataView *, hrtime_t exp_start);
+ Ovw_data ();
+ ~Ovw_data ();
+ void sum (Ovw_data *data);
+ Ovw_item get_totals ();
+ Ovw_item get_labels ();
+
+ // zero out contents of Ovw_item
+ static Ovw_item *reset_item (Ovw_item *item);
+
+ int
+ size ()
+ {
+ return ovw_items->size ();
+ }
+
+ Ovw_item
+ fetch (int index)
+ {
+ return *ovw_items->fetch (index);
+ }
+
+private:
+ // Compute the values for "ovw_item" from "sample".
+ void extract_data (Ovw_item *ovw_item, Sample *sample);
+
+ Vector<Ovw_item*> *ovw_items;
+ Ovw_item *totals; // Item to cache totals
+ DataView *packets;
+};
+
+#endif /* _OVW_DATA_H */
diff --git a/gprofng/src/PRBTree.cc b/gprofng/src/PRBTree.cc
new file mode 100644
index 00000000000..5046a912631
--- /dev/null
+++ b/gprofng/src/PRBTree.cc
@@ -0,0 +1,480 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+// The Persistent Red-Black Tree
+//
+// Implementation is based on an algorithm described in
+// Sarnak, N., Tarjan, R., "Planar point location using
+// persistent search trees", in Communications of the ACM,
+// 1986, Vol.29, Number 7.
+//
+
+#include "config.h"
+#include <memory.h>
+#include <string.h>
+
+#include "vec.h"
+#include "PRBTree.h"
+
+#define ASSERT(x)
+
+#define IS_BLACK(x) ((x)==NULL || (x)->color == Black)
+#define IS_RED(x) ((x)!=NULL && (x)->color == Red)
+#define SET_BLACK(x) if(x) x->color = Black
+#define SET_RED(x) (x)->color = Red
+
+#define D_OPPOSITE(x) (((x)==Left) ? Right : Left )
+
+PRBTree::LMap::LMap (Key_t _key, void *_item)
+{
+ key = _key;
+ item = _item;
+ color = Red;
+ parent = NULL;
+ for (int i = 0; i < NPTRS; i++)
+ {
+ dir[i] = None;
+ chld[i] = NULL;
+ time[i] = 0;
+ }
+};
+
+PRBTree::LMap::LMap (const LMap& lm)
+{
+ key = lm.key;
+ item = lm.item;
+ color = lm.color;
+ parent = lm.parent;
+ for (int i = 0; i < NPTRS; i++)
+ {
+ dir[i] = None;
+ chld[i] = NULL;
+ time[i] = 0;
+ }
+};
+
+PRBTree::PRBTree ()
+{
+ roots = new Vector<LMap*>;
+ root = NULL;
+ times = new Vector<Time_t>;
+ rtts = (Time_t) 0;
+ curts = (Time_t) 0;
+ mlist = NULL;
+ vals = NULL;
+}
+
+PRBTree::~PRBTree ()
+{
+ while (mlist)
+ {
+ LMap *lm = mlist;
+ mlist = mlist->next;
+ delete lm;
+ }
+ delete times;
+ delete roots;
+ delete vals;
+}
+
+Vector<void *> *
+PRBTree::values ()
+{
+ if (vals == NULL)
+ {
+ vals = new Vector<void*>;
+ for (LMap *lm = mlist; lm; lm = lm->next)
+ vals->append (lm->item);
+ }
+ return vals;
+}
+
+PRBTree::LMap *
+PRBTree::rb_new_node (Key_t key, void *item)
+{
+ LMap *lm = new LMap (key, item);
+ lm->next = mlist;
+ mlist = lm;
+ return lm;
+}
+
+PRBTree::LMap *
+PRBTree::rb_new_node (LMap *lm)
+{
+ LMap *lmnew = new LMap (*lm);
+ lmnew->next = mlist;
+ mlist = lmnew;
+ return lmnew;
+}
+
+PRBTree::LMap *
+PRBTree::rb_child (LMap *lm, Direction d, Time_t ts)
+{
+ if (lm == NULL)
+ return NULL;
+ for (int i = 0; i < NPTRS; i++)
+ {
+ if (lm->time[i] > ts)
+ continue;
+ if (lm->dir[i] == d)
+ return lm->chld[i];
+ else if (lm->dir[i] == None)
+ break;
+ }
+ return NULL;
+}
+
+PRBTree::Direction
+PRBTree::rb_which_chld (LMap *lm)
+{
+ LMap *prnt = lm->parent;
+ if (prnt == NULL)
+ return None;
+ for (int i = 0; i < NPTRS; i++)
+ {
+ if (prnt->dir[i] == None)
+ break;
+ if (prnt->chld[i] == lm)
+ return (Direction) prnt->dir[i];
+ }
+ return None;
+}
+
+PRBTree::LMap *
+PRBTree::rb_neighbor (LMap *lm, Time_t ts)
+{
+ ASSERT (lm->dir[0] != None);
+ Direction d = D_OPPOSITE (lm->dir[0]);
+ LMap *y = NULL;
+ LMap *next = lm->chld[0];
+ while (next)
+ {
+ y = next;
+ next = rb_child (y, d, ts);
+ }
+ return y;
+}
+
+PRBTree::LMap *
+PRBTree::rb_copy_node (LMap *lm, Direction d)
+{
+ LMap *nlm = rb_new_node (lm);
+ rb_fix_chld (lm->parent, nlm, rb_which_chld (lm));
+ if (d == None)
+ {
+ d = Left;
+ rb_fix_chld (nlm, rb_child (lm, d, curts), d);
+ }
+
+ // copy the other child
+ Direction dd = D_OPPOSITE (d);
+ rb_fix_chld (nlm, rb_child (lm, dd, curts), dd);
+ return nlm;
+}
+
+PRBTree::LMap *
+PRBTree::rb_fix_chld (LMap *prnt, LMap *lm, Direction d)
+{
+
+ if (prnt == NULL)
+ {
+ // fixing root
+ ASSERT (d == None);
+ if (rtts == curts)
+ root = lm;
+ else
+ {
+ roots->append (root);
+ times->append (rtts);
+ root = lm;
+ rtts = curts;
+ }
+ if (lm != NULL)
+ lm->parent = prnt;
+ return prnt;
+ }
+
+ // If we already have a d-pointer at time curts, reuse it
+ for (int i = 0; prnt->time[i] == curts; i++)
+ {
+ if (prnt->dir[i] == d)
+ {
+ prnt->chld[i] = lm;
+ if (lm != NULL)
+ lm->parent = prnt;
+ return prnt;
+ }
+ }
+
+ if (prnt->dir[NPTRS - 1] != None)
+ prnt = rb_copy_node (prnt, d);
+ ASSERT (prnt->dir[NPTRS - 1] == None);
+
+ for (int i = NPTRS - 1; i > 0; i--)
+ {
+ prnt->dir[i] = prnt->dir[i - 1];
+ prnt->chld[i] = prnt->chld[i - 1];
+ prnt->time[i] = prnt->time[i - 1];
+ }
+ prnt->dir[0] = d;
+ prnt->chld[0] = lm;
+ prnt->time[0] = curts;
+ if (lm != NULL)
+ lm->parent = prnt;
+ return prnt;
+}
+
+PRBTree::LMap *
+PRBTree::rb_rotate (LMap *x, Direction d)
+{
+ Direction dd = D_OPPOSITE (d);
+ LMap *y = rb_child (x, dd, curts);
+ x = rb_fix_chld (x, rb_child (y, d, curts), dd);
+ rb_fix_chld (x->parent, y, rb_which_chld (x));
+ rb_fix_chld (y, x, d);
+ return x;
+}
+
+void
+PRBTree::rb_remove_fixup (LMap *x, LMap *prnt, Direction d0)
+{
+
+ while (IS_BLACK (x) && (x != root))
+ {
+ Direction d = (x == NULL) ? d0 : rb_which_chld (x);
+ Direction dd = D_OPPOSITE (d);
+ LMap *y = rb_child (prnt, dd, curts);
+ if (IS_RED (y))
+ {
+ SET_BLACK (y);
+ SET_RED (prnt);
+ prnt = rb_rotate (prnt, d);
+ y = rb_child (prnt, dd, curts);
+ }
+ LMap *y_d = rb_child (y, d, curts);
+ LMap *y_dd = rb_child (y, dd, curts);
+ if (IS_BLACK (y_d) && IS_BLACK (y_dd))
+ {
+ SET_RED (y);
+ x = prnt;
+ prnt = x->parent;
+ }
+ else
+ {
+ if (IS_BLACK (y_dd))
+ {
+ SET_BLACK (y_d);
+ SET_RED (y);
+ y = rb_rotate (y, dd);
+ prnt = y->parent->parent;
+ y = rb_child (prnt, dd, curts);
+ y_dd = rb_child (y, dd, curts);
+ }
+ y->color = prnt->color;
+ SET_BLACK (prnt);
+ SET_BLACK (y_dd);
+ prnt = rb_rotate (prnt, d);
+ break;
+ }
+ }
+ SET_BLACK (x);
+}
+
+PRBTree::LMap *
+PRBTree::rb_locate (Key_t key, Time_t ts, bool low)
+{
+ LMap *lm;
+ Direction d;
+ int i, lt, rt;
+ int tsz = times->size ();
+
+ if (ts >= rtts)
+ lm = root;
+ else
+ {
+ // exponential search
+ for (i = 1; i <= tsz; i = i * 2)
+ if (times->fetch (tsz - i) <= ts)
+ break;
+
+ if (i <= tsz)
+ {
+ lt = tsz - i;
+ rt = tsz - i / 2 - 1;
+ }
+ else
+ {
+ lt = 0;
+ rt = tsz - 1;
+ }
+ while (lt <= rt)
+ {
+ int md = (lt + rt) / 2;
+ if (times->fetch (md) <= ts)
+ lt = md + 1;
+ else
+ rt = md - 1;
+ }
+ if (rt < 0)
+ return NULL;
+ lm = roots->fetch (rt);
+ }
+
+ LMap *last_lo = NULL;
+ LMap *last_hi = NULL;
+ while (lm != NULL)
+ {
+ if (key >= lm->key)
+ {
+ last_lo = lm;
+ d = Right;
+ }
+ else
+ {
+ last_hi = lm;
+ d = Left;
+ }
+ lm = rb_child (lm, d, ts);
+ }
+ return low ? last_lo : last_hi;
+}
+
+//==================================================== Public interface
+
+bool
+PRBTree::insert (Key_t key, Time_t ts, void *item)
+{
+ LMap *lm, *y;
+ Direction d, dd;
+ if (ts > curts)
+ curts = ts;
+ else if (ts < curts)
+ return false; // can only update the current tree
+
+ // Insert in the tree in the usual way
+ y = NULL;
+ d = None;
+ for (LMap *next = root; next;)
+ {
+ y = next;
+ if (key == y->key)
+ {
+ // copy the node with both children
+ lm = rb_copy_node (y, None);
+ // but use the new item
+ lm->item = item;
+ return true;
+ }
+ d = (key < y->key) ? Left : Right;
+ next = rb_child (y, d, curts);
+ }
+ lm = rb_new_node (key, item);
+ rb_fix_chld (y, lm, d);
+
+ // Rebalance the tree
+ while (IS_RED (lm->parent))
+ {
+ d = rb_which_chld (lm->parent);
+ dd = D_OPPOSITE (d);
+
+ y = rb_child (lm->parent->parent, dd, curts);
+ if (IS_RED (y))
+ {
+ SET_BLACK (lm->parent);
+ SET_BLACK (y);
+ SET_RED (lm->parent->parent);
+ lm = lm->parent->parent;
+ }
+ else
+ {
+ if (rb_which_chld (lm) == dd)
+ {
+ lm = lm->parent;
+ lm = rb_rotate (lm, d);
+ }
+ SET_BLACK (lm->parent);
+ SET_RED (lm->parent->parent);
+ rb_rotate (lm->parent->parent, dd);
+ }
+ }
+
+ // Color the root Black
+ SET_BLACK (root);
+ return true;
+}
+
+bool
+PRBTree::remove (Key_t key, Time_t ts)
+{
+ LMap *lm, *x, *y, *prnt;
+ if (ts > curts)
+ curts = ts;
+ else if (ts < curts)
+ return false; // can only update the current tree
+
+ lm = rb_locate (key, curts, true);
+ if (lm == NULL || lm->key != key)
+ return false;
+
+ if (rb_child (lm, Left, curts) && rb_child (lm, Right, curts))
+ y = rb_neighbor (lm, curts);
+ else
+ y = lm;
+
+ x = rb_child (y, Left, curts);
+ if (x == NULL)
+ x = rb_child (y, Right, curts);
+
+ if (y != lm)
+ {
+ lm = rb_copy_node (lm, None); // copied with children
+ lm->key = y->key;
+ lm->item = y->item;
+ }
+
+ Direction d = rb_which_chld (y);
+ prnt = rb_fix_chld (y->parent, x, d);
+ if (IS_BLACK (y))
+ rb_remove_fixup (x, prnt, d);
+ return true;
+}
+
+void *
+PRBTree::locate (Key_t key, Time_t ts)
+{
+ LMap *lm = rb_locate (key, ts, true);
+ return lm ? lm->item : NULL;
+}
+
+void *
+PRBTree::locate_up (Key_t key, Time_t ts)
+{
+ LMap *lm = rb_locate (key, ts, false);
+ return lm ? lm->item : NULL;
+}
+
+void *
+PRBTree::locate_exact_match (Key_t key, Time_t ts)
+{
+ LMap *lm = rb_locate (key, ts, true);
+ if (lm && key == lm->key)
+ return lm->item;
+ return NULL;
+}
diff --git a/gprofng/src/PRBTree.h b/gprofng/src/PRBTree.h
new file mode 100644
index 00000000000..1a6f07f1cdd
--- /dev/null
+++ b/gprofng/src/PRBTree.h
@@ -0,0 +1,106 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+//
+// The Persistent Red-Black Tree
+//
+
+#ifndef _PRBTREE_H
+#define _PRBTREE_H
+
+#include "dbe_types.h"
+template <class ITEM> class Vector;
+
+// The number of pointers in a node must be set greater than 2.
+// The higher the number the faster the search seems to be and
+// the more memory the tree takes.
+#define NPTRS 5
+
+class PRBTree
+{
+public:
+
+ typedef Vaddr Key_t;
+ typedef hrtime_t Time_t;
+
+ PRBTree ();
+ ~PRBTree ();
+
+ bool insert (Key_t key, Time_t ts, void *item);
+ bool remove (Key_t key, Time_t ts);
+ void *locate (Key_t key, Time_t ts);
+ void *locate_exact_match (Key_t key, Time_t ts);
+ void *locate_up (Key_t key, Time_t ts);
+ Vector<void *> *values ();
+
+private:
+
+ enum Color
+ {
+ Red,
+ Black
+ };
+
+ enum Direction
+ {
+ None,
+ Left,
+ Right
+ };
+
+ struct LMap
+ {
+ Key_t key;
+ void *item;
+ LMap *parent;
+ LMap *chld[NPTRS];
+ Time_t time[NPTRS];
+ char dir[NPTRS];
+ char color;
+ LMap *next;
+
+ LMap (Key_t _key, void *_item);
+ LMap (const LMap& lm);
+ };
+ friend struct LMap;
+
+ LMap *mlist; // The master list of all nodes
+ Vector<LMap*> *roots;
+ Vector<Time_t> *times;
+ Vector<void *> *vals;
+ LMap *root;
+ Time_t rtts; // root timestamp
+ Time_t curts; // last update timestamp
+
+ LMap *rb_locate (Key_t key, Time_t ts, bool low);
+ LMap *rb_new_node (Key_t key, void *item);
+ LMap *rb_new_node (LMap *lm);
+ LMap *rb_copy_node (LMap *lm, Direction d);
+ LMap *rb_fix_chld (LMap *prnt, LMap *lm, Direction d);
+ LMap *rb_rotate (LMap *x, Direction d);
+ void rb_remove_fixup (LMap *x, LMap *prnt, Direction d0);
+
+ static LMap *rb_child (LMap *lm, Direction d, Time_t ts);
+ static Direction rb_which_chld (LMap *lm);
+ static LMap *rb_neighbor (LMap *lm, Time_t ts);
+
+};
+
+#endif /* _PRBTREE_H */
diff --git a/gprofng/src/PathTree.cc b/gprofng/src/PathTree.cc
new file mode 100644
index 00000000000..798e55c9755
--- /dev/null
+++ b/gprofng/src/PathTree.cc
@@ -0,0 +1,2637 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "util.h"
+#include "DefaultMap.h"
+#include "CacheMap.h"
+
+#include "DbeSession.h"
+#include "Application.h"
+#include "CallStack.h"
+#include "Emsg.h"
+#include "Experiment.h"
+#include "Expression.h"
+#include "Function.h"
+#include "Histable.h"
+#include "IndexObject.h"
+#include "MetricList.h"
+#include "Module.h"
+#include "DbeView.h"
+#include "Metric.h"
+#include "PathTree.h"
+#include "LoadObject.h"
+#include "Sample.h"
+#include "StringBuilder.h"
+#include "Table.h"
+
+// Define counts, rate for error warnings for statistical profiles
+#define MIN_PROF_CNT 100
+#define MAX_PROF_RATE 1000.
+
+#define NUM_DESCENDANTS(nd) ((nd)->descendants ? (nd)->descendants->size() : 0)
+#define IS_LEAF(nd) ((nd)->descendants == NULL)
+
+#ifdef DEBUG
+#define DBG(__func) __func
+#else
+#define DBG(__func)
+#endif
+
+void
+PathTree::construct (DbeView *_dbev, int _indxtype, PathTreeType _pathTreeType)
+{
+ dbev = _dbev;
+ indxtype = _indxtype;
+ pathTreeType = _pathTreeType;
+ status = 0;
+ nchunks = 0;
+ chunks = NULL;
+ nodes = 1; // don't use node 0
+ nslots = 0;
+ slots = NULL;
+ root_idx = 0;
+ root = NULL;
+ depth = 1;
+ dnodes = 0;
+ phaseIdx = -1;
+ nexps = 0;
+ total_obj = NULL;
+ indx_expr = NULL;
+ statsq = NULL;
+ warningq = NULL;
+ cancel_ok = 1;
+ ptree_internal = NULL;
+ ftree_internal = NULL;
+ ftree_needs_update = false;
+ depth_map = NULL;
+ init ();
+}
+
+PathTree::~PathTree ()
+{
+ fini ();
+ for (long i = 0; i < nchunks; i++)
+ delete[] chunks[i];
+ delete[] chunks;
+}
+
+void
+PathTree::init ()
+{
+ fn_map = new DefaultMap<Function*, NodeIdx>;
+ stack_prop = PROP_NONE;
+ desc_htable_size = 511;
+ desc_htable_nelem = 0;
+ descHT = new hash_node_t*[desc_htable_size];
+ for (int i = 0; i < desc_htable_size; i++)
+ descHT[i] = NULL;
+ pathMap = new CacheMap<uint64_t, NodeIdx>;
+ statsq = new Emsgqueue (NTXT ("statsq"));
+ warningq = new Emsgqueue (NTXT ("warningq"));
+ if (indxtype < 0)
+ {
+ Function *ftotal = dbeSession->get_Total_Function ();
+ if (pathTreeType == PATHTREE_INTERNAL_FUNCTREE)
+ total_obj = ftotal;
+ else
+ total_obj = ftotal->find_dbeinstr (0, 0);
+ VMode view_mode = dbev->get_view_mode ();
+ if (view_mode == VMODE_MACHINE)
+ stack_prop = PROP_MSTACK;
+ else if (view_mode == VMODE_EXPERT)
+ stack_prop = PROP_XSTACK;
+ else if (view_mode == VMODE_USER)
+ {
+ stack_prop = PROP_USTACK;
+ if (dbeSession->is_omp_available ()
+ && pathTreeType == PATHTREE_INTERNAL_OMP)
+ stack_prop = PROP_XSTACK;
+ }
+ }
+ else
+ {
+ total_obj = new IndexObject (indxtype, (uint64_t) - 2);
+ total_obj->set_name (dbe_strdup (NTXT ("<Total>")));
+ char *idxname = dbeSession->getIndexSpaceName (indxtype);
+ if (streq (idxname, NTXT ("OMP_preg")))
+ stack_prop = PROP_CPRID;
+ else if (streq (idxname, NTXT ("OMP_task")))
+ stack_prop = PROP_TSKID;
+ else
+ indx_expr = dbeSession->getIndexSpaceExpr (indxtype);
+ }
+ root_idx = new_Node (0, total_obj, false);
+ root = NODE_IDX (root_idx);
+}
+
+void
+PathTree::fini ()
+{
+ // For each node free its descendants vector
+ // and reset the node list of its function
+ for (long i = 1; i < nodes; i++)
+ {
+ Node *node = NODE_IDX (i);
+ if (node->descendants)
+ delete node->descendants;
+ }
+ nodes = 1; // don't use node 0
+
+ for (int i = 0; i < nslots; i++)
+ {
+ int **tmp = slots[i].mvals;
+ for (long j = 0; j < nchunks; j++)
+ delete[] tmp[j];
+ delete[] tmp;
+ }
+ delete[] slots;
+ slots = NULL;
+ nslots = 0;
+ delete fn_map;
+ fn_map = NULL;
+ delete pathMap;
+ pathMap = NULL;
+ destroy (depth_map);
+ depth_map = NULL;
+ if (indxtype >= 0)
+ delete total_obj;
+
+ for (int i = 0; i < desc_htable_size; i++)
+ {
+ hash_node_t *p = descHT[i];
+ while (p)
+ {
+ hash_node_t *p1 = p;
+ p = p->next;
+ delete p1;
+ }
+ }
+ delete[] descHT;
+ delete statsq;
+ delete warningq;
+ depth = 1;
+ dnodes = 0;
+ phaseIdx = -1;
+ nexps = 0;
+ status = 0;
+}
+
+PtreePhaseStatus
+PathTree::reset ()
+{
+ if (pathTreeType == PATHTREE_INTERNAL_FUNCTREE)
+ return NORMAL; // never process reset for ftree_internal.
+
+ if (dbeSession->is_omp_available () && dbev->get_view_mode () == VMODE_USER
+ && pathTreeType == PATHTREE_MAIN && ptree_internal == NULL)
+ ptree_internal = new PathTree (dbev, indxtype, PATHTREE_INTERNAL_OMP);
+
+ if (phaseIdx != dbev->getPhaseIdx ())
+ {
+ fini ();
+ init ();
+ phaseIdx = dbev->getPhaseIdx ();
+ ftree_needs_update = true;
+ }
+ for (; nexps < dbeSession->nexps (); nexps++)
+ {
+ ftree_needs_update = true;
+ if (add_experiment (nexps) == CANCELED)
+ return CANCELED;
+ }
+
+ // LIBRARY_VISIBILITY
+ if (dbev->isNewViewMode ())
+ dbev->resetNewViewMode ();
+ if (dbev->isShowHideChanged ())
+ dbev->resetShowHideChanged ();
+ return NORMAL;
+}
+
+int
+PathTree::allocate_slot (int id, ValueTag vtype)
+{
+
+ int i;
+ int slot_idx = find_slot (id);
+ if (slot_idx >= 0)
+ {
+ DBG (assert (slots[slot_idx].vtype == vtype));
+ return slot_idx;
+ }
+ slot_idx = nslots++;
+
+ Slot *old_slots = slots;
+ slots = new Slot[nslots];
+ for (i = 0; i < slot_idx; i++)
+ slots[i] = old_slots[i];
+ delete[] old_slots;
+
+ slots[slot_idx].id = id;
+ slots[slot_idx].vtype = vtype;
+ int **ip = new int*[nchunks];
+ for (i = 0; i < nchunks; i++)
+ ip[i] = NULL;
+ slots[slot_idx].mvals = ip;
+
+ return slot_idx;
+}
+
+void
+PathTree::allocate_slots (Slot *new_slots, int new_nslots)
+{
+ // duplicates new_slots
+
+ // if previously had more slots than currently requested, delete the data from those slots.
+ for (int i = new_nslots; i < nslots; i++)
+ {
+ int **tmp = slots[i].mvals;
+ for (long j = 0; j < nchunks; j++)
+ delete tmp[j];
+ delete tmp;
+ }
+ if (new_nslots == 0)
+ {
+ nslots = new_nslots;
+ delete[] slots;
+ slots = NULL;
+ return;
+ }
+
+ Slot *old_slots = slots;
+ slots = new Slot[new_nslots];
+ for (int i = 0; i < new_nslots; i++)
+ {
+ slots[i] = new_slots[i]; // pick up id and vtype
+ if (i < nslots)
+ slots[i].mvals = old_slots[i].mvals;
+ else
+ {
+ if (nchunks == 0)
+ slots[i].mvals = NULL;
+ else
+ {
+ int **ip = new int*[nchunks];
+ for (long j = 0; j < nchunks; j++)
+ ip[j] = NULL;
+ slots[i].mvals = ip;
+ }
+ }
+ }
+ nslots = new_nslots;
+ delete old_slots;
+}
+
+int
+PathTree::find_slot (int id)
+{
+ for (int i = 0; i < nslots; i++)
+ if (slots[i].id == id)
+ return i;
+ return -1;
+}
+
+PathTree::NodeIdx
+PathTree::new_Node (NodeIdx anc, Histable *instr, bool leaf)
+{
+ if (nodes >= nchunks * CHUNKSZ)
+ {
+ long idx = nchunks++;
+
+ // Reallocate Node chunk array
+ Node **old_chunks = chunks;
+ chunks = new Node*[nchunks];
+ for (long k = 0; k < idx; k++)
+ chunks[k] = old_chunks[k];
+ delete[] old_chunks;
+
+ // Reallocate metric value chunk arrays.
+ for (int i = 0; i < nslots; i++)
+ {
+ int **mvals = new int*[nchunks];
+ for (long k = 0; k < idx; k++)
+ {
+ mvals[k] = slots[i].mvals[k];
+ }
+ delete[] slots[i].mvals;
+ slots[i].mvals = mvals;
+ slots[i].mvals[idx] = NULL;
+ }
+
+ // Allocate new chunk for nodes.
+ // Note that we don't need to allocate new chunks
+ // for metric values at this point as we rely on
+ // lazy allocation.
+ //
+ allocate_chunk (chunks, idx);
+ }
+ NodeIdx node_idx = nodes++;
+ Node *node = NODE_IDX (node_idx);
+ node->ancestor = anc;
+ node->descendants = leaf ? (Vector<NodeIdx>*)NULL : new Vector<NodeIdx>(2);
+ node->instr = instr;
+ Function *func = (Function*) (instr->convertto (Histable::FUNCTION));
+ node->funclist = fn_map->get (func);
+ fn_map->put (func, node_idx);
+ return node_idx;
+}
+
+PathTree::NodeIdx
+PathTree::find_path (Experiment *exp, DataView *dview, long recIdx)
+{
+ if (indx_expr != NULL)
+ {
+ Expression::Context ctx (dbev, exp, dview, recIdx);
+ uint64_t idx = indx_expr->eval (&ctx);
+ Histable *cur_obj = dbeSession->createIndexObject (indxtype, idx);
+ cur_obj->set_name_from_context (&ctx);
+ NodeIdx dsc_idx = find_in_desc_htable (root_idx, cur_obj, true);
+ depth = 2;
+ return dsc_idx;
+ }
+
+ bool showAll = dbev->isShowAll ();
+ int t_stack_prop = stack_prop;
+ void *stackId = dview->getObjValue (t_stack_prop, recIdx);
+ NodeIdx node_idx;
+ if (stackId != NULL)
+ {
+ // pathMap does not work with NULL key
+ node_idx = pathMap->get ((uint64_t) stackId);
+ if (node_idx != 0)
+ return node_idx;
+ }
+ Vector<Histable*> *stack = (Vector<Histable*>*)CallStack::getStackPCs (stackId, !showAll);
+ int stack_size = stack->size ();
+ if (stack_size == 0)
+ return root_idx;
+
+ node_idx = root_idx;
+ int thisdepth = 1;
+
+ for (int i = stack_size - 1; i >= 0; i--)
+ {
+ bool leaf = (i == 0);
+ Histable *cur_addr = stack->fetch (i);
+
+ // bail out of loop if load object API-only is set
+ // and this is not the top frame
+ // This is now done in HSTACK if hide is set
+
+ Function *func = (Function*) cur_addr->convertto (Histable::FUNCTION);
+ if (func != NULL)
+ {
+ Module *mod = func->module;
+ LoadObject *lo = mod->loadobject;
+ int segx = lo->seg_idx;
+ if (showAll && dbev->get_lo_expand (segx) == LIBEX_API
+ && i != stack_size - 1)
+ leaf = true;
+ }
+
+ NodeIdx dsc_idx = find_desc_node (node_idx, cur_addr, leaf);
+ thisdepth++;
+ node_idx = dsc_idx;
+
+ // LIBEX_API processing might have set leaf to true
+ if (leaf)
+ break;
+ }
+ if (thisdepth > depth)
+ depth = thisdepth;
+ delete stack;
+ pathMap->put ((uint64_t) stackId, node_idx);
+ return node_idx;
+}
+
+static int
+desc_node_comp (const void *s1, const void *s2, const void *ptree)
+{
+ PathTree::NodeIdx t1, t2;
+ t1 = *(PathTree::NodeIdx *)s1;
+ t2 = *(PathTree::NodeIdx *)s2;
+ PathTree* Ptree = (PathTree *) ptree;
+ PathTree::Node *n1 = Ptree->NODE_IDX (t1);
+ PathTree::Node *n2 = Ptree->NODE_IDX (t2);
+ Histable *d1 = n1->instr;
+ Histable *d2 = n2->instr;
+ if (d1->id < d2->id)
+ return -1;
+ else if (d1->id > d2->id)
+ return +1;
+ else
+ return 0;
+}
+
+PathTree::NodeIdx
+PathTree::find_in_desc_htable (NodeIdx node_idx, Histable *instr, bool leaf)
+{
+ unsigned int hash_code = (unsigned int) instr->id % desc_htable_size;
+ Node *node = NODE_IDX (node_idx);
+ hash_node_t *p = NULL;
+ for (p = descHT[hash_code]; p; p = p->next)
+ {
+ Node *dsc = NODE_IDX (p->nd);
+ Histable *dinstr = dsc->instr;
+ if (dinstr->id == instr->id && leaf == IS_LEAF (dsc))
+ return p->nd;
+ }
+ // Not found
+ NodeIdx dsc_idx = new_Node (node_idx, instr, leaf);
+ node->descendants->append (dsc_idx);
+ p = new hash_node_t ();
+ p->nd = dsc_idx;
+ p->next = descHT[hash_code];
+ descHT[hash_code] = p;
+ desc_htable_nelem++;
+
+ // time to resize
+ if (desc_htable_nelem == desc_htable_size)
+ {
+ int old_htable_size = desc_htable_size;
+ desc_htable_size = old_htable_size * 2 + 1;
+ hash_node_t **old_htable = descHT;
+ descHT = new hash_node_t*[desc_htable_size];
+ for (int i = 0; i < desc_htable_size; i++)
+ descHT[i] = NULL;
+
+ for (int i = 0; i < old_htable_size; i++)
+ if (old_htable[i] != NULL)
+ {
+ hash_node *old_p;
+ hash_node_t *hash_p = old_htable[i];
+ while (hash_p != NULL)
+ {
+ hash_node_t *new_p = new hash_node_t ();
+ new_p->nd = hash_p->nd;
+ Node *dnode = NODE_IDX (hash_p->nd);
+ Histable *dnode_instr = dnode->instr;
+ hash_code = (unsigned int) dnode_instr->id % desc_htable_size;
+ new_p->next = descHT[hash_code];
+ descHT[hash_code] = new_p;
+ old_p = hash_p;
+ hash_p = hash_p->next;
+ delete old_p;
+ }
+ }
+ delete[] old_htable;
+ }
+ return dsc_idx;
+}
+
+PathTree::NodeIdx
+PathTree::find_desc_node (NodeIdx node_idx, Histable *instr, bool leaf)
+{
+ // Binary search. All nodes are ordered by Histable::id.
+
+ // We have a special case when two nodes with the same
+ // id value may co-exist: one representing a leaf node and
+ // another one representing a call site.
+ Node *node = NODE_IDX (node_idx);
+ int left = 0;
+ int right = NUM_DESCENDANTS (node) - 1;
+ while (left <= right)
+ {
+ int index = (left + right) / 2;
+ NodeIdx dsc_idx = node->descendants->fetch (index);
+ Node *dsc = NODE_IDX (dsc_idx);
+ Histable *dinstr = dsc->instr;
+ if (instr->id < dinstr->id)
+ right = index - 1;
+ else if (instr->id > dinstr->id)
+ left = index + 1;
+ else if (leaf == IS_LEAF (dsc))
+ return dsc_idx;
+ else if (leaf)
+ right = index - 1;
+ else
+ left = index + 1;
+ }
+
+ // None was found. Create one.
+ NodeIdx dsc_idx = new_Node (node_idx, instr, leaf);
+ node->descendants->insert (left, dsc_idx);
+ return dsc_idx;
+}
+
+PtreePhaseStatus
+PathTree::process_packets (Experiment *exp, DataView *packets, int data_type)
+{
+ Expression::Context ctx (dbev, exp);
+ char *progress_bar_msg = NULL;
+ int progress_bar_percent = -1;
+
+ Vector<BaseMetric*> *mlist = dbev->get_all_reg_metrics ();
+ Vector<BaseMetric*> mlist2;
+ StringBuilder stb;
+ for (int midx = 0, mlist_sz = mlist->size (); midx < mlist_sz; ++midx)
+ {
+ BaseMetric *mtr = mlist->fetch (midx);
+ if (mtr->get_packet_type () == data_type &&
+ (mtr->get_expr () == NULL || mtr->get_expr ()->passes (&ctx)))
+ {
+ Hwcentry *hwc = mtr->get_hw_ctr ();
+ if (hwc)
+ {
+ stb.setLength (0);
+ // XXX this should be done at metric registration
+ Collection_params *col_params = exp->get_params ();
+ for (int i = 0; i < MAX_HWCOUNT; i++)
+ {
+ // We may have duplicate counters in col_params,
+ // check for all (see 5081284).
+ if (dbe_strcmp (hwc->name, col_params->hw_aux_name[i]) == 0)
+ {
+ if (stb.length () != 0)
+ stb.append (NTXT ("||"));
+ stb.append (NTXT ("HWCTAG=="));
+ stb.append (i);
+ }
+ }
+ if (stb.length () == 0)
+ continue;
+ stb.append (NTXT ("&& ((HWCINT & "));
+ stb.append ((long long) HWCVAL_ERR_FLAG);
+ stb.append (NTXT (")==0)"));
+ char *s = stb.toString ();
+ mtr->set_cond_spec (s);
+ free (s);
+ }
+ ValueTag vtype = mtr->get_vtype ();
+ switch (vtype)
+ {
+ case VT_INT:
+ case VT_ULLONG:
+ case VT_LLONG:
+ break; // nothing to do
+ default:
+ vtype = VT_ULLONG; // ym: not sure when this would happen
+ break;
+ }
+ allocate_slot (mtr->get_id (), vtype);
+ mlist2.append (mtr);
+ }
+ }
+
+ Slot **mslots = new Slot*[mlist2.size ()];
+ for (int midx = 0, mlist_sz = mlist2.size (); midx < mlist_sz; ++midx)
+ {
+ BaseMetric *mtr = mlist2.fetch (midx);
+ int id = mtr->get_id ();
+ int slot_ind = find_slot (id);
+ mslots[midx] = SLOT_IDX (slot_ind);
+ }
+
+ for (long i = 0, packets_sz = packets->getSize (); i < packets_sz; ++i)
+ {
+ if (dbeSession->is_interactive ())
+ {
+ if (NULL == progress_bar_msg)
+ progress_bar_msg = dbe_sprintf (GTXT ("Processing Experiment: %s"),
+ get_basename (exp->get_expt_name ()));
+ int val = (int) (100 * i / packets_sz);
+ if (val > progress_bar_percent)
+ {
+ progress_bar_percent += 10;
+ if (theApplication->set_progress (val, progress_bar_msg)
+ && cancel_ok)
+ {
+ delete[] mslots;
+ return CANCELED;
+ }
+ }
+ }
+
+ NodeIdx path_idx = 0;
+ ctx.put (packets, i);
+
+ for (int midx = 0, mlist_sz = mlist2.size (); midx < mlist_sz; ++midx)
+ {
+ BaseMetric *mtr = mlist2.fetch (midx);
+ if (mtr->get_cond () != NULL && !mtr->get_cond ()->passes (&ctx))
+ continue;
+
+ int64_t mval = mtr->get_val ()->eval (&ctx);
+ if (mval == 0)
+ continue;
+ if (path_idx == 0)
+ path_idx = find_path (exp, packets, i);
+ NodeIdx node_idx = path_idx;
+ Slot *mslot = mslots[midx];
+ while (node_idx)
+ {
+ INCREMENT_METRIC (mslot, node_idx, mval);
+ node_idx = NODE_IDX (node_idx)->ancestor;
+ }
+ }
+ }
+ if (dbeSession->is_interactive ())
+ free (progress_bar_msg);
+ delete[] mslots;
+ if (indx_expr != NULL)
+ root->descendants->sort ((CompareFunc) desc_node_comp, this);
+ return NORMAL;
+}
+
+DataView *
+PathTree::get_filtered_events (int exp_index, int data_type)
+{
+ if (indx_expr != NULL)
+ {
+ IndexObjType_t *indexObj = dbeSession->getIndexSpace (indxtype);
+ if (indexObj->memObj && data_type != DATA_HWC)
+ return NULL;
+ }
+ return dbev->get_filtered_events (exp_index, data_type);
+}
+
+PtreePhaseStatus
+PathTree::add_experiment (int exp_index)
+{
+ StringBuilder sb;
+ char *expt_name;
+ char *base_name;
+ Emsg *m;
+ Experiment *experiment = dbeSession->get_exp (exp_index);
+ if (experiment->broken != 0)
+ return NORMAL;
+ status = 0;
+ expt_name = experiment->get_expt_name ();
+ base_name = get_basename (expt_name);
+
+ hrtime_t starttime = gethrtime ();
+ hrtime_t startvtime = gethrvtime ();
+
+ // Experiment::getEndTime was initially implemented as
+ // returning exp->last_event. To preserve the semantics
+ // new Experiment::getLastEvent() is used here.
+ hrtime_t tot_time = experiment->getLastEvent () - experiment->getStartTime ();
+
+ if (!dbev->isShowAll () && (dbev->isShowHideChanged ()
+ || dbev->isNewViewMode ()))
+ experiment->resetShowHideStack ();
+
+ // To report experiment index to the user,
+ // start numeration from 1, not 0
+ sb.sprintf (GTXT ("PathTree processing experiment %d (`%s'); duration %lld.%06lld"),
+ exp_index + 1, base_name,
+ tot_time / NANOSEC, (tot_time % NANOSEC / 1000));
+ m = new Emsg (CMSG_COMMENT, sb);
+ statsq->append (m);
+
+ DataView *prof_packet = get_filtered_events (exp_index, DATA_CLOCK);
+ if (prof_packet && prof_packet->getSize () > 0)
+ {
+ if (process_packets (experiment, prof_packet, DATA_CLOCK) == CANCELED)
+ return CANCELED;
+ long clock_cnt = prof_packet->getSize ();
+ double clock_rate;
+ if (tot_time != 0)
+ clock_rate = (double) clock_cnt / (double) tot_time * (double) NANOSEC;
+ else
+ clock_rate = (double) 0.;
+ if (experiment->timelineavail)
+ sb.sprintf (GTXT (" Processed %ld clock-profile events (%3.2f/sec.)"),
+ clock_cnt, clock_rate);
+ else
+ sb.sprintf (GTXT (" Processed %ld clock-profile events"), clock_cnt);
+ m = new Emsg (CMSG_COMMENT, sb);
+ statsq->append (m);
+
+ // check for statistical validity
+ if ((experiment->timelineavail == true)
+ && !dbev->get_filter_active () && (clock_cnt < MIN_PROF_CNT))
+ {
+ sb.sprintf (GTXT ("WARNING: too few clock-profile events (%ld) in experiment %d (`%s') for statistical validity"),
+ clock_cnt, exp_index + 1, base_name);
+ m = new Emsg (CMSG_COMMENT, sb);
+ statsq->append (m);
+ }
+ }
+
+ DataView *sync_packet = get_filtered_events (exp_index, DATA_SYNCH);
+ if (sync_packet && sync_packet->getSize () > 0)
+ {
+ if (process_packets (experiment, sync_packet, DATA_SYNCH) == CANCELED)
+ return CANCELED;
+ long sync_cnt = sync_packet->getSize ();
+ sb.sprintf (GTXT (" Processed %ld synctrace events"), sync_cnt);
+ m = new Emsg (CMSG_COMMENT, sb);
+ statsq->append (m);
+ }
+
+ DataView *iotrace_packet = get_filtered_events (exp_index, DATA_IOTRACE);
+ if (iotrace_packet && iotrace_packet->getSize () > 0)
+ {
+ if (process_packets (experiment, iotrace_packet, DATA_IOTRACE) == CANCELED)
+ return CANCELED;
+ long iotrace_cnt = iotrace_packet->getSize ();
+ sb.sprintf (GTXT (" Processed %ld IO trace events"), iotrace_cnt);
+ m = new Emsg (CMSG_COMMENT, sb);
+ statsq->append (m);
+ }
+
+ DataView *hwc_packet = get_filtered_events (exp_index, DATA_HWC);
+ if (hwc_packet && hwc_packet->getSize () > 0)
+ {
+ if (process_packets (experiment, hwc_packet, DATA_HWC) == CANCELED)
+ return CANCELED;
+ long hwc_cnt = hwc_packet->getSize ();
+ double hwc_rate = (double) hwc_cnt / (double) tot_time * (double) NANOSEC;
+ if (experiment->timelineavail)
+ sb.sprintf (GTXT (" Processed %ld hwc-profile events (%3.2f/sec.)"),
+ hwc_cnt, hwc_rate);
+ else
+ sb.sprintf (GTXT (" Processed %ld hwc-profile events"), hwc_cnt);
+ m = new Emsg (CMSG_COMMENT, sb);
+ statsq->append (m);
+
+ // check for statistical validity
+ if (experiment->timelineavail && !dbev->get_filter_active () && (hwc_cnt < MIN_PROF_CNT))
+ {
+ sb.sprintf (GTXT ("WARNING: too few HW counter profile events (%ld) in experiment %d (`%s') for statistical validity"),
+ hwc_cnt, exp_index + 1, base_name);
+ m = new Emsg (CMSG_COMMENT, sb);
+ statsq->append (m);
+ }
+ }
+
+ DataView *heap_packet = get_filtered_events (exp_index, DATA_HEAP);
+ if (heap_packet && heap_packet->getSize () > 0)
+ {
+ if (process_packets (experiment, heap_packet, DATA_HEAP) == CANCELED)
+ return CANCELED;
+ long heap_cnt = heap_packet->getSize ();
+ sb.sprintf (GTXT (" Processed %ld heaptrace events"), heap_cnt);
+ m = new Emsg (CMSG_COMMENT, sb);
+ statsq->append (m);
+ }
+
+ DataView *race_packet = get_filtered_events (exp_index, DATA_RACE);
+ if (race_packet && race_packet->getSize () > 0)
+ {
+ if (process_packets (experiment, race_packet, DATA_RACE) == CANCELED)
+ return CANCELED;
+ long race_cnt = race_packet->getSize ();
+ sb.sprintf (GTXT (" Processed %ld race access events"), race_cnt);
+ m = new Emsg (CMSG_COMMENT, sb);
+ statsq->append (m);
+ }
+
+ DataView *deadlock_packet = get_filtered_events (exp_index, DATA_DLCK);
+ if (deadlock_packet && deadlock_packet->getSize () > 0)
+ {
+ if (process_packets (experiment, deadlock_packet, DATA_DLCK) == CANCELED)
+ return CANCELED;
+ long race_cnt = deadlock_packet->getSize ();
+ sb.sprintf (GTXT (" Processed %ld race access events"), race_cnt);
+ m = new Emsg (CMSG_COMMENT, sb);
+ statsq->append (m);
+ }
+
+ hrtime_t pathtime = gethrtime () - starttime;
+ hrtime_t pathvtime = gethrvtime () - startvtime;
+ sb.sprintf (GTXT ("PathTree time = %lld.%06lld CPU-time %lld.%06lld\n"),
+ pathtime / NANOSEC, (pathtime % NANOSEC) / 1000,
+ pathvtime / NANOSEC, (pathvtime % NANOSEC) / 1000);
+ m = new Emsg (CMSG_COMMENT, sb);
+ statsq->append (m);
+ return NORMAL;
+}
+
+Hist_data *
+PathTree::compute_metrics (MetricList *mlist, Histable::Type type,
+ Hist_data::Mode mode, Vector<Histable*> *objs,
+ Histable *context, Vector<Histable*> *sel_objs,
+ PtreeComputeOption computeOpt)
+{
+ VMode view_mode = dbev->get_view_mode ();
+
+ // For displaying disassembly correctly in user mode with openmp
+ if (ptree_internal != NULL &&
+ (view_mode == VMODE_EXPERT ||
+ (view_mode == VMODE_USER && (type == Histable::INSTR
+ || (dbev->isOmpDisMode ()
+ && type == Histable::FUNCTION
+ && mode == Hist_data::CALLEES
+ && computeOpt == COMPUTEOPT_OMP_CALLEE))
+ )))
+ return ptree_internal->compute_metrics (mlist, type, mode, objs, context,
+ sel_objs);
+
+ PtreePhaseStatus resetStatus = reset ();
+
+ hist_data = new Hist_data (mlist, type, mode);
+ int nmetrics = mlist->get_items ()->size ();
+ int sort_ind = -1;
+ Hist_data::HistItem *hi;
+ int index;
+
+ if (status != 0 || resetStatus == CANCELED)
+ return hist_data;
+
+ hist_data->set_status (Hist_data::SUCCESS);
+ if (dbeSession->is_interactive () && mode != Hist_data::CALLEES)
+ theApplication->set_progress (0, GTXT ("Constructing Metrics"));
+
+ xlate = new int[nmetrics];
+ for (int mind = 0; mind < nmetrics; mind++)
+ {
+ Metric *mtr = mlist->get (mind);
+ xlate[mind] = find_slot (mtr->get_id ());
+ }
+
+ // Compute dynamic metrics
+ obj_list = new Histable*[depth];
+ if ((type == Histable::LINE || type == Histable::INSTR)
+ && mode == Hist_data::CALLERS)
+ node_list = new Node*[depth];
+ percent = 0;
+ ndone = 0;
+ if (mode == Hist_data::MODL)
+ {
+ Histable *obj = objs && objs->size () > 0 ? objs->fetch (0) : NULL;
+ if (obj != NULL)
+ {
+ switch (obj->get_type ())
+ {
+ case Histable::FUNCTION:
+ {
+ Vector<Function*> *funclist = new Vector<Function*>;
+ funclist->append ((Function*) obj);
+ get_metrics (funclist, context);
+ delete funclist;
+ break;
+ }
+ case Histable::MODULE:
+ {
+ Vector<Histable*> *comparableModules = obj->get_comparable_objs ();
+ if (comparableModules != NULL)
+ {
+ Vector<Function*> *functions = new Vector<Function*>;
+ for (int i = 0; i < comparableModules->size (); i++)
+ {
+ Module *mod = (Module*) comparableModules->fetch (i);
+ if (mod)
+ {
+ bool found = false;
+ for (int i1 = 0; i1 < i; i1++)
+ {
+ if (mod == comparableModules->fetch (i1))
+ {
+ found = true;
+ break;
+ }
+ }
+ if (!found)
+ functions->addAll (mod->functions);
+ }
+ }
+ get_metrics (functions, context);
+ delete functions;
+ }
+ else
+ get_metrics (((Module*) obj)->functions, context);
+ break;
+ }
+ case Histable::SOURCEFILE:
+ get_metrics (((SourceFile *) obj)->get_functions (), context);
+ break;
+ default:
+ DBG (assert (0));
+ }
+ }
+ }
+ else if (mode == Hist_data::CALLERS)
+ {
+ if (objs && objs->size () > 0)
+ get_clr_metrics (objs);
+ }
+ else if (mode == Hist_data::CALLEES)
+ {
+ if (objs && objs->size () > 0)
+ get_cle_metrics (objs);
+ else // Special case: get root
+ get_cle_metrics (NULL);
+ }
+ else if (mode == Hist_data::SELF)
+ {
+ if (objs->size () == 1)
+ {
+ Histable *obj = objs->fetch (0);
+ if (obj != NULL)
+ {
+ if (obj->get_type () == Histable::LINE)
+ {
+ Vector<Function*> *funclist = new Vector<Function*>;
+ for (DbeLine *dl = (DbeLine*) obj->convertto (Histable::LINE);
+ dl; dl = dl->dbeline_func_next)
+ if (dl->func)
+ funclist->append (dl->func);
+
+ get_self_metrics (obj, funclist, sel_objs);
+ delete funclist;
+ }
+ else if (obj->get_type () == Histable::FUNCTION
+ || obj->get_type () == Histable::INSTR)
+ {
+ // Use shortcut for functions and oth.
+ if (context)
+ {
+ Vector<Function*> *funclist = NULL;
+ if (context->get_type () == Histable::MODULE)
+ funclist = ((Module*) context)->functions->copy ();
+ else
+ {
+ funclist = new Vector<Function*>;
+ funclist->append ((Function*) context);
+ }
+ get_self_metrics (obj, funclist, sel_objs);
+ delete funclist;
+ }
+ else
+ get_self_metrics (objs);
+ }
+ else
+ get_self_metrics (objs);
+ }
+ }
+ else
+ get_self_metrics (objs);
+ }
+ else // Hist_data::ALL
+ get_metrics (root_idx, 0);
+
+ delete[] obj_list;
+ if ((type == Histable::LINE || type == Histable::INSTR)
+ && mode == Hist_data::CALLERS)
+ delete[] node_list;
+
+ // Postprocess; find total
+ for (long mind = 0, sz = mlist->get_items ()->size (); mind < sz; mind++)
+ {
+ Metric *mtr = mlist->get_items ()->get (mind);
+ Metric::SubType subtype = mtr->get_subtype ();
+ ValueTag vtype = mtr->get_vtype ();
+ hist_data->total->value[mind].tag = vtype;
+
+ switch (vtype)
+ {
+ // ignoring the following cases (why?)
+ case VT_SHORT:
+ case VT_FLOAT:
+ case VT_HRTIME:
+ case VT_LABEL:
+ case VT_ADDRESS:
+ case VT_OFFSET:
+ break;
+
+ case VT_INT:
+ // Calculate total as the sum of all values in hist_data for
+ // ATTRIBUTED metrics only. For all others, use root node values.
+ //
+ if ((mode == Hist_data::CALLERS || mode == Hist_data::CALLEES)
+ && subtype == Metric::ATTRIBUTED)
+ {
+ hist_data->total->value[mind].i = 0;
+ Vec_loop (Hist_data::HistItem*, hist_data->hist_items, index, hi)
+ {
+ hist_data->total->value[mind].i += hi->value[mind].i;
+ }
+ if (mode == Hist_data::CALLEES)
+ hist_data->total->value[mind].i += hist_data->gprof_item->value[mind].i;
+ }
+ else if (xlate[mind] != -1)
+ ASN_METRIC_VAL (hist_data->total->value[mind], slots[xlate[mind]],
+ root_idx);
+ break;
+
+ case VT_LLONG:
+ Vec_loop (Hist_data::HistItem*, hist_data->hist_items, index, hi)
+ {
+ hi->value[mind].tag = vtype;
+ }
+
+ if ((mode == Hist_data::CALLERS || mode == Hist_data::CALLEES)
+ && subtype == Metric::ATTRIBUTED)
+ {
+ hist_data->total->value[mind].ll = 0;
+ Vec_loop (Hist_data::HistItem*, hist_data->hist_items, index, hi)
+ {
+ hist_data->total->value[mind].ll += hi->value[mind].ll;
+ }
+ if (mode == Hist_data::CALLEES)
+ hist_data->total->value[mind].ll += hist_data->gprof_item->value[mind].ll;
+ }
+ else if (xlate[mind] != -1)
+ ASN_METRIC_VAL (hist_data->total->value[mind], slots[xlate[mind]], root_idx);
+ break;
+
+ case VT_ULLONG:
+ Vec_loop (Hist_data::HistItem*, hist_data->hist_items, index, hi)
+ {
+ hi->value[mind].tag = vtype;
+ }
+ if ((mode == Hist_data::CALLERS || mode == Hist_data::CALLEES)
+ && subtype == Metric::ATTRIBUTED)
+ {
+ hist_data->total->value[mind].ull = 0;
+ Vec_loop (Hist_data::HistItem*, hist_data->hist_items, index, hi)
+ {
+ hist_data->total->value[mind].ull += hi->value[mind].ull;
+ }
+ if (mode == Hist_data::CALLEES)
+ hist_data->total->value[mind].ull += hist_data->gprof_item->value[mind].ull;
+ }
+ else if (xlate[mind] != -1)
+ ASN_METRIC_VAL (hist_data->total->value[mind], slots[xlate[mind]], root_idx);
+ break;
+
+ case VT_DOUBLE:
+ double prec = mtr->get_precision ();
+ ValueTag vt = (xlate[mind] != -1) ? slots[xlate[mind]].vtype : VT_INT;
+ Vec_loop (Hist_data::HistItem*, hist_data->hist_items, index, hi)
+ {
+ double val = (vt == VT_LLONG ? hi->value[mind].ll :
+ (vt == VT_ULLONG ? hi->value[mind].ull
+ : hi->value[mind].i));
+ hi->value[mind].tag = vtype;
+ hi->value[mind].d = val / prec;
+ }
+
+ if ((mode == Hist_data::CALLERS || mode == Hist_data::CALLEES)
+ && subtype == Metric::ATTRIBUTED)
+ {
+ hist_data->total->value[mind].d = 0.0;
+ Vec_loop (Hist_data::HistItem*, hist_data->hist_items, index, hi)
+ {
+ hist_data->total->value[mind].d += hi->value[mind].d;
+ }
+ if (mode == Hist_data::CALLEES)
+ hist_data->total->value[mind].d +=
+ (double) (vt == VT_LLONG ? hist_data->gprof_item->value[mind].ll :
+ (vt == VT_ULLONG ? hist_data->gprof_item->value[mind].ull :
+ hist_data->gprof_item->value[mind].i)) / prec;
+ }
+ else if (xlate[mind] != -1)
+ {
+ TValue& total = hist_data->total->value[mind];
+ ASN_METRIC_VAL (total, slots[xlate[mind]], root_idx);
+ double val = (vt == VT_LLONG ? total.ll :
+ (vt == VT_ULLONG ? total.ll : total.i));
+ total.d = val / prec;
+ }
+ break;
+ }
+ }
+ delete[] xlate;
+
+ // Determine by which metric to sort if any
+ bool rev_sort = mlist->get_sort_rev ();
+ for (long mind = 0, sz = mlist->get_items ()->size (); mind < sz; mind++)
+ {
+ Metric *mtr = mlist->get_items ()->get (mind);
+ if (mlist->get_sort_ref_index () == mind)
+ sort_ind = mind;
+
+ switch (mtr->get_type ())
+ {
+ case BaseMetric::SIZES:
+ Vec_loop (Hist_data::HistItem *, hist_data->hist_items, index, hi)
+ {
+ Histable *h = mtr->get_comparable_obj (hi->obj);
+ hi->value[mind].tag = VT_LLONG;
+ hi->value[mind].ll = h ? h->get_size () : 0;
+ }
+ break;
+ case BaseMetric::ADDRESS:
+ Vec_loop (Hist_data::HistItem *, hist_data->hist_items, index, hi)
+ {
+ Histable *h = mtr->get_comparable_obj (hi->obj);
+ hi->value[mind].tag = VT_ADDRESS;
+ hi->value[mind].ll = h ? h->get_addr () : 0;
+ }
+ break;
+ case BaseMetric::DERIVED:
+ {
+ Definition *def = mtr->get_definition ();
+ long *map = def->get_map ();
+ for (long i1 = 0, sz1 = hist_data->hist_items->size (); i1 < sz1; i1++)
+ {
+ /* Hist_data::HistItem * */hi = hist_data->hist_items->get (i1);
+ hi->value[mind].tag = VT_DOUBLE;
+ hi->value[mind].d = def->eval (map, hi->value);
+ }
+ hist_data->total->value[mind].tag = VT_DOUBLE;
+ hist_data->total->value[mind].d = def->eval (map, hist_data->total->value);
+ }
+ break;
+ default:
+ break;
+ }
+ }
+
+ hist_data->sort (sort_ind, rev_sort);
+ hist_data->compute_minmax ();
+ if (dbeSession->is_interactive () && mode != Hist_data::CALLERS)
+ theApplication->set_progress (0, GTXT (""));
+
+#if DEBUG_FTREE
+ if (ftree_hist_data)
+ {
+ bool matches = ftree_debug_match_hist_data (hist_data, ftree_hist_data);
+ if (!matches)
+ assert (false);
+ delete hist_data;
+ hist_data = ftree_hist_data; // return the debug version
+ }
+#endif
+ return hist_data;
+}
+
+#if DEBUG_FTREE
+bool
+PathTree::ftree_debug_match_hist_data (Hist_data *data /* ref */,
+ Hist_data *data_tmp)
+{
+ if (data->get_status () != Hist_data::SUCCESS)
+ {
+ DBG (assert (false));
+ return false;
+ }
+ if (data == NULL && data != data_tmp)
+ {
+ DBG (assert (false));
+ return false;
+ }
+
+ MetricList *mlist;
+ mlist = data->get_metric_list ();
+ MetricList *mlist_tmp;
+ mlist_tmp = data_tmp->get_metric_list ();
+ if (mlist->size () != mlist_tmp->size ())
+ {
+ DBG (assert (false));
+ return false;
+ }
+
+ // Get table size: count visible metrics
+ int nitems = data->size ();
+ if (data->size () != data_tmp->size ())
+ {
+ DBG (assert (false));
+ return false;
+ }
+
+ for (int i = 0; i < nitems; ++i)
+ {
+ Hist_data::HistItem *item = data->fetch (i);
+ Hist_data::HistItem *item_tmp = data_tmp->fetch (i);
+ if (item->obj->id != item_tmp->obj->id)
+ {
+ DBG (assert (false));
+ return false;
+ }
+ }
+
+ for (long i = 0, sz = mlist->size (); i < sz; i++)
+ {
+ long met_ind = i;
+ Metric *mitem = mlist->get (i);
+ Metric *mitem_tmp = mlist_tmp->get (i);
+
+ if (mitem->get_id () != mitem_tmp->get_id ())
+ {
+ DBG (assert (false));
+ return false;
+ }
+ if (mitem->get_visbits () != mitem_tmp->get_visbits ())
+ {
+ DBG (assert (false));
+ return false;
+ }
+ if (mitem->get_vtype () != mitem_tmp->get_vtype ())
+ {
+ DBG (assert (false));
+ return false;
+ }
+
+ if (!mitem->is_visible () && !mitem->is_tvisible ()
+ && !mitem->is_pvisible ())
+ continue;
+ // table->append(dbeGetTableDataOneColumn(data, i));
+ for (long row = 0, sz_row = data->size (); row < sz_row; row++)
+ {
+ Metric *m = mitem;
+ TValue res;
+ TValue res_tmp;
+ TValue *v = data->get_value (&res, met_ind, row);
+ TValue *v_tmp = data_tmp->get_value (&res_tmp, met_ind, row);
+ if ((m->get_visbits () & VAL_RATIO) != 0)
+ {
+ if (v->tag != VT_LABEL)
+ {
+ if (v->to_double () != v_tmp->to_double ())
+ {
+ DBG (assert (false));
+ return false;
+ }
+ }
+ continue;
+ }
+ switch (m->get_vtype ())
+ {
+ case VT_DOUBLE:
+ {
+ double diff = v->d - v_tmp->d;
+ if (diff < 0) diff = -diff;
+ if (diff > 0.0001)
+ {
+ DBG (assert (false));
+ return false;
+ }
+ else
+ DBG (assert (true));
+ break;
+ }
+ case VT_INT:
+ if (v->i != v_tmp->i)
+ {
+ DBG (assert (false));
+ return false;
+ }
+ break;
+ case VT_ULLONG:
+ case VT_LLONG:
+ case VT_ADDRESS:
+ if (v->ll != v_tmp->ll)
+ {
+ DBG (assert (false));
+ return false;
+ }
+ break;
+
+ case VT_LABEL:
+ if (dbe_strcmp (v->l, v_tmp->l))
+ {
+ DBG (assert (false));
+ return false;
+ }
+ break;
+ default:
+ DBG (assert (false));
+ return false;
+ }
+ }
+ }
+ return true;
+}
+#endif
+
+Histable *
+PathTree::get_hist_func_obj (Node *node)
+{
+ LoadObject *lo;
+ Function *func;
+ func = (Function*) (node->instr->convertto (Histable::FUNCTION));
+ // LIBRARY VISIBILITY
+ lo = func->module->loadobject;
+ if (dbev->get_lo_expand (lo->seg_idx) == LIBEX_HIDE)
+ return lo->get_hide_function ();
+ return get_compare_obj (func);
+}
+
+Histable *
+PathTree::get_hist_obj (Node *node, Histable* context)
+{
+ LoadObject *lo;
+ Function *func;
+ switch (hist_data->type)
+ {
+ case Histable::INSTR:
+ if (hist_data->mode == Hist_data::MODL)
+ {
+ if (node->instr->get_type () != Histable::INSTR)
+ return NULL;
+ }
+ else
+ {
+ // LIBRARY VISIBILITY
+ func = (Function*) (node->instr->convertto (Histable::FUNCTION));
+ lo = func->module->loadobject;
+ if (dbev->get_lo_expand (lo->seg_idx) == LIBEX_HIDE)
+ return lo->get_hide_function ();
+ }
+ return node->instr;
+
+ case Histable::LINE:
+ if (hist_data->mode != Hist_data::MODL)
+ {
+ func = (Function*) (node->instr->convertto (Histable::FUNCTION));
+ lo = func->module->loadobject;
+ // LIBRARY VISIBILITY
+ if (dbev->get_lo_expand (lo->seg_idx) == LIBEX_HIDE)
+ return lo->get_hide_function ();
+ }
+ // For openmp user mode - the stack is already made with dbelines,
+ // no need to convert it
+ if (node->instr->get_type () == Histable::LINE)
+ return node->instr;
+ return node->instr->convertto (Histable::LINE, context);
+
+ case Histable::FUNCTION:
+ if (pathTreeType == PATHTREE_INTERNAL_FUNCTREE && node->ancestor != 0)
+ func = (Function*) node->instr;
+ else
+ func = (Function*) (node->instr->convertto (Histable::FUNCTION));
+ lo = func->module->loadobject;
+ // LIBRARY VISIBILITY
+ if (dbev->get_lo_expand (lo->seg_idx) == LIBEX_HIDE)
+ return lo->get_hide_function ();
+ return get_compare_obj (func);
+ case Histable::MODULE:
+ func = (Function*) (node->instr->convertto (Histable::FUNCTION));
+ return func->module;
+ case Histable::LOADOBJECT:
+ func = (Function*) (node->instr->convertto (Histable::FUNCTION));
+ return func->module->loadobject;
+ case Histable::INDEXOBJ:
+ case Histable::MEMOBJ:
+ return node->instr;
+ default:
+ DBG (assert (0));
+ }
+ return NULL;
+}
+
+Histable *
+PathTree::get_compare_obj (Histable *obj)
+{
+ if (obj && dbev->comparingExperiments ())
+ obj = dbev->get_compare_obj (obj);
+ return obj;
+}
+
+void
+PathTree::get_metrics (NodeIdx node_idx, int dpth)
+{
+ Node *node = NODE_IDX (node_idx);
+ Histable *cur_obj = get_hist_obj (node);
+ obj_list[dpth] = cur_obj;
+
+ // Check for recursion (inclusive metrics)
+ int incl_ok = 1;
+ for (int i = dpth - 1; i >= 0; i--)
+ if (cur_obj == obj_list[i])
+ {
+ incl_ok = 0;
+ break;
+ }
+
+ // Check for leaf nodes (exclusive metrics)
+ int excl_ok = 0;
+ if (IS_LEAF (node) || node == NODE_IDX (root_idx))
+ excl_ok = 1;
+
+ // We shouldn't eliminate empty subtrees here because
+ // we create the list of hist items dynamically and want
+ // one for each object in the tree.
+ cur_obj = get_compare_obj (cur_obj);
+ Hist_data::HistItem *hi = hist_data->append_hist_item (cur_obj);
+ DBG (assert (hi != NULL));
+
+ MetricList *mlist = hist_data->get_metric_list ();
+ for (long ind = 0, sz = mlist->size (); ind < sz; ind++)
+ {
+ if (xlate[ind] == -1)
+ continue;
+ Metric *mtr = mlist->get (ind);
+ Metric::SubType subtype = mtr->get_subtype ();
+ if (IS_MVAL_ZERO (slots[xlate[ind]], node_idx))
+ continue;
+
+ switch (subtype)
+ {
+ case Metric::INCLUSIVE:
+ if (incl_ok && hi)
+ ADD_METRIC_VAL (hi->value[ind], slots[xlate[ind]], node_idx);
+ break;
+ case Metric::EXCLUSIVE:
+ if (excl_ok && hi)
+ ADD_METRIC_VAL (hi->value[ind], slots[xlate[ind]], node_idx);
+ break;
+ // ignoring the following cases (why?)
+ case Metric::STATIC:
+ case Metric::ATTRIBUTED:
+ break;
+ case Metric::DATASPACE:
+ if (hi)
+ ADD_METRIC_VAL (hi->value[ind], slots[xlate[ind]], node_idx);
+ break;
+ }
+ }
+
+ if (dbeSession->is_interactive ())
+ {
+ ndone++;
+ int new_percent = 95 * ndone / nodes;
+ if (new_percent > percent)
+ {
+ percent = new_percent;
+ theApplication->set_progress (percent, NULL);
+ }
+ }
+
+ // Recursively process all descendants
+ int index;
+ int dsize = NUM_DESCENDANTS (node);
+ for (index = 0; index < dsize; index++)
+ get_metrics (node->descendants->fetch (index), dpth + 1);
+}
+
+void
+PathTree::get_clr_metrics (Vector<Histable*> *objs, NodeIdx node_idx,
+ int pmatch, int dpth)
+{
+ Node *node = NODE_IDX (node_idx);
+ Histable *cur_obj;
+ if (hist_data->type == Histable::LINE || hist_data->type == Histable::INSTR)
+ {
+ cur_obj = get_hist_func_obj (node);
+ node_list[dpth] = node;
+ }
+ else
+ cur_obj = get_hist_obj (node);
+ obj_list[dpth] = cur_obj;
+
+ bool match = false;
+ int nobj = objs->size ();
+ if (dpth + 1 >= nobj)
+ {
+ match = true;
+ for (int i = 0; i < nobj; ++i)
+ {
+ if (objs->fetch (i) != obj_list[dpth - nobj + 1 + i])
+ {
+ match = false;
+ break;
+ }
+ }
+ }
+
+ Hist_data::HistItem *hi = NULL;
+ Hist_data::HistItem *hi_adj = NULL;
+ if (match && dpth >= nobj)
+ {
+ if (hist_data->type == Histable::LINE
+ || hist_data->type == Histable::INSTR)
+ hi = hist_data->append_hist_item (get_hist_obj (node_list[dpth - nobj]));
+ else
+ hi = hist_data->append_hist_item (obj_list[dpth - nobj]);
+
+ if (pmatch >= 0 && pmatch >= nobj)
+ {
+ if (hist_data->type == Histable::LINE
+ || hist_data->type == Histable::INSTR)
+ hi_adj = hist_data->append_hist_item (get_hist_obj (
+ node_list[pmatch - nobj]));
+ else
+ hi_adj = hist_data->append_hist_item (obj_list[pmatch - nobj]);
+ }
+ }
+
+ if (hi != NULL)
+ {
+ MetricList *mlist = hist_data->get_metric_list ();
+ for (long ind = 0, sz = mlist->size (); ind < sz; ind++)
+ {
+ if (xlate[ind] == -1)
+ continue;
+ if (IS_MVAL_ZERO (slots[xlate[ind]], node_idx))
+ continue;
+ Metric *mtr = mlist->get (ind);
+ Metric::SubType subtype = mtr->get_subtype ();
+
+ switch (subtype)
+ {
+ case Metric::ATTRIBUTED:
+ if (hi)
+ ADD_METRIC_VAL (hi->value[ind], slots[xlate[ind]], node_idx);
+ if (hi_adj)
+ SUB_METRIC_VAL (hi_adj->value[ind], slots[xlate[ind]], node_idx);
+ break;
+ case Metric::STATIC:
+ case Metric::EXCLUSIVE:
+ case Metric::INCLUSIVE:
+ case Metric::DATASPACE:
+ break;
+ }
+ }
+ }
+
+ // Recursively process all descendants
+ int dsize = NUM_DESCENDANTS (node);
+ for (int index = 0; index < dsize; index++)
+ get_clr_metrics (objs, node->descendants->fetch (index),
+ match ? dpth : pmatch, dpth + 1);
+}
+
+void
+PathTree::get_clr_metrics (Vector<Histable*> *objs)
+{
+ get_clr_metrics (objs, root_idx, -1, 0);
+}
+
+void
+PathTree::get_cle_metrics (Vector<Histable*> *objs, NodeIdx node_idx, int pcle,
+ int pmatch, int dpth)
+{
+ Node *node = NODE_IDX (node_idx);
+ Histable *cur_obj = get_hist_obj (node);
+ obj_list[dpth] = cur_obj;
+
+ bool match = false;
+ int nobj = objs->size ();
+ if (dpth + 1 >= nobj)
+ {
+ match = true;
+ for (int i = 0; i < nobj; ++i)
+ if (objs->fetch (i) != obj_list[dpth - nobj + 1 + i])
+ {
+ match = false;
+ break;
+ }
+ }
+
+ Hist_data::HistItem *hi = NULL;
+ Hist_data::HistItem *hi_adj = NULL;
+ if (pmatch >= 0 && dpth == pmatch + 1)
+ hi = hist_data->append_hist_item (cur_obj);
+ if (match && IS_LEAF (node))
+ hi = hist_data->gprof_item;
+ if (pcle >= 0)
+ hi_adj = hist_data->append_hist_item (obj_list[pcle]);
+
+ if (hi != NULL)
+ {
+ MetricList *mlist = hist_data->get_metric_list ();
+ for (long ind = 0, sz = mlist->size (); ind < sz; ind++)
+ {
+ if (xlate[ind] == -1)
+ continue;
+ if (IS_MVAL_ZERO (slots[xlate[ind]], node_idx))
+ continue;
+ Metric *mtr = mlist->get (ind);
+ Metric::SubType subtype = mtr->get_subtype ();
+ if (subtype == Metric::ATTRIBUTED)
+ {
+ ADD_METRIC_VAL (hi->value[ind], slots[xlate[ind]], node_idx);
+ if (hi_adj)
+ SUB_METRIC_VAL (hi_adj->value[ind], slots[xlate[ind]], node_idx);
+ }
+ }
+ }
+
+ // Recursively process all descendants
+ int dsize = NUM_DESCENDANTS (node);
+ for (int index = 0; index < dsize; index++)
+ get_cle_metrics (objs, node->descendants->fetch (index),
+ pmatch >= 0 && dpth == pmatch + 1 ? dpth : pcle,
+ match ? dpth : pmatch, dpth + 1);
+}
+
+void
+PathTree::get_cle_metrics (Vector<Histable*> *objs, NodeIdx node_idx, int dpth)
+{
+ Node *node = NODE_IDX (node_idx);
+ Histable *cur_obj = get_hist_obj (node);
+ Hist_data::HistItem *hi = NULL;
+ if (NULL == objs) // Special case: get root
+ hi = hist_data->append_hist_item (cur_obj);
+ else
+ {
+ if (dpth == objs->size ())
+ hi = hist_data->append_hist_item (cur_obj);
+ else if (cur_obj == objs->fetch (dpth))
+ {
+ // Recursively process all descendants
+ int dsize = NUM_DESCENDANTS (node);
+ for (int index = 0; index < dsize; index++)
+ get_cle_metrics (objs, node->descendants->fetch (index), dpth + 1);
+ if (dpth == objs->size () - 1 && dsize == 0)
+ hi = hist_data->gprof_item;
+ }
+ }
+
+ if (hi != NULL)
+ {
+ MetricList *mlist = hist_data->get_metric_list ();
+ for (long ind = 0, sz = mlist->size (); ind < sz; ind++)
+ {
+ if (xlate[ind] == -1)
+ continue;
+ if (IS_MVAL_ZERO (slots[xlate[ind]], node_idx))
+ continue;
+ Metric *mtr = mlist->get (ind);
+ Metric::SubType subtype = mtr->get_subtype ();
+ if (subtype == Metric::ATTRIBUTED)
+ ADD_METRIC_VAL (hi->value[ind], slots[xlate[ind]], node_idx);
+ }
+ }
+}
+
+void
+PathTree::ftree_reset ()
+{
+ if (pathTreeType == PATHTREE_MAIN && indxtype < 0)
+ {
+ reset ();
+ if (ftree_needs_update)
+ {
+ if (ftree_internal == NULL)
+ {
+ ftree_internal = new PathTree (dbev, indxtype,
+ PATHTREE_INTERNAL_FUNCTREE);
+ if (ftree_internal == NULL)
+ return;
+ }
+ ftree_internal->ftree_build (this);
+ ftree_needs_update = false;
+ }
+ }
+}
+
+void
+PathTree::ftree_build (PathTree * mstr)
+{
+ fini ();
+ init ();
+ allocate_slots (mstr->slots, mstr->nslots);
+ ftree_build (mstr, mstr->root_idx, root_idx);
+ depth = mstr->depth;
+ depth_map_build ();
+}
+
+#if DEBUG_FTREE // possibly TBR
+void
+PathTree::ftree_dump ()
+{
+ hrtime_t starttime, endtime;
+ int nmetrics = 1;
+ // int nmetrics = nslots;
+ for (int kk = 0; kk < nmetrics; kk++)
+ {
+ int id = slots[kk].id;
+ starttime = gethrtime ();
+ long nodecnt = 0;
+ for (int ii = 0; ii < depth; ii++)
+ {
+ Vector<Vector<void*>*> *tmp = (Vector<Vector<void*>*>*)get_ftree_level
+ (id, ii);
+ if (tmp == NULL)
+ continue;
+ long sz = tmp->get (0)->size ();
+ nodecnt += sz;
+#if 1
+ // fprintf(stderr, "... finished (%ld nodes)\n", sz);
+#else
+ Vector<NodeIdx> *nodeIdxList = (Vector<NodeIdx> *)tmp->get (0);
+ Vector<NodeIdx> *ancestorNodeIdxList = (Vector<NodeIdx> *)tmp->get (1);
+ Vector<uint64_t> *idList = (Vector<uint64_t> *)tmp->get (2);
+ Vector<uint64_t> *vals = (Vector<uint64_t> *)tmp->get (3);
+ for (int jj = 0; jj < sz; jj++)
+ fprintf (stderr, " ...%d:%d node=%ld, anc=%ld, id=%llu, val=%llu\n",
+ sz, jj, nodeIdxList->get (jj),
+ ancestorNodeIdxList->get (jj),
+ idList->get (jj), vals->get (jj));
+#endif
+ destroy (tmp);
+ }
+ endtime = gethrtime ();
+ fprintf (stderr, "====================== %ld nodes time=%llu\n",
+ nodecnt, (endtime - starttime) / 1000 / 1000);
+ }
+}
+#endif
+
+// ftree: translate mstr Histable::INSTR to Histable::FUNCTION
+void
+PathTree::ftree_build (PathTree *mstr, NodeIdx mstr_node_idx,
+ NodeIdx local_node_idx)
+{
+ // requires: slots, nslots
+ Node *mstr_node = mstr->NODE_IDX (mstr_node_idx);
+ int dsize = NUM_DESCENDANTS (mstr_node);
+
+ // Add metrics
+ for (int i = 0; i < nslots; i++)
+ {
+ if (i >= mstr->nslots)
+ continue; //weird
+ if (slots[i].vtype != mstr->slots[i].vtype)
+ continue; //weird
+ TValue val;
+ val.ll = 0;
+ mstr->ASN_METRIC_VAL (val, mstr->slots[i], mstr_node_idx);
+ int64_t mval;
+ switch (slots[i].vtype)
+ {
+ case VT_ULLONG:
+ case VT_LLONG:
+ mval = val.ll;
+ break;
+ case VT_INT:
+ mval = val.i;
+ break;
+ default:
+ mval = 0;
+ break;
+ }
+ if (mval)
+ {
+ Slot * mslot = SLOT_IDX (i);
+ if (mslot)
+ INCREMENT_METRIC (mslot, local_node_idx, mval);
+ }
+ }
+
+ // Recursively process all descendants
+ for (int index = 0; index < dsize; index++)
+ {
+ NodeIdx mstr_desc_node_idx = mstr_node->descendants->fetch (index);
+ Node *mstr_desc_node = mstr->NODE_IDX (mstr_desc_node_idx);
+ Function *func = (Function*) mstr_desc_node->instr->convertto (Histable::FUNCTION);
+ int mstr_desc_dsize = NUM_DESCENDANTS (mstr_desc_node);
+ bool leaf = (mstr_desc_dsize == 0);
+ NodeIdx local_desc_node_idx = find_desc_node (local_node_idx, func, leaf);
+ ftree_build (mstr, mstr_desc_node_idx, local_desc_node_idx);
+ }
+}
+
+void
+PathTree::depth_map_build ()
+{
+ destroy (depth_map);
+ depth_map = new Vector<Vector<NodeIdx>*>(depth);
+ if (depth)
+ {
+ depth_map->put (depth - 1, 0); // fill vector with nulls
+ depth_map_build (root_idx, 0);
+ }
+}
+
+void
+PathTree::depth_map_build (NodeIdx node_idx, int dpth)
+{
+ Node *node = NODE_IDX (node_idx);
+
+ Vector<NodeIdx> *node_idxs = depth_map->get (dpth);
+ if (node_idxs == NULL)
+ {
+ node_idxs = new Vector<NodeIdx>();
+ depth_map->store (dpth, node_idxs);
+ }
+ node_idxs->append (node_idx);
+
+ // Recursively process all descendants
+ int dsize = NUM_DESCENDANTS (node);
+ for (int index = 0; index < dsize; index++)
+ {
+ NodeIdx desc_node_idx = node->descendants->fetch (index);
+ depth_map_build (desc_node_idx, dpth + 1);
+ }
+}
+
+int
+PathTree::get_ftree_depth ()
+{ // external use only
+ ftree_reset ();
+ if (!ftree_internal)
+ return 0;
+ return ftree_internal->get_depth ();
+}
+
+Vector<Function*>*
+PathTree::get_ftree_funcs ()
+{ // external use only
+ ftree_reset ();
+ if (!ftree_internal)
+ return NULL;
+ return ftree_internal->get_funcs ();
+}
+
+Vector<Function*>*
+PathTree::get_funcs ()
+{
+ // get unique functions
+ if (fn_map == NULL)
+ return NULL;
+ return fn_map->keySet ();
+}
+
+Vector<void*>*
+PathTree::get_ftree_level (BaseMetric *bm, int dpth)
+{ // external use only
+ ftree_reset ();
+ if (!ftree_internal)
+ return NULL;
+ return ftree_internal->get_level (bm, dpth);
+}
+
+Vector<void*>*
+PathTree::get_level (BaseMetric *bm, int dpth)
+{
+ // Nodes at tree depth dpth
+ if (dpth < 0 || dpth >= depth)
+ return NULL;
+ if (depth_map == NULL)
+ return NULL;
+ Vector<NodeIdx> *node_idxs = depth_map->get (dpth);
+ return get_nodes (bm, node_idxs);
+}
+
+Vector<void*>*
+PathTree::get_ftree_node_children (BaseMetric *bm, NodeIdx node_idx)
+{ // external use only
+ ftree_reset ();
+ if (!ftree_internal)
+ return NULL;
+ return ftree_internal->get_node_children (bm, node_idx);
+}
+
+Vector<void*>*
+PathTree::get_node_children (BaseMetric *bm, NodeIdx node_idx)
+{
+ // Nodes that are children of node_idx
+ if (depth_map == NULL)
+ return NULL;
+ if (node_idx == 0) // special case for root
+ return get_nodes (bm, depth_map->get (0));
+ if (node_idx < 0 || node_idx >= nodes)
+ return NULL;
+ Node *node = NODE_IDX (node_idx);
+ if (node == NULL)
+ return NULL;
+ Vector<NodeIdx> *node_idxs = node->descendants;
+ return get_nodes (bm, node_idxs);
+}
+
+Vector<void*>*
+PathTree::get_nodes (BaseMetric *bm, Vector<NodeIdx> *node_idxs)
+{ // used for ftree
+ // capture info for node_idxs:
+ // node's idx
+ // node->ancestor idx
+ // node->instr->id
+ // mind metric value // in the future, could instead accept vector of mind
+ if (node_idxs == NULL)
+ return NULL;
+ long sz = node_idxs->size ();
+ if (sz <= 0)
+ return NULL;
+
+ bool calculate_metric = false;
+ ValueTag vtype;
+ int slot_idx;
+ double prec;
+ if (bm != NULL)
+ {
+ int mind = bm->get_id ();
+ slot_idx = find_slot (mind); // may be -1 (CPI and IPC)
+ prec = bm->get_precision ();
+ vtype = bm->get_vtype ();
+ }
+ else
+ {
+ slot_idx = -1;
+ prec = 1.0;
+ vtype = VT_INT;
+ }
+
+ if (slot_idx >= 0)
+ {
+ switch (vtype)
+ {
+ case VT_ULLONG:
+ case VT_LLONG:
+ case VT_INT:
+ if (slots[slot_idx].vtype == vtype)
+ calculate_metric = true;
+ else
+ DBG (assert (false));
+ break;
+ case VT_DOUBLE:
+ calculate_metric = true;
+ break;
+ default:
+ break;
+ }
+ }
+
+ Vector<void*> *results = new Vector<void*>(4);
+ if (!calculate_metric)
+ results->store (3, NULL);
+ else
+ {
+ // Code below cribbed from Dbe.cc:dbeGetTableDataV2Data.
+ // TBD: possibly create an intermediate HistData and instead call that routine
+ switch (vtype)
+ {
+ case VT_ULLONG:
+ case VT_LLONG:
+ {
+ Vector<long long> *vals = new Vector<long long>(sz);
+ for (long i = 0; i < sz; i++)
+ {
+ NodeIdx node_idx = node_idxs->get (i);
+ TValue val;
+ val.ll = 0;
+ ASN_METRIC_VAL (val, slots[slot_idx], node_idx);
+ vals->append (val.ll);
+ }
+ results->store (3, vals);
+ break;
+ }
+ case VT_DOUBLE:
+ {
+ Vector<double> *vals = new Vector<double>(sz);
+ TValue val;
+ val.tag = slots[slot_idx].vtype; // required for to_double();
+ for (long i = 0; i < sz; i++)
+ {
+ NodeIdx node_idx = node_idxs->get (i);
+ val.ll = 0;
+ ASN_METRIC_VAL (val, slots[slot_idx], node_idx);
+ double dval = val.to_double ();
+ dval /= prec;
+ vals->append (dval);
+ }
+ results->store (3, vals);
+ break;
+ }
+ case VT_INT:
+ {
+ Vector<int> *vals = new Vector<int>(sz);
+ for (long i = 0; i < sz; i++)
+ {
+ NodeIdx node_idx = node_idxs->get (i);
+ TValue val;
+ val.i = 0;
+ ASN_METRIC_VAL (val, slots[slot_idx], node_idx);
+ vals->append (val.i);
+ }
+ results->store (3, vals);
+ break;
+ }
+ default:
+ results->store (3, NULL);
+ break;
+ }
+ }
+
+ Vector<int> *nodeIdxList = new Vector<int>(sz);
+ Vector<int> *ancestorNodeIdxList = new Vector<int>(sz);
+ Vector<uint64_t> *idList = new Vector<uint64_t>(sz);
+ for (long i = 0; i < sz; i++)
+ {
+ NodeIdx node_idx = node_idxs->get (i);
+ Node *node = NODE_IDX (node_idx);
+ NodeIdx ancestor_idx = node->ancestor;
+ Histable *func = node->instr;
+ nodeIdxList->append (node_idx);
+ ancestorNodeIdxList->append (ancestor_idx);
+ idList->append (func->id);
+ }
+
+ results->store (0, nodeIdxList);
+ results->store (1, ancestorNodeIdxList);
+ results->store (2, idList);
+ return results;
+}
+
+void
+PathTree::get_cle_metrics (Vector<Histable*> *objs)
+{
+ if (NULL == objs || objs->fetch (0) == get_hist_obj (NODE_IDX (root_idx)))
+ // Call Tree optimization
+ get_cle_metrics (objs, root_idx, 0);
+ else
+ // General case
+ get_cle_metrics (objs, root_idx, -1, -1, 0);
+}
+
+void
+PathTree::get_metrics (Vector<Function*> *functions, Histable *context)
+{
+ Function *fitem;
+ int excl_ok, incl_ok;
+ NodeIdx node_idx;
+ Node *node, *anc;
+ int index;
+
+ Vec_loop (Function*, functions, index, fitem)
+ {
+ node_idx = fn_map->get (fitem);
+ for (; node_idx; node_idx = node->funclist)
+ {
+ node = NODE_IDX (node_idx);
+ Histable *h_obj = get_hist_obj (node, context);
+ if (h_obj == NULL)
+ continue;
+
+ // Check for recursion (inclusive metrics)
+ incl_ok = 1;
+ for (anc = NODE_IDX (node->ancestor); anc;
+ anc = NODE_IDX (anc->ancestor))
+ {
+ if (h_obj == get_hist_obj (anc, context))
+ {
+ incl_ok = 0;
+ break;
+ }
+ }
+
+ // Check for leaf nodes (exclusive metrics)
+ excl_ok = 0;
+ if (IS_LEAF (node))
+ excl_ok = 1;
+
+ h_obj = get_compare_obj (h_obj);
+ Hist_data::HistItem *hi = hist_data->append_hist_item (h_obj);
+
+ if (!excl_ok)
+ hist_data->get_callsite_mark ()->put (h_obj, 1);
+ MetricList *mlist = hist_data->get_metric_list ();
+ for (long ind = 0, sz = mlist->size (); ind < sz; ind++)
+ {
+ if (xlate[ind] == -1)
+ continue;
+ Metric *mtr = mlist->get (ind);
+ Metric::SubType subtype = mtr->get_subtype ();
+ if (subtype == Metric::INCLUSIVE && !incl_ok)
+ continue;
+ if (subtype == Metric::EXCLUSIVE && !excl_ok)
+ continue;
+ if (IS_MVAL_ZERO (slots[xlate[ind]], node_idx))
+ continue;
+ ADD_METRIC_VAL (hi->value[ind], slots[xlate[ind]], node_idx);
+ }
+ }
+ }
+}
+
+void
+PathTree::get_self_metrics (Vector<Histable*> *objs, NodeIdx node_idx,
+ bool seen, int dpth)
+{
+ Node *node = NODE_IDX (node_idx);
+ Histable *cur_obj = get_hist_obj (node);
+ obj_list[dpth] = cur_obj;
+
+ bool match = false;
+ int nobj = objs->size ();
+ if (dpth + 1 >= nobj)
+ {
+ match = true;
+ for (int i = 0; i < nobj; ++i)
+ {
+ if (objs->fetch (i) != obj_list[dpth - nobj + 1 + i])
+ {
+ match = false;
+ break;
+ }
+ }
+ }
+
+ if (match)
+ {
+ Hist_data::HistItem *hi = hist_data->append_hist_item (cur_obj);
+ int incl_ok = !seen;
+ int excl_ok = 0;
+ if (IS_LEAF (node) || node == NODE_IDX (root_idx))
+ excl_ok = 1;
+ MetricList *mlist = hist_data->get_metric_list ();
+ for (long ind = 0, sz = mlist->size (); ind < sz; ind++)
+ {
+ if (xlate[ind] == -1)
+ continue;
+ if (IS_MVAL_ZERO (slots[xlate[ind]], node_idx))
+ continue;
+ Metric *mtr = mlist->get (ind);
+ Metric::SubType subtype = mtr->get_subtype ();
+ switch (subtype)
+ {
+ case Metric::INCLUSIVE:
+ if (incl_ok && hi)
+ ADD_METRIC_VAL (hi->value[ind], slots[xlate[ind]], node_idx);
+ break;
+ case Metric::EXCLUSIVE:
+ case Metric::ATTRIBUTED:
+ if (excl_ok && hi)
+ ADD_METRIC_VAL (hi->value[ind], slots[xlate[ind]], node_idx);
+ break;
+ case Metric::DATASPACE:
+ if (hi)
+ ADD_METRIC_VAL (hi->value[ind], slots[xlate[ind]], node_idx);
+ break;
+ // ignoring the following cases (why?)
+ case Metric::STATIC:
+ break;
+ }
+ }
+ }
+
+ if (dbeSession->is_interactive ())
+ {
+ ndone++;
+ int new_percent = 95 * ndone / nodes;
+ if (new_percent > percent)
+ {
+ percent = new_percent;
+ theApplication->set_progress (percent, NULL);
+ }
+ }
+
+ // Recursively process all descendants
+ int index;
+ int dsize = NUM_DESCENDANTS (node);
+ for (index = 0; index < dsize; index++)
+ get_self_metrics (objs, node->descendants->fetch (index),
+ seen || match, dpth + 1);
+}
+
+void
+PathTree::get_self_metrics (Vector<Histable*> *objs)
+{
+ get_self_metrics (objs, root_idx, false, 0);
+}
+
+void
+PathTree::get_self_metrics (Histable *obj, Vector<Function*> *funclist,
+ Vector<Histable*>* sel_objs)
+{
+ int excl_ok, incl_ok;
+ NodeIdx node_idx;
+ Node *node, *anc;
+
+ if (obj == NULL)
+ return;
+
+ SourceFile *src = NULL;
+ if (obj && obj->get_type () == Histable::LINE)
+ {
+ DbeLine *dbeline = (DbeLine*) obj;
+ src = dbeline->sourceFile;
+ }
+
+ Hist_data::HistItem *hi = hist_data->append_hist_item (obj);
+ for (int i = 0, sz = funclist ? funclist->size () : 0; i < sz; i++)
+ {
+ Function *fitem = (Function*) get_compare_obj (funclist->fetch (i));
+ node_idx = fn_map->get (fitem);
+ for (; node_idx; node_idx = node->funclist)
+ {
+ node = NODE_IDX (node_idx);
+ if (obj && obj->get_type () == Histable::LINE)
+ {
+ Histable *h = get_hist_obj (node, src);
+ if (h == NULL)
+ continue;
+ if (h->convertto (Histable::LINE) != obj->convertto (Histable::LINE))
+ continue;
+ }
+ else if (get_hist_obj (node, src) != obj)
+ continue;
+
+ // Check for recursion (inclusive metrics)
+ incl_ok = 1;
+ for (anc = NODE_IDX (node->ancestor); anc;
+ anc = NODE_IDX (anc->ancestor))
+ {
+ if (get_hist_obj (anc, src) == obj)
+ {
+ incl_ok = 0;
+ break;
+ }
+ if (sel_objs != NULL)
+ for (int k = 0; k < sel_objs->size (); k++)
+ if (sel_objs->fetch (k) == get_hist_obj (anc, src))
+ {
+ incl_ok = 0;
+ break;
+ }
+ }
+
+ // Check for leaf nodes (exclusive metrics)
+ excl_ok = 0;
+ if (IS_LEAF (node) || node == NODE_IDX (root_idx))
+ excl_ok = 1;
+
+ MetricList *mlist = hist_data->get_metric_list ();
+ for (long ind = 0, ind_sz = mlist->size (); ind < ind_sz; ind++)
+ {
+ if (xlate[ind] == -1)
+ continue;
+ Metric *mtr = mlist->get (ind);
+ Metric::SubType subtype = mtr->get_subtype ();
+ if (subtype == Metric::INCLUSIVE && !incl_ok)
+ continue;
+ if (subtype == Metric::EXCLUSIVE && !excl_ok)
+ continue;
+ if (subtype == Metric::ATTRIBUTED && !excl_ok)
+ continue;
+ if (IS_MVAL_ZERO (slots[xlate[ind]], node_idx))
+ continue;
+ ADD_METRIC_VAL (hi->value[ind], slots[xlate[ind]], node_idx);
+ }
+ }
+ }
+}
+
+Vector<Histable*> *
+PathTree::get_clr_instr (Histable * func)
+{
+ Vector<Histable*> * instrs = NULL;
+ if (func->get_type () != Histable::FUNCTION)
+ return NULL;
+ NodeIdx node_idx = fn_map->get ((Function*) func);
+ Node *node = NODE_IDX (node_idx);
+ if (node == NULL)
+ return new Vector<Histable*>();
+ int instr_num = 0;
+ for (; node; node = NODE_IDX (node->funclist))
+ instr_num++;
+ instrs = new Vector<Histable*>(instr_num);
+ node = NODE_IDX (node_idx);
+ Histable *instr = NODE_IDX (node->ancestor)->instr;
+ instr_num = 0;
+ instrs->store (instr_num, instr);
+ node = NODE_IDX (node->funclist);
+ for (; node; node = NODE_IDX (node->funclist))
+ {
+ instr = NODE_IDX (node->ancestor)->instr;
+ instr_num++;
+ instrs->store (instr_num, instr);
+ }
+ return instrs;
+}
+
+Vector<void*> *
+PathTree::get_cle_instr (Histable * func, Vector<Histable*>*&instrs)
+{
+ if (func->get_type () != Histable::FUNCTION)
+ return NULL;
+ NodeIdx node_idx = fn_map->get ((Function*) func);
+ Node *node = NODE_IDX (node_idx);
+ if (node == NULL)
+ {
+ instrs = new Vector<Histable*>();
+ return new Vector<void*>();
+ }
+ int instr_num = 0;
+ for (; node; node = NODE_IDX (node->funclist))
+ instr_num++;
+ instrs = new Vector<Histable*>(instr_num);
+ Vector<void*> *callee_info = new Vector<void*>(instr_num);
+ node = NODE_IDX (node_idx);
+ Histable *instr = node->instr;
+ instr_num = 0;
+ instrs->store (instr_num, instr);
+ int dec_num = 0;
+ NodeIdx dec_idx = 0;
+ if (NUM_DESCENDANTS (node) > 0)
+ {
+ Vector<Histable*> * callee_instrs = new Vector<Histable*>(node->descendants->size ());
+ Vec_loop (NodeIdx, node->descendants, dec_num, dec_idx)
+ {
+ Node * dec_node = NODE_IDX (dec_idx);
+ //XXXX Note: there can be more than one instrs in one leaf function
+ callee_instrs->store (dec_num, dec_node->instr);
+ }
+ callee_info->store (instr_num, callee_instrs);
+ }
+ else
+ callee_info->store (instr_num, NULL);
+ node = NODE_IDX (node->funclist);
+ for (; node; node = NODE_IDX (node->funclist))
+ {
+ instr = node->instr;
+ instr_num++;
+ instrs->store (instr_num, instr);
+ if (NUM_DESCENDANTS (node) > 0)
+ {
+ Vector<Histable*> * callee_instrs = new Vector<Histable*>(node->descendants->size ());
+ Vec_loop (NodeIdx, node->descendants, dec_num, dec_idx)
+ {
+ Node * dec_node = NODE_IDX (dec_idx);
+ //XXXX Note: there can be more than one instrs in one leaf function
+ callee_instrs->store (dec_num, dec_node->instr);
+ }
+ callee_info->store (instr_num, callee_instrs);
+ }
+ else
+ callee_info->store (instr_num, NULL);
+ }
+ return callee_info;
+}
+
+//
+//
+// The following methods are used for debugging purpose only.
+//
+//
+static int maxdepth;
+static int maxwidth;
+
+void
+PathTree::print (FILE *fd)
+{
+ (void) reset ();
+ fprintf (fd, NTXT ("n = %lld, dn = %lld, MD = %lld\n\n"),
+ (long long) nodes, (long long) dnodes, (long long) depth);
+ maxdepth = 0;
+ maxwidth = 0;
+ print (fd, root, 0);
+ fprintf (fd, NTXT ("md = %lld, mw = %lld\n"),
+ (long long) maxdepth, (long long) maxwidth);
+}
+
+void
+PathTree::print (FILE *fd, PathTree::Node *node, int lvl)
+{
+ const char *t;
+ char *n;
+ if (lvl + 1 > maxdepth)
+ maxdepth = lvl + 1;
+ for (int i = 0; i < lvl; i++)
+ fprintf (fd, NTXT ("-"));
+ Histable *instr = node->instr;
+ if (instr->get_type () == Histable::LINE)
+ {
+ t = "L";
+ n = ((DbeLine *) instr)->func->get_name ();
+ }
+ else if (instr->get_type () == Histable::INSTR)
+ {
+ t = "I";
+ n = ((DbeInstr *) instr)->func->get_name ();
+ }
+ else
+ {
+ t = "O";
+ n = instr->get_name ();
+ }
+ long long addr = (long long) instr->get_addr ();
+ fprintf (fd, NTXT ("%s %s (0x%08llx) -- ndesc = %lld\n"),
+ t, n, addr, (long long) (NUM_DESCENDANTS (node)));
+
+ // Recursively process all descendants
+ int dsize = NUM_DESCENDANTS (node);
+ if (dsize > maxwidth)
+ maxwidth = dsize;
+ for (int index = 0; index < dsize; index++)
+ print (fd, NODE_IDX (node->descendants->fetch (index)), lvl + 1);
+}
+
+void
+PathTree::printn (FILE *fd)
+{
+ int n = dbg_nodes (root);
+ fprintf (fd, GTXT ("Number of nodes: %d, total size: %d\n"), n, (int) (n * sizeof (Node)));
+}
+
+void
+PathTree::dumpNodes (FILE *fd, Histable *obj)
+{
+ const char *t;
+ char *n;
+ NodeIdx node_idx = fn_map->get ((Function*) obj);
+ Node *node = NODE_IDX (node_idx);
+ if (node == NULL)
+ {
+ fprintf (fd, GTXT ("No nodes associated with %s\n"), obj->get_name ());
+ return;
+ }
+ Histable *instr = node->instr;
+ for (; node; node = NODE_IDX (node->funclist))
+ {
+ instr = node->instr;
+ if (instr->get_type () == Histable::LINE)
+ {
+ t = "L";
+ n = ((DbeLine *) instr)->func->get_name ();
+ }
+ else if (instr->get_type () == Histable::INSTR)
+ {
+ t = "I";
+ n = ((DbeInstr *) instr)->func->get_name ();
+ }
+ else
+ {
+ t = "O";
+ n = instr->get_name ();
+ }
+ long long addr = (long long) instr->get_addr ();
+ if (addr <= 0xFFFFFFFFU)
+ fprintf (fd, NTXT ("0x%08x -- %s %s\n"), (uint32_t) addr, t, n);
+ else
+ fprintf (fd, NTXT ("0x%016llX -- %s %s\n"), addr, t, n);
+ }
+}
+
+int
+PathTree::dbg_nodes (PathTree::Node *node)
+{
+ int res = 1;
+ int dsize = NUM_DESCENDANTS (node);
+ for (int index = 0; index < dsize; index++)
+ res += dbg_nodes (NODE_IDX (node->descendants->fetch (index)));
+ return res;
+}
+
+static int mind_g;
+
+int
+leak_alloc_comp (const void *s1, const void *s2)
+{
+ // See Hist_data::sort_compare() for duplicate code
+ int result = 0;
+ CStack_data::CStack_item *t1, *t2;
+ t1 = *(CStack_data::CStack_item **)s1;
+ t2 = *(CStack_data::CStack_item **)s2;
+
+ switch (t1->value[mind_g].tag)
+ {
+ case VT_INT:
+ if (t1->value[mind_g].i < t2->value[mind_g].i)
+ result = -1;
+ else if (t1->value[mind_g].i > t2->value[mind_g].i)
+ result = 1;
+ else
+ result = 0;
+ break;
+ case VT_LLONG:
+ if (t1->value[mind_g].ll < t2->value[mind_g].ll)
+ result = -1;
+ else if (t1->value[mind_g].ll > t2->value[mind_g].ll)
+ result = 1;
+ else
+ result = 0;
+ break;
+ case VT_ULLONG:
+ if (t1->value[mind_g].ull < t2->value[mind_g].ull)
+ result = -1;
+ else if (t1->value[mind_g].ull > t2->value[mind_g].ull)
+ result = 1;
+ else
+ result = 0;
+ break;
+ // ignoring the following cases (why?)
+ case VT_SHORT:
+ case VT_FLOAT:
+ case VT_DOUBLE:
+ case VT_HRTIME:
+ case VT_LABEL:
+ case VT_ADDRESS:
+ case VT_OFFSET:
+ break;
+ }
+ // Sort in descending order
+ return -result;
+}
+
+CStack_data *
+PathTree::get_cstack_data (MetricList *mlist)
+{
+ (void) reset ();
+ CStack_data *lam = new CStack_data (mlist);
+ int nmetrics = mlist->get_items ()->size ();
+ mind_g = -1;
+ xlate = new int[nmetrics];
+ for (int mind = 0; mind < nmetrics; mind++)
+ {
+ xlate[mind] = -1;
+ Metric *mtr = mlist->get_items ()->fetch (mind);
+ if (mlist->get_sort_ref_index () == mind)
+ mind_g = mind;
+ xlate[mind] = find_slot (mtr->get_id ());
+ }
+
+ // now fill in the actual data
+ obj_list = new Histable*[depth];
+ get_cstack_list (lam, root_idx, 0);
+ delete[] obj_list;
+
+ if (mind_g >= 0)
+ lam->cstack_items->sort (leak_alloc_comp);
+ delete[] xlate;
+ return lam;
+}
+
+void
+PathTree::get_cstack_list (CStack_data *lam, NodeIdx node_idx, int dpth)
+{
+
+ Node *node = NODE_IDX (node_idx);
+ obj_list[dpth] = node->instr;
+
+ CStack_data::CStack_item *item = NULL;
+ if (IS_LEAF (node))
+ item = lam->new_cstack_item ();
+ int nmetrics = lam->metrics->get_items ()->size ();
+ bool subtree_empty = true;
+
+ for (int mind = 0; mind < nmetrics; mind++)
+ {
+ if (xlate[mind] == -1)
+ continue;
+ if (IS_MVAL_ZERO (slots[xlate[mind]], node_idx))
+ continue;
+ else
+ subtree_empty = false;
+ if (item)
+ {
+ ADD_METRIC_VAL (item->value[mind], slots[xlate[mind]], node_idx);
+ ADD_METRIC_VAL (lam->total->value[mind], slots[xlate[mind]], node_idx);
+ }
+ }
+
+ if (subtree_empty)
+ {
+ delete item;
+ return;
+ }
+
+ if (item)
+ {
+ // Finish processing a leaf node
+ item->stack = new Vector<DbeInstr*>(dpth);
+ for (int i = 1; i <= dpth; i++)
+ item->stack->append ((DbeInstr*) obj_list[i]);
+ lam->cstack_items->append (item);
+ }
+ else
+ {
+ // Recursively process all descendants
+ int dsize = NUM_DESCENDANTS (node);
+ for (int index = 0; index < dsize; index++)
+ get_cstack_list (lam, node->descendants->fetch (index), dpth + 1);
+ }
+}
+
+Emsg *
+PathTree::fetch_stats ()
+{
+ if (statsq == NULL)
+ return NULL;
+ return statsq->fetch ();
+}
+
+void
+PathTree::delete_stats ()
+{
+ if (statsq != NULL)
+ {
+ delete statsq;
+ statsq = new Emsgqueue (NTXT ("statsq"));
+ }
+}
+
+Emsg *
+PathTree::fetch_warnings ()
+{
+ if (warningq == NULL)
+ return NULL;
+ return warningq->fetch ();
+}
+
+void
+PathTree::delete_warnings ()
+{
+ if (warningq != NULL)
+ {
+ delete warningq;
+ warningq = new Emsgqueue (NTXT ("warningq"));
+ }
+}
diff --git a/gprofng/src/PathTree.h b/gprofng/src/PathTree.h
new file mode 100644
index 00000000000..dc3ad1fbb2b
--- /dev/null
+++ b/gprofng/src/PathTree.h
@@ -0,0 +1,405 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _PATH_TREE_H
+#define _PATH_TREE_H
+
+#include <vec.h>
+#include <Map.h>
+
+#include "dbe_structs.h"
+#include "Hist_data.h"
+#include "Histable.h"
+#include "Metric.h"
+
+typedef enum
+{
+ NORMAL = 0, CANCELED
+} PtreePhaseStatus;
+
+class PathTree
+{
+public:
+
+ PathTree (DbeView *_dbev, int _indxtype = -1)
+ {
+ construct (_dbev, _indxtype, PATHTREE_MAIN);
+ }
+
+ ~PathTree ();
+
+ static void make_deltas (int vtype, TValue *v1, TValue *v2);
+ static void make_ratios (int vtype, TValue *v1, TValue *v2);
+
+ typedef enum
+ {
+ COMPUTEOPT_NONE = 0,
+ COMPUTEOPT_OMP_CALLEE
+ } PtreeComputeOption;
+
+ Hist_data *compute_metrics (MetricList *, Histable::Type,
+ Hist_data::Mode, Vector<Histable*>*,
+ Histable*, Vector<Histable*>* sel_objs = NULL,
+ PtreeComputeOption flag = COMPUTEOPT_NONE);
+ // Get aggregated callstack data
+ CStack_data *get_cstack_data (MetricList *);
+
+ Vector<Histable*> *get_clr_instr (Histable *);
+ Vector<void*> *get_cle_instr (Histable *, Vector<Histable*>*&);
+
+ int
+ get_status ()
+ {
+ return status;
+ }
+
+ int
+ get_depth ()
+ {
+ return depth;
+ }
+
+ int
+ getStackProp ()
+ {
+ return stack_prop;
+ }
+
+ typedef long NodeIdx;
+
+ struct Node
+ {
+ inline void
+ reset ()
+ {
+ ancestor = 0;
+ descendants = NULL;
+ instr = NULL;
+ funclist = 0;
+ }
+
+ NodeIdx ancestor;
+ Vector<NodeIdx> *descendants;
+ Histable *instr;
+ NodeIdx funclist;
+ };
+
+ static const int CHUNKSZ = 16384;
+
+ inline Node *
+ NODE_IDX (NodeIdx idx)
+ {
+ return idx ? &chunks[idx / CHUNKSZ][idx % CHUNKSZ] : NULL;
+ }
+
+ // queue for messages (statistics for pathtree processing)
+ Emsg *fetch_stats (void); // fetch the queue of comment messages
+ void delete_stats (void); // delete the queue of stats messages
+ Emsg *fetch_warnings (void); // fetch the queue of warnings messages
+ void delete_warnings (void); // delete the queue of warnings messages
+
+ NodeIdx
+ get_func_nodeidx (Function * func)
+ {
+ return fn_map == NULL ? (NodeIdx) 0 : fn_map->get (func);
+ }
+
+ void print (FILE *);
+ void dumpNodes (FILE *, Histable *);
+
+ // flame charts functions - get values from ftree_internal
+ int get_ftree_depth (); // Depth of tree
+ Vector<void*>* get_ftree_level (BaseMetric *bm, int dpth);
+ Vector<void*>* get_ftree_node_children (BaseMetric *bm, NodeIdx node_idx);
+ Vector<Function*>* get_ftree_funcs ();
+ Vector<Function*>* get_funcs (); // Unique functions in tree
+
+private:
+
+ enum
+ {
+ MAX_DESC_HTABLE_SZ = 65535
+ };
+
+ typedef struct hash_node
+ {
+ NodeIdx nd;
+ struct hash_node *next;
+ } hash_node_t;
+
+ int desc_htable_size;
+ int desc_htable_nelem;
+ hash_node_t **descHT;
+
+ struct Slot
+ {
+ int id;
+ ValueTag vtype;
+ union
+ {
+ int **mvals;
+ int64_t **mvals64;
+ };
+ };
+
+ typedef enum
+ {
+ PATHTREE_MAIN = 0,
+ PATHTREE_INTERNAL_OMP,
+ PATHTREE_INTERNAL_FUNCTREE
+ } PathTreeType;
+
+ DbeView *dbev;
+ int indxtype;
+ int stack_prop;
+ Expression *indx_expr;
+ Histable *total_obj;
+ Map<Function*, NodeIdx> *fn_map;
+ Map<uint64_t, NodeIdx> *pathMap;
+ Map<uint64_t, uint64_t> *hideMap;
+ int status;
+ NodeIdx root_idx;
+ Node *root;
+ int depth;
+ long nodes;
+ long dnodes;
+ long nchunks;
+ Node **chunks;
+ int nslots;
+ Slot *slots;
+ int phaseIdx;
+ int nexps;
+ Emsgqueue *statsq;
+ Emsgqueue *warningq;
+ Hist_data *hist_data;
+ int percent;
+ int ndone;
+ Histable **obj_list;
+ Node **node_list;
+ int *xlate;
+ bool cancel_ok;
+ PathTreeType pathTreeType;
+ PathTree *ptree_internal;
+ PathTree *ftree_internal; // function-based pathtree
+ bool ftree_needs_update;
+ Vector<Vector<NodeIdx>*> *depth_map; // for each depth level, list of nodes
+
+ void init ();
+ void fini ();
+ PtreePhaseStatus reset ();
+ PtreePhaseStatus add_experiment (int);
+ PtreePhaseStatus process_packets (Experiment*, DataView*, int);
+ DataView *get_filtered_events (int exp_index, int data_type);
+ void construct (DbeView *_dbev, int _indxtype, PathTreeType _pathTreeType);
+
+ PathTree (DbeView *_dbev, int _indxtype, PathTreeType _pathTreeType)
+ {
+ construct (_dbev, _indxtype, _pathTreeType);
+ }
+
+ inline int *
+ allocate_chunk (int **p, NodeIdx idx)
+ {
+ int *res = new int[CHUNKSZ];
+ for (int i = 0; i < CHUNKSZ; i++)
+ res[i] = 0;
+ p[idx] = res;
+ return res;
+ };
+
+ inline int64_t *
+ allocate_chunk (int64_t **p, NodeIdx idx)
+ {
+ int64_t *res = new int64_t[CHUNKSZ];
+ for (int i = 0; i < CHUNKSZ; i++)
+ res[i] = 0;
+ p[idx] = res;
+ return res;
+ };
+
+ inline Node *
+ allocate_chunk (Node **p, NodeIdx idx)
+ {
+ Node *res = new Node[CHUNKSZ];
+ for (int i = 0; i < CHUNKSZ; i++)
+ res[i].reset ();
+ p[idx] = res;
+ return res;
+ };
+
+ inline bool
+ IS_MVAL_ZERO (Slot& slot, NodeIdx idx)
+ {
+ if (slot.vtype == VT_LLONG || slot.vtype == VT_ULLONG)
+ {
+ int64_t *tmp = slot.mvals64[idx / CHUNKSZ];
+ return tmp ? tmp[idx % CHUNKSZ] == 0 : true;
+ }
+ else
+ {
+ int *tmp = slot.mvals[idx / CHUNKSZ];
+ return tmp ? tmp[idx % CHUNKSZ] == 0 : true;
+ }
+ }
+
+ inline void
+ ASN_METRIC_VAL (TValue& v, Slot& slot, NodeIdx idx)
+ {
+ if (slot.vtype == VT_LLONG)
+ {
+ int64_t *tmp = slot.mvals64[idx / CHUNKSZ];
+ if (tmp)
+ v.ll = tmp[idx % CHUNKSZ];
+ }
+ else if (slot.vtype == VT_ULLONG)
+ {
+ uint64_t *tmp = (uint64_t *) slot.mvals64[idx / CHUNKSZ];
+ if (tmp)
+ v.ull = tmp[idx % CHUNKSZ];
+ }
+ else
+ {
+ int *tmp = slot.mvals[idx / CHUNKSZ];
+ if (tmp)
+ v.i = tmp[idx % CHUNKSZ];
+ }
+ }
+
+ inline void
+ ADD_METRIC_VAL (TValue& v, Slot& slot, NodeIdx idx)
+ {
+ if (slot.vtype == VT_LLONG)
+ {
+ int64_t *tmp = slot.mvals64[idx / CHUNKSZ];
+ if (tmp)
+ v.ll += tmp[idx % CHUNKSZ];
+ }
+ else if (slot.vtype == VT_ULLONG)
+ {
+ uint64_t *tmp = (uint64_t *) slot.mvals64[idx / CHUNKSZ];
+ if (tmp)
+ v.ull += tmp[idx % CHUNKSZ];
+ }
+ else
+ {
+ int *tmp = slot.mvals[idx / CHUNKSZ];
+ if (tmp) v.i += tmp[idx % CHUNKSZ];
+ }
+ }
+
+ inline void
+ SUB_METRIC_VAL (TValue& v, Slot& slot, NodeIdx idx)
+ {
+ if (slot.vtype == VT_LLONG)
+ {
+ int64_t *tmp = slot.mvals64[idx / CHUNKSZ];
+ if (tmp)
+ v.ll -= tmp[idx % CHUNKSZ];
+ }
+ else if (slot.vtype == VT_ULLONG)
+ {
+ uint64_t *tmp = (uint64_t *) slot.mvals64[idx / CHUNKSZ];
+ if (tmp)
+ v.ull -= tmp[idx % CHUNKSZ];
+ }
+ else
+ {
+ int *tmp = slot.mvals[idx / CHUNKSZ];
+ if (tmp)
+ v.i -= tmp[idx % CHUNKSZ];
+ }
+ }
+
+ inline void
+ INCREMENT_METRIC (Slot *slot, NodeIdx idx, int64_t val)
+ {
+ if (slot->vtype == VT_LLONG)
+ {
+ int64_t *tmp = slot->mvals64[idx / CHUNKSZ];
+ if (tmp == NULL)
+ tmp = allocate_chunk (slot->mvals64, idx / CHUNKSZ);
+ tmp[idx % CHUNKSZ] += val;
+ }
+ else if (slot->vtype == VT_ULLONG)
+ {
+ uint64_t *tmp = (uint64_t *) slot->mvals64[idx / CHUNKSZ];
+ if (tmp == NULL)
+ tmp = (uint64_t *) allocate_chunk (slot->mvals64, idx / CHUNKSZ);
+ tmp[idx % CHUNKSZ] += val;
+ }
+ else
+ {
+ int *tmp = slot->mvals[idx / CHUNKSZ];
+ if (tmp == NULL)
+ tmp = allocate_chunk (slot->mvals, idx / CHUNKSZ);
+ tmp[idx % CHUNKSZ] += (int) val;
+ }
+ }
+
+ inline Slot *
+ SLOT_IDX (int idx)
+ {
+ if (idx < 0 || idx >= nslots)
+ return NULL;
+ return &slots[idx];
+ }
+
+ int allocate_slot (int id, ValueTag vtype);
+ void allocate_slots (Slot *slots, int nslots);
+ int find_slot (int);
+ NodeIdx new_Node (NodeIdx, Histable*, bool);
+ NodeIdx find_path (Experiment*, DataView*, long);
+ NodeIdx find_desc_node (NodeIdx, Histable*, bool);
+ NodeIdx find_in_desc_htable (NodeIdx, Histable*, bool);
+ Histable *get_hist_obj (Node *, Histable* = NULL);
+ Histable *get_hist_func_obj (Node *);
+ Histable *get_compare_obj (Histable *obj);
+ void get_metrics (NodeIdx, int);
+ void get_metrics (Vector<Function*> *, Histable *);
+ void get_clr_metrics (Vector<Histable*>*, NodeIdx, int, int);
+ void get_clr_metrics (Vector<Histable*>*);
+ void get_cle_metrics (Vector<Histable*>*, NodeIdx, int, int, int);
+ void get_cle_metrics (Vector<Histable*>*, NodeIdx, int);
+ void get_cle_metrics (Vector<Histable*>*);
+ void get_self_metrics (Vector<Histable*>*, NodeIdx, bool, int);
+ void get_self_metrics (Vector<Histable*>*);
+ void get_self_metrics (Histable *, Vector<Function*> *funclist,
+ Vector<Histable*>* sel_objs = NULL);
+ void get_cstack_list (CStack_data *, NodeIdx, int);
+
+ // Generate PathTree based on Functions instead of Instructions // Used for flame chart
+ void ftree_reset ();
+ void ftree_build (PathTree *mstr);
+ void ftree_build (PathTree *mstr, NodeIdx mstr_node_idx, NodeIdx local_node_idx);
+ void depth_map_build ();
+ void depth_map_build (NodeIdx node_idx, int depth);
+ Vector<void*>* get_level (BaseMetric *bm, int dpth);
+ Vector<void*>* get_nodes (BaseMetric *bm, Vector<NodeIdx> *node_idxs);
+ Vector<void*>* get_node_children (BaseMetric *bm, NodeIdx node_idx);
+ bool ftree_debug_match_hist_data (Hist_data *data, Hist_data *data_tmp);
+ void ftree_dump ();
+
+ // Debugging functions
+ void print (FILE *, PathTree::Node*, int);
+ void printn (FILE *);
+ int dbg_nodes (PathTree::Node*);
+};
+
+#endif /* _PATH_TREE_H */
diff --git a/gprofng/src/PreviewExp.cc b/gprofng/src/PreviewExp.cc
new file mode 100644
index 00000000000..553afd333b7
--- /dev/null
+++ b/gprofng/src/PreviewExp.cc
@@ -0,0 +1,113 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <stdio.h>
+
+#include "PreviewExp.h"
+#include "Data_window.h"
+#include "DbeSession.h"
+#include "Emsg.h"
+#include "Print.h"
+#include "i18n.h"
+
+PreviewExp::PreviewExp (): Experiment () { }
+
+PreviewExp::~PreviewExp () { }//~PreviewExp
+
+Experiment::Exp_status
+PreviewExp::experiment_open (char *path)
+{
+ // Find experiment directory
+ if ((status = find_expdir (path)) != SUCCESS)
+ {
+ size_t len = strlen (path);
+ is_group = ((len > 4) && !strcmp (&path[len - 4], NTXT (".erg")));
+ return status;
+ }
+ else
+ is_group = 0;
+
+ read_log_file ();
+ if (status == FAILURE)
+ return status;
+
+ if (status == INCOMPLETE && resume_ts != MAX_TIME)
+ // experiment is incomplete and "resumed" (non-paused)
+ // PreviewExp does not process all the packets, therefore...
+ // ... last_event does not reflect reality
+ // ... we don't know the duration or the end.
+ last_event = ZERO_TIME; // mark last_event as uninitialized
+
+ read_notes_file ();
+ return status;
+}
+
+Vector<char*> *
+PreviewExp::preview_info ()
+{
+ Vector<char*> *info = new Vector<char*>;
+ if (is_group)
+ info->append (GTXT ("Experiment Group"));
+ else
+ info->append (GTXT ("Experiment"));
+ info->append (expt_name);
+
+ if (status == FAILURE /* != SUCCESS */)
+ {
+ if (is_group)
+ {
+ Vector<char*> *grp_list = dbeSession->get_group_or_expt (expt_name);
+ for (int i = 0, grp_sz = grp_list->size (); i < grp_sz; i++)
+ {
+ char *nm = grp_list->fetch (i);
+ char *str = dbe_sprintf (GTXT ("Exp.#%d"), i + 1);
+ info->append (str);
+ info->append (nm);
+ }
+ delete grp_list;
+ }
+ else
+ {
+ info->append (GTXT ("Error message"));
+ info->append (mqueue_str (errorq, GTXT ("No errors\n")));
+ }
+ return info;
+ }
+ info->append (GTXT ("Experiment header"));
+ info->append (mqueue_str (commentq, GTXT ("Empty header\n")));
+ info->append (GTXT ("Error message"));
+ info->append (mqueue_str (errorq, GTXT ("No errors\n")));
+ info->append (GTXT ("Warning message"));
+ info->append (mqueue_str (warnq, GTXT ("No warnings\n")));
+ info->append (GTXT ("Notes"));
+ info->append (mqueue_str (notesq, GTXT ("\n")));
+ return info;
+}
+
+char *
+PreviewExp::mqueue_str (Emsgqueue *msgqueue, char *null_str)
+{
+ char *mesgs = pr_mesgs (msgqueue->fetch (), null_str, "");
+ char *last = mesgs + strlen (mesgs) - 1;
+ if (*last == '\n')
+ *last = '\0';
+ return mesgs;
+}
diff --git a/gprofng/src/PreviewExp.h b/gprofng/src/PreviewExp.h
new file mode 100644
index 00000000000..8b7834aff59
--- /dev/null
+++ b/gprofng/src/PreviewExp.h
@@ -0,0 +1,49 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _PREVIEW_EXP_H
+#define _PREVIEW_EXP_H
+
+#include "Experiment.h"
+#include "vec.h"
+
+class PreviewExp : public Experiment
+{
+public:
+ PreviewExp ();
+ ~PreviewExp ();
+
+ virtual Exp_status experiment_open (char *path);
+
+ Vector<char*> *preview_info ();
+
+ char *
+ getArgList ()
+ {
+ return uarglist;
+ }
+
+private:
+ char *mqueue_str (Emsgqueue *msgqueue, char *null_str);
+
+ int is_group;
+};
+
+#endif /* ! _PREVIEW_EXP_H */
diff --git a/gprofng/src/Print.cc b/gprofng/src/Print.cc
new file mode 100644
index 00000000000..d6662df4745
--- /dev/null
+++ b/gprofng/src/Print.cc
@@ -0,0 +1,3485 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <stdlib.h>
+#include <ctype.h>
+#include <string.h>
+#include <math.h>
+#include <assert.h>
+#include <libintl.h>
+//#include <libgen.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <fcntl.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include "util.h"
+#include "Dbe.h"
+#include "StringBuilder.h"
+#include "DbeSession.h"
+#include "DbeView.h"
+#include "Settings.h"
+#include "Print.h"
+#include "DbeView.h"
+#include "Experiment.h"
+#include "MetricList.h"
+#include "Module.h"
+#include "Function.h"
+#include "DataSpace.h"
+#include "DataObject.h"
+#include "FilterExp.h"
+#include "LoadObject.h"
+#include "Emsg.h"
+#include "Table.h"
+#include "DbeFile.h"
+#include "CallStack.h"
+
+int
+er_print_common_display::open (Print_params *params)
+{
+ pr_params = *params;
+ pr_params.name = dbe_strdup (params->name);
+ if (params->dest == DEST_PRINTER)
+ {
+ tmp_file = dbeSession->get_tmp_file_name (NTXT ("print"), false);
+ dbeSession->tmp_files->append (strdup (tmp_file));
+ out_file = fopen (tmp_file, NTXT ("w"));
+ }
+ else if (params->dest == DEST_OPEN_FILE)
+ out_file = pr_params.openfile;
+ else
+ out_file = fopen (pr_params.name, NTXT ("w"));
+
+ if (out_file == NULL)
+ // Failure
+ return 1;
+ return 0;
+}
+
+bool
+er_print_common_display::print_output ()
+{
+ char *sys_call;
+ bool ret = true;
+ if (pr_params.dest != DEST_OPEN_FILE)
+ fclose (out_file);
+
+ if (pr_params.dest == DEST_PRINTER)
+ {
+ if (streq ((char *) pr_params.name, NTXT ("")))
+ sys_call = dbe_sprintf ("(/usr/bin/lp -c -n%d %s) 2>/dev/null 1>&2",
+ pr_params.ncopies, tmp_file);
+ else
+ sys_call = dbe_sprintf ("(/usr/bin/lp -c -d%s -n%d %s) 2>/dev/null 1>&2",
+ pr_params.name, pr_params.ncopies, tmp_file);
+ if (system (sys_call) != 0)
+ ret = false;
+ unlink (tmp_file);
+ free (sys_call);
+ }
+
+ return ret;
+}
+
+// Return the report. If the report size is greater than max, return truncated report
+// Allocates memory, so the caller should free this memory.
+
+char *
+er_print_common_display::get_output (int maxsize)
+{
+ off_t max = (off_t) maxsize;
+ if (out_file != (FILE *) NULL)
+ {
+ fclose (out_file); // close tmp_file
+ out_file = (FILE *) NULL;
+ }
+ struct stat sbuf;
+ int st = stat (tmp_file, &sbuf);
+ if (st == 0)
+ {
+ off_t sz = sbuf.st_size;
+ if (sz > max)
+ return dbe_sprintf (GTXT ("Error: report is too long.\n"));
+ if (sz <= 0)
+ return dbe_sprintf (GTXT ("Error: empty temporary file: %s\n"),
+ tmp_file);
+ max = sz;
+ }
+
+ FILE *f = fopen (tmp_file, "r");
+ if (f == NULL)
+ return dbe_sprintf (GTXT ("Error: cannot open temporary file: %s\n"),
+ tmp_file);
+ char *report = (char *) malloc (max);
+ if (report)
+ {
+ if (1 != fread (report, max - 1, 1, f))
+ {
+ fclose (f);
+ free (report);
+ return dbe_sprintf (GTXT ("Error: cannot read temporary file: %s\n"),
+ tmp_file);
+ }
+ report[max - 1] = 0;
+ }
+ fclose (f);
+ return report;
+}
+
+void
+er_print_common_display::header_dump (int exp_idx)
+{
+ if (load && (exp_idx == exp_idx1))
+ {
+ load = false;
+ print_load_object (out_file);
+ }
+ print_header (dbeSession->get_exp (exp_idx), out_file);
+}
+
+char *
+pr_load_objects (Vector<LoadObject*> *loadobjects, char *lead)
+{
+ int size, i;
+ LoadObject *lo;
+ Emsg *m;
+ char *msg;
+ StringBuilder sb;
+ char *lo_name;
+ size = loadobjects->size ();
+ for (i = 0; i < size; i++)
+ {
+ lo = loadobjects->fetch (i);
+ lo_name = lo->get_name ();
+ if (lo_name != NULL)
+ {
+ size_t len = strlen (lo_name);
+ if (len > 7 && streq (lo_name + len - 7, NTXT (".class>")))
+ continue;
+ }
+
+ // print the segment name
+ sb.append (lead);
+ sb.append (NTXT (" "));
+ sb.append (lo->get_name ());
+ sb.append (NTXT (" ("));
+ sb.append (lo->get_pathname ());
+ sb.append (NTXT (")\n"));
+
+ // and any warnings
+ m = lo->fetch_warnings ();
+ if (m != NULL)
+ {
+ msg = pr_mesgs (m, NULL, NTXT (" "));
+ sb.append (msg);
+ free (msg);
+ }
+ }
+ return sb.toString ();
+}
+
+char *
+pr_mesgs (Emsg *msg, const char *null_str, const char *lead)
+{
+ Emsg *m;
+ StringBuilder sb;
+ if (msg == NULL)
+ return dbe_strdup (null_str);
+ for (m = msg; m; m = m->next)
+ {
+ sb.append (lead);
+ sb.append (m->get_msg ());
+ sb.append (NTXT ("\n"));
+ }
+ return sb.toString ();
+}
+
+void
+print_load_object (FILE *out_file)
+{
+ Vector<LoadObject*> *loadobjects = dbeSession->get_text_segments ();
+ char *msg = pr_load_objects (loadobjects, NTXT ("\t"));
+ fprintf (out_file, GTXT ("Load Object Coverage:\n"));
+ fprintf (out_file, NTXT ("%s"), msg);
+ fprintf (out_file,
+ "----------------------------------------------------------------\n");
+ free (msg);
+ delete loadobjects;
+}
+
+void
+print_header (Experiment *exp, FILE *out_file)
+{
+ fprintf (out_file, GTXT ("Experiment: %s\n"), exp->get_expt_name ());
+ char *msg = pr_mesgs (exp->fetch_notes (), NTXT (""), NTXT (""));
+ fprintf (out_file, NTXT ("%s"), msg);
+ free (msg);
+
+ msg = pr_mesgs (exp->fetch_errors (), GTXT ("No errors\n"), NTXT (""));
+ fprintf (out_file, NTXT ("%s"), msg);
+ free (msg);
+
+ msg = pr_mesgs (exp->fetch_warnings (), GTXT ("No warnings\n"), NTXT (""));
+ fprintf (out_file, NTXT ("%s"), msg);
+ free (msg);
+
+ msg = pr_mesgs (exp->fetch_comments (), NTXT (""), NTXT (""));
+ fprintf (out_file, NTXT ("%s"), msg);
+ free (msg);
+
+ msg = pr_mesgs (exp->fetch_pprocq (), NTXT (""), NTXT (""));
+ fprintf (out_file, NTXT ("%s"), msg);
+ free (msg);
+}
+
+void
+get_width (Hist_data *data,
+ MetricList *metrics_list, Metric::HistMetric *hist_metric)
+{
+ Metric *mitem;
+ Metric::HistMetric *hitem;
+ int last_column;
+ int index;
+
+ // find the last visible column.
+ last_column = 0;
+ Vec_loop (Metric*, metrics_list->get_items (), index, mitem)
+ {
+ if (mitem->is_visible () || mitem->is_tvisible () || mitem->is_pvisible ())
+ last_column = index;
+ }
+
+ // find the width for each column.
+
+ Vec_loop (Metric*, metrics_list->get_items (), index, mitem)
+ {
+ hitem = &hist_metric[index];
+
+ if (mitem->is_visible ())
+ {
+ if (mitem->get_vtype () == VT_LABEL)
+ {
+ if (index == last_column)
+ hitem->maxvalue_width = 0;
+ else
+ hitem->maxvalue_width = data->name_maxlen ();
+ // truncate names which will be too long
+ if (hitem->maxvalue_width > MAX_LEN - 3)
+ hitem->maxvalue_width = MAX_LEN - 3;
+ }
+ else if (mitem->get_vtype () == VT_ADDRESS)
+ {
+ hitem->maxvalue_width = data->value_maxlen (index);
+ if (hitem->maxvalue_width < 13)
+ hitem->maxvalue_width = 13;
+ }
+ else
+ hitem->maxvalue_width = data->value_maxlen (index);
+ }
+ else
+ hitem->maxvalue_width = 0;
+
+ if (mitem->is_tvisible ())
+ {
+ if (mitem->get_visbits () & VAL_RATIO)
+ hitem->maxtime_width = data->value_maxlen (index);
+ else
+ hitem->maxtime_width = data->time_maxlen (index,
+ dbeSession->get_clock (-1));
+ }
+ else
+ {
+ hitem->maxtime_width = 0;
+ }
+ }
+}
+
+void
+get_format (char **fmt_int, char **fmt_real0, char **fmt_real1,
+ MetricList *metrics_list, Metric::HistMetric *hist_metric,
+ int nspace)
+{
+ Metric *mitem;
+ Metric::HistMetric *hitem;
+ int index;
+ int visible, tvisible, pvisible;
+ size_t maxlen;
+ bool prev;
+ char numstr[MAX_LEN], pstr_int[MAX_LEN],
+ pstr_real0[MAX_LEN], pstr_real1[MAX_LEN];
+
+ // find the width for each column.
+ Vec_loop (Metric*, metrics_list->get_items (), index, mitem)
+ {
+ hitem = &hist_metric[index];
+ visible = mitem->is_visible ();
+ tvisible = mitem->is_tvisible ();
+ pvisible = mitem->is_pvisible ();
+ *pstr_int = *pstr_real0 = *pstr_real1 = '\0';
+
+ // Get 'Show Value' format
+ const char *sign = (mitem->get_visbits () & VAL_DELTA) ? "+" : "";
+ if (visible)
+ {
+ maxlen = hitem->maxvalue_width;
+ switch (mitem->get_vtype2 ())
+ {
+ case VT_DOUBLE:
+ if (mitem->get_visbits () & VAL_RATIO)
+ {
+ snprintf (numstr, sizeof (numstr), "x %%#%d.0lf ",
+ (int) (maxlen - 3));
+ snprintf (pstr_real0, sizeof (pstr_real0), numstr, 0.0);
+ snprintf (pstr_real1, sizeof (pstr_real1), "x%%s%%%d.3lf ",
+ (int) maxlen);
+ }
+ else
+ {
+ snprintf (numstr, sizeof (numstr), "%%#%s%d.0lf ", sign,
+ (int) (maxlen - 3));
+ snprintf (pstr_real0, sizeof (pstr_real0), numstr, 0.0);
+ snprintf (pstr_real1, sizeof (pstr_real1), "%%s%%%s%d.3lf ",
+ sign, (int) maxlen);
+ }
+ break;
+ case VT_INT:
+ snprintf (pstr_int, sizeof (pstr_int), "%%%s%dd ", sign,
+ (int) maxlen);
+ break;
+ case VT_LLONG:
+ snprintf (pstr_int, sizeof (pstr_int), "%%%s%dlld ", sign,
+ (int) maxlen);
+ break;
+ case VT_ULLONG:
+ snprintf (pstr_int, sizeof (pstr_int), "%%%s%dllu ", sign,
+ (int) maxlen);
+ break;
+ case VT_ADDRESS:
+ if (maxlen <= 13)
+ {
+ snprintf (pstr_int, sizeof (pstr_int), "%%%dd:0x%%08x", 2);
+ }
+ else
+ {
+ snprintf (pstr_int, sizeof (pstr_int), "%%%dd:0x%%08x",
+ (int) (maxlen - 13));
+ }
+ break;
+ case VT_FLOAT:
+ snprintf (numstr, sizeof (numstr), "%%#%d.0f ",
+ (int) (maxlen - 3));
+ snprintf (pstr_real0, sizeof (pstr_real0), numstr, 0.0);
+ snprintf (pstr_real1, sizeof (pstr_real1), "%%%d.3f ",
+ (int) maxlen);
+ break;
+ case VT_SHORT:
+ snprintf (pstr_int, sizeof (pstr_int), "%%%dhu ", (int) maxlen);
+ break;
+ case VT_LABEL:
+ if (maxlen == 0) // last column
+ snprintf (pstr_int, sizeof (pstr_int), NTXT ("%%s%%s"));
+ else if (maxlen + nspace >= MAX_LEN - 3)
+ snprintf (pstr_int, sizeof (pstr_int), NTXT ("%%s%%-%d.%ds "),
+ MAX_LEN - 7, MAX_LEN - 7);
+ else
+ snprintf (pstr_int, sizeof (pstr_int), NTXT ("%%s%%-%ds "),
+ (int) (maxlen + nspace));
+ break;
+ default:
+ break;
+ }
+ }
+
+ // Get 'Show Time' format
+ if (tvisible)
+ {
+ maxlen = hitem->maxtime_width;
+ if (mitem->get_visbits () & VAL_RATIO)
+ {
+ snprintf (numstr, sizeof (numstr), " %%%s#%d.0lf ",
+ sign, (int) (maxlen - 3));
+ snprintf (pstr_real0, sizeof (pstr_real0), numstr, 0.0);
+ snprintf (pstr_real1, sizeof (pstr_real1), "%%s%%%s%d.3lf ",
+ sign, (int) maxlen);
+ }
+ else
+ {
+ snprintf (numstr, sizeof (numstr), "%%%s#%d.0lf ",
+ sign, (int) (maxlen - 3));
+ snprintf (pstr_real0, sizeof (pstr_real0), numstr, 0.0);
+ snprintf (pstr_real1, sizeof (pstr_real1), "%%s%%%s%d.3lf ",
+ sign, (int) maxlen);
+ }
+ }
+
+ // Copy format
+ if (*pstr_int)
+ fmt_int[index] = dbe_strdup (pstr_int);
+ else
+ fmt_int[index] = NULL;
+
+ if (*pstr_real0)
+ fmt_real0[index] = dbe_strdup (pstr_real0);
+ else
+ fmt_real0[index] = NULL;
+
+ if (*pstr_real1)
+ fmt_real1[index] = dbe_strdup (pstr_real1);
+ else
+ fmt_real1[index] = NULL;
+
+ // Set total width
+ hitem->width = 0;
+ if (hitem->maxvalue_width > 0)
+ {
+ hitem->width += hitem->maxvalue_width;
+ prev = true;
+ }
+ else
+ prev = false;
+
+ if (hitem->maxtime_width > 0)
+ {
+ if (prev)
+ hitem->width++;
+ hitem->width += hitem->maxtime_width;
+ prev = true;
+ }
+
+ if (pvisible)
+ {
+ if (prev)
+ hitem->width++;
+ hitem->width += 6; // adjust to change format from xx.yy%
+ }
+ if (visible || tvisible || pvisible)
+ mitem->legend_width (hitem, 2);
+ }
+}
+
+static char *
+delTrailingBlanks (char *s)
+{
+ for (int i = (int) strlen (s) - 1; i >= 0 && s[i] == ' '; i--)
+ s[i] = 0;
+ return s;
+}
+
+/**
+ * Print the 3-line header with column heads for the metrics
+ * Return offset of "Name" column (this is needed to print Callers-Callees)
+ */
+int
+print_label (FILE *out_file, MetricList *metrics_list,
+ Metric::HistMetric *hist_metric, int space)
+{
+ char line0[2 * MAX_LEN], line1[2 * MAX_LEN];
+ char line2[2 * MAX_LEN], line3[2 * MAX_LEN];
+ int name_offset = 0;
+ *line0 = *line1 = *line2 = *line3 = '\0';
+ Vector<Metric*> *mlist = metrics_list->get_items ();
+ for (int index = 0, mlist_sz = mlist->size (); index < mlist_sz; index++)
+ {
+ Metric *mitem = mlist->fetch (index);
+ if (mitem->is_visible () || mitem->is_tvisible () || mitem->is_pvisible ())
+ {
+ Metric::HistMetric *hitem = hist_metric + index;
+ char *fmt;
+ if (index > 0 && mitem->get_type () == Metric::ONAME)
+ {
+ fmt = NTXT (" %-*s");
+ name_offset = strlen (line1);
+ }
+ else
+ fmt = NTXT ("%-*s");
+ int width = (int) hitem->width;
+ size_t len = strlen (line1);
+ snprintf (line1 + len, sizeof (line1) - len, fmt, width,
+ hitem->legend1);
+ len = strlen (line2);
+ snprintf (line2 + len, sizeof (line2) - len, fmt, width,
+ hitem->legend2);
+ len = strlen (line3);
+ snprintf (line3 + len, sizeof (line3) - len, fmt, width,
+ hitem->legend3);
+ len = strlen (line0);
+ snprintf (line0 + len, sizeof (line0) - len, fmt, width,
+ mitem->legend ? mitem->legend : NTXT (""));
+ }
+ }
+ char *s = delTrailingBlanks (line0);
+ if (*s)
+ fprintf (out_file, NTXT ("%*s%s\n"), space, NTXT (""), s);
+ fprintf (out_file, NTXT ("%*s%s\n"), space, NTXT (""), delTrailingBlanks (line1));
+ fprintf (out_file, NTXT ("%*s%s\n"), space, NTXT (""), delTrailingBlanks (line2));
+ fprintf (out_file, NTXT ("%*s%s\n"), space, NTXT (""), delTrailingBlanks (line3));
+ return name_offset;
+}
+
+static int
+print_one_visible (FILE *out_file, char *fmt_int, char *fmt_real0, char *fmt_real1,
+ TValue *value, int visbits)
+{
+ int nc = 0;
+ switch (value->tag)
+ {
+ case VT_DOUBLE:
+ if (value->d == 0.0)
+ nc = fprintf (out_file, fmt_real0);
+ else
+ {
+ if (visbits & VAL_RATIO)
+ {
+ if (value->d > 99.999)
+ nc = fprintf (out_file, fmt_real1, NTXT (">"), 99.999);
+ else
+ nc = fprintf (out_file, fmt_real1, NTXT (" "), value->d);
+ }
+ else
+ nc = fprintf (out_file, fmt_real1, NTXT (""), value->d);
+ }
+ break;
+ case VT_INT:
+ nc = fprintf (out_file, fmt_int, value->i);
+ break;
+ case VT_LLONG:
+ case VT_ULLONG:
+ nc = fprintf (out_file, fmt_int, value->ll);
+ break;
+ case VT_ADDRESS:
+ nc = fprintf (out_file, fmt_int, ADDRESS_SEG (value->ll),
+ ADDRESS_OFF (value->ll));
+ break;
+ case VT_FLOAT:
+ if (value->f == 0.0)
+ nc = fprintf (out_file, fmt_real0);
+ else
+ nc = fprintf (out_file, fmt_real1, value->f);
+ break;
+ case VT_SHORT:
+ nc = fprintf (out_file, fmt_int, value->s);
+ break;
+ // ignoring the following cases (why?)
+ case VT_HRTIME:
+ case VT_LABEL:
+ case VT_OFFSET:
+ break;
+ }
+ return nc;
+}
+
+static int
+print_one_tvisible (FILE *out_file, char *fmt_real0, char *fmt_real1,
+ TValue *value, int visbits, int clock)
+{
+ int nc;
+ if (value->ll == 0LL)
+ nc = fprintf (out_file, fmt_real0);
+ else
+ {
+ if (visbits & VAL_RATIO)
+ {
+ if (value->d > 99.999)
+ nc = fprintf (out_file, fmt_real1, NTXT (">"), 99.999);
+ else
+ nc = fprintf (out_file, fmt_real1, NTXT (" "), value->d);
+ }
+ else
+ nc = fprintf (out_file, fmt_real1, "", 1.e-6 * value->ll / clock);
+ }
+ return nc;
+}
+
+static void
+print_one (FILE *out_file, Hist_data *data, Hist_data::HistItem *item,
+ char **fmt_int, char **fmt_real0, char **fmt_real1,
+ MetricList *metrics_list, Metric::HistMetric *hist_metric,
+ char *mark, Histable::NameFormat nfmt)
+{
+ Metric *mitem;
+ Metric::HistMetric *hitem;
+ int index, nc, np, i;
+ int visible, tvisible, pvisible;
+ TValue *value;
+ double percent;
+
+ if (item->type == Module::AT_EMPTY)
+ {
+ fprintf (out_file, nl);
+ return;
+ }
+
+ // set name_is_Total
+ int name_is_Total = 0;
+
+ Vec_loop (Metric*, metrics_list->get_items (), index, mitem)
+ {
+ if (mitem->get_type () != Metric::ONAME)
+ continue;
+ name_is_Total = strcmp (item->obj->get_name (), GTXT ("<Total>")) == 0;
+ break;
+ }
+
+ np = 0;
+ Vec_loop (Metric*, metrics_list->get_items (), index, mitem)
+ {
+ visible = mitem->is_visible ();
+ tvisible = mitem->is_tvisible ();
+ pvisible = mitem->is_pvisible ();
+
+ // alignment
+ for (i = 0; i < np; i++)
+ fputc (' ', out_file);
+
+ hitem = &hist_metric[index];
+ nc = 0;
+ if (tvisible)
+ {
+ value = &(item->value[index]);
+ nc = print_one_tvisible (out_file, fmt_real0[index], fmt_real1[index],
+ value, mitem->get_visbits (),
+ dbeSession->get_clock (-1));
+ }
+ else
+ nc = 0;
+
+ if (visible)
+ {
+ if (mitem->get_vtype () == VT_LABEL)
+ {
+ value = &(item->value[index]);
+ if (value->tag == VT_OFFSET)
+ nc += fprintf (out_file, fmt_int[index], mark,
+ ((DataObject*) (item->obj))->get_offset_name ());
+ else
+ nc += fprintf (out_file, fmt_int[index], mark,
+ item->obj->get_name (nfmt));
+ }
+ else if (name_is_Total &&
+ (strcmp (mitem->get_username (), "Block Covered %") == 0
+ || strcmp (mitem->get_username (), "Instr Covered %") == 0))
+ {
+ char stmp[128];
+ snprintf (stmp, sizeof (stmp), fmt_int[index], 0);
+
+ /* and now blank that '0' out */
+ for (int ii = 0; ii < 128; ii++)
+ {
+ if (stmp[ii] != '0')
+ continue;
+ stmp[ii] = ' ';
+ break;
+ }
+ nc += fprintf (out_file, stmp);
+ }
+ else
+ nc += print_one_visible (out_file, fmt_int[index], fmt_real0[index],
+ fmt_real1[index], &(item->value[index]),
+ mitem->get_visbits ());
+ }
+
+ if (pvisible)
+ {
+ percent = data->get_percentage (item->value[index].to_double (), index);
+ if (percent == 0.0)
+ // adjust to change format from xx.yy%
+ nc += fprintf (out_file, NTXT ("%#4.0f "), 0.);
+ else
+ // adjust format below to change format from xx.yy%
+ nc += fprintf (out_file, NTXT ("%6.2f "), (100.0 * percent));
+ }
+ np = (int) (hitem->width - nc);
+ }
+ fprintf (out_file, nl);
+}
+
+void
+print_content (FILE *out_file, Hist_data *data,
+ char **fmt_int, char **fmt_real0, char **fmt_real1,
+ MetricList *metrics_list, Metric::HistMetric *hist_metric,
+ int limit, Histable::NameFormat nfmt)
+{
+ // printing contents.
+ for (int i = 0; i < limit; i++)
+ {
+ Hist_data::HistItem *item = data->fetch (i);
+ print_one (out_file, data, item, fmt_int, fmt_real0, fmt_real1,
+ metrics_list, hist_metric, NTXT (" "), nfmt);
+ }
+}
+
+er_print_histogram::er_print_histogram (DbeView *_dbev, Hist_data *data,
+ MetricList *metrics_list,
+ Print_mode disp_type, int limit,
+ char *sort_name, Histable *sobj,
+ bool show_load, bool show_header)
+{
+ hist_data = data;
+ mlist = metrics_list;
+ type = disp_type;
+ number_entries = limit;
+ sort_metric = sort_name;
+ sel_obj = sobj;
+ dbev = _dbev;
+ exp_idx1 = 0;
+ exp_idx2 = dbeSession->nexps () - 1;
+ load = show_load;
+ header = show_header;
+}
+
+void
+er_print_histogram::dump_list (int limit)
+{
+ Histable::NameFormat nfmt = dbev->get_name_format ();
+ StringBuilder sb;
+ char *title = NULL; // No title for some formats
+ enum PrintMode pm = dbev->get_printmode ();
+
+ // create a header line, except for delimiter-separated list output
+ if (pm != PM_DELIM_SEP_LIST)
+ {
+ if (hist_data->type == Histable::FUNCTION)
+ sb.append (GTXT ("Functions sorted by metric: "));
+ else if (hist_data->type == Histable::INSTR)
+ sb.append (GTXT ("PCs sorted by metric: "));
+ else if (hist_data->type == Histable::LINE)
+ sb.append (GTXT ("Lines sorted by metric: "));
+ else if (hist_data->type == Histable::DOBJECT)
+ sb.append (GTXT ("Dataobjects sorted by metric: "));
+ else
+ sb.append (GTXT ("Objects sorted by metric: "));
+ sb.append (sort_metric);
+ title = sb.toString ();
+ }
+
+ switch (pm)
+ {
+ case PM_TEXT:
+ {
+ Metric::HistMetric *hist_metric = hist_data->get_histmetrics ();
+ fprintf (out_file, NTXT ("%s\n\n"), title); //print title
+ hist_data->print_label (out_file, hist_metric, 0);
+ hist_data->print_content (out_file, hist_metric, limit);
+ fprintf (out_file, nl);
+ break;
+ }
+ case PM_HTML:
+ {
+ print_html_title (out_file, title);
+ print_html_label (out_file, mlist);
+ print_html_content (out_file, hist_data, mlist, limit, nfmt);
+ print_html_trailer (out_file);
+ break;
+ }
+ case PM_DELIM_SEP_LIST:
+ {
+ char delim = dbev->get_printdelimiter ();
+ print_delim_label (out_file, mlist, delim);
+ print_delim_content (out_file, hist_data, mlist, limit, nfmt, delim);
+ print_delim_trailer (out_file, delim);
+ break;
+ }
+ }
+ free (title);
+}
+
+void
+er_print_histogram::dump_annotated_dataobjects (Vector<int> *marks,
+ int ithreshold)
+{
+ Metric::HistMetric *hist_metric;
+ char **fmt_int, **fmt_real0, **fmt_real1;
+ int no_metrics = mlist->get_items ()->size ();
+ int name_index = -1;
+ Histable::NameFormat nfmt = dbev->get_name_format ();
+ if (!dbeSession->is_datamode_available ())
+ fprintf (out_file,
+ GTXT ("No dataspace information recorded in experiments\n\n"));
+
+ Hist_data *layout_data = dbev->get_data_space ()->get_layout_data (hist_data, marks, ithreshold);
+
+ for (int mind = 0; mind < no_metrics; mind++)
+ if (mlist->get_items ()->fetch (mind)->get_type () == Metric::ONAME)
+ name_index = mind;
+
+ fmt_int = new char*[no_metrics];
+ fmt_real0 = new char*[no_metrics];
+ fmt_real1 = new char*[no_metrics];
+ hist_metric = new Metric::HistMetric[no_metrics];
+
+ // use new layout_data to set metric format
+ get_width (hist_data, mlist, hist_metric);
+ get_format (fmt_int, fmt_real0, fmt_real1, mlist, hist_metric, 0);
+ snprintf (hist_metric[name_index].legend2, MAX_LEN, GTXT ("* +offset .element"));
+ print_label (out_file, mlist, hist_metric, 3);
+ fprintf (out_file, nl);
+ for (long i = 0; i < layout_data->size (); i++)
+ {
+ Hist_data::HistItem* item = layout_data->fetch (i);
+ if (marks->find (i) != -1)
+ fprintf (out_file, NTXT ("## "));
+ else
+ fprintf (out_file, NTXT (" "));
+ print_one (out_file, layout_data, item, fmt_int, fmt_real0, fmt_real1,
+ mlist, hist_metric, NTXT (" "), nfmt);
+ }
+ fprintf (out_file, nl);
+
+ // free format strings.
+ for (int i = 0; i < no_metrics; i++)
+ {
+ free (fmt_int[i]);
+ free (fmt_real0[i]);
+ free (fmt_real1[i]);
+ }
+ delete[] fmt_int;
+ delete[] fmt_real0;
+ delete[] fmt_real1;
+ delete[] hist_metric;
+ delete layout_data;
+}
+
+void
+er_print_histogram::dump_detail (int limit)
+{
+ Histable *obj;
+ Hist_data *current_data;
+ Histable::Type htype;
+ TValue *values;
+ double dvalue, percent;
+ MetricList *prop_mlist = new MetricList (mlist);
+ Metric *mitem;
+ int index, i;
+ size_t max_len, len, smax_len, slen;
+ Vaddr pc;
+ Module *module;
+ LoadObject *loadobject;
+ char *sname, *oname, *lname, *alias, *mangle;
+ char fmt_name[MAX_LEN];
+ char fmt_elem[MAX_LEN];
+ char fmt_real1[MAX_LEN], fmt_real2[MAX_LEN];
+ char fmt_int1[MAX_LEN], fmt_int2[MAX_LEN];
+ char fmt_long1[MAX_LEN], fmt_long2[MAX_LEN], fmt_long3[MAX_LEN];
+ char fmt_int0[MAX_LEN], fmt_long0[MAX_LEN];
+ char numstr[MAX_LEN];
+
+ Histable::NameFormat nfmt = dbev->get_name_format ();
+
+ // Check max. length of metrics names
+ max_len = smax_len = 0;
+
+ Vec_loop (Metric*, prop_mlist->get_items (), index, mitem)
+ {
+ mitem->set_vvisible (true);
+ if (mitem->get_vtype () == VT_LABEL)
+ continue;
+
+ if (mitem->get_subtype () != Metric::STATIC)
+ {
+ mitem->set_pvisible (true);
+ len = hist_data->value_maxlen (index);
+ if (max_len < len)
+ max_len = len;
+ slen = strlen (mitem->get_name ());
+ if (smax_len < slen)
+ smax_len = slen;
+ }
+ }
+
+ // now get the length of the other (non-performance-data) messages
+ if (hist_data->type == Histable::FUNCTION)
+ {
+ slen = strlen (GTXT ("Source File"));
+ if (smax_len < slen)
+ smax_len = slen;
+ slen = strlen (GTXT ("Object File"));
+ if (smax_len < slen)
+ smax_len = slen;
+ slen = strlen (GTXT ("Load Object"));
+ if (smax_len < slen)
+ smax_len = slen;
+ slen = strlen (GTXT ("Mangled Name"));
+ if (smax_len < slen)
+ smax_len = slen;
+ slen = strlen (GTXT ("Aliases"));
+ if (smax_len < slen)
+ smax_len = slen;
+ }
+ else if (hist_data->type == Histable::DOBJECT)
+ {
+ slen = strlen (GTXT ("Scope"));
+ if (smax_len < slen)
+ smax_len = slen;
+ slen = strlen (GTXT ("Type"));
+ if (smax_len < slen)
+ smax_len = slen;
+ slen = strlen (GTXT ("Member of"));
+ if (smax_len < slen)
+ smax_len = slen;
+ slen = strlen (GTXT ("Offset (bytes)"));
+ if (smax_len < slen)
+ smax_len = slen;
+ slen = strlen (GTXT ("Size (bytes)"));
+ if (smax_len < slen)
+ smax_len = slen;
+ slen = strlen (GTXT ("Elements"));
+ if (smax_len < slen)
+ smax_len = slen;
+ }
+ snprintf (fmt_name, sizeof (fmt_name), NTXT ("\t%%%ds: "), (int) smax_len);
+ snprintf (fmt_elem, sizeof (fmt_elem), NTXT ("\t%%%ds "), (int) smax_len);
+ snprintf (numstr, sizeof (numstr), "%%#%d.0lf ( %#1.0f %%%%%%%%)\n",
+ (int) (max_len - 3), 0.);
+ snprintf (fmt_real1, sizeof (fmt_real1), numstr, 0.0);
+ snprintf (fmt_real2, sizeof (fmt_real2), NTXT ("%%%d.3lf (%%5.1f%%%%)\n"),
+ (int) max_len);
+ snprintf (fmt_int0, sizeof (fmt_int0), NTXT ("%%%dd\n"), (int) max_len);
+ snprintf (numstr, sizeof (numstr), NTXT ("%%%dd ( %#1.0f %%%%%%%%)\n"),
+ (int) max_len, 0.);
+ snprintf (fmt_int1, sizeof (fmt_int1), numstr, 0);
+ snprintf (fmt_int2, sizeof (fmt_int2), NTXT ("%%%dd (%%5.1f%%%%)\n"),
+ (int) max_len);
+ snprintf (fmt_long0, sizeof (fmt_long0), NTXT ("%%%dllu\n"), (int) max_len);
+ snprintf (numstr, sizeof (numstr), NTXT ("%%%dd ( %#1.0f %%%%%%%%)\n"),
+ (int) max_len, 0.);
+ snprintf (fmt_long1, sizeof (fmt_long1), numstr, 0);
+ snprintf (fmt_long2, sizeof (fmt_long2), "%%%dllu (%%5.1f%%%%)\n",
+ (int) max_len);
+ snprintf (numstr, sizeof (numstr), NTXT ("\t%%%ds %%%%%dllu\n"),
+ (int) (smax_len + 1), (int) max_len);
+ snprintf (fmt_long3, sizeof (fmt_long3), numstr, GTXT ("Count:"));
+ snprintf (numstr, sizeof (numstr), "%%%dd ( %#1.0f %%%%%%%%) %%#%d.0lf\n",
+ (int) max_len, 0., (int) (max_len - 6));
+
+ // now loop over the objects
+ int num_printed_items = 0;
+ for (i = 0; i < hist_data->size (); i++)
+ {
+ if (hist_data->type == Histable::FUNCTION)
+ {
+ if (num_printed_items >= limit)
+ break;
+ obj = sel_obj ? sel_obj : hist_data->fetch (i)->obj;
+ htype = obj->get_type ();
+
+ // ask the view for all the data for the object
+ // xxxxx may be expensive to rescan all packets via get_hist_data()
+ current_data = dbev->get_hist_data (prop_mlist,
+ htype, 0, Hist_data::SELF, obj);
+ if (current_data->size () == 0)
+ continue;
+ values = current_data->fetch (0)->value;
+ }
+ else
+ {
+ obj = hist_data->fetch (i)->obj;
+ DataObject *dobj = (DataObject*) obj;
+ if (sel_obj)
+ {
+ // print selected item and its members
+ if (sel_obj != obj
+ && (DataObject*) sel_obj != dobj->get_parent ())
+ // not a match, advance to next item
+ continue;
+ }
+ else if (num_printed_items >= limit)
+ break;
+ htype = obj->get_type ();
+ values = hist_data->fetch (i)->value;
+ current_data = hist_data;
+ }
+
+ if (num_printed_items)
+ // if this isn't the first one, add a blank line
+ fprintf (out_file, NTXT ("\n"));
+ num_printed_items++;
+
+ // Print full object name
+ if (htype != Histable::DOBJECT)
+ fprintf (out_file, NTXT ("%s\n"), obj->get_name (nfmt));
+ else
+ {
+ DataObject *dobj = (DataObject*) obj;
+ if (!dobj->get_parent ())
+ fprintf (out_file, NTXT ("%s\n"), obj->get_name (nfmt));
+ else
+ fprintf (out_file, NTXT (" %s\n"), obj->get_name (nfmt));
+ }
+
+ Vec_loop (Metric*, prop_mlist->get_items (), index, mitem)
+ {
+ if (mitem->get_vtype () == VT_LABEL)
+ continue;
+ if (mitem->get_subtype () == Metric::STATIC
+ && htype == Histable::DOBJECT)
+ continue;
+ fprintf (out_file, fmt_name, mitem->get_name ());
+
+ if (mitem->get_value_styles () & VAL_PERCENT)
+ {
+ dvalue = values[index].to_double ();
+ switch (mitem->get_vtype ())
+ {
+ case VT_DOUBLE:
+ if (dvalue == 0.0)
+ fprintf (out_file, fmt_real1);
+ else
+ fprintf (out_file, fmt_real2, dvalue, 100.0
+ * current_data->get_percentage (dvalue, index));
+ break;
+ case VT_INT:
+ if (dvalue == 0.0)
+ fprintf (out_file, fmt_int1);
+ else
+ fprintf (out_file, fmt_int2, (int) dvalue, 100.0
+ * current_data->get_percentage (dvalue, index));
+ break;
+ case VT_LLONG:
+ case VT_ULLONG:
+ if (values[index].ll == 0LL)
+ {
+ if (mitem->is_time_val ())
+ {
+ fprintf (out_file, fmt_real1);
+ fprintf (out_file, fmt_long3, 0LL);
+ }
+ else
+ fprintf (out_file, fmt_long1);
+ }
+ else
+ {
+ percent = 100.0 *
+ current_data->get_percentage (dvalue, index);
+ if (mitem->is_time_val ())
+ {
+ dvalue /= 1.e+6 * dbeSession->get_clock (-1);
+ fprintf (out_file, fmt_real2, dvalue, percent);
+ fprintf (out_file, fmt_long3, values[index].ll);
+ }
+ else
+ fprintf (out_file, fmt_long2, values[index].ll,
+ percent);
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ else
+ {
+ switch (mitem->get_vtype ())
+ {
+ case VT_INT:
+ fprintf (out_file, fmt_int0, values[index].i);
+ break;
+ case VT_LLONG:
+ case VT_ULLONG:
+ fprintf (out_file, fmt_long0, values[index].ll);
+ break;
+ case VT_ADDRESS:
+ pc = values[index].ll;
+ fprintf (out_file, NTXT ("%u:0x%08x\n"), ADDRESS_SEG (pc),
+ ADDRESS_OFF (pc));
+ break;
+ case VT_DOUBLE:
+ if (values[index].d == 0.0)
+ fprintf (out_file, fmt_real1);
+ else
+ fprintf (out_file, "\t%*.3lf\n", (int) (max_len - 5), values[index].d);
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
+ // now add the descriptive information about the object
+ if (htype != Histable::DOBJECT)
+ {
+ Function *func = (Function*) obj->convertto (Histable::FUNCTION);
+ if (func && func->get_type () == Histable::FUNCTION)
+ {
+ // Print the source/object/load-object files & aliases
+ oname = lname = alias = NULL;
+ sname = func->getDefSrcName ();
+ mangle = func->get_mangled_name ();
+ if (mangle && streq (func->get_name (), mangle))
+ mangle = NULL;
+ module = func->module;
+ if (module)
+ {
+ oname = module->get_name ();
+ loadobject = module->loadobject;
+ if (loadobject)
+ {
+ lname = loadobject->get_pathname ();
+ alias = loadobject->get_alias (func);
+ }
+ }
+
+ if (htype == Histable::INSTR && dbeSession->is_datamode_available ())
+ alias = ((DbeInstr*) obj)->get_descriptor ();
+
+ fprintf (out_file, fmt_name, GTXT ("Source File"));
+ if (sname)
+ fprintf (out_file, NTXT ("%s"), sname);
+ fprintf (out_file, NTXT ("\n"));
+
+ fprintf (out_file, fmt_name, GTXT ("Object File"));
+ if (oname)
+ fprintf (out_file, NTXT ("%s"), oname);
+ fprintf (out_file, NTXT ("\n"));
+
+ fprintf (out_file, fmt_name, GTXT ("Load Object"));
+ if (lname)
+ fprintf (out_file, NTXT ("%s"), lname);
+ fprintf (out_file, NTXT ("\n"));
+
+ fprintf (out_file, fmt_name, GTXT ("Mangled Name"));
+ if (mangle)
+ fprintf (out_file, NTXT ("%s"), mangle);
+ fprintf (out_file, NTXT ("\n"));
+ fprintf (out_file, fmt_name, GTXT ("Aliases"));
+ if (alias)
+ fprintf (out_file, NTXT ("%s"), alias);
+ fprintf (out_file, NTXT ("\n"));
+ }
+ }
+ else
+ {
+ // Print the dataobject information
+ DataObject *dobj = (DataObject*) obj;
+ Histable *scope = dobj->get_scope ();
+
+ // print the scope
+ fprintf (out_file, fmt_name, GTXT ("Scope"));
+ if (!scope)
+ fprintf (out_file, GTXT ("(Global)\n"));
+ else switch (scope->get_type ())
+ {
+ case Histable::FUNCTION:
+ fprintf (out_file, NTXT ("%s(%s)\n"),
+ ((Function*) scope)->module->get_name (),
+ scope->get_name ());
+ break;
+ case Histable::LOADOBJECT:
+ case Histable::MODULE:
+ default:
+ fprintf (out_file, NTXT ("%s\n"), scope->get_name ());
+ }
+
+ // print the type name
+ fprintf (out_file, fmt_name, GTXT ("Type"));
+ if (dobj->get_typename ())
+ fprintf (out_file, NTXT ("%s\n"), dobj->get_typename ());
+ else
+ fprintf (out_file, GTXT ("(Synthetic)\n"));
+
+ // print the offset
+ if (dobj->get_offset () != -1)
+ {
+ if (dobj->get_parent ())
+ {
+ fprintf (out_file, fmt_name, GTXT ("Member of"));
+ fprintf (out_file, NTXT ("%s\n"), dobj->get_parent ()->get_name ());
+ }
+ fprintf (out_file, fmt_name, GTXT ("Offset (bytes)"));
+ fprintf (out_file, NTXT ("%lld\n"), (long long) dobj->get_offset ());
+ }
+ // print the size
+ if (dobj->get_size ())
+ {
+ fprintf (out_file, fmt_name, GTXT ("Size (bytes)"));
+ fprintf (out_file, NTXT ("%lld\n"), (long long) dobj->get_size ());
+ }
+ }
+ if (hist_data->type == Histable::FUNCTION)
+ delete current_data;
+ }
+ if (num_printed_items == 0 && sel_obj)
+ fprintf (stderr,
+ GTXT ("Error: Specified item `%s' had no recorded metrics.\n"),
+ sel_obj->get_name ());
+ delete prop_mlist;
+}
+
+static Metric::HistMetric *
+allocateHistMetric (int no_metrics)
+{
+ Metric::HistMetric *hist_metric = new Metric::HistMetric[no_metrics];
+ for (int i = 0; i < no_metrics; i++)
+ {
+ Metric::HistMetric *hm = &hist_metric[i];
+ hm->init ();
+ }
+ return hist_metric;
+}
+
+void
+er_print_histogram::dump_gprof (int limit)
+{
+ StringBuilder sb;
+ Histable *obj;
+ Hist_data *callers;
+ Hist_data *callees;
+ Hist_data *center;
+
+ int no_metrics = mlist->get_items ()->size ();
+ Metric::HistMetric *hist_metric = allocateHistMetric (no_metrics);
+ for (int i = 0; i < limit; i++)
+ {
+ obj = sel_obj ? sel_obj : hist_data->fetch (i)->obj;
+ callers = dbev->get_hist_data (mlist, Histable::FUNCTION, 0,
+ Hist_data::CALLERS, obj);
+ callees = dbev->get_hist_data (mlist, Histable::FUNCTION, 0,
+ Hist_data::CALLEES, obj);
+ center = dbev->get_hist_data (mlist, Histable::FUNCTION, 0,
+ Hist_data::SELF, obj);
+ callers->update_max (hist_metric);
+ callees->update_max (hist_metric);
+ center->update_max (hist_metric);
+ callers->update_legend_width (hist_metric);
+ callers->print_label (out_file, hist_metric, 0);
+ callers->print_content (out_file, hist_metric, callers->size ());
+
+ if (center->size () > 0)
+ {
+ center->update_total (callers->get_totals ());
+ sb.setLength (0);
+ center->print_row (&sb, 0, hist_metric, NTXT ("*"));
+ sb.toFileLn (out_file);
+ }
+ callees->print_content (out_file, hist_metric, callees->size ());
+ fprintf (out_file, nl);
+ delete callers;
+ delete callees;
+ delete center;
+ }
+ delete[] hist_metric;
+}
+
+// dump an annotated file
+void
+dump_anno_file (FILE *fp, Histable::Type type, Module *module, DbeView *dbev,
+ MetricList *mlist, TValue *ftotal, const char *srcFile,
+ Function *func, Vector<int> *marks, int threshold, int vis_bits,
+ int src_visible, bool hex_visible, bool src_only)
+{
+ int no_metrics, lspace, mspace, tspace,
+ remain, mindex, next_mark, hidx,
+ index;
+ Metric *mitem;
+ char **fmt_int, **fmt_real0, **fmt_real1, buf[MAX_LEN];
+ Hist_data::HistItem *item;
+
+ SourceFile *srcContext = NULL;
+ bool func_scope = dbev == NULL ? false : dbev->get_func_scope ();
+ if (srcFile)
+ {
+ srcContext = module->findSource (srcFile, false);
+ if (srcContext == NULL)
+ {
+ Vector<SourceFile*> *includes = module->includes;
+ char *bname = get_basename (srcFile);
+ for (int i = 0, sz = includes ? includes->size () : 0; i < sz; i++)
+ {
+ SourceFile *sf = includes->fetch (i);
+ if (streq (get_basename (sf->get_name ()), bname))
+ {
+ srcContext = sf;
+ break;
+ }
+ }
+ }
+ if (func)
+ func_scope = true;
+ }
+ else if (func)
+ srcContext = func->getDefSrc ();
+
+ Hist_data *hdata = module->get_data (dbev, mlist, type, ftotal, srcContext,
+ func, marks, threshold, vis_bits,
+ src_visible, hex_visible,
+ func_scope, src_only);
+
+ if (hdata == NULL)
+ return;
+
+ // force the name metric to be invisible
+ MetricList *nmlist = hdata->get_metric_list ();
+ nmlist->find_metric (GTXT ("name"), Metric::STATIC)->clear_all_visbits ();
+ no_metrics = nmlist->get_items ()->size ();
+ fmt_int = new char*[no_metrics];
+ fmt_real0 = new char*[no_metrics];
+ fmt_real1 = new char*[no_metrics];
+ Metric::HistMetric *hist_metric = hdata->get_histmetrics ();
+
+ // lspace is for max line number that's inserted; use to set width
+ int max_lineno = 0;
+ Vec_loop (Hist_data::HistItem*, hdata, hidx, item)
+ {
+ if (!item->obj)
+ continue;
+ if (item->obj->get_type () == Histable::LINE
+ && ((DbeLine*) item->obj)->lineno > max_lineno)
+ max_lineno = ((DbeLine*) item->obj)->lineno;
+ else if (item->obj->get_type () == Histable::INSTR
+ && ((DbeInstr*) item->obj)->lineno > max_lineno)
+ max_lineno = ((DbeInstr*) item->obj)->lineno;
+ }
+
+ lspace = snprintf (buf, sizeof (buf), NTXT ("%d"), max_lineno);
+
+ // mspace is the space needed for all metrics, and the mark, if any
+ mspace = 0;
+ if (nmlist->get_items ()->size () > 0)
+ {
+ mspace = 3; // mark "## "
+ Vec_loop (Metric*, nmlist->get_items (), index, mitem)
+ {
+ if (mitem->is_visible () || mitem->is_tvisible ()
+ || mitem->is_pvisible ())
+ mspace += (int) hist_metric[index].width;
+ }
+ }
+ tspace = 0;
+ remain = (mspace + lspace + 3) % 8; // " " before, ". " after line#
+ if (remain)
+ { // tab alignment
+ tspace = 8 - remain;
+ mspace += tspace;
+ }
+ mindex = 0;
+ next_mark = (mindex < marks->size ()) ? marks->fetch (mindex) : -1;
+
+ // Print the header for this list
+ SourceFile *sf = srcContext ? srcContext : module->getMainSrc ();
+ char *src_name = sf->dbeFile->get_location_info ();
+ DbeFile *df = module->dbeFile;
+ if (df == NULL || (df->filetype & DbeFile::F_JAVACLASS) == 0)
+ df = module->loadobject->dbeFile;
+ char *lo_name = df->get_location_info ();
+ char *dot_o_name = lo_name;
+ if (module->dot_o_file)
+ dot_o_name = module->dot_o_file->dbeFile->get_location_info ();
+ fprintf (fp, GTXT ("Source file: %s\nObject file: %s\nLoad Object: %s\n\n"),
+ src_name, dot_o_name, lo_name);
+
+ // Print metric labels
+ if (nmlist->get_items ()->size () != 0)
+ print_label (fp, nmlist, hist_metric, 3);
+
+ // determine the name metric (not printed as a metric, though)
+ int lind = nmlist->get_listorder (GTXT ("name"), Metric::STATIC);
+
+ // now loop over the data rows -- the lines in the annotated source/disasm,
+ // including index lines, compiler commentary, etc.
+ StringBuilder sb;
+ Vec_loop (Hist_data::HistItem*, hdata, hidx, item)
+ {
+ sb.setLength (0);
+ if (item->type == Module::AT_DIS || item->type == Module::AT_QUOTE
+ || item->type == Module::AT_SRC)
+ {
+ // does this line get a high-metric mark?
+ if (hidx == next_mark)
+ {
+ sb.append (NTXT ("## "));
+ mindex++;
+ next_mark = (mindex < marks->size ()) ? marks->fetch (mindex) : -1;
+ }
+ else
+ sb.append (NTXT (" "));
+
+ hdata->print_row (&sb, hidx, hist_metric, NTXT (" "));
+ sb.toFile (fp);
+ for (int i = sb.length (); i < mspace; i++)
+ {
+ fputc (' ', fp);
+ }
+ }
+ else
+ // this line does not get any metrics; insert blanks in lieu of them
+ for (int i = 0; i < mspace; i++)
+ fputc (' ', fp);
+
+ switch (item->type)
+ {
+ case Module::AT_SRC_ONLY:
+ if (item->obj == NULL)
+ fprintf (fp, NTXT ("%*s. "), lspace + 1, "?");
+ else
+ fprintf (fp, "%*d. ", lspace + 1, ((DbeLine*) item->obj)->lineno);
+ break;
+
+ case Module::AT_SRC:
+ fprintf (fp, "%*d. ", lspace + 1, ((DbeLine*) item->obj)->lineno);
+ break;
+ case Module::AT_FUNC:
+ case Module::AT_QUOTE:
+ fprintf (fp, NTXT ("%*c"), lspace + 3, ' ');
+ break;
+ case Module::AT_DIS:
+ case Module::AT_DIS_ONLY:
+ if (item->obj == NULL || ((DbeInstr*) item->obj)->lineno == -1)
+ fprintf (fp, "%*c[%*s] ", lspace + 3, ' ', lspace, "?");
+ else
+ fprintf (fp, "%*c[%*d] ", lspace + 3, ' ', lspace,
+ ((DbeInstr*) item->obj)->lineno);
+ break;
+ case Module::AT_COM:
+ case Module::AT_EMPTY:
+ break;
+
+ }
+ if (item->value[lind].l == NULL)
+ item->value[lind].l = dbe_strdup (GTXT ("INTERNAL ERROR: missing line text"));
+ fprintf (fp, NTXT ("%s\n"), item->value[lind].l);
+ }
+ delete[] fmt_int;
+ delete[] fmt_real0;
+ delete[] fmt_real1;
+ delete hdata;
+}
+
+void
+er_print_histogram::dump_annotated ()
+{
+ Vector<int> *marks = new Vector<int>;
+ Function *anno_func = (Function *) sel_obj;
+ Module *module = anno_func ? anno_func->module : NULL;
+
+ if (hist_data->type == Histable::DOBJECT)
+ dump_annotated_dataobjects (marks, number_entries); // threshold
+ else if (number_entries == 0)
+ // Annotated source
+ dump_anno_file (out_file, Histable::LINE, module, dbev, mlist,
+ hist_data->get_totals ()->value, NULL, anno_func, marks,
+ dbev->get_thresh_src (), dbev->get_src_compcom (),
+ dbev->get_src_visible (), dbev->get_hex_visible (), true);
+ else
+ // Annotated disassembly
+ dump_anno_file (out_file, Histable::INSTR, module, dbev, mlist,
+ hist_data->get_totals ()->value, NULL, anno_func, marks,
+ dbev->get_thresh_dis (), dbev->get_dis_compcom (),
+ dbev->get_src_visible (), dbev->get_hex_visible (), true);
+}
+
+void
+er_print_histogram::data_dump ()
+{
+ int limit;
+ if (hist_data->get_status () == Hist_data::SUCCESS)
+ {
+ if (sort_metric[0] == '\n')
+ { // csingle Callers-Callees entry
+ sort_metric++;
+ fprintf (out_file, NTXT ("%s\n\n"), sort_metric);
+ }
+ else if (!sel_obj && type != MODE_LIST)
+ {
+ if (hist_data->type == Histable::FUNCTION)
+ fprintf (out_file,
+ GTXT ("Functions sorted by metric: %s\n\n"), sort_metric);
+ else if (hist_data->type == Histable::DOBJECT)
+ fprintf (out_file, GTXT ("Dataobjects sorted by metric: %s\n\n"),
+ sort_metric);
+ else
+ fprintf (out_file,
+ GTXT ("Objects sorted by metric: %s\n\n"), sort_metric);
+ }
+ limit = hist_data->size ();
+ if ((number_entries > 0) && (number_entries < limit))
+ limit = number_entries;
+
+ switch (type)
+ {
+ case MODE_LIST:
+ dump_list (limit);
+ break;
+ case MODE_DETAIL:
+ dump_detail (limit);
+ break;
+ case MODE_GPROF:
+ dump_gprof (limit);
+ break;
+ case MODE_ANNOTATED:
+ dump_annotated ();
+ break;
+ }
+ }
+ else
+ fprintf (out_file, GTXT ("Get_Hist_data call failed %d\n"),
+ (int) hist_data->get_status ());
+}
+
+/*
+ * Class er_print_ctree to print functions call tree
+ */
+er_print_ctree::er_print_ctree (DbeView *_dbev, Vector<Histable*> *_cstack,
+ Histable *_sobj, int _limit)
+{
+ dbev = _dbev;
+ cstack = _cstack;
+ sobj = _sobj;
+ limit = _limit;
+ print_row = 0;
+ exp_idx1 = 0;
+ exp_idx2 = dbeSession->nexps () - 1;
+ load = false;
+ header = false;
+}
+
+void
+er_print_ctree::data_dump ()
+{
+ StringBuilder sb;
+ Hist_data::HistItem *total;
+ sb.append (GTXT ("Functions Call Tree. Metric: "));
+ char *s = dbev->getSort (MET_CALL_AGR);
+ sb.append (s);
+ free (s);
+ sb.toFileLn (out_file);
+ fprintf (out_file, NTXT ("\n"));
+ mlist = dbev->get_metric_list (MET_CALL_AGR);
+
+ // Change cstack: add sobj to the end of cstack
+ cstack->append (sobj);
+ Hist_data *center = dbev->get_hist_data (mlist, Histable::FUNCTION, 0,
+ Hist_data::SELF, cstack);
+ Hist_data *callers = dbev->get_hist_data (mlist, Histable::FUNCTION, 0,
+ Hist_data::CALLERS, cstack);
+ Hist_data *callees = dbev->get_hist_data (mlist, Histable::FUNCTION, 0,
+ Hist_data::CALLEES, cstack);
+
+ // Restore cstack
+ int last = cstack->size () - 1;
+ cstack->remove (last);
+
+ // Prepare formats
+ int no_metrics = mlist->size ();
+
+ // calculate max. width using data from callers, callees, center
+ hist_metric = allocateHistMetric (no_metrics);
+ callers->update_max (hist_metric);
+ callees->update_max (hist_metric);
+ center->update_max (hist_metric);
+ callers->update_legend_width (hist_metric);
+ callers->print_label (out_file, hist_metric, 0); // returns Name column offset
+
+ print_row = 0;
+ // Pass real total to print_children()
+ total = center->get_totals ();
+ print_children (center, 0, sobj, NTXT (" "), total);
+
+ // Free memory
+ cstack->reset ();
+ delete callers;
+ delete callees;
+ delete center;
+ delete[] hist_metric;
+}
+
+/*
+ * Recursive method print_children prints Call Tree elements.
+ */
+void
+er_print_ctree::print_children (Hist_data *data, int index, Histable *my_obj,
+ char * prefix, Hist_data::HistItem *total)
+{
+ StringBuilder buf;
+ const char *P0 = "+-";
+ const char *P2 = " |";
+ const char *P1 = " ";
+
+ // If limit exceeded - return
+ ++print_row;
+ if (limit > 0 && print_row > limit)
+ return;
+
+ if (my_obj == NULL)
+ return; // should never happen
+
+ // Prepare prefix
+ buf.append (prefix);
+ if (buf.endsWith (P2))
+ {
+ int len = buf.length () - 1;
+ buf.setLength (len);
+ }
+ buf.append (P0);
+
+ // Change cstack: add my_obj to the end of cstack
+ cstack->append (my_obj);
+
+ // Print current node info
+ char * my_prefix = buf.toString ();
+
+ // Replace parent's total values with real total values
+ data->update_total (total); // Needed to to calculate percentage only
+ buf.setLength (0);
+ data->print_row (&buf, index, hist_metric, my_prefix);
+ buf.toFileLn (out_file);
+ free (my_prefix);
+
+ // Get children
+ Hist_data *callees = dbev->get_hist_data (mlist, Histable::FUNCTION, 0,
+ Hist_data::CALLEES, cstack);
+ int nc = callees->size ();
+ if (nc > 0)
+ {
+ // Print children
+ Hist_data::HistItem *item;
+ Histable *ch_obj;
+ char *ch_prefix;
+ buf.setLength (0);
+ buf.append (prefix);
+ buf.append (P2);
+ ch_prefix = buf.toString ();
+ for (int i = 0; i < nc - 1; i++)
+ {
+ item = callees->fetch (i);
+ ch_obj = item->obj;
+ print_children (callees, i, ch_obj, ch_prefix, total);
+ }
+ free (ch_prefix);
+ buf.setLength (0);
+ buf.append (prefix);
+ buf.append (P1);
+ ch_prefix = buf.toString ();
+ item = callees->fetch (nc - 1);
+ ch_obj = item->obj;
+ print_children (callees, nc - 1, ch_obj, ch_prefix, total);
+ free (ch_prefix);
+ }
+
+ // Restore cstack
+ int last = cstack->size () - 1;
+ cstack->remove (last);
+ delete callees;
+ return;
+}
+
+er_print_gprof::er_print_gprof (DbeView *_dbev, Vector<Histable*> *_cstack)
+{
+ dbev = _dbev;
+ cstack = _cstack;
+ exp_idx1 = 0;
+ exp_idx2 = dbeSession->nexps () - 1;
+ load = false;
+ header = false;
+}
+
+void
+er_print_gprof::data_dump ()
+{
+ StringBuilder sb;
+ sb.append (GTXT ("Callers and callees sorted by metric: "));
+ char *s = dbev->getSort (MET_CALL);
+ sb.append (s);
+ free (s);
+ sb.toFileLn (out_file);
+ fprintf (out_file, NTXT ("\n"));
+
+ MetricList *mlist = dbev->get_metric_list (MET_CALL);
+ Hist_data *center = dbev->get_hist_data (mlist, Histable::FUNCTION, 0,
+ Hist_data::SELF, cstack);
+ Hist_data *callers = dbev->get_hist_data (mlist, Histable::FUNCTION, 0,
+ Hist_data::CALLERS, cstack);
+ Hist_data *callees = dbev->get_hist_data (mlist, Histable::FUNCTION, 0,
+ Hist_data::CALLEES, cstack);
+
+ mlist = center->get_metric_list ();
+ int no_metrics = mlist->get_items ()->size ();
+
+ // update max. width for callers/callees/center function item
+ Metric::HistMetric *hist_metric = allocateHistMetric (no_metrics);
+ callers->update_max (hist_metric);
+ callees->update_max (hist_metric);
+ center->update_max (hist_metric);
+
+ callers->update_legend_width (hist_metric);
+ int name_offset = callers->print_label (out_file, hist_metric, 0); // returns Name column offset
+ // Print Callers
+ sb.setLength (0);
+ for (int i = 0; i < name_offset; i++)
+ sb.append (NTXT ("="));
+ if (name_offset > 0)
+ sb.append (NTXT (" "));
+ char *line1 = sb.toString ();
+ char *line2;
+ if (callers->size () > 0)
+ line2 = GTXT ("Callers");
+ else
+ line2 = GTXT ("No Callers");
+ fprintf (out_file, NTXT ("%s%s\n"), line1, line2);
+ callers->print_content (out_file, hist_metric, callers->size ());
+
+ // Print Stack Fragment
+ line2 = GTXT ("Stack Fragment");
+ fprintf (out_file, NTXT ("\n%s%s\n"), line1, line2);
+
+ for (long i = 0, last = cstack->size () - 1; i <= last; ++i)
+ {
+ sb.setLength (0);
+ if (i == last && center->size () > 0)
+ {
+ center->update_total (callers->get_totals ()); // Needed to to calculate percentage only
+ center->print_row (&sb, center->size () - 1, hist_metric, NTXT (" "));
+ }
+ else
+ {
+ for (int n = name_offset; n > 0; n--)
+ sb.append (NTXT (" "));
+ if (name_offset > 0)
+ sb.append (NTXT (" "));
+ sb.append (cstack->get (i)->get_name ());
+ }
+ sb.toFileLn (out_file);
+ }
+
+ // Print Callees
+ if (callees->size () > 0)
+ line2 = GTXT ("Callees");
+ else
+ line2 = GTXT ("No Callees");
+ fprintf (out_file, NTXT ("\n%s%s\n"), line1, line2);
+ callees->print_content (out_file, hist_metric, callees->size ());
+ fprintf (out_file, nl);
+ free (line1);
+ delete callers;
+ delete callees;
+ delete center;
+ delete[] hist_metric;
+}
+
+er_print_leaklist::er_print_leaklist (DbeView *_dbev, bool show_leak,
+ bool show_alloca, int _limit)
+{
+ dbev = _dbev;
+ leak = show_leak;
+ alloca = show_alloca;
+ limit = _limit;
+}
+
+// Output routine for leak list only
+void
+er_print_leaklist::data_dump ()
+{
+ CStack_data *lam;
+ CStack_data::CStack_item *lae;
+ int index;
+ if (!dbeSession->is_leaklist_available ())
+ fprintf (out_file, GTXT ("No leak or allocation information recorded in experiments\n\n"));
+
+ MetricList *origmlist = dbev->get_metric_list (MET_NORMAL);
+ if (leak)
+ {
+ // make a copy of the metric list, and set metrics for leaks
+ MetricList *nmlist = new MetricList (origmlist);
+ nmlist->set_metrics ("e.heapleakbytes:e.heapleakcnt:name", true,
+ dbev->get_derived_metrics ());
+
+ // now make a compacted version of it to get the right indices
+ MetricList *mlist = new MetricList (nmlist);
+ delete nmlist;
+
+ // fetch the callstack data
+ lam = dbev->get_cstack_data (mlist);
+
+ // now print it
+ if (lam && lam->size () != 0)
+ {
+ fprintf (out_file, GTXT ("Summary Results: Distinct Leaks = %d, Total Instances = %lld, Total Bytes Leaked = %lld\n\n"),
+ (int) lam->size (), lam->total->value[1].ll,
+ lam->total->value[0].ll);
+
+ Vec_loop (CStack_data::CStack_item*, lam->cstack_items, index, lae)
+ {
+ fprintf (out_file,
+ GTXT ("Leak #%d, Instances = %lld, Bytes Leaked = %lld\n"),
+ index + 1, lae->value[1].ll, lae->value[0].ll);
+ if (lae->stack != NULL)
+ for (int i = lae->stack->size () - 1; i >= 0; i--)
+ {
+ DbeInstr *instr = lae->stack->fetch (i);
+ fprintf (out_file, NTXT (" %s\n"), instr->get_name ());
+ }
+ fprintf (out_file, NTXT ("\n"));
+ if (index + 1 == limit) break;
+ }
+ }
+ else
+ fprintf (out_file, GTXT ("No leak information\n\n"));
+ delete lam;
+ delete mlist;
+ }
+
+ if (alloca)
+ {
+ // make a copy of the metric list, and set metrics for leaks
+ MetricList *nmlist = new MetricList (origmlist);
+ nmlist->set_metrics ("e.heapallocbytes:e.heapalloccnt:name",
+ true, dbev->get_derived_metrics ());
+
+ // now make a compacted version of it to get the right indices
+ MetricList *mlist = new MetricList (nmlist);
+ delete nmlist;
+
+ // fetch the callstack data
+ lam = dbev->get_cstack_data (mlist);
+
+ // now print it
+ if (lam && lam->size () != 0)
+ {
+ fprintf (out_file, GTXT ("Summary Results: Distinct Allocations = %d, Total Instances = %lld, Total Bytes Allocated = %lld\n\n"),
+ (int) lam->size (), lam->total->value[1].ll,
+ lam->total->value[0].ll);
+ Vec_loop (CStack_data::CStack_item*, lam->cstack_items, index, lae)
+ {
+ fprintf (out_file, GTXT ("Allocation #%d, Instances = %lld, Bytes Allocated = %lld\n"),
+ index + 1, lae->value[1].ll, lae->value[0].ll);
+ if (lae->stack != NULL)
+ for (int i = lae->stack->size () - 1; i >= 0; i--)
+ {
+ DbeInstr *instr = lae->stack->fetch (i);
+ fprintf (out_file, NTXT (" %s\n"), instr->get_name ());
+ }
+ fprintf (out_file, NTXT ("\n"));
+ if (index + 1 == limit) break;
+ }
+ }
+ else
+ fprintf (out_file, GTXT ("No allocation information\n\n"));
+ delete lam;
+ delete mlist;
+ }
+}
+
+er_print_heapactivity::er_print_heapactivity (DbeView *_dbev,
+ Histable::Type _type,
+ bool _printStat, int _limit)
+{
+ dbev = _dbev;
+ type = _type;
+ printStat = _printStat;
+ limit = _limit;
+}
+
+void
+er_print_heapactivity::printCallStacks (Hist_data *hist_data)
+{
+ Hist_data::HistItem *hi;
+ HeapData *hData;
+ long stackId;
+ int size = hist_data->size ();
+ if (limit > 0 && limit < size)
+ size = limit;
+
+ Histable::NameFormat fmt = dbev->get_name_format ();
+ for (int i = 0; i < size; i++)
+ {
+ hi = hist_data->fetch (i);
+ hData = (HeapData*) hi->obj;
+ stackId = hData->id;
+ if (i != 0)
+ fprintf (out_file, NTXT ("\n"));
+
+ fprintf (out_file, NTXT ("%s\n"), hData->get_name (fmt));
+ if (hData->getAllocCnt () > 0)
+ {
+ fprintf (out_file, GTXT ("Instances = %d "),
+ (int) (hData->getAllocCnt ()));
+ fprintf (out_file, GTXT ("Bytes Allocated = %lld\n"),
+ (long long) hData->getAllocBytes ());
+ }
+
+ if (hData->getLeakCnt () > 0)
+ {
+ fprintf (out_file, GTXT ("Instances = %d "),
+ (int) (hData->getLeakCnt ()));
+ fprintf (out_file, GTXT ("Bytes Leaked = %lld\n"),
+ (long long) hData->getLeakBytes ());
+ }
+
+ // There is no stack trace for <Total>
+ if (i == 0)
+ continue;
+
+ // LIBRARY VISIBILITY pass extra argument if necessary to get hide stack
+ Vector<Histable*> *instrs = CallStack::getStackPCs ((void *) stackId);
+ if (instrs != NULL)
+ {
+ int stSize = instrs->size ();
+ for (int j = 0; j < stSize; j++)
+ {
+ Histable *instr = instrs->fetch (j);
+ if (instr != NULL)
+ fprintf (out_file, NTXT (" %s\n"), instr->get_name ());
+ }
+ delete instrs;
+ }
+ }
+}
+
+void
+er_print_heapactivity::printStatistics (Hist_data *hist_data)
+{
+ Hist_data::HistItem *hi;
+ HeapData *hDataTotal;
+ hi = hist_data->fetch (0);
+ hDataTotal = (HeapData*) hi->obj;
+ Vector<hrtime_t> *pTimestamps;
+ if (hDataTotal->getPeakMemUsage () > 0)
+ {
+ fprintf (out_file, GTXT ("\nProcess With Highest Peak Memory Usage\n"));
+ fprintf (out_file,
+ "-------------------------------------------------------\n");
+ fprintf (out_file, GTXT ("Heap size bytes %lld\n"),
+ (long long) hDataTotal->getPeakMemUsage ());
+ fprintf (out_file, GTXT ("Experiment Id %d\n"),
+ (int) (hDataTotal->getUserExpId ()));
+ fprintf (out_file, GTXT ("Process Id %d\n"),
+ (int) (hDataTotal->getPid ()));
+ pTimestamps = hDataTotal->getPeakTimestamps ();
+ if (pTimestamps != NULL)
+ for (int i = 0; i < pTimestamps->size (); i++)
+ fprintf (out_file,
+ GTXT ("Time of peak %.3f (secs.)\n"),
+ (double) (pTimestamps->fetch (i) / (double) NANOSEC));
+ }
+
+ if (hDataTotal->getAllocCnt () > 0)
+ {
+ fprintf (out_file, GTXT ("\nMemory Allocations Statistics\n"));
+ fprintf (out_file,
+ GTXT ("Allocation Size Range Allocations \n"));
+ fprintf (out_file,
+ "-------------------------------------------------------\n");
+ if (hDataTotal->getA0KB1KBCnt () > 0)
+ fprintf (out_file, NTXT (" 0KB - 1KB %d\n"),
+ hDataTotal->getA0KB1KBCnt ());
+ if (hDataTotal->getA1KB8KBCnt () > 0)
+ fprintf (out_file, NTXT (" 1KB - 8KB %d\n"),
+ hDataTotal->getA1KB8KBCnt ());
+ if (hDataTotal->getA8KB32KBCnt () > 0)
+ fprintf (out_file, NTXT (" 8KB - 32KB %d\n"),
+ hDataTotal->getA8KB32KBCnt ());
+ if (hDataTotal->getA32KB128KBCnt () > 0)
+ fprintf (out_file, NTXT (" 32KB - 128KB %d\n"),
+ hDataTotal->getA32KB128KBCnt ());
+ if (hDataTotal->getA128KB256KBCnt () > 0)
+ fprintf (out_file, NTXT (" 128KB - 256KB %d\n"),
+ hDataTotal->getA128KB256KBCnt ());
+ if (hDataTotal->getA256KB512KBCnt () > 0)
+ fprintf (out_file, NTXT (" 256KB - 512KB %d\n"),
+ hDataTotal->getA256KB512KBCnt ());
+ if (hDataTotal->getA512KB1000KBCnt () > 0)
+ fprintf (out_file, NTXT (" 512KB - 1000KB %d\n"),
+ hDataTotal->getA512KB1000KBCnt ());
+ if (hDataTotal->getA1000KB10MBCnt () > 0)
+ fprintf (out_file, NTXT (" 1000KB - 10MB %d\n"),
+ hDataTotal->getA1000KB10MBCnt ());
+ if (hDataTotal->getA10MB100MBCnt () > 0)
+ fprintf (out_file, NTXT (" 10MB - 100MB %d\n"),
+ hDataTotal->getA10MB100MBCnt ());
+ if (hDataTotal->getA100MB1GBCnt () > 0)
+ fprintf (out_file, NTXT (" 100MB - 1GB %d\n"),
+ hDataTotal->getA100MB1GBCnt ());
+ if (hDataTotal->getA1GB10GBCnt () > 0)
+ fprintf (out_file, NTXT (" 1GB - 10GB %d\n"),
+ hDataTotal->getA1GB10GBCnt ());
+ if (hDataTotal->getA10GB100GBCnt () > 0)
+ fprintf (out_file, NTXT (" 10GB - 100GB %d\n"),
+ hDataTotal->getA10GB100GBCnt ());
+ if (hDataTotal->getA100GB1TBCnt () > 0)
+ fprintf (out_file, NTXT (" 100GB - 1TB %d\n"),
+ hDataTotal->getA100GB1TBCnt ());
+ if (hDataTotal->getA1TB10TBCnt () > 0)
+ fprintf (out_file, NTXT (" 1TB - 10TB %d\n"),
+ hDataTotal->getA1TB10TBCnt ());
+ fprintf (out_file, GTXT ("\nSmallest allocation bytes %lld\n"),
+ (long long) hDataTotal->getASmallestBytes ());
+ fprintf (out_file, GTXT ("Largest allocation bytes %lld\n"),
+ (long long) hDataTotal->getALargestBytes ());
+ fprintf (out_file, GTXT ("Total allocations %d\n"),
+ hDataTotal->getAllocCnt ());
+ fprintf (out_file, GTXT ("Total bytes %lld\n"),
+ (long long) hDataTotal->getAllocBytes ());
+ }
+
+ if (hDataTotal->getLeakCnt () > 0)
+ {
+ fprintf (out_file, GTXT ("\nMemory Leaks Statistics\n"));
+ fprintf (out_file,
+ GTXT ("Leak Size Range Leaks \n"));
+ fprintf (out_file,
+ "-------------------------------------------------------\n");
+ if (hDataTotal->getL0KB1KBCnt () > 0)
+ fprintf (out_file, NTXT (" 0KB - 1KB %d\n"),
+ hDataTotal->getL0KB1KBCnt ());
+ if (hDataTotal->getL1KB8KBCnt () > 0)
+ fprintf (out_file, NTXT (" 1KB - 8KB %d\n"),
+ hDataTotal->getL1KB8KBCnt ());
+ if (hDataTotal->getL8KB32KBCnt () > 0)
+ fprintf (out_file, NTXT (" 8KB - 32KB %d\n"),
+ hDataTotal->getL8KB32KBCnt ());
+ if (hDataTotal->getL32KB128KBCnt () > 0)
+ fprintf (out_file, NTXT (" 32KB - 128KB %d\n"),
+ hDataTotal->getL32KB128KBCnt ());
+ if (hDataTotal->getL128KB256KBCnt () > 0)
+ fprintf (out_file, NTXT (" 128KB - 256KB %d\n"),
+ hDataTotal->getL128KB256KBCnt ());
+ if (hDataTotal->getL256KB512KBCnt () > 0)
+ fprintf (out_file, NTXT (" 256KB - 512KB %d\n"),
+ hDataTotal->getL256KB512KBCnt ());
+ if (hDataTotal->getL512KB1000KBCnt () > 0)
+ fprintf (out_file, NTXT (" 512KB - 1000KB %d\n"),
+ hDataTotal->getL512KB1000KBCnt ());
+ if (hDataTotal->getL1000KB10MBCnt () > 0)
+ fprintf (out_file, NTXT (" 1000KB - 10MB %d\n"),
+ hDataTotal->getL1000KB10MBCnt ());
+ if (hDataTotal->getL10MB100MBCnt () > 0)
+ fprintf (out_file, NTXT (" 10MB - 100MB %d\n"),
+ hDataTotal->getL10MB100MBCnt ());
+ if (hDataTotal->getL100MB1GBCnt () > 0)
+ fprintf (out_file, NTXT (" 100MB - 1GB %d\n"),
+ hDataTotal->getL100MB1GBCnt ());
+ if (hDataTotal->getL1GB10GBCnt () > 0)
+ fprintf (out_file, NTXT (" 1GB - 10GB %d\n"),
+ hDataTotal->getL1GB10GBCnt ());
+ if (hDataTotal->getL10GB100GBCnt () > 0)
+ fprintf (out_file, NTXT (" 10GB - 100GB %d\n"),
+ hDataTotal->getL10GB100GBCnt ());
+ if (hDataTotal->getL100GB1TBCnt () > 0)
+ fprintf (out_file, NTXT (" 100GB - 1TB %d\n"),
+ hDataTotal->getL100GB1TBCnt ());
+ if (hDataTotal->getL1TB10TBCnt () > 0)
+ fprintf (out_file, NTXT (" 1TB - 10TB %d\n"),
+ hDataTotal->getL1TB10TBCnt ());
+ fprintf (out_file, GTXT ("\nSmallest leaked bytes %lld\n"),
+ (long long) hDataTotal->getLSmallestBytes ());
+ fprintf (out_file, GTXT ("Largest leaked bytes %lld\n"),
+ (long long) hDataTotal->getLLargestBytes ());
+ fprintf (out_file, GTXT ("Total leaked %d \n"),
+ hDataTotal->getLeakCnt ());
+ fprintf (out_file, GTXT ("Total bytes %lld\n"),
+ (long long) hDataTotal->getLeakBytes ());
+ }
+ fprintf (out_file, NTXT ("\n"));
+}
+
+void
+er_print_heapactivity::data_dump ()
+{
+ // get the list of heap events from DbeView
+ int numExps = dbeSession->nexps ();
+ if (!numExps)
+ {
+ fprintf (out_file,
+ GTXT ("There is no heap event information in the experiments\n"));
+ return;
+ }
+ MetricList *mlist = dbev->get_metric_list (MET_HEAP);
+ Hist_data *hist_data;
+ hist_data = dbev->get_hist_data (mlist, type, 0, Hist_data::ALL);
+ if (printStat)
+ printStatistics (hist_data);
+ else
+ printCallStacks (hist_data);
+}
+
+er_print_ioactivity::er_print_ioactivity (DbeView *_dbev, Histable::Type _type,
+ bool _printStat, int _limit)
+{
+ dbev = _dbev;
+ type = _type;
+ printStat = _printStat;
+ limit = _limit;
+}
+
+void
+er_print_ioactivity::printCallStacks (Hist_data *hist_data)
+{
+ Hist_data::HistItem *hi;
+ FileData *fData;
+ long stackId;
+ int size = hist_data->size ();
+ if (limit > 0 && limit < size)
+ size = limit;
+
+ for (int i = 0; i < size; i++)
+ {
+ hi = hist_data->fetch (i);
+ fData = (FileData*) hi->obj;
+ stackId = fData->id;
+ if (i != 0)
+ fprintf (out_file, NTXT ("\n"));
+ fprintf (out_file, NTXT ("%s\n"), fData->getFileName ());
+ if (fData->getWriteCnt () > 0)
+ {
+ fprintf (out_file, GTXT ("Write Time=%.6f (secs.) "),
+ (double) (fData->getWriteTime () / (double) NANOSEC));
+ fprintf (out_file, GTXT ("Write Bytes=%lld "),
+ (long long) fData->getWriteBytes ());
+ fprintf (out_file, GTXT ("Write Count=%d\n"),
+ (int) (fData->getWriteCnt ()));
+ }
+ if (fData->getReadCnt () > 0)
+ {
+ fprintf (out_file, GTXT ("Read Time=%.6f (secs.) "),
+ (double) (fData->getReadTime () / (double) NANOSEC));
+ fprintf (out_file, GTXT ("Read Bytes=%lld "),
+ (long long) fData->getReadBytes ());
+ fprintf (out_file, GTXT ("Read Count=%d\n"),
+ (int) fData->getReadCnt ());
+ }
+ if (fData->getOtherCnt () > 0)
+ {
+ fprintf (out_file, GTXT ("Other I/O Time=%.6f (secs.) "),
+ (double) (fData->getOtherTime () / (double) NANOSEC));
+ fprintf (out_file, GTXT ("Other I/O Count=%d\n"),
+ (int) (fData->getOtherCnt ()));
+ }
+ if (fData->getErrorCnt () > 0)
+ {
+ fprintf (out_file, GTXT ("I/O Error Time=%.6f (secs.) "),
+ (double) (fData->getErrorTime () / (double) NANOSEC));
+ fprintf (out_file, GTXT ("I/O Error Count=%d\n"),
+ (int) (fData->getErrorCnt ()));
+ }
+
+ // There is no stack trace for <Total>
+ if (i == 0)
+ continue;
+
+ // LIBRARY VISIBILITY pass extra argument if necessary to get hide stack
+ Vector<Histable*> *instrs = CallStack::getStackPCs ((void *) stackId);
+ if (instrs != NULL)
+ {
+ int stSize = instrs->size ();
+ for (int j = 0; j < stSize; j++)
+ {
+ Histable *instr = instrs->fetch (j);
+ if (instr != NULL)
+ fprintf (out_file, " %s\n", instr->get_name ());
+ }
+ delete instrs;
+ }
+ }
+}
+
+void
+er_print_ioactivity::printStatistics (Hist_data *hist_data)
+{
+ Hist_data::HistItem *hi;
+ FileData *fDataTotal;
+
+ hi = hist_data->fetch (0);
+ fDataTotal = (FileData*) hi->obj;
+
+ if (fDataTotal->getWriteCnt () > 0)
+ {
+ fprintf (out_file,
+ GTXT ("\nWrite Statistics\n"));
+ fprintf (out_file,
+ GTXT ("I/O Size Range Write Calls \n"));
+ fprintf (out_file,
+ "-------------------------------------------------------\n");
+ if (fDataTotal->getW0KB1KBCnt () > 0)
+ fprintf (out_file, NTXT (" 0KB - 1KB %d\n"),
+ fDataTotal->getW0KB1KBCnt ());
+ if (fDataTotal->getW1KB8KBCnt () > 0)
+ fprintf (out_file, NTXT (" 1KB - 8KB %d\n"),
+ fDataTotal->getW1KB8KBCnt ());
+ if (fDataTotal->getW8KB32KBCnt () > 0)
+ fprintf (out_file, NTXT (" 8KB - 32KB %d\n"),
+ fDataTotal->getW8KB32KBCnt ());
+ if (fDataTotal->getW32KB128KBCnt () > 0)
+ fprintf (out_file, NTXT (" 32KB - 128KB %d\n"),
+ fDataTotal->getW32KB128KBCnt ());
+ if (fDataTotal->getW128KB256KBCnt () > 0)
+ fprintf (out_file, NTXT (" 128KB - 256KB %d\n"),
+ fDataTotal->getW128KB256KBCnt ());
+ if (fDataTotal->getW256KB512KBCnt () > 0)
+ fprintf (out_file, NTXT (" 256KB - 512KB %d\n"),
+ fDataTotal->getW256KB512KBCnt ());
+ if (fDataTotal->getW512KB1000KBCnt () > 0)
+ fprintf (out_file, NTXT (" 512KB - 1000KB %d\n"),
+ fDataTotal->getW512KB1000KBCnt ());
+ if (fDataTotal->getW1000KB10MBCnt () > 0)
+ fprintf (out_file, NTXT (" 1000KB - 10MB %d\n"),
+ fDataTotal->getW1000KB10MBCnt ());
+ if (fDataTotal->getW10MB100MBCnt () > 0)
+ fprintf (out_file, NTXT (" 10MB - 100MB %d\n"),
+ fDataTotal->getW10MB100MBCnt ());
+ if (fDataTotal->getW100MB1GBCnt () > 0)
+ fprintf (out_file, NTXT (" 100MB - 1GB %d\n"),
+ fDataTotal->getW100MB1GBCnt ());
+ if (fDataTotal->getW1GB10GBCnt () > 0)
+ fprintf (out_file, NTXT (" 1GB - 10GB %d\n"),
+ fDataTotal->getW1GB10GBCnt ());
+ if (fDataTotal->getW10GB100GBCnt () > 0)
+ fprintf (out_file, NTXT (" 10GB - 100GB %d\n"),
+ fDataTotal->getW10GB100GBCnt ());
+ if (fDataTotal->getW100GB1TBCnt () > 0)
+ fprintf (out_file, NTXT (" 100GB - 1TB %d\n"),
+ fDataTotal->getW100GB1TBCnt ());
+ if (fDataTotal->getW1TB10TBCnt () > 0)
+ fprintf (out_file, NTXT (" 1TB - 10TB %d\n"),
+ fDataTotal->getW1TB10TBCnt ());
+ fprintf (out_file,
+ GTXT ("\nLongest write %.6f (secs.)\n"),
+ (double) (fDataTotal->getWSlowestBytes () / (double) NANOSEC));
+ fprintf (out_file, GTXT ("Smallest write bytes %lld\n"),
+ (long long) fDataTotal->getWSmallestBytes ());
+ fprintf (out_file, GTXT ("Largest write bytes %lld\n"),
+ (long long) fDataTotal->getWLargestBytes ());
+ fprintf (out_file,
+ GTXT ("Total time %.6f (secs.)\n"),
+ (double) (fDataTotal->getWriteTime () / (double) NANOSEC));
+ fprintf (out_file, GTXT ("Total calls %d\n"),
+ fDataTotal->getWriteCnt ());
+ fprintf (out_file, GTXT ("Total bytes %lld\n"),
+ (long long) fDataTotal->getWriteBytes ());
+ }
+
+ if (fDataTotal->getReadCnt () > 0)
+ {
+ fprintf (out_file,
+ GTXT ("\nRead Statistics\n"));
+ fprintf (out_file,
+ GTXT ("I/O Size Range Read Calls \n"));
+ fprintf (out_file,
+ "------------------------------------------------------\n");
+ if (fDataTotal->getR0KB1KBCnt () > 0)
+ fprintf (out_file, NTXT (" 0KB - 1KB %d\n"),
+ fDataTotal->getR0KB1KBCnt ());
+ if (fDataTotal->getR1KB8KBCnt () > 0)
+ fprintf (out_file, NTXT (" 1KB - 8KB %d\n"),
+ fDataTotal->getR1KB8KBCnt ());
+ if (fDataTotal->getR8KB32KBCnt () > 0)
+ fprintf (out_file, NTXT (" 8KB - 32KB %d\n"),
+ fDataTotal->getR8KB32KBCnt ());
+ if (fDataTotal->getR32KB128KBCnt () > 0)
+ fprintf (out_file, NTXT (" 32KB - 128KB %d\n"),
+ fDataTotal->getR32KB128KBCnt ());
+ if (fDataTotal->getR128KB256KBCnt () > 0)
+ fprintf (out_file, NTXT (" 128KB - 256KB %d\n"),
+ fDataTotal->getR128KB256KBCnt ());
+ if (fDataTotal->getR256KB512KBCnt () > 0)
+ fprintf (out_file, NTXT (" 256KB - 512KB %d\n"),
+ fDataTotal->getR256KB512KBCnt ());
+ if (fDataTotal->getR512KB1000KBCnt () > 0)
+ fprintf (out_file, NTXT (" 512KB - 1000KB %d\n"),
+ fDataTotal->getR512KB1000KBCnt ());
+ if (fDataTotal->getR1000KB10MBCnt () > 0)
+ fprintf (out_file, NTXT (" 1000KB - 10MB %d\n"),
+ fDataTotal->getR1000KB10MBCnt ());
+ if (fDataTotal->getR10MB100MBCnt () > 0)
+ fprintf (out_file, NTXT (" 10MB - 100MB %d\n"),
+ fDataTotal->getR10MB100MBCnt ());
+ if (fDataTotal->getR100MB1GBCnt () > 0)
+ fprintf (out_file, NTXT (" 100MB - 1GB %d\n"),
+ fDataTotal->getR100MB1GBCnt ());
+ if (fDataTotal->getR1GB10GBCnt () > 0)
+ fprintf (out_file, NTXT (" 1GB - 10GB %d\n"),
+ fDataTotal->getR1GB10GBCnt ());
+ if (fDataTotal->getR10GB100GBCnt () > 0)
+ fprintf (out_file, NTXT (" 10GB - 100GB %d\n"),
+ fDataTotal->getR10GB100GBCnt ());
+ if (fDataTotal->getR100GB1TBCnt () > 0)
+ fprintf (out_file, NTXT (" 100GB - 1TB %d\n"),
+ fDataTotal->getR100GB1TBCnt ());
+ if (fDataTotal->getR1TB10TBCnt () > 0)
+ fprintf (out_file, NTXT (" 1TB - 10TB %d\n"),
+ fDataTotal->getR1TB10TBCnt ());
+ fprintf (out_file,
+ GTXT ("\nLongest time %.6f (secs.)\n"),
+ (double) (fDataTotal->getRSlowestBytes () / (double) NANOSEC));
+ fprintf (out_file, GTXT ("Smallest read bytes %lld\n"),
+ (long long) fDataTotal->getRSmallestBytes ());
+ fprintf (out_file, GTXT ("Largest read bytes %lld\n"),
+ (long long) fDataTotal->getRLargestBytes ());
+ fprintf (out_file,
+ GTXT ("Total time %.6f (secs.)\n"),
+ (double) (fDataTotal->getReadTime () / (double) NANOSEC));
+ fprintf (out_file, GTXT ("Total calls %d\n"),
+ fDataTotal->getReadCnt ());
+ fprintf (out_file, GTXT ("Total bytes %lld\n"),
+ (long long) fDataTotal->getReadBytes ());
+ }
+
+ if (fDataTotal->getOtherCnt () > 0)
+ {
+ fprintf (out_file, GTXT ("\nOther I/O Statistics\n"));
+ fprintf (out_file,
+ "-----------------------------------------------------\n");
+ fprintf (out_file,
+ GTXT ("Total time %.6f (secs.)\n"),
+ (double) (fDataTotal->getOtherTime () / (double) NANOSEC));
+ fprintf (out_file, GTXT ("Total calls %d \n"),
+ fDataTotal->getOtherCnt ());
+ }
+ if (fDataTotal->getErrorCnt () > 0)
+ {
+ fprintf (out_file, GTXT ("\nI/O Error Statistics\n"));
+ fprintf (out_file,
+ "-----------------------------------------------------\n");
+ fprintf (out_file,
+ GTXT ("Total time %.6f (secs.)\n"),
+ (double) (fDataTotal->getErrorTime () / (double) NANOSEC));
+ fprintf (out_file, GTXT ("Total calls %d \n"),
+ fDataTotal->getErrorCnt ());
+ }
+ fprintf (out_file, NTXT ("\n"));
+}
+
+void
+er_print_ioactivity::data_dump ()
+{
+ // get the list of io events from DbeView
+ int numExps = dbeSession->nexps ();
+ if (!numExps)
+ {
+ fprintf (out_file,
+ GTXT ("There is no IO event information in the experiments\n"));
+ return;
+ }
+
+ MetricList *mlist = dbev->get_metric_list (MET_IO);
+ Hist_data *hist_data = dbev->get_hist_data (mlist, type, 0, Hist_data::ALL);
+ if (type == Histable::IOCALLSTACK)
+ printCallStacks (hist_data);
+ else if (printStat)
+ printStatistics (hist_data);
+ else
+ {
+ Metric::HistMetric *hist_metric = hist_data->get_histmetrics ();
+ hist_data->print_label (out_file, hist_metric, 0);
+ hist_data->print_content (out_file, hist_metric, limit);
+ fprintf (out_file, nl);
+ }
+}
+
+er_print_experiment::er_print_experiment (DbeView *_dbev, int bgn_idx,
+ int end_idx, bool show_load,
+ bool show_header, bool show_stat,
+ bool show_over, bool show_odetail)
+{
+ dbev = _dbev;
+ exp_idx1 = bgn_idx;
+ exp_idx2 = end_idx;
+ load = show_load;
+ header = show_header;
+ stat = show_stat;
+ over = show_over;
+ odetail = show_odetail;
+}
+
+void
+er_print_experiment::data_dump ()
+{
+ int index, maxlen;
+
+ maxlen = 0;
+
+ if (stat)
+ {
+ snprintf (fmt1, sizeof (fmt1), NTXT ("%%50s"));
+ if (exp_idx2 > exp_idx1)
+ {
+ statistics_sum (maxlen);
+ fprintf (out_file, nl);
+ }
+
+ for (index = exp_idx1; index <= exp_idx2; index++)
+ statistics_dump (index, maxlen);
+ }
+ else if (over)
+ {
+ snprintf (fmt1, sizeof (fmt1), NTXT ("%%30s"));
+ if (exp_idx2 > exp_idx1)
+ {
+ overview_sum (maxlen);
+ fprintf (out_file, nl);
+ }
+
+ for (index = exp_idx1; index <= exp_idx2; index++)
+ overview_dump (index, maxlen);
+ }
+ else if (header)
+ for (index = exp_idx1; index <= exp_idx2; index++)
+ {
+ if (index != exp_idx1)
+ fprintf (out_file,
+ "----------------------------------------------------------------\n");
+ header_dump (index);
+ }
+}
+
+void
+er_print_experiment::overview_sum (int &maxlen)
+{
+ int index;
+ Ovw_data *sum_data = new Ovw_data ();
+ for (index = exp_idx1; index <= exp_idx2; index++)
+ {
+ Ovw_data *ovw_data = dbev->get_ovw_data (index);
+ if (ovw_data == NULL)
+ continue;
+ sum_data->sum (ovw_data);
+ delete ovw_data;
+ }
+
+ fprintf (out_file, GTXT ("<Sum across selected experiments>"));
+ fprintf (out_file, nl);
+ overview_summary (sum_data, maxlen);
+ fprintf (out_file, nl);
+ delete sum_data;
+}
+
+void
+er_print_experiment::overview_dump (int exp_idx, int &maxlen)
+{
+ Ovw_data *ovw_data;
+ Ovw_data::Ovw_item ovw_item_labels;
+ Ovw_data::Ovw_item ovw_item;
+ int index;
+ int size;
+
+ ovw_data = dbev->get_ovw_data (exp_idx);
+ if (ovw_data == NULL)
+ return;
+ if (pr_params.header)
+ header_dump (exp_idx);
+ else if (odetail)
+ fprintf (out_file, GTXT ("Experiment: %s\n"),
+ dbeSession->get_exp (exp_idx)->get_expt_name ());
+
+ overview_summary (ovw_data, maxlen);
+ if (!odetail)
+ {
+ delete ovw_data;
+ return;
+ }
+
+ //Get the collection params for the sample selection and display them.
+ fprintf (out_file, NTXT ("\n\n"));
+ fprintf (out_file, fmt1, GTXT ("Individual samples"));
+ fprintf (out_file, NTXT ("\n\n"));
+
+ size = ovw_data->size ();
+ ovw_item_labels = ovw_data->get_labels ();
+
+ for (index = 0; index < size; index++)
+ {
+ ovw_item = ovw_data->fetch (index);
+ fprintf (out_file, fmt1, GTXT ("Sample Number"));
+ fprintf (out_file, NTXT (": %d\n\n"), ovw_item.number);
+ overview_item (&ovw_item, &ovw_item_labels);
+ fprintf (out_file, nl);
+ }
+
+ delete ovw_data;
+}
+
+void
+er_print_experiment::overview_summary (Ovw_data *ovw_data, int &maxlen)
+{
+ char buf[128];
+ int len;
+ Ovw_data::Ovw_item totals;
+ Ovw_data::Ovw_item ovw_item_labels;
+ totals = ovw_data->get_totals ();
+ len = snprintf (buf, sizeof (buf), "%.3lf", tstodouble (totals.total.t));
+ if (maxlen < len)
+ maxlen = len;
+ snprintf (buf, sizeof (buf), NTXT ("%%#%d.0lf ( %#1.0f %%%%%%%%)"),
+ maxlen - 3, 0.);
+ snprintf (fmt2, sizeof (fmt2), NTXT ("%%%d.3lf"), maxlen);
+ snprintf (fmt3, sizeof (fmt3), buf, 0.0);
+ snprintf (fmt4, sizeof (fmt4), NTXT ("%%%d.3lf (%%5.1f%%%%)"), maxlen);
+ fprintf (out_file, fmt1, GTXT ("Aggregated statistics for selected samples"));
+ fprintf (out_file, NTXT ("\n\n"));
+
+ ovw_item_labels = ovw_data->get_labels ();
+ overview_item (&totals, &ovw_item_labels);
+}
+
+void
+er_print_experiment::overview_item (Ovw_data::Ovw_item *ovw_item,
+ Ovw_data::Ovw_item *ovw_item_labels)
+{
+ double start, end, total_value;
+ int index, size;
+ timestruc_t total_time = {0, 0};
+
+ start = tstodouble (ovw_item->start);
+ end = tstodouble (ovw_item->end);
+
+ fprintf (out_file, fmt1, GTXT ("Start Label"));
+ fprintf (out_file, NTXT (": "));
+ fprintf (out_file, NTXT ("%s"), ovw_item->start_label);
+ fprintf (out_file, nl);
+ fprintf (out_file, fmt1, GTXT ("End Label"));
+ fprintf (out_file, NTXT (": %s\n"), ovw_item->end_label);
+
+ fprintf (out_file, fmt1, GTXT ("Start Time (sec.)"));
+ fprintf (out_file, NTXT (": "));
+ if (start == -1.0)
+ fprintf (out_file, GTXT ("N/A"));
+ else
+ fprintf (out_file, fmt2, start);
+ fprintf (out_file, nl);
+ fprintf (out_file, fmt1, GTXT ("End Time (sec.)"));
+ fprintf (out_file, NTXT (": "));
+ if (end == -1.0)
+ fprintf (out_file, GTXT ("N/A"));
+ else
+ fprintf (out_file, fmt2, end);
+ fprintf (out_file, nl);
+ fprintf (out_file, fmt1, GTXT ("Duration (sec.)"));
+ fprintf (out_file, NTXT (": "));
+ fprintf (out_file, fmt2, tstodouble (ovw_item->duration));
+ fprintf (out_file, NTXT ("\n"));
+
+ size = ovw_item->size;
+ for (index = 0; index < size; index++)
+ tsadd (&total_time, &ovw_item->values[index].t);
+
+ total_value = tstodouble (total_time);
+ fprintf (out_file, fmt1, GTXT ("Total Thread Time (sec.)"));
+ fprintf (out_file, NTXT (": "));
+ fprintf (out_file, fmt2, tstodouble (ovw_item->tlwp));
+ fprintf (out_file, NTXT ("\n"));
+ fprintf (out_file, fmt1, GTXT ("Average number of Threads"));
+ fprintf (out_file, NTXT (": "));
+ if (tstodouble (ovw_item->duration) != 0)
+ fprintf (out_file, fmt2, ovw_item->nlwp);
+ else
+ fprintf (out_file, GTXT ("N/A"));
+ fprintf (out_file, NTXT ("\n\n"));
+ fprintf (out_file, fmt1, GTXT ("Process Times (sec.)"));
+ fprintf (out_file, NTXT (":\n"));
+ for (index = 1; index < size; index++)
+ {
+ overview_value (&ovw_item_labels->values[index], ovw_item_labels->type,
+ total_value);
+ overview_value (&ovw_item->values[index], ovw_item->type,
+ total_value);
+ fprintf (out_file, NTXT ("\n"));
+ }
+}
+
+void
+er_print_experiment::overview_value (Value *value, ValueTag value_tag,
+ double total_value)
+{
+ double dvalue;
+ switch (value_tag)
+ {
+ case VT_LABEL:
+ fprintf (out_file, fmt1, value->l);
+ fprintf (out_file, NTXT (": "));
+ break;
+ case VT_HRTIME:
+ dvalue = tstodouble (value->t);
+ if (dvalue == 0.0)
+ fprintf (out_file, fmt3, 0., 0.);
+ else
+ fprintf (out_file, fmt4, dvalue, 100.0 * dvalue / total_value);
+ break;
+ case VT_INT:
+ fprintf (out_file, NTXT ("%d"), value->i);
+ break;
+ default:
+ fprintf (out_file, fmt3);
+ }
+}
+
+void
+er_print_experiment::statistics_sum (int &maxlen)
+{
+ int index;
+ int size, len;
+ Stats_data *sum_data = new Stats_data ();
+ for (index = exp_idx1; index <= exp_idx2; index++)
+ {
+ Stats_data *stats_data = dbev->get_stats_data (index);
+ if (stats_data == NULL)
+ continue;
+ sum_data->sum (stats_data);
+ delete stats_data;
+ }
+
+ // get the maximum width of values
+ size = sum_data->size ();
+ for (index = 0; index < size; index++)
+ {
+ len = (int) sum_data->fetch (index).value.get_len ();
+ if (maxlen < len)
+ maxlen = len;
+ }
+
+ // print overview average
+ overview_sum (maxlen);
+
+ // print statistics data
+ snprintf (fmt2, sizeof (fmt2), NTXT (": %%%ds\n"), maxlen);
+ statistics_item (sum_data);
+ delete sum_data;
+}
+
+void
+er_print_experiment::statistics_dump (int exp_idx, int &maxlen)
+{
+ Stats_data *stats_data;
+ int index;
+ int size, len;
+ stats_data = dbev->get_stats_data (exp_idx);
+ if (stats_data == NULL)
+ return;
+ if (pr_params.header)
+ {
+ header_dump (exp_idx);
+ fprintf (out_file, nl);
+ }
+ else
+ fprintf (out_file, GTXT ("Experiment: %s\n"),
+ dbeSession->get_exp (exp_idx)->get_expt_name ());
+
+ // get the maximum width of values
+ size = stats_data->size ();
+ for (index = 0; index < size; index++)
+ {
+ len = (int) stats_data->fetch (index).value.get_len ();
+ if (maxlen < len)
+ maxlen = len;
+ }
+
+ // print overview average
+ overview_dump (exp_idx, maxlen);
+ fprintf (out_file, nl);
+
+ // print statistics data
+ snprintf (fmt2, sizeof (fmt2), NTXT (": %%%ds\n"), maxlen);
+ statistics_item (stats_data);
+ delete stats_data;
+}
+
+void
+er_print_experiment::statistics_item (Stats_data *stats_data)
+{
+ int size, index;
+ Stats_data::Stats_item stats_item;
+ char buf[256];
+ size = stats_data->size ();
+ for (index = 0; index < size; index++)
+ {
+ stats_item = stats_data->fetch (index);
+ fprintf (out_file, fmt1, stats_item.label);
+ fprintf (out_file, fmt2, stats_item.value.to_str (buf, sizeof (buf)));
+ }
+ fprintf (out_file, nl);
+}
+
+// Print annotated source or disassembly -- called by er_print only
+void
+print_anno_file (char *name, const char *sel, const char *srcFile,
+ bool isDisasm, FILE *dis_file, FILE *inp_file, FILE *out_file,
+ DbeView *dbev, bool xdefault)
+{
+ Histable *obj;
+ Function *func;
+ Module *module;
+ Vector<int> *marks;
+ Hist_data *hist_data;
+ char *errstr;
+ int index;
+ SourceFile *fitem;
+ int threshold;
+ int compcom_bits;
+ int src_visible;
+ bool hex_visible;
+ bool srcmetrics_visible;
+
+ if ((name == NULL) || (strlen (name) == 0))
+ {
+ fprintf (stderr, GTXT ("Error: No function or file has been specified.\n"));
+ return;
+ }
+
+ // find the function from the name
+ if (!dbeSession->find_obj (dis_file, inp_file, obj, name, sel,
+ Histable::FUNCTION, xdefault))
+ return;
+
+ if (obj != NULL)
+ {
+ // source or disassembly for <Total>, <Unknown>, or @plt
+ if (obj->get_type () != Histable::FUNCTION)
+ {
+ fprintf (stderr,
+ GTXT ("Error: %s is not a real function; no source or disassembly available.\n"),
+ name);
+ return;
+ }
+
+ func = (Function *) obj;
+ if (func->flags & FUNC_FLAG_SIMULATED)
+ {
+ fprintf (stderr,
+ GTXT ("Error: %s is not a real function; no source or disassembly available.\n"),
+ name);
+ return;
+ }
+ else if (dbev != NULL && isDisasm)
+ dbev->set_func_scope (true);
+
+ // function found, set module
+ module = func->module;
+ int ix = module->loadobject->seg_idx;
+ if (dbev->get_lo_expand (ix) == LIBEX_HIDE)
+ {
+ char *lo_name = module->loadobject->get_name ();
+ fprintf (stderr,
+ GTXT ("Error: No source or disassembly available for hidden object %s.\n"),
+ lo_name);
+ return;
+ }
+
+ if (srcFile)
+ {
+ Vector<SourceFile*> *sources = func->get_sources ();
+ bool found = false;
+ if (sources == NULL)
+ {
+ fitem = func->getDefSrc ();
+ found = (func->line_first > 0)
+ && strcmp (basename (srcFile),
+ basename (fitem->get_name ())) == 0;
+ }
+ else
+ {
+ Vec_loop (SourceFile*, sources, index, fitem)
+ {
+ if (strcmp (basename (srcFile), basename (fitem->get_name ())) == 0)
+ {
+ found = true;
+ break;
+ }
+ }
+ }
+ if (!found)
+ {
+ fprintf (stderr, GTXT ("Error: Source file context %s does not contribute to function `%s'.\n"),
+ srcFile, name);
+ return;
+ }
+ }
+ }
+ else
+ {
+ // function not found
+ if (sel && strrchr (sel, ':'))
+ {
+ // 'sel' was "@seg_num:address" or "file_name:address"
+ fprintf (stderr,
+ GTXT ("Error: No function with given name `%s %s' found.\n"),
+ name, sel);
+ return;
+ }
+ // search for a file of that name
+ if (!dbeSession->find_obj (dis_file, inp_file, obj, name, sel,
+ Histable::MODULE, xdefault))
+ return;
+
+ if (obj == NULL)
+ { // neither function nor file found
+ fprintf (stderr, GTXT ("Error: No function or file with given name `%s' found.\n"),
+ name);
+ return;
+ }
+
+ func = NULL;
+ module = (Module *) obj;
+ int ix = module->loadobject->seg_idx;
+ if (dbev->get_lo_expand (ix) == LIBEX_HIDE)
+ {
+ char *lo_name = module->loadobject->get_name ();
+ fprintf (stderr, GTXT ("Error: No source or disassembly available for hidden object %s.\n"),
+ lo_name);
+ return;
+ }
+ if (name)
+ srcFile = name;
+ }
+
+ if (module == NULL || module->get_name () == NULL)
+ {
+ fprintf (stderr, GTXT ("Error: Object name not recorded in experiment\n"));
+ return;
+ }
+ module->read_stabs ();
+
+ if (!isDisasm && (module->file_name == NULL
+ || (module->flags & MOD_FLAG_UNKNOWN) != 0
+ || *module->file_name == 0))
+ {
+ fprintf (stderr, GTXT ("Error: Source location not recorded in experiment\n"));
+ return;
+ }
+
+ MetricList *metric_list = dbev->get_metric_list (MET_NORMAL);
+ int sort_ref_index = metric_list->get_sort_ref_index ();
+ if (isDisasm)
+ metric_list->set_sort_ref_index (-1);
+
+ // Ask DbeView to generate function-level data
+ // MSI: I think this is used only to get totals to compute percentages
+ hist_data = dbev->get_hist_data (metric_list, Histable::FUNCTION, 0,
+ Hist_data::ALL);
+ MetricList *nmlist = hist_data->get_metric_list ();
+ metric_list->set_sort_ref_index (sort_ref_index);
+ if (nmlist->get_items ()->size () != 0
+ && hist_data->get_status () != Hist_data::SUCCESS)
+ {
+ errstr = DbeView::status_str (DbeView::DBEVIEW_NO_DATA);
+ if (errstr)
+ {
+ fprintf (stderr, GTXT ("Error: %s\n"), errstr);
+ free (errstr);
+ }
+ return;
+ }
+
+ marks = new Vector<int>;
+ if (isDisasm)
+ {
+ threshold = dbev->get_thresh_dis ();
+ compcom_bits = dbev->get_dis_compcom ();
+ src_visible = dbev->get_src_visible ();
+ hex_visible = dbev->get_hex_visible ();
+ srcmetrics_visible = dbev->get_srcmetric_visible ();
+ }
+ else
+ {
+ threshold = dbev->get_thresh_src ();
+ compcom_bits = dbev->get_src_compcom ();
+ src_visible = SRC_NA;
+ hex_visible = false;
+ srcmetrics_visible = false;
+ }
+
+ dump_anno_file (out_file, isDisasm ? Histable::INSTR : Histable::LINE,
+ module, dbev, nmlist, hist_data->get_totals ()->value,
+ srcFile, func, marks, threshold, compcom_bits,
+ src_visible, hex_visible, srcmetrics_visible);
+
+ delete marks;
+
+ errstr = module->anno_str ();
+ if (errstr)
+ {
+ fprintf (stderr, GTXT ("Error: %s\n"), errstr);
+ free (errstr);
+ }
+ delete hist_data;
+}
+
+void
+print_html_title (FILE *out_file, char *title)
+{
+ // This will print a header row for the report
+ fprintf (out_file, "<html><title>%s</title>\n", title);
+ fprintf (out_file, "<center><h3>%s</h3></center>\n", title);
+}
+
+void
+print_html_label (FILE *out_file, MetricList *metrics_list)
+{
+ int mlist_sz;
+
+ // This will print a header row for the metrics
+ Vector<Metric*> *mlist = metrics_list->get_items ();
+ mlist_sz = mlist->size ();
+
+ fprintf (out_file, "<style type=\"text/css\">\n");
+ fprintf (out_file, "<!--\nBODY\n");
+ fprintf (out_file, ".th_C { text-align:center; background-color:lightgoldenrodyellow; }\n");
+ fprintf (out_file, ".th_CG { text-align:center; background-color:#ffff33; }\n");
+ fprintf (out_file, ".th_L { text-align:left; background-color:lightgoldenrodyellow; }\n");
+ fprintf (out_file, ".th_LG { text-align:left; background-color:#ffff33; }\n");
+ fprintf (out_file, ".td_R { text-align:right; }\n");
+ fprintf (out_file, ".td_RG { text-align:right; background-color:#ffff33; }\n");
+ fprintf (out_file, ".td_L { text-align:left; }\n");
+ fprintf (out_file, ".td_LG { text-align:left; background-color:#ffff33; }\n");
+ fprintf (out_file, "-->\n</style>");
+ fprintf (out_file, "<center><table border=1 cellspacing=2>\n<tr>");
+
+ for (int index = 0; index < mlist_sz; index++)
+ {
+ Metric *mitem = mlist->fetch (index);
+ int ncols = 0;
+ if (mitem->is_visible ())
+ ncols++;
+ if (mitem->is_tvisible ())
+ ncols++;
+ if (mitem->is_pvisible ())
+ ncols++;
+ if (ncols == 0)
+ continue;
+ char *name = strdup (mitem->get_name ());
+ char *name2 = split_metric_name (name);
+ const char *style = index == metrics_list->get_sort_ref_index () ? "G" : "";
+
+ // start the column, with colspan setting, legend, and sort metric indicator
+ if (ncols == 1)
+ {
+ if (mitem->get_vtype () == VT_LABEL)
+ // left-adjust the name metric
+ fprintf (out_file,
+ "<th class=\"th_L%s\">%s&nbsp;<br>%s&nbsp;%s&nbsp;<br>%s&nbsp;</th>",
+ style, mitem->legend == NULL ? "&nbsp;" : mitem->legend,
+ (index == metrics_list->get_sort_ref_index ()) ? "&nabla;" : "&nbsp;",
+ name, name2 == NULL ? "&nbsp;" : name2);
+ else
+ // but center the others
+ fprintf (out_file,
+ "<th class=\"th_C%s\">%s&nbsp;<br>%s&nbsp;%s&nbsp;<br>%s&nbsp;</th>",
+ style, mitem->legend == NULL ? "&nbsp;" : mitem->legend,
+ (index == metrics_list->get_sort_ref_index ()) ?
+ "&nabla;" : "&nbsp;",
+ name, name2 == NULL ? NTXT ("&nbsp;") : name2);
+ }
+ else
+ // name metric can't span columns
+ fprintf (out_file,
+ "<th colspan=%d class=\"th_C%s\">%s&nbsp;<br>%s&nbsp;%s&nbsp;<br>%s&nbsp;</th>",
+ ncols, style,
+ mitem->legend == NULL ? "&nbsp;" : mitem->legend,
+ index == metrics_list->get_sort_ref_index () ?
+ "&nabla;" : "&nbsp;",
+ name, name2 == NULL ? "&nbsp;" : name2);
+
+ free (name);
+ }
+
+ // end this row, start the units row
+ fprintf (out_file, NTXT ("</tr>\n<tr>"));
+
+ // now do the units row
+ for (int index = 0; index < mlist_sz; index++)
+ {
+ Metric *mitem = mlist->fetch (index);
+ const char *style = index == metrics_list->get_sort_ref_index () ? "G" : "";
+
+ if (mitem->is_tvisible ())
+ fprintf (out_file, "<th class=\"th_C%s\">&nbsp;(%s)</th>", style,
+ GTXT ("sec."));
+ if (mitem->is_visible ())
+ {
+ if (mitem->get_abbr_unit () == NULL)
+ fprintf (out_file, "<th class=\"th_C%s\">&nbsp;</th>", style);
+ else
+ fprintf (out_file, "<th class=\"th_C%s\">(%s)</th>", style,
+ mitem->get_abbr_unit () == NULL ? "&nbsp;"
+ : mitem->get_abbr_unit ());
+ }
+ if (mitem->is_pvisible ())
+ fprintf (out_file, "<th class=\"th_C%s\">&nbsp;(%%)</th>", style);
+ }
+ fprintf (out_file, NTXT ("</tr>\n"));
+}
+
+void
+print_html_content (FILE *out_file, Hist_data *data, MetricList *metrics_list,
+ int limit, Histable::NameFormat nfmt)
+{
+ Hist_data::HistItem *item;
+
+ // printing contents.
+ for (int i = 0; i < limit; i++)
+ {
+ item = data->fetch (i);
+ print_html_one (out_file, data, item, metrics_list, nfmt);
+ }
+}
+
+void
+print_html_one (FILE *out_file, Hist_data *data, Hist_data::HistItem *item,
+ MetricList *metrics_list, Histable::NameFormat nfmt)
+{
+ Metric *mitem;
+ int index;
+ int visible, tvisible, pvisible;
+ TValue *value;
+ double percent;
+
+ fprintf (out_file, NTXT ("<tr>"));
+ Vec_loop (Metric*, metrics_list->get_items (), index, mitem)
+ {
+ visible = mitem->is_visible ();
+ tvisible = mitem->is_tvisible ();
+ pvisible = mitem->is_pvisible ();
+ const char *style = index == metrics_list->get_sort_ref_index () ? "G" : "";
+
+ if (tvisible)
+ {
+ value = &(item->value[index]);
+ if (value->ll == 0LL)
+ fprintf (out_file,
+ "<td class=\"td_R%s\"><tt>0.&nbsp;&nbsp;&nbsp;</tt></td>",
+ style);
+ else
+ fprintf (out_file, "<td class=\"td_R%s\"><tt>%4.3lf</tt></td>",
+ style, 1.e-6 * value->ll / dbeSession->get_clock (-1));
+ }
+
+ if (visible)
+ {
+ if (mitem->get_vtype () == VT_LABEL)
+ {
+ value = &(item->value[index]);
+ char *r;
+ if (value->tag == VT_OFFSET)
+ r = ((DataObject*) (item->obj))->get_offset_name ();
+ else
+ r = item->obj->get_name (nfmt);
+ char *n = html_ize_name (r);
+ fprintf (out_file, NTXT ("<td class=\"td_L%s\">%s</td>"), style, n);
+ free (n);
+ }
+ else
+ {
+ value = &(item->value[index]);
+ switch (value->tag)
+ {
+ case VT_DOUBLE:
+ if (value->d == 0.0)
+ fprintf (out_file,
+ "<td class=\"td_R%s\"><tt>0.&nbsp;&nbsp;&nbsp;</tt></td>",
+ style);
+ else
+ fprintf (out_file,
+ "<td class=\"td_R%s\"><tt>%4.3lf</tt></td>", style,
+ value->d);
+ break;
+ case VT_INT:
+ fprintf (out_file, "<td class=\"td_R%s\"><tt>%d</tt></td>",
+ style, value->i);
+ break;
+ case VT_LLONG:
+ fprintf (out_file, "<td class=\"td_R%s\"><tt>%lld</td></tt>",
+ style, value->ll);
+ break;
+ case VT_ULLONG:
+ fprintf (out_file, "<td class=\"td_R%s\"><tt>%llu</td></tt>",
+ style, value->ull);
+ break;
+ case VT_ADDRESS:
+ fprintf (out_file,
+ "<td class=\"td_R%s\"><tt>%u:0x%08x</tt></td>", style,
+ ADDRESS_SEG (value->ll), ADDRESS_OFF (value->ll));
+ break;
+ case VT_FLOAT:
+ if (value->f == 0.0)
+ fprintf (out_file,
+ "<td class=\"td_R%s\"><tt>0.&nbsp;&nbsp;&nbsp;</tt></td>",
+ style);
+ else
+ fprintf (out_file,
+ "<td class=\"td_R%s\"><tt>%4.3f</tt></td>",
+ style, value->f);
+ break;
+ case VT_SHORT:
+ fprintf (out_file, "<td class=\"td_R%s\"><tt>%d</tt></td>",
+ style, value->s);
+ break;
+ // ignoring the following cases (why?)
+ case VT_HRTIME:
+ case VT_LABEL:
+ case VT_OFFSET:
+ break;
+ }
+ }
+ }
+
+ if (pvisible)
+ {
+ percent = data->get_percentage (item->value[index].to_double (), index);
+ if (percent == 0.0)
+ // adjust to change format from xx.yy%
+ fprintf (out_file, "<td class=\"td_R%s\">0.&nbsp;&nbsp;&nbsp;</td>",
+ style);
+ else
+ // adjust format below to change format from xx.yy%
+ fprintf (out_file, "<td class=\"td_R%s\">%3.2f</td>", style,
+ (100.0 * percent));
+ }
+ }
+ fprintf (out_file, NTXT ("</tr>\n"));
+}
+
+void
+print_html_trailer (FILE *out_file)
+{
+ fprintf (out_file, NTXT ("</table></center></html>\n"));
+}
+
+static char *
+del_delim (char *s)
+{
+ size_t len = strlen (s);
+ if (len > 0)
+ s[len - 1] = 0;
+ return s;
+}
+
+void
+print_delim_label (FILE *out_file, MetricList *metrics_list, char delim)
+{
+ char line0[2 * MAX_LEN], line1[2 * MAX_LEN];
+ char line2[2 * MAX_LEN], line3[2 * MAX_LEN];
+ size_t len;
+
+ // This will print four header rows for the metrics
+ line0[0] = 0;
+ line1[0] = 0;
+ line2[0] = 0;
+ line3[0] = 0;
+ Vector<Metric*> *mlist = metrics_list->get_items ();
+ for (int index = 0, mlist_sz = mlist->size (); index < mlist_sz; index++)
+ {
+ Metric *mitem = mlist->fetch (index);
+ if (!(mitem->is_visible () || mitem->is_tvisible ()
+ || mitem->is_pvisible ()))
+ continue;
+ char *name = strdup (mitem->get_name ());
+ char *name2 = split_metric_name (name);
+
+ if (mitem->is_tvisible ())
+ {
+ len = strlen (line0);
+ snprintf (line0 + len, sizeof (line0) - len, NTXT ("\"%s\"%c"),
+ mitem->legend == NULL ? NTXT ("") : mitem->legend, delim);
+ len = strlen (line1);
+ snprintf (line1 + len, sizeof (line1) - len, NTXT ("\"%s\"%c"),
+ name, delim);
+ len = strlen (line2);
+ snprintf (line2 + len, sizeof (line2) - len, NTXT ("\"%s\"%c"),
+ name2 == NULL ? NTXT ("") : name2, delim);
+ len = strlen (line3);
+ if (index == metrics_list->get_sort_ref_index ())
+ snprintf (line3 + len, sizeof (line3) - len, NTXT ("\"V %s\"%c"),
+ GTXT ("(sec.)"), delim);
+ else
+ snprintf (line3 + len, sizeof (line3) - len, NTXT ("\" %s\"%c"),
+ GTXT ("(sec.)"), delim);
+ }
+ if (mitem->is_visible ())
+ {
+ len = strlen (line0);
+ snprintf (line0 + len, sizeof (line0) - len, "\"%s\"%c",
+ mitem->legend == NULL ? "" : mitem->legend, delim);
+
+ len = strlen (line1);
+ snprintf (line1 + len, sizeof (line1) - len, "\"%s\"%c",
+ name, delim);
+
+ len = strlen (line2);
+ snprintf (line2 + len, sizeof (line2) - len, "\"%s\"%c",
+ name2 == NULL ? NTXT ("") : name2, delim);
+
+ len = strlen (line3);
+ char *au = mitem->get_abbr_unit ();
+
+ if (index == metrics_list->get_sort_ref_index ())
+ {
+ if (au == NULL)
+ snprintf (line3 + len, sizeof (line3) - len, "\"V \"%c", delim);
+ else
+ snprintf (line3 + len, sizeof (line3) - len, "\"V (%s)\"%c",
+ au, delim);
+ }
+ else
+ {
+ if (au == NULL)
+ snprintf (line3 + len, sizeof (line3) - len, "\" \"%c",
+ delim);
+ else
+ snprintf (line3 + len, sizeof (line3) - len, "\" (%s)\"%c",
+ au, delim);
+ }
+ }
+ if (mitem->is_pvisible ())
+ {
+ len = strlen (line0);
+ snprintf (line0 + len, sizeof (line0) - len, NTXT ("\"%s\"%c"),
+ mitem->legend == NULL ? NTXT ("") : mitem->legend, delim);
+
+ len = strlen (line1);
+ snprintf (line1 + len, sizeof (line1) - len, NTXT ("\"%s\"%c"),
+ name, delim);
+
+ len = strlen (line2);
+ snprintf (line2 + len, sizeof (line2) - len, NTXT ("\"%s\"%c"),
+ name2 == NULL ? NTXT ("") : name2, delim);
+
+ len = strlen (line3);
+ if (index == metrics_list->get_sort_ref_index ())
+ snprintf (line3 + len, sizeof (line3) - len, NTXT ("\"V %s\"%c"),
+ NTXT ("%%"), delim);
+ else
+ snprintf (line3 + len, sizeof (line3) - len, NTXT ("\" %s\"%c"),
+ NTXT ("%%"), delim);
+ }
+ free (name);
+ }
+ // now remove the trailing delimiter, and print the four lines
+ fprintf (out_file, NTXT ("%s\n"), del_delim (line0));
+ fprintf (out_file, NTXT ("%s\n"), del_delim (line1));
+ fprintf (out_file, NTXT ("%s\n"), del_delim (line2));
+ fprintf (out_file, NTXT ("%s\n"), del_delim (line3));
+}
+
+void
+print_delim_content (FILE *out_file, Hist_data *data, MetricList *metrics_list,
+ int limit, Histable::NameFormat nfmt, char delim)
+{
+ Hist_data::HistItem *item;
+ int i;
+
+ // printing contents.
+ for (i = 0; i < limit; i++)
+ {
+ item = data->fetch (i);
+ print_delim_one (out_file, data, item, metrics_list, nfmt, delim);
+ }
+}
+
+void
+print_delim_trailer (FILE */*out_file*/, char /*delim*/) { }
+
+// EUGENE does this function work properly when "-compare ratio" is used?
+// how about when the ratio is nonzero-divided-by-zero?
+// EUGENE actually, review this entire file
+
+void
+print_delim_one (FILE *out_file, Hist_data *data, Hist_data::HistItem *item,
+ MetricList *metrics_list, Histable::NameFormat nfmt,
+ char delim)
+{
+ Metric *mitem;
+ int index;
+ int visible, tvisible, pvisible;
+ TValue *value;
+ double percent;
+ size_t len;
+
+ char line1[2 * MAX_LEN];
+ *line1 = 0;
+ Vec_loop (Metric*, metrics_list->get_items (), index, mitem)
+ {
+ visible = mitem->is_visible ();
+ tvisible = mitem->is_tvisible ();
+ pvisible = mitem->is_pvisible ();
+ if (tvisible)
+ {
+ value = &(item->value[index]);
+ len = strlen (line1);
+ if (value->ll == 0LL)
+ snprintf (line1 + len, sizeof (line1) - len, "\"0.\"%c", delim);
+ else
+ snprintf (line1 + len, sizeof (line1) - len, "\"%4.3lf\"%c",
+ 1.e-6 * value->ll / dbeSession->get_clock (-1),
+ delim);
+ }
+
+ if (visible)
+ {
+ len = strlen (line1);
+ if (mitem->get_vtype () == VT_LABEL)
+ {
+ value = &(item->value[index]);
+ char *r;
+ if (value->tag == VT_OFFSET)
+ r = ((DataObject*) (item->obj))->get_offset_name ();
+ else
+ r = item->obj->get_name (nfmt);
+ char *p = csv_ize_name (r, delim);
+ snprintf (line1 + len, sizeof (line1) - len, "\"%s\"%c", p, delim);
+ free (p);
+ }
+ else
+ {
+ value = &(item->value[index]);
+ switch (value->tag)
+ {
+ case VT_DOUBLE:
+ if (value->d == 0.0)
+ snprintf (line1 + len, sizeof (line1) - len, "\"0.\"%c",
+ delim);
+ else
+ snprintf (line1 + len, sizeof (line1) - len, "\"%4.3lf\"%c",
+ value->d, delim);
+ break;
+ case VT_INT:
+ snprintf (line1 + len, sizeof (line1) - len, "\"%d\"%c",
+ value->i, delim);
+ break;
+ case VT_LLONG:
+ snprintf (line1 + len, sizeof (line1) - len, "\"%lld\"%c",
+ value->ll, delim);
+ break;
+ case VT_ULLONG:
+ snprintf (line1 + len, sizeof (line1) - len, "\"%llu\"%c",
+ value->ull, delim);
+ break;
+ case VT_ADDRESS:
+ snprintf (line1 + len, sizeof (line1) - len, "\"%u:0x%08x\"%c",
+ ADDRESS_SEG (value->ll),
+ ADDRESS_OFF (value->ll), delim);
+ break;
+ case VT_FLOAT:
+ if (value->f == 0.0)
+ snprintf (line1 + len, sizeof (line1) - len, "\"0.\"%c",
+ delim);
+ else
+ snprintf (line1 + len, sizeof (line1) - len, "\"%4.3f\"%c",
+ value->f, delim);
+ break;
+ case VT_SHORT:
+ snprintf (line1 + len, sizeof (line1) - len, "\"%d\"%c",
+ value->s, delim);
+ break;
+ // ignoring the following cases (why?)
+ case VT_HRTIME:
+ case VT_LABEL:
+ case VT_OFFSET:
+ break;
+ }
+ }
+ }
+
+ if (pvisible)
+ {
+ len = strlen (line1);
+ percent = data->get_percentage (item->value[index].to_double (), index);
+ if (percent == 0.0)
+ // adjust to change format from xx.yy%
+ snprintf (line1 + len, sizeof (line1) - len, "\"0.\"%c", delim);
+ else
+ // adjust format below to change format from xx.yy%
+ snprintf (line1 + len, sizeof (line1) - len, "\"%3.2f\"%c",
+ (100.0 * percent), delim);
+ }
+ }
+ fprintf (out_file, NTXT ("%s\n"), del_delim (line1));
+}
+
+char *
+html_ize_name (char *name)
+{
+ StringBuilder sb;
+ for (size_t i = 0; i < strlen (name); i++)
+ {
+ switch (name[i])
+ {
+ case ' ': sb.append (NTXT ("&nbsp;"));
+ break;
+ case '"': sb.append (NTXT ("&quot;"));
+ break;
+ case '&': sb.append (NTXT ("&amp;"));
+ break;
+ case '<': sb.append (NTXT ("&lt;"));
+ break;
+ case '>': sb.append (NTXT ("&gt;"));
+ break;
+ default: sb.append (name[i]);
+ break;
+ }
+ }
+ char *ret = sb.toString ();
+ return ret;
+}
+
+char *
+csv_ize_name (char *name, char /*delim*/)
+{
+ StringBuilder sb;
+ for (size_t i = 0; i < strlen (name); i++)
+ sb.append (name[i]);
+ char *ret = sb.toString ();
+ return ret;
+}
+
+// Split a metric name into two parts, replacing a blank with
+// a zero and returning pointer to the rest of the string, or
+// leaving the string unchanged, and returning NULL;
+
+char *
+split_metric_name (char *name)
+{
+ // figure out the most even split of the name
+ size_t len = strlen (name);
+ char *middle = &name[len / 2];
+
+ // find the first blank
+ char *first = strchr (name, (int) ' ');
+ if (first == NULL) // no blanks
+ return NULL;
+ char *last = first;
+ char *p = first;
+ for (;;)
+ {
+ p = strchr (p + 1, (int) ' ');
+ if (p == NULL)
+ break;
+ if (p < middle)
+ {
+ first = p;
+ last = p;
+ }
+ else
+ {
+ last = p;
+ break;
+ }
+ }
+ // pick the better of the two
+ char *ret;
+ int f = (int) (middle - first);
+ int l = (int) (last - middle);
+ if ((first == last) || (f <= l))
+ {
+ *first = '\0';
+ ret = first + 1;
+ }
+ else
+ {
+ *last = '\0';
+ ret = last + 1;
+ }
+ return ret;
+}
diff --git a/gprofng/src/Print.h b/gprofng/src/Print.h
new file mode 100644
index 00000000000..4bc66558b6f
--- /dev/null
+++ b/gprofng/src/Print.h
@@ -0,0 +1,283 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _PRINT_H
+#define _PRINT_H
+
+
+// Include files
+#include <stdio.h>
+#include <stdlib.h>
+#include "dbe_types.h"
+#include "Metric.h"
+#include "Hist_data.h"
+#include "Ovw_data.h"
+#include "Stats_data.h"
+#include "Emsg.h"
+#include "Exp_Layout.h"
+#include "DefaultMap.h"
+#include "FileData.h"
+#include "HeapData.h"
+#include "HashMap.h"
+
+const char nl[] = "\n";
+const char tab[] = "\t";
+
+// Printing options.
+enum Print_destination
+{
+ DEST_PRINTER = 0,
+ DEST_FILE = 1,
+ DEST_OPEN_FILE = 2
+};
+
+enum Print_mode
+{
+ MODE_LIST,
+ MODE_DETAIL,
+ MODE_GPROF,
+ MODE_ANNOTATED
+};
+
+struct Print_params
+{
+ Print_destination dest; // printer or file
+ char *name; // of printer or file
+ int ncopies; // # of copies
+ bool header; // print header first
+ FILE *openfile; // if destination is DEST_OPEN_FILE
+};
+
+class Experiment;
+class MetricList;
+class DbeView;
+class Stack_coverage;
+class Function;
+class LoadObject;
+
+// Class Definitions
+class er_print_common_display
+{
+public:
+ er_print_common_display ()
+ {
+ out_file = NULL;
+ pr_params.header = false;
+ }
+
+ virtual ~er_print_common_display () { }
+
+ // Open the file/printer to write to
+ int open (Print_params *);
+
+ void
+ set_out_file (FILE *o)
+ {
+ out_file = o;
+ pr_params.dest = DEST_FILE;
+ }
+
+ // Print the final output data. This function calls
+ // data_dump() to actually do the dumping of data.
+ bool print_output ();
+
+ // Print the output in the appropriate format.
+ virtual void data_dump () = 0;
+
+ void header_dump (int exp_idx);
+
+ // Return the report. If the report size is greater than max, return truncated report
+ // Allocates memory, so the caller should free this memory.
+ char *get_output (int max);
+
+protected:
+ DbeView *dbev;
+ FILE *out_file;
+ Print_params pr_params;
+ char *tmp_file;
+ int exp_idx1, exp_idx2;
+ bool load;
+ bool header;
+};
+
+class er_print_histogram : public er_print_common_display
+{
+public:
+ er_print_histogram (DbeView *dbv, Hist_data *data, MetricList *metrics_list,
+ Print_mode disp_type, int limit, char *sort_name,
+ Histable *sobj, bool show_load, bool show_header);
+ void data_dump ();
+
+private:
+ void dump_list (int limit);
+ void dump_detail (int limit);
+ void get_gprof_width (Metric::HistMetric *hist_metric, int limit);
+ void dump_gprof (int limit);
+ void dump_annotated_dataobjects (Vector<int> *marks, int threshold);
+ void dump_annotated ();
+
+ Stack_coverage *stack_cov;
+ Hist_data *hist_data;
+ MetricList *mlist;
+ Print_mode type;
+ int number_entries;
+ char *sort_metric;
+ Histable *sel_obj;
+};
+
+class er_print_ctree : public er_print_common_display
+{
+public:
+ er_print_ctree (DbeView *dbv, Vector<Histable*> *cstack, Histable *sobj,
+ int limit);
+ void data_dump ();
+ void print_children (Hist_data *data, int index, Histable *obj, char *prefix,
+ Hist_data::HistItem *total);
+
+private:
+ Vector<Histable*> *cstack;
+ Histable *sobj;
+ MetricList *mlist;
+ Metric::HistMetric *hist_metric;
+ char **fmt_int;
+ char **fmt_real0;
+ char **fmt_real1;
+ int limit;
+ int print_row;
+};
+
+class er_print_gprof : public er_print_common_display
+{
+public:
+ er_print_gprof (DbeView *dbv, Vector<Histable*> *cstack);
+ void data_dump ();
+private:
+ Vector<Histable*> *cstack;
+};
+
+class er_print_leaklist : public er_print_common_display
+{
+public:
+ er_print_leaklist (DbeView *dbv, bool show_leak,
+ bool show_alloca, int limit);
+ void data_dump ();
+
+private:
+ bool leak;
+ bool alloca;
+ int limit;
+};
+
+class er_print_heapactivity : public er_print_common_display
+{
+public:
+ er_print_heapactivity (DbeView *_dbev, Histable::Type _type,
+ bool _printStat, int _limit);
+ void data_dump ();
+
+private:
+ void printStatistics (Hist_data *hist_data);
+ void printCallStacks (Hist_data *hist_data);
+
+ Histable::Type type;
+ bool printStat;
+ int limit;
+};
+
+class er_print_ioactivity : public er_print_common_display
+{
+public:
+ er_print_ioactivity (DbeView *_dbev, Histable::Type _type,
+ bool _printStat, int _limit);
+ void data_dump ();
+
+private:
+ void printStatistics (Hist_data *hist_data);
+ void printCallStacks (Hist_data *hist_data);
+
+ Histable::Type type;
+ bool printStat;
+ int limit;
+};
+
+class er_print_experiment : public er_print_common_display
+{
+public:
+ er_print_experiment (DbeView *me, int bgn_idx, int end_idx, bool show_load,
+ bool show_header, bool show_stat, bool show_over, bool show_odetail);
+ void data_dump ();
+
+private:
+ char fmt1[32], fmt2[32], fmt3[32], fmt4[32];
+ // buffers shared by the following functions
+ void overview_sum (int &maxlen);
+ void overview_dump (int exp_idx, int &maxlen);
+ void overview_summary (Ovw_data *ovw_data, int &maxlen);
+ void overview_item (Ovw_data::Ovw_item *ovw_item,
+ Ovw_data::Ovw_item *ovw_item_labels);
+ void overview_value (Value *value, ValueTag value_tag,
+ double total_value);
+ void statistics_sum (int &maxlen);
+ void statistics_dump (int exp_idx, int &maxlen);
+ void statistics_item (Stats_data *stats_data);
+
+ bool stat;
+ bool over;
+ bool odetail;
+};
+
+// Print the header. Experiment name and the sample
+// selection, along with the percentage.
+char *pr_load_objects (Vector<LoadObject*> *loadobjects, char *lead);
+char *pr_samples (Experiment *exp);
+char *pr_mesgs (Emsg *msg, const char *null_str, const char *lead);
+void print_load_object (FILE *out_file);
+void print_header (Experiment *exp, FILE *out_file);
+
+// Print Function metrics
+void get_width (Hist_data *data, MetricList *metrics_list,
+ Metric::HistMetric *hist_metric);
+void get_format (char **fmt_int, char **fmt_real0, char **fmt_real1,
+ MetricList *metrics_list, Metric::HistMetric *hist_metric,
+ int nspace);
+int print_label (FILE *out_file, MetricList *metrics_list,
+ Metric::HistMetric *hist_metric, int space);
+void print_anno_file (char *name, const char *sel, const char *srcFile,
+ bool isDisasm, FILE *dis_file, FILE *inp_file,
+ FILE *out_file, DbeView *dbev, bool xdefault);
+void print_html_title (FILE *out_file, char *title);
+void print_html_label (FILE *out_file, MetricList *metrics_list);
+void print_html_content (FILE *out_file, Hist_data *d, MetricList *metrics_list,
+ int limit, Histable::NameFormat nfmt);
+void print_html_one (FILE *out_file, Hist_data *data, Hist_data::HistItem *item,
+ MetricList *metrics_list, Histable::NameFormat nfmt);
+void print_html_trailer (FILE* out_file);
+char *html_ize_name (char *name);
+void print_delim_label (FILE *out_file, MetricList *metrics_list, char delim);
+void print_delim_content (FILE *out_file, Hist_data *data,
+ MetricList *metrics_list, int limit,
+ Histable::NameFormat nfmt, char delim);
+void print_delim_one (FILE *out_file, Hist_data *data, Hist_data::HistItem *item,
+ MetricList *metrics_list, Histable::NameFormat nfmt, char delim);
+void print_delim_trailer (FILE* out_file, char delim);
+char *csv_ize_name (char *name, char delim);
+char *split_metric_name (char *name);
+
+#endif
diff --git a/gprofng/src/QLParser.h b/gprofng/src/QLParser.h
new file mode 100644
index 00000000000..c4665e8f50a
--- /dev/null
+++ b/gprofng/src/QLParser.h
@@ -0,0 +1,61 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _QLPARSER_H
+#define _QLPARSER_H
+
+#include <sstream>
+#include <istream>
+#include <iostream>
+#include "Expression.h"
+
+/* This class contains parser inputs (a string, if non-NULL: if NULL, use cin),
+ and outputs (obtained via operator(), which resets the output
+ expression). The destructor deletes the returned expression to allow
+ exception throws on syntax error to clean up properly. */
+
+namespace QL
+{
+ struct Result
+ {
+ std::stringstream streamify;
+ public:
+ std::istream in;
+ Expression *out;
+
+ Result () : in (std::cin.rdbuf ()), out (NULL) { }
+ Result (const char *instr) : streamify (std::string (instr)),
+ in (streamify.rdbuf ()), out (NULL) { }
+
+ Expression *operator() ()
+ {
+ Expression *o = out;
+ out = NULL;
+ return o;
+ }
+
+ ~Result ()
+ {
+ delete out;
+ }
+ };
+};
+
+#endif /* _QLPARSER_H */
diff --git a/gprofng/src/QLParser.yy b/gprofng/src/QLParser.yy
new file mode 100644
index 00000000000..d7f732c737d
--- /dev/null
+++ b/gprofng/src/QLParser.yy
@@ -0,0 +1,418 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+// To rebuild QLParser.tab.cc and QLParser.tab.hh, use bison 3.6 or newer:
+// cd gprofng/src && bison QLParser.yy
+
+// For "api.parser.class"
+%require "3.0"
+%language "C++"
+
+%code top {
+#include <stdio.h>
+#include <string.h>
+#include <string>
+}
+%code requires {
+#include "QLParser.h"
+#include "DbeSession.h"
+#include "Expression.h"
+#include "Table.h"
+#include "i18n.h"
+}
+
+%code
+{
+namespace QL
+{
+ static QL::Parser::symbol_type yylex (QL::Result &result);
+
+ static Expression *
+ processName (std::string str)
+ {
+ const char *name = str.c_str();
+ int propID = dbeSession->getPropIdByName (name);
+ if (propID != PROP_NONE)
+ return new Expression (Expression::OP_NAME,
+ new Expression (Expression::OP_NUM, (uint64_t) propID));
+
+ // If a name is not statically known try user defined objects
+ Expression *expr = dbeSession->findObjDefByName (name);
+ if (expr != NULL)
+ return expr->copy();
+
+ throw Parser::syntax_error ("Name not found");
+ }
+}
+}
+
+%defines
+%define api.namespace {QL}
+// in Bison 3.3, use %define api.parser.class {Parser} instead parser_class_name
+%define parser_class_name {Parser}
+%define api.token.constructor
+%define api.value.type variant
+// Later: api.value.automove
+%define api.token.prefix {L_}
+%define parse.assert
+%param {QL::Result &result}
+
+%start S
+
+%token LPAR "("
+ RPAR ")"
+ HASPROP
+ FILEIOVFD
+
+%token YYEOF 0
+%token <uint64_t> NUM FNAME JGROUP JPARENT QSTR
+%token <std::string> NAME
+
+%nonassoc IN SOME ORDR
+%left COMMA ","
+%right QWE "?"
+ COLON ":"
+%left AND "&&"
+ OR "|"
+ EQV NEQV
+ BITAND BITOR
+ BITXOR "^"
+%nonassoc EQ "="
+ NE "!="
+ LT "<"
+ GT ">"
+ LE "<="
+ GE ">="
+%left LS "<<"
+ RS ">>"
+ ADD "+"
+ MINUS "-"
+ MUL "*"
+ DIV "/"
+ REM "%"
+%right DEG
+ NOT "!"
+ BITNOT "~"
+
+%type <Expression *> exp term
+
+// %destructor { delete $$; } <Expression *>;
+
+%%
+
+S: /* empty */ { result.out = new Expression (Expression::OP_NUM, (uint64_t) 1); }
+| exp { result.out = $1; }
+
+exp: exp DEG exp { $$ = new Expression (Expression::OP_DEG, $1, $3); } /* dead? */
+ | exp MUL exp { $$ = new Expression (Expression::OP_MUL, $1, $3); }
+ | exp DIV exp { $$ = new Expression (Expression::OP_DIV, $1, $3); }
+ | exp REM exp { $$ = new Expression (Expression::OP_REM, $1, $3); }
+ | exp ADD exp { $$ = new Expression (Expression::OP_ADD, $1, $3); }
+ | exp MINUS exp { $$ = new Expression (Expression::OP_MINUS, $1, $3); }
+ | exp LS exp { $$ = new Expression (Expression::OP_LS, $1, $3); }
+ | exp RS exp { $$ = new Expression (Expression::OP_RS, $1, $3); }
+ | exp LT exp { $$ = new Expression (Expression::OP_LT, $1, $3); }
+ | exp LE exp { $$ = new Expression (Expression::OP_LE, $1, $3); }
+ | exp GT exp { $$ = new Expression (Expression::OP_GT, $1, $3); }
+ | exp GE exp { $$ = new Expression (Expression::OP_GE, $1, $3); }
+ | exp EQ exp { $$ = new Expression (Expression::OP_EQ, $1, $3); }
+ | exp NE exp { $$ = new Expression (Expression::OP_NE, $1, $3); }
+ | exp BITAND exp { $$ = new Expression (Expression::OP_BITAND, $1, $3); }
+ | exp BITXOR exp { $$ = new Expression (Expression::OP_BITXOR, $1, $3); }
+ | exp BITOR exp { $$ = new Expression (Expression::OP_BITOR, $1, $3); }
+ | exp AND exp { $$ = new Expression (Expression::OP_AND, $1, $3); }
+ | exp OR exp { $$ = new Expression (Expression::OP_OR, $1, $3); }
+ | exp NEQV exp { $$ = new Expression (Expression::OP_NEQV, $1, $3); } /* dead? */
+ | exp EQV exp { $$ = new Expression (Expression::OP_EQV, $1, $3); } /* dead? */
+ | exp QWE exp COLON exp
+ {
+ $$ = new Expression (Expression::OP_QWE, $1,
+ new Expression (Expression::OP_COLON, $3, $5));
+ }
+ | exp COMMA exp { $$ = new Expression (Expression::OP_COMMA, $1, $3); }
+ | exp IN exp { $$ = new Expression (Expression::OP_IN, $1, $3); }
+ | exp SOME IN exp { $$ = new Expression (Expression::OP_SOMEIN, $1, $4); }
+ | exp ORDR IN exp { $$ = new Expression (Expression::OP_ORDRIN, $1, $4); }
+ | term { $$ = $1; }
+
+term: MINUS term
+ {
+ $$ = new Expression (Expression::OP_MINUS,
+ new Expression (Expression::OP_NUM, (uint64_t) 0), $2);
+ }
+ | NOT term { $$ = new Expression (Expression::OP_NOT, $2); }
+ | BITNOT term { $$ = new Expression (Expression::OP_BITNOT, $2); }
+ | LPAR exp RPAR { $$ = $2; }
+ | FNAME LPAR QSTR RPAR
+ {
+ $$ = new Expression (Expression::OP_FUNC,
+ new Expression (Expression::OP_NUM, $1),
+ new Expression (Expression::OP_NUM, $3));
+ }
+ | HASPROP LPAR NAME RPAR
+ {
+ $$ = new Expression (Expression::OP_HASPROP,
+ new Expression (Expression::OP_NUM, processName($3)));
+ }
+ | JGROUP LPAR QSTR RPAR
+ {
+ $$ = new Expression (Expression::OP_JAVA,
+ new Expression (Expression::OP_NUM, $1),
+ new Expression (Expression::OP_NUM, $3));
+ }
+ | JPARENT LPAR QSTR RPAR
+ {
+ $$ = new Expression (Expression::OP_JAVA,
+ new Expression (Expression::OP_NUM, $1),
+ new Expression (Expression::OP_NUM, $3));
+ }
+ | FILEIOVFD LPAR QSTR RPAR
+ {
+ $$ = new Expression (Expression::OP_FILE,
+ new Expression (Expression::OP_NUM, (uint64_t) 0),
+ new Expression (Expression::OP_NUM, $3));
+ }
+ | NUM { $$ = new Expression (Expression::OP_NUM, $1); }
+ | NAME { $$ = processName($1); }
+
+%%
+
+namespace QL
+{
+ static Parser::symbol_type
+ unget_ret (std::istream &in, char c, Parser::symbol_type tok)
+ {
+ in.putback (c);
+ return tok;
+ }
+
+ static Parser::symbol_type
+ yylex (QL::Result &result)
+ {
+ int base = 0;
+ int c;
+
+ do
+ c = result.in.get ();
+ while (result.in && (c == ' ' || c == '\t'));
+ if (!result.in)
+ return Parser::make_YYEOF ();
+
+ switch (c)
+ {
+ case '\0':
+ case '\n': return Parser::make_YYEOF ();
+ case '(': return Parser::make_LPAR () ;
+ case ')': return Parser::make_RPAR ();
+ case ',': return Parser::make_COMMA ();
+ case '%': return Parser::make_REM ();
+ case '/': return Parser::make_DIV ();
+ case '*': return Parser::make_MUL ();
+ case '-': return Parser::make_MINUS ();
+ case '+': return Parser::make_ADD ();
+ case '~': return Parser::make_BITNOT ();
+ case '^': return Parser::make_BITXOR ();
+ case '?': return Parser::make_QWE ();
+ case ':': return Parser::make_COLON ();
+ case '|':
+ c = result.in.get ();
+ if (c == '|')
+ return Parser::make_OR ();
+ else
+ return unget_ret (result.in, c, Parser::make_BITOR ());
+ case '&':
+ c = result.in.get ();
+ if (c == '&')
+ return Parser::make_AND ();
+ else
+ return unget_ret (result.in, c, Parser::make_BITAND ());
+ case '!':
+ c = result.in.get ();
+ if (c == '=')
+ return Parser::make_NE ();
+ else
+ return unget_ret (result.in, c, Parser::make_NOT ());
+ case '=':
+ c = result.in.get ();
+ if (c == '=')
+ return Parser::make_EQ ();
+ else
+ throw Parser::syntax_error ("Syntax error after =");
+ case '<':
+ c = result.in.get ();
+ if (c == '=')
+ return Parser::make_LE ();
+ else if (c == '<')
+ return Parser::make_LS ();
+ else
+ return unget_ret (result.in, c, Parser::make_LT ());
+ case '>':
+ c = result.in.get ();
+ if (c == '=')
+ return Parser::make_GE ();
+ else if (c == '>')
+ return Parser::make_RS ();
+ else
+ return unget_ret (result.in, c, Parser::make_GT ());
+ case '"':
+ {
+ int maxsz = 16;
+ char *str = (char *) malloc (maxsz);
+ char *ptr = str;
+
+ for (;;)
+ {
+ c = result.in.get ();
+ if (!result.in)
+ {
+ free (str);
+ throw Parser::syntax_error ("Unclosed \"");
+ }
+
+ switch (c)
+ {
+ case '"':
+ *ptr = (char)0;
+ // XXX omazur: need new string type
+ return Parser::make_QSTR ((uint64_t) str);
+ case 0:
+ case '\n':
+ free (str);
+ throw Parser::syntax_error ("Multiline strings are not supported");
+ default:
+ if (ptr - str >= maxsz)
+ {
+ size_t len = ptr - str;
+ maxsz = maxsz > 8192 ? maxsz + 8192 : maxsz * 2;
+ char *new_s = (char *) realloc (str, maxsz);
+ str = new_s;
+ ptr = str + len;
+ }
+ *ptr++ = c;
+ }
+ }
+ }
+ default:
+ if (c == '0')
+ {
+ base = 8;
+ c = result.in.get ();
+ if ( c == 'x' )
+ {
+ base = 16;
+ c = result.in.get ();
+ }
+ }
+ else if (c >= '1' && c <='9')
+ base = 10;
+
+ if (base)
+ {
+ uint64_t lval = 0;
+ for (;;)
+ {
+ int digit = -1;
+ switch (c)
+ {
+ case '0': case '1': case '2': case '3':
+ case '4': case '5': case '6': case '7':
+ digit = c - '0';
+ break;
+ case '8': case '9':
+ if (base > 8)
+ digit = c - '0';
+ break;
+ case 'a': case 'b': case 'c':
+ case 'd': case 'e': case 'f':
+ if (base == 16)
+ digit = c - 'a' + 10;
+ break;
+ case 'A': case 'B': case 'C':
+ case 'D': case 'E': case 'F':
+ if (base == 16)
+ digit = c - 'A' + 10;
+ break;
+ }
+ if (digit == -1)
+ {
+ result.in.putback (c);
+ break;
+ }
+ lval = lval * base + digit;
+ c = result.in.get ();
+ }
+ return Parser::make_NUM (lval);
+ }
+
+ if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'))
+ {
+ char name[32]; // omazur XXX: accept any length
+ name[0] = (char)c;
+ for (size_t i = 1; i < sizeof (name); i++)
+ {
+ c = result.in.get ();
+ if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') ||
+ (c >= '0' && c <= '9') || (c == '_'))
+ name[i] = c;
+ else
+ {
+ name[i] = (char)0;
+ result.in.putback (c);
+ break;
+ }
+ }
+
+ if (strcasecmp (name, NTXT ("IN")) == 0)
+ return Parser::make_IN ();
+ else if (strcasecmp (name, NTXT ("SOME")) == 0)
+ return Parser::make_SOME ();
+ else if (strcasecmp (name, NTXT ("ORDERED")) == 0)
+ return Parser::make_ORDR ();
+ else if (strcasecmp (name, NTXT ("TRUE")) == 0)
+ return Parser::make_NUM ((uint64_t) 1);
+ else if (strcasecmp (name, NTXT ("FALSE")) == 0)
+ return Parser::make_NUM ((uint64_t) 0);
+ else if (strcasecmp (name, NTXT ("FNAME")) == 0)
+ return Parser::make_FNAME (Expression::FUNC_FNAME);
+ else if (strcasecmp (name, NTXT ("HAS_PROP")) == 0)
+ return Parser::make_HASPROP ();
+ else if (strcasecmp (name, NTXT ("JGROUP")) == 0)
+ return Parser::make_JGROUP (Expression::JAVA_JGROUP);
+ else if (strcasecmp (name, NTXT ("JPARENT")) == 0 )
+ return Parser::make_JPARENT (Expression::JAVA_JPARENT);
+ else if (strcasecmp (name, NTXT ("DNAME")) == 0)
+ return Parser::make_FNAME (Expression::FUNC_DNAME);
+ else if (strcasecmp (name, NTXT ("FILEIOVFD")) == 0 )
+ return Parser::make_FILEIOVFD ();
+
+ std::string nm = std::string (name);
+ return Parser::make_NAME (nm);
+ }
+
+ throw Parser::syntax_error ("Syntax error");
+ }
+ }
+ void
+ Parser::error (const std::string &)
+ {
+ // do nothing for now
+ }
+}
+
diff --git a/gprofng/src/SAXParser.h b/gprofng/src/SAXParser.h
new file mode 100644
index 00000000000..dde3e064117
--- /dev/null
+++ b/gprofng/src/SAXParser.h
@@ -0,0 +1,49 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+/*
+ * javax/xml/parsers/SAXParser.java
+ *
+ * Based on JavaTM 2 Platform Standard Ed. 5.0
+ */
+
+#ifndef _SAXParser_h
+#define _SAXParser_h
+
+class File;
+class DefaultHandler;
+class SAXException;
+
+class SAXParser
+{
+public:
+
+ virtual ~SAXParser () { }
+ virtual void reset () { }
+ virtual void parse (File*, DefaultHandler*) = 0;
+ virtual bool isNamespaceAware () = 0;
+ virtual bool isValidating () = 0;
+
+protected:
+
+ SAXParser () { }
+};
+
+#endif /* _SAXParser_h */
diff --git a/gprofng/src/SAXParserFactory.cc b/gprofng/src/SAXParserFactory.cc
new file mode 100644
index 00000000000..7d9e8518494
--- /dev/null
+++ b/gprofng/src/SAXParserFactory.cc
@@ -0,0 +1,666 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <ctype.h>
+
+#include "util.h"
+#include "vec.h"
+#include "DefaultHandler.h"
+#include "SAXParser.h"
+#include "SAXParserFactory.h"
+#include "StringBuilder.h"
+
+/*
+ * Private implementation of Attributes
+ */
+class AttributesP : public Attributes
+{
+public:
+ AttributesP ();
+ ~AttributesP ();
+ int getLength ();
+ const char *getQName (int index);
+ const char *getValue (int index);
+ int getIndex (const char *qName);
+ const char *getValue (const char *qName);
+ void append (char *qName, char *value);
+
+private:
+ Vector<char*> *names;
+ Vector<char*> *values;
+};
+
+AttributesP::AttributesP ()
+{
+ names = new Vector<char*>;
+ values = new Vector<char*>;
+}
+
+AttributesP::~AttributesP ()
+{
+ Destroy (names);
+ Destroy (values);
+}
+
+int
+AttributesP::getLength ()
+{
+ return names->size ();
+}
+
+const char *
+AttributesP::getQName (int index)
+{
+ if (index < 0 || index >= names->size ())
+ return NULL;
+ return names->fetch (index);
+}
+
+const char *
+AttributesP::getValue (int index)
+{
+ if (index < 0 || index >= values->size ())
+ return NULL;
+ return values->fetch (index);
+}
+
+int
+AttributesP::getIndex (const char *qName)
+{
+ for (int idx = 0; idx < names->size (); idx++)
+ if (strcmp (names->fetch (idx), qName) == 0)
+ return idx;
+ return -1;
+}
+
+const char *
+AttributesP::getValue (const char *qName)
+{
+ for (int idx = 0; idx < names->size (); idx++)
+ if (strcmp (names->fetch (idx), qName) == 0)
+ return values->fetch (idx);
+ return NULL;
+}
+
+void
+AttributesP::append (char *qName, char *value)
+{
+ names->append (qName);
+ values->append (value);
+}
+
+/*
+ * Implementation of SAXException
+ */
+SAXException::SAXException ()
+{
+ message = strdup ("null");
+}
+
+SAXException::SAXException (const char *_message)
+{
+ if (_message == NULL)
+ message = strdup ("null");
+ else
+ message = strdup (_message);
+}
+
+SAXException::~SAXException ()
+{
+ free (message);
+}
+
+char *
+SAXException::getMessage ()
+{
+ return message;
+}
+
+/*
+ * SAXParseException
+ */
+SAXParseException::SAXParseException (char *message, int _lineNumber, int _columnNumber)
+: SAXException (message == NULL ? GTXT ("XML parse error") : message)
+{
+ lineNumber = _lineNumber;
+ columnNumber = _columnNumber;
+}
+
+/*
+ * Private implementation of SAXParser
+ */
+class SAXParserP : public SAXParser
+{
+public:
+ SAXParserP ();
+ ~SAXParserP ();
+ void reset ();
+ void parse (File*, DefaultHandler*);
+
+ bool
+ isNamespaceAware ()
+ {
+ return false;
+ }
+
+ bool
+ isValidating ()
+ {
+ return false;
+ }
+
+private:
+
+ static const int CH_EOF = -1;
+
+ void nextch ();
+ bool isWSpace ();
+ void skipWSpaces ();
+ void scanString (const char *str);
+ char *parseName ();
+ char *parseString ();
+ char *decodeString (char *str);
+ Attributes *parseAttributes ();
+ void parseTag ();
+ void parseDocument ();
+ void parsePart (int idx);
+
+ DefaultHandler *dh;
+ int bufsz;
+ char *buffer;
+ int cntsz;
+ int idx;
+ int curch;
+ int line;
+ int column;
+};
+
+SAXParserP::SAXParserP ()
+{
+ dh = NULL;
+ bufsz = 0x2000;
+ buffer = (char*) malloc (bufsz);
+ cntsz = 0;
+ idx = 0;
+ line = 1;
+ column = 0;
+}
+
+SAXParserP::~SAXParserP ()
+{
+ free (buffer);
+}
+
+void
+SAXParserP::reset ()
+{
+ dh = NULL;
+ bufsz = 8192;
+ buffer = (char*) realloc (buffer, bufsz);
+ cntsz = 0;
+ idx = 0;
+ line = 1;
+ column = 0;
+}
+
+void
+SAXParserP::parse (File *f, DefaultHandler *_dh)
+{
+ if (_dh == NULL)
+ return;
+ dh = _dh;
+ FILE *file = (FILE*) f;
+ int rem = bufsz;
+ cntsz = 0;
+ idx = 0;
+ for (;;)
+ {
+ int n = (int) fread (buffer + cntsz, 1, rem, file);
+ if (ferror (file) || n <= 0)
+ break;
+ cntsz += n;
+ if (feof (file))
+ break;
+ rem -= n;
+ if (rem == 0)
+ {
+ int oldbufsz = bufsz;
+ bufsz = bufsz >= 0x100000 ? bufsz + 0x100000 : bufsz * 2;
+ buffer = (char*) realloc (buffer, bufsz);
+ rem = bufsz - oldbufsz;
+ }
+ }
+ nextch ();
+ parseDocument ();
+}
+
+static int
+hex (char c)
+{
+ if (c >= '0' && c <= '9')
+ return (c - '0');
+ else if (c >= 'a' && c <= 'f')
+ return 10 + (c - 'a');
+ return -1;
+}
+
+void
+SAXParserP::nextch ()
+{
+ curch = idx >= cntsz ? CH_EOF : buffer[idx++];
+ if (curch == '\n')
+ {
+ line += 1;
+ column = 0;
+ }
+ else
+ column += 1;
+}
+
+bool
+SAXParserP::isWSpace ()
+{
+ return curch == ' ' || curch == '\t' || curch == '\n' || curch == '\r';
+}
+
+void
+SAXParserP::skipWSpaces ()
+{
+ while (isWSpace ())
+ nextch ();
+}
+
+void
+SAXParserP::scanString (const char *str)
+{
+ if (str == NULL || *str == '\0')
+ return;
+ for (;;)
+ {
+ if (curch == CH_EOF)
+ break;
+ else if (curch == *str)
+ {
+ const char *p = str;
+ for (;;)
+ {
+ p += 1;
+ nextch ();
+ if (*p == '\0')
+ return;
+ if (curch != *p)
+ break;
+ }
+ }
+ nextch ();
+ }
+}
+
+char *
+SAXParserP::parseName ()
+{
+ StringBuilder *name = new StringBuilder ();
+
+ if ((curch >= 'A' && curch <= 'Z') || (curch >= 'a' && curch <= 'z'))
+ {
+ name->append ((char) curch);
+ nextch ();
+ while (isalnum (curch) != 0 || curch == '_')
+ {
+ name->append ((char) curch);
+ nextch ();
+ }
+ }
+
+ char *res = name->toString ();
+ delete name;
+ return res;
+}
+
+/**
+ * Replaces encoded XML characters with original characters
+ * Attention: this method reuses the same string that is passed as the argument
+ * @param str
+ * @return str
+ */
+char *
+SAXParserP::decodeString (char * str)
+{
+ // Check if string has %22% and replace it with double quotes
+ // Also replace all other special combinations.
+ char *from = str;
+ char *to = str;
+ if (strstr (from, "%") || strstr (from, "&"))
+ {
+ int len = strlen (from);
+ for (int i = 0; i < len; i++)
+ {
+ int nch = from[i];
+ // Process &...; combinations
+ if (nch == '&' && i + 3 < len)
+ {
+ if (from[i + 2] == 't' && from[i + 3] == ';')
+ {
+ // check &lt; &gt;
+ if (from[i + 1] == 'l')
+ {
+ nch = '<';
+ i += 3;
+ }
+ else if (from[i + 1] == 'g')
+ {
+ nch = '>';
+ i += 3;
+ }
+ }
+ else if (i + 4 < len && from[i + 4] == ';')
+ {
+ // check &amp;
+ if (from[i + 1] == 'a' && from[i + 2] == 'm' && from[i + 3] == 'p')
+ {
+ nch = '&';
+ i += 4;
+ }
+ }
+ else if ((i + 5 < len) && (from[i + 5] == ';'))
+ {
+ // check &apos; &quot;
+ if (from[i + 1] == 'a' && from[i + 2] == 'p'
+ && from[i + 3] == 'o' && from[i + 4] == 's')
+ {
+ nch = '\'';
+ i += 5;
+ }
+ if (from[i + 1] == 'q' && from[i + 2] == 'u' && from[i + 3] == 'o' && from[i + 4] == 't')
+ {
+ nch = '"';
+ i += 5;
+ }
+ }
+ }
+ // Process %XX% combinations
+ if (nch == '%' && i + 3 < len && from[i + 3] == '%')
+ {
+ int ch = hex (from[i + 1]);
+ if (ch >= 0)
+ {
+ int ch2 = hex (from[i + 2]);
+ if (ch2 >= 0)
+ {
+ ch = ch * 16 + ch2;
+ nch = ch;
+ i += 3;
+ }
+ }
+ }
+ *to++ = (char) nch;
+ }
+ *to = '\0';
+ }
+ return str;
+}
+
+char *
+SAXParserP::parseString ()
+{
+ StringBuilder *str = new StringBuilder ();
+ int quote = '>';
+ if (curch == '"')
+ {
+ quote = curch;
+ nextch ();
+ }
+ for (;;)
+ {
+ if (curch == CH_EOF)
+ break;
+ if (curch == quote)
+ {
+ nextch ();
+ break;
+ }
+ str->append ((char) curch);
+ nextch ();
+ }
+
+ char *res = str->toString ();
+ // Decode XML characters
+ res = decodeString (res);
+ delete str;
+ return res;
+}
+
+Attributes *
+SAXParserP::parseAttributes ()
+{
+ AttributesP *attrs = new AttributesP ();
+
+ for (;;)
+ {
+ skipWSpaces ();
+ char *name = parseName ();
+ if (name == NULL || *name == '\0')
+ {
+ free (name);
+ break;
+ }
+ skipWSpaces ();
+ if (curch != '=')
+ {
+ SAXParseException *e = new SAXParseException (NULL, line, column);
+ dh->error (e);
+ scanString (">");
+ free (name);
+ return attrs;
+ }
+ nextch ();
+ skipWSpaces ();
+ char *value = parseString ();
+ attrs->append (name, value);
+ }
+ return attrs;
+}
+
+void
+SAXParserP::parseTag ()
+{
+ skipWSpaces ();
+ bool empty = false;
+ char *name = parseName ();
+ if (name == NULL || *name == '\0')
+ {
+ SAXParseException *e = new SAXParseException (NULL, line, column);
+ dh->error (e);
+ scanString (">");
+ free (name);
+ return;
+ }
+
+ Attributes *attrs = parseAttributes ();
+ if (curch == '/')
+ {
+ nextch ();
+ empty = true;
+ }
+ if (curch == '>')
+ nextch ();
+ else
+ {
+ empty = false;
+ SAXParseException *e = new SAXParseException (NULL, line, column);
+ dh->error (e);
+ scanString (">");
+ }
+ if (curch == CH_EOF)
+ {
+ free (name);
+ delete attrs;
+ return;
+ }
+ dh->startElement (NULL, NULL, name, attrs);
+ if (empty)
+ {
+ dh->endElement (NULL, NULL, name);
+ free (name);
+ delete attrs;
+ return;
+ }
+
+ StringBuilder *chars = new StringBuilder ();
+ bool wspaces = true;
+ for (;;)
+ {
+ if (curch == CH_EOF)
+ break;
+ else if (curch == '<')
+ {
+ if (chars->length () > 0)
+ {
+ char *str = chars->toString ();
+ // Decode XML characters
+ str = decodeString (str);
+ if (wspaces)
+ dh->ignorableWhitespace (str, 0, chars->length ());
+ else
+ dh->characters (str, 0, chars->length ());
+ free (str);
+ chars->setLength (0);
+ wspaces = true;
+ }
+ nextch ();
+ if (curch == '/')
+ {
+ nextch ();
+ char *ename = parseName ();
+ if (ename && *ename != '\0')
+ {
+ if (strcmp (name, ename) == 0)
+ {
+ skipWSpaces ();
+ if (curch == '>')
+ {
+ nextch ();
+ dh->endElement (NULL, NULL, name);
+ free (ename);
+ break;
+ }
+ SAXParseException *e = new SAXParseException (NULL, line, column);
+ dh->error (e);
+ }
+ else
+ {
+ SAXParseException *e = new SAXParseException (NULL, line, column);
+ dh->error (e);
+ }
+ scanString (">");
+ }
+ free (ename);
+ }
+ else
+ parseTag ();
+ }
+ else
+ {
+ if (!isWSpace ())
+ wspaces = false;
+ chars->append ((char) curch);
+ nextch ();
+ }
+ }
+
+ free (name);
+ delete attrs;
+ delete chars;
+ return;
+}
+
+void
+SAXParserP::parseDocument ()
+{
+ dh->startDocument ();
+ for (;;)
+ {
+ if (curch == CH_EOF)
+ break;
+ if (curch == '<')
+ {
+ nextch ();
+ if (curch == '?')
+ scanString ("?>");
+ else if (curch == '!')
+ scanString (">");
+ else
+ parseTag ();
+ }
+ else
+ nextch ();
+ }
+ dh->endDocument ();
+}
+
+/*
+ * Private implementation of SAXParserFactory
+ */
+class SAXParserFactoryP : public SAXParserFactory
+{
+public:
+ SAXParserFactoryP () { }
+ ~SAXParserFactoryP () { }
+ SAXParser *newSAXParser ();
+
+ void
+ setFeature (const char *, bool) { }
+
+ bool
+ getFeature (const char *)
+ {
+ return false;
+ }
+};
+
+SAXParser *
+SAXParserFactoryP::newSAXParser ()
+{
+ return new SAXParserP ();
+}
+
+/*
+ * SAXParserFactory
+ */
+const char *SAXParserFactory::DEFAULT_PROPERTY_NAME = "javax.xml.parsers.SAXParserFactory";
+
+SAXParserFactory *
+SAXParserFactory::newInstance ()
+{
+ return new SAXParserFactoryP ();
+}
+
+void
+DefaultHandler::dump_startElement (const char *qName, Attributes *attrs)
+{
+ fprintf (stderr, NTXT ("DefaultHandler::startElement qName='%s'\n"), STR (qName));
+ for (int i = 0, sz = attrs ? attrs->getLength () : 0; i < sz; i++)
+ {
+ const char *qn = attrs->getQName (i);
+ const char *vl = attrs->getValue (i);
+ fprintf (stderr, NTXT (" %d '%s' = '%s'\n"), i, STR (qn), STR (vl));
+ }
+}
diff --git a/gprofng/src/SAXParserFactory.h b/gprofng/src/SAXParserFactory.h
new file mode 100644
index 00000000000..8e2c366b726
--- /dev/null
+++ b/gprofng/src/SAXParserFactory.h
@@ -0,0 +1,75 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+/*
+ * javax/xml/parsers/SAXParserFactory.java
+ *
+ * Based on JavaTM 2 Platform Standard Ed. 5.0
+ */
+
+#ifndef _SAXParserFactory_h
+#define _SAXParserFactory_h
+
+class SAXParser;
+
+class SAXParserFactory
+{
+public:
+ static SAXParserFactory *newInstance ();
+
+ virtual ~SAXParserFactory () { }
+ virtual SAXParser *newSAXParser () = 0;
+ virtual void setFeature (const char *name, bool value) = 0;
+ virtual bool getFeature (const char *name) = 0;
+
+ void
+ setNamespaceAware (bool awareness)
+ {
+ namespaceAware = awareness;
+ }
+
+ void
+ setValidating (bool _validating)
+ {
+ validating = _validating;
+ }
+
+ bool
+ isNamespaceAware ()
+ {
+ return namespaceAware;
+ }
+
+ bool
+ isValidating ()
+ {
+ return validating;
+ }
+
+protected:
+ SAXParserFactory () { }
+
+private:
+ static const char *DEFAULT_PROPERTY_NAME;
+ bool validating;
+ bool namespaceAware;
+};
+
+#endif /* _SAXParserFactory_h */
diff --git a/gprofng/src/Sample.cc b/gprofng/src/Sample.cc
new file mode 100644
index 00000000000..7c0033498c6
--- /dev/null
+++ b/gprofng/src/Sample.cc
@@ -0,0 +1,94 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <assert.h>
+#include "Sample.h"
+#include "util.h"
+#include "Exp_Layout.h"
+
+Sample::Sample (int num)
+{
+ number = num;
+ prusage = NULL;
+ start_time = end_time = 0;
+ start_label = end_label = NULL;
+ validated = false;
+}
+
+Sample::~Sample ()
+{
+ delete prusage;
+ free (start_label);
+ free (end_label);
+}
+
+PrUsage *
+Sample::get_usage ()
+{
+ if (validated == false)
+ {
+ validate_usage ();
+ validated = true;
+ }
+ return prusage;
+}
+
+void
+Sample::validate_usage ()
+{
+ if (prusage == NULL || validated)
+ return;
+ validated = true;
+
+ // Make sure that none of the times are negative, force to zero if so
+ if (prusage->pr_utime < 0)
+ prusage->pr_utime = 0;
+ if (prusage->pr_stime < 0)
+ prusage->pr_stime = 0;
+ if (prusage->pr_ttime < 0)
+ prusage->pr_ttime = 0;
+ if (prusage->pr_tftime < 0)
+ prusage->pr_tftime = 0;
+ if (prusage->pr_dftime < 0)
+ prusage->pr_dftime = 0;
+ if (prusage->pr_kftime < 0)
+ prusage->pr_kftime = 0;
+ if (prusage->pr_ltime < 0)
+ prusage->pr_ltime = 0;
+ if (prusage->pr_slptime < 0)
+ prusage->pr_slptime = 0;
+ if (prusage->pr_wtime < 0)
+ prusage->pr_wtime = 0;
+ if (prusage->pr_stoptime < 0)
+ prusage->pr_stoptime = 0;
+ if (prusage->pr_rtime < 0)
+ prusage->pr_rtime = 0;
+
+ // Now make sure that the sum of states is >= prusage->pr_rtime
+ hrtime_t sum = prusage->pr_utime + prusage->pr_stime + prusage->pr_ttime
+ + prusage->pr_tftime + prusage->pr_dftime + prusage->pr_kftime
+ + prusage->pr_ltime + prusage->pr_slptime + prusage->pr_wtime
+ + prusage->pr_stoptime;
+
+ sum = sum - prusage->pr_rtime;
+ if (sum < 0)// increment sleep time to make it match
+ prusage->pr_slptime = prusage->pr_slptime - sum;
+}
diff --git a/gprofng/src/Sample.h b/gprofng/src/Sample.h
new file mode 100644
index 00000000000..312bdcc92d6
--- /dev/null
+++ b/gprofng/src/Sample.h
@@ -0,0 +1,80 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _SAMPLE_H
+#define _SAMPLE_H
+
+// A data Sample object represents a single sample's worth of data. This
+// object is private and is only used by Experiment and Sample_sel.
+
+#include "dbe_types.h"
+
+class PrUsage;
+
+class Sample
+{
+ friend class Experiment; // see post_process(), read_overview_file()
+public:
+ Sample (int num);
+ ~Sample ();
+ PrUsage *get_usage ();
+
+ char *
+ get_start_label ()
+ {
+ return start_label;
+ }
+
+ char *
+ get_end_label ()
+ {
+ return end_label;
+ }
+
+ hrtime_t
+ get_start_time ()
+ {
+ return start_time;
+ }
+
+ hrtime_t
+ get_end_time ()
+ {
+ return end_time;
+ }
+
+ int
+ get_number ()
+ {
+ return number;
+ }
+
+private:
+ void validate_usage (); // Make sure usage data is consistent
+ bool validated; // if validation performed
+ char *start_label; // sample start label
+ char *end_label; // sample end label
+ hrtime_t start_time; // sample start time
+ hrtime_t end_time; // sample end time
+ PrUsage *prusage; // process usage data
+ int number; // sample number
+};
+
+#endif /* _SAMPLE_H */
diff --git a/gprofng/src/SegMem.h b/gprofng/src/SegMem.h
new file mode 100644
index 00000000000..fbfe727bbcb
--- /dev/null
+++ b/gprofng/src/SegMem.h
@@ -0,0 +1,76 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _SEGMEM_H
+#define _SEGMEM_H
+
+#include "dbe_types.h"
+class Histable;
+
+class SegMem
+{
+public:
+
+ // The various segments types.
+ enum Seg_mode
+ {
+ READ,
+ WRITE,
+ EXEC,
+ UNKNOWN
+ };
+
+ void
+ set_file_offset (uint64_t fo)
+ {
+ file_offset = fo;
+ }
+
+ uint64_t
+ get_file_offset ()
+ {
+ return file_offset;
+ }
+
+ void
+ set_mode (Seg_mode sm)
+ {
+ mode = sm;
+ }
+
+ Seg_mode
+ get_mode ()
+ {
+ return mode;
+ }
+
+ Size size; // Size of this instance
+ Histable *obj; // Pointer to Segment/Function object
+ Vaddr base; // Base address
+ hrtime_t load_time;
+ hrtime_t unload_time;
+ Size page_size;
+
+private:
+ uint64_t file_offset;
+ Seg_mode mode;
+};
+
+#endif /* _SEGMEM_H */
diff --git a/gprofng/src/Settings.cc b/gprofng/src/Settings.cc
new file mode 100644
index 00000000000..965b9174da6
--- /dev/null
+++ b/gprofng/src/Settings.cc
@@ -0,0 +1,1586 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <string.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/param.h>
+
+#include "enums.h"
+#include "Settings.h"
+#include "DbeSession.h"
+#include "Command.h"
+#include "Application.h"
+#include "MemorySpace.h"
+#include "StringBuilder.h"
+#include "Table.h"
+#include "Emsg.h"
+#include "util.h"
+#include "i18n.h"
+
+// Commands for compiler commentary
+static const char *comp_cmd[] = {
+ NTXT ("basic"),
+ NTXT ("version"),
+ NTXT ("warn"),
+ NTXT ("parallel"),
+ NTXT ("query"),
+ NTXT ("loop"),
+ NTXT ("pipe"),
+ NTXT ("inline"),
+ NTXT ("memops"),
+ NTXT ("fe"),
+ NTXT ("codegen"),
+ NTXT ("src"),
+ NTXT ("asrc"),
+ NTXT ("nosrc"),
+ NTXT ("hex"),
+ NTXT ("nohex"),
+ NTXT ("threshold"),
+ NTXT ("cf")
+};
+
+static const int comp_vis[] = {
+ CCMV_BASIC,
+ CCMV_VER,
+ CCMV_WARN,
+ CCMV_PAR,
+ CCMV_QUERY,
+ CCMV_LOOP,
+ CCMV_PIPE,
+ CCMV_INLINE,
+ CCMV_MEMOPS,
+ CCMV_FE,
+ CCMV_CG,
+ COMP_SRC,
+ COMP_SRC_METRIC,
+ COMP_NOSRC,
+ COMP_HEX,
+ COMP_NOHEX,
+ COMP_THRESHOLD,
+ COMP_CMPLINE
+};
+
+const int comp_size = sizeof (comp_cmd) / sizeof (char *);
+
+// Commands for timeline
+typedef enum
+{
+ TLCMD_INVALID,
+ TLCMD_ENTITY_MODE,
+ TLCMD_ALIGN,
+ TLCMD_DEPTH
+} TLModeSubcommand;
+
+typedef struct
+{
+ const char * cmdText;
+ TLModeSubcommand cmdType;
+ int cmdId;
+} TLModeCmd;
+static const TLModeCmd tlmode_cmd[] = {
+ // MODE commands
+ {NTXT ("lwp"), TLCMD_ENTITY_MODE, PROP_LWPID},
+ {NTXT ("thread"), TLCMD_ENTITY_MODE, PROP_THRID},
+ {NTXT ("cpu"), TLCMD_ENTITY_MODE, PROP_CPUID},
+ {NTXT ("experiment"), TLCMD_ENTITY_MODE, PROP_EXPID},
+ // ALIGN commands
+ {NTXT ("root"), TLCMD_ALIGN, TLSTACK_ALIGN_ROOT},
+ {NTXT ("leaf"), TLCMD_ALIGN, TLSTACK_ALIGN_LEAF},
+ // DEPTH commands
+ {NTXT ("depth"), TLCMD_DEPTH, 0 /* don't care */}
+};
+
+static const int tlmode_size = sizeof (tlmode_cmd) / sizeof (TLModeCmd);
+
+// Constructor
+
+Settings::Settings (Application *_app)
+{
+ // Remember the application
+ app = _app;
+
+ // Clear all default strings
+ str_vmode = NULL;
+ str_en_desc = NULL;
+ str_datamode = NULL;
+ str_scompcom = NULL;
+ str_sthresh = NULL;
+ str_dcompcom = NULL;
+ str_dthresh = NULL;
+ str_dmetrics = NULL;
+ str_dsort = NULL;
+ str_tlmode = NULL;
+ str_tldata = NULL;
+ str_tabs = NULL;
+ str_rtabs = NULL;
+ str_search_path = NULL;
+ str_name_format = NULL;
+ str_limit = NULL;
+ str_printmode = NULL;
+ str_compare = NULL;
+ preload_libdirs = NULL;
+ pathmaps = new Vector<pathmap_t*>;
+ lo_expands = new Vector<lo_expand_t*>;
+ lo_expand_default = LIBEX_SHOW;
+ is_loexpand_default = true;
+ tabs_processed = false;
+
+ // set default-default values
+ name_format = Histable::NA;
+ view_mode = VMODE_USER;
+ en_desc = false;
+ en_desc_cmp = NULL;
+ en_desc_usr = NULL;
+ src_compcom = 2147483647;
+ dis_compcom = 2147483647;
+#define DEFAULT_SRC_DIS_THRESHOLD 75
+ threshold_src = DEFAULT_SRC_DIS_THRESHOLD;
+ threshold_dis = DEFAULT_SRC_DIS_THRESHOLD;
+ src_visible = true;
+ srcmetric_visible = false;
+ hex_visible = false;
+ cmpline_visible = true;
+ funcline_visible = true;
+ tldata = NULL;
+ tlmode = 0;
+ stack_align = 0;
+ stack_depth = 0;
+ limit = 0;
+ // print mode is initialized after the .rc files are read
+ print_delim = ',';
+ compare_mode = CMP_DISABLE;
+ machinemodel = NULL;
+ ignore_no_xhwcprof = false;
+ ignore_fs_warn = false;
+
+ // construct the master list of tabs
+ buildMasterTabList ();
+
+ indx_tab_state = new Vector<bool>;
+ indx_tab_order = new Vector<int>;
+ mem_tab_state = new Vector<bool>;
+ mem_tab_order = new Vector<int>;
+
+ // note that the .rc files are not read here, but later
+}
+
+// Constructor for duplicating an existing Settings class
+
+Settings::Settings (Settings * _settings)
+{
+ int index;
+ app = _settings->app;
+
+ // Copy all default strings
+ str_vmode = dbe_strdup (_settings->str_vmode);
+ str_en_desc = dbe_strdup (_settings->str_en_desc);
+ str_datamode = dbe_strdup (_settings->str_datamode);
+ str_scompcom = dbe_strdup (_settings->str_scompcom);
+ str_sthresh = dbe_strdup (_settings->str_sthresh);
+ str_dcompcom = dbe_strdup (_settings->str_dcompcom);
+ str_dthresh = dbe_strdup (_settings->str_dthresh);
+ str_dmetrics = dbe_strdup (_settings->str_dmetrics);
+ str_dsort = dbe_strdup (_settings->str_dsort);
+ str_tlmode = dbe_strdup (_settings->str_tlmode);
+ str_tldata = dbe_strdup (_settings->str_tldata);
+ str_tabs = dbe_strdup (_settings->str_tabs);
+ str_rtabs = dbe_strdup (_settings->str_rtabs);
+ str_search_path = dbe_strdup (_settings->str_search_path);
+ str_name_format = dbe_strdup (_settings->str_name_format);
+ str_limit = dbe_strdup (_settings->str_limit);
+ str_printmode = dbe_strdup (_settings->str_printmode);
+ str_compare = dbe_strdup (_settings->str_compare);
+ preload_libdirs = dbe_strdup (_settings->preload_libdirs);
+
+ // replicate the pathmap vector
+ pathmap_t *thismap;
+ pathmap_t *newmap;
+ pathmaps = new Vector<pathmap_t*>;
+
+ Vec_loop (pathmap_t*, _settings->pathmaps, index, thismap)
+ {
+ newmap = new pathmap_t;
+ newmap->old_prefix = dbe_strdup (thismap->old_prefix);
+ newmap->new_prefix = dbe_strdup (thismap->new_prefix);
+ pathmaps->append (newmap);
+ }
+
+ // replicate the lo_expand vector and default
+ lo_expand_t *this_lo_ex;
+ lo_expand_t *new_lo_ex;
+ lo_expand_default = _settings->lo_expand_default;
+ is_loexpand_default = _settings->is_loexpand_default;
+ lo_expands = new Vector<lo_expand_t*>;
+
+ Vec_loop (lo_expand_t*, _settings->lo_expands, index, this_lo_ex)
+ {
+ new_lo_ex = new lo_expand_t;
+ new_lo_ex->libname = dbe_strdup (this_lo_ex->libname);
+ new_lo_ex->expand = this_lo_ex->expand;
+ lo_expands->append (new_lo_ex);
+ }
+ tabs_processed = _settings->tabs_processed;
+
+ // Copy the various values from the _settings instance
+ name_format = _settings->name_format;
+ view_mode = _settings->view_mode;
+ en_desc = false;
+ en_desc_cmp = NULL;
+ en_desc_usr = NULL;
+ if (_settings->en_desc_usr)
+ set_en_desc (_settings->en_desc_usr, true);
+ src_compcom = _settings->src_compcom;
+ dis_compcom = _settings->dis_compcom;
+ threshold_src = _settings->threshold_src;
+ threshold_dis = _settings->threshold_dis;
+ src_visible = _settings->src_visible;
+ srcmetric_visible = _settings->srcmetric_visible;
+ hex_visible = _settings->hex_visible;
+ cmpline_visible = _settings->cmpline_visible;
+ funcline_visible = _settings->funcline_visible;
+ tldata = dbe_strdup (_settings->tldata);
+ tlmode = _settings->tlmode;
+ stack_align = _settings->stack_align;
+ stack_depth = _settings->stack_depth;
+ limit = _settings->limit;
+ print_mode = _settings->print_mode;
+ print_delim = _settings->print_delim;
+ compare_mode = _settings->compare_mode;
+ machinemodel = dbe_strdup (_settings->machinemodel);
+ ignore_no_xhwcprof = _settings->ignore_no_xhwcprof;
+ ignore_fs_warn = _settings->ignore_fs_warn;
+
+ // copy the tab list, too
+ tab_list = new Vector<DispTab*>;
+ DispTab *dsptab;
+
+ Vec_loop (DispTab*, _settings->tab_list, index, dsptab)
+ {
+ DispTab *ntab;
+ ntab = new DispTab (dsptab->type, dsptab->order, dsptab->visible, dsptab->cmdtoken);
+ ntab->setAvailability (dsptab->available);
+ tab_list->append (ntab);
+ }
+
+ // construct the master list of memory tabs & copy order
+ index = _settings->mem_tab_state->size ();
+ mem_tab_state = new Vector<bool>(index);
+ mem_tab_order = new Vector<int>(index);
+ for (int i = 0; i < index; i++)
+ {
+ mem_tab_state->append (false);
+ mem_tab_order->append (_settings->mem_tab_order->fetch (i));
+ }
+
+ // construct the master list of index tabs & copy order
+ index = _settings->indx_tab_state->size ();
+ indx_tab_state = new Vector<bool>(index);
+ indx_tab_order = new Vector<int>(index);
+ for (int i = 0; i < index; i++)
+ indx_tab_order->append (_settings->indx_tab_order->fetch (i));
+ set_IndxTabState (_settings->indx_tab_state);
+}
+
+Settings::~Settings ()
+{
+ for (int i = 0; i < pathmaps->size (); ++i)
+ {
+ pathmap_t *pmap = pathmaps->fetch (i);
+ free (pmap->old_prefix);
+ free (pmap->new_prefix);
+ delete pmap;
+ }
+ delete pathmaps;
+
+ for (int i = 0; i < lo_expands->size (); ++i)
+ {
+ lo_expand_t *lo_ex = lo_expands->fetch (i);
+ free (lo_ex->libname);
+ delete lo_ex;
+ }
+ delete lo_expands;
+
+ tab_list->destroy ();
+ delete tab_list;
+ delete indx_tab_state;
+ delete indx_tab_order;
+ delete mem_tab_state;
+ delete mem_tab_order;
+
+ free (str_vmode);
+ free (str_en_desc);
+ free (str_datamode);
+ free (str_scompcom);
+ free (str_sthresh);
+ free (str_dcompcom);
+ free (str_dthresh);
+ free (str_dmetrics);
+ free (str_dsort);
+ free (str_tlmode);
+ free (str_tldata);
+ free (str_tabs);
+ free (str_rtabs);
+ free (str_search_path);
+ free (str_name_format);
+ free (str_limit);
+ free (str_compare);
+ free (str_printmode);
+ free (preload_libdirs);
+ free (tldata);
+ free (en_desc_usr);
+ if (en_desc_cmp)
+ {
+ regfree (en_desc_cmp);
+ delete en_desc_cmp;
+ }
+}
+
+/**
+ * Read .er.rc file from the specified location
+ * @param path
+ * @return
+ */
+char *
+Settings::read_rc (char *path)
+{
+ StringBuilder sb;
+ Emsgqueue *commentq = new Emsgqueue (NTXT ("setting_commentq"));
+
+ // Check file name
+ if (NULL == path)
+ return dbe_strdup (GTXT ("Error: empty file name"));
+ bool override = true;
+ set_rc (path, true, commentq, override);
+ Emsg *msg = commentq->fetch ();
+ while (msg != NULL)
+ {
+ char *str = msg->get_msg ();
+ sb.append (str);
+ msg = msg->next;
+ }
+ return sb.toString ();
+}
+
+void
+Settings::read_rc (bool ipc_or_rdt_mode)
+{
+ bool override = false;
+
+ // Read file from the current working directory
+ char *rc_path = realpath (NTXT ("./.gprofng.rc"), NULL);
+ if (rc_path)
+ set_rc (rc_path, true, app->get_comments_queue (), override, ipc_or_rdt_mode);
+
+ // Read file from the user's home directory
+ char *home = getenv (NTXT ("HOME"));
+ if (home)
+ {
+ char *strbuf = dbe_sprintf (NTXT ("%s/.gprofng.rc"), home);
+ char *home_rc_path = realpath (strbuf, NULL);
+ if (home_rc_path)
+ {
+ if (rc_path == NULL || strcmp (rc_path, home_rc_path) != 0)
+ set_rc (home_rc_path, true, app->get_comments_queue (), override, ipc_or_rdt_mode);
+ free (home_rc_path);
+ }
+ free (strbuf);
+ }
+ free (rc_path);
+
+ // Read system-wide file
+ rc_path = dbe_sprintf (NTXT ("%s/../etc/gprofng.rc"), app->get_run_dir ());
+ if (access (rc_path, R_OK | F_OK) != 0)
+ {
+ StringBuilder sb;
+ sb.sprintf (GTXT ("Warning: Default gprofng.rc file (%s) missing; configuration error "), rc_path);
+ Emsg *m = new Emsg (CMSG_COMMENT, sb);
+ app->get_comments_queue ()->append (m);
+ }
+ else
+ set_rc (rc_path, false, app->get_comments_queue (), override);
+ free (rc_path);
+ is_loexpand_default = true;
+ if (str_printmode == NULL)
+ {
+ // only if there's none set
+ print_mode = PM_TEXT;
+ str_printmode = dbe_strdup (NTXT ("text"));
+ }
+}
+
+
+// Handle various settings from reading the name .rc file
+// This function is called for each .rc file read, and, for
+// some settings, it accumulates the strings from the files.
+// For others, it accepts the first appearance for a setting in a
+// .rc file, and ignores subsequent appearances from other files.
+// Error messages are appended to the Emsgqueue specified by the caller
+
+#define MAXARGS 20
+
+void
+Settings::set_rc (const char *path, bool msg, Emsgqueue *commentq,
+ bool override, bool ipc_or_rdt_mode)
+{
+ CmdType cmd_type;
+ int arg_count, cparam;
+ char *cmd, *end_cmd, *strbuf;
+ char *arglist[MAXARGS];
+ StringBuilder sb;
+
+ FILE *fptr = fopen (path, NTXT ("r"));
+ if (fptr == NULL)
+ return;
+
+ if (msg)
+ {
+ sb.sprintf (GTXT ("Processed %s for default settings"), path);
+ Emsg *m = new Emsg (CMSG_COMMENT, sb);
+ commentq->append (m);
+ }
+ int line_no = 0;
+ end_cmd = NULL;
+ while (!feof (fptr))
+ {
+ char *script = read_line (fptr);
+ if (script == NULL)
+ continue;
+ line_no++;
+ strtok (script, NTXT ("\n"));
+
+ // extract the command
+ cmd = strtok (script, NTXT (" \t"));
+ if (cmd == NULL || *cmd == '#' || *cmd == '\n')
+ {
+ free (script);
+ continue;
+ }
+ char *remainder = strtok (NULL, NTXT ("\n"));
+ // now extract the arguments
+ int nargs = 0;
+ for (;;)
+ {
+ if (nargs >= MAXARGS)
+ {
+ if (!msg)
+ {
+ msg = true; // suppress repeats of header
+ Emsg *m = new Emsg (CMSG_COMMENT, GTXT ("Processed system gprofng.rc file for default settings"));
+ commentq->append (m);
+ }
+ sb.sprintf (GTXT ("Warning: more than %d arguments to %s command, line %d\n"),
+ MAXARGS, cmd, line_no);
+ Emsg *m = new Emsg (CMSG_COMMENT, sb);
+ commentq->append (m);
+ break;
+ }
+
+ char *nextarg = strtok (remainder, NTXT ("\n"));
+ if (nextarg == NULL || *nextarg == '#')
+ break;
+ arglist[nargs++] = parse_qstring (nextarg, &end_cmd);
+ remainder = end_cmd;
+ if (remainder == NULL)
+ break;
+ // skip any blanks or tabs to get to next argument
+ while (*remainder == ' ' || *remainder == '\t')
+ remainder++;
+ }
+ cmd_type = Command::get_command (cmd, arg_count, cparam);
+ // check for extra arguments
+ if ((cmd_type != UNKNOWN_CMD && cmd_type != INDXOBJDEF) && (nargs > arg_count))
+ {
+ if (!msg)
+ {
+ msg = true; // suppress repeats of header
+ Emsg *m = new Emsg (CMSG_COMMENT, GTXT ("Processed system gprofng.rc file for default settings"));
+ commentq->append (m);
+ }
+ sb.sprintf (GTXT ("Warning: extra arguments to %s command, line %d\n"), cmd, line_no);
+ Emsg *m = new Emsg (CMSG_COMMENT, sb);
+ commentq->append (m);
+ }
+ if (nargs < arg_count)
+ {
+ if (!msg)
+ {
+ msg = true; // suppress repeats of header
+ Emsg *m = new Emsg (CMSG_COMMENT, GTXT ("Processed system gprofng.rc file for default settings"));
+ commentq->append (m);
+ }
+ sb.sprintf (GTXT ("Error: missing arguments to %s command, line %d\n"),
+ cmd, line_no);
+ Emsg *m = new Emsg (CMSG_COMMENT, sb);
+ commentq->append (m);
+
+ // ignore this command
+ free (script);
+ continue;
+ }
+ if (ipc_or_rdt_mode && (cmd_type != ADDPATH) && (cmd_type != PATHMAP))
+ {
+ free (script);
+ continue;
+ }
+ switch (cmd_type)
+ {
+ case SCOMPCOM:
+ if (!str_scompcom || override)
+ {
+ str_scompcom = dbe_strdup (arglist[0]);
+ proc_compcom (arglist[0], true, true);
+ }
+ break;
+ case STHRESH:
+ if (!str_sthresh || override)
+ {
+ str_sthresh = dbe_strdup (arglist[0]);
+ proc_thresh (arglist[0], true, true);
+ break;
+ }
+ break;
+ case DCOMPCOM:
+ if (!str_dcompcom || override)
+ {
+ str_dcompcom = dbe_strdup (arglist[0]);
+ proc_compcom (arglist[0], false, true);
+ }
+ break;
+ case COMPCOM:
+ // process as if it were for both source and disassembly
+ // note that if it is set, subsequent SCOMPCOM and DCOMPCOM
+ // will be ignored
+ if (!str_scompcom || override)
+ {
+ str_scompcom = dbe_strdup (arglist[0]);
+ proc_compcom (arglist[0], true, true);
+ }
+ if (!str_dcompcom || override)
+ {
+ str_dcompcom = dbe_strdup (arglist[0]);
+ proc_compcom (arglist[0], false, true);
+ }
+ break;
+ case DTHRESH:
+ if (!str_dthresh || override)
+ {
+ str_dthresh = dbe_strdup (arglist[0]);
+ proc_thresh (arglist[0], false, true);
+ }
+ break;
+ case DMETRICS:
+ // append new settings to old, if necessary
+ if (str_dmetrics)
+ {
+ char *name = strstr (str_dmetrics, ":name");
+ if (name == NULL)
+ strbuf = dbe_sprintf ("%s:%s", str_dmetrics, arglist[0]);
+ else
+ {
+ char * next = strstr (name + 1, ":");
+ if (next == NULL)
+ {
+ name[0] = '\0';
+ strbuf = dbe_sprintf ("%s:%s:name", str_dmetrics, arglist[0]);
+ }
+ else
+ strbuf = dbe_sprintf ("%s:%s", str_dmetrics, arglist[0]);
+ }
+ free (str_dmetrics);
+ str_dmetrics = strbuf;
+ }
+ else
+ str_dmetrics = dbe_strdup (arglist[0]);
+ break;
+ case DSORT:
+ // append new settings to old, if necessary
+ if (str_dsort)
+ {
+ strbuf = dbe_sprintf (NTXT ("%s:%s"), str_dsort, arglist[0]);
+ free (str_dsort);
+ str_dsort = strbuf;
+ }
+ else
+ str_dsort = dbe_strdup (arglist[0]);
+ break;
+ case TLMODE:
+ if (!str_tlmode || override)
+ {
+ str_tlmode = dbe_strdup (arglist[0]);
+ proc_tlmode (arglist[0], true);
+ }
+ break;
+ case TLDATA:
+ if (!str_tldata || override)
+ {
+ str_tldata = dbe_strdup (arglist[0]);
+ proc_tldata (arglist[0], true);
+ }
+ break;
+ case TABS:
+ if (!str_tabs || override)
+ // the string is processed later, after all .rc files are read
+ str_tabs = dbe_strdup (arglist[0]);
+ break;
+ case RTABS:
+ if (!str_rtabs || override)
+ // the string is processed later, after all .rc files are read
+ str_rtabs = dbe_strdup (arglist[0]);
+ break;
+ case ADDPATH:
+ if (str_search_path)
+ {
+ strbuf = dbe_sprintf (NTXT ("%s:%s"), str_search_path, arglist[0]);
+ free (str_search_path);
+ str_search_path = strbuf;
+ }
+ else
+ str_search_path = dbe_strdup (arglist[0]);
+ break;
+ case PATHMAP:
+ {
+ char *err = add_pathmap (pathmaps, arglist[0], arglist[1]);
+ free (err); // XXX error is not reported
+ break;
+ }
+ case LIBDIRS:
+ if (preload_libdirs == NULL)
+ preload_libdirs = dbe_strdup (arglist[0]);
+ break;
+ case NAMEFMT:
+ if (name_format == Histable::NA)
+ set_name_format (arglist[0]);
+ break;
+ case VIEWMODE:
+ if (!str_vmode || override)
+ {
+ str_vmode = dbe_strdup (arglist[0]);
+ set_view_mode (arglist[0], true);
+ }
+ break;
+ case EN_DESC:
+ if (!str_en_desc || override)
+ {
+ str_en_desc = dbe_strdup (arglist[0]);
+ set_en_desc (arglist[0], true);
+ }
+ break;
+ case LIMIT:
+ if (!str_limit || override)
+ {
+ str_limit = dbe_strdup (arglist[0]);
+ set_limit (arglist[0], true);
+ }
+ break;
+ case PRINTMODE:
+ if (!str_printmode || override)
+ set_printmode (arglist[0]);
+ break;
+ case COMPARE:
+ if (!str_compare || override)
+ {
+ char *s = arglist[0];
+ if (s)
+ str_compare = dbe_strdup (s);
+ else
+ s = NTXT ("");
+ if (strcasecmp (s, NTXT ("OFF")) == 0
+ || strcmp (s, NTXT ("0")) == 0)
+ set_compare_mode (CMP_DISABLE);
+ else if (strcasecmp (s, NTXT ("ON")) == 0
+ || strcmp (s, NTXT ("1")) == 0)
+ set_compare_mode (CMP_ENABLE);
+ else if (strcasecmp (s, NTXT ("DELTA")) == 0)
+ set_compare_mode (CMP_DELTA);
+ else if (strcasecmp (s, NTXT ("RATIO")) == 0)
+ set_compare_mode (CMP_RATIO);
+ else
+ {
+ sb.sprintf (GTXT (" .er.rc:%d The argument of 'compare' should be 'on', 'off', 'delta', or 'ratio'"),
+ (int) line_no);
+ Emsg *m = new Emsg (CMSG_COMMENT, sb);
+ commentq->append (m);
+ }
+ }
+ break;
+
+ case INDXOBJDEF:
+ {
+ char *ret = dbeSession->indxobj_define (arglist[0], NULL, arglist[1], (nargs >= 3) ? PTXT (arglist[2]) : NULL, (nargs >= 4) ? PTXT (arglist[3]) : NULL);
+ if (ret != NULL)
+ {
+ sb.sprintf (GTXT (" %s: line %d `%s %s %s'\n"),
+ ret, line_no, cmd, arglist[0], arglist[1]);
+ Emsg *m = new Emsg (CMSG_COMMENT, sb);
+ commentq->append (m);
+ }
+ break;
+ }
+#ifdef sparc
+ //XXX: should be conditional on the experiment ARCH, not dbe ARCH
+ case IGNORE_NO_XHWCPROF:
+ // ignore absence of -xhwcprof info for dataspace profiling
+ set_ignore_no_xhwcprof (true);
+ break;
+#endif // sparc
+ case IGNORE_FS_WARN:
+ // ignore file system warning in experiments
+ set_ignore_fs_warn (true);
+ break;
+ case OBJECT_SHOW:
+ // Add the named libraries to the lib_expands array
+ set_libexpand (arglist[0], LIBEX_SHOW, true);
+ break;
+ case OBJECT_HIDE:
+ // Add the named libraries to the lib_expands array
+ set_libexpand (arglist[0], LIBEX_HIDE, true);
+ break;
+ case OBJECT_API:
+ // Add the named libraries to the lib_expands array
+ set_libexpand (arglist[0], LIBEX_API, true);
+ break;
+ case COMMENT:
+ // ignore the line
+ break;
+ default:
+ {
+ // unexpected command in an rc file
+ if (!msg)
+ {
+ // if quiet, can remain so no longer
+ msg = true;
+ Emsg *m = new Emsg (CMSG_COMMENT, GTXT ("Processed system gprofng.rc file for default settings"));
+ commentq->append (m);
+ }
+ sb.sprintf (GTXT (" Unrecognized .gprofng.rc command on line %d: `%.64s'"),
+ line_no, cmd);
+ Emsg *m = new Emsg (CMSG_COMMENT, sb);
+ commentq->append (m);
+ break;
+ }
+ }
+ free (script);
+ }
+ fclose (fptr);
+}
+
+Cmd_status
+Settings::set_view_mode (char *arg, bool rc)
+{
+ if (!strcasecmp (arg, NTXT ("user")))
+ view_mode = VMODE_USER;
+ else if (!strcasecmp (arg, NTXT ("expert")))
+ view_mode = VMODE_EXPERT;
+ else if (!strcasecmp (arg, NTXT ("machine")))
+ view_mode = VMODE_MACHINE;
+ else if (!rc)
+ return CMD_BAD_ARG;
+ return CMD_OK;
+}
+
+Cmd_status
+Settings::set_en_desc (char *arg, bool rc)
+{
+ regex_t *regex_desc = NULL;
+
+ // cases below should be similar to Coll_Ctrl::set_follow_mode() cases
+ if (!strcasecmp (arg, NTXT ("on")))
+ en_desc = true;
+ else if (!strcasecmp (arg, NTXT ("off")))
+ en_desc = false;
+ else if (arg[0] == '=' && arg[1] != 0)
+ {
+ // user has specified a string matching specification
+ int ercode;
+ { // compile regex_desc
+ char * str = dbe_sprintf (NTXT ("^%s$"), arg + 1);
+ regex_desc = new regex_t;
+ memset (regex_desc, 0, sizeof (regex_t));
+ ercode = regcomp (regex_desc, str, REG_EXTENDED | REG_NOSUB | REG_NEWLINE);
+ free (str);
+ }
+ if (ercode)
+ {
+ // syntax error in parsing string
+ delete regex_desc;
+ if (!rc)
+ return CMD_BAD_ARG;
+ return CMD_OK;
+ }
+ en_desc = true;
+ }
+ else
+ {
+ if (!rc)
+ return CMD_BAD_ARG;
+ return CMD_OK;
+ }
+ free (en_desc_usr);
+ en_desc_usr = dbe_strdup (arg);
+ if (en_desc_cmp)
+ {
+ regfree (en_desc_cmp);
+ delete en_desc_cmp;
+ }
+ en_desc_cmp = regex_desc;
+ return CMD_OK;
+}
+
+// See if a descendant matches either the lineage or the executable name
+bool
+Settings::check_en_desc (const char *lineage, const char *targname)
+{
+ bool rc;
+ if (en_desc_cmp == NULL)
+ return en_desc; // no specification was set, use the binary on/off value
+ if (lineage == NULL) // user doesn't care about specification
+ return en_desc; // use the binary on/off specification
+ if (!regexec (en_desc_cmp, lineage, 0, NULL, 0))
+ rc = true; // this one matches user specification
+ else if (targname == NULL)
+ rc = false; //a NULL name does not match any expression
+ else if (!regexec (en_desc_cmp, targname, 0, NULL, 0))
+ rc = true; // this one matches the executable name
+ else
+ rc = false;
+ return rc;
+}
+
+char *
+Settings::set_limit (char *arg, bool)
+{
+ limit = (int) strtol (arg, (char **) NULL, 10);
+ return NULL;
+}
+
+char *
+Settings::set_printmode (char *arg)
+{
+ if (arg == NULL)
+ return dbe_sprintf (GTXT ("The argument to '%s' must be '%s' or '%s' or a single-character"),
+ NTXT ("printmode"), NTXT ("text"), NTXT ("html"));
+ if (strlen (arg) == 1)
+ {
+ print_mode = PM_DELIM_SEP_LIST;
+ print_delim = arg[0];
+ }
+ else if (!strcasecmp (arg, NTXT ("text")))
+ print_mode = PM_TEXT;
+ else if (!strcasecmp (arg, NTXT ("html")))
+ print_mode = PM_HTML;
+ else
+ return dbe_sprintf (GTXT ("The argument to '%s' must be '%s' or '%s' or a single-character"),
+ NTXT ("printmode"), NTXT ("text"), NTXT ("html"));
+ free (str_printmode);
+ str_printmode = dbe_strdup (arg);
+ return NULL;
+}
+
+Cmd_status
+Settings::proc_compcom (const char *cmd, bool isSrc, bool rc)
+{
+ int ck_compcom_bits, ck_threshold;
+ bool ck_hex_visible = false;
+ bool ck_src_visible = false;
+ bool ck_srcmetric_visible = false;
+ bool got_compcom_bits, got_threshold, got_src_visible, got_srcmetric_visible;
+ bool got_hex_visible, got;
+ int len, i;
+ char *mcmd, *param;
+ int flag, value = 0;
+ Cmd_status status;
+ char buf[BUFSIZ], *list;
+
+ if (cmd == NULL)
+ return CMD_BAD;
+ ck_compcom_bits = 0;
+ ck_threshold = 0;
+ got_compcom_bits = got_threshold = got_src_visible = false;
+ got_srcmetric_visible = got_hex_visible = false;
+ snprintf (buf, sizeof (buf), NTXT ("%s"), cmd);
+ list = buf;
+ while ((mcmd = strtok (list, NTXT (":"))) != NULL)
+ {
+ list = NULL;
+ // if "all" or "none"
+ if (!strcasecmp (mcmd, Command::ALL_CMD))
+ {
+ got_compcom_bits = true;
+ ck_compcom_bits = CCMV_ALL;
+ continue;
+ }
+ else if (!strcasecmp (mcmd, Command::NONE_CMD))
+ {
+ got_compcom_bits = true;
+ ck_compcom_bits = 0;
+ continue;
+ }
+
+ // Find parameter after '='
+ param = strchr (mcmd, '=');
+ if (param)
+ {
+ *param = '\0';
+ param++;
+ }
+ status = CMD_OK;
+ got = false;
+ flag = 0;
+ len = (int) strlen (mcmd);
+ for (i = 0; status == CMD_OK && i < comp_size; i++)
+ if (!strncasecmp (mcmd, comp_cmd[i], len))
+ {
+ if (got) // Ambiguous comp_com command
+ status = CMD_AMBIGUOUS;
+ else
+ {
+ got = true;
+ flag = comp_vis[i];
+ // Check argument
+ if (flag == COMP_THRESHOLD)
+ {
+ if (param == NULL)
+ status = CMD_BAD_ARG;
+ else
+ {
+ value = (int) strtol (param, &param, 10);
+ if (value < 0 || value > 100)
+ status = CMD_OUTRANGE;
+ }
+ }
+ else if (param != NULL)
+ status = CMD_BAD_ARG;
+ }
+ }
+
+ // Not valid comp_com command
+ if (!got)
+ status = CMD_INVALID;
+ if (status != CMD_OK)
+ {
+ if (!rc)
+ return status;
+ continue;
+ }
+
+ // Set bits
+ switch (flag)
+ {
+ case COMP_CMPLINE:
+ cmpline_visible = true;
+ break;
+ case COMP_FUNCLINE:
+ funcline_visible = true;
+ break;
+ case COMP_THRESHOLD:
+ got_threshold = true;
+ ck_threshold = value;
+ break;
+ case COMP_SRC:
+ got_src_visible = true;
+ ck_src_visible = true;
+ break;
+ case COMP_SRC_METRIC:
+ got_srcmetric_visible = true;
+ ck_srcmetric_visible = true;
+ got_src_visible = true;
+ ck_src_visible = true;
+ break;
+ case COMP_NOSRC:
+ got_src_visible = true;
+ ck_src_visible = false;
+ break;
+ case COMP_HEX:
+ got_hex_visible = true;
+ ck_hex_visible = true;
+ break;
+ case COMP_NOHEX:
+ got_hex_visible = true;
+ ck_hex_visible = false;
+ break;
+ case CCMV_BASIC:
+ got_compcom_bits = true;
+ ck_compcom_bits = CCMV_BASIC;
+ break;
+ default:
+ got_compcom_bits = true;
+ ck_compcom_bits |= flag;
+ }
+ }
+
+ // No error, update
+ if (got_compcom_bits)
+ {
+ if (isSrc)
+ src_compcom = ck_compcom_bits;
+ else
+ dis_compcom = ck_compcom_bits;
+ }
+ if (got_threshold)
+ {
+ if (isSrc)
+ threshold_src = ck_threshold;
+ else
+ threshold_dis = ck_threshold;
+ }
+ if (got_src_visible)
+ src_visible = ck_src_visible;
+ if (got_srcmetric_visible)
+ srcmetric_visible = ck_srcmetric_visible;
+ if (got_hex_visible)
+ hex_visible = ck_hex_visible;
+ return CMD_OK;
+}
+
+// Process a threshold setting
+Cmd_status
+Settings::proc_thresh (char *cmd, bool isSrc, bool rc)
+{
+ int value;
+ if (cmd == NULL)
+ value = DEFAULT_SRC_DIS_THRESHOLD; // the default
+ else
+ value = (int) strtol (cmd, &cmd, 10);
+ if (value < 0 || value > 100)
+ {
+ if (!rc)
+ return CMD_OUTRANGE;
+ value = DEFAULT_SRC_DIS_THRESHOLD;
+ }
+ if (isSrc)
+ threshold_src = value;
+ else
+ threshold_dis = value;
+ return CMD_OK;
+}
+
+// return any error string from processing visibility settings
+char *
+Settings::get_compcom_errstr (Cmd_status status, const char *cmd)
+{
+ int i;
+ StringBuilder sb;
+ switch (status)
+ {
+ case CMD_BAD:
+ sb.append (GTXT ("No commentary classes has been specified."));
+ break;
+ case CMD_AMBIGUOUS:
+ sb.append (GTXT ("Ambiguous commentary classes: "));
+ break;
+ case CMD_BAD_ARG:
+ sb.append (GTXT ("Invalid argument for commentary classes: "));
+ break;
+ case CMD_OUTRANGE:
+ sb.append (GTXT ("Out of range commentary classes argument: "));
+ break;
+ case CMD_INVALID:
+ sb.append (GTXT ("Invalid commentary classes: "));
+ break;
+ case CMD_OK:
+ break;
+ }
+ if (cmd)
+ sb.append (cmd);
+ sb.append (GTXT ("\nAvailable commentary classes: "));
+ for (i = 0; i < comp_size; i++)
+ {
+ sb.append (comp_cmd[i]);
+ if (i == comp_size - 1)
+ sb.append (NTXT ("=#\n"));
+ else
+ sb.append (NTXT (":"));
+ }
+ return sb.toString ();
+}
+
+// Process a timeline-mode setting
+Cmd_status
+Settings::proc_tlmode (char *cmd, bool rc)
+{
+ bool got_tlmode, got_stack_align, got_stack_depth, got;
+ int ck_tlmode = 0, ck_stack_align = 0, ck_stack_depth = 0;
+ int len, i;
+ char *mcmd, *param;
+ int cmd_id, value = 0;
+ TLModeSubcommand cmd_type;
+ Cmd_status status;
+ char buf[BUFSIZ], *list;
+ if (cmd == NULL)
+ return CMD_BAD;
+ got_tlmode = got_stack_align = got_stack_depth = false;
+ snprintf (buf, sizeof (buf), NTXT ("%s"), cmd);
+ list = buf;
+ while ((mcmd = strtok (list, NTXT (":"))) != NULL)
+ {
+ list = NULL;
+
+ // Find parameter after '='
+ param = strchr (mcmd, '=');
+ if (param)
+ {
+ *param = '\0';
+ param++;
+ }
+ status = CMD_OK;
+ got = false;
+ cmd_id = 0;
+ cmd_type = TLCMD_INVALID;
+ len = (int) strlen (mcmd);
+ for (i = 0; status == CMD_OK && i < tlmode_size; i++)
+ {
+ if (!strncasecmp (mcmd, tlmode_cmd[i].cmdText, len))
+ {
+ if (got) // Ambiguous timeline mode
+ status = CMD_AMBIGUOUS;
+ else
+ {
+ got = true;
+ cmd_type = tlmode_cmd[i].cmdType;
+ cmd_id = tlmode_cmd[i].cmdId;
+
+ // Check argument
+ if (cmd_type == TLCMD_DEPTH)
+ {
+ if (param == NULL)
+ status = CMD_BAD_ARG;
+ else
+ {
+ value = (int) strtol (param, &param, 10);
+ if (value <= 0 || value > 256)
+ status = CMD_OUTRANGE;
+ }
+ }
+ else if (param != NULL)
+ status = CMD_BAD_ARG;
+ }
+ }
+ }
+
+ // Not valid timeline mode
+ if (!got)
+ status = CMD_INVALID;
+ if (status != CMD_OK)
+ {
+ if (!rc)
+ return status;
+ continue;
+ }
+
+ // Set bits
+ switch (cmd_type)
+ {
+ case TLCMD_ENTITY_MODE:
+ got_tlmode = true;
+ ck_tlmode = cmd_id;
+ break;
+ case TLCMD_ALIGN:
+ got_stack_align = true;
+ ck_stack_align = cmd_id;
+ break;
+ case TLCMD_DEPTH:
+ got_stack_depth = true;
+ ck_stack_depth = value;
+ break;
+ default:
+ break;
+ }
+ }
+
+ // No error, update
+ if (got_tlmode)
+ tlmode = ck_tlmode;
+ if (got_stack_align)
+ stack_align = ck_stack_align;
+ if (got_stack_depth)
+ stack_depth = ck_stack_depth;
+ return CMD_OK;
+}
+
+// Process timeline data specification
+Cmd_status
+Settings::proc_tldata (const char *cmd, bool /* if true, ignore any error */)
+{
+ free (tldata);
+ tldata = dbe_strdup (cmd); // let GUI parse it
+ return CMD_OK;
+}
+
+void
+Settings::set_tldata (const char* _tldata_str)
+{
+ free (tldata);
+ tldata = dbe_strdup (_tldata_str);
+}
+
+char*
+Settings::get_tldata ()
+{
+ return dbe_strdup (tldata);
+}
+
+Cmd_status
+Settings::set_name_format (char *arg)
+{
+ char *colon = strchr (arg, ':');
+ size_t arg_len = (colon) ? (colon - arg) : strlen (arg);
+ Histable::NameFormat fname_fmt = Histable::NA;
+ if (!strncasecmp (arg, NTXT ("long"), arg_len))
+ fname_fmt = Histable::LONG;
+ else if (!strncasecmp (arg, NTXT ("short"), arg_len))
+ fname_fmt = Histable::SHORT;
+ else if (!strncasecmp (arg, NTXT ("mangled"), arg_len))
+ fname_fmt = Histable::MANGLED;
+ else
+ return CMD_BAD_ARG;
+
+ bool soname_fmt = false;
+ if (colon && (colon + 1))
+ {
+ colon++;
+ if (!strcasecmp (colon, NTXT ("soname")))
+ soname_fmt = true;
+ else if (!strcasecmp (colon, NTXT ("nosoname")))
+ soname_fmt = false;
+ else
+ return CMD_BAD_ARG;
+ }
+ name_format = Histable::make_fmt (fname_fmt, soname_fmt);
+ return CMD_OK;
+}
+
+void
+Settings::buildMasterTabList ()
+{
+ tab_list = new Vector<DispTab*>;
+ int i = -1;
+
+ // Add tabs for all the known reports
+ tab_list->append (new DispTab (DSP_DEADLOCKS, i, false, DEADLOCK_EVNTS));
+ tab_list->append (new DispTab (DSP_FUNCTION, i, false, FUNCS));
+ tab_list->append (new DispTab (DSP_TIMELINE, i, false, TIMELINE));
+ tab_list->append (new DispTab (DSP_CALLTREE, i, false, CALLTREE));
+ tab_list->append (new DispTab (DSP_CALLFLAME, i, false, CALLFLAME));
+ tab_list->append (new DispTab (DSP_DUALSOURCE, i, false, DUALSOURCE));
+ tab_list->append (new DispTab (DSP_SOURCE_DISASM, i, false, SOURCEDISAM));
+ tab_list->append (new DispTab (DSP_SOURCE, i, false, SOURCE));
+ tab_list->append (new DispTab (DSP_LINE, i, false, HOTLINES));
+ tab_list->append (new DispTab (DSP_DISASM, i, false, DISASM));
+ tab_list->append (new DispTab (DSP_PC, i, false, HOTPCS));
+ tab_list->append (new DispTab (DSP_LEAKLIST, i, false, LEAKS));
+ tab_list->append (new DispTab (DSP_IOACTIVITY, i, false, IOACTIVITY));
+ tab_list->append (new DispTab (DSP_HEAPCALLSTACK, i, false, HEAP));
+ tab_list->append (new DispTab (DSP_IFREQ, i, false, IFREQ));
+ tab_list->append (new DispTab (DSP_CALLER, i, false, GPROF));
+ tab_list->append (new DispTab (DSP_STATIS, i, false, STATISTICS));
+ tab_list->append (new DispTab (DSP_EXP, i, false, HEADER));
+}
+
+// Update tablist based on data availability
+void
+Settings::updateTabAvailability ()
+{
+ int index;
+ DispTab *dsptab;
+
+ Vec_loop (DispTab*, tab_list, index, dsptab)
+ {
+ if (dsptab->type == DSP_DATAOBJ)
+ dsptab->setAvailability (dbeSession->is_datamode_available ());
+ else if (dsptab->type == DSP_DLAYOUT)
+ dsptab->setAvailability (dbeSession->is_datamode_available ());
+ else if (dsptab->type == DSP_LEAKLIST)
+ dsptab->setAvailability (false);
+ else if (dsptab->type == DSP_IOACTIVITY)
+ dsptab->setAvailability (dbeSession->is_iodata_available ());
+ else if (dsptab->type == DSP_HEAPCALLSTACK)
+ dsptab->setAvailability (dbeSession->is_heapdata_available ());
+ else if (dsptab->type == DSP_TIMELINE)
+ dsptab->setAvailability (dbeSession->is_timeline_available ());
+ else if (dsptab->type == DSP_IFREQ)
+ dsptab->setAvailability (dbeSession->is_ifreq_available ());
+ else if (dsptab->type == DSP_RACES)
+ dsptab->setAvailability (dbeSession->is_racelist_available ());
+ else if (dsptab->type == DSP_DEADLOCKS)
+ dsptab->setAvailability (dbeSession->is_deadlocklist_available ());
+ else if (dsptab->type == DSP_DUALSOURCE)
+ dsptab->setAvailability (dbeSession->is_racelist_available ()
+ || dbeSession->is_deadlocklist_available ());
+ }
+}
+
+// Process a tab setting
+Cmd_status
+Settings::proc_tabs (bool _rdtMode)
+{
+ int arg_cnt, cparam;
+ int count = 0;
+ int index;
+ DispTab *dsptab;
+ char *cmd;
+ if (tabs_processed == true)
+ return CMD_OK;
+ tabs_processed = true;
+ if (_rdtMode == true)
+ {
+ if (str_rtabs == NULL)
+ str_rtabs = strdup ("header");
+ cmd = str_rtabs;
+ }
+ else
+ {
+ if (str_tabs == NULL)
+ str_tabs = strdup ("header");
+ cmd = str_tabs;
+ }
+ if (strcmp (cmd, NTXT ("none")) == 0)
+ return CMD_OK;
+ Vector <char *> *tokens = split_str (cmd, ':');
+ for (long j = 0, sz = VecSize (tokens); j < sz; j++)
+ {
+ char *tabname = tokens->get (j);
+ // search for this tab command token
+ CmdType c = Command::get_command (tabname, arg_cnt, cparam);
+ if (c == INDXOBJ)
+ {
+ // set the bit for this subtype
+ indx_tab_state->store (cparam, true);
+ indx_tab_order->store (cparam, count++);
+ }
+ else
+ {
+ // search for this tab type in the regular tabs
+ Vec_loop (DispTab*, tab_list, index, dsptab)
+ {
+ if (dsptab->cmdtoken == c)
+ {
+ dsptab->visible = true;
+ dsptab->order = count++;
+ break;
+ }
+ }
+ }
+ free (tabname);
+ }
+ delete tokens;
+ return CMD_OK;
+}
+
+void
+Settings::set_MemTabState (Vector<bool>*selected)
+{
+ if (selected->size () == 0)
+ return;
+ for (int j = 0; j < mem_tab_state->size (); j++)
+ mem_tab_state->store (j, selected->fetch (j));
+}
+
+// define a new memory object type
+
+void
+Settings::mobj_define (MemObjType_t */* mobj */, bool state)
+{
+ if (mem_tab_state->size () == 0)
+ state = true;
+ mem_tab_state->append (state);
+ mem_tab_order->append (-1);
+}
+
+void
+Settings::set_IndxTabState (Vector<bool>*selected)
+{
+ for (int j = 0; j < selected->size (); j++)
+ indx_tab_state->store (j, selected->fetch (j));
+}
+
+// define a new index object type
+void
+Settings::indxobj_define (int type, bool state)
+{
+ indx_tab_state->store (type, state);
+ indx_tab_order->store (type, -1);
+}
+
+void
+Settings::set_pathmaps (Vector<pathmap_t*> *newPathMap)
+{
+ if (pathmaps)
+ {
+ pathmaps->destroy ();
+ delete pathmaps;
+ }
+ pathmaps = newPathMap;
+}
+
+static char *
+get_canonical_name (const char *fname)
+{
+ char *nm = dbe_strdup (fname);
+ for (size_t len = strlen (nm); (len > 0) && (nm[len - 1] == '/'); len--)
+ nm[len - 1] = 0;
+ return nm;
+}
+
+char *
+Settings::add_pathmap (Vector<pathmap_t*> *v, const char *from, const char *to)
+{
+ // Check for errors
+ if (from == NULL || to == NULL)
+ return dbe_strdup (GTXT ("Pathmap can have neither from nor to as NULL\n"));
+ if (strcmp (from, to) == 0)
+ return dbe_strdup (GTXT ("Pathmap from must differ from to\n"));
+ char *old_prefix = get_canonical_name (from);
+ char *new_prefix = get_canonical_name (to);
+
+ // Check the pathmap list
+ for (int i = 0, sz = v->size (); i < sz; i++)
+ {
+ pathmap_t *pmp = v->get (i);
+ if ((strcmp (pmp->old_prefix, old_prefix) == 0) &&(strcmp (pmp->new_prefix, new_prefix) == 0))
+ {
+ char *s = dbe_sprintf (GTXT ("Pathmap from `%s' to `%s' already exists\n"), old_prefix, new_prefix);
+ free (old_prefix);
+ free (new_prefix);
+ return s;
+ }
+ }
+ // construct a map for this pair
+ pathmap_t *thismap = new pathmap_t;
+ thismap->old_prefix = old_prefix;
+ thismap->new_prefix = new_prefix;
+ v->append (thismap);
+ return NULL;
+}
+
+// Set all shared object expands back to .rc file defaults,
+// as stored in the DbeSession Settings
+bool
+Settings::set_libdefaults ()
+{
+ // See if this is unchanged
+ if (is_loexpand_default == true)
+ return false; // no change
+
+ // replicate the DbeSession's lo_expand vector and default settings
+ lo_expand_t *this_lo_ex;
+ lo_expand_t *new_lo_ex;
+ int index;
+ lo_expand_default = dbeSession->get_settings ()->lo_expand_default;
+ lo_expands = new Vector<lo_expand_t*>;
+ Vec_loop (lo_expand_t*, dbeSession->get_settings ()->lo_expands, index, this_lo_ex)
+ {
+ new_lo_ex = new lo_expand_t;
+ new_lo_ex->libname = dbe_strdup (this_lo_ex->libname);
+ new_lo_ex->expand = this_lo_ex->expand;
+ lo_expands->append (new_lo_ex);
+ }
+ is_loexpand_default = true;
+ return true;
+}
+
+bool
+Settings::set_libexpand (char *cov, enum LibExpand expand, bool rc)
+{
+ int index;
+ lo_expand_t *loe;
+ bool change = false;
+ if (cov == NULL || !strcasecmp (cov, Command::ALL_CMD))
+ { // set all libraries
+ // set the default
+ if (lo_expand_default != expand)
+ {
+ lo_expand_default = expand;
+ change = true;
+ is_loexpand_default = false;
+ }
+
+ // and force any explicit settings to match, too
+ Vec_loop (lo_expand_t*, lo_expands, index, loe)
+ {
+ if (loe->expand != expand)
+ {
+ loe->expand = expand;
+ change = true;
+ is_loexpand_default = false;
+ }
+ }
+
+ }
+ else
+ { // parsing coverage
+ Vector <char *> *tokens = split_str (cov, ',');
+ for (long j = 0, sz = VecSize (tokens); j < sz; j++)
+ {
+ char *lo_name = tokens->get (j);
+ char *newname = get_basename (lo_name);
+ bool found = false;
+ Vec_loop (lo_expand_t*, lo_expands, index, loe)
+ {
+ if (strcmp (loe->libname, newname) == 0)
+ {
+ if (loe->expand != expand)
+ {
+ if (rc == false)
+ {
+ loe->expand = expand;
+ change = true;
+ is_loexpand_default = false;
+ }
+ }
+ found = true;
+ break;
+ }
+ }
+
+ if (found == false)
+ {
+ // construct a map for this pair
+ lo_expand_t *thisloe;
+ thisloe = new lo_expand_t;
+ thisloe->libname = dbe_strdup (newname);
+ thisloe->expand = expand;
+ change = true;
+ is_loexpand_default = false;
+
+ // add it to the vector
+ lo_expands->append (thisloe);
+ }
+ free (lo_name);
+ }
+ delete tokens;
+ }
+ return change;
+}
+
+enum LibExpand
+Settings::get_lo_setting (char *name)
+{
+ int index;
+ lo_expand_t *loe;
+ char *lo_name = get_basename (name);
+ Vec_loop (lo_expand_t*, lo_expands, index, loe)
+ {
+ if (strcmp (loe->libname, lo_name) == 0)
+ return loe->expand;
+ }
+ return lo_expand_default;
+}
diff --git a/gprofng/src/Settings.h b/gprofng/src/Settings.h
new file mode 100644
index 00000000000..fc696e8f845
--- /dev/null
+++ b/gprofng/src/Settings.h
@@ -0,0 +1,425 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _SETTINGS_H
+#define _SETTINGS_H
+
+#include <stdio.h>
+#include <regex.h>
+
+#include "gp-defs.h"
+#include "Histable.h"
+#include "MemorySpace.h"
+#include "Metric.h"
+#include "dbe_types.h"
+#include "dbe_structs.h"
+#include "enums.h"
+#include "vec.h"
+
+class Emsgqueue;
+class Application;
+
+struct DispTab;
+
+// Settings object
+
+class Settings
+{
+public:
+ friend class DbeView;
+ friend class DbeSession;
+
+ Settings (Application *_app);
+ Settings (Settings *_settings);
+ virtual ~Settings ();
+ void read_rc (bool ipc_or_rdt_mode); // read all rc files
+ char *read_rc (char *path); // read rc file
+ void buildMasterTabList (); // build list of Tabs that can be invoked
+ void updateTabAvailability (); // update for datamode, leaklist
+ Cmd_status set_name_format (char *str); // from a string
+
+ Vector<DispTab*> *
+ get_TabList () // Get the list of tabs for this view
+ {
+ return tab_list;
+ }
+
+ Vector<bool> *
+ get_MemTabState () // Get the list and order of memory tabs for this view
+ {
+ return mem_tab_state;
+ }
+
+ Vector<int> *
+ get_MemTabOrder ()
+ {
+ return mem_tab_order;
+ }
+
+ // Set the list of memory tabs for this view
+ void set_MemTabState (Vector<bool>*sel);
+
+ // add a newly-defined memory object tab
+ void mobj_define (MemObjType_t *, bool state);
+
+ // add a newly-defined index object tab
+ void indxobj_define (int type, bool state);
+
+ Vector<bool> *
+ get_IndxTabState () // Get the list and order of index tabs for this view
+ {
+ return indx_tab_state;
+ }
+
+ Vector<int> *
+ get_IndxTabOrder ()
+ {
+ return indx_tab_order;
+ }
+
+ // Set the list of index tabs for this view
+ void set_IndxTabState (Vector<bool>*sel);
+
+ void
+ set_name_format (int fname_fmt, bool soname_fmt)
+ {
+ name_format = Histable::make_fmt (fname_fmt, soname_fmt);
+ }
+
+ Histable::NameFormat
+ get_name_format ()
+ {
+ return name_format;
+ }
+
+ // public methods for setting and accessing the settings
+ Cmd_status set_view_mode (char *str, bool rc); // from a string
+
+ void
+ set_view_mode (VMode mode)
+ {
+ view_mode = mode;
+ }
+
+ VMode
+ get_view_mode ()
+ {
+ return view_mode;
+ }
+
+ // set the en_desc expression/on/off
+ Cmd_status set_en_desc (char *str, bool rc); // from a string
+ // check if the lineage or the target name matches the en_desc expression
+ bool check_en_desc (const char *lineage, const char *targname);
+
+ char *set_limit (char *str, bool rc); // from a string
+
+ char *
+ set_limit (int _limit)
+ {
+ limit = _limit;
+ return NULL;
+ }
+
+ int
+ get_limit ()
+ {
+ return limit;
+ }
+
+ char *set_printmode (char *_pmode);
+
+ // processing compiler commentary visibility bits
+ Cmd_status proc_compcom (const char *cmd, bool isSrc, bool rc);
+
+ // return any error string from processing visibility settings
+ char *get_compcom_errstr (Cmd_status status, const char *cmd);
+
+ // methods for setting and getting strings, and individual settings
+
+ char *
+ get_str_scompcom ()
+ {
+ return str_scompcom;
+ }
+
+ char *
+ get_str_dcompcom ()
+ {
+ return str_dcompcom;
+ }
+
+ int
+ get_src_compcom ()
+ {
+ return src_compcom;
+ }
+
+ int
+ get_dis_compcom ()
+ {
+ return dis_compcom;
+ }
+
+ void
+ set_cmpline_visible (bool v)
+ {
+ cmpline_visible = v;
+ }
+
+ void
+ set_funcline_visible (bool v)
+ {
+ funcline_visible = v;
+ }
+
+ void
+ set_src_visible (int v)
+ {
+ src_visible = v;
+ }
+
+ int
+ get_src_visible ()
+ {
+ return src_visible;
+ }
+
+ void
+ set_srcmetric_visible (bool v)
+ {
+ srcmetric_visible = v;
+ }
+
+ bool
+ get_srcmetric_visible ()
+ {
+ return srcmetric_visible;
+ }
+
+ void
+ set_hex_visible (bool v)
+ {
+ hex_visible = v;
+ }
+
+ bool
+ get_hex_visible ()
+ {
+ return hex_visible;
+ }
+
+ // processing and accessing the threshold settings
+ Cmd_status proc_thresh (char *cmd, bool isSrc, bool rc);
+
+ int
+ get_thresh_src ()
+ {
+ return threshold_src;
+ }
+
+ int
+ get_thresh_dis ()
+ {
+ return threshold_dis;
+ }
+
+ // process a tlmode setting
+ Cmd_status proc_tlmode (char *cmd, bool rc);
+
+ void
+ set_tlmode (int _tlmode)
+ {
+ tlmode = _tlmode;
+ }
+
+ int
+ get_tlmode ()
+ {
+ return tlmode;
+ }
+
+ void
+ set_stack_align (int _stack_align)
+ {
+ stack_align = _stack_align;
+ }
+
+ int
+ get_stack_align ()
+ {
+ return stack_align;
+ }
+
+ void
+ set_stack_depth (int _stack_depth)
+ {
+ stack_depth = _stack_depth;
+ }
+
+ int
+ get_stack_depth ()
+ {
+ return stack_depth;
+ }
+
+ // process a tabs setting: called when the tab list is requested
+ Cmd_status proc_tabs (bool _rdtMode);
+
+ Cmd_status proc_tldata (const char *cmd, bool rc); // process a tldata setting
+ void set_tldata (const char* tldata_string);
+ char *get_tldata ();
+
+ char *
+ get_default_metrics ()
+ {
+ return str_dmetrics;
+ }
+
+ char *
+ get_default_sort ()
+ {
+ return str_dsort;
+ }
+
+ void
+ set_ignore_no_xhwcprof (bool v) // ignore no xhwcprof errors for dataspace
+ {
+ ignore_no_xhwcprof = v;
+ }
+
+ bool
+ get_ignore_no_xhwcprof ()
+ {
+ return ignore_no_xhwcprof;
+ }
+
+ void
+ set_ignore_fs_warn (bool v) // ignore filesystem warnings in experiments
+ {
+ ignore_fs_warn = v;
+ }
+
+ bool
+ get_ignore_fs_warn ()
+ {
+ return ignore_fs_warn;
+ }
+
+ // add a pathmap
+ static char *add_pathmap (Vector<pathmap_t*> *v, const char *from, const char *to);
+ void set_pathmaps (Vector<pathmap_t*> *newPathMap);
+
+ // add a LoadObject expansion setting
+ bool set_libexpand (char *, enum LibExpand, bool);
+ enum LibExpand get_lo_setting (char *);
+
+ // set LoadObject expansion defaults back to .rc specifications
+ bool set_libdefaults ();
+
+ void
+ set_compare_mode (int mode)
+ {
+ compare_mode = mode;
+ }
+
+ int
+ get_compare_mode ()
+ {
+ return compare_mode;
+ }
+
+ char *
+ get_machinemodel ()
+ {
+ return dbe_strdup (machinemodel);
+ }
+
+ char *preload_libdirs;
+
+protected: // data
+ Application *app;
+
+ // default strings from .rc file
+ char *str_vmode;
+ char *str_en_desc;
+ char *str_datamode;
+ char *str_scompcom;
+ char *str_sthresh;
+ char *str_dcompcom;
+ char *str_dthresh;
+ char *str_dmetrics;
+ char *str_dsort;
+ char *str_tlmode;
+ char *str_tldata;
+ char *str_tabs;
+ char *str_rtabs;
+ char *str_search_path;
+ char *str_name_format;
+ char *str_limit;
+ char *str_printmode;
+ char *str_compare;
+
+ bool tabs_processed;
+
+ // Processed settings
+ bool en_desc; // controls for reading descendant processes
+ char * en_desc_usr; // selective descendants: user specificaton
+ regex_t * en_desc_cmp; // selective descendants: compiled specification
+ Histable::NameFormat name_format; // long/short/mangled naming for C++/Java
+ VMode view_mode; // Java mode
+ int src_compcom; // compiler commentary visibility for anno-src
+ int dis_compcom; // compiler commentary visibility for anno-dis
+ int threshold_src; // threshold for anno-src
+ int threshold_dis; // threshold for anno-dis
+ int cmpline_visible; // show compile-line flags
+ int funcline_visible; // show compile-line flags
+ int src_visible; // show source in disasm
+ bool srcmetric_visible; // show metrics for source in disasm
+ bool hex_visible; // show hex code in disasm
+ char* tldata; // timeline data type string
+ int tlmode; // timeline mode for bars
+ int stack_align; // timeline stack alignment
+ int stack_depth; // timeline stack depth
+ int limit; // print limit
+ enum PrintMode print_mode;// print mode
+ char print_delim; // the delimiter, if print mode = PM_DELIM_SEP_LIST
+ int compare_mode; // compare mode
+
+ char *machinemodel; // machine model for Memory Objects
+
+ bool ignore_no_xhwcprof; // ignore no -xhwcprof data in dataspace
+ bool ignore_fs_warn; // ignore file-system recording warning
+
+ void set_rc (const char *path, bool msg, Emsgqueue *commentq,
+ bool override, bool ipc_or_rdt_mode = false);
+
+ Vector<DispTab*> *tab_list;
+ Vector<pathmap_t*> *pathmaps;
+ Vector<lo_expand_t*> *lo_expands;
+ enum LibExpand lo_expand_default;
+ bool is_loexpand_default;
+ Vector<bool> *mem_tab_state;
+ Vector<int> *mem_tab_order;
+ Vector<bool> *indx_tab_state;
+ Vector<int> *indx_tab_order;
+};
+
+#endif /* ! _SETTINGS_H */
diff --git a/gprofng/src/SourceFile.cc b/gprofng/src/SourceFile.cc
new file mode 100644
index 00000000000..bd0a1f19556
--- /dev/null
+++ b/gprofng/src/SourceFile.cc
@@ -0,0 +1,229 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <unistd.h>
+
+#include "util.h"
+#include "DbeSession.h"
+#include "Function.h"
+#include "SourceFile.h"
+#include "DefaultMap.h"
+#include "DbeFile.h"
+#include "LoadObject.h"
+#include "Module.h"
+
+int SourceFile::curId = 0;
+
+SourceFile::SourceFile (const char *file_name)
+{
+ status = OS_NOTREAD;
+ srcLines = NULL;
+ srcInode = -1;
+ lines = NULL;
+ dbeLines = NULL;
+ functions = new DefaultMap<Function *, Function *>();
+ dbeFile = new DbeFile (file_name);
+ dbeFile->filetype |= DbeFile::F_SOURCE | DbeFile::F_FILE;
+ set_name ((char *) file_name);
+ srcMTime = (time_t) 0;
+ isTmpFile = false;
+ flags = 0;
+ read_stabs = false;
+ id = (uint64_t) ((Histable::SOURCEFILE << 24) + curId) << 32;
+ curId++;
+}
+
+SourceFile::~SourceFile ()
+{
+ destroy_map (DbeLine *, dbeLines);
+ delete functions;
+ delete dbeFile;
+ if (lines)
+ {
+ lines->destroy ();
+ delete lines;
+ }
+ if (srcLines)
+ {
+ free (srcLines->get (0));
+ delete srcLines;
+ }
+ if (isTmpFile)
+ unlink (name);
+}
+
+void
+SourceFile::set_name (char* _name)
+{
+ name = dbe_strdup (_name);
+}
+
+char*
+SourceFile::get_name (NameFormat)
+{
+ return name;
+}
+
+bool
+SourceFile::readSource ()
+{
+ if (srcLines)
+ return true;
+ status = OS_NOSRC;
+ char *location = dbeFile->get_location ();
+ if (location == NULL)
+ return false;
+ if (!isTmpFile)
+ srcMTime = dbeFile->sbuf.st_mtime;
+ srcInode = dbeFile->sbuf.st_ino;
+ size_t srcLen = dbeFile->sbuf.st_size;
+ int fd = open64 (location, O_RDONLY);
+ if (fd == -1)
+ {
+ status = OS_NOSRC;
+ return false;
+ }
+ char *srcMap = (char *) malloc (srcLen + 1);
+ int64_t sz = read_from_file (fd, srcMap, srcLen);
+ if (sz != (int64_t) srcLen)
+ append_msg (CMSG_ERROR, GTXT ("%s: Can read only %lld bytes instead %lld"),
+ location, (long long) sz, (long long) srcLen);
+ srcMap[sz] = 0;
+ close (fd);
+
+ // Count the number of lines in the file, converting <nl> to zero
+ srcLines = new Vector<char*>();
+ srcLines->append (srcMap);
+ for (int64_t i = 0; i < sz; i++)
+ {
+ if (srcMap[i] == '\r')
+ { // Window style
+ srcMap[i] = 0;
+ if (i + 1 < sz && srcMap[i + 1] != '\n')
+ srcLines->append (srcMap + i + 1);
+ }
+ else if (srcMap[i] == '\n')
+ {
+ srcMap[i] = '\0';
+ if (i + 1 < sz)
+ srcLines->append (srcMap + i + 1);
+ }
+ }
+ if (dbeLines)
+ {
+ Vector<DbeLine *> *v = dbeLines->values ();
+ for (long i = 0, sz1 = v ? v->size () : 0; i < sz1; i++)
+ {
+ DbeLine *p = v->get (i);
+ if (p->lineno >= srcLines->size ())
+ append_msg (CMSG_ERROR, GTXT ("Wrong line number %d. '%s' has only %d lines"),
+ p->lineno, dbeFile->get_location (), srcLines->size ());
+ }
+ delete v;
+ }
+ status = OS_OK;
+ return true;
+}
+
+char *
+SourceFile::getLine (int lineno)
+{
+ assert (srcLines != NULL);
+ if (lineno > 0 && lineno <= srcLines->size ())
+ return srcLines->get (lineno - 1);
+ return NTXT ("");
+}
+
+DbeLine *
+SourceFile::find_dbeline (Function *func, int lineno)
+{
+ if (lineno < 0 || (lineno == 0 && func == NULL))
+ return NULL;
+ DbeLine *dbeLine = NULL;
+ if (lines)
+ { // the source is available
+ if (lineno > lines->size ())
+ {
+ if (dbeLines)
+ dbeLine = dbeLines->get (lineno);
+ if (dbeLine == NULL)
+ append_msg (CMSG_ERROR,
+ GTXT ("Wrong line number %d. '%s' has only %d lines"),
+ lineno, dbeFile->get_location (), lines->size ());
+ }
+ else
+ {
+ dbeLine = lines->fetch (lineno);
+ if (dbeLine == NULL)
+ {
+ dbeLine = new DbeLine (NULL, this, lineno);
+ lines->store (lineno, dbeLine);
+ }
+ }
+ }
+ if (dbeLine == NULL)
+ { // the source is not yet read or lineno is wrong
+ if (dbeLines == NULL)
+ dbeLines = new DefaultMap<int, DbeLine *>();
+ dbeLine = dbeLines->get (lineno);
+ if (dbeLine == NULL)
+ {
+ dbeLine = new DbeLine (NULL, this, lineno);
+ dbeLines->put (lineno, dbeLine);
+ }
+ }
+
+ for (DbeLine *last = dbeLine;; last = last->dbeline_func_next)
+ {
+ if (last->func == func)
+ return last;
+ if (last->dbeline_func_next == NULL)
+ {
+ DbeLine *dl = new DbeLine (func, this, lineno);
+ if (functions->get (func) == NULL)
+ functions->put (func, func);
+ last->dbeline_func_next = dl;
+ dl->dbeline_base = dbeLine;
+ return dl;
+ }
+ }
+}
+
+Vector<Function *> *
+SourceFile::get_functions ()
+{
+ if (!read_stabs)
+ {
+ // Create all DbeLines for this Source
+ read_stabs = true;
+ Vector<LoadObject *> *lobjs = dbeSession->get_LoadObjects ();
+ for (long i = 0, sz = VecSize (lobjs); i < sz; i++)
+ {
+ LoadObject *lo = lobjs->get (i);
+ for (long i1 = 0, sz1 = VecSize (lo->seg_modules); i1 < sz1; i1++)
+ {
+ Module *mod = lo->seg_modules->get (i1);
+ mod->read_stabs ();
+ }
+ }
+ }
+ return functions->keySet ();
+}
diff --git a/gprofng/src/SourceFile.h b/gprofng/src/SourceFile.h
new file mode 100644
index 00000000000..8e906820a0b
--- /dev/null
+++ b/gprofng/src/SourceFile.h
@@ -0,0 +1,117 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _SOURCEFILE_H
+#define _SOURCEFILE_H
+
+#include "Histable.h"
+#include "Map.h"
+
+template <typename Key_t, typename Value_t> class Map;
+
+#define SOURCE_FLAG_UNKNOWN 0x01
+
+class SourceFile : public HistableFile
+{
+public:
+
+ enum OpenStatus
+ {
+ OS_OK,
+ OS_NOTREAD,
+ OS_NOSRC,
+ OS_TIMESRC
+ };
+
+ SourceFile (const char *file_name);
+ virtual ~SourceFile ();
+ virtual void set_name (char *);
+ virtual char *get_name (NameFormat = NA);
+
+ bool readSource ();
+ Vector<Function *> *get_functions ();
+ DbeLine *find_dbeline (Function *func, int lineno);
+ char *getLine (int lineno);
+
+ int
+ getLineCount ()
+ {
+ return srcLines ? srcLines->size () : 0;
+ }
+
+ ino64_t
+ getInode ()
+ {
+ return srcInode;
+ }
+
+ time_t
+ getMTime ()
+ {
+ return srcMTime;
+ }
+
+ void
+ setMTime (time_t tm)
+ {
+ srcMTime = tm;
+ }
+
+ bool
+ isTmp ()
+ {
+ return isTmpFile;
+ }
+
+ void
+ setTmp (bool set)
+ {
+ isTmpFile = set;
+ }
+
+ Histable_type
+ get_type ()
+ {
+ return SOURCEFILE;
+ }
+
+ DbeLine *
+ find_dbeline (int lineno)
+ {
+ return find_dbeline (NULL, lineno);
+ }
+
+ unsigned int flags;
+
+private:
+ static int curId; // object id
+ OpenStatus status;
+ ino64_t srcInode; // Inode number of source file
+ time_t srcMTime; // Creating time for source
+ Vector<char *> *srcLines; // array of pointers to lines in source
+ bool isTmpFile; // Temporary src file to be deleted
+
+ Vector<DbeLine*> *lines;
+ Map<int, DbeLine*> *dbeLines;
+ Map<Function *, Function *> *functions;
+ bool read_stabs;
+};
+
+#endif
diff --git a/gprofng/src/Stabs.cc b/gprofng/src/Stabs.cc
new file mode 100644
index 00000000000..9f1247d1b4f
--- /dev/null
+++ b/gprofng/src/Stabs.cc
@@ -0,0 +1,2650 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <sys/param.h>
+
+#include "util.h"
+#include "Elf.h"
+#include "Dwarf.h"
+#include "stab.h"
+#include "DbeSession.h"
+#include "CompCom.h"
+#include "Stabs.h"
+#include "LoadObject.h"
+#include "Module.h"
+#include "Function.h"
+#include "info.h"
+#include "StringBuilder.h"
+#include "DbeFile.h"
+#include "StringMap.h"
+
+#define DISASM_REL_NONE 0 /* symtab search only */
+#define DISASM_REL_ONLY 1 /* relocation search only */
+#define DISASM_REL_TARG 2 /* relocatoin then symtab */
+
+///////////////////////////////////////////////////////////////////////////////
+// class StabReader
+class StabReader
+{
+public:
+ StabReader (Elf *_elf, Platform_t platform, int StabSec, int StabStrSec);
+ ~StabReader () { };
+ char *get_type_name (int t);
+ char *get_stab (struct stab *np, bool comdat);
+ void parse_N_OPT (Module *mod, char *str);
+ int stabCnt;
+ int stabNum;
+
+private:
+ Elf *elf;
+ char *StabData;
+ char *StabStrtab;
+ char *StabStrtabEnd;
+ int StrTabSize;
+ int StabEntSize;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// class Symbol
+
+class Symbol
+{
+public:
+ Symbol (Vector<Symbol*> *vec = NULL);
+
+ ~Symbol ()
+ {
+ free (name);
+ }
+
+ inline Symbol *
+ cardinal ()
+ {
+ return alias ? alias : this;
+ }
+
+ static void dump (Vector<Symbol*> *vec, char*msg);
+
+ Function *func;
+ Sp_lang_code lang_code;
+ uint64_t value; // st_value used in sym_name()
+ uint64_t save;
+ int64_t size;
+ uint64_t img_offset; // image offset in the ELF file
+ char *name;
+ Symbol *alias;
+ int local_ind;
+ int flags;
+ bool defined;
+};
+
+Symbol::Symbol (Vector<Symbol*> *vec)
+{
+ func = NULL;
+ lang_code = Sp_lang_unknown;
+ value = 0;
+ save = 0;
+ size = 0;
+ img_offset = 0;
+ name = NULL;
+ alias = NULL;
+ local_ind = -1;
+ flags = 0;
+ defined = false;
+ if (vec)
+ vec->append (this);
+}
+
+void
+Symbol::dump (Vector<Symbol*> *vec, char*msg)
+{
+ if (!DUMP_ELF_SYM || vec == NULL || vec->size () == 0)
+ return;
+ printf (NTXT ("======= Symbol::dump: %s =========\n"
+ " value | img_offset | flags|local_ind|\n"), msg);
+ for (int i = 0; i < vec->size (); i++)
+ {
+ Symbol *sp = vec->fetch (i);
+ printf (NTXT (" %3d %8lld |0x%016llx |%5d |%8d |%s\n"),
+ i, (long long) sp->value, (long long) sp->img_offset, sp->flags,
+ sp->local_ind, sp->name ? sp->name : NTXT ("NULL"));
+ }
+ printf (NTXT ("\n===== END of Symbol::dump: %s =========\n\n"), msg);
+}
+
+// end of class Symbol
+///////////////////////////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////////////////////////
+// class Reloc
+class Reloc
+{
+public:
+ Reloc ();
+ ~Reloc ();
+ uint64_t type;
+ uint64_t value;
+ uint64_t addend;
+ char *name;
+};
+
+Reloc::Reloc ()
+{
+ type = 0;
+ value = 0;
+ addend = 0;
+ name = NULL;
+}
+
+Reloc::~Reloc ()
+{
+ free (name);
+}
+// end of class Reloc
+///////////////////////////////////////////////////////////////////////////////
+
+enum
+{
+ SYM_PLT = 1 << 0,
+ SYM_UNDEF = 1 << 1
+};
+
+enum Section_type
+{
+ COMM1_SEC = 0x10000000,
+ COMM_SEC = 0x20000000,
+ INFO_SEC = 0x30000000,
+ LOOP_SEC = 0x40000000
+};
+
+struct cpf_stabs_t
+{
+ uint32_t type; // Archive::AnalyzerInfoType
+ uint32_t offset; // offset in .__analyzer_info
+ Module *module; // table for appropriate Module
+};
+
+static char *get_info_com (int type, int32_t copy_inout);
+static char *get_lp_com (unsigned hints, int parallel, char *dep);
+static int ComCmp (const void *a, const void *b);
+static ino64_t _src_inode = 0;
+static char *_src_name;
+
+// Comparing name
+static int
+SymNameCmp (const void *a, const void *b)
+{
+ Symbol *item1 = *((Symbol **) a);
+ Symbol *item2 = *((Symbol **) b);
+ return (item1->name == NULL) ? -1 :
+ (item2->name == NULL) ? 1 : strcmp (item1->name, item2->name);
+}
+
+// Comparing value: for sorting
+static int
+SymValueCmp (const void *a, const void *b)
+{
+ Symbol *item1 = *((Symbol **) a);
+ Symbol *item2 = *((Symbol **) b);
+ return (item1->value > item2->value) ? 1 :
+ (item1->value == item2->value) ? SymNameCmp (a, b) : -1;
+}
+
+// Comparing value: for searching (source name is always NULL)
+static int
+SymFindCmp (const void *a, const void *b)
+{
+ Symbol *item1 = *((Symbol **) a);
+ Symbol *item2 = *((Symbol **) b);
+ if (item1->value < item2->value)
+ return -1;
+ if (item1->value < item2->value + item2->size
+ || item1->value == item2->value) // item2->size == 0
+ return 0;
+ return 1;
+}
+
+// Comparing value for sorting. It is used only for searching aliases.
+static int
+SymImgOffsetCmp (const void *a, const void *b)
+{
+ Symbol *item1 = *((Symbol **) a);
+ Symbol *item2 = *((Symbol **) b);
+ return (item1->img_offset > item2->img_offset) ? 1 :
+ (item1->img_offset == item2->img_offset) ? SymNameCmp (a, b) : -1;
+}
+
+static int
+RelValueCmp (const void *a, const void *b)
+{
+ Reloc *item1 = *((Reloc **) a);
+ Reloc *item2 = *((Reloc **) b);
+ return (item1->value > item2->value) ? 1 :
+ (item1->value == item2->value) ? 0 : -1;
+}
+
+Stabs *
+Stabs::NewStabs (char *_path, char *lo_name)
+{
+ Stabs *stabs = new Stabs (_path, lo_name);
+ if (stabs->status != Stabs::DBGD_ERR_NONE)
+ {
+ delete stabs;
+ return NULL;
+ }
+ return stabs;
+}
+
+Stabs::Stabs (char *_path, char *_lo_name)
+{
+ path = dbe_strdup (_path);
+ lo_name = dbe_strdup (_lo_name);
+ SymLstByName = NULL;
+ pltSym = NULL;
+ SymLst = new Vector<Symbol*>;
+ RelLst = new Vector<Reloc*>;
+ RelPLTLst = new Vector<Reloc*>;
+ LocalLst = new Vector<Symbol*>;
+ LocalFile = new Vector<char*>;
+ LocalFileIdx = new Vector<int>;
+ last_PC_to_sym = NULL;
+ dwarf = NULL;
+ elfDbg = NULL;
+ elfDis = NULL;
+ stabsModules = NULL;
+ textsz = 0;
+ wsize = Wnone;
+ st_check_symtab = st_check_relocs = false;
+ status = DBGD_ERR_NONE;
+
+ if (openElf (false) == NULL)
+ return;
+ switch (elfDis->elf_getclass ())
+ {
+ case ELFCLASS32:
+ wsize = W32;
+ break;
+ case ELFCLASS64:
+ wsize = W64;
+ break;
+ }
+ isRelocatable = elfDis->elf_getehdr ()->e_type == ET_REL;
+ for (unsigned int pnum = 0; pnum < elfDis->elf_getehdr ()->e_phnum; pnum++)
+ {
+ Elf_Internal_Phdr *phdr = elfDis->get_phdr (pnum);
+ if (phdr->p_type == PT_LOAD && phdr->p_flags == (PF_R | PF_X))
+ {
+ if (textsz == 0)
+ textsz = phdr->p_memsz;
+ else
+ {
+ textsz = 0;
+ break;
+ }
+ }
+ }
+}
+
+Stabs::~Stabs ()
+{
+ delete pltSym;
+ delete SymLstByName;
+ Destroy (SymLst);
+ Destroy (RelLst);
+ Destroy (RelPLTLst);
+ Destroy (LocalFile);
+ delete elfDis;
+ delete dwarf;
+ delete LocalLst;
+ delete LocalFileIdx;
+ delete stabsModules;
+ free (path);
+ free (lo_name);
+}
+
+Elf *
+Stabs::openElf (char *fname, Stab_status &st)
+{
+ Elf::Elf_status elf_status;
+ Elf *elf = Elf::elf_begin (fname, &elf_status);
+ if (elf == NULL)
+ {
+ switch (elf_status)
+ {
+ case Elf::ELF_ERR_CANT_OPEN_FILE:
+ case Elf::ELF_ERR_CANT_MMAP:
+ case Elf::ELF_ERR_BIG_FILE:
+ st = DBGD_ERR_CANT_OPEN_FILE;
+ break;
+ case Elf::ELF_ERR_BAD_ELF_FORMAT:
+ default:
+ st = DBGD_ERR_BAD_ELF_FORMAT;
+ break;
+ }
+ return NULL;
+ }
+ if (elf->elf_version (EV_CURRENT) == EV_NONE)
+ {
+ // ELF library out of date
+ delete elf;
+ st = DBGD_ERR_BAD_ELF_LIB;
+ return NULL;
+ }
+
+ Elf_Internal_Ehdr *ehdrp = elf->elf_getehdr ();
+ if (ehdrp == NULL)
+ {
+ // check machine
+ delete elf;
+ st = DBGD_ERR_BAD_ELF_FORMAT;
+ return NULL;
+ }
+ switch (ehdrp->e_machine)
+ {
+ case EM_SPARC:
+ platform = Sparc;
+ break;
+ case EM_SPARC32PLUS:
+ platform = Sparcv8plus;
+ break;
+ case EM_SPARCV9:
+ platform = Sparcv9;
+ break;
+ case EM_386:
+ // case EM_486:
+ platform = Intel;
+ break;
+ case EM_X86_64:
+ platform = Amd64;
+ break;
+ case EM_AARCH64:
+ platform = Aarch64;
+ break;
+ default:
+ platform = Unknown;
+ break;
+ }
+ return elf;
+}
+
+Elf *
+Stabs::openElf (bool dbg_info)
+{
+ if (status != DBGD_ERR_NONE)
+ return NULL;
+ if (elfDis == NULL)
+ {
+ elfDis = openElf (path, status);
+ if (elfDis == NULL)
+ return NULL;
+ }
+ if (!dbg_info)
+ return elfDis;
+ if (elfDbg == NULL)
+ {
+ elfDbg = elfDis->find_ancillary_files (lo_name);
+ if (elfDbg == NULL)
+ elfDbg = elfDis;
+ }
+ return elfDbg;
+}
+
+bool
+Stabs::read_symbols (Vector<Function*> *functions)
+{
+ if (openElf (true) == NULL)
+ return false;
+ check_Symtab ();
+ check_Relocs ();
+ if (functions)
+ {
+ Function *fp;
+ int index;
+ Vec_loop (Function*, functions, index, fp)
+ {
+ fp->img_fname = path;
+ }
+ }
+ return true;
+}
+
+char *
+Stabs::sym_name (uint64_t target, uint64_t instr, int flag)
+{
+ long index;
+ if (flag == DISASM_REL_ONLY || flag == DISASM_REL_TARG)
+ {
+ Reloc *relptr = new Reloc;
+ relptr->value = instr;
+ index = RelLst->bisearch (0, -1, &relptr, RelValueCmp);
+ if (index >= 0)
+ {
+ delete relptr;
+ return RelLst->fetch (index)->name;
+ }
+ if (!is_relocatable ())
+ {
+ relptr->value = target;
+ index = RelPLTLst->bisearch (0, -1, &relptr, RelValueCmp);
+ if (index >= 0)
+ {
+ delete relptr;
+ return RelPLTLst->fetch (index)->name;
+ }
+ }
+ delete relptr;
+ }
+ if (flag == DISASM_REL_NONE || flag == DISASM_REL_TARG || !is_relocatable ())
+ {
+ Symbol *sptr;
+ sptr = map_PC_to_sym (target);
+ if (sptr && sptr->value == target)
+ return sptr->name;
+ }
+ return NULL;
+}
+
+Symbol *
+Stabs::map_PC_to_sym (uint64_t pc)
+{
+ if (pc == 0)
+ return NULL;
+ if (last_PC_to_sym && last_PC_to_sym->value <= pc
+ && last_PC_to_sym->value + last_PC_to_sym->size > pc)
+ return last_PC_to_sym;
+ Symbol *sym = new Symbol;
+ sym->value = pc;
+ long index = SymLst->bisearch (0, -1, &sym, SymFindCmp);
+ delete sym;
+ if (index >= 0)
+ {
+ last_PC_to_sym = SymLst->fetch (index)->cardinal ();
+ return last_PC_to_sym;
+ }
+ return NULL;
+}
+
+Function *
+Stabs::map_PC_to_func (uint64_t pc, uint64_t &low_pc, Vector<Function*> *functions)
+{
+ int index;
+ Function *func;
+ Symbol *sptr = map_PC_to_sym (pc);
+ if (sptr == NULL)
+ return NULL;
+ if (sptr->func)
+ {
+ low_pc = sptr->value;
+ return sptr->func;
+ }
+ if (functions)
+ {
+ Vec_loop (Function*, functions, index, func)
+ {
+ if (func->img_offset == sptr->img_offset)
+ {
+ sptr->func = func->cardinal ();
+ low_pc = sptr->value;
+ return sptr->func;
+ }
+ }
+ }
+ return NULL;
+}
+
+Stabs::Stab_status
+Stabs::read_stabs (ino64_t srcInode, Module *module, Vector<ComC*> *comComs,
+ bool readDwarf)
+{
+ if (module)
+ module->setIncludeFile (NULL);
+
+ if (openElf (true) == NULL)
+ return status;
+ check_Symtab ();
+
+ // read compiler commentary from .compcom1, .compcom,
+ // .info, .loops, and .loopview sections
+ if (comComs)
+ {
+ _src_inode = srcInode;
+ _src_name = module && module->file_name ? get_basename (module->file_name) : NULL;
+ if (!check_Comm (comComs))
+ // .loops, and .loopview are now in .compcom
+ check_Loop (comComs);
+
+ // should not read it after .info goes into .compcom
+ check_Info (comComs);
+ comComs->sort (ComCmp);
+ }
+
+ // get stabs info
+ Stab_status statusStabs = DBGD_ERR_NO_STABS;
+#define SRC_LINE_STABS(sec, secStr, comdat) \
+ if ((elfDbg->sec) && (elfDbg->secStr) && \
+ srcline_Stabs(module, elfDbg->sec, elfDbg->secStr, comdat) == DBGD_ERR_NONE) \
+ statusStabs = DBGD_ERR_NONE
+
+ SRC_LINE_STABS (stabExcl, stabExclStr, false);
+ SRC_LINE_STABS (stab, stabStr, false);
+ SRC_LINE_STABS (stabIndex, stabIndexStr, true);
+
+ // read Dwarf, if any sections found
+ if (elfDbg->dwarf && readDwarf)
+ {
+ openDwarf ()->srcline_Dwarf (module);
+ if (dwarf && dwarf->status == DBGD_ERR_NONE)
+ return DBGD_ERR_NONE;
+ }
+ return statusStabs;
+}
+
+static int
+ComCmp (const void *a, const void *b)
+{
+ ComC *item1 = *((ComC **) a);
+ ComC *item2 = *((ComC **) b);
+ return (item1->line > item2->line) ? 1 :
+ (item1->line < item2->line) ? -1 :
+ (item1->sec > item2->sec) ? 1 :
+ (item1->sec < item2->sec) ? -1 : 0;
+}
+
+static int
+check_src_name (char *srcName)
+{
+ if (_src_name && srcName && streq (_src_name, get_basename (srcName)))
+ return 1;
+ if (_src_inode == (ino64_t) - 1)
+ return 0;
+ DbeFile *dbeFile = dbeSession->getDbeFile (srcName, DbeFile::F_SOURCE);
+ char *path = dbeFile->get_location ();
+ return (path == NULL || dbeFile->sbuf.st_ino != _src_inode) ? 0 : 1;
+}
+
+bool
+Stabs::check_Comm (Vector<ComC*> *comComs)
+{
+ int sz = comComs->size ();
+ Elf *elf = openElf (true);
+ if (elf == NULL)
+ return false;
+
+ for (unsigned int sec = 1; sec < elf->elf_getehdr ()->e_shnum; sec++)
+ {
+ char *name = elf->get_sec_name (sec);
+ if (name == NULL)
+ continue;
+ Section_type sec_type;
+ if (streq (name, NTXT (".compcom")))
+ sec_type = COMM_SEC;
+ else if (streq (name, NTXT (".compcom1")))
+ sec_type = COMM1_SEC;
+ else
+ continue;
+
+ // find header, set messages id & visibility if succeed
+ CompComment *cc = new CompComment (elf, sec);
+ int cnt = cc->compcom_open ((CheckSrcName) check_src_name);
+ // process messages
+ for (int index = 0; index < cnt; index++)
+ {
+ int visible;
+ compmsg msg;
+ char *str = cc->compcom_format (index, &msg, visible);
+ if (str)
+ {
+ ComC *citem = new ComC;
+ citem->sec = sec_type + index;
+ citem->type = msg.msg_type;
+ citem->visible = visible;
+ citem->line = (msg.lineno < 1) ? 1 : msg.lineno;
+ citem->com_str = str;
+ comComs->append (citem);
+ }
+ }
+ delete cc;
+ }
+ return (sz != comComs->size ());
+}
+
+static int
+targetOffsetCmp (const void *a, const void *b)
+{
+ uint32_t o1 = ((target_info_t *) a)->offset;
+ uint32_t o2 = ((target_info_t *) b)->offset;
+ return (o1 >= o2);
+}
+
+void
+Stabs::check_AnalyzerInfo ()
+{
+ Elf *elf = openElf (true);
+ if ((elf == NULL) || (elf->analyzerInfo == 0))
+ {
+ Dprintf (DEBUG_STABS, NTXT ("Stabs::check_AnalyzerInfo: Null AnalyzerInfo section\n"));
+ return; // inappropriate, but ignored anyway
+ }
+ Elf_Data *data = elf->elf_getdata (elf->analyzerInfo);
+ int InfoSize = (int) data->d_size;
+ char *InfoData = (char *) data->d_buf;
+ int InfoAlign = (int) data->d_align;
+ AnalyzerInfoHdr h;
+ unsigned infoHdr_sz = sizeof (AnalyzerInfoHdr);
+ int table, entry;
+ int read = 0;
+ Module *mitem;
+ int index = 0;
+ if (InfoSize <= 0)
+ return;
+ uint64_t baseAddr = elf->get_baseAddr ();
+ Dprintf (DEBUG_STABS, NTXT ("Stabs::check_AnalyzerInfo size=%d @0x%lx (align=%d) base=0x%llx\n"),
+ InfoSize, (ul_t) InfoData, InfoAlign, (long long) baseAddr);
+ Dprintf (DEBUG_STABS, NTXT ("analyzerInfoMap has %lld entries\n"), (long long) analyzerInfoMap.size ());
+ if (analyzerInfoMap.size () == 0)
+ {
+ Dprintf (DEBUG_STABS, NTXT ("No analyzerInfoMap available!\n"));
+ return;
+ }
+
+ // verify integrity of analyzerInfoMap before reading analyzerInfo
+ unsigned count = 0;
+ Module *lastmod = NULL;
+ for (index = 0; index < analyzerInfoMap.size (); index++)
+ {
+ cpf_stabs_t map = analyzerInfoMap.fetch (index);
+ if (map.type > 3)
+ {
+ Dprintf (DEBUG_STABS, NTXT ("analyzerInfo contains table of unknown type %d for %s\n"),
+ map.type, map.module->get_name ());
+ return;
+ }
+ if (map.module != lastmod)
+ {
+ if (lastmod != NULL)
+ Dprintf (DEBUG_STABS, "analyzerInfo contains %d 0x0 offset tables for %s\n",
+ count, lastmod->get_name ());
+ count = 0;
+ }
+ count += (map.offset == 0x0); // only check for 0x0 tables for now
+ if (count > 4)
+ {
+ Dprintf (DEBUG_STABS, NTXT ("analyzerInfo contains too many 0x0 offset tables for %s\n"),
+ map.module->get_name ());
+ return;
+ }
+ lastmod = map.module;
+ }
+
+ index = 0;
+ while ((index < analyzerInfoMap.size ()) && (read < InfoSize))
+ {
+ for (table = 0; table < 3; table++)
+ { // memory operations (ld, st, prefetch)
+ // read the table header
+ memcpy ((void *) &h, (const void *) InfoData, infoHdr_sz);
+ InfoData += infoHdr_sz;
+ read += infoHdr_sz;
+
+ // use map for appropriate module
+ cpf_stabs_t map = analyzerInfoMap.fetch (index);
+ index++;
+ mitem = map.module;
+ Dprintf (DEBUG_STABS, "Table %d offset=0x%04x "
+ "text_labelref=0x%08llx entries=%d version=%d\n"
+ "itype %d offset=0x%04x module=%s\n", table, read,
+ (long long) (h.text_labelref - baseAddr), h.entries,
+ h.version, map.type, map.offset, map.module->get_name ());
+ // read the table entries
+ for (entry = 0; entry < h.entries; entry++)
+ {
+ memop_info_t *m = new memop_info_t;
+ unsigned memop_info_sz = sizeof (memop_info_t);
+ memcpy ((void *) m, (const void *) InfoData, memop_info_sz);
+ InfoData += memop_info_sz;
+ read += memop_info_sz;
+ m->offset += (uint32_t) (h.text_labelref - baseAddr);
+ Dprintf (DEBUG_STABS, NTXT ("%4d(%d): offset=0x%04x id=0x%08x sig=0x%08x dtid=0x%08x\n"),
+ entry, table, m->offset, m->id, m->signature, m->datatype_id);
+ switch (table)
+ {
+ case CPF_INSTR_TYPE_LD:
+ mitem->ldMemops.append (m);
+ break;
+ case CPF_INSTR_TYPE_ST:
+ mitem->stMemops.append (m);
+ break;
+ case CPF_INSTR_TYPE_PREFETCH:
+ mitem->pfMemops.append (m);
+ break;
+ }
+ }
+ // following re-alignment should be redundant
+ //InfoData+=(read%InfoAlign); read+=(read%InfoAlign); // re-align
+ }
+ for (table = 3; table < 4; table++)
+ { // branch targets
+ memcpy ((void *) &h, (const void *) InfoData, infoHdr_sz);
+ InfoData += infoHdr_sz;
+ read += infoHdr_sz;
+
+ // use map for appropriate module
+ cpf_stabs_t map = analyzerInfoMap.fetch (index);
+ index++;
+ mitem = map.module;
+ Dprintf (DEBUG_STABS, "Table %d offset=0x%04x "
+ "text_labelref=0x%08llx entries=%d version=%d\n"
+ "itype %d offset=0x%04x module=%s\n", table, read,
+ (long long) (h.text_labelref - baseAddr), h.entries,
+ h.version, map.type, map.offset, map.module->get_name ());
+ for (entry = 0; entry < h.entries; entry++)
+ {
+ target_info_t *t = new target_info_t;
+ unsigned target_info_sz = sizeof (target_info_t);
+ memcpy ((void *) t, (const void *) InfoData, target_info_sz);
+ InfoData += target_info_sz;
+ read += target_info_sz;
+ t->offset += (uint32_t) (h.text_labelref - baseAddr);
+ Dprintf (DEBUG_STABS, NTXT ("%4d(%d): offset=0x%04x\n"), entry,
+ table, t->offset);
+ // the list of branch targets needs to be in offset sorted order
+ // and doing it here before archiving avoids the need to do it
+ // each time the archive is read.
+ mitem->bTargets.incorporate (t, targetOffsetCmp);
+ }
+ Dprintf (DEBUG_STABS, NTXT ("bTargets for %s has %lld items (last=0x%04x)\n"),
+ mitem->get_name (), (long long) mitem->bTargets.size (),
+ (mitem->bTargets.fetch (mitem->bTargets.size () - 1))->offset);
+ Dprintf (DEBUG_STABS, "read=%d at end of bTargets (InfoData=0x%lx)\n",
+ read, (ul_t) InfoData);
+ InfoData += (read % InfoAlign);
+ read += (read % InfoAlign); // re-align
+ Dprintf (DEBUG_STABS, "read=%d at end of bTargets (InfoData=0x%lx)\n",
+ read, (ul_t) InfoData);
+ }
+ Dprintf (DEBUG_STABS, "Stabs::check_AnalyzerInfo bytes read=%lld (index=%lld/%lld)\n",
+ (long long) read, (long long) index,
+ (long long) analyzerInfoMap.size ());
+ }
+}
+
+void
+Stabs::check_Info (Vector<ComC*> *comComs)
+{
+ Elf *elf = openElf (true);
+ if (elf == NULL || elf->info == 0)
+ return;
+ Elf_Data *data = elf->elf_getdata (elf->info);
+ uint64_t InfoSize = data->d_size;
+ char *InfoData = (char *) data->d_buf;
+ bool get_src = false;
+ for (int h_num = 0; InfoSize; h_num++)
+ {
+ if (InfoSize < sizeof (struct info_header))
+ return;
+ struct info_header *h = (struct info_header*) InfoData;
+ if (h->endian != '\0' || h->magic[0] != 'S' || h->magic[1] != 'U'
+ || h->magic[2] != 'N')
+ return;
+ if (h->len < InfoSize || h->len < sizeof (struct info_header) || (h->len & 3))
+ return;
+
+ char *fname = InfoData + sizeof (struct info_header);
+ InfoData += h->len;
+ InfoSize -= h->len;
+ get_src = check_src_name (fname);
+ for (uint32_t e_num = 0; e_num < h->cnt; ++e_num)
+ {
+ if (InfoSize < sizeof (struct entry_header))
+ return;
+ struct entry_header *e = (struct entry_header*) InfoData;
+ if (InfoSize < e->len)
+ return;
+ int32_t copy_inout = 0;
+ if (e->len > sizeof (struct entry_header))
+ if (e->type == F95_COPYINOUT)
+ copy_inout = *(int32_t*) (InfoData + sizeof (struct entry_header));
+ InfoData += e->len;
+ InfoSize -= e->len;
+ if (get_src)
+ {
+ ComC *citem = new ComC;
+ citem->sec = INFO_SEC + h_num;
+ citem->type = e->msgnum & 0xFFFFFF;
+ citem->visible = CCMV_ALL;
+ citem->line = e->line;
+ citem->com_str = get_info_com (citem->type, copy_inout);
+ comComs->append (citem);
+ }
+ }
+ if (get_src)
+ break;
+ }
+}
+
+static char *
+get_info_com (int type, int32_t copy_inout)
+{
+ switch (type)
+ {
+ case 1:
+ return dbe_sprintf (GTXT ("In the call below, parameter number %d caused a copy-in -- loop(s) inserted"),
+ copy_inout);
+ case 2:
+ return dbe_sprintf (GTXT ("In the call below, parameter number %d caused a copy-out -- loop(s) inserted"),
+ copy_inout);
+ case 3:
+ return dbe_sprintf (GTXT ("In the call below, parameter number %d caused a copy-in and a copy-out -- loops inserted"),
+ copy_inout);
+ case 4:
+ return dbe_strdup (GTXT ("Alignment of variables in common block may cause performance degradation"));
+ case 5:
+ return dbe_strdup (GTXT ("DO statement bounds lead to no executions of the loop"));
+ default:
+ return dbe_strdup (NTXT (""));
+ }
+}
+
+void
+Stabs::check_Loop (Vector<ComC*> *comComs)
+{
+ Elf *elf = openElf (true);
+ if (elf == NULL)
+ return;
+
+ StringBuilder sb;
+ for (unsigned int sec = 1; sec < elf->elf_getehdr ()->e_shnum; sec++)
+ {
+ char *name = elf->get_sec_name (sec);
+ if (name == NULL)
+ continue;
+ if (!streq (name, NTXT (".loops")) && !streq (name, NTXT (".loopview")))
+ continue;
+
+ Elf_Data *data = elf->elf_getdata (sec);
+ size_t LoopSize = (size_t) data->d_size, len;
+ char *LoopData = (char *) data->d_buf;
+ int remainder, i;
+ char src[2 * MAXPATHLEN], buf1[MAXPATHLEN], buf2[MAXPATHLEN];
+ char **dep_str = NULL;
+ bool get_src = false;
+ while ((LoopSize > 0) && !get_src &&
+ (strncmp (LoopData, NTXT ("Source:"), 7) == 0))
+ {
+ // The first three items in a .loops subsection are three strings.
+ // Source: ...
+ // Version: ...
+ // Number of loops: ...
+ sscanf (LoopData, NTXT ("%*s%s"), src);
+ len = strlen (LoopData) + 1;
+ LoopData += len;
+ LoopSize -= len;
+ sscanf (LoopData, NTXT ("%*s%*s%s"), buf1);
+ // double version = atof(buf1);
+ len = strlen (LoopData) + 1;
+ LoopData += len;
+ LoopSize -= len;
+ get_src = check_src_name (src);
+ sscanf (LoopData, NTXT ("%*s%*s%*s%s%s"), buf1, buf2);
+ int n_loop = atoi (buf1);
+ int n_depend = atoi (buf2);
+ len = strlen (LoopData) + 1;
+ LoopData += len;
+ LoopSize -= len;
+ if (get_src && (n_loop > 0))
+ {
+ dep_str = new char*[n_loop];
+ for (i = 0; i < n_loop; i++)
+ dep_str[i] = NULL;
+ }
+
+ // printf("Source: %s\nVersion: %f\nLoop#: %d\nDepend#: %d\n",
+ // src, version, n_loop, n_depend);
+
+ // Read in the strings that contain the list of variables that cause
+ // data dependencies inside of loops. Not every loop has such a list
+ // of variables.
+ //
+ // Example: if loop #54 has data dependencies caused by the
+ // variables named i, j and foo, then the string that represents
+ // this in the .loops section looks like this:
+ //
+ // .asciz "54:i.j.foo"
+ //
+ // The variable names are delimited with .
+ //
+ // For now, store these strings in an array, and add them into
+ // the loop structure when we read in the numeric loop info
+ // (that's what we read in next.)
+ //
+ // printf("\tDependenncies:\n");
+ for (i = 0; i < n_depend; i++)
+ {
+ len = strlen (LoopData) + 1;
+ LoopData += len;
+ LoopSize -= len;
+ if (dep_str != NULL)
+ {
+ char *dep_buf1 = dbe_strdup (LoopData);
+ char *ptr = strtok (dep_buf1, NTXT (":"));
+ if (ptr != NULL)
+ {
+ int index = atoi (ptr);
+ bool dep_first = true;
+ sb.setLength (0);
+ while ((ptr = strtok (NULL, NTXT (", "))) != NULL)
+ {
+ if (dep_first)
+ dep_first = false;
+ else
+ sb.append (NTXT (", "));
+ sb.append (ptr);
+ }
+ if (sb.length () > 0 && index < n_loop)
+ dep_str[index] = sb.toString ();
+ }
+ free (dep_buf1);
+ }
+ }
+
+ // Adjust Data pointer so that it is word aligned.
+ remainder = (int) (((unsigned long) LoopData) % 4);
+ if (remainder != 0)
+ {
+ len = 4 - remainder;
+ LoopData += len;
+ LoopSize -= len;
+ }
+
+ // Read in the loop info, one loop at a time.
+ for (i = 0; i < n_loop; i++)
+ {
+ int loopid = *((int *) LoopData);
+ LoopData += 4;
+ int line_no = *((int *) LoopData);
+ if (line_no < 1) // compiler has trouble on this
+ line_no = 1;
+ LoopData += 4;
+ // int nest = *((int *) LoopData);
+ LoopData += 4;
+ int parallel = *((int *) LoopData);
+ LoopData += 4;
+ unsigned hints = *((unsigned *) LoopData);
+ LoopData += 4;
+ // int count = *((int *) LoopData);
+ LoopData += 4;
+ LoopSize -= 24;
+ if (!get_src || (loopid >= n_loop))
+ continue;
+ ComC *citem = new ComC;
+ citem->sec = LOOP_SEC + i;
+ citem->type = hints;
+ citem->visible = CCMV_ALL;
+ citem->line = line_no;
+ citem->com_str = get_lp_com (hints, parallel, dep_str[loopid]);
+ comComs->append (citem);
+ }
+ if (dep_str)
+ {
+ for (i = 0; i < n_loop; i++)
+ free (dep_str[i]);
+ delete[] dep_str;
+ dep_str = NULL;
+ }
+ }
+ }
+}
+
+static char *
+get_lp_com (unsigned hints, int parallel, char *dep)
+{
+ StringBuilder sb;
+ if (parallel == -1)
+ sb.append (GTXT ("Loop below is serial, but parallelizable: "));
+ else if (parallel == 0)
+ sb.append (GTXT ("Loop below is not parallelized: "));
+ else
+ sb.append (GTXT ("Loop below is parallelized: "));
+ switch (hints)
+ {
+ case 0:
+ // No loop mesg will print
+ // strcat(com, GTXT("no hint available"));
+ break;
+ case 1:
+ sb.append (GTXT ("loop contains procedure call"));
+ break;
+ case 2:
+ sb.append (GTXT ("compiler generated two versions of this loop"));
+ break;
+ case 3:
+ {
+ StringBuilder sb_tmp;
+ sb_tmp.sprintf (GTXT ("the variable(s) \"%s\" cause a data dependency in this loop"),
+ dep ? dep : GTXT ("<Unknown>"));
+ sb.append (&sb_tmp);
+ }
+ break;
+ case 4:
+ sb.append (GTXT ("loop was significantly transformed during optimization"));
+ break;
+ case 5:
+ sb.append (GTXT ("loop may or may not hold enough work to be profitably parallelized"));
+ break;
+ case 6:
+ sb.append (GTXT ("loop was marked by user-inserted pragma"));
+ break;
+ case 7:
+ sb.append (GTXT ("loop contains multiple exits"));
+ break;
+ case 8:
+ sb.append (GTXT ("loop contains I/O, or other function calls, that are not MT safe"));
+ break;
+ case 9:
+ sb.append (GTXT ("loop contains backward flow of control"));
+ break;
+ case 10:
+ sb.append (GTXT ("loop may have been distributed"));
+ break;
+ case 11:
+ sb.append (GTXT ("two loops or more may have been fused"));
+ break;
+ case 12:
+ sb.append (GTXT ("two or more loops may have been interchanged"));
+ break;
+ default:
+ break;
+ }
+ return sb.toString ();
+}
+
+StabReader::StabReader (Elf *_elf, Platform_t platform, int StabSec, int StabStrSec)
+{
+ stabCnt = -1;
+ stabNum = 0;
+ if (_elf == NULL)
+ return;
+ elf = _elf;
+
+ // Get ELF data
+ Elf_Data *data = elf->elf_getdata (StabSec);
+ if (data == NULL)
+ return;
+ uint64_t stabSize = data->d_size;
+ StabData = (char *) data->d_buf;
+ Elf_Internal_Shdr *shdr = elf->get_shdr (StabSec);
+ if (shdr == NULL)
+ return;
+
+ // GCC bug: sh_entsize is 20 for 64 apps on Linux
+ StabEntSize = (platform == Amd64 || platform == Sparcv9) ? 12 : (unsigned) shdr->sh_entsize;
+ if (stabSize == 0 || StabEntSize == 0)
+ return;
+ data = elf->elf_getdata (StabStrSec);
+ if (data == NULL)
+ return;
+ shdr = elf->get_shdr (StabStrSec);
+ if (shdr == NULL)
+ return;
+ StabStrtab = (char *) data->d_buf;
+ StabStrtabEnd = StabStrtab + shdr->sh_size;
+ StrTabSize = 0;
+ stabCnt = (int) (stabSize / StabEntSize);
+}
+
+char *
+StabReader::get_stab (struct stab *np, bool comdat)
+{
+ struct stab *stbp = (struct stab *) (StabData + stabNum * StabEntSize);
+ stabNum++;
+ *np = *stbp;
+ np->n_desc = elf->decode (stbp->n_desc);
+ np->n_strx = elf->decode (stbp->n_strx);
+ np->n_value = elf->decode (stbp->n_value);
+ switch (np->n_type)
+ {
+ case N_UNDF:
+ case N_ILDPAD:
+ // Start of new stab section (or padding)
+ StabStrtab += StrTabSize;
+ StrTabSize = np->n_value;
+ }
+
+ char *str = NULL;
+ if (np->n_strx)
+ {
+ if (comdat && np->n_type == N_FUN && np->n_other == 1)
+ {
+ if (np->n_strx == 1)
+ StrTabSize++;
+ str = StabStrtab + StrTabSize;
+ // Each COMDAT string must be sized to find the next string:
+ StrTabSize += strlen (str) + 1;
+ }
+ else
+ str = StabStrtab + np->n_strx;
+ if (str >= StabStrtabEnd)
+ str = NULL;
+ }
+ if (DEBUG_STABS)
+ {
+ char buf[128];
+ char *s = get_type_name (np->n_type);
+ if (s == NULL)
+ {
+ snprintf (buf, sizeof (buf), NTXT ("n_type=%d"), np->n_type);
+ s = buf;
+ }
+ if (str)
+ {
+ Dprintf (DEBUG_STABS, NTXT ("%4d: .stabs \"%s\",%s,0x%x,0x%x,0x%x\n"),
+ stabNum - 1, str, s, (int) np->n_other, (int) np->n_desc,
+ (int) np->n_value);
+ }
+ else
+ Dprintf (DEBUG_STABS, NTXT ("%4d: .stabn %s,0x%x,0x%x,0x%x\n"),
+ stabNum - 1, s, (int) np->n_other, (int) np->n_desc,
+ (int) np->n_value);
+ }
+ return str;
+}
+
+void
+StabReader::parse_N_OPT (Module *mod, char *str)
+{
+ if (mod == NULL || str == NULL)
+ return;
+ for (char *s = str; 1; s++)
+ {
+ switch (*s)
+ {
+ case 'd':
+ if (s[1] == 'i' && s[2] == ';')
+ {
+ delete mod->dot_o_file;
+ mod->dot_o_file = NULL;
+ }
+ break;
+ case 's':
+ if ((s[1] == 'i' || s[1] == 'n') && s[2] == ';')
+ {
+ delete mod->dot_o_file;
+ mod->dot_o_file = NULL;
+ }
+ break;
+ }
+ s = strchr (s, ';');
+ if (s == NULL)
+ break;
+ }
+}
+
+Stabs::Stab_status
+Stabs::srcline_Stabs (Module *module, unsigned int StabSec,
+ unsigned int StabStrSec, bool comdat)
+{
+ StabReader *stabReader = new StabReader (openElf (true), platform, StabSec, StabStrSec);
+ int tot = stabReader->stabCnt;
+ if (tot < 0)
+ {
+ delete stabReader;
+ return DBGD_ERR_NO_STABS;
+ }
+ int n, lineno;
+ char *sbase, *n_so = NTXT (""), curr_src[2 * MAXPATHLEN];
+ Function *newFunc;
+ Sp_lang_code _lang_code = module->lang_code;
+ Vector<Function*> *functions = module->functions;
+ bool no_stabs = true;
+ *curr_src = '\0';
+ Function *func = NULL;
+ int phase = 0;
+ int stabs_level = 0;
+ int xline = 0;
+
+ // Find module
+ for (n = 0; n < tot; n++)
+ {
+ struct stab stb;
+ char *str = stabReader->get_stab (&stb, comdat);
+ if (stb.n_type == N_UNDF)
+ phase = 0;
+ else if (stb.n_type == N_SO)
+ {
+ if (str == NULL || *str == '\0')
+ continue;
+ if (phase == 0)
+ {
+ phase = 1;
+ n_so = str;
+ continue;
+ }
+ phase = 0;
+ sbase = str;
+ if (*str == '/')
+ {
+ if (streq (sbase, module->file_name))
+ break;
+ }
+ else
+ {
+ size_t last = strlen (n_so);
+ if (n_so[last - 1] == '/')
+ last--;
+ if (strncmp (n_so, module->file_name, last) == 0 &&
+ module->file_name[last] == '/' &&
+ streq (sbase, module->file_name + last + 1))
+ break;
+ }
+ }
+ }
+ if (n >= tot)
+ {
+ delete stabReader;
+ return DBGD_ERR_NO_STABS;
+ }
+
+ Include *includes = new Include;
+ includes->new_src_file (module->getMainSrc (), 0, NULL);
+ module->hasStabs = true;
+ *curr_src = '\0';
+ phase = 0;
+ for (n++; n < tot; n++)
+ {
+ struct stab stb;
+ char *str = stabReader->get_stab (&stb, comdat);
+ int n_desc = (int) ((unsigned short) stb.n_desc);
+ switch (stb.n_type)
+ {
+ case N_UNDF:
+ case N_SO:
+ case N_ENDM:
+ n = tot;
+ break;
+ case N_ALIAS:
+ if (str == NULL)
+ break;
+ if (is_fortran (_lang_code))
+ {
+ char *p = strchr (str, ':');
+ if (p && streq (p + 1, NTXT ("FMAIN")))
+ {
+ Function *afunc = find_func (NTXT ("MAIN"), functions, true);
+ if (afunc)
+ afunc->set_match_name (dbe_strndup (str, p - str));
+ break;
+ }
+ }
+ case N_FUN:
+ case N_OUTL:
+ if (str == NULL)
+ break;
+ if (*str == '@')
+ {
+ str++;
+ if (*str == '>' || *str == '<')
+ str++;
+ }
+ if (stabs_level != 0)
+ break;
+
+ // find address of the enclosed function
+ newFunc = find_func (str, functions, is_fortran (_lang_code));
+ if (newFunc == NULL)
+ break;
+ if (func)
+ while (func->popSrcFile ())
+ ;
+ func = newFunc;
+
+ // First line info to cover function from the beginning
+ lineno = xline + n_desc;
+ if (lineno > 0)
+ {
+ // Set the chain of includes for the new function
+ includes->push_src_files (func);
+ func->add_PC_info (0, lineno);
+ no_stabs = false;
+ }
+ break;
+ case N_ENTRY:
+ break;
+ case N_CMDLINE:
+ if (str && !module->comp_flags)
+ {
+ char *comp_flags = strchr (str, ';');
+ if (comp_flags)
+ {
+ module->comp_flags = dbe_strdup (comp_flags + 1);
+ module->comp_dir = dbe_strndup (str, comp_flags - str);
+ }
+ }
+ break;
+ case N_LBRAC:
+ stabs_level++;
+ break;
+ case N_RBRAC:
+ stabs_level--;
+ break;
+ case N_XLINE:
+ xline = n_desc << 16;
+ break;
+ case N_SLINE:
+ if (func == NULL)
+ break;
+ no_stabs = false;
+ lineno = xline + n_desc;
+ if (func->line_first <= 0)
+ {
+ // Set the chain of includes for the new function
+ includes->push_src_files (func);
+ func->add_PC_info (0, lineno);
+ break;
+ }
+ if (func->curr_srcfile == NULL)
+ includes->push_src_files (func);
+ if (func->line_first != lineno ||
+ !streq (curr_src, func->getDefSrc ()->get_name ()))
+ func->add_PC_info (stb.n_value, lineno);
+ break;
+ case N_OPT:
+ if ((str != NULL) && streq (str, NTXT ("gcc2_compiled.")))
+ _lang_code = Sp_lang_gcc;
+ switch (elfDbg->elf_getehdr ()->e_type)
+ {
+ case ET_EXEC:
+ case ET_DYN:
+ // set the real object timestamp from the executable's N_OPT stab
+ // due to bug #4796329
+ module->real_timestamp = stb.n_value;
+ break;
+ default:
+ module->curr_timestamp = stb.n_value;
+ break;
+ }
+ break;
+ case N_GSYM:
+ if ((str == NULL) || strncmp (str, NTXT ("__KAI_K"), 7))
+ break;
+ str += 7;
+ if (!strncmp (str, NTXT ("CC_"), 3))
+ _lang_code = Sp_lang_KAI_KCC;
+ else if (!strncmp (str, NTXT ("cc_"), 3))
+ _lang_code = Sp_lang_KAI_Kcc;
+ else if (!strncmp (str, NTXT ("PTS_"), 4) &&
+ (_lang_code != Sp_lang_KAI_KCC) &&
+ (_lang_code != Sp_lang_KAI_Kcc))
+ _lang_code = Sp_lang_KAI_KPTS;
+ break;
+ case N_BINCL:
+ includes->new_include_file (module->setIncludeFile (str), func);
+ break;
+ case N_EINCL:
+ includes->end_include_file (func);
+ break;
+ case N_SOL:
+ if (str == NULL)
+ break;
+ lineno = xline + n_desc;
+ if (lineno > 0 && func && func->line_first <= 0)
+ {
+ includes->push_src_files (func);
+ func->add_PC_info (0, lineno);
+ no_stabs = false;
+ }
+ if (streq (sbase, str))
+ {
+ module->setIncludeFile (NULL);
+ snprintf (curr_src, sizeof (curr_src), NTXT ("%s"), module->file_name);
+ includes->new_src_file (module->getMainSrc (), lineno, func);
+ }
+ else
+ {
+ if (streq (sbase, get_basename (str)))
+ {
+ module->setIncludeFile (NULL);
+ snprintf (curr_src, sizeof (curr_src), NTXT ("%s"), module->file_name);
+ includes->new_src_file (module->setIncludeFile (curr_src), lineno, func);
+ }
+ else
+ {
+ if (*str == '/')
+ snprintf (curr_src, sizeof (curr_src), NTXT ("%s"), str);
+ else
+ {
+ size_t last = strlen (n_so);
+ if (last == 0 || n_so[last - 1] != '/')
+ snprintf (curr_src, sizeof (curr_src), NTXT ("%s/%s"), n_so, str);
+ else
+ snprintf (curr_src, sizeof (curr_src), NTXT ("%s%s"), n_so, str);
+ }
+ includes->new_src_file (module->setIncludeFile (curr_src), lineno, func);
+ }
+ }
+ break;
+ }
+ }
+ delete includes;
+ delete stabReader;
+ return no_stabs ? DBGD_ERR_NO_STABS : DBGD_ERR_NONE;
+}//srcline_Stabs
+
+static bool
+cmp_func_name (char *fname, size_t len, char *name, bool fortran)
+{
+ return (strncmp (name, fname, len) == 0
+ && (name[len] == 0
+ || (fortran && name[len] == '_' && name[len + 1] == 0)));
+}
+
+Function *
+Stabs::find_func (char *fname, Vector<Function*> *functions, bool fortran, bool inner_names)
+{
+ char *arg, *name;
+ Function *item;
+ int index;
+ size_t len;
+
+ len = strlen (fname);
+ arg = strchr (fname, ':');
+ if (arg != NULL)
+ {
+ if (arg[1] == 'P') // Prototype for function
+ return NULL;
+ len -= strlen (arg);
+ }
+
+ Vec_loop (Function*, functions, index, item)
+ {
+ name = item->get_mangled_name ();
+ if (cmp_func_name (fname, len, name, fortran))
+ return item->cardinal ();
+ }
+
+ if (inner_names)
+ {
+ // Dwarf subprograms may only have plain (non-linker) names
+ // Retry with inner names only
+
+ Vec_loop (Function*, functions, index, item)
+ {
+ name = strrchr (item->get_mangled_name (), '.');
+ if (!name) continue;
+ name++;
+ if (cmp_func_name (fname, len, name, fortran))
+ return item->cardinal ();
+ }
+ }
+ return NULL;
+}
+
+Map<const char*, Symbol*> *
+Stabs::get_elf_symbols ()
+{
+ Elf *elf = openElf (false);
+ if (elf->elfSymbols == NULL)
+ {
+ Map<const char*, Symbol*> *elfSymbols = new StringMap<Symbol*>(128, 128);
+ elf->elfSymbols = elfSymbols;
+ for (int i = 0, sz = SymLst ? SymLst->size () : 0; i < sz; i++)
+ {
+ Symbol *sym = SymLst->fetch (i);
+ elfSymbols->put (sym->name, sym);
+ }
+ }
+ return elf->elfSymbols;
+}
+
+void
+Stabs::read_dwarf_from_dot_o (Module *mod)
+{
+ Dprintf (DEBUG_STABS, NTXT ("stabsModules: %s\n"), STR (mod->get_name ()));
+ Vector<Module*> *mods = mod->dot_o_file->seg_modules;
+ char *bname = get_basename (mod->get_name ());
+ for (int i1 = 0, sz1 = mods ? mods->size () : 0; i1 < sz1; i1++)
+ {
+ Module *m = mods->fetch (i1);
+ Dprintf (DEBUG_STABS, NTXT (" MOD: %s\n"), STR (m->get_name ()));
+ if (dbe_strcmp (bname, get_basename (m->get_name ())) == 0)
+ {
+ mod->indexStabsLink = m;
+ m->indexStabsLink = mod;
+ break;
+ }
+ }
+ if (mod->indexStabsLink)
+ {
+ mod->dot_o_file->objStabs->openDwarf ()->srcline_Dwarf (mod->indexStabsLink);
+ Map<const char*, Symbol*> *elfSymbols = get_elf_symbols ();
+ Vector<Function*> *funcs = mod->indexStabsLink->functions;
+ for (int i1 = 0, sz1 = funcs ? funcs->size () : 0; i1 < sz1; i1++)
+ {
+ Function *f1 = funcs->fetch (i1);
+ Symbol *sym = elfSymbols->get (f1->get_mangled_name ());
+ if (sym == NULL)
+ continue;
+ Dprintf (DEBUG_STABS, NTXT (" Symbol: %s func=%p\n"), STR (sym->name), sym->func);
+ Function *f = sym->func;
+ if (f->indexStabsLink)
+ continue;
+ f->indexStabsLink = f1;
+ f1->indexStabsLink = f;
+ f->copy_PCInfo (f1);
+ }
+ }
+}
+
+Stabs::Stab_status
+Stabs::read_archive (LoadObject *lo)
+{
+ if (openElf (true) == NULL)
+ return status;
+ check_Symtab ();
+ if (elfDbg->dwarf)
+ openDwarf ()->archive_Dwarf (lo);
+
+ // get Module/Function lists from stabs info
+ Stab_status statusStabs = DBGD_ERR_NO_STABS;
+#define ARCHIVE_STABS(sec, secStr, comdat) \
+ if ((elfDbg->sec) != 0 && (elfDbg->secStr) != 0 && \
+ archive_Stabs(lo, elfDbg->sec, elfDbg->secStr, comdat) == DBGD_ERR_NONE) \
+ statusStabs = DBGD_ERR_NONE
+
+ // prefer index stabs (where they exist) since they're most appropriate
+ // for loadobjects and might have N_CPROF stabs for ABS/CPF
+ ARCHIVE_STABS (stabIndex, stabIndexStr, true);
+ ARCHIVE_STABS (stabExcl, stabExclStr, false);
+ ARCHIVE_STABS (stab, stabStr, false);
+
+ // Add all unassigned functions to the <unknown> module
+ Symbol *sitem, *alias;
+ int index;
+ Vec_loop (Symbol*, SymLst, index, sitem)
+ {
+ if (sitem->func || (sitem->size == 0) || (sitem->flags & SYM_UNDEF))
+ continue;
+ alias = sitem->alias;
+ if (alias)
+ {
+ if (alias->func == NULL)
+ {
+ alias->func = createFunction (lo, lo->noname, alias);
+ alias->func->alias = alias->func;
+ }
+ if (alias != sitem)
+ {
+ sitem->func = createFunction (lo, alias->func->module, sitem);
+ sitem->func->alias = alias->func;
+ }
+ }
+ else
+ sitem->func = createFunction (lo, lo->noname, sitem);
+ }
+ if (pltSym)
+ {
+ pltSym->func = createFunction (lo, lo->noname, pltSym);
+ pltSym->func->flags |= FUNC_FLAG_PLT;
+ }
+
+ // need Module association, so this must be done after handling Modules
+ check_AnalyzerInfo ();
+
+ if (dwarf && dwarf->status == DBGD_ERR_NONE)
+ return DBGD_ERR_NONE;
+ return statusStabs;
+}//read_archive
+
+Function *
+Stabs::createFunction (LoadObject *lo, Module *module, Symbol *sym)
+{
+ Function *func = dbeSession->createFunction ();
+ func->module = module;
+ func->img_fname = path;
+ func->img_offset = (off_t) sym->img_offset;
+ func->save_addr = sym->save;
+ func->size = (uint32_t) sym->size;
+ func->set_name (sym->name);
+ func->elfSym = sym;
+ module->functions->append (func);
+ lo->functions->append (func);
+ return func;
+}
+
+void
+Stabs::fixSymtabAlias ()
+{
+ int ind, i, k;
+ Symbol *sym, *bestAlias;
+ SymLst->sort (SymImgOffsetCmp);
+ ind = SymLst->size () - 1;
+ for (i = 0; i < ind; i++)
+ {
+ bestAlias = SymLst->fetch (i);
+ if (bestAlias->img_offset == 0) // Ignore this bad symbol
+ continue;
+ sym = SymLst->fetch (i + 1);
+ if (bestAlias->img_offset != sym->img_offset)
+ {
+ if ((bestAlias->size == 0) ||
+ (sym->img_offset < bestAlias->img_offset + bestAlias->size))
+ bestAlias->size = sym->img_offset - bestAlias->img_offset;
+ continue;
+ }
+
+ // Find a "best" alias
+ size_t bestLen = strlen (bestAlias->name);
+ int64_t maxSize = bestAlias->size;
+ for (k = i + 1; k <= ind; k++)
+ {
+ sym = SymLst->fetch (k);
+ if (bestAlias->img_offset != sym->img_offset)
+ { // no more aliases
+ if ((maxSize == 0) ||
+ (sym->img_offset < bestAlias->img_offset + maxSize))
+ maxSize = sym->img_offset - bestAlias->img_offset;
+ break;
+ }
+ if (maxSize < sym->size)
+ maxSize = sym->size;
+ size_t len = strlen (sym->name);
+ if (len < bestLen)
+ {
+ bestAlias = sym;
+ bestLen = len;
+ }
+ }
+ for (; i < k; i++)
+ {
+ sym = SymLst->fetch (i);
+ sym->alias = bestAlias;
+ sym->size = maxSize;
+ }
+ i--;
+ }
+}
+
+void
+Stabs::check_Symtab ()
+{
+ if (st_check_symtab)
+ return;
+ st_check_symtab = true;
+
+ Elf *elf = openElf (true);
+ if (elf == NULL)
+ return;
+ if (elfDis->plt != 0)
+ {
+ Elf_Internal_Shdr *shdr = elfDis->get_shdr (elfDis->plt);
+ if (shdr)
+ {
+ pltSym = new Symbol ();
+ pltSym->value = shdr->sh_addr;
+ pltSym->size = shdr->sh_size;
+ pltSym->img_offset = shdr->sh_offset;
+ pltSym->name = dbe_strdup (NTXT ("@plt"));
+ pltSym->flags |= SYM_PLT;
+ }
+ }
+ if (elf->symtab)
+ readSymSec (elf->symtab, elf);
+ else
+ {
+ readSymSec (elf->SUNW_ldynsym, elf);
+ readSymSec (elf->dynsym, elf);
+ }
+}
+
+void
+Stabs::readSymSec (unsigned int sec, Elf *elf)
+{
+ Symbol *sitem;
+ Sp_lang_code local_lcode;
+ if (sec == 0)
+ return;
+ // Get ELF data
+ Elf_Data *data = elf->elf_getdata (sec);
+ if (data == NULL)
+ return;
+ uint64_t SymtabSize = data->d_size;
+ Elf_Internal_Shdr *shdr = elf->get_shdr (sec);
+
+ if ((SymtabSize == 0) || (shdr->sh_entsize == 0))
+ return;
+ Elf_Data *data_str = elf->elf_getdata (shdr->sh_link);
+ if (data_str == NULL)
+ return;
+ char *Strtab = (char *) data_str->d_buf;
+
+ // read func symbolic table
+ for (unsigned int n = 0, tot = SymtabSize / shdr->sh_entsize; n < tot; n++)
+ {
+ Elf_Internal_Sym Sym;
+ elf->elf_getsym (data, n, &Sym);
+ const char *st_name = Sym.st_name < data_str->d_size ?
+ (Strtab + Sym.st_name) : NTXT ("no_name");
+ switch (GELF_ST_TYPE (Sym.st_info))
+ {
+ case STT_FUNC:
+ // Skip UNDEF symbols (bug 4817083)
+ if (Sym.st_shndx == 0)
+ {
+ if (Sym.st_value == 0)
+ break;
+ sitem = new Symbol (SymLst);
+ sitem->flags |= SYM_UNDEF;
+ if (pltSym)
+ sitem->img_offset = (uint32_t) (pltSym->img_offset +
+ Sym.st_value - pltSym->value);
+ }
+ else
+ {
+ Elf_Internal_Shdr *shdrp = elfDis->get_shdr (Sym.st_shndx);
+ if (shdrp == NULL)
+ break;
+ sitem = new Symbol (SymLst);
+ sitem->img_offset = (uint32_t) (shdrp->sh_offset +
+ Sym.st_value - shdrp->sh_addr);
+ }
+ sitem->size = Sym.st_size;
+ sitem->name = dbe_strdup (st_name);
+ sitem->value = is_relocatable () ? sitem->img_offset : Sym.st_value;
+ if (GELF_ST_BIND (Sym.st_info) == STB_LOCAL)
+ {
+ sitem->local_ind = LocalFile->size () - 1;
+ LocalLst->append (sitem);
+ }
+ break;
+ case STT_NOTYPE:
+ if (streq (st_name, NTXT ("gcc2_compiled.")))
+ {
+ sitem = new Symbol (SymLst);
+ sitem->lang_code = Sp_lang_gcc;
+ sitem->name = dbe_strdup (st_name);
+ sitem->local_ind = LocalFile->size () - 1;
+ LocalLst->append (sitem);
+ }
+ break;
+ case STT_OBJECT:
+ if (!strncmp (st_name, NTXT ("__KAI_KPTS_"), 11))
+ local_lcode = Sp_lang_KAI_KPTS;
+ else if (!strncmp (st_name, NTXT ("__KAI_KCC_"), 10))
+ local_lcode = Sp_lang_KAI_KCC;
+ else if (!strncmp (st_name, NTXT ("__KAI_Kcc_"), 10))
+ local_lcode = Sp_lang_KAI_Kcc;
+ else
+ break;
+ sitem = new Symbol (LocalLst);
+ sitem->lang_code = local_lcode;
+ sitem->name = dbe_strdup (st_name);
+ break;
+ case STT_FILE:
+ {
+ int last = LocalFile->size () - 1;
+ if (last >= 0 && LocalFileIdx->fetch (last) == LocalLst->size ())
+ {
+ // There were no local functions in the latest file.
+ free (LocalFile->get (last));
+ LocalFile->store (last, dbe_strdup (st_name));
+ }
+ else
+ {
+ LocalFile->append (dbe_strdup (st_name));
+ LocalFileIdx->append (LocalLst->size ());
+ }
+ break;
+ }
+ }
+ }
+ fixSymtabAlias ();
+ SymLst->sort (SymValueCmp);
+ get_save_addr (elf->need_swap_endian);
+ dump ();
+}//check_Symtab
+
+void
+Stabs::check_Relocs ()
+{
+ // We may have many relocation tables to process: .rela.text%foo,
+ // rela.text%bar, etc. On Intel, compilers generate .rel.text sections
+ // which have to be processed as well. A lot of rework is needed here.
+ Symbol *sptr = NULL;
+ if (st_check_relocs)
+ return;
+ st_check_relocs = true;
+
+ Elf *elf = openElf (false);
+ if (elf == NULL)
+ return;
+ for (unsigned int sec = 1; sec < elf->elf_getehdr ()->e_shnum; sec++)
+ {
+ bool use_rela, use_PLT;
+ char *name = elf->get_sec_name (sec);
+ if (name == NULL)
+ continue;
+ if (strncmp (name, NTXT (".rela.text"), 10) == 0)
+ {
+ use_rela = true;
+ use_PLT = false;
+ }
+ else if (streq (name, NTXT (".rela.plt")))
+ {
+ use_rela = true;
+ use_PLT = true;
+ }
+ else if (strncmp (name, NTXT (".rel.text"), 9) == 0)
+ {
+ use_rela = false;
+ use_PLT = false;
+ }
+ else if (streq (name, NTXT (".rel.plt")))
+ {
+ use_rela = false;
+ use_PLT = true;
+ }
+ else
+ continue;
+
+ Elf_Internal_Shdr *shdr = elf->get_shdr (sec);
+ if (shdr == NULL)
+ continue;
+
+ // Get ELF data
+ Elf_Data *data = elf->elf_getdata (sec);
+ if (data == NULL)
+ continue;
+ uint64_t ScnSize = data->d_size;
+ uint64_t EntSize = shdr->sh_entsize;
+ if ((ScnSize == 0) || (EntSize == 0))
+ continue;
+ int tot = (int) (ScnSize / EntSize);
+
+ // Get corresponding text section
+ Elf_Internal_Shdr *shdr_txt = elf->get_shdr (shdr->sh_info);
+ if (shdr_txt == NULL)
+ continue;
+ if (!(shdr_txt->sh_flags & SHF_EXECINSTR))
+ continue;
+
+ // Get corresponding symbol table section
+ Elf_Internal_Shdr *shdr_sym = elf->get_shdr (shdr->sh_link);
+ if (shdr_sym == NULL)
+ continue;
+ Elf_Data *data_sym = elf->elf_getdata (shdr->sh_link);
+
+ // Get corresponding string table section
+ Elf_Data *data_str = elf->elf_getdata (shdr_sym->sh_link);
+ if (data_str == NULL)
+ continue;
+ char *Strtab = (char*) data_str->d_buf;
+ for (int n = 0; n < tot; n++)
+ {
+ Elf_Internal_Sym sym;
+ Elf_Internal_Rela rela;
+ char *symName;
+ if (use_rela)
+ elf->elf_getrela (data, n, &rela);
+ else
+ {
+ // GElf_Rela is extended GElf_Rel
+ elf->elf_getrel (data, n, &rela);
+ rela.r_addend = 0;
+ }
+
+ int ndx = (int) GELF_R_SYM (rela.r_info);
+ elf->elf_getsym (data_sym, ndx, &sym);
+ switch (GELF_ST_TYPE (sym.st_info))
+ {
+ case STT_FUNC:
+ case STT_OBJECT:
+ case STT_NOTYPE:
+ if (sym.st_name == 0 || sym.st_name >= data_str->d_size)
+ continue;
+ symName = Strtab + sym.st_name;
+ break;
+ case STT_SECTION:
+ {
+ Elf_Internal_Shdr *secHdr = elf->get_shdr (sym.st_shndx);
+ if (secHdr == NULL)
+ continue;
+ if (sptr == NULL)
+ sptr = new Symbol;
+ sptr->value = secHdr->sh_offset + rela.r_addend;
+ long index = SymLst->bisearch (0, -1, &sptr, SymFindCmp);
+ if (index == -1)
+ continue;
+ Symbol *sp = SymLst->fetch (index);
+ if (sptr->value != sp->value)
+ continue;
+ symName = sp->name;
+ break;
+ }
+ default:
+ continue;
+ }
+ Reloc *reloc = new Reloc;
+ reloc->name = dbe_strdup (symName);
+ reloc->type = GELF_R_TYPE (rela.r_info);
+ reloc->value = use_PLT ? rela.r_offset
+ : rela.r_offset + shdr_txt->sh_offset;
+ reloc->addend = rela.r_addend;
+ if (use_PLT)
+ RelPLTLst->append (reloc);
+ else
+ RelLst->append (reloc);
+ }
+ }
+ delete sptr;
+ RelLst->sort (RelValueCmp);
+} //check_Relocs
+
+void
+Stabs::get_save_addr (bool need_swap_endian)
+{
+ if (elfDis->is_Intel ())
+ {
+ for (int j = 0, sz = SymLst ? SymLst->size () : 0; j < sz; j++)
+ {
+ Symbol *sitem = SymLst->fetch (j);
+ sitem->save = 0;
+ }
+ return;
+ }
+ for (int j = 0, sz = SymLst ? SymLst->size () : 0; j < sz; j++)
+ {
+ Symbol *sitem = SymLst->fetch (j);
+ sitem->save = FUNC_NO_SAVE;
+
+ // If an image offset is not known skip it.
+ // Works for artificial symbols like '@plt' as well.
+ if (sitem->img_offset == 0)
+ continue;
+
+ bool is_o7_moved = false;
+ int64_t off = sitem->img_offset;
+ for (int i = 0; i < sitem->size; i += 4)
+ {
+ unsigned int cmd;
+ if (elfDis->get_data (off, sizeof (cmd), &cmd) == NULL)
+ break;
+ if (need_swap_endian)
+ SWAP_ENDIAN (cmd);
+ off += sizeof (cmd);
+ if ((cmd & 0xffffc000) == 0x9de38000)
+ { // save %sp, ??, %sp
+ sitem->save = i;
+ break;
+ }
+ else if ((cmd & 0xc0000000) == 0x40000000 || // call ??
+ (cmd & 0xfff80000) == 0xbfc00000)
+ { // jmpl ??, %o7
+ if (!is_o7_moved)
+ {
+ sitem->save = FUNC_ROOT;
+ break;
+ }
+ }
+ else if ((cmd & 0xc1ffe01f) == 0x8010000f) // or %g0,%o7,??
+ is_o7_moved = true;
+ }
+ }
+}
+
+uint64_t
+Stabs::mapOffsetToAddress (uint64_t img_offset)
+{
+ Elf *elf = openElf (false);
+ if (elf == NULL)
+ return 0;
+ if (is_relocatable ())
+ return img_offset;
+ for (unsigned int sec = 1; sec < elf->elf_getehdr ()->e_shnum; sec++)
+ {
+ Elf_Internal_Shdr *shdr = elf->get_shdr (sec);
+ if (shdr == NULL)
+ continue;
+ if (img_offset >= (uint64_t) shdr->sh_offset
+ && img_offset < (uint64_t) (shdr->sh_offset + shdr->sh_size))
+ return shdr->sh_addr + (img_offset - shdr->sh_offset);
+ }
+ return 0;
+}
+
+Stabs::Stab_status
+Stabs::archive_Stabs (LoadObject *lo, unsigned int StabSec,
+ unsigned int StabStrSec, bool comdat)
+{
+ StabReader *stabReader = new StabReader (openElf (true), platform, StabSec, StabStrSec);
+ int tot = stabReader->stabCnt;
+ if (tot < 0)
+ {
+ delete stabReader;
+ return DBGD_ERR_NO_STABS;
+ }
+
+ char *sbase = NTXT (""), *arg, *fname, sname[2 * MAXPATHLEN];
+ int lastMod, phase, stabs_level, modCnt = 0;
+ Function *func = NULL;
+ Module *mod;
+#define INIT_MOD phase = 0; stabs_level = 0; *sname = '\0'; mod = NULL
+
+ bool updateStabsMod = false;
+ if (comdat && ((elfDbg->elf_getehdr ()->e_type == ET_EXEC) || (elfDbg->elf_getehdr ()->e_type == ET_DYN)))
+ {
+ if (stabsModules == NULL)
+ stabsModules = new Vector<Module*>();
+ updateStabsMod = true;
+ }
+ INIT_MOD;
+ lastMod = lo->seg_modules->size ();
+
+ for (int n = 0; n < tot; n++)
+ {
+ struct stab stb;
+ char *str = stabReader->get_stab (&stb, comdat);
+ switch (stb.n_type)
+ {
+ case N_FUN:
+ // Ignore a COMDAT function, if there are two or more modules in 'lo'
+ if (comdat && stb.n_other == 1 && modCnt > 1)
+ break;
+ case N_OUTL:
+ case N_ALIAS:
+ case N_ENTRY:
+ if (mod == NULL || str == NULL
+ || (stb.n_type != N_ENTRY && stabs_level != 0))
+ break;
+ if (*str == '@')
+ {
+ str++;
+ if (*str == '>' || *str == '<')
+ str++;
+ }
+
+ fname = dbe_strdup (str);
+ arg = strchr (fname, ':');
+ if (arg != NULL)
+ {
+ if (!strncmp (arg, NTXT (":P"), 2))
+ { // just prototype
+ free (fname);
+ break;
+ }
+ *arg = '\0';
+ }
+
+ func = append_Function (mod, fname);
+ free (fname);
+ break;
+ case N_CMDLINE:
+ if (str && mod)
+ {
+ char *comp_flags = strchr (str, ';');
+ if (comp_flags)
+ {
+ mod->comp_flags = dbe_strdup (comp_flags + 1);
+ mod->comp_dir = dbe_strndup (str, comp_flags - str);
+ }
+ }
+ break;
+ case N_LBRAC:
+ stabs_level++;
+ break;
+ case N_RBRAC:
+ stabs_level--;
+ break;
+ case N_UNDF:
+ INIT_MOD;
+ break;
+ case N_ENDM:
+ INIT_MOD;
+ break;
+ case N_OPT:
+ stabReader->parse_N_OPT (mod, str);
+ if (mod && (str != NULL) && streq (str, NTXT ("gcc2_compiled.")))
+ // Is it anachronism ?
+ mod->lang_code = Sp_lang_gcc;
+ break;
+ case N_GSYM:
+ if (mod && (str != NULL))
+ {
+ if (strncmp (str, NTXT ("__KAI_K"), 7))
+ break;
+ str += 7;
+ if (!strncmp (str, NTXT ("CC_"), 3))
+ mod->lang_code = Sp_lang_KAI_KCC;
+ else if (!strncmp (str, NTXT ("cc_"), 3))
+ mod->lang_code = Sp_lang_KAI_Kcc;
+ else if (!strncmp (str, NTXT ("PTS_"), 4) &&
+ (mod->lang_code != Sp_lang_KAI_KCC) &&
+ (mod->lang_code != Sp_lang_KAI_Kcc))
+ mod->lang_code = Sp_lang_KAI_KPTS;
+ }
+ break;
+ case N_SO:
+ if (str == NULL || *str == '\0')
+ {
+ INIT_MOD;
+ break;
+ }
+ if (phase == 0)
+ {
+ phase = 1;
+ sbase = str;
+ }
+ else
+ {
+ if (*str == '/')
+ sbase = str;
+ else
+ {
+ size_t last = strlen (sbase);
+ if (last == 0 || sbase[last - 1] != '/')
+ snprintf (sname, sizeof (sname), NTXT ("%s/%s"), sbase, str);
+ else
+ snprintf (sname, sizeof (sname), NTXT ("%s%s"), sbase, str);
+ sbase = sname;
+ }
+ mod = append_Module (lo, sbase, lastMod);
+ if (updateStabsMod)
+ stabsModules->append (mod);
+ mod->hasStabs = true;
+ modCnt++;
+ if ((mod->lang_code != Sp_lang_gcc) &&
+ (mod->lang_code != Sp_lang_KAI_KPTS) &&
+ (mod->lang_code != Sp_lang_KAI_KCC) &&
+ (mod->lang_code != Sp_lang_KAI_Kcc))
+ mod->lang_code = (Sp_lang_code) stb.n_desc;
+ *sname = '\0';
+ phase = 0;
+ }
+ break;
+ case N_OBJ:
+ if (str == NULL)
+ break;
+ if (phase == 0)
+ {
+ phase = 1;
+ sbase = str;
+ }
+ else
+ {
+ if (*str == '/')
+ sbase = str;
+ else
+ {
+ size_t last = strlen (sbase);
+ if (last == 0 || sbase[last - 1] != '/')
+ snprintf (sname, sizeof (sname), NTXT ("%s/%s"), sbase, str);
+ else
+ snprintf (sname, sizeof (sname), NTXT ("%s%s"), sbase, str);
+ sbase = sname;
+ }
+ if (mod && (mod->dot_o_file == NULL))
+ {
+ if (strcmp (sbase, NTXT ("/")) == 0)
+ mod->set_name (dbe_strdup (path));
+ else
+ {
+ mod->set_name (dbe_strdup (sbase));
+ mod->dot_o_file = mod->createLoadObject (sbase);
+ }
+ }
+ *sname = '\0';
+ phase = 0;
+ }
+ break;
+ case N_CPROF:
+ cpf_stabs_t map;
+ Dprintf (DEBUG_STABS, NTXT ("N_CPROF n_desc=%x n_value=0x%04x mod=%s\n"),
+ stb.n_desc, stb.n_value, (mod == NULL) ? NTXT ("???") : mod->get_name ());
+ map.type = stb.n_desc;
+ map.offset = stb.n_value;
+ map.module = mod;
+ analyzerInfoMap.append (map);
+ break;
+ }
+ }
+ delete stabReader;
+ return func ? DBGD_ERR_NONE : DBGD_ERR_NO_STABS;
+}
+
+Module *
+Stabs::append_Module (LoadObject *lo, char *name, int lastMod)
+{
+ Module *module;
+ int size;
+ Symbol *sitem;
+
+ if (lo->seg_modules != NULL)
+ {
+ size = lo->seg_modules->size ();
+ if (size < lastMod)
+ lastMod = size;
+ for (int i = 0; i < lastMod; i++)
+ {
+ module = lo->seg_modules->fetch (i);
+ if (module->linkerStabName && streq (module->linkerStabName, name))
+ return module;
+ }
+ }
+ module = dbeSession->createModule (lo, NULL);
+ module->set_file_name (dbe_strdup (name));
+ module->linkerStabName = dbe_strdup (module->file_name);
+
+ // Append all functions with 'local_ind == -1' to the module.
+ if (LocalLst->size () > 0)
+ {
+ sitem = LocalLst->fetch (0);
+ if (!sitem->defined && sitem->local_ind == -1)
+ // Append all functions with 'local_ind == -1' to the module.
+ append_local_funcs (module, 0);
+ }
+
+ // Append local func
+ char *basename = get_basename (name);
+ size = LocalFile->size ();
+ for (int i = 0; i < size; i++)
+ {
+ if (streq (basename, LocalFile->fetch (i)))
+ {
+ int local_ind = LocalFileIdx->fetch (i);
+ if (local_ind >= LocalLst->size ())
+ break;
+ sitem = LocalLst->fetch (local_ind);
+ if (!sitem->defined)
+ {
+ append_local_funcs (module, local_ind);
+ break;
+ }
+ }
+ }
+ return module;
+}
+
+void
+Stabs::append_local_funcs (Module *module, int first_ind)
+{
+ Symbol *sitem = LocalLst->fetch (first_ind);
+ int local_ind = sitem->local_ind;
+ int size = LocalLst->size ();
+ for (int i = first_ind; i < size; i++)
+ {
+ sitem = LocalLst->fetch (i);
+ if (sitem->local_ind != local_ind)
+ break;
+ sitem->defined = true;
+
+ // 3rd party compiled. e.g., Gcc or KAI compiled
+ if (sitem->lang_code != Sp_lang_unknown)
+ {
+ if (module->lang_code == Sp_lang_unknown)
+ module->lang_code = sitem->lang_code;
+ continue;
+ }
+ if (sitem->func)
+ continue;
+ Function *func = dbeSession->createFunction ();
+ sitem->func = func;
+ func->img_fname = path;
+ func->img_offset = (off_t) sitem->img_offset;
+ func->save_addr = (uint32_t) sitem->save;
+ func->size = (uint32_t) sitem->size;
+ func->module = module;
+ func->set_name (sitem->name);
+ module->functions->append (func);
+ module->loadobject->functions->append (func);
+ }
+}
+
+Function *
+Stabs::append_Function (Module *module, char *fname)
+{
+ Symbol *sitem, *sptr;
+ Function *func;
+ long sid, index;
+ char *name;
+ if (SymLstByName == NULL)
+ {
+ SymLstByName = SymLst->copy ();
+ SymLstByName->sort (SymNameCmp);
+ }
+ sptr = new Symbol;
+ if (module->lang_code == N_SO_FORTRAN || module->lang_code == N_SO_FORTRAN90)
+ {
+ char *fortran = dbe_sprintf (NTXT ("%s_"), fname); // FORTRAN name
+ sptr->name = fortran;
+ sid = SymLstByName->bisearch (0, -1, &sptr, SymNameCmp);
+ if (sid == -1)
+ {
+ free (fortran);
+ sptr->name = fname;
+ sid = SymLstByName->bisearch (0, -1, &sptr, SymNameCmp);
+ }
+ else
+ fname = fortran;
+ }
+ else
+ {
+ sptr->name = fname;
+ sid = SymLstByName->bisearch (0, -1, &sptr, SymNameCmp);
+ }
+ sptr->name = NULL;
+ delete sptr;
+
+ if (sid == -1)
+ {
+ Vec_loop (Symbol*, SymLstByName, index, sitem)
+ {
+ if (strncmp (sitem->name, NTXT ("$X"), 2) == 0
+ || strncmp (sitem->name, NTXT (".X"), 2) == 0)
+ {
+ char *n = strchr (((sitem->name) + 2), (int) '.');
+ if (n != NULL)
+ name = n + 1;
+ else
+ name = sitem->name;
+ }
+ else
+ name = sitem->name;
+ if (name != NULL && fname != NULL && (strcmp (name, fname) == 0))
+ {
+ sid = index;
+ break;
+ }
+ }
+ }
+ if (sid != -1)
+ {
+ sitem = SymLstByName->fetch (sid);
+ if (sitem->alias)
+ sitem = sitem->alias;
+ if (sitem->func)
+ return sitem->func;
+ sitem->func = func = dbeSession->createFunction ();
+ func->img_fname = path;
+ func->img_offset = (off_t) sitem->img_offset;
+ func->save_addr = (uint32_t) sitem->save;
+ func->size = (uint32_t) sitem->size;
+ }
+ else
+ func = dbeSession->createFunction ();
+
+ func->module = module;
+ func->set_name (fname);
+ module->functions->append (func);
+ module->loadobject->functions->append (func);
+ return func;
+}
+
+Function *
+Stabs::append_Function (Module *module, char *linkerName, uint64_t pc)
+{
+ Dprintf (DEBUG_STABS, NTXT ("Stabs::append_Function: module=%s linkerName=%s pc=0x%llx\n"),
+ STR (module->get_name ()), STR (linkerName), (unsigned long long) pc);
+ long i;
+ Symbol *sitem = NULL, *sp;
+ Function *func;
+ sp = new Symbol;
+ if (pc)
+ {
+ sp->value = pc;
+ i = SymLst->bisearch (0, -1, &sp, SymFindCmp);
+ if (i != -1)
+ sitem = SymLst->fetch (i);
+ }
+
+ if (!sitem && linkerName)
+ {
+ if (SymLstByName == NULL)
+ {
+ SymLstByName = SymLst->copy ();
+ SymLstByName->sort (SymNameCmp);
+ }
+ sp->name = linkerName;
+ i = SymLstByName->bisearch (0, -1, &sp, SymNameCmp);
+ sp->name = NULL;
+ if (i != -1)
+ sitem = SymLstByName->fetch (i);
+ }
+ delete sp;
+
+ if (!sitem)
+ return NULL;
+ if (sitem->alias)
+ sitem = sitem->alias;
+ if (sitem->func)
+ return sitem->func;
+
+ sitem->func = func = dbeSession->createFunction ();
+ func->img_fname = path;
+ func->img_offset = (off_t) sitem->img_offset;
+ func->save_addr = (uint32_t) sitem->save;
+ func->size = (uint32_t) sitem->size;
+ func->module = module;
+ func->set_name (sitem->name); //XXXX ?? Now call it to set obj->name
+ module->functions->append (func);
+ module->loadobject->functions->append (func);
+ return func;
+}// Stabs::append_Function
+
+Dwarf *
+Stabs::openDwarf ()
+{
+ if (dwarf == NULL)
+ {
+ dwarf = new Dwarf (this);
+ check_Symtab ();
+ }
+ return dwarf;
+}
+
+void
+Stabs::read_hwcprof_info (Module *module)
+{
+ openDwarf ()->read_hwcprof_info (module);
+}
+
+void
+Stabs::dump ()
+{
+ if (!DUMP_ELF_SYM)
+ return;
+ printf (NTXT ("\n======= Stabs::dump: %s =========\n"), path ? path : NTXT ("NULL"));
+ int i, sz;
+ if (LocalFile)
+ {
+ sz = LocalFile->size ();
+ for (i = 0; i < sz; i++)
+ printf (" %3d: %5d '%s'\n", i, LocalFileIdx->fetch (i),
+ LocalFile->fetch (i));
+ }
+ Symbol::dump (SymLst, NTXT ("SymLst"));
+ Symbol::dump (LocalLst, NTXT ("LocalLst"));
+ printf (NTXT ("\n===== END of Stabs::dump: %s =========\n\n"),
+ path ? path : NTXT ("NULL"));
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// Class Include
+Include::Include ()
+{
+ stack = new Vector<SrcFileInfo*>;
+}
+
+Include::~Include ()
+{
+ Destroy (stack);
+}
+
+void
+Include::new_src_file (SourceFile *source, int lineno, Function *func)
+{
+ for (int index = stack->size () - 1; index >= 0; index--)
+ {
+ if (source == stack->fetch (index)->srcfile)
+ {
+ for (int i = stack->size () - 1; i > index; i--)
+ {
+ delete stack->remove (i);
+ if (func && func->line_first > 0)
+ func->popSrcFile ();
+ }
+ return;
+ }
+ }
+ if (func && func->line_first > 0)
+ func->pushSrcFile (source, lineno);
+
+ SrcFileInfo *sfinfo = new SrcFileInfo;
+ sfinfo->srcfile = source;
+ sfinfo->lineno = lineno;
+ stack->append (sfinfo);
+}
+
+void
+Include::push_src_files (Function *func)
+{
+ int index;
+ SrcFileInfo *sfinfo;
+
+ if (func->line_first <= 0 && stack->size () > 0)
+ {
+ sfinfo = stack->fetch (stack->size () - 1);
+ func->setDefSrc (sfinfo->srcfile);
+ }
+ Vec_loop (SrcFileInfo*, stack, index, sfinfo)
+ {
+ func->pushSrcFile (sfinfo->srcfile, sfinfo->lineno);
+ }
+}
+
+void
+Include::new_include_file (SourceFile *source, Function *func)
+{
+ if (stack->size () == 1 && stack->fetch (0)->srcfile == source)
+ // workaroud for gcc; gcc creates 'N_BINCL' stab for main source
+ return;
+ if (func && func->line_first > 0)
+ func->pushSrcFile (source, 0);
+
+ SrcFileInfo *sfinfo = new SrcFileInfo;
+ sfinfo->srcfile = source;
+ sfinfo->lineno = 0;
+ stack->append (sfinfo);
+}
+
+void
+Include::end_include_file (Function *func)
+{
+ int index = stack->size () - 1;
+ if (index > 0)
+ {
+ delete stack->remove (index);
+ if (func && func->line_first > 0)
+ func->popSrcFile ();
+ }
+}
+
+#define RET_S(x) if (t == x) return (char *) #x
+char *
+StabReader::get_type_name (int t)
+{
+ RET_S (N_UNDF);
+ RET_S (N_ABS);
+ RET_S (N_TEXT);
+ RET_S (N_DATA);
+ RET_S (N_BSS);
+ RET_S (N_COMM);
+ RET_S (N_FN);
+ RET_S (N_EXT);
+ RET_S (N_TYPE);
+ RET_S (N_GSYM);
+ RET_S (N_FNAME);
+ RET_S (N_FUN);
+ RET_S (N_OUTL);
+ RET_S (N_STSYM);
+ RET_S (N_TSTSYM);
+ RET_S (N_LCSYM);
+ RET_S (N_TLCSYM);
+ RET_S (N_MAIN);
+ RET_S (N_ROSYM);
+ RET_S (N_FLSYM);
+ RET_S (N_TFLSYM);
+ RET_S (N_PC);
+ RET_S (N_CMDLINE);
+ RET_S (N_OBJ);
+ RET_S (N_OPT);
+ RET_S (N_RSYM);
+ RET_S (N_SLINE);
+ RET_S (N_XLINE);
+ RET_S (N_ILDPAD);
+ RET_S (N_SSYM);
+ RET_S (N_ENDM);
+ RET_S (N_SO);
+ RET_S (N_MOD);
+ RET_S (N_EMOD);
+ RET_S (N_READ_MOD);
+ RET_S (N_ALIAS);
+ RET_S (N_LSYM);
+ RET_S (N_BINCL);
+ RET_S (N_SOL);
+ RET_S (N_PSYM);
+ RET_S (N_EINCL);
+ RET_S (N_ENTRY);
+ RET_S (N_SINCL);
+ RET_S (N_LBRAC);
+ RET_S (N_EXCL);
+ RET_S (N_USING);
+ RET_S (N_ISYM);
+ RET_S (N_ESYM);
+ RET_S (N_PATCH);
+ RET_S (N_CONSTRUCT);
+ RET_S (N_DESTRUCT);
+ RET_S (N_CODETAG);
+ RET_S (N_FUN_CHILD);
+ RET_S (N_RBRAC);
+ RET_S (N_BCOMM);
+ RET_S (N_TCOMM);
+ RET_S (N_ECOMM);
+ RET_S (N_XCOMM);
+ RET_S (N_ECOML);
+ RET_S (N_WITH);
+ RET_S (N_LENG);
+ RET_S (N_CPROF);
+ RET_S (N_BROWS);
+ RET_S (N_FUN_PURE);
+ RET_S (N_FUN_ELEMENTAL);
+ RET_S (N_FUN_RECURSIVE);
+ RET_S (N_FUN_AMD64_PARMDUMP);
+ RET_S (N_SYM_OMP_TLS);
+ RET_S (N_SO_AS);
+ RET_S (N_SO_C);
+ RET_S (N_SO_ANSI_C);
+ RET_S (N_SO_CC);
+ RET_S (N_SO_FORTRAN);
+ RET_S (N_SO_FORTRAN77);
+ RET_S (N_SO_PASCAL);
+ RET_S (N_SO_FORTRAN90);
+ RET_S (N_SO_JAVA);
+ RET_S (N_SO_C99);
+ return NULL;
+}
diff --git a/gprofng/src/Stabs.h b/gprofng/src/Stabs.h
new file mode 100644
index 00000000000..1a7443a8aad
--- /dev/null
+++ b/gprofng/src/Stabs.h
@@ -0,0 +1,160 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _STABS_H
+#define _STABS_H
+
+#include "dbe_structs.h"
+#include "vec.h"
+
+enum cpf_instr_type_t {
+ CPF_INSTR_TYPE_LD = 0, // profiled load instruction
+ CPF_INSTR_TYPE_ST, // profiled store instruction
+ CPF_INSTR_TYPE_PREFETCH, // profiled prefetch instruction
+ CPF_INSTR_TYPE_BRTARGET, // branch target
+ CPF_INSTR_TYPE_UNKNOWN, // unidentified instruction
+ CPF_INSTR_TYPE_NTYPES // total # of instr types
+};
+
+class Function;
+class LoadObject;
+class Module;
+class ComC;
+class Elf;
+class Dwarf;
+class Symbol;
+class Reloc;
+struct cpf_stabs_t;
+class SourceFile;
+template <typename Key_t, typename Value_t> class Map;
+
+class Include {
+ public:
+ typedef struct {
+ SourceFile *srcfile;
+ int lineno;
+ } SrcFileInfo;
+ Include();
+ ~Include();
+ void new_src_file(SourceFile *source, int lineno, Function *func = NULL);
+ void new_include_file(SourceFile *source, Function *func);
+ void end_include_file(Function *func);
+ void push_src_files(Function *func);
+
+ private:
+ Vector<SrcFileInfo*> *stack;
+};
+
+// Stabs object
+class Stabs {
+ public:
+
+ enum Stab_status {
+ DBGD_ERR_NONE,
+ DBGD_ERR_CANT_OPEN_FILE,
+ DBGD_ERR_BAD_ELF_LIB,
+ DBGD_ERR_BAD_ELF_FORMAT,
+ DBGD_ERR_NO_STABS,
+ DBGD_ERR_BAD_STABS,
+ DBGD_ERR_NO_DWARF,
+ DBGD_ERR_CHK_SUM
+ };
+
+ static Stabs *NewStabs(char *_path, char *lo_name);
+ Stabs(char *_path, char *_lo_name);
+ ~Stabs();
+
+ bool is_relocatable(){ return isRelocatable; }
+ long long get_textsz() { return textsz; }
+ Platform_t get_platform() { return platform; }
+ WSize_t get_class() { return wsize;}
+ Stab_status get_status() { return status;}
+
+ Stab_status read_stabs(ino64_t srcInode, Module *module, Vector<ComC*> *comComs, bool readDwarf = false);
+ Stab_status read_archive(LoadObject *lo);
+ bool read_symbols(Vector<Function*> *functions);
+ uint64_t mapOffsetToAddress(uint64_t img_offset);
+ char *sym_name(uint64_t target, uint64_t instr, int flag);
+ Elf *openElf (bool dbg_info = false);
+ void read_hwcprof_info(Module *module);
+ void dump();
+ void read_dwarf_from_dot_o(Module *mod);
+
+ static bool is_fortran(Sp_lang_code lc) { return (lc == Sp_lang_fortran) || (lc == Sp_lang_fortran90); }
+ static Function *find_func(char *fname, Vector<Function*> *functions, bool fortran, bool inner_names=false);
+ Module *append_Module(LoadObject *lo, char *name, int lastMod = 0);
+ Function *append_Function(Module *module, char *fname);
+ Function *append_Function(Module *module, char *linkerName, uint64_t pc);
+ Function *map_PC_to_func(uint64_t pc, uint64_t &low_pc, Vector<Function*> *functions);
+ char *path; // path to the object file
+ char *lo_name; // User name of load object
+
+ private:
+ Elf *elfDbg; // ELF with debug info
+ Elf *elfDis; // ELF for disasm
+ Stab_status status; // current stabs status
+
+ long long textsz; // text segment size
+ Platform_t platform; // Sparc, Sparcv9, Intel
+ WSize_t wsize; // word size: 32 or 64
+ bool isRelocatable;
+ Symbol *last_PC_to_sym;
+
+ Vector<cpf_stabs_t> analyzerInfoMap; // stabs->section mapping
+
+ bool check_Comm(Vector<ComC*> *comComs);
+ void check_Info(Vector<ComC*> *comComs);
+ void check_Loop(Vector<ComC*> *comComs);
+ void check_AnalyzerInfo();
+ void append_local_funcs(Module *module, int first_ind);
+ Stab_status srcline_Stabs (Module *module, unsigned int StabSec, unsigned int StabStrSec, bool comdat);
+ Stab_status archive_Stabs (LoadObject *lo, unsigned int StabSec, unsigned int StabStrSec, bool comdat);
+
+ // Interface with Elf Symbol Table
+ void check_Symtab();
+ void readSymSec(unsigned int sec, Elf *elf);
+ void check_Relocs();
+ void get_save_addr(bool need_swap_endian);
+ Symbol *map_PC_to_sym(uint64_t pc);
+ Symbol *pltSym;
+ Vector<Symbol*> *SymLst; // list of func symbols
+ Vector<Symbol*> *SymLstByName; // list of func symbols sorted by Name
+ Vector<Reloc*> *RelLst; // list of text relocations
+ Vector<Reloc*> *RelPLTLst; // list of PLT relocations
+ Vector<Symbol*> *LocalLst; // list of local func symbols
+ Vector<char*> *LocalFile; // list of local files
+ Vector<int> *LocalFileIdx; // start index in LocalLst
+
+ Elf *openElf(char *fname, Stab_status &st);
+ Map<const char*, Symbol*> *get_elf_symbols();
+ Dwarf *dwarf;
+
+ bool st_check_symtab, st_check_relocs;
+ Function *createFunction(LoadObject *lo, Module *module, Symbol *sym);
+ void fixSymtabAlias();
+
+ // Interface with dwarf
+ Dwarf *openDwarf();
+
+ Vector<Module*> *stabsModules;
+ static char *get_type_name(int t);
+};
+
+#endif /* _STABS_H */
diff --git a/gprofng/src/Stats_data.cc b/gprofng/src/Stats_data.cc
new file mode 100644
index 00000000000..2595bc77e25
--- /dev/null
+++ b/gprofng/src/Stats_data.cc
@@ -0,0 +1,203 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+//#include <search.h> // For the tsearch stuff
+#include <assert.h>
+//#include <stdlib.h>
+#include "Table.h"
+#include "Sample.h"
+#include "Stats_data.h"
+#include "util.h"
+#include "i18n.h"
+
+//XXX: The fundamental problem with this package of routines is that
+//XXX: they should look a lot more like overview data. The result
+//XXX: is that it is not possible to share as much code as would
+//XXX: otherwise be possible.
+
+int
+Stats_data::size ()
+{
+ // Return the number of Stats_item values associated with "this".
+ if (stats_items == NULL)
+ return 0;
+ return stats_items->size ();
+}
+
+Stats_data::Stats_item
+Stats_data::fetch (int index)
+{
+ // Routine will return the "index"'th Stats_item associated with "this".
+ assert (index >= 0 && index < stats_items->size ());
+ return *(stats_items->fetch (index));
+}
+
+Stats_data::Stats_data ()
+{
+ // this constructor for use with sum()
+ packets = NULL;
+ stats_items = NULL;
+}
+
+Stats_data::Stats_data (DataView *_packets)
+{
+ packets = _packets;
+ stats_items = NULL;
+ compute_data (); // reads all data
+}
+
+Stats_data::~Stats_data ()
+{
+ if (stats_items)
+ {
+ stats_items->destroy ();
+ delete stats_items;
+ }
+}
+
+void
+Stats_data::sum (Stats_data *data)
+{
+ int index;
+ Stats_item *stats_item, *data_item;
+ if (stats_items == NULL)
+ {
+ stats_items = new Vector<Stats_item*>;
+ Vec_loop (Stats_item*, data->stats_items, index, data_item)
+ {
+ stats_item = create_stats_item (data_item->value.ll, data_item->label);
+ stats_items->append (stats_item);
+ }
+ }
+ else
+ {
+ Vec_loop (Stats_item*, data->stats_items, index, data_item)
+ {
+ stats_items->fetch (index)->value.ll += data_item->value.ll;
+ }
+ }
+}
+
+Stats_data::Stats_item *
+Stats_data::create_stats_item (long long v, char *l)
+{
+ Stats_data::Stats_item *st_it;
+ st_it = new Stats_data::Stats_item;
+ st_it->label = l;
+ st_it->value.sign = false;
+ st_it->value.ll = v;
+ st_it->value.tag = VT_LLONG;
+ return st_it;
+}
+
+PrUsage *
+Stats_data::fetchPrUsage (long index)
+{
+ // Return the data values corresponding to the "index"'th sample.
+ PrUsage *prusage;
+ if (packets->getSize () > 0)
+ {
+ Sample* sample = (Sample*) packets->getObjValue (PROP_SMPLOBJ, index);
+ prusage = sample->get_usage ();
+ if (prusage != NULL)
+ return prusage;
+ }
+ return new PrUsage;
+}
+
+void
+Stats_data::compute_data ()
+{
+ Stats_data::Stats_item *stats_item;
+ PrUsage *tots, *temp;
+ stats_items = new Vector<Stats_data::Stats_item*>;
+
+ // Precomputation is needed.
+ long size = packets->getSize ();
+ tots = new PrUsage ();
+ for (long index = 0; index < size; index++)
+ {
+ temp = fetchPrUsage (index);
+ tots->pr_tstamp += temp->pr_tstamp;
+ tots->pr_create += temp->pr_create;
+ tots->pr_term += temp->pr_term;
+ tots->pr_rtime += temp->pr_rtime;
+ tots->pr_utime += temp->pr_utime;
+ tots->pr_stime += temp->pr_stime;
+ tots->pr_ttime += temp->pr_ttime;
+ tots->pr_tftime += temp->pr_tftime;
+ tots->pr_dftime += temp->pr_dftime;
+ tots->pr_kftime += temp->pr_kftime;
+ tots->pr_slptime += temp->pr_slptime;
+ tots->pr_ltime += temp->pr_ltime;
+ tots->pr_wtime += temp->pr_wtime;
+ tots->pr_stoptime += temp->pr_stoptime;
+ tots->pr_minf += temp->pr_minf;
+ tots->pr_majf += temp->pr_majf;
+ tots->pr_nswap += temp->pr_nswap;
+ tots->pr_inblk += temp->pr_inblk;
+ tots->pr_oublk += temp->pr_oublk;
+ tots->pr_msnd += temp->pr_msnd;
+ tots->pr_mrcv += temp->pr_mrcv;
+ tots->pr_sigs += temp->pr_sigs;
+ tots->pr_vctx += temp->pr_vctx;
+ tots->pr_ictx += temp->pr_ictx;
+ tots->pr_sysc += temp->pr_sysc;
+ tots->pr_ioch += temp->pr_ioch;
+ }
+ stats_item = create_stats_item ((long long) tots->pr_minf,
+ GTXT ("Minor Page Faults"));
+ stats_items->append (stats_item);
+ stats_item = create_stats_item ((long long) tots->pr_majf,
+ GTXT ("Major Page Faults"));
+ stats_items->append (stats_item);
+ stats_item = create_stats_item ((long long) tots->pr_nswap,
+ GTXT ("Process swaps"));
+ stats_items->append (stats_item);
+ stats_item = create_stats_item ((long long) tots->pr_inblk,
+ GTXT ("Input blocks"));
+ stats_items->append (stats_item);
+ stats_item = create_stats_item ((long long) tots->pr_oublk,
+ GTXT ("Output blocks"));
+ stats_items->append (stats_item);
+ stats_item = create_stats_item ((long long) tots->pr_msnd,
+ GTXT ("Messages sent"));
+ stats_items->append (stats_item);
+ stats_item = create_stats_item ((long long) tots->pr_mrcv,
+ GTXT ("Messages received"));
+ stats_items->append (stats_item);
+ stats_item = create_stats_item ((long long) tots->pr_sigs,
+ GTXT ("Signals handled"));
+ stats_items->append (stats_item);
+ stats_item = create_stats_item ((long long) tots->pr_vctx,
+ GTXT ("Voluntary context switches"));
+ stats_items->append (stats_item);
+ stats_item = create_stats_item ((long long) tots->pr_ictx,
+ GTXT ("Involuntary context switches"));
+ stats_items->append (stats_item);
+ stats_item = create_stats_item ((long long) tots->pr_sysc,
+ GTXT ("System calls"));
+ stats_items->append (stats_item);
+ stats_item = create_stats_item ((long long) tots->pr_ioch,
+ GTXT ("Characters of I/O"));
+ stats_items->append (stats_item);
+ delete tots;
+}
diff --git a/gprofng/src/Stats_data.h b/gprofng/src/Stats_data.h
new file mode 100644
index 00000000000..2f6b6a79f04
--- /dev/null
+++ b/gprofng/src/Stats_data.h
@@ -0,0 +1,59 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _STATS_DATA_H
+#define _STATS_DATA_H
+
+// A Stats_data object is used to obtain the data needed to display
+// a statistics display.
+
+#include "vec.h"
+#include "Exp_Layout.h"
+
+class DataView;
+
+class Stats_data
+{
+public:
+
+ struct Stats_item
+ {
+ char *label; // statistic label
+ TValue value; // statistic value
+ };
+
+ Stats_data ();
+ Stats_data (DataView *packets);
+ ~Stats_data ();
+ int size (); // Return the total number of items.
+ Stats_item fetch (int index);
+ void sum (Stats_data *data);
+
+private:
+
+ PrUsage * fetchPrUsage (long index);
+ void compute_data (); // Perform any initial computation.
+ Stats_data::Stats_item *create_stats_item (long long, char *);
+
+ Vector<Stats_item*> *stats_items; // Actual statistics values
+ DataView *packets;
+};
+
+#endif /* _STATS_DATA_H */
diff --git a/gprofng/src/StringBuilder.cc b/gprofng/src/StringBuilder.cc
new file mode 100644
index 00000000000..a9656d9b9ae
--- /dev/null
+++ b/gprofng/src/StringBuilder.cc
@@ -0,0 +1,585 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <values.h>
+#include <stdarg.h>
+
+#include "gp-defs.h"
+#include "StringBuilder.h"
+#include "i18n.h"
+
+StringBuilder::StringBuilder ()
+{
+ count = 0;
+ maxCapacity = 16;
+ value = (char *) malloc (maxCapacity);
+ memset (value, 0, maxCapacity);
+}
+
+StringBuilder::StringBuilder (int capacity)
+{
+ count = 0;
+ maxCapacity = capacity;
+ value = (char *) malloc (maxCapacity);
+ memset (value, 0, maxCapacity);
+}
+
+StringBuilder::~StringBuilder ()
+{
+ free (value);
+}
+
+void
+StringBuilder::ensureCapacity (int minimumCapacity)
+{
+ if (minimumCapacity > maxCapacity)
+ expandCapacity (minimumCapacity);
+}
+
+void
+StringBuilder::expandCapacity (int minimumCapacity)
+{
+ int newCapacity = (maxCapacity + 1) * 2;
+ if (newCapacity < 0)
+ newCapacity = MAXINT;
+ else if (minimumCapacity > newCapacity)
+ newCapacity = minimumCapacity;
+ char *newValue = (char *) malloc (newCapacity);
+ maxCapacity = newCapacity;
+ memcpy (newValue, value, count);
+ memset (newValue + count, 0, maxCapacity - count);
+ free (value);
+ value = newValue;
+}
+
+void
+StringBuilder::trimToSize ()
+{
+ if (count < maxCapacity)
+ {
+ char *newValue = (char *) malloc (count);
+ maxCapacity = count;
+ memcpy (newValue, value, count);
+ free (value);
+ value = newValue;
+ }
+}
+
+void
+StringBuilder::trim ()
+{
+ while (count > 0)
+ {
+ if (value[count - 1] != ' ')
+ break;
+ count--;
+ }
+}
+
+void
+StringBuilder::setLength (int newLength)
+{
+ if (newLength < 0)
+ return;
+ if (newLength > maxCapacity)
+ expandCapacity (newLength);
+ if (count < newLength)
+ {
+ for (; count < newLength; count++)
+ value[count] = '\0';
+ }
+ else
+ count = newLength;
+}
+
+char
+StringBuilder::charAt (int index)
+{
+ if (index < 0 || index >= count)
+ return 0;
+ return value[index];
+}
+
+void
+StringBuilder::getChars (int srcBegin, int srcEnd, char dst[], int dstBegin)
+{
+ if (srcBegin < 0)
+ return;
+ if (srcEnd < 0 || srcEnd > count)
+ return;
+ if (srcBegin > srcEnd)
+ return;
+ memcpy (dst + dstBegin, value + srcBegin, srcEnd - srcBegin);
+}
+
+void
+StringBuilder::setCharAt (int index, char ch)
+{
+ if (index < 0 || index >= count)
+ return;
+ value[index] = ch;
+}
+
+StringBuilder *
+StringBuilder::append (StringBuilder *sb)
+{
+ if (sb == NULL)
+ return append (NTXT ("null"));
+ int len = sb->count;
+ int newcount = count + len;
+ if (newcount > maxCapacity)
+ expandCapacity (newcount);
+ sb->getChars (0, len, value, count);
+ count = newcount;
+ return this;
+}
+
+StringBuilder *
+StringBuilder::append (const char str[])
+{
+ int len = (int) strlen (str);
+ int newCount = count + len;
+ if (newCount > maxCapacity)
+ expandCapacity (newCount);
+ memcpy (value + count, str, len);
+ count = newCount;
+ return this;
+}
+
+StringBuilder *
+StringBuilder::append (const char str[], int offset, int len)
+{
+ int newCount = count + len;
+ if (newCount > maxCapacity)
+ expandCapacity (newCount);
+ memcpy (value + count, str + offset, len);
+ count = newCount;
+ return this;
+}
+
+StringBuilder *
+StringBuilder::append (bool b)
+{
+ if (b)
+ append (NTXT ("true"));
+ else
+ append (NTXT ("false"));
+ return this;
+}
+
+StringBuilder *
+StringBuilder::append (char c)
+{
+ int newCount = count + 1;
+ if (newCount > maxCapacity)
+ {
+ expandCapacity (newCount);
+ }
+ value[count++] = c;
+ return this;
+}
+
+StringBuilder *
+StringBuilder::append (int i)
+{
+ char buf[16];
+ snprintf (buf, sizeof (buf), NTXT ("%d"), i);
+ append (buf);
+ return this;
+}
+
+StringBuilder *
+StringBuilder::append (unsigned int i)
+{
+ char buf[16];
+ snprintf (buf, sizeof (buf), NTXT ("%u"), i);
+ append (buf);
+ return this;
+}
+
+StringBuilder *
+StringBuilder::append (long lng)
+{
+ char buf[32];
+ snprintf (buf, sizeof (buf), NTXT ("%ld"), lng);
+ append (buf);
+ return this;
+}
+
+StringBuilder *
+StringBuilder::append (unsigned long lng)
+{
+ char buf[32];
+ snprintf (buf, sizeof (buf), NTXT ("%lu"), lng);
+ append (buf);
+ return this;
+}
+
+StringBuilder *
+StringBuilder::append (long long lng)
+{
+ char buf[32];
+ snprintf (buf, sizeof (buf), NTXT ("%lld"), lng);
+ append (buf);
+ return this;
+}
+
+StringBuilder *
+StringBuilder::append (unsigned long long lng)
+{
+ char buf[32];
+ snprintf (buf, sizeof (buf), NTXT ("%llu"), lng);
+ append (buf);
+ return this;
+}
+
+StringBuilder *
+StringBuilder::append (float f)
+{
+ char buf[32];
+ snprintf (buf, sizeof (buf), NTXT ("%f"), (double) f);
+ append (buf);
+ return this;
+}
+
+StringBuilder *
+StringBuilder::append (double d)
+{
+ char buf[32];
+ snprintf (buf, sizeof (buf), NTXT ("%f"), d);
+ append (buf);
+ return this;
+}
+
+StringBuilder *
+StringBuilder::_delete (int start, int end)
+{
+ if (start < 0)
+ return this;
+ if (end > count)
+ end = count;
+ if (start > end)
+ return this;
+ int len = end - start;
+ if (len > 0)
+ {
+ memcpy (value + start, value + start + len, count - end);
+ count -= len;
+ }
+ return this;
+}
+
+StringBuilder *
+StringBuilder::deleteCharAt (int index)
+{
+ if (index < 0 || index >= count)
+ return this;
+ memcpy (value + index, value + index + 1, count - index - 1);
+ count--;
+ return this;
+}
+
+bool
+StringBuilder::endsWith (const char str[])
+{
+ if (str == NULL)
+ {
+ if (count == 0)
+ return true;
+ return false;
+ }
+ int len = (int) strlen (str);
+ if (len == 0)
+ return true;
+ int start = count - len;
+ if (start < 0)
+ return false;
+ int res = strncmp ((const char *) (value + start), str, len);
+ if (res != 0)
+ return false;
+ return true;
+}
+
+StringBuilder *
+StringBuilder::insert (int index, const char str[], int offset, int len)
+{
+ if (index < 0 || index > count)
+ return this;
+ if (offset < 0 || len < 0 || offset > ((int) strlen (str)) - len)
+ return this;
+ int newCount = count + len;
+ if (newCount > maxCapacity)
+ expandCapacity (newCount);
+ memcpy (value + index + len, value + index, count - index);
+ memcpy (value + index, str + offset, len);
+ count = newCount;
+ return this;
+}
+
+StringBuilder *
+StringBuilder::insert (int offset, const char str[])
+{
+ if (offset < 0 || offset > count)
+ return this;
+ int len = (int) strlen (str);
+ int newCount = count + len;
+ if (newCount > maxCapacity)
+ expandCapacity (newCount);
+ memcpy (value + offset + len, value + offset, count - offset);
+ memcpy (value + offset, str, len);
+ count = newCount;
+ return this;
+}
+
+StringBuilder *
+StringBuilder::insert (int offset, bool b)
+{
+ return insert (offset, b ? NTXT ("true") : NTXT ("false"));
+}
+
+StringBuilder *
+StringBuilder::insert (int offset, char c)
+{
+ int newCount = count + 1;
+ if (newCount > maxCapacity)
+ expandCapacity (newCount);
+ memcpy (value + offset + 1, value + offset, count - offset);
+ value[offset] = c;
+ count = newCount;
+ return this;
+}
+
+StringBuilder *
+StringBuilder::insert (int offset, int i)
+{
+ char buf[16];
+ snprintf (buf, sizeof (buf), NTXT ("%d"), i);
+ insert (offset, buf);
+ return this;
+}
+
+StringBuilder *
+StringBuilder::insert (int offset, long l)
+{
+ char buf[32];
+ snprintf (buf, sizeof (buf), NTXT ("%ld"), l);
+ insert (offset, buf);
+ return this;
+}
+
+StringBuilder *
+StringBuilder::insert (int offset, float f)
+{
+ char buf[32];
+ snprintf (buf, sizeof (buf), NTXT ("%f"), (double) f);
+ insert (offset, buf);
+ return this;
+}
+
+StringBuilder *
+StringBuilder::insert (int offset, double d)
+{
+ char buf[32];
+ snprintf (buf, sizeof (buf), NTXT ("%f"), d);
+ insert (offset, buf);
+ return this;
+}
+
+StringBuilder *
+StringBuilder::reverse ()
+{
+ int n = count - 1;
+ for (int j = (n - 1) >> 1; j >= 0; --j)
+ {
+ char temp = value[j];
+ char temp2 = value[n - j];
+ value[j] = temp2;
+ value[n - j] = temp;
+ }
+ return this;
+}
+
+//String *StringBuilder::toString();
+char *
+StringBuilder::toString ()
+{
+ char *str = (char *) malloc (count + 1);
+ memcpy (str, value, count);
+ str[count] = '\0';
+ return str;
+}
+
+void
+StringBuilder::toFile (FILE *fp)
+{
+ append ('\0');
+ count--;
+ fprintf (fp, NTXT ("%s"), value);
+}
+
+void
+StringBuilder::toFileLn (FILE *fp)
+{
+ trim ();
+ append ('\0');
+ count--;
+ fprintf (fp, NTXT ("%s\n"), value);
+}
+
+StringBuilder *
+StringBuilder::sprintf (const char *fmt, ...)
+{
+ int cnt;
+ setLength (0);
+
+ va_list vp;
+ va_start (vp, fmt);
+ cnt = vsnprintf (value, maxCapacity, fmt, vp);
+ va_end (vp);
+ if (cnt < maxCapacity)
+ {
+ count = cnt;
+ return this;
+ }
+
+ // Have to count the trailing zero
+ ensureCapacity (cnt + 1);
+ va_start (vp, fmt);
+ count = vsnprintf (value, maxCapacity, fmt, vp);
+ va_end (vp);
+ return this;
+}
+
+StringBuilder *
+StringBuilder::appendf (const char *fmt, ...)
+{
+ va_list vp;
+ va_start (vp, fmt);
+ int cnt = vsnprintf (value + count, maxCapacity - count, fmt, vp);
+ va_end (vp);
+ if (cnt + count < maxCapacity)
+ {
+ count += cnt;
+ return this;
+ }
+
+ // Have to count the trailing zero
+ ensureCapacity (count + cnt + 1);
+ va_start (vp, fmt);
+ count += vsnprintf (value + count, maxCapacity - count, fmt, vp);
+ va_end (vp);
+ return this;
+}
+
+int
+StringBuilder::indexOf (const char str[])
+{
+ return indexOf (str, 0);
+}
+
+int
+StringBuilder::indexOf (const char str[], int fromIndex)
+{
+ int len = (int) strlen (str);
+ if (fromIndex >= count)
+ return len == 0 ? count : -1;
+ if (fromIndex < 0)
+ fromIndex = 0;
+ if (len == 0)
+ return fromIndex;
+
+ char first = str[0];
+ int max = (count - len);
+
+ for (int i = fromIndex; i <= max; i++)
+ {
+ /* Look for first character. */
+ if (value[i] != first)
+ while (++i <= max && value[i] != first)
+ ;
+ /* Found first character, now look at the rest of v2 */
+ if (i <= max)
+ {
+ int j = i + 1;
+ int end = j + len - 1;
+ for (int k = 1; j < end && value[j] == str[k]; j++, k++)
+ ;
+ if (j == end) /* Found whole string. */
+ return i;
+ }
+ }
+ return -1;
+}
+
+int
+StringBuilder::lastIndexOf (const char str[])
+{
+ return lastIndexOf (str, count);
+}
+
+int
+StringBuilder::lastIndexOf (const char str[], int fromIndex)
+{
+ /*
+ * Check arguments; return immediately where possible. For
+ * consistency, don't check for null str.
+ */
+ int len = (int) strlen (str);
+ int rightIndex = count - len;
+ if (fromIndex < 0)
+ return -1;
+ if (fromIndex > rightIndex)
+ fromIndex = rightIndex;
+ /* Empty string always matches. */
+ if (len == 0)
+ return fromIndex;
+
+ int strLastIndex = len - 1;
+ char strLastChar = str[strLastIndex];
+ int min = len - 1;
+ int i = min + fromIndex;
+
+ while (true)
+ {
+ while (i >= min && value[i] != strLastChar)
+ i--;
+ if (i < min)
+ return -1;
+
+ int j = i - 1;
+ int start = j - (len - 1);
+ int k = strLastIndex - 1;
+ while (j > start)
+ {
+ if (value[j--] != str[k--])
+ {
+ i--;
+ break;
+ }
+ }
+ if (j == start)
+ return start + 1;
+ }
+}
+
diff --git a/gprofng/src/StringBuilder.h b/gprofng/src/StringBuilder.h
new file mode 100644
index 00000000000..5fe1a5192ea
--- /dev/null
+++ b/gprofng/src/StringBuilder.h
@@ -0,0 +1,101 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+/*
+ * java/lang/StringBuilder
+ *
+ * Based on JavaTM 2 Platform Standard Ed. 5.0
+ */
+
+#ifndef _StringBuilder_h
+#define _StringBuilder_h
+
+class StringBuilder
+{
+public:
+ StringBuilder ();
+ StringBuilder (int capacity);
+ virtual ~StringBuilder ();
+
+ int
+ length ()
+ {
+ return count;
+ }
+
+ int
+ capacity ()
+ {
+ return maxCapacity;
+ }
+
+ bool endsWith (const char str[]);
+ void ensureCapacity (int minimumCapacity);
+ void expandCapacity (int minimumCapacity);
+ void trimToSize ();
+ void trim ();
+ void setLength (int newLength);
+ char charAt (int index);
+ void getChars (int srcBegin, int srcEnd, char dst[], int dstBegin);
+ void setCharAt (int index, char ch);
+ StringBuilder *append (StringBuilder *sb);
+ StringBuilder *append (const char str[]);
+ StringBuilder *append (const char str[], int offset, int len);
+ StringBuilder *append (bool b);
+ StringBuilder *append (char c);
+ StringBuilder *append (int i);
+ StringBuilder *append (unsigned int i);
+ StringBuilder *append (long lng);
+ StringBuilder *append (unsigned long i);
+ StringBuilder *append (long long lng);
+ StringBuilder *append (unsigned long long lng);
+ StringBuilder *append (float f);
+ StringBuilder *append (double d);
+ StringBuilder *_delete (int start, int end);
+ StringBuilder *deleteCharAt (int index);
+ StringBuilder *insert (int index, const char str[], int offset, int len);
+ StringBuilder *insert (int offset, const char str[]);
+ StringBuilder *insert (int offset, bool b);
+ StringBuilder *insert (int offset, char c);
+ StringBuilder *insert (int offset, int i);
+ StringBuilder *insert (int offset, long l);
+ StringBuilder *insert (int offset, float f);
+ StringBuilder *insert (int offset, double d);
+ StringBuilder *reverse ();
+ char *toString ();
+ void toFile (FILE *fp);
+ void toFileLn (FILE *fp);
+
+ // Not in Java
+ StringBuilder *appendf (const char *fmt, ...) __attribute__ ((format (printf, 2, 3)));
+ StringBuilder *sprintf (const char *fmt, ...) __attribute__ ((format (printf, 2, 3)));
+
+ int indexOf (const char str[]);
+ int indexOf (const char str[], int fromIndex);
+ int lastIndexOf (const char str[]);
+ int lastIndexOf (const char str[], int fromIndex);
+
+private:
+ char *value;
+ int count;
+ int maxCapacity;
+};
+
+#endif /* _StringBuilder_h */
diff --git a/gprofng/src/StringMap.h b/gprofng/src/StringMap.h
new file mode 100644
index 00000000000..31898f462b6
--- /dev/null
+++ b/gprofng/src/StringMap.h
@@ -0,0 +1,238 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+/*
+ * String Map implementation.
+ */
+
+#ifndef _DBE_STRINGMAP_H
+#define _DBE_STRINGMAP_H
+
+#include <assert.h>
+#include <vec.h>
+#include <Map.h>
+#include <util.h>
+
+template <typename Value_t>
+class StringMap : public Map<const char*, Value_t>
+{
+public:
+
+ StringMap (int htable_size = 1024, int chunk_size = 16384);
+ ~StringMap ();
+ void clear ();
+ void put (const char *key, Value_t val);
+ Value_t get (const char *key);
+ Value_t get (const char *key, typename Map<const char*, Value_t>::Relation rel);
+ Value_t remove (const char*);
+ Vector<const char*> *keySet ();
+ Vector<Value_t> *values ();
+
+private:
+
+ static unsigned
+ hash (const char *key)
+ {
+ return (unsigned) crc64 (key, strlen (key));
+ }
+
+ struct Entry
+ {
+ char *key;
+ Value_t val;
+ };
+
+ int CHUNK_SIZE, HTABLE_SIZE;
+ int entries;
+ int nchunks;
+ Entry **chunks;
+ Vector<Entry*> *index;
+ Entry **hashTable;
+};
+
+template <typename Value_t>
+StringMap<Value_t>::StringMap (int htable_size, int chunk_size)
+{
+ HTABLE_SIZE = htable_size;
+ CHUNK_SIZE = chunk_size;
+ entries = 0;
+ nchunks = 0;
+ chunks = NULL;
+ index = new Vector<Entry*>;
+ hashTable = new Entry*[HTABLE_SIZE];
+ for (int i = 0; i < HTABLE_SIZE; i++)
+ hashTable[i] = NULL;
+}
+
+template <typename Value_t>
+StringMap<Value_t>::~StringMap ()
+{
+ for (int i = 0; i < entries; ++i)
+ {
+ Entry *entry = index->fetch (i);
+ free (entry->key);
+ }
+ for (int i = 0; i < nchunks; i++)
+ delete[] chunks[i];
+ delete[] chunks;
+ delete index;
+ delete[] hashTable;
+}
+
+template <typename Value_t>
+void
+StringMap<Value_t>::clear ()
+{
+ for (int i = 0; i < entries; ++i)
+ {
+ Entry *entry = index->fetch (i);
+ free (entry->key);
+ }
+ entries = 0;
+ index->reset ();
+ for (int i = 0; i < HTABLE_SIZE; i++)
+ hashTable[i] = NULL;
+}
+
+template <typename Value_t>
+void
+StringMap<Value_t>::put (const char *key, Value_t val)
+{
+ unsigned idx = hash (key) % HTABLE_SIZE;
+ Entry *entry = hashTable[idx];
+ if (entry && strcmp (entry->key, key) == 0)
+ {
+ entry->val = val;
+ return;
+ }
+ int lo = 0;
+ int hi = entries - 1;
+ while (lo <= hi)
+ {
+ int md = (lo + hi) / 2;
+ entry = index->fetch (md);
+ int cmp = strcmp (entry->key, key);
+ if (cmp < 0)
+ lo = md + 1;
+ else if (cmp > 0)
+ hi = md - 1;
+ else
+ {
+ entry->val = val;
+ return;
+ }
+ }
+ if (entries >= nchunks * CHUNK_SIZE)
+ {
+ nchunks++;
+
+ // Reallocate Entry chunk array
+ Entry **new_chunks = new Entry*[nchunks];
+ for (int i = 0; i < nchunks - 1; i++)
+ new_chunks[i] = chunks[i];
+ delete[] chunks;
+ chunks = new_chunks;
+
+ // Allocate new chunk for entries.
+ chunks[nchunks - 1] = new Entry[CHUNK_SIZE];
+ }
+ entry = &chunks[entries / CHUNK_SIZE][entries % CHUNK_SIZE];
+ entry->key = strdup (key);
+ entry->val = val;
+ index->insert (lo, entry);
+ hashTable[idx] = entry;
+ entries++;
+}
+
+template <typename Value_t>
+Value_t
+StringMap<Value_t>::get (const char *key)
+{
+ unsigned idx = hash (key) % HTABLE_SIZE;
+ Entry *entry = hashTable[idx];
+ if (entry && strcmp (entry->key, key) == 0)
+ return entry->val;
+ int lo = 0;
+ int hi = entries - 1;
+ while (lo <= hi)
+ {
+ int md = (lo + hi) / 2;
+ entry = index->fetch (md);
+ int cmp = strcmp (entry->key, key);
+ if (cmp < 0)
+ lo = md + 1;
+ else if (cmp > 0)
+ hi = md - 1;
+ else
+ {
+ hashTable[idx] = entry;
+ return entry->val;
+ }
+ }
+ return (Value_t) 0;
+}
+
+template <typename Value_t>
+Value_t
+StringMap<Value_t>::get (const char *key, typename Map<const char*,
+ Value_t>::Relation rel)
+{
+ if (rel != Map<const char*, Value_t>::REL_EQ)
+ return (Value_t) 0;
+ return get (key);
+}
+
+template <typename Value_t>
+Value_t
+StringMap<Value_t>::remove (const char*)
+{
+ // Not implemented
+ if (1)
+ assert (0);
+ return (Value_t) 0;
+}
+
+template <typename Value_t>
+Vector<Value_t> *
+StringMap<Value_t>::values ()
+{
+ Vector<Value_t> *vals = new Vector<Value_t>(entries);
+ for (int i = 0; i < entries; ++i)
+ {
+ Entry *entry = index->fetch (i);
+ vals->append (entry->val);
+ }
+ return vals;
+}
+
+template <typename Value_t>
+Vector<const char*> *
+StringMap<Value_t>::keySet ()
+{
+ Vector<const char*> *keys = new Vector<const char*>(entries);
+ for (int i = 0; i < entries; ++i)
+ {
+ Entry *entry = index->fetch (i);
+ keys->append (entry->key);
+ }
+ return keys;
+}
+
+#endif
diff --git a/gprofng/src/Table.cc b/gprofng/src/Table.cc
new file mode 100644
index 00000000000..afe44bd0412
--- /dev/null
+++ b/gprofng/src/Table.cc
@@ -0,0 +1,1687 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <stdio.h>
+
+#include "IndexMap2D.h"
+#include "DbeSession.h"
+#include "FilterExp.h"
+#include "Table.h"
+#include "util.h"
+#include "i18n.h"
+
+char *
+get_prof_data_type_name (int t)
+{
+ switch (t)
+ {
+ case DATA_SAMPLE: return NTXT("PROFDATA_TYPE_SAMPLE");
+ case DATA_GCEVENT: return NTXT("PROFDATA_TYPE_GCEVENT");
+ case DATA_HEAPSZ: return NTXT("PROFDATA_TYPE_HEAPSZ");
+ case DATA_CLOCK: return NTXT("PROFDATA_TYPE_CLOCK");
+ case DATA_HWC: return NTXT("PROFDATA_TYPE_HWC");
+ case DATA_SYNCH: return NTXT("PROFDATA_TYPE_SYNCH");
+ case DATA_HEAP: return NTXT("PROFDATA_TYPE_HEAP");
+ case DATA_OMP: return NTXT("PROFDATA_TYPE_OMP");
+ case DATA_OMP2: return NTXT("PROFDATA_TYPE_OMP2");
+ case DATA_OMP3: return NTXT("PROFDATA_TYPE_OMP3");
+ case DATA_OMP4: return NTXT("PROFDATA_TYPE_OMP4");
+ case DATA_OMP5: return NTXT("PROFDATA_TYPE_OMP5");
+ case DATA_IOTRACE: return NTXT("PROFDATA_TYPE_IOTRACE");
+ default: abort ();
+ return NTXT ("PROFDATA_TYPE_ERROR");
+ }
+}
+
+char *
+get_prof_data_type_uname (int t)
+{
+ switch (t)
+ {
+ case DATA_SAMPLE: return GTXT("Process-wide Resource Utilization");
+ case DATA_GCEVENT: return GTXT("Java Garbage Collection Events");
+ case DATA_HEAPSZ: return GTXT("Heap Size");
+ case DATA_CLOCK: return GTXT("Clock Profiling");
+ case DATA_HWC: return GTXT("HW Counter Profiling");
+ case DATA_SYNCH: return GTXT("Synchronization Tracing");
+ case DATA_HEAP: return GTXT("Heap Tracing");
+ case DATA_OMP: return GTXT("OpenMP Profiling");
+ case DATA_OMP2: return GTXT("OpenMP Profiling");
+ case DATA_OMP3: return GTXT("OpenMP Profiling");
+ case DATA_OMP4: return GTXT("OpenMP Profiling");
+ case DATA_OMP5: return GTXT("OpenMP Profiling");
+ case DATA_IOTRACE: return GTXT("IO Tracing");
+ default: abort ();
+ return NTXT ("PROFDATA_TYPE_ERROR");
+ }
+}
+
+int assert_level = 0; // set to 1 to bypass problematic asserts
+
+#define ASSERT_SKIP (assert_level)
+
+/*
+ * class PropDescr
+ */
+
+PropDescr::PropDescr (int _propID, const char *_name)
+{
+ propID = _propID;
+ name = strdup (_name ? _name : NTXT (""));
+ uname = NULL;
+ vtype = TYPE_NONE;
+ flags = 0;
+ stateNames = NULL;
+ stateUNames = NULL;
+}
+
+PropDescr::~PropDescr ()
+{
+ free (name);
+ free (uname);
+ if (stateNames)
+ {
+ stateNames->destroy ();
+ delete stateNames;
+ }
+ if (stateUNames)
+ {
+ stateUNames->destroy ();
+ delete stateUNames;
+ }
+}
+
+void
+PropDescr::addState (int value, const char *stname, const char *stuname)
+{
+ if (value < 0 || stname == NULL)
+ return;
+ if (stateNames == NULL)
+ stateNames = new Vector<char*>;
+ stateNames->store (value, strdup (stname));
+ if (stateUNames == NULL)
+ stateUNames = new Vector<char*>;
+ stateUNames->store (value, strdup (stuname));
+}
+
+char *
+PropDescr::getStateName (int value)
+{
+ if (stateNames && value >= 0 && value < stateNames->size ())
+ return stateNames->fetch (value);
+ return NULL;
+}
+
+char *
+PropDescr::getStateUName (int value)
+{
+ if (stateUNames && value >= 0 && value < stateUNames->size ())
+ return stateUNames->fetch (value);
+ return NULL;
+}
+
+/*
+ * class FieldDescr
+ */
+
+FieldDescr::FieldDescr (int _propID, const char *_name)
+{
+ propID = _propID;
+ name = _name ? strdup (_name) : NULL;
+ offset = 0;
+ vtype = TYPE_NONE;
+ format = NULL;
+}
+
+FieldDescr::~FieldDescr ()
+{
+ free (name);
+ free (format);
+}
+
+/*
+ * class PacketDescriptor
+ */
+
+PacketDescriptor::PacketDescriptor (DataDescriptor *_ddscr)
+{
+ ddscr = _ddscr;
+ fields = new Vector<FieldDescr*>;
+}
+
+PacketDescriptor::~PacketDescriptor ()
+{
+ fields->destroy ();
+ delete fields;
+}
+
+void
+PacketDescriptor::addField (FieldDescr *fldDscr)
+{
+ if (fldDscr == NULL)
+ return;
+ fields->append (fldDscr);
+}
+
+/*
+ * class Data
+ */
+
+/* Check compatibility between Datum and Data */
+static void
+checkCompatibility (VType_type v1, VType_type v2)
+{
+ switch (v1)
+ {
+ case TYPE_NONE:
+ case TYPE_STRING:
+ case TYPE_DOUBLE:
+ case TYPE_OBJ:
+ case TYPE_DATE:
+ assert (v1 == v2);
+ break;
+ case TYPE_INT32:
+ case TYPE_UINT32:
+ assert (v2 == TYPE_INT32 ||
+ v2 == TYPE_UINT32);
+ break;
+ case TYPE_INT64:
+ case TYPE_UINT64:
+ assert (v2 == TYPE_INT64 ||
+ v2 == TYPE_UINT64);
+ break;
+ default:
+ assert (0);
+ }
+}
+
+class DataINT32 : public Data
+{
+public:
+
+ DataINT32 ()
+ {
+ data = new Vector<int32_t>;
+ }
+
+ virtual
+ ~DataINT32 ()
+ {
+ delete data;
+ }
+
+ virtual VType_type
+ type ()
+ {
+ return TYPE_INT32;
+ }
+
+ virtual void
+ reset ()
+ {
+ data->reset ();
+ }
+
+ virtual long
+ getSize ()
+ {
+ return data->size ();
+ }
+
+ virtual int
+ fetchInt (long i)
+ {
+ return (int) data->fetch (i);
+ }
+
+ virtual unsigned long long
+ fetchULong (long i)
+ {
+ return (unsigned long long) data->fetch (i);
+ }
+
+ virtual long long
+ fetchLong (long i)
+ {
+ return (long long) data->fetch (i);
+ }
+
+ virtual char *
+ fetchString (long i)
+ {
+ return dbe_sprintf (NTXT ("%d"), data->fetch (i));
+ }
+
+ virtual double
+ fetchDouble (long i)
+ {
+ return (double) data->fetch (i);
+ }
+
+ virtual void *
+ fetchObject (long)
+ {
+ assert (ASSERT_SKIP);
+ return NULL;
+ }
+
+ virtual void
+ setDatumValue (long idx, const Datum *val)
+ {
+ data->store (idx, val->i);
+ }
+
+ virtual void
+ setValue (long idx, uint64_t val)
+ {
+ data->store (idx, (int32_t) val);
+ }
+
+ virtual void
+ setObjValue (long, void*)
+ {
+ assert (ASSERT_SKIP);
+ return;
+ }
+
+ virtual int
+ cmpValues (long idx1, long idx2)
+ {
+ int32_t i1 = data->fetch (idx1);
+ int32_t i2 = data->fetch (idx2);
+ return i1 < i2 ? -1 : i1 > i2 ? 1 : 0;
+ }
+
+ virtual int
+ cmpDatumValue (long idx, const Datum *val)
+ {
+ int32_t i1 = data->fetch (idx);
+ int32_t i2 = val->i;
+ return i1 < i2 ? -1 : i1 > i2 ? 1 : 0;
+ }
+
+private:
+ Vector<int32_t> *data;
+};
+
+class DataUINT32 : public Data
+{
+public:
+
+ DataUINT32 ()
+ {
+ data = new Vector<uint32_t>;
+ }
+
+ virtual
+ ~DataUINT32 ()
+ {
+ delete data;
+ }
+
+ virtual VType_type
+ type ()
+ {
+ return TYPE_UINT32;
+ }
+
+ virtual void
+ reset ()
+ {
+ data->reset ();
+ }
+
+ virtual long
+ getSize ()
+ {
+ return data->size ();
+ }
+
+ virtual int
+ fetchInt (long i)
+ {
+ return (int) data->fetch (i);
+ }
+
+ virtual unsigned long long
+ fetchULong (long i)
+ {
+ return (unsigned long long) data->fetch (i);
+ }
+
+ virtual long long
+ fetchLong (long i)
+ {
+ return (long long) data->fetch (i);
+ }
+
+ virtual char *
+ fetchString (long i)
+ {
+ return dbe_sprintf (NTXT ("%u"), data->fetch (i));
+ }
+
+ virtual double
+ fetchDouble (long i)
+ {
+ return (double) data->fetch (i);
+ }
+
+ virtual void *
+ fetchObject (long)
+ {
+ assert (ASSERT_SKIP);
+ return NULL;
+ }
+
+ virtual void
+ setDatumValue (long idx, const Datum *val)
+ {
+ data->store (idx, val->i);
+ }
+
+ virtual void
+ setValue (long idx, uint64_t val)
+ {
+ data->store (idx, (uint32_t) val);
+ }
+
+ virtual void
+ setObjValue (long, void*)
+ {
+ assert (ASSERT_SKIP);
+ return;
+ }
+
+ virtual int
+ cmpValues (long idx1, long idx2)
+ {
+ uint32_t u1 = data->fetch (idx1);
+ uint32_t u2 = data->fetch (idx2);
+ return u1 < u2 ? -1 : u1 > u2 ? 1 : 0;
+ }
+
+ virtual int
+ cmpDatumValue (long idx, const Datum *val)
+ {
+ uint32_t u1 = data->fetch (idx);
+ uint32_t u2 = (uint32_t) val->i;
+ return u1 < u2 ? -1 : u1 > u2 ? 1 : 0;
+ }
+
+private:
+ Vector<uint32_t> *data;
+};
+
+class DataINT64 : public Data
+{
+public:
+
+ DataINT64 ()
+ {
+ data = new Vector<int64_t>;
+ }
+
+ virtual
+ ~DataINT64 ()
+ {
+ delete data;
+ }
+
+ virtual VType_type
+ type ()
+ {
+ return TYPE_INT64;
+ }
+
+ virtual void
+ reset ()
+ {
+ data->reset ();
+ }
+
+ virtual long
+ getSize ()
+ {
+ return data->size ();
+ }
+
+ virtual int
+ fetchInt (long i)
+ {
+ return (int) data->fetch (i);
+ }
+
+ virtual unsigned long long
+ fetchULong (long i)
+ {
+ return (unsigned long long) data->fetch (i);
+ }
+
+ virtual long long
+ fetchLong (long i)
+ {
+ return (long long) data->fetch (i);
+ }
+
+ virtual char *
+ fetchString (long i)
+ {
+ return dbe_sprintf (NTXT ("%lld"), (long long) data->fetch (i));
+ }
+
+ virtual double
+ fetchDouble (long i)
+ {
+ return (double) data->fetch (i);
+ }
+
+ virtual void *
+ fetchObject (long)
+ {
+ assert (ASSERT_SKIP);
+ return NULL;
+ }
+
+ virtual void
+ setDatumValue (long idx, const Datum *val)
+ {
+ data->store (idx, val->ll);
+ }
+
+ virtual void
+ setValue (long idx, uint64_t val)
+ {
+ data->store (idx, (int64_t) val);
+ }
+
+ virtual void
+ setObjValue (long, void*)
+ {
+ assert (ASSERT_SKIP);
+ return;
+ }
+
+ virtual int
+ cmpValues (long idx1, long idx2)
+ {
+ int64_t i1 = data->fetch (idx1);
+ int64_t i2 = data->fetch (idx2);
+ return i1 < i2 ? -1 : i1 > i2 ? 1 : 0;
+ }
+
+ virtual int
+ cmpDatumValue (long idx, const Datum *val)
+ {
+ int64_t i1 = data->fetch (idx);
+ int64_t i2 = val->ll;
+ return i1 < i2 ? -1 : i1 > i2 ? 1 : 0;
+ }
+
+private:
+ Vector<int64_t> *data;
+};
+
+class DataUINT64 : public Data
+{
+public:
+
+ DataUINT64 ()
+ {
+ data = new Vector<uint64_t>;
+ }
+
+ virtual
+ ~DataUINT64 ()
+ {
+ delete data;
+ }
+
+ virtual VType_type
+ type ()
+ {
+ return TYPE_UINT64;
+ }
+
+ virtual void
+ reset ()
+ {
+ data->reset ();
+ }
+
+ virtual long
+ getSize ()
+ {
+ return data->size ();
+ }
+
+ virtual int
+ fetchInt (long i)
+ {
+ return (int) data->fetch (i);
+ }
+
+ virtual unsigned long long
+ fetchULong (long i)
+ {
+ return (unsigned long long) data->fetch (i);
+ }
+
+ virtual long long
+ fetchLong (long i)
+ {
+ return (long long) data->fetch (i);
+ }
+
+ virtual char *
+ fetchString (long i)
+ {
+ return dbe_sprintf (NTXT ("%llu"), (long long) data->fetch (i));
+ }
+
+ virtual double
+ fetchDouble (long i)
+ {
+ return (double) data->fetch (i);
+ }
+
+ virtual void *
+ fetchObject (long)
+ {
+ assert (ASSERT_SKIP);
+ return NULL;
+ }
+
+ virtual void
+ setDatumValue (long idx, const Datum *val)
+ {
+ data->store (idx, val->ll);
+ }
+
+ virtual void
+ setValue (long idx, uint64_t val)
+ {
+ data->store (idx, val);
+ }
+
+ virtual void
+ setObjValue (long, void*)
+ {
+ assert (ASSERT_SKIP);
+ return;
+ }
+
+ virtual int
+ cmpValues (long idx1, long idx2)
+ {
+ uint64_t u1 = data->fetch (idx1);
+ uint64_t u2 = data->fetch (idx2);
+ return u1 < u2 ? -1 : u1 > u2 ? 1 : 0;
+ }
+
+ virtual int
+ cmpDatumValue (long idx, const Datum *val)
+ {
+ uint64_t u1 = data->fetch (idx);
+ uint64_t u2 = (uint64_t) val->ll;
+ return u1 < u2 ? -1 : u1 > u2 ? 1 : 0;
+ }
+
+private:
+ Vector<uint64_t> *data;
+};
+
+class DataOBJECT : public Data
+{
+public:
+
+ DataOBJECT ()
+ {
+ dtype = TYPE_OBJ;
+ data = new Vector<void*>;
+ }
+
+ DataOBJECT (VType_type _dtype)
+ {
+ dtype = _dtype;
+ data = new Vector<void*>;
+ }
+
+ virtual
+ ~DataOBJECT ()
+ {
+ delete data;
+ }
+
+ virtual VType_type
+ type ()
+ {
+ return dtype;
+ }
+
+ virtual void
+ reset ()
+ {
+ data->reset ();
+ }
+
+ virtual long
+ getSize ()
+ {
+ return data->size ();
+ }
+
+ virtual int
+ fetchInt (long)
+ {
+ assert (ASSERT_SKIP);
+ return 0;
+ }
+
+ virtual unsigned long long
+ fetchULong (long)
+ {
+ assert (ASSERT_SKIP);
+ return 0LL;
+ }
+
+ virtual long long
+ fetchLong (long)
+ {
+ assert (ASSERT_SKIP);
+ return 0LL;
+ }
+
+ virtual char *
+ fetchString (long i)
+ {
+ return dbe_sprintf (NTXT ("%lu"), (unsigned long) data->fetch (i));
+ }
+
+ virtual double
+ fetchDouble (long)
+ {
+ assert (ASSERT_SKIP);
+ return 0.0;
+ }
+
+ virtual void *
+ fetchObject (long i)
+ {
+ return data->fetch (i);
+ }
+
+ virtual void
+ setDatumValue (long idx, const Datum *val)
+ {
+ data->store (idx, val->p);
+ }
+
+ virtual void
+ setValue (long, uint64_t)
+ {
+ assert (ASSERT_SKIP);
+ return;
+ }
+
+ virtual void
+ setObjValue (long idx, void *p)
+ {
+ data->store (idx, p);
+ }
+
+ virtual int
+ cmpValues (long, long)
+ {
+ return 0;
+ }
+
+ virtual int
+ cmpDatumValue (long, const Datum *)
+ {
+ return 0;
+ }
+
+private:
+ VType_type dtype;
+ Vector<void*> *data;
+};
+
+class DataSTRING : public Data
+{
+public:
+
+ DataSTRING ()
+ {
+ data = new Vector<char*>;
+ }
+
+ virtual
+ ~DataSTRING ()
+ {
+ data->destroy ();
+ delete data;
+ }
+
+ virtual VType_type
+ type ()
+ {
+ return TYPE_STRING;
+ }
+
+ virtual void
+ reset ()
+ {
+ data->reset ();
+ }
+
+ virtual long
+ getSize ()
+ {
+ return data->size ();
+ }
+
+ virtual int
+ fetchInt (long)
+ {
+ return 0;
+ }
+
+ virtual unsigned long long
+ fetchULong (long)
+ {
+ return 0LL;
+ }
+
+ virtual long long
+ fetchLong (long)
+ {
+ return 0LL;
+ }
+
+ virtual char *
+ fetchString (long i)
+ {
+ return strdup (data->fetch (i));
+ }
+
+ virtual double
+ fetchDouble (long)
+ {
+ return 0.0;
+ }
+
+ virtual void *
+ fetchObject (long i)
+ {
+ return data->fetch (i);
+ }
+
+ virtual void
+ setDatumValue (long idx, const Datum *val)
+ {
+ data->store (idx, val->l);
+ }
+
+ virtual void
+ setValue (long, uint64_t)
+ {
+ return;
+ }
+
+ virtual void
+ setObjValue (long idx, void *p)
+ {
+ data->store (idx, (char*) p);
+ }
+
+ virtual int
+ cmpValues (long, long)
+ {
+ return 0;
+ }
+
+ virtual int
+ cmpDatumValue (long, const Datum *)
+ {
+ return 0;
+ }
+
+private:
+ Vector<char*> *data;
+};
+
+class DataDOUBLE : public Data
+{
+public:
+
+ DataDOUBLE ()
+ {
+ data = new Vector<double>;
+ }
+
+ virtual
+ ~DataDOUBLE ()
+ {
+ delete data;
+ }
+
+ virtual VType_type
+ type ()
+ {
+ return TYPE_DOUBLE;
+ }
+
+ virtual void
+ reset ()
+ {
+ data->reset ();
+ }
+
+ virtual long
+ getSize ()
+ {
+ return data->size ();
+ }
+
+ virtual int
+ fetchInt (long i)
+ {
+ return (int) data->fetch (i);
+ }
+
+ virtual unsigned long long
+ fetchULong (long i)
+ {
+ return (unsigned long long) data->fetch (i);
+ }
+
+ virtual long long
+ fetchLong (long i)
+ {
+ return (long long) data->fetch (i);
+ }
+
+ virtual char *
+ fetchString (long i)
+ {
+ return dbe_sprintf (NTXT ("%f"), data->fetch (i));
+ }
+
+ virtual double
+ fetchDouble (long i)
+ {
+ return data->fetch (i);
+ }
+
+ virtual void
+ setDatumValue (long idx, const Datum *val)
+ {
+ data->store (idx, val->d);
+ }
+
+ virtual void
+ setValue (long idx, uint64_t val)
+ {
+ data->store (idx, (double) val);
+ }
+
+ virtual void
+ setObjValue (long, void*)
+ {
+ return;
+ }
+
+ virtual void *
+ fetchObject (long)
+ {
+ return NULL;
+ }
+
+ virtual int
+ cmpValues (long idx1, long idx2)
+ {
+ double d1 = data->fetch (idx1);
+ double d2 = data->fetch (idx2);
+ return d1 < d2 ? -1 : d1 > d2 ? 1 : 0;
+ }
+
+ virtual int
+ cmpDatumValue (long idx, const Datum *val)
+ {
+ double d1 = data->fetch (idx);
+ double d2 = val->d;
+ return d1 < d2 ? -1 : d1 > d2 ? 1 : 0;
+ }
+
+private:
+ Vector<double> *data;
+};
+
+Data *
+Data::newData (VType_type vtype)
+{
+ switch (vtype)
+ {
+ case TYPE_INT32:
+ return new DataINT32;
+ case TYPE_UINT32:
+ return new DataUINT32;
+ case TYPE_INT64:
+ return new DataINT64;
+ case TYPE_UINT64:
+ return new DataUINT64;
+ case TYPE_OBJ:
+ return new DataOBJECT;
+ case TYPE_STRING:
+ return new DataSTRING;
+ case TYPE_DOUBLE:
+ return new DataDOUBLE;
+ default:
+ return NULL;
+ }
+}
+
+/*
+ * class DataDescriptor
+ */
+DataDescriptor::DataDescriptor (int _id, const char *_name, const char *_uname,
+ int _flags)
+{
+ isMaster = true;
+ id = _id;
+ name = _name ? strdup (_name) : strdup (NTXT (""));
+ uname = _uname ? strdup (_uname) : strdup (NTXT (""));
+ flags = _flags;
+
+ // master data, shared with reference copies:
+ master_size = 0;
+ master_resolveFrameInfoDone = false;
+ props = new Vector<PropDescr*>;
+ data = new Vector<Data*>;
+ setsTBR = new Vector<Vector<long long>*>;
+
+ // master references point to self:
+ ref_size = &master_size;
+ ref_resolveFrameInfoDone = &master_resolveFrameInfoDone;
+}
+
+DataDescriptor::DataDescriptor (int _id, const char *_name, const char *_uname,
+ DataDescriptor* dDscr)
+{
+ isMaster = false;
+ id = _id;
+ name = _name ? strdup (_name) : strdup (NTXT (""));
+ uname = _uname ? strdup (_uname) : strdup (NTXT (""));
+ flags = dDscr->flags;
+
+ // references point to master DataDescriptor
+ ref_size = &dDscr->master_size;
+ ref_resolveFrameInfoDone = &dDscr->master_resolveFrameInfoDone;
+ props = dDscr->props;
+ data = dDscr->data;
+ setsTBR = dDscr->setsTBR;
+
+ // data that should never be accessed in reference copy
+ master_size = -1;
+ master_resolveFrameInfoDone = false;
+}
+
+DataDescriptor::~DataDescriptor ()
+{
+ free (name);
+ free (uname);
+ if (!isMaster)
+ return;
+ props->destroy ();
+ delete props;
+ data->destroy ();
+ delete data;
+ setsTBR->destroy ();
+ delete setsTBR;
+}
+
+void
+DataDescriptor::reset ()
+{
+ if (!isMaster)
+ return;
+ for (int i = 0; i < data->size (); i++)
+ {
+ Data *d = data->fetch (i);
+ if (d != NULL)
+ d->reset ();
+ Vector<long long> *set = setsTBR->fetch (i);
+ if (set != NULL)
+ set->reset ();
+ }
+ master_size = 0;
+}
+
+PropDescr *
+DataDescriptor::getProp (int prop_id)
+{
+ for (int i = 0; i < props->size (); i++)
+ {
+ PropDescr *propDscr = props->fetch (i);
+ if (propDscr->propID == prop_id)
+ return propDscr;
+ }
+ return NULL;
+}
+
+Data *
+DataDescriptor::getData (int prop_id)
+{
+ if (prop_id < 0 || prop_id >= data->size ())
+ return NULL;
+ return data->fetch (prop_id);
+}
+
+void
+DataDescriptor::addProperty (PropDescr *propDscr)
+{
+ if (propDscr == NULL)
+ return;
+ if (propDscr->propID < 0)
+ return;
+ PropDescr *oldProp = getProp (propDscr->propID);
+ if (oldProp != NULL)
+ {
+ checkCompatibility (propDscr->vtype, oldProp->vtype); //YXXX depends on experiment correctness
+ delete propDscr;
+ return;
+ }
+ props->append (propDscr);
+ data->store (propDscr->propID, Data::newData (propDscr->vtype));
+ setsTBR->store (propDscr->propID, NULL);
+}
+
+long
+DataDescriptor::addRecord ()
+{
+ if (!isMaster)
+ return -1;
+ return master_size++;
+}
+
+static void
+checkEntity (Vector<long long> *set, long long val)
+{
+ // Binary search
+ int lo = 0;
+ int hi = set->size () - 1;
+ while (lo <= hi)
+ {
+ int md = (lo + hi) / 2;
+ long long ent = set->fetch (md);
+ if (ent < val)
+ lo = md + 1;
+ else if (ent > val)
+ hi = md - 1;
+ else
+ return;
+ }
+ set->insert (lo, val);
+}
+
+void
+DataDescriptor::setDatumValue (int prop_id, long idx, const Datum *val)
+{
+ if (idx >= *ref_size)
+ return;
+ Data *d = getData (prop_id);
+ if (d != NULL)
+ {
+ VType_type datum_type = val->type;
+ VType_type data_type = d->type ();
+ checkCompatibility (datum_type, data_type);
+ d->setDatumValue (idx, val);
+ Vector<long long> *set = setsTBR->fetch (prop_id);
+ if (set != NULL)// Sets are maintained
+ checkEntity (set, d->fetchLong (idx));
+ }
+}
+
+void
+DataDescriptor::setValue (int prop_id, long idx, uint64_t val)
+{
+ if (idx >= *ref_size)
+ return;
+ Data *d = getData (prop_id);
+ if (d != NULL)
+ {
+ d->setValue (idx, val);
+ Vector<long long> *set = setsTBR->fetch (prop_id);
+ if (set != NULL)// Sets are maintained
+ checkEntity (set, d->fetchLong (idx));
+ }
+}
+
+void
+DataDescriptor::setObjValue (int prop_id, long idx, void *val)
+{
+ if (idx >= *ref_size)
+ return;
+ Data *d = getData (prop_id);
+ if (d != NULL)
+ d->setObjValue (idx, val);
+}
+
+DataView *
+DataDescriptor::createView ()
+{
+ return new DataView (this);
+}
+
+DataView *
+DataDescriptor::createImmutableView ()
+{
+ return new DataView (this, DataView::DV_IMMUTABLE);
+}
+
+DataView *
+DataDescriptor::createExtManagedView ()
+{
+ return new DataView (this, DataView::DV_EXT_MANAGED);
+}
+
+int
+DataDescriptor::getIntValue (int prop_id, long idx)
+{
+ Data *d = getData (prop_id);
+ if (d == NULL || idx >= d->getSize ())
+ return 0;
+ return d->fetchInt (idx);
+}
+
+unsigned long long
+DataDescriptor::getULongValue (int prop_id, long idx)
+{
+ Data *d = getData (prop_id);
+ if (d == NULL || idx >= d->getSize ())
+ return 0L;
+ return d->fetchULong (idx);
+}
+
+long long
+DataDescriptor::getLongValue (int prop_id, long idx)
+{
+ Data *d = getData (prop_id);
+ if (d == NULL || idx >= d->getSize ())
+ return 0L;
+ return d->fetchLong (idx);
+}
+
+void *
+DataDescriptor::getObjValue (int prop_id, long idx)
+{
+ Data *d = getData (prop_id);
+ if (d == NULL || idx >= d->getSize ())
+ return NULL;
+ return d->fetchObject (idx);
+}
+
+static int
+pcmp (const void *p1, const void *p2, const void *arg)
+{
+ long idx1 = *(long*) p1; // index1 into Data
+ long idx2 = *(long*) p2; // index2 into Data
+ for (Data **dsorted = (Data**) arg; *dsorted != DATA_SORT_EOL; dsorted++)
+ {
+ Data *data = *dsorted;
+ if (data == NULL)// sort property not in this data, skip this criteria
+ continue;
+ int res = data->cmpValues (idx1, idx2);
+ if (res)
+ return res;
+ }
+ // Provide stable sort
+ return idx1 < idx2 ? -1 : idx1 > idx2 ? 1 : 0;
+}
+
+Vector<long long> *
+DataDescriptor::getSet (int prop_id)
+{
+ if (prop_id < 0 || prop_id >= setsTBR->size ())
+ return NULL;
+ Vector<long long> *set = setsTBR->fetch (prop_id);
+ if (set != NULL)
+ return set;
+
+ Data *d = getData (prop_id);
+ if (d == NULL)
+ return NULL;
+ set = new Vector<long long>;
+ for (long i = 0; i<*ref_size; ++i)
+ checkEntity (set, d->fetchLong (i));
+ setsTBR->store (prop_id, set);
+
+ return set;
+}
+
+/*
+ * class DataView
+ */
+DataView::DataView (DataDescriptor *_ddscr)
+{
+ init (_ddscr, DV_NORMAL);
+}
+
+DataView::DataView (DataDescriptor *_ddscr, DataViewType _type)
+{
+ init (_ddscr, _type);
+}
+
+void
+DataView::init (DataDescriptor *_ddscr, DataViewType _type)
+{
+ ddscr = _ddscr;
+ type = _type;
+ switch (type)
+ {
+ case DV_IMMUTABLE:
+ ddsize = ddscr->getSize ();
+ index = NULL;
+ break;
+ case DV_NORMAL:
+ case DV_EXT_MANAGED:
+ ddsize = 0;
+ index = new Vector<long>;
+ break;
+ }
+ for (int ii = 0; ii < (MAX_SORT_DIMENSIONS + 1); ii++)
+ sortedBy[ii] = DATA_SORT_EOL;
+ filter = NULL;
+}
+
+DataView::~DataView ()
+{
+ delete filter;
+ delete index;
+}
+
+void
+DataView::appendDataDescriptorId (long pkt_id /* ddscr index */)
+{
+ if (type != DV_EXT_MANAGED)
+ return; // updates allowed only on externally managed DataViews
+ long curr_ddsize = ddscr->getSize ();
+ if (pkt_id < 0 || pkt_id >= curr_ddsize)
+ return; // error!
+ index->append (pkt_id);
+}
+
+void
+DataView::setDataDescriptorValue (int prop_id, long pkt_id, uint64_t val)
+{
+ ddscr->setValue (prop_id, pkt_id, val);
+}
+
+long long
+DataView::getDataDescriptorValue (int prop_id, long pkt_id)
+{
+ return ddscr->getLongValue (prop_id, pkt_id);
+}
+
+Vector<PropDescr*>*
+DataView::getProps ()
+{
+ return ddscr->getProps ();
+};
+
+PropDescr*
+DataView::getProp (int prop_id)
+{
+ return ddscr->getProp (prop_id);
+};
+
+void
+DataView::filter_in_chunks (fltr_dbe_ctx *dctx)
+{
+ Expression::Context *e_ctx = new Expression::Context (dctx->fltr->ctx->dbev, dctx->fltr->ctx->exp);
+ Expression *n_expr = dctx->fltr->expr->copy ();
+ bool noParFilter = dctx->fltr->noParFilter;
+ FilterExp *nFilter = new FilterExp (n_expr, e_ctx, noParFilter);
+ long iter = dctx->begin;
+ long end = dctx->end;
+ long orig_ddsize = dctx->orig_ddsize;
+ while (iter < end)
+ {
+ nFilter->put (dctx->tmpView, iter);
+ if (nFilter->passes ())
+ dctx->idxArr[iter - orig_ddsize] = 1;
+ iter += 1;
+ }
+ delete nFilter;
+}
+
+bool
+DataView::checkUpdate ()
+{
+ long newSize = ddscr->getSize ();
+ if (ddsize == newSize)
+ return false;
+ if (index == NULL)
+ return false;
+ if (type == DV_EXT_MANAGED)
+ return false;
+ bool updated = false;
+ if (filter)
+ {
+ DataView *tmpView = ddscr->createImmutableView ();
+ assert (tmpView->getSize () == newSize);
+ while (ddsize < newSize)
+ {
+ filter->put (tmpView, ddsize);
+ if (filter->passes ())
+ index->append (ddsize);
+ ddsize += 1;
+ }
+ delete tmpView;
+ return updated;
+ }
+ while (ddsize < newSize)
+ {
+ index->append (ddsize);
+ updated = true;
+ ddsize += 1;
+ }
+ return updated;
+}
+
+long
+DataView::getSize ()
+{
+ if (checkUpdate () && sortedBy[0] != DATA_SORT_EOL)
+ // note: after new filter is set, getSize() incurs cost of
+ // sorting even if caller isn't interested in sort
+ index->sort ((CompareFunc) pcmp, sortedBy);
+
+ if (index == NULL)
+ return ddscr->getSize ();
+ return index->size ();
+}
+
+void
+DataView::setDatumValue (int prop_id, long idx, const Datum *val)
+{
+ ddscr->setDatumValue (prop_id, getIdByIdx (idx), val);
+}
+
+void
+DataView::setValue (int prop_id, long idx, uint64_t val)
+{
+ ddscr->setValue (prop_id, getIdByIdx (idx), val);
+}
+
+void
+DataView::setObjValue (int prop_id, long idx, void *val)
+{
+ ddscr->setObjValue (prop_id, getIdByIdx (idx), val);
+}
+
+int
+DataView::getIntValue (int prop_id, long idx)
+{
+ return ddscr->getIntValue (prop_id, getIdByIdx (idx));
+}
+
+unsigned long long
+DataView::getULongValue (int prop_id, long idx)
+{
+ return ddscr->getULongValue (prop_id, getIdByIdx (idx));
+}
+
+long long
+DataView::getLongValue (int prop_id, long idx)
+{
+ return ddscr->getLongValue (prop_id, getIdByIdx (idx));
+}
+
+void *
+DataView::getObjValue (int prop_id, long idx)
+{
+ return ddscr->getObjValue (prop_id, getIdByIdx (idx));
+}
+
+void
+DataView::sort (const int props[], int prop_count)
+{
+ if (index == NULL)
+ {
+ assert (ASSERT_SKIP);
+ return;
+ }
+ assert (prop_count >= 0 && prop_count < MAX_SORT_DIMENSIONS);
+ bool sort_changed = false; // see if sort has changed...
+ for (int ii = 0; ii <= prop_count; ii++)
+ { // sortedBy size is prop_count+1
+ Data *data;
+ if (ii == prop_count)
+ data = DATA_SORT_EOL; // special end of array marker
+ else
+ data = ddscr->getData (props[ii]);
+ if (sortedBy[ii] != data)
+ {
+ sortedBy[ii] = data;
+ sort_changed = true;
+ }
+ }
+ if (!checkUpdate () && !sort_changed)
+ return;
+ index->sort ((CompareFunc) pcmp, sortedBy);
+}
+
+void
+DataView::sort (int prop0)
+{
+ sort (&prop0, 1);
+}
+
+void
+DataView::sort (int prop0, int prop1)
+{
+ int props[2] = {prop0, prop1};
+ sort (props, 2);
+}
+
+void
+DataView::sort (int prop0, int prop1, int prop2)
+{
+ int props[3] = {prop0, prop1, prop2};
+ sort (props, 3);
+}
+
+void
+DataView::setFilter (FilterExp *f)
+{
+ if (index == NULL)
+ {
+ assert (ASSERT_SKIP);
+ return;
+ }
+ delete filter;
+ filter = f;
+ index->reset ();
+ ddsize = 0;
+ checkUpdate ();
+}
+
+long
+DataView::getIdByIdx (long idx)
+{
+ if (index == NULL)
+ return idx;
+ return index->fetch (idx);
+}
+
+static int
+tvalcmp (long data_id, const Datum valColumns[], Data *sortedBy[])
+{
+ for (int ii = 0; ii < MAX_SORT_DIMENSIONS; ii++)
+ {
+ if (sortedBy[ii] == DATA_SORT_EOL)
+ break;
+ Data *d = sortedBy[ii];
+ if (d == NULL)// property doesn't exist in data; compare always matches
+ continue;
+ const Datum *tvalue = &valColumns[ii];
+ int res = d->cmpDatumValue (data_id, tvalue);
+ if (res)
+ return res;
+ }
+ return 0;
+}
+
+static void
+checkSortTypes (const Datum valColumns[], Data *sortedBy[])
+{
+#ifndef NDEBUG
+ for (int ii = 0; ii < MAX_SORT_DIMENSIONS; ii++)
+ {
+ if (sortedBy[ii] == DATA_SORT_EOL)
+ break;
+ Data *d = sortedBy[ii];
+ if (d == NULL)// property doesn't exist in data; compare always matches
+ continue;
+ VType_type datum_type = valColumns[ii].type;
+ VType_type data_type = d->type ();
+ checkCompatibility (datum_type, data_type);
+ }
+#endif
+}
+
+bool
+DataView::idxRootDimensionsMatch (long idx, const Datum valColumns[])
+{
+ // compares idx vs. valColumns[] - If all dimensions match
+ // (except sort leaf), then the leaf value is valid => return true.
+ // Otherwise, return false.
+ checkSortTypes (valColumns, sortedBy);
+ if (idx < 0 || idx >= index->size ()) // fell off end of array
+ return false;
+ long data_id = index->fetch (idx);
+
+ // we will check all dimensions for a match except the "leaf" dimension
+ for (int ii = 0; ii < (MAX_SORT_DIMENSIONS - 1); ii++)
+ {
+ if (sortedBy[ii + 1] == DATA_SORT_EOL)
+ break; // we are at leaf dimension, don't care about it's value
+ if (sortedBy[ii] == DATA_SORT_EOL)
+ break; // end of list
+ Data *d = sortedBy[ii];
+ if (d == NULL) // property doesn't exist in data; compare always matches
+ continue;
+ const Datum *tvalue = &valColumns[ii];
+ int res = d->cmpDatumValue (data_id, tvalue);
+ if (res)
+ return false;
+ }
+ return true;
+}
+
+long
+DataView::getIdxByVals (const Datum valColumns[], Relation rel)
+{
+ // checks sortedBy[] columns for match; relation only used on last column
+ return getIdxByVals (valColumns, rel, -1, -1);
+}
+
+long
+DataView::getIdxByVals (const Datum valColumns[], Relation rel,
+ long minIdx, long maxIdx)
+{
+ // checks sortedBy[] columns for match; relation only used on last column
+ checkSortTypes (valColumns, sortedBy);
+ if (index == NULL || sortedBy[0] == DATA_SORT_EOL)
+ return -1;
+
+ long lo;
+ if (minIdx < 0)
+ lo = 0;
+ else
+ lo = minIdx;
+
+ long hi;
+ if (maxIdx < 0 || maxIdx >= index->size ())
+ hi = index->size () - 1;
+ else
+ hi = maxIdx;
+
+ long md = -1;
+ while (lo <= hi)
+ {
+ md = (lo + hi) / 2;
+ int cmp = tvalcmp (index->fetch (md), valColumns, sortedBy);
+ if (cmp < 0)
+ {
+ lo = md + 1;
+ continue;
+ }
+ else if (cmp > 0)
+ {
+ hi = md - 1;
+ continue;
+ }
+
+ // cmp == 0, we have an exact match
+ switch (rel)
+ {
+ case REL_LT:
+ hi = md - 1; // continue searching
+ break;
+ case REL_GT:
+ lo = md + 1; // continue searching
+ break;
+ case REL_LTEQ:
+ case REL_GTEQ:
+ case REL_EQ:
+ // note: "md" may not be deterministic if multiple matches exist
+ return md; // a match => done.
+ }
+ }
+
+ // no exact match found
+ switch (rel)
+ {
+ case REL_LT:
+ case REL_LTEQ:
+ md = hi;
+ break;
+ case REL_GT:
+ case REL_GTEQ:
+ md = lo;
+ break;
+ case REL_EQ:
+ return -1;
+ }
+ if (idxRootDimensionsMatch (md, valColumns))
+ return md;
+ return -1;
+}
+
+void
+DataView::removeDbeViewIdx (long idx)
+{
+ index->remove (idx);
+}
+
diff --git a/gprofng/src/Table.h b/gprofng/src/Table.h
new file mode 100644
index 00000000000..48ce06a4854
--- /dev/null
+++ b/gprofng/src/Table.h
@@ -0,0 +1,618 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _TABLE_H
+#define _TABLE_H
+
+#include "vec.h"
+#include "Map2D.h"
+
+#include "dbe_structs.h"
+
+class FilterExp;
+struct PropDescr;
+struct FieldDescr;
+class PacketDescriptor;
+class DataDescriptor;
+class DataView;
+
+// Note: order must match VTYPE_TYPE_NAMES, below
+
+enum VType_type
+{
+ TYPE_NONE,
+ TYPE_INT32,
+ TYPE_UINT32,
+ TYPE_INT64,
+ TYPE_UINT64,
+ TYPE_STRING,
+ TYPE_DOUBLE,
+ TYPE_OBJ,
+ TYPE_DATE, // Used in FieldDescr only, mapped to TYPE_UINT64 in PropDescr
+ TYPE_BOOL, // Used only to describe filter props
+ TYPE_ENUM, // Used only to describe filter props
+
+ TYPE_LAST
+};
+
+#define VTYPE_TYPE_NAMES \
+{ \
+ NTXT("NONE"), \
+ NTXT("INT32"), \
+ NTXT("UINT32"), \
+ NTXT("INT64"), \
+ NTXT("UINT64"), \
+ NTXT("STRING"), \
+ NTXT("DOUBLE"), \
+ NTXT("OBJECT"), \
+ NTXT("DATE"), \
+ NTXT("BOOL"), \
+ NTXT("ENUM") \
+}
+
+// Note: order must match PROFDATA_TYPE_NAMES and PROFDATA_TYPE_UNAMES, below
+
+enum ProfData_type
+{ // a.k.a "data_id" (not the same as Pckt_type "kind")
+ DATA_SAMPLE, // Traditional collect "Samples"
+ DATA_GCEVENT, // Java Garbage Collection events
+ DATA_HEAPSZ, // heap size tracking based on heap tracing data
+ DATA_CLOCK, // clock profiling data
+ DATA_HWC, // hardware counter profiling data
+ DATA_SYNCH, // synchronization tracing data
+ DATA_HEAP, // heap tracing data
+ DATA_MPI, // MPI tracing data
+ DATA_RACE, // data race detection data
+ DATA_DLCK, // deadlock detection data
+ DATA_OMP, // OpenMP profiling data (fork events)
+ DATA_OMP2, // OpenMP profiling data (enter thread events)
+ DATA_OMP3, // OpenMP profiling data (enter task events)
+ DATA_OMP4, // OpenMP profiling data (parreg descriptions)
+ DATA_OMP5, // OpenMP profiling data (task descriptions)
+ DATA_IOTRACE, // IO tracing data
+ DATA_LAST
+};
+
+extern char *get_prof_data_type_name (int t);
+extern char *
+get_prof_data_type_uname (int t);
+
+enum Prop_type
+{
+ PROP_NONE,
+ // commonly used properties (libcollector modules, er_print)
+ PROP_ATSTAMP, // hrtime_t, Filter: system HRT timestamp;
+ // "Absolute TSTAMP"
+ PROP_ETSTAMP, // hrtime_t, Filter: nanoseconds from subexperiment start;
+ // "subExperiment TSTAMP"
+ PROP_TSTAMP, // hrtime_t, Packet: system HRT timestamp
+ // Filter: nanoseconds from founder start
+ PROP_THRID, // mapped to uint32_t by readPacket
+ PROP_LWPID, // mapped to uint32_t by readPacket
+ PROP_CPUID, // mapped to uint32_t by readPacket
+ PROP_FRINFO, // uint64_t frinfo
+ PROP_EVT_TIME, // hrtime_t Filter: Time delta
+ // If TSTAMP taken at end of event, EVT_TIME will be positive
+ // If TSTAMP taken at start of event, EVT_TIME will be negative
+ // Note: clock and hwc profile events set EVT_TIME=0
+ // except Solaris Microstate events where NTICK>1:
+ // These will use EVT_TIME=(NTICK-1)*<tick duration>
+
+ // DATA_SAMPLE
+ PROP_SAMPLE, // uint64_t sample number
+ PROP_SMPLOBJ, // Sample*
+
+ // DATA_GCEVENT
+ PROP_GCEVENT, // uint64_t event id
+ PROP_GCEVENTOBJ, // GCEvent*
+
+ // DATA_CLOCK
+ PROP_MSTATE, // unsigned ProfilePacket::mstate
+ PROP_NTICK, // unsigned ProfilePacket::value
+ PROP_OMPSTATE, // int ProfilePacket::ompstate
+ PROP_MPISTATE, // int ProfilePacket::mpistate
+
+ // DATA_SAMPLE // see PrUsage class, see PROP_MSTATE - TBR?
+ PROP_UCPU,
+ PROP_SCPU,
+ PROP_TRAP,
+ PROP_TFLT,
+ PROP_DFLT,
+ PROP_KFLT,
+ PROP_ULCK,
+ PROP_TSLP,
+ PROP_WCPU,
+ PROP_TSTP,
+
+ // DATA_SYNCH
+ PROP_SRQST, // hrtime_t SyncPacket::requested
+ PROP_SOBJ, // Vaddr SyncPacket::objp
+
+ // DATA_HWC
+ PROP_HWCTAG, // uint32_t HWCntrPacket::tag;
+ PROP_HWCINT, // uint64_t HWCntrPacket::interval
+ PROP_VADDR, // Vaddr HWCntrPacket::dbeVA->eaddr
+ PROP_PADDR, // Vaddr HWCntrPacket::dbePA->eaddr
+ PROP_HWCDOBJ, // DataObject* HWCntrPacket::dobj
+ PROP_VIRTPC, // Vaddr HWCntrPacket::eventVPC
+ PROP_PHYSPC, // Vaddr HWCntrPacket::eventPPC
+ PROP_EA_PAGESIZE, // uint32_t HWCntrPacket::ea_pagesize
+ PROP_PC_PAGESIZE, // uint32_t HWCntrPacket::pc_pagesize
+ PROP_EA_LGRP, // uint32_t HWCntrPacket::ea_lgrp
+ PROP_PC_LGRP, // uint32_t HWCntrPacket::pc_lgrp
+ PROP_LWP_LGRP_HOME, // uint32_t HWCntrPacket::lwp_lgrp_home
+ PROP_PS_LGRP_HOME, // uint32_t HWCntrPacket::ps_lgrp_home
+ PROP_MEM_LAT, // uint64_t HWCntrPacket::latency
+ PROP_MEM_SRC, // uint64_t HWCntrPacket::data_source
+
+ // DATA_HEAP
+ PROP_HTYPE, // Heap_type HeapPacket::mtype
+ PROP_HSIZE, // Size HeapPacket::size (bytes alloc'd by this event)
+ PROP_HVADDR, // Vaddr HeapPacket::vaddr
+ PROP_HOVADDR, // Vaddr HeapPacket::ovaddr
+ PROP_HLEAKED, // Size HeapPacket::leaked (net bytes leaked)
+ PROP_HMEM_USAGE, // Size heap memory usage
+ PROP_HFREED, // Size (bytes freed by this event)
+ PROP_HCUR_ALLOCS, // int64_t (net allocations running total. Recomputed after each filter)
+ PROP_HCUR_NET_ALLOC, // int64_t (net allocation for this packet. Recomputed after each filter)
+ PROP_HCUR_LEAKS, // Size (net leaks running total. Recomputed after each filter)
+
+ // DATA_IOTRACE
+ PROP_IOTYPE, // IOTrace_type IOTracePacket::iotype
+ PROP_IOFD, // int32_t IOTracePacket::fd
+ PROP_IONBYTE, // Size_type IOTracePacket::nbyte
+ PROP_IORQST, // hrtime_t IOTracePacket::requested
+ PROP_IOOFD, // int32_t IOTracePacket::ofd
+ PROP_IOFSTYPE, // FileSystem_type IOTracePacket::fstype
+ PROP_IOFNAME, // char IOTracePacket::fname
+ PROP_IOVFD, // int32_t virtual file descriptor
+
+ // DATA_MPI
+ PROP_MPITYPE, // MPI_type MPIPacket::mpitype
+ PROP_MPISCOUNT, // Size MPIPacket::scount
+ PROP_MPISBYTES, // Size MPIPacket::sbytes
+ PROP_MPIRCOUNT, // Size MPIPacket::rcount
+ PROP_MPIRBYTES, // Size MPIPacket::rbytes
+
+ // DATA_OMP*
+ PROP_CPRID, // uint64_t (Note: not same as "PROP_CPRID" below)
+ PROP_PPRID, // uint64_t OMPPacket::omp_pprid
+ PROP_TSKID, // uint64_t (Note: not same as "PROP_CPRID" below)
+ PROP_PTSKID, // uint64_t OMPPacket::omp_ptskid
+ PROP_PRPC, // uint64_t OMPPacket::omp_prpc
+
+ // DATA_RACE
+ PROP_RTYPE, // Race_type RacePacket::rtype
+ PROP_RID, // uint32_t RacePacket::id
+ PROP_RVADDR, // Vaddr RacePacket::vaddr
+ PROP_RCNT, // uint32_t RacePacket::count
+ PROP_LEAFPC, // Vaddr CommonPacket::leafpc
+
+ // DATA_DLCK
+ PROP_DID, // uint32_t DeadlockPacket::id
+ PROP_DTYPE, // Deadlock_Lock_type DeadlockPacket::lock_type
+ PROP_DLTYPE, // Deadlock_type DeadlockPacket::dl_type
+ PROP_DVADDR, // Vaddr DeadlockPacket::lock_addr
+
+ // Synthetic properties (queries only)
+ PROP_STACKID,
+ PROP_STACK, // void* Generic; mapped to M, U, or XSTACK
+ PROP_MSTACK, // void* machine stack
+ PROP_USTACK, // void* user_stack
+ PROP_XSTACK, // void* expert_stack
+ PROP_HSTACK, // void* hide_stack
+ //PROP_CPRID, // void* (Note: not same as "PROP_CPRID" above)
+ //PROP_TSKID, // void* (Note: not same as "PROP_TSKID" above)
+ PROP_JTHREAD, // JThread* CommonPacket::jthread
+ PROP_LEAF, // uint64_t stack leaf function
+ PROP_DOBJ, // "DOBJ" DataObject*
+ PROP_SAMPLE_MAP, // Map events to SAMPLE using sample's time range
+ PROP_GCEVENT_MAP, // Map events to GCEVENT using gcevent's time range
+ PROP_PID, // int unix getpid()
+ PROP_EXPID, // int Experiment->getUserExpId(), AKA process number, >=1.
+ PROP_EXPID_CMP, // int "Comparable PROP_EXPID". In compare mode, if this
+ // process has been matched to another groups' process,
+ // returns PROP_EXPID of the matching process with the
+ // lowest PROP_EXPGRID value. Otherwise returns PROP_EXPID.
+ PROP_EXPGRID, // int Comparison group number. >=0, 0 is Baseline.
+ PROP_PARREG, // "PARREG" uint64_t (see 6436500) TBR?
+ PROP_TSTAMP_LO, // hrtime_t Filter: Event's low TSTAMP
+ PROP_TSTAMP_HI, // hrtime_t Filter: Event's high TSTAMP
+ PROP_TSTAMP2, // hrtime_t Filter: End TSTAMP (TSTAMP<=TSTAMP2)
+ PROP_FREQ_MHZ, // int frequency in MHZ (for converting HWC profiling cycles to time)
+ PROP_NTICK_USEC, // hrtime_t Clock profiling interval, microseconds (PROP_NTICK * Experiment->ptimer_usec)
+ PROP_IOHEAPBYTES, // Size PROP_HSIZE or PROP_IONBYTE
+ PROP_STACKL, // void* Generic; mapped to M, U, or XSTACK for DbeLine
+ PROP_MSTACKL, // void* machine stack
+ PROP_USTACKL, // void* user_stack
+ PROP_XSTACKL, // void* expert_stack
+ PROP_STACKI, // void* Generic; mapped to M, U, or XSTACK for DbeInstr
+ PROP_MSTACKI, // void* machine stack
+ PROP_USTACKI, // void* user_stack
+ PROP_XSTACKI, // void* expert_stack
+ PROP_DDSCR_LNK, // long long index into DataDescriptor table for a related event
+ PROP_VOIDP_OBJ, // void* pointer to object containing metadata
+ PROP_LAST
+};
+
+enum Prop_flag
+{
+ PRFLAG_NOSHOW = 0x40
+};
+
+struct PropDescr
+{
+ PropDescr (int propID, const char *name);
+ virtual ~PropDescr ();
+
+ void addState (int value, const char *stname, const char *stuname);
+ char *getStateName (int value);
+ char *getStateUName (int value);
+
+ int
+ getMaxState ()
+ {
+ return stateNames ? stateNames->size () : 0;
+ }
+
+ int propID;
+ char *name;
+ char *uname;
+ VType_type vtype;
+ int flags;
+
+private:
+ Vector<char*>*stateNames;
+ Vector<char*>*stateUNames;
+};
+
+struct FieldDescr
+{
+ FieldDescr (int propID, const char *name);
+ virtual ~FieldDescr ();
+
+ int propID;
+ char *name;
+ int offset;
+ VType_type vtype;
+ char *format;
+};
+
+class PacketDescriptor
+{
+public:
+ PacketDescriptor (DataDescriptor*);
+ virtual ~PacketDescriptor ();
+
+ DataDescriptor *
+ getDataDescriptor ()
+ {
+ return ddscr;
+ }
+
+ Vector<FieldDescr*> *
+ getFields ()
+ {
+ return fields;
+ }
+
+ void addField (FieldDescr*);
+
+private:
+ DataDescriptor *ddscr;
+ Vector<FieldDescr*> *fields;
+};
+
+struct Datum
+{
+
+ void
+ setUINT32 (uint32_t vv)
+ {
+ type = TYPE_UINT32;
+ i = vv;
+ }
+
+ void
+ setUINT64 (uint64_t vv)
+ {
+ type = TYPE_UINT64;
+ ll = vv;
+ }
+
+ void
+ setSTRING (char* vv)
+ {
+ type = TYPE_STRING;
+ l = vv;
+ }
+
+ void
+ setDOUBLE (double vv)
+ {
+ type = TYPE_DOUBLE;
+ d = vv;
+ }
+
+ void
+ setOBJ (void* vv)
+ {
+ type = TYPE_OBJ;
+ p = vv;
+ }
+
+ VType_type type;
+ union
+ {
+ int i;
+ double d;
+ char *l;
+ void *p;
+ unsigned long long ll;
+ };
+};
+
+class Data
+{
+public:
+ static Data *newData (VType_type);
+
+ virtual
+ ~Data () { }
+
+ virtual VType_type
+ type ()
+ {
+ return TYPE_NONE;
+ }
+ virtual void reset () = 0;
+ virtual long getSize () = 0;
+ virtual int fetchInt (long i) = 0;
+ virtual unsigned long long fetchULong (long i) = 0;
+ virtual long long fetchLong (long i) = 0;
+ virtual char *fetchString (long i) = 0;
+ virtual double fetchDouble (long i) = 0;
+ virtual void *fetchObject (long i) = 0;
+ virtual void setDatumValue (long, const Datum*) = 0;
+ virtual void setValue (long, uint64_t) = 0;
+ virtual void setObjValue (long, void*) = 0;
+ virtual int cmpValues (long idx1, long idx2) = 0;
+ virtual int cmpDatumValue (long idx, const Datum *val) = 0;
+};
+
+enum Data_flag
+{
+ DDFLAG_NOSHOW = 0x01
+};
+
+class DataDescriptor
+{
+ /*
+ * An instance of this class stores the data packets for a specific
+ * type of profiling, for example, clock profiling.
+ *
+ * Each packet consists of values for various properties.
+ * For example, a timestamp is a property which is accessed with PROP_TSTAMP.
+ *
+ * Ideally, DataDescriptor contents are considered immutable after the
+ * data is read in. setValue() should only be used during creation.
+ * - The packets are in fixed order. This allows DataDescriptor <pkt_id>
+ * to be treated as a stable handle.
+ * - Sorting/filtering is handled by the DataView class
+ * - In the future, if we need to add the ability to append new packets,
+ * we might add a flag to show when the class is immutable and/or appendible
+ */
+public:
+
+ DataDescriptor (int id, const char* name, const char* uname, int flags = 0); // master
+ DataDescriptor (int id, const char* name, const char* uname, DataDescriptor*); // reference copy
+ ~DataDescriptor ();
+
+ // packets' descriptions
+ int
+ getId ()
+ {
+ return id;
+ }
+
+ char *
+ getName ()
+ {
+ return name;
+ }
+
+ char *
+ getUName ()
+ {
+ return uname;
+ }
+
+ Vector<PropDescr*> *
+ getProps ()
+ {
+ return props; // packet properties
+ }
+ PropDescr *getProp (int prop_id); // packet property
+
+ long
+ getSize ()
+ {
+ return *ref_size; // number of packets
+ }
+
+ long
+ getFlags ()
+ {
+ return flags;
+ }
+
+ // class to provide sorting and filtering
+ DataView *createView ();
+ DataView *createImmutableView ();
+ DataView *createExtManagedView ();
+
+ // packet property values (<pkt_id> is stable packet handle)
+ int getIntValue (int prop_id, long pkt_id);
+ unsigned long long getULongValue (int prop_id, long pkt_id);
+ long long getLongValue (int prop_id, long pkt_id);
+ void *getObjValue (int prop_id, long pkt_id);
+ Vector<long long> *getSet (int prop_id); // list of sorted, unique values
+
+ // table creation/reset
+ void addProperty (PropDescr*); // add property to all packets
+ long addRecord (); // add packet
+ Data *getData (int prop_id); // get all packets
+ void setDatumValue (int prop_id, long pkt_id, const Datum *val);
+ void setValue (int prop_id, long pkt_id, uint64_t val);
+ void setObjValue (int prop_id, long pkt_id, void *val);
+ void reset (); // remove all packets (ym: TBR?)
+
+ void
+ setResolveFrInfoDone ()
+ {
+ *ref_resolveFrameInfoDone = true;
+ }
+
+ bool
+ isResolveFrInfoDone ()
+ {
+ return *ref_resolveFrameInfoDone;
+ }
+
+
+private:
+ bool isMaster;
+ int flags; // see Data_flag enum
+ int id;
+ char *name;
+ char *uname;
+
+ // the following should only be accessed if parent==NULL
+ long master_size;
+ bool master_resolveFrameInfoDone;
+
+ // the following point to the master DataDescriptor's fields
+ long *ref_size;
+ bool *ref_resolveFrameInfoDone;
+ Vector<PropDescr*> *props;
+ Vector<Data*> *data;
+ Vector<Vector<long long>*> *setsTBR; // Sets of unique values
+};
+
+typedef struct
+{
+ long begin;
+ long end;
+ long orig_ddsize;
+ DataView *tmpView;
+ long *idxArr;
+ FilterExp *fltr;
+} fltr_dbe_ctx;
+
+class DataView
+{
+ /*
+ * Provides sorting and filtering of DataDescriptor packets
+ */
+public:
+
+ enum Relation
+ {
+ REL_LT,
+ REL_LTEQ,
+ REL_EQ,
+ REL_GTEQ,
+ REL_GT
+ };
+
+ enum DataViewType
+ {
+ DV_NORMAL, // filterable, sortable
+ DV_IMMUTABLE, // reflects exact data in DataDescriptor
+ DV_EXT_MANAGED // sortable. index[] entries managed externally.
+ };
+
+ DataView (DataDescriptor*);
+ DataView (DataDescriptor*, DataViewType);
+ virtual ~DataView ();
+
+ Vector<PropDescr*> *getProps ();
+ PropDescr *getProp (int prop_id);
+ long getSize (); // number of post-filter packets
+
+ // packet property values accessed by sort index (not DataDescriptor pkt_id)
+ int getIntValue (int prop_id, long idx);
+ unsigned long long getULongValue (int prop_id, long idx);
+ long long getLongValue (int prop_id, long idx);
+ void *getObjValue (int prop_id, long idx);
+ long getIdByIdx (long idx); // returns DataDescriptor pkt_id
+
+ // define sort/filter
+ void sort (const int props[], int prop_count);
+ void sort (int prop);
+ void sort (int prop1, int prop2);
+ void sort (int prop1, int prop2, int prop3);
+ void setFilter (FilterExp*);
+
+ // search packets
+ // - sort must already be defined
+ // - requires the user to provide all properties used in current sort.
+ // - For a match, the all but the last sort property (the "leaf")
+ // must match exactly.
+ long getIdxByVals (const Datum valColumns[], Relation rel);
+ long getIdxByVals (const Datum valColumns[], Relation rel,
+ long minIdx, long maxIdx); //limit idx search range
+ bool idxRootDimensionsMatch (long idx, const Datum valColumns[]);
+ // packet at idx matches all non-leaf values in valColumns
+
+ // use during table creation, updates underlying DataDescriptor
+ void setDatumValue (int prop_id, long idx, const Datum *val);
+ void setValue (int prop_id, long idx, uint64_t val);
+ void setObjValue (int prop_id, long idx, void *val);
+
+ DataDescriptor *
+ getDataDescriptor ()
+ {
+ return ddscr;
+ }
+
+ void removeDbeViewIdx (long idx);
+
+ // for use with DV_EXT_MANAGED DataViews:
+ void appendDataDescriptorId (long pkt_id);
+ void setDataDescriptorValue (int prop_id, long pkt_id, uint64_t val);
+ long long getDataDescriptorValue (int prop_id, long pkt_id);
+
+private:
+ bool checkUpdate ();
+ void init (DataDescriptor*, DataViewType);
+
+ static void filter_in_chunks (fltr_dbe_ctx *dctx);
+ DataDescriptor *ddscr;
+ long ddsize;
+ Vector<long> *index; // sorted vector of data_id (index into dDscr)
+#define MAX_SORT_DIMENSIONS 10
+#define DATA_SORT_EOL ((Data *) -1) /* marks end of sortedBy[] array */
+ Data *sortedBy[MAX_SORT_DIMENSIONS + 1]; // columns for sort
+ FilterExp *filter;
+ DataViewType type;
+};
+
+#endif /* _TABLE_H */
diff --git a/gprofng/src/UserLabel.cc b/gprofng/src/UserLabel.cc
new file mode 100644
index 00000000000..bdb9922ff3c
--- /dev/null
+++ b/gprofng/src/UserLabel.cc
@@ -0,0 +1,177 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <time.h>
+
+#include "DbeSession.h"
+#include "Expression.h"
+#include "StringBuilder.h"
+#include "util.h"
+#include "UserLabel.h"
+#include "debug.h"
+
+int UserLabel::last_id = 0;
+
+UserLabel::UserLabel (char *_name)
+{
+ name = dbe_strdup (_name);
+ comment = str_expr = all_times = hostname = NULL;
+ start_f = stop_f = false;
+ expr = NULL;
+ start_tv.tv_sec = 0;
+ start_tv.tv_usec = 0;
+ atime = timeStart = timeStop = start_sec = start_hrtime = 0;
+ relative = REL_TIME;
+ id = ++last_id;
+}
+
+UserLabel::~UserLabel ()
+{
+ free (name);
+ free (comment);
+ free (all_times);
+ free (hostname);
+ free (str_expr);
+ delete expr;
+}
+
+void
+UserLabel::gen_expr ()
+{
+ if (!start_f && !stop_f)
+ return;
+ StringBuilder sb;
+ sb.append ('(');
+ if (str_expr)
+ {
+ sb.append (str_expr);
+ sb.append (NTXT (" || ("));
+ }
+ if (start_f)
+ {
+ sb.append (NTXT ("TSTAMP"));
+ sb.append (NTXT (">="));
+ sb.append (timeStart);
+ if (stop_f)
+ {
+ sb.append (NTXT (" && "));
+ }
+ }
+ if (stop_f)
+ {
+ sb.append (NTXT ("TSTAMP"));
+ sb.append ('<');
+ sb.append (timeStop);
+ }
+ sb.append (')');
+ if (str_expr)
+ {
+ sb.append (')');
+ delete str_expr;
+ }
+ str_expr = sb.toString ();
+ start_f = stop_f = false;
+}
+
+void
+UserLabel::register_user_label (int groupId)
+{
+ gen_expr ();
+ if (str_expr)
+ {
+ char *old_str = str_expr;
+ str_expr = dbe_sprintf (NTXT ("(EXPGRID==%d && %s)"), groupId, old_str);
+ delete old_str;
+ UserLabel *ulbl = dbeSession->findUserLabel (name);
+ if (ulbl)
+ {
+ old_str = ulbl->str_expr;
+ ulbl->str_expr = dbe_sprintf (NTXT ("(%s || %s)"), old_str, str_expr);
+ delete old_str;
+ if (comment)
+ {
+ if (ulbl->comment)
+ {
+ old_str = ulbl->comment;
+ ulbl->comment = dbe_sprintf (NTXT ("%s; %s"), old_str, comment);
+ delete old_str;
+ }
+ else
+ ulbl->comment = dbe_strdup (comment);
+ }
+ delete ulbl->expr;
+ ulbl->expr = dbeSession->ql_parse (ulbl->str_expr);
+ }
+ else
+ {
+ expr = dbeSession->ql_parse (str_expr);
+ dbeSession->append (this);
+ }
+ }
+}
+
+char *
+UserLabel::dump ()
+{
+ StringBuilder sb;
+ sb.append (name);
+ if (str_expr)
+ {
+ sb.append (NTXT (" str_expr='"));
+ sb.append (str_expr);
+ sb.append ('\'');
+ }
+ if (all_times)
+ {
+ sb.append (NTXT (" atime="));
+ sb.append ((unsigned int) (atime / NANOSEC));
+ sb.append ('.');
+ char buf[128];
+ snprintf (buf, sizeof (buf), NTXT ("%09llu"), (unsigned long long) (atime % NANOSEC));
+ sb.append (buf);
+ sb.append (NTXT (" all_times='"));
+ sb.append (all_times);
+ sb.append ('\'');
+ }
+ if (comment)
+ {
+ sb.append (NTXT (" comment='"));
+ sb.append (comment);
+ sb.append ('\'');
+ }
+ return sb.toString ();
+}
+
+void
+UserLabel::dump (const char *msg, Vector<UserLabel*> *labels)
+{
+ if (!DUMP_USER_LABELS)
+ return;
+ if (msg)
+ fprintf (stderr, NTXT ("%s\n"), msg);
+ for (int i = 0, sz = labels ? labels->size () : 0; i < sz; i++)
+ {
+ UserLabel *lbl = labels->fetch (i);
+ char *s = lbl->dump ();
+ fprintf (stderr, NTXT ("%2d %s\n"), i, s);
+ delete s;
+ }
+}
diff --git a/gprofng/src/UserLabel.h b/gprofng/src/UserLabel.h
new file mode 100644
index 00000000000..0cb37e41afc
--- /dev/null
+++ b/gprofng/src/UserLabel.h
@@ -0,0 +1,61 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _USER_LABEL_H
+#define _USER_LABEL_H
+
+#include <time.h>
+#include "vec.h"
+
+class Expression;
+class StringBuilder;
+
+class UserLabel
+{
+public:
+
+ enum
+ {
+ REL_TIME = 0,
+ ABS_TIME = 1,
+ CUR_TIME = 2
+ };
+
+ UserLabel (char *_name);
+ ~UserLabel ();
+ void register_user_label (int groupId);
+ void gen_expr ();
+ char *dump ();
+ static void dump (const char *msg, Vector<UserLabel*> *labels);
+
+ char *name, *comment, *str_expr, *all_times, *hostname;
+ bool start_f, stop_f;
+ Expression *expr;
+ timeval start_tv;
+ long long atime, timeStart, timeStop, start_sec, start_hrtime;
+ int id, relative;
+
+private:
+ void gen_time_expr (StringBuilder *sb, long long hrtime, char *op);
+
+ static int last_id;
+};
+
+#endif
diff --git a/gprofng/src/checks.cc b/gprofng/src/checks.cc
new file mode 100644
index 00000000000..105821e4cfa
--- /dev/null
+++ b/gprofng/src/checks.cc
@@ -0,0 +1,516 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <ctype.h>
+#include <unistd.h>
+#include <sys/utsname.h>
+#include <sys/param.h>
+
+#include "gp-defs.h"
+#include "Elf.h"
+#include "collctrl.h"
+#include "i18n.h"
+#include "util.h"
+#include "collect.h"
+
+void
+collect::check_target (int argc, char **argv)
+{
+ char *next;
+ char *last = 0;
+ char *a;
+ char *ccret;
+ char **lasts = &last;
+ int tindex = targ_index;
+ int ret;
+ char *basename;
+ is_64 = false;
+
+ /* now check the executable */
+ nargs = argc - targ_index;
+ Exec_status rv = check_executable (argv[targ_index]);
+ switch (rv)
+ {
+ case EXEC_OK:
+ njargs = cc->get_java_arg_cnt ();
+ arglist = (char **) calloc (nargs + 5 + njargs, sizeof (char *));
+ jargs = cc->get_java_args ();
+
+ // store the first argument -- target name
+ ret = 0;
+ arglist[ret++] = argv[tindex++];
+ if (cc->get_java_mode () == 1)
+ {
+ // add any user-specified -J (Java) arguments
+ int length = (int) strlen (argv[targ_index]);
+ int is_java = 0;
+ if ((length >= 6) && strcmp (&argv[targ_index][length - 5], NTXT ("/java")) == 0)
+ is_java = 1;
+ else if ((length == 4) && strcmp (&argv[targ_index][0], NTXT ("java")) == 0)
+ is_java = 1;
+ if (njargs != 0 && is_java)
+ {
+ next = strtok_r (jargs, NTXT (" \t"), lasts);
+ arglist[ret++] = next;
+ for (;;)
+ {
+ next = strtok_r (NULL, NTXT (" \t"), lasts);
+ if (next == NULL)
+ break;
+ arglist[ret++] = next;
+ }
+ }
+ }
+
+ // copy the rest of the arguments
+ for (int i = 1; i < nargs; i++)
+ arglist[ret++] = argv[tindex++];
+ nargs = ret;
+ break;
+ case EXEC_IS_JAR:
+ // Preface the user-supplied argument list with
+ // the path to the java, the collector invocation,
+ // any -J java arguments provided, and "-jar".
+ ccret = cc->set_java_mode (NTXT ("on"));
+ if (ccret != NULL)
+ {
+ writeStr (2, ccret);
+ exit (1);
+ }
+ njargs = cc->get_java_arg_cnt ();
+ arglist = (char **) calloc (nargs + 5 + njargs, sizeof (char *));
+ jargs = cc->get_java_args ();
+
+ a = find_java ();
+ if (a == NULL)
+ exit (1); // message was written
+ ret = 0;
+ arglist[ret++] = a;
+ // add any user-specified Java arguments
+ if (njargs != 0)
+ {
+ next = strtok_r (jargs, NTXT (" \t"), lasts);
+ arglist[ret++] = next;
+ for (;;)
+ {
+ next = strtok_r (NULL, NTXT (" \t"), lasts);
+ if (next == NULL)
+ break;
+ arglist[ret++] = next;
+ }
+ }
+ arglist[ret++] = NTXT ("-jar");
+ for (int i = 0; i < nargs; i++)
+ arglist[ret++] = argv[tindex++];
+ nargs = ret;
+ break;
+ case EXEC_IS_CLASSCLASS:
+ // remove the .class from the name
+ ret = (int) strlen (argv[targ_index]);
+ argv[targ_index][ret - 6] = 0;
+
+ // now fall through to the EXEC_IS_CLASS case
+ case EXEC_IS_CLASS:
+ // Preface the user-supplied argument list with
+ // the path to the java, the collector invocation,
+ // and any -J java arguments provided.
+ ccret = cc->set_java_mode (NTXT ("on"));
+ if (ccret != NULL)
+ {
+ writeStr (2, ccret);
+ exit (1);
+ }
+ jargs = cc->get_java_args ();
+ njargs = cc->get_java_arg_cnt ();
+ arglist = (char **) calloc (nargs + 4 + njargs, sizeof (char *));
+
+ a = find_java ();
+ if (a == NULL)
+ exit (1); // message was written
+ ret = 0;
+ arglist[ret++] = a;
+ // add any user-specified Java arguments
+ if (njargs != 0)
+ {
+ next = strtok_r (jargs, NTXT (" \t"), lasts);
+ arglist[ret++] = next;
+ for (;;)
+ {
+ next = strtok_r (NULL, NTXT (" \t"), lasts);
+ if (next == NULL)
+ break;
+ arglist[ret++] = next;
+ }
+ }
+
+ // copy the remaining arguments to the new list
+ for (int i = 0; i < nargs; i++)
+ arglist[ret++] = argv[tindex++];
+ nargs = ret;
+ break;
+ case EXEC_ELF_NOSHARE:
+ case EXEC_OPEN_FAIL:
+ case EXEC_ELF_LIB:
+ case EXEC_ELF_HEADER:
+ case EXEC_ELF_ARCH:
+ case EXEC_ISDIR:
+ case EXEC_NOT_EXEC:
+ case EXEC_NOT_FOUND:
+ default:
+ /* something wrong; write a message */
+ char *errstr = status_str (rv, argv[targ_index]);
+ if (errstr)
+ {
+ dbe_write (2, "%s", errstr);
+ free (errstr);
+ }
+ exit (1);
+ }
+ cc->set_target (arglist[0]);
+
+ /* check the experiment */
+ char *ccwarn;
+ ccret = cc->check_expt (&ccwarn);
+ if (ccwarn != NULL)
+ {
+ writeStr (2, ccwarn);
+ free (ccwarn);
+ }
+ if (ccret != NULL)
+ {
+ writeStr (2, ccret);
+ exit (1);
+ }
+ /* check if java, to see if -j flag was given */
+ if ((basename = strrchr (arglist[0], '/')) == NULL)
+ basename = arglist[0];
+ else
+ basename++;
+ if (strcmp (basename, NTXT ("java")) == 0)
+ {
+ /* the target's name is java; was java flag set? */
+ if ((jseen_global == 0) && (cc->get_java_mode () == 0))
+ {
+ char *cret = cc->set_java_mode (NTXT ("on"));
+ if (cret != NULL)
+ {
+ writeStr (2, cret);
+ exit (1);
+ }
+ }
+ }
+}
+
+collect::Exec_status
+collect::check_executable (char *target_name)
+{
+ char target_path[MAXPATHLEN];
+ struct stat64 statbuf;
+ if (target_name == NULL) // not set, but assume caller knows what it's doing
+ return EXEC_OK;
+ if (getenv ("GPROFNG_SKIP_VALIDATION")) // don't check target
+ return EXEC_OK;
+
+ // see if target exists and is not a directory
+ if ((dbe_stat (target_name, &statbuf) == 0) && ((statbuf.st_mode & S_IFMT) != S_IFDIR))
+ {
+ // target is found, check for access as executable
+ if (access (target_name, X_OK) != 0)
+ {
+ // not an executable, check for jar or class file
+ int i = (int) strlen (target_name);
+ if ((i >= 5) && strcmp (&target_name[i - 4], NTXT (".jar")) == 0)
+ {
+ // could be a jar file
+ // XXXX -- need better check for real jar file
+ cc->set_java_mode ("on");
+ return EXEC_IS_JAR;
+ }
+ if ((i >= 7) && strcmp (&target_name[i - 6], NTXT (".class")) == 0)
+ {
+ // could be a class file
+ // XXXX -- need better check for real class file
+ cc->set_java_mode (NTXT ("on"));
+ return EXEC_IS_CLASSCLASS;
+ }
+ // not a jar or class file, return not an executable
+ return EXEC_NOT_EXEC;
+ }
+ else // found, and it is executable. set the path to it
+ snprintf (target_path, sizeof (target_path), NTXT ("%s"), target_name);
+ }
+ else
+ {
+ // not found, look on path
+ char *exe_name = get_realpath (target_name);
+ if (access (exe_name, X_OK) == 0)
+ {
+ // target can't be located
+ // one last attempt: append .class to name, and see if we can find it
+ snprintf (target_path, sizeof (target_path), NTXT ("%s.class"), target_name);
+ if (dbe_stat (target_path, &statbuf) == 0)
+ {
+ // the file exists
+ if ((statbuf.st_mode & S_IFMT) == S_IFDIR)
+ {
+ // this is a directory; that won't do.
+ return EXEC_ISDIR;
+ }
+ // say it's a class file
+ cc->set_java_mode (NTXT ("on"));
+ return EXEC_IS_CLASS;
+ }
+ return EXEC_NOT_FOUND;
+ }
+ snprintf (target_path, sizeof (target_path), NTXT ("%s"), exe_name);
+ delete exe_name;
+ }
+
+ // target_path is now the purported executable
+ // check for ELF library out of date
+ if (Elf::elf_version (EV_CURRENT) == EV_NONE)
+ return EXEC_ELF_LIB;
+ Elf *elf = Elf::elf_begin (target_path);
+ if (elf == NULL)
+ return EXEC_OK;
+ // do not by pass checking architectural match
+ collect::Exec_status exec_stat = check_executable_arch (elf);
+ if (exec_stat != EXEC_OK)
+ {
+ delete elf;
+ return exec_stat;
+ }
+ delete elf;
+ return EXEC_OK;
+}
+
+collect::Exec_status
+collect::check_executable_arch (Elf *elf)
+{
+ Elf_Internal_Ehdr *ehdrp = elf->elf_getehdr ();
+ if (ehdrp == NULL)
+ return EXEC_ELF_HEADER;
+ unsigned short machine = ehdrp->e_machine;
+
+ switch (machine)
+ {
+#if ARCH(SPARC)
+ case EM_SPARC:
+ case EM_SPARC32PLUS:
+ break;
+ case EM_SPARCV9:
+ is_64 = true;
+ break;
+#elif ARCH(Intel)
+ case EM_X86_64:
+ {
+ is_64 = true;
+ // now figure out if the platform can run it
+ struct utsname unbuf;
+ int r = uname (&unbuf);
+ if (r == 0 && unbuf.machine && strstr (unbuf.machine, "_64") == NULL)
+ // machine can not run 64 bits, but this code is 64-bit
+ return EXEC_ELF_ARCH;
+ }
+ break;
+ case EM_386:
+ break;
+#elif ARCH(Aarch64)
+ case EM_AARCH64:
+ is_64 = true;
+ break;
+#endif
+ default:
+ return EXEC_ELF_ARCH;
+ }
+
+ // now check if target was built with shared libraries
+ int dynamic = 0;
+ for (unsigned cnt = 0; cnt < ehdrp->e_phnum; cnt++)
+ {
+ Elf_Internal_Phdr *phdrp = elf->get_phdr (cnt);
+ if (phdrp && phdrp->p_type == PT_DYNAMIC)
+ {
+ dynamic = 1;
+ break;
+ }
+ }
+ if (dynamic == 0)
+ {
+ // target is not a dynamic executable or shared object;
+ // can't record data
+ return EXEC_ELF_NOSHARE;
+ }
+ return EXEC_OK;
+}
+
+char *
+collect::status_str (Exec_status rv, char *target_name)
+{
+ switch (rv)
+ {
+ case EXEC_OK:
+ case EXEC_IS_JAR:
+ case EXEC_IS_CLASS:
+ case EXEC_IS_CLASSCLASS:
+ // supported flavors -- no error message
+ return NULL;
+ case EXEC_ELF_NOSHARE:
+ return dbe_sprintf (GTXT ("Target executable `%s' must be built with shared libraries\n"), target_name);
+ case EXEC_OPEN_FAIL:
+ return dbe_sprintf (GTXT ("Can't open target executable `%s'\n"), target_name);
+ case EXEC_ELF_LIB:
+ return strdup (GTXT ("Internal error: Not a working version of ELF library\n"));
+ case EXEC_ELF_HEADER:
+ return dbe_sprintf (GTXT ("Target `%s' is not a valid ELF executable\n"), target_name);
+ case EXEC_ELF_ARCH:
+ return dbe_sprintf (GTXT ("Target architecture of executable `%s' is not supported on this machine\n"), target_name);
+ case EXEC_ISDIR:
+ return dbe_sprintf (GTXT ("Target `%s' is a directory, not an executable\n"), target_name);
+ case EXEC_NOT_EXEC:
+ return dbe_sprintf (GTXT ("Target `%s' is not executable\n"), target_name);
+ case EXEC_NOT_FOUND:
+ return dbe_sprintf (GTXT ("Target `%s' not found\n"), target_name);
+ }
+ return NULL;
+}
+
+char *
+collect::find_java (void)
+{
+ char buf[MAXPATHLEN];
+ char *var = NULL;
+ Exec_status rv = EXEC_OK;
+
+ // first see if the user entered a -j argument
+ var = cc->get_java_path ();
+ if (var != NULL)
+ {
+ snprintf (buf, sizeof (buf), NTXT ("%s/bin/java"), var);
+ java_how = NTXT ("-j");
+ rv = check_executable (buf);
+ }
+ // then try JDK_HOME
+ if (java_how == NULL)
+ {
+ var = getenv (NTXT ("JDK_HOME"));
+ if ((var != NULL) && (strlen (var) > 0))
+ {
+ snprintf (buf, sizeof (buf), NTXT ("%s/bin/java"), var);
+ java_how = NTXT ("JDK_HOME");
+ rv = check_executable (buf);
+ }
+ }
+ // then try JAVA_PATH
+ if (java_how == NULL)
+ {
+ var = getenv (NTXT ("JAVA_PATH"));
+ if ((var != NULL) && (strlen (var) > 0))
+ {
+ snprintf (buf, sizeof (buf), NTXT ("%s/bin/java"), var);
+ java_how = NTXT ("JAVA_PATH");
+ rv = check_executable (buf);
+ }
+ }
+ // try the user's path
+ if (java_how == NULL)
+ {
+ snprintf (buf, sizeof (buf), NTXT ("java"));
+ rv = check_executable (buf);
+ if (rv == EXEC_OK)
+ java_how = NTXT ("PATH");
+ }
+ // finally, just try /usr/java -- system default
+ if (java_how == NULL)
+ {
+ snprintf (buf, sizeof (buf), NTXT ("/usr/java/bin/java"));
+ rv = check_executable (buf);
+ java_how = NTXT ("/usr/java/bin/java");
+ }
+
+ // we now have a nominal path to java, and how we chose it
+ // and we have rv set to the check_executable return
+ switch (rv)
+ {
+ case EXEC_OK:
+ java_path = strdup (buf);
+ if (verbose == 1)
+ dbe_write (2, GTXT ("Path to `%s' (set from %s) used for Java profiling\n"),
+ java_path, java_how);
+ return ( strdup (buf));
+ default:
+ dbe_write (2, GTXT ("Path to `%s' (set from %s) does not point to a JVM executable\n"),
+ buf, java_how);
+ break;
+ }
+ return NULL;
+}
+
+void
+collect::validate_config (int how)
+{
+ if (getenv (NTXT ("GPROFNG_SKIP_VALIDATION")) != NULL)
+ return;
+ char *cmd = dbe_sprintf (NTXT ("%s/perftools_validate"), run_dir);
+ if (access (cmd, X_OK) != 0)
+ {
+ if (how)
+ dbe_write (2, GTXT ("WARNING: Unable to validate system: `%s' could not be executed\n"), cmd);
+ return;
+ }
+ char *quiet = how == 0 ? NTXT ("") : NTXT ("-q"); // check collection, verbosely
+ char *buf;
+ if (cc->get_java_default () == 0 && java_path)
+ buf = dbe_sprintf (NTXT ("%s -c -j %s -H \"%s\" %s"), cmd, java_path, java_how, quiet);
+ else // not java mode -- don't check the java version
+ buf = dbe_sprintf (NTXT ("%s -c %s"), cmd, quiet);
+ free (cmd);
+
+ /* now run the command */
+ int ret = system (buf);
+ int status = WEXITSTATUS (ret);
+ if ((status & 0x1) != 0)
+ dbe_write (2, GTXT ("WARNING: Data collection may fail: system is not properly configured or is unsupported.\n"));
+ if ((status & 0x2) != 0)
+ dbe_write (2, GTXT ("WARNING: Java data collection may fail: J2SE[tm] version is unsupported.\n"));
+ free (buf);
+}
+
+void
+collect::validate_java (const char *jvm, const char *jhow, int q)
+{
+ char *cmd = dbe_sprintf (NTXT ("%s/perftools_ckjava"), run_dir);
+ if (access (cmd, X_OK) != 0)
+ {
+ dbe_write (2, GTXT ("WARNING: Unable to validate Java: `%s' could not be executed\n"), cmd);
+ return;
+ }
+ char *buf = dbe_sprintf (NTXT ("%s -j %s -H \"%s\" %s"), cmd, jvm, jhow,
+ (q == 1 ? "-q" : ""));
+ free (cmd);
+
+ /* now run the command */
+ int ret = system (buf);
+ int status = WEXITSTATUS (ret);
+ if (status != 0)
+ dbe_write (2, GTXT ("WARNING: Java data collection may fail: J2SE[tm] version is unsupported.\n"));
+ free (buf);
+}
diff --git a/gprofng/src/collctrl.cc b/gprofng/src/collctrl.cc
new file mode 100644
index 00000000000..48c65ff6f24
--- /dev/null
+++ b/gprofng/src/collctrl.cc
@@ -0,0 +1,3149 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <unistd.h>
+#include <strings.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/statvfs.h>
+#include <sys/param.h>
+#include <signal.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <ctype.h>
+#include <dirent.h>
+#include <libgen.h>
+#include <assert.h>
+#include <regex.h> /* regcomp() */
+
+#include "util.h"
+#include "libiberty.h"
+#include "collctrl.h"
+#include "hwcdrv.h"
+//#include "hwcfuncs.h"
+
+#define SP_GROUP_HEADER "#analyzer experiment group"
+#define DD_MAXPATHLEN (MAXPATHLEN * 4) /* large, to build up data descriptor */
+
+/* If the system doesn't provide strsignal, we get it defined in
+ libiberty but no declaration is supplied. */
+#if !defined (HAVE_STRSIGNAL) && !defined (strsignal)
+extern const char *strsignal (int);
+#endif
+
+// _SC_CPUID_MAX is not available on 2.6/2.7
+#ifndef _SC_CPUID_MAX
+#define _SC_CPUID_MAX 517
+#endif
+
+const char *get_fstype (char *);
+
+Coll_Ctrl::Coll_Ctrl (int _interactive, bool _defHWC, bool _kernelHWC)
+{
+ char hostname[MAXPATHLEN];
+ long ncpumax;
+ interactive = _interactive;
+ defHWC = _defHWC;
+ kernelHWC = _kernelHWC;
+
+ /* set this host's parameters */
+ gethostname (hostname, 1023);
+ node_name = strdup (hostname);
+ char *p = strchr (node_name, (int) '.');
+ if (p != NULL)
+ *p = 0;
+ default_stem = strdup ("test");
+
+ /* get CPU count and processor clock rate */
+ ncpumax = sysconf (_SC_CPUID_MAX);
+ if (ncpumax == -1)
+ {
+ ncpus = sysconf (_SC_NPROCESSORS_CONF);
+ /* add 2048 to count, since on some systems CPUID does not start at zero */
+ ncpumax = ncpus + 2048;
+ }
+ ncpus = 0;
+ cpu_clk_freq = 0;
+
+ // On Linux, read /proc/cpuinfo to get CPU count and clock rate
+ // Note that parsing is different on SPARC and x86
+#if defined(sparc)
+ FILE *procf = fopen ("/proc/cpuinfo", "r");
+ if (procf != NULL)
+ {
+ char temp[1024];
+ while (fgets (temp, (int) sizeof (temp), procf) != NULL)
+ {
+ if (strncmp (temp, "Cpu", 3) == 0 && temp[3] != '\0'
+ && strncmp ((strchr (temp + 1, 'C')) ? strchr (temp + 1, 'C')
+ : (temp + 4), "ClkTck", 6) == 0)
+ {
+ ncpus++;
+ char *val = strchr (temp, ':');
+ if (val)
+ {
+ unsigned long long freq;
+ sscanf (val + 2, "%llx", &freq);
+ cpu_clk_freq = (unsigned int) (((double) freq) / 1000000.0 + 0.5);
+ }
+ else
+ cpu_clk_freq = 0;
+ }
+ }
+ fclose (procf);
+ }
+
+#elif defined(__aarch64__)
+ asm volatile("mrs %0, cntfrq_el0" : "=r" (cpu_clk_freq));
+ dbe_write (2, GTXT ("CPU clock frequency: %d\n"), cpu_clk_freq);
+
+#else
+ FILE *procf = fopen ("/proc/cpuinfo", "r");
+ if (procf != NULL)
+ {
+ char temp[1024];
+ while (fgets (temp, (int) sizeof (temp), procf) != NULL)
+ {
+ // x86 Linux
+ if (strncmp (temp, "processor", 9) == 0)
+ ncpus++;
+ else if (strncmp (temp, "cpu MHz", 7) == 0)
+ {
+ char *val = strchr (temp, ':');
+ cpu_clk_freq = val ? atoi (val + 1) : 0;
+ }
+ }
+ fclose (procf);
+ }
+#endif
+
+ /* check resolution of system clock */
+ sys_resolution = sysconf (_SC_CLK_TCK);
+ if (sys_resolution == 0)
+ sys_period = 10000;
+ else
+ sys_period = MICROSEC / (int) sys_resolution;
+
+ /* determine memory page size and number of pages */
+ npages = sysconf (_SC_PHYS_PAGES);
+ page_size = sysconf (_SC_PAGE_SIZE);
+
+ /* set default clock parameters */
+ hwcprof_enabled_cnt = 0; // must be set before calling determine_profile_params();
+ determine_profile_params (); // inits clk_params which is used by clock profiling AND HWCs
+ cpc_cpuver = CPUVER_UNDEFINED;
+
+ /* set default control values */
+ debug_mode = 0;
+#if defined(GPROFNG_JAVA_PROFILING)
+ java_mode = 1;
+#else
+ java_mode = 0;
+#endif
+ java_default = 1;
+ java_path = NULL;
+ java_args = NULL;
+ njava_args = 0;
+ follow_mode = FOLLOW_ON;
+ follow_default = 1;
+ follow_spec_usr = NULL;
+ follow_spec_cmp = NULL;
+ prof_idle = 1;
+ archive_mode = strdup ("on");
+ pauseresume_sig = 0;
+ sample_sig = 0;
+ uinterrupt = 0;
+ attach_pid = 0;
+ time_run = 0;
+ start_delay = 0;
+
+ /* clear the string pointers */
+ uexpt_name = NULL;
+ expt_name = NULL;
+ expt_dir = NULL;
+ base_name = NULL;
+ udir_name = NULL;
+ store_dir = NULL;
+ prev_store_dir = strdup ("");
+ store_ptr = NULL;
+ expt_group = NULL;
+ target_name = NULL;
+ data_desc = NULL;
+ lockname = NULL;
+ hwc_string = NULL;
+ project_home = NULL;
+ lockfd = -1;
+
+ /* set default data collection values */
+ enabled = 0;
+ opened = 0;
+ clkprof_enabled = 1;
+ clkprof_default = 1;
+ for (unsigned ii = 0; ii < MAX_PICS; ii++)
+ {
+ memset (&hwctr[ii], 0, sizeof (Hwcentry));
+ hwctr[ii].reg_num = -1;
+ }
+ hwcprof_default = 0;
+ if (defHWC == true)
+ {
+ setup_hwc ();
+ hwcprof_default = 1;
+ }
+ else // disable the default, and reset the counters
+ hwcprof_enabled_cnt = 0;
+ synctrace_enabled = 0;
+ synctrace_thresh = -1;
+ synctrace_scope = 0;
+ heaptrace_enabled = 0;
+ heaptrace_checkenabled = 0;
+ iotrace_enabled = 0;
+ count_enabled = 0;
+ Iflag = 0;
+ Nflag = 0;
+ sample_period = 1;
+ sample_default = 1;
+ size_limit = 0;
+ nofswarn = 0;
+ expno = 1;
+
+ // ensure that the default name is updated
+ // but don't print any message
+ (void) preprocess_names ();
+ (void) update_expt_name (false, false);
+}
+
+/* Copy constructor */
+Coll_Ctrl::Coll_Ctrl (Coll_Ctrl * cc)
+{
+ uinterrupt = 0;
+ interactive = cc->interactive;
+ defHWC = cc->defHWC;
+ kernelHWC = cc->kernelHWC;
+ node_name = strdup (cc->node_name);
+ default_stem = strdup (cc->default_stem);
+ ncpus = cc->ncpus;
+ cpu_clk_freq = cc->cpu_clk_freq;
+ npages = cc->npages;
+ page_size = cc->page_size;
+ cpc_cpuver = cc->cpc_cpuver;
+ debug_mode = cc->debug_mode;
+ java_mode = cc->java_mode;
+ java_default = cc->java_default;
+ java_path = NULL;
+ java_args = NULL;
+ njava_args = 0;
+ follow_mode = cc->follow_mode;
+ follow_default = cc->follow_default;
+ if (cc->follow_spec_usr)
+ {
+ follow_spec_usr = strdup (cc->follow_spec_usr);
+ follow_spec_cmp = strdup (cc->follow_spec_cmp);
+ }
+ else
+ {
+ follow_spec_usr = NULL;
+ follow_spec_cmp = NULL;
+ }
+ archive_mode = strdup (cc->archive_mode);
+ pauseresume_sig = cc->pauseresume_sig;
+ sample_sig = cc->sample_sig;
+ time_run = cc->time_run;
+ start_delay = cc->start_delay;
+ clk_params = cc->clk_params;
+ clkprof_enabled = cc->clkprof_enabled;
+ clkprof_default = cc->clkprof_default;
+ clkprof_timer = cc->clkprof_timer;
+ clkprof_timer_target = cc->clkprof_timer_target;
+
+ // copy HW counter information
+ hwcprof_default = cc->hwcprof_default;
+ hwcprof_enabled_cnt = cc->hwcprof_enabled_cnt;
+ if (cc->hwc_string != NULL)
+ hwc_string = strdup (cc->hwc_string);
+ else
+ hwc_string = NULL;
+ for (int i = 0; i < hwcprof_enabled_cnt; i++)
+ hwcentry_dup (&hwctr[i], &(cc->hwctr[i]));
+ project_home = cc->project_home ? strdup (cc->project_home) : NULL;
+ synctrace_enabled = cc->synctrace_enabled;
+ synctrace_thresh = cc->synctrace_thresh;
+ synctrace_scope = cc->synctrace_scope;
+ heaptrace_enabled = cc->heaptrace_enabled;
+ heaptrace_checkenabled = cc->heaptrace_checkenabled;
+ iotrace_enabled = cc->iotrace_enabled;
+ count_enabled = cc->count_enabled;
+ Iflag = cc->Iflag;
+ Nflag = cc->Nflag;
+ sample_period = cc->sample_period;
+ sample_default = cc->sample_default;
+ size_limit = cc->size_limit;
+ nofswarn = cc->nofswarn;
+
+ // these will get reset during preprocess_names()
+ expt_name = NULL;
+ expt_dir = NULL;
+ store_dir = NULL;
+ base_name = NULL;
+ expno = 1;
+
+ // these represent user settings
+ expt_group = NULL;
+ if (cc->expt_group != NULL)
+ expt_group = strdup (cc->expt_group);
+ uexpt_name = NULL;
+ if (cc->uexpt_name != NULL)
+ uexpt_name = strdup (cc->uexpt_name);
+ udir_name = NULL;
+ if (cc->udir_name != NULL)
+ udir_name = strdup (cc->udir_name);
+
+ /* clear the string pointers */
+ prev_store_dir = strdup ("");
+ store_ptr = NULL;
+ target_name = NULL;
+ data_desc = NULL;
+ lockname = NULL;
+ lockfd = -1;
+
+ /* set default data collection values */
+ enabled = cc->enabled;
+ opened = 0;
+ nofswarn = cc->nofswarn;
+ sys_resolution = cc->sys_resolution;
+ sys_period = cc->sys_period;
+
+ // ensure that the default name is updated
+ (void) preprocess_names ();
+ (void) update_expt_name (false, false);
+ build_data_desc ();
+}
+
+Coll_Ctrl::~Coll_Ctrl ()
+{
+ free (node_name);
+ free (expt_name);
+ free (expt_dir);
+ free (base_name);
+ free (udir_name);
+ free (store_dir);
+ free (store_ptr);
+ free (expt_group);
+ free (target_name);
+ free (data_desc);
+ free (lockname);
+ free (hwc_string);
+ free (project_home);
+ free (java_path);
+ hwcprof_enabled_cnt = 0;
+}
+
+/* set up the experiment */
+char *
+Coll_Ctrl::setup_experiment ()
+{
+ char *ret;
+ if (enabled == 0)
+ return NULL;
+ build_data_desc ();
+
+ /* create the experiment directory */
+ ret = create_exp_dir ();
+ if (ret != NULL)
+ return ret;
+
+ /* if an experiment-group, join it */
+ ret = join_group ();
+ if (ret != NULL)
+ {
+ remove_exp_dir ();
+ return ret;
+ }
+ /* all is OK, return 0 */
+ opened = 1;
+ return NULL;
+}
+
+void
+Coll_Ctrl::interrupt ()
+{
+ uinterrupt = 1;
+}
+
+char *
+Coll_Ctrl::enable_expt ()
+{
+ if (opened == 1)
+ return strdup (GTXT ("Experiment is active; command ignored.\n"));
+ if (cpu_clk_freq == 0)
+ return strdup (GTXT ("Can not determine CPU clock frequency.\n"));
+ if (sys_resolution == 0)
+ return strdup (GTXT ("System clock profile resolution can not be determined.\n"));
+ enabled = 1;
+ return NULL;
+}
+
+/* close the experiment */
+void
+Coll_Ctrl::close_expt ()
+{
+ opened = 0;
+ (void) update_expt_name (false, false);
+}
+
+/* close and delete the experiment */
+void
+Coll_Ctrl::delete_expt ()
+{
+ if (opened == 0)
+ return;
+ remove_exp_dir ();
+
+ /* The order of removing the directory and closing
+ * the experiment may seem unnatural, but it's not.
+ * We do need to update names when we close the experiment
+ * (actually Coll_Ctrl object) and we can't remove anything
+ * after that.
+ */
+ close_expt ();
+}
+
+// Check the experiment settings for consistency. Returns NULL if OK,
+// or an error message if there are invalid combinations of settings
+char *
+Coll_Ctrl::check_consistency ()
+{
+ /* check for Java arguments, but not Java profiling */
+ if (java_args != NULL && java_mode == 0)
+ return strdup (GTXT ("Java arguments can not be set if Java profiling is not enabled.\n"));
+
+ /* if count data, no other data is allowed */
+ if (count_enabled != 0
+ && ((clkprof_default != 1 && clkprof_enabled != 0)
+ || hwcprof_enabled_cnt != 0 || synctrace_enabled != 0
+ || heaptrace_enabled != 0 || iotrace_enabled != 0))
+ return strdup (GTXT ("Count data cannot be collected along with any other data.\n"));
+
+ /* if count data, various other options are not allowed */
+ if (count_enabled != 0
+ && ((java_mode != 0 && java_default != 1)
+ || java_args != NULL || debug_mode != 0
+ || (follow_mode != 0 && follow_default != 1)
+ || pauseresume_sig != 0 || sample_sig != 0
+ || (sample_default != 1 && sample_period != 0) || time_run != 0))
+ return strdup (GTXT ("Count data cannot be collected with any of -F -S -y -l -j -J -x -t .\n"));
+ /* if not count data, I and N options are not allowed */
+ if (count_enabled == 0 && (Iflag != 0 || Nflag != 0))
+ return strdup (GTXT ("-I or -N can only be specified with count data.\n"));
+ return NULL;
+}
+
+char *
+Coll_Ctrl::check_expt (char **warn)
+{
+ char *ret;
+ *warn = NULL;
+ ret = check_consistency ();
+ if (ret != NULL) /* something is wrong, return the error */
+ return ret;
+ /* check for heaptrace and java -- warn that it covers native allocations only */
+ if (heaptrace_enabled == 1 && java_mode == 1 && java_default == 0)
+ *warn = strdup (GTXT ("Note: Heap profiling will only trace native allocations, not Java allocations.\n"));
+
+ /* if no profiling data selected, warn the user */
+ if (clkprof_enabled == 0 && hwcprof_enabled_cnt == 0 && synctrace_enabled == 0
+ && heaptrace_enabled == 0 && iotrace_enabled == 0 && count_enabled == 0)
+ *warn = strdup (GTXT ("Warning: No function level data requested; only statistics will be collected.\n\n"));
+ build_data_desc ();
+
+ /* verify that the directory exists */
+ struct stat statbuf;
+ if (stat (store_dir, &statbuf) != 0)
+ return dbe_sprintf (GTXT ("Store directory %s is not accessible: %s\n"),
+ store_dir, strerror (errno));
+ if (access (store_dir, W_OK) != 0)
+ return dbe_sprintf (GTXT ("Store directory %s is not writeable: %s\n"),
+ store_dir, strerror (errno));
+
+ /* if an experiment-group, verify that it can be written */
+ ret = check_group ();
+ if (ret != NULL)
+ return ret;
+ return NULL;
+}
+
+char *
+Coll_Ctrl::show (int i)
+{
+ char UEbuf[4096];
+ UEbuf[0] = 0;
+ if (i == 0)
+ {
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("Collection parameters:\n"));
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT (" experiment enabled\n"));
+ }
+ if (target_name != NULL)
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("\ttarget = %s\n"), target_name);
+ if (uexpt_name != NULL)
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("\tuser_expt_name = %s\n"), uexpt_name);
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("\texpt_name = %s\n"),
+ ((expt_name != NULL) ? expt_name : NTXT ("<NULL>")));
+ if (udir_name != NULL)
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("\tdir_name = %s\n"), udir_name);
+ if (expt_group != NULL)
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("\texpt_group = %s\n"), expt_group);
+ if (debug_mode == 1)
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("\tdebug_mode enabled\n"));
+ if (clkprof_enabled != 0)
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("\tclock profiling enabled, %.3f millisec.\n"),
+ (double) (clkprof_timer) / 1000.);
+ if (synctrace_enabled != 0)
+ {
+ if (synctrace_thresh < 0)
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("\tsynchronization tracing enabled, threshold: calibrate; "));
+ else if (synctrace_thresh == 0)
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("\tsynchronization tracing enabled, threshold: all; "));
+ else
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("\tsynchronization tracing enabled, threshold: %d micros.; "), synctrace_thresh);
+ switch (synctrace_scope)
+ {
+ case SYNCSCOPE_NATIVE:
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("Native-APIs\n"));
+ break;
+ case SYNCSCOPE_JAVA:
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("Java-APIs\n"));
+ break;
+ case SYNCSCOPE_NATIVE | SYNCSCOPE_JAVA:
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("Native- and Java-APIs\n"));
+ break;
+ default:
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("ERR -- unexpected synctrace_scope %d\n"), synctrace_scope);
+ break;
+ }
+ }
+ if (hwcprof_enabled_cnt != 0)
+ {
+ char ctrbuf[MAXPATHLEN];
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("\thardware counter profiling%s enabled:\n"),
+ (hwcprof_default == 1 ? GTXT (" (default)") : ""));
+ for (int ii = 0; ii < hwcprof_enabled_cnt; ii++)
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("\t %u. %s\n"), ii + 1,
+ hwc_hwcentry_specd_string (ctrbuf, MAXPATHLEN, &hwctr[ii]));
+ }
+ if (heaptrace_enabled != 0)
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("\theap tracing enabled, %s\n"),
+ (heaptrace_checkenabled == 0 ? GTXT ("no checking") :
+ (heaptrace_checkenabled == 1 ? GTXT ("over/underrun checking") :
+ GTXT ("over/underrun checking and pattern storing"))));
+ if (iotrace_enabled != 0)
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("\tI/O tracing enabled\n"));
+ switch (count_enabled)
+ {
+ case 0:
+ break;
+ case 1:
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("\tcount data enabled\n"));
+ break;
+ case -1:
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("\tstatic count data will be generated (for a.out only)\n"));
+ break;
+ }
+ switch (follow_mode)
+ {
+ case FOLLOW_ON:
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("\tdescendant processes will be followed\n"));
+ break;
+ case FOLLOW_ALL:
+ if (follow_spec_usr && follow_spec_cmp)
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("\texperiments will be recorded for descendant processes that match pattern '%s'\n"),
+ follow_spec_usr);
+ else
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("\tdescendant processes will all be followed\n"));
+ break;
+ case FOLLOW_NONE:
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("\tdescendant processes will not be followed\n"));
+ break;
+ default:
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("\tfollowing descendant processes: <UNKNOWN>\n"));
+ break;
+ }
+ if (java_mode == 0)
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("\tjava profiling disabled\n"));
+ if (pauseresume_sig != 0)
+ {
+ const char *buf = strsignal (pauseresume_sig);
+ if (buf != NULL)
+ {
+ if (pauseresume_pause == 1)
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("\tpause-resume (delayed initialization) signal %s (%d) -- paused\n"), buf, pauseresume_sig);
+ else
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("\tpause-resume (delayed initialization) signal %s (%d)\n"), buf, pauseresume_sig);
+ }
+ else
+ {
+ if (pauseresume_pause == 1)
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("\tpause-resume (delayed initialization) signal %d -- paused\n"), pauseresume_sig);
+ else
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("\tpause-resume (delayed initialization) signal %d\n"), pauseresume_sig);
+ }
+ }
+ if (sample_sig != 0)
+ {
+ const char *buf = strsignal (sample_sig);
+ if (buf != NULL)
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("\tsample signal %s (%d)\n"), buf, sample_sig);
+ else
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("\tsample signal %d\n"), sample_sig);
+ }
+ if (time_run != 0 || start_delay != 0)
+ {
+ if (start_delay != 0)
+ {
+ if (time_run != 0)
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("\tdata-collection duration, %d-%d secs.\n"), start_delay, time_run);
+ else
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("\tdata-collection duration, %d- secs.\n"), start_delay);
+ }
+ else
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("\tdata-collection duration, %d secs.\n"), time_run);
+ }
+ if (sample_period != 0)
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("\tperiodic sampling, %d secs.\n"), sample_period);
+ else
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("\tno periodic sampling\n"));
+ if (size_limit != 0)
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("\texperiment size limit %d MB.\n"), size_limit);
+ else
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("\tno experiment size limit set\n"));
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("\texperiment archiving: -a %s\n"), archive_mode);
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("\tdata descriptor: \"%s\"\n"),
+ ((data_desc != NULL) ? data_desc : NTXT ("<NULL>")));
+#if 0
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("\t expt_dir: %s\n"),
+ ((expt_dir != NULL) ? expt_dir : NTXT ("<NULL>")));
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("\t base_name: %s\n"),
+ ((base_name != NULL) ? base_name : NTXT ("<NULL>")));
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("\t store_dir: %s\n"),
+ ((store_dir != NULL) ? store_dir : NTXT ("<NULL>")));
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("\t store_ptr: %s\n"),
+ ((store_ptr != NULL) ? store_ptr : NTXT ("<NULL>")));
+#endif
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("\t\thost: `%s', ncpus = %d, clock frequency %d MHz.\n"),
+ ((node_name != NULL) ? node_name : NTXT ("<NULL>")),
+ (int) ncpus, (int) cpu_clk_freq);
+ if (npages > 0)
+ {
+ long long memsize = ((long long) npages * (long long) page_size) / (1024 * 1024);
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("\t\tmemory: %ld pages @ %ld bytes = %lld MB.\n"),
+ npages, page_size, memsize);
+ }
+ return strdup (UEbuf);
+}
+
+#define MAX_COLLECT_ARGS 100
+
+char **
+Coll_Ctrl::get_collect_args ()
+{
+ char buf[DD_MAXPATHLEN];
+ char **p;
+ char **argv = (char **) calloc (MAX_COLLECT_ARGS, sizeof (char *));
+ if (argv == NULL) // poor way of dealing with calloc failure
+ abort ();
+ p = argv;
+ *p++ = strdup ("collect");
+ if (debug_mode == 1)
+ *p++ = strdup ("-x");
+ if (clkprof_enabled != 0)
+ {
+ *p++ = strdup ("-p");
+ snprintf (buf, sizeof (buf), "%du", clkprof_timer);
+ *p++ = strdup (buf);
+ }
+ if (hwcprof_enabled_cnt > 0)
+ {
+ *buf = 0;
+ *p++ = strdup ("-h");
+ for (int ii = 0; ii < hwcprof_enabled_cnt; ii++)
+ {
+ char*rateString = hwc_rate_string (&hwctr[ii], 1); //"1" is for temporary goldfile compatibility. TBR YXXX!!
+ snprintf (buf + strlen (buf), sizeof (buf) - strlen (buf),
+ "%s%s,%s%s", ii ? "," : "", hwctr[ii].name,
+ rateString ? rateString : "",
+ (ii + 1 < hwcprof_enabled_cnt) ? "," : "");
+ free (rateString);
+ }
+ if (strlen (buf) + 1 >= sizeof (buf))
+ abort ();
+ *p++ = strdup (buf);
+ }
+ if (heaptrace_enabled != 0)
+ {
+ *p++ = strdup ("-H");
+ *p++ = strdup ("on");
+ }
+ if (iotrace_enabled != 0)
+ {
+ *p++ = strdup ("-i");
+ *p++ = strdup ("on");
+ }
+ if (synctrace_enabled != 0)
+ {
+ *p++ = strdup ("-s");
+ if (synctrace_thresh < 0)
+ *p++ = strdup ("calibrate");
+ else if (synctrace_thresh < 0)
+ *p++ = strdup ("all");
+ else
+ *p++ = dbe_sprintf ("%d", synctrace_thresh);
+ *p++ = dbe_sprintf (",%d", synctrace_scope);
+ }
+ if (follow_mode != 0)
+ {
+ *p++ = strdup ("-F");
+ char * fs = get_follow_usr_spec ();
+ if (fs)
+ *p++ = strdup (fs);
+ else
+ {
+ switch (get_follow_mode ())
+ {
+ case FOLLOW_ON:
+ *p++ = strdup ("on");
+ break;
+ case FOLLOW_ALL:
+ *p++ = strdup ("all");
+ break;
+ case FOLLOW_NONE:
+ default:
+ *p++ = strdup ("off");
+ break;
+ }
+ }
+ }
+ *p++ = strdup ("-a");
+ *p++ = strdup (get_archive_mode ());
+ if (java_mode != 0)
+ {
+ *p++ = strdup ("-j");
+ *p++ = strdup ("on");
+ }
+ if (pauseresume_sig != 0)
+ {
+ *p++ = strdup ("-y");
+ *p++ = dbe_sprintf ("%d%s", pauseresume_sig,
+ (pauseresume_pause == 0 ? ",r" : ""));
+ }
+ if (sample_sig != 0)
+ {
+ *p++ = strdup ("-l");
+ *p++ = dbe_sprintf ("%d", sample_sig);
+ }
+ if (sample_period != 0)
+ {
+ *p++ = strdup ("-S");
+ *p++ = dbe_sprintf ("%d", sample_period);
+ }
+ if (size_limit != 0)
+ {
+ *p++ = strdup ("-L");
+ *p++ = dbe_sprintf ("%d", size_limit);
+ }
+ if (expt_group != NULL)
+ {
+ *p++ = strdup ("-g");
+ *p++ = strdup (expt_group);
+ }
+ if (udir_name != 0)
+ {
+ *p++ = strdup ("-d");
+ *p++ = strdup (udir_name);
+ }
+ if (expt_name != 0)
+ {
+ *p++ = strdup ("-o");
+ *p++ = strdup (expt_name);
+ }
+ if (p - argv >= MAX_COLLECT_ARGS) // argument list too small -- fatal error
+ abort ();
+ return argv;
+}
+
+char *
+Coll_Ctrl::show_expt ()
+{
+ if (enabled == 0)
+ return NULL;
+ char UEbuf[4096];
+ UEbuf[0] = 0;
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("Creating experiment directory %s (Process ID: %ld) ...\n"),
+ ((store_ptr != NULL) ? store_ptr : NTXT ("<NULL>")), (long) getpid ());
+ char *caller = getenv ("SP_COLLECTOR_FROM_GUI"); // Collector from GUI
+ if (caller != NULL) // Print non-localized message
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ NTXT ("\nCreating experiment directory %s (Process ID: %ld) ...\n"),
+ ((store_ptr != NULL) ? store_ptr : NTXT ("<NULL>")), (long) getpid ());
+#if 0
+ char *fstype = get_fstype (store_dir);
+ if ((fstype != NULL) && (nofswarn == 0))
+ {
+ // only warn if clock or hwc profiling is turned on
+ if (clkprof_enabled || hwcprof_enabled_cnt != 0)
+ snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf),
+ GTXT ("this experiment is being recorded to a file system \nof type \"%s\", which may distort the measured performance."),
+ fstype);
+ }
+#endif
+ return strdup (UEbuf);
+}
+
+void
+Coll_Ctrl::set_clk_params (int min, int res, int max, int hi, int norm, int lo)
+{
+ clk_params.min = min;
+ clk_params.res = res;
+ clk_params.max = max;
+ clk_params.hival = hi;
+ clk_params.normval = norm;
+ clk_params.lowval = lo;
+ set_clkprof_timer_target (clk_params.normval); // note: requires clk_params to be initialized!
+}
+
+char *
+Coll_Ctrl::reset_clkprof (int val)
+{
+ if (val != clkprof_timer)
+ {
+ // profiler has had to reset to a different value; warn user
+ char *msg = dbe_sprintf (
+ GTXT ("Warning: Clock profiling timer reset from %.3f millisec. to %.3f millisec. as required by profiling driver\n\n"),
+ (double) (clkprof_timer) / 1000., (double) (val) / 1000.);
+ adjust_clkprof_timer (val);
+ return msg;
+ }
+ return NULL;
+}
+
+char *
+Coll_Ctrl::set_clkprof (const char *string, char** warn)
+{
+ int ticks;
+ int nclkprof_timer;
+ int prevclkprof_enabled;
+ int prevclkprof_default;
+ *warn = NULL;
+ if (opened == 1)
+ return strdup (GTXT ("Experiment is active; command ignored.\n"));
+ /* if the first character is a +, warn user that it is no longer supported */
+ if (string[0] == '+')
+ return strdup (GTXT ("Warning: clock-based memoryspace and dataspace profiling is no longer supported\n"));
+ if (strcmp (string, "off") == 0)
+ {
+ clkprof_enabled = 0;
+ clkprof_default = 0;
+ return NULL;
+ }
+ else if (string == NULL || strcmp (string, "on") == 0)
+ nclkprof_timer = clk_params.normval;
+ else if (strcmp (string, "lo") == 0 || strcmp (string, "low") == 0)
+ nclkprof_timer = clk_params.lowval;
+ else if (strcmp (string, "hi") == 0 || strcmp (string, "high") == 0
+ || strcmp (string, "h") == 0)
+ nclkprof_timer = clk_params.hival;
+ else
+ {
+ /* the remaining string should be a number > 0 */
+ char *endchar = NULL;
+ double dval = strtod (string, &endchar);
+ if (*endchar == 'm' || *endchar == 0) /* user specified milliseconds */
+ dval = dval * 1000.;
+ else if (*endchar == 'u') /* user specified microseconds */
+ dval = dval;
+ else
+ return dbe_sprintf (GTXT ("Unrecognized clock-profiling interval `%s'\n"), string);
+ nclkprof_timer = (int) (dval + 0.5);
+ }
+ // we now have the proposed value; ensure it's within limits
+ if (nclkprof_timer <= 0)
+ return dbe_sprintf (GTXT ("Unrecognized clock-profiling interval `%s'\n"), string);
+
+ // Check consistency with experiment
+ prevclkprof_enabled = clkprof_enabled;
+ prevclkprof_default = clkprof_default;
+ clkprof_enabled = 1;
+ clkprof_default = 0;
+ char *ret = check_consistency ();
+ if (ret != NULL)
+ {
+ clkprof_default = prevclkprof_default;
+ clkprof_enabled = prevclkprof_enabled;
+ return ret;
+ }
+ int ref_nclkprof_timer = nclkprof_timer;
+
+ // check for minimum value
+ if (nclkprof_timer < clk_params.min)
+ {
+ /* value too small, use minimum value, with warning */
+ *warn = dbe_sprintf (
+ GTXT ("Warning: Clock profiling at %.3f millisec. interval is not supported on this system; minimum %.3f millisec. used\n"),
+ (double) (nclkprof_timer) / 1000., (double) (clk_params.min) / 1000.);
+ nclkprof_timer = clk_params.min;
+ }
+
+ // check for maximum value
+ if (nclkprof_timer > clk_params.max)
+ {
+ *warn = dbe_sprintf (
+ GTXT ("Clock profiling at %.3f millisec. interval is not supported on this system; maximum %.3f millisec. used\n"),
+ (double) (nclkprof_timer) / 1000., (double) (clk_params.max) / 1000.);
+ nclkprof_timer = clk_params.max;
+ }
+
+ /* see if setting is a multiple of the period */
+ if (nclkprof_timer > clk_params.res)
+ {
+ ticks = ((nclkprof_timer / clk_params.res) * clk_params.res);
+ if (ticks != nclkprof_timer)
+ {
+ /* no, we need to reset to a multiple */
+ *warn = dbe_sprintf (
+ GTXT ("Clock profile interval rounded from %.3f to %.3f (system resolution = %.3f) millisec."),
+ (double) (nclkprof_timer) / 1000., (double) (ticks) / 1000.,
+ (double) (clk_params.res) / 1000.);
+ nclkprof_timer = ticks;
+ }
+ }
+
+ // limit reference "target" rate. Target rate is also used for HWCS.
+ if (ref_nclkprof_timer > PROFINT_MAX)
+ ref_nclkprof_timer = PROFINT_MAX;
+ if (ref_nclkprof_timer < PROFINT_MIN)
+ ref_nclkprof_timer = PROFINT_MIN;
+ set_clkprof_timer_target (ref_nclkprof_timer);
+ adjust_clkprof_timer (nclkprof_timer);
+ return NULL;
+}
+
+char *
+Coll_Ctrl::set_synctrace (const char *string)
+{
+ if (opened == 1)
+ return strdup (GTXT ("Experiment is active; command ignored.\n"));
+ char *comma_p = NULL;
+ if (string == NULL)
+ {
+ /* no argument provided, use default: calibrate and native */
+ synctrace_enabled = 1;
+ synctrace_thresh = -1;
+ synctrace_scope = SYNCSCOPE_NATIVE;
+ char *ret = check_consistency ();
+ if (ret != NULL)
+ {
+ synctrace_enabled = 0;
+ return ret;
+ }
+ return NULL;
+ }
+ char *val = strdup (string);
+ /* see if there's a comma in the string */
+ char *next = strchr (val, (int) ',');
+ if (next != NULL)
+ {
+ /* remember where the comma was */
+ comma_p = next;
+
+ /* set the scope based on the characters following the comma */
+ synctrace_scope = 0;
+ next++;
+ while (*next != 0)
+ {
+ if (*next == 'n')
+ synctrace_scope |= SYNCSCOPE_NATIVE;
+ else if (*next == 'j')
+ synctrace_scope |= SYNCSCOPE_JAVA;
+ else
+ return dbe_sprintf (GTXT ("Unrecognized synchronization tracing threshold `%s'\n"), string);
+ next++;
+ }
+ if (synctrace_scope == 0)
+ synctrace_scope = SYNCSCOPE_NATIVE;
+ /* clear the comma for the threshold determination */
+ *comma_p = 0;
+ }
+ else /* no ",<scope>" -- default to native and Java */
+ synctrace_scope = SYNCSCOPE_NATIVE | SYNCSCOPE_JAVA;
+ if (!strlen (val) || !strcmp (val, "calibrate") || !strcmp (val, "on"))
+ {
+ /* use default: calibrate and native */
+ synctrace_enabled = 1;
+ synctrace_thresh = -1;
+ free (val);
+ char *ret = check_consistency ();
+ if (ret != NULL)
+ {
+ synctrace_enabled = 0;
+ return ret;
+ }
+ return NULL;
+ }
+ if (strcmp (val, "off") == 0)
+ {
+ synctrace_enabled = 0;
+ free (val);
+ return NULL;
+ }
+ if (strcmp (val, "all") == 0)
+ {
+ /* set to record all events */
+ synctrace_thresh = 0;
+ synctrace_enabled = 1;
+ char *ret = check_consistency ();
+ free (val);
+ if (ret != NULL)
+ {
+ synctrace_enabled = 0;
+ return ret;
+ }
+ return NULL;
+ }
+ /* the remaining string should be a number >= 0 */
+ char *endchar = NULL;
+ int tval = (int) strtol (val, &endchar, 0);
+ free (val);
+ if (*endchar != 0 || tval < 0)
+ {
+ /* invalid setting */
+ /* restore the comma, if it was zeroed out */
+ if (comma_p != NULL)
+ *comma_p = ',';
+ return dbe_sprintf (GTXT ("Unrecognized synchronization tracing threshold `%s'\n"), string);
+ }
+ synctrace_thresh = tval;
+ synctrace_enabled = 1;
+ return NULL;
+}
+
+char *
+Coll_Ctrl::set_heaptrace (const char *string)
+{
+ if (opened == 1)
+ return strdup (GTXT ("Experiment is active; command ignored.\n"));
+ if (string == NULL || strlen (string) == 0 || strcmp (string, "on") == 0)
+ {
+ heaptrace_enabled = 1;
+ char *ret = check_consistency ();
+ if (ret != NULL)
+ {
+ heaptrace_enabled = 0;
+ return ret;
+ }
+ return NULL;
+ }
+ if (strcmp (string, "off") == 0)
+ {
+ heaptrace_enabled = 0;
+ return NULL;
+ }
+#if 0
+ if (strcmp (string, "check") == 0)
+ {
+ /* set to check for over/underruns */
+ heaptrace_checkenabled = 1;
+ heaptrace_enabled = 1;
+ return NULL;
+ }
+ if (strcmp (string, "clear") == 0)
+ {
+ /* set to check for over/underruns, and store patterns */
+ heaptrace_checkenabled = 2;
+ heaptrace_enabled = 1;
+ return NULL;
+ }
+#endif
+ return dbe_sprintf (GTXT ("Unrecognized heap tracing parameter `%s'\n"), string);
+}
+
+char *
+Coll_Ctrl::set_iotrace (const char *string)
+{
+ if (opened == 1)
+ return strdup (GTXT ("Experiment is active; command ignored.\n"));
+ if (string == NULL || strlen (string) == 0 || strcmp (string, "on") == 0)
+ {
+ iotrace_enabled = 1;
+ char *ret = check_consistency ();
+ if (ret != NULL)
+ {
+ iotrace_enabled = 0;
+ return ret;
+ }
+ return NULL;
+ }
+ if (strcmp (string, "off") == 0)
+ {
+ iotrace_enabled = 0;
+ return NULL;
+ }
+ return dbe_sprintf (GTXT ("Unrecognized I/O tracing parameter `%s'\n"), string);
+}
+
+char *
+Coll_Ctrl::set_count (const char *string)
+{
+ int ret = -1;
+ if (opened == 1)
+ return strdup (GTXT ("Experiment is active; command ignored.\n"));
+ if (string == NULL || strlen (string) == 0 || strcmp (string, "off") == 0)
+ {
+ count_enabled = 0;
+ ret = 0;
+ }
+ if (strcmp (string, "on") == 0)
+ {
+ count_enabled = 1;
+ char *cret = check_consistency ();
+ if (cret != NULL)
+ {
+ count_enabled = 0;
+ return cret;
+ }
+ ret = 0;
+ }
+ if (strcmp (string, "static") == 0)
+ {
+ count_enabled = -1;
+ char *cret = check_consistency ();
+ if (cret != NULL)
+ {
+ count_enabled = 0;
+ return cret;
+ }
+ ret = 0;
+ }
+ if (ret == 0)
+ {
+ if (count_enabled != 0)
+ {
+ /* ensure that sample period is 0, if set by default */
+ if (sample_default == 1)
+ sample_period = 0;
+ /* ensure that clock profiling is off, if set by default */
+ if (clkprof_default == 1)
+ {
+ clkprof_default = 0;
+ clkprof_enabled = 0;
+ }
+ if (hwcprof_default == 1)
+ hwcprof_default = 0;
+ }
+ return NULL;
+ }
+ return dbe_sprintf (GTXT ("Unrecognized count parameter `%s'\n"), string);
+}
+
+char *
+Coll_Ctrl::set_time_run (const char *valarg)
+{
+ if (opened == 1)
+ return strdup (GTXT ("Experiment is active; command ignored.\n"));
+ if (valarg == NULL) /* invalid setting */
+ return strdup (GTXT ("time parameter can not be NULL\n"));
+ /* the string should be a number >= 0 */
+ int prev_start_delay = start_delay;
+ int prev_time_run = time_run;
+ const char *endchar = valarg;
+ char *newchar = NULL;
+ int val = 0;
+ if (*endchar != '-')
+ {
+ val = (int) strtol (endchar, &newchar, 0);
+ endchar = newchar;
+ if (val < 0)
+ return dbe_sprintf (GTXT ("Unrecognized time parameter `%s'\n"), valarg);
+ if (*endchar == 'm')
+ {
+ val = val * 60; /* convert to seconds */
+ endchar++;
+ }
+ else if (*endchar == 's') /* no conversion needed */
+ endchar++;
+ if (*endchar == 0)
+ {
+ time_run = val;
+ return NULL;
+ }
+ else if (*endchar != '-')
+ return dbe_sprintf (GTXT ("Unrecognized time parameter `%s'\n"), valarg);
+ }
+ /* a second number is provided */
+ start_delay = val;
+ endchar++;
+ val = (int) strtol (endchar, &newchar, 0);
+ endchar = newchar;
+ if (val < 0)
+ {
+ start_delay = prev_start_delay;
+ return dbe_sprintf (GTXT ("Unrecognized time parameter `%s'\n"), valarg);
+ }
+ if (*endchar == 'm')
+ {
+ val = val * 60; /* convert to seconds */
+ endchar++;
+ }
+ else if (*endchar == 's') /* no conversion needed */
+ endchar++;
+ if (*endchar != 0)
+ {
+ start_delay = prev_start_delay;
+ return dbe_sprintf (GTXT ("Unrecognized time parameter `%s'\n"), valarg);
+ }
+ time_run = val;
+ if (time_run != 0 && start_delay >= time_run)
+ {
+ start_delay = prev_start_delay;
+ return dbe_sprintf (GTXT ("Invalid time parameter `%s': start time must be earlier than end time\n"), valarg);
+ }
+ char *ret = check_consistency ();
+ if (ret != NULL)
+ {
+ start_delay = prev_start_delay;
+ time_run = prev_time_run;
+ return ret;
+ }
+ return NULL;
+}
+
+char *
+Coll_Ctrl::set_attach_pid (char *valarg)
+{
+ if (opened == 1)
+ return strdup (GTXT ("Experiment is active; command ignored.\n"));
+ if (valarg == NULL)
+ return strdup (GTXT ("Specified PID can not be NULL\n"));
+
+ /* the string should be a number corresponding to an active process' pid */
+ char *endchar = NULL;
+ int val = (int) strtol (valarg, &endchar, 0);
+ if (*endchar != 0 || val < 0)
+ return dbe_sprintf (GTXT ("Invalid process pid `%s'\n"), valarg);
+ int prev_attach_pid = attach_pid;
+ attach_pid = val;
+ char *ret = check_consistency ();
+ if (ret != NULL)
+ {
+ attach_pid = prev_attach_pid;
+ return ret;
+ }
+ return NULL;
+}
+
+void
+Coll_Ctrl::free_hwc_fields (Hwcentry * tmpctr)
+{
+ if (tmpctr->name != NULL)
+ free (tmpctr->name);
+ if (tmpctr->int_name != NULL)
+ free (tmpctr->int_name);
+ memset (tmpctr, 0, sizeof (Hwcentry));
+ tmpctr->reg_num = -1;
+}
+
+void
+Coll_Ctrl::hwcentry_dup (Hwcentry *hnew, Hwcentry *_hwc)
+{
+ *hnew = *_hwc;
+ if (_hwc->name != NULL)
+ hnew->name = strdup (_hwc->name);
+ else
+ hnew->name = NULL;
+ if (_hwc->int_name != NULL)
+ hnew->int_name = strdup (_hwc->int_name);
+ else
+ hnew->int_name = NULL;
+ if (_hwc->metric != NULL)
+ hnew->metric = strdup (_hwc->metric);
+ else
+ hnew->metric = NULL;
+ if (_hwc->short_desc != NULL)
+ hnew->short_desc = strdup (_hwc->short_desc);
+ else
+ hnew->short_desc = NULL;
+ if (_hwc->reg_list != NULL)
+ {
+ hnew->reg_list = (regno_t*) malloc (sizeof (regno_t*) * MAX_PICS);
+ // poor way of dealing with malloc failure
+ if (hnew->reg_list)
+ {
+ for (int i = 0; i < MAX_PICS; i++)
+ {
+ hnew->reg_list[i] = _hwc->reg_list[i];
+ if (hnew->reg_list[i] == REGNO_ANY)
+ break;
+ }
+ }
+ }
+}
+
+// Routine to initialize the HWC tables, set up the default experiment, etc.
+void
+Coll_Ctrl::setup_hwc ()
+{
+ static bool is_hwc_setup = false;
+ if (is_hwc_setup == true)
+ return;
+ // try to set the default counters
+ is_hwc_setup = true;
+ set_hwcdefault ();
+}
+
+hrtime_t
+Coll_Ctrl::clkprof_timer_2_hwcentry_min_time (int target_clkprof_usec)
+{
+ hrtime_t hwc_nanosec;
+ if (target_clkprof_usec == clk_params.normval)
+ hwc_nanosec = HWCTIME_ON;
+ else if (target_clkprof_usec == clk_params.lowval)
+ hwc_nanosec = HWCTIME_LO;
+ else if (target_clkprof_usec == clk_params.hival)
+ hwc_nanosec = HWCTIME_HI;
+ else
+ hwc_nanosec = 1000LL * target_clkprof_usec; // nanoseconds
+ return hwc_nanosec;
+}
+
+void
+Coll_Ctrl::set_clkprof_timer_target (int microseconds)
+{
+ clkprof_timer = microseconds;
+ clkprof_timer_target = microseconds;
+ hrtime_t hwc_min_time_nanosec = clkprof_timer_2_hwcentry_min_time (microseconds);
+ for (int ii = 0; ii < hwcprof_enabled_cnt; ii++)
+ {
+ hwctr[ii].min_time_default = hwc_min_time_nanosec;
+ hwc_update_val (&hwctr[ii]);
+ }
+}
+
+void
+Coll_Ctrl::adjust_clkprof_timer (int use)
+{
+ clkprof_timer = use;
+}
+
+/* set HWC counter set from a string */
+char * /* return an error string */
+Coll_Ctrl::set_hwcstring (const char *string, char **warnmsg)
+{
+ *warnmsg = NULL;
+ if (string == NULL || strcmp (string, "off") == 0)
+ {
+ hwcprof_enabled_cnt = 0;
+ return NULL;
+ }
+ setup_hwc ();
+ int old_cnt = hwcprof_enabled_cnt;
+ int old_hwcprof_default = hwcprof_default;
+
+ /* reset any previous count to zero */
+ hwcprof_enabled_cnt = 0;
+ char *ret = add_hwcstring (string, warnmsg);
+ if (ret != NULL)
+ {
+ // restore previous setting
+ hwcprof_enabled_cnt = old_cnt;
+ hwcprof_default = old_hwcprof_default;
+ }
+ return ret;
+}
+
+/* add additional HWC counters to counter set from string */
+char * /* return an error string */
+Coll_Ctrl::add_hwcstring (const char *string, char **warnmsg)
+{
+ *warnmsg = NULL;
+ if (string == NULL || strcmp (string, "off") == 0)
+ {
+ hwcprof_enabled_cnt = 0;
+ return NULL;
+ }
+ setup_hwc ();
+ int rc = 0;
+ int old_cnt = hwcprof_enabled_cnt;
+ int prev_cnt = hwcprof_enabled_cnt;
+ // int old_hwcprof_default = hwcprof_default;
+ char UEbuf[MAXPATHLEN * 5];
+ int UEsz;
+ Hwcentry tmpctr[MAX_PICS];
+ Hwcentry * ctrtable[MAX_PICS];
+ char *emsg;
+ char *wmsg;
+ UEbuf[0] = 0;
+ UEsz = sizeof (UEbuf);
+ if (opened == 1)
+ return strdup (GTXT ("Experiment is active; command ignored.\n"));
+ if (hwcprof_default == 0)
+ {
+ /* Copy the counters already defined */
+ for (int ii = 0; ii < prev_cnt; ii++)
+ tmpctr[ii] = hwctr[ii];
+ }
+ else /* the previously-defined counters were defaulted; don't copy them */
+ prev_cnt = 0;
+
+ /* look up the CPU version */
+ cpc_cpuver = hwc_get_cpc_cpuver ();
+ if (string && *string)
+ {
+ /* lookup counters */
+ /* set up a pointer array */
+ for (unsigned ii = 0; ii < MAX_PICS; ii++)
+ ctrtable[ii] = &tmpctr[ii];
+ hrtime_t global_min_time = clkprof_timer_2_hwcentry_min_time (clkprof_timer_target);
+ rc = hwc_lookup (kernelHWC, global_min_time, string, &ctrtable[prev_cnt], MAX_PICS - prev_cnt, &emsg, &wmsg);
+ if (wmsg != NULL)
+ *warnmsg = wmsg;
+ if (rc < 0)
+ return emsg;
+ /* set count for sum of old and new counters */
+ rc = rc + prev_cnt;
+ }
+
+ /* even though the actual hwctr[] array is not updated, we can check consistency */
+ char *ret = check_consistency ();
+ if (ret != NULL)
+ {
+ hwcprof_enabled_cnt = old_cnt;
+ return ret;
+ }
+
+ /* finally, validate the full counter set */
+ emsg = hwc_validate_ctrs (kernelHWC, ctrtable, rc);
+ if (emsg != NULL)
+ {
+ hwcprof_enabled_cnt = old_cnt;
+ return emsg;
+ }
+
+ /* success, update real counters and the string for them */
+ /* turn off the default */
+ hwcprof_default = 0;
+ hwcprof_enabled_cnt = rc;
+ free (hwc_string);
+ for (int ii = 0; ii < hwcprof_enabled_cnt; ii++)
+ {
+ /* shallow copy of new counters */
+ hwctr[ii] = tmpctr[ii];
+ char *rateString = hwc_rate_string (&hwctr[ii], 0);
+ snprintf (UEbuf + strlen (UEbuf), UEsz - strlen (UEbuf),
+ NTXT (",%s,%s"), hwctr[ii].name,
+ rateString ? rateString : "");
+ free (rateString);
+ }
+ /* now duplicate that string, skipping the leading comma */
+ hwc_string = strdup (&UEbuf[1]);
+ return NULL;
+}
+
+/* add default HWC counters to counter set with resolution (on, hi, or lo) */
+/* Note that the resultion will also be used to set the clock-profiling default */
+char * /* return an error string */
+Coll_Ctrl::add_default_hwcstring (const char *resolution, char **warnmsg, bool add, bool forKernel)
+{
+ setup_hwc ();
+ *warnmsg = NULL;
+ char *def_string = hwc_get_default_cntrs2 (forKernel, 1);
+ if (def_string == NULL)
+ {
+ /* no string defined, format and return an error message */
+ char cpuname[128];
+ hwc_get_cpuname (cpuname, sizeof (cpuname));
+ return dbe_sprintf (GTXT ("No default HW counter set is defined for %s\n"), cpuname);
+ }
+ int len = strlen (def_string);
+ if (len == 0)
+ {
+ /* string zero-length, meaning default counters can't be used */
+ char cpuname[128];
+ hwc_get_cpuname (cpuname, sizeof (cpuname));
+ return dbe_sprintf (GTXT ("HW counter set for %s cannot be loaded on this system\n"), cpuname);
+ }
+ /* allocate return string */
+ int retsize = 2 * len + 10;
+ char *ret = (char *) malloc (retsize);
+ if (ret == NULL)
+ return strdup (GTXT ("internal error formating HW counter set; malloc failed\n"));
+ *ret = 0;
+ char *retp = ret;
+ char *stringp = def_string;
+ int first = 1;
+ char *hwc_defaultx = strdup (def_string);
+
+ /* now massage the string in order to insert resolution for each counter */
+ for (;;)
+ {
+ /* find the next comma */
+ char * next;
+ char *nextp;
+ if (first == 1)
+ nextp = stringp;
+ else
+ nextp = stringp + 1;
+ first = 0;
+ if ((next = strchr (nextp, (int) ',')) != NULL)
+ {
+ if (next == nextp)
+ {
+ /* next counter is zero-length -- invalid string */
+ char cpuname[128];
+ hwc_get_cpuname (cpuname, sizeof (cpuname));
+ free (ret);
+ ret = dbe_sprintf (GTXT ("HW counter set for %s, \"%s\", format error\n"), cpuname, hwc_defaultx);
+ free (hwc_defaultx);
+ return ret;
+ }
+ /* another field found */
+ *next = 0;
+ char nextc = *(next + 1);
+ if ((nextc == 0) || (nextc == ','))
+ {
+ /* either ,, between fields, or string ends in comma */
+ /* append the string */
+ strncat (retp, stringp, (retsize - strlen (retp) - 1));
+ strncat (retp, ",", (retsize - strlen (retp) - 1));
+ strncat (retp, resolution, (retsize - strlen (retp) - 1));
+ if (nextc == 0) /* string ended in comma; we're done */
+ break;
+ }
+ else
+ {
+ /* string had only one comma between counter names; that's not valid */
+ char cpuname[128];
+ hwc_get_cpuname (cpuname, sizeof (cpuname));
+ free (ret);
+ ret = dbe_sprintf (GTXT ("HW counter set for %s, \"%s\", format error\n"), cpuname, hwc_defaultx);
+ free (hwc_defaultx);
+ return ret;
+ }
+ /* string had ,, between fields; move to next field */
+ stringp = next + 1;
+ if (* (stringp + 1) == 0) /* name ended in ,, -- we're done */
+ break;
+ continue;
+ }
+ else
+ {
+ /* no comma found, add the last counter and the comma and resolution */
+ strncat (retp, stringp, (retsize - strlen (retp) - 1));
+ strncat (retp, ",", (retsize - strlen (retp) - 1));
+ strncat (retp, resolution, (retsize - strlen (retp) - 1));
+ break;
+ }
+ }
+
+ /* we have now formatted the new string, with resolution inserted */
+ char *ccret;
+ if (add == true)
+ ccret = add_hwcstring (ret, warnmsg);
+ else
+ ccret = set_hwcstring (ret, warnmsg);
+ free (hwc_defaultx);
+ free (ret);
+
+ /* now set the clock-profiling timer, if on by default */
+ if (clkprof_default == 1)
+ {
+ if (strcmp (resolution, NTXT ("on")) == 0)
+ set_clkprof_timer_target (clk_params.normval);
+ else if (strcmp (resolution, NTXT ("lo")) == 0)
+ set_clkprof_timer_target (clk_params.lowval);
+ else if (strcmp (resolution, NTXT ("hi")) == 0)
+ set_clkprof_timer_target (clk_params.hival);
+ }
+ return ccret;
+}
+
+void
+Coll_Ctrl::set_hwcdefault ()
+{
+ char *string = hwc_get_default_cntrs2 (kernelHWC, 1);
+ if (string != NULL)
+ {
+ if (strlen (string) == 0)
+ hwcprof_default = 0;
+ else
+ {
+ char * warnmsg = NULL;
+ char *ccret = add_hwcstring (string, &warnmsg);
+ if (ccret != NULL)
+ {
+#if 0
+ /* set string to zero-length so that it won't be used again */
+ hwc_set_default_cntrs (kernelHWC, NTXT (""));
+#endif
+ hwcprof_default = 0;
+ }
+ else
+ hwcprof_default = 1;
+ }
+ free (string);
+ }
+ else
+ hwcprof_default = 0;
+}
+
+void
+Coll_Ctrl::disable_hwc ()
+{
+ hwcprof_enabled_cnt = 0;
+ hwcprof_default = 0;
+ free (hwc_string);
+ hwc_string = NULL;
+}
+
+char *
+Coll_Ctrl::set_sample_period (const char *string)
+{
+ int val;
+ if (opened == 1)
+ return strdup (GTXT ("Experiment is active; command ignored.\n"));
+ if (string == NULL || strcmp (string, "on") == 0)
+ val = 1;
+ else if (strcmp (string, "off") == 0)
+ val = 0;
+ else
+ {
+ /* string should be a number > 0 */
+ char *endchar = NULL;
+ val = (int) strtol (string, &endchar, 0);
+ if (*endchar != 0 || val <= 0)
+ return dbe_sprintf (GTXT ("Unrecognized sample period `%s'\n"), string);
+ }
+ /* set that value */
+ int prev_sample_period = sample_period;
+ sample_period = val;
+ char *ret = check_consistency ();
+ if (ret != NULL)
+ {
+ sample_period = prev_sample_period;
+ return ret;
+ }
+ sample_default = 0;
+ return NULL;
+}
+
+char *
+Coll_Ctrl::set_size_limit (const char *string)
+{
+ if (opened == 1)
+ return strdup (GTXT ("Experiment is active; command ignored.\n"));
+ if (string == NULL || strlen (string) == 0
+ || strcmp (string, "unlimited") == 0 || strcmp (string, "none") == 0)
+ {
+ size_limit = 0;
+ return NULL;
+ }
+ /* string should be a number >0; 0 is an error */
+ char *endchar = NULL;
+ int val = (int) strtol (string, &endchar, 0);
+ if (*endchar != 0 || val <= 0)
+ return dbe_sprintf (GTXT ("Unrecognized size limit `%s'\n"), string);
+ size_limit = val;
+ return 0;
+}
+
+void
+Coll_Ctrl::build_data_desc ()
+{
+ char spec[DD_MAXPATHLEN];
+ spec[0] = 0;
+
+ // Put sample sig before clock profiling. Dbx uses PROF
+ // for that purpose and we want it to be processed first.
+ if (project_home)
+ snprintf (spec + strlen (spec), sizeof (spec) - strlen (spec), "P:%s;", project_home);
+ if (sample_sig != 0)
+ snprintf (spec + strlen (spec), sizeof (spec) - strlen (spec), "g:%d;", sample_sig);
+ if (pauseresume_sig != 0)
+ snprintf (spec + strlen (spec), sizeof (spec) - strlen (spec), "d:%d%s;", pauseresume_sig,
+ (pauseresume_pause == 1 ? "p" : ""));
+ if (clkprof_enabled == 1)
+ snprintf (spec + strlen (spec), sizeof (spec) - strlen (spec), "p:%d;", clkprof_timer);
+ if (synctrace_enabled == 1)
+ snprintf (spec + strlen (spec), sizeof (spec) - strlen (spec), "s:%d,%d;", synctrace_thresh, synctrace_scope);
+ if (heaptrace_enabled == 1)
+ snprintf (spec + strlen (spec), sizeof (spec) - strlen (spec), "H:%d;", heaptrace_checkenabled);
+ if (iotrace_enabled == 1)
+ snprintf (spec + strlen (spec), sizeof (spec) - strlen (spec), "i:;");
+ if (hwcprof_enabled_cnt > 0)
+ {
+ snprintf (spec + strlen (spec), sizeof (spec) - strlen (spec), "h:%s",
+ (hwcprof_default == true) ? "*" : "");
+ for (int ii = 0; ii < hwcprof_enabled_cnt; ii++)
+ {
+ /* min_time is a "new" field.
+ *
+ * To help process_data_descriptor() in hwcfuncs.c parse
+ * the HWC portion of this string -- specifically, to
+ * recognize min_time when it's present and skip over
+ * when it's not -- we prepend 'm' to the min_time value.
+ *
+ * When we no longer worry about, say, an old dbx
+ * writing this string and a new libcollector looking for
+ * the min_time field, the 'm' character can be
+ * removed and process_data_descriptor() simplified.
+ */
+ hrtime_t min_time = hwctr[ii].min_time;
+ if (min_time == HWCTIME_TBD)
+ // user did not specify any value for overflow rate
+ min_time = hwctr[ii].min_time_default;
+ snprintf (spec + strlen (spec), sizeof (spec) - strlen (spec),
+ "%s%s:%s:%d:%d:m%lld:%d:%d:0x%x", ii ? "," : "",
+ strcmp (hwctr[ii].name, hwctr[ii].int_name) ? hwctr[ii].name : "",
+ hwctr[ii].int_name, hwctr[ii].reg_num, hwctr[ii].val,
+ min_time, ii, /*tag*/ hwctr[ii].timecvt, hwctr[ii].memop);
+ }
+ snprintf (spec + strlen (spec), sizeof (spec) - strlen (spec), ";");
+ }
+ if ((time_run != 0) || (start_delay != 0))
+ {
+ if (start_delay != 0)
+ snprintf (spec + strlen (spec), sizeof (spec) - strlen (spec), "t:%d:%d;", start_delay, time_run);
+ else
+ snprintf (spec + strlen (spec), sizeof (spec) - strlen (spec), "t:%d;", time_run);
+ }
+ if (sample_period != 0)
+ snprintf (spec + strlen (spec), sizeof (spec) - strlen (spec), "S:%d;",
+ sample_period);
+ if (size_limit != 0)
+ snprintf (spec + strlen (spec), sizeof (spec) - strlen (spec), "L:%d;",
+ size_limit);
+ if (java_mode != 0)
+ snprintf (spec + strlen (spec), sizeof (spec) - strlen (spec), "j:%d;", (int) java_mode);
+ if (follow_mode != FOLLOW_NONE)
+ snprintf (spec + strlen (spec), sizeof (spec) - strlen (spec), "F:%d;", (int) follow_mode);
+ snprintf (spec + strlen (spec), sizeof (spec) - strlen (spec), "a:%s;", archive_mode);
+ if (strlen (spec) + 1 >= sizeof (spec))
+ abort ();
+ free (data_desc);
+ data_desc = strdup (spec);
+}
+
+char *
+Coll_Ctrl::check_group ()
+{
+ char group_file[MAXPATHLEN];
+ if (expt_group == NULL)
+ return NULL;
+ // Is the group an relative path, with a store directory set?
+ if ((expt_group[0] == '/') || ((udir_name == NULL) || (udir_name[0] == '0')))
+ snprintf (group_file, sizeof (group_file), "%s", expt_group);
+ else // relative path, store directory; make group_file in that directory
+ snprintf (group_file, sizeof (group_file), "%s/%s", udir_name, expt_group);
+ // See if we can write the group file
+ int ret = access (group_file, W_OK);
+ if (ret != 0)
+ {
+ if (errno == ENOENT)
+ {
+ char *stmp = group_file;
+ char *dir = dirname (stmp);
+ ret = access (dir, W_OK);
+ if (ret != 0) // group file does not exist;
+ return dbe_sprintf (GTXT ("Directory (%s) for group file %s is not writeable: %s\n"),
+ dir, group_file, strerror (errno));
+ }
+ else
+ return dbe_sprintf (GTXT ("Group file %s is not writeable: %s\n"),
+ group_file, strerror (errno));
+ }
+ return NULL;
+}
+
+char *
+Coll_Ctrl::join_group ()
+{
+ int tries = 0;
+ int groupfd;
+ FILE *file;
+ char group_file[MAXPATHLEN];
+ struct stat statbuf;
+ struct flock flockbuf;
+ flockbuf.l_type = F_WRLCK;
+ flockbuf.l_whence = SEEK_SET;
+ flockbuf.l_start = 0;
+ flockbuf.l_len = 0;
+ if (expt_group == NULL)
+ return NULL;
+ // Is the group an relative path, with a store directory set?
+ if (expt_group[0] == '/' || udir_name == NULL || udir_name[0] == '0')
+ snprintf (group_file, sizeof (group_file), "%s", expt_group);
+ else // relative path, store directory; make group_file in that directory
+ snprintf (group_file, sizeof (group_file), "%s/%s", udir_name, expt_group);
+ for (;;)
+ {
+ tries++;
+ // try to open the group file
+ while ((groupfd = open (group_file, O_RDWR)) >= 0)
+ {
+ if (uinterrupt == 1)
+ {
+ close (groupfd);
+ return strdup (GTXT ("user interrupt\n"));
+ }
+ // it's opened, now lock it
+ if (fcntl (groupfd, F_SETLK, &flockbuf) != -1)
+ {
+ // we got the lock; check the file size
+ if (fstat (groupfd, &statbuf) != 0)
+ {
+ // can't stat the file -- give up
+ close (groupfd);
+ return dbe_sprintf (GTXT ("Can't fstat group file %s\n"), group_file);
+ }
+ if (statbuf.st_size == 0)
+ {
+ // size is zero: we got the lock just as someone
+ // else created the group file
+ // close the file and release the lock; try again
+ close (groupfd);
+ continue;
+ }
+ else
+ {
+ // size is non-zero, add our record
+ file = fdopen (groupfd, "a");
+ if (file == NULL)
+ {
+ close (groupfd);
+ return dbe_sprintf (GTXT ("Can't access group file %s\n"), group_file);
+ }
+ if (fprintf (file, "%s\n", store_ptr) <= 0)
+ {
+ fclose (file);
+ return dbe_sprintf (GTXT ("Can't update group file %s\n"), group_file);
+ }
+ // close the file, releasing our lock
+ fclose (file);
+ return NULL;
+ }
+ }
+ else
+ {
+ // can't get the lock, close the file and try again
+ close (groupfd);
+ if (uinterrupt == 1)
+ return strdup (GTXT ("user interrupt\n"));
+ if (tries == 11900)
+ return dbe_sprintf (GTXT ("Timed out: waiting for group file %s\n"), group_file);
+#if 0
+ if (tries % 500 == 0)
+ USR_WARN (GTXT ("Waiting for group file %s . . ."), group_file);
+#endif
+ usleep (10000U);
+ continue;
+ }
+ }
+ // If the error was not that the file did not exist, report it
+ if (errno != ENOENT)
+ return dbe_sprintf (GTXT ("Can't open group file %s: %s\n"),
+ group_file, strerror (errno));
+ // the file did not exist, try to create it
+ groupfd = open (group_file, O_CREAT | O_EXCL | O_RDWR, 0666);
+ if (groupfd < 0)
+ {
+ // we could not create the file
+ if (errno == EEXIST)
+ continue;
+ return dbe_sprintf (GTXT ("Can't create group file %s: %s\n"),
+ group_file, strerror (errno));
+ }
+ // we created the group file, now lock it, waiting for the lock
+ while (fcntl (groupfd, F_SETLKW, &flockbuf) == -1)
+ {
+ // we created the file, but couldn't lock it
+ if (errno != EINTR)
+ return dbe_sprintf (GTXT ("Unable to lock group file %s\n"), group_file);
+ }
+ // we created and locked the file, write to it
+ file = fdopen (groupfd, "a");
+ if (file == NULL)
+ {
+ close (groupfd);
+ return dbe_sprintf (GTXT ("Can't access group file %s\n"), group_file);
+ }
+ // write the header line
+ if (fprintf (file, "%s\n", SP_GROUP_HEADER) <= 0)
+ {
+ fclose (file);
+ return dbe_sprintf (GTXT ("Can't initialize group file %s\n"), group_file);
+ }
+ if (fprintf (file, "%s\n", store_ptr) <= 0)
+ {
+ fclose (file);
+ return dbe_sprintf (GTXT ("Can't update group file %s\n"), group_file);
+ }
+ // finally, close the file, releasing the lock
+ fclose (file);
+ return NULL;
+ }
+ // never reached
+}
+
+char *
+Coll_Ctrl::set_directory (char *dir, char **warn)
+{
+ struct stat statbuf;
+ *warn = NULL;
+ if (opened == 1)
+ return strdup (GTXT ("Experiment is active; command ignored.\n"));
+ if (stat (dir, &statbuf) != 0)
+ return dbe_sprintf (GTXT ("Can't set directory `%s': %s\n"),
+ dir, strerror (errno));
+ if (!S_ISDIR (statbuf.st_mode))
+ return dbe_sprintf (GTXT ("Can't set directory `%s': %s\n"),
+ dir, strerror (ENOTDIR));
+ free (udir_name);
+ udir_name = strdup (dir);
+
+ // Process new setting
+ *warn = preprocess_names ();
+ if ((uexpt_name != NULL) || (interactive != 0))
+ {
+ char *ret = update_expt_name (true, true);
+ if (ret != NULL)
+ {
+ if (*warn != NULL)
+ {
+ char *msg = dbe_sprintf ("%s%s", *warn, ret);
+ free (*warn);
+ free (ret);
+ *warn = msg;
+ }
+ else
+ *warn = ret;
+ }
+ }
+ else
+ (void) update_expt_name (false, false);
+ return NULL; // All is OK
+}
+
+int
+Coll_Ctrl::set_target (char* targetname)
+{
+ free (target_name);
+ target_name = NULL;
+ if (targetname != NULL)
+ target_name = strdup (targetname);
+ return 0;
+}
+
+void
+Coll_Ctrl::set_default_stem (const char* stem)
+{
+ default_stem = strdup (stem);
+ preprocess_names ();
+ (void) update_expt_name (false, false); // no warnings
+}
+
+char *
+Coll_Ctrl::set_expt (const char *ename, char **warn, bool overwriteExp)
+{
+ *warn = NULL;
+ if (ename == NULL)
+ {
+ free (uexpt_name);
+ uexpt_name = NULL;
+ return NULL;
+ }
+ char *exptname = canonical_path(strdup(ename));
+ size_t i = strlen (exptname);
+ if (i < 4 || strcmp (&exptname[i - 3], ".er") != 0)
+ {
+ free (exptname);
+ return dbe_sprintf (GTXT ("Experiment name `%s' must end in `.er'\n"),
+ ename);
+ }
+ // Name is OK
+ free (uexpt_name);
+ uexpt_name = exptname;
+ preprocess_names ();
+ char *err = update_expt_name (true, true, overwriteExp);
+ if (err != NULL)
+ return err;
+ if (overwriteExp)
+ {
+ char *nm = dbe_sprintf ("%s/%s", store_dir, base_name);
+ struct stat statbuf;
+ char *cmd = dbe_sprintf ("/bin/rm -rf %s >/dev/null 2>&1", nm);
+ system (cmd);
+ free (cmd);
+ if (stat (nm, &statbuf) == 0)
+ return dbe_sprintf (GTXT ("Cannot remove experiment `%s'\n"), nm);
+ if (errno != ENOENT)
+ return dbe_sprintf (GTXT ("Cannot remove experiment `%s'\n"), nm);
+ free (nm);
+ }
+ *warn = update_expt_name (true, false);
+ return NULL;
+}
+
+char *
+Coll_Ctrl::set_group (char *groupname)
+{
+ if (opened == 1)
+ return strdup (GTXT ("Experiment is active; command ignored.\n"));
+ if (expt_group != NULL)
+ {
+ free (expt_group);
+ expt_group = NULL;
+ }
+ if (groupname == NULL)
+ {
+ // reset the name
+ preprocess_names ();
+ (void) update_expt_name (true, false);
+ return NULL;
+ }
+ int i = (int) strlen (groupname);
+ if (i < 5 || strcmp (&groupname[i - 4], ".erg") != 0)
+ return dbe_sprintf (GTXT ("Experiment group name `%s'must end in `.erg'\n"), groupname);
+ expt_group = strdup (groupname);
+ preprocess_names ();
+ (void) update_expt_name (true, false);
+ return NULL;
+}
+
+char *
+Coll_Ctrl::set_java_mode (const char *string)
+{
+ struct stat statbuf;
+ if (opened == 1)
+ return strdup (GTXT ("Experiment is active; command ignored.\n"));
+ if (string == NULL || strlen (string) == 0 || strcmp (string, "on") == 0)
+ {
+#if defined(GPROFNG_JAVA_PROFILING)
+ int prev_java_mode = java_mode;
+ int prev_java_default = java_default;
+ java_mode = 1;
+ java_default = 0;
+ char *ret = check_consistency ();
+ if (ret != NULL)
+ {
+ java_mode = prev_java_mode;
+ java_default = prev_java_default;
+ return ret;
+ }
+ return NULL;
+#else
+ return strdup (GTXT ("gprofng was built without support for profiling Java applications\n"));
+#endif
+ }
+ if (strcmp (string, "off") == 0)
+ {
+ int prev_java_mode = java_mode;
+ int prev_java_default = java_default;
+ java_mode = 0;
+ java_default = 0;
+ char *ret = check_consistency ();
+ if (ret != NULL)
+ {
+ java_mode = prev_java_mode;
+ java_default = prev_java_default;
+ return ret;
+ }
+ free (java_path);
+ java_path = NULL;
+ return NULL;
+ }
+ /* any other value should be a path to Java installation directory */
+ if (stat (string, &statbuf) == 0)
+ {
+ if ((statbuf.st_mode & S_IFMT) == S_IFDIR)
+ {
+ // it's a directory -- set the Java path to it
+ int prev_java_mode = java_mode;
+ int prev_java_default = java_default;
+ java_mode = 1;
+ java_default = 0;
+ char *ret = check_consistency ();
+ if (ret != NULL)
+ {
+ java_mode = prev_java_mode;
+ java_default = prev_java_default;
+ return ret;
+ }
+ return set_java_path (string);
+ }
+ }
+ return dbe_sprintf (GTXT ("Java-profiling parameter is neither \"on\", nor \"off\", nor is it a directory: `%s'\n"), string);
+}
+
+char *
+Coll_Ctrl::set_java_path (const char *string)
+{
+ if (opened == 1)
+ return strdup (GTXT ("Experiment is active; command ignored.\n"));
+ free (java_path);
+ java_path = strdup (string);
+ return NULL;
+}
+
+char *
+Coll_Ctrl::set_java_args (char *string)
+{
+ char *next;
+ if (opened == 1)
+ return strdup (GTXT ("Experiment is active; command ignored.\n"));
+ char *prev_java_args = java_args;
+ if (string == NULL || strlen (string) == 0)
+ java_args = strdup ("");
+ else
+ java_args = strdup (string);
+ // now count the number of Java arguments
+ for (next = java_args; *next; next++)
+ {
+ if (*next == ' ' || *next == '\t')
+ continue;
+ njava_args++;
+ for (++next; *next; next++)
+ if (*next == ' ' || *next == '\t')
+ break;
+ if (!*next)
+ break;
+ }
+ if (njava_args == 0)
+ java_args = NULL;
+ char *ret = check_consistency ();
+ if (ret != NULL)
+ {
+ java_args = prev_java_args;
+ return ret;
+ }
+ free (prev_java_args);
+ return NULL;
+}
+
+char *
+Coll_Ctrl::set_follow_mode (const char *string)
+{
+ if (opened == 1)
+ return strdup (GTXT ("Experiment is active; command ignored.\n"));
+ free (follow_spec_usr);
+ free (follow_spec_cmp);
+ follow_spec_usr = NULL;
+ follow_spec_cmp = NULL;
+ if (string == NULL || strlen (string) == 0 || strcmp (string, "all") == 0
+ || strcmp (string, "on") == 0)
+ {
+ follow_mode = FOLLOW_ON;
+ follow_default = 0;
+ return NULL;
+ }
+ if (strcmp (string, "off") == 0)
+ {
+ follow_mode = FOLLOW_NONE;
+ follow_default = 0;
+ return NULL;
+ }
+
+ /* compile regular expression if string starts with "=" */
+ if (string[0] == '=' && string[1] != 0)
+ {
+ // user has specified a string matching specification
+ regex_t regex_desc;
+ int ercode;
+ const char *userspec = &string[1];
+ size_t newstrlen = strlen (userspec) + 3;
+ char * str = (char *) malloc (newstrlen);
+ if (str)
+ {
+ snprintf (str, newstrlen, "^%s$", userspec);
+ assert (strlen (str) == newstrlen - 1);
+ ercode = regcomp (&regex_desc, str, REG_EXTENDED | REG_NOSUB | REG_NEWLINE);
+ }
+ else
+ ercode = 1;
+ if (!ercode)
+ {
+ follow_spec_usr = strdup (string);
+ /* Ideally, follow_spec_cmp = [serialized regex_desc], */
+ /* so that libcollector wouldn't have to recompile it. */
+ /* For now, just copy the regular expression into follow_spec_cmp */
+ follow_spec_cmp = str;
+ follow_mode = FOLLOW_ALL;
+ follow_default = 0;
+ return NULL;
+ }
+ // syntax error in parsing string
+#if 0
+ char errbuf[256];
+ regerror (ercode, &regex_desc, errbuf, sizeof (errbuf));
+ fprintf (stderr, "Coll_Ctrl::set_follow_mode: regerror()=%s\n", errbuf);
+#endif
+ free (str);
+ }
+ return dbe_sprintf (GTXT ("Unrecognized follow-mode parameter `%s'\n"), string);
+}
+
+char *
+Coll_Ctrl::set_prof_idle (const char *string)
+{
+ if (opened == 1)
+ return strdup (GTXT ("Experiment is active; command ignored.\n"));
+ if (string == NULL || strlen (string) == 0 || strcmp (string, "on") == 0)
+ {
+ prof_idle = 1;
+ return NULL;
+ }
+ if (strcmp (string, "off") == 0)
+ {
+ prof_idle = 0;
+ return NULL;
+ }
+ return dbe_sprintf (GTXT ("Unrecognized profiling idle cpus parameter `%s'\n"), string);
+}
+
+char *
+Coll_Ctrl::set_archive_mode (const char *string)
+{
+ if (opened == 1)
+ return strdup (GTXT ("Experiment is active; command ignored.\n"));
+ if (string == NULL || strlen (string) == 0)
+ string = "on";
+ if (strcasecmp (string, "on") == 0 || strcasecmp (string, "off") == 0
+ || strcasecmp (string, "ldobjects") == 0
+ || strcasecmp (string, "usedldobjects") == 0
+ || strcasecmp (string, "src") == 0 || strcasecmp (string, "usedsrc") == 0
+ || strcasecmp (string, "all") == 0)
+ {
+ free (archive_mode);
+ archive_mode = strdup (string);
+ return NULL;
+ }
+ return dbe_sprintf (GTXT ("Unrecognized archive-mode parameter `%s'\n"), string);
+}
+
+char *
+Coll_Ctrl::set_sample_signal (int value)
+{
+ const char *buf;
+ if (opened == 1)
+ return strdup (GTXT ("Experiment is active; command ignored.\n"));
+ if (value == 0)
+ {
+ sample_sig = 0;
+ return NULL;
+ }
+ if (value == pauseresume_sig)
+ return report_signal_conflict (value);
+ if ((buf = strsignal (value)) != NULL)
+ sample_sig = value;
+ else
+ return dbe_sprintf (GTXT ("Invalid sample signal %d\n"), value);
+ return NULL;
+}
+
+/* find a signal by name */
+int
+Coll_Ctrl::find_sig (const char *string)
+{
+ int val;
+ char *signame_alloc = NULL;
+ const char *signame;
+ val = -1;
+ if (strcmp (string, "off") == 0)
+ return 0;
+ // see if the name begins with SIG
+ if (strncmp (string, "SIG", 3) != 0)
+ {
+ // no: add it
+ signame_alloc = (char *) malloc (strlen (string) + 3 + 1);
+ if (signame_alloc == NULL)
+ return -1;
+ strcpy (signame_alloc, "SIG");
+ strcpy (&signame_alloc[3], string);
+ signame = signame_alloc;
+ }
+ else
+ signame = string;
+
+ /* see if the string is a number */
+ char *endchar = NULL;
+ val = (int) strtol (signame, &endchar, 0);
+ if (*endchar != 0)
+ val = strtosigno (signame);
+ free (signame_alloc);
+ if (val == SIGKILL)
+ return -1;
+ return val;
+}
+
+char *
+Coll_Ctrl::set_pauseresume_signal (int value, int resume)
+{
+ if (opened == 1)
+ return strdup (GTXT ("Experiment is active; command ignored.\n"));
+ if (value == 0)
+ {
+ pauseresume_sig = 0;
+ return NULL;
+ }
+ if (value == sample_sig)
+ return report_signal_conflict (value);
+ if (strsignal (value) != NULL)
+ {
+ pauseresume_sig = value;
+ pauseresume_pause = resume;
+ }
+ else
+ return dbe_sprintf (GTXT ("Invalid pause-resume (delayed initialization) signal %d\n"), value);
+ return NULL;
+}
+
+char *
+Coll_Ctrl::report_signal_conflict (int value)
+{
+ const char *xbuf = strsignal (value);
+ if (xbuf != NULL)
+ return dbe_sprintf (GTXT ("Signal %s (%d) can not be used for both sample and pause-resume (delayed initialization)\n"),
+ xbuf, value);
+ return dbe_sprintf (GTXT ("Signal %d can not be used for both sample and pause-resume (delayed initialization)\n"),
+ value);
+}
+
+char *
+Coll_Ctrl::set_debug_mode (int value)
+{
+ if (opened == 1)
+ return strdup (GTXT ("Experiment is active; command ignored.\n"));
+ debug_mode = value;
+ return NULL;
+}
+
+char *
+Coll_Ctrl::create_exp_dir ()
+{
+ int max = 4095; // 0xFFF - can be increased if it seems too low
+ for (int i = 0; i < max; i++)
+ {
+ if (mkdir (store_ptr,
+ S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH) != 0)
+ {
+ int err = errno;
+ if (err == EACCES)
+ return dbe_sprintf (GTXT ("Store directory %s is not writeable: %s\n"),
+ store_dir, strerror (err));
+ if (i + 1 >= max) // no more attempts
+ return dbe_sprintf (GTXT ("Unable to create directory `%s' -- %s\n%s: %d\n"),
+ store_ptr, strerror (err),
+ GTXT ("collect: Internal error: loop count achieved"),
+ max);
+ char *ermsg = update_expt_name (false, false, true);
+ if (ermsg != NULL)
+ {
+ char *msg = dbe_sprintf (GTXT ("Unable to create directory `%s' -- %s\n"),
+ store_ptr, ermsg);
+ free (ermsg);
+ return msg;
+ }
+ continue;
+ }
+ return NULL; // All is OK
+ }
+ return dbe_sprintf (GTXT ("Unable to create directory `%s'\n"), store_ptr);
+}
+
+char *
+Coll_Ctrl::get_exp_name (const char *stembase)
+{
+ expno = 1;
+ return dbe_sprintf ("%s.%d.er", stembase, expno);
+}
+
+char *
+Coll_Ctrl::preprocess_names ()
+{
+ char buf[MAXPATHLEN];
+ char msgbuf[MAXPATHLEN];
+ char *ret = NULL;
+
+ /* convert the experiment name and directory into store name/dir */
+ /* free the old strings */
+ if (store_dir != NULL)
+ {
+ free (store_dir);
+ store_dir = NULL;
+ }
+ if (expt_dir != NULL)
+ {
+ free (expt_dir);
+ expt_dir = NULL;
+ }
+ if (base_name != NULL)
+ {
+ free (base_name);
+ base_name = NULL;
+ }
+ if (expt_name != NULL)
+ {
+ free (expt_name);
+ expt_name = NULL;
+ }
+ expno = 1;
+ if (uexpt_name != NULL)
+ expt_name = strdup (uexpt_name);
+ else
+ {
+ // no user name -- pick a default
+ char *c;
+ char *stem;
+ char *stembase;
+ if (expt_group == NULL)
+ {
+ stem = strdup (default_stem);
+ stembase = stem;
+ }
+ else
+ {
+ stem = strdup (expt_group);
+ stem[strlen (stem) - 4] = 0;
+ stembase = stem;
+ // now remove any leading directory
+ for (int i = 0;; i++)
+ {
+ if (stem[i] == 0)
+ break;
+ if (stem[i] == '/')
+ stembase = &stem[i + 1];
+ }
+ if (strlen (stembase) == 0)
+ {
+ free (stem);
+ stem = strdup (default_stem);
+ stembase = stem;
+ }
+ }
+ c = get_exp_name (stembase);
+ expt_name = c;
+ free (stem);
+ }
+ snprintf (buf, sizeof (buf), NTXT ("%s"), expt_name);
+ if (buf[0] == '/')
+ {
+ // it's a full path name
+ if (udir_name != NULL)
+ {
+ snprintf (msgbuf, sizeof (msgbuf),
+ GTXT ("Warning: Experiment name is an absolute path; directory name %s ignored.\n"),
+ udir_name);
+ ret = strdup (msgbuf);
+ }
+ }
+
+ // now extract the directory and basename
+ int lastslash = 0;
+ for (int i = 0;; i++)
+ {
+ if (buf[i] == 0)
+ break;
+ if (buf[i] == '/')
+ lastslash = i;
+ }
+ expt_dir = strdup (buf);
+ if (lastslash != 0)
+ base_name = strdup (&buf[lastslash + 1]);
+ else
+ base_name = strdup (buf);
+ expt_dir[lastslash] = 0;
+ if (expt_dir[0] == '/')
+ store_dir = strdup (expt_dir);
+ else if ((udir_name == NULL) || (udir_name[0] == 0))
+ {
+ if (expt_dir[0] == 0)
+ store_dir = strdup (".");
+ else
+ store_dir = strdup (expt_dir);
+ }
+ else
+ {
+ /* udir_name is a non-empty string */
+ if (expt_dir[0] == 0)
+ store_dir = strdup (udir_name);
+ else
+ {
+ snprintf (buf, sizeof (buf), "%s/%s", udir_name, expt_dir);
+ store_dir = strdup (buf);
+ }
+ }
+ free (store_ptr);
+ if (strcmp (store_dir, ".") == 0)
+ store_ptr = strdup (base_name);
+ else
+ {
+ snprintf (buf, sizeof (buf), "%s/%s", store_dir, base_name);
+ store_ptr = strdup (buf);
+ }
+
+ // determine the file system type
+ if (strcmp (store_dir, prev_store_dir) != 0)
+ {
+ free (prev_store_dir);
+ prev_store_dir = strdup (store_dir);
+ const char *fstype = get_fstype (store_dir);
+ if (interactive && enabled && (fstype != NULL) && (nofswarn == 0))
+ {
+ snprintf (msgbuf, sizeof (msgbuf),
+ GTXT ("%sExperiment directory is set to a file system of type \"%s\",\n which may distort the measured performance;\n it is preferable to record to a local disk.\n"),
+ (ret == NULL ? "" : ret), fstype);
+ free (ret);
+ ret = strdup (msgbuf);
+ }
+ }
+ return ret;
+}
+
+char *
+Coll_Ctrl::update_expt_name (bool chgmsg, bool chkonly, bool newname)
+{
+ char *ret = NULL;
+ struct stat statbuf;
+ // make sure the name ends in .er
+ // set count to the length of the name
+ int count = (int) strlen (base_name);
+
+ // this should have been checked already, so we can abort
+ if (count < 4 || strcmp (&base_name[count - 3], ".er") != 0)
+ abort ();
+ int pcount = count - 4;
+ if (!newname)
+ { // check if old name can be used
+ char fullname[MAXPATHLEN];
+ snprintf (fullname, sizeof (fullname), "%s/%s", store_dir, base_name);
+ if (stat (fullname, &statbuf) != 0)
+ if (errno == ENOENT) // name does not exist, we can use it
+ return NULL;
+ }
+ else if (chkonly)
+ return NULL;
+
+ // current name will not work, update the name
+ DIR *dir;
+ struct dirent *dir_entry;
+
+ // see if there's a numeric field in front of the .er of the name
+ int digits = 0;
+ while (isdigit ((int) (base_name[pcount])) != 0)
+ {
+ pcount--;
+ if (pcount == 0) // name is of the form 12345.er; don't update it
+ return dbe_sprintf (GTXT ("name %s is in use and cannot be updated\n"),
+ base_name);
+ digits++;
+ }
+ if (digits == 0) // name is of form xyz.er (or xyz..er); don't update it
+ return dbe_sprintf (GTXT ("name %s is in use and cannot be updated\n"),
+ base_name);
+ if (base_name[pcount] != '.') // name is of form xyz123.er; don't update it
+ return dbe_sprintf (GTXT ("name %s is in use and cannot be updated\n"),
+ base_name);
+ if (chkonly)
+ return NULL;
+
+ // save the name for a changed message
+ char *oldbase = strdup (base_name);
+
+ // the name is of the from prefix.nnn.er; extract the value of nnn
+ int version = atoi (&base_name[pcount + 1]);
+ if (newname) // do not try to use old name
+ version++;
+ int max_version = version - 1;
+
+ // terminate the base_name string after that . yielding "prefix."
+ base_name[pcount + 1] = 0;
+ if ((dir = opendir (store_dir)) == NULL)
+ {
+ // ignore error -- we'll hit it again later
+ free (oldbase);
+ return NULL;
+ }
+
+ // find the maximum version in the directory
+ // count is the number of characters before the number
+ //
+ while ((dir_entry = readdir (dir)) != NULL)
+ {
+ count = (int) strlen (dir_entry->d_name);
+ if ((count < 4) || (strcmp (&dir_entry->d_name[count - 3], ".er") != 0))
+ continue;
+ // check that the name is of the form prefix.nnn.er; if not, skip it
+ if (strncmp (base_name, dir_entry->d_name, pcount + 1) == 0)
+ {
+ // the "prefix." part matches, terminate the entry name before the .er
+ dir_entry->d_name[count - 3] = 0;
+ char *lastchar;
+ int dversion = (int) strtol (&dir_entry->d_name[pcount + 1], &lastchar, 10);
+
+ // if it did not end where the .er was, skip it
+ if (*lastchar != 0)
+ continue;
+ if (dversion > max_version)
+ max_version = dversion;
+ }
+ }
+
+ // we now have the maximum version determined
+ char newbase[MAXPATHLEN];
+ base_name[pcount + 1] = 0;
+ version = max_version + 1;
+ snprintf (newbase, sizeof (newbase), "%s%d.er", base_name, version);
+ if ((strcmp (oldbase, newbase) != 0) && chgmsg)
+ {
+ ret = dbe_sprintf (GTXT ("name %s is in use; changed to %s\n"),
+ oldbase, newbase);
+ free (oldbase);
+ }
+ else
+ free (oldbase);
+ free (base_name);
+ base_name = strdup (newbase);
+
+ // now, reset expt_name to reflect new setting
+ free (expt_name);
+ if (expt_dir[0] == 0)
+ expt_name = strdup (base_name);
+ else
+ expt_name = dbe_sprintf ("%s/%s", expt_dir, base_name);
+ free (store_ptr);
+ if (strcmp (store_dir, ".") == 0)
+ store_ptr = strdup (base_name);
+ else
+ store_ptr = dbe_sprintf ("%s/%s", store_dir, base_name);
+ closedir (dir);
+ return ret;
+}
+
+void
+Coll_Ctrl::remove_exp_dir ()
+{
+ if (store_ptr == NULL)
+ return;
+ rmdir (store_ptr);
+ free (store_ptr);
+ store_ptr = NULL;
+ return;
+}
+
+void
+Coll_Ctrl::determine_profile_params ()
+{
+ struct itimerval itimer;
+ struct itimerval otimer;
+ int period;
+ long nperiod;
+ struct sigaction act;
+ struct sigaction old_handler;
+ memset (&act, 0, sizeof (struct sigaction));
+ period = 997;
+
+ // set SIGPROF handler to SIG_IGN
+ sigemptyset (&act.sa_mask);
+ act.sa_handler = SIG_IGN;
+ act.sa_flags = SA_RESTART | SA_SIGINFO;
+ if (sigaction (SIGPROF, &act, &old_handler) == -1)
+ {
+ /* couldn't set signal */
+ fprintf (stderr, GTXT ("Can't set SIGPROF: %s\n"), strerror (errno));
+ exit (1);
+ }
+
+ // set the timer to arbitrary resolution
+ itimer.it_interval.tv_sec = period / MICROSEC;
+ itimer.it_interval.tv_usec = period % MICROSEC;
+ itimer.it_value = itimer.it_interval;
+ setitimer (ITIMER_REALPROF, &itimer, &otimer);
+
+ // now reset the timer to turn it off
+ itimer.it_value.tv_sec = 0;
+ itimer.it_value.tv_usec = 0;
+ if (setitimer (ITIMER_REALPROF, &itimer, &otimer) == -1) // call failed
+ nperiod = -1;
+ else
+ nperiod = otimer.it_interval.tv_sec * MICROSEC + otimer.it_interval.tv_usec;
+
+ // check the returned value: is the what we asked for?
+ if (period == nperiod) // arbitrary precision is OK
+ set_clk_params (PROFINT_MIN, 1, PROFINT_MAX, PROFINT_HIGH, PROFINT_NORM, PROFINT_LOW);
+ else if (nperiod < 10000) // hi resolution allowed, but not arbitrary precision
+ set_clk_params ((int) nperiod, 1000, PROFINT_MAX, 1000, 10000, 100000);
+ else // low resolution only allowed
+ set_clk_params (10000, 10000, PROFINT_MAX, 1000, 10000, 100000);
+
+ // If old handler was default, ignore it; otherwise restore it
+ if (old_handler.sa_handler != SIG_DFL)
+ {
+ act.sa_handler = old_handler.sa_handler;
+ if (sigaction (SIGPROF, &act, &old_handler) == -1)
+ {
+ /* couldn't reset signal */
+ fprintf (stderr, GTXT ("Can't reset SIGPROF: %s\n"), strerror (errno));
+ exit (1);
+ }
+ }
+}
+
+const char *
+get_fstype (char *)
+{
+ /* On Linux, statvfs() doesn't return any information that seems to indicate
+ the filetype. The structure statvfs does not have any field/flag that
+ gives this information. Comparing the fields from
+ /usr/include/bits/statvfs.h:
+ unsigned long int f_fsid;
+ int __f_unused;
+ ^^^^ On Solaris, this is where f_basetype is
+ unsigned long int f_flag;
+ unsigned long int f_namemax;
+ XXX Need to revisit this XXX
+ */
+ return NULL; // no NFS warning on Linux for now
+}
+
+//========== Special functions to communicate with the Collector GUI ==========//
+
+/* Interface strings GUI <-> CLI */
+const char *ipc_str_exp_limit = "exp_limit";
+const char *ipc_str_time_limit = "time_limit";
+const char *ipc_str_arch_exp = "arch_exp";
+const char *ipc_str_descendant = "descendant";
+const char *ipc_str_clkprof = "clkprof";
+const char *ipc_str_hwcprof = "hwcprof";
+const char *ipc_str_hwc2_prof = "hwc2_prof";
+const char *ipc_str_javaprof = "javaprof";
+const char *ipc_str_sample = "sample";
+const char *ipc_str_sample_sig = "sample_sig";
+const char *ipc_str_pause_resume_sig = "pause_resume_sig";
+const char *ipc_str_synctrace = "synctrace";
+const char *ipc_str_heaptrace = "heaptrace";
+const char *ipc_str_iotrace = "iotrace";
+const char *ipc_str_count = "count";
+const char *ipc_str_prof_idle = "prof_idle"; // -x option
+// Standard answers
+const char *ipc_str_empty = "";
+const char *ipc_str_on = "on";
+const char *ipc_str_off = "off";
+const char *ipc_str_src = "src";
+const char *ipc_str_usedsrc = "usedsrc";
+const char *ipc_str_usedldobjects = "usedldobjects";
+const char *ipc_str_unlimited = "unlimited";
+const char *ipc_str_unknown_control = "Unknown control";
+const char *ipc_str_internal_error = "Internal error";
+
+/**
+ * Finds signal name
+ * @param signal
+ * @return NULL or signal name (pointer to allocated memory)
+ */
+char *
+Coll_Ctrl::find_signal_name (int signal)
+{
+ char *str_signal = NULL;
+ const char *buf = strsignal (signal);
+ if (buf != NULL)
+ str_signal = strdup (buf);
+ return str_signal;
+}
+
+/**
+ * Gets control's value
+ * @param control
+ * @return value
+ */
+char *
+Coll_Ctrl::get (char * control)
+{
+ int len = strlen (control);
+ if (!strncmp (control, ipc_str_exp_limit, len))
+ {
+ if ((size_limit > 0))
+ return dbe_sprintf ("%d", size_limit);
+ return strdup (ipc_str_unlimited);
+ }
+ if (!strncmp (control, ipc_str_time_limit, len))
+ {
+ if ((time_run != 0) || (start_delay != 0))
+ {
+ if (start_delay != 0)
+ {
+ if (time_run != 0)
+ return dbe_sprintf ("%ds-%ds", start_delay, start_delay + time_run);
+ return dbe_sprintf ("%ds-0s", start_delay);
+ }
+ return dbe_sprintf ("0s-%ds", time_run);
+ }
+ return strdup (ipc_str_unlimited);
+ }
+ if (strncmp (control, ipc_str_arch_exp, len) == 0)
+ return strdup (get_archive_mode ());
+ if (!strncmp (control, ipc_str_descendant, len))
+ {
+ switch (get_follow_mode ())
+ {
+ case FOLLOW_ON:
+ return strdup (ipc_str_on);
+ case FOLLOW_ALL:
+ return strdup (ipc_str_on);
+ case FOLLOW_NONE:
+ default:
+ return strdup (ipc_str_off);
+ }
+ }
+ if (!strncmp (control, ipc_str_prof_idle, len))
+ {
+ if (prof_idle == 0)
+ return strdup (ipc_str_off);
+ return strdup (ipc_str_on);
+ }
+ if (!strncmp (control, ipc_str_clkprof, len))
+ {
+ if (clkprof_default == 1 && clkprof_enabled == 1) // Default value
+ return strdup (ipc_str_empty);
+ if (clkprof_enabled == 0)
+ return strdup (ipc_str_off);
+ if ((clkprof_timer > 0))
+ return dbe_sprintf ("%d", clkprof_timer / 1000);
+ return strdup (ipc_str_internal_error);
+ }
+ if (!strncmp (control, ipc_str_hwcprof, len))
+ {
+ if (hwcprof_enabled_cnt == 0)
+ return strdup (ipc_str_off);
+ if (hwc_string != NULL)
+ return dbe_sprintf ("on\n%s", hwc_string);
+ return strdup (ipc_str_on); // XXX need more details?
+ }
+ if (!strncmp (control, ipc_str_javaprof, len))
+ {
+ if ((java_mode == 0))
+ return strdup (ipc_str_off);
+ return strdup (ipc_str_on);
+ }
+ if (!strncmp (control, ipc_str_sample, len))
+ {
+ if (sample_default == 1 && sample_period == 1) // Default value
+ return strdup (ipc_str_empty);
+ if (sample_period == 0)
+ return strdup (ipc_str_off);
+ if (sample_period > 0)
+ return dbe_sprintf ("%d", sample_period);
+ return strdup (ipc_str_internal_error);
+ }
+ if (!strncmp (control, ipc_str_sample_sig, len))
+ {
+ if ((sample_sig == 0))
+ return strdup (ipc_str_off);
+ char *str_signal = find_signal_name (sample_sig);
+ if (str_signal != NULL)
+ return str_signal;
+ return dbe_sprintf (GTXT ("Invalid sample signal %d\n"), sample_sig);
+ }
+ if (!strncmp (control, ipc_str_pause_resume_sig, len))
+ {
+ if (pauseresume_sig == 0)
+ return strdup (ipc_str_off);
+ char *str_signal = find_signal_name (pauseresume_sig);
+ if (str_signal != NULL)
+ return str_signal;
+ return dbe_sprintf (GTXT ("Invalid pause/resume signal %d\n"), pauseresume_sig);
+ }
+ if (!strncmp (control, ipc_str_synctrace, len))
+ {
+ if (synctrace_enabled == 0)
+ return strdup (ipc_str_off);
+ if (synctrace_thresh < 0)
+ return strdup ("on\nthreshold: calibrate");
+ if (synctrace_thresh == 0)
+ return strdup ("on\nthreshold: all");
+ return dbe_sprintf ("on\nthreshold: %d", synctrace_thresh);
+ }
+ if (!strncmp (control, ipc_str_heaptrace, len))
+ {
+ if ((heaptrace_enabled == 0))
+ return strdup (ipc_str_off);
+ return strdup (ipc_str_on);
+ }
+ if (!strncmp (control, ipc_str_iotrace, len))
+ {
+ if ((iotrace_enabled == 0))
+ return strdup (ipc_str_off);
+ return strdup (ipc_str_on);
+ }
+ if (!strncmp (control, ipc_str_count, len))
+ {
+ if ((count_enabled == 0))
+ return strdup (ipc_str_off);
+ if ((count_enabled < 0))
+ return strdup ("on\nstatic");
+ return strdup (ipc_str_on);
+ }
+ return strdup (ipc_str_unknown_control);
+}
+
+/**
+ * Resets control's value (restores the default value)
+ * @param control
+ * @param value
+ * @return error or warning or NULL (done)
+ */
+char *
+Coll_Ctrl::set (char * control, const char * value)
+{
+ char * ret;
+ char * warn = NULL;
+ int len = strlen (control);
+ if (!strncmp (control, ipc_str_exp_limit, len))
+ return set_size_limit (value);
+ if (!strncmp (control, ipc_str_time_limit, len))
+ return set_time_run (value);
+ if (!strncmp (control, ipc_str_arch_exp, len))
+ return set_archive_mode (value);
+ if (!strncmp (control, ipc_str_descendant, len))
+ return set_follow_mode (value);
+ if (!strncmp (control, ipc_str_prof_idle, len))
+ return set_prof_idle (value);
+ if (!strncmp (control, ipc_str_clkprof, len))
+ {
+ ret = set_clkprof (value, &warn);
+ if (ret == NULL)
+ {
+ if (warn != NULL)
+ return warn; // Warning
+ return NULL; // Done
+ }
+ return ret; // Error
+ }
+ if (!strncmp (control, ipc_str_hwcprof, len))
+ {
+ ret = set_hwcstring (value, &warn);
+ if (ret == NULL)
+ {
+ if (warn != NULL)
+ return warn; // Warning
+ return NULL; // Done
+ }
+ return ret; // Error
+ }
+ if (!strncmp (control, ipc_str_hwc2_prof, len))
+ {
+ ret = set_hwcstring (value, &warn);
+ if (ret == NULL)
+ {
+ if (warn != NULL)
+ return warn; // Warning
+ return NULL; // Done
+ }
+ return ret; // Error
+ }
+ if (!strncmp (control, ipc_str_javaprof, len))
+ return set_java_mode (value);
+ if (!strncmp (control, ipc_str_sample, len))
+ return set_sample_period (value);
+ if (!strncmp (control, ipc_str_sample_sig, len))
+ return set_sample_signal (find_sig (value));
+ if (!strncmp (control, ipc_str_pause_resume_sig, len))
+ {
+ char *str_signal = strdup (value);
+ char *str_state = strchr (str_signal, (int) '\n');
+ if (str_state != NULL)
+ {
+ *str_state = 0;
+ str_state++;
+ }
+ int signal = atoi (str_signal);
+ int state = 0;
+ if (str_state != NULL)
+ state = atoi (str_state);
+ free (str_signal);
+ return set_pauseresume_signal (signal, state);
+ }
+ if (!strncmp (control, ipc_str_synctrace, len))
+ return set_synctrace (value);
+ if (!strncmp (control, ipc_str_heaptrace, len))
+ return set_heaptrace (value);
+ if (!strncmp (control, ipc_str_iotrace, len))
+ return set_iotrace (value);
+ if (!strncmp (control, ipc_str_count, len))
+ return set_count (value);
+ return strdup (ipc_str_unknown_control);
+}
+
+/**
+ * Resets control's value (restores the default value)
+ * @param control
+ * @return error or NULL (done)
+ */
+char *
+Coll_Ctrl::unset (char * control)
+{
+ int len = strlen (control);
+ if (!strncmp (control, ipc_str_exp_limit, len))
+ size_limit = 0;
+ if (!strncmp (control, ipc_str_time_limit, len))
+ {
+ time_run = 0;
+ start_delay = 0;
+ }
+ if (!strncmp (control, ipc_str_arch_exp, len))
+ {
+ archive_mode = strdup ("on");
+ return NULL;
+ }
+ if (!strncmp (control, ipc_str_descendant, len))
+ {
+ follow_mode = FOLLOW_NONE;
+ return NULL;
+ }
+ if (!strncmp (control, ipc_str_prof_idle, len))
+ {
+ prof_idle = 1;
+ return NULL;
+ }
+ if (!strncmp (control, ipc_str_clkprof, len))
+ {
+ clkprof_default = 1;
+ clkprof_enabled = 1;
+ return NULL;
+ }
+ if (!strncmp (control, ipc_str_hwcprof, len))
+ {
+ setup_hwc ();
+ set_hwcdefault ();
+ return NULL;
+ }
+ if (!strncmp (control, ipc_str_javaprof, len))
+ {
+ java_mode = 0;
+ java_default = 0;
+ free (java_path);
+ java_path = NULL;
+ free (java_args);
+ java_args = NULL;
+ }
+ if (!strncmp (control, ipc_str_sample, len))
+ {
+ sample_period = 1;
+ sample_default = 1;
+ return NULL;
+ }
+ if (!strncmp (control, ipc_str_sample_sig, len))
+ {
+ sample_sig = 0;
+ return NULL;
+ }
+ if (!strncmp (control, ipc_str_pause_resume_sig, len))
+ {
+ pauseresume_sig = 0;
+ return NULL;
+ }
+ if (!strncmp (control, ipc_str_synctrace, len))
+ {
+ synctrace_enabled = 0;
+ synctrace_thresh = -1;
+ return NULL;
+ }
+ if (!strncmp (control, ipc_str_heaptrace, len))
+ {
+ heaptrace_enabled = 0;
+ return NULL;
+ }
+ if (!strncmp (control, ipc_str_iotrace, len))
+ {
+ iotrace_enabled = 0;
+ return NULL;
+ }
+ if (!strncmp (control, ipc_str_count, len))
+ {
+ count_enabled = 0;
+ Iflag = 0;
+ Nflag = 0;
+ return NULL;
+ }
+ return strdup (ipc_str_unknown_control);
+}
+
+void
+Coll_Ctrl::set_project_home (char *s)
+{
+ if (s)
+ project_home = strdup (s);
+}
diff --git a/gprofng/src/collctrl.h b/gprofng/src/collctrl.h
new file mode 100644
index 00000000000..6555df77ca4
--- /dev/null
+++ b/gprofng/src/collctrl.h
@@ -0,0 +1,405 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+/* This file describes the data structures used to control
+ * data collection; it is used by various commands in the MPMT
+ * tree, and is also shared with dbx. Care should be taken
+ * to ensure that both the mpmt and dbx builds continue.
+
+ * To remove any APIs or change any enum cases:
+ *
+ * 1. Make the changes in mpmt, and preserve the old APIs
+ * as scaffolding and any old enum values as #defines.
+ *
+ * 2. Add the new APIs and new cases to dbx, remove the
+ * old ones.
+ *
+ * 3. Remove the old API scaffolding and enum values here
+ *
+ */
+
+#ifndef _COLLCTRL_H
+#define _COLLCTRL_H
+
+#include "hwcentry.h"
+#include "cc_libcollector.h"
+
+/*---------------------------------------------------------------------------*/
+
+/* class */
+
+typedef struct {
+ int min;
+ int res;
+ int max;
+ int hival;
+ int normval;
+ int lowval;
+} clk_params_t;
+
+#define PROFINT_HIGH 997
+#define PROFINT_NORM 10007
+#define PROFINT_LOW 100003
+
+#define PROFINT_MIN 500
+#define PROFINT_MAX 1000000
+
+class Coll_Ctrl {
+public:
+
+ /* _interactive is 1 for dbx, 0 for collect */
+ Coll_Ctrl(int _interactive = 0, bool _defHWC = false, bool _kernelHWC = false);
+ ~Coll_Ctrl();
+
+ Coll_Ctrl(Coll_Ctrl *cc); /* constructor for duplicate */
+ char *check_expt(char **); /* check the experiment directory */
+ char *setup_experiment(); /* set up the experiment directory, etc. */
+ void close_expt();
+ void interrupt(); /* the user interrupts experiment */
+ void delete_expt();
+
+ /* enable/disable the experiment */
+ char *enable_expt();
+ void disable_expt() { enabled = 0; };
+ int isenabled() { return enabled; };
+
+ /* check for active experiment */
+ int isopened() { return opened; };
+
+ /* set the parameters for clock-profiling */
+ void set_clk_params(int min, int res, int max, int hi, int norm, int lo);
+ char *set_clkprof(const char *valptr, char **warn);
+ char *reset_clkprof(int val); /* called if profiler must reset value */
+ int get_sys_period() { return clk_params.min; };
+ int get_clk_min() { return clk_params.min; };
+ int get_clk_max() { return clk_params.max; };
+ int get_clk_res() { return clk_params.res; };
+ int get_clkprof_mode() { return clkprof_enabled; };
+ int get_clkprof_timer() { return clkprof_timer; };
+
+ /* set the parameters for synchronization tracing */
+ char *set_synctrace(const char *valptr);
+ int get_synctrace_mode() { return synctrace_enabled; };
+ int get_synctrace_thresh() { return synctrace_thresh; };
+ int get_synctrace_scope() { return synctrace_scope; };
+
+ /* set the parameters for heap tracing */
+ char *set_heaptrace(const char *);
+ int get_heaptrace_mode() { return heaptrace_enabled; };
+ int get_heaptrace_checkmode() { return heaptrace_checkenabled; };
+
+ /* set the parameters for I/O tracing */
+ char *set_iotrace(const char *);
+ int get_iotrace_mode() { return iotrace_enabled; };
+
+ /* set the parameters for HW counting */
+ void setup_hwc();
+ char *set_hwcstring(const char *str, char **warn);
+ char *add_hwcstring(const char *str, char **warn);
+ char *add_default_hwcstring(const char *str, char **warn, bool add, bool forKernel = false);
+ void set_hwcdefault();
+ void disable_hwc();
+ int get_hwc_cnt() { return hwcprof_enabled_cnt; };
+ int get_hwc_mode() { return hwcprof_enabled_cnt ? 1 : 0; };
+ char *get_hwc_string() { return hwc_string; };
+
+ Hwcentry *
+ get_hwc_entry (int n)
+ {
+ if (n < 0 || n >= hwcprof_enabled_cnt)
+ return 0;
+ return &hwctr[n];
+ };
+
+ void hwcentry_dup (Hwcentry *, Hwcentry *);
+ char *get_hwc_counter (int n) { return get_hwc_entry (n)->name; };
+
+ /* set the parameters for count data */
+ char *set_count (const char *);
+ int get_count () { return count_enabled; };
+ void set_Iflag () { Iflag = 1; };
+ void set_Nflag () { Nflag = 1; };
+
+ /* set time interval for attach with dbx timed collection */
+ /* also used for er_kernel */
+ char *set_time_run (const char *);
+ int get_time_run (void) { return time_run; };
+ int get_start_delay (void) { return start_delay; };
+
+ /* set pid for attach with dbx to collect data */
+ char *set_attach_pid (char *);
+ int get_attach_pid (void) { return attach_pid; };
+
+ /* set java mode, "on" = yes; "off" = no; anthing else implies
+ * yes, and is the path to the java to use
+ * java_mode is returned as zero for off, one for on
+ * java_default is returned as zero for explicitly set, one for defaulted on
+ */
+ char *set_java_mode (const char *);
+ int get_java_mode () { return java_mode; };
+ int get_java_default () { return java_default; };
+
+ /* setting Java path explicitly */
+ char *set_java_path (const char *);
+ char *get_java_path () { return java_path; };
+
+ /* set additional arguments for Java invocation */
+ char *set_java_args (char *);
+ char *get_java_args () { return java_args; };
+ int get_java_arg_cnt () { return njava_args; };
+
+ /* set load-object archive mode, 0 = no; other = yes */
+ char *set_archive_mode (const char *);
+ char *get_archive_mode () { return archive_mode; };
+
+ /* set follow-descendants mode, 0 = no; other = yes */
+ char *set_follow_mode (const char *);
+ Follow_type get_follow_mode () { return follow_mode; };
+ int get_follow_default () { return follow_default; };
+ char *get_follow_usr_spec () { return follow_spec_usr; };
+ char *get_follow_cmp_spec () { return follow_spec_cmp; };
+
+ /* set profile idle cpus mode, 1 = no; 0 = yes */
+ char *set_prof_idle (const char *);
+ int get_prof_idle () { return prof_idle; };
+
+ /* set debug more, 1 = yes; other = no */
+ /* if set, target will be set to halt at exit from exec */
+ char *set_debug_mode (int);
+ int get_debug_mode () { return debug_mode; };
+
+ /* find a signal from a string */
+ int find_sig (const char *);
+ /* find a signal name from a signal value */
+ char *find_signal_name (int signal);
+
+ /* set the pauseresume (delayed initialization) signal */
+ char *set_pauseresume_signal (int, int);
+ int get_pauseresume_signal () { return pauseresume_sig; };
+ int get_pauseresume_pause () { return pauseresume_pause; };
+
+ /* set the sample signal */
+ char *set_sample_signal (int);
+ int get_sample_signal () { return sample_sig; };
+
+ /* set the periodic sampling */
+ char *set_sample_period (const char *);
+ int get_sample_period (void) { return sample_period; };
+
+ /* set experiment size limit */
+ char *set_size_limit (const char *);
+ int get_size_limit (void) { return size_limit; };
+
+ /* naming methods */
+ /* set the target executable name */
+ int set_target (char *);
+ char *get_target () { return target_name; };
+
+ /* set the experiment name */
+ void set_default_stem (const char *);
+ char *set_expt (const char *, char **, bool);
+ char *get_expt () { return expt_name; };
+
+ /* set the experiment directory */
+ char *set_directory (char *, char **);
+
+ char *get_directory () { return udir_name ? udir_name : store_dir; };
+
+ /* return the real experiment ptr file name */
+ char *get_experiment () { return store_ptr; };
+ char *update_expt_name (bool verbose = true, bool ckonly = false, bool newname = false);
+
+ /* remove the experiment */
+ void remove_exp_dir ();
+
+ /* return the data descriptor */
+ char *
+ get_data_desc ()
+ {
+ return data_desc;
+ };
+
+ /* set the experiment group */
+ char *set_group (char *);
+ char *get_group () { return expt_group; };
+
+ /* return the experiment settings as a string */
+ char *show (int); /* full show */
+ char *show_expt (); /* short form */
+
+ /* return an argv array to compose a "collect" command from settings */
+ char **get_collect_args ();
+
+ /* determine characteristics of system */
+ char *get_node_name () { return node_name; };
+ long get_ncpus () { return ncpus; };
+ int get_cpu_clk_freq () { return cpu_clk_freq; };
+ int get_cpc_cpuver () { return cpc_cpuver; };
+
+ /* disable warning about non-local filesystems */
+ void set_nofswarn () { nofswarn = 1; };
+
+ //========== Special functions to communicate with the Collector GUI ==========//
+ char *get (char *); /* get control's value */
+ char *set (char *, const char *); /* set control's value */
+ char *unset (char *); /* reset control's value to its default */
+ void set_project_home (char *);
+
+private:
+ int interactive; /* 1 - dbx, 0 - collect */
+ bool defHWC; /* true if default HWC experiment should be run */
+ bool kernelHWC; /* T if default HWC counters are for kernel profiling */
+ int opened; /* T if an experiment is opened */
+ int enabled; /* T if an experiment is enabled */
+ volatile int uinterrupt; /* set if interrupt from user */
+
+ /* experiment/machine characteristics */
+ char *node_name; /* name of machine on which experiment is run */
+ long ncpus; /* number of online CPUs */
+ int cpu_clk_freq; /* chip clock (MHz.), as reported from processor_info */
+ int cpc_cpuver; /* chip version, as reported from libcpc */
+ long sys_resolution; /* system clock resolution */
+ int sys_period; /* profiling clock resolution on the system */
+ int sample_period; /* period for sampling, seconds */
+ int sample_default; /* if period for sampling set by default */
+ int size_limit; /* experiment size limit, MB */
+ long npages; /* number of pages configured */
+ long page_size; /* size of system page */
+ clk_params_t clk_params;
+
+ /* user specification of name */
+ /* user may specify both uexpt_name and udir_name
+ * if uexpt_name is absolute path, udir_name is ignored, with warning
+ * otherwise, udir_name is prepended to uexpt_name
+ *
+ * if uexpt_name is of the form: <dir>/zzzz.nnn.er, where nnn is numeric,
+ * nnn will be reset to one greater than the the highest experiment
+ * with a name of the same form.
+ */
+ char *default_stem; /* default stem for experiment name */
+ char *uexpt_name; /* suggested experiment name */
+ char *expt_name; /* experiment name, after defaulting */
+ char *expt_dir; /* directory part of suggested experiment name */
+ char *base_name; /* basename of suggested experiment name */
+ char *udir_name; /* user name of directory for data */
+
+ char *store_dir; /* directory to contain experiment dir. */
+ char *prev_store_dir; /* previously set store directory */
+ char *store_ptr; /* experiment pointer file */
+ char *expt_group; /* name of experiment group, if any */
+ char *project_home; /* argv[0] */
+
+ char *target_name; /* target executable name */
+ char *data_desc; /* string describing the data to be collected */
+ char *lockname; /* name of directory lock file */
+ int lockfd; /* fd of open lock file */
+
+ int nofswarn; /* if 1, don't warn of filesystem */
+ int expno; /* number in <stem>.<expno>.er */
+
+ /* T if an target is to be left for debugger attach */
+ int debug_mode;
+
+ /* clock-profiling controls */
+ /* T if clock-based profiling */
+ int clkprof_enabled;
+
+ /* T if on by default, rather than explicit setting */
+ int clkprof_default;
+
+ /* value for timer, microseconds. */
+ int clkprof_timer; // adjusted clock profiling interval
+ int clkprof_timer_target; // desired clock profiling interval
+
+ /* HW counter-profiling controls */
+ /* >0 if HW counter-based profiling */
+ int hwcprof_default;
+ int hwcprof_enabled_cnt;
+ char *hwc_string;
+ Hwcentry hwctr[MAX_PICS];
+
+ int synctrace_enabled; /* T if synchronization tracing */
+ /* sync trace threshold value, microsec. */
+ /* if 0, record all */
+ /* if <0, calibrate */
+ int synctrace_thresh;
+
+ /* sync trace scope -- a bit mask */
+ /* definitions in data_pckts.h */
+ int synctrace_scope;
+
+ int heaptrace_enabled; /* T if heap tracing */
+ /* if 0 no checking;
+ * if 1, check for over- and under-write
+ * if 2, also set patterns in malloc'd and free'd areas
+ */
+ int heaptrace_checkenabled;
+ int iotrace_enabled; /* T if I/O tracing */
+
+ /* count controls */
+ /* 1 if counting is enabled; -1 if count static is enabled */
+ int count_enabled;
+ int Iflag; /* specify bit output directory -- only with count_enabled */
+ int Nflag; /* specify bit library to ignore -- only with count_enabled */
+
+ /* pid, if -P <pid> is invoked for attach with dbx */
+ int attach_pid;
+
+ /* time_run -- non-zero if timed execution request (dbx/er_kernel) */
+ int time_run;
+ int start_delay;
+
+ /* T if Java profiling is requested */
+ int java_mode;
+ int java_default;
+ char *java_path;
+ char *java_args;
+ int njava_args;
+
+ /* whether/how following-descendants is requested */
+ Follow_type follow_mode;
+ int follow_default;
+ char *follow_spec_usr; // user's selective follow spec
+ char *follow_spec_cmp; // compiled selective follow spec
+ int prof_idle; // whether profiling idle cpus is requested
+ char *archive_mode; // how load-objects archiving is requested
+
+ // signals to control pause-resume (delayed initialization) and samples
+ int pauseresume_sig; // for pause-resume signal -- delayed initialization
+ int pauseresume_pause; // 1 if pauseresume and start paused; 0 if not
+ int sample_sig; // to trigger sample
+ char *report_signal_conflict (int);
+ char *check_consistency (); // check the experiment settings for consistency
+ void determine_profile_params ();
+ char *preprocess_names ();
+ char *get_exp_name (const char *);
+ char *create_exp_dir ();
+ void build_data_desc ();
+ char *check_group ();
+ char *join_group ();
+ void free_hwc_fields (Hwcentry *tmpctr);
+
+ // propagates clkprof_timer change to Hwcentry hwctr[]
+ void set_clkprof_timer_target (int microseconds);
+ void adjust_clkprof_timer (int microseconds);
+ hrtime_t clkprof_timer_2_hwcentry_min_time (int clkprof_microseconds);
+};
+
+#endif /* !_COLLCTRL_H */
diff --git a/gprofng/src/collect.h b/gprofng/src/collect.h
new file mode 100644
index 00000000000..c500dee386c
--- /dev/null
+++ b/gprofng/src/collect.h
@@ -0,0 +1,156 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _COLLECT_H
+#define _COLLECT_H
+
+#include <Application.h>
+
+extern "C"
+{
+ typedef void (*SignalHandler)(int);
+}
+
+class Coll_Ctrl;
+class Elf;
+
+#define MAXLABELS 10 /* maximum number of -C arguments */
+#define STDEBUFSIZE 24000
+
+enum { MAX_LD_PRELOAD_TYPES = 3 };
+
+struct Process
+{
+ Process (pid_t _pid) : pid (_pid) { }
+ pid_t pid;
+};
+
+struct DtraceTool
+{
+ DtraceTool (char*);
+ ~DtraceTool ();
+
+ char *name; // Tool name as specified by -D flag
+ char *params; // Tool parameters
+ char *dfile; // Extracted d-script
+ char *mfile; // Extracted metadata file
+ char *ofile; // Output file
+ pid_t pid;
+};
+
+// collect object
+class collect : Application
+{
+public:
+ collect (int argc, char *argv[], char **envp);
+ virtual ~collect ();
+ void start (int argc, char *argv[]);
+ void writeStr (int f, const char *buf);
+
+ // the collector control class
+ Coll_Ctrl *cc;
+
+private:
+ enum Exec_status
+ {
+ EXEC_OK = 0, // found as runnable executable
+ EXEC_ELF_NOSHARE, // found, but built unshared
+ EXEC_IS_JAR, // found as a .jar file
+ EXEC_IS_CLASS, // found as a .class file but name missing .class
+ EXEC_IS_CLASSCLASS, // found as a .class file with explicit .class
+ EXEC_OPEN_FAIL, // could not be opened
+ EXEC_ELF_LIB, // internal error: bad elf library
+ EXEC_ELF_HEADER, // executable, with bad ELF header
+ EXEC_ELF_ARCH, // executable, but unrunnable architecture
+ EXEC_ISDIR, // a directory, not a file
+ EXEC_NOT_EXEC, // a file, but not executable
+ EXEC_NOT_FOUND // a directory, not a file
+ };
+
+ // override methods in base class
+ void usage ();
+ void short_usage ();
+ void show_hwc_usage ();
+ int check_args (int argc, char *argv[]);
+ void check_target (int, char **);
+ Exec_status check_executable (char *);
+ Exec_status check_executable_arch (Elf *);
+ char *status_str (Exec_status, char *);
+ int do_flag (const char *);
+ char *find_java (void);
+ char *java_path;
+ char *java_how;
+ int putenv_libcollector ();
+ int putenv_libcollector_ld_audits ();
+ int putenv_libcollector_ld_preloads ();
+ int putenv_libcollector_ld_misc ();
+ void add_ld_preload (const char *lib);
+ int putenv_ld_preloads ();
+ int putenv_memso ();
+ int env_strip (char *env, const char *str);
+ int putenv_purged_ld_preloads (const char *var);
+ int putenv_append (const char *var, const char *val);
+ void get_count_data ();
+ void prepare_dbx ();
+ int traceme (const char *file, char *const argv[]);
+ int checkflagterm (const char *);
+ void dupflagseen (char);
+ void dupflagseen (const char *);
+ void validate_config (int);
+ void validate_java (const char *, const char *, int);
+ int set_output ();
+ void reset_output ();
+
+ /* Logging warning messages */
+ char **collect_warnings;
+ int collect_warnings_idx;
+ void warn_open ();
+ void warn_close ();
+ void warn_write (const char *format, ...);
+ void warn_comment (const char *kind, int num, char *s = NULL, int len = 0);
+ char *warnfilename;
+ FILE *warn_file;
+
+ /* MPI experiment handling */
+ void setup_MPI_expt (); /* the founder experiment */
+ void write_MPI_founder_log ();
+ void close_MPI_founder_log (int, int);
+ void spawn_MPI_job (); /* run the MPI job */
+ void copy_collect_args (char ***); /* copy collect args for an MPI target */
+ int disabled;
+ int jseen_global; /* if -j flag was seen */
+ int verbose;
+ bool mem_so_me; /* if T, preload mem.so, not libcollector */
+ int origargc;
+ char **arglist;
+ char **origargv;
+ char **origenvp;
+ int targ_index; // index of name of target in origargv
+ bool is_64;
+ int nargs;
+ int njargs;
+ char *jargs;
+ int nlabels;
+ char *label[MAXLABELS];
+ char *sp_preload_list[MAX_LD_PRELOAD_TYPES + 1]; // +1 for NULL termination
+ char *sp_libpath_list[MAX_LD_PRELOAD_TYPES + 1]; // +1 for NULL termination
+};
+
+#endif /* ! _COLLECT_H */
diff --git a/gprofng/src/collector_module.h b/gprofng/src/collector_module.h
new file mode 100644
index 00000000000..f608dab5831
--- /dev/null
+++ b/gprofng/src/collector_module.h
@@ -0,0 +1,234 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _COLLECTOR_MODULE_H
+#define _COLLECTOR_MODULE_H
+
+#include <sys/types.h>
+#include <stdarg.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <dirent.h>
+
+#include "gp-defs.h"
+
+struct stat;
+struct tm;
+
+#define COLLECTOR_MODULE_ERR ((CollectorModule)-1)
+
+/* ------- libc interface ----------------- */
+/* the fields in this structure are in alphabetical order.
+ * If you add any, please put it in the right place */
+typedef struct CollectorUtilFuncs
+{
+ int (*access)();
+ int (*atoi)(const char *nptr);
+ void *(*calloc)(size_t nelem, size_t elsize);
+ int (*clearenv)(void);
+ int (*close)(int);
+ int (*closedir)();
+ int (*execv)(const char *path, char *const argv[]);
+ void (*exit)(int status);
+ int (*fclose)(FILE *stream);
+ int (*fcntl)(int fd, int cmd, ...);
+ char *(*fgets)(char *s, int n, FILE *stream);
+ FILE *(*fopen)(const char *filename, const char *mode);
+ pid_t (*vfork)();
+ int (*fprintf)(FILE *stream, const char *format, ...);
+ void (*free)(void *ptr);
+ int (*fstat)(int fd, struct stat *buf);
+ int (*getcpuid)();
+ char *(*getcwd)(char *buf, size_t size);
+ char *(*getenv)(const char *name);
+ struct tm *(*gmtime_r)(const time_t *clock, struct tm *res);
+ int (*ioctl)(int d, int request, ...);
+ off_t (*lseek)(int fd, off_t offset, int whence);
+ void *(*malloc)(size_t size);
+ void *(*memset)(void *s1, int c, size_t n);
+ int (*mkdir)();
+ time_t (*mktime)(struct tm *timeptr);
+ void *(*mmap)(void *, size_t, int, int, int, off_t);
+ void *(*mmap64)();
+ int (*munmap)();
+ int (*open)(const char *, int, ...);
+ int (*open_bare)(const char *, int, ...);
+ DIR *(*opendir)();
+ int (*pclose)(FILE *stream);
+ FILE *(*popen)(const char *command, const char *mode);
+ int (*putenv)(char *string);
+ ssize_t (*pwrite)();
+ ssize_t (*pwrite64)();
+ ssize_t (*read)();
+ int (*setenv)(const char *name, const char *value, int overwrite);
+ int (*sigfillset)(sigset_t *set);
+ int (*sigprocmask)(int how, const sigset_t *set, sigset_t *oldset);
+ int (*snprintf)(char *str, size_t size, const char *format, ...);
+ int (*stack_getbounds)();
+ char *(*strchr)(const char *name, int c);
+ int (*strcmp)(const char *s1, const char *s2);
+ int (*strcpy)(const char *s1, const char *s2);
+ char *(*libc_strdup)(const char *s1); // Don't use "strdup" because it is a macro in gcc
+ char *(*strerror)(int errnum);
+ int (*strerror_r)(int errnum, char *strerrbuf, size_t buflen);
+ size_t (*strlcat)(char *dest, const char *src, size_t dstsize);
+ size_t (*strlcpy)(char *dest, const char *src, size_t dstsize);
+ size_t (*strlen)(const char *string);
+ int (*strncmp)(const char *s1, const char *s2, size_t n);
+ size_t (*strncpy)(char *dst, const char *src, size_t dstsize);
+ size_t (*strspn)(const char *s1, const char *s2);
+ char *(*strrchr)(const char *name, int c);
+ char *(*strstr)(const char *s1, const char *s2);
+ long int (*strtol)(const char *nptr, char **endptr, int base);
+ long long int (*strtoll)(const char *nptr, char **endptr, int base);
+ unsigned long int (*strtoul)(const char *nptr, char **endptr, int base);
+ unsigned long long int (*strtoull)(const char *nptr, char **endptr, int base);
+ int (*symlink)(const char *s1, const char *s2);
+ int (*syscall)(int number, ...);
+ long (*sysconf)(int name);
+ long (*sysinfo)(int command, char *buf, long count);
+ time_t (*time)(time_t *tloc);
+ int (*unsetenv)(const char *name);
+ int (*vsnprintf)(char *str, size_t size, const char *format, va_list ap);
+ pid_t (*waitpid)(pid_t pid, int *stat_loc, int options);
+ ssize_t (*write)();
+ double (*atof)();
+ void *n_a;
+} CollectorUtilFuncs;
+
+extern CollectorUtilFuncs __collector_util_funcs;
+extern int __collector_dlsym_guard;
+
+#define CALL_UTIL(x) __collector_util_funcs.x
+
+/* The following constants define the meaning of the "void *arg"
+ * argument of getFrameInfo().
+ */
+/* arg is a pointer to ucontext_t, walk the stack described by it */
+#define FRINFO_FROM_UC 1
+/* walk the current stack starting from the frame containing arg */
+#define FRINFO_FROM_STACK 2
+/* walk the current stack starting from the caller of the frame containing arg */
+#define FRINFO_FROM_STACK_ARG 3
+/* arg is a pc, process a stack containing just that pc */
+#define FRINFO_FROM_PC 4
+/* arg is of type CM_Array describing a stack image */
+#define FRINFO_FROM_ARRAY 5
+#define FRINFO_NO_OMP_INFO 0x80000000
+#define FRINFO_NO_WALK 0x40000000
+
+typedef struct CM_Array
+{
+ unsigned int length; /* in bytes, not including length */
+ void *bytes;
+} CM_Array;
+
+// Interface with libcollector.so:
+typedef enum
+{
+ SP_ORIGIN_FORK = -1,
+ SP_ORIGIN_LIBCOL_INIT = 0,
+ SP_ORIGIN_DBX_ATTACH = 1,
+ SP_ORIGIN_GENEXP = 2,
+ SP_ORIGIN_KERNEL = 3,
+ SP_ORIGIN_DTRACE = 4,
+ SP_ORIGIN_COLLECT = 5
+} sp_origin_t;
+
+struct Heap;
+struct Common_packet;
+struct CM_Packet;
+struct ModuleInterface;
+
+typedef long long HiResTime;
+typedef int CollectorModule;
+typedef unsigned long long FrameInfo;
+typedef struct CollectorInterface
+{
+ /* General services */
+ CollectorModule (*registerModule)(struct ModuleInterface*);
+ const char *(*getParams)();
+ const char *(*getExpDir)();
+ int (*writeLog)(char *format, ...);
+ FrameInfo (*getFrameInfo)(CollectorModule modl, HiResTime ts, int mode, void *arg);
+ FrameInfo (*getUID)(CM_Array *arg);
+ FrameInfo (*getUID2)(CM_Array *arg, FrameInfo uid);
+ int (*getStackTrace)(void *buf, int size, void *bptr, void *eptr, void *arg);
+ int (*writeMetaData)(CollectorModule modl, char *format, ...);
+
+ /* writeDataRecord ensures that the header is filled in, and then calls writeDataPacket */
+ int (*writeDataRecord)(CollectorModule modl, struct Common_packet *pckt);
+ int (*writeDataPacket)(CollectorModule modl, struct CM_Packet *pckt);
+ void (*write_sample)(char *name);
+ void (*get_progspec)(char *retstr, int tmp_sz, char *namestr, int name_sz);
+ int (*open_experiment)(const char *exp, const char *params, sp_origin_t origin);
+ HiResTime (*getHiResTime)();
+
+ /* Dynamic memory allocation service */
+ struct Heap *(*newHeap)();
+ void (*deleteHeap)(struct Heap *heap);
+ void *(*allocCSize)(struct Heap *heap, unsigned sz, int log);
+ void (*freeCSize)(struct Heap *heap, void *ptr, unsigned sz);
+ void *(*allocVSize)(struct Heap *heap, unsigned sz);
+ void *(*reallocVSize)(struct Heap *heap, void *ptr, unsigned newsz);
+
+ /* Thread specific data service */
+ unsigned (*createKey)(size_t sz, void (*init)(void*), void (*fini)(void*));
+ void *(*getKey)(unsigned key);
+
+ /* Debugging services */
+ void (*writeDebugInfo)(int, int, char *, ...) __attribute__ ((format (printf, 3, 4)));
+} CollectorInterface;
+
+typedef struct ModuleInterface
+{
+ char *description;
+ int (*initInterface)(CollectorInterface*);
+ int (*openExperiment)(const char *);
+ int (*startDataCollection)();
+ int (*stopDataCollection)();
+ int (*closeExperiment)();
+ int (*detachExperiment)(); /* called from fork-child before openExperiment() */
+} ModuleInterface;
+
+typedef CollectorModule (*RegModuleFunc)(ModuleInterface*);
+typedef void (*ModuleInitFunc)(CollectorInterface*);
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+ CollectorModule __collector_register_module (ModuleInterface *modint);
+#ifdef __cplusplus
+}
+#endif
+
+#ifdef __has_attribute
+# if __has_attribute (__symver__)
+# define SYMVER_ATTRIBUTE(sym, symver) \
+ __attribute__ ((__symver__ (#symver)))
+# endif
+#endif
+#ifndef SYMVER_ATTRIBUTE
+# define SYMVER_ATTRIBUTE(sym, symver) \
+ __asm__(".symver " #sym "," #symver);
+#endif
+
+#endif /* _COLLECTOR_MODULE_H */
diff --git a/gprofng/src/comp_com.c b/gprofng/src/comp_com.c
new file mode 100644
index 00000000000..486bd1af767
--- /dev/null
+++ b/gprofng/src/comp_com.c
@@ -0,0 +1,3481 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <locale.h>
+#include <values.h>
+#include <assert.h>
+
+#include "comp_com.h"
+
+/*
+ * To add a new message _FORMAT_ please perform the following tasks:
+ * 1) Insert it into the list below, with the matching comment.
+ * The table is sorted by parameter type. In increasing order
+ * they are: String, Procedure, Variable, Loop, Region, Integer.
+ * 2) Insert the corresponding information into the following
+ * procedures in this file: ccm_num_params(), ccm_paramlist_index(),
+ * ccm_param_primtype(), and ccm_param_hightype().
+ * 3) If you are also creating a new high-type or primitive-type,
+ * extend the corresponding enum, update this comment and make sure
+ * to update any code in the analyzer, iropt, cg or ube that depends
+ * on knowing the limited set of types.
+ */
+
+typedef enum ccm_fmt {
+ CCMFMT_NONE, /* none */
+ CCMFMT_S1, /* s1 */
+ CCMFMT_S1S2, /* s1, s2 */
+ CCMFMT_S1L2, /* s1, l2 */
+ CCMFMT_S1L2VV3, /* s1, l2, v3, v4, ... */
+ CCMFMT_S1R2VV3, /* s1, r2, v3, v4, ... */
+ CCMFMT_S1X2, /* s1, x2 */
+ CCMFMT_P1, /* p1 */
+ CCMFMT_P1S2, /* p1, s2 */
+ CCMFMT_P1S2P3, /* p1, s2, p3 */
+ CCMFMT_P1S2P3I4, /* p1, s2, p3, i4 */
+ CCMFMT_P1S2I3, /* p1, s2, i3 */
+ CCMFMT_P1P2, /* p1, p2 */
+ CCMFMT_P1L2, /* p1, l2 */
+ CCMFMT_P1I2, /* p1, i2 */
+ CCMFMT_P1I2L3, /* p1, i2, l3 */
+ CCMFMT_P1I2LL3, /* p1, i2, l3, l4 ... */
+ CCMFMT_P1I2I3, /* p1, i2, i3 */
+ CCMFMT_PP1, /* p1, p2, ... */
+ CCMFMT_V1, /* v1 */
+ CCMFMT_V1V2, /* v1, v2 */
+ CCMFMT_V1L2, /* v1, l2 */
+ CCMFMT_VV1, /* v1, v2, ... */
+ CCMFMT_L1, /* l1 */
+ CCMFMT_L1S2, /* l1, s2 */
+ CCMFMT_L1S2L3, /* l1, s2, l3 */
+ CCMFMT_L1P2, /* l1, p2 */
+ CCMFMT_L1P2I3, /* l1, p2, i3 */
+ CCMFMT_L1PP2, /* l1, p2, p3, ... */
+ CCMFMT_L1VV2, /* l1, v2, v3, ... */
+ CCMFMT_L1L2, /* l1, l2 */
+ CCMFMT_L1L2L3, /* l1, l2, l3 */
+ CCMFMT_LL1, /* l1, l2, ... */
+ CCMFMT_L1R2, /* l1, r2 */
+ CCMFMT_L1I2, /* l1, i2 */
+ CCMFMT_L1I2L3, /* l1, i2, l3 */
+ CCMFMT_L1I2LL3, /* l1, i2, l3, l4, ... */
+ CCMFMT_L1I2I3L4, /* l1, i2, i3, l4 */
+ CCMFMT_L1I2I3I4I5, /* l1, i2, ..., i5 */
+ CCMFMT_L1I2I3I4I5I6I7, /* l1, i2, ..., i7 */
+ CCMFMT_L1I2I3I4I5I6I7I8I9, /* l1, i2, ..., i9 */
+ CCMFMT_L1II2, /* l1, i2, i3, ... */
+ CCMFMT_R1, /* r1 */
+ CCMFMT_R1VV2, /* r1, v2, v3, ... */
+ CCMFMT_I1, /* i1 */
+ CCMFMT_I1P2I3, /* i1, p2, i3 */
+ CCMFMT_I1V2, /* i1, v2 */
+ CCMFMT_I1V2V3, /* i1, v2, v3 */
+ CCMFMT_I1L2, /* i1, l2 */
+ CCMFMT_I1LL2, /* i1, l2, l3, ... */
+ CCMFMT_I1I2I3I4, /* i1, i2, i3, i4 */
+ CCMFMT_I1I2I3I4I5I6, /* i1, i2, ..., i6 */
+ CCMFMT_I1I2I3I4I5I6I7I8, /* i1, i2, ..., i8 */
+ CCMFMT_LAST
+} Ccm_Fmttype_t;
+
+/*
+ * Low- and high-level types for commentary parameters.
+ */
+
+typedef enum ccm_primtype
+{
+ CCM_PRIMTYPE_NONE,
+ CCM_PRIMTYPE_STRING,
+ CCM_PRIMTYPE_INTEGER,
+ CCM_PRIMTYPE_HEXSTRING
+} Ccm_Primtype_t;
+
+typedef enum ccm_hightype
+{
+ CCM_HITYPE_NONE,
+ CCM_HITYPE_STRING,
+ CCM_HITYPE_PROCEDURE,
+ CCM_HITYPE_VARIABLE,
+ CCM_HITYPE_LOOPTAG,
+ CCM_HITYPE_REGIONTAG,
+ CCM_HITYPE_HEXSTRING,
+ CCM_HITYPE_INTEGER
+} Ccm_Hitype_t;
+
+typedef struct ccm_attrs
+{
+ char *msg; /* I18N msg string */
+ const char *name; /* Print name for this message ID */
+ int32_t vis; /* Visibility bits */
+ Ccm_Fmttype_t fmt; /* Format type */
+} Ccm_Attr_t;
+
+static Ccm_Attr_t *ccm_attrs; /* Table of per-msg attributes */
+static nl_catd ccm_catd = (nl_catd) - 1; /* messages id */
+
+/*
+ * map COMPMSG_ID to table indices
+ */
+static int
+ccm_vis_index (COMPMSG_ID m)
+{
+ int32_t high = m >> 8;
+ int32_t low = m & 0xFF;
+ for (int i = 0; i < 24; i++, high >>= 1)
+ if (high <= 1)
+ return (i << 8) + low + 1;
+ return 0;
+}
+
+/*
+ * Return # parameters for this message; MAXINT for messages with
+ * parameter lists.
+ */
+static int
+ccm_num_params (COMPMSG_ID m)
+{
+ int vindex;
+ int res;
+ vindex = ccm_vis_index (m);
+ switch (ccm_attrs[vindex].fmt)
+ {
+ case CCMFMT_NONE:
+ res = 0;
+ break;
+ case CCMFMT_S1:
+ case CCMFMT_P1:
+ case CCMFMT_V1:
+ case CCMFMT_L1:
+ case CCMFMT_R1:
+ case CCMFMT_I1:
+ res = 1;
+ break;
+ case CCMFMT_S1S2:
+ case CCMFMT_S1L2:
+ case CCMFMT_S1X2:
+ case CCMFMT_P1S2:
+ case CCMFMT_P1P2:
+ case CCMFMT_P1L2:
+ case CCMFMT_P1I2:
+ case CCMFMT_V1V2:
+ case CCMFMT_V1L2:
+ case CCMFMT_L1S2:
+ case CCMFMT_L1P2:
+ case CCMFMT_L1L2:
+ case CCMFMT_L1R2:
+ case CCMFMT_L1I2:
+ case CCMFMT_I1V2:
+ case CCMFMT_I1L2:
+ res = 2;
+ break;
+ case CCMFMT_P1S2P3:
+ case CCMFMT_P1S2I3:
+ case CCMFMT_P1I2L3:
+ case CCMFMT_P1I2I3:
+ case CCMFMT_L1S2L3:
+ case CCMFMT_L1P2I3:
+ case CCMFMT_L1L2L3:
+ case CCMFMT_L1I2L3:
+ case CCMFMT_I1P2I3:
+ case CCMFMT_I1V2V3:
+ res = 3;
+ break;
+ case CCMFMT_P1S2P3I4:
+ case CCMFMT_L1I2I3L4:
+ case CCMFMT_I1I2I3I4:
+ res = 4;
+ break;
+ case CCMFMT_L1I2I3I4I5:
+ res = 5;
+ break;
+ case CCMFMT_I1I2I3I4I5I6:
+ res = 6;
+ break;
+ case CCMFMT_L1I2I3I4I5I6I7:
+ res = 7;
+ break;
+ case CCMFMT_I1I2I3I4I5I6I7I8:
+ res = 8;
+ break;
+ case CCMFMT_L1I2I3I4I5I6I7I8I9:
+ res = 9;
+ break;
+ case CCMFMT_S1L2VV3:
+ case CCMFMT_S1R2VV3:
+ case CCMFMT_PP1:
+ case CCMFMT_P1I2LL3:
+ case CCMFMT_VV1:
+ case CCMFMT_L1PP2:
+ case CCMFMT_L1VV2:
+ case CCMFMT_LL1:
+ case CCMFMT_L1I2LL3:
+ case CCMFMT_L1II2:
+ case CCMFMT_R1VV2:
+ case CCMFMT_I1LL2:
+ res = MAXINT;
+ break;
+ case CCMFMT_LAST:
+ default:
+ /* programming failure */
+ /* if(1) is hack to get around warning from C++ compiler */
+ if (1) assert (0);
+ break;
+ }
+ return res;
+}
+
+static int
+ccm_paramlist_index (COMPMSG_ID m)
+{
+ int res;
+ int vindex = ccm_vis_index (m);
+ switch (ccm_attrs[vindex].fmt)
+ {
+ case CCMFMT_NONE:
+ case CCMFMT_S1:
+ case CCMFMT_S1S2:
+ case CCMFMT_S1L2:
+ case CCMFMT_S1X2:
+ case CCMFMT_P1:
+ case CCMFMT_P1S2:
+ case CCMFMT_P1S2P3:
+ case CCMFMT_P1S2P3I4:
+ case CCMFMT_P1S2I3:
+ case CCMFMT_P1P2:
+ case CCMFMT_P1L2:
+ case CCMFMT_P1I2:
+ case CCMFMT_P1I2L3:
+ case CCMFMT_P1I2I3:
+ case CCMFMT_V1:
+ case CCMFMT_V1V2:
+ case CCMFMT_V1L2:
+ case CCMFMT_L1:
+ case CCMFMT_L1S2:
+ case CCMFMT_L1S2L3:
+ case CCMFMT_L1P2:
+ case CCMFMT_L1P2I3:
+ case CCMFMT_L1L2:
+ case CCMFMT_L1L2L3:
+ case CCMFMT_L1R2:
+ case CCMFMT_L1I2:
+ case CCMFMT_L1I2L3:
+ case CCMFMT_L1I2I3L4:
+ case CCMFMT_L1I2I3I4I5:
+ case CCMFMT_L1I2I3I4I5I6I7:
+ case CCMFMT_L1I2I3I4I5I6I7I8I9:
+ case CCMFMT_R1:
+ case CCMFMT_I1:
+ case CCMFMT_I1P2I3:
+ case CCMFMT_I1V2:
+ case CCMFMT_I1V2V3:
+ case CCMFMT_I1L2:
+ case CCMFMT_I1I2I3I4:
+ case CCMFMT_I1I2I3I4I5I6:
+ case CCMFMT_I1I2I3I4I5I6I7I8:
+ res = 0;
+ break;
+ case CCMFMT_PP1:
+ case CCMFMT_VV1:
+ case CCMFMT_LL1:
+ res = 1;
+ break;
+ case CCMFMT_L1PP2:
+ case CCMFMT_L1VV2:
+ case CCMFMT_L1II2:
+ case CCMFMT_R1VV2:
+ case CCMFMT_I1LL2:
+ res = 2;
+ break;
+ case CCMFMT_S1L2VV3:
+ case CCMFMT_S1R2VV3:
+ case CCMFMT_P1I2LL3:
+ case CCMFMT_L1I2LL3:
+ res = 3;
+ break;
+ case CCMFMT_LAST:
+ default:
+ /* programming failure */
+ /* if(1) is hack to get around warning from C++ compiler */
+ if (1) assert (0);
+ break;
+ }
+ return res;
+}
+
+static Ccm_Primtype_t
+ccm_param_primtype (COMPMSG_ID m, int param_idx)
+{
+ int vindex;
+ Ccm_Primtype_t res;
+ if (param_idx <= 0 || param_idx > ccm_num_params (m))
+ return CCM_PRIMTYPE_NONE;
+
+ res = CCM_PRIMTYPE_NONE; /* should always be updated */
+ vindex = ccm_vis_index (m);
+ switch (ccm_attrs[vindex].fmt)
+ {
+ /*
+ * Sort cases by:
+ * 1) # parameters
+ * 2) Strings before Integers
+ * 3) Enum tags
+ */
+ case CCMFMT_NONE:
+ /* programming failure */
+ /* if(1) is hack to get around warning from C++ compiler */
+ if (1)
+ assert (0);
+ break;
+ case CCMFMT_S1:
+ case CCMFMT_P1:
+ case CCMFMT_V1:
+ case CCMFMT_L1:
+ case CCMFMT_R1:
+ if (param_idx == 1)
+ res = CCM_PRIMTYPE_STRING;
+ break;
+ case CCMFMT_I1:
+ if (param_idx == 1)
+ res = CCM_PRIMTYPE_INTEGER;
+ break;
+ case CCMFMT_S1S2:
+ case CCMFMT_S1L2:
+ case CCMFMT_P1S2:
+ case CCMFMT_P1P2:
+ case CCMFMT_P1L2:
+ case CCMFMT_V1V2:
+ case CCMFMT_V1L2:
+ case CCMFMT_L1S2:
+ case CCMFMT_L1P2:
+ case CCMFMT_L1L2:
+ case CCMFMT_L1R2:
+ if (param_idx == 1 || param_idx == 2)
+ res = CCM_PRIMTYPE_STRING;
+ break;
+ case CCMFMT_S1X2:
+ if (param_idx == 1)
+ res = CCM_PRIMTYPE_STRING;
+ else if (param_idx == 2)
+ res = CCM_PRIMTYPE_HEXSTRING;
+ break;
+ case CCMFMT_P1I2:
+ case CCMFMT_L1I2:
+ if (param_idx == 1)
+ res = CCM_PRIMTYPE_STRING;
+ else if (param_idx == 2)
+ res = CCM_PRIMTYPE_INTEGER;
+ break;
+ case CCMFMT_I1V2:
+ case CCMFMT_I1L2:
+ if (param_idx == 1)
+ res = CCM_PRIMTYPE_INTEGER;
+ else if (param_idx == 2)
+ res = CCM_PRIMTYPE_STRING;
+ break;
+ case CCMFMT_P1S2P3:
+ case CCMFMT_L1S2L3:
+ case CCMFMT_L1L2L3:
+ if (param_idx >= 1 && param_idx <= 3)
+ res = CCM_PRIMTYPE_STRING;
+ break;
+ case CCMFMT_P1S2I3:
+ case CCMFMT_L1P2I3:
+ if (param_idx == 1 || param_idx == 2)
+ res = CCM_PRIMTYPE_STRING;
+ else if (param_idx == 3)
+ res = CCM_PRIMTYPE_INTEGER;
+ break;
+ case CCMFMT_P1I2L3:
+ case CCMFMT_L1I2L3:
+ if (param_idx == 1 || param_idx == 3)
+ res = CCM_PRIMTYPE_STRING;
+ else if (param_idx == 2)
+ res = CCM_PRIMTYPE_INTEGER;
+ break;
+ case CCMFMT_P1I2I3:
+ if (param_idx == 1)
+ res = CCM_PRIMTYPE_STRING;
+ else if (param_idx == 2 || param_idx == 3)
+ res = CCM_PRIMTYPE_INTEGER;
+ break;
+ case CCMFMT_I1V2V3:
+ if (param_idx == 1)
+ res = CCM_PRIMTYPE_INTEGER;
+ else if (param_idx == 2 || param_idx == 3)
+ res = CCM_PRIMTYPE_STRING;
+ break;
+ case CCMFMT_I1P2I3:
+ if (param_idx == 1 || param_idx == 3)
+ res = CCM_PRIMTYPE_INTEGER;
+ else if (param_idx == 2)
+ res = CCM_PRIMTYPE_STRING;
+ break;
+ case CCMFMT_L1I2I3L4:
+ if (param_idx == 1 || param_idx == 4)
+ res = CCM_PRIMTYPE_STRING;
+ else if (param_idx == 2 || param_idx == 3)
+ res = CCM_PRIMTYPE_INTEGER;
+ break;
+ case CCMFMT_P1S2P3I4:
+ if (param_idx >= 1 && param_idx <= 3)
+ res = CCM_PRIMTYPE_STRING;
+ else if (param_idx == 4)
+ res = CCM_PRIMTYPE_INTEGER;
+ break;
+ case CCMFMT_I1I2I3I4:
+ if (param_idx >= 1 && param_idx <= 4)
+ res = CCM_PRIMTYPE_INTEGER;
+ break;
+ case CCMFMT_L1I2I3I4I5:
+ if (param_idx == 1)
+ res = CCM_PRIMTYPE_STRING;
+ else if (param_idx >= 2 && param_idx <= 5)
+ res = CCM_PRIMTYPE_INTEGER;
+ break;
+ case CCMFMT_I1I2I3I4I5I6:
+ if (param_idx >= 1 && param_idx <= 6)
+ res = CCM_PRIMTYPE_INTEGER;
+ break;
+ case CCMFMT_L1I2I3I4I5I6I7:
+ if (param_idx == 1)
+ res = CCM_PRIMTYPE_STRING;
+ else if (param_idx >= 2 && param_idx <= 7)
+ res = CCM_PRIMTYPE_INTEGER;
+ break;
+ case CCMFMT_I1I2I3I4I5I6I7I8:
+ if (param_idx >= 1 && param_idx <= 8)
+ res = CCM_PRIMTYPE_INTEGER;
+ break;
+ case CCMFMT_L1I2I3I4I5I6I7I8I9:
+ if (param_idx == 1)
+ res = CCM_PRIMTYPE_STRING;
+ else if (param_idx >= 2 && param_idx <= 9)
+ res = CCM_PRIMTYPE_INTEGER;
+ break;
+ case CCMFMT_S1L2VV3:
+ case CCMFMT_S1R2VV3:
+ case CCMFMT_PP1:
+ case CCMFMT_VV1:
+ case CCMFMT_L1PP2:
+ case CCMFMT_L1VV2:
+ case CCMFMT_LL1:
+ case CCMFMT_R1VV2:
+ res = CCM_PRIMTYPE_STRING;
+ break;
+ case CCMFMT_P1I2LL3:
+ case CCMFMT_L1I2LL3:
+ if (param_idx == 2)
+ res = CCM_PRIMTYPE_INTEGER;
+ else
+ res = CCM_PRIMTYPE_STRING;
+ break;
+ case CCMFMT_L1II2:
+ if (param_idx == 1)
+ res = CCM_PRIMTYPE_STRING;
+ else
+ res = CCM_PRIMTYPE_INTEGER;
+ break;
+ case CCMFMT_I1LL2:
+ if (param_idx == 1)
+ res = CCM_PRIMTYPE_INTEGER;
+ else
+ res = CCM_PRIMTYPE_STRING;
+ break;
+ case CCMFMT_LAST:
+ default:
+ /* programming failure */
+ /* if(1) is hack to get around warning from C++ compiler */
+ if (1)
+ assert (0);
+ break;
+ }
+ return res;
+}
+
+static Ccm_Hitype_t
+ccm_param_hightype (COMPMSG_ID m, int param_idx)
+{
+ int vindex;
+ Ccm_Hitype_t res;
+
+ if (param_idx <= 0 || param_idx > ccm_num_params (m))
+ return CCM_HITYPE_NONE;
+ res = CCM_HITYPE_NONE; /* should always be updated */
+ vindex = ccm_vis_index (m);
+ switch (ccm_attrs[vindex].fmt)
+ {
+ case CCMFMT_NONE:
+ /* programming failure */
+ /* if(1) is hack to get around warning from C++ compiler */
+ if (1)
+ assert (0);
+ break;
+ case CCMFMT_S1:
+ if (param_idx == 1)
+ res = CCM_HITYPE_STRING;
+ break;
+ case CCMFMT_S1S2:
+ if (param_idx == 1 || param_idx == 2)
+ res = CCM_HITYPE_STRING;
+ break;
+ case CCMFMT_S1L2:
+ if (param_idx == 1)
+ res = CCM_HITYPE_STRING;
+ else if (param_idx == 2)
+ res = CCM_HITYPE_LOOPTAG;
+ break;
+ case CCMFMT_S1L2VV3:
+ if (param_idx == 1)
+ res = CCM_HITYPE_STRING;
+ else if (param_idx == 2)
+ res = CCM_HITYPE_LOOPTAG;
+ else
+ res = CCM_HITYPE_STRING;
+ break;
+ case CCMFMT_S1R2VV3:
+ if (param_idx == 1)
+ res = CCM_HITYPE_STRING;
+ else if (param_idx == 2)
+ res = CCM_HITYPE_REGIONTAG;
+ else
+ res = CCM_HITYPE_VARIABLE;
+ break;
+ case CCMFMT_S1X2:
+ if (param_idx == 1)
+ res = CCM_HITYPE_STRING;
+ else if (param_idx == 2)
+ res = CCM_HITYPE_HEXSTRING;
+ break;
+ case CCMFMT_P1:
+ if (param_idx == 1)
+ res = CCM_HITYPE_PROCEDURE;
+ break;
+ case CCMFMT_P1S2:
+ if (param_idx == 1)
+ res = CCM_HITYPE_PROCEDURE;
+ else if (param_idx == 2)
+ res = CCM_HITYPE_STRING;
+ break;
+ case CCMFMT_P1S2P3:
+ if (param_idx == 1 || param_idx == 3)
+ res = CCM_HITYPE_PROCEDURE;
+ else if (param_idx == 2)
+ res = CCM_HITYPE_STRING;
+ break;
+ case CCMFMT_P1S2P3I4:
+ if (param_idx == 1 || param_idx == 3)
+ res = CCM_HITYPE_PROCEDURE;
+ else if (param_idx == 2)
+ res = CCM_HITYPE_STRING;
+ else if (param_idx == 4)
+ res = CCM_HITYPE_INTEGER;
+ break;
+ case CCMFMT_P1S2I3:
+ if (param_idx == 1)
+ res = CCM_HITYPE_PROCEDURE;
+ else if (param_idx == 2)
+ res = CCM_HITYPE_STRING;
+ else if (param_idx == 3)
+ res = CCM_HITYPE_INTEGER;
+ break;
+ case CCMFMT_P1P2:
+ if (param_idx == 1 || param_idx == 2)
+ res = CCM_HITYPE_PROCEDURE;
+ break;
+ case CCMFMT_P1L2:
+ if (param_idx == 1)
+ res = CCM_HITYPE_PROCEDURE;
+ else if (param_idx == 2)
+ res = CCM_HITYPE_LOOPTAG;
+ break;
+ case CCMFMT_P1I2:
+ if (param_idx == 1)
+ res = CCM_HITYPE_PROCEDURE;
+ else if (param_idx == 2)
+ res = CCM_HITYPE_INTEGER;
+ break;
+ case CCMFMT_P1I2L3:
+ if (param_idx == 1)
+ res = CCM_HITYPE_PROCEDURE;
+ else if (param_idx == 2)
+ res = CCM_HITYPE_INTEGER;
+ else if (param_idx == 3)
+ res = CCM_HITYPE_LOOPTAG;
+ break;
+ case CCMFMT_P1I2I3:
+ if (param_idx == 1)
+ res = CCM_HITYPE_PROCEDURE;
+ else if (param_idx == 2 || param_idx == 3)
+ res = CCM_HITYPE_INTEGER;
+ break;
+ case CCMFMT_P1I2LL3:
+ if (param_idx == 1)
+ res = CCM_HITYPE_PROCEDURE;
+ else if (param_idx == 2)
+ res = CCM_HITYPE_INTEGER;
+ else
+ res = CCM_HITYPE_LOOPTAG;
+ break;
+ case CCMFMT_PP1:
+ res = CCM_HITYPE_PROCEDURE;
+ break;
+ case CCMFMT_V1:
+ if (param_idx == 1)
+ res = CCM_HITYPE_VARIABLE;
+ break;
+ case CCMFMT_V1V2:
+ if (param_idx == 1 || param_idx == 2)
+ res = CCM_HITYPE_VARIABLE;
+ break;
+ case CCMFMT_V1L2:
+ if (param_idx == 1)
+ res = CCM_HITYPE_VARIABLE;
+ else if (param_idx == 2)
+ res = CCM_HITYPE_LOOPTAG;
+ break;
+ case CCMFMT_VV1:
+ res = CCM_HITYPE_VARIABLE;
+ break;
+ case CCMFMT_L1:
+ if (param_idx == 1)
+ res = CCM_HITYPE_LOOPTAG;
+ break;
+ case CCMFMT_L1S2:
+ if (param_idx == 1)
+ res = CCM_HITYPE_LOOPTAG;
+ else if (param_idx == 2)
+ res = CCM_HITYPE_STRING;
+ break;
+ case CCMFMT_L1S2L3:
+ if (param_idx == 1 || param_idx == 3)
+ res = CCM_HITYPE_LOOPTAG;
+ else if (param_idx == 2)
+ res = CCM_HITYPE_STRING;
+ break;
+ case CCMFMT_L1P2:
+ if (param_idx == 1)
+ res = CCM_HITYPE_LOOPTAG;
+ else if (param_idx == 2)
+ res = CCM_HITYPE_PROCEDURE;
+ break;
+ case CCMFMT_L1P2I3:
+ if (param_idx == 1)
+ res = CCM_HITYPE_LOOPTAG;
+ else if (param_idx == 2)
+ res = CCM_HITYPE_PROCEDURE;
+ else if (param_idx == 3)
+ res = CCM_HITYPE_INTEGER;
+ break;
+ case CCMFMT_L1PP2:
+ if (param_idx == 1)
+ res = CCM_HITYPE_LOOPTAG;
+ else
+ res = CCM_HITYPE_PROCEDURE;
+ break;
+ case CCMFMT_L1VV2:
+ if (param_idx == 1)
+ res = CCM_HITYPE_LOOPTAG;
+ else
+ res = CCM_HITYPE_VARIABLE;
+ break;
+ case CCMFMT_L1L2:
+ if (param_idx == 1 || param_idx == 2)
+ res = CCM_HITYPE_LOOPTAG;
+ break;
+ case CCMFMT_L1L2L3:
+ if (param_idx >= 1 && param_idx <= 3)
+ res = CCM_HITYPE_LOOPTAG;
+ break;
+ case CCMFMT_LL1:
+ res = CCM_HITYPE_LOOPTAG;
+ break;
+ case CCMFMT_L1R2:
+ if (param_idx == 1)
+ res = CCM_HITYPE_LOOPTAG;
+ else if (param_idx == 2)
+ res = CCM_HITYPE_REGIONTAG;
+ break;
+ case CCMFMT_L1I2:
+ if (param_idx == 1)
+ res = CCM_HITYPE_LOOPTAG;
+ else if (param_idx == 2)
+ res = CCM_HITYPE_INTEGER;
+ break;
+ case CCMFMT_L1I2L3:
+ if (param_idx == 1 || param_idx == 3)
+ res = CCM_HITYPE_LOOPTAG;
+ else if (param_idx == 2)
+ res = CCM_HITYPE_INTEGER;
+ break;
+ case CCMFMT_L1I2LL3:
+ if (param_idx == 2)
+ res = CCM_HITYPE_INTEGER;
+ else
+ res = CCM_HITYPE_LOOPTAG;
+ break;
+ case CCMFMT_L1I2I3L4:
+ if (param_idx == 1 || param_idx == 4)
+ res = CCM_HITYPE_LOOPTAG;
+ else if (param_idx == 2 || param_idx == 3)
+ res = CCM_HITYPE_INTEGER;
+ break;
+ case CCMFMT_L1I2I3I4I5:
+ if (param_idx == 1)
+ res = CCM_HITYPE_LOOPTAG;
+ else if (param_idx >= 2 && param_idx <= 5)
+ res = CCM_HITYPE_INTEGER;
+ break;
+ case CCMFMT_L1I2I3I4I5I6I7:
+ if (param_idx == 1)
+ res = CCM_HITYPE_LOOPTAG;
+ else if (param_idx >= 2 && param_idx <= 7)
+ res = CCM_HITYPE_INTEGER;
+ break;
+ case CCMFMT_L1I2I3I4I5I6I7I8I9:
+ if (param_idx == 1)
+ res = CCM_HITYPE_LOOPTAG;
+ else if (param_idx >= 2 && param_idx <= 9)
+ res = CCM_HITYPE_INTEGER;
+ break;
+ case CCMFMT_L1II2:
+ if (param_idx == 1)
+ res = CCM_HITYPE_LOOPTAG;
+ else
+ res = CCM_HITYPE_INTEGER;
+ break;
+ case CCMFMT_R1:
+ if (param_idx == 1)
+ res = CCM_HITYPE_REGIONTAG;
+ break;
+ case CCMFMT_R1VV2:
+ if (param_idx == 1)
+ res = CCM_HITYPE_REGIONTAG;
+ else
+ res = CCM_HITYPE_VARIABLE;
+ break;
+ case CCMFMT_I1:
+ if (param_idx == 1)
+ res = CCM_HITYPE_INTEGER;
+ break;
+ case CCMFMT_I1P2I3:
+ if (param_idx == 1 || param_idx == 3)
+ res = CCM_HITYPE_INTEGER;
+ else if (param_idx == 2)
+ res = CCM_HITYPE_PROCEDURE;
+ break;
+ case CCMFMT_I1V2:
+ if (param_idx == 1)
+ res = CCM_HITYPE_INTEGER;
+ else if (param_idx == 2)
+ res = CCM_HITYPE_VARIABLE;
+ break;
+ case CCMFMT_I1V2V3:
+ if (param_idx == 1)
+ res = CCM_HITYPE_INTEGER;
+ else if (param_idx == 2 || param_idx == 3)
+ res = CCM_HITYPE_VARIABLE;
+ break;
+ case CCMFMT_I1L2:
+ if (param_idx == 1)
+ res = CCM_HITYPE_INTEGER;
+ else if (param_idx == 2)
+ res = CCM_HITYPE_LOOPTAG;
+ break;
+ case CCMFMT_I1LL2:
+ if (param_idx == 1)
+ res = CCM_HITYPE_INTEGER;
+ else
+ res = CCM_HITYPE_LOOPTAG;
+ break;
+ case CCMFMT_I1I2I3I4:
+ if (param_idx >= 1 && param_idx <= 4)
+ res = CCM_HITYPE_INTEGER;
+ break;
+ case CCMFMT_I1I2I3I4I5I6:
+ if (param_idx >= 1 && param_idx <= 6)
+ res = CCM_HITYPE_INTEGER;
+ break;
+ case CCMFMT_I1I2I3I4I5I6I7I8:
+ if (param_idx >= 1 && param_idx <= 8)
+ res = CCM_HITYPE_INTEGER;
+ break;
+ case CCMFMT_LAST:
+ default:
+ /* programming failure */
+ /* if(1) is hack to get around warning from C++ compiler */
+ if (1)
+ assert (0);
+ break;
+ }
+ return res;
+}
+
+static void
+ccm_vis_init ()
+{
+ int size, vindex;
+ static int done = 0;
+ if (done)
+ return;
+ done = 1;
+ size = ccm_vis_index ((COMPMSG_ID) (CCMV_BASIC << 8));
+ ccm_attrs = (Ccm_Attr_t *) calloc (size, sizeof (Ccm_Attr_t));
+ if (ccm_attrs == NULL)
+ exit (1);
+ vindex = ccm_vis_index (CCM_MODDATE);
+ ccm_attrs[vindex].vis = CCMV_VER | CCMV_BASIC | CCMV_UNIMPL;
+ ccm_attrs[vindex].name = "CCM_MODDATE";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Source file %s, last modified on date %s");
+ ccm_attrs[vindex].fmt = CCMFMT_S1S2;
+
+ vindex = ccm_vis_index (CCM_COMPVER);
+ ccm_attrs[vindex].vis = CCMV_VER | CCMV_BASIC | CCMV_UNIMPL;
+ ccm_attrs[vindex].name = "CCM_COMPVER";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Component %s, version %s");
+ ccm_attrs[vindex].fmt = CCMFMT_S1S2;
+
+ vindex = ccm_vis_index (CCM_COMPDATE);
+ ccm_attrs[vindex].vis = CCMV_VER | CCMV_BASIC | CCMV_UNIMPL;
+ ccm_attrs[vindex].name = "CCM_COMPDATE";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Compilation date %s");
+ ccm_attrs[vindex].fmt = CCMFMT_S1;
+
+ vindex = ccm_vis_index (CCM_COMPOPT);
+ ccm_attrs[vindex].vis = CCMV_VER | CCMV_BASIC | CCMV_UNIMPL;
+ ccm_attrs[vindex].name = "CCM_COMPOPT";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Compilation options %s");
+ ccm_attrs[vindex].fmt = CCMFMT_S1;
+
+ vindex = ccm_vis_index (CCM_ACOMPOPT);
+ ccm_attrs[vindex].vis = CCMV_VER | CCMV_BASIC | CCMV_UNIMPL | CCMV_WANT;
+ ccm_attrs[vindex].name = "CCM_ACOMPOPT";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Actual Compilation options %s");
+ ccm_attrs[vindex].fmt = CCMFMT_S1;
+
+ vindex = ccm_vis_index (CCM_VAR_ALIAS);
+ ccm_attrs[vindex].vis = CCMV_WARN | CCMV_BASIC | CCMV_UNIMPL | CCMV_WANT;
+ ccm_attrs[vindex].name = "CCM_VAR_ALIAS";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Variable %s aliased to %s");
+ ccm_attrs[vindex].fmt = CCMFMT_V1V2;
+
+ vindex = ccm_vis_index (CCM_FBIRDIFF);
+ ccm_attrs[vindex].vis = CCMV_WARN | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_FBIRDIFF";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Profile feedback data inconsistent with"
+ " intermediate representation file; check compiler"
+ " version, flags and source file");
+ ccm_attrs[vindex].fmt = CCMFMT_NONE;
+
+ vindex = ccm_vis_index (CCM_OPTRED_SWAP);
+ ccm_attrs[vindex].vis = CCMV_WARN | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_OPTRED_SWAP";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Optimization level for %s reduced from %d to"
+ " %d due to insufficient swap space");
+ ccm_attrs[vindex].fmt = CCMFMT_P1I2I3;
+
+ vindex = ccm_vis_index (CCM_OPTRED_CPLX);
+ ccm_attrs[vindex].vis = CCMV_WARN | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_OPTRED_CPLX";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Optimization level for %s reduced from %d to"
+ " %d due to program complexity");
+ ccm_attrs[vindex].fmt = CCMFMT_P1I2I3;
+
+ vindex = ccm_vis_index (CCM_UNKNOWN);
+ ccm_attrs[vindex].vis = CCMV_WARN | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_UNKNOWN";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Unexpected compiler comment %d");
+ ccm_attrs[vindex].fmt = CCMFMT_I1;
+
+ vindex = ccm_vis_index (CCM_UNPAR_CALL);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_UNPAR_CALL";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop below not parallelized because it contains a"
+ " call to %s");
+ ccm_attrs[vindex].fmt = CCMFMT_P1;
+
+ vindex = ccm_vis_index (CCM_PAR_SER);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_PAR_SER";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Both serial and parallel versions generated for"
+ " loop below");
+ ccm_attrs[vindex].fmt = CCMFMT_NONE;
+
+ vindex = ccm_vis_index (CCM_PAR_SER_VER);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_PAR_SER_VER";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Both serial and parallel versions generated for"
+ " loop below; with parallel version used if %s,"
+ " serial otherwise");
+ ccm_attrs[vindex].fmt = CCMFMT_S1;
+
+ vindex = ccm_vis_index (CCM_PAR_DRECTV);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_PAR_DRECTV";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop below parallelized by explicit user"
+ " directive");
+ ccm_attrs[vindex].fmt = CCMFMT_NONE;
+
+ vindex = ccm_vis_index (CCM_APAR);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_APAR";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop below autoparallelized");
+ ccm_attrs[vindex].fmt = CCMFMT_NONE;
+
+ vindex = ccm_vis_index (CCM_AUTOPAR);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_UNIMPL | CCMV_WANT;
+ ccm_attrs[vindex].name = "CCM_AUTOPAR";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop below autoparallelized; equivalent"
+ " explict directive is %s");
+ ccm_attrs[vindex].fmt = CCMFMT_S1;
+
+ vindex = ccm_vis_index (CCM_UNPAR_DD);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_UNPAR_DD";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop below could not be parallelized because of a"
+ " data dependency on %s");
+ ccm_attrs[vindex].fmt = CCMFMT_VV1;
+
+ vindex = ccm_vis_index (CCM_UNPAR_DDA);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_UNPAR_DDA";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop below could not be parallelized because of a"
+ " data dependency or aliasing of %s");
+ ccm_attrs[vindex].fmt = CCMFMT_VV1;
+
+ vindex = ccm_vis_index (CCM_UNPAR_ANONDD);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_UNPAR_ANONDD";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop below could not be parallelized because of"
+ " an anonymous data dependency");
+ ccm_attrs[vindex].fmt = CCMFMT_NONE;
+
+ vindex = ccm_vis_index (CCM_UNPAR_ANONDDA);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_UNPAR_ANONDDA";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop below could not be parallelized because of"
+ " an anonymous data dependency or aliasing");
+ ccm_attrs[vindex].fmt = CCMFMT_NONE;
+
+ vindex = ccm_vis_index (CCM_PAR_WORK);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_PAR_WORK";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop below parallelized, but might not contain"
+ " enough work to be efficiently run in parallel");
+ ccm_attrs[vindex].fmt = CCMFMT_NONE;
+
+ vindex = ccm_vis_index (CCM_UNPAR_EXIT);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_UNPAR_EXIT";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop below not parallelized because it contains"
+ " multiple exit points");
+ ccm_attrs[vindex].fmt = CCMFMT_NONE;
+
+ vindex = ccm_vis_index (CCM_UNPAR_STRNG);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_UNPAR_STRNG";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop below not parallelized because it contains a"
+ " strange flow of control");
+ ccm_attrs[vindex].fmt = CCMFMT_NONE;
+
+ vindex = ccm_vis_index (CCM_UNPAR_IO);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_UNPAR_IO";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop below not parallelized because it contains"
+ " I/O or other MT-unsafe calls");
+ ccm_attrs[vindex].fmt = CCMFMT_NONE;
+
+ vindex = ccm_vis_index (CCM_PAR_BODY_NAME);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_PAR_BODY_NAME";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Parallel loop-body code is in function %s");
+ ccm_attrs[vindex].fmt = CCMFMT_P1;
+
+ vindex = ccm_vis_index (CCM_UNPAR_NLOOPIDX);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_UNPAR_NLOOPIDX";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop below not parallelized because loop index"
+ " not found");
+ ccm_attrs[vindex].fmt = CCMFMT_NONE;
+
+ vindex = ccm_vis_index (CCM_UNPAR_DRECTV);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_UNPAR_DRECTV";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop below not parallelized because of explicit"
+ " user directive");
+ ccm_attrs[vindex].fmt = CCMFMT_NONE;
+
+ vindex = ccm_vis_index (CCM_UNPAR_NOTPROFIT);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_UNPAR_NOTPROFIT";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop below not parallelized because it was not"
+ " profitable to do so");
+ ccm_attrs[vindex].fmt = CCMFMT_NONE;
+
+ vindex = ccm_vis_index (CCM_UNPAR_NEST);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_UNPAR_NEST";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop below not parallelized because it was"
+ " nested in a parallel loop");
+ ccm_attrs[vindex].fmt = CCMFMT_NONE;
+
+ vindex = ccm_vis_index (CCM_UNPAR);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_UNPAR";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop below not parallelized");
+ ccm_attrs[vindex].fmt = CCMFMT_NONE;
+
+ vindex = ccm_vis_index (CCM_UNPAR_NOAUTO);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_UNPAR_NOAUTO";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop below not parallelized because"
+ " autoparallelization is not enabled");
+ ccm_attrs[vindex].fmt = CCMFMT_NONE;
+
+ vindex = ccm_vis_index (CCM_PR_L_VAR);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_PR_L_VAR";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Private variables in loop below:"
+ " %s");
+ ccm_attrs[vindex].fmt = CCMFMT_VV1;
+
+ vindex = ccm_vis_index (CCM_SH_L_VAR);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_SH_L_VAR";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Shared variables in loop below:"
+ " %s");
+ ccm_attrs[vindex].fmt = CCMFMT_VV1;
+
+ vindex = ccm_vis_index (CCM_TP_L_VAR);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_TP_L_VAR";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Threadprivate variables in loop below:"
+ " %s");
+ ccm_attrs[vindex].fmt = CCMFMT_VV1;
+
+ vindex = ccm_vis_index (CCM_RV_L_VAR);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_RV_L_VAR";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Reduction variables in loop below:"
+ " %s");
+ ccm_attrs[vindex].fmt = CCMFMT_VV1;
+
+ vindex = ccm_vis_index (CCM_IM_L_VAR);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_IM_L_VAR";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Implicit variables in loop below:"
+ " %s");
+ ccm_attrs[vindex].fmt = CCMFMT_VV1;
+
+ vindex = ccm_vis_index (CCM_PR_O_VAR);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_PR_O_VAR";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Private variables in OpenMP construct below:"
+ " %s");
+ ccm_attrs[vindex].fmt = CCMFMT_VV1;
+
+ vindex = ccm_vis_index (CCM_SH_O_VAR);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_SH_O_VAR";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Shared variables in OpenMP construct below:"
+ " %s");
+ ccm_attrs[vindex].fmt = CCMFMT_VV1;
+
+ vindex = ccm_vis_index (CCM_TP_O_VAR);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_TP_O_VAR";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Threadprivate variables in OpenMP construct"
+ " below: %s");
+ ccm_attrs[vindex].fmt = CCMFMT_VV1;
+
+ vindex = ccm_vis_index (CCM_RV_O_VAR);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_RV_O_VAR";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Reduction variables in OpenMP construct below:"
+ " %s");
+ ccm_attrs[vindex].fmt = CCMFMT_VV1;
+
+ vindex = ccm_vis_index (CCM_IM_O_VAR);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_IM_O_VAR";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Implicit variables in OpenMP construct below:"
+ " %s");
+ ccm_attrs[vindex].fmt = CCMFMT_VV1;
+
+ vindex = ccm_vis_index (CCM_UNPAR_IN_OMP);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_UNPAR_IN_OMP";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop below not parallelized because it is inside"
+ " an OpenMP region");
+ ccm_attrs[vindex].fmt = CCMFMT_NONE;
+
+ vindex = ccm_vis_index (CCM_FP_O_VAR);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_FP_O_VAR";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Firstprivate variables in OpenMP construct below:"
+ " %s");
+ ccm_attrs[vindex].fmt = CCMFMT_VV1;
+
+ vindex = ccm_vis_index (CCM_LP_O_VAR);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_LP_O_VAR";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Lastprivate variables in OpenMP construct below:"
+ " %s");
+ ccm_attrs[vindex].fmt = CCMFMT_VV1;
+
+ vindex = ccm_vis_index (CCM_CP_O_VAR);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_CP_O_VAR";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Copyprivate variables in OpenMP construct below:"
+ " %s");
+ ccm_attrs[vindex].fmt = CCMFMT_VV1;
+
+ vindex = ccm_vis_index (CCM_PR_OAS_VAR);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_PR_OAS_VAR";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Variables autoscoped as PRIVATE in OpenMP"
+ " construct below: %s");
+ ccm_attrs[vindex].fmt = CCMFMT_VV1;
+
+ vindex = ccm_vis_index (CCM_SH_OAS_VAR);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_SH_OAS_VAR";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Variables autoscoped as SHARED in OpenMP"
+ " construct below: %s");
+ ccm_attrs[vindex].fmt = CCMFMT_VV1;
+
+ vindex = ccm_vis_index (CCM_FP_OAS_VAR);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_FP_OAS_VAR";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Variables autoscoped as FIRSTPRIVATE in OpenMP"
+ " construct below: %s");
+ ccm_attrs[vindex].fmt = CCMFMT_VV1;
+
+ vindex = ccm_vis_index (CCM_LP_OAS_VAR);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_LP_OAS_VAR";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Variables autoscoped as LASTPRIVATE in OpenMP"
+ " construct below: %s");
+ ccm_attrs[vindex].fmt = CCMFMT_VV1;
+
+ vindex = ccm_vis_index (CCM_RV_OAS_VAR);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_RV_OAS_VAR";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Variables autoscoped as REDUCTION in OpenMP"
+ " construct below: %s");
+ ccm_attrs[vindex].fmt = CCMFMT_VV1;
+
+ vindex = ccm_vis_index (CCM_FAIL_OAS_VAR);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC | CCMV_WARN | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_FAIL_OAS_VAR";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Variables cannot be autoscoped in OpenMP"
+ " construct below: %s");
+ ccm_attrs[vindex].fmt = CCMFMT_VV1;
+
+ vindex = ccm_vis_index (CCM_SERIALIZE_OAS);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC | CCMV_WARN | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_SERIALIZE_OAS";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "OpenMP parallel region below is serialized"
+ " because autoscoping has failed");
+ ccm_attrs[vindex].fmt = CCMFMT_NONE;
+
+ vindex = ccm_vis_index (CCM_UNPAR_CALL_2);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_UNPAR_CALL_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s not parallelized because it contains calls"
+ " to: %s");
+ ccm_attrs[vindex].fmt = CCMFMT_L1PP2;
+
+ vindex = ccm_vis_index (CCM_PAR_DRECTV_2);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_PAR_DRECTV_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s parallelized by explicit user directive");
+ ccm_attrs[vindex].fmt = CCMFMT_L1;
+
+ vindex = ccm_vis_index (CCM_APAR_2);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_APAR_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s autoparallelized");
+ ccm_attrs[vindex].fmt = CCMFMT_L1;
+
+ vindex = ccm_vis_index (CCM_AUTOPAR_2);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_UNIMPL | CCMV_WANT;
+ ccm_attrs[vindex].name = "CCM_AUTOPAR_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s autoparallelized; equivalent"
+ " explict directive is %s");
+ ccm_attrs[vindex].fmt = CCMFMT_L1S2;
+
+ vindex = ccm_vis_index (CCM_UNPAR_DD_2);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_UNPAR_DD_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s could not be parallelized because of"
+ " data dependences on: %s");
+ ccm_attrs[vindex].fmt = CCMFMT_L1VV2;
+
+ vindex = ccm_vis_index (CCM_UNPAR_DDA_2);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_UNPAR_DDA_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s could not be parallelized because of a"
+ " data dependence or aliasing of: %s");
+ ccm_attrs[vindex].fmt = CCMFMT_L1VV2;
+
+ vindex = ccm_vis_index (CCM_UNPAR_ANONDD_2);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_UNPAR_ANONDD_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s could not be parallelized because of an"
+ " anonymous data dependence");
+ ccm_attrs[vindex].fmt = CCMFMT_L1;
+
+ vindex = ccm_vis_index (CCM_UNPAR_ANONDDA_2);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_UNPAR_ANONDDA_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s could not be parallelized because of an"
+ " anonymous data dependence or aliasing");
+ ccm_attrs[vindex].fmt = CCMFMT_L1;
+
+ vindex = ccm_vis_index (CCM_PAR_WORK_2);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_PAR_WORK_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s parallelized, but might not contain"
+ " enough work to run efficiently in parallel");
+ ccm_attrs[vindex].fmt = CCMFMT_L1;
+
+ vindex = ccm_vis_index (CCM_UNPAR_EXIT_2);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_UNPAR_EXIT_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s not parallelized because it contains"
+ " multiple exit points");
+ ccm_attrs[vindex].fmt = CCMFMT_L1;
+
+ vindex = ccm_vis_index (CCM_UNPAR_STRANGE_2);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_UNPAR_STRANGE_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s not parallelized because it contains a"
+ " strange flow of control");
+ ccm_attrs[vindex].fmt = CCMFMT_L1;
+
+ vindex = ccm_vis_index (CCM_UNPAR_IO_2);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_UNPAR_IO_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s not parallelized because it contains"
+ " I/O or other MT-unsafe calls");
+ ccm_attrs[vindex].fmt = CCMFMT_L1;
+
+ vindex = ccm_vis_index (CCM_PAR_BODY_NAME_2);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP;
+ ccm_attrs[vindex].name = "CCM_PAR_BODY_NAME_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s parallel loop-body code placed in"
+ " function %s along with %d inner loops");
+ ccm_attrs[vindex].fmt = CCMFMT_L1P2I3;
+
+ vindex = ccm_vis_index (CCM_UNPAR_NLOOPIDX_2);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_UNPAR_NLOOPIDX_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s not parallelized because loop index not"
+ " found");
+ ccm_attrs[vindex].fmt = CCMFMT_L1;
+
+ vindex = ccm_vis_index (CCM_UNPAR_DRECTV_2);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_UNPAR_DRECTV_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s not parallelized because of explicit"
+ " user directive");
+ ccm_attrs[vindex].fmt = CCMFMT_L1;
+
+ vindex = ccm_vis_index (CCM_UNPAR_NOTPROFIT_2);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_UNPAR_NOTPROFIT_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s not parallelized because it was not"
+ " profitable to do so");
+ ccm_attrs[vindex].fmt = CCMFMT_L1;
+
+ vindex = ccm_vis_index (CCM_UNPAR_NEST_2);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_UNPAR_NEST_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s not parallelized because it was"
+ " nested within a parallel loop");
+ ccm_attrs[vindex].fmt = CCMFMT_L1;
+
+ vindex = ccm_vis_index (CCM_UNPAR_2);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_UNPAR_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s not parallelized");
+ ccm_attrs[vindex].fmt = CCMFMT_L1;
+
+ vindex = ccm_vis_index (CCM_UNPAR_NOAUTO_2);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_UNPAR_NOAUTO_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s not parallelized because"
+ " autoparallelization is not enabled");
+ ccm_attrs[vindex].fmt = CCMFMT_L1;
+
+ vindex = ccm_vis_index (CCM_PR_L_VAR_2);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_PR_L_VAR_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Private variables in %s:"
+ " %s");
+ ccm_attrs[vindex].fmt = CCMFMT_L1VV2;
+
+ vindex = ccm_vis_index (CCM_SH_L_VAR_2);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_SH_L_VAR_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Shared variables in %s:"
+ " %s");
+ ccm_attrs[vindex].fmt = CCMFMT_L1VV2;
+
+ vindex = ccm_vis_index (CCM_TP_L_VAR_2);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_TP_L_VAR_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Threadprivate variables in %s:"
+ " %s");
+ ccm_attrs[vindex].fmt = CCMFMT_L1VV2;
+
+ vindex = ccm_vis_index (CCM_RV_L_VAR_2);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_RV_L_VAR_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Reduction variables of operator %s in %s:"
+ " %s");
+ ccm_attrs[vindex].fmt = CCMFMT_S1L2VV3;
+
+ vindex = ccm_vis_index (CCM_IM_L_VAR_2);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_IM_L_VAR_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Implicit variables in %s:"
+ " %s");
+ ccm_attrs[vindex].fmt = CCMFMT_L1VV2;
+
+ vindex = ccm_vis_index (CCM_PR_O_VAR_2);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_PR_O_VAR_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Private variables in %s: %s");
+ ccm_attrs[vindex].fmt = CCMFMT_R1VV2;
+
+ vindex = ccm_vis_index (CCM_SH_O_VAR_2);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_SH_O_VAR_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Shared variables in %s: %s");
+ ccm_attrs[vindex].fmt = CCMFMT_R1VV2;
+
+ vindex = ccm_vis_index (CCM_TP_O_VAR_2);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_TP_O_VAR_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Threadprivate variables in %s: %s");
+ ccm_attrs[vindex].fmt = CCMFMT_R1VV2;
+
+ vindex = ccm_vis_index (CCM_RV_O_VAR_2);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_RV_O_VAR_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Reduction variables of operator %s in %s:"
+ " %s");
+ ccm_attrs[vindex].fmt = CCMFMT_S1R2VV3;
+
+ vindex = ccm_vis_index (CCM_IM_O_VAR_2);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_IM_O_VAR_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Implicit variables in %s: %s");
+ ccm_attrs[vindex].fmt = CCMFMT_R1VV2;
+
+ vindex = ccm_vis_index (CCM_UNPAR_IN_OMP_2);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_UNPAR_IN_OMP_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s not parallelized because it is inside"
+ " OpenMP region %s");
+ ccm_attrs[vindex].fmt = CCMFMT_L1R2;
+
+ vindex = ccm_vis_index (CCM_FP_O_VAR_2);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_FP_O_VAR_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Firstprivate variables in %s: %s");
+ ccm_attrs[vindex].fmt = CCMFMT_R1VV2;
+
+ vindex = ccm_vis_index (CCM_LP_O_VAR_2);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_LP_O_VAR_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Lastprivate variables in %s: %s");
+ ccm_attrs[vindex].fmt = CCMFMT_R1VV2;
+
+ vindex = ccm_vis_index (CCM_CP_O_VAR_2);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_CP_O_VAR_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Copyprivate variables in %s:"
+ " %s");
+ ccm_attrs[vindex].fmt = CCMFMT_R1VV2;
+
+ vindex = ccm_vis_index (CCM_PR_OAS_VAR_2);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_PR_OAS_VAR_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Variables autoscoped as PRIVATE in %s:"
+ " %s");
+ ccm_attrs[vindex].fmt = CCMFMT_R1VV2;
+
+ vindex = ccm_vis_index (CCM_SH_OAS_VAR_2);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_SH_OAS_VAR_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Variables autoscoped as SHARED in %s: %s");
+ ccm_attrs[vindex].fmt = CCMFMT_R1VV2;
+
+ vindex = ccm_vis_index (CCM_FP_OAS_VAR_2);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_FP_OAS_VAR_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Variables autoscoped as FIRSTPRIVATE in %s:"
+ " %s");
+ ccm_attrs[vindex].fmt = CCMFMT_R1VV2;
+
+ vindex = ccm_vis_index (CCM_LP_OAS_VAR_2);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_LP_OAS_VAR_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Variables autoscoped as LASTPRIVATE in %s:"
+ " %s");
+ ccm_attrs[vindex].fmt = CCMFMT_R1VV2;
+
+ vindex = ccm_vis_index (CCM_RV_OAS_VAR_2);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_RV_OAS_VAR_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Variables autoscoped as REDUCTION of operator"
+ " %s in %s: %s");
+ ccm_attrs[vindex].fmt = CCMFMT_S1R2VV3;
+
+ vindex = ccm_vis_index (CCM_FAIL_OAS_VAR_2);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC | CCMV_WARN;
+ ccm_attrs[vindex].name = "CCM_FAIL_OAS_VAR_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Variables treated as shared because they cannot"
+ " be autoscoped in %s: %s");
+ ccm_attrs[vindex].fmt = CCMFMT_R1VV2;
+
+ vindex = ccm_vis_index (CCM_SERIALIZE_OAS_2);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC | CCMV_WARN;
+ ccm_attrs[vindex].name = "CCM_SERIALIZE_OAS_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s will be executed by a single thread because"
+ " autoscoping for some variables was not successful");
+ ccm_attrs[vindex].fmt = CCMFMT_R1;
+
+ vindex = ccm_vis_index (CCM_QPERMVEC);
+ ccm_attrs[vindex].vis = CCMV_QUERY | CCMV_BASIC | CCMV_UNIMPL | CCMV_WANT;
+ ccm_attrs[vindex].name = "CCM_QPERMVEC";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Is %s a permutation vector during execution of"
+ " %s?");
+ ccm_attrs[vindex].fmt = CCMFMT_V1L2;
+
+ vindex = ccm_vis_index (CCM_QEXPR);
+ ccm_attrs[vindex].vis = CCMV_QUERY | CCMV_BASIC | CCMV_UNIMPL | CCMV_WANT;
+ ccm_attrs[vindex].name = "CCM_QEXPR";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Is expression %s true for %s?");
+ ccm_attrs[vindex].fmt = CCMFMT_S1L2;
+
+ vindex = ccm_vis_index (CCM_QSAFECALL);
+ ccm_attrs[vindex].vis = CCMV_QUERY | CCMV_BASIC | CCMV_UNIMPL | CCMV_WANT;
+ ccm_attrs[vindex].name = "CCM_QSAFECALL";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Is subroutine %s MP-safe as used in %s?");
+ ccm_attrs[vindex].fmt = CCMFMT_P1L2;
+
+ vindex = ccm_vis_index (CCM_LCOST);
+ ccm_attrs[vindex].vis = CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_LCOST";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop below estimated to cost %d cycles per"
+ " iteration");
+ ccm_attrs[vindex].fmt = CCMFMT_I1;
+
+ vindex = ccm_vis_index (CCM_UNROLL);
+ ccm_attrs[vindex].vis = CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_UNROLL";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop below unrolled %d times");
+ ccm_attrs[vindex].fmt = CCMFMT_I1;
+
+ vindex = ccm_vis_index (CCM_IMIX);
+ ccm_attrs[vindex].vis = CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_IMIX";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop below has %d loads, %d stores,"
+ " %d prefetches, %d FPadds, %d FPmuls, and"
+ " %d FPdivs per iteration");
+ ccm_attrs[vindex].fmt = CCMFMT_I1I2I3I4I5I6;
+
+ vindex = ccm_vis_index (CCM_SPILLS);
+ ccm_attrs[vindex].vis = CCMV_LOOP | CCMV_UNIMPL | CCMV_WANT | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_SPILLS";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop below required %d integer register spills,"
+ " %d FP register spills, and used"
+ " %d integer registers and %d FP registers");
+ ccm_attrs[vindex].fmt = CCMFMT_I1I2I3I4;
+
+ vindex = ccm_vis_index (CCM_LFISSION);
+ ccm_attrs[vindex].vis = CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_LFISSION";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop below fissioned into %d loops");
+ ccm_attrs[vindex].fmt = CCMFMT_I1;
+
+ vindex = ccm_vis_index (CCM_LPEEL);
+ ccm_attrs[vindex].vis = CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_LPEEL";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop below had iterations peeled off for better"
+ " unrolling and/or parallelization");
+ ccm_attrs[vindex].fmt = CCMFMT_NONE;
+
+ vindex = ccm_vis_index (CCM_LBLOCKED);
+ ccm_attrs[vindex].vis = CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_LBLOCKED";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop below blocked by %d for improved cache"
+ " performance");
+ ccm_attrs[vindex].fmt = CCMFMT_I1;
+
+ vindex = ccm_vis_index (CCM_LTILED);
+ ccm_attrs[vindex].vis = CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_LTILED";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop below tiled for better performance");
+ ccm_attrs[vindex].fmt = CCMFMT_NONE;
+
+ vindex = ccm_vis_index (CCM_LUNRJAM);
+ ccm_attrs[vindex].vis = CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_LUNRJAM";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop below unrolled and jammed");
+ ccm_attrs[vindex].fmt = CCMFMT_NONE;
+
+ vindex = ccm_vis_index (CCM_LWHILE2DO);
+ ccm_attrs[vindex].vis = CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_LWHILE2DO";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Bounds test for loop below moved to top of loop");
+ ccm_attrs[vindex].fmt = CCMFMT_NONE;
+
+ vindex = ccm_vis_index (CCM_L2CALL);
+ ccm_attrs[vindex].vis = CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_L2CALL";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop below replaced by a call to %s");
+ ccm_attrs[vindex].fmt = CCMFMT_P1;
+
+ vindex = ccm_vis_index (CCM_LDEAD);
+ ccm_attrs[vindex].vis = CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_LDEAD";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop below deleted as dead code");
+ ccm_attrs[vindex].fmt = CCMFMT_NONE;
+
+ vindex = ccm_vis_index (CCM_LINTRCHNG);
+ ccm_attrs[vindex].vis = CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_LINTRCHNG";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop below interchanged with loop on line %d");
+ ccm_attrs[vindex].fmt = CCMFMT_I1;
+
+ vindex = ccm_vis_index (CCM_FUSEDTO);
+ ccm_attrs[vindex].vis = CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_FUSEDTO";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop below fused with loop on line %d");
+ ccm_attrs[vindex].fmt = CCMFMT_I1;
+
+ vindex = ccm_vis_index (CCM_FUSEDFROM);
+ ccm_attrs[vindex].vis = CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_FUSEDFROM";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop from line %d fused with loop below");
+ ccm_attrs[vindex].fmt = CCMFMT_I1;
+
+ vindex = ccm_vis_index (CCM_VECINTRNSC);
+ ccm_attrs[vindex].vis = CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_VECINTRNSC";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop below transformed to use calls to vector"
+ " intrinsic %s");
+ ccm_attrs[vindex].fmt = CCMFMT_PP1;
+
+ vindex = ccm_vis_index (CCM_LSTRIPMINE);
+ ccm_attrs[vindex].vis = CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_LSTRIPMINE";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop below strip-mined");
+ ccm_attrs[vindex].fmt = CCMFMT_NONE;
+
+ vindex = ccm_vis_index (CCM_LNEST2LOOPS);
+ ccm_attrs[vindex].vis = CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_LNEST2LOOPS";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop below collapsed with loop on line %d");
+ ccm_attrs[vindex].fmt = CCMFMT_I1;
+
+ vindex = ccm_vis_index (CCM_LREVERSE);
+ ccm_attrs[vindex].vis = CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_LREVERSE";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop below has had its iteration direction"
+ " reversed");
+ ccm_attrs[vindex].fmt = CCMFMT_NONE;
+
+ vindex = ccm_vis_index (CCM_IMIX2);
+ ccm_attrs[vindex].vis = CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_IMIX2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop below has %d loads, %d stores,"
+ " %d prefetches, %d FPadds, %d FPmuls,"
+ " %d FPdivs, %d FPsubs, and %d FPsqrts per"
+ " iteration");
+ ccm_attrs[vindex].fmt = CCMFMT_I1I2I3I4I5I6I7I8;
+
+ vindex = ccm_vis_index (CCM_LUNRFULL);
+ ccm_attrs[vindex].vis = CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_LUNRFULL";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop below fully unrolled");
+ ccm_attrs[vindex].fmt = CCMFMT_NONE;
+
+ vindex = ccm_vis_index (CCM_ELIM_NOAMORTINST);
+ ccm_attrs[vindex].vis = CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_ELIM_NOAMORTINST";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop below was eliminated as it contains no"
+ " non-amortizable instructions");
+ ccm_attrs[vindex].fmt = CCMFMT_NONE;
+
+ vindex = ccm_vis_index (CCM_COMP_DALIGN);
+ ccm_attrs[vindex].vis = CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_COMP_DALIGN";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Performance of loop below could be improved"
+ " by compiling with -dalign");
+ ccm_attrs[vindex].fmt = CCMFMT_NONE;
+
+ vindex = ccm_vis_index (CCM_INTIMIX);
+ ccm_attrs[vindex].vis = CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_INTIMIX";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop below has %d int-loads, %d int-stores,"
+ " %d alu-ops, %d muls, %d int-divs and"
+ " %d shifts per iteration");
+ ccm_attrs[vindex].fmt = CCMFMT_I1I2I3I4I5I6;
+
+ vindex = ccm_vis_index (CCM_LMULTI_VERSION);
+ ccm_attrs[vindex].vis = CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_LMULTI_VERSION";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s multi-versioned. Specialized version"
+ " is %s");
+ ccm_attrs[vindex].fmt = CCMFMT_L1L2;
+
+ vindex = ccm_vis_index (CCM_LCOST_2);
+ ccm_attrs[vindex].vis = CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_LCOST_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s estimated to cost %d cycles per iteration");
+ ccm_attrs[vindex].fmt = CCMFMT_L1I2;
+
+ vindex = ccm_vis_index (CCM_UNROLL_2);
+ ccm_attrs[vindex].vis = CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_UNROLL_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s unrolled %d times");
+ ccm_attrs[vindex].fmt = CCMFMT_L1I2;
+
+ vindex = ccm_vis_index (CCM_IMIX_B);
+ ccm_attrs[vindex].vis = CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_IMIX_B";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s has %d loads, %d stores,"
+ " %d prefetches, %d FPadds, %d FPmuls, and"
+ " %d FPdivs per iteration");
+ ccm_attrs[vindex].fmt = CCMFMT_L1I2I3I4I5I6I7;
+
+ vindex = ccm_vis_index (CCM_SPILLS_2);
+ ccm_attrs[vindex].vis = CCMV_LOOP | CCMV_UNIMPL | CCMV_WANT;
+ ccm_attrs[vindex].name = "CCM_SPILLS_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s required %d integer register spills,"
+ " %d FP register spills, and used"
+ " %d integer registers and %d FP registers");
+ ccm_attrs[vindex].fmt = CCMFMT_L1I2I3I4I5;
+
+ vindex = ccm_vis_index (CCM_LFISSION_2);
+ ccm_attrs[vindex].vis = CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_LFISSION_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s fissioned into %d loops, generating:"
+ " %s");
+ ccm_attrs[vindex].fmt = CCMFMT_L1I2LL3;
+
+ vindex = ccm_vis_index (CCM_LFISSION_FRAG);
+ ccm_attrs[vindex].vis = CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_LFISSION_FRAG";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s contains code from lines: %s");
+ ccm_attrs[vindex].fmt = CCMFMT_L1II2;
+
+ vindex = ccm_vis_index (CCM_LPEEL_2);
+ ccm_attrs[vindex].vis = CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_LPEEL_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s had iterations peeled off for better"
+ " unrolling and/or parallelization");
+ ccm_attrs[vindex].fmt = CCMFMT_L1;
+
+ vindex = ccm_vis_index (CCM_LBLOCKED_2);
+ ccm_attrs[vindex].vis = CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_LBLOCKED_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s blocked by %d for improved memory"
+ " hierarchy performance, new inner loop %s");
+ ccm_attrs[vindex].fmt = CCMFMT_L1I2L3;
+
+ vindex = ccm_vis_index (CCM_LOUTER_UNROLL);
+ ccm_attrs[vindex].vis = CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_LOUTER_UNROLL";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s is outer-unrolled %d times as part"
+ " of unroll and jam");
+ ccm_attrs[vindex].fmt = CCMFMT_L1I2;
+
+ vindex = ccm_vis_index (CCM_LJAMMED);
+ ccm_attrs[vindex].vis = CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_LJAMMED";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "All %d copies of %s are fused together"
+ " as part of unroll and jam");
+ ccm_attrs[vindex].fmt = CCMFMT_I1L2;
+
+ vindex = ccm_vis_index (CCM_LWHILE2DO_2);
+ ccm_attrs[vindex].vis = CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_LWHILE2DO_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Bounds test for %s moved to top of loop");
+ ccm_attrs[vindex].fmt = CCMFMT_L1;
+
+ vindex = ccm_vis_index (CCM_L2CALL_2);
+ ccm_attrs[vindex].vis = CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_L2CALL_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s replaced by a call to %s");
+ ccm_attrs[vindex].fmt = CCMFMT_L1P2;
+
+ vindex = ccm_vis_index (CCM_LDEAD_2);
+ ccm_attrs[vindex].vis = CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_LDEAD_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s deleted as dead code");
+ ccm_attrs[vindex].fmt = CCMFMT_L1;
+
+ vindex = ccm_vis_index (CCM_LINTRCHNG_2);
+ ccm_attrs[vindex].vis = CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_LINTRCHNG_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s interchanged with %s");
+ ccm_attrs[vindex].fmt = CCMFMT_L1L2;
+
+ vindex = ccm_vis_index (CCM_LINTRCHNG_ORDER);
+ ccm_attrs[vindex].vis = CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_LINTRCHNG_ORDER";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "For loop nest below, the final order of loops"
+ " after interchanging and subsequent"
+ " transformations is: %s");
+ ccm_attrs[vindex].fmt = CCMFMT_LL1;
+
+ vindex = ccm_vis_index (CCM_FUSED_2);
+ ccm_attrs[vindex].vis = CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_FUSED_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s fused with %s, new loop %s");
+ ccm_attrs[vindex].fmt = CCMFMT_L1L2L3;
+
+ vindex = ccm_vis_index (CCM_VECINTRNSC_2);
+ ccm_attrs[vindex].vis = CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_VECINTRNSC_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s transformed to use calls to vector"
+ " intrinsics: %s");
+ ccm_attrs[vindex].fmt = CCMFMT_L1PP2;
+
+ vindex = ccm_vis_index (CCM_LSTRIPMINE_2);
+ ccm_attrs[vindex].vis = CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_LSTRIPMINE_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s strip-mined by %d, new inner loop %s");
+ ccm_attrs[vindex].fmt = CCMFMT_L1I2L3;
+
+ vindex = ccm_vis_index (CCM_LNEST2LOOPS_2);
+ ccm_attrs[vindex].vis = CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_LNEST2LOOPS_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s collapsed with %s, new loop %s");
+ ccm_attrs[vindex].fmt = CCMFMT_L1L2L3;
+
+ vindex = ccm_vis_index (CCM_LREVERSE_2);
+ ccm_attrs[vindex].vis = CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_LREVERSE_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s has had its iteration direction reversed");
+ ccm_attrs[vindex].fmt = CCMFMT_L1;
+
+ vindex = ccm_vis_index (CCM_IMIX2_B);
+ ccm_attrs[vindex].vis = CCMV_LOOP | CCMV_BASIC | CCMV_UNIMPL | CCMV_WANT;
+ ccm_attrs[vindex].name = "CCM_IMIX2_B";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s has %d loads, %d stores,"
+ " %d prefetches, %d FPadds, %d FPmuls,"
+ " %d FPdivs, %d FPsubs, and %d FPsqrts per"
+ " iteration");
+ ccm_attrs[vindex].fmt = CCMFMT_L1I2I3I4I5I6I7I8I9;
+
+ vindex = ccm_vis_index (CCM_LUNRFULL_2);
+ ccm_attrs[vindex].vis = CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_LUNRFULL_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s fully unrolled");
+ ccm_attrs[vindex].fmt = CCMFMT_L1;
+
+ vindex = ccm_vis_index (CCM_ELIM_NOAMORTINST_2);
+ ccm_attrs[vindex].vis = CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_ELIM_NOAMORTINST_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s was eliminated as it contains no"
+ " non-amortizable instructions");
+ ccm_attrs[vindex].fmt = CCMFMT_L1;
+
+ vindex = ccm_vis_index (CCM_COMP_DALIGN_2);
+ ccm_attrs[vindex].vis = CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_COMP_DALIGN_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Performance of %s could be improved by"
+ " compiling with -dalign");
+ ccm_attrs[vindex].fmt = CCMFMT_L1;
+
+ vindex = ccm_vis_index (CCM_INTIMIX_2);
+ ccm_attrs[vindex].vis = CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_INTIMIX_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s has %d int-loads, %d int-stores,"
+ " %d alu-ops, %d muls, %d int-divs and"
+ " %d shifts per iteration");
+ ccm_attrs[vindex].fmt = CCMFMT_L1I2I3I4I5I6I7;
+
+ vindex = ccm_vis_index (CCM_OMP_REGION);
+ ccm_attrs[vindex].vis = CCMV_PAR | CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_OMP_REGION";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Source OpenMP region below has tag %s");
+ ccm_attrs[vindex].fmt = CCMFMT_R1;
+
+ vindex = ccm_vis_index (CCM_LMICROVECTORIZE);
+ ccm_attrs[vindex].vis = CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_LMICROVECTORIZE";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s is micro-vectorized");
+ ccm_attrs[vindex].fmt = CCMFMT_L1;
+
+ vindex = ccm_vis_index (CCM_LMULTI_VERSION_2);
+ ccm_attrs[vindex].vis = CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_LMULTI_VERSION_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s multi-versioned for %s."
+ " Specialized version is %s");
+ ccm_attrs[vindex].fmt = CCMFMT_L1S2L3;
+
+ vindex = ccm_vis_index (CCM_LCLONED);
+ ccm_attrs[vindex].vis = CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_LCLONED";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s cloned for %s. Clone is %s");
+ ccm_attrs[vindex].fmt = CCMFMT_L1S2L3;
+
+ vindex = ccm_vis_index (CCM_LUNSWITCHED);
+ ccm_attrs[vindex].vis = CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_LUNSWITCHED";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s is unswitched. New loops"
+ " are %s and %s");
+ ccm_attrs[vindex].fmt = CCMFMT_L1L2L3;
+
+ vindex = ccm_vis_index (CCM_LRESWITCHED);
+ ccm_attrs[vindex].vis = CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_LRESWITCHED";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loops %s and %s and their surrounding"
+ " conditional code have been merged to"
+ " form loop %s");
+ ccm_attrs[vindex].fmt = CCMFMT_L1L2L3;
+
+ vindex = ccm_vis_index (CCM_LSKEWBLOCKED);
+ ccm_attrs[vindex].vis = CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_LSKEWBLOCKED";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s skew-blocked by %d with slope"
+ " %d for improved memory hierarchy"
+ " performance, new inner loop %s");
+ ccm_attrs[vindex].fmt = CCMFMT_L1I2I3L4;
+
+ vindex = ccm_vis_index (CCM_IVSUB);
+ ccm_attrs[vindex].vis = CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_IVSUB";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Induction variable substitution performed on %s");
+ ccm_attrs[vindex].fmt = CCMFMT_L1;
+
+ vindex = ccm_vis_index (CCM_ONEITER_REPLACED);
+ ccm_attrs[vindex].vis = CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_ONEITER_REPLACED";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s determined to have a trip count of 1;"
+ " converted to straight-line code");
+ ccm_attrs[vindex].fmt = CCMFMT_L1;
+
+ vindex = ccm_vis_index (CCM_IMIX3_B);
+ ccm_attrs[vindex].vis = CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_IMIX3_B";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s has %d loads, %d stores,"
+ " %d prefetches, %d FPadds, %d FPmuls,"
+ " %d FPmuladds, %d FPdivs, and %d FPsqrts per"
+ " iteration");
+ ccm_attrs[vindex].fmt = CCMFMT_L1I2I3I4I5I6I7I8I9;
+
+ vindex = ccm_vis_index (CCM_PIPELINE);
+ ccm_attrs[vindex].vis = CCMV_PIPE | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_PIPELINE";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop below pipelined");
+ ccm_attrs[vindex].fmt = CCMFMT_NONE;
+
+ vindex = ccm_vis_index (CCM_PIPESTATS);
+ ccm_attrs[vindex].vis = CCMV_PIPE | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_PIPESTATS";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop below scheduled with steady-state cycle"
+ " count = %d");
+ ccm_attrs[vindex].fmt = CCMFMT_I1;
+
+ vindex = ccm_vis_index (CCM_NOPIPE_CALL);
+ ccm_attrs[vindex].vis = CCMV_PIPE | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_NOPIPE_CALL";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop could not be pipelined because it contains"
+ " calls");
+ ccm_attrs[vindex].fmt = CCMFMT_NONE;
+
+ vindex = ccm_vis_index (CCM_NOPIPE_INTCC);
+ ccm_attrs[vindex].vis = CCMV_PIPE | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_NOPIPE_INTCC";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop could not be pipelined because it sets"
+ " multiple integer condition codes.");
+ ccm_attrs[vindex].fmt = CCMFMT_NONE;
+
+ vindex = ccm_vis_index (CCM_NOPIPE_MBAR);
+ ccm_attrs[vindex].vis = CCMV_PIPE | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_NOPIPE_MBAR";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop could not be pipelined because it contains a"
+ " memory barrier instruction");
+ ccm_attrs[vindex].fmt = CCMFMT_NONE;
+
+ vindex = ccm_vis_index (CCM_NOPIPE_MNMX);
+ ccm_attrs[vindex].vis = CCMV_PIPE | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_NOPIPE_MNMX";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop could not be pipelined because it contains"
+ " a minimum or a maximum operation");
+ ccm_attrs[vindex].fmt = CCMFMT_NONE;
+
+ vindex = ccm_vis_index (CCM_NOPIPE_U2FLT);
+ ccm_attrs[vindex].vis = CCMV_PIPE | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_NOPIPE_U2FLT";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop could not be pipelined because it contains"
+ " an unsigned to float conversion");
+ ccm_attrs[vindex].fmt = CCMFMT_NONE;
+
+ vindex = ccm_vis_index (CCM_NOPIPE_GOT);
+ ccm_attrs[vindex].vis = CCMV_PIPE | CCMV_LOOP | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_NOPIPE_GOT";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop could not be pipelined because it sets the"
+ " Global Offset Table pointer");
+ ccm_attrs[vindex].fmt = CCMFMT_NONE;
+
+ vindex = ccm_vis_index (CCM_NOPIPE_IDIV);
+ ccm_attrs[vindex].vis = CCMV_PIPE | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_NOPIPE_IDIV";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop could not be pipelined because it contains"
+ " an integer divide");
+ ccm_attrs[vindex].fmt = CCMFMT_NONE;
+
+ vindex = ccm_vis_index (CCM_NOPIPE_PRFTCH);
+ ccm_attrs[vindex].vis = CCMV_PIPE | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_NOPIPE_PRFTCH";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop could not be pipelined because it contains"
+ " a prefetch operation");
+ ccm_attrs[vindex].fmt = CCMFMT_NONE;
+
+ vindex = ccm_vis_index (CCM_NOPIPE_EXIT);
+ ccm_attrs[vindex].vis = CCMV_PIPE | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_NOPIPE_EXIT";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop could not be pipelined because it contains"
+ " an exit operation");
+ ccm_attrs[vindex].fmt = CCMFMT_NONE;
+
+ vindex = ccm_vis_index (CCM_NOPIPE_REG);
+ ccm_attrs[vindex].vis = CCMV_PIPE | CCMV_LOOP | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_NOPIPE_REG";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop could not be pipelined because it contains"
+ " instructions that set the %%gsr or %%fsr register");
+ ccm_attrs[vindex].fmt = CCMFMT_NONE;
+
+ vindex = ccm_vis_index (CCM_NOPIPE_UNS);
+ ccm_attrs[vindex].vis = CCMV_PIPE | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_NOPIPE_UNS";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop could not be pipelined because it has an"
+ " unsigned loop counter");
+ ccm_attrs[vindex].fmt = CCMFMT_NONE;
+
+ vindex = ccm_vis_index (CCM_NOPIPE_UNSUIT);
+ ccm_attrs[vindex].vis = CCMV_PIPE | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_NOPIPE_UNSUIT";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop was unsuitable for pipelining");
+ ccm_attrs[vindex].fmt = CCMFMT_NONE;
+
+ vindex = ccm_vis_index (CCM_NOPIPE_INTRINSIC);
+ ccm_attrs[vindex].vis = CCMV_PIPE | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_NOPIPE_INTRINSIC";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop could not be pipelined because it has an"
+ " intrinsic call to %s");
+ ccm_attrs[vindex].fmt = CCMFMT_P1;
+
+ vindex = ccm_vis_index (CCM_NOPIPE_BIG);
+ ccm_attrs[vindex].vis = CCMV_PIPE | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_NOPIPE_BIG";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop could not be pipelined as it is too big");
+ ccm_attrs[vindex].fmt = CCMFMT_NONE;
+
+ vindex = ccm_vis_index (CCM_NOPIPE_INVINTPR);
+ ccm_attrs[vindex].vis = CCMV_PIPE | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_NOPIPE_INVINTPR";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop could not be pipelined as it contains too"
+ " many loop invariant integers = %d");
+ ccm_attrs[vindex].fmt = CCMFMT_I1;
+
+ vindex = ccm_vis_index (CCM_NOPIPE_INVFLTPR);
+ ccm_attrs[vindex].vis = CCMV_PIPE | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_NOPIPE_INVFLTPR";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop could not be pipelined as it contains too"
+ " many loop invariant floats = %d");
+ ccm_attrs[vindex].fmt = CCMFMT_I1;
+
+ vindex = ccm_vis_index (CCM_NOPIPE_INVDBLPR);
+ ccm_attrs[vindex].vis = CCMV_PIPE | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_NOPIPE_INVDBLPR";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop could not be pipelined as it contains too"
+ " many loop invariant doubles = %d");
+ ccm_attrs[vindex].fmt = CCMFMT_I1;
+
+ vindex = ccm_vis_index (CCM_PIPE_SCHEDAFIPR);
+ ccm_attrs[vindex].vis = CCMV_PIPE | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_PIPE_SCHEDAFIPR";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop below was adversely affected by high"
+ " integer register pressure = %d");
+ ccm_attrs[vindex].fmt = CCMFMT_I1;
+
+ vindex = ccm_vis_index (CCM_PIPE_SCHEDAFDPR);
+ ccm_attrs[vindex].vis = CCMV_PIPE | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_PIPE_SCHEDAFDPR";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop below was adversely affected by high"
+ " double register pressure = %d");
+ ccm_attrs[vindex].fmt = CCMFMT_I1;
+
+ vindex = ccm_vis_index (CCM_PIPE_SCHEDAFFPR);
+ ccm_attrs[vindex].vis = CCMV_PIPE | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_PIPE_SCHEDAFFPR";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop below was adversely affected by high"
+ " float register pressure = %d");
+ ccm_attrs[vindex].fmt = CCMFMT_I1;
+
+ vindex = ccm_vis_index (CCM_NOPIPE_INTPR);
+ ccm_attrs[vindex].vis = CCMV_PIPE | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_NOPIPE_INTPR";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop could not be pipelined due to high"
+ " integer register pressure = %d");
+ ccm_attrs[vindex].fmt = CCMFMT_I1;
+
+ vindex = ccm_vis_index (CCM_NOPIPE_DBLPR);
+ ccm_attrs[vindex].vis = CCMV_PIPE | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_NOPIPE_DBLPR";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop could not be pipelined due to high"
+ " double register pressure = %d");
+ ccm_attrs[vindex].fmt = CCMFMT_I1;
+
+ vindex = ccm_vis_index (CCM_NOPIPE_FLTPR);
+ ccm_attrs[vindex].vis = CCMV_PIPE | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_NOPIPE_FLTPR";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop could not be pipelined due to high"
+ " float register pressure = %d");
+ ccm_attrs[vindex].fmt = CCMFMT_I1;
+
+ vindex = ccm_vis_index (CCM_PIPELINE_2);
+ ccm_attrs[vindex].vis = CCMV_PIPE | CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_PIPELINE_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s pipelined");
+ ccm_attrs[vindex].fmt = CCMFMT_L1;
+
+ vindex = ccm_vis_index (CCM_PIPESTATS_2);
+ ccm_attrs[vindex].vis = CCMV_PIPE | CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_PIPESTATS_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s scheduled with steady-state cycle"
+ " count = %d");
+ ccm_attrs[vindex].fmt = CCMFMT_L1I2;
+
+ vindex = ccm_vis_index (CCM_NOPIPE_CALL_2);
+ ccm_attrs[vindex].vis = CCMV_PIPE | CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NOPIPE_CALL_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s could not be pipelined because it contains"
+ " calls");
+ ccm_attrs[vindex].fmt = CCMFMT_L1;
+
+ vindex = ccm_vis_index (CCM_NOPIPE_INTCC_2);
+ ccm_attrs[vindex].vis = CCMV_PIPE | CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NOPIPE_INTCC_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s could not be pipelined because it sets"
+ " multiple integer condition codes.");
+ ccm_attrs[vindex].fmt = CCMFMT_L1;
+
+ vindex = ccm_vis_index (CCM_NOPIPE_MBAR_2);
+ ccm_attrs[vindex].vis = CCMV_PIPE | CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NOPIPE_MBAR_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s could not be pipelined because it contains"
+ " a memory barrier instruction");
+ ccm_attrs[vindex].fmt = CCMFMT_L1;
+
+ vindex = ccm_vis_index (CCM_NOPIPE_MNMX_2);
+ ccm_attrs[vindex].vis = CCMV_PIPE | CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NOPIPE_MNMX_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s could not be pipelined because it contains"
+ " a minimum or a maximum operation");
+ ccm_attrs[vindex].fmt = CCMFMT_L1;
+
+ vindex = ccm_vis_index (CCM_NOPIPE_U2FLT_2);
+ ccm_attrs[vindex].vis = CCMV_PIPE | CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NOPIPE_U2FLT_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s could not be pipelined because it contains"
+ " an unsigned to float conversion");
+ ccm_attrs[vindex].fmt = CCMFMT_L1;
+
+ vindex = ccm_vis_index (CCM_NOPIPE_GOT_2);
+ ccm_attrs[vindex].vis = CCMV_PIPE | CCMV_LOOP;
+ ccm_attrs[vindex].name = "CCM_NOPIPE_GOT_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s could not be pipelined because it sets the"
+ " Global Offset Table pointer");
+ ccm_attrs[vindex].fmt = CCMFMT_L1;
+
+ vindex = ccm_vis_index (CCM_NOPIPE_IDIV_2);
+ ccm_attrs[vindex].vis = CCMV_PIPE | CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NOPIPE_IDIV_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s could not be pipelined because it contains"
+ " an integer divide");
+ ccm_attrs[vindex].fmt = CCMFMT_L1;
+
+ vindex = ccm_vis_index (CCM_NOPIPE_PRFTCH_2);
+ ccm_attrs[vindex].vis = CCMV_PIPE | CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NOPIPE_PRFTCH_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s could not be pipelined because it contains"
+ " a prefetch operation");
+ ccm_attrs[vindex].fmt = CCMFMT_L1;
+
+ vindex = ccm_vis_index (CCM_NOPIPE_EXIT_2);
+ ccm_attrs[vindex].vis = CCMV_PIPE | CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NOPIPE_EXIT_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s could not be pipelined because it contains"
+ " an exit operation");
+ ccm_attrs[vindex].fmt = CCMFMT_L1;
+
+ vindex = ccm_vis_index (CCM_NOPIPE_REG_2);
+ ccm_attrs[vindex].vis = CCMV_PIPE | CCMV_LOOP;
+ ccm_attrs[vindex].name = "CCM_NOPIPE_REG_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s could not be pipelined because it contains"
+ " instructions that set the %%gsr or %%fsr register");
+ ccm_attrs[vindex].fmt = CCMFMT_L1;
+
+ vindex = ccm_vis_index (CCM_NOPIPE_UNS_2);
+ ccm_attrs[vindex].vis = CCMV_PIPE | CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NOPIPE_UNS_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s could not be pipelined because it has an"
+ " unsigned loop counter");
+ ccm_attrs[vindex].fmt = CCMFMT_L1;
+
+ vindex = ccm_vis_index (CCM_NOPIPE_UNSUIT_2);
+ ccm_attrs[vindex].vis = CCMV_PIPE | CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NOPIPE_UNSUIT_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s is unsuitable for pipelining");
+ ccm_attrs[vindex].fmt = CCMFMT_L1;
+
+ vindex = ccm_vis_index (CCM_NOPIPE_INTRINSIC_2);
+ ccm_attrs[vindex].vis = CCMV_PIPE | CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NOPIPE_INTRINSIC_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s could not be pipelined because it contains"
+ " a call to intrinsic %s");
+ ccm_attrs[vindex].fmt = CCMFMT_L1P2;
+
+ vindex = ccm_vis_index (CCM_NOPIPE_BIG_2);
+ ccm_attrs[vindex].vis = CCMV_PIPE | CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NOPIPE_BIG_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s could not be pipelined as it is too big");
+ ccm_attrs[vindex].fmt = CCMFMT_L1;
+
+ vindex = ccm_vis_index (CCM_NOPIPE_INVINTPR_2);
+ ccm_attrs[vindex].vis = CCMV_PIPE | CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NOPIPE_INVINTPR_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s could not be pipelined as it contains too"
+ " many loop invariant integers = %d");
+ ccm_attrs[vindex].fmt = CCMFMT_L1I2;
+
+ vindex = ccm_vis_index (CCM_NOPIPE_INVFLTPR_2);
+ ccm_attrs[vindex].vis = CCMV_PIPE | CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NOPIPE_INVFLTPR_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s could not be pipelined as it contains too"
+ " many loop invariant floats = %d");
+ ccm_attrs[vindex].fmt = CCMFMT_L1I2;
+
+ vindex = ccm_vis_index (CCM_NOPIPE_INVDBLPR_2);
+ ccm_attrs[vindex].vis = CCMV_PIPE | CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NOPIPE_INVDBLPR_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s could not be pipelined as it contains too"
+ " many loop invariant doubles = %d");
+ ccm_attrs[vindex].fmt = CCMFMT_L1I2;
+
+ vindex = ccm_vis_index (CCM_PIPE_SCHEDAFIPR_2);
+ ccm_attrs[vindex].vis = CCMV_PIPE | CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_PIPE_SCHEDAFIPR_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s was adversely affected by high"
+ " integer register pressure = %d");
+ ccm_attrs[vindex].fmt = CCMFMT_L1I2;
+
+ vindex = ccm_vis_index (CCM_PIPE_SCHEDAFDPR_2);
+ ccm_attrs[vindex].vis = CCMV_PIPE | CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_PIPE_SCHEDAFDPR_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s was adversely affected by high"
+ " double register pressure = %d");
+ ccm_attrs[vindex].fmt = CCMFMT_L1I2;
+
+ vindex = ccm_vis_index (CCM_PIPE_SCHEDAFFPR_2);
+ ccm_attrs[vindex].vis = CCMV_PIPE | CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_PIPE_SCHEDAFFPR_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s was adversely affected by high"
+ " float register pressure = %d");
+ ccm_attrs[vindex].fmt = CCMFMT_L1I2;
+
+ vindex = ccm_vis_index (CCM_NOPIPE_INTPR_2);
+ ccm_attrs[vindex].vis = CCMV_PIPE | CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NOPIPE_INTPR_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s could not be pipelined due to high"
+ " integer register pressure = %d");
+ ccm_attrs[vindex].fmt = CCMFMT_L1I2;
+
+ vindex = ccm_vis_index (CCM_NOPIPE_DBLPR_2);
+ ccm_attrs[vindex].vis = CCMV_PIPE | CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NOPIPE_DBLPR_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s could not be pipelined due to high"
+ " double register pressure = %d");
+ ccm_attrs[vindex].fmt = CCMFMT_L1I2;
+
+ vindex = ccm_vis_index (CCM_NOPIPE_FLTPR_2);
+ ccm_attrs[vindex].vis = CCMV_PIPE | CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NOPIPE_FLTPR_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "%s could not be pipelined due to high"
+ " float register pressure = %d");
+ ccm_attrs[vindex].fmt = CCMFMT_L1I2;
+
+ vindex = ccm_vis_index (CCM_INLINE);
+ ccm_attrs[vindex].vis = CCMV_INLINE | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_INLINE";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Function %s inlined from source file %s into"
+ " the code for the following line");
+ ccm_attrs[vindex].fmt = CCMFMT_P1S2;
+
+ vindex = ccm_vis_index (CCM_INLINE2);
+ ccm_attrs[vindex].vis = CCMV_INLINE | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_INLINE2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Function %s inlined from source file %s into"
+ " inline copy of function %s");
+ ccm_attrs[vindex].fmt = CCMFMT_P1S2P3;
+
+ vindex = ccm_vis_index (CCM_INLINE_TMPLT);
+ ccm_attrs[vindex].vis = CCMV_INLINE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_INLINE_TMPLT";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Function %s inlined from template file %s"
+ " into the code for the following line");
+ ccm_attrs[vindex].fmt = CCMFMT_P1S2;
+
+ vindex = ccm_vis_index (CCM_INLINE_TMPLT2);
+ ccm_attrs[vindex].vis = CCMV_INLINE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_INLINE_TMPLT2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Function %s inlined from template file %s"
+ " into inline copy of function %s");
+ ccm_attrs[vindex].fmt = CCMFMT_P1S2P3;
+
+ vindex = ccm_vis_index (CCM_INLINE_OUT_COPY);
+ ccm_attrs[vindex].vis = CCMV_INLINE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_INLINE_OUT_COPY";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Out-of-line copy of inlined function %s from"
+ " source file %s generated");
+ ccm_attrs[vindex].fmt = CCMFMT_P1S2;
+
+ vindex = ccm_vis_index (CCM_NINLINE_REC);
+ ccm_attrs[vindex].vis = CCMV_INLINE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NINLINE_REC";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Recursive function %s inlined only up to"
+ " depth %d");
+ ccm_attrs[vindex].fmt = CCMFMT_P1I2;
+
+ vindex = ccm_vis_index (CCM_NINLINE_NEST);
+ ccm_attrs[vindex].vis = CCMV_INLINE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NINLINE_NEST";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Function %s not inlined because inlining is"
+ " already nested too deeply");
+ ccm_attrs[vindex].fmt = CCMFMT_P1;
+
+ vindex = ccm_vis_index (CCM_NINLINE_CMPLX);
+ ccm_attrs[vindex].vis = CCMV_INLINE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NINLINE_CMPLX";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Function %s not inlined because it contains"
+ " too many operations");
+ ccm_attrs[vindex].fmt = CCMFMT_P1;
+
+ vindex = ccm_vis_index (CCM_NINLINE_FB);
+ ccm_attrs[vindex].vis = CCMV_INLINE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NINLINE_FB";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Function %s not inlined because the"
+ " profile-feedback execution count is too low");
+ ccm_attrs[vindex].fmt = CCMFMT_P1;
+
+ vindex = ccm_vis_index (CCM_NINLINE_PAR);
+ ccm_attrs[vindex].vis = CCMV_INLINE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NINLINE_PAR";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Function %s not inlined because it contains"
+ " explicit parallel pragmas");
+ ccm_attrs[vindex].fmt = CCMFMT_P1;
+
+ vindex = ccm_vis_index (CCM_NINLINE_OPT);
+ ccm_attrs[vindex].vis = CCMV_INLINE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NINLINE_OPT";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Function %s not inlined because it is"
+ " compiled with optimization level <= 2");
+ ccm_attrs[vindex].fmt = CCMFMT_P1;
+
+ vindex = ccm_vis_index (CCM_NINLINE_USR);
+ ccm_attrs[vindex].vis = CCMV_INLINE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NINLINE_USR";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Function %s not inlined because either command"
+ " line option or source code pragma prohibited it,"
+ " or it's not safe to inline it");
+ ccm_attrs[vindex].fmt = CCMFMT_P1;
+
+ vindex = ccm_vis_index (CCM_NINLINE_AUTO);
+ ccm_attrs[vindex].vis = CCMV_INLINE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NINLINE_AUTO";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Function %s not inlined because doing so"
+ " would make automatic storage for %s too large");
+ ccm_attrs[vindex].fmt = CCMFMT_P1P2;
+
+ vindex = ccm_vis_index (CCM_NINLINE_CALLS);
+ ccm_attrs[vindex].vis = CCMV_INLINE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NINLINE_CALLS";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Function %s not inlined because it contains"
+ " too many calls");
+ ccm_attrs[vindex].fmt = CCMFMT_P1;
+
+ vindex = ccm_vis_index (CCM_NINLINE_ACTUAL);
+ ccm_attrs[vindex].vis = CCMV_INLINE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NINLINE_ACTUAL";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Function %s not inlined because it has more"
+ " actual parameters than formal parameters");
+ ccm_attrs[vindex].fmt = CCMFMT_P1;
+
+ vindex = ccm_vis_index (CCM_NINLINE_FORMAL);
+ ccm_attrs[vindex].vis = CCMV_INLINE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NINLINE_FORMAL";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Function %s not inlined because it has more"
+ " formal parameters than actual parameters");
+ ccm_attrs[vindex].fmt = CCMFMT_P1;
+
+ vindex = ccm_vis_index (CCM_NINLINE_TYPE);
+ ccm_attrs[vindex].vis = CCMV_INLINE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NINLINE_TYPE";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Function %s not inlined because formal"
+ " argument type does not match actual type");
+ ccm_attrs[vindex].fmt = CCMFMT_P1;
+
+ vindex = ccm_vis_index (CCM_NINLINE_ATYPE);
+ ccm_attrs[vindex].vis = CCMV_INLINE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NINLINE_ATYPE";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Function %s not inlined because array formal"
+ " argument does not match reshaped array actual"
+ " argument type");
+ ccm_attrs[vindex].fmt = CCMFMT_P1;
+
+ vindex = ccm_vis_index (CCM_NINLINE_RETTYPE);
+ ccm_attrs[vindex].vis = CCMV_INLINE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NINLINE_RETTYPE";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Function %s not inlined because return type"
+ " does not match");
+ ccm_attrs[vindex].fmt = CCMFMT_P1;
+
+ vindex = ccm_vis_index (CCM_NINLINE_EXCPT);
+ ccm_attrs[vindex].vis = CCMV_INLINE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NINLINE_EXCPT";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Function %s not inlined because it"
+ " guarded by an exception handler");
+ ccm_attrs[vindex].fmt = CCMFMT_P1;
+
+ vindex = ccm_vis_index (CCM_NINLINE_UNSAFE);
+ ccm_attrs[vindex].vis = CCMV_INLINE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NINLINE_UNSAFE";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Function %s not inlined because it might be"
+ " unsafe (call alloca(), etc)");
+ ccm_attrs[vindex].fmt = CCMFMT_P1;
+
+ vindex = ccm_vis_index (CCM_NINLINE_ALIAS);
+ ccm_attrs[vindex].vis = CCMV_INLINE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NINLINE_ALIAS";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Function %s not inlined because inlining it"
+ " will make the alias analysis in the calling"
+ " function more conservative");
+ ccm_attrs[vindex].fmt = CCMFMT_P1;
+
+ vindex = ccm_vis_index (CCM_NINLINE_FEMARK);
+ ccm_attrs[vindex].vis = CCMV_INLINE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NINLINE_FEMARK";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Function %s not inlined because it contains"
+ " setjmp/longjmp, or indirect goto, etc");
+ ccm_attrs[vindex].fmt = CCMFMT_P1;
+
+ vindex = ccm_vis_index (CCM_NINLINE_RAREX);
+ ccm_attrs[vindex].vis = CCMV_INLINE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NINLINE_RAREX";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Function %s not inlined because it is known"
+ " to be rarely executed");
+ ccm_attrs[vindex].fmt = CCMFMT_P1;
+
+ vindex = ccm_vis_index (CCM_CLONING);
+ ccm_attrs[vindex].vis = CCMV_INLINE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_CLONING";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Function %s from source file %s cloned,"
+ " creating cloned function %s; constant"
+ " parameters propagated to clone");
+ ccm_attrs[vindex].fmt = CCMFMT_P1S2P3;
+
+ vindex = ccm_vis_index (CCM_INLINE_B);
+ ccm_attrs[vindex].vis = CCMV_INLINE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_INLINE_B";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Function %s inlined from source file %s into"
+ " the code for the following line. %d loops"
+ " inlined");
+ ccm_attrs[vindex].fmt = CCMFMT_P1S2I3;
+
+ vindex = ccm_vis_index (CCM_INLINE2_B);
+ ccm_attrs[vindex].vis = CCMV_INLINE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_INLINE2_B";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Function %s inlined from source file %s into"
+ " inline copy of function %s. %d loops inlined");
+ ccm_attrs[vindex].fmt = CCMFMT_P1S2P3I4;
+
+ vindex = ccm_vis_index (CCM_INLINE_LOOP);
+ ccm_attrs[vindex].vis = CCMV_INLINE | CCMV_LOOP | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_INLINE_LOOP";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Loop in function %s, line %d has"
+ " tag %s");
+ ccm_attrs[vindex].fmt = CCMFMT_P1I2L3;
+
+ vindex = ccm_vis_index (CCM_NINLINE_MULTIENTRY);
+ ccm_attrs[vindex].vis = CCMV_INLINE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NINLINE_MULTIENTRY";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Function %s not inlined because it"
+ " contains an ENTRY statement");
+ ccm_attrs[vindex].fmt = CCMFMT_P1;
+
+ vindex = ccm_vis_index (CCM_NINLINE_VARARGS);
+ ccm_attrs[vindex].vis = CCMV_INLINE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NINLINE_VARARGS";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Function %s not inlined because variable"
+ " argument routines cannot be inlined");
+ ccm_attrs[vindex].fmt = CCMFMT_P1;
+
+ vindex = ccm_vis_index (CCM_NINLINE_UNSEEN_BODY);
+ ccm_attrs[vindex].vis = CCMV_INLINE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NINLINE_UNSEEN_BODY";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Function %s not inlined because the compiler"
+ " has not seen the body of the function. Use"
+ " -xcrossfile or -xipo in order to inline it");
+ ccm_attrs[vindex].fmt = CCMFMT_P1;
+
+ vindex = ccm_vis_index (CCM_NINLINE_UPLEVEL);
+ ccm_attrs[vindex].vis = CCMV_INLINE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NINLINE_UPLEVEL";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Function %s not inlined because it is a"
+ " nested routine containing references to"
+ " variables defined in an outer function");
+ ccm_attrs[vindex].fmt = CCMFMT_P1;
+
+ vindex = ccm_vis_index (CCM_NINLINE_CMDLINE);
+ ccm_attrs[vindex].vis = CCMV_INLINE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NINLINE_CMDLINE";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Function %s not inlined because either"
+ " -xinline or source code pragma prohibited it");
+ ccm_attrs[vindex].fmt = CCMFMT_P1;
+
+ vindex = ccm_vis_index (CCM_NINLINE_CALL_CMPLX);
+ ccm_attrs[vindex].vis = CCMV_INLINE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NINLINE_CALL_CMPLX";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Call to %s not inlined because of the"
+ " complexity of the calling routine");
+ ccm_attrs[vindex].fmt = CCMFMT_P1;
+
+ vindex = ccm_vis_index (CCM_NINLINE_LANG_MISMATCH);
+ ccm_attrs[vindex].vis = CCMV_INLINE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NINLINE_LANG_MISMATCH";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Call to %s not inlined because it is in"
+ " a different language");
+ ccm_attrs[vindex].fmt = CCMFMT_P1;
+
+ vindex = ccm_vis_index (CCM_NINLINE_RTN_WEAK);
+ ccm_attrs[vindex].vis = CCMV_INLINE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NINLINE_RTN_WEAK";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Function %s not inlined because it"
+ " is marked weak");
+ ccm_attrs[vindex].fmt = CCMFMT_P1;
+
+ vindex = ccm_vis_index (CCM_NINLINE_CALL_WEAKFILE);
+ ccm_attrs[vindex].vis = CCMV_INLINE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NINLINE_CALL_WEAKFILE";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Call to %s not inlined because it is"
+ " in a different file and it contains a"
+ " call to a weak routine");
+ ccm_attrs[vindex].fmt = CCMFMT_P1;
+
+ vindex = ccm_vis_index (CCM_NINLINE_CALL_TRYCATCH);
+ ccm_attrs[vindex].vis = CCMV_INLINE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NINLINE_CALL_TRYCATCH";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Call to %s not inlined because it is"
+ " in a different file and contains an"
+ " explicit try/catch");
+ ccm_attrs[vindex].fmt = CCMFMT_P1;
+
+ vindex = ccm_vis_index (CCM_NINLINE_CALL_REGP);
+ ccm_attrs[vindex].vis = CCMV_INLINE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NINLINE_CALL_REGP";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Call to %s not inlined because it would"
+ " cause excessive register pressure");
+ ccm_attrs[vindex].fmt = CCMFMT_P1;
+
+ vindex = ccm_vis_index (CCM_NINLINE_RTN_REGP);
+ ccm_attrs[vindex].vis = CCMV_INLINE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NINLINE_RTN_REGP";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Function %s not inlined because it would"
+ " cause excessive register pressure");
+ ccm_attrs[vindex].fmt = CCMFMT_P1;
+
+ vindex = ccm_vis_index (CCM_NINLINE_CALL_XPENSV);
+ ccm_attrs[vindex].vis = CCMV_INLINE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NINLINE_CALL_XPENSV";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Call to %s not inlined because analysis"
+ " exceeds the compilation time limit");
+ ccm_attrs[vindex].fmt = CCMFMT_P1;
+
+ vindex = ccm_vis_index (CCM_NINLINE_READONLYIR);
+ ccm_attrs[vindex].vis = CCMV_INLINE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NINLINE_READONLYIR";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Function %s not inlined because it is in a file"
+ " specified as read-only by -xipo_archive=readonly"
+ " and it contains calls to static functions");
+ ccm_attrs[vindex].fmt = CCMFMT_P1;
+
+ vindex = ccm_vis_index (CCM_NINLINE_CALL_THUNK);
+ ccm_attrs[vindex].vis = CCMV_INLINE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NINLINE_CALL_THUNK";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Call to %s not inlined because it is in a"
+ " compiler-generated function that does not"
+ " permit inlining");
+ ccm_attrs[vindex].fmt = CCMFMT_P1;
+
+ vindex = ccm_vis_index (CCM_NINLINE_CALL_XTARGETS);
+ ccm_attrs[vindex].vis = CCMV_INLINE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NINLINE_CALL_XTARGETS";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Indirect callsite has too many targets;"
+ " callsite marked do not inline");
+ ccm_attrs[vindex].fmt = CCMFMT_NONE;
+
+ vindex = ccm_vis_index (CCM_NINLINE_SELFTAIL_RECURSIVE);
+ ccm_attrs[vindex].vis = CCMV_INLINE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NINLINE_SELFTAIL_RECURSIVE";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Function %s not inlined because"
+ " of a recursive tail-call to itself");
+ ccm_attrs[vindex].fmt = CCMFMT_P1;
+
+ vindex = ccm_vis_index (CCM_NINLINE_PRAGMA);
+ ccm_attrs[vindex].vis = CCMV_INLINE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NINLINE_PRAGMA";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Function %s not inlined because it contains"
+ " explicit parallel or alias pragmas");
+ ccm_attrs[vindex].fmt = CCMFMT_P1;
+
+ vindex = ccm_vis_index (CCM_NINLINE_CMPLX2);
+ ccm_attrs[vindex].vis = CCMV_INLINE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NINLINE_CMPLX2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Function %s not inlined because it contains too"
+ " many operations. Increase max_inst_hard in order"
+ " to inline it: -xinline_param=max_inst_hard:n");
+ ccm_attrs[vindex].fmt = CCMFMT_P1;
+
+ vindex = ccm_vis_index (CCM_NINLINE_RARE);
+ ccm_attrs[vindex].vis = CCMV_INLINE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NINLINE_RARE";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Function %s not inlined because the call"
+ " is rarely executed");
+ ccm_attrs[vindex].fmt = CCMFMT_P1;
+
+ vindex = ccm_vis_index (CCM_NINLINE_PAR2);
+ ccm_attrs[vindex].vis = CCMV_INLINE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NINLINE_PAR2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Function %s not inlined because it is called"
+ " within a region guarded by an explicit"
+ " parallel pragmas");
+ ccm_attrs[vindex].fmt = CCMFMT_P1;
+
+ vindex = ccm_vis_index (CCM_NINLINE_G_LIMIT);
+ ccm_attrs[vindex].vis = CCMV_INLINE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NINLINE_G_LIMIT";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Function %s not inlined because it would exceed"
+ " the permitted global code size growth limit. Try"
+ " to increase max_growth in order to inline it:"
+ " -xinline_param=max_growth:n");
+ ccm_attrs[vindex].fmt = CCMFMT_P1;
+
+ vindex = ccm_vis_index (CCM_NINLINE_L_LIMIT);
+ ccm_attrs[vindex].vis = CCMV_INLINE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NINLINE_L_LIMIT";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Function %s not inlined because it would exceed"
+ " the maximum function size growth limit. Increase"
+ " max_function_inst in order to inline it:"
+ " -xinline_param=max_function_inst:n");
+ ccm_attrs[vindex].fmt = CCMFMT_P1;
+
+ vindex = ccm_vis_index (CCM_NINLINE_REC2);
+ ccm_attrs[vindex].vis = CCMV_INLINE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NINLINE_REC2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Recursive function %s is inlined only up to"
+ " %d levels and up to %d size. Increase"
+ " max_recursive_deptha or max_recursive_inst in"
+ " order to inline it:"
+ " -xinline_param=max_recursive_depth:n,"
+ " -xinline_param=max_recursive_inst:n");
+ ccm_attrs[vindex].fmt = CCMFMT_P1I2I3;
+
+ vindex = ccm_vis_index (CCM_NINLINE_FB2);
+ ccm_attrs[vindex].vis = CCMV_INLINE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NINLINE_FB2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Function %s not inlined because the"
+ " profile-feedback execution count is too"
+ " low. Decrease min_counter in order to inline it:"
+ " -xinline_param:min_counter:n");
+ ccm_attrs[vindex].fmt = CCMFMT_P1;
+
+ vindex = ccm_vis_index (CCM_NINLINE_CS_CMPLX);
+ ccm_attrs[vindex].vis = CCMV_INLINE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NINLINE_CS_CMPLX";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Function %s not inlined because called"
+ " function's size is too big. Increase"
+ " max_inst_soft in order to inline it:"
+ " -xinline_param=max_inst_soft:n");
+ ccm_attrs[vindex].fmt = CCMFMT_P1;
+
+ vindex = ccm_vis_index (CCM_NINLINE_R_EXCPT);
+ ccm_attrs[vindex].vis = CCMV_INLINE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NINLINE_R_EXCPT";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Function %s not inlined because it contains"
+ " an exception handler");
+ ccm_attrs[vindex].fmt = CCMFMT_P1;
+
+ vindex = ccm_vis_index (CCM_NINLINE_ASM);
+ ccm_attrs[vindex].vis = CCMV_INLINE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NINLINE_ASM";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Function %s not inlined because"
+ " it contains asm statements");
+ ccm_attrs[vindex].fmt = CCMFMT_P1;
+
+ vindex = ccm_vis_index (CCM_NINLINE_R_READONLYIR);
+ ccm_attrs[vindex].vis = CCMV_INLINE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NINLINE_R_READONLYIR";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Function %s not inlined because it is in a file"
+ " specified as read-only by -xipo_archive=readonly"
+ " and it is a static function");
+ ccm_attrs[vindex].fmt = CCMFMT_P1;
+
+ vindex = ccm_vis_index (CCM_NINLINE_C_READONLYIR);
+ ccm_attrs[vindex].vis = CCMV_INLINE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NINLINE_C_READONLYIR";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Call to %s not inlined because the calling"
+ " function is in a file specified as read-only"
+ " by -xipo_archive=readonly");
+ ccm_attrs[vindex].fmt = CCMFMT_P1;
+
+ vindex = ccm_vis_index (CCM_NINLINE_NEVERRETURN);
+ ccm_attrs[vindex].vis = CCMV_INLINE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NINLINE_NEVERRETURN";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Function %s not inlined because it"
+ " never returns");
+ ccm_attrs[vindex].fmt = CCMFMT_P1;
+
+ vindex = ccm_vis_index (CCM_MPREFETCH);
+ ccm_attrs[vindex].vis = CCMV_MEMOPS | CCMV_BASIC | CCMV_UNIMPL | CCMV_WANT;
+ ccm_attrs[vindex].name = "CCM_MPREFETCH";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Prefetch of %s inserted");
+ ccm_attrs[vindex].fmt = CCMFMT_S1;
+
+ vindex = ccm_vis_index (CCM_MPREFETCH_LD);
+ ccm_attrs[vindex].vis = CCMV_MEMOPS | CCMV_BASIC | CCMV_UNIMPL | CCMV_WANT;
+ ccm_attrs[vindex].name = "CCM_MPREFETCH_LD";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Prefetch of %s inserted for load at %s");
+ ccm_attrs[vindex].fmt = CCMFMT_S1X2;
+
+ vindex = ccm_vis_index (CCM_MPREFETCH_ST);
+ ccm_attrs[vindex].vis = CCMV_MEMOPS | CCMV_BASIC | CCMV_UNIMPL | CCMV_WANT;
+ ccm_attrs[vindex].name = "CCM_MPREFETCH_ST";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Prefetch of %s inserted for store at %s");
+ ccm_attrs[vindex].fmt = CCMFMT_S1X2;
+
+ vindex = ccm_vis_index (CCM_MPREFETCH_FB);
+ ccm_attrs[vindex].vis = CCMV_MEMOPS | CCMV_BASIC | CCMV_UNIMPL | CCMV_WANT;
+ ccm_attrs[vindex].name = "CCM_MPREFETCH_FB";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Prefetch of %s inserted based on feedback data");
+ ccm_attrs[vindex].fmt = CCMFMT_S1;
+
+ vindex = ccm_vis_index (CCM_MPREFETCH_FB_LD);
+ ccm_attrs[vindex].vis = CCMV_MEMOPS | CCMV_BASIC | CCMV_UNIMPL | CCMV_WANT;
+ ccm_attrs[vindex].name = "CCM_MPREFETCH_FB_LD";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Prefetch of %s inserted for load at %s based"
+ " on feedback data");
+ ccm_attrs[vindex].fmt = CCMFMT_S1X2;
+
+ vindex = ccm_vis_index (CCM_MPREFETCH_FB_ST);
+ ccm_attrs[vindex].vis = CCMV_MEMOPS | CCMV_BASIC | CCMV_UNIMPL | CCMV_WANT;
+ ccm_attrs[vindex].name = "CCM_MPREFETCH_FB_ST";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Prefetch of %s inserted for store at %s based"
+ " on feedback data");
+ ccm_attrs[vindex].fmt = CCMFMT_S1X2;
+
+ vindex = ccm_vis_index (CCM_MLOAD);
+ ccm_attrs[vindex].vis = CCMV_MEMOPS | CCMV_BASIC | CCMV_UNIMPL;
+ ccm_attrs[vindex].name = "CCM_MLOAD";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Load below refers to %s");
+ ccm_attrs[vindex].fmt = CCMFMT_S1;
+
+ vindex = ccm_vis_index (CCM_MSTORE);
+ ccm_attrs[vindex].vis = CCMV_MEMOPS | CCMV_BASIC | CCMV_UNIMPL;
+ ccm_attrs[vindex].name = "CCM_MSTORE";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Store below refers to %s");
+ ccm_attrs[vindex].fmt = CCMFMT_S1;
+
+ vindex = ccm_vis_index (CCM_MLOAD_P);
+ ccm_attrs[vindex].vis = CCMV_MEMOPS | CCMV_BASIC | CCMV_UNIMPL;
+ ccm_attrs[vindex].name = "CCM_MLOAD_P";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Load below refers to %s, and was prefetched"
+ " at %s");
+ ccm_attrs[vindex].fmt = CCMFMT_S1X2;
+
+ vindex = ccm_vis_index (CCM_MSTORE_P);
+ ccm_attrs[vindex].vis = CCMV_MEMOPS | CCMV_BASIC | CCMV_UNIMPL;
+ ccm_attrs[vindex].name = "CCM_MSTORE_P";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Store below refers to %s, and was prefetched"
+ " at %s");
+ ccm_attrs[vindex].fmt = CCMFMT_S1X2;
+
+ vindex = ccm_vis_index (CCM_COPYIN);
+ ccm_attrs[vindex].vis = CCMV_FE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_COPYIN";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Parameter %d caused a copyin in the following"
+ " call");
+ ccm_attrs[vindex].fmt = CCMFMT_I1;
+
+ vindex = ccm_vis_index (CCM_COPYOUT);
+ ccm_attrs[vindex].vis = CCMV_FE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_COPYOUT";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Parameter %d caused a copyout in the following"
+ " call");
+ ccm_attrs[vindex].fmt = CCMFMT_I1;
+
+ vindex = ccm_vis_index (CCM_COPYINOUT);
+ ccm_attrs[vindex].vis = CCMV_FE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_COPYINOUT";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Parameter %d caused both a copyin and copyout"
+ " in the following call");
+ ccm_attrs[vindex].fmt = CCMFMT_I1;
+
+ vindex = ccm_vis_index (CCM_PADDING);
+ ccm_attrs[vindex].vis = CCMV_FE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_PADDING";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Padding of %d bytes inserted before"
+ " array %s");
+ ccm_attrs[vindex].fmt = CCMFMT_I1V2;
+
+ vindex = ccm_vis_index (CCM_PADCOMMON);
+ ccm_attrs[vindex].vis = CCMV_FE | CCMV_UNIMPL;
+ ccm_attrs[vindex].name = "CCM_PADCOMMON";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Padding of %d bytes inserted before"
+ " array %s in common block %s");
+ ccm_attrs[vindex].fmt = CCMFMT_I1V2V3;
+
+ vindex = ccm_vis_index (CCM_ALIGN_EQ);
+ ccm_attrs[vindex].vis = CCMV_FE | CCMV_UNIMPL;
+ ccm_attrs[vindex].name = "CCM_ALIGN_EQ";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Variable/array %s can not be double-aligned,"
+ " because it is equivalenced");
+ ccm_attrs[vindex].fmt = CCMFMT_V1;
+
+ vindex = ccm_vis_index (CCM_ALIGN_PERF);
+ ccm_attrs[vindex].vis = CCMV_FE;
+ ccm_attrs[vindex].name = "CCM_ALIGN_PERF";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Alignment of variables in common block may cause"
+ " performance degradation");
+ ccm_attrs[vindex].fmt = CCMFMT_NONE;
+
+ vindex = ccm_vis_index (CCM_ALIGN_STRUCT);
+ ccm_attrs[vindex].vis = CCMV_FE;
+ ccm_attrs[vindex].name = "CCM_ALIGN_STRUCT";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Alignment of component %s in numeric sequence"
+ " structure %s may cause performance degradation");
+ ccm_attrs[vindex].fmt = CCMFMT_S1S2;
+
+ vindex = ccm_vis_index (CCM_TMP_COPY);
+ ccm_attrs[vindex].vis = CCMV_FE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_TMP_COPY";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Argument %s copied to a temporary");
+ ccm_attrs[vindex].fmt = CCMFMT_V1;
+
+ vindex = ccm_vis_index (CCM_TMP_COPYM);
+ ccm_attrs[vindex].vis = CCMV_FE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_TMP_COPYM";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Argument %s might be copied to a temporary;"
+ " runtime decision made");
+ ccm_attrs[vindex].fmt = CCMFMT_V1;
+
+ vindex = ccm_vis_index (CCM_PROC_MISMATCH);
+ ccm_attrs[vindex].vis = CCMV_FE | CCMV_BASIC | CCMV_UNIMPL | CCMV_WANT;
+ ccm_attrs[vindex].name = "CCM_PROC_MISMATCH";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Argument %d to subprogram %s differs from"
+ " reference on line %d");
+ ccm_attrs[vindex].fmt = CCMFMT_I1P2I3;
+
+ vindex = ccm_vis_index (CCM_PROC_MISMATCH2);
+ ccm_attrs[vindex].vis = CCMV_FE | CCMV_BASIC | CCMV_UNIMPL | CCMV_WANT;
+ ccm_attrs[vindex].name = "CCM_PROC_MISMATCH2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Scalar argument %d to subprogram %s is"
+ " referred to as an array on line %d");
+ ccm_attrs[vindex].fmt = CCMFMT_I1P2I3;
+
+ vindex = ccm_vis_index (CCM_PROC_MISMATCH3);
+ ccm_attrs[vindex].vis = CCMV_FE | CCMV_BASIC | CCMV_UNIMPL | CCMV_WANT;
+ ccm_attrs[vindex].name = "CCM_PROC_MISMATCH3";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Return type/rank from subprogram %s differs"
+ " from return on line %d");
+ ccm_attrs[vindex].fmt = CCMFMT_P1I2;
+
+ vindex = ccm_vis_index (CCM_DO_EXPR);
+ ccm_attrs[vindex].vis = CCMV_FE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_DO_EXPR";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "DO statement bounds lead to no executions of the"
+ " loop");
+ ccm_attrs[vindex].fmt = CCMFMT_NONE;
+
+ vindex = ccm_vis_index (CCM_AUTO_BND);
+ ccm_attrs[vindex].vis = CCMV_FE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_AUTO_BND";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "The bounds for automatic variable %s are not"
+ " available at all entry points; zero-length"
+ " variable might be allocated");
+ ccm_attrs[vindex].fmt = CCMFMT_V1;
+
+ vindex = ccm_vis_index (CCM_LIT_PAD);
+ ccm_attrs[vindex].vis = CCMV_FE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_LIT_PAD";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "The character string literal %s padded"
+ " to the length specified for the dummy argument");
+ ccm_attrs[vindex].fmt = CCMFMT_S1;
+
+ vindex = ccm_vis_index (CCM_ARRAY_LOOP);
+ ccm_attrs[vindex].vis = CCMV_FE | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_ARRAY_LOOP";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Array statement below generated a loop");
+ ccm_attrs[vindex].fmt = CCMFMT_NONE;
+
+ vindex = ccm_vis_index (CCM_ARRAY_LOOPNEST);
+ ccm_attrs[vindex].vis = CCMV_FE | CCMV_LOOP | CCMV_BASIC | CCMV_OBS;
+ ccm_attrs[vindex].name = "CCM_ARRAY_LOOPNEST";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Array statement below generated %d nested loops");
+ ccm_attrs[vindex].fmt = CCMFMT_I1;
+
+ vindex = ccm_vis_index (CCM_ALIGN_PERF2);
+ ccm_attrs[vindex].vis = CCMV_FE;
+ ccm_attrs[vindex].name = "CCM_ALIGN_PERF2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Alignment of variable %s in common block %s"
+ " may cause a performance degradation");
+ ccm_attrs[vindex].fmt = CCMFMT_V1V2;
+
+ vindex = ccm_vis_index (CCM_ALIGN_PERF3);
+ ccm_attrs[vindex].vis = CCMV_FE;
+ ccm_attrs[vindex].name = "CCM_ALIGN_PERF3";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Alignment of variable %s in blank common may"
+ " cause a performance degradation");
+ ccm_attrs[vindex].fmt = CCMFMT_V1;
+
+ vindex = ccm_vis_index (CCM_IO_LOOP_ARRAY);
+ ccm_attrs[vindex].vis = CCMV_FE | CCMV_LOOP | CCMV_BASIC | CCMV_WANT;
+ ccm_attrs[vindex].name = "CCM_IO_LOOP_ARRAY";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "I/O implied do item below generated an array"
+ " section");
+ ccm_attrs[vindex].fmt = CCMFMT_NONE;
+
+ vindex = ccm_vis_index (CCM_TMPCONST);
+ ccm_attrs[vindex].vis = CCMV_FE | CCMV_BASIC | CCMV_UNIMPL;
+ ccm_attrs[vindex].name = "CCM_TMPCONST";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Implicit invocation of class %s constructor for"
+ " temporary");
+ ccm_attrs[vindex].fmt = CCMFMT_S1;
+
+ vindex = ccm_vis_index (CCM_TMPDEST);
+ ccm_attrs[vindex].vis = CCMV_FE | CCMV_BASIC | CCMV_UNIMPL;
+ ccm_attrs[vindex].name = "CCM_TMPDEST";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Implicit invocation of class %s destructor for"
+ " temporary");
+ ccm_attrs[vindex].fmt = CCMFMT_S1;
+
+ vindex = ccm_vis_index (CCM_DBL_CONST);
+ ccm_attrs[vindex].vis = CCMV_FE | CCMV_BASIC | CCMV_UNIMPL;
+ ccm_attrs[vindex].name = "CCM_DBL_CONST";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Double constant %s used in float expression");
+ ccm_attrs[vindex].fmt = CCMFMT_S1;
+
+ vindex = ccm_vis_index (CCM_MINLINE);
+ ccm_attrs[vindex].vis = CCMV_FE | CCMV_BASIC | CCMV_UNIMPL;
+ ccm_attrs[vindex].name = "CCM_MINLINE";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Function %s inlined from source file %s by"
+ " front-end");
+ ccm_attrs[vindex].fmt = CCMFMT_P1S2;
+
+ vindex = ccm_vis_index (CCM_MINLINE2);
+ ccm_attrs[vindex].vis = CCMV_FE | CCMV_BASIC | CCMV_UNIMPL;
+ ccm_attrs[vindex].name = "CCM_MINLINE2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Function %s from source file %s inlined into"
+ " inline copy of method %s by front-end");
+ ccm_attrs[vindex].fmt = CCMFMT_P1S2P3;
+
+ vindex = ccm_vis_index (CCM_MINLINE3);
+ ccm_attrs[vindex].vis = CCMV_FE | CCMV_BASIC | CCMV_UNIMPL;
+ ccm_attrs[vindex].name = "CCM_MINLINE3";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Function %s not inlined because it uses keyword"
+ " %s");
+ ccm_attrs[vindex].fmt = CCMFMT_P1S2;
+
+ vindex = ccm_vis_index (CCM_MINLINE4);
+ ccm_attrs[vindex].vis = CCMV_FE | CCMV_BASIC | CCMV_UNIMPL;
+ ccm_attrs[vindex].name = "CCM_MINLINE4";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Function %s not inlined because it is too"
+ " complex");
+ ccm_attrs[vindex].fmt = CCMFMT_P1;
+
+ vindex = ccm_vis_index (CCM_TMP_COPYOUT);
+ ccm_attrs[vindex].vis = CCMV_FE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_TMP_COPYOUT";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Argument %s copied from a temporary");
+ ccm_attrs[vindex].fmt = CCMFMT_V1;
+
+ vindex = ccm_vis_index (CCM_TMP_COPYOUTM);
+ ccm_attrs[vindex].vis = CCMV_FE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_TMP_COPYOUTM";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Argument %s might be copied from a temporary;"
+ " runtime decision made");
+ ccm_attrs[vindex].fmt = CCMFMT_V1;
+
+ vindex = ccm_vis_index (CCM_TMP_COPYINOUT);
+ ccm_attrs[vindex].vis = CCMV_FE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_TMP_COPYINOUT";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Argument %s copied in and out of a temporary");
+ ccm_attrs[vindex].fmt = CCMFMT_V1;
+
+ vindex = ccm_vis_index (CCM_TMP_COPYINOUTM);
+ ccm_attrs[vindex].vis = CCMV_FE | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_TMP_COPYINOUTM";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Argument %s might be copied in and out of"
+ " a temporary; runtime decision made");
+ ccm_attrs[vindex].fmt = CCMFMT_V1;
+
+ vindex = ccm_vis_index (CCM_ARRAY_LOOP_2);
+ ccm_attrs[vindex].vis = CCMV_FE | CCMV_LOOP | CCMV_BASIC | CCMV_WANT;
+ ccm_attrs[vindex].name = "CCM_ARRAY_LOOP_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Array statement below generated loop %s");
+ ccm_attrs[vindex].fmt = CCMFMT_L1;
+
+ vindex = ccm_vis_index (CCM_ARRAY_LOOPNEST_2);
+ ccm_attrs[vindex].vis = CCMV_FE | CCMV_LOOP | CCMV_BASIC | CCMV_WANT;
+ ccm_attrs[vindex].name = "CCM_ARRAY_LOOPNEST_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Array statement below generated %d nested"
+ " loops: %s");
+ ccm_attrs[vindex].fmt = CCMFMT_I1LL2;
+
+ vindex = ccm_vis_index (CCM_IO_LOOP_ARRAY_2);
+ ccm_attrs[vindex].vis = CCMV_FE | CCMV_LOOP | CCMV_BASIC | CCMV_WANT;
+ ccm_attrs[vindex].name = "CCM_IO_LOOP_ARRAY_2";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "I/O implied do item below generated an array"
+ " section: %s");
+ ccm_attrs[vindex].fmt = CCMFMT_L1;
+
+ vindex = ccm_vis_index (CCM_USER_LOOP);
+ ccm_attrs[vindex].vis = CCMV_FE | CCMV_LOOP | CCMV_BASIC | CCMV_WANT;
+ ccm_attrs[vindex].name = "CCM_USER_LOOP";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Source loop below has tag %s");
+ ccm_attrs[vindex].fmt = CCMFMT_L1;
+
+ vindex = ccm_vis_index (CCM_FOUND_LOOP);
+ ccm_attrs[vindex].vis = CCMV_FE | CCMV_LOOP | CCMV_BASIC | CCMV_WANT;
+ ccm_attrs[vindex].name = "CCM_FOUND_LOOP";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Discovered loop below has tag %s");
+ ccm_attrs[vindex].fmt = CCMFMT_L1;
+
+ vindex = ccm_vis_index (CCM_MFUNCTION_LOOP);
+ ccm_attrs[vindex].vis = CCMV_LOOP | CCMV_BASIC | CCMV_WANT;
+ ccm_attrs[vindex].name = "CCM_MFUNCTION_LOOP";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Copy in M-function of loop below has tag %s");
+ ccm_attrs[vindex].fmt = CCMFMT_L1;
+
+ vindex = ccm_vis_index (CCM_FSIMPLE);
+ ccm_attrs[vindex].vis = CCMV_CG | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_FSIMPLE";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Transformations for fsimple=%d applied");
+ ccm_attrs[vindex].fmt = CCMFMT_I1;
+
+ vindex = ccm_vis_index (CCM_STACK);
+ ccm_attrs[vindex].vis = CCMV_CG | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_STACK";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Function %s requires %d Mbytes of stack"
+ " storage");
+ ccm_attrs[vindex].fmt = CCMFMT_P1I2;
+
+ vindex = ccm_vis_index (CCM_TAILRECUR);
+ ccm_attrs[vindex].vis = CCMV_CG | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_TAILRECUR";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Recursive tail call in %s optimized to jump to"
+ " entry point");
+ ccm_attrs[vindex].fmt = CCMFMT_P1;
+
+ vindex = ccm_vis_index (CCM_TAILCALL);
+ ccm_attrs[vindex].vis = CCMV_CG | CCMV_BASIC | CCMV_UNIMPL | CCMV_WANT;
+ ccm_attrs[vindex].name = "CCM_TAILCALL";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Call to function %s was tail-call optimized");
+ ccm_attrs[vindex].fmt = CCMFMT_P1;
+
+ vindex = ccm_vis_index (CCM_NI_EXIT_OR_PSEUDO);
+ ccm_attrs[vindex].vis = CCMV_CG | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NI_EXIT_OR_PSEUDO";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Template could not be early inlined because it"
+ " contains the pseudo instruction %s");
+ ccm_attrs[vindex].fmt = CCMFMT_S1;
+
+ vindex = ccm_vis_index (CCM_NI_BAD_UNARY_OPC);
+ ccm_attrs[vindex].vis = CCMV_CG | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NI_BAD_UNARY_OPC";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Template could not be early inlined because it"
+ " contains the instruction opcode %s");
+ ccm_attrs[vindex].fmt = CCMFMT_S1;
+
+ vindex = ccm_vis_index (CCM_NI_INT_LDD_ON_V9);
+ ccm_attrs[vindex].vis = CCMV_CG | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NI_INT_LDD_ON_V9";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Template could not be early inlined because it"
+ " contains integer ldd instructions, which are"
+ " deprecated in the v9 architecture");
+ ccm_attrs[vindex].fmt = CCMFMT_NONE;
+
+ vindex = ccm_vis_index (CCM_NI_LATE_INL_OPC);
+ ccm_attrs[vindex].vis = CCMV_CG | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NI_LATE_INL_OPC";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Template could not be early inlined because it"
+ " contains the instruction opcode %s");
+ ccm_attrs[vindex].fmt = CCMFMT_S1;
+
+ vindex = ccm_vis_index (CCM_NI_BAD_IMM_OP);
+ ccm_attrs[vindex].vis = CCMV_CG | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NI_BAD_IMM_OP";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Template could not be early inlined because the"
+ " relocation or immediate operand %s is not well"
+ " understood by the optimizer");
+ ccm_attrs[vindex].fmt = CCMFMT_S1;
+
+ vindex = ccm_vis_index (CCM_NI_BAD_STATELEAF);
+ ccm_attrs[vindex].vis = CCMV_CG | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NI_BAD_STATELEAF";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Template could not be early inlined because it"
+ " references the state register %s");
+ ccm_attrs[vindex].fmt = CCMFMT_S1;
+
+ vindex = ccm_vis_index (CCM_NI_BAD_ASR_19);
+ ccm_attrs[vindex].vis = CCMV_CG | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NI_BAD_ASR_19";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Template could not be early inlined because"
+ " %%asr19 is not supported in pre v8plus code");
+ ccm_attrs[vindex].fmt = CCMFMT_NONE;
+
+ vindex = ccm_vis_index (CCM_NI_BAD_FSR_USE);
+ ccm_attrs[vindex].vis = CCMV_CG | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NI_BAD_FSR_USE";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Template could not be early inlined because"
+ " references to %%fsr can only be optimized when the"
+ " -iaopts flag is used");
+ ccm_attrs[vindex].fmt = CCMFMT_NONE;
+
+ vindex = ccm_vis_index (CCM_NI_BAD_REGISTER);
+ ccm_attrs[vindex].vis = CCMV_CG | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NI_BAD_REGISTER";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Template could not be early inlined because it"
+ " references the register %s");
+ ccm_attrs[vindex].fmt = CCMFMT_S1;
+
+ vindex = ccm_vis_index (CCM_NI_NO_RET_VAL);
+ ccm_attrs[vindex].vis = CCMV_CG | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NI_NO_RET_VAL";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Template could not be early inlined because it"
+ " does not return the value declared");
+ ccm_attrs[vindex].fmt = CCMFMT_NONE;
+
+ vindex = ccm_vis_index (CCM_NI_DELAY);
+ ccm_attrs[vindex].vis = CCMV_CG | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NI_DELAY";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Template could not be early inlined because it"
+ " contains a non nop delay slot");
+ ccm_attrs[vindex].fmt = CCMFMT_NONE;
+
+ vindex = ccm_vis_index (CCM_NI_SCALL);
+ ccm_attrs[vindex].vis = CCMV_CG | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NI_SCALL";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Template could not be early inlined because it"
+ " calls a function which returns a structure");
+ ccm_attrs[vindex].fmt = CCMFMT_NONE;
+
+ vindex = ccm_vis_index (CCM_CASE_POSITION);
+ ccm_attrs[vindex].vis = CCMV_CG | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_CASE_POSITION";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Case block below was placed at position %d"
+ " based on execution frequency");
+ ccm_attrs[vindex].fmt = CCMFMT_I1;
+
+ vindex = ccm_vis_index (CCM_CALL_WITH_CODE);
+ ccm_attrs[vindex].vis = CCMV_CG | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_CALL_WITH_CODE";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Call to %s replaced with inline code. %d"
+ " loops created: %s");
+ ccm_attrs[vindex].fmt = CCMFMT_P1I2LL3;
+
+ vindex = ccm_vis_index (CCM_NI_BAD_SP_ADDR);
+ ccm_attrs[vindex].vis = CCMV_CG | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NI_BAD_SP_ADDR";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Template could not be early inlined because it"
+ " contains a %%sp+reg address");
+ ccm_attrs[vindex].fmt = CCMFMT_NONE;
+
+ vindex = ccm_vis_index (CCM_NI_BAD_SP_USAGE);
+ ccm_attrs[vindex].vis = CCMV_CG | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NI_BAD_SP_USAGE";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Template could not be early inlined because it"
+ " uses/defines the stack pointer in a non-load/store instruction");
+ ccm_attrs[vindex].fmt = CCMFMT_NONE;
+
+ vindex = ccm_vis_index (CCM_NI_MIXED_REG_TYPES);
+ ccm_attrs[vindex].vis = CCMV_CG | CCMV_BASIC;
+ ccm_attrs[vindex].name = "CCM_NI_MIXED_REG_TYPES";
+ ccm_attrs[vindex].msg = catgets (ccm_catd, 99, vindex,
+ "Template could not be early inlined because it"
+ " contains register %s used as both x-register and register pair");
+ ccm_attrs[vindex].fmt = CCMFMT_S1;
+}
diff --git a/gprofng/src/comp_com.h b/gprofng/src/comp_com.h
new file mode 100644
index 00000000000..e41092455c5
--- /dev/null
+++ b/gprofng/src/comp_com.h
@@ -0,0 +1,903 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _COMP_COM_H
+#define _COMP_COM_H
+
+#include <sys/types.h>
+#include <nl_types.h>
+
+/*
+ * This file describes format for the compiler-commentary
+ * section to be added to .o's and propagated to the a.out. It reflects
+ * information the compiler can expose to the user about his or her
+ * program. The section should be generated for all compiles where
+ * the user has specified -g on the compile line.
+ *
+ * In the analyzer, display of the messages will be governed by a user UI
+ * that sets a vis_bits bitmap, and matches it against a show_bits
+ * bitmap table, which is maintained separately from the producer
+ * code. For any message, if (vis_bits&show_bits) is non-zero, the
+ * message is shown. If zero, the message is not shown. A similar
+ * mechanism would be used for a stand-alone source or disassembly browser.
+ *
+ *
+ * The .compcom Section
+ * --------------------
+ * The section will be named ".compcom"; it is generated for each
+ * .o, and aggregated into a single section in the a.out. In that
+ * section, each .o's data is separate, and the tools will loop
+ * over the data for each .o in order to find the subsection for
+ * the particular .o being annotated.
+ *
+ *
+ * Since the header is fixed-length, and the total size of the section
+ * can be easily determined as:
+ *
+ * sizeof(stuct compcomhdr)
+ * + msgcount * sizeof(struct compmsg)
+ * + paramcount * sizeof(int32_t)
+ * + stringlen
+ *
+ * there is no need to have the size in the header.
+ */
+
+typedef struct
+{ /* Header describing the section */
+ int32_t srcname; /* index into strings of source file path */
+ int32_t version; /* a version number for the .compcom format */
+ int32_t msgcount; /* count of messages in the section */
+ int32_t paramcount; /* count of parameters in the section */
+ int32_t stringcount; /* count of strings in the section */
+ int32_t stringlen; /* count of total bytes in strings */
+} compcomhdr;
+
+/*
+ * The data for the .o after the header as:
+ *
+ * compmsg msgs[msgcount]; the array of messages
+ * int32_t param[paramcount]; the parameters used in the messages
+ * parameters are either integers or
+ * string-indices
+ * char msgstrings[stringlen]; the strings used in the messages
+ */
+
+/*
+ * Message Classes and Visualization Bits
+ * --------------------------------------
+ * Each of the messages above may belong to zero or more visualization
+ * classes, governed by a table using zero or more of the following symbolic
+ * names for the classes:
+ */
+typedef enum {
+CCMV_WANT = 0x000, /* High-priority RFE -- used only for human */
+ /* reading of message list */
+CCMV_UNIMPL = 0x000, /* Unimplemented -- used only for human */
+ /* reading of message list */
+CCMV_OBS = 0x000, /* Obsolete -- to be replaced by a different */
+ /* message with different parameters -- */
+ /* used only for human reading of message */
+ /* list */
+CCMV_VER = 0x001, /* Versioning messages */
+CCMV_WARN = 0x002, /* Warning messages */
+CCMV_PAR = 0x004, /* Parallelization messages */
+CCMV_QUERY = 0x008, /* Compiler queries */
+CCMV_LOOP = 0x010, /* Loop detail messages */
+CCMV_PIPE = 0x020, /* Pipelining messages */
+CCMV_INLINE = 0x040, /* Inlining information */
+CCMV_MEMOPS = 0x080, /* Messages concerning memory operations */
+CCMV_FE = 0x100, /* Front-end messages (all compilers) */
+CCMV_CG = 0x200, /* Code-generator messages (all compilers) */
+CCMV_BASIC = 0x400, /* for default messages */
+CCMV_ALL = 0x7FFFFFFF /* for all messages */
+} COMPCLASS_ID;
+
+typedef enum ccm_msgid
+{
+ /* Group: Versioning Messages */
+ /* All of these are global to the .o, and will */
+ /* have lineno = pcoffset = 0 */
+
+CCM_MODDATE=0x00100, /* Source file <s1>, last modified on date <s2> */
+CCM_COMPVER, /* Component <s1>, version <s2> */
+ /* [Emitted for each component of the compiler.] */
+CCM_COMPDATE, /* Compilation date <s1> */
+ /* [<s1> is an I18n string with the date and time] */
+CCM_COMPOPT, /* Compilation options <s1> */
+ /* [As specified by the user] */
+CCM_ACOMPOPT, /* Actual Compilation options <s1> */
+ /* [As expanded by the driver] */
+
+ /* Group: Warning Messages */
+CCM_VAR_ALIAS=0x00200, /* Variable <v1> aliased to <v2> */
+CCM_FBIRDIFF, /* Profile feedback data inconsistent with */
+ /* intermediate representation file; check compiler */
+ /* version, flags and source file */
+CCM_OPTRED_SWAP, /* Optimization level for <p1> reduced from <i2> to */
+ /* <i3> due to insufficient swap space */
+CCM_OPTRED_CPLX, /* Optimization level for <p1> reduced from <i2> to */
+ /* <i3> due to program complexity */
+CCM_UNKNOWN, /* Unexpected compiler comment <i1> */
+
+ /* Group: Parallelization Messages */
+CCM_UNPAR_CALL=0x00400, /* Loop below not parallelized because it contains a */
+ /* call to <p1> */
+
+ /* CCMV_WANT: Don't generate CCM_PAR_SER; always use CCM_PAR_SER_VER */
+CCM_PAR_SER, /* Both serial and parallel versions generated for */
+ /* loop below */
+CCM_PAR_SER_VER, /* Both serial and parallel versions generated for */
+ /* loop below; with parallel version used if <s1>, */
+ /* serial otherwise */
+CCM_PAR_DRECTV, /* Loop below parallelized by explicit user */
+ /* directive */
+CCM_APAR, /* Loop below autoparallelized */
+CCM_AUTOPAR, /* Loop below autoparallelized; equivalent */
+ /* explict directive is <s1> */
+CCM_UNPAR_DD, /* Loop below could not be parallelized because of a */
+ /* data dependency on <v1>, <v2>, ... */
+ /* [The number of parameters will determine how many */
+ /* names appear, and the formatter will get the */
+ /* commas right.] */
+CCM_UNPAR_DDA, /* Loop below could not be parallelized because of a */
+ /* data dependency or aliasing of <v1>, <v2>, ... */
+CCM_UNPAR_ANONDD, /* Loop below could not be parallelized because of */
+ /* an anonymous data dependency */
+CCM_UNPAR_ANONDDA, /* Loop below could not be parallelized because of */
+ /* an anonymous data dependency or aliasing */
+CCM_PAR_WORK, /* Loop below parallelized, but might not contain */
+ /* enough work to be efficiently run in parallel */
+CCM_UNPAR_EXIT, /* Loop below not parallelized because it contains */
+ /* multiple exit points */
+CCM_UNPAR_STRNG, /* Loop below not parallelized because it contains a */
+ /* strange flow of control */
+CCM_UNPAR_IO, /* Loop below not parallelized because it contains */
+ /* I/O or other MT-unsafe calls */
+CCM_PAR_BODY_NAME, /* Parallel loop-body code is in function <p1> */
+CCM_UNPAR_NLOOPIDX, /* Loop below not parallelized because loop index */
+ /* not found */
+CCM_UNPAR_DRECTV, /* Loop below not parallelized because of explicit */
+ /* user directive */
+CCM_UNPAR_NOTPROFIT, /* Loop below not parallelized because it was not */
+ /* profitable to do so */
+CCM_UNPAR_NEST, /* Loop below not parallelized because it was */
+ /* nested in a parallel loop */
+CCM_UNPAR, /* Loop below not parallelized */
+CCM_UNPAR_NOAUTO, /* Loop below not parallelized because */
+ /* autoparallelization is not enabled */
+CCM_PR_L_VAR, /* Private variables in loop below: */
+ /* <v1>, <v2>, ... */
+ /* [The number of parameters will determine how many */
+ /* names appear, and the formatter will get the */
+ /* commas right.] */
+CCM_SH_L_VAR, /* Shared variables in loop below: */
+ /* <v1>, <v2>, ... */
+CCM_TP_L_VAR, /* Threadprivate variables in loop below: */
+ /* <v1>, <v2>, ... */
+CCM_RV_L_VAR, /* Reduction variables in loop below: */
+ /* <v1>, <v2>, ... */
+CCM_IM_L_VAR, /* Implicit variables in loop below: */
+ /* <v1>, <v2>, ... */
+CCM_PR_O_VAR, /* Private variables in OpenMP construct below: */
+ /* <v1>, <v2>, ... */
+CCM_SH_O_VAR, /* Shared variables in OpenMP construct below: */
+ /* <v1>, <v2>, ... */
+CCM_TP_O_VAR, /* Threadprivate variables in OpenMP construct */
+ /* below: <v1>, <v2>, ... */
+CCM_RV_O_VAR, /* Reduction variables in OpenMP construct below: */
+ /* <v1>, <v2>, ... */
+CCM_IM_O_VAR, /* Implicit variables in OpenMP construct below: */
+ /* <v1>, <v2>, ... */
+CCM_UNPAR_IN_OMP, /* Loop below not parallelized because it is inside */
+ /* an OpenMP region */
+CCM_FP_O_VAR, /* Firstprivate variables in OpenMP construct below: */
+ /* <v1>, <v2>, ... */
+CCM_LP_O_VAR, /* Lastprivate variables in OpenMP construct below: */
+ /* <v1>, <v2>, ... */
+CCM_CP_O_VAR, /* Copyprivate variables in OpenMP construct below: */
+ /* <v1>, <v2>, ... */
+CCM_PR_OAS_VAR, /* Variables autoscoped as PRIVATE in OpenMP */
+ /* construct below: <v1>, <v2>, ... */
+CCM_SH_OAS_VAR, /* Variables autoscoped as SHARED in OpenMP */
+ /* construct below: <v1>, <v2>, ... */
+CCM_FP_OAS_VAR, /* Variables autoscoped as FIRSTPRIVATE in OpenMP */
+ /* construct below: <v1>, <v2>, ... */
+CCM_LP_OAS_VAR, /* Variables autoscoped as LASTPRIVATE in OpenMP */
+ /* construct below: <v1>, <v2>, ... */
+CCM_RV_OAS_VAR, /* Variables autoscoped as REDUCTION in OpenMP */
+ /* construct below: <v1>, <v2>, ... */
+CCM_FAIL_OAS_VAR, /* Variables cannot be autoscoped in OpenMP */
+ /* construct below: <v1>, <v2>, ... */
+CCM_SERIALIZE_OAS, /* OpenMP parallel region below is serialized */
+ /* because autoscoping has failed */
+CCM_UNPAR_CALL_2, /* <l1> not parallelized because it contains calls */
+ /* to: <p2>, <p3>, ... */
+CCM_PAR_DRECTV_2, /* <l1> parallelized by explicit user directive */
+CCM_APAR_2, /* <l1> autoparallelized */
+CCM_AUTOPAR_2, /* <l1> autoparallelized; equivalent */
+ /* explict directive is <s2> */
+CCM_UNPAR_DD_2, /* <l1> could not be parallelized because of */
+ /* data dependences on: <v2>, <v3>, ... */
+ /* [The number of parameters will determine how many */
+ /* names appear, and the formatter will get the */
+ /* commas right.] */
+CCM_UNPAR_DDA_2, /* <l1> could not be parallelized because of a */
+ /* data dependence or aliasing of: <v2>, <v3>, ... */
+CCM_UNPAR_ANONDD_2, /* <l1> could not be parallelized because of an */
+ /* anonymous data dependence */
+CCM_UNPAR_ANONDDA_2, /* <l1> could not be parallelized because of an */
+ /* anonymous data dependence or aliasing */
+CCM_PAR_WORK_2, /* <l1> parallelized, but might not contain */
+ /* enough work to run efficiently in parallel */
+CCM_UNPAR_EXIT_2, /* <l1> not parallelized because it contains */
+ /* multiple exit points */
+CCM_UNPAR_STRANGE_2, /* <l1> not parallelized because it contains a */
+ /* strange flow of control */
+CCM_UNPAR_IO_2, /* <l1> not parallelized because it contains */
+ /* I/O or other MT-unsafe calls */
+CCM_PAR_BODY_NAME_2, /* <l1> parallel loop-body code placed in */
+ /* function <p2> along with <i3> inner loops */
+CCM_UNPAR_NLOOPIDX_2, /* <l1> not parallelized because loop index not */
+ /* found */
+CCM_UNPAR_DRECTV_2, /* <l1> not parallelized because of explicit */
+ /* user directive */
+CCM_UNPAR_NOTPROFIT_2, /* <l1> not parallelized because it was not */
+ /* profitable to do so */
+CCM_UNPAR_NEST_2, /* <l1> not parallelized because it was */
+ /* nested within a parallel loop */
+CCM_UNPAR_2, /* <l1> not parallelized */
+CCM_UNPAR_NOAUTO_2, /* <l1> not parallelized because */
+ /* autoparallelization is not enabled */
+CCM_PR_L_VAR_2, /* Private variables in <l1>: */
+ /* <v2>, <v3>, ... */
+ /* [The number of parameters will determine how many */
+ /* names appear, and the formatter will get the */
+ /* commas right.] */
+CCM_SH_L_VAR_2, /* Shared variables in <l1>: */
+ /* <v2>, <v3>, ... */
+CCM_TP_L_VAR_2, /* Threadprivate variables in <l1>: */
+ /* <v2>, <v3>, ... */
+CCM_RV_L_VAR_2, /* Reduction variables of operator <s1> in <l2>: */
+ /* <v3>, <v4>, ... */
+CCM_IM_L_VAR_2, /* Implicit variables in <l1>: */
+ /* <v2>, <v3>, ... */
+CCM_PR_O_VAR_2, /* Private variables in <r1>: */
+ /* <v2>, <v3>, ... */
+CCM_SH_O_VAR_2, /* Shared variables in <r1>: */
+ /* <v2>, <v3>, ... */
+CCM_TP_O_VAR_2, /* Threadprivate variables in <r1>: */
+ /* <v2>, <v3>, ... */
+CCM_RV_O_VAR_2, /* Reduction variables of operator <s1> in <r2>: */
+ /* <v3>, <v4>, ... */
+CCM_IM_O_VAR_2, /* Implicit variables in <r1>: */
+ /* <v2>, <v3>, ... */
+CCM_UNPAR_IN_OMP_2, /* <l1> not parallelized because it is inside */
+ /* OpenMP region <r2> */
+CCM_FP_O_VAR_2, /* Firstprivate variables in <r1>: */
+ /* <v2>, <v3>, ... */
+CCM_LP_O_VAR_2, /* Lastprivate variables in <r1>: */
+ /* <v2>, <v3>, ... */
+CCM_CP_O_VAR_2, /* Copyprivate variables in <r1>: */
+ /* <v2>, <v3>, ... */
+CCM_PR_OAS_VAR_2, /* Variables autoscoped as PRIVATE in <r1>: */
+ /* <v2>, <v3>, ... */
+CCM_SH_OAS_VAR_2, /* Variables autoscoped as SHARED in <r1>: */
+ /* <v2>, <v3>, ... */
+CCM_FP_OAS_VAR_2, /* Variables autoscoped as FIRSTPRIVATE in <r1>: */
+ /* <v2>, <v3>, ... */
+CCM_LP_OAS_VAR_2, /* Variables autoscoped as LASTPRIVATE in <r1>: */
+ /* <v2>, <v3>, ... */
+CCM_RV_OAS_VAR_2, /* Variables autoscoped as REDUCTION of operator */
+ /* <s1> in <r2>: <v3>, <v4>, ... */
+CCM_FAIL_OAS_VAR_2, /* Variables treated as shared because they cannot */
+ /* be autoscoped in <r1>: <v2>, <v3>, ... */
+CCM_SERIALIZE_OAS_2, /* <r1> will be executed by a single thread because */
+ /* autoscoping for some variables was not successful */
+
+ /* Group: Parallelization Questions asked of the user */
+ /* How will the user answer these questions? */
+CCM_QPERMVEC=0x00800, /* Is <v1> a permutation vector during execution of */
+ /* <l2>? */
+CCM_QEXPR, /* Is expression <s1> true for <l2>? */
+CCM_QSAFECALL, /* Is subroutine <p1> MP-safe as used in <l2>? */
+
+ /* Group: Loop Optimization Messages */
+CCM_LCOST=0x01000, /* Loop below estimated to cost <i1> cycles per */
+ /* iteration */
+CCM_UNROLL, /* Loop below unrolled <i1> times */
+ /* CCMV_WANT: the next one should be replaced by CCM_IMIX2 */
+CCM_IMIX, /* Loop below has <i1> loads, <i2> stores, */
+ /* <i3> prefetches, <i4> FPadds, <i5> FPmuls, and */
+ /* <i6> FPdivs per iteration */
+CCM_SPILLS, /* Loop below required <i1> integer register spills, */
+ /* <i2> FP register spills, and used */
+ /* <i3> integer registers and <i4> FP registers */
+CCM_LFISSION, /* Loop below fissioned into <i1> loops */
+CCM_LPEEL, /* Loop below had iterations peeled off for better */
+ /* unrolling and/or parallelization */
+CCM_LBLOCKED, /* Loop below blocked by <i1> for improved cache */
+ /* performance */
+CCM_LTILED, /* Loop below tiled for better performance */
+CCM_LUNRJAM, /* Loop below unrolled and jammed */
+CCM_LWHILE2DO, /* Bounds test for loop below moved to top of loop */
+CCM_L2CALL, /* Loop below replaced by a call to <p1> */
+CCM_LDEAD, /* Loop below deleted as dead code */
+CCM_LINTRCHNG, /* Loop below interchanged with loop on line <i1> */
+CCM_FUSEDTO, /* Loop below fused with loop on line <i1> */
+CCM_FUSEDFROM, /* Loop from line <i1> fused with loop below */
+CCM_VECINTRNSC, /* Loop below transformed to use calls to vector */
+ /* intrinsic <p1>, <p2>, ... */
+ /* [The number of parameters will determine how many */
+ /* names appear, and the formatter will get the */
+ /* commas right.] */
+CCM_LSTRIPMINE, /* Loop below strip-mined */
+CCM_LNEST2LOOPS, /* Loop below collapsed with loop on line <i1> */
+CCM_LREVERSE, /* Loop below has had its iteration direction */
+ /* reversed */
+CCM_IMIX2, /* Loop below has <i1> loads, <i2> stores, */
+ /* <i3> prefetches, <i4> FPadds, <i5> FPmuls, */
+ /* <i6> FPdivs, <i7> FPsubs, and <i8> FPsqrts per */
+ /* iteration */
+CCM_LUNRFULL, /* Loop below fully unrolled */
+CCM_ELIM_NOAMORTINST, /* Loop below was eliminated as it contains no */
+ /* non-amortizable instructions */
+CCM_COMP_DALIGN, /* Performance of loop below could be improved */
+ /* by compiling with -dalign */
+CCM_INTIMIX, /* Loop below has <i1> int-loads, <i2> int-stores, */
+ /* <i3> alu-ops, <i4> muls, <i5> int-divs and */
+ /* <i6> shifts per iteration */
+CCM_LMULTI_VERSION, /* <l1> multi-versioned. Specialized version */
+ /* is <l2> */
+CCM_LCOST_2, /* <l1> estimated to cost <i2> cycles per iteration */
+CCM_UNROLL_2, /* <l1> unrolled <i2> times */
+
+ /* CCMV_WANT: the next one should be replaced by CCM_IMIX2_B or CCM_IMIX3_B */
+CCM_IMIX_B, /* <l1> has <i2> loads, <i3> stores, */
+ /* <i4> prefetches, <i5> FPadds, <i6> FPmuls, and */
+ /* <i7> FPdivs per iteration */
+CCM_SPILLS_2, /* <l1> required <i2> integer register spills, */
+ /* <i3> FP register spills, and used */
+ /* <i4> integer registers and <i5> FP registers */
+CCM_LFISSION_2, /* <l1> fissioned into <i2> loops, generating: */
+ /* <l3>, <l4>, ... */
+ /* [The number of parameters will determine how many */
+ /* names appear, and the formatter will get the */
+ /* commas right.] */
+CCM_LFISSION_FRAG, /* <l1> contains code from lines: <i2>, <i3>, ... */
+CCM_LPEEL_2, /* <l1> had iterations peeled off for better */
+ /* unrolling and/or parallelization */
+CCM_LBLOCKED_2, /* <l1> blocked by <i2> for improved memory */
+ /* hierarchy performance, new inner loop <l3> */
+CCM_LOUTER_UNROLL, /* <l1> is outer-unrolled <i2> times as part */
+ /* of unroll and jam */
+CCM_LJAMMED, /* All <i1> copies of <l2> are fused together */
+ /* as part of unroll and jam */
+CCM_LWHILE2DO_2, /* Bounds test for <l1> moved to top of loop */
+CCM_L2CALL_2, /* <l1> replaced by a call to <p2> */
+CCM_LDEAD_2, /* <l1> deleted as dead code */
+CCM_LINTRCHNG_2, /* <l1> interchanged with <l2> */
+CCM_LINTRCHNG_ORDER, /* For loop nest below, the final order of loops */
+ /* after interchanging and subsequent */
+ /* transformations is: <l1>, <l2>, ... */
+ /* [The number of parameters will determine how many */
+ /* names appear, and the formatter will get the */
+ /* commas right.] */
+CCM_FUSED_2, /* <l1> fused with <l2>, new loop <l3> */
+CCM_VECINTRNSC_2, /* <l1> transformed to use calls to vector */
+ /* intrinsics: <p2>, <p3>, ... */
+CCM_LSTRIPMINE_2, /* <l1> strip-mined by <i2>, new inner loop <l3> */
+CCM_LNEST2LOOPS_2, /* <l1> collapsed with <l2>, new loop <l3> */
+CCM_LREVERSE_2, /* <l1> has had its iteration direction reversed */
+CCM_IMIX2_B, /* <l1> has <i2> loads, <i3> stores, */
+ /* <i4> prefetches, <i5> FPadds, <i6> FPmuls, */
+ /* <i7> FPdivs, <i8> FPsubs, and <i9> FPsqrts per */
+ /* iteration */
+CCM_LUNRFULL_2, /* <l1> fully unrolled */
+CCM_ELIM_NOAMORTINST_2, /* <l1> was eliminated as it contains no */
+ /* non-amortizable instructions */
+CCM_COMP_DALIGN_2, /* Performance of <l1> could be improved by */
+ /* compiling with -dalign */
+CCM_INTIMIX_2, /* <l1> has <i2> int-loads, <i3> int-stores, */
+ /* <i4> alu-ops, <i5> muls, <i6> int-divs and */
+ /* <i7> shifts per iteration */
+CCM_OMP_REGION, /* Source OpenMP region below has tag <r1> */
+CCM_LMICROVECTORIZE, /* <l1> is micro-vectorized */
+CCM_LMULTI_VERSION_2, /* <l1> multi-versioned for <s2>. */
+ /* Specialized version is <l3> */
+CCM_LCLONED, /* <l1> cloned for <s2>. Clone is <l3> */
+CCM_LUNSWITCHED, /* <l1> is unswitched. New loops */
+ /* are <l2> and <l3> */
+CCM_LRESWITCHED, /* Loops <l1> and <l2> and their surrounding */
+ /* conditional code have been merged to */
+ /* form loop <l3> */
+CCM_LSKEWBLOCKED, /* <l1> skew-blocked by <i2> with slope */
+ /* <i3> for improved memory hierarchy */
+ /* performance, new inner loop <l4> */
+CCM_IVSUB, /* Induction variable substitution performed on <l1> */
+CCM_ONEITER_REPLACED, /* <l1> determined to have a trip count of 1; */
+ /* converted to straight-line code */
+CCM_IMIX3_B, /* <l1> has <i2> loads, <i3> stores, */
+ /* <i4> prefetches, <i5> FPadds, <i6> FPmuls, */
+ /* <i7> FPmuladds, <i8> FPdivs, and <i9> FPsqrts per */
+ /* iteration */
+
+ /* Group: Pipelining Messages */
+CCM_PIPELINE=0x02000, /* Loop below pipelined */
+CCM_PIPESTATS, /* Loop below scheduled with steady-state cycle */
+ /* count = <i1> */
+CCM_NOPIPE_CALL, /* Loop could not be pipelined because it contains */
+ /* calls */
+CCM_NOPIPE_INTCC, /* Loop could not be pipelined because it sets */
+ /* multiple integer condition codes. */
+CCM_NOPIPE_MBAR, /* Loop could not be pipelined because it contains a */
+ /* memory barrier instruction */
+CCM_NOPIPE_MNMX, /* Loop could not be pipelined because it contains */
+ /* a minimum or a maximum operation */
+CCM_NOPIPE_U2FLT, /* Loop could not be pipelined because it contains */
+ /* an unsigned to float conversion */
+CCM_NOPIPE_GOT, /* Loop could not be pipelined because it sets the */
+ /* Global Offset Table pointer */
+CCM_NOPIPE_IDIV, /* Loop could not be pipelined because it contains */
+ /* an integer divide */
+CCM_NOPIPE_PRFTCH, /* Loop could not be pipelined because it contains */
+ /* a prefetch operation */
+CCM_NOPIPE_EXIT, /* Loop could not be pipelined because it contains */
+ /* an exit operation */
+CCM_NOPIPE_REG, /* Loop could not be pipelined because it contains */
+ /* instructions that set the %gsr or %fsr register */
+CCM_NOPIPE_UNS, /* Loop could not be pipelined because it has an */
+ /* unsigned loop counter */
+CCM_NOPIPE_UNSUIT, /* Loop was unsuitable for pipelining */
+CCM_NOPIPE_INTRINSIC, /* Loop could not be pipelined because it has an */
+ /* intrinsic call to <p1> */
+CCM_NOPIPE_BIG, /* Loop could not be pipelined as it is too big */
+CCM_NOPIPE_INVINTPR, /* Loop could not be pipelined as it contains too */
+ /* many loop invariant integers = <i1> */
+CCM_NOPIPE_INVFLTPR, /* Loop could not be pipelined as it contains too */
+ /* many loop invariant floats = <i1> */
+CCM_NOPIPE_INVDBLPR, /* Loop could not be pipelined as it contains too */
+ /* many loop invariant doubles = <i1> */
+CCM_PIPE_SCHEDAFIPR, /* Loop below was adversely affected by high */
+ /* integer register pressure = <i1> */
+CCM_PIPE_SCHEDAFDPR, /* Loop below was adversely affected by high */
+ /* double register pressure = <i1> */
+CCM_PIPE_SCHEDAFFPR, /* Loop below was adversely affected by high */
+ /* float register pressure = <i1> */
+CCM_NOPIPE_INTPR, /* Loop could not be pipelined due to high */
+ /* integer register pressure = <i1> */
+CCM_NOPIPE_DBLPR, /* Loop could not be pipelined due to high */
+ /* double register pressure = <i1> */
+CCM_NOPIPE_FLTPR, /* Loop could not be pipelined due to high */
+ /* float register pressure = <i1> */
+CCM_PIPELINE_2, /* <l1> pipelined */
+CCM_PIPESTATS_2, /* <l1> scheduled with steady-state cycle */
+ /* count = <i2> */
+CCM_NOPIPE_CALL_2, /* <l1> could not be pipelined because it contains */
+ /* calls */
+CCM_NOPIPE_INTCC_2, /* <l1> could not be pipelined because it sets */
+ /* multiple integer condition codes. */
+CCM_NOPIPE_MBAR_2, /* <l1> could not be pipelined because it contains */
+ /* a memory barrier instruction */
+CCM_NOPIPE_MNMX_2, /* <l1> could not be pipelined because it contains */
+ /* a minimum or a maximum operation */
+CCM_NOPIPE_U2FLT_2, /* <l1> could not be pipelined because it contains */
+ /* an unsigned to float conversion */
+CCM_NOPIPE_GOT_2, /* <l1> could not be pipelined because it sets the */
+ /* Global Offset Table pointer */
+CCM_NOPIPE_IDIV_2, /* <l1> could not be pipelined because it contains */
+ /* an integer divide */
+CCM_NOPIPE_PRFTCH_2, /* <l1> could not be pipelined because it contains */
+ /* a prefetch operation */
+CCM_NOPIPE_EXIT_2, /* <l1> could not be pipelined because it contains */
+ /* an exit operation */
+CCM_NOPIPE_REG_2, /* <l1> could not be pipelined because it contains */
+ /* instructions that set the %gsr or %fsr register */
+CCM_NOPIPE_UNS_2, /* <l1> could not be pipelined because it has an */
+ /* unsigned loop counter */
+CCM_NOPIPE_UNSUIT_2, /* <l1> is unsuitable for pipelining */
+CCM_NOPIPE_INTRINSIC_2, /* <l1> could not be pipelined because it contains */
+ /* a call to intrinsic <p2> */
+CCM_NOPIPE_BIG_2, /* <l1> could not be pipelined as it is too big */
+CCM_NOPIPE_INVINTPR_2, /* <l1> could not be pipelined as it contains too */
+ /* many loop invariant integers = <i2> */
+CCM_NOPIPE_INVFLTPR_2, /* <l1> could not be pipelined as it contains too */
+ /* many loop invariant floats = <i2> */
+CCM_NOPIPE_INVDBLPR_2, /* <l1> could not be pipelined as it contains too */
+ /* many loop invariant doubles = <i2> */
+CCM_PIPE_SCHEDAFIPR_2, /* <l1> was adversely affected by high */
+ /* integer register pressure = <i2> */
+CCM_PIPE_SCHEDAFDPR_2, /* <l1> was adversely affected by high */
+ /* double register pressure = <i2> */
+CCM_PIPE_SCHEDAFFPR_2, /* <l1> was adversely affected by high */
+ /* float register pressure = <i2> */
+CCM_NOPIPE_INTPR_2, /* <l1> could not be pipelined due to high */
+ /* integer register pressure = <i2> */
+CCM_NOPIPE_DBLPR_2, /* <l1> could not be pipelined due to high */
+ /* double register pressure = <i2> */
+CCM_NOPIPE_FLTPR_2, /* <l1> could not be pipelined due to high */
+ /* float register pressure = <i2> */
+
+ /* Group: Inlining Messages */
+CCM_INLINE=0x04000, /* Function <p1> inlined from source file <s2> into */
+ /* the code for the following line */
+CCM_INLINE2, /* Function <p1> inlined from source file <s2> into */
+ /* inline copy of function <p3> */
+CCM_INLINE_TMPLT, /* Function <p1> inlined from template file <s2> */
+ /* into the code for the following line */
+CCM_INLINE_TMPLT2, /* Function <p1> inlined from template file <s2> */
+ /* into inline copy of function <p3> */
+CCM_INLINE_OUT_COPY, /* Out-of-line copy of inlined function <p1> from */
+ /* source file <s2> generated */
+CCM_NINLINE_REC, /* Recursive function <p1> inlined only up to */
+ /* depth <i2> */
+CCM_NINLINE_NEST, /* Function <p1> not inlined because inlining is */
+ /* already nested too deeply */
+CCM_NINLINE_CMPLX, /* Function <p1> not inlined because it contains */
+ /* too many operations */
+CCM_NINLINE_FB, /* Function <p1> not inlined because the */
+ /* profile-feedback execution count is too low */
+CCM_NINLINE_PAR, /* Function <p1> not inlined because it contains */
+ /* explicit parallel pragmas */
+CCM_NINLINE_OPT, /* Function <p1> not inlined because it is */
+ /* compiled with optimization level <= 2 */
+CCM_NINLINE_USR, /* Function <p1> not inlined because either command */
+ /* line option or source code pragma prohibited it, */
+ /* or it's not safe to inline it */
+CCM_NINLINE_AUTO, /* Function <p1> not inlined because doing so */
+ /* would make automatic storage for <p2> too large */
+CCM_NINLINE_CALLS, /* Function <p1> not inlined because it contains */
+ /* too many calls */
+CCM_NINLINE_ACTUAL, /* Function <p1> not inlined because it has more */
+ /* actual parameters than formal parameters */
+CCM_NINLINE_FORMAL, /* Function <p1> not inlined because it has more */
+ /* formal parameters than actual parameters */
+CCM_NINLINE_TYPE, /* Function <p1> not inlined because formal */
+ /* argument type does not match actual type */
+CCM_NINLINE_ATYPE, /* Function <p1> not inlined because array formal */
+ /* argument does not match reshaped array actual */
+ /* argument type */
+CCM_NINLINE_RETTYPE, /* Function <p1> not inlined because return type */
+ /* does not match */
+CCM_NINLINE_EXCPT, /* Function <p1> not inlined because it */
+ /* guarded by an exception handler */
+CCM_NINLINE_UNSAFE, /* Function <p1> not inlined because it might be */
+ /* unsafe (call alloca(), etc) */
+CCM_NINLINE_ALIAS, /* Function <p1> not inlined because inlining it */
+ /* will make the alias analysis in the calling */
+ /* function more conservative */
+CCM_NINLINE_FEMARK, /* Function <p1> not inlined because it contains */
+ /* setjmp/longjmp, or indirect goto, etc */
+CCM_NINLINE_RAREX, /* Function <p1> not inlined because it is known */
+ /* to be rarely executed */
+CCM_CLONING, /* Function <p1> from source file <s2> cloned, */
+ /* creating cloned function <p3>; constant */
+ /* parameters propagated to clone */
+CCM_INLINE_B, /* Function <p1> inlined from source file <s2> into */
+ /* the code for the following line. <i3> loops */
+ /* inlined */
+CCM_INLINE2_B, /* Function <p1> inlined from source file <s2> into */
+ /* inline copy of function <p3>. <i4> loops inlined */
+CCM_INLINE_LOOP, /* Loop in function <p1>, line <i2> has */
+ /* tag <l3> */
+CCM_NINLINE_MULTIENTRY, /* Function <p1> not inlined because it */
+ /* contains an ENTRY statement */
+CCM_NINLINE_VARARGS, /* Function <p1> not inlined because variable */
+ /* argument routines cannot be inlined */
+CCM_NINLINE_UNSEEN_BODY, /* Function <p1> not inlined because the compiler */
+ /* has not seen the body of the function. Use */
+ /* -xcrossfile or -xipo in order to inline it */
+CCM_NINLINE_UPLEVEL, /* Function <p1> not inlined because it is a */
+ /* nested routine containing references to */
+ /* variables defined in an outer function */
+CCM_NINLINE_CMDLINE, /* Function <p1> not inlined because either */
+ /* -xinline or source code pragma prohibited it */
+CCM_NINLINE_CALL_CMPLX, /* Call to <p1> not inlined because of the */
+ /* complexity of the calling routine */
+CCM_NINLINE_LANG_MISMATCH, /* Call to <p1> not inlined because it is in */
+ /* a different language */
+CCM_NINLINE_RTN_WEAK, /* Function <p1> not inlined because it */
+ /* is marked weak */
+CCM_NINLINE_CALL_WEAKFILE, /* Call to <p1> not inlined because it is */
+ /* in a different file and it contains a */
+ /* call to a weak routine */
+CCM_NINLINE_CALL_TRYCATCH, /* Call to <p1> not inlined because it is */
+ /* in a different file and contains an */
+ /* explicit try/catch */
+CCM_NINLINE_CALL_REGP, /* Call to <p1> not inlined because it would */
+ /* cause excessive register pressure */
+CCM_NINLINE_RTN_REGP, /* Function <p1> not inlined because it would */
+ /* cause excessive register pressure */
+CCM_NINLINE_CALL_XPENSV, /* Call to <p1> not inlined because analysis */
+ /* exceeds the compilation time limit */
+CCM_NINLINE_READONLYIR, /* Function <p1> not inlined because it is in a file */
+ /* specified as read-only by -xipo_archive=readonly */
+ /* and it contains calls to static functions */
+CCM_NINLINE_CALL_THUNK, /* Call to <p1> not inlined because it is in a */
+ /* compiler-generated function that does not */
+ /* permit inlining */
+CCM_NINLINE_CALL_XTARGETS, /* Indirect callsite has too many targets; */
+ /* callsite marked do not inline */
+CCM_NINLINE_SELFTAIL_RECURSIVE, /* Function <p1> not inlined because */
+ /* of a recursive tail-call to itself */
+CCM_NINLINE_PRAGMA, /* Function <p1> not inlined because it contains */
+ /* explicit parallel or alias pragmas */
+CCM_NINLINE_CMPLX2, /* Function <p1> not inlined because it contains too */
+ /* many operations. Increase max_inst_hard in order */
+ /* to inline it: -xinline_param=max_inst_hard:n */
+CCM_NINLINE_RARE, /* Function <p1> not inlined because the call */
+ /* is rarely executed */
+CCM_NINLINE_PAR2, /* Function <p1> not inlined because it is called */
+ /* within a region guarded by an explicit */
+ /* parallel pragmas */
+CCM_NINLINE_G_LIMIT, /* Function <p1> not inlined because it would exceed */
+ /* the permitted global code size growth limit. Try */
+ /* to increase max_growth in order to inline it: */
+ /* -xinline_param=max_growth:n */
+CCM_NINLINE_L_LIMIT, /* Function <p1> not inlined because it would exceed */
+ /* the maximum function size growth limit. Increase */
+ /* max_function_inst in order to inline it: */
+ /* -xinline_param=max_function_inst:n */
+CCM_NINLINE_REC2, /* Recursive function <p1> is inlined only up to */
+ /* <i2> levels and up to <i3> size. Increase */
+ /* max_recursive_deptha or max_recursive_inst in */
+ /* order to inline it: */
+ /* -xinline_param=max_recursive_depth:n, */
+ /* -xinline_param=max_recursive_inst:n */
+CCM_NINLINE_FB2, /* Function <p1> not inlined because the */
+ /* profile-feedback execution count is too */
+ /* low. Decrease min_counter in order to inline it: */
+ /* -xinline_param:min_counter:n */
+CCM_NINLINE_CS_CMPLX, /* Function <p1> not inlined because called */
+ /* function's size is too big. Increase */
+ /* max_inst_soft in order to inline it: */
+ /* -xinline_param=max_inst_soft:n */
+CCM_NINLINE_R_EXCPT, /* Function <p1> not inlined because it contains */
+ /* an exception handler */
+CCM_NINLINE_ASM, /* Function <p1> not inlined because */
+ /* it contains asm statements */
+CCM_NINLINE_R_READONLYIR, /* Function <p1> not inlined because it is in a file */
+ /* specified as read-only by -xipo_archive=readonly */
+ /* and it is a static function */
+CCM_NINLINE_C_READONLYIR, /* Call to <p1> not inlined because the calling */
+ /* function is in a file specified as read-only */
+ /* by -xipo_archive=readonly */
+CCM_NINLINE_NEVERRETURN, /* Function <p1> not inlined because it */
+ /* never returns */
+
+ /* Group: Messages Concerning Memory Operations */
+ /* Notes: */
+ /* a. In all of these, <s1> is a string that is something like */
+ /* "A(i+5*k)" or "structure.field", giving the high-level */
+ /* construct that is being loaded or stored. */
+ /* */
+ /* b. In all of these, <x2> refers to an instruction offset, */
+ /* expressed as a 32-bit signed integer. It is assumed */
+ /* that any prefetches will be within this range of the */
+ /* load/store they are prefetching for. */
+CCM_MPREFETCH=0x08000, /* Prefetch of <s1> inserted */
+ /* [This message has a lineno for the source, */
+ /* but no instaddr for the disassembly.] */
+CCM_MPREFETCH_LD, /* Prefetch of <s1> inserted for load at <x2> */
+ /* [This message has lineno = -1, */
+ /* and is for disassembly only] */
+CCM_MPREFETCH_ST, /* Prefetch of <s1> inserted for store at <x2> */
+ /* [This message has lineno = -1, */
+ /* and is for disassembly only] */
+CCM_MPREFETCH_FB, /* Prefetch of <s1> inserted based on feedback data */
+ /* [This message has a lineno for the source, */
+ /* but no instaddr for the disassembly.] */
+CCM_MPREFETCH_FB_LD, /* Prefetch of <s1> inserted for load at <x2> based */
+ /* on feedback data */
+ /* [This message has lineno = -1, */
+ /* and is for disassembly only] */
+CCM_MPREFETCH_FB_ST, /* Prefetch of <s1> inserted for store at <x2> based */
+ /* on feedback data */
+ /* [This message has lineno = -1, */
+ /* and is for disassembly only] */
+CCM_MLOAD, /* Load below refers to <s1> */
+ /* [This message has lineno = -1, */
+ /* and is for disassembly only] */
+CCM_MSTORE, /* Store below refers to <s1> */
+ /* [This message has lineno = -1, */
+ /* and is for disassembly only] */
+CCM_MLOAD_P, /* Load below refers to <s1>, and was prefetched */
+ /* at <x2> */
+ /* [This message has lineno = -1, */
+ /* and is for disassembly only] */
+CCM_MSTORE_P, /* Store below refers to <s1>, and was prefetched */
+ /* at <x2> */
+ /* [This message has lineno = -1, */
+ /* and is for disassembly only] */
+
+ /* Group: Front-end messages [all compilers] */
+ /* Group: F95 Front-end Messages */
+CCM_COPYIN=0x10000, /* Parameter <i1> caused a copyin in the following */
+ /* call */
+CCM_COPYOUT, /* Parameter <i1> caused a copyout in the following */
+ /* call */
+CCM_COPYINOUT, /* Parameter <i1> caused both a copyin and copyout */
+ /* in the following call */
+CCM_PADDING, /* Padding of <i1> bytes inserted before */
+ /* array <v2> */
+CCM_PADCOMMON, /* Padding of <i1> bytes inserted before */
+ /* array <v2> in common block <v3> */
+CCM_ALIGN_EQ, /* Variable/array <v1> can not be double-aligned, */
+ /* because it is equivalenced */
+CCM_ALIGN_PERF, /* Alignment of variables in common block may cause */
+ /* performance degradation */
+CCM_ALIGN_STRUCT, /* Alignment of component <s1> in numeric sequence */
+ /* structure <s2> may cause performance degradation */
+CCM_TMP_COPY, /* Argument <v1> copied to a temporary */
+CCM_TMP_COPYM, /* Argument <v1> might be copied to a temporary; */
+ /* runtime decision made */
+CCM_PROC_MISMATCH, /* Argument <i1> to subprogram <p2> differs from */
+ /* reference on line <i3> */
+CCM_PROC_MISMATCH2, /* Scalar argument <i1> to subprogram <p2> is */
+ /* referred to as an array on line <i3> */
+CCM_PROC_MISMATCH3, /* Return type/rank from subprogram <p1> differs */
+ /* from return on line <i2> */
+CCM_DO_EXPR, /* DO statement bounds lead to no executions of the */
+ /* loop */
+CCM_AUTO_BND, /* The bounds for automatic variable <v1> are not */
+ /* available at all entry points; zero-length */
+ /* variable might be allocated */
+CCM_LIT_PAD, /* The character string literal <s1> padded */
+ /* to the length specified for the dummy argument */
+CCM_ARRAY_LOOP, /* Array statement below generated a loop */
+CCM_ARRAY_LOOPNEST, /* Array statement below generated <i1> nested loops */
+CCM_ALIGN_PERF2, /* Alignment of variable <v1> in common block <v2> */
+ /* may cause a performance degradation */
+CCM_ALIGN_PERF3, /* Alignment of variable <v1> in blank common may */
+ /* cause a performance degradation */
+CCM_IO_LOOP_ARRAY, /* I/O implied do item below generated an array */
+ /* section */
+
+ /* Group: C++ Front-end Messages */
+CCM_TMPCONST, /* Implicit invocation of class <s1> constructor for */
+ /* temporary */
+CCM_TMPDEST, /* Implicit invocation of class <s1> destructor for */
+ /* temporary */
+CCM_DBL_CONST, /* Double constant <s1> used in float expression */
+CCM_MINLINE, /* Function <p1> inlined from source file <s2> by */
+ /* front-end */
+ /* [This refers to front-end inlining, */
+ /* not the backend inlining above.] */
+CCM_MINLINE2, /* Function <p1> from source file <s2> inlined into */
+ /* inline copy of method <p3> by front-end */
+ /* [This refers to front-end inlining, */
+ /* not the backend inlining above.] */
+CCM_MINLINE3, /* Function <p1> not inlined because it uses keyword */
+ /* <s2> */
+CCM_MINLINE4, /* Function <p1> not inlined because it is too */
+ /* complex */
+CCM_TMP_COPYOUT, /* Argument <v1> copied from a temporary */
+CCM_TMP_COPYOUTM, /* Argument <v1> might be copied from a temporary; */
+ /* runtime decision made */
+CCM_TMP_COPYINOUT, /* Argument <v1> copied in and out of a temporary */
+CCM_TMP_COPYINOUTM, /* Argument <v1> might be copied in and out of */
+ /* a temporary; runtime decision made */
+
+ /* Group: C Front-end Messages */
+ /* Group: NJC Front-end Messages */
+ /* Group: Updated F95 Front-end Messages */
+CCM_ARRAY_LOOP_2, /* Array statement below generated loop <l1> */
+CCM_ARRAY_LOOPNEST_2, /* Array statement below generated <i1> nested */
+ /* loops: <l2>, <l3>, ... */
+ /* [The number of parameters will determine how many */
+ /* names appear, and the formatter will get the */
+ /* commas right.] */
+CCM_IO_LOOP_ARRAY_2, /* I/O implied do item below generated an array */
+ /* section: <l1> */
+CCM_USER_LOOP, /* Source loop below has tag <l1> */
+CCM_FOUND_LOOP, /* Discovered loop below has tag <l1> */
+CCM_MFUNCTION_LOOP, /* Copy in M-function of loop below has tag <l1> */
+
+ /* Group: Code-generator Messages */
+CCM_FSIMPLE=0x20000, /* Transformations for fsimple=<i1> applied */
+CCM_STACK, /* Function <p1> requires <i2> Mbytes of stack */
+ /* storage */
+CCM_TAILRECUR, /* Recursive tail call in <p1> optimized to jump to */
+ /* entry point */
+CCM_TAILCALL, /* Call to function <p1> was tail-call optimized */
+CCM_NI_EXIT_OR_PSEUDO, /* Template could not be early inlined because it */
+ /* contains the pseudo instruction <s1> */
+CCM_NI_BAD_UNARY_OPC, /* Template could not be early inlined because it */
+ /* contains the instruction opcode <s1> */
+CCM_NI_INT_LDD_ON_V9, /* Template could not be early inlined because it */
+ /* contains integer ldd instructions, which are */
+ /* deprecated in the v9 architecture */
+CCM_NI_LATE_INL_OPC, /* Template could not be early inlined because it */
+ /* contains the instruction opcode <s1> */
+CCM_NI_BAD_IMM_OP, /* Template could not be early inlined because the */
+ /* relocation or immediate operand <s1> is not well */
+ /* understood by the optimizer */
+CCM_NI_BAD_STATELEAF, /* Template could not be early inlined because it */
+ /* references the state register <s1> */
+CCM_NI_BAD_ASR_19, /* Template could not be early inlined because */
+ /* %asr19 is not supported in pre v8plus code */
+CCM_NI_BAD_FSR_USE, /* Template could not be early inlined because */
+ /* references to %fsr can only be optimized when the */
+ /* -iaopts flag is used */
+CCM_NI_BAD_REGISTER, /* Template could not be early inlined because it */
+ /* references the register <s1> */
+CCM_NI_NO_RET_VAL, /* Template could not be early inlined because it */
+ /* does not return the value declared */
+CCM_NI_DELAY, /* Template could not be early inlined because it */
+ /* contains a non nop delay slot */
+CCM_NI_SCALL, /* Template could not be early inlined because it */
+ /* calls a function which returns a structure */
+CCM_CASE_POSITION, /* Case block below was placed at position <i1> */
+ /* based on execution frequency */
+CCM_CALL_WITH_CODE, /* Call to <p1> replaced with inline code. <i2> */
+ /* loops created: <l3>, <l4>, ... */
+CCM_NI_BAD_SP_ADDR, /* Template could not be early inlined because it */
+ /* contains a %sp+reg address */
+CCM_NI_BAD_SP_USAGE, /* Template could not be early inlined because it */
+ /* uses/defines the stack pointer in a non-load/store instruction */
+CCM_NI_MIXED_REG_TYPES, /* Template could not be early inlined because it */
+ /* contains register <s1> used as both x-register and register pair */
+CCM_LAST
+} COMPMSG_ID;
+/*
+ * The Message Structure
+ * Each message is a fixed-length structure as follows:
+ */
+typedef struct
+{
+ int64_t instaddr; /* the PC offset, relative to the .o .text section */
+ int32_t lineno; /* the source line to which it refers */
+ COMPMSG_ID msg_type; /* the specific message index */
+ int32_t nparam; /* number of parameters to this message */
+ int32_t param_index; /* the index of the first parameter */
+} compmsg;
+
+#if defined(__cplusplus)
+extern "C"
+{
+#endif
+ /*
+ * Initializes the data structures, converts the source name to a string,
+ * and fills in srcname and version in the header
+ */
+ void compcom_p_open (char *srcname, int32_t version);
+
+ /*
+ * Finds or enters the string s into the string table, and returns the index
+ * of the string
+ */
+ int32_t compcom_p_string (char *s);
+
+ /*
+ * Enter the single message. Any string parameters should have been converted
+ * to int32's by calling compcom_p_string()
+ */
+ void compcom_p_putmsg (int32_t show_bits, int64_t pcoffset, int32_t lineno,
+ COMPMSG_ID m, int32_t nparams);
+
+ /*
+ * Whatever is needed to close the section and write it out to the .o
+ */
+ void compcom_p_finalize ();
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* _COMP_COM_H */
diff --git a/gprofng/src/count.cc b/gprofng/src/count.cc
new file mode 100644
index 00000000000..6005a49d5e5
--- /dev/null
+++ b/gprofng/src/count.cc
@@ -0,0 +1,237 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <ctype.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <strings.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <errno.h>
+#include <i18n.h>
+#include <Elf.h>
+#include <collctrl.h>
+#include <StringBuilder.h>
+#include "collect.h"
+
+/* get_count_data -- format exec of bit to do the real work */
+void
+collect::get_count_data ()
+{
+ char command[8192];
+ char *s;
+ struct stat statbuf;
+
+ // reserve space for original args, plus 30 arguments to bit
+ nargs = origargc + 30;
+ char **narglist = (char **) calloc (nargs, sizeof (char *));
+ arglist = narglist;
+
+ // construct the command for bit
+ snprintf (command, sizeof (command), NTXT ("%s"), run_dir);
+ s = strstr_r (command, NTXT ("/bin"));
+ if (s != NULL)
+ {
+ // build command line for launching it
+ snprintf (s, sizeof (command) - (s - command), NTXT ("/lib/compilers/bit"));
+ if (stat (command, &statbuf) == -1)
+ {
+ // if bit command does not exist there
+ char *first_look = strdup (command);
+ snprintf (command, sizeof (command), NTXT ("%s"), run_dir);
+ s = strstr (command, NTXT ("/bin"));
+ snprintf (s, sizeof (command) - (s - command), NTXT ("/prod/bin/bit"));
+ if (stat (command, &statbuf) == -1)
+ {
+ // if bit command does not exist
+ dbe_write (2, GTXT ("bit is not installed as `%s' or `%s'\nNo experiment is possible\n"), first_look, command);
+ exit (2);
+ }
+ free (first_look);
+ }
+ *arglist++ = strdup (command);
+ }
+ else
+ {
+ dbe_write (2, GTXT ("collect can't find install bin directory\n"));
+ exit (1);
+ }
+
+ // Tell it to collect data
+ *arglist++ = NTXT ("collect");
+
+ // add the flag for real-data vs. static data
+ switch (cc->get_count ())
+ {
+ case -1:
+ *arglist++ = NTXT ("-i");
+ *arglist++ = NTXT ("static");
+ *arglist++ = NTXT ("-M");
+ break;
+ case 1:
+ *arglist++ = NTXT ("-M");
+ *arglist++ = NTXT ("-u");
+ break;
+ default:
+ abort ();
+ }
+
+ // tell bit to produce an experiment
+ *arglist++ = NTXT ("-e");
+
+ // now copy an edited list of collect options to the arglist
+ char **oargv = origargv;
+
+ // skip the "collect"
+ oargv++;
+ int argc = 1;
+ while (argc != targ_index)
+ {
+ char *p = *oargv;
+ switch (p[1])
+ {
+ // pass these arguments along, with parameter
+ case 'o':
+ case 'd':
+ case 'g':
+ case 'A':
+ case 'C':
+ case 'O':
+ case 'N':
+ *arglist++ = *oargv++;
+ *arglist++ = *oargv++;
+ argc = argc + 2;
+ break;
+ case 'I':
+ *arglist++ = *oargv++; // set the -I flag
+ *arglist++ = *oargv; // and the directory name
+ *arglist++ = NTXT ("-d"); // and the -d flag
+ *arglist++ = *oargv++; // to the same directory name
+ argc = argc + 2;
+ break;
+ case 'n':
+ case 'v':
+ // pass these arguments along as is
+ *arglist++ = *oargv++;
+ argc = argc + 1;
+ break;
+ case 'x':
+ // skip one argument
+ oargv++;
+ argc++;
+ break;
+ case 'c':
+ case 'L':
+ case 'y':
+ case 'l':
+ case 'F':
+ case 'j':
+ case 'J':
+ case 'p':
+ case 's':
+ case 'h':
+ case 'S':
+ case 'm':
+ case 'M':
+ case 'H':
+ case 'r':
+ case 'i':
+ // skip two arguments
+ oargv++;
+ oargv++;
+ argc = argc + 2;
+ break;
+ case 'R':
+ case 'Z':
+ default:
+ // these should never get this far
+ dbe_write (2, GTXT ("unexpected argument %s\n"), p);
+ abort ();
+ }
+ }
+
+ // now copy the target and its arguments
+ if (access (prog_name, X_OK) != 0) // not found
+ *arglist++ = *oargv++;
+ else
+ {
+ oargv++;
+ *arglist++ = prog_name;
+ }
+ while (*oargv != NULL)
+ *arglist++ = *oargv++;
+
+ /* now we have the full argument list composed; if verbose, print it */
+ if ((verbose == 1) || (disabled))
+ {
+ /* describe the experiment */
+ char *ccret = cc->show (0);
+ if (ccret != NULL)
+ {
+ writeStr (2, ccret);
+ free (ccret);
+ }
+ ccret = cc->show_expt ();
+ if (ccret != NULL)
+ {
+ /* write this to stdout */
+ writeStr (1, ccret);
+ free (ccret);
+ }
+ /* print the arguments to bit */
+ arglist = narglist;
+ StringBuilder sb;
+ sb.append (NTXT ("Exec argv[] = "));
+ for (int ret = 0; ret < nargs; ret++)
+ {
+ if (narglist[ret] == NULL)
+ break;
+ if (ret > 0)
+ sb.append (NTXT (" "));
+ sb.append (narglist[ret]);
+ }
+ sb.append (NTXT ("\n\n"));
+ write (2, sb.toString (), sb.length ());
+ }
+
+ /* check for dry run */
+ if (disabled)
+ exit (0);
+
+ /* ensure original outputs restored for target */
+ reset_output ();
+
+ /* now exec the bit to instrument and run the target ... */
+ // (void) execve( *narglist, narglist, origenvp);
+ (void) execvp (*narglist, narglist);
+
+ /* exec failed; no experiment to delete */
+ /* restore output for collector */
+ set_output ();
+ char *em = strerror (errno);
+ if (em == NULL)
+ dbe_write (2, GTXT ("execve of %s failed: errno = %d\n"), narglist[0], errno);
+ else
+ dbe_write (2, GTXT ("execve of %s failed: %s\n"), narglist[0], em);
+ exit (1);
+}
diff --git a/gprofng/src/data_pckts.h b/gprofng/src/data_pckts.h
new file mode 100644
index 00000000000..93d0307f929
--- /dev/null
+++ b/gprofng/src/data_pckts.h
@@ -0,0 +1,595 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _DATA_PCKTS_H
+#define _DATA_PCKTS_H
+
+/*
+ * This file contains structure definitions for the binary file formats
+ * used in the experiment. It is implemented as C header file so that
+ * it can be processed by both ANSI-C and C++.
+ */
+
+#include <pthread.h>
+#include <stdint.h>
+
+#include "gp-defs.h"
+#include "gp-time.h"
+
+#if WSIZE(64)
+typedef uint64_t Vaddr_type; /* process address for 64 bit apps */
+typedef uint64_t Size_type; /* size_t for 64 bit apps */
+#else
+typedef uint32_t Vaddr_type; /* process address */
+typedef uint32_t Size_type; /* size_t for 32 bit apps */
+#endif
+
+/* marker to indicate dump of O7 register on stack (support for leaf routines) */
+#define SP_LEAF_CHECK_MARKER ((uint64_t)(-1))
+
+/* marker to indicate truncated stack */
+#define SP_TRUNC_STACK_MARKER ((uint64_t)(-2))
+
+/* marker to indicate failed stack unwind */
+#define SP_FAILED_UNWIND_MARKER ((uint64_t)(-3))
+
+#define PROFILE_BUFFER_CHUNK 16384
+
+typedef enum
+{
+ MASTER_SMPL = 0,
+ PROGRAM_SMPL,
+ PERIOD_SMPL,
+ MANUAL_SMPL
+} Smpl_type;
+
+typedef enum
+{ /* values for "profpckt kind" stored in log.xml */
+ EMPTY_PCKT = 0,
+ PROF_PCKT,
+ SYNC_PCKT,
+ HW_PCKT,
+ XHWC_PCKT,
+ HEAP_PCKT,
+ MPI_PCKT,
+ MHWC_PCKT,
+ OPROF_PCKT,
+ OMP_PCKT,
+ RACE_PCKT,
+ FRAME_PCKT,
+ OMP2_PCKT,
+ DEADLOCK_PCKT,
+ OMP3_PCKT,
+ OMP4_PCKT,
+ OMP5_PCKT,
+ UID_PCKT,
+ FRAME2_PCKT,
+ IOTRACE_PCKT,
+ LAST_PCKT, /* last data packet type */
+ CLOSED_PCKT = 65535 /* -1, this packet closes a block */
+} Pckt_type;
+
+typedef enum
+{
+ EMPTY_INFO = 0,
+ STACK_INFO,
+ JAVA_INFO,
+ OMP_INFO,
+ MPI_INFO,
+ OMP2_INFO,
+ LAST_INFO /* keep this one last */
+} Info_type;
+
+#define COMPRESSED_INFO 0x80000000
+
+#define JAVA_PCKT 0x80
+#define OMPS_PCKT 0x40 /* packet contains OMP state info */
+#define PCKT_TYPE(x) ((x) & 0x1f)
+
+typedef struct CommonHead_packet
+{
+ unsigned int tsize : 16;
+ unsigned int type : 16;
+} CommonHead_packet;
+
+// All collector modules record their packets as extensions of CM_Packet
+typedef struct CM_Packet
+{
+ unsigned int tsize : 16;
+ unsigned int type : 16;
+} CM_Packet;
+
+typedef struct Common_packet
+{
+ unsigned int tsize : 16; /* packet size */
+ unsigned int type : 16;
+ pthread_t lwp_id;
+ pthread_t thr_id;
+ uint32_t cpu_id;
+ hrtime_t tstamp;
+ uint64_t frinfo;
+} Common_packet;
+
+/* Definition of values stored in the experiment PROP_MSTATE field */
+/* They include:
+ * LWP microstates (copied from msacct.h). Also see PrUsage class.
+ * Linux's CPU time
+ * er_kernel time
+ */
+/* Can be used with LMS_STATE_STRINGS (below) */
+#define LMS_USER 0 /* running in user mode */
+#define LMS_SYSTEM 1 /* running in sys call or page fault */
+#define LMS_TRAP 2 /* running in other trap */
+#define LMS_TFAULT 3 /* asleep in user text page fault */
+#define LMS_DFAULT 4 /* asleep in user data page fault */
+#define LMS_KFAULT 5 /* asleep in kernel page fault */
+#define LMS_USER_LOCK 6 /* asleep waiting for user-mode lock */
+#define LMS_SLEEP 7 /* asleep for any other reason */
+#define LMS_WAIT_CPU 8 /* waiting for CPU (latency) */
+#define LMS_STOPPED 9 /* stopped (/proc, jobcontrol, or lwp_stop) */
+#define LMS_LINUX_CPU 10 /* LINUX timer_create(CLOCK_THREAD_CPUTIME_ID) */
+#define LMS_KERNEL_CPU 11 /* LINUX timer_create(CLOCK_THREAD_CPUTIME_ID) */
+#define LMS_NUM_STATES 12 /* total number of above states */
+#define LMS_NUM_SOLARIS_MSTATES 10 /* LMS microstates thru LMS_STOPPED */
+
+// Magic value stored in experiments that identifies which LMS states are valid
+#define LMS_MAGIC_ID_SOLARIS 10 // Solaris: LMS_USER thru LMS_STOPPED
+#define LMS_MAGIC_ID_ERKERNEL_USER 2 // er_kernel user: LMS_USER, LMS_SYSTEM
+#define LMS_MAGIC_ID_ERKERNEL_KERNEL 3 // er_kernel kernel: LMS_KERNEL_CPU
+#define LMS_MAGIC_ID_LINUX 1 // Linux: LMS_LINUX_CPU
+
+#define LMS_STATE_STRINGS \
+{ \
+ NTXT("USER"), /* LMS_USER */ \
+ NTXT("SYSTEM"), /* LMS_SYSTEM */ \
+ NTXT("TRAP"), /* LMS_TRAP */ \
+ NTXT("TFAULT"), /* LMS_TFAULT */ \
+ NTXT("DFAULT"), /* LMS_DFAULT */ \
+ NTXT("KFAULT"), /* LMS_KFAULT */ \
+ NTXT("USER_LOCK"), /* LMS_USER_LOCK */ \
+ NTXT("SLEEP"), /* LMS_SLEEP */ \
+ NTXT("WAIT_CPU"), /* LMS_WAIT_CPU */ \
+ NTXT("STOPPED"), /* LMS_STOPPED */ \
+ NTXT("LINUX_CPU"), /* LMS_LINUX_CPU */ \
+ NTXT("KERNEL_CPU") /* LMS_KERNEL_CPU */ \
+}
+#define LMS_STATE_USTRINGS \
+{ \
+ GTXT("User CPU"), /* LMS_USER */ \
+ GTXT("System CPU"), /* LMS_SYSTEM */ \
+ GTXT("Trap CPU"), /* LMS_TRAP */ \
+ GTXT("Text Page Fault"), /* LMS_TFAULT */ \
+ GTXT("Data Page Fault"), /* LMS_DFAULT */ \
+ GTXT("Kernel Page Fault"), /* LMS_KFAULT */ \
+ GTXT("User Lock"), /* LMS_USER_LOCK */ \
+ GTXT("Sleep"), /* LMS_SLEEP */ \
+ GTXT("Wait CPU"), /* LMS_WAIT_CPU */ \
+ GTXT("Stopped"), /* LMS_STOPPED */ \
+ GTXT("User+System CPU"), /* LMS_LINUX_CPU */ \
+ GTXT("Kernel CPU") /* LMS_KERNEL_CPU */ \
+}
+
+typedef enum
+{
+ MALLOC_TRACE = 0,
+ FREE_TRACE,
+ REALLOC_TRACE,
+ MMAP_TRACE,
+ MUNMAP_TRACE,
+ HEAPTYPE_LAST
+} Heap_type;
+
+#define HEAPTYPE_STATE_STRINGS \
+{ \
+ NTXT("MALLOC"), \
+ NTXT("FREE"), \
+ NTXT("REALLOC"), \
+ NTXT("MMAP"), \
+ NTXT("MUNMAP") \
+}
+#define HEAPTYPE_STATE_USTRINGS \
+{ \
+ GTXT("malloc"), \
+ GTXT("free"), \
+ GTXT("realloc"), \
+ GTXT("mmap"), \
+ GTXT("munmap") \
+}
+
+typedef enum
+{
+ ZFS_TYPE = 0,
+ NFS_TYPE,
+ UFS_TYPE,
+ UDFS_TYPE,
+ LOFS_TYPE,
+ VXFS_TYPE,
+ TMPFS_TYPE,
+ PCFS_TYPE,
+ HSFS_TYPE,
+ PROCFS_TYPE,
+ FIFOFS_TYPE,
+ SWAPFS_TYPE,
+ CACHEFS_TYPE,
+ AUTOFS_TYPE,
+ SPECFS_TYPE,
+ SOCKFS_TYPE,
+ FDFS_TYPE,
+ MNTFS_TYPE,
+ NAMEFS_TYPE,
+ OBJFS_TYPE,
+ SHAREFS_TYPE,
+ EXT2FS_TYPE,
+ EXT3FS_TYPE,
+ EXT4FS_TYPE,
+ UNKNOWNFS_TYPE,
+ FSTYPE_LAST
+} FileSystem_type;
+
+typedef enum
+{
+ READ_TRACE = 0,
+ WRITE_TRACE,
+ OPEN_TRACE,
+ CLOSE_TRACE,
+ OTHERIO_TRACE,
+ READ_TRACE_ERROR,
+ WRITE_TRACE_ERROR,
+ OPEN_TRACE_ERROR,
+ CLOSE_TRACE_ERROR,
+ OTHERIO_TRACE_ERROR,
+ IOTRACETYPE_LAST
+} IOTrace_type;
+
+#define IOTRACETYPE_STATE_STRINGS \
+{ \
+ NTXT("READ"), \
+ NTXT("WRITE"), \
+ NTXT("OPEN"), \
+ NTXT("CLOSE"), \
+ NTXT("OTHERIO"), \
+ NTXT("READERROR"), \
+ NTXT("WRITEERROR"), \
+ NTXT("OPENERROR"), \
+ NTXT("CLOSEERROR"), \
+ NTXT("OTHERIOERROR") \
+}
+#define IOTRACETYPE_STATE_USTRINGS \
+{ \
+ GTXT("Read"), \
+ GTXT("Write"), \
+ GTXT("Open"), \
+ GTXT("Close"), \
+ GTXT("Other I/O"), \
+ GTXT("Read error"), \
+ GTXT("Write error"), \
+ GTXT("Open error"), \
+ GTXT("Close error"), \
+ GTXT("Other I/O error") \
+}
+
+// the type of racing memory access with redundance flag
+typedef enum
+{
+ WRITE_RACE = 0,
+ WRITE_RACE_RED,
+ READ_RACE,
+ READ_RACE_RED,
+ RACETYPE_LAST
+} Race_type;
+
+typedef struct Frame_packet
+{
+ unsigned int tsize : 16; /* packet size */
+ unsigned int type : 16;
+ uint32_t hsize; /* header size */
+ uint64_t uid; /* unique id (experiment wide) */
+} Frame_packet;
+
+typedef struct Uid_packet
+{
+ unsigned int tsize : 16; /* packet size */
+ unsigned int type : 16;
+ uint32_t flags;
+ uint64_t uid; /* unique id (experiment wide) */
+} Uid_packet;
+
+/*
+ * Components of the variable part of Frame_packet
+ */
+typedef struct Common_info
+{
+ unsigned int hsize; /* size of this info */
+ unsigned int kind;
+ uint64_t uid; /* unique id of this info if any */
+} Common_info;
+
+typedef struct Stack_info
+{ /* Native call stack */
+ unsigned int hsize;
+ unsigned int kind;
+ uint64_t uid;
+} Stack_info;
+
+typedef struct Java_info
+{ /* Java call stack */
+ unsigned int hsize;
+ unsigned int kind;
+ uint64_t uid;
+} Java_info;
+
+typedef struct OMP_info
+{ /* OMP thread state */
+ unsigned int hsize;
+ unsigned int kind;
+ uint32_t omp_state;
+ uint32_t pad;
+} OMP_info;
+
+typedef struct OMP2_info
+{ /* OpenMP user call stack */
+ unsigned int hsize;
+ unsigned int kind;
+ uint32_t omp_state;
+ uint32_t pad;
+ uint64_t uid;
+} OMP2_info;
+
+/* OMP thread states as recorded in the experiment */
+/* Definition of values stored in the experiment PROP_OMPSTATE field */
+
+/* Can be used with OMP_THR_STATE_STRINGS (below) */
+typedef enum
+{
+ OMP_NO_STATE = 0, /* Not initialized */
+ OMP_OVHD_STATE, /* Overhead */
+ OMP_WORK_STATE, /* Useful work, excluding reduction, master, single, critical */
+ OMP_IBAR_STATE, /* In an implicit barrier */
+ OMP_EBAR_STATE, /* In an explicit barrier */
+ OMP_IDLE_STATE, /* Slave waiting */
+ OMP_SERL_STATE, /* User OMPead not in any OMP parallel region */
+ OMP_RDUC_STATE, /* Reduction */
+ OMP_LKWT_STATE, /* Waiting for lock */
+ OMP_CTWT_STATE, /* Waiting to enter critical section */
+ OMP_ODWT_STATE, /* Waiting to execute an ordered section */
+ OMP_ATWT_STATE, /* Wait for atomic */
+ OMP_TSKWT_STATE, /* Task wait */
+ OMP_LAST_STATE
+} OMP_THR_STATE;
+#define OMP_THR_STATE_STRINGS \
+{ \
+ NTXT("NO"), /* OMP_NO_STATE */ \
+ NTXT("OVHD"), /* OMP_OVHD_STATE */ \
+ NTXT("WORK"), /* OMP_WORK_STATE */ \
+ NTXT("IBAR"), /* OMP_IBAR_STATE */ \
+ NTXT("EBAR"), /* OMP_EBAR_STATE */ \
+ NTXT("IDLE"), /* OMP_IDLE_STATE */ \
+ NTXT("SERL"), /* OMP_SERL_STATE */ \
+ NTXT("RDUC"), /* OMP_RDUC_STATE */ \
+ NTXT("LKWT"), /* OMP_LKWT_STATE */ \
+ NTXT("CTWT"), /* OMP_CTWT_STATE */ \
+ NTXT("ODWT"), /* OMP_ODWT_STATE */ \
+ NTXT("ATWT"), /* OMP_ATWT_STATE */ \
+ NTXT("TSKWT") /* OMP_TSKWT_STATE */ \
+}
+#define OMP_THR_STATE_USTRINGS \
+{ \
+ GTXT("None"), /* OMP_NO_STATE */ \
+ GTXT("Overhead"), /* OMP_OVHD_STATE */ \
+ GTXT("Work"), /* OMP_WORK_STATE */ \
+ GTXT("Implicit Barrier"), /* OMP_IBAR_STATE */ \
+ GTXT("Explicit Barrier"), /* OMP_EBAR_STATE */ \
+ GTXT("Idle"), /* OMP_IDLE_STATE */ \
+ GTXT("Serial"), /* OMP_SERL_STATE */ \
+ GTXT("Reduction"), /* OMP_RDUC_STATE */ \
+ GTXT("Lock Wait"), /* OMP_LKWT_STATE */ \
+ GTXT("Critical Section Wait"), /* OMP_CTWT_STATE */ \
+ GTXT("Ordered Section Wait"), /* OMP_ODWT_STATE */ \
+ GTXT("Atomic Wait"), /* OMP_ATWT_STATE */ \
+ GTXT("Task Wait") /* OMP_TSKWT_STATE */ \
+}
+
+/* sub-packet for MPI state information */
+typedef struct MPI_info
+{ /* MPI thread state */
+ unsigned int hsize;
+ unsigned int kind;
+ uint32_t mpi_state;
+ uint32_t pad;
+} MPI_info;
+
+/* MPI thread states, as recorded in the experiment */
+typedef enum
+{
+ MPI_NO_STATE = 0, /* Not initialized */
+ MPI_USER, /* Executing user code, not in MPI */
+ MPI_PROG, /* Executing in the MPI library (progressing) */
+ MPI_WAIT /* Waiting in the MPI library */
+} MPI_THR_STATE;
+
+/*
+ * Dyntext file structure
+ */
+typedef enum
+{
+ DT_HEADER = 1,
+ DT_CODE,
+ DT_LTABLE,
+ DT_SRCFILE
+} DT_type;
+
+typedef struct DT_common
+{
+ DT_type type;
+ unsigned int size;
+} DT_common;
+
+typedef struct DT_header
+{
+ DT_type type;
+ unsigned int size;
+ hrtime_t time; /* time of loading */
+ uint64_t vaddr;
+} DT_header;
+
+typedef struct DT_code
+{
+ DT_type type;
+ unsigned int size;
+} DT_code;
+
+typedef struct DT_ltable
+{
+ DT_type type;
+ unsigned int size;
+} DT_ltable;
+
+typedef struct DT_lineno
+{
+ unsigned int offset;
+ unsigned int lineno;
+} DT_lineno;
+
+typedef struct DT_srcfile
+{
+ DT_type type;
+ unsigned int size;
+} DT_srcfile;
+
+/*
+ * Archive file structure
+ */
+#define ARCH_VERSION 0x100 /* version 1.0 */
+
+/* For compatibility with older archives append new types only */
+typedef enum
+{
+ ARCH_SEGMENT_TYPE = 1,
+ ARCH_MSG_TYPE,
+ ARCH_PLT_TYPE,
+ ARCH_MODULE_TYPE,
+ ARCH_FUNCTION_TYPE,
+ ARCH_LDINSTR_TYPE,
+ ARCH_STINSTR_TYPE,
+ ARCH_PREFETCH_TYPE,
+ ARCH_BRTARGET_TYPE,
+ ARCH_JCLASS_TYPE,
+ ARCH_JMETHOD_TYPE,
+ ARCH_JUNLOAD_TYPE,
+ ARCH_INF_TYPE,
+ ARCH_JCLASS_LOCATION_TYPE
+} ARCH_type;
+
+#define ARCH_TYPE(x,y) ((ARCH_##x##_TYPE<<8)|y)
+
+typedef struct
+{
+ unsigned int type : 16;
+ unsigned int size : 16;
+} ARCH_common;
+
+/* The maximum value that fits into ARCH_common.size */
+#define ARCH_MAX_SIZE 0xffff
+
+#define ARCH_SEGMENT ARCH_TYPE(SEGMENT, 0)
+
+typedef struct
+{
+ ARCH_common common;
+ int version;
+ uint32_t inode;
+ uint32_t textsz; /* text segment size */
+ uint32_t platform; /* sparc, intel, etc. */
+} ARCH_segment;
+
+#define ARCH_MSG ARCH_TYPE(MSG, 0)
+
+typedef struct
+{
+ ARCH_common common;
+ uint32_t errcode;
+} ARCH_message;
+
+#define ARCH_INF ARCH_TYPE(INF, 0)
+
+typedef struct
+{
+ ARCH_common common;
+} ARCH_info;
+
+#define ARCH_MODULE ARCH_TYPE(MODULE, 0)
+
+typedef struct
+{
+ ARCH_common common;
+ unsigned int lang_code;
+ unsigned int fragmented;
+} ARCH_module;
+
+#define ARCH_FUNCTION ARCH_TYPE(FUNCTION, 0)
+
+typedef struct
+{
+ ARCH_common common;
+ uint32_t offset;
+ uint32_t size;
+ uint32_t save_addr;
+} ARCH_function;
+
+#define ARCH_LDINSTR ARCH_TYPE(LDINSTR, 0)
+#define ARCH_STINSTR ARCH_TYPE(STINSTR, 0)
+#define ARCH_PREFETCH ARCH_TYPE(PREFETCH, 0)
+#define ARCH_BRTARGET ARCH_TYPE(BRTARGET, 0)
+
+typedef struct
+{
+ ARCH_common common;
+} ARCH_aninfo;
+
+#define ARCH_JCLASS_LOCATION ARCH_TYPE(JCLASS_LOCATION, 3)
+
+typedef struct
+{
+ CM_Packet comm;
+ uint32_t pad;
+ uint64_t class_id;
+} ARCH_jclass_location;
+
+#define ARCH_JCLASS ARCH_TYPE(JCLASS, 3)
+
+typedef struct
+{
+ CM_Packet comm;
+ uint32_t pad;
+ uint64_t class_id;
+ hrtime_t tstamp;
+} ARCH_jclass;
+
+#define ARCH_JMETHOD ARCH_TYPE(JMETHOD, 3)
+
+typedef struct
+{
+ CM_Packet comm;
+ uint32_t pad;
+ uint64_t class_id;
+ uint64_t method_id;
+} ARCH_jmethod;
+
+#endif /* _DATA_PCKTS_H */
diff --git a/gprofng/src/dbe_collctrl.cc b/gprofng/src/dbe_collctrl.cc
new file mode 100644
index 00000000000..9219a8e2e44
--- /dev/null
+++ b/gprofng/src/dbe_collctrl.cc
@@ -0,0 +1,28 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include "config.h"
+#include <stdio.h>
+#include <stdarg.h>
+
+#include "i18n.h"
+
+#include "collctrl.cc"
diff --git a/gprofng/src/dbe_hwc.h b/gprofng/src/dbe_hwc.h
new file mode 100644
index 00000000000..74b68389386
--- /dev/null
+++ b/gprofng/src/dbe_hwc.h
@@ -0,0 +1,38 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef dbe_hwc_h
+#define dbe_hwc_h
+
+#include <stdio.h>
+#include <stdarg.h>
+
+#include "i18n.h"
+
+#define HWC_TRACELEVEL -1
+#if HWC_TRACELEVEL < 0
+#define TprintfT(x1,...)
+#define Tprintf(x1,...)
+#else
+#define TprintfT(x1,...) if( x1<=HWC_TRACELEVEL ) fprintf(stderr,__VA_ARGS__)
+#define Tprintf(x1,...) if( x1<=HWC_TRACELEVEL ) fprintf(stderr,__VA_ARGS__)
+#endif
+
+#endif
diff --git a/gprofng/src/dbe_hwcdrv.c b/gprofng/src/dbe_hwcdrv.c
new file mode 100644
index 00000000000..a471c3ec024
--- /dev/null
+++ b/gprofng/src/dbe_hwcdrv.c
@@ -0,0 +1,23 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include "dbe_hwc.h"
+#include "hwcdrv.c"
diff --git a/gprofng/src/dbe_hwcfuncs.c b/gprofng/src/dbe_hwcfuncs.c
new file mode 100644
index 00000000000..66d371a506b
--- /dev/null
+++ b/gprofng/src/dbe_hwcfuncs.c
@@ -0,0 +1,23 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include "dbe_hwc.h"
+#include "hwcfuncs.c"
diff --git a/gprofng/src/dbe_hwctable.c b/gprofng/src/dbe_hwctable.c
new file mode 100644
index 00000000000..ce077a1cab4
--- /dev/null
+++ b/gprofng/src/dbe_hwctable.c
@@ -0,0 +1,23 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include "dbe_hwc.h"
+#include "hwctable.c"
diff --git a/gprofng/src/dbe_memmgr.c b/gprofng/src/dbe_memmgr.c
new file mode 100644
index 00000000000..2c2e2b45b9a
--- /dev/null
+++ b/gprofng/src/dbe_memmgr.c
@@ -0,0 +1,118 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <dlfcn.h>
+#include "util.h"
+
+#define CHECK_OUT_OF_MEM(ptr, size) if (ptr == NULL) err_out_of_memory(size)
+
+/* Report Out of Memory error and exit */
+static void
+err_out_of_memory (unsigned nbytes)
+{
+ char *nm = get_prog_name (1);
+ if (nm)
+ fprintf (stderr, GTXT ("%s: Error: Memory capacity exceeded.\n"), nm);
+ else
+ fprintf (stderr, GTXT ("Error: Memory capacity exceeded.\n"));
+ fprintf (stderr, GTXT (" Requested %u bytes.\n"), nbytes);
+ exit (16);
+}
+
+#define CALL_REAL(x) (__real_##x)
+#define NULL_PTR(x) ( __real_##x == NULL )
+
+static void *(*__real_malloc)(size_t) = NULL;
+static void (*__real_free)(void *) = NULL;
+static void *(*__real_realloc)(void *, size_t) = NULL;
+static void *(*__real_calloc)(size_t, size_t) = NULL;
+static char *(*__real_strdup)(const char*) = NULL;
+static volatile int in_init = 0;
+
+static int
+init_heap_intf ()
+{
+ in_init = 1;
+ __real_malloc = (void*(*)(size_t))dlsym (RTLD_NEXT, "malloc");
+ __real_free = (void(*)(void *))dlsym (RTLD_NEXT, "free");
+ __real_realloc = (void*(*)(void *, size_t))dlsym (RTLD_NEXT, "realloc");
+ __real_calloc = (void*(*)(size_t, size_t))dlsym (RTLD_NEXT, "calloc");
+ __real_strdup = (char*(*)(const char*))dlsym (RTLD_NEXT, "strdup");
+ in_init = 0;
+ return 0;
+}
+
+/* --------------------------------------------------------------------------- */
+/* libc's memory management functions substitutions */
+
+/* Allocate memory and make sure we got some */
+void *
+malloc (size_t size)
+{
+ if (NULL_PTR (malloc))
+ init_heap_intf ();
+ void *ptr = CALL_REAL (malloc)(size);
+ CHECK_OUT_OF_MEM (ptr, size);
+ return ptr;
+}
+
+
+/* Implement a workaround for a libdl recursion problem */
+void *
+calloc (size_t nelem, size_t size)
+{
+ if (NULL_PTR (calloc))
+ {
+ /* If a program is linked with libpthread then the following
+ * calling sequence occurs:
+ * init_heap_intf -> dlsym -> calloc -> malloc -> init_heap_intf
+ * We break some performance improvement in libdl by returning
+ * NULL but preserve functionality.
+ */
+ if (in_init)
+ return NULL;
+ init_heap_intf ();
+ }
+ return CALL_REAL (calloc)(nelem, size);
+}
+
+/* Free the storage associated with data */
+void
+free (void *ptr)
+{
+ if (ptr == NULL)
+ return;
+ if (NULL_PTR (free))
+ init_heap_intf ();
+ CALL_REAL (free)(ptr);
+ return;
+}
+
+/* Reallocate buffer */
+void *
+realloc (void *ptr, size_t size)
+{
+ if (NULL_PTR (realloc))
+ init_heap_intf ();
+ ptr = CALL_REAL (realloc)(ptr, size);
+ CHECK_OUT_OF_MEM (ptr, size);
+ return ptr;
+}
diff --git a/gprofng/src/dbe_structs.h b/gprofng/src/dbe_structs.h
new file mode 100644
index 00000000000..e6eaed60536
--- /dev/null
+++ b/gprofng/src/dbe_structs.h
@@ -0,0 +1,219 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _DBE_STRUCTS_H
+#define _DBE_STRUCTS_H
+
+#include "dbe_types.h"
+#include "enums.h"
+
+typedef enum
+{
+ Sp_lang_unknown = 0,
+ Sp_lang_asm = 1,
+ Sp_lang_c = 2,
+ Sp_lang_ansic = 3,
+ Sp_lang_cplusplus = 4,
+ Sp_lang_fortran = 5,
+ Sp_lang_pascal = 6,
+ Sp_lang_fortran90 = 7,
+ Sp_lang_java = 8,
+ Sp_lang_c99 = 9,
+ Sp_lang_gcc = 16,
+ Sp_lang_KAI_KPTS = 32,
+ Sp_lang_KAI_KCC = 33,
+ Sp_lang_KAI_Kcc = 34
+} Sp_lang_code;
+
+struct Value
+{
+ union
+ {
+ short s;
+ int i;
+ float f;
+ double d;
+ timestruc_t t;
+ char *l; // Label
+ unsigned long long ll; // address
+ };
+};
+
+// sync enum changes with both AnMetric.java and AnVariable.java
+enum ValueTag
+{
+ VT_SHORT = 1,
+ VT_INT,
+ VT_LLONG,
+ VT_FLOAT,
+ VT_DOUBLE,
+ VT_HRTIME,
+ VT_LABEL,
+ VT_ADDRESS,
+ VT_OFFSET,
+ VT_ULLONG
+};
+
+// Tagged numeric value
+struct TValue
+{
+ ValueTag tag;
+ bool sign; // The print result will always begin with a sign (+ or -).
+ union
+ {
+ short s;
+ int i;
+ float f;
+ double d;
+ char *l;
+ void *p;
+ long long ll;
+ unsigned long long ull;
+ };
+ double to_double ();
+ int to_int ();
+ char *to_str (char *str, size_t strsz);
+ size_t get_len ();
+ void make_delta (TValue *v1, TValue *v2);
+ void make_ratio (TValue *v1, TValue *v2);
+ int compare (TValue *v);
+};
+
+// XXX MAX_HWCOUNT may need to be managed dynamically, not #defined
+#define MAX_HWCOUNT 64
+
+// Experiment collection parameters
+struct Collection_params
+{
+ int profile_mode; // if clock-profiling is on
+ long long ptimer_usec; // Clock profile timer interval (microseconds)
+ int lms_magic_id; // identifies which LMS_* states are live
+ int sync_mode; // if synctrace is on
+ int sync_threshold; // value of synctrace threshold, in microseconds
+ int sync_scope; // value of synctrace scope: Java and/or native
+
+ int heap_mode; // if heaptrace is on
+ int io_mode; // if iotrace is on
+ int race_mode; // if race-detection is on
+ int race_stack; // setting for stack data collection
+ int deadlock_mode; // if deadlock-detection is on
+ int omp_mode; // if omptrace is on
+
+ int hw_mode; // if hw-counter profiling is on
+ int xhw_mode; // if extended (true-PC) HW counter profiling for any counter
+
+ char *hw_aux_name[MAX_HWCOUNT];
+ char *hw_username[MAX_HWCOUNT];
+ int hw_interval[MAX_HWCOUNT]; // nominal interval for count
+ int hw_tpc[MAX_HWCOUNT]; // non-zero, if aggressive TPC/VA requested
+ int hw_metric_tag[MAX_HWCOUNT]; // tag as used for finding metrics
+ int hw_cpu_ver[MAX_HWCOUNT]; // Chip version number for this metric
+
+ int sample_periodic; // if periodic sampling is on
+ int sample_timer; // Sample timer (sec)
+ int limit; // experiment size limit
+ const char *pause_sig; // Pause/resume signal string
+ const char *sample_sig; // Sampling signal string
+ const char *start_delay; // Data collect start delay string
+ const char *terminate; // Data collection termination time string
+ char *linetrace;
+};
+
+const hrtime_t ZERO_TIME = (hrtime_t) 0;
+const hrtime_t MAX_TIME = (hrtime_t) 0x7fffffffffffffffLL;
+
+#define PCInvlFlag ((int) 0x8LL)
+#define PCLineFlag ((int) 0x4LL)
+#define PCTrgtFlag ((int) 0x2LL)
+#define MAKE_ADDRESS(idx, off) (((unsigned long long)(idx)<<32) | off)
+#define ADDRESS_SEG(x) ((unsigned int)(((x)>>32) & 0xffffffff))
+#define ADDRESS_OFF(x) ((unsigned int)((x) & 0xffffffff))
+
+//
+// Analyzer info
+#define AnalyzerInfoVersion 2
+
+typedef struct
+{
+ uint64_t text_labelref;
+ int32_t entries;
+ uint32_t version;
+} AnalyzerInfoHdr; // => header from .__analyzer_info
+
+typedef struct
+{
+ uint32_t offset; // offset relative to text_labelref
+ uint32_t id; // profiled instruction identifier
+ uint32_t signature; // signature of profiled instruction
+ uint32_t datatype_id; // referenced datatype identifier
+} memop_info_t; // => used for table_type=0,1,2
+
+typedef struct
+{
+ uint32_t offset; // offset relative to text_labelref
+} target_info_t; // => used for table_type=3
+
+typedef struct
+{
+ uint32_t type;
+ uint32_t offset;
+ union
+ {
+ memop_info_t *memop;
+ target_info_t *target;
+ };
+} inst_info_t;
+
+class DataObject;
+
+typedef struct
+{
+ uint32_t datatype_id; // datatype identifier (local)
+ uint32_t memop_refs; // count of referencing memops
+ uint32_t event_data; // count of event data
+ DataObject *dobj; // corresponding dataobject (unique)
+} datatype_t;
+
+typedef struct
+{
+ uint32_t offset; // entry offset in compilation unit
+ uint32_t extent; // sibling offset
+ void *parent; // container symbol
+ void *object; // resolved object
+} symbol_t;
+
+typedef struct
+{
+ char *old_prefix;
+ char *new_prefix;
+} pathmap_t;
+
+typedef struct
+{
+ char *libname;
+ enum LibExpand expand;
+} lo_expand_t;
+
+typedef struct
+{
+ int index1;
+ int index2;
+} int_pair_t;
+#endif /* _DBE_STRUCTS_H */
diff --git a/gprofng/src/dbe_types.h b/gprofng/src/dbe_types.h
new file mode 100644
index 00000000000..79fd6c7f565
--- /dev/null
+++ b/gprofng/src/dbe_types.h
@@ -0,0 +1,62 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _DBE_TYPES_H
+#define _DBE_TYPES_H
+
+#include <stdint.h>
+#include "gp-time.h"
+
+typedef unsigned long long Size; /* object sizes in 64 bit apps */
+typedef unsigned long long Vaddr; /* process address for 64 bit apps */
+
+typedef unsigned long long ull_t;
+typedef long long ll_t;
+typedef unsigned long ul_t;
+
+// Note: these values are stored in archive files; changing them
+// may cause old archives to become incompatible.
+enum Platform_t
+{
+ Unknown = 0,
+ Sparc,
+ Sparcv9,
+ Intel,
+ Sparcv8plus,
+ Java,
+ Amd64,
+ Aarch64
+};
+
+enum WSize_t
+{
+ Wnone,
+ W32,
+ W64
+};
+
+enum VMode
+{
+ VMODE_MACHINE = 0,
+ VMODE_USER,
+ VMODE_EXPERT
+};
+
+#endif /* _DBE_TYPES_H */
diff --git a/gprofng/src/debug.h b/gprofng/src/debug.h
new file mode 100644
index 00000000000..9761f2a41eb
--- /dev/null
+++ b/gprofng/src/debug.h
@@ -0,0 +1,89 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _PERFAN_DEBUG_H
+#define _PERFAN_DEBUG_H
+
+extern unsigned int mpmt_debug_opt;
+// To set mpmt_debug_opt use:
+// MPMT_DEBUG=4095 ; export MPMT_DEBUG
+#define DEBUG_FLAG (mpmt_debug_opt & 1)
+#define DUMP_ELF_SEC (mpmt_debug_opt & 2)
+#define DUMP_ELF_SYM (mpmt_debug_opt & 4)
+#define DUMP_RELA_SEC (mpmt_debug_opt & 8)
+#define DUMP_ELF_RELOC DUMP_RELA_SEC
+#define DUMP_DWARFLIB (mpmt_debug_opt & 16)
+#define DUMP_DWR_LINE_REGS (mpmt_debug_opt & 32)
+#define DUMP_USER_LABELS (mpmt_debug_opt & 64)
+#define DEBUG_MAPS (mpmt_debug_opt & 128)
+#define DEBUG_DBE_FILE (mpmt_debug_opt & 256)
+#define DEBUG_DATA_WINDOW (mpmt_debug_opt & 512)
+#define DEBUG_STABS (mpmt_debug_opt & 1024)
+#define DEBUG_DATAOBJ (mpmt_debug_opt & 2048)
+#define DEBUG_LOADOBJ (mpmt_debug_opt & 4096)
+#define DEBUG_SAXPARSER (mpmt_debug_opt & 8192)
+#define DUMP_JAVA_CLASS (mpmt_debug_opt & 16384)
+#define DEBUG_COMPARISON (mpmt_debug_opt & 32768)
+#define DEBUG_READ_AR (mpmt_debug_opt & 65536)
+#define DEBUG_ERR_MSG (mpmt_debug_opt & 131072)
+#define DUMP_JCLASS_READER (mpmt_debug_opt & 262144)
+#define DEBUG_DBE (mpmt_debug_opt & 524288)
+#define DEBUG_ARCHIVE (mpmt_debug_opt & 1048576)
+#define DEBUG_IO (mpmt_debug_opt & 2097152)
+#define DUMP_DYN_FILE (mpmt_debug_opt & 4194304)
+#define DUMP_JAR_FILE (mpmt_debug_opt & 8388608)
+#define DUMP_CALL_STACK (mpmt_debug_opt & 16777216)
+#define DEBUG_THREADS (mpmt_debug_opt & 33554432)
+#define DBE_USE_MMAP (mpmt_debug_opt & 67108864)
+
+#ifdef DEBUG
+
+// Turn on assertion checking whenever debugging
+#define ASSERTS 1
+
+// debug macro - provides a clean way of inserting debugging code without
+// having the distracting #ifdef DEBUG ... #else ... #endif directives
+// interspersed throughout the code. It also provides an easy way
+// to turn them off with no loss of efficiency. It is not limited
+// to printf() commands; any code may be inserted. Variables
+// needed only by the debugging code can be declared inside a
+// debug { ... } statement.
+//
+// usage:
+// debug <statement>
+// or, debug { <statements> }
+// If DEBUG is on, map "DEBUG_CODE" to nothing!
+// This results in the <statement> being executed normally
+
+#define DEBUG_CODE
+
+#else
+// If DEBUG is off, map "DEBUG_CODE" to something harmless.
+// The clever hack used here is to use a conditional with a
+// constant condition, which is optimized out by the compiler,
+// so that <statement> is not present in the compiled code!
+
+#define DEBUG_CODE if (0)
+
+#endif /*DEBUG*/
+
+#define Dprintf(x, ...) DEBUG_CODE if(x) fprintf(stderr, __VA_ARGS__)
+
+#endif /* ! _DEBUG_H */
diff --git a/gprofng/src/enums.h b/gprofng/src/enums.h
new file mode 100644
index 00000000000..a2c95001e8d
--- /dev/null
+++ b/gprofng/src/enums.h
@@ -0,0 +1,195 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _PERFAN_ENUMS_H
+#define _PERFAN_ENUMS_H
+
+#include "comp_com.h"
+
+enum Cmd_status
+{
+ CMD_OK = 0,
+ CMD_BAD,
+ CMD_AMBIGUOUS,
+ CMD_BAD_ARG,
+ CMD_OUTRANGE,
+ CMD_INVALID
+};
+
+enum LibExpand
+{
+ LIBEX_SHOW = 0,
+ LIBEX_HIDE = 1,
+ LIBEX_API = 2
+};
+
+enum SrcVisible
+{
+ SRC_NA = 0,
+ SRC_CODE = 1,
+ SRC_METRIC = 2
+};
+
+enum MetricType
+{ // sync enum changes with Settings.java
+ MET_NORMAL = 0, // functions, lines, pcs; src & disasm (non-compare)
+ MET_CALL, // callers-callees
+ MET_DATA, // dataspace
+ MET_INDX, // index objects
+ MET_CALL_AGR, // call tree
+ MET_COMMON, // Analyzer uses for DSP_DISASM, DSP_SOURCE, ...
+ MET_IO, // IO activity
+ MET_SRCDIS, // src & disasm (non comparison mode)
+ MET_HEAP // Heap leaked list
+};
+
+enum ValueType
+{ // Bitmask (!) sync enum changes with AnMetric.java
+ VAL_NA = 0, // nothing specified (use this enum instead of 0)
+ VAL_TIMEVAL = 1,
+ VAL_VALUE = 2,
+ VAL_PERCENT = 4,
+ VAL_DELTA = 8,
+ VAL_RATIO = 16,
+ VAL_INTERNAL = 32,
+ VAL_HIDE_ALL = 64 // hide all, but allows settings to be remembered
+};
+
+enum CompCom
+{ // no value here can be the same as CCMV_
+ COMP_SRC = CCMV_BASIC + 1,
+ COMP_SRC_METRIC,
+ COMP_NOSRC,
+ COMP_HEX,
+ COMP_NOHEX,
+ COMP_THRESHOLD,
+ COMP_CMPLINE,
+ COMP_FUNCLINE
+};
+
+enum TLStack_align
+{
+ TLSTACK_ALIGN_ROOT = 1,
+ TLSTACK_ALIGN_LEAF
+};
+
+enum Reorder_status
+{
+ REORDER_SUCCESS,
+ REORDER_FAIL,
+ REORDER_ZERO,
+ REORDER_ONE_FUNC,
+ REORDER_FILE_OPEN,
+ REORDER_FILE_WRITE,
+ REORDER_COMP,
+ REORDER_NO_LOAD_OBJ,
+ REORDER_NO_OBJECT,
+ REORDER_INVALID
+};
+
+enum AnUtility_state
+{
+ EXP_SUCCESS = 0,
+ EXP_FAILURE = 1,
+ EXP_INCOMPLETE = 2,
+ EXP_BROKEN = 4,
+ EXP_OBSOLETE = 8
+};
+
+enum Presentation_align_type
+{
+ TEXT_LEFT = 1,
+ TEXT_CENTER = 2,
+ TEXT_RIGHT = 3
+};
+
+enum Message_type
+{
+ ERROR_MSG = 1,
+ WARNING_MSG = 2,
+ PSTAT_MSG = 3,
+ PWARN_MSG = 4
+};
+
+enum Presentation_clock_unit
+{
+ CUNIT_NULL = -1,
+ CUNIT_BYTES = -2,
+ CUNIT_TIME = -3
+};
+
+enum FuncListDisp_type
+{
+ DSP_FUNCTION = 1,
+ DSP_LINE = 2,
+ DSP_PC = 3,
+ DSP_SOURCE = 4,
+ DSP_DISASM = 5,
+ DSP_SELF = 6, // not a tab; ID for Callers-Callees fragment data
+ DSP_CALLER = 7,
+ DSP_CALLEE = 8, // not a tab; ID for Callers-Callees callees data
+ DSP_CALLTREE = 9,
+ DSP_TIMELINE = 10,
+ DSP_STATIS = 11,
+ DSP_EXP = 12,
+ DSP_LEAKLIST = 13,
+ DSP_MEMOBJ = 14, // requires a specific subtype to define a tab
+ DSP_DATAOBJ = 15,
+ DSP_DLAYOUT = 16,
+ DSP_SRC_FILE = 17, // not a tab; Details information (?)
+ DSP_IFREQ = 18,
+ DSP_RACES = 19,
+ DSP_INDXOBJ = 20, // requires a specific subtype to define a tab
+ DSP_DUALSOURCE = 21,
+ DSP_SOURCE_DISASM = 22,
+ DSP_DEADLOCKS = 23,
+ DSP_MPI_TL = 24,
+ DSP_MPI_CHART = 25,
+ //DSP_TIMELINE_CLASSIC_TBR = 26,
+ DSP_SOURCE_V2 = 27, // comparison
+ DSP_DISASM_V2 = 28, // comparison
+ //DSP_THREADS_TL = 29;
+ //DSP_THREADS_CHART = 30;
+ DSP_IOACTIVITY = 31,
+ DSP_OVERVIEW = 32,
+ DSP_IOVFD = 33,
+ DSP_IOCALLSTACK = 34,
+ DSP_MINICALLER = 37,
+ DSP_HEAPCALLSTACK = 39,
+ DSP_CALLFLAME = 40,
+ DSP_SAMPLE = 99
+};
+
+enum CmpMode
+{
+ CMP_DISABLE = 0,
+ CMP_ENABLE = 1,
+ CMP_RATIO = 2,
+ CMP_DELTA = 4
+};
+
+enum PrintMode
+{
+ PM_TEXT = 0,
+ PM_HTML = 1,
+ PM_DELIM_SEP_LIST = 2
+};
+
+#endif // _ENUMS_H
diff --git a/gprofng/src/envsets.cc b/gprofng/src/envsets.cc
new file mode 100644
index 00000000000..484cbf83995
--- /dev/null
+++ b/gprofng/src/envsets.cc
@@ -0,0 +1,420 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <assert.h>
+#include <ctype.h>
+#include <sys/param.h>
+#include <unistd.h>
+
+#include "gp-defs.h"
+#include "util.h"
+#include "collctrl.h"
+#include "collect.h"
+#include "StringBuilder.h"
+#include "Settings.h"
+
+#define STDEBUFSIZE 24000
+
+#define LIBGP_COLLECTOR "libgp-collector.so"
+#define GPROFNG_PRELOAD_LIBDIRS "GPROFNG_PRELOAD_LIBDIRS"
+#define SP_COLLECTOR_EXPNAME "SP_COLLECTOR_EXPNAME"
+#define SP_COLLECTOR_FOLLOW_SPEC "SP_COLLECTOR_FOLLOW_SPEC"
+#define SP_COLLECTOR_PARAMS "SP_COLLECTOR_PARAMS"
+#define SP_COLLECTOR_FOUNDER "SP_COLLECTOR_FOUNDER"
+#define SP_COLLECTOR_ORIGIN_COLLECT "SP_COLLECTOR_ORIGIN_COLLECT"
+
+static const char *LD_AUDIT[] = {
+ // "LD_AUDIT", Do not set LD_AUDIT on Linux
+ NULL
+};
+
+static const char *LD_PRELOAD[] = {
+ "LD_PRELOAD",
+ NULL
+};
+
+static const char *SP_PRELOAD[] = {
+ "SP_COLLECTOR_PRELOAD",
+ NULL
+};
+
+static const char *LD_LIBRARY_PATH[] = {
+ "LD_LIBRARY_PATH",
+ NULL,
+};
+
+static int
+add_env (char *ev)
+{
+ int r = putenv (ev);
+ if (r != 0)
+ {
+ dbe_write (2, GTXT ("Can't putenv of %s: run aborted\n"), ev);
+ free (ev);
+ }
+ return r;
+}
+
+int
+collect::putenv_libcollector_ld_audits ()
+{
+ StringBuilder sb;
+ for (unsigned int ii = 0; ii < ARR_SIZE (LD_AUDIT) && LD_AUDIT[ii]; ++ii)
+ {
+ sb.sprintf ("%s=%s", LD_AUDIT[ii], SP_LIBAUDIT_NAME);
+ // Append the current value. Check if already set
+ char *old_val = getenv (LD_AUDIT[ii]);
+ if (old_val != NULL)
+ {
+ while (isspace (*old_val))
+ ++old_val;
+ if (*old_val != (char) 0)
+ {
+ int fromIdx = sb.length ();
+ sb.append (" ");
+ sb.append (old_val);
+ if (sb.indexOf (SP_LIBAUDIT_NAME, fromIdx) >= 0)
+ continue; // Already set. Do nothing.
+ }
+ }
+ if (add_env (sb.toString ()))
+ return 1;
+ }
+ return 0;
+}
+
+int
+collect::putenv_libcollector_ld_preloads ()
+{
+ // for those data types that get extra libs LD_PRELOAD'd, add them
+ if (cc->get_synctrace_mode () != 0)
+ add_ld_preload ("libgp-sync.so");
+ if (cc->get_heaptrace_mode () != 0)
+ add_ld_preload ("libgp-heap.so");
+ if (cc->get_iotrace_mode () != 0)
+ add_ld_preload ("libgp-iotrace.so");
+ add_ld_preload (SP_LIBCOLLECTOR_NAME);
+
+ // --- putenv SP_COLLECTOR_PRELOAD*
+ int ii;
+ for (ii = 0; SP_PRELOAD[ii]; ii++)
+ {
+ // construct the SP_PRELOAD_* environment variables
+ // and put them into the environment
+ if (add_env (dbe_sprintf ("%s=%s", SP_PRELOAD[ii], sp_preload_list[ii])))
+ return 1;
+ }
+ // --- putenv LD_PRELOADS
+ /* purge LD_PRELOAD* of values containing contents of SP_LIBCOLLECTOR_NAME */
+ if (putenv_purged_ld_preloads (SP_LIBCOLLECTOR_NAME))
+ dbe_write (2, GTXT ("Warning: %s is already defined in one or more LD_PRELOAD environment variables\n"),
+ SP_LIBCOLLECTOR_NAME);
+ if (putenv_ld_preloads ())
+ return 1;
+ return 0;
+}
+
+int
+collect::putenv_libcollector_ld_misc ()
+{
+#if 0 // XXX 1 turns on LD_DEBUG
+ putenv (strdup ("LD_DEBUG=audit,bindings,detail"));
+#endif
+ // workaround to have the dynamic linker use absolute names
+ if (add_env (dbe_strdup ("LD_ORIGIN=yes")))
+ return 1;
+
+ // On Linux we have to provide SP_COLLECTOR_LIBRARY_PATH and LD_LIBRARY_PATH
+ // so that -agentlib:gp-collector works
+ // and so that collect -F works with 32/64-bit mix of processes
+
+ // Set GPROFNG_PRELOAD_LIBDIRS
+ char *ev = getenv (GPROFNG_PRELOAD_LIBDIRS);
+ char *libpath_list = NULL;
+ if (ev == NULL && settings->preload_libdirs == NULL)
+ {
+ settings->read_rc (false);
+ ev = settings->preload_libdirs;
+ }
+ ev = dbe_strdup (ev);
+ StringBuilder sb;
+ sb.appendf ("%s=", "SP_COLLECTOR_LIBRARY_PATH");
+ int len = sb.length ();
+ int cnt = 0;
+ for (char *s = ev; s;)
+ {
+ char *s1 = strchr (s, ':');
+ if (s1)
+ *(s1++) = 0;
+ char *fname;
+ if (*s == '/')
+ {
+ fname = dbe_sprintf ("%s/%s/%s", s, PACKAGE, LIBGP_COLLECTOR);
+ if (access (fname, R_OK | F_OK) == 0)
+ {
+ if (++cnt != 1)
+ sb.append (':');
+ sb.appendf ("%s", s);
+ }
+ }
+ else
+ {
+ fname = dbe_sprintf ("%s/%s/%s/%s", run_dir, s, PACKAGE, LIBGP_COLLECTOR);
+ if (access (fname, R_OK | F_OK) == 0)
+ {
+ if (++cnt != 1)
+ sb.append (':');
+ sb.appendf ("%s/%s/%s", run_dir, s, PACKAGE);
+ }
+ }
+ free (fname);
+ s = s1;
+ }
+ free (ev);
+ if (cnt == 0)
+ {
+ dbe_write (2, GTXT ("configuration error: can not find %s. run aborted\n"),
+ LIBGP_COLLECTOR);
+ return 1;
+ }
+ libpath_list = sb.toString ();
+ if (add_env (libpath_list))
+ return 1;
+ libpath_list += len;
+
+ // --- set LD_LIBRARY_PATH using libpath_list
+ char *old = getenv (LD_LIBRARY_PATH[0]);
+ if (old)
+ ev = dbe_sprintf ("%s=%s:%s", LD_LIBRARY_PATH[0], libpath_list, old);
+ else
+ ev = dbe_sprintf ("%s=%s", LD_LIBRARY_PATH[0], libpath_list);
+ if (add_env (ev))
+ return 1;
+ return 0;
+}
+
+void
+collect::add_ld_preload (const char *lib)
+{
+ for (int ii = 0; SP_PRELOAD[ii]; ii++)
+ {
+ char *old_sp = sp_preload_list[ii];
+ if (old_sp == NULL)
+ sp_preload_list[ii] = strdup (lib);
+ else
+ {
+ sp_preload_list[ii] = dbe_sprintf ("%s %s", old_sp, lib);
+ free (old_sp);
+ }
+ }
+}
+
+int
+collect::putenv_memso ()
+{
+ // Set environment variable "MEM_USE_LOG" to 1, to keep it out of stderr
+ if (add_env (dbe_strdup ("MEM_USE_LOG=1")))
+ return 1;
+ // Set environment variable "MEM_ABORT_ON_ERROR", to force a core dump
+ if (add_env (dbe_strdup ("MEM_ABORT_ON_ERROR=1")))
+ return 1;
+ add_ld_preload ("mem.so");
+ return putenv_ld_preloads ();
+}
+
+// set LD_PRELOAD and friends to prepend the given library or libraries
+
+int
+collect::putenv_ld_preloads ()
+{
+ for (int ii = 0; LD_PRELOAD[ii]; ii++)
+ {
+ char *old_val = getenv (LD_PRELOAD[ii]);
+ int sp_num = ii;
+ assert (SP_PRELOAD[sp_num]);
+ char *preload_def;
+ if (old_val)
+ preload_def = dbe_sprintf ("%s=%s %s", LD_PRELOAD[ii], sp_preload_list[sp_num], old_val);
+ else
+ preload_def = dbe_sprintf ("%s=%s", LD_PRELOAD[ii], sp_preload_list[sp_num]);
+ if (add_env (preload_def))
+ return 1;
+ }
+ return 0;
+}
+
+/* copied from linetrace.c */
+/*
+ function: env_strip()
+ Finds str in env; Removes
+ all characters from previous ':' or ' '
+ up to and including any trailing ':' or ' '.
+ params:
+ env: environment variable
+ str: substring to find
+ return: count of instances removed from env
+ */
+int
+collect::env_strip (char *env, const char *str)
+{
+ int removed = 0;
+ char *p, *q;
+ if (env == NULL || str == NULL || *str == 0)
+ return 0;
+ size_t maxlen = strlen (env);
+ size_t len = strlen (str);
+ q = env;
+ while ((p = strstr (q, str)) != NULL)
+ {
+ q = p;
+ p += len;
+ if (*p)
+ {
+ while ((*p) && (*p != ':') && (*p != ' '))
+ p++; /* skip the rest of the name*/
+ while ((*p == ':') || (*p == ' '))
+ p++; /* strip trailing separator */
+ }
+ while (*q != ':' && *q != ' ' && *q != '=' && q != env)
+ q--; /* strip path */
+ if (*p)
+ { /* copy the rest of the string */
+ if (q != env)
+ q++; /* restore leading separator (if any) */
+ size_t n = (maxlen - (q - env));
+ strncpy (q, p, n);
+ }
+ else
+ *q = 0;
+ removed++;
+ }
+ return removed;
+}
+/*
+ function: putenv_purged_ld_preloads()
+ Remove selected preload strings from all LD_PRELOAD* env vars.
+ params:
+ var: executable name (leading characters don't have to match)
+ return: number of instances removed from all PRELOAD vars.
+ */
+int
+collect::putenv_purged_ld_preloads (const char *var)
+{
+ int total_removed = 0;
+ if (!var || *var == 0)
+ return 0;
+ for (int ii = 0; LD_PRELOAD[ii]; ii++)
+ {
+ char *ev = getenv (LD_PRELOAD[ii]);
+ int removed = 0;
+ if (!ev)
+ continue;
+ removed = env_strip (ev, var);
+ if (!removed)
+ continue;
+ if (putenv (ev) != 0)
+ dbe_write (2, GTXT ("Can't putenv of %s\n"), ev);
+ total_removed += removed;
+ }
+ return total_removed;
+}
+/*
+ function: putenv_append()
+ append string to current enviroment variable setting and then do a putenv()
+ params:
+ var: environment variable name
+ val: string to append
+ */
+int
+collect::putenv_append (const char *var, const char *val)
+{
+ char *ev;
+ if (!var || !val)
+ return 1;
+ const char *old_val = getenv (var);
+ if (old_val == NULL || *old_val == 0)
+ ev = dbe_sprintf ("%s=%s", var, val);
+ else
+ ev = dbe_sprintf ("%s=%s %s", var, old_val, val);
+
+ // now put the new variable into the environment
+ if (add_env (ev))
+ return 1;
+ return 0;
+}
+
+int
+collect::putenv_libcollector (void)
+{
+ char buf[MAXPATHLEN + 1];
+ // --- set SP_COLLECTOR_EXPNAME
+ // fetch the experiment name and CWD
+ char *exp = cc->get_experiment ();
+ char *cwd = getcwd (buf, MAXPATHLEN);
+ char *ev;
+
+ // format the environment variable for the experiment directory name
+ if (cwd != NULL && exp[0] != '/') // experiment is a relative path
+ ev = dbe_sprintf ("%s=%s/%s", SP_COLLECTOR_EXPNAME, cwd, exp);
+ else // getcwd failed or experiment is a fullpath
+ ev = dbe_sprintf ("%s=%s", SP_COLLECTOR_EXPNAME, exp);
+
+ // set the experiment directory name
+ if (add_env (ev))
+ return 1;
+
+ // --- set SP_COLLECTOR_PARAMS
+ // set the data descriptor
+ exp = cc->get_data_desc ();
+ if (add_env (dbe_sprintf ("%s=%s", SP_COLLECTOR_PARAMS, exp)))
+ return 1;
+
+ // --- set SP_COLLECTOR_FOLLOW_SPEC
+ const char *follow_spec = cc->get_follow_cmp_spec ();
+ if (follow_spec)
+ // selective following has been enabled
+ if (add_env (dbe_sprintf ("%s=%s", SP_COLLECTOR_FOLLOW_SPEC, follow_spec)))
+ return 1;
+
+ if (add_env (dbe_sprintf ("%s=%d", SP_COLLECTOR_FOUNDER, getpid ())))
+ return 1;
+ if (add_env (dbe_sprintf ("%s=1", SP_COLLECTOR_ORIGIN_COLLECT)))
+ return 1;
+
+ // --- set LD_*
+ if (putenv_libcollector_ld_misc ())
+ return 1;
+
+ // --- set LD_PRELOAD*
+ if (putenv_libcollector_ld_preloads () != 0)
+ return 1;
+
+ // --- set JAVA_TOOL_OPTIONS
+ if (cc->get_java_mode () == 1)
+ if (putenv_append ("JAVA_TOOL_OPTIONS", "-agentlib:gp-collector"))
+ exit (1);
+#if 0
+ // --- set LD_AUDIT*
+ if (putenv_libcollector_ld_audits () != 0)
+ return 1;
+#endif
+ return 0;
+}
diff --git a/gprofng/src/gethrtime.c b/gprofng/src/gethrtime.c
new file mode 100644
index 00000000000..9e17f1eaa11
--- /dev/null
+++ b/gprofng/src/gethrtime.c
@@ -0,0 +1,170 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <time.h>
+#include <unistd.h>
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/resource.h>
+
+#include "gp-defs.h"
+#include "gp-time.h"
+
+/* =============================================================== */
+/*
+ * Below this are the get_clock_rate() and get_ncpus() for all architectures
+ */
+
+static int clock_rate = 0;
+static int ncpus = 0;
+static char msgbuf[1024];
+
+int
+get_clock_rate (void)
+{
+ /* Linux version -- read /proc/cpuinfo
+ * Note the parsing is different on intel-Linux and sparc-Linux
+ */
+ FILE *fp = fopen ("/proc/cpuinfo", "r");
+ if (fp != NULL)
+ {
+
+ char temp[1024];
+ while (fgets (temp, sizeof (temp), fp) != NULL)
+ {
+#if ARCH(SPARC)
+ /* cpu count for SPARC linux -- read from /proc/cpuinfo */
+ if (strncmp (temp, "ncpus active", 12) == 0)
+ {
+ char *val = strchr (temp, ':');
+ ncpus = val ? atol (val + 1) : 0;
+ }
+#endif /* ARCH(SPARC) */
+
+ if (clock_rate == 0)
+ {
+ /* pick the first line that gives a CPU clock rate */
+#if ARCH(SPARC)
+ long long clk;
+ if (strncmp (temp, "Cpu0ClkTck", 10) == 0)
+ {
+ char *val = strchr (temp, ':');
+ clk = val ? strtoll (val + 1, NULL, 16) : 0;
+ clock_rate = (int) (clk / 1000000);
+ }
+#else
+ if (strncmp (temp, "cpu MHz", 7) == 0)
+ {
+ char *val = strchr (temp, ':');
+ clock_rate = val ? atoi (val + 1) : 0;
+ }
+#endif /* ARCH() */
+ }
+
+ /* did we get a clock rate? */
+ if (clock_rate != 0)
+ {
+#if ARCH(SPARC)
+ /* since we got a cpu count, we can break from the look */
+ break;
+#endif /* ARCH(SPARC) */
+ }
+#if ARCH(Intel)
+ /* On intel-Linux, count cpus based on "cpu MHz" lines */
+ if (strncmp (temp, "cpu MHz", 7) == 0)
+ ncpus++;
+#endif /* ARCH(Intel) */
+ }
+ fclose (fp);
+ }
+
+ if (clock_rate != 0)
+ sprintf (msgbuf,
+ "Clock rate = %d MHz (from reading /proc/cpuinfo) %d CPUs\n",
+ clock_rate, ncpus);
+
+ /* did we get a clock rate? */
+ if (clock_rate == 0)
+ {
+ clock_rate = 1000;
+ sprintf (msgbuf, "Clock rate = %d MHz (set by default) %d CPUs\n",
+ clock_rate, ncpus);
+ }
+ return clock_rate;
+}
+
+int
+get_ncpus (void)
+{
+ if (clock_rate == 0)
+ get_clock_rate ();
+ return ncpus;
+}
+
+/* gethrvtime -- generic solution, getting user time from
+ * clock_gettime(CLOCK_THREAD_CPUTIME_ID,..), and reformatting.
+ * need -lrt to compile.*/
+hrtime_t
+gethrvtime ()
+{
+ struct timespec tp;
+ hrtime_t rc = 0;
+ int r = clock_gettime (CLOCK_THREAD_CPUTIME_ID, &tp);
+ if (r == 0)
+ rc = ((hrtime_t) tp.tv_sec) * 1000000000 + (hrtime_t) tp.tv_nsec;
+ return rc;
+}
+
+/*
+ * CLOCK_MONOTONIC
+ * Clock that cannot be set and represents monotonic time since some
+ * unspecified starting point.
+ */
+hrtime_t
+gethrtime (void)
+{
+ struct timespec tp;
+ hrtime_t rc = 0;
+
+ /*
+ * For er_kernel on Linux, we want to match how DTrace gets its timestamps.
+ * This is CLOCK_MONOTONIC_RAW. It might be changing to CLOCK_MONOTONIC.
+ * For now, we change to "RAW" and can change back if DTrace changes.
+ *
+ * The two can be different. Check the clock_gettime() man page.
+ * CLOCK_MONOTONIC_RAW is Linux-specific and introduced in 2.6.28.
+ * It is impervious to NTP or adjtime adjustments.
+ *
+ * We must match the timer used in perfan/libcollector/src/gethrtime.c.
+ *
+ * There is no issue on Solaris, where gethrtime() is provided by the kernel
+ * and used by DTrace.
+ */
+#ifdef CLOCK_MONOTONIC_RAW
+ int r = clock_gettime (CLOCK_MONOTONIC_RAW, &tp);
+#else
+ int r = clock_gettime (CLOCK_MONOTONIC, &tp);
+#endif
+ if (r == 0)
+ rc = ((hrtime_t) tp.tv_sec) * 1000000000 + (hrtime_t) tp.tv_nsec;
+ return rc;
+}
diff --git a/gprofng/src/gp-archive.cc b/gprofng/src/gp-archive.cc
new file mode 100644
index 00000000000..8d3fc239526
--- /dev/null
+++ b/gprofng/src/gp-archive.cc
@@ -0,0 +1,700 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <ctype.h>
+#include <errno.h>
+#include <unistd.h>
+#include <getopt.h>
+
+#include "util.h"
+#include "StringMap.h"
+#include "LoadObject.h"
+#include "DbeSession.h"
+#include "DbeFile.h"
+#include "SourceFile.h"
+#include "Elf.h"
+#include "gp-archive.h"
+#include "ArchiveExp.h"
+#include "Print.h"
+#include "Module.h"
+
+er_archive::er_archive (int argc, char *argv[]) : DbeApplication (argc, argv)
+{
+ force = 0;
+ common_archive_dir = NULL;
+ quiet = 0;
+ descendant = 1;
+ use_relative_path = 0;
+ s_option = ARCH_EXE_ONLY;
+ mask = NULL;
+}
+
+er_archive::~er_archive ()
+{
+ if (mask)
+ {
+ for (long i = 0, sz = mask->size (); i < sz; i++)
+ {
+ regex_t *regex_desc = mask->get (i);
+ regfree (regex_desc);
+ delete regex_desc;
+ }
+ delete mask;
+ }
+ delete common_archive_dir;
+}
+
+int
+er_archive::mask_is_on (const char *str)
+{
+ if (mask == NULL)
+ return 1;
+ for (long i = 0, sz = mask->size (); i < sz; i++)
+ {
+ regex_t *regex_desc = mask->get (i);
+ if (regexec (regex_desc, str, 0, NULL, 0) == 0)
+ return 1;
+ }
+ return 0;
+}
+
+void
+er_archive::usage ()
+{
+/*
+ fprintf (stderr, GTXT ("Usage: %s [-nqFV] [-a on|ldobjects|src|usedldobjects|usedsrc|off] [-m regexp] experiment\n"), whoami);
+*/
+
+/*
+ Ruud - Isolate this line because it has an argument. Otherwise it would be at the
+ end of this long list.
+*/
+ printf ( GTXT (
+ "Usage: gprofng archive [OPTION(S)] EXPERIMENT\n"));
+
+ printf ( GTXT (
+ "\n"
+ "Archive the associated application binaries and source files in a gprofng\n"
+ "experiment to make it self contained and portable.\n"
+ "\n"
+ "Options:\n"
+ "\n"
+ " --version print the version number and exit.\n"
+ " --help print usage information and exit.\n"
+ " --verbose {on|off} enable (on) or disable (off) verbose mode; the default is \"off\".\n"
+ "\n"
+ " -a {off|on|ldobjects|src|usedldobjects|usedsrc} specify archiving of binaries and other files;\n"
+ " in addition to disable this feature (off), or enable archiving off all\n"
+ " loadobjects and sources (on), the other options support a more\n"
+ " refined selection. All of these options enable archiving, but the\n"
+ " keyword controls what exactly is selected: all load objects (ldobjects),\n"
+ " all source files (src), the loadobjects asscoiated with a program counter\n"
+ " (usedldobjects), or the source files associated with a program counter\n"
+ " (usedsrc); the default is \"-a ldobjects\".\n"
+ "\n"
+ " -n archive the named experiment only, not any of its descendants.\n"
+ "\n"
+ " -q do not write any warnings to stderr; messages are archived and\n"
+ " can be retrieved later.\n"
+ "\n"
+ " -F force writing or rewriting of the archive; ignored with the -n\n"
+ " or -m options, or if this is a subexperiment.\n"
+ "\n"
+ " -d <path> specifies the location of a common archive; this is a directory that\n"
+ " contains archived files.\n"
+ "\n"
+ " -m <regex> archive only those source, object, and debug info files whose full\n"
+ " path name matches the given POSIX compliant regular expression.\n"
+ "\n"
+ "Limitations:\n"
+ "\n"
+ "Default archiving does not occur in case the application profiled terminates prematurely,\n"
+ "or if archiving is disabled when collecting the performance data. In such cases, this\n"
+ "tool can be used to afterwards archive the information, but it has to run on the same \n"
+ "system where the profiling data was recorded.\n"
+ "\n"
+ "Documentation:\n"
+ "\n"
+ "A getting started guide for gprofng is maintained as a Texinfo manual. If the info and\n"
+ "gprofng programs are properly installed at your site, the command \"info gprofng\"\n"
+ "should give you access to this document.\n"
+ "\n"
+ "See also:\n"
+ "\n"
+ "gprofng(1), gp-collect-app(1), gp-display-html(1), gp-display-src(1), gp-display-text(1)\n"));
+// Ruud
+/*
+ fprintf (stderr, GTXT ("GNU %s version %s\n"), get_basename (prog_name), VERSION);
+*/
+ exit (1);
+}
+
+Vector <LoadObject*> *
+er_archive::get_loadObjs ()
+{
+ Vector <LoadObject*> *objs = new Vector<LoadObject*>();
+ Vector <LoadObject*> *loadObjs = dbeSession->get_text_segments ();
+ if (s_option != ARCH_NOTHING)
+ {
+ for (long i = 0, sz = VecSize(loadObjs); i < sz; i++)
+ {
+ LoadObject *lo = loadObjs->get (i);
+ if ((lo->flags & SEG_FLAG_DYNAMIC) != 0)
+ continue;
+ DbeFile *df = lo->dbeFile;
+ if (df && ((df->filetype & DbeFile::F_FICTION) != 0))
+ continue;
+ if (!lo->isUsed && ((s_option & (ARCH_USED_EXE_ONLY | ARCH_USED_SRC_ONLY)) != 0))
+ continue;
+ objs->append (lo);
+ }
+ }
+ if (DEBUG_ARCHIVE)
+ {
+ Dprintf (DEBUG_ARCHIVE, NTXT ("get_text_segments(): %d\n"),
+ (int) (loadObjs ? loadObjs->size () : -1));
+ for (long i = 0, sz = loadObjs ? loadObjs->size () : 0; i < sz; i++)
+ {
+ LoadObject *lo = loadObjs->get (i);
+ Dprintf (DEBUG_ARCHIVE, NTXT ("%s:%d [%2ld] %s\n"),
+ get_basename (__FILE__), (int) __LINE__, i, STR (lo->dump ()));
+ }
+ Dprintf (DEBUG_ARCHIVE, NTXT ("\nget_loadObjs(): %d\n"),
+ (int) (objs ? objs->size () : -1));
+ for (long i = 0, sz = VecSize(objs); i < sz; i++)
+ {
+ LoadObject *lo = objs->get (i);
+ Dprintf (DEBUG_ARCHIVE, NTXT ("%s:%d [%2ld] %s\n"),
+ get_basename (__FILE__), (int) __LINE__, i, STR (lo->dump ()));
+ }
+ }
+ delete loadObjs;
+ return objs;
+}
+
+/**
+ * Clean old archive
+ * Except the following cases:
+ * 1. Founder experiment is an MPI experiment
+ * 2. "-n" option is passed (do not archive descendants)
+ * 3. "-m" option is passed (partial archiving)
+ * 4. Experiment name is not the founder experiment (it is a sub-experiment)
+ * @param expname
+ * @param founder_exp
+ * @return 0 - success
+ */
+int
+er_archive::clean_old_archive (char *expname, ArchiveExp *founder_exp)
+{
+ if (0 == descendant)
+ { // do not archive descendants
+ fprintf (stderr, GTXT ("Warning: Option -F is ignored because -n option is specified (do not archive descendants)\n"));
+ return 1;
+ }
+ if (NULL != mask)
+ { // partial archiving
+ fprintf (stderr, GTXT ("Warning: Option -F is ignored because -m option is specified\n"));
+ return 1;
+ }
+ // Check if the experiment is the founder
+ char *s1 = dbe_strdup (expname);
+ char *s2 = dbe_strdup (founder_exp->get_expt_name ());
+ if (!s1 || !s2)
+ {
+ fprintf (stderr, GTXT ("Cannot allocate memory\n"));
+ exit (1);
+ }
+ // remove trailing slashes
+ for (int n = strlen (s1); n > 0; n--)
+ {
+ if ('/' != s1[n - 1])
+ break;
+ s1[n - 1] = 0;
+ }
+ for (int n = strlen (s2); n > 0; n--)
+ {
+ if ('/' != s2[n - 1])
+ break;
+ s2[n - 1] = 0;
+ }
+ if (strcmp (s1, s2) != 0)
+ { // not founder
+ fprintf (stderr, GTXT ("Warning: Option -F is ignored because specified experiment name %s does not match founder experiment name %s\n"), s1, s2);
+ free (s1);
+ free (s2);
+ return 1;
+ }
+ // Remove old "archives"
+ char *arch = founder_exp->get_arch_name ();
+ fprintf (stderr, GTXT ("INFO: removing existing archive: %s\n"), arch);
+ if (dbe_stat (arch, NULL) == 0)
+ {
+ char *cmd = dbe_sprintf ("/bin/rm -rf %s", arch);
+ system (cmd);
+ free (cmd);
+ if (dbe_stat (arch, NULL) != 0)
+ { // create "archives"
+ if (!founder_exp->create_dir (founder_exp->get_arch_name ()))
+ {
+ fprintf (stderr, GTXT ("Unable to create directory `%s'\n"), founder_exp->get_arch_name ());
+ exit (1);
+ }
+ }
+ }
+ free (s1);
+ free (s2);
+ return 0;
+} // clean_old_archive_if_necessary
+
+void
+er_archive::start (int argc, char *argv[])
+{
+ int last = argc - 1;
+ if (check_args (argc, argv) != last)
+ usage ();
+ check_env_var ();
+ if (s_option == ARCH_NOTHING)
+ return;
+
+ ArchiveExp *founder_exp = new ArchiveExp (argv[last]);
+ if (founder_exp->get_status () == Experiment::FAILURE)
+ {
+ if (!quiet)
+ fprintf (stderr, GTXT ("er_archive: %s: %s\n"), argv[last],
+ pr_mesgs (founder_exp->fetch_errors (), NTXT (""), NTXT ("")));
+ exit (1);
+ }
+ if (!founder_exp->create_dir (founder_exp->get_arch_name ()))
+ {
+ fprintf (stderr, GTXT ("Unable to create directory `%s'\n"), founder_exp->get_arch_name ());
+ exit (1);
+ }
+ if (!common_archive_dir)
+ common_archive_dir = dbe_strdup (getenv ("GPROFNG_ARCHIVE_COMMON_DIR"));
+ if (common_archive_dir)
+ {
+ if (!founder_exp->create_dir (common_archive_dir))
+ if (dbe_stat (common_archive_dir, NULL) != 0)
+ {
+ fprintf (stderr, GTXT ("Unable to create directory for common archive `%s'\n"), common_archive_dir);
+ exit (1);
+ }
+ }
+ // Clean old archives if necessary
+ if (force)
+ clean_old_archive (argv[last], founder_exp);
+ Vector<ArchiveExp*> *exps = new Vector<ArchiveExp*>();
+ exps->append (founder_exp);
+ if (descendant)
+ {
+ Vector<char*> *exp_names = founder_exp->get_descendants_names ();
+ if (exp_names)
+ {
+ for (long i = 0, sz = exp_names->size (); i < sz; i++)
+ {
+ char *exp_path = exp_names->get (i);
+ ArchiveExp *exp = new ArchiveExp (exp_path);
+ if (exp->get_status () == Experiment::FAILURE)
+ {
+ if (!quiet)
+ fprintf (stderr, GTXT ("er_archive: %s: %s\n"), exp_path,
+ pr_mesgs (exp->fetch_errors (), NTXT (""), NTXT ("")));
+ delete exp;
+ continue;
+ }
+ exps->append (exp);
+ }
+ exp_names->destroy ();
+ delete exp_names;
+ }
+ }
+ for (long i = 0, sz = exps->size (); i < sz; i++)
+ {
+ ArchiveExp *exp = exps->get (i);
+ exp->read_data (s_option);
+ }
+
+ Vector <DbeFile*> *copy_files = new Vector<DbeFile*>();
+ Vector <LoadObject*> *loadObjs = get_loadObjs ();
+ for (long i = 0, sz = VecSize(loadObjs); i < sz; i++)
+ {
+ LoadObject *lo = loadObjs->get (i);
+ if (strcmp (lo->get_pathname (), "LinuxKernel") == 0)
+ continue;
+ DbeFile *df = lo->dbeFile;
+ if ((df->filetype & DbeFile::F_FICTION) != 0)
+ continue;
+ if (df->get_location () == NULL)
+ {
+ copy_files->append (df);
+ continue;
+ }
+ if ((df->filetype & DbeFile::F_JAVACLASS) != 0)
+ {
+ if (df->container)
+ { // Found in .jar file
+ copy_files->append (df->container);
+ }
+ copy_files->append (df);
+ if ((s_option & ARCH_EXE_ONLY) != 0)
+ continue;
+ }
+ lo->sync_read_stabs ();
+ Elf *elf = lo->get_elf ();
+ if (elf && (lo->checksum != 0) && (lo->checksum != elf->elf_checksum ()))
+ {
+ if (!quiet)
+ fprintf (stderr, GTXT ("er_archive: '%s' has an unexpected checksum value; perhaps it was rebuilt. File ignored\n"),
+ df->get_location ());
+ continue;
+ }
+ copy_files->append (df);
+ if (elf)
+ {
+ Elf *f = elf->find_ancillary_files (lo->get_pathname ());
+ if (f)
+ copy_files->append (f->dbeFile);
+ for (long i1 = 0, sz1 = VecSize(elf->ancillary_files); i1 < sz1; i1++)
+ {
+ Elf *ancElf = elf->ancillary_files->get (i1);
+ copy_files->append (ancElf->dbeFile);
+ }
+ }
+ Vector<Module*> *modules = lo->seg_modules;
+ for (long i1 = 0, sz1 = VecSize(modules); i1 < sz1; i1++)
+ {
+ Module *mod = modules->get (i1);
+ if ((mod->flags & MOD_FLAG_UNKNOWN) != 0)
+ continue;
+ else if ((s_option & (ARCH_USED_EXE_ONLY | ARCH_USED_SRC_ONLY)) != 0 &&
+ !mod->isUsed)
+ continue;
+ if ((s_option & ARCH_ALL) != 0)
+ mod->read_stabs (false); // Find all Sources
+ if (mod->dot_o_file && mod->dot_o_file->dbeFile)
+ copy_files->append (mod->dot_o_file->dbeFile);
+ }
+ }
+ delete loadObjs;
+
+ int bmask = DbeFile::F_LOADOBJ | DbeFile::F_JAVACLASS | DbeFile::F_JAR_FILE |
+ DbeFile::F_DOT_O | DbeFile::F_DEBUG_FILE;
+ if ((s_option & (ARCH_USED_SRC_ONLY | ARCH_ALL)) != 0)
+ {
+ bmask |= DbeFile::F_JAVA_SOURCE | DbeFile::F_SOURCE;
+ Vector<SourceFile*> *sources = dbeSession->get_sources ();
+ for (long i = 0, sz = VecSize(sources); i < sz; i++)
+ {
+ SourceFile *src = sources->get (i);
+ if ((src->flags & SOURCE_FLAG_UNKNOWN) != 0)
+ continue;
+ else if ((s_option & ARCH_USED_SRC_ONLY) != 0)
+ {
+ if ((src->dbeFile->filetype & DbeFile::F_JAVA_SOURCE) != 0 &&
+ !src->isUsed)
+ continue;
+ }
+ if (src->dbeFile)
+ copy_files->append (src->dbeFile);
+ }
+ }
+
+ Vector <DbeFile*> *notfound_files = new Vector<DbeFile*>();
+ for (long i = 0, sz = VecSize(copy_files); i < sz; i++)
+ {
+ DbeFile *df = copy_files->get (i);
+ char *fnm = df->get_location ();
+ char *nm = df->get_name ();
+ Dprintf (DEBUG_ARCHIVE,
+ "%s::%d copy_files[%ld] filetype=%4d inArchive=%d '%s' --> '%s'\n",
+ get_basename (__FILE__), (int) __LINE__, i,
+ df->filetype, df->inArchive ? 1 : 0, STR (nm), STR (fnm));
+ Dprintf (DEBUG_ARCHIVE && df->container,
+ " copy_files[%ld]: Found '%s' in '%s'\n",
+ i, STR (nm), STR (df->container->get_name ()));
+ if (fnm == NULL)
+ {
+ if (!quiet)
+ notfound_files->append (df);
+ continue;
+ }
+ else if (df->inArchive)
+ {
+ Dprintf (DEBUG_ARCHIVE,
+ " NOT COPIED: copy_files[%ld]: inArchive=1 '%s'\n",
+ i, STR (nm));
+ continue;
+ }
+ else if ((df->filetype & bmask) == 0)
+ {
+ Dprintf (DEBUG_ARCHIVE,
+ " NOT COPIED: copy_files[%ld]: container=%p filetype=%d bmask=%d '%s'\n",
+ i, df->container, df->filetype, bmask, STR (nm));
+ continue;
+ }
+ else if (df->container &&
+ (df->filetype & (DbeFile::F_JAVA_SOURCE | DbeFile::F_SOURCE)) == 0)
+ {
+ Dprintf (DEBUG_ARCHIVE,
+ " NOT COPIED: copy_files[%ld]: container=%p filetype=%d bmask=%d '%s'\n",
+ i, df->container, df->filetype, bmask, STR (nm));
+ continue;
+ }
+ else if (!mask_is_on (df->get_name ()))
+ {
+ Dprintf (DEBUG_ARCHIVE,
+ " NOT COPIED: copy_files[%ld]: mask is off for '%s'\n",
+ i, STR (nm));
+ continue;
+ }
+ char *anm = founder_exp->getNameInArchive (nm, false);
+ if (force)
+ unlink (anm);
+ int res = founder_exp->copy_file (fnm, anm, quiet, common_archive_dir, use_relative_path);
+ if (0 == res) // file successfully archived
+ df->inArchive = 1;
+ delete anm;
+ }
+ delete copy_files;
+
+ if (notfound_files->size () > 0)
+ {
+ for (long i = 0, sz = notfound_files->size (); i < sz; i++)
+ {
+ DbeFile *df = notfound_files->get (i);
+ fprintf (stderr, GTXT ("er_archive: Cannot find file: `%s'\n"), df->get_name ());
+ }
+ fprintf (stderr, GTXT ("\n If you know the correct location of the missing file(s)"
+ " you can help %s to find them by manually editing the .gprofng.rc file."
+ " See %s man pages for more details.\n"),
+ whoami, whoami);
+ }
+ delete notfound_files;
+}
+
+int
+er_archive::check_args (int argc, char *argv[])
+{
+ int opt;
+ int rseen = 0;
+ int dseen = 0;
+ // Parsing the command line
+ opterr = 0;
+ optind = 1;
+ static struct option long_options[] = {
+ {"help", no_argument, 0, 'h'},
+ {"version", no_argument, 0, 'V'},
+ {"whoami", required_argument, 0, 'w'},
+ {"outfile", required_argument, 0, 'O'},
+ {NULL, 0, 0, 0}
+ };
+ while (1)
+ {
+ int option_index = 0;
+ opt = getopt_long (argc, argv, NTXT (":VFa:d:qnr:m:"),
+ long_options, &option_index);
+ if (opt == EOF)
+ break;
+ switch (opt)
+ {
+ case 'F':
+ force = 1;
+ break;
+ case 'd': // Common archive directory (absolute path)
+ if (rseen)
+ {
+ fprintf (stderr, GTXT ("Error: invalid combination of options: -r and -d are in conflict.\n"));
+ return -1;
+ }
+ if (dseen)
+ fprintf (stderr, GTXT ("Warning: option -d was specified several times. Last value is used.\n"));
+ free (common_archive_dir);
+ common_archive_dir = strdup (optarg);
+ dseen = 1;
+ break;
+ case 'q':
+ quiet = 1;
+ break;
+ case 'n':
+ descendant = 0;
+ break;
+ case 'r': // Common archive directory (relative path)
+ if (dseen)
+ {
+ fprintf (stderr, GTXT ("Error: invalid combination of options: -d and -r are in conflict.\n"));
+ return -1;
+ }
+ if (rseen)
+ fprintf (stderr, GTXT ("Warning: option -r was specified several times. Last value is used.\n"));
+ free (common_archive_dir);
+ common_archive_dir = strdup (optarg);
+ use_relative_path = 1;
+ rseen = 1;
+ break;
+ case 'a':
+ if (strcmp (optarg, "off") == 0)
+ s_option = ARCH_NOTHING;
+ else if (strcmp (optarg, "on") == 0 ||
+ strcmp (optarg, "ldobjects") == 0)
+ s_option = ARCH_EXE_ONLY;
+ else if (strcmp (optarg, "usedldobjects") == 0)
+ s_option = ARCH_USED_EXE_ONLY;
+ else if (strcmp (optarg, "usedsrc") == 0)
+ s_option = ARCH_USED_EXE_ONLY | ARCH_USED_SRC_ONLY;
+ else if (strcmp (optarg, "all") == 0 || strcmp (optarg, "src") == 0)
+ s_option = ARCH_ALL;
+ else
+ {
+ fprintf (stderr, GTXT ("Error: invalid option: `-%c %s'\n"),
+ optopt, optarg);
+ return -1;
+ }
+ break;
+ case 'm':
+ {
+ regex_t *regex_desc = new regex_t ();
+ if (regcomp (regex_desc, optarg, REG_EXTENDED | REG_NOSUB | REG_NEWLINE))
+ {
+ delete regex_desc;
+ fprintf (stderr, GTXT ("Error: invalid option: `-%c %s'\n"),
+ optopt, optarg);
+ return -1;
+ }
+ if (mask == NULL)
+ mask = new Vector<regex_t *>();
+ mask->append (regex_desc);
+ break;
+ }
+ case 'O':
+ {
+ int fd = open (optarg, O_WRONLY | O_CREAT | O_APPEND, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
+ if (fd == -1)
+ {
+ fprintf (stderr, GTXT ("er_archive: Can't open %s: %s\n"),
+ optarg, strerror (errno));
+ break;
+ }
+ if (dup2 (fd, 2) == -1)
+ {
+ close (fd);
+ fprintf (stderr, GTXT ("er_archive: Can't divert stderr: %s\n"),
+ strerror (errno));
+ break;
+ }
+ if (dup2 (fd, 1) == -1)
+ {
+ close (fd);
+ fprintf (stderr, GTXT ("er_archive: Can't divert stdout: %s\n"),
+ strerror (errno));
+ break;
+ }
+ close (fd);
+ struct timeval tp;
+ gettimeofday (&tp, NULL);
+ fprintf (stderr, "### Start %s#", ctime (&tp.tv_sec));
+ for (int i = 0; i < argc; i++)
+ fprintf (stderr, " %s", argv[i]);
+ fprintf (stderr, "\n");
+ break;
+ }
+ case 'V':
+// Ruud
+ Application::print_version_info ();
+/*
+ printf (GTXT ("GNU %s version %s\n"), get_basename (prog_name), VERSION);
+*/
+ exit (0);
+ case 'w':
+ whoami = optarg;
+ break;
+ case 'h':
+ usage ();
+ exit (0);
+ case ':': // -s -m without operand
+ fprintf (stderr, GTXT ("Option -%c requires an operand\n"), optopt);
+ return -1;
+ case '?':
+ default:
+ fprintf (stderr, GTXT ("Unrecognized option: -%c\n"), optopt);
+ return -1;
+ }
+ }
+ return optind;
+}
+
+void
+er_archive::check_env_var ()
+{
+ char *ename = NTXT ("GPROFNG_ARCHIVE");
+ char *var = getenv (ename);
+ if (var == NULL)
+ return;
+ var = dbe_strdup (var);
+ Vector<char*> *opts = new Vector<char*>();
+ opts->append (ename);
+ for (char *s = var;;)
+ {
+ while (*s && isblank (*s))
+ s++;
+ if (*s == 0)
+ break;
+ opts->append (s);
+ while (*s && !isblank (*s))
+ s++;
+ if (*s == 0)
+ break;
+ *s = 0;
+ s++;
+ }
+ if (opts->size () > 0)
+ {
+ char **arr = (char **) malloc (sizeof (char *) *opts->size ());
+ for (long i = 0; i < opts->size (); i++)
+ arr[i] = opts->get (i);
+ if (-1 == check_args (opts->size (), arr))
+ fprintf (stderr, GTXT ("Error: Wrong SP_ER_ARCHIVE: '%s'\n"), var);
+ free (arr);
+ }
+ delete opts;
+ free (var);
+}
+
+static int
+real_main (int argc, char *argv[])
+{
+ er_archive *archive = new er_archive (argc, argv);
+ dbeSession->archive_mode = 1;
+ archive->start (argc, argv);
+ dbeSession->unlink_tmp_files ();
+ return 0;
+}
+
+/**
+ * Call catch_out_of_memory(int (*real_main)(int, char*[]), int argc, char *argv[]) which will call real_main()
+ * @param argc
+ * @param argv
+ * @return
+ */
+int
+main (int argc, char *argv[])
+{
+ return catch_out_of_memory (real_main, argc, argv);
+}
diff --git a/gprofng/src/gp-archive.h b/gprofng/src/gp-archive.h
new file mode 100644
index 00000000000..1d937e060af
--- /dev/null
+++ b/gprofng/src/gp-archive.h
@@ -0,0 +1,64 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _GP_ARCHIVE_H_
+#define _GP_ARCHIVE_H_
+
+#include <regex.h>
+#include "DbeApplication.h"
+
+class ArchiveExp;
+class LoadObject;
+template <class ITEM> class Vector;
+
+enum
+{
+ ARCH_NOTHING = 0,
+ ARCH_EXE_ONLY = 1,
+ ARCH_USED_EXE_ONLY = 2,
+ ARCH_USED_SRC_ONLY = 4,
+ ARCH_ALL = 8
+};
+
+class er_archive : public DbeApplication
+{
+public:
+ er_archive (int argc, char *argv[]);
+ ~er_archive ();
+ void start (int argc, char *argv[]);
+
+private:
+ void usage ();
+ int check_args (int argc, char *argv[]);
+ int clean_old_archive (char *expname, ArchiveExp *founder_exp);
+ int mask_is_on (const char *str);
+ void check_env_var ();
+ Vector <LoadObject*> *get_loadObjs ();
+
+ Vector<regex_t *> *mask; // -m <regexp>
+ int s_option; // -s NO|ALL|USED
+ char *common_archive_dir; // -d // absolute path to common archive
+ int force; // -F
+ int quiet; // -q
+ int descendant; // -n
+ int use_relative_path; // -r
+};
+
+#endif \ No newline at end of file
diff --git a/gprofng/src/gp-collect-app.cc b/gprofng/src/gp-collect-app.cc
new file mode 100644
index 00000000000..34874b8c296
--- /dev/null
+++ b/gprofng/src/gp-collect-app.cc
@@ -0,0 +1,1598 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <ctype.h>
+#include <stdio.h>
+#include <stdarg.h>
+#include <stdlib.h>
+#include <strings.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/param.h>
+#include <sys/wait.h>
+#include <sys/utsname.h>
+#include <fcntl.h>
+#include <signal.h>
+#include <time.h>
+#include <errno.h>
+#include <sys/ptrace.h>
+
+#include "gp-defs.h"
+#include "cpu_frequency.h"
+#include "util.h"
+#include "collctrl.h"
+#include "hwcdrv.h"
+#include "gp-experiment.h"
+#include "collect.h"
+#include "StringBuilder.h"
+
+#define SP_COLLECTOR_FOUNDER "SP_COLLECTOR_FOUNDER"
+
+extern char **environ;
+
+static volatile int interrupt = 0;
+static int saved_stdout = -1;
+static int saved_stderr = -1;
+static int no_short_usage = 0;
+static int usage_fd = 2;
+static collect *collect_obj = NULL;
+extern "C" void sigint_handler (int sig, siginfo_t *info, void *context);
+static char *outredirect = NULL;
+static int precheck;
+static int nprocesses;
+static Process **processes;
+
+int
+main (int argc, char *argv[])
+{
+ // disable any alarm that might be pending
+ int r = alarm (0);
+ if (r != 0)
+ dbe_write (2, GTXT ("collect has alarm(%d) pending\n"), r);
+ collect_obj = new collect (argc, argv, environ);
+ collect_obj->start (argc, argv);
+ delete collect_obj;
+ return 0;
+}
+
+extern "C" void
+sigint_handler (int, siginfo_t *, void *)
+{
+ interrupt = 1;
+ if (collect_obj->cc != NULL)
+ collect_obj->cc->interrupt ();
+ return;
+}
+
+extern "C" void
+sigalrm_handler (int, siginfo_t *, void *)
+{
+ dbe_write (2, GTXT ("collect: unexpected alarm clock signal received\n"));
+ return;
+}
+
+extern "C" void
+sigterm_handler (int, siginfo_t *, void *)
+{
+ for (int i = 0; i < nprocesses; i++)
+ {
+ Process *proc = processes[i];
+ if (proc != NULL)
+ kill (proc->pid, SIGTERM);
+ }
+}
+
+collect::collect (int argc, char *argv[], char **envp)
+: Application (argc, argv)
+{
+ verbose = 0;
+ disabled = 0;
+ cc = NULL;
+ collect_warnings = NULL;
+ collect_warnings_idx = 0;
+ int ii;
+ for (ii = 0; ii < MAX_LD_PRELOAD_TYPES; ii++)
+ sp_preload_list[ii] = NULL;
+ for (ii = 0; ii < MAX_LD_PRELOAD_TYPES; ii++)
+ sp_libpath_list[ii] = NULL;
+ java_path = NULL;
+ java_how = NULL;
+ jseen_global = 0;
+ nlabels = 0;
+ origargc = argc;
+ origargv = argv;
+ origenvp = envp;
+ mem_so_me = false;
+}
+
+collect::~collect ()
+{
+ delete cc;
+}
+
+struct sigaction old_sigint_handler;
+struct sigaction old_sigalrm_handler;
+
+void
+collect::start (int argc, char *argv[])
+{
+ char *ccret;
+ char *extype;
+ /* create a collector control structure, disabling aggressive warning */
+ cc = new Coll_Ctrl (0, false, false);
+ if (prog_name)
+ {
+ char *s = strrchr (prog_name, '/');
+ if (s && (s - prog_name) > 5) // Remove /bin/
+ {
+ s = dbe_sprintf (NTXT ("%.*s"), (int) (s - prog_name - 4), prog_name);
+ cc->set_project_home (s);
+ free (s);
+ }
+ }
+ char * errenable = cc->enable_expt ();
+ if (errenable)
+ {
+ writeStr (2, errenable);
+ free (errenable);
+ }
+
+ /* install a handler for SIGALRM */
+ struct sigaction act;
+ memset (&act, 0, sizeof (struct sigaction));
+ sigemptyset (&act.sa_mask);
+ act.sa_handler = (SignalHandler) sigalrm_handler;
+ act.sa_flags = SA_RESTART | SA_SIGINFO;
+ if (sigaction (SIGALRM, &act, &old_sigalrm_handler) == -1)
+ {
+ writeStr (2, GTXT ("Unable to install SIGALRM handler\n"));
+ exit (-1);
+ }
+
+ /* install a handler for SIGINT */
+ sigemptyset (&act.sa_mask);
+ act.sa_handler = (SignalHandler) sigint_handler;
+ act.sa_flags = SA_RESTART | SA_SIGINFO;
+ if (sigaction (SIGINT, &act, &old_sigint_handler) == -1)
+ {
+ writeStr (2, GTXT ("Unable to install SIGINT handler\n"));
+ exit (-1);
+ }
+
+ /* install a handler for SIGTERM */
+ sigemptyset (&act.sa_mask);
+ act.sa_sigaction = sigterm_handler;
+ act.sa_flags = SA_RESTART | SA_SIGINFO;
+ if (sigaction (SIGTERM, &act, NULL) == -1)
+ {
+ writeStr (2, GTXT ("Unable to install SIGTERM handler\n"));
+ exit (-1);
+ }
+ if (argc > 1 && strncmp (argv[1], NTXT ("--whoami="), 9) == 0)
+ {
+ whoami = argv[1] + 9;
+ argc--;
+ argv++;
+ }
+
+ /* check for no arguments -- usage message */
+ if (argc == 1)
+ {
+ verbose = 1;
+ usage_fd = 1;
+ validate_config (0);
+ usage ();
+ exit (0);
+ }
+ else if (argc == 2 && strcmp (argv[1], NTXT ("-h")) == 0)
+ {
+ /* only one argument, -h */
+ verbose = 1;
+ validate_config (0);
+ /* now print the HWC usage message */
+ show_hwc_usage ();
+ exit (0);
+ }
+ else if (argc == 2 && (strcmp (argv[1], NTXT ("-help")) == 0 ||
+ strcmp (argv[1], NTXT ("--help")) == 0))
+ {
+ /* only one argument, -help or --help */
+ verbose = 1;
+ usage_fd = 1;
+ validate_config (0);
+ usage ();
+ exit (0);
+ }
+// Ruud
+ else if ((argc == 2) &&
+ (strcmp (argv[1], NTXT ("--version")) == 0))
+ {
+ /* only one argument, --version */
+
+ /* print the version info */
+ Application::print_version_info ();
+ exit (0);
+ }
+
+ /* precheck the arguments -- scan for -O, -M flagS */
+ precheck = 1;
+ targ_index = check_args (argc, argv);
+ if (targ_index < 0)
+ {
+ /* message has already been written */
+ usage_fd = 2;
+ short_usage ();
+ exit (1);
+ }
+ /* crack the arguments */
+ precheck = 0;
+ targ_index = check_args (argc, argv);
+ if (targ_index <= 0)
+ {
+ /* message has already been written */
+ usage_fd = 2;
+ short_usage ();
+ exit (1);
+ }
+ if (targ_index != 0)
+ check_target (argc, argv);
+ if (disabled != 0 && cc->get_count () == 0)
+ {
+ // show collection parameters; count data
+ ccret = cc->show (0);
+ writeStr (1, ccret);
+ }
+
+ // see if Java version should be checked
+ if (cc->get_java_default () == 0 && java_path != NULL)
+ validate_java (java_path, java_how, verbose);
+
+ /* if count data is requested, exec bit to do the real work */
+ /* even for a dryrun */
+ if (cc->get_count () != 0)
+ get_count_data ();
+
+ /* if a dry run, just exit */
+ if (disabled != 0)
+ {
+ writeStr (1, cc->show_expt ());
+ StringBuilder sb;
+ sb.append (GTXT ("Exec argv[] = "));
+ for (int i = 0; i < nargs; i++)
+ sb.appendf (NTXT ("%s "), arglist[i]);
+ sb.append (NTXT ("\n"));
+ char *s = sb.toString ();
+ writeStr (1, s);
+ free (s);
+ exit (0);
+ }
+
+ // If the mem_so_me flag is set, preload mem.so
+ // and launch the process
+ if (mem_so_me)
+ {
+ /* set env vars for mem.so */
+ if (putenv_memso () != 0)
+ exit (1); /* message has already been written */
+ /* ensure original outputs restored for target */
+ reset_output ();
+
+ /* now exec the target ... */
+ if (cc->get_debug_mode () == 1)
+ {
+ traceme (arglist[0], arglist);
+ extype = NTXT ("traceme");
+ }
+ else
+ {
+ execvp (arglist[0], arglist);
+ extype = NTXT ("exevcp");
+ }
+ /* oops, exec of the target failed */
+ char *em = strerror (errno);
+ set_output (); /* restore output for collector */
+ if (em == NULL)
+ dbe_write (2, GTXT ("memso %s of %s failed: errno = %d\n"), extype, argv[targ_index], errno);
+ else
+ dbe_write (2, GTXT ("memso %s of %s failed: %s\n"), extype, argv[targ_index], em);
+ exit (1);
+ }
+
+ /* normal path, setting up an experiment and launching the target */
+ /* set up the experiment */
+ ccret = cc->setup_experiment ();
+ if (ccret != NULL)
+ {
+ dbe_write (2, NTXT ("%s\n"), ccret);
+ free (ccret);
+ exit (1);
+ }
+ /* Beyond this point, the experiment is created */
+ if (collect_warnings != NULL)
+ {
+ warn_open ();
+ for (int i = 0; i < collect_warnings_idx; i++)
+ warn_comment (SP_JCMD_CWARN, COL_WARN_APP_NOT_READY, collect_warnings[i], (int) strlen (collect_warnings[i]));
+ warn_close ();
+ }
+ /* check cpu frequency variation for intel*/
+ unsigned char mode = COL_CPUFREQ_NONE;
+ int max_freq = get_cpu_frequency (&mode);
+ char freq_scaling[256];
+ char turbo_mode[256];
+ *freq_scaling = 0;
+ *turbo_mode = 0;
+ if (mode & COL_CPUFREQ_SCALING)
+ snprintf (freq_scaling, sizeof (freq_scaling), NTXT (" frequency_scaling=\"enabled\""));
+ if (mode & COL_CPUFREQ_TURBO)
+ snprintf (turbo_mode, sizeof (turbo_mode), NTXT (" turbo_mode=\"enabled\""));
+ if (mode != COL_CPUFREQ_NONE)
+ {
+ warn_open ();
+ if (warn_file != NULL)
+ {
+ warn_write ("<powerm>\n<frequency clk=\"%d\"%s%s/>\n</powerm>\n",
+ max_freq, freq_scaling, turbo_mode);
+ warn_close ();
+ }
+ }
+
+ /* check for labels to write to notes file */
+ if (nlabels != 0)
+ {
+ char *nbuf;
+ char nbuf2[MAXPATHLEN];
+ // fetch the experiment name and CWD
+ char *exp = cc->get_experiment ();
+ char *ev = getcwd (nbuf2, sizeof (nbuf2));
+
+ // format the environment variable for the experiment directory name
+ if (ev != NULL && exp[0] != '/')
+ // cwd succeeded, and experiment is a relative path
+ nbuf = dbe_sprintf (NTXT ("%s/%s/%s"), nbuf2, exp, SP_NOTES_FILE);
+ else
+ // getcwd failed or experiment is a fullpath
+ nbuf = dbe_sprintf (NTXT ("%s/%s"), exp, SP_NOTES_FILE);
+
+ FILE *f = fopen (nbuf, NTXT ("w"));
+ free (nbuf);
+ if (f != NULL)
+ {
+ for (int i = 0; i < nlabels; i++)
+ fprintf (f, NTXT ("%s\n"), label[i]);
+ fclose (f);
+ }
+ }
+ /* check for user interrupt */
+ if (interrupt == 1)
+ {
+ cc->delete_expt ();
+ writeStr (2, GTXT ("User interrupt\n"));
+ exit (0);
+ }
+
+ /* print data-collection parameters */
+ if (verbose)
+ {
+ ccret = cc->show (0);
+ if (ccret != NULL)
+ writeStr (2, ccret);
+ }
+ ccret = cc->show_expt ();
+ if (ccret != NULL)
+ writeStr (1, ccret); /* write this to stdout */
+
+ pid_t pid = (pid_t) cc->get_attach_pid ();
+ if (pid == (pid_t) 0)
+ {
+ /* No attach */
+ /* Set the environment for libcollector */
+ if (putenv_libcollector () != 0)
+ {
+ /* message has already been written */
+ cc->delete_expt ();
+ exit (1);
+ }
+ /* ensure original output fds restored for target */
+ reset_output ();
+
+ /* now exec the target ... */
+ if (cc->get_debug_mode () == 1)
+ {
+ traceme (arglist[0], arglist);
+ extype = NTXT ("traceme");
+ }
+ else
+ {
+ execvp (arglist[0], arglist);
+ extype = NTXT ("execvp");
+ }
+
+ /* we reach this point only if the target launch failed */
+ char *em = strerror (errno);
+
+ /* restore output for collector */
+ set_output ();
+
+ /* exec failed; delete experiment */
+ cc->delete_expt ();
+
+ /* print a message and exit */
+ if (em == NULL)
+ dbe_write (2, GTXT ("%s of %s failed: errno = %d\n"), extype, argv[targ_index], errno);
+ else
+ dbe_write (2, GTXT ("%s of %s failed: %s\n"), extype, argv[targ_index], em);
+ exit (1);
+ }
+ else
+ abort ();
+}
+
+/**
+ * Prepare a warning message and pass it to warn_write()
+ * @Parameters:
+ * kind Type of comment
+ * num ID
+ * s Comment sting
+ * len Length of the string
+ * @Return: none.
+ */
+void
+collect::warn_comment (const char *kind, int num, char *s, int len)
+{
+ if (len != 0)
+ warn_write (NTXT ("<event kind=\"%s\" id=\"%d\">%.*s</event>\n"),
+ kind, num, len, s);
+ else if (s == NULL)
+ warn_write (NTXT ("<event kind=\"%s\" id=\"%d\"/>\n"), kind, num);
+ else
+ warn_write (NTXT ("<event kind=\"%s\" id=\"%d\">%s</event>\n"), kind, num, s);
+}
+
+/**
+ * Open the warnings file in Append mode ("aw")
+ */
+void
+collect::warn_open ()
+{
+ // open the warnings file
+ warnfilename = dbe_sprintf (NTXT ("%s/%s"), cc->get_experiment (), SP_WARN_FILE);
+ int fd = open (warnfilename, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
+ warn_file = fdopen (fd, NTXT ("aw"));
+}
+
+/**
+ * Close the warnings file
+ */
+void
+collect::warn_close ()
+{
+ (void) fclose (warn_file);
+}
+
+/**
+ * Format the warning message and write it to the warnings file
+ */
+void
+collect::warn_write (const char *format, ...)
+{
+ char buf[4096];
+ // format the input arguments into a string
+ va_list va;
+ va_start (va, format);
+ vsnprintf (buf, sizeof (buf), format, va);
+ va_end (va);
+ // write it to the warnings file (warnings.xml)
+ fwrite (buf, 1, strlen (buf), warn_file);
+ fflush (warn_file);
+}
+
+/* process the args, setting expt. params,
+ * and finding offset for a.out name
+ */
+int
+collect::check_args (int argc, char *argv[])
+{
+ int hseen = 0;
+ int hoffseen = 0;
+ int lseen = 0;
+ int tseen = 0;
+ int pseen = 0;
+ int sseen = 0;
+ int yseen = 0;
+ int Fseen = 0;
+ int Aseen = 0;
+ int Sseen = 0;
+ int Hseen = 0;
+ int iseen = 0;
+ int Jseen = 0;
+ int ofseen = 0;
+ char *expName = NULL;
+ bool overwriteExp = false;
+ char *ccret;
+ char *ccwarn;
+ for (targ_index = 1; targ_index < argc; targ_index++)
+ {
+ if (argv[targ_index] == NULL)
+ break;
+ if (dbe_strcmp (argv[targ_index], "--") == 0)
+ {
+ targ_index++;
+ break;
+ }
+ if (argv[targ_index][0] != '-')
+ break;
+ int param;
+ switch (argv[targ_index][1])
+ {
+ case 'y':
+ {
+ if (precheck == 1)
+ {
+ targ_index++;
+ if (argv[targ_index] == NULL)
+ return 0;
+ break;
+ }
+ char *ptr;
+ int resume = 1;
+ if (checkflagterm (argv[targ_index]) == -1) return -1;
+ if (yseen != 0)
+ {
+ dupflagseen ('y');
+ return -1;
+ }
+ yseen++;
+ targ_index++;
+ if (argv[targ_index] == NULL)
+ {
+ writeStr (2, GTXT ("-y requires a signal argument\n"));
+ return -1;
+ }
+ if ((ptr = strrchr (argv[targ_index], ',')) != NULL)
+ {
+ if ((*(ptr + 1) != 'r') || (*(ptr + 2) != 0))
+ {
+ /* not the right trailer */
+ dbe_write (2, GTXT ("Invalid delay signal %s\n"), argv[targ_index]);
+ return -1;
+ }
+ resume = 0;
+ *ptr = 0;
+ }
+ param = cc->find_sig (argv[targ_index]);
+ if (param < 0)
+ {
+ /* invalid signal */
+ dbe_write (2, GTXT ("Invalid delay signal %s\n"), argv[targ_index]);
+ return -1;
+ }
+ ccret = cc->set_pauseresume_signal (param, resume);
+ if (ccret != NULL)
+ {
+ /* invalid signal; write message */
+ writeStr (2, ccret);
+ return -1;
+ }
+ break;
+ }
+ case 'l':
+ if (precheck == 1)
+ {
+ targ_index++;
+ if (argv[targ_index] == NULL)
+ return 0;
+ break;
+ }
+ if (checkflagterm (argv[targ_index]) == -1) return -1;
+ if (lseen != 0)
+ {
+ dupflagseen ('l');
+ return -1;
+ }
+ lseen++;
+ targ_index++;
+ if (argv[targ_index] == NULL)
+ {
+ writeStr (2, GTXT ("-l requires a signal argument\n"));
+ return -1;
+ }
+ param = cc->find_sig (argv[targ_index]);
+ if (param < 0)
+ {
+ /* invalid signal */
+ dbe_write (2, GTXT ("Invalid sample signal %s\n"), argv[targ_index]);
+ return -1;
+ }
+ ccret = cc->set_sample_signal (param);
+ if (ccret != NULL)
+ {
+ /* invalid signal; write message */
+ writeStr (2, ccret);
+ free (ccret);
+ return -1;
+ }
+ break;
+
+#ifdef GPROFNG_DOES_NOT_SUPPORT
+ case 'P':
+ if (precheck == 1)
+ {
+ targ_index++;
+ if (argv[targ_index] == NULL)
+ return 0;
+ break;
+ }
+ if (checkflagterm (argv[targ_index]) == -1)
+ return -1;
+ if (Pseen != 0)
+ {
+ dupflagseen ('P');
+ return -1;
+ }
+ Pseen++;
+ targ_index++;
+ if (argv[targ_index] == NULL)
+ {
+ writeStr (2, GTXT ("-P requires a process pid argument\n"));
+ return -1;
+ }
+ ccret = cc->set_attach_pid (argv[targ_index]);
+ if (ccret != NULL)
+ {
+ /* error; write message */
+ writeStr (2, ccret);
+ free (ccret);
+ return -1;
+ }
+ break;
+#endif
+ case 't':
+ if (precheck == 1)
+ {
+ targ_index++;
+ if (argv[targ_index] == NULL)
+ return 0;
+ break;
+ }
+
+ if (checkflagterm (argv[targ_index]) == -1) return -1;
+ if (tseen != 0)
+ {
+ dupflagseen ('t');
+ return -1;
+ }
+ tseen++;
+ targ_index++;
+ if (argv[targ_index] == NULL)
+ {
+ writeStr (2, GTXT ("-t requires a run-duration argument\n"));
+ return -1;
+ }
+ ccret = cc->set_time_run (argv[targ_index]);
+ if (ccret != NULL)
+ {
+ /* error; write message */
+ writeStr (2, ccret);
+ free (ccret);
+ return -1;
+ }
+ break;
+ case 'p':
+ {
+ char *warnmsg;
+ if (precheck == 1)
+ {
+ targ_index++;
+ if (argv[targ_index] == NULL)
+ return 0;
+ break;
+ }
+ if (checkflagterm (argv[targ_index]) == -1) return -1;
+ if (pseen != 0)
+ {
+ dupflagseen ('p');
+ return -1;
+ }
+ pseen++;
+ targ_index++;
+ if (argv[targ_index] == NULL)
+ {
+ writeStr (2, GTXT ("-p requires a clock-profiling argument\n"));
+ return -1;
+ }
+ ccret = cc->set_clkprof (argv[targ_index], &warnmsg);
+ if (ccret != NULL)
+ {
+ writeStr (2, ccret);
+ free (ccret);
+ return -1;
+ }
+ if (warnmsg != NULL)
+ {
+ writeStr (2, warnmsg);
+ free (warnmsg);
+ }
+ break;
+ }
+ case 's':
+ if (precheck == 1)
+ {
+ targ_index++;
+ if (argv[targ_index] == NULL)
+ return 0;
+ break;
+ }
+ if (checkflagterm (argv[targ_index]) == -1) return -1;
+ if (sseen != 0)
+ {
+ dupflagseen ('s');
+ return -1;
+ }
+ sseen++;
+ targ_index++;
+ if (argv[targ_index] == NULL)
+ {
+ writeStr (2, GTXT ("-s requires a synchronization-tracing argument\n"));
+ return -1;
+ }
+ ccret = cc->set_synctrace (argv[targ_index]);
+ if (ccret != NULL)
+ {
+ writeStr (2, ccret);
+ free (ccret);
+ return -1;
+ }
+ break;
+ case 'h':
+ {
+ if (precheck == 1)
+ {
+ targ_index++;
+ if (argv[targ_index] == NULL)
+ return 0;
+ break;
+ }
+ if (checkflagterm (argv[targ_index]) == -1)
+ return -1;
+ targ_index++;
+ if ((argv[targ_index] == NULL) || (strlen (argv[targ_index]) == 0))
+ {
+ writeStr (2, GTXT ("-h requires a HW-counter-profiling argument\n"));
+ return -1;
+ }
+ // Check for some special cases
+ char * string = argv[targ_index];
+ if (strcmp (argv[targ_index], NTXT ("off")) == 0)
+ {
+ if (hseen != 0)
+ {
+ no_short_usage = 1;
+ writeStr (2, GTXT ("-h off cannot be used with any other -h arguments\n"));
+ return -1;
+ }
+ hoffseen = 1;
+ hseen = 1;
+ cc->disable_hwc ();
+ break;
+ }
+ // Check to see if we can use HWC
+ unsigned hwc_maxregs = hwc_get_max_concurrent (false);
+ if (hwc_maxregs == 0)
+ {
+ char buf[1024];
+ char *pch = hwcfuncs_errmsg_get (buf, sizeof (buf), 0);
+ if (*pch)
+ dbe_write (2, GTXT ("HW counter profiling is not supported on this system: %s%s"),
+ pch, pch[strlen (pch) - 1] == '\n' ? "" : "\n");
+ else
+ dbe_write (2, GTXT ("HW counter profiling is not supported on this system\n"));
+ no_short_usage = 1;
+ return -1;
+ }
+ // Make sure there's no other -h after -h off
+ if (hoffseen != 0)
+ {
+ no_short_usage = 1;
+ writeStr (2, GTXT ("No -h arguments can be used after -h off\n"));
+ return -1;
+ }
+ // set up to process HW counters (to know about default counters)
+ cc->setup_hwc ();
+ hseen++;
+ char *warnmsg;
+ if (strcmp (argv[targ_index], NTXT ("on")) == 0)
+ ccret = cc->add_default_hwcstring ("on", &warnmsg, true);
+ else if (strcmp (argv[targ_index], NTXT ("hi")) == 0 ||
+ strcmp (argv[targ_index], NTXT ("high")) == 0)
+ ccret = cc->add_default_hwcstring ("hi", &warnmsg, true);
+ else if (strcmp (argv[targ_index], NTXT ("lo")) == 0 ||
+ strcmp (argv[targ_index], NTXT ("low")) == 0)
+ ccret = cc->add_default_hwcstring ("lo", &warnmsg, true);
+ else if (strcmp (argv[targ_index], NTXT ("auto")) == 0)
+ ccret = cc->add_default_hwcstring ("auto", &warnmsg, true);
+ else
+ ccret = cc->add_hwcstring (string, &warnmsg);
+ if (ccret != NULL)
+ {
+ /* set global flag to suppress the short_usage message for any subsequent HWC errors */
+ no_short_usage = 1;
+ writeStr (2, ccret);
+ free (ccret);
+ return -1;
+ }
+ if (warnmsg != NULL)
+ {
+ writeStr (2, warnmsg);
+ free (warnmsg);
+ }
+ break;
+ }
+ case 'O':
+ overwriteExp = true;
+ ATTRIBUTE_FALLTHROUGH
+ case 'o':
+ if (precheck == 1)
+ {
+ targ_index++;
+ if (argv[targ_index] == NULL)
+ return 0;
+ break;
+ }
+ if (checkflagterm (argv[targ_index]) == -1)
+ return -1;
+ if (argv[targ_index + 1] == NULL)
+ {
+ dbe_write (2, GTXT ("Argument %s must be followed by a file name\n"),
+ argv[targ_index]);
+ return -1;
+ }
+ if (expName != NULL)
+ {
+ dbe_write (2, GTXT ("Only one -o or -O argument may be used\n"));
+ dupflagseen ('o');
+ return -1;
+ }
+ expName = argv[targ_index + 1];
+ targ_index++;
+ break;
+ case 'S':
+ if (precheck == 1)
+ {
+ targ_index++;
+ if (argv[targ_index] == NULL)
+ return 0;
+ break;
+ }
+ if (checkflagterm (argv[targ_index]) == -1) return -1;
+ if (argv[targ_index + 1] == NULL)
+ {
+ dbe_write (2, GTXT ("Argument %s must be followed by a sample interval name\n"),
+ argv[targ_index]);
+ return -1;
+ }
+ if (Sseen != 0)
+ {
+ dupflagseen ('S');
+ return -1;
+ }
+ Sseen++;
+ ccret = cc->set_sample_period (argv[targ_index + 1]);
+ if (ccret != NULL)
+ {
+ writeStr (2, ccret);
+ free (ccret);
+ return -1;
+ }
+ targ_index++;
+ break;
+ case 'H':
+ if (precheck == 1)
+ {
+ targ_index++;
+ if (argv[targ_index] == NULL)
+ return 0;
+ break;
+ }
+ if (checkflagterm (argv[targ_index]) == -1)
+ return -1;
+ if (argv[targ_index + 1] == NULL)
+ {
+ dbe_write (2, GTXT ("Argument %s requires a heap-tracing argument\n"),
+ argv[targ_index]);
+ return -1;
+ }
+ if (Hseen != 0)
+ {
+ dupflagseen ('H');
+ return -1;
+ }
+ Hseen++;
+ ccret = cc->set_heaptrace (argv[targ_index + 1]);
+ if (ccret != NULL)
+ {
+ writeStr (2, ccret);
+ free (ccret);
+ return -1;
+ }
+ if (cc->get_java_default () == 1)
+ cc->set_java_mode (NTXT ("off"));
+ targ_index++;
+ break;
+ case 'i':
+ if (precheck == 1)
+ {
+ targ_index++;
+ if (argv[targ_index] == NULL)
+ return 0;
+ break;
+ }
+ if (checkflagterm (argv[targ_index]) == -1)
+ return -1;
+ if (argv[targ_index + 1] == NULL)
+ {
+ fprintf (stderr, GTXT ("Argument %s requires an I/O-tracing argument\n"),
+ argv[targ_index]);
+ return -1;
+ }
+ if (iseen != 0)
+ {
+ dupflagseen ('i');
+ return -1;
+ }
+ iseen++;
+ ccret = cc->set_iotrace (argv[targ_index + 1]);
+ if (ccret != NULL)
+ {
+ writeStr (2, ccret);
+ free (ccret);
+ return -1;
+ }
+ targ_index++;
+ break;
+ case 'j':
+ if (precheck == 1)
+ {
+ targ_index++;
+ if (argv[targ_index] == NULL)
+ return 0;
+ break;
+ }
+ if (checkflagterm (argv[targ_index]) == -1) return -1;
+ if (argv[targ_index + 1] == NULL)
+ {
+ dbe_write (2, GTXT ("Argument %s requires a java-profiling argument\n"),
+ argv[targ_index]);
+ return -1;
+ }
+ if (jseen_global != 0)
+ {
+ dupflagseen ('j');
+ return -1;
+ }
+ jseen_global++;
+ ccret = cc->set_java_mode (argv[targ_index + 1]);
+ if (ccret != NULL)
+ {
+ writeStr (2, ccret);
+ free (ccret);
+ return -1;
+ }
+ targ_index++;
+ break;
+ case 'J':
+ if (precheck == 1)
+ {
+ targ_index++;
+ if (argv[targ_index] == NULL)
+ return 0;
+ break;
+ }
+ if (checkflagterm (argv[targ_index]) == -1) return -1;
+ if (argv[targ_index + 1] == NULL)
+ {
+ dbe_write (2, GTXT ("Argument %s requires a java argument\n"),
+ argv[targ_index]);
+ return -1;
+ }
+ if (Jseen != 0)
+ {
+ dupflagseen ('J');
+ return -1;
+ }
+ Jseen++;
+ ccret = cc->set_java_args (argv[targ_index + 1]);
+ if (ccret != NULL)
+ {
+ writeStr (2, ccret);
+ free (ccret);
+ return -1;
+ }
+ targ_index++;
+ break;
+ case 'F':
+ if (precheck == 1)
+ {
+ targ_index++;
+ if (argv[targ_index] == NULL)
+ return 0;
+ break;
+ }
+ if (checkflagterm (argv[targ_index]) == -1)
+ return -1;
+ if (argv[targ_index + 1] == NULL)
+ {
+ dbe_write (2, GTXT ("Argument %s requires a descendant-following argument\n"),
+ argv[targ_index]);
+ return -1;
+ }
+ if (Fseen != 0)
+ {
+ dupflagseen ('F');
+ return -1;
+ }
+ Fseen++;
+ ccret = cc->set_follow_mode (argv[targ_index + 1]);
+ if (ccret != NULL)
+ {
+ writeStr (2, ccret);
+ free (ccret);
+ return -1;
+ }
+ targ_index++;
+ break;
+ case 'a':
+ if (precheck == 1)
+ {
+ targ_index++;
+ if (argv[targ_index] == NULL)
+ return 0;
+ break;
+ }
+ if (checkflagterm (argv[targ_index]) == -1)
+ return -1;
+ if (argv[targ_index + 1] == NULL)
+ {
+ dbe_write (2, GTXT ("Argument %s requires a load-object archiving argument\n"),
+ argv[targ_index]);
+ return -1;
+ }
+ if (Aseen != 0)
+ {
+ dupflagseen ('a');
+ return -1;
+ }
+ Aseen++;
+ ccret = cc->set_archive_mode (argv[targ_index + 1]);
+ if (ccret != NULL)
+ {
+ writeStr (2, ccret);
+ free (ccret);
+ return -1;
+ }
+ targ_index++;
+ break;
+ case 'C':
+ if (precheck == 1)
+ {
+ targ_index++;
+ if (argv[targ_index] == NULL)
+ return 0;
+ break;
+ }
+ if (checkflagterm (argv[targ_index]) == -1)
+ return -1;
+ if (argv[targ_index + 1] == NULL)
+ {
+ dbe_write (2, GTXT ("Argument %s must be followed by a comment\n"),
+ argv[targ_index]);
+ return -1;
+ }
+ if (nlabels == MAXLABELS)
+ {
+ dbe_write (2, GTXT ("No more than %d comments may be specified\n"),
+ MAXLABELS);
+ return -1;
+ }
+ label[nlabels] = argv[targ_index + 1];
+ nlabels++;
+ targ_index++;
+ break;
+ case 'n':
+ case 'v':
+ case 'V':
+ if (precheck == 1)
+ break;
+ do_flag (&argv[targ_index][1]);
+ break;
+ case 'Z':
+ // special undocumented argument for debug builds only to allow analyzer to
+ // LD_PRELOAD mem.so for the target it spawns
+ mem_so_me = true;
+ break;
+ case '-':
+ if (strcmp (argv[targ_index], NTXT ("--verbose")) == 0)
+ do_flag ("v");
+ else if (strcmp (argv[targ_index], "--outfile") == 0)
+ {
+ if (precheck == 0)
+ {
+ targ_index++;
+ if (argv[targ_index] == NULL)
+ return 0;
+ break;
+ }
+ // process this argument now
+ if (argv[targ_index + 1] == NULL)
+ {
+ dbe_write (2, GTXT ("Argument %s requires a file argument\n"),
+ argv[targ_index]);
+ return -1;
+ }
+ if (ofseen != 0)
+ {
+ dupflagseen (argv[targ_index]);
+ return -1;
+ }
+ ofseen++;
+ if (outredirect == NULL)
+ {
+ outredirect = argv[targ_index + 1];
+ set_output ();
+ } // else already redirected; ignore with no message
+ targ_index++;
+ }
+ else
+ {
+ dbe_write (2, GTXT ("collect: unrecognized argument `%s'\n"), argv[targ_index]);
+ return -1;
+ }
+ break;
+ default:
+ dbe_write (2, GTXT ("collect: unrecognized argument `%s'\n"), argv[targ_index]);
+ return -1;
+ }
+ }
+ if (targ_index >= argc)
+ return -1;
+ if (argv[targ_index] == NULL)
+ {
+ if (precheck == 1)
+ return 0;
+ if (cc->get_attach_pid () != 0) /* no target is OK, if we're attaching */
+ return 0;
+ writeStr (2, GTXT ("Name of target must be specified\n"));
+ return -1;
+ }
+ if (expName)
+ {
+ ccwarn = NULL;
+ ccret = cc->set_expt (expName, &ccwarn, overwriteExp);
+ if (ccwarn)
+ {
+ writeStr (2, ccwarn);
+ free (ccwarn);
+ }
+ if (ccret)
+ {
+ writeStr (2, ccret);
+ return -1;
+ }
+ }
+ if (cc->get_attach_pid () != 0)
+ {
+ writeStr (2, GTXT ("Name of target must not be specified when -P is used\n"));
+ return -1;
+ }
+ return targ_index;
+}
+
+int
+collect::checkflagterm (const char *c)
+{
+ if (c[2] != 0)
+ {
+ dbe_write (2, GTXT ("collect: unrecognized argument `%s'\n"), c);
+ return -1;
+ }
+ return 0;
+}
+
+int
+collect::do_flag (const char *flags)
+{
+ char *s;
+ for (int i = 0;; i++)
+ {
+ switch (flags[i])
+ {
+ case 0: // end of string
+ return 0;
+ case 'n':
+ disabled = 1;
+ if (verbose != 1)
+ {
+// Ruud
+ Application::print_version_info ();
+/*
+ dbe_write (2, NTXT ("GNU %s version %s\n"),
+ get_basename (prog_name), VERSION);
+*/
+ verbose = 1;
+ }
+ break;
+ case 'x':
+ s = cc->set_debug_mode (1);
+ if (s)
+ {
+ writeStr (2, s);
+ free (s);
+ }
+ break;
+ case 'v':
+ if (verbose != 1)
+ {
+// Ruud
+ Application::print_version_info ();
+/*
+ dbe_write (2, NTXT ("GNU %s version %s\n"),
+ get_basename (prog_name), VERSION);
+*/
+ verbose = 1;
+ }
+ break;
+ case 'V':
+// Ruud
+ Application::print_version_info ();
+/*
+ dbe_write (2, NTXT ("GNU %s version %s\n"),
+ get_basename (prog_name), VERSION);
+*/
+ /* no further processing.... */
+ exit (0);
+ }
+ }
+}
+
+/*
+ * traceme - cause the caller to stop at the end of the next exec()
+ * so that a debugger can attach to the new program
+ *
+ * Takes same arguments as execvp()
+ */
+int
+collect::traceme (const char *execvp_file, char *const execvp_argv[])
+{
+ int ret = -1;
+ pid_t pid = fork ();
+ if (pid == 0)
+ { // child
+ // child will set up itself to be PTRACE'd, and then exec the target executable
+ /* reset the SP_COLLECTOR_FOUNDER value to the new pid */
+ pid_t mypid = getpid ();
+ char *ev = dbe_sprintf (NTXT ("%s=%d"), SP_COLLECTOR_FOUNDER, mypid);
+ if (putenv (ev) != 0)
+ {
+ dbe_write (2, GTXT ("fork-child: Can't putenv of \"%s\": run aborted\n"), ev);
+ return 1;
+ }
+ ptrace (PTRACE_TRACEME, 0, NULL, NULL); // initiate trace
+ ret = execvp (execvp_file, execvp_argv); // execvp user command
+ return ret; // execvp failed
+ }
+ else if (pid > 0)
+ { // parent
+ int status;
+ if (waitpid (pid, &status, 0) != pid)
+ { // wait for execvp to cause signal
+ writeStr (2, GTXT ("parent waitpid() failed\n"));
+ return -2;
+ }
+ if (!WIFSTOPPED (status))
+ writeStr (2, GTXT ("WIFSTOPPED(status) failed\n"));
+
+ // originally, PTRACE_DETACH would send SIGTSTP, but now we do it here:
+ if (kill (pid, SIGTSTP) != 0)
+ writeStr (2, GTXT ("kill(pid, SIGTSTP) failed\n"));
+ if (ptrace (PTRACE_DETACH, pid, NULL, 0) != 0)
+ { // detach trace
+ writeStr (2, GTXT ("ptrace(PTRACE_DETACH) failed\n"));
+ return -4;
+ }
+ dbe_write (2, GTXT ("Waiting for attach from debugger: pid=%d\n"), (int) pid);
+
+ // wait for an external debugger to attach
+ if (waitpid (pid, &status, 0) != pid)
+ { // keep parent alive until child quits
+ writeStr (2, GTXT ("parent final waitpid() failed\n"));
+ return -5;
+ }
+ }
+ else
+ return -1; // fork failed
+ exit (0);
+}
+
+void
+collect::dupflagseen (char c)
+{
+ dbe_write (2, GTXT ("Only one -%c argument may be used\n"), c);
+}
+
+void
+collect::dupflagseen (const char *s)
+{
+ dbe_write (2, GTXT ("Only one %s argument may be used\n"), s);
+}
+
+int
+collect::set_output ()
+{
+ static int initial = 1;
+ if (outredirect)
+ {
+ int fd = open (outredirect, O_WRONLY | O_CREAT | O_APPEND,
+ S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
+ if (fd == -1)
+ {
+ dbe_write (2, GTXT ("Warning: Can't open collector output `%s': %s\n"),
+ outredirect, strerror (errno));
+ }
+ else
+ {
+ if ((saved_stdout = dup (1)) == -1 || dup2 (fd, 1) == -1)
+ dbe_write (2, GTXT ("Warning: Can't divert collector %s: %s\n"),
+ NTXT ("stdout"), strerror (errno));
+ if ((saved_stderr = dup (2)) == -1 || dup2 (fd, 2) == -1)
+ dbe_write (2, GTXT ("Warning: Can't divert collector %s: %s\n"),
+ NTXT ("stderr"), strerror (errno));
+ close (fd);
+ if ((saved_stdout != -1) && (saved_stderr != -1))
+ {
+ if (initial)
+ {
+ struct timeval tp;
+ gettimeofday (&tp, NULL);
+ writeStr (2, ctime (&tp.tv_sec));
+ initial = 0;
+ }
+ return 1; // diversion in place
+ }
+ }
+ }
+ return 0; // no diversion
+}
+
+void
+collect::reset_output ()
+{
+ if (saved_stdout != -1 &&
+ (dup2 (saved_stdout, 1) == -1 || close (saved_stdout)))
+ dbe_write (2, GTXT ("Warning: Can't restore collector stdout: %s\n"),
+ strerror (errno));
+ if (saved_stderr != -1 &&
+ (dup2 (saved_stderr, 2) == -1 || close (saved_stderr)))
+ dbe_write (2, GTXT ("Warning: Can't restore collector stderr: %s\n"),
+ strerror (errno));
+}
+
+void
+collect::usage ()
+{
+
+/*
+ Ruud - Isolate this line because it has an argument. Otherwise it would be at the
+ end of this long list.
+*/
+ printf ( GTXT (
+ "Usage: gprofng collect app [OPTION(S)] TARGET [TARGET_ARGUMENTS]\n")),
+
+/*
+-------------------------------------------------------------------------------
+ For a reason I don't understand, the continuation line(s) need to start at
+ column 26 in order for help2man to do the righ thing. Ruud
+-------------------------------------------------------------------------------
+*/
+ printf ( GTXT (
+ "\n"
+ "Collect performance data on the target program. In addition to Program\n"
+ "Counter PC) sampling, hardware event counters and various tracing options\n"
+ "are supported.\n"
+ "\n"
+ "Options:\n"
+ "\n"
+ " --version print the version number and exit.\n"
+ " --help print usage information and exit.\n"
+ " --verbose {on|off} enable (on) or disable (off) verbose mode; the default is \"off\".\n"
+ "\n"
+ " -p {off|on|lo|hi|<value>} disable (off) or enable (on) clock-profiling using a default\n"
+ " sampling granularity, or enable clock-profiling implicitly by\n"
+ " setting the sampling granularity (lo, hi, or a specific value\n"
+ " in ms); by default clock profiling is enabled.\n"
+ "\n"
+ " -h {<ctr_def>...,<ctr_n_def>} enable hardware event counter profiling and select\n"
+ " the counter(s); to see the supported counters on this system use\n"
+ " the -h option without other arguments.\n"
+ "\n"
+ " -o <exp_name> specify the name for (and path to) the experiment directory; the\n"
+ " the default path is the current directory.\n"
+ "\n"
+ " -O <exp_name> the same as -o, but unlike the -o option, silently overwrite an\n"
+ " existing experiment directory with the same name.\n"
+ "\n"
+ " -C <label> add up to 10 comment labels to the experiment; comments appear in\n"
+ " the notes section of the header.\n"
+ "\n"
+ " -j {on|off|<path>} enable (on), or disable (off) Java profiling when the target\n"
+ " program is a JVM; optionally set the <path> to a non-default JVM;\n"
+ " the default is \"-j on\".\n"
+ "\n"
+ " -J <java-args> specify arguments to the JVM.\n"
+ "\n"
+ " -t <duration>[m|s] specify the duration over which to record data; the default unit\n"
+ " is seconds (s), but can be set to minutes (m).\n"
+ "\n"
+ " -n dry run; display several run-time settings, but do not run the\n"
+ " target, or collect performance data.\n"
+ "\n"
+ " -y <signal>[,r] specify delayed initialization and a pause/resume signal; by default\n"
+ " the target starts in paused mode; if the optional r keyword is\n"
+ " provided, start in resumed mode.\n"
+ "\n"
+ " -F {off|on|=<regex>} control to follow descendant processes; disable (off), enable (on),\n"
+ " or collect data on all descendant processes whose name matches the\n"
+ " specified regular expression; the default is \"-F on\".\n"
+ "\n"
+ " -a {off|on|ldobjects|src|usedldobjects|usedsrc} specify archiving of binaries and other files;\n"
+ " in addition to disable this feature (off), or enable archiving off all\n"
+ " loadobjects and sources (on), the other options support a more\n"
+ " refined selection. All of these options enable archiving, but the\n"
+ " keyword controls what exactly is selected: all load objects (ldobjects),\n"
+ " all source files (src), the loadobjects asscoiated with a program counter\n"
+ " (usedldobjects), or the source files associated with a program counter\n"
+ " (usedsrc); the default is \"-a ldobjects\".\n"
+ "\n"
+ " -S {off|on|<seconds>} disable (off) or enable (on) periodic sampling of process-wide resource\n"
+ " utilization; by default sampling occurs every second; use the <seconds>\n"
+ " option to change this; the default is \"-S on\".\n"
+ "\n"
+ " -l <signal> specify a signal that will trigger a sample of process-wide resource utilization.\n"
+ "\n"
+ " -s <option>[,<API>] enable synchronization wait tracing; <option> is used to define the specifics\n"
+ " of the tracing (on, off, <threshold>, or all); <API> is used to select the API:\n"
+ " \"n\" selects native/Pthreads, \"j\" selects Java, and \"nj\" selects both;\n"
+ " the default is \"-s off\".\n"
+ "\n"
+ " -H {off|on} disable (off), or enable (on) heap tracing; the default is \"-H off\".\n"
+ "\n"
+ " -i {off|on} disable (off), or enable (on) I/O tracing; the default is \"-i off\".\n"
+ "\n"
+ "Documentation:\n"
+ "\n"
+ "A getting started guide for gprofng is maintained as a Texinfo manual. If the info and\n"
+ "gprofng programs are properly installed at your site, the command \"info gprofng\"\n"
+ "should give you access to this document.\n"
+ "\n"
+ "See also:\n"
+ "\n"
+ "gprofng(1), gp-archive(1), gp-display-html(1), gp-display-src(1), gp-display-text(1)\n"));
+/*
+ char *s = dbe_sprintf (GTXT ("Usage: %s <args> target <target-args>\n"),
+ whoami);
+ writeStr (usage_fd, s);
+ free (s);
+ writeStr (usage_fd, GTXT (" -p {lo|on|hi|off|<value>}\tspecify clock-profiling\n"));
+ writeStr (usage_fd, GTXT ("\t`lo' per-thread rate of ~10 samples/second\n"));
+ writeStr (usage_fd, GTXT ("\t`on' per-thread rate of ~100 samples/second (default)\n"));
+ writeStr (usage_fd, GTXT ("\t`hi' per-thread rate of ~1000 samples/second\n"));
+ writeStr (usage_fd, GTXT ("\t`off' disable clock profiling\n"));
+ writeStr (usage_fd, GTXT ("\t<value> specify profile timer period in millisec.\n"));
+ s = dbe_sprintf (GTXT ("\t\t\tRange on this system is from %.3f to %.3f millisec.\n\t\t\tResolution is %.3f millisec.\n"),
+ (double) cc->get_clk_min () / 1000.,
+ (double) cc->get_clk_max () / 1000.,
+ (double) cc->get_clk_res () / 1000.);
+ writeStr (usage_fd, s);
+ free (s);
+ writeStr (usage_fd, GTXT (" -h <ctr_def>...[,<ctr_n_def>]\tspecify HW counter profiling\n"));
+ s = dbe_sprintf (GTXT ("\tto see the supported HW counters on this machine, run \"%s -h\" with no other arguments\n"),
+ whoami);
+ writeStr (usage_fd, s);
+ free (s);
+ writeStr (usage_fd, GTXT (" -s <threshold>[,<scope>]\tspecify synchronization wait tracing\n"));
+ writeStr (usage_fd, GTXT ("\t<scope> is \"j\" for tracing Java-APIs, \"n\" for tracing native-APIs, or \"nj\" for tracing both\n"));
+ writeStr (usage_fd, GTXT (" -H {on|off}\tspecify heap tracing\n"));
+ writeStr (usage_fd, GTXT (" -i {on|off}\tspecify I/O tracing\n"));
+ writeStr (usage_fd, GTXT (" -N <lib>\tspecify library to exclude count from instrumentation (requires -c also)\n"));
+ writeStr (usage_fd, GTXT (" \tmultiple -N arguments can be provided\n"));
+ writeStr (usage_fd, GTXT (" -j {on|off|path}\tspecify Java profiling\n"));
+ writeStr (usage_fd, GTXT (" -J <java-args>\tspecify arguments to Java for Java profiling\n"));
+ writeStr (usage_fd, GTXT (" -t <duration>\tspecify time over which to record data\n"));
+ writeStr (usage_fd, GTXT (" -n\tdry run -- don't run target or collect performance data\n"));
+ writeStr (usage_fd, GTXT (" -y <signal>[,r]\tspecify delayed initialization and pause/resume signal\n"));
+ writeStr (usage_fd, GTXT ("\tWhen set, the target starts in paused mode;\n\t if the optional r is provided, it starts in resumed mode\n"));
+ writeStr (usage_fd, GTXT (" -F {on|off|=<regex>}\tspecify following descendant processes\n"));
+ writeStr (usage_fd, GTXT (" -a {on|ldobjects|src|usedldobjects|usedsrc|off}\tspecify archiving of binaries and other files;\n"));
+ writeStr (usage_fd, GTXT (" -S {on|off|<seconds>}\t Set the interval for periodic sampling of process-wide resource utilization\n"));
+ writeStr (usage_fd, GTXT (" -l <signal>\tspecify signal that will trigger a sample of process-wide resource utilization\n"));
+ writeStr (usage_fd, GTXT (" -o <expt>\tspecify experiment name\n"));
+ writeStr (usage_fd, GTXT (" --verbose\tprint expanded log of processing\n"));
+ writeStr (usage_fd, GTXT (" -C <label>\tspecify comment label (up to 10 may appear)\n"));
+ writeStr (usage_fd, GTXT (" -V|--version\tprint version number and exit\n"));
+*/
+ /* don't document this feature */
+ // writeStr (usage_fd, GTXT(" -Z\tPreload mem.so, and launch target [no experiment]\n") );
+/*
+ writeStr (usage_fd, GTXT ("\n See the gp-collect(1) man page for more information\n"));
+*/
+
+#if 0
+ /* print an extended usage message */
+ /* find a Java for Java profiling, set Java on to check Java */
+ find_java ();
+ cc->set_java_mode (NTXT ("on"));
+
+ /* check for variable-clock rate */
+ unsigned char mode = COL_CPUFREQ_NONE;
+ get_cpu_frequency (&mode);
+ if (mode != COL_CPUFREQ_NONE)
+ writeStr (usage_fd, GTXT ("NOTE: system has variable clock frequency, which may cause variable program run times.\n"));
+
+ /* show the experiment that would be run */
+ writeStr (usage_fd, GTXT ("\n Default experiment:\n"));
+ char *ccret = cc->setup_experiment ();
+ if (ccret != NULL)
+ {
+ writeStr (usage_fd, ccret);
+ free (ccret);
+ exit (1);
+ }
+ cc->delete_expt ();
+ ccret = cc->show (1);
+ if (ccret != NULL)
+ {
+ writeStr (usage_fd, ccret);
+ free (ccret);
+ }
+#endif
+}
+
+void
+collect::short_usage ()
+{
+ if (no_short_usage == 0)
+ dbe_write (usage_fd, GTXT ("Run \"%s --help\" for a usage message.\n"), whoami);
+}
+
+void
+collect::show_hwc_usage ()
+{
+ usage_fd = 1;
+ short_usage ();
+ cc->setup_hwc ();
+ hwc_usage (false, whoami, NULL);
+}
+
+void
+collect::writeStr (int f, const char *buf)
+{
+ if (buf != NULL)
+ write (f, buf, strlen (buf));
+}
diff --git a/gprofng/src/gp-display-src.cc b/gprofng/src/gp-display-src.cc
new file mode 100644
index 00000000000..ca7853d1802
--- /dev/null
+++ b/gprofng/src/gp-display-src.cc
@@ -0,0 +1,752 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <unistd.h>
+#include <fcntl.h>
+
+#include "util.h"
+#include "DbeApplication.h"
+#include "DbeSession.h"
+#include "Function.h"
+#include "LoadObject.h"
+#include "Module.h"
+#include "DbeView.h"
+#include "Print.h"
+#include "DbeFile.h"
+#include "Command.h"
+
+class er_src : public DbeApplication
+{
+public:
+ er_src (int argc, char *argv[]);
+ void start (int argc, char *argv[]);
+
+private:
+
+ // override methods in base class
+ void usage ();
+ int check_args (int argc, char *argv[]);
+ void run_args (int argc, char *argv[]);
+
+ enum Obj_Types
+ {
+ OT_EXE_ELF = 0, OT_JAVA_CLASS, OT_JAR_FILE, OT_UNKNOWN
+ };
+
+ void open (char *exe);
+ void dump_annotated (char *name, char* sel, char *src, DbeView *dbev,
+ bool is_dis, bool first);
+ void checkJavaClass (char *exe);
+ void print_header (bool first, const char* text);
+ void proc_cmd (CmdType cmd_type, bool first, char *arg1,
+ const char *arg2, const char *arg3 = NULL);
+ FILE *set_outfile (char *cmd, FILE *&set_file);
+
+ bool is_java_class () { return obj_type == OT_JAVA_CLASS; }
+
+ int dbevindex;
+ DbeView *dbev;
+ LoadObject *lo;
+ Obj_Types obj_type;
+ const char *out_fname;
+ FILE *out_file;
+ bool isDisasm;
+ bool isFuncs;
+ bool isDFuncs;
+ bool isSrc;
+ bool v_opt;
+ int multiple;
+ char *str_compcom;
+ bool hex_visible;
+ int src_visible;
+ int vis_src;
+ int vis_dis;
+ int threshold_src;
+ int threshold_dis;
+ int threshold;
+ int vis_bits;
+};
+
+static int
+real_main (int argc, char *argv[])
+{
+ er_src *src = new er_src (argc, argv);
+ src->start (argc, argv);
+ delete src;
+ return 0;
+}
+
+int
+main (int argc, char *argv[])
+{
+ return catch_out_of_memory (real_main, argc, argv);
+}
+
+er_src::er_src (int argc, char *argv[])
+: DbeApplication (argc, argv)
+{
+ obj_type = OT_UNKNOWN;
+ out_fname = "<stdout>";
+ out_file = stdout;
+ isDisasm = false;
+ isFuncs = false;
+ isDFuncs = false;
+ isSrc = false;
+ v_opt = false;
+ multiple = 0;
+ lo = NULL;
+}
+
+static int
+FuncNameCmp (const void *a, const void *b)
+{
+ Function *item1 = *((Function **) a);
+ Function *item2 = *((Function **) b);
+ return strcmp (item1->get_mangled_name (), item2->get_mangled_name ());
+}
+
+static int
+FuncAddrCmp (const void *a, const void *b)
+{
+ Function *item1 = *((Function **) a);
+ Function *item2 = *((Function **) b);
+ return (item1->img_offset == item2->img_offset) ?
+ FuncNameCmp (a, b) : item1->img_offset > item2->img_offset ? 1 : -1;
+}
+
+void
+er_src::usage ()
+{
+
+/*
+ Ruud - Isolate this line because it has an argument. Otherwise it would be at the
+ end of a long usage list.
+*/
+ printf ( GTXT (
+ "Usage: gprofng display src [OPTION(S)] TARGET-OBJECT\n"));
+
+ printf ( GTXT (
+ "\n"
+ "Display the source code listing, or source code interleaved with disassembly code,\n"
+ "as extracted from the target object (an executable, shared object, object file, or\n"
+ "a Java .class file).\n"
+ "\n"
+ "Options:\n"
+ "\n"
+ " --version print the version number and exit.\n"
+ " --help print usage information and exit.\n"
+ " --verbose {on|off} enable (on) or disable (off) verbose mode; the default is \"off\".\n"
+ "\n"
+ " -func list all the functions from the given object.\n"
+ "\n"
+ " -source item tag show the source code for item; the tag is used to\n"
+ " differentiate in case of multiple occurences with\n"
+ " the same name; the combination of \"all -1\" selects\n"
+ " all the functions in the object; the default is\n"
+ " \"-source all -1\".\n"
+ "\n"
+ " -disasm item tag show the source code, interleaved with the disassembled\n"
+ " instructions; the same definitions for item and tag apply.\n"
+ "\n"
+ " -outfile <filename> write results to file <filename>; a dash (-) writes to\n"
+ " stdout; this is also the default; note that this only\n"
+ " affects options included to the right of this option.\n"
+ "\n"
+ "Documentation:\n"
+ "\n"
+ "A getting started guide for gprofng is maintained as a Texinfo manual. If the info and\n"
+ "gprofng programs are properly installed at your site, the command \"info gprofng\"\n"
+ "should give you access to this document.\n"
+ "\n"
+ "See also:\n"
+ "\n"
+ "gprofng(1), gp-archive(1), gp-collect-app(1), gp-display-html(1), gp-display-text(1)\n"));
+/*
+ printf (GTXT ("Usage: %s [OPTION] a.out/.so/.o/.class\n\n"), whoami);
+ printf (GTXT (" -func List all the functions from the given object\n"
+ " -source, -src item tag Show the annotated source for the listed item\n"
+ " -disasm item tag Include the disassembly in the listing\n"
+ " -V Print the current release version of er_src\n"
+ " -cc, -scc, -dcc com_spec Define the compiler commentary classes to show\n"
+ " -outfile filename Open filename for output\n"));
+*/
+ exit (0);
+}
+
+void
+er_src::start (int argc, char *argv[])
+{
+ dbevindex = dbeSession->createView (0, -1);
+ dbev = dbeSession->getView (dbevindex);
+
+ // get options
+ check_args (argc, argv);
+ run_args (argc, argv);
+ if (out_file != stdout)
+ fclose (out_file);
+}
+
+FILE *
+er_src::set_outfile (char *cmd, FILE *&set_file)
+{
+ FILE *new_file;
+ if (!strcasecmp (cmd, "-"))
+ {
+ new_file = stdout;
+ out_fname = "<stdout>";
+ }
+ else
+ {
+ char *cmdpath;
+ char *fname = strstr (cmd, "~/");
+ // Handle ~ in file names
+ char *home = getenv ("HOME");
+ if (fname != NULL && home != NULL)
+ cmdpath = dbe_sprintf ("%s/%s", home, fname + 2);
+ else if ((fname = strstr (cmd, "~")) != NULL && home != NULL)
+ cmdpath = dbe_sprintf ("/home/%s", fname + 1);
+ else
+ cmdpath = strdup (cmd);
+ new_file = fopen (cmdpath, "w");
+ if (new_file == NULL)
+ {
+ fprintf (stderr, GTXT ("Unable to open file: %s"), cmdpath);
+ free (cmdpath);
+ return NULL;
+ }
+ out_fname = cmdpath;
+ }
+ if (set_file && (set_file != stdout))
+ fclose (set_file);
+
+ set_file = new_file;
+ return set_file;
+}
+
+void
+er_src::proc_cmd (CmdType cmd_type, bool first, char *arg1,
+ const char *arg2, const char *arg3)
+{
+ Cmd_status status;
+ Module *module;
+ Function *fitem;
+ int mindex, findex;
+ switch (cmd_type)
+ {
+ case SOURCE:
+ dbev->set_view_mode (VMODE_USER);
+ print_anno_file (arg1, arg2, arg3, false,
+ stdout, stdin, out_file, dbev, false);
+ break;
+ case DISASM:
+ dbev->set_view_mode (VMODE_MACHINE);
+ print_header (first, GTXT ("Annotated disassembly\n"));
+ print_anno_file (arg1, arg2, arg3, true,
+ stdout, stdin, out_file, dbev, false);
+ break;
+ case OUTFILE:
+ if (arg1)
+ set_outfile (arg1, out_file);
+ break;
+ case FUNCS:
+ print_header (false, GTXT ("Function list\n"));
+ fprintf (out_file, GTXT ("Functions sorted in lexicographic order\n"));
+ fprintf (out_file, GTXT ("\nLoad Object: %s\n\n"), lo->get_name ());
+ if (lo->wsize == W32)
+ fprintf (out_file, GTXT (" Address Size Name\n\n"));
+ else
+ fprintf (out_file, GTXT (" Address Size Name\n\n"));
+
+ Vec_loop (Module*, lo->seg_modules, mindex, module)
+ {
+ module->functions->sort (FuncNameCmp);
+ const char *fmt = (lo->wsize == W32) ?
+ GTXT (" 0x%08llx %8lld %s\n") :
+ GTXT (" 0x%016llx %16lld %s\n");
+ Vec_loop (Function*, module->functions, findex, fitem)
+ {
+ fprintf (out_file, fmt,
+ (ull_t) fitem->img_offset,
+ (ull_t) fitem->size,
+ fitem->get_name ());
+ }
+ }
+ break;
+ case DUMPFUNC:
+ lo->functions->sort (FuncAddrCmp);
+ print_header (first, GTXT ("Dump functions\n"));
+ lo->dump_functions (out_file);
+ first = false;
+ break;
+ case SCOMPCOM:
+ status = dbev->proc_compcom (arg1, true, false);
+ if (status != CMD_OK)
+ fprintf (stderr, GTXT ("Error: %s"), Command::get_err_string (status));
+ break;
+ case DCOMPCOM:
+ status = dbev->proc_compcom (arg1, false, false);
+ if (status != CMD_OK)
+ fprintf (stderr, GTXT ("Error: %s"), Command::get_err_string (status));
+ break;
+ case COMPCOM:
+ status = dbev->proc_compcom (arg1, true, false);
+ if (status != CMD_OK)
+ fprintf (stderr, GTXT ("Error: %s: %s"), Command::get_err_string (status), arg1);
+ status = dbev->proc_compcom (arg1, false, false);
+ if (status != CMD_OK)
+ fprintf (stderr, GTXT ("Error: %s: %s"), Command::get_err_string (status), arg1);
+ break;
+ case HELP:
+ usage ();
+ break;
+ case VERSION_cmd:
+ if (out_file != stdout)
+// Ruud
+ Application::print_version_info ();
+/*
+ fprintf (out_file, "GNU %s version %s\n", get_basename (prog_name), VERSION);
+*/
+ break;
+ default:
+ fprintf (stderr, GTXT ("Invalid option"));
+ break;
+ }
+}
+
+void
+er_src::run_args (int argc, char *argv[])
+{
+ CmdType cmd_type;
+ int arg_count, cparam;
+ char *arg;
+ char *arg1;
+ const char *arg2;
+ bool first = true;
+ bool space;
+ Module *module;
+ int mindex;
+
+ for (int i = 1; i < argc; i++)
+ {
+ if (*argv[i] != '-')
+ {
+ if (!multiple)
+ { // er_src -V exe
+ space = false;
+ dbev->set_view_mode (VMODE_USER);
+ print_header (first, GTXT ("Annotated source\n"));
+ Vec_loop (Module*, lo->seg_modules, mindex, module)
+ {
+ if ((module->flags & MOD_FLAG_UNKNOWN) != 0 ||
+ module->lang_code == Sp_lang_unknown)
+ continue;
+ if (space)
+ fprintf (out_file, "\n");
+ print_anno_file (module->file_name, "1", NULL, false,
+ stdout, stdin, out_file, dbev, false);
+ space = true;
+ }
+ }
+ break;
+ }
+ if (strncmp (argv[i], NTXT ("--whoami="), 9) == 0)
+ {
+ whoami = argv[i] + 9;
+ continue;
+ }
+ switch (cmd_type = Command::get_command (argv[i] + 1, arg_count, cparam))
+ {
+ case SOURCE:
+ case DISASM:
+ {
+ i += arg_count;
+ multiple++;
+ if (i >= argc || argv[i] == NULL ||
+ (*(argv[i]) == '-' && atoi (argv[i]) != -1) || i + 1 == argc)
+ {
+ i--;
+ arg = argv[i];
+ arg2 = "1";
+ }
+ else
+ {
+ arg = argv[i - 1];
+ if (*(argv[i]) == '-' && atoi (argv[i]) == -1 &&
+ streq (arg, NTXT ("all")))
+ {
+ space = false;
+ if (cmd_type == SOURCE)
+ print_header (first, GTXT ("Annotated source\n"));
+ else
+ print_header (first, GTXT ("Annotated disassembly\n"));
+ Vec_loop (Module*, lo->seg_modules, mindex, module)
+ {
+ if ((module->flags & MOD_FLAG_UNKNOWN) != 0 ||
+ module->lang_code == Sp_lang_unknown)
+ continue;
+ if (space)
+ fprintf (out_file, "\n");
+ proc_cmd (cmd_type, first, module->file_name, "1");
+ space = true;
+ }
+ first = false;
+ break;
+ }
+ arg2 = argv[i];
+ }
+ char *fcontext = NULL;
+ arg1 = parse_fname (arg, &fcontext);
+ if (arg1 == NULL)
+ {
+ fprintf (stderr, GTXT ("Error: Invalid function/file setting: %s\n"), arg1);
+ free (fcontext);
+ break;
+ }
+ proc_cmd (cmd_type, first, arg1, arg2, fcontext);
+ free (arg1);
+ free (fcontext);
+ first = false;
+ break;
+ }
+ case OUTFILE:
+ case FUNCS:
+ case DUMPFUNC:
+ case COMPCOM:
+ case SCOMPCOM:
+ case DCOMPCOM:
+ case VERSION_cmd:
+ case HELP:
+ proc_cmd (cmd_type, first, (arg_count > 0) ? argv[i + 1] : NULL,
+ (arg_count > 1) ? argv[i + 2] : NULL);
+ i += arg_count;
+ break;
+ default:
+ if (streq (argv[i] + 1, NTXT ("all")) || streq (argv[i] + 1, NTXT ("dall")))
+ {
+ first = false;
+ multiple++;
+ if (streq (argv[i] + 1, NTXT ("all")))
+ proc_cmd (FUNCS, first, NULL, NULL);
+ else
+ proc_cmd (DUMPFUNC, first, NULL, NULL);
+ space = false;
+ print_header (first, GTXT ("Annotated source\n"));
+ Vec_loop (Module*, lo->seg_modules, mindex, module)
+ {
+ if ((module->flags & MOD_FLAG_UNKNOWN) != 0 ||
+ module->lang_code == Sp_lang_unknown)
+ continue;
+ if (space)
+ fprintf (out_file, "\n");
+ proc_cmd (SOURCE, first, module->file_name, "1");
+ space = true;
+ }
+ print_header (first, GTXT ("Annotated disassembly\n"));
+ Vec_loop (Module*, lo->seg_modules, mindex, module)
+ {
+ if ((module->flags & MOD_FLAG_UNKNOWN) != 0 ||
+ module->lang_code == Sp_lang_unknown)
+ continue;
+ if (space)
+ fprintf (out_file, "\n");
+ proc_cmd (DISASM, first, module->file_name, "1");
+ space = true;
+ }
+ }
+ else
+ {
+ proc_cmd (cmd_type, first, (arg_count > 0) ? argv[i + 1] : NULL,
+ (arg_count > 1) ? argv[i + 2] : NULL);
+ i += arg_count;
+ break;
+ }
+ }
+ }
+}
+
+int
+er_src::check_args (int argc, char *argv[])
+{
+ CmdType cmd_type = UNKNOWN_CMD;
+ int arg_count, cparam;
+ int i;
+ char *exe;
+ bool first = true;
+ if (argc == 1)
+ usage ();
+
+ // If any comments from the .rc files, log them to stderr
+ Emsg * rcmsg = fetch_comments ();
+ while (rcmsg != NULL)
+ {
+ fprintf (stderr, "%s: %s\n", prog_name, rcmsg->get_msg ());
+ rcmsg = rcmsg->next;
+ }
+
+ // Parsing the command line
+ opterr = 0;
+ exe = NULL;
+ for (i = 1; i < argc; i++)
+ {
+ if (*argv[i] != '-')
+ {
+ exe = argv[i];
+ if (i == 1)
+ { // er_src exe ?
+ if (!exe)
+ usage ();
+ if (argc == 3) // er_src exe file
+ usage ();
+ }
+ else if (v_opt && !multiple && !exe && !str_compcom) // just er_src -V
+ exit (0);
+ if (argc < i + 1 || argc > i + 3)
+ usage ();
+ i++;
+ if (argc > i)
+ usage ();
+ open (exe);
+ return i;
+ }
+ switch (cmd_type = Command::get_command (argv[i] + 1, arg_count, cparam))
+ {
+ case WHOAMI:
+ whoami = argv[i] + 1 + cparam;
+ break;
+ case HELP:
+ i += arg_count;
+ multiple++;
+ usage ();
+ break;
+ case VERSION_cmd:
+ if (first)
+ {
+// Ruud
+ Application::print_version_info ();
+/*
+ printf ("GNU %s version %s\n", get_basename (prog_name), VERSION);
+*/
+ v_opt = true;
+ first = false;
+ }
+ break;
+ case SOURCE:
+ case DISASM:
+ i += arg_count;
+ multiple++;
+ isDisasm = true;
+ if (i >= argc || argv[i] == NULL ||
+ (*(argv[i]) == '-' && atoi (argv[i]) != -1) || (i + 1 == argc))
+ i--;
+ break;
+ case DUMPFUNC:
+ i += arg_count;
+ multiple++;
+ break;
+ case FUNCS:
+ i += arg_count;
+ multiple++;
+ break;
+ case OUTFILE:
+ case COMPCOM:
+ case SCOMPCOM:
+ case DCOMPCOM:
+ i += arg_count;
+ break;
+ default:
+ if (!(streq (argv[i] + 1, NTXT ("all")) ||
+ streq (argv[i] + 1, NTXT ("dall"))))
+ {
+ fprintf (stderr, "Error: invalid option: `%s'\n", argv[i]);
+ exit (1);
+ }
+ }
+ }
+ if (!exe && !(argc == 2 && cmd_type == VERSION_cmd))
+ usage ();
+ return i;
+}
+
+void
+er_src::checkJavaClass (char* exe)
+{
+ unsigned char cf_buf[4];
+ unsigned int magic_number;
+ int fd = ::open (exe, O_RDONLY | O_LARGEFILE);
+ if (fd == -1)
+ return;
+ if (sizeof (cf_buf) == read_from_file (fd, cf_buf, sizeof (cf_buf)))
+ {
+ magic_number = cf_buf[0] << 24;
+ magic_number |= cf_buf[1] << 16;
+ magic_number |= cf_buf[2] << 8;
+ magic_number |= cf_buf[3];
+ if (magic_number == 0xcafebabe)
+ obj_type = OT_JAVA_CLASS;
+ }
+ close (fd);
+}
+
+void
+er_src::print_header (bool first, const char* text)
+{
+ if (!first)
+ fprintf (out_file, "\n");
+ if (multiple > 1)
+ {
+ fprintf (out_file, NTXT ("%s"), text);
+ fprintf (out_file, "---------------------------------------\n");
+ }
+}
+
+void
+er_src::dump_annotated (char *name, char *sel, char *src, DbeView *dbevr,
+ bool is_dis, bool first)
+{
+ Module *module;
+ bool space;
+ int mindex;
+ print_header (first, (is_dis) ? ((is_java_class ()) ?
+ GTXT ("Annotated bytecode\n") :
+ GTXT ("Annotated disassembly\n")) :
+ GTXT ("Annotated source\n"));
+ if (!name)
+ {
+ space = false;
+ Vec_loop (Module*, lo->seg_modules, mindex, module)
+ {
+ if ((module->flags & MOD_FLAG_UNKNOWN) != 0 ||
+ (!is_dis && module->lang_code == Sp_lang_unknown))
+ continue;
+ if (space)
+ fprintf (out_file, "\n");
+ print_anno_file (module->file_name, sel, src, is_dis,
+ stdout, stdin, out_file, dbevr, false);
+ space = true;
+ }
+ }
+ else
+ print_anno_file (name, sel, src, is_dis, stdout, stdin, out_file, dbevr, false);
+}
+
+static bool
+isFatal (bool isDisasm, LoadObject::Arch_status status)
+{
+ if (isDisasm)
+ {
+ switch (status)
+ {
+ // non-fatal errors for disassembly
+ case LoadObject::ARCHIVE_BAD_STABS:
+ case LoadObject::ARCHIVE_NO_STABS:
+ return false;
+ default:
+ return true;
+ }
+ }
+ return true;
+}
+
+void
+er_src::open (char *exe)
+{
+ LoadObject::Arch_status status;
+ char *errstr;
+ Module *module;
+ Vector<Histable*> *module_lst;
+
+ // Construct the Segment structure
+ char *path = strdup (exe);
+ lo = dbeSession->createLoadObject (path);
+ if (NULL == lo->dbeFile->find_file (lo->dbeFile->get_name ()))
+ {
+ fprintf (stderr, GTXT ("%s: Error: unable to open file %s\n"), prog_name, lo->dbeFile->get_name ());
+ exit (1);
+ }
+ checkJavaClass (exe);
+
+ if (is_java_class ())
+ {
+ lo->type = LoadObject::SEG_TEXT;
+ lo->set_platform (Java, Wnone);
+ lo->id = (uint64_t) - 1; // see AnalyzerSession::ask_which for details
+ module = dbeSession->createClassFile (dbe_strdup (exe));
+ module->loadobject = lo;
+ lo->seg_modules->append (module);
+ module->dbeFile->set_location (exe);
+ if (module->readFile () != module->AE_OK)
+ {
+ Emsg *emsg = module->get_error ();
+ if (emsg)
+ {
+ fprintf (stderr, GTXT ("%s: Error: %s\n"), prog_name, emsg->get_msg ());
+ return;
+ }
+ fprintf (stderr, GTXT ("%s: Error: Could not read class file `%s'\n"), prog_name, exe);
+ return;
+ }
+ status = lo->sync_read_stabs ();
+ if (status != LoadObject::ARCHIVE_SUCCESS)
+ {
+ if (status == LoadObject::ARCHIVE_ERR_OPEN)
+ {
+ fprintf (stderr, GTXT ("%s: Error: Could not read class file `%s'\n"), prog_name, exe);
+ return;
+ }
+ else
+ {
+ if (isDisasm)
+ if (status == LoadObject::ARCHIVE_NO_STABS)
+ {
+ fprintf (stderr, GTXT ("%s: Error: `%s' is interface; disassembly annotation not available\n"), prog_name, exe);
+ return;
+ }
+ }
+ }
+ }
+ else
+ {
+ status = lo->sync_read_stabs ();
+ if (status != LoadObject::ARCHIVE_SUCCESS)
+ {
+ errstr = lo->status_str (status);
+ if (errstr)
+ {
+ fprintf (stderr, "%s: %s\n", prog_name, errstr);
+ free (errstr);
+ }
+ if (isFatal (isDisasm, status))
+ return;
+ }
+ obj_type = OT_EXE_ELF;
+
+ // if .o file, then set file as the exe name
+ if (lo->is_relocatable ())
+ {
+ // find the module, if we can
+ module_lst = new Vector<Histable*>;
+ module = dbeSession->map_NametoModule (path, module_lst, 0);
+ if (module == NULL)
+ // Create a module with the right name
+ module = dbeSession->createModule (lo, path);
+ }
+ }
+}
diff --git a/gprofng/src/gp-display-text.cc b/gprofng/src/gp-display-text.cc
new file mode 100644
index 00000000000..71835534e6b
--- /dev/null
+++ b/gprofng/src/gp-display-text.cc
@@ -0,0 +1,2834 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <unistd.h> // isatty
+
+#include "gp-print.h"
+#include "ipcio.h"
+#include "Command.h"
+#include "Dbe.h"
+#include "DbeApplication.h"
+#include "DbeSession.h"
+#include "Experiment.h"
+#include "Emsg.h"
+#include "DbeView.h"
+#include "DataObject.h"
+#include "Function.h"
+#include "Hist_data.h"
+#include "PathTree.h"
+#include "LoadObject.h"
+#include "Function.h"
+#include "FilterSet.h"
+#include "Filter.h"
+#include "MetricList.h"
+#include "MemorySpace.h"
+#include "Module.h"
+#include "util.h"
+#include "i18n.h"
+#include "StringBuilder.h"
+#include "debug.h"
+#include "UserLabel.h"
+
+static char *exe_name;
+static char **new_argv;
+
+void
+reexec ()
+{
+ if (dbeSession != NULL)
+ dbeSession->unlink_tmp_files ();
+ execv (exe_name, new_argv);
+}
+
+/**
+ * Run application under enhance if the following requirements are satisfied:
+ * 1. Environment variable GPROFNG_ENHANCE is not set to "no"
+ * 2. Standard input is terminal
+ * 3. Standard output is terminal
+ * 4. /bin/enhance exists and can work on this system
+ */
+static void
+reexec_enhance (int argc, char *argv[])
+{
+ char *gp_enhance = getenv ("GPROFNG_ENHANCE");
+ if (NULL != gp_enhance && 0 == strcasecmp (gp_enhance, "no"))
+ return; // Do not enhance
+ // Verify that input and output are tty
+ if (!isatty (fileno (stdin))) // stdin is not a terminal
+ return; // Do not enhance
+ if (!isatty (fileno (stdout))) // stdout is not a terminal
+ return; // Do not enhance
+ char *enhance_name = NTXT ("/bin/enhance");
+ struct stat sbuf;
+ int res = stat (enhance_name, &sbuf); // Check if enhance exists
+ if (res == 0)
+ res = system (NTXT ("/bin/enhance /bin/true")); // Check if enhance can work
+ if (res != 0)
+ {
+ fflush (stdout);
+ printf (GTXT ("Warning: History and command editing is not supported on this system.\n"));
+ fflush (stdout);
+ return;
+ }
+ else
+ {
+ printf (GTXT ("Note: History and command editing is supported on this system.\n"));
+ fflush (stdout);
+ }
+ char **nargv = new char*[argc + 2];
+ for (int i = 0; i < argc; i++)
+ nargv[i + 1] = argv[i];
+ nargv[0] = enhance_name;
+ nargv[argc + 1] = NULL;
+ putenv (NTXT ("GPROFNG_ENHANCE=no")); // prevent recursion
+ execv (enhance_name, nargv);
+ // execv failed. Continue to run the program
+ delete[] nargv;
+}
+
+int
+main (int argc, char *argv[])
+{
+ er_print *erprint;
+ int ind = 1;
+ if (argc > ind && *argv[ind] == '-')
+ {
+ int arg_count, cparam;
+ if (Command::get_command (argv[ind] + 1, arg_count, cparam) == WHOAMI)
+ ind = ind + 1 + arg_count;
+ }
+ if (argc > ind && argv[ind] != NULL && *argv[ind] != '-')
+ reexec_enhance (argc, argv);
+
+ // Save argv for reexec())
+ exe_name = argv[0];
+ new_argv = argv;
+
+ if (argc > ind && argv[ind] != NULL && strcmp (argv[ind], "-IPC") == 0)
+ {
+ putenv (NTXT ("LC_NUMERIC=C")); // Use non-localized numeric data in IPC packets
+ erprint = new er_print (argc, argv);
+ theDbeApplication->rdtMode = false;
+ ipc_mainLoop (argc, argv);
+ }
+ else
+ {
+ erprint = new er_print (argc, argv);
+ erprint->start (argc, argv);
+ }
+
+ dbeSession->unlink_tmp_files ();
+ if (DUMP_CALL_STACK)
+ {
+ extern long total_calls_add_stack, total_stacks, total_nodes, call_stack_size[201];
+ fprintf (stderr, NTXT ("total_calls_add_stack=%lld\ntotal_stacks=%lld\ntotal_nodes=%lld\n"),
+ (long long) total_calls_add_stack, (long long) total_stacks, (long long) total_nodes);
+ for (int i = 0; i < 201; i++)
+ if (call_stack_size[i] != 0)
+ fprintf (stderr, NTXT (" call_stack_size[%d] = %6lld\n"), i,
+ (long long) call_stack_size[i]);
+ }
+#if defined(DEBUG)
+ delete erprint;
+#endif
+ return 0;
+}
+
+er_print::er_print (int argc, char *argv[])
+: DbeApplication (argc, argv)
+{
+ out_fname = GTXT ("<stdout>");
+ inp_file = stdin;
+ out_file = stdout;
+ dis_file = stdout;
+ cov_string = NULL;
+ limit = 0;
+ cstack = new Vector<Histable*>();
+ was_QQUIT = false;
+}
+
+er_print::~er_print ()
+{
+ free (cov_string);
+ delete cstack;
+ if (inp_file != stdin)
+ fclose (inp_file);
+}
+
+void
+er_print::start (int argc, char *argv[])
+{
+ Vector<String> *res = theDbeApplication->initApplication (NULL, NULL, NULL);
+ res->destroy ();
+ delete res;
+
+ // Create a view on the session
+ dbevindex = dbeSession->createView (0, -1);
+ dbev = dbeSession->getView (dbevindex);
+ limit = dbev->get_limit ();
+ (void) check_args (argc, argv);
+ int ngood = dbeSession->ngoodexps ();
+ if (ngood == 0)
+ {
+ fprintf (stderr, GTXT ("No valid experiments loaded; exiting\n"));
+ return;
+ }
+ dbeDetectLoadMachineModel (dbevindex);
+ run (argc, argv);
+}
+
+bool
+er_print::free_memory_before_exit ()
+{
+ return was_QQUIT;
+}
+
+void
+er_print::usage ()
+{
+
+/*
+ Ruud - Isolate this line because it has an argument. Otherwise it would be at the
+ end of the long option list.
+*/
+ printf ( GTXT (
+ "Usage: gprofng display text [OPTION(S)] [COMMAND(S)] [-script <script_file>] EXPERIMENT(S)\n"));
+
+ printf ( GTXT (
+ "\n"
+ "Print a plain text version of the various displays supported by gprofng.\n"
+ "\n"
+ "Options:\n"
+ "\n"
+ " --version print the version number and exit.\n"
+ " --help print usage information and exit.\n"
+ " --verbose {on|off} enable (on) or disable (off) verbose mode; the default is \"off\".\n"
+ "\n"
+ " -script <script-file> execute the commands stored in the script file;\n"
+ " this feature may be combined with commands specified\n"
+ " at the command line.\n"
+ "\n"
+ "Commands:\n"
+ "\n"
+ "This tool supports a rich set of commands to control the display of the\n"
+ "data; instead of, or in addition to, including these commands in a script\n"
+ "file, it is also allowed to include such commands at the command line;\n"
+ "in this case, the commands need to be prepended with the \"-\" symbol; the\n"
+ "commands are processed and interpreted left from right, so the order matters;\n"
+ "The gprofng manual documents the commands that are supported.\n"
+ "\n"
+ "If this tool is invoked without options, commands, or a script file, it starts\n"
+ "in interpreter mode. The user can then issue the commands interactively; the\n"
+ "session is terminated with the \"exit\" command in the interpreter.\n"
+ "\n"
+ "Documentation:\n"
+ "\n"
+ "A getting started guide for gprofng is maintained as a Texinfo manual. If the info and\n"
+ "gprofng programs are properly installed at your site, the command \"info gprofng\"\n"
+ "should give you access to this document.\n"
+ "\n"
+ "See also:\n"
+ "\n"
+ "gprofng(1), gp-archive(1), gp-collect-app(1), gp-display-html(1), gp-display-src(1)\n"));
+}
+
+int // returns count of experiments read
+er_print::check_args (int argc, char *argv[])
+{
+ CmdType cmd_type;
+ int arg_count;
+ int cparam;
+ int exp_no;
+ error_msg = NULL;
+
+ Emsg *rcmsg = fetch_comments ();
+ while (rcmsg != NULL)
+ {
+ fprintf (stderr, NTXT ("%s: %s\n"), prog_name, rcmsg->get_msg ());
+ rcmsg = rcmsg->next;
+ }
+ delete_comments ();
+
+ // Set up the list of experiments to add after checking the args
+ Vector<Vector<char*>*> *exp_list = new Vector<Vector<char*>*>();
+
+ // Prescan the command line arguments, processing only a few
+ for (int i = 1; i < argc; i++)
+ {
+ if (*argv[i] != '-')
+ {
+ // we're at the end -- get the list of experiments
+ // Build the list of experiments, and set the searchpath
+ Vector<char*> *list = dbeSession->get_group_or_expt (argv[i]);
+ if (list->size () > 0)
+ {
+ for (int j = 0, list_sz = list->size (); j < list_sz; j++)
+ {
+ char *path = list->fetch (j);
+ if (strlen (path) == 0 || strcmp (path, NTXT ("\\")) == 0)
+ continue;
+ char *p = strrchr (path, '/');
+ if (p)
+ {
+ // there's a directory in front of the name; add it to search path
+ *p = '\0';
+ dbeSession->set_search_path (path, false);
+ }
+ }
+ list->destroy ();
+ list->append (dbe_strdup (argv[i]));
+ exp_list->append (list);
+ }
+ else
+ delete list;
+ continue;
+ }
+
+ // Not at the end yet, treat the next argument as a command
+ switch (cmd_type = Command::get_command (argv[i] + 1, arg_count, cparam))
+ {
+ case WHOAMI:
+ whoami = argv[i] + 1 + cparam;
+ break;
+ case HELP:
+ if (i + 1 + arg_count == argc)
+ {
+ usage();
+ exit (0);
+ }
+ break;
+ case HHELP:
+ Command::print_help (whoami, true, false, stdout);
+ fprintf (stdout, "\n");
+ indxo_list (false, stdout);
+ fprintf (stdout, "\n");
+ mo_list (false, stdout);
+ if (!getenv ("_BUILDING_MANPAGE"))
+ fprintf (stdout, GTXT ("\nSee gprofng(1) for more details\n"));
+ exit (0);
+ case ADD_EXP:
+ case DROP_EXP:
+ case OPEN_EXP:
+ printf (GTXT ("Error: command %s can not appear on the command line\n"), argv[i]);
+ exit (2);
+ case VERSION_cmd:
+ Application::print_version_info ();
+ exit (0);
+ case AMBIGUOUS_CMD:
+ fprintf (stderr, GTXT ("Error: Ambiguous command: %s\n"), argv[i]);
+ exit (2);
+ case UNKNOWN_CMD:
+ fprintf (stderr, GTXT ("Error: Invalid command: %s\n"), argv[i]);
+ exit (2);
+ // it's a plausible argument; see if we process now or later
+ case SOURCE:
+ case DISASM:
+ case CSINGLE:
+ case CPREPEND:
+ case CAPPEND:
+ case FSINGLE:
+ case SAMPLE_DETAIL:
+ case STATISTICS:
+ case HEADER:
+ //skip the arguments to that command
+ i += arg_count;
+ if (i >= argc || end_command (argv[i]))
+ i--;
+ break;
+ case PRINTMODE:
+ case INDXOBJDEF:
+ case ADDPATH:
+ case SETPATH:
+ case PATHMAP:
+ case OBJECT_SHOW:
+ case OBJECT_HIDE:
+ case OBJECT_API:
+ case OBJECTS_DEFAULT:
+ case EN_DESC:
+ // these are processed in the initial pass over the arguments
+ proc_cmd (cmd_type, cparam, (arg_count > 0) ? argv[i + 1] : NULL,
+ (arg_count > 1) ? argv[i + 2] : NULL,
+ (arg_count > 2) ? argv[i + 3] : NULL,
+ (arg_count > 3) ? argv[i + 4] : NULL);
+ i += arg_count;
+ break;
+ default:
+ // any others, we skip for now
+ i += arg_count;
+ break;
+ }
+ }
+
+ // Make sure some experiments were specified
+ exp_no = exp_list->size ();
+ if (exp_no == 0)
+ { // no experiment name
+ fprintf (stderr, GTXT ("%s: Missing experiment directory (use the --help option to get a usage overview)\n"), whoami);
+ exit (1);
+ }
+
+ // add the experiments to the session
+ char *errstr = dbeOpenExperimentList (0, exp_list, false);
+ for (long i = 0; i < exp_list->size (); i++)
+ {
+ Vector<char*>* p = exp_list->get (i);
+ Destroy (p);
+ }
+ delete exp_list;
+ if (errstr != NULL)
+ {
+ fprintf (stderr, NTXT ("%s"), errstr);
+ free (errstr);
+ }
+
+ return exp_no;
+}
+
+int
+er_print::is_valid_seg_name (char *lo_name, int prev)
+{
+ // prev is the loadobject segment index that was last returned
+ // search starts following that loadobject
+ int index;
+ LoadObject *lo;
+ char *p_lo_name = lo_name;
+ char *name = NULL;
+
+ // strip angle brackets from all but <Unknown> and <Total>
+ if (strcmp (lo_name, "<Unknown>") && strcmp (lo_name, "<Total>"))
+ {
+ if (*lo_name == '<')
+ {
+ name = dbe_strdup (lo_name + 1);
+ p_lo_name = name;
+ char *p = strchr (name, '>');
+ if (p)
+ *p = '\0';
+ }
+ }
+
+ // get the load object list from the session
+ Vector<LoadObject*> *lobjs = dbeSession->get_text_segments ();
+ Vec_loop (LoadObject*, lobjs, index, lo)
+ {
+ if (prev > 0)
+ {
+ if (lo->seg_idx == prev) // this is where we left off
+ prev = -1;
+ continue;
+ }
+
+ // does this one match?
+ if (cmp_seg_name (lo->get_pathname (), p_lo_name))
+ {
+ delete lobjs;
+ free (name);
+ size_t len = strlen (lo_name);
+ if ((len > 7 && streq (lo_name + len - 7, NTXT (".class>"))) ||
+ (len > 6 && streq (lo_name + len - 6, NTXT (".class"))))
+ {
+ fprintf (stderr, GTXT ("Error: Java class `%s' is not selectable\n"), lo_name);
+ return -1;
+ }
+ return lo->seg_idx;
+ }
+ }
+ delete lobjs;
+ free (name);
+ return -1;
+}
+
+int
+er_print::cmp_seg_name (char *full_name, char *lo_name)
+{
+ char *cmp_name;
+ if (!strchr (lo_name, '/') && (cmp_name = strrchr (full_name, '/')))
+ cmp_name++; // basename
+ else
+ cmp_name = full_name; // full path name
+ return !strcmp (lo_name, cmp_name);
+}
+
+// processing object_select
+// Note that this does not affect the strings in Settings,
+// unlike object_show, object_hide, and object_api
+int
+er_print::process_object_select (char *names)
+{
+ int index;
+ LoadObject *lo;
+ int no_lobj = 0;
+ bool got_err = false;
+ Vector<LoadObject*> *lobjs = dbeSession->get_text_segments ();
+ if ((names == NULL) || !strcasecmp (names, Command::ALL_CMD))
+ { // full coverage
+ Vec_loop (LoadObject*, lobjs, index, lo)
+ {
+ dbev->set_lo_expand (lo->seg_idx, LIBEX_SHOW);
+ }
+ }
+ else
+ { // parsing coverage
+ // first, hide functions from all loadobjects
+ // except the java ones
+ Vec_loop (LoadObject*, lobjs, index, lo)
+ {
+ char *lo_name = lo->get_name ();
+ if (lo_name != NULL)
+ {
+ size_t len = strlen (lo_name);
+ if ((len > 7 && streq (lo_name + len - 7, NTXT (".class>"))) ||
+ (len > 6 && streq (lo_name + len - 6, NTXT (".class"))))
+ continue;
+ }
+ dbev->set_lo_expand (lo->seg_idx, LIBEX_HIDE);
+ }
+
+ Vector <char *> *tokens = split_str (names, ',');
+ for (long j = 0, sz = VecSize (tokens); j < sz; j++)
+ {
+ // loop over the provided names
+ char *lo_name = tokens->get (j);
+ int seg_idx = -1;
+ seg_idx = is_valid_seg_name (lo_name, seg_idx);
+ while (seg_idx != -1)
+ {
+ dbev->set_lo_expand (seg_idx, LIBEX_SHOW);
+ no_lobj++;
+ seg_idx = is_valid_seg_name (lo_name, seg_idx);
+ }
+ if (no_lobj == 0)
+ {
+ got_err = true;
+ fprintf (stderr, GTXT ("Error: Unknown load object: `%s'\n"), lo_name);
+ }
+ free (lo_name);
+ }
+ delete tokens;
+ }
+
+ if (!got_err)
+ { // good coverage string
+ free (cov_string);
+ cov_string = strdup (names);
+ }
+ else
+ { // bad, restore original coverage
+ no_lobj = -1;
+ process_object_select (cov_string);
+ }
+ delete lobjs;
+ return no_lobj;
+}
+
+int
+er_print::set_libexpand (char *cov, enum LibExpand expand)
+{
+ bool changed = dbev->set_libexpand (cov, expand);
+ if (changed == true)
+ dbev->update_lo_expands ();
+ return 0;
+}
+
+int
+er_print::set_libdefaults ()
+{
+ dbev->set_libdefaults ();
+ return 0;
+}
+
+bool
+er_print::end_command (char *cmd)
+{
+ if (cmd == NULL || *cmd == '-')
+ return true;
+ size_t len = strlen (cmd);
+ if (cmd[len - 1] == '/')
+ len--;
+ if ((len > 3 && !strncmp (&cmd[len - 3], NTXT (".er"), 3)) ||
+ (len > 4 && !strncmp (&cmd[len - 4], NTXT (".erg"), 4)))
+ return true;
+ return false;
+}
+
+// Now actually start processing the arguments
+void
+er_print::run (int argc, char *argv[])
+{
+ CmdType cmd_type;
+ int arg_count, cparam, i;
+ bool got = false;
+ char *arg1, *arg2;
+ for (i = 1; i < argc; i++)
+ {
+ if (*argv[i] != '-') // open experiment pointer files
+ continue;
+ switch (cmd_type = Command::get_command (argv[i] + 1, arg_count, cparam))
+ {
+ case WHOAMI:
+ whoami = argv[i] + 1 + cparam;
+ break;
+ case SCRIPT:
+ got = true;
+ inp_file = fopen (argv[++i], "r");
+ if (inp_file == NULL)
+ {
+ fprintf (stderr, GTXT ("Error: Script file cannot be opened: %s\n"), argv[i]);
+ exit (3);
+ }
+ proc_script ();
+ break;
+ case STDIN:
+ got = true;
+ inp_file = stdin;
+ proc_script ();
+ break;
+ case SOURCE: // with option arg_count == 2
+ case DISASM:
+ got = true;
+ i += arg_count;
+ if ((i >= argc) || end_command (argv[i]))
+ {
+ i--;
+ arg1 = argv[i];
+ arg2 = NTXT ("");
+ }
+ else
+ {
+ arg1 = argv[i - 1];
+ arg2 = argv[i];
+ }
+ proc_cmd (cmd_type, cparam, arg1, arg2, NULL, NULL, true);
+ break;
+ case CSINGLE:
+ case CPREPEND:
+ case CAPPEND:
+ case FSINGLE:
+ got = true;
+ i += arg_count;
+ if ((i >= argc) || end_command (argv[i]))
+ {
+ i--;
+ proc_cmd (cmd_type, cparam, argv[i], NTXT ("1"));
+ }
+ else
+ proc_cmd (cmd_type, cparam, argv[i - 1], argv[i]);
+ break;
+ case SAMPLE_DETAIL: // with option arg_count == 1
+ case STATISTICS:
+ case HEADER:
+ got = true;
+ // now fall through to process the command
+ case COMPARE:
+ got = true;
+ i += arg_count;
+ if ((i >= argc) || end_command (argv[i]))
+ {
+ i--;
+ proc_cmd (cmd_type, cparam, NULL, NULL);
+ }
+ else
+ proc_cmd (cmd_type, cparam, argv[i], NULL);
+ break;
+ case PRINTMODE:
+ case INDXOBJDEF:
+ case ADDPATH:
+ case SETPATH:
+ case PATHMAP:
+ case OBJECT_SHOW:
+ case OBJECT_HIDE:
+ case OBJECT_API:
+ case OBJECTS_DEFAULT:
+ case EN_DESC:
+ got = true;
+ // these have been processed already
+ i += arg_count;
+ break;
+ case LIMIT:
+ got = true;
+ proc_cmd (cmd_type, cparam, (arg_count > 0) ? argv[i + 1] : NULL,
+ (arg_count > 1) ? argv[i + 2] : NULL);
+ i += arg_count;
+ break;
+ default:
+ got = true;
+ proc_cmd (cmd_type, cparam, (arg_count > 0) ? argv[i + 1] : NULL,
+ (arg_count > 1) ? argv[i + 2] : NULL);
+ i += arg_count;
+ break;
+ }
+ }
+ if (!got) // no command has been specified
+ proc_script ();
+}
+
+#define MAXARGS 20
+
+void
+er_print::proc_script ()
+{
+ CmdType cmd_type;
+ int arg_count, cparam;
+ char *cmd, *end_cmd;
+ char *script = NULL;
+ char *arglist[MAXARGS];
+ char *line = NULL;
+ int lineno = 0;
+ while (!feof (inp_file))
+ {
+ if (inp_file == stdin)
+ printf (NTXT ("(%s) "), get_basename (prog_name));
+ free (script);
+ script = read_line (inp_file);
+ if (script == NULL)
+ continue;
+ free (line);
+ line = dbe_strdup (script);
+ lineno++;
+ for (int i = 0; i < MAXARGS; i++)
+ arglist[i] = NULL;
+
+ // ensure it's terminated by a \n, and remove that character
+ strtok (script, NTXT ("\n"));
+
+ // extract the command
+ cmd = strtok (script, NTXT (" \t"));
+ if (cmd == NULL)
+ continue;
+ if (*cmd == '#')
+ {
+ fprintf (stderr, NTXT ("%s"), line);
+ continue;
+ }
+ if (*cmd == '\n')
+ continue;
+
+ char *remainder = strtok (NULL, NTXT ("\n"));
+ // now extract the arguments
+ int nargs = 0;
+ for (;;)
+ {
+ end_cmd = NULL;
+ if (nargs >= MAXARGS)
+ fprintf (stderr, GTXT ("Warning: more than %d arguments to %s command, line %d\n"),
+ MAXARGS, cmd, lineno);
+ char *nextarg = strtok (remainder, NTXT ("\n"));
+ if ((nextarg == NULL) || (*nextarg == '#'))
+ // either the end of the line, or a comment indicator
+ break;
+ if (nargs >= MAXARGS)
+ {
+ parse_qstring (nextarg, &end_cmd);
+ nargs++;
+ }
+ else
+ arglist[nargs++] = parse_qstring (nextarg, &end_cmd);
+ remainder = end_cmd;
+ if (remainder == NULL)
+ break;
+ // skip any blanks or tabs to get to next argument
+ while (*remainder == ' ' || *remainder == '\t')
+ remainder++;
+ }
+
+ cmd_type = Command::get_command (cmd, arg_count, cparam);
+
+ // check for extra arguments
+ if (cmd_type != UNKNOWN_CMD && cmd_type != INDXOBJDEF && nargs > arg_count)
+ fprintf (stderr, GTXT ("Warning: extra arguments to %s command, line %d\n"),
+ cmd, lineno);
+ switch (cmd_type)
+ {
+ case SOURCE:
+ case DISASM:
+ // ignore any third parameter
+ // if there was, we have written a warning
+ proc_cmd (cmd_type, cparam, arglist[0], arglist[1], NULL, NULL,
+ (inp_file != stdin));
+ break;
+ case QUIT:
+ free (script);
+ free (line);
+ exit (0);
+ case QQUIT:
+ was_QQUIT = true;
+ free (script);
+ free (line);
+ return;
+ case STDIN:
+ break;
+ case COMMENT:
+ fprintf (dis_file, NTXT ("%s"), line);
+ break;
+ case AMBIGUOUS_CMD:
+ fprintf (stderr, GTXT ("Error: Ambiguous command: %s\n"), cmd);
+ break;
+ case UNKNOWN_CMD:
+ if (*cmd != '\n')
+ fprintf (stderr, GTXT ("Error: Invalid command: %s\n"), cmd);
+ break;
+ default:
+ proc_cmd (cmd_type, cparam, arglist[0], arglist[1]);
+ break;
+ }
+ }
+ // free up the input line
+ free (script);
+ free (line);
+}
+
+void
+er_print::proc_cmd (CmdType cmd_type, int cparam,
+ char *arg1, char *arg2, char *arg3, char *arg4, bool xdefault)
+{
+ er_print_common_display *cd;
+ FILE *ck_file, *save_file;
+ char *name;
+ int bgn_index, end_index, index;
+ Cmd_status status;
+ char *scratch, *scratch1;
+ switch (cmd_type)
+ {
+ case FUNCS:
+ print_func (Histable::FUNCTION, MODE_LIST,
+ dbev->get_metric_list (MET_NORMAL), dbev->get_metric_list (MET_NORMAL));
+ break;
+ case FDETAIL:
+ print_func (Histable::FUNCTION, MODE_DETAIL,
+ dbev->get_metric_list (MET_NORMAL), dbev->get_metric_ref (MET_NORMAL));
+ break;
+ case FSINGLE:
+ print_func (Histable::FUNCTION, MODE_DETAIL,
+ dbev->get_metric_list (MET_NORMAL), dbev->get_metric_ref (MET_NORMAL),
+ arg1, arg2);
+ break;
+ case HOTPCS:
+ print_func (Histable::INSTR, MODE_LIST,
+ dbev->get_metric_list (MET_NORMAL), dbev->get_metric_list (MET_NORMAL));
+ break;
+ case PDETAIL:
+ print_func (Histable::INSTR, MODE_DETAIL,
+ dbev->get_metric_list (MET_NORMAL), dbev->get_metric_ref (MET_NORMAL));
+ break;
+ case HOTLINES:
+ print_func (Histable::LINE, MODE_LIST,
+ dbev->get_metric_list (MET_NORMAL), dbev->get_metric_list (MET_NORMAL));
+ break;
+ case LDETAIL:
+ print_func (Histable::LINE, MODE_DETAIL,
+ dbev->get_metric_list (MET_NORMAL), dbev->get_metric_ref (MET_NORMAL));
+ break;
+ case OBJECTS:
+ print_objects ();
+ break;
+ case OVERVIEW_NEW:
+ print_overview ();
+ break;
+ case LOADOBJECT:
+ print_segments ();
+ break;
+ case GPROF:
+ print_func (Histable::FUNCTION, MODE_GPROF,
+ dbev->get_metric_list (MET_CALL), dbev->get_metric_list (MET_NORMAL));
+ break;
+ case CALLTREE:
+ if (dbev->comparingExperiments ())
+ {
+ fprintf (out_file, GTXT ("\nNot available when comparing experiments\n\n"));
+ break;
+ }
+ print_ctree (cmd_type);
+ break;
+ case CSINGLE:
+ case CPREPEND:
+ case CAPPEND:
+ case CRMFIRST:
+ case CRMLAST:
+ print_gprof (cmd_type, arg1, arg2);
+ break;
+ case EXP_LIST:
+ exp_list ();
+ break;
+ case DESCRIBE:
+ describe ();
+ break;
+ case SCOMPCOM:
+ status = dbev->proc_compcom (arg1, true, false);
+ if (status != CMD_OK)
+ fprintf (stderr, GTXT ("Error: %s: %s\n"), Command::get_err_string (status), arg1);
+ break;
+ case STHRESH:
+ status = dbev->proc_thresh (arg1, true, false);
+ if (status != CMD_OK)
+ fprintf (stderr, GTXT ("Error: %s: %s\n"), Command::get_err_string (status), arg1);
+ break;
+ case DCOMPCOM:
+ status = dbev->proc_compcom (arg1, false, false);
+ if (status != CMD_OK)
+ fprintf (stderr, GTXT ("Error: %s: %s\n"), Command::get_err_string (status), arg1);
+ break;
+ case COMPCOM:
+ status = dbev->proc_compcom (arg1, true, false);
+ if (status != CMD_OK)
+ fprintf (stderr, GTXT ("Error: %s: %s\n"), Command::get_err_string (status), arg1);
+ status = dbev->proc_compcom (arg1, false, false);
+ if (status != CMD_OK)
+ fprintf (stderr, GTXT ("Error: %s: %s\n"), Command::get_err_string (status), arg1);
+ break;
+ case DTHRESH:
+ status = dbev->proc_thresh (arg1, false, false);
+ if (status != CMD_OK)
+ fprintf (stderr, GTXT ("Error: %s: %s\n"), Command::get_err_string (status), arg1);
+ break;
+ case SOURCE:
+ case DISASM:
+ {
+ if (arg3 != NULL)
+ abort ();
+ if (arg1 == NULL)
+ {
+ fprintf (stderr, GTXT ("Error: Invalid function/file setting: \n"));
+ break;
+ }
+ char *fcontext = NULL;
+ char *arg = parse_fname (arg1, &fcontext);
+ if (arg == NULL)
+ {
+ fprintf (stderr, GTXT ("Error: Invalid function/file setting: %s\n"), arg1);
+ free (fcontext);
+ break;
+ }
+ if (arg2 && (strlen (arg2) == 0))
+ arg2 = NULL;
+ print_anno_file (arg, arg2, fcontext, cmd_type == DISASM,
+ dis_file, inp_file, out_file, dbev, xdefault);
+ free (arg);
+ free (fcontext);
+ break;
+ }
+ case METRIC_LIST:
+ proc_cmd (METRICS, cparam, NULL, NULL);
+ dbev->get_metric_ref (MET_NORMAL)->print_metric_list (dis_file,
+ GTXT ("Available metrics:\n"), false);
+ break;
+ case METRICS:
+ if (arg1)
+ {
+ char *ret = dbev->setMetrics (arg1, false);
+ if (ret != NULL)
+ {
+ fprintf (stderr, GTXT ("Error: %s\n"), ret);
+ proc_cmd (METRIC_LIST, cparam, NULL, NULL);
+ break;
+ }
+ }
+ scratch = dbev->get_metric_list (MET_NORMAL)->get_metrics ();
+ fprintf (dis_file, GTXT ("Current metrics: %s\n"), scratch);
+ free (scratch);
+ proc_cmd (SORT, cparam, NULL, NULL);
+ break;
+ case GMETRIC_LIST:
+ scratch = dbev->get_metric_list (MET_CALL)->get_metrics ();
+ fprintf (dis_file, GTXT ("Current caller-callee metrics: %s\n"), scratch);
+ free (scratch);
+ fprintf (dis_file, GTXT ("Current caller-callee sort Metric: %s\n"),
+ dbev->getSort (MET_DATA));
+ break;
+ case INDX_METRIC_LIST:
+ scratch = dbev->get_metric_list (MET_INDX)->get_metrics ();
+ fprintf (dis_file, GTXT ("Current index-object metrics: %s\n"), scratch);
+ free (scratch);
+ scratch = dbev->getSort (MET_INDX);
+ fprintf (dis_file, GTXT ("Current index-object sort Metric: %s\n"), scratch);
+ free (scratch);
+ break;
+ case SORT:
+ if (arg1)
+ {
+ char *ret = dbev->setSort (arg1, MET_NORMAL, false);
+ if (ret != NULL)
+ {
+ fprintf (stderr, GTXT ("Error: %s\n"), ret);
+ proc_cmd (METRICS, cparam, NULL, NULL);
+ break;
+ }
+ dbev->setSort (arg1, MET_SRCDIS, false);
+ dbev->setSort (arg1, MET_CALL, false);
+ dbev->setSort (arg1, MET_DATA, false);
+ dbev->setSort (arg1, MET_INDX, false);
+ dbev->setSort (arg1, MET_CALL_AGR, false);
+ dbev->setSort (arg1, MET_IO, false);
+ dbev->setSort (arg1, MET_HEAP, false);
+ }
+ scratch = dbev->getSort (MET_NORMAL);
+ scratch1 = dbev->getSortCmd (MET_NORMAL);
+ fprintf (dis_file,
+ GTXT ("Current Sort Metric: %s ( %s )\n"), scratch, scratch1);
+ free (scratch1);
+ free (scratch);
+ break;
+ case OBJECT_SHOW:
+ if (arg1)
+ set_libexpand (arg1, LIBEX_SHOW);
+ obj_list ();
+ break;
+ case OBJECT_HIDE:
+ if (arg1)
+ set_libexpand (arg1, LIBEX_HIDE);
+ obj_list ();
+ break;
+ case OBJECT_API:
+ if (arg1)
+ set_libexpand (arg1, LIBEX_API);
+ obj_list ();
+ break;
+ case OBJECTS_DEFAULT:
+ set_libdefaults ();
+ obj_list ();
+ break;
+ case OBJECT_LIST:
+ obj_list ();
+ break;
+ case OBJECT_SELECT:
+ if (arg1)
+ {
+ if (process_object_select (arg1) != -1)
+ proc_cmd (OBJECT_LIST, cparam, NULL, NULL);
+ else
+ fprintf (stderr, GTXT ("Error: Type \"object_list\" for a list of all load objects.\n"));
+ }
+ else
+ fprintf (stderr, GTXT ("Error: No load object has been specified.\n"));
+ break;
+ case LOADOBJECT_LIST:
+ seg_list ();
+ break;
+ case LOADOBJECT_SELECT:
+ if (arg1)
+ {
+ if (process_object_select (arg1) != -1)
+ proc_cmd (LOADOBJECT_LIST, cparam, NULL, NULL);
+ else
+ fprintf (stderr, GTXT ("Error: Type \"segment_list\" for a list of all segments.\n"));
+ }
+ else
+ fprintf (stderr, GTXT ("Error: No segment has been specified.\n"));
+ break;
+ case SAMPLE_LIST:
+ filter_list (SAMPLE_LIST);
+ break;
+ case SAMPLE_SELECT:
+ if (arg1 && !dbev->set_pattern (SAMPLE_FILTER_IDX, arg1))
+ fprintf (stderr, GTXT ("Error: Invalid filter pattern specification %s\n"), arg1);
+ proc_cmd (SAMPLE_LIST, cparam, NULL, NULL);
+ break;
+ case THREAD_LIST:
+ filter_list (THREAD_LIST);
+ break;
+ case THREAD_SELECT:
+ if (arg1 && !dbev->set_pattern (THREAD_FILTER_IDX, arg1))
+ fprintf (stderr, GTXT ("Error: Invalid filter pattern specification %s\n"), arg1);
+ proc_cmd (THREAD_LIST, cparam, NULL, NULL);
+ break;
+ case LWP_LIST:
+ filter_list (LWP_LIST);
+ break;
+ case LWP_SELECT:
+ if (arg1 && !dbev->set_pattern (LWP_FILTER_IDX, arg1))
+ fprintf (stderr, GTXT ("Error: Invalid filter pattern specification %s\n"), arg1);
+ proc_cmd (LWP_LIST, cparam, NULL, NULL);
+ break;
+ case CPU_LIST:
+ filter_list (CPU_LIST);
+ break;
+ case CPU_SELECT:
+ if (arg1 && !dbev->set_pattern (CPU_FILTER_IDX, arg1))
+ fprintf (stderr, GTXT ("Error: Invalid filter pattern specification %s\n"), arg1);
+ proc_cmd (CPU_LIST, cparam, NULL, NULL);
+ break;
+ case FILTERS:
+ if (arg1 != NULL)
+ {
+ if (strcmp (arg1, NTXT ("True")) == 0)
+ scratch = dbev->set_filter (NULL);
+ else
+ scratch = dbev->set_filter (arg1);
+ if (scratch != NULL)
+ fprintf (stderr, GTXT ("Error: %s\n"), scratch);
+ }
+ scratch = dbev->get_filter ();
+ fprintf (dis_file, GTXT ("current filter setting: \"%s\"\n"),
+ scratch == NULL ? GTXT ("<none>") : scratch);
+ break;
+ case OUTFILE:
+ if (arg1)
+ {
+ set_outfile (arg1, out_file, false);
+ if (inp_file != stdin)
+ dis_file = out_file;
+ }
+ break;
+ case APPENDFILE:
+ if (arg1)
+ {
+ set_outfile (arg1, out_file, true);
+ if (inp_file != stdin)
+ dis_file = out_file;
+ }
+ break;
+ case LIMIT:
+ if (arg1)
+ {
+ limit = (int) strtol (arg1, (char **) NULL, 10);
+ char *res = dbeSetPrintLimit (dbevindex, limit);
+ if (res != NULL)
+ fprintf (stderr, NTXT ("%s\n"), res);
+ }
+
+ limit = dbeGetPrintLimit (dbevindex);
+ fprintf (stderr, GTXT ("Print limit set to %d\n"), limit);
+ break;
+ case NAMEFMT:
+ if (arg1)
+ {
+ status = dbev->set_name_format (arg1);
+ if (status != CMD_OK)
+ fprintf (stderr, GTXT ("Error: %s: %s\n"), Command::get_err_string (status), arg1);
+ }
+ else
+ fprintf (stderr, GTXT ("Error: No format has been specified.\n"));
+ break;
+ case VIEWMODE:
+ {
+ if (arg1)
+ {
+ status = dbev->set_view_mode (arg1, false);
+ if (status != CMD_OK)
+ fprintf (stderr, GTXT ("Error: %s: %s\n"), Command::get_err_string (status), arg1);
+ }
+ const char *vname = "unknown";
+ int vm = dbev->get_view_mode ();
+ switch (vm)
+ {
+ case VMODE_USER:
+ vname = "user";
+ break;
+ case VMODE_EXPERT:
+ vname = "expert";
+ break;
+ case VMODE_MACHINE:
+ vname = "machine";
+ break;
+ }
+ fprintf (stderr, GTXT ("Viewmode set to %s\n"), vname);
+ }
+ break;
+
+ // EN_DESC does not make sense after experiments are read, but it does make sense on the command line,
+ // processed before the experiments are read.
+ case EN_DESC:
+ if (arg1)
+ {
+ status = dbev->set_en_desc (arg1, false);
+ if (status != CMD_OK)
+ fprintf (stderr, GTXT ("Error: %s: %s\n"), Command::get_err_string (status), arg1);
+ }
+ else
+ fprintf (stderr, GTXT ("Error: No descendant processing has been specified.\n"));
+ break;
+ case SETPATH:
+ case ADDPATH:
+ if (arg1)
+ dbeSession->set_search_path (arg1, (cmd_type == SETPATH));
+ fprintf (dis_file, GTXT ("search path:\n"));
+ Vec_loop (char*, dbeSession->get_search_path (), index, name)
+ {
+ fprintf (dis_file, NTXT ("\t%s\n"), name);
+ }
+ break;
+ case PATHMAP:
+ {
+ Vector<pathmap_t*> *pathMaps = dbeSession->get_pathmaps ();
+ if (arg1 != NULL)
+ {
+ if (arg2 == NULL)
+ {
+ fprintf (stderr, GTXT ("Error: No replacement path prefix has been specified.\n"));
+ break;
+ }
+ // add this mapping to the session
+ char *err = Settings::add_pathmap (pathMaps, arg1, arg2);
+ if (err != NULL)
+ {
+ fprintf (stderr, NTXT ("%s"), err);
+ free (err);
+ }
+ }
+ fprintf (dis_file, GTXT ("Path mappings: from -> to\n"));
+ for (int i = 0, sz = pathMaps->size (); i < sz; i++)
+ {
+ pathmap_t *thismap = pathMaps->get (i);
+ fprintf (dis_file, NTXT ("\t`%s' -> `%s'\n"), thismap->old_prefix, thismap->new_prefix);
+ }
+ }
+ break;
+ case SAMPLE_DETAIL:
+ if (get_exp_id (arg1, bgn_index, end_index) != -1)
+ {
+ cd = new er_print_experiment (dbev, bgn_index, end_index, false,
+ false, false, true, true);
+ print_cmd (cd);
+ delete cd;
+ }
+ break;
+ case STATISTICS:
+ if (get_exp_id (arg1, bgn_index, end_index) != -1)
+ {
+ cd = new er_print_experiment (dbev, bgn_index, end_index, false,
+ false, true, true, false);
+ print_cmd (cd);
+ delete cd;
+ }
+ break;
+ case PRINTMODE:
+ {
+ if (arg1 == NULL)
+ {
+ fprintf (stderr, GTXT ("printmode is set to `%s'\n\n"), dbeGetPrintModeString (dbevindex));
+ break;
+ }
+ char *s = dbeSetPrintMode (dbevindex, arg1);
+ if (s != NULL)
+ {
+ fprintf (stderr, NTXT ("%s\n"), s);
+ break;
+ }
+ fprintf (stderr, GTXT ("printmode is set to `%s'\n\n"), dbeGetPrintModeString (dbevindex));
+ }
+ break;
+ case HEADER:
+ if (get_exp_id (arg1, bgn_index, end_index) != -1)
+ {
+ cd = new er_print_experiment (dbev, bgn_index, end_index, false,
+ true, false, false, false);
+ print_cmd (cd);
+ delete cd;
+ }
+ break;
+ case COMPARE:
+ if (arg1 == NULL)
+ {
+ fprintf (out_file, GTXT ("The argument to `compare' must be `on', `off', `delta', or `ratio'\n\n"));
+ break;
+ }
+ else
+ {
+ int cmp;
+ if (strcasecmp (arg1, NTXT ("OFF")) == 0 || strcmp (arg1, NTXT ("0")) == 0)
+ cmp = CMP_DISABLE;
+ else if (strcasecmp (arg1, NTXT ("ON")) == 0 || strcmp (arg1, NTXT ("1")) == 0)
+ cmp = CMP_ENABLE;
+ else if (strcasecmp (arg1, NTXT ("DELTA")) == 0)
+ cmp = CMP_DELTA;
+ else if (strcasecmp (arg1, NTXT ("RATIO")) == 0)
+ cmp = CMP_RATIO;
+ else
+ {
+ fprintf (out_file, GTXT ("The argument to `compare' must be `on', `off', `delta', or `ratio'\n\n"));
+ break;
+ }
+ int oldMode = dbev->get_compare_mode ();
+ dbev->set_compare_mode (cmp);
+ if (oldMode != cmp)
+ {
+ dbev->reset_data (false);
+ dbeSession->reset_data ();
+ }
+ }
+ break;
+ case LEAKS:
+ if (!dbeSession->is_leaklist_available ())
+ {
+ fprintf (out_file, GTXT ("\nHeap trace information was not requested when recording experiments\n\n"));
+ break;
+ }
+ if (dbev->comparingExperiments ())
+ { // XXXX show warning for compare
+ fprintf (out_file, GTXT ("\nNot available when comparing experiments\n\n"));
+ break;
+ }
+ cd = new er_print_leaklist (dbev, true, false, dbev->get_limit ());
+ print_cmd (cd);
+ delete cd;
+ break;
+ case ALLOCS:
+ if (!dbeSession->is_leaklist_available ())
+ {
+ fprintf (out_file, GTXT ("\nHeap trace information was not requested when recording experiments\n\n"));
+ break;
+ }
+ cd = new er_print_leaklist (dbev, false, true, dbev->get_limit ());
+ print_cmd (cd);
+ delete cd;
+ break;
+ case HEAP:
+ if (!dbeSession->is_heapdata_available ())
+ {
+ fprintf (out_file, GTXT ("Heap trace information was not requested when recording experiments\n\n"));
+ break;
+ }
+ cd = new er_print_heapactivity (dbev, Histable::HEAPCALLSTACK, false, dbev->get_limit ());
+ print_cmd (cd);
+ delete cd;
+ break;
+ case HEAPSTAT:
+ if (!dbeSession->is_heapdata_available ())
+ {
+ fprintf (out_file, GTXT ("Heap trace information was not requested when recording experiments\n\n"));
+ break;
+ }
+ cd = new er_print_heapactivity (dbev, Histable::HEAPCALLSTACK, true, dbev->get_limit ());
+ print_cmd (cd);
+ delete cd;
+ break;
+ case IOACTIVITY:
+ if (!dbeSession->is_iodata_available ())
+ {
+ fprintf (out_file, GTXT ("I/O trace information was not requested when recording experiments\n\n"));
+ break;
+ }
+ if (dbev->comparingExperiments ())
+ { // XXXX show warning for compare
+ fprintf (out_file, GTXT ("\nNot available when comparing experiments\n\n"));
+ break;
+ }
+ cd = new er_print_ioactivity (dbev, Histable::IOACTFILE, false, dbev->get_limit ());
+ print_cmd (cd);
+ delete cd;
+ break;
+ case IOVFD:
+ if (!dbeSession->is_iodata_available ())
+ {
+ fprintf (out_file, GTXT ("I/O trace information was not requested when recording experiments\n\n"));
+ break;
+ }
+ cd = new er_print_ioactivity (dbev, Histable::IOACTVFD, false, dbev->get_limit ());
+ print_cmd (cd);
+ delete cd;
+ break;
+ case IOCALLSTACK:
+ if (!dbeSession->is_iodata_available ())
+ {
+ fprintf (out_file, GTXT ("I/O trace information was not requested when recording experiments\n\n"));
+ break;
+ }
+ cd = new er_print_ioactivity (dbev, Histable::IOCALLSTACK, false, dbev->get_limit ());
+ print_cmd (cd);
+ delete cd;
+ break;
+ case IOSTAT:
+ if (!dbeSession->is_iodata_available ())
+ {
+ fprintf (out_file, GTXT ("I/O trace information was not requested when recording experiments\n\n"));
+ break;
+ }
+ cd = new er_print_ioactivity (dbev, Histable::IOACTVFD, true, dbev->get_limit ());
+ print_cmd (cd);
+ delete cd;
+ break;
+ case HELP:
+ Command::print_help(whoami, false, true, out_file);
+ break;
+ case VERSION_cmd:
+ Application::print_version_info ();
+ break;
+ case SCRIPT:
+ if (arg1)
+ {
+ ck_file = fopen (arg1, NTXT ("r"));
+ if (ck_file == NULL)
+ fprintf (stderr, GTXT ("Error: Script file cannot be opened: %s\n"), arg1);
+ else
+ {
+ save_file = inp_file;
+ inp_file = ck_file;
+ proc_script ();
+ inp_file = save_file;
+ }
+ }
+ else
+ fprintf (stderr, GTXT ("Error: No filename has been specified.\n"));
+ break;
+ case QUIT:
+ exit (0);
+ break;
+
+ // commands relating to index Objects
+ case INDXOBJ:
+ if ((cparam == -1) && (arg1 == NULL))
+ {
+ fprintf (stderr, GTXT ("Error: No index object name has been specified.\n"));
+ break;
+ }
+ // automatically load machine model if applicable
+ dbeDetectLoadMachineModel (dbevindex);
+ indxobj (arg1, cparam);
+ break;
+ case INDXOBJLIST:
+ // automatically load machine model if applicable
+ dbeDetectLoadMachineModel (dbevindex);
+ indxo_list (false, out_file);
+ break;
+
+ // define a new IndexObject type
+ case INDXOBJDEF:
+ if (arg1 == NULL)
+ {
+ fprintf (stderr, GTXT ("Error: No index object name has been specified.\n"));
+ break;
+ }
+ if (arg2 == NULL)
+ {
+ fprintf (stderr, GTXT ("Error: No index-expr has been specified.\n"));
+ break;
+ }
+ indxo_define (arg1, arg2, arg3, arg4);
+ break;
+
+ // the commands following this are unsupported/hidden
+ case IFREQ:
+ if (!dbeSession->is_ifreq_available ())
+ {
+ fprintf (out_file, GTXT ("\nInstruction frequency data was not requested when recording experiments\n\n"));
+ break;
+ }
+ ifreq ();
+ break;
+ case DUMPNODES:
+ dump_nodes ();
+ break;
+ case DUMPSTACKS:
+ dump_stacks ();
+ break;
+ case DUMPUNK:
+ dump_unk_pcs ();
+ break;
+ case DUMPFUNC:
+ dump_funcs (arg1);
+ break;
+ case DUMPDOBJS:
+ dump_dataobjects (arg1);
+ break;
+ case DUMPMAP:
+ dump_map ();
+ break;
+ case DUMPENTITIES:
+ dump_entities ();
+ break;
+ case DUMP_PROFILE:
+ dbev->dump_profile (out_file);
+ break;
+ case DUMP_SYNC:
+ dbev->dump_sync (out_file);
+ break;
+ case DUMP_HWC:
+ dbev->dump_hwc (out_file);
+ break;
+ case DUMP_HEAP:
+ if (!dbeSession->is_leaklist_available ())
+ {
+ fprintf (out_file, GTXT ("\nHeap trace information was not requested when recording experiments\n\n"));
+ break;
+ }
+ dbev->dump_heap (out_file);
+ break;
+ case DUMP_IOTRACE:
+ if (!dbeSession->is_iodata_available ())
+ {
+ fprintf (out_file, GTXT ("\nI/O trace information was not requested when recording experiments\n\n"));
+ break;
+ }
+ dbev->dump_iotrace (out_file);
+ break;
+ case DMEM:
+ if (arg1 == NULL)
+ fprintf (stderr, GTXT ("Error: No sample has been specified.\n"));
+ else
+ {
+ Experiment *exp = dbeSession->get_exp (0);
+ if (exp != NULL)
+ exp->DBG_memuse (arg1);
+ }
+ break;
+ case DUMP_GC:
+ if (!dbeSession->has_java ())
+ {
+ fprintf (out_file, GTXT ("\nJava garbage collection information was not requested when recording experiments\n\n"));
+ break;
+ }
+ dbev->dump_gc_events (out_file);
+ break;
+ case DKILL:
+ {
+ if (arg1 == NULL)
+ {
+ fprintf (stderr, GTXT ("Error: No process has been specified.\n"));
+ break;
+ }
+ if (arg2 == NULL)
+ {
+ fprintf (stderr, GTXT ("Error: No signal has been specified.\n"));
+ break;
+ }
+ pid_t p = (pid_t) atoi (arg1);
+ int signum = atoi (arg2);
+ char *ret = dbeSendSignal (p, signum);
+ if (ret != NULL)
+ fprintf (stderr, GTXT ("Error: %s"), ret);
+ }
+ break;
+ case PROCSTATS:
+ dump_stats ();
+ break;
+ case ADD_EXP:
+ case OPEN_EXP:
+ if (arg1 == NULL)
+ fprintf (stderr, GTXT ("Error: No experiment name has been specified.\n"));
+ else
+ {
+ Vector<Vector<char*>*> *groups = new Vector<Vector<char*>*>(1);
+ Vector<char*> *list = new Vector<char*>(1);
+ list->append (arg1);
+ groups->append (list);
+ char *res = dbeOpenExperimentList (dbevindex, groups, cmd_type == OPEN_EXP);
+ if (cmd_type == OPEN_EXP)
+ fprintf (stderr, GTXT ("Previously loaded experiment have been dropped.\n"));
+ if (res != NULL)
+ fprintf (stderr, NTXT ("%s"), res);
+ else
+ fprintf (stderr, GTXT ("Experiment %s has been loaded\n"), arg1);
+ free (res);
+ delete list;
+ delete groups;
+ }
+ break;
+ case DROP_EXP:
+ {
+ if (arg1 == NULL)
+ fprintf (stderr, GTXT ("Error: No experiment name has been specified.\n"));
+ else
+ {
+ int exp_index = dbeSession->find_experiment (arg1);
+ if (exp_index < 0)
+ fprintf (stderr, GTXT ("Error: experiment %s has not been opened.\n"), arg1);
+ else
+ {
+ Vector<int> *expid = new Vector<int> (1);
+ expid->append (exp_index);
+ char *res = dbeDropExperiment (dbevindex, expid);
+ if (res != NULL)
+ fprintf (stderr, NTXT ("%s"), res);
+ else
+ fprintf (stderr, GTXT ("Experiment %s has been dropped\n"), arg1);
+ delete expid;
+ free (res);
+ }
+ }
+ }
+ break;
+ case HHELP:
+ // automatically load machine model if applicable
+ dbeDetectLoadMachineModel (dbevindex);
+ Command::print_help (whoami, false, false, out_file);
+ fprintf (out_file, NTXT ("\n"));
+ indxo_list (false, out_file);
+ fprintf (out_file, NTXT ("\n"));
+ mo_list (false, out_file);
+ if (!getenv ("_BUILDING_MANPAGE"))
+ fprintf (out_file, GTXT ("\nSee gprofng(1) for more details\n"));
+ break;
+ case QQUIT:
+ was_QQUIT = true;
+ return;
+ default:
+ fprintf (stderr, GTXT ("Error: Invalid option\n"));
+ break;
+ }
+
+ // check for any processing error messages
+ dump_proc_warnings ();
+ fflush (out_file);
+}
+
+#define MAX_NUM_HEADER 4
+
+void
+er_print::disp_list (int num_header, int size, int align[], char *header[],
+ char **lists[])
+{
+ size_t maxlen[MAX_NUM_HEADER];
+ char fmt[MAX_NUM_HEADER][64];
+ if (num_header > MAX_NUM_HEADER)
+ abort ();
+ for (int i = 0; i < num_header; i++)
+ {
+ maxlen[i] = strlen (header[i]);
+ for (int j = 0; j < size; j++)
+ {
+ size_t len = strlen (lists[i][j]);
+ if (maxlen[i] < len)
+ maxlen[i] = len;
+ }
+
+ // get format string
+ if ((align[i] == -1) && (i == num_header - 1))
+ snprintf (fmt[i], sizeof (fmt[i]), NTXT ("%%s "));
+ else
+ snprintf (fmt[i], sizeof (fmt[i]), NTXT ("%%%ds "), (int) (align[i] * maxlen[i]));
+
+ // write header
+ fprintf (out_file, fmt[i], header[i]);
+ }
+ putc ('\n', out_file);
+
+ // write separator "==="
+ size_t np = 0;
+ for (int i = 0; (i < num_header) && (np < 132); i++)
+ {
+ size_t nc = maxlen[i];
+ if (nc + np > 132)
+ nc = 132 - np;
+ for (size_t j = 0; j < nc; j++)
+ putc ('=', out_file);
+ putc (' ', out_file);
+ np += nc + 1;
+ }
+ putc ('\n', out_file);
+
+ // write lists
+ for (int j = 0; j < size; j++)
+ {
+ for (int i = 0; i < num_header; i++)
+ fprintf (out_file, fmt[i], lists[i][j]);
+ putc ('\n', out_file);
+ }
+}
+
+void
+er_print::exp_list ()
+{
+ int size, index;
+ int align[MAX_NUM_HEADER];
+ char *header[MAX_NUM_HEADER];
+ char **lists[MAX_NUM_HEADER];
+
+ align[0] = 1; // right-justify
+ align[1] = 1; // right-justify
+ align[2] = 1; // right-justify
+ align[3] = -1; // left-justify
+ header[0] = GTXT ("ID");
+ header[1] = GTXT ("Sel");
+ header[2] = GTXT ("PID");
+ header[3] = GTXT ("Experiment");
+
+ size = dbeSession->nexps ();
+ lists[0] = new char*[size];
+ lists[1] = new char*[size];
+ lists[2] = new char*[size];
+ lists[3] = new char*[size];
+ for (index = 0; index < size; index++)
+ {
+ lists[0][index] = dbe_sprintf (NTXT ("%d"), index + 1);
+ lists[1][index] = strdup (dbev->get_exp_enable (index) ? GTXT ("yes") : GTXT ("no"));
+ lists[2][index] = dbe_sprintf (NTXT ("%d"), dbeSession->get_exp (index)->getPID ());
+ lists[3][index] = strdup (dbeSession->get_exp (index)->get_expt_name ());
+ }
+ disp_list (4, size, align, header, lists);
+ for (int i = 0; i < 4; i++)
+ {
+ for (int j = 0; j < size; j++)
+ free (lists[i][j]);
+ delete[] lists[i];
+ }
+}
+
+void
+er_print::describe ()
+{
+ Vector<void*> *res = dbeGetFilterKeywords (dbev->vindex);
+ if (res == NULL)
+ return;
+ Vector <char*> *kwCategoryI18N = (Vector<char*>*) res->fetch (1);
+ Vector <char*> *kwKeyword = (Vector<char*>*) res->fetch (3);
+ Vector <char*> *kwFormula = (Vector<char*>*) res->fetch (4);
+ Vector <char*> *kwDescrip = (Vector<char*>*) res->fetch (5);
+ Vector <void*> *kwEnumDescs = (Vector<void*>*) res->fetch (6);
+ String sectionFormat = NTXT ("\n------ %s ------\n");
+ String categoryFormat = NTXT ("\n%s\n");
+ String keywordFormat = NTXT (" %-20s %s\n");
+ String empty = NTXT ("");
+ String previousCategory = empty;
+
+ for (int i = 0; i < kwKeyword->size (); i++)
+ {
+ if (kwKeyword->fetch (i) == NULL)
+ {
+ fprintf (dis_file, sectionFormat, kwCategoryI18N->fetch (i));
+ continue;
+ }
+ String cat = kwCategoryI18N->fetch (i);
+ if (dbe_strcmp (previousCategory, cat) != 0)
+ fprintf (dis_file, categoryFormat, cat);
+ previousCategory = cat;
+ Vector <String> *enumDescs = (Vector <String> *) kwEnumDescs->fetch (i);
+ String keyword = kwKeyword->fetch (i);
+ if (kwDescrip->fetch (i) != NULL)
+ {
+ fprintf (dis_file, keywordFormat, keyword, kwDescrip->fetch (i));
+ keyword = empty;
+ }
+ if (kwFormula->fetch (i) != NULL)
+ {
+ fprintf (dis_file, keywordFormat, keyword, kwFormula->fetch (i));
+ keyword = empty;
+ continue;
+ }
+ int numEnums = enumDescs != NULL ? enumDescs->size () : 0;
+ for (int jj = 0; jj < numEnums; jj++)
+ {
+ fprintf (dis_file, keywordFormat, keyword, enumDescs->fetch (jj));
+ keyword = empty;
+ }
+ }
+ destroy (res);
+}
+
+void
+er_print::obj_list ()
+{
+ LoadObject *lo;
+ int index;
+ int align[MAX_NUM_HEADER];
+ char *header[MAX_NUM_HEADER];
+ char **lists[MAX_NUM_HEADER];
+ Vector<LoadObject*> *text_segments = dbeSession->get_text_segments ();
+ if (text_segments->size () == 0)
+ {
+ fprintf (dis_file, GTXT ("There are no load objects in this experiment\n"));
+ return;
+ }
+ align[0] = -1; // left-justify
+ align[1] = -1; // left-justify
+ align[2] = -1; // left-justify
+ align[3] = -1; // left-justify
+ header[0] = GTXT ("Sel");
+ header[1] = GTXT ("Load Object");
+ header[2] = GTXT ("Index");
+ header[3] = GTXT ("Path");
+
+ int size = text_segments->size ();
+ lists[0] = new char*[size];
+ lists[1] = new char*[size];
+ lists[2] = new char*[size];
+ lists[3] = new char*[size];
+
+ char *lo_name;
+ int new_index = 0;
+ Vec_loop (LoadObject*, text_segments, index, lo)
+ {
+ lo_name = lo->get_name ();
+ if (lo_name != NULL)
+ {
+ size_t len = strlen (lo_name);
+ if (len > 7 && streq (lo_name + len - 7, NTXT (".class>")))
+ continue;
+ }
+ LibExpand expand = dbev->get_lo_expand (lo->seg_idx);
+ switch (expand)
+ {
+ case LIBEX_SHOW:
+ lists[0][new_index] = dbe_strdup (GTXT ("show"));
+ break;
+ case LIBEX_HIDE:
+ lists[0][new_index] = dbe_strdup (GTXT ("hide"));
+ break;
+ case LIBEX_API:
+ lists[0][new_index] = dbe_strdup (GTXT ("API-only"));
+ break;
+ }
+ lists[1][new_index] = dbe_strdup (lo_name);
+ lists[2][new_index] = dbe_sprintf (NTXT ("%d"), lo->seg_idx);
+ lists[3][new_index] = dbe_strdup (lo->get_pathname ());
+ new_index++;
+ }
+ disp_list (4, new_index, align, header, lists);
+ for (int i = 0; i < 4; i++)
+ {
+ for (int j = 0; j < new_index; j++)
+ free (lists[i][j]);
+ delete[] lists[i];
+ }
+ delete text_segments;
+}
+
+void
+er_print::seg_list ()
+{
+ LoadObject *lo;
+ int index;
+ int align[MAX_NUM_HEADER];
+ char *header[MAX_NUM_HEADER];
+ char **lists[MAX_NUM_HEADER];
+
+ // XXX seg_list only prints text segments; should extend to all
+ Vector<LoadObject*> *lobjs = dbeSession->get_text_segments ();
+ if (lobjs->size () == 0)
+ {
+ fprintf (dis_file, GTXT ("There are no segments in this experiment\n"));
+ return;
+ }
+ align[0] = -1; // left-justify
+ align[1] = 1; // right-justify
+ align[2] = -1; // left-justify
+ header[0] = GTXT ("Sel");
+ header[1] = GTXT ("Size");
+ header[2] = GTXT ("Segment");
+
+ int size = lobjs->size ();
+ lists[0] = new char*[size];
+ lists[1] = new char*[size];
+ lists[2] = new char*[size];
+
+ char *lo_name;
+ int new_index = 0;
+ Vec_loop (LoadObject*, lobjs, index, lo)
+ {
+ lo_name = lo->get_name ();
+ if (lo_name != NULL)
+ {
+ size_t len = strlen (lo_name);
+ if (len > 7 && streq (lo_name + len - 7, NTXT (".class>")))
+ continue;
+ }
+ bool expand = dbev->get_lo_expand (lo->seg_idx);
+ lists[0][new_index] = strdup (expand ? GTXT ("yes") : GTXT ("no"));
+ lists[1][new_index] = dbe_sprintf (NTXT ("%lld"), (ll_t) lo->get_size ());
+ lists[2][new_index] = strdup (lo->get_pathname ());
+ new_index++;
+ }
+
+ disp_list (3, new_index, align, header, lists);
+ for (int i = 0; i < 4; i++)
+ {
+ for (int j = 0; j < new_index; j++)
+ free (lists[i][j]);
+ delete[] lists[i];
+ }
+ delete lobjs;
+}
+
+void
+er_print::filter_list (CmdType cmd_type)
+{
+ FilterNumeric *select;
+ int index;
+ int align[MAX_NUM_HEADER];
+ char *header[MAX_NUM_HEADER];
+ char **lists[MAX_NUM_HEADER];
+ char *pattern;
+
+ // first ensure that the data has been read
+ MetricList *mlist = dbev->get_metric_list (MET_INDX);
+ Hist_data *data = dbev->get_hist_data (mlist, Histable::INDEXOBJ, 0, Hist_data::ALL);
+ delete data;
+
+ align[0] = 1; // right-justify
+ align[1] = -1; // left-justify
+ align[2] = 1; // right-justify
+ align[3] = 1; // right-justify
+ header[0] = GTXT ("Exp");
+ header[1] = GTXT ("Sel");
+ header[2] = GTXT ("Total");
+ header[3] = GTXT ("Status");
+
+ int size = dbeSession->nexps ();
+ lists[0] = new char*[size];
+ lists[1] = new char*[size];
+ lists[2] = new char*[size];
+ lists[3] = new char*[size];
+ int new_index = 0;
+ for (index = 0; index < size; index++)
+ {
+ switch (cmd_type)
+ {
+ case SAMPLE_LIST:
+ select = dbev->get_FilterNumeric (index, SAMPLE_FILTER_IDX);
+ break;
+ case THREAD_LIST:
+ select = dbev->get_FilterNumeric (index, THREAD_FILTER_IDX);
+ break;
+ case LWP_LIST:
+ select = dbev->get_FilterNumeric (index, LWP_FILTER_IDX);
+ break;
+ case CPU_LIST:
+ select = dbev->get_FilterNumeric (index, CPU_FILTER_IDX);
+ break;
+ default:
+ abort (); // internal error
+ }
+ if (select == NULL)
+ continue;
+ lists[0][new_index] = dbe_sprintf (NTXT ("%d"), index + 1);
+ pattern = dbev->get_exp_enable (index) ? select->get_pattern () : NULL;
+ lists[1][new_index] = strdup (pattern && *pattern ? pattern : GTXT ("none"));
+ lists[2][new_index] = dbe_sprintf (NTXT ("%lld"), (ll_t) select->nelem ());
+ lists[3][new_index] = select->get_status ();
+ new_index++;
+ }
+ disp_list (3, size, align, header, lists);
+ for (int i = 0; i < 4; i++)
+ {
+ for (int j = 0; j < new_index; j++)
+ free (lists[i][j]);
+ delete[] lists[i];
+ }
+}
+
+int
+er_print::check_exp_id (int exp_id, char *sel)
+{
+ if (exp_id < 0 || exp_id >= dbeSession->nexps ())
+ {
+ fprintf (stderr, GTXT ("Error: Invalid number entered: %s\nType \"exp_list\" for a list of all experiments.\n"),
+ sel);
+ return -1;
+ }
+ return exp_id;
+}
+
+int
+er_print::get_exp_id (char *sel, int &bgn_index, int &end_index)
+{
+ int id, exp_id;
+ if (sel == NULL || strcmp (sel, NTXT ("all")) == 0)
+ {
+ // loop over all experiments
+ bgn_index = 0;
+ end_index = dbeSession->nexps () - 1;
+ }
+ else
+ {
+ id = (int) strtol (sel, (char **) NULL, 10) - 1;
+ exp_id = check_exp_id (id, sel);
+ if (exp_id == -1)
+ return -1;
+ bgn_index = end_index = exp_id;
+ }
+ return 0;
+}
+
+void
+er_print::print_objects ()
+{
+ Vector<LoadObject*> *lobjs = dbeSession->get_text_segments ();
+ char *msg = pr_load_objects (lobjs, NTXT (""));
+ delete lobjs;
+ fprintf (out_file, NTXT ("%s\n"), msg);
+ free (msg);
+}
+
+void
+er_print::print_overview ()
+{
+ //fprintf(out_file, NTXT("%s\n"), GTXT("Not implemented yet."));//YXXX
+ Vector<char*> *status = dbeGetOverviewText (dbevindex);
+ StringBuilder sb;
+ sb.append (GTXT ("Experiment(s):\n\n"));
+ for (int i = 0; i < status->size (); i++)
+ sb.appendf (NTXT ("%s\n"), status->fetch (i));
+ sb.append (GTXT ("Metrics:\n"));
+ sb.toFile (out_file);
+
+ Vector<void*> *data = dbeGetRefMetricTree (dbevindex, false);
+ Vector<char *> *metric_cmds = new Vector<char *>();
+ Vector<char *> *non_metric_cmds = new Vector<char *>();
+ print_overview_nodes (data, 0, metric_cmds, non_metric_cmds);
+ Vector<void*> *values = dbeGetRefMetricTreeValues (0, metric_cmds, non_metric_cmds);
+ print_overview_tree (data, 0, values, metric_cmds, non_metric_cmds);
+
+ StringBuilder sb2;
+ sb2.append (GTXT ("\nNotes: '*' indicates hot metrics, '[X]' indicates currently enabled metrics.\n"));
+ sb2.append (GTXT (" The metrics command can be used to change selections. The metric_list command lists all available metrics.\n"));
+ sb2.toFile (out_file);
+}
+
+void
+er_print::print_overview_nodes (Vector<void*> * data, int level, Vector<char *> *metric_cmds, Vector<char *> *non_metric_cmds)
+{
+ Vector<void*> *fields = (Vector<void*> *) data->fetch (0);
+ Vector<void*> *children = (Vector<void*> *) data->fetch (1);
+ char *name = ((Vector<char*> *)fields->fetch (0))->fetch (0);
+ int vstyles_capable = ((Vector<int>*) fields->fetch (5))->fetch (0); //bitmask e.g.VAL_TIMEVAL
+ bool has_value = ((Vector<bool>*) fields->fetch (10))->fetch (0);
+ bool selectable = (vstyles_capable != 0) ? true : false;
+ if (selectable)
+ metric_cmds->append (name);
+ else if (has_value)
+ non_metric_cmds->append (name);
+
+ level++;
+ for (int i = 0; i < children->size (); i++)
+ print_overview_nodes ((Vector<void*> *)(children->fetch (i)), level, metric_cmds, non_metric_cmds);
+}
+
+void
+er_print::print_overview_tree (Vector<void*> * data, int level, Vector<void*> * values, Vector<char *> *metric_cmds, Vector<char *> *non_metric_cmds)
+{
+ Vector<void*> * fields = (Vector<void*> *) data->fetch (0);
+ Vector<void*> * children = (Vector<void*> *) data->fetch (1);
+ char *name = ((Vector<char*> *)fields->fetch (0))->fetch (0);
+ char *username = ((Vector<char*> *)fields->fetch (1))->fetch (0);
+ int flavors = ((Vector<int>*) fields->fetch (3))->fetch (0); //bitmask e.g. EXCLUSIVE
+ int vstyles_capable = ((Vector<int>*) fields->fetch (5))->fetch (0); //bitmask e.g.VAL_TIMEVAL
+ // bool aggregation = ((Vector<bool>*) fields->fetch(9))->fetch(0);
+ // bool has_value = ((Vector<bool>*) fields->fetch(10))->fetch(0);
+ char *unit = ((Vector<char*> *) fields->fetch (11))->fetch (0);
+
+ StringBuilder sb;
+ for (int i = 0; i < level * 2; i++)
+ sb.append (NTXT (" ")); // NOI18N
+
+ bool selectable = (vstyles_capable != 0) ? true : false;
+ if (selectable)
+ {
+ bool isSelected = dbev->get_metric_list (MET_NORMAL)->find_metric_by_name (name) == NULL ? false : true;
+ if (isSelected)
+ sb.append (NTXT ("[X]"));
+ else
+ sb.append (NTXT ("[ ]"));
+ }
+ if ((unit != NULL && dbe_strcmp (unit, UNIT_SECONDS) == 0)
+ || (unit == NULL && vstyles_capable & VAL_TIMEVAL))
+ unit = GTXT ("Seconds");
+
+ bool isHiddenInOverview = ((flavors & BaseMetric::STATIC) != 0);
+ if (name != NULL && dbe_strcmp (name, L1_STATIC) == 0)
+ isHiddenInOverview = true;
+ if (!dbeSession->has_java () && name != NULL && dbe_strcmp (name, L1_GCDURATION) == 0)
+ isHiddenInOverview = true;
+ if (isHiddenInOverview)
+ return;
+
+ sb.append (username == NULL ? NTXT ("") : username); // NOI18N
+ int show = 0;
+ if (name == NULL)
+ show = 0;
+ else if (strstr (name, NTXT ("PROFDATA_TYPE_")) == NULL)
+ show = 1;
+
+ if (show)
+ {
+ sb.append (username == NULL ? NTXT ("") : NTXT (" - ")); // NOI18N
+ sb.append (name == NULL ? NTXT ("") : name); // NOI18N
+ }
+
+ // "Bugs 16624403 and 19539622" (leave this string intact for searches)
+ // add an extra condition for now
+ // once we have proper fixes, eliminate test on Bug16624402_extra_condition
+ int Bug16624402_extra_condition = 1;
+ if (username)
+ {
+ if (strcmp (username, NTXT ("Block Covered %")) == 0) Bug16624402_extra_condition = 0;
+ if (strcmp (username, NTXT ("Instr Covered %")) == 0) Bug16624402_extra_condition = 0;
+ }
+ if (Bug16624402_extra_condition > 0 && values->size () > 0)
+ {
+ Vector<void*> * valueColumns = (Vector<void*> *)values->fetch (0);
+ Vector<void*> * highlightColumns = (Vector<void*> *)values->fetch (1);
+ int jj = 0;
+ int found = 0;
+ for (jj = 0; jj < valueColumns->size (); jj++)
+ {
+ const char *value_name = "";
+ if (jj < metric_cmds->size ())
+ value_name = metric_cmds->fetch (jj);
+ else
+ value_name = non_metric_cmds->fetch (jj - metric_cmds->size ());
+ if (dbe_strcmp (value_name, name) != 0)
+ continue;
+ else
+ {
+ found = 1;
+ break;
+ }
+ }
+ if (found)
+ {
+ Vector<void*> * valueVec = (Vector<void*> *)valueColumns->fetch (jj);
+ Vector<bool> * highlights = (Vector<bool> *)highlightColumns->fetch (jj);
+ for (int kk = 0; kk < valueVec->size (); kk++)
+ {
+ char * value_str;
+ int show_value = 0;
+ switch (valueVec->type ())
+ {
+ case VEC_INTEGER:
+ value_str = dbe_sprintf (NTXT ("%ld"), (long) (((Vector<int> *)valueVec)->fetch (kk)));
+ show_value = 1;
+ break;
+ case VEC_DOUBLE:
+ value_str = dbe_sprintf (NTXT ("%.3f"), (double) (((Vector<double> *)valueVec)->fetch (kk)));
+ show_value = 1;
+ break;
+ case VEC_LLONG:
+ value_str = dbe_sprintf (NTXT ("%lld"), (long long) (((Vector<long> *)valueVec)->fetch (kk)));
+ show_value = 1;
+ break;
+ case VEC_STRING:
+ value_str = NTXT ("");
+ break;
+ default:
+ value_str = NTXT ("");
+ }
+ if (show_value)
+ {
+ if (kk == 0)
+ {
+ sb.append (unit == NULL ? NTXT ("") : NTXT (" ("));
+ sb.append (unit == NULL ? NTXT ("") : unit);
+ sb.append (unit == NULL ? NTXT ("") : NTXT (")"));
+ sb.append (NTXT (":"));
+ }
+ bool highlight = highlights->fetch (kk);
+ const char * hilite = highlight ? NTXT ("*") : NTXT ("");
+ sb.append (NTXT (" ["));
+ sb.append (hilite);
+ sb.append (value_str);
+ sb.append (NTXT ("]"));
+ }
+ }
+ }
+ }
+ sb.append (NTXT ("\n"));
+ sb.toFile (out_file);
+ level++;
+ for (int i = 0; i < children->size (); i++)
+ print_overview_tree ((Vector<void*> *)(children->fetch (i)), level, values, metric_cmds, non_metric_cmds);
+}
+
+void
+er_print::print_segments ()
+{
+ Vector<LoadObject*> *lobjs = dbeSession->get_text_segments ();
+ char *msg = pr_load_objects (lobjs, NTXT (""));
+ delete lobjs;
+ fprintf (dis_file, NTXT ("Not implemented yet!\n"));
+ free (msg);
+}
+
+void
+er_print::print_dobj (Print_mode mode, MetricList *mlist1,
+ char *dobj_name, char *sel)
+{
+ Hist_data *hist_data = NULL;
+ char *errstr;
+ er_print_common_display *cd;
+ int list_limit = limit;
+ Histable *sobj = NULL;
+ Dprintf (DEBUG_DATAOBJ, NTXT ("er_print::print_dobj(mode=%d,dobj=%s,sel=%s)\n"),
+ mode, (dobj_name == NULL) ? NTXT ("0") : dobj_name, (sel == NULL) ? NTXT ("0") : sel);
+ char *name = dbev->getSort (MET_DATA);
+ switch (mode)
+ {
+ case MODE_LIST:
+ hist_data = dbev->get_hist_data (mlist1, Histable::DOBJECT, 0, Hist_data::ALL);
+ break;
+ case MODE_DETAIL:
+ // if specified, find the dataobject from the name
+ if (dobj_name && strcmp (dobj_name, NTXT ("<All>")))
+ {
+ if (!dbeSession->find_obj (dis_file, inp_file, sobj, dobj_name,
+ sel, Histable::DOBJECT, (inp_file != stdin)))
+ return;
+ if (sobj == NULL)
+ { // dataobject/segment not found
+ hist_data = dbev->get_hist_data (mlist1, Histable::DOBJECT, 0, Hist_data::DETAIL);
+ if (!dbeSession->find_obj (dis_file, inp_file, sobj, dobj_name,
+ sel, Histable::DOBJECT, (inp_file != stdin)))
+ return;
+ if (sobj == NULL)
+ { // dataobject/segment not found
+ fprintf (stderr, GTXT ("Error: No dataobject with given name `%s' found.\n"),
+ dobj_name);
+ return;
+ }
+ }
+
+ list_limit = 1;
+ }
+ if (!hist_data)
+ hist_data = dbev->get_hist_data (mlist1, Histable::DOBJECT, 0, Hist_data::DETAIL);
+ break;
+ case MODE_ANNOTATED:
+ hist_data = dbev->get_hist_data (mlist1, Histable::DOBJECT, 0, Hist_data::LAYOUT);
+ break;
+ default: // MODE_GPROF is not relevant for DataObjects
+ abort ();
+ }
+
+ if (hist_data->get_status () != Hist_data::SUCCESS)
+ {
+ // XXXX is this error message adequate?
+ errstr = DbeView::status_str (DbeView::DBEVIEW_NO_DATA);
+ if (errstr)
+ {
+ fprintf (stderr, GTXT ("Error: %s\n"), errstr);
+ free (errstr);
+ }
+ delete hist_data;
+ return;
+ }
+ cd = (er_print_common_display *) new er_print_histogram (dbev, hist_data,
+ hist_data->get_metric_list (), mode, list_limit, name, sobj, false, false);
+ free (name);
+ print_cmd (cd);
+
+ delete hist_data;
+ delete cd;
+}
+
+void
+er_print::print_func (Histable::Type type, Print_mode mode, MetricList *mlist1,
+ MetricList *mlist2, char *func_name, char *sel)
+{
+ Hist_data *hist_data;
+ Hist_data::HistItem *hitem;
+ int index;
+ char *errstr;
+ int list_limit = limit;
+ Histable *sobj = NULL;
+ MetricList *mlist;
+ StringBuilder sb;
+ char *sname = dbev->getSort (MET_NORMAL);
+ sb.append (sname);
+ free (sname);
+
+ switch (mode)
+ {
+ case MODE_DETAIL:
+ {
+ // The first metric list, mlist1, is only used to pick out the sort
+ // mlist2 is the one used to generate the data
+ char *prevsort = NULL;
+ // if specified, find the function from the function name
+ if (func_name && strcmp (func_name, NTXT ("<All>")))
+ {
+ if ((!dbeSession->find_obj (dis_file, inp_file, sobj, func_name,
+ sel, Histable::FUNCTION, (inp_file != stdin)) || (sobj == NULL)) &&
+ !dbeSession->find_obj (dis_file, inp_file, sobj, func_name,
+ sel, Histable::LOADOBJECT, (inp_file != stdin)))
+ return;
+ if (sobj == NULL)
+ { // function/segment object not found
+ fprintf (stderr, GTXT ("Error: No function with given name `%s' found.\n"),
+ func_name);
+ return;
+ }
+ list_limit = 1;
+ }
+ else
+ {
+ // find the sort metric from the reference list
+ prevsort = mlist2->get_sort_cmd ();
+
+ // find the current sort metric from the current list
+ char *cursort = mlist1->get_sort_cmd ();
+
+ // find the corresponding metric in the reference list
+ (void) mlist2->set_sort (cursort, false);
+ free (cursort);
+ // if it fails, nothing is needed
+ }
+ hist_data = dbev->get_hist_data (mlist2, type, 0, Hist_data::ALL);
+
+ // restore
+ if (sobj == NULL)
+ {
+ if (prevsort == NULL)
+ abort ();
+ (void) mlist2->set_sort (prevsort, false);
+ }
+ mlist = mlist2;
+ free (prevsort);
+ break;
+ }
+ case MODE_GPROF:
+ // if specified, find the function from the function name
+ if (func_name && strcmp (func_name, NTXT ("<All>")))
+ {
+ if (!dbeSession->find_obj (dis_file, inp_file, sobj, func_name,
+ sel, Histable::FUNCTION, (inp_file != stdin)))
+ return;
+ if (sobj == NULL)
+ { // function/segment object not found
+ fprintf (stderr, GTXT ("Error: No function with given name `%s' found.\n"),
+ func_name);
+ return;
+ }
+ list_limit = 1;
+ sb.setLength (0);
+ }
+ sb.append (GTXT ("\nCallers and callees sorted by metric: "));
+ sname = dbev->getSort (MET_CALL);
+ sb.append (sname);
+ free (sname);
+
+ // Use mlist2 to generate the sort order.
+ // mlist1 is used to generate the data.
+ hist_data = dbev->get_hist_data (mlist2, type, 0, Hist_data::ALL);
+ mlist = mlist1;
+ break;
+ default:
+ hist_data = dbev->get_hist_data (mlist1, type, 0, Hist_data::ALL);
+ mlist = mlist1;
+ }
+
+ if (hist_data->get_status () != Hist_data::SUCCESS)
+ {
+ errstr = DbeView::status_str (DbeView::DBEVIEW_NO_DATA);
+ if (errstr)
+ {
+ fprintf (stderr, GTXT ("Error: %s\n"), errstr);
+ free (errstr);
+ }
+ delete hist_data;
+ return;
+ }
+
+ if (type == Histable::FUNCTION)
+ {
+ for (index = 0; index < hist_data->size (); index++)
+ {
+ hitem = hist_data->fetch (index);
+ if (hitem->obj->get_type () == Histable::FUNCTION)
+ // fetch the name, since that will force a format conversion
+ ((Function *) hitem->obj)->get_name ();
+ }
+ }
+
+ char *name = sb.toString ();
+ er_print_histogram *cd = new er_print_histogram (dbev, hist_data,
+ mlist, mode, list_limit, name, sobj, false, false);
+ print_cmd (cd);
+ delete hist_data;
+ free (name);
+ delete cd;
+}
+
+void
+er_print::print_gprof (CmdType cmd_type, char *func_name, char *sel)
+{
+ Histable *sobj = NULL;
+ if (func_name != NULL)
+ {
+ if ((!dbeSession->find_obj (dis_file, inp_file, sobj, func_name,
+ sel, Histable::FUNCTION, (inp_file != stdin))
+ || sobj == NULL)
+ && !dbeSession->find_obj (dis_file, inp_file, sobj, func_name,
+ sel, Histable::LOADOBJECT, (inp_file != stdin)))
+ return;
+ if (sobj == NULL)
+ { // function/segment object not found
+ fprintf (stderr, GTXT ("Error: No function with given name `%s' found.\n"),
+ func_name);
+ return;
+ }
+ }
+ if (cmd_type == CPREPEND)
+ {
+ if (sobj == NULL)
+ {
+ fprintf (stderr, GTXT ("Error: No function name has been specified.\n"));
+ return;
+ }
+ cstack->insert (0, sobj);
+ }
+ else if (cmd_type == CAPPEND)
+ {
+ if (sobj == NULL)
+ {
+ fprintf (stderr, GTXT ("Error: No function name has been specified.\n"));
+ return;
+ }
+ cstack->append (sobj);
+ }
+ else if (cmd_type == CSINGLE)
+ {
+ if (sobj != NULL)
+ {
+ cstack->reset ();
+ cstack->append (sobj);
+ }
+ else if (cstack->size () == 0)
+ {
+ fprintf (stderr, GTXT ("Error: No function name has been specified.\n"));
+ return;
+ }
+ }
+ else if (cmd_type == CRMFIRST)
+ {
+ if (cstack->size () <= 1)
+ {
+ fprintf (stderr, GTXT ("Warning: there is only one function in the stack segment; cannot remove it.\n"));
+ return;
+ }
+ cstack->remove (0);
+ }
+ else if (cmd_type == CRMLAST)
+ {
+ if (cstack->size () <= 1)
+ {
+ fprintf (stderr, GTXT ("Warning: there is only one function in the stack segment; cannot remove it.\n"));
+ return;
+ }
+ cstack->remove (cstack->size () - 1);
+ }
+
+ er_print_gprof *cd = new er_print_gprof (dbev, cstack);
+ print_cmd (cd);
+ delete cd;
+}
+
+/*
+ * Method print_ctree() prints Functions Call Tree.
+ */
+void
+er_print::print_ctree (CmdType cmd_type)
+{
+ if (cmd_type != CALLTREE)
+ {
+ fprintf (stderr, GTXT ("Error: Invalid command type: %d\n"), cmd_type);
+ return;
+ }
+
+ Histable *sobj = dbeSession->get_Total_Function ();
+ Vector<Histable*> *ctree_cstack = new Vector<Histable*>();
+ ctree_cstack->reset ();
+ er_print_ctree *cd = new er_print_ctree (dbev, ctree_cstack, sobj, limit);
+ print_cmd (cd);
+ delete ctree_cstack;
+ delete cd;
+}
+
+void
+er_print::memobj (char *name, int cparam)
+{
+ int type;
+ if (name != NULL)
+ {
+ // find the memory object index for the name
+ MemObjType_t *mot = MemorySpace::findMemSpaceByName (name);
+ if (mot == NULL)
+ {
+ // unknown type, report the error
+ fprintf (stderr, GTXT ("Error: Unknown Memory Object type: %s\n"), name);
+ return;
+ }
+ type = mot->type;
+ }
+ else
+ {
+ MemObjType_t *mot = MemorySpace::findMemSpaceByIndex (cparam);
+ if (mot == NULL)
+ {
+ // unknown type, report the error
+ fprintf (stderr, GTXT ("Error: Unknown Memory Object type: %s\n"), name);
+ return;
+ }
+ type = cparam;
+ }
+ dbePrintData (0, DSP_MEMOBJ, type, NULL, NULL, out_file);
+}
+
+void
+er_print::mo_define (char *moname, char *mo_index_exp, char *machmodel, char *short_desc, char *long_desc)
+{
+ char *ret = MemorySpace::mobj_define (moname, mo_index_exp, machmodel, short_desc, long_desc);
+ if (ret != NULL)
+ fprintf (stderr, GTXT ("mobj_define for %s failed: %s\n"), moname, ret);
+}
+
+void
+er_print::mo_list (bool showtab, FILE *outf)
+{
+ Vector<bool> *mtab = NULL;
+ Vector<void*>*res = MemorySpace::getMemObjects ();
+ if (showtab)
+ mtab = dbev->get_MemTabState ();
+ if (res == NULL)
+ // Since we checked already, this is an internal error
+ abort ();
+
+ // unpack the return
+ // Vector<char*> *index = (Vector<int> *)res->fetch(0); // not used
+ Vector<char*> *mo_names = (Vector<char*> *)res->fetch (1);
+ // Vector<char*> *mnemonic = (Vector<char> *)res->fetch(2); // not used
+ Vector<char*> *mo_expr = (Vector<char*> *)res->fetch (3);
+ Vector<char*> *mo_mach_m = (Vector<char*> *)res->fetch (4);
+ // Vector<char*> *tmpOrder = (Vector<int> *)res->fetch(5); // not used
+
+ int size = mo_names->size ();
+ if (size == 0)
+ {
+ if (!getenv ("_BUILDING_MANPAGE"))
+ fprintf (outf, GTXT (" No Memory Object Types Defined\n"));
+ }
+ else
+ {
+ if (!getenv ("_BUILDING_MANPAGE"))
+ fprintf (outf, GTXT (" Memory Object Types Available:\n"));
+ else
+ fprintf (outf, GTXT ("*Memory Object Types*\n"));
+ for (int i = 0; i < size; i++)
+ {
+ if (mtab)
+ fprintf (outf, NTXT (" %c %s\n"), mtab->fetch (i) ? 'T' : 'F',
+ mo_names->fetch (i));
+ else
+ {
+ if (mo_mach_m->fetch (i) != NULL)
+ fprintf (outf, NTXT (" %s\t\t\"%s\"\t\t(machinemodel: %s)\n"),
+ mo_names->fetch (i), mo_expr->fetch (i), mo_mach_m->fetch (i));
+ else
+ fprintf (outf, NTXT (" %s\t\t\"%s\"\n"),
+ mo_names->fetch (i), mo_expr->fetch (i));
+ }
+ }
+ }
+ delete mo_names;
+ delete mo_expr;
+ delete mo_mach_m;
+ delete res;
+}
+
+void
+er_print::indxobj (char *name, int cparam)
+{
+ int type;
+ if (name != NULL)
+ {
+ // find the index object index for the name
+ type = dbeSession->findIndexSpaceByName (name);
+ if (type < 0)
+ {
+ // unknown type, report the error
+ fprintf (stderr, GTXT ("Error: Unknown Index Object type: %s\n"), name);
+ return;
+ }
+ }
+ else
+ {
+ char *indxname = dbeSession->getIndexSpaceName (cparam);
+ if (indxname == NULL)
+ {
+ // unknown type, report the error
+ fprintf (stderr, GTXT ("Error: Unknown Index Object type: %d\n"), cparam);
+ return;
+ }
+ type = cparam;
+ }
+ dbePrintData (0, DSP_INDXOBJ, type, NULL, NULL, out_file);
+}
+
+void
+er_print::indxo_define (char *ioname, char *io_index_exp, char *sdesc, char *ldesc)
+{
+ char *ret = dbeDefineIndxObj (ioname, io_index_exp, sdesc, ldesc);
+ if (ret != NULL)
+ fprintf (stderr, GTXT ("indxobj_define for %s failed: %s\n"), ioname, ret);
+}
+
+void
+er_print::indxo_list (bool showtab, FILE *outf)
+{
+ Vector<bool> *indxtab = NULL;
+ char *name;
+ char *i18n_name;
+ if (!getenv ("_BUILDING_MANPAGE"))
+ fprintf (outf, GTXT (" Index Object Types Available:\n"));
+ else
+ fprintf (outf, GTXT ("*Index Object Types*\n"));
+ Vector<void*>*res = dbeGetIndxObjDescriptions (0);
+ if (showtab)
+ indxtab = dbev->get_IndxTabState ();
+ if (res == NULL) // If none is defined
+ return;
+ Vector<char*> *indxo_names = (Vector<char*> *)res->fetch (1);
+ Vector<char*> *indxo_i18nnames = (Vector<char*> *)res->fetch (3);
+ Vector<char*> *indxo_exprlist = (Vector<char*> *)res->fetch (5);
+ int size = indxo_names->size ();
+ for (int i = 0; i < size; i++)
+ {
+ name = indxo_names->fetch (i);
+ i18n_name = indxo_i18nnames->fetch (i);
+ if (indxtab)
+ {
+ if ((i18n_name != NULL) && (strcmp (i18n_name, name) != 0))
+ fprintf (outf, NTXT (" %c %s (%s)\n"), indxtab->fetch (i) ? 'T' : 'F',
+ i18n_name, name);
+ else
+ fprintf (outf, NTXT (" %c %s\n"), indxtab->fetch (i) ? 'T' : 'F', name);
+ }
+ else
+ {
+ if (i18n_name != NULL && strcmp (i18n_name, indxo_names->fetch (i)) != 0)
+ fprintf (outf, NTXT (" %s (%s)"), i18n_name, name);
+ else
+ fprintf (outf, NTXT (" %s"), name);
+ }
+ char *exprs = indxo_exprlist->fetch (i);
+ if (exprs != NULL)
+ fprintf (outf, NTXT (" \t%s\n"), exprs);
+ else
+ fprintf (outf, NTXT ("\n"));
+ }
+ delete indxo_names;
+ if (showtab)
+ delete res;
+}
+
+void
+er_print::ifreq ()
+{
+ dbev->ifreq (out_file);
+}
+
+void
+er_print::dump_nodes ()
+{
+ dbev->dump_nodes (out_file);
+}
+
+void
+er_print::dump_stacks ()
+{
+ dbeSession->dump_stacks (out_file);
+}
+
+void
+er_print::dump_unk_pcs ()
+{
+ // Dump the nodes associated with the <Unknown> function
+ dbev->get_path_tree ()->dumpNodes (out_file, dbeSession->get_Unknown_Function ());
+
+ // Dump the nodes associated with the <no Java callstack recorded> function
+ Vector<Function *> *matches = dbeSession->match_func_names ("<no Java callstack recorded>", dbev->get_name_format ());
+ if (matches == NULL || matches->size () == 0)
+ fprintf (out_file, GTXT ("No %s functions found\n"), "<no Java callstack recorded>");
+ else
+ {
+ Function *fitem;
+ int index;
+ Vec_loop (Function*, matches, index, fitem)
+ {
+ dbev->get_path_tree ()->dumpNodes (out_file, fitem);
+ }
+ delete matches;
+ }
+}
+
+void
+er_print::dump_funcs (char *arg1)
+{
+ if (arg1 == NULL || strlen (arg1) == 0)
+ dbeSession->dump_segments (out_file);
+ else
+ {
+ Vector<Function *> *matches = dbeSession->match_func_names (arg1, dbev->get_name_format ());
+ if (matches == NULL)
+ {
+ fprintf (stderr, GTXT ("Invalid argument `%s' -- not a regular expression\n"), arg1);
+ return;
+ }
+ fprintf (out_file, GTXT ("%d Function's match `%s'\n"), (int) matches->size (), arg1);
+ Function *fitem;
+ int index;
+ Vec_loop (Function*, matches, index, fitem)
+ {
+ fprintf (out_file, NTXT (" %5lld -- %s (%s) [%s]\n"),
+ (ll_t) fitem->id, fitem->get_name (),
+ (fitem->module ? fitem->module->file_name : NTXT ("<unknown>")),
+ ((fitem->module && fitem->module->loadobject) ?
+ get_basename (fitem->module->loadobject->get_name ()) : NTXT ("<unknown>")));
+ }
+ delete matches;
+ }
+}
+
+void
+er_print::dump_dataobjects (char *arg1)
+{
+ // Force computation of data objects, to update master table; discard it
+ MetricList *mlist1 = dbev->get_metric_list (MET_DATA);
+ Hist_data *data = dbev->get_hist_data (mlist1, Histable::DOBJECT, 0, Hist_data::ALL);
+ delete data;
+
+ if (arg1 == NULL || strlen (arg1) == 0)
+ dbeSession->dump_dataobjects (out_file);
+ else
+ {
+ Vector<DataObject *> *matches = dbeSession->match_dobj_names (arg1);
+ if (matches == NULL)
+ {
+ fprintf (stderr, GTXT ("Invalid argument `%s' -- not a regular expression\n"), arg1);
+ return;
+ }
+ fprintf (out_file, GTXT ("%d DataObject's match `%s'\n"), (int) matches->size (), arg1);
+ DataObject *ditem;
+ int index;
+ Vec_loop (DataObject*, matches, index, ditem)
+ {
+ fprintf (out_file, NTXT (" %5lld -- %s\n"), (ll_t) ditem->id, ditem->get_name ());
+ }
+ delete matches;
+ }
+}
+
+void
+er_print::dump_map ()
+{
+ dbeSession->dump_map (out_file);
+}
+
+void
+er_print::dump_entities ()
+{
+ int ent_prop_ids[] = {PROP_THRID, PROP_LWPID, PROP_CPUID, PROP_EXPID, -1};
+
+ // loop over experiments
+ for (int exp_id = 0; exp_id < dbeSession->nexps (); exp_id++)
+ {
+ Experiment *exp = dbeSession->get_exp (exp_id);
+ fprintf (out_file, GTXT ("Experiment %d (%s)\n"),
+ exp_id, exp->get_expt_name ());
+
+ for (int kk = 0; ent_prop_ids[kk] != -1; kk++)
+ {
+ int ent_prop_id = ent_prop_ids[kk];
+ Vector<void*> *elist = dbeGetEntities (0, exp_id, ent_prop_id);
+ if (!elist)
+ continue;
+ Vector<int> *entity_vals = (Vector<int> *) elist->fetch (0);
+ Vector<char*> *jthr_names = (Vector<char*> *)elist->fetch (1);
+ Vector<char*> *jthr_g_names = (Vector<char*> *)elist->fetch (2);
+ Vector<char*> *jthr_p_names = (Vector<char*> *)elist->fetch (3);
+ Vector<char*> *entity_name = (Vector<char*> *)elist->fetch (4);
+ int nent = entity_vals->size ();
+ char *entName = entity_name->fetch (0);
+ if (!entName)
+ entName = NTXT ("<unknown>");
+ fprintf (out_file, GTXT (" %s\n"), entName);
+ for (int i = 0; i < nent; i++)
+ fprintf (out_file, GTXT (" %s=%d: %s, %s, %s\n"),
+ entName, entity_vals->fetch (i),
+ jthr_names->fetch (i) != NULL ? jthr_names->fetch (i) : NTXT ("N/A"),
+ jthr_g_names->fetch (i) != NULL ? jthr_g_names->fetch (i) : NTXT ("N/A"),
+ jthr_p_names->fetch (i) != NULL ? jthr_names->fetch (i) : NTXT ("N/A"));
+ destroy (elist);
+ }
+ }
+}
+
+void
+er_print::dump_stats ()
+{
+ Emsg *m = dbev->get_path_tree ()->fetch_stats ();
+ while (m != NULL)
+ {
+ fprintf (out_file, NTXT ("%s\n"), m->get_msg ());
+ m = m->next;
+ }
+ dbev->get_path_tree ()->delete_stats ();
+}
+
+void
+er_print::dump_proc_warnings ()
+{
+ PathTree *p = dbev->get_path_tree ();
+ if (p == NULL)
+ return;
+ Emsg *m = p->fetch_warnings ();
+ while (m != NULL)
+ {
+ fprintf (out_file, NTXT ("%s\n"), m->get_msg ());
+ m = m->next;
+ }
+ dbev->get_path_tree ()->delete_warnings ();
+}
+
+void
+er_print::print_cmd (er_print_common_display *cd)
+{
+ cd->set_out_file (out_file);
+ cd->data_dump ();
+}
+
+FILE *
+er_print::set_outfile (char *cmd, FILE *&set_file, bool append)
+{
+ FILE *new_file;
+ char *home;
+ if (!strcasecmp (cmd, NTXT ("-")))
+ {
+ new_file = stdout;
+ out_fname = NTXT ("<stdout>");
+ }
+ else if (!strcasecmp (cmd, NTXT ("--")))
+ {
+ new_file = stderr;
+ out_fname = NTXT ("<stderr>");
+ }
+ else
+ {
+ char *fname;
+ char *path = NULL;
+ // Handle ~ in file names
+ home = getenv (NTXT ("HOME"));
+ if ((fname = strstr (cmd, NTXT ("~/"))) != NULL && home != NULL)
+ path = dbe_sprintf (NTXT ("%s/%s"), home, fname + 2);
+ else if ((fname = strstr (cmd, NTXT ("~"))) != NULL && home != NULL)
+ path = dbe_sprintf (NTXT ("/home/%s"), fname + 1);
+ else
+ path = strdup (cmd);
+ new_file = fopen (path, append ? NTXT ("a") : NTXT ("w"));
+ if (new_file == NULL)
+ {
+ fprintf (stderr, GTXT ("Error: Unable to open file: %s\n"), cmd);
+ free (path);
+ return NULL;
+ }
+ out_fname = path;
+ }
+ if (set_file && set_file != stdout)
+ fclose (set_file);
+ set_file = new_file;
+ return set_file;
+}
diff --git a/gprofng/src/gp-print.h b/gprofng/src/gp-print.h
new file mode 100644
index 00000000000..80c922f5f56
--- /dev/null
+++ b/gprofng/src/gp-print.h
@@ -0,0 +1,118 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _GP_PRINT_H
+#define _ER_PRINT_H
+
+#include "Command.h"
+#include "DbeApplication.h"
+#include "Histable.h"
+#include "Print.h"
+
+void ipc_mainLoop (int argc, char *argv[]);
+
+class DbeView;
+template <class ITEM> class Vector;
+
+// er_print object
+class er_print : public DbeApplication
+{
+public:
+
+ er_print (int argc, char *argv[]);
+ virtual ~er_print ();
+ void start (int argc, char *argv[]);
+ bool free_memory_before_exit ();
+
+private:
+
+ char *error_msg;
+ DbeView *dbev;
+ char *out_fname;
+ FILE *inp_file;
+ FILE *dis_file;
+ FILE *out_file;
+ int dbevindex;
+ char *cov_string;
+ int limit;
+ Vector<Histable*> *cstack;
+ bool was_QQUIT;
+
+ // override methods in base class
+ int check_args (int argc, char *argv[]);
+ void usage ();
+
+ int is_valid_seg_name (char *seg_name, int prev);
+ int cmp_seg_name (char *full_name, char *seg_name);
+ int process_object_select (char *cov);
+ int set_libexpand (char *cov, enum LibExpand expand);
+ int set_libdefaults ();
+
+ bool end_command (char *cmd);
+ void run (int argc, char *argv[]);
+ void proc_script ();
+ void proc_cmd (CmdType cmd_type, int cparam, char *arg1, char *arg2,
+ char *arg3 = NULL, char *arg4 = NULL, bool xdefault = true);
+ void disp_list (int no_header, int size, int align[],
+ char *header[], char **lists[]);
+ void exp_list ();
+ void describe ();
+ void obj_list ();
+ void seg_list ();
+ void print_objects ();
+ void print_overview ();
+ void print_overview_nodes (Vector<void*> *data, int level,
+ Vector<char *> *metric_cmds, Vector<char *> *non_metric_cmds);
+ void print_overview_tree (Vector<void*> *data, int level, Vector<void*> *values,
+ Vector<char *> *metric_cmds, Vector<char *> *non_metric_cmds);
+ void print_segments ();
+ void filter_list (CmdType cmd_type);
+ int check_exp_id (int exp_id, char *sel);
+ int get_exp_id (char *sel, int &bgn_index, int &end_index);
+ void print_func (Histable::Type type, Print_mode mode,
+ MetricList *mlist1, MetricList *mlist2,
+ char *func_name = NULL, char *sel = NULL);
+ void print_gprof (CmdType cmd_type, char *func_name, char *sel);
+ void print_ctree (CmdType cmd_type);
+ void print_dobj (Print_mode type, MetricList *mlist1,
+ char *dobj_name = NULL, char *sel = NULL);
+ void memobj (char *, int);
+ void mo_list (bool showtab, FILE *outf);
+ void mo_define (char *, char *, char *, char *, char *);
+ void indxobj (char *, int);
+ void indxo_list (bool showtab, FILE *outf);
+ void indxo_define (char *, char *, char *, char *);
+ void ifreq ();
+ void dump_nodes ();
+ void dump_stacks ();
+ void dump_unk_pcs ();
+ void dump_funcs (char *);
+ void dump_dataobjects (char *);
+ void dump_map ();
+ void dump_entities ();
+ void dump_stats ();
+ void dump_proc_warnings ();
+ void send_signal ();
+ void print_cmd (er_print_common_display *);
+ FILE *set_outfile (char *cmd, FILE *&set_file, bool append);
+ void gen_mapfile (char *seg_name, char *cmd);
+};
+
+#endif /* _ER_PRINT_H */
diff --git a/gprofng/src/gprofng.cc b/gprofng/src/gprofng.cc
new file mode 100644
index 00000000000..1bf56791565
--- /dev/null
+++ b/gprofng/src/gprofng.cc
@@ -0,0 +1,301 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <errno.h>
+#include <getopt.h>
+
+#include "Application.h"
+#include "i18n.h"
+#include "util.h"
+
+static int verbose = 0;
+
+class Gprofng : Application
+{
+public:
+ Gprofng (int _argc, char *_argv[]);
+ ~Gprofng ();
+ void start();
+ void usage();
+
+private:
+ void exec_cmd(char *tool_name, int argc, char **argv);
+ int argc;
+ char **argv;
+};
+
+int
+main (int argc, char *argv[])
+{
+ Gprofng *gprofng = new Gprofng (argc, argv);
+ gprofng->start();
+ delete gprofng;
+ return 0;
+}
+
+Gprofng::Gprofng (int _argc, char *_argv[]) : Application(_argc, _argv, NULL)
+{
+ argc = _argc;
+ argv = _argv;
+}
+
+Gprofng::~Gprofng () { }
+
+void
+Gprofng::usage ()
+{
+ /*
+ * Isolate the first line because it has an argument.
+ * Otherwise it would be at the end of this long list.
+ */
+ printf ( GTXT (
+ "Usage: %s [OPTION(S)] COMMAND [KEYWORD] [ARGUMENTS]\n"), whoami);
+
+ printf ( GTXT (
+ "\n"
+ "This is the driver for the GPROFNG tools suite to gather and analyze performance data.\n"
+ "\n"
+ "Options:\n"
+ "\n"
+ " --version print the version number and exit.\n"
+ " --help print usage information and exit.\n"
+ " --check verify if the hardware and software environment is supported.\n"
+ " --verbose {on|off} enable (on) or disable (off) verbose mode; the default is \"off\".\n"
+ "\n"
+ "Commands:\n"
+ "\n"
+ "The driver supports various commands. These are listed below.\n"
+ "\n"
+ "It is also possible to invoke the lower level commands directly, but since these \n"
+ "are subject to change, in particular the options, we recommend to use the driver.\n"
+ "\n"
+ "The man pages for the commands below can be viewed using the command name with\n"
+ "\"gprofng\" replaced by \"gp\" and the spaces replaced by a dash (\"-\"). For\n"
+ "example the man page name for \"gprofng collect app\" is \"gp-collect-app\".\n"
+ "\n"
+ "The following combination of commands and keywords are supported:\n"
+ "\n"
+ "Collect performance data\n"
+ "\n"
+ " gprofng collect app collect application performance data.\n"
+ "\n"
+ "Display the performance results\n"
+ "\n"
+ " gprofng display text display the performance data in ASCII format.\n"
+ " gprofng display html generate an HTML file from one or more experiments.\n"
+/*
+ " gprofng display gui invoke the GUI to graphically analyze the results.\n"
+*/
+ " gprofng display src display source or disassembly with compiler annotations.\n"
+ "\n"
+ "Miscellaneous commands\n"
+ "\n"
+ " gprofng archive include binaries and source code in an experiment directory.\n"
+ "\n"
+ "Environment:\n"
+ "\n"
+ "The following environment variables are supported:\n"
+ "\n"
+ " GPROFNG_MAX_CALL_STACK_DEPTH set the depth of the call stack (default is 256).\n"
+ "\n"
+ " GPROFNG_USE_JAVA_OPTIONS may be set when profiling a C/C++ application\n"
+ " that uses dlopen() to execute Java code.\n"
+ "\n"
+ " GPROFNG_SSH_REMOTE_DISPLAY use this variable to define the ssh command\n"
+ " executed by the remote display tool.\n"
+ "\n"
+ " GPROFNG_SKIP_VALIDATION set this variable to disable checking hardware,\n"
+ " system, and Java versions.\n"
+ "\n"
+ " GPROFNG_ALLOW_CORE_DUMP set this variable to allow a core file to be\n"
+ " generated; otherwise an error report is created on /tmp.\n"
+ "\n"
+ " GPROFNG_ARCHIVE use this variable to define the settings for automatic\n"
+ " archiving upon experiment recording completion.\n"
+ "\n"
+ " GPROFNG_ARCHIVE_COMMON_DIR set this variable to the location of the common archive.\n"
+ "\n"
+ " GPROFNG_JAVA_MAX_CALL_STACK_DEPTH set the depth of the Java call stack; the default\n"
+ " is 256; set to 0 to disable capturing of call stacks.\n"
+ "\n"
+ " GPROFNG_JAVA_NATIVE_MAX_CALL_STACK_DEPTH set the depth of the Java native call stack;\n"
+ " the default is 256; set to 0 to disable capturing\n"
+ " of call stacks (JNI and assembly call stacks\n"
+ " are not captured).\n"
+ "\n"
+ "Documentation:\n"
+ "\n"
+ "A getting started guide for gprofng is maintained as a Texinfo manual. If the info and\n"
+ "gprofng programs are properly installed at your site, the command \"info gprofng\"\n"
+ "should give you access to this document.\n"
+ "\n"
+ "See also:\n"
+ "\n"
+ "gp-archive(1), gp-collect-app(1), gp-display-html(1), gp-display-src(1), gp-display-text(1)\n"));
+
+/*
+ printf ( GTXT (
+ "Usage: %s [--verbose] [--version] [--help] <tool-name> [<keyword>] <args>\n"
+ "\n%s\n"
+ " archive Archive binaries and sources\n"
+ " collect [app] Collect performance data\n"
+ " display [text] Print an ASCII report\n"
+ " display gui Graphical tool for analyzing an experiment\n"
+ " display html Generate an HTML file from an experiment\n"
+ " display src Print source or dissasembly\n"),
+ whoami, getenv ("_BUILDING_MANPAGE")
+ ? "*Available subcommands*"
+ : "Available Subcommands");
+*/
+}
+
+void
+Gprofng::exec_cmd (char *tool_name, int argc, char **argv)
+{
+ static const struct
+ {
+ const char *tool_name;
+ const char *keyword;
+ const char *app_name;
+ } app_names [] = {
+ { "archive", NULL, "gp-archive"},
+ { "collect", "app", "gp-collect-app"},
+ { "collect", "kernel", "gp-collect-kernel"},
+ { "display", "text", "gp-display-text"},
+ { "display", "gui", "gp-display-gui"},
+ { "display", "html", "gp-display-html"},
+ { "display", "src", "gp-display-src"},
+ { NULL, NULL}
+ };
+
+ const char *keyword = argc > 1 ? argv[1] : "";
+ int first = -1;
+ int find_tool_name = -1;
+ for (int i = 0; app_names[i].tool_name; i++)
+ if (!strcmp (tool_name, app_names[i].tool_name))
+ {
+ if (app_names[i].keyword == NULL)
+ {
+ first = i;
+ break;
+ }
+ if (!strcmp (keyword, app_names[i].keyword))
+ {
+ first = i;
+ argc--;
+ argv++;
+ break;
+ }
+ if (find_tool_name == -1)
+ find_tool_name = i;
+ }
+
+ if (first == -1)
+ {
+ if (find_tool_name == -1)
+ fprintf (stderr, GTXT ("%s: error: keyword '%s' is not supported\n"),
+ get_basename (get_name ()), tool_name);
+ else if (*keyword == 0)
+ fprintf (stderr, GTXT ("%s %s: error: no qualifier\n"),
+ get_basename (get_name ()), tool_name);
+ else
+ fprintf (stderr, GTXT ("%s %s: error: qualifier '%s' is not supported\n"),
+ get_basename (get_name ()), tool_name, keyword);
+ exit (1);
+ }
+
+ const char *aname = app_names[first].app_name;;
+
+ char **arr = (char **) malloc ((argc + 3) * sizeof (char *));
+ int n = 0;
+ char *pname = get_name ();
+ arr[n++] = dbe_sprintf ("%.*s%s", (int) (get_basename (pname) - pname),
+ pname, aname);
+ if (app_names[first].keyword)
+ arr[n++] = dbe_sprintf ("--whoami=%s %s %s", whoami, tool_name,
+ app_names[first].keyword);
+ else
+ arr[n++] = dbe_sprintf ("--whoami=%s %s", whoami, tool_name);
+ for (int i = 1; i < argc; i++)
+ arr[n++] = argv[i];
+ arr[n] = NULL;
+ if (verbose)
+ {
+ printf ("gprofng::exec\n");
+ for (int i = 0; arr[i]; i++)
+ printf ("%5d: %s\n", i, arr[i]);
+ printf("\n");
+ }
+ execv (arr[0], arr);
+
+ // If execv returns, it must have failed.
+ fprintf (stderr, GTXT ("%s failed: %s\n"), arr[0], STR (strerror (errno)));
+ exit(1);
+}
+
+void
+Gprofng::start ()
+{
+ if (argc == 1)
+ {
+ usage ();
+ exit (0);
+ }
+ for (int i = 1; i < argc; i++)
+ {
+ char *s = argv[i];
+ if (*s != '-')
+ {
+ exec_cmd(s, argc - i, argv + i);
+ return;
+ }
+ else if (!strcmp (s, "--help"))
+ {
+ usage ();
+ exit (0);
+ }
+ else if (!strcmp (s, "--version") || !strcmp (s, "-v"))
+ {
+ Application::print_version_info ();
+ exit (0);
+ }
+ else if (!strcmp (s, "--verbose"))
+ verbose = 1;
+ else if (!strcmp (s, "--check"))
+ {
+ fprintf (stderr, GTXT ("%s: error: --check is not implemented yet\n"),
+ get_basename (get_name ()));
+ exit (1);
+ }
+ else
+ {
+ fprintf (stderr, GTXT ("%s: error: unknown option %s\n"),
+ get_basename (get_name ()), s);
+ exit(1);
+ }
+ }
+ fprintf (stderr, GTXT ("%s: error: expected argument after options\n"),
+ get_basename (get_name ()));
+}
diff --git a/gprofng/src/gprofng.h2m b/gprofng/src/gprofng.h2m
new file mode 100644
index 00000000000..8786768fb20
--- /dev/null
+++ b/gprofng/src/gprofng.h2m
@@ -0,0 +1,4 @@
+[SEE ALSO]
+
+.B
+\fBgprofng-archive\fR(1), \fBgprofng-collect\fR(1), \fBgprofng-display-text\fR(1), \fBgprofng-display-src\fR(1), \fBgprofng-display-html\fR(1), \fBgprofng-display-gui\fR(1)
diff --git a/gprofng/src/gprofng.rc b/gprofng/src/gprofng.rc
new file mode 100644
index 00000000000..387022017a5
--- /dev/null
+++ b/gprofng/src/gprofng.rc
@@ -0,0 +1,132 @@
+# Copyright (C) 2021 Free Software Foundation, Inc.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 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; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+#
+# Specify which classes of compiler commentary will be shown
+# with annotated source.
+scc all
+
+# Specify which classes of compiler commentary will be shown
+# with annotated disassembly
+dcc all:src
+
+# Set the default function-list metrics
+# for heap data, show inclusive leaks and bytes leaked; not allocations
+dmetrics i.heapleakbytes:e!heapleakbytes
+dmetrics i.heapleakcnt:e!heapleakcnt
+dmetrics i.heapallocbytes:e!heapallocbytes
+dmetrics i.heapalloccnt:e!heapalloccnt:
+
+# Clock profiling data
+# Note: use same display order of LMS_* in: er.rc, TimelineVariable.java,
+# Ovw_data.h, BaseMetricTreeNode.cc and Experiment.cc metric registration
+dmetrics i!total:e!.total
+# Show total cpu time
+dmetrics ei.totalcpu
+dmetrics i!.user:e!.user
+dmetrics i!system:e!.system
+dmetrics i!trap:e!.trap
+dmetrics i!lock:e!.lock
+dmetrics i!datapfault:e!.datapfault
+dmetrics i!textpfault:e!.textpfault
+dmetrics i!kernelpfault:e!.kernelpfault
+dmetrics i!stop:e!.stop
+dmetrics i!wait:e!.wait
+dmetrics i!sleep:e!.sleep
+
+# for kernel clock profiling data, show inclusive and exclusive KCPU
+dmetrics ei.kcpu
+###dmetrics ie.kcpu
+
+# for count data, show exclusive metrics only
+dmetrics i!bit:e.bit
+
+# for er_generic data, show exclusive metrics only
+dmetrics i!icount:e.icount
+
+# Hide implementation hack. Functionmark column only serves
+# to force zero-count functions to be displayed.
+dmetrics e!bit_FM
+
+# for kernel profiles, show inclusive and exclusive kucycles and kcycles
+# (kucycles and kcycles are for 12.3 and older experiments, Obsolete TBR)
+dmetrics ei.kucycles:ei.kcycles
+###dmetrics ie.kucycles:ie.kcycles
+
+# for derived HWC metrics, show exclusive only
+dmetrics i!IPC:e!.IPC
+dmetrics i!CPI:e!.CPI
+dmetrics i!K_IPC:e!.K_IPC
+dmetrics i!K_CPI:e!.K_CPI
+
+# for HWC, show exclusive only
+dmetrics i!hwc:e.hwc
+
+# for synctrace, show inclusive only
+dmetrics i.sync:e!sync
+dmetrics i.syncn:e!syncn
+
+# Set the default function-list metrics for OMP profiling
+dmetrics i.ompwork:e!ompwork
+dmetrics i.ompwait:e!ompwait
+dmetrics i!.masterthread:e!.masterthread
+
+#set the default function-list metrics for deadlock detection
+dmetrics i!deadlocks:e.deadlocks
+
+# io data
+dmetrics i.ioreadtime:e!ioreadtime
+dmetrics i.iowritetime:e!iowritetime
+dmetrics i.ioothertime:e!ioothertime
+dmetrics i.ioerrortime:e!ioerrortime
+dmetrics i!.ioreadcnt:e!ioreadcnt
+dmetrics i!.ioreadbytes:e!ioreadbytes
+dmetrics i!.iowritecnt:e!iowritecnt
+dmetrics i!.iowritebytes:e!iowritebytes
+dmetrics i!.ioothercnt:e!ioothercnt
+dmetrics i!.ioerrorcnt:e!ioerrorcnt
+
+# for any other unnamed metrics, don't show them
+dmetrics ie!.any
+
+# don't show size or address; show name
+dmetrics !size:!address:name
+
+# Select the default function-list sorting metric
+dsort ei.any:name
+###dsort ie.any:name
+
+# Set function name style
+name long
+
+# Set View mode to user
+viewmode user
+
+# Set compare mode
+compare off
+
+# Set enabling descendants to on
+en_desc on
+
+# Set path where the gprofng libraries are installed
+preload_libdirs ../lib:../lib32:../lib64
+
+# Add search path for annotated source and disasm
+addpath $expts:.
+
+# Add controls for specific load objects
+# object_hide <Unknown>
+
+# version "@(#)er.rc 1.62 11/10/31"
diff --git a/gprofng/src/i18n.cc b/gprofng/src/i18n.cc
new file mode 100644
index 00000000000..32c99608cdc
--- /dev/null
+++ b/gprofng/src/i18n.cc
@@ -0,0 +1,30 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include "i18n.h"
+
+extern "C"
+void
+init_locale (char *Path) //set up for internationalization
+{
+ bindtextdomain (PACKAGE_NAME, LOCALEDIR);
+ textdomain (PACKAGE_NAME);
+}
diff --git a/gprofng/src/i18n.h b/gprofng/src/i18n.h
new file mode 100644
index 00000000000..d02ec0e8f12
--- /dev/null
+++ b/gprofng/src/i18n.h
@@ -0,0 +1,40 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _I18N_H
+#define _I18N_H
+
+#include <libintl.h>
+
+#define GTXT(x) gettext(x) /* x - string literal to be i18n-ed */
+#define PTXT(x) gettext(x) /* x - expression to be i18n-ed */
+#define STXT(x) ((char *) (x)) /* x - static string literal to be i18n-ed */
+#define NTXT(x) ((char *) (x)) /* x - string literal not to be i18n-ed */
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+ void init_locale (char *Path);
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _I18N_H */
diff --git a/gprofng/src/info.h b/gprofng/src/info.h
new file mode 100644
index 00000000000..5b05833877c
--- /dev/null
+++ b/gprofng/src/info.h
@@ -0,0 +1,73 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _INFO_H
+#define _INFO_H
+
+/* Header file for .info section format */
+#include <inttypes.h>
+
+/* The format of the .info section from a single object file is:
+ * Fixed-length info_header
+ * Variable length string padded to a multiple of 4 bytes, giving
+ * the name of the source file from which this contribution comes.
+ * Zero or more entries.
+ *
+ * In an executable, there will be multiple occurrences of the above.
+ * The size of the info section will be a multiple of 4 bytes.
+ */
+
+struct info_header
+{
+ char endian; /* 0 for big, 1 for little */
+ char magic[3]; /* The string "SUN" */
+ uint32_t cnt; /* number of entries for this section */
+ uint16_t len; /* The length of the header, including the string */
+ uint16_t version; /* The version number of this block */
+ uint16_t phase; /* The compiler phase that produced this info */
+ uint16_t spare;
+};
+
+#define PHASE_UNKNOWN 0
+#define PHASE_F77 1
+#define PHASE_CC 2
+#define PHASE_CPLUS 3
+#define PHASE_F95 4
+#define PHASE_IROPT 5
+#define PHASE_MAX 255
+#define F95_COPYINOUT ((PHASE_F95 << 24) | 1)
+
+/* An entry consists of a fixed-size struct entry, possibly followed by
+ * a variable length data structure whose format is determined by the
+ * type of an entry. The size of an entry is a multiple of 4 bytes.
+ */
+
+struct entry_header
+{
+ uint32_t type; /* The type of this entry. High 8 bits is the phase.
+ * Low 24 bits is the type. */
+ uint16_t len; /* length of this entry */
+ uint16_t col; /* Column number in source line */
+ uint32_t msgnum; /* Message number. High 8 bits is the phase.
+ * Low 24 bits is the type. */
+ uint32_t line; /* Line number in source file */
+};
+
+#endif
diff --git a/gprofng/src/ipc.cc b/gprofng/src/ipc.cc
new file mode 100644
index 00000000000..932423cdf0d
--- /dev/null
+++ b/gprofng/src/ipc.cc
@@ -0,0 +1,2829 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <stdio.h>
+#include <signal.h>
+#include <stdarg.h>
+#include <fcntl.h> // creat
+#include <unistd.h> // sleep
+#include <pthread.h> // pthread_exit
+#include <sys/wait.h> // wait
+#include <locale.h>
+
+#include "DbeApplication.h"
+#include "Histable.h"
+#include "ipcio.h"
+#include "Dbe.h"
+#include "DbeSession.h"
+#include "DbeThread.h"
+#include "DbeView.h"
+
+int ipc_flags = 0;
+IPCTraceLevel ipc_trace_level = TRACE_LVL_0;
+int ipc_single_threaded_mode = 0;
+const char *IPC_PROTOCOL_UNKNOWN = "IPC_PROTOCOL_UNKNOWN";
+const char *IPC_PROTOCOL_CURR = IPC_PROTOCOL_STR;
+char const *ipc_protocol = NULL;
+
+DbeThreadPool *ipcThreadPool;
+
+extern int currentRequestID;
+extern int currentChannelID;
+extern BufferPool *responseBufferPool;
+extern bool cancelNeeded (int);
+extern void reexec ();
+
+/* Simple implementation of support for cancel of open experiment. Since we have only one cancellable
+ operation supported at this moment, we are using just a global variable.
+ As we support more and more cancellable ops we need a more sophisticated data struture such
+ as a mt-safe array to keep track of all cancellable requests/channels and update the supporting
+ routines - setCancellableChannel, cancelNeeded (in ipcio.cc) setCancelRequestedCh */
+int cancellableChannelID = 0xFFFFFFFF;
+int cancelRequestedChannelID;
+
+static const char *table_name (int);
+
+#define VSIZE(v) ((long long) ((v) ? (v)->size() : 0))
+
+inline const char*
+bool2str (bool v)
+{
+ return v ? "true" : "false";
+}
+
+inline char*
+str2str (String v)
+{
+ return (char*) (v ? v : "NULL");
+}
+
+inline char*
+str2s (String v)
+{
+ return (char*) (v ? v : "");
+}
+
+inline DbeView *
+getView (int index)
+{
+ return dbeSession->getView (index);
+}
+
+extern "C"
+{
+ typedef void (*SignalHandler)(int);
+}
+
+/*
+ * Fatal error handlers
+ */
+extern "C" void fatalErrorHadler (int sig, siginfo_t *info, void *context);
+extern "C" void sigSEGV_handler (int sig, siginfo_t *info, void *context);
+extern "C" void sigABRT_handler (int sig, siginfo_t *info, void *context);
+static char fatalErrorBuffer1[1024 * 8];
+static char fatalErrorBuffer2[1024 * 8];
+static int fatalErrorCode = 1;
+static int fatalErrorCounter = 0;
+static void *fatalErrorContext = 0;
+static siginfo_t *fatalErrorInfo = 0;
+static char *fatalErrorDynamicMemory = NULL;
+
+extern "C" void
+fatalErrorHadler (int sig, siginfo_t *info, void *context)
+{
+ if (fatalErrorCounter > 0)
+ { // Need synchronization here
+ //sleep(10); // Wait 10 seconds to make sure previous processing is done
+ return; // exit(fatalErrorCode); // Already in processing
+ }
+ fatalErrorCounter = 1;
+ fatalErrorCode = sig;
+ fatalErrorContext = context;
+ fatalErrorInfo = info;
+ // Free reserved memory
+ if (fatalErrorDynamicMemory != NULL)
+ {
+ free (fatalErrorDynamicMemory);
+ fatalErrorDynamicMemory = NULL;
+ }
+ // Get process ID
+ pid_t pid = getpid ();
+ // Create dump file
+ snprintf (fatalErrorBuffer1, sizeof (fatalErrorBuffer1), "/tmp/analyzer.%lld",
+ (long long) pid);
+ mkdir (fatalErrorBuffer1, 0700);
+ snprintf (fatalErrorBuffer1, sizeof (fatalErrorBuffer1),
+ "/tmp/analyzer.%lld/crash.sig%d.%lld", (long long) pid, sig,
+ (long long) pid);
+ // Dump stack trace in background using pstack
+ snprintf (fatalErrorBuffer2, sizeof (fatalErrorBuffer2),
+ "/usr/bin/pstack %lld > %s.pstack", (long long) pid, fatalErrorBuffer1);
+ system (fatalErrorBuffer2);
+ int fd = creat (fatalErrorBuffer1, 0600);
+ if (fd >= 0)
+ {
+ // Write error message
+ snprintf (fatalErrorBuffer2, sizeof (fatalErrorBuffer2),
+ "A fatal error has been detected by er_print: Signal %lld\n",
+ (long long) sig);
+ write (fd, fatalErrorBuffer2, strlen (fatalErrorBuffer2));
+// snprintf (fatalErrorBuffer2, sizeof (fatalErrorBuffer2),
+// "If you would like to submit a bug report, please use your support contract.\n"));
+// write(fd, fatalErrorBuffer2, strlen(fatalErrorBuffer2));
+ snprintf (fatalErrorBuffer2, sizeof (fatalErrorBuffer2),
+ "Protocol Version: %d\n", IPC_VERSION_NUMBER);
+ write (fd, fatalErrorBuffer2, strlen (fatalErrorBuffer2));
+ close (fd);
+ // Send postmortem error message to the GUI
+ // snprintf(fatalErrorBuffer1, sizeof (fatalErrorBuffer1),
+ // "%s: %s: /tmp/analyzer.%lld",
+ // "Unexpected signal in er_print",
+ // "Crash dump",
+ // (long long) pid);
+ // res = write(2, fatalErrorBuffer2, strlen(fatalErrorBuffer1));
+ }
+ wait (0); // wait for pstack
+ //sleep(10); // Wait 10 seconds to make sure processing of fatal error is done
+ // Exit with correct status
+ exit (fatalErrorCode);
+}
+
+// SIGABRT Handler
+extern "C" void
+sigABRT_handler (int sig, siginfo_t *info, void *context)
+{
+ fatalErrorHadler (sig, info, context);
+ pthread_exit (&fatalErrorCode);
+}
+
+// SIGSEGV Handler
+extern "C" void
+sigSEGV_handler (int sig, siginfo_t *info, void *context)
+{
+ //if (fatalErrorCounter > 0) sleep(1); // Wait 1 second
+ fatalErrorHadler (sig, info, context);
+ pthread_exit (&fatalErrorCode);
+}
+
+// SIGTERM Handler
+extern "C" void sigterm_handler (int sig, siginfo_t *info, void *context);
+struct sigaction old_sigterm_handler;
+
+volatile int term_flag;
+int error_flag;
+
+extern "C" void
+sigterm_handler (int, siginfo_t *, void *)
+{
+ if (fatalErrorCounter > 0)
+ {
+ //sleep(10); // Wait 10 seconds to make sure processing of fatal error is done
+ //return; // Fatal error processing will exit it
+ pthread_exit (&fatalErrorCode);
+ }
+ term_flag = 1;
+}
+
+#define ipc_log ipc_default_log
+#define ipc_request_trace ipc_request_log
+#define ipc_response_trace ipc_response_log
+static const char *ipc_log_name = NULL;
+static const char *ipc_request_log_name = NULL;
+static const char *ipc_response_log_name = NULL;
+FILE *requestLogFileP = stderr;
+FILE *responseLogFileP = stderr;
+hrtime_t begin_time;
+long long delta_time = 0;
+int ipc_delay_microsec = 0;
+
+void
+ipc_default_log (const char *fmt, ...)
+{
+ if (!ipc_log_name || !ipc_flags)
+ return;
+ if (ipc_trace_level >= TRACE_LVL_3)
+ {
+ hrtime_t cur_time = gethrtime ();
+ unsigned long long time_stamp = (cur_time - begin_time) / 1000000 + delta_time;
+ fprintf (stderr, "%7llu: ", time_stamp);
+ }
+ va_list vp;
+ va_start (vp, fmt);
+ vfprintf (stderr, fmt, vp);
+ va_end (vp);
+ fflush (stderr);
+}
+
+extern "C" void sigint_handler (int sig, siginfo_t *info, void *context);
+struct sigaction old_sigint_handler;
+
+extern "C" void
+sigint_handler (int, siginfo_t *, void *)
+{
+ ipc_log ("SIGINT signal happens\n");
+}
+
+void
+ipc_request_log (IPCTraceLevel trace_level, const char *fmt, ...)
+{
+ if (!ipc_request_log_name || !ipc_flags || trace_level > ipc_trace_level)
+ return;
+ fprintf (responseLogFileP, "thr: %llu ", (unsigned long long) pthread_self ());
+ if (ipc_trace_level >= TRACE_LVL_3)
+ {
+ hrtime_t cur_time = gethrtime ();
+ unsigned long long time_stamp = (cur_time - begin_time) / 1000000 + delta_time;
+ fprintf (requestLogFileP, "%7llu: ", time_stamp);
+ }
+ va_list vp;
+ va_start (vp, fmt);
+ vfprintf (requestLogFileP, fmt, vp);
+ va_end (vp);
+ fflush (requestLogFileP);
+}
+
+void
+ipc_response_log (IPCTraceLevel trace_level, const char *fmt, ...)
+{
+ if (!ipc_response_log_name || !ipc_flags || trace_level > ipc_trace_level)
+ return;
+ fprintf (responseLogFileP, "thr: %llu ", (unsigned long long) pthread_self ());
+ if (ipc_trace_level >= TRACE_LVL_3)
+ {
+ hrtime_t cur_time = gethrtime ();
+ unsigned long long time_stamp = (cur_time - begin_time) / 1000000 + delta_time;
+ fprintf (responseLogFileP, "%7llu: ", time_stamp);
+ }
+ va_list vp;
+ va_start (vp, fmt);
+ vfprintf (responseLogFileP, fmt, vp);
+ va_end (vp);
+ fflush (responseLogFileP);
+}
+
+#ifdef IPC_LOG
+void
+ipc_dump (char *s, Vector<bool> *v)
+{
+ if (v == NULL)
+ {
+ ipc_log (" Vector<bool> %s is NULL\n", str2s (s));
+ return;
+ }
+ ipc_log (" Vector<bool> %s size=%lld\n", str2s (s), VSIZE (v));
+ for (int i = 0; i < v->size (); i++)
+ ipc_log (" [%d]: %s\n", i, bool2str (v->fetch (i)));
+}
+
+void
+ipc_dump (char *s, Vector<String> *v)
+{
+ if (v == NULL)
+ {
+ ipc_log (" Vector<bool> %s is NULL\n", str2s (s));
+ return;
+ }
+ ipc_log (" Vector<String> %s size=%lld\n", str2s (s), VSIZE (v));
+ for (int i = 0; i < v->size (); i++)
+ {
+ String str = v->fetch (i);
+ ipc_log (" [%d]: '%s'\n", i, str2str (str));
+ }
+}
+
+void
+ipc_dump (char *s, Vector<Obj> *v)
+{
+ if (v == NULL)
+ {
+ ipc_log (" Vector<Obj> %s is NULL\n", str2s (s));
+ return;
+ }
+ ipc_log (" Vector<void *> %s size=%lld\n", str2s (s), VSIZE (v));
+ for (int i = 0; i < v->size (); i++)
+ ipc_log (" [%d]: 0x%08llx\n", i, (long long) (v->fetch (i)));
+}
+
+#else
+#define ipc_dump(s, v)
+#endif
+
+static MetricList *
+readMetricListV2 (int dbevindex, IPCrequest* req)
+{
+ MetricType mtype = (MetricType) readInt (req);
+ Vector<int> *type = (Vector<int>*)readArray (req);
+ Vector<int> *subtype = (Vector<int>*)readArray (req);
+ Vector<bool> *sort = (Vector<bool>*)readArray (req);
+ Vector<int> *vis = (Vector<int>*)readArray (req);
+ Vector<char*> *cmd = (Vector<char*>*)readArray (req);
+ Vector<char*> *expr_spec = (Vector<char*>*)readArray (req);
+ Vector<char*> *legends = (Vector<char*>*)readArray (req);
+ MetricList *mlist = dbeGetMetricListV2 (dbevindex, mtype, type, subtype, sort,
+ vis, cmd, expr_spec, legends);
+ return mlist;
+}
+
+static void
+setCancellableChannel (int chID)
+{
+ cancellableChannelID = chID;
+}
+
+/* Add more entries here for other cancellable operations */
+static void
+checkCancellableOp (char *inp, IPCrequest* req)
+{
+ if (!strcmp (inp, "setFilterStr"))
+ setCancellableChannel (currentChannelID);
+ else if (!strcmp (inp, "openExperimentList"))
+ setCancellableChannel (currentChannelID);
+ else if (!strcmp (inp, "getFiles") || !strcmp (inp, "getFileAttributes"))
+ {
+ setCancellableChannel (currentChannelID);
+ req->setCancelImmediate ();
+ }
+}
+
+/* This is what used to be the core of ipc_mainLoop before asynch ipc.
+ Read the details of the request from the request buffer: name, args etc
+ do the work by calling the appropriate dbe routine(s) and write the
+ response to a response buffer and queue it up in the response queue */
+
+int
+ipc_doWork (void *arg)
+{
+ IPCrequest *req = (IPCrequest *) arg;
+ currentRequestID = req->getRequestID ();
+ currentChannelID = req->getChannelID ();
+ req->setStatus (IN_PROGRESS);
+ String inp = readString (req);
+ if (inp == NULL)
+ {
+ ipc_log ("NULL ipc command received, exiting\n");
+ return 0;
+ }
+ ipc_log ("ipc: %s Req %x Ch %x\n", inp, currentRequestID, currentChannelID);
+ checkCancellableOp (inp, req);
+ if (!strcmp (inp, "initApplication"))
+ {
+ bool nbm = readBoolean (req);
+ String arg1 = readString (req);
+ String arg2 = readString (req);
+ Vector<String> *arg3 = (Vector<String>*)readArray (req);
+ ipc_log (" nbm: %s, arg1: '%s', arg2: '%s'\n", bool2str (nbm), str2str (arg1), str2str (arg2));
+ ipc_dump ("arg3", arg3);
+ // set the session to be interactive
+ dbeSession->set_interactive (true);
+ if (nbm)
+ theApplication->set_name ("analyzer-NBM");
+ else
+ theApplication->set_name ("analyzer");
+
+ // XXX Why does it reset the install directory???? Or a licensing directory???
+ // Vector<String> *res = theDbeApplication->initApplication (arg1, arg2, &setProgress);
+ Vector<String> *res = theDbeApplication->initApplication (NULL, NULL, &setProgress);
+ writeArray (res, req);
+ free (arg1);
+ free (arg2);
+ destroy (arg3);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "syncTime"))
+ {
+ long long anl_time = readLong (req);
+ hrtime_t cur_time = gethrtime ();
+ long long time_stamp = (cur_time - begin_time) / 1000000;
+ delta_time = anl_time - time_stamp;
+ ipc_log (" syncTime %llu %llu \n", anl_time, delta_time);
+ writeString (NULL, req);
+ }
+ else if (!strcmp (inp, "getInitMessages"))
+ {
+ Vector<String> *res = dbeGetInitMessages ();
+ ipc_log (" returned = %lld msgs\n", VSIZE (res));
+ writeArray (res, req);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "reExec"))
+ {
+ ipc_log (" started reexec()\n");
+ reexec ();
+ }
+ else if (!strcmp (inp, "dbeCreateDirectories"))
+ {
+ String arg1 = readString (req); // path
+ ipc_log (" arg = %s\n", arg1);
+ String res = dbeCreateDirectories (arg1);
+ writeString (res, req);
+ free (arg1);
+ free (res);
+ }
+ else if (!strcmp (inp, "dbeDeleteFile"))
+ {
+ String arg1 = readString (req); // path
+ ipc_log (" arg = %s\n", arg1);
+ String res = dbeDeleteFile (arg1);
+ writeString (res, req);
+ free (arg1);
+ free (res);
+ }
+ else if (!strcmp (inp, "dbeReadFile"))
+ {
+ String arg1 = readString (req);
+ ipc_log (" arg = %s\n", arg1); // path
+ Vector<String> *res = dbeReadFile (arg1);
+ writeArray (res, req);
+ free (arg1);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "dbeWriteFile"))
+ {
+ String arg1 = readString (req); // path
+ String arg2 = readString (req); // contents
+ ipc_log (" arg1 = %s arg2 = %s\n", arg1, arg2);
+ int res = dbeWriteFile (arg1, arg2);
+ writeInt (res, req);
+ free (arg1);
+ }
+ else if (!strcmp (inp, "getExpPreview"))
+ {
+ // XXX add another argument == DbeView index
+ String arg1 = readString (req);
+ ipc_log (" arg = %s\n", arg1);
+ Vector<String> *res = dbeGetExpPreview (0, arg1);
+ writeArray (res, req);
+ free (arg1);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "getFileAttributes"))
+ {
+ String arg1 = readString (req); // filename
+ String arg2 = readString (req); // format
+ ipc_log (" arg1 = %s arg2 = %s\n", arg1, arg2);
+ String res = dbeGetFileAttributes (arg1, arg2);
+ writeString (res, req);
+ free (arg1);
+ free (arg2);
+ free (res);
+ }
+ else if (!strcmp (inp, "getFiles"))
+ {
+ String arg1 = readString (req); // dirname
+ String arg2 = readString (req); // format
+ ipc_log (" arg1 = %s arg2 = %s\n", arg1, arg2);
+ String res = dbeGetFiles (arg1, arg2);
+ writeString (res, req);
+ free (arg1);
+ free (arg2);
+ free (res);
+ }
+ else if (!strcmp (inp, "getOSFamily"))
+ writeString ("Linux", req);
+ else if (!strcmp (inp, "getRunningProcesses"))
+ {
+ String arg1 = readString (req); // format
+ ipc_log (" arg = %s\n", arg1);
+ String res = dbeGetRunningProcesses (arg1);
+ writeString (res, req);
+ free (arg1);
+ free (res);
+ }
+ else if (!strcmp (inp, "getCurrentDirectory"))
+ {
+ char buf [2048];
+ String res = getcwd (buf, (size_t) sizeof (buf)); // Get current directory
+ writeString (res, req);
+ }
+ else if (!strcmp (inp, "getHomeDirectory"))
+ {
+ String res = getenv ("HOME"); // Get HOME directory
+ writeString (res, req);
+ }
+ else if (!strcmp (inp, "setCurrentDirectory"))
+ {
+ String arg1 = readString (req); // dirname
+ ipc_log (" arg = %s\n", arg1);
+ int res = chdir (arg1); // Change directory
+ writeInt (res, req);
+ free (arg1);
+ }
+ else if (!strcmp (inp, "getLocale"))
+ {
+ String res = setlocale (LC_ALL, ""); // Get locale
+ writeString (res, req);
+ }
+ else if (!strcmp (inp, "setLocale"))
+ {
+ String arg1 = readString (req); // locale
+ ipc_log (" arg = %s\n", arg1);
+ String res = setlocale (LC_ALL, arg1); // Set locale
+ writeString (res, req);
+ free (arg1);
+ }
+ else if (!strcmp (inp, "readRCFile"))
+ {
+ int arg1 = readInt (req);
+ String arg2 = readString (req); // file name
+ ipc_log (" arg1=%d, arg2=%s\n", arg1, arg2);
+ String res = dbeReadRCFile (arg1, arg2); // Read RC File
+ writeString (res, req);
+ free (res);
+ }
+ else if (!strcmp (inp, "dbeGetExpParams"))
+ {
+ // XXX add another argument == DbeView index
+ String arg1 = readString (req);
+ ipc_log (" arg = %s\n", arg1);
+ String res = dbeGetExpParams (0, arg1);
+ writeString (res, req);
+ free (arg1);
+ free (res);
+ }
+ else if (!strcmp (inp, "getExperimentsGroups"))
+ {
+ Vector<Vector<char*>*> *groups = dbeGetExperimensGroups ();
+ writeArray (groups, req);
+ destroy (groups);
+ }
+ else if (!strcmp (inp, "setExperimentsGroups"))
+ {
+ Vector<Vector<char*>*> *groups = (Vector<Vector<char*>*> *)readArray (req);
+ ipc_log (" groups.size = %lld\n", VSIZE (groups));
+ char *msg_str = dbeSetExperimentsGroups (groups);
+ writeString (msg_str, req);
+ free (msg_str);
+ destroy (groups);
+ }
+ else if (!strcmp (inp, "dropExperiment"))
+ {
+ int arg1 = readInt (req);
+ Vector<int> *arg2 = (Vector<int>*)readArray (req);
+ ipc_log (" arg = %d, exps = %lld\n", arg1, VSIZE (arg2));
+ char *res = dbeDropExperiment (arg1, arg2);
+ writeString (res, req);
+ free (res);
+ delete arg2;
+ }
+ else if (!strcmp (inp, "getUserExpId"))
+ {
+ Vector<int> *arg = (Vector<int>*)readArray (req);
+ ipc_log (" expIds = %lld\n", VSIZE (arg));
+ Vector<int> *res = dbeGetUserExpId (arg);
+ writeArray (res, req);
+ delete res;
+ }
+ else if (!strcmp (inp, "getFounderExpId"))
+ {
+ Vector<int> *arg = (Vector<int>*)readArray (req);
+ ipc_log (" expIds = %lld\n", VSIZE (arg));
+ Vector<int> *res = dbeGetFounderExpId (arg);
+ writeArray (res, req);
+ delete res;
+ }
+ else if (!strcmp (inp, "getExpGroupId"))
+ {
+ Vector<int> *arg = (Vector<int>*)readArray (req);
+ ipc_log (" expIds = %lld\n", VSIZE (arg));
+ Vector<int> *res = dbeGetExpGroupId (arg);
+ writeArray (res, req);
+ delete res;
+ }
+ else if (!strcmp (inp, "getExpsProperty"))
+ {
+ String arg = readString (req);
+ Vector<String> *res = dbeGetExpsProperty (arg);
+ writeArray (res, req);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "getExpName"))
+ {
+ // XXX add argument == DbeView index
+ Vector<String> *res = dbeGetExpName (0);
+ writeArray (res, req);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "getExpState"))
+ {
+ // XXX add argument == DbeView index
+ Vector<int> *res = dbeGetExpState (0);
+ writeArray (res, req);
+ delete res;
+ }
+ else if (!strcmp (inp, "getExpEnable"))
+ {
+ int arg1 = readInt (req);
+ ipc_log (" arg1 = %d\n", arg1);
+ Vector<bool> *res = dbeGetExpEnable (arg1);
+ writeArray (res, req);
+ delete res;
+ }
+ else if (!strcmp (inp, "setExpEnable"))
+ {
+ int arg1 = readInt (req);
+ Vector<bool> *arg2 = (Vector<bool>*)readArray (req);
+ ipc_log (" arg1=%d\n", arg1);
+ ipc_dump ("arg2", arg2);
+ bool b = dbeSetExpEnable (arg1, arg2);
+ writeBoolean (b, req);
+ ipc_log (" dbeSetExpEnable returns %s\n", bool2str (b));
+ delete arg2;
+ }
+ else if (!strcmp (inp, "getExpInfo"))
+ {
+ int arg1 = readInt (req);
+ ipc_log (" args = %d\n", arg1);
+ Vector<String> *res = dbeGetExpInfo (arg1);
+ writeArray (res, req);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "getViewModeEnable"))
+ {
+ bool res = dbeGetViewModeEnable ();
+ writeBoolean (res, req);
+ }
+ else if (!strcmp (inp, "getJavaEnable"))
+ {
+ bool res = dbeGetJavaEnable ();
+ writeBoolean (res, req);
+ }
+ else if (!strcmp (inp, "updateNotes"))
+ {
+ int arg1 = readInt (req);
+ int arg2 = readInt (req);
+ int arg3 = readInt (req);
+ String arg4 = readString (req);
+ bool arg5 = readBoolean (req);
+ ipc_log (" args = %d, %d\n", arg1, arg2);
+ int i = dbeUpdateNotes (arg1, arg2, arg3, arg4, arg5);
+ writeInt (i, req);
+ }
+ else if (!strcmp (inp, "getLoadObjectList"))
+ {
+ int arg1 = readInt (req);
+ ipc_log (" arg = %d\n", arg1);
+ Vector<void *> *res = dbeGetLoadObjectList (arg1);
+ if (res == NULL)
+ ipc_log (" returning = NULL for LoadObjectList\n");
+ else
+ {
+ Vector<char*> *s = (Vector<char*> *) res->fetch (0);
+ ipc_log (" returning = %lld vectors for %lld LoadObjects\n",
+ VSIZE (res), VSIZE (s));
+ }
+ writeArray (res, req);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "getLoadObjectName"))
+ {
+ int arg1 = readInt (req);
+ ipc_log (" arg = %d\n", arg1);
+ Vector<String> *res = dbeGetLoadObjectName (arg1);
+ ipc_log (" returning = %lld strings\n", VSIZE (res));
+ writeArray (res, req);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "getTabListInfo"))
+ {
+ int arg1 = readInt (req);
+ ipc_log (" arg = %d\n", arg1);
+ Vector<void*> *res = dbeGetTabListInfo (arg1);
+ writeArray (res, req);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "getSearchPath"))
+ {
+ // XXX add argument == DbeView index
+ ipc_log (" no args\n");
+ Vector<String> *res = dbeGetSearchPath (0);
+ writeArray (res, req);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "setSearchPath"))
+ {
+ // XXX add another argument == DbeView index
+ Vector<String> *res = (Vector<String>*)readArray (req);
+ ipc_log (" %lld strings\n", VSIZE (res));
+ dbeSetSearchPath (0, res);
+ writeString (NULL, req);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "getPathmaps"))
+ {
+ Vector<void*> *res = dbeGetPathmaps (0);
+ ipc_log (" returns = %lld objects, number of pathmaps = %lld\n",
+ VSIZE (res), VSIZE ((Vector<int>*)res->fetch (0)));
+ writeArray (res, req);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "setPathmaps"))
+ {
+ Vector<String> *from = (Vector<String>*)readArray (req);
+ Vector<String> *to = (Vector<String>*)readArray (req);
+ char *res = dbeSetPathmaps (from, to);
+ writeString (res, req);
+ free (res);
+ if (from)
+ {
+ from->destroy ();
+ delete from;
+ }
+ if (to)
+ {
+ to->destroy ();
+ delete to;
+ }
+ }
+ else if (!strcmp (inp, "addPathmap"))
+ {
+ // XXX add another argument == DbeView index
+ String arg1 = readString (req);
+ String arg2 = readString (req);
+ ipc_log (" args = '%s', '%s'\n", arg1 ? arg1 : "NULL", arg2 ? arg2 : "NULL");
+ char *res = dbeAddPathmap (0, arg1, arg2);
+ ipc_log (" returns = '%s'\n", (res != NULL ? res : "NULL"));
+ writeString (res, req);
+ free (arg1);
+ free (arg2);
+ }
+ else if (!strcmp (inp, "getMsg"))
+ {
+ int arg1 = readInt (req);
+ int arg2 = readInt (req);
+ ipc_log (" args = %d, %d\n", arg1, arg2);
+ String res = dbeGetMsg (arg1, arg2);
+ ipc_log (" returns = '%s'\n", (res != NULL ? res : "<NULL>"));
+ writeString (res, req);
+ free (res);
+ }
+ else if (!strcmp (inp, "initView"))
+ {
+ int arg1 = readInt (req);
+ int arg2 = readInt (req);
+ ipc_log (" new view = %d; clone of view %d\n", arg1, arg2);
+ dbeInitView (arg1, arg2);
+ writeString (NULL, req);
+ }
+ else if (!strcmp (inp, "disposeWindow"))
+ {
+ int arg1 = readInt (req);
+ ipc_log (" args = %d\n", arg1);
+ dbeDeleteView (arg1);
+ writeString (NULL, req);
+ }
+#if 0
+ else if (!strcmp (inp, "createMapfile"))
+ {
+ int arg1 = readInt ();
+ String arg2 = readString ();
+ int arg3 = readInt ();
+ ipc_log (" args = %d, %s, %d\n", arg1, arg2, arg3);
+ String res = dbeCreateMapfile (arg1, arg2, arg3);
+ writeString (res);
+ free (arg2);
+ free (res);
+ }
+#endif
+ else if (!strcmp (inp, "setCompareModeV2"))
+ {
+ int dbevindex = readInt (req);
+ int cmp_mode = readInt (req);
+ getView (dbevindex)->set_compare_mode (cmp_mode);
+ writeResponseGeneric (RESPONSE_STATUS_SUCCESS, currentRequestID, currentChannelID);
+ }
+ else if (!strcmp (inp, "getCompareModeV2"))
+ {
+ int dbevindex = readInt (req);
+ int res = CMP_DISABLE;
+ if (dbeSession->expGroups && dbeSession->expGroups->size () > 1)
+ res = getView (dbevindex)->get_compare_mode ();
+ ipc_log (" %s: %d returns %d\n", inp, dbevindex, res);
+ writeInt (res, req);
+ }
+ else if (!strcmp (inp, "getRefMetricsV2"))
+ {
+ Vector<void*> *res = dbeGetRefMetricsV2 ();
+ writeArray (res, req);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "setCurMetricsV2"))
+ {
+ int dbevindex = readInt (req);
+ int cmp_mode = readInt (req);
+ MetricList *mlist = readMetricListV2 (dbevindex, req);
+ getView (dbevindex)->reset_metric_list (mlist, cmp_mode);
+ writeResponseGeneric (RESPONSE_STATUS_SUCCESS, currentRequestID, currentChannelID);
+ }
+ else if (!strcmp (inp, "getCurMetricsV2"))
+ {
+ int arg1 = readInt (req);
+ MetricType arg2 = (MetricType) readInt (req);
+ ipc_log (" args = %d, %d\n", arg1, arg2);
+ Vector<void*> *res = dbeGetCurMetricsV2 (arg1, arg2);
+ writeArray (res, req);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "getRefMetricTree"))
+ {
+ int dbevindex = readInt (req);
+ bool include_unregistered = readBoolean (req);
+ ipc_log (" args = %d, %d\n", dbevindex, include_unregistered);
+ Vector<void*> *res = dbeGetRefMetricTree (dbevindex, include_unregistered);
+ writeArray (res, req);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "getRefMetricTreeValues"))
+ {
+ int dbevindex = readInt (req);
+ Vector<String> *metcmds = (Vector<String>*)readArray (req);
+ Vector<String> *nonmetcmds = (Vector<String>*)readArray (req);
+ ipc_log (" args = %d, metcmds->size()=%lld, nonmetcmds->size()=%lld\n",
+ dbevindex, VSIZE (metcmds), VSIZE (nonmetcmds));
+ ipc_dump ("metcmds", metcmds);
+ ipc_dump ("nonmetcmds", nonmetcmds);
+ Vector<void*> *res = dbeGetRefMetricTreeValues (dbevindex, metcmds, nonmetcmds);
+#ifdef IPC_LOG
+ if (res != NULL)
+ ipc_log (" returns = %lld objects, length = %lld\n",
+ VSIZE (res), VSIZE (((Vector<int>*)res->fetch (0))));
+ else
+ ipc_log (" returns NULL\n");
+#endif
+ writeArray (res, req);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "getOverviewText"))
+ {
+ int arg1 = readInt (req);
+ ipc_log (" args = %d\n", arg1);
+ Vector<char*> *res = dbeGetOverviewText (arg1);
+ writeArray (res, req);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "setSort"))
+ {
+ int arg1 = readInt (req);
+ int arg2 = readInt (req);
+ MetricType arg3 = (MetricType) readInt (req);
+ bool arg4 = readBoolean (req);
+ ipc_log (" args = %d, %d, %d, %c\n", arg1, arg2, arg3, (arg4 ? 'T' : 'F'));
+ dbeSetSort (arg1, arg2, arg3, arg4);
+ writeString (NULL, req);
+ }
+
+ else if (!strcmp (inp, "getAnoValue"))
+ {
+ int arg1 = readInt (req);
+ ipc_log (" args = %d\n", arg1);
+ Vector<int> *res = dbeGetAnoValue (arg1);
+ writeArray (res, req);
+ delete res;
+ }
+ else if (!strcmp (inp, "setAnoValue"))
+ {
+ int arg1 = readInt (req);
+ ipc_log (" args = %d, array\n", arg1);
+ Vector<int> *arg2 = (Vector<int>*)readArray (req);
+ dbeSetAnoValue (arg1, arg2);
+ writeString (NULL, req);
+ delete arg2;
+ }
+ else if (!strcmp (inp, "getNameFormat"))
+ {
+ int arg1 = readInt (req);
+ ipc_log (" args = %d\n", arg1);
+ int b = dbeGetNameFormat (arg1);
+ writeInt (b, req);
+ }
+ else if (!strcmp (inp, "getSoName"))
+ {
+ int arg1 = readInt (req);
+ ipc_log (" args = %d\n", arg1);
+ bool b = dbeGetSoName (arg1);
+ writeBoolean (b, req);
+ }
+ else if (!strcmp (inp, "setNameFormat"))
+ {
+ int arg1 = readInt (req);
+ int arg2 = readInt (req);
+ bool arg3 = readBoolean (req);
+ ipc_log (" args = %d, %d, %d\n", arg1, arg2, arg3);
+ dbeSetNameFormat (arg1, arg2, arg3);
+ writeString (NULL, req);
+ }
+ else if (!strcmp (inp, "getViewMode"))
+ {
+ int arg1 = readInt (req);
+ ipc_log (" args = %d\n", arg1);
+ int i = dbeGetViewMode (arg1);
+ ipc_log (" returns = %d\n", i);
+ writeInt (i, req);
+ }
+ else if (!strcmp (inp, "setViewMode"))
+ {
+ int arg1 = readInt (req);
+ int arg2 = readInt (req);
+ ipc_log (" args = %d, %d\n", arg1, arg2);
+ dbeSetViewMode (arg1, arg2);
+ writeString (NULL, req);
+ }
+ else if (!strcmp (inp, "getTLValue"))
+ {
+ int arg1 = readInt (req);
+ ipc_log (" args = %d\n", arg1);
+ Vector<void*> *res = dbeGetTLValue (arg1);
+ ipc_log (" returns = %lld void*'s\n", VSIZE (res));
+ writeArray (res, req);
+ delete res;
+ }
+ else if (!strcmp (inp, "setTLValue"))
+ {
+ int arg1 = readInt (req);
+ ipc_log (" args = %d\n", arg1);
+ String tldata_cmd = readString (req);
+ int entity_prop_id = readInt (req);
+ int align = readInt (req);
+ int depth = readInt (req);
+ dbeSetTLValue (arg1, tldata_cmd, entity_prop_id, align, depth);
+ writeString (NULL, req);
+ free (tldata_cmd);
+ }
+ else if (!strcmp (inp, "getExpFounderDescendants"))
+ {
+ Vector<void*> *res = dbeGetExpFounderDescendants ();
+ writeArray (res, req);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "getExpSelection"))
+ {
+ int arg1 = readInt (req);
+ ipc_log (" args = %d\n", arg1);
+ Vector<void*> *res = dbeGetExpSelection (arg1);
+ writeArray (res, req);
+ destroy (res);
+ }
+
+ else if (!strcmp (inp, "setFilterStr"))
+ {
+ int arg1 = readInt (req);
+ String arg2 = readString (req);
+ ipc_log (" args = %d, %s\n", arg1, arg2);
+ String res = dbeSetFilterStr (arg1, arg2);
+ ipc_log (" returns = '%s'\n", res ? res : "NULL");
+ writeString (res, req);
+ free (arg2);
+ free (res);
+ }
+
+ else if (!strcmp (inp, "getFilterStr"))
+ {
+ int arg1 = readInt (req);
+ ipc_log (" args = %d\n", arg1);
+ String res = dbeGetFilterStr (arg1);
+ ipc_log (" returns = '%s'\n", res ? res : "NULL");
+ writeString (res, req);
+ free (res);
+ }
+
+ else if (!strcmp (inp, "validateFilterExpression"))
+ {
+ String arg1 = readString (req);
+ int res = dbeValidateFilterExpression (arg1);
+ ipc_log (" validateFilterExpression('%s') returned %d\n", str2str (arg1), res);
+ free (arg1);
+ writeInt (res, req);
+ }
+
+ else if (!strcmp (inp, "getFilterKeywords"))
+ {
+ int dbevindex = readInt (req);
+ Vector<void*>*res = dbeGetFilterKeywords (dbevindex);
+ writeArray (res, req);
+ destroy (res);
+ }
+
+ else if (!strcmp (inp, "getFilters"))
+ {
+ int arg1 = readInt (req);
+ int arg2 = readInt (req);
+ ipc_log (" args: view = %d, experiment = %d\n", arg1, arg2);
+ Vector<void*>*res = dbeGetFilters (arg1, arg2);
+ ipc_log (" -- returned %lld Filters\n", VSIZE (res));
+ writeArray (res, req);
+ delete res;
+ }
+
+ else if (!strcmp (inp, "updateFilters"))
+ {
+ int arg1 = readInt (req);
+ Vector<bool> *arg2 = (Vector<bool>*)readArray (req);
+ Vector<String> *arg3 = (Vector<String>*)readArray (req);
+ ipc_log ("arg1=%d arg2->size()=%lld arg3->size()=%lld\n",
+ arg1, VSIZE (arg2), VSIZE (arg3));
+ ipc_dump ("arg2", arg2);
+ ipc_dump ("arg3", arg3);
+ bool b = dbeUpdateFilters (arg1, arg2, arg3);
+ writeBoolean (b, req);
+ ipc_log (" returns %s\n", (b == true ? "true" : "false"));
+ delete arg2;
+ delete arg3;
+ }
+ else if (!strcmp (inp, "getLoadObjectState"))
+ {
+ int arg1 = readInt (req);
+ ipc_log (" args = %d \n", arg1);
+ Vector<int> *res = dbeGetLoadObjectState (arg1);
+ ipc_log (" returning = %lld int's\n", VSIZE (res));
+ writeArray (res, req);
+ delete res;
+ }
+ else if (!strcmp (inp, "setLoadObjectState"))
+ {
+ int arg1 = readInt (req);
+ Vector<int> *arg2 = (Vector<int>*)readArray (req);
+ ipc_log (" args = %d, %lld objects\n", arg1, VSIZE (arg2));
+ dbeSetLoadObjectState (arg1, arg2);
+ writeString (NULL, req);
+ delete arg2;
+ }
+ else if (!strcmp (inp, "setLoadObjectDefaults"))
+ {
+ int arg1 = readInt (req);
+ ipc_log (" args = %d\n", arg1);
+ dbeSetLoadObjectDefaults (arg1);
+ writeString (NULL, req);
+ }
+ else if (!strcmp (inp, "getMemTabSelectionState"))
+ {
+ int arg1 = readInt (req);
+ ipc_log (" arg = %d\n", arg1);
+ Vector<bool> *res = dbeGetMemTabSelectionState (arg1);
+ writeArray (res, req);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "setMemTabSelectionState"))
+ {
+ int arg1 = readInt (req);
+ Vector<bool> *arg2 = (Vector<bool> *)readArray (req);
+ ipc_log (" args = %d\n arg2 = %lld objects\n", arg1, VSIZE (arg2));
+ dbeSetMemTabSelectionState (arg1, arg2);
+ writeString (NULL, req);
+ destroy (arg2);
+ }
+ else if (!strcmp (inp, "getIndxTabSelectionState"))
+ {
+ int arg1 = readInt (req);
+ ipc_log (" arg = %d\n", arg1);
+ Vector<bool> *res = dbeGetIndxTabSelectionState (arg1);
+ ipc_log (" -- returned %lld-vector [bool]\n", VSIZE (res));
+ writeArray (res, req);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "setIndxTabSelectionState"))
+ {
+ int arg1 = readInt (req);
+ Vector<bool> *arg2 = (Vector<bool> *)readArray (req);
+ ipc_log (" args = %d\n arg2 = %lld objects\n", arg1, VSIZE (arg2));
+ dbeSetIndxTabSelectionState (arg1, arg2);
+ writeString (NULL, req);
+ destroy (arg2);
+ }
+ else if (!strcmp (inp, "getTabSelectionState"))
+ {
+ int arg1 = readInt (req);
+ ipc_log (" args = %d\n", arg1);
+ Vector<bool> *res = dbeGetTabSelectionState (arg1);
+ writeArray (res, req);
+ delete res;
+ }
+ else if (!strcmp (inp, "setTabSelectionState"))
+ {
+ int arg1 = readInt (req);
+ Vector<bool> *arg2 = (Vector<bool>*)readArray (req);
+ ipc_log (" args = %d\n arg2 = %lld objects\n", arg1, VSIZE (arg2));
+ dbeSetTabSelectionState (arg1, arg2);
+ writeString (NULL, req);
+ delete arg2;
+ }
+ else if (!strcmp (inp, "getMemObjects"))
+ {
+ int arg1 = readInt (req);
+ ipc_log (" args = %d\n", arg1);
+ Vector<void*> *res = dbeGetMemObjects (arg1);
+
+#ifdef IPC_LOG
+ if (res == NULL)
+ ipc_log (" -- returned NULL\n");
+ else
+ {
+ Vector<int> *mo_types = (Vector<int> *)res->fetch (0);
+ ipc_log (" -- returned %lld-vector [ %lld-vectors]\n",
+ VSIZE (res), VSIZE (mo_types));
+ }
+#endif
+ writeArray (res, req);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "loadMachineModel"))
+ {
+ String arg1 = readString (req);
+#ifdef IPC_LOG
+ ipc_log (" arg = `%s'\n", arg1);
+#endif
+ String sts = dbeLoadMachineModel (arg1);
+#ifdef IPC_LOG
+ ipc_log (" returns '%s'\n", sts ? sts : "NULL");
+#endif
+ writeString (sts, req);
+ free (arg1);
+ }
+ else if (!strcmp (inp, "getMachineModel"))
+ {
+ String sts = dbeGetMachineModel ();
+#ifdef IPC_LOG
+ ipc_log (" returns '%s'\n", sts ? sts : "NULL");
+#endif
+ writeString (sts, req);
+ }
+ else if (!strcmp (inp, "getCPUVerMachineModel"))
+ {
+ int arg1 = readInt (req);
+ ipc_log (" args = %d\n", arg1);
+ Vector<char*> *res = dbeGetCPUVerMachineModel (arg1);
+ writeArray (res, req);
+ ipc_log (" returns %lld char*'s\n", VSIZE (res));
+ destroy (res);
+ }
+ else if (!strcmp (inp, "listMachineModels"))
+ {
+ Vector<String> *res = dbeListMachineModels ();
+#ifdef IPC_LOG
+ if (res != NULL)
+ ipc_log (" returns = %lld strings\n", VSIZE (res));
+ else
+ ipc_log (" returns NULL\n");
+#endif
+ writeArray (res, req);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "defineMemObj"))
+ {
+ String arg1 = readString (req);
+ String arg2 = readString (req);
+ String arg3 = readString (req);
+ String arg4 = readString (req);
+#ifdef IPC_LOG
+ ipc_log (" args = %s, %s, %s, %s\n", arg1, arg2, arg3 == NULL ? "NULL" : arg3, arg4 == NULL ? "NULL" : arg4);
+#endif
+ String sts = dbeDefineMemObj (arg1, arg2, NULL, arg3, arg4);
+#ifdef IPC_LOG
+ ipc_log (" returns '%s'\n", sts ? sts : "NULL");
+#endif
+ writeString (sts, req);
+ free (arg1);
+ free (arg2);
+ free (arg3);
+ free (arg4);
+ }
+ else if (!strcmp (inp, "deleteMemObj"))
+ {
+ String arg1 = readString (req);
+#ifdef IPC_LOG
+ ipc_log (" args = %s\n", arg1);
+#endif
+ String sts = dbeDeleteMemObj (arg1);
+#ifdef IPC_LOG
+ ipc_log (" returns '%s'\n", sts ? sts : "NULL");
+#endif
+ writeString (sts, req);
+ free (arg1);
+ }
+ else if (!strcmp (inp, "getIndxObjDescriptions"))
+ {
+ int arg1 = readInt (req);
+ ipc_log (" args = %d\n", arg1);
+ Vector<void*> *res = dbeGetIndxObjDescriptions (arg1);
+#ifdef IPC_LOG
+ if (res == NULL)
+ ipc_log (" -- returned NULL\n");
+ else
+ {
+ Vector<int> *indxo_types = (Vector<int> *)res->fetch (0);
+ ipc_log (" -- returned %lld-vector [ %lld-vectors]\n",
+ VSIZE (res), VSIZE (indxo_types));
+ }
+#endif
+ writeArray (res, req);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "getCustomIndxObjects"))
+ {
+ int arg1 = readInt (req);
+ ipc_log (" args = %d\n", arg1);
+ Vector<void*> *res = dbeGetCustomIndxObjects (arg1);
+#ifdef IPC_LOG
+ if (res == NULL)
+ ipc_log (" -- returned NULL\n");
+ else
+ {
+ Vector<char *> *indxo_names = (Vector<char *> *)res->fetch (0);
+ ipc_log (" -- returned %lld-vector [ %lld-vectors]\n",
+ VSIZE (res), VSIZE (indxo_names));
+ }
+#endif
+ writeArray (res, req);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "defineIndxObj"))
+ {
+ String arg1 = readString (req);
+ String arg2 = readString (req);
+ String arg3 = readString (req);
+ String arg4 = readString (req);
+ ipc_log (" args = %s, %s, %s, %s\n", arg1, arg2, arg3 == NULL ? "NULL" : arg3, arg4 == NULL ? "NULL" : arg4);
+ String sts = dbeDefineIndxObj (arg1, arg2, arg3, arg4);
+ ipc_log (" returns '%s'\n", sts ? sts : "NULL");
+ writeString (sts, req);
+ free (arg1);
+ free (arg2);
+ free (arg3);
+ free (arg4);
+ }
+ else if (!strcmp (inp, "setSelObj"))
+ {
+ int arg1 = readInt (req);
+ Obj arg2 = readObject (req);
+ int arg3 = readInt (req);
+ int arg4 = readInt (req);
+ ipc_log (" args = %d, %ld, %s, %d\n", arg1, (long) arg2, table_name (arg3), arg4);
+ dbeSetSelObj (arg1, arg2, arg3, arg4);
+ writeString (NULL, req);
+ }
+ else if (!strcmp (inp, "setSelObjV2"))
+ {
+ int arg1 = readInt (req);
+ uint64_t arg2 = readLong (req);
+ ipc_log (" args = %d, %ld\n", arg1, arg2);
+ dbeSetSelObjV2 (arg1, arg2);
+ writeString (NULL, req);
+ }
+ else if (!strcmp (inp, "getSelObj"))
+ {
+ int arg1 = readInt (req);
+ int arg2 = readInt (req);
+ int arg3 = readInt (req);
+ ipc_log (" args = %d, %s, %d\n", arg1, table_name (arg2), arg3);
+ Obj i = dbeGetSelObj (arg1, arg2, arg3);
+ ipc_log (" returns = %ld (0x%08lx)\n", (long) i, (long) i);
+ writeObject (i, req);
+ }
+ else if (!strcmp (inp, "getSelObjV2"))
+ {
+ int arg1 = readInt (req);
+ String arg2 = readString (req);
+ ipc_log (" arg1 = %d agr2 = %s\n", arg1, arg2 ? arg2 : "NULL");
+ Obj res = dbeGetSelObjV2 (arg1, arg2);
+ ipc_log (" returns = %lld\n", (long long) res);
+ writeObject (res, req);
+ free (arg2);
+ }
+ else if (!strcmp (inp, "getSelObjIO"))
+ {
+ int arg1 = readInt (req);
+ uint64_t arg2 = readLong (req);
+ int arg3 = readInt (req);
+ ipc_log (" arg1 = %d, arg2 = %lld, arg3 = %d\n", arg1, (long long) arg2, arg3);
+ Vector<uint64_t> *res = dbeGetSelObjIO (arg1, arg2, arg3);
+ writeArray (res, req);
+ delete res;
+ }
+ else if (!strcmp (inp, "getSelObjsIO"))
+ {
+ int arg1 = readInt (req);
+ Vector<uint64_t> *arg2 = (Vector<uint64_t>*)readArray (req);
+ int arg3 = readInt (req);
+ ipc_log (" arg1 = %d, arg2 size = %lld, arg3 = %d\n",
+ arg1, VSIZE (arg2), arg3);
+ Vector<uint64_t> *res = dbeGetSelObjsIO (arg1, arg2, arg3);
+ writeArray (res, req);
+ delete res;
+ }
+ else if (!strcmp (inp, "getSelObjHeapTimestamp"))
+ {
+ int arg1 = readInt (req);
+ uint64_t arg2 = readLong (req);
+ ipc_log (" arg1 = %d, arg2 = %llu\n", arg1, (unsigned long long) arg2);
+ uint64_t st = dbeGetSelObjHeapTimestamp (arg1, arg2);
+ ipc_log (" returns = %llu\n", (unsigned long long) st);
+ writeLong (st, req);
+ }
+ else if (!strcmp (inp, "getSelObjHeapUserExpId"))
+ {
+ int arg1 = readInt (req);
+ uint64_t arg2 = readLong (req);
+ ipc_log (" arg1 = %d, arg2 = %llu\n", arg1, (unsigned long long) arg2);
+ int userExpId = dbeGetSelObjHeapUserExpId (arg1, arg2);
+ ipc_log (" returns = %d\n", userExpId);
+ writeInt (userExpId, req);
+ }
+ else if (!strcmp (inp, "getSelIndex"))
+ {
+ int arg1 = readInt (req);
+ Obj arg2 = readObject (req);
+ int arg3 = readInt (req);
+ int arg4 = readInt (req);
+ ipc_log (" args = %d, 0x%08lx, %s, %d\n", arg1, (long) arg2, table_name (arg3), arg4);
+ int i = dbeGetSelIndex (arg1, arg2, arg3, arg4);
+ ipc_log (" returns = %d\n", i);
+ writeInt (i, req);
+ }
+ else if (!strcmp (inp, "printData"))
+ {
+ int arg1 = readInt (req);
+ int arg2 = readInt (req);
+ int arg3 = readInt (req);
+ String arg4 = readString (req);
+ String arg5 = readString (req);
+ ipc_log (" args = %d, %s, %d, `%s', `%s'\n",
+ arg1, table_name (arg2), arg3,
+ (arg4 == NULL ? "NULL" : arg4),
+ (arg5 == NULL ? "NULL" : arg5));
+ String res = dbePrintData (arg1, arg2, arg3, arg4, arg5, NULL);
+ writeString (res, req);
+ free (arg4);
+ free (arg5);
+ free (res);
+ }
+ else if (!strcmp (inp, "getPrintLimit"))
+ {
+ int arg1 = readInt (req);
+ ipc_log (" args = %d\n", arg1);
+ int i = dbeGetPrintLimit (arg1);
+ ipc_log (" returns = %d\n", i);
+ writeInt (i, req);
+ }
+ else if (!strcmp (inp, "setPrintLimit"))
+ {
+ int arg1 = readInt (req);
+ int arg2 = readInt (req);
+ ipc_log (" args = %d, %d\n", arg1, arg2);
+ String res = dbeSetPrintLimit (arg1, arg2);
+ writeString (res, req);
+ free (res);
+ }
+ else if (!strcmp (inp, "getPrintMode"))
+ {
+ int arg1 = readInt (req);
+ ipc_log (" args = %d\n", arg1);
+ int i = dbeGetPrintMode (arg1);
+ ipc_log (" returns = %d\n", i);
+ writeInt (i, req);
+ }
+ else if (!strcmp (inp, "setPrintMode"))
+ {
+ int arg1 = readInt (req);
+ String arg2 = readString (req);
+ ipc_log (" args = %d, %s\n", arg1, arg2);
+ String res = dbeSetPrintMode (arg1, arg2);
+ writeString (res, req);
+ free (arg2);
+ free (res);
+ }
+ else if (!strcmp (inp, "getPrintDelim"))
+ {
+ int arg1 = readInt (req);
+ ipc_log (" args = %d\n", arg1);
+ char i = dbeGetPrintDelim (arg1);
+ ipc_log (" returns = %c\n", i);
+ writeInt ((int) i, req);
+ }
+ else if (!strcmp (inp, "getHotMarks"))
+ {
+ int arg1 = readInt (req);
+ int arg2 = readInt (req);
+ ipc_log (" args = %d, %s (%d) \n", arg1, table_name (arg2), arg2);
+ Vector<void*> *res = dbeGetHotMarks (arg1, arg2);
+ writeArray (res, req);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "getHotMarksInc"))
+ {
+ int arg1 = readInt (req);
+ int arg2 = readInt (req);
+ ipc_log (" args = %d, %s (%d) \n", arg1, table_name (arg2), arg2);
+ Vector<void*> *res = dbeGetHotMarksInc (arg1, arg2);
+ writeArray (res, req);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "getSummaryHotMarks"))
+ {
+ int arg1 = readInt (req);
+ Vector<Obj> *arg2 = (Vector<Obj>*)readArray (req);
+ int arg3 = readInt (req);
+ ipc_log (" args = %d, 0x%llx, %s (%d)\n", arg1, (long long) arg2, table_name (arg3), arg3);
+ Vector<void*> *res = dbeGetSummaryHotMarks (arg1, arg2, arg3);
+ writeArray (res, req);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "getFuncId"))
+ {
+ int arg1 = readInt (req);
+ int arg2 = readInt (req);
+ int arg3 = readInt (req);
+ int arg4 = readInt (req);
+ ipc_log (" args = %d, %s, %d, %d\n", arg1, table_name (arg2), arg3, arg4);
+ Vector<uint64_t> *res = dbeGetFuncId (arg1, arg2, arg3, arg4);
+ writeArray (res, req);
+ delete res;
+ }
+ else if (!strcmp (inp, "getFuncCalleeInfo"))
+ {
+ int arg1 = readInt (req);
+ int arg2 = readInt (req);
+ Vector<int> *arg3 = (Vector<int>*)readArray (req);
+ int arg4 = readInt (req);
+ ipc_log (" args = %d, %s, %lld, %d\n", arg1, table_name (arg2), VSIZE (arg3), arg4);
+ Vector<void*> *res = dbeGetFuncCalleeInfo (arg1, arg2, arg3, arg4);
+ writeArray (res, req);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "getFuncCallerInfo"))
+ {
+ int arg1 = readInt (req);
+ int arg2 = readInt (req);
+ Vector<int> *arg3 = (Vector<int>*)readArray (req);
+ int arg4 = readInt (req);
+ ipc_log (" args = %d, %s, %lld, %d\n", arg1, table_name (arg2), VSIZE (arg3), arg4);
+ Vector<void*> *res = dbeGetFuncCallerInfo (arg1, arg2, arg3, arg4);
+ writeArray (res, req);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "setFuncData"))
+ {
+ int arg1 = readInt (req);
+ Obj arg2 = readObject (req);
+ int arg3 = readInt (req);
+ int arg4 = readInt (req);
+ ipc_log (" args = %d, %ld, %s, %d\n", arg1, (long) arg2, table_name (arg3), arg4);
+ int i = dbeSetFuncData (arg1, arg2, arg3, arg4);
+ ipc_log (" returns = %d\n", i);
+ writeInt (i, req);
+ }
+ else if (!strcmp (inp, "setFuncDataV2"))
+ {
+ int dbevindex = readInt (req);
+ Obj sel_obj = readObject (req);
+ int type = readInt (req);
+ int subtype = readInt (req);
+ Vector<long long> *longs = new Vector<long long>(2);
+ Vector<char *> *strings = new Vector<char *>(2);
+
+ longs->append (dbeSetFuncData (dbevindex, sel_obj, type, subtype));
+ strings->append (dbeGetMsg (dbevindex, ERROR_MSG));
+ String sf_name = NULL;
+ long long sf_id = 0;
+ switch (type)
+ {
+ case DSP_SOURCE:
+ case DSP_DISASM:
+ {
+ Histable *obj = (Histable *) sel_obj;
+ if (obj)
+ {
+ Histable *sf = obj->convertto (Histable::SOURCEFILE);
+ if (sf)
+ {
+ sf_id = sf->id;
+ sf_name = dbe_strdup (sf->get_name ());
+ }
+ }
+ break;
+ }
+ }
+ longs->append (sf_id);
+ strings->append (sf_name);
+ ipc_log (" setFuncData(%d, %ld, %s, %d) returns (%lld, %lld)\n (%s, %s)\n",
+ dbevindex, (long) sel_obj, table_name (type), subtype, longs->get (0), longs->get (1),
+ STR (strings->get (0)), STR (strings->get (1)));
+
+ Vector<void *> *res = new Vector<void *>(2);
+ res->append (longs);
+ res->append (strings);
+ writeArray (res, req);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "getFuncList"))
+ {
+ int arg1 = readInt (req);
+ int arg2 = readInt (req);
+ int arg3 = readInt (req);
+ ipc_log (" args = %d, %s, %d\n", arg1, table_name (arg2), arg3);
+ Vector<void*> *res = dbeGetFuncList (arg1, arg2, arg3);
+#ifdef IPC_LOG
+ if (res != NULL)
+ ipc_log (" returns = %lld objects, length = %lld\n",
+ VSIZE (res), VSIZE ((Vector<int>*)res->fetch (0)));
+ else
+ ipc_log (" returns NULL\n");
+#endif
+ writeArray (res, req);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "getFuncListV2"))
+ {
+ int dbevindex = readInt (req);
+ int mtype = readInt (req);
+ Obj sel_obj = readObject (req);
+ int type = readInt (req);
+ int subtype = readInt (req);
+ Vector<void*> *res = dbeGetFuncListV2 (dbevindex, mtype, sel_obj, type, subtype);
+ ipc_log (" args = %d 0x%x %ld, %s, %d returns = %d objects, length = %d\n",
+ dbevindex, mtype, (long) sel_obj, table_name (type), subtype,
+ (int) (res ? res->size () : 0),
+ (int) (res ? ((Vector<int>*)res->fetch (0))->size () : 0));
+ writeArray (res, req);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "getFuncListMini"))
+ {
+ int arg1 = readInt (req);
+ int arg2 = readInt (req);
+ int arg3 = readInt (req);
+ ipc_log (" args = %d, %s, %d\n", arg1, table_name (arg2), arg3);
+ Vector<void*> *res = dbeGetFuncListMini (arg1, arg2, arg3);
+#ifdef IPC_LOG
+ if (res != NULL)
+ ipc_log (" returns = %lld objects, length = %lld\n",
+ VSIZE (res), VSIZE ((Vector<int>*)res->fetch (0)));
+ else
+ ipc_log (" returns NULL\n");
+#endif
+ writeArray (res, req);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "dbeGetTotals"))
+ {
+ int dbevindex = readInt (req);
+ int dsptype = readInt (req);
+ int subtype = readInt (req);
+ Vector<void *> *res = dbeGetTotals (dbevindex, dsptype, subtype);
+ ipc_log (" dbeGetTotals(%d, %d, %d) returns %lld objects\n",
+ dbevindex, dsptype, subtype, VSIZE (res));
+ writeArray (res, req);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "getComparableObjsV2"))
+ {
+ int arg1 = readInt (req);
+ Obj arg2 = readObject (req);
+ int arg3 = readInt (req);
+ Vector<Obj> *res = dbeGetComparableObjsV2 (arg1, arg2, arg3);
+ ipc_log (" args = %d 0x%lx %d\n", arg1, (long) arg2, arg3);
+ ipc_dump ("getComparableObjsV2:res", res);
+ writeArray (res, req);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "dbeConvertSelObj"))
+ {
+ Obj obj = readObject (req);
+ int type = readInt (req);
+ Obj res = dbeConvertSelObj (obj, type);
+ ipc_log (" args = %lld %d res=%lld \n", (long long) obj, type,
+ (long long) res);
+ writeObject (res, req);
+ }
+ else if (!strcmp (inp, "getTableDataV2"))
+ {
+ int arg1 = readInt (req);
+ String arg2 = readString (req);
+ String arg3 = readString (req);
+ String arg4 = readString (req);
+ String arg5 = readString (req);
+ Vector<uint64_t> *arg6 = (Vector<uint64_t>*)readArray (req);
+ ipc_log (" args = %d, %s, %s, %s, %s, %lld\n", arg1, STR (arg2),
+ STR (arg3), STR (arg4), STR (arg5), VSIZE (arg6));
+ Vector<void*> *res = dbeGetTableDataV2 (arg1, arg2, arg3, arg4, arg5, arg6);
+#ifdef IPC_LOG
+ if (res != NULL)
+ ipc_log (" returns = %lld objects, length = %lld\n",
+ VSIZE (res), VSIZE ((Vector<int>*)res->fetch (0)));
+ else
+ ipc_log (" returns NULL\n");
+#endif
+ writeArray (res, req);
+ //destroy( arg6 );
+ destroy (res);
+ }
+ else if (!strcmp (inp, "getCallTreeNumLevels"))
+ {
+ int arg1 = readInt (req);
+ ipc_log (" args = %d\n", arg1);
+ int res = dbeGetCallTreeNumLevels (arg1);
+#ifdef IPC_LOG
+ ipc_log (" returns = %d\n", res);
+#endif
+ writeInt (res, req);
+ }
+ else if (!strcmp (inp, "getCallTreeLevel"))
+ {
+ int arg1 = readInt (req);
+ String arg2 = readString (req);
+ int arg3 = readInt (req);
+ ipc_log (" args = %d, %s, %d\n", arg1, arg2, arg3);
+ Vector<void*> *res = dbeGetCallTreeLevel (arg1, arg2, arg3);
+ writeArray (res, req);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "getCallTreeChildren"))
+ {
+ int arg1 = readInt (req);
+ String arg2 = readString (req);
+ Vector<int> *arg3 = (Vector<int> *) readArray (req); /*NodeIdx array*/
+ ipc_log (" args = %d, %s, vec_size=%lld\n", arg1, arg2, (long long) (arg3 ? arg3->size () : 0));
+ Vector<void*> *res = dbeGetCallTreeChildren (arg1, arg2, arg3);
+ writeArray (res, req);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "getCallTreeLevels"))
+ {
+ int arg1 = readInt (req);
+ String arg2 = readString (req);
+ ipc_log (" args = %d, %s\n", arg1, arg2);
+ Vector<void*> *res = dbeGetCallTreeLevels (arg1, arg2);
+ writeArray (res, req);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "getCallTreeLevelFuncs"))
+ {
+ int arg1 = readInt (req);
+ int arg2 = readInt (req);
+ int arg3 = readInt (req);
+ ipc_log (" args = %d, %d, %d\n", arg1, arg2, arg3);
+ Vector<void*> *res = dbeGetCallTreeLevelFuncs (arg1, arg2, arg3);
+ writeArray (res, req);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "getCallTreeFuncs"))
+ {
+ int arg1 = readInt (req);
+ ipc_log (" args = %d\n", arg1);
+ Vector<void*> *res = dbeGetCallTreeFuncs (arg1);
+ writeArray (res, req);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "getGroupIds"))
+ {
+ int arg1 = readInt (req);
+ Vector<int> *res = dbeGetGroupIds (arg1);
+ writeArray (res, req);
+ delete res;
+ }
+ else if (!strcmp (inp, "getNames"))
+ {
+ int arg1 = readInt (req);
+ int arg2 = readInt (req);
+ Obj arg3 = readObject (req);
+#ifdef IPC_LOG
+ ipc_log (" args = %d, %s 0x%lx\n", arg1, table_name (arg2), (long) arg3);
+#endif
+ Vector<String> *res = dbeGetNames (arg1, arg2, arg3);
+ writeArray (res, req);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "getTotalMax"))
+ {
+ int arg1 = readInt (req);
+ int arg2 = readInt (req);
+ int arg3 = readInt (req);
+ ipc_log (" args = %d, %s, %d\n", arg1, table_name (arg2), arg3);
+ Vector<void*> *res = dbeGetTotalMax (arg1, arg2, arg3);
+#ifdef IPC_LOG
+ if (res != NULL)
+ ipc_log (" returns = %lld vectors, length %lld\n",
+ VSIZE (res), VSIZE ((Vector<void*>*)res->fetch (0)));
+ else
+ ipc_log (" returns NULL\n");
+#endif
+ writeArray (res, req);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "composeFilterClause"))
+ {
+ int arg1 = readInt (req);
+ int arg2 = readInt (req);
+ int arg3 = readInt (req);
+ Vector<int> *arg4 = (Vector<int>*)readArray (req);
+ ipc_log (" args = %d, %s, %d, %lld selections\n",
+ arg1, table_name (arg2), arg3, VSIZE (arg4));
+ String s = dbeComposeFilterClause (arg1, arg2, arg3, arg4);
+ ipc_log (" returns %s\n", (s == NULL ? "<NULL>" : s));
+ writeString (s, req);
+ }
+ else if (!strcmp (inp, "getStatisOverviewList"))
+ {
+ int arg1 = readInt (req);
+ ipc_log (" args = %d\n", arg1);
+ Vector<Object> *res = dbeGetStatisOverviewList (arg1);
+ ipc_log (" dbeStatisGetOverviewList returns = %lld objects\n", VSIZE (res));
+ writeArray (res, req);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "getStatisList"))
+ {
+ int arg1 = readInt (req);
+ ipc_log (" args = %d\n", arg1);
+ Vector<Object> *res = dbeGetStatisList (arg1);
+ ipc_log (" returns = %lld objects\n", VSIZE (res));
+ writeArray (res, req);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "getSummary"))
+ {
+ int arg1 = readInt (req);
+ Vector<Obj> *arg2 = (Vector<Obj>*)readArray (req);
+ int arg3 = readInt (req);
+ int arg4 = readInt (req);
+ ipc_log (" args = %d, 0x%llx, %s (%d), %d\n", arg1, (long long) arg2, table_name (arg3), arg3, arg4);
+ Vector<Object> *res = dbeGetSummary (arg1, arg2, arg3, arg4);
+ ipc_log (" dbeGetSummary returns = %lld objects\n", VSIZE (res));
+ writeArray (res, req);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "getSummaryV2"))
+ {
+ int dbevindex = readInt (req);
+ Vector<Obj> *sel_objs = (Vector<Obj>*)readArray (req);
+ int type = readInt (req);
+ int subtype = readInt (req);
+ Vector<void*> *res = dbeGetSummaryV2 (dbevindex, sel_objs, type, subtype);
+ ipc_log (" args = %d, [%lld], %s (%d), %d res=[%lld] 0x%llx \n",
+ dbevindex, VSIZE (sel_objs), table_name (type), type, subtype,
+ VSIZE (res), (unsigned long long) res);
+ writeArray (res, req);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "getExpName1"))
+ {
+ // XXX add an argument = DbeView index
+ String arg1 = readString (req);
+ ipc_log (" arg = `%s'\n", arg1 ? arg1 : "NULL");
+ String res = dbeGetExpName (0, arg1);
+ writeString (res, req);
+ ipc_log (" returns `%s'\n", res ? res : "NULL");
+ free (arg1);
+ free (res);
+ }
+ else if (!strcmp (inp, "getHwcHelp"))
+ {
+ // XXX add an argument = DbeView index
+ bool forKernel = readBoolean (req);
+ Vector<String> *res = dbeGetHwcHelp (0, forKernel);
+ writeArray (res, req);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "getHwcSets"))
+ {
+ // XXX add an argument = DbeView index
+ bool forKernel = readBoolean (req);
+ Vector<Vector<char*>*> *res = dbeGetHwcSets (0, forKernel);
+ writeArray (res, req);
+ ipc_log (" returns %lld char*'s\n", VSIZE (res));
+ destroy (res);
+ }
+ else if (!strcmp (inp, "getHwcsAll"))
+ {
+ // XXX add an argument = DbeView index
+ bool forKernel = readBoolean (req);
+ Vector<void*> *res = dbeGetHwcsAll (0, forKernel);
+ writeArray (res, req);
+ ipc_log (" returns %lld char*'s\n", VSIZE (res));
+ destroy (res);
+ }
+ else if (!strcmp (inp, "getHwcAttrList"))
+ {
+ // XXX add an argument = DbeView index
+ bool forKernel = readBoolean (req);
+ Vector<char*> *res = dbeGetHwcAttrList (0, forKernel);
+ ipc_log (" returns %lld char*'s\n", VSIZE (res));
+ writeArray (res, req);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "getHwcMaxConcurrent"))
+ {
+ // XXX add an argument = DbeView index
+ bool forKernel = readBoolean (req);
+ int res = dbeGetHwcMaxConcurrent (0, forKernel);
+ writeInt (res, req);
+ }
+ else if (!strcmp (inp, "getIfreqData"))
+ {
+ int arg1 = readInt (req);
+ ipc_log (" args = %d\n", arg1);
+ Vector<char*> *res = dbeGetIfreqData (arg1);
+ ipc_log (" returns %lld char*'s\n", VSIZE (res));
+ writeArray (res, req);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "getNewLeakListInfo"))
+ {
+ int arg1 = readInt (req);
+ bool arg2 = readBoolean (req);
+ ipc_log (" args = %d, %d\n", arg1, arg2);
+ Vector<void*> *res = dbeGetLeakListInfo (arg1, arg2);
+ ipc_log (" returns %lld void*'s\n", VSIZE (res));
+ writeArray (res, req);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "getObject"))
+ {
+ int arg1 = readInt (req);
+ Obj arg2 = readObject (req);
+ Obj arg3 = readObject (req);
+ Obj i = dbeGetObject (arg1, arg2, arg3);
+ writeObject (i, req);
+ }
+ else if (!strcmp (inp, "getExpVerboseName"))
+ {
+ Vector<int> *arg = (Vector<int>*)readArray (req);
+ ipc_log (" expIds = %lld\n", VSIZE (arg));
+ Vector<String> *res = dbeGetExpVerboseName (arg);
+ ipc_log (" returns = %lld objects\n", VSIZE (res));
+ writeArray (res, req);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "getName"))
+ {
+ // XXX add an argument = DbeView index
+ int arg1 = readInt (req);
+ String res = dbeGetName (0, arg1);
+ writeString (res, req);
+ free (res);
+ }
+ else if (!strcmp (inp, "getStartTime"))
+ {
+ // XXX add an argument = DbeView index
+ int arg1 = readInt (req);
+ long long l = dbeGetStartTime (0, arg1);
+ ipc_log (" returns = %llu\n", l);
+ writeLong (l, req);
+ }
+ else if (!strcmp (inp, "getRelativeStartTime"))
+ {
+ // XXX add an argument = DbeView index
+ int arg1 = readInt (req);
+ long long l = dbeGetRelativeStartTime (0, arg1);
+ ipc_log (" returns = %llu\n", l);
+ writeLong (l, req);
+ }
+ else if (!strcmp (inp, "getEndTime"))
+ {
+ // XXX add an argument = DbeView index
+ int arg1 = readInt (req);
+ long long l = dbeGetEndTime (0, arg1);
+ ipc_log (" returns = %llu\n", l);
+ writeLong (l, req);
+ }
+ else if (!strcmp (inp, "getClock"))
+ {
+ // XXX add an argument = DbeView index
+ int arg1 = readInt (req);
+ int i = dbeGetClock (0, arg1);
+ writeInt (i, req);
+ }
+ /*
+ else if ( !strcmp( inp, "getFounderExpId" ) ) {
+ // XXX add an argument = DbeView index
+ int arg1 = readInt(req);
+ int i = dbeGetFounderExpId(0, arg1 );
+ writeInt( i, req );
+ }
+ */
+ else if (!strcmp (inp, "getEntityProps"))
+ {
+ int arg1 = readInt (req);
+ ipc_log (" args = %d\n", arg1);
+ Vector<void*> *res = dbeGetEntityProps (arg1);
+ writeArray (res, req);
+ ipc_log (" returns = %lld objects\n", VSIZE (res));
+ destroy (res);
+ }
+ else if (!strcmp (inp, "getEntities"))
+ {
+ int arg1 = readInt (req);
+ int arg2 = readInt (req);
+ int arg3 = readInt (req);
+ ipc_log (" args = %d, %d, %d\n", arg1, arg2, arg3);
+ Vector<void*> *res = dbeGetEntities (arg1, arg2, arg3);
+ writeArray (res, req);
+ ipc_log (" returns = %lld objects\n", VSIZE (res));
+ destroy (res);
+ }
+ else if (!strcmp (inp, "getEntitiesV2"))
+ {
+ int arg1 = readInt (req);
+ Vector<int> *arg2 = (Vector<int>*)readArray (req);
+ int arg3 = readInt (req);
+ ipc_log (" args = %d, %lld, %d\n", arg1, VSIZE (arg2), arg3);
+ Vector<void*> *res = dbeGetEntitiesV2 (arg1, arg2, arg3);
+ writeArray (res, req);
+ ipc_log (" returns = %lld objects\n", VSIZE (res));
+ destroy (res);
+ }
+ else if (!strcmp (inp, "getTLDetails"))
+ {//TBR
+ int arg1 = readInt (req);
+ int arg2 = readInt (req);
+ int arg3 = readInt (req);
+ int arg4 = readInt (req);
+ long long arg5 = readLong (req);
+ ipc_log (" dbevindex= %d, exp_id = %d, data_id = %d, "
+ "entity_prop_id = %d, event_id = %lld\n",
+ arg1, arg2, arg3, arg4, arg5);
+ Vector<void*> *res = dbeGetTLDetails (arg1, arg2, arg3, arg4, arg5);
+ ipc_log (" returns = %lld objects\n", VSIZE (res));
+ writeArray (res, req);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "getStackNames"))
+ {
+ int arg1 = readInt (req);
+ Obj arg2 = readObject (req);
+ ipc_log (" args = %d, %ld\n", arg1, (long) arg2);
+ Vector<String> *res = dbeGetStackNames (arg1, arg2);
+ ipc_log (" returns = %lld objects\n", VSIZE (res));
+ writeArray (res, req);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "getStackFunctions"))
+ {
+ // XXX add an argument = DbeView index
+ Obj arg1 = readObject (req);
+ ipc_log (" args = %ld\n", (long) arg1);
+ Vector<Obj> *res = dbeGetStackFunctions (0, arg1);
+ ipc_log (" returns = %lld objects\n", VSIZE (res));
+ writeArray (res, req);
+ delete res;
+ }
+ else if (!strcmp (inp, "getStacksFunctions"))
+ {
+ // XXX add an argument = DbeView index
+ Vector<Obj> *arg1 = (Vector<Obj>*)readArray (req);
+ ipc_log (" argc = %ld\n", (long) arg1->size ());
+ Vector<void*> *res = dbeGetStacksFunctions (0, arg1);
+ ipc_log (" returns = %lld objects\n", VSIZE (res));
+ writeArray (res, req);
+ delete res;
+ }
+ else if (!strcmp (inp, "getStackPCs"))
+ {
+ // XXX add an argument = DbeView index
+ Obj arg1 = readObject (req);
+ ipc_log (" args = %ld\n", (long) arg1);
+ Vector<Obj> *res = dbeGetStackPCs (0, arg1);
+ ipc_log (" returns = %lld objects\n", VSIZE (res));
+ writeArray (res, req);
+ delete res;
+ }
+ else if (!strcmp (inp, "getIOStatistics"))
+ {
+ int dbevindex = readInt (req);
+ Vector<Vector<char*>*> *res = dbeGetIOStatistics (dbevindex);
+ writeArray (res, req);
+ ipc_log (" returns %lld char*'s\n", VSIZE (res));
+ destroy (res);
+ }
+ else if (!strcmp (inp, "getHeapStatistics"))
+ {
+ int dbevindex = readInt (req);
+ Vector<Vector<char*>*> *res = dbeGetHeapStatistics (dbevindex);
+ writeArray (res, req);
+ ipc_log (" returns %lld char*'s\n", VSIZE (res));
+ destroy (res);
+ }
+ else if (!strcmp (inp, "getSamples"))
+ {
+ int dbev_id = readInt (req);
+ int exp_id = readInt (req);
+ int64_t lo = readLong (req);
+ int64_t hi = readLong (req);
+ ipc_log (" dbevindex= %d, exp_id = %d, lo_idx:%lld, hi_idx:%lld\n",
+ dbev_id, exp_id, (long long) lo, (long long) hi);
+ Vector<void*> *res = dbeGetSamples (dbev_id, exp_id, lo, hi);
+ writeArray (res, req);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "getGCEvents"))
+ {
+ int dbev_id = readInt (req);
+ int exp_id = readInt (req);
+ int64_t lo = readLong (req);
+ int64_t hi = readLong (req);
+ ipc_log (" dbevindex= %d, exp_id = %d, lo_idx:%lld, hi_idx:%lld\n",
+ dbev_id, exp_id, (long long) lo, (long long) hi);
+ Vector<void*> *res = dbeGetGCEvents (dbev_id, exp_id, lo, hi);
+ writeArray (res, req);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "getFuncNames"))
+ {
+ int arg1 = readInt (req);
+ Vector<Obj> *arg2 = (Vector<Obj>*)readArray (req);
+ ipc_log (" arg1 = %d, arg2 absent, size = %lld\n", arg1, VSIZE (arg2));
+ Vector<String> *res = dbeGetFuncNames (arg1, arg2);
+ writeArray (res, req);
+ delete arg2;
+ destroy (res);
+ }
+ else if (!strcmp (inp, "getFuncIds"))
+ {
+ int arg1 = readInt (req);
+ Vector<Obj> *arg2 = (Vector<Obj>*)readArray (req);
+ ipc_log (" arg1 = %d, arg2 absent, size = %lld\n", arg1, VSIZE (arg2));
+ Vector<uint64_t> *res = dbeGetFuncIds (arg1, arg2);
+ writeArray (res, req);
+ delete arg2;
+ destroy (res);
+ }
+ else if (!strcmp (inp, "getObjNamesV2"))
+ {
+ int arg1 = readInt (req);
+ Vector<uint64_t> *arg2 = (Vector<uint64_t>*)readArray (req);
+ ipc_log (" arg1 = %d, arg2 absent, size = %lld\n", arg1, VSIZE (arg2));
+ Vector<String> *res = dbeGetObjNamesV2 (arg1, arg2);
+ writeArray (res, req);
+ delete arg2;
+ destroy (res);
+ }
+ else if (!strcmp (inp, "getFuncName"))
+ {
+ int arg1 = readInt (req);
+ Obj arg2 = readObject (req);
+ ipc_log (" arg1 = %d, arg2 = %lld\n", arg1, (long long) arg2);
+ String res = dbeGetFuncName (arg1, arg2);
+ ipc_log (" returning = %s\n", res ? res : "NULL");
+ writeString (res, req);
+ free (res);
+ }
+ else if (!strcmp (inp, "getObjNameV2"))
+ {
+ int arg1 = readInt (req);
+ uint64_t arg2 = readLong (req);
+ ipc_log (" arg1 = %d, arg2 = %llu\n", arg1, (unsigned long long) arg2);
+ String res = dbeGetObjNameV2 (arg1, arg2);
+ ipc_log (" returning = %s\n", res ? res : "NULL");
+ writeString (res, req);
+ free (res);
+ }
+ else if (!strcmp (inp, "getDataspaceTypeDesc"))
+ {
+ // XXX add an argument = DbeView index
+ Obj arg1 = readObject (req);
+ ipc_log (" arg1 absent, index = %ld\n", (long) arg1);
+ String res = dbeGetDataspaceTypeDesc (0, arg1);
+ ipc_log (" returning = %s\n", res ? res : "NULL");
+ writeString (res, req);
+ free (res);
+ }
+ /*
+ * New Interface with Timeline
+ */
+#if 0 //YXXX TBR
+ else if (!strcmp (inp, "dbeInit"))
+ dbeInit ();
+ else if (!strcmp (inp, "getDefaultExperimentName"))
+ {
+ String res = dbeGetDefaultExperimentName ();
+ ipc_log (" returning = %s\n", res);
+ writeString (res);
+ free (res);
+ }
+ else if (!strcmp (inp, "getExperimentState"))
+ {
+ String res = dbeGetExperimentState ();
+ ipc_log (" returning = %s\n", res);
+ writeString (res);
+ free (res);
+ }
+ else if (!strcmp (inp, "getExpStartTime"))
+ {
+ long long l = dbeGetExpStartTime ();
+ ipc_log (" returns = %llu\n", l);
+ writeLong (l);
+ }
+ else if (!strcmp (inp, "getExpEndTime"))
+ {
+ long long l = dbeGetExpEndTime ();
+ ipc_log (" returns = %llu\n", l);
+ writeLong (l);
+ }
+#endif
+ else if (!strcmp (inp, "getDataDescriptorsV2"))
+ {//TBR? TBD
+ int exp_id = readInt (req);
+ ipc_log (" exp_id = %d\n", exp_id);
+ Vector<void*> *res = dbeGetDataDescriptorsV2 (exp_id);
+ ipc_log (" returns = %lld objects\n", VSIZE (res));
+ writeArray (res, req);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "getDataPropertiesV2"))
+ {//TBR? TBD
+ int exp_id = readInt (req);
+ int arg2 = readInt (req);
+ ipc_log (" exp_id = %d, data_idx = %d\n", exp_id, arg2);
+ Vector<void*> *res = dbeGetDataPropertiesV2 (exp_id, arg2);
+ ipc_log (" returns = %lld objects\n", VSIZE (res));
+ writeArray (res, req);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "getExperimentTimeInfo"))
+ {
+ Vector<int> *exp_ids = (Vector<int>*)readArray (req);
+ ipc_log (" cnt = %lld\n", VSIZE (exp_ids));
+ Vector<void*> *res = dbeGetExperimentTimeInfo (exp_ids);
+ ipc_log (" returns = %lld objects\n", VSIZE (res));
+ writeArray (res, req);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "getExperimentDataDescriptors"))
+ {
+ Vector<int> *exp_ids = (Vector<int>*)readArray (req);
+ ipc_log (" cnt = %lld\n", VSIZE (exp_ids));
+ Vector<void*> *res = dbeGetExperimentDataDescriptors (exp_ids);
+ ipc_log (" returns = %lld objects\n", VSIZE (res));
+ writeArray (res, req);
+ destroy (res);
+ }
+#if 0 //YXXX TBR?
+ else if (!strcmp (inp, "getExprValues"))
+ {//TBR? TBD
+ int arg1 = readInt ();
+ String arg2 = readString ();
+ ipc_log (" data_idx = %d expr = %s\n", arg1, arg2 ? arg2 : "NULL");
+ Vector<long long> *res = dbeGetExprValues (arg1, arg2);
+ ipc_log (" returns = %d objects\n", res ? res->size () : 0);
+ writeArray (res);
+ delete res;
+ free (arg2);
+ }
+#endif
+ else if (!strcmp (inp, "hasTLData"))
+ {
+ int dbevindex = readInt (req);
+ Vector<int> *exp_ids = (Vector<int>*)readArray (req);
+ Vector<int> *data_ids = (Vector<int>*)readArray (req);
+ Vector<int> *eprop_ids = (Vector<int>*)readArray (req);
+ Vector<int> *eprop_vals = (Vector<int>*)readArray (req);
+ Vector<int> *auxs = (Vector<int>*)readArray (req);
+ ipc_log (" dbev_id = %d, cnt = %lld\n", dbevindex, VSIZE (exp_ids));
+ Vector<bool> *res = dbeHasTLData (dbevindex,
+ exp_ids, data_ids, eprop_ids, eprop_vals, auxs);
+ writeArray (res, req);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "getTLData"))
+ {
+ int dbevindex = readInt (req);
+ int exp_id = readInt (req);
+ int tldata_type = readInt (req);
+ int entity_prop_id = readInt (req);
+ int entity_prop_val = readInt (req);
+ int aux = readInt (req);
+ long long arg5 = readLong (req);
+ long long arg6 = readLong (req);
+ int arg7 = readInt (req);
+ bool getReps = readBoolean (req);
+ Vector<String> *secondaryProps = (Vector<String>*)readArray (req);
+
+ ipc_log (" args = %d:%d; tldata_type=%d entity_prop_id=%d ent=%d aux=%d"
+ "\n tstart=%lld delta=%lld ndeltas=%d getReps=%d nProps=%lld\n",
+ dbevindex, exp_id,
+ tldata_type, entity_prop_id, entity_prop_val, aux,
+ arg5, arg6, arg7, (int) getReps, VSIZE (secondaryProps));
+ Vector<void*> *res = dbeGetTLData (dbevindex, exp_id,
+ tldata_type, entity_prop_id, entity_prop_val, aux,
+ arg5, arg6, arg7, getReps, secondaryProps);
+#ifdef IPC_LOG
+ if (res)
+ {
+ Vector<Obj> *reps = (Vector<Obj>*)res->fetch (0);
+ Vector<Obj> *props = (Vector<Obj>*)res->fetch (1);
+ if (reps)
+ {
+ Vector <long long> *fids = (Vector <long long> *)reps->fetch (2);
+ int sz = fids ? fids->size () : 0;
+ ipc_log (" returning TL reps (dDscrs); nreps=%d:", sz);
+ int i;
+ for (i = 0; i < sz && i < 7; i++)
+ ipc_log (" %lld", fids->fetch (i));
+ if (i < sz)
+ ipc_log (" ... %lld", fids->fetch (sz - 1));
+ ipc_log ("\n");
+ }
+ if (props)
+ {
+ int nprops = props->size ();
+ ipc_log (" returning values for %d properties:\n", nprops);
+ assert (secondaryProps->size () == nprops);
+ }
+ }
+ else
+ ipc_log (" returning NULL\n");
+#endif
+ writeArray (res, req);
+ destroy (res);
+ destroy (secondaryProps);
+ }
+ else if (!strcmp (inp, "getTLEventCenterTime"))
+ {
+ int dbevindex = readInt (req);
+ int exp_id = readInt (req);
+ int tldata_type = readInt (req);
+ int entity_prop_id = readInt (req);
+ int entity_prop_val = readInt (req);
+ int aux = readInt (req);
+ long long event_id = readLong (req);
+ long long move_count = readLong (req);
+ ipc_log (" args = %d:%d; tldata_type = %d entity_prop_id = %d "
+ "ent = %d aux = %d idx = %lld move=%lld\n",
+ dbevindex, exp_id,
+ tldata_type, entity_prop_id, entity_prop_val, aux, event_id, move_count);
+ Vector<long long> * res = dbeGetTLEventCenterTime (dbevindex, exp_id,
+ tldata_type, entity_prop_id, entity_prop_val, aux, event_id, move_count);
+ ipc_log (" returning idx = %lld, time = %lld\n",
+ res ? res->fetch (0) : -1, res ? res->fetch (1) : -1);
+ writeArray (res, req);
+ }
+ else if (!strcmp (inp, "getTLEventIdxNearTime"))
+ {
+ int dbevindex = readInt (req);
+ int exp_id = readInt (req);
+ int tldata_type = readInt (req);
+ int entity_prop_id = readInt (req);
+ int entity_prop_val = readInt (req);
+ int aux = readInt (req);
+ int searchDirection = readInt (req);
+ long long value = readLong (req);
+ ipc_log (" args = %d:%d; tldata_type = %d entity_prop_id = %d "
+ "ent = %d aux = %d direction = %d value = %lld(0x%llx)\n",
+ dbevindex, exp_id,
+ tldata_type, entity_prop_id, entity_prop_val, aux,
+ searchDirection, value, value);
+ long long res = dbeGetTLEventIdxNearTime (dbevindex, exp_id,
+ tldata_type, entity_prop_id, entity_prop_val, aux,
+ searchDirection, value);
+ ipc_log (" returning = %lld\n", res);
+ writeLong (res, req);
+ }
+ else if (!strcmp (inp, "getAggregatedValue"))
+ {
+ int arg1 = readInt (req);
+ String arg2 = readString (req);
+ String arg3 = readString (req);
+ String arg4 = readString (req);
+ long long arg5 = readLong (req);
+ long long arg6 = readLong (req);
+ int arg7 = readInt (req);
+ String arg8 = readString (req);
+ String arg9 = readString (req);
+ ipc_log (" data_idx = %d lfilter = \"%s\" fexpr = \"%s\" "
+ "time = \"%s\" tstart = %lld delta = %lld "
+ "num = %d key = \"%s\" aggr = \"%s\"\n",
+ arg1, arg2 ? arg2 : "NULL", arg3 ? arg3 : "NULL",
+ arg4 ? arg4 : "NULL", arg5, arg6,
+ arg7, arg8 ? arg8 : "NULL", arg9 ? arg9 : "NULL");
+ Vector<long long> *res = dbeGetAggregatedValue (arg1, arg2, arg3,
+ arg4, arg5, arg6, arg7, arg8, arg9);
+#ifdef IPC_LOG
+ if (res)
+ {
+ int sz = res->size ();
+ ipc_log (" returning = %d values:", sz);
+ if (sz > 10)
+ sz = 10;
+ for (int i = 0; i < sz; i++)
+ ipc_log (" %lld", res->fetch (i));
+ ipc_log ("\n");
+ }
+ else
+ ipc_log (" returning NULL\n");
+#endif
+ writeArray (res, req);
+ delete res;
+ free (arg2);
+ free (arg3);
+ free (arg4);
+ free (arg8);
+ free (arg9);
+ }
+#if 0//YXXX TBR
+ else if (!strcmp (inp, "getExprValue"))
+ {
+ int exp_id = readInt ();
+ int arg1 = readInt ();
+ int arg2 = readInt ();
+ String arg3 = readString ();
+ ipc_log (" exp_id %d, data_id = %d, event_id = %d, expr = %s\n",
+ exp_id, arg1, arg2, arg3 ? arg3 : "NULL");
+ String res = dbeGetExprValue (exp_id, arg1, arg2, arg3);
+ ipc_log (" returning = %s\n", res ? res : "");
+ writeString (res);
+ free (res);
+ free (arg3);
+ }
+ else if (!strcmp (inp, "getListValues"))
+ {
+ Obj arg1 = readObject ();
+ ipc_log (" stack = %lu\n", (long) arg1);
+ Vector<Obj> *res = dbeGetListValues (arg1);
+ ipc_log (" returns = %d objects\n", res ? res->size () : 0);
+ writeArray (res);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "getListNames"))
+ {
+ Obj arg1 = readObject ();
+ ipc_log (" stack = %lu\n", (long) arg1);
+ Vector<String> *res = dbeGetListNames (arg1);
+ ipc_log (" returns = %d objects\n", res ? res->size () : 0);
+ writeArray (res);
+ destroy (res);
+ }
+#endif
+ else if (!strcmp (inp, "getLineInfo"))
+ {
+ Obj arg1 = readObject (req);
+ ipc_log (" pc = %lu\n", (long) arg1);
+ Vector<String> *res = dbeGetLineInfo (arg1);
+ ipc_log (" returning File name: '%s'\n", res ? res->fetch (0) : "");
+ ipc_log (" returning Lineno: '%s'\n", res ? res->fetch (1) : "");
+ writeArray (res, req);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "setAlias"))
+ {
+ String arg1 = readString (req);
+ String arg2 = readString (req);
+ String arg3 = readString (req);
+ ipc_log (" name=\"%s\" uname=\"%s\" expr=\"%s\"\n",
+ arg1 ? arg1 : "", arg2 ? arg2 : "", arg3 ? arg3 : "");
+ int res = dbeSetAlias (arg1, arg2, arg3);
+ ipc_log (" returning = %d\n", res);
+ writeInt (res, req);
+ }
+ else if (!strcmp (inp, "getAlias"))
+ {
+ String arg1 = readString (req);
+ ipc_log (" name=\"%s\"\n", arg1 ? arg1 : "");
+ Vector<char*> *res = dbeGetAlias (arg1);
+ ipc_log (" returning uname: '%s'\n", res && res->fetch (0) ? res->fetch (0) : "");
+ ipc_log (" returning expr: '%s'\n", res && res->fetch (1) ? res->fetch (0) : "");
+ writeArray (res, req);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "getXYPlotData"))
+ {
+ int arg1 = readInt (req);
+ String arg2 = readString (req);
+ String arg3 = readString (req);
+ String arg4 = readString (req);
+ String arg5 = readString (req);
+ String arg6 = readString (req);
+ String arg7 = readString (req);
+ String arg8 = readString (req);
+ String arg9 = readString (req);
+ ipc_log (" data_idx = %d lfilter = \"%s\" arg = \"%s\" "
+ "func1 = \"%s\" aggr1 = \"%s\" "
+ "func2 = \"%s\" aggr2 = \"%s\" "
+ "func3 = \"%s\" aggr3 = \"%s\" \n",
+ arg1, arg2 ? arg2 : "NULL", arg3 ? arg3 : "NULL",
+ arg4 ? arg4 : "NULL", arg5 ? arg5 : "NULL", arg6 ? arg6 : "NULL",
+ arg7 ? arg7 : "NULL", arg8 ? arg8 : "NULL", arg9 ? arg9 : "NULL");
+ Vector<Vector<long long>*> *res = dbeGetXYPlotData (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9);
+
+#ifdef IPC_LOG
+ if (res)
+ {
+ long nvals = res->size ();
+ for (long i = 0; i < nvals; ++i)
+ {
+ Vector<long long> *vals = res->fetch (i);
+ long long sz = VSIZE (vals);
+ ipc_log (" returning = %lld values:", sz);
+ if (sz > 10)
+ sz = 10;
+ for (long j = 0; j < sz; j++)
+ ipc_log (" %lld", vals->fetch (j));
+ ipc_log ("\n");
+ }
+ }
+ else
+ ipc_log (" returning NULL\n");
+#endif
+ writeArray (res, req);
+ destroy (res);
+ }
+ else if (strcmp (inp, "dbe_archive") == 0)
+ {
+ Vector<long long> *ids = (Vector<long long> *) readArray (req);
+ Vector<const char*> *locations = (Vector<const char*> *) readArray (req);
+ dbe_archive (ids, locations);
+ delete ids;
+ destroy (locations);
+ writeResponseGeneric (RESPONSE_STATUS_SUCCESS, currentRequestID, currentChannelID);
+ }
+ else if (strcmp (inp, "dbeSetLocations") == 0)
+ {
+ Vector<const char*> *fnames = (Vector<const char*> *) readArray (req);
+ Vector<const char*> *locations = (Vector<const char*> *) readArray (req);
+ dbeSetLocations (fnames, locations);
+ destroy (fnames);
+ destroy (locations);
+ writeResponseGeneric (RESPONSE_STATUS_SUCCESS, currentRequestID, currentChannelID);
+ }
+ else if (strcmp (inp, "dbeResolvedWith_setpath") == 0)
+ {
+ char *path = readString (req);
+ Vector<void *> *res = dbeResolvedWith_setpath (path);
+ free (path);
+ writeArray (res, req);
+ destroy (res);
+ }
+ else if (strcmp (inp, "dbeResolvedWith_pathmap") == 0)
+ {
+ char *old_prefix = readString (req);
+ char *new_prefix = readString (req);
+ Vector<void *> *res = dbeResolvedWith_pathmap (old_prefix, new_prefix);
+ free (old_prefix);
+ free (new_prefix);
+ writeArray (res, req);
+ destroy (res);
+ }
+ else if (!strcmp (inp, "getCollectorControlValue"))
+ {
+ /* int dbevindex =*/ readInt (req);
+ char *control = readString (req);
+ ipc_log (" args = %s\n", control);
+ char *ret = dbeGetCollectorControlValue (control);
+ ipc_log (" returning %s\n", STR (ret));
+ writeString (ret, req);
+ }
+ else if (!strcmp (inp, "setCollectorControlValue"))
+ {
+ /* int dbevindex =*/ readInt (req);
+ char *control = readString (req);
+ char *value = readString (req);
+#ifdef IPC_LOG
+ ipc_log (" args = %s %s\n", control, value);
+#endif
+ char *ret = dbeSetCollectorControlValue (control, value);
+#ifdef IPC_LOG
+ if (ret)
+ ipc_log (" returning %s\n", ret);
+ else
+ ipc_log (" returning NULL\n");
+#endif
+ writeString (ret, req);
+ }
+ else if (!strcmp (inp, "unsetCollectorControlValue"))
+ {
+ /* int dbevindex =*/ readInt (req);
+ char *control = readString (req);
+ ipc_log (" args = %s\n", control);
+ char *ret = dbeUnsetCollectorControlValue (control);
+ ipc_log (" returning %s\n", STR (ret));
+ writeString (ret, req);
+ }
+ else if (!strcmp (inp, "getSignalValue"))
+ {
+ String arg1 = readString (req);
+ ipc_log (" arg1=\"%s\"\n", arg1 ? arg1 : "");
+ int res = dbeGetSignalValue (arg1);
+ ipc_log (" returning = %d\n", res);
+ writeInt (res, req);
+ }
+ else if (!strcmp (inp, "sendSignal"))
+ {
+ long long p = readLong (req);
+ int signum = readInt (req);
+ ipc_log (" args = %llu, %d\n", (long long) p, signum);
+ char * ret = dbeSendSignal ((pid_t) p, signum);
+#ifdef IPC_LOG
+ if (ret)
+ ipc_log (" returning %s\n", ret);
+ else
+ ipc_log (" returning NULL\n");
+#endif
+ writeString (ret, req);
+ }
+ else if (!strcmp (inp, "checkConnection"))
+ {
+ String arg1 = readString (req);
+ ipc_log (" arg = `%s'\n", arg1 ? arg1 : "NULL");
+ String res = dbeCheckConnection (arg1);
+ writeString (res, req);
+ ipc_log (" returns `%s'\n", res ? res : "NULL");
+ free (arg1);
+ free (res);
+ }
+ else if (!strcmp (inp, "QUIT"))
+ {
+#ifdef IPC_LOG
+ ipc_log (" %s\n", inp);
+#endif
+ exit (0);
+ }
+ else
+ {
+ ipc_log ("Unrecognized input cmd \"%s\"; Aborting.\n", inp);
+ return 1;
+ }
+ ipc_log (" processing IPC command %s complete\n", inp);
+ free (inp);
+ fflush (stdout);
+ if (req->getStatus () != CANCELLED_IMMEDIATE)
+ // wake up the main working thread, let it take care of delete
+ req->setStatus (COMPLETED);
+ delete req;
+ return 0;
+}
+
+void
+check_env_args (int argc, char *argv[])
+{
+ int indx = 2; // Skip "-IPC"
+ const char *MINUS_E = "-E";
+ const char *SP_ER_PRINT_TRACE_LEVEL = "SP_ER_PRINT_TRACE_LEVEL";
+ const char *SP_IPC_PROTOCOL = "SP_IPC_PROTOCOL";
+ const char SEPARATOR = '=';
+ char *cmd_env_var = NULL;
+ while (argc - indx >= 2)
+ {
+ char *option = argv[indx++];
+ if (!streq (option, MINUS_E))
+ continue;
+ cmd_env_var = argv[indx++];
+ char *separator = strchr (cmd_env_var, SEPARATOR);
+ if (!separator)
+ // Unrecognized option. Fatal error?
+ continue;
+ char *cmd_env_var_val = separator + 1;
+ if (!strncmp (cmd_env_var, SP_ER_PRINT_TRACE_LEVEL,
+ strlen (SP_ER_PRINT_TRACE_LEVEL)))
+ {
+ if (streq (cmd_env_var_val, "1"))
+ ipc_trace_level = TRACE_LVL_1;
+ else if (streq (cmd_env_var_val, "2"))
+ ipc_trace_level = TRACE_LVL_2;
+ else if (streq (cmd_env_var_val, "3"))
+ ipc_trace_level = TRACE_LVL_3;
+ else if (streq (cmd_env_var_val, "4"))
+ ipc_trace_level = TRACE_LVL_4;
+ continue;
+ }
+ if (!strncmp (cmd_env_var, SP_IPC_PROTOCOL, strlen (SP_IPC_PROTOCOL)))
+ {
+ if (streq (cmd_env_var_val, IPC_PROTOCOL_CURR))
+ // Only one protocol is currently supported
+ ipc_protocol = IPC_PROTOCOL_CURR;
+ else
+ ipc_protocol = IPC_PROTOCOL_UNKNOWN;
+ continue;
+ }
+ // Unrecognized option. Fatal error?
+ }
+}
+
+void
+print_ipc_protocol_confirmation ()
+{
+ if (NULL != ipc_protocol)
+ {
+ fprintf (stdout, "ER_IPC: %s\n", ipc_protocol);
+ fflush (stdout);
+ }
+}
+
+void
+ipc_mainLoop (int argc, char *argv[])
+{
+ if (getenv ("GPROFNG_DBE_DELAY"))
+ sleep (20);
+#ifdef IPC_LOG
+ ipc_flags = 1;
+#endif
+ // check_env_args(argc, argv);
+
+ char *er_print_trace_level = getenv ("SP_ER_PRINT_TRACE_LEVEL");
+ if (er_print_trace_level != NULL)
+ {
+ if (streq (er_print_trace_level, "1"))
+ ipc_trace_level = TRACE_LVL_1;
+ else if (streq (er_print_trace_level, "2"))
+ ipc_trace_level = TRACE_LVL_2;
+ else if (streq (er_print_trace_level, "3"))
+ ipc_trace_level = TRACE_LVL_3;
+ else if (streq (er_print_trace_level, "4"))
+ ipc_trace_level = TRACE_LVL_4;
+ }
+ check_env_args (argc, argv);
+ print_ipc_protocol_confirmation ();
+
+ if (ipc_flags || getenv ("SP_ER_PRINT_IPC_FLAG") || ipc_trace_level > TRACE_LVL_0)
+ {
+ ipc_flags = 1;
+ if (ipc_trace_level == TRACE_LVL_0)
+ ipc_trace_level = TRACE_LVL_1;
+ // reopen stderr as file "ipc_log"
+ ipc_log_name = getenv ("SP_ER_PRINT_IPC_LOG");
+ if (ipc_log_name == NULL)
+ ipc_log_name = "ipc_log";
+ freopen (ipc_log_name, "w", stderr);
+ if (ipc_trace_level >= TRACE_LVL_2)
+ {
+ ipc_request_log_name = "ipc_request_log";
+ ipc_response_log_name = "ipc_response_log";
+ requestLogFileP = fopen (ipc_request_log_name, "w");
+ responseLogFileP = fopen (ipc_response_log_name, "w");
+ }
+ else
+ {
+ ipc_request_log_name = "ipc_log";
+ ipc_response_log_name = "ipc_log";
+ }
+ begin_time = gethrtime ();
+ }
+ else
+ // Reopen stderr as /dev/null
+ freopen ("/dev/null", "w", stderr);
+
+ struct sigaction act;
+ memset (&act, 0, sizeof (struct sigaction));
+ term_flag = 0;
+ /* install a handler for TERM */
+ ipc_request_trace (TRACE_LVL_1, "Installing SIGTERM handler to abort on error\n");
+ sigemptyset (&act.sa_mask);
+ act.sa_handler = (SignalHandler) sigterm_handler;
+ act.sa_flags = SA_RESTART | SA_SIGINFO;
+ if (sigaction (SIGTERM, &act, &old_sigterm_handler) == -1)
+ {
+ ipc_request_trace (TRACE_LVL_1, "Unable to install SIGTERM handler\n");
+ abort ();
+ }
+ /* install a handler for INT */
+ ipc_request_trace (TRACE_LVL_1, "Installing SIGINT handler to send message to analyzer\n");
+ sigemptyset (&act.sa_mask);
+ act.sa_handler = (SignalHandler) sigint_handler;
+ act.sa_flags = SA_RESTART | SA_SIGINFO;
+ if (sigaction (SIGINT, &act, &old_sigint_handler) == -1)
+ {
+ ipc_request_trace (TRACE_LVL_1, "Unable to install SIGINT handler\n");
+ abort ();
+ }
+ ipc_log ("Installed SIGINT handler to handle Ctrl-C properly\n");
+ int er_print_catch_crash = 1; // Default: catch fatal signals
+ char *s = getenv ("GPROFNG_ALLOW_CORE_DUMP");
+ if (s && (strcasecmp (s, "no") == 0 || strcmp (s, "0") == 0))
+ er_print_catch_crash = 0;
+ if (er_print_catch_crash)
+ {
+ /* reserve memory for fatal error processing */
+ fatalErrorDynamicMemory = (char *) malloc (4 * 1024 * 1024); // reserve 4 MB
+ /* install a handler for SIGABRT */
+ ipc_request_trace (TRACE_LVL_1, "Installing SIGABRT handler to send message to analyzer\n");
+ sigemptyset (&act.sa_mask);
+ act.sa_handler = (SignalHandler) sigABRT_handler;
+ act.sa_flags = SA_RESTART | SA_SIGINFO;
+ if (sigaction (SIGABRT, &act, NULL) == -1)
+ {
+ ipc_request_trace (TRACE_LVL_1, "Unable to install SIGABRT handler\n");
+ // abort();
+ }
+ else
+ ipc_log ("Installed SIGABRT handler to handle crash properly\n");
+ /* install a handler for SIGSEGV */
+ ipc_request_trace (TRACE_LVL_1, "Installing SIGABRT handler to send message to analyzer\n");
+ sigemptyset (&act.sa_mask);
+ act.sa_handler = (SignalHandler) sigSEGV_handler;
+ act.sa_flags = SA_RESTART | SA_SIGINFO;
+ if (sigaction (SIGSEGV, &act, NULL) == -1)
+ {
+ ipc_request_trace (TRACE_LVL_1, "Unable to install SIGSEGV handler\n");
+ // abort();
+ }
+ else
+ ipc_log ("Installed SIGSEGV handler to handle crash properly\n");
+ }
+ ipc_request_trace (TRACE_LVL_1, "Entering ipc_mainLoop; run dir `%s'\n",
+ theApplication->get_run_dir ());
+ cancelRequestedChannelID = 0xFFFFFFFF;
+ ipcThreadPool = new DbeThreadPool (0); // DbeThreadPool (-1);
+ responseBufferPool = new BufferPool ();
+ ipc_log (ipc_single_threaded_mode ?
+ "RUNNING er_print -IPC IN SINGLE THREADED MODE\n" :
+ "RUNNING er_print -IPC IN MULTITHREAD MODE\n");
+
+ /* Send "Ready" signal to the GUI */
+ setProgress (100, "Restart engine");
+
+ /* start listening for requests */
+ error_flag = 0;
+ for (;;)
+ {
+ readRequestHeader ();
+ if (term_flag == 1 || error_flag == 1)
+ {
+ ipc_request_trace (TRACE_LVL_1, "SIGTERM received, exiting\n");
+ return;
+ }
+ }
+}
+
+static const char *
+table_name (int flavor)
+{
+ static char def_name[64];
+
+ switch ((FuncListDisp_type) flavor)
+ {
+ case DSP_FUNCTION:
+ return ("FUNCTION");
+ case DSP_LINE:
+ return ("LINE");
+ case DSP_PC:
+ return ("PC");
+ case DSP_SOURCE:
+ return ("SOURCE");
+ case DSP_DISASM:
+ return ("DISASM");
+ case DSP_SELF:
+ return ("SELF");
+ case DSP_CALLER:
+ return ("CALLER");
+ case DSP_CALLEE:
+ return ("CALLEE");
+ case DSP_CALLTREE:
+ return ("CALLTREE");
+ case DSP_TIMELINE:
+ return ("TIMELINE");
+ case DSP_STATIS:
+ return ("STATIS");
+ case DSP_EXP:
+ return ("EXP");
+ case DSP_LEAKLIST:
+ return ("LEAKLIST");
+ case DSP_HEAPCALLSTACK:
+ return ("HEAP");
+ case DSP_MEMOBJ:
+ return ("MEMOBJ");
+ case DSP_DATAOBJ:
+ return ("DATAOBJ");
+ case DSP_DLAYOUT:
+ return ("DLAYOUT");
+ case DSP_SRC_FILE:
+ return ("SRC_FILE");
+ case DSP_IFREQ:
+ return ("IFREQ");
+ case DSP_RACES:
+ return ("RACES");
+ case DSP_INDXOBJ:
+ return ("INDXOBJ");
+ case DSP_DUALSOURCE:
+ return ("DUALSOURCE");
+ case DSP_SOURCE_DISASM:
+ return ("SOURCE_DISASM");
+ case DSP_DEADLOCKS:
+ return ("DEADLOCKS");
+ case DSP_SOURCE_V2:
+ return ("SOURCE_V2");
+ case DSP_DISASM_V2:
+ return ("DISASM_V2");
+ case DSP_IOACTIVITY:
+ return ("IOACTIVITY");
+ case DSP_OVERVIEW:
+ return ("OVERVIEW");
+ case DSP_SAMPLE:
+ return ("SAMPLE -- UNEXPECTED");
+ default:
+ snprintf (def_name, sizeof (def_name), "table number %d", flavor);
+ return (def_name);
+ }
+}
diff --git a/gprofng/src/ipcio.cc b/gprofng/src/ipcio.cc
new file mode 100644
index 00000000000..57f2617c293
--- /dev/null
+++ b/gprofng/src/ipcio.cc
@@ -0,0 +1,1025 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <signal.h>
+#include <unistd.h>
+#include <iostream>
+#include <iomanip>
+#include <sstream>
+#include <queue>
+#include "vec.h"
+#include "util.h"
+#include "ipcio.h"
+#include "DbeThread.h"
+#include "Experiment.h"
+
+#define ipc_trace if (ipc_flags) ipc_default_log
+#define ipc_request_trace if (ipc_flags) ipc_request_log
+#define ipc_response_trace if (ipc_flags) ipc_response_log
+
+using namespace std;
+
+// IPC implementation
+static const int L_PROGRESS = 0;
+static const int L_INTEGER = 1;
+static const int L_BOOLEAN = 2;
+static const int L_LONG = 3;
+static const int L_STRING = 4;
+static const int L_DOUBLE = 5;
+static const int L_ARRAY = 6;
+static const int L_OBJECT = 7;
+static const int L_CHAR = 8;
+
+int currentRequestID;
+int currentChannelID;
+static long maxSize;
+
+extern int cancellableChannelID;
+extern int error_flag;
+extern int ipc_delay_microsec;
+extern FILE *responseLogFileP;
+
+IPCresponse *IPCresponseGlobal;
+
+BufferPool *responseBufferPool;
+
+IPCrequest::IPCrequest (int sz, int reqID, int chID)
+{
+ size = sz;
+ requestID = reqID;
+ channelID = chID;
+ status = INITIALIZED;
+ idx = 0;
+ buf = (char *) malloc (size);
+ cancelImmediate = false;
+}
+
+IPCrequest::~IPCrequest ()
+{
+ free (buf);
+}
+
+void
+IPCrequest::read (void)
+{
+ for (int i = 0; i < size; i++)
+ {
+ int c = getc (stdin);
+ ipc_request_trace (TRACE_LVL_4, " IPCrequest:getc(stdin): %02x\n", c);
+ buf[i] = c;
+ }
+}
+
+IPCrequestStatus
+IPCrequest::getStatus (void)
+{
+ return status;
+}
+
+void
+IPCrequest::setStatus (IPCrequestStatus newStatus)
+{
+ status = newStatus;
+}
+
+static int
+readByte (IPCrequest* req)
+{
+ int c;
+ int val = 0;
+ for (int i = 0; i < 2; i++)
+ {
+ if (req == NULL)
+ {
+ c = getc (stdin);
+ ipc_request_trace (TRACE_LVL_4, " readByte:getc(stdin): %02x\n", c);
+ }
+ else
+ c = req->rgetc ();
+ switch (c)
+ {
+ case '0': case '1': case '2': case '3':
+ case '4': case '5': case '6': case '7':
+ case '8': case '9':
+ val = val * 16 + c - '0';
+ break;
+ case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
+ val = val * 16 + c - 'a' + 10;
+ break;
+ case EOF:
+ val = EOF;
+ break;
+ default:
+ fprintf (stderr, "readByte: Unknown byte: %d\n", c);
+ break;
+ }
+ }
+ return val;
+}
+
+static int
+readIVal (IPCrequest *req)
+{
+ int val = readByte (req);
+ for (int i = 0; i < 3; i++)
+ val = val * 256 + readByte (req);
+ ipc_trace (" readIVal: %d\n", val);
+ return val;
+}
+
+static String
+readSVal (IPCrequest *req)
+{
+ int len = readIVal (req);
+ if (len == -1)
+ {
+ ipc_trace (" readSVal: <NULL>\n");
+ return NULL;
+ }
+ char *str = (char *) malloc (len + 1);
+ char *s = str;
+ *s = (char) 0;
+ while (len--)
+ *s++ = req->rgetc ();
+ *s = (char) 0;
+ ipc_trace (" readSVal: '%s'\n", str);
+ return str;
+}
+
+static long long
+readLVal (IPCrequest *req)
+{
+ long long val = readByte (req);
+ for (int i = 0; i < 7; i++)
+ val = val * 256 + readByte (req);
+ ipc_trace (" readLVal: %lld\n", val);
+ return val;
+}
+
+static bool
+readBVal (IPCrequest *req)
+{
+ int val = readByte (req);
+ ipc_trace (" readBVal: %s\n", val == 0 ? "true" : "false");
+ return val != 0;
+}
+
+static char
+readCVal (IPCrequest *req)
+{
+ int val = readByte (req);
+ ipc_trace (" readCVal: %d\n", val);
+ return (char) val;
+}
+
+static double
+readDVal (IPCrequest *req)
+{
+ String s = readSVal (req);
+ double d = atof (s);
+ free (s);
+ return d;
+}
+
+static Object
+readAVal (IPCrequest *req)
+{
+ bool twoD = false;
+ int type = readByte (req);
+ if (type == L_ARRAY)
+ {
+ twoD = true;
+ type = readByte (req);
+ }
+ ipc_trace ("readAVal: twoD=%s type=%d\n", twoD ? "true" : "false", type);
+
+ int len = readIVal (req);
+ if (len == -1)
+ return NULL;
+ switch (type)
+ {
+ case L_INTEGER:
+ if (twoD)
+ {
+ Vector<Vector<int>*> *array = new Vector<Vector<int>*>(len);
+ for (int i = 0; i < len; i++)
+ array->store (i, (Vector<int>*)readAVal (req));
+ return array;
+ }
+ else
+ {
+ Vector<int> *array = new Vector<int>(len);
+ for (int i = 0; i < len; i++)
+ array->store (i, readIVal (req));
+ return array;
+ }
+ //break;
+ case L_LONG:
+ if (twoD)
+ {
+ Vector<Vector<long long>*> *array = new Vector<Vector<long long>*>(len);
+ for (int i = 0; i < len; i++)
+ array->store (i, (Vector<long long>*)readAVal (req));
+ return array;
+ }
+ else
+ {
+ Vector<long long> *array = new Vector<long long>(len);
+ for (int i = 0; i < len; i++)
+ array->store (i, readLVal (req));
+ return array;
+ }
+ //break;
+ case L_DOUBLE:
+ if (twoD)
+ {
+ Vector<Vector<double>*> *array = new Vector<Vector<double>*>(len);
+ for (int i = 0; i < len; i++)
+ array->store (i, (Vector<double>*)readAVal (req));
+ return array;
+ }
+ else
+ {
+ Vector<double> *array = new Vector<double>(len);
+ for (int i = 0; i < len; i++)
+ array->store (i, readDVal (req));
+ return array;
+ }
+ //break;
+ case L_BOOLEAN:
+ if (twoD)
+ {
+ Vector < Vector<bool>*> *array = new Vector < Vector<bool>*>(len);
+ for (int i = 0; i < len; i++)
+ array->store (i, (Vector<bool>*)readAVal (req));
+ return array;
+ }
+ else
+ {
+ Vector<bool> *array = new Vector<bool>(len);
+ for (int i = 0; i < len; i++)
+ array->store (i, readBVal (req));
+ return array;
+ }
+ //break;
+ case L_CHAR:
+ if (twoD)
+ {
+ Vector<Vector<char>*> *array = new Vector<Vector<char>*>(len);
+ for (int i = 0; i < len; i++)
+ array->store (i, (Vector<char>*)readAVal (req));
+ return array;
+ }
+ else
+ {
+ Vector<char> *array = new Vector<char>(len);
+ for (int i = 0; i < len; i++)
+ array->store (i, readCVal (req));
+ return array;
+ }
+ //break;
+ case L_STRING:
+ if (twoD)
+ {
+ Vector<Vector<String>*> *array = new Vector<Vector<String>*>(len);
+ for (int i = 0; i < len; i++)
+ array->store (i, (Vector<String>*)readAVal (req));
+ return array;
+ }
+ else
+ {
+ Vector<String> *array = new Vector<String>(len);
+ for (int i = 0; i < len; i++)
+ array->store (i, readSVal (req));
+ return array;
+ }
+ //break;
+ case L_OBJECT:
+ if (twoD)
+ {
+ Vector<Vector<Object>*> *array = new Vector<Vector<Object>*>(len);
+ for (int i = 0; i < len; i++)
+ array->store (i, (Vector<Object>*)readAVal (req));
+ return array;
+ }
+ else
+ {
+ Vector<Object> *array = new Vector<Object>(len);
+ for (int i = 0; i < len; i++)
+ array->store (i, readAVal (req));
+ return array;
+ }
+ //break;
+ default:
+ fprintf (stderr, "readAVal: Unknown code: %d\n", type);
+ break;
+ }
+ return NULL;
+}
+
+static int iVal;
+static bool bVal;
+static long long lVal;
+static String sVal;
+static double dVal;
+static Object aVal;
+
+static void
+readResult (int type, IPCrequest *req)
+{
+ int tVal = readByte (req);
+ switch (tVal)
+ {
+ case L_INTEGER:
+ iVal = readIVal (req);
+ break;
+ case L_LONG:
+ lVal = readLVal (req);
+ break;
+ case L_BOOLEAN:
+ bVal = readBVal (req);
+ break;
+ case L_DOUBLE:
+ dVal = readDVal (req);
+ break;
+ case L_STRING:
+ sVal = readSVal (req);
+ break;
+ case L_ARRAY:
+ aVal = readAVal (req);
+ break;
+ case EOF:
+ fprintf (stderr, "EOF read in readResult\n");
+ sVal = NULL;
+ return;
+ default:
+ fprintf (stderr, "Unknown code: %d\n", tVal);
+ abort ();
+ }
+ if (type != tVal)
+ {
+ fprintf (stderr, "Internal error: readResult: parameter mismatch: type=%d should be %d\n", tVal, type);
+ abort ();
+ }
+}
+
+int
+readInt (IPCrequest *req)
+{
+ readResult (L_INTEGER, req);
+ return iVal;
+}
+
+String
+readString (IPCrequest *req)
+{
+ readResult (L_STRING, req);
+ return sVal;
+}
+
+long long
+readLong (IPCrequest *req)
+{
+ readResult (L_LONG, req);
+ return lVal;
+}
+
+double
+readDouble (IPCrequest *req)
+{
+ readResult (L_DOUBLE, req);
+ return dVal;
+}
+
+bool
+readBoolean (IPCrequest *req)
+{
+ readResult (L_BOOLEAN, req);
+ return bVal;
+}
+
+DbeObj
+readObject (IPCrequest *req)
+{
+ readResult (L_LONG, req);
+ return (DbeObj) lVal;
+}
+
+Object
+readArray (IPCrequest *req)
+{
+ readResult (L_ARRAY, req);
+ return aVal;
+}
+
+// Write
+IPCresponse::IPCresponse (int sz)
+{
+ requestID = -1;
+ channelID = -1;
+ responseType = -1;
+ responseStatus = RESPONSE_STATUS_SUCCESS;
+ sb = new StringBuilder (sz);
+ next = NULL;
+}
+
+IPCresponse::~IPCresponse ()
+{
+ delete sb;
+}
+
+void
+IPCresponse::reset ()
+{
+ requestID = -1;
+ channelID = -1;
+ responseType = -1;
+ responseStatus = RESPONSE_STATUS_SUCCESS;
+ sb->setLength (0);
+}
+
+void
+IPCresponse::sendByte (int b)
+{
+ ipc_trace ("sendByte: %02x %d\n", b, b);
+ sb->appendf ("%02x", b);
+}
+
+void
+IPCresponse::sendIVal (int i)
+{
+ ipc_trace ("sendIVal: %08x %d\n", i, i);
+ sb->appendf ("%08x", i);
+}
+
+void
+IPCresponse::sendLVal (long long l)
+{
+ ipc_trace ("sendLVal: %016llx %lld\n", l, l);
+ sb->appendf ("%016llx", l);
+}
+
+void
+IPCresponse::sendSVal (const char *s)
+{
+ if (s == NULL)
+ {
+ sendIVal (-1);
+ return;
+ }
+ sendIVal ((int) strlen (s));
+ ipc_trace ("sendSVal: %s\n", s);
+ sb->appendf ("%s", s);
+}
+
+void
+IPCresponse::sendBVal (bool b)
+{
+ sendByte (b ? 1 : 0);
+}
+
+void
+IPCresponse::sendCVal (char c)
+{
+ sendByte (c);
+}
+
+void
+IPCresponse::sendDVal (double d)
+{
+ char str[32];
+ snprintf (str, sizeof (str), "%.12f", d);
+ sendSVal (str);
+}
+
+void
+IPCresponse::sendAVal (void *ptr)
+{
+ if (ptr == NULL)
+ {
+ sendByte (L_INTEGER);
+ sendIVal (-1);
+ return;
+ }
+
+ VecType type = ((Vector<void*>*)ptr)->type ();
+ switch (type)
+ {
+ case VEC_INTEGER:
+ {
+ sendByte (L_INTEGER);
+ Vector<int> *array = (Vector<int>*)ptr;
+ sendIVal (array->size ());
+ for (int i = 0; i < array->size (); i++)
+ sendIVal (array->fetch (i));
+ break;
+ }
+ case VEC_BOOL:
+ {
+ sendByte (L_BOOLEAN);
+ Vector<bool> *array = (Vector<bool>*)ptr;
+ sendIVal (array->size ());
+ for (int i = 0; i < array->size (); i++)
+ sendBVal (array->fetch (i));
+ break;
+ }
+ case VEC_CHAR:
+ {
+ sendByte (L_CHAR);
+ Vector<char> *array = (Vector<char>*)ptr;
+ sendIVal (array->size ());
+ for (int i = 0; i < array->size (); i++)
+ sendCVal (array->fetch (i));
+ break;
+ }
+ case VEC_LLONG:
+ {
+ sendByte (L_LONG);
+ Vector<long long> *array = (Vector<long long>*)ptr;
+ sendIVal (array->size ());
+ for (int i = 0; i < array->size (); i++)
+ sendLVal (array->fetch (i));
+ break;
+ }
+ case VEC_DOUBLE:
+ {
+ sendByte (L_DOUBLE);
+ Vector<double> *array = (Vector<double>*)ptr;
+ sendIVal (array->size ());
+ for (int i = 0; i < array->size (); i++)
+ sendDVal (array->fetch (i));
+ break;
+ }
+ case VEC_STRING:
+ {
+ sendByte (L_STRING);
+ Vector<String> *array = (Vector<String>*)ptr;
+ sendIVal (array->size ());
+ for (int i = 0; i < array->size (); i++)
+ sendSVal (array->fetch (i));
+ break;
+ }
+ case VEC_STRINGARR:
+ {
+ sendByte (L_ARRAY);
+ sendByte (L_STRING);
+ Vector<void*> *array = (Vector<void*>*)ptr;
+ sendIVal (array->size ());
+ for (int i = 0; i < array->size (); i++)
+ sendAVal (array->fetch (i));
+ break;
+ }
+ case VEC_INTARR:
+ {
+ sendByte (L_ARRAY);
+ sendByte (L_INTEGER);
+ Vector<void*> *array = (Vector<void*>*)ptr;
+ sendIVal (array->size ());
+ for (int i = 0; i < array->size (); i++)
+ sendAVal (array->fetch (i));
+ break;
+ }
+ case VEC_LLONGARR:
+ {
+ sendByte (L_ARRAY);
+ sendByte (L_LONG);
+ Vector<void*> *array = (Vector<void*>*)ptr;
+ sendIVal (array->size ());
+ for (int i = 0; i < array->size (); i++)
+ sendAVal (array->fetch (i));
+ break;
+ }
+ case VEC_VOIDARR:
+ {
+ sendByte (L_OBJECT);
+ Vector<void*> *array = (Vector<void*>*)ptr;
+ sendIVal (array->size ());
+ for (int i = 0; i < array->size (); i++)
+ sendAVal (array->fetch (i));
+ break;
+ }
+ default:
+ fprintf (stderr, "sendAVal: Unknown type: %d\n", type);
+ abort ();
+ }
+}
+
+static void
+writeResponseHeader (int requestID, int responseType, int responseStatus, int nBytes)
+{
+ if (responseType == RESPONSE_TYPE_HANDSHAKE)
+ nBytes = IPC_VERSION_NUMBER;
+ int use_write = 2;
+ ipc_response_trace (TRACE_LVL_1, "ResponseHeaderBegin----- %x ---- %x ----- %x -----%x -------\n", requestID, responseType, responseStatus, nBytes);
+ if (use_write)
+ {
+ char buf[23];
+ if (use_write == 1)
+ {
+ int i = 0;
+ snprintf (buf + i, 3, "%2x", HEADER_MARKER);
+ i += 2;
+ snprintf (buf + i, 9, "%8x", requestID);
+ i += 8;
+ snprintf (buf + i, 3, "%2x", responseType);
+ i += 2;
+ snprintf (buf + i, 3, "%2x", responseStatus);
+ i += 2;
+ snprintf (buf + i, 9, "%8x", nBytes);
+ }
+ else
+ snprintf (buf, 23, "%02x%08x%02x%02x%08x", HEADER_MARKER, requestID,
+ responseType, responseStatus, nBytes);
+ buf[22] = 0;
+ write (1, buf, 22);
+ }
+ else
+ {
+ cout << setfill ('0') << setw (2) << hex << HEADER_MARKER;
+ cout << setfill ('0') << setw (8) << hex << requestID;
+ cout << setfill ('0') << setw (2) << hex << responseType;
+ cout << setfill ('0') << setw (2) << hex << responseStatus;
+ cout << setfill ('0') << setw (8) << hex << nBytes;
+ cout.flush ();
+ }
+ ipc_response_trace (TRACE_LVL_1, "----------------------------ResponseHeaderEnd\n");
+ if (nBytes > maxSize)
+ {
+ maxSize = nBytes;
+ ipc_trace ("New maxsize %ld\n", maxSize);
+ }
+}
+
+bool
+cancelNeeded (int chID)
+{
+ if (chID == cancellableChannelID && chID == cancelRequestedChannelID)
+ return true;
+ else
+ return false;
+}
+
+static void
+writeResponseWithHeader (int requestID, int channelID, int responseType,
+ int responseStatus, IPCresponse* os)
+{
+ if (cancelNeeded (channelID))
+ {
+ responseStatus = RESPONSE_STATUS_CANCELLED;
+ ipc_trace ("CANCELLING %d %d\n", requestID, channelID);
+ // This is for gracefully cancelling regular ops like openExperiment - getFiles should never reach here
+ }
+ os->setRequestID (requestID);
+ os->setChannelID (channelID);
+ os->setResponseType (responseType);
+ os->setResponseStatus (responseStatus);
+ os->print ();
+ os->reset ();
+ responseBufferPool->recycle (os);
+}
+
+void
+writeAckFast (int requestID)
+{
+ writeResponseHeader (requestID, RESPONSE_TYPE_ACK, RESPONSE_STATUS_SUCCESS, 0);
+}
+
+void
+writeAck (int requestID, int channelID)
+{
+#if DEBUG
+ char *s = getenv (NTXT ("SP_NO_IPC_ACK"));
+#else /* ^DEBUG */
+ char *s = NULL;
+#endif /* ^DEBUG */
+ if (s)
+ {
+ int i = requestID;
+ int j = channelID;
+ ipc_request_trace (TRACE_LVL_4, "ACK skipped: requestID=%d channelID=%d\n", i, j);
+ }
+ else
+ {
+ IPCresponse *OUTS = responseBufferPool->getNewResponse (BUFFER_SIZE_SMALL);
+ writeResponseWithHeader (requestID, channelID, RESPONSE_TYPE_ACK,
+ RESPONSE_STATUS_SUCCESS, OUTS);
+ }
+}
+
+void
+writeHandshake (int requestID, int channelID)
+{
+ IPCresponse *OUTS = responseBufferPool->getNewResponse (BUFFER_SIZE_SMALL);
+ writeResponseWithHeader (requestID, channelID, RESPONSE_TYPE_HANDSHAKE, RESPONSE_STATUS_SUCCESS, OUTS);
+ // writeResponseHeader(requestID, RESPONSE_TYPE_HANDSHAKE, RESPONSE_STATUS_SUCCESS, IPC_VERSION_NUMBER);
+}
+
+void
+writeResponseGeneric (int responseStatus, int requestID, int channelID)
+{
+ IPCresponse *OUTS = responseBufferPool->getNewResponse (BUFFER_SIZE_SMALL);
+ writeResponseWithHeader (requestID, channelID, RESPONSE_TYPE_COMPLETE, responseStatus, OUTS);
+}
+
+BufferPool::BufferPool ()
+{
+ pthread_mutex_init (&p_mutex, NULL);
+ smallBuf = NULL;
+ largeBuf = NULL;
+}
+
+BufferPool::~BufferPool ()
+{
+ for (IPCresponse *p = smallBuf; p;)
+ {
+ IPCresponse *tmp = p;
+ p = tmp->next;
+ delete tmp;
+ }
+ for (IPCresponse *p = largeBuf; p;)
+ {
+ IPCresponse *tmp = p;
+ p = tmp->next;
+ delete tmp;
+ }
+}
+
+IPCresponse*
+BufferPool::getNewResponse (int size)
+{
+ pthread_mutex_lock (&p_mutex);
+ if (ipc_single_threaded_mode && size < BUFFER_SIZE_LARGE)
+ size = BUFFER_SIZE_LARGE;
+ IPCresponse *newResponse = NULL;
+ if (size >= BUFFER_SIZE_LARGE)
+ {
+ if (largeBuf)
+ {
+ newResponse = largeBuf;
+ largeBuf = largeBuf->next;
+ }
+ }
+ else if (smallBuf)
+ {
+ newResponse = smallBuf;
+ smallBuf = smallBuf->next;
+ }
+ if (newResponse)
+ newResponse->reset ();
+ else
+ {
+ newResponse = new IPCresponse (size);
+ ipc_trace ("GETNEWBUFFER %d\n", size);
+ }
+ pthread_mutex_unlock (&p_mutex);
+ return newResponse;
+}
+
+void
+BufferPool::recycle (IPCresponse *respB)
+{
+ pthread_mutex_lock (&p_mutex);
+ if (respB->getCurBufSize () >= BUFFER_SIZE_LARGE)
+ {
+ respB->next = largeBuf;
+ largeBuf = respB;
+ }
+ else
+ {
+ respB->next = smallBuf;
+ smallBuf = respB;
+ }
+ pthread_mutex_unlock (&p_mutex);
+}
+
+void
+writeArray (void *ptr, IPCrequest* req)
+{
+ if (req->getStatus () == CANCELLED_IMMEDIATE)
+ return;
+ IPCresponse *OUTS = responseBufferPool->getNewResponse (BUFFER_SIZE_LARGE);
+ OUTS->sendByte (L_ARRAY);
+ OUTS->sendAVal (ptr);
+ writeResponseWithHeader (req->getRequestID (), req->getChannelID (),
+ RESPONSE_TYPE_COMPLETE, RESPONSE_STATUS_SUCCESS, OUTS);
+}
+
+void
+writeString (const char *s, IPCrequest* req)
+{
+ if (req->getStatus () == CANCELLED_IMMEDIATE)
+ return;
+ IPCresponse *OUTS = responseBufferPool->getNewResponse (BUFFER_SIZE_LARGE);
+ OUTS->sendByte (L_STRING);
+ OUTS->sendSVal (s);
+ writeResponseWithHeader (req->getRequestID (), req->getChannelID (),
+ RESPONSE_TYPE_COMPLETE, RESPONSE_STATUS_SUCCESS, OUTS);
+}
+
+void
+writeObject (DbeObj obj, IPCrequest* req)
+{
+ writeLong ((long long) obj, req);
+}
+
+void
+writeBoolean (bool b, IPCrequest* req)
+{
+ if (req->getStatus () == CANCELLED_IMMEDIATE)
+ return;
+ IPCresponse *OUTS = responseBufferPool->getNewResponse (BUFFER_SIZE_MEDIUM);
+ OUTS->sendByte (L_BOOLEAN);
+ OUTS->sendBVal (b);
+ writeResponseWithHeader (req->getRequestID (), req->getChannelID (),
+ RESPONSE_TYPE_COMPLETE, RESPONSE_STATUS_SUCCESS, OUTS);
+}
+
+void
+writeInt (int i, IPCrequest* req)
+{
+ if (req->getStatus () == CANCELLED_IMMEDIATE)
+ return;
+ IPCresponse *OUTS = responseBufferPool->getNewResponse (BUFFER_SIZE_MEDIUM);
+ OUTS->sendByte (L_INTEGER);
+ OUTS->sendIVal (i);
+ writeResponseWithHeader (req->getRequestID (), req->getChannelID (), RESPONSE_TYPE_COMPLETE, RESPONSE_STATUS_SUCCESS, OUTS);
+}
+
+void
+writeChar (char c, IPCrequest* req)
+{
+ if (req->getStatus () == CANCELLED_IMMEDIATE)
+ return;
+ IPCresponse *OUTS = responseBufferPool->getNewResponse (BUFFER_SIZE_MEDIUM);
+ OUTS->sendByte (L_CHAR);
+ OUTS->sendCVal (c);
+ writeResponseWithHeader (req->getRequestID (), req->getChannelID (), RESPONSE_TYPE_COMPLETE, RESPONSE_STATUS_SUCCESS, OUTS);
+}
+
+void
+writeLong (long long l, IPCrequest* req)
+{
+ if (req->getStatus () == CANCELLED_IMMEDIATE)
+ return;
+ IPCresponse *OUTS = responseBufferPool->getNewResponse (BUFFER_SIZE_MEDIUM);
+ OUTS->sendByte (L_LONG);
+ OUTS->sendLVal (l);
+ writeResponseWithHeader (req->getRequestID (), req->getChannelID (), RESPONSE_TYPE_COMPLETE, RESPONSE_STATUS_SUCCESS, OUTS);
+}
+
+void
+writeDouble (double d, IPCrequest* req)
+{
+ if (req->getStatus () == CANCELLED_IMMEDIATE) return;
+ IPCresponse *OUTS = responseBufferPool->getNewResponse (BUFFER_SIZE_MEDIUM);
+ OUTS->sendByte (L_DOUBLE);
+ OUTS->sendDVal (d);
+ writeResponseWithHeader (req->getRequestID (), req->getChannelID (), RESPONSE_TYPE_COMPLETE, RESPONSE_STATUS_SUCCESS, OUTS);
+}
+
+int
+setProgress (int percentage, const char *proc_str)
+{
+ if (cancelNeeded (currentChannelID))
+ {
+ // ExperimentLoadCancelException *e1 = new ExperimentLoadCancelException();
+ // throw (e1);
+ return 1;
+ }
+ if (NULL == proc_str)
+ return 1;
+ int size = strlen (proc_str) + 100; // 100 bytes for additional data
+ int bs = BUFFER_SIZE_MEDIUM;
+ if (size > BUFFER_SIZE_MEDIUM)
+ {
+ if (size > BUFFER_SIZE_LARGE) return 1; // This should never happen
+ bs = BUFFER_SIZE_LARGE;
+ }
+ IPCresponse *OUTS = responseBufferPool->getNewResponse (bs);
+ OUTS->sendByte (L_PROGRESS);
+ OUTS->sendIVal (percentage);
+ OUTS->sendSVal (proc_str);
+ writeResponseWithHeader (currentRequestID, currentChannelID, RESPONSE_TYPE_PROGRESS, RESPONSE_STATUS_SUCCESS, OUTS);
+ return 0;
+}
+
+void
+IPCresponse::print (void)
+{
+ if (ipc_delay_microsec)
+ usleep (ipc_delay_microsec);
+ int stringSize = sb->length ();
+ writeResponseHeader (requestID, responseType, responseStatus, stringSize);
+ if (stringSize > 0)
+ {
+ char *s = sb->toString ();
+ hrtime_t start_time = gethrtime ();
+ int use_write = 1;
+ if (use_write)
+ write (1, s, stringSize); // write(1, sb->toString(), stringSize);
+ else
+ {
+ cout << s;
+ cout.flush ();
+ }
+ hrtime_t end_time = gethrtime ();
+ unsigned long long time_stamp = end_time - start_time;
+ ipc_response_log (TRACE_LVL_3, "ReqID %x flush time %llu nanosec \n", requestID, time_stamp);
+ free (s);
+ }
+}
+
+void
+setCancelRequestedCh (int chID)
+{
+ cancelRequestedChannelID = chID;
+}
+
+void
+readRequestHeader ()
+{
+ int marker = readByte (NULL);
+ if (marker != HEADER_MARKER)
+ {
+ fprintf (stderr, "Internal error: received request (%d) without header marker\n", marker);
+ error_flag = 1;
+ return;
+ }
+ else
+ ipc_request_trace (TRACE_LVL_1, "RequestHeaderBegin------------------------\n");
+ int requestID = readIVal (NULL);
+ int requestType = readByte (NULL);
+ int channelID = readIVal (NULL);
+ int nBytes = readIVal (NULL);
+ if (requestType == REQUEST_TYPE_HANDSHAKE)
+ {
+ // write the ack directly to the wire, not through the response queue
+ // writeAckFast(requestID);
+ writeAck (requestID, channelID);
+ maxSize = 0;
+ writeHandshake (requestID, channelID);
+ ipc_request_trace (TRACE_LVL_1, "RQ: HANDSHAKE --- %x ----- %x ---- %x --- %x -RequestHeaderEnd\n", requestID, requestType, channelID, nBytes);
+ }
+ else if (requestType == REQUEST_TYPE_CANCEL)
+ {
+ writeAck (requestID, channelID);
+ ipc_request_trace (TRACE_LVL_1, "RQ: CANCEL --- RQ: %x ----- %x --- CH: %x --- %x -RequestHeaderEnd\n", requestID, requestType, channelID, nBytes);
+ if (channelID == cancellableChannelID)
+ {
+ // we have worked on at least one request belonging to this channel
+ writeResponseGeneric (RESPONSE_STATUS_SUCCESS, requestID, channelID);
+ setCancelRequestedCh (channelID);
+ ipc_trace ("CANCELLABLE %x %x\n", channelID, currentChannelID);
+ if (channelID == currentChannelID)
+ // request for this channel is currently in progress
+ ipc_request_trace (TRACE_LVL_1, "IN PROGRESS REQUEST NEEDS CANCELLATION");
+ // ssp_post_cond(waitingToFinish);
+ }
+ else
+ {
+ // FIXME:
+ // it is possible that a request for this channel is on the requestQ
+ // or has been submitted to the work group queue but is waiting for a thread to pick it up
+ writeResponseGeneric (RESPONSE_STATUS_FAILURE, requestID, channelID);
+ setCancelRequestedCh (channelID);
+ ipc_request_trace (TRACE_LVL_1, "RETURNING FAILURE TO CANCEL REQUEST channel %d\n", channelID);
+ }
+ }
+ else
+ {
+ writeAck (requestID, channelID);
+ ipc_request_trace (TRACE_LVL_1, "RQ: --- %x ----- %x ---- %x --- %x -RequestHeaderEnd\n", requestID, requestType, channelID, nBytes);
+ IPCrequest *nreq = new IPCrequest (nBytes, requestID, channelID);
+ nreq->read ();
+ ipc_request_trace (TRACE_LVL_1, "RQ: --- %x Read from stream \n", requestID);
+ if (cancelNeeded (channelID))
+ {
+ ipc_request_trace (TRACE_LVL_1, "CANCELLABLE REQ RECVD %x %x\n", channelID, requestID);
+ writeResponseGeneric (RESPONSE_STATUS_CANCELLED, requestID, channelID);
+ delete nreq;
+ return;
+ }
+ DbeQueue *q = new DbeQueue (ipc_doWork, nreq);
+ ipcThreadPool->put_queue (q);
+ }
+}
diff --git a/gprofng/src/ipcio.h b/gprofng/src/ipcio.h
new file mode 100644
index 00000000000..94a635e4a06
--- /dev/null
+++ b/gprofng/src/ipcio.h
@@ -0,0 +1,176 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+/* Defines the external interface between er_ipc and the routines */
+
+#ifndef _IPCIO_H
+#define _IPCIO_H
+#include <pthread.h>
+#include "gp-defs.h"
+#include "StringBuilder.h"
+
+class DbeThreadPool;
+typedef long long DbeObj;
+typedef void *Object;
+typedef char *String;
+
+#define BUFFER_SIZE_SMALL 512
+#define BUFFER_SIZE_MEDIUM 512
+#define BUFFER_SIZE_LARGE 1024*1024
+
+#define REQUEST_HAS_NO_BODY 0xFFFFFFFF
+#define RESPONSE_STATUS_DEFAULT 0
+#define RESPONSE_STATUS_SUCCESS 1
+#define RESPONSE_STATUS_FAILURE 2
+#define RESPONSE_STATUS_CANCELLED 3
+
+#define RESPONSE_TYPE_ACK 0
+#define RESPONSE_TYPE_PROGRESS 1
+#define RESPONSE_TYPE_COMPLETE 2
+#define RESPONSE_TYPE_HANDSHAKE 3
+#define HEADER_MARKER 0xff
+
+#define REQUEST_TYPE_DEFAULT 0
+#define REQUEST_TYPE_CANCEL 1
+#define REQUEST_TYPE_HANDSHAKE 2
+
+#define IPC_PROTOCOL_STR "IPC_PROTOCOL_38"
+#define IPC_VERSION_NUMBER 38
+
+enum IPCrequestStatus
+{
+ INITIALIZED = 0,
+ IN_PROGRESS,
+ COMPLETED,
+ CANCELLED_DEFAULT,
+ CANCELLED_IMMEDIATE
+};
+
+enum IPCTraceLevel
+{
+ TRACE_LVL_0 = 0,
+ TRACE_LVL_1,
+ TRACE_LVL_2,
+ TRACE_LVL_3,
+ TRACE_LVL_4
+};
+
+class IPCrequest
+{
+ char *buf;
+ int size;
+ int idx;
+ int requestID;
+ int channelID;
+ IPCrequestStatus status;
+ bool cancelImmediate;
+public:
+ IPCrequest (int, int, int);
+ ~IPCrequest ();
+ IPCrequestStatus getStatus ();
+ void setStatus (IPCrequestStatus);
+ void read ();
+
+ int getRequestID () { return requestID; }
+ int getChannelID () { return channelID; }
+ bool isCancelImmediate () { return cancelImmediate; }
+ void setCancelImmediate () { cancelImmediate = true; }
+ char rgetc () { return buf[idx++]; }
+};
+
+class IPCresponse
+{
+public:
+ IPCresponse (int sz);
+ ~IPCresponse ();
+
+ int getRequestID () { return requestID; }
+ int getChannelID () { return channelID; }
+ void setRequestID (int r) { requestID = r; }
+ void setChannelID (int c) { channelID = c; }
+ void setResponseType (int r) { responseType = r; }
+ void setResponseStatus (int s) { responseStatus = s; }
+ int getCurBufSize () { return sb->capacity (); }
+ void sendByte (int);
+ void sendIVal (int);
+ void sendLVal (long long);
+ void sendDVal (double);
+ void sendSVal (const char *);
+ void sendBVal (bool);
+ void sendCVal (char);
+ void sendAVal (void*);
+ void print (void);
+ void reset ();
+ IPCresponse *next;
+
+private:
+ int requestID;
+ int channelID;
+ int responseType;
+ int responseStatus;
+ StringBuilder *sb;
+};
+
+class BufferPool
+{
+public:
+ BufferPool ();
+ ~BufferPool ();
+ IPCresponse* getNewResponse (int);
+ void recycle (IPCresponse *);
+private:
+ pthread_mutex_t p_mutex;
+ IPCresponse *smallBuf;
+ IPCresponse *largeBuf;
+};
+
+// Read from the wire
+int readInt (IPCrequest*);
+bool readBoolean (IPCrequest*);
+long long readLong (IPCrequest*);
+DbeObj readObject (IPCrequest*);
+Object readArray (IPCrequest*);
+String readString (IPCrequest*);
+void readRequestHeader ();
+
+// write to the wire
+void writeString (const char *, IPCrequest*);
+void writeBoolean (bool, IPCrequest*);
+void writeInt (int, IPCrequest*);
+void writeChar (char, IPCrequest*);
+void writeLong (long long, IPCrequest*);
+void writeDouble (double, IPCrequest*);
+void writeArray (void *, IPCrequest*);
+void writeObject (DbeObj, IPCrequest*);
+void writeResponseGeneric (int, int, int);
+int setProgress (int, const char *); // Update the progress bar
+int ipc_doWork (void *); // The argument is an IPCrequest
+
+extern int ipc_flags;
+extern int ipc_single_threaded_mode;
+extern DbeThreadPool *responseThreadPool;
+extern DbeThreadPool *ipcThreadPool;
+extern int cancelRequestedChannelID;
+
+void ipc_default_log (const char *fmt, ...) __attribute__ ((format (printf, 1, 2)));
+void ipc_response_log (IPCTraceLevel, const char *fmt, ...) __attribute__ ((format (printf, 2, 3)));
+void ipc_request_log (IPCTraceLevel, const char *fmt, ...) __attribute__ ((format (printf, 2, 3)));
+
+#endif
diff --git a/gprofng/src/machinemodels/generic.ermm b/gprofng/src/machinemodels/generic.ermm
new file mode 100644
index 00000000000..19fcc8e4df9
--- /dev/null
+++ b/gprofng/src/machinemodels/generic.ermm
@@ -0,0 +1,32 @@
+# generic machinemodel file
+#
+# Copyright (C) 2021 Free Software Foundation, Inc.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 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; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+mobj_define Memory_page_size "(EA_PAGESIZE ? EA_PAGESIZE : -1)"
+mobj_define Memory_page "(((VADDR>255) && EA_PAGESIZE) ? VADDR & (~(EA_PAGESIZE-1)) : -1)"
+mobj_define Memory_64B_cacheline "((VADDR>255)?(VADDR>>6<<6):-1)"
+mobj_define Memory_address "((VADDR>255)?(VADDR):-1)"
+
+mobj_define Memory_in_home_lgrp (EA_LGRP==LWP_LGRP_HOME)
+mobj_define Memory_lgrp (EA_LGRP)
+
+mobj_define Physical_page "((PADDR && EA_PAGESIZE) ? PADDR & (~(EA_PAGESIZE-1)) : -1)"
+mobj_define Physical_64B_cacheline "(PADDR?(PADDR>>6<<6):-1)"
+mobj_define Physical_address "(PADDR?(PADDR):-1)"
+
+#mobj_define Vpage_4K "(((ea_pagesize==1<<12 || !ea_pagesize) && VADDR>255)?(VADDR>>12<<12):-1)"
+#mobj_define Ppage_4K "((ea_pagesize==1<<12 && PADDR)?(PADDR>>12<<12):-1)"
diff --git a/gprofng/src/machinemodels/m5.ermm b/gprofng/src/machinemodels/m5.ermm
new file mode 100644
index 00000000000..83f125dcdbc
--- /dev/null
+++ b/gprofng/src/machinemodels/m5.ermm
@@ -0,0 +1,65 @@
+# Machinemodel file for M5 systems
+#
+# Copyright (C) 2021 Free Software Foundation, Inc.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 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; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+indxobj_define M5_Chip ((CPUID>>3)/6)
+indxobj_define M5_Core (CPUID>>3)
+
+mobj_define Memory_page_size "(EA_PAGESIZE ? EA_PAGESIZE : -1)"
+mobj_define Memory_page "(((VADDR>255) && EA_PAGESIZE) ? VADDR & (~(EA_PAGESIZE-1)) : -1)"
+mobj_define Memory_64B_cacheline "((VADDR>255)?(VADDR>>6<<6):-1)"
+mobj_define Memory_32B_cacheline "((VADDR>255)?(VADDR>>5<<5):-1)"
+mobj_define Memory_address "((VADDR>255)?(VADDR):-1)"
+
+mobj_define Memory_in_home_lgrp (EA_LGRP==LWP_LGRP_HOME)
+mobj_define Memory_lgrp (EA_LGRP)
+
+mobj_define Physical_page "((PADDR && EA_PAGESIZE) ? PADDR & (~(EA_PAGESIZE-1)) : -1)"
+mobj_define Physical_64B_cacheline "(PADDR?(PADDR>>6<<6):-1)"
+mobj_define Physical_32B_cacheline "(PADDR?(PADDR>>5<<5):-1)"
+mobj_define Physical_address "(PADDR?(PADDR):-1)"
+
+
+#mobj_define Vpage_8K "((ea_pagesize==1<<13 && VADDR>255)?(VADDR>>13<<13):-1)"
+#mobj_define Vpage_64K "((ea_pagesize==1<<16 && VADDR>255)?(VADDR>>16<<16):-1)"
+#mobj_define Vpage_4M "((ea_pagesize==1<<22 && VADDR>255)?(VADDR>>22<<22):-1)"
+#mobj_define Vpage_256M "((ea_pagesize==1<<28 && VADDR>255)?(VADDR>>28<<28):-1)"
+#mobj_define Vpage_2G "((ea_pagesize==1<<31 && VADDR>255)?(VADDR>>31<<31):-1)"
+
+#mobj_define Ppage_8K "((ea_pagesize==1<<13 && PADDR)?(PADDR>>13<<13):-1)"
+#mobj_define Ppage_64K "((ea_pagesize==1<<16 && PADDR)?(PADDR>>16<<16):-1)"
+#mobj_define Ppage_4M "((ea_pagesize==1<<22 && PADDR)?(PADDR>>22<<22):-1)"
+#mobj_define Ppage_256M "((ea_pagesize==1<<28 && PADDR)?(PADDR>>28<<28):-1)"
+#mobj_define Ppage_2G "((ea_pagesize==1<<31 && PADDR)?(PADDR>>31<<31):-1)"
+
+# comment out *CacheTag definitions since we don't have use cases to justify their complexity
+# comment out other *Cache* definitions since we don't have use cases to justify their complexity
+# further, meminfo() tends not to give us physical addresses
+
+#mobj_define M5_L1ICacheSet "((PHYSPC>>5)&0x7F)"
+#mobj_define M5_L1ICacheTag "((PHYSPC>>12)&0x7FFFFFFFF)"
+#mobj_define M5_L1DCacheSet "(PADDR?((PADDR>>5)&0x7F):-1)"
+#mobj_define M5_L1DCacheTag "(PADDR?((PADDR>>12)&0x7FFFFFFFF):-1)"
+
+#mobj_define M5_L2ICacheSet "((((PHYSPC&0xFFFFFFF80FFF)|(((PHYSPC>>19)^(PHYSPC>>16)^(PHYSPC>>10)^(PHYSPC>>4)^(PHYSPC>>1)^PHYSPC)&0x7F000))>>5)&0x1FF)"
+#mobj_define M5_L2ICacheTag "((((PHYSPC&0xFFFFFFF80FFF)|(((PHYSPC>>19)^(PHYSPC>>16)^(PHYSPC>>10)^(PHYSPC>>4)^(PHYSPC>>1)^PHYSPC)&0x7F000))>>14)&0x1FFFFFFFF)"
+#mobj_define M5_L2DCacheSet "(PADDR?((((PADDR&0x800000000000)?PADDR:((PADDR&0xFFFFFFF80FFF)|(((PADDR>>19)^(PADDR>>16)^(PADDR>>10)^(PADDR>>4)^(PADDR>>1)^PADDR)&0x7F000)))>>5)&0x1FF):-1)"
+#mobj_define M5_L2DCacheTag "(PADDR?((((PADDR&0x800000000000)?PADDR:((PADDR&0xFFFFFFF80FFF)|(((PADDR>>19)^(PADDR>>16)^(PADDR>>10)^(PADDR>>4)^(PADDR>>1)^PADDR)&0x7F000)))>>14)&0x1FFFFFFFF):-1)"
+
+#mobj_define M5_L3DCacheSet "(PADDR?((((PADDR&0x800000000000)?((PADDR&0x800000000000)?PADDR:((PADDR&0xFFFFFFF80FFF)|(((PADDR>>19)^(PADDR>>16)^(PADDR>>10)^(PADDR>>4)^(PADDR>>1)^PADDR)&0x7F000))):((((PADDR&0x800000000000)?PADDR:((PADDR&0xFFFFFFF80FFF)|(((PADDR>>19)^(PADDR>>16)^(PADDR>>10)^(PADDR>>4)^(PADDR>>1)^PADDR)&0x7F000)))&0x7FFFFFFFFF3F)|(((((PADDR&0x800000000000)?PADDR:((PADDR&0xFFFFFFF80FFF)|(((PADDR>>19)^(PADDR>>16)^(PADDR>>10)^(PADDR>>4)^(PADDR>>1)^PADDR)&0x7F000)))>>6)^((PADDR&0x800000000000)?PADDR:((PADDR&0xFFFFFFF80FFF)|(((PADDR>>19)^(PADDR>>16)^(PADDR>>10)^(PADDR>>4)^(PADDR>>1)^PADDR)&0x7F000))))&0xC0)))>>6)&0xFFFF):-1)"
+#mobj_define M5_L3DCacheTag "(PADDR?((((PADDR&0x800000000000)?((PADDR&0x800000000000)?PADDR:((PADDR&0xFFFFFFF80FFF)|(((PADDR>>19)^(PADDR>>16)^(PADDR>>10)^(PADDR>>4)^(PADDR>>1)^PADDR)&0x7F000))):((((PADDR&0x800000000000)?PADDR:((PADDR&0xFFFFFFF80FFF)|(((PADDR>>19)^(PADDR>>16)^(PADDR>>10)^(PADDR>>4)^(PADDR>>1)^PADDR)&0x7F000)))&0x7FFFFFFFFF3F)|(((((PADDR&0x800000000000)?PADDR:((PADDR&0xFFFFFFF80FFF)|(((PADDR>>19)^(PADDR>>16)^(PADDR>>10)^(PADDR>>4)^(PADDR>>1)^PADDR)&0x7F000)))>>6)^((PADDR&0x800000000000)?PADDR:((PADDR&0xFFFFFFF80FFF)|(((PADDR>>19)^(PADDR>>16)^(PADDR>>10)^(PADDR>>4)^(PADDR>>1)^PADDR)&0x7F000))))&0xC0)))>>22)&0x3FFFFFF):-1)"
+#mobj_define M5_L3DBank "(PADDR?((((PADDR&0x800000000000)?((PADDR&0x800000000000)?PADDR:((PADDR&0xFFFFFFF80FFF)|(((PADDR>>19)^(PADDR>>16)^(PADDR>>10)^(PADDR>>4)^(PADDR>>1)^PADDR)&0x7F000))):((((PADDR&0x800000000000)?PADDR:((PADDR&0xFFFFFFF80FFF)|(((PADDR>>19)^(PADDR>>16)^(PADDR>>10)^(PADDR>>4)^(PADDR>>1)^PADDR)&0x7F000)))&0x7FFFFFFFFF3F)|(((((PADDR&0x800000000000)?PADDR:((PADDR&0xFFFFFFF80FFF)|(((PADDR>>19)^(PADDR>>16)^(PADDR>>10)^(PADDR>>4)^(PADDR>>1)^PADDR)&0x7F000)))>>6)^((PADDR&0x800000000000)?PADDR:((PADDR&0xFFFFFFF80FFF)|(((PADDR>>19)^(PADDR>>16)^(PADDR>>10)^(PADDR>>4)^(PADDR>>1)^PADDR)&0x7F000))))&0xC0)))>>6)&0x3):-1)"
diff --git a/gprofng/src/machinemodels/m6.ermm b/gprofng/src/machinemodels/m6.ermm
new file mode 100644
index 00000000000..1071e9e5003
--- /dev/null
+++ b/gprofng/src/machinemodels/m6.ermm
@@ -0,0 +1,65 @@
+# Machinemodel file for M6 systems
+#
+# Copyright (C) 2021 Free Software Foundation, Inc.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 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; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+indxobj_define M6_Chip ((CPUID>>3)/12)
+indxobj_define M6_Core (CPUID>>3)
+
+mobj_define Memory_page_size "(EA_PAGESIZE ? EA_PAGESIZE : -1)"
+mobj_define Memory_page "(((VADDR>255) && EA_PAGESIZE) ? VADDR & (~(EA_PAGESIZE-1)) : -1)"
+mobj_define Memory_64B_cacheline "((VADDR>255)?(VADDR>>6<<6):-1)"
+mobj_define Memory_32B_cacheline "((VADDR>255)?(VADDR>>5<<5):-1)"
+mobj_define Memory_address "((VADDR>255)?(VADDR):-1)"
+
+mobj_define Memory_in_home_lgrp (EA_LGRP==LWP_LGRP_HOME)
+mobj_define Memory_lgrp (EA_LGRP)
+
+mobj_define Physical_page "((PADDR && EA_PAGESIZE) ? PADDR & (~(EA_PAGESIZE-1)) : -1)"
+mobj_define Physical_64B_cacheline "(PADDR?(PADDR>>6<<6):-1)"
+mobj_define Physical_32B_cacheline "(PADDR?(PADDR>>5<<5):-1)"
+mobj_define Physical_address "(PADDR?(PADDR):-1)"
+
+
+#mobj_define Vpage_8K "((ea_pagesize==1<<13 && VADDR>255)?(VADDR>>13<<13):-1)"
+#mobj_define Vpage_64K "((ea_pagesize==1<<16 && VADDR>255)?(VADDR>>16<<16):-1)"
+#mobj_define Vpage_4M "((ea_pagesize==1<<22 && VADDR>255)?(VADDR>>22<<22):-1)"
+#mobj_define Vpage_256M "((ea_pagesize==1<<28 && VADDR>255)?(VADDR>>28<<28):-1)"
+#mobj_define Vpage_2G "((ea_pagesize==1<<31 && VADDR>255)?(VADDR>>31<<31):-1)"
+
+#mobj_define Ppage_8K "((ea_pagesize==1<<13 && PADDR)?(PADDR>>13<<13):-1)"
+#mobj_define Ppage_64K "((ea_pagesize==1<<16 && PADDR)?(PADDR>>16<<16):-1)"
+#mobj_define Ppage_4M "((ea_pagesize==1<<22 && PADDR)?(PADDR>>22<<22):-1)"
+#mobj_define Ppage_256M "((ea_pagesize==1<<28 && PADDR)?(PADDR>>28<<28):-1)"
+#mobj_define Ppage_2G "((ea_pagesize==1<<31 && PADDR)?(PADDR>>31<<31):-1)"
+
+# comment out *CacheTag definitions since we don't have use cases to justify their complexity
+# comment out other *Cache* definitions since we don't have use cases to justify their complexity
+# further, meminfo() tends not to give us physical addresses
+
+#mobj_define M6_L1ICacheSet "((PHYSPC>>5)&0x7F)"
+#mobj_define M6_L1ICacheTag "((PHYSPC>>12)&0x7FFFFFFFF)"
+#mobj_define M6_L1DCacheSet "(PADDR?((PADDR>>5)&0x7F):-1)"
+#mobj_define M6_L1DCacheTag "(PADDR?((PADDR>>12)&0x7FFFFFFFF):-1)"
+
+#mobj_define M6_L2ICacheSet "((((PHYSPC&0xFFFFFFF80FFF)|(((PHYSPC>>19)^(PHYSPC>>16)^(PHYSPC>>10)^(PHYSPC>>4)^(PHYSPC>>1)^PHYSPC)&0x7F000))>>5)&0x1FF)"
+#mobj_define M6_L2ICacheTag "((((PHYSPC&0xFFFFFFF80FFF)|(((PHYSPC>>19)^(PHYSPC>>16)^(PHYSPC>>10)^(PHYSPC>>4)^(PHYSPC>>1)^PHYSPC)&0x7F000))>>14)&0x1FFFFFFFF)"
+#mobj_define M6_L2DCacheSet "(PADDR?((((PADDR&0x800000000000)?PADDR:((PADDR&0xFFFFFFF80FFF)|(((PADDR>>19)^(PADDR>>16)^(PADDR>>10)^(PADDR>>4)^(PADDR>>1)^PADDR)&0x7F000)))>>5)&0x1FF):-1)"
+#mobj_define M6_L2DCacheTag "(PADDR?((((PADDR&0x800000000000)?PADDR:((PADDR&0xFFFFFFF80FFF)|(((PADDR>>19)^(PADDR>>16)^(PADDR>>10)^(PADDR>>4)^(PADDR>>1)^PADDR)&0x7F000)))>>14)&0x1FFFFFFFF):-1)"
+
+#mobj_define M6_L3DCacheSet "(PADDR?((((PADDR&0x800000000000)?((PADDR&0x800000000000)?PADDR:((PADDR&0xFFFFFFF80FFF)|(((PADDR>>19)^(PADDR>>16)^(PADDR>>10)^(PADDR>>4)^(PADDR>>1)^PADDR)&0x7F000))):((((PADDR&0x800000000000)?PADDR:((PADDR&0xFFFFFFF80FFF)|(((PADDR>>19)^(PADDR>>16)^(PADDR>>10)^(PADDR>>4)^(PADDR>>1)^PADDR)&0x7F000)))&0x7FFFFFFFFF3F)|(((((PADDR&0x800000000000)?PADDR:((PADDR&0xFFFFFFF80FFF)|(((PADDR>>19)^(PADDR>>16)^(PADDR>>10)^(PADDR>>4)^(PADDR>>1)^PADDR)&0x7F000)))>>6)^((PADDR&0x800000000000)?PADDR:((PADDR&0xFFFFFFF80FFF)|(((PADDR>>19)^(PADDR>>16)^(PADDR>>10)^(PADDR>>4)^(PADDR>>1)^PADDR)&0x7F000))))&0xC0)))>>6)&0xFFFF):-1)"
+#mobj_define M6_L3DCacheTag "(PADDR?((((PADDR&0x800000000000)?((PADDR&0x800000000000)?PADDR:((PADDR&0xFFFFFFF80FFF)|(((PADDR>>19)^(PADDR>>16)^(PADDR>>10)^(PADDR>>4)^(PADDR>>1)^PADDR)&0x7F000))):((((PADDR&0x800000000000)?PADDR:((PADDR&0xFFFFFFF80FFF)|(((PADDR>>19)^(PADDR>>16)^(PADDR>>10)^(PADDR>>4)^(PADDR>>1)^PADDR)&0x7F000)))&0x7FFFFFFFFF3F)|(((((PADDR&0x800000000000)?PADDR:((PADDR&0xFFFFFFF80FFF)|(((PADDR>>19)^(PADDR>>16)^(PADDR>>10)^(PADDR>>4)^(PADDR>>1)^PADDR)&0x7F000)))>>6)^((PADDR&0x800000000000)?PADDR:((PADDR&0xFFFFFFF80FFF)|(((PADDR>>19)^(PADDR>>16)^(PADDR>>10)^(PADDR>>4)^(PADDR>>1)^PADDR)&0x7F000))))&0xC0)))>>22)&0x3FFFFFF):-1)"
+#mobj_define M6_L3DBank "(PADDR?((((PADDR&0x800000000000)?((PADDR&0x800000000000)?PADDR:((PADDR&0xFFFFFFF80FFF)|(((PADDR>>19)^(PADDR>>16)^(PADDR>>10)^(PADDR>>4)^(PADDR>>1)^PADDR)&0x7F000))):((((PADDR&0x800000000000)?PADDR:((PADDR&0xFFFFFFF80FFF)|(((PADDR>>19)^(PADDR>>16)^(PADDR>>10)^(PADDR>>4)^(PADDR>>1)^PADDR)&0x7F000)))&0x7FFFFFFFFF3F)|(((((PADDR&0x800000000000)?PADDR:((PADDR&0xFFFFFFF80FFF)|(((PADDR>>19)^(PADDR>>16)^(PADDR>>10)^(PADDR>>4)^(PADDR>>1)^PADDR)&0x7F000)))>>6)^((PADDR&0x800000000000)?PADDR:((PADDR&0xFFFFFFF80FFF)|(((PADDR>>19)^(PADDR>>16)^(PADDR>>10)^(PADDR>>4)^(PADDR>>1)^PADDR)&0x7F000))))&0xC0)))>>6)&0x3):-1)"
diff --git a/gprofng/src/machinemodels/m7.ermm b/gprofng/src/machinemodels/m7.ermm
new file mode 100644
index 00000000000..29e3bef0347
--- /dev/null
+++ b/gprofng/src/machinemodels/m7.ermm
@@ -0,0 +1,64 @@
+# Machinemodel file for M7/T7 systems
+#
+# Copyright (C) 2021 Free Software Foundation, Inc.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 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; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+indxobj_define M7_Chip (CPUID>>8)
+indxobj_define M7_Core (CPUID>>3)
+
+mobj_define Memory_page_size "(EA_PAGESIZE ? EA_PAGESIZE : -1)"
+mobj_define Memory_page "(((VADDR>255) && EA_PAGESIZE) ? VADDR & (~(EA_PAGESIZE-1)) : -1)"
+mobj_define Memory_64B_cacheline "((VADDR>255)?(VADDR>>6<<6):-1)"
+mobj_define Memory_32B_cacheline "((VADDR>255)?(VADDR>>5<<5):-1)"
+mobj_define Memory_address "((VADDR>255)?(VADDR):-1)"
+
+mobj_define Memory_in_home_lgrp (EA_LGRP==LWP_LGRP_HOME)
+mobj_define Memory_lgrp (EA_LGRP)
+
+mobj_define Physical_page "((PADDR && EA_PAGESIZE) ? PADDR & (~(EA_PAGESIZE-1)) : -1)"
+mobj_define Physical_64B_cacheline "(PADDR?(PADDR>>6<<6):-1)"
+mobj_define Physical_32B_cacheline "(PADDR?(PADDR>>5<<5):-1)"
+mobj_define Physical_address "(PADDR?(PADDR):-1)"
+
+
+#mobj_define Vpage_8K "((ea_pagesize==1<<13 && VADDR>255)?(VADDR>>13<<13):-1)"
+#mobj_define Vpage_64K "((ea_pagesize==1<<16 && VADDR>255)?(VADDR>>16<<16):-1)"
+#mobj_define Vpage_4M "((ea_pagesize==1<<22 && VADDR>255)?(VADDR>>22<<22):-1)"
+#mobj_define Vpage_256M "((ea_pagesize==1<<28 && VADDR>255)?(VADDR>>28<<28):-1)"
+#mobj_define Vpage_2G "((ea_pagesize==1<<31 && VADDR>255)?(VADDR>>31<<31):-1)"
+#mobj_define Vpage_16G "((ea_pagesize==1<<34 && VADDR>255)?(VADDR>>34<<34):-1)"
+
+#mobj_define Ppage_8K "((ea_pagesize==1<<13 && PADDR)?(PADDR>>13<<13):-1)"
+#mobj_define Ppage_64K "((ea_pagesize==1<<16 && PADDR)?(PADDR>>16<<16):-1)"
+#mobj_define Ppage_4M "((ea_pagesize==1<<22 && PADDR)?(PADDR>>22<<22):-1)"
+#mobj_define Ppage_256M "((ea_pagesize==1<<28 && PADDR)?(PADDR>>28<<28):-1)"
+#mobj_define Ppage_2G "((ea_pagesize==1<<31 && PADDR)?(PADDR>>31<<31):-1)"
+#mobj_define Ppage_16G "((ea_pagesize==1<<34 && PADDR)?(PADDR>>34<<34):-1)"
+
+# we dropped the *CacheTag definitions since:
+# - they're rarely used
+# - it's unclear if they are correct for S4
+# comment out other *Cache* definitions since we don't have use cases to justify their complexity
+# further, meminfo() tends not to give us physical addresses
+
+#mobj_define M7_L1ICacheSet "((PHYSPC>>6)&0x3F)"
+#mobj_define M7_L1DCacheSet "(PADDR?((PADDR>>5)&0x7F):-1)"
+
+#mobj_define M7_L2ICacheSet "((((PHYSPC&0xFFFFFFFFFFF00FFF)|(((PHYSPC>>24)^(PHYSPC>>16)^(PHYSPC>>8)^PHYSPC)&0xFF000))>>6)&0x1FF)"
+#mobj_define M7_L2DCacheSet "(PADDR?((((PADDR&0x2000000000000)?PADDR:((PADDR&0xFFFFFFFFFFF00FFF)|(((PADDR>>24)^(PADDR>>16)^(PADDR>>8)^PADDR)&0xFF000)))>>6)&0x01FF):-1)"
+
+#mobj_define M7_L3DCacheSet "(PADDR?((((PADDR&0x2000000000000)?PADDR:((PADDR&0xFFFFFFFFFFF00FFF)|(((PADDR>>24)^(PADDR>>16)^(PADDR>>8)^PADDR)&0xFF000)))>>6)&0x3FFF):-1)"
+#mobj_define M7_L3DBank "(PADDR?((((PADDR&0x2000000000000)?PADDR:((PADDR&0xFFFFFFFFFFF00FFF)|(((PADDR>>24)^(PADDR>>16)^(PADDR>>8)^PADDR)&0xFF000)))>>6)&0x0001):-1)"
diff --git a/gprofng/src/machinemodels/t4.ermm b/gprofng/src/machinemodels/t4.ermm
new file mode 100644
index 00000000000..e27f3a460e7
--- /dev/null
+++ b/gprofng/src/machinemodels/t4.ermm
@@ -0,0 +1,67 @@
+# Machinemodel file for T4 systems
+#
+# Copyright (C) 2021 Free Software Foundation, Inc.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 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; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+indxobj_define T4_Chip (CPUID>>6)
+indxobj_define T4_Core (CPUID>>3)
+
+mobj_define Memory_page_size "(EA_PAGESIZE ? EA_PAGESIZE : -1)"
+mobj_define Memory_page "(((VADDR>255) && EA_PAGESIZE) ? VADDR & (~(EA_PAGESIZE-1)) : -1)"
+mobj_define Memory_64B_cacheline "((VADDR>255)?(VADDR>>6<<6):-1)"
+mobj_define Memory_32B_cacheline "((VADDR>255)?(VADDR>>5<<5):-1)"
+mobj_define Memory_address "((VADDR>255)?(VADDR):-1)"
+
+mobj_define Memory_in_home_lgrp (EA_LGRP==LWP_LGRP_HOME)
+mobj_define Memory_lgrp (EA_LGRP)
+
+mobj_define Physical_page "((PADDR && EA_PAGESIZE) ? PADDR & (~(EA_PAGESIZE-1)) : -1)"
+mobj_define Physical_64B_cacheline "(PADDR?(PADDR>>6<<6):-1)"
+mobj_define Physical_32B_cacheline "(PADDR?(PADDR>>5<<5):-1)"
+mobj_define Physical_address "(PADDR?(PADDR):-1)"
+
+
+#mobj_define Vpage_8K "((ea_pagesize==1<<13 && VADDR>255)?(VADDR>>13<<13):-1)"
+#mobj_define Vpage_64K "((ea_pagesize==1<<16 && VADDR>255)?(VADDR>>16<<16):-1)"
+#mobj_define Vpage_512K "((ea_pagesize==1<<19 && VADDR>255)?(VADDR>>19<<19):-1)"
+#mobj_define Vpage_4M "((ea_pagesize==1<<22 && VADDR>255)?(VADDR>>22<<22):-1)"
+#mobj_define Vpage_256M "((ea_pagesize==1<<28 && VADDR>255)?(VADDR>>28<<28):-1)"
+#mobj_define Vpage_2G "((ea_pagesize==1<<31 && VADDR>255)?(VADDR>>31<<31):-1)"
+
+#mobj_define Ppage_8K "((ea_pagesize==1<<13 && PADDR)?(PADDR>>13<<13):-1)"
+#mobj_define Ppage_64K "((ea_pagesize==1<<16 && PADDR)?(PADDR>>16<<16):-1)"
+#mobj_define Ppage_512K "((ea_pagesize==1<<19 && PADDR)?(PADDR>>19<<19):-1)"
+#mobj_define Ppage_4M "((ea_pagesize==1<<22 && PADDR)?(PADDR>>22<<22):-1)"
+#mobj_define Ppage_256M "((ea_pagesize==1<<28 && PADDR)?(PADDR>>28<<28):-1)"
+#mobj_define Ppage_2G "((ea_pagesize==1<<31 && PADDR)?(PADDR>>31<<31):-1)"
+
+# comment out *CacheTag definitions since we don't have use cases to justify their complexity
+# comment out other *Cache* definitions since we don't have use cases to justify their complexity
+# further, meminfo() tends not to give us physical addresses
+
+#mobj_define T4_L1ICacheSet "((PHYSPC>>5)&0x7F)"
+#mobj_define T4_L1ICacheTag "((PHYSPC>>12)&0x7FFFFFFFF)"
+#mobj_define T4_L1DCacheSet "(PADDR?((PADDR>>5)&0x7F):-1)"
+#mobj_define T4_L1DCacheTag "(PADDR?((PADDR>>12)&0x7FFFFFFFF):-1)"
+#mobj_define T4_L2ICacheSet "((((PHYSPC&0xFFFFFFF80FFF)|(((PHYSPC>>19)^(PHYSPC>>16)^(PHYSPC>>10)^(PHYSPC>>4)^(PHYSPC>>1)^PHYSPC)&0x7F000))>>5)&0x1FF)"
+#mobj_define T4_L2ICacheTag "((((PHYSPC&0xFFFFFFF80FFF)|(((PHYSPC>>19)^(PHYSPC>>16)^(PHYSPC>>10)^(PHYSPC>>4)^(PHYSPC>>1)^PHYSPC)&0x7F000))>>14)&0x1FFFFFFFF)"
+#mobj_define T4_L2DCacheSet "(PADDR?((((PADDR&0x800000000000)?PADDR:((PADDR&0xFFFFFFF80FFF)|(((PADDR>>19)^(PADDR>>16)^(PADDR>>10)^(PADDR>>4)^(PADDR>>1)^PADDR)&0x7F000)))>>5)&0x1FF):-1)"
+#mobj_define T4_L2DCacheTag "(PADDR?((((PADDR&0x800000000000)?PADDR:((PADDR&0xFFFFFFF80FFF)|(((PADDR>>19)^(PADDR>>16)^(PADDR>>10)^(PADDR>>4)^(PADDR>>1)^PADDR)&0x7F000)))>>14)&0x1FFFFFFFF):-1)"
+#mobj_define T4_L3DCacheSet "(PADDR?((((PADDR&0x800000000000)?((PADDR&0x800000000000)?PADDR:((PADDR&0xFFFFFFF80FFF)|(((PADDR>>19)^(PADDR>>16)^(PADDR>>10)^(PADDR>>4)^(PADDR>>1)^PADDR)&0x7F000))):((((PADDR&0x800000000000)?PADDR:((PADDR&0xFFFFFFF80FFF)|(((PADDR>>19)^(PADDR>>16)^(PADDR>>10)^(PADDR>>4)^(PADDR>>1)^PADDR)&0x7F000)))&0x7FFFFFFFFF3F)|(((((PADDR&0x800000000000)?PADDR:((PADDR&0xFFFFFFF80FFF)|(((PADDR>>19)^(PADDR>>16)^(PADDR>>10)^(PADDR>>4)^(PADDR>>1)^PADDR)&0x7F000)))>>6)^((PADDR&0x800000000000)?PADDR:((PADDR&0xFFFFFFF80FFF)|(((PADDR>>19)^(PADDR>>16)^(PADDR>>10)^(PADDR>>4)^(PADDR>>1)^PADDR)&0x7F000))))&0xC0)))>>6)&0xFFF):-1)"
+#mobj_define T4_L3DCacheTag "(PADDR?((((PADDR&0x800000000000)?((PADDR&0x800000000000)?PADDR:((PADDR&0xFFFFFFF80FFF)|(((PADDR>>19)^(PADDR>>16)^(PADDR>>10)^(PADDR>>4)^(PADDR>>1)^PADDR)&0x7F000))):((((PADDR&0x800000000000)?PADDR:((PADDR&0xFFFFFFF80FFF)|(((PADDR>>19)^(PADDR>>16)^(PADDR>>10)^(PADDR>>4)^(PADDR>>1)^PADDR)&0x7F000)))&0x7FFFFFFFFF3F)|(((((PADDR&0x800000000000)?PADDR:((PADDR&0xFFFFFFF80FFF)|(((PADDR>>19)^(PADDR>>16)^(PADDR>>10)^(PADDR>>4)^(PADDR>>1)^PADDR)&0x7F000)))>>6)^((PADDR&0x800000000000)?PADDR:((PADDR&0xFFFFFFF80FFF)|(((PADDR>>19)^(PADDR>>16)^(PADDR>>10)^(PADDR>>4)^(PADDR>>1)^PADDR)&0x7F000))))&0xC0)))>>18)&0x1FFFFFFF):-1)"
+#mobj_define T4_L3DBank "(PADDR?((((PADDR&0x800000000000)?((PADDR&0x800000000000)?PADDR:((PADDR&0xFFFFFFF80FFF)|(((PADDR>>19)^(PADDR>>16)^(PADDR>>10)^(PADDR>>4)^(PADDR>>1)^PADDR)&0x7F000))):((((PADDR&0x800000000000)?PADDR:((PADDR&0xFFFFFFF80FFF)|(((PADDR>>19)^(PADDR>>16)^(PADDR>>10)^(PADDR>>4)^(PADDR>>1)^PADDR)&0x7F000)))&0x7FFFFFFFFF3F)|(((((PADDR&0x800000000000)?PADDR:((PADDR&0xFFFFFFF80FFF)|(((PADDR>>19)^(PADDR>>16)^(PADDR>>10)^(PADDR>>4)^(PADDR>>1)^PADDR)&0x7F000)))>>6)^((PADDR&0x800000000000)?PADDR:((PADDR&0xFFFFFFF80FFF)|(((PADDR>>19)^(PADDR>>16)^(PADDR>>10)^(PADDR>>4)^(PADDR>>1)^PADDR)&0x7F000))))&0xC0)))>>6)&0x7):-1)"
+#mobj_define T4_2_Socket "(PADDR?((PADDR>>33)&0x1):-1)"
+#mobj_define T4_4_Socket "(PADDR?((PADDR>>33)&0x3):-1)"
diff --git a/gprofng/src/machinemodels/t5.ermm b/gprofng/src/machinemodels/t5.ermm
new file mode 100644
index 00000000000..6d666a9812a
--- /dev/null
+++ b/gprofng/src/machinemodels/t5.ermm
@@ -0,0 +1,65 @@
+# Machinemodel file for T5 systems
+#
+# Copyright (C) 2021 Free Software Foundation, Inc.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 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; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+indxobj_define T5_Chip (CPUID>>7)
+indxobj_define T5_Core (CPUID>>3)
+
+mobj_define Memory_page_size "(EA_PAGESIZE ? EA_PAGESIZE : -1)"
+mobj_define Memory_page "(((VADDR>255) && EA_PAGESIZE) ? VADDR & (~(EA_PAGESIZE-1)) : -1)"
+mobj_define Memory_64B_cacheline "((VADDR>255)?(VADDR>>6<<6):-1)"
+mobj_define Memory_32B_cacheline "((VADDR>255)?(VADDR>>5<<5):-1)"
+mobj_define Memory_address "((VADDR>255)?(VADDR):-1)"
+
+mobj_define Memory_in_home_lgrp (EA_LGRP==LWP_LGRP_HOME)
+mobj_define Memory_lgrp (EA_LGRP)
+
+mobj_define Physical_page "((PADDR && EA_PAGESIZE) ? PADDR & (~(EA_PAGESIZE-1)) : -1)"
+mobj_define Physical_64B_cacheline "(PADDR?(PADDR>>6<<6):-1)"
+mobj_define Physical_32B_cacheline "(PADDR?(PADDR>>5<<5):-1)"
+mobj_define Physical_address "(PADDR?(PADDR):-1)"
+
+
+#mobj_define Vpage_8K "((ea_pagesize==1<<13 && VADDR>255)?(VADDR>>13<<13):-1)"
+#mobj_define Vpage_64K "((ea_pagesize==1<<16 && VADDR>255)?(VADDR>>16<<16):-1)"
+#mobj_define Vpage_4M "((ea_pagesize==1<<22 && VADDR>255)?(VADDR>>22<<22):-1)"
+#mobj_define Vpage_256M "((ea_pagesize==1<<28 && VADDR>255)?(VADDR>>28<<28):-1)"
+#mobj_define Vpage_2G "((ea_pagesize==1<<31 && VADDR>255)?(VADDR>>31<<31):-1)"
+
+#mobj_define Ppage_8K "((ea_pagesize==1<<13 && PADDR)?(PADDR>>13<<13):-1)"
+#mobj_define Ppage_64K "((ea_pagesize==1<<16 && PADDR)?(PADDR>>16<<16):-1)"
+#mobj_define Ppage_4M "((ea_pagesize==1<<22 && PADDR)?(PADDR>>22<<22):-1)"
+#mobj_define Ppage_256M "((ea_pagesize==1<<28 && PADDR)?(PADDR>>28<<28):-1)"
+#mobj_define Ppage_2G "((ea_pagesize==1<<31 && PADDR)?(PADDR>>31<<31):-1)"
+
+# comment out *CacheTag definitions since we don't have use cases to justify their complexity
+# comment out other *Cache* definitions since we don't have use cases to justify their complexity
+# further, meminfo() tends not to give us physical addresses
+
+#mobj_define T5_L1ICacheSet "((PHYSPC>>5)&0x7F)"
+#mobj_define T5_L1ICacheTag "((PHYSPC>>12)&0x7FFFFFFFF)"
+#mobj_define T5_L1DCacheSet "(PADDR?((PADDR>>5)&0x7F):-1)"
+#mobj_define T5_L1DCacheTag "(PADDR?((PADDR>>12)&0x7FFFFFFFF):-1)"
+
+#mobj_define T5_L2ICacheSet "((((PHYSPC&0xFFFFFFF80FFF)|(((PHYSPC>>19)^(PHYSPC>>16)^(PHYSPC>>10)^(PHYSPC>>4)^(PHYSPC>>1)^PHYSPC)&0x7F000))>>5)&0x1FF)"
+#mobj_define T5_L2ICacheTag "((((PHYSPC&0xFFFFFFF80FFF)|(((PHYSPC>>19)^(PHYSPC>>16)^(PHYSPC>>10)^(PHYSPC>>4)^(PHYSPC>>1)^PHYSPC)&0x7F000))>>14)&0x1FFFFFFFF)"
+#mobj_define T5_L2DCacheSet "(PADDR?((((PADDR&0x800000000000)?PADDR:((PADDR&0xFFFFFFF80FFF)|(((PADDR>>19)^(PADDR>>16)^(PADDR>>10)^(PADDR>>4)^(PADDR>>1)^PADDR)&0x7F000)))>>5)&0x1FF):-1)"
+#mobj_define T5_L2DCacheTag "(PADDR?((((PADDR&0x800000000000)?PADDR:((PADDR&0xFFFFFFF80FFF)|(((PADDR>>19)^(PADDR>>16)^(PADDR>>10)^(PADDR>>4)^(PADDR>>1)^PADDR)&0x7F000)))>>14)&0x1FFFFFFFF):-1)"
+
+#mobj_define T5_L3DCacheSet "(PADDR?((((PADDR&0x800000000000)?((PADDR&0x800000000000)?PADDR:((PADDR&0xFFFFFFF80FFF)|(((PADDR>>19)^(PADDR>>16)^(PADDR>>10)^(PADDR>>4)^(PADDR>>1)^PADDR)&0x7F000))):((((PADDR&0x800000000000)?PADDR:((PADDR&0xFFFFFFF80FFF)|(((PADDR>>19)^(PADDR>>16)^(PADDR>>10)^(PADDR>>4)^(PADDR>>1)^PADDR)&0x7F000)))&0x7FFFFFFFFF3F)|(((((PADDR&0x800000000000)?PADDR:((PADDR&0xFFFFFFF80FFF)|(((PADDR>>19)^(PADDR>>16)^(PADDR>>10)^(PADDR>>4)^(PADDR>>1)^PADDR)&0x7F000)))>>6)^((PADDR&0x800000000000)?PADDR:((PADDR&0xFFFFFFF80FFF)|(((PADDR>>19)^(PADDR>>16)^(PADDR>>10)^(PADDR>>4)^(PADDR>>1)^PADDR)&0x7F000))))&0xC0)))>>6)&0x1FFF):-1)"
+#mobj_define T5_L3DCacheTag "(PADDR?((((PADDR&0x800000000000)?((PADDR&0x800000000000)?PADDR:((PADDR&0xFFFFFFF80FFF)|(((PADDR>>19)^(PADDR>>16)^(PADDR>>10)^(PADDR>>4)^(PADDR>>1)^PADDR)&0x7F000))):((((PADDR&0x800000000000)?PADDR:((PADDR&0xFFFFFFF80FFF)|(((PADDR>>19)^(PADDR>>16)^(PADDR>>10)^(PADDR>>4)^(PADDR>>1)^PADDR)&0x7F000)))&0x7FFFFFFFFF3F)|(((((PADDR&0x800000000000)?PADDR:((PADDR&0xFFFFFFF80FFF)|(((PADDR>>19)^(PADDR>>16)^(PADDR>>10)^(PADDR>>4)^(PADDR>>1)^PADDR)&0x7F000)))>>6)^((PADDR&0x800000000000)?PADDR:((PADDR&0xFFFFFFF80FFF)|(((PADDR>>19)^(PADDR>>16)^(PADDR>>10)^(PADDR>>4)^(PADDR>>1)^PADDR)&0x7F000))))&0xC0)))>>19)&0x1FFFFFFF):-1)"
+#mobj_define T5_L3DBank "(PADDR?((((PADDR&0x800000000000)?((PADDR&0x800000000000)?PADDR:((PADDR&0xFFFFFFF80FFF)|(((PADDR>>19)^(PADDR>>16)^(PADDR>>10)^(PADDR>>4)^(PADDR>>1)^PADDR)&0x7F000))):((((PADDR&0x800000000000)?PADDR:((PADDR&0xFFFFFFF80FFF)|(((PADDR>>19)^(PADDR>>16)^(PADDR>>10)^(PADDR>>4)^(PADDR>>1)^PADDR)&0x7F000)))&0x7FFFFFFFFF3F)|(((((PADDR&0x800000000000)?PADDR:((PADDR&0xFFFFFFF80FFF)|(((PADDR>>19)^(PADDR>>16)^(PADDR>>10)^(PADDR>>4)^(PADDR>>1)^PADDR)&0x7F000)))>>6)^((PADDR&0x800000000000)?PADDR:((PADDR&0xFFFFFFF80FFF)|(((PADDR>>19)^(PADDR>>16)^(PADDR>>10)^(PADDR>>4)^(PADDR>>1)^PADDR)&0x7F000))))&0xC0)))>>6)&0x7):-1)"
diff --git a/gprofng/src/parse.cc b/gprofng/src/parse.cc
new file mode 100644
index 00000000000..ab222708eee
--- /dev/null
+++ b/gprofng/src/parse.cc
@@ -0,0 +1,927 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <sys/param.h>
+#include <sys/mman.h>
+
+#include "util.h"
+#include "DbeFile.h"
+#include "DbeSession.h"
+#include "Experiment.h"
+#include "Emsg.h"
+#include "Function.h"
+#include "LoadObject.h"
+#include "Module.h"
+#include "PRBTree.h"
+#include "Sample.h"
+#include "Elf.h"
+
+void
+Experiment::mrec_insert (MapRecord *mrec)
+{
+ int sz = mrecs->size ();
+ MapRecord *tmp = sz > 0 ? mrecs->fetch (sz - 1) : NULL;
+
+ // The following should work in most cases
+ if (tmp == NULL || tmp->ts <= mrec->ts)
+ {
+ mrecs->append (mrec);
+ return;
+ }
+
+ // If it didn't...
+ int lo = 0;
+ int hi = sz - 1;
+ while (lo <= hi)
+ {
+ int md = (lo + hi) / 2;
+ tmp = mrecs->fetch (md);
+ if (tmp->ts < mrec->ts)
+ lo = md + 1;
+ else
+ hi = md - 1;
+ }
+ mrecs->insert (lo, mrec);
+}
+
+int
+Experiment::process_arglist_cmd (char *, char *arglist)
+{
+ uarglist = arglist;
+
+ // find argv[0], and extract its basename
+ if (strcmp (uarglist, NTXT ("(fork)")) == 0)
+ return 0; // leaving target name NULL
+ char *p = uarglist;
+ char *pp = uarglist;
+ char *pl;
+ for (;;)
+ {
+ if (*p == '/')
+ pp = p + 1;
+ if (*p == ' ' || *p == 0)
+ {
+ pl = p;
+ break;
+ }
+ p++;
+ }
+ size_t len = pl - pp;
+ if (len > 0)
+ utargname = dbe_sprintf (NTXT ("%.*s"), (int) len, pp);
+ return 0;
+}
+
+int
+Experiment::process_desc_start_cmd (char *, hrtime_t ts, char *flavor,
+ char *nexp, int follow, char *txt)
+{
+ char *str;
+ Emsg *m;
+
+ if (follow == 1)
+ str = dbe_sprintf (GTXT ("Starting %s %ld.%09ld, exp %s.er, \"%s\""),
+ flavor, (long) (ts / NANOSEC), (long) (ts % NANOSEC),
+ nexp, txt);
+ else
+ str = dbe_sprintf (GTXT ("Starting %s %ld.%09ld, no experiment, \"%s\""),
+ flavor, (long) (ts / NANOSEC), (long) (ts % NANOSEC),
+ txt);
+ m = new Emsg (CMSG_COMMENT, str);
+ free (str);
+ runlogq->append (m);
+
+ free (flavor);
+ free (nexp);
+ free (txt);
+ return 0;
+}
+
+int
+Experiment::process_desc_started_cmd (char *, hrtime_t ts, char *flavor,
+ char *nexp, int follow, char *txt)
+{
+ char *str;
+ Emsg *m;
+
+ if (follow == 1)
+ str = dbe_sprintf (GTXT ("Started %s %ld.%09ld, exp %s.er, \"%s\""),
+ flavor, (long) (ts / NANOSEC), (long) (ts % NANOSEC),
+ nexp, txt);
+ else
+ str = dbe_sprintf (GTXT ("Started %s %ld.%09ld, no experiment, \"%s\""),
+ flavor, (long) (ts / NANOSEC), (long) (ts % NANOSEC),
+ txt);
+ m = new Emsg (CMSG_COMMENT, str);
+ free (str);
+ runlogq->append (m);
+ free (flavor);
+ free (nexp);
+ free (txt);
+ return 0;
+}
+
+LoadObject *
+Experiment::get_dynfunc_lo (const char *loName)
+{
+ LoadObject *lo = loadObjMap->get (loName);
+ if (lo == NULL)
+ {
+ lo = createLoadObject (loName, expIdx);// DYNFUNC_SEGMENT is always unique
+ lo->dbeFile->filetype |= DbeFile::F_FICTION;
+ lo->flags |= SEG_FLAG_DYNAMIC;
+ lo->type = LoadObject::SEG_TEXT;
+ lo->set_platform (platform, wsize);
+ append (lo);
+ }
+ return lo;
+}
+
+Function *
+Experiment::create_dynfunc (Module *mod, char *fname, int64_t vaddr,
+ int64_t fsize)
+{
+ Function *f = dbeSession->createFunction ();
+ f->set_name (fname);
+ f->flags |= FUNC_FLAG_DYNAMIC;
+ f->size = fsize;
+ f->img_offset = vaddr;
+ f->module = mod;
+ mod->functions->append (f);
+ mod->loadobject->functions->append (f);
+ return f;
+}
+
+static int
+func_cmp (const void *a, const void *b)
+{
+ Function *fp1 = *((Function **) a);
+ Function *fp2 = *((Function **) b);
+ uint64_t i1 = fp1->img_offset;
+ uint64_t i2 = fp2->img_offset;
+ return i1 < i2 ? -1 : i1 == i2 ? 0 : 1;
+}
+
+int
+Experiment::process_fn_load_cmd (Module *mod, char *fname, Vaddr vaddr,
+ int fsize, hrtime_t ts)
+{
+ Dprintf (DEBUG_MAPS,
+ "process_fn_load_cmd:%s (%s) vaddr=0x%llx msize=%lld ts=%lld\n",
+ STR (mod ? mod->get_name () : NULL), STR (fname),
+ (unsigned long long) vaddr, (long long) fsize, (long long) ts);
+ if (mod != NULL)
+ {
+ mod->functions->sort (func_cmp);
+ uint64_t lastVaddr = vaddr;
+ for (int i = 0, sz = mod->functions->size (); i < sz; i++)
+ {
+ Function *f = mod->functions->fetch (i);
+ if (lastVaddr < f->img_offset)
+ {
+ char *fnm = dbe_sprintf (GTXT ("<static>@0x%llx (%s)"),
+ (unsigned long long) lastVaddr, fname);
+ create_dynfunc (mod, fnm, lastVaddr, f->img_offset - lastVaddr);
+ free (fnm);
+ }
+ lastVaddr = f->img_offset + f->size;
+ }
+ if (lastVaddr < vaddr + fsize)
+ {
+ char *fnm = dbe_sprintf (GTXT ("<static>@0x%llx (%s)"),
+ (unsigned long long) lastVaddr, fname);
+ create_dynfunc (mod, fnm, lastVaddr, vaddr + fsize - lastVaddr);
+ free (fnm);
+ }
+ mod->functions->sort (func_cmp);
+ for (int i = 0, sz = mod->functions->size (); i < sz; i++)
+ {
+ Function *f = mod->functions->fetch (i);
+ MapRecord *mrec = new MapRecord;
+ mrec->kind = MapRecord::LOAD;
+ mrec->obj = f;
+ mrec->base = f->img_offset;
+ mrec->size = f->size;
+ mrec->ts = ts;
+ mrec->foff = 0;
+ mrec_insert (mrec);
+ }
+ return 0;
+ }
+
+ LoadObject *ds = get_dynfunc_lo (DYNFUNC_SEGMENT);
+ Function *dfunc = create_dynfunc (ds->noname, fname, vaddr, fsize);
+
+ // check for special functions, USER, IDLE, TRUNC to disable offsets in disassembly
+ // XXX -- check based on name now
+ // Optimization: use pre-initialized localized strings
+ static const char * localized_USER_MODE = NULL;
+ static const char * localized_IDLE = NULL;
+ static const char * localized_TRUNCATED_STACK = NULL;
+ if (localized_USER_MODE == NULL)
+ {
+ localized_USER_MODE = GTXT ("<USER_MODE>");
+ localized_IDLE = GTXT ("<IDLE>");
+ localized_TRUNCATED_STACK = GTXT ("<TRUNCATED_STACK>");
+ }
+ if (strcmp (fname, localized_USER_MODE) == 0
+ || strcmp (fname, localized_IDLE) == 0
+ || strcmp (fname, localized_TRUNCATED_STACK) == 0)
+ dfunc->flags |= FUNC_FLAG_NO_OFFSET;
+
+ MapRecord *mrec = new MapRecord;
+ mrec->kind = MapRecord::LOAD;
+ mrec->obj = dfunc;
+ mrec->base = vaddr;
+ mrec->size = fsize;
+ mrec->ts = ts;
+ mrec->foff = 0;
+ mrec_insert (mrec);
+ return 0;
+}
+
+int
+Experiment::process_fn_unload_cmd (char *, Vaddr vaddr, hrtime_t ts)
+{
+ MapRecord *mrec = new MapRecord;
+ mrec->kind = MapRecord::UNLOAD;
+ mrec->base = vaddr;
+ mrec->ts = ts;
+ mrec_insert (mrec);
+ return 0;
+}
+
+void
+Experiment::register_metric (Metric::Type type)
+{
+ BaseMetric *mtr = dbeSession->register_metric (type);
+ metrics->append (mtr);
+}
+
+void
+Experiment::register_metric (Hwcentry *ctr, const char* aux, const char* uname)
+{
+ BaseMetric *mtr = dbeSession->register_metric (ctr, aux, uname);
+ metrics->append (mtr);
+ if (mtr->get_dependent_bm ())
+ metrics->append (mtr->get_dependent_bm ());
+}
+
+int
+Experiment::process_hwcounter_cmd (char *, int cpuver, char *counter,
+ char * int_name, int interval, int tag,
+ int i_tpc, char *modstr)
+{
+ char *str;
+ Emsg *m;
+ Hwcentry *ctr;
+ ABST_type tpc = (ABST_type) i_tpc;
+
+ // Use previously ignored tag to associate counter packets.
+ if (tag < 0 || tag >= MAX_HWCOUNT)
+ {
+ // invalid tag specified, warn user
+ str = dbe_sprintf (GTXT ("*** Error: HW counter tag %d out of range [%d - %d]; ignored"),
+ tag, 0, MAX_HWCOUNT - 1);
+ m = new Emsg (CMSG_ERROR, str);
+ free (str);
+ errorq->append (m);
+ free (counter);
+ return 0;
+ }
+ if (coll_params.hw_aux_name[tag])
+ {
+ // duplicate tag used, warn user
+ str = dbe_sprintf (GTXT ("*** Error: Duplicate HW counter tag %d specified; ignored"),
+ tag);
+ m = new Emsg (CMSG_ERROR, str);
+ free (str);
+ errorq->append (m);
+ free (counter);
+ return 0;
+ }
+ hw_cpuver = cpuver;
+
+ // map it to a machinemodel string
+ if (hw_cpuver != CPUVER_UNDEFINED)
+ {
+ free (machinemodel);
+ if (hw_cpuver == 1104)
+ machinemodel = dbe_strdup (NTXT ("t4"));
+ else if (hw_cpuver == 1110)
+ machinemodel = dbe_strdup (NTXT ("t5"));
+ else if (hw_cpuver == 1204)
+ machinemodel = dbe_strdup (NTXT ("m4"));
+ else if (hw_cpuver == 1210)
+ machinemodel = dbe_strdup (NTXT ("m5"));
+ else if (hw_cpuver == 1220)
+ machinemodel = dbe_strdup (NTXT ("m6"));
+ else if (hw_cpuver == 1230)
+ machinemodel = dbe_strdup (NTXT ("m7"));
+ else
+ machinemodel = dbe_strdup (NTXT ("generic"));
+ }
+
+ // Find the entry in the machine table, and dup it
+ ctr = new Hwcentry;
+ dbeSession->append (ctr);
+ hwc_post_lookup (ctr, counter, int_name, cpuver);
+ ctr->sort_order = tag;
+ ctr->memop = tpc;
+
+ // Check if HWC name is to be modified
+ if (modstr != NULL)
+ {
+ char *s = ctr->name;
+ ctr->name = dbe_sprintf (NTXT ("%s%s"), modstr, s);
+ s = ctr->int_name;
+ ctr->int_name = dbe_sprintf (NTXT ("%s%s"), modstr, s);
+ s = ctr->metric;
+ if (s)
+ ctr->metric = dbe_sprintf (NTXT ("%s%s"), modstr, s);
+ }
+
+ char * cname = dbe_strdup (ctr->name);
+ char * uname = dbe_strdup (hwc_i18n_metric (ctr));
+ coll_params.hw_aux_name[tag] = cname;
+ coll_params.hw_username[tag] = uname;
+ coll_params.hw_interval[tag] = interval;
+ coll_params.hw_tpc[tag] = tpc;
+ coll_params.hw_cpu_ver[tag] = cpuver;
+
+ // set hw_mode and xhw_mode?
+ coll_params.hw_mode = 1;
+ if (ABST_MEMSPACE_ENABLED (tpc))
+ {
+ // yes, dataspace data available
+ coll_params.xhw_mode = 1;
+
+ // set dataspace available
+ dataspaceavail = true;
+ }
+ register_metric (ctr, cname, uname);
+ free (counter);
+ return 0;
+}
+
+// TBR:?
+
+int
+Experiment::process_hwsimctr_cmd (char *, int cpuver, char *nm, char *int_name,
+ char *metric, int reg,
+ int interval, int timecvt, int i_tpc, int tag)
+{
+ char *str;
+ Emsg *m;
+ Hwcentry *ctr;
+ ABST_type tpc = (ABST_type) i_tpc;
+
+ // Use previously ignored tag to associate counter packets.
+ if (tag < 0 || tag >= MAX_HWCOUNT)
+ {
+ // invalid tag specified, warn user
+ str = dbe_sprintf (GTXT ("*** Error: HW counter tag %d out of range [%d - %d]; ignored"),
+ tag, 0, MAX_HWCOUNT - 1);
+ m = new Emsg (CMSG_ERROR, str);
+ free (str);
+ errorq->append (m);
+
+ free (nm);
+ free (int_name);
+ free (metric);
+ return 0;
+ }
+ if (coll_params.hw_aux_name[tag])
+ {
+ // duplicate tag used, warn user
+ str = dbe_sprintf (GTXT ("*** Error: Duplicate HW counter tag %d specified; ignored"),
+ tag);
+ m = new Emsg (CMSG_ERROR, str);
+ free (str);
+ errorq->append (m);
+ free (nm);
+ free (int_name);
+ free (metric);
+ return 0;
+ }
+ hw_cpuver = cpuver;
+ ctr = new Hwcentry;
+ {
+ static Hwcentry empty;
+ *ctr = empty;
+ }
+ ctr->name = nm;
+ ctr->int_name = int_name;
+ ctr->metric = metric;
+ ctr->reg_num = reg;
+ ctr->val = interval;
+ ctr->timecvt = timecvt;
+ ctr->memop = tpc;
+ ctr->sort_order = tag;
+
+ char *cname = dbe_strdup (ctr->name);
+ char *uname = dbe_strdup (hwc_i18n_metric (ctr));
+
+ coll_params.hw_aux_name[tag] = cname;
+ coll_params.hw_username[tag] = uname;
+ coll_params.hw_interval[tag] = interval;
+ coll_params.hw_tpc[tag] = tpc;
+ coll_params.hw_cpu_ver[tag] = cpuver;
+
+ // set hw_mode and xhw_mode?
+ coll_params.hw_mode = 1;
+ if (ABST_MEMSPACE_ENABLED (tpc))
+ {
+ coll_params.xhw_mode = 1;
+ // set dataspace available
+ if (getenv ("ANALYZER_DATASPACE_COUNT") != 0)
+ dataspaceavail = true;
+ }
+
+ register_metric (ctr, cname, uname);
+ return 0;
+}
+
+int
+Experiment::process_jcm_load_cmd (char *, Vaddr mid, Vaddr vaddr,
+ int msize, hrtime_t ts)
+{
+ if (jmaps == NULL)
+ return 1;
+
+ JMethod *jfunc = (JMethod*) jmaps->locate_exact_match (mid, ts);
+ if (jfunc == NULL || jfunc->get_type () != Histable::FUNCTION)
+ return 1;
+
+ LoadObject *ds = get_dynfunc_lo (JAVA_COMPILED_METHODS);
+ Module *jmodule = jfunc->module;
+ Module *dmodule = ds->noname;
+ if (jmodule)
+ {
+ dmodule = dbeSession->createModule (ds, jmodule->get_name ());
+ dmodule->lang_code = Sp_lang_java;
+ dmodule->set_file_name (dbe_strdup (jmodule->file_name));
+ }
+
+ JMethod *dfunc = dbeSession->createJMethod ();
+ dfunc->flags |= FUNC_FLAG_DYNAMIC;
+ dfunc->size = msize;
+ dfunc->module = dmodule;
+ dfunc->usrfunc = jfunc;
+ dfunc->set_addr (vaddr);
+ dfunc->set_mid (mid);
+ dfunc->set_signature (jfunc->get_signature ());
+ dfunc->set_name (jfunc->get_mangled_name ());
+ ds->functions->append (dfunc);
+ dmodule->functions->append (dfunc);
+ MapRecord *mrec = new MapRecord;
+ mrec->kind = MapRecord::LOAD;
+ mrec->obj = dfunc;
+ mrec->base = vaddr;
+ mrec->size = msize;
+ mrec->ts = ts;
+ mrec->foff = 0;
+ mrec_insert (mrec);
+ return 0;
+}
+
+int
+Experiment::process_jcm_unload_cmd (char *, Vaddr /*mid*/, hrtime_t /*ts*/)
+{
+ if (jmaps == NULL)
+ return 1;
+
+ // We are ignoring this record because of the flaw in
+ // JVMPI desing that doesn't distinguish between two or more
+ // compiled instances of a method when an unload event is
+ // generated:
+ // JVMPI_COMPILED_METHOD_LOAD( mid, addr1, ... )
+ // JVMPI_COMPILED_METHOD_LOAD( mid, addr2, ... )
+ // JVMPI_COMPILED_METHOD_UNLOAD( mid ) -- which one?
+ // We rely on the ability of the PRBTree algorithms to
+ // perform mapping appropriately based on timestamps.
+ return 0;
+}
+
+int
+Experiment::process_jthr_end_cmd (char *, uint64_t tid64, Vaddr jthr,
+ Vaddr jenv, hrtime_t ts)
+{
+ int lt = 0;
+ int rt = jthreads_idx->size () - 1;
+ uint32_t ttid = mapTagValue (PROP_THRID, tid64);
+ while (lt <= rt)
+ {
+ int md = (lt + rt) / 2;
+ JThread *jthread = jthreads_idx->fetch (md);
+ if (jthread->tid < ttid)
+ lt = md + 1;
+ else if (jthread->tid > ttid)
+ rt = md - 1;
+ else
+ {
+ for (; jthread; jthread = jthread->next)
+ {
+ if (jthread->jenv == jenv)
+ {
+ jthread->end = ts;
+ return 0;
+ }
+ }
+ return 0;
+ }
+ }
+ JThread *jthread = new JThread;
+ jthread->tid = mapTagValue (PROP_THRID, tid64);
+ jthread->jthr = jthr;
+ jthread->jenv = jenv;
+ jthread->jthr_id = jthreads->size ();
+ jthread->start = ZERO_TIME;
+ jthread->end = ts;
+ jthread->next = NULL;
+ jthreads->append (jthread);
+ if (lt == jthreads_idx->size ())
+ jthreads_idx->append (jthread);
+ else
+ jthreads_idx->insert (lt, jthread);
+ return 0;
+}
+
+int
+Experiment::process_jthr_start_cmd (char *, char *thread_name, char *group_name,
+ char *parent_name, uint64_t tid64,
+ Vaddr jthr, Vaddr jenv, hrtime_t ts)
+{
+ JThread *jthread = new JThread;
+ jthread->name = thread_name;
+ jthread->group_name = group_name;
+ jthread->parent_name = parent_name;
+ jthread->tid = mapTagValue (PROP_THRID, tid64);
+ jthread->jthr = jthr;
+ jthread->jenv = jenv;
+ jthread->jthr_id = jthreads->size ();
+ jthread->start = ts;
+ jthread->end = MAX_TIME;
+ jthread->next = NULL;
+
+ jthreads->append (jthread);
+
+ int lt = 0;
+ int rt = jthreads_idx->size () - 1;
+ while (lt <= rt)
+ {
+ int md = (lt + rt) / 2;
+ JThread *jtmp = jthreads_idx->fetch (md);
+ if (jtmp->tid < jthread->tid)
+ lt = md + 1;
+ else if (jtmp->tid > jthread->tid)
+ rt = md - 1;
+ else
+ {
+ jthread->next = jtmp;
+ jthreads_idx->store (md, jthread);
+ return 0;
+ }
+ }
+ if (lt == jthreads_idx->size ())
+ jthreads_idx->append (jthread);
+ else
+ jthreads_idx->insert (lt, jthread);
+ return 0;
+}
+
+int
+Experiment::process_gc_end_cmd (
+ hrtime_t ts)
+{
+ if (gcevents->size () == 0)
+ {
+ GCEvent *gcevent = new GCEvent;
+ gcevent->start = ZERO_TIME;
+ gcevent->end = ts;
+ gcevent->id = gcevents->size () + 1;
+ gcevents->append (gcevent);
+ return 0;
+ }
+ GCEvent *gcevent = gcevents->fetch (gcevents->size () - 1);
+ if (gcevent->end == MAX_TIME)
+ gcevent->end = ts;
+ else
+ // Weird: gc_end followed by another gc_end
+ gcevent->end = ts; // extend the previous event
+ return 0;
+}
+
+int
+Experiment::process_gc_start_cmd (
+ hrtime_t ts)
+{
+ if (gcevents->size () != 0)
+ {
+ GCEvent *gcevent = gcevents->fetch (gcevents->size () - 1);
+ // Weird: gc_start followed by another gc_start
+ if (gcevent->end == MAX_TIME)
+ return 0; // ignore nested gc_starts
+ }
+ GCEvent *gcevent = new GCEvent;
+ gcevent->start = ts;
+ gcevent->end = MAX_TIME;
+ gcevent->id = gcevents->size () + 1;
+ gcevents->append (gcevent);
+ return 0;
+}
+
+int
+Experiment::process_sample_cmd (char */*cmd*/, hrtime_t /*log_xml_time*/,
+ int sample_number, char *label)
+{
+ // sample 0 is not a sample but the starting point
+ if (sample_number == 0)
+ {
+ first_sample_label = label;
+ return 0;
+ }
+ Sample *prev_sample = samples->size () > 0 ?
+ samples->fetch (samples->size () - 1) : NULL;
+ char *start_lable = prev_sample ?
+ prev_sample->end_label : first_sample_label;
+ Sample *sample = new Sample (sample_number);
+ sample->start_label = dbe_strdup (start_lable);
+ sample->end_label = label;
+ samples->append (sample);
+ return 0;
+}
+
+int
+Experiment::process_sample_sig_cmd (char *, int sig)
+{
+ char *str;
+ Emsg *m;
+ str = dbe_sprintf (GTXT ("Sample signal %d"), sig);
+ m = new Emsg (CMSG_COMMENT, str);
+ free (str);
+ runlogq->append (m);
+ return 0;
+}
+
+int
+Experiment::process_seg_map_cmd (char */*cmd*/, hrtime_t ts, Vaddr vaddr,
+ int mapsize, int /*pagesize*/, int64_t offset,
+ int64_t modeflags, int64_t chk, char *nm)
+{
+ if (nm == NULL ||
+ strncmp (nm + 1, SP_MAP_UNRESOLVABLE, strlen (SP_MAP_UNRESOLVABLE)) == 0)
+ return 0;
+
+ LoadObject *lo = loadObjMap->get (nm);
+ if (lo == NULL)
+ {
+ if (chk == 0)
+ {
+ char *archName = checkFileInArchive (nm, false);
+ if (archName)
+ {
+ Elf *elf = new Elf (archName);
+ if (elf->status == Elf::ELF_ERR_NONE)
+ {
+ chk = elf->elf_checksum ();
+ }
+ free (archName);
+ delete elf;
+ }
+ }
+ lo = dbeSession->find_lobj_by_name (nm, chk);
+ if (lo == NULL)
+ {
+ // Skip non-text segments
+ if (modeflags != (PROT_READ | PROT_EXEC))
+ return 0;
+ // A new segment
+ lo = createLoadObject (nm, chk);
+ if (strstr (nm, NTXT ("libjvm.so")))
+ {
+ lo->flags |= SEG_FLAG_JVM;
+ // Make sure <JVM-System> is created
+ (void) dbeSession->get_jvm_Function ();
+ }
+ else if (strstr (nm, NTXT ("libmtsk.so")))
+ {
+ lo->flags |= SEG_FLAG_OMP;
+ // Make sure all pseudo functions are created
+ for (int i = 0; i < OMP_LAST_STATE; i++)
+ (void) dbeSession->get_OMP_Function (i);
+ }
+ else if (dbe_strcmp (utargname, get_basename (nm)) == 0)
+ {
+ lo->flags |= SEG_FLAG_EXE;
+ (void) dbeSession->comp_lobjs->get ((char *) COMP_EXE_NAME, lo);
+ }
+ lo->checksum = chk;
+ // This is the default segment type
+ lo->type = LoadObject::SEG_TEXT;
+ lo->flags = lo->flags | SEG_FLAG_REORDER;
+ lo->set_platform (platform, wsize);
+ }
+ if (lo->dbeFile->get_location (false) == NULL)
+ {
+ char *archName = checkFileInArchive (nm, false);
+ if (archName)
+ {
+ lo->dbeFile->set_location (archName);
+ lo->dbeFile->inArchive = true;
+ lo->dbeFile->check_access (archName); // init 'sbuf'
+ lo->dbeFile->sbuf.st_mtime = 0; // Don't check timestamps
+ free (archName);
+ }
+ else
+ {
+ archName = checkFileInArchive (nm, true);
+ if (archName)
+ {
+ lo->set_archname (archName);
+ lo->need_swap_endian = need_swap_endian;
+ }
+ }
+ if (!dbeSession->archive_mode)
+ lo->sync_read_stabs ();
+ }
+ append (lo);
+ }
+ if (lo->size == 0)
+ lo->size = mapsize;
+ MapRecord *mrec = new MapRecord;
+ mrec->kind = MapRecord::LOAD;
+ mrec->obj = lo;
+ mrec->base = vaddr;
+ mrec->size = mapsize;
+ mrec->ts = ts;
+ mrec->foff = offset;
+ mrec_insert (mrec);
+ return 0;
+}
+
+int
+Experiment::process_seg_unmap_cmd (char */*cmd*/, hrtime_t ts, Vaddr vaddr)
+{
+ MapRecord *mrec = new MapRecord;
+ mrec->kind = MapRecord::UNLOAD;
+ mrec->base = vaddr;
+ mrec->ts = ts;
+ mrec_insert (mrec);
+ return 0;
+}
+
+int
+Experiment::process_Linux_kernel_cmd (hrtime_t ts)
+{
+ LoadObject *lo = createLoadObject ("LinuxKernel");
+ lo->flags |= SEG_FLAG_EXE;
+ lo->type = LoadObject::SEG_TEXT;
+ lo->set_platform (platform, wsize);
+ append (lo);
+ long long unsigned lo_min = (long long unsigned) (-1);
+ long long unsigned lo_max = 0;
+ Module *mod = dbeSession->createModule (lo, "LinuxKernel");
+ /*
+ * XXX need to review mod initialization
+ * A specific issue is mod->file_name. Options include:
+ * *) NULL
+ * This leads to seg faults in, e.g., Timeline view.
+ * *) "/lib/modules/$(uname -r)/kernel/kernel/ctf/ctf.ko"
+ * This leads to garbage in the Source view.
+ * *) "/boot/vmlinuz-$(uname -r)"
+ * This cannot be parsed for DWARF and is sometimes not found,
+ * but the Analyzer seems to handle such problems.
+ * *) "LinuxKernel"
+ * This is not a proper file name,
+ * but again Analyzer handles the case of not finding the file or not reading DWARF from it.
+ */
+ mod->set_file_name (dbe_strdup ("LinuxKernel"));
+ char last_mod_name[256];
+ last_mod_name[0] = '\0';
+ size_t line_n = 0;
+ char *line = NULL;
+ char kallmodsyms_copy[MAXPATHLEN];
+ snprintf (kallmodsyms_copy, sizeof (kallmodsyms_copy), "%s/kallmodsyms",
+ expt_name);
+ FILE *fd = fopen (kallmodsyms_copy, "r");
+ if (fd == NULL)
+ {
+ char *s = dbe_sprintf (GTXT ("*** Error: Cannot find kernel module symbols file %s; ignored"),
+ kallmodsyms_copy);
+ Emsg *m = new Emsg (CMSG_ERROR, s);
+ free (s);
+ errorq->append (m);
+ lo_min = 0;
+ }
+ else
+ {
+ while (getline (&line, &line_n, fd) > 0)
+ {
+ long long unsigned sym_addr;
+ long long unsigned sym_size;
+ char sym_type;
+ int sym_text;
+ char sym_name[256];
+ char mod_name[256] = "vmlinux]"; /* note trailing ] */
+ sscanf (line, "%llx %llx %c %s [%s", &sym_addr, &sym_size, &sym_type,
+ sym_name, mod_name);
+ if (line[0] == '\n' || line[0] == 0)
+ continue;
+ sym_text = (sym_type == 't' || sym_type == 'T');
+ mod_name[strlen (mod_name) - 1] = '\0'; /* chop trailing ] */
+ if (strcmp (mod_name, "ctf") == 0)
+ strcpy (mod_name, "shared_ctf");
+
+ char *mod_name_ptr;
+ int skip;
+#define strstarts(var, x) (strncmp(var, x, strlen (x)) == 0)
+ if (strcmp (sym_name, "__per_cpu_start") == 0
+ || strcmp (sym_name, "__per_cpu_end") == 0
+ || strstarts (sym_name, "__crc_")
+ || strstarts (sym_name, "__ksymtab_")
+ || strstarts (sym_name, "__kcrctab_")
+ || strstarts (sym_name, "__kstrtab_")
+ || strstarts (sym_name, "__param_")
+ || strstarts (sym_name, "__syscall_meta__")
+ || strstarts (sym_name, "__p_syscall_meta__")
+ || strstarts (sym_name, "__event_")
+ || strstarts (sym_name, "event_")
+ || strstarts (sym_name, "ftrace_event_")
+ || strstarts (sym_name, "types__")
+ || strstarts (sym_name, "args__")
+ || strstarts (sym_name, "__tracepoint_")
+ || strstarts (sym_name, "__tpstrtab_")
+ || strstarts (sym_name, "__tpstrtab__")
+ || strstarts (sym_name, "__initcall_")
+ || strstarts (sym_name, "__setup_")
+ || strstarts (sym_name, "__pci_fixup_")
+ || strstarts (sym_name, "__dta_")
+ || strstarts (sym_name, "__dtrace_probe_")
+ || (strstr (sym_name, ".") != NULL
+ && strstr (sym_name, ".clone.") == NULL))
+ {
+ mod_name_ptr = last_mod_name;
+ skip = 1;
+ }
+ else
+ {
+ mod_name_ptr = mod_name;
+ skip = 0;
+ }
+#undef strstarts
+
+ if (sym_text && skip == 0)
+ {
+ char fname[128];
+ snprintf (fname, sizeof (fname), "%s`%s", mod_name_ptr, sym_name);
+ Function *func = dbeSession->createFunction ();
+ func->set_name (fname);
+ // func->flags |= FUNC_FLAG_???; // XXX
+ func->size = sym_size;
+ func->img_offset = sym_addr;
+ func->module = mod;
+ lo->functions->append (func);
+ mod->functions->append (func);
+ if (lo_min > sym_addr)
+ lo_min = sym_addr;
+ if (lo_max < sym_addr + sym_size)
+ lo_max = sym_addr + sym_size;
+ }
+ sprintf (last_mod_name, mod_name_ptr);
+ }
+ fclose (fd);
+ }
+ free (line);
+ lo->size = lo_max;
+ lo->functions->sort (func_cmp);
+ mod->functions->sort (func_cmp);
+
+ MapRecord *mrec = new MapRecord;
+ mrec->kind = MapRecord::LOAD;
+ mrec->obj = lo;
+ mrec->base = lo_min;
+ mrec->size = lo_max - lo_min;
+ mrec->ts = ts;
+ mrec->foff = lo_min;
+ mrec_insert (mrec);
+ return 0;
+}
diff --git a/gprofng/src/stab.h b/gprofng/src/stab.h
new file mode 100644
index 00000000000..46101052132
--- /dev/null
+++ b/gprofng/src/stab.h
@@ -0,0 +1,205 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+/*
+ * This file gives definitions supplementing <a.out.h>
+ * for debugging symbol table entries.
+ * These entries must have one of the N_STAB bits on,
+ * and are subject to relocation according to the masks in <a.out.h>
+ * on 4.x (stabs not relocated on SVR4).
+ */
+
+#ifndef _STAB_H
+#define _STAB_H
+
+/* this file also contains fragments of a.out.h relevant to
+ * support of stab processing within ELF files
+ * (when a.out.h is not available)
+ */
+struct stab
+{
+ unsigned n_strx; /* index into file string table */
+ unsigned char n_type; /* type flag (N_TEXT,..) */
+ char n_other; /* used by N_SLINE stab */
+ short n_desc; /* see stabs documentation */
+ unsigned n_value; /* value of symbol (or sdb offset) */
+};
+
+/* patchtypes for N_PATCH stab (n_desc field) */
+#define P_BITFIELD 0x1
+#define P_SPILL 0x2
+#define P_SCOPY 0x3
+
+/* markers for N_CODETAG stab (n_other field) */
+#define CODETAG_BITFIELD 0x1 /* load/store of a bit field */
+#define CODETAG_SPILL 0x2 /* spill of registers */
+#define CODETAG_SCOPY 0x3 /* structure copy load/store */
+#define CODETAG_FSTART 0x4 /* points to first inst of new frame (0==leaf)*/
+#define CODETAG_END_CTORS 0x5 /* end of calls to super-class constructors */
+/* UNUSED 0x6 DW_ATCF_SUN_branch_target in dwarf, not used in stabs */
+#define CODETAG_STACK_PROBE 0x7 /* marks insns which probe the stack memory */
+
+/*
+ * Simple values for n_type.
+ */
+#define N_UNDF 0x0 /* undefined */
+#define N_ABS 0x2 /* absolute */
+#define N_TEXT 0x4 /* text */
+#define N_DATA 0x6 /* data */
+#define N_BSS 0x8 /* bss */
+#define N_COMM 0x12 /* common (internal to ld) */
+#define N_FN 0x1f /* file name symbol */
+#define N_EXT 01 /* external bit, or'ed in */
+#define N_TYPE 0x1e /* mask for all the type bits */
+
+/*
+ * maximum length of stab string before using continuation stab.
+ * (this is just a suggested limit), assembler has no limit.
+ */
+#define MAX_STAB_STR_LEN 250
+
+/*
+ * for symbolic debuggers:
+ */
+#define N_GSYM 0x20 /* global symbol: name,,0,type,0 */
+#define N_FNAME 0x22 /* procedure name (f77 kludge): name,,0 */
+#define N_FUN 0x24 /* procedure: name,,0,linenumber,0 */
+#define N_OUTL 0x25 /* outlined func: name,,0,linenumber,0 */
+#define N_STSYM 0x26 /* static symbol: name,,0,type,0 or section relative */
+#define N_TSTSYM 0x27 /* thread static symbol: Ttdata.data */
+#define N_LCSYM 0x28 /* .lcomm symbol: name,,0,type,0 or section relative */
+#define N_TLCSYM 0x29 /* thread local symbol: Ttbss.bss */
+#define N_MAIN 0x2a /* name of main routine : name,,0,0,0 */
+#define N_ROSYM 0x2c /* ro_data: name,,0,type,0 or section relative */
+#define N_FLSYM 0x2e /* fragmented data: name,,0,type,0 */
+#define N_TFLSYM 0x2f /* thread fragmented data: name,,0,type,0 */
+#define N_PC 0x30 /* global pascal symbol: name,,0,subtype,line */
+#define N_CMDLINE 0x34 /* command line info */
+#define N_OBJ 0x38 /* object file path or name */
+#define N_OPT 0x3c /* compiler options */
+#define N_RSYM 0x40 /* register sym: name,,0,type,register */
+#define N_SLINE 0x44 /* src line: 0,,0,linenumber,function relative */
+#define N_XLINE 0x45 /* h.o. src line: 0,,0,linenumber>>16,0 */
+#define N_ILDPAD 0x4c /* now used as ild pad stab value=strtab delta
+ * was designed for "function start.end" */
+#define N_SSYM 0x60 /* structure elt: name,,0,type,struct_offset */
+#define N_ENDM 0x62 /* last stab emitted for object module */
+#define N_SO 0x64 /* source file name: name,,0,0,0 */
+#define N_MOD 0x66 /* f90 module: name,,0,0,0 */
+#define N_EMOD 0x68 /* end of f90 module: name,,0,0,0 */
+#define N_READ_MOD 0x6a /* use of f90 module: name;locallist,,0,0,0 */
+#define N_ALIAS 0x6c /* alias name: name,,0,0,0 */
+#define N_LSYM 0x80 /* local sym: name,,0,type,offset */
+#define N_BINCL 0x82 /* header file: name,,0,0,0 */
+#define N_SOL 0x84 /* #included file name: name,,0,0,0 */
+#define N_PSYM 0xa0 /* parameter: name,,0,type,offset */
+#define N_EINCL 0xa2 /* end of include file */
+#define N_ENTRY 0xa4 /* alternate entry: name,linenumber,0 */
+#define N_SINCL 0xa6 /* shared include file */
+#define N_LBRAC 0xc0 /* left bracket: 0,,0,nesting level,function relative */
+#define N_EXCL 0xc2 /* excluded include file */
+#define N_USING 0xc4 /* C++ using command */
+#define N_ISYM 0xc6 /* position independent type symbol, internal */
+#define N_ESYM 0xc8 /* position independent type symbol, external */
+#define N_PATCH 0xd0 /* Instruction to be ignored by run-time checking. */
+#define N_CONSTRUCT 0xd2 /* C++ constructor call. */
+#define N_DESTRUCT 0xd4 /* C++ destructor call. */
+#define N_CODETAG 0xd8 /* Generic code tag */
+#define N_FUN_CHILD 0xd9 /* Identifies a child function */
+#define N_RBRAC 0xe0 /* right bracket: 0,,0,nesting level,function relative */
+#define N_BCOMM 0xe2 /* begin common: name,, */
+#define N_TCOMM 0xe3 /* begin task common: name,, */
+#define N_ECOMM 0xe4 /* end task_common/common: name,, */
+#define N_XCOMM 0xe6 /* excluded common block */
+#define N_ECOML 0xe8 /* end common (local name): ,,address */
+#define N_WITH 0xea /* pascal with statement: type,,0,0,offset */
+#define N_LENG 0xfe /* second stab entry with length information */
+
+/*
+ * for analyzer (cache profile feedback support)
+ */
+#define N_CPROF 0xf0 /* annotation for cache profile feedback */
+
+/*
+ * n_descr values used in N_CPROF stabs. The n_descr field of
+ * an N_CPROF stab identifies the type of table whose location
+ * is defined by the N_CPROF stab.
+ */
+typedef enum n_cprof_instr_type_t
+{
+ N_CPROF_INSTR_TYPE_LOAD = 0, /* profiled load ops */
+ N_CPROF_INSTR_TYPE_STORE, /* profiled store ops */
+ N_CPROF_INSTR_TYPE_PREFETCH, /* profiled prefetch ops */
+ N_CPROF_INSTR_TYPE_BRTARGET, /* branch target locations */
+ N_CPROF_INSTR_TYPE_NTYPES /* number of types */
+} n_cprof_instr_type_t;
+
+/*
+ * for code browser only
+ */
+#define N_BROWS 0x48 /* path to associated .cb file */
+
+/*
+ * for functions -- n_other bits for N_FUN stab
+ */
+#define N_FUN_PURE (1 << 0)
+#define N_FUN_ELEMENTAL (1 << 1)
+#define N_FUN_RECURSIVE (1 << 2)
+#define N_FUN_AMD64_PARMDUMP (1 << 3)
+
+/*
+ * for variables -- n_other bits for N_LSYM, N_GSYM, N_LCSYM, N_STSYM, ...
+ */
+#define N_SYM_OMP_TLS (1 << 3)
+
+/*
+ * Optional language designations for N_SO (n_desc field)
+ */
+#define N_SO_AS 1 /* Assembler */
+#define N_SO_C 2 /* C */
+#define N_SO_ANSI_C 3 /* ANSI C */
+#define N_SO_CC 4 /* C++ */
+#define N_SO_FORTRAN 5 /* Fortran 77 */
+#define N_SO_FORTRAN77 5 /* Fortran 77 */
+#define N_SO_PASCAL 6 /* Pascal */
+#define N_SO_FORTRAN90 7 /* Fortran 90 */
+#define N_SO_JAVA 8 /* Java */
+#define N_SO_C99 9 /* C99 */
+
+/*
+ * Floating point type values (encoded in "R" type specification string)
+ */
+#define NF_NONE 0 /* Undefined type */
+#define NF_SINGLE 1 /* Float IEEE 32 bit floating point */
+#define NF_DOUBLE 2 /* Double IEEE 64 bit floating point */
+#define NF_COMPLEX 3 /* Complex (2 32bit floats) */
+#define NF_COMPLEX16 4 /* Complex (2 64bit doubles) */
+#define NF_COMPLEX32 5 /* Complex (2 128bit long doubles) */
+#define NF_LDOUBLE 6 /* Long double 128 bit floating point */
+#define NF_INTERARITH 7 /* Interval (2 32bit floats) */
+#define NF_DINTERARITH 8 /* Interval (2 64bit doubles) */
+#define NF_QINTERARITH 9 /* Interval (2 128bit long doubles) */
+#define NF_IMAGINARY 10 /* Imaginary (1 32bit floats) */
+#define NF_DIMAGINARY 11 /* Imaginary (1 64bit doubles) */
+#define NF_QIMAGINARY 12 /* Imaginary (1 128bit long doubles) */
+
+#endif
+
+
diff --git a/gprofng/src/util.cc b/gprofng/src/util.cc
new file mode 100644
index 00000000000..b93deafd9d2
--- /dev/null
+++ b/gprofng/src/util.cc
@@ -0,0 +1,1582 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "config.h"
+#include <sys/param.h>
+#include <stdarg.h>
+#include <unistd.h>
+#include <dirent.h> // readdir()
+#include <sys/param.h> // MAXPATHLEN
+#include <pthread.h> // mutex
+#include <libgen.h> // dirname
+#include <sys/types.h> // open
+#include <sys/stat.h> // open
+#include <errno.h> // errno
+#include <fcntl.h> // open
+
+#include "util.h"
+#include "dbe_structs.h"
+#include "StringBuilder.h"
+#include "StringMap.h" // For directory names
+#include "Application.h" // Only for get_prog_name
+#include "vec.h"
+
+void
+tsadd (timestruc_t *result, timestruc_t *time)
+{
+ // This routine will add "time" to "result".
+ result->tv_sec += time->tv_sec;
+ result->tv_nsec += time->tv_nsec;
+ if (result->tv_nsec >= NANOSEC)
+ {
+ result->tv_nsec -= NANOSEC;
+ result->tv_sec++;
+ }
+}
+
+void
+tssub (timestruc_t *result, timestruc_t *time1, timestruc_t *time2)
+{
+ // This routine will store "time1" - "time2" in "result".
+
+ if (time1->tv_nsec >= time2->tv_nsec)
+ {
+ result->tv_nsec = time1->tv_nsec - time2->tv_nsec;
+ if (time1->tv_sec >= time2->tv_sec)
+ result->tv_sec = time1->tv_sec - time2->tv_sec;
+ else
+ {
+ result->tv_sec = -1;
+ result->tv_nsec = 0;
+ }
+ }
+ else
+ {
+ result->tv_nsec = time1->tv_nsec + NANOSEC - time2->tv_nsec;
+ if (time1->tv_sec - 1 >= time2->tv_sec)
+ result->tv_sec = time1->tv_sec - 1 - time2->tv_sec;
+ else
+ {
+ result->tv_sec = -1;
+ result->tv_nsec = 0;
+ }
+ }
+}
+
+int
+tscmp (timestruc_t *time1, timestruc_t *time2)
+{
+ // This routine will return 1 if "time1" is greater than "time2"
+ // and 0 if "time1" is equal to "time2" and -1 otherwise.
+ if (time1->tv_sec == time2->tv_sec)
+ return time1->tv_nsec > time2->tv_nsec ? 1 :
+ time1->tv_nsec == time2->tv_nsec ? 0 : -1;
+ else
+ return time1->tv_sec > time2->tv_sec ? 1 : -1;
+}
+
+void
+int_max (int *maximum, int count)
+{
+ if (count > *maximum)
+ *maximum = count;
+}
+
+double
+TValue::to_double ()
+{
+ switch (tag)
+ {
+ case VT_DOUBLE:
+ return (double) d;
+ case VT_INT:
+ return (double) i;
+ case VT_ULLONG:
+ return (double) ull;
+ case VT_LLONG:
+ case VT_ADDRESS:
+ return (double) ll;
+ case VT_FLOAT:
+ return (double) f;
+ case VT_SHORT:
+ return (double) s;
+ default:
+ return 0.0;
+ }
+}
+
+int
+TValue::to_int ()
+{
+ switch (tag)
+ {
+ case VT_DOUBLE:
+ return (int) d;
+ case VT_INT:
+ return (int) i;
+ case VT_ULLONG:
+ return (int) ull;
+ case VT_LLONG:
+ case VT_ADDRESS:
+ return (int) ll;
+ case VT_FLOAT:
+ return (int) f;
+ case VT_SHORT:
+ return (int) s;
+ default:
+ return 0;
+ }
+}
+
+size_t
+TValue::get_len ()
+{
+ char buf[256];
+ return strlen (to_str (buf, sizeof (buf)));
+}
+
+char *
+TValue::to_str (char *str, size_t strsz)
+{
+ switch (tag)
+ {
+ case VT_DOUBLE:
+ if (d == 0.)
+ {
+ if (sign)
+ snprintf (str, strsz, NTXT ("+0. "));
+ else
+ snprintf (str, strsz, NTXT ("0. "));
+ }
+ else if (sign)
+ snprintf (str, strsz, NTXT ("%+.3lf"), d);
+ else
+ snprintf (str, strsz, NTXT ("%.3lf"), d);
+ break;
+ case VT_INT:
+ snprintf (str, strsz, NTXT ("%u"), i);
+ break;
+ case VT_LLONG:
+ if (sign)
+ snprintf (str, strsz, NTXT ("%+lld"), ll);
+ else
+ snprintf (str, strsz, NTXT ("%lld"), ll);
+ break;
+ case VT_ULLONG:
+ snprintf (str, strsz, NTXT ("%llu"), ll);
+ break;
+ case VT_ADDRESS:
+ snprintf (str, strsz, NTXT ("%u:0x%08x"), ADDRESS_SEG (ll), ADDRESS_OFF (ll));
+ break;
+ case VT_FLOAT:
+ snprintf (str, strsz, NTXT ("%.3f"), f);
+ break;
+ case VT_SHORT:
+ snprintf (str, strsz, NTXT ("%hu"), s);
+ break;
+ case VT_LABEL:
+ return l; // 'str' is not used !!!
+ default:
+ *str = '\0';
+ break;
+ }
+
+ return str;
+}
+
+void
+TValue::make_delta (TValue *v1, TValue *v2)
+{
+ assert (v1->tag == v2->tag);
+ tag = v1->tag;
+ sign = true;
+ switch (v1->tag)
+ {
+ case VT_INT:
+ i = v1->i - v2->i;
+ break;
+ case VT_LLONG:
+ ll = v1->ll - v2->ll;
+ break;
+ case VT_ULLONG:
+ case VT_ADDRESS:
+ tag = VT_LLONG;
+ ll = (long long) (v1->ull - v2->ull);
+ break;
+ case VT_FLOAT:
+ f = v1->f - v2->f;
+ break;
+ case VT_DOUBLE:
+ d = v1->d - v2->d;
+ break;
+ default:
+ assert (0);
+ break;
+ }
+}
+
+void
+TValue::make_ratio (TValue *v1, TValue *v2)
+{
+ assert (v1->tag == v2->tag);
+ double x1 = v1->to_double ();
+ double x2 = v2->to_double ();
+ sign = false;
+ if (x1 == 0.)
+ {
+ // if the numerator is 0, the ratio is 1. or 0. only
+ d = (x2 == 0.) ? 1. : 0.;
+ tag = VT_DOUBLE;
+ }
+ else
+ {
+ // EUGENE replace 99.999 with a variable that is known by both DBE and GUI
+ if (x1 > 99.999 * x2)
+ {
+ l = dbe_strdup (">99.999");
+ tag = VT_LABEL;
+ }
+ else if (x1 < -99.999 * x2)
+ {
+ l = dbe_strdup ("<-99.999");
+ tag = VT_LABEL;
+ }
+ else
+ {
+ d = x1 / x2;
+ tag = VT_DOUBLE;
+ }
+ }
+}
+
+int
+TValue::compare (TValue *v)
+{
+ if (tag != v->tag)
+ { // Only for comparison (Ratio)
+ if (tag == VT_LABEL)
+ {
+ if (v->tag == VT_LABEL)
+ return strcoll (l, v->l);
+ return 1;
+ }
+ if (v->tag == VT_LABEL)
+ return -1;
+ return ll < v->ll ? -1 : (ll == v->ll ? 0 : 1);
+ }
+ switch (tag)
+ {
+ case VT_SHORT:
+ return s < v->s ? -1 : (s == v->s ? 0 : 1);
+ case VT_INT:
+ return i < v->i ? -1 : (i == v->i ? 0 : 1);
+ case VT_FLOAT:
+ return f < v->f ? -1 : (f == v->f ? 0 : 1);
+ case VT_DOUBLE:
+ return d < v->d ? -1 : (d == v->d ? 0 : 1);
+ case VT_LABEL:
+ return strcoll (l, v->l);
+ case VT_LLONG:
+ case VT_ULLONG:
+ case VT_ADDRESS:
+ case VT_HRTIME:
+ default:
+ return (ll < v->ll) ? -1 : ((ll == v->ll) ? 0 : 1);
+ }
+}
+
+char *
+strstr_r (char *s1, const char *s2)
+{
+ char *str = NULL;
+ for (char *s = s1; s;)
+ {
+ s = strstr (s, s2);
+ if (s)
+ {
+ str = s;
+ s++;
+ }
+ }
+ return str;
+}
+
+// reversal order of strpbrk
+
+char *
+strrpbrk (const char *string, const char *brkset)
+{
+ const char *p;
+ const char *s;
+ for (s = string + strlen (string) - 1; s >= string; s--)
+ {
+ for (p = brkset; *p != '\0' && *p != *s; ++p)
+ ;
+ if (*p != '\0')
+ return ((char *) s);
+ }
+ return NULL;
+}
+
+char *
+read_line (FILE *fptr)
+{
+ // get an input line, no size limit
+ int line_sz = 128; // starting size
+ char *line = (char *) malloc (line_sz);
+
+ // read as much of the line as will fit in memory
+ line[0] = 0;
+ int len = 0;
+ for (;;)
+ {
+ while (fgets (line + len, line_sz - len, fptr) != NULL)
+ {
+ len = (int) strlen (line);
+ if (len == 0 || line[len - 1] == '\n')
+ break;
+ // increase the buffer
+ char *lineNew = (char *) malloc (2 * line_sz);
+ strncpy (lineNew, line, line_sz);
+ lineNew[line_sz] = '\0';
+ free (line);
+ line = lineNew;
+ line_sz *= 2;
+ if (line == NULL)
+ {
+ fprintf (stderr, GTXT (" Line too long -- out of memory; exiting\n"));
+ exit (1);
+ }
+ }
+ if (len == 0)
+ {
+ free (line);
+ return NULL;
+ }
+ // see if there's a continuation line
+ if ((len >= 2) && (line[len - 1] == '\n') && (line[len - 2] == '\\'))
+ {
+ // remove the trailing \ and the \n, and keep going
+ line[len - 2] = 0;
+ len -= 2;
+ }
+ else
+ break;
+ }
+ return line; // expecting the caller to free it
+}
+
+Vector<char *> *
+split_str (char *str, char delimiter)
+{
+ Vector<char *> *v = new Vector<char *>;
+ for (char *s = str; s;)
+ {
+ if (*s == '"')
+ {
+ char *next_s = NULL;
+ char *tok = parse_qstring (s, &next_s);
+ if (tok && *tok != '\0')
+ v->append (tok);
+ if (*next_s)
+ s = next_s + 1;
+ else
+ s = NULL;
+ }
+ else
+ {
+ char *next_s = strchr (s, delimiter);
+ if (next_s)
+ {
+ if (next_s != s)
+ v->append (dbe_strndup (s, next_s - s));
+ s = next_s + 1;
+ }
+ else
+ {
+ if (*s != '\0')
+ v->append (dbe_strdup (s));
+ s = NULL;
+ }
+ }
+ }
+ return v;
+}
+
+// get quoted string
+char *
+parse_qstring (char *in_str, char **endptr)
+{
+ int i;
+ char c, c2;
+ char term;
+ char csnum[2 * MAXPATHLEN];
+
+ // Skip any leading blanks or tabs
+ while (*in_str == '\t' || *in_str == ' ')
+ in_str++;
+
+ int gtxt = 0;
+ if (*in_str == 'G' && *(in_str + 1) == 'T' && *(in_str + 2) == 'X'
+ && *(in_str + 3) == 'T' && *(in_str + 4) == '(')
+ {
+ gtxt = 1;
+ in_str += 5;
+ }
+ // non-quoted string
+ if (*in_str == '"')
+ term = '"';
+ else if (*in_str == '\'')
+ term = '\'';
+ else
+ return strtok_r (in_str, NTXT (" "), endptr);
+
+ StringBuilder sb;
+ while ((c = *(++in_str)) != '\0')
+ {
+ if (c == term) // the closing quote
+ break;
+ if (c == '\\')
+ { // handle any escaped characters
+ c2 = *(++in_str);
+ switch (c2)
+ {
+ case '\"':
+ sb.append ('\"');
+ break;
+ case '\'':
+ sb.append ('\'');
+ break;
+ case '\\':
+ sb.append ('\\');
+ break;
+ case 't':
+ sb.append ('\t');
+ break;
+ case 'r':
+ sb.append ('\r');
+ break;
+ case 'b':
+ sb.append ('\b');
+ break;
+ case 'f':
+ sb.append ('\f');
+ break;
+ case 'n':
+ sb.append ('\n');
+ break;
+ default:
+ if ((c2 >= '0') && (c2 <= '9'))
+ {
+ for (i = 0; i < MAXPATHLEN; i++)
+ {
+ if (((c2 < '0') || (c2 > '9')) && (c2 != 'x') &&
+ ((c2 < 'a') || (c2 > 'f')) &&
+ ((c2 < 'A') || (c2 > 'F')))
+ {
+ csnum[i] = '\0';
+ --in_str;
+ break;
+ }
+ else
+ {
+ csnum[i] = c2;
+ c2 = *(++in_str);
+ }
+ }
+ sb.append ((char) strtoul (csnum, endptr, 0));
+ }
+ else
+ sb.append (c2);
+ break;
+ }
+ }
+ else
+ sb.append (c);
+ }
+ if (c == term && gtxt && *in_str == ')')
+ in_str++;
+ if (*in_str == '\0')
+ *endptr = in_str;
+ else
+ *endptr = in_str + 1;
+ return sb.toString ();
+}
+
+// parse a file name of the form name`name2`
+// returns name
+// stores the pointer to named in fcontext
+// returns NULL if the string is not properly formatted
+char *
+parse_fname (char *in_str, char **fcontext)
+{
+ *fcontext = NULL;
+ int ch = '`';
+ if (in_str == NULL)
+ return NULL;
+ char *copy = strdup (in_str);
+ char *p = strchr (copy, ch);
+ if (p != NULL)
+ {
+ // yes, there's an embedded file name
+ *p = '\0';
+ p++;
+ // now find the terminating single quote
+ char *p1 = strchr (p, ch);
+ if (p1 == NULL)
+ {
+ // if we don't have the closing `, the format is incorrect
+ free (copy);
+ return NULL;
+ }
+ //remove the closing quote
+ *p1 = '\0';
+ // see if there's anything following it
+ if (*(p1 + 1) != 0)
+ {
+ // error in format
+ free (copy);
+ return NULL;
+ }
+ free (*fcontext);
+ *fcontext = strdup (p);
+ }
+ return copy;
+}
+
+int
+get_paren (const char *name)
+{
+ char buf[8192];
+ char *ptr;
+ int temp_level1, temp_level2;
+
+ temp_level1 = temp_level2 = 0;
+ snprintf (buf, sizeof (buf), NTXT ("%s"), name);
+ while ((ptr = strrpbrk (buf, "><)(")) != NULL)
+ {
+ if (*ptr == '>')
+ temp_level1++;
+ else if (*ptr == '<')
+ temp_level1--;
+ else if (*ptr == ')')
+ temp_level2++;
+ else
+ {
+ temp_level2--;
+ if (temp_level1 <= 0 && temp_level2 <= 0)
+ return (int) (ptr - buf);
+ }
+ *ptr = '\0';
+ }
+ return -1;
+}
+
+// CRC-64 based on x^64 + x^11 + x^2 + x + 1 polynomial.
+// This algorithm doesn't perform well but is short and
+// readable. We currently use it for a small amount of
+// short strings. Should this change, another algorithm
+// with better performance is to be used instead.
+static uint64_t masks[256] = {
+ /* 0 */ 0x000000, 0x000807, 0x00100e, 0x001809, 0x00201c, 0x00281b,
+ /* 6 */ 0x003012, 0x003815, 0x004038, 0x00483f, 0x005036, 0x005831,
+ /* 12 */ 0x006024, 0x006823, 0x00702a, 0x00782d, 0x008070, 0x008877,
+ /* 18 */ 0x00907e, 0x009879, 0x00a06c, 0x00a86b, 0x00b062, 0x00b865,
+ /* 24 */ 0x00c048, 0x00c84f, 0x00d046, 0x00d841, 0x00e054, 0x00e853,
+ /* 30 */ 0x00f05a, 0x00f85d, 0x0100e0, 0x0108e7, 0x0110ee, 0x0118e9,
+ /* 36 */ 0x0120fc, 0x0128fb, 0x0130f2, 0x0138f5, 0x0140d8, 0x0148df,
+ /* 42 */ 0x0150d6, 0x0158d1, 0x0160c4, 0x0168c3, 0x0170ca, 0x0178cd,
+ /* 48 */ 0x018090, 0x018897, 0x01909e, 0x019899, 0x01a08c, 0x01a88b,
+ /* 54 */ 0x01b082, 0x01b885, 0x01c0a8, 0x01c8af, 0x01d0a6, 0x01d8a1,
+ /* 60 */ 0x01e0b4, 0x01e8b3, 0x01f0ba, 0x01f8bd, 0x0201c0, 0x0209c7,
+ /* 66 */ 0x0211ce, 0x0219c9, 0x0221dc, 0x0229db, 0x0231d2, 0x0239d5,
+ /* 72 */ 0x0241f8, 0x0249ff, 0x0251f6, 0x0259f1, 0x0261e4, 0x0269e3,
+ /* 78 */ 0x0271ea, 0x0279ed, 0x0281b0, 0x0289b7, 0x0291be, 0x0299b9,
+ /* 84 */ 0x02a1ac, 0x02a9ab, 0x02b1a2, 0x02b9a5, 0x02c188, 0x02c98f,
+ /* 90 */ 0x02d186, 0x02d981, 0x02e194, 0x02e993, 0x02f19a, 0x02f99d,
+ /* 96 */ 0x030120, 0x030927, 0x03112e, 0x031929, 0x03213c, 0x03293b,
+ /* 102 */ 0x033132, 0x033935, 0x034118, 0x03491f, 0x035116, 0x035911,
+ /* 108 */ 0x036104, 0x036903, 0x03710a, 0x03790d, 0x038150, 0x038957,
+ /* 114 */ 0x03915e, 0x039959, 0x03a14c, 0x03a94b, 0x03b142, 0x03b945,
+ /* 120 */ 0x03c168, 0x03c96f, 0x03d166, 0x03d961, 0x03e174, 0x03e973,
+ /* 126 */ 0x03f17a, 0x03f97d, 0x040380, 0x040b87, 0x04138e, 0x041b89,
+ /* 132 */ 0x04239c, 0x042b9b, 0x043392, 0x043b95, 0x0443b8, 0x044bbf,
+ /* 138 */ 0x0453b6, 0x045bb1, 0x0463a4, 0x046ba3, 0x0473aa, 0x047bad,
+ /* 144 */ 0x0483f0, 0x048bf7, 0x0493fe, 0x049bf9, 0x04a3ec, 0x04abeb,
+ /* 150 */ 0x04b3e2, 0x04bbe5, 0x04c3c8, 0x04cbcf, 0x04d3c6, 0x04dbc1,
+ /* 156 */ 0x04e3d4, 0x04ebd3, 0x04f3da, 0x04fbdd, 0x050360, 0x050b67,
+ /* 162 */ 0x05136e, 0x051b69, 0x05237c, 0x052b7b, 0x053372, 0x053b75,
+ /* 168 */ 0x054358, 0x054b5f, 0x055356, 0x055b51, 0x056344, 0x056b43,
+ /* 174 */ 0x05734a, 0x057b4d, 0x058310, 0x058b17, 0x05931e, 0x059b19,
+ /* 180 */ 0x05a30c, 0x05ab0b, 0x05b302, 0x05bb05, 0x05c328, 0x05cb2f,
+ /* 186 */ 0x05d326, 0x05db21, 0x05e334, 0x05eb33, 0x05f33a, 0x05fb3d,
+ /* 192 */ 0x060240, 0x060a47, 0x06124e, 0x061a49, 0x06225c, 0x062a5b,
+ /* 198 */ 0x063252, 0x063a55, 0x064278, 0x064a7f, 0x065276, 0x065a71,
+ /* 204 */ 0x066264, 0x066a63, 0x06726a, 0x067a6d, 0x068230, 0x068a37,
+ /* 210 */ 0x06923e, 0x069a39, 0x06a22c, 0x06aa2b, 0x06b222, 0x06ba25,
+ /* 216 */ 0x06c208, 0x06ca0f, 0x06d206, 0x06da01, 0x06e214, 0x06ea13,
+ /* 222 */ 0x06f21a, 0x06fa1d, 0x0702a0, 0x070aa7, 0x0712ae, 0x071aa9,
+ /* 228 */ 0x0722bc, 0x072abb, 0x0732b2, 0x073ab5, 0x074298, 0x074a9f,
+ /* 234 */ 0x075296, 0x075a91, 0x076284, 0x076a83, 0x07728a, 0x077a8d,
+ /* 240 */ 0x0782d0, 0x078ad7, 0x0792de, 0x079ad9, 0x07a2cc, 0x07aacb,
+ /* 246 */ 0x07b2c2, 0x07bac5, 0x07c2e8, 0x07caef, 0x07d2e6, 0x07dae1,
+ /* 252 */ 0x07e2f4, 0x07eaf3, 0x07f2fa, 0x07fafd
+};
+
+uint64_t
+crc64 (const char *str, size_t len)
+{
+ uint64_t res = 0LL;
+ for (size_t i = 0; i < len; i++)
+ {
+ unsigned char b = (unsigned char) ((res >> 56) ^ *str++);
+ res = res << 8;
+ res ^= masks [b];
+ }
+ return res;
+}
+
+/**
+ * Canonize path inside the string provided by the argument
+ * @param path
+ * @return path
+ */
+char *
+canonical_path (char *path)
+{
+ char *s1, *s2;
+ if (!path)
+ return path;
+ s1 = path;
+ s2 = path;
+ while (*s1)
+ {
+ if (*s1 == '.' && s1[1] == '/')
+ { // remove .///
+ for (s1++; *s1; s1++)
+ if (*s1 != '/')
+ break;
+ }
+ else if (*s1 == '/')
+ { // replace /// with /
+ *(s2++) = *s1;
+ for (s1++; *s1; s1++)
+ if (*s1 != '/')
+ break;
+ }
+ else
+ {
+ while (*s1)
+ { // copy file or directory name
+ if (*s1 == '/')
+ break;
+ *(s2++) = *(s1++);
+ }
+ }
+ }
+ *s2 = 0;
+ if (s2 != path && (s2 - 1) != path && s2[-1] == '/') // remove last /
+ *(s2 - 1) = 0;
+ return path;
+}
+
+char *
+get_relative_path (char *name)
+{
+ if (*name == '/' && theApplication)
+ {
+ char *cwd = theApplication->get_cur_dir ();
+ if (cwd)
+ {
+ size_t len = strlen (cwd);
+ if (len > 0 && len < strlen (name) && name[len] == '/'
+ && strncmp (cwd, name, len) == 0)
+ {
+ for (name += len + 1; *name == '/'; name++)
+ ;
+ return name;
+ }
+ }
+ }
+ return name;
+}
+
+/**
+ * Generate a relative link name from path_from to path_to
+ * Example:
+ * path_from=a/b/c/d
+ * path_to=a/b/e/f/g
+ * lname=../../e/f/g
+ * @param path_to
+ * @param path_from
+ * @return lname - relative link
+ */
+char *
+get_relative_link (const char *path_from, const char *path_to)
+{
+ if (!path_to)
+ path_to = ".";
+ if (!path_from)
+ path_from = ".";
+ char *s1 = dbe_strdup (path_to);
+ s1 = canonical_path (s1);
+ char *s2 = dbe_strdup (path_from);
+ s2 = canonical_path (s2);
+ long l = dbe_sstrlen (s1);
+ // try to find common directories
+ int common_slashes = 0;
+ int last_common_slash = -1;
+ for (int i = 0; i < l; i++)
+ {
+ if (s1[i] != s2[i]) break;
+ if (s1[i] == 0) break;
+ if (s1[i] == '/')
+ {
+ common_slashes++;
+ last_common_slash = i;
+ }
+ }
+ // find slashes in remaining path_to
+ int slashes = 0;
+ for (int i = last_common_slash + 1; i < l; i++)
+ {
+ if (s1[i] == '/')
+ {
+ // Exclude "/./" case
+ if (i > last_common_slash + 2)
+ {
+ if (s1[i - 1] == '.' && s1[i - 2] == '/')
+ continue;
+ }
+ else if (i > 0 && s1[i - 1] == '.')
+ continue;
+ slashes++;
+ }
+ }
+ // generate relative path
+ StringBuilder sb;
+ for (int i = 0; i < slashes; i++)
+ sb.append ("../");
+ sb.append (s2 + last_common_slash + 1);
+ char *lname = sb.toString ();
+ free (s1);
+ free (s2);
+ return lname;
+}
+
+char *
+get_prog_name (int basename)
+{
+ char *nm = NULL;
+ if (theApplication)
+ {
+ nm = theApplication->get_name ();
+ if (nm && basename)
+ nm = get_basename (nm);
+ }
+ return nm;
+}
+
+char *
+dbe_strndup (const char *str, size_t len)
+{
+ if (str == NULL)
+ return NULL;
+ char *s = (char *) malloc (len + 1);
+ strncpy (s, str, len);
+ s[len] = '\0';
+ return s;
+}
+
+char *
+dbe_sprintf (const char *fmt, ...)
+{
+ char buffer[256];
+ int buf_size;
+ va_list vp;
+
+ va_start (vp, fmt);
+ buf_size = vsnprintf (buffer, sizeof (buffer), fmt, vp) + 1;
+ va_end (vp);
+ if (buf_size < (int) sizeof (buffer))
+ {
+ if (buf_size <= 1)
+ buffer[0] = 0;
+ return strdup (buffer);
+ }
+
+ va_start (vp, fmt);
+ char *buf = (char *) malloc (buf_size);
+ vsnprintf (buf, buf_size, fmt, vp);
+ va_end (vp);
+ return buf;
+}
+
+ssize_t
+dbe_write (int f, const char *fmt, ...)
+{
+ char buffer[256];
+ int buf_size;
+ va_list vp;
+
+ va_start (vp, fmt);
+ buf_size = vsnprintf (buffer, sizeof (buffer), fmt, vp) + 1;
+ va_end (vp);
+ if (buf_size < (int) sizeof (buffer))
+ {
+ if (buf_size <= 1)
+ buffer[0] = 0;
+ return write (f, buffer, strlen (buffer));
+ }
+
+ va_start (vp, fmt);
+ char *buf = (char *) malloc (buf_size);
+ vsnprintf (buf, buf_size, fmt, vp);
+ va_end (vp);
+ ssize_t val = write (f, buf, strlen (buf));
+ free (buf);
+ return val;
+}
+
+/* Worker Threads to avoid hanging on file servers */
+
+/*
+ * Thread states
+ */
+enum
+{
+ THREAD_START,
+ THREAD_STARTED,
+ THREAD_CANCEL,
+ THREAD_CANCELED,
+ THREAD_CREATE,
+ THREAD_NOT_CREATED,
+ THREAD_FINISHED
+};
+
+/*
+ * Communication structure
+ */
+struct worker_thread_info
+{
+ pthread_t thread_id; /* ID returned by pthread_create() */
+ int thread_num; /* Application-defined thread # */
+ volatile int control; /* Thread state */
+ volatile int result; /* Return status */
+ struct stat64 statbuf; /* File info from stat64() */
+ const char *path; /* File */
+};
+
+static pthread_mutex_t worker_thread_lock = PTHREAD_MUTEX_INITIALIZER;
+static int worker_thread_number = 0;
+/**
+ * Call stat64() on current worker thread
+ * Check if control is not THREAD_CANCEL
+ * If control is THREAD_CANCEL return (exit thread)
+ * @param *wt_info
+ */
+static void *
+dbe_stat_on_thread (void *arg)
+{
+ struct worker_thread_info *wt_info = (struct worker_thread_info *) arg;
+ pthread_mutex_lock (&worker_thread_lock);
+ {
+ if (wt_info->control != THREAD_START)
+ {
+ // Already too late
+ pthread_mutex_unlock (&worker_thread_lock);
+ return 0;
+ }
+ wt_info->control = THREAD_STARTED;
+ }
+ pthread_mutex_unlock (&worker_thread_lock);
+ const char * path = wt_info->path;
+ int st = stat64 (path, &(wt_info->statbuf));
+ pthread_mutex_lock (&worker_thread_lock);
+ {
+ if (wt_info->control == THREAD_CANCEL)
+ {
+ // Too late.
+ pthread_mutex_unlock (&worker_thread_lock);
+ free (wt_info);
+ return 0;
+ }
+ wt_info->result = st;
+ wt_info->control = THREAD_FINISHED;
+ }
+ pthread_mutex_unlock (&worker_thread_lock);
+ return 0;
+}
+
+/**
+ * Create a worker thread to call specified function
+ * Wait for its result, but not longer than 5 seconds
+ * If the timeout happens, tell the thread to cancel
+ * @param path
+ * @param wt_info
+ * @return thread state
+ */
+static int
+dbe_dispatch_on_thread (const char *path, struct worker_thread_info *wt_info)
+{
+ wt_info->result = 0;
+ wt_info->control = THREAD_START;
+ pthread_attr_t attr;
+ /* Initialize thread creation attributes */
+ int res = pthread_attr_init (&attr);
+ if (res != 0)
+ {
+ wt_info->control = THREAD_NOT_CREATED;
+ return THREAD_NOT_CREATED;
+ }
+ wt_info->thread_id = 0;
+ wt_info->path = path;
+ // Lock
+ pthread_mutex_lock (&worker_thread_lock);
+ worker_thread_number++;
+ wt_info->thread_num = worker_thread_number;
+ // Unlock
+ pthread_mutex_unlock (&worker_thread_lock);
+ // Create thread
+ res = pthread_create (&wt_info->thread_id, &attr, &dbe_stat_on_thread, wt_info);
+ if (res != 0)
+ {
+ wt_info->control = THREAD_NOT_CREATED;
+ pthread_attr_destroy (&attr);
+ return THREAD_NOT_CREATED;
+ }
+ // Wait for the thread to finish
+ res = 0;
+ useconds_t maxusec = 5000000; // 5 seconds
+ useconds_t deltausec = 1000; // 1 millisecond
+ int max = maxusec / deltausec;
+ for (int i = 0; i < max; i++)
+ {
+ if (THREAD_FINISHED == wt_info->control)
+ break; // We are done
+ usleep (deltausec);
+ }
+ // Lock
+ pthread_mutex_lock (&worker_thread_lock);
+ if (THREAD_FINISHED != wt_info->control)
+ {
+ // Cancel thread
+ wt_info->control = THREAD_CANCEL; // Cannot use wt_info after that!
+ res = THREAD_CANCEL;
+ }
+ // Unlock
+ pthread_mutex_unlock (&worker_thread_lock);
+ // Destroy the thread attributes object, since it is no longer needed
+ pthread_attr_destroy (&attr);
+ // Report that thread was canceled
+ if (THREAD_CANCEL == res)
+ return res; /* Cannot free memory allocated by thread */
+ // Free all thread resources
+ void *resources = 0;
+ res = pthread_join (wt_info->thread_id, &resources);
+ free (resources); /* Free memory allocated by thread */
+ return THREAD_FINISHED;
+}
+
+static pthread_mutex_t dirnames_lock = PTHREAD_MUTEX_INITIALIZER;
+static Map<const char*, int> *dirnamesMap = NULL;
+
+#define DIR_STATUS_EXISTS 0
+#define DIR_STATUS_UNKNOWN 2
+
+/**
+ * Check if this directory name is known
+ * Return:
+ * @param path
+ * 0 - known, exists
+ * 1 - known, does not exist
+ * 2 - not known
+ */
+static int
+check_dirname (const char *path)
+{
+ pthread_mutex_lock (&dirnames_lock);
+ if (NULL == dirnamesMap)
+ dirnamesMap = new StringMap<int>(128, 128);
+ pthread_mutex_unlock (&dirnames_lock);
+ int res = DIR_STATUS_UNKNOWN;
+ if (path && *path)
+ {
+ char *fn = dbe_strdup (path);
+ char *dn = dirname (fn);
+ if (dn && *dn)
+ res = dirnamesMap->get (dn);
+ free (fn);
+ }
+ return res;
+}
+
+/**
+ * Save directory name and its status
+ * @param path
+ * @param status
+ * @return
+ */
+static void
+extract_and_save_dirname (const char *path, int status)
+{
+ pthread_mutex_lock (&dirnames_lock);
+ if (NULL == dirnamesMap)
+ dirnamesMap = new StringMap<int>(128, 128);
+ pthread_mutex_unlock (&dirnames_lock);
+ char *fn = dbe_strdup (path);
+ if (fn && *fn != 0)
+ {
+ char *dn = dirname (fn);
+ if (dn && (*dn != 0))
+ {
+ int st = 0; // exists
+ if (0 != status)
+ st = 1; // does not exist
+ dirnamesMap->put (dn, st);
+ }
+ }
+ free (fn);
+}
+
+// get status for specified file
+static int
+dbe_stat_internal (const char *path, struct stat64 *sbuf, bool file_only)
+{
+ struct stat64 statbuf;
+ int dir_status = check_dirname (path);
+ if (dir_status == DIR_STATUS_UNKNOWN)
+ {
+ // Try to use a worker thread
+ if (theApplication->get_number_of_worker_threads () > 0)
+ {
+ struct worker_thread_info *wt_info;
+ wt_info = (worker_thread_info *) calloc (1, sizeof (worker_thread_info));
+ if (wt_info != NULL)
+ {
+ int res = dbe_dispatch_on_thread (path, wt_info);
+ if (THREAD_FINISHED == res)
+ {
+ int st = wt_info->result;
+ extract_and_save_dirname (path, st);
+ if (st == 0 && file_only)
+ if (S_ISREG ((wt_info->statbuf).st_mode) == 0)
+ st = -1; // It is not a regular file
+ if (sbuf != NULL)
+ *sbuf = wt_info->statbuf;
+ free (wt_info);
+ return st;
+ }
+ else
+ {
+ if (THREAD_CANCEL == res)
+ {
+ // Worker thread hung. Cannot free wt_info.
+ // Allocated memory will be freed by worker thread.
+ // save directory
+ extract_and_save_dirname (path, 1);
+ return 1; // stat64 failed
+ }
+ else // THREAD_NOT_CREATED - continue on current thread
+ free (wt_info);
+ }
+ }
+ }
+ }
+ else if (dir_status != DIR_STATUS_EXISTS)
+ return -1; // does not exist
+ if (sbuf == NULL)
+ sbuf = &statbuf;
+ int st = stat64 (path, sbuf);
+ Dprintf (DEBUG_DBE_FILE, NTXT ("dbe_stat %d '%s'\n"), st, path);
+ if (st == -1)
+ return -1;
+ else if (file_only && S_ISREG (sbuf->st_mode) == 0)
+ return -1; // It is not ordinary file
+ return st;
+}
+
+// get status for the regular file
+
+int
+dbe_stat_file (const char *path, struct stat64 *sbuf)
+{
+ int res = dbe_stat_internal (path, sbuf, true);
+ return res;
+}
+
+// get status for specified file
+
+int
+dbe_stat (const char *path, struct stat64 *sbuf)
+{
+ int res = dbe_stat_internal (path, sbuf, false);
+ return res;
+}
+
+/**
+ * Reads directory and prepares list of files according to the specified format
+ * Supported formats:
+ * "/bin/ls -a" - see 'man ls' for details
+ * "/bin/ls -aF" - see 'man ls' for details
+ * @param path
+ * @param format
+ * @return char * files
+ */
+char *
+dbe_read_dir (const char *path, const char *format)
+{
+ StringBuilder sb;
+ DIR *dir = opendir (path);
+ if (dir == NULL)
+ return sb.toString ();
+ int format_aF = 0;
+ if (!strcmp (format, NTXT ("/bin/ls -aF")))
+ format_aF = 1;
+ struct dirent *entry = NULL;
+ if (format != NULL)
+ {
+ while ((entry = readdir (dir)) != NULL)
+ {
+ sb.append (entry->d_name);
+ if (format_aF)
+ {
+ const char *attr = NTXT ("@"); // Link
+ struct stat64 sbuf;
+ sbuf.st_mode = 0;
+ char filename[MAXPATHLEN + 1];
+ snprintf (filename, sizeof (filename), NTXT ("%s/%s"), path, entry->d_name);
+ dbe_stat (filename, &sbuf);
+ if (S_IREAD & sbuf.st_mode)
+ { // Readable
+ if (S_ISDIR (sbuf.st_mode) != 0) // Directory
+ attr = NTXT ("/");
+ else if (S_ISREG (sbuf.st_mode) != 0) // Regular file
+ attr = NTXT ("");
+ }
+ sb.append (attr);
+ }
+ sb.append (NTXT ("\n"));
+ }
+ }
+ closedir (dir);
+ return sb.toString ();
+}
+
+/**
+ * Gets list of processes according to the specified format
+ * Supported formats:
+ * "/bin/ps -ef" - see 'man ps' for details
+ * @param format
+ * @return char * processes
+ */
+char *
+dbe_get_processes (const char *format)
+{
+ StringBuilder sb;
+ if (!strcmp (format, NTXT ("/bin/ps -ef")))
+ {
+ char buf[BUFSIZ];
+ FILE *ptr = popen (format, "r");
+ if (ptr != NULL)
+ {
+ while (fgets (buf, BUFSIZ, ptr) != NULL)
+ sb.append (buf);
+ pclose (ptr);
+ }
+ }
+ return sb.toString ();
+}
+
+/**
+ * Creates the directory named by the specified path name, including any
+ * necessary but nonexistent parent directories.
+ * Uses system utility "/bin/mkdir -p"
+ * Temporary limitation: path name should not contain spaces.
+ * Returns message from "/bin/mkdir -p"
+ * @param pathname
+ * @return result
+ */
+char *
+dbe_create_directories (const char *pathname)
+{
+ StringBuilder sb;
+ char *makedir = dbe_sprintf (NTXT ("/bin/mkdir -p %s 2>&1"), pathname);
+ char out[BUFSIZ];
+ FILE *ptr = popen (makedir, "r");
+ if (ptr != NULL)
+ {
+ while (fgets (out, BUFSIZ, ptr) != NULL)
+ sb.append (out);
+ pclose (ptr);
+ }
+ free (makedir);
+ DIR *dir = opendir (pathname);
+ if (dir != NULL)
+ {
+ closedir (dir);
+ return NULL; // success
+ }
+ else
+ sb.append (NTXT ("\nError: Cannot open directory\n")); // DEBUG
+ return sb.toString (); // error
+}
+
+/**
+ * Deletes the file or the directory named by the specified path name.
+ * If this pathname denotes a directory, then the directory must be empty in order to be deleted.
+ * Uses system utility "/bin/rm" or "/bin/rmdir"
+ * Temporary limitation: path name should not contain spaces.
+ * Returns error message from system utility
+ * @param pathname
+ * @return result
+ */
+char *
+dbe_delete_file (const char *pathname)
+{
+ StringBuilder sb;
+ char *cmd = NULL;
+ struct stat64 sbuf;
+ sbuf.st_mode = 0;
+ int st = dbe_stat (pathname, &sbuf);
+ if (st == 0)
+ { // Exists
+ if (S_ISDIR (sbuf.st_mode) != 0) // Directory
+ cmd = dbe_sprintf (NTXT ("/bin/rmdir %s 2>&1"), pathname);
+ else if (S_ISREG (sbuf.st_mode) != 0) // Regular file
+ cmd = dbe_sprintf (NTXT ("/bin/rm %s 2>&1"), pathname);
+ }
+ else
+ return NULL; // Nothing to remove
+ if (cmd != NULL)
+ {
+ char out[BUFSIZ];
+ FILE *ptr = popen (cmd, "r");
+ if (ptr != NULL)
+ {
+ while (fgets (out, BUFSIZ, ptr) != NULL)
+ sb.append (out);
+ pclose (ptr);
+ }
+ free (cmd);
+ }
+ else
+ sb.sprintf (NTXT ("Error: cannot remove %s - not a regular file and not a directory\n"), pathname);
+ return sb.toString ();
+}
+
+char *
+dbe_xml2str (const char *s)
+{
+ if (s == NULL)
+ return NULL;
+ StringBuilder sb;
+ while (*s)
+ {
+ if (*s == '&')
+ {
+ if (strncmp (s, NTXT ("&nbsp;"), 6) == 0)
+ {
+ sb.append (' ');
+ s += 6;
+ continue;
+ }
+ else if (strncmp (s, NTXT ("&quot;"), 6) == 0)
+ {
+ sb.append ('"');
+ s += 6;
+ continue;
+ }
+ else if (strncmp (s, NTXT ("&amp;"), 5) == 0)
+ {
+ sb.append ('&');
+ s += 5;
+ continue;
+ }
+ else if (strncmp (s, NTXT ("&lt;"), 4) == 0)
+ {
+ sb.append ('<');
+ s += 4;
+ continue;
+ }
+ else if (strncmp (s, NTXT ("&gt;"), 4) == 0)
+ {
+ sb.append ('>');
+ s += 4;
+ continue;
+ }
+ }
+ sb.append (*s);
+ s++;
+ }
+ return sb.toString ();
+}
+
+void
+swapByteOrder (void *p, size_t sz)
+{
+ if (sz == 8)
+ {
+ uint64_t *pv = (uint64_t *) p;
+ uint64_t v = *pv;
+ v = ((v & 0x00000000FF000000) << 8) | ((v >> 8) & 0x00000000FF000000) |
+ ((v & 0x0000000000FF0000) << 24) | ((v >> 24) & 0x0000000000FF0000) |
+ ((v & 0x000000000000FF00) << 40) | ((v >> 40) & 0x000000000000FF00) |
+ (v >> 56) | (v << 56);
+ *pv = v;
+ }
+ else if (sz == 4)
+ {
+ uint32_t *pv = (uint32_t *) p;
+ uint32_t v = *pv;
+ v = (v >> 24) | (v << 24) | ((v & 0x0000FF00) << 8) | ((v >> 8) & 0x0000FF00);
+ *pv = v;
+ }
+ else if (sz == 2)
+ {
+ uint16_t *pv = (uint16_t *) p;
+ uint16_t v = *pv;
+ v = (v >> 8) | (v << 8);
+ *pv = v;
+ }
+}
+
+void
+destroy (void *vec)
+{
+ if (vec == NULL)
+ return;
+ Vector<void*> *array = (Vector<void*>*)vec;
+ switch (array->type ())
+ {
+ case VEC_STRING:
+ ((Vector<char *>*)array)->destroy ();
+ break;
+ case VEC_VOIDARR:
+ case VEC_STRINGARR:
+ case VEC_INTARR:
+ case VEC_BOOLARR:
+ case VEC_LLONGARR:
+ case VEC_DOUBLEARR:
+ for (long i = 0; i < array->size (); i++)
+ destroy (array->fetch (i));
+ break;
+ case VEC_INTEGER:
+ case VEC_CHAR:
+ case VEC_BOOL:
+ case VEC_DOUBLE:
+ case VEC_LLONG:
+ default:
+ break;
+ }
+ delete array;
+}
+
+int64_t
+read_from_file (int fd, void *buffer, int64_t nbyte)
+{
+ int64_t cnt = 0;
+ char *buf = (char *) buffer;
+ while (nbyte > 0)
+ { // Sometimes system cannot read 'nbyte'
+ ssize_t n = read (fd, (void *) (buf + cnt), (size_t) nbyte);
+ if (n <= 0)
+ break;
+ nbyte -= n;
+ cnt += n;
+ }
+ return cnt;
+}
+
+/**
+ * Create symbolic link to the path
+ * @param path - path with spaces
+ * @param dir - directory where the link should be created
+ * @return symbolic link
+ */
+char *
+dbe_create_symlink_to_path (const char *path, const char *dir)
+{
+ char *symbolic_link = NULL;
+ if (NULL == path || NULL == dir)
+ return NULL;
+ int res = mkdir (dir, 0777);
+ if (res != 0 && dbe_stat (dir, NULL) != 0)
+ return NULL; // Cannot create directory
+ long len = dbe_sstrlen (path);
+ if (len <= 4)
+ return NULL; // Unknown situation
+ if (strcmp ((path + len - 4), "/bin") != 0) // Unknown situation
+ return NULL;
+ int max = 99; // Just an arbitrary number
+ for (int i = 1; i <= max; i++)
+ {
+ // Try to create symbolic link
+ char *d = dbe_sprintf ("%s/%d", dir, i);
+ if (NULL == d)
+ return NULL;
+ res = mkdir (d, 0777);
+ symbolic_link = dbe_sprintf ("%s/%s", d, "bin");
+ free (d);
+ if (NULL == symbolic_link) // Not enough memory
+ return NULL;
+ res = symlink (path, symbolic_link);
+ if (res == 0) // Link is created - use it.
+ break;
+ // Check if such link already exists
+ int e = errno;
+ char buf[MAXPATHLEN + 1];
+ memset (buf, 0, MAXPATHLEN + 1);
+ ssize_t n = readlink (symbolic_link, buf, MAXPATHLEN);
+ if (n == len && strcmp (path, buf) == 0) // Link is correct - use it.
+ break;
+ if (i == max)
+ { // report the error
+ fprintf (stderr, GTXT ("Error: symlink(%s, %s) returned error: %d\n"), path, symbolic_link, res);
+ fprintf (stderr, GTXT ("Error: errno=%d (%s)\n"), e, strerror (e));
+ fflush (stderr);
+ }
+ free (symbolic_link);
+ symbolic_link = NULL;
+ }
+ return symbolic_link;
+}
+
+// Compute checksum for specified file.
+// This code is from usr/src/cmd/cksum.c, adapted for us
+// crcposix -- compute posix.2 compatable 32 bit CRC
+//
+// The POSIX.2 (draft 10) CRC algorithm.
+// This is a 32 bit CRC with polynomial
+// x**32 + x**26 + x**23 + x**22 + x**16 + x**12 + x**11 + x**10 +
+// x**8 + x**7 + x**5 + x**4 + x**2 + x**1 + x**0
+//
+// layout is from the POSIX.2 Rationale
+
+static uint32_t crctab_posix[256] = {
+ 0x00000000L,
+ 0x04C11DB7L, 0x09823B6EL, 0x0D4326D9L, 0x130476DCL, 0x17C56B6BL,
+ 0x1A864DB2L, 0x1E475005L, 0x2608EDB8L, 0x22C9F00FL, 0x2F8AD6D6L,
+ 0x2B4BCB61L, 0x350C9B64L, 0x31CD86D3L, 0x3C8EA00AL, 0x384FBDBDL,
+ 0x4C11DB70L, 0x48D0C6C7L, 0x4593E01EL, 0x4152FDA9L, 0x5F15ADACL,
+ 0x5BD4B01BL, 0x569796C2L, 0x52568B75L, 0x6A1936C8L, 0x6ED82B7FL,
+ 0x639B0DA6L, 0x675A1011L, 0x791D4014L, 0x7DDC5DA3L, 0x709F7B7AL,
+ 0x745E66CDL, 0x9823B6E0L, 0x9CE2AB57L, 0x91A18D8EL, 0x95609039L,
+ 0x8B27C03CL, 0x8FE6DD8BL, 0x82A5FB52L, 0x8664E6E5L, 0xBE2B5B58L,
+ 0xBAEA46EFL, 0xB7A96036L, 0xB3687D81L, 0xAD2F2D84L, 0xA9EE3033L,
+ 0xA4AD16EAL, 0xA06C0B5DL, 0xD4326D90L, 0xD0F37027L, 0xDDB056FEL,
+ 0xD9714B49L, 0xC7361B4CL, 0xC3F706FBL, 0xCEB42022L, 0xCA753D95L,
+ 0xF23A8028L, 0xF6FB9D9FL, 0xFBB8BB46L, 0xFF79A6F1L, 0xE13EF6F4L,
+ 0xE5FFEB43L, 0xE8BCCD9AL, 0xEC7DD02DL, 0x34867077L, 0x30476DC0L,
+ 0x3D044B19L, 0x39C556AEL, 0x278206ABL, 0x23431B1CL, 0x2E003DC5L,
+ 0x2AC12072L, 0x128E9DCFL, 0x164F8078L, 0x1B0CA6A1L, 0x1FCDBB16L,
+ 0x018AEB13L, 0x054BF6A4L, 0x0808D07DL, 0x0CC9CDCAL, 0x7897AB07L,
+ 0x7C56B6B0L, 0x71159069L, 0x75D48DDEL, 0x6B93DDDBL, 0x6F52C06CL,
+ 0x6211E6B5L, 0x66D0FB02L, 0x5E9F46BFL, 0x5A5E5B08L, 0x571D7DD1L,
+ 0x53DC6066L, 0x4D9B3063L, 0x495A2DD4L, 0x44190B0DL, 0x40D816BAL,
+ 0xACA5C697L, 0xA864DB20L, 0xA527FDF9L, 0xA1E6E04EL, 0xBFA1B04BL,
+ 0xBB60ADFCL, 0xB6238B25L, 0xB2E29692L, 0x8AAD2B2FL, 0x8E6C3698L,
+ 0x832F1041L, 0x87EE0DF6L, 0x99A95DF3L, 0x9D684044L, 0x902B669DL,
+ 0x94EA7B2AL, 0xE0B41DE7L, 0xE4750050L, 0xE9362689L, 0xEDF73B3EL,
+ 0xF3B06B3BL, 0xF771768CL, 0xFA325055L, 0xFEF34DE2L, 0xC6BCF05FL,
+ 0xC27DEDE8L, 0xCF3ECB31L, 0xCBFFD686L, 0xD5B88683L, 0xD1799B34L,
+ 0xDC3ABDEDL, 0xD8FBA05AL, 0x690CE0EEL, 0x6DCDFD59L, 0x608EDB80L,
+ 0x644FC637L, 0x7A089632L, 0x7EC98B85L, 0x738AAD5CL, 0x774BB0EBL,
+ 0x4F040D56L, 0x4BC510E1L, 0x46863638L, 0x42472B8FL, 0x5C007B8AL,
+ 0x58C1663DL, 0x558240E4L, 0x51435D53L, 0x251D3B9EL, 0x21DC2629L,
+ 0x2C9F00F0L, 0x285E1D47L, 0x36194D42L, 0x32D850F5L, 0x3F9B762CL,
+ 0x3B5A6B9BL, 0x0315D626L, 0x07D4CB91L, 0x0A97ED48L, 0x0E56F0FFL,
+ 0x1011A0FAL, 0x14D0BD4DL, 0x19939B94L, 0x1D528623L, 0xF12F560EL,
+ 0xF5EE4BB9L, 0xF8AD6D60L, 0xFC6C70D7L, 0xE22B20D2L, 0xE6EA3D65L,
+ 0xEBA91BBCL, 0xEF68060BL, 0xD727BBB6L, 0xD3E6A601L, 0xDEA580D8L,
+ 0xDA649D6FL, 0xC423CD6AL, 0xC0E2D0DDL, 0xCDA1F604L, 0xC960EBB3L,
+ 0xBD3E8D7EL, 0xB9FF90C9L, 0xB4BCB610L, 0xB07DABA7L, 0xAE3AFBA2L,
+ 0xAAFBE615L, 0xA7B8C0CCL, 0xA379DD7BL, 0x9B3660C6L, 0x9FF77D71L,
+ 0x92B45BA8L, 0x9675461FL, 0x8832161AL, 0x8CF30BADL, 0x81B02D74L,
+ 0x857130C3L, 0x5D8A9099L, 0x594B8D2EL, 0x5408ABF7L, 0x50C9B640L,
+ 0x4E8EE645L, 0x4A4FFBF2L, 0x470CDD2BL, 0x43CDC09CL, 0x7B827D21L,
+ 0x7F436096L, 0x7200464FL, 0x76C15BF8L, 0x68860BFDL, 0x6C47164AL,
+ 0x61043093L, 0x65C52D24L, 0x119B4BE9L, 0x155A565EL, 0x18197087L,
+ 0x1CD86D30L, 0x029F3D35L, 0x065E2082L, 0x0B1D065BL, 0x0FDC1BECL,
+ 0x3793A651L, 0x3352BBE6L, 0x3E119D3FL, 0x3AD08088L, 0x2497D08DL,
+ 0x2056CD3AL, 0x2D15EBE3L, 0x29D4F654L, 0xC5A92679L, 0xC1683BCEL,
+ 0xCC2B1D17L, 0xC8EA00A0L, 0xD6AD50A5L, 0xD26C4D12L, 0xDF2F6BCBL,
+ 0xDBEE767CL, 0xE3A1CBC1L, 0xE760D676L, 0xEA23F0AFL, 0xEEE2ED18L,
+ 0xF0A5BD1DL, 0xF464A0AAL, 0xF9278673L, 0xFDE69BC4L, 0x89B8FD09L,
+ 0x8D79E0BEL, 0x803AC667L, 0x84FBDBD0L, 0x9ABC8BD5L, 0x9E7D9662L,
+ 0x933EB0BBL, 0x97FFAD0CL, 0xAFB010B1L, 0xAB710D06L, 0xA6322BDFL,
+ 0xA2F33668L, 0xBCB4666DL, 0xB8757BDAL, 0xB5365D03L, 0xB1F740B4L
+};
+
+static void
+m_crcposix (uint32_t *crcp, unsigned char *bp, uint32_t n)
+{
+ while (n-- > 0)
+ *crcp = (*crcp << 8) ^ crctab_posix[(unsigned char) ((*crcp >> 24)^*bp++)];
+}
+
+// Do CRC-POSIX function by calling a library entry point that has a
+// slightly different calling sequence.
+static uint32_t
+docrcposix (uint32_t crcval, unsigned char *bp, uint32_t n)
+{
+ m_crcposix (&crcval, bp, n);
+ return (crcval);
+}
+
+// Sum algorithms require various kinds of post-processing.
+// The 'S' and 'R' variables are from the POSIX.2 (Draft 8?) description
+// of the "sum" utility.
+static uint32_t
+postprocess (uint32_t S, long long n)
+{
+ // POSIX tacks on significant bytes of the length so that
+ // different length sequences of '\0' have different sums;
+ // then it complements sum.
+ unsigned char char_n[sizeof (n)];
+ uint32_t i;
+ for (i = 0; n != 0; n >>= 8, ++i)
+ char_n[i] = (unsigned char) (n & 0xFF);
+ return (~docrcposix (S, char_n, i));
+}
+
+uint32_t
+get_cksum (const char * pathname, char ** errmsg)
+{
+ int fd = open (pathname, O_RDONLY);
+ if (fd < 0)
+ {
+ if (errmsg)
+ *errmsg = dbe_sprintf (GTXT ("*** Warning: Error opening file for reading: %s"), pathname);
+ return 0; // error
+ }
+ uint32_t crcval = 0;
+ long long bytes = 0;
+ int64_t n;
+ unsigned char buf[4096];
+ while ((n = read_from_file (fd, (char *) buf, sizeof (buf))) > 0)
+ {
+ bytes += n;
+ crcval = docrcposix (crcval, buf, n);
+ }
+ close (fd);
+ crcval = postprocess (crcval, bytes);
+ return crcval;
+}
diff --git a/gprofng/src/util.h b/gprofng/src/util.h
new file mode 100644
index 00000000000..0d1b8bcfa50
--- /dev/null
+++ b/gprofng/src/util.h
@@ -0,0 +1,185 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _PERFAN_UTIL_H
+#define _PERFAN_UTIL_H
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <stdint.h>
+
+#include "gp-defs.h"
+#include "gp-time.h"
+#include "i18n.h"
+#include "debug.h"
+
+#define SWAP_ENDIAN(x) swapByteOrder((void *) (&(x)), sizeof(x))
+#define AppendString(len, arr, ...) len += snprintf(arr + len, sizeof(arr) - len, __VA_ARGS__)
+#define ARR_SIZE(x) (sizeof (x) / sizeof (*(x)))
+
+// Utility routines.
+
+//
+// Inline functions
+//
+// max(a, b) - Return the maximum of two values
+inline int
+max (int a, int b)
+{
+ return (a >= b) ? a : b;
+}
+
+// min(a, b) - Return the minimum of two values
+inline int
+min (int a, int b)
+{
+ return (a <= b) ? a : b;
+}
+
+// streq(s1, s2) - Returns 1 if strings are the same, 0 otherwise
+inline int
+streq (const char *s1, const char *s2)
+{
+ return strcmp (s1, s2) == 0;
+}
+
+// StrChr(str, ch) - Rerurn 'str' if 'ch' does not occur in 'str' or
+// a pointer to the next symbol after the first occurrence of 'ch' in 'str'
+inline char *
+StrChr (char *str, char ch)
+{
+ char *s = strchr (str, ch);
+ return s ? (s + 1) : str;
+}
+
+// StrRchr(str, ch) - Rerurn 'str' if 'ch' does not occur in 'str' or
+// a pointer to the next symbol after the last occurrence of 'ch' in 'str'
+inline char *
+StrRchr (char *str, char ch)
+{
+ char *s = strrchr (str, ch);
+ return s ? (s + 1) : str;
+}
+
+inline char*
+STR (const char *s)
+{
+ return s ? (char*) s : (char*) NTXT ("NULL");
+}
+
+inline char*
+get_str (const char *s, const char *s1)
+{
+ return s ? (char*) s : (char*) s1;
+}
+
+inline char *
+get_basename (const char* name)
+{
+ return StrRchr ((char*) name, '/');
+}
+
+inline char *
+dbe_strdup (const char *str)
+{
+ return str ? strdup (str) : NULL;
+}
+
+inline long
+dbe_sstrlen (const char *str)
+{
+ return str ? (long) strlen (str) : 0;
+}
+
+inline int
+dbe_strcmp (const char *s1, const char *s2)
+{
+ return s1 ? (s2 ? strcmp (s1, s2) : 1) : (s2 ? -1 : 0);
+}
+
+// tstodouble(t) - Return timestruc_t in (double) seconds
+inline double
+tstodouble (timestruc_t t)
+{
+ return (double) t.tv_sec + (double) (t.tv_nsec / 1000000000.0);
+}
+
+inline void
+hr2timestruc (timestruc_t *d, hrtime_t s)
+{
+ d->tv_sec = (long) (s / NANOSEC);
+ d->tv_nsec = (long) (s % NANOSEC);
+}
+
+inline hrtime_t
+timestruc2hr (timestruc_t *s)
+{
+ return (hrtime_t) s->tv_sec * NANOSEC + (hrtime_t) s->tv_nsec;
+}
+
+struct stat64;
+
+#if defined(__cplusplus)
+extern "C"
+{
+#endif
+ //
+ // Declaration of utility functions
+ //
+ void tsadd (timestruc_t *result, timestruc_t *time);
+ void tssub (timestruc_t *result, timestruc_t *time1, timestruc_t *time2);
+ int tscmp (timestruc_t *time1, timestruc_t *time2);
+ void int_max (int *maximum, int count);
+ char *strstr_r (char *s1, const char *s2);
+ char *strrpbrk (const char *string, const char *brkset);
+ char *read_line (FILE *);
+ char *parse_qstring (char *in_str, char **endptr);
+ char *parse_fname (char *in_str, char **fcontext);
+ int get_paren (const char *name);
+
+ uint64_t crc64 (const char *str, size_t len);
+ char *canonical_path (char *path);
+ char *get_relative_path (char *name);
+ char *get_relative_link (const char *path_to, const char *path_from);
+ char *get_prog_name (int basename);
+ char *dbe_strndup (const char *str, size_t len);
+ int dbe_stat (const char *path, struct stat64 *sbuf);
+ int dbe_stat_file (const char *path, struct stat64 *sbuf);
+ char *dbe_read_dir (const char *path, const char *format);
+ char *dbe_get_processes (const char *format);
+ char *dbe_create_directories (const char *pathname);
+ char *dbe_delete_file (const char *pathname);
+ char *dbe_xml2str (const char *s);
+ void swapByteOrder (void *p, size_t sz);
+ char *dbe_sprintf (const char *fmt, ...) __attribute__ ((format (printf, 1, 2)));
+ ssize_t dbe_write (int f, const char *fmt, ...) __attribute__ ((format (printf, 2, 3)));
+ char *dbe_create_symlink_to_path (const char *path, const char *dir);
+ int64_t read_from_file (int fd, void *buffer, int64_t nbyte);
+ uint32_t get_cksum (const char * pathname, char ** errmsg);
+
+#ifdef __cplusplus
+}
+int catch_out_of_memory (int (*real_main)(int, char*[]), int argc, char *argv[]);
+#endif
+
+
+#endif /* _UTIL_H */
diff --git a/gprofng/src/vec.h b/gprofng/src/vec.h
new file mode 100644
index 00000000000..28b1800ca12
--- /dev/null
+++ b/gprofng/src/vec.h
@@ -0,0 +1,524 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _PERFAN_VEC_H
+#define _PERFAN_VEC_H
+
+#include <assert.h>
+#include <inttypes.h>
+#include <string.h>
+#include <stdlib.h>
+
+// This package implements a vector of items.
+
+#define Destroy(x) if (x) { (x)->destroy(); delete (x); (x) = NULL; }
+#define VecSize(x) ((x) ? (x)->size() : 0)
+
+void destroy (void *vec); // Free up the "two-dimension" Vectors
+
+typedef int (*CompareFunc)(const void*, const void*);
+typedef int (*ExtCompareFunc)(const void*, const void*, const void*);
+typedef int (*SearchFunc)(char*, char*);
+
+extern "C"
+{
+ typedef int (*StdCompareFunc)(const void*, const void*);
+}
+
+enum Search_type
+{
+ LINEAR,
+ BINARY,
+ HASH
+};
+
+enum Direction
+{
+ FORWARD,
+ REVERSE
+};
+
+enum VecType
+{
+ VEC_VOID = 0,
+ VEC_INTEGER,
+ VEC_CHAR,
+ VEC_BOOL,
+ VEC_DOUBLE,
+ VEC_LLONG,
+ VEC_VOIDARR,
+ VEC_STRING,
+ VEC_INTARR,
+ VEC_BOOLARR,
+ VEC_LLONGARR,
+ VEC_STRINGARR,
+ VEC_DOUBLEARR
+};
+
+template <class ITEM> void
+qsort (ITEM *, size_t, ExtCompareFunc, void *);
+
+template <typename ITEM> class Vector
+{
+public:
+
+ Vector ()
+ {
+ count = 0;
+ data = NULL;
+ limit = 0;
+ sorted = false;
+ };
+
+ Vector (long sz);
+
+ virtual
+ ~Vector ()
+ {
+ free (data);
+ }
+
+ void append (const ITEM item);
+ void addAll (Vector<ITEM> *vec);
+ Vector<ITEM> *copy (); // Return a copy of "this".
+
+ ITEM
+ fetch (long index)
+ {
+ return data[index];
+ }
+
+ ITEM
+ get (long index)
+ {
+ return data[index];
+ }
+
+ // Return the first index in "this" that equals "item".
+ // Return -1 if "item" is not found.
+ long find (const ITEM item);
+ long find_r (const ITEM item);
+
+ // Insert "item" into "index"'th slot of "this",
+ // moving everything over by 1.
+ void insert (long index, const ITEM item);
+
+ // Insert "item" after locating its appropriate index
+ void incorporate (const ITEM item, CompareFunc func);
+
+ // Remove and return the "index"'th item from "this",
+ // moving everything over by 1.
+ ITEM remove (long index);
+
+ // Swap two items in "this",
+ void swap (long index1, long index2);
+
+ long
+ size ()
+ {
+ return count;
+ }
+
+ // Store "item" into the "index"'th slot of "this".
+ void store (long index, const ITEM item);
+
+ void
+ put (long index, const ITEM item)
+ {
+ store (index, item);
+ }
+
+ // Sort the vector according to compare
+ void
+ sort (CompareFunc compare, void *arg = NULL)
+ {
+ qsort (data, count, (ExtCompareFunc) compare, arg);
+ sorted = true;
+ }
+
+ // Binary search, vector must be sorted
+ long bisearch (long start, long end, void *key, CompareFunc func);
+ void destroy (); // delete all vector elements (must be pointers!)
+
+ void
+ reset ()
+ {
+ count = 0;
+ sorted = false;
+ }
+
+ bool
+ is_sorted ()
+ {
+ return sorted;
+ }
+
+ virtual VecType
+ type ()
+ {
+ return VEC_VOID;
+ }
+
+ virtual void
+ dump (const char * /* msg */)
+ {
+ return;
+ }
+
+private:
+
+ void resize (long index);
+
+ ITEM *data; // Pointer to data vector
+ long count; // Number of items
+ long limit; // Vector length (power of 2)
+ bool sorted;
+};
+
+template<> VecType Vector<int>::type ();
+template<> VecType Vector<unsigned>::type ();
+template<> VecType Vector<char>::type ();
+template<> VecType Vector<bool>::type ();
+template<> VecType Vector<double>::type ();
+template<> VecType Vector<long long>::type ();
+template<> VecType Vector<uint64_t>::type ();
+template<> VecType Vector<void*>::type ();
+template<> VecType Vector<char*>::type ();
+template<> VecType Vector<Vector<int>*>::type ();
+template<> VecType Vector<Vector<char*>*>::type ();
+template<> VecType Vector<Vector<long long>*>::type ();
+template<> void Vector<char *>::destroy ();
+
+#define KILOCHUNK 1024
+#define MEGACHUNK 1024*1024
+#define GIGACHUNK 1024*1024*1024
+
+// A standard looping construct:
+#define Vec_loop(ITEM, vec, index, item) \
+if (vec != NULL) \
+ for (index = 0, item = ((vec)->size() > 0) ? (vec)->fetch(0) : (ITEM)0; \
+ index < (vec)->size(); \
+ item = (++index < (vec)->size()) ? (vec)->fetch(index) : (ITEM)0)
+
+template <typename ITEM>
+Vector<ITEM>::Vector (long sz)
+{
+ count = 0;
+ limit = sz > 0 ? sz : KILOCHUNK; // was 0;
+ data = limit ? (ITEM *) malloc (sizeof (ITEM) * limit) : NULL;
+ sorted = false;
+}
+
+template <typename ITEM> void
+Vector<ITEM>
+::resize (long index)
+{
+ if (index < limit)
+ return;
+ if (limit < 16)
+ limit = 16;
+ while (index >= limit)
+ {
+ if (limit > GIGACHUNK)
+ limit += GIGACHUNK; // Deoptimization for large experiments
+ else
+ limit = limit * 2;
+ }
+ data = (ITEM *) realloc (data, limit * sizeof (ITEM));
+}
+
+template <typename ITEM> void
+Vector<ITEM>::append (const ITEM item)
+{
+ // This routine will append "item" to the end of "this".
+ if (count >= limit)
+ resize (count);
+ data[count++] = item;
+}
+
+template <typename ITEM> void
+Vector<ITEM>::addAll (Vector<ITEM> *vec)
+{
+ if (vec)
+ for (int i = 0, sz = vec->size (); i < sz; i++)
+ append (vec->fetch (i));
+}
+
+template <typename ITEM> Vector<ITEM> *
+Vector<ITEM>::copy ()
+{
+ // This routine will return a copy of "this".
+ Vector<ITEM> *vector;
+ vector = new Vector<ITEM>;
+ vector->count = count;
+ vector->limit = limit;
+ vector->data = (ITEM *) malloc (sizeof (ITEM) * limit);
+ (void) memcpy ((char *) vector->data, (char *) data, sizeof (ITEM) * count);
+ return vector;
+}
+
+template <typename ITEM> long
+Vector<ITEM>::find (const ITEM match_item)
+{
+ for (long i = 0; i < size (); i++)
+ if (match_item == get (i))
+ return i;
+ return -1;
+}
+
+template <typename ITEM> long
+Vector<ITEM>::find_r (const ITEM match_item)
+{
+ for (long i = size () - 1; i >= 0; i--)
+ if (match_item == get (i))
+ return i;
+ return -1;
+}
+
+template <typename ITEM> void
+Vector<ITEM>::insert (long index, const ITEM item)
+{
+ // This routine will insert "item" into the "index"'th slot of "this".
+ // An error occurs if "index" > size().
+ // "index" is allowed to be equal to "count" in the case that
+ // you are inserting past the last element of the vector.
+ // In that case, the bcopy below becomes a no-op.
+ assert (index >= 0);
+ assert (index <= count);
+ append (item);
+ (void) memmove (((char *) (&data[index + 1])), (char *) (&data[index]),
+ (count - index - 1) * sizeof (ITEM));
+ data[index] = item;
+}
+
+template <typename ITEM> ITEM
+Vector<ITEM>::remove (long index)
+{
+ // This routine will remove the "index"'th item from "this" and
+ // return it. An error occurs if "index" >= size();.
+ assert (index >= 0);
+ assert (index < count);
+ ITEM item = data[index];
+ for (long i = index + 1; i < count; i++)
+ data[i - 1] = data[i];
+ count--;
+ // Bad code that works good when ITEM is a pointer type
+ data[count] = item;
+ return data[count];
+}
+
+template <typename ITEM> void
+Vector<ITEM>::swap (long index1, long index2)
+{
+ ITEM item;
+ item = data[index1];
+ data[index1] = data[index2];
+ data[index2] = item;
+}
+
+template <typename ITEM> void
+Vector<ITEM>::store (long index, const ITEM item)
+{
+ if (index >= count)
+ {
+ resize (index);
+ memset (&data[count], 0, (index - count) * sizeof (ITEM));
+ count = index + 1;
+ }
+ data[index] = item;
+}
+
+// This routine performs a binary search across
+// the entire vector, with "start" being the low boundary.
+// It is assumed that the vector is SORTED in
+// ASCENDING ORDER by the same criteria as the
+// compare function.
+// If no match is found, -1 is returned.
+template <typename ITEM> long
+Vector<ITEM>::bisearch (long start, long end, void *key, CompareFunc compare)
+{
+ ITEM *itemp;
+ if (end == -1)
+ end = count;
+ if (start >= end)
+ return -1; // start exceeds limit
+ itemp = (ITEM *) bsearch ((char *) key, (char *) &data[start],
+ end - start, sizeof (ITEM), (StdCompareFunc) compare);
+ if (itemp == (ITEM *) 0)
+ return -1; // not found
+ return (long) (itemp - data);
+}
+
+template <typename ITEM> void
+Vector<ITEM>::incorporate (const ITEM item, CompareFunc compare)
+{
+ long lt = 0;
+ long rt = count - 1;
+ while (lt <= rt)
+ {
+ long md = (lt + rt) / 2;
+ if (compare (data[md], item) < 0)
+ lt = md + 1;
+ else
+ rt = md - 1;
+ }
+ if (lt == count)
+ append (item);
+ else
+ insert (lt, item);
+}
+
+#define QSTHRESH 6
+
+template <typename ITEM> void
+qsort (ITEM *base, size_t nelem, ExtCompareFunc qcmp, void *arg)
+{
+ for (;;)
+ {
+ // For small arrays use insertion sort
+ if (nelem < QSTHRESH)
+ {
+ for (size_t i = 1; i < nelem; i++)
+ {
+ ITEM *p = base + i;
+ ITEM *q = p - 1;
+ if (qcmp (q, p, arg) > 0)
+ {
+ ITEM t = *p;
+ *p = *q;
+ while (q > base && qcmp (q - 1, &t, arg) > 0)
+ {
+ *q = *(q - 1);
+ --q;
+ }
+ *q = t;
+ }
+ }
+ return;
+ }
+
+ ITEM *last = base + nelem - 1;
+ ITEM *mid = base + nelem / 2;
+ // Sort the first, middle, and last elements
+ ITEM *a1 = base, *a2, *a3;
+ if (qcmp (base, mid, arg) > 0)
+ {
+ if (qcmp (mid, last, arg) > 0)
+ { // l-m-b
+ a2 = last;
+ a3 = last;
+ }
+ else if (qcmp (base, last, arg) > 0)
+ { // l-b-m
+ a2 = mid;
+ a3 = last;
+ }
+ else
+ { // m-b-l
+ a2 = mid;
+ a3 = mid;
+ }
+ }
+ else if (qcmp (mid, last, arg) > 0)
+ {
+ a1 = mid;
+ a3 = last;
+ if (qcmp (base, last, arg) > 0) // m-l-b
+ a2 = base;
+ else // b-l-m
+ a2 = a3;
+ }
+ else // b-m-l
+ a3 = a2 = a1;
+ if (a1 != a2)
+ {
+ ITEM t = *a1;
+ *a1 = *a2;
+ if (a2 != a3)
+ *a2 = *a3;
+ *a3 = t;
+ }
+
+ // Partition
+ ITEM *i = base + 1;
+ ITEM *j = last - 1;
+ for (;;)
+ {
+ while (i < mid && qcmp (i, mid, arg) <= 0)
+ i++;
+ while (j > mid && qcmp (mid, j, arg) <= 0)
+ j--;
+ if (i == j)
+ break;
+ ITEM t = *i;
+ *i = *j;
+ *j = t;
+ if (i == mid)
+ {
+ mid = j;
+ i++;
+ }
+ else if (j == mid)
+ {
+ mid = i;
+ j--;
+ }
+ else
+ {
+ i++;
+ j--;
+ }
+ }
+
+ // Compare two partitions. Do the smaller one by recursion
+ // and loop over the larger one.
+ size_t nleft = mid - base;
+ size_t nright = nelem - nleft - 1;
+ if (nleft <= nright)
+ {
+ qsort (base, nleft, qcmp, arg);
+ base = mid + 1;
+ nelem = nright;
+ }
+ else
+ {
+ qsort (mid + 1, nright, qcmp, arg);
+ nelem = nleft;
+ }
+ }
+}
+
+template<> inline void
+Vector<char*>::destroy ()
+{
+ for (long i = 0; i < count; i++)
+ free (data[i]);
+ count = 0;
+}
+
+template <typename ITEM> inline void
+Vector<ITEM>::destroy ()
+{
+ for (long i = 0; i < count; i++)
+ delete data[i];
+ count = 0;
+}
+
+#endif /* _VEC_H */
diff --git a/gprofng/testsuite/config/default.exp b/gprofng/testsuite/config/default.exp
new file mode 100644
index 00000000000..6fde0a1223f
--- /dev/null
+++ b/gprofng/testsuite/config/default.exp
@@ -0,0 +1,38 @@
+# Basic expect script for gprofng tests
+# Copyright (C) 2021 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+# The "make check" target in the Makefile passes in
+# "CC=$(CC_FOR_TARGET)". But, if the user invokes runtest directly,
+# these flags may not be set.
+if {![info exists CC]} {
+ set CC [find_gcc]
+}
+if {![info exists CC_FOR_TARGET]} {
+ set CC_FOR_TARGET $CC
+}
+if {![info exists CFLAGS]} {
+ set CFLAGS "-g -O2"
+}
+
+# Make a temporary install dir to run gprofng from, and point at it
+remote_exec host "sh -c \"rm -rf tmpdir; mkdir -p tmpdir; $MAKE -C .. install-gprofng program_transform_name= DESTDIR=`pwd`/tmpdir/root\""
+
+load_lib display-lib.exp
diff --git a/gprofng/testsuite/gprofng.display/display.exp b/gprofng/testsuite/gprofng.display/display.exp
new file mode 100644
index 00000000000..dfb383e9fc6
--- /dev/null
+++ b/gprofng/testsuite/gprofng.display/display.exp
@@ -0,0 +1,92 @@
+# Copyright (C) 2021 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+if {[info exists env(LC_ALL)]} {
+ set old_lc_all $env(LC_ALL)
+}
+set env(LC_ALL) "C"
+
+set pltf [exec uname -i]
+switch $pltf {
+ x86_64 {
+ # Columns in the table represent:
+ # dir cflags gprofflags Others
+ set table {
+ {"jsynprog" "-g -Wall" "-p on -j on"}
+ {"mttest" "" ""}
+ {"mttest" "-g -Wall" "-p on"}
+ {"mttest" "-g -O0" "-p on"}
+ {"mttest" "-g -O" "-p on"}
+ {"mttest" "-g -O" "-h on"}
+ {"mttest" "-g -O" "-h on"}
+ {"mttest" "-g -O" "-p on -h on"}
+ {"synprog" "" ""}
+ {"synprog" "-g" "-p on"}
+ {"synprog" "-g -O0" "-p on"}
+ {"synprog" "-g -O" "-p on"}
+ {"synprog" "-g" "-p on -h on"}
+ {"synprog" "-g -O0" "-p on -h on"}
+ {"synprog" "-g -O" "-p on -h on"}
+ }
+ }
+ aarch64 {
+ set table {
+ {"jsynprog" "-g -Wall" "-p on -j on"}
+ {"mttest" "" ""}
+ {"mttest" "-g -Wall" "-p on"}
+ {"mttest" "-g -O0" "-p on"}
+ {"mttest" "-g -O" "-p on"}
+ {"synprog" "" ""}
+ {"synprog" "-g" "-p on"}
+ {"synprog" "-g -O" "-p on"}
+ }
+ }
+ default {
+ # Columns in the table represent:
+ # dir cflags gprofflags Others
+ set table {
+ {"mttest" "" ""}
+ {"synprog" "" ""}
+ }
+ }
+}
+
+global GPROFNG_BROKEN_JAVAC
+
+foreach line $table {
+ set dir [lindex $line 0]
+ set cflags [lindex $line 1]
+ set gprofflags [lindex $line 2]
+
+ verbose [file rootname $line]
+ verbose running display test $line
+ if { $GPROFNG_BROKEN_JAVAC == "yes" && $dir == "jsynprog" } {
+ unsupported $dir
+ } else {
+ run_display_test $dir $cflags $gprofflags
+ }
+}
+
+
+if {[info exists old_lc_all]} {
+ set env(LC_ALL) $old_lc_all
+} else {
+ unset env(LC_ALL)
+}
diff --git a/gprofng/testsuite/gprofng.display/jsynprog/Intface.java b/gprofng/testsuite/gprofng.display/jsynprog/Intface.java
new file mode 100644
index 00000000000..016e7b28ba6
--- /dev/null
+++ b/gprofng/testsuite/gprofng.display/jsynprog/Intface.java
@@ -0,0 +1,6 @@
+// Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved.
+
+public interface Intface {
+ public int add_int (int scale);
+ public double add_double (int scale);
+}
diff --git a/gprofng/testsuite/gprofng.display/jsynprog/Launcher.java b/gprofng/testsuite/gprofng.display/jsynprog/Launcher.java
new file mode 100644
index 00000000000..33ee06cd8db
--- /dev/null
+++ b/gprofng/testsuite/gprofng.display/jsynprog/Launcher.java
@@ -0,0 +1,90 @@
+// Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved.
+// @(#)Launcher.java 1.3 10/03/24 SMI
+
+import java.lang.reflect.*;
+
+public class Launcher {
+// Byte array for dynamically loaded class: //
+//public class DynLoadedClass { //
+// public int DynamicFunction(int x) { //
+// float f = 0; //
+// for (int k=0 ; k<20000; k++) { //
+// f = ((float)k) / x; //
+// } //
+// return (int)f; //
+// } //
+// //
+// public static void main(String[] args){ //
+// DynLoadedClass dcls = new DynLoadedClass(); //
+// for (int k=0 ; k<10; k++) { //
+// dcls.DynamicFunction(k); //
+// } //
+// } //
+//} //
+static final byte [] bClassGenerated = {
+ -54, -2, -70, -66, 0, 0, 0, 46, 0, 20, 10, 0, 5, 0, 16, 7, 0, 17, 10, 0, 2, 0, 16, 10, 0, 2,
+ 0, 18, 7, 0, 19, 1, 0, 6, 60, 105, 110, 105, 116, 62, 1, 0, 3, 40, 41, 86, 1, 0, 4, 67, 111,
+ 100, 101, 1, 0, 15, 76, 105, 110, 101, 78, 117, 109, 98, 101, 114, 84, 97, 98, 108, 101, 1, 0, 15, 68, 121,
+ 110, 97, 109, 105, 99, 70, 117, 110, 99, 116, 105, 111, 110, 1, 0, 4, 40, 73, 41, 73, 1, 0, 4, 109, 97,
+ 105, 110, 1, 0, 22, 40, 91, 76, 106, 97, 118, 97, 47, 108, 97, 110, 103, 47, 83, 116, 114, 105, 110, 103, 59,
+ 41, 86, 1, 0, 10, 83, 111, 117, 114, 99, 101, 70, 105, 108, 101, 1, 0, 19, 68, 121, 110, 76, 111, 97, 100,
+ 101, 100, 67, 108, 97, 115, 115, 46, 106, 97, 118, 97, 12, 0, 6, 0, 7, 1, 0, 14, 68, 121, 110, 76, 111,
+ 97, 100, 101, 100, 67, 108, 97, 115, 115, 12, 0, 10, 0, 11, 1, 0, 16, 106, 97, 118, 97, 47, 108, 97, 110,
+ 103, 47, 79, 98, 106, 101, 99, 116, 0, 33, 0, 2, 0, 5, 0, 0, 0, 0, 0, 3, 0, 1, 0, 6, 0,
+ 7, 0, 1, 0, 8, 0, 0, 0, 29, 0, 1, 0, 1, 0, 0, 0, 5, 42, -73, 0, 1, -79, 0, 0, 0,
+ 1, 0, 9, 0, 0, 0, 6, 0, 1, 0, 0, 0, 1, 0, 1, 0, 10, 0, 11, 0, 1, 0, 8, 0, 0,
+ 0, 66, 0, 2, 0, 4, 0, 0, 0, 26, 11, 69, 3, 62, 29, 17, 78, 32, -94, 0, 15, 29, -122, 27, -122,
+ 110, 69, -124, 3, 1, -89, -1, -16, 36, -117, -84, 0, 0, 0, 1, 0, 9, 0, 0, 0, 22, 0, 5, 0, 0,
+ 0, 3, 0, 2, 0, 4, 0, 11, 0, 5, 0, 17, 0, 4, 0, 23, 0, 7, 0, 9, 0, 12, 0, 13, 0,
+ 1, 0, 8, 0, 0, 0, 69, 0, 2, 0, 3, 0, 0, 0, 29, -69, 0, 2, 89, -73, 0, 3, 76, 3, 61,
+ 28, 16, 10, -94, 0, 15, 43, 28, -74, 0, 4, 87, -124, 2, 1, -89, -1, -15, -79, 0, 0, 0, 1, 0, 9,
+ 0, 0, 0, 22, 0, 5, 0, 0, 0, 11, 0, 8, 0, 12, 0, 16, 0, 13, 0, 22, 0, 12, 0, 28, 0,
+ 15, 0, 1, 0, 14, 0, 0, 0, 2, 0, 15
+ };
+
+ private static DynClassLoader persistentInstance;
+
+ public static DynClassLoader getPersistentInstance()
+ {
+ if (persistentInstance == null)
+ persistentInstance = new DynClassLoader();
+ return persistentInstance;
+ }
+
+ public static void main(String args []) {
+ if (args.length != 1) {
+ System.err.println("Usage: Launcher DynLoadedClass");
+ return;
+ }
+
+ String className = args[0]; // Dynamic class name
+
+ try {
+ Class genClass = getPersistentInstance().getClassFromByteArray(className, bClassGenerated);
+ Method[] methods_g = genClass.getDeclaredMethods();
+
+ for (int i = 0; i < methods_g.length; i++) {
+ Method m = methods_g[i];
+ String methodName = m.getName();
+ String progArgs[] = new String[1];
+ //System.out.println("Invoking method " + className + "." + methodName);
+ if (methodName.equals("main"))
+ m.invoke( null, (Object[]) progArgs );
+ }
+ } catch (InvocationTargetException iex) {
+ System.err.println("InvocationTargetException");
+ } catch (IllegalAccessException aex) {
+ System.err.println("IllegalAccessException");
+ }
+ }
+
+ // Class loader to generate dynamic class on the fly from the byte array
+ private static class DynClassLoader extends ClassLoader {
+ public DynClassLoader() { }
+ public Class getClassFromByteArray(String name, byte[] b) {
+ return super.defineClass(name, b, 0, b.length);
+ }
+ }
+
+
+}
diff --git a/gprofng/testsuite/gprofng.display/jsynprog/Makefile b/gprofng/testsuite/gprofng.display/jsynprog/Makefile
new file mode 100644
index 00000000000..e78b6927f48
--- /dev/null
+++ b/gprofng/testsuite/gprofng.display/jsynprog/Makefile
@@ -0,0 +1,56 @@
+# Copyright (C) 2021 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+TARGETS = libcloop.so jsynprog.class
+TARGET = jsynprog
+ACCT_FILE = jsynprog.acct
+
+srcdir = .
+include $(srcdir)/../../lib/Makefile.skel
+
+JAVACFLAGS =
+
+SRCS = \
+ $(srcdir)/../mttest/gethrtime.c \
+ $(srcdir)/cloop.cc \
+ $(NULL)
+
+JAVA_SRCS = \
+ $(srcdir)/Intface.java \
+ $(srcdir)/Routine.java \
+ $(srcdir)/Sub_Routine.java \
+ $(srcdir)/jsynprog.java \
+ $(srcdir)/Launcher.java \
+ $(NULL)
+
+HDRS = jsynprog.h
+
+libcloop.so: $(SRCS)
+ @echo " ---- Build: $@ -----"
+ $(CC) $(jdk_inc) $(CCOPTS) $(SHAREDOPT) -o $@ $(SRCS)
+
+jsynprog.class: $(JAVA_SRCS)
+ @echo " ---- Build: $@ -----"
+ $(JAVAC) $(JAVACFLAGS) -d . $(JAVA_SRCS)
+
+$(EXPERIMENT): $(TARGETS)
+ @echo " ---- Build: $@ -----"
+ rm -rf $@
+ $(COLLECT) $(COLLECT_FLAGS) -o $@ $(JAVA) $(JAVACFLAGS) jsynprog
+
diff --git a/gprofng/testsuite/gprofng.display/jsynprog/Routine.java b/gprofng/testsuite/gprofng.display/jsynprog/Routine.java
new file mode 100644
index 00000000000..cfe45d2b93d
--- /dev/null
+++ b/gprofng/testsuite/gprofng.display/jsynprog/Routine.java
@@ -0,0 +1,224 @@
+/**
+ * Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved.
+ * This class implements the Intface interface
+ * increments value of integer and floats
+ */
+
+import java.util.*;
+
+public class Routine implements Intface {
+
+ /* add integers */
+ public int add_int (int scale) {
+ int x = 0;
+ int kmax = 100*scale;
+ double tEnd = jsynprog.Timer() + jsynprog.testtime;
+ do { x = 0;
+ for (int k=0; k<kmax;k++) {
+ for (int j=0; j<10000;j++) {
+ x = x + 1;
+ }
+ }
+ } while (jsynprog.Timer() < tEnd);
+ return x;
+ }
+
+ /* add double */
+ public double add_double (int scale) {
+ double y = 0.0;
+ int kmax = 1*scale;
+ double tEnd = jsynprog.Timer() + jsynprog.testtime;
+ do { y = 0.0;
+ for (int k=0; k<kmax;k++) {
+ for (int j=0; j<10000;j++) {
+ y = y + 1.0;
+ }
+ }
+ } while (jsynprog.Timer() < tEnd);
+ return y;
+ }
+
+ /* Use inner class */
+ public Integer[] has_inner_class(int scale) {
+ class JInner {
+ Integer[] g_int = new Integer[3];
+
+ public Integer[] buildlist(int scale) {
+ double tEnd = jsynprog.Timer() + jsynprog.testtime;
+ do {
+ for (int k=0; k<g_int.length; k++) {
+ int x = 0;
+ int imax = 10*scale;
+ for (int i=0; i<imax;i++) {
+ for (int j=0; j<10000;j++) {
+ x = x + 1;
+ }
+ }
+ g_int[k]=new Integer (x);
+ }
+ } while (jsynprog.Timer() < tEnd);
+ return g_int;
+ }
+ }
+ return ((new JInner()).buildlist(scale));
+ }
+
+ public void memalloc (int nsize, int scale) {
+ class myobj {
+ int nitem;
+ String shape;
+ String color;
+
+ myobj() {
+ nitem = 4;
+ shape = "square";
+ color = "blue";
+ }
+ }
+ for (int j=0; j<60; j++) {
+ for (int i=0; i<20; i++) {
+ myobj[] blueobj = new myobj[1000000];
+ }
+ }
+ }
+
+ /* routine to do recursion */
+ public void recurse(int i, int imax, int scale) {
+ if(i == imax) {
+ double tEnd = jsynprog.Timer() + jsynprog.testtime;
+ do {
+ double x;
+ int j, k;
+ x = 0.0;
+ for(k=0; k<scale; k++) {
+ for(j=0; j<5000000; j++) {
+ x = x + 1.0;
+ }
+ }
+ } while (jsynprog.Timer() < tEnd);
+ } else {
+ recurse(i+1, imax, scale);
+ }
+ }
+
+ /* routine to do deep recursion */
+ public void recursedeep(int i, int imax, int scale) {
+ if(i == imax) {
+ double tEnd = jsynprog.Timer() + jsynprog.testtime;
+ do {
+ double x;
+ int j, k;
+ x = 0.0;
+ for(k=0; k<scale; k++) {
+ for(j=0; j<5000000; j++) {
+ x = x + 1.0;
+ }
+ }
+ } while (jsynprog.Timer() < tEnd);
+ } else {
+ recursedeep(i+1, imax, scale);
+ }
+ }
+
+
+ /* bounce -- example of indirect recursion */
+ public void bounce(int i, int imax, int scale) {
+ if(i == imax) {
+ double tEnd = jsynprog.Timer() + jsynprog.testtime;
+ do {
+ double x;
+ int j, k;
+ x = 0.0;
+ for(k=0; k < scale; k++) {
+ for(j=0; j<5000000; j++) {
+ x = x + 1.0;
+ }
+ }
+ } while (jsynprog.Timer() < tEnd);
+ } else {
+ bounce_b(i, imax, scale);
+ }
+ }
+
+ private void bounce_b(int i, int imax, int scale) {
+ bounce(i+1, imax, scale);
+ return;
+ }
+
+
+ /* large array */
+ public void array_op(int scale) {
+ int size = 50000;
+ int imax = 1*scale;
+ Integer[] y = allocate_array(3*size);
+ Integer[] z = allocate_array(size);
+ double tEnd = jsynprog.Timer() + jsynprog.testtime;
+ do {
+ for (int i=0; i<imax; i++) {
+ System.arraycopy(y, 2, z, 0, size);
+ }
+ } while (jsynprog.Timer() < tEnd);
+ }
+
+ /* define large array */
+ private Integer[] allocate_array(int num) {
+ Integer[] x = new Integer[num];
+ for (int i=0; i<num;i++) {
+ x[i] = new Integer(i);
+ }
+ return x;
+ }
+
+
+ /* large vector */
+ public void vector_op(int scale) {
+ Vector v = allocate_vector();
+ int imax = 1*scale;
+ int jmax = 1*scale;
+ double tEnd = jsynprog.Timer() + jsynprog.testtime;
+ do {
+ for (int i=0; i<imax; i++) {
+ vrem_last(v);
+ }
+ for (int j=0; j<jmax; j++) {
+ vrem_first(v);
+ }
+ } while (jsynprog.Timer() < tEnd);
+ }
+
+ /* define large Vector */
+ private Vector allocate_vector() {
+ Vector<Integer> v1 = new Vector<Integer> (200000);
+ for (int i=0; i<1000000;i++) {
+ v1.add(new Integer(i));
+ }
+ return v1;
+ }
+
+ /* remove last element of vector */
+ private void vrem_last(Vector v) {
+ v.remove(v.size()-1);
+ }
+
+ /* remove first element of vector */
+ private void vrem_first(Vector v) {
+ v.remove(0);
+ }
+
+
+ /* Spend time in system calls */
+ public void sys_op(int scale) {
+ long stime ;
+ int jmax = 1000000;
+ int imax = 4;
+ double tEnd = jsynprog.Timer() + jsynprog.testtime;
+ do {
+ for (int i = 0; i < imax; i++) {
+ for(int j=0; j<jmax; j++) {
+ stime = System.currentTimeMillis();
+ }
+ }
+ } while (jsynprog.Timer() < tEnd);
+ }
+
+} //end of class
diff --git a/gprofng/testsuite/gprofng.display/jsynprog/Sub_Routine.java b/gprofng/testsuite/gprofng.display/jsynprog/Sub_Routine.java
new file mode 100644
index 00000000000..11e045edc11
--- /dev/null
+++ b/gprofng/testsuite/gprofng.display/jsynprog/Sub_Routine.java
@@ -0,0 +1,54 @@
+/* Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved.
+** @(#)Sub_Routine.java 1.4 10/03/24 SMI
+** This is subclass of Routine , overrides one method
+*/
+
+public class Sub_Routine extends Routine {
+ private static native double cTimer();
+
+ /*
+ ** Calls another method c() many times, overridden methos
+ */
+ public int add_int(int scale) {
+ int w = 0;
+ int kmax = 100*scale;
+ if (scale == 1) {
+ kmax /= 100;
+ }
+ double tEnd = jsynprog.Timer() + jsynprog.testtime;
+ do { w = 0;
+ for (int k=0 ; k<kmax; k++) {
+ w = addcall(w) + 1;
+ }
+ } while (jsynprog.Timer() < tEnd);
+ return w;
+ }
+
+ private static int addcall(int x) {
+ int jmax = 100;
+ int imax = 10;
+ for (int j=0; j<jmax;j++) {
+ for (int i=0; i<imax; i++) {
+ x = (i%2==0)?x:(x + 1);
+ }
+ }
+ return x;
+ }
+
+ public int naptime(int k, int scale)
+ {
+ int i;
+ int imax = k * scale;
+
+ try {
+ for (i = 0; i < imax; i++) {
+ System.out.println(i + " sleeping");
+ Thread.currentThread().sleep(10);
+ i=i+1;
+ }
+ } catch (InterruptedException e) {e.printStackTrace();}
+ System.out.println("In naptime");
+ return 0;
+ }
+
+}
diff --git a/gprofng/testsuite/gprofng.display/jsynprog/check_results.pl b/gprofng/testsuite/gprofng.display/jsynprog/check_results.pl
new file mode 100755
index 00000000000..eac58a2cf66
--- /dev/null
+++ b/gprofng/testsuite/gprofng.display/jsynprog/check_results.pl
@@ -0,0 +1,33 @@
+#!/bin/sh -- # This comment tells perl not to loop!
+
+# Copyright (C) 2021 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+eval 'exec ${PERL:=/usr/dist/exe/perl} -S $0 ${1+"$@"}'
+if 0;
+
+use strict;
+require "acct.pm";
+
+my(@checkTime) = (1, 2);
+acct::readAcct($ARGV[0], @checkTime);
+acct::read_er_print_out($ARGV[1], -1);
+acct::createDiff();
+exit acct::set_retVal(0);
+
diff --git a/gprofng/testsuite/gprofng.display/jsynprog/cloop.cc b/gprofng/testsuite/gprofng.display/jsynprog/cloop.cc
new file mode 100644
index 00000000000..cf8b779916b
--- /dev/null
+++ b/gprofng/testsuite/gprofng.display/jsynprog/cloop.cc
@@ -0,0 +1,114 @@
+/*
+ * Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved.
+ */
+#include <jni.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdlib.h>
+#include <sys/time.h>
+#include "jsynprog.h"
+
+typedef long long hrtime_t;
+extern "C" {
+ hrtime_t gethrtime();
+ hrtime_t gethrvtime();
+}
+static jdouble testtime = 3.0 * 1e9;
+
+int cfunc(int);
+
+JNIEXPORT jdouble JNICALL
+Java_jsynprog_Timer (JNIEnv *env, jclass obj)
+{
+ jdouble jd;
+ hrtime_t start;
+
+ start = gethrtime();
+ jd = (double)(start);
+ return jd;
+}
+
+JNIEXPORT jdouble JNICALL
+Java_jsynprog_cTimer (JNIEnv *env, jclass obj)
+{
+ jdouble jd;
+ hrtime_t vstart;
+
+ vstart = gethrvtime();
+ jd = (double)(vstart);
+ return jd;
+}
+
+JNIEXPORT jdouble JNICALL
+Java_jsynprog_computeSet (JNIEnv *env, jclass obj)
+{
+ char *s;
+
+ testtime = 3.0;
+ s = getenv("SP_COLLECTOR_TEST_TIMER");
+ if( s ) {
+ testtime = atof(s);
+ if (testtime < 1.0)
+ testtime = 1.0;
+ }
+ testtime *= 1e9;
+ return testtime;
+}
+
+JNIEXPORT jint JNICALL
+Java_jsynprog_JavaJavaC (JNIEnv *env, jclass obj, jint n, int scale )
+{
+ // fprintf(stderr, "Entering Java_jsynprog_JavaJavaC, scale = %d\n", scale);
+ int imax = 100000;
+ n = 0;
+ for (int i =0; i<imax; i++) {
+ n=n+((i%2==0)?1:2);
+ }
+ return n;
+}
+
+JNIEXPORT void JNICALL
+Java_jsynprog_JavaCC (JNIEnv *env, jclass obj, int scale)
+{
+ fprintf(stderr, "Entering Java_jsynprog_JavaCC, scale = %d\n", scale);
+ int n =0;
+ if (scale == 1) {
+ scale *= 1000;
+ }
+ int imax = 4*scale;
+ double tEnd = gethrtime() + testtime;
+ do { n = 0;
+ for (int i =0; i<imax; i++) {
+ n = cfunc(n);
+ }
+ } while (gethrtime() < tEnd);
+}
+
+int cfunc (int n) {
+ for (int j =0; j<100000;j++) {
+ n=n+1;
+ }
+ return n;
+}
+
+JNIEXPORT void JNICALL
+Java_jsynprog_JavaCJava (JNIEnv *env, jclass obj, int scale)
+{
+ fprintf(stderr, "Entering Java_jsynprog_JavaCJava, scale = %d\n", scale);
+ int pnum = 0;
+ jmethodID mid = (env)->GetStaticMethodID(obj, "javafunc", "(I)I");
+ if (mid == 0) {
+ fprintf(stderr, "Can't get jmethodID for \"javafunc\", \"(I)I\"\n");
+ return;
+ }
+ fprintf(stderr, "Calling CallStaticIntMethod, scale = %d\n", scale);
+ pnum = (env)->CallStaticIntMethod(obj, mid, scale);
+}
+
+JNIEXPORT jint JNICALL
+Java_jsynprog_isJVMPI (JNIEnv *env, jclass obj)
+{
+ char *jvmpi = getenv("SP_COLLECTOR_USE_JVMPI");
+
+ return jvmpi ? 1 : 0;
+}
diff --git a/gprofng/testsuite/gprofng.display/jsynprog/jsynprog.h b/gprofng/testsuite/gprofng.display/jsynprog/jsynprog.h
new file mode 100644
index 00000000000..34b4f6cf0a7
--- /dev/null
+++ b/gprofng/testsuite/gprofng.display/jsynprog/jsynprog.h
@@ -0,0 +1,74 @@
+/* DO NOT EDIT THIS FILE - it is machine generated */
+/* Copyright (c) 2006, 2011, Oracle and/or its affiliates. All Rights Reserved. */
+#include <jni.h>
+/* Header for class jsynprog */
+
+#ifndef _Included_jsynprog
+#define _Included_jsynprog
+#ifdef __cplusplus
+extern "C" {
+#endif
+/* Inaccessible static: dir_home */
+/* Inaccessible static: log */
+/* Inaccessible static: pstart */
+/* Inaccessible static: cstart */
+/*
+ * Class: jsynprog
+ * Method: Timer
+ * Signature: ()D
+ */
+JNIEXPORT jdouble JNICALL Java_jsynprog_Timer
+ (JNIEnv *, jclass);
+
+/*
+ * Class: jsynprog
+ * Method: cTimer
+ * Signature: ()D
+ */
+JNIEXPORT jdouble JNICALL Java_jsynprog_cTimer
+ (JNIEnv *, jclass);
+
+/*
+ * Class: jsynprog
+ * Method: computeSet
+ * Signature: ()D
+ */
+JNIEXPORT jdouble JNICALL Java_jsynprog_computeSet
+ (JNIEnv *, jclass);
+
+/*
+ * Class: jsynprog
+ * Method: JavaJavaC
+ * Signature: (I, I)I
+ */
+JNIEXPORT jint JNICALL Java_jsynprog_JavaJavaC
+ (JNIEnv *, jclass, jint, int);
+
+/*
+ * Class: jsynprog
+ * Method: JavaCC
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_jsynprog_JavaCC
+ (JNIEnv *, jclass, int);
+
+/*
+ * Class: jsynprog
+ * Method: JavaCJava
+ * Signature: (I, I)V
+ */
+JNIEXPORT void JNICALL Java_jsynprog_JavaCJava
+ (JNIEnv *, jclass, int);
+
+/*
+ * Class: jsynprog
+ * Method: isJVMPI
+ * Signature: (I)V
+ */
+JNIEXPORT jint JNICALL Java_jsynprog_isJVMPI
+ (JNIEnv *, jclass);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/gprofng/testsuite/gprofng.display/jsynprog/jsynprog.java b/gprofng/testsuite/gprofng.display/jsynprog/jsynprog.java
new file mode 100644
index 00000000000..eb98b5ea7fd
--- /dev/null
+++ b/gprofng/testsuite/gprofng.display/jsynprog/jsynprog.java
@@ -0,0 +1,229 @@
+// Copyright (c) 2006, 2013, Oracle and/or its affiliates. All rights reserved.
+// @(#)jsynprog.java SMI
+
+import java.util.*;
+import java.io.*;
+import java.text.*;
+
+class jsynprog
+{
+ private static String dir_home;
+ private static PrintWriter log;
+ private static double pstart, cstart;
+
+ /* JNI calls */
+ public static native double Timer();
+ private static native double cTimer();
+ private static native double computeSet();
+ private static native int JavaJavaC(int np, int scale);
+ private static native void JavaCC(int scale);
+ private static native void JavaCJava(int scale);
+ private static native int isJVMPI();
+
+ public static double testtime = 3.0 * 1e9;
+
+ public static void main (String [] args)
+ {
+ jsynprog jsyn_obj = new jsynprog();
+ Integer ni;
+ int scale = 1000;
+
+ createAcct();
+ LoadJNILibrary(args);
+ testtime = computeSet();
+
+ /* check for invocation parameter */
+ if (args.length != 0) {
+ if (args[0].equals("fast")) {
+ scale = 10000;
+ } else if (args[0].equals("slow")) {
+ scale = 1;
+ } else {
+ System.err.println("fatal: unexpected argument: " + args[0] );
+ System.exit(1);
+ }
+ }
+
+ /* large memory allocations, trigger gc */
+ Routine rtn = new Routine();
+ Sub_Routine sbrt = new Sub_Routine();
+ recTime();
+ rtn.memalloc(10000, scale);
+ printValue("Routine.memalloc", false);
+
+ /* add integers */
+ recTime();
+ ni = new Integer (rtn.add_int(scale));
+ printValue("Routine.add_int", true);
+
+ /* add double */
+ recTime();
+ Double nd = new Double(rtn.add_double(scale));
+ printValue("Routine.add_double", true);
+
+ /* call method in derived class */
+ recTime();
+ ni = new Integer (sbrt.add_int(scale));
+ printValue("Sub_Routine.add_int", true);
+
+ /* call method that defines an inner class */
+ recTime();
+ Integer[] na = rtn.has_inner_class(scale);
+ printValue("Routine.has_inner_class", true);
+
+ /* recursion */
+ recTime();
+ rtn.recurse(0,80, scale);
+ printValue("Routine.recurse", true);
+
+ /* deep recursion */
+ recTime();
+ rtn.recursedeep(0,500, scale);
+ printValue("<Truncated-stack>", true);
+
+ /* indirect recursion */
+ recTime();
+ rtn.bounce(0,20, scale);
+ printValue("Routine.bounce", true);
+
+ /* array operations */
+ recTime();
+ rtn.array_op(scale);
+ printValue("Routine.array_op", false);
+
+ /* Vector operations */
+ recTime();
+ rtn.vector_op(scale);
+ printValue("Routine.vector_op", false);
+
+ /* spend time in system calls */
+ recTime();
+ rtn.sys_op(scale);
+ printValue("Routine.sys_op", false);
+
+ /* java->java->c */
+ recTime();
+ int np = 0;
+ jni_JavaJavaC(np, scale);
+ printValue("jsynprog.jni_JavaJavaC", true);
+
+ /* java->c->c */
+ recTime();
+ JavaCC(scale);
+ printValue("jsynprog.JavaCC", true);
+
+ /* java->c->java */
+ recTime();
+ JavaCJava(scale);
+ printValue("jsynprog.JavaCJava", true);
+
+
+ /* dynamically loaded classes */
+ String java_ver = System.getProperty("java.version");
+ Launcher lnch = new Launcher();
+ String[] params = new String[]{"DynLoadedClass"};
+ recTime();
+ lnch.main(params);
+ printValue("Launcher.main", true);
+
+ System.gc();
+ }
+
+ /*
+ ** Create accounting file
+ */
+ private static void createAcct() {
+ System.out.println ("Directing output to acct file...");
+ try {
+ log = new PrintWriter (new FileWriter("jsynprog.acct"), true);
+ } catch (IOException ioe) {
+ ioe.printStackTrace();
+ System.err.println("fatal: Cannot create accounting file ");
+ System.exit(1);
+ }
+
+ log.println("X\tLWPTime\tCPUTime\tFunction");
+ }
+
+ /*
+ ** Print output in acct file
+ */
+ private static void printValue (String fname, boolean noignore) {
+ double p_end = Timer(); // Global.Timer();
+ double c_end = cTimer(); // Global.cTimer();
+ double prog_elapsed = p_end - pstart;
+ double cpu_elapsed = c_end - cstart;
+ DecimalFormat format_decimal = new DecimalFormat("0.000");
+
+ System.out.println("Running " + fname + "; T = " + format_decimal.format(prog_elapsed * 0.000000001)
+ +" UCPU = " + format_decimal.format(cpu_elapsed * 0.000000001));
+ log.print( (noignore == true? "X" : "Y")
+ + "\t" + format_decimal.format(prog_elapsed * 0.000000001) + "\t"
+ + format_decimal.format(cpu_elapsed * 0.000000001) + "\t");
+ log.println(fname);
+ }
+
+ /*
+ ** Record intial times
+ */
+ private static void recTime() {
+ pstart = Timer(); // Global.Timer();
+ cstart = cTimer(); // Global.cTimer();
+ }
+
+ /*
+ ** Load dynamic shared library for JNI
+ */
+ private static void LoadJNILibrary(String[] args) {
+
+ try {
+ dir_home = (new File(".")).getCanonicalPath();
+ } catch (IOException e) {
+ dir_home = "..";
+ }
+ System.out.println("libpath:"+dir_home);
+
+ // Find which JVM was invoked
+ String jvm_format = System.getProperty("java.vm.name");
+ System.out.println("jvm "+ jvm_format);
+
+ try {
+ System.out.println("Loading library.... " + dir_home + "/libcloop.so");
+ System.load(dir_home + "/libcloop.so");
+ } catch (UnsatisfiedLinkError e) {
+ System.err.println("fatal: Cannot load shared library " + e);
+ System.exit(1);
+ }
+ }
+
+ /*
+ ** Makes a lot of JNI calls
+ */
+ private static void jni_JavaJavaC(int np, int scale) {
+ int ret = 0;
+ int jmax = 10000;
+ System.out.println("Entering jni_JavaJavaC, scale = " + scale);
+ double tEnd = Timer() + testtime;
+ do {
+ for (int j =0 ; j<jmax; j++) {
+ ret = JavaJavaC(np, scale);
+ }
+ } while (Timer() < tEnd);
+ }
+
+ public static int javafunc (int scale) {
+ int jmax = 200*scale;
+ int imax = 40;
+ int np = 0;
+ // System.out.println("Entering javafunc, scale = " + scale);
+ double tEnd = Timer() + testtime;
+ do { np = 0;
+ for (int j =0 ; j<jmax; j++) {
+ for (int i =0 ; i<imax; i++) {
+ np = (i%2==0)?np:(np + 1);
+ }
+ }
+ } while (Timer() < tEnd);
+ return np;
+ }
+}
diff --git a/gprofng/testsuite/gprofng.display/mttest/Makefile b/gprofng/testsuite/gprofng.display/mttest/Makefile
new file mode 100644
index 00000000000..0613ffb3f1a
--- /dev/null
+++ b/gprofng/testsuite/gprofng.display/mttest/Makefile
@@ -0,0 +1,41 @@
+# Copyright (C) 2021 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+# This Makefile builds the mttest demo code
+
+# Select a thread flag, BOUND or UNBOUND, and comment the other one
+#FLAG = UNBOUND
+FLAG = BOUND
+
+TARGETS = ./mttest
+TARGET = ./mttest
+ACCT_FILE = mttest.acct
+
+srcdir = .
+include $(srcdir)/../../lib/Makefile.skel
+
+SRCS = $(srcdir)/gethrtime.c $(srcdir)/mttest.c
+
+$(TARGET): $(SRCS)
+ $(CC) $(CFLAGS) -D$(FLAG) -pthread -o $@ $(SRCS)
+
+$(EXPERIMENT): $(TARGETS)
+ rm -rf $@
+ $(COLLECT) $(COLLECT_FLAGS) -o $@ $(TARGET) $(TARGET_FLAGS)
+
diff --git a/gprofng/testsuite/gprofng.display/mttest/check_results.pl b/gprofng/testsuite/gprofng.display/mttest/check_results.pl
new file mode 100644
index 00000000000..2d67e8b3d0e
--- /dev/null
+++ b/gprofng/testsuite/gprofng.display/mttest/check_results.pl
@@ -0,0 +1,46 @@
+#!/bin/sh -- # This comment tells perl not to loop!
+
+# Copyright (C) 2021 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+eval 'exec ${PERL:=/usr/bin/perl} -S $0 ${1+"$@"}'
+if 0;
+
+use strict;
+use File::Basename;
+require "acct.pm";
+
+# XXX This needs better documentation. Or any, really.
+# e.g. what does (1, 2, 3) signify?
+sub read_acct
+{
+ my ($fname) = @_;
+ my(@checkTime, $nlines);
+ @checkTime = (1, 2, 3);
+ acct::readAcct($fname, @checkTime);
+ if (exists $acct::Acct{"*"})
+ {
+ printf "Signal lost\n";
+ exit 1;
+ }
+}
+
+read_acct($ARGV[0]);
+acct::read_er_print_out($ARGV[1], -1);
+exit acct::createDiff();
diff --git a/gprofng/testsuite/gprofng.display/mttest/gethrtime.c b/gprofng/testsuite/gprofng.display/mttest/gethrtime.c
new file mode 100644
index 00000000000..aa5a4b92bcf
--- /dev/null
+++ b/gprofng/testsuite/gprofng.display/mttest/gethrtime.c
@@ -0,0 +1,270 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include <time.h>
+#include <unistd.h>
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/resource.h>
+#include <sys/time.h>
+#include <sys/times.h>
+#include <limits.h>
+
+#if defined(sparc) || defined(__sparcv9)
+#define SPARC 1
+#elif defined(__aarch64__)
+#define Aarch64 1
+#else
+#define Intel 1
+#endif
+
+/* typedef and function prototypes for hi-resolution timers */
+typedef long long hrtime_t;
+#if defined(__cplusplus)
+extern "C"
+{
+#endif
+ hrtime_t gethrtime ();
+ hrtime_t gethrvtime ();
+ hrtime_t gethrustime ();
+ hrtime_t gethrpxtime ();
+ int get_clock_rate ();
+ int get_ncpus ();
+
+ /* prototype underscore-appended wrappers for Fortran usage */
+ hrtime_t gethrtime_ ();
+ hrtime_t gethrustime_ ();
+ hrtime_t gethrpxtime_ ();
+ hrtime_t gethrvtime_ ();
+ int get_clock_rate_ ();
+#if defined(__cplusplus)
+}
+#endif
+
+/* =============================================================== */
+/*
+ * Below this are the get_clock_rate() and get_ncpus() for all OSs and architectures
+ */
+/* prototypes */
+
+/* implementation */
+static int clock_rate = 0;
+static int ncpus = 0;
+static char msgbuf[1024];
+
+int
+get_clock_rate (void)
+{
+ /* Linux version -- read /proc/cpuinfo
+ * Note the parsing is different on intel-Linux and sparc-Linux
+ */
+ FILE *fp = fopen ("/proc/cpuinfo", "r");
+ if (fp != NULL)
+ {
+ char temp[1024];
+ while (fgets (temp, sizeof (temp), fp) != NULL)
+ {
+#if defined(SPARC)
+ /* cpu count for SPARC linux -- read from /proc/cpuinfo */
+ if (strncmp (temp, "ncpus active", 12) == 0)
+ {
+ char *val = strchr (temp, ':');
+ ncpus = val ? atol (val + 1) : 0;
+ }
+#endif
+
+ if (clock_rate == 0)
+ {
+ /* pick the first line that gives a CPU clock rate */
+#if defined(SPARC)
+ long long clk;
+ if (strncmp (temp, "Cpu0ClkTck", 10) == 0)
+ {
+ char *val = strchr (temp, ':');
+ clk = val ? strtoll (val + 1, NULL, 16) : 0;
+ clock_rate = (int) (clk / 1000000);
+ }
+#elif defined(Intel)
+ if (strncmp (temp, "cpu MHz", 7) == 0)
+ {
+ char *val = strchr (temp, ':');
+ clock_rate = val ? atoi (val + 1) : 0;
+ }
+#endif
+ }
+
+ /* did we get a clock rate? */
+ if (clock_rate != 0)
+ {
+#if defined(SPARC)
+ /* since we got a cpu count, we can break from the look */
+ break;
+#endif
+ }
+#if defined(Intel)
+ /* On intel-Linux, count cpus based on "cpu MHz" lines */
+ if (strncmp (temp, "cpu MHz", 7) == 0)
+ ncpus++;
+#endif
+ }
+ fclose (fp);
+ }
+
+ if (clock_rate != 0)
+ sprintf (msgbuf, "Clock rate = %d MHz (from reading /proc/cpuinfo) %d CPUs\n", clock_rate, ncpus);
+
+ /* did we get a clock rate? */
+ if (clock_rate == 0)
+ {
+ clock_rate = 1000;
+ sprintf (msgbuf, "Clock rate = %d MHz (set by default) %d CPUs\n",
+ clock_rate, ncpus);
+ }
+ return clock_rate;
+}
+
+int
+get_ncpus (void)
+{
+ if (clock_rate == 0)
+ (void) get_clock_rate ();
+ return ncpus;
+}
+
+
+/* gethrpxtime -- per-process user+system CPU time from POSIX times() */
+/* does not include the child user and system CPU time */
+hrtime_t
+gethrpxtime (void)
+{
+ hrtime_t rc = 0;
+ static int initted = 0;
+ static hrtime_t ns_per_tick;
+ if (!initted)
+ {
+ static long ticks_per_sec;
+ ticks_per_sec = sysconf (_SC_CLK_TCK);
+ ns_per_tick = 1000000000 / ticks_per_sec;
+ initted = 1;
+ }
+ struct tms mytms = {0};
+
+ clock_t curtick = times (&mytms);
+ if (curtick == 0) return rc;
+ rc = (mytms.tms_utime + mytms.tms_stime) * ns_per_tick;
+ return rc;
+}
+
+/* gethrustime -- per-process user+system CPU time from getrusage() */
+hrtime_t
+gethrustime (void)
+{
+ struct rusage usage;
+ if (0 == getrusage (RUSAGE_SELF, &usage))
+ {
+ hrtime_t rc = usage.ru_utime.tv_sec /* seconds */
+ + usage.ru_stime.tv_sec;
+ rc = usage.ru_utime.tv_usec /* microseconds */
+ + usage.ru_stime.tv_usec + 1000000 * rc;
+ rc *= 1000; /* nanoseconds */
+ return rc;
+ }
+ else
+ return 0;
+}
+
+/*
+ * Below this are the Linux versions of gethrvtime and gethrtime
+ */
+hrtime_t
+gethrtcputime (void)
+{
+ struct timespec tp;
+ hrtime_t rc = 0;
+ int r = clock_gettime (CLOCK_THREAD_CPUTIME_ID, &tp);
+ if (r == 0)
+ rc = ((hrtime_t) tp.tv_sec) * 1000000000 + (hrtime_t) tp.tv_nsec;
+ return rc;
+}
+
+/* generic gethrvtime -- uses gethrtcputime */
+hrtime_t
+gethrvtime ()
+{
+ return gethrtcputime ();
+}
+
+/*
+ * CLOCK_MONOTONIC
+ * Clock that cannot be set and represents monotonic time since some
+ * unspecified starting point.
+ */
+hrtime_t
+gethrtime (void)
+{
+ struct timespec tp;
+ hrtime_t rc = 0;
+#ifdef CLOCK_MONOTONIC_RAW
+ int r = clock_gettime (CLOCK_MONOTONIC_RAW, &tp);
+#else
+ int r = clock_gettime (CLOCK_MONOTONIC, &tp);
+#endif
+
+ if (r == 0)
+ rc = ((hrtime_t) tp.tv_sec) * 1000000000 + (hrtime_t) tp.tv_nsec;
+ return rc;
+}
+
+/*
+ * define underscore-appended wrappers for Fortran usage
+ */
+hrtime_t
+gethrtime_ ()
+{
+ return gethrtime ();
+}
+
+hrtime_t
+gethrustime_ ()
+{
+ return gethrustime ();
+}
+
+hrtime_t
+gethrpxtime_ ()
+{
+ return gethrpxtime ();
+}
+
+hrtime_t
+gethrvtime_ ()
+{
+ return gethrvtime ();
+}
+
+int
+get_clock_rate_ ()
+{
+ return get_clock_rate ();
+}
+
+void
+init_micro_acct () { }
diff --git a/gprofng/testsuite/gprofng.display/mttest/mttest.c b/gprofng/testsuite/gprofng.display/mttest/mttest.c
new file mode 100644
index 00000000000..5d22af7635b
--- /dev/null
+++ b/gprofng/testsuite/gprofng.display/mttest/mttest.c
@@ -0,0 +1,1306 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+/* mttest -- show threaded use of global and local locks */
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+#include <sys/ipc.h>
+#include <sys/sem.h>
+#include <sys/sysinfo.h>
+#include <sys/procfs.h>
+#include <sys/fcntl.h>
+#include <stdio.h>
+#include <malloc.h>
+#include <string.h>
+#include <strings.h>
+#include <stdlib.h>
+#include <math.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <assert.h>
+#include <pthread.h>
+#include <semaphore.h>
+#include <errno.h>
+
+#ifdef CLONE
+#include <linux/sched.h>
+#include <signal.h>
+#include <sys/wait.h>
+#include <sys/syscall.h>
+#include <sys/mman.h>
+#include <linux/futex.h>
+#include <linux/unistd.h>
+static int CLONE_FLAGS[] = {
+ CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND | CLONE_SYSVSEM | SIGCHLD | CLONE_CHILD_CLEARTID | CLONE_PARENT_SETTID | CLONE_IO,
+ CLONE_VM | SIGCHLD | CLONE_CHILD_CLEARTID | CLONE_PARENT_SETTID,
+ CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND | CLONE_THREAD | CLONE_SYSVSEM | SIGCHLD | CLONE_CHILD_CLEARTID | CLONE_PARENT_SETTID | CLONE_IO,
+ CLONE_VM | CLONE_SIGHAND | CLONE_THREAD | SIGCHLD | CLONE_CHILD_CLEARTID | CLONE_PARENT_SETTID
+};
+
+#define CLONE_STACK_SIZE 8388608
+#define CLONE_TLS_SIZE 4096
+#define CLONE_RED_SIZE 4096
+
+#endif /* CLONE */
+
+typedef int processorid_t;
+typedef long long hrtime_t;
+typedef struct timespec timespec_t;
+extern hrtime_t gethrtime ();
+extern hrtime_t gethrvtime ();
+
+timespec_t * hrt_to_ts (hrtime_t hrt);
+static const pthread_mutex_t mutex_initializer = PTHREAD_MUTEX_INITIALIZER;
+#ifdef CLONE
+#define CLONE_IO 0x80000000 /* Clone io context */
+char *model = "Cloned threads";
+#else
+#ifdef BOUND
+char *model = "Bound Posix threads";
+#else
+char *model = "Unbound Posix threads";
+#endif
+#endif
+
+char *prtime (time_t *);
+int get_clock_rate (void);
+int get_ncpus ();
+
+#ifdef SELFTEST
+void start_prof (void);
+void finish_prof (void);
+#endif
+
+#define _STRUCTURED_PROC 1
+#define TRUE 1
+#define FALSE 0
+#define NUM_OF_THREADS 4
+#define NUM_OF_BLOCKS 4
+#define NUM_OF_RESOURCES 3
+#define MYTIMEOUT 1000000000
+#define MYDBLTIMEOUT ((double) 1000000000.)
+
+int repeat_count = 1; /* number of times to repeat test */
+int job_index = -1; /* index of selected job, if just one */
+int uniprocessor = 0; /* non-zero if -u specified; causes single processor bind */
+processorid_t cpuid;
+processorid_t ocpuid;
+
+// not a typedef; simplifies analyzer data display output
+#define workCtr_t double
+
+typedef struct workStruct_t
+{
+ workCtr_t sum_ctr;
+} workStruct_t;
+
+struct Workblk;
+
+typedef struct Workblk
+{
+ int index; /* index of this block */
+ int strategy; /* specifies type of locking to do */
+ int proffail; /* flag set if thread loses interrupts */
+#ifdef CLONE
+ pid_t tid; /* Linux kernel thread id */
+#else
+ pthread_t tid; /* thread processing buffer */
+#endif
+ pthread_mutex_t lock; /* lock for this buffer */
+ lwpid_t ilwpid; /* lwp processing buffer (initially) */
+ lwpid_t lwpid; /* lwp processing buffer (after sync) */
+
+ /* timers */
+ hrtime_t start; /* buffer fetched, wall clock */
+ hrtime_t vstart; /* buffer fetched, CPU timer */
+ hrtime_t ready; /* lock acquired (if needed), wall clock */
+ hrtime_t vready; /* lock acquired (if needed), CPU timer */
+ hrtime_t done; /* work done, wall clock */
+ hrtime_t vdone; /* work done, CPU timer */
+ hrtime_t compute_ready; /* compute ready, wall clock */
+ hrtime_t compute_vready; /* compute ready, CPU timer */
+ hrtime_t compute_done; /* compute done, wall clock */
+ hrtime_t compute_vdone; /* compute done, CPU timer */
+ struct Workblk *next; /* for queue management */
+ workStruct_t list[100];
+} Workblk;
+
+/* lookup table for behavior scripts */
+struct scripttab
+{
+ char *test_name;
+ void (*test_func)(Workblk *, struct scripttab *);
+ char *called_name;
+ void (*called_func)(workStruct_t *);
+};
+
+int locktest ();
+void resolve_symbols ();
+void init_micro_acct ();
+void compute_set (volatile workStruct_t *x);
+void compute (workStruct_t *x);
+void computeA (workStruct_t *x);
+void computeB (workStruct_t *x);
+void computeC (workStruct_t *x);
+void computeD (workStruct_t *x);
+void computeE (workStruct_t *x);
+void computeF (workStruct_t *x);
+void computeG (workStruct_t *x);
+void computeH (workStruct_t *x);
+void computeI (workStruct_t *x);
+void computeJ (workStruct_t *x);
+void computeK (workStruct_t *x);
+void addone (workCtr_t *x);
+void init_arrays (int strat);
+void dump_arrays ();
+void *do_work (void *v);
+void thread_work ();
+void nothreads (Workblk *array, struct scripttab *k);
+void lock_none (Workblk *array, struct scripttab *k);
+void cache_trash (Workblk *array, struct scripttab *k);
+void lock_global (Workblk *array, struct scripttab *k);
+void trylock_global (Workblk *array, struct scripttab *k);
+void lock_local (Workblk *array, struct scripttab *k);
+void calladd (Workblk *array, struct scripttab *k);
+void cond_global (Workblk *array, struct scripttab *k);
+void cond_timeout_global (Workblk *array, struct scripttab *k);
+void sema_global (Workblk *array, struct scripttab *k);
+void read_write (Workblk *array, struct scripttab *k);
+void s5sem (Workblk *array, struct scripttab *k);
+FILE *open_output (char *filename);
+int close_file (FILE *f);
+void scale_init (int argcc, char **argvv);
+void
+Print_Usage (int);
+
+struct scripttab scripttab[] = {
+#ifdef CLONE
+ {"nothreads", nothreads, "compute", compute},
+ {"lock_none", lock_none, "computeA", computeA},
+ {"cache_trash", cache_trash, "computeB", computeB},
+ {"calladd", calladd, "computeF", computeF},
+ {"sema_global", sema_global, "computeI", computeI},
+#else
+ {"nothreads", nothreads, "compute", compute},
+ {"cond_timeout_global", cond_timeout_global, "computeH", computeH},
+ {"lock_none", lock_none, "computeA", computeA},
+ {"cache_trash", cache_trash, "computeB", computeB},
+ {"lock_global", lock_global, "computeC", computeC},
+ {"trylock_global", trylock_global, "computeD", computeD},
+ {"lock_local", lock_local, "computeE", computeE},
+ {"calladd", calladd, "computeF", computeF},
+ {"sema_global", sema_global, "computeI", computeI},
+ {"cond_global", cond_global, "computeG", computeG},
+#endif
+ {NULL, NULL, NULL, NULL}
+};
+
+static pthread_mutex_t global_lock = PTHREAD_MUTEX_INITIALIZER;
+static pthread_mutex_t global_cond_lock = PTHREAD_MUTEX_INITIALIZER;
+static pthread_mutex_t global_cond_lock2 = PTHREAD_MUTEX_INITIALIZER;
+static pthread_cond_t global_cond = PTHREAD_COND_INITIALIZER;
+static timespec_t time_out;
+static sem_t global_sema_lock; /* dynamically initted */
+static int s5_sema_id;
+static int global_cond_flag = TRUE;
+static int count = NUM_OF_RESOURCES;
+
+/* an array of workStruct_ts that is contiguous */
+workStruct_t *element;
+
+typedef struct
+{
+ int size;
+ Workblk *arrays;
+} Head;
+
+int nthreads = NUM_OF_THREADS;
+int narrays = NUM_OF_BLOCKS;
+static Head head;
+char *name;
+FILE *fid;
+
+#ifdef CLONE
+static sem_t fetch_sema_lock;
+static pid_t *tid;
+static void *stack_space[NUM_OF_THREADS];
+static void *stack[NUM_OF_THREADS];
+int stack_size = CLONE_STACK_SIZE;
+#else
+static pthread_t *tid;
+#endif
+pthread_attr_t attr;
+
+int
+main (int argc, char **argv, char **envp)
+{
+ int i;
+ scale_init (argc, argv);
+
+#define ALIGNMENTOFFSET 2 /* adjust alignment */
+ i = sizeof (workStruct_t) * (narrays + ALIGNMENTOFFSET);
+ element = memalign (64, i);
+ if (element == NULL)
+ {
+ perror ("calloc( narrays, sizeof(workStruct_t) )");
+ exit (1);
+ }
+ compute_set (element);
+ memset (element, 0, i);
+ element += ALIGNMENTOFFSET;
+
+#ifdef SELFTEST
+ start_prof ();
+#endif
+ fid = open_output ("mttest.acct");
+ if (job_index == -1)
+ i = (sizeof (scripttab) / sizeof ( struct scripttab) - 1);
+ else
+ i = 1;
+ fprintf (fid, "Number of tests: %d Repeat count: %d\n", i, repeat_count);
+ fprintf (fid, "MHz: %d\n", get_clock_rate ());
+ fprintf (fid, "X Incl. Total Incl. CPU Incl. Sync. Wait Name (%s)\n",
+ model);
+ fprintf (fid, "X %7.3f %7.3f %7.3f %s\n",
+ 0.0, 0.0, 0.0, "<Unknown>");
+ fflush (fid);
+ name = strdup (argv[0]);
+ init_micro_acct ();
+ pthread_attr_init (&attr);
+
+#ifdef BOUND
+ pthread_attr_setscope (&attr, PTHREAD_SCOPE_SYSTEM);
+#endif
+ sem_init (&global_sema_lock, 0, count);
+#ifdef CLONE
+ sem_init (&fetch_sema_lock, 0, 1);
+ for (i = 0; i < nthreads; i++)
+ {
+ stack_space[i] = mmap (NULL, stack_size, PROT_READ | PROT_WRITE
+ | PROT_EXEC, MAP_PRIVATE | MAP_ANONYMOUS | MAP_GROWSDOWN, -1, 0);
+ if ((void*) - 1 == stack_space[i])
+ {
+ fprintf (stderr, "Error: mmap returned -1\n");
+ exit (1);
+ }
+ mprotect (stack_space[i], CLONE_RED_SIZE, PROT_NONE);
+ stack[i] = (char*) (stack_space[i]) + stack_size - CLONE_TLS_SIZE; // stack grows back
+ }
+#endif
+
+ resolve_symbols ();
+ i = locktest ();
+ close_file (fid);
+
+#ifdef SELFTEST
+ finish_prof ();
+#endif
+ return 0;
+}
+
+Workblk *in_queue = NULL;
+Workblk *in_queue_last = NULL;
+
+pthread_mutex_t queue_lock;
+
+void
+queue_work (Workblk * w)
+{
+ if (in_queue == NULL)
+ {
+ in_queue = w;
+ in_queue_last = w;
+ }
+ else
+ {
+ in_queue_last->next = w;
+ in_queue_last = w;
+ }
+}
+
+Workblk *
+fetch_work ()
+{
+ /* acquire the queue lock */
+#ifdef CLONE
+ sem_wait (&fetch_sema_lock);
+#else
+ pthread_mutex_lock (&queue_lock);
+#endif
+
+ /* get the next block */
+ Workblk *w = in_queue;
+ if (w != NULL)
+ {
+ in_queue = w->next;
+ w->next = NULL;
+ if (in_queue == NULL)
+ in_queue_last = NULL;
+ }
+#ifdef CLONE
+ sem_post (&fetch_sema_lock);
+#else
+ pthread_mutex_unlock (&queue_lock);
+#endif
+
+ /* return the block */
+ return w;
+}
+
+int
+locktest ()
+{
+ int i;
+ Workblk *array;
+ struct scripttab *k;
+ hrtime_t start;
+ hrtime_t vstart;
+ hrtime_t end;
+ hrtime_t vend;
+ struct timeval ttime;
+ time_t secs;
+
+ head.size = narrays;
+ head.arrays = (Workblk *) calloc (narrays, sizeof (Workblk));
+
+ for (i = 0, array = head.arrays; i < narrays; i++, array++)
+ array->index = i;
+
+ printf ("%s: number of %s = %d, number of blocks = %d, repeat %d times %s\n",
+ name, model, nthreads, narrays, repeat_count,
+ (uniprocessor == 0 ? "" : "[single CPU]"));
+#ifdef CLONE
+ tid = (pid_t *) calloc (nthreads*repeat_count, sizeof (pid_t));
+#else
+ tid = (pthread_t *) calloc (nthreads*repeat_count, sizeof (pthread_t));
+#endif
+ for (count = 0; count < repeat_count; count++)
+ {
+ (void) gettimeofday (&ttime, NULL);
+ secs = (time_t) ttime.tv_sec;
+ printf ("Iteration %d, starting %s\n", count + 1, prtime (&secs));
+ if (job_index == -1)
+ {
+ for (i = 0;; i++)
+ {
+ k = &scripttab[i];
+ if (k->test_name == NULL)
+ break;
+
+ printf ("begin thread_work, %s\n", k->test_name);
+ init_arrays (i);
+ start = gethrtime ();
+ vstart = gethrvtime ();
+
+ if (strcmp (k->test_name, "nothreads") == 0)
+ {
+ /* the "nothreads" task is special-cased to run in the main thread */
+ int one_thread = 1;
+ do_work (&one_thread);
+ }
+ else if (nthreads == 1)
+ {
+ int one_thread = 1;
+ do_work (&one_thread);
+ }
+ else
+ thread_work ();
+ end = gethrtime ();
+ vend = gethrvtime ();
+ dump_arrays (end - start, vend - vstart, i);
+ }
+ }
+ else
+ {
+ k = &scripttab[job_index];
+ if (k->test_name == NULL)
+ break;
+
+ printf ("begin thread_work, %s\n", k->test_name);
+ init_arrays (job_index);
+ start = gethrtime ();
+ vstart = gethrvtime ();
+ if (strcmp (k->test_name, "nothreads") == 0)
+ {
+ /* first one is special-cased to run in 1 thread */
+ int one_thread = 1;
+ do_work (&one_thread);
+ }
+ else if (nthreads == 1)
+ do_work (NULL);
+ else
+ thread_work ();
+ end = gethrtime ();
+ vend = gethrvtime ();
+ dump_arrays (end - start, vend - vstart, job_index);
+ }
+ }
+
+ /* we're done, return */
+ return (0);
+}
+
+void
+init_arrays (int strat)
+{
+ int i;
+ Workblk *array;
+ for (i = 0, array = head.arrays; i < narrays; i++, array++)
+ {
+ bzero (array, sizeof (Workblk));
+ array->index = i;
+ array->strategy = strat;
+ queue_work (array);
+ }
+}
+
+void
+dump_arrays (hrtime_t real, hrtime_t cpu, int case_index)
+{
+ int i;
+ double t1, t2, t3, t4, t5, t6, t7, t8;
+ Workblk *array;
+ struct scripttab *k;
+ double sumtotal = 0.;
+ double sumCPU = 0.;
+ double sumlock = 0.;
+ double sumCompTotal = 0.;
+ double sumCompCPU = 0.;
+ int proffail = 0;
+ printf (" real real real CPU\n");
+ printf ("idx (t id) total lock crunch crunch\n");
+ for (i = 0, array = head.arrays; i < narrays; i++, array++)
+ {
+ /* check to see if data lost for this block */
+ /* set flag to disable the comparison */
+ /* convert times to seconds */
+ t1 = ((double) array->done - array->start) / MYDBLTIMEOUT;
+ t2 = ((double) array->vdone - array->vstart) / MYDBLTIMEOUT;
+ t3 = ((double) array->ready - array->start) / MYDBLTIMEOUT;
+ t4 = ((double) array->vready - array->vstart) / MYDBLTIMEOUT;
+ t5 = ((double) array->done - array->ready) / MYDBLTIMEOUT;
+ t6 = ((double) array->vdone - array->vready) / MYDBLTIMEOUT;
+ t7 = ((double) array->compute_done - array->compute_ready) / MYDBLTIMEOUT;
+ t8 = ((double) array->compute_vdone - array->compute_vready)
+ / MYDBLTIMEOUT;
+
+ if (array->proffail != 0)
+ proffail = 1;
+ sumtotal = sumtotal + t1; /* incl. total time */
+ sumlock = sumlock + t3; /* incl. sync. wait time */
+#ifdef BOUND
+ /* NOTE:
+ * for bound threads, sumCPU includes the synchronization
+ * CPU time; for unbound it does not
+ */
+ sumCPU = sumCPU + t2; /* test incl. CPU time */
+#else
+ sumCPU = sumCPU + t6; /* test incl. CPU time */
+#endif
+ sumCompTotal = sumCompTotal + t7; /* compute incl. totaltime */
+ sumCompCPU = sumCompCPU + t8; /* compute incl. CPU time */
+ printf ("#%2d (t%3ld, il%3d, l%3d) %10.6f %10.6f %10.6f %10.6f%s\n",
+ array->index, array->tid, array->ilwpid, array->lwpid, t1, t3,
+ t5, t6, array->proffail == 0 ? "" : " *");
+ if (t4 == 0) printf ("t4 == 0\n");
+ assert (array->lwpid > 0);
+#if defined(BOUND)
+ assert (array->lwpid == array->ilwpid);
+#endif
+ }
+
+ k = &scripttab[case_index];
+
+ printf ("%-25s %10.6f %10.6f %-9s %10.6f\n", k->test_name, sumtotal,
+ sumlock, k->called_name, sumCPU);
+ printf ("main %10.6f\n\n",
+ (double) real / MYDBLTIMEOUT);
+
+ /* write accounting record for task */
+ fprintf (fid, "X %7.3f %7.3f %7.3f %s%s\n",
+ sumtotal, sumCPU, sumlock, k->test_name,
+ (proffail == 0 ? "" : " *"));
+ /* write accounting record for task's compute function */
+ fprintf (fid, "X %7.3f %7.3f 0. %s%s\n",
+ sumCompTotal, sumCompCPU, k->called_name,
+ (proffail == 0 ? "" : " *"));
+ fflush (fid);
+ fflush (stdout);
+
+}
+
+void
+thread_work ()
+{
+ int i;
+#ifdef CLONE
+ pid_t ctid[NUM_OF_THREADS];
+ for (i = 0; i < nthreads; i++)
+ ctid[i] = -1;
+#endif
+
+ /* create nthreads threads, having each start at do_work */
+ for (i = 0; i < nthreads; i++)
+ {
+ int retval;
+#ifdef BOUND
+ retval = pthread_create (&(tid[i]), &attr, do_work, 0);
+#endif
+#ifdef UNBOUND
+ retval = pthread_create (&(tid[i]), 0, do_work, 0);
+#endif
+#ifdef CLONE
+ tid[i] = retval = clone ((int (*)(void*))do_work, stack[i],
+ CLONE_FLAGS[i % sizeof (CLONE_FLAGS)], NULL,
+ &(ctid[i]), NULL, &(ctid[i]));
+ if (retval < 0)
+ {
+ perror ("Oops, clone failed");
+ exit (1);
+ }
+#else
+ if (retval != 0)
+ {
+ perror ("Oops, thr_create failed");
+ exit (1);
+ }
+#endif
+ }
+
+ /* wait for all threads to complete their work and join */
+ for (i = 0; i < nthreads; i++)
+ {
+#ifdef CLONE
+ int counter = 0;
+ while (ctid[i] == -1)
+ counter++;
+ while (ctid[i] != 0)
+ syscall (__NR_futex, &(ctid[i]), FUTEX_WAIT, tid[i], NULL);
+#else
+ pthread_join (tid[i], 0);
+#endif
+ }
+#ifdef CLONE
+ for (i = 0; i < nthreads / 2; i++)
+ {
+ int status;
+ waitpid (tid[i], &status, __WALL);
+ }
+#endif
+}
+
+/* do_work: process array's data with locking, based on array->strategy */
+void *
+do_work (void *v)
+{
+ Workblk *array;
+ struct scripttab *k;
+ int i;
+ volatile double x;
+
+#ifdef CLONE
+ pid_t mytid = syscall (__NR_gettid);
+#else
+ pthread_t mytid = pthread_self ();
+#endif
+
+ /* delay to ensure that a tick passes, so that the
+ * first profile packet doesn't show the thread startup time
+ * attributed to the accounting functions
+ */
+ x = 0;
+ for (i = 0; i < 2000000; i++)
+ x = x + 1.0;
+
+ for (;;)
+ {
+ /* fetch a workblk */
+ array = fetch_work ();
+ if (array == NULL) /* we're done */
+ break;
+ array->lock = mutex_initializer;
+ array->proffail = 0;
+ array->tid = mytid;
+ array->ilwpid = getpid () /* pthread_self()*/;
+
+ array->lwpid = -1; /* initialize to inappropriate value */
+ array->start = gethrtime ();
+ array->vstart = gethrvtime ();
+
+ k = &scripttab[array->strategy];
+ (k->test_func)(array, k);
+
+ array->done = gethrtime ();
+ array->vdone = gethrvtime ();
+ array->lwpid = getpid () /* pthread_self()*/;
+
+#if defined(BOUND)
+ assert (array->lwpid == array->ilwpid);
+#endif
+ }
+
+#ifdef CLONE
+ if (v == NULL)
+ syscall (__NR_exit);
+#endif
+ return NULL;
+}
+
+/* nothreads: process array's data with no locking; called without threads */
+void
+nothreads (Workblk *array, struct scripttab *k)
+{
+ array->ready = gethrtime ();
+ array->vready = gethrvtime ();
+ array->compute_ready = array->ready;
+ array->compute_vready = array->vready;
+
+ /* do some work on the current array */
+ (k->called_func)(&array->list[0]);
+
+ array->compute_done = gethrtime ();
+ array->compute_vdone = gethrvtime ();
+
+}
+
+/* lock_none: process array's data with no locking */
+void
+lock_none (Workblk *array, struct scripttab *k)
+{
+ array->ready = array->start;
+ array->vready = array->vstart;
+ array->compute_ready = array->ready;
+ array->compute_vready = array->vready;
+
+ /* do some work on the current array */
+ (k->called_func)(&array->list[0]);
+
+ array->compute_done = gethrtime ();
+ array->compute_vdone = gethrvtime ();
+
+}
+
+/* cache_trash_even:
+ * called for even numbered l1 cache lines
+ */
+void
+cache_trash_even (Workblk *array, struct scripttab *k)
+{
+ /* use a datum that will share a cache line with others */
+ (k->called_func)(&element[array->index]);
+}
+
+/* cache_trash_odd:
+ * called for odd numbered l1 cache lines
+ */
+void
+cache_trash_odd (Workblk *array, struct scripttab *k)
+{
+ /* use a datum that will share a cache line with others */
+ (k->called_func)(&element[array->index]);
+}
+
+/* cache_trash: multiple threads refer to adjacent words,
+ * causing false sharing of cache lines, and trashing
+ */
+void
+cache_trash (Workblk *array, struct scripttab *k)
+{
+ array->ready = array->start;
+ array->vready = array->vstart;
+ array->compute_ready = array->ready;
+ array->compute_vready = array->vready;
+
+ /* use a datum that will share a cache line with others */
+ if ((unsigned long) (&element[array->index]) / 32 & 1)
+ cache_trash_odd (array, k);
+ else
+ cache_trash_even (array, k);
+
+ array->compute_done = gethrtime ();
+ array->compute_vdone = gethrvtime ();
+}
+
+/* lock_global: use a global lock to process array's data */
+void
+lock_global (Workblk *array, struct scripttab *k)
+{
+ /* acquire the global lock */
+ pthread_mutex_lock (&global_lock);
+
+ array->ready = gethrtime ();
+ array->vready = gethrvtime ();
+ array->compute_ready = array->ready;
+ array->compute_vready = array->vready;
+
+ /* do some work on the current array */
+ (k->called_func)(&array->list[0]);
+
+ array->compute_done = gethrtime ();
+ array->compute_vdone = gethrvtime ();
+
+ /* free the global lock */
+ pthread_mutex_unlock (&global_lock);
+ /* make another call to preclude tail-call optimization on the unlock */
+ (void) gethrtime ();
+}
+
+/* trylock_global: busy-wait on a global lock to process array's data */
+void
+trylock_global (Workblk *array, struct scripttab *k)
+{
+ int ret;
+
+ /* set ready before starting, since this is a busy wait */
+ array->ready = gethrtime ();
+ array->vready = gethrvtime ();
+
+ /* busy wait to acquire the global lock */
+ do
+ {
+ ret = pthread_mutex_trylock (&global_lock);
+ }
+ while (ret == EBUSY);
+ array->compute_ready = gethrtime ();
+ array->compute_vready = gethrvtime ();
+
+ /* do some work on the current array */
+ (k->called_func)(&array->list[0]);
+
+ array->compute_done = gethrtime ();
+ array->compute_vdone = gethrvtime ();
+
+ /* free the global lock */
+ pthread_mutex_unlock (&global_lock);
+ /* make another call to preclude tail-call optimization on the unlock */
+ (void) gethrtime ();
+}
+
+/* lock_local: use a local lock to process array's data */
+void
+lock_local (Workblk *array, struct scripttab *k)
+{
+ /* acquire the local lock */
+ pthread_mutex_lock (&(array->lock));
+ array->ready = gethrtime ();
+ array->vready = gethrvtime ();
+ array->compute_ready = array->ready;
+ array->compute_vready = array->vready;
+
+ /* do some work on the current array */
+ (k->called_func)(&array->list[0]);
+
+ array->compute_done = gethrtime ();
+ array->compute_vdone = gethrvtime ();
+
+ /* free the local lock */
+ pthread_mutex_unlock (&array->lock);
+ /* make another call to preclude tail-call optimization on the unlock */
+ (void) gethrtime ();
+}
+
+/* cond_global: use a global condition variable to process array's data */
+void
+cond_global (Workblk *array, struct scripttab *k)
+{
+ /* acquire the global condition lock */
+ pthread_mutex_lock (&global_cond_lock);
+
+ /* check to see if the condition flag is true, If not then wait
+ for that condition flag to become true. */
+ while (global_cond_flag != TRUE)
+ pthread_cond_wait (&global_cond, &global_cond_lock);
+ /* Now, condition is true, and we have the global_cond_lock */
+
+ /* set the condition flag to be FALSE, so when a new thread
+ * is created, it should wait till this one is done.
+ */
+ global_cond_flag = FALSE;
+
+ /* free the global_cond_lock and acquire the global lock */
+ pthread_mutex_unlock (&global_cond_lock);
+ pthread_mutex_lock (&global_lock);
+
+ array->ready = gethrtime ();
+ array->vready = gethrvtime ();
+
+ array->compute_ready = array->ready;
+ array->compute_vready = array->vready;
+
+ /* do some work on the current array */
+ (k->called_func)(&array->list[0]);
+
+ array->compute_done = gethrtime ();
+ array->compute_vdone = gethrvtime ();
+
+ /* free the global lock */
+ pthread_mutex_unlock (&global_lock);
+
+ /* now set the condition, and signal any other threads */
+ pthread_mutex_lock (&global_cond_lock);
+
+ global_cond_flag = TRUE;
+ pthread_cond_signal (&global_cond);
+ pthread_mutex_unlock (&global_cond_lock);
+ /* make another call to preclude tail-call optimization on the unlock */
+ (void) gethrtime ();
+}
+
+/* cond_timeout_global: use a global condition time wait variable to
+ process array's data */
+void
+cond_timeout_global (Workblk *array, struct scripttab *k)
+{
+ int err;
+ struct timeval current_time;
+
+ /* acquire the global condition lock */
+ pthread_mutex_lock (&global_cond_lock);
+ gettimeofday (&current_time, NULL);
+ time_out.tv_sec = current_time.tv_sec;
+ time_out.tv_nsec = current_time.tv_usec * 1000;
+
+ /* check to see if the condition flag is true, If not then wait
+ * for that condition flag to become true
+ */
+
+ while (global_cond_flag != TRUE)
+ {
+ /* add MYTIMEOUT to current time for timeout */
+ time_out.tv_nsec += MYTIMEOUT;
+ while (time_out.tv_nsec > 1000000000)
+ {
+ time_out.tv_nsec -= 1000000000;
+ time_out.tv_sec++;
+ }
+ err = pthread_cond_timedwait (&global_cond, &global_cond_lock, &time_out);
+ if (err == 0)
+ break;
+ }
+ /* Now, condition is true, and we have the global_cond_lock */
+
+ pthread_mutex_unlock (&global_cond_lock);
+
+ pthread_mutex_lock (&global_cond_lock2);
+ global_cond_flag = FALSE;
+ pthread_mutex_unlock (&global_cond_lock2);
+
+ /* acquire the global lock */
+ pthread_mutex_lock (&global_lock);
+
+ array->ready = gethrtime ();
+ array->vready = gethrvtime ();
+
+ array->compute_ready = array->ready;
+ array->compute_vready = array->vready;
+
+ /* do some work on the current array */
+ (k->called_func)(&array->list[0]);
+ array->compute_done = gethrtime ();
+ array->compute_vdone = gethrvtime ();
+
+ /* free the global lock */
+ pthread_mutex_unlock (&global_lock);
+
+ /* now set the condition, and signal any other threads */
+ pthread_mutex_lock (&global_cond_lock2);
+
+ global_cond_flag = TRUE;
+ pthread_cond_signal (&global_cond);
+ pthread_mutex_unlock (&global_cond_lock2);
+
+ /* make another call to preclude tail-call optimization on the unlock */
+ (void) gethrtime ();
+}
+
+/* read_write: use a global Reader/Writer lock to process array's data */
+void
+read_write (Workblk *array, struct scripttab *k)
+{
+ /* make another call to preclude tail-call optimization on the unlock */
+ (void) gethrtime ();
+}
+
+/* sema_global: use a global semaphore to process array's data */
+void
+sema_global (Workblk *array, struct scripttab *k)
+{
+ sem_wait (&global_sema_lock);
+ array->ready = gethrtime ();
+ array->vready = gethrvtime ();
+ array->compute_ready = array->ready;
+ array->compute_vready = array->vready;
+
+ /* do some work on the current array */
+ (k->called_func)(&array->list[0]);
+
+ array->compute_done = gethrtime ();
+ array->compute_vdone = gethrvtime ();
+ sem_post (&global_sema_lock);
+
+ /* make another call to preclude tail-call optimization on the unlock */
+ (void) gethrtime ();
+}
+
+/* s5sema: use a global UNIX System V semaphore to process array's data */
+void
+s5sem (Workblk *array, struct scripttab *k)
+{
+ static struct sembuf op_wait[] = {
+ { 0, -1, IPC_NOWAIT}
+ };
+ static struct sembuf op_post[] = {
+ { 0, 1, 0}
+ };
+ int sema_val;
+
+ /* set ready before starting, since this is a busy wait */
+ array->ready = gethrtime ();
+ array->vready = gethrvtime ();
+ do
+ {
+ sema_val = semop (s5_sema_id, op_wait, 1);
+ }
+ while (sema_val == -1);
+
+ array->compute_ready = gethrtime ();
+ array->compute_vready = gethrvtime ();
+
+ /* do some work on the current array */
+ (k->called_func)(&array->list[0]);
+
+ array->compute_done = gethrtime ();
+ array->compute_vdone = gethrvtime ();
+
+ if (semop (s5_sema_id, op_post, 1) == -1)
+ perror ("semop: post");
+ /* make another call to preclude tail-call optimization on the unlock */
+ (void) gethrtime ();
+}
+
+/* lock_local: use a local lock to process array's data */
+void
+calladd (Workblk *array, struct scripttab *k)
+{
+ array->ready = array->start;
+ array->vready = array->vstart;
+ array->compute_ready = array->ready;
+ array->compute_vready = array->vready;
+ (k->called_func)(&array->list[0]);
+ array->compute_done = gethrtime ();
+ array->compute_vdone = gethrvtime ();
+}
+
+/* compute*: several copies, each burns cpu time, incrementing a workStruct_t */
+static long long loop_count = 80000000;
+
+void
+compute_set (volatile workStruct_t *x)
+{
+ double testtime = 3.0;
+ char *s = getenv ("SP_COLLECTOR_TEST_TIMER");
+ if (s)
+ {
+ testtime = atof (s);
+ if (testtime < 1.0)
+ testtime = 1.0;
+ }
+ hrtime_t t = gethrtime ();
+ x->sum_ctr = 0;
+ loop_count = 10000;
+ for (long long i = 0; i < loop_count; i++)
+ x->sum_ctr = x->sum_ctr + 1.0;
+ t = gethrtime () - t;
+ loop_count *= testtime * 1e9 / t;
+ printf ("compute_set: loop_count=%lld\n", loop_count);
+}
+
+void
+compute (workStruct_t *x)
+{
+ x->sum_ctr = 0;
+ for (long long i = 0; i < loop_count; i++)
+ x->sum_ctr = x->sum_ctr + 1.0;
+}
+
+void
+computeA (workStruct_t *x)
+{
+ x->sum_ctr = 0;
+ for (long long i = 0; i < loop_count; i++)
+ x->sum_ctr = x->sum_ctr + 1.0;
+}
+
+void
+computeB (workStruct_t *x)
+{
+ x->sum_ctr = 0;
+ for (long long i = 0; i < loop_count; i++)
+ x->sum_ctr = x->sum_ctr + 1.0;
+}
+
+void
+computeC (workStruct_t *x)
+{
+ x->sum_ctr = 0;
+ for (long long i = 0; i < loop_count; i++)
+ x->sum_ctr = x->sum_ctr + 1.0;
+}
+
+void
+computeD (workStruct_t *x)
+{
+ x->sum_ctr = 0;
+ for (long long i = 0; i < loop_count; i++)
+ x->sum_ctr = x->sum_ctr + 1.0;
+}
+
+void
+computeE (workStruct_t *x)
+{
+ x->sum_ctr = 0;
+ for (long long i = 0; i < loop_count; i++)
+ x->sum_ctr = x->sum_ctr + 1.0;
+}
+
+/* note that this one is different from the others, in that it calls
+ * a function to do the add
+ */
+void
+computeF (workStruct_t *x)
+{
+ x->sum_ctr = 0;
+ for (long long i = 0; i < loop_count; i++)
+ addone (&x->sum_ctr);
+}
+
+void
+computeG (workStruct_t *x)
+{
+ x->sum_ctr = 0;
+ for (long long i = 0; i < loop_count; i++)
+ x->sum_ctr = x->sum_ctr + 1.0;
+}
+
+void
+computeH (workStruct_t *x)
+{
+ x->sum_ctr = 0;
+ for (long long i = 0; i < loop_count; i++)
+ x->sum_ctr = x->sum_ctr + 1.0;
+}
+
+void
+computeI (workStruct_t *x)
+{
+ x->sum_ctr = 0;
+ for (long long i = 0; i < loop_count; i++)
+ x->sum_ctr = x->sum_ctr + 1.0;
+}
+
+void
+computeJ (workStruct_t *x)
+{
+ x->sum_ctr = 0;
+ for (long long i = 0; i < loop_count; i++)
+ x->sum_ctr = x->sum_ctr + 1.0;
+}
+
+void
+computeK (workStruct_t *x)
+{
+ x->sum_ctr = 0;
+ for (long long i = 0; i < loop_count; i++)
+ x->sum_ctr = x->sum_ctr + 1.0;
+}
+
+void
+addone (workCtr_t *x)
+{
+ *x = *x + 1.0;
+}
+
+FILE *
+open_output (char *filename)
+{
+ errno = 0;
+ FILE *f = fopen (filename, "w");
+ if (f == NULL)
+ fprintf (stderr, "Open of %s for output failed: %s\n",
+ filename, strerror (errno));
+ return f;
+}
+
+int
+close_file (FILE *f)
+{
+ if (f == NULL)
+ return 0;
+ errno = 0;
+ int s = fclose (f);
+ if (s == EOF)
+ perror ("Close failed");
+ return s;
+}
+
+void
+scale_init (int argcc, char **argvv)
+{
+ int num;
+ int ii;
+ char *p;
+ struct scripttab *kk;
+
+ if (argcc >= 2) /* run mttest with options */
+ {
+ for (int i = 1; i < argcc; i++)
+ {
+ int j = i;
+ if (argvv[i][0] != '-')
+ Print_Usage (1);
+ if (argvv[i][1] == 'h' || argvv[i][1] == 'H')
+ Print_Usage (0);
+ if (argvv[i][1] == 'u')
+ {
+ uniprocessor++;
+ continue;
+ }
+ if (strlen (argvv[i]) == 2)
+ {
+ /* argument has blank separating key and number */
+ j++;
+ if (argcc > j)
+ {
+ p = argvv[j];
+ num = atoi (p);
+ }
+ else
+ Print_Usage (1);
+ }
+ else
+ {
+ /* argument has no blank separating key and number */
+ p = argvv[i] + 2;
+ num = atoi (p);
+ }
+
+ switch (argvv[i][1])
+ {
+ case 't':
+ case 'T':
+ nthreads = num;
+ break;
+ case 'b':
+ case 'B':
+ narrays = num;
+ break;
+ case 'r':
+ case 'R':
+ repeat_count = num;
+ break;
+ case 'j':
+ case 'J':
+ /* argument is a job name; p points to string */
+ for (ii = 0;; ii++)
+ {
+ kk = &scripttab[ii];
+ if (kk->test_name == NULL) /* Oops, name not found */
+ Print_Usage (2);
+ if (strcmp (kk->test_name, p) == 0) /* found it */
+ break;
+ }
+ job_index = ii;
+ break;
+ default:
+ Print_Usage (1);
+ }
+ i = j;
+ }
+ }
+}
+
+void
+Print_Usage (int error)
+{
+ if (error == 1)
+ printf ("\nError: Incorrect option\n");
+ else if (error == 2)
+ printf ("\nError: job name not found\n");
+ printf ("Usage: mttest [-t num_of_threads] [-b num_of_blocks] "
+ "[-R repeat_count] [-u] [-j job_name]\n");
+ printf (" -u implies binding all LWPs to one CPU with processor_bind\n");
+ printf (" job_name is one of:\n");
+ for (int ii = 0;; ii++)
+ {
+ struct scripttab *kk = &scripttab[ii];
+ if (kk->test_name == NULL)
+ break;
+ printf ("\t%s\n", kk->test_name);
+ }
+ printf (" if job_name is omitted, each will be run in turn\n");
+ exit (-1);
+}
+
+void
+resolve_symbols ()
+{
+ global_cond_flag = TRUE;
+ pthread_mutex_lock (&queue_lock);
+ pthread_mutex_trylock (&queue_lock);
+ pthread_mutex_unlock (&queue_lock);
+ sem_post (&global_sema_lock);
+ sem_wait (&global_sema_lock);
+#ifdef CLONE
+ sem_post (&fetch_sema_lock);
+ sem_wait (&fetch_sema_lock);
+#endif
+}
+
+/* prtime (ttime)
+ * returns a pointer to a static string in the form:
+ * Thu 01 Jan 00 00:00:00\0
+ * 01234567890122345678901234
+ * ttime is a pointer to a UNIX time in seconds since epoch
+ * library routine localtime() is used
+ */
+char *
+prtime (time_t *ttime)
+{
+ static char *days[] = {
+ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
+ };
+ static char *months[] = {
+ "Jan", "Feb", "Mar", "Apr", "May", "Jun",
+ "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
+ };
+
+ static char cvbuf[26];
+
+ /* get the date and time */
+ struct tm *tp = localtime (ttime);
+
+ /* convert to string */
+ sprintf (cvbuf, "%3s %02d %s %02d %02d:%02d:%02d",
+ days[tp->tm_wday], tp->tm_mday, months[tp->tm_mon],
+ tp->tm_year % 100, tp->tm_hour, tp->tm_min, tp->tm_sec);
+ return cvbuf;
+}
diff --git a/gprofng/testsuite/gprofng.display/synprog/Makefile b/gprofng/testsuite/gprofng.display/synprog/Makefile
new file mode 100644
index 00000000000..7c50ea2e629
--- /dev/null
+++ b/gprofng/testsuite/gprofng.display/synprog/Makefile
@@ -0,0 +1,66 @@
+# Copyright (C) 2021 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+TARGETS = synprog so_syn.so so_syx.so
+TARGET = ./synprog
+ACCT_FILE = synprog.acct
+
+srcdir = .
+include $(srcdir)/../../lib/Makefile.skel
+
+SRCS = \
+ $(srcdir)/../mttest/gethrtime.c \
+ $(srcdir)/synprog.c \
+ $(srcdir)/callso.c \
+ $(srcdir)/callsx.c \
+ $(srcdir)/endcases.c \
+ $(srcdir)/fitos.c \
+ $(srcdir)/iosyn.c \
+ $(srcdir)/pagethrash.c \
+ $(srcdir)/stopwatch.c \
+ $(NULL)
+
+HDRS= \
+ $(srcdir)/inc_body.h \
+ $(srcdir)/inc_brace.h \
+ $(srcdir)/inc_entry.h \
+ $(srcdir)/inc_exit.h \
+ $(srcdir)/inc_func.h \
+ $(srcdir)/inc_inline.h \
+ $(srcdir)/inc_macro.h \
+ $(srcdir)/stopwatch.h \
+ $(NULL)
+
+
+$(TARGET): $(SRCS) $(HDRS) so_syx.so so_syn.so
+ @echo " ---- Build: $@ -----"
+ $(CC) $(CFLAGS) -o $@ $(SRCS) -ldl -lc -lrt
+
+so_syx.so: $(srcdir)/so_syx.c
+ @echo " ---- Build: $@ -----"
+ $(CC) $(CFLAGS) $(SHAREDOPT) -o $@ $(srcdir)/so_syx.c -lc
+
+so_syn.so: $(srcdir)/so_syn.c
+ @echo " ---- Build: $@ -----"
+ $(CC) $(CFLAGS) $(SHAREDOPT) -o $@ $(srcdir)/so_syn.c -lc
+
+$(EXPERIMENT): $(TARGETS)
+ rm -rf $@
+ $(COLLECT) $(COLLECT_FLAGS) -o $@ $(TARGET) $(TARGET_FLAGS)
+
diff --git a/gprofng/testsuite/gprofng.display/synprog/callso.c b/gprofng/testsuite/gprofng.display/synprog/callso.c
new file mode 100644
index 00000000000..6ff5c99d753
--- /dev/null
+++ b/gprofng/testsuite/gprofng.display/synprog/callso.c
@@ -0,0 +1,152 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <dlfcn.h>
+#include <errno.h>
+#include <string.h>
+#include "stopwatch.h"
+
+
+#define DYNSOROUTINE "so_cputime"
+#define DYNSONAME "./so_syn.so"
+
+/* callso -- dynamically link a shared object, and call a routine in it */
+
+#ifndef NONSHARED
+
+static void *so_object = NULL;
+static void closeso (void);
+
+int
+callso (int k)
+{
+ int i;
+ char buf[1024];
+ char *p;
+ char *q = DYNSONAME;
+ int errnum;
+
+ hrtime_t start = gethrtime ();
+ hrtime_t vstart = gethrvtime ();
+
+ /* Log the event */
+ wlog ("start of callso", NULL);
+
+ /* see if already linked */
+ if (so_object != NULL)
+ {
+ fprintf (stderr, "Execution error -- callso: so_object already linked\n");
+ return 0;
+ }
+
+ /* open the dynamic shared object */
+ so_object = NULL;
+ while (so_object == NULL)
+ {
+ so_object = dlopen (DYNSONAME, RTLD_NOW);
+ if (so_object != NULL)
+ break;
+ p = dlerror ();
+ if (q == NULL)
+ q = "DYNSONAME";
+ if (p == NULL)
+ p = "dlerror() returns NULL";
+ errnum = errno;
+ if (errnum == EINTR)
+ continue; /* retry */
+ else
+ {
+ fprintf (stderr, "Execution error -- callso: dlopen of %s failed--%s, errno=%d (%s)\n",
+ q, p, errnum, strerror (errnum));
+ return (0);
+ }
+ }
+
+ /* look up the routine name in it */
+ int (*so_routine)() = (int (*)())dlsym (so_object, DYNSOROUTINE);
+ if (so_routine == NULL)
+ {
+ fprintf (stderr, "Execution error -- callso: dlsym %s not found\n",
+ DYNSOROUTINE);
+ return (0);
+ }
+
+ /* invoke the routine */
+ long long count = 0;
+ do
+ {
+ i = (*so_routine)();
+ count++;
+ }
+ while (start + testtime * 1e9 > gethrtime ());
+
+ closeso ();
+ sprintf (buf, "end of callso, %s returned %d", DYNSOROUTINE, i);
+ wlog (buf, NULL);
+ fprintf (stderr, " Performed %lld while-loop iterations\n", count);
+ whrvlog ((gethrtime () - start), (gethrvtime () - vstart), "callso", NULL);
+ return 0;
+}
+
+/* closeso -- close a DSO */
+void
+closeso (void)
+{
+ /* Log the event */
+ wlog ("start of closeso", NULL);
+
+ /* ensure already linked */
+ if (so_object == NULL)
+ {
+ fprintf (stderr, "Execution error -- closeso: so_object not linked\n");
+ return;
+ }
+
+ /* close the dynamic shared object */
+ int rc = dlclose (so_object);
+ if (rc != 0)
+ {
+ fprintf (stderr, "Execution error -- closeso: dlclose() failed--%s\n",
+ dlerror ());
+ return;
+ }
+
+ /* clear the pointer */
+ so_object = NULL;
+ wlog ("end of closeso", NULL);
+ return;
+}
+
+#else /* NONSHARED */
+
+int
+callso (int i)
+{
+ return 0;
+}
+
+void
+closeso (void)
+{
+ return;
+}
+#endif /* NONSHARED */
diff --git a/gprofng/testsuite/gprofng.display/synprog/callsx.c b/gprofng/testsuite/gprofng.display/synprog/callsx.c
new file mode 100644
index 00000000000..5adcf90d8ee
--- /dev/null
+++ b/gprofng/testsuite/gprofng.display/synprog/callsx.c
@@ -0,0 +1,152 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <dlfcn.h>
+#include <errno.h>
+#include <string.h>
+#include "stopwatch.h"
+
+
+#define DYNSOROUTINE "sx_cputime"
+#define DYNSONAME "./so_syx.so"
+
+/* callsx -- dynamically link a shared object, and call a routine in it */
+
+#ifndef NONSHARED
+
+static void *sx_object = NULL;
+static void closesx (void);
+
+int
+callsx (int k)
+{
+ int i;
+ char buf[1024];
+ char *p;
+ char *q = DYNSONAME;
+ int errnum;
+
+ hrtime_t start = gethrtime ();
+ hrtime_t vstart = gethrvtime ();
+
+ /* Log the event */
+ wlog ("start of callsx", NULL);
+
+ /* see if already linked */
+ if (sx_object != NULL)
+ {
+ fprintf (stderr, "Execution error -- callsx: sx_object already linked\n");
+ return 0;
+ }
+
+ /* open the dynamic shared object */
+ /* open the dynamic shared object */
+ sx_object = NULL;
+ while (sx_object == NULL)
+ {
+ sx_object = dlopen (DYNSONAME, RTLD_NOW);
+ if (sx_object != NULL)
+ break;
+ p = dlerror ();
+ if (q == NULL) q = "DYNSONAME";
+ if (p == NULL) p = "dlerror() returns NULL";
+ errnum = errno;
+ if (errnum == EINTR)
+ continue; /* retry */
+ else
+ {
+ fprintf (stderr, "Execution error -- callso: dlopen of %s failed--%s, errno=%d (%s)\n",
+ q, p, errnum, strerror (errnum));
+ return (0);
+ }
+ }
+
+ /* look up the routine name in it */
+ int (*sx_routine)() = (int (*)())dlsym (sx_object, DYNSOROUTINE);
+ if (sx_routine == NULL)
+ {
+ fprintf (stderr, "Execution error -- callsx: dlsym %s not found\n",
+ DYNSOROUTINE);
+ return (0);
+ }
+
+ /* invoke the routine */
+ long long count = 0;
+ do
+ {
+ i = (*sx_routine)();
+ count++;
+ }
+ while (start + testtime * 1e9 > gethrtime ());
+
+ closesx ();
+ sprintf (buf, "end of callsx, %s returned %d", DYNSOROUTINE, i);
+ wlog (buf, NULL);
+ fprintf (stderr, " Performed %lld while-loop iterations\n", count);
+ whrvlog ((gethrtime () - start), (gethrvtime () - vstart), "callsx", NULL);
+ return 0;
+}
+
+/* closesx -- close a DSO */
+void
+closesx (void)
+{
+ /* Log the event */
+ wlog ("start of closesx", NULL);
+
+ /* ensure already linked */
+ if (sx_object == NULL)
+ {
+ fprintf (stderr, "Execution error -- closesx: sx_object not linked\n");
+ return;
+ }
+
+#if 0
+ /* close the dynamic shared object */
+ rc = dlclose (sx_object);
+ if (rc != 0)
+ {
+ fprintf (stderr, "Execution error -- closesx: dlclose() failed--%s\n",
+ dlerror ());
+ return;
+ }
+ /* clear the pointer */
+ sx_object = NULL;
+#endif
+ wlog ("end of closesx", NULL);
+ return;
+}
+
+#else /* NONSHARED */
+
+int
+callsx (int i)
+{
+ return 0;
+}
+
+void
+closesx (void)
+{
+ return;
+}
+#endif /* NONSHARED */
diff --git a/gprofng/testsuite/gprofng.display/synprog/check_results.pl b/gprofng/testsuite/gprofng.display/synprog/check_results.pl
new file mode 100755
index 00000000000..e77d0743cd7
--- /dev/null
+++ b/gprofng/testsuite/gprofng.display/synprog/check_results.pl
@@ -0,0 +1,40 @@
+#!/bin/sh -- # This comment tells perl not to loop!
+
+# Copyright (C) 2021 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+eval 'exec ${PERL:=/usr/dist/exe/perl} -S $0 ${1+"$@"}'
+if 0;
+
+use strict;
+require "acct.pm";
+
+my(@checkTime);
+
+if ("$ENV{DA_io}" eq "on") {
+ @checkTime = ();
+ acct::readAcct("synprog.acct2", @checkTime);
+} else {
+ @checkTime = (1, 2);
+ acct::readAcct("synprog.acct", @checkTime);
+}
+
+acct::read_er_print_out($ARGV[1], -1);
+acct::createDiff();
+exit acct::set_retVal(0);
diff --git a/gprofng/testsuite/gprofng.display/synprog/endcases.c b/gprofng/testsuite/gprofng.display/synprog/endcases.c
new file mode 100644
index 00000000000..5f9fb434d18
--- /dev/null
+++ b/gprofng/testsuite/gprofng.display/synprog/endcases.c
@@ -0,0 +1,208 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include <unistd.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+#include "stopwatch.h"
+
+/* endcases - examine some wierd endcases of programming style
+ * test cases for inlined code, macros, #included code, ...
+ */
+void inc_func (int);
+void inc_brace (int);
+void inc_body (int);
+void inc_entry (int);
+void inc_middle (int);
+void inc_exit (int);
+void macro_code (int);
+void ext_macro_code (int);
+void xinline_code (int);
+static void s_inline_code (int);
+void ext_inline_code (int);
+
+#ifndef NO_INLINE
+void xinline_code () __attribute__ ((always_inline));
+void s_inline_code () __attribute__ ((always_inline));
+#endif
+
+#include "inc_inline.h"
+
+int n;
+int x1M = 1000000;
+int x2M = 2000000;
+int x8M = 8000000;
+
+/* define a macro that burns CPU time */
+#define burncpu(nn) \
+ x = 0; \
+ for (j = 0; j < (nn * x8M); j++) { \
+ x = x + 1; \
+ }
+
+int
+endcases (int n)
+{
+ hrtime_t start = gethrtime ();
+ hrtime_t vstart = gethrvtime ();
+
+ /* Log the event */
+ wlog ("start of endcases", NULL);
+
+ if (n == 0)
+ n = 4;
+
+ long long count = 0;
+ do
+ {
+ /* test inlines */
+ xinline_code (n);
+ s_inline_code (n);
+ ext_inline_code (n);
+
+ /* test macros */
+ macro_code (n);
+ ext_macro_code (n);
+
+ /* test various cases of #include'd code */
+ inc_func (n);
+ inc_brace (n);
+ inc_body (n);
+ inc_entry (n);
+ inc_middle (n);
+ inc_exit (n);
+ count++;
+ }
+ while (start + testtime * 1e9 > gethrtime ());
+
+ fprintf (stderr, " Performed %lld while-loop iterations\n", count);
+ whrvlog (gethrtime () - start, gethrvtime () - vstart, "endcases", NULL);
+ return 0;
+}
+
+/* spend time in a inline locally-defined */
+void
+xinline_code (int n)
+{
+ int jmax = n * x8M;
+ volatile long x = 0;
+ for (int j = 0; j < jmax; j++)
+ x = x + 1;
+ if (x < 0.0)
+ printf ("ERROR: inline_code(): x < 0 (x=%ld)\n", x);
+}
+
+/* spend time in a static inline locally-defined */
+static void
+s_inline_code (int n)
+{
+ int jmax = n * x8M;
+ volatile long x = 0;
+ for (int j = 0; j < jmax; j++)
+ x = x + 1;
+ if (x < 0.0)
+ printf ("ERROR: s_inline_code(): x < 0 (x=%ld)\n", x);
+}
+
+/* spend time in a macro locally-defined */
+void
+macro_code (int n)
+{
+ int j;
+ volatile long x = 0;
+ burncpu (n);
+ if (x < 0.0)
+ printf ("ERROR: macro_code(): x < 0 (x=%ld)\n", x);
+}
+
+/* spend time in a macro externally-defined */
+#include "inc_macro.h"
+
+void
+ext_macro_code (int n)
+{
+ volatile long x = 0;
+ int j;
+ extburncpu (n);
+ if (x < 0.0)
+ printf ("ERROR: ext_macro_code(): x < 0 (x=%ld)\n", x);
+}
+
+#include "inc_func.h"
+
+void
+inc_brace (int n)
+#include "inc_brace.h"
+
+void
+inc_body (int n) {
+#include "inc_body.h"
+}
+
+void
+inc_entry (int n)
+#include "inc_entry.h"
+{
+ int jmax = n * x8M;
+ volatile float x = 0.0;
+ for (int j = 0; j < jmax; j++)
+ x = x + 1.0;
+ if (x < 0.0)
+ printf ("ERROR: inc_entry(): x < 0 (x=%f)\n", x);
+}
+}
+
+void
+inc_middle (int n)
+{
+ {
+ int jmax = n * x8M;
+ volatile float x = 0.0;
+ for (int j = 0; j < jmax; j++)
+ x = x + 1.0;
+ if (x < 0.0)
+ printf ("ERROR: inc_middle(): loop 1: x < 0 (x=%f)\n", x);
+ }
+#include "inc_body.h"
+ {
+ int jmax = n * x8M;
+ volatile float x = 0.0;
+ for (int j = 0; j < jmax; j++)
+ x = x + 1.0;
+ if (x < 0.0)
+ printf ("ERROR: inc_middle(): loop 2: x < 0 (x=%f)\n", x);
+ }
+}
+
+void
+inc_exit (int n)
+{
+ {
+ int jmax = n * x8M;
+ volatile float x = 0.0;
+ for (int j = 0; j < jmax; j++)
+ x = x + 1.0;
+ if (x < 0.0)
+ printf ("ERROR: inc_exit(): x < 0 (x=%f)\n", x);
+ }
+
+#include "inc_exit.h"
+
diff --git a/gprofng/testsuite/gprofng.display/synprog/fitos.c b/gprofng/testsuite/gprofng.display/synprog/fitos.c
new file mode 100644
index 00000000000..f343876972f
--- /dev/null
+++ b/gprofng/testsuite/gprofng.display/synprog/fitos.c
@@ -0,0 +1,78 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "stopwatch.h"
+
+/* The random number generator below is adapted from Kernighan and Ritchie,
+ * "C Programming Language", Second Edition, p. 46.
+ */
+
+#define IA 1103515245u
+#define IC 12345u
+#define IM 2147483648u
+
+static unsigned int current_random = 1;
+
+static int
+my_irand (int imax)
+{
+ /* Create a random integer between 0 and imax, inclusive. i.e. [0..imax] */
+
+ /* Use overflow to wrap */
+ current_random = current_random * IA + IC;
+ int ival = current_random & (IM - 1); /* Modulus */
+ ival = (int) ((float) ival * (float) (imax + 0.999) / (float) IM);
+ return ival;
+}
+
+#define N 6000000
+
+int
+fitos (int n)
+{
+ int i, k, retv;
+ hrtime_t start = gethrtime ();
+ hrtime_t vstart = gethrvtime ();
+
+ /* Log the event */
+ wlog ("start of fitos", NULL);
+
+ if (n <= 0)
+ n = 1;
+ int max = N * n;
+
+ long long count = 0;
+ do
+ {
+ for (current_random = 1, i = retv = k = 0; i < max; i++)
+ {
+ retv += my_irand (100);
+ k += (current_random & (IM - 1)) >= (1 << 22);
+ }
+ count++;
+ }
+ while (start + testtime * 1e9 > gethrtime ());
+ fprintf (stderr, "\t\t%d out of a total of %d >= 2^22 (%d)\n", k, max, retv);
+ fprintf (stderr, " Performed %lld while-loop iterations\n", count);
+ whrvlog ((gethrtime () - start), (gethrvtime () - vstart), "fitos", NULL);
+ return 0;
+}
diff --git a/gprofng/testsuite/gprofng.display/synprog/inc_body.h b/gprofng/testsuite/gprofng.display/synprog/inc_body.h
new file mode 100644
index 00000000000..2126ea35592
--- /dev/null
+++ b/gprofng/testsuite/gprofng.display/synprog/inc_body.h
@@ -0,0 +1,26 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+{
+ volatile float x = 0.0;
+ int jmax = n * 2000000;
+ for (int j = 0; j < jmax; j++)
+ x = x + 1.0;
+}
diff --git a/gprofng/testsuite/gprofng.display/synprog/inc_brace.h b/gprofng/testsuite/gprofng.display/synprog/inc_brace.h
new file mode 100644
index 00000000000..2126ea35592
--- /dev/null
+++ b/gprofng/testsuite/gprofng.display/synprog/inc_brace.h
@@ -0,0 +1,26 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+{
+ volatile float x = 0.0;
+ int jmax = n * 2000000;
+ for (int j = 0; j < jmax; j++)
+ x = x + 1.0;
+}
diff --git a/gprofng/testsuite/gprofng.display/synprog/inc_entry.h b/gprofng/testsuite/gprofng.display/synprog/inc_entry.h
new file mode 100644
index 00000000000..fdf9eedadec
--- /dev/null
+++ b/gprofng/testsuite/gprofng.display/synprog/inc_entry.h
@@ -0,0 +1,24 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+/* opening brace of function, second-level include */
+
+{
+#include "inc_body.h"
diff --git a/gprofng/testsuite/gprofng.display/synprog/inc_exit.h b/gprofng/testsuite/gprofng.display/synprog/inc_exit.h
new file mode 100644
index 00000000000..4ada146d1ba
--- /dev/null
+++ b/gprofng/testsuite/gprofng.display/synprog/inc_exit.h
@@ -0,0 +1,25 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+/* closing brace of function, second-level include */
+
+#include "inc_body.h"
+
+}
diff --git a/gprofng/testsuite/gprofng.display/synprog/inc_func.h b/gprofng/testsuite/gprofng.display/synprog/inc_func.h
new file mode 100644
index 00000000000..7b14359ba50
--- /dev/null
+++ b/gprofng/testsuite/gprofng.display/synprog/inc_func.h
@@ -0,0 +1,28 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+void
+inc_func (int n)
+{
+ volatile float x = 0.0;
+ int jmax = n * 2000000;
+ for (int j = 0; j < jmax; j++)
+ x = x + 1.0;
+}
diff --git a/gprofng/testsuite/gprofng.display/synprog/inc_inline.h b/gprofng/testsuite/gprofng.display/synprog/inc_inline.h
new file mode 100644
index 00000000000..219aee0fd90
--- /dev/null
+++ b/gprofng/testsuite/gprofng.display/synprog/inc_inline.h
@@ -0,0 +1,32 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef NO_INLINE
+void ext_inline_code() __attribute__ ((always_inline));
+#endif
+
+void
+ext_inline_code (int n)
+{
+ volatile long x = 0;
+ int jmax = n * 2000000;
+ for (int j = 0; j < jmax; j++)
+ x = x + 1;
+}
diff --git a/gprofng/testsuite/gprofng.display/synprog/inc_macro.h b/gprofng/testsuite/gprofng.display/synprog/inc_macro.h
new file mode 100644
index 00000000000..c2093daeacc
--- /dev/null
+++ b/gprofng/testsuite/gprofng.display/synprog/inc_macro.h
@@ -0,0 +1,26 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+/* define a macro that burns CPU time */
+#define extburncpu(n) \
+ x = 0.0; \
+ for(j=0; j<n*1000000; j++) { \
+ x = x + 1.0; \
+ }
diff --git a/gprofng/testsuite/gprofng.display/synprog/iosyn.c b/gprofng/testsuite/gprofng.display/synprog/iosyn.c
new file mode 100644
index 00000000000..278ceea31eb
--- /dev/null
+++ b/gprofng/testsuite/gprofng.display/synprog/iosyn.c
@@ -0,0 +1,614 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <strings.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <sys/mman.h>
+#include <sys/time.h>
+
+#include "stopwatch.h"
+
+/* parameters defining various tasks */
+#define BUFSIZE 16384
+#define NBLKS 1024
+
+#define SIZE ((int)(16*1024*1024))
+unsigned buffer[SIZE];
+extern FILE *fid2;
+
+/* ioerror - do some erroneous file IO operations */
+int
+ioerror ()
+{
+ FILE *fp; /* FILE pointer for stdio */
+ char *fname = NULL;
+ char *ptr = NULL;
+ int fd; /* file descriptor for raw IO */
+ int fd2; /* file descriptor for raw IO */
+ int stat;
+ char buf[BUFSIZE];
+ unsigned long size = 0;
+ char sfn[23] = "";
+
+ /* Log the regular read */
+ wlog ("start of ioerror", NULL);
+
+ /* fname is set to NULL.
+ Use various calls to create
+ a file.
+ */
+
+ fd = creat (fname, 0666);
+ fd = open (fname, 0666);
+ fd2 = 0;
+ fd = openat (fd2, fname, 0666);
+ fp = fopen (fname, "w");
+ fp = fopen ("/iotest", "w");
+ fp = NULL;
+ stat = fflush (fp);
+ stat = chmod (fname, 755);
+ stat = access (fname, 755);
+ fname = "/tmp/synprogXXXXXX";
+ strncpy (sfn, fname, sizeof (sfn));
+ fd = mkstemp (sfn);
+ stat = unlink (sfn);
+ stat = rename (fname, NULL);
+ unlink (fname);
+ fp = fopen (fname, "w");
+ stat = fclose (fp);
+ stat = fread (buf, 100, 2, fp);
+ stat = fwrite (buf, 100, 2, fp);
+ ptr = fgets (buf, size, fp);
+ read (10000, buf, 100);
+ write (10000, buf, 100);
+ stat = unlink (fname);
+ fname = NULL;
+ stat = mkdir (fname, 755);
+ stat = unlink (fname);
+ /*
+ These functions cannot be executed
+ if the File Pointer (fp) is set
+ to NULL. They generate segv failure
+ in actual call not inside of
+ the wrapper.
+
+ stat = fread(buf, size, 2, fp);
+ stat = fwrite(buf, size, 2, fp);
+ ptr = fgets(buf, size, fp);
+ stat = fputs(buf, fp);
+ stat = fprintf(fp, "%d\n", size);
+ stat = fseek(fp, size, size);
+ rewind(fp);
+ ftell(fp);
+ fpos_t pos;
+ stat = fsetpos(fp, &pos);
+ stat = fgetpos(fp, &pos);
+ */
+ return 0;
+}
+
+/*=======================================================*/
+
+/* iofile - do some file io operations */
+int
+iofile ()
+{
+ FILE *fp; /* FILE pointer for stdio */
+ int k; /* temp value for loop */
+ int i;
+ char *buf;
+ hrtime_t start;
+ hrtime_t vstart;
+ char sfn[23] = "";
+ char *fname = "/tmp/synprogXXXXXX";
+ int ret;
+ int readCnt = 0;
+ int bRead = 0;
+ int writeCnt = 0;
+ int bWritten = 0;
+ int otherIOCnt = 0;
+ int bytes = 0;
+
+ start = gethrtime ();
+ vstart = gethrvtime ();
+
+ /* Log the event */
+ bytes = wlog ("start of iofile -- stdio", NULL);
+ bWritten += bytes;
+ writeCnt++;
+
+ strncpy (sfn, fname, sizeof (sfn));
+ ret = mkstemp (sfn);
+ otherIOCnt++;
+ if (ret == -1)
+ {
+ fprintf (stderr, "Unable to make a temporary name\n");
+ exit (1);
+ }
+ bytes = fprintf (stderr, "\tUsing %s as scratch file\n", sfn);
+ bWritten += bytes;
+ writeCnt++;
+
+ /* allocate a buffer for the reading */
+ /* note that this buffer is leaked! */
+ buf = (char *) malloc (BUFSIZE);
+
+ /* open the file */
+ fp = fdopen (ret, "w");
+ otherIOCnt++;
+ if (fp == NULL)
+ {
+ fprintf (stderr, "++ERROR opening %s, error %d\n", sfn, errno);
+ exit (1);
+ }
+
+ /* loop, writing the buffer to the file... */
+ for (i = 0; i < NBLKS; i++)
+ {
+ k = fwrite (buf, sizeof (char), BUFSIZE, fp);
+ writeCnt++;
+ if (k != BUFSIZE)
+ {
+ fprintf (stderr, "++ERROR writing %s, error %d\n", sfn, errno);
+ exit (1);
+ }
+ bWritten += k;
+ }
+
+ fclose (fp);
+ fp = NULL;
+ otherIOCnt++;
+
+ sprintf (buf, "fwrite: %d blocks of %d", i, BUFSIZE);
+ bytes = whrvlog (gethrtime () - start, gethrvtime () - vstart, buf, NULL);
+ bWritten += bytes;
+ writeCnt++;
+
+
+ /* now reopen the file, and read it */
+ start = gethrtime ();
+ vstart = gethrvtime ();
+
+ fp = fopen (sfn, "r");
+ otherIOCnt++;
+ if (fp == NULL)
+ {
+ fprintf (stderr, "++ERROR opening %s, error %d\n", sfn, errno);
+ exit (1);
+ }
+ i = 0;
+ for (;;)
+ {
+ k = fread (buf, sizeof (char), BUFSIZE, fp);
+ readCnt++;
+ if (k < 0)
+ fprintf (stderr, "++ERROR reading %s, error %d\n", sfn, errno);
+
+
+ if (k == 0)
+ {
+ /* close the file */
+ fclose (fp);
+ fp = NULL;
+ otherIOCnt++;
+ break;
+
+ }
+ else if (k != BUFSIZE)
+ {
+ /* short read */
+ sprintf (buf, "\tunexpecter short read %d on %s\n", k, sfn);
+ fprintf (stderr, buf);
+ bRead += k;
+ break;
+ }
+ else
+ {
+ /* bump the block counter */
+ i++;
+ bRead += k;
+ }
+ }
+
+ if (fp != NULL)
+ {
+ fclose (fp);
+ fp = NULL;
+ }
+ sprintf (buf, "fread: %d blocks of %d", i, BUFSIZE);
+ bytes = whrvlog (gethrtime () - start, gethrvtime () - vstart, buf, NULL);
+ bWritten += bytes;
+ writeCnt++;
+
+ bWritten += 99; /* the number of bytes are written by the next fprintf */
+ writeCnt++;
+
+ unlink (sfn);
+ otherIOCnt++;
+ fprintf (fid2, "X %14d %14d %17d %15d %17d iofile\n",
+ bRead, readCnt, bWritten, writeCnt, otherIOCnt);
+ return 0;
+}
+
+/* iotest - do various io syscalls */
+int
+iotest ()
+{
+ char *fname = "/tmp/foobar";
+ int fd; /* file descriptor for raw IO */
+ int fd2; /* file descriptor for raw IO */
+ int k; /* temp value for loop */
+ char buf[BUFSIZE];
+ unsigned long size = 0;
+ int readCnt = 0;
+ int bRead = 0;
+ int writeCnt = 0;
+ int bWritten = 0;
+ int otherIOCnt = 0;
+ int bytes = 0;
+
+ /* Log the regular read */
+ bytes = wlog ("start of iotest", NULL);
+ bWritten += bytes;
+ writeCnt++;
+
+ /* create an empty file */
+ fd = creat (fname, 0666);
+ otherIOCnt++;
+
+ /* dup the file descriptor */
+ fd2 = dup (fd);
+ otherIOCnt++;
+ close (fd2);
+ otherIOCnt++;
+ close (fd);
+ otherIOCnt++;
+
+ /* now open the empty file */
+ fd = open (fname, O_RDONLY);
+ otherIOCnt++;
+
+ /* loop, reading into the buffer */
+ size = 0;
+ for (;;)
+ {
+ k = read (fd, buf, BUFSIZE);
+ readCnt++;
+ if (k < 0)
+ fprintf (stderr, "++ERROR reading %s, error %d\n", fname, errno);
+ else
+ {
+ size = size + k;
+ bRead += k;
+ }
+ if (k != BUFSIZE)
+ {
+ /* close the file */
+ close (fd);
+ fd = -1;
+ otherIOCnt++;
+ bRead += k;
+
+ /* short eread = EOF */
+ break;
+ }
+ }
+ if (fd != -1)
+ {
+ close (fd);
+ fd = -1;
+ }
+ bWritten += 99; /* the number of bytes are written by the next fprintf */
+ writeCnt++;
+
+ /* remove the file */
+ unlink (fname);
+ otherIOCnt++;
+ fprintf (fid2, "X %14d %14d %17d %15d %17d iotest\n",
+ bRead, readCnt, bWritten, writeCnt, otherIOCnt);
+
+ return 0;
+}
+
+/*
+ * Memory mapping routines-
+ *
+ * Allocate and deallocate memory using mmap and malloc.
+ *
+ * There is one parameter--the total number of megabytes to write,
+ * written in as many 16 megabyte files as are needed
+ */
+
+unsigned char *start = (unsigned char*) 0x80000000;
+unsigned char *stop;
+int nblocks;
+
+void
+memorymap (int megabytes)
+{
+ int readCnt = 0;
+ int bRead = 0;
+ int writeCnt = 0;
+ int bWritten = 0;
+ int otherIOCnt = 0;
+ int bytes;
+
+ /*
+ * First, see how much time it takes to mmap all the files.
+ *
+ * Second, pull in just a few pages of information to see how much
+ * time the "How much IBM do I hold?" question would take.
+ *
+ * Next, compare updating the database shared with updating it private
+ * and then recopying the changed segments.
+
+ * (We could catch the pages that we have altered by mapping the
+ * entire BIS read-only and then punching holes in it via an
+ * mprotect call as we catch segfaults. This gives us a list
+ * of the pages that we need to write, at the added expense of
+ * handling lots of interrupts.)
+ * (Notice that we don't test the case where we are adding to
+ * the BIS files. This is an interesting situation as we either
+ * have to open the last page past the last write point or reopen
+ * extendable in some way. We could do that by opening /dev/zero
+ * with MAP_ANON for addresses above our current usage point.
+ */
+
+ int i;
+ stop = start + 1024 * 1024 * (long long) megabytes;
+
+ printf ("Creating %d random numbers\n", SIZE);
+ for (i = 0; i < SIZE; i++)
+ buffer[i] = random (); // set pseudo-bis to noise
+ printf ("Done creating random numbers\n");
+
+
+ /*
+ * Write a database consisting of 16 megabyte files.
+ * Each filename contains the memory address into which
+ * the file should be reloaded.
+ */
+
+ printf ("Writing pseudo-bis files\n");
+ unsigned char* base = start;
+ nblocks = 0;
+ for (i = 0; i < megabytes; i += 16)
+ {
+ nblocks++;
+ // write data in 16MB files
+ char filename[256];
+ sprintf (filename, "bistest.%p.%d", base, i);
+ int fd = open (filename, O_CREAT | O_TRUNC | O_WRONLY, 0660);
+ otherIOCnt++;
+ if (fd == -1)
+ {
+ printf ("open of %s failed: %s\n", filename, strerror (errno));
+ exit (0);
+ }
+ bytes = write (fd, buffer, SIZE);
+ bWritten += bytes;
+ writeCnt++;
+ close (fd);
+ otherIOCnt++;
+ printf ("\twrote %d megabytes\n", i + 16);
+ base += 16 * 1024 * 1024;
+ }
+ printf ("Done writing files from %p to %p\n", start, stop);
+
+ int j;
+
+ printf ("Memory map all the files (private)\n");
+ for (i = 0; i < megabytes; i += 16)
+ {
+ unsigned char* base = start;
+ base += i * 1024 * 1024;
+ char filename[256];
+ sprintf (filename, "bistest.%p.%d", base, i);
+ int fd = open (filename, O_RDWR);
+ otherIOCnt++;
+ if (fd < 0)
+ printf ("open of %s failed: %s\n", filename, strerror (errno));
+ unsigned char *mp = (unsigned char*) mmap ((char*) base,
+ SIZE, PROT_READ | PROT_WRITE,
+ MAP_PRIVATE | MAP_FIXED, fd, 0);
+ if (mp == MAP_FAILED || mp != base)
+ {
+ printf ("mmap of %s failed: %s\n", filename, strerror (errno));
+ exit (1);
+ }
+
+ printf ("mapped %d bytes at %p\n", SIZE, base);
+ close (fd); // mmap will hold the file open for us
+ otherIOCnt++;
+ }
+
+ printf ("Mapping done\n");
+ fflush (stdout);
+ otherIOCnt++;
+
+ int ranlimit = 1000;
+ printf ("Access %d bytes at random\n", ranlimit);
+ int sum = 0;
+ for (i = 0; i < ranlimit; i++)
+ {
+ unsigned char *where = start +
+ (((unsigned long) random ()) % (stop - start));
+ sum += (int) *where;
+ }
+ printf ("Random byte access done\n");
+
+ ranlimit = 1000;
+ int ranrange = 256;
+ printf ("Alter %d random locations, %d bytes each (private)\n",
+ ranlimit, ranrange);
+
+ for (i = 0; i < ranlimit; i++)
+ {
+ unsigned char *where = start +
+ (((unsigned long) random ()) % (stop - start));
+ for (j = 0; j < ranrange; j++)
+ *where++ = j;
+ }
+
+ printf ("Memory alteration done\n");
+ fflush (stdout);
+ otherIOCnt++;
+
+ printf ("Copy all memory back to disk\n");
+
+ for (i = 0; i < megabytes; i += 16)
+ {
+ unsigned char* base = start;
+ base += i * 1024 * 1024;
+ char filename[256];
+ sprintf (filename, "bistest2.%p.%d", base, i);
+ int fd = open (filename, O_RDWR | O_CREAT | O_TRUNC, 0660);
+ otherIOCnt++;
+ if ((bytes = write (fd, base, SIZE)) == -1)
+ {
+ printf ("write of %s failed: %s\n", filename, strerror (errno));
+ exit (1);
+ }
+ bWritten += bytes;
+ writeCnt++;
+ close (fd);
+ otherIOCnt++;
+ }
+
+ printf ("Disk copy complete\n");
+ fflush (stdout);
+ otherIOCnt++;
+
+ printf ("Unmap all segments\n");
+ for (i = 0; i < megabytes; i += 16)
+ {
+ unsigned char* base = start;
+ base += i * 1024 * 1024;
+ if (munmap ((char*) base, SIZE) == -1)
+ {
+ printf ("munmap failed: %s\n", strerror (errno));
+ exit (1);
+ }
+ printf ("unmapped %d bytes at %p\n", SIZE, base);
+ }
+ printf ("Segment unmapping complete\n");
+ fflush (stdout);
+ otherIOCnt++;
+
+ printf ("Remap all segments as shared\n");
+ for (i = 0; i < megabytes; i += 16)
+ {
+ unsigned char* base = start;
+ base += i * 1024 * 1024;
+ char filename[256];
+ sprintf (filename, "bistest.%p.%d", base, i);
+ int fd = open (filename, O_RDWR);
+ otherIOCnt++;
+ char* mp = mmap ((char*) base, SIZE, PROT_READ | PROT_WRITE,
+ MAP_SHARED | MAP_FIXED, fd, 0);
+ if (mp == MAP_FAILED || (unsigned char*) mp != base)
+ {
+ printf ("re mmap of %s failed: %s\n", filename, strerror (errno));
+ exit (1);
+ }
+ printf ("remapped %d bytes at %p\n", SIZE, base);
+ close (fd); // mmap will hold the file open for us
+ otherIOCnt++;
+ }
+ printf ("Remapping complete\n");
+ fflush (stdout);
+ otherIOCnt++;
+
+ ranlimit = 1000;
+ ranrange = 256;
+ printf ("Alter %d random locations, %d bytes each (shared)\n",
+ ranlimit, ranrange);
+ for (i = 0; i < ranlimit; i++)
+ {
+ unsigned char* where = start +
+ (((unsigned long) random ()) % (stop - start));
+ for (j = 0; j < ranrange; j++)
+ *where++ = j;
+ }
+ printf ("Memory alteration done\n");
+ fflush (stdout);
+ otherIOCnt++;
+
+ printf ("Unmap all segments\n");
+ for (i = 0; i < megabytes; i += 16)
+ {
+ unsigned char *base = start;
+ base += i * 1024 * 1024;
+ if (munmap ((char*) base, SIZE) == -1)
+ {
+ printf ("munmap failed: %s\n", strerror (errno));
+ exit (1);
+ }
+ printf ("unmapped %d bytes at %p\n", SIZE, base);
+ }
+ printf ("Segment unmapping complete\n");
+ fflush (stdout);
+ otherIOCnt++;
+
+ base = start;
+
+ for (i = 0; i < megabytes; i += 16)
+ {
+ // write data in 16MB files
+ char filename[256];
+ sprintf (filename, "bistest.%p.%d", base, i);
+ if (unlink (filename) != 0)
+ {
+ printf ("unlink of %s failed: %s\n", filename, strerror (errno));
+ }
+ base += 16 * 1024 * 1024;
+ otherIOCnt++;
+ }
+
+ for (i = 0; i < megabytes; i += 16)
+ {
+ unsigned char* base = start;
+ base += i * 1024 * 1024;
+ char filename[256];
+ sprintf (filename, "bistest2.%p.%d", base, i);
+ if (unlink (filename) != 0)
+ {
+ printf ("unlink of %s failed: %s\n", filename, strerror (errno));
+ }
+ otherIOCnt++;
+ }
+ bWritten += 102; /* the number of bytes are written by the next fprintf */
+ writeCnt++;
+
+ fflush (fid2);
+ otherIOCnt++;
+
+ /* Record accounting record */
+ fprintf (fid2, "X %14d %14d %17d %15d %17d memorymap\n",
+ bRead, readCnt, bWritten, writeCnt, otherIOCnt);
+ printf ("Deleted scratch files\n");
+}
diff --git a/gprofng/testsuite/gprofng.display/synprog/pagethrash.c b/gprofng/testsuite/gprofng.display/synprog/pagethrash.c
new file mode 100644
index 00000000000..a9096005322
--- /dev/null
+++ b/gprofng/testsuite/gprofng.display/synprog/pagethrash.c
@@ -0,0 +1,75 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include <unistd.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include "stopwatch.h"
+
+/*=======================================================*/
+
+/* pagethrash - allocate some memory, and thrash around in it */
+int
+pagethrash (int thrashmb)
+{
+ char buf[1024];
+
+ hrtime_t start = gethrtime ();
+ hrtime_t vstart = gethrvtime ();
+
+ /* Log the event */
+ wlog ("start of pagethrash", NULL);
+
+ /* Start a stopwatch */
+ stopwatch_t *w = stpwtch_alloc ("pagethrash", 0);
+
+ /* compute the size */
+ unsigned long size = thrashmb * 1024 * 1024;
+ int pagesize = getpagesize ();
+ void *space = malloc (size + pagesize);
+ if (space == NULL)
+ {
+ fprintf (stderr, "\tpagethrash failed; can't get %ld bytes.\n", size);
+ exit (1);
+ }
+
+ /* round address to page boundary */
+ unsigned long loc = (((unsigned long) space + pagesize - 1) & ~(pagesize - 1));
+ long npages = size / pagesize;
+
+ /* touch all the pages to force them in */
+ for (long i = 0; i < npages; i++)
+ {
+ stpwtch_start (w);
+ *(int *) (loc + i * pagesize) = i;
+ stpwtch_stop (w);
+ }
+
+ /* now free up the space */
+ free (space);
+
+ /* print the timing results */
+ stpwtch_print (w);
+ free ((void *) w);
+
+ sprintf (buf, "pagethrash: %ld pages", npages);
+ whrvlog (gethrtime () - start, gethrvtime () - vstart, buf, NULL);
+ return 0;
+}
diff --git a/gprofng/testsuite/gprofng.display/synprog/so_syn.c b/gprofng/testsuite/gprofng.display/synprog/so_syn.c
new file mode 100644
index 00000000000..6fc5aa61163
--- /dev/null
+++ b/gprofng/testsuite/gprofng.display/synprog/so_syn.c
@@ -0,0 +1,69 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "stopwatch.h"
+
+static void so_burncpu ();
+
+int
+so_cputime ()
+{
+ wlog ("start of so_cputime", NULL);
+
+ /* put a memory leak in here */
+ (void) malloc (13);
+
+ fprintf (stderr, "so_burncpu @ 0x%08x\n", (unsigned int) so_burncpu);
+ so_burncpu ();
+
+ wlog ("end of so_cputime", NULL);
+ return 13;
+}
+
+void so_init () __attribute__ ((constructor));
+
+void
+so_init ()
+{
+ fprintf (stderr, "so_init executed\n");
+}
+
+/* so_burncpu - loop to use a bunch of user time */
+void
+so_burncpu ()
+{
+ hrtime_t start = gethrtime ();
+ hrtime_t vstart = gethrvtime ();
+ volatile float x = 0.; /* temp variable for f.p. calculation */
+ long long count = 0;
+ do
+ {
+ x = 0.0;
+ for (int j = 0; j < 100000; j++)
+ x = x + 1.0;
+ count++;
+ }
+ while (start + testtime * 1e9 > gethrtime ());
+
+ fprintf (stderr, " Performed %lld while-loop iterations\n", count);
+ whrvlog (gethrtime () - start, gethrvtime () - vstart, "so_burncpu", NULL);
+}
diff --git a/gprofng/testsuite/gprofng.display/synprog/so_syx.c b/gprofng/testsuite/gprofng.display/synprog/so_syx.c
new file mode 100644
index 00000000000..ae7da6f7414
--- /dev/null
+++ b/gprofng/testsuite/gprofng.display/synprog/so_syx.c
@@ -0,0 +1,68 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "stopwatch.h"
+
+static void sx_burncpu ();
+
+int
+sx_cputime ()
+{
+ wlog ("start of sx_cputime", NULL);
+
+ /* put a memory leak in here */
+ (void) malloc (13);
+
+ fprintf (stderr, "sx_burncpu @ 0x%08x\n", (unsigned int) sx_burncpu);
+ sx_burncpu ();
+ wlog ("end of sx_cputime", NULL);
+ return 13;
+}
+
+void sx_init () __attribute__ ((constructor));
+
+void
+sx_init ()
+{
+ fprintf (stderr, "sx_init executed\n");
+}
+
+/* sx_burncpu - loop to use a bunch of user time */
+void
+sx_burncpu ()
+{
+ hrtime_t start = gethrtime ();
+ hrtime_t vstart = gethrvtime ();
+ volatile float x = 0.; /* temp variable for f.p. calculation */
+ long long count = 0;
+ do
+ {
+ x = 0.0;
+ for (int j = 0; j < 100000; j++)
+ x = x + 1.0;
+ count++;
+ }
+ while (start + testtime * 1e9 > gethrtime ());
+
+ fprintf (stderr, " Performed %lld while-loop iterations\n", count);
+ whrvlog (gethrtime () - start, gethrvtime () - vstart, "sx_burncpu", NULL);
+}
diff --git a/gprofng/testsuite/gprofng.display/synprog/stopwatch.c b/gprofng/testsuite/gprofng.display/synprog/stopwatch.c
new file mode 100644
index 00000000000..5cb528177d5
--- /dev/null
+++ b/gprofng/testsuite/gprofng.display/synprog/stopwatch.c
@@ -0,0 +1,294 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+
+#include "stopwatch.h"
+
+static char *prhrdelta (hrtime_t);
+static char *prhrvdelta (hrtime_t);
+void init_micro_acct ();
+
+/* stopwatch routines */
+void
+stpwtch_calibrate ()
+{
+ struct timeval ttime;
+ char buf[1024];
+
+ (void) gettimeofday (&ttime, NULL);
+ time_t secs = (time_t) ttime.tv_sec;
+ sprintf (buf, "%s Stopwatch calibration", prtime (&secs));
+ wlog (buf, NULL);
+
+ init_micro_acct ();
+ stopwatch_t *inner = stpwtch_alloc ("inner", 0);
+ stopwatch_t *outer = stpwtch_alloc ("outer", 0);
+ for (int i = 0; i < 1000; i++)
+ {
+ stpwtch_start (outer);
+ stpwtch_start (inner);
+ stpwtch_stop (inner);
+ stpwtch_stop (outer);
+ }
+ stpwtch_print (inner);
+ stpwtch_print (outer);
+ free ((void *) inner);
+ free ((void *) outer);
+}
+
+stopwatch_t *
+stpwtch_alloc (char *name, int histo)
+{
+ stopwatch_t *w = (stopwatch_t *) malloc (sizeof (stopwatch_t));
+ if (w == NULL)
+ {
+ fprintf (stderr, "stpwtch_alloc(%s, %d): malloc failed\n", name, histo);
+ return NULL;
+ }
+ w->sum = 0.;
+ w->sumsq = 0.;
+ w->count = 0;
+ w->min = 0;
+ w->last = 0;
+ w->name = strdup (name);
+ stpwtch_start (w);
+ w->begin = w->start;
+
+ return w;
+}
+
+void
+stpwtch_start (stopwatch_t *w)
+{
+ w->start = gethrtime ();
+}
+
+void
+stpwtch_stop (stopwatch_t *w)
+{
+ if (w->start == 0) /* if never started, ignore the call */
+ return;
+
+ /* get stopping high-res time */
+ w->tempus = gethrtime ();
+
+ /* bump count of stops */
+ w->count++;
+
+ /* compute the delta for this call */
+ w->delta = w->tempus - w->start;
+
+ /* add in this one */
+ w->last = (double) (w->delta);
+ w->sum = w->sum + w->last;
+ w->sumsq = w->sumsq + w->last * w->last;
+
+ if (w->max == 0)
+ w->max = w->last;
+ else if (w->max < w->last)
+ w->max = w->last;
+ if (w->min == 0)
+ w->min = w->last;
+ else if (w->min > w->last)
+ w->min = w->last;
+
+ /* show stopwatch stopped */
+ w->start = 0;
+}
+
+void
+stpwtch_print (stopwatch_t *w)
+{
+ char cvdbuf[1024];
+
+ /* get stopping high-res time */
+ w->tempus = gethrtime ();
+ double duration = (double) (w->tempus - w->begin);
+
+ if (w->count == 0)
+ sprintf (cvdbuf, " 0. s. ( 0. %% of %12.6f s.) -- %s\n",
+ (duration / 1000000000.), w->name);
+ else if (w->count == 1)
+ sprintf (cvdbuf, " %12.6f s. (%4.1f %%%% of %.6f s.) -- %s\n",
+ w->sum / 1000000000., (100. * w->sum) / duration,
+ duration / 1000000000., w->name);
+ else
+ sprintf (cvdbuf,
+ " %12.6f s. (%4.1f %%%% of %.6f s.) -- %s\n\tN = %d,"
+ " avg = %.3f us., min = %.3f, max = %.3f\n",
+ w->sum / 1000000000., (100. * w->sum) / duration,
+ duration / 1000000000., w->name, w->count,
+ w->sum / 1000. / ((double) (w->count > 0 ? w->count : 1)),
+ ((double) w->min / 1000.), ((double) w->max / 1000.));
+ fprintf (stderr, cvdbuf);
+}
+
+/* hrtime routines */
+int
+whrlog (hrtime_t delta, char *event, char *string)
+{
+ char buf[1024];
+ if (string == NULL)
+ sprintf (buf, " %s secs. in %s\n", prhrdelta (delta), event);
+ else
+ sprintf (buf, " %s secs. in %s\n\t%s\n", prhrdelta (delta), event, string);
+ int bytes = fprintf (stderr, "%s", buf);
+ return bytes;
+}
+
+/* hrtime routines */
+int
+whrvlog (hrtime_t delta, hrtime_t vdelta, char *event, char *string)
+{
+ char buf[1024];
+ if (string == NULL)
+ sprintf (buf, " %s wall-secs., %s CPU-secs., in %s\n",
+ prhrdelta (delta), prhrvdelta (vdelta), event);
+ else
+ sprintf (buf, " %s wall-secs., %s CPU-secs., in %s\n\t%s\n",
+ prhrdelta (delta), prhrvdelta (vdelta), event, string);
+ int bytes = fprintf (stderr, "%s", buf);
+ return bytes;
+}
+
+/* prhrdelta (hrtime_t delta)
+ * returns a pointer to a static string in the form:
+ * sec.micros
+ * 1.123456
+ * 0123456789
+ *
+ * prhrvdelta is the same, but uses a different static buffer
+ */
+static char *
+prhrdelta (hrtime_t delta)
+{
+ static char cvdbuf[26];
+
+ /* convert to seconds */
+ double tempus = ((double) delta) / (double) 1000000000.;
+ sprintf (cvdbuf, "%10.6f", tempus);
+ return cvdbuf;
+}
+
+static char *
+prhrvdelta (hrtime_t delta)
+{
+ static char cvdbuf[26];
+
+ /* convert to seconds */
+ double tempus = ((double) delta) / (double) 1000000000.;
+ sprintf (cvdbuf, "%10.6f", tempus);
+ return cvdbuf;
+}
+
+/* time of day routines */
+
+/* starting time - first timestamp; initialized on first call */
+static struct timeval starttime = {0, 0};
+static struct timeval ttime; /* last-recorded timestamp */
+static struct timeval deltatime; /* delta of last-rec'd timestamp */
+
+static void
+snaptod ()
+{
+ (void) gettimeofday (&ttime, NULL);
+ if (starttime.tv_sec == 0)
+ starttime = ttime;
+
+ deltatime.tv_sec = ttime.tv_sec - starttime.tv_sec;
+ deltatime.tv_usec = ttime.tv_usec - starttime.tv_usec;
+ while (deltatime.tv_usec < 0)
+ {
+ deltatime.tv_sec--;
+ deltatime.tv_usec += 1000000;
+ }
+}
+
+int
+wlog (char *event, char *string)
+{
+ char buf[1024];
+
+ snaptod ();
+ if (string == NULL)
+ sprintf (buf, "%s ===== (%d) %s\n", prdelta (deltatime),
+ (int) getpid (), event);
+ else
+ sprintf (buf, "%s ===== (%d) %s\n\t%s\n", prdelta (deltatime),
+ (int) getpid (), event, string);
+ int bytes = fprintf (stderr, "%s", buf);
+ return bytes;
+}
+
+/* prtime (ttime)
+ * returns a pointer to a static string in the form:
+ * Thu 01 Jan 90 00:00:00\0
+ * 01234567890122345678901234
+ *
+ * ttime is a pointer to a UNIX time in seconds since epoch
+ * library routine localtime() is used
+ */
+char *
+prtime (time_t *ttime)
+{
+ static char *days[] = {
+ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
+ };
+ static char *months[] = {
+ "Jan", "Feb", "Mar", "Apr", "May", "Jun",
+ "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
+ };
+ static char cvbuf[26];
+
+ /* get the date and time */
+ struct tm *tp = localtime (ttime);
+
+ /* convert to string */
+ sprintf (cvbuf, "%3s %02d %s %02d %02d:%02d:%02d", days[tp->tm_wday],
+ tp->tm_mday, months[tp->tm_mon], tp->tm_year % 100,
+ tp->tm_hour, tp->tm_min, tp->tm_sec);
+ return cvbuf;
+}
+
+char *
+prdelta (struct timeval tempus)
+{
+ static char cvdbuf[26];
+ while (tempus.tv_usec < 0)
+ {
+ tempus.tv_sec--;
+ tempus.tv_usec += 1000000;
+ }
+ long seconds = tempus.tv_sec % 60;
+ long minutes = tempus.tv_sec / 60;
+ long hours = minutes / 60;
+ minutes = minutes % 60;
+ sprintf (cvdbuf, "%02ld:%02ld:%02ld.%03ld ",
+ hours, minutes, seconds, (long) tempus.tv_usec / 1000);
+ return cvdbuf;
+}
diff --git a/gprofng/testsuite/gprofng.display/synprog/stopwatch.h b/gprofng/testsuite/gprofng.display/synprog/stopwatch.h
new file mode 100644
index 00000000000..704b16585b7
--- /dev/null
+++ b/gprofng/testsuite/gprofng.display/synprog/stopwatch.h
@@ -0,0 +1,61 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _STOPWATCH_
+#define _STOPWATCH_
+
+#include <time.h>
+#include <sys/time.h>
+
+typedef int processorid_t;
+typedef long long hrtime_t;
+typedef struct timespec timespec_t;
+extern hrtime_t gethrtime ();
+extern hrtime_t gethrvtime ();
+
+extern double testtime;
+char *prtime (time_t *t);
+char *prdelta (struct timeval t);
+int wlog (char *, char *);
+int whrlog (hrtime_t delta, char *, char *);
+int whrvlog (hrtime_t delta, hrtime_t vdelta, char *, char *);
+
+typedef struct stopwatch
+{
+ double sum; /* in nanoseconds */
+ double sumsq; /* in (nanoseconds ** 2) */
+ double last; /* in nanoseconds */
+ hrtime_t begin;
+ hrtime_t start;
+ hrtime_t tempus;
+ hrtime_t delta;
+ hrtime_t min;
+ hrtime_t max;
+ int count;
+ char *name;
+} stopwatch_t;
+
+stopwatch_t *stpwtch_alloc (char *, int);
+void stpwtch_calibrate ();
+void stpwtch_start (stopwatch_t *);
+void stpwtch_stop (stopwatch_t *);
+void stpwtch_print (stopwatch_t *);
+
+#endif
diff --git a/gprofng/testsuite/gprofng.display/synprog/synprog.c b/gprofng/testsuite/gprofng.display/synprog/synprog.c
new file mode 100644
index 00000000000..a5361a495c0
--- /dev/null
+++ b/gprofng/testsuite/gprofng.display/synprog/synprog.c
@@ -0,0 +1,1823 @@
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+/* synprog.c - synthetic program to use for testing performance tools */
+#define _GNU_SOURCE
+#include <sched.h>
+#include <sys/types.h>
+#include <sys/param.h>
+#include <sys/wait.h>
+#include <sys/ucontext.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <errno.h>
+#include <signal.h>
+#include <unistd.h>
+#include <sched.h>
+#include <sys/resource.h>
+#include <string.h>
+#include <sys/mman.h>
+#include <dlfcn.h>
+#include <fcntl.h>
+#include "stopwatch.h"
+
+int get_ncpus ();
+int get_clock_rate ();
+void acct_init (char *); /* initialize accounting */
+void iotrace_init (char *); /* initialize IO trace accounting */
+void commandline (char *); /* routine execute a scenario */
+void forkcopy (char *, int); /* fork copy of self to run string */
+int clonecopy (void *);
+#define CLONE_STACK_SIZE 8388608
+#define CLONE_TLS_SIZE 4096
+#define CLONE_RED_SIZE 4096
+#define CLONE_IO 0x80000000 /* Clone io context */
+void forkchild (char *); /* fork child to run string */
+void reapchildren (void); /* reap all children */
+void reapchild (int); /* reap a child after getting SIGCLD */
+void check_sigmask (); /* check that SIGPROF and SIGEMT are not masked */
+void masksig (); /* real code to mask SIGPROF and SIGEMT */
+
+hrtime_t progstart;
+hrtime_t progvstart;
+hrtime_t gethrustime ();
+static int include_system_time = 0;
+
+static hrtime_t
+getmyvtime ()
+{
+ if (include_system_time == 0)
+ return gethrvtime ();
+ return gethrustime ();
+}
+
+void (*sigset (int sig, void (*disp)(int)))(int);
+#define ITIMER_REALPROF ITIMER_REAL
+/* Linux needs to have this defined for RTLD_NEXT and RTLD_DEFAULT */
+/* If the first argument of `dlsym' or `dlvsym' is set to RTLD_NEXT */
+#define RTLD_NEXT ((void *) -1l)
+/* If the first argument to `dlsym' or `dlvsym' is set to RTLD_DEFAULT */
+#define RTLD_DEFAULT ((void *) 0)
+
+FILE *fid;
+FILE *fid2;
+double testtime = 3.0;
+static char acct_file[128];
+static char new_name[128];
+static char child_name[128];
+
+/* descendant process tracking */
+static unsigned syn_fork = 0;
+static unsigned syn_exec = 0;
+static unsigned syn_combo = 0;
+
+/* various behavior routines */
+int bounce (int); /* bounce with a->b->a->b-> ... */
+int callso (int); /* so load test */
+int callsx (int); /* alternate so load test */
+int correlate (int); /* test correlation with profiling */
+int cputime (int); /* use a bunch of user cpu time (fp) */
+int doabort (int); /* force a SEGV by dereferencing NULL */
+int dousleep (int); /* loop with a usleep call */
+int endcases (int); /* test various code construct endcases */
+int fitos (int); /* test various code construct endcases */
+int gpf (int); /* show gprof fallacy */
+int hrv (int); /* gethrvtime calls */
+int icputime (int); /* use a bunch of user cpu time (long) */
+int iofile (int); /* do operations on a temporary file */
+int iotest (int); /* do various io system calls */
+int ioerror (int); /* do various erroneous io system calls */
+int ldso (int); /* use a bunch of time in ld.so */
+int masksignals (int); /* mask the SIGEMT and SIGPROF signals */
+int memorymap (int); /* do mmap operation for io tracing */
+int muldiv (int); /* do integer multiply/divide for a time */
+int naptime (int); /* sleep for a time */
+int pagethrash (int); /* thrash around in memory */
+int recurse (int); /* recursion test */
+int recursedeep (int); /* deep recursion test */
+int sched (int); /* loop over sched_yield calls */
+int sigtime (int); /* use a bunch of time in a signal handler */
+int synccall (int); /* loop over sync() system calls */
+int systime (int); /* use a bunch of system time */
+int tailcallopt (int); /* tail call optimization test */
+int underflow (int); /* force underflow arithmetic */
+int unwindcases (int); /* test various unwind corner cases */
+
+int itimer_realprof (int); /* mess with itimer ITIMER_REALPROF */
+int sigprof (int); /* mess with SIGPROF sigaction */
+int sigprofh (int); /* mess with SIGPROF handler */
+int do_chdir (int); /* do a chdir() */
+int do_exec (int); /* do an exec() call */
+int do_popen (int); /* do a popen() call */
+int do_system (int); /* do a system() call */
+int do_forkexec (int); /* do a fork()+exec() call combo */
+int
+do_vforkexec (int); /* do a vfork()+exec() call combo */
+
+/* lookup table for behavior scripts */
+struct scripttab
+{
+ char *name;
+ int (*function)(int);
+ char *acctname;
+ int param;
+ int noverify;
+};
+
+static int CLONE_FLAGS[] = {
+ SIGCHLD,
+ CLONE_FILES | CLONE_FS | CLONE_SYSVSEM | CLONE_IO | SIGCHLD
+};
+
+/* the default script */
+static char DEFAULT_COMMAND[] =
+ "icpu.md.cpu.rec.recd.dousl.gpf.fitos.ec.tco.b.nap.uf."
+ "sys.sig.so.sx.so.sched.uwdc";
+
+struct scripttab scripttab[] = {
+ {"abt", doabort, "doabort", 0, 0},
+ {"b", bounce, "bounce", 0, 0},
+ {"c", correlate, "correlate", 0, 0},
+ {"chdir", do_chdir, "chdir", 0, 0},
+ {"chdirX", do_chdir, "chdir", -1, 0},
+ {"cpu", cputime, "cputime", 0, 0},
+ {"dousl", dousleep, "dousleep", 0, 1},
+ {"ec", endcases, "endcases", 0, 0},
+ {"exec", do_exec, "exec", 0, 0},
+ {"execX", do_exec, "do_exec", -1, 0},
+ {"fitos", fitos, "fitos", 0, 1},
+ {"gpf", gpf, "gpf", 0, 0},
+ {"hrv", hrv, "hrv", 0, 0},
+ {"icpu", icputime, "icputime", 0, 0},
+ {"iofile", iofile, "iofile", 0, 0},
+ {"iotest", iotest, "iotest", 0, 0},
+ {"ioerror", ioerror, "ioerror", 0, 0},
+ {"itimer", itimer_realprof, "itimer", 1, 0},
+ {"itimer0", itimer_realprof, "itimer", 0, 0},
+ {"ldso", ldso, "ldso", 0, 0},
+ {"masksig", masksignals, "masksig", 0, 0},
+ {"md", muldiv, "muldiv", 0, 0},
+ {"memorymap", memorymap, "memorymap", 100, 0},
+ {"nap", naptime, "naptime", 0, 0},
+ {"pg", pagethrash, "pagethrash", 32, 0},
+ {"popen", do_popen, "popen", 0, 0},
+ {"popenX", do_popen, "popen", -1, 0},
+ {"rec", recurse, "recurse", 50, 0},
+ {"recd", recursedeep, "<Truncated-stack>", 500, 0},
+ {"sched", sched, "sched", 0, 1},
+ {"so", callso, "callso", 0, 0},
+ {"sx", callsx, "callsx", 0, 0},
+ {"sig", sigtime, "sigtime", 0, 1},
+ {"sigprof", sigprof, "sigprof", 1, 0},
+ {"sigprof0", sigprof, "sigprof", 0, 0},
+ {"sigprofh", sigprofh, "sigprofh", 1, 0},
+ {"sigprofh0", sigprofh, "sigprofh", 0, 0},
+ {"sync", synccall, "synccall", 0, 1},
+ {"sys", systime, "systime", 0, 1},
+ {"system", do_system, "system", 0, 0},
+ {"systemX", do_system, "do_system", -1, 0},
+ {"tco", tailcallopt, "tailcallopt", 0, 0},
+ {"uf", underflow, "underflow", 0, 1},
+ {"forkexec", do_forkexec, "forkexec", 0, 0},
+ {"vforkexec", do_vforkexec, "vforkexec", 0, 0},
+ {"uwdc", unwindcases, "unwindcases", 0, 0},
+ {NULL, NULL, NULL, 0, 0}
+};
+
+int
+main (int argc, char **argv)
+{
+ int i;
+ hrtime_t start;
+ hrtime_t vstart;
+ char *name;
+ char buf[1024];
+ char arglist[4096];
+
+ // need a more robust test of whether system HWC events are being counted
+ if (getenv ("TILDECLAUSE"))
+ include_system_time = 1;
+ progstart = gethrtime ();
+ progvstart = getmyvtime ();
+ name = getenv ("SP_COLLECTOR_TEST_TIMER");
+ if (name)
+ {
+ testtime = atof (name);
+ if (testtime <= 0)
+ testtime = 1.0;
+ }
+ name = getenv ("_SP_NAME");
+ if (name == NULL || strlen (name) == 0)
+ strcpy (acct_file, "synprog.acct");
+ else
+ strcpy (acct_file, name);
+
+ strcpy (arglist, argv[0]);
+ for (i = 1; i < argc; i++)
+ {
+ strcat (arglist, " ");
+ strcat (arglist, argv[i]);
+ }
+
+ sprintf (buf, "%s run", argv[0]);
+ wlog (buf, NULL);
+
+ int ncpus = get_ncpus ();
+ acct_init (acct_file);
+ iotrace_init ("synprog.acct2");
+
+ /* Start a timer */
+ start = gethrtime ();
+ vstart = getmyvtime ();
+
+#ifndef NO_MS_ACCT
+ stpwtch_calibrate ();
+#endif
+
+ if (argc == 1)
+ commandline (DEFAULT_COMMAND);
+ else
+ {
+ i = 2;
+ while (i < argc)
+ {
+ forkcopy (argv[i], i - 1);
+ i++;
+ }
+
+ /* do the last one ourself */
+ commandline (argv[1]);
+ }
+ reapchildren ();
+ whrvlog (gethrtime () - start, getmyvtime () - vstart, buf, NULL);
+ fflush (fid);
+ fflush (fid2);
+ fclose (fid);
+ fclose (fid2);
+ return 0;
+}
+
+/* acct_init: initialize accounting */
+void
+acct_init (char *acct_file)
+{
+ fid = fopen (acct_file, "w");
+ if (fid == NULL)
+ {
+ fprintf (stderr, "Open of %s for output failed: %s\n",
+ acct_file, strerror (errno));
+ exit (1);
+ }
+ fprintf (fid, "MHz: %d\n", get_clock_rate ());
+ fprintf (fid, "X Incl. Total Incl. CPU Name\n");
+ fflush (fid);
+
+ /* write a record for <Unknown>, which should have zero times */
+ fprintf (fid, "X %6.3f %6.3f %s\n", 0.0, 0.0, "<Unknown>");
+
+ /* set up to reap any children */
+ (void) sigset (SIGCHLD, reapchild);
+ /* verify the signal mask */
+}
+
+/* iotrace_init: initialize IO trace accounting */
+void
+iotrace_init (char *acct_file)
+{
+ fid2 = fopen (acct_file, "w");
+ if (fid2 == NULL)
+ {
+ fprintf (stderr, "Open of %s for output failed: %s\n",
+ acct_file, strerror (errno));
+ exit (1);
+ }
+ fprintf (fid2, "X Incl.BytesRead Incl.ReadCount ");
+ fprintf (fid2, "Incl.BytesWritten Incl.WriteCount ");
+ fprintf (fid2, "Incl.OtherIOCount Name\n");
+ fflush (fid2);
+}
+
+/* commandline -- process a command line string:
+ * verbs are separated by a . character; each verb is looked-up
+ * in a table, and the routine to process it, and argument fetched.
+ * the routine is called.
+ */
+void
+commandline (char *cmdline)
+{
+ char *p;
+ char *j;
+ char prevj;
+ struct scripttab *k;
+ char buf[1024];
+ hrtime_t pstart;
+ hrtime_t pvstart;
+ hrtime_t pend;
+ hrtime_t pvend;
+ hrtime_t start = gethrtime ();
+ hrtime_t vstart = getmyvtime ();
+
+ /* Log the event */
+ wlog (" Begin commandline", cmdline);
+
+ p = cmdline;
+ while (*p != 0)
+ {
+ /* find the terminator for this verb (a . or NULL) */
+ j = p;
+ while (*j != 0 && *j != '.')
+ j++;
+ prevj = *j;
+ *j = 0;
+
+ /* now look up the phase in the table */
+ for (k = &scripttab[0];; k++)
+ {
+ if (k->name == NULL)
+ break;
+ if (strcmp (p, k->name) == 0)
+ {
+ /* found a match */
+ pstart = gethrtime ();
+ pvstart = getmyvtime ();
+ (k->function)(k->param);
+ pend = gethrtime ();
+ pvend = getmyvtime ();
+ fprintf (fid, "%c %6.3f %6.3f %s\n",
+ k->noverify == 0 ? 'X' : 'Y',
+ (double) (pend - pstart) / (double) 1000000000.,
+ (double) (pvend - pvstart) / (double) 1000000000.,
+ k->acctname);
+ fflush (fid);
+ break;
+ }
+ }
+ if (k->name == NULL)
+ {
+ sprintf (buf, "++ ignoring `%s'\n", p);
+ fprintf (stderr, buf);
+ }
+
+ /* continue processing */
+ *j = prevj;
+ p = j;
+ if (prevj != 0)
+ p++;
+ }
+ whrvlog (gethrtime () - start, getmyvtime () - vstart, "commandline", cmdline);
+}
+
+int
+clonecopy (void * script)
+{
+ syn_fork = syn_exec = syn_combo = 0; /* reset for new child line */
+
+ strcpy (acct_file, child_name);
+ /*printf("_SP_NAME=\"%s\" (for clone-child)\n", acct_file);*/
+ acct_init (acct_file);
+
+ /* execute the script */
+ commandline ((char *) script);
+
+ /* reap the child's descendants */
+ reapchild (0);
+ exit (0);
+}
+
+/* forkcopy -- fork a copy to run a script */
+void
+forkcopy (char *script, int child)
+{
+ int child_pid;
+ if (strncmp ("clone", script, 5) == 0)
+ {
+ //clone instead of fork
+ /* Log the event */
+ wlog ("cloning copy ... ", script);
+
+ sprintf (child_name, "%s_C%d", acct_file, ++syn_fork);
+ /* clone a new process */
+ void * stack;
+ void * stack_space;
+ int stack_size = CLONE_STACK_SIZE;
+
+ stack_space = mmap (NULL, stack_size, PROT_WRITE | PROT_READ, MAP_PRIVATE | MAP_GROWSDOWN | MAP_ANONYMOUS, -1, 0);
+ if ((void*) - 1 == stack_space)
+ {
+ fprintf (stderr, "Error: mmap returned -1\n");
+ exit (1);
+ }
+ mprotect (stack_space, CLONE_RED_SIZE, PROT_NONE);
+ stack = (char *) stack_space + stack_size - CLONE_TLS_SIZE; // stack grows back
+ child_pid = clone (clonecopy, stack, CLONE_FLAGS[(child + 1) % 2],
+ (void *) (script + sizeof ("clone") - 1));
+ if (child_pid < 0)
+ {
+ /* error, could not fork */
+ fprintf (stderr, "forkcopy: clone failed--error %d\n", errno);
+ exit (1);
+ }
+
+ fprintf (stderr, "child process %d cloned by %d.\n",
+ child_pid, (int) getpid ());
+ return;
+ }
+
+ /* Log the event */
+ wlog ("forking copy ... ", script);
+ sprintf (child_name, "%s_f%d", acct_file, ++syn_fork);
+
+ /* fork a new process */
+ child_pid = fork ();
+ if (child_pid < 0)
+ {
+ /* error, could not fork */
+ fprintf (stderr, "forkcopy: fork failed--error %d\n", errno);
+ exit (1);
+
+ }
+ else if (child_pid == 0)
+ {
+ syn_fork = syn_exec = syn_combo = 0; /* reset for new child line */
+ strcpy (acct_file, child_name);
+ acct_init (acct_file);
+
+ /* execute the script */
+ commandline (script);
+
+ /* reap the child's descendants */
+ reapchild (0);
+ exit (0);
+ }
+ fprintf (stderr, "child process %d forked by %d.\n",
+ child_pid, (int) getpid ());
+}
+
+void
+forkchild (char * cmdline)
+{
+ stopwatch_t *prog;
+ char mbuf[1024];
+
+ /* Start a stopwatch */
+ sprintf (mbuf, "%s pid[%d]", "Synprog child", (int) getpid ());
+ prog = stpwtch_alloc (mbuf, 0);
+
+ /* process this child's command-line */
+ commandline (cmdline);
+
+ /* reap the child's descendants */
+ reapchild (0);
+
+ /* Stop print, and free the stopwatch */
+ stpwtch_stop (prog);
+ stpwtch_print (prog);
+ free (prog);
+
+ exit (0);
+}
+
+/* reap a child process, called in response to SIGCLD */
+void
+reapchild (int sig)
+{
+ int status;
+ int ret = wait (&status);
+ sigset (SIGCLD, reapchild);
+}
+
+/* reap all child processes prior to exit */
+void
+reapchildren ()
+{
+ int status;
+ int ret;
+
+ /* wait for all children to exit */
+ for (;;)
+ {
+ while ((ret = wait (&status)) != (pid_t) - 1)
+ fprintf (stderr, "synprog: reap child %x\n", ret);
+ if (errno == EINTR)
+ continue;
+ if (errno == ECHILD)
+ return;
+ fprintf (stderr, "synprog: unexpected errno from wait() syscall -- %s\n",
+ strerror (errno));
+ }
+}
+
+/* doabort -- force a SEGV */
+int
+doabort (int k)
+{
+ char *nullptr = NULL;
+ char c;
+
+ /* Log the event */
+ wlog ("start of doabort", NULL);
+
+ /* and dereference a NULL */
+ c = *nullptr;
+
+ /* this should never be reached */
+ return (int) c;
+}
+
+/* =============================================================== */
+
+/* dousleep -- loop with a usleep */
+int
+dousleep (int k)
+{
+ volatile double x;
+ long long count = 0;
+ hrtime_t start = gethrtime ();
+ hrtime_t vstart = getmyvtime ();
+
+ /* Log the event */
+ wlog ("start of dousleep", NULL);
+ do
+ {
+ x = 0.0;
+ for (int j = 0; j < 1000000; j++)
+ x = x + 1.0;
+ count++;
+ }
+ while (start + testtime * 1e9 > gethrtime ());
+
+ fprintf (stderr, " Performed %lld while-loop iterations\n", count);
+ whrvlog (gethrtime () - start, getmyvtime () - vstart, "dousleep", NULL);
+ /* this should never be reached */
+ return (int) 0;
+}
+
+/* =============================================================== */
+/* correlate -- generate CPU use, correlated with profiling clock */
+
+static void csig_handler (int);
+
+int
+correlate (int k)
+{
+ volatile float x; /* temp variable for f.p. calculation */
+ struct itimerval tval;
+ int retval;
+ long long count = 0;
+ hrtime_t start = gethrtime ();
+ hrtime_t vstart = getmyvtime ();
+
+ /* Log the event */
+ wlog ("start of correlate", NULL);
+
+ /* set up the signal handler */
+ sigset (SIGALRM, csig_handler);
+
+ /* set an itimer, to break out of the sleep loop */
+ tval.it_value.tv_sec = 0;
+ tval.it_value.tv_usec = 10000;
+ tval.it_interval.tv_sec = 0;
+ tval.it_interval.tv_usec = 10000;
+
+ retval = setitimer (ITIMER_REAL, &tval, 0);
+ if (retval != 0)
+ fprintf (stderr, "setitimer(ITIMER_REAL) got %d returned: %s\n",
+ retval, strerror (errno));
+ do
+ {
+ x = 0.0;
+ for (int j = 0; j < 1000000; j++)
+ x = x + 1.0;
+ sleep (1); /* relying on the timer to break out */
+ count++;
+ }
+ while (start + testtime * 1e9 > gethrtime ());
+
+ /* now disable the itimer */
+ tval.it_value.tv_sec = 0;
+ tval.it_value.tv_usec = 0;
+ tval.it_interval.tv_sec = 0;
+ tval.it_interval.tv_usec = 0;
+
+ retval = setitimer (ITIMER_REAL, &tval, 0);
+ if (retval != 0)
+ fprintf (stderr, "setitimer(ITIMER_REAL) got %d returned: %s\n",
+ retval, strerror (errno));
+ fprintf (stderr, " Performed %lld while-loop iterations\n", count);
+ whrvlog (gethrtime () - start, getmyvtime () - vstart, "correlate", NULL);
+ return 0;
+}
+
+static void
+csig_handler (int sig)
+{
+ return;
+}
+
+/* cputime -- loop to use a bunch of user time (f.p.) */
+int
+cputime (int k)
+{
+ volatile float x; /* temp variable for f.p. calculation */
+ long long count = 0;
+ hrtime_t start = gethrtime ();
+ hrtime_t vstart = getmyvtime ();
+
+ /* Log the event */
+ wlog ("start of cputime", NULL);
+ do
+ {
+ x = 0.0;
+ for (int j = 0; j < 1000000; j++)
+ x = x + 1.0;
+ count++;
+ }
+ while (start + testtime * 1e9 > gethrtime ());
+
+ fprintf (stderr, " Performed %lld while-loop iterations\n", count);
+ whrvlog (gethrtime () - start, getmyvtime () - vstart, "cputime", NULL);
+ return 0;
+}
+
+/* icputime -- loop to use a bunch of user time (long) */
+int
+icputime (int k)
+{
+ volatile long x; /* temp variable for long calculation */
+ long long count = 0;
+ hrtime_t start = gethrtime ();
+ hrtime_t vstart = getmyvtime ();
+
+ /* Log the event */
+ wlog ("start of icputime", NULL);
+ do
+ {
+ x = 0;
+ for (int j = 0; j < 1000000; j++)
+ x = x + 1;
+ count++;
+ }
+ while (start + testtime * 1e9 > gethrtime ());
+
+ fprintf (stderr, " Performed %lld while-loop iterations\n", count);
+ whrvlog (gethrtime () - start, getmyvtime () - vstart, "icputime", NULL);
+ return 0;
+}
+
+/* hrv -- loop to do lots of gethrvtime calls */
+int
+hrv (int k)
+{
+ long long count = 0;
+ hrtime_t start = gethrtime ();
+ hrtime_t vstart = getmyvtime ();
+
+ /* Log the event */
+ wlog ("start of hrv", NULL);
+ do
+ {
+ for (int j = 0; j < 10000; j++)
+ (void) gethrvtime ();
+ count++;
+ }
+ while (start + testtime * 1e9 > gethrtime ());
+
+ fprintf (stderr, " Performed %lld while-loop iterations\n", count);
+ whrvlog (gethrtime () - start, getmyvtime () - vstart, "hrv", NULL);
+ return 0;
+}
+
+/* =============================================================== */
+
+/* ldso -- use up time in ld.so */
+
+int
+ldso (int k)
+{
+ long long count = 0;
+ hrtime_t start = gethrtime ();
+ hrtime_t vstart = getmyvtime ();
+
+ /* Log the event */
+ wlog ("start of ldso", NULL);
+ do
+ {
+ for (int j = 0; j < 10000; j++)
+ (void) dlsym (RTLD_DEFAULT, "nosuchfoo");
+ count++;
+ }
+ while (start + testtime * 1e9 > gethrtime ());
+ fprintf (stderr, " Performed %lld while-loop iterations\n", count);
+ whrvlog (gethrtime () - start, getmyvtime () - vstart, "ldso", NULL);
+ return 0;
+}
+
+/* masksignals -- debug aid -- call routine to mask SIGPROF and SIGEMT */
+int
+masksignals (int n)
+{
+ hrtime_t start = gethrtime ();
+ hrtime_t vstart = getmyvtime ();
+
+ /* Log the event */
+ whrvlog (gethrtime () - start, getmyvtime () - vstart, "masksignals", NULL);
+ return 0;
+}
+
+/* =============================================================== */
+/* muldiv -- loop to do a bunch of integer multiply and divide */
+
+volatile int tmp_ival = 0;
+
+int
+muldiv (int n)
+{
+ long long count = 0;
+ hrtime_t start = gethrtime ();
+ hrtime_t vstart = getmyvtime ();
+
+ /* Log the event */
+ wlog ("start of muldiv", NULL);
+ do
+ {
+ for (int i = 0; i < 1000; i++)
+ {
+ for (int j = 0; j < 1000; j++)
+ tmp_ival = j * i / (i + 1.0);
+ }
+ count++;
+ }
+ while (start + testtime * 1e9 > gethrtime ());
+ fprintf (stderr, " Performed %lld while-loop iterations\n", count);
+ whrvlog (gethrtime () - start, getmyvtime () - vstart, "muldiv", NULL);
+ return 0;
+}
+
+
+/* =============================================================== */
+/* underflow -- loop triggering arithmetic underflow */
+volatile float tmp_fval;
+
+int
+underflow (int k)
+{
+ float x, y;
+ long long count = 0;
+
+ hrtime_t start = gethrtime ();
+ hrtime_t vstart = getmyvtime ();
+
+ /* Log the event */
+ wlog ("start of underflow", NULL);
+ do
+ {
+ x = 1.e-20;
+ y = 1.e-20;
+ for (int j = 0; j < 50000; j++)
+ tmp_fval = x * y;
+ count++;
+ }
+ while (start + testtime * 1e9 > gethrtime ());
+ fprintf (stderr, " Performed %lld while-loop iterations\n", count);
+ whrvlog (gethrtime () - start, getmyvtime () - vstart, "underflow", NULL);
+ return 0;
+}
+
+/* naptime -- spend time in the system sleeping */
+int
+naptime (int k)
+{
+ hrtime_t start = gethrtime ();
+ hrtime_t vstart = getmyvtime ();
+
+ /* Log the event */
+ wlog ("start of naptime", NULL);
+ if (k == 0)
+ {
+ k = testtime;
+ if (k < 1)
+ k = 1;
+ }
+ for (int i = 0; i < k; i++)
+ sleep (1);
+ whrvlog (gethrtime () - start, getmyvtime () - vstart, "naptime", NULL);
+ return 0;
+}
+
+/* recurse -- loop to show recursion */
+int real_recurse (int, int); /* real routine to do recursion */
+
+int
+recurse (int k)
+{
+ hrtime_t start = gethrtime ();
+ hrtime_t vstart = getmyvtime ();
+
+ /* Log the event */
+ wlog ("start of recurse", NULL);
+ if (k == 0)
+ k = 80;
+ (void) real_recurse (0, k);
+ whrvlog (gethrtime () - start, getmyvtime () - vstart, "recurse", NULL);
+ return 0;
+}
+
+int
+recursedeep (int k)
+{
+ hrtime_t start = gethrtime ();
+ hrtime_t vstart = getmyvtime ();
+
+ /* Log the event */
+ wlog ("start of recursedeep", NULL);
+ if (k == 0)
+ k = 500;
+ (void) real_recurse (0, k);
+ whrvlog (gethrtime () - start, getmyvtime () - vstart, "recursedeep", NULL);
+ return 0;
+}
+
+static int rec_count = 0;
+
+int
+real_recurse (int i, int imax)
+{
+ if (i == imax)
+ {
+ volatile float x;
+ long long count = 0;
+ hrtime_t start = gethrtime ();
+ do
+ {
+ x = 0.0;
+ for (int j = 0; j < 10000000; j++)
+ x = x + 1.0;
+ count++;
+ }
+ while (start + testtime * 1e9 > gethrtime ());
+ fprintf (stderr, " Performed %lld while-loop iterations\n", count);
+ return rec_count;
+ }
+ else
+ {
+ real_recurse (i + 1, imax);
+ rec_count++;
+ return rec_count;
+ }
+}
+
+/* gpf -- simple example showing the gprof fallacy */
+float gpf_a (void);
+float gpf_b (void);
+float gpf_work (int);
+
+#define MAX_GPF_WORK_COUNT 1000
+
+int
+gpf (int k)
+{
+ long long count = 0;
+ float x = -1.0;
+ hrtime_t start = gethrtime ();
+ hrtime_t vstart = getmyvtime ();
+
+ /* Log the event */
+ wlog ("start of gpf", NULL);
+
+ do
+ {
+ x = gpf_a ();
+ x += gpf_b ();
+ count++;
+ if (count == MAX_GPF_WORK_COUNT)
+ fprintf (stderr, "Execution error -- %lld iterations of gpf_[ab]; possible compiler bug\n",
+ count);
+ }
+ while (start + testtime * 1e9 > gethrtime ());
+
+ fprintf (stderr, " Performed %lld while-loop iterations\n", count);
+ if (x < 0.0)
+ fprintf (stderr, "Execution error -- x < 0.0; possible compiler bug (x = %f)\n", x);
+ whrvlog (gethrtime () - start, getmyvtime () - vstart, "gpf - total", NULL);
+ return 0;
+}
+
+float
+gpf_a ()
+{
+ float x = -1.0;
+ for (int i = 0; i < 9; i++)
+ x += gpf_work (1);
+ return x;
+}
+
+float
+gpf_b ()
+{
+ float x = -1.0;
+ x = gpf_work (10);
+ return x;
+}
+
+float
+gpf_work (int amt)
+{
+ volatile float x = 0.0;
+ int imax = 4 * amt * amt;
+ for (int i = 0; i < imax; i++)
+ {
+ x = 0.0;
+ for (int j = 0; j < 200000; j++)
+ x = x + 1.0;
+ }
+ return x;
+}
+
+/* bounce -- example of indirect recursion */
+void bounce_a (int, int);
+void bounce_b (int, int);
+
+int
+bounce (int k)
+{
+ long long count = 0;
+ hrtime_t start = gethrtime ();
+ hrtime_t vstart = getmyvtime ();
+
+ /* Log the event */
+ wlog ("start of bounce", NULL);
+ if (k == 0)
+ k = 20;
+ do
+ {
+ bounce_a (0, k);
+ count++;
+ }
+ while (start + testtime * 1e9 > gethrtime ());
+ fprintf (stderr, " Performed %lld while-loop iterations\n", count);
+ whrvlog (gethrtime () - start, getmyvtime () - vstart, "bounce", NULL);
+ return 0;
+}
+
+void
+bounce_a (int i, int imax)
+{
+ if (i == imax)
+ {
+ volatile float x = 0.0;
+ for (int k = 0; k < 8; k++)
+ {
+ for (int j = 0; j < 2000000; j++)
+ x = x + 1.0;
+ }
+ return;
+ }
+ else
+ bounce_b (i, imax);
+}
+
+void
+bounce_b (int i, int imax)
+{
+ bounce_a (i + 1, imax);
+ return;
+}
+
+/* =============================================================== */
+
+/* sched -- spend time calling sched_yield() */
+
+int
+sched (int k)
+{
+ long long count = 0;
+ hrtime_t start = gethrtime ();
+ hrtime_t vstart = getmyvtime ();
+
+ /* Log the event */
+ wlog ("start of sched", NULL);
+ if (k == 0)
+ {
+ k = testtime;
+ if (k < 1)
+ k = 1;
+ }
+ do
+ {
+ for (int i = 0; i < 1000000; i++)
+ sched_yield ();
+ count++;
+ }
+ while (start + testtime * 1e9 > gethrtime ());
+
+ fprintf (stderr, " Performed %lld while-loop iterations\n", count);
+ whrvlog (gethrtime () - start, getmyvtime () - vstart, "sched", NULL);
+ return 0;
+}
+
+/* synccall -- spend time calling sync() */
+int
+synccall (int k)
+{
+ long long count = 0;
+ hrtime_t start = gethrtime ();
+ hrtime_t vstart = getmyvtime ();
+
+ /* Log the event */
+ wlog ("start of synccall", NULL);
+ if (k == 0)
+ {
+ k = testtime;
+ if (k < 1)
+ k = 1;
+ }
+ do
+ {
+ sync ();
+ count++;
+ }
+ while (start + testtime * 1e9 > gethrtime ());
+
+ fprintf (stderr, " Performed %lld sync() calls\n", count);
+ fprintf (stderr, " Performed %lld while-loop iterations\n", count);
+ whrvlog (gethrtime () - start, getmyvtime () - vstart, "synccall", NULL);
+ return 0;
+}
+
+/* sigtime -- spend time in a signal handler */
+static void sigtime_handler (int);
+
+int
+sigtime (int k)
+{
+ long long count = 0;
+ hrtime_t start = gethrtime ();
+ hrtime_t vstart = getmyvtime ();
+
+ /* Log the event */
+ wlog ("start of sigtime", NULL);
+
+ /* set up the signal handler */
+ sigset (SIGHUP, sigtime_handler);
+ do
+ {
+ kill (getpid (), SIGHUP);
+ count++;
+ }
+ while (start + testtime * 1e9 > gethrtime ());
+
+ sigset (SIGHUP, SIG_DFL);
+ fprintf (stderr, " Sent %lld SIGHUP signals\n", count);
+ whrvlog (gethrtime () - start, getmyvtime () - vstart, "sigtime", NULL);
+ return 0;
+}
+
+static void
+sigtime_handler (int sig)
+{
+ volatile int x;
+ for (int i = 0; i < 50; i++)
+ {
+ x = 0;
+ for (int j = 0; j < 1000000; j++)
+ x = x + 1;
+ }
+ return;
+}
+
+/* systime -- spend time in a few system calls */
+int
+systime (int k)
+{
+ struct timeval ttime;
+ int j;
+ long long count = 0;
+ double t = testtime / 5;
+ if (t < 1.0)
+ t = 1.0;
+ hrtime_t start = gethrtime ();
+ hrtime_t rstart = start;
+ hrtime_t vstart = getmyvtime ();
+ hrtime_t rvstart = vstart;
+
+ /* Log the event */
+ wlog ("start of systime", NULL);
+
+ /* do gettimeofday calls */
+ do
+ {
+ for (j = 0; j < 30000; j++)
+ {
+ (void) gettimeofday (&ttime, NULL);
+ }
+ count++;
+ }
+ while (start + t * 1e9 > gethrtime ());
+
+ hrtime_t end = gethrtime ();
+ hrtime_t vend = getmyvtime ();
+ fprintf (stderr, " Performed %lld while-loop iterations gettimeofday\n", count);
+ whrvlog (end - start, vend - vstart, "systime -- 10**6 gettimeofday", NULL);
+
+ /* do gethrtime calls */
+ start = gethrtime ();
+ vstart = getmyvtime ();
+ count = 0;
+ do
+ {
+ (void) gethrtime ();
+ count++;
+ }
+ while (start + t * 1e9 > gethrtime ());
+
+ end = gethrtime ();
+ vend = getmyvtime ();
+ fprintf (stderr, " Performed %lld while-loop iterations gethrtime\n", count);
+ whrvlog ((end - start), (vend - vstart), "systime -- 10**6 gethrtime", NULL);
+
+ /* do pairs of gethrtime calls */
+ start = gethrtime ();
+ vstart = getmyvtime ();
+
+ count = 0;
+ do
+ {
+ for (j = 0; j < 30000; j++)
+ {
+ (void) gethrtime ();
+ (void) gethrtime ();
+ }
+ count++;
+ }
+ while (start + t * 1e9 > gethrtime ());
+
+ end = gethrtime ();
+ vend = getmyvtime ();
+ fprintf (stderr, " Performed %lld while-loop iterations pairs of gethrtime\n",
+ count);
+ whrvlog (end - start, vend - vstart, "systime -- 10**6 pairs of gethrtime",
+ NULL);
+
+ /* do gethrvtime calls */
+ start = gethrtime ();
+ vstart = getmyvtime ();
+
+ count = 0;
+ do
+ {
+ for (j = 0; j < 30000; j++)
+ {
+ (void) gethrvtime ();
+ }
+ count++;
+ }
+ while (start + t * 1e9 > gethrtime ());
+
+ end = gethrtime ();
+ vend = getmyvtime ();
+ fprintf (stderr, " Performed %lld while-loop iterations gethrvtime\n", count);
+ whrvlog (end - start, vend - vstart, "systime -- 10**6 gethrvtime", NULL);
+
+ /* do getrusage calls */
+ start = gethrtime ();
+ vstart = getmyvtime ();
+
+ count = 0;
+ do
+ {
+ for (j = 0; j < 30000; j++)
+ {
+ struct rusage rusage;
+ (void) getrusage (RUSAGE_SELF, &rusage);
+ }
+ count++;
+ }
+ while (start + t * 1e9 > gethrtime ());
+
+ end = gethrtime ();
+ vend = getmyvtime ();
+ fprintf (stderr, " Performed %lld while-loop iterations getrusage\n", count);
+ whrvlog ((end - start), (vend - vstart), "systime -- 10**6 getrusage", NULL);
+ whrvlog ((gethrtime () - rstart), (getmyvtime () - rvstart), "systime", NULL);
+ return 0;
+}
+
+/* unwindcases -- test various unwind corner cases */
+static void unwindcases_handler (int);
+
+int
+unwindcases (int k)
+{
+ long long count = 0;
+ hrtime_t start = gethrtime ();
+ hrtime_t vstart = getmyvtime ();
+
+ /* Log the event */
+ wlog ("start of unwindcases", NULL);
+
+ /* set up the signal handler */
+ sigset (SIGHUP, unwindcases_handler);
+
+ /* initialize the new signal mask */
+ sigset_t new_mask;
+ sigset_t old_mask;
+ sigfillset (&new_mask);
+ sigdelset (&new_mask, SIGHUP);
+
+ /* block all signals except SIGHUP*/
+ sigprocmask (SIG_SETMASK, &new_mask, &old_mask);
+ do
+ {
+ kill (getpid (), SIGHUP);
+ count++;
+ }
+ while (start + testtime * 1e9 > gethrtime ());
+
+ sigprocmask (SIG_SETMASK, &old_mask, NULL);
+ sigset (SIGHUP, SIG_DFL);
+ fprintf (stderr, " Sent %lld SIGHUP signals\n", count);
+ whrvlog (gethrtime () - start, getmyvtime () - vstart, "unwindcases", NULL);
+ return 0;
+}
+
+#define unwindcases_memcpy memcpy
+#define unwindcases_memset memset
+#define unwindcases_memnum (4096)
+
+static char unwindcases_array[4097];
+static volatile int srcind = 1024;
+
+static void
+unwindcases_handler (int sig)
+{
+ for (int i = 0; i < 1000; i++)
+ {
+ for (int j = 0; j < 1000; j++)
+ {
+ unwindcases_memset ((void*) unwindcases_array, 0, unwindcases_memnum);
+ for (int k = 0; k < 10; k++)
+ {
+ unwindcases_array[k] = unwindcases_array[srcind];
+ unwindcases_array[k + srcind / 4] = 0;
+ unwindcases_array[k] = unwindcases_array[strlen (unwindcases_array + k) + 1];
+ }
+ unwindcases_memcpy ((void*) unwindcases_array,
+ (void*) (unwindcases_array + 4096 / 2),
+ unwindcases_memnum / 2);
+ }
+ }
+ return;
+}
+
+/* tailcallopt -- call routines that would be tail-call optimized when
+ * compiled with optimization
+ */
+void tailcall_a (void);
+void tailcall_b (void);
+void tailcall_c (void);
+
+int
+tailcallopt (int n)
+{
+ long long count = 0;
+ hrtime_t start = gethrtime ();
+ hrtime_t vstart = getmyvtime ();
+
+ /* Log the event */
+ wlog ("start of tailcallopt", NULL);
+ do
+ {
+ tailcall_a ();
+ count++;
+ }
+ while (start + testtime * 1e9 > gethrtime ());
+
+ fprintf (stderr, " Performed %lld while-loop iterations\n", count);
+ whrvlog (gethrtime () - start, getmyvtime () - vstart, "tailcallopt", NULL);
+ return 0;
+}
+
+void
+tailcall_a ()
+{
+ volatile float x = 0.0;
+ for (int j = 0; j < 4000000; j++)
+ x = x + 1.0;
+ tailcall_b ();
+}
+
+void
+tailcall_b ()
+{
+ volatile float x = 0.0;
+ for (int j = 0; j < 4000000; j++)
+ x = x + 1.0;
+ tailcall_c ();
+}
+
+void
+tailcall_c ()
+{
+ volatile float x = 0.0;
+ for (int j = 0; j < 4000000; j++)
+ x = x + 1.0;
+}
+
+int
+itimer_realprof (int k) /* mess with itimer ITIMER_REALPROF */
+{
+ struct itimerval tval;
+ int retval;
+ hrtime_t start = gethrtime ();
+ hrtime_t vstart = getmyvtime ();
+
+ /* set an itimer */
+ if (k != 0)
+ {
+ wlog ("start of itimer_realprof", NULL);
+ tval.it_interval.tv_sec = 1;
+ tval.it_interval.tv_usec = 300000;
+ tval.it_value = tval.it_interval;
+ }
+ else
+ {
+ wlog ("start of itimer_realprof(0)", NULL);
+ tval.it_interval.tv_sec = 0;
+ tval.it_interval.tv_usec = 0;
+ tval.it_value = tval.it_interval;
+ }
+ retval = setitimer (ITIMER_REALPROF, &tval, 0);
+ if (retval != 0)
+ fprintf (stderr, "setitimer(ITIMER_REALPROF) got %d returned: %s\n",
+ retval, strerror (errno));
+ whrvlog (gethrtime () - start, getmyvtime () - vstart, "itimer_realprof",
+ NULL);
+ return 0;
+}
+
+static struct sigaction old_sigprof_handler;
+static void sigprof_handler (int sig);
+static void sigprof_sigaction (int sig, siginfo_t *sip, ucontext_t *uap);
+
+int
+sigprof (int k)
+{
+ struct sigaction act;
+
+ hrtime_t start = gethrtime ();
+ hrtime_t vstart = getmyvtime ();
+
+ /* Log the event */
+ wlog ("start of sigprof", NULL);
+
+ /* query current handler */
+ if (sigaction (SIGPROF, NULL, &act) == -1)
+ printf ("\tFailed current sigaction query: %s\n", strerror (errno));
+ else
+ printf ("\tCurrently installed sigaction 0x%p\n", act.sa_sigaction);
+
+ sigemptyset (&act.sa_mask);
+ act.sa_flags = SA_RESTART | SA_SIGINFO;
+ act.sa_sigaction = (void(*)(int, siginfo_t*, void*))sigprof_sigaction;
+
+ if (k != 0)
+ {
+ /* install with deferral to original handler (if set) */
+ if (sigaction (SIGPROF, &act, &old_sigprof_handler) == -1)
+ printf ("\tFailed to install sigprof_sigaction: %s\n", strerror (errno));
+ if (old_sigprof_handler.sa_sigaction == (void (*)(int, siginfo_t *, void *))SIG_DFL)
+ {
+ old_sigprof_handler.sa_sigaction = (void (*)(int, siginfo_t *, void *))SIG_IGN;
+ printf ("\tReplaced default sigprof handler with 0x%p\n",
+ act.sa_sigaction);
+ }
+ else
+ printf ("\tReplaced sigprof handler 0x%p with 0x%p\n",
+ old_sigprof_handler.sa_sigaction, act.sa_sigaction);
+ }
+ else
+ {
+ /* installed without deferral to any original handler */
+ old_sigprof_handler.sa_sigaction = (void (*)(int, siginfo_t *, void *))SIG_IGN;
+ if (sigaction (SIGPROF, &act, NULL) == -1)
+ printf ("\tFailed to install sigprof_sigaction: %s\n", strerror (errno));
+ else
+ printf ("\tInstalled sigprof_sigaction 0x%p\n", act.sa_sigaction);
+ }
+
+ whrvlog (gethrtime () - start, getmyvtime () - vstart, "sigprof", NULL);
+ return 0;
+}
+
+int
+sigprofh (int k)
+{
+ struct sigaction act;
+
+ hrtime_t start = gethrtime ();
+ hrtime_t vstart = getmyvtime ();
+
+ /* Log the event */
+ wlog ("start of sigprofh", NULL);
+
+ /* query current handler */
+ if (sigaction (SIGPROF, NULL, &act) == -1)
+ printf ("\tFailed current sigaction query: %s\n", strerror (errno));
+ else
+ printf ("\tCurrently installed handler 0x%p\n", act.sa_handler);
+
+ sigemptyset (&act.sa_mask);
+ act.sa_flags = SA_RESTART;
+ act.sa_handler = sigprof_handler;
+ if (k != 0)
+ {
+ /* install with deferral to original handler (if set) */
+ if (sigaction (SIGPROF, &act, &old_sigprof_handler) == -1)
+ printf ("\tFailed to install sigprof_handler: %s\n", strerror (errno));
+ if (old_sigprof_handler.sa_handler == SIG_DFL)
+ {
+ old_sigprof_handler.sa_handler = SIG_IGN;
+ printf ("\tReplaced default sigprof handler with 0x%p\n",
+ act.sa_handler);
+ }
+ else
+ printf ("\tReplaced sigprof handler 0x%p with 0x%p\n",
+ old_sigprof_handler.sa_handler, act.sa_handler);
+ }
+ else
+ {
+ /* installed without deferral to any original handler */
+ old_sigprof_handler.sa_handler = SIG_IGN;
+ if (sigaction (SIGPROF, &act, NULL) == -1)
+ printf ("\tFailed to install sigprof_handler: %s\n", strerror (errno));
+ else
+ printf ("\tInstalled sigprof_handler 0x%p\n", act.sa_handler);
+ }
+
+ whrvlog (gethrtime () - start, getmyvtime () - vstart, "sigprofh", NULL);
+ return 0;
+}
+
+static void
+sigprof_handler (int sig)
+{
+ int j;
+ volatile int x;
+
+ hrtime_t now = gethrtime ();
+ if (old_sigprof_handler.sa_handler == SIG_IGN)
+ {
+ whrvlog (now, 0, "sigprof_handler (ign)", NULL);
+ for (j = 0, x = 0; j < 1000000; j++)
+ x = x + 1;
+ }
+ else
+ {
+ whrvlog (now, 0, "sigprof_handler (fwd)", NULL);
+ for (j = 0, x = 0; j < 1000000; j++)
+ x = x + 1;
+ /* forward signal to original handler */
+ if (old_sigprof_handler.sa_flags & SA_SIGINFO)
+ (old_sigprof_handler.sa_sigaction)(sig, NULL, NULL);
+ else
+ (old_sigprof_handler.sa_handler)(sig);
+ printf ("\tReturned from original sigprof handler!\n");
+ }
+
+ return;
+}
+
+static void
+sigprof_sigaction (int sig, siginfo_t *sip, ucontext_t *uap)
+{
+ int j;
+ volatile int x;
+
+ hrtime_t now = gethrtime ();
+ if (old_sigprof_handler.sa_sigaction == (void (*)(int, siginfo_t *, void *))SIG_IGN)
+ {
+ whrvlog (now, 0, "sigprof_sigaction (ign)", NULL);
+ for (j = 0, x = 0; j < 1000000; j++)
+ x = x + 1;
+ }
+ else
+ {
+ whrvlog (now, 0, "sigprof_sigaction (fwd)", NULL);
+ for (j = 0, x = 0; j < 1000000; j++)
+ x = x + 1;
+ /* forward signal to original handler */
+ if (old_sigprof_handler.sa_flags & SA_SIGINFO)
+ (old_sigprof_handler.sa_sigaction)(sig, sip, uap);
+ else
+ (old_sigprof_handler.sa_handler)(sig);
+ printf ("\tReturned from original sigprof sigaction!\n");
+ }
+ return;
+}
+
+#if 0
+Need to consider various signal handler / sigaction scenarios :
+
+1. A handler is already installed, and a new handler is being installed.
+(The original handler may be one of the defaults.)
+2. A handler is already installed, and a sigaction is being installed.
+3. A sigaction is already installed, and a new sigaction is being installed.
+4. A sigaction is already installed, and a handler is being installed.
+#endif
+
+int
+do_chdir (int k) /* switch to a new working directory */
+{
+ char *workdir;
+ char *workdir0 = "/tmp";
+ char *workdir1 = "/";
+ char currworkdir[MAXPATHLEN];
+
+ hrtime_t start = gethrtime ();
+ hrtime_t vstart = getmyvtime ();
+
+ if (k != 0)
+ {
+ wlog ("start of do_chdir(X)", NULL);
+ workdir = workdir1;
+ }
+ else
+ {
+ wlog ("start of do_chdir", NULL);
+ workdir = workdir0;
+ }
+
+ if (getcwd (currworkdir, sizeof (currworkdir)) == NULL)
+ fprintf (stderr, "old getcwd failed: %s\n", strerror (errno));
+ else
+ printf ("old getcwd returned \"%s\"\n", currworkdir);
+
+ if (chdir (workdir) != 0)
+ fprintf (stderr, "chdir(\"%s\") failed: %s\n", workdir, strerror (errno));
+
+ if (getcwd (currworkdir, sizeof (currworkdir)) == NULL)
+ fprintf (stderr, "new getcwd failed: %s\n", strerror (errno));
+ else
+ printf ("new getcwd returned \"%s\"\n", currworkdir);
+ whrvlog (gethrtime () - start, getmyvtime () - vstart, "do_chdir", NULL);
+ return 0;
+}
+
+int
+do_exec (int k) /* do an exec() call */
+{
+ sprintf (new_name, "_SP_NAME=%s_x%d", acct_file, ++syn_exec);
+ if (putenv (new_name))
+ fprintf (stderr, "Failed to name child! %s\n", strerror (errno));
+ if (k >= 0)
+ {
+ wlog ("about to exec", NULL);
+ execl ("./synprog", "synprog", "gpf.cpu.sx", NULL);
+ wlog ("exec failed!!!", NULL);
+ }
+ else
+ {
+ wlog ("about to execX", NULL);
+ execl ("./no-such-file", "no-such-file", "gpf.cpu.sx", NULL);
+ wlog ("execX failed (as expected)", NULL);
+ }
+ return 0;
+}
+
+/* preloading libcollector to a setuid executable will fail! */
+const char *cmdX = "/random/crash_n_burn";
+const char *cmd0 = "/bin/uptime";
+const char *cmd1 = "/bin/echo hello world!";
+const char *cmd2 = "/usr/bin/sleep 5";
+const char *cmd3 = "/usr/bin/sleep 5; /bin/echo hello world!";
+const char *cmd4 = "/usr/bin/sleep 2; /bin/echo hello world!; /usr/bin/sleep 2";
+const char *cmd5 = "/bin/date; /bin/sleep 2; /bin/date; /bin/sleep 2; /bin/date";
+const char *cmd6 = "w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w";
+const char *cmd7 = "synprog";
+const char *cmd8 = "synprog icpu.sx 2>&1";
+
+int
+do_popen (int k) /* do a popen() call */
+{
+ int ret;
+ FILE *fd;
+ char buf[BUFSIZ];
+ const char *mode = "r";
+
+ /* XXXX popen() will temporarily vfork+exec() a new child */
+ /* but there will be no accounting for it, unless it's synprog! */
+ sprintf (new_name, "_SP_NAME=%s_c%d", acct_file, ++syn_combo);
+ if (putenv (new_name))
+ fprintf (stderr, "Failed to name child! %s\n", strerror (errno));
+
+ /* ignore reapchild to catch child here */
+ (void) sigset (SIGCHLD, 0);
+ if (k >= 0)
+ {
+ wlog ("about to popen", NULL);
+ fd = popen (cmd8, mode);
+ }
+ else
+ {
+ wlog ("about to popenX!", NULL);
+ fd = popen (cmdX, mode);
+ }
+ if (fd == NULL)
+ printf ("do_popen failed: %s\n", strerror (errno));
+ else
+ printf ("do_popen succeeded: fileno=%d\n", fileno (fd));
+
+ /* restore pre-popen environment */
+ sprintf (new_name, "_SP_NAME=%s", acct_file);
+ if (putenv (new_name))
+ fprintf (stderr, "Failed to restore name! %s\n", strerror (errno));
+
+ if (fd != NULL)
+ {
+ while (fgets (buf, BUFSIZ, fd) != NULL)
+ printf ("& %s", buf);
+
+ if ((ret = pclose (fd)) == -1)
+ printf ("do_popen pclose error: %s\n", strerror (errno));
+ else
+ printf ("do_popen pclose returned %d\n", ret);
+ }
+
+ /* set up to reap any children */
+ (void) sigset (SIGCHLD, reapchild);
+ return 0;
+}
+
+int
+do_system (int k) /* do a system() call */
+{
+ int ret;
+
+ /* XXXX system() will temporarily vfork+exec() a new child */
+ /* but there will be no accounting for it, unless it's synprog! */
+ sprintf (new_name, "_SP_NAME=%s_c%d", acct_file, ++syn_combo);
+ if (putenv (new_name))
+ fprintf (stderr, "Failed to name child! %s\n", strerror (errno));
+
+ if (k >= 0)
+ {
+ wlog ("about to system", NULL);
+ ret = system (cmd8);
+ }
+ else
+ {
+ wlog ("about to systemX!", NULL);
+ ret = system (cmd0);
+ }
+ if (ret < 0)
+ printf ("do_system failed: %s\n", strerror (errno));
+ else
+ printf ("do_system succeeded, ret=%d\n", ret);
+
+ /* restore pre-system environment */
+ sprintf (new_name, "_SP_NAME=%s", acct_file);
+ if (putenv (new_name))
+ fprintf (stderr, "Failed to restore name! %s\n", strerror (errno));
+ return 0;
+}
+
+int
+do_forkexec (int k) /* do a fork()+exec() call combo */
+{
+ int ret, pid;
+ int status = -1;
+ char arg0[128], arg1[128];
+ arg1[0] = (char) 0;
+
+ /* ignore reapchild to catch child here */
+ (void) sigset (SIGCHLD, 0);
+
+ sprintf (child_name, "%s_f%d", acct_file, ++syn_fork);
+ if ((pid = fork ()) == 0)
+ {
+ syn_fork = syn_exec = syn_combo = 0; /* reset for new child line */
+ strcpy (acct_file, child_name);
+ acct_init (acct_file);
+ sprintf (new_name, "_SP_NAME=%s_x%d", acct_file, ++syn_exec);
+ if (putenv (new_name))
+ {
+ fprintf (stderr, "Failed to name fork child! %s\n", strerror (errno));
+ }
+ (void) execl (arg0, "fork+exec", arg1[0] ? arg1 : NULL, NULL);
+ fprintf (stderr, "fork execl failed! %s\n", strerror (errno));
+ _exit (127);
+ }
+ else if (pid == -1)
+ fprintf (stderr, "fork failed! %s\n", strerror (errno));
+ else
+ {
+ do
+ {
+ ret = waitpid (pid, &status, WNOHANG | WUNTRACED);
+ }
+ while ((ret == -1) && (errno == EINTR));
+
+ if (ret == -1)
+ fprintf (stderr, "waitpid failed: %s\n", strerror (errno));
+#if 0
+ else
+ {
+ if (WIFEXITED (status))
+ printf ("WEXITSTATUS=%d\n", WEXITSTATUS (status));
+ if (WIFSTOPPED (status))
+ printf ("WSTOPSIG=%d\n", WSTOPSIG (status));
+ if (WIFSIGNALED (status))
+ printf ("WTERMSIG=%d\n", WTERMSIG (status));
+ if (WIFCONTINUED (status))
+ printf ("WIFCONTINUED=%d\n", WIFCONTINUED (status));
+ }
+#endif
+ if (WIFEXITED (status))
+ printf ("do_forkexec succeeded: child exit status=%d\n",
+ WEXITSTATUS (status));
+ else
+ printf ("do_forkexec failed! status=%d\n", status);
+ }
+
+ /* set up to reap any children */
+ (void) sigset (SIGCHLD, reapchild);
+ return 0;
+}
+
+int
+do_vforkexec (int k) /* do a vfork()+exec() call combo */
+{
+ int ret, pid;
+ int status = 1;
+ char arg0[128], arg1[128];
+ arg1[0] = (char) 0;
+ /* ignore reapchild to catch child here */
+ (void) sigset (SIGCHLD, 0);
+
+ sprintf (child_name, "%s_f%d", acct_file, ++syn_fork);
+
+ if ((pid = vfork ()) == 0)
+ {
+ syn_fork = syn_exec = syn_combo = 0; /* reset for new child line */
+ strcpy (acct_file, child_name);
+ acct_init (acct_file);
+ sprintf (new_name, "_SP_NAME=%s_x%d", acct_file, ++syn_exec);
+ if (putenv (new_name))
+ fprintf (stderr, "Failed to name vfork child! %s\n", strerror (errno));
+ (void) execl (arg0, "vfork+exec", arg1[0] ? arg1 : NULL, NULL);
+ printf ("vfork execl failed! %s\n", strerror (errno));
+ _exit (127);
+ }
+ else if (pid == -1)
+ fprintf (stderr, "vfork failed! %s\n", strerror (errno));
+ else
+ {
+ do
+ {
+ ret = waitpid (pid, &status, WNOHANG | WUNTRACED);
+ }
+ while (ret == -1 && errno == EINTR);
+
+ if (ret == -1)
+ fprintf (stderr, "waitpid failed: %s\n", strerror (errno));
+#if 0
+ else
+ {
+ if (WIFEXITED (status))
+ printf ("WEXITSTATUS=%d\n", WEXITSTATUS (status));
+ if (WIFSTOPPED (status))
+ printf ("WSTOPSIG=%d\n", WSTOPSIG (status));
+ if (WIFSIGNALED (status))
+ printf ("WTERMSIG=%d\n", WTERMSIG (status));
+ if (WIFCONTINUED (status))
+ printf ("WIFCONTINUED=%d\n", WIFCONTINUED (status));
+ }
+#endif
+ if (WIFEXITED (status))
+ printf ("do_vforkexec succeeded: child exit status=%d\n",
+ WEXITSTATUS (status));
+ else
+ printf ("do_vforkexec failed! status=%d\n", status);
+ }
+
+ /* set up to reap any children */
+ (void) sigset (SIGCHLD, reapchild);
+ return 0;
+}
diff --git a/gprofng/testsuite/lib/Makefile.skel b/gprofng/testsuite/lib/Makefile.skel
new file mode 100644
index 00000000000..7810ba7ed7a
--- /dev/null
+++ b/gprofng/testsuite/lib/Makefile.skel
@@ -0,0 +1,61 @@
+# Skeleton makefile for display tests
+# Copyright (C) 2021 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+CC = gcc
+CFLAGS = -g -Wall
+SHAREDOPT = -fpic -shared
+
+#JAVABIN = /usr/java/latest/bin
+JAVABIN = $(shell dirname `which java`)
+JAVA = $(JAVABIN)/java
+JAVAC = $(JAVABIN)/javac
+
+COLLECT_FLAGS = -p on
+TARGET_FLAGS =
+DISPLAY_FLAGS = -func
+GPROFNG_OPT = -func
+
+GPROFNG = gprofng
+COLLECT = $(GPROFNG) collect app
+DISPLAY = $(GPROFNG) display text
+
+EXPERIMENT = test.er
+DISPLAY_LOG = display.log
+
+gprofng_dir := $(shell dirname $$(find ../root -name libgprofng.so.0 | head -1))
+export LD_LIBRARY_PATH := $(gprofng_dir):$(gprofng_dir)/..
+
+.PHONY: all collect compare clobber clean
+
+all: compare
+
+# We intentionally use incomplete dependencies here, because we don't want to
+# regenerate test.er during the later display/compare phases.
+collect: $(EXPERIMENT)
+
+$(DISPLAY_LOG): $(EXPERIMENT)
+ $(DISPLAY) $(DISPLAY_FLAGS) $(EXPERIMENT) > $@
+
+compare: $(DISPLAY_LOG)
+ perl -I $(srcdir)/../../lib $(srcdir)/check_results.pl $(ACCT_FILE) $(DISPLAY_LOG)
+
+clobber clean:
+ rm -rf *.er
+ rm -f *.acct *.acct2 *.log core* *.class *.o $(TARGETS) *.out
diff --git a/gprofng/testsuite/lib/acct.pm b/gprofng/testsuite/lib/acct.pm
new file mode 100644
index 00000000000..1b0168e1bbf
--- /dev/null
+++ b/gprofng/testsuite/lib/acct.pm
@@ -0,0 +1,774 @@
+# Copyright (C) 2021 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+use strict;
+package acct;
+use vars qw(%Acct $Erp);
+my($debug_f, $retVal, $OpenDis, $OpenFsingle, $Read_rules_txt);
+my(@Comparison, @hashSample, @acctHeader);
+my(%RANGE, %Rules);
+my($ERROR_ACCT_MISMATCH, $ERROR_NEGATIVE_TIME, $ERROR_PERL_ERROR,
+ $ERROR_DIFF_RANGE, $ERROR_ZERO_METRIC, $ERROR_HIGH_UNKNOWN,
+ $ERROR_CALLER_VERIF, $ERROR_SIGNAL_LOST);
+
+BEGIN {
+# use Exporter ();
+# @ISA = 'Exporter';
+# @EXPORT_OK = ('&readAcct', '%Acct');
+ $debug_f = $ENV{PERL_DEBUG};
+ $retVal = 0;
+ $OpenDis = 0;
+ $OpenFsingle = 0;
+ $#Comparison = -1;
+ $Read_rules_txt = 0;
+ $Erp = {};
+ @hashSample = [];
+
+ %RANGE = (
+ Count => { P_RANGE => 0, P_RATE => 0,
+ N_RANGE => 0, N_RATE => 0, FMT => "%d"
+ },
+ Total => { P_RANGE => 0.20, P_RATE => 3,
+ N_RANGE => -0.20, N_RATE => -3, FMT => "%6.3f"
+ },
+ Cpu => { P_RANGE => 0.5, P_RATE => 10,
+ N_RANGE => -0.5, N_RATE => -10, FMT => "%6.3f"
+ ,P_RANGE_2AVG => 0.5, P_RATE_2AVG => 10,
+ N_RANGE_2AVG => -0.5, N_RATE_2AVG => -10
+ },
+ Cycles => { P_RANGE => 0.5, P_RATE => 10,
+ N_RANGE => -0.5, N_RATE => -10, FMT => "%6.3f"
+ ,P_RANGE_2AVG => 0.5, P_RATE_2AVG => 10,
+ N_RANGE_2AVG => -0.5, N_RATE_2AVG => -10
+ },
+ Cycles1 => { P_RANGE => 0.5, P_RATE => 10,
+ N_RANGE => -0.5, N_RATE => -10, FMT => "%6.3f"
+ ,P_RANGE_2AVG => 0.5, P_RATE_2AVG => 10,
+ N_RANGE_2AVG => -0.5, N_RATE_2AVG => -10
+ },
+ Sync => { P_RANGE => 0.5, P_RATE => 3,
+ N_RANGE => -0.5, N_RATE => -3, FMT => "%6.3f"
+ },
+ Unkn => { P_RANGE => 0.10, P_RATE => 0.5, FMT => "%6.3f" }
+ );
+
+ $ERROR_SIGNAL_LOST = 44;
+ $ERROR_DIFF_RANGE = 84;
+ $ERROR_HIGH_UNKNOWN = 85;
+ $ERROR_PERL_ERROR = 86;
+ $ERROR_ACCT_MISMATCH = 87;
+ $ERROR_CALLER_VERIF = 88;
+ $ERROR_ZERO_METRIC = 94;
+ $ERROR_NEGATIVE_TIME = 103;
+}
+
+sub debug
+{
+ my ($lineN, $fmt);
+ if ( $debug_f == 0 ) {
+ return;
+ }
+ $lineN = shift @_;
+ $fmt = shift @_;
+ if ( $debug_f == 2 ) {
+ warn "DEBUG:#$lineN:\n";
+ }
+ warn sprintf($fmt, @_);
+}
+
+sub set_retVal
+{
+ if ( $retVal == 0 ) {
+ $retVal = $_[0];
+ if ($retVal != 0 ) {
+ warn sprintf("DEBUG: retVal=%d\n", $retVal);
+ }
+ }
+ return $retVal;
+}
+
+sub diffRule
+{
+ # The format of the comparison rule is:
+ # <Name>, <Column number in *.acct>, <Column number in erprint.out>, <message>
+ # Cpu, 3, 1
+ # Total, 2, 3
+ my ($str) = @_;
+ my (@arr);
+
+ @arr = split (/,/, $str);
+ if ($#arr == 2) {
+ # Old version
+ push @arr, $arr[0];
+ }
+ push @Comparison, [@arr];
+}
+
+sub read_rules
+{
+ my ($name, $rule, $line, @arr);
+ return if ( $Read_rules_txt == 1);
+ $Read_rules_txt = 1;
+ open(FP, "<rules.txt") or return;
+ while ($line = <FP>) {
+ chomp ($line);
+ $line =~ s/\s*//g; # Remove all blanks
+ $line =~ s/\\s/ /g; # Replace \s with space
+ next if ( $line =~ m/^$/ );
+ next if ( $line =~ m/^#/ );
+
+ if ( $line =~ m/=/ ) {
+ # Set a calculation rule
+ ($name, $rule) = split (/=/, $line);
+ $Rules{$name} = [split(/\+/, $rule)];
+ next;
+ }
+
+ # Set a comparison rule
+ &diffRule($line);
+ }
+ close(FP);
+}
+
+sub dump_acct()
+{
+ my ($i, $n, $key, $fmt, @fmt_head);
+ printf "dump_acct:\n";
+ foreach $i ( @acctHeader ) {
+ $fmt = sprintf("%%%ds ", length($i));
+ push @fmt_head, $fmt;
+ printf $fmt, $i;
+ }
+ printf "\n";
+ foreach $key (sort keys %Acct) {
+ $n = 0;
+ foreach $i ( @{$Acct{$key}} ) {
+ $fmt = $n <= $#fmt_head ? $fmt_head[$n] : " %10s";
+ $n++;
+ printf $fmt, $i;
+ }
+ printf " '%s'", $key;
+ if ( exists $Rules{$key} ) {
+ printf " := %s", join(" + ", @{$Rules{$key}});
+ }
+ printf "\n";
+ }
+}
+
+sub readAcct
+{
+ # Read the *.acct file into hash $Acct with the function name as key.
+ # The format of *.acct is :
+ # X <time1> ... <timeN> <func_name>
+ my ($fileName, @checkTime) = @_;
+ my ($name, $i, $key, $line, @arr);
+
+ # file *.acct is generated while the test program is running.
+ if (!open(FP, "<$fileName")) {
+ printf "acct::readAcct: Cannot open '%s'\n\n", $fileName;
+ exit($ERROR_ACCT_MISMATCH);
+ }
+ while ($line = <FP>) { # Skip the first lines (header)
+ last if ( $line =~ m/^X\s+/ );
+ }
+ @acctHeader = split (/\s+/, $line);
+ push @acctHeader, "Comment";
+ while ($line = <FP>) {
+ chomp($line);
+ $line =~ s/^\s*//; # Delete leading spaces
+ next if ( $line =~ m/^$/ );
+ @arr = split (/\s+/, $line);
+ $name = pop(@arr);
+ if (defined $Acct{$name}) {
+ for ($i = 1; $i <= $#arr; $i++ ) {
+ $Acct{$name}[$i] += $arr[$i];
+ }
+ } else {
+ $Acct{$name} = [ @arr ];
+ }
+
+ foreach $i ( @checkTime ) {
+ next if ($i > $#arr);
+ if ( $arr[$i] < 0 ) {
+ &set_retVal($ERROR_NEGATIVE_TIME);
+ last;
+ }
+ }
+ }
+ close(FP);
+
+ &read_rules;
+ # &checkCallersCallees;
+
+ if ( $debug_f != 0 ) {
+ printf "\nreadAcct: '%s'\n", $fileName;
+ printf "checkTime: ";
+ if( $#checkTime == -1 ) {
+ printf "<None>\n";
+ } else {
+ print "[ ", join(", ", @checkTime), " ]\n";
+ }
+ foreach $i ( @Comparison ) {
+ print "Comparison rule: ", join(", ", @{$i}), "\n";
+ }
+ &dump_acct;
+ printf "\n";
+ }
+}
+
+
+sub read_er_print_out
+{
+ my ($fileName, $colName) = @_;
+ my ($name, @arr, $head_f, $line, $key, $i);
+
+ $Erp = {};
+ $head_f = 1;
+ open(FP, "<$fileName") or return;
+ while ($line = <FP>) {
+ chomp($line);
+ $line =~ s/^\s*//; # Delete leading spaces
+ next if ( $line =~ m/^$/ );
+ if ($head_f == 1) {
+ # Skip the first lines (header)
+ next unless ( $line =~ m/^\d/ );
+ next unless ( ($line =~ m/<Total>\s*$/) ||
+ ($line =~ m/<Stack-unwind-failed>\s*$/) );
+ $head_f = 0;
+ if ($colName == -1) {
+ @arr = split (/\s+/, $line);
+ $colName = $#arr + 1;
+ }
+ }
+ @arr = split (/\s+/, $line, $colName);
+ $name = pop(@arr);
+ if (defined $Erp->{$name}) {
+ for ($i = 0; $i <= $#arr; $i++ ) {
+ $Erp->{$name}[$i] += $arr[$i];
+ }
+ } else {
+ $Erp->{$name} = [ @arr ];
+ }
+
+ $i = index($name, "(");
+ if ($i > 0) {
+ my $funcName = substr($name, 0, $i);
+ if (defined $Erp->{$funcName}) {
+ for ($i = 0; $i <= $#arr; $i++ ) {
+ $Erp->{$funcName}[$i] += $arr[$i];
+ }
+ } else {
+ $Erp->{$funcName} = [ @arr ];
+ }
+ }
+ }
+ close(FP);
+
+ if ( $debug_f != 0 ) {
+ printf "read_er_print_out:\n";
+ foreach $key (sort keys %{$Erp}) {
+ foreach $i ( @{$Erp->{$key}} ) {
+ printf " %10s", $i;
+ }
+ printf " %-10s", "'$key'";
+ if ( exists $Rules{$key} ) {
+ printf " += %s", join(" + ", @{$Rules{$key}});
+ }
+ printf "\n";
+ }
+ }
+}
+
+
+sub createKDiff
+{
+ my ($colSample) = @_;
+ my ($key, $str, $i, $head_str);
+
+ open(DIFF_fp, ">diff.out");
+ $head_str = "X";
+ for $i ( 0..$#Comparison ) {
+ $head_str .= &get_head_str($i);
+ }
+ $head_str .= " Name";
+ printf DIFF_fp "%s\n", $head_str;
+ foreach $key (sort keys %Acct) {
+ # Restore a hash 'Erp'
+ $Erp = $hashSample[$Acct{$key}[$colSample]];
+ $str = &doComp($key, $head_str);
+ printf DIFF_fp "%s (Sample %d)\n", $str,$Acct{$key}[$colSample];
+ }
+ close(DIFF_fp);
+ &closeDisFile();
+}
+
+sub commandToScr1_fp()
+{
+ my ($str) = @_;
+ printf Scr1_fp "#\n#%s\n%s\n", $str, $str;
+}
+
+sub openFsingleScr
+{
+ return if ($OpenFsingle == 1);
+ open(Scr1_fp, ">>erp_fsingle.scr");
+ $OpenFsingle = 1;
+}
+
+sub closeFsingleScr
+{
+ return if ($OpenFsingle != 1);
+ $OpenFsingle = 2;
+ close(Scr1_fp);
+}
+
+sub openDisFile
+{
+ &openFsingleScr();
+ return if ($OpenDis == 1);
+ open(Dis_fp, ">>discrepancy.out");
+ $OpenDis = 1;
+}
+
+sub closeDisFile
+{
+ &closeFsingleScr();
+ return if ($OpenDis != 1);
+ $OpenDis = 2;
+ close(Dis_fp);
+}
+
+sub with_diff
+{
+ my ($i) = @_;
+ my ($key);
+
+ $key = $Comparison[$i][0];
+ if( ! exists $RANGE{$key} ) {
+ printf "acct::with_diff: '$key' is a wrong key\n\n";
+ exit $ERROR_PERL_ERROR;
+ }
+ if ($RANGE{$key}->{FMT} !~ m/^%d/) {
+ return 1;
+ }
+ return 0;
+}
+
+sub get_head_str()
+{
+ my ($i) = @_;
+ my ($str);
+ $str = $Comparison[$i][3];
+ while (length($str) < 16) {
+ $str = "*" . $str . "*";
+ }
+ if (with_diff($i)) {
+ return sprintf("| %17s %7s %7s %s", $str, "Diff", "%", "x");
+ } else {
+ return sprintf("| %17s %s", $str, "x");
+ }
+}
+
+sub doComp
+{
+ my ($fname, $head_str) = @_;
+ my ($key, $R, $r1, $r2, $diff, $rate, $flagX, $x, $i,
+ $retStr, $discrepancy, $err_diff_range, $err_zero_metric, $err_acct_mismatch);
+
+ sub setRate
+ {
+ my ($val, $diff) = @_;
+ return sprintf("%6.1f", ($diff/$val)*100) if ( $val != 0 );
+ return sprintf("%6.1f", "0.0") if ( $diff >= -0.05 && $diff <= 0.05);
+ return sprintf("%6.1f", "100") if ( $diff > 0 );
+ return sprintf("%6.1f", "-100");
+ }
+
+ $err_diff_range = 0;
+ $err_zero_metric = 0;
+ $err_acct_mismatch = 0;
+ $discrepancy = " ";
+ $flagX = " ";
+ $retStr = "";
+ for $i ( 0..$#Comparison ) {
+ $r1 = $Acct{$fname}[$Comparison[$i][1]];
+ $r2 = 0;
+ if ( ! exists $Rules{$fname} ) {
+ if ( exists $Erp->{$fname} ) {
+ $r2 = $Erp->{$fname}[$Comparison[$i][2]];
+ }
+ } else {
+ foreach my $key1 ( @{$Rules{$fname}} ) {
+ my $sign = 1;
+ $key = $key1;
+ if (substr($key1, 0, 1) eq '-') {
+ $key = substr($key1, 1);
+ $sign = -1;
+ }
+ if ( exists $Erp->{$key} ) {
+ $r2 += $sign * $Erp->{$key}[$Comparison[$i][2]];
+ }
+ }
+ }
+
+ $key = $Comparison[$i][0];
+ if( ! exists $RANGE{$key} ) {
+ printf "acct::doComp: '$key' is a wrong key\n\n";
+ exit $ERROR_PERL_ERROR;
+ }
+ $R = $RANGE{$key};
+ $r1 = sprintf($R->{FMT}, $r1);
+ $r2 = sprintf($R->{FMT}, $r2);
+ $diff = sprintf($R->{FMT}, $r1 - $r2);
+ $rate = &setRate($r1, $diff);
+ if ((( $diff > $R->{P_RANGE} ) && ( $rate >= $R->{P_RATE} ))
+ || ( ( $fname ne '<Unknown>') && ( $diff < $R->{N_RANGE} ) && ( $rate <= $R->{N_RATE} ))) {
+ $x = ($Acct{$fname}[0] eq "Y") ? "y" : "x";
+ if ( $x ne "y" ) {
+ $flagX = "X";
+ &openDisFile();
+ printf Dis_fp "%s/ %s\n", $fname, $Comparison[$i][3];
+
+ $discrepancy .= " $Comparison[$i][3]";
+ if (with_diff($i)) {
+ if ( $r2 > 0 ) {
+ $err_diff_range = $ERROR_DIFF_RANGE;
+ } else {
+ $err_zero_metric = $ERROR_ZERO_METRIC;
+ }
+ } else {
+ $err_acct_mismatch = $ERROR_ACCT_MISMATCH;
+ }
+ }
+ } else {
+ $x = " ";
+ }
+
+ if (with_diff($i)) {
+ $retStr .= sprintf("| %8s %8s %7s %7s %s", $r1, $r2, $diff, $rate, $x);
+ } else {
+ $retStr .= sprintf("| %8s %8s %s", $r1, $r2, $x);
+ }
+ }
+ $retStr = $flagX . $retStr . sprintf(" %-10s", $fname);
+ if ( exists $Rules{$fname} ) {
+ $retStr .= sprintf " := %s", join(" + ", @{$Rules{$fname}});
+ }
+ if ($discrepancy ne " ") {
+ if ($err_acct_mismatch != 0) {
+ $retVal = $err_acct_mismatch;
+ }
+ &set_retVal($err_zero_metric);
+ &set_retVal($err_diff_range);
+ printf Scr1_fp "#%s\n#%s\n", $head_str, $retStr;
+ &commandToScr1_fp(sprintf("%s %s 1", 'fsingle', $fname));
+ &commandToScr1_fp(sprintf("%s %s 1", 'csingle', $fname));
+ }
+ return ($retStr);
+}
+
+sub doComp2AVG
+{
+ my ($fname, $head_str, @avg) = @_;
+ my ($key, $R, $r1, $r2, $diff, $rate, $flagX, $x, $i,
+ $retStr, $discrepancy, $err_diff_range, $err_zero_metric, $err_acct_mismatch);
+
+ sub setRate
+ {
+ my ($val, $diff) = @_;
+ return sprintf("%6.1f", ($diff/$val)*100) if ( $val != 0 );
+ return sprintf("%6.1f", "0.0") if ( $diff >= -0.05 && $diff <= 0.05);
+ return sprintf("%6.1f", "100") if ( $diff > 0 );
+ return sprintf("%6.1f", "-100");
+ }
+
+ $err_diff_range = 0;
+ $err_zero_metric = 0;
+ $err_acct_mismatch = 0;
+ $discrepancy = " ";
+ $flagX = " ";
+ $retStr = "";
+ for $i ( 0..$#Comparison ) {
+ $r1 = $avg[$i];
+ $r2 = 0;
+ if ( ! exists $Rules{$fname} ) {
+ if ( exists $Erp->{$fname} ) {
+ $r2 = $Erp->{$fname}[$Comparison[$i][2]];
+ }
+ } else {
+ foreach my $key1 ( @{$Rules{$fname}} ) {
+ my $sign = 1;
+ $key = $key1;
+ if (substr($key1, 0, 1) eq '-') {
+ $key = substr($key1, 1);
+ $sign = -1;
+ }
+ if ( exists $Erp->{$key} ) {
+ $r2 += $sign * $Erp->{$key}[$Comparison[$i][2]];
+ }
+ }
+ }
+
+ $key = $Comparison[$i][0];
+ if( ! exists $RANGE{$key} ) {
+ printf "acct::doComp: '$key' is a wrong key\n\n";
+ exit $ERROR_PERL_ERROR;
+ }
+ $R = $RANGE{$key};
+ $r1 = sprintf($R->{FMT}, $r1);
+ $r2 = sprintf($R->{FMT}, $r2);
+ $diff = sprintf($R->{FMT}, $r1 - $r2);
+ $rate = &setRate($r1, $diff);
+ if ((( $diff > $R->{P_RANGE_2AVG} ) && ( $rate >= $R->{P_RATE_2AVG} ))
+ || ( ( $fname ne '<Unknown>') && ( $diff < $R->{N_RANGE_2AVG} ) && ( $rate <= $R->{N_RATE_2AVG} ))) {
+ $flagX = "X";
+ $x = "x";
+ $discrepancy .= " $Comparison[$i][3]";
+ if (with_diff($i)) {
+ if ( $r2 > 0 ) {
+ $err_diff_range = $ERROR_DIFF_RANGE;
+ } else {
+ $err_zero_metric = $ERROR_ZERO_METRIC;
+ }
+ } else {
+ $err_acct_mismatch = $ERROR_ACCT_MISMATCH;
+ }
+ } else {
+ $x = " ";
+ }
+
+ if (with_diff($i)) {
+ $retStr .= sprintf("| %8s %8s %7s %7s %s", $r1, $r2, $diff, $rate, $x);
+ } else {
+ $retStr .= sprintf("| %8s %8s %s", $r1, $r2, $x);
+ }
+ }
+ $retStr = $flagX . $retStr . sprintf(" %-10s", $fname);
+ if ( exists $Rules{$fname} ) {
+ $retStr .= sprintf " := %s", join(" + ", @{$Rules{$fname}});
+ }
+ if ($discrepancy ne " ") {
+ if ($err_acct_mismatch != 0) {
+ $retVal = $err_acct_mismatch;
+ }
+ &set_retVal($err_zero_metric);
+ &set_retVal($err_diff_range);
+ &openDisFile();
+ printf Scr1_fp "#%s\n#%s\n", $head_str, $retStr;
+ &commandToScr1_fp(sprintf("%s %s 1", 'fsingle', $fname));
+ printf Dis_fp "%s/%s\n", $fname, $discrepancy;
+ } else {
+ }
+ return ($retStr);
+}
+
+
+sub checkUnknown()
+{
+ my ($total, $i, $R);
+
+ sub checkUnknRate()
+ {
+ my ($name, $N) = @_;
+ my ($val, $rate, $fmt);
+
+ $val = $Erp->{$name}[$Comparison[$N][2]];
+ $val = sprintf($R->{FMT}, $val);
+ $rate = sprintf($R->{FMT},($val / $total) * 100);
+
+ if (($val > $R->{'P_RANGE'}) && ($rate > $R->{'P_RATE'})) {
+ &set_retVal($ERROR_HIGH_UNKNOWN);
+ &openFsingleScr();
+ $fmt = "#%-8s %10s %10s %s\n";
+ printf Scr1_fp $fmt, $Comparison[$N][0], '%', '<Total>', $name;
+ printf Scr1_fp $fmt, ' ', $rate, $total, $val;
+ &commandToScr1_fp(sprintf("%s %s 1", 'fsingle', '<Total>'));
+ &commandToScr1_fp(sprintf("%s %s 1", 'csingle', '<Total>'));
+ &commandToScr1_fp(sprintf("%s %s 1", 'fsingle', $name));
+ &commandToScr1_fp(sprintf("%s %s 1", 'csingle', $name));
+ &closeFsingleScr();
+ return 1;
+ }
+ return 0;
+ }
+
+ return if ( ! exists $Erp->{'<Total>'} );
+ return if ( $ENV{NOJAVA} );
+ $R = $RANGE{'Unkn'};
+ for $i ( 0..$#Comparison ) {
+ $total = $Erp->{'<Total>'}[$Comparison[$i][2]];
+ next if ( $total == 0 );
+ $total = sprintf($R->{FMT}, $total);
+# last if &checkUnknRate('<Stack-unwind-failed>', $i);
+ last if &checkUnknRate('<Unknown>', $i);
+ last if &checkUnknRate('<no', $i);
+ }
+}
+
+sub createDiff
+{
+ my ($key, $str, $i, $head_str);
+
+ &checkUnknown();
+ open(DIFF_fp, ">diff.out");
+ $head_str = " ";
+ for $i ( 0..$#Comparison ) {
+ printf DIFF_fp "Comparison[%d]: %s,%d,%d\n", $i,
+ $Comparison[$i][0], $Comparison[$i][1], $Comparison[$i][2], $Comparison[$i][3];
+ $head_str .= &get_head_str($i);
+ }
+ printf DIFF_fp "\nX| Compare the acct file (first column) with the er_print output (second column):\n";
+ $head_str .= " Name";
+ printf DIFF_fp "%s\n", $head_str;
+ foreach $key (sort keys %Acct) {
+ $str = &doComp($key, $head_str);
+ printf DIFF_fp "%s\n", $str;
+ }
+ &checkCallersCallees;
+ close(DIFF_fp);
+ &closeDisFile();
+ return -s "discrepancy.out"
+}
+
+sub createDiff2AVG
+{
+ my ($key, $str, $i, $n, $head_str, @avg, $temp, $fname);
+
+ &checkUnknown();
+ open(DIFF_fp, ">>diff.out");
+ printf DIFF_fp "\n==================\n";
+ $head_str = " ";
+ for $i ( 0..$#Comparison ) {
+ printf DIFF_fp "Comparison[%d]: %s,%d\n", $i,
+ $Comparison[$i][0], $Comparison[$i][2];
+ $head_str .= &get_head_str($i);
+ }
+ printf DIFF_fp "\n#| Compare the avg value (first column) with the er_print output (second column):\n";
+ $head_str .= " Name";
+ printf DIFF_fp "%s\n", $head_str;
+ for $i ( 0..$#Comparison ) {
+ $avg[$i] = 0;
+ }
+ $n=0;
+ foreach $fname (sort keys %Acct) {
+ $n++;
+ for $i ( 0..$#Comparison ) {
+ if ( ! exists $Rules{$fname} ) {
+ if ( exists $Erp->{$fname} ) {
+ $temp = $Erp->{$fname}[$Comparison[$i][2]];
+ }
+ } else {
+ foreach my $key1 ( @{$Rules{$fname}} ) {
+ my $sign = 1;
+ $key = $key1;
+ if (substr($key1, 0, 1) eq '-') {
+ $key = substr($key1, 1);
+ $sign = -1;
+ }
+ if ( exists $Erp->{$key} ) {
+ $temp += $sign * $Erp->{$key}[$Comparison[$i][2]];
+ }
+ }
+ }
+ $avg[$i] += $temp;
+ }
+ }
+ for $i ( 0..$#Comparison ) {
+ $avg[$i] /= $n;
+ }
+
+ foreach $key (sort keys %Acct) {
+ $str = &doComp2AVG($key, $head_str, @avg);
+ printf DIFF_fp "%s\n", $str;
+ }
+ close(DIFF_fp);
+ &closeDisFile();
+}
+
+sub sumOutlinedCode
+{ # Add a time of the outlined code.
+ my ($name, $eName);
+ foreach $name (keys %Acct) {
+ foreach $eName (keys %$Erp) {
+ next if ("$eName" !~ m/^($name)\s--/);
+ if (defined $Rules{$name}) {
+ push @{$Rules{$name}}, $eName;
+ } else {
+ $Rules{$name} = [$eName];
+ }
+ }
+ }
+}
+
+sub checkCallersCallees
+{
+ my (@arr, $name, $colName, $line, $nline, %Calls);
+
+ open(FP, "<caller_callee.out") or return;
+ while ($line = <FP>) {
+ last if ( $line =~ m/\s+sec.\s+/ );
+ }
+ $nline = 0;
+ while ($line = <FP>) {
+ chomp($line);
+ $line =~ s/^\s*//; # Delete leading spaces
+ next if ( $line =~ m/^$/ );
+ @arr = split (/\s+/, $line, $colName);
+ $name = pop(@arr);
+ # New Callers-Callees format does not have * in the Stack Fragment section
+ # - translate old format to new format for compatibility
+ if ($name eq "*MAIN") { $name = "MAIN"; };
+ last if ($name eq "MAIN");
+ $nline += 1;
+ }
+ if ($nline == 0) {
+ printf "checkCallersCallees: No Callers of MAIN\n";
+ &set_retVal($ERROR_CALLER_VERIF);
+ close(FP);
+ return;
+ }
+ while ($line = <FP>) {
+ chomp($line);
+ $line =~ s/^\s*//; # Delete leading spaces
+ next if ( $line =~ m/^$/ );
+ @arr = split (/\s+/, $line, $colName);
+ $name = pop(@arr);
+ $Calls{$name} = 1;
+ if ( $line =~ /Parallel/ ) { #f90synprog M_EXPERT or M_MACHINE
+ @arr = split (/\s\s+/, $line, $colName);
+ $name = pop(@arr);
+ @arr = split (/\s/, $name);
+ $Calls{$arr[0]} = 1;
+ }
+ }
+ close(FP);
+
+ foreach $name (sort keys %Acct) {
+ next if ( $name eq '<Total>' ) ;
+ next if ( $name eq '<Unknown>' ) ;
+ next if (defined $Calls{$name}) ;
+ printf "checkCallersCallees: '$name' is not inside callees\n";
+ &set_retVal($ERROR_CALLER_VERIF);
+ }
+}
+
+
+return 1;
+END{}
+
diff --git a/gprofng/testsuite/lib/display-lib.exp b/gprofng/testsuite/lib/display-lib.exp
new file mode 100644
index 00000000000..38ecb8d258e
--- /dev/null
+++ b/gprofng/testsuite/lib/display-lib.exp
@@ -0,0 +1,105 @@
+# Support routines for display-testing machinery in gprofng testsuite.
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+# Run the COMMAND on the host and return a list of the form
+# { exit-status OUTPUT }.
+proc run_native_host_cmd { command } {
+ global link_output
+ global ld
+
+ verbose -log "$command"
+ set run_output ""
+ try {
+ set run_output [exec "sh" "-c" "$command" "2>@1"]
+ set status 0
+ } trap CHILDSTATUS {results options} {
+ set status [lindex [dict get $options -errorcode] 2]
+ set run_output $results
+ }
+ regsub "\n$" $run_output "" run_output
+ if { [lindex $status 0] != 0 && [string match "" $run_output] } then {
+ append run_output "child process exited abnormally"
+ }
+
+ if [string match "" $run_output] then {
+ return ""
+ }
+
+ return [list [lindex $status 0] $run_output]
+}
+
+# Run a display test in DIR.
+# Unanswered questions: do we want to cycle through compilation flags,
+# display options, collect flags, app options? Do we want these to be
+# set on a per-app basis? (If so, they should probably be driven by a
+# file in the test dir.)
+proc run_display_test { dir cflags gprofflags } {
+ global srcdir MAKE CC CFLAGS LDFLAGS LIBS BUILDDIR
+ set stripped [string map {" " ""} $dir]
+ set testdir [string map {" " ""} "$dir.$cflags,$gprofflags"]
+ set sdir "$srcdir/gprofng.display/$dir"
+ set tdir "tmpdir/$testdir"
+ send_log "create dir: $tdir\n"
+ set output [run_native_host_cmd "mkdir -p $tdir"]
+ set gprofng [exec find $BUILDDIR/tmpdir -type f -name gprofng -perm -u+x | head -1]
+
+ set fd [open "$tdir/rules.txt" "w"]
+ switch -regexp -- $testdir {
+ {-p,on.*-h,on} {
+ set DISPLAY_FLAGS "-metrics i.totalcpu:i.cycles -func"
+ puts $fd "Cpu, 2, 0\n"
+ puts $fd "Cycles, 2, 1\n"
+ }
+ {-h,on} {
+ set DISPLAY_FLAGS "-metrics i.cycles -func"
+ puts $fd "Cycles, 2, 0\n"
+ }
+ default {
+ set DISPLAY_FLAGS "-metrics i.totalcpu -func"
+ puts $fd "Cpu, 2, 0\n"
+ }
+ }
+ close $fd
+
+ set make_args "-f $sdir/Makefile srcdir=\"$sdir\" builddir=\"$BUILDDIR\" \
+ VPATH=\"$dir\" CC=\"$CC\" CFLAGS=\"$cflags\" LDFLAGS=\"$LDFLAGS\" \
+ DISPLAY_FLAGS=\"$DISPLAY_FLAGS\" \
+ COLLECT_FLAGS=\"$gprofflags\" GPROFNG=\"$gprofng\" MAKE=\"$MAKE\""
+ set output [run_native_host_cmd "cd $tdir && $MAKE $make_args all"]
+# send_log "run_native_host_cmd output:\n$output\n"
+ if { [lindex $output 0] != 0 } then {
+ set out [lindex $output 1]
+ if {[file exists "$tdir/diff.out"]} then {
+ send_log "comparison of results in $dir failed:\n$out\n"
+ set pltf [exec uname -i]
+ if { $pltf == "aarch64" } {
+ xfail $dir
+ return 0
+ }
+ perror "comparison of results in $dir failed"
+ } else {
+ send_log "compilation of test program in $dir failed:\n$out\n"
+ perror "compilation of test program in $dir failed"
+ }
+ fail $dir
+ return 0
+ }
+ pass $dir
+}
diff --git a/include/ChangeLog b/include/ChangeLog
index 55214a1901d..5cf3fa7041a 100644
--- a/include/ChangeLog
+++ b/include/ChangeLog
@@ -1,3 +1,63 @@
+2022-04-20 Clément Chigot <clement.chigot@atos.net>
+
+ * coff/xcoff.h (struct xcoff_loader_info): Add ldrel_count and
+ libpath fields.
+
+2022-04-07 Mark Harmstone <mark@harmstone.com>
+
+ * coff/i386.h: Define R_SECTION.
+ * coff/x86_64.h: Likewise.
+
+2022-04-01 John Baldwin <jhb@FreeBSD.org>
+
+ * elf/common.h (NT_FREEBSD_X86_SEGBASES): Define.
+
+2022-03-16 Simon Marchi <simon.marchi@efficios.com>
+
+ * elf/amdgpu.h: Add relocation values.
+
+2022-03-16 Simon Marchi <simon.marchi@efficios.com>
+
+ * elf/amdgcn.h (NT_AMDGPU_METADATA): New.
+
+2022-03-16 Simon Marchi <simon.marchi@efficios.com>
+
+ * elf/amdgcn.h: Add EF_AMDGPU_MACH_AMDGCN_* and
+ EF_AMDGPU_FEATURE_* defines.
+
+2022-03-16 Simon Marchi <simon.marchi@efficios.com>
+
+ * elf/common.h (ELFOSABI_AMDGPU_PAL, ELFOSABI_AMDGPU_MESA3D):
+ New.
+
+2022-03-16 Simon Marchi <simon.marchi@efficios.com>
+
+ * elf/amdgpu.h: New.
+ * elf/common.h (ELFOSABI_AMDGPU_HSA): Add.
+
+2022-03-11 Vladimir Mezentsev <vladimir.mezentsev@oracle.com>
+
+ * collectorAPI.h: New file.
+ * libcollector.h: New file.
+ * libfcollector.h: New file.
+
+2022-01-25 Klaus Ziegler <klausz@haus-gisela.de>
+
+ PR 28816
+ * elf/common.h (AT_SUN_HWCAP): Make definition conditional.
+
+2022-01-22 Nick Clifton <nickc@redhat.com>
+
+ * 2.38 release branch created.
+
+2022-01-13 Nick Clifton <nickc@redhat.com>
+
+ Import from gcc mainline:
+
+ 2021-01-03 Mike Frysinger <vapier@gentoo.org>
+
+ * libiberty.h (strverscmp): Delete duplicate prototype.
+
2021-12-07 John Baldwin <jhb@FreeBSD.org>
* elf/common.h (AT_FREEBSD_FXRNG, AT_FREEBSD_KPRELOAD): Define.
diff --git a/include/bfdlink.h b/include/bfdlink.h
index 01f57c22edf..27a8e11cc22 100644
--- a/include/bfdlink.h
+++ b/include/bfdlink.h
@@ -114,6 +114,9 @@ struct bfd_link_hash_entry
as distinct from a LTO IR object file. */
unsigned int non_ir_ref_dynamic : 1;
+ /* The symbol, SYM, is referenced by __real_SYM in an object file. */
+ unsigned int ref_real : 1;
+
/* Symbol is a built-in define. These will be overridden by PROVIDE
in a linker script. */
unsigned int linker_def : 1;
@@ -413,6 +416,10 @@ struct bfd_link_info
/* TRUE if PT_GNU_RELRO segment should be created. */
unsigned int relro: 1;
+ /* TRUE if DT_RELR should be enabled for compact relative
+ relocations. */
+ unsigned int enable_dt_relr: 1;
+
/* TRUE if separate code segment should be created. */
unsigned int separate_code: 1;
@@ -485,6 +492,25 @@ struct bfd_link_info
flags. */
unsigned int noexecstack: 1;
+ /* Tri-state variable:
+ 0 => warn if the linker is creating an executable stack, but
+ execstack (above) is 0.
+ 1 => warn if the linker is creating an executable stack; ignores
+ the value of execstack.
+ 2 => do not warn.
+ 3 => not used. */
+ unsigned int warn_execstack: 2;
+
+ /* TRUE if warnings should not be generated for TLS segments with eXecute
+ permission or LOAD segments with RWX permissions. */
+ unsigned int no_warn_rwx_segments: 1;
+
+ /* TRUE if the stack can be made executable because of the absence of a
+ .note.GNU-stack section in an input file. Note - even if this field
+ is set, some targets may choose to ignore the setting and not create
+ an executable stack. */
+ unsigned int default_execstack : 1;
+
/* TRUE if we want to produced optimized output files. This might
need much more time and therefore must be explicitly selected. */
unsigned int optimize: 1;
@@ -528,6 +554,9 @@ struct bfd_link_info
/* TRUE if maxpagesize is set on command-line. */
unsigned int maxpagesize_is_set : 1;
+ /* TRUE if commonpagesize is set on command-line. */
+ unsigned int commonpagesize_is_set : 1;
+
/* Char that may appear as the first char of a symbol, but should be
skipped (like symbol_leading_char) when looking up symbols in
wrap_hash. Used by PowerPC Linux for 'dot' symbols. */
diff --git a/include/coff/i386.h b/include/coff/i386.h
index ac6b15955f8..d2f13286cdf 100644
--- a/include/coff/i386.h
+++ b/include/coff/i386.h
@@ -95,6 +95,7 @@ struct external_reloc
#define R_DIR32 6
#define R_IMAGEBASE 7
+#define R_SECTION 10
#define R_SECREL32 11
#define R_RELBYTE 15
#define R_RELWORD 16
diff --git a/include/coff/internal.h b/include/coff/internal.h
index 69eb0a4a582..f12908b0f65 100644
--- a/include/coff/internal.h
+++ b/include/coff/internal.h
@@ -536,6 +536,13 @@ struct internal_syment
#define DECREF(x) \
((((x) >> N_TSHIFT) & ~ N_BTMASK) | ((x) & N_BTMASK))
+/* Visibility flag, in XCOFF n_type. */
+#define SYM_V_INTERNAL 0x1000
+#define SYM_V_HIDDEN 0x2000
+#define SYM_V_PROTECTED 0x3000
+#define SYM_V_EXPORTED 0x4000
+#define SYM_V_MASK 0xF000
+
union internal_auxent
{
struct
diff --git a/include/coff/x86_64.h b/include/coff/x86_64.h
index cddbda1b487..ef9f9bc5c67 100644
--- a/include/coff/x86_64.h
+++ b/include/coff/x86_64.h
@@ -97,6 +97,7 @@ struct external_reloc
#define R_DIR32 6
#define R_IMAGEBASE 7
+#define R_SECTION 10
#define R_SECREL32 11
#define R_RELBYTE 15
#define R_RELWORD 16
diff --git a/include/coff/xcoff.h b/include/coff/xcoff.h
index bf53ecd4700..0770d04b5f6 100644
--- a/include/coff/xcoff.h
+++ b/include/coff/xcoff.h
@@ -349,6 +349,9 @@ struct xcoff_link_hash_entry
/* Some linker flags. */
unsigned long flags;
+ /* Symbol visibility, using the same define than n_type. */
+ unsigned short visibility;
+
/* The storage mapping class. */
unsigned char smclas;
};
@@ -429,6 +432,10 @@ struct xcoff_loader_info
/* Number of ldsym structures. */
size_t ldsym_count;
+ /* A count of non TOC relative relocs which will need to be
+ allocated in the .loader section. */
+ size_t ldrel_count;
+
/* Size of string table. */
size_t string_size;
@@ -437,6 +444,9 @@ struct xcoff_loader_info
/* Allocated size of string table. */
size_t string_alc;
+
+ /* The libpath being used. */
+ const char *libpath;
};
/* In case we're on a 32-bit machine, construct a 64-bit "-1" value
diff --git a/include/collectorAPI.h b/include/collectorAPI.h
new file mode 100644
index 00000000000..df0d0cdf35a
--- /dev/null
+++ b/include/collectorAPI.h
@@ -0,0 +1,73 @@
+/* Copyright (C) 2021-2022 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _COLLECTORAPI_H
+#define _COLLECTORAPI_H
+
+/* This file contains function prototypes for the user-callable API
+ routines in libcollector. */
+
+#include <pthread.h>
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+ /* Routine to record a sample in the experiment. */
+ extern void collector_sample (const char *name);
+
+ /* Routine to suspend data collection during an experiment. */
+ extern void collector_pause (void);
+
+ /* Routine to resume data collection during an experiment. */
+ extern void collector_resume (void);
+
+ /* Routine to suspend per-thread data collection during an experiment. */
+ extern void collector_thread_pause (pthread_t tid);
+
+ /* Routine to resume per-thread data collection during an experiment. */
+ extern void collector_thread_resume (pthread_t tid);
+
+ /* Routine to close the experiment, and stop all data collection. */
+ extern void collector_terminate_expt (void);
+
+ typedef struct
+ {
+ unsigned int offset;
+ unsigned int lineno;
+ } Lineno;
+
+ /* Routines to let libcollector know about dynamically loaded functions. */
+ extern void collector_func_load (const char *name, const char *alias,
+ const char *sourcename, void *vaddr,
+ int size, int lntsize, Lineno *lntable);
+
+ extern void collector_func_unload (void *vaddr);
+
+#ifdef NEED_COLLECTOR_MODULE
+ extern void collector_module_load (const char *modulename, void *vaddr);
+ extern void collector_module_unload (void *vaddr);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _COLLECTORAPI_H */
diff --git a/include/ctf-api.h b/include/ctf-api.h
index a3f45283b3c..153e012b5a0 100644
--- a/include/ctf-api.h
+++ b/include/ctf-api.h
@@ -314,7 +314,13 @@ extern ctf_next_t *ctf_next_copy (ctf_next_t *);
archives: so they can be used to open both. CTF files will appear to be an
archive with one member named '.ctf'. The low-level functions
ctf_simple_open and ctf_bufopen return ctf_dict_t's directly, and cannot
- be used on CTF archives. */
+ be used on CTF archives.
+
+ Some of these functions take raw symtab and strtab section content in the
+ form of ctf_sect_t structures. For CTF in ELF files, these should be
+ extracted from .dynsym and its associated string table (usually .dynsym)
+ whenever the CTF_F_DYNSTR flag is set in the CTF preamble (which it almost
+ always will be for linked objects, but not for .o files). */
extern ctf_archive_t *ctf_bfdopen (struct bfd *, int *);
extern ctf_archive_t *ctf_bfdopen_ctfsect (struct bfd *, const ctf_sect_t *,
diff --git a/include/ctf.h b/include/ctf.h
index 6db2742d5fb..698aab3eab6 100644
--- a/include/ctf.h
+++ b/include/ctf.h
@@ -89,13 +89,13 @@ extern "C"
entries and reorder them accordingly (dropping the indexes in the process).
Variable records (as distinct from data objects) provide a modicum of support
- for non-ELF systems, mapping a variable name to a CTF type ID. The variable
- names are sorted into ASCIIbetical order, permitting binary searching. We do
- not define how the consumer maps these variable names to addresses or
+ for non-ELF systems, mapping a variable or function name to a CTF type ID.
+ The names are sorted into ASCIIbetical order, permitting binary searching.
+ We do not define how the consumer maps these variable names to addresses or
anything else, or indeed what these names represent: they might be names
looked up at runtime via dlsym() or names extracted at runtime by a debugger
or anything else the consumer likes. Variable records with identically-
- named entries in the data object section are removed.
+ named entries in the data object or function index section are removed.
The data types section is a list of variable size records that represent each
type, in order by their ID. The types themselves form a directed graph,
diff --git a/include/diagnostics.h b/include/diagnostics.h
index f10d066150a..8bf5a3c3d9b 100644
--- a/include/diagnostics.h
+++ b/include/diagnostics.h
@@ -76,6 +76,9 @@
# define DIAGNOSTIC_IGNORE_STRINGOP_TRUNCATION \
DIAGNOSTIC_IGNORE ("-Wstringop-truncation")
+# define DIAGNOSTIC_IGNORE_STRINGOP_OVERREAD \
+ DIAGNOSTIC_IGNORE ("-Wstringop-overread")
+
# define DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL \
DIAGNOSTIC_IGNORE ("-Wformat-nonliteral")
@@ -108,6 +111,10 @@
# define DIAGNOSTIC_IGNORE_STRINGOP_TRUNCATION
#endif
+#ifndef DIAGNOSTIC_IGNORE_STRINGOP_OVERREAD
+# define DIAGNOSTIC_IGNORE_STRINGOP_OVERREAD
+#endif
+
#ifndef DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
# define DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
#endif
diff --git a/include/dis-asm.h b/include/dis-asm.h
index 317592448a2..4f91df12498 100644
--- a/include/dis-asm.h
+++ b/include/dis-asm.h
@@ -35,8 +35,6 @@ extern "C" {
#include <string.h>
#include "bfd.h"
- typedef int (*fprintf_ftype) (void *, const char*, ...) ATTRIBUTE_FPTR_PRINTF_2;
-
enum dis_insn_type
{
dis_noninsn, /* Not a valid instruction. */
@@ -49,6 +47,76 @@ enum dis_insn_type
dis_dref2 /* Two data references in instruction. */
};
+/* When printing styled disassembler output, this describes what style
+ should be used. */
+
+enum disassembler_style
+{
+ /* This is the default style, use this for any additional syntax
+ (e.g. commas between operands, brackets, etc), or just as a default if
+ no other style seems appropriate. */
+ dis_style_text,
+
+ /* Use this for all instruction mnemonics, or aliases for mnemonics.
+ These should be things that correspond to real machine
+ instructions. */
+ dis_style_mnemonic,
+
+ /* For things that aren't real machine instructions, but rather
+ assembler directives, e.g. .byte, etc. */
+ dis_style_assembler_directive,
+
+ /* Use this for any register names. This may or may-not include any
+ register prefix, e.g. '$', '%', at the discretion of the target,
+ though within each target the choice to include prefixes for not
+ should be kept consistent. If the prefix is not printed with this
+ style, then dis_style_text should be used. */
+ dis_style_register,
+
+ /* Use this for any constant values used within instructions or
+ directives, unless the value is an absolute address, or an offset
+ that will be added to an address (no matter where the address comes
+ from) before use. This style may, or may-not be used for any
+ prefix to the immediate value, e.g. '$', at the discretion of the
+ target, though within each target the choice to include these
+ prefixes should be kept consistent. */
+ dis_style_immediate,
+
+ /* The style for the numerical representation of an absolute address.
+ Anything that is an address offset should use the immediate style.
+ This style may, or may-not be used for any prefix to the immediate
+ value, e.g. '$', at the discretion of the target, though within
+ each target the choice to include these prefixes should be kept
+ consistent. */
+ dis_style_address,
+
+ /* The style for any constant value within an instruction or directive
+ that represents an offset that will be added to an address before
+ use. This style may, or may-not be used for any prefix to the
+ immediate value, e.g. '$', at the discretion of the target, though
+ within each target the choice to include these prefixes should be
+ kept consistent. */
+ dis_style_address_offset,
+
+ /* The style for a symbol's name. The numerical address of a symbol
+ should use the address style above, this style is reserved for the
+ name. */
+ dis_style_symbol,
+
+ /* The start of a comment that runs to the end of the line. Anything
+ printed after a comment start might be styled differently,
+ e.g. everything might be styled as a comment, regardless of the
+ actual style used. The disassembler itself should not try to adjust
+ the style emitted for comment content, e.g. an address emitted within
+ a comment should still be given dis_style_address, in this way it is
+ up to the user of the disassembler to decide how comments should be
+ styled. */
+ dis_style_comment_start
+};
+
+typedef int (*fprintf_ftype) (void *, const char*, ...) ATTRIBUTE_FPTR_PRINTF_2;
+typedef int (*fprintf_styled_ftype) (void *, enum disassembler_style, const char*, ...) ATTRIBUTE_FPTR_PRINTF_3;
+
/* This struct is passed into the instruction decoding routine,
and is passed back out into each callback. The various fields are used
for conveying information from your main routine into your callbacks,
@@ -62,6 +130,7 @@ enum dis_insn_type
typedef struct disassemble_info
{
fprintf_ftype fprintf_func;
+ fprintf_styled_ftype fprintf_styled_func;
void *stream;
void *application_data;
@@ -228,6 +297,9 @@ typedef struct disassemble_info
disassembling such as the way mapping symbols are found on AArch64. */
bfd_vma stop_offset;
+ /* Set to true if the disassembler applied styling to the output,
+ otherwise, set to false. */
+ bool created_styled_output;
} disassemble_info;
/* This struct is used to pass information about valid disassembler
@@ -337,6 +409,10 @@ extern void disassemble_init_for_target (struct disassemble_info *);
/* Tidy any memory allocated by targets, such as info->private_data. */
extern void disassemble_free_target (struct disassemble_info *);
+/* Set the basic disassembler print functions. */
+extern void disassemble_set_printf (struct disassemble_info *, void *,
+ fprintf_ftype, fprintf_styled_ftype);
+
/* Document any target specific options available from the disassembler. */
extern void disassembler_usage (FILE *);
@@ -394,11 +470,13 @@ extern bool generic_symbol_is_valid
/* Method to initialize a disassemble_info struct. This should be
called by all applications creating such a struct. */
extern void init_disassemble_info (struct disassemble_info *dinfo, void *stream,
- fprintf_ftype fprintf_func);
+ fprintf_ftype fprintf_func,
+ fprintf_styled_ftype fprintf_styled_func);
/* For compatibility with existing code. */
-#define INIT_DISASSEMBLE_INFO(INFO, STREAM, FPRINTF_FUNC) \
- init_disassemble_info (&(INFO), (STREAM), (fprintf_ftype) (FPRINTF_FUNC))
+#define INIT_DISASSEMBLE_INFO(INFO, STREAM, FPRINTF_FUNC, FPRINTF_STYLED_FUNC) \
+ init_disassemble_info (&(INFO), (STREAM), (fprintf_ftype) (FPRINTF_FUNC), \
+ (fprintf_styled_ftype) (FPRINTF_STYLED_FUNC))
#ifdef __cplusplus
}
diff --git a/include/dwarf2.def b/include/dwarf2.def
index 4214c80907a..530c6f849f9 100644
--- a/include/dwarf2.def
+++ b/include/dwarf2.def
@@ -289,7 +289,7 @@ DW_AT (DW_AT_frame_base, 0x40)
DW_AT (DW_AT_friend, 0x41)
DW_AT (DW_AT_identifier_case, 0x42)
DW_AT (DW_AT_macro_info, 0x43)
-DW_AT (DW_AT_namelist_items, 0x44)
+DW_AT (DW_AT_namelist_item, 0x44)
DW_AT (DW_AT_priority, 0x45)
DW_AT (DW_AT_segment, 0x46)
DW_AT (DW_AT_specification, 0x47)
diff --git a/include/elf/amdgpu.h b/include/elf/amdgpu.h
new file mode 100644
index 00000000000..140e8996ad2
--- /dev/null
+++ b/include/elf/amdgpu.h
@@ -0,0 +1,115 @@
+/* AMDGPU ELF support for BFD.
+
+ Copyright (C) 2019-2021 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, see <http://www.gnu.org/licenses/>. */
+
+#ifndef _ELF_AMDGPU_H
+#define _ELF_AMDGPU_H
+
+#include "elf/reloc-macros.h"
+
+/* e_ident[EI_ABIVERSION] values, when e_ident[EI_OSABI] is
+ ELFOSABI_AMDGPU_HSA. */
+
+#define ELFABIVERSION_AMDGPU_HSA_V2 0
+#define ELFABIVERSION_AMDGPU_HSA_V3 1
+#define ELFABIVERSION_AMDGPU_HSA_V4 2
+#define ELFABIVERSION_AMDGPU_HSA_V5 3
+
+/* Processor selection mask for EF_AMDGPU_MACH_* values. */
+
+#define EF_AMDGPU_MACH 0x0ff
+#define EF_AMDGPU_MACH_AMDGCN_MIN 0x020
+
+#define EF_AMDGPU_MACH_AMDGCN_GFX600 0x020
+#define EF_AMDGPU_MACH_AMDGCN_GFX601 0x021
+#define EF_AMDGPU_MACH_AMDGCN_GFX700 0x022
+#define EF_AMDGPU_MACH_AMDGCN_GFX701 0x023
+#define EF_AMDGPU_MACH_AMDGCN_GFX702 0x024
+#define EF_AMDGPU_MACH_AMDGCN_GFX703 0x025
+#define EF_AMDGPU_MACH_AMDGCN_GFX704 0x026
+#define EF_AMDGPU_MACH_AMDGCN_GFX801 0x028
+#define EF_AMDGPU_MACH_AMDGCN_GFX802 0x029
+#define EF_AMDGPU_MACH_AMDGCN_GFX803 0x02a
+#define EF_AMDGPU_MACH_AMDGCN_GFX810 0x02b
+#define EF_AMDGPU_MACH_AMDGCN_GFX900 0x02c
+#define EF_AMDGPU_MACH_AMDGCN_GFX902 0x02d
+#define EF_AMDGPU_MACH_AMDGCN_GFX904 0x02e
+#define EF_AMDGPU_MACH_AMDGCN_GFX906 0x02f
+#define EF_AMDGPU_MACH_AMDGCN_GFX908 0x030
+#define EF_AMDGPU_MACH_AMDGCN_GFX909 0x031
+#define EF_AMDGPU_MACH_AMDGCN_GFX90C 0x032
+#define EF_AMDGPU_MACH_AMDGCN_GFX1010 0x033
+#define EF_AMDGPU_MACH_AMDGCN_GFX1011 0x034
+#define EF_AMDGPU_MACH_AMDGCN_GFX1012 0x035
+#define EF_AMDGPU_MACH_AMDGCN_GFX1030 0x036
+#define EF_AMDGPU_MACH_AMDGCN_GFX1031 0x037
+#define EF_AMDGPU_MACH_AMDGCN_GFX1032 0x038
+#define EF_AMDGPU_MACH_AMDGCN_GFX1033 0x039
+#define EF_AMDGPU_MACH_AMDGCN_GFX602 0x03a
+#define EF_AMDGPU_MACH_AMDGCN_GFX705 0x03b
+#define EF_AMDGPU_MACH_AMDGCN_GFX805 0x03c
+#define EF_AMDGPU_MACH_AMDGCN_GFX1035 0x03d
+#define EF_AMDGPU_MACH_AMDGCN_GFX1034 0x03e
+#define EF_AMDGPU_MACH_AMDGCN_GFX90A 0x03f
+#define EF_AMDGPU_MACH_AMDGCN_GFX940 0x040
+#define EF_AMDGPU_MACH_AMDGCN_GFX1013 0x042
+#define EF_AMDGPU_MACH_AMDGCN_GFX1036 0x045
+
+/* Code object v3 machine flags. */
+
+#define EF_AMDGPU_FEATURE_XNACK_V3 0x100
+#define EF_AMDGPU_FEATURE_SRAMECC_V3 0x200
+
+/* Code object v4 (and later) machine flags. */
+
+#define EF_AMDGPU_FEATURE_XNACK_V4 0x300
+#define EF_AMDGPU_FEATURE_XNACK_UNSUPPORTED_V4 0x000
+#define EF_AMDGPU_FEATURE_XNACK_ANY_V4 0x100
+#define EF_AMDGPU_FEATURE_XNACK_OFF_V4 0x200
+#define EF_AMDGPU_FEATURE_XNACK_ON_V4 0x300
+
+#define EF_AMDGPU_FEATURE_SRAMECC_V4 0xc00
+#define EF_AMDGPU_FEATURE_SRAMECC_UNSUPPORTED_V4 0x000
+#define EF_AMDGPU_FEATURE_SRAMECC_ANY_V4 0x400
+#define EF_AMDGPU_FEATURE_SRAMECC_OFF_V4 0x800
+#define EF_AMDGPU_FEATURE_SRAMECC_ON_V4 0xc00
+
+/* Notes. */
+
+#define NT_AMDGPU_METADATA 32
+
+/* Relocations. */
+
+START_RELOC_NUMBERS (elf_amdgpu_reloc_type)
+ RELOC_NUMBER (R_AMDGPU_NONE, 0)
+ RELOC_NUMBER (R_AMDGPU_ABS32_LO, 1)
+ RELOC_NUMBER (R_AMDGPU_ABS32_HI, 2)
+ RELOC_NUMBER (R_AMDGPU_ABS64, 3)
+ RELOC_NUMBER (R_AMDGPU_REL32, 4)
+ RELOC_NUMBER (R_AMDGPU_REL64, 5)
+ RELOC_NUMBER (R_AMDGPU_ABS32, 6)
+ RELOC_NUMBER (R_AMDGPU_GOTPCREL, 7)
+ RELOC_NUMBER (R_AMDGPU_GOTPCREL32_LO, 8)
+ RELOC_NUMBER (R_AMDGPU_GOTPCREL32_HI, 9)
+ RELOC_NUMBER (R_AMDGPU_REL32_LO, 10)
+ RELOC_NUMBER (R_AMDGPU_REL32_HI, 11)
+ RELOC_NUMBER (R_AMDGPU_RELATIVE64, 13)
+ RELOC_NUMBER (R_AMDGPU_REL16, 16)
+END_RELOC_NUMBERS (R_AMDGPU_max)
+
+#endif /* _ELF_AMDGPU_H */
diff --git a/include/elf/common.h b/include/elf/common.h
index 190532b8fdc..e4bc53e35b4 100644
--- a/include/elf/common.h
+++ b/include/elf/common.h
@@ -77,8 +77,11 @@
#define ELFOSABI_OPENVOS 18 /* Stratus Technologies OpenVOS */
#define ELFOSABI_C6000_ELFABI 64 /* Bare-metal TMS320C6000 */
+#define ELFOSABI_AMDGPU_HSA 64 /* AMD HSA Runtime */
#define ELFOSABI_C6000_LINUX 65 /* Linux TMS320C6000 */
+#define ELFOSABI_AMDGPU_PAL 65 /* AMD PAL Runtime */
#define ELFOSABI_ARM_FDPIC 65 /* ARM FDPIC */
+#define ELFOSABI_AMDGPU_MESA3D 66 /* AMD Mesa3D Runtime */
#define ELFOSABI_ARM 97 /* ARM */
#define ELFOSABI_STANDALONE 255 /* Standalone (embedded) application */
@@ -354,6 +357,9 @@
#define EM_65816 257 /* WDC 65816/65C816 */
#define EM_LOONGARCH 258 /* LoongArch */
#define EM_KF32 259 /* ChipON KungFu32 */
+#define EM_U16_U8CORE 260 /* LAPIS nX-U16/U8 */
+#define EM_TACHYUM 261 /* Tachyum */
+#define EM_56800EF 262 /* NXP 56800EF Digital Signal Controller (DSC) */
/* If it is necessary to assign new unofficial EM_* values, please pick large
random numbers (0x8523, 0xa7f2, etc.) to minimize the chances of collision
@@ -669,6 +675,8 @@
/* note name must be "LINUX". */
#define NT_ARM_HW_WATCH 0x403 /* AArch hardware watchpoint registers */
/* note name must be "LINUX". */
+#define NT_ARM_SYSTEM_CALL 0x404 /* AArch ARM system call number */
+ /* note name must be "LINUX". */
#define NT_ARM_SVE 0x405 /* AArch SVE registers. */
/* note name must be "LINUX". */
#define NT_ARM_PAC_MASK 0x406 /* AArch pointer authentication code masks */
@@ -732,6 +740,7 @@
#define NT_FREEBSD_PROCSTAT_PSSTRINGS 15 /* Procstat ps_strings data. */
#define NT_FREEBSD_PROCSTAT_AUXV 16 /* Procstat auxv data. */
#define NT_FREEBSD_PTLWPINFO 17 /* Thread ptrace miscellaneous info. */
+#define NT_FREEBSD_X86_SEGBASES 0x200 /* x86 segment base registers */
/* Note segments for core files on NetBSD systems. Note name
must start with "NetBSD-CORE". */
@@ -1406,7 +1415,9 @@
#define AT_SUN_PLATFORM 2008 /* Platform name string. */
#define AT_SUN_CAP_HW1 2009 /* Machine dependent hints about
processor capabilities. */
+#ifndef AT_SUN_HWCAP
#define AT_SUN_HWCAP AT_SUN_CAP_HW1 /* For backward compat only. */
+#endif
#define AT_SUN_IFLUSH 2010 /* Should flush icache? */
#define AT_SUN_CPU 2011 /* CPU name string. */
#define AT_SUN_EMUL_ENTRY 2012 /* COFF entry point address. */
diff --git a/include/elf/loongarch.h b/include/elf/loongarch.h
index b835a3e98c7..b7aa4ff069c 100644
--- a/include/elf/loongarch.h
+++ b/include/elf/loongarch.h
@@ -93,27 +93,36 @@ RELOC_NUMBER (R_LARCH_GNU_VTENTRY, 58)
END_RELOC_NUMBERS (R_LARCH_count)
/* Processor specific flags for the ELF header e_flags field. */
-#define EF_LOONGARCH_ABI_ILP32 0b01
-#define EF_LOONGARCH_ABI_LP64 0b11
-#define EF_LOONGARCH_ABI_MASK 0b11
+/*The flag lp64s/lp64f/lp64d/ilp32s/ilp32f/ilp32d 3bits. */
+#define EF_LOONGARCH_ABI_LP64_SOFT_FLOAT 0x1
+#define EF_LOONGARCH_ABI_LP64_SINGLE_FLOAT 0x2
+#define EF_LOONGARCH_ABI_LP64_DOUBLE_FLOAT 0x3
-#define EF_LOONGARCH_FLOAT_ABI_SOFT 0b001100
-#define EF_LOONGARCH_FLOAT_ABI_SINGLE 0b001000
-#define EF_LOONGARCH_FLOAT_ABI_DOUBLE 0b000000
-#define EF_LOONGARCH_FLOAT_ABI_MASK 0b111100
+#define EF_LOONGARCH_ABI_ILP32_SOFT_FLOAT 0x5
+#define EF_LOONGARCH_ABI_ILP32_SINGLE_FLOAT 0x6
+#define EF_LOONGARCH_ABI_ILP32_DOUBLE_FLOAT 0x7
+
+#define EF_LOONGARCH_ABI_MASK 0x7
+#define EF_LOONGARCH_ABI_ILP32_MASK 0x4
+#define EF_LOONGARCH_ABI_FLOAT_MASK 0x3
+#define EF_LOONGARCH_ABI_SOFT_FLOAT_MASK 0x1
+#define EF_LOONGARCH_ABI_SINGLE_FLOAT_MASK 0x2
+#define EF_LOONGARCH_ABI_DOUBLE_FLOAT_MASK 0x3
+
+#define EF_LOONGARCH_ABI(abi) (EF_LOONGARCH_ABI_MASK & (abi))
#define EF_LOONGARCH_IS_LP64(abi) \
- ((abi & EF_LOONGARCH_ABI_MASK) == EF_LOONGARCH_ABI_LP64)
+ (EF_LOONGARCH_ABI(abi) && (!(EF_LOONGARCH_ABI(abi) & EF_LOONGARCH_ABI_ILP32_MASK)))
#define EF_LOONGARCH_IS_ILP32(abi) \
- ((abi & EF_LOONGARCH_ABI_MASK) == EF_LOONGARCH_ABI_ILP32)
+ (EF_LOONGARCH_ABI(abi) && (EF_LOONGARCH_ABI(abi) & EF_LOONGARCH_ABI_ILP32_MASK))
#define EF_LOONGARCH_IS_SOFT_FLOAT(abi) \
- ((abi & EF_LOONGARCH_FLOAT_ABI_MASK) == EF_LOONGARCH_FLOAT_ABI_SOFT)
+ (!((EF_LOONGARCH_ABI(abi) & EF_LOONGARCH_ABI_FLOAT_MASK) ^ EF_LOONGARCH_ABI_SOFT_FLOAT_MASK))
+
#define EF_LOONGARCH_IS_SINGLE_FLOAT(abi) \
- ((abi & EF_LOONGARCH_FLOAT_ABI_MASK) == EF_LOONGARCH_FLOAT_ABI_SINGLE)
-#define EF_LOONGARCH_IS_DOUBLE_FLOAT(abi) \
- ((abi & EF_LOONGARCH_FLOAT_ABI_MASK) == EF_LOONGARCH_FLOAT_ABI_DOUBLE)
+ (!((EF_LOONGARCH_ABI(abi) & EF_LOONGARCH_ABI_FLOAT_MASK) ^ EF_LOONGARCH_ABI_SINGLE_FLOAT_MASK))
-#define EF_LOONGARCH_ABI (EF_LOONGARCH_ABI_MASK | EF_LOONGARCH_FLOAT_ABI_MASK)
+#define EF_LOONGARCH_IS_DOUBLE_FLOAT(abi) \
+ (!((EF_LOONGARCH_ABI(abi) & EF_LOONGARCH_ABI_FLOAT_MASK) ^ EF_LOONGARCH_ABI_DOUBLE_FLOAT_MASK))
#endif /* _ELF_LOONGARCH_H */
diff --git a/include/floatformat.h b/include/floatformat.h
index c8518790347..ffb02f9e149 100644
--- a/include/floatformat.h
+++ b/include/floatformat.h
@@ -97,7 +97,7 @@ struct floatformat
const struct floatformat *split_half;
};
-/* floatformats for IEEE single and double, big and little endian. */
+/* floatformats for IEEE half, single, double and quad, big and little endian. */
extern const struct floatformat floatformat_ieee_half_big;
extern const struct floatformat floatformat_ieee_half_little;
@@ -105,6 +105,8 @@ extern const struct floatformat floatformat_ieee_single_big;
extern const struct floatformat floatformat_ieee_single_little;
extern const struct floatformat floatformat_ieee_double_big;
extern const struct floatformat floatformat_ieee_double_little;
+extern const struct floatformat floatformat_ieee_quad_big;
+extern const struct floatformat floatformat_ieee_quad_little;
/* floatformat for ARM IEEE double, little endian bytes and big endian words */
@@ -128,8 +130,6 @@ extern const struct floatformat floatformat_arm_ext_littlebyte_bigword;
/* IA-64 Floating Point register spilt into memory. */
extern const struct floatformat floatformat_ia64_spill_big;
extern const struct floatformat floatformat_ia64_spill_little;
-extern const struct floatformat floatformat_ia64_quad_big;
-extern const struct floatformat floatformat_ia64_quad_little;
/* IBM long double (double+double). */
extern const struct floatformat floatformat_ibm_long_double_big;
extern const struct floatformat floatformat_ibm_long_double_little;
diff --git a/include/libcollector.h b/include/libcollector.h
new file mode 100644
index 00000000000..5627cfd90fc
--- /dev/null
+++ b/include/libcollector.h
@@ -0,0 +1,89 @@
+/* Copyright (C) 2021-2022 Free Software Foundation, Inc.
+ Contributed by Oracle.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _LIBCOLLECTOR_H
+#define _LIBCOLLECTOR_H
+
+typedef struct
+{
+ unsigned int offset;
+ unsigned int lineno;
+} Lineno;
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+ /* This file contains function prototypes for the user-callable API
+ routines in libcollector for C and C++ codes. */
+
+ /* Routine to record a sample in the experiment. */
+ void collector_sample (char *name);
+
+ /* Routine to suspend data collection during an experiment. */
+ void collector_pause (void);
+
+ /* Routine to resume data collection during an experiment. */
+ void collector_resume (void);
+
+ /* Routine to suspend per-thread data collection during an experiment. */
+ void collector_thread_pause (unsigned int tid);
+
+ /* Routine to resume per-thread data collection during an experiment. */
+ void collector_thread_resume (unsigned int tid);
+
+ /* Routine to close the experiment, and stop all data collection. */
+ void collector_terminate_expt (void);
+
+ /* Routines to let libcollector know about a dynamically loaded function. */
+ void collector_func_load (char *name, char *alias, char *sourcename,
+ void *vaddr, int size, int lntsize, Lineno *lntable);
+ void collector_func_unload (void *vaddr);
+
+ /* Define the weak symbols for the API. */
+ void collector_sample () __attribute__ ((weak));
+ void collector_pause () __attribute__ ((weak));
+ void collector_resume () __attribute__ ((weak));
+ void collector_thread_pause () __attribute__ ((weak));
+ void collector_thread_resume () __attribute__ ((weak));
+ void collector_terminate_expt () __attribute__ ((weak));
+ void collector_func_load () __attribute__ ((weak));
+ void collector_func_unload () __attribute__ ((weak));
+
+#ifdef __cplusplus
+}
+#endif
+
+/* Define the macros that actually get inserted in the caller's code. */
+#define collector_sample(x) (collector_sample ? collector_sample(x), 0 : 0)
+#define collector_pause() (collector_pause ? collector_pause(), 0 : 0)
+#define collector_resume() (collector_resume ? collector_resume(),0 : 0
+#define collector_thread_pause(tid) \
+ (collector_thread_pause ? collector_thread_pause(tid), 0 : 0)
+#define collector_thread_resume(tid) \
+ (collector_thread_resume ? collector_thread_resume(tid), 0 : 0)
+#define collector_terminate_expt() \
+ (collector_terminate_expt ? collector_terminate_expt(), 0 : 0)
+#define collector_func_load(x0,x1,x2,x3,x4,x5,x6) \
+ collector_func_load ? collector_func_load(x0,x1,x2,x3,x4,x5,x6), 0 : 0)
+#define collector_func_unload(x) \
+ (collector_func_unload ? collector_func_unload(x), 0 : 0)
+#endif /* _LIBCOLLECTOR_H */
diff --git a/include/libfcollector.h b/include/libfcollector.h
new file mode 100644
index 00000000000..c9a840a9504
--- /dev/null
+++ b/include/libfcollector.h
@@ -0,0 +1,42 @@
+! Copyright (C) 2021-2022 Free Software Foundation, Inc.
+! Contributed by Oracle.
+!
+! This file is part of GNU Binutils.
+!
+! This program is free software; you can redistribute it and/or modify
+! it under the terms of the GNU General Public License as published by
+! the Free Software Foundation; either version 3, or (at your option)
+! any later version.
+!
+! This program is distributed in the hope that it will be useful,
+! but WITHOUT ANY WARRANTY; without even the implied warranty of
+! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+! GNU General Public License for more details.
+!
+! You should have received a copy of the GNU General Public License
+! along with this program; if not, write to the Free Software
+! Foundation, 51 Franklin Street - Fifth Floor, Boston,
+! MA 02110-1301, USA.
+!
+! Developer Sampling Collector interface include file
+
+ interface
+
+ ! Routine to record a sample in the experiment.
+ subroutine collector_sample(name)
+ character(len=*), intent(in) :: name
+ end subroutine
+
+ ! Routine to suspend data collection during an experiment.
+ subroutine collector_pause()
+ end subroutine
+
+ ! Routine to resume data collection during an experiment.
+ subroutine collector_resume()
+ end subroutine
+
+ ! Routine to stop all data collection and close the experiment.
+ subroutine collector_terminate_expt()
+ end subroutine
+
+ end interface
diff --git a/include/libiberty.h b/include/libiberty.h
index 69f2e05ba50..a65ced9c820 100644
--- a/include/libiberty.h
+++ b/include/libiberty.h
@@ -713,11 +713,6 @@ extern unsigned long long int strtoull (const char *nptr,
char **endptr, int base);
#endif
-#if defined(HAVE_DECL_STRVERSCMP) && !HAVE_DECL_STRVERSCMP
-/* Compare version strings. */
-extern int strverscmp (const char *, const char *);
-#endif
-
/* Set the title of a process */
extern void setproctitle (const char *name, ...);
diff --git a/include/opcode/loongarch.h b/include/opcode/loongarch.h
index a2491a64291..c3922348a56 100644
--- a/include/opcode/loongarch.h
+++ b/include/opcode/loongarch.h
@@ -163,11 +163,11 @@ dec2 : [1-9][0-9]?
const char *format, const char *macro, const char *const arg_strs[],
const char *(*map) (char esc1, char esc2, const char *arg),
char *(*helper) (const char *const arg_strs[], void *context),
- void *context);
+ void *context, size_t len_str);
extern char *loongarch_expand_macro (
const char *macro, const char *const arg_strs[],
char *(*helper) (const char *const arg_strs[], void *context),
- void *context);
+ void *context, size_t len_str);
extern size_t loongarch_bits_imm_needed (int64_t imm, int si);
extern void loongarch_eliminate_adjacent_repeat_char (char *dest, char c);
diff --git a/include/opcode/ppc.h b/include/opcode/ppc.h
index a236b6b469c..a9c25298311 100644
--- a/include/opcode/ppc.h
+++ b/include/opcode/ppc.h
@@ -336,9 +336,11 @@ extern const struct powerpc_operand powerpc_operands[];
extern const unsigned int num_powerpc_operands;
/* Use with the shift field of a struct powerpc_operand to indicate
- that BITM and SHIFT cannot be used to determine where the operand
- goes in the insn. */
-#define PPC_OPSHIFT_INV (-1U << 31)
+ that BITM and SHIFT cannot be used to determine where the operand
+ goes in the insn. */
+#define PPC_OPSHIFT_INV (1U << 30)
+/* A special case, 6-bit SH field. */
+#define PPC_OPSHIFT_SH6 (2U << 30)
/* Values defined for the flags field of a struct powerpc_operand.
Keep the register bits low: They need to fit in an unsigned short. */
@@ -451,32 +453,6 @@ extern const unsigned int num_powerpc_operands;
#define PPC_OPERAND_FSL (0x800000)
#define PPC_OPERAND_FCR (0x1000000)
#define PPC_OPERAND_UDI (0x2000000)
-
-/* The POWER and PowerPC assemblers use a few macros. We keep them
- with the operands table for simplicity. The macro table is an
- array of struct powerpc_macro. */
-
-struct powerpc_macro
-{
- /* The macro name. */
- const char *name;
-
- /* The number of operands the macro takes. */
- unsigned int operands;
-
- /* One bit flags for the opcode. These are used to indicate which
- specific processors support the instructions. The values are the
- same as those for the struct powerpc_opcode flags field. */
- ppc_cpu_t flags;
-
- /* A format string to turn the macro into a normal instruction.
- Each %N in the string is replaced with operand number N (zero
- based). */
- const char *format;
-};
-
-extern const struct powerpc_macro powerpc_macros[];
-extern const int powerpc_num_macros;
extern ppc_cpu_t ppc_parse_cpu (ppc_cpu_t, ppc_cpu_t *, const char *);
diff --git a/include/opcode/riscv-opc.h b/include/opcode/riscv-opc.h
index 0b8cc6c7ddb..15e405bc14e 100644
--- a/include/opcode/riscv-opc.h
+++ b/include/opcode/riscv-opc.h
@@ -2029,15 +2029,23 @@
#define MASK_HSV_W 0xfe007fff
#define MATCH_HSV_D 0x6e004073
#define MASK_HSV_D 0xfe007fff
-/* Privileged CSR addresses. */
-#define CSR_USTATUS 0x0
-#define CSR_UIE 0x4
-#define CSR_UTVEC 0x5
-#define CSR_USCRATCH 0x40
-#define CSR_UEPC 0x41
-#define CSR_UCAUSE 0x42
-#define CSR_UTVAL 0x43
-#define CSR_UIP 0x44
+/* Zicbop hint instructions. */
+#define MATCH_PREFETCH_I 0x6013
+#define MASK_PREFETCH_I 0x1f07fff
+#define MATCH_PREFETCH_R 0x106013
+#define MASK_PREFETCH_R 0x1f07fff
+#define MATCH_PREFETCH_W 0x306013
+#define MASK_PREFETCH_W 0x1f07fff
+/* Zicbom/Zicboz instructions. */
+#define MATCH_CBO_CLEAN 0x10200f
+#define MASK_CBO_CLEAN 0xfff07fff
+#define MATCH_CBO_FLUSH 0x20200f
+#define MASK_CBO_FLUSH 0xfff07fff
+#define MATCH_CBO_INVAL 0x200f
+#define MASK_CBO_INVAL 0xfff07fff
+#define MATCH_CBO_ZERO 0x40200f
+#define MASK_CBO_ZERO 0xfff07fff
+/* Unprivileged Counter/Timers CSR addresses. */
#define CSR_CYCLE 0xc00
#define CSR_TIME 0xc01
#define CSR_INSTRET 0xc02
@@ -2102,22 +2110,24 @@
#define CSR_HPMCOUNTER29H 0xc9d
#define CSR_HPMCOUNTER30H 0xc9e
#define CSR_HPMCOUNTER31H 0xc9f
+/* Privileged Supervisor CSR addresses. */
#define CSR_SSTATUS 0x100
-#define CSR_SEDELEG 0x102
-#define CSR_SIDELEG 0x103
#define CSR_SIE 0x104
#define CSR_STVEC 0x105
#define CSR_SCOUNTEREN 0x106
+#define CSR_SENVCFG 0x10a
#define CSR_SSCRATCH 0x140
#define CSR_SEPC 0x141
#define CSR_SCAUSE 0x142
#define CSR_STVAL 0x143
#define CSR_SIP 0x144
#define CSR_SATP 0x180
+/* Privileged Machine CSR addresses. */
#define CSR_MVENDORID 0xf11
#define CSR_MARCHID 0xf12
#define CSR_MIMPID 0xf13
#define CSR_MHARTID 0xf14
+#define CSR_MCONFIGPTR 0xf15
#define CSR_MSTATUS 0x300
#define CSR_MISA 0x301
#define CSR_MEDELEG 0x302
@@ -2125,15 +2135,34 @@
#define CSR_MIE 0x304
#define CSR_MTVEC 0x305
#define CSR_MCOUNTEREN 0x306
+#define CSR_MSTATUSH 0x310
#define CSR_MSCRATCH 0x340
#define CSR_MEPC 0x341
#define CSR_MCAUSE 0x342
#define CSR_MTVAL 0x343
#define CSR_MIP 0x344
+#define CSR_MTINST 0x34a
+#define CSR_MTVAL2 0x34b
+#define CSR_MENVCFG 0x30a
+#define CSR_MENVCFGH 0x31a
+#define CSR_MSECCFG 0x747
+#define CSR_MSECCFGH 0x757
#define CSR_PMPCFG0 0x3a0
#define CSR_PMPCFG1 0x3a1
#define CSR_PMPCFG2 0x3a2
#define CSR_PMPCFG3 0x3a3
+#define CSR_PMPCFG4 0x3a4
+#define CSR_PMPCFG5 0x3a5
+#define CSR_PMPCFG6 0x3a6
+#define CSR_PMPCFG7 0x3a7
+#define CSR_PMPCFG8 0x3a8
+#define CSR_PMPCFG9 0x3a9
+#define CSR_PMPCFG10 0x3aa
+#define CSR_PMPCFG11 0x3ab
+#define CSR_PMPCFG12 0x3ac
+#define CSR_PMPCFG13 0x3ad
+#define CSR_PMPCFG14 0x3ae
+#define CSR_PMPCFG15 0x3af
#define CSR_PMPADDR0 0x3b0
#define CSR_PMPADDR1 0x3b1
#define CSR_PMPADDR2 0x3b2
@@ -2150,6 +2179,54 @@
#define CSR_PMPADDR13 0x3bd
#define CSR_PMPADDR14 0x3be
#define CSR_PMPADDR15 0x3bf
+#define CSR_PMPADDR16 0x3c0
+#define CSR_PMPADDR17 0x3c1
+#define CSR_PMPADDR18 0x3c2
+#define CSR_PMPADDR19 0x3c3
+#define CSR_PMPADDR20 0x3c4
+#define CSR_PMPADDR21 0x3c5
+#define CSR_PMPADDR22 0x3c6
+#define CSR_PMPADDR23 0x3c7
+#define CSR_PMPADDR24 0x3c8
+#define CSR_PMPADDR25 0x3c9
+#define CSR_PMPADDR26 0x3ca
+#define CSR_PMPADDR27 0x3cb
+#define CSR_PMPADDR28 0x3cc
+#define CSR_PMPADDR29 0x3cd
+#define CSR_PMPADDR30 0x3ce
+#define CSR_PMPADDR31 0x3cf
+#define CSR_PMPADDR32 0x3d0
+#define CSR_PMPADDR33 0x3d1
+#define CSR_PMPADDR34 0x3d2
+#define CSR_PMPADDR35 0x3d3
+#define CSR_PMPADDR36 0x3d4
+#define CSR_PMPADDR37 0x3d5
+#define CSR_PMPADDR38 0x3d6
+#define CSR_PMPADDR39 0x3d7
+#define CSR_PMPADDR40 0x3d8
+#define CSR_PMPADDR41 0x3d9
+#define CSR_PMPADDR42 0x3da
+#define CSR_PMPADDR43 0x3db
+#define CSR_PMPADDR44 0x3dc
+#define CSR_PMPADDR45 0x3dd
+#define CSR_PMPADDR46 0x3de
+#define CSR_PMPADDR47 0x3df
+#define CSR_PMPADDR48 0x3e0
+#define CSR_PMPADDR49 0x3e1
+#define CSR_PMPADDR50 0x3e2
+#define CSR_PMPADDR51 0x3e3
+#define CSR_PMPADDR52 0x3e4
+#define CSR_PMPADDR53 0x3e5
+#define CSR_PMPADDR54 0x3e6
+#define CSR_PMPADDR55 0x3e7
+#define CSR_PMPADDR56 0x3e8
+#define CSR_PMPADDR57 0x3e9
+#define CSR_PMPADDR58 0x3ea
+#define CSR_PMPADDR59 0x3eb
+#define CSR_PMPADDR60 0x3ec
+#define CSR_PMPADDR61 0x3ed
+#define CSR_PMPADDR62 0x3ee
+#define CSR_PMPADDR63 0x3ef
#define CSR_MCYCLE 0xb00
#define CSR_MINSTRET 0xb02
#define CSR_MHPMCOUNTER3 0xb03
@@ -2242,7 +2319,7 @@
#define CSR_MHPMEVENT29 0x33d
#define CSR_MHPMEVENT30 0x33e
#define CSR_MHPMEVENT31 0x33f
-/* Hypervisor Extension v1.0 (Privileged spec 1.12). */
+/* Privileged Hypervisor CSR addresses. */
#define CSR_HSTATUS 0x600
#define CSR_HEDELEG 0x602
#define CSR_HIDELEG 0x603
@@ -2257,7 +2334,6 @@
#define CSR_HENVCFG 0x60a
#define CSR_HENVCFGH 0x61a
#define CSR_HGATP 0x680
-#define CSR_HCONTEXT 0x6a8
#define CSR_HTIMEDELTA 0x605
#define CSR_HTIMEDELTAH 0x615
#define CSR_VSSTATUS 0x200
@@ -2269,6 +2345,7 @@
#define CSR_VSTVAL 0x243
#define CSR_VSIP 0x244
#define CSR_VSATP 0x280
+/* Droppped CSR addresses. */
#define CSR_MBASE 0x380
#define CSR_MBOUND 0x381
#define CSR_MIBASE 0x382
@@ -2277,10 +2354,21 @@
#define CSR_MDBOUND 0x385
#define CSR_MSCOUNTEREN 0x321
#define CSR_MHCOUNTEREN 0x322
-/* Unprivileged CSR addresses. */
+#define CSR_USTATUS 0x0
+#define CSR_UIE 0x4
+#define CSR_UTVEC 0x5
+#define CSR_USCRATCH 0x40
+#define CSR_UEPC 0x41
+#define CSR_UCAUSE 0x42
+#define CSR_UTVAL 0x43
+#define CSR_UIP 0x44
+#define CSR_SEDELEG 0x102
+#define CSR_SIDELEG 0x103
+/* Unprivileged Floating-Point CSR addresses. */
#define CSR_FFLAGS 0x1
#define CSR_FRM 0x2
#define CSR_FCSR 0x3
+/* Unprivileged Debug CSR addresses. */
#define CSR_DCSR 0x7b0
#define CSR_DPC 0x7b1
#define CSR_DSCRATCH0 0x7b2
@@ -2291,9 +2379,13 @@
#define CSR_TDATA3 0x7a3
#define CSR_TINFO 0x7a4
#define CSR_TCONTROL 0x7a5
+#define CSR_HCONTEXT 0x6a8
+#define CSR_SCONTEXT 0x5a8
#define CSR_MCONTEXT 0x7a8
-#define CSR_SCONTEXT 0x7aa
+#define CSR_MSCONTEXT 0x7aa
+/* Unprivileged Scalar Crypto CSR addresses. */
#define CSR_SEED 0x015
+/* Unprivileged Vector CSR addresses. */
#define CSR_VSTART 0x008
#define CSR_VXSAT 0x009
#define CSR_VXRM 0x00a
@@ -2628,17 +2720,18 @@ DECLARE_INSN(hsv_b, MATCH_HSV_B, MASK_HSV_B)
DECLARE_INSN(hsv_h, MATCH_HSV_H, MASK_HSV_H)
DECLARE_INSN(hsv_w, MATCH_HSV_W, MASK_HSV_W)
DECLARE_INSN(hsv_d, MATCH_HSV_D, MASK_HSV_D)
+/* Zicbop instructions. */
+DECLARE_INSN(prefetch_r, MATCH_PREFETCH_R, MASK_PREFETCH_R);
+DECLARE_INSN(prefetch_w, MATCH_PREFETCH_W, MASK_PREFETCH_W);
+DECLARE_INSN(prefetch_i, MATCH_PREFETCH_I, MASK_PREFETCH_I);
+/* Zicbom/Zicboz instructions. */
+DECLARE_INSN(cbo_clean, MATCH_CBO_CLEAN, MASK_CBO_CLEAN);
+DECLARE_INSN(cbo_flush, MATCH_CBO_FLUSH, MASK_CBO_FLUSH);
+DECLARE_INSN(cbo_inval, MATCH_CBO_INVAL, MASK_CBO_INVAL);
+DECLARE_INSN(cbo_zero, MATCH_CBO_ZERO, MASK_CBO_ZERO);
#endif /* DECLARE_INSN */
#ifdef DECLARE_CSR
-/* Privileged CSRs. */
-DECLARE_CSR(ustatus, CSR_USTATUS, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT)
-DECLARE_CSR(uie, CSR_UIE, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT)
-DECLARE_CSR(utvec, CSR_UTVEC, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT)
-DECLARE_CSR(uscratch, CSR_USCRATCH, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT)
-DECLARE_CSR(uepc, CSR_UEPC, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT)
-DECLARE_CSR(ucause, CSR_UCAUSE, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT)
-DECLARE_CSR(utval, CSR_UTVAL, CSR_CLASS_I, PRIV_SPEC_CLASS_1P10, PRIV_SPEC_CLASS_DRAFT)
-DECLARE_CSR(uip, CSR_UIP, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT)
+/* Unprivileged Counter/Timers CSRs. */
DECLARE_CSR(cycle, CSR_CYCLE, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT)
DECLARE_CSR(time, CSR_TIME, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT)
DECLARE_CSR(instret, CSR_INSTRET, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT)
@@ -2703,22 +2796,24 @@ DECLARE_CSR(hpmcounter28h, CSR_HPMCOUNTER28H, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P
DECLARE_CSR(hpmcounter29h, CSR_HPMCOUNTER29H, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT)
DECLARE_CSR(hpmcounter30h, CSR_HPMCOUNTER30H, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT)
DECLARE_CSR(hpmcounter31h, CSR_HPMCOUNTER31H, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT)
+/* Privileged Supervisor CSRs. */
DECLARE_CSR(sstatus, CSR_SSTATUS, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT)
-DECLARE_CSR(sedeleg, CSR_SEDELEG, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT)
-DECLARE_CSR(sideleg, CSR_SIDELEG, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT)
DECLARE_CSR(sie, CSR_SIE, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT)
DECLARE_CSR(stvec, CSR_STVEC, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT)
DECLARE_CSR(scounteren, CSR_SCOUNTEREN, CSR_CLASS_I, PRIV_SPEC_CLASS_1P10, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(senvcfg, CSR_SENVCFG, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
DECLARE_CSR(sscratch, CSR_SSCRATCH, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT)
DECLARE_CSR(sepc, CSR_SEPC, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT)
DECLARE_CSR(scause, CSR_SCAUSE, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT)
DECLARE_CSR(stval, CSR_STVAL, CSR_CLASS_I, PRIV_SPEC_CLASS_1P10, PRIV_SPEC_CLASS_DRAFT)
DECLARE_CSR(sip, CSR_SIP, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT)
DECLARE_CSR(satp, CSR_SATP, CSR_CLASS_I, PRIV_SPEC_CLASS_1P10, PRIV_SPEC_CLASS_DRAFT)
+/* Privileged Machine CSRs. */
DECLARE_CSR(mvendorid, CSR_MVENDORID, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT)
DECLARE_CSR(marchid, CSR_MARCHID, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT)
DECLARE_CSR(mimpid, CSR_MIMPID, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT)
DECLARE_CSR(mhartid, CSR_MHARTID, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(mconfigptr, CSR_MCONFIGPTR, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
DECLARE_CSR(mstatus, CSR_MSTATUS, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT)
DECLARE_CSR(misa, CSR_MISA, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT)
DECLARE_CSR(medeleg, CSR_MEDELEG, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT)
@@ -2726,15 +2821,34 @@ DECLARE_CSR(mideleg, CSR_MIDELEG, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_
DECLARE_CSR(mie, CSR_MIE, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT)
DECLARE_CSR(mtvec, CSR_MTVEC, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT)
DECLARE_CSR(mcounteren, CSR_MCOUNTEREN, CSR_CLASS_I, PRIV_SPEC_CLASS_1P10, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(mstatush, CSR_MSTATUSH, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
DECLARE_CSR(mscratch, CSR_MSCRATCH, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT)
DECLARE_CSR(mepc, CSR_MEPC, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT)
DECLARE_CSR(mcause, CSR_MCAUSE, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT)
DECLARE_CSR(mtval, CSR_MTVAL, CSR_CLASS_I, PRIV_SPEC_CLASS_1P10, PRIV_SPEC_CLASS_DRAFT)
DECLARE_CSR(mip, CSR_MIP, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(mtinst, CSR_MTINST, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(mtval2, CSR_MTVAL2, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(menvcfg, CSR_MENVCFG, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(menvcfgh, CSR_MENVCFGH, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(mseccfg, CSR_MSECCFG, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(mseccfgh, CSR_MSECCFGH, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
DECLARE_CSR(pmpcfg0, CSR_PMPCFG0, CSR_CLASS_I, PRIV_SPEC_CLASS_1P10, PRIV_SPEC_CLASS_DRAFT)
DECLARE_CSR(pmpcfg1, CSR_PMPCFG1, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P10, PRIV_SPEC_CLASS_DRAFT)
DECLARE_CSR(pmpcfg2, CSR_PMPCFG2, CSR_CLASS_I, PRIV_SPEC_CLASS_1P10, PRIV_SPEC_CLASS_DRAFT)
DECLARE_CSR(pmpcfg3, CSR_PMPCFG3, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P10, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(pmpcfg4, CSR_PMPCFG4, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(pmpcfg5, CSR_PMPCFG5, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(pmpcfg6, CSR_PMPCFG6, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(pmpcfg7, CSR_PMPCFG7, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(pmpcfg8, CSR_PMPCFG8, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(pmpcfg9, CSR_PMPCFG9, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(pmpcfg10, CSR_PMPCFG10, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(pmpcfg11, CSR_PMPCFG11, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(pmpcfg12, CSR_PMPCFG12, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(pmpcfg13, CSR_PMPCFG13, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(pmpcfg14, CSR_PMPCFG14, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(pmpcfg15, CSR_PMPCFG15, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
DECLARE_CSR(pmpaddr0, CSR_PMPADDR0, CSR_CLASS_I, PRIV_SPEC_CLASS_1P10, PRIV_SPEC_CLASS_DRAFT)
DECLARE_CSR(pmpaddr1, CSR_PMPADDR1, CSR_CLASS_I, PRIV_SPEC_CLASS_1P10, PRIV_SPEC_CLASS_DRAFT)
DECLARE_CSR(pmpaddr2, CSR_PMPADDR2, CSR_CLASS_I, PRIV_SPEC_CLASS_1P10, PRIV_SPEC_CLASS_DRAFT)
@@ -2751,6 +2865,54 @@ DECLARE_CSR(pmpaddr12, CSR_PMPADDR12, CSR_CLASS_I, PRIV_SPEC_CLASS_1P10, PRIV_SP
DECLARE_CSR(pmpaddr13, CSR_PMPADDR13, CSR_CLASS_I, PRIV_SPEC_CLASS_1P10, PRIV_SPEC_CLASS_DRAFT)
DECLARE_CSR(pmpaddr14, CSR_PMPADDR14, CSR_CLASS_I, PRIV_SPEC_CLASS_1P10, PRIV_SPEC_CLASS_DRAFT)
DECLARE_CSR(pmpaddr15, CSR_PMPADDR15, CSR_CLASS_I, PRIV_SPEC_CLASS_1P10, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(pmpaddr16, CSR_PMPADDR16, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(pmpaddr17, CSR_PMPADDR17, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(pmpaddr18, CSR_PMPADDR18, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(pmpaddr19, CSR_PMPADDR19, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(pmpaddr20, CSR_PMPADDR20, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(pmpaddr21, CSR_PMPADDR21, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(pmpaddr22, CSR_PMPADDR22, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(pmpaddr23, CSR_PMPADDR23, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(pmpaddr24, CSR_PMPADDR24, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(pmpaddr25, CSR_PMPADDR25, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(pmpaddr26, CSR_PMPADDR26, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(pmpaddr27, CSR_PMPADDR27, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(pmpaddr28, CSR_PMPADDR28, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(pmpaddr29, CSR_PMPADDR29, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(pmpaddr30, CSR_PMPADDR30, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(pmpaddr31, CSR_PMPADDR31, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(pmpaddr32, CSR_PMPADDR32, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(pmpaddr33, CSR_PMPADDR33, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(pmpaddr34, CSR_PMPADDR34, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(pmpaddr35, CSR_PMPADDR35, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(pmpaddr36, CSR_PMPADDR36, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(pmpaddr37, CSR_PMPADDR37, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(pmpaddr38, CSR_PMPADDR38, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(pmpaddr39, CSR_PMPADDR39, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(pmpaddr40, CSR_PMPADDR40, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(pmpaddr41, CSR_PMPADDR41, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(pmpaddr42, CSR_PMPADDR42, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(pmpaddr43, CSR_PMPADDR43, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(pmpaddr44, CSR_PMPADDR44, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(pmpaddr45, CSR_PMPADDR45, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(pmpaddr46, CSR_PMPADDR46, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(pmpaddr47, CSR_PMPADDR47, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(pmpaddr48, CSR_PMPADDR48, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(pmpaddr49, CSR_PMPADDR49, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(pmpaddr50, CSR_PMPADDR50, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(pmpaddr51, CSR_PMPADDR51, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(pmpaddr52, CSR_PMPADDR52, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(pmpaddr53, CSR_PMPADDR53, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(pmpaddr54, CSR_PMPADDR54, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(pmpaddr55, CSR_PMPADDR55, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(pmpaddr56, CSR_PMPADDR56, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(pmpaddr57, CSR_PMPADDR57, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(pmpaddr58, CSR_PMPADDR58, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(pmpaddr59, CSR_PMPADDR59, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(pmpaddr60, CSR_PMPADDR60, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(pmpaddr61, CSR_PMPADDR61, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(pmpaddr62, CSR_PMPADDR62, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
+DECLARE_CSR(pmpaddr63, CSR_PMPADDR63, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
DECLARE_CSR(mcycle, CSR_MCYCLE, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT)
DECLARE_CSR(minstret, CSR_MINSTRET, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT)
DECLARE_CSR(mhpmcounter3, CSR_MHPMCOUNTER3, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT)
@@ -2843,7 +3005,7 @@ DECLARE_CSR(mhpmevent28, CSR_MHPMEVENT28, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PR
DECLARE_CSR(mhpmevent29, CSR_MHPMEVENT29, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT)
DECLARE_CSR(mhpmevent30, CSR_MHPMEVENT30, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT)
DECLARE_CSR(mhpmevent31, CSR_MHPMEVENT31, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT)
-/* Hypervisor Ext v1.0 (Privileged spec 1.12). */
+/* Privileged Hypervisor CSRs. */
DECLARE_CSR(hstatus, CSR_HSTATUS, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
DECLARE_CSR(hedeleg, CSR_HEDELEG, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
DECLARE_CSR(hideleg, CSR_HIDELEG, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
@@ -2858,7 +3020,6 @@ DECLARE_CSR(hgeip, CSR_HGEIP, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS
DECLARE_CSR(henvcfg, CSR_HENVCFG, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
DECLARE_CSR(henvcfgh, CSR_HENVCFGH, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
DECLARE_CSR(hgatp, CSR_HGATP, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
-DECLARE_CSR(hcontext, CSR_HCONTEXT, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
DECLARE_CSR(htimedelta, CSR_HTIMEDELTA, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
DECLARE_CSR(htimedeltah, CSR_HTIMEDELTAH, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
DECLARE_CSR(vsstatus, CSR_VSSTATUS, CSR_CLASS_I, PRIV_SPEC_CLASS_1P12, PRIV_SPEC_CLASS_DRAFT)
@@ -2879,10 +3040,21 @@ DECLARE_CSR(mdbase, CSR_MDBASE, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CL
DECLARE_CSR(mdbound, CSR_MDBOUND, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_1P10)
DECLARE_CSR(mscounteren, CSR_MSCOUNTEREN, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_1P10)
DECLARE_CSR(mhcounteren, CSR_MHCOUNTEREN, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_1P10)
-/* Unprivileged CSRs. */
+DECLARE_CSR(ustatus, CSR_USTATUS, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_1P12)
+DECLARE_CSR(uie, CSR_UIE, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_1P12)
+DECLARE_CSR(utvec, CSR_UTVEC, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_1P12)
+DECLARE_CSR(uscratch, CSR_USCRATCH, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_1P12)
+DECLARE_CSR(uepc, CSR_UEPC, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_1P12)
+DECLARE_CSR(ucause, CSR_UCAUSE, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_1P12)
+DECLARE_CSR(utval, CSR_UTVAL, CSR_CLASS_I, PRIV_SPEC_CLASS_1P10, PRIV_SPEC_CLASS_1P12)
+DECLARE_CSR(uip, CSR_UIP, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_1P12)
+DECLARE_CSR(sedeleg, CSR_SEDELEG, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_1P12)
+DECLARE_CSR(sideleg, CSR_SIDELEG, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_1P12)
+/* Unprivileged Floating-Point CSRs. */
DECLARE_CSR(fflags, CSR_FFLAGS, CSR_CLASS_F, PRIV_SPEC_CLASS_NONE, PRIV_SPEC_CLASS_NONE)
DECLARE_CSR(frm, CSR_FRM, CSR_CLASS_F, PRIV_SPEC_CLASS_NONE, PRIV_SPEC_CLASS_NONE)
DECLARE_CSR(fcsr, CSR_FCSR, CSR_CLASS_F, PRIV_SPEC_CLASS_NONE, PRIV_SPEC_CLASS_NONE)
+/* Unprivileged Debug CSRs. */
DECLARE_CSR(dcsr, CSR_DCSR, CSR_CLASS_DEBUG, PRIV_SPEC_CLASS_NONE, PRIV_SPEC_CLASS_NONE)
DECLARE_CSR(dpc, CSR_DPC, CSR_CLASS_DEBUG, PRIV_SPEC_CLASS_NONE, PRIV_SPEC_CLASS_NONE)
DECLARE_CSR(dscratch0, CSR_DSCRATCH0, CSR_CLASS_DEBUG, PRIV_SPEC_CLASS_NONE, PRIV_SPEC_CLASS_NONE)
@@ -2893,9 +3065,13 @@ DECLARE_CSR(tdata2, CSR_TDATA2, CSR_CLASS_DEBUG, PRIV_SPEC_CLASS_NONE, PRIV_SPEC
DECLARE_CSR(tdata3, CSR_TDATA3, CSR_CLASS_DEBUG, PRIV_SPEC_CLASS_NONE, PRIV_SPEC_CLASS_NONE)
DECLARE_CSR(tinfo, CSR_TINFO, CSR_CLASS_DEBUG, PRIV_SPEC_CLASS_NONE, PRIV_SPEC_CLASS_NONE)
DECLARE_CSR(tcontrol, CSR_TCONTROL, CSR_CLASS_DEBUG, PRIV_SPEC_CLASS_NONE, PRIV_SPEC_CLASS_NONE)
-DECLARE_CSR(mcontext, CSR_MCONTEXT, CSR_CLASS_DEBUG, PRIV_SPEC_CLASS_NONE, PRIV_SPEC_CLASS_NONE)
+DECLARE_CSR(hcontext, CSR_HCONTEXT, CSR_CLASS_DEBUG, PRIV_SPEC_CLASS_NONE, PRIV_SPEC_CLASS_NONE)
DECLARE_CSR(scontext, CSR_SCONTEXT, CSR_CLASS_DEBUG, PRIV_SPEC_CLASS_NONE, PRIV_SPEC_CLASS_NONE)
+DECLARE_CSR(mcontext, CSR_MCONTEXT, CSR_CLASS_DEBUG, PRIV_SPEC_CLASS_NONE, PRIV_SPEC_CLASS_NONE)
+DECLARE_CSR(mscontext, CSR_MSCONTEXT, CSR_CLASS_DEBUG, PRIV_SPEC_CLASS_NONE, PRIV_SPEC_CLASS_NONE)
+/* Unprivileged Scalar Crypto CSRs. */
DECLARE_CSR(seed, CSR_SEED, CSR_CLASS_ZKR, PRIV_SPEC_CLASS_NONE, PRIV_SPEC_CLASS_NONE)
+/* Unprivileged Vector CSRs. */
DECLARE_CSR(vstart, CSR_VSTART, CSR_CLASS_V, PRIV_SPEC_CLASS_NONE, PRIV_SPEC_CLASS_NONE)
DECLARE_CSR(vxsat, CSR_VXSAT, CSR_CLASS_V, PRIV_SPEC_CLASS_NONE, PRIV_SPEC_CLASS_NONE)
DECLARE_CSR(vxrm, CSR_VXRM, CSR_CLASS_V, PRIV_SPEC_CLASS_NONE, PRIV_SPEC_CLASS_NONE)
@@ -2912,9 +3088,11 @@ DECLARE_CSR_ALIAS(mbadaddr, CSR_MTVAL, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_
DECLARE_CSR_ALIAS(mucounteren, CSR_MCOUNTINHIBIT, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_1P10)
DECLARE_CSR_ALIAS(dscratch, CSR_DSCRATCH0, CSR_CLASS_DEBUG, PRIV_SPEC_CLASS_NONE, PRIV_SPEC_CLASS_NONE)
DECLARE_CSR_ALIAS(mcontrol, CSR_TDATA1, CSR_CLASS_DEBUG, PRIV_SPEC_CLASS_NONE, PRIV_SPEC_CLASS_NONE)
+DECLARE_CSR_ALIAS(mcontrol6, CSR_TDATA1, CSR_CLASS_DEBUG, PRIV_SPEC_CLASS_NONE, PRIV_SPEC_CLASS_NONE)
DECLARE_CSR_ALIAS(icount, CSR_TDATA1, CSR_CLASS_DEBUG, PRIV_SPEC_CLASS_NONE, PRIV_SPEC_CLASS_NONE)
DECLARE_CSR_ALIAS(itrigger, CSR_TDATA1, CSR_CLASS_DEBUG, PRIV_SPEC_CLASS_NONE, PRIV_SPEC_CLASS_NONE)
DECLARE_CSR_ALIAS(etrigger, CSR_TDATA1, CSR_CLASS_DEBUG, PRIV_SPEC_CLASS_NONE, PRIV_SPEC_CLASS_NONE)
+DECLARE_CSR_ALIAS(tmexttrigger, CSR_TDATA1, CSR_CLASS_DEBUG, PRIV_SPEC_CLASS_NONE, PRIV_SPEC_CLASS_NONE)
DECLARE_CSR_ALIAS(textra32, CSR_TDATA3, CSR_CLASS_DEBUG, PRIV_SPEC_CLASS_NONE, PRIV_SPEC_CLASS_NONE)
DECLARE_CSR_ALIAS(textra64, CSR_TDATA3, CSR_CLASS_DEBUG, PRIV_SPEC_CLASS_NONE, PRIV_SPEC_CLASS_NONE)
#endif /* DECLARE_CSR_ALIAS */
diff --git a/include/opcode/riscv.h b/include/opcode/riscv.h
index 048ab0a5d68..b769769b4ec 100644
--- a/include/opcode/riscv.h
+++ b/include/opcode/riscv.h
@@ -388,6 +388,9 @@ enum riscv_insn_class
INSN_CLASS_V,
INSN_CLASS_ZVEF,
INSN_CLASS_SVINVAL,
+ INSN_CLASS_ZICBOM,
+ INSN_CLASS_ZICBOP,
+ INSN_CLASS_ZICBOZ,
};
/* This structure holds information for a particular instruction. */
diff --git a/include/plugin-api.h b/include/plugin-api.h
index 4e12c0320d6..8aebe2ff267 100644
--- a/include/plugin-api.h
+++ b/include/plugin-api.h
@@ -487,40 +487,40 @@ enum ld_plugin_level
enum ld_plugin_tag
{
- LDPT_NULL = 0,
- LDPT_API_VERSION = 1,
- LDPT_GOLD_VERSION = 2,
- LDPT_LINKER_OUTPUT = 3,
- LDPT_OPTION = 4,
- LDPT_REGISTER_CLAIM_FILE_HOOK = 5,
- LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK = 6,
- LDPT_REGISTER_CLEANUP_HOOK = 7,
- LDPT_ADD_SYMBOLS = 8,
- LDPT_GET_SYMBOLS = 9,
- LDPT_ADD_INPUT_FILE = 10,
- LDPT_MESSAGE = 11,
- LDPT_GET_INPUT_FILE = 12,
- LDPT_RELEASE_INPUT_FILE = 13,
- LDPT_ADD_INPUT_LIBRARY = 14,
- LDPT_OUTPUT_NAME = 15,
- LDPT_SET_EXTRA_LIBRARY_PATH = 16,
- LDPT_GNU_LD_VERSION = 17,
- LDPT_GET_VIEW = 18,
- LDPT_GET_INPUT_SECTION_COUNT = 19,
- LDPT_GET_INPUT_SECTION_TYPE = 20,
- LDPT_GET_INPUT_SECTION_NAME = 21,
- LDPT_GET_INPUT_SECTION_CONTENTS = 22,
- LDPT_UPDATE_SECTION_ORDER = 23,
- LDPT_ALLOW_SECTION_ORDERING = 24,
- LDPT_GET_SYMBOLS_V2 = 25,
- LDPT_ALLOW_UNIQUE_SEGMENT_FOR_SECTIONS = 26,
- LDPT_UNIQUE_SEGMENT_FOR_SECTIONS = 27,
- LDPT_GET_SYMBOLS_V3 = 28,
- LDPT_GET_INPUT_SECTION_ALIGNMENT = 29,
- LDPT_GET_INPUT_SECTION_SIZE = 30,
- LDPT_REGISTER_NEW_INPUT_HOOK = 31,
- LDPT_GET_WRAP_SYMBOLS = 32,
- LDPT_ADD_SYMBOLS_V2 = 33
+ LDPT_NULL,
+ LDPT_API_VERSION,
+ LDPT_GOLD_VERSION,
+ LDPT_LINKER_OUTPUT,
+ LDPT_OPTION,
+ LDPT_REGISTER_CLAIM_FILE_HOOK,
+ LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK,
+ LDPT_REGISTER_CLEANUP_HOOK,
+ LDPT_ADD_SYMBOLS,
+ LDPT_GET_SYMBOLS,
+ LDPT_ADD_INPUT_FILE,
+ LDPT_MESSAGE,
+ LDPT_GET_INPUT_FILE,
+ LDPT_RELEASE_INPUT_FILE,
+ LDPT_ADD_INPUT_LIBRARY,
+ LDPT_OUTPUT_NAME,
+ LDPT_SET_EXTRA_LIBRARY_PATH,
+ LDPT_GNU_LD_VERSION,
+ LDPT_GET_VIEW,
+ LDPT_GET_INPUT_SECTION_COUNT,
+ LDPT_GET_INPUT_SECTION_TYPE,
+ LDPT_GET_INPUT_SECTION_NAME,
+ LDPT_GET_INPUT_SECTION_CONTENTS,
+ LDPT_UPDATE_SECTION_ORDER,
+ LDPT_ALLOW_SECTION_ORDERING,
+ LDPT_GET_SYMBOLS_V2,
+ LDPT_ALLOW_UNIQUE_SEGMENT_FOR_SECTIONS,
+ LDPT_UNIQUE_SEGMENT_FOR_SECTIONS,
+ LDPT_GET_SYMBOLS_V3,
+ LDPT_GET_INPUT_SECTION_ALIGNMENT,
+ LDPT_GET_INPUT_SECTION_SIZE,
+ LDPT_REGISTER_NEW_INPUT_HOOK,
+ LDPT_GET_WRAP_SYMBOLS,
+ LDPT_ADD_SYMBOLS_V2,
};
/* The plugin transfer vector. */
diff --git a/ld/ChangeLog b/ld/ChangeLog
index 441187db239..7b9fdc837ca 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,112 @@
+2022-05-03 Nick Clifton <nickc@redhat.com>
+
+ PR 29101
+ * libdep_plugin.c (get_libdeps): Check for overflow when computing
+ amount of memory to allocate.
+
+2022-04-27 Nick Clifton <nickc@redhat.com>
+
+ PR 29006
+ * pe-dll.c (make_head): Use asprintf to allocate and populate a
+ buffer containing the temporary name.
+ (make_tail, make_one, make_singleton_name_thunk): Likewise.
+ (make_import_fixup_mark, make_import_fixup_entry): Likewise.
+ (make_runtime_pseudo_reloc): Likewise.
+ (pe_create_runtime_relocator_reference): Likewise.
+
+2022-04-25 Nick Clifton <nickc@redhat.com>
+
+ PR 29072
+ * testsuite/ld-elf/pr29072.b.warn: Update to include the note
+ about the linker's behaviour being depreccated.
+
+2022-04-20 Clément Chigot <clement.chigot@atos.net>
+
+ * emultempl/aix.em (params): New variable.
+ (stub_file): New variable.
+ (xcoff_add_stub_section): New function.
+ (xcoff_layout_sections_again): New function
+ (hook_in_stub): New function.
+ (_after_allocation): Add stub creation.
+ (_create_output_section_statements): Allocate stub file and
+ pass params to backend.
+
+2022-04-20 Clément Chigot <clement.chigot@atos.net>
+
+ * emultempl/aix.em (_after_allocation): New function.
+
+2022-04-07 Mark Harmstone <mark@harmstone.com>
+
+ * testsuite/ld-pe/secidx1.s: New test source file.
+ * testsuite/ld-pe/secidx2.s: New test source file.
+ * testsuite/ld-pe/secidx.d: New test driver file.
+ * testsuite/ld-pe/secidx_64.d: New test driver file.
+ * testsuite/ld-pe/pe.exp: Add new tests.
+
+2022-03-01 Nick Clifton <nickc@redhat.com>
+
+ PR 21964
+ * testsuite/ld-elf/pr21964-1a.c: Fix array comparisons.
+ * testsuite/ld-elf/pr21964-1b.c: Likewise.
+ * testsuite/ld-elf/pr21964-1c.c: Likewise.
+ * testsuite/ld-elf/pr21964-2a.c: Likewise.
+ * testsuite/ld-elf/pr21964-2b.c: Likewise.
+ * testsuite/ld-elf/pr21964-3a.c: Likewise.
+
+2022-02-17 Roland McGrath <mcgrathr@google.com>
+
+ * ld.texi (Output Section Type): Fix typo in @code syntax.
+
+2022-02-17 Nick Clifton <nickc@redhat.com>
+
+ * po/sr.po: Updated Serbian translation.
+
+2022-02-16 Fangrui Song <maskray@google.com>
+ Nick Clifton <nickc@redhat.com>
+
+ PR ld/28841
+ * ld.texi: Document new output section type.
+ * ldlex.l: Add new token TYPE.
+ * ldgram.y: Handle TYPE=exp and READONLY (TYPE=exp).
+ * ldlang.h: Add type_section to list of section types.
+ * ldlang.c (lang_add_section): Handle type_section.
+ (map_input_to_output_sections): Handle type_section.
+ * testsuite/ld-scripts/output-section-types.t: Add tests.
+ * testsuite/ld-scripts/output-section-types.d: Update.
+
+2022-02-02 Nick Clifton <nickc@redhat.com>
+
+ * po/fr.po: Updated French translation.
+
+2022-01-24 Nick Clifton <nickc@redhat.com>
+
+ * po/bg.po: Updated Bulgarian translation.
+ * po/uk.po: Updated Ukranian translation.
+
+2022-01-22 Alexander von Gluck IV <kallisti5@unixzen.com>
+
+ * configure.tgt (arm-haiku): Fix typo.
+ * emulparams/armelf_haiku.su (MAXPAGESIZE): Use the default value.
+ (COMMONPAGESIZE): Likewise.
+
+2022-01-22 Nick Clifton <nickc@redhat.com>
+
+ * configure: Regenerate.
+ * po/ld.pot: Regenerate.
+
+2022-01-22 Nick Clifton <nickc@redhat.com>
+
+ * 2.38 release branch created.
+
+2022-01-21 Nick Clifton <nickc@redhat.com>
+
+ * po/sr.po: Updated Serbian translation.
+
+2022-01-17 Nick Clifton <nickc@redhat.com>
+
+ * Makefile.in: Regenerate.
+ * po/ld.pot: Regenerate.
+
2022-01-11 Martin Storsjö <martin@martin.st>
* pe-dll.c (make_head): Prefix the symbol name with the dll name.
diff --git a/ld/Makefile.am b/ld/Makefile.am
index b55a873d927..e53bef13bb8 100644
--- a/ld/Makefile.am
+++ b/ld/Makefile.am
@@ -454,10 +454,6 @@ ALL_64_EMULATION_SOURCES = \
eelf64rdos.c \
eelf64tilegx.c \
eelf64tilegx_be.c \
- eelf_k1om.c \
- eelf_k1om_fbsd.c \
- eelf_l1om.c \
- eelf_l1om_fbsd.c \
eelf_mipsel_haiku.c \
eelf_x86_64.c \
eelf_x86_64_cloudabi.c \
@@ -949,10 +945,6 @@ $(ALL_EMULATION_SOURCES) $(ALL_64_EMULATION_SOURCES): $(GEN_DEPENDS)
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64rdos.Pc@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64tilegx.Pc@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64tilegx_be.Pc@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf_k1om.Pc@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf_k1om_fbsd.Pc@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf_l1om.Pc@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf_l1om_fbsd.Pc@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf_mipsel_haiku.Pc@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf_x86_64.Pc@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf_x86_64_cloudabi.Pc@am__quote@
diff --git a/ld/Makefile.in b/ld/Makefile.in
index 61e93eeaf1e..811490d69e3 100644
--- a/ld/Makefile.in
+++ b/ld/Makefile.in
@@ -944,10 +944,6 @@ ALL_64_EMULATION_SOURCES = \
eelf64rdos.c \
eelf64tilegx.c \
eelf64tilegx_be.c \
- eelf_k1om.c \
- eelf_k1om_fbsd.c \
- eelf_l1om.c \
- eelf_l1om_fbsd.c \
eelf_mipsel_haiku.c \
eelf_x86_64.c \
eelf_x86_64_cloudabi.c \
@@ -1452,10 +1448,6 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf_i386_sol2.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf_i386_vxworks.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf_iamcu.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf_k1om.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf_k1om_fbsd.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf_l1om.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf_l1om_fbsd.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf_mipsel_haiku.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf_s390.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf_x86_64.Po@am__quote@
@@ -2616,10 +2608,6 @@ $(ALL_EMULATION_SOURCES) $(ALL_64_EMULATION_SOURCES): $(GEN_DEPENDS)
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64rdos.Pc@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64tilegx.Pc@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64tilegx_be.Pc@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf_k1om.Pc@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf_k1om_fbsd.Pc@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf_l1om.Pc@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf_l1om_fbsd.Pc@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf_mipsel_haiku.Pc@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf_x86_64.Pc@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf_x86_64_cloudabi.Pc@am__quote@
diff --git a/ld/NEWS b/ld/NEWS
index 5d3d80dbbba..514d1d9f207 100644
--- a/ld/NEWS
+++ b/ld/NEWS
@@ -1,5 +1,46 @@
-*- text -*-
+* The ELF linker will now generate a warning message if the stack is made
+ executable. By default this warning is not issued if the user has
+ specifically requested an executable stack via the "-z execstack"
+ command line option, but the warning can be forced via the new
+ "--warn-execstack" option. Alternatively all warnings about creating
+ an executable stack can be suppressed via the "--no-warn-execstack"
+ option.
+
+ In addition the ELF linker will also warn if it creates a memory resident
+ segment with all three of the Read, Write and eXecute permissions set, or
+ if it creates a thread local data segment with the eXecute permission set.
+ These warnings can be disabled via --no-warn-rwx-segments option and
+ re-enabled via the --warn-rwx-segments option.
+
+ New configure options can also control these new features:
+
+ --enable-warn-execstack=no
+ will disable the warnings about creating an executable stack.
+
+ --enable-warn-execstack=yes
+ will make --warn-execstack enabled by default.
+
+ --enable-warn-rwx-segments=no
+ will make --no-warn-rwx-segments enabled by default.
+
+ --enable-defaul-execstack=no
+ will stop the creation of an executable stack simply because an input file
+ is missing a .note.GNU-stack section, even on architectures where this
+ ehaviour is the default.
+
+* TYPE=<type> is now supported in an output section description to set the
+ section type value.
+
+* Remove (rudimentary) support for the x86-64 sub-architectures Intel L1OM and
+ Intel K1OM.
+
+Changes in 2.38:
+
+* Add -z pack-relative-relocs/-z no pack-relative-relocs to x86 ELF
+ linker to pack relative relocations in the DT_RELR section.
+
* Add support for the LoongArch architecture.
* Add -z indirect-extern-access/-z noindirect-extern-access to x86 ELF
diff --git a/ld/config.in b/ld/config.in
index 26d55a00d47..cc5b476f009 100644
--- a/ld/config.in
+++ b/ld/config.in
@@ -16,12 +16,24 @@
/* Define if you want compressed debug sections by default. */
#undef DEFAULT_FLAG_COMPRESS_DEBUG
+/* Define to 0 if you want to disable the generation of an executable stack
+ when a .note-GNU-stack section is missing. */
+#undef DEFAULT_LD_EXECSTACK
+
/* The default method for DT_TEXTREL check in ELF linker. */
#undef DEFAULT_LD_TEXTREL_CHECK
/* Define to 1 if DT_TEXTREL check is warning in ELF linker by default. */
#undef DEFAULT_LD_TEXTREL_CHECK_WARNING
+/* Define to 1 if you want to enable --warn-execstack in ELF linker by
+ default. */
+#undef DEFAULT_LD_WARN_EXECSTACK
+
+/* Define to 0 if you want to disable --warn-rwx-segments in ELF linker by
+ default. */
+#undef DEFAULT_LD_WARN_RWX_SEGMENTS
+
/* Define to 1 if you want to enable -z relro in ELF linker by default. */
#undef DEFAULT_LD_Z_RELRO
diff --git a/ld/configure b/ld/configure
index f5c329c1f12..b4b0ce14ed9 100755
--- a/ld/configure
+++ b/ld/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for ld 2.37.50.
+# Generated by GNU Autoconf 2.69 for ld 2.38.50.
#
#
# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
@@ -587,8 +587,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='ld'
PACKAGE_TARNAME='ld'
-PACKAGE_VERSION='2.37.50'
-PACKAGE_STRING='ld 2.37.50'
+PACKAGE_VERSION='2.38.50'
+PACKAGE_STRING='ld 2.38.50'
PACKAGE_BUGREPORT=''
PACKAGE_URL=''
@@ -838,6 +838,9 @@ enable_new_dtags
enable_relro
enable_textrel_check
enable_separate_code
+enable_warn_execstack
+enable_warn_rwx_segments
+enable_default_execstack
enable_error_handling_script
enable_default_hash_style
enable_initfini_array
@@ -1402,7 +1405,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 ld 2.37.50 to adapt to many kinds of systems.
+\`configure' configures ld 2.38.50 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1473,7 +1476,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of ld 2.37.50:";;
+ short | recursive ) echo "Configuration of ld 2.38.50:";;
esac
cat <<\_ACEOF
@@ -1510,6 +1513,13 @@ Optional Features:
--enable-textrel-check=[yes|no|warning|error]
enable DT_TEXTREL check in ELF linker
--enable-separate-code enable -z separate-code in ELF linker by default
+ --enable-warn-execstack enable warnings when creating an executable stack
+ --enable-warn-rwx-segments
+ enable warnings when creating segements with RWX
+ permissions
+ --enable-default-execstack
+ create an executable stack if an input file is
+ missing a .note.GNU-stack section
--enable-error-handling-script
enable/disable support for the
--error-handling-script option
@@ -1616,7 +1626,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-ld configure 2.37.50
+ld configure 2.38.50
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2331,7 +2341,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 ld $as_me 2.37.50, which was
+It was created by ld $as_me 2.38.50, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -3314,7 +3324,7 @@ fi
# Define the identity of the package.
PACKAGE='ld'
- VERSION='2.37.50'
+ VERSION='2.38.50'
cat >>confdefs.h <<_ACEOF
@@ -5745,25 +5755,31 @@ else
lt_nm_to_check="$lt_nm_to_check nm"
fi
fi
- for lt_tmp_nm in $lt_nm_to_check; do
+ for lt_tmp_nm in "$lt_nm_to_check"; do
lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
IFS="$lt_save_ifs"
test -z "$ac_dir" && ac_dir=.
- case "$lt_tmp_nm" in
+ # Strip out any user-provided options from the nm to test twice,
+ # the first time to test to see if nm (rather than its options) has
+ # an explicit path, the second time to yield a file which can be
+ # nm'ed itself.
+ tmp_nm_path="`$ECHO "$lt_tmp_nm" | sed 's, -.*$,,'`"
+ case "$tmp_nm_path" in
*/*|*\\*) tmp_nm="$lt_tmp_nm";;
*) tmp_nm="$ac_dir/$lt_tmp_nm";;
esac
- if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+ tmp_nm_to_nm="`$ECHO "$tmp_nm" | sed 's, -.*$,,'`"
+ if test -f "$tmp_nm_to_nm" || test -f "$tmp_nm_to_nm$ac_exeext" ; then
# Check to see if the nm accepts a BSD-compat flag.
# Adding the `sed 1q' prevents false positives on HP-UX, which says:
# nm: unknown option "B" ignored
- case `"$tmp_nm" -B "$tmp_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
+ case `"$tmp_nm" -B "$tmp_nm_to_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
*$tmp_nm*) lt_cv_path_NM="$tmp_nm -B"
break
;;
*)
- case `"$tmp_nm" -p "$tmp_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
+ case `"$tmp_nm" -p "$tmp_nm_to_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
*$tmp_nm*)
lt_cv_path_NM="$tmp_nm -p"
break
@@ -11454,7 +11470,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11457 "configure"
+#line 11473 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -11560,7 +11576,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11563 "configure"
+#line 11579 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -15421,6 +15437,38 @@ esac
fi
+
+ac_default_ld_warn_execstack=unset
+# Check whether --enable-warn-execstack was given.
+if test "${enable_warn_execstack+set}" = set; then :
+ enableval=$enable_warn_execstack; case "${enableval}" in
+ yes) ac_default_ld_warn_execstack=1 ;;
+ no) ac_default_ld_warn_execstack=-1 ;;
+esac
+fi
+
+
+ac_default_ld_warn_rwx_segments=unset
+# Check whether --enable-warn-rwx-segments was given.
+if test "${enable_warn_rwx_segments+set}" = set; then :
+ enableval=$enable_warn_rwx_segments; case "${enableval}" in
+ yes) ac_default_ld_warn_rwx_segments=1 ;;
+ no) ac_default_ld_warn_rwx_segments=0 ;;
+esac
+fi
+
+
+ac_default_ld_default_execstack=unset
+# Check whether --enable-default-execstack was given.
+if test "${enable_default_execstack+set}" = set; then :
+ enableval=$enable_default_execstack; case "${enableval}" in
+ yes) ac_default_ld_default_execstack=1 ;;
+ no) ac_default_ld_default_execstack=0 ;;
+esac
+fi
+
+
+
# Decide if --error-handling-script should be supported.
ac_support_error_handling_script=unset
# Check whether --enable-error-handling-script was given.
@@ -16948,6 +16996,35 @@ cat >>confdefs.h <<_ACEOF
_ACEOF
+
+if test "${ac_default_ld_warn_execstack}" = unset; then
+ ac_default_ld_warn_execstack=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define DEFAULT_LD_WARN_EXECSTACK $ac_default_ld_warn_execstack
+_ACEOF
+
+
+if test "${ac_default_ld_warn_rwx_segments}" = unset; then
+ ac_default_ld_warn_rwx_segments=1
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define DEFAULT_LD_WARN_RWX_SEGMENTS $ac_default_ld_warn_rwx_segments
+_ACEOF
+
+
+if test "${ac_default_ld_default_execstack}" = unset; then
+ ac_default_ld_default_execstack=1
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define DEFAULT_LD_EXECSTACK $ac_default_ld_default_execstack
+_ACEOF
+
+
+
if test "${ac_support_error_handling_script}" = unset; then
ac_support_error_handling_script=1
fi
@@ -17591,7 +17668,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 ld $as_me 2.37.50, which was
+This file was extended by ld $as_me 2.38.50, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -17657,7 +17734,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-ld config.status 2.37.50
+ld config.status 2.38.50
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
diff --git a/ld/configure.ac b/ld/configure.ac
index 7f4cff079b7..0b29e810dde 100644
--- a/ld/configure.ac
+++ b/ld/configure.ac
@@ -203,6 +203,35 @@ AC_ARG_ENABLE(separate-code,
no) ac_default_ld_z_separate_code=0 ;;
esac])
+
+ac_default_ld_warn_execstack=unset
+AC_ARG_ENABLE(warn-execstack,
+ AS_HELP_STRING([--enable-warn-execstack],
+ [enable warnings when creating an executable stack]),
+[case "${enableval}" in
+ yes) ac_default_ld_warn_execstack=1 ;;
+ no) ac_default_ld_warn_execstack=-1 ;;
+esac])
+
+ac_default_ld_warn_rwx_segments=unset
+AC_ARG_ENABLE(warn-rwx-segments,
+ AS_HELP_STRING([--enable-warn-rwx-segments],
+ [enable warnings when creating segements with RWX permissions]),
+[case "${enableval}" in
+ yes) ac_default_ld_warn_rwx_segments=1 ;;
+ no) ac_default_ld_warn_rwx_segments=0 ;;
+esac])
+
+ac_default_ld_default_execstack=unset
+AC_ARG_ENABLE(default-execstack,
+ AS_HELP_STRING([--enable-default-execstack],
+ [create an executable stack if an input file is missing a .note.GNU-stack section]),
+[case "${enableval}" in
+ yes) ac_default_ld_default_execstack=1 ;;
+ no) ac_default_ld_default_execstack=0 ;;
+esac])
+
+
# Decide if --error-handling-script should be supported.
ac_support_error_handling_script=unset
AC_ARG_ENABLE(error-handling-script,
@@ -501,6 +530,29 @@ AC_DEFINE_UNQUOTED(DEFAULT_LD_Z_SEPARATE_CODE,
$ac_default_ld_z_separate_code,
[Define to 1 if you want to enable -z separate-code in ELF linker by default.])
+
+if test "${ac_default_ld_warn_execstack}" = unset; then
+ ac_default_ld_warn_execstack=0
+fi
+AC_DEFINE_UNQUOTED(DEFAULT_LD_WARN_EXECSTACK,
+ $ac_default_ld_warn_execstack,
+ [Define to 1 if you want to enable --warn-execstack in ELF linker by default.])
+
+if test "${ac_default_ld_warn_rwx_segments}" = unset; then
+ ac_default_ld_warn_rwx_segments=1
+fi
+AC_DEFINE_UNQUOTED(DEFAULT_LD_WARN_RWX_SEGMENTS,
+ $ac_default_ld_warn_rwx_segments,
+ [Define to 0 if you want to disable --warn-rwx-segments in ELF linker by default.])
+
+if test "${ac_default_ld_default_execstack}" = unset; then
+ ac_default_ld_default_execstack=1
+fi
+AC_DEFINE_UNQUOTED(DEFAULT_LD_EXECSTACK,
+ $ac_default_ld_default_execstack,
+ [Define to 0 if you want to disable the generation of an executable stack when a .note-GNU-stack section is missing.])
+
+
if test "${ac_support_error_handling_script}" = unset; then
ac_support_error_handling_script=1
fi
diff --git a/ld/configure.tgt b/ld/configure.tgt
index 2a4650c3409..89f4a99c66e 100644
--- a/ld/configure.tgt
+++ b/ld/configure.tgt
@@ -202,7 +202,7 @@ arm*-*-conix*) targ_emul=armelf
arm*-*-fuchsia*) targ_emul=armelf_fuchsia
targ_extra_emuls="armelfb_fuchsia armelf armelfb"
;;
-arm*-*-haiku*) arg_emul=armelf_haiku
+arm*-*-haiku*) targ_emul=armelf_haiku
targ_extra_emuls=armelf
;;
avr-*-*) targ_emul=avr2
@@ -326,7 +326,7 @@ i[3-7]86-*-bsdi*) targ_emul=i386bsd
;;
i[3-7]86-*-linux-*) targ_emul=elf_i386
targ_extra_emuls="elf_iamcu"
- targ64_extra_emuls="elf_x86_64 elf32_x86_64 elf_l1om elf_k1om"
+ targ64_extra_emuls="elf_x86_64 elf32_x86_64"
targ64_extra_libpath="elf_x86_64 elf32_x86_64"
;;
i[3-7]86-*-redox*) targ_emul=elf_i386
@@ -336,7 +336,7 @@ i[3-7]86-*-sysv[45]*) targ_emul=elf_i386
targ_extra_emuls=elf_iamcu
;;
i[3-7]86-*-solaris2*) targ_emul=elf_i386_sol2
- targ_extra_emuls="elf_i386_ldso elf_i386 elf_iamcu elf_x86_64_sol2 elf_x86_64 elf_l1om elf_k1om"
+ targ_extra_emuls="elf_i386_ldso elf_i386 elf_iamcu elf_x86_64_sol2 elf_x86_64"
targ_extra_libpath=$targ_extra_emuls
;;
i[3-7]86-*-unixware) targ_emul=elf_i386
@@ -957,27 +957,27 @@ x86_64-*-haiku*) targ_emul=elf_x86_64_haiku
targ_extra_emuls="elf_x86_64 elf_i386_haiku"
;;
x86_64-*-linux-gnux32) targ_emul=elf32_x86_64
- targ_extra_emuls="elf_x86_64 elf_i386 elf_iamcu elf_l1om elf_k1om"
- targ_extra_libpath="elf_i386 elf_iamcu elf_x86_64 elf_l1om elf_k1om"
+ targ_extra_emuls="elf_x86_64 elf_i386 elf_iamcu"
+ targ_extra_libpath="elf_i386 elf_iamcu elf_x86_64"
tdir_elf_iamcu=`echo ${targ_alias} | sed -e 's/x86_64/i386/' -e 's/-linux-gnux32/-linux-gnu/'`
tdir_elf_i386=`echo ${targ_alias} | sed -e 's/x86_64/i386/' -e 's/-linux-gnux32/-linux-gnu/'`
;;
x86_64-*-linux-*) targ_emul=elf_x86_64
- targ_extra_emuls="elf32_x86_64 elf_i386 elf_iamcu elf_l1om elf_k1om"
- targ_extra_libpath="elf_i386 elf32_x86_64 elf_l1om elf_k1om"
+ targ_extra_emuls="elf32_x86_64 elf_i386 elf_iamcu"
+ targ_extra_libpath="elf_i386 elf32_x86_64"
tdir_elf_i386=`echo ${targ_alias} | sed -e 's/x86_64/i386/'`
;;
x86_64-*-redox*) targ_emul=elf_x86_64
targ_extra_emuls=elf_i386
;;
x86_64-*-solaris2*) targ_emul=elf_x86_64_sol2
- targ_extra_emuls="elf_x86_64 elf_i386_sol2 elf_i386_ldso elf_i386 elf_iamcu elf_l1om elf_k1om"
+ targ_extra_emuls="elf_x86_64 elf_i386_sol2 elf_i386_ldso elf_i386 elf_iamcu"
targ_extra_libpath=$targ_extra_emuls
tdir_elf_i386=`echo ${targ_alias} | sed -e 's/x86_64/i386/'`
;;
x86_64-*-netbsd* | x86_64-*-openbsd*)
targ_emul=elf_x86_64
- targ_extra_emuls="elf_i386 elf_iamcu elf_l1om elf_k1om"
+ targ_extra_emuls="elf_i386 elf_iamcu"
tdir_elf_iamcu=`echo ${targ_alias} | \
sed -e 's/x86_64/i386/' -e 's/aout//'`
tdir_elf_i386=`echo ${targ_alias} | \
@@ -985,16 +985,16 @@ x86_64-*-netbsd* | x86_64-*-openbsd*)
;;
x86_64-*-elf* | x86_64-*-rtems* | x86_64-*-fuchsia* | x86_64-*-genode*)
targ_emul=elf_x86_64
- targ_extra_emuls="elf_i386 elf_iamcu elf32_x86_64 elf_l1om elf_k1om"
- targ_extra_libpath="elf_i386 elf_iamcu elf32_x86_64 elf_l1om elf_k1om"
+ targ_extra_emuls="elf_i386 elf_iamcu elf32_x86_64"
+ targ_extra_libpath="elf_i386 elf_iamcu elf32_x86_64"
tdir_elf_i386=`echo ${targ_alias} | sed -e 's/x86_64/i386/'`
;;
x86_64-*-dragonfly*) targ_emul=elf_x86_64
- targ_extra_emuls="elf_i386 elf_iamcu elf_l1om elf_k1om"
+ targ_extra_emuls="elf_i386 elf_iamcu"
;;
x86_64-*-freebsd* | x86_64-*-kfreebsd*-gnu)
targ_emul=elf_x86_64_fbsd
- targ_extra_emuls="elf_i386_fbsd elf_x86_64 elf_i386 elf_iamcu elf_l1om elf_l1om_fbsd elf_k1om elf_k1om_fbsd"
+ targ_extra_emuls="elf_i386_fbsd elf_x86_64 elf_i386 elf_iamcu"
targ_extra_libpath="elf_i386_fbsd"
tdir_elf_i386_fbsd=`echo ${targ_alias} \
| sed -e 's/x86_64/i386/'`
diff --git a/ld/emulparams/armelf_haiku.sh b/ld/emulparams/armelf_haiku.sh
index c42060f6b0c..413c06c9d15 100644
--- a/ld/emulparams/armelf_haiku.sh
+++ b/ld/emulparams/armelf_haiku.sh
@@ -3,8 +3,8 @@ SCRIPT_NAME=elf
OUTPUT_FORMAT="elf32-littlearm"
BIG_OUTPUT_FORMAT="elf32-bigarm"
LITTLE_OUTPUT_FORMAT="elf32-littlearm"
-MAXPAGESIZE=0x8000
-COMMONPAGESIZE=0x1000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
TEMPLATE_NAME=elf
EXTRA_EM_FILE=armelf
GENERATE_SHLIB_SCRIPT=yes
diff --git a/ld/emulparams/dt-relr.sh b/ld/emulparams/dt-relr.sh
new file mode 100644
index 00000000000..b2b403ce236
--- /dev/null
+++ b/ld/emulparams/dt-relr.sh
@@ -0,0 +1,18 @@
+HAVE_DT_RELR=yes
+PARSE_AND_LIST_OPTIONS_PACK_RELATIVE_RELOCS='
+ fprintf (file, _("\
+ -z pack-relative-relocs Pack relative relocations\n"));
+ fprintf (file, _("\
+ -z nopack-relative-relocs Do not pack relative relocations (default)\n"));
+'
+
+PARSE_AND_LIST_ARGS_CASE_Z_PACK_RELATIVE_RELOCS='
+ else if (strcmp (optarg, "pack-relative-relocs") == 0)
+ link_info.enable_dt_relr = true;
+ else if (strcmp (optarg, "nopack-relative-relocs") == 0)
+ link_info.enable_dt_relr = false;
+'
+
+
+PARSE_AND_LIST_OPTIONS="$PARSE_AND_LIST_OPTIONS $PARSE_AND_LIST_OPTIONS_PACK_RELATIVE_RELOCS"
+PARSE_AND_LIST_ARGS_CASE_Z="$PARSE_AND_LIST_ARGS_CASE_Z $PARSE_AND_LIST_ARGS_CASE_Z_PACK_RELATIVE_RELOCS"
diff --git a/ld/emulparams/elf32_x86_64.sh b/ld/emulparams/elf32_x86_64.sh
index ac0a7aa6dcf..4bff41287c1 100644
--- a/ld/emulparams/elf32_x86_64.sh
+++ b/ld/emulparams/elf32_x86_64.sh
@@ -7,6 +7,7 @@ source_sh ${srcdir}/emulparams/cet.sh
source_sh ${srcdir}/emulparams/x86-report-relative.sh
source_sh ${srcdir}/emulparams/x86-64-level.sh
source_sh ${srcdir}/emulparams/static.sh
+source_sh ${srcdir}/emulparams/dt-relr.sh
SCRIPT_NAME=elf
ELFSIZE=32
OUTPUT_FORMAT="elf32-x86-64"
diff --git a/ld/emulparams/elf64ppc.sh b/ld/emulparams/elf64ppc.sh
index 15221b82220..a18393b7202 100644
--- a/ld/emulparams/elf64ppc.sh
+++ b/ld/emulparams/elf64ppc.sh
@@ -1,5 +1,6 @@
source_sh ${srcdir}/emulparams/elf32ppccommon.sh
source_sh ${srcdir}/emulparams/plt_unwind.sh
+source_sh ${srcdir}/emulparams/dt-relr.sh
EXTRA_EM_FILE=ppc64elf
ELFSIZE=64
OUTPUT_FORMAT="elf64-powerpc"
diff --git a/ld/emulparams/elf_i386.sh b/ld/emulparams/elf_i386.sh
index 98532e5edbc..ae17bb4b3f7 100644
--- a/ld/emulparams/elf_i386.sh
+++ b/ld/emulparams/elf_i386.sh
@@ -6,6 +6,7 @@ source_sh ${srcdir}/emulparams/cet.sh
source_sh ${srcdir}/emulparams/x86-report-relative.sh
source_sh ${srcdir}/emulparams/x86-64-level.sh
source_sh ${srcdir}/emulparams/static.sh
+source_sh ${srcdir}/emulparams/dt-relr.sh
SCRIPT_NAME=elf
OUTPUT_FORMAT="elf32-i386"
NO_RELA_RELOCS=yes
diff --git a/ld/emulparams/elf_k1om.sh b/ld/emulparams/elf_k1om.sh
deleted file mode 100644
index b27f5ea861a..00000000000
--- a/ld/emulparams/elf_k1om.sh
+++ /dev/null
@@ -1,39 +0,0 @@
-source_sh ${srcdir}/emulparams/plt_unwind.sh
-source_sh ${srcdir}/emulparams/extern_protected_data.sh
-source_sh ${srcdir}/emulparams/dynamic_undefined_weak.sh
-source_sh ${srcdir}/emulparams/call_nop.sh
-SCRIPT_NAME=elf
-ELFSIZE=64
-OUTPUT_FORMAT="elf64-k1om"
-NO_REL_RELOCS=yes
-TEXT_START_ADDR=0x400000
-MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
-COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
-ARCH="k1om"
-MACHINE=
-TEMPLATE_NAME=elf
-EXTRA_EM_FILE="elf-x86"
-GENERATE_SHLIB_SCRIPT=yes
-GENERATE_PIE_SCRIPT=yes
-NO_SMALL_DATA=yes
-LARGE_SECTIONS=yes
-LARGE_BSS_AFTER_BSS=
-SEPARATE_GOTPLT="SIZEOF (.got.plt) >= 24 ? 24 : 0"
-IREL_IN_PLT=
-
-if [ "x${host}" = "x${target}" ]; then
- case " $EMULATION_LIBPATH " in
- *" ${EMULATION_NAME} "*)
- NATIVE=yes
- esac
-fi
-
-# Linux modifies the default library search path to first include
-# a 64-bit specific directory.
-case "$target" in
- *k1om*-linux*)
- case "$EMULATION_NAME" in
- *k1om*) LIBPATH_SUFFIX=64 ;;
- esac
- ;;
-esac
diff --git a/ld/emulparams/elf_k1om_fbsd.sh b/ld/emulparams/elf_k1om_fbsd.sh
deleted file mode 100644
index 1ffe059f4f2..00000000000
--- a/ld/emulparams/elf_k1om_fbsd.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-source_sh ${srcdir}/emulparams/elf_k1om.sh
-source_sh ${srcdir}/emulparams/elf_fbsd.sh
-OUTPUT_FORMAT="elf64-k1om-freebsd"
diff --git a/ld/emulparams/elf_l1om.sh b/ld/emulparams/elf_l1om.sh
deleted file mode 100644
index 70d76829d7b..00000000000
--- a/ld/emulparams/elf_l1om.sh
+++ /dev/null
@@ -1,39 +0,0 @@
-source_sh ${srcdir}/emulparams/plt_unwind.sh
-source_sh ${srcdir}/emulparams/extern_protected_data.sh
-source_sh ${srcdir}/emulparams/dynamic_undefined_weak.sh
-source_sh ${srcdir}/emulparams/call_nop.sh
-SCRIPT_NAME=elf
-ELFSIZE=64
-OUTPUT_FORMAT="elf64-l1om"
-NO_REL_RELOCS=yes
-TEXT_START_ADDR=0x400000
-MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
-COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
-ARCH="l1om"
-MACHINE=
-TEMPLATE_NAME=elf
-EXTRA_EM_FILE="elf-x86"
-GENERATE_SHLIB_SCRIPT=yes
-GENERATE_PIE_SCRIPT=yes
-NO_SMALL_DATA=yes
-LARGE_SECTIONS=yes
-LARGE_BSS_AFTER_BSS=
-SEPARATE_GOTPLT="SIZEOF (.got.plt) >= 24 ? 24 : 0"
-IREL_IN_PLT=
-
-if [ "x${host}" = "x${target}" ]; then
- case " $EMULATION_LIBPATH " in
- *" ${EMULATION_NAME} "*)
- NATIVE=yes
- esac
-fi
-
-# Linux modifies the default library search path to first include
-# a 64-bit specific directory.
-case "$target" in
- *l1om*-linux*)
- case "$EMULATION_NAME" in
- *l1om*) LIBPATH_SUFFIX=64 ;;
- esac
- ;;
-esac
diff --git a/ld/emulparams/elf_l1om_fbsd.sh b/ld/emulparams/elf_l1om_fbsd.sh
deleted file mode 100644
index 0d52b60722a..00000000000
--- a/ld/emulparams/elf_l1om_fbsd.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-source_sh ${srcdir}/emulparams/elf_l1om.sh
-source_sh ${srcdir}/emulparams/elf_fbsd.sh
-OUTPUT_FORMAT="elf64-l1om-freebsd"
diff --git a/ld/emulparams/elf_x86_64.sh b/ld/emulparams/elf_x86_64.sh
index 48d0974711b..5f2743ed409 100644
--- a/ld/emulparams/elf_x86_64.sh
+++ b/ld/emulparams/elf_x86_64.sh
@@ -8,6 +8,7 @@ source_sh ${srcdir}/emulparams/x86-report-relative.sh
source_sh ${srcdir}/emulparams/x86-64-level.sh
source_sh ${srcdir}/emulparams/x86-64-lam.sh
source_sh ${srcdir}/emulparams/static.sh
+source_sh ${srcdir}/emulparams/dt-relr.sh
SCRIPT_NAME=elf
ELFSIZE=64
OUTPUT_FORMAT="elf64-x86-64"
diff --git a/ld/emultempl/aix.em b/ld/emultempl/aix.em
index b82305dc09e..355e2a4ffff 100644
--- a/ld/emultempl/aix.em
+++ b/ld/emultempl/aix.em
@@ -63,6 +63,15 @@ static void gld${EMULATION_NAME}_free (void *);
static void gld${EMULATION_NAME}_find_relocs (lang_statement_union_type *);
static void gld${EMULATION_NAME}_find_exp_assignment (etree_type *);
+static asection *xcoff_add_stub_section (const char *, asection *);
+static void xcoff_layout_sections_again (void);
+
+static struct bfd_xcoff_link_params params = {
+ NULL,
+ &xcoff_add_stub_section,
+ &xcoff_layout_sections_again
+};
+
/* The file alignment required for each section. */
static unsigned long file_align;
@@ -138,6 +147,9 @@ static int rtld;
/* Explicit command line library path, -blibpath */
static char *command_line_blibpath = NULL;
+/* Fake input file for stubs. */
+static lang_input_statement_type *stub_file;
+
/* This routine is called before anything else is done. */
static void
@@ -154,6 +166,7 @@ gld${EMULATION_NAME}_before_parse (void)
link_info.init_function = NULL;
link_info.fini_function = NULL;
+
}
/* Handle AIX specific options. */
@@ -1009,6 +1022,159 @@ gld${EMULATION_NAME}_before_allocation (void)
before_allocation_default ();
}
+struct hook_stub_info
+{
+ lang_statement_list_type add;
+ asection *input_section;
+};
+
+/* Traverse the linker tree to find the spot where the stub goes. */
+
+static bool
+hook_in_stub (struct hook_stub_info *info, lang_statement_union_type **lp)
+{
+ lang_statement_union_type *l;
+ bool ret;
+
+ for (; (l = *lp) != NULL; lp = &l->header.next)
+ {
+ switch (l->header.type)
+ {
+ case lang_constructors_statement_enum:
+ ret = hook_in_stub (info, &constructor_list.head);
+ if (ret)
+ return ret;
+ break;
+
+ case lang_output_section_statement_enum:
+ ret = hook_in_stub (info,
+ &l->output_section_statement.children.head);
+ if (ret)
+ return ret;
+ break;
+
+ case lang_wild_statement_enum:
+ ret = hook_in_stub (info, &l->wild_statement.children.head);
+ if (ret)
+ return ret;
+ break;
+
+ case lang_group_statement_enum:
+ ret = hook_in_stub (info, &l->group_statement.children.head);
+ if (ret)
+ return ret;
+ break;
+
+ case lang_input_section_enum:
+ if (l->input_section.section == info->input_section)
+ {
+ /* We've found our section. Insert the stub immediately
+ after its associated input section. */
+ *(info->add.tail) = l->header.next;
+ l->header.next = info->add.head;
+ return true;
+ }
+ break;
+
+ case lang_data_statement_enum:
+ case lang_reloc_statement_enum:
+ case lang_object_symbols_statement_enum:
+ case lang_output_statement_enum:
+ case lang_target_statement_enum:
+ case lang_input_statement_enum:
+ case lang_assignment_statement_enum:
+ case lang_padding_statement_enum:
+ case lang_address_statement_enum:
+ case lang_fill_statement_enum:
+ break;
+
+ default:
+ FAIL ();
+ break;
+ }
+ }
+ return false;
+}
+
+/* Call-back for bfd_xcoff_link_relocations.
+ Create a new stub section, and arrange for it to be linked
+ immediately before INPUT_SECTION. */
+
+static asection *
+xcoff_add_stub_section (const char *stub_sec_name, asection *input_section)
+{
+ asection *stub_sec;
+ flagword flags;
+ asection *output_section;
+ lang_output_section_statement_type *os;
+ struct hook_stub_info info;
+
+ flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_CODE
+ | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_KEEP);
+ stub_sec = bfd_make_section_anyway_with_flags (stub_file->the_bfd,
+ stub_sec_name, flags);
+ if (stub_sec == NULL)
+ goto err_ret;
+
+ output_section = input_section->output_section;
+ os = lang_output_section_get (output_section);
+
+ info.input_section = input_section;
+ lang_list_init (&info.add);
+ lang_add_section (&info.add, stub_sec, NULL, NULL, os);
+
+ if (info.add.head == NULL)
+ goto err_ret;
+
+ if (hook_in_stub (&info, &os->children.head))
+ return stub_sec;
+
+ err_ret:
+ einfo (_("%X%P: can not make stub section: %E\n"));
+ return NULL;
+}
+
+/* Another call-back for bfd_xcoff_link_relocations. */
+
+static void
+xcoff_layout_sections_again (void)
+{
+ /* If we have changed sizes of the stub sections, then we need
+ to recalculate all the section offsets. This may mean we need to
+ add even more stubs. */
+ lang_relax_sections (true);
+}
+
+/* Call the back-end to verify relocations. */
+
+static void
+gld${EMULATION_NAME}_after_allocation (void)
+{
+
+ /* If generating a relocatable output file, then we don't have any
+ stubs. */
+ if (stub_file != NULL && !bfd_link_relocatable (&link_info))
+ {
+ /* Call into the BFD backend to do the real work. */
+ if (!bfd_xcoff_size_stubs (&link_info))
+ einfo (_("%X%P: can not size stub sections: %E\n"));
+ }
+
+ /* Now that everything is in place, finalize the dynamic sections. */
+ if (!bfd_xcoff_build_dynamic_sections (link_info.output_bfd, &link_info))
+ einfo (_("%F%P: failed to layout dynamic sections: %E\n"));
+
+ if (!bfd_link_relocatable (&link_info))
+ {
+ /* Now build the linker stubs. */
+ if (stub_file != NULL && stub_file->the_bfd->sections != NULL)
+ {
+ if (! bfd_xcoff_build_stubs (&link_info))
+ einfo (_("%X%P: can not build stubs: %E\n"));
+ }
+ }
+}
+
static char *
gld${EMULATION_NAME}_choose_target (int argc, char **argv)
{
@@ -1495,11 +1661,35 @@ fragment <<EOF
static void
gld${EMULATION_NAME}_create_output_section_statements (void)
{
+ if ((bfd_get_flavour (link_info.output_bfd) != bfd_target_xcoff_flavour))
+ return;
+
+ /* Stub file */
+ stub_file = lang_add_input_file ("linker stubs",
+ lang_input_file_is_fake_enum,
+ NULL);
+ stub_file->the_bfd = bfd_create ("linker stubs", link_info.output_bfd);
+ if (stub_file->the_bfd == NULL
+ || !bfd_set_arch_mach (stub_file->the_bfd,
+ bfd_get_arch (link_info.output_bfd),
+ bfd_get_mach (link_info.output_bfd)))
+ {
+ einfo (_("%F%P: can not create stub BFD: %E\n"));
+ return;
+ }
+
+ stub_file->the_bfd->flags |= BFD_LINKER_CREATED;
+ ldlang_add_file (stub_file);
+ params.stub_bfd = stub_file->the_bfd;
+
+ /* Pass linker params to the back-end. */
+ if (!bfd_xcoff_link_init (&link_info, &params))
+ einfo (_("%F%P: can not init BFD: %E\n"));
+
/* __rtinit */
- if ((bfd_get_flavour (link_info.output_bfd) == bfd_target_xcoff_flavour)
- && (link_info.init_function != NULL
- || link_info.fini_function != NULL
- || rtld))
+ if (link_info.init_function != NULL
+ || link_info.fini_function != NULL
+ || rtld)
{
initfini_file = lang_add_input_file ("initfini",
lang_input_file_is_file_enum,
@@ -1601,39 +1791,19 @@ gld${EMULATION_NAME}_print_symbol (struct bfd_link_hash_entry *hash_entry,
return true;
}
-
-struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation = {
- gld${EMULATION_NAME}_before_parse,
- syslib_default,
- hll_default,
- after_parse_default,
- gld${EMULATION_NAME}_after_open,
- after_check_relocs_default,
- before_place_orphans_default,
- after_allocation_default,
- gld${EMULATION_NAME}_set_output_arch,
- gld${EMULATION_NAME}_choose_target,
- gld${EMULATION_NAME}_before_allocation,
- gld${EMULATION_NAME}_get_script,
- "${EMULATION_NAME}",
- "${OUTPUT_FORMAT}",
- finish_default,
- gld${EMULATION_NAME}_create_output_section_statements,
- gld${EMULATION_NAME}_open_dynamic_archive,
- 0, /* place_orphan */
- 0, /* set_symbols */
- gld${EMULATION_NAME}_parse_args,
- gld${EMULATION_NAME}_add_options,
- gld${EMULATION_NAME}_handle_option,
- gld${EMULATION_NAME}_unrecognized_file,
- NULL, /* list_options */
- NULL, /* recognized_file */
- NULL, /* find potential_libraries */
- NULL, /* new_vers_pattern */
- NULL, /* extra_map_file_text */
- ${LDEMUL_EMIT_CTF_EARLY-NULL},
- ${LDEMUL_ACQUIRE_STRINGS_FOR_CTF-NULL},
- ${LDEMUL_NEW_DYNSYM_FOR_CTF-NULL},
- gld${EMULATION_NAME}_print_symbol
-};
EOF
+
+LDEMUL_AFTER_OPEN=gld${EMULATION_NAME}_after_open
+LDEMUL_SET_OUTPUT_ARCH=gld${EMULATION_NAME}_set_output_arch
+LDEMUL_CHOOSE_TARGET=gld${EMULATION_NAME}_choose_target
+LDEMUL_BEFORE_ALLOCATION=gld${EMULATION_NAME}_before_allocation
+LDEMUL_AFTER_ALLOCATION=gld${EMULATION_NAME}_after_allocation
+LDEMUL_CREATE_OUTPUT_SECTION_STATEMENTS=gld${EMULATION_NAME}_create_output_section_statements
+LDEMUL_OPEN_DYNAMIC_ARCHIVE=gld${EMULATION_NAME}_open_dynamic_archive
+LDEMUL_PARSE_ARGS=gld${EMULATION_NAME}_parse_args
+LDEMUL_ADD_OPTIONS=gld${EMULATION_NAME}_add_options
+LDEMUL_HANDLE_OPTION=gld${EMULATION_NAME}_handle_option
+LDEMUL_UNRECOGNIZED_FILE=gld${EMULATION_NAME}_unrecognized_file
+LDEMUL_PRINT_SYMBOL=gld${EMULATION_NAME}_print_symbol
+
+source_em ${srcdir}/emultempl/emulation.em
diff --git a/ld/emultempl/armcoff.em b/ld/emultempl/armcoff.em
deleted file mode 100644
index b82855ae04f..00000000000
--- a/ld/emultempl/armcoff.em
+++ /dev/null
@@ -1,293 +0,0 @@
-# This shell script emits a C file. -*- C -*-
-# It does some substitutions.
-fragment <<EOF
-/* This file is is generated by a shell script. DO NOT EDIT! */
-
-/* emulate the original gld for the given ${EMULATION_NAME}
- Copyright (C) 1991-2022 Free Software Foundation, Inc.
- Written by Steve Chamberlain steve@cygnus.com
-
- This file is part of the GNU Binutils.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#define TARGET_IS_${EMULATION_NAME}
-
-#include "sysdep.h"
-#include "bfd.h"
-#include "bfdlink.h"
-#include "ctf-api.h"
-#include "getopt.h"
-
-#include "ld.h"
-#include "ldmain.h"
-#include "ldmisc.h"
-
-#include "ldexp.h"
-#include "ldlang.h"
-#include "ldfile.h"
-#include "ldemul.h"
-
-/* If TRUE, then interworking stubs which support calls to old,
- non-interworking aware ARM code should be generated. */
-
-static int support_old_code = 0;
-static char * thumb_entry_symbol = NULL;
-
-#define OPTION_SUPPORT_OLD_CODE 300
-#define OPTION_THUMB_ENTRY 301
-
-static void
-gld${EMULATION_NAME}_add_options
- (int ns ATTRIBUTE_UNUSED, char **shortopts ATTRIBUTE_UNUSED, int nl,
- struct option **longopts, int nrl ATTRIBUTE_UNUSED,
- struct option **really_longopts ATTRIBUTE_UNUSED)
-{
- static const struct option xtra_long[] = {
- {"support-old-code", no_argument, NULL, OPTION_SUPPORT_OLD_CODE},
- {"thumb-entry", required_argument, NULL, OPTION_THUMB_ENTRY},
- {NULL, no_argument, NULL, 0}
- };
-
- *longopts = xrealloc (*longopts,
- nl * sizeof (struct option) + sizeof (xtra_long));
- memcpy (*longopts + nl, &xtra_long, sizeof (xtra_long));
-}
-
-static void
-gld${EMULATION_NAME}_list_options (FILE *file)
-{
- fprintf (file, _(" --support-old-code Support interworking with old code\n"));
- fprintf (file, _(" --thumb-entry=<sym> Set the entry point to be Thumb symbol <sym>\n"));
-}
-
-static bool
-gld${EMULATION_NAME}_handle_option (int optc)
-{
- switch (optc)
- {
- default:
- return false;
-
- case OPTION_SUPPORT_OLD_CODE:
- support_old_code = 1;
- break;
-
- case OPTION_THUMB_ENTRY:
- thumb_entry_symbol = optarg;
- break;
- }
-
- return true;
-}
-
-static void
-gld${EMULATION_NAME}_before_parse (void)
-{
-#ifndef TARGET_ /* I.e., if not generic. */
- ldfile_set_output_arch ("`echo ${ARCH}`", bfd_arch_unknown);
-#endif /* not TARGET_ */
-}
-
-/* This is called after the sections have been attached to output
- sections, but before any sizes or addresses have been set. */
-
-static void
-gld${EMULATION_NAME}_before_allocation (void)
-{
- /* we should be able to set the size of the interworking stub section */
-
- /* Here we rummage through the found bfds to collect glue information */
- /* FIXME: should this be based on a command line option? krk@cygnus.com */
- {
- LANG_FOR_EACH_INPUT_STATEMENT (is)
- {
- if (! bfd_arm_process_before_allocation
- (is->the_bfd, & link_info, support_old_code))
- {
- /* xgettext:c-format */
- einfo (_("%P: errors encountered processing file %s\n"),
- is->filename);
- }
- }
- }
-
- /* We have seen it all. Allocate it, and carry on */
- bfd_arm_allocate_interworking_sections (& link_info);
-
- before_allocation_default ();
-}
-
-static void
-gld${EMULATION_NAME}_after_open (void)
-{
- after_open_default ();
-
- if (strstr (bfd_get_target (link_info.output_bfd), "arm") == NULL)
- {
- /* The arm backend needs special fields in the output hash structure.
- These will only be created if the output format is an arm format,
- hence we do not support linking and changing output formats at the
- same time. Use a link followed by objcopy to change output formats. */
- einfo (_("%F%P: error: cannot change output format "
- "whilst linking %s binaries\n"), "ARM");
- return;
- }
-
- {
- LANG_FOR_EACH_INPUT_STATEMENT (is)
- {
- if (bfd_arm_get_bfd_for_interworking (is->the_bfd, & link_info))
- break;
- }
- }
-}
-
-static void
-gld${EMULATION_NAME}_finish (void)
-{
- if (thumb_entry_symbol != NULL)
- {
- struct bfd_link_hash_entry * h;
-
- h = bfd_link_hash_lookup (link_info.hash, thumb_entry_symbol,
- false, false, true);
-
- if (h != (struct bfd_link_hash_entry *) NULL
- && (h->type == bfd_link_hash_defined
- || h->type == bfd_link_hash_defweak)
- && h->u.def.section->output_section != NULL)
- {
- static char buffer[32];
- bfd_vma val;
-
- /* Special procesing is required for a Thumb entry symbol. The
- bottom bit of its address must be set. */
- val = (h->u.def.value
- + bfd_section_vma (h->u.def.section->output_section)
- + h->u.def.section->output_offset);
-
- val |= 1;
-
- /* Now convert this value into a string and store it in entry_symbol
- where the lang_finish() function will pick it up. */
- buffer[0] = '0';
- buffer[1] = 'x';
-
- sprintf_vma (buffer + 2, val);
-
- if (entry_symbol.name != NULL && entry_from_cmdline)
- einfo (_("%P: warning: '--thumb-entry %s' is overriding '-e %s'\n"),
- thumb_entry_symbol, entry_symbol.name);
- entry_symbol.name = buffer;
- }
- else
- einfo (_("%P: warning: cannot find thumb start symbol %s\n"),
- thumb_entry_symbol);
- }
-
- finish_default ();
-}
-
-static char *
-gld${EMULATION_NAME}_get_script (int *isfile)
-EOF
-
-if test x"$COMPILE_IN" = xyes
-then
-# Scripts compiled in.
-
-# sed commands to quote an ld script as a C string.
-sc="-f stringify.sed"
-
-fragment <<EOF
-{
- *isfile = 0;
-
- if (bfd_link_relocatable (&link_info) && config.build_constructors)
- return
-EOF
-sed $sc ldscripts/${EMULATION_NAME}.xu >> e${EMULATION_NAME}.c
-echo ' ; else if (bfd_link_relocatable (&link_info)) return' >> e${EMULATION_NAME}.c
-sed $sc ldscripts/${EMULATION_NAME}.xr >> e${EMULATION_NAME}.c
-echo ' ; else if (!config.text_read_only) return' >> e${EMULATION_NAME}.c
-sed $sc ldscripts/${EMULATION_NAME}.xbn >> e${EMULATION_NAME}.c
-echo ' ; else if (!config.magic_demand_paged) return' >> e${EMULATION_NAME}.c
-sed $sc ldscripts/${EMULATION_NAME}.xn >> e${EMULATION_NAME}.c
-echo ' ; else return' >> e${EMULATION_NAME}.c
-sed $sc ldscripts/${EMULATION_NAME}.x >> e${EMULATION_NAME}.c
-echo '; }' >> e${EMULATION_NAME}.c
-
-else
-# Scripts read from the filesystem.
-
-fragment <<EOF
-{
- *isfile = 1;
-
- if (bfd_link_relocatable (&link_info) && config.build_constructors)
- return "ldscripts/${EMULATION_NAME}.xu";
- else if (bfd_link_relocatable (&link_info))
- return "ldscripts/${EMULATION_NAME}.xr";
- else if (!config.text_read_only)
- return "ldscripts/${EMULATION_NAME}.xbn";
- else if (!config.magic_demand_paged)
- return "ldscripts/${EMULATION_NAME}.xn";
- else
- return "ldscripts/${EMULATION_NAME}.x";
-}
-EOF
-
-fi
-
-fragment <<EOF
-
-struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
-{
- gld${EMULATION_NAME}_before_parse,
- syslib_default,
- hll_default,
- after_parse_default,
- gld${EMULATION_NAME}_after_open,
- after_check_relocs_default,
- before_place_orphans_default,
- after_allocation_default,
- set_output_arch_default,
- ldemul_default_target,
- gld${EMULATION_NAME}_before_allocation,
- gld${EMULATION_NAME}_get_script,
- "${EMULATION_NAME}",
- "${OUTPUT_FORMAT}",
- gld${EMULATION_NAME}_finish,
- NULL, /* create output section statements */
- NULL, /* open dynamic archive */
- NULL, /* place orphan */
- NULL, /* set symbols */
- NULL, /* parse_args */
- gld${EMULATION_NAME}_add_options,
- gld${EMULATION_NAME}_handle_option,
- NULL, /* unrecognised file */
- gld${EMULATION_NAME}_list_options,
- NULL, /* recognized file */
- NULL, /* find_potential_libraries */
- NULL, /* new_vers_pattern */
- NULL, /* extra_map_file_text */
- ${LDEMUL_EMIT_CTF_EARLY-NULL},
- ${LDEMUL_ACQUIRE_STRINGS_FOR_CTF-NULL},
- ${LDEMUL_NEW_DYNSYM_FOR_CTF-NULL},
- ${LDEMUL_PRINT_SYMBOL-NULL}
-};
-EOF
diff --git a/ld/emultempl/avrelf.em b/ld/emultempl/avrelf.em
index 555d259d7be..617bfef558b 100644
--- a/ld/emultempl/avrelf.em
+++ b/ld/emultempl/avrelf.em
@@ -134,6 +134,7 @@ avr_elf_create_output_section_statements (void)
einfo (_("%X%P: can not create stub BFD: %E\n"));
return;
}
+ stub_file->the_bfd->flags |= BFD_LINKER_CREATED;
/* Now we add the stub section. */
diff --git a/ld/emultempl/beos.em b/ld/emultempl/beos.em
index bebad8af2f7..93e85a792a3 100644
--- a/ld/emultempl/beos.em
+++ b/ld/emultempl/beos.em
@@ -62,7 +62,7 @@ static int dll;
extern const char *output_filename;
static void
-gld_${EMULATION_NAME}_before_parse (void)
+gld${EMULATION_NAME}_before_parse (void)
{
ldfile_set_output_arch ("${OUTPUT_ARCH}", bfd_arch_`echo ${ARCH} | sed -e 's/:.*//'`);
output_filename = "a.exe";
@@ -322,7 +322,7 @@ gld${EMULATION_NAME}_handle_option (int optc)
read. */
static void
-gld_${EMULATION_NAME}_set_symbols (void)
+gld${EMULATION_NAME}_set_symbols (void)
{
/* Run through and invent symbols for all the
names and insert the defaults. */
@@ -372,7 +372,7 @@ gld_${EMULATION_NAME}_set_symbols (void)
}
static void
-gld_${EMULATION_NAME}_after_open (void)
+gld${EMULATION_NAME}_after_open (void)
{
after_open_default ();
@@ -606,7 +606,7 @@ sort_sections (lang_statement_union_type *s)
}
static void
-gld_${EMULATION_NAME}_before_allocation (void)
+gld${EMULATION_NAME}_before_allocation (void)
{
#ifdef TARGET_IS_armpe
/* FIXME: we should be able to set the size of the interworking stub
@@ -710,7 +710,7 @@ gld${EMULATION_NAME}_place_orphan (asection *s,
}
static char *
-gld_${EMULATION_NAME}_get_script (int *isfile)
+gld${EMULATION_NAME}_get_script (int *isfile)
EOF
if test x"$COMPILE_IN" = xyes
@@ -759,42 +759,11 @@ fragment <<EOF
EOF
fi
-fragment <<EOF
-
+LDEMUL_AFTER_OPEN=gld${EMULATION_NAME}_after_open
+LDEMUL_BEFORE_ALLOCATION=gld${EMULATION_NAME}_before_allocation
+LDEMUL_PLACE_ORPHAN=gld${EMULATION_NAME}_place_orphan
+LDEMUL_SET_SYMBOLS=gld${EMULATION_NAME}_set_symbols
+LDEMUL_ADD_OPTIONS=gld${EMULATION_NAME}_add_options
+LDEMUL_HANDLE_OPTION=gld${EMULATION_NAME}_handle_option
-struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
-{
- gld_${EMULATION_NAME}_before_parse,
- syslib_default,
- hll_default,
- after_parse_default,
- gld_${EMULATION_NAME}_after_open,
- after_check_relocs_default,
- before_place_orphans_default,
- after_allocation_default,
- set_output_arch_default,
- ldemul_default_target,
- gld_${EMULATION_NAME}_before_allocation,
- gld_${EMULATION_NAME}_get_script,
- "${EMULATION_NAME}",
- "${OUTPUT_FORMAT}",
- finish_default,
- NULL, /* create output section statements */
- NULL, /* open dynamic archive */
- gld${EMULATION_NAME}_place_orphan,
- gld_${EMULATION_NAME}_set_symbols,
- NULL, /* parse_args */
- gld${EMULATION_NAME}_add_options,
- gld${EMULATION_NAME}_handle_option,
- NULL, /* unrecognized file */
- NULL, /* list options */
- NULL, /* recognized file */
- NULL, /* find_potential_libraries */
- NULL, /* new_vers_pattern */
- NULL, /* extra_map_file_text */
- ${LDEMUL_EMIT_CTF_EARLY-NULL},
- ${LDEMUL_ACQUIRE_STRINGS_FOR_CTF-NULL},
- ${LDEMUL_NEW_DYNSYM_FOR_CTF-NULL},
- ${LDEMUL_PRINT_SYMBOL-NULL}
-};
-EOF
+source_em ${srcdir}/emultempl/emulation.em
diff --git a/ld/emultempl/elf.em b/ld/emultempl/elf.em
index 59775260b06..c027559908c 100644
--- a/ld/emultempl/elf.em
+++ b/ld/emultempl/elf.em
@@ -53,6 +53,8 @@ fragment <<EOF
/* Declare functions used by various EXTRA_EM_FILEs. */
static void gld${EMULATION_NAME}_before_parse (void);
+static void gld${EMULATION_NAME}_before_plugin_all_symbols_read
+ (void);
static void gld${EMULATION_NAME}_after_open (void);
static void gld${EMULATION_NAME}_before_allocation (void);
static void gld${EMULATION_NAME}_after_allocation (void);
@@ -90,6 +92,9 @@ EOF
fi
fragment <<EOF
link_info.separate_code = DEFAULT_LD_Z_SEPARATE_CODE;
+ link_info.warn_execstack = DEFAULT_LD_WARN_EXECSTACK;
+ link_info.no_warn_rwx_segments = ! DEFAULT_LD_WARN_RWX_SEGMENTS;
+ link_info.default_execstack = DEFAULT_LD_EXECSTACK;
}
EOF
@@ -125,6 +130,17 @@ if test x"$LDEMUL_AFTER_OPEN" != xgld"$EMULATION_NAME"_after_open; then
fragment <<EOF
+/* This is called before calling plugin 'all symbols read' hook. */
+
+static void
+gld${EMULATION_NAME}_before_plugin_all_symbols_read (void)
+{
+ ldelf_before_plugin_all_symbols_read ($IS_LIBPATH, $IS_NATIVE,
+ $IS_LINUX_TARGET,
+ $IS_FREEBSD_TARGET,
+ $ELFSIZE, "$prefix");
+}
+
/* This is called after all the input files have been opened. */
static void
@@ -731,6 +747,7 @@ fragment <<EOF
|| (link_info.commonpagesize & (link_info.commonpagesize - 1)) != 0)
einfo (_("%F%P: invalid common page size \`%s'\n"),
optarg + 17);
+ link_info.commonpagesize_is_set = true;
}
else if (startswith (optarg, "stack-size="))
{
@@ -908,41 +925,18 @@ EOF
fi
fi
-fragment <<EOF
+LDEMUL_AFTER_PARSE=${LDEMUL_AFTER_PARSE-ldelf_after_parse}
+LDEMUL_BEFORE_PLUGIN_ALL_SYMBOLS_READ=${LDEMUL_BEFORE_PLUGIN_ALL_SYMBOLS_READ-gld${EMULATION_NAME}_before_plugin_all_symbols_read}
+LDEMUL_AFTER_OPEN=${LDEMUL_AFTER_OPEN-gld${EMULATION_NAME}_after_open}
+LDEMUL_BEFORE_PLACE_ORPHANS=${LDEMUL_BEFORE_PLACE_ORPHANS-ldelf_before_place_orphans}
+LDEMUL_AFTER_ALLOCATION=${LDEMUL_AFTER_ALLOCATION-gld${EMULATION_NAME}_after_allocation}
+LDEMUL_SET_OUTPUT_ARCH=${LDEMUL_SET_OUTPUT_ARCH-ldelf_set_output_arch}
+LDEMUL_BEFORE_ALLOCATION=${LDEMUL_BEFORE_ALLOCATION-gld${EMULATION_NAME}_before_allocation}
+LDEMUL_OPEN_DYNAMIC_ARCHIVE=${LDEMUL_OPEN_DYNAMIC_ARCHIVE-ldelf_open_dynamic_archive}
+LDEMUL_PLACE_ORPHAN=${LDEMUL_PLACE_ORPHAN-ldelf_place_orphan}
+LDEMUL_ADD_OPTIONS=gld${EMULATION_NAME}_add_options
+LDEMUL_HANDLE_OPTION=gld${EMULATION_NAME}_handle_option
+LDEMUL_LIST_OPTIONS=${LDEMUL_LIST_OPTIONS-${gld_list_options}}
+LDEMUL_RECOGNIZED_FILE=${LDEMUL_RECOGNIZED_FILE-ldelf_load_symbols}
-struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
-{
- ${LDEMUL_BEFORE_PARSE-gld${EMULATION_NAME}_before_parse},
- ${LDEMUL_SYSLIB-syslib_default},
- ${LDEMUL_HLL-hll_default},
- ${LDEMUL_AFTER_PARSE-ldelf_after_parse},
- ${LDEMUL_AFTER_OPEN-gld${EMULATION_NAME}_after_open},
- ${LDEMUL_AFTER_CHECK_RELOCS-after_check_relocs_default},
- ${LDEMUL_BEFORE_PLACE_ORPHANS-ldelf_before_place_orphans},
- ${LDEMUL_AFTER_ALLOCATION-gld${EMULATION_NAME}_after_allocation},
- ${LDEMUL_SET_OUTPUT_ARCH-ldelf_set_output_arch},
- ${LDEMUL_CHOOSE_TARGET-ldemul_default_target},
- ${LDEMUL_BEFORE_ALLOCATION-gld${EMULATION_NAME}_before_allocation},
- ${LDEMUL_GET_SCRIPT-gld${EMULATION_NAME}_get_script},
- "${EMULATION_NAME}",
- "${OUTPUT_FORMAT}",
- ${LDEMUL_FINISH-finish_default},
- ${LDEMUL_CREATE_OUTPUT_SECTION_STATEMENTS-NULL},
- ${LDEMUL_OPEN_DYNAMIC_ARCHIVE-ldelf_open_dynamic_archive},
- ${LDEMUL_PLACE_ORPHAN-ldelf_place_orphan},
- ${LDEMUL_SET_SYMBOLS-NULL},
- ${LDEMUL_PARSE_ARGS-NULL},
- gld${EMULATION_NAME}_add_options,
- gld${EMULATION_NAME}_handle_option,
- ${LDEMUL_UNRECOGNIZED_FILE-NULL},
- ${LDEMUL_LIST_OPTIONS-${gld_list_options}},
- ${LDEMUL_RECOGNIZED_FILE-ldelf_load_symbols},
- ${LDEMUL_FIND_POTENTIAL_LIBRARIES-NULL},
- ${LDEMUL_NEW_VERS_PATTERN-NULL},
- ${LDEMUL_EXTRA_MAP_FILE_TEXT-NULL},
- ${LDEMUL_EMIT_CTF_EARLY-NULL},
- ${LDEMUL_ACQUIRE_STRINGS_FOR_CTF-NULL},
- ${LDEMUL_NEW_DYNSYM_FOR_CTF-NULL},
- ${LDEMUL_PRINT_SYMBOL-NULL}
-};
-EOF
+source_em ${srcdir}/emultempl/emulation.em
diff --git a/ld/emultempl/emulation.em b/ld/emultempl/emulation.em
new file mode 100644
index 00000000000..7fe821a519d
--- /dev/null
+++ b/ld/emultempl/emulation.em
@@ -0,0 +1,41 @@
+# This shell script emits a C file. -*- C -*-
+# It does some substitutions.
+fragment <<EOF
+
+struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
+{
+ ${LDEMUL_BEFORE_PARSE-gld${EMULATION_NAME}_before_parse},
+ ${LDEMUL_SYSLIB-syslib_default},
+ ${LDEMUL_HLL-hll_default},
+ ${LDEMUL_AFTER_PARSE-after_parse_default},
+ ${LDEMUL_BEFORE_PLUGIN_ALL_SYMBOLS_READ-NULL},
+ ${LDEMUL_AFTER_OPEN-after_open_default},
+ ${LDEMUL_AFTER_CHECK_RELOCS-after_check_relocs_default},
+ ${LDEMUL_BEFORE_PLACE_ORPHANS-before_place_orphans_default},
+ ${LDEMUL_AFTER_ALLOCATION-after_allocation_default},
+ ${LDEMUL_SET_OUTPUT_ARCH-set_output_arch_default},
+ ${LDEMUL_CHOOSE_TARGET-ldemul_default_target},
+ ${LDEMUL_BEFORE_ALLOCATION-before_allocation_default},
+ ${LDEMUL_GET_SCRIPT-gld${EMULATION_NAME}_get_script},
+ "${EMULATION_NAME}",
+ "${OUTPUT_FORMAT}",
+ ${LDEMUL_FINISH-finish_default},
+ ${LDEMUL_CREATE_OUTPUT_SECTION_STATEMENTS-NULL},
+ ${LDEMUL_OPEN_DYNAMIC_ARCHIVE-NULL},
+ ${LDEMUL_PLACE_ORPHAN-NULL},
+ ${LDEMUL_SET_SYMBOLS-NULL},
+ ${LDEMUL_PARSE_ARGS-NULL},
+ ${LDEMUL_ADD_OPTIONS-NULL},
+ ${LDEMUL_HANDLE_OPTION-NULL},
+ ${LDEMUL_UNRECOGNIZED_FILE-NULL},
+ ${LDEMUL_LIST_OPTIONS-NULL},
+ ${LDEMUL_RECOGNIZED_FILE-NULL},
+ ${LDEMUL_FIND_POTENTIAL_LIBRARIES-NULL},
+ ${LDEMUL_NEW_VERS_PATTERN-NULL},
+ ${LDEMUL_EXTRA_MAP_FILE_TEXT-NULL},
+ ${LDEMUL_EMIT_CTF_EARLY-NULL},
+ ${LDEMUL_ACQUIRE_STRINGS_FOR_CTF-NULL},
+ ${LDEMUL_NEW_DYNSYM_FOR_CTF-NULL},
+ ${LDEMUL_PRINT_SYMBOL-NULL}
+};
+EOF
diff --git a/ld/emultempl/generic.em b/ld/emultempl/generic.em
index e7c990e7260..cecbb1c2728 100644
--- a/ld/emultempl/generic.em
+++ b/ld/emultempl/generic.em
@@ -128,41 +128,4 @@ EOF
fi
fi
-fragment <<EOF
-
-struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
-{
- ${LDEMUL_BEFORE_PARSE-gld${EMULATION_NAME}_before_parse},
- ${LDEMUL_SYSLIB-syslib_default},
- ${LDEMUL_HLL-hll_default},
- ${LDEMUL_AFTER_PARSE-after_parse_default},
- ${LDEMUL_AFTER_OPEN-after_open_default},
- ${LDEMUL_AFTER_CHECK_RELOCS-after_check_relocs_default},
- ${LDEMUL_BEFORE_PLACE_ORPHANS-before_place_orphans_default},
- ${LDEMUL_AFTER_ALLOCATION-after_allocation_default},
- ${LDEMUL_SET_OUTPUT_ARCH-set_output_arch_default},
- ${LDEMUL_CHOOSE_TARGET-ldemul_default_target},
- ${LDEMUL_BEFORE_ALLOCATION-before_allocation_default},
- ${LDEMUL_GET_SCRIPT-gld${EMULATION_NAME}_get_script},
- "${EMULATION_NAME}",
- "${OUTPUT_FORMAT}",
- ${LDEMUL_FINISH-finish_default},
- ${LDEMUL_CREATE_OUTPUT_SECTION_STATEMENTS-NULL},
- ${LDEMUL_OPEN_DYNAMIC_ARCHIVE-NULL},
- ${LDEMUL_PLACE_ORPHAN-NULL},
- ${LDEMUL_SET_SYMBOLS-NULL},
- ${LDEMUL_PARSE_ARGS-NULL},
- ${LDEMUL_ADD_OPTIONS-NULL},
- ${LDEMUL_HANDLE_OPTION-NULL},
- ${LDEMUL_UNRECOGNIZED_FILE-NULL},
- ${LDEMUL_LIST_OPTIONS-NULL},
- ${LDEMUL_RECOGNIZED_FILE-NULL},
- ${LDEMUL_FIND_POTENTIAL_LIBRARIES-NULL},
- ${LDEMUL_NEW_VERS_PATTERN-NULL},
- ${LDEMUL_EXTRA_MAP_FILE_TEXT-NULL},
- ${LDEMUL_EMIT_CTF_EARLY-NULL},
- ${LDEMUL_ACQUIRE_STRINGS_FOR_CTF-NULL},
- ${LDEMUL_NEW_DYNSYM_FOR_CTF-NULL},
- ${LDEMUL_PRINT_SYMBOL-NULL}
-};
-EOF
+source_em ${srcdir}/emultempl/emulation.em
diff --git a/ld/emultempl/msp430.em b/ld/emultempl/msp430.em
index abfbdcb64a8..f188b46b4aa 100644
--- a/ld/emultempl/msp430.em
+++ b/ld/emultempl/msp430.em
@@ -905,43 +905,17 @@ gld${EMULATION_NAME}_finish (void)
finish_default ();
check_array_section_alignment ();
}
-
-struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
-{
- ${LDEMUL_BEFORE_PARSE-gld${EMULATION_NAME}_before_parse},
- ${LDEMUL_SYSLIB-syslib_default},
- ${LDEMUL_HLL-hll_default},
- ${LDEMUL_AFTER_PARSE-after_parse_default},
- msp430_elf_after_open,
- after_check_relocs_default,
- before_place_orphans_default,
- msp430_elf_after_allocation,
- ${LDEMUL_SET_OUTPUT_ARCH-set_output_arch_default},
- ${LDEMUL_CHOOSE_TARGET-ldemul_default_target},
- ${LDEMUL_BEFORE_ALLOCATION-before_allocation_default},
- ${LDEMUL_GET_SCRIPT-gld${EMULATION_NAME}_get_script},
- "${EMULATION_NAME}",
- "${OUTPUT_FORMAT}",
- gld${EMULATION_NAME}_finish,
- ${LDEMUL_CREATE_OUTPUT_SECTION_STATEMENTS-NULL},
- ${LDEMUL_OPEN_DYNAMIC_ARCHIVE-NULL},
- ${LDEMUL_PLACE_ORPHAN-gld${EMULATION_NAME}_place_orphan},
- ${LDEMUL_SET_SYMBOLS-NULL},
- ${LDEMUL_PARSE_ARGS-NULL},
- gld${EMULATION_NAME}_add_options,
- gld${EMULATION_NAME}_handle_option,
- ${LDEMUL_UNRECOGNIZED_FILE-NULL},
- gld${EMULATION_NAME}_list_options,
- ${LDEMUL_RECOGNIZED_FILE-NULL},
- ${LDEMUL_FIND_POTENTIAL_LIBRARIES-NULL},
- ${LDEMUL_NEW_VERS_PATTERN-NULL},
- ${LDEMUL_EXTRA_MAP_FILE_TEXT-NULL},
- ${LDEMUL_EMIT_CTF_EARLY-NULL},
- ${LDEMUL_ACQUIRE_STRINGS_FOR_CTF-NULL},
- ${LDEMUL_NEW_DYNSYM_FOR_CTF-NULL},
- ${LDEMUL_PRINT_SYMBOL-NULL}
-};
EOF
+
+LDEMUL_AFTER_OPEN=msp430_elf_after_open
+LDEMUL_AFTER_ALLOCATION=msp430_elf_after_allocation
+LDEMUL_PLACE_ORPHAN=${LDEMUL_PLACE_ORPHAN-gld${EMULATION_NAME}_place_orphan}
+LDEMUL_FINISH=gld${EMULATION_NAME}_finish
+LDEMUL_ADD_OPTIONS=gld${EMULATION_NAME}_add_options
+LDEMUL_HANDLE_OPTION=gld${EMULATION_NAME}_handle_option
+LDEMUL_LIST_OPTIONS=gld${EMULATION_NAME}_list_options
+
+source_em ${srcdir}/emultempl/emulation.em
#
# Local Variables:
# mode: c
diff --git a/ld/emultempl/pe.em b/ld/emultempl/pe.em
index 3c6a07e8e86..892bf70b7a6 100644
--- a/ld/emultempl/pe.em
+++ b/ld/emultempl/pe.em
@@ -172,7 +172,7 @@ static int is_underscoring (void)
}
static void
-gld_${EMULATION_NAME}_before_parse (void)
+gld${EMULATION_NAME}_before_parse (void)
{
is_underscoring ();
ldfile_set_output_arch ("${OUTPUT_ARCH}", bfd_arch_`echo ${ARCH} | sed -e 's/:.*//'`);
@@ -454,7 +454,7 @@ static definfo init[] =
static void
-gld_${EMULATION_NAME}_list_options (FILE *file)
+gld${EMULATION_NAME}_list_options (FILE *file)
{
fprintf (file, _(" --base_file <basefile> Generate a base file for relocatable DLLs\n"));
fprintf (file, _(" --dll Set image base to the default for DLLs\n"));
@@ -1002,7 +1002,7 @@ compute_dll_image_base (const char *ofile)
read. */
static void
-gld_${EMULATION_NAME}_set_symbols (void)
+gld${EMULATION_NAME}_set_symbols (void)
{
/* Run through and invent symbols for all the
names and insert the defaults. */
@@ -1069,7 +1069,7 @@ gld_${EMULATION_NAME}_set_symbols (void)
have been read. */
static void
-gld_${EMULATION_NAME}_after_parse (void)
+gld${EMULATION_NAME}_after_parse (void)
{
/* PR ld/6744: Warn the user if they have used an ELF-only
option hoping it will work on PE. */
@@ -1382,7 +1382,7 @@ setup_build_id (bfd *ibfd)
}
static void
-gld_${EMULATION_NAME}_after_open (void)
+gld${EMULATION_NAME}_after_open (void)
{
after_open_default ();
@@ -1803,7 +1803,7 @@ gld_${EMULATION_NAME}_after_open (void)
}
static void
-gld_${EMULATION_NAME}_before_allocation (void)
+gld${EMULATION_NAME}_before_allocation (void)
{
#if defined(TARGET_IS_armpe) || defined(TARGET_IS_arm_wince_pe)
/* FIXME: we should be able to set the size of the interworking stub
@@ -1849,7 +1849,7 @@ saw_option (char *option)
#endif /* DLL_SUPPORT */
static bool
-gld_${EMULATION_NAME}_unrecognized_file (lang_input_statement_type *entry ATTRIBUTE_UNUSED)
+gld${EMULATION_NAME}_unrecognized_file (lang_input_statement_type *entry ATTRIBUTE_UNUSED)
{
#ifdef DLL_SUPPORT
const char *ext = entry->filename + strlen (entry->filename) - 4;
@@ -1930,7 +1930,7 @@ gld_${EMULATION_NAME}_unrecognized_file (lang_input_statement_type *entry ATTRIB
}
static bool
-gld_${EMULATION_NAME}_recognized_file (lang_input_statement_type *entry ATTRIBUTE_UNUSED)
+gld${EMULATION_NAME}_recognized_file (lang_input_statement_type *entry ATTRIBUTE_UNUSED)
{
#ifdef DLL_SUPPORT
#ifdef TARGET_IS_i386pe
@@ -1952,7 +1952,7 @@ gld_${EMULATION_NAME}_recognized_file (lang_input_statement_type *entry ATTRIBUT
}
static void
-gld_${EMULATION_NAME}_finish (void)
+gld${EMULATION_NAME}_finish (void)
{
#if defined(TARGET_IS_armpe) || defined(TARGET_IS_arm_wince_pe)
struct bfd_link_hash_entry * h;
@@ -2052,9 +2052,9 @@ gld_${EMULATION_NAME}_finish (void)
sort_sections. */
static lang_output_section_statement_type *
-gld_${EMULATION_NAME}_place_orphan (asection *s,
- const char *secname,
- int constraint)
+gld${EMULATION_NAME}_place_orphan (asection *s,
+ const char *secname,
+ int constraint)
{
const char *orig_secname = secname;
char *dollar = NULL;
@@ -2251,7 +2251,7 @@ gld_${EMULATION_NAME}_place_orphan (asection *s,
}
static bool
-gld_${EMULATION_NAME}_open_dynamic_archive
+gld${EMULATION_NAME}_open_dynamic_archive
(const char *arch ATTRIBUTE_UNUSED,
search_dirs_type *search,
lang_input_statement_type *entry)
@@ -2357,14 +2357,14 @@ gld_${EMULATION_NAME}_open_dynamic_archive
}
static int
-gld_${EMULATION_NAME}_find_potential_libraries
+gld${EMULATION_NAME}_find_potential_libraries
(char *name, lang_input_statement_type *entry)
{
return ldfile_open_file_search (name, entry, "", ".lib");
}
static char *
-gld_${EMULATION_NAME}_get_script (int *isfile)
+gld${EMULATION_NAME}_get_script (int *isfile)
EOF
if test x"$COMPILE_IN" = xyes
@@ -2426,42 +2426,18 @@ fragment <<EOF
EOF
fi
-fragment <<EOF
-
-
-struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
-{
- gld_${EMULATION_NAME}_before_parse,
- syslib_default,
- hll_default,
- gld_${EMULATION_NAME}_after_parse,
- gld_${EMULATION_NAME}_after_open,
- after_check_relocs_default,
- before_place_orphans_default,
- after_allocation_default,
- set_output_arch_default,
- ldemul_default_target,
- gld_${EMULATION_NAME}_before_allocation,
- gld_${EMULATION_NAME}_get_script,
- "${EMULATION_NAME}",
- "${OUTPUT_FORMAT}",
- gld_${EMULATION_NAME}_finish,
- NULL, /* Create output section statements. */
- gld_${EMULATION_NAME}_open_dynamic_archive,
- gld_${EMULATION_NAME}_place_orphan,
- gld_${EMULATION_NAME}_set_symbols,
- NULL, /* parse_args */
- gld${EMULATION_NAME}_add_options,
- gld${EMULATION_NAME}_handle_option,
- gld_${EMULATION_NAME}_unrecognized_file,
- gld_${EMULATION_NAME}_list_options,
- gld_${EMULATION_NAME}_recognized_file,
- gld_${EMULATION_NAME}_find_potential_libraries,
- NULL, /* new_vers_pattern. */
- NULL, /* extra_map_file_text. */
- ${LDEMUL_EMIT_CTF_EARLY-NULL},
- ${LDEMUL_ACQUIRE_STRINGS_FOR_CTF-NULL},
- ${LDEMUL_NEW_DYNSYM_FOR_CTF-NULL},
- ${LDEMUL_PRINT_SYMBOL-NULL}
-};
-EOF
+LDEMUL_AFTER_PARSE=gld${EMULATION_NAME}_after_parse
+LDEMUL_AFTER_OPEN=gld${EMULATION_NAME}_after_open
+LDEMUL_BEFORE_ALLOCATION=gld${EMULATION_NAME}_before_allocation
+LDEMUL_FINISH=gld${EMULATION_NAME}_finish
+LDEMUL_OPEN_DYNAMIC_ARCHIVE=gld${EMULATION_NAME}_open_dynamic_archive
+LDEMUL_PLACE_ORPHAN=gld${EMULATION_NAME}_place_orphan
+LDEMUL_SET_SYMBOLS=gld${EMULATION_NAME}_set_symbols
+LDEMUL_ADD_OPTIONS=gld${EMULATION_NAME}_add_options
+LDEMUL_HANDLE_OPTION=gld${EMULATION_NAME}_handle_option
+LDEMUL_UNRECOGNIZED_FILE=gld${EMULATION_NAME}_unrecognized_file
+LDEMUL_LIST_OPTIONS=gld${EMULATION_NAME}_list_options
+LDEMUL_RECOGNIZED_FILE=gld${EMULATION_NAME}_recognized_file
+LDEMUL_FIND_POTENTIAL_LIBRARIES=gld${EMULATION_NAME}_find_potential_libraries
+
+source_em ${srcdir}/emultempl/emulation.em
diff --git a/ld/emultempl/pep.em b/ld/emultempl/pep.em
index 848daa16746..e68d1e69f17 100644
--- a/ld/emultempl/pep.em
+++ b/ld/emultempl/pep.em
@@ -183,7 +183,7 @@ static int is_underscoring (void)
static void
-gld_${EMULATION_NAME}_before_parse (void)
+gld${EMULATION_NAME}_before_parse (void)
{
is_underscoring ();
ldfile_set_output_arch ("${OUTPUT_ARCH}", bfd_arch_`echo ${ARCH} | sed -e 's/:.*//'`);
@@ -417,7 +417,7 @@ static definfo init[] =
static void
-gld_${EMULATION_NAME}_list_options (FILE *file)
+gld${EMULATION_NAME}_list_options (FILE *file)
{
fprintf (file, _(" --base_file <basefile> Generate a base file for relocatable DLLs\n"));
fprintf (file, _(" --dll Set image base to the default for DLLs\n"));
@@ -945,7 +945,7 @@ compute_dll_image_base (const char *ofile)
read. */
static void
-gld_${EMULATION_NAME}_set_symbols (void)
+gld${EMULATION_NAME}_set_symbols (void)
{
/* Run through and invent symbols for all the
names and insert the defaults. */
@@ -1012,7 +1012,7 @@ gld_${EMULATION_NAME}_set_symbols (void)
have been read. */
static void
-gld_${EMULATION_NAME}_after_parse (void)
+gld${EMULATION_NAME}_after_parse (void)
{
/* PR ld/6744: Warn the user if they have used an ELF-only
option hoping it will work on PE+. */
@@ -1366,7 +1366,7 @@ setup_build_id (bfd *ibfd)
}
static void
-gld_${EMULATION_NAME}_after_open (void)
+gld${EMULATION_NAME}_after_open (void)
{
after_open_default ();
@@ -1694,7 +1694,7 @@ gld_${EMULATION_NAME}_after_open (void)
}
static void
-gld_${EMULATION_NAME}_before_allocation (void)
+gld${EMULATION_NAME}_before_allocation (void)
{
is_underscoring ();
before_allocation_default ();
@@ -1719,7 +1719,7 @@ saw_option (char *option)
#endif /* DLL_SUPPORT */
static bool
-gld_${EMULATION_NAME}_unrecognized_file (lang_input_statement_type *entry ATTRIBUTE_UNUSED)
+gld${EMULATION_NAME}_unrecognized_file (lang_input_statement_type *entry ATTRIBUTE_UNUSED)
{
#ifdef DLL_SUPPORT
const char *ext = entry->filename + strlen (entry->filename) - 4;
@@ -1800,7 +1800,7 @@ gld_${EMULATION_NAME}_unrecognized_file (lang_input_statement_type *entry ATTRIB
}
static bool
-gld_${EMULATION_NAME}_recognized_file (lang_input_statement_type *entry ATTRIBUTE_UNUSED)
+gld${EMULATION_NAME}_recognized_file (lang_input_statement_type *entry ATTRIBUTE_UNUSED)
{
is_underscoring ();
#ifdef DLL_SUPPORT
@@ -1814,7 +1814,7 @@ gld_${EMULATION_NAME}_recognized_file (lang_input_statement_type *entry ATTRIBUT
}
static void
-gld_${EMULATION_NAME}_finish (void)
+gld${EMULATION_NAME}_finish (void)
{
is_underscoring ();
finish_default ();
@@ -1864,7 +1864,7 @@ gld_${EMULATION_NAME}_finish (void)
sort_sections. */
static lang_output_section_statement_type *
-gld_${EMULATION_NAME}_place_orphan (asection *s,
+gld${EMULATION_NAME}_place_orphan (asection *s,
const char *secname,
int constraint)
{
@@ -2063,7 +2063,7 @@ gld_${EMULATION_NAME}_place_orphan (asection *s,
}
static bool
-gld_${EMULATION_NAME}_open_dynamic_archive
+gld${EMULATION_NAME}_open_dynamic_archive
(const char *arch ATTRIBUTE_UNUSED,
search_dirs_type *search,
lang_input_statement_type *entry)
@@ -2169,14 +2169,14 @@ gld_${EMULATION_NAME}_open_dynamic_archive
}
static int
-gld_${EMULATION_NAME}_find_potential_libraries
+gld${EMULATION_NAME}_find_potential_libraries
(char *name, lang_input_statement_type *entry)
{
return ldfile_open_file_search (name, entry, "", ".lib");
}
static char *
-gld_${EMULATION_NAME}_get_script (int *isfile)
+gld${EMULATION_NAME}_get_script (int *isfile)
EOF
if test x"$COMPILE_IN" = xyes
@@ -2238,42 +2238,18 @@ fragment <<EOF
EOF
fi
-fragment <<EOF
-
-
-struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
-{
- gld_${EMULATION_NAME}_before_parse,
- syslib_default,
- hll_default,
- gld_${EMULATION_NAME}_after_parse,
- gld_${EMULATION_NAME}_after_open,
- after_check_relocs_default,
- before_place_orphans_default,
- after_allocation_default,
- set_output_arch_default,
- ldemul_default_target,
- gld_${EMULATION_NAME}_before_allocation,
- gld_${EMULATION_NAME}_get_script,
- "${EMULATION_NAME}",
- "${OUTPUT_FORMAT}",
- gld_${EMULATION_NAME}_finish,
- NULL, /* Create output section statements. */
- gld_${EMULATION_NAME}_open_dynamic_archive,
- gld_${EMULATION_NAME}_place_orphan,
- gld_${EMULATION_NAME}_set_symbols,
- NULL, /* parse_args */
- gld${EMULATION_NAME}_add_options,
- gld${EMULATION_NAME}_handle_option,
- gld_${EMULATION_NAME}_unrecognized_file,
- gld_${EMULATION_NAME}_list_options,
- gld_${EMULATION_NAME}_recognized_file,
- gld_${EMULATION_NAME}_find_potential_libraries,
- NULL, /* new_vers_pattern. */
- NULL, /* extra_map_file_text */
- ${LDEMUL_EMIT_CTF_EARLY-NULL},
- ${LDEMUL_ACQUIRE_STRINGS_FOR_CTF-NULL},
- ${LDEMUL_NEW_DYNSYM_FOR_CTF-NULL},
- ${LDEMUL_PRINT_SYMBOL-NULL}
-};
-EOF
+LDEMUL_AFTER_PARSE=gld${EMULATION_NAME}_after_parse
+LDEMUL_AFTER_OPEN=gld${EMULATION_NAME}_after_open
+LDEMUL_BEFORE_ALLOCATION=gld${EMULATION_NAME}_before_allocation
+LDEMUL_FINISH=gld${EMULATION_NAME}_finish
+LDEMUL_OPEN_DYNAMIC_ARCHIVE=gld${EMULATION_NAME}_open_dynamic_archive
+LDEMUL_PLACE_ORPHAN=gld${EMULATION_NAME}_place_orphan
+LDEMUL_SET_SYMBOLS=gld${EMULATION_NAME}_set_symbols
+LDEMUL_ADD_OPTIONS=gld${EMULATION_NAME}_add_options
+LDEMUL_HANDLE_OPTION=gld${EMULATION_NAME}_handle_option
+LDEMUL_UNRECOGNIZED_FILE=gld${EMULATION_NAME}_unrecognized_file
+LDEMUL_LIST_OPTIONS=gld${EMULATION_NAME}_list_options
+LDEMUL_RECOGNIZED_FILE=gld${EMULATION_NAME}_recognized_file
+LDEMUL_FIND_POTENTIAL_LIBRARIES=gld${EMULATION_NAME}_find_potential_libraries
+
+source_em ${srcdir}/emultempl/emulation.em
diff --git a/ld/emultempl/ticoff.em b/ld/emultempl/ticoff.em
index 1ac483b9c7f..a57e73bc5c3 100644
--- a/ld/emultempl/ticoff.em
+++ b/ld/emultempl/ticoff.em
@@ -64,7 +64,7 @@ gld${EMULATION_NAME}_add_options
}
static void
-gld_${EMULATION_NAME}_list_options (FILE * file)
+gld${EMULATION_NAME}_list_options (FILE * file)
{
fprintf (file, _(" --format 0|1|2 Specify which COFF version to use\n"));
}
@@ -96,7 +96,7 @@ gld${EMULATION_NAME}_handle_option (int optc)
}
static void
-gld_${EMULATION_NAME}_before_parse(void)
+gld${EMULATION_NAME}_before_parse(void)
{
#ifndef TARGET_ /* I.e., if not generic. */
ldfile_set_output_arch ("`echo ${ARCH}`", bfd_arch_unknown);
@@ -104,7 +104,7 @@ gld_${EMULATION_NAME}_before_parse(void)
}
static char *
-gld_${EMULATION_NAME}_get_script (int *isfile)
+gld${EMULATION_NAME}_get_script (int *isfile)
EOF
if test x"$COMPILE_IN" = xyes
then
@@ -154,40 +154,8 @@ EOF
fi
-fragment <<EOF
-struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
-{
- gld_${EMULATION_NAME}_before_parse,
- syslib_default,
- hll_default,
- after_parse_default,
- after_open_default,
- after_check_relocs_default,
- before_place_orphans_default,
- after_allocation_default,
- set_output_arch_default,
- ldemul_default_target,
- before_allocation_default,
- gld_${EMULATION_NAME}_get_script,
- "${EMULATION_NAME}",
- "${OUTPUT_FORMAT}",
- finish_default,
- NULL, /* create output section statements */
- NULL, /* open dynamic archive */
- NULL, /* place orphan */
- NULL, /* set_symbols */
- NULL, /* parse_args */
- gld${EMULATION_NAME}_add_options,
- gld${EMULATION_NAME}_handle_option,
- NULL, /* unrecognized_file */
- gld_${EMULATION_NAME}_list_options,
- NULL, /* recognized file */
- NULL, /* find_potential_libraries */
- NULL, /* new_vers_pattern */
- NULL, /* extra_map_file_text */
- ${LDEMUL_EMIT_CTF_EARLY-NULL},
- ${LDEMUL_ACQUIRE_STRINGS_FOR_CTF-NULL},
- ${LDEMUL_NEW_DYNSYM_FOR_CTF-NULL},
- ${LDEMUL_PRINT_SYMBOL-NULL}
-};
-EOF
+LDEMUL_ADD_OPTIONS=gld${EMULATION_NAME}_add_options
+LDEMUL_HANDLE_OPTION=gld${EMULATION_NAME}_handle_option
+LDEMUL_LIST_OPTIONS=gld${EMULATION_NAME}_list_options
+
+source_em ${srcdir}/emultempl/emulation.em
diff --git a/ld/emultempl/vanilla.em b/ld/emultempl/vanilla.em
index dc47ca13efb..c9aef37742f 100644
--- a/ld/emultempl/vanilla.em
+++ b/ld/emultempl/vanilla.em
@@ -55,40 +55,12 @@ vanilla_get_script (int *isfile)
*isfile = 0;
return "";
}
-
-struct ld_emulation_xfer_struct ld_vanilla_emulation =
-{
- vanilla_before_parse,
- syslib_default,
- hll_default,
- after_parse_default,
- after_open_default,
- after_check_relocs_default,
- before_place_orphans_default,
- after_allocation_default,
- vanilla_set_output_arch,
- ldemul_default_target,
- before_allocation_default,
- vanilla_get_script,
- "vanilla",
- "a.out-sunos-big",
- finish_default,
- NULL, /* create output section statements */
- NULL, /* open dynamic archive */
- NULL, /* place orphan */
- NULL, /* set symbols */
- NULL, /* parse args */
- NULL, /* add_options */
- NULL, /* handle_option */
- NULL, /* unrecognized file */
- NULL, /* list options */
- NULL, /* recognized file */
- NULL, /* find_potential_libraries */
- NULL, /* new_vers_pattern */
- NULL, /* extra_map_file_text */
- NULL, /* emit_ctf_early */
- NULL, /* acquire_strings_for_ctf */
- NULL, /* new_dynsym_for_ctf */
- NULL /* print_symbol */
-};
EOF
+
+LDEMUL_BEFORE_PARSE=vanilla_before_parse
+LDEMUL_SET_OUTPUT_ARCH=vanilla_set_output_arch
+LDEMUL_GET_SCRIPT=vanilla_get_script
+EMULATION_NAME=vanilla
+OUTPUT_FORMAT=a.out-sunos-big
+
+source_em ${srcdir}/emultempl/emulation.em
diff --git a/ld/ld.texi b/ld/ld.texi
index edcf1772855..8cad8478140 100644
--- a/ld/ld.texi
+++ b/ld/ld.texi
@@ -1430,6 +1430,17 @@ called.
@item origin
Specify that the object requires @samp{$ORIGIN} handling in paths.
+@item pack-relative-relocs
+@itemx nopack-relative-relocs
+Generate compact relative relocation in position-independent executable
+and shared library. It adds @code{DT_RELR}, @code{DT_RELRSZ} and
+@code{DT_RELRENT} entries to the dynamic section. It is ignored when
+building position-dependent executable and relocatable output.
+@option{nopack-relative-relocs} is the default, which disables compact
+relative relocation. When linked against the GNU C Library, a
+GLIBC_ABI_DT_RELR symbol version dependency on the shared C Library is
+added to the output. Supported for i386 and x86-64.
+
@item relro
@itemx norelro
Create an ELF @code{PT_GNU_RELRO} segment header in the object. This
@@ -2065,7 +2076,7 @@ If this option is provided then the linker will invoke
@var{scriptname} whenever an error is encountered. Currently however
only two kinds of error are supported: missing symbols and missing
libraries. Two arguments will be passed to script: the keyword
-``undefined-symbol'' or `missing-lib'' and the @var{name} of the
+``undefined-symbol'' or `missing-lib'' and the @var{name} of the
undefined symbol or missing library. The intention is that the script
will provide suggestions to the user as to where the symbol or library
might be found. After the script has finished then the normal linker
@@ -2219,7 +2230,7 @@ On platforms where the feature is supported, the option
On platforms where the feature is not supported, both @option{--relax}
and @option{--no-relax} are accepted, but ignored.
-
+
@cindex retaining specified symbols
@cindex stripping all but some symbols
@cindex symbols, retaining selectively
@@ -2642,6 +2653,33 @@ Warn if any global constructors are used. This is only useful for a few
object file formats. For formats like COFF or ELF, the linker can not
detect the use of global constructors.
+@kindex --warn-execstack
+@cindex warnings, on exectuable stack
+@cindex executable stack, warnings on
+@item --warn-execstack
+@itemx --no-warn-execstack
+On ELF platforms this option controls how the linker generates warning
+messages when it creates an output file with an executable stack. By
+default the linker will not warn if the @command{-z execstack} command
+line option has been used, but this behaviour can be overridden by the
+@option{--warn-execstack} option.
+
+On the other hand the linker will normally warn if the stack is made
+executable because one or more of the input files need an execuable
+stack and neither of the @command{-z execstack} or @command{-z
+noexecstack} comman line options have been specified. This warning
+can be disabled via the @command{--no-warn-execstack} option.
+
+Note: ELF format input files specify that they need an executable
+stack by having a @var{.note.GNU-stack} section with the executable
+bit set in its section flags. They can specify that they do not need
+an executable stack by having that section, but without the executable
+flag bit set. If an input file does not have a @var{.note.GNU-stack}
+section present then the default behaviour is target specific. For
+some targets, then absence of such a section implies that an
+executable stack @emph{is} required. This is often a problem for hand
+crafted assembler files.
+
@kindex --warn-multiple-gp
@item --warn-multiple-gp
Warn if multiple global pointer values are required in the output file.
@@ -2663,6 +2701,22 @@ option causes a warning to be issued whenever this case occurs.
Only warn once for each undefined symbol, rather than once per module
which refers to it.
+@kindex --warn-rwx-segments
+@cindex warnings, on writeable and exectuable segments
+@cindex executable segments, warnings on
+@item --warn-rwx-segments
+@itemx --no-warn-rwx-segments
+Warn if the linker creates a loadable, non-zero sized segment that has
+all three of the read, write and execute permission flags set. Such a
+segment represents a potential security vulnerability. In addition
+warnings will be generated if a thread local storage segment is
+created with the execute permission flag set, regardless of whether or
+not it has the read and/or write flags set.
+
+These warnings are enabled by default. They can be disabled via the
+@option{--no-warn-rwx-segments} option and re-enabled via the
+@option{--warn-rwx-segments} option.
+
@kindex --warn-section-align
@cindex warnings, on section alignment
@cindex section alignment, warnings on
@@ -3912,7 +3966,7 @@ check a list of possible entry symbols, matching the first one found.
@item
the address of the first byte of the code section, if present and an
executable is being created - the code section is usually
-@samp{.text}, but can be something else;
+@samp{.text}, but can be something else;
@item
The address @code{0}.
@end itemize
@@ -5472,13 +5526,23 @@ loaded into memory when the program is run.
@item READONLY
The section should be marked as read-only.
@item DSECT
-@itemx COPY
-@itemx INFO
-@itemx OVERLAY
+@item COPY
+@item INFO
+@item OVERLAY
These type names are supported for backward compatibility, and are
rarely used. They all have the same effect: the section should be
marked as not allocatable, so that no memory is allocated for the
section when the program is run.
+@item TYPE = @var{type}
+Set the section type to the integer @var{type}. When generating an ELF
+output file, type names @code{SHT_PROGBITS}, @code{SHT_STRTAB},
+@code{SHT_NOTE}, @code{SHT_NOBITS}, @code{SHT_INIT_ARRAY},
+@code{SHT_FINI_ARRAY}, and @code{SHT_PREINIT_ARRAY} are also allowed
+for @var{type}. It is the user's responsibility to ensure that any
+special requirements of the section type are met.
+@item READONLY ( TYPE = @var{type} )
+This form of the syntax combines the @var{READONLY} type with the
+type specified by @var{type}.
@end table
@kindex NOLOAD
diff --git a/ld/ldelf.c b/ld/ldelf.c
index d15f027e91a..4094640b3f7 100644
--- a/ld/ldelf.c
+++ b/ld/ldelf.c
@@ -71,10 +71,26 @@ ldelf_after_parse (void)
einfo (_("%P: warning: -z dynamic-undefined-weak ignored\n"));
link_info.dynamic_undefined_weak = 0;
}
+
+ /* Disable DT_RELR if not building PIE nor shared library. */
+ if (!bfd_link_pic (&link_info))
+ link_info.enable_dt_relr = 0;
+
+ /* Add 3 spare tags for DT_RELR, DT_RELRSZ and DT_RELRENT. */
+ if (link_info.enable_dt_relr)
+ link_info.spare_dynamic_tags += 3;
+
after_parse_default ();
if (link_info.commonpagesize > link_info.maxpagesize)
- einfo (_("%F%P: common page size (0x%v) > maximum page size (0x%v)\n"),
- link_info.commonpagesize, link_info.maxpagesize);
+ {
+ if (!link_info.commonpagesize_is_set)
+ link_info.commonpagesize = link_info.maxpagesize;
+ else if (!link_info.maxpagesize_is_set)
+ link_info.maxpagesize = link_info.commonpagesize;
+ else
+ einfo (_("%F%P: common page size (0x%v) > maximum page size (0x%v)\n"),
+ link_info.commonpagesize, link_info.maxpagesize);
+ }
}
/* Handle the generation of DT_NEEDED tags. */
@@ -989,173 +1005,15 @@ ldelf_check_needed (lang_input_statement_type *s)
}
}
-/* This is called after all the input files have been opened. */
-
-void
-ldelf_after_open (int use_libpath, int native, int is_linux, int is_freebsd,
- int elfsize, const char *prefix)
+static void
+ldelf_handle_dt_needed (struct elf_link_hash_table *htab,
+ int use_libpath, int native, int is_linux,
+ int is_freebsd, int elfsize, const char *prefix)
{
struct bfd_link_needed_list *needed, *l;
- struct elf_link_hash_table *htab;
- asection *s;
bfd *abfd;
bfd **save_input_bfd_tail;
- after_open_default ();
-
- htab = elf_hash_table (&link_info);
- if (!is_elf_hash_table (&htab->root))
- return;
-
- if (command_line.out_implib_filename)
- {
- unlink_if_ordinary (command_line.out_implib_filename);
- link_info.out_implib_bfd
- = bfd_openw (command_line.out_implib_filename,
- bfd_get_target (link_info.output_bfd));
-
- if (link_info.out_implib_bfd == NULL)
- {
- einfo (_("%F%P: %s: can't open for writing: %E\n"),
- command_line.out_implib_filename);
- }
- }
-
- if (ldelf_emit_note_gnu_build_id != NULL)
- {
- /* Find an ELF input. */
- for (abfd = link_info.input_bfds;
- abfd != (bfd *) NULL; abfd = abfd->link.next)
- if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
- && bfd_count_sections (abfd) != 0
- && !bfd_input_just_syms (abfd))
- break;
-
- /* PR 10555: If there are no ELF input files do not try to
- create a .note.gnu-build-id section. */
- if (abfd == NULL
- || !ldelf_setup_build_id (abfd))
- {
- free ((char *) ldelf_emit_note_gnu_build_id);
- ldelf_emit_note_gnu_build_id = NULL;
- }
- }
-
- get_elf_backend_data (link_info.output_bfd)->setup_gnu_properties (&link_info);
-
- /* Do not allow executable files to be used as inputs to the link. */
- for (abfd = link_info.input_bfds; abfd; abfd = abfd->link.next)
- {
- /* Discard input .note.gnu.build-id sections. */
- s = bfd_get_section_by_name (abfd, ".note.gnu.build-id");
- while (s != NULL)
- {
- if (s != elf_tdata (link_info.output_bfd)->o->build_id.sec)
- s->flags |= SEC_EXCLUDE;
- s = bfd_get_next_section_by_name (NULL, s);
- }
-
- if (abfd->xvec->flavour == bfd_target_elf_flavour
- && !bfd_input_just_syms (abfd)
- && elf_tdata (abfd) != NULL
- /* FIXME: Maybe check for other non-supportable types as well ? */
- && (elf_tdata (abfd)->elf_header->e_type == ET_EXEC
- || (elf_tdata (abfd)->elf_header->e_type == ET_DYN
- && elf_tdata (abfd)->is_pie)))
- einfo (_("%F%P: cannot use executable file '%pB' as input to a link\n"),
- abfd);
- }
-
- if (bfd_link_relocatable (&link_info))
- {
- if (link_info.execstack == !link_info.noexecstack)
- {
- /* PR ld/16744: If "-z [no]execstack" has been specified on the
- command line and we are perfoming a relocatable link then no
- PT_GNU_STACK segment will be created and so the
- linkinfo.[no]execstack values set in _handle_option() will have no
- effect. Instead we create a .note.GNU-stack section in much the
- same way as the assembler does with its --[no]execstack option. */
- flagword flags = SEC_READONLY | (link_info.execstack ? SEC_CODE : 0);
- (void) bfd_make_section_with_flags (link_info.input_bfds,
- ".note.GNU-stack", flags);
- }
- return;
- }
-
- if (!link_info.traditional_format)
- {
- bfd *elfbfd = NULL;
- bool warn_eh_frame = false;
- int seen_type = 0;
-
- for (abfd = link_info.input_bfds; abfd; abfd = abfd->link.next)
- {
- int type = 0;
-
- if (bfd_input_just_syms (abfd))
- continue;
-
- for (s = abfd->sections; s && type < COMPACT_EH_HDR; s = s->next)
- {
- const char *name = bfd_section_name (s);
-
- if (bfd_is_abs_section (s->output_section))
- continue;
- if (startswith (name, ".eh_frame_entry"))
- type = COMPACT_EH_HDR;
- else if (strcmp (name, ".eh_frame") == 0 && s->size > 8)
- type = DWARF2_EH_HDR;
- }
-
- if (type != 0)
- {
- if (seen_type == 0)
- {
- seen_type = type;
- }
- else if (seen_type != type)
- {
- einfo (_("%F%P: compact frame descriptions incompatible with"
- " DWARF2 .eh_frame from %pB\n"),
- type == DWARF2_EH_HDR ? abfd : elfbfd);
- break;
- }
-
- if (!elfbfd
- && (type == COMPACT_EH_HDR
- || link_info.eh_frame_hdr_type != 0))
- {
- if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
- elfbfd = abfd;
-
- warn_eh_frame = true;
- }
- }
-
- if (seen_type == COMPACT_EH_HDR)
- link_info.eh_frame_hdr_type = COMPACT_EH_HDR;
- }
- if (elfbfd)
- {
- const struct elf_backend_data *bed;
-
- bed = get_elf_backend_data (elfbfd);
- s = bfd_make_section_with_flags (elfbfd, ".eh_frame_hdr",
- bed->dynamic_sec_flags
- | SEC_READONLY);
- if (s != NULL
- && bfd_set_section_alignment (s, 2))
- {
- htab->eh_info.hdr_sec = s;
- warn_eh_frame = false;
- }
- }
- if (warn_eh_frame)
- einfo (_("%P: warning: cannot create .eh_frame_hdr section,"
- " --eh-frame-hdr ignored\n"));
- }
-
/* Get the list of files which appear in DT_NEEDED entries in
dynamic objects included in the link (often there will be none).
For each such file, we want to track down the corresponding
@@ -1179,10 +1037,12 @@ ldelf_after_open (int use_libpath, int native, int is_linux, int is_freebsd,
&& (bfd_elf_get_dyn_lib_class (l->by) & DYN_AS_NEEDED) != 0)
continue;
- /* Skip the lib if --no-copy-dt-needed-entries and
- --allow-shlib-undefined is in effect. */
+ /* Skip the lib if --no-copy-dt-needed-entries and when we are
+ handling DT_NEEDED entries or --allow-shlib-undefined is in
+ effect. */
if (l->by != NULL
- && link_info.unresolved_syms_in_shared_libs == RM_IGNORE
+ && (htab->handling_dt_needed
+ || link_info.unresolved_syms_in_shared_libs == RM_IGNORE)
&& (bfd_elf_get_dyn_lib_class (l->by) & DYN_NO_ADD_NEEDED) != 0)
continue;
@@ -1322,23 +1182,214 @@ ldelf_after_open (int use_libpath, int native, int is_linux, int is_freebsd,
l->name, l->by);
}
- for (abfd = link_info.input_bfds; abfd; abfd = abfd->link.next)
- if (bfd_get_format (abfd) == bfd_object
- && ((abfd->flags) & DYNAMIC) != 0
- && bfd_get_flavour (abfd) == bfd_target_elf_flavour
- && (elf_dyn_lib_class (abfd) & (DYN_AS_NEEDED | DYN_NO_NEEDED)) == 0
- && elf_dt_name (abfd) != NULL)
- {
- if (bfd_elf_add_dt_needed_tag (abfd, &link_info) < 0)
- einfo (_("%F%P: failed to add DT_NEEDED dynamic tag\n"));
- }
+ /* Don't add DT_NEEDED when loading shared objects from DT_NEEDED for
+ plugin symbol resolution while handling DT_NEEDED entries. */
+ if (!htab->handling_dt_needed)
+ for (abfd = link_info.input_bfds; abfd; abfd = abfd->link.next)
+ if (bfd_get_format (abfd) == bfd_object
+ && ((abfd->flags) & DYNAMIC) != 0
+ && bfd_get_flavour (abfd) == bfd_target_elf_flavour
+ && (elf_dyn_lib_class (abfd) & (DYN_AS_NEEDED | DYN_NO_NEEDED)) == 0
+ && elf_dt_name (abfd) != NULL)
+ {
+ if (bfd_elf_add_dt_needed_tag (abfd, &link_info) < 0)
+ einfo (_("%F%P: failed to add DT_NEEDED dynamic tag\n"));
+ }
link_info.input_bfds_tail = save_input_bfd_tail;
*save_input_bfd_tail = NULL;
+}
+
+/* This is called before calling plugin 'all symbols read' hook. */
+
+void
+ldelf_before_plugin_all_symbols_read (int use_libpath, int native,
+ int is_linux, int is_freebsd,
+ int elfsize, const char *prefix)
+{
+ struct elf_link_hash_table *htab = elf_hash_table (&link_info);
+
+ if (!is_elf_hash_table (&htab->root))
+ return;
+
+ htab->handling_dt_needed = true;
+ ldelf_handle_dt_needed (htab, use_libpath, native, is_linux,
+ is_freebsd, elfsize, prefix);
+ htab->handling_dt_needed = false;
+}
+
+/* This is called after all the input files have been opened and all
+ symbols have been loaded. */
+
+void
+ldelf_after_open (int use_libpath, int native, int is_linux, int is_freebsd,
+ int elfsize, const char *prefix)
+{
+ struct elf_link_hash_table *htab;
+ asection *s;
+ bfd *abfd;
+
+ after_open_default ();
+
+ htab = elf_hash_table (&link_info);
+ if (!is_elf_hash_table (&htab->root))
+ return;
+
+ if (command_line.out_implib_filename)
+ {
+ unlink_if_ordinary (command_line.out_implib_filename);
+ link_info.out_implib_bfd
+ = bfd_openw (command_line.out_implib_filename,
+ bfd_get_target (link_info.output_bfd));
+
+ if (link_info.out_implib_bfd == NULL)
+ {
+ einfo (_("%F%P: %s: can't open for writing: %E\n"),
+ command_line.out_implib_filename);
+ }
+ }
+
+ if (ldelf_emit_note_gnu_build_id != NULL)
+ {
+ /* Find an ELF input. */
+ for (abfd = link_info.input_bfds;
+ abfd != (bfd *) NULL; abfd = abfd->link.next)
+ if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
+ && bfd_count_sections (abfd) != 0
+ && !bfd_input_just_syms (abfd))
+ break;
+
+ /* PR 10555: If there are no ELF input files do not try to
+ create a .note.gnu-build-id section. */
+ if (abfd == NULL
+ || !ldelf_setup_build_id (abfd))
+ {
+ free ((char *) ldelf_emit_note_gnu_build_id);
+ ldelf_emit_note_gnu_build_id = NULL;
+ }
+ }
+
+ get_elf_backend_data (link_info.output_bfd)->setup_gnu_properties (&link_info);
+
+ /* Do not allow executable files to be used as inputs to the link. */
+ for (abfd = link_info.input_bfds; abfd; abfd = abfd->link.next)
+ {
+ /* Discard input .note.gnu.build-id sections. */
+ s = bfd_get_section_by_name (abfd, ".note.gnu.build-id");
+ while (s != NULL)
+ {
+ if (s != elf_tdata (link_info.output_bfd)->o->build_id.sec)
+ s->flags |= SEC_EXCLUDE;
+ s = bfd_get_next_section_by_name (NULL, s);
+ }
+
+ if (abfd->xvec->flavour == bfd_target_elf_flavour
+ && !bfd_input_just_syms (abfd)
+ && elf_tdata (abfd) != NULL
+ /* FIXME: Maybe check for other non-supportable types as well ? */
+ && (elf_tdata (abfd)->elf_header->e_type == ET_EXEC
+ || (elf_tdata (abfd)->elf_header->e_type == ET_DYN
+ && elf_tdata (abfd)->is_pie)))
+ einfo (_("%F%P: cannot use executable file '%pB' as input to a link\n"),
+ abfd);
+ }
+
+ if (bfd_link_relocatable (&link_info))
+ {
+ if (link_info.execstack == !link_info.noexecstack)
+ {
+ /* PR ld/16744: If "-z [no]execstack" has been specified on the
+ command line and we are perfoming a relocatable link then no
+ PT_GNU_STACK segment will be created and so the
+ linkinfo.[no]execstack values set in _handle_option() will have no
+ effect. Instead we create a .note.GNU-stack section in much the
+ same way as the assembler does with its --[no]execstack option. */
+ flagword flags = SEC_READONLY | (link_info.execstack ? SEC_CODE : 0);
+ (void) bfd_make_section_with_flags (link_info.input_bfds,
+ ".note.GNU-stack", flags);
+ }
+ return;
+ }
+
+ if (!link_info.traditional_format)
+ {
+ bfd *elfbfd = NULL;
+ bool warn_eh_frame = false;
+ int seen_type = 0;
+
+ for (abfd = link_info.input_bfds; abfd; abfd = abfd->link.next)
+ {
+ int type = 0;
+
+ if (bfd_input_just_syms (abfd))
+ continue;
+
+ for (s = abfd->sections; s && type < COMPACT_EH_HDR; s = s->next)
+ {
+ const char *name = bfd_section_name (s);
+
+ if (bfd_is_abs_section (s->output_section))
+ continue;
+ if (startswith (name, ".eh_frame_entry"))
+ type = COMPACT_EH_HDR;
+ else if (strcmp (name, ".eh_frame") == 0 && s->size > 8)
+ type = DWARF2_EH_HDR;
+ }
+
+ if (type != 0)
+ {
+ if (seen_type == 0)
+ {
+ seen_type = type;
+ }
+ else if (seen_type != type)
+ {
+ einfo (_("%F%P: compact frame descriptions incompatible with"
+ " DWARF2 .eh_frame from %pB\n"),
+ type == DWARF2_EH_HDR ? abfd : elfbfd);
+ break;
+ }
+
+ if (!elfbfd
+ && (type == COMPACT_EH_HDR
+ || link_info.eh_frame_hdr_type != 0))
+ {
+ if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
+ elfbfd = abfd;
+
+ warn_eh_frame = true;
+ }
+ }
+
+ if (seen_type == COMPACT_EH_HDR)
+ link_info.eh_frame_hdr_type = COMPACT_EH_HDR;
+ }
+ if (elfbfd)
+ {
+ const struct elf_backend_data *bed;
+
+ bed = get_elf_backend_data (elfbfd);
+ s = bfd_make_section_with_flags (elfbfd, ".eh_frame_hdr",
+ bed->dynamic_sec_flags
+ | SEC_READONLY);
+ if (s != NULL
+ && bfd_set_section_alignment (s, 2))
+ {
+ htab->eh_info.hdr_sec = s;
+ warn_eh_frame = false;
+ }
+ }
+ if (warn_eh_frame)
+ einfo (_("%P: warning: cannot create .eh_frame_hdr section,"
+ " --eh-frame-hdr ignored\n"));
+ }
if (link_info.eh_frame_hdr_type == COMPACT_EH_HDR)
if (!bfd_elf_parse_eh_frame_entries (NULL, &link_info))
einfo (_("%F%P: failed to parse EH frame entries\n"));
+
+ ldelf_handle_dt_needed (htab, use_libpath, native, is_linux,
+ is_freebsd, elfsize, prefix);
}
static bfd_size_type
@@ -1591,11 +1642,6 @@ ldelf_before_allocation (char *audit, char *depaudit,
|| h->root.type == bfd_link_hash_undefweak
|| h->root.type == bfd_link_hash_common))
{
- const struct elf_backend_data *bed;
- bed = get_elf_backend_data (link_info.output_bfd);
- (*bed->elf_backend_hide_symbol) (&link_info, h, true);
- if (ELF_ST_VISIBILITY (h->other) != STV_INTERNAL)
- h->other = (h->other & ~ELF_ST_VISIBILITY (-1)) | STV_HIDDEN;
/* Don't leave the symbol undefined. Undefined hidden
symbols typically won't have dynamic relocations, but
we most likely will need dynamic relocations for
@@ -1608,7 +1654,6 @@ ldelf_before_allocation (char *audit, char *depaudit,
sizeof ehdr_start_save_u);
ehdr_start->type = bfd_link_hash_defined;
/* It will be converted to section-relative later. */
- ehdr_start->rel_from_abs = 1;
ehdr_start->u.def.section = bfd_abs_section_ptr;
ehdr_start->u.def.value = 0;
}
diff --git a/ld/ldelf.h b/ld/ldelf.h
index 0da26c9ea76..efa8b45851c 100644
--- a/ld/ldelf.h
+++ b/ld/ldelf.h
@@ -22,6 +22,8 @@ extern const char *ldelf_emit_note_gnu_build_id;
extern void ldelf_after_parse (void);
extern bool ldelf_load_symbols (lang_input_statement_type *);
+extern void ldelf_before_plugin_all_symbols_read (int, int, int, int,
+ int, const char *);
extern void ldelf_after_open (int, int, int, int, int, const char *);
extern bool ldelf_setup_build_id (bfd *);
extern void ldelf_append_to_separated_string (char **, char *);
diff --git a/ld/ldelfgen.c b/ld/ldelfgen.c
index 5c033bbfbe0..58b37c65bc9 100644
--- a/ld/ldelfgen.c
+++ b/ld/ldelfgen.c
@@ -304,7 +304,8 @@ ldelf_map_segments (bool need_layout)
if (lang_phdr_list == NULL)
elf_seg_map (link_info.output_bfd) = NULL;
if (!_bfd_elf_map_sections_to_segments (link_info.output_bfd,
- &link_info))
+ &link_info,
+ &need_layout))
einfo (_("%F%P: map sections to segments failed: %E\n"));
if (phdr_size != elf_program_header_size (link_info.output_bfd))
diff --git a/ld/ldemul.c b/ld/ldemul.c
index 5c5adef06bb..4c8cad81f98 100644
--- a/ld/ldemul.c
+++ b/ld/ldemul.c
@@ -60,6 +60,13 @@ ldemul_before_parse (void)
}
void
+ldemul_before_plugin_all_symbols_read (void)
+{
+ if (ld_emulation->before_plugin_all_symbols_read)
+ ld_emulation->before_plugin_all_symbols_read ();
+}
+
+void
ldemul_after_open (void)
{
ld_emulation->after_open ();
@@ -235,8 +242,7 @@ after_parse_default (void)
if (link_info.maxpagesize == 0)
link_info.maxpagesize = bfd_emul_get_maxpagesize (default_target);
if (link_info.commonpagesize == 0)
- link_info.commonpagesize = bfd_emul_get_commonpagesize (default_target,
- link_info.relro);
+ link_info.commonpagesize = bfd_emul_get_commonpagesize (default_target);
}
void
diff --git a/ld/ldemul.h b/ld/ldemul.h
index 33e690d78ac..16a3b6991bd 100644
--- a/ld/ldemul.h
+++ b/ld/ldemul.h
@@ -32,6 +32,8 @@ extern void ldemul_after_parse
(void);
extern void ldemul_before_parse
(void);
+extern void ldemul_before_plugin_all_symbols_read
+ (void);
extern void ldemul_after_open
(void);
extern void ldemul_after_check_relocs
@@ -131,6 +133,9 @@ typedef struct ld_emulation_xfer_struct {
/* Run after parsing the command line and script file. */
void (*after_parse) (void);
+ /* Run before calling plugin 'all symbols read' hook. */
+ void (*before_plugin_all_symbols_read) (void);
+
/* Run after opening all input files, and loading the symbols. */
void (*after_open) (void);
diff --git a/ld/ldexp.c b/ld/ldexp.c
index 5f904aaf8ae..c18b8284ca5 100644
--- a/ld/ldexp.c
+++ b/ld/ldexp.c
@@ -340,8 +340,10 @@ update_definedness (const char *name, struct bfd_link_hash_entry *h)
}
static void
-fold_segment_end (seg_align_type *seg)
+fold_segment_end (void)
{
+ seg_align_type *seg = &expld.dataseg;
+
if (expld.phase == lang_first_phase_enum
|| expld.section != bfd_abs_section_ptr)
{
@@ -410,7 +412,7 @@ fold_unary (etree_type *tree)
break;
case DATA_SEGMENT_END:
- fold_segment_end (&expld.dataseg);
+ fold_segment_end ();
break;
default:
@@ -447,8 +449,10 @@ arith_result_section (const etree_value_type *lhs)
}
static void
-fold_segment_align (seg_align_type *seg, etree_value_type *lhs)
+fold_segment_align (etree_value_type *lhs)
{
+ seg_align_type *seg = &expld.dataseg;
+
seg->relro = exp_seg_relro_start;
if (expld.phase == lang_first_phase_enum
|| expld.section != bfd_abs_section_ptr)
@@ -469,7 +473,8 @@ fold_segment_align (seg_align_type *seg, etree_value_type *lhs)
}
else
{
- expld.result.value += expld.dot & (maxpage - 1);
+ if (!link_info.relro)
+ expld.result.value += expld.dot & (maxpage - 1);
if (seg->phase == exp_seg_done)
{
/* OK. */
@@ -478,8 +483,9 @@ fold_segment_align (seg_align_type *seg, etree_value_type *lhs)
{
seg->phase = exp_seg_align_seen;
seg->base = expld.result.value;
- seg->pagesize = commonpage;
+ seg->commonpagesize = commonpage;
seg->maxpagesize = maxpage;
+ seg->relropagesize = maxpage;
seg->relro_end = 0;
}
else
@@ -489,8 +495,10 @@ fold_segment_align (seg_align_type *seg, etree_value_type *lhs)
}
static void
-fold_segment_relro_end (seg_align_type *seg, etree_value_type *lhs)
+fold_segment_relro_end (etree_value_type *lhs)
{
+ seg_align_type *seg = &expld.dataseg;
+
/* Operands swapped! XXX_SEGMENT_RELRO_END(offset,exp) has offset
in expld.result and exp in lhs. */
seg->relro = exp_seg_relro_end;
@@ -508,10 +516,10 @@ fold_segment_relro_end (seg_align_type *seg, etree_value_type *lhs)
seg->relro_end = lhs->value + expld.result.value;
if (seg->phase == exp_seg_relro_adjust
- && (seg->relro_end & (seg->pagesize - 1)))
+ && (seg->relro_end & (seg->relropagesize - 1)))
{
- seg->relro_end += seg->pagesize - 1;
- seg->relro_end &= ~(seg->pagesize - 1);
+ seg->relro_end += seg->relropagesize - 1;
+ seg->relro_end &= ~(seg->relropagesize - 1);
expld.result.value = seg->relro_end - expld.result.value;
}
else
@@ -657,11 +665,11 @@ fold_binary (etree_type *tree)
break;
case DATA_SEGMENT_ALIGN:
- fold_segment_align (&expld.dataseg, &lhs);
+ fold_segment_align (&lhs);
break;
case DATA_SEGMENT_RELRO_END:
- fold_segment_relro_end (&expld.dataseg, &lhs);
+ fold_segment_relro_end (&lhs);
break;
default:
diff --git a/ld/ldexp.h b/ld/ldexp.h
index ac4fa7e82b0..ed6fb8be715 100644
--- a/ld/ldexp.h
+++ b/ld/ldexp.h
@@ -136,7 +136,10 @@ enum relro_enum {
typedef struct {
enum phase_enum phase;
- bfd_vma base, relro_offset, relro_end, end, pagesize, maxpagesize;
+ bfd_vma base, relro_offset, relro_end, end;
+ /* MAXPAGESIZE and COMMMONPAGESIZE as passed to DATA_SEGMENT_ALIGN.
+ relropagesize sets the alignment of the end of the relro segment. */
+ bfd_vma maxpagesize, commonpagesize, relropagesize;
enum relro_enum relro;
diff --git a/ld/ldgram.y b/ld/ldgram.y
index 11c2f219c05..3a904e39482 100644
--- a/ld/ldgram.y
+++ b/ld/ldgram.y
@@ -47,6 +47,7 @@
#endif
static enum section_type sectype;
+static etree_type *sectype_value;
static lang_memory_region_type *region;
static bool ldgram_had_keep = false;
@@ -139,6 +140,7 @@ static int error_index;
%token LD_FEATURE
%token NOLOAD DSECT COPY INFO OVERLAY
%token READONLY
+%token TYPE
%token DEFINED TARGET_K SEARCH_DIR MAP ENTRY
%token <integer> NEXT
%token SIZEOF ALIGNOF ADDR LOADADDR MAX_K MIN_K
@@ -1058,9 +1060,8 @@ section: NAME
{
ldlex_popstate ();
ldlex_wild ();
- lang_enter_output_section_statement($1, $3, sectype,
- $5, $7, $4,
- $8, $6);
+ lang_enter_output_section_statement ($1, $3, sectype,
+ sectype_value, $5, $7, $4, $8, $6);
}
'{'
statement_list_opt
@@ -1130,8 +1131,10 @@ type:
| COPY { sectype = noalloc_section; }
| INFO { sectype = noalloc_section; }
| OVERLAY { sectype = noalloc_section; }
+ | READONLY '(' TYPE '=' exp ')' { sectype = typed_readonly_section; sectype_value = $5; }
| READONLY { sectype = readonly_section; }
- ;
+ | TYPE '=' exp { sectype = type_section; sectype_value = $3; }
+ ;
atype:
'(' type ')'
diff --git a/ld/ldlang.c b/ld/ldlang.c
index 9dbc8752f87..f10557af842 100644
--- a/ld/ldlang.c
+++ b/ld/ldlang.c
@@ -1891,8 +1891,8 @@ lang_insert_orphan (asection *s,
address = exp_intop (0);
os_tail = (lang_output_section_statement_type **) lang_os_list.tail;
- os = lang_enter_output_section_statement (secname, address, normal_section,
- NULL, NULL, NULL, constraint, 0);
+ os = lang_enter_output_section_statement (
+ secname, address, normal_section, 0, NULL, NULL, NULL, constraint, 0);
if (add_child == NULL)
add_child = &os->children;
@@ -2635,10 +2635,12 @@ lang_add_section (lang_statement_list_type *ptr,
case normal_section:
case overlay_section:
case first_overlay_section:
+ case type_section:
break;
case noalloc_section:
flags &= ~SEC_ALLOC;
break;
+ case typed_readonly_section:
case readonly_section:
flags |= SEC_READONLY;
break;
@@ -2701,6 +2703,16 @@ lang_add_section (lang_statement_list_type *ptr,
output->block_value = 128;
}
+ /* When a .ctors section is placed in .init_array it must be copied
+ in reverse order. Similarly for .dtors. Set that up. */
+ if (bfd_get_flavour (link_info.output_bfd) == bfd_target_elf_flavour
+ && ((startswith (section->name, ".ctors")
+ && strcmp (output->bfd_section->name, ".init_array") == 0)
+ || (startswith (section->name, ".dtors")
+ && strcmp (output->bfd_section->name, ".fini_array") == 0))
+ && (section->name[6] == 0 || section->name[6] == '.'))
+ section->flags |= SEC_ELF_REVERSE_COPY;
+
if (section->alignment_power > output->bfd_section->alignment_power)
output->bfd_section->alignment_power = section->alignment_power;
@@ -4199,6 +4211,7 @@ map_input_to_output_sections
{
lang_output_section_statement_type *tos;
flagword flags;
+ unsigned int type = 0;
switch (s->header.type)
{
@@ -4254,6 +4267,42 @@ map_input_to_output_sections
case readonly_section:
flags |= SEC_READONLY;
break;
+ case typed_readonly_section:
+ flags |= SEC_READONLY;
+ /* Fall through. */
+ case type_section:
+ if (os->sectype_value->type.node_class == etree_name
+ && os->sectype_value->type.node_code == NAME)
+ {
+ const char *name = os->sectype_value->name.name;
+ if (strcmp (name, "SHT_PROGBITS") == 0)
+ type = SHT_PROGBITS;
+ else if (strcmp (name, "SHT_STRTAB") == 0)
+ type = SHT_STRTAB;
+ else if (strcmp (name, "SHT_NOTE") == 0)
+ type = SHT_NOTE;
+ else if (strcmp (name, "SHT_NOBITS") == 0)
+ type = SHT_NOBITS;
+ else if (strcmp (name, "SHT_INIT_ARRAY") == 0)
+ type = SHT_INIT_ARRAY;
+ else if (strcmp (name, "SHT_FINI_ARRAY") == 0)
+ type = SHT_FINI_ARRAY;
+ else if (strcmp (name, "SHT_PREINIT_ARRAY") == 0)
+ type = SHT_PREINIT_ARRAY;
+ else
+ einfo (_ ("%F%P: invalid type for output section `%s'\n"),
+ os->name);
+ }
+ else
+ {
+ exp_fold_tree_no_dot (os->sectype_value);
+ if (expld.result.valid_p)
+ type = expld.result.value;
+ else
+ einfo (_ ("%F%P: invalid type for output section `%s'\n"),
+ os->name);
+ }
+ break;
case noload_section:
if (bfd_get_flavour (link_info.output_bfd)
== bfd_target_elf_flavour)
@@ -4266,6 +4315,7 @@ map_input_to_output_sections
init_os (os, flags | SEC_READONLY);
else
os->bfd_section->flags |= flags;
+ os->bfd_section->type = type;
break;
case lang_input_section_enum:
break;
@@ -5655,9 +5705,10 @@ os_region_check (lang_output_section_statement_type *os,
}
static void
-ldlang_check_relro_region (lang_statement_union_type *s,
- seg_align_type *seg)
+ldlang_check_relro_region (lang_statement_union_type *s)
{
+ seg_align_type *seg = &expld.dataseg;
+
if (seg->relro == exp_seg_relro_start)
{
if (!seg->relro_start_stat)
@@ -6156,7 +6207,7 @@ lang_size_sections_1
output_section_statement->bfd_section,
&newdot);
- ldlang_check_relro_region (s, &expld.dataseg);
+ ldlang_check_relro_region (s);
expld.dataseg.relro = exp_seg_relro_none;
@@ -6336,18 +6387,19 @@ one_lang_size_sections_pass (bool *relax, bool check_regions)
}
static bool
-lang_size_segment (seg_align_type *seg)
+lang_size_segment (void)
{
/* If XXX_SEGMENT_ALIGN XXX_SEGMENT_END pair was seen, check whether
a page could be saved in the data segment. */
+ seg_align_type *seg = &expld.dataseg;
bfd_vma first, last;
- first = -seg->base & (seg->pagesize - 1);
- last = seg->end & (seg->pagesize - 1);
+ first = -seg->base & (seg->commonpagesize - 1);
+ last = seg->end & (seg->commonpagesize - 1);
if (first && last
- && ((seg->base & ~(seg->pagesize - 1))
- != (seg->end & ~(seg->pagesize - 1)))
- && first + last <= seg->pagesize)
+ && ((seg->base & ~(seg->commonpagesize - 1))
+ != (seg->end & ~(seg->commonpagesize - 1)))
+ && first + last <= seg->commonpagesize)
{
seg->phase = exp_seg_adjust;
return true;
@@ -6358,14 +6410,14 @@ lang_size_segment (seg_align_type *seg)
}
static bfd_vma
-lang_size_relro_segment_1 (seg_align_type *seg)
+lang_size_relro_segment_1 (void)
{
+ seg_align_type *seg = &expld.dataseg;
bfd_vma relro_end, desired_end;
asection *sec;
/* Compute the expected PT_GNU_RELRO/PT_LOAD segment end. */
- relro_end = ((seg->relro_end + seg->pagesize - 1)
- & ~(seg->pagesize - 1));
+ relro_end = (seg->relro_end + seg->relropagesize - 1) & -seg->relropagesize;
/* Adjust by the offset arg of XXX_SEGMENT_RELRO_END. */
desired_end = relro_end - seg->relro_offset;
@@ -6402,36 +6454,24 @@ static bool
lang_size_relro_segment (bool *relax, bool check_regions)
{
bool do_reset = false;
- bool do_data_relro;
- bfd_vma data_initial_base, data_relro_end;
if (link_info.relro && expld.dataseg.relro_end)
{
- do_data_relro = true;
- data_initial_base = expld.dataseg.base;
- data_relro_end = lang_size_relro_segment_1 (&expld.dataseg);
- }
- else
- {
- do_data_relro = false;
- data_initial_base = data_relro_end = 0;
- }
+ bfd_vma data_initial_base = expld.dataseg.base;
+ bfd_vma data_relro_end = lang_size_relro_segment_1 ();
- if (do_data_relro)
- {
lang_reset_memory_regions ();
one_lang_size_sections_pass (relax, check_regions);
/* Assignments to dot, or to output section address in a user
script have increased padding over the original. Revert. */
- if (do_data_relro && expld.dataseg.relro_end > data_relro_end)
+ if (expld.dataseg.relro_end > data_relro_end)
{
- expld.dataseg.base = data_initial_base;;
+ expld.dataseg.base = data_initial_base;
do_reset = true;
}
}
-
- if (!do_data_relro && lang_size_segment (&expld.dataseg))
+ else if (lang_size_segment ())
do_reset = true;
return do_reset;
@@ -6686,7 +6726,7 @@ section_for_dot (void)
if (stmt->header.type == lang_output_section_statement_enum)
break;
- os = &stmt->output_section_statement;
+ os = stmt ? &stmt->output_section_statement : NULL;
while (os != NULL
&& !os->after_end
&& (os->bfd_section == NULL
@@ -6932,6 +6972,44 @@ lang_finalize_start_stop (void)
}
static void
+lang_symbol_tweaks (void)
+{
+ /* Give initial values for __start and __stop symbols, so that ELF
+ gc_sections will keep sections referenced by these symbols. Must
+ be done before lang_do_assignments. */
+ if (config.build_constructors)
+ lang_init_start_stop ();
+
+ /* Make __ehdr_start hidden, and set def_regular even though it is
+ likely undefined at this stage. For lang_check_relocs. */
+ if (is_elf_hash_table (link_info.hash)
+ && !bfd_link_relocatable (&link_info))
+ {
+ struct elf_link_hash_entry *h = (struct elf_link_hash_entry *)
+ bfd_link_hash_lookup (link_info.hash, "__ehdr_start",
+ false, false, true);
+
+ /* Only adjust the export class if the symbol was referenced
+ and not defined, otherwise leave it alone. */
+ if (h != NULL
+ && (h->root.type == bfd_link_hash_new
+ || h->root.type == bfd_link_hash_undefined
+ || h->root.type == bfd_link_hash_undefweak
+ || h->root.type == bfd_link_hash_common))
+ {
+ const struct elf_backend_data *bed;
+ bed = get_elf_backend_data (link_info.output_bfd);
+ (*bed->elf_backend_hide_symbol) (&link_info, h, true);
+ if (ELF_ST_VISIBILITY (h->other) != STV_INTERNAL)
+ h->other = (h->other & ~ELF_ST_VISIBILITY (-1)) | STV_HIDDEN;
+ h->def_regular = 1;
+ h->root.linker_def = 1;
+ h->root.rel_from_abs = 1;
+ }
+ }
+}
+
+static void
lang_end (void)
{
struct bfd_link_hash_entry *h;
@@ -7468,6 +7546,7 @@ lang_output_section_statement_type *
lang_enter_output_section_statement (const char *output_section_statement_name,
etree_type *address_exp,
enum section_type sectype,
+ etree_type *sectype_value,
etree_type *align,
etree_type *subalign,
etree_type *ebase,
@@ -7485,10 +7564,12 @@ lang_enter_output_section_statement (const char *output_section_statement_name,
os->addr_tree = address_exp;
}
os->sectype = sectype;
- if (sectype != noload_section)
- os->flags = SEC_NO_FLAGS;
- else
+ if (sectype == type_section || sectype == typed_readonly_section)
+ os->sectype_value = sectype_value;
+ else if (sectype == noload_section)
os->flags = SEC_NEVER_LOAD;
+ else
+ os->flags = SEC_NO_FLAGS;
os->block_value = 1;
/* Make next things chain into subchain of this. */
@@ -7644,7 +7725,6 @@ find_relro_section_callback (lang_wild_statement_type *ptr ATTRIBUTE_UNUSED,
static void
lang_find_relro_sections_1 (lang_statement_union_type *s,
- seg_align_type *seg,
bool *has_relro_section)
{
if (*has_relro_section)
@@ -7652,7 +7732,7 @@ lang_find_relro_sections_1 (lang_statement_union_type *s,
for (; s != NULL; s = s->header.next)
{
- if (s == seg->relro_end_stat)
+ if (s == expld.dataseg.relro_end_stat)
break;
switch (s->header.type)
@@ -7664,15 +7744,15 @@ lang_find_relro_sections_1 (lang_statement_union_type *s,
break;
case lang_constructors_statement_enum:
lang_find_relro_sections_1 (constructor_list.head,
- seg, has_relro_section);
+ has_relro_section);
break;
case lang_output_section_statement_enum:
lang_find_relro_sections_1 (s->output_section_statement.children.head,
- seg, has_relro_section);
+ has_relro_section);
break;
case lang_group_statement_enum:
lang_find_relro_sections_1 (s->group_statement.children.head,
- seg, has_relro_section);
+ has_relro_section);
break;
default:
break;
@@ -7688,7 +7768,7 @@ lang_find_relro_sections (void)
/* Check all sections in the link script. */
lang_find_relro_sections_1 (expld.dataseg.relro_start_stat,
- &expld.dataseg, &has_relro_section);
+ &has_relro_section);
if (!has_relro_section)
link_info.relro = false;
@@ -7699,7 +7779,8 @@ lang_find_relro_sections (void)
void
lang_relax_sections (bool need_layout)
{
- if (RELAXATION_ENABLED)
+ /* NB: Also enable relaxation to layout sections for DT_RELR. */
+ if (RELAXATION_ENABLED || link_info.enable_dt_relr)
{
/* We may need more than one relaxation pass. */
int i = link_info.relax_pass;
@@ -7999,6 +8080,8 @@ lang_process (void)
lang_statement_list_type added;
lang_statement_list_type files, inputfiles;
+ ldemul_before_plugin_all_symbols_read ();
+
/* Now all files are read, let the plugin(s) decide if there
are any more to be added to the link before we call the
emulation's after_open hook. We create a private list of
@@ -8146,11 +8229,7 @@ lang_process (void)
files. */
ldctor_build_sets ();
- /* Give initial values for __start and __stop symbols, so that ELF
- gc_sections will keep sections referenced by these symbols. Must
- be done before lang_do_assignments below. */
- if (config.build_constructors)
- lang_init_start_stop ();
+ lang_symbol_tweaks ();
/* PR 13683: We must rerun the assignments prior to running garbage
collection in order to make sure that all symbol aliases are resolved. */
@@ -8808,7 +8887,7 @@ lang_enter_overlay_section (const char *name)
etree_type *size;
lang_enter_output_section_statement (name, overlay_vma, overlay_section,
- 0, overlay_subalign, 0, 0, 0);
+ 0, 0, overlay_subalign, 0, 0, 0);
/* If this is the first section, then base the VMA of future
sections on this one. This will work correctly even if `.' is
diff --git a/ld/ldlang.h b/ld/ldlang.h
index 0d057c9bee9..95f6e468b30 100644
--- a/ld/ldlang.h
+++ b/ld/ldlang.h
@@ -122,7 +122,9 @@ enum section_type
overlay_section,
noload_section,
noalloc_section,
- readonly_section
+ type_section,
+ readonly_section,
+ typed_readonly_section
};
/* This structure holds a list of program headers describing
@@ -166,6 +168,7 @@ typedef struct lang_output_section_statement_struct
int constraint;
flagword flags;
enum section_type sectype;
+ etree_type *sectype_value;
unsigned int processed_vma : 1;
unsigned int processed_lma : 1;
unsigned int all_input_readonly : 1;
@@ -545,7 +548,7 @@ extern void lang_add_output
(const char *, int from_script);
extern lang_output_section_statement_type *lang_enter_output_section_statement
(const char *, etree_type *, enum section_type, etree_type *, etree_type *,
- etree_type *, int, int);
+ etree_type *, etree_type *, int, int);
extern void lang_final
(void);
extern void lang_relax_sections
diff --git a/ld/ldlex.h b/ld/ldlex.h
index bc58fea73cc..57ade1f754b 100644
--- a/ld/ldlex.h
+++ b/ld/ldlex.h
@@ -164,10 +164,15 @@ enum option_values
OPTION_CTF_VARIABLES,
OPTION_NO_CTF_VARIABLES,
OPTION_CTF_SHARE_TYPES,
+ OPTION_WARN_EXECSTACK,
+ OPTION_NO_WARN_EXECSTACK,
+ OPTION_WARN_RWX_SEGMENTS,
+ OPTION_NO_WARN_RWX_SEGMENTS,
};
/* The initial parser states. */
-typedef enum input_enum {
+typedef enum input_enum
+{
input_selected, /* We've set the initial state. */
input_script,
input_mri_script,
diff --git a/ld/ldlex.l b/ld/ldlex.l
index 78db16e3a48..c38b46b9336 100644
--- a/ld/ldlex.l
+++ b/ld/ldlex.l
@@ -323,6 +323,7 @@ V_IDENTIFIER [*?.$_a-zA-Z\[\]\-\!\^\\]([*?.$_a-zA-Z0-9\[\]\-\!\^\\]|::)*
<EXPRESSION>"DSECT" { RTOKEN(DSECT); }
<EXPRESSION>"COPY" { RTOKEN(COPY); }
<EXPRESSION>"INFO" { RTOKEN(INFO); }
+<EXPRESSION>"TYPE" { RTOKEN(TYPE); }
<SCRIPT,EXPRESSION>"ONLY_IF_RO" { RTOKEN(ONLY_IF_RO); }
<SCRIPT,EXPRESSION>"ONLY_IF_RW" { RTOKEN(ONLY_IF_RW); }
<SCRIPT,EXPRESSION>"SPECIAL" { RTOKEN(SPECIAL); }
diff --git a/ld/lexsup.c b/ld/lexsup.c
index 5acc47ed5a0..78190472907 100644
--- a/ld/lexsup.c
+++ b/ld/lexsup.c
@@ -536,6 +536,14 @@ static const struct ld_option ld_options[] =
{ {"warn-constructors", no_argument, NULL, OPTION_WARN_CONSTRUCTORS},
'\0', NULL, N_("Warn if global constructors/destructors are seen"),
TWO_DASHES },
+ { {"warn-execstack", no_argument, NULL, OPTION_WARN_EXECSTACK},
+ '\0', NULL, N_("Warn when creating an executable stack"), TWO_DASHES },
+ { {"no-warn-execstack", no_argument, NULL, OPTION_NO_WARN_EXECSTACK},
+ '\0', NULL, N_("Do not warn when creating an executable stack"), TWO_DASHES },
+ { {"warn-rwx-segments", no_argument, NULL, OPTION_WARN_RWX_SEGMENTS},
+ '\0', NULL, N_("Warn when creating executable segments"), TWO_DASHES },
+ { {"no-warn-rwx-segments", no_argument, NULL, OPTION_NO_WARN_RWX_SEGMENTS},
+ '\0', NULL, N_("Do not warn when creating executable segments"), TWO_DASHES },
{ {"warn-multiple-gp", no_argument, NULL, OPTION_WARN_MULTIPLE_GP},
'\0', NULL, N_("Warn if the multiple GP values are used"), TWO_DASHES },
{ {"warn-once", no_argument, NULL, OPTION_WARN_ONCE},
@@ -915,6 +923,18 @@ parse_args (unsigned argc, char **argv)
case OPTION_NON_CONTIGUOUS_REGIONS_WARNINGS:
link_info.non_contiguous_regions_warnings = true;
break;
+ case OPTION_WARN_EXECSTACK:
+ link_info.warn_execstack = 1;
+ break;
+ case OPTION_NO_WARN_EXECSTACK:
+ link_info.warn_execstack = 2;
+ break;
+ case OPTION_WARN_RWX_SEGMENTS:
+ link_info.no_warn_rwx_segments = 0;
+ break;
+ case OPTION_NO_WARN_RWX_SEGMENTS:
+ link_info.no_warn_rwx_segments = 1;
+ break;
case 'e':
lang_add_entry (optarg, true);
break;
@@ -2149,6 +2169,31 @@ elf_static_list_options (FILE *file)
-z execstack Mark executable as requiring executable stack\n"));
fprintf (file, _("\
-z noexecstack Mark executable as not requiring executable stack\n"));
+#if DEFAULT_LD_WARN_EXECSTACK > 0
+ fprintf (file, _("\
+ --warn-execstack Generate a warning if the stack is executable (default)\n"));
+#else
+ fprintf (file, _("\
+ --warn-execstack Generate a warning if the stack is executable\n"));
+#endif
+#if DEFAULT_LD_WARN_EXECSTACK < 0
+ fprintf (file, _("\
+ --no-warn-execstack Do not generate a warning if the stack is executable (default)\n"));
+#else
+ fprintf (file, _("\
+ --no-warn-execstack Do not generate a warning if the stack is executable\n"));
+#endif
+#if DEFAULT_LD_WARN_RWX_SEGMENTS
+ fprintf (file, _("\
+ --warn-rwx-segments Generate a warning if a LOAD segment has RWX permissions (default)\n"));
+ fprintf (file, _("\
+ --no-warn-rwx-segments Do not generate a warning if a LOAD segments has RWX permissions\n"));
+#else
+ fprintf (file, _("\
+ --warn-rwx-segments Generate a warning if a LOAD segment has RWX permissions\n"));
+ fprintf (file, _("\
+ --no-warn-rwx-segments Do not generate a warning if a LOAD segments has RWX permissions (default)\n"));
+#endif
fprintf (file, _("\
-z unique-symbol Avoid duplicated local symbol names\n"));
fprintf (file, _("\
diff --git a/ld/libdep_plugin.c b/ld/libdep_plugin.c
index 5569aa45e36..453df71c15b 100644
--- a/ld/libdep_plugin.c
+++ b/ld/libdep_plugin.c
@@ -99,6 +99,7 @@ get_libdeps (int fd)
arhdr ah;
int len;
unsigned long mlen;
+ size_t amt;
linerec *lr;
enum ld_plugin_status rc = LDPS_NO_SYMS;
@@ -114,7 +115,10 @@ get_libdeps (int fd)
lseek (fd, mlen, SEEK_CUR);
continue;
}
- lr = malloc (sizeof (linerec) + mlen);
+ amt = mlen + sizeof (linerec);
+ if (amt <= mlen)
+ return LDPS_ERR;
+ lr = malloc (amt);
if (!lr)
return LDPS_ERR;
lr->next = NULL;
diff --git a/ld/mri.c b/ld/mri.c
index b428ab0d0bf..5749870ef1e 100644
--- a/ld/mri.c
+++ b/ld/mri.c
@@ -210,8 +210,8 @@ mri_draw_tree (void)
base = p->vma ? p->vma : exp_nameop (NAME, ".");
lang_enter_output_section_statement (p->name, base,
- p->ok_to_load ? normal_section : noload_section,
- align, subalign, NULL, 0, 0);
+ p->ok_to_load ? normal_section : noload_section, 0,
+ align, subalign, NULL, 0, 0);
base = 0;
tmp = (struct wildcard_list *) xmalloc (sizeof *tmp);
tmp->next = NULL;
diff --git a/ld/pe-dll.c b/ld/pe-dll.c
index 95de94b8474..ed68f66a95b 100644
--- a/ld/pe-dll.c
+++ b/ld/pe-dll.c
@@ -2084,8 +2084,12 @@ make_head (bfd *parent)
char *oname;
bfd *abfd;
- oname = xmalloc (20 + dll_symname_len);
- sprintf (oname, "%s_d%06d.o", dll_symname, tmp_seq);
+ if (asprintf (&oname, "%s_d%06d.o", dll_symname, tmp_seq) < 4)
+ /* In theory we should return NULL here at let our caller decide what to
+ do. But currently the return value is not checked, just used, and
+ besides, this condition only happens when the system has run out of
+ memory. So just give up. */
+ exit (EXIT_FAILURE);
tmp_seq++;
abfd = bfd_create (oname, parent);
@@ -2173,8 +2177,12 @@ make_tail (bfd *parent)
char *oname;
bfd *abfd;
- oname = xmalloc (20 + dll_symname_len);
- sprintf (oname, "%s_d%06d.o", dll_symname, tmp_seq);
+ if (asprintf (&oname, "%s_d%06d.o", dll_symname, tmp_seq) < 4)
+ /* In theory we should return NULL here at let our caller decide what to
+ do. But currently the return value is not checked, just used, and
+ besides, this condition only happens when the system has run out of
+ memory. So just give up. */
+ exit (EXIT_FAILURE);
tmp_seq++;
abfd = bfd_create (oname, parent);
@@ -2324,8 +2332,12 @@ make_one (def_file_export *exp, bfd *parent, bool include_jmp_stub)
}
}
- oname = xmalloc (20 + dll_symname_len);
- sprintf (oname, "%s_d%06d.o", dll_symname, tmp_seq);
+ if (asprintf (&oname, "%s_d%06d.o", dll_symname, tmp_seq) < 4)
+ /* In theory we should return NULL here at let our caller decide what to
+ do. But currently the return value is not checked, just used, and
+ besides, this condition only happens when the system has run out of
+ memory. So just give up. */
+ exit (EXIT_FAILURE);
tmp_seq++;
abfd = bfd_create (oname, parent);
@@ -2510,8 +2522,12 @@ make_singleton_name_thunk (const char *import, bfd *parent)
char *oname;
bfd *abfd;
- oname = xmalloc (20 + dll_symname_len);
- sprintf (oname, "%s_nmth%06d.o", dll_symname, tmp_seq);
+ if (asprintf (&oname, "%s_nmth%06d.o", dll_symname, tmp_seq) < 4)
+ /* In theory we should return NULL here at let our caller decide what to
+ do. But currently the return value is not checked, just used, and
+ besides, this condition only happens when the system has run out of
+ memory. So just give up. */
+ exit (EXIT_FAILURE);
tmp_seq++;
abfd = bfd_create (oname, parent);
@@ -2551,7 +2567,7 @@ make_import_fixup_mark (arelent *rel, char *name)
struct bfd_symbol *sym = *rel->sym_ptr_ptr;
bfd *abfd = bfd_asymbol_bfd (sym);
struct bfd_link_hash_entry *bh;
- char *fixup_name, buf[26];
+ char *fixup_name, buf[256];
size_t prefix_len;
/* "name" buffer has space before the symbol name for prefixes. */
@@ -2586,8 +2602,12 @@ make_import_fixup_entry (const char *name,
char *oname;
bfd *abfd;
- oname = xmalloc (20 + dll_symname_len);
- sprintf (oname, "%s_fu%06d.o", dll_symname, tmp_seq);
+ if (asprintf (&oname, "%s_fu%06d.o", dll_symname, tmp_seq) < 4)
+ /* In theory we should return NULL here at let our caller decide what to
+ do. But currently the return value is not checked, just used, and
+ besides, this condition only happens when the system has run out of
+ memory. So just give up. */
+ exit (EXIT_FAILURE);
tmp_seq++;
abfd = bfd_create (oname, parent);
@@ -2640,8 +2660,12 @@ make_runtime_pseudo_reloc (const char *name ATTRIBUTE_UNUSED,
bfd *abfd;
bfd_size_type size;
- oname = xmalloc (20 + dll_symname_len);
- sprintf (oname, "%s_rtr%06d.o", dll_symname, tmp_seq);
+ if (asprintf (&oname, "%s_rtr%06d.o", dll_symname, tmp_seq) < 4)
+ /* In theory we should return NULL here at let our caller decide what to
+ do. But currently the return value is not checked, just used, and
+ besides, this condition only happens when the system has run out of
+ memory. So just give up. */
+ exit (EXIT_FAILURE);
tmp_seq++;
abfd = bfd_create (oname, parent);
@@ -2727,8 +2751,12 @@ pe_create_runtime_relocator_reference (bfd *parent)
char *oname;
bfd *abfd;
- oname = xmalloc (20 + dll_symname_len);
- sprintf (oname, "%s_ertr%06d.o", dll_symname, tmp_seq);
+ if (asprintf (&oname, "%s_ertr%06d.o", dll_symname, tmp_seq) < 4)
+ /* In theory we should return NULL here at let our caller decide what to
+ do. But currently the return value is not checked, just used, and
+ besides, this condition only happens when the system has run out of
+ memory. So just give up. */
+ exit (EXIT_FAILURE);
tmp_seq++;
abfd = bfd_create (oname, parent);
diff --git a/ld/plugin.c b/ld/plugin.c
index 6db52d16802..fe203104677 100644
--- a/ld/plugin.c
+++ b/ld/plugin.c
@@ -863,8 +863,11 @@ get_symbols (const void *handle, int nsyms, struct ld_plugin_symbol *syms,
/* We need to know if the sym is referenced from non-IR files. Or
even potentially-referenced, perhaps in a future final link if
this is a partial one, perhaps dynamically at load-time if the
- symbol is externally visible. Also check for wrapper symbol. */
- if (blhe->non_ir_ref_regular || wrap_status == wrapper)
+ symbol is externally visible. Also check for __real_SYM
+ reference and wrapper symbol. */
+ if (blhe->non_ir_ref_regular
+ || blhe->ref_real
+ || wrap_status == wrapper)
res = LDPR_PREVAILING_DEF;
else if (wrap_status == wrapped)
res = LDPR_RESOLVED_IR;
diff --git a/ld/po/BLD-POTFILES.in b/ld/po/BLD-POTFILES.in
index 9f9500d8cb4..f2703a396ab 100644
--- a/ld/po/BLD-POTFILES.in
+++ b/ld/po/BLD-POTFILES.in
@@ -207,10 +207,6 @@ eelf_i386_ldso.c
eelf_i386_sol2.c
eelf_i386_vxworks.c
eelf_iamcu.c
-eelf_k1om.c
-eelf_k1om_fbsd.c
-eelf_l1om.c
-eelf_l1om_fbsd.c
eelf_mipsel_haiku.c
eelf_s390.c
eelf_x86_64.c
diff --git a/ld/po/bg.po b/ld/po/bg.po
index 1273e3a882a..7031889e93b 100644
--- a/ld/po/bg.po
+++ b/ld/po/bg.po
@@ -1,7 +1,7 @@
# Translation of binutils ld to Bulgarian
# Copyright (C) 2010, 2011, 2012, 2014 Free Software Foundation, Inc.
# This file is distributed under the same license as the binutils package.
-# Roumen Petrov <transl@roumenpetrov.info>, 2010-2020.
+# Roumen Petrov <transl@roumenpetrov.info>, 2010-2022.
#
# Abbreviations:
# BFD - Binary Format Description
@@ -10,10 +10,10 @@
# GOT - Global Offsets Table
msgid ""
msgstr ""
-"Project-Id-Version: ld 2.34.90\n"
-"Report-Msgid-Bugs-To: bug-binutils@gnu.org\n"
-"POT-Creation-Date: 2020-07-04 10:34+0100\n"
-"PO-Revision-Date: 2020-07-05 17:56+0200\n"
+"Project-Id-Version: ld 2.37.90\n"
+"Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n"
+"POT-Creation-Date: 2022-01-22 12:24+0000\n"
+"PO-Revision-Date: 2022-01-23 20:48+0200\n"
"Last-Translator: Румен Петров <transl@roumenpetrov.info>\n"
"Language-Team: Bulgarian <dict@ludost.net>\n"
"Language: bg\n"
@@ -23,19 +23,19 @@ msgstr ""
"X-Bugs: Report translation errors to the Language-Team address.\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ldcref.c:171
+#: ldcref.c:170
msgid "%X%P: bfd_hash_table_init of cref table failed: %E\n"
msgstr "%X%P: bfd_hash_table_init, за cref таблица, не уÑпÑ: %E\n"
-#: ldcref.c:177
+#: ldcref.c:176
msgid "%X%P: cref_hash_lookup failed: %E\n"
msgstr "%X%P: cref_hash_lookup не уÑпÑ: %E\n"
-#: ldcref.c:187
+#: ldcref.c:186
msgid "%X%P: cref alloc failed: %E\n"
msgstr "%X%P: не уÑÐ¿Ñ Ð·Ð°Ð´ÐµÐ»Ñнето на памет в cref: %E\n"
-#: ldcref.c:372
+#: ldcref.c:371
#, c-format
msgid ""
"\n"
@@ -46,34 +46,33 @@ msgstr ""
"Таблица на кръÑтоÑани връзки\n"
"\n"
-#: ldcref.c:373
+#: ldcref.c:372
msgid "Symbol"
msgstr "Име"
-#: ldcref.c:381
+#: ldcref.c:380
#, c-format
msgid "File\n"
msgstr "Файл\n"
-#: ldcref.c:385
+#: ldcref.c:384
#, c-format
msgid "No symbols\n"
msgstr "Без имена\n"
-#: ldcref.c:414 ldcref.c:566
+#: ldcref.c:413 ldcref.c:565
msgid "%P: symbol `%pT' missing from main hash table\n"
msgstr "%P: в Ð³Ð»Ð°Ð²Ð½Ð¸Ñ Ñ€ÐµÑ‡Ð½Ð¸Ðº липÑва името '%pT'\n"
-#: ldcref.c:518 ldcref.c:629 ldmain.c:1293 ldmisc.c:335 pe-dll.c:736
-#: pe-dll.c:1314 pe-dll.c:1435 pe-dll.c:1558 earm_wince_pe.c:1437
-#: earm_wince_pe.c:1644 earmpe.c:1437 earmpe.c:1644 ei386pe.c:1437
-#: ei386pe.c:1644 ei386pe_posix.c:1437 ei386pe_posix.c:1644 ei386pep.c:1422
-#: emcorepe.c:1437 emcorepe.c:1644 eppcpe.c:1437 eppcpe.c:1644 eshpe.c:1437
-#: eshpe.c:1644
+#: ldcref.c:517 ldcref.c:628 ldmain.c:1304 ldmisc.c:336 pe-dll.c:738
+#: pe-dll.c:1316 pe-dll.c:1437 pe-dll.c:1563 earm_wince_pe.c:1486
+#: earm_wince_pe.c:1693 earmpe.c:1486 earmpe.c:1693 ei386pe.c:1486
+#: ei386pe.c:1693 ei386pe_posix.c:1486 ei386pe_posix.c:1693 ei386pep.c:1475
+#: emcorepe.c:1486 emcorepe.c:1693 eshpe.c:1486 eshpe.c:1693
msgid "%F%P: %pB: could not read symbols: %E\n"
msgstr "%F%P: %pB: не могат да Ñе прочетат имената: %E\n"
-#: ldcref.c:691 ldcref.c:698 ldmain.c:1355 ldmain.c:1362
+#: ldcref.c:690 ldcref.c:697 ldmain.c:1366 ldmain.c:1373
msgid "%F%P: %pB: could not read relocs: %E\n"
msgstr "%F%P: %pB: не могат да Ñе прочетат \"премеÑтваниÑта\": %E\n"
@@ -81,7 +80,7 @@ msgstr "%F%P: %pB: не могат да Ñе прочетат \"премеÑтв
#. in OUTSECNAME. This reloc is from a section which is
#. mapped into a section from which references to OUTSECNAME
#. are prohibited. We must report an error.
-#: ldcref.c:725
+#: ldcref.c:724
msgid "%X%P: %C: prohibited cross reference from %s to `%pT' in %s\n"
msgstr "%X%P: %C: забранено е кръÑтоÑана отпратка от %s към '%pT' в %s\n"
@@ -119,148 +118,159 @@ msgstr ""
msgid "%P: warning: -z dynamic-undefined-weak ignored\n"
msgstr "%P: предупреждение: -z dynamic-undefined-weak е изоÑтавено\n"
-#: ldelf.c:98
+#: ldelf.c:91
+msgid "%F%P: common page size (0x%v) > maximum page size (0x%v)\n"
+msgstr "%F%P: общ размер на Ñтраница (0x%v) > макÑимален размер на Ñтраница (0x%v)\n"
+
+#: ldelf.c:117
msgid "%F%P: %pB: --just-symbols may not be used on DSO\n"
msgstr ""
-#: ldelf.c:200
+#: ldelf.c:219
msgid "%P: %pB: bfd_stat failed: %E\n"
msgstr "%P: %pB: bfd_stat не уÑпÑ: %E\n"
-#: ldelf.c:241
+#: ldelf.c:260
msgid "%P: warning: %s, needed by %pB, may conflict with %s\n"
msgstr ""
-#: ldelf.c:261 ldfile.c:133
+#: ldelf.c:280 ldfile.c:133
#, c-format
msgid "attempt to open %s failed\n"
msgstr "опитът да Ñе отвори %s не уÑпÑ\n"
-#: ldelf.c:298
+#: ldelf.c:317
msgid "%F%P: %pB: bfd_elf_get_bfd_needed_list failed: %E\n"
msgstr "%F%P: %pB: bfd_elf_get_bfd_needed_list не уÑпÑ: %E\n"
-#: ldelf.c:346
+#: ldelf.c:365
msgid "%F%P: %pB: bfd_stat failed: %E\n"
msgstr "%F%P: %pB: bfd_stat не уÑпÑ: %E\n"
-#: ldelf.c:352
+#: ldelf.c:371
#, c-format
msgid "found %s at %s\n"
msgstr ""
-#: ldelf.c:385 ldlang.c:3146 ldlang.c:3160
+#: ldelf.c:404 ldlang.c:3159 ldlang.c:3173
msgid "%F%P: %pB: error adding symbols: %E\n"
msgstr "%F%P: %pB: грешка при добавÑне на имената: %E\n"
#. We only issue an "unrecognised" message in verbose mode
#. as the $<foo> token might be a legitimate component of
#. a path name in the target's file system.
-#: ldelf.c:572
+#: ldelf.c:591
#, c-format
msgid "unrecognised or unsupported token '%s' in search path\n"
msgstr ""
-#: ldelf.c:1016
+#: ldelf.c:1035
msgid "%F%P: %s: can't open for writing: %E\n"
msgstr "%F%P: %s: не може да Ñе отвори за запиÑ: %E\n"
-#: ldelf.c:1050 ldelf.c:1084
+#: ldelf.c:1081
msgid "%F%P: cannot use executable file '%pB' as input to a link\n"
msgstr ""
-#: ldelf.c:1111
+#: ldelf.c:1135
msgid "%F%P: compact frame descriptions incompatible with DWARF2 .eh_frame from %pB\n"
msgstr ""
-#: ldelf.c:1147
+#: ldelf.c:1171
msgid "%P: warning: cannot create .eh_frame_hdr section, --eh-frame-hdr ignored\n"
msgstr ""
-#: ldelf.c:1203
+#: ldelf.c:1227
#, c-format
msgid "%s needed by %pB\n"
msgstr ""
-#: ldelf.c:1312
+#: ldelf.c:1336
msgid "%P: warning: %s, needed by %pB, not found (try using -rpath or -rpath-link)\n"
msgstr ""
-#: ldelf.c:1325
+#: ldelf.c:1349
msgid "%F%P: failed to add DT_NEEDED dynamic tag\n"
msgstr ""
-#: ldelf.c:1333
+#: ldelf.c:1357
msgid "%F%P: failed to parse EH frame entries\n"
msgstr ""
-#: ldelf.c:1372
+#: ldelf.c:1396
msgid "%P: warning: .note.gnu.build-id section discarded, --build-id ignored\n"
msgstr ""
-#: ldelf.c:1418 earm_wince_pe.c:1228 earmpe.c:1228 ei386pe.c:1228
-#: ei386pe_posix.c:1228 ei386pep.c:1231 emcorepe.c:1228 eppcpe.c:1228
-#: eshpe.c:1228
+#: ldelf.c:1445 earm_wince_pe.c:1277 earmpe.c:1277 ei386pe.c:1277
+#: ei386pe_posix.c:1277 ei386pep.c:1284 emcorepe.c:1277 eshpe.c:1277
msgid "%P: warning: unrecognized --build-id style ignored\n"
msgstr ""
-#: ldelf.c:1436
+#: ldelf.c:1464
msgid "%P: warning: cannot create .note.gnu.build-id section, --build-id ignored\n"
msgstr ""
-#: ldelf.c:1468 eaix5ppc.c:1370 eaix5rs6.c:1370 eaixppc.c:1370 eaixrs6.c:1370
-#: eppcmacos.c:1370
+#: ldelf.c:1496 eaix5ppc.c:1408 eaix5rs6.c:1408 eaixppc.c:1408 eaixrs6.c:1408
+#: eppcmacos.c:1408
msgid "%F%P: failed to record assignment to %s: %E\n"
msgstr ""
-#: ldelf.c:1650 ldelf.c:1715 eaix5ppc.c:832 eaix5rs6.c:832 eaixppc.c:832
-#: eaixrs6.c:832 eelf64_ia64_vms.c:209 eppcmacos.c:832
+#: ldelf.c:1675 ldelf.c:1740 eaix5ppc.c:831 eaix5rs6.c:831 eaixppc.c:831
+#: eaixrs6.c:831 eelf64_ia64_vms.c:209 eppcmacos.c:831
msgid "%F%P: failed to set dynamic section sizes: %E\n"
msgstr ""
-#: ldelf.c:1687
+#: ldelf.c:1712
msgid "%F%P: %pB: can't read contents of section .gnu.warning: %E\n"
msgstr ""
-#: ldelfgen.c:55
+#: ldelfgen.c:284
+msgid "%F%P: %pA has both ordered and unordered sections\n"
+msgstr "%F%P: %pA: има подредени и неподредени раздели\n"
+
+#: ldelfgen.c:309
msgid "%F%P: map sections to segments failed: %E\n"
msgstr "%F%P: не уÑÐ¿Ñ Ñвързването на раздел към чаÑÑ‚: %E\n"
-#: ldelfgen.c:75
-msgid "%F%P: looping in map_segments"
-msgstr ""
+#: ldelfgen.c:329
+msgid "%F%P: looping in map_segments\n"
+msgstr "%F%P: цикъл в раздел за изобразÑване\n"
-#: ldelfgen.c:87
-msgid "%F%P: failed to strip zero-sized dynamic sections"
-msgstr "%F%P: не уÑÐ¿Ñ Ð¿Ñ€ÐµÐ¼Ð°Ñ…Ð²Ð°Ð½ÐµÑ‚Ð¾ на динамичен раздел Ñ Ð½ÑƒÐ»ÐµÐ² размер"
+#: ldelfgen.c:341
+msgid "%F%P: failed to strip zero-sized dynamic sections\n"
+msgstr "%F%P: не уÑÐ¿Ñ Ð¿Ñ€ÐµÐ¼Ð°Ñ…Ð²Ð°Ð½ÐµÑ‚Ð¾ на динамичен раздел Ñ Ð½ÑƒÐ»ÐµÐ² размер\n"
-#: ldelfgen.c:191
+#: ldelfgen.c:419
msgid "%F%P: warning: CTF strtab association failed; strings will not be shared: %s\n"
msgstr ""
-#: ldelfgen.c:197
-msgid "%F%P: warning: CTF symbol shuffling failed; slight space cost: %s\n"
+#: ldelfgen.c:446
+msgid "%F%P: warning: CTF symbol addition failed; CTF will not be tied to symbols: %s\n"
msgstr ""
-#: ldemul.c:314
+#: ldelfgen.c:456
+msgid "%F%P: warning: CTF symbol shuffling failed; CTF will not be tied to symbols: %s\n"
+msgstr ""
+
+#: ldemul.c:311
#, c-format
msgid "%pS SYSLIB ignored\n"
msgstr "%pS SYSLIB е изоÑтавен\n"
-#: ldemul.c:320
+#: ldemul.c:317
#, c-format
msgid "%pS HLL ignored\n"
msgstr "%pS HLL е изоÑтавен\n"
-#: ldemul.c:340
+#: ldemul.c:337
msgid "%P: unrecognised emulation mode: %s\n"
msgstr "%P: неразпознат режим за подражаване: %s\n"
-#: ldemul.c:341
+#: ldemul.c:338
msgid "Supported emulations: "
msgstr "Поддържани подражаваниÑ: "
-#: ldemul.c:383
+#: ldemul.c:380
#, c-format
msgid " no emulation specific options.\n"
msgstr " без оÑобени възможноÑти за подражаване.\n"
@@ -273,69 +283,69 @@ msgstr "%F%P: bfd_hash_allocate не уÑÐ¿Ñ Ð´Ð° Ñъздаде име %s\n"
msgid "%F%P: bfd_hash_lookup failed creating symbol %s\n"
msgstr "%F%P: bfd_hash_lookup не уÑÐ¿Ñ Ð´Ð° Ñъздаде име %s\n"
-#: ldexp.c:552
+#: ldexp.c:553
msgid "%P: warning: address of `%s' isn't multiple of maximum page size\n"
msgstr "%P: предупреждение: адреÑа на '%s' не е кратен на макÑÐ¸Ð¼Ð°Ð»Ð½Ð¸Ñ Ñ€Ð°Ð·Ð¼ÐµÑ€ на Ñтраница\n"
-#: ldexp.c:631
+#: ldexp.c:632
msgid "%F%P:%pS %% by zero\n"
msgstr "%F%P:%pS %% на нула\n"
-#: ldexp.c:640
+#: ldexp.c:641
msgid "%F%P:%pS / by zero\n"
msgstr "%F%P:%pS / на нула\n"
-#: ldexp.c:736 ldlang.c:3922 ldmain.c:1260 earm_wince_pe.c:1772 earmpe.c:1772
-#: ei386pe.c:1772 ei386pe_posix.c:1772 ei386pep.c:1646 emcorepe.c:1772
-#: eppcpe.c:1772 eshpe.c:1772
+#: ldexp.c:737 ldlang.c:4011 ldmain.c:1271 earm_wince_pe.c:1804 earmpe.c:1804
+#: ei386pe.c:1804 ei386pe_posix.c:1804 ei386pep.c:1699 emcorepe.c:1804
+#: eshpe.c:1804
msgid "%F%P: bfd_link_hash_lookup failed: %E\n"
msgstr "%F%P: bfd_link_hash_lookup не уÑпÑ: %E\n"
-#: ldexp.c:749
+#: ldexp.c:750
msgid "%X%P:%pS: unresolvable symbol `%s' referenced in expression\n"
msgstr "%X%P:%pS: неразгадано име '%s' е указано в израза\n"
-#: ldexp.c:764
+#: ldexp.c:765
msgid "%F%P:%pS: undefined symbol `%s' referenced in expression\n"
msgstr "%F%P:%pS: неопределено име '%s' е указано в израза\n"
-#: ldexp.c:802 ldexp.c:820 ldexp.c:848
+#: ldexp.c:803 ldexp.c:821 ldexp.c:849
msgid "%F%P:%pS: undefined section `%s' referenced in expression\n"
msgstr "%F%P:%pS: в израза е указан неопределен раздел '%s'\n"
-#: ldexp.c:879 ldexp.c:893
+#: ldexp.c:880 ldexp.c:894
msgid "%F%P:%pS: undefined MEMORY region `%s' referenced in expression\n"
msgstr "%F%P:%pS: в израза е указана неопределена MEMORY облаÑÑ‚ '%s'\n"
-#: ldexp.c:905
+#: ldexp.c:906
msgid "%F%P:%pS: unknown constant `%s' referenced in expression\n"
msgstr "%F%P:%pS: непозната конÑтанта '%s' е указана в израза\n"
-#: ldexp.c:1053
+#: ldexp.c:1054
msgid "%F%P:%pS can not PROVIDE assignment to location counter\n"
msgstr "%F%P:%pS не може да Ñе приÑвои на броÑч за меÑтоположение\n"
-#: ldexp.c:1086
+#: ldexp.c:1087
msgid "%F%P:%pS invalid assignment to location counter\n"
msgstr "%F%P:%pS неправилно приÑвоÑване на броÑч за меÑтоположение\n"
-#: ldexp.c:1090
+#: ldexp.c:1091
msgid "%F%P:%pS assignment to location counter invalid outside of SECTIONS\n"
msgstr "%F%P:%pS неправилно приÑвоÑване на броÑч за меÑтоположение извън РÐЗДЕЛИ\n"
-#: ldexp.c:1109
+#: ldexp.c:1110
msgid "%F%P:%pS cannot move location counter backwards (from %V to %V)\n"
msgstr "%F%P:%pS не може да Ñе върне обратно броÑч на меÑтоположение (от %V към %V)\n"
-#: ldexp.c:1169
+#: ldexp.c:1170
msgid "%F%P:%s: hash creation failed\n"
msgstr "%F%P:%s: не уÑÐ¿Ñ Ñъздаването на хеш\n"
-#: ldexp.c:1538 ldexp.c:1580 ldexp.c:1640
+#: ldexp.c:1542 ldexp.c:1584 ldexp.c:1644
msgid "%F%P:%pS: nonconstant expression for %s\n"
msgstr "%F%P:%pS: не е конÑтантен изразът за %s\n"
-#: ldexp.c:1666 ldlang.c:1281 ldlang.c:3464 ldlang.c:7848
+#: ldexp.c:1670 ldlang.c:1279 ldlang.c:3493 ldlang.c:8066
msgid "%F%P: can not create hash table: %E\n"
msgstr "%F%P: не може да Ñе Ñъздаде речник: %E\n"
@@ -360,7 +370,9 @@ msgstr "%F%P: опитано Ñтатично Ñвързване на динам
msgid "%P: cannot find %s (%s): %E\n"
msgstr "%P: не Ñе намира %s в %s: %E\n"
-#: ldfile.c:410
+#. We ignore the return status of the script
+#. and always print the error message.
+#: ldfile.c:410 ldfile.c:494 ldfile.c:498
msgid "%P: cannot find %s: %E\n"
msgstr "%P: не Ñе намира %s: %E\n"
@@ -368,61 +380,69 @@ msgstr "%P: не Ñе намира %s: %E\n"
msgid "%P: cannot find %s inside %s\n"
msgstr "%P: не Ñе намера %s в %s\n"
-#: ldfile.c:465
-msgid "%P: cannot find %s\n"
-msgstr "%P: не Ñе намира %s\n"
+#: ldfile.c:477 ldmain.c:1451
+msgid "%P: About to run error handling script '%s' with arguments: '%s' '%s'\n"
+msgstr ""
-#: ldfile.c:475
+#: ldfile.c:481 ldmain.c:1455
+msgid "error handling script"
+msgstr ""
+
+#: ldfile.c:487 ldmain.c:1461
+msgid "%P: Failed to run error handling script '%s', reason: "
+msgstr ""
+
+#: ldfile.c:508
msgid "%P: note to link with %s use -l:%s or rename it to lib%s\n"
msgstr ""
-#: ldfile.c:503
+#: ldfile.c:537
#, c-format
msgid "cannot find script file %s\n"
msgstr "не Ñе намира \"Ñкрипт\"-файл %s\n"
-#: ldfile.c:505
+#: ldfile.c:539
#, c-format
msgid "opened script file %s\n"
msgstr "отворен \"Ñкрипт\"-файл %s\n"
-#: ldfile.c:654
+#: ldfile.c:688
msgid "%F%P: error: linker script file '%s' appears multiple times\n"
msgstr ""
-#: ldfile.c:676
+#: ldfile.c:710
msgid "%F%P: cannot open linker script file %s: %E\n"
msgstr "%F%P: не може да Ñе отвори \"Ñкрипт\"-файл при Ñвързване %s: %E\n"
-#: ldfile.c:749
+#: ldfile.c:783
msgid "%F%P: cannot represent machine `%s'\n"
msgstr "%F%P: не може да Ñе предÑтави машина '%s'\n"
-#: ldlang.c:1365
+#: ldlang.c:1363
msgid "%P:%pS: warning: redeclaration of memory region `%s'\n"
msgstr "%P:%pS: предупреждение: повторно определение за е облаÑÑ‚ памет '%s'\n"
-#: ldlang.c:1371
+#: ldlang.c:1369
msgid "%P:%pS: warning: memory region `%s' not declared\n"
msgstr "%P:%pS: предупреждениe: облаÑтта за памет '%s' не е обÑвена\n"
-#: ldlang.c:1407
+#: ldlang.c:1405
msgid "%F%P:%pS: error: alias for default memory region\n"
msgstr "%F%P:%pS: грешка: Ñиноним за облаÑÑ‚ памет по подразбиране\n"
-#: ldlang.c:1418
+#: ldlang.c:1416
msgid "%F%P:%pS: error: redefinition of memory region alias `%s'\n"
msgstr "%F%P:%pS: грешка: повторено определение на Ñиноним за облаÑÑ‚ памет '%s'\n"
-#: ldlang.c:1425
+#: ldlang.c:1423
msgid "%F%P:%pS: error: memory region `%s' for alias `%s' does not exist\n"
msgstr "%F%P:%pS: грешка: облаÑÑ‚ памет '%s' за Ñинонима '%s' не ÑъщеÑтвува\n"
-#: ldlang.c:1484 ldlang.c:1523
+#: ldlang.c:1484 ldlang.c:1519
msgid "%F%P: failed creating section `%s': %E\n"
msgstr "%F%P: не уÑÐ¿Ñ Ñъздаването на раздел '%s': %E\n"
-#: ldlang.c:2221
+#: ldlang.c:2219
msgid ""
"\n"
"As-needed library included to satisfy reference by file (symbol)\n"
@@ -432,7 +452,7 @@ msgstr ""
"Библиотека \"при нужда\" е включена, за да удовлетвори отпратка от файл (име)\n"
"\n"
-#: ldlang.c:2288
+#: ldlang.c:2286
#, c-format
msgid ""
"\n"
@@ -443,7 +463,7 @@ msgstr ""
"Отхвърлени входни раздели\n"
"\n"
-#: ldlang.c:2296
+#: ldlang.c:2294
msgid ""
"\n"
"Memory Configuration\n"
@@ -453,23 +473,23 @@ msgstr ""
"ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ð½Ð° паметта\n"
"\n"
-#: ldlang.c:2298
+#: ldlang.c:2296
msgid "Name"
msgstr "Име"
-#: ldlang.c:2298
+#: ldlang.c:2296
msgid "Origin"
msgstr "Произход"
-#: ldlang.c:2298
+#: ldlang.c:2296
msgid "Length"
msgstr "Дължина"
-#: ldlang.c:2298
+#: ldlang.c:2296
msgid "Attributes"
msgstr "Ðтрибути"
-#: ldlang.c:2338
+#: ldlang.c:2336
#, c-format
msgid ""
"\n"
@@ -480,223 +500,245 @@ msgstr ""
"ТекÑÑ‚ при Ñвързване и Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° паметта\n"
"\n"
-#: ldlang.c:2391
+#: ldlang.c:2389
msgid "%F%P: illegal use of `%s' section\n"
msgstr "%F%P: неправилно използване на раздел '%s'\n"
-#: ldlang.c:2400
+#: ldlang.c:2398
msgid "%F%P: output format %s cannot represent section called %s: %E\n"
msgstr "%F%P: в Ð¸Ð·Ñ…Ð¾Ð´Ð½Ð¸Ñ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ %s не може да Ñе предÑтави раздел именуван %s: %E\n"
-#: ldlang.c:2567
+#: ldlang.c:2566
msgid "%P:%pS: warning: --enable-non-contiguous-regions makes section `%pA' from '%pB' match /DISCARD/ clause.\n"
msgstr ""
-#: ldlang.c:2600
+#: ldlang.c:2599
msgid "%P:%pS: warning: --enable-non-contiguous-regions may change behaviour for section `%pA' from '%pB' (assigned to %pA, but additional match: %pA)\n"
msgstr ""
-#: ldlang.c:3050
+#: ldlang.c:3063
msgid "%P: %pB: file not recognized: %E; matching formats:"
msgstr "%P: %pB: файлът не е разпознат: %E; подобни:"
-#: ldlang.c:3058
+#: ldlang.c:3071
msgid "%F%P: %pB: file not recognized: %E\n"
msgstr "%F%P: %pB: файлът не е разпознат: %E\n"
-#: ldlang.c:3131
+#: ldlang.c:3144
msgid "%F%P: %pB: member %pB in archive is not an object\n"
msgstr "%F%P: %pB: членът на архива %pB не е обект\n"
-#: ldlang.c:3434
+#: ldlang.c:3415
+msgid "%F%P: input file '%s' is the same as output file\n"
+msgstr ""
+
+#: ldlang.c:3463
msgid "%P: warning: could not find any targets that match endianness requirement\n"
msgstr "%P: предупреждение: не може да Ñе открие резултат, който да Ð¾Ñ‚Ð³Ð¾Ð²Ð°Ñ€Ñ Ð½Ð° изиÑкваниÑта за подредба на байтовете\n"
-#: ldlang.c:3448
+#: ldlang.c:3477
msgid "%F%P: target %s not found\n"
msgstr "%F%P: целта %s не е намерена\n"
-#: ldlang.c:3450
+#: ldlang.c:3479
msgid "%F%P: cannot open output file %s: %E\n"
-msgstr "%F%P: не може да Ñе отвори входÑщ файл %s: %E\n"
+msgstr "%F%P: не може да Ñе отвори изходÑщ файл %s: %E\n"
-#: ldlang.c:3456
+#: ldlang.c:3485
msgid "%F%P: %s: can not make object file: %E\n"
msgstr "%F%P: %s: не може да Ñе Ñъздаде обектен файл: %E\n"
-#: ldlang.c:3460
+#: ldlang.c:3489
msgid "%F%P: %s: can not set architecture: %E\n"
msgstr "%F%P: %s: не може да Ñе зададе архитектура: %E\n"
-#: ldlang.c:3640
+#: ldlang.c:3669
msgid "%P: warning: %s contains output sections; did you forget -T?\n"
msgstr "%P: предупреждениe: %s Ñъдържа изходÑщ раздел; забравен -T?\n"
-#: ldlang.c:3697
-msgid "%P: warning: CTF section in `%pI' not loaded: its types will be discarded: `%s'\n"
-msgstr ""
+#: ldlang.c:3716
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+#: ldlang.c:3716
+msgid "CTF warning"
+msgstr "\"CTF\" предупреждение"
+
+#: ldlang.c:3716
+msgid "CTF error"
+msgstr "\"CTF\" грешка"
#: ldlang.c:3722
-msgid "%P: warning: CTF output not created: `%s'\n"
+#, c-format
+msgid "CTF error: cannot get CTF errors: `%s'\n"
msgstr ""
-#: ldlang.c:3764
-msgid "%F%P: cannot link with CTF in %pB: %s\n"
+#: ldlang.c:3756
+msgid "%P: warning: CTF section in %pB not loaded; its types will be discarded: %s\n"
msgstr ""
-#: ldlang.c:3774
-msgid "%F%P: CTF linking failed; output will have no CTF section: %s\n"
+#: ldlang.c:3785
+msgid "%P: warning: CTF output not created: `%s'\n"
msgstr ""
-#: ldlang.c:3830
-msgid "%F%P: CTF section emission failed; output will have no CTF section: %s\n"
-msgstr ""
+#: ldlang.c:3828
+msgid "%P: warning: CTF section in %pB cannot be linked: `%s'\n"
+msgstr "%P: предупреждение: не може да Ñвърже \"CTF\" раздел в %pB: '%s'\n"
+
+#: ldlang.c:3848
+msgid "%P: warning: CTF linking failed; output will have no CTF section: %s\n"
+msgstr "%P: предупреждение: \"CTF\" Ñвързването пропадна; изход без \"CTF\" раздел: %s\n"
+
+#: ldlang.c:3919
+msgid "%P: warning: CTF section emission failed; output will have no CTF section: %s\n"
+msgstr "%P: предупреждение: без зададен облаÑÑ‚ памет за заредим раздел '%s'\n"
-#: ldlang.c:3868
-msgid "%P: warning: CTF section in `%pI' not linkable: %P was built without support for CTF\n"
+#: ldlang.c:3958
+msgid "%P: warning: CTF section in %pB not linkable: %P was built without support for CTF\n"
msgstr ""
-#: ldlang.c:3992
+#: ldlang.c:4096
msgid "%X%P: required symbol `%s' not defined\n"
msgstr "%X%P: не е определено задължителното име '%s'\n"
-#: ldlang.c:4291
+#: ldlang.c:4394
msgid "warning: INSERT statement in linker script is incompatible with --enable-non-contiguous-regions.\n"
msgstr ""
-#: ldlang.c:4304
+#: ldlang.c:4407
msgid "%F%P: %s not found for insert\n"
msgstr "%F%P: %s не е намерен за добавÑне\n"
-#: ldlang.c:4544
+#: ldlang.c:4647
msgid " load address 0x%V"
msgstr " Ð°Ð´Ñ€ÐµÑ Ð½Ð° зареждане 0x%V"
-#: ldlang.c:4777
+#: ldlang.c:4880
msgid "%W (size before relaxing)\n"
msgstr "%W (размер преди намалÑване)\n"
-#: ldlang.c:4870
+#: ldlang.c:4973
#, c-format
msgid "Address of section %s set to "
msgstr "ÐдреÑÑŠÑ‚ на раздел %s е уÑтановен на "
-#: ldlang.c:5068
+#: ldlang.c:5171
#, c-format
msgid "Fail with %d\n"
msgstr "Ðе уÑÐ¿Ñ Ð¿Ñ€Ð¸ %d\n"
-#: ldlang.c:5281
+#: ldlang.c:5384
msgid "%F%P: Output section '%s' not large enough for the linker-created stubs section '%s'.\n"
msgstr ""
-#: ldlang.c:5286
+#: ldlang.c:5389
msgid "%F%P: Relaxation not supported with --enable-non-contiguous-regions (section '%s' would overflow '%s' after it changed size).\n"
msgstr ""
-#: ldlang.c:5395
+#: ldlang.c:5498
msgid "%X%P: section %s VMA wraps around address space\n"
msgstr "%X%P: раздел %s VMA обгръща адреÑното проÑтранÑтво\n"
-#: ldlang.c:5401
+#: ldlang.c:5504
msgid "%X%P: section %s LMA wraps around address space\n"
msgstr "%X%P: раздел %s LMA обгръща адреÑното проÑтранÑтво\n"
-#: ldlang.c:5453
+#: ldlang.c:5556
msgid "%X%P: section %s LMA [%V,%V] overlaps section %s LMA [%V,%V]\n"
msgstr "%X%P: раздел %s LMA [%V,%V] припокрива раздел %s LMA [%V,%V]\n"
-#: ldlang.c:5497
+#: ldlang.c:5600
msgid "%X%P: section %s VMA [%V,%V] overlaps section %s VMA [%V,%V]\n"
msgstr "%X%P: раздел %s VMA [%V,%V] припокрива раздел %s VMA [%V,%V]\n"
-#: ldlang.c:5520
+#: ldlang.c:5623
msgid "%X%P: region `%s' overflowed by %lu byte\n"
msgid_plural "%X%P: region `%s' overflowed by %lu bytes\n"
msgstr[0] "%X%P: облаÑтта '%s' е препълнена Ñ %lu байт\n"
msgstr[1] "%X%P: облаÑтта '%s' е препълнена Ñ %lu байта\n"
-#: ldlang.c:5545
+#: ldlang.c:5648
msgid "%X%P: address 0x%v of %pB section `%s' is not within region `%s'\n"
msgstr "%X%P: Ð°Ð´Ñ€ÐµÑ 0x%v от %pB, раздел '%s', не е в облаÑÑ‚ '%s'\n"
-#: ldlang.c:5556
+#: ldlang.c:5659
msgid "%X%P: %pB section `%s' will not fit in region `%s'\n"
msgstr "%X%P: %pB раздел '%s' не Ñе побира в облаÑÑ‚ '%s'\n"
-#: ldlang.c:5642
+#: ldlang.c:5745
msgid "%F%P:%pS: non constant or forward reference address expression for section %s\n"
msgstr "%F%P:%pS: адреÑниÑÑ‚ израз не е конÑтантен или е отпратка за по нататък при раздел %s\n"
-#: ldlang.c:5667
+#: ldlang.c:5770
msgid "%X%P: internal error on COFF shared library section %s\n"
msgstr "%X%P: вътрешна грешка при раздел от COFF Ñподелена библиотека %s\n"
-#: ldlang.c:5725
+#: ldlang.c:5828
msgid "%F%P: error: no memory region specified for loadable section `%s'\n"
msgstr "%F%P: грешка: без зададена облаÑÑ‚ памет за заредим раздел '%s'\n"
-#: ldlang.c:5729
+#: ldlang.c:5832
msgid "%P: warning: no memory region specified for loadable section `%s'\n"
msgstr "%P: предупреждение: без зададен облаÑÑ‚ памет за заредим раздел '%s'\n"
-#: ldlang.c:5763
+#: ldlang.c:5866
msgid "%P: warning: start of section %s changed by %ld\n"
msgstr "%P: предупреждение: началото на раздел %s е променено Ñ %ld\n"
-#: ldlang.c:5855
+#: ldlang.c:5958
msgid "%P: warning: dot moved backwards before `%s'\n"
msgstr "%P: предупреждение: точката е премеÑтена назад преди '%s'\n"
-#: ldlang.c:6036
+#: ldlang.c:6139
msgid "%F%P: can't relax section: %E\n"
msgstr "%F%P: не може да Ñе намали раздел: %E\n"
-#: ldlang.c:6457
+#: ldlang.c:6603
msgid "%F%P: invalid data statement\n"
msgstr "%F%P: неправилен Ñегмент за данни\n"
-#: ldlang.c:6490
+#: ldlang.c:6636
msgid "%F%P: invalid reloc statement\n"
msgstr "%F%P: неправилен Ñегмент за премеÑтване\n"
-#: ldlang.c:6844
-msgid "%F%P: gc-sections requires either an entry or an undefined symbol\n"
-msgstr "%F%P: gc-раздели изиÑкват или вход или неопределено име\n"
+#: ldlang.c:7053
+msgid "%F%P: --gc-sections requires a defined symbol root specified by -e or -u\n"
+msgstr "%F%P: --gc-sections изиÑкват заглавно име зададено от -e или -u\n"
-#: ldlang.c:6868
+#: ldlang.c:7078
msgid "%F%P: %s: can't set start address\n"
msgstr "%F%P: %s: не може да Ñе уÑтанови начален адреÑ\n"
-#: ldlang.c:6881 ldlang.c:6899
+#: ldlang.c:7091 ldlang.c:7110
msgid "%F%P: can't set start address\n"
msgstr "%F%P: не може да Ñе уÑтанови начален адреÑ\n"
-#: ldlang.c:6893
+#: ldlang.c:7104
msgid "%P: warning: cannot find entry symbol %s; defaulting to %V\n"
msgstr "%P: предупреждение: не е намерено входно име %s; по подразбиране - %V\n"
-#: ldlang.c:6904
+#: ldlang.c:7115 ldlang.c:7123
msgid "%P: warning: cannot find entry symbol %s; not setting start address\n"
msgstr "%P: предупреждение: не е намерен входно име %s; без начален адреÑ\n"
-#: ldlang.c:6960
+#: ldlang.c:7179
msgid "%F%P: relocatable linking with relocations from format %s (%pB) to format %s (%pB) is not supported\n"
msgstr "%F%P: Ñвързване Ñ Ð¿Ñ€ÐµÐ¼ÐµÑÑ‚Ð²Ð°Ð½Ð¸Ñ Ð¾Ñ‚ формат %s (%pB) към формат %s (%pB) не Ñе поддържа\n"
-#: ldlang.c:6970
+#: ldlang.c:7189
msgid "%X%P: %s architecture of input file `%pB' is incompatible with %s output\n"
msgstr "%X%P: %s архитектурата на входен файл '%pB' е неÑъвмеÑтима Ñ %s изход\n"
-#: ldlang.c:6993
+#: ldlang.c:7213
msgid "%X%P: failed to merge target specific data of file %pB\n"
msgstr "%X%P: не уÑÐ¿Ñ Ñливането на целеви данни от файл %pB\n"
-#: ldlang.c:7064
+#: ldlang.c:7284
msgid "%F%P: could not define common symbol `%pT': %E\n"
msgstr "%F%P: не може да Ñе определÑÑ‚ общите имена '%pT': %E\n"
-#: ldlang.c:7076
+#: ldlang.c:7296
msgid ""
"\n"
"Allocating common symbols\n"
@@ -704,7 +746,7 @@ msgstr ""
"\n"
"ЗаделÑне на общи имена\n"
-#: ldlang.c:7077
+#: ldlang.c:7297
msgid ""
"Common symbol size file\n"
"\n"
@@ -712,87 +754,87 @@ msgstr ""
"Общо име размер файл\n"
"\n"
-#: ldlang.c:7151
+#: ldlang.c:7370
msgid "%X%P: error: unplaced orphan section `%pA' from `%pB'\n"
msgstr ""
-#: ldlang.c:7169
+#: ldlang.c:7388
msgid "%P: warning: orphan section `%pA' from `%pB' being placed in section `%s'\n"
msgstr ""
-#: ldlang.c:7260
+#: ldlang.c:7478
msgid "%F%P: invalid character %c (%d) in flags\n"
msgstr "%F%P: неправилен знак %c (%d) при флаговете\n"
-#: ldlang.c:7369
+#: ldlang.c:7587
msgid "%F%P:%pS: error: align with input and explicit align specified\n"
msgstr "%F%P:%pS: грешка: зададено е подравнÑване Ñ Ð²Ñ…Ð¾Ð´Ð° и изрично подравнÑване\n"
-#: ldlang.c:7875
+#: ldlang.c:8102
msgid "%F%P: %s: plugin reported error after all symbols read\n"
msgstr "%F%P: %s: приÑтавката отчете грешка Ñлед прочитане на вÑички имена\n"
-#: ldlang.c:8312
+#: ldlang.c:8538
msgid "%F%P: multiple STARTUP files\n"
msgstr "%F%P: многократни STARTUP файлове\n"
-#: ldlang.c:8358
+#: ldlang.c:8584
msgid "%X%P:%pS: section has both a load address and a load region\n"
msgstr "%X%P:%pS: раздел едновременно Ñ Ð°Ð´Ñ€ÐµÑ Ð¸ облаÑÑ‚ за зареждане\n"
-#: ldlang.c:8464
+#: ldlang.c:8690
msgid "%X%P:%pS: PHDRS and FILEHDR are not supported when prior PT_LOAD headers lack them\n"
msgstr "%X%P:%pS: не Ñе поддържат PHDRS и FILEHDR, ако липÑват в предишни PT_LOAD заглавиÑ\n"
-#: ldlang.c:8537
+#: ldlang.c:8763
msgid "%F%P: no sections assigned to phdrs\n"
msgstr "%F%P: към phdrs не Ñа приÑвоени раздели\n"
-#: ldlang.c:8575
+#: ldlang.c:8801
msgid "%F%P: bfd_record_phdr failed: %E\n"
msgstr "%F%P: bfd_record_phdr не уÑпÑ: %E\n"
-#: ldlang.c:8595
+#: ldlang.c:8821
msgid "%X%P: section `%s' assigned to non-existent phdr `%s'\n"
msgstr "%X%P: раздел '%s' е приÑвоен към неÑъщеÑтвуващ phdr `%s'\n"
-#: ldlang.c:9018
+#: ldlang.c:9244
msgid "%X%P: unknown language `%s' in version information\n"
msgstr "%X%P: непознат език '%s' при Ñведение за верÑиÑ\n"
-#: ldlang.c:9163
+#: ldlang.c:9389
msgid "%X%P: anonymous version tag cannot be combined with other version tags\n"
msgstr "%X%P: безименна отметка за верÑÐ¸Ñ Ð½Ðµ може да Ñе ÑмеÑва Ñ Ð´Ñ€ÑƒÐ³Ð¸ отметки за верÑии\n"
-#: ldlang.c:9172
+#: ldlang.c:9398
msgid "%X%P: duplicate version tag `%s'\n"
msgstr "%X%P: повторена отметка за верÑÐ¸Ñ '%s'\n"
-#: ldlang.c:9193 ldlang.c:9202 ldlang.c:9220 ldlang.c:9230
+#: ldlang.c:9419 ldlang.c:9428 ldlang.c:9446 ldlang.c:9456
msgid "%X%P: duplicate expression `%s' in version information\n"
msgstr "%X%P: повторен израз '%s'при Ñведение за верÑиÑ\n"
-#: ldlang.c:9270
+#: ldlang.c:9496
msgid "%X%P: unable to find version dependency `%s'\n"
msgstr "%X%P: не може да Ñе намери завиÑимоÑÑ‚ за верÑÐ¸Ñ '%s'\n"
-#: ldlang.c:9293
+#: ldlang.c:9519
msgid "%X%P: unable to read .exports section contents\n"
msgstr "%X%P: не може да Ñе прочете Ñъдържанието на раздел .exports\n"
-#: ldlang.c:9331
-msgid "%F%P: invalid origin for memory region %s\n"
-msgstr ""
+#: ldlang.c:9565
+msgid "%P: invalid origin for memory region %s\n"
+msgstr "%P: неправилен източник за облаÑÑ‚ памет %s\n"
-#: ldlang.c:9340
-msgid "%F%P: invalid length for memory region %s\n"
-msgstr "%F%P: неправилен размер за облаÑÑ‚ памет %s\n"
+#: ldlang.c:9577
+msgid "%P: invalid length for memory region %s\n"
+msgstr "%P: неправилен размер за облаÑÑ‚ памет %s\n"
-#: ldlang.c:9451
+#: ldlang.c:9689
msgid "%X%P: unknown feature `%s'\n"
msgstr "%X%P: непозната възможноÑÑ‚ '%s'\n"
-#: ldmain.c:194
+#: ldmain.c:196
msgid "%F%P: cannot open dependency file %s: %E\n"
msgstr "%F%P: не можа да Ñе отвори файл ÑÑŠÑ Ð·Ð°Ð²Ð¸ÑимоÑти %s: %E\n"
@@ -804,90 +846,90 @@ msgstr ""
msgid "%X%P: can't set BFD default target to `%s': %E\n"
msgstr "%X%P: цел по подразбиране на BFD, не можа да Ñе уÑтанови на '%s': %E\n"
-#: ldmain.c:402
+#: ldmain.c:405
msgid "built in linker script"
msgstr "вграден Ñкрипт за Ñвързване"
-#: ldmain.c:412
+#: ldmain.c:415
msgid "using external linker script:"
msgstr "използване на външен Ñкрипт за Ñвързване:"
-#: ldmain.c:414
+#: ldmain.c:417
msgid "using internal linker script:"
msgstr "използване на вътрешен Ñкрипт за Ñвързване:"
-#: ldmain.c:461
+#: ldmain.c:464
msgid "%F%P: --no-define-common may not be used without -shared\n"
msgstr "%F%P: --no-define-common не може да Ñе използва без -shared\n"
-#: ldmain.c:467
+#: ldmain.c:470
msgid "%F%P: no input files\n"
msgstr "%F%P: без входни файлове\n"
-#: ldmain.c:471
+#: ldmain.c:474
msgid "%P: mode %s\n"
msgstr "%P: режим %s\n"
-#: ldmain.c:487 ends32belf.c:418 ends32belf16m.c:418 ends32belf_linux.c:547
-#: ends32elf.c:418 ends32elf16m.c:418 ends32elf_linux.c:547
+#: ldmain.c:490 ends32belf.c:429 ends32belf16m.c:429 ends32belf_linux.c:562
+#: ends32elf.c:429 ends32elf16m.c:429 ends32elf_linux.c:562
msgid "%F%P: cannot open map file %s: %E\n"
msgstr "%F%P: не можа да Ñе отвори файл Ñ Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð·ÑÐ²Ð°Ð½Ð¸Ñ %s: %E\n"
-#: ldmain.c:540
+#: ldmain.c:543
msgid "%P: link errors found, deleting executable `%s'\n"
msgstr "%P: грешка при Ñвързване, изтриване на Ð¸Ð·Ð¿ÑŠÐ»Ð½Ð¸Ð¼Ð¸Ñ Ñ„Ð°Ð¹Ð» '%s'\n"
-#: ldmain.c:549
+#: ldmain.c:552
msgid "%F%P: %pB: final close failed: %E\n"
msgstr "%F%P: %pB: не уÑÐ¿Ñ Ð·Ð°ÐºÐ»ÑŽÑ‡Ð¸Ñ‚ÐµÐ»Ð½Ð¾Ñ‚Ð¾ затварÑне: %E\n"
-#: ldmain.c:576
+#: ldmain.c:579
msgid "%F%P: unable to open for source of copy `%s'\n"
msgstr "%F%P: не можа да Ñе отвори източникът на копието '%s'\n"
-#: ldmain.c:579
+#: ldmain.c:582
msgid "%F%P: unable to open for destination of copy `%s'\n"
msgstr "%F%P: не можа да Ñе отвори целта на копието '%s'\n"
-#: ldmain.c:586
+#: ldmain.c:589
msgid "%P: error writing file `%s'\n"
msgstr "%P: грешка при Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° файла '%s'\n"
-#: ldmain.c:591 pe-dll.c:1949
+#: ldmain.c:594 pe-dll.c:1966
#, c-format
msgid "%P: error closing file `%s'\n"
msgstr "%P: грешка при затварÑне на файла '%s'\n"
-#: ldmain.c:605
+#: ldmain.c:608
#, c-format
msgid "%s: total time in link: %ld.%06ld\n"
msgstr "%s: общо време за Ñвързване: %ld.%06ld\n"
-#: ldmain.c:692
+#: ldmain.c:695
msgid "%F%P: missing argument to -m\n"
msgstr "%F%P: липÑва аргумент за -m\n"
-#: ldmain.c:742 ldmain.c:759 ldmain.c:779 ldmain.c:811 pe-dll.c:1395
+#: ldmain.c:749 ldmain.c:766 ldmain.c:786 ldmain.c:818 pe-dll.c:1397
msgid "%F%P: bfd_hash_table_init failed: %E\n"
msgstr "%F%P: bfd_hash_table_init не уÑпÑ: %E\n"
-#: ldmain.c:746 ldmain.c:763 ldmain.c:783
+#: ldmain.c:753 ldmain.c:770 ldmain.c:790
msgid "%F%P: bfd_hash_lookup failed: %E\n"
msgstr "%F%P: bfd_hash_lookup не уÑпÑ: %E\n"
-#: ldmain.c:797
+#: ldmain.c:804
msgid "%X%P: error: duplicate retain-symbols-file\n"
msgstr "%X%P: грешка: повторен retain-symbols-file\n"
-#: ldmain.c:841
+#: ldmain.c:848
msgid "%F%P: bfd_hash_lookup for insertion failed: %E\n"
msgstr "%F%P: bfd_hash_lookup не уÑÐ¿Ñ Ð¿Ñ€Ð¸ вмъкване: %E\n"
-#: ldmain.c:846
+#: ldmain.c:853
msgid "%P: `-retain-symbols-file' overrides `-s' and `-S'\n"
msgstr "%P: '-retain-symbols-file' Ð¾Ñ‚Ð¼ÐµÐ½Ñ '-s' и '-S'\n"
-#: ldmain.c:962
+#: ldmain.c:969
msgid ""
"Archive member included to satisfy reference by file (symbol)\n"
"\n"
@@ -895,161 +937,165 @@ msgstr ""
"Включен е член на архива, за да удовлетвори отпратка от файл(име)\n"
"\n"
-#: ldmain.c:1071
+#: ldmain.c:1079
+msgid "%P: %C: warning: multiple definition of `%pT'"
+msgstr "%P: %C: многократни Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð·Ð° '%pT'"
+
+#: ldmain.c:1082
msgid "%X%P: %C: multiple definition of `%pT'"
msgstr "%X%P: %C: многократни Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð·Ð° '%pT'"
-#: ldmain.c:1074
+#: ldmain.c:1085
msgid "; %D: first defined here"
msgstr "; %D: първото определение е тук"
-#: ldmain.c:1079
+#: ldmain.c:1090
msgid "%P: disabling relaxation; it will not work with multiple definitions\n"
msgstr "%P: забранÑва намалÑването - не работи Ñ Ð¼Ð½Ð¾Ð³Ð¾ÐºÑ€Ð°Ñ‚Ð½Ð¸ определениÑ\n"
-#: ldmain.c:1132
+#: ldmain.c:1143
msgid "%P: %pB: warning: definition of `%pT' overriding common from %pB\n"
msgstr "%P: %pB: предупреждениe: определението за '%pT' припокрива общото от %pB\n"
-#: ldmain.c:1136
+#: ldmain.c:1147
msgid "%P: %pB: warning: definition of `%pT' overriding common\n"
msgstr "%P: %pB: предупреждениe: определението за '%pT' припокрива общ\n"
-#: ldmain.c:1145
+#: ldmain.c:1156
msgid "%P: %pB: warning: common of `%pT' overridden by definition from %pB\n"
msgstr "%P: %pB: предупреждениe: общото за '%pT' е припокрито Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ðµ от %pB\n"
-#: ldmain.c:1149
+#: ldmain.c:1160
msgid "%P: %pB: warning: common of `%pT' overridden by definition\n"
msgstr "%P: %pB: предупреждениe: общото за '%pT' е припокрито от определение\n"
-#: ldmain.c:1158
+#: ldmain.c:1169
msgid "%P: %pB: warning: common of `%pT' overridden by larger common from %pB\n"
msgstr "%P: %pB: предупреждениe: общото за '%pT' е припокрито Ñ Ð¿Ð¾-голÑмо общо от %pB\n"
-#: ldmain.c:1162
+#: ldmain.c:1173
msgid "%P: %pB: warning: common of `%pT' overridden by larger common\n"
msgstr "%P: %pB: предупреждение: общото за '%pT' е припокрито Ñ Ð¿Ð¾-голÑм общо\n"
-#: ldmain.c:1169
+#: ldmain.c:1180
msgid "%P: %pB: warning: common of `%pT' overriding smaller common from %pB\n"
msgstr "%P: %pB: предупреждение: общото за '%pT' припокрива по-малко общо от %pB\n"
-#: ldmain.c:1173
+#: ldmain.c:1184
msgid "%P: %pB: warning: common of `%pT' overriding smaller common\n"
msgstr "%P: %pB: предупреждение: общото за '%pT' припокрива по-малко общо\n"
-#: ldmain.c:1180
+#: ldmain.c:1191
msgid "%P: %pB and %pB: warning: multiple common of `%pT'\n"
msgstr "%P: %pB and %pB: предупреждение: многократно общо за '%pT'\n"
-#: ldmain.c:1183
+#: ldmain.c:1194
msgid "%P: %pB: warning: multiple common of `%pT'\n"
msgstr "%P: %pB: предупреждение: многократно общо за '%pT'\n"
-#: ldmain.c:1202 ldmain.c:1238
+#: ldmain.c:1213 ldmain.c:1249
msgid "%P: warning: global constructor %s used\n"
msgstr "%P: предупреждение: използван общ конÑтруктор %s\n"
-#: ldmain.c:1248
+#: ldmain.c:1259
msgid "%F%P: BFD backend error: BFD_RELOC_CTOR unsupported\n"
msgstr "%F%P: BFD грешка: BFD_RELOC_CTOR неподдържан\n"
#. We found a reloc for the symbol we are looking for.
-#: ldmain.c:1320 ldmain.c:1322 ldmain.c:1324 ldmain.c:1332 ldmain.c:1375
+#: ldmain.c:1331 ldmain.c:1333 ldmain.c:1335 ldmain.c:1343 ldmain.c:1386
msgid "warning: "
msgstr "предупреждение: "
-#: ldmain.c:1427
+#: ldmain.c:1476
msgid "%X%P: %C: undefined reference to `%pT'\n"
msgstr "%X%P: %C: неопределена отпратка към '%pT'\n"
-#: ldmain.c:1430
+#: ldmain.c:1479
msgid "%P: %C: warning: undefined reference to `%pT'\n"
msgstr "%P: %C: предупреждение: неопределена отпратка към '%pT'\n"
-#: ldmain.c:1436
+#: ldmain.c:1485
msgid "%X%P: %D: more undefined references to `%pT' follow\n"
msgstr "%X%P: %D: Ñледват още неопределени отпратки към '%pT'\n"
-#: ldmain.c:1439
+#: ldmain.c:1488
msgid "%P: %D: warning: more undefined references to `%pT' follow\n"
msgstr "%P: %D: предупреждение: Ñледват още неопределени отпратки към '%pT'\n"
-#: ldmain.c:1450
+#: ldmain.c:1499
msgid "%X%P: %pB: undefined reference to `%pT'\n"
msgstr "%X%P: %pB: неопределена отпратка към '%pT'\n"
-#: ldmain.c:1453
+#: ldmain.c:1502
msgid "%P: %pB: warning: undefined reference to `%pT'\n"
msgstr "%P: %pB: предупреждение: неопределена отпратка към '%pT'\n"
-#: ldmain.c:1459
+#: ldmain.c:1508
msgid "%X%P: %pB: more undefined references to `%pT' follow\n"
msgstr "%X%P: %pB: още неопределени отпратки към '%pT' Ñледват\n"
-#: ldmain.c:1462
+#: ldmain.c:1511
msgid "%P: %pB: warning: more undefined references to `%pT' follow\n"
msgstr "%P: %pB: предупреждение: още неопределени отпратки към '%pT' Ñледват\n"
-#: ldmain.c:1499
+#: ldmain.c:1548
msgid " additional relocation overflows omitted from the output\n"
msgstr " допълнителен излишък за премеÑÑ‚Ð²Ð°Ð½Ð¸Ñ Ð¸Ð·Ð¿ÑƒÑнат в резултата\n"
-#: ldmain.c:1512
+#: ldmain.c:1561
#, c-format
msgid " relocation truncated to fit: %s against undefined symbol `%pT'"
msgstr " премеÑтването отрÑзано, за да Ñъвпадне: %s Ñрещу неопределеното име '%pT'"
-#: ldmain.c:1518
+#: ldmain.c:1567
#, c-format
msgid " relocation truncated to fit: %s against symbol `%pT' defined in %pA section in %pB"
msgstr " премеÑтването отрÑзано, за да Ñъвпадне: %s Ñрещу име '%pT' определено в раздел %pA от %pB"
-#: ldmain.c:1531
+#: ldmain.c:1580
#, c-format
msgid " relocation truncated to fit: %s against `%pT'"
msgstr " премеÑтването отрÑзано, за да Ñъвпадне: %s Ñрещу '%pT'"
-#: ldmain.c:1547
+#: ldmain.c:1596
msgid "%X%H: dangerous relocation: %s\n"
msgstr "%X%H: опаÑно премеÑтване: %s\n"
-#: ldmain.c:1561
+#: ldmain.c:1610
msgid "%X%H: reloc refers to symbol `%pT' which is not being output\n"
msgstr "%X%H: премеÑтването указва към име '%pT', което не е изходÑщо\n"
-#: ldmain.c:1595
+#: ldmain.c:1644
msgid "%P: %pB: reference to %s\n"
msgstr "%P: %pB: отпратка към %s\n"
-#: ldmain.c:1597
+#: ldmain.c:1646
msgid "%P: %pB: definition of %s\n"
msgstr "%P: %pB: определение за %s\n"
-#: ldmisc.c:374
+#: ldmisc.c:375
#, c-format
msgid "%pB: in function `%pT':\n"
msgstr "%pB: във Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ '%pT':\n"
-#: ldmisc.c:512
+#: ldmisc.c:515
#, c-format
msgid "no symbol"
msgstr "без имена"
-#: ldmisc.c:619
+#: ldmisc.c:622
msgid "%F%P: internal error %s %d\n"
msgstr "%F%P: вътрешна грешка %s %d\n"
-#: ldmisc.c:683
+#: ldmisc.c:686
msgid "%P: internal error: aborting at %s:%d in %s\n"
msgstr "%P: вътрешна грешка: прекратÑване на %s:%d от %s\n"
-#: ldmisc.c:686
+#: ldmisc.c:689
msgid "%P: internal error: aborting at %s:%d\n"
msgstr "%P: вътрешна грешка: прекратÑване на %s:%d\n"
-#: ldmisc.c:688
+#: ldmisc.c:691
msgid "%F%P: please report this bug\n"
msgstr "%F%P: молÑ, докладвайте този проблем\n"
@@ -1061,8 +1107,8 @@ msgstr "ГÐУ Ñвързваща програма %s\n"
#: ldver.c:42
#, c-format
-msgid "Copyright (C) 2020 Free Software Foundation, Inc.\n"
-msgstr "ÐвторÑко право: 2020 Ð¤Ð¾Ð½Ð´Ð°Ñ†Ð¸Ñ Ð·Ð° Ñвободен Ñофтуер\n"
+msgid "Copyright (C) 2022 Free Software Foundation, Inc.\n"
+msgstr "ÐвторÑко право: 2022 Ð¤Ð¾Ð½Ð´Ð°Ñ†Ð¸Ñ Ð·Ð° Ñвободен Ñофтуер\n"
#: ldver.c:43
#, c-format
@@ -1101,339 +1147,339 @@ msgstr "%8x други\n"
msgid "%F%P: final link failed: %E\n"
msgstr "%F%P: не уÑÐ¿Ñ Ð·Ð°ÐºÐ»ÑŽÑ‡Ð¸Ñ‚ÐµÐ»Ð½Ð¾Ñ‚Ð¾ Ñвързване: %E\n"
-#: lexsup.c:103 lexsup.c:288
+#: lexsup.c:105 lexsup.c:290
msgid "KEYWORD"
msgstr "КЛЮЧ"
-#: lexsup.c:103
+#: lexsup.c:105
msgid "Shared library control for HP/UX compatibility"
msgstr "Управление на Ñподелени библиотеки за ÑъвмеÑтимоÑÑ‚ Ñ HP/UX"
-#: lexsup.c:106
+#: lexsup.c:108
msgid "ARCH"
msgstr "ÐРХИТЕКТУРÐ"
-#: lexsup.c:106
+#: lexsup.c:108
msgid "Set architecture"
msgstr "Задава архитектура"
-#: lexsup.c:108 lexsup.c:415
+#: lexsup.c:110 lexsup.c:425
msgid "TARGET"
msgstr "РЕЗУЛТÐТ"
-#: lexsup.c:108
+#: lexsup.c:110
msgid "Specify target for following input files"
msgstr "Задава вида на резултата за Ñледващите входни файлове"
-#: lexsup.c:111 lexsup.c:117 lexsup.c:174 lexsup.c:178 lexsup.c:214
-#: lexsup.c:227 lexsup.c:229 lexsup.c:433 lexsup.c:500 lexsup.c:513
-#: lexsup.c:517
+#: lexsup.c:113 lexsup.c:119 lexsup.c:176 lexsup.c:180 lexsup.c:216
+#: lexsup.c:229 lexsup.c:231 lexsup.c:447 lexsup.c:516 lexsup.c:529
+#: lexsup.c:533
msgid "FILE"
msgstr "ФÐЙЛ"
-#: lexsup.c:111
+#: lexsup.c:113
msgid "Read MRI format linker script"
msgstr "Използва Ñкрипт за Ñвързване в MRI формат"
-#: lexsup.c:113
+#: lexsup.c:115
msgid "Force common symbols to be defined"
msgstr "Принудително определÑне на общи имена"
-#: lexsup.c:117
+#: lexsup.c:119
msgid "Write dependency file"
msgstr "ЗапиÑване на файл ÑÑŠÑ Ð·Ð°Ð²Ð¸ÑимоÑти"
-#: lexsup.c:120
+#: lexsup.c:122
msgid "Force group members out of groups"
msgstr ""
-#: lexsup.c:122 lexsup.c:477 lexsup.c:479 lexsup.c:481 lexsup.c:483
-#: lexsup.c:485 lexsup.c:487
+#: lexsup.c:124 lexsup.c:493 lexsup.c:495 lexsup.c:497 lexsup.c:499
+#: lexsup.c:501 lexsup.c:503
msgid "ADDRESS"
msgstr "ÐДРЕС"
-#: lexsup.c:122
+#: lexsup.c:124
msgid "Set start address"
msgstr "Задава начален адреÑ"
-#: lexsup.c:124
+#: lexsup.c:126
msgid "Export all dynamic symbols"
msgstr "ИзнаÑÑне на вÑички динамични имена"
-#: lexsup.c:126
+#: lexsup.c:128
msgid "Undo the effect of --export-dynamic"
msgstr "ÐžÑ‚Ð¼ÐµÐ½Ñ Ð´ÐµÐ¹Ñтвието на --export-dynamic"
-#: lexsup.c:128
+#: lexsup.c:130
msgid "Enable support of non-contiguous memory regions"
msgstr ""
-#: lexsup.c:130
+#: lexsup.c:132
msgid "Enable warnings when --enable-non-contiguous-regions may cause unexpected behaviour"
msgstr ""
-#: lexsup.c:132
+#: lexsup.c:134
msgid "Link big-endian objects"
msgstr "Свързване на обекти ÑÑŠÑ Ñтарши байт първи"
-#: lexsup.c:134
+#: lexsup.c:136
msgid "Link little-endian objects"
msgstr "Свързване на обекти ÑÑŠÑ Ð¼Ð»Ð°Ð´ÑˆÐ¸ байт първи"
-#: lexsup.c:136 lexsup.c:139
+#: lexsup.c:138 lexsup.c:141
msgid "SHLIB"
msgstr "СПОД_БИБЛ"
-#: lexsup.c:136
+#: lexsup.c:138
msgid "Auxiliary filter for shared object symbol table"
msgstr "Допълнителен филтър за таблицата Ñ Ð¸Ð¼ÐµÐ½Ð° на Ñподелени обекти"
-#: lexsup.c:139
+#: lexsup.c:141
msgid "Filter for shared object symbol table"
msgstr "Филтър за таблицата Ñ Ð¸Ð¼ÐµÐ½Ð° на Ñподелени обекти"
-#: lexsup.c:142
+#: lexsup.c:144
msgid "Ignored"
msgstr "ИзоÑтавен"
-#: lexsup.c:144
+#: lexsup.c:146
msgid "SIZE"
msgstr "РÐЗМЕР"
-#: lexsup.c:144
+#: lexsup.c:146
msgid "Small data size (if no size, same as --shared)"
msgstr "Данни Ñ Ð¿Ð¾-малък размер (без размер е като --shared)"
-#: lexsup.c:147
+#: lexsup.c:149
msgid "FILENAME"
msgstr "ИМЕ_ФÐЙЛ"
-#: lexsup.c:147
+#: lexsup.c:149
msgid "Set internal name of shared library"
msgstr "Ð—Ð°Ð´Ð°Ð²Ñ Ð²ÑŠÑ‚Ñ€ÐµÑˆÐ½Ð¾ име на Ñподелена библиотека"
-#: lexsup.c:149
+#: lexsup.c:151
msgid "PROGRAM"
msgstr "ПРОГРÐÐœÐ"
-#: lexsup.c:149
+#: lexsup.c:151
msgid "Set PROGRAM as the dynamic linker to use"
msgstr "Задава ПРОГРÐМРза използване при динамично Ñвързване"
-#: lexsup.c:152
+#: lexsup.c:154
msgid "Produce an executable with no program interpreter header"
msgstr ""
-#: lexsup.c:155
+#: lexsup.c:157
msgid "LIBNAME"
msgstr "БИБЛ_ИМЕ"
-#: lexsup.c:155
+#: lexsup.c:157
msgid "Search for library LIBNAME"
msgstr "ТърÑене на библиотека БИБЛ_ИМЕ"
-#: lexsup.c:157
+#: lexsup.c:159
msgid "DIRECTORY"
msgstr "ДИРЕКТОРИЯ"
-#: lexsup.c:157
+#: lexsup.c:159
msgid "Add DIRECTORY to library search path"
msgstr "Ð”Ð¾Ð±Ð°Ð²Ñ Ð”Ð˜Ð Ð•ÐšÐ¢ÐžÐ Ð˜Ð¯ към Ð¿ÑŠÑ‚Ñ Ð·Ð° Ñ‚ÑŠÑ€Ñене на библиотеки"
-#: lexsup.c:160
+#: lexsup.c:162
msgid "Override the default sysroot location"
msgstr "Припокрива Ð¿Ð¾Ð´Ñ€Ð°Ð·Ð±Ð¸Ñ€Ð°Ñ‰Ð¸Ñ Ñе systoot"
-#: lexsup.c:162
+#: lexsup.c:164
msgid "EMULATION"
msgstr "ПОДРÐЖÐÐ’ÐÐЕ"
-#: lexsup.c:162
+#: lexsup.c:164
msgid "Set emulation"
msgstr "Задава подражаване"
-#: lexsup.c:164
+#: lexsup.c:166
msgid "Print map file on standard output"
msgstr "Извежда на ÑÑ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ð¸Ñ Ð¸Ð·Ñ…Ð¾Ð´ файл Ñ Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð·ÑваниÑта"
-#: lexsup.c:166
+#: lexsup.c:168
msgid "Do not page align data"
msgstr "Да не Ñе подравнÑват данните на Ñтраници"
-#: lexsup.c:168
+#: lexsup.c:170
msgid "Do not page align data, do not make text readonly"
msgstr "Да не Ñе подравнÑват данните на Ñтраници, кода да не е Ñамо за четене"
-#: lexsup.c:171
+#: lexsup.c:173
msgid "Page align data, make text readonly"
msgstr "ПодравнÑват данните на Ñтраници, кода да е Ñамо за четене"
-#: lexsup.c:174
+#: lexsup.c:176
msgid "Set output file name"
msgstr "Задава име на файл за извеждане"
-#: lexsup.c:176
+#: lexsup.c:178
msgid "Optimize output file"
msgstr "Оптимизиране на Ð¸Ð·Ð²ÐµÐ¶Ð´Ð°Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð»"
-#: lexsup.c:178
+#: lexsup.c:180
msgid "Generate import library"
msgstr "Създаване на Ñподелена библиотека за внаÑÑне"
-#: lexsup.c:181 lexsup.c:192
+#: lexsup.c:183 lexsup.c:194
msgid "PLUGIN"
msgstr "ПРИСТÐВКÐ"
-#: lexsup.c:181
+#: lexsup.c:183
msgid "Load named plugin"
msgstr "Зарежда именувана приÑтавка"
-#: lexsup.c:183 lexsup.c:194
+#: lexsup.c:185 lexsup.c:196
msgid "ARG"
msgstr "ÐРГ"
-#: lexsup.c:183
+#: lexsup.c:185
msgid "Send arg to last-loaded plugin"
msgstr "Изпраща арг. към поÑледно заредената приÑтавка"
-#: lexsup.c:185 lexsup.c:188
+#: lexsup.c:187 lexsup.c:190
msgid "Ignored for GCC LTO option compatibility"
msgstr "ИзоÑтавено за ÑъвмеÑтимоÑÑ‚ Ñ GCC LTO възможноÑÑ‚"
-#: lexsup.c:192
+#: lexsup.c:194
msgid "Load named plugin (ignored)"
msgstr "Зарежда именувана приÑтавка (пренебрегнато)"
-#: lexsup.c:194
+#: lexsup.c:196
msgid "Send arg to last-loaded plugin (ignored)"
msgstr "Изпраща аргумент към поÑледно заредената приÑтавка (пренебрегнато)"
-#: lexsup.c:197
+#: lexsup.c:199
msgid "Ignored for GCC linker option compatibility"
msgstr "ИзоÑтавено за ÑъвмеÑтимоÑÑ‚ Ñ Ð“ÐУ програмата за Ñвързване"
-#: lexsup.c:200 lexsup.c:203
+#: lexsup.c:202 lexsup.c:205
msgid "Ignored for gold option compatibility"
msgstr "ИзоÑтавено за ÑъвмеÑтимоÑÑ‚ Ñ gold"
-#: lexsup.c:206
+#: lexsup.c:208
msgid "Ignored for SVR4 compatibility"
msgstr "ИзоÑтавено за ÑъвмеÑтимоÑÑ‚ ÑÑŠÑ SVR4"
-#: lexsup.c:210
+#: lexsup.c:212
msgid "Generate relocatable output"
msgstr "Създаване на премеÑтваем резултат"
-#: lexsup.c:214
+#: lexsup.c:216
msgid "Just link symbols (if directory, same as --rpath)"
msgstr "Само Ñвързване на имената (ако е директориÑ, Ñъщо като --rpath)"
-#: lexsup.c:217
+#: lexsup.c:219
msgid "Strip all symbols"
msgstr "Премахване на вÑички имена"
-#: lexsup.c:219
+#: lexsup.c:221
msgid "Strip debugging symbols"
msgstr "Премахване на имена за траÑиране"
-#: lexsup.c:221
+#: lexsup.c:223
msgid "Strip symbols in discarded sections"
msgstr "Премахване на имена в отхвърлени раздели"
-#: lexsup.c:223
+#: lexsup.c:225
msgid "Do not strip symbols in discarded sections"
msgstr "Без премахване на имена в отхвърлени раздели"
-#: lexsup.c:225
+#: lexsup.c:227
msgid "Trace file opens"
msgstr "ПроÑледÑване на отварÑните файлове"
-#: lexsup.c:227
+#: lexsup.c:229
msgid "Read linker script"
msgstr "Използва Ñкрипт за Ñвързване"
-#: lexsup.c:229
+#: lexsup.c:231
msgid "Read default linker script"
msgstr "Използва Ñкрипт за Ñвързване по подразбиране"
-#: lexsup.c:233 lexsup.c:236 lexsup.c:254 lexsup.c:343 lexsup.c:367
-#: lexsup.c:470 lexsup.c:503 lexsup.c:515 lexsup.c:553 lexsup.c:556
+#: lexsup.c:235 lexsup.c:238 lexsup.c:256 lexsup.c:348 lexsup.c:372
+#: lexsup.c:486 lexsup.c:519 lexsup.c:531 lexsup.c:569 lexsup.c:572
msgid "SYMBOL"
msgstr "ИМЕ"
-#: lexsup.c:233
+#: lexsup.c:235
msgid "Start with undefined reference to SYMBOL"
msgstr "Ðачало Ñ Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð° отпратка към ИМЕ"
-#: lexsup.c:236
+#: lexsup.c:238
msgid "Require SYMBOL be defined in the final output"
msgstr "ИзиÑква ИМЕ да бъде определено е Ð·Ð°ÐºÐ»ÑŽÑ‡Ð¸Ñ‚ÐµÐ»Ð½Ð¸Ñ Ð¸Ð·Ñ…Ð¾Ð´ÐµÐ½ файл"
-#: lexsup.c:239
+#: lexsup.c:241
msgid "[=SECTION]"
msgstr "[=РÐЗДЕЛ]"
-#: lexsup.c:240
+#: lexsup.c:242
msgid "Don't merge input [SECTION | orphan] sections"
msgstr "Без Ñливане на входÑщи [РÐЗДЕЛ | оÑиротÑл] раздели"
-#: lexsup.c:242
+#: lexsup.c:244
msgid "Build global constructor/destructor tables"
msgstr "Изграждане на общи конÑтрутор/деÑтруктор таблици"
-#: lexsup.c:244
+#: lexsup.c:246
msgid "Print version information"
msgstr "Извеждане на Ñведение за верÑиÑ"
-#: lexsup.c:246
+#: lexsup.c:248
msgid "Print version and emulation information"
msgstr "Извеждане на Ñведение за верÑÐ¸Ñ Ð¸ подражаване"
-#: lexsup.c:248
+#: lexsup.c:250
msgid "Discard all local symbols"
msgstr "ОтхвърлÑне на вÑички меÑтни имена"
-#: lexsup.c:250
+#: lexsup.c:252
msgid "Discard temporary local symbols (default)"
msgstr "ОтхвърлÑне на временни меÑтни имена (по подразбиране)"
-#: lexsup.c:252
+#: lexsup.c:254
msgid "Don't discard any local symbols"
msgstr "Без отхвърлÑне на меÑтни имена"
-#: lexsup.c:254
+#: lexsup.c:256
msgid "Trace mentions of SYMBOL"
msgstr "ПроÑледÑване на поÑочваниÑта на ИМЕ"
-#: lexsup.c:256 lexsup.c:435 lexsup.c:437
+#: lexsup.c:258 lexsup.c:449 lexsup.c:451
msgid "PATH"
msgstr "ПЪТ"
-#: lexsup.c:256
+#: lexsup.c:258
msgid "Default search path for Solaris compatibility"
msgstr "Път за Ñ‚ÑŠÑ€Ñене по подразбиране за ÑъвмеÑтимоÑÑ‚ ÑÑŠÑ Ð¡Ð¾Ð»Ð°Ñ€Ð¸Ñ"
-#: lexsup.c:259
+#: lexsup.c:261
msgid "Start a group"
msgstr "Ðачало на група"
-#: lexsup.c:261
+#: lexsup.c:263
msgid "End a group"
msgstr "Край на група"
-#: lexsup.c:265
+#: lexsup.c:267
msgid "Accept input files whose architecture cannot be determined"
msgstr "Приемане на входÑщи файлове, чиÑто архитектура не може да Ñе определи"
-#: lexsup.c:269
+#: lexsup.c:271
msgid "Reject input files whose architecture is unknown"
msgstr "Игнориране на входни файлове Ñ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° архитектура"
-#: lexsup.c:281
+#: lexsup.c:283
msgid "Only set DT_NEEDED for following dynamic libs if used"
msgstr "УÑтановÑва Ñе DT_NEEDED за Ñледните динамични библ., Ñамо ако Ñе използва"
-#: lexsup.c:284
+#: lexsup.c:286
msgid ""
"Always set DT_NEEDED for dynamic libraries mentioned on\n"
" the command line"
@@ -1441,185 +1487,197 @@ msgstr ""
"Винаги Ñе уÑтановÑва DT_NEEDED за динамичните библиотеки\n"
" поÑочени на ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¸Ñ Ñ€ÐµÐ´"
-#: lexsup.c:288
+#: lexsup.c:290
msgid "Ignored for SunOS compatibility"
msgstr "ИзоÑтавено за ÑъвмеÑтимоÑÑ‚ ÑÑŠÑ SunOS"
-#: lexsup.c:290
+#: lexsup.c:292
msgid "Link against shared libraries"
msgstr "Свързване ÑÑŠÑ Ñподелени библиотеки"
-#: lexsup.c:296
+#: lexsup.c:298
msgid "Do not link against shared libraries"
msgstr "Без Ñвързване ÑÑŠÑ Ñподелени библиотеки"
-#: lexsup.c:304
+#: lexsup.c:306
+msgid "Don't bind global references locally"
+msgstr "Да не Ñе привързват общи препратки като меÑтни"
+
+#: lexsup.c:308
msgid "Bind global references locally"
msgstr "Привързване на общи препратки като меÑтни"
-#: lexsup.c:306
+#: lexsup.c:310
msgid "Bind global function references locally"
msgstr "Привързване на общи препратки за функции като меÑтни"
-#: lexsup.c:308
+#: lexsup.c:312
msgid "Check section addresses for overlaps (default)"
msgstr "Проверка за припокриване на адреÑите на раздели (по подразбиране)"
-#: lexsup.c:311
+#: lexsup.c:315
msgid "Do not check section addresses for overlaps"
msgstr "Без проверка за припокриване за адреÑите на раздели"
-#: lexsup.c:315
+#: lexsup.c:319
msgid "Copy DT_NEEDED links mentioned inside DSOs that follow"
msgstr "Копиране на DT_NEEDED връзки Ñпоменати в DSO-то, което Ñледва"
-#: lexsup.c:319
+#: lexsup.c:323
msgid "Do not copy DT_NEEDED links mentioned inside DSOs that follow"
msgstr "Да не Ñе копират DT_NEEDED връзки Ñпоменати в DSO-то, което Ñледва"
-#: lexsup.c:323
+#: lexsup.c:327
msgid "Output cross reference table"
msgstr "Извежда таблица Ñ ÐºÑ€ÑŠÑтоÑани отпратки"
-#: lexsup.c:325
+#: lexsup.c:329
msgid "SYMBOL=EXPRESSION"
msgstr "ИМЕ=ИЗРÐЗ"
-#: lexsup.c:325
+#: lexsup.c:329
msgid "Define a symbol"
msgstr "Задаване на име"
-#: lexsup.c:327
+#: lexsup.c:331
msgid "[=STYLE]"
msgstr "[=ÐÐЧИÐ]"
-#: lexsup.c:327
+#: lexsup.c:331
msgid "Demangle symbol names [using STYLE]"
msgstr "Декориране на имена [използвайки ÐÐЧИÐ]"
-#: lexsup.c:331
+#: lexsup.c:335
msgid ""
"Do not allow multiple definitions with symbols included\n"
" in filename invoked by -R or --just-symbols"
msgstr ""
-#: lexsup.c:335
+#: lexsup.c:340
msgid "Generate embedded relocs"
msgstr "Създаване на вградени премеÑтваниÑ"
-#: lexsup.c:337
+#: lexsup.c:342
msgid "Treat warnings as errors"
msgstr "Третиране на Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ñ ÐºÐ°Ñ‚Ð¾ грешки"
-#: lexsup.c:340
+#: lexsup.c:345
msgid "Do not treat warnings as errors (default)"
msgstr "Да не Ñе третиране Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ñ ÐºÐ°Ñ‚Ð¾ грешки (по подразбиране)"
-#: lexsup.c:343
+#: lexsup.c:348
msgid "Call SYMBOL at unload-time"
msgstr "Извикване на ИМЕ по време разтоварване"
-#: lexsup.c:345
+#: lexsup.c:350
msgid "Force generation of file with .exe suffix"
msgstr "Принудително Ñъздаване на файл Ñ Ð½Ð°Ñтавка .exe "
-#: lexsup.c:347
+#: lexsup.c:352
msgid "Remove unused sections (on some targets)"
msgstr "Изтриване на неизползвани раздели (за нÑкои резултати)"
-#: lexsup.c:350
+#: lexsup.c:355
msgid "Don't remove unused sections (default)"
msgstr "Без изтриване на неизползвани раздели (по подразбиране)"
-#: lexsup.c:353
+#: lexsup.c:358
msgid "List removed unused sections on stderr"
msgstr "Извеждане, на изхода за грешки, на изтритите неизползвани раздели"
-#: lexsup.c:356
+#: lexsup.c:361
msgid "Do not list removed unused sections"
msgstr "Без извеждане на изтритите неизползвани раздели"
-#: lexsup.c:359
+#: lexsup.c:364
msgid "Keep exported symbols when removing unused sections"
msgstr ""
-#: lexsup.c:362
+#: lexsup.c:367
msgid "Set default hash table size close to <NUMBER>"
msgstr "УÑтановÑва размер, по подразбиране, на речника близък до <ЧИСЛО>"
-#: lexsup.c:365
+#: lexsup.c:370
msgid "Print option help"
msgstr "Извеждане на помощ за опците"
-#: lexsup.c:367
+#: lexsup.c:372
msgid "Call SYMBOL at load-time"
msgstr "Извикване на ИМЕ по време на зареждане"
-#: lexsup.c:369
+#: lexsup.c:374
msgid "FILE/DIR"
msgstr "ФÐЙЛ/ДИР"
-#: lexsup.c:369
+#: lexsup.c:374
msgid "Write a linker map to FILE or DIR/<outputname>.map"
msgstr "ЗапиÑва карта за Ñвързването във ФÐЙЛ или ДИР/<изходиме>.map"
-#: lexsup.c:371
+#: lexsup.c:376
msgid "Do not define Common storage"
msgstr "Без определÑне на Ð°Ð´Ñ€ÐµÑ Ð·Ð° общи имена"
-#: lexsup.c:373
+#: lexsup.c:378
msgid "Do not demangle symbol names"
msgstr "Без Ð´ÐµÐºÐ¾Ñ€Ð°Ñ†Ð¸Ñ Ð·Ð° имената"
-#: lexsup.c:375
+#: lexsup.c:380
msgid "Use less memory and more disk I/O"
msgstr "Използване на по-малко памет и повече диÑкови операции"
-#: lexsup.c:377
+#: lexsup.c:382
msgid "Do not allow unresolved references in object files"
msgstr "ÐепозволÑва неÑвързани отпратки при обектни файлове"
-#: lexsup.c:380
+#: lexsup.c:385
msgid "Allow unresolved references in shared libraries"
msgstr "ПозволÑва неÑвързани отпратки при Ñподелени библиотеки"
-#: lexsup.c:384
+#: lexsup.c:389
msgid "Do not allow unresolved references in shared libs"
msgstr "ÐепозволÑва неÑвързани отпратки при Ñподелени библиотеки"
-#: lexsup.c:388
+#: lexsup.c:393
msgid "Allow multiple definitions"
msgstr "ПозволÑва повтарÑне на определениÑ"
-#: lexsup.c:390
+#: lexsup.c:397
+msgid "SCRIPT"
+msgstr ""
+
+#: lexsup.c:397
+msgid "Provide a script to help with undefined symbol errors"
+msgstr ""
+
+#: lexsup.c:400
msgid "Disallow undefined version"
msgstr "ÐепозволÑва неопределена верÑиÑ"
-#: lexsup.c:392
+#: lexsup.c:402
msgid "Create default symbol version"
msgstr "Създаване на подразбираща Ñе верÑÐ¸Ñ Ð·Ð° име"
-#: lexsup.c:395
+#: lexsup.c:405
msgid "Create default symbol version for imported symbols"
msgstr "Създаване на подразбираща Ñе верÑÐ¸Ñ Ð·Ð° име при внеÑените имена"
-#: lexsup.c:398
+#: lexsup.c:408
msgid "Don't warn about mismatched input files"
msgstr "Без предупреждениe за неÑъответÑтващи входÑщи файлове"
-#: lexsup.c:401
+#: lexsup.c:411
msgid "Don't warn on finding an incompatible library"
msgstr "Без Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸ откриване на неÑъвмеÑтими библиотеки"
-#: lexsup.c:404
+#: lexsup.c:414
msgid "Turn off --whole-archive"
msgstr "Изключване на --whole-archive"
-#: lexsup.c:406
+#: lexsup.c:416
msgid "Create an output file even if errors occur"
msgstr "Създаване на изходен файл, дори при грешки"
-#: lexsup.c:411
+#: lexsup.c:421
msgid ""
"Only use library directories specified on\n"
" the command line"
@@ -1627,143 +1685,151 @@ msgstr ""
"Използване Ñамо на директорите за библиотеки\n"
" зададени на ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¸Ñ Ñ€ÐµÐ´"
-#: lexsup.c:415
+#: lexsup.c:425
msgid "Specify target of output file"
msgstr "Задаване на целта за резултата"
-#: lexsup.c:418
+#: lexsup.c:428
msgid "Print default output format"
msgstr "Извежда Ð¿Ð¾Ð´Ñ€Ð°Ð·Ð±Ð¸Ñ€Ð°Ñ‰Ð¸Ñ Ñе изходÑщ формат"
-#: lexsup.c:420
+#: lexsup.c:430
msgid "Print current sysroot"
msgstr "Извежда Ñ‚ÐµÐºÑƒÑ‰Ð¸Ñ sysroot"
-#: lexsup.c:422
+#: lexsup.c:432
msgid "Ignored for Linux compatibility"
msgstr "ИзоÑтавен за ÑъвмеÑтимоÑÑ‚ Ñ Ð›Ð¸Ð½ÑƒÐºÑ"
-#: lexsup.c:425
+#: lexsup.c:435
msgid "Reduce memory overheads, possibly taking much longer"
msgstr "ÐамалÑване на използваната памет, възможно е Ñвързването да протече по-дълго"
-#: lexsup.c:428
+#: lexsup.c:439
+msgid "Set the maximum cache size to SIZE bytes"
+msgstr ""
+
+#: lexsup.c:442
msgid "Reduce code size by using target specific optimizations"
msgstr "ÐамалÑване на размера на кода Ñ Ð¸Ð·Ð¿Ð¾Ð»Ð·Ð²Ð°Ð½Ðµ на Ð¾Ð¿Ñ‚Ð¸Ð¼Ð¸Ð·Ð°Ñ†Ð¸Ñ Ñ…Ð°Ñ€Ð°ÐºÑ‚ÐµÑ€Ð½Ð° за целта"
-#: lexsup.c:430
+#: lexsup.c:444
msgid "Do not use relaxation techniques to reduce code size"
msgstr "Да не Ñе използват намалÑващи похвати, за да Ñе ограничи размера на кода"
-#: lexsup.c:433
+#: lexsup.c:447
msgid "Keep only symbols listed in FILE"
msgstr "Запазване Ñамо на имената изброени във ФÐЙЛ"
-#: lexsup.c:435
+#: lexsup.c:449
msgid "Set runtime shared library search path"
msgstr "Задава път за Ñ‚ÑŠÑ€Ñене на Ñподелена библиотека по време на изпълнение"
-#: lexsup.c:437
+#: lexsup.c:451
msgid "Set link time shared library search path"
msgstr "Задава път за Ñ‚ÑŠÑ€Ñене на Ñподелена библиотека по време на Ñвързване"
-#: lexsup.c:440
+#: lexsup.c:454
msgid "Create a shared library"
msgstr "Създаване на Ñподелена библиотека"
-#: lexsup.c:444
+#: lexsup.c:458
msgid "Create a position independent executable"
msgstr "Създаване на позиционно незавиÑим изпълним файл"
-#: lexsup.c:448
+#: lexsup.c:462
+msgid "Create a position dependent executable (default)"
+msgstr "Създаване на позиционно незавиÑим изпълним файл (подразбиране)"
+
+#: lexsup.c:464
msgid "[=ascending|descending]"
msgstr "[=възходÑщ|низходÑщ]"
-#: lexsup.c:449
+#: lexsup.c:465
msgid "Sort common symbols by alignment [in specified order]"
msgstr "Подреждане на общите имена по подравнÑване [в Ð·Ð°Ð´Ð°Ð´ÐµÐ½Ð¸Ñ Ñ€ÐµÐ´]"
-#: lexsup.c:454
+#: lexsup.c:470
msgid "name|alignment"
msgstr "име|подравнÑване"
-#: lexsup.c:455
+#: lexsup.c:471
msgid "Sort sections by name or maximum alignment"
msgstr "Подреждане на раздели по име или макÑимално подравнÑваме"
-#: lexsup.c:457
+#: lexsup.c:473
msgid "COUNT"
msgstr "БРОЙ"
-#: lexsup.c:457
+#: lexsup.c:473
msgid "How many tags to reserve in .dynamic section"
msgstr "Колко отметки да Ñе заделÑÑ‚ за раздел .dynamic"
-#: lexsup.c:460
+#: lexsup.c:476
msgid "[=SIZE]"
msgstr "[=РÐЗМЕР]"
-#: lexsup.c:460
+#: lexsup.c:476
msgid "Split output sections every SIZE octets"
msgstr "РазделÑне на резултатните раздели на вÑеки РÐЗМЕР оÑморки"
-#: lexsup.c:463
+#: lexsup.c:479
msgid "[=COUNT]"
msgstr "[=БРОЙ]"
-#: lexsup.c:463
+#: lexsup.c:479
msgid "Split output sections every COUNT relocs"
msgstr "РазделÑне на резултатните раздели на вÑеки БРОЙ премеÑтваниÑ"
-#: lexsup.c:466
+#: lexsup.c:482
msgid "Print memory usage statistics"
msgstr "Извеждане на ÑтатиÑтика за изполване на паметта"
-#: lexsup.c:468
+#: lexsup.c:484
msgid "Display target specific options"
msgstr "Извеждане на опции, Ñпецифични за целта"
-#: lexsup.c:470
+#: lexsup.c:486
msgid "Do task level linking"
msgstr "Свързване на ниво задача"
-#: lexsup.c:472
+#: lexsup.c:488
msgid "Use same format as native linker"
msgstr "Използване на ÑÑŠÑ‰Ð¸Ñ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ като Ñтандартната програма за Ñвързване"
-#: lexsup.c:474
+#: lexsup.c:490
msgid "SECTION=ADDRESS"
msgstr "РÐЗДЕЛ=ÐДРЕС"
-#: lexsup.c:474
+#: lexsup.c:490
msgid "Set address of named section"
msgstr "Задаване на Ð°Ð´Ñ€ÐµÑ Ð½Ð° именуван раздел"
-#: lexsup.c:477
+#: lexsup.c:493
msgid "Set address of .bss section"
msgstr "Задаване на Ð°Ð´Ñ€ÐµÑ Ð½Ð° раздел .bss"
-#: lexsup.c:479
+#: lexsup.c:495
msgid "Set address of .data section"
msgstr "Задаване на Ð°Ð´Ñ€ÐµÑ Ð½Ð° раздел .data"
-#: lexsup.c:481
+#: lexsup.c:497
msgid "Set address of .text section"
msgstr "Задаване на Ð°Ð´Ñ€ÐµÑ Ð½Ð° раздел .text"
-#: lexsup.c:483
+#: lexsup.c:499
msgid "Set address of text segment"
msgstr "Задаване Ð°Ð´Ñ€ÐµÑ Ð½Ð° чаÑтта .text"
-#: lexsup.c:485
+#: lexsup.c:501
msgid "Set address of rodata segment"
msgstr "Задаване Ð°Ð´Ñ€ÐµÑ Ð½Ð° чаÑтта .rodata"
-#: lexsup.c:487
+#: lexsup.c:503
msgid "Set address of ldata segment"
msgstr "Задаване Ð°Ð´Ñ€ÐµÑ Ð½Ð° чаÑтта .ldata"
-#: lexsup.c:490
+#: lexsup.c:506
msgid ""
"How to handle unresolved symbols. <method> is:\n"
" ignore-all, report-all, ignore-in-object-files,\n"
@@ -1773,19 +1839,19 @@ msgstr ""
" ignore-all, report-all, ignore-in-object-files,\n"
" ignore-in-shared-libs"
-#: lexsup.c:495
+#: lexsup.c:511
msgid "[=NUMBER]"
msgstr "[=ЧИСЛО]"
-#: lexsup.c:496
+#: lexsup.c:512
msgid "Output lots of information during link"
msgstr "Извеждане, при Ñвързване, на допълнително Ñведение"
-#: lexsup.c:500
+#: lexsup.c:516
msgid "Read version information script"
msgstr "Използва Ñкрипт ÑÑŠÑ Ñведение за верÑии"
-#: lexsup.c:503
+#: lexsup.c:519
msgid ""
"Take export symbols list from .exports, using\n"
" SYMBOL as the version."
@@ -1793,156 +1859,180 @@ msgstr ""
"Използване на ÑпиÑък Ñ Ð¸Ð¼ÐµÐ½Ð° за Ð¸Ð·Ð½Ð¾Ñ Ð¾Ñ‚ .exports, използвайки\n"
" ИМЕ като верÑиÑ."
-#: lexsup.c:507
+#: lexsup.c:523
msgid "Add data symbols to dynamic list"
msgstr "ДобавÑне на имената на данните към динамичен ÑпиÑък"
-#: lexsup.c:509
+#: lexsup.c:525
msgid "Use C++ operator new/delete dynamic list"
msgstr "Използване на динамичен ÑпиÑък за C++ оператори new/delete"
-#: lexsup.c:511
+#: lexsup.c:527
msgid "Use C++ typeinfo dynamic list"
msgstr "Използване на динамичен ÑпиÑък за \"C++ Ñведение за тип\""
-#: lexsup.c:513
+#: lexsup.c:529
msgid "Read dynamic list"
msgstr "Използва динамичен ÑпиÑък"
-#: lexsup.c:515
+#: lexsup.c:531
msgid "Export the specified symbol"
msgstr "ИзнаÑÑне на зададените имена"
-#: lexsup.c:517
+#: lexsup.c:533
msgid "Read export dynamic symbol list"
msgstr "Прочита ÑпиÑък от изнеÑените динамични имена"
-#: lexsup.c:519
+#: lexsup.c:535
msgid "Warn about duplicate common symbols"
msgstr "Предупреждение при повторени общи имена"
-#: lexsup.c:521
+#: lexsup.c:537
msgid "Warn if global constructors/destructors are seen"
msgstr "Предупреждение, ако Ñе Ñрещнат общи конÑтрутори/деÑтруктори"
-#: lexsup.c:524
+#: lexsup.c:540
msgid "Warn if the multiple GP values are used"
msgstr "Предупреждение за използване на нÑколко GP ÑтойноÑти"
-#: lexsup.c:526
+#: lexsup.c:542
msgid "Warn only once per undefined symbol"
msgstr "Еднократно предупреждение за неопределено име"
-#: lexsup.c:528
+#: lexsup.c:544
msgid "Warn if start of section changes due to alignment"
msgstr "Предупреждение, ако началото на раздел Ñе Ð¿Ñ€Ð¾Ð¼ÐµÐ½Ñ Ð·Ð°Ñ€Ð°Ð´Ð¸ подравнÑване"
-#: lexsup.c:533
-msgid "Warn if outpout has DT_TEXTREL (default)"
+#: lexsup.c:549
+msgid "Warn if output has DT_TEXTREL (default)"
msgstr "Предупреждение, ако \"изхода\" Ñъдържа DT_TEXTREL (подразбиране)"
-#: lexsup.c:535
-msgid "Warn if outpout has DT_TEXTREL"
+#: lexsup.c:551
+msgid "Warn if output has DT_TEXTREL"
msgstr "Предупреждение, ако \"изхода\" Ñъдържа DT_TEXTREL"
-#: lexsup.c:541
+#: lexsup.c:557
msgid "Warn if an object has alternate ELF machine code"
msgstr "Предупреждение, ако обекта е Ñ Ð´Ñ€ÑƒÐ³ ELF код за машина"
-#: lexsup.c:545
+#: lexsup.c:561
msgid "Report unresolved symbols as warnings"
msgstr "Докладване на неÑвързани имена като предупреждениÑ"
-#: lexsup.c:548
+#: lexsup.c:564
msgid "Report unresolved symbols as errors"
msgstr "Докладване на неÑвързани имена като грешки"
-#: lexsup.c:550
+#: lexsup.c:566
msgid "Include all objects from following archives"
msgstr "Включване на вÑички обекти от Ñледните архиви"
-#: lexsup.c:553
+#: lexsup.c:569
msgid "Use wrapper functions for SYMBOL"
msgstr "Използване на 'обвиващи' функции за ИМЕ"
-#: lexsup.c:557
+#: lexsup.c:573
msgid "Unresolved SYMBOL will not cause an error or warning"
msgstr "Ðеизползвано ИМЕ нÑма да причини грешка или предупреждение"
-#: lexsup.c:559
+#: lexsup.c:575
msgid "Push state of flags governing input file handling"
msgstr ""
-#: lexsup.c:562
+#: lexsup.c:578
msgid "Pop state of flags governing input file handling"
msgstr ""
-#: lexsup.c:565
+#: lexsup.c:581
msgid "Report target memory usage"
msgstr ""
-#: lexsup.c:567
+#: lexsup.c:583
msgid "=MODE"
msgstr ""
-#: lexsup.c:567
+#: lexsup.c:583
msgid "Control how orphan sections are handled."
msgstr ""
-#: lexsup.c:570
+#: lexsup.c:586
msgid "Show discarded sections in map file output (default)"
msgstr ""
-#: lexsup.c:573
+#: lexsup.c:589
msgid "Do not show discarded sections in map file output"
msgstr ""
-#: lexsup.c:751
+#: lexsup.c:592
+msgid "Emit names and types of static variables in CTF"
+msgstr ""
+
+#: lexsup.c:595
+msgid "Do not emit names and types of static variables in CTF"
+msgstr ""
+
+#: lexsup.c:599
+msgid ""
+"How to share CTF types between translation units.\n"
+" <method> is: share-unconflicted (default),\n"
+" share-duplicated"
+msgstr ""
+
+#: lexsup.c:763
+msgid "%F%P: Error: unable to disambiguate: %s (did you mean -%s ?)\n"
+msgstr ""
+
+#: lexsup.c:766
+msgid "%P: Warning: grouped short command line options are deprecated: %s\n"
+msgstr ""
+
+#: lexsup.c:793
msgid "%P: %s: missing argument\n"
msgstr "%P: %s: липÑва аргумент\n"
-#: lexsup.c:756
+#: lexsup.c:798
msgid "%P: unrecognized option '%s'\n"
msgstr "%P: неразпозната Ð¾Ð¿Ñ†Ð¸Ñ '%s'\n"
-#: lexsup.c:761
+#: lexsup.c:803
msgid "%F%P: use the --help option for usage information\n"
msgstr "%F%P: да Ñе използва --help за Ñведение за употреба\n"
-#: lexsup.c:780
+#: lexsup.c:822
msgid "%F%P: unrecognized -a option `%s'\n"
msgstr "%F%P: неразпозната Ð¾Ð¿Ñ†Ð¸Ñ -a '%s'\n"
-#: lexsup.c:793
+#: lexsup.c:835
msgid "%F%P: unrecognized -assert option `%s'\n"
msgstr "%F%P: неразпозната Ð¾Ð¿Ñ†Ð¸Ñ -assert '%s'\n"
-#: lexsup.c:837
+#: lexsup.c:879
msgid "%F%P: unknown demangling style `%s'\n"
msgstr "%F%P: непознат начин за декориране на имена '%s'\n"
-#: lexsup.c:913 lexsup.c:1372 eaarch64cloudabi.c:803 eaarch64cloudabib.c:803
-#: eaarch64elf.c:798 eaarch64elf32.c:798 eaarch64elf32b.c:798
-#: eaarch64elfb.c:798 eaarch64fbsd.c:803 eaarch64fbsdb.c:803
-#: eaarch64linux.c:803 eaarch64linux32.c:803 eaarch64linux32b.c:803
-#: eaarch64linuxb.c:803 earmelf.c:1064 earmelf_fbsd.c:1064
-#: earmelf_fuchsia.c:1069 earmelf_linux.c:1069 earmelf_linux_eabi.c:1069
-#: earmelf_linux_fdpiceabi.c:1069 earmelf_nacl.c:1069 earmelf_nbsd.c:1064
-#: earmelf_phoenix.c:1069 earmelf_vxworks.c:1100 earmelfb.c:1064
-#: earmelfb_fbsd.c:1064 earmelfb_fuchsia.c:1069 earmelfb_linux.c:1069
-#: earmelfb_linux_eabi.c:1069 earmelfb_linux_fdpiceabi.c:1069
-#: earmelfb_nacl.c:1069 earmelfb_nbsd.c:1064 earmnto.c:1039 earmsymbian.c:1064
-#: ecskyelf.c:530 ecskyelf_linux.c:693 eelf32metag.c:690 eelf64lppc.c:1149
-#: eelf64ppc.c:1149 eelf64ppc_fbsd.c:1149 ehppaelf.c:550 ehppalinux.c:728
-#: ehppanbsd.c:728 ehppaobsd.c:728
+#: lexsup.c:955 lexsup.c:1429 eaarch64cloudabi.c:818 eaarch64cloudabib.c:818
+#: eaarch64elf.c:813 eaarch64elf32.c:813 eaarch64elf32b.c:813
+#: eaarch64elfb.c:813 eaarch64fbsd.c:818 eaarch64fbsdb.c:818
+#: eaarch64haiku.c:818 eaarch64linux.c:818 eaarch64linux32.c:818
+#: eaarch64linux32b.c:818 eaarch64linuxb.c:818 earmelf.c:1079
+#: earmelf_fbsd.c:1079 earmelf_fuchsia.c:1084 earmelf_haiku.c:1084
+#: earmelf_linux.c:1084 earmelf_linux_eabi.c:1084
+#: earmelf_linux_fdpiceabi.c:1084 earmelf_nacl.c:1084 earmelf_nbsd.c:1079
+#: earmelf_phoenix.c:1084 earmelf_vxworks.c:1115 earmelfb.c:1079
+#: earmelfb_fbsd.c:1079 earmelfb_fuchsia.c:1084 earmelfb_linux.c:1084
+#: earmelfb_linux_eabi.c:1084 earmelfb_linux_fdpiceabi.c:1084
+#: earmelfb_nacl.c:1084 earmelfb_nbsd.c:1079 earmnto.c:1054 ecskyelf.c:541
+#: ecskyelf_linux.c:708 eelf32metag.c:705 eelf64lppc.c:1187
+#: eelf64lppc_fbsd.c:1187 eelf64ppc.c:1187 eelf64ppc_fbsd.c:1187
+#: ehppaelf.c:561 ehppalinux.c:743 ehppanbsd.c:743 ehppaobsd.c:743
msgid "%F%P: invalid number `%s'\n"
msgstr "%F%P: неправилно чиÑло '%s'\n"
-#: lexsup.c:1009
+#: lexsup.c:1051
msgid "%F%P: bad --unresolved-symbols option: %s\n"
msgstr "%F%P: грешна Ð¾Ð¿Ñ†Ð¸Ñ --unresolved-symbols: %s\n"
-#: lexsup.c:1077
+#: lexsup.c:1128
msgid "%F%P: bad -plugin-opt option\n"
msgstr "%F%P: грешна Ð¾Ð¿Ñ†Ð¸Ñ -plugin-opt\n"
@@ -1954,423 +2044,481 @@ msgstr "%F%P: грешна Ð¾Ð¿Ñ†Ð¸Ñ -plugin-opt\n"
#. an error message here. We cannot just make this a warning,
#. increment optind, and continue because getopt is too confused
#. and will seg-fault the next time around.
-#: lexsup.c:1094
+#: lexsup.c:1145
msgid "%F%P: unrecognised option: %s\n"
msgstr "%F%P: неразпозната Ð¾Ð¿Ñ†Ð¸Ñ '%s'\n"
-#: lexsup.c:1097 lexsup.c:1207 lexsup.c:1225 lexsup.c:1341
+#: lexsup.c:1148 lexsup.c:1258 lexsup.c:1279 lexsup.c:1398
msgid "%F%P: -r and %s may not be used together\n"
msgstr "%F%P: -r и %s не може да Ñе използват заедно\n"
-#: lexsup.c:1219
+#: lexsup.c:1270
msgid "%F%P: -shared not supported\n"
msgstr "%F%P: не Ñе поддържа -shared\n"
-#: lexsup.c:1230
+#: lexsup.c:1284
msgid "%F%P: -pie not supported\n"
msgstr "%F%P: не Ñе поддържа -pie\n"
-#: lexsup.c:1236
+#: lexsup.c:1290
msgid "%P: SONAME must not be empty string; keeping previous one\n"
msgstr "%P: SONAME не може да е празен низ - запазване на предишното\n"
-#: lexsup.c:1242
+#: lexsup.c:1296
msgid "descending"
msgstr "низходÑщ"
-#: lexsup.c:1244
+#: lexsup.c:1298
msgid "ascending"
msgstr "възходÑщ"
-#: lexsup.c:1247
+#: lexsup.c:1301
msgid "%F%P: invalid common section sorting option: %s\n"
msgstr "%F%P: неправилна Ð¾Ð¿Ñ†Ð¸Ñ Ð·Ð° подреждане на общ раздел: %s\n"
-#: lexsup.c:1251
+#: lexsup.c:1305
msgid "name"
msgstr "име"
-#: lexsup.c:1253
+#: lexsup.c:1307
msgid "alignment"
msgstr "подравнÑване"
-#: lexsup.c:1256
+#: lexsup.c:1310
msgid "%F%P: invalid section sorting option: %s\n"
msgstr "%F%P: неправилна Ð¾Ð¿Ñ†Ð¸Ñ Ð·Ð° подреждане на раздел: %s\n"
-#: lexsup.c:1290
+#: lexsup.c:1347
msgid "%F%P: invalid argument to option \"--section-start\"\n"
msgstr "%F%P: неправилен аргумент за опциÑта \"--section-start\"\n"
-#: lexsup.c:1297
+#: lexsup.c:1354
msgid "%F%P: missing argument(s) to option \"--section-start\"\n"
msgstr "%F%P: липÑват аргументи за опциÑта \"--section-start\"\n"
-#: lexsup.c:1562
+#: lexsup.c:1619
msgid "%F%P: group ended before it began (--help for usage)\n"
msgstr "%F%P: групата завърши преди да е започната (--help за употреба)\n"
-#: lexsup.c:1590
+#: lexsup.c:1644
+msgid "%F%P: invalid cache memory size: %s\n"
+msgstr "%F%P: неправилен размер на памет за Ñкладиране: %s\n"
+
+#: lexsup.c:1658
msgid "%X%P: --hash-size needs a numeric argument\n"
msgstr "%X%P: --hash-size изиÑква чиÑло за аргумент\n"
-#: lexsup.c:1602
+#: lexsup.c:1670
msgid "%F%P: no state pushed before popping\n"
msgstr ""
-#: lexsup.c:1625
+#: lexsup.c:1693
msgid "%F%P: invalid argument to option \"--orphan-handling\"\n"
msgstr "%F%P: неправилен аргумент за опциÑта \"--orphan-handling\"\n"
-#: lexsup.c:1648
+#: lexsup.c:1723
+msgid "%F%P: bad --ctf-share-types option: %s\n"
+msgstr "%F%P: грешна Ð¾Ð¿Ñ†Ð¸Ñ --ctf-share-types: %s\n"
+
+#: lexsup.c:1741
msgid "%P: no file/directory name provided for map output; ignored\n"
msgstr ""
-#. If this alloc fails then something is probably very
+#: lexsup.c:1769
+msgid "%P: cannot stat linker map file: %E\n"
+msgstr "%P: не може да Ñе определи файла Ñ ÐºÐ°Ñ€Ñ‚Ð° за Ñвързването: %E\n"
+
+#: lexsup.c:1781
+msgid "%P: linker map file is not a regular file\n"
+msgstr ""
+
+#. If the asprintf failed then something is probably very
#. wrong. Better to halt now rather than continue on
#. into more problems.
-#: lexsup.c:1669
+#: lexsup.c:1792
msgid "%P%F: cannot create name for linker map file: %E\n"
msgstr "%P%F: не може да Ñе Ñъздаде име на файл Ñ ÐºÐ°Ñ€Ñ‚Ð° за Ñвързването: %E\n"
-#: lexsup.c:1680
+#: lexsup.c:1803
msgid "%P: SONAME must not be empty string; ignored\n"
msgstr "%P: SONAME не може да е празен низ - изоÑтавено\n"
-#: lexsup.c:1686
+#: lexsup.c:1809
msgid "%P: missing --end-group; added as last command line option\n"
msgstr ""
-#: lexsup.c:1794
+#: lexsup.c:1917
msgid "%F%P: -F may not be used without -shared\n"
msgstr "%F%P: -F не може да Ñе използва без -shared\n"
-#: lexsup.c:1796
+#: lexsup.c:1919
msgid "%F%P: -f may not be used without -shared\n"
msgstr "%F%P: -f не може да Ñе използва без -shared\n"
-#: lexsup.c:1837 lexsup.c:1850
+#: lexsup.c:1960 lexsup.c:1973
msgid "%F%P: invalid hex number `%s'\n"
msgstr "%F%P: неправилно шеÑÑ‚. чиÑло '%s'\n"
-#: lexsup.c:1880
+#: lexsup.c:2003
#, c-format
msgid " --audit=AUDITLIB Specify a library to use for auditing\n"
msgstr ""
-#: lexsup.c:1882
+#: lexsup.c:2005
#, c-format
msgid " -Bgroup Selects group name lookup rules for DSO\n"
msgstr ""
-#: lexsup.c:1884
+#: lexsup.c:2007
#, c-format
msgid " --disable-new-dtags Disable new dynamic tags\n"
msgstr ""
-#: lexsup.c:1886
+#: lexsup.c:2009
#, c-format
msgid " --enable-new-dtags Enable new dynamic tags\n"
msgstr ""
-#: lexsup.c:1888
+#: lexsup.c:2011
#, c-format
msgid " --eh-frame-hdr Create .eh_frame_hdr section\n"
msgstr ""
-#: lexsup.c:1890
+#: lexsup.c:2013
#, c-format
msgid " --no-eh-frame-hdr Do not create .eh_frame_hdr section\n"
msgstr ""
-#: lexsup.c:1892
+#: lexsup.c:2015
#, c-format
msgid " --exclude-libs=LIBS Make all symbols in LIBS hidden\n"
msgstr ""
-#: lexsup.c:1894
+#: lexsup.c:2017
#, c-format
msgid " --hash-style=STYLE Set hash style to sysv/gnu/both. Default: "
msgstr ""
-#: lexsup.c:1913
+#: lexsup.c:2036
#, c-format
msgid ""
" -P AUDITLIB, --depaudit=AUDITLIB\n"
" Specify a library to use for auditing dependencies\n"
msgstr ""
-#: lexsup.c:1916
+#: lexsup.c:2039
#, c-format
msgid " -z combreloc Merge dynamic relocs into one section and sort\n"
msgstr ""
-#: lexsup.c:1918
+#: lexsup.c:2041
#, c-format
msgid " -z nocombreloc Don't merge dynamic relocs into one section\n"
msgstr ""
-#: lexsup.c:1920
+#: lexsup.c:2043
#, c-format
msgid ""
" -z global Make symbols in DSO available for subsequently\n"
" loaded objects\n"
msgstr ""
-#: lexsup.c:1923
+#: lexsup.c:2046
#, c-format
msgid " -z initfirst Mark DSO to be initialized first at runtime\n"
msgstr ""
-#: lexsup.c:1925
+#: lexsup.c:2048
#, c-format
msgid " -z interpose Mark object to interpose all DSOs but executable\n"
msgstr ""
-#: lexsup.c:1927
+#: lexsup.c:2050
+#, c-format
+msgid " -z unique Mark DSO to be loaded at most once by default, and only in the main namespace\n"
+msgstr ""
+
+#: lexsup.c:2052
+#, c-format
+msgid " -z nounique Don't mark DSO as a loadable at most once\n"
+msgstr ""
+
+#: lexsup.c:2054
#, c-format
msgid " -z lazy Mark object lazy runtime binding (default)\n"
msgstr ""
-#: lexsup.c:1929
+#: lexsup.c:2056
#, c-format
msgid " -z loadfltr Mark object requiring immediate process\n"
msgstr ""
-#: lexsup.c:1931
+#: lexsup.c:2058
#, c-format
msgid " -z nocopyreloc Don't create copy relocs\n"
msgstr ""
-#: lexsup.c:1933
+#: lexsup.c:2060
#, c-format
msgid " -z nodefaultlib Mark object not to use default search paths\n"
msgstr ""
-#: lexsup.c:1935
+#: lexsup.c:2062
#, c-format
msgid " -z nodelete Mark DSO non-deletable at runtime\n"
msgstr ""
-#: lexsup.c:1937
+#: lexsup.c:2064
#, c-format
msgid " -z nodlopen Mark DSO not available to dlopen\n"
msgstr ""
-#: lexsup.c:1939
+#: lexsup.c:2066
#, c-format
msgid " -z nodump Mark DSO not available to dldump\n"
msgstr ""
-#: lexsup.c:1941
+#: lexsup.c:2068
#, c-format
msgid " -z now Mark object non-lazy runtime binding\n"
msgstr ""
-#: lexsup.c:1943
+#: lexsup.c:2070
#, c-format
msgid ""
" -z origin Mark object requiring immediate $ORIGIN\n"
" processing at runtime\n"
msgstr ""
-#: lexsup.c:1947
+#: lexsup.c:2074
#, c-format
msgid " -z relro Create RELRO program header (default)\n"
msgstr ""
-#: lexsup.c:1949
+#: lexsup.c:2076
#, c-format
msgid " -z norelro Don't create RELRO program header\n"
msgstr ""
-#: lexsup.c:1952
+#: lexsup.c:2079
#, c-format
msgid " -z relro Create RELRO program header\n"
msgstr ""
-#: lexsup.c:1954
+#: lexsup.c:2081
#, c-format
msgid " -z norelro Don't create RELRO program header (default)\n"
msgstr ""
-#: lexsup.c:1958
+#: lexsup.c:2085
#, c-format
msgid " -z separate-code Create separate code program header (default)\n"
msgstr " -z separate-code Създаване на отделно програмно заглавие (по подразбиране)\n"
-#: lexsup.c:1960
+#: lexsup.c:2087
#, c-format
msgid " -z noseparate-code Don't create separate code program header\n"
msgstr " -z noseparate-code Без Ñъздаване на отделно програмно заглавие\n"
-#: lexsup.c:1963
+#: lexsup.c:2090
#, c-format
msgid " -z separate-code Create separate code program header\n"
msgstr " -z separate-code Създаване на отделно програмно заглавие\n"
-#: lexsup.c:1965
+#: lexsup.c:2092
#, c-format
msgid " -z noseparate-code Don't create separate code program header (default)\n"
msgstr " -z noseparate-code Без Ñъздаване на отделно програмно заглавие (по подразбиране)\n"
-#: lexsup.c:1968
+#: lexsup.c:2095
#, c-format
msgid " -z common Generate common symbols with STT_COMMON type\n"
msgstr ""
-#: lexsup.c:1970
+#: lexsup.c:2097
#, c-format
msgid " -z nocommon Generate common symbols with STT_OBJECT type\n"
msgstr ""
-#: lexsup.c:1972
-#, c-format
-msgid " -z stack-size=SIZE Set size of stack segment\n"
-msgstr " -z --stack <размер> УÑтановÑва размера на чаÑта за Ñтек\n"
-
-#: lexsup.c:1975
+#: lexsup.c:2100
#, c-format
msgid " -z text Treat DT_TEXTREL in output as error (default)\n"
msgstr ""
-#: lexsup.c:1978
+#: lexsup.c:2103
#, c-format
msgid " -z text Treat DT_TEXTREL in output as error\n"
msgstr ""
-#: lexsup.c:1982
+#: lexsup.c:2107
#, c-format
msgid " -z notext Don't treat DT_TEXTREL in output as error (default)\n"
msgstr ""
-#: lexsup.c:1984
+#: lexsup.c:2109
#, c-format
msgid " -z textoff Don't treat DT_TEXTREL in output as error (default)\n"
msgstr ""
-#: lexsup.c:1989
+#: lexsup.c:2114
#, c-format
msgid " -z notext Don't treat DT_TEXTREL in output as error\n"
msgstr ""
-#: lexsup.c:1991
+#: lexsup.c:2116
#, c-format
msgid " -z textoff Don't treat DT_TEXTREL in output as error\n"
msgstr ""
-#: lexsup.c:1999
+#: lexsup.c:2124
#, c-format
msgid " --build-id[=STYLE] Generate build ID note\n"
msgstr ""
-#: lexsup.c:2001
+#: lexsup.c:2126
#, c-format
msgid ""
" --compress-debug-sections=[none|zlib|zlib-gnu|zlib-gabi]\n"
" Compress DWARF debug sections using zlib\n"
msgstr ""
-#: lexsup.c:2005
+#: lexsup.c:2130
#, c-format
msgid " Default: zlib-gabi\n"
msgstr " По подразбиране: zlib-gabi\n"
-#: lexsup.c:2008
+#: lexsup.c:2133
#, c-format
msgid " Default: none\n"
msgstr " По подразбиране: none\n"
-#: lexsup.c:2011
+#: lexsup.c:2136
#, c-format
msgid " -z common-page-size=SIZE Set common page size to SIZE\n"
msgstr ""
-#: lexsup.c:2013
+#: lexsup.c:2138
#, c-format
msgid " -z max-page-size=SIZE Set maximum page size to SIZE\n"
msgstr ""
-#: lexsup.c:2015
+#: lexsup.c:2140
#, c-format
msgid " -z defs Report unresolved symbols in object files\n"
msgstr " -z defs Извежда неÑвързаните имена в обектните файлове\n"
-#: lexsup.c:2017
+#: lexsup.c:2142
+#, c-format
+msgid " -z undefs Ignore unresolved symbols in object files\n"
+msgstr " -z undefs Пренебрегва неÑвързаните имена в обектните файлове\n"
+
+#: lexsup.c:2144
#, c-format
msgid " -z muldefs Allow multiple definitions\n"
msgstr ""
-#: lexsup.c:2019
+#: lexsup.c:2146
+#, c-format
+msgid " -z stack-size=SIZE Set size of stack segment\n"
+msgstr " -z --stack <размер> УÑтановÑва размера на чаÑта за Ñтек\n"
+
+#: lexsup.c:2148
#, c-format
msgid " -z execstack Mark executable as requiring executable stack\n"
msgstr ""
-#: lexsup.c:2021
+#: lexsup.c:2150
#, c-format
msgid " -z noexecstack Mark executable as not requiring executable stack\n"
msgstr ""
-#: lexsup.c:2023
+#: lexsup.c:2152
+#, c-format
+msgid " -z unique-symbol Avoid duplicated local symbol names\n"
+msgstr ""
+
+#: lexsup.c:2154
+#, c-format
+msgid " -z nounique-symbol Keep duplicated local symbol names (default)\n"
+msgstr ""
+
+#: lexsup.c:2156
#, c-format
msgid " -z globalaudit Mark executable requiring global auditing\n"
msgstr ""
-#: lexsup.c:2030
+#: lexsup.c:2158
+#, c-format
+msgid " -z start-stop-gc Enable garbage collection on __start/__stop\n"
+msgstr ""
+
+#: lexsup.c:2160
+#, c-format
+msgid " -z nostart-stop-gc Don't garbage collect __start/__stop (default)\n"
+msgstr ""
+
+#: lexsup.c:2162
+#, c-format
+msgid ""
+" -z start-stop-visibility=V Set visibility of built-in __start/__stop symbols\n"
+" to DEFAULT, PROTECTED, HIDDEN or INTERNAL\n"
+msgstr ""
+
+#: lexsup.c:2170
#, c-format
msgid " --ld-generated-unwind-info Generate exception handling info for PLT\n"
msgstr ""
-#: lexsup.c:2032
+#: lexsup.c:2172
#, c-format
msgid ""
" --no-ld-generated-unwind-info\n"
" Don't generate exception handling info for PLT\n"
msgstr ""
-#: lexsup.c:2043
+#: lexsup.c:2182
#, c-format
msgid "ELF emulations:\n"
msgstr "ELF подражаване:\n"
-#: lexsup.c:2061
+#: lexsup.c:2200
#, c-format
msgid "Usage: %s [options] file...\n"
msgstr "Употреба: %s [опции] файл...\n"
-#: lexsup.c:2063
+#: lexsup.c:2202
#, c-format
msgid "Options:\n"
msgstr "Команди:\n"
-#: lexsup.c:2141
+#: lexsup.c:2280
#, c-format
msgid " @FILE"
msgstr " @ФÐЙЛ"
-#: lexsup.c:2144
+#: lexsup.c:2283
#, c-format
msgid "Read options from FILE\n"
msgstr "Използва опции от ФÐЙЛ\n"
#. Note: Various tools (such as libtool) depend upon the
#. format of the listings below - do not change them.
-#: lexsup.c:2149
+#: lexsup.c:2288
#, c-format
msgid "%s: supported targets:"
msgstr "%s: поддържани цели:"
-#: lexsup.c:2157
+#: lexsup.c:2296
#, c-format
msgid "%s: supported emulations: "
msgstr "%s: поддържани емулации: "
-#: lexsup.c:2162
+#: lexsup.c:2301
#, c-format
msgid "%s: emulation specific options:\n"
msgstr "%s: Ñпецифични опции при емулациÑ:\n"
-#: lexsup.c:2169
+#: lexsup.c:2308
#, c-format
msgid "Report bugs to %s\n"
msgstr "Подавайте доклади за грешки на %s\n"
@@ -2379,262 +2527,268 @@ msgstr "Подавайте доклади за грешки на %s\n"
msgid "%F%P: unknown format type %s\n"
msgstr "%F%P: непознат формат %s\n"
-#: pe-dll.c:447
+#: pe-dll.c:448
msgid "%X%P: unsupported PEI architecture: %s\n"
msgstr "%X%P: неподдържaна PEI архитектура: %s\n"
-#: pe-dll.c:825
+#: pe-dll.c:827
msgid "%X%P: cannot export %s: invalid export name\n"
msgstr "%X%P: не може да Ñе изнеÑе %s: неправилно име за изнаÑÑне\n"
-#: pe-dll.c:877
+#: pe-dll.c:879
#, c-format
msgid "%X%P: error, duplicate EXPORT with ordinals: %s (%d vs %d)\n"
msgstr "%X%P: грешка, повторен EXPORT Ñ Ð½Ð¾Ð¼ÐµÑ€Ð°: %s (%d Ñ/у %d)\n"
-#: pe-dll.c:884
+#: pe-dll.c:886
#, c-format
msgid "%P: warning, duplicate EXPORT: %s\n"
msgstr "%P: предупреждение, повторен EXPORT: %s\n"
-#: pe-dll.c:991
+#: pe-dll.c:993
#, c-format
msgid "%X%P: cannot export %s: symbol not defined\n"
msgstr "%X%P: не може да Ñе изнеÑе %s: името е неопределено\n"
-#: pe-dll.c:997
+#: pe-dll.c:999
#, c-format
msgid "%X%P: cannot export %s: symbol wrong type (%d vs %d)\n"
msgstr "%X%P: не може да Ñе изнеÑе %s: име ÑÑŠÑ Ñгрешен тип (%d Ñ/у %d)\n"
-#: pe-dll.c:1004
+#: pe-dll.c:1006
#, c-format
msgid "%X%P: cannot export %s: symbol not found\n"
msgstr "%X%P: не може да Ñе изнеÑе %s: името не е намерено\n"
-#: pe-dll.c:1027 eaarch64cloudabi.c:360 eaarch64cloudabib.c:360
+#: pe-dll.c:1029 eaarch64cloudabi.c:360 eaarch64cloudabib.c:360
#: eaarch64elf.c:359 eaarch64elf32.c:359 eaarch64elf32b.c:359
#: eaarch64elfb.c:359 eaarch64fbsd.c:360 eaarch64fbsdb.c:360
-#: eaarch64linux.c:360 eaarch64linux32.c:360 eaarch64linux32b.c:360
-#: eaarch64linuxb.c:360 eaix5ppc.c:1432 eaix5ppc.c:1442 eaix5rs6.c:1432
-#: eaix5rs6.c:1442 eaixppc.c:1432 eaixppc.c:1442 eaixrs6.c:1432 eaixrs6.c:1442
-#: earmelf.c:568 earmelf_fbsd.c:568 earmelf_fuchsia.c:569 earmelf_linux.c:569
+#: eaarch64haiku.c:360 eaarch64linux.c:360 eaarch64linux32.c:360
+#: eaarch64linux32b.c:360 eaarch64linuxb.c:360 eaix5ppc.c:1470 eaix5ppc.c:1480
+#: eaix5rs6.c:1470 eaix5rs6.c:1480 eaixppc.c:1470 eaixppc.c:1480
+#: eaixrs6.c:1470 eaixrs6.c:1480 earmelf.c:568 earmelf_fbsd.c:568
+#: earmelf_fuchsia.c:569 earmelf_haiku.c:569 earmelf_linux.c:569
#: earmelf_linux_eabi.c:569 earmelf_linux_fdpiceabi.c:569 earmelf_nacl.c:569
#: earmelf_nbsd.c:568 earmelf_phoenix.c:569 earmelf_vxworks.c:568
#: earmelfb.c:568 earmelfb_fbsd.c:568 earmelfb_fuchsia.c:569
#: earmelfb_linux.c:569 earmelfb_linux_eabi.c:569
#: earmelfb_linux_fdpiceabi.c:569 earmelfb_nacl.c:569 earmelfb_nbsd.c:568
-#: earmnto.c:568 earmsymbian.c:568 ecskyelf.c:163 ecskyelf_linux.c:163
-#: eelf32b4300.c:172 eelf32bmip.c:172 eelf32bmipn32.c:186 eelf32bsmip.c:186
-#: eelf32btsmip.c:172 eelf32btsmip_fbsd.c:172 eelf32btsmipn32.c:172
-#: eelf32btsmipn32_fbsd.c:172 eelf32ebmip.c:172 eelf32ebmipvxworks.c:172
-#: eelf32elmip.c:172 eelf32elmipvxworks.c:172 eelf32l4300.c:172
-#: eelf32lmip.c:172 eelf32lr5900.c:172 eelf32lr5900n32.c:172 eelf32lsmip.c:172
+#: earmnto.c:568 ecskyelf.c:163 ecskyelf_linux.c:163 eelf32b4300.c:172
+#: eelf32bmip.c:172 eelf32bmipn32.c:186 eelf32bsmip.c:186 eelf32btsmip.c:172
+#: eelf32btsmip_fbsd.c:172 eelf32btsmipn32.c:172 eelf32btsmipn32_fbsd.c:172
+#: eelf32ebmip.c:172 eelf32ebmipvxworks.c:172 eelf32elmip.c:172
+#: eelf32elmipvxworks.c:172 eelf32l4300.c:172 eelf32lmip.c:172
+#: eelf32lr5900.c:172 eelf32lr5900n32.c:172 eelf32lsmip.c:172
#: eelf32ltsmip.c:172 eelf32ltsmip_fbsd.c:172 eelf32ltsmipn32.c:172
#: eelf32ltsmipn32_fbsd.c:172 eelf32metag.c:87 eelf32mipswindiss.c:172
#: eelf64bmip.c:186 eelf64btsmip.c:172 eelf64btsmip_fbsd.c:172
-#: eelf64lppc.c:117 eelf64ltsmip.c:172 eelf64ltsmip_fbsd.c:172 eelf64ppc.c:117
-#: eelf64ppc_fbsd.c:117 ehppaelf.c:110 ehppalinux.c:110 ehppanbsd.c:110
+#: eelf64lppc.c:119 eelf64lppc_fbsd.c:119 eelf64ltsmip.c:172
+#: eelf64ltsmip_fbsd.c:172 eelf64ppc.c:119 eelf64ppc_fbsd.c:119
+#: eelf_mipsel_haiku.c:172 ehppaelf.c:110 ehppalinux.c:110 ehppanbsd.c:110
#: ehppaobsd.c:110 em68hc11elf.c:170 em68hc11elfb.c:170 em68hc12elf.c:170
-#: em68hc12elfb.c:170 enios2elf.c:92 enios2linux.c:92 eppcmacos.c:1432
-#: eppcmacos.c:1442
+#: em68hc12elfb.c:170 enios2elf.c:92 enios2linux.c:92 eppcmacos.c:1470
+#: eppcmacos.c:1480
msgid "%F%P: can not create BFD: %E\n"
msgstr "%F%P: не може да Ñе Ñъздаде BFD: %E\n"
-#: pe-dll.c:1041
+#: pe-dll.c:1043
msgid "%X%P: can not create .edata section: %E\n"
msgstr "%X%P: не може да Ñе Ñъздаде раздел .edata: %E\n"
-#: pe-dll.c:1055
+#: pe-dll.c:1057
msgid "%X%P: can not create .reloc section: %E\n"
msgstr "%X%P: не може да Ñе Ñъздаде раздел .reloc: %E\n"
-#: pe-dll.c:1116
+#: pe-dll.c:1118
#, c-format
msgid "%X%P: error: ordinal used twice: %d (%s vs %s)\n"
msgstr "%X%P: грешка, номерът е използван два пъти: %d (%s Ñ/у %s)\n"
-#: pe-dll.c:1152
+#: pe-dll.c:1154
#, c-format
msgid "%X%P: error: export ordinal too large: %d\n"
msgstr "%X%P: грешка: номерът е твърде голÑм: %d\n"
-#: pe-dll.c:1475
+#: pe-dll.c:1477
#, c-format
msgid "Info: resolving %s by linking to %s (auto-import)\n"
msgstr "Сведение: разрешаване на %s ÑÑŠÑ Ñвързване към %s (автоматично внаÑÑне)\n"
-#: pe-dll.c:1481
+#: pe-dll.c:1483
msgid "%P: warning: auto-importing has been activated without --enable-auto-import specified on the command line; this should work unless it involves constant data structures referencing symbols from auto-imported DLLs\n"
msgstr "%P: предупреждение: автоматично внаÑÑне е задейÑтвано без да Ñе зададе --enable-auto-import на ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¸Ñ Ñ€ÐµÐ´. Това работи, оÑвен ако не е Ñвързано Ñ ÐºÐ¾Ð½Ñтантни Ñтруктури за данни, които указват към имена от автоматично внаÑÑни DLL-ли.\n"
-#. Huh? Shouldn't happen, but punt if it does.
-#: pe-dll.c:1550
+#: pe-dll.c:1554
msgid "%P: zero vma section reloc detected: `%s' #%d f=%d\n"
msgstr ""
-#: pe-dll.c:1666
+#: pe-dll.c:1637
+msgid "%P: base relocation for section `%s' above .reloc section\n"
+msgstr ""
+
+#: pe-dll.c:1686
#, c-format
msgid "%X%P: error: %d-bit reloc in dll\n"
msgstr "%X%P: грешка: %d-битово премеÑтване в dll\n"
-#: pe-dll.c:1794
+#: pe-dll.c:1811
#, c-format
msgid "%P: can't open output def file %s\n"
msgstr "%P: не може да Ñе отвори, за извеждане, def-файл %s\n"
-#: pe-dll.c:1945
+#: pe-dll.c:1962
#, c-format
msgid "; no contents available\n"
msgstr "; липÑва Ñъдържание\n"
-#: pe-dll.c:2804
+#: pe-dll.c:2822
msgid "%X%P: %C: variable '%pT' can't be auto-imported; please read the documentation for ld's --enable-auto-import for details\n"
msgstr "%X%P: %C: променливата '%pT' не може да Ñе внеÑе автоматично. Да Ñе провери в документациÑта на Ñвързващата програма за повече ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾Ñ‚Ð½Ð¾Ñно --enable-auto-import.\n"
-#: pe-dll.c:2831
+#: pe-dll.c:2850
#, c-format
msgid "%X%P: can't open .lib file: %s\n"
msgstr "%X%P: не може да Ñе отвори lib-файл: %s\n"
-#: pe-dll.c:2837
+#: pe-dll.c:2856
#, c-format
msgid "Creating library file: %s\n"
msgstr "Създаване на библиотека: %s\n"
-#: pe-dll.c:2867
+#: pe-dll.c:2886
msgid "%X%P: bfd_openr %s: %E\n"
msgstr "%X%P: bfd_openr %s: %E\n"
-#: pe-dll.c:2879
+#: pe-dll.c:2898
msgid "%X%P: %s(%s): can't find member in non-archive file"
msgstr "%X%P: %s(%s): не е намерена чаÑтта във файл, който не е архив"
-#: pe-dll.c:2893
+#: pe-dll.c:2912
msgid "%X%P: %s(%s): can't find member in archive"
msgstr "%X%P: %s(%s): чаÑтта не е намерена в архива"
-#: pe-dll.c:3156
+#: pe-dll.c:3177
msgid "%X%P: add symbols %s: %E\n"
msgstr "%X%P: добавÑне на имена %s: %E\n"
-#: pe-dll.c:3343
+#: pe-dll.c:3365
msgid "%X%P: open %s: %E\n"
msgstr "%X%P: отварÑне %s: %E\n"
-#: pe-dll.c:3352
+#: pe-dll.c:3374
msgid "%X%P: %s: this doesn't appear to be a DLL\n"
msgstr "%X%P: %s: не прилича на DLL\n"
-#: pe-dll.c:3557
+#: pe-dll.c:3579
msgid "%X%P: error: can't use long section names on this arch\n"
msgstr "%X%P: грешка: за тази архитектура не може да Ñе използват дълги имена за раздели\n"
-#: plugin.c:233 plugin.c:279
+#: plugin.c:236 plugin.c:282
msgid "<no plugin>"
msgstr "<без приÑтавка>"
-#: plugin.c:248 plugin.c:1100
+#: plugin.c:251 plugin.c:1111
msgid "%F%P: %s: error loading plugin: %s\n"
msgstr "%F%P: %s: грешка при зареждане на приÑтавка: %s\n"
-#: plugin.c:255
+#: plugin.c:258
msgid "%P: %s: duplicated plugin\n"
msgstr "%P: %s: повторение на приÑтавка\n"
-#: plugin.c:341
+#: plugin.c:344
msgid "%F%P: could not create dummy IR bfd: %E\n"
msgstr "%F%P: не може да Ñе Ñъздаде измиÑлен IR bfd: %E\n"
-#: plugin.c:422
+#: plugin.c:425
msgid "%F%P: %s: non-ELF symbol in ELF BFD!\n"
msgstr "%F%P: %s: не е ELF име при ELF BFD!\n"
-#: plugin.c:433
+#: plugin.c:436
msgid "%F%P: unknown ELF symbol visibility: %d!\n"
msgstr "%F%P: непозната видимоÑÑ‚ на ELF име: %d!\n"
-#: plugin.c:542
+#: plugin.c:545
msgid "%F%P: unsupported input file size: %s (%ld bytes)\n"
msgstr "%F%P: неподдържан размер на входен файл %s (%ld байта)\n"
-#: plugin.c:679
+#: plugin.c:690
#, c-format
msgid "unknown LTO kind value %x"
msgstr ""
-#: plugin.c:705
+#: plugin.c:716
#, c-format
msgid "unknown LTO resolution value %x"
msgstr ""
-#: plugin.c:725
+#: plugin.c:736
#, c-format
msgid "unknown LTO visibility value %x"
msgstr "непозната ÑтойноÑÑ‚ за LTO видимоÑÑ‚ - %x"
#. We should not have a new, indirect or warning symbol here.
-#: plugin.c:805
+#: plugin.c:816
msgid "%F%P: %s: plugin symbol table corrupt (sym type %d)\n"
msgstr "%F%P: %s: приÑтавка ÑÑŠÑ Ñчупена таблица за имена (тип %d)\n"
-#: plugin.c:867
+#: plugin.c:878
msgid "%P: %pB: symbol `%s' definition: %s, visibility: %s, resolution: %s\n"
msgstr ""
-#: plugin.c:944
+#: plugin.c:955
msgid "%P: warning: "
msgstr "%P: предупреждение: "
-#: plugin.c:955
+#: plugin.c:966
msgid "%P: error: "
msgstr "%P: грешка: "
-#: plugin.c:1107
+#: plugin.c:1118
msgid "%F%P: %s: plugin error: %d\n"
msgstr "%F%P: %s: грешка в приÑтавка: %d\n"
-#: plugin.c:1162
+#: plugin.c:1173
msgid "%F%P: plugin_strdup failed to allocate memory: %s\n"
msgstr "%F%P: plugin_strdup не можа да задели памет: %s\n"
-#: plugin.c:1199
+#: plugin.c:1210
msgid "%F%P: plugin failed to allocate memory for input: %s\n"
msgstr "%F%P: приÑтавката не можа да задели памет за вход: %s\n"
-#: plugin.c:1226
+#: plugin.c:1238
msgid "%F%P: %s: plugin reported error claiming file\n"
msgstr "%F%P: %s: приÑтавката отчете грешка при твърдениÑта за файла\n"
-#: plugin.c:1337
+#: plugin.c:1349
msgid "%P: %s: error in plugin cleanup: %d (ignored)\n"
msgstr "%P: %s: грешка при почиÑтване на приÑтавка: %d (изоÑтавено)\n"
#: eaarch64cloudabi.c:223 eaarch64cloudabib.c:223 eaarch64elf.c:222
#: eaarch64elf32.c:222 eaarch64elf32b.c:222 eaarch64elfb.c:222
-#: eaarch64fbsd.c:223 eaarch64fbsdb.c:223 eaarch64linux.c:223
-#: eaarch64linux32.c:223 eaarch64linux32b.c:223 eaarch64linuxb.c:223
-#: earmelf.c:292 earmelf_fbsd.c:292 earmelf_fuchsia.c:293 earmelf_linux.c:293
-#: earmelf_linux_eabi.c:293 earmelf_linux_fdpiceabi.c:293 earmelf_nacl.c:293
-#: earmelf_nbsd.c:292 earmelf_phoenix.c:293 earmelf_vxworks.c:292
-#: earmelfb.c:292 earmelfb_fbsd.c:292 earmelfb_fuchsia.c:293
-#: earmelfb_linux.c:293 earmelfb_linux_eabi.c:293
-#: earmelfb_linux_fdpiceabi.c:293 earmelfb_nacl.c:293 earmelfb_nbsd.c:292
-#: earmnto.c:292 earmsymbian.c:292 eavr1.c:178 eavr2.c:178 eavr25.c:178
-#: eavr3.c:178 eavr31.c:178 eavr35.c:178 eavr4.c:178 eavr5.c:178 eavr51.c:178
-#: eavr6.c:178 eavrtiny.c:178 eavrxmega1.c:178 eavrxmega2.c:178
-#: eavrxmega3.c:178 eavrxmega4.c:178 eavrxmega5.c:178 eavrxmega6.c:178
-#: eavrxmega7.c:178 ecskyelf.c:210 ecskyelf_linux.c:210 eelf32b4300.c:205
-#: eelf32bmip.c:205 eelf32bmipn32.c:219 eelf32bsmip.c:219 eelf32btsmip.c:205
-#: eelf32btsmip_fbsd.c:205 eelf32btsmipn32.c:205 eelf32btsmipn32_fbsd.c:205
-#: eelf32ebmip.c:205 eelf32ebmipvxworks.c:205 eelf32elmip.c:205
-#: eelf32elmipvxworks.c:205 eelf32l4300.c:205 eelf32lmip.c:205
-#: eelf32lr5900.c:205 eelf32lr5900n32.c:205 eelf32lsmip.c:205
+#: eaarch64fbsd.c:223 eaarch64fbsdb.c:223 eaarch64haiku.c:223
+#: eaarch64linux.c:223 eaarch64linux32.c:223 eaarch64linux32b.c:223
+#: eaarch64linuxb.c:223 earmelf.c:292 earmelf_fbsd.c:292 earmelf_fuchsia.c:293
+#: earmelf_haiku.c:293 earmelf_linux.c:293 earmelf_linux_eabi.c:293
+#: earmelf_linux_fdpiceabi.c:293 earmelf_nacl.c:293 earmelf_nbsd.c:292
+#: earmelf_phoenix.c:293 earmelf_vxworks.c:292 earmelfb.c:292
+#: earmelfb_fbsd.c:292 earmelfb_fuchsia.c:293 earmelfb_linux.c:293
+#: earmelfb_linux_eabi.c:293 earmelfb_linux_fdpiceabi.c:293
+#: earmelfb_nacl.c:293 earmelfb_nbsd.c:292 earmnto.c:292 eavr1.c:178
+#: eavr2.c:178 eavr25.c:178 eavr3.c:178 eavr31.c:178 eavr35.c:178 eavr4.c:178
+#: eavr5.c:178 eavr51.c:178 eavr6.c:178 eavrtiny.c:178 eavrxmega1.c:178
+#: eavrxmega2.c:178 eavrxmega3.c:178 eavrxmega4.c:178 eavrxmega5.c:178
+#: eavrxmega6.c:178 eavrxmega7.c:178 ecskyelf.c:210 ecskyelf_linux.c:210
+#: eelf32b4300.c:205 eelf32bmip.c:205 eelf32bmipn32.c:219 eelf32bsmip.c:219
+#: eelf32btsmip.c:205 eelf32btsmip_fbsd.c:205 eelf32btsmipn32.c:205
+#: eelf32btsmipn32_fbsd.c:205 eelf32ebmip.c:205 eelf32ebmipvxworks.c:205
+#: eelf32elmip.c:205 eelf32elmipvxworks.c:205 eelf32l4300.c:205
+#: eelf32lmip.c:205 eelf32lr5900.c:205 eelf32lr5900n32.c:205 eelf32lsmip.c:205
#: eelf32ltsmip.c:205 eelf32ltsmip_fbsd.c:205 eelf32ltsmipn32.c:205
#: eelf32ltsmipn32_fbsd.c:205 eelf32metag.c:206 eelf32mipswindiss.c:205
#: eelf64bmip.c:219 eelf64btsmip.c:205 eelf64btsmip_fbsd.c:205
-#: eelf64lppc.c:470 eelf64ltsmip.c:205 eelf64ltsmip_fbsd.c:205 eelf64ppc.c:470
-#: eelf64ppc_fbsd.c:470 ehppaelf.c:230 ehppalinux.c:230 ehppanbsd.c:230
+#: eelf64lppc.c:482 eelf64lppc_fbsd.c:482 eelf64ltsmip.c:205
+#: eelf64ltsmip_fbsd.c:205 eelf64ppc.c:482 eelf64ppc_fbsd.c:482
+#: eelf_mipsel_haiku.c:205 ehppaelf.c:230 ehppalinux.c:230 ehppanbsd.c:230
#: ehppaobsd.c:230 em68hc11elf.c:295 em68hc11elfb.c:295 em68hc12elf.c:295
#: em68hc12elfb.c:295 enios2elf.c:223 enios2linux.c:223
msgid "%X%P: can not make stub section: %E\n"
@@ -2642,58 +2796,64 @@ msgstr "%X%P: не може да Ñе Ñъздаде раздел ÑÑŠÑ Ð·Ð°Ð³Ð
#: eaarch64cloudabi.c:266 eaarch64cloudabib.c:266 eaarch64elf.c:265
#: eaarch64elf32.c:265 eaarch64elf32b.c:265 eaarch64elfb.c:265
-#: eaarch64fbsd.c:266 eaarch64fbsdb.c:266 eaarch64linux.c:266
-#: eaarch64linux32.c:266 eaarch64linux32b.c:266 eaarch64linuxb.c:266
-#: earcelf.c:96 earclinux.c:97 earclinux_nps.c:97 earcv2elf.c:96
-#: earcv2elfx.c:96 earmelf.c:404 earmelf_fbsd.c:404 earmelf_fuchsia.c:405
-#: earmelf_linux.c:405 earmelf_linux_eabi.c:405 earmelf_linux_fdpiceabi.c:405
-#: earmelf_nacl.c:405 earmelf_nbsd.c:404 earmelf_phoenix.c:405
-#: earmelf_vxworks.c:404 earmelfb.c:404 earmelfb_fbsd.c:404
-#: earmelfb_fuchsia.c:405 earmelfb_linux.c:405 earmelfb_linux_eabi.c:405
+#: eaarch64fbsd.c:266 eaarch64fbsdb.c:266 eaarch64haiku.c:266
+#: eaarch64linux.c:266 eaarch64linux32.c:266 eaarch64linux32b.c:266
+#: eaarch64linuxb.c:266 earcelf.c:96 earclinux.c:97 earclinux_nps.c:97
+#: earcv2elf.c:96 earcv2elfx.c:96 earmelf.c:404 earmelf_fbsd.c:404
+#: earmelf_fuchsia.c:405 earmelf_haiku.c:405 earmelf_linux.c:405
+#: earmelf_linux_eabi.c:405 earmelf_linux_fdpiceabi.c:405 earmelf_nacl.c:405
+#: earmelf_nbsd.c:404 earmelf_phoenix.c:405 earmelf_vxworks.c:404
+#: earmelfb.c:404 earmelfb_fbsd.c:404 earmelfb_fuchsia.c:405
+#: earmelfb_linux.c:405 earmelfb_linux_eabi.c:405
#: earmelfb_linux_fdpiceabi.c:405 earmelfb_nacl.c:405 earmelfb_nbsd.c:404
-#: earmnto.c:404 earmsymbian.c:404 eavr1.c:299 eavr2.c:299 eavr25.c:299
-#: eavr3.c:299 eavr31.c:299 eavr35.c:299 eavr4.c:299 eavr5.c:299 eavr51.c:299
-#: eavr6.c:299 eavrtiny.c:299 eavrxmega1.c:299 eavrxmega2.c:299
-#: eavrxmega3.c:299 eavrxmega4.c:299 eavrxmega5.c:299 eavrxmega6.c:299
-#: eavrxmega7.c:299 ecriself.c:96 ecrislinux.c:97 ed10velf.c:96
-#: eelf32_sparc.c:97 eelf32_sparc_sol2.c:228 eelf32_sparc_vxworks.c:126
-#: eelf32_spu.c:766 eelf32_tic6x_be.c:181 eelf32_tic6x_elf_be.c:181
-#: eelf32_tic6x_elf_le.c:181 eelf32_tic6x_le.c:181 eelf32_tic6x_linux_be.c:181
+#: earmnto.c:404 eavr1.c:299 eavr2.c:299 eavr25.c:299 eavr3.c:299 eavr31.c:299
+#: eavr35.c:299 eavr4.c:299 eavr5.c:299 eavr51.c:299 eavr6.c:299
+#: eavrtiny.c:299 eavrxmega1.c:299 eavrxmega2.c:299 eavrxmega3.c:299
+#: eavrxmega4.c:299 eavrxmega5.c:299 eavrxmega6.c:299 eavrxmega7.c:299
+#: ecriself.c:96 ecrislinux.c:97 ed10velf.c:96 eelf32_sparc.c:97
+#: eelf32_sparc_sol2.c:229 eelf32_sparc_vxworks.c:126 eelf32_spu.c:766
+#: eelf32_tic6x_be.c:181 eelf32_tic6x_elf_be.c:181 eelf32_tic6x_elf_le.c:181
+#: eelf32_tic6x_le.c:181 eelf32_tic6x_linux_be.c:181
#: eelf32_tic6x_linux_le.c:181 eelf32_x86_64.c:121 eelf32am33lin.c:96
#: eelf32b4300.c:293 eelf32bfin.c:106 eelf32bfinfd.c:106 eelf32bmip.c:293
-#: eelf32bmipn32.c:307 eelf32bsmip.c:307 eelf32btsmip.c:293
+#: eelf32bmipn32.c:307 eelf32briscv.c:89 eelf32briscv_ilp32.c:89
+#: eelf32briscv_ilp32f.c:89 eelf32bsmip.c:307 eelf32btsmip.c:293
#: eelf32btsmip_fbsd.c:293 eelf32btsmipn32.c:293 eelf32btsmipn32_fbsd.c:293
#: eelf32cr16.c:246 eelf32crx.c:133 eelf32ebmip.c:293 eelf32ebmipvxworks.c:322
#: eelf32elmip.c:293 eelf32elmipvxworks.c:322 eelf32epiphany.c:96
#: eelf32epiphany_4x4.c:98 eelf32frvfd.c:96 eelf32ip2k.c:96 eelf32l4300.c:293
-#: eelf32lm32.c:96 eelf32lm32fd.c:96 eelf32lmip.c:293 eelf32lppc.c:317
-#: eelf32lppclinux.c:317 eelf32lppcnto.c:317 eelf32lppcsim.c:317
-#: eelf32lr5900.c:293 eelf32lr5900n32.c:292 eelf32lriscv.c:89
-#: eelf32lriscv_ilp32.c:89 eelf32lriscv_ilp32f.c:89 eelf32lsmip.c:293
-#: eelf32ltsmip.c:293 eelf32ltsmip_fbsd.c:293 eelf32ltsmipn32.c:293
-#: eelf32ltsmipn32_fbsd.c:293 eelf32m32c.c:107 eelf32mb_linux.c:97
-#: eelf32mbel_linux.c:97 eelf32mcore.c:96 eelf32mep.c:96 eelf32metag.c:256
-#: eelf32microblaze.c:96 eelf32microblazeel.c:96 eelf32mipswindiss.c:292
-#: eelf32moxie.c:96 eelf32or1k.c:97 eelf32or1k_linux.c:97 eelf32ppc.c:317
-#: eelf32ppc_fbsd.c:317 eelf32ppclinux.c:317 eelf32ppcnto.c:317
+#: eelf32lm32.c:96 eelf32lm32fd.c:96 eelf32lmip.c:293 eelf32loongarch.c:88
+#: eelf32lppc.c:317 eelf32lppclinux.c:317 eelf32lppcnto.c:317
+#: eelf32lppcsim.c:317 eelf32lr5900.c:293 eelf32lr5900n32.c:292
+#: eelf32lriscv.c:89 eelf32lriscv_ilp32.c:89 eelf32lriscv_ilp32f.c:89
+#: eelf32lsmip.c:293 eelf32ltsmip.c:293 eelf32ltsmip_fbsd.c:293
+#: eelf32ltsmipn32.c:293 eelf32ltsmipn32_fbsd.c:293 eelf32m32c.c:107
+#: eelf32mb_linux.c:97 eelf32mbel_linux.c:97 eelf32mcore.c:96 eelf32mep.c:96
+#: eelf32metag.c:256 eelf32microblaze.c:96 eelf32microblazeel.c:96
+#: eelf32mipswindiss.c:292 eelf32moxie.c:96 eelf32or1k.c:97
+#: eelf32or1k_linux.c:97 eelf32ppc.c:317 eelf32ppc_fbsd.c:317
+#: eelf32ppchaiku.c:317 eelf32ppclinux.c:317 eelf32ppcnto.c:317
#: eelf32ppcsim.c:317 eelf32ppcvxworks.c:291 eelf32ppcwindiss.c:317
#: eelf32rl78.c:96 eelf32rx.c:112 eelf32rx_linux.c:109 eelf32tilegx.c:97
#: eelf32tilegx_be.c:97 eelf32tilepro.c:97 eelf32vax.c:96 eelf32visium.c:96
#: eelf32xc16x.c:96 eelf32xc16xl.c:96 eelf32xc16xs.c:96 eelf32xstormy16.c:107
#: eelf32xtensa.c:2001 eelf32z80.c:123 eelf64_aix.c:96 eelf64_ia64.c:122
#: eelf64_ia64_fbsd.c:122 eelf64_ia64_vms.c:220 eelf64_s390.c:112
-#: eelf64_sparc.c:97 eelf64_sparc_fbsd.c:97 eelf64_sparc_sol2.c:228
+#: eelf64_sparc.c:97 eelf64_sparc_fbsd.c:97 eelf64_sparc_sol2.c:229
#: eelf64alpha.c:180 eelf64alpha_fbsd.c:180 eelf64alpha_nbsd.c:180
-#: eelf64bmip.c:307 eelf64bpf.c:96 eelf64btsmip.c:293 eelf64btsmip_fbsd.c:293
-#: eelf64hppa.c:96 eelf64lppc.c:580 eelf64lriscv.c:89 eelf64lriscv_lp64.c:89
-#: eelf64lriscv_lp64f.c:89 eelf64ltsmip.c:293 eelf64ltsmip_fbsd.c:293
-#: eelf64mmix.c:207 eelf64ppc.c:580 eelf64ppc_fbsd.c:580 eelf64rdos.c:112
-#: eelf64tilegx.c:97 eelf64tilegx_be.c:97 eelf_i386.c:121 eelf_i386_be.c:120
-#: eelf_i386_fbsd.c:121 eelf_i386_ldso.c:121 eelf_i386_sol2.c:252
-#: eelf_i386_vxworks.c:150 eelf_iamcu.c:121 eelf_k1om.c:121
-#: eelf_k1om_fbsd.c:121 eelf_l1om.c:121 eelf_l1om_fbsd.c:121 eelf_s390.c:97
-#: eelf_x86_64.c:121 eelf_x86_64_cloudabi.c:121 eelf_x86_64_fbsd.c:121
-#: eelf_x86_64_sol2.c:252 eh8300elf.c:96 eh8300elf_linux.c:96 eh8300helf.c:96
+#: eelf64bmip.c:307 eelf64bpf.c:96 eelf64briscv.c:89 eelf64briscv_lp64.c:89
+#: eelf64briscv_lp64f.c:89 eelf64btsmip.c:293 eelf64btsmip_fbsd.c:293
+#: eelf64hppa.c:96 eelf64loongarch.c:88 eelf64lppc.c:592 eelf64lppc_fbsd.c:592
+#: eelf64lriscv.c:89 eelf64lriscv_lp64.c:89 eelf64lriscv_lp64f.c:89
+#: eelf64ltsmip.c:293 eelf64ltsmip_fbsd.c:293 eelf64mmix.c:207 eelf64ppc.c:592
+#: eelf64ppc_fbsd.c:592 eelf64rdos.c:112 eelf64tilegx.c:97
+#: eelf64tilegx_be.c:97 eelf_i386.c:121 eelf_i386_be.c:120
+#: eelf_i386_fbsd.c:121 eelf_i386_haiku.c:121 eelf_i386_ldso.c:121
+#: eelf_i386_sol2.c:253 eelf_i386_vxworks.c:150 eelf_iamcu.c:121
+#: eelf_k1om.c:121 eelf_k1om_fbsd.c:121 eelf_l1om.c:121 eelf_l1om_fbsd.c:121
+#: eelf_mipsel_haiku.c:293 eelf_s390.c:97 eelf_x86_64.c:121
+#: eelf_x86_64_cloudabi.c:121 eelf_x86_64_fbsd.c:121 eelf_x86_64_haiku.c:121
+#: eelf_x86_64_sol2.c:253 eh8300elf.c:96 eh8300elf_linux.c:96 eh8300helf.c:96
#: eh8300helf_linux.c:96 eh8300hnelf.c:96 eh8300self.c:96
#: eh8300self_linux.c:96 eh8300snelf.c:96 eh8300sxelf.c:96
#: eh8300sxelf_linux.c:96 eh8300sxnelf.c:96 ehppa64linux.c:96 ehppaelf.c:280
@@ -2703,49 +2863,51 @@ msgstr "%X%P: не може да Ñе Ñъздаде раздел ÑÑŠÑ Ð·Ð°Ð³Ð
#: em68hc12elf.c:373 em68hc12elfb.c:373 em68kelf.c:248 em68kelfnbsd.c:248
#: emn10300.c:96 ends32belf.c:204 ends32belf16m.c:204 ends32belf_linux.c:204
#: ends32elf.c:204 ends32elf16m.c:204 ends32elf_linux.c:204 enios2elf.c:273
-#: enios2linux.c:273 eppclynx.c:317 epruelf.c:117 escore3_elf.c:117
-#: escore7_elf.c:117 eshelf.c:96 eshelf_fd.c:97 eshelf_linux.c:97
-#: eshelf_nbsd.c:96 eshelf_nto.c:96 eshelf_uclinux.c:96 eshelf_vxworks.c:125
-#: eshlelf.c:96 eshlelf_fd.c:97 eshlelf_linux.c:97 eshlelf_nbsd.c:96
-#: eshlelf_nto.c:96 eshlelf_vxworks.c:125 ev850.c:143 ev850_rh850.c:143
+#: enios2linux.c:273 epruelf.c:117 escore3_elf.c:117 escore7_elf.c:117
+#: eshelf.c:96 eshelf_fd.c:97 eshelf_linux.c:97 eshelf_nbsd.c:96
+#: eshelf_nto.c:96 eshelf_uclinux.c:96 eshelf_vxworks.c:125 eshlelf.c:96
+#: eshlelf_fd.c:97 eshlelf_linux.c:97 eshlelf_nbsd.c:96 eshlelf_nto.c:96
+#: eshlelf_vxworks.c:125 ev850.c:143 ev850_rh850.c:143
msgid "%X%P: .eh_frame/.stab edit: %E\n"
msgstr ""
#: eaarch64cloudabi.c:282 eaarch64cloudabib.c:282 eaarch64elf.c:281
#: eaarch64elf32.c:281 eaarch64elf32b.c:281 eaarch64elfb.c:281
-#: eaarch64fbsd.c:282 eaarch64fbsdb.c:282 eaarch64linux.c:282
-#: eaarch64linux32.c:282 eaarch64linux32b.c:282 eaarch64linuxb.c:282
-#: earmelf.c:419 earmelf_fbsd.c:419 earmelf_fuchsia.c:420 earmelf_linux.c:420
-#: earmelf_linux_eabi.c:420 earmelf_linux_fdpiceabi.c:420 earmelf_nacl.c:420
-#: earmelf_nbsd.c:419 earmelf_phoenix.c:420 earmelf_vxworks.c:419
-#: earmelfb.c:419 earmelfb_fbsd.c:419 earmelfb_fuchsia.c:420
-#: earmelfb_linux.c:420 earmelfb_linux_eabi.c:420
-#: earmelfb_linux_fdpiceabi.c:420 earmelfb_nacl.c:420 earmelfb_nbsd.c:419
-#: earmnto.c:419 earmsymbian.c:419 ecskyelf.c:260 ecskyelf_linux.c:260
+#: eaarch64fbsd.c:282 eaarch64fbsdb.c:282 eaarch64haiku.c:282
+#: eaarch64linux.c:282 eaarch64linux32.c:282 eaarch64linux32b.c:282
+#: eaarch64linuxb.c:282 earmelf.c:419 earmelf_fbsd.c:419 earmelf_fuchsia.c:420
+#: earmelf_haiku.c:420 earmelf_linux.c:420 earmelf_linux_eabi.c:420
+#: earmelf_linux_fdpiceabi.c:420 earmelf_nacl.c:420 earmelf_nbsd.c:419
+#: earmelf_phoenix.c:420 earmelf_vxworks.c:419 earmelfb.c:419
+#: earmelfb_fbsd.c:419 earmelfb_fuchsia.c:420 earmelfb_linux.c:420
+#: earmelfb_linux_eabi.c:420 earmelfb_linux_fdpiceabi.c:420
+#: earmelfb_nacl.c:420 earmelfb_nbsd.c:419 earmnto.c:419 ecskyelf.c:260
+#: ecskyelf_linux.c:260
msgid "%X%P: could not compute sections lists for stub generation: %E\n"
msgstr ""
#: eaarch64cloudabi.c:297 eaarch64cloudabib.c:297 eaarch64elf.c:296
#: eaarch64elf32.c:296 eaarch64elf32b.c:296 eaarch64elfb.c:296
-#: eaarch64fbsd.c:297 eaarch64fbsdb.c:297 eaarch64linux.c:297
-#: eaarch64linux32.c:297 eaarch64linux32b.c:297 eaarch64linuxb.c:297
-#: earmelf.c:434 earmelf_fbsd.c:434 earmelf_fuchsia.c:435 earmelf_linux.c:435
-#: earmelf_linux_eabi.c:435 earmelf_linux_fdpiceabi.c:435 earmelf_nacl.c:435
-#: earmelf_nbsd.c:434 earmelf_phoenix.c:435 earmelf_vxworks.c:434
-#: earmelfb.c:434 earmelfb_fbsd.c:434 earmelfb_fuchsia.c:435
-#: earmelfb_linux.c:435 earmelfb_linux_eabi.c:435
-#: earmelfb_linux_fdpiceabi.c:435 earmelfb_nacl.c:435 earmelfb_nbsd.c:434
-#: earmnto.c:434 earmsymbian.c:434 eavr1.c:129 eavr1.c:192 eavr2.c:129
-#: eavr2.c:192 eavr25.c:129 eavr25.c:192 eavr3.c:129 eavr3.c:192 eavr31.c:129
-#: eavr31.c:192 eavr35.c:129 eavr35.c:192 eavr4.c:129 eavr4.c:192 eavr5.c:129
-#: eavr5.c:192 eavr51.c:129 eavr51.c:192 eavr6.c:129 eavr6.c:192
-#: eavrtiny.c:129 eavrtiny.c:192 eavrxmega1.c:129 eavrxmega1.c:192
+#: eaarch64fbsd.c:297 eaarch64fbsdb.c:297 eaarch64haiku.c:297
+#: eaarch64linux.c:297 eaarch64linux32.c:297 eaarch64linux32b.c:297
+#: eaarch64linuxb.c:297 earmelf.c:434 earmelf_fbsd.c:434 earmelf_fuchsia.c:435
+#: earmelf_haiku.c:435 earmelf_linux.c:435 earmelf_linux_eabi.c:435
+#: earmelf_linux_fdpiceabi.c:435 earmelf_nacl.c:435 earmelf_nbsd.c:434
+#: earmelf_phoenix.c:435 earmelf_vxworks.c:434 earmelfb.c:434
+#: earmelfb_fbsd.c:434 earmelfb_fuchsia.c:435 earmelfb_linux.c:435
+#: earmelfb_linux_eabi.c:435 earmelfb_linux_fdpiceabi.c:435
+#: earmelfb_nacl.c:435 earmelfb_nbsd.c:434 earmnto.c:434 eavr1.c:129
+#: eavr1.c:192 eavr2.c:129 eavr2.c:192 eavr25.c:129 eavr25.c:192 eavr3.c:129
+#: eavr3.c:192 eavr31.c:129 eavr31.c:192 eavr35.c:129 eavr35.c:192 eavr4.c:129
+#: eavr4.c:192 eavr5.c:129 eavr5.c:192 eavr51.c:129 eavr51.c:192 eavr6.c:129
+#: eavr6.c:192 eavrtiny.c:129 eavrtiny.c:192 eavrxmega1.c:129 eavrxmega1.c:192
#: eavrxmega2.c:129 eavrxmega2.c:192 eavrxmega3.c:129 eavrxmega3.c:192
#: eavrxmega4.c:129 eavrxmega4.c:192 eavrxmega5.c:129 eavrxmega5.c:192
#: eavrxmega6.c:129 eavrxmega6.c:192 eavrxmega7.c:129 eavrxmega7.c:192
-#: eelf32metag.c:271 eelf32metag.c:285 eelf64lppc.c:523 eelf64lppc.c:542
-#: eelf64lppc.c:569 eelf64ppc.c:523 eelf64ppc.c:542 eelf64ppc.c:569
-#: eelf64ppc_fbsd.c:523 eelf64ppc_fbsd.c:542 eelf64ppc_fbsd.c:569
+#: eelf32metag.c:271 eelf32metag.c:285 eelf64lppc.c:535 eelf64lppc.c:554
+#: eelf64lppc.c:581 eelf64lppc_fbsd.c:535 eelf64lppc_fbsd.c:554
+#: eelf64lppc_fbsd.c:581 eelf64ppc.c:535 eelf64ppc.c:554 eelf64ppc.c:581
+#: eelf64ppc_fbsd.c:535 eelf64ppc_fbsd.c:554 eelf64ppc_fbsd.c:581
#: ehppaelf.c:295 ehppaelf.c:310 ehppalinux.c:295 ehppalinux.c:310
#: ehppanbsd.c:295 ehppanbsd.c:310 ehppaobsd.c:295 ehppaobsd.c:310
#: em68hc11elf.c:90 em68hc11elf.c:100 em68hc11elf.c:317 em68hc11elfb.c:90
@@ -2757,22 +2919,23 @@ msgstr "%X%P: не може да Ñе оразмери раздел за загÐ
#: eaarch64cloudabi.c:316 eaarch64cloudabib.c:316 eaarch64elf.c:315
#: eaarch64elf32.c:315 eaarch64elf32b.c:315 eaarch64elfb.c:315
-#: eaarch64fbsd.c:316 eaarch64fbsdb.c:316 eaarch64linux.c:316
-#: eaarch64linux32.c:316 eaarch64linux32b.c:316 eaarch64linuxb.c:316
-#: earmelf.c:468 earmelf_fbsd.c:468 earmelf_fuchsia.c:469 earmelf_linux.c:469
-#: earmelf_linux_eabi.c:469 earmelf_linux_fdpiceabi.c:469 earmelf_nacl.c:469
-#: earmelf_nbsd.c:468 earmelf_phoenix.c:469 earmelf_vxworks.c:468
-#: earmelfb.c:468 earmelfb_fbsd.c:468 earmelfb_fuchsia.c:469
-#: earmelfb_linux.c:469 earmelfb_linux_eabi.c:469
-#: earmelfb_linux_fdpiceabi.c:469 earmelfb_nacl.c:469 earmelfb_nbsd.c:468
-#: earmnto.c:468 earmsymbian.c:468 eavr1.c:201 eavr2.c:201 eavr25.c:201
-#: eavr3.c:201 eavr31.c:201 eavr35.c:201 eavr4.c:201 eavr5.c:201 eavr51.c:201
-#: eavr6.c:201 eavrtiny.c:201 eavrxmega1.c:201 eavrxmega2.c:201
-#: eavrxmega3.c:201 eavrxmega4.c:201 eavrxmega5.c:201 eavrxmega6.c:201
-#: eavrxmega7.c:201 eelf32metag.c:300 eelf64lppc.c:619 eelf64ppc.c:619
-#: eelf64ppc_fbsd.c:619 ehppaelf.c:332 ehppalinux.c:332 ehppanbsd.c:332
-#: ehppaobsd.c:332 em68hc11elf.c:321 em68hc11elfb.c:321 em68hc12elf.c:321
-#: em68hc12elfb.c:321 enios2elf.c:318 enios2linux.c:318
+#: eaarch64fbsd.c:316 eaarch64fbsdb.c:316 eaarch64haiku.c:316
+#: eaarch64linux.c:316 eaarch64linux32.c:316 eaarch64linux32b.c:316
+#: eaarch64linuxb.c:316 earmelf.c:468 earmelf_fbsd.c:468 earmelf_fuchsia.c:469
+#: earmelf_haiku.c:469 earmelf_linux.c:469 earmelf_linux_eabi.c:469
+#: earmelf_linux_fdpiceabi.c:469 earmelf_nacl.c:469 earmelf_nbsd.c:468
+#: earmelf_phoenix.c:469 earmelf_vxworks.c:468 earmelfb.c:468
+#: earmelfb_fbsd.c:468 earmelfb_fuchsia.c:469 earmelfb_linux.c:469
+#: earmelfb_linux_eabi.c:469 earmelfb_linux_fdpiceabi.c:469
+#: earmelfb_nacl.c:469 earmelfb_nbsd.c:468 earmnto.c:468 eavr1.c:201
+#: eavr2.c:201 eavr25.c:201 eavr3.c:201 eavr31.c:201 eavr35.c:201 eavr4.c:201
+#: eavr5.c:201 eavr51.c:201 eavr6.c:201 eavrtiny.c:201 eavrxmega1.c:201
+#: eavrxmega2.c:201 eavrxmega3.c:201 eavrxmega4.c:201 eavrxmega5.c:201
+#: eavrxmega6.c:201 eavrxmega7.c:201 eelf32metag.c:300 eelf64lppc.c:631
+#: eelf64lppc_fbsd.c:631 eelf64ppc.c:631 eelf64ppc_fbsd.c:631 ehppaelf.c:332
+#: ehppalinux.c:332 ehppanbsd.c:332 ehppaobsd.c:332 em68hc11elf.c:321
+#: em68hc11elfb.c:321 em68hc12elf.c:321 em68hc12elfb.c:321 enios2elf.c:318
+#: enios2linux.c:318
msgid "%X%P: can not build stubs: %E\n"
msgstr "%X%P: не може да Ñе Ñъздадат заготовки: %E\n"
@@ -2789,10 +2952,6 @@ msgstr "%X%P: не може да Ñе Ñъздадат заготовки: %E\n"
#. hence we do not support linking and changing output formats at the
#. same time. Use a link followed by objcopy to change output formats.
#. Check the output target is nds32.
-#. The arm backend needs special fields in the output hash structure.
-#. These will only be created if the output format is an arm format,
-#. hence we do not support linking and changing output formats at the
-#. same time. Use a link followed by objcopy to change output formats.
#. The score backend needs special fields in the output hash structure.
#. These will only be created if the output format is an score format,
#. hence we do not support linking and changing output formats at the
@@ -2807,600 +2966,636 @@ msgstr "%X%P: не може да Ñе Ñъздадат заготовки: %E\n"
#. same time. Use a link followed by objcopy to change output formats.
#: eaarch64cloudabi.c:334 eaarch64cloudabib.c:334 eaarch64elf.c:333
#: eaarch64elf32.c:333 eaarch64elf32b.c:333 eaarch64elfb.c:333
-#: eaarch64fbsd.c:334 eaarch64fbsdb.c:334 eaarch64linux.c:334
-#: eaarch64linux32.c:334 eaarch64linux32b.c:334 eaarch64linuxb.c:334
-#: earm_wince_pe.c:1377 earmelf.c:540 earmelf_fbsd.c:540 earmelf_fuchsia.c:541
-#: earmelf_linux.c:541 earmelf_linux_eabi.c:541 earmelf_linux_fdpiceabi.c:541
-#: earmelf_nacl.c:541 earmelf_nbsd.c:540 earmelf_phoenix.c:541
-#: earmelf_vxworks.c:540 earmelfb.c:540 earmelfb_fbsd.c:540
-#: earmelfb_fuchsia.c:541 earmelfb_linux.c:541 earmelfb_linux_eabi.c:541
+#: eaarch64fbsd.c:334 eaarch64fbsdb.c:334 eaarch64haiku.c:334
+#: eaarch64linux.c:334 eaarch64linux32.c:334 eaarch64linux32b.c:334
+#: eaarch64linuxb.c:334 earm_wince_pe.c:1426 earmelf.c:540 earmelf_fbsd.c:540
+#: earmelf_fuchsia.c:541 earmelf_haiku.c:541 earmelf_linux.c:541
+#: earmelf_linux_eabi.c:541 earmelf_linux_fdpiceabi.c:541 earmelf_nacl.c:541
+#: earmelf_nbsd.c:540 earmelf_phoenix.c:541 earmelf_vxworks.c:540
+#: earmelfb.c:540 earmelfb_fbsd.c:540 earmelfb_fuchsia.c:541
+#: earmelfb_linux.c:541 earmelfb_linux_eabi.c:541
#: earmelfb_linux_fdpiceabi.c:541 earmelfb_nacl.c:541 earmelfb_nbsd.c:540
-#: earmnto.c:540 earmpe.c:1377 earmsymbian.c:540 eavr1.c:142 eavr2.c:142
-#: eavr25.c:142 eavr3.c:142 eavr31.c:142 eavr35.c:142 eavr4.c:142 eavr5.c:142
-#: eavr51.c:142 eavr6.c:142 eavrtiny.c:142 eavrxmega1.c:142 eavrxmega2.c:142
+#: earmnto.c:540 earmpe.c:1426 eavr1.c:142 eavr2.c:142 eavr25.c:142
+#: eavr3.c:142 eavr31.c:142 eavr35.c:142 eavr4.c:142 eavr5.c:142 eavr51.c:142
+#: eavr6.c:142 eavrtiny.c:142 eavrxmega1.c:142 eavrxmega2.c:142
#: eavrxmega3.c:142 eavrxmega4.c:142 eavrxmega5.c:142 eavrxmega6.c:142
-#: eavrxmega7.c:142 eelf32lriscv.c:110 eelf32lriscv_ilp32.c:110
-#: eelf32lriscv_ilp32f.c:110 eelf64lriscv.c:110 eelf64lriscv_lp64.c:110
-#: eelf64lriscv_lp64f.c:110 ei386pe.c:1377 ei386pe_posix.c:1377
-#: emcorepe.c:1377 ends32belf.c:74 ends32belf16m.c:74 ends32belf_linux.c:74
-#: ends32elf.c:74 ends32elf16m.c:74 ends32elf_linux.c:74 eppcpe.c:1377
-#: escore3_elf.c:75 escore7_elf.c:75 eshpe.c:1377 ev850.c:91 ev850_rh850.c:91
+#: eavrxmega7.c:142 eelf32briscv.c:124 eelf32briscv_ilp32.c:124
+#: eelf32briscv_ilp32f.c:124 eelf32loongarch.c:106 eelf32lriscv.c:124
+#: eelf32lriscv_ilp32.c:124 eelf32lriscv_ilp32f.c:124 eelf64briscv.c:124
+#: eelf64briscv_lp64.c:124 eelf64briscv_lp64f.c:124 eelf64loongarch.c:106
+#: eelf64lriscv.c:124 eelf64lriscv_lp64.c:124 eelf64lriscv_lp64f.c:124
+#: ei386pe.c:1426 ei386pe_posix.c:1426 emcorepe.c:1426 ends32belf.c:74
+#: ends32belf16m.c:74 ends32belf_linux.c:74 ends32elf.c:74 ends32elf16m.c:74
+#: ends32elf_linux.c:74 escore3_elf.c:75 escore7_elf.c:75 eshpe.c:1426
+#: ev850.c:91 ev850_rh850.c:91
msgid "%F%P: error: cannot change output format whilst linking %s binaries\n"
msgstr ""
#: eaarch64cloudabi.c:570 eaarch64cloudabib.c:570 eaarch64elf.c:569
#: eaarch64elf32.c:569 eaarch64elf32b.c:569 eaarch64elfb.c:569
-#: eaarch64fbsd.c:570 eaarch64fbsdb.c:570 eaarch64linux.c:570
-#: eaarch64linux32.c:570 eaarch64linux32b.c:570 eaarch64linuxb.c:570
-#: earcelf.c:202 earclinux.c:258 earclinux_nps.c:258 earcv2elf.c:186
-#: earcv2elfx.c:186 earmelf.c:812 earmelf_fbsd.c:812 earmelf_fuchsia.c:813
-#: earmelf_linux.c:813 earmelf_linux_eabi.c:813 earmelf_linux_fdpiceabi.c:813
-#: earmelf_nacl.c:813 earmelf_nbsd.c:812 earmelf_phoenix.c:813
-#: earmelf_vxworks.c:848 earmelfb.c:812 earmelfb_fbsd.c:812
-#: earmelfb_fuchsia.c:813 earmelfb_linux.c:813 earmelfb_linux_eabi.c:813
+#: eaarch64fbsd.c:570 eaarch64fbsdb.c:570 eaarch64haiku.c:570
+#: eaarch64linux.c:570 eaarch64linux32.c:570 eaarch64linux32b.c:570
+#: eaarch64linuxb.c:570 earcelf.c:202 earclinux.c:258 earclinux_nps.c:258
+#: earcv2elf.c:186 earcv2elfx.c:186 earmelf.c:812 earmelf_fbsd.c:812
+#: earmelf_fuchsia.c:813 earmelf_haiku.c:813 earmelf_linux.c:813
+#: earmelf_linux_eabi.c:813 earmelf_linux_fdpiceabi.c:813 earmelf_nacl.c:813
+#: earmelf_nbsd.c:812 earmelf_phoenix.c:813 earmelf_vxworks.c:848
+#: earmelfb.c:812 earmelfb_fbsd.c:812 earmelfb_fuchsia.c:813
+#: earmelfb_linux.c:813 earmelfb_linux_eabi.c:813
#: earmelfb_linux_fdpiceabi.c:813 earmelfb_nacl.c:813 earmelfb_nbsd.c:812
-#: earmnto.c:787 earmsymbian.c:812 eavr1.c:409 eavr2.c:409 eavr25.c:409
-#: eavr3.c:409 eavr31.c:409 eavr35.c:409 eavr4.c:409 eavr5.c:409 eavr51.c:409
-#: eavr6.c:409 eavrtiny.c:409 eavrxmega1.c:409 eavrxmega2.c:409
-#: eavrxmega3.c:409 eavrxmega4.c:409 eavrxmega5.c:409 eavrxmega6.c:409
-#: eavrxmega7.c:409 ecriself.c:201 ecrislinux.c:233 ecskyelf.c:445
-#: ecskyelf_linux.c:502 ed10velf.c:186 eelf32_sparc.c:258
-#: eelf32_sparc_sol2.c:389 eelf32_sparc_vxworks.c:295 eelf32_spu.c:919
-#: eelf32_tic6x_be.c:369 eelf32_tic6x_elf_be.c:369 eelf32_tic6x_elf_le.c:369
-#: eelf32_tic6x_le.c:369 eelf32_tic6x_linux_be.c:369
-#: eelf32_tic6x_linux_le.c:369 eelf32_x86_64.c:5195 eelf32am33lin.c:232
-#: eelf32b4300.c:473 eelf32bfin.c:250 eelf32bfinfd.c:275 eelf32bmip.c:473
-#: eelf32bmipn32.c:487 eelf32bsmip.c:487 eelf32btsmip.c:473
-#: eelf32btsmip_fbsd.c:473 eelf32btsmipn32.c:473 eelf32btsmipn32_fbsd.c:473
-#: eelf32cr16.c:336 eelf32crx.c:223 eelf32ebmip.c:473 eelf32ebmipvxworks.c:508
-#: eelf32elmip.c:473 eelf32elmipvxworks.c:508 eelf32epiphany.c:201
-#: eelf32epiphany_4x4.c:188 eelf32frvfd.c:257 eelf32ip2k.c:201
-#: eelf32l4300.c:473 eelf32lm32.c:201 eelf32lm32fd.c:257 eelf32lmip.c:473
-#: eelf32lppc.c:521 eelf32lppclinux.c:521 eelf32lppcnto.c:521
-#: eelf32lppcsim.c:521 eelf32lr5900.c:442 eelf32lr5900n32.c:441
-#: eelf32lriscv.c:312 eelf32lriscv_ilp32.c:312 eelf32lriscv_ilp32f.c:312
-#: eelf32lsmip.c:473 eelf32ltsmip.c:473 eelf32ltsmip_fbsd.c:473
-#: eelf32ltsmipn32.c:473 eelf32ltsmipn32_fbsd.c:473 eelf32m32c.c:212
-#: eelf32mb_linux.c:258 eelf32mbel_linux.c:258 eelf32mcore.c:207
-#: eelf32mep.c:186 eelf32metag.c:507 eelf32microblaze.c:186
-#: eelf32microblazeel.c:186 eelf32mipswindiss.c:416 eelf32moxie.c:201
-#: eelf32or1k.c:202 eelf32or1k_linux.c:258 eelf32ppc.c:521
-#: eelf32ppc_fbsd.c:521 eelf32ppclinux.c:521 eelf32ppcnto.c:521
-#: eelf32ppcsim.c:521 eelf32ppcvxworks.c:495 eelf32ppcwindiss.c:521
-#: eelf32rl78.c:201 eelf32rx.c:229 eelf32rx_linux.c:214 eelf32tilegx.c:258
-#: eelf32tilegx_be.c:258 eelf32tilepro.c:258 eelf32vax.c:232
-#: eelf32visium.c:186 eelf32xc16x.c:186 eelf32xc16xl.c:186 eelf32xc16xs.c:186
-#: eelf32xstormy16.c:197 eelf32xtensa.c:2179 eelf32z80.c:213 eelf64_aix.c:232
-#: eelf64_ia64.c:289 eelf64_ia64_fbsd.c:289 eelf64_s390.c:328
-#: eelf64_sparc.c:258 eelf64_sparc_fbsd.c:258 eelf64_sparc_sol2.c:389
-#: eelf64alpha.c:351 eelf64alpha_fbsd.c:351 eelf64alpha_nbsd.c:351
-#: eelf64bmip.c:487 eelf64bpf.c:186 eelf64btsmip.c:473 eelf64btsmip_fbsd.c:473
-#: eelf64hppa.c:202 eelf64lppc.c:952 eelf64lriscv.c:312
-#: eelf64lriscv_lp64.c:312 eelf64lriscv_lp64f.c:312 eelf64ltsmip.c:473
-#: eelf64ltsmip_fbsd.c:473 eelf64mmix.c:4009 eelf64ppc.c:952
-#: eelf64ppc_fbsd.c:952 eelf64rdos.c:283 eelf64tilegx.c:258
-#: eelf64tilegx_be.c:258 eelf_i386.c:4817 eelf_i386_be.c:256
-#: eelf_i386_fbsd.c:292 eelf_i386_ldso.c:267 eelf_i386_sol2.c:423
-#: eelf_i386_vxworks.c:319 eelf_iamcu.c:4795 eelf_k1om.c:5151
-#: eelf_k1om_fbsd.c:5131 eelf_l1om.c:5151 eelf_l1om_fbsd.c:5131
-#: eelf_s390.c:258 eelf_x86_64.c:5195 eelf_x86_64_cloudabi.c:292
-#: eelf_x86_64_fbsd.c:292 eelf_x86_64_sol2.c:423 eh8300elf.c:201
-#: eh8300elf_linux.c:201 eh8300helf.c:201 eh8300helf_linux.c:201
-#: eh8300hnelf.c:201 eh8300self.c:201 eh8300self_linux.c:201 eh8300snelf.c:201
-#: eh8300sxelf.c:201 eh8300sxelf_linux.c:201 eh8300sxnelf.c:201
-#: ehppa64linux.c:232 ehppaelf.c:469 ehppalinux.c:541 ehppanbsd.c:541
-#: ehppaobsd.c:541 ei386lynx.c:247 ei386moss.c:247 ei386nto.c:247
-#: em32relf.c:201 em32relf_linux.c:257 em32rlelf.c:201 em32rlelf_linux.c:257
+#: earmnto.c:787 eavr1.c:409 eavr2.c:409 eavr25.c:409 eavr3.c:409 eavr31.c:409
+#: eavr35.c:409 eavr4.c:409 eavr5.c:409 eavr51.c:409 eavr6.c:409
+#: eavrtiny.c:409 eavrxmega1.c:409 eavrxmega2.c:409 eavrxmega3.c:409
+#: eavrxmega4.c:409 eavrxmega5.c:409 eavrxmega6.c:409 eavrxmega7.c:409
+#: ecriself.c:201 ecrislinux.c:233 ecskyelf.c:445 ecskyelf_linux.c:502
+#: ed10velf.c:186 eelf32_sparc.c:258 eelf32_sparc_sol2.c:390
+#: eelf32_sparc_vxworks.c:295 eelf32_spu.c:919 eelf32_tic6x_be.c:369
+#: eelf32_tic6x_elf_be.c:369 eelf32_tic6x_elf_le.c:369 eelf32_tic6x_le.c:369
+#: eelf32_tic6x_linux_be.c:369 eelf32_tic6x_linux_le.c:369
+#: eelf32_x86_64.c:5349 eelf32am33lin.c:232 eelf32b4300.c:473 eelf32bfin.c:250
+#: eelf32bfinfd.c:275 eelf32bmip.c:473 eelf32bmipn32.c:487 eelf32briscv.c:326
+#: eelf32briscv_ilp32.c:326 eelf32briscv_ilp32f.c:326 eelf32bsmip.c:487
+#: eelf32btsmip.c:473 eelf32btsmip_fbsd.c:473 eelf32btsmipn32.c:473
+#: eelf32btsmipn32_fbsd.c:473 eelf32cr16.c:336 eelf32crx.c:223
+#: eelf32ebmip.c:473 eelf32ebmipvxworks.c:508 eelf32elmip.c:473
+#: eelf32elmipvxworks.c:508 eelf32epiphany.c:201 eelf32epiphany_4x4.c:188
+#: eelf32frvfd.c:257 eelf32ip2k.c:201 eelf32l4300.c:473 eelf32lm32.c:201
+#: eelf32lm32fd.c:257 eelf32lmip.c:473 eelf32loongarch.c:308 eelf32lppc.c:521
+#: eelf32lppclinux.c:521 eelf32lppcnto.c:521 eelf32lppcsim.c:521
+#: eelf32lr5900.c:442 eelf32lr5900n32.c:441 eelf32lriscv.c:326
+#: eelf32lriscv_ilp32.c:326 eelf32lriscv_ilp32f.c:326 eelf32lsmip.c:473
+#: eelf32ltsmip.c:473 eelf32ltsmip_fbsd.c:473 eelf32ltsmipn32.c:473
+#: eelf32ltsmipn32_fbsd.c:473 eelf32m32c.c:212 eelf32mb_linux.c:258
+#: eelf32mbel_linux.c:258 eelf32mcore.c:207 eelf32mep.c:186 eelf32metag.c:507
+#: eelf32microblaze.c:186 eelf32microblazeel.c:186 eelf32mipswindiss.c:416
+#: eelf32moxie.c:201 eelf32or1k.c:202 eelf32or1k_linux.c:258 eelf32ppc.c:521
+#: eelf32ppc_fbsd.c:521 eelf32ppchaiku.c:521 eelf32ppclinux.c:521
+#: eelf32ppcnto.c:521 eelf32ppcsim.c:521 eelf32ppcvxworks.c:495
+#: eelf32ppcwindiss.c:521 eelf32rl78.c:201 eelf32rx.c:229 eelf32rx_linux.c:214
+#: eelf32tilegx.c:258 eelf32tilegx_be.c:258 eelf32tilepro.c:258
+#: eelf32vax.c:232 eelf32visium.c:186 eelf32xc16x.c:186 eelf32xc16xl.c:186
+#: eelf32xc16xs.c:186 eelf32xstormy16.c:197 eelf32xtensa.c:2179
+#: eelf32z80.c:213 eelf64_aix.c:232 eelf64_ia64.c:289 eelf64_ia64_fbsd.c:289
+#: eelf64_s390.c:328 eelf64_sparc.c:258 eelf64_sparc_fbsd.c:258
+#: eelf64_sparc_sol2.c:390 eelf64alpha.c:351 eelf64alpha_fbsd.c:351
+#: eelf64alpha_nbsd.c:351 eelf64bmip.c:487 eelf64bpf.c:186 eelf64briscv.c:326
+#: eelf64briscv_lp64.c:326 eelf64briscv_lp64f.c:326 eelf64btsmip.c:473
+#: eelf64btsmip_fbsd.c:473 eelf64hppa.c:202 eelf64loongarch.c:308
+#: eelf64lppc.c:970 eelf64lppc_fbsd.c:970 eelf64lriscv.c:326
+#: eelf64lriscv_lp64.c:326 eelf64lriscv_lp64f.c:326 eelf64ltsmip.c:473
+#: eelf64ltsmip_fbsd.c:473 eelf64mmix.c:343 eelf64ppc.c:970
+#: eelf64ppc_fbsd.c:970 eelf64rdos.c:283 eelf64tilegx.c:258
+#: eelf64tilegx_be.c:258 eelf_i386.c:4971 eelf_i386_be.c:256
+#: eelf_i386_fbsd.c:292 eelf_i386_haiku.c:292 eelf_i386_ldso.c:267
+#: eelf_i386_sol2.c:424 eelf_i386_vxworks.c:319 eelf_iamcu.c:292
+#: eelf_k1om.c:5283 eelf_k1om_fbsd.c:292 eelf_l1om.c:5283 eelf_l1om_fbsd.c:292
+#: eelf_mipsel_haiku.c:473 eelf_s390.c:258 eelf_x86_64.c:5349
+#: eelf_x86_64_cloudabi.c:292 eelf_x86_64_fbsd.c:292 eelf_x86_64_haiku.c:292
+#: eelf_x86_64_sol2.c:424 eh8300elf.c:201 eh8300elf_linux.c:201
+#: eh8300helf.c:201 eh8300helf_linux.c:201 eh8300hnelf.c:201 eh8300self.c:201
+#: eh8300self_linux.c:201 eh8300snelf.c:201 eh8300sxelf.c:201
+#: eh8300sxelf_linux.c:201 eh8300sxnelf.c:201 ehppa64linux.c:232
+#: ehppaelf.c:469 ehppalinux.c:541 ehppanbsd.c:541 ehppaobsd.c:541
+#: ei386lynx.c:247 ei386moss.c:247 ei386nto.c:247 em32relf.c:201
+#: em32relf_linux.c:257 em32rlelf.c:201 em32rlelf_linux.c:257
#: em68hc11elf.c:471 em68hc11elfb.c:471 em68hc12elf.c:471 em68hc12elfb.c:471
#: em68kelf.c:415 em68kelfnbsd.c:415 emn10300.c:232 ends32belf.c:322
#: ends32belf16m.c:322 ends32belf_linux.c:345 ends32elf.c:322
#: ends32elf16m.c:322 ends32elf_linux.c:345 enios2elf.c:488 enios2linux.c:519
-#: eppclynx.c:521 epruelf.c:207 escore3_elf.c:253 escore7_elf.c:253
-#: eshelf.c:232 eshelf_fd.c:258 eshelf_linux.c:258 eshelf_nbsd.c:232
-#: eshelf_nto.c:232 eshelf_uclinux.c:232 eshelf_vxworks.c:269 eshlelf.c:232
-#: eshlelf_fd.c:258 eshlelf_linux.c:258 eshlelf_nbsd.c:232 eshlelf_nto.c:232
+#: epruelf.c:207 escore3_elf.c:253 escore7_elf.c:253 eshelf.c:232
+#: eshelf_fd.c:258 eshelf_linux.c:258 eshelf_nbsd.c:232 eshelf_nto.c:232
+#: eshelf_uclinux.c:232 eshelf_vxworks.c:269 eshlelf.c:232 eshlelf_fd.c:258
+#: eshlelf_linux.c:258 eshlelf_nbsd.c:232 eshlelf_nto.c:232
#: eshlelf_vxworks.c:269 ev850.c:233 ev850_rh850.c:233
msgid "%F%P: invalid --compress-debug-sections option: `%s'\n"
msgstr "%F%P: неправилна Ð¾Ð¿Ñ†Ð¸Ñ --compress-debug-sections: '%s'\n"
#: eaarch64cloudabi.c:621 eaarch64cloudabib.c:621 eaarch64elf.c:620
#: eaarch64elf32.c:620 eaarch64elf32b.c:620 eaarch64elfb.c:620
-#: eaarch64fbsd.c:621 eaarch64fbsdb.c:621 eaarch64linux.c:621
-#: eaarch64linux32.c:621 eaarch64linux32b.c:621 eaarch64linuxb.c:621
-#: earcelf.c:253 earclinux.c:309 earclinux_nps.c:309 earmelf.c:863
-#: earmelf_fbsd.c:863 earmelf_fuchsia.c:864 earmelf_linux.c:864
-#: earmelf_linux_eabi.c:864 earmelf_linux_fdpiceabi.c:864 earmelf_nacl.c:864
-#: earmelf_nbsd.c:863 earmelf_phoenix.c:864 earmelf_vxworks.c:899
-#: earmelfb.c:863 earmelfb_fbsd.c:863 earmelfb_fuchsia.c:864
-#: earmelfb_linux.c:864 earmelfb_linux_eabi.c:864
+#: eaarch64fbsd.c:621 eaarch64fbsdb.c:621 eaarch64haiku.c:621
+#: eaarch64linux.c:621 eaarch64linux32.c:621 eaarch64linux32b.c:621
+#: eaarch64linuxb.c:621 earcelf.c:253 earclinux.c:309 earclinux_nps.c:309
+#: earmelf.c:863 earmelf_fbsd.c:863 earmelf_fuchsia.c:864 earmelf_haiku.c:864
+#: earmelf_linux.c:864 earmelf_linux_eabi.c:864 earmelf_linux_fdpiceabi.c:864
+#: earmelf_nacl.c:864 earmelf_nbsd.c:863 earmelf_phoenix.c:864
+#: earmelf_vxworks.c:899 earmelfb.c:863 earmelfb_fbsd.c:863
+#: earmelfb_fuchsia.c:864 earmelfb_linux.c:864 earmelfb_linux_eabi.c:864
#: earmelfb_linux_fdpiceabi.c:864 earmelfb_nacl.c:864 earmelfb_nbsd.c:863
-#: earmnto.c:838 earmsymbian.c:863 ecrislinux.c:284 ecskyelf_linux.c:553
-#: eelf32_sparc.c:309 eelf32_sparc_sol2.c:440 eelf32_sparc_vxworks.c:346
-#: eelf32_tic6x_be.c:420 eelf32_tic6x_elf_be.c:420 eelf32_tic6x_elf_le.c:420
-#: eelf32_tic6x_le.c:420 eelf32_tic6x_linux_be.c:420
-#: eelf32_tic6x_linux_le.c:420 eelf32_x86_64.c:5246 eelf32am33lin.c:283
-#: eelf32b4300.c:524 eelf32bfin.c:301 eelf32bfinfd.c:326 eelf32bmip.c:524
-#: eelf32bmipn32.c:538 eelf32bsmip.c:538 eelf32btsmip.c:524
-#: eelf32btsmip_fbsd.c:524 eelf32btsmipn32.c:524 eelf32btsmipn32_fbsd.c:524
-#: eelf32ebmip.c:524 eelf32ebmipvxworks.c:559 eelf32elmip.c:524
-#: eelf32elmipvxworks.c:559 eelf32frvfd.c:308 eelf32l4300.c:524
-#: eelf32lm32fd.c:308 eelf32lmip.c:524 eelf32lppc.c:572 eelf32lppclinux.c:572
-#: eelf32lppcnto.c:572 eelf32lppcsim.c:572 eelf32lriscv.c:363
-#: eelf32lriscv_ilp32.c:363 eelf32lriscv_ilp32f.c:363 eelf32lsmip.c:524
-#: eelf32ltsmip.c:524 eelf32ltsmip_fbsd.c:524 eelf32ltsmipn32.c:524
-#: eelf32ltsmipn32_fbsd.c:524 eelf32mb_linux.c:309 eelf32mbel_linux.c:309
-#: eelf32metag.c:558 eelf32or1k_linux.c:309 eelf32ppc.c:572
-#: eelf32ppc_fbsd.c:572 eelf32ppclinux.c:572 eelf32ppcnto.c:572
+#: earmnto.c:838 ecrislinux.c:284 ecskyelf_linux.c:553 eelf32_sparc.c:309
+#: eelf32_sparc_sol2.c:441 eelf32_sparc_vxworks.c:346 eelf32_tic6x_be.c:420
+#: eelf32_tic6x_elf_be.c:420 eelf32_tic6x_elf_le.c:420 eelf32_tic6x_le.c:420
+#: eelf32_tic6x_linux_be.c:420 eelf32_tic6x_linux_le.c:420
+#: eelf32_x86_64.c:5400 eelf32am33lin.c:283 eelf32b4300.c:524 eelf32bfin.c:301
+#: eelf32bfinfd.c:326 eelf32bmip.c:524 eelf32bmipn32.c:538 eelf32briscv.c:377
+#: eelf32briscv_ilp32.c:377 eelf32briscv_ilp32f.c:377 eelf32bsmip.c:538
+#: eelf32btsmip.c:524 eelf32btsmip_fbsd.c:524 eelf32btsmipn32.c:524
+#: eelf32btsmipn32_fbsd.c:524 eelf32ebmip.c:524 eelf32ebmipvxworks.c:559
+#: eelf32elmip.c:524 eelf32elmipvxworks.c:559 eelf32frvfd.c:308
+#: eelf32l4300.c:524 eelf32lm32fd.c:308 eelf32lmip.c:524 eelf32loongarch.c:359
+#: eelf32lppc.c:572 eelf32lppclinux.c:572 eelf32lppcnto.c:572
+#: eelf32lppcsim.c:572 eelf32lriscv.c:377 eelf32lriscv_ilp32.c:377
+#: eelf32lriscv_ilp32f.c:377 eelf32lsmip.c:524 eelf32ltsmip.c:524
+#: eelf32ltsmip_fbsd.c:524 eelf32ltsmipn32.c:524 eelf32ltsmipn32_fbsd.c:524
+#: eelf32mb_linux.c:309 eelf32mbel_linux.c:309 eelf32metag.c:558
+#: eelf32or1k_linux.c:309 eelf32ppc.c:572 eelf32ppc_fbsd.c:572
+#: eelf32ppchaiku.c:572 eelf32ppclinux.c:572 eelf32ppcnto.c:572
#: eelf32ppcsim.c:572 eelf32ppcvxworks.c:546 eelf32ppcwindiss.c:572
#: eelf32tilegx.c:309 eelf32tilegx_be.c:309 eelf32tilepro.c:309
#: eelf32vax.c:283 eelf32xtensa.c:2230 eelf64_aix.c:283 eelf64_ia64.c:340
#: eelf64_ia64_fbsd.c:340 eelf64_s390.c:379 eelf64_sparc.c:309
-#: eelf64_sparc_fbsd.c:309 eelf64_sparc_sol2.c:440 eelf64alpha.c:402
+#: eelf64_sparc_fbsd.c:309 eelf64_sparc_sol2.c:441 eelf64alpha.c:402
#: eelf64alpha_fbsd.c:402 eelf64alpha_nbsd.c:402 eelf64bmip.c:538
+#: eelf64briscv.c:377 eelf64briscv_lp64.c:377 eelf64briscv_lp64f.c:377
#: eelf64btsmip.c:524 eelf64btsmip_fbsd.c:524 eelf64hppa.c:253
-#: eelf64lppc.c:1003 eelf64lriscv.c:363 eelf64lriscv_lp64.c:363
-#: eelf64lriscv_lp64f.c:363 eelf64ltsmip.c:524 eelf64ltsmip_fbsd.c:524
-#: eelf64mmix.c:4060 eelf64ppc.c:1003 eelf64ppc_fbsd.c:1003 eelf64rdos.c:334
-#: eelf64tilegx.c:309 eelf64tilegx_be.c:309 eelf_i386.c:4868
-#: eelf_i386_be.c:307 eelf_i386_fbsd.c:343 eelf_i386_ldso.c:318
-#: eelf_i386_sol2.c:474 eelf_i386_vxworks.c:370 eelf_iamcu.c:4846
-#: eelf_k1om.c:5202 eelf_k1om_fbsd.c:5182 eelf_l1om.c:5202
-#: eelf_l1om_fbsd.c:5182 eelf_s390.c:309 eelf_x86_64.c:5246
-#: eelf_x86_64_cloudabi.c:343 eelf_x86_64_fbsd.c:343 eelf_x86_64_sol2.c:474
-#: ehppa64linux.c:283 ehppalinux.c:592 ehppanbsd.c:592 ehppaobsd.c:592
-#: ei386lynx.c:298 ei386moss.c:298 ei386nto.c:298 em32relf_linux.c:308
-#: em32rlelf_linux.c:308 em68kelf.c:466 em68kelfnbsd.c:466 emn10300.c:283
-#: ends32belf_linux.c:396 ends32elf_linux.c:396 enios2linux.c:570
-#: eppclynx.c:572 escore3_elf.c:304 escore7_elf.c:304 eshelf.c:283
-#: eshelf_fd.c:309 eshelf_linux.c:309 eshelf_nbsd.c:283 eshelf_nto.c:283
-#: eshelf_uclinux.c:283 eshelf_vxworks.c:320 eshlelf.c:283 eshlelf_fd.c:309
-#: eshlelf_linux.c:309 eshlelf_nbsd.c:283 eshlelf_nto.c:283
+#: eelf64loongarch.c:359 eelf64lppc.c:1021 eelf64lppc_fbsd.c:1021
+#: eelf64lriscv.c:377 eelf64lriscv_lp64.c:377 eelf64lriscv_lp64f.c:377
+#: eelf64ltsmip.c:524 eelf64ltsmip_fbsd.c:524 eelf64mmix.c:394
+#: eelf64ppc.c:1021 eelf64ppc_fbsd.c:1021 eelf64rdos.c:334 eelf64tilegx.c:309
+#: eelf64tilegx_be.c:309 eelf_i386.c:5022 eelf_i386_be.c:307
+#: eelf_i386_fbsd.c:343 eelf_i386_haiku.c:343 eelf_i386_ldso.c:318
+#: eelf_i386_sol2.c:475 eelf_i386_vxworks.c:370 eelf_iamcu.c:343
+#: eelf_k1om.c:5334 eelf_k1om_fbsd.c:343 eelf_l1om.c:5334 eelf_l1om_fbsd.c:343
+#: eelf_mipsel_haiku.c:524 eelf_s390.c:309 eelf_x86_64.c:5400
+#: eelf_x86_64_cloudabi.c:343 eelf_x86_64_fbsd.c:343 eelf_x86_64_haiku.c:343
+#: eelf_x86_64_sol2.c:475 ehppa64linux.c:283 ehppalinux.c:592 ehppanbsd.c:592
+#: ehppaobsd.c:592 ei386lynx.c:298 ei386moss.c:298 ei386nto.c:298
+#: em32relf_linux.c:308 em32rlelf_linux.c:308 em68kelf.c:466
+#: em68kelfnbsd.c:466 emn10300.c:283 ends32belf_linux.c:396
+#: ends32elf_linux.c:396 enios2linux.c:570 escore3_elf.c:304 escore7_elf.c:304
+#: eshelf.c:283 eshelf_fd.c:309 eshelf_linux.c:309 eshelf_nbsd.c:283
+#: eshelf_nto.c:283 eshelf_uclinux.c:283 eshelf_vxworks.c:320 eshlelf.c:283
+#: eshlelf_fd.c:309 eshlelf_linux.c:309 eshlelf_nbsd.c:283 eshlelf_nto.c:283
#: eshlelf_vxworks.c:320
msgid "%F%P: invalid hash style `%s'\n"
msgstr "%F%P: неправилен вид хеш '%s'\n"
-#: eaarch64cloudabi.c:637 eaarch64cloudabib.c:637 eaarch64elf.c:636
-#: eaarch64elf32.c:636 eaarch64elf32b.c:636 eaarch64elfb.c:636
-#: eaarch64fbsd.c:637 eaarch64fbsdb.c:637 eaarch64linux.c:637
-#: eaarch64linux32.c:637 eaarch64linux32b.c:637 eaarch64linuxb.c:637
-#: earcelf.c:269 earclinux.c:325 earclinux_nps.c:325 earcv2elf.c:202
-#: earcv2elfx.c:202 earmelf.c:879 earmelf_fbsd.c:879 earmelf_fuchsia.c:880
-#: earmelf_linux.c:880 earmelf_linux_eabi.c:880 earmelf_linux_fdpiceabi.c:880
-#: earmelf_nacl.c:880 earmelf_nbsd.c:879 earmelf_phoenix.c:880
-#: earmelf_vxworks.c:915 earmelfb.c:879 earmelfb_fbsd.c:879
-#: earmelfb_fuchsia.c:880 earmelfb_linux.c:880 earmelfb_linux_eabi.c:880
-#: earmelfb_linux_fdpiceabi.c:880 earmelfb_nacl.c:880 earmelfb_nbsd.c:879
-#: earmnto.c:854 earmsymbian.c:879 eavr1.c:425 eavr2.c:425 eavr25.c:425
-#: eavr3.c:425 eavr31.c:425 eavr35.c:425 eavr4.c:425 eavr5.c:425 eavr51.c:425
-#: eavr6.c:425 eavrtiny.c:425 eavrxmega1.c:425 eavrxmega2.c:425
-#: eavrxmega3.c:425 eavrxmega4.c:425 eavrxmega5.c:425 eavrxmega6.c:425
-#: eavrxmega7.c:425 ecriself.c:217 ecrislinux.c:300 ecskyelf.c:461
-#: ecskyelf_linux.c:569 ed10velf.c:202 eelf32_sparc.c:325
-#: eelf32_sparc_sol2.c:456 eelf32_sparc_vxworks.c:362 eelf32_spu.c:935
-#: eelf32_tic6x_be.c:436 eelf32_tic6x_elf_be.c:436 eelf32_tic6x_elf_le.c:436
-#: eelf32_tic6x_le.c:436 eelf32_tic6x_linux_be.c:436
-#: eelf32_tic6x_linux_le.c:436 eelf32_x86_64.c:5262 eelf32am33lin.c:299
-#: eelf32b4300.c:540 eelf32bfin.c:317 eelf32bfinfd.c:342 eelf32bmip.c:540
-#: eelf32bmipn32.c:554 eelf32bsmip.c:554 eelf32btsmip.c:540
-#: eelf32btsmip_fbsd.c:540 eelf32btsmipn32.c:540 eelf32btsmipn32_fbsd.c:540
-#: eelf32cr16.c:352 eelf32crx.c:239 eelf32ebmip.c:540 eelf32ebmipvxworks.c:575
-#: eelf32elmip.c:540 eelf32elmipvxworks.c:575 eelf32epiphany.c:217
-#: eelf32epiphany_4x4.c:204 eelf32frvfd.c:324 eelf32ip2k.c:217
-#: eelf32l4300.c:540 eelf32lm32.c:217 eelf32lm32fd.c:324 eelf32lmip.c:540
-#: eelf32lppc.c:588 eelf32lppclinux.c:588 eelf32lppcnto.c:588
-#: eelf32lppcsim.c:588 eelf32lr5900.c:458 eelf32lr5900n32.c:457
-#: eelf32lriscv.c:379 eelf32lriscv_ilp32.c:379 eelf32lriscv_ilp32f.c:379
-#: eelf32lsmip.c:540 eelf32ltsmip.c:540 eelf32ltsmip_fbsd.c:540
-#: eelf32ltsmipn32.c:540 eelf32ltsmipn32_fbsd.c:540 eelf32m32c.c:228
-#: eelf32mb_linux.c:325 eelf32mbel_linux.c:325 eelf32mcore.c:223
-#: eelf32mep.c:202 eelf32metag.c:574 eelf32microblaze.c:202
-#: eelf32microblazeel.c:202 eelf32mipswindiss.c:432 eelf32moxie.c:217
-#: eelf32or1k.c:218 eelf32or1k_linux.c:325 eelf32ppc.c:588
-#: eelf32ppc_fbsd.c:588 eelf32ppclinux.c:588 eelf32ppcnto.c:588
-#: eelf32ppcsim.c:588 eelf32ppcvxworks.c:562 eelf32ppcwindiss.c:588
-#: eelf32rl78.c:217 eelf32rx.c:245 eelf32rx_linux.c:230 eelf32tilegx.c:325
-#: eelf32tilegx_be.c:325 eelf32tilepro.c:325 eelf32vax.c:299
-#: eelf32visium.c:202 eelf32xc16x.c:202 eelf32xc16xl.c:202 eelf32xc16xs.c:202
-#: eelf32xstormy16.c:213 eelf32xtensa.c:2246 eelf32z80.c:229 eelf64_aix.c:299
-#: eelf64_ia64.c:356 eelf64_ia64_fbsd.c:356 eelf64_s390.c:395
-#: eelf64_sparc.c:325 eelf64_sparc_fbsd.c:325 eelf64_sparc_sol2.c:456
-#: eelf64alpha.c:418 eelf64alpha_fbsd.c:418 eelf64alpha_nbsd.c:418
-#: eelf64bmip.c:554 eelf64bpf.c:202 eelf64btsmip.c:540 eelf64btsmip_fbsd.c:540
-#: eelf64hppa.c:269 eelf64lppc.c:1019 eelf64lriscv.c:379
-#: eelf64lriscv_lp64.c:379 eelf64lriscv_lp64f.c:379 eelf64ltsmip.c:540
-#: eelf64ltsmip_fbsd.c:540 eelf64mmix.c:4076 eelf64ppc.c:1019
-#: eelf64ppc_fbsd.c:1019 eelf64rdos.c:350 eelf64tilegx.c:325
-#: eelf64tilegx_be.c:325 eelf_i386.c:4884 eelf_i386_be.c:323
-#: eelf_i386_fbsd.c:359 eelf_i386_ldso.c:334 eelf_i386_sol2.c:490
-#: eelf_i386_vxworks.c:386 eelf_iamcu.c:4862 eelf_k1om.c:5218
-#: eelf_k1om_fbsd.c:5198 eelf_l1om.c:5218 eelf_l1om_fbsd.c:5198
-#: eelf_s390.c:325 eelf_x86_64.c:5262 eelf_x86_64_cloudabi.c:359
-#: eelf_x86_64_fbsd.c:359 eelf_x86_64_sol2.c:490 eh8300elf.c:217
-#: eh8300elf_linux.c:217 eh8300helf.c:217 eh8300helf_linux.c:217
-#: eh8300hnelf.c:217 eh8300self.c:217 eh8300self_linux.c:217 eh8300snelf.c:217
-#: eh8300sxelf.c:217 eh8300sxelf_linux.c:217 eh8300sxnelf.c:217
-#: ehppa64linux.c:299 ehppaelf.c:485 ehppalinux.c:608 ehppanbsd.c:608
-#: ehppaobsd.c:608 ei386lynx.c:314 ei386moss.c:314 ei386nto.c:314
-#: em32relf.c:217 em32relf_linux.c:324 em32rlelf.c:217 em32rlelf_linux.c:324
-#: em68hc11elf.c:487 em68hc11elfb.c:487 em68hc12elf.c:487 em68hc12elfb.c:487
-#: em68kelf.c:482 em68kelfnbsd.c:482 emn10300.c:299 ends32belf.c:338
-#: ends32belf16m.c:338 ends32belf_linux.c:412 ends32elf.c:338
-#: ends32elf16m.c:338 ends32elf_linux.c:412 enios2elf.c:504 enios2linux.c:586
-#: eppclynx.c:588 epruelf.c:223 escore3_elf.c:320 escore7_elf.c:320
-#: eshelf.c:299 eshelf_fd.c:325 eshelf_linux.c:325 eshelf_nbsd.c:299
-#: eshelf_nto.c:299 eshelf_uclinux.c:299 eshelf_vxworks.c:336 eshlelf.c:299
-#: eshlelf_fd.c:325 eshlelf_linux.c:325 eshlelf_nbsd.c:299 eshlelf_nto.c:299
-#: eshlelf_vxworks.c:336 ev850.c:249 ev850_rh850.c:249
+#: eaarch64cloudabi.c:638 eaarch64cloudabib.c:638 eaarch64elf.c:637
+#: eaarch64elf32.c:637 eaarch64elf32b.c:637 eaarch64elfb.c:637
+#: eaarch64fbsd.c:638 eaarch64fbsdb.c:638 eaarch64haiku.c:638
+#: eaarch64linux.c:638 eaarch64linux32.c:638 eaarch64linux32b.c:638
+#: eaarch64linuxb.c:638 earcelf.c:270 earclinux.c:326 earclinux_nps.c:326
+#: earcv2elf.c:203 earcv2elfx.c:203 earmelf.c:880 earmelf_fbsd.c:880
+#: earmelf_fuchsia.c:881 earmelf_haiku.c:881 earmelf_linux.c:881
+#: earmelf_linux_eabi.c:881 earmelf_linux_fdpiceabi.c:881 earmelf_nacl.c:881
+#: earmelf_nbsd.c:880 earmelf_phoenix.c:881 earmelf_vxworks.c:916
+#: earmelfb.c:880 earmelfb_fbsd.c:880 earmelfb_fuchsia.c:881
+#: earmelfb_linux.c:881 earmelfb_linux_eabi.c:881
+#: earmelfb_linux_fdpiceabi.c:881 earmelfb_nacl.c:881 earmelfb_nbsd.c:880
+#: earmnto.c:855 eavr1.c:426 eavr2.c:426 eavr25.c:426 eavr3.c:426 eavr31.c:426
+#: eavr35.c:426 eavr4.c:426 eavr5.c:426 eavr51.c:426 eavr6.c:426
+#: eavrtiny.c:426 eavrxmega1.c:426 eavrxmega2.c:426 eavrxmega3.c:426
+#: eavrxmega4.c:426 eavrxmega5.c:426 eavrxmega6.c:426 eavrxmega7.c:426
+#: ecriself.c:218 ecrislinux.c:301 ecskyelf.c:462 ecskyelf_linux.c:570
+#: ed10velf.c:203 eelf32_sparc.c:326 eelf32_sparc_sol2.c:458
+#: eelf32_sparc_vxworks.c:363 eelf32_spu.c:936 eelf32_tic6x_be.c:437
+#: eelf32_tic6x_elf_be.c:437 eelf32_tic6x_elf_le.c:437 eelf32_tic6x_le.c:437
+#: eelf32_tic6x_linux_be.c:437 eelf32_tic6x_linux_le.c:437
+#: eelf32_x86_64.c:5417 eelf32am33lin.c:300 eelf32b4300.c:541 eelf32bfin.c:318
+#: eelf32bfinfd.c:343 eelf32bmip.c:541 eelf32bmipn32.c:555 eelf32briscv.c:394
+#: eelf32briscv_ilp32.c:394 eelf32briscv_ilp32f.c:394 eelf32bsmip.c:555
+#: eelf32btsmip.c:541 eelf32btsmip_fbsd.c:541 eelf32btsmipn32.c:541
+#: eelf32btsmipn32_fbsd.c:541 eelf32cr16.c:353 eelf32crx.c:240
+#: eelf32ebmip.c:541 eelf32ebmipvxworks.c:576 eelf32elmip.c:541
+#: eelf32elmipvxworks.c:576 eelf32epiphany.c:218 eelf32epiphany_4x4.c:205
+#: eelf32frvfd.c:325 eelf32ip2k.c:218 eelf32l4300.c:541 eelf32lm32.c:218
+#: eelf32lm32fd.c:325 eelf32lmip.c:541 eelf32loongarch.c:376 eelf32lppc.c:589
+#: eelf32lppclinux.c:589 eelf32lppcnto.c:589 eelf32lppcsim.c:589
+#: eelf32lr5900.c:459 eelf32lr5900n32.c:458 eelf32lriscv.c:394
+#: eelf32lriscv_ilp32.c:394 eelf32lriscv_ilp32f.c:394 eelf32lsmip.c:541
+#: eelf32ltsmip.c:541 eelf32ltsmip_fbsd.c:541 eelf32ltsmipn32.c:541
+#: eelf32ltsmipn32_fbsd.c:541 eelf32m32c.c:229 eelf32mb_linux.c:326
+#: eelf32mbel_linux.c:326 eelf32mcore.c:224 eelf32mep.c:203 eelf32metag.c:575
+#: eelf32microblaze.c:203 eelf32microblazeel.c:203 eelf32mipswindiss.c:433
+#: eelf32moxie.c:218 eelf32or1k.c:219 eelf32or1k_linux.c:326 eelf32ppc.c:589
+#: eelf32ppc_fbsd.c:589 eelf32ppchaiku.c:589 eelf32ppclinux.c:589
+#: eelf32ppcnto.c:589 eelf32ppcsim.c:589 eelf32ppcvxworks.c:563
+#: eelf32ppcwindiss.c:589 eelf32rl78.c:218 eelf32rx.c:246 eelf32rx_linux.c:231
+#: eelf32tilegx.c:326 eelf32tilegx_be.c:326 eelf32tilepro.c:326
+#: eelf32vax.c:300 eelf32visium.c:203 eelf32xc16x.c:203 eelf32xc16xl.c:203
+#: eelf32xc16xs.c:203 eelf32xstormy16.c:214 eelf32xtensa.c:2247
+#: eelf32z80.c:230 eelf64_aix.c:300 eelf64_ia64.c:357 eelf64_ia64_fbsd.c:357
+#: eelf64_s390.c:396 eelf64_sparc.c:326 eelf64_sparc_fbsd.c:326
+#: eelf64_sparc_sol2.c:458 eelf64alpha.c:419 eelf64alpha_fbsd.c:419
+#: eelf64alpha_nbsd.c:419 eelf64bmip.c:555 eelf64bpf.c:203 eelf64briscv.c:394
+#: eelf64briscv_lp64.c:394 eelf64briscv_lp64f.c:394 eelf64btsmip.c:541
+#: eelf64btsmip_fbsd.c:541 eelf64hppa.c:270 eelf64loongarch.c:376
+#: eelf64lppc.c:1038 eelf64lppc_fbsd.c:1038 eelf64lriscv.c:394
+#: eelf64lriscv_lp64.c:394 eelf64lriscv_lp64f.c:394 eelf64ltsmip.c:541
+#: eelf64ltsmip_fbsd.c:541 eelf64mmix.c:411 eelf64ppc.c:1038
+#: eelf64ppc_fbsd.c:1038 eelf64rdos.c:351 eelf64tilegx.c:326
+#: eelf64tilegx_be.c:326 eelf_i386.c:5039 eelf_i386_be.c:324
+#: eelf_i386_fbsd.c:360 eelf_i386_haiku.c:360 eelf_i386_ldso.c:335
+#: eelf_i386_sol2.c:492 eelf_i386_vxworks.c:387 eelf_iamcu.c:360
+#: eelf_k1om.c:5351 eelf_k1om_fbsd.c:360 eelf_l1om.c:5351 eelf_l1om_fbsd.c:360
+#: eelf_mipsel_haiku.c:541 eelf_s390.c:326 eelf_x86_64.c:5417
+#: eelf_x86_64_cloudabi.c:360 eelf_x86_64_fbsd.c:360 eelf_x86_64_haiku.c:360
+#: eelf_x86_64_sol2.c:492 eh8300elf.c:218 eh8300elf_linux.c:218
+#: eh8300helf.c:218 eh8300helf_linux.c:218 eh8300hnelf.c:218 eh8300self.c:218
+#: eh8300self_linux.c:218 eh8300snelf.c:218 eh8300sxelf.c:218
+#: eh8300sxelf_linux.c:218 eh8300sxnelf.c:218 ehppa64linux.c:300
+#: ehppaelf.c:486 ehppalinux.c:609 ehppanbsd.c:609 ehppaobsd.c:609
+#: ei386lynx.c:315 ei386moss.c:315 ei386nto.c:315 em32relf.c:218
+#: em32relf_linux.c:325 em32rlelf.c:218 em32rlelf_linux.c:325
+#: em68hc11elf.c:488 em68hc11elfb.c:488 em68hc12elf.c:488 em68hc12elfb.c:488
+#: em68kelf.c:483 em68kelfnbsd.c:483 emn10300.c:300 ends32belf.c:339
+#: ends32belf16m.c:339 ends32belf_linux.c:413 ends32elf.c:339
+#: ends32elf16m.c:339 ends32elf_linux.c:413 enios2elf.c:505 enios2linux.c:587
+#: epruelf.c:224 escore3_elf.c:321 escore7_elf.c:321 eshelf.c:300
+#: eshelf_fd.c:326 eshelf_linux.c:326 eshelf_nbsd.c:300 eshelf_nto.c:300
+#: eshelf_uclinux.c:300 eshelf_vxworks.c:337 eshlelf.c:300 eshlelf_fd.c:326
+#: eshlelf_linux.c:326 eshlelf_nbsd.c:300 eshlelf_nto.c:300
+#: eshlelf_vxworks.c:337 ev850.c:250 ev850_rh850.c:250
msgid "%F%P: invalid maximum page size `%s'\n"
msgstr "%F%P: неправилен горен размер на Ñтраница '%s'\n"
-#: eaarch64cloudabi.c:646 eaarch64cloudabib.c:646 eaarch64elf.c:645
-#: eaarch64elf32.c:645 eaarch64elf32b.c:645 eaarch64elfb.c:645
-#: eaarch64fbsd.c:646 eaarch64fbsdb.c:646 eaarch64linux.c:646
-#: eaarch64linux32.c:646 eaarch64linux32b.c:646 eaarch64linuxb.c:646
-#: earcelf.c:278 earclinux.c:334 earclinux_nps.c:334 earcv2elf.c:211
-#: earcv2elfx.c:211 earmelf.c:888 earmelf_fbsd.c:888 earmelf_fuchsia.c:889
-#: earmelf_linux.c:889 earmelf_linux_eabi.c:889 earmelf_linux_fdpiceabi.c:889
-#: earmelf_nacl.c:889 earmelf_nbsd.c:888 earmelf_phoenix.c:889
-#: earmelf_vxworks.c:924 earmelfb.c:888 earmelfb_fbsd.c:888
-#: earmelfb_fuchsia.c:889 earmelfb_linux.c:889 earmelfb_linux_eabi.c:889
-#: earmelfb_linux_fdpiceabi.c:889 earmelfb_nacl.c:889 earmelfb_nbsd.c:888
-#: earmnto.c:863 earmsymbian.c:888 eavr1.c:434 eavr2.c:434 eavr25.c:434
-#: eavr3.c:434 eavr31.c:434 eavr35.c:434 eavr4.c:434 eavr5.c:434 eavr51.c:434
-#: eavr6.c:434 eavrtiny.c:434 eavrxmega1.c:434 eavrxmega2.c:434
-#: eavrxmega3.c:434 eavrxmega4.c:434 eavrxmega5.c:434 eavrxmega6.c:434
-#: eavrxmega7.c:434 ecriself.c:226 ecrislinux.c:309 ecskyelf.c:470
-#: ecskyelf_linux.c:578 ed10velf.c:211 eelf32_sparc.c:334
-#: eelf32_sparc_sol2.c:465 eelf32_sparc_vxworks.c:371 eelf32_spu.c:944
-#: eelf32_tic6x_be.c:445 eelf32_tic6x_elf_be.c:445 eelf32_tic6x_elf_le.c:445
-#: eelf32_tic6x_le.c:445 eelf32_tic6x_linux_be.c:445
-#: eelf32_tic6x_linux_le.c:445 eelf32_x86_64.c:5271 eelf32am33lin.c:308
-#: eelf32b4300.c:549 eelf32bfin.c:326 eelf32bfinfd.c:351 eelf32bmip.c:549
-#: eelf32bmipn32.c:563 eelf32bsmip.c:563 eelf32btsmip.c:549
-#: eelf32btsmip_fbsd.c:549 eelf32btsmipn32.c:549 eelf32btsmipn32_fbsd.c:549
-#: eelf32cr16.c:361 eelf32crx.c:248 eelf32ebmip.c:549 eelf32ebmipvxworks.c:584
-#: eelf32elmip.c:549 eelf32elmipvxworks.c:584 eelf32epiphany.c:226
-#: eelf32epiphany_4x4.c:213 eelf32frvfd.c:333 eelf32ip2k.c:226
-#: eelf32l4300.c:549 eelf32lm32.c:226 eelf32lm32fd.c:333 eelf32lmip.c:549
-#: eelf32lppc.c:597 eelf32lppclinux.c:597 eelf32lppcnto.c:597
-#: eelf32lppcsim.c:597 eelf32lr5900.c:467 eelf32lr5900n32.c:466
-#: eelf32lriscv.c:388 eelf32lriscv_ilp32.c:388 eelf32lriscv_ilp32f.c:388
-#: eelf32lsmip.c:549 eelf32ltsmip.c:549 eelf32ltsmip_fbsd.c:549
-#: eelf32ltsmipn32.c:549 eelf32ltsmipn32_fbsd.c:549 eelf32m32c.c:237
-#: eelf32mb_linux.c:334 eelf32mbel_linux.c:334 eelf32mcore.c:232
-#: eelf32mep.c:211 eelf32metag.c:583 eelf32microblaze.c:211
-#: eelf32microblazeel.c:211 eelf32mipswindiss.c:441 eelf32moxie.c:226
-#: eelf32or1k.c:227 eelf32or1k_linux.c:334 eelf32ppc.c:597
-#: eelf32ppc_fbsd.c:597 eelf32ppclinux.c:597 eelf32ppcnto.c:597
-#: eelf32ppcsim.c:597 eelf32ppcvxworks.c:571 eelf32ppcwindiss.c:597
-#: eelf32rl78.c:226 eelf32rx.c:254 eelf32rx_linux.c:239 eelf32tilegx.c:334
-#: eelf32tilegx_be.c:334 eelf32tilepro.c:334 eelf32vax.c:308
-#: eelf32visium.c:211 eelf32xc16x.c:211 eelf32xc16xl.c:211 eelf32xc16xs.c:211
-#: eelf32xstormy16.c:222 eelf32xtensa.c:2255 eelf32z80.c:238 eelf64_aix.c:308
-#: eelf64_ia64.c:365 eelf64_ia64_fbsd.c:365 eelf64_s390.c:404
-#: eelf64_sparc.c:334 eelf64_sparc_fbsd.c:334 eelf64_sparc_sol2.c:465
-#: eelf64alpha.c:427 eelf64alpha_fbsd.c:427 eelf64alpha_nbsd.c:427
-#: eelf64bmip.c:563 eelf64bpf.c:211 eelf64btsmip.c:549 eelf64btsmip_fbsd.c:549
-#: eelf64hppa.c:278 eelf64lppc.c:1028 eelf64lriscv.c:388
-#: eelf64lriscv_lp64.c:388 eelf64lriscv_lp64f.c:388 eelf64ltsmip.c:549
-#: eelf64ltsmip_fbsd.c:549 eelf64mmix.c:4085 eelf64ppc.c:1028
-#: eelf64ppc_fbsd.c:1028 eelf64rdos.c:359 eelf64tilegx.c:334
-#: eelf64tilegx_be.c:334 eelf_i386.c:4893 eelf_i386_be.c:332
-#: eelf_i386_fbsd.c:368 eelf_i386_ldso.c:343 eelf_i386_sol2.c:499
-#: eelf_i386_vxworks.c:395 eelf_iamcu.c:4871 eelf_k1om.c:5227
-#: eelf_k1om_fbsd.c:5207 eelf_l1om.c:5227 eelf_l1om_fbsd.c:5207
-#: eelf_s390.c:334 eelf_x86_64.c:5271 eelf_x86_64_cloudabi.c:368
-#: eelf_x86_64_fbsd.c:368 eelf_x86_64_sol2.c:499 eh8300elf.c:226
-#: eh8300elf_linux.c:226 eh8300helf.c:226 eh8300helf_linux.c:226
-#: eh8300hnelf.c:226 eh8300self.c:226 eh8300self_linux.c:226 eh8300snelf.c:226
-#: eh8300sxelf.c:226 eh8300sxelf_linux.c:226 eh8300sxnelf.c:226
-#: ehppa64linux.c:308 ehppaelf.c:494 ehppalinux.c:617 ehppanbsd.c:617
-#: ehppaobsd.c:617 ei386lynx.c:323 ei386moss.c:323 ei386nto.c:323
-#: em32relf.c:226 em32relf_linux.c:333 em32rlelf.c:226 em32rlelf_linux.c:333
-#: em68hc11elf.c:496 em68hc11elfb.c:496 em68hc12elf.c:496 em68hc12elfb.c:496
-#: em68kelf.c:491 em68kelfnbsd.c:491 emn10300.c:308 ends32belf.c:347
-#: ends32belf16m.c:347 ends32belf_linux.c:421 ends32elf.c:347
-#: ends32elf16m.c:347 ends32elf_linux.c:421 enios2elf.c:513 enios2linux.c:595
-#: eppclynx.c:597 epruelf.c:232 escore3_elf.c:329 escore7_elf.c:329
-#: eshelf.c:308 eshelf_fd.c:334 eshelf_linux.c:334 eshelf_nbsd.c:308
-#: eshelf_nto.c:308 eshelf_uclinux.c:308 eshelf_vxworks.c:345 eshlelf.c:308
-#: eshlelf_fd.c:334 eshlelf_linux.c:334 eshlelf_nbsd.c:308 eshlelf_nto.c:308
-#: eshlelf_vxworks.c:345 ev850.c:258 ev850_rh850.c:258
+#: eaarch64cloudabi.c:648 eaarch64cloudabib.c:648 eaarch64elf.c:647
+#: eaarch64elf32.c:647 eaarch64elf32b.c:647 eaarch64elfb.c:647
+#: eaarch64fbsd.c:648 eaarch64fbsdb.c:648 eaarch64haiku.c:648
+#: eaarch64linux.c:648 eaarch64linux32.c:648 eaarch64linux32b.c:648
+#: eaarch64linuxb.c:648 earcelf.c:280 earclinux.c:336 earclinux_nps.c:336
+#: earcv2elf.c:213 earcv2elfx.c:213 earmelf.c:890 earmelf_fbsd.c:890
+#: earmelf_fuchsia.c:891 earmelf_haiku.c:891 earmelf_linux.c:891
+#: earmelf_linux_eabi.c:891 earmelf_linux_fdpiceabi.c:891 earmelf_nacl.c:891
+#: earmelf_nbsd.c:890 earmelf_phoenix.c:891 earmelf_vxworks.c:926
+#: earmelfb.c:890 earmelfb_fbsd.c:890 earmelfb_fuchsia.c:891
+#: earmelfb_linux.c:891 earmelfb_linux_eabi.c:891
+#: earmelfb_linux_fdpiceabi.c:891 earmelfb_nacl.c:891 earmelfb_nbsd.c:890
+#: earmnto.c:865 eavr1.c:436 eavr2.c:436 eavr25.c:436 eavr3.c:436 eavr31.c:436
+#: eavr35.c:436 eavr4.c:436 eavr5.c:436 eavr51.c:436 eavr6.c:436
+#: eavrtiny.c:436 eavrxmega1.c:436 eavrxmega2.c:436 eavrxmega3.c:436
+#: eavrxmega4.c:436 eavrxmega5.c:436 eavrxmega6.c:436 eavrxmega7.c:436
+#: ecriself.c:228 ecrislinux.c:311 ecskyelf.c:472 ecskyelf_linux.c:580
+#: ed10velf.c:213 eelf32_sparc.c:336 eelf32_sparc_sol2.c:468
+#: eelf32_sparc_vxworks.c:373 eelf32_spu.c:946 eelf32_tic6x_be.c:447
+#: eelf32_tic6x_elf_be.c:447 eelf32_tic6x_elf_le.c:447 eelf32_tic6x_le.c:447
+#: eelf32_tic6x_linux_be.c:447 eelf32_tic6x_linux_le.c:447
+#: eelf32_x86_64.c:5427 eelf32am33lin.c:310 eelf32b4300.c:551 eelf32bfin.c:328
+#: eelf32bfinfd.c:353 eelf32bmip.c:551 eelf32bmipn32.c:565 eelf32briscv.c:404
+#: eelf32briscv_ilp32.c:404 eelf32briscv_ilp32f.c:404 eelf32bsmip.c:565
+#: eelf32btsmip.c:551 eelf32btsmip_fbsd.c:551 eelf32btsmipn32.c:551
+#: eelf32btsmipn32_fbsd.c:551 eelf32cr16.c:363 eelf32crx.c:250
+#: eelf32ebmip.c:551 eelf32ebmipvxworks.c:586 eelf32elmip.c:551
+#: eelf32elmipvxworks.c:586 eelf32epiphany.c:228 eelf32epiphany_4x4.c:215
+#: eelf32frvfd.c:335 eelf32ip2k.c:228 eelf32l4300.c:551 eelf32lm32.c:228
+#: eelf32lm32fd.c:335 eelf32lmip.c:551 eelf32loongarch.c:386 eelf32lppc.c:599
+#: eelf32lppclinux.c:599 eelf32lppcnto.c:599 eelf32lppcsim.c:599
+#: eelf32lr5900.c:469 eelf32lr5900n32.c:468 eelf32lriscv.c:404
+#: eelf32lriscv_ilp32.c:404 eelf32lriscv_ilp32f.c:404 eelf32lsmip.c:551
+#: eelf32ltsmip.c:551 eelf32ltsmip_fbsd.c:551 eelf32ltsmipn32.c:551
+#: eelf32ltsmipn32_fbsd.c:551 eelf32m32c.c:239 eelf32mb_linux.c:336
+#: eelf32mbel_linux.c:336 eelf32mcore.c:234 eelf32mep.c:213 eelf32metag.c:585
+#: eelf32microblaze.c:213 eelf32microblazeel.c:213 eelf32mipswindiss.c:443
+#: eelf32moxie.c:228 eelf32or1k.c:229 eelf32or1k_linux.c:336 eelf32ppc.c:599
+#: eelf32ppc_fbsd.c:599 eelf32ppchaiku.c:599 eelf32ppclinux.c:599
+#: eelf32ppcnto.c:599 eelf32ppcsim.c:599 eelf32ppcvxworks.c:573
+#: eelf32ppcwindiss.c:599 eelf32rl78.c:228 eelf32rx.c:256 eelf32rx_linux.c:241
+#: eelf32tilegx.c:336 eelf32tilegx_be.c:336 eelf32tilepro.c:336
+#: eelf32vax.c:310 eelf32visium.c:213 eelf32xc16x.c:213 eelf32xc16xl.c:213
+#: eelf32xc16xs.c:213 eelf32xstormy16.c:224 eelf32xtensa.c:2257
+#: eelf32z80.c:240 eelf64_aix.c:310 eelf64_ia64.c:367 eelf64_ia64_fbsd.c:367
+#: eelf64_s390.c:406 eelf64_sparc.c:336 eelf64_sparc_fbsd.c:336
+#: eelf64_sparc_sol2.c:468 eelf64alpha.c:429 eelf64alpha_fbsd.c:429
+#: eelf64alpha_nbsd.c:429 eelf64bmip.c:565 eelf64bpf.c:213 eelf64briscv.c:404
+#: eelf64briscv_lp64.c:404 eelf64briscv_lp64f.c:404 eelf64btsmip.c:551
+#: eelf64btsmip_fbsd.c:551 eelf64hppa.c:280 eelf64loongarch.c:386
+#: eelf64lppc.c:1048 eelf64lppc_fbsd.c:1048 eelf64lriscv.c:404
+#: eelf64lriscv_lp64.c:404 eelf64lriscv_lp64f.c:404 eelf64ltsmip.c:551
+#: eelf64ltsmip_fbsd.c:551 eelf64mmix.c:421 eelf64ppc.c:1048
+#: eelf64ppc_fbsd.c:1048 eelf64rdos.c:361 eelf64tilegx.c:336
+#: eelf64tilegx_be.c:336 eelf_i386.c:5049 eelf_i386_be.c:334
+#: eelf_i386_fbsd.c:370 eelf_i386_haiku.c:370 eelf_i386_ldso.c:345
+#: eelf_i386_sol2.c:502 eelf_i386_vxworks.c:397 eelf_iamcu.c:370
+#: eelf_k1om.c:5361 eelf_k1om_fbsd.c:370 eelf_l1om.c:5361 eelf_l1om_fbsd.c:370
+#: eelf_mipsel_haiku.c:551 eelf_s390.c:336 eelf_x86_64.c:5427
+#: eelf_x86_64_cloudabi.c:370 eelf_x86_64_fbsd.c:370 eelf_x86_64_haiku.c:370
+#: eelf_x86_64_sol2.c:502 eh8300elf.c:228 eh8300elf_linux.c:228
+#: eh8300helf.c:228 eh8300helf_linux.c:228 eh8300hnelf.c:228 eh8300self.c:228
+#: eh8300self_linux.c:228 eh8300snelf.c:228 eh8300sxelf.c:228
+#: eh8300sxelf_linux.c:228 eh8300sxnelf.c:228 ehppa64linux.c:310
+#: ehppaelf.c:496 ehppalinux.c:619 ehppanbsd.c:619 ehppaobsd.c:619
+#: ei386lynx.c:325 ei386moss.c:325 ei386nto.c:325 em32relf.c:228
+#: em32relf_linux.c:335 em32rlelf.c:228 em32rlelf_linux.c:335
+#: em68hc11elf.c:498 em68hc11elfb.c:498 em68hc12elf.c:498 em68hc12elfb.c:498
+#: em68kelf.c:493 em68kelfnbsd.c:493 emn10300.c:310 ends32belf.c:349
+#: ends32belf16m.c:349 ends32belf_linux.c:423 ends32elf.c:349
+#: ends32elf16m.c:349 ends32elf_linux.c:423 enios2elf.c:515 enios2linux.c:597
+#: epruelf.c:234 escore3_elf.c:331 escore7_elf.c:331 eshelf.c:310
+#: eshelf_fd.c:336 eshelf_linux.c:336 eshelf_nbsd.c:310 eshelf_nto.c:310
+#: eshelf_uclinux.c:310 eshelf_vxworks.c:347 eshlelf.c:310 eshlelf_fd.c:336
+#: eshlelf_linux.c:336 eshlelf_nbsd.c:310 eshlelf_nto.c:310
+#: eshlelf_vxworks.c:347 ev850.c:260 ev850_rh850.c:260
msgid "%F%P: invalid common page size `%s'\n"
msgstr "%F%P: неправилен общ размер на Ñтраница '%s'\n"
-#: eaarch64cloudabi.c:654 eaarch64cloudabib.c:654 eaarch64elf.c:653
-#: eaarch64elf32.c:653 eaarch64elf32b.c:653 eaarch64elfb.c:653
-#: eaarch64fbsd.c:654 eaarch64fbsdb.c:654 eaarch64linux.c:654
-#: eaarch64linux32.c:654 eaarch64linux32b.c:654 eaarch64linuxb.c:654
-#: earcelf.c:286 earclinux.c:342 earclinux_nps.c:342 earcv2elf.c:219
-#: earcv2elfx.c:219 earmelf.c:896 earmelf_fbsd.c:896 earmelf_fuchsia.c:897
-#: earmelf_linux.c:897 earmelf_linux_eabi.c:897 earmelf_linux_fdpiceabi.c:897
-#: earmelf_nacl.c:897 earmelf_nbsd.c:896 earmelf_phoenix.c:897
-#: earmelf_vxworks.c:932 earmelfb.c:896 earmelfb_fbsd.c:896
-#: earmelfb_fuchsia.c:897 earmelfb_linux.c:897 earmelfb_linux_eabi.c:897
-#: earmelfb_linux_fdpiceabi.c:897 earmelfb_nacl.c:897 earmelfb_nbsd.c:896
-#: earmnto.c:871 earmsymbian.c:896 eavr1.c:442 eavr2.c:442 eavr25.c:442
-#: eavr3.c:442 eavr31.c:442 eavr35.c:442 eavr4.c:442 eavr5.c:442 eavr51.c:442
-#: eavr6.c:442 eavrtiny.c:442 eavrxmega1.c:442 eavrxmega2.c:442
-#: eavrxmega3.c:442 eavrxmega4.c:442 eavrxmega5.c:442 eavrxmega6.c:442
-#: eavrxmega7.c:442 ecriself.c:234 ecrislinux.c:317 ecskyelf.c:478
-#: ecskyelf_linux.c:586 ed10velf.c:219 eelf32_sparc.c:342
-#: eelf32_sparc_sol2.c:473 eelf32_sparc_vxworks.c:379 eelf32_spu.c:952
-#: eelf32_tic6x_be.c:453 eelf32_tic6x_elf_be.c:453 eelf32_tic6x_elf_le.c:453
-#: eelf32_tic6x_le.c:453 eelf32_tic6x_linux_be.c:453
-#: eelf32_tic6x_linux_le.c:453 eelf32_x86_64.c:5279 eelf32am33lin.c:316
-#: eelf32b4300.c:557 eelf32bfin.c:334 eelf32bfinfd.c:359 eelf32bmip.c:557
-#: eelf32bmipn32.c:571 eelf32bsmip.c:571 eelf32btsmip.c:557
-#: eelf32btsmip_fbsd.c:557 eelf32btsmipn32.c:557 eelf32btsmipn32_fbsd.c:557
-#: eelf32cr16.c:369 eelf32crx.c:256 eelf32ebmip.c:557 eelf32ebmipvxworks.c:592
-#: eelf32elmip.c:557 eelf32elmipvxworks.c:592 eelf32epiphany.c:234
-#: eelf32epiphany_4x4.c:221 eelf32frvfd.c:341 eelf32ip2k.c:234
-#: eelf32l4300.c:557 eelf32lm32.c:234 eelf32lm32fd.c:341 eelf32lmip.c:557
-#: eelf32lppc.c:605 eelf32lppclinux.c:605 eelf32lppcnto.c:605
-#: eelf32lppcsim.c:605 eelf32lr5900.c:475 eelf32lr5900n32.c:474
-#: eelf32lriscv.c:396 eelf32lriscv_ilp32.c:396 eelf32lriscv_ilp32f.c:396
-#: eelf32lsmip.c:557 eelf32ltsmip.c:557 eelf32ltsmip_fbsd.c:557
-#: eelf32ltsmipn32.c:557 eelf32ltsmipn32_fbsd.c:557 eelf32m32c.c:245
-#: eelf32mb_linux.c:342 eelf32mbel_linux.c:342 eelf32mcore.c:240
-#: eelf32mep.c:219 eelf32metag.c:591 eelf32microblaze.c:219
-#: eelf32microblazeel.c:219 eelf32mipswindiss.c:449 eelf32moxie.c:234
-#: eelf32or1k.c:235 eelf32or1k_linux.c:342 eelf32ppc.c:605
-#: eelf32ppc_fbsd.c:605 eelf32ppclinux.c:605 eelf32ppcnto.c:605
-#: eelf32ppcsim.c:605 eelf32ppcvxworks.c:579 eelf32ppcwindiss.c:605
-#: eelf32rl78.c:234 eelf32rx.c:262 eelf32rx_linux.c:247 eelf32tilegx.c:342
-#: eelf32tilegx_be.c:342 eelf32tilepro.c:342 eelf32vax.c:316
-#: eelf32visium.c:219 eelf32xc16x.c:219 eelf32xc16xl.c:219 eelf32xc16xs.c:219
-#: eelf32xstormy16.c:230 eelf32xtensa.c:2263 eelf32z80.c:246 eelf64_aix.c:316
-#: eelf64_ia64.c:373 eelf64_ia64_fbsd.c:373 eelf64_s390.c:412
-#: eelf64_sparc.c:342 eelf64_sparc_fbsd.c:342 eelf64_sparc_sol2.c:473
-#: eelf64alpha.c:435 eelf64alpha_fbsd.c:435 eelf64alpha_nbsd.c:435
-#: eelf64bmip.c:571 eelf64bpf.c:219 eelf64btsmip.c:557 eelf64btsmip_fbsd.c:557
-#: eelf64hppa.c:286 eelf64lppc.c:1036 eelf64lriscv.c:396
-#: eelf64lriscv_lp64.c:396 eelf64lriscv_lp64f.c:396 eelf64ltsmip.c:557
-#: eelf64ltsmip_fbsd.c:557 eelf64mmix.c:4093 eelf64ppc.c:1036
-#: eelf64ppc_fbsd.c:1036 eelf64rdos.c:367 eelf64tilegx.c:342
-#: eelf64tilegx_be.c:342 eelf_i386.c:4901 eelf_i386_be.c:340
-#: eelf_i386_fbsd.c:376 eelf_i386_ldso.c:351 eelf_i386_sol2.c:507
-#: eelf_i386_vxworks.c:403 eelf_iamcu.c:4879 eelf_k1om.c:5235
-#: eelf_k1om_fbsd.c:5215 eelf_l1om.c:5235 eelf_l1om_fbsd.c:5215
-#: eelf_s390.c:342 eelf_x86_64.c:5279 eelf_x86_64_cloudabi.c:376
-#: eelf_x86_64_fbsd.c:376 eelf_x86_64_sol2.c:507 eh8300elf.c:234
-#: eh8300elf_linux.c:234 eh8300helf.c:234 eh8300helf_linux.c:234
-#: eh8300hnelf.c:234 eh8300self.c:234 eh8300self_linux.c:234 eh8300snelf.c:234
-#: eh8300sxelf.c:234 eh8300sxelf_linux.c:234 eh8300sxnelf.c:234
-#: ehppa64linux.c:316 ehppaelf.c:502 ehppalinux.c:625 ehppanbsd.c:625
-#: ehppaobsd.c:625 ei386lynx.c:331 ei386moss.c:331 ei386nto.c:331
-#: em32relf.c:234 em32relf_linux.c:341 em32rlelf.c:234 em32rlelf_linux.c:341
-#: em68hc11elf.c:504 em68hc11elfb.c:504 em68hc12elf.c:504 em68hc12elfb.c:504
-#: em68kelf.c:499 em68kelfnbsd.c:499 emn10300.c:316 ends32belf.c:355
-#: ends32belf16m.c:355 ends32belf_linux.c:429 ends32elf.c:355
-#: ends32elf16m.c:355 ends32elf_linux.c:429 enios2elf.c:521 enios2linux.c:603
-#: eppclynx.c:605 epruelf.c:240 escore3_elf.c:337 escore7_elf.c:337
-#: eshelf.c:316 eshelf_fd.c:342 eshelf_linux.c:342 eshelf_nbsd.c:316
-#: eshelf_nto.c:316 eshelf_uclinux.c:316 eshelf_vxworks.c:353 eshlelf.c:316
-#: eshlelf_fd.c:342 eshlelf_linux.c:342 eshlelf_nbsd.c:316 eshlelf_nto.c:316
-#: eshlelf_vxworks.c:353 ev850.c:266 ev850_rh850.c:266
+#: eaarch64cloudabi.c:657 eaarch64cloudabib.c:657 eaarch64elf.c:656
+#: eaarch64elf32.c:656 eaarch64elf32b.c:656 eaarch64elfb.c:656
+#: eaarch64fbsd.c:657 eaarch64fbsdb.c:657 eaarch64haiku.c:657
+#: eaarch64linux.c:657 eaarch64linux32.c:657 eaarch64linux32b.c:657
+#: eaarch64linuxb.c:657 earcelf.c:289 earclinux.c:345 earclinux_nps.c:345
+#: earcv2elf.c:222 earcv2elfx.c:222 earmelf.c:899 earmelf_fbsd.c:899
+#: earmelf_fuchsia.c:900 earmelf_haiku.c:900 earmelf_linux.c:900
+#: earmelf_linux_eabi.c:900 earmelf_linux_fdpiceabi.c:900 earmelf_nacl.c:900
+#: earmelf_nbsd.c:899 earmelf_phoenix.c:900 earmelf_vxworks.c:935
+#: earmelfb.c:899 earmelfb_fbsd.c:899 earmelfb_fuchsia.c:900
+#: earmelfb_linux.c:900 earmelfb_linux_eabi.c:900
+#: earmelfb_linux_fdpiceabi.c:900 earmelfb_nacl.c:900 earmelfb_nbsd.c:899
+#: earmnto.c:874 eavr1.c:445 eavr2.c:445 eavr25.c:445 eavr3.c:445 eavr31.c:445
+#: eavr35.c:445 eavr4.c:445 eavr5.c:445 eavr51.c:445 eavr6.c:445
+#: eavrtiny.c:445 eavrxmega1.c:445 eavrxmega2.c:445 eavrxmega3.c:445
+#: eavrxmega4.c:445 eavrxmega5.c:445 eavrxmega6.c:445 eavrxmega7.c:445
+#: ecriself.c:237 ecrislinux.c:320 ecskyelf.c:481 ecskyelf_linux.c:589
+#: ed10velf.c:222 eelf32_sparc.c:345 eelf32_sparc_sol2.c:477
+#: eelf32_sparc_vxworks.c:382 eelf32_spu.c:955 eelf32_tic6x_be.c:456
+#: eelf32_tic6x_elf_be.c:456 eelf32_tic6x_elf_le.c:456 eelf32_tic6x_le.c:456
+#: eelf32_tic6x_linux_be.c:456 eelf32_tic6x_linux_le.c:456
+#: eelf32_x86_64.c:5436 eelf32am33lin.c:319 eelf32b4300.c:560 eelf32bfin.c:337
+#: eelf32bfinfd.c:362 eelf32bmip.c:560 eelf32bmipn32.c:574 eelf32briscv.c:413
+#: eelf32briscv_ilp32.c:413 eelf32briscv_ilp32f.c:413 eelf32bsmip.c:574
+#: eelf32btsmip.c:560 eelf32btsmip_fbsd.c:560 eelf32btsmipn32.c:560
+#: eelf32btsmipn32_fbsd.c:560 eelf32cr16.c:372 eelf32crx.c:259
+#: eelf32ebmip.c:560 eelf32ebmipvxworks.c:595 eelf32elmip.c:560
+#: eelf32elmipvxworks.c:595 eelf32epiphany.c:237 eelf32epiphany_4x4.c:224
+#: eelf32frvfd.c:344 eelf32ip2k.c:237 eelf32l4300.c:560 eelf32lm32.c:237
+#: eelf32lm32fd.c:344 eelf32lmip.c:560 eelf32loongarch.c:395 eelf32lppc.c:608
+#: eelf32lppclinux.c:608 eelf32lppcnto.c:608 eelf32lppcsim.c:608
+#: eelf32lr5900.c:478 eelf32lr5900n32.c:477 eelf32lriscv.c:413
+#: eelf32lriscv_ilp32.c:413 eelf32lriscv_ilp32f.c:413 eelf32lsmip.c:560
+#: eelf32ltsmip.c:560 eelf32ltsmip_fbsd.c:560 eelf32ltsmipn32.c:560
+#: eelf32ltsmipn32_fbsd.c:560 eelf32m32c.c:248 eelf32mb_linux.c:345
+#: eelf32mbel_linux.c:345 eelf32mcore.c:243 eelf32mep.c:222 eelf32metag.c:594
+#: eelf32microblaze.c:222 eelf32microblazeel.c:222 eelf32mipswindiss.c:452
+#: eelf32moxie.c:237 eelf32or1k.c:238 eelf32or1k_linux.c:345 eelf32ppc.c:608
+#: eelf32ppc_fbsd.c:608 eelf32ppchaiku.c:608 eelf32ppclinux.c:608
+#: eelf32ppcnto.c:608 eelf32ppcsim.c:608 eelf32ppcvxworks.c:582
+#: eelf32ppcwindiss.c:608 eelf32rl78.c:237 eelf32rx.c:265 eelf32rx_linux.c:250
+#: eelf32tilegx.c:345 eelf32tilegx_be.c:345 eelf32tilepro.c:345
+#: eelf32vax.c:319 eelf32visium.c:222 eelf32xc16x.c:222 eelf32xc16xl.c:222
+#: eelf32xc16xs.c:222 eelf32xstormy16.c:233 eelf32xtensa.c:2266
+#: eelf32z80.c:249 eelf64_aix.c:319 eelf64_ia64.c:376 eelf64_ia64_fbsd.c:376
+#: eelf64_s390.c:415 eelf64_sparc.c:345 eelf64_sparc_fbsd.c:345
+#: eelf64_sparc_sol2.c:477 eelf64alpha.c:438 eelf64alpha_fbsd.c:438
+#: eelf64alpha_nbsd.c:438 eelf64bmip.c:574 eelf64bpf.c:222 eelf64briscv.c:413
+#: eelf64briscv_lp64.c:413 eelf64briscv_lp64f.c:413 eelf64btsmip.c:560
+#: eelf64btsmip_fbsd.c:560 eelf64hppa.c:289 eelf64loongarch.c:395
+#: eelf64lppc.c:1057 eelf64lppc_fbsd.c:1057 eelf64lriscv.c:413
+#: eelf64lriscv_lp64.c:413 eelf64lriscv_lp64f.c:413 eelf64ltsmip.c:560
+#: eelf64ltsmip_fbsd.c:560 eelf64mmix.c:430 eelf64ppc.c:1057
+#: eelf64ppc_fbsd.c:1057 eelf64rdos.c:370 eelf64tilegx.c:345
+#: eelf64tilegx_be.c:345 eelf_i386.c:5058 eelf_i386_be.c:343
+#: eelf_i386_fbsd.c:379 eelf_i386_haiku.c:379 eelf_i386_ldso.c:354
+#: eelf_i386_sol2.c:511 eelf_i386_vxworks.c:406 eelf_iamcu.c:379
+#: eelf_k1om.c:5370 eelf_k1om_fbsd.c:379 eelf_l1om.c:5370 eelf_l1om_fbsd.c:379
+#: eelf_mipsel_haiku.c:560 eelf_s390.c:345 eelf_x86_64.c:5436
+#: eelf_x86_64_cloudabi.c:379 eelf_x86_64_fbsd.c:379 eelf_x86_64_haiku.c:379
+#: eelf_x86_64_sol2.c:511 eh8300elf.c:237 eh8300elf_linux.c:237
+#: eh8300helf.c:237 eh8300helf_linux.c:237 eh8300hnelf.c:237 eh8300self.c:237
+#: eh8300self_linux.c:237 eh8300snelf.c:237 eh8300sxelf.c:237
+#: eh8300sxelf_linux.c:237 eh8300sxnelf.c:237 ehppa64linux.c:319
+#: ehppaelf.c:505 ehppalinux.c:628 ehppanbsd.c:628 ehppaobsd.c:628
+#: ei386lynx.c:334 ei386moss.c:334 ei386nto.c:334 em32relf.c:237
+#: em32relf_linux.c:344 em32rlelf.c:237 em32rlelf_linux.c:344
+#: em68hc11elf.c:507 em68hc11elfb.c:507 em68hc12elf.c:507 em68hc12elfb.c:507
+#: em68kelf.c:502 em68kelfnbsd.c:502 emn10300.c:319 ends32belf.c:358
+#: ends32belf16m.c:358 ends32belf_linux.c:432 ends32elf.c:358
+#: ends32elf16m.c:358 ends32elf_linux.c:432 enios2elf.c:524 enios2linux.c:606
+#: epruelf.c:243 escore3_elf.c:340 escore7_elf.c:340 eshelf.c:319
+#: eshelf_fd.c:345 eshelf_linux.c:345 eshelf_nbsd.c:319 eshelf_nto.c:319
+#: eshelf_uclinux.c:319 eshelf_vxworks.c:356 eshlelf.c:319 eshlelf_fd.c:345
+#: eshlelf_linux.c:345 eshlelf_nbsd.c:319 eshlelf_nto.c:319
+#: eshlelf_vxworks.c:356 ev850.c:269 ev850_rh850.c:269
msgid "%F%P: invalid stack size `%s'\n"
msgstr "%F%P: неправилен размер на Ñтек '%s'\n"
-#: eaarch64cloudabi.c:685 eaarch64cloudabib.c:685 eaarch64elf.c:684
-#: eaarch64elf32.c:684 eaarch64elf32b.c:684 eaarch64elfb.c:684
-#: eaarch64fbsd.c:685 eaarch64fbsdb.c:685 eaarch64linux.c:685
-#: eaarch64linux32.c:685 eaarch64linux32b.c:685 eaarch64linuxb.c:685
-#: earcelf.c:317 earclinux.c:373 earclinux_nps.c:373 earcv2elf.c:250
-#: earcv2elfx.c:250 earmelf.c:927 earmelf_fbsd.c:927 earmelf_fuchsia.c:928
-#: earmelf_linux.c:928 earmelf_linux_eabi.c:928 earmelf_linux_fdpiceabi.c:928
-#: earmelf_nacl.c:928 earmelf_nbsd.c:927 earmelf_phoenix.c:928
-#: earmelf_vxworks.c:963 earmelfb.c:927 earmelfb_fbsd.c:927
-#: earmelfb_fuchsia.c:928 earmelfb_linux.c:928 earmelfb_linux_eabi.c:928
-#: earmelfb_linux_fdpiceabi.c:928 earmelfb_nacl.c:928 earmelfb_nbsd.c:927
-#: earmnto.c:902 earmsymbian.c:927 eavr1.c:473 eavr2.c:473 eavr25.c:473
-#: eavr3.c:473 eavr31.c:473 eavr35.c:473 eavr4.c:473 eavr5.c:473 eavr51.c:473
-#: eavr6.c:473 eavrtiny.c:473 eavrxmega1.c:473 eavrxmega2.c:473
-#: eavrxmega3.c:473 eavrxmega4.c:473 eavrxmega5.c:473 eavrxmega6.c:473
-#: eavrxmega7.c:473 ecriself.c:265 ecrislinux.c:348 ecskyelf.c:509
-#: ecskyelf_linux.c:617 ed10velf.c:250 eelf32_sparc.c:373
-#: eelf32_sparc_sol2.c:504 eelf32_sparc_vxworks.c:410 eelf32_spu.c:983
-#: eelf32_tic6x_be.c:484 eelf32_tic6x_elf_be.c:484 eelf32_tic6x_elf_le.c:484
-#: eelf32_tic6x_le.c:484 eelf32_tic6x_linux_be.c:484
-#: eelf32_tic6x_linux_le.c:484 eelf32_x86_64.c:5310 eelf32am33lin.c:347
-#: eelf32b4300.c:588 eelf32bfin.c:365 eelf32bfinfd.c:390 eelf32bmip.c:588
-#: eelf32bmipn32.c:602 eelf32bsmip.c:602 eelf32btsmip.c:588
-#: eelf32btsmip_fbsd.c:588 eelf32btsmipn32.c:588 eelf32btsmipn32_fbsd.c:588
-#: eelf32cr16.c:400 eelf32crx.c:287 eelf32ebmip.c:588 eelf32ebmipvxworks.c:623
-#: eelf32elmip.c:588 eelf32elmipvxworks.c:623 eelf32epiphany.c:265
-#: eelf32epiphany_4x4.c:252 eelf32frvfd.c:372 eelf32ip2k.c:265
-#: eelf32l4300.c:588 eelf32lm32.c:265 eelf32lm32fd.c:372 eelf32lmip.c:588
-#: eelf32lppc.c:636 eelf32lppclinux.c:636 eelf32lppcnto.c:636
-#: eelf32lppcsim.c:636 eelf32lr5900.c:506 eelf32lr5900n32.c:505
-#: eelf32lriscv.c:427 eelf32lriscv_ilp32.c:427 eelf32lriscv_ilp32f.c:427
-#: eelf32lsmip.c:588 eelf32ltsmip.c:588 eelf32ltsmip_fbsd.c:588
-#: eelf32ltsmipn32.c:588 eelf32ltsmipn32_fbsd.c:588 eelf32m32c.c:276
-#: eelf32mb_linux.c:373 eelf32mbel_linux.c:373 eelf32mcore.c:271
-#: eelf32mep.c:250 eelf32metag.c:622 eelf32microblaze.c:250
-#: eelf32microblazeel.c:250 eelf32mipswindiss.c:480 eelf32moxie.c:265
-#: eelf32or1k.c:266 eelf32or1k_linux.c:373 eelf32ppc.c:636
-#: eelf32ppc_fbsd.c:636 eelf32ppclinux.c:636 eelf32ppcnto.c:636
-#: eelf32ppcsim.c:636 eelf32ppcvxworks.c:610 eelf32ppcwindiss.c:636
-#: eelf32rl78.c:265 eelf32rx.c:293 eelf32rx_linux.c:278 eelf32tilegx.c:373
-#: eelf32tilegx_be.c:373 eelf32tilepro.c:373 eelf32vax.c:347
-#: eelf32visium.c:250 eelf32xc16x.c:250 eelf32xc16xl.c:250 eelf32xc16xs.c:250
-#: eelf32xstormy16.c:261 eelf32xtensa.c:2294 eelf32z80.c:277 eelf64_aix.c:347
-#: eelf64_ia64.c:404 eelf64_ia64_fbsd.c:404 eelf64_s390.c:443
-#: eelf64_sparc.c:373 eelf64_sparc_fbsd.c:373 eelf64_sparc_sol2.c:504
-#: eelf64alpha.c:466 eelf64alpha_fbsd.c:466 eelf64alpha_nbsd.c:466
-#: eelf64bmip.c:602 eelf64bpf.c:250 eelf64btsmip.c:588 eelf64btsmip_fbsd.c:588
-#: eelf64hppa.c:317 eelf64lppc.c:1067 eelf64lriscv.c:427
-#: eelf64lriscv_lp64.c:427 eelf64lriscv_lp64f.c:427 eelf64ltsmip.c:588
-#: eelf64ltsmip_fbsd.c:588 eelf64mmix.c:4124 eelf64ppc.c:1067
-#: eelf64ppc_fbsd.c:1067 eelf64rdos.c:398 eelf64tilegx.c:373
-#: eelf64tilegx_be.c:373 eelf_i386.c:4932 eelf_i386_be.c:371
-#: eelf_i386_fbsd.c:407 eelf_i386_ldso.c:382 eelf_i386_sol2.c:538
-#: eelf_i386_vxworks.c:434 eelf_iamcu.c:4910 eelf_k1om.c:5266
-#: eelf_k1om_fbsd.c:5246 eelf_l1om.c:5266 eelf_l1om_fbsd.c:5246
-#: eelf_s390.c:373 eelf_x86_64.c:5310 eelf_x86_64_cloudabi.c:407
-#: eelf_x86_64_fbsd.c:407 eelf_x86_64_sol2.c:538 eh8300elf.c:265
-#: eh8300elf_linux.c:265 eh8300helf.c:265 eh8300helf_linux.c:265
-#: eh8300hnelf.c:265 eh8300self.c:265 eh8300self_linux.c:265 eh8300snelf.c:265
-#: eh8300sxelf.c:265 eh8300sxelf_linux.c:265 eh8300sxnelf.c:265
-#: ehppa64linux.c:347 ehppaelf.c:533 ehppalinux.c:656 ehppanbsd.c:656
-#: ehppaobsd.c:656 ei386lynx.c:362 ei386moss.c:362 ei386nto.c:362
-#: em32relf.c:265 em32relf_linux.c:372 em32rlelf.c:265 em32rlelf_linux.c:372
-#: em68hc11elf.c:535 em68hc11elfb.c:535 em68hc12elf.c:535 em68hc12elfb.c:535
-#: em68kelf.c:530 em68kelfnbsd.c:530 emn10300.c:347 ends32belf.c:386
-#: ends32belf16m.c:386 ends32belf_linux.c:460 ends32elf.c:386
-#: ends32elf16m.c:386 ends32elf_linux.c:460 enios2elf.c:552 enios2linux.c:634
-#: eppclynx.c:636 epruelf.c:271 escore3_elf.c:368 escore7_elf.c:368
-#: eshelf.c:347 eshelf_fd.c:373 eshelf_linux.c:373 eshelf_nbsd.c:347
-#: eshelf_nto.c:347 eshelf_uclinux.c:347 eshelf_vxworks.c:384 eshlelf.c:347
-#: eshlelf_fd.c:373 eshlelf_linux.c:373 eshlelf_nbsd.c:347 eshlelf_nto.c:347
-#: eshlelf_vxworks.c:384 ev850.c:297 ev850_rh850.c:297
+#: eaarch64cloudabi.c:696 eaarch64cloudabib.c:696 eaarch64elf.c:695
+#: eaarch64elf32.c:695 eaarch64elf32b.c:695 eaarch64elfb.c:695
+#: eaarch64fbsd.c:696 eaarch64fbsdb.c:696 eaarch64haiku.c:696
+#: eaarch64linux.c:696 eaarch64linux32.c:696 eaarch64linux32b.c:696
+#: eaarch64linuxb.c:696 earcelf.c:328 earclinux.c:384 earclinux_nps.c:384
+#: earcv2elf.c:261 earcv2elfx.c:261 earmelf.c:938 earmelf_fbsd.c:938
+#: earmelf_fuchsia.c:939 earmelf_haiku.c:939 earmelf_linux.c:939
+#: earmelf_linux_eabi.c:939 earmelf_linux_fdpiceabi.c:939 earmelf_nacl.c:939
+#: earmelf_nbsd.c:938 earmelf_phoenix.c:939 earmelf_vxworks.c:974
+#: earmelfb.c:938 earmelfb_fbsd.c:938 earmelfb_fuchsia.c:939
+#: earmelfb_linux.c:939 earmelfb_linux_eabi.c:939
+#: earmelfb_linux_fdpiceabi.c:939 earmelfb_nacl.c:939 earmelfb_nbsd.c:938
+#: earmnto.c:913 eavr1.c:484 eavr2.c:484 eavr25.c:484 eavr3.c:484 eavr31.c:484
+#: eavr35.c:484 eavr4.c:484 eavr5.c:484 eavr51.c:484 eavr6.c:484
+#: eavrtiny.c:484 eavrxmega1.c:484 eavrxmega2.c:484 eavrxmega3.c:484
+#: eavrxmega4.c:484 eavrxmega5.c:484 eavrxmega6.c:484 eavrxmega7.c:484
+#: ecriself.c:276 ecrislinux.c:359 ecskyelf.c:520 ecskyelf_linux.c:628
+#: ed10velf.c:261 eelf32_sparc.c:384 eelf32_sparc_sol2.c:516
+#: eelf32_sparc_vxworks.c:421 eelf32_spu.c:994 eelf32_tic6x_be.c:495
+#: eelf32_tic6x_elf_be.c:495 eelf32_tic6x_elf_le.c:495 eelf32_tic6x_le.c:495
+#: eelf32_tic6x_linux_be.c:495 eelf32_tic6x_linux_le.c:495
+#: eelf32_x86_64.c:5475 eelf32am33lin.c:358 eelf32b4300.c:599 eelf32bfin.c:376
+#: eelf32bfinfd.c:401 eelf32bmip.c:599 eelf32bmipn32.c:613 eelf32briscv.c:452
+#: eelf32briscv_ilp32.c:452 eelf32briscv_ilp32f.c:452 eelf32bsmip.c:613
+#: eelf32btsmip.c:599 eelf32btsmip_fbsd.c:599 eelf32btsmipn32.c:599
+#: eelf32btsmipn32_fbsd.c:599 eelf32cr16.c:411 eelf32crx.c:298
+#: eelf32ebmip.c:599 eelf32ebmipvxworks.c:634 eelf32elmip.c:599
+#: eelf32elmipvxworks.c:634 eelf32epiphany.c:276 eelf32epiphany_4x4.c:263
+#: eelf32frvfd.c:383 eelf32ip2k.c:276 eelf32l4300.c:599 eelf32lm32.c:276
+#: eelf32lm32fd.c:383 eelf32lmip.c:599 eelf32loongarch.c:434 eelf32lppc.c:647
+#: eelf32lppclinux.c:647 eelf32lppcnto.c:647 eelf32lppcsim.c:647
+#: eelf32lr5900.c:517 eelf32lr5900n32.c:516 eelf32lriscv.c:452
+#: eelf32lriscv_ilp32.c:452 eelf32lriscv_ilp32f.c:452 eelf32lsmip.c:599
+#: eelf32ltsmip.c:599 eelf32ltsmip_fbsd.c:599 eelf32ltsmipn32.c:599
+#: eelf32ltsmipn32_fbsd.c:599 eelf32m32c.c:287 eelf32mb_linux.c:384
+#: eelf32mbel_linux.c:384 eelf32mcore.c:282 eelf32mep.c:261 eelf32metag.c:633
+#: eelf32microblaze.c:261 eelf32microblazeel.c:261 eelf32mipswindiss.c:491
+#: eelf32moxie.c:276 eelf32or1k.c:277 eelf32or1k_linux.c:384 eelf32ppc.c:647
+#: eelf32ppc_fbsd.c:647 eelf32ppchaiku.c:647 eelf32ppclinux.c:647
+#: eelf32ppcnto.c:647 eelf32ppcsim.c:647 eelf32ppcvxworks.c:621
+#: eelf32ppcwindiss.c:647 eelf32rl78.c:276 eelf32rx.c:304 eelf32rx_linux.c:289
+#: eelf32tilegx.c:384 eelf32tilegx_be.c:384 eelf32tilepro.c:384
+#: eelf32vax.c:358 eelf32visium.c:261 eelf32xc16x.c:261 eelf32xc16xl.c:261
+#: eelf32xc16xs.c:261 eelf32xstormy16.c:272 eelf32xtensa.c:2305
+#: eelf32z80.c:288 eelf64_aix.c:358 eelf64_ia64.c:415 eelf64_ia64_fbsd.c:415
+#: eelf64_s390.c:454 eelf64_sparc.c:384 eelf64_sparc_fbsd.c:384
+#: eelf64_sparc_sol2.c:516 eelf64alpha.c:477 eelf64alpha_fbsd.c:477
+#: eelf64alpha_nbsd.c:477 eelf64bmip.c:613 eelf64bpf.c:261 eelf64briscv.c:452
+#: eelf64briscv_lp64.c:452 eelf64briscv_lp64f.c:452 eelf64btsmip.c:599
+#: eelf64btsmip_fbsd.c:599 eelf64hppa.c:328 eelf64loongarch.c:434
+#: eelf64lppc.c:1096 eelf64lppc_fbsd.c:1096 eelf64lriscv.c:452
+#: eelf64lriscv_lp64.c:452 eelf64lriscv_lp64f.c:452 eelf64ltsmip.c:599
+#: eelf64ltsmip_fbsd.c:599 eelf64mmix.c:469 eelf64ppc.c:1096
+#: eelf64ppc_fbsd.c:1096 eelf64rdos.c:409 eelf64tilegx.c:384
+#: eelf64tilegx_be.c:384 eelf_i386.c:5097 eelf_i386_be.c:382
+#: eelf_i386_fbsd.c:418 eelf_i386_haiku.c:418 eelf_i386_ldso.c:393
+#: eelf_i386_sol2.c:550 eelf_i386_vxworks.c:445 eelf_iamcu.c:418
+#: eelf_k1om.c:5409 eelf_k1om_fbsd.c:418 eelf_l1om.c:5409 eelf_l1om_fbsd.c:418
+#: eelf_mipsel_haiku.c:599 eelf_s390.c:384 eelf_x86_64.c:5475
+#: eelf_x86_64_cloudabi.c:418 eelf_x86_64_fbsd.c:418 eelf_x86_64_haiku.c:418
+#: eelf_x86_64_sol2.c:550 eh8300elf.c:276 eh8300elf_linux.c:276
+#: eh8300helf.c:276 eh8300helf_linux.c:276 eh8300hnelf.c:276 eh8300self.c:276
+#: eh8300self_linux.c:276 eh8300snelf.c:276 eh8300sxelf.c:276
+#: eh8300sxelf_linux.c:276 eh8300sxnelf.c:276 ehppa64linux.c:358
+#: ehppaelf.c:544 ehppalinux.c:667 ehppanbsd.c:667 ehppaobsd.c:667
+#: ei386lynx.c:373 ei386moss.c:373 ei386nto.c:373 em32relf.c:276
+#: em32relf_linux.c:383 em32rlelf.c:276 em32rlelf_linux.c:383
+#: em68hc11elf.c:546 em68hc11elfb.c:546 em68hc12elf.c:546 em68hc12elfb.c:546
+#: em68kelf.c:541 em68kelfnbsd.c:541 emn10300.c:358 ends32belf.c:397
+#: ends32belf16m.c:397 ends32belf_linux.c:471 ends32elf.c:397
+#: ends32elf16m.c:397 ends32elf_linux.c:471 enios2elf.c:563 enios2linux.c:645
+#: epruelf.c:282 escore3_elf.c:379 escore7_elf.c:379 eshelf.c:358
+#: eshelf_fd.c:384 eshelf_linux.c:384 eshelf_nbsd.c:358 eshelf_nto.c:358
+#: eshelf_uclinux.c:358 eshelf_vxworks.c:395 eshlelf.c:358 eshlelf_fd.c:384
+#: eshlelf_linux.c:384 eshlelf_nbsd.c:358 eshlelf_nto.c:358
+#: eshlelf_vxworks.c:395 ev850.c:308 ev850_rh850.c:308
msgid "%F%P: invalid visibility in `-z %s'; must be default, internal, hidden, or protected"
msgstr ""
-#: eaarch64cloudabi.c:754 eaarch64cloudabib.c:754 eaarch64elf.c:749
-#: eaarch64elf32.c:749 eaarch64elf32b.c:749 eaarch64elfb.c:749
-#: eaarch64fbsd.c:754 eaarch64fbsdb.c:754 eaarch64linux.c:754
-#: eaarch64linux32.c:754 eaarch64linux32b.c:754 eaarch64linuxb.c:754
-#: earcelf.c:373 earclinux.c:433 earclinux_nps.c:433 earcv2elf.c:255
-#: earcv2elfx.c:255 earmelf.c:983 earmelf_fbsd.c:983 earmelf_fuchsia.c:988
-#: earmelf_linux.c:988 earmelf_linux_eabi.c:988 earmelf_linux_fdpiceabi.c:988
-#: earmelf_nacl.c:988 earmelf_nbsd.c:983 earmelf_phoenix.c:988
-#: earmelf_vxworks.c:1019 earmelfb.c:983 earmelfb_fbsd.c:983
-#: earmelfb_fuchsia.c:988 earmelfb_linux.c:988 earmelfb_linux_eabi.c:988
-#: earmelfb_linux_fdpiceabi.c:988 earmelfb_nacl.c:988 earmelfb_nbsd.c:983
-#: earmnto.c:958 earmsymbian.c:983 eavr1.c:478 eavr2.c:478 eavr25.c:478
-#: eavr3.c:478 eavr31.c:478 eavr35.c:478 eavr4.c:478 eavr5.c:478 eavr51.c:478
-#: eavr6.c:478 eavrtiny.c:478 eavrxmega1.c:478 eavrxmega2.c:478
-#: eavrxmega3.c:478 eavrxmega4.c:478 eavrxmega5.c:478 eavrxmega6.c:478
-#: eavrxmega7.c:478 ecriself.c:270 ecrislinux.c:408 ecskyelf.c:514
-#: ecskyelf_linux.c:677 ed10velf.c:255 eelf32_sparc.c:433
-#: eelf32_sparc_sol2.c:564 eelf32_sparc_vxworks.c:470 eelf32_spu.c:988
-#: eelf32_tic6x_be.c:540 eelf32_tic6x_elf_be.c:540 eelf32_tic6x_elf_le.c:540
-#: eelf32_tic6x_le.c:540 eelf32_tic6x_linux_be.c:540
-#: eelf32_tic6x_linux_le.c:540 eelf32_x86_64.c:5439 eelf32am33lin.c:403
-#: eelf32b4300.c:648 eelf32bfin.c:421 eelf32bfinfd.c:446 eelf32bmip.c:648
-#: eelf32bmipn32.c:662 eelf32bsmip.c:662 eelf32btsmip.c:648
-#: eelf32btsmip_fbsd.c:648 eelf32btsmipn32.c:648 eelf32btsmipn32_fbsd.c:648
-#: eelf32cr16.c:405 eelf32crx.c:292 eelf32ebmip.c:648 eelf32ebmipvxworks.c:683
-#: eelf32elmip.c:648 eelf32elmipvxworks.c:683 eelf32epiphany.c:270
-#: eelf32epiphany_4x4.c:257 eelf32frvfd.c:428 eelf32ip2k.c:270
-#: eelf32l4300.c:648 eelf32lm32.c:270 eelf32lm32fd.c:428 eelf32lmip.c:648
-#: eelf32lppc.c:702 eelf32lppclinux.c:702 eelf32lppcnto.c:702
-#: eelf32lppcsim.c:702 eelf32lr5900.c:511 eelf32lr5900n32.c:510
-#: eelf32lriscv.c:487 eelf32lriscv_ilp32.c:487 eelf32lriscv_ilp32f.c:487
-#: eelf32lsmip.c:648 eelf32ltsmip.c:648 eelf32ltsmip_fbsd.c:648
-#: eelf32ltsmipn32.c:648 eelf32ltsmipn32_fbsd.c:648 eelf32m32c.c:281
-#: eelf32mb_linux.c:433 eelf32mbel_linux.c:433 eelf32mcore.c:276
-#: eelf32mep.c:255 eelf32metag.c:682 eelf32microblaze.c:255
-#: eelf32microblazeel.c:255 eelf32mipswindiss.c:485 eelf32moxie.c:270
-#: eelf32or1k.c:271 eelf32or1k_linux.c:433 eelf32ppc.c:702
-#: eelf32ppc_fbsd.c:702 eelf32ppclinux.c:702 eelf32ppcnto.c:702
-#: eelf32ppcsim.c:702 eelf32ppcvxworks.c:676 eelf32ppcwindiss.c:702
-#: eelf32rl78.c:270 eelf32rx.c:298 eelf32rx_linux.c:283 eelf32tilegx.c:433
-#: eelf32tilegx_be.c:433 eelf32tilepro.c:433 eelf32vax.c:403
-#: eelf32visium.c:255 eelf32xc16x.c:255 eelf32xc16xl.c:255 eelf32xc16xs.c:255
-#: eelf32xstormy16.c:266 eelf32xtensa.c:2354 eelf32z80.c:282 eelf64_aix.c:403
-#: eelf64_ia64.c:460 eelf64_ia64_fbsd.c:460 eelf64_s390.c:503
-#: eelf64_sparc.c:433 eelf64_sparc_fbsd.c:433 eelf64_sparc_sol2.c:564
-#: eelf64alpha.c:526 eelf64alpha_fbsd.c:526 eelf64alpha_nbsd.c:526
-#: eelf64bmip.c:662 eelf64bpf.c:255 eelf64btsmip.c:648 eelf64btsmip_fbsd.c:648
-#: eelf64hppa.c:373 eelf64lppc.c:1133 eelf64lriscv.c:487
-#: eelf64lriscv_lp64.c:487 eelf64lriscv_lp64f.c:487 eelf64ltsmip.c:648
-#: eelf64ltsmip_fbsd.c:648 eelf64mmix.c:4180 eelf64ppc.c:1133
-#: eelf64ppc_fbsd.c:1133 eelf64rdos.c:458 eelf64tilegx.c:433
-#: eelf64tilegx_be.c:433 eelf_i386.c:5058 eelf_i386_be.c:470
-#: eelf_i386_fbsd.c:533 eelf_i386_ldso.c:485 eelf_i386_sol2.c:641
-#: eelf_i386_vxworks.c:537 eelf_iamcu.c:5013 eelf_k1om.c:5369
-#: eelf_k1om_fbsd.c:5349 eelf_l1om.c:5369 eelf_l1om_fbsd.c:5349
-#: eelf_s390.c:433 eelf_x86_64.c:5442 eelf_x86_64_cloudabi.c:539
-#: eelf_x86_64_fbsd.c:539 eelf_x86_64_sol2.c:670 eh8300elf.c:270
-#: eh8300elf_linux.c:270 eh8300helf.c:270 eh8300helf_linux.c:270
-#: eh8300hnelf.c:270 eh8300self.c:270 eh8300self_linux.c:270 eh8300snelf.c:270
-#: eh8300sxelf.c:270 eh8300sxelf_linux.c:270 eh8300sxnelf.c:270
-#: ehppa64linux.c:403 ehppaelf.c:538 ehppalinux.c:716 ehppanbsd.c:716
-#: ehppaobsd.c:716 ei386lynx.c:418 ei386moss.c:418 ei386nto.c:418
-#: em32relf.c:270 em32relf_linux.c:428 em32rlelf.c:270 em32rlelf_linux.c:428
-#: em68hc11elf.c:540 em68hc11elfb.c:540 em68hc12elf.c:540 em68hc12elfb.c:540
-#: em68kelf.c:590 em68kelfnbsd.c:590 emn10300.c:403 ends32belf.c:391
-#: ends32belf16m.c:391 ends32belf_linux.c:520 ends32elf.c:391
-#: ends32elf16m.c:391 ends32elf_linux.c:520 enios2elf.c:557 enios2linux.c:694
-#: eppclynx.c:702 epruelf.c:276 escore3_elf.c:424 escore7_elf.c:424
-#: eshelf.c:403 eshelf_fd.c:433 eshelf_linux.c:433 eshelf_nbsd.c:403
-#: eshelf_nto.c:403 eshelf_uclinux.c:403 eshelf_vxworks.c:440 eshlelf.c:403
-#: eshlelf_fd.c:433 eshlelf_linux.c:433 eshlelf_nbsd.c:403 eshlelf_nto.c:403
-#: eshlelf_vxworks.c:440 ev850.c:302 ev850_rh850.c:302
+#: eaarch64cloudabi.c:769 eaarch64cloudabib.c:769 eaarch64elf.c:764
+#: eaarch64elf32.c:764 eaarch64elf32b.c:764 eaarch64elfb.c:764
+#: eaarch64fbsd.c:769 eaarch64fbsdb.c:769 eaarch64haiku.c:769
+#: eaarch64linux.c:769 eaarch64linux32.c:769 eaarch64linux32b.c:769
+#: eaarch64linuxb.c:769 earcelf.c:388 earclinux.c:448 earclinux_nps.c:448
+#: earcv2elf.c:266 earcv2elfx.c:266 earmelf.c:998 earmelf_fbsd.c:998
+#: earmelf_fuchsia.c:1003 earmelf_haiku.c:1003 earmelf_linux.c:1003
+#: earmelf_linux_eabi.c:1003 earmelf_linux_fdpiceabi.c:1003
+#: earmelf_nacl.c:1003 earmelf_nbsd.c:998 earmelf_phoenix.c:1003
+#: earmelf_vxworks.c:1034 earmelfb.c:998 earmelfb_fbsd.c:998
+#: earmelfb_fuchsia.c:1003 earmelfb_linux.c:1003 earmelfb_linux_eabi.c:1003
+#: earmelfb_linux_fdpiceabi.c:1003 earmelfb_nacl.c:1003 earmelfb_nbsd.c:998
+#: earmnto.c:973 eavr1.c:489 eavr2.c:489 eavr25.c:489 eavr3.c:489 eavr31.c:489
+#: eavr35.c:489 eavr4.c:489 eavr5.c:489 eavr51.c:489 eavr6.c:489
+#: eavrtiny.c:489 eavrxmega1.c:489 eavrxmega2.c:489 eavrxmega3.c:489
+#: eavrxmega4.c:489 eavrxmega5.c:489 eavrxmega6.c:489 eavrxmega7.c:489
+#: ecriself.c:281 ecrislinux.c:423 ecskyelf.c:525 ecskyelf_linux.c:692
+#: ed10velf.c:266 eelf32_sparc.c:448 eelf32_sparc_sol2.c:580
+#: eelf32_sparc_vxworks.c:485 eelf32_spu.c:999 eelf32_tic6x_be.c:555
+#: eelf32_tic6x_elf_be.c:555 eelf32_tic6x_elf_le.c:555 eelf32_tic6x_le.c:555
+#: eelf32_tic6x_linux_be.c:555 eelf32_tic6x_linux_le.c:555
+#: eelf32_x86_64.c:5631 eelf32am33lin.c:418 eelf32b4300.c:663 eelf32bfin.c:436
+#: eelf32bfinfd.c:461 eelf32bmip.c:663 eelf32bmipn32.c:677 eelf32briscv.c:516
+#: eelf32briscv_ilp32.c:516 eelf32briscv_ilp32f.c:516 eelf32bsmip.c:677
+#: eelf32btsmip.c:663 eelf32btsmip_fbsd.c:663 eelf32btsmipn32.c:663
+#: eelf32btsmipn32_fbsd.c:663 eelf32cr16.c:416 eelf32crx.c:303
+#: eelf32ebmip.c:663 eelf32ebmipvxworks.c:698 eelf32elmip.c:663
+#: eelf32elmipvxworks.c:698 eelf32epiphany.c:281 eelf32epiphany_4x4.c:268
+#: eelf32frvfd.c:443 eelf32ip2k.c:281 eelf32l4300.c:663 eelf32lm32.c:281
+#: eelf32lm32fd.c:443 eelf32lmip.c:663 eelf32loongarch.c:498 eelf32lppc.c:717
+#: eelf32lppclinux.c:717 eelf32lppcnto.c:717 eelf32lppcsim.c:717
+#: eelf32lr5900.c:522 eelf32lr5900n32.c:521 eelf32lriscv.c:516
+#: eelf32lriscv_ilp32.c:516 eelf32lriscv_ilp32f.c:516 eelf32lsmip.c:663
+#: eelf32ltsmip.c:663 eelf32ltsmip_fbsd.c:663 eelf32ltsmipn32.c:663
+#: eelf32ltsmipn32_fbsd.c:663 eelf32m32c.c:292 eelf32mb_linux.c:448
+#: eelf32mbel_linux.c:448 eelf32mcore.c:287 eelf32mep.c:266 eelf32metag.c:697
+#: eelf32microblaze.c:266 eelf32microblazeel.c:266 eelf32mipswindiss.c:496
+#: eelf32moxie.c:281 eelf32or1k.c:282 eelf32or1k_linux.c:448 eelf32ppc.c:717
+#: eelf32ppc_fbsd.c:717 eelf32ppchaiku.c:717 eelf32ppclinux.c:717
+#: eelf32ppcnto.c:717 eelf32ppcsim.c:717 eelf32ppcvxworks.c:691
+#: eelf32ppcwindiss.c:717 eelf32rl78.c:281 eelf32rx.c:309 eelf32rx_linux.c:294
+#: eelf32tilegx.c:448 eelf32tilegx_be.c:448 eelf32tilepro.c:448
+#: eelf32vax.c:418 eelf32visium.c:266 eelf32xc16x.c:266 eelf32xc16xl.c:266
+#: eelf32xc16xs.c:266 eelf32xstormy16.c:277 eelf32xtensa.c:2369
+#: eelf32z80.c:293 eelf64_aix.c:418 eelf64_ia64.c:475 eelf64_ia64_fbsd.c:475
+#: eelf64_s390.c:518 eelf64_sparc.c:448 eelf64_sparc_fbsd.c:448
+#: eelf64_sparc_sol2.c:580 eelf64alpha.c:541 eelf64alpha_fbsd.c:541
+#: eelf64alpha_nbsd.c:541 eelf64bmip.c:677 eelf64bpf.c:266 eelf64briscv.c:516
+#: eelf64briscv_lp64.c:516 eelf64briscv_lp64f.c:516 eelf64btsmip.c:663
+#: eelf64btsmip_fbsd.c:663 eelf64hppa.c:388 eelf64loongarch.c:498
+#: eelf64lppc.c:1171 eelf64lppc_fbsd.c:1171 eelf64lriscv.c:516
+#: eelf64lriscv_lp64.c:516 eelf64lriscv_lp64f.c:516 eelf64ltsmip.c:663
+#: eelf64ltsmip_fbsd.c:663 eelf64mmix.c:529 eelf64ppc.c:1171
+#: eelf64ppc_fbsd.c:1171 eelf64rdos.c:473 eelf64tilegx.c:448
+#: eelf64tilegx_be.c:448 eelf_i386.c:5250 eelf_i386_be.c:489
+#: eelf_i386_fbsd.c:571 eelf_i386_haiku.c:571 eelf_i386_ldso.c:504
+#: eelf_i386_sol2.c:661 eelf_i386_vxworks.c:556 eelf_iamcu.c:529
+#: eelf_k1om.c:5520 eelf_k1om_fbsd.c:529 eelf_l1om.c:5520 eelf_l1om_fbsd.c:529
+#: eelf_mipsel_haiku.c:663 eelf_s390.c:448 eelf_x86_64.c:5684
+#: eelf_x86_64_cloudabi.c:627 eelf_x86_64_fbsd.c:627 eelf_x86_64_haiku.c:627
+#: eelf_x86_64_sol2.c:759 eh8300elf.c:281 eh8300elf_linux.c:281
+#: eh8300helf.c:281 eh8300helf_linux.c:281 eh8300hnelf.c:281 eh8300self.c:281
+#: eh8300self_linux.c:281 eh8300snelf.c:281 eh8300sxelf.c:281
+#: eh8300sxelf_linux.c:281 eh8300sxnelf.c:281 ehppa64linux.c:418
+#: ehppaelf.c:549 ehppalinux.c:731 ehppanbsd.c:731 ehppaobsd.c:731
+#: ei386lynx.c:433 ei386moss.c:433 ei386nto.c:433 em32relf.c:281
+#: em32relf_linux.c:443 em32rlelf.c:281 em32rlelf_linux.c:443
+#: em68hc11elf.c:551 em68hc11elfb.c:551 em68hc12elf.c:551 em68hc12elfb.c:551
+#: em68kelf.c:605 em68kelfnbsd.c:605 emn10300.c:418 ends32belf.c:402
+#: ends32belf16m.c:402 ends32belf_linux.c:535 ends32elf.c:402
+#: ends32elf16m.c:402 ends32elf_linux.c:535 enios2elf.c:568 enios2linux.c:709
+#: epruelf.c:287 escore3_elf.c:439 escore7_elf.c:439 eshelf.c:418
+#: eshelf_fd.c:448 eshelf_linux.c:448 eshelf_nbsd.c:418 eshelf_nto.c:418
+#: eshelf_uclinux.c:418 eshelf_vxworks.c:455 eshlelf.c:418 eshlelf_fd.c:448
+#: eshlelf_linux.c:448 eshlelf_nbsd.c:418 eshlelf_nto.c:418
+#: eshlelf_vxworks.c:455 ev850.c:313 ev850_rh850.c:313
msgid "%P: warning: -z %s ignored\n"
msgstr "%P: предупреждение -z %s е изоÑтавен\n"
-#: eaarch64cloudabi.c:788 eaarch64cloudabib.c:788 eaarch64elf.c:783
-#: eaarch64elf32.c:783 eaarch64elf32b.c:783 eaarch64elfb.c:783
-#: eaarch64fbsd.c:788 eaarch64fbsdb.c:788 eaarch64linux.c:788
-#: eaarch64linux32.c:788 eaarch64linux32b.c:788 eaarch64linuxb.c:788
+#: eaarch64cloudabi.c:803 eaarch64cloudabib.c:803 eaarch64elf.c:798
+#: eaarch64elf32.c:798 eaarch64elf32b.c:798 eaarch64elfb.c:798
+#: eaarch64fbsd.c:803 eaarch64fbsdb.c:803 eaarch64haiku.c:803
+#: eaarch64linux.c:803 eaarch64linux32.c:803 eaarch64linux32b.c:803
+#: eaarch64linuxb.c:803
msgid "%P: error: unrecognized option for --fix-cortex-a53-843419: %s\n"
msgstr ""
-#: eaarch64cloudabi.c:817 eaarch64cloudabib.c:817 eaarch64elf.c:812
-#: eaarch64elf32.c:812 eaarch64elf32b.c:812 eaarch64elfb.c:812
-#: eaarch64fbsd.c:817 eaarch64fbsdb.c:817 eaarch64linux.c:817
-#: eaarch64linux32.c:817 eaarch64linux32b.c:817 eaarch64linuxb.c:817
-#: earmelf.c:1120 earmelf_fbsd.c:1120 earmelf_fuchsia.c:1125
-#: earmelf_linux.c:1125 earmelf_linux_eabi.c:1125
-#: earmelf_linux_fdpiceabi.c:1125 earmelf_nacl.c:1125 earmelf_nbsd.c:1120
-#: earmelf_phoenix.c:1125 earmelf_vxworks.c:1160 earmelfb.c:1120
-#: earmelfb_fbsd.c:1120 earmelfb_fuchsia.c:1125 earmelfb_linux.c:1125
-#: earmelfb_linux_eabi.c:1125 earmelfb_linux_fdpiceabi.c:1125
-#: earmelfb_nacl.c:1125 earmelfb_nbsd.c:1120 earmnto.c:1095 earmsymbian.c:1120
+#: eaarch64cloudabi.c:832 eaarch64cloudabib.c:832 eaarch64elf.c:827
+#: eaarch64elf32.c:827 eaarch64elf32b.c:827 eaarch64elfb.c:827
+#: eaarch64fbsd.c:832 eaarch64fbsdb.c:832 eaarch64haiku.c:832
+#: eaarch64linux.c:832 eaarch64linux32.c:832 eaarch64linux32b.c:832
+#: eaarch64linuxb.c:832 earmelf.c:1135 earmelf_fbsd.c:1135
+#: earmelf_fuchsia.c:1140 earmelf_haiku.c:1140 earmelf_linux.c:1140
+#: earmelf_linux_eabi.c:1140 earmelf_linux_fdpiceabi.c:1140
+#: earmelf_nacl.c:1140 earmelf_nbsd.c:1135 earmelf_phoenix.c:1140
+#: earmelf_vxworks.c:1175 earmelfb.c:1135 earmelfb_fbsd.c:1135
+#: earmelfb_fuchsia.c:1140 earmelfb_linux.c:1140 earmelfb_linux_eabi.c:1140
+#: earmelfb_linux_fdpiceabi.c:1140 earmelfb_nacl.c:1140 earmelfb_nbsd.c:1135
+#: earmnto.c:1110
#, c-format
msgid ""
" --no-enum-size-warning Don't warn about objects with incompatible\n"
" enum sizes\n"
msgstr ""
-#: eaarch64cloudabi.c:819 eaarch64cloudabib.c:819 eaarch64elf.c:814
-#: eaarch64elf32.c:814 eaarch64elf32b.c:814 eaarch64elfb.c:814
-#: eaarch64fbsd.c:819 eaarch64fbsdb.c:819 eaarch64linux.c:819
-#: eaarch64linux32.c:819 eaarch64linux32b.c:819 eaarch64linuxb.c:819
-#: earmelf.c:1122 earmelf_fbsd.c:1122 earmelf_fuchsia.c:1127
-#: earmelf_linux.c:1127 earmelf_linux_eabi.c:1127
-#: earmelf_linux_fdpiceabi.c:1127 earmelf_nacl.c:1127 earmelf_nbsd.c:1122
-#: earmelf_phoenix.c:1127 earmelf_vxworks.c:1162 earmelfb.c:1122
-#: earmelfb_fbsd.c:1122 earmelfb_fuchsia.c:1127 earmelfb_linux.c:1127
-#: earmelfb_linux_eabi.c:1127 earmelfb_linux_fdpiceabi.c:1127
-#: earmelfb_nacl.c:1127 earmelfb_nbsd.c:1122 earmnto.c:1097 earmsymbian.c:1122
+#: eaarch64cloudabi.c:834 eaarch64cloudabib.c:834 eaarch64elf.c:829
+#: eaarch64elf32.c:829 eaarch64elf32b.c:829 eaarch64elfb.c:829
+#: eaarch64fbsd.c:834 eaarch64fbsdb.c:834 eaarch64haiku.c:834
+#: eaarch64linux.c:834 eaarch64linux32.c:834 eaarch64linux32b.c:834
+#: eaarch64linuxb.c:834 earmelf.c:1137 earmelf_fbsd.c:1137
+#: earmelf_fuchsia.c:1142 earmelf_haiku.c:1142 earmelf_linux.c:1142
+#: earmelf_linux_eabi.c:1142 earmelf_linux_fdpiceabi.c:1142
+#: earmelf_nacl.c:1142 earmelf_nbsd.c:1137 earmelf_phoenix.c:1142
+#: earmelf_vxworks.c:1177 earmelfb.c:1137 earmelfb_fbsd.c:1137
+#: earmelfb_fuchsia.c:1142 earmelfb_linux.c:1142 earmelfb_linux_eabi.c:1142
+#: earmelfb_linux_fdpiceabi.c:1142 earmelfb_nacl.c:1142 earmelfb_nbsd.c:1137
+#: earmnto.c:1112
#, c-format
msgid ""
" --no-wchar-size-warning Don't warn about objects with incompatible\n"
" wchar_t sizes\n"
msgstr ""
-#: eaarch64cloudabi.c:821 eaarch64cloudabib.c:821 eaarch64elf.c:816
-#: eaarch64elf32.c:816 eaarch64elf32b.c:816 eaarch64elfb.c:816
-#: eaarch64fbsd.c:821 eaarch64fbsdb.c:821 eaarch64linux.c:821
-#: eaarch64linux32.c:821 eaarch64linux32b.c:821 eaarch64linuxb.c:821
-#: earmelf.c:1124 earmelf_fbsd.c:1124 earmelf_fuchsia.c:1129
-#: earmelf_linux.c:1129 earmelf_linux_eabi.c:1129
-#: earmelf_linux_fdpiceabi.c:1129 earmelf_nacl.c:1129 earmelf_nbsd.c:1124
-#: earmelf_phoenix.c:1129 earmelf_vxworks.c:1164 earmelfb.c:1124
-#: earmelfb_fbsd.c:1124 earmelfb_fuchsia.c:1129 earmelfb_linux.c:1129
-#: earmelfb_linux_eabi.c:1129 earmelfb_linux_fdpiceabi.c:1129
-#: earmelfb_nacl.c:1129 earmelfb_nbsd.c:1124 earmnto.c:1099 earmsymbian.c:1124
+#: eaarch64cloudabi.c:836 eaarch64cloudabib.c:836 eaarch64elf.c:831
+#: eaarch64elf32.c:831 eaarch64elf32b.c:831 eaarch64elfb.c:831
+#: eaarch64fbsd.c:836 eaarch64fbsdb.c:836 eaarch64haiku.c:836
+#: eaarch64linux.c:836 eaarch64linux32.c:836 eaarch64linux32b.c:836
+#: eaarch64linuxb.c:836 earmelf.c:1139 earmelf_fbsd.c:1139
+#: earmelf_fuchsia.c:1144 earmelf_haiku.c:1144 earmelf_linux.c:1144
+#: earmelf_linux_eabi.c:1144 earmelf_linux_fdpiceabi.c:1144
+#: earmelf_nacl.c:1144 earmelf_nbsd.c:1139 earmelf_phoenix.c:1144
+#: earmelf_vxworks.c:1179 earmelfb.c:1139 earmelfb_fbsd.c:1139
+#: earmelfb_fuchsia.c:1144 earmelfb_linux.c:1144 earmelfb_linux_eabi.c:1144
+#: earmelfb_linux_fdpiceabi.c:1144 earmelfb_nacl.c:1144 earmelfb_nbsd.c:1139
+#: earmnto.c:1114
#, c-format
msgid " --pic-veneer Always generate PIC interworking veneers\n"
msgstr ""
-#: eaarch64cloudabi.c:822 eaarch64cloudabib.c:822 eaarch64elf.c:817
-#: eaarch64elf32.c:817 eaarch64elf32b.c:817 eaarch64elfb.c:817
-#: eaarch64fbsd.c:822 eaarch64fbsdb.c:822 eaarch64linux.c:822
-#: eaarch64linux32.c:822 eaarch64linux32b.c:822 eaarch64linuxb.c:822
-#: earmelf.c:1131 earmelf_fbsd.c:1131 earmelf_fuchsia.c:1136
-#: earmelf_linux.c:1136 earmelf_linux_eabi.c:1136
-#: earmelf_linux_fdpiceabi.c:1136 earmelf_nacl.c:1136 earmelf_nbsd.c:1131
-#: earmelf_phoenix.c:1136 earmelf_vxworks.c:1171 earmelfb.c:1131
-#: earmelfb_fbsd.c:1131 earmelfb_fuchsia.c:1136 earmelfb_linux.c:1136
-#: earmelfb_linux_eabi.c:1136 earmelfb_linux_fdpiceabi.c:1136
-#: earmelfb_nacl.c:1136 earmelfb_nbsd.c:1131 earmnto.c:1106 earmsymbian.c:1131
+#: eaarch64cloudabi.c:837 eaarch64cloudabib.c:837 eaarch64elf.c:832
+#: eaarch64elf32.c:832 eaarch64elf32b.c:832 eaarch64elfb.c:832
+#: eaarch64fbsd.c:837 eaarch64fbsdb.c:837 eaarch64haiku.c:837
+#: eaarch64linux.c:837 eaarch64linux32.c:837 eaarch64linux32b.c:837
+#: eaarch64linuxb.c:837 earmelf.c:1146 earmelf_fbsd.c:1146
+#: earmelf_fuchsia.c:1151 earmelf_haiku.c:1151 earmelf_linux.c:1151
+#: earmelf_linux_eabi.c:1151 earmelf_linux_fdpiceabi.c:1151
+#: earmelf_nacl.c:1151 earmelf_nbsd.c:1146 earmelf_phoenix.c:1151
+#: earmelf_vxworks.c:1186 earmelfb.c:1146 earmelfb_fbsd.c:1146
+#: earmelfb_fuchsia.c:1151 earmelfb_linux.c:1151 earmelfb_linux_eabi.c:1151
+#: earmelfb_linux_fdpiceabi.c:1151 earmelfb_nacl.c:1151 earmelfb_nbsd.c:1146
+#: earmnto.c:1121
#, c-format
msgid ""
" --stub-group-size=N Maximum size of a group of input sections that\n"
@@ -3413,18 +3608,20 @@ msgid ""
" choose suitable defaults.\n"
msgstr ""
-#: eaarch64cloudabi.c:831 eaarch64cloudabib.c:831 eaarch64elf.c:826
-#: eaarch64elf32.c:826 eaarch64elf32b.c:826 eaarch64elfb.c:826
-#: eaarch64fbsd.c:831 eaarch64fbsdb.c:831 eaarch64linux.c:831
-#: eaarch64linux32.c:831 eaarch64linux32b.c:831 eaarch64linuxb.c:831
+#: eaarch64cloudabi.c:846 eaarch64cloudabib.c:846 eaarch64elf.c:841
+#: eaarch64elf32.c:841 eaarch64elf32b.c:841 eaarch64elfb.c:841
+#: eaarch64fbsd.c:846 eaarch64fbsdb.c:846 eaarch64haiku.c:846
+#: eaarch64linux.c:846 eaarch64linux32.c:846 eaarch64linux32b.c:846
+#: eaarch64linuxb.c:846
#, c-format
msgid " --fix-cortex-a53-835769 Fix erratum 835769\n"
msgstr ""
-#: eaarch64cloudabi.c:832 eaarch64cloudabib.c:832 eaarch64elf.c:827
-#: eaarch64elf32.c:827 eaarch64elf32b.c:827 eaarch64elfb.c:827
-#: eaarch64fbsd.c:832 eaarch64fbsdb.c:832 eaarch64linux.c:832
-#: eaarch64linux32.c:832 eaarch64linux32b.c:832 eaarch64linuxb.c:832
+#: eaarch64cloudabi.c:847 eaarch64cloudabib.c:847 eaarch64elf.c:842
+#: eaarch64elf32.c:842 eaarch64elf32b.c:842 eaarch64elfb.c:842
+#: eaarch64fbsd.c:847 eaarch64fbsdb.c:847 eaarch64haiku.c:847
+#: eaarch64linux.c:847 eaarch64linux32.c:847 eaarch64linux32b.c:847
+#: eaarch64linuxb.c:847
#, c-format
msgid ""
" --fix-cortex-a53-843419[=full|adr|adrp] Fix erratum 843419 and optionally specify which workaround to use.\n"
@@ -3439,26 +3636,29 @@ msgid ""
" veneer and this will give you both a performance and size overhead.\n"
msgstr ""
-#: eaarch64cloudabi.c:843 eaarch64cloudabib.c:843 eaarch64elf.c:838
-#: eaarch64elf32.c:838 eaarch64elf32b.c:838 eaarch64elfb.c:838
-#: eaarch64fbsd.c:843 eaarch64fbsdb.c:843 eaarch64linux.c:843
-#: eaarch64linux32.c:843 eaarch64linux32b.c:843 eaarch64linuxb.c:843
+#: eaarch64cloudabi.c:858 eaarch64cloudabib.c:858 eaarch64elf.c:853
+#: eaarch64elf32.c:853 eaarch64elf32b.c:853 eaarch64elfb.c:853
+#: eaarch64fbsd.c:858 eaarch64fbsdb.c:858 eaarch64haiku.c:858
+#: eaarch64linux.c:858 eaarch64linux32.c:858 eaarch64linux32b.c:858
+#: eaarch64linuxb.c:858
#, c-format
msgid " --no-apply-dynamic-relocs Do not apply link-time values for dynamic relocations\n"
msgstr ""
-#: eaarch64cloudabi.c:844 eaarch64cloudabib.c:844 eaarch64elf.c:839
-#: eaarch64elf32.c:839 eaarch64elf32b.c:839 eaarch64elfb.c:839
-#: eaarch64fbsd.c:844 eaarch64fbsdb.c:844 eaarch64linux.c:844
-#: eaarch64linux32.c:844 eaarch64linux32b.c:844 eaarch64linuxb.c:844
+#: eaarch64cloudabi.c:859 eaarch64cloudabib.c:859 eaarch64elf.c:854
+#: eaarch64elf32.c:854 eaarch64elf32b.c:854 eaarch64elfb.c:854
+#: eaarch64fbsd.c:859 eaarch64fbsdb.c:859 eaarch64haiku.c:859
+#: eaarch64linux.c:859 eaarch64linux32.c:859 eaarch64linux32b.c:859
+#: eaarch64linuxb.c:859
#, c-format
msgid " -z force-bti Turn on Branch Target Identification mechanism and generate PLTs with BTI. Generate warnings for missing BTI on inputs\n"
msgstr ""
-#: eaarch64cloudabi.c:845 eaarch64cloudabib.c:845 eaarch64elf.c:840
-#: eaarch64elf32.c:840 eaarch64elf32b.c:840 eaarch64elfb.c:840
-#: eaarch64fbsd.c:845 eaarch64fbsdb.c:845 eaarch64linux.c:845
-#: eaarch64linux32.c:845 eaarch64linux32b.c:845 eaarch64linuxb.c:845
+#: eaarch64cloudabi.c:860 eaarch64cloudabib.c:860 eaarch64elf.c:855
+#: eaarch64elf32.c:855 eaarch64elf32b.c:855 eaarch64elfb.c:855
+#: eaarch64fbsd.c:860 eaarch64fbsdb.c:860 eaarch64haiku.c:860
+#: eaarch64linux.c:860 eaarch64linux32.c:860 eaarch64linux32b.c:860
+#: eaarch64linuxb.c:860
#, c-format
msgid " -z pac-plt Protect PLTs with Pointer Authentication.\n"
msgstr ""
@@ -3511,61 +3711,61 @@ msgstr "%F%P: bfd_link_hash_lookup, при изнеÑени имена, не уÑ
msgid "%F%P: bfd_xcoff_export_symbol failed: %E\n"
msgstr "%F%P: bfd_xcoff_export_symbol не уÑпÑ: %E\n"
-#: eaix5ppc.c:854 eaix5rs6.c:854 eaixppc.c:854 eaixrs6.c:854 eppcmacos.c:854
+#: eaix5ppc.c:853 eaix5rs6.c:853 eaixppc.c:853 eaixrs6.c:853 eppcmacos.c:853
msgid "%F%P: can't find output section %s\n"
msgstr "%F%P: не е намерен изходÑщ раздел %s\n"
-#: eaix5ppc.c:891 eaix5rs6.c:891 eaixppc.c:891 eaixrs6.c:891 eppcmacos.c:891
+#: eaix5ppc.c:890 eaix5rs6.c:890 eaixppc.c:890 eaixrs6.c:890 eppcmacos.c:890
msgid "%F%P: can't find %s in output section\n"
msgstr "%F%P: в изходÑÑ‰Ð¸Ñ Ñ€Ð°Ð·Ð´ÐµÐ» не е намерен %s\n"
-#: eaix5ppc.c:958 eaix5rs6.c:958 eaixppc.c:958 eaixrs6.c:958 eppcmacos.c:958
+#: eaix5ppc.c:957 eaix5rs6.c:957 eaixppc.c:957 eaixrs6.c:957 eppcmacos.c:957
msgid "%P: can't find required output section %s\n"
msgstr ""
-#: eaix5ppc.c:1167 eaix5rs6.c:1167 eaixppc.c:1167 eaixrs6.c:1167
-#: eppcmacos.c:1167
+#: eaix5ppc.c:1204 eaix5rs6.c:1204 eaixppc.c:1204 eaixrs6.c:1204
+#: eppcmacos.c:1204
msgid "%F%P:%s:%d: #! ([member]) is not supported in import files\n"
msgstr ""
-#: eaix5ppc.c:1184 eaix5rs6.c:1184 eaixppc.c:1184 eaixrs6.c:1184
-#: eppcmacos.c:1184
+#: eaix5ppc.c:1221 eaix5rs6.c:1221 eaixppc.c:1221 eaixrs6.c:1221
+#: eppcmacos.c:1221
msgid "%F%P: could not parse import path: %E\n"
msgstr ""
-#: eaix5ppc.c:1194 eaix5ppc.c:1206 eaix5rs6.c:1194 eaix5rs6.c:1206
-#: eaixppc.c:1194 eaixppc.c:1206 eaixrs6.c:1194 eaixrs6.c:1206
-#: eppcmacos.c:1194 eppcmacos.c:1206
+#: eaix5ppc.c:1231 eaix5ppc.c:1243 eaix5rs6.c:1231 eaix5rs6.c:1243
+#: eaixppc.c:1231 eaixppc.c:1243 eaixrs6.c:1231 eaixrs6.c:1243
+#: eppcmacos.c:1231 eppcmacos.c:1243
msgid "%P:%s:%d: warning: syntax error in import file\n"
msgstr ""
-#: eaix5ppc.c:1241 eaix5rs6.c:1241 eaixppc.c:1241 eaixrs6.c:1241
-#: eppcmacos.c:1241
+#: eaix5ppc.c:1278 eaix5rs6.c:1278 eaixppc.c:1278 eaixrs6.c:1278
+#: eppcmacos.c:1278
msgid "%P:%s%d: warning: syntax error in import/export file\n"
msgstr ""
-#: eaix5ppc.c:1259 eaix5rs6.c:1259 eaixppc.c:1259 eaixrs6.c:1259
-#: eppcmacos.c:1259
+#: eaix5ppc.c:1296 eaix5rs6.c:1296 eaixppc.c:1296 eaixrs6.c:1296
+#: eppcmacos.c:1296
msgid "%P:%s:%d: warning: syntax error in import/export file\n"
msgstr ""
-#: eaix5ppc.c:1294 eaix5rs6.c:1294 eaixppc.c:1294 eaixrs6.c:1294
-#: eppcmacos.c:1294
+#: eaix5ppc.c:1331 eaix5rs6.c:1331 eaixppc.c:1331 eaixrs6.c:1331
+#: eppcmacos.c:1331
msgid "%X%P:%s:%d: failed to import symbol %s: %E\n"
msgstr ""
-#: eaix5ppc.c:1304 eaix5rs6.c:1304 eaixppc.c:1304 eaixrs6.c:1304
-#: eppcmacos.c:1304
+#: eaix5ppc.c:1341 eaix5rs6.c:1341 eaixppc.c:1341 eaixrs6.c:1341
+#: eppcmacos.c:1341
msgid "%P:%s:%d: warning: ignoring unterminated last line\n"
msgstr ""
-#: eaix5ppc.c:1339 eaix5rs6.c:1339 eaixppc.c:1339 eaixrs6.c:1339
-#: eppcmacos.c:1339
+#: eaix5ppc.c:1376 eaix5rs6.c:1376 eaixppc.c:1376 eaixrs6.c:1376
+#: eppcmacos.c:1376
msgid "%F%P: only relocations against symbols are permitted\n"
msgstr ""
-#: eaix5ppc.c:1342 eaix5rs6.c:1342 eaixppc.c:1342 eaixrs6.c:1342
-#: eppcmacos.c:1342
+#: eaix5ppc.c:1379 eaix5rs6.c:1379 eaixppc.c:1379 eaixrs6.c:1379
+#: eppcmacos.c:1379
msgid "%F%P: bfd_xcoff_link_count_reloc failed: %E\n"
msgstr "%F%P: bfd_xcoff_link_count_reloc не уÑпÑ: %E\n"
@@ -3574,200 +3774,200 @@ msgstr "%F%P: bfd_xcoff_link_count_reloc не уÑпÑ: %E\n"
msgid " --identification <string> Set the identification of the output\n"
msgstr ""
-#: earm_wince_pe.c:378 earmpe.c:378 ei386pe.c:378 ei386pe_posix.c:378
-#: ei386pep.c:361 emcorepe.c:378 eppcpe.c:378 eshpe.c:378
+#: earm_wince_pe.c:399 earmpe.c:399 ei386pe.c:399 ei386pe_posix.c:399
+#: ei386pep.c:383 emcorepe.c:399 eshpe.c:399
#, c-format
msgid " --base_file <basefile> Generate a base file for relocatable DLLs\n"
msgstr " --base_file <базов_файл> Създаване на базов файл за премеÑтваеми DLLs\n"
-#: earm_wince_pe.c:379 earmpe.c:379 ei386pe.c:379 ei386pe_posix.c:379
-#: ei386pep.c:362 emcorepe.c:379 eppcpe.c:379 eshpe.c:379
+#: earm_wince_pe.c:400 earmpe.c:400 ei386pe.c:400 ei386pe_posix.c:400
+#: ei386pep.c:384 emcorepe.c:400 eshpe.c:400
#, c-format
msgid " --dll Set image base to the default for DLLs\n"
msgstr " --dll УÑтановÑва Ð±Ð°Ð·Ð¾Ð²Ð¸Ñ Ð°Ð´Ñ€ÐµÑ Ð½Ð° Ð¿Ð¾Ð´Ñ€Ð°Ð·Ð±Ð¸Ñ€Ð°Ñ‰Ð¸Ñ Ñе за DLLs\n"
-#: earm_wince_pe.c:380 earmpe.c:380 ei386pe.c:380 ei386pe_posix.c:380
-#: ei386pep.c:363 emcorepe.c:380 eppcpe.c:380 eshpe.c:380
+#: earm_wince_pe.c:401 earmpe.c:401 ei386pe.c:401 ei386pe_posix.c:401
+#: ei386pep.c:385 emcorepe.c:401 eshpe.c:401
#, c-format
msgid " --file-alignment <size> Set file alignment\n"
msgstr " --file-alignment <размер> УÑтановÑва подравнÑване за файла\n"
-#: earm_wince_pe.c:381 earmpe.c:381 ei386pe.c:381 ei386pe_posix.c:381
-#: ei386pep.c:364 emcorepe.c:381 eppcpe.c:381 eshpe.c:381
+#: earm_wince_pe.c:402 earmpe.c:402 ei386pe.c:402 ei386pe_posix.c:402
+#: ei386pep.c:386 emcorepe.c:402 eshpe.c:402
#, c-format
msgid " --heap <size> Set initial size of the heap\n"
msgstr " --heap <размер> УÑтановÑва Ð½Ð°Ñ‡Ð°Ð»Ð½Ð¸Ñ Ñ€Ð°Ð·Ð¼ÐµÑ€ на динамичната памет\n"
-#: earm_wince_pe.c:382 earmpe.c:382 ei386pe.c:382 ei386pe_posix.c:382
-#: ei386pep.c:365 emcorepe.c:382 eppcpe.c:382 eshpe.c:382
+#: earm_wince_pe.c:403 earmpe.c:403 ei386pe.c:403 ei386pe_posix.c:403
+#: ei386pep.c:387 emcorepe.c:403 eshpe.c:403
#, c-format
msgid " --image-base <address> Set start address of the executable\n"
msgstr " --image-base <адреÑ> УÑтановÑва начален Ð°Ð´Ñ€ÐµÑ Ð½Ð° Ð¸Ð·Ð¿ÑŠÐ»Ð½Ð¸Ð¼Ð¸Ñ Ñ„Ð°Ð¹Ð»\n"
-#: earm_wince_pe.c:383 earmpe.c:383 ei386pe.c:383 ei386pe_posix.c:383
-#: ei386pep.c:366 emcorepe.c:383 eppcpe.c:383 eshpe.c:383
+#: earm_wince_pe.c:404 earmpe.c:404 ei386pe.c:404 ei386pe_posix.c:404
+#: ei386pep.c:388 emcorepe.c:404 eshpe.c:404
#, c-format
msgid " --major-image-version <number> Set version number of the executable\n"
msgstr " --major-image-version <чиÑло> УÑтановÑва номер на верÑÐ¸Ñ Ð½Ð° Ð¸Ð·Ð¿ÑŠÐ»Ð½Ð¸Ð¼Ð¸Ñ Ñ„Ð°Ð¹Ð»\n"
-#: earm_wince_pe.c:384 earmpe.c:384 ei386pe.c:384 ei386pe_posix.c:384
-#: ei386pep.c:367 emcorepe.c:384 eppcpe.c:384 eshpe.c:384
+#: earm_wince_pe.c:405 earmpe.c:405 ei386pe.c:405 ei386pe_posix.c:405
+#: ei386pep.c:389 emcorepe.c:405 eshpe.c:405
#, c-format
msgid " --major-os-version <number> Set minimum required OS version\n"
msgstr " --major-os-version <чиÑло> УÑтановÑва необходима минимална верÑÐ¸Ñ Ð½Ð° ОС\n"
-#: earm_wince_pe.c:385 earmpe.c:385 ei386pe.c:385 ei386pe_posix.c:385
-#: ei386pep.c:368 emcorepe.c:385 eppcpe.c:385 eshpe.c:385
+#: earm_wince_pe.c:406 earmpe.c:406 ei386pe.c:406 ei386pe_posix.c:406
+#: ei386pep.c:390 emcorepe.c:406 eshpe.c:406
#, c-format
msgid " --major-subsystem-version <number> Set minimum required OS subsystem version\n"
msgstr " --major-subsystem-version <чиÑло> УÑтановÑва необходима минимална подверÑÐ¸Ñ Ð½Ð° ОС\n"
-#: earm_wince_pe.c:386 earmpe.c:386 ei386pe.c:386 ei386pe_posix.c:386
-#: ei386pep.c:369 emcorepe.c:386 eppcpe.c:386 eshpe.c:386
+#: earm_wince_pe.c:407 earmpe.c:407 ei386pe.c:407 ei386pe_posix.c:407
+#: ei386pep.c:391 emcorepe.c:407 eshpe.c:407
#, c-format
msgid " --minor-image-version <number> Set revision number of the executable\n"
msgstr " --minor-image-version <чиÑло> УÑтановÑва номер на изданието на Ð¸Ð·Ð¿ÑŠÐ»Ð½Ð¸Ð¼Ð¸Ñ Ñ„Ð°Ð¹Ð»\n"
-#: earm_wince_pe.c:387 earmpe.c:387 ei386pe.c:387 ei386pe_posix.c:387
-#: ei386pep.c:370 emcorepe.c:387 eppcpe.c:387 eshpe.c:387
+#: earm_wince_pe.c:408 earmpe.c:408 ei386pe.c:408 ei386pe_posix.c:408
+#: ei386pep.c:392 emcorepe.c:408 eshpe.c:408
#, c-format
msgid " --minor-os-version <number> Set minimum required OS revision\n"
msgstr " --minor-os-version <чиÑло> УÑтановÑва необходимо минимално издание на ОС\n"
-#: earm_wince_pe.c:388 earmpe.c:388 ei386pe.c:388 ei386pe_posix.c:388
-#: ei386pep.c:371 emcorepe.c:388 eppcpe.c:388 eshpe.c:388
+#: earm_wince_pe.c:409 earmpe.c:409 ei386pe.c:409 ei386pe_posix.c:409
+#: ei386pep.c:393 emcorepe.c:409 eshpe.c:409
#, c-format
msgid " --minor-subsystem-version <number> Set minimum required OS subsystem revision\n"
msgstr " --minor-subsystem-version <чиÑло> УÑтановÑва необходимо минимално подиздание на ОС\n"
-#: earm_wince_pe.c:389 earmpe.c:389 ei386pe.c:389 ei386pe_posix.c:389
-#: ei386pep.c:372 emcorepe.c:389 eppcpe.c:389 eshpe.c:389
+#: earm_wince_pe.c:410 earmpe.c:410 ei386pe.c:410 ei386pe_posix.c:410
+#: ei386pep.c:394 emcorepe.c:410 eshpe.c:410
#, c-format
msgid " --section-alignment <size> Set section alignment\n"
msgstr " --section-alignment <размер> УÑтановÑва подравнÑване на раздел\n"
-#: earm_wince_pe.c:390 earmpe.c:390 ei386pe.c:390 ei386pe_posix.c:390
-#: ei386pep.c:373 emcorepe.c:390 eppcpe.c:390 eshpe.c:390
+#: earm_wince_pe.c:411 earmpe.c:411 ei386pe.c:411 ei386pe_posix.c:411
+#: ei386pep.c:395 emcorepe.c:411 eshpe.c:411
#, c-format
msgid " --stack <size> Set size of the initial stack\n"
msgstr " --stack <размер> УÑтановÑва размера на Ð¿ÑŠÑ€Ð²Ð¾Ð½Ð°Ñ‡Ð°Ð»Ð½Ð¸Ñ Ñтек\n"
-#: earm_wince_pe.c:391 earmpe.c:391 ei386pe.c:391 ei386pe_posix.c:391
-#: ei386pep.c:374 emcorepe.c:391 eppcpe.c:391 eshpe.c:391
+#: earm_wince_pe.c:412 earmpe.c:412 ei386pe.c:412 ei386pe_posix.c:412
+#: ei386pep.c:396 emcorepe.c:412 eshpe.c:412
#, c-format
msgid " --subsystem <name>[:<version>] Set required OS subsystem [& version]\n"
msgstr " --subsystem <име>[:<верÑиÑ>] УÑтановÑва необходима подÑиÑтема [и верÑиÑ] на ОС\n"
-#: earm_wince_pe.c:392 earmpe.c:392 ei386pe.c:392 ei386pe_posix.c:392
-#: ei386pep.c:375 emcorepe.c:392 eppcpe.c:392 eshpe.c:392
+#: earm_wince_pe.c:413 earmpe.c:413 ei386pe.c:413 ei386pe_posix.c:413
+#: ei386pep.c:397 emcorepe.c:413 eshpe.c:413
#, c-format
msgid " --support-old-code Support interworking with old code\n"
msgstr " --support-old-code Поддръжка на работоÑпоÑобноÑÑ‚ Ñ Ð¿Ñ€ÐµÐ´Ð¸ÑˆÐµÐ½ код\n"
-#: earm_wince_pe.c:393 earmpe.c:393 ei386pe.c:393 ei386pe_posix.c:393
-#: ei386pep.c:376 emcorepe.c:393 eppcpe.c:393 eshpe.c:393
+#: earm_wince_pe.c:414 earmpe.c:414 ei386pe.c:414 ei386pe_posix.c:414
+#: ei386pep.c:398 emcorepe.c:414 eshpe.c:414
#, c-format
msgid " --[no-]leading-underscore Set explicit symbol underscore prefix mode\n"
msgstr " --[no-]leading-underscore Изрично уÑтановÑва режим Ñ Ð¿Ð¾Ð´Ñ‡ÐµÑ€Ñ‚Ð°Ð²ÐºÐ° като предÑтавка за име\n"
-#: earm_wince_pe.c:394 earmpe.c:394 ei386pe.c:394 ei386pe_posix.c:394
-#: emcorepe.c:394 eppcpe.c:394 eshpe.c:394
+#: earm_wince_pe.c:415 earmpe.c:415 ei386pe.c:415 ei386pe_posix.c:415
+#: emcorepe.c:415 eshpe.c:415
#, c-format
msgid " --thumb-entry=<symbol> Set the entry point to be Thumb <symbol>\n"
msgstr " --thumb-entry=<знак> УÑтановÑване на входÑща точка на отбелÑÐ·Ð°Ð½Ð¸Ñ <знак>\n"
-#: earm_wince_pe.c:395 earmpe.c:395 ei386pe.c:395 ei386pe_posix.c:395
-#: emcorepe.c:395 eppcpe.c:395 eshpe.c:395
+#: earm_wince_pe.c:416 earmpe.c:416 ei386pe.c:416 ei386pe_posix.c:416
+#: emcorepe.c:416 eshpe.c:416
#, c-format
msgid " --[no-]insert-timestamp Use a real timestamp rather than zero (default).\n"
msgstr " --[no-]insert-timestamp Използва иÑтинÑка времева отметка вмеÑто нула (по подразбиране).\n"
-#: earm_wince_pe.c:396 earmpe.c:396 ei386pe.c:396 ei386pe_posix.c:396
-#: ei386pep.c:378 emcorepe.c:396 eppcpe.c:396 eshpe.c:396
+#: earm_wince_pe.c:417 earmpe.c:417 ei386pe.c:417 ei386pe_posix.c:417
+#: ei386pep.c:400 emcorepe.c:417 eshpe.c:417
#, c-format
msgid " This makes binaries non-deterministic\n"
msgstr " Това прави двоичните файлове неÑравними\n"
-#: earm_wince_pe.c:398 earmpe.c:398 ei386pe.c:398 ei386pe_posix.c:398
-#: ei386pep.c:380 emcorepe.c:398 eppcpe.c:398 eshpe.c:398
+#: earm_wince_pe.c:419 earmpe.c:419 ei386pe.c:419 ei386pe_posix.c:419
+#: ei386pep.c:402 emcorepe.c:419 eshpe.c:419
#, c-format
msgid " --add-stdcall-alias Export symbols with and without @nn\n"
msgstr " --add-stdcall-alias ИзнаÑÑне на имена Ñ Ð¸ без @nn\n"
-#: earm_wince_pe.c:399 earmpe.c:399 ei386pe.c:399 ei386pe_posix.c:399
-#: ei386pep.c:381 emcorepe.c:399 eppcpe.c:399 eshpe.c:399
+#: earm_wince_pe.c:420 earmpe.c:420 ei386pe.c:420 ei386pe_posix.c:420
+#: ei386pep.c:403 emcorepe.c:420 eshpe.c:420
#, c-format
msgid " --disable-stdcall-fixup Don't link _sym to _sym@nn\n"
msgstr " --disable-stdcall-fixup Без Ñвързване на _име към _име@nn\n"
-#: earm_wince_pe.c:400 earmpe.c:400 ei386pe.c:400 ei386pe_posix.c:400
-#: ei386pep.c:382 emcorepe.c:400 eppcpe.c:400 eshpe.c:400
+#: earm_wince_pe.c:421 earmpe.c:421 ei386pe.c:421 ei386pe_posix.c:421
+#: ei386pep.c:404 emcorepe.c:421 eshpe.c:421
#, c-format
msgid " --enable-stdcall-fixup Link _sym to _sym@nn without warnings\n"
msgstr " --enable-stdcall-fixup Свързва _име ÑÑŠÑ _име@nn без предупреждениÑ\n"
-#: earm_wince_pe.c:401 earmpe.c:401 ei386pe.c:401 ei386pe_posix.c:401
-#: ei386pep.c:383 emcorepe.c:401 eppcpe.c:401 eshpe.c:401
+#: earm_wince_pe.c:422 earmpe.c:422 ei386pe.c:422 ei386pe_posix.c:422
+#: ei386pep.c:405 emcorepe.c:422 eshpe.c:422
#, c-format
msgid " --exclude-symbols sym,sym,... Exclude symbols from automatic export\n"
msgstr " --exclude-symbols име,име,... Изключва имена от автоматичното изнаÑÑне\n"
-#: earm_wince_pe.c:402 earmpe.c:402 ei386pe.c:402 ei386pe_posix.c:402
-#: ei386pep.c:384 emcorepe.c:402 eppcpe.c:402 eshpe.c:402
+#: earm_wince_pe.c:423 earmpe.c:423 ei386pe.c:423 ei386pe_posix.c:423
+#: ei386pep.c:406 emcorepe.c:423 eshpe.c:423
#, c-format
msgid " --exclude-all-symbols Exclude all symbols from automatic export\n"
msgstr " --exclude-all-symbols Изключва вÑички имена от автоматичното изнаÑÑне\n"
-#: earm_wince_pe.c:403 earmpe.c:403 ei386pe.c:403 ei386pe_posix.c:403
-#: ei386pep.c:385 emcorepe.c:403 eppcpe.c:403 eshpe.c:403
+#: earm_wince_pe.c:424 earmpe.c:424 ei386pe.c:424 ei386pe_posix.c:424
+#: ei386pep.c:407 emcorepe.c:424 eshpe.c:424
#, c-format
msgid " --exclude-libs lib,lib,... Exclude libraries from automatic export\n"
msgstr " --exclude-libs библ.,библ.,... Изключва библиотеки от автоматичното изнаÑÑне\n"
-#: earm_wince_pe.c:404 earmpe.c:404 ei386pe.c:404 ei386pe_posix.c:404
-#: ei386pep.c:386 emcorepe.c:404 eppcpe.c:404 eshpe.c:404
+#: earm_wince_pe.c:425 earmpe.c:425 ei386pe.c:425 ei386pe_posix.c:425
+#: ei386pep.c:408 emcorepe.c:425 eshpe.c:425
#, c-format
msgid " --exclude-modules-for-implib mod,mod,...\n"
msgstr " --exclude-modules-for-implib модул,модул,...\n"
-#: earm_wince_pe.c:405 earmpe.c:405 ei386pe.c:405 ei386pe_posix.c:405
-#: ei386pep.c:387 emcorepe.c:405 eppcpe.c:405 eshpe.c:405
+#: earm_wince_pe.c:426 earmpe.c:426 ei386pe.c:426 ei386pe_posix.c:426
+#: ei386pep.c:409 emcorepe.c:426 eshpe.c:426
#, c-format
msgid " Exclude objects, archive members from auto\n"
msgstr " Изключва обекти, библиотечни обекти от автоматично\n"
-#: earm_wince_pe.c:406 earmpe.c:406 ei386pe.c:406 ei386pe_posix.c:406
-#: emcorepe.c:406 eppcpe.c:406 eshpe.c:406
+#: earm_wince_pe.c:427 earmpe.c:427 ei386pe.c:427 ei386pe_posix.c:427
+#: emcorepe.c:427 eshpe.c:427
#, c-format
msgid " export, place into import library instead.\n"
msgstr " изнаÑÑне, в замÑна поÑтавÑне в библиотека за внаÑÑне.\n"
-#: earm_wince_pe.c:407 earmpe.c:407 ei386pe.c:407 ei386pe_posix.c:407
-#: ei386pep.c:389 emcorepe.c:407 eppcpe.c:407 eshpe.c:407
+#: earm_wince_pe.c:428 earmpe.c:428 ei386pe.c:428 ei386pe_posix.c:428
+#: ei386pep.c:411 emcorepe.c:428 eshpe.c:428
#, c-format
msgid " --export-all-symbols Automatically export all globals to DLL\n"
msgstr " --export-all-symbols Ðвтоматично изнаÑÑне на вÑички общи в DLL\n"
-#: earm_wince_pe.c:408 earmpe.c:408 ei386pe.c:408 ei386pe_posix.c:408
-#: ei386pep.c:390 emcorepe.c:408 eppcpe.c:408 eshpe.c:408
+#: earm_wince_pe.c:429 earmpe.c:429 ei386pe.c:429 ei386pe_posix.c:429
+#: ei386pep.c:412 emcorepe.c:429 eshpe.c:429
#, c-format
msgid " --kill-at Remove @nn from exported symbols\n"
msgstr " --kill-at Премахва @nn от изнеÑените имена\n"
-#: earm_wince_pe.c:409 earmpe.c:409 ei386pe.c:409 ei386pe_posix.c:409
-#: ei386pep.c:391 emcorepe.c:409 eppcpe.c:409 eshpe.c:409
+#: earm_wince_pe.c:430 earmpe.c:430 ei386pe.c:430 ei386pe_posix.c:430
+#: ei386pep.c:413 emcorepe.c:430 eshpe.c:430
#, c-format
msgid " --output-def <file> Generate a .DEF file for the built DLL\n"
msgstr " --output-def <файл> Произвежда DEF-файл за Ñъздадената DLL\n"
-#: earm_wince_pe.c:410 earmpe.c:410 ei386pe.c:410 ei386pe_posix.c:410
-#: ei386pep.c:392 emcorepe.c:410 eppcpe.c:410 eshpe.c:410
+#: earm_wince_pe.c:431 earmpe.c:431 ei386pe.c:431 ei386pe_posix.c:431
+#: ei386pep.c:414 emcorepe.c:431 eshpe.c:431
#, c-format
msgid " --warn-duplicate-exports Warn about duplicate exports\n"
msgstr " --warn-duplicate-exports ÐŸÑ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ñ Ð·Ð° повторени изнаÑÑниÑ\n"
-#: earm_wince_pe.c:411 earmpe.c:411 ei386pe.c:411 ei386pe_posix.c:411
-#: emcorepe.c:411 eppcpe.c:411 eshpe.c:411
+#: earm_wince_pe.c:432 earmpe.c:432 ei386pe.c:432 ei386pe_posix.c:432
+#: emcorepe.c:432 eshpe.c:432
#, c-format
msgid ""
" --compat-implib Create backward compatible import libs;\n"
@@ -3776,8 +3976,8 @@ msgstr ""
" --compat-implib Създава ÑъвмеÑтими Ñ Ð¿Ñ€ÐµÐ´Ð¸ библиотеки за внÑÑÑне;\n"
" Ñъщо така Ñъздава __imp_<ИМЕ>.\n"
-#: earm_wince_pe.c:412 earmpe.c:412 ei386pe.c:412 ei386pe_posix.c:412
-#: emcorepe.c:412 eppcpe.c:412 eshpe.c:412
+#: earm_wince_pe.c:433 earmpe.c:433 ei386pe.c:433 ei386pe_posix.c:433
+#: emcorepe.c:433 eshpe.c:433
#, c-format
msgid ""
" --enable-auto-image-base[=<address>] Automatically choose image base for DLLs\n"
@@ -3787,14 +3987,14 @@ msgstr ""
" --enable-auto-image-base[=<адреÑ>] Ðвтоматично избира база на образа за DLLs,\n"
" по избор започвайки от <адреÑ>, оÑвен ако не е зададен Ñ --image-base\n"
-#: earm_wince_pe.c:413 earmpe.c:413 ei386pe.c:413 ei386pe_posix.c:413
-#: emcorepe.c:413 eppcpe.c:413 eshpe.c:413
+#: earm_wince_pe.c:434 earmpe.c:434 ei386pe.c:434 ei386pe_posix.c:434
+#: emcorepe.c:434 eshpe.c:434
#, c-format
msgid " --disable-auto-image-base Do not auto-choose image base. (default)\n"
msgstr " --disable-auto-image-base Да не Ñе избира автоматично база на образа. (по подразбиране)\n"
-#: earm_wince_pe.c:414 earmpe.c:414 ei386pe.c:414 ei386pe_posix.c:414
-#: ei386pep.c:396 emcorepe.c:414 eppcpe.c:414 eshpe.c:414
+#: earm_wince_pe.c:435 earmpe.c:435 ei386pe.c:435 ei386pe_posix.c:435
+#: ei386pep.c:418 emcorepe.c:435 eshpe.c:435
#, c-format
msgid ""
" --dll-search-prefix=<string> When linking dynamically to a dll without\n"
@@ -3806,8 +4006,8 @@ msgstr ""
" предпочете <низ><базовоиме>.dll пред\n"
" lib<базовоиме>.dll \n"
-#: earm_wince_pe.c:415 earmpe.c:415 ei386pe.c:415 ei386pe_posix.c:415
-#: ei386pep.c:397 emcorepe.c:415 eppcpe.c:415 eshpe.c:415
+#: earm_wince_pe.c:436 earmpe.c:436 ei386pe.c:436 ei386pe_posix.c:436
+#: ei386pep.c:419 emcorepe.c:436 eshpe.c:436
#, c-format
msgid ""
" --enable-auto-import Do sophisticated linking of _sym to\n"
@@ -3816,14 +4016,14 @@ msgstr ""
" --enable-auto-import \"Изтънчено\" Ñвързване на _sym ÑÑŠÑ\n"
" __imp_sym при отпратки за данни\n"
-#: earm_wince_pe.c:416 earmpe.c:416 ei386pe.c:416 ei386pe_posix.c:416
-#: ei386pep.c:398 emcorepe.c:416 eppcpe.c:416 eshpe.c:416
+#: earm_wince_pe.c:437 earmpe.c:437 ei386pe.c:437 ei386pe_posix.c:437
+#: ei386pep.c:420 emcorepe.c:437 eshpe.c:437
#, c-format
msgid " --disable-auto-import Do not auto-import DATA items from DLLs\n"
msgstr " --disable-auto-import Да не Ñе внаÑÑÑ‚ автоматично данни от DLL-ли\n"
-#: earm_wince_pe.c:417 earmpe.c:417 ei386pe.c:417 ei386pe_posix.c:417
-#: emcorepe.c:417 eppcpe.c:417 eshpe.c:417
+#: earm_wince_pe.c:438 earmpe.c:438 ei386pe.c:438 ei386pe_posix.c:438
+#: emcorepe.c:438 eshpe.c:438
#, c-format
msgid ""
" --enable-runtime-pseudo-reloc Work around auto-import limitations by\n"
@@ -3834,8 +4034,8 @@ msgstr ""
" внаÑÑÐ½Ð¸Ñ Ñ Ð´Ð¾Ð±Ð°Ð²Ñне на лъже-премеÑтваниÑ,\n"
" определÑни по време на работа.\n"
-#: earm_wince_pe.c:418 earmpe.c:418 ei386pe.c:418 ei386pe_posix.c:418
-#: emcorepe.c:418 eppcpe.c:418 eshpe.c:418
+#: earm_wince_pe.c:439 earmpe.c:439 ei386pe.c:439 ei386pe_posix.c:439
+#: emcorepe.c:439 eshpe.c:439
#, c-format
msgid ""
" --disable-runtime-pseudo-reloc Do not add runtime pseudo-relocations for\n"
@@ -3844,8 +4044,8 @@ msgstr ""
" --disable-runtime-pseudo-reloc Без лъже-премеÑтваниÑ, по време на работа,\n"
" за автоматично внеÑени данни.\n"
-#: earm_wince_pe.c:419 earmpe.c:419 ei386pe.c:419 ei386pe_posix.c:419
-#: emcorepe.c:419 eppcpe.c:419 eshpe.c:419
+#: earm_wince_pe.c:440 earmpe.c:440 ei386pe.c:440 ei386pe_posix.c:440
+#: emcorepe.c:440 eshpe.c:440
#, c-format
msgid ""
" --enable-extra-pe-debug Enable verbose debug output when building\n"
@@ -3854,8 +4054,8 @@ msgstr ""
" --enable-extra-pe-debug Разрешава извеждане на подробно Ñведение при Ñъздаване\n"
" или Ñвързване на DLL-ли (Ñъотв. автоматично внаÑÑне)\n"
-#: earm_wince_pe.c:421 earmpe.c:421 ei386pe.c:421 ei386pe_posix.c:421
-#: emcorepe.c:421 eppcpe.c:421 eshpe.c:421
+#: earm_wince_pe.c:442 earmpe.c:442 ei386pe.c:442 ei386pe_posix.c:442
+#: emcorepe.c:442 eshpe.c:442
#, c-format
msgid ""
" --large-address-aware Executable supports virtual addresses\n"
@@ -3864,8 +4064,8 @@ msgstr ""
" --large-address-aware Програмата поддържа виртуални адреÑи\n"
" по-големи от 2 гигабайта\n"
-#: earm_wince_pe.c:422 earmpe.c:422 ei386pe.c:422 ei386pe_posix.c:422
-#: emcorepe.c:422 eppcpe.c:422 eshpe.c:422
+#: earm_wince_pe.c:443 earmpe.c:443 ei386pe.c:443 ei386pe_posix.c:443
+#: emcorepe.c:443 eshpe.c:443
#, c-format
msgid ""
" --disable-large-address-aware Executable does not support virtual\n"
@@ -3874,8 +4074,8 @@ msgstr ""
" --disable-large-address-aware Програмата не поддържа виртуални\n"
" адреÑи по-големи от 2 гигабайта\n"
-#: earm_wince_pe.c:423 earmpe.c:423 ei386pe.c:423 ei386pe_posix.c:423
-#: ei386pep.c:402 emcorepe.c:423 eppcpe.c:423 eshpe.c:423
+#: earm_wince_pe.c:444 earmpe.c:444 ei386pe.c:444 ei386pe_posix.c:444
+#: ei386pep.c:424 emcorepe.c:444 eshpe.c:444
#, c-format
msgid ""
" --enable-long-section-names Use long COFF section names even in\n"
@@ -3884,8 +4084,8 @@ msgstr ""
" --enable-long-section-names Използване на дълги имена за COFF\n"
" раздели, дори в изпълними файлове\n"
-#: earm_wince_pe.c:424 earmpe.c:424 ei386pe.c:424 ei386pe_posix.c:424
-#: ei386pep.c:403 emcorepe.c:424 eppcpe.c:424 eshpe.c:424
+#: earm_wince_pe.c:445 earmpe.c:445 ei386pe.c:445 ei386pe_posix.c:445
+#: ei386pep.c:425 emcorepe.c:445 eshpe.c:445
#, c-format
msgid ""
" --disable-long-section-names Never use long COFF section names, even\n"
@@ -3894,409 +4094,414 @@ msgstr ""
" --disable-long-section-names Да не Ñе използват дълги имена на COFF\n"
" раздели, дори в обектни файлове\n"
-#: earm_wince_pe.c:425 earmpe.c:425 ei386pe.c:425 ei386pe_posix.c:425
-#: ei386pep.c:405 emcorepe.c:425 eppcpe.c:425 eshpe.c:425
+#: earm_wince_pe.c:446 earmpe.c:446 ei386pe.c:446 ei386pe_posix.c:446
+#: ei386pep.c:427 emcorepe.c:446 eshpe.c:446
#, c-format
msgid ""
-" --dynamicbase Image base address may be relocated using\n"
+" --[disable-]dynamicbase Image base address may be relocated using\n"
" address space layout randomization (ASLR)\n"
msgstr ""
-" --dynamicbase ОÑновниÑÑ‚ Ð°Ð´Ñ€ÐµÑ Ð½Ð° образа може да бъде премеÑтен\n"
+" --[disable-]dynamicbase ОÑновниÑÑ‚ Ð°Ð´Ñ€ÐµÑ Ð½Ð° образа може да бъде премеÑтен\n"
" като Ñе използва Ñлучаен адреÑ\n"
-#: earm_wince_pe.c:426 earmpe.c:426 ei386pe.c:426 ei386pe_posix.c:426
-#: ei386pep.c:406 emcorepe.c:426 eppcpe.c:426 eshpe.c:426
+#: earm_wince_pe.c:447 earmpe.c:447 ei386pe.c:447 ei386pe_posix.c:447
+#: ei386pep.c:428 emcorepe.c:447 eshpe.c:447
#, c-format
msgid " --enable-reloc-section Create the base relocation table\n"
msgstr ""
-#: earm_wince_pe.c:427 earmpe.c:427 ei386pe.c:427 ei386pe_posix.c:427
-#: ei386pep.c:407 emcorepe.c:427 eppcpe.c:427 eshpe.c:427
+#: earm_wince_pe.c:448 earmpe.c:448 ei386pe.c:448 ei386pe_posix.c:448
+#: ei386pep.c:429 emcorepe.c:448 eshpe.c:448
#, c-format
-msgid " --forceinteg Code integrity checks are enforced\n"
-msgstr " --forceinteg Ðалагане на проверка за цÑлоÑтноÑÑ‚ на кода\n"
+msgid " --disable-reloc-section Do not create the base relocation table\n"
+msgstr ""
-#: earm_wince_pe.c:428 earmpe.c:428 ei386pe.c:428 ei386pe_posix.c:428
-#: ei386pep.c:408 emcorepe.c:428 eppcpe.c:428 eshpe.c:428
+#: earm_wince_pe.c:449 earmpe.c:449 ei386pe.c:449 ei386pe_posix.c:449
+#: ei386pep.c:430 emcorepe.c:449 eshpe.c:449
#, c-format
-msgid " --nxcompat Image is compatible with data execution prevention\n"
-msgstr " --nxcompat Образът е ÑъвмеÑтим Ñ Ð¿Ñ€ÐµÐ´Ð¾Ñ‚Ð²Ñ€Ð°Ñ‚Ñване на изпълнение на данни\n"
+msgid " --[disable-]forceinteg Code integrity checks are enforced\n"
+msgstr " --[disable-]forceinteg Ðалагане на проверка за цÑлоÑтноÑÑ‚ на кода\n"
-#: earm_wince_pe.c:429 earmpe.c:429 ei386pe.c:429 ei386pe_posix.c:429
-#: ei386pep.c:409 emcorepe.c:429 eppcpe.c:429 eshpe.c:429
+#: earm_wince_pe.c:450 earmpe.c:450 ei386pe.c:450 ei386pe_posix.c:450
+#: ei386pep.c:431 emcorepe.c:450 eshpe.c:450
#, c-format
-msgid " --no-isolation Image understands isolation but do not isolate the image\n"
-msgstr " --no-isolation Образът поддържа изолиране, но да не Ñе изолира\n"
+msgid ""
+" --[disable-]nxcompat Image is compatible with data execution\n"
+" prevention\n"
+msgstr " --[disable-]nxcompat Образът е ÑъвмеÑтим Ñ Ð¿Ñ€ÐµÐ´Ð¾Ñ‚Ð²Ñ€Ð°Ñ‚Ñване на изпълнение на данни\n"
-#: earm_wince_pe.c:430 earmpe.c:430 ei386pe.c:430 ei386pe_posix.c:430
-#: emcorepe.c:430 eppcpe.c:430 eshpe.c:430
+#: earm_wince_pe.c:451 earmpe.c:451 ei386pe.c:451 ei386pe_posix.c:451
+#: ei386pep.c:432 emcorepe.c:451 eshpe.c:451
+#, c-format
+msgid ""
+" --[disable-]no-isolation Image understands isolation but do not\n"
+" isolate the image\n"
+msgstr " --[disable-]no-isolation Образът поддържа изолиране, но да не Ñе изолира\n"
+
+#: earm_wince_pe.c:452 earmpe.c:452 ei386pe.c:452 ei386pe_posix.c:452
+#: emcorepe.c:452 eshpe.c:452
#, c-format
msgid ""
-" --no-seh Image does not use SEH. No SE handler may\n"
+" --[disable-]no-seh Image does not use SEH. No SE handler may\n"
" be called in this image\n"
-msgstr ""
-" --no-seh Образът не използва SEH. В този образ не\n"
-" може да Ñе извиква SE подръжка\n"
+msgstr " --[disable-]no-seh Образът не използва SEH. Ð’ този образ не може да Ñе извиква SE подръжка\n"
-#: earm_wince_pe.c:431 earmpe.c:431 ei386pe.c:431 ei386pe_posix.c:431
-#: ei386pep.c:411 emcorepe.c:431 eppcpe.c:431 eshpe.c:431
+#: earm_wince_pe.c:453 earmpe.c:453 ei386pe.c:453 ei386pe_posix.c:453
+#: ei386pep.c:434 emcorepe.c:453 eshpe.c:453
#, c-format
-msgid " --no-bind Do not bind this image\n"
-msgstr " --no-bind Образ без таблица за Ñвързване\n"
+msgid " --[disable-]no-bind Do not bind this image\n"
+msgstr " --[disable-]no-bind Образ без таблица за Ñвързване\n"
-#: earm_wince_pe.c:432 earmpe.c:432 ei386pe.c:432 ei386pe_posix.c:432
-#: ei386pep.c:412 emcorepe.c:432 eppcpe.c:432 eshpe.c:432
+#: earm_wince_pe.c:454 earmpe.c:454 ei386pe.c:454 ei386pe_posix.c:454
+#: ei386pep.c:435 emcorepe.c:454 eshpe.c:454
#, c-format
-msgid " --wdmdriver Driver uses the WDM model\n"
-msgstr " --wdmdriver Използване на WDM модел за driver\n"
+msgid " --[disable-]wdmdriver Driver uses the WDM model\n"
+msgstr " --[disable-]wdmdriver Използване на WDM модел за управление\n"
-#: earm_wince_pe.c:433 earmpe.c:433 ei386pe.c:433 ei386pe_posix.c:433
-#: ei386pep.c:413 emcorepe.c:433 eppcpe.c:433 eshpe.c:433
+#: earm_wince_pe.c:455 earmpe.c:455 ei386pe.c:455 ei386pe_posix.c:455
+#: ei386pep.c:436 emcorepe.c:455 eshpe.c:455
#, c-format
-msgid " --tsaware Image is Terminal Server aware\n"
-msgstr " --tsaware Образът поддържа \"Terminal Server\"\n"
+msgid " --[disable-]tsaware Image is Terminal Server aware\n"
+msgstr " --[disable-]tsaware Образът поддържа \"Terminal Server\"\n"
-#: earm_wince_pe.c:434 earmpe.c:434 ei386pe.c:434 ei386pe_posix.c:434
-#: ei386pep.c:414 emcorepe.c:434 eppcpe.c:434 eshpe.c:434
+#: earm_wince_pe.c:456 earmpe.c:456 ei386pe.c:456 ei386pe_posix.c:456
+#: ei386pep.c:437 emcorepe.c:456 eshpe.c:456
#, c-format
-msgid " --build-id[=STYLE] Generate build ID\n"
-msgstr " --build-id[=ВИД] Пораждане на номер за изграждането\n"
+msgid " --build-id[=STYLE] Generate build ID\n"
+msgstr " --build-id[=ВИД] Пораждане на номер за изграждането\n"
-#: earm_wince_pe.c:562 earmpe.c:562 ei386beos.c:205 ei386pe.c:562
-#: ei386pe_posix.c:562 ei386pep.c:539 emcorepe.c:562 eppcpe.c:562 eshpe.c:562
+#: earm_wince_pe.c:584 earmpe.c:584 ei386beos.c:205 ei386pe.c:584
+#: ei386pe_posix.c:584 ei386pep.c:562 emcorepe.c:584 eshpe.c:584
msgid "%P: warning: bad version number in -subsystem option\n"
msgstr "%P: предупреждение: неправилен номер на верÑÐ¸Ñ Ð·Ð° командата -subsystem\n"
-#: earm_wince_pe.c:587 earmpe.c:587 ei386beos.c:222 ei386pe.c:587
-#: ei386pe_posix.c:587 ei386pep.c:564 emcorepe.c:587 eppcpe.c:587 eshpe.c:587
+#: earm_wince_pe.c:609 earmpe.c:609 ei386beos.c:222 ei386pe.c:609
+#: ei386pe_posix.c:609 ei386pep.c:587 emcorepe.c:609 eshpe.c:609
msgid "%F%P: invalid subsystem type %s\n"
msgstr "%F%P: неправилен тип на подÑиÑтема %s\n"
-#: earm_wince_pe.c:608 earmpe.c:608 ei386beos.c:233 ei386pe.c:608
-#: ei386pe_posix.c:608 ei386pep.c:585 emcorepe.c:608 eppcpe.c:608 eshpe.c:608
+#: earm_wince_pe.c:630 earmpe.c:630 ei386beos.c:233 ei386pe.c:630
+#: ei386pe_posix.c:630 ei386pep.c:608 emcorepe.c:630 eshpe.c:630
msgid "%F%P: invalid hex number for PE parameter '%s'\n"
msgstr "%F%P: неправилно шеÑнайÑетично чиÑло за \"PE\" параметър '%s'\n"
-#: earm_wince_pe.c:625 earmpe.c:625 ei386beos.c:250 ei386pe.c:625
-#: ei386pe_posix.c:625 ei386pep.c:602 emcorepe.c:625 eppcpe.c:625 eshpe.c:625
+#: earm_wince_pe.c:647 earmpe.c:647 ei386beos.c:250 ei386pe.c:647
+#: ei386pe_posix.c:647 ei386pep.c:625 emcorepe.c:647 eshpe.c:647
msgid "%F%P: strange hex info for PE parameter '%s'\n"
msgstr "%F%P: неизвеÑтни шеÑтнайÑетични данни за PE параметър '%s'\n"
-#: earm_wince_pe.c:641 earmpe.c:641 eelf32mcore.c:282 ei386beos.c:266
-#: ei386pe.c:641 ei386pe_posix.c:641 ei386pep.c:619 emcorepe.c:641
-#: eppcpe.c:641 eshpe.c:641
+#: earm_wince_pe.c:663 earmpe.c:663 eelf32mcore.c:293 ei386beos.c:266
+#: ei386pe.c:663 ei386pe_posix.c:663 ei386pep.c:642 emcorepe.c:663 eshpe.c:663
msgid "%F%P: cannot open base file %s\n"
msgstr "%F%P: не може да Ñе отвори оÑновен файл %s\n"
-#: earm_wince_pe.c:937 earmpe.c:937 ei386beos.c:362 ei386pe.c:937
-#: ei386pe_posix.c:937 ei386pep.c:899 emcorepe.c:937 eppcpe.c:937 eshpe.c:937
+#: earm_wince_pe.c:986 earmpe.c:986 ei386beos.c:362 ei386pe.c:986
+#: ei386pe_posix.c:986 ei386pep.c:952 emcorepe.c:986 eshpe.c:986
msgid "%P: warning, file alignment > section alignment\n"
msgstr "%P: предупреждение, подравнÑване за файл > подравнÑване за раздел\n"
-#: earm_wince_pe.c:950 earmpe.c:950 ei386pe.c:950 ei386pe_posix.c:950
-#: emcorepe.c:950 eppcpe.c:950 eshpe.c:950
+#: earm_wince_pe.c:999 earmpe.c:999 ei386pe.c:999 ei386pe_posix.c:999
+#: emcorepe.c:999 eshpe.c:999
msgid "%P: warning: --export-dynamic is not supported for PE targets, did you mean --export-all-symbols?\n"
msgstr "%P: предупреждение: --export-dynamic не Ñе поддържа при PE резултат, може би --export-all-symbols?\n"
-#: earm_wince_pe.c:995 earmpe.c:995 ei386pe.c:995 ei386pe_posix.c:995
-#: emcorepe.c:995 eppcpe.c:995 eshpe.c:995
+#: earm_wince_pe.c:1044 earmpe.c:1044 ei386pe.c:1044 ei386pe_posix.c:1044
+#: emcorepe.c:1044 eshpe.c:1044
msgid "%P: warning: resolving %s by linking to %s\n"
msgstr "%P: предупрежение: разрешаване на %s ÑÑŠÑ Ñвързване към %s\n"
-#: earm_wince_pe.c:1000 earmpe.c:1000 ei386pe.c:1000 ei386pe_posix.c:1000
-#: ei386pep.c:985 ei386pep.c:1012 emcorepe.c:1000 eppcpe.c:1000 eshpe.c:1000
+#: earm_wince_pe.c:1049 earmpe.c:1049 ei386pe.c:1049 ei386pe_posix.c:1049
+#: ei386pep.c:1038 ei386pep.c:1065 emcorepe.c:1049 eshpe.c:1049
msgid "Use --enable-stdcall-fixup to disable these warnings\n"
msgstr "Да Ñе използва --enable-stdcall-fixup, за да Ñе забранÑÑ‚ тези предупреждениÑ\n"
-#: earm_wince_pe.c:1001 earmpe.c:1001 ei386pe.c:1001 ei386pe_posix.c:1001
-#: ei386pep.c:986 ei386pep.c:1013 emcorepe.c:1001 eppcpe.c:1001 eshpe.c:1001
+#: earm_wince_pe.c:1050 earmpe.c:1050 ei386pe.c:1050 ei386pe_posix.c:1050
+#: ei386pep.c:1039 ei386pep.c:1066 emcorepe.c:1050 eshpe.c:1050
msgid "Use --disable-stdcall-fixup to disable these fixups\n"
msgstr "Да Ñе използва --disable-stdcall-fixup, за да Ñе забранÑÑ‚ тези предупреждениÑ\n"
-#: earm_wince_pe.c:1070 earmpe.c:1070 ei386pe.c:1070 ei386pe_posix.c:1070
-#: ei386pep.c:1064 emcorepe.c:1070 eppcpe.c:1070 eshpe.c:1070
+#: earm_wince_pe.c:1119 earmpe.c:1119 ei386pe.c:1119 ei386pe_posix.c:1119
+#: ei386pep.c:1117 emcorepe.c:1119 eshpe.c:1119
msgid "%P: %C: cannot get section contents - auto-import exception\n"
msgstr "%P: %C: не можа да Ñе вземе Ñъдържанието на раздел - изключение при автоматично внаÑÑне\n"
-#: earm_wince_pe.c:1155 earmpe.c:1155 ei386pe.c:1155 ei386pe_posix.c:1155
-#: ei386pep.c:1158 emcorepe.c:1155 eppcpe.c:1155 eshpe.c:1155
+#: earm_wince_pe.c:1204 earmpe.c:1204 ei386pe.c:1204 ei386pe_posix.c:1204
+#: ei386pep.c:1211 emcorepe.c:1204 eshpe.c:1204
msgid "%P: warning: .buildid section discarded, --build-id ignored\n"
msgstr ""
-#: earm_wince_pe.c:1252 earmpe.c:1252 ei386pe.c:1252 ei386pe_posix.c:1252
-#: ei386pep.c:1255 emcorepe.c:1252 eppcpe.c:1252 eshpe.c:1252
+#: earm_wince_pe.c:1301 earmpe.c:1301 ei386pe.c:1301 ei386pe_posix.c:1301
+#: ei386pep.c:1308 emcorepe.c:1301 eshpe.c:1301
msgid "%P: warning: cannot create .buildid section, --build-id ignored\n"
msgstr ""
-#: earm_wince_pe.c:1306 earmpe.c:1306 ei386pe.c:1306 ei386pe_posix.c:1306
-#: ei386pep.c:1310 emcorepe.c:1306 eppcpe.c:1306 eshpe.c:1306
+#: earm_wince_pe.c:1355 earmpe.c:1355 ei386pe.c:1355 ei386pe_posix.c:1355
+#: ei386pep.c:1363 emcorepe.c:1355 eshpe.c:1355
msgid "%F%P: cannot perform PE operations on non PE output file '%pB'\n"
msgstr "%F%P: не може да Ñе извършат \"PE\"-операции на изходен файл '%pB', който не е \"PE\"\n"
-#: earm_wince_pe.c:1449 earmpe.c:1449 ei386pe.c:1449 ei386pe_posix.c:1449
-#: ei386pep.c:1434 emcorepe.c:1449 eppcpe.c:1449 eshpe.c:1449
+#: earm_wince_pe.c:1498 earmpe.c:1498 ei386pe.c:1498 ei386pe_posix.c:1498
+#: ei386pep.c:1487 emcorepe.c:1498 eshpe.c:1498
msgid "%X%P: unable to process relocs: %E\n"
msgstr "%X%P: не могат да Ñе обработÑÑ‚ \"премеÑтваниÑта\": %E\n"
-#: earm_wince_pe.c:1687 earmelf.c:138 earmelf_fbsd.c:138 earmelf_fuchsia.c:139
-#: earmelf_linux.c:139 earmelf_linux_eabi.c:139 earmelf_linux_fdpiceabi.c:139
-#: earmelf_nacl.c:139 earmelf_nbsd.c:138 earmelf_phoenix.c:139
-#: earmelf_vxworks.c:138 earmelfb.c:138 earmelfb_fbsd.c:138
-#: earmelfb_fuchsia.c:139 earmelfb_linux.c:139 earmelfb_linux_eabi.c:139
-#: earmelfb_linux_fdpiceabi.c:139 earmelfb_nacl.c:139 earmelfb_nbsd.c:138
-#: earmnto.c:138 earmpe.c:1687 earmsymbian.c:138 ei386beos.c:610
-#: ei386beos.c:631 ei386pe.c:1687 ei386pe_posix.c:1687 emcorepe.c:1687
-#: eppcpe.c:1687 eshpe.c:1687
-#, c-format
-msgid "%P: errors encountered processing file %s\n"
-msgstr "%P: открити Ñа грешки при обработката на файл %s\n"
-
-#: earm_wince_pe.c:1710 earmpe.c:1710 ei386pe.c:1710 ei386pe_posix.c:1710
-#: emcorepe.c:1710 eppcpe.c:1710 eshpe.c:1710
+#: earm_wince_pe.c:1742 earmpe.c:1742 ei386pe.c:1742 ei386pe_posix.c:1742
+#: emcorepe.c:1742 eshpe.c:1742
#, c-format
msgid "%P: errors encountered processing file %s for interworking\n"
msgstr "%P: открити Ñа грешки при обработката на файл %s за ÑъвмеÑтна работа\n"
-#: earm_wince_pe.c:1877 earmelf.c:520 earmelf_fbsd.c:520 earmelf_fuchsia.c:521
-#: earmelf_linux.c:521 earmelf_linux_eabi.c:521 earmelf_linux_fdpiceabi.c:521
-#: earmelf_nacl.c:521 earmelf_nbsd.c:520 earmelf_phoenix.c:521
-#: earmelf_vxworks.c:520 earmelfb.c:520 earmelfb_fbsd.c:520
-#: earmelfb_fuchsia.c:521 earmelfb_linux.c:521 earmelfb_linux_eabi.c:521
-#: earmelfb_linux_fdpiceabi.c:521 earmelfb_nacl.c:521 earmelfb_nbsd.c:520
-#: earmnto.c:520 earmpe.c:1877 earmsymbian.c:520 ei386pe.c:1877
-#: ei386pe_posix.c:1877 emcorepe.c:1877 eppcpe.c:1877 eshpe.c:1877
+#: earm_wince_pe.c:1909 earmelf.c:520 earmelf_fbsd.c:520 earmelf_fuchsia.c:521
+#: earmelf_haiku.c:521 earmelf_linux.c:521 earmelf_linux_eabi.c:521
+#: earmelf_linux_fdpiceabi.c:521 earmelf_nacl.c:521 earmelf_nbsd.c:520
+#: earmelf_phoenix.c:521 earmelf_vxworks.c:520 earmelfb.c:520
+#: earmelfb_fbsd.c:520 earmelfb_fuchsia.c:521 earmelfb_linux.c:521
+#: earmelfb_linux_eabi.c:521 earmelfb_linux_fdpiceabi.c:521
+#: earmelfb_nacl.c:521 earmelfb_nbsd.c:520 earmnto.c:520 earmpe.c:1909
+#: ei386pe.c:1909 ei386pe_posix.c:1909 emcorepe.c:1909 eshpe.c:1909
msgid "%P: warning: '--thumb-entry %s' is overriding '-e %s'\n"
msgstr "%P: предупреждение: '--thumb-entry %s' прегазва '-e %s'\n"
-#: earm_wince_pe.c:1882 earmelf.c:525 earmelf_fbsd.c:525 earmelf_fuchsia.c:526
-#: earmelf_linux.c:526 earmelf_linux_eabi.c:526 earmelf_linux_fdpiceabi.c:526
-#: earmelf_nacl.c:526 earmelf_nbsd.c:525 earmelf_phoenix.c:526
-#: earmelf_vxworks.c:525 earmelfb.c:525 earmelfb_fbsd.c:525
-#: earmelfb_fuchsia.c:526 earmelfb_linux.c:526 earmelfb_linux_eabi.c:526
-#: earmelfb_linux_fdpiceabi.c:526 earmelfb_nacl.c:526 earmelfb_nbsd.c:525
-#: earmnto.c:525 earmpe.c:1882 earmsymbian.c:525 ei386pe.c:1882
-#: ei386pe_posix.c:1882 emcorepe.c:1882 eppcpe.c:1882 eshpe.c:1882
+#: earm_wince_pe.c:1914 earmelf.c:525 earmelf_fbsd.c:525 earmelf_fuchsia.c:526
+#: earmelf_haiku.c:526 earmelf_linux.c:526 earmelf_linux_eabi.c:526
+#: earmelf_linux_fdpiceabi.c:526 earmelf_nacl.c:526 earmelf_nbsd.c:525
+#: earmelf_phoenix.c:526 earmelf_vxworks.c:525 earmelfb.c:525
+#: earmelfb_fbsd.c:525 earmelfb_fuchsia.c:526 earmelfb_linux.c:526
+#: earmelfb_linux_eabi.c:526 earmelfb_linux_fdpiceabi.c:526
+#: earmelfb_nacl.c:526 earmelfb_nbsd.c:525 earmnto.c:525 earmpe.c:1914
+#: ei386pe.c:1914 ei386pe_posix.c:1914 emcorepe.c:1914 eshpe.c:1914
msgid "%P: warning: cannot find thumb start symbol %s\n"
msgstr "%P: предупреждение: не е намерен, като начален, отбелÑзаниÑÑ‚ знак %s\n"
-#: earmelf.c:551 earmelf_fbsd.c:551 earmelf_fuchsia.c:552 earmelf_linux.c:552
-#: earmelf_linux_eabi.c:552 earmelf_linux_fdpiceabi.c:552 earmelf_nacl.c:552
-#: earmelf_nbsd.c:551 earmelf_phoenix.c:552 earmelf_vxworks.c:551
-#: earmelfb.c:551 earmelfb_fbsd.c:551 earmelfb_fuchsia.c:552
-#: earmelfb_linux.c:552 earmelfb_linux_eabi.c:552
+#: earmelf.c:138 earmelf_fbsd.c:138 earmelf_fuchsia.c:139 earmelf_haiku.c:139
+#: earmelf_linux.c:139 earmelf_linux_eabi.c:139 earmelf_linux_fdpiceabi.c:139
+#: earmelf_nacl.c:139 earmelf_nbsd.c:138 earmelf_phoenix.c:139
+#: earmelf_vxworks.c:138 earmelfb.c:138 earmelfb_fbsd.c:138
+#: earmelfb_fuchsia.c:139 earmelfb_linux.c:139 earmelfb_linux_eabi.c:139
+#: earmelfb_linux_fdpiceabi.c:139 earmelfb_nacl.c:139 earmelfb_nbsd.c:138
+#: earmnto.c:138 ei386beos.c:615
+#, c-format
+msgid "%P: errors encountered processing file %s\n"
+msgstr "%P: открити Ñа грешки при обработката на файл %s\n"
+
+#: earmelf.c:551 earmelf_fbsd.c:551 earmelf_fuchsia.c:552 earmelf_haiku.c:552
+#: earmelf_linux.c:552 earmelf_linux_eabi.c:552 earmelf_linux_fdpiceabi.c:552
+#: earmelf_nacl.c:552 earmelf_nbsd.c:551 earmelf_phoenix.c:552
+#: earmelf_vxworks.c:551 earmelfb.c:551 earmelfb_fbsd.c:551
+#: earmelfb_fuchsia.c:552 earmelfb_linux.c:552 earmelfb_linux_eabi.c:552
#: earmelfb_linux_fdpiceabi.c:552 earmelfb_nacl.c:552 earmelfb_nbsd.c:551
-#: earmnto.c:551 earmsymbian.c:551
+#: earmnto.c:551
msgid "%F%P: %s: can't open: %E\n"
msgstr "%F%P: %s: не може да Ñе отвори: %E\n"
-#: earmelf.c:554 earmelf_fbsd.c:554 earmelf_fuchsia.c:555 earmelf_linux.c:555
-#: earmelf_linux_eabi.c:555 earmelf_linux_fdpiceabi.c:555 earmelf_nacl.c:555
-#: earmelf_nbsd.c:554 earmelf_phoenix.c:555 earmelf_vxworks.c:554
-#: earmelfb.c:554 earmelfb_fbsd.c:554 earmelfb_fuchsia.c:555
-#: earmelfb_linux.c:555 earmelfb_linux_eabi.c:555
+#: earmelf.c:554 earmelf_fbsd.c:554 earmelf_fuchsia.c:555 earmelf_haiku.c:555
+#: earmelf_linux.c:555 earmelf_linux_eabi.c:555 earmelf_linux_fdpiceabi.c:555
+#: earmelf_nacl.c:555 earmelf_nbsd.c:554 earmelf_phoenix.c:555
+#: earmelf_vxworks.c:554 earmelfb.c:554 earmelfb_fbsd.c:554
+#: earmelfb_fuchsia.c:555 earmelfb_linux.c:555 earmelfb_linux_eabi.c:555
#: earmelfb_linux_fdpiceabi.c:555 earmelfb_nacl.c:555 earmelfb_nbsd.c:554
-#: earmnto.c:554 earmsymbian.c:554
+#: earmnto.c:554
msgid "%F%P: %s: not a relocatable file: %E\n"
msgstr "%F%P: %s: не е файл Ñ Ð¿Ñ€ÐµÐ¼ÐµÑтваниÑ: %E\n"
-#: earmelf.c:1030 earmelf_fbsd.c:1030 earmelf_fuchsia.c:1035
-#: earmelf_linux.c:1035 earmelf_linux_eabi.c:1035
-#: earmelf_linux_fdpiceabi.c:1035 earmelf_nacl.c:1035 earmelf_nbsd.c:1030
-#: earmelf_phoenix.c:1035 earmelf_vxworks.c:1066 earmelfb.c:1030
-#: earmelfb_fbsd.c:1030 earmelfb_fuchsia.c:1035 earmelfb_linux.c:1035
-#: earmelfb_linux_eabi.c:1035 earmelfb_linux_fdpiceabi.c:1035
-#: earmelfb_nacl.c:1035 earmelfb_nbsd.c:1030 earmnto.c:1005 earmsymbian.c:1030
+#: earmelf.c:1045 earmelf_fbsd.c:1045 earmelf_fuchsia.c:1050
+#: earmelf_haiku.c:1050 earmelf_linux.c:1050 earmelf_linux_eabi.c:1050
+#: earmelf_linux_fdpiceabi.c:1050 earmelf_nacl.c:1050 earmelf_nbsd.c:1045
+#: earmelf_phoenix.c:1050 earmelf_vxworks.c:1081 earmelfb.c:1045
+#: earmelfb_fbsd.c:1045 earmelfb_fuchsia.c:1050 earmelfb_linux.c:1050
+#: earmelfb_linux_eabi.c:1050 earmelfb_linux_fdpiceabi.c:1050
+#: earmelfb_nacl.c:1050 earmelfb_nbsd.c:1045 earmnto.c:1020
msgid "%P: unrecognized VFP11 fix type '%s'\n"
msgstr "%P: неразпознат вид VFP11 поправка '%s'\n"
-#: earmelf.c:1043 earmelf_fbsd.c:1043 earmelf_fuchsia.c:1048
-#: earmelf_linux.c:1048 earmelf_linux_eabi.c:1048
-#: earmelf_linux_fdpiceabi.c:1048 earmelf_nacl.c:1048 earmelf_nbsd.c:1043
-#: earmelf_phoenix.c:1048 earmelf_vxworks.c:1079 earmelfb.c:1043
-#: earmelfb_fbsd.c:1043 earmelfb_fuchsia.c:1048 earmelfb_linux.c:1048
-#: earmelfb_linux_eabi.c:1048 earmelfb_linux_fdpiceabi.c:1048
-#: earmelfb_nacl.c:1048 earmelfb_nbsd.c:1043 earmnto.c:1018 earmsymbian.c:1043
+#: earmelf.c:1058 earmelf_fbsd.c:1058 earmelf_fuchsia.c:1063
+#: earmelf_haiku.c:1063 earmelf_linux.c:1063 earmelf_linux_eabi.c:1063
+#: earmelf_linux_fdpiceabi.c:1063 earmelf_nacl.c:1063 earmelf_nbsd.c:1058
+#: earmelf_phoenix.c:1063 earmelf_vxworks.c:1094 earmelfb.c:1058
+#: earmelfb_fbsd.c:1058 earmelfb_fuchsia.c:1063 earmelfb_linux.c:1063
+#: earmelfb_linux_eabi.c:1063 earmelfb_linux_fdpiceabi.c:1063
+#: earmelfb_nacl.c:1063 earmelfb_nbsd.c:1058 earmnto.c:1033
msgid "%P: unrecognized STM32L4XX fix type '%s'\n"
msgstr "%P: неразпознат вид STM32L4XX поправка '%s'\n"
-#: earmelf.c:1110 earmelf_fbsd.c:1110 earmelf_fuchsia.c:1115
-#: earmelf_linux.c:1115 earmelf_linux_eabi.c:1115
-#: earmelf_linux_fdpiceabi.c:1115 earmelf_nacl.c:1115 earmelf_nbsd.c:1110
-#: earmelf_phoenix.c:1115 earmelf_vxworks.c:1150 earmelfb.c:1110
-#: earmelfb_fbsd.c:1110 earmelfb_fuchsia.c:1115 earmelfb_linux.c:1115
-#: earmelfb_linux_eabi.c:1115 earmelfb_linux_fdpiceabi.c:1115
-#: earmelfb_nacl.c:1115 earmelfb_nbsd.c:1110 earmnto.c:1085 earmsymbian.c:1110
+#: earmelf.c:1125 earmelf_fbsd.c:1125 earmelf_fuchsia.c:1130
+#: earmelf_haiku.c:1130 earmelf_linux.c:1130 earmelf_linux_eabi.c:1130
+#: earmelf_linux_fdpiceabi.c:1130 earmelf_nacl.c:1130 earmelf_nbsd.c:1125
+#: earmelf_phoenix.c:1130 earmelf_vxworks.c:1165 earmelfb.c:1125
+#: earmelfb_fbsd.c:1125 earmelfb_fuchsia.c:1130 earmelfb_linux.c:1130
+#: earmelfb_linux_eabi.c:1130 earmelfb_linux_fdpiceabi.c:1130
+#: earmelfb_nacl.c:1130 earmelfb_nbsd.c:1125 earmnto.c:1100
#, c-format
msgid " --thumb-entry=<sym> Set the entry point to be Thumb symbol <sym>\n"
msgstr " --thumb-entry=<знак> УÑтановÑва входÑща точка на отбелÑÐ·Ð°Ð½Ð¸Ñ <знак>\n"
-#: earmelf.c:1111 earmelf_fbsd.c:1111 earmelf_fuchsia.c:1116
-#: earmelf_linux.c:1116 earmelf_linux_eabi.c:1116
-#: earmelf_linux_fdpiceabi.c:1116 earmelf_nacl.c:1116 earmelf_nbsd.c:1111
-#: earmelf_phoenix.c:1116 earmelf_vxworks.c:1151 earmelfb.c:1111
-#: earmelfb_fbsd.c:1111 earmelfb_fuchsia.c:1116 earmelfb_linux.c:1116
-#: earmelfb_linux_eabi.c:1116 earmelfb_linux_fdpiceabi.c:1116
-#: earmelfb_nacl.c:1116 earmelfb_nbsd.c:1111 earmnto.c:1086 earmsymbian.c:1111
+#: earmelf.c:1126 earmelf_fbsd.c:1126 earmelf_fuchsia.c:1131
+#: earmelf_haiku.c:1131 earmelf_linux.c:1131 earmelf_linux_eabi.c:1131
+#: earmelf_linux_fdpiceabi.c:1131 earmelf_nacl.c:1131 earmelf_nbsd.c:1126
+#: earmelf_phoenix.c:1131 earmelf_vxworks.c:1166 earmelfb.c:1126
+#: earmelfb_fbsd.c:1126 earmelfb_fuchsia.c:1131 earmelfb_linux.c:1131
+#: earmelfb_linux_eabi.c:1131 earmelfb_linux_fdpiceabi.c:1131
+#: earmelfb_nacl.c:1131 earmelfb_nbsd.c:1126 earmnto.c:1101
#, c-format
msgid " --be8 Output BE8 format image\n"
msgstr " --be8 Образ в формат на BE8\n"
-#: earmelf.c:1112 earmelf_fbsd.c:1112 earmelf_fuchsia.c:1117
-#: earmelf_linux.c:1117 earmelf_linux_eabi.c:1117
-#: earmelf_linux_fdpiceabi.c:1117 earmelf_nacl.c:1117 earmelf_nbsd.c:1112
-#: earmelf_phoenix.c:1117 earmelf_vxworks.c:1152 earmelfb.c:1112
-#: earmelfb_fbsd.c:1112 earmelfb_fuchsia.c:1117 earmelfb_linux.c:1117
-#: earmelfb_linux_eabi.c:1117 earmelfb_linux_fdpiceabi.c:1117
-#: earmelfb_nacl.c:1117 earmelfb_nbsd.c:1112 earmnto.c:1087 earmsymbian.c:1112
+#: earmelf.c:1127 earmelf_fbsd.c:1127 earmelf_fuchsia.c:1132
+#: earmelf_haiku.c:1132 earmelf_linux.c:1132 earmelf_linux_eabi.c:1132
+#: earmelf_linux_fdpiceabi.c:1132 earmelf_nacl.c:1132 earmelf_nbsd.c:1127
+#: earmelf_phoenix.c:1132 earmelf_vxworks.c:1167 earmelfb.c:1127
+#: earmelfb_fbsd.c:1127 earmelfb_fuchsia.c:1132 earmelfb_linux.c:1132
+#: earmelfb_linux_eabi.c:1132 earmelfb_linux_fdpiceabi.c:1132
+#: earmelfb_nacl.c:1132 earmelfb_nbsd.c:1127 earmnto.c:1102
#, c-format
msgid " --target1-rel Interpret R_ARM_TARGET1 as R_ARM_REL32\n"
msgstr ""
-#: earmelf.c:1113 earmelf_fbsd.c:1113 earmelf_fuchsia.c:1118
-#: earmelf_linux.c:1118 earmelf_linux_eabi.c:1118
-#: earmelf_linux_fdpiceabi.c:1118 earmelf_nacl.c:1118 earmelf_nbsd.c:1113
-#: earmelf_phoenix.c:1118 earmelf_vxworks.c:1153 earmelfb.c:1113
-#: earmelfb_fbsd.c:1113 earmelfb_fuchsia.c:1118 earmelfb_linux.c:1118
-#: earmelfb_linux_eabi.c:1118 earmelfb_linux_fdpiceabi.c:1118
-#: earmelfb_nacl.c:1118 earmelfb_nbsd.c:1113 earmnto.c:1088 earmsymbian.c:1113
+#: earmelf.c:1128 earmelf_fbsd.c:1128 earmelf_fuchsia.c:1133
+#: earmelf_haiku.c:1133 earmelf_linux.c:1133 earmelf_linux_eabi.c:1133
+#: earmelf_linux_fdpiceabi.c:1133 earmelf_nacl.c:1133 earmelf_nbsd.c:1128
+#: earmelf_phoenix.c:1133 earmelf_vxworks.c:1168 earmelfb.c:1128
+#: earmelfb_fbsd.c:1128 earmelfb_fuchsia.c:1133 earmelfb_linux.c:1133
+#: earmelfb_linux_eabi.c:1133 earmelfb_linux_fdpiceabi.c:1133
+#: earmelfb_nacl.c:1133 earmelfb_nbsd.c:1128 earmnto.c:1103
#, c-format
msgid " --target1-abs Interpret R_ARM_TARGET1 as R_ARM_ABS32\n"
msgstr ""
-#: earmelf.c:1114 earmelf_fbsd.c:1114 earmelf_fuchsia.c:1119
-#: earmelf_linux.c:1119 earmelf_linux_eabi.c:1119
-#: earmelf_linux_fdpiceabi.c:1119 earmelf_nacl.c:1119 earmelf_nbsd.c:1114
-#: earmelf_phoenix.c:1119 earmelf_vxworks.c:1154 earmelfb.c:1114
-#: earmelfb_fbsd.c:1114 earmelfb_fuchsia.c:1119 earmelfb_linux.c:1119
-#: earmelfb_linux_eabi.c:1119 earmelfb_linux_fdpiceabi.c:1119
-#: earmelfb_nacl.c:1119 earmelfb_nbsd.c:1114 earmnto.c:1089 earmsymbian.c:1114
+#: earmelf.c:1129 earmelf_fbsd.c:1129 earmelf_fuchsia.c:1134
+#: earmelf_haiku.c:1134 earmelf_linux.c:1134 earmelf_linux_eabi.c:1134
+#: earmelf_linux_fdpiceabi.c:1134 earmelf_nacl.c:1134 earmelf_nbsd.c:1129
+#: earmelf_phoenix.c:1134 earmelf_vxworks.c:1169 earmelfb.c:1129
+#: earmelfb_fbsd.c:1129 earmelfb_fuchsia.c:1134 earmelfb_linux.c:1134
+#: earmelfb_linux_eabi.c:1134 earmelfb_linux_fdpiceabi.c:1134
+#: earmelfb_nacl.c:1134 earmelfb_nbsd.c:1129 earmnto.c:1104
#, c-format
msgid " --target2=<type> Specify definition of R_ARM_TARGET2\n"
msgstr ""
-#: earmelf.c:1115 earmelf_fbsd.c:1115 earmelf_fuchsia.c:1120
-#: earmelf_linux.c:1120 earmelf_linux_eabi.c:1120
-#: earmelf_linux_fdpiceabi.c:1120 earmelf_nacl.c:1120 earmelf_nbsd.c:1115
-#: earmelf_phoenix.c:1120 earmelf_vxworks.c:1155 earmelfb.c:1115
-#: earmelfb_fbsd.c:1115 earmelfb_fuchsia.c:1120 earmelfb_linux.c:1120
-#: earmelfb_linux_eabi.c:1120 earmelfb_linux_fdpiceabi.c:1120
-#: earmelfb_nacl.c:1120 earmelfb_nbsd.c:1115 earmnto.c:1090 earmsymbian.c:1115
+#: earmelf.c:1130 earmelf_fbsd.c:1130 earmelf_fuchsia.c:1135
+#: earmelf_haiku.c:1135 earmelf_linux.c:1135 earmelf_linux_eabi.c:1135
+#: earmelf_linux_fdpiceabi.c:1135 earmelf_nacl.c:1135 earmelf_nbsd.c:1130
+#: earmelf_phoenix.c:1135 earmelf_vxworks.c:1170 earmelfb.c:1130
+#: earmelfb_fbsd.c:1130 earmelfb_fuchsia.c:1135 earmelfb_linux.c:1135
+#: earmelfb_linux_eabi.c:1135 earmelfb_linux_fdpiceabi.c:1135
+#: earmelfb_nacl.c:1135 earmelfb_nbsd.c:1130 earmnto.c:1105
#, c-format
msgid " --fix-v4bx Rewrite BX rn as MOV pc, rn for ARMv4\n"
msgstr ""
-#: earmelf.c:1116 earmelf_fbsd.c:1116 earmelf_fuchsia.c:1121
-#: earmelf_linux.c:1121 earmelf_linux_eabi.c:1121
-#: earmelf_linux_fdpiceabi.c:1121 earmelf_nacl.c:1121 earmelf_nbsd.c:1116
-#: earmelf_phoenix.c:1121 earmelf_vxworks.c:1156 earmelfb.c:1116
-#: earmelfb_fbsd.c:1116 earmelfb_fuchsia.c:1121 earmelfb_linux.c:1121
-#: earmelfb_linux_eabi.c:1121 earmelfb_linux_fdpiceabi.c:1121
-#: earmelfb_nacl.c:1121 earmelfb_nbsd.c:1116 earmnto.c:1091 earmsymbian.c:1116
+#: earmelf.c:1131 earmelf_fbsd.c:1131 earmelf_fuchsia.c:1136
+#: earmelf_haiku.c:1136 earmelf_linux.c:1136 earmelf_linux_eabi.c:1136
+#: earmelf_linux_fdpiceabi.c:1136 earmelf_nacl.c:1136 earmelf_nbsd.c:1131
+#: earmelf_phoenix.c:1136 earmelf_vxworks.c:1171 earmelfb.c:1131
+#: earmelfb_fbsd.c:1131 earmelfb_fuchsia.c:1136 earmelfb_linux.c:1136
+#: earmelfb_linux_eabi.c:1136 earmelfb_linux_fdpiceabi.c:1136
+#: earmelfb_nacl.c:1136 earmelfb_nbsd.c:1131 earmnto.c:1106
#, c-format
msgid " --fix-v4bx-interworking Rewrite BX rn branch to ARMv4 interworking veneer\n"
msgstr ""
-#: earmelf.c:1117 earmelf_fbsd.c:1117 earmelf_fuchsia.c:1122
-#: earmelf_linux.c:1122 earmelf_linux_eabi.c:1122
-#: earmelf_linux_fdpiceabi.c:1122 earmelf_nacl.c:1122 earmelf_nbsd.c:1117
-#: earmelf_phoenix.c:1122 earmelf_vxworks.c:1157 earmelfb.c:1117
-#: earmelfb_fbsd.c:1117 earmelfb_fuchsia.c:1122 earmelfb_linux.c:1122
-#: earmelfb_linux_eabi.c:1122 earmelfb_linux_fdpiceabi.c:1122
-#: earmelfb_nacl.c:1122 earmelfb_nbsd.c:1117 earmnto.c:1092 earmsymbian.c:1117
+#: earmelf.c:1132 earmelf_fbsd.c:1132 earmelf_fuchsia.c:1137
+#: earmelf_haiku.c:1137 earmelf_linux.c:1137 earmelf_linux_eabi.c:1137
+#: earmelf_linux_fdpiceabi.c:1137 earmelf_nacl.c:1137 earmelf_nbsd.c:1132
+#: earmelf_phoenix.c:1137 earmelf_vxworks.c:1172 earmelfb.c:1132
+#: earmelfb_fbsd.c:1132 earmelfb_fuchsia.c:1137 earmelfb_linux.c:1137
+#: earmelfb_linux_eabi.c:1137 earmelfb_linux_fdpiceabi.c:1137
+#: earmelfb_nacl.c:1137 earmelfb_nbsd.c:1132 earmnto.c:1107
#, c-format
msgid " --use-blx Enable use of BLX instructions\n"
msgstr ""
-#: earmelf.c:1118 earmelf_fbsd.c:1118 earmelf_fuchsia.c:1123
-#: earmelf_linux.c:1123 earmelf_linux_eabi.c:1123
-#: earmelf_linux_fdpiceabi.c:1123 earmelf_nacl.c:1123 earmelf_nbsd.c:1118
-#: earmelf_phoenix.c:1123 earmelf_vxworks.c:1158 earmelfb.c:1118
-#: earmelfb_fbsd.c:1118 earmelfb_fuchsia.c:1123 earmelfb_linux.c:1123
-#: earmelfb_linux_eabi.c:1123 earmelfb_linux_fdpiceabi.c:1123
-#: earmelfb_nacl.c:1123 earmelfb_nbsd.c:1118 earmnto.c:1093 earmsymbian.c:1118
+#: earmelf.c:1133 earmelf_fbsd.c:1133 earmelf_fuchsia.c:1138
+#: earmelf_haiku.c:1138 earmelf_linux.c:1138 earmelf_linux_eabi.c:1138
+#: earmelf_linux_fdpiceabi.c:1138 earmelf_nacl.c:1138 earmelf_nbsd.c:1133
+#: earmelf_phoenix.c:1138 earmelf_vxworks.c:1173 earmelfb.c:1133
+#: earmelfb_fbsd.c:1133 earmelfb_fuchsia.c:1138 earmelfb_linux.c:1138
+#: earmelfb_linux_eabi.c:1138 earmelfb_linux_fdpiceabi.c:1138
+#: earmelfb_nacl.c:1138 earmelfb_nbsd.c:1133 earmnto.c:1108
#, c-format
msgid " --vfp11-denorm-fix Specify how to fix VFP11 denorm erratum\n"
msgstr ""
-#: earmelf.c:1119 earmelf_fbsd.c:1119 earmelf_fuchsia.c:1124
-#: earmelf_linux.c:1124 earmelf_linux_eabi.c:1124
-#: earmelf_linux_fdpiceabi.c:1124 earmelf_nacl.c:1124 earmelf_nbsd.c:1119
-#: earmelf_phoenix.c:1124 earmelf_vxworks.c:1159 earmelfb.c:1119
-#: earmelfb_fbsd.c:1119 earmelfb_fuchsia.c:1124 earmelfb_linux.c:1124
-#: earmelfb_linux_eabi.c:1124 earmelfb_linux_fdpiceabi.c:1124
-#: earmelfb_nacl.c:1124 earmelfb_nbsd.c:1119 earmnto.c:1094 earmsymbian.c:1119
+#: earmelf.c:1134 earmelf_fbsd.c:1134 earmelf_fuchsia.c:1139
+#: earmelf_haiku.c:1139 earmelf_linux.c:1139 earmelf_linux_eabi.c:1139
+#: earmelf_linux_fdpiceabi.c:1139 earmelf_nacl.c:1139 earmelf_nbsd.c:1134
+#: earmelf_phoenix.c:1139 earmelf_vxworks.c:1174 earmelfb.c:1134
+#: earmelfb_fbsd.c:1134 earmelfb_fuchsia.c:1139 earmelfb_linux.c:1139
+#: earmelfb_linux_eabi.c:1139 earmelfb_linux_fdpiceabi.c:1139
+#: earmelfb_nacl.c:1139 earmelfb_nbsd.c:1134 earmnto.c:1109
#, c-format
msgid " --fix-stm32l4xx-629360 Specify how to fix STM32L4XX 629360 erratum\n"
msgstr ""
-#: earmelf.c:1125 earmelf_fbsd.c:1125 earmelf_fuchsia.c:1130
-#: earmelf_linux.c:1130 earmelf_linux_eabi.c:1130
-#: earmelf_linux_fdpiceabi.c:1130 earmelf_nacl.c:1130 earmelf_nbsd.c:1125
-#: earmelf_phoenix.c:1130 earmelf_vxworks.c:1165 earmelfb.c:1125
-#: earmelfb_fbsd.c:1125 earmelfb_fuchsia.c:1130 earmelfb_linux.c:1130
-#: earmelfb_linux_eabi.c:1130 earmelfb_linux_fdpiceabi.c:1130
-#: earmelfb_nacl.c:1130 earmelfb_nbsd.c:1125 earmnto.c:1100 earmsymbian.c:1125
+#: earmelf.c:1140 earmelf_fbsd.c:1140 earmelf_fuchsia.c:1145
+#: earmelf_haiku.c:1145 earmelf_linux.c:1145 earmelf_linux_eabi.c:1145
+#: earmelf_linux_fdpiceabi.c:1145 earmelf_nacl.c:1145 earmelf_nbsd.c:1140
+#: earmelf_phoenix.c:1145 earmelf_vxworks.c:1180 earmelfb.c:1140
+#: earmelfb_fbsd.c:1140 earmelfb_fuchsia.c:1145 earmelfb_linux.c:1145
+#: earmelfb_linux_eabi.c:1145 earmelfb_linux_fdpiceabi.c:1145
+#: earmelfb_nacl.c:1145 earmelfb_nbsd.c:1140 earmnto.c:1115
#, c-format
msgid ""
" --long-plt Generate long .plt entries\n"
" to handle large .plt/.got displacements\n"
msgstr ""
-#: earmelf.c:1127 earmelf_fbsd.c:1127 earmelf_fuchsia.c:1132
-#: earmelf_linux.c:1132 earmelf_linux_eabi.c:1132
-#: earmelf_linux_fdpiceabi.c:1132 earmelf_nacl.c:1132 earmelf_nbsd.c:1127
-#: earmelf_phoenix.c:1132 earmelf_vxworks.c:1167 earmelfb.c:1127
-#: earmelfb_fbsd.c:1127 earmelfb_fuchsia.c:1132 earmelfb_linux.c:1132
-#: earmelfb_linux_eabi.c:1132 earmelfb_linux_fdpiceabi.c:1132
-#: earmelfb_nacl.c:1132 earmelfb_nbsd.c:1127 earmnto.c:1102 earmsymbian.c:1127
+#: earmelf.c:1142 earmelf_fbsd.c:1142 earmelf_fuchsia.c:1147
+#: earmelf_haiku.c:1147 earmelf_linux.c:1147 earmelf_linux_eabi.c:1147
+#: earmelf_linux_fdpiceabi.c:1147 earmelf_nacl.c:1147 earmelf_nbsd.c:1142
+#: earmelf_phoenix.c:1147 earmelf_vxworks.c:1182 earmelfb.c:1142
+#: earmelfb_fbsd.c:1142 earmelfb_fuchsia.c:1147 earmelfb_linux.c:1147
+#: earmelfb_linux_eabi.c:1147 earmelfb_linux_fdpiceabi.c:1147
+#: earmelfb_nacl.c:1147 earmelfb_nbsd.c:1142 earmnto.c:1117
#, c-format
msgid ""
" --cmse-implib Make import library to be a secure gateway import\n"
" library as per ARMv8-M Security Extensions\n"
msgstr ""
-#: earmelf.c:1129 earmelf_fbsd.c:1129 earmelf_fuchsia.c:1134
-#: earmelf_linux.c:1134 earmelf_linux_eabi.c:1134
-#: earmelf_linux_fdpiceabi.c:1134 earmelf_nacl.c:1134 earmelf_nbsd.c:1129
-#: earmelf_phoenix.c:1134 earmelf_vxworks.c:1169 earmelfb.c:1129
-#: earmelfb_fbsd.c:1129 earmelfb_fuchsia.c:1134 earmelfb_linux.c:1134
-#: earmelfb_linux_eabi.c:1134 earmelfb_linux_fdpiceabi.c:1134
-#: earmelfb_nacl.c:1134 earmelfb_nbsd.c:1129 earmnto.c:1104 earmsymbian.c:1129
+#: earmelf.c:1144 earmelf_fbsd.c:1144 earmelf_fuchsia.c:1149
+#: earmelf_haiku.c:1149 earmelf_linux.c:1149 earmelf_linux_eabi.c:1149
+#: earmelf_linux_fdpiceabi.c:1149 earmelf_nacl.c:1149 earmelf_nbsd.c:1144
+#: earmelf_phoenix.c:1149 earmelf_vxworks.c:1184 earmelfb.c:1144
+#: earmelfb_fbsd.c:1144 earmelfb_fuchsia.c:1149 earmelfb_linux.c:1149
+#: earmelfb_linux_eabi.c:1149 earmelfb_linux_fdpiceabi.c:1149
+#: earmelfb_nacl.c:1149 earmelfb_nbsd.c:1144 earmnto.c:1119
#, c-format
msgid ""
" --in-implib Import library whose symbols address must\n"
" remain stable\n"
msgstr ""
-#: earmelf.c:1140 earmelf_fbsd.c:1140 earmelf_fuchsia.c:1145
-#: earmelf_linux.c:1145 earmelf_linux_eabi.c:1145
-#: earmelf_linux_fdpiceabi.c:1145 earmelf_nacl.c:1145 earmelf_nbsd.c:1140
-#: earmelf_phoenix.c:1145 earmelf_vxworks.c:1180 earmelfb.c:1140
-#: earmelfb_fbsd.c:1140 earmelfb_fuchsia.c:1145 earmelfb_linux.c:1145
-#: earmelfb_linux_eabi.c:1145 earmelfb_linux_fdpiceabi.c:1145
-#: earmelfb_nacl.c:1145 earmelfb_nbsd.c:1140 earmnto.c:1115 earmsymbian.c:1140
+#: earmelf.c:1155 earmelf_fbsd.c:1155 earmelf_fuchsia.c:1160
+#: earmelf_haiku.c:1160 earmelf_linux.c:1160 earmelf_linux_eabi.c:1160
+#: earmelf_linux_fdpiceabi.c:1160 earmelf_nacl.c:1160 earmelf_nbsd.c:1155
+#: earmelf_phoenix.c:1160 earmelf_vxworks.c:1195 earmelfb.c:1155
+#: earmelfb_fbsd.c:1155 earmelfb_fuchsia.c:1160 earmelfb_linux.c:1160
+#: earmelfb_linux_eabi.c:1160 earmelfb_linux_fdpiceabi.c:1160
+#: earmelfb_nacl.c:1160 earmelfb_nbsd.c:1155 earmnto.c:1130
#, c-format
msgid " --[no-]fix-cortex-a8 Disable/enable Cortex-A8 Thumb-2 branch erratum fix\n"
msgstr ""
-#: earmelf.c:1141 earmelf_fbsd.c:1141 earmelf_fuchsia.c:1146
-#: earmelf_linux.c:1146 earmelf_linux_eabi.c:1146
-#: earmelf_linux_fdpiceabi.c:1146 earmelf_nacl.c:1146 earmelf_nbsd.c:1141
-#: earmelf_phoenix.c:1146 earmelf_vxworks.c:1181 earmelfb.c:1141
-#: earmelfb_fbsd.c:1141 earmelfb_fuchsia.c:1146 earmelfb_linux.c:1146
-#: earmelfb_linux_eabi.c:1146 earmelfb_linux_fdpiceabi.c:1146
-#: earmelfb_nacl.c:1146 earmelfb_nbsd.c:1141 earmnto.c:1116 earmsymbian.c:1141
+#: earmelf.c:1156 earmelf_fbsd.c:1156 earmelf_fuchsia.c:1161
+#: earmelf_haiku.c:1161 earmelf_linux.c:1161 earmelf_linux_eabi.c:1161
+#: earmelf_linux_fdpiceabi.c:1161 earmelf_nacl.c:1161 earmelf_nbsd.c:1156
+#: earmelf_phoenix.c:1161 earmelf_vxworks.c:1196 earmelfb.c:1156
+#: earmelfb_fbsd.c:1156 earmelfb_fuchsia.c:1161 earmelfb_linux.c:1161
+#: earmelfb_linux_eabi.c:1161 earmelfb_linux_fdpiceabi.c:1161
+#: earmelfb_nacl.c:1161 earmelfb_nbsd.c:1156 earmnto.c:1131
#, c-format
msgid " --no-merge-exidx-entries Disable merging exidx entries\n"
msgstr ""
-#: earmelf.c:1142 earmelf_fbsd.c:1142 earmelf_fuchsia.c:1147
-#: earmelf_linux.c:1147 earmelf_linux_eabi.c:1147
-#: earmelf_linux_fdpiceabi.c:1147 earmelf_nacl.c:1147 earmelf_nbsd.c:1142
-#: earmelf_phoenix.c:1147 earmelf_vxworks.c:1182 earmelfb.c:1142
-#: earmelfb_fbsd.c:1142 earmelfb_fuchsia.c:1147 earmelfb_linux.c:1147
-#: earmelfb_linux_eabi.c:1147 earmelfb_linux_fdpiceabi.c:1147
-#: earmelfb_nacl.c:1147 earmelfb_nbsd.c:1142 earmnto.c:1117 earmsymbian.c:1142
+#: earmelf.c:1157 earmelf_fbsd.c:1157 earmelf_fuchsia.c:1162
+#: earmelf_haiku.c:1162 earmelf_linux.c:1162 earmelf_linux_eabi.c:1162
+#: earmelf_linux_fdpiceabi.c:1162 earmelf_nacl.c:1162 earmelf_nbsd.c:1157
+#: earmelf_phoenix.c:1162 earmelf_vxworks.c:1197 earmelfb.c:1157
+#: earmelfb_fbsd.c:1157 earmelfb_fuchsia.c:1162 earmelfb_linux.c:1162
+#: earmelfb_linux_eabi.c:1162 earmelfb_linux_fdpiceabi.c:1162
+#: earmelfb_nacl.c:1162 earmelfb_nbsd.c:1157 earmnto.c:1132
#, c-format
msgid " --[no-]fix-arm1176 Disable/enable ARM1176 BLX immediate erratum fix\n"
msgstr ""
@@ -4313,9 +4518,9 @@ msgstr "%X%P: не можа да Ñе Ñъздаде динамичен разд
msgid "%X%P: dynamic sections created in non-dynamic link\n"
msgstr ""
-#: earmelf_vxworks.c:1184 eelf32_sparc_vxworks.c:487 eelf32ebmipvxworks.c:745
-#: eelf32elmipvxworks.c:745 eelf32ppcvxworks.c:810 eelf_i386_vxworks.c:564
-#: eshelf_vxworks.c:457 eshlelf_vxworks.c:457
+#: earmelf_vxworks.c:1199 eelf32_sparc_vxworks.c:502 eelf32ebmipvxworks.c:760
+#: eelf32elmipvxworks.c:760 eelf32ppcvxworks.c:825 eelf_i386_vxworks.c:587
+#: eshelf_vxworks.c:472 eshlelf_vxworks.c:472
#, c-format
msgid " --force-dynamic Always create dynamic sections\n"
msgstr ""
@@ -4334,10 +4539,10 @@ msgstr ""
msgid "%X%P: can not create stub BFD: %E\n"
msgstr ""
-#: eavr1.c:527 eavr2.c:527 eavr25.c:527 eavr3.c:527 eavr31.c:527 eavr35.c:527
-#: eavr4.c:527 eavr5.c:527 eavr51.c:527 eavr6.c:527 eavrtiny.c:527
-#: eavrxmega1.c:527 eavrxmega2.c:527 eavrxmega3.c:527 eavrxmega4.c:527
-#: eavrxmega5.c:527 eavrxmega6.c:527 eavrxmega7.c:527
+#: eavr1.c:538 eavr2.c:538 eavr25.c:538 eavr3.c:538 eavr31.c:538 eavr35.c:538
+#: eavr4.c:538 eavr5.c:538 eavr51.c:538 eavr6.c:538 eavrtiny.c:538
+#: eavrxmega1.c:538 eavrxmega2.c:538 eavrxmega3.c:538 eavrxmega4.c:538
+#: eavrxmega5.c:538 eavrxmega6.c:538 eavrxmega7.c:538
#, c-format
msgid ""
" --pmem-wrap-around=<val> Make the linker relaxation machine assume that a\n"
@@ -4345,10 +4550,10 @@ msgid ""
" <val>. Supported values: 8k, 16k, 32k and 64k.\n"
msgstr ""
-#: eavr1.c:533 eavr2.c:533 eavr25.c:533 eavr3.c:533 eavr31.c:533 eavr35.c:533
-#: eavr4.c:533 eavr5.c:533 eavr51.c:533 eavr6.c:533 eavrtiny.c:533
-#: eavrxmega1.c:533 eavrxmega2.c:533 eavrxmega3.c:533 eavrxmega4.c:533
-#: eavrxmega5.c:533 eavrxmega6.c:533 eavrxmega7.c:533
+#: eavr1.c:544 eavr2.c:544 eavr25.c:544 eavr3.c:544 eavr31.c:544 eavr35.c:544
+#: eavr4.c:544 eavr5.c:544 eavr51.c:544 eavr6.c:544 eavrtiny.c:544
+#: eavrxmega1.c:544 eavrxmega2.c:544 eavrxmega3.c:544 eavrxmega4.c:544
+#: eavrxmega5.c:544 eavrxmega6.c:544 eavrxmega7.c:544
#, c-format
msgid ""
" --no-call-ret-replacement The relaxation machine normally will\n"
@@ -4357,10 +4562,10 @@ msgid ""
" This option disables this optimization.\n"
msgstr ""
-#: eavr1.c:541 eavr2.c:541 eavr25.c:541 eavr3.c:541 eavr31.c:541 eavr35.c:541
-#: eavr4.c:541 eavr5.c:541 eavr51.c:541 eavr6.c:541 eavrtiny.c:541
-#: eavrxmega1.c:541 eavrxmega2.c:541 eavrxmega3.c:541 eavrxmega4.c:541
-#: eavrxmega5.c:541 eavrxmega6.c:541 eavrxmega7.c:541
+#: eavr1.c:552 eavr2.c:552 eavr25.c:552 eavr3.c:552 eavr31.c:552 eavr35.c:552
+#: eavr4.c:552 eavr5.c:552 eavr51.c:552 eavr6.c:552 eavrtiny.c:552
+#: eavrxmega1.c:552 eavrxmega2.c:552 eavrxmega3.c:552 eavrxmega4.c:552
+#: eavrxmega5.c:552 eavrxmega6.c:552 eavrxmega7.c:552
#, c-format
msgid ""
" --no-stubs If the linker detects to attempt to access\n"
@@ -4369,18 +4574,18 @@ msgid ""
" stub. You can de-active this with this switch.\n"
msgstr ""
-#: eavr1.c:549 eavr2.c:549 eavr25.c:549 eavr3.c:549 eavr31.c:549 eavr35.c:549
-#: eavr4.c:549 eavr5.c:549 eavr51.c:549 eavr6.c:549 eavrtiny.c:549
-#: eavrxmega1.c:549 eavrxmega2.c:549 eavrxmega3.c:549 eavrxmega4.c:549
-#: eavrxmega5.c:549 eavrxmega6.c:549 eavrxmega7.c:549
+#: eavr1.c:560 eavr2.c:560 eavr25.c:560 eavr3.c:560 eavr31.c:560 eavr35.c:560
+#: eavr4.c:560 eavr5.c:560 eavr51.c:560 eavr6.c:560 eavrtiny.c:560
+#: eavrxmega1.c:560 eavrxmega2.c:560 eavrxmega3.c:560 eavrxmega4.c:560
+#: eavrxmega5.c:560 eavrxmega6.c:560 eavrxmega7.c:560
#, c-format
msgid " --debug-stubs Used for debugging avr-ld.\n"
msgstr ""
-#: eavr1.c:551 eavr2.c:551 eavr25.c:551 eavr3.c:551 eavr31.c:551 eavr35.c:551
-#: eavr4.c:551 eavr5.c:551 eavr51.c:551 eavr6.c:551 eavrtiny.c:551
-#: eavrxmega1.c:551 eavrxmega2.c:551 eavrxmega3.c:551 eavrxmega4.c:551
-#: eavrxmega5.c:551 eavrxmega6.c:551 eavrxmega7.c:551
+#: eavr1.c:562 eavr2.c:562 eavr25.c:562 eavr3.c:562 eavr31.c:562 eavr35.c:562
+#: eavr4.c:562 eavr5.c:562 eavr51.c:562 eavr6.c:562 eavrtiny.c:562
+#: eavrxmega1.c:562 eavrxmega2.c:562 eavrxmega3.c:562 eavrxmega4.c:562
+#: eavrxmega5.c:562 eavrxmega6.c:562 eavrxmega7.c:562
#, c-format
msgid " --debug-relax Used for debugging avr-ld.\n"
msgstr ""
@@ -4393,14 +4598,14 @@ msgstr "%X%P: не може да Ñе оразмери раздел за загÐ
msgid "%X%P: cannot build stubs: %E\n"
msgstr "%X%P: не може да Ñе Ñъздадат заготовки: %E\n"
-#: ecskyelf.c:544 ecskyelf_linux.c:707
+#: ecskyelf.c:555 ecskyelf_linux.c:722
#, c-format
msgid ""
" --[no-]branch-stub Disable/enable use of stubs to expand branch\n"
" instructions that cannot reach the target.\n"
msgstr ""
-#: ecskyelf.c:548 ecskyelf_linux.c:711
+#: ecskyelf.c:559 ecskyelf_linux.c:726
#, c-format
msgid ""
" --stub-group-size=N Maximum size of a group of input sections\n"
@@ -4459,147 +4664,147 @@ msgstr ""
msgid "running: %s \"%s\" \"%s\" \"%s\" \"%s\"\n"
msgstr ""
-#: eelf32_spu.c:1021
+#: eelf32_spu.c:1032
msgid "%F%P: invalid --local-store address range `%s'\n"
msgstr ""
-#: eelf32_spu.c:1057
+#: eelf32_spu.c:1068
msgid "%F%P: invalid --num-lines/--num-regions `%u'\n"
msgstr ""
-#: eelf32_spu.c:1062
+#: eelf32_spu.c:1073
msgid "%F%P: invalid --line-size/--region-size `%u'\n"
msgstr ""
-#: eelf32_spu.c:1083
+#: eelf32_spu.c:1094
msgid "%F%P: invalid --num-lines/--num-regions `%s'\n"
msgstr "%F%P: неправилни --num-lines/--num-regions '%s'\n"
-#: eelf32_spu.c:1096
+#: eelf32_spu.c:1107
msgid "%F%P: invalid --line-size/--region-size `%s'\n"
msgstr ""
-#: eelf32_spu.c:1105
+#: eelf32_spu.c:1116
msgid "%F%P: invalid --fixed-space value `%s'\n"
msgstr "%F%P: неправилна ÑтойноÑÑ‚ за --fixed-space'%s'\n"
-#: eelf32_spu.c:1114
+#: eelf32_spu.c:1125
msgid "%F%P: invalid --reserved-space value `%s'\n"
msgstr "%F%P: неправилна ÑтойноÑÑ‚ за --reserved-space'%s'\n"
-#: eelf32_spu.c:1123
+#: eelf32_spu.c:1134
msgid "%F%P: invalid --extra-stack-space value `%s'\n"
msgstr "%F%P: неправилна ÑтойноÑÑ‚ за --extra-stack-space'%s'\n"
-#: eelf32_spu.c:1160
+#: eelf32_spu.c:1171
#, c-format
msgid " --plugin Make SPU plugin\n"
msgstr ""
-#: eelf32_spu.c:1162
+#: eelf32_spu.c:1173
#, c-format
msgid " --no-overlays No overlay handling\n"
msgstr " --no-overlays Без подръжка на Ñлоеве\n"
-#: eelf32_spu.c:1164
+#: eelf32_spu.c:1175
#, c-format
msgid " --compact-stubs Use smaller and possibly slower call stubs\n"
msgstr ""
-#: eelf32_spu.c:1166
+#: eelf32_spu.c:1177
#, c-format
msgid " --emit-stub-syms Add symbols on overlay call stubs\n"
msgstr ""
-#: eelf32_spu.c:1168
+#: eelf32_spu.c:1179
#, c-format
msgid " --extra-overlay-stubs Add stubs on all calls out of overlay regions\n"
msgstr ""
-#: eelf32_spu.c:1170
+#: eelf32_spu.c:1181
#, c-format
msgid " --local-store=lo:hi Valid address range\n"
msgstr ""
-#: eelf32_spu.c:1172
+#: eelf32_spu.c:1183
#, c-format
msgid " --stack-analysis Estimate maximum stack requirement\n"
msgstr " --stack-analysis ОценÑване на изиÑкваниÑта за горен размер на Ñтек\n"
-#: eelf32_spu.c:1174
+#: eelf32_spu.c:1185
#, c-format
msgid " --emit-stack-syms Add sym giving stack needed for each func\n"
msgstr ""
-#: eelf32_spu.c:1176
+#: eelf32_spu.c:1187
#, c-format
msgid ""
" --auto-overlay [=filename] Create an overlay script in filename if\n"
" executable does not fit in local store\n"
msgstr ""
-#: eelf32_spu.c:1179
+#: eelf32_spu.c:1190
#, c-format
msgid " --auto-relink Rerun linker using auto-overlay script\n"
msgstr ""
-#: eelf32_spu.c:1181
+#: eelf32_spu.c:1192
#, c-format
msgid ""
" --overlay-rodata Place read-only data with associated function\n"
" code in overlays\n"
msgstr ""
-#: eelf32_spu.c:1184
+#: eelf32_spu.c:1195
#, c-format
msgid " --num-regions Number of overlay buffers (default 1)\n"
msgstr ""
-#: eelf32_spu.c:1186
+#: eelf32_spu.c:1197
#, c-format
msgid " --region-size Size of overlay buffers (default 0, auto)\n"
msgstr ""
-#: eelf32_spu.c:1188
+#: eelf32_spu.c:1199
#, c-format
msgid " --fixed-space=bytes Local store for non-overlay code and data\n"
msgstr ""
-#: eelf32_spu.c:1190
+#: eelf32_spu.c:1201
#, c-format
msgid ""
" --reserved-space=bytes Local store for stack and heap. If not specified\n"
" ld will estimate stack size and assume no heap\n"
msgstr ""
-#: eelf32_spu.c:1193
+#: eelf32_spu.c:1204
#, c-format
msgid ""
" --extra-stack-space=bytes Space for negative sp access (default 2000) if\n"
" --reserved-space not given\n"
msgstr ""
-#: eelf32_spu.c:1196
+#: eelf32_spu.c:1207
#, c-format
msgid " --soft-icache Generate software icache overlays\n"
msgstr ""
-#: eelf32_spu.c:1198
+#: eelf32_spu.c:1209
#, c-format
msgid " --num-lines Number of soft-icache lines (default 32)\n"
msgstr ""
-#: eelf32_spu.c:1200
+#: eelf32_spu.c:1211
#, c-format
msgid " --line-size Size of soft-icache lines (default 1k)\n"
msgstr ""
-#: eelf32_spu.c:1202
+#: eelf32_spu.c:1213
#, c-format
msgid " --non-ia-text Allow non-icache code in icache lines\n"
msgstr ""
-#: eelf32_spu.c:1204
+#: eelf32_spu.c:1215
#, c-format
msgid " --lrlive-analysis Scan function prologue for lr liveness\n"
msgstr ""
@@ -4609,239 +4814,298 @@ msgstr ""
msgid "%F%P: invalid --dsbt-index %d, outside DSBT size\n"
msgstr ""
-#: eelf32_tic6x_be.c:550 eelf32_tic6x_elf_be.c:550 eelf32_tic6x_elf_le.c:550
-#: eelf32_tic6x_le.c:550 eelf32_tic6x_linux_be.c:550
-#: eelf32_tic6x_linux_le.c:550
+#: eelf32_tic6x_be.c:565 eelf32_tic6x_elf_be.c:565 eelf32_tic6x_elf_le.c:565
+#: eelf32_tic6x_le.c:565 eelf32_tic6x_linux_be.c:565
+#: eelf32_tic6x_linux_le.c:565
msgid "%F%P: invalid --dsbt-index %s\n"
msgstr "%F%P: неправилен --dsbt-index %s\n"
-#: eelf32_tic6x_be.c:560 eelf32_tic6x_elf_be.c:560 eelf32_tic6x_elf_le.c:560
-#: eelf32_tic6x_le.c:560 eelf32_tic6x_linux_be.c:560
-#: eelf32_tic6x_linux_le.c:560
+#: eelf32_tic6x_be.c:575 eelf32_tic6x_elf_be.c:575 eelf32_tic6x_elf_le.c:575
+#: eelf32_tic6x_le.c:575 eelf32_tic6x_linux_be.c:575
+#: eelf32_tic6x_linux_le.c:575
msgid "%F%P: invalid --dsbt-size %s\n"
msgstr "%F%P: неправилен --dsbt-size %s\n"
-#: eelf32_tic6x_be.c:576 eelf32_tic6x_elf_be.c:576 eelf32_tic6x_elf_le.c:576
-#: eelf32_tic6x_le.c:576 eelf32_tic6x_linux_be.c:576
-#: eelf32_tic6x_linux_le.c:576
+#: eelf32_tic6x_be.c:591 eelf32_tic6x_elf_be.c:591 eelf32_tic6x_elf_le.c:591
+#: eelf32_tic6x_le.c:591 eelf32_tic6x_linux_be.c:591
+#: eelf32_tic6x_linux_le.c:591
#, c-format
msgid " --dsbt-index <index> Use this as the DSBT index for the output object\n"
msgstr ""
-#: eelf32_tic6x_be.c:577 eelf32_tic6x_elf_be.c:577 eelf32_tic6x_elf_le.c:577
-#: eelf32_tic6x_le.c:577 eelf32_tic6x_linux_be.c:577
-#: eelf32_tic6x_linux_le.c:577
+#: eelf32_tic6x_be.c:592 eelf32_tic6x_elf_be.c:592 eelf32_tic6x_elf_le.c:592
+#: eelf32_tic6x_le.c:592 eelf32_tic6x_linux_be.c:592
+#: eelf32_tic6x_linux_le.c:592
#, c-format
msgid " --dsbt-size <index> Use this as the number of entries in the DSBT table\n"
msgstr ""
-#: eelf32_tic6x_be.c:578 eelf32_tic6x_elf_be.c:578 eelf32_tic6x_elf_le.c:578
-#: eelf32_tic6x_le.c:578 eelf32_tic6x_linux_be.c:578
-#: eelf32_tic6x_linux_le.c:578
+#: eelf32_tic6x_be.c:593 eelf32_tic6x_elf_be.c:593 eelf32_tic6x_elf_le.c:593
+#: eelf32_tic6x_le.c:593 eelf32_tic6x_linux_be.c:593
+#: eelf32_tic6x_linux_le.c:593
#, c-format
msgid " --no-merge-exidx-entries\n"
msgstr ""
-#: eelf32_tic6x_be.c:579 eelf32_tic6x_elf_be.c:579 eelf32_tic6x_elf_le.c:579
-#: eelf32_tic6x_le.c:579 eelf32_tic6x_linux_be.c:579
-#: eelf32_tic6x_linux_le.c:579
+#: eelf32_tic6x_be.c:594 eelf32_tic6x_elf_be.c:594 eelf32_tic6x_elf_le.c:594
+#: eelf32_tic6x_le.c:594 eelf32_tic6x_linux_be.c:594
+#: eelf32_tic6x_linux_le.c:594
#, c-format
msgid " Disable merging exidx entries\n"
msgstr ""
-#: eelf32_x86_64.c:5398 eelf_i386.c:5017 eelf_i386_be.c:452
-#: eelf_i386_fbsd.c:492 eelf_i386_ldso.c:467 eelf_i386_sol2.c:623
-#: eelf_i386_vxworks.c:519 eelf_iamcu.c:4995 eelf_k1om.c:5351
-#: eelf_k1om_fbsd.c:5331 eelf_l1om.c:5351 eelf_l1om_fbsd.c:5331
-#: eelf_x86_64.c:5398 eelf_x86_64_cloudabi.c:495 eelf_x86_64_fbsd.c:495
-#: eelf_x86_64_sol2.c:626
+#: eelf32_x86_64.c:5571 eelf_i386.c:5190 eelf_i386_be.c:471
+#: eelf_i386_fbsd.c:511 eelf_i386_haiku.c:511 eelf_i386_ldso.c:486
+#: eelf_i386_sol2.c:643 eelf_i386_vxworks.c:538 eelf_iamcu.c:511
+#: eelf_k1om.c:5502 eelf_k1om_fbsd.c:511 eelf_l1om.c:5502 eelf_l1om_fbsd.c:511
+#: eelf_x86_64.c:5571 eelf_x86_64_cloudabi.c:514 eelf_x86_64_fbsd.c:514
+#: eelf_x86_64_haiku.c:514 eelf_x86_64_sol2.c:646
msgid "%F%P: invalid number for -z call-nop=prefix-: %s\n"
msgstr "%F%P: неправилно чиÑло за -z call-nop=prefix-: %s\n"
-#: eelf32_x86_64.c:5407 eelf_i386.c:5026 eelf_i386_be.c:461
-#: eelf_i386_fbsd.c:501 eelf_i386_ldso.c:476 eelf_i386_sol2.c:632
-#: eelf_i386_vxworks.c:528 eelf_iamcu.c:5004 eelf_k1om.c:5360
-#: eelf_k1om_fbsd.c:5340 eelf_l1om.c:5360 eelf_l1om_fbsd.c:5340
-#: eelf_x86_64.c:5407 eelf_x86_64_cloudabi.c:504 eelf_x86_64_fbsd.c:504
-#: eelf_x86_64_sol2.c:635
+#: eelf32_x86_64.c:5580 eelf_i386.c:5199 eelf_i386_be.c:480
+#: eelf_i386_fbsd.c:520 eelf_i386_haiku.c:520 eelf_i386_ldso.c:495
+#: eelf_i386_sol2.c:652 eelf_i386_vxworks.c:547 eelf_iamcu.c:520
+#: eelf_k1om.c:5511 eelf_k1om_fbsd.c:520 eelf_l1om.c:5511 eelf_l1om_fbsd.c:520
+#: eelf_x86_64.c:5580 eelf_x86_64_cloudabi.c:523 eelf_x86_64_fbsd.c:523
+#: eelf_x86_64_haiku.c:523 eelf_x86_64_sol2.c:655
msgid "%F%P: invalid number for -z call-nop=suffix-: %s\n"
msgstr "%F%P: неправилно чиÑло за -z call-nop=suffix-: %s\n"
-#: eelf32_x86_64.c:5412 eelf_i386.c:5031 eelf_i386_be.c:466
-#: eelf_i386_fbsd.c:506 eelf_i386_ldso.c:481 eelf_i386_sol2.c:637
-#: eelf_i386_vxworks.c:533 eelf_iamcu.c:5009 eelf_k1om.c:5365
-#: eelf_k1om_fbsd.c:5345 eelf_l1om.c:5365 eelf_l1om_fbsd.c:5345
-#: eelf_x86_64.c:5412 eelf_x86_64_cloudabi.c:509 eelf_x86_64_fbsd.c:509
-#: eelf_x86_64_sol2.c:640
+#: eelf32_x86_64.c:5585 eelf_i386.c:5204 eelf_i386_be.c:485
+#: eelf_i386_fbsd.c:525 eelf_i386_haiku.c:525 eelf_i386_ldso.c:500
+#: eelf_i386_sol2.c:657 eelf_i386_vxworks.c:552 eelf_iamcu.c:525
+#: eelf_k1om.c:5516 eelf_k1om_fbsd.c:525 eelf_l1om.c:5516 eelf_l1om_fbsd.c:525
+#: eelf_x86_64.c:5585 eelf_x86_64_cloudabi.c:528 eelf_x86_64_fbsd.c:528
+#: eelf_x86_64_haiku.c:528 eelf_x86_64_sol2.c:660
msgid "%F%P: unsupported option: -z %s\n"
msgstr "%F%P: неразпозната опциÑ: -z %s\n"
-#: eelf32_x86_64.c:5434 eelf_i386.c:5053 eelf_i386_fbsd.c:528
-#: eelf_x86_64.c:5434 eelf_x86_64_cloudabi.c:531 eelf_x86_64_fbsd.c:531
-#: eelf_x86_64_sol2.c:662
+#: eelf32_x86_64.c:5607 eelf_i386.c:5226 eelf_i386_fbsd.c:547
+#: eelf_i386_haiku.c:547 eelf_x86_64.c:5607 eelf_x86_64_cloudabi.c:550
+#: eelf_x86_64_fbsd.c:550 eelf_x86_64_haiku.c:550 eelf_x86_64_sol2.c:682
msgid "%F%P: invalid option for -z cet-report=: %s\n"
msgstr ""
-#: eelf32_x86_64.c:5471 eelf_i386.c:5090 eelf_i386_be.c:482
-#: eelf_i386_fbsd.c:565 eelf_i386_ldso.c:506 eelf_i386_sol2.c:662
-#: eelf_i386_vxworks.c:554 eelf_iamcu.c:5034 eelf_k1om.c:5390
-#: eelf_k1om_fbsd.c:5370 eelf_l1om.c:5390 eelf_l1om_fbsd.c:5370
-#: eelf_x86_64.c:5474 eelf_x86_64_cloudabi.c:571 eelf_x86_64_fbsd.c:571
-#: eelf_x86_64_sol2.c:702
+#: eelf32_x86_64.c:5621 eelf_i386.c:5240 eelf_i386_fbsd.c:561
+#: eelf_i386_haiku.c:561 eelf_x86_64.c:5621 eelf_x86_64_cloudabi.c:564
+#: eelf_x86_64_fbsd.c:564 eelf_x86_64_haiku.c:564 eelf_x86_64_sol2.c:696
+msgid "%F%P: invalid x86-64 ISA level: %s\n"
+msgstr "%F%P: неправилно x86-64 ISA ниво: %s\n"
+
+#: eelf32_x86_64.c:5663 eelf_i386.c:5282 eelf_i386_be.c:501
+#: eelf_i386_fbsd.c:603 eelf_i386_haiku.c:603 eelf_i386_ldso.c:525
+#: eelf_i386_sol2.c:682 eelf_i386_vxworks.c:573 eelf_iamcu.c:550
+#: eelf_k1om.c:5541 eelf_k1om_fbsd.c:550 eelf_l1om.c:5541 eelf_l1om_fbsd.c:550
+#: eelf_x86_64.c:5716 eelf_x86_64_cloudabi.c:659 eelf_x86_64_fbsd.c:659
+#: eelf_x86_64_haiku.c:659 eelf_x86_64_sol2.c:791
#, c-format
msgid " -z noextern-protected-data Do not treat protected data symbol as external\n"
msgstr ""
-#: eelf32_x86_64.c:5474 eelf32lppc.c:802 eelf32lppclinux.c:802
-#: eelf32lppcnto.c:802 eelf32lppcsim.c:802 eelf32ppc.c:802
-#: eelf32ppc_fbsd.c:802 eelf32ppclinux.c:802 eelf32ppcnto.c:802
-#: eelf32ppcsim.c:802 eelf32ppcvxworks.c:780 eelf32ppcwindiss.c:802
-#: eelf64lppc.c:1282 eelf64ppc.c:1282 eelf64ppc_fbsd.c:1282 eelf_i386.c:5093
-#: eelf_i386_be.c:485 eelf_i386_fbsd.c:568 eelf_i386_ldso.c:509
-#: eelf_i386_sol2.c:665 eelf_i386_vxworks.c:557 eelf_iamcu.c:5037
-#: eelf_k1om.c:5393 eelf_k1om_fbsd.c:5373 eelf_l1om.c:5393
-#: eelf_l1om_fbsd.c:5373 eelf_x86_64.c:5477 eelf_x86_64_cloudabi.c:574
-#: eelf_x86_64_fbsd.c:574 eelf_x86_64_sol2.c:705 eppclynx.c:802
+#: eelf32_x86_64.c:5665 eelf_i386.c:5284 eelf_i386_be.c:503
+#: eelf_i386_fbsd.c:605 eelf_i386_haiku.c:605 eelf_i386_ldso.c:527
+#: eelf_i386_sol2.c:684 eelf_i386_vxworks.c:575 eelf_iamcu.c:552
+#: eelf_k1om.c:5543 eelf_k1om_fbsd.c:552 eelf_l1om.c:5543 eelf_l1om_fbsd.c:552
+#: eelf_x86_64.c:5718 eelf_x86_64_cloudabi.c:661 eelf_x86_64_fbsd.c:661
+#: eelf_x86_64_haiku.c:661 eelf_x86_64_sol2.c:793
+#, c-format
+msgid " -z indirect-extern-access Enable indirect external access\n"
+msgstr ""
+
+#: eelf32_x86_64.c:5667 eelf_i386.c:5286 eelf_i386_be.c:505
+#: eelf_i386_fbsd.c:607 eelf_i386_haiku.c:607 eelf_i386_ldso.c:529
+#: eelf_i386_sol2.c:686 eelf_i386_vxworks.c:577 eelf_iamcu.c:554
+#: eelf_k1om.c:5545 eelf_k1om_fbsd.c:554 eelf_l1om.c:5545 eelf_l1om_fbsd.c:554
+#: eelf_x86_64.c:5720 eelf_x86_64_cloudabi.c:663 eelf_x86_64_fbsd.c:663
+#: eelf_x86_64_haiku.c:663 eelf_x86_64_sol2.c:795
+#, c-format
+msgid " -z noindirect-extern-access Disable indirect external access (default)\n"
+msgstr ""
+
+#: eelf32_x86_64.c:5670 eelf32lppc.c:817 eelf32lppclinux.c:817
+#: eelf32lppcnto.c:817 eelf32lppcsim.c:817 eelf32ppc.c:817
+#: eelf32ppc_fbsd.c:817 eelf32ppchaiku.c:817 eelf32ppclinux.c:817
+#: eelf32ppcnto.c:817 eelf32ppcsim.c:817 eelf32ppcvxworks.c:795
+#: eelf32ppcwindiss.c:817 eelf64lppc.c:1346 eelf64lppc_fbsd.c:1346
+#: eelf64ppc.c:1346 eelf64ppc_fbsd.c:1346 eelf_i386.c:5289 eelf_i386_be.c:508
+#: eelf_i386_fbsd.c:610 eelf_i386_haiku.c:610 eelf_i386_ldso.c:532
+#: eelf_i386_sol2.c:689 eelf_i386_vxworks.c:580 eelf_iamcu.c:557
+#: eelf_k1om.c:5548 eelf_k1om_fbsd.c:557 eelf_l1om.c:5548 eelf_l1om_fbsd.c:557
+#: eelf_x86_64.c:5723 eelf_x86_64_cloudabi.c:666 eelf_x86_64_fbsd.c:666
+#: eelf_x86_64_haiku.c:666 eelf_x86_64_sol2.c:798
#, c-format
msgid ""
" -z dynamic-undefined-weak Make undefined weak symbols dynamic\n"
" -z nodynamic-undefined-weak Do not make undefined weak symbols dynamic\n"
msgstr ""
-#: eelf32_x86_64.c:5478 eelf_x86_64.c:5481 eelf_x86_64_cloudabi.c:578
-#: eelf_x86_64_fbsd.c:578 eelf_x86_64_sol2.c:709
+#: eelf32_x86_64.c:5674 eelf_x86_64.c:5727 eelf_x86_64_cloudabi.c:670
+#: eelf_x86_64_fbsd.c:670 eelf_x86_64_haiku.c:670 eelf_x86_64_sol2.c:802
#, c-format
msgid " -z noreloc-overflow Disable relocation overflow check\n"
msgstr ""
-#: eelf32_x86_64.c:5481 eelf_i386.c:5097 eelf_i386_be.c:489
-#: eelf_i386_fbsd.c:572 eelf_i386_ldso.c:513 eelf_i386_sol2.c:669
-#: eelf_i386_vxworks.c:561 eelf_iamcu.c:5041 eelf_k1om.c:5397
-#: eelf_k1om_fbsd.c:5377 eelf_l1om.c:5397 eelf_l1om_fbsd.c:5377
-#: eelf_x86_64.c:5484 eelf_x86_64_cloudabi.c:581 eelf_x86_64_fbsd.c:581
-#: eelf_x86_64_sol2.c:712
+#: eelf32_x86_64.c:5677 eelf_i386.c:5293 eelf_i386_be.c:512
+#: eelf_i386_fbsd.c:614 eelf_i386_haiku.c:614 eelf_i386_ldso.c:536
+#: eelf_i386_sol2.c:693 eelf_i386_vxworks.c:584 eelf_iamcu.c:561
+#: eelf_k1om.c:5552 eelf_k1om_fbsd.c:561 eelf_l1om.c:5552 eelf_l1om_fbsd.c:561
+#: eelf_x86_64.c:5730 eelf_x86_64_cloudabi.c:673 eelf_x86_64_fbsd.c:673
+#: eelf_x86_64_haiku.c:673 eelf_x86_64_sol2.c:805
#, c-format
msgid " -z call-nop=PADDING Use PADDING as 1-byte NOP for branch\n"
msgstr ""
-#: eelf32_x86_64.c:5484 eelf_i386.c:5100 eelf_i386_fbsd.c:575
-#: eelf_x86_64.c:5487 eelf_x86_64_cloudabi.c:584 eelf_x86_64_fbsd.c:584
-#: eelf_x86_64_sol2.c:715
+#: eelf32_x86_64.c:5680 eelf_i386.c:5296 eelf_i386_fbsd.c:617
+#: eelf_i386_haiku.c:617 eelf_x86_64.c:5733 eelf_x86_64_cloudabi.c:676
+#: eelf_x86_64_fbsd.c:676 eelf_x86_64_haiku.c:676 eelf_x86_64_sol2.c:808
#, c-format
msgid " -z ibtplt Generate IBT-enabled PLT entries\n"
msgstr ""
-#: eelf32_x86_64.c:5486 eelf_i386.c:5102 eelf_i386_fbsd.c:577
-#: eelf_x86_64.c:5489 eelf_x86_64_cloudabi.c:586 eelf_x86_64_fbsd.c:586
-#: eelf_x86_64_sol2.c:717
+#: eelf32_x86_64.c:5682 eelf_i386.c:5298 eelf_i386_fbsd.c:619
+#: eelf_i386_haiku.c:619 eelf_x86_64.c:5735 eelf_x86_64_cloudabi.c:678
+#: eelf_x86_64_fbsd.c:678 eelf_x86_64_haiku.c:678 eelf_x86_64_sol2.c:810
#, c-format
msgid " -z ibt Generate GNU_PROPERTY_X86_FEATURE_1_IBT\n"
msgstr ""
-#: eelf32_x86_64.c:5488 eelf_i386.c:5104 eelf_i386_fbsd.c:579
-#: eelf_x86_64.c:5491 eelf_x86_64_cloudabi.c:588 eelf_x86_64_fbsd.c:588
-#: eelf_x86_64_sol2.c:719
+#: eelf32_x86_64.c:5684 eelf_i386.c:5300 eelf_i386_fbsd.c:621
+#: eelf_i386_haiku.c:621 eelf_x86_64.c:5737 eelf_x86_64_cloudabi.c:680
+#: eelf_x86_64_fbsd.c:680 eelf_x86_64_haiku.c:680 eelf_x86_64_sol2.c:812
#, c-format
msgid " -z shstk Generate GNU_PROPERTY_X86_FEATURE_1_SHSTK\n"
msgstr ""
-#: eelf32_x86_64.c:5490 eelf_i386.c:5106 eelf_i386_fbsd.c:581
-#: eelf_x86_64.c:5493 eelf_x86_64_cloudabi.c:590 eelf_x86_64_fbsd.c:590
-#: eelf_x86_64_sol2.c:721
+#: eelf32_x86_64.c:5686 eelf_i386.c:5302 eelf_i386_fbsd.c:623
+#: eelf_i386_haiku.c:623 eelf_x86_64.c:5739 eelf_x86_64_cloudabi.c:682
+#: eelf_x86_64_fbsd.c:682 eelf_x86_64_haiku.c:682 eelf_x86_64_sol2.c:814
#, c-format
msgid ""
" -z cet-report=[none|warning|error] (default: none)\n"
" Report missing IBT and SHSTK properties\n"
msgstr ""
-#: eelf32b4300.c:685 eelf32bmip.c:685 eelf32bmipn32.c:699 eelf32bsmip.c:699
-#: eelf32btsmip.c:685 eelf32btsmip_fbsd.c:685 eelf32btsmipn32.c:685
-#: eelf32btsmipn32_fbsd.c:685 eelf32ebmip.c:685 eelf32ebmipvxworks.c:724
-#: eelf32elmip.c:685 eelf32elmipvxworks.c:724 eelf32l4300.c:685
-#: eelf32lmip.c:685 eelf32lr5900.c:548 eelf32lr5900n32.c:547 eelf32lsmip.c:685
-#: eelf32ltsmip.c:685 eelf32ltsmip_fbsd.c:685 eelf32ltsmipn32.c:685
-#: eelf32ltsmipn32_fbsd.c:685 eelf32mipswindiss.c:522 eelf64bmip.c:699
-#: eelf64btsmip.c:685 eelf64btsmip_fbsd.c:685 eelf64ltsmip.c:685
-#: eelf64ltsmip_fbsd.c:685
+#: eelf32_x86_64.c:5690 eelf_i386.c:5306 eelf_i386_fbsd.c:627
+#: eelf_i386_haiku.c:627 eelf_x86_64.c:5743 eelf_x86_64_cloudabi.c:686
+#: eelf_x86_64_fbsd.c:686 eelf_x86_64_haiku.c:686 eelf_x86_64_sol2.c:818
+#, c-format
+msgid " -z report-relative-reloc Report relative relocations\n"
+msgstr ""
+
+#: eelf32_x86_64.c:5693 eelf_i386.c:5309 eelf_i386_fbsd.c:630
+#: eelf_i386_haiku.c:630 eelf_x86_64.c:5746 eelf_x86_64_cloudabi.c:689
+#: eelf_x86_64_fbsd.c:689 eelf_x86_64_haiku.c:689 eelf_x86_64_sol2.c:821
+#, c-format
+msgid " -z x86-64-{baseline|v[234]} Mark x86-64-{baseline|v[234]} ISA level as needed\n"
+msgstr ""
+
+#: eelf32_x86_64.c:5696 eelf64lppc.c:1350 eelf64lppc_fbsd.c:1350
+#: eelf64ppc.c:1350 eelf64ppc_fbsd.c:1350 eelf_i386.c:5312
+#: eelf_i386_fbsd.c:633 eelf_i386_haiku.c:633 eelf_x86_64.c:5763
+#: eelf_x86_64_cloudabi.c:706 eelf_x86_64_fbsd.c:706 eelf_x86_64_haiku.c:706
+#: eelf_x86_64_sol2.c:838
+#, c-format
+msgid " -z pack-relative-relocs Pack relative relocations\n"
+msgstr ""
+
+#: eelf32_x86_64.c:5698 eelf64lppc.c:1352 eelf64lppc_fbsd.c:1352
+#: eelf64ppc.c:1352 eelf64ppc_fbsd.c:1352 eelf_i386.c:5314
+#: eelf_i386_fbsd.c:635 eelf_i386_haiku.c:635 eelf_x86_64.c:5765
+#: eelf_x86_64_cloudabi.c:708 eelf_x86_64_fbsd.c:708 eelf_x86_64_haiku.c:708
+#: eelf_x86_64_sol2.c:840
+#, c-format
+msgid " -z nopack-relative-relocs Do not pack relative relocations (default)\n"
+msgstr ""
+
+#: eelf32b4300.c:700 eelf32bmip.c:700 eelf32bmipn32.c:714 eelf32bsmip.c:714
+#: eelf32btsmip.c:700 eelf32btsmip_fbsd.c:700 eelf32btsmipn32.c:700
+#: eelf32btsmipn32_fbsd.c:700 eelf32ebmip.c:700 eelf32ebmipvxworks.c:739
+#: eelf32elmip.c:700 eelf32elmipvxworks.c:739 eelf32l4300.c:700
+#: eelf32lmip.c:700 eelf32lr5900.c:559 eelf32lr5900n32.c:558 eelf32lsmip.c:700
+#: eelf32ltsmip.c:700 eelf32ltsmip_fbsd.c:700 eelf32ltsmipn32.c:700
+#: eelf32ltsmipn32_fbsd.c:700 eelf32mipswindiss.c:533 eelf64bmip.c:714
+#: eelf64btsmip.c:700 eelf64btsmip_fbsd.c:700 eelf64ltsmip.c:700
+#: eelf64ltsmip_fbsd.c:700 eelf_mipsel_haiku.c:700
#, c-format
msgid " --insn32 Only generate 32-bit microMIPS instructions\n"
msgstr ""
-#: eelf32b4300.c:688 eelf32bmip.c:688 eelf32bmipn32.c:702 eelf32bsmip.c:702
-#: eelf32btsmip.c:688 eelf32btsmip_fbsd.c:688 eelf32btsmipn32.c:688
-#: eelf32btsmipn32_fbsd.c:688 eelf32ebmip.c:688 eelf32ebmipvxworks.c:727
-#: eelf32elmip.c:688 eelf32elmipvxworks.c:727 eelf32l4300.c:688
-#: eelf32lmip.c:688 eelf32lr5900.c:551 eelf32lr5900n32.c:550 eelf32lsmip.c:688
-#: eelf32ltsmip.c:688 eelf32ltsmip_fbsd.c:688 eelf32ltsmipn32.c:688
-#: eelf32ltsmipn32_fbsd.c:688 eelf32mipswindiss.c:525 eelf64bmip.c:702
-#: eelf64btsmip.c:688 eelf64btsmip_fbsd.c:688 eelf64ltsmip.c:688
-#: eelf64ltsmip_fbsd.c:688
+#: eelf32b4300.c:703 eelf32bmip.c:703 eelf32bmipn32.c:717 eelf32bsmip.c:717
+#: eelf32btsmip.c:703 eelf32btsmip_fbsd.c:703 eelf32btsmipn32.c:703
+#: eelf32btsmipn32_fbsd.c:703 eelf32ebmip.c:703 eelf32ebmipvxworks.c:742
+#: eelf32elmip.c:703 eelf32elmipvxworks.c:742 eelf32l4300.c:703
+#: eelf32lmip.c:703 eelf32lr5900.c:562 eelf32lr5900n32.c:561 eelf32lsmip.c:703
+#: eelf32ltsmip.c:703 eelf32ltsmip_fbsd.c:703 eelf32ltsmipn32.c:703
+#: eelf32ltsmipn32_fbsd.c:703 eelf32mipswindiss.c:536 eelf64bmip.c:717
+#: eelf64btsmip.c:703 eelf64btsmip_fbsd.c:703 eelf64ltsmip.c:703
+#: eelf64ltsmip_fbsd.c:703 eelf_mipsel_haiku.c:703
#, c-format
msgid " --no-insn32 Generate all microMIPS instructions\n"
msgstr ""
-#: eelf32b4300.c:691 eelf32bmip.c:691 eelf32bmipn32.c:705 eelf32bsmip.c:705
-#: eelf32btsmip.c:691 eelf32btsmip_fbsd.c:691 eelf32btsmipn32.c:691
-#: eelf32btsmipn32_fbsd.c:691 eelf32ebmip.c:691 eelf32ebmipvxworks.c:730
-#: eelf32elmip.c:691 eelf32elmipvxworks.c:730 eelf32l4300.c:691
-#: eelf32lmip.c:691 eelf32lr5900.c:554 eelf32lr5900n32.c:553 eelf32lsmip.c:691
-#: eelf32ltsmip.c:691 eelf32ltsmip_fbsd.c:691 eelf32ltsmipn32.c:691
-#: eelf32ltsmipn32_fbsd.c:691 eelf32mipswindiss.c:528 eelf64bmip.c:705
-#: eelf64btsmip.c:691 eelf64btsmip_fbsd.c:691 eelf64ltsmip.c:691
-#: eelf64ltsmip_fbsd.c:691
+#: eelf32b4300.c:706 eelf32bmip.c:706 eelf32bmipn32.c:720 eelf32bsmip.c:720
+#: eelf32btsmip.c:706 eelf32btsmip_fbsd.c:706 eelf32btsmipn32.c:706
+#: eelf32btsmipn32_fbsd.c:706 eelf32ebmip.c:706 eelf32ebmipvxworks.c:745
+#: eelf32elmip.c:706 eelf32elmipvxworks.c:745 eelf32l4300.c:706
+#: eelf32lmip.c:706 eelf32lr5900.c:565 eelf32lr5900n32.c:564 eelf32lsmip.c:706
+#: eelf32ltsmip.c:706 eelf32ltsmip_fbsd.c:706 eelf32ltsmipn32.c:706
+#: eelf32ltsmipn32_fbsd.c:706 eelf32mipswindiss.c:539 eelf64bmip.c:720
+#: eelf64btsmip.c:706 eelf64btsmip_fbsd.c:706 eelf64ltsmip.c:706
+#: eelf64ltsmip_fbsd.c:706 eelf_mipsel_haiku.c:706
#, c-format
msgid ""
" --ignore-branch-isa Accept invalid branch relocations requiring\n"
" an ISA mode switch\n"
msgstr ""
-#: eelf32b4300.c:695 eelf32bmip.c:695 eelf32bmipn32.c:709 eelf32bsmip.c:709
-#: eelf32btsmip.c:695 eelf32btsmip_fbsd.c:695 eelf32btsmipn32.c:695
-#: eelf32btsmipn32_fbsd.c:695 eelf32ebmip.c:695 eelf32ebmipvxworks.c:734
-#: eelf32elmip.c:695 eelf32elmipvxworks.c:734 eelf32l4300.c:695
-#: eelf32lmip.c:695 eelf32lr5900.c:558 eelf32lr5900n32.c:557 eelf32lsmip.c:695
-#: eelf32ltsmip.c:695 eelf32ltsmip_fbsd.c:695 eelf32ltsmipn32.c:695
-#: eelf32ltsmipn32_fbsd.c:695 eelf32mipswindiss.c:532 eelf64bmip.c:709
-#: eelf64btsmip.c:695 eelf64btsmip_fbsd.c:695 eelf64ltsmip.c:695
-#: eelf64ltsmip_fbsd.c:695
+#: eelf32b4300.c:710 eelf32bmip.c:710 eelf32bmipn32.c:724 eelf32bsmip.c:724
+#: eelf32btsmip.c:710 eelf32btsmip_fbsd.c:710 eelf32btsmipn32.c:710
+#: eelf32btsmipn32_fbsd.c:710 eelf32ebmip.c:710 eelf32ebmipvxworks.c:749
+#: eelf32elmip.c:710 eelf32elmipvxworks.c:749 eelf32l4300.c:710
+#: eelf32lmip.c:710 eelf32lr5900.c:569 eelf32lr5900n32.c:568 eelf32lsmip.c:710
+#: eelf32ltsmip.c:710 eelf32ltsmip_fbsd.c:710 eelf32ltsmipn32.c:710
+#: eelf32ltsmipn32_fbsd.c:710 eelf32mipswindiss.c:543 eelf64bmip.c:724
+#: eelf64btsmip.c:710 eelf64btsmip_fbsd.c:710 eelf64ltsmip.c:710
+#: eelf64ltsmip_fbsd.c:710 eelf_mipsel_haiku.c:710
#, c-format
msgid ""
" --no-ignore-branch-isa Reject invalid branch relocations requiring\n"
" an ISA mode switch\n"
msgstr ""
-#: eelf32b4300.c:699 eelf32bmip.c:699 eelf32bmipn32.c:713 eelf32bsmip.c:713
-#: eelf32btsmip.c:699 eelf32btsmip_fbsd.c:699 eelf32btsmipn32.c:699
-#: eelf32btsmipn32_fbsd.c:699 eelf32ebmip.c:699 eelf32ebmipvxworks.c:738
-#: eelf32elmip.c:699 eelf32elmipvxworks.c:738 eelf32l4300.c:699
-#: eelf32lmip.c:699 eelf32lr5900.c:562 eelf32lr5900n32.c:561 eelf32lsmip.c:699
-#: eelf32ltsmip.c:699 eelf32ltsmip_fbsd.c:699 eelf32ltsmipn32.c:699
-#: eelf32ltsmipn32_fbsd.c:699 eelf32mipswindiss.c:536 eelf64bmip.c:713
-#: eelf64btsmip.c:699 eelf64btsmip_fbsd.c:699 eelf64ltsmip.c:699
-#: eelf64ltsmip_fbsd.c:699
+#: eelf32b4300.c:714 eelf32bmip.c:714 eelf32bmipn32.c:728 eelf32bsmip.c:728
+#: eelf32btsmip.c:714 eelf32btsmip_fbsd.c:714 eelf32btsmipn32.c:714
+#: eelf32btsmipn32_fbsd.c:714 eelf32ebmip.c:714 eelf32ebmipvxworks.c:753
+#: eelf32elmip.c:714 eelf32elmipvxworks.c:753 eelf32l4300.c:714
+#: eelf32lmip.c:714 eelf32lr5900.c:573 eelf32lr5900n32.c:572 eelf32lsmip.c:714
+#: eelf32ltsmip.c:714 eelf32ltsmip_fbsd.c:714 eelf32ltsmipn32.c:714
+#: eelf32ltsmipn32_fbsd.c:714 eelf32mipswindiss.c:547 eelf64bmip.c:728
+#: eelf64btsmip.c:714 eelf64btsmip_fbsd.c:714 eelf64ltsmip.c:714
+#: eelf64ltsmip_fbsd.c:714 eelf_mipsel_haiku.c:714
#, c-format
msgid " --compact-branches Generate compact branches/jumps for MIPS R6\n"
msgstr ""
-#: eelf32b4300.c:702 eelf32bmip.c:702 eelf32bmipn32.c:716 eelf32bsmip.c:716
-#: eelf32btsmip.c:702 eelf32btsmip_fbsd.c:702 eelf32btsmipn32.c:702
-#: eelf32btsmipn32_fbsd.c:702 eelf32ebmip.c:702 eelf32ebmipvxworks.c:741
-#: eelf32elmip.c:702 eelf32elmipvxworks.c:741 eelf32l4300.c:702
-#: eelf32lmip.c:702 eelf32lr5900.c:565 eelf32lr5900n32.c:564 eelf32lsmip.c:702
-#: eelf32ltsmip.c:702 eelf32ltsmip_fbsd.c:702 eelf32ltsmipn32.c:702
-#: eelf32ltsmipn32_fbsd.c:702 eelf32mipswindiss.c:539 eelf64bmip.c:716
-#: eelf64btsmip.c:702 eelf64btsmip_fbsd.c:702 eelf64ltsmip.c:702
-#: eelf64ltsmip_fbsd.c:702
+#: eelf32b4300.c:717 eelf32bmip.c:717 eelf32bmipn32.c:731 eelf32bsmip.c:731
+#: eelf32btsmip.c:717 eelf32btsmip_fbsd.c:717 eelf32btsmipn32.c:717
+#: eelf32btsmipn32_fbsd.c:717 eelf32ebmip.c:717 eelf32ebmipvxworks.c:756
+#: eelf32elmip.c:717 eelf32elmipvxworks.c:756 eelf32l4300.c:717
+#: eelf32lmip.c:717 eelf32lr5900.c:576 eelf32lr5900n32.c:575 eelf32lsmip.c:717
+#: eelf32ltsmip.c:717 eelf32ltsmip_fbsd.c:717 eelf32ltsmipn32.c:717
+#: eelf32ltsmipn32_fbsd.c:717 eelf32mipswindiss.c:550 eelf64bmip.c:731
+#: eelf64btsmip.c:717 eelf64btsmip_fbsd.c:717 eelf64ltsmip.c:717
+#: eelf64ltsmip_fbsd.c:717 eelf_mipsel_haiku.c:717
#, c-format
msgid " --no-compact-branches Generate delay slot branches/jumps for MIPS R6\n"
msgstr ""
-#: eelf32bfin.c:441 eelf32bfinfd.c:466
+#: eelf32bfin.c:456 eelf32bfinfd.c:481
#, c-format
msgid " --code-in-l1 Put code in L1\n"
msgstr ""
-#: eelf32bfin.c:443 eelf32bfinfd.c:468
+#: eelf32bfin.c:458 eelf32bfinfd.c:483
#, c-format
msgid " --data-in-l1 Put data in L1\n"
msgstr ""
@@ -4867,176 +5131,184 @@ msgid "%X%P: %pB: can not create runtime reloc information: %s\n"
msgstr ""
#: eelf32lppc.c:96 eelf32lppclinux.c:96 eelf32lppcnto.c:96 eelf32lppcsim.c:96
-#: eelf32ppc.c:96 eelf32ppc_fbsd.c:96 eelf32ppclinux.c:96 eelf32ppcnto.c:96
-#: eelf32ppcsim.c:96 eelf32ppcwindiss.c:96 eppclynx.c:96
+#: eelf32ppc.c:96 eelf32ppc_fbsd.c:96 eelf32ppchaiku.c:96 eelf32ppclinux.c:96
+#: eelf32ppcnto.c:96 eelf32ppcsim.c:96 eelf32ppcwindiss.c:96
msgid "%X%P: select_plt_layout problem %E\n"
msgstr ""
#: eelf32lppc.c:160 eelf32lppclinux.c:160 eelf32lppcnto.c:160
#: eelf32lppcsim.c:160 eelf32ppc.c:160 eelf32ppc_fbsd.c:160
-#: eelf32ppclinux.c:160 eelf32ppcnto.c:160 eelf32ppcsim.c:160
-#: eelf32ppcvxworks.c:105 eelf32ppcwindiss.c:160 eelf64lppc.c:319
-#: eelf64ppc.c:319 eelf64ppc_fbsd.c:319 eppclynx.c:160
+#: eelf32ppchaiku.c:160 eelf32ppclinux.c:160 eelf32ppcnto.c:160
+#: eelf32ppcsim.c:160 eelf32ppcvxworks.c:105 eelf32ppcwindiss.c:160
+#: eelf64lppc.c:321 eelf64lppc_fbsd.c:321 eelf64ppc.c:321 eelf64ppc_fbsd.c:321
msgid "%X%P: inline PLT: %E\n"
msgstr ""
#: eelf32lppc.c:168 eelf32lppclinux.c:168 eelf32lppcnto.c:168
#: eelf32lppcsim.c:168 eelf32ppc.c:168 eelf32ppc_fbsd.c:168
-#: eelf32ppclinux.c:168 eelf32ppcnto.c:168 eelf32ppcsim.c:168
-#: eelf32ppcvxworks.c:113 eelf32ppcwindiss.c:168 eelf64lppc.c:330
-#: eelf64ppc.c:330 eelf64ppc_fbsd.c:330 eppclynx.c:168
+#: eelf32ppchaiku.c:168 eelf32ppclinux.c:168 eelf32ppcnto.c:168
+#: eelf32ppcsim.c:168 eelf32ppcvxworks.c:113 eelf32ppcwindiss.c:168
+#: eelf64lppc.c:325 eelf64lppc.c:344 eelf64lppc_fbsd.c:325
+#: eelf64lppc_fbsd.c:344 eelf64ppc.c:325 eelf64ppc.c:344 eelf64ppc_fbsd.c:325
+#: eelf64ppc_fbsd.c:344
msgid "%X%P: TLS problem %E\n"
msgstr ""
#: eelf32lppc.c:255 eelf32lppclinux.c:255 eelf32lppcnto.c:255
#: eelf32lppcsim.c:255 eelf32ppc.c:255 eelf32ppc_fbsd.c:255
-#: eelf32ppclinux.c:255 eelf32ppcnto.c:255 eelf32ppcsim.c:255
-#: eelf32ppcvxworks.c:200 eelf32ppcwindiss.c:255 eppclynx.c:255
+#: eelf32ppchaiku.c:255 eelf32ppclinux.c:255 eelf32ppcnto.c:255
+#: eelf32ppcsim.c:255 eelf32ppcvxworks.c:200 eelf32ppcwindiss.c:255
msgid "%X%P: ppc_finish_symbols problem %E\n"
msgstr ""
-#: eelf32lppc.c:743 eelf32lppclinux.c:743 eelf32lppcnto.c:743
-#: eelf32lppcsim.c:743 eelf32ppc.c:743 eelf32ppc_fbsd.c:743
-#: eelf32ppclinux.c:743 eelf32ppcnto.c:743 eelf32ppcsim.c:743
-#: eelf32ppcvxworks.c:717 eelf32ppcwindiss.c:743 eelf64lppc.c:1175
-#: eelf64ppc.c:1175 eelf64ppc_fbsd.c:1175 eppclynx.c:743
+#: eelf32lppc.c:758 eelf32lppclinux.c:758 eelf32lppcnto.c:758
+#: eelf32lppcsim.c:758 eelf32ppc.c:758 eelf32ppc_fbsd.c:758
+#: eelf32ppchaiku.c:758 eelf32ppclinux.c:758 eelf32ppcnto.c:758
+#: eelf32ppcsim.c:758 eelf32ppcvxworks.c:732 eelf32ppcwindiss.c:758
+#: eelf64lppc.c:1213 eelf64lppc_fbsd.c:1213 eelf64ppc.c:1213
+#: eelf64ppc_fbsd.c:1213
msgid "%F%P: invalid --plt-align `%s'\n"
msgstr "%F%P: неправилен --plt-align '%s'\n"
-#: eelf32lppc.c:776 eelf32lppclinux.c:776 eelf32lppcnto.c:776
-#: eelf32lppcsim.c:776 eelf32ppc.c:776 eelf32ppc_fbsd.c:776
-#: eelf32ppclinux.c:776 eelf32ppcnto.c:776 eelf32ppcsim.c:776
-#: eelf32ppcvxworks.c:750 eelf32ppcwindiss.c:776 eppclynx.c:776
+#: eelf32lppc.c:791 eelf32lppclinux.c:791 eelf32lppcnto.c:791
+#: eelf32lppcsim.c:791 eelf32ppc.c:791 eelf32ppc_fbsd.c:791
+#: eelf32ppchaiku.c:791 eelf32ppclinux.c:791 eelf32ppcnto.c:791
+#: eelf32ppcsim.c:791 eelf32ppcvxworks.c:765 eelf32ppcwindiss.c:791
msgid "%F%P: invalid pagesize `%s'\n"
msgstr "%F%P: неправилен размер за Ñтраница '%s'\n"
-#: eelf32lppc.c:806 eelf32lppclinux.c:806 eelf32lppcnto.c:806
-#: eelf32lppcsim.c:806 eelf32ppc.c:806 eelf32ppc_fbsd.c:806
-#: eelf32ppclinux.c:806 eelf32ppcnto.c:806 eelf32ppcsim.c:806
-#: eelf32ppcvxworks.c:784 eelf32ppcwindiss.c:806 eelf64lppc.c:1320
-#: eelf64ppc.c:1320 eelf64ppc_fbsd.c:1320 eppclynx.c:806
+#: eelf32lppc.c:821 eelf32lppclinux.c:821 eelf32lppcnto.c:821
+#: eelf32lppcsim.c:821 eelf32ppc.c:821 eelf32ppc_fbsd.c:821
+#: eelf32ppchaiku.c:821 eelf32ppclinux.c:821 eelf32ppcnto.c:821
+#: eelf32ppcsim.c:821 eelf32ppcvxworks.c:799 eelf32ppcwindiss.c:821
+#: eelf64lppc.c:1398 eelf64lppc_fbsd.c:1398 eelf64ppc.c:1398
+#: eelf64ppc_fbsd.c:1398
#, c-format
msgid " --emit-stub-syms Label linker stubs with a symbol\n"
msgstr ""
-#: eelf32lppc.c:809 eelf32lppclinux.c:809 eelf32lppcnto.c:809
-#: eelf32lppcsim.c:809 eelf32ppc.c:809 eelf32ppc_fbsd.c:809
-#: eelf32ppclinux.c:809 eelf32ppcnto.c:809 eelf32ppcsim.c:809
-#: eelf32ppcvxworks.c:787 eelf32ppcwindiss.c:809 eelf64lppc.c:1323
-#: eelf64ppc.c:1323 eelf64ppc_fbsd.c:1323 eppclynx.c:809
+#: eelf32lppc.c:824 eelf32lppclinux.c:824 eelf32lppcnto.c:824
+#: eelf32lppcsim.c:824 eelf32ppc.c:824 eelf32ppc_fbsd.c:824
+#: eelf32ppchaiku.c:824 eelf32ppclinux.c:824 eelf32ppcnto.c:824
+#: eelf32ppcsim.c:824 eelf32ppcvxworks.c:802 eelf32ppcwindiss.c:824
+#: eelf64lppc.c:1401 eelf64lppc_fbsd.c:1401 eelf64ppc.c:1401
+#: eelf64ppc_fbsd.c:1401
#, c-format
msgid " --no-emit-stub-syms Don't label linker stubs with a symbol\n"
msgstr ""
-#: eelf32lppc.c:812 eelf32lppclinux.c:812 eelf32lppcnto.c:812
-#: eelf32lppcsim.c:812 eelf32ppc.c:812 eelf32ppc_fbsd.c:812
-#: eelf32ppclinux.c:812 eelf32ppcnto.c:812 eelf32ppcsim.c:812
-#: eelf32ppcvxworks.c:790 eelf32ppcwindiss.c:812 eelf64lppc.c:1343
-#: eelf64ppc.c:1343 eelf64ppc_fbsd.c:1343 eppclynx.c:812
+#: eelf32lppc.c:827 eelf32lppclinux.c:827 eelf32lppcnto.c:827
+#: eelf32lppcsim.c:827 eelf32ppc.c:827 eelf32ppc_fbsd.c:827
+#: eelf32ppchaiku.c:827 eelf32ppclinux.c:827 eelf32ppcnto.c:827
+#: eelf32ppcsim.c:827 eelf32ppcvxworks.c:805 eelf32ppcwindiss.c:827
+#: eelf64lppc.c:1421 eelf64lppc_fbsd.c:1421 eelf64ppc.c:1421
+#: eelf64ppc_fbsd.c:1421
#, c-format
msgid " --no-tls-optimize Don't try to optimize TLS accesses\n"
msgstr ""
-#: eelf32lppc.c:815 eelf32lppclinux.c:815 eelf32lppcnto.c:815
-#: eelf32lppcsim.c:815 eelf32ppc.c:815 eelf32ppc_fbsd.c:815
-#: eelf32ppclinux.c:815 eelf32ppcnto.c:815 eelf32ppcsim.c:815
-#: eelf32ppcvxworks.c:793 eelf32ppcwindiss.c:815 eelf64lppc.c:1349
-#: eelf64ppc.c:1349 eelf64ppc_fbsd.c:1349 eppclynx.c:815
+#: eelf32lppc.c:830 eelf32lppclinux.c:830 eelf32lppcnto.c:830
+#: eelf32lppcsim.c:830 eelf32ppc.c:830 eelf32ppc_fbsd.c:830
+#: eelf32ppchaiku.c:830 eelf32ppclinux.c:830 eelf32ppcnto.c:830
+#: eelf32ppcsim.c:830 eelf32ppcvxworks.c:808 eelf32ppcwindiss.c:830
+#: eelf64lppc.c:1427 eelf64lppc_fbsd.c:1427 eelf64ppc.c:1427
+#: eelf64ppc_fbsd.c:1427
#, c-format
msgid " --no-tls-get-addr-optimize Don't use a special __tls_get_addr call\n"
msgstr ""
-#: eelf32lppc.c:818 eelf32lppclinux.c:818 eelf32lppcnto.c:818
-#: eelf32lppcsim.c:818 eelf32ppc.c:818 eelf32ppc_fbsd.c:818
-#: eelf32ppclinux.c:818 eelf32ppcnto.c:818 eelf32ppcsim.c:818
-#: eelf32ppcwindiss.c:818 eppclynx.c:818
+#: eelf32lppc.c:833 eelf32lppclinux.c:833 eelf32lppcnto.c:833
+#: eelf32lppcsim.c:833 eelf32ppc.c:833 eelf32ppc_fbsd.c:833
+#: eelf32ppchaiku.c:833 eelf32ppclinux.c:833 eelf32ppcnto.c:833
+#: eelf32ppcsim.c:833 eelf32ppcwindiss.c:833
#, c-format
msgid " --secure-plt Use new-style PLT if possible\n"
msgstr ""
-#: eelf32lppc.c:821 eelf32lppclinux.c:821 eelf32lppcnto.c:821
-#: eelf32lppcsim.c:821 eelf32ppc.c:821 eelf32ppc_fbsd.c:821
-#: eelf32ppclinux.c:821 eelf32ppcnto.c:821 eelf32ppcsim.c:821
-#: eelf32ppcwindiss.c:821 eppclynx.c:821
+#: eelf32lppc.c:836 eelf32lppclinux.c:836 eelf32lppcnto.c:836
+#: eelf32lppcsim.c:836 eelf32ppc.c:836 eelf32ppc_fbsd.c:836
+#: eelf32ppchaiku.c:836 eelf32ppclinux.c:836 eelf32ppcnto.c:836
+#: eelf32ppcsim.c:836 eelf32ppcwindiss.c:836
#, c-format
msgid " --bss-plt Force old-style BSS PLT\n"
msgstr ""
-#: eelf32lppc.c:824 eelf32lppclinux.c:824 eelf32lppcnto.c:824
-#: eelf32lppcsim.c:824 eelf32ppc.c:824 eelf32ppc_fbsd.c:824
-#: eelf32ppclinux.c:824 eelf32ppcnto.c:824 eelf32ppcsim.c:824
-#: eelf32ppcwindiss.c:824 eppclynx.c:824
+#: eelf32lppc.c:839 eelf32lppclinux.c:839 eelf32lppcnto.c:839
+#: eelf32lppcsim.c:839 eelf32ppc.c:839 eelf32ppc_fbsd.c:839
+#: eelf32ppchaiku.c:839 eelf32ppclinux.c:839 eelf32ppcnto.c:839
+#: eelf32ppcsim.c:839 eelf32ppcwindiss.c:839
#, c-format
msgid " --plt-align Align PLT call stubs to fit cache lines\n"
msgstr ""
-#: eelf32lppc.c:827 eelf32lppclinux.c:827 eelf32lppcnto.c:827
-#: eelf32lppcsim.c:827 eelf32ppc.c:827 eelf32ppc_fbsd.c:827
-#: eelf32ppclinux.c:827 eelf32ppcnto.c:827 eelf32ppcsim.c:827
-#: eelf32ppcwindiss.c:827 eelf64lppc.c:1311 eelf64ppc.c:1311
-#: eelf64ppc_fbsd.c:1311 eppclynx.c:827
+#: eelf32lppc.c:842 eelf32lppclinux.c:842 eelf32lppcnto.c:842
+#: eelf32lppcsim.c:842 eelf32ppc.c:842 eelf32ppc_fbsd.c:842
+#: eelf32ppchaiku.c:842 eelf32ppclinux.c:842 eelf32ppcnto.c:842
+#: eelf32ppcsim.c:842 eelf32ppcwindiss.c:842 eelf64lppc.c:1380
+#: eelf64lppc_fbsd.c:1380 eelf64ppc.c:1380 eelf64ppc_fbsd.c:1380
#, c-format
msgid " --no-plt-align Dont't align individual PLT call stubs\n"
msgstr ""
-#: eelf32lppc.c:830 eelf32lppclinux.c:830 eelf32lppcnto.c:830
-#: eelf32lppcsim.c:830 eelf32ppc.c:830 eelf32ppc_fbsd.c:830
-#: eelf32ppclinux.c:830 eelf32ppcnto.c:830 eelf32ppcsim.c:830
-#: eelf32ppcwindiss.c:830 eelf64lppc.c:1361 eelf64ppc.c:1361
-#: eelf64ppc_fbsd.c:1361 eppclynx.c:830
+#: eelf32lppc.c:845 eelf32lppclinux.c:845 eelf32lppcnto.c:845
+#: eelf32lppcsim.c:845 eelf32ppc.c:845 eelf32ppc_fbsd.c:845
+#: eelf32ppchaiku.c:845 eelf32ppclinux.c:845 eelf32ppcnto.c:845
+#: eelf32ppcsim.c:845 eelf32ppcwindiss.c:845 eelf64lppc.c:1439
+#: eelf64lppc_fbsd.c:1439 eelf64ppc.c:1439 eelf64ppc_fbsd.c:1439
#, c-format
msgid " --no-inline-optimize Don't convert inline PLT to direct calls\n"
msgstr ""
-#: eelf32lppc.c:833 eelf32lppclinux.c:833 eelf32lppcnto.c:833
-#: eelf32lppcsim.c:833 eelf32ppc.c:833 eelf32ppc_fbsd.c:833
-#: eelf32ppclinux.c:833 eelf32ppcnto.c:833 eelf32ppcsim.c:833
-#: eelf32ppcwindiss.c:833 eppclynx.c:833
+#: eelf32lppc.c:848 eelf32lppclinux.c:848 eelf32lppcnto.c:848
+#: eelf32lppcsim.c:848 eelf32ppc.c:848 eelf32ppc_fbsd.c:848
+#: eelf32ppchaiku.c:848 eelf32ppclinux.c:848 eelf32ppcnto.c:848
+#: eelf32ppcsim.c:848 eelf32ppcwindiss.c:848
#, c-format
msgid " --sdata-got Force GOT location just before .sdata\n"
msgstr ""
-#: eelf32lppc.c:836 eelf32lppclinux.c:836 eelf32lppcnto.c:836
-#: eelf32lppcsim.c:836 eelf32ppc.c:836 eelf32ppc_fbsd.c:836
-#: eelf32ppclinux.c:836 eelf32ppcnto.c:836 eelf32ppcsim.c:836
-#: eelf32ppcvxworks.c:796 eelf32ppcwindiss.c:836 eppclynx.c:836
+#: eelf32lppc.c:851 eelf32lppclinux.c:851 eelf32lppcnto.c:851
+#: eelf32lppcsim.c:851 eelf32ppc.c:851 eelf32ppc_fbsd.c:851
+#: eelf32ppchaiku.c:851 eelf32ppclinux.c:851 eelf32ppcnto.c:851
+#: eelf32ppcsim.c:851 eelf32ppcvxworks.c:811 eelf32ppcwindiss.c:851
#, c-format
msgid ""
" --ppc476-workaround [=pagesize]\n"
" Avoid a cache bug on ppc476\n"
msgstr ""
-#: eelf32lppc.c:840 eelf32lppclinux.c:840 eelf32lppcnto.c:840
-#: eelf32lppcsim.c:840 eelf32ppc.c:840 eelf32ppc_fbsd.c:840
-#: eelf32ppclinux.c:840 eelf32ppcnto.c:840 eelf32ppcsim.c:840
-#: eelf32ppcvxworks.c:800 eelf32ppcwindiss.c:840 eppclynx.c:840
+#: eelf32lppc.c:855 eelf32lppclinux.c:855 eelf32lppcnto.c:855
+#: eelf32lppcsim.c:855 eelf32ppc.c:855 eelf32ppc_fbsd.c:855
+#: eelf32ppchaiku.c:855 eelf32ppclinux.c:855 eelf32ppcnto.c:855
+#: eelf32ppcsim.c:855 eelf32ppcvxworks.c:815 eelf32ppcwindiss.c:855
#, c-format
msgid " --no-ppc476-workaround Disable workaround\n"
msgstr ""
-#: eelf32lppc.c:843 eelf32lppclinux.c:843 eelf32lppcnto.c:843
-#: eelf32lppcsim.c:843 eelf32ppc.c:843 eelf32ppc_fbsd.c:843
-#: eelf32ppclinux.c:843 eelf32ppcnto.c:843 eelf32ppcsim.c:843
-#: eelf32ppcvxworks.c:803 eelf32ppcwindiss.c:843 eppclynx.c:843
+#: eelf32lppc.c:858 eelf32lppclinux.c:858 eelf32lppcnto.c:858
+#: eelf32lppcsim.c:858 eelf32ppc.c:858 eelf32ppc_fbsd.c:858
+#: eelf32ppchaiku.c:858 eelf32ppclinux.c:858 eelf32ppcnto.c:858
+#: eelf32ppcsim.c:858 eelf32ppcvxworks.c:818 eelf32ppcwindiss.c:858
#, c-format
msgid " --no-pic-fixup Don't edit non-pic to pic\n"
msgstr ""
-#: eelf32lppc.c:846 eelf32lppclinux.c:846 eelf32lppcnto.c:846
-#: eelf32lppcsim.c:846 eelf32ppc.c:846 eelf32ppc_fbsd.c:846
-#: eelf32ppclinux.c:846 eelf32ppcnto.c:846 eelf32ppcsim.c:846
-#: eelf32ppcvxworks.c:806 eelf32ppcwindiss.c:846 eppclynx.c:846
+#: eelf32lppc.c:861 eelf32lppclinux.c:861 eelf32lppcnto.c:861
+#: eelf32lppcsim.c:861 eelf32ppc.c:861 eelf32ppc_fbsd.c:861
+#: eelf32ppchaiku.c:861 eelf32ppclinux.c:861 eelf32ppcnto.c:861
+#: eelf32ppcsim.c:861 eelf32ppcvxworks.c:821 eelf32ppcwindiss.c:861
#, c-format
msgid " --vle-reloc-fixup Correct old object file 16A/16D relocation\n"
msgstr ""
-#: eelf32mcore.c:295
+#: eelf32mcore.c:306
#, c-format
msgid " --base_file <basefile> Generate a base file for relocatable DLLs\n"
msgstr " --base_file <базов_файл> Създаване на базов файл за премеÑтваеми DLLs\n"
-#: eelf32metag.c:704 eelf64lppc.c:1286 eelf64ppc.c:1286 eelf64ppc_fbsd.c:1286
-#: ehppaelf.c:568 ehppalinux.c:746 ehppanbsd.c:746 ehppaobsd.c:746
+#: eelf32metag.c:719 eelf64lppc.c:1355 eelf64lppc_fbsd.c:1355 eelf64ppc.c:1355
+#: eelf64ppc_fbsd.c:1355 ehppaelf.c:579 ehppalinux.c:761 ehppanbsd.c:761
+#: ehppaobsd.c:761
#, c-format
msgid ""
" --stub-group-size=N Maximum size of a group of input sections that\n"
@@ -5049,28 +5321,28 @@ msgid ""
" choose suitable defaults.\n"
msgstr ""
-#: eelf32rx.c:327
+#: eelf32rx.c:338
#, c-format
msgid ""
" --no-flag-mismatch-warnings Don't warn about objects with incompatible\n"
" endian or dsp settings\n"
msgstr ""
-#: eelf32rx.c:329
+#: eelf32rx.c:340
#, c-format
msgid ""
" --flag-mismatch-warnings Warn about objects with incompatible\n"
" endian, dsp or ABI settings\n"
msgstr ""
-#: eelf32rx.c:331
+#: eelf32rx.c:342
#, c-format
msgid ""
" --ignore-lma Ignore segment LMAs [default]\n"
" (for Renesas Tools compatibility)\n"
msgstr ""
-#: eelf32rx.c:333
+#: eelf32rx.c:344
#, c-format
msgid " --no-ignore-lma Don't ignore segment LMAs\n"
msgstr ""
@@ -5131,19 +5403,19 @@ msgstr "%F%P: не уÑÐ¿Ñ Ñъздаването на раздел .xtensa.inf
msgid "%F%P: Relaxation not supported with --enable-non-contiguous-regions.\n"
msgstr ""
-#: eelf32xtensa.c:2383
+#: eelf32xtensa.c:2398
#, c-format
msgid ""
" --size-opt When relaxing longcalls, prefer size\n"
" optimization over branch target alignment\n"
msgstr ""
-#: eelf32xtensa.c:2386
+#: eelf32xtensa.c:2401
#, c-format
msgid " --abi-windowed Choose windowed ABI for the output object\n"
msgstr ""
-#: eelf32xtensa.c:2388
+#: eelf32xtensa.c:2403
#, c-format
msgid " --abi-call0 Choose call0 ABI for the output object\n"
msgstr ""
@@ -5152,86 +5424,117 @@ msgstr ""
msgid "%F%P: %pB: Instruction sets of object files incompatible\n"
msgstr ""
-#: eelf64_ia64.c:477 eelf64_ia64_fbsd.c:477
+#: eelf64_ia64.c:492 eelf64_ia64_fbsd.c:492
#, c-format
msgid " --itanium Generate code for Intel Itanium processor\n"
msgstr ""
-#: eelf64_s390.c:63 eelf64lppc.c:127 eelf64ppc.c:127 eelf64ppc_fbsd.c:127
+#: eelf64_s390.c:63 eelf64lppc.c:129 eelf64lppc_fbsd.c:129 eelf64ppc.c:129
+#: eelf64ppc_fbsd.c:129
msgid "%F%P: can not init BFD: %E\n"
msgstr ""
-#: eelf64_s390.c:520
+#: eelf64_s390.c:535
#, c-format
msgid " --s390-pgste Tell the kernel to allocate 4k page tables\n"
msgstr ""
-#: eelf64alpha.c:549 eelf64alpha_fbsd.c:549 eelf64alpha_nbsd.c:549
+#: eelf64alpha.c:564 eelf64alpha_fbsd.c:564 eelf64alpha_nbsd.c:564
#, c-format
msgid ""
" --taso Load executable in the lower 31-bit addressable\n"
" virtual address range\n"
msgstr ""
-#: eelf64alpha.c:552 eelf64alpha_fbsd.c:552 eelf64alpha_nbsd.c:552
+#: eelf64alpha.c:567 eelf64alpha_fbsd.c:567 eelf64alpha_nbsd.c:567
#, c-format
msgid " --secureplt Force PLT in text segment\n"
msgstr ""
-#: eelf64alpha.c:554 eelf64alpha_fbsd.c:554 eelf64alpha_nbsd.c:554
+#: eelf64alpha.c:569 eelf64alpha_fbsd.c:569 eelf64alpha_nbsd.c:569
#, c-format
msgid " --no-secureplt Force PLT in data segment\n"
msgstr ""
-#: eelf64lppc.c:311 eelf64lppc.c:339 eelf64ppc.c:311 eelf64ppc.c:339
-#: eelf64ppc_fbsd.c:311 eelf64ppc_fbsd.c:339
+#: eelf64lppc.c:313 eelf64lppc.c:353 eelf64lppc_fbsd.c:313
+#: eelf64lppc_fbsd.c:353 eelf64ppc.c:313 eelf64ppc.c:353 eelf64ppc_fbsd.c:313
+#: eelf64ppc_fbsd.c:353
msgid "%X%P: can not edit %s: %E\n"
msgstr ""
-#: eelf64lppc.c:504 eelf64ppc.c:504 eelf64ppc_fbsd.c:504
+#: eelf64lppc.c:516 eelf64lppc_fbsd.c:516 eelf64ppc.c:516 eelf64ppc_fbsd.c:516
msgid "%X%P: linker script separates .got and .toc\n"
msgstr ""
-#: eelf64lppc.c:565 eelf64ppc.c:565 eelf64ppc_fbsd.c:565
+#: eelf64lppc.c:577 eelf64lppc_fbsd.c:577 eelf64ppc.c:577 eelf64ppc_fbsd.c:577
msgid "%P: .init/.fini fragments use differing TOC pointers\n"
msgstr ""
-#: eelf64lppc.c:1296 eelf64ppc.c:1296
+#: eelf64lppc.c:1242 eelf64lppc_fbsd.c:1242 eelf64ppc.c:1242
+#: eelf64ppc_fbsd.c:1242
+msgid "%F%P: invalid --power10-stubs argument `%s'\n"
+msgstr "%F%P: неправилен --power10-stubs '%s'\n"
+
+#: eelf64lppc.c:1365 eelf64ppc.c:1365
#, c-format
msgid " --plt-static-chain PLT call stubs should load r11 (default)\n"
msgstr ""
-#: eelf64lppc.c:1299 eelf64ppc.c:1299
+#: eelf64lppc.c:1368 eelf64ppc.c:1368
#, c-format
msgid " --no-plt-static-chain PLT call stubs should not load r11\n"
msgstr ""
-#: eelf64lppc.c:1302 eelf64ppc.c:1302 eelf64ppc_fbsd.c:1302
+#: eelf64lppc.c:1371 eelf64lppc_fbsd.c:1371 eelf64ppc.c:1371
+#: eelf64ppc_fbsd.c:1371
#, c-format
msgid " --plt-thread-safe PLT call stubs with load-load barrier\n"
msgstr ""
-#: eelf64lppc.c:1305 eelf64ppc.c:1305 eelf64ppc_fbsd.c:1305
+#: eelf64lppc.c:1374 eelf64lppc_fbsd.c:1374 eelf64ppc.c:1374
+#: eelf64ppc_fbsd.c:1374
#, c-format
msgid " --no-plt-thread-safe PLT call stubs without barrier\n"
msgstr ""
-#: eelf64lppc.c:1308 eelf64ppc.c:1308 eelf64ppc_fbsd.c:1308
+#: eelf64lppc.c:1377 eelf64lppc_fbsd.c:1377 eelf64ppc.c:1377
+#: eelf64ppc_fbsd.c:1377
#, c-format
msgid " --plt-align [=<align>] Align PLT call stubs to fit cache lines\n"
msgstr ""
-#: eelf64lppc.c:1314 eelf64ppc.c:1314 eelf64ppc_fbsd.c:1314
+#: eelf64lppc.c:1383 eelf64lppc_fbsd.c:1383 eelf64ppc.c:1383
+#: eelf64ppc_fbsd.c:1383
#, c-format
msgid " --plt-localentry Optimize calls to ELFv2 localentry:0 functions\n"
msgstr ""
-#: eelf64lppc.c:1317 eelf64ppc.c:1317 eelf64ppc_fbsd.c:1317
+#: eelf64lppc.c:1386 eelf64lppc_fbsd.c:1386 eelf64ppc.c:1386
+#: eelf64ppc_fbsd.c:1386
#, c-format
msgid " --no-plt-localentry Don't optimize ELFv2 calls\n"
msgstr ""
-#: eelf64lppc.c:1326 eelf64ppc.c:1326 eelf64ppc_fbsd.c:1326
+#: eelf64lppc.c:1389 eelf64lppc_fbsd.c:1389 eelf64ppc.c:1389
+#: eelf64ppc_fbsd.c:1389
+#, c-format
+msgid " --power10-stubs [=auto] Use Power10 PLT call stubs (default auto)\n"
+msgstr ""
+
+#: eelf64lppc.c:1392 eelf64lppc_fbsd.c:1392 eelf64ppc.c:1392
+#: eelf64ppc_fbsd.c:1392
+#, c-format
+msgid " --no-pcrel-optimize Don't perform R_PPC64_PCREL_OPT optimization\n"
+msgstr ""
+
+#: eelf64lppc.c:1395 eelf64lppc_fbsd.c:1395 eelf64ppc.c:1395
+#: eelf64ppc_fbsd.c:1395
+#, c-format
+msgid " --no-power10-stubs Don't use Power10 PLT call stubs\n"
+msgstr ""
+
+#: eelf64lppc.c:1404 eelf64lppc_fbsd.c:1404 eelf64ppc.c:1404
+#: eelf64ppc_fbsd.c:1404
#, c-format
msgid ""
" --dotsyms For every version pattern \"foo\" in a version\n"
@@ -5240,12 +5543,14 @@ msgid ""
" descriptor symbols. Defaults to on.\n"
msgstr ""
-#: eelf64lppc.c:1332 eelf64ppc.c:1332 eelf64ppc_fbsd.c:1332
+#: eelf64lppc.c:1410 eelf64lppc_fbsd.c:1410 eelf64ppc.c:1410
+#: eelf64ppc_fbsd.c:1410
#, c-format
msgid " --no-dotsyms Don't do anything special in version scripts\n"
msgstr ""
-#: eelf64lppc.c:1335 eelf64ppc.c:1335 eelf64ppc_fbsd.c:1335
+#: eelf64lppc.c:1413 eelf64lppc_fbsd.c:1413 eelf64ppc.c:1413
+#: eelf64ppc_fbsd.c:1413
#, c-format
msgid ""
" --save-restore-funcs Provide register save and restore routines used\n"
@@ -5253,53 +5558,72 @@ msgid ""
" final link, off for ld -r.\n"
msgstr ""
-#: eelf64lppc.c:1340 eelf64ppc.c:1340 eelf64ppc_fbsd.c:1340
+#: eelf64lppc.c:1418 eelf64lppc_fbsd.c:1418 eelf64ppc.c:1418
+#: eelf64ppc_fbsd.c:1418
#, c-format
msgid " --no-save-restore-funcs Don't provide these routines\n"
msgstr ""
-#: eelf64lppc.c:1346 eelf64ppc.c:1346 eelf64ppc_fbsd.c:1346
+#: eelf64lppc.c:1424 eelf64lppc_fbsd.c:1424 eelf64ppc.c:1424
+#: eelf64ppc_fbsd.c:1424
#, c-format
msgid " --tls-get-addr-optimize Force use of special __tls_get_addr call\n"
msgstr ""
-#: eelf64lppc.c:1352 eelf64ppc.c:1352 eelf64ppc_fbsd.c:1352
+#: eelf64lppc.c:1430 eelf64lppc_fbsd.c:1430 eelf64ppc.c:1430
+#: eelf64ppc_fbsd.c:1430
#, c-format
msgid " --tls-get-addr-regsave Force register save __tls_get_addr stub\n"
msgstr ""
-#: eelf64lppc.c:1355 eelf64ppc.c:1355 eelf64ppc_fbsd.c:1355
+#: eelf64lppc.c:1433 eelf64lppc_fbsd.c:1433 eelf64ppc.c:1433
+#: eelf64ppc_fbsd.c:1433
#, c-format
msgid " --no-tls-get-addr-regsave Don't use register save __tls_get_addr stub\n"
msgstr ""
-#: eelf64lppc.c:1358 eelf64ppc.c:1358 eelf64ppc_fbsd.c:1358
+#: eelf64lppc.c:1436 eelf64lppc_fbsd.c:1436 eelf64ppc.c:1436
+#: eelf64ppc_fbsd.c:1436
#, c-format
msgid " --no-opd-optimize Don't optimize the OPD section\n"
msgstr ""
-#: eelf64lppc.c:1364 eelf64ppc.c:1364 eelf64ppc_fbsd.c:1364
+#: eelf64lppc.c:1442 eelf64lppc_fbsd.c:1442 eelf64ppc.c:1442
+#: eelf64ppc_fbsd.c:1442
#, c-format
msgid " --no-toc-optimize Don't optimize the TOC section\n"
msgstr ""
-#: eelf64lppc.c:1367 eelf64ppc.c:1367 eelf64ppc_fbsd.c:1367
+#: eelf64lppc.c:1445 eelf64lppc_fbsd.c:1445 eelf64ppc.c:1445
+#: eelf64ppc_fbsd.c:1445
#, c-format
msgid " --no-multi-toc Disallow automatic multiple toc sections\n"
msgstr ""
-#: eelf64lppc.c:1370 eelf64ppc.c:1370 eelf64ppc_fbsd.c:1370
+#: eelf64lppc.c:1448 eelf64lppc_fbsd.c:1448 eelf64ppc.c:1448
+#: eelf64ppc_fbsd.c:1448
#, c-format
msgid " --no-toc-sort Don't sort TOC and GOT sections\n"
msgstr ""
-#: eelf64lppc.c:1373 eelf64ppc.c:1373 eelf64ppc_fbsd.c:1373
+#: eelf64lppc.c:1451 eelf64lppc_fbsd.c:1451 eelf64ppc.c:1451
+#: eelf64ppc_fbsd.c:1451
#, c-format
msgid ""
" --non-overlapping-opd Canonicalize .opd, so that there are no\n"
" overlapping .opd entries\n"
msgstr ""
+#: eelf64lppc_fbsd.c:1365 eelf64ppc_fbsd.c:1365
+#, c-format
+msgid " --plt-static-chain PLT call stubs should load r111\n"
+msgstr ""
+
+#: eelf64lppc_fbsd.c:1368 eelf64ppc_fbsd.c:1368
+#, c-format
+msgid " --no-plt-static-chain PLT call stubs should not load r11 (default)\n"
+msgstr ""
+
#: eelf64mmix.c:81 emmo.c:84
msgid "%X%P: internal problems setting up section %s"
msgstr ""
@@ -5313,18 +5637,59 @@ msgstr ""
msgid "%F%P: can't finalize linker-allocated global registers\n"
msgstr ""
-#: eelf64ppc_fbsd.c:1296
+#: eelf_x86_64.c:5636 eelf_x86_64_cloudabi.c:579 eelf_x86_64_fbsd.c:579
+#: eelf_x86_64_haiku.c:579 eelf_x86_64_sol2.c:711
+msgid "%F%P: invalid option for -z lam-u48-report=: %s\n"
+msgstr "%F%P: неправилен аргумент за -z lam-u48-report=: %s\n"
+
+#: eelf_x86_64.c:5650 eelf_x86_64_cloudabi.c:593 eelf_x86_64_fbsd.c:593
+#: eelf_x86_64_haiku.c:593 eelf_x86_64_sol2.c:725
+msgid "%F%P: invalid option for -z lam-u57-report=: %s\n"
+msgstr "%F%P: неправилно аргумент за -z lam-u57-report=: %s\n"
+
+#: eelf_x86_64.c:5671 eelf_x86_64_cloudabi.c:614 eelf_x86_64_fbsd.c:614
+#: eelf_x86_64_haiku.c:614 eelf_x86_64_sol2.c:746
+msgid "%F%P: invalid option for -z lam-report=: %s\n"
+msgstr "%F%P: неправилно аргумент за -z lam-report=: %s\n"
+
+#: eelf_x86_64.c:5749 eelf_x86_64_cloudabi.c:692 eelf_x86_64_fbsd.c:692
+#: eelf_x86_64_haiku.c:692 eelf_x86_64_sol2.c:824
#, c-format
-msgid " --plt-static-chain PLT call stubs should load r111\n"
+msgid " -z lam-u48 Generate GNU_PROPERTY_X86_FEATURE_1_LAM_U48\n"
msgstr ""
-#: eelf64ppc_fbsd.c:1299
+#: eelf_x86_64.c:5751 eelf_x86_64_cloudabi.c:694 eelf_x86_64_fbsd.c:694
+#: eelf_x86_64_haiku.c:694 eelf_x86_64_sol2.c:826
#, c-format
-msgid " --no-plt-static-chain PLT call stubs should not load r11 (default)\n"
+msgid ""
+" -z lam-u48-report=[none|warning|error] (default: none)\n"
+" Report missing LAM_U48 property\n"
msgstr ""
-#: eelf_x86_64.c:5497 eelf_x86_64_cloudabi.c:594 eelf_x86_64_fbsd.c:594
-#: eelf_x86_64_sol2.c:725
+#: eelf_x86_64.c:5754 eelf_x86_64_cloudabi.c:697 eelf_x86_64_fbsd.c:697
+#: eelf_x86_64_haiku.c:697 eelf_x86_64_sol2.c:829
+#, c-format
+msgid " -z lam-u57 Generate GNU_PROPERTY_X86_FEATURE_1_LAM_U57\n"
+msgstr ""
+
+#: eelf_x86_64.c:5756 eelf_x86_64_cloudabi.c:699 eelf_x86_64_fbsd.c:699
+#: eelf_x86_64_haiku.c:699 eelf_x86_64_sol2.c:831
+#, c-format
+msgid ""
+" -z lam-u57-report=[none|warning|error] (default: none)\n"
+" Report missing LAM_U57 property\n"
+msgstr ""
+
+#: eelf_x86_64.c:5759 eelf_x86_64_cloudabi.c:702 eelf_x86_64_fbsd.c:702
+#: eelf_x86_64_haiku.c:702 eelf_x86_64_sol2.c:834
+#, c-format
+msgid ""
+" -z lam-report=[none|warning|error] (default: none)\n"
+" Report missing LAM_U48 and LAM_U57 properties\n"
+msgstr ""
+
+#: eelf_x86_64.c:5768 eelf_x86_64_cloudabi.c:711 eelf_x86_64_fbsd.c:711
+#: eelf_x86_64_haiku.c:711 eelf_x86_64_sol2.c:843
#, c-format
msgid " -z bndplt Always generate BND prefix in PLT entries\n"
msgstr ""
@@ -5333,7 +5698,7 @@ msgstr ""
msgid "%X%P: can not set gp\n"
msgstr ""
-#: ehppaelf.c:564 ehppalinux.c:742 ehppanbsd.c:742 ehppaobsd.c:742
+#: ehppaelf.c:575 ehppalinux.c:757 ehppanbsd.c:757 ehppaobsd.c:757
#, c-format
msgid ""
" --multi-subspace Generate import and export stubs to support\n"
@@ -5348,25 +5713,25 @@ msgstr "%F%P: \"PE\"-операции върху файл, който не е \"
msgid "%F%P: %pB: can't read contents of section .idata: %E\n"
msgstr "%F%P: %pB: не може да Ñе намали прочете Ñъдържанието на раздел .idata: %E\n"
-#: ei386beos.c:680
+#: ei386beos.c:663
msgid "%F%P: section %s has '$' as first character\n"
msgstr "%F%P: раздел %s започва Ñ Ð·Ð½Ð°Ðº '$'\n"
-#: ei386beos.c:712
+#: ei386beos.c:693
msgid "%F%P: *(%s$) missing from linker script\n"
msgstr ""
-#: ei386pep.c:377
+#: ei386pep.c:399
#, c-format
msgid " --[no-]insert-timestamp Use a real timestamp rather than zero (default)\n"
msgstr " --[no-]insert-timestamp Използва иÑтинÑка времева отметка вмеÑто нула (по подразбиране)\n"
-#: ei386pep.c:388
+#: ei386pep.c:410
#, c-format
msgid " export, place into import library instead\n"
msgstr " изнаÑÑне, в замÑна поÑтавÑне в библиотека за внаÑÑне\n"
-#: ei386pep.c:393
+#: ei386pep.c:415
#, c-format
msgid ""
" --compat-implib Create backward compatible import libs;\n"
@@ -5375,7 +5740,7 @@ msgstr ""
" --compat-implib Създава ÑъвмеÑтими Ñ Ð¿Ñ€ÐµÐ´Ð¸ библиотеки за внÑÑÑне и\n"
" Ñъщо така Ñъздава __imp_<ИМЕ>\n"
-#: ei386pep.c:394
+#: ei386pep.c:416
#, c-format
msgid ""
" --enable-auto-image-base Automatically choose image base for DLLs\n"
@@ -5384,12 +5749,12 @@ msgstr ""
" --enable-auto-image-base Ðвтоматично избира оÑнова на DLL-образа, оÑвен\n"
" ако не е зададена\n"
-#: ei386pep.c:395
+#: ei386pep.c:417
#, c-format
msgid " --disable-auto-image-base Do not auto-choose image base (default)\n"
msgstr " --disable-auto-image-base Да не Ñе избира автоматично база на образа (по подразбиране)\n"
-#: ei386pep.c:399
+#: ei386pep.c:421
#, c-format
msgid ""
" --enable-runtime-pseudo-reloc Work around auto-import limitations by\n"
@@ -5400,7 +5765,7 @@ msgstr ""
" внаÑÑÐ½Ð¸Ñ Ñ Ð´Ð¾Ð±Ð°Ð²Ñне на лъже-премеÑтваниÑ,\n"
" определÑни по време на работа\n"
-#: ei386pep.c:400
+#: ei386pep.c:422
#, c-format
msgid ""
" --disable-runtime-pseudo-reloc Do not add runtime pseudo-relocations for\n"
@@ -5409,7 +5774,7 @@ msgstr ""
" --disable-runtime-pseudo-reloc Без лъже-премеÑтваниÑ, по време на работа,\n"
" за автоматично внеÑени данни\n"
-#: ei386pep.c:401
+#: ei386pep.c:423
#, c-format
msgid ""
" --enable-extra-pep-debug Enable verbose debug output when building\n"
@@ -5418,27 +5783,25 @@ msgstr ""
" --enable-extra-pep-debug Разрешава извеждане на подробно Ñведение при Ñъздаване\n"
" или Ñвързване на DLL-ли (Ñъотв. автоматично внаÑÑне)\n"
-#: ei386pep.c:404
+#: ei386pep.c:426
#, c-format
msgid ""
-" --high-entropy-va Image is compatible with 64-bit address space\n"
+" --[disable-]high-entropy-va Image is compatible with 64-bit address space\n"
" layout randomization (ASLR)\n"
-msgstr ""
+msgstr " --[disable-]high-entropy-va ОÑновниÑÑ‚ Ð°Ð´Ñ€ÐµÑ Ð½Ð° образа може да бъде премеÑтен като Ñе използва Ñлучаен адреÑ\n"
-#: ei386pep.c:410
+#: ei386pep.c:433
#, c-format
msgid ""
-" --no-seh Image does not use SEH; no SE handler may\n"
+" --[disable-]no-seh Image does not use SEH; no SE handler may\n"
" be called in this image\n"
-msgstr ""
-" --no-seh Образът не използва SEH. В този образ не може\n"
-" да Ñе извиква SE подръжка\n"
+msgstr " --[disable-]no-seh Образът не използва SEH. Ð’ този образ не може да Ñе извиква SE подръжка\n"
-#: ei386pep.c:912
+#: ei386pep.c:965
msgid "%P: warning: --export-dynamic is not supported for PE+ targets, did you mean --export-all-symbols?\n"
msgstr "%P: предупреждение: --export-dynamic не Ñе поддържа при PE+ резултати, може би --export-all-symbols?\n"
-#: ei386pep.c:980 ei386pep.c:1007
+#: ei386pep.c:1033 ei386pep.c:1060
#, c-format
msgid "warning: resolving %s by linking to %s\n"
msgstr "предупрежение: разрешаване на %s ÑÑŠÑ Ñвързване към %s\n"
@@ -5451,14 +5814,14 @@ msgstr ""
msgid "%X%P: changing output format whilst linking is not supported\n"
msgstr ""
-#: em68hc11elf.c:561 em68hc11elfb.c:561 em68hc12elf.c:561 em68hc12elfb.c:561
+#: em68hc11elf.c:572 em68hc11elfb.c:572 em68hc12elf.c:572 em68hc12elfb.c:572
#, c-format
msgid ""
" --no-trampoline Do not generate the far trampolines used to call\n"
" a far function using jsr or bsr\n"
msgstr ""
-#: em68hc11elf.c:564 em68hc11elfb.c:564 em68hc12elf.c:564 em68hc12elfb.c:564
+#: em68hc11elf.c:575 em68hc11elfb.c:575 em68hc12elf.c:575 em68hc12elfb.c:575
#, c-format
msgid ""
" --bank-window NAME Specify the name of the memory region describing\n"
@@ -5469,11 +5832,11 @@ msgstr ""
msgid "%F%P: %pB: all input objects must be ELF for --embedded-relocs\n"
msgstr ""
-#: em68kelf.c:603 em68kelfnbsd.c:603
+#: em68kelf.c:618 em68kelfnbsd.c:618
msgid "%P: unrecognized --got argument '%s'\n"
msgstr "%P: неразпозната ÑтойноÑÑ‚ за --got '%s'\n"
-#: em68kelf.c:616 em68kelfnbsd.c:616
+#: em68kelf.c:631 em68kelfnbsd.c:631
#, c-format
msgid " --got=<type> Specify GOT handling scheme\n"
msgstr ""
@@ -5486,22 +5849,22 @@ msgstr ""
msgid "%P: error: unhandled data_statement size\n"
msgstr "%P: грешка: неподдържан размер за data_statement\n"
-#: emsp430X.c:300 emsp430elf.c:300
+#: emsp430X.c:299 emsp430elf.c:299
msgid "%P: error: no section named %s or %s in linker script\n"
msgstr ""
-#: emsp430X.c:309 emsp430elf.c:309
+#: emsp430X.c:308 emsp430elf.c:308
msgid "%P: error: no section named %s in linker script\n"
msgstr ""
-#: emsp430X.c:452 emsp430elf.c:452
+#: emsp430X.c:459 emsp430elf.c:459
#, c-format
msgid ""
" --code-region={either,lower,upper,none}\n"
" Transform .text* sections to {either,lower,upper,none}.text* sections\n"
msgstr ""
-#: emsp430X.c:453 emsp430elf.c:453
+#: emsp430X.c:460 emsp430elf.c:460
#, c-format
msgid ""
" --data-region={either,lower,upper,none}\n"
@@ -5509,7 +5872,7 @@ msgid ""
" {either,lower,upper,none}.{bss,data,rodata}* sections\n"
msgstr ""
-#: emsp430X.c:454 emsp430elf.c:454
+#: emsp430X.c:461 emsp430elf.c:461
#, c-format
msgid ""
" --disable-sec-transformation\n"
@@ -5517,19 +5880,19 @@ msgid ""
" add the {either,lower,upper,none} prefixes\n"
msgstr ""
-#: emsp430X.c:473 emsp430elf.c:473
+#: emsp430X.c:480 emsp430elf.c:480
msgid "%P: --code-region requires an argument: {upper,lower,either,none}\n"
msgstr ""
-#: emsp430X.c:479 emsp430elf.c:479
+#: emsp430X.c:486 emsp430elf.c:486
msgid "%P: error: unrecognized argument to --code-region= option: \"%s\"\n"
msgstr "%P: грешка: неразпозната ÑтойноÑÑ‚ за --code-region: \"%s\"\n"
-#: emsp430X.c:496 emsp430elf.c:496
+#: emsp430X.c:503 emsp430elf.c:503
msgid "%P: --data-region requires an argument: {upper,lower,either,none}\n"
msgstr ""
-#: emsp430X.c:502 emsp430elf.c:502
+#: emsp430X.c:509 emsp430elf.c:509
msgid "%P: error: unrecognized argument to --data-region= option: \"%s\"\n"
msgstr "%P: грешка: неразпозната ÑтойноÑÑ‚ за --data-region: \"%s\"\n"
@@ -5539,48 +5902,48 @@ msgstr "%P: грешка: неразпозната ÑтойноÑÑ‚ за --data-
msgid "%F%P: %pB: ABI version of object files mismatched\n"
msgstr ""
-#: ends32belf.c:395 ends32belf16m.c:395 ends32belf_linux.c:524 ends32elf.c:395
-#: ends32elf16m.c:395 ends32elf_linux.c:524
+#: ends32belf.c:406 ends32belf16m.c:406 ends32belf_linux.c:539 ends32elf.c:406
+#: ends32elf16m.c:406 ends32elf_linux.c:539
msgid "%P: --mbaseline is not used anymore\n"
msgstr ""
-#: ends32belf.c:406 ends32belf16m.c:406 ends32belf_linux.c:535 ends32elf.c:406
-#: ends32elf16m.c:406 ends32elf_linux.c:535
+#: ends32belf.c:417 ends32belf16m.c:417 ends32belf_linux.c:550 ends32elf.c:417
+#: ends32elf16m.c:417 ends32elf_linux.c:550
msgid "%P: --relax-[no-]reduce-fp-updat is not used anymore\n"
msgstr ""
-#: ends32belf.c:410 ends32belf16m.c:410 ends32belf_linux.c:539 ends32elf.c:410
-#: ends32elf16m.c:410 ends32elf_linux.c:539
+#: ends32belf.c:421 ends32belf16m.c:421 ends32belf_linux.c:554 ends32elf.c:421
+#: ends32elf16m.c:421 ends32elf_linux.c:554
msgid "%P: missing file for --mexport-symbols\n"
msgstr ""
-#: ends32belf.c:423 ends32belf.c:432 ends32belf16m.c:423 ends32belf16m.c:432
-#: ends32belf_linux.c:552 ends32belf_linux.c:561 ends32elf.c:423
-#: ends32elf.c:432 ends32elf16m.c:423 ends32elf16m.c:432 ends32elf_linux.c:552
-#: ends32elf_linux.c:561
+#: ends32belf.c:434 ends32belf.c:443 ends32belf16m.c:434 ends32belf16m.c:443
+#: ends32belf_linux.c:567 ends32belf_linux.c:576 ends32elf.c:434
+#: ends32elf.c:443 ends32elf16m.c:434 ends32elf16m.c:443 ends32elf_linux.c:567
+#: ends32elf_linux.c:576
msgid "%P: valid arguments to --mhyper-relax=(low|medium|high)\n"
msgstr ""
-#: ends32belf.c:452 ends32belf16m.c:452 ends32belf_linux.c:581 ends32elf.c:452
-#: ends32elf16m.c:452 ends32elf_linux.c:581
+#: ends32belf.c:463 ends32belf16m.c:463 ends32belf_linux.c:596 ends32elf.c:463
+#: ends32elf16m.c:463 ends32elf_linux.c:596
#, c-format
msgid " --m[no-]fp-as-gp Disable/enable fp-as-gp relaxation\n"
msgstr ""
-#: ends32belf.c:454 ends32belf16m.c:454 ends32belf_linux.c:583 ends32elf.c:454
-#: ends32elf16m.c:454 ends32elf_linux.c:583
+#: ends32belf.c:465 ends32belf16m.c:465 ends32belf_linux.c:598 ends32elf.c:465
+#: ends32elf16m.c:465 ends32elf_linux.c:598
#, c-format
msgid " --mexport-symbols=FILE Exporting symbols in linker script\n"
msgstr ""
-#: ends32belf.c:456 ends32belf16m.c:456 ends32belf_linux.c:585 ends32elf.c:456
-#: ends32elf16m.c:456 ends32elf_linux.c:585
+#: ends32belf.c:467 ends32belf16m.c:467 ends32belf_linux.c:600 ends32elf.c:467
+#: ends32elf16m.c:467 ends32elf_linux.c:600
#, c-format
msgid " --mhyper-relax=level Adjust relax level (low|medium|high). default: medium\n"
msgstr ""
-#: ends32belf.c:458 ends32belf16m.c:458 ends32belf_linux.c:587 ends32elf.c:458
-#: ends32elf16m.c:458 ends32elf_linux.c:587
+#: ends32belf.c:469 ends32belf16m.c:469 ends32belf_linux.c:602 ends32elf.c:469
+#: ends32elf16m.c:469 ends32elf_linux.c:602
#, c-format
msgid " --m[no-]tlsdesc-trampoline Disable/enable TLS DESC trampoline\n"
msgstr ""
diff --git a/ld/po/fr.po b/ld/po/fr.po
index a790ebe2818..9e8bbf05908 100644
--- a/ld/po/fr.po
+++ b/ld/po/fr.po
@@ -2,14 +2,14 @@
# Copyright © 2021 Free Software Foundation, Inc.
# This file is distributed under the same license as the binutils package.
# Michel Robitaille <robitail@IRO.UMontreal.CA>, 1996-2011
-# Grégoire Scano <gregoire.scano@malloc.fr>, 2011-2012, 2015, 2018-2021
+# Grégoire Scano <gregoire.scano@malloc.fr>, 2011-2012, 2015, 2018-2022
#
msgid ""
msgstr ""
-"Project-Id-Version: ld 2.36.90\n"
-"Report-Msgid-Bugs-To: bug-binutils@gnu.org\n"
-"POT-Creation-Date: 2021-07-03 15:08+0100\n"
-"PO-Revision-Date: 2021-07-05 07:11+0800\n"
+"Project-Id-Version: ld 2.37.90\n"
+"Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n"
+"POT-Creation-Date: 2022-01-22 12:24+0000\n"
+"PO-Revision-Date: 2022-02-02 18:14+0800\n"
"Last-Translator: Grégoire Scano <gregoire.scano@malloc.fr>\n"
"Language-Team: French <traduc@traduc.org>\n"
"Language: fr\n"
@@ -60,15 +60,15 @@ msgstr "Aucun symbol\n"
msgid "%P: symbol `%pT' missing from main hash table\n"
msgstr "%P : symbole « %pT » manquant dans la table de hachage principale\n"
-#: ldcref.c:517 ldcref.c:628 ldmain.c:1302 ldmisc.c:336 pe-dll.c:737
-#: pe-dll.c:1315 pe-dll.c:1436 pe-dll.c:1562 earm_wince_pe.c:1486
+#: ldcref.c:517 ldcref.c:628 ldmain.c:1304 ldmisc.c:336 pe-dll.c:738
+#: pe-dll.c:1316 pe-dll.c:1437 pe-dll.c:1563 earm_wince_pe.c:1486
#: earm_wince_pe.c:1693 earmpe.c:1486 earmpe.c:1693 ei386pe.c:1486
#: ei386pe.c:1693 ei386pe_posix.c:1486 ei386pe_posix.c:1693 ei386pep.c:1475
#: emcorepe.c:1486 emcorepe.c:1693 eshpe.c:1486 eshpe.c:1693
msgid "%F%P: %pB: could not read symbols: %E\n"
msgstr "%B%F : %pB : impossible de lire les symboles : %E\n"
-#: ldcref.c:690 ldcref.c:697 ldmain.c:1364 ldmain.c:1371
+#: ldcref.c:690 ldcref.c:697 ldmain.c:1366 ldmain.c:1373
msgid "%F%P: %pB: could not read relocs: %E\n"
msgstr "%F%P : %pB : impossible de lire les relocalisations : %E\n"
@@ -114,133 +114,137 @@ msgstr ""
msgid "%P: warning: -z dynamic-undefined-weak ignored\n"
msgstr "%P : avertissement : -z dynamic-undefined-weak ignoré\n"
-#: ldelf.c:98
+#: ldelf.c:91
+msgid "%F%P: common page size (0x%v) > maximum page size (0x%v)\n"
+msgstr "%F%P : taille usuelle de page (0x%v) > taille maximale de page (0x%v)\n"
+
+#: ldelf.c:117
msgid "%F%P: %pB: --just-symbols may not be used on DSO\n"
msgstr "%F%P : %pB : --just-symbols ne peut être utilisé sur un DSO\n"
-#: ldelf.c:200
+#: ldelf.c:219
msgid "%P: %pB: bfd_stat failed: %E\n"
msgstr "%P : %pB : bfd_stat en échec : %E\n"
-#: ldelf.c:241
+#: ldelf.c:260
msgid "%P: warning: %s, needed by %pB, may conflict with %s\n"
msgstr "%P : warning : %s, requis par %pB, peut être en conflit avec %s\n"
-#: ldelf.c:261 ldfile.c:133
+#: ldelf.c:280 ldfile.c:133
#, c-format
msgid "attempt to open %s failed\n"
msgstr "échec de la tentative d'ouverture de %s\n"
-#: ldelf.c:298
+#: ldelf.c:317
msgid "%F%P: %pB: bfd_elf_get_bfd_needed_list failed: %E\n"
msgstr "%F%P : %pB : bfd_elf_get_bfd_needed_list en échec : %E\n"
-#: ldelf.c:346
+#: ldelf.c:365
msgid "%F%P: %pB: bfd_stat failed: %E\n"
msgstr "%F%P : %pB : bfd_stat en échec: %E\n"
-#: ldelf.c:352
+#: ldelf.c:371
#, c-format
msgid "found %s at %s\n"
msgstr "%s trouvé à %s\n"
-#: ldelf.c:385 ldlang.c:3146 ldlang.c:3160
+#: ldelf.c:404 ldlang.c:3159 ldlang.c:3173
msgid "%F%P: %pB: error adding symbols: %E\n"
msgstr "%F%P : %pB : erreur lors de l'ajout de symboles : %E\n"
#. We only issue an "unrecognised" message in verbose mode
#. as the $<foo> token might be a legitimate component of
#. a path name in the target's file system.
-#: ldelf.c:572
+#: ldelf.c:591
#, c-format
msgid "unrecognised or unsupported token '%s' in search path\n"
msgstr "élément lexical « %s » non reconnu ou non pris en charge dans le chemin de recherche\n"
-#: ldelf.c:1016
+#: ldelf.c:1035
msgid "%F%P: %s: can't open for writing: %E\n"
msgstr "%F%P : %s : impossible d'ouvrir en écriture : %E\n"
-#: ldelf.c:1054
+#: ldelf.c:1081
msgid "%F%P: cannot use executable file '%pB' as input to a link\n"
msgstr "%F%P : impossible d'utiliser le fichier exécutable « %pB » comme l'entrée d'un lien\n"
-#: ldelf.c:1108
+#: ldelf.c:1135
msgid "%F%P: compact frame descriptions incompatible with DWARF2 .eh_frame from %pB\n"
msgstr "%F%P : descriptions des cadres compacts incompatible avec DWARF2 .eh_frame depuis %pB\n"
-#: ldelf.c:1144
+#: ldelf.c:1171
msgid "%P: warning: cannot create .eh_frame_hdr section, --eh-frame-hdr ignored\n"
msgstr "%P : avertissement : impossible de créer la section .eh_frame_hdr, --eh-frame-hdr ignoré\n"
-#: ldelf.c:1200
+#: ldelf.c:1227
#, c-format
msgid "%s needed by %pB\n"
msgstr "%s requis par %pB\n"
-#: ldelf.c:1309
+#: ldelf.c:1336
msgid "%P: warning: %s, needed by %pB, not found (try using -rpath or -rpath-link)\n"
msgstr "%P : avertissement : %s, requis par %pB, non trouvé (essayez avec -rpath ou -rpath-link)\n"
-#: ldelf.c:1322
+#: ldelf.c:1349
msgid "%F%P: failed to add DT_NEEDED dynamic tag\n"
msgstr "%F%P : échec de l'ajout de l'étiquette dynamique DT_NEEDED\n"
-#: ldelf.c:1330
+#: ldelf.c:1357
msgid "%F%P: failed to parse EH frame entries\n"
msgstr "%F%P : échec de l'analyse des entrées du cadre EH\n"
-#: ldelf.c:1369
+#: ldelf.c:1396
msgid "%P: warning: .note.gnu.build-id section discarded, --build-id ignored\n"
msgstr "%P : avertissement : section .note.gnu.build-id rejetée, --build-id ignoré\n"
-#: ldelf.c:1415 earm_wince_pe.c:1277 earmpe.c:1277 ei386pe.c:1277
+#: ldelf.c:1445 earm_wince_pe.c:1277 earmpe.c:1277 ei386pe.c:1277
#: ei386pe_posix.c:1277 ei386pep.c:1284 emcorepe.c:1277 eshpe.c:1277
msgid "%P: warning: unrecognized --build-id style ignored\n"
msgstr "%P : avertissement : style --build-id non reconnu, ignoré\n"
-#: ldelf.c:1433
+#: ldelf.c:1464
msgid "%P: warning: cannot create .note.gnu.build-id section, --build-id ignored\n"
msgstr "%P : avertissement : impossible de créer la section .note.gnu.build-id, --build-id ignoré\n"
-#: ldelf.c:1465 eaix5ppc.c:1408 eaix5rs6.c:1408 eaixppc.c:1408 eaixrs6.c:1408
+#: ldelf.c:1496 eaix5ppc.c:1408 eaix5rs6.c:1408 eaixppc.c:1408 eaixrs6.c:1408
#: eppcmacos.c:1408
msgid "%F%P: failed to record assignment to %s: %E\n"
msgstr "%F%P : échec de l'enregistrement de l'affectation vers %s : %E\n"
-#: ldelf.c:1649 ldelf.c:1714 eaix5ppc.c:831 eaix5rs6.c:831 eaixppc.c:831
+#: ldelf.c:1675 ldelf.c:1740 eaix5ppc.c:831 eaix5rs6.c:831 eaixppc.c:831
#: eaixrs6.c:831 eelf64_ia64_vms.c:209 eppcmacos.c:831
msgid "%F%P: failed to set dynamic section sizes: %E\n"
msgstr "%F%P : impossible de fixer les tailles des sections dynamiques : %E\n"
-#: ldelf.c:1686
+#: ldelf.c:1712
msgid "%F%P: %pB: can't read contents of section .gnu.warning: %E\n"
msgstr "%F%P : %pB : impossible de lire les contenus de la section .gnu.warning : %E\n"
-#: ldelfgen.c:283
-msgid "%F%P: %pA has both ordered and unordered sections"
-msgstr "%F%P : %pA  contient des sections à la fois ordonnées et désordonnées"
+#: ldelfgen.c:284
+msgid "%F%P: %pA has both ordered and unordered sections\n"
+msgstr "%F%P : %pA  contient des sections à la fois ordonnées et désordonnées\n"
-#: ldelfgen.c:307
+#: ldelfgen.c:309
msgid "%F%P: map sections to segments failed: %E\n"
msgstr "%F%P : échec de l'association de sections à des segments : %E\n"
-#: ldelfgen.c:327
-msgid "%F%P: looping in map_segments"
-msgstr "%F%P : boucle dans map_segments"
+#: ldelfgen.c:329
+msgid "%F%P: looping in map_segments\n"
+msgstr "%F%P : boucle dans map_segments\n"
-#: ldelfgen.c:339
-msgid "%F%P: failed to strip zero-sized dynamic sections"
-msgstr "%F%P : échec de la suppression des sections dynamiques de taille nulle"
+#: ldelfgen.c:341
+msgid "%F%P: failed to strip zero-sized dynamic sections\n"
+msgstr "%F%P : échec de la suppression des sections dynamiques de taille nulle\n"
-#: ldelfgen.c:417
+#: ldelfgen.c:419
msgid "%F%P: warning: CTF strtab association failed; strings will not be shared: %s\n"
msgstr "%F%P : avertissement : l'association CTF strtab a échoué ; les chaînes de caractères ne seront pas partagées : %s\n"
-#: ldelfgen.c:444
+#: ldelfgen.c:446
msgid "%F%P: warning: CTF symbol addition failed; CTF will not be tied to symbols: %s\n"
msgstr "%F%P : avertissement : l'addition de symbole CTF a échouée ; CTF ne sera pas lié aux symboles : %s\n"
-#: ldelfgen.c:454
+#: ldelfgen.c:456
msgid "%F%P: warning: CTF symbol shuffling failed; CTF will not be tied to symbols: %s\n"
msgstr "%F%P : avertissement : le remaniement de symboles CTF a échoué ; CTF ne sera pas lié aux symboles : %s\n"
@@ -287,7 +291,7 @@ msgstr "%F%P : %pS %% par zéro\n"
msgid "%F%P:%pS / by zero\n"
msgstr "%F%P : %pS : / par zéro\n"
-#: ldexp.c:737 ldlang.c:3982 ldmain.c:1269 earm_wince_pe.c:1804 earmpe.c:1804
+#: ldexp.c:737 ldlang.c:4011 ldmain.c:1271 earm_wince_pe.c:1804 earmpe.c:1804
#: ei386pe.c:1804 ei386pe_posix.c:1804 ei386pep.c:1699 emcorepe.c:1804
#: eshpe.c:1804
msgid "%F%P: bfd_link_hash_lookup failed: %E\n"
@@ -337,7 +341,7 @@ msgstr "%F%P : %s : la création du hachage a échoué\n"
msgid "%F%P:%pS: nonconstant expression for %s\n"
msgstr "%F%P : %pS : expression non constante pour %s\n"
-#: ldexp.c:1670 ldlang.c:1279 ldlang.c:3464 ldlang.c:7945
+#: ldexp.c:1670 ldlang.c:1279 ldlang.c:3493 ldlang.c:8066
msgid "%F%P: can not create hash table: %E\n"
msgstr "%F%P : ne peut créer une table de hachage : %E\n"
@@ -362,7 +366,9 @@ msgstr "%F%P : tentative de liaison statique de l'objet dynamique `%s'\n"
msgid "%P: cannot find %s (%s): %E\n"
msgstr "%P : ne peut pas trouver %s (%s) : %E\n"
-#: ldfile.c:410
+#. We ignore the return status of the script
+#. and always print the error message.
+#: ldfile.c:410 ldfile.c:494 ldfile.c:498
msgid "%P: cannot find %s: %E\n"
msgstr "%P : ne peut pas trouver %s : %E\n"
@@ -370,24 +376,18 @@ msgstr "%P : ne peut pas trouver %s : %E\n"
msgid "%P: cannot find %s inside %s\n"
msgstr "%P : ne peut trouver %s à l'intérieur de %s\n"
-#: ldfile.c:477 ldmain.c:1449
+#: ldfile.c:477 ldmain.c:1451
msgid "%P: About to run error handling script '%s' with arguments: '%s' '%s'\n"
msgstr "%P : Sur le point d'exécuter le script de gestion d'erreur « %s » avec les arguments : « %s » « %s »\n"
-#: ldfile.c:481 ldmain.c:1453
+#: ldfile.c:481 ldmain.c:1455
msgid "error handling script"
msgstr "erreur lors du traitement du script"
-#: ldfile.c:487 ldmain.c:1459
+#: ldfile.c:487 ldmain.c:1461
msgid "%P: Failed to run error handling script '%s', reason: "
msgstr "%P : Échec du lancement du script de gestion d'erreur « %s », cause : "
-#. We ignore the return status of the script
-#. and always print the error message.
-#: ldfile.c:494 ldfile.c:498
-msgid "%P: cannot find %s\n"
-msgstr "%P : ne peut trouver %s\n"
-
#: ldfile.c:508
msgid "%P: note to link with %s use -l:%s or rename it to lib%s\n"
msgstr "%P : notez que pour éditer les liens avec %s il faut utiliser -l:%s ou le renommer en lib%s\n"
@@ -512,225 +512,229 @@ msgstr "%P : %pS : avertissement : --enable-non-contiguous-regions fait corre
msgid "%P:%pS: warning: --enable-non-contiguous-regions may change behaviour for section `%pA' from '%pB' (assigned to %pA, but additional match: %pA)\n"
msgstr "%P : %pS : avertissement : --enable-non-contiguous-regions peut changer le comportement de la section « %pA » de « %pB » (assigné à %pA, mais avec une correspondance supplémentaire : %pA)\n"
-#: ldlang.c:3050
+#: ldlang.c:3063
msgid "%P: %pB: file not recognized: %E; matching formats:"
msgstr "%P : %pB : fichier non reconnu : %E ; formats correspondants :"
-#: ldlang.c:3058
+#: ldlang.c:3071
msgid "%F%P: %pB: file not recognized: %E\n"
msgstr "%F%P : %pB : fichier non reconnu : %E\n"
-#: ldlang.c:3131
+#: ldlang.c:3144
msgid "%F%P: %pB: member %pB in archive is not an object\n"
msgstr "%F%P : %pB : membre %B dans l'archive n'est pas un objet\n"
-#: ldlang.c:3434
+#: ldlang.c:3415
+msgid "%F%P: input file '%s' is the same as output file\n"
+msgstr "%F%P : le fichier d'entrée « %s » est le même que le fichier de sortie\n"
+
+#: ldlang.c:3463
msgid "%P: warning: could not find any targets that match endianness requirement\n"
msgstr "%P : avertissement : le repérage des cibles qui concordent avec le boutisme requis a échoué\n"
-#: ldlang.c:3448
+#: ldlang.c:3477
msgid "%F%P: target %s not found\n"
msgstr "%F%P : cible %s non trouvée\n"
-#: ldlang.c:3450
+#: ldlang.c:3479
msgid "%F%P: cannot open output file %s: %E\n"
msgstr "%F%P : ne peut ouvrir le fichier de sortie %s : %E\n"
-#: ldlang.c:3456
+#: ldlang.c:3485
msgid "%F%P: %s: can not make object file: %E\n"
msgstr "%F%P : %s : ne peut créer le fichier objet : %E\n"
-#: ldlang.c:3460
+#: ldlang.c:3489
msgid "%F%P: %s: can not set architecture: %E\n"
msgstr "%F%P : %s : ne peut initialiser l'architecture : %E\n"
-#: ldlang.c:3640
+#: ldlang.c:3669
msgid "%P: warning: %s contains output sections; did you forget -T?\n"
msgstr "%P : avertissement : %s contient des sections de sortie; avez-vous oublié -T?\n"
-#: ldlang.c:3687
+#: ldlang.c:3716
#, c-format
msgid "%s: %s\n"
msgstr "%s : %s\n"
-#: ldlang.c:3687
+#: ldlang.c:3716
msgid "CTF warning"
msgstr "avertissement CTF"
-#: ldlang.c:3687
+#: ldlang.c:3716
msgid "CTF error"
msgstr "erreur CTF"
-#: ldlang.c:3693
+#: ldlang.c:3722
#, c-format
msgid "CTF error: cannot get CTF errors: `%s'\n"
msgstr "erreur CTF : impossible d'obtenir les erreurs CTF : « %s »\n"
-#: ldlang.c:3727
+#: ldlang.c:3756
msgid "%P: warning: CTF section in %pB not loaded; its types will be discarded: %s\n"
msgstr "%P : avertissement : la section CTF dans « %pB » n'est pas chargée : ses types seront écartés : %s\n"
-#: ldlang.c:3756
+#: ldlang.c:3785
msgid "%P: warning: CTF output not created: `%s'\n"
msgstr "%P : avertissement : sortie CTF non créée : « %s »\n"
-#: ldlang.c:3799
+#: ldlang.c:3828
msgid "%P: warning: CTF section in %pB cannot be linked: `%s'\n"
msgstr "%P : avertissement : les liens de la section CTF dans « %pB » ne peuvent être édités : « %s »\n"
-#: ldlang.c:3819
+#: ldlang.c:3848
msgid "%P: warning: CTF linking failed; output will have no CTF section: %s\n"
msgstr "%P : avertissement : l'édition de liens CTF a échoué ; la sortie n'aura pas de section CTF : %s\n"
-#: ldlang.c:3890
+#: ldlang.c:3919
msgid "%P: warning: CTF section emission failed; output will have no CTF section: %s\n"
msgstr "%P : avertissement : la création de la section CTF a échoué ; la sortie n'aura pas de section CTF : %s\n"
-#: ldlang.c:3929
+#: ldlang.c:3958
msgid "%P: warning: CTF section in %pB not linkable: %P was built without support for CTF\n"
msgstr "%P : avertissement : l'édition de liens pour la section CTF dans « %pB » n'est pas possible : %P a été construit sans prise en charge des CTF.\n"
-#: ldlang.c:4067
+#: ldlang.c:4096
msgid "%X%P: required symbol `%s' not defined\n"
msgstr "%X%P : symbole requis « %s » non défini\n"
-#: ldlang.c:4362
+#: ldlang.c:4394
msgid "warning: INSERT statement in linker script is incompatible with --enable-non-contiguous-regions.\n"
msgstr "avertissement : la déclaration INSERT dans le script de l'éditeur de liens est incompatible avec --enable-non-contiguous-regions.\n"
-#: ldlang.c:4375
+#: ldlang.c:4407
msgid "%F%P: %s not found for insert\n"
msgstr "%F%P : %s pas trouvé pour insertion\n"
-#: ldlang.c:4615
+#: ldlang.c:4647
msgid " load address 0x%V"
msgstr " address de chargement 0x%V"
-#: ldlang.c:4848
+#: ldlang.c:4880
msgid "%W (size before relaxing)\n"
msgstr "%W (taille avant relaxe)\n"
-#: ldlang.c:4941
+#: ldlang.c:4973
#, c-format
msgid "Address of section %s set to "
msgstr "Adresse de la section %s initialisé à "
-#: ldlang.c:5139
+#: ldlang.c:5171
#, c-format
msgid "Fail with %d\n"
msgstr "Échec avec %d\n"
-#: ldlang.c:5352
+#: ldlang.c:5384
msgid "%F%P: Output section '%s' not large enough for the linker-created stubs section '%s'.\n"
msgstr "%F%P : la section de sortie « %s » n'est pas assez large pour la section de secteurs d'amorçages « %s » créée par l'éditeur de liens.\n"
-#: ldlang.c:5357
+#: ldlang.c:5389
msgid "%F%P: Relaxation not supported with --enable-non-contiguous-regions (section '%s' would overflow '%s' after it changed size).\n"
msgstr "%F%P : la relaxation n'est pas prise en charge avec --enable-non-contiguous-regions (la section « %s » dépasserait « %s » après son changement de taille)\n"
-#: ldlang.c:5466
+#: ldlang.c:5498
msgid "%X%P: section %s VMA wraps around address space\n"
msgstr "%X%P : la VMA de la section %s englobe l'espace d'adressage\n"
-#: ldlang.c:5472
+#: ldlang.c:5504
msgid "%X%P: section %s LMA wraps around address space\n"
msgstr "%X%P : la LMA de la section %s englobe l'espace d'adressage\n"
-#: ldlang.c:5524
+#: ldlang.c:5556
msgid "%X%P: section %s LMA [%V,%V] overlaps section %s LMA [%V,%V]\n"
msgstr "%X%P : la LMA de la section %s [%V,%V] chevauche la LMA de la section %s [%V,%V]\n"
-#: ldlang.c:5568
+#: ldlang.c:5600
msgid "%X%P: section %s VMA [%V,%V] overlaps section %s VMA [%V,%V]\n"
msgstr "%X%P: la VMA de la section %s [%V,%V] chevauche la VMA de la section %s [%V,%V]\n"
-#: ldlang.c:5591
+#: ldlang.c:5623
msgid "%X%P: region `%s' overflowed by %lu byte\n"
msgid_plural "%X%P: region `%s' overflowed by %lu bytes\n"
msgstr[0] "%X%P : la région « %s » est débordée de %lu octet\n"
msgstr[1] "%X%P : la région « %s » est débordée de %lu octets\n"
-#: ldlang.c:5616
+#: ldlang.c:5648
msgid "%X%P: address 0x%v of %pB section `%s' is not within region `%s'\n"
msgstr "%X%P : l'adresse 0x%v de %pB de la section «%s» n'est pas dans la région «%s»\n"
-#: ldlang.c:5627
+#: ldlang.c:5659
msgid "%X%P: %pB section `%s' will not fit in region `%s'\n"
msgstr "%X%P : %pB la section «%s» ne va pas s'adapter à la région «%s»\n"
-#: ldlang.c:5713
+#: ldlang.c:5745
msgid "%F%P:%pS: non constant or forward reference address expression for section %s\n"
msgstr "%F%P : %pS : référence d'adresse avant d'expression ou non constante pour la section %s\n"
-#: ldlang.c:5738
+#: ldlang.c:5770
msgid "%X%P: internal error on COFF shared library section %s\n"
msgstr "%X%P : erreur interne dans la section de bibliothèque partagée COFF %s\n"
-#: ldlang.c:5796
+#: ldlang.c:5828
msgid "%F%P: error: no memory region specified for loadable section `%s'\n"
msgstr "%F%P : erreur : aucune région mémoire spécifiée pour la section chargeable « %s »\n"
-#: ldlang.c:5800
+#: ldlang.c:5832
msgid "%P: warning: no memory region specified for loadable section `%s'\n"
msgstr "%P : avertissement : aucune région mémoire spécifiée pour la section chargeable « %s »\n"
-#: ldlang.c:5834
+#: ldlang.c:5866
msgid "%P: warning: start of section %s changed by %ld\n"
msgstr "%P : avertissement : modification du début de la section %s de %ld\n"
-#: ldlang.c:5926
+#: ldlang.c:5958
msgid "%P: warning: dot moved backwards before `%s'\n"
msgstr "%P : avertissement : point (.) déplacé avant « %s »\n"
-#: ldlang.c:6107
+#: ldlang.c:6139
msgid "%F%P: can't relax section: %E\n"
msgstr "%F%P : ne peut relâcher la section : %E\n"
-#: ldlang.c:6528
+#: ldlang.c:6603
msgid "%F%P: invalid data statement\n"
msgstr "%F%P : déclaration invalide de données\n"
-#: ldlang.c:6561
+#: ldlang.c:6636
msgid "%F%P: invalid reloc statement\n"
msgstr "%F%P : déclaration invalide de relocalisation\n"
-#: ldlang.c:6941
+#: ldlang.c:7053
msgid "%F%P: --gc-sections requires a defined symbol root specified by -e or -u\n"
msgstr "%F%P : --gc-sections requière un symbole racine défini spécifié par -e ou -u\n"
-#: ldlang.c:6966
+#: ldlang.c:7078
msgid "%F%P: %s: can't set start address\n"
msgstr "%F%P : %s : ne peut initialiser l'adresse de départ\n"
-#: ldlang.c:6979 ldlang.c:6997
+#: ldlang.c:7091 ldlang.c:7110
msgid "%F%P: can't set start address\n"
msgstr "%F%P : impossible d'initialiser l'adresse de départ\n"
-#: ldlang.c:6991
+#: ldlang.c:7104
msgid "%P: warning: cannot find entry symbol %s; defaulting to %V\n"
msgstr "%P : avertissement : le symbole d'entrée %s est introuvable ; utilise par défaut %V\n"
-#: ldlang.c:7002
+#: ldlang.c:7115 ldlang.c:7123
msgid "%P: warning: cannot find entry symbol %s; not setting start address\n"
msgstr "%P : avertissement : le symbole d'entrée %s est introuvable ; pas d'initialisation de l'adresse de départ\n"
-#: ldlang.c:7059
+#: ldlang.c:7179
msgid "%F%P: relocatable linking with relocations from format %s (%pB) to format %s (%pB) is not supported\n"
msgstr "%F%P : l'édition de liens relocalisables avec une relocalisation du format %s (%pB) vers le format %s (%pB) n'est pas prise en charge\n"
-#: ldlang.c:7069
+#: ldlang.c:7189
msgid "%X%P: %s architecture of input file `%pB' is incompatible with %s output\n"
msgstr "%X%P : architecture %s du fichier d'entrée « %B » est incompatible avec la sortie %s\n"
-#: ldlang.c:7093
+#: ldlang.c:7213
msgid "%X%P: failed to merge target specific data of file %pB\n"
msgstr "%X%P : échec de fusion des données spécifiques cibles du fichier %pB\n"
-#: ldlang.c:7164
+#: ldlang.c:7284
msgid "%F%P: could not define common symbol `%pT': %E\n"
msgstr "%F%P : Impossible de définir le symbole commun «%pT» : %E\n"
-#: ldlang.c:7176
+#: ldlang.c:7296
msgid ""
"\n"
"Allocating common symbols\n"
@@ -738,7 +742,7 @@ msgstr ""
"\n"
"Allocation des symboles communs\n"
-#: ldlang.c:7177
+#: ldlang.c:7297
msgid ""
"Common symbol size file\n"
"\n"
@@ -746,83 +750,83 @@ msgstr ""
"Symbole commun taille fichier\n"
"\n"
-#: ldlang.c:7250
+#: ldlang.c:7370
msgid "%X%P: error: unplaced orphan section `%pA' from `%pB'\n"
msgstr "%X%P : erreur : section orpheline « %pA » non placée depuis « %pB »\n"
-#: ldlang.c:7268
+#: ldlang.c:7388
msgid "%P: warning: orphan section `%pA' from `%pB' being placed in section `%s'\n"
msgstr "%P : avertissement : la section orpheline « %pA » de « %pB » est placée dans la section « %s »\n"
-#: ldlang.c:7358
+#: ldlang.c:7478
msgid "%F%P: invalid character %c (%d) in flags\n"
msgstr "%F%P : caractère %c (%d) invalide dans les fanions\n"
-#: ldlang.c:7467
+#: ldlang.c:7587
msgid "%F%P:%pS: error: align with input and explicit align specified\n"
msgstr "%F%P : %pS : erreur : alignement avec l'entrée et alignement explicite défini\n"
-#: ldlang.c:7981
+#: ldlang.c:8102
msgid "%F%P: %s: plugin reported error after all symbols read\n"
msgstr "%F%P : %s : le greffon a reporté une erreur après avoir lu tous les symboles\n"
-#: ldlang.c:8421
+#: ldlang.c:8538
msgid "%F%P: multiple STARTUP files\n"
msgstr "%F%P : fichiers DÉPART multiples\n"
-#: ldlang.c:8467
+#: ldlang.c:8584
msgid "%X%P:%pS: section has both a load address and a load region\n"
msgstr "%X%P : %pS : section a à la fois une adresse de chargement et une région de chargement\n"
-#: ldlang.c:8573
+#: ldlang.c:8690
msgid "%X%P:%pS: PHDRS and FILEHDR are not supported when prior PT_LOAD headers lack them\n"
msgstr "%X%P : %pS : PHDRS et FILEHDR ne sont pas pris en charge lorsque des entêtes prioritaires PT_LOAD ne les ont pas\n"
-#: ldlang.c:8646
+#: ldlang.c:8763
msgid "%F%P: no sections assigned to phdrs\n"
msgstr "%F%P : aucune section n'est assignée à phdrs\n"
-#: ldlang.c:8684
+#: ldlang.c:8801
msgid "%F%P: bfd_record_phdr failed: %E\n"
msgstr "%F%P : bfd_record_phdr en échec : %E\n"
-#: ldlang.c:8704
+#: ldlang.c:8821
msgid "%X%P: section `%s' assigned to non-existent phdr `%s'\n"
msgstr "%X%P : section « %s » affectée à phdr inexistent « %s »\n"
-#: ldlang.c:9127
+#: ldlang.c:9244
msgid "%X%P: unknown language `%s' in version information\n"
msgstr "%X%P : langage inconnue « %s » dans l'information de la version\n"
-#: ldlang.c:9272
+#: ldlang.c:9389
msgid "%X%P: anonymous version tag cannot be combined with other version tags\n"
msgstr "%X%P : étiquette de version anonyme ne peut être combinée avec d'autres étiquettes de version\n"
-#: ldlang.c:9281
+#: ldlang.c:9398
msgid "%X%P: duplicate version tag `%s'\n"
msgstr "%X%P : duplication de l'étiquette de version « %s »\n"
-#: ldlang.c:9302 ldlang.c:9311 ldlang.c:9329 ldlang.c:9339
+#: ldlang.c:9419 ldlang.c:9428 ldlang.c:9446 ldlang.c:9456
msgid "%X%P: duplicate expression `%s' in version information\n"
msgstr "%X%P : duplication de l'expression « %s » dans l'information de version\n"
-#: ldlang.c:9379
+#: ldlang.c:9496
msgid "%X%P: unable to find version dependency `%s'\n"
msgstr "%X%P : incapable de repérer les dépendences de version « %s »\n"
-#: ldlang.c:9402
+#: ldlang.c:9519
msgid "%X%P: unable to read .exports section contents\n"
msgstr "%X%P : incapable de lire le contenu de la section .exports\n"
-#: ldlang.c:9448
+#: ldlang.c:9565
msgid "%P: invalid origin for memory region %s\n"
msgstr "%P : origine invalide pour la région mémoire %s\n"
-#: ldlang.c:9460
+#: ldlang.c:9577
msgid "%P: invalid length for memory region %s\n"
msgstr "%P : longueur invalide pour la région mémoire %s\n"
-#: ldlang.c:9572
+#: ldlang.c:9689
msgid "%X%P: unknown feature `%s'\n"
msgstr "%P%F : caractéristique inconnue «%s»\n"
@@ -838,90 +842,90 @@ msgstr "%F%P : erreur fatale : l'ABI de libbfd ne concorde pas\n"
msgid "%X%P: can't set BFD default target to `%s': %E\n"
msgstr "%X%P : impossible d'initialiser la cible par défaut de BFD à « %s » : %E\n"
-#: ldmain.c:403
+#: ldmain.c:405
msgid "built in linker script"
msgstr "construit dans le script d'édition de liens"
-#: ldmain.c:413
+#: ldmain.c:415
msgid "using external linker script:"
msgstr "utilisation du script externe d'édition de liens :"
-#: ldmain.c:415
+#: ldmain.c:417
msgid "using internal linker script:"
msgstr "utilisation du script interne d'édition de liens :"
-#: ldmain.c:462
+#: ldmain.c:464
msgid "%F%P: --no-define-common may not be used without -shared\n"
msgstr "%F%P : --no-define-common ne doit pas être utilisé sans -shared\n"
-#: ldmain.c:468
+#: ldmain.c:470
msgid "%F%P: no input files\n"
msgstr "%F%P : aucun fichier d'entrée\n"
-#: ldmain.c:472
+#: ldmain.c:474
msgid "%P: mode %s\n"
msgstr "%P : mode %s\n"
-#: ldmain.c:488 ends32belf.c:427 ends32belf16m.c:427 ends32belf_linux.c:560
-#: ends32elf.c:427 ends32elf16m.c:427 ends32elf_linux.c:560
+#: ldmain.c:490 ends32belf.c:429 ends32belf16m.c:429 ends32belf_linux.c:562
+#: ends32elf.c:429 ends32elf16m.c:429 ends32elf_linux.c:562
msgid "%F%P: cannot open map file %s: %E\n"
msgstr "%F%P : impossible d'ouvrir le fichier de la table de projection %s : %E\n"
-#: ldmain.c:541
+#: ldmain.c:543
msgid "%P: link errors found, deleting executable `%s'\n"
msgstr "%P : erreurs de lien trouvés, destruction de l'exécutable « %s »\n"
-#: ldmain.c:550
+#: ldmain.c:552
msgid "%F%P: %pB: final close failed: %E\n"
msgstr "%F%P : %pB : fermeture finale en échec : %E\n"
-#: ldmain.c:577
+#: ldmain.c:579
msgid "%F%P: unable to open for source of copy `%s'\n"
msgstr "%F%P : incapable d'ouvrir la copie source de « %s »\n"
-#: ldmain.c:580
+#: ldmain.c:582
msgid "%F%P: unable to open for destination of copy `%s'\n"
msgstr "%F%P : incpapable d'ouvrir la copie destination de « %s »\n"
-#: ldmain.c:587
+#: ldmain.c:589
msgid "%P: error writing file `%s'\n"
msgstr "%P : erreur lors de l'écriture du fichier « %s »\n"
-#: ldmain.c:592 pe-dll.c:1965
+#: ldmain.c:594 pe-dll.c:1966
#, c-format
msgid "%P: error closing file `%s'\n"
msgstr "%P : erreur lors de la fermeture du fichier « %s »\n"
-#: ldmain.c:606
+#: ldmain.c:608
#, c-format
msgid "%s: total time in link: %ld.%06ld\n"
msgstr "%s : temps total d'édition de liens : %ld.%06ld\n"
-#: ldmain.c:693
+#: ldmain.c:695
msgid "%F%P: missing argument to -m\n"
msgstr "%F%P : argument manquant pour -m\n"
-#: ldmain.c:747 ldmain.c:764 ldmain.c:784 ldmain.c:816 pe-dll.c:1396
+#: ldmain.c:749 ldmain.c:766 ldmain.c:786 ldmain.c:818 pe-dll.c:1397
msgid "%F%P: bfd_hash_table_init failed: %E\n"
msgstr "%F%P : bfd_hash_table_init en échec : %E\n"
-#: ldmain.c:751 ldmain.c:768 ldmain.c:788
+#: ldmain.c:753 ldmain.c:770 ldmain.c:790
msgid "%F%P: bfd_hash_lookup failed: %E\n"
msgstr "%F%P : bfd_hash_lookup en échec : %E\n"
-#: ldmain.c:802
+#: ldmain.c:804
msgid "%X%P: error: duplicate retain-symbols-file\n"
msgstr "%X%P : erreur : duplication dans retain-symbols-file\n"
-#: ldmain.c:846
+#: ldmain.c:848
msgid "%F%P: bfd_hash_lookup for insertion failed: %E\n"
msgstr "%F%P : échec de bfd_hash_lookup lors d'une insertion : %E\n"
-#: ldmain.c:851
+#: ldmain.c:853
msgid "%P: `-retain-symbols-file' overrides `-s' and `-S'\n"
msgstr "%P : « -retain-symbols-file » écrase les options « -s » et « -S »\n"
-#: ldmain.c:967
+#: ldmain.c:969
msgid ""
"Archive member included to satisfy reference by file (symbol)\n"
"\n"
@@ -929,139 +933,139 @@ msgstr ""
"Membre d'archive inclu pour satisfaire la référence par fichier (symbole)\n"
"\n"
-#: ldmain.c:1077
+#: ldmain.c:1079
msgid "%P: %C: warning: multiple definition of `%pT'"
msgstr "%P : %C : avertissement : définitions multiples de « %pT »"
-#: ldmain.c:1080
+#: ldmain.c:1082
msgid "%X%P: %C: multiple definition of `%pT'"
msgstr "%X%P : %C : définitions multiples de « %pT »"
-#: ldmain.c:1083
+#: ldmain.c:1085
msgid "; %D: first defined here"
msgstr "; %D : défini pour la première fois ici"
-#: ldmain.c:1088
+#: ldmain.c:1090
msgid "%P: disabling relaxation; it will not work with multiple definitions\n"
msgstr "%P : désactivation de la relâche : il ne pourra pas travailler avec des définitions multiples\n"
-#: ldmain.c:1141
+#: ldmain.c:1143
msgid "%P: %pB: warning: definition of `%pT' overriding common from %pB\n"
msgstr "%B : %pB : avertissement : la définition de « %pT » écrase le commun de %pB\n"
-#: ldmain.c:1145
+#: ldmain.c:1147
msgid "%P: %pB: warning: definition of `%pT' overriding common\n"
msgstr "%P : %pB : avertissement : la définition de « %pT » écrase le commun\n"
-#: ldmain.c:1154
+#: ldmain.c:1156
msgid "%P: %pB: warning: common of `%pT' overridden by definition from %pB\n"
msgstr "%P : %pB : avertissement : le commun de « %pT » est écrasé par sa définition depuis %pB\n"
-#: ldmain.c:1158
+#: ldmain.c:1160
msgid "%P: %pB: warning: common of `%pT' overridden by definition\n"
msgstr "%P : %pB : avertissement : le commun de « %pT » est écrasé par une définition\n"
-#: ldmain.c:1167
+#: ldmain.c:1169
msgid "%P: %pB: warning: common of `%pT' overridden by larger common from %pB\n"
msgstr "%P : %pB : avertissement : le commun de « %pT » est écrasé par un commun de plus grande taille depuis %pB\n"
-#: ldmain.c:1171
+#: ldmain.c:1173
msgid "%P: %pB: warning: common of `%pT' overridden by larger common\n"
msgstr "%P : %pB : avertissement : le commun de « %pT » est écrasé par un commun de plus grande taille\n"
-#: ldmain.c:1178
+#: ldmain.c:1180
msgid "%P: %pB: warning: common of `%pT' overriding smaller common from %pB\n"
msgstr "%P : %pB : avertissement : le commun de « %pT » écrase un commun de plus petite taille\n"
-#: ldmain.c:1182
+#: ldmain.c:1184
msgid "%P: %pB: warning: common of `%pT' overriding smaller common\n"
msgstr "%P : %pB : avertissement : le commun de « %pT » écrase un commun de plus petite taille\n"
-#: ldmain.c:1189
+#: ldmain.c:1191
msgid "%P: %pB and %pB: warning: multiple common of `%pT'\n"
msgstr "%P : %pB et %pB : avertissement : communs multiples de « %pT »\n"
-#: ldmain.c:1192
+#: ldmain.c:1194
msgid "%P: %pB: warning: multiple common of `%pT'\n"
msgstr "%P : %pB : avertissement : communs multiples de « %pT »\n"
-#: ldmain.c:1211 ldmain.c:1247
+#: ldmain.c:1213 ldmain.c:1249
msgid "%P: warning: global constructor %s used\n"
msgstr "%P : avertissement : constructeur global %s est utilisé\n"
-#: ldmain.c:1257
+#: ldmain.c:1259
msgid "%F%P: BFD backend error: BFD_RELOC_CTOR unsupported\n"
msgstr "%F%P : erreur du moteur BFD : BFD_RELOC_CTOR non pris en charge\n"
#. We found a reloc for the symbol we are looking for.
-#: ldmain.c:1329 ldmain.c:1331 ldmain.c:1333 ldmain.c:1341 ldmain.c:1384
+#: ldmain.c:1331 ldmain.c:1333 ldmain.c:1335 ldmain.c:1343 ldmain.c:1386
msgid "warning: "
msgstr "avertissement : "
-#: ldmain.c:1474
+#: ldmain.c:1476
msgid "%X%P: %C: undefined reference to `%pT'\n"
msgstr "%X%P : %C : référence indéfinie vers « %pT »\n"
-#: ldmain.c:1477
+#: ldmain.c:1479
msgid "%P: %C: warning: undefined reference to `%pT'\n"
msgstr "%P : %C : avertissement : référence indéfinie vers « %pT »\n"
-#: ldmain.c:1483
+#: ldmain.c:1485
msgid "%X%P: %D: more undefined references to `%pT' follow\n"
msgstr "%X%P : %D : encore plus de références indéfinies suivent vers « %pT »\n"
-#: ldmain.c:1486
+#: ldmain.c:1488
msgid "%P: %D: warning: more undefined references to `%pT' follow\n"
msgstr "%P : %D : avertissement : encore plus de références indéfinies suivent vers « %pT »\n"
-#: ldmain.c:1497
+#: ldmain.c:1499
msgid "%X%P: %pB: undefined reference to `%pT'\n"
msgstr "%X%P : %pB : référence indéfinie vers « %pT »\n"
-#: ldmain.c:1500
+#: ldmain.c:1502
msgid "%P: %pB: warning: undefined reference to `%pT'\n"
msgstr "%P : %pB : avertissement : référence indéfinie vers « %pT »\n"
-#: ldmain.c:1506
+#: ldmain.c:1508
msgid "%X%P: %pB: more undefined references to `%pT' follow\n"
msgstr "%X%P : %pB : encore plus de références indéfinies suivent vers « %pT »\n"
-#: ldmain.c:1509
+#: ldmain.c:1511
msgid "%P: %pB: warning: more undefined references to `%pT' follow\n"
msgstr "%P : %pB : avertissement : encore plus de références indéfinies suivent vers « %pT »\n"
-#: ldmain.c:1546
+#: ldmain.c:1548
msgid " additional relocation overflows omitted from the output\n"
msgstr " débordement de relocalisation additionnelle omise à partir de la sortie\n"
-#: ldmain.c:1559
+#: ldmain.c:1561
#, c-format
msgid " relocation truncated to fit: %s against undefined symbol `%pT'"
msgstr " relocalisation tronquée pour concorder avec la taille : %s vers le symbole indéfini %pT"
-#: ldmain.c:1565
+#: ldmain.c:1567
#, c-format
msgid " relocation truncated to fit: %s against symbol `%pT' defined in %pA section in %pB"
msgstr " relocalisation tronquée pour concorder : %s vers le symbole « %pT » défini sans la section %pA dans %pB"
-#: ldmain.c:1578
+#: ldmain.c:1580
#, c-format
msgid " relocation truncated to fit: %s against `%pT'"
msgstr " relocalisation tronquée pour concorder : %s avec « %pT »"
-#: ldmain.c:1594
+#: ldmain.c:1596
msgid "%X%H: dangerous relocation: %s\n"
msgstr "%X%H : relocalisation dangereuse : %s\n"
-#: ldmain.c:1608
+#: ldmain.c:1610
msgid "%X%H: reloc refers to symbol `%pT' which is not being output\n"
msgstr "%X%H : la relocalisation réfère au symbole «%pT» qui n'est pas écrit\n"
-#: ldmain.c:1642
+#: ldmain.c:1644
msgid "%P: %pB: reference to %s\n"
msgstr "%P : %pB : référence vers %s\n"
-#: ldmain.c:1644
+#: ldmain.c:1646
msgid "%P: %pB: definition of %s\n"
msgstr "%P : %pB : définition de %s\n"
@@ -1099,8 +1103,8 @@ msgstr "GNU ld %s\n"
#: ldver.c:42
#, c-format
-msgid "Copyright (C) 2021 Free Software Foundation, Inc.\n"
-msgstr "Copyright (C) 2021 Free Software Foundation, Inc.\n"
+msgid "Copyright (C) 2022 Free Software Foundation, Inc.\n"
+msgstr "Copyright (C) 2022 Free Software Foundation, Inc.\n"
#: ldver.c:43
#, c-format
@@ -1155,7 +1159,7 @@ msgstr "ARCH"
msgid "Set architecture"
msgstr "Initilisé l'architecture"
-#: lexsup.c:110 lexsup.c:424
+#: lexsup.c:110 lexsup.c:425
msgid "TARGET"
msgstr "CIBLE"
@@ -1164,8 +1168,8 @@ msgid "Specify target for following input files"
msgstr "Spécifier la cible pour les règles suivantes pour les fichiers d'entrée"
#: lexsup.c:113 lexsup.c:119 lexsup.c:176 lexsup.c:180 lexsup.c:216
-#: lexsup.c:229 lexsup.c:231 lexsup.c:442 lexsup.c:511 lexsup.c:524
-#: lexsup.c:528
+#: lexsup.c:229 lexsup.c:231 lexsup.c:447 lexsup.c:516 lexsup.c:529
+#: lexsup.c:533
msgid "FILE"
msgstr "FICHIER"
@@ -1185,8 +1189,8 @@ msgstr "Écrire le fichier de dépendance"
msgid "Force group members out of groups"
msgstr "Forcer les membres de groupe en dehors des groupes"
-#: lexsup.c:124 lexsup.c:488 lexsup.c:490 lexsup.c:492 lexsup.c:494
-#: lexsup.c:496 lexsup.c:498
+#: lexsup.c:124 lexsup.c:493 lexsup.c:495 lexsup.c:497 lexsup.c:499
+#: lexsup.c:501 lexsup.c:503
msgid "ADDRESS"
msgstr "ADRESSE"
@@ -1394,8 +1398,8 @@ msgstr "Lecture du script de l'éditeur de lien"
msgid "Read default linker script"
msgstr "Lecture du script par défaut de l'éditeur de lien"
-#: lexsup.c:235 lexsup.c:238 lexsup.c:256 lexsup.c:347 lexsup.c:371
-#: lexsup.c:481 lexsup.c:514 lexsup.c:526 lexsup.c:564 lexsup.c:567
+#: lexsup.c:235 lexsup.c:238 lexsup.c:256 lexsup.c:348 lexsup.c:372
+#: lexsup.c:486 lexsup.c:519 lexsup.c:531 lexsup.c:569 lexsup.c:572
msgid "SYMBOL"
msgstr "SYMBOLE"
@@ -1443,7 +1447,7 @@ msgstr "Ne pas ignorer tous les symboles locaux"
msgid "Trace mentions of SYMBOL"
msgstr "Tracer les mentions de SYMBOLE"
-#: lexsup.c:258 lexsup.c:444 lexsup.c:446
+#: lexsup.c:258 lexsup.c:449 lexsup.c:451
msgid "PATH"
msgstr "CHEMIN"
@@ -1545,133 +1549,133 @@ msgid ""
" in filename invoked by -R or --just-symbols"
msgstr ""
"Ne pas autoriser les définitions multiples avec des symboles inclus\n"
-" depuis des noms de fichier invoqués par -R ou --just-symbols"
+" depuis des noms de fichier invoqués par -R ou --just-symbols"
-#: lexsup.c:339
+#: lexsup.c:340
msgid "Generate embedded relocs"
msgstr "Générer des relocalisations imbriqués"
-#: lexsup.c:341
+#: lexsup.c:342
msgid "Treat warnings as errors"
msgstr "Traiter les avertissements comme des erreurs"
-#: lexsup.c:344
+#: lexsup.c:345
msgid "Do not treat warnings as errors (default)"
msgstr "Ne pas traiter les avertissements comme des erreurs (défaut)"
-#: lexsup.c:347
+#: lexsup.c:348
msgid "Call SYMBOL at unload-time"
msgstr "Appeler le SYMBOLE au moment du déchargement"
-#: lexsup.c:349
+#: lexsup.c:350
msgid "Force generation of file with .exe suffix"
msgstr "Force la génération de fichier avec le suffixe .exe"
-#: lexsup.c:351
+#: lexsup.c:352
msgid "Remove unused sections (on some targets)"
msgstr "Enlever les sections inutilisées (sur quelques cibles)"
-#: lexsup.c:354
+#: lexsup.c:355
msgid "Don't remove unused sections (default)"
msgstr "Ne pas enlever les sections inutilisées (par défaut)"
-#: lexsup.c:357
+#: lexsup.c:358
msgid "List removed unused sections on stderr"
msgstr "Afficher sur stderr la liste des sections inutilisées et supprimées"
-#: lexsup.c:360
+#: lexsup.c:361
msgid "Do not list removed unused sections"
msgstr "Ne pas afficher la liste des sections inutilisées supprimées"
-#: lexsup.c:363
+#: lexsup.c:364
msgid "Keep exported symbols when removing unused sections"
msgstr "Conserver les symboles exportés lors de la suppression de sections inutilisées"
-#: lexsup.c:366
+#: lexsup.c:367
msgid "Set default hash table size close to <NUMBER>"
msgstr "Initialiser la table de hachage par défaut près de <NUMÉRO>"
-#: lexsup.c:369
+#: lexsup.c:370
msgid "Print option help"
msgstr "Afficher l'aide-mémoire"
-#: lexsup.c:371
+#: lexsup.c:372
msgid "Call SYMBOL at load-time"
msgstr "Appeler le SYMBOLE au moment du chargement"
-#: lexsup.c:373
+#: lexsup.c:374
msgid "FILE/DIR"
msgstr "FICHIER/RÉPERTOIRE"
-#: lexsup.c:373
+#: lexsup.c:374
msgid "Write a linker map to FILE or DIR/<outputname>.map"
msgstr "Écrire une table d'édition de liens dans FICHIER ou RÉPERTOIRE/<outputname>.map"
-#: lexsup.c:375
+#: lexsup.c:376
msgid "Do not define Common storage"
msgstr "Ne pas définir le stockage commun"
-#: lexsup.c:377
+#: lexsup.c:378
msgid "Do not demangle symbol names"
msgstr "Ne pas recouvrir les noms des symboles encodés par mutilisation"
-#: lexsup.c:379
+#: lexsup.c:380
msgid "Use less memory and more disk I/O"
msgstr "Utiliser moins de mémoire et plus d'espace disque"
-#: lexsup.c:381
+#: lexsup.c:382
msgid "Do not allow unresolved references in object files"
msgstr "Ne pas permettre les références indéfinis dans les objets partagés"
-#: lexsup.c:384
+#: lexsup.c:385
msgid "Allow unresolved references in shared libraries"
msgstr "Permettre les références non résolues dans les bibliothèques partagées"
-#: lexsup.c:388
+#: lexsup.c:389
msgid "Do not allow unresolved references in shared libs"
msgstr "Ne pas permettre les références non résolues dans les bibliothèques partagés"
-#: lexsup.c:392
+#: lexsup.c:393
msgid "Allow multiple definitions"
msgstr "Autoriser des définitions multiples"
-#: lexsup.c:396
+#: lexsup.c:397
msgid "SCRIPT"
msgstr "SCRIPT"
-#: lexsup.c:396
+#: lexsup.c:397
msgid "Provide a script to help with undefined symbol errors"
msgstr "Fournir un script pour aider avec les erreurs de symboles non définis"
-#: lexsup.c:399
+#: lexsup.c:400
msgid "Disallow undefined version"
msgstr "Ne pas permettre de version indéfinie"
-#: lexsup.c:401
+#: lexsup.c:402
msgid "Create default symbol version"
msgstr "Créer la version de symbole par défaut"
-#: lexsup.c:404
+#: lexsup.c:405
msgid "Create default symbol version for imported symbols"
msgstr "Créer la version de symbole par défaut pour les symboles importés"
-#: lexsup.c:407
+#: lexsup.c:408
msgid "Don't warn about mismatched input files"
msgstr "Ne pas avertir à propos des non-concordances dans les fichiers d'entrée"
-#: lexsup.c:410
+#: lexsup.c:411
msgid "Don't warn on finding an incompatible library"
msgstr "Ne pas avertir lorsqu'une bibliothèque incompatible est trouvée"
-#: lexsup.c:413
+#: lexsup.c:414
msgid "Turn off --whole-archive"
msgstr "Désactiver --whole-archive"
-#: lexsup.c:415
+#: lexsup.c:416
msgid "Create an output file even if errors occur"
msgstr "Créer un fichier de sortie même si des erreurs surviennent"
-#: lexsup.c:420
+#: lexsup.c:421
msgid ""
"Only use library directories specified on\n"
" the command line"
@@ -1679,147 +1683,151 @@ msgstr ""
"Utiliser seulement les répertoires de bibliothèques spécifiés sur\n"
" la ligne de commande"
-#: lexsup.c:424
+#: lexsup.c:425
msgid "Specify target of output file"
msgstr "Spécifier un fichier cible de sortie"
-#: lexsup.c:427
+#: lexsup.c:428
msgid "Print default output format"
msgstr "Afficher le format de sortie standard"
-#: lexsup.c:429
+#: lexsup.c:430
msgid "Print current sysroot"
msgstr "Imprimer le sysroot courant"
-#: lexsup.c:431
+#: lexsup.c:432
msgid "Ignored for Linux compatibility"
msgstr "Ignoré pour la compatibilité avec Linux"
-#: lexsup.c:434
+#: lexsup.c:435
msgid "Reduce memory overheads, possibly taking much longer"
msgstr "Réduire la surcharge en mémoire, en prenant possiblement plus de temps"
-#: lexsup.c:437
+#: lexsup.c:439
+msgid "Set the maximum cache size to SIZE bytes"
+msgstr "Fixer la taille maximale du cache à TAILLE octets"
+
+#: lexsup.c:442
msgid "Reduce code size by using target specific optimizations"
msgstr "Réduire la taille du code en utilisant des optimisations spécifiques à la cible"
-#: lexsup.c:439
+#: lexsup.c:444
msgid "Do not use relaxation techniques to reduce code size"
msgstr "Ne pas utiliser de technique de relaxation pour réduire la taille du code"
-#: lexsup.c:442
+#: lexsup.c:447
msgid "Keep only symbols listed in FILE"
msgstr "Conserver uniquement les symboles listés dans le FICHIER"
-#: lexsup.c:444
+#: lexsup.c:449
msgid "Set runtime shared library search path"
msgstr "Initialisé le chemin de recherche des bibliothèques partagées pour l'exécution"
-#: lexsup.c:446
+#: lexsup.c:451
msgid "Set link time shared library search path"
msgstr "Initialisé le chemin de recherche des bibliothèques partagées pour l'édition de liens"
-#: lexsup.c:449
+#: lexsup.c:454
msgid "Create a shared library"
msgstr "Créer une bibliothèque partagée"
-#: lexsup.c:453
+#: lexsup.c:458
msgid "Create a position independent executable"
msgstr "Créer un exécutable à position indépendante"
-#: lexsup.c:457
+#: lexsup.c:462
msgid "Create a position dependent executable (default)"
msgstr "Créer un exécutable dépendant de la position (défaut)"
-#: lexsup.c:459
+#: lexsup.c:464
msgid "[=ascending|descending]"
msgstr "[=croissant|décroissant]"
-#: lexsup.c:460
+#: lexsup.c:465
msgid "Sort common symbols by alignment [in specified order]"
msgstr "Trier les symboles communs par taille [dans l'ordre spécifié]"
-#: lexsup.c:465
+#: lexsup.c:470
msgid "name|alignment"
msgstr "nom|alignement"
-#: lexsup.c:466
+#: lexsup.c:471
msgid "Sort sections by name or maximum alignment"
msgstr "Tries les sections par le nom ou l'alignement maximal"
-#: lexsup.c:468
+#: lexsup.c:473
msgid "COUNT"
msgstr "DÉCOMPTE"
-#: lexsup.c:468
+#: lexsup.c:473
msgid "How many tags to reserve in .dynamic section"
msgstr "Combien d'étiquettes réservées dans la section .dynamic"
-#: lexsup.c:471
+#: lexsup.c:476
msgid "[=SIZE]"
msgstr "[=TAILLE]"
-#: lexsup.c:471
+#: lexsup.c:476
msgid "Split output sections every SIZE octets"
msgstr "Découper à la sortie les sections à chaque NOMBRE d'octets"
-#: lexsup.c:474
+#: lexsup.c:479
msgid "[=COUNT]"
msgstr "[=DÉCOMPTE]"
-#: lexsup.c:474
+#: lexsup.c:479
msgid "Split output sections every COUNT relocs"
msgstr "Découper à la sortie les sections à chaque NOMBRE de relocalisations"
-#: lexsup.c:477
+#: lexsup.c:482
msgid "Print memory usage statistics"
msgstr "Afficher les statistiques de l'utilisation de la mémoire"
-#: lexsup.c:479
+#: lexsup.c:484
msgid "Display target specific options"
msgstr "Afficher les options spécifiques cibles"
-#: lexsup.c:481
+#: lexsup.c:486
msgid "Do task level linking"
msgstr "Composer des liens au niveau de l'exécution de la tache"
-#: lexsup.c:483
+#: lexsup.c:488
msgid "Use same format as native linker"
msgstr "Utiliser le même format que l'éditeur de lien natif"
-#: lexsup.c:485
+#: lexsup.c:490
msgid "SECTION=ADDRESS"
msgstr "SECTION=ADRESSE"
-#: lexsup.c:485
+#: lexsup.c:490
msgid "Set address of named section"
msgstr "Initialisé l'adresse de la section nommé"
-#: lexsup.c:488
+#: lexsup.c:493
msgid "Set address of .bss section"
msgstr "Initialisé l'adresse de la section .bss"
-#: lexsup.c:490
+#: lexsup.c:495
msgid "Set address of .data section"
msgstr "Initialisé l'adresse de la section .data"
-#: lexsup.c:492
+#: lexsup.c:497
msgid "Set address of .text section"
msgstr "Initialisé l'adresse de la section .text"
-#: lexsup.c:494
+#: lexsup.c:499
msgid "Set address of text segment"
msgstr "Initialise l'adresse des segments de texte"
-#: lexsup.c:496
+#: lexsup.c:501
msgid "Set address of rodata segment"
msgstr "Initialise l'adresse des segments de données constantes en lecture seule"
-#: lexsup.c:498
+#: lexsup.c:503
msgid "Set address of ldata segment"
msgstr "Initialise l'adresse des segments de données (ldata)"
-#: lexsup.c:501
+#: lexsup.c:506
msgid ""
"How to handle unresolved symbols. <method> is:\n"
" ignore-all, report-all, ignore-in-object-files,\n"
@@ -1829,19 +1837,19 @@ msgstr ""
" ignore-all, report-all, ignore-in-object-files,\n"
" ignore-in-shared-libs"
-#: lexsup.c:506
+#: lexsup.c:511
msgid "[=NUMBER]"
msgstr "[=NUMERO]"
-#: lexsup.c:507
+#: lexsup.c:512
msgid "Output lots of information during link"
msgstr "Afficher des tas d'information durant l'édition de lien"
-#: lexsup.c:511
+#: lexsup.c:516
msgid "Read version information script"
msgstr "Lire le script des informations de version"
-#: lexsup.c:514
+#: lexsup.c:519
msgid ""
"Take export symbols list from .exports, using\n"
" SYMBOL as the version."
@@ -1849,119 +1857,119 @@ msgstr ""
"Prendre la liste des symboles exportés de .exports, en utilisant\n"
" SYMBOLE comme version."
-#: lexsup.c:518
+#: lexsup.c:523
msgid "Add data symbols to dynamic list"
msgstr "Ajouter les symboles de données à la liste dynamique"
-#: lexsup.c:520
+#: lexsup.c:525
msgid "Use C++ operator new/delete dynamic list"
msgstr "Utiliser la liste dynamique d'opérateur C++ new/delete"
-#: lexsup.c:522
+#: lexsup.c:527
msgid "Use C++ typeinfo dynamic list"
msgstr "Utiliser la liste dynamique C++ typeinfo"
-#: lexsup.c:524
+#: lexsup.c:529
msgid "Read dynamic list"
msgstr "Lire la liste dynamique"
-#: lexsup.c:526
+#: lexsup.c:531
msgid "Export the specified symbol"
msgstr "Exporter les symboles spécifiés"
-#: lexsup.c:528
+#: lexsup.c:533
msgid "Read export dynamic symbol list"
msgstr "Lire la liste des symboles dynamiques exportés"
-#: lexsup.c:530
+#: lexsup.c:535
msgid "Warn about duplicate common symbols"
msgstr "Avertir au sujet des symboles communs dupliqués"
-#: lexsup.c:532
+#: lexsup.c:537
msgid "Warn if global constructors/destructors are seen"
msgstr "Avertir si des constructeurs/destructeurs globaux sont détectés"
-#: lexsup.c:535
+#: lexsup.c:540
msgid "Warn if the multiple GP values are used"
msgstr "Avertir si des valeurs GP multiples sont utilisées"
-#: lexsup.c:537
+#: lexsup.c:542
msgid "Warn only once per undefined symbol"
msgstr "Avertir seulement une fois pour chaque symbole indéfini"
-#: lexsup.c:539
+#: lexsup.c:544
msgid "Warn if start of section changes due to alignment"
msgstr "Avertir si le début de la section est modifié en raison de l'alignement"
-#: lexsup.c:544
+#: lexsup.c:549
msgid "Warn if output has DT_TEXTREL (default)"
msgstr "Avertir si la sortie a DT_TEXTREL (défaut)"
-#: lexsup.c:546
+#: lexsup.c:551
msgid "Warn if output has DT_TEXTREL"
msgstr "Avertir si la sortie a DT_TEXTREL"
-#: lexsup.c:552
+#: lexsup.c:557
msgid "Warn if an object has alternate ELF machine code"
msgstr "Avertir si un objet a un un code machine ELF alternatif"
-#: lexsup.c:556
+#: lexsup.c:561
msgid "Report unresolved symbols as warnings"
msgstr "Rapporter les symboles non résolus par avertissement"
-#: lexsup.c:559
+#: lexsup.c:564
msgid "Report unresolved symbols as errors"
msgstr "Rapporter des symboles non résolus comme des errreurs"
-#: lexsup.c:561
+#: lexsup.c:566
msgid "Include all objects from following archives"
msgstr "Inclure tous les objets des archives suivantes"
-#: lexsup.c:564
+#: lexsup.c:569
msgid "Use wrapper functions for SYMBOL"
msgstr "Utiliser les fonctions d'emballage pour SYMBOLE"
-#: lexsup.c:568
+#: lexsup.c:573
msgid "Unresolved SYMBOL will not cause an error or warning"
msgstr "Le SYMBOLE non résolu ne causera ni erreur ni avertissement"
-#: lexsup.c:570
+#: lexsup.c:575
msgid "Push state of flags governing input file handling"
msgstr "Pousse l'état des drapeaux contrôlant la gestion des fichiers d'entrée"
-#: lexsup.c:573
+#: lexsup.c:578
msgid "Pop state of flags governing input file handling"
msgstr "Retire l'état des drapeaux contrôlant la gestion des fichiers d'entrée"
-#: lexsup.c:576
+#: lexsup.c:581
msgid "Report target memory usage"
msgstr "Rend compte de l'utilisation mémoire de la cible"
-#: lexsup.c:578
+#: lexsup.c:583
msgid "=MODE"
msgstr "=MODE"
-#: lexsup.c:578
+#: lexsup.c:583
msgid "Control how orphan sections are handled."
msgstr "Contrôle comment les sections orphelines sont gérées."
-#: lexsup.c:581
+#: lexsup.c:586
msgid "Show discarded sections in map file output (default)"
msgstr "Montrer les sections écartées dans la sortie du fichier de mappage (défaut)"
-#: lexsup.c:584
+#: lexsup.c:589
msgid "Do not show discarded sections in map file output"
msgstr "Ne pas afficher les sections écartées dans la sortie du fichier de mappage"
-#: lexsup.c:587
+#: lexsup.c:592
msgid "Emit names and types of static variables in CTF"
msgstr "Émettre les noms et types des variables statiques dans CTF"
-#: lexsup.c:590
+#: lexsup.c:595
msgid "Do not emit names and types of static variables in CTF"
msgstr "Ne pas émettre les noms et types des variables statiques dans CTF"
-#: lexsup.c:594
+#: lexsup.c:599
msgid ""
"How to share CTF types between translation units.\n"
" <method> is: share-unconflicted (default),\n"
@@ -1971,60 +1979,61 @@ msgstr ""
" <method> est : share-unconflicted (default),\n"
" share-duplicated"
-#: lexsup.c:758
+#: lexsup.c:763
msgid "%F%P: Error: unable to disambiguate: %s (did you mean -%s ?)\n"
msgstr "%F%P : Erreur : incapable de résoudre les ambigüités : %s (voulez-vous dire -%s ?)\n"
-#: lexsup.c:761
+#: lexsup.c:766
msgid "%P: Warning: grouped short command line options are deprecated: %s\n"
msgstr "%P : avertissement : le groupement des options courtes de la ligne de commande est obsolète : %s\n"
-#: lexsup.c:788
+#: lexsup.c:793
msgid "%P: %s: missing argument\n"
msgstr "%P : %s : argument manquant\n"
-#: lexsup.c:793
+#: lexsup.c:798
msgid "%P: unrecognized option '%s'\n"
msgstr "%P : option « %s » non reconnue\n"
-#: lexsup.c:798
+#: lexsup.c:803
msgid "%F%P: use the --help option for usage information\n"
msgstr "%F%P : utiliser --help pour afficher l'aide-mémoire\n"
-#: lexsup.c:817
+#: lexsup.c:822
msgid "%F%P: unrecognized -a option `%s'\n"
msgstr "%F%P : -a option non reconnue « %s »\n"
-#: lexsup.c:830
+#: lexsup.c:835
msgid "%F%P: unrecognized -assert option `%s'\n"
msgstr "%F%P : -assert option non reconnue « %s »\n"
-#: lexsup.c:874
+#: lexsup.c:879
msgid "%F%P: unknown demangling style `%s'\n"
msgstr "%F%P : style inconnu de recouvrement du transcodage par mutilisation « %s »\n"
-#: lexsup.c:950 lexsup.c:1424 eaarch64cloudabi.c:816 eaarch64cloudabib.c:816
-#: eaarch64elf.c:811 eaarch64elf32.c:811 eaarch64elf32b.c:811
-#: eaarch64elfb.c:811 eaarch64fbsd.c:816 eaarch64fbsdb.c:816
-#: eaarch64linux.c:816 eaarch64linux32.c:816 eaarch64linux32b.c:816
-#: eaarch64linuxb.c:816 earmelf.c:1077 earmelf_fbsd.c:1077
-#: earmelf_fuchsia.c:1082 earmelf_linux.c:1082 earmelf_linux_eabi.c:1082
-#: earmelf_linux_fdpiceabi.c:1082 earmelf_nacl.c:1082 earmelf_nbsd.c:1077
-#: earmelf_phoenix.c:1082 earmelf_vxworks.c:1113 earmelfb.c:1077
-#: earmelfb_fbsd.c:1077 earmelfb_fuchsia.c:1082 earmelfb_linux.c:1082
-#: earmelfb_linux_eabi.c:1082 earmelfb_linux_fdpiceabi.c:1082
-#: earmelfb_nacl.c:1082 earmelfb_nbsd.c:1077 earmnto.c:1052 ecskyelf.c:539
-#: ecskyelf_linux.c:706 eelf32metag.c:703 eelf64lppc.c:1169
-#: eelf64lppc_fbsd.c:1169 eelf64ppc.c:1169 eelf64ppc_fbsd.c:1169
-#: ehppaelf.c:559 ehppalinux.c:741 ehppanbsd.c:741 ehppaobsd.c:741
+#: lexsup.c:955 lexsup.c:1429 eaarch64cloudabi.c:818 eaarch64cloudabib.c:818
+#: eaarch64elf.c:813 eaarch64elf32.c:813 eaarch64elf32b.c:813
+#: eaarch64elfb.c:813 eaarch64fbsd.c:818 eaarch64fbsdb.c:818
+#: eaarch64haiku.c:818 eaarch64linux.c:818 eaarch64linux32.c:818
+#: eaarch64linux32b.c:818 eaarch64linuxb.c:818 earmelf.c:1079
+#: earmelf_fbsd.c:1079 earmelf_fuchsia.c:1084 earmelf_haiku.c:1084
+#: earmelf_linux.c:1084 earmelf_linux_eabi.c:1084
+#: earmelf_linux_fdpiceabi.c:1084 earmelf_nacl.c:1084 earmelf_nbsd.c:1079
+#: earmelf_phoenix.c:1084 earmelf_vxworks.c:1115 earmelfb.c:1079
+#: earmelfb_fbsd.c:1079 earmelfb_fuchsia.c:1084 earmelfb_linux.c:1084
+#: earmelfb_linux_eabi.c:1084 earmelfb_linux_fdpiceabi.c:1084
+#: earmelfb_nacl.c:1084 earmelfb_nbsd.c:1079 earmnto.c:1054 ecskyelf.c:541
+#: ecskyelf_linux.c:708 eelf32metag.c:705 eelf64lppc.c:1187
+#: eelf64lppc_fbsd.c:1187 eelf64ppc.c:1187 eelf64ppc_fbsd.c:1187
+#: ehppaelf.c:561 ehppalinux.c:743 ehppanbsd.c:743 ehppaobsd.c:743
msgid "%F%P: invalid number `%s'\n"
msgstr "%F%P : nombre invalide « %s »\n"
-#: lexsup.c:1046
+#: lexsup.c:1051
msgid "%F%P: bad --unresolved-symbols option: %s\n"
msgstr "%F%P : option erronée de --unresolved-symbols : %s\n"
-#: lexsup.c:1123
+#: lexsup.c:1128
msgid "%F%P: bad -plugin-opt option\n"
msgstr "%F%P : mauvaise option -plugin-opt\n"
@@ -2036,158 +2045,162 @@ msgstr "%F%P : mauvaise option -plugin-opt\n"
#. an error message here. We cannot just make this a warning,
#. increment optind, and continue because getopt is too confused
#. and will seg-fault the next time around.
-#: lexsup.c:1140
+#: lexsup.c:1145
msgid "%F%P: unrecognised option: %s\n"
msgstr "%F%P : option non reconnue : %s\n"
-#: lexsup.c:1143 lexsup.c:1253 lexsup.c:1274 lexsup.c:1393
+#: lexsup.c:1148 lexsup.c:1258 lexsup.c:1279 lexsup.c:1398
msgid "%F%P: -r and %s may not be used together\n"
msgstr "%F%P : -r et %s ne peuvent être utilisés ensemble\n"
-#: lexsup.c:1265
+#: lexsup.c:1270
msgid "%F%P: -shared not supported\n"
msgstr "%F%P : -shared non pris en charge\n"
-#: lexsup.c:1279
+#: lexsup.c:1284
msgid "%F%P: -pie not supported\n"
msgstr "%F%P : -pie n'est pas prise en charge\n"
-#: lexsup.c:1285
+#: lexsup.c:1290
msgid "%P: SONAME must not be empty string; keeping previous one\n"
msgstr "%P: SONAME ne doit pas être une chaîne vide ; conservation de la précédente\n"
-#: lexsup.c:1291
+#: lexsup.c:1296
msgid "descending"
msgstr "décroissant"
-#: lexsup.c:1293
+#: lexsup.c:1298
msgid "ascending"
msgstr "croissant"
-#: lexsup.c:1296
+#: lexsup.c:1301
msgid "%F%P: invalid common section sorting option: %s\n"
msgstr "%F%P : option de trie de section invalide : %s\n"
-#: lexsup.c:1300
+#: lexsup.c:1305
msgid "name"
msgstr "nom"
-#: lexsup.c:1302
+#: lexsup.c:1307
msgid "alignment"
msgstr "alignement"
-#: lexsup.c:1305
+#: lexsup.c:1310
msgid "%F%P: invalid section sorting option: %s\n"
msgstr "%F%P : option de trie de section invalide : %s\n"
-#: lexsup.c:1342
+#: lexsup.c:1347
msgid "%F%P: invalid argument to option \"--section-start\"\n"
msgstr "%F%P : argument invalide pour l'option \"--section-start\"\n"
-#: lexsup.c:1349
+#: lexsup.c:1354
msgid "%F%P: missing argument(s) to option \"--section-start\"\n"
msgstr "%F%P : un ou plusieurs arguments manquants pour l'option \"--section-start\"\n"
-#: lexsup.c:1614
+#: lexsup.c:1619
msgid "%F%P: group ended before it began (--help for usage)\n"
msgstr "%F%P : fin du groupe avant son début (--help pour l'usage)\n"
-#: lexsup.c:1642
+#: lexsup.c:1644
+msgid "%F%P: invalid cache memory size: %s\n"
+msgstr "%F%P : taille de mémoire cache non valide : %s\n"
+
+#: lexsup.c:1658
msgid "%X%P: --hash-size needs a numeric argument\n"
msgstr "%X%P : --hash-size a beoin d'un argument numérique\n"
-#: lexsup.c:1654
+#: lexsup.c:1670
msgid "%F%P: no state pushed before popping\n"
msgstr "%F%P : aucun état n'a été poussé avant le dépilage\n"
-#: lexsup.c:1677
+#: lexsup.c:1693
msgid "%F%P: invalid argument to option \"--orphan-handling\"\n"
msgstr "%F%P : argument invalide pour l'option \"--section-start\"\n"
-#: lexsup.c:1707
+#: lexsup.c:1723
msgid "%F%P: bad --ctf-share-types option: %s\n"
msgstr "%F%P : option erronée de --ctf-share-types : %s\n"
-#: lexsup.c:1725
+#: lexsup.c:1741
msgid "%P: no file/directory name provided for map output; ignored\n"
msgstr "%P : aucun nom de fichier/répertoire donné pour la sortie de la projection ; ignoré\n"
-#: lexsup.c:1753
+#: lexsup.c:1769
msgid "%P: cannot stat linker map file: %E\n"
msgstr "%P : ne peut trouver le fichier de projection de l'éditeur de liens : %E\n"
-#: lexsup.c:1765
+#: lexsup.c:1781
msgid "%P: linker map file is not a regular file\n"
msgstr "%P : le fichier de projection de l'éditeur de liens n'est pas un fichier normal\n"
#. If the asprintf failed then something is probably very
#. wrong. Better to halt now rather than continue on
#. into more problems.
-#: lexsup.c:1776
+#: lexsup.c:1792
msgid "%P%F: cannot create name for linker map file: %E\n"
msgstr "%F%P : ne peut créer de nom pour le fichier de projection de l'éditeur de liens : %E\n"
-#: lexsup.c:1787
+#: lexsup.c:1803
msgid "%P: SONAME must not be empty string; ignored\n"
msgstr "%P : SONAME ne doit pas être une chaîne vide ; ignoré\n"
-#: lexsup.c:1793
+#: lexsup.c:1809
msgid "%P: missing --end-group; added as last command line option\n"
msgstr "%P : --end-group manquant ; ajouté comme dernière option de la ligne de commande\n"
-#: lexsup.c:1901
+#: lexsup.c:1917
msgid "%F%P: -F may not be used without -shared\n"
msgstr "%F%P : -F ne peut être utilisé sans -shared\n"
-#: lexsup.c:1903
+#: lexsup.c:1919
msgid "%F%P: -f may not be used without -shared\n"
msgstr "%F%P : -f ne peut être utilisé sans -shared\n"
-#: lexsup.c:1944 lexsup.c:1957
+#: lexsup.c:1960 lexsup.c:1973
msgid "%F%P: invalid hex number `%s'\n"
msgstr "%F%P : nombre hexadécimal invalide « %s »\n"
-#: lexsup.c:1987
+#: lexsup.c:2003
#, c-format
msgid " --audit=AUDITLIB Specify a library to use for auditing\n"
msgstr " --audit=AUDITLIB Specifie une bibliothèque à utiliser pour l'audit\n"
-#: lexsup.c:1989
+#: lexsup.c:2005
#, c-format
msgid " -Bgroup Selects group name lookup rules for DSO\n"
msgstr " -Bgroup Selectionne les règles de recherche de nom de groupe pour le DSO\n"
-#: lexsup.c:1991
+#: lexsup.c:2007
#, c-format
msgid " --disable-new-dtags Disable new dynamic tags\n"
msgstr " --disable-new-dtags Désactiver les nouvelles étiquettes dynamiques\n"
-#: lexsup.c:1993
+#: lexsup.c:2009
#, c-format
msgid " --enable-new-dtags Enable new dynamic tags\n"
msgstr " --enable-new-dtags Activer les nouvelles étiquettes dynamiques\n"
-#: lexsup.c:1995
+#: lexsup.c:2011
#, c-format
msgid " --eh-frame-hdr Create .eh_frame_hdr section\n"
msgstr " --eh-frame-hdr Créer la section .eh_frame_hdr\n"
-#: lexsup.c:1997
+#: lexsup.c:2013
#, c-format
msgid " --no-eh-frame-hdr Do not create .eh_frame_hdr section\n"
msgstr " --no-eh-frame-hdr Ne pas créer la section .eh_frame_hdr\n"
-#: lexsup.c:1999
+#: lexsup.c:2015
#, c-format
msgid " --exclude-libs=LIBS Make all symbols in LIBS hidden\n"
msgstr " --exclude-libs=LIBS Rendre cachés tous les symboles dans LIBS\n"
-#: lexsup.c:2001
+#: lexsup.c:2017
#, c-format
msgid " --hash-style=STYLE Set hash style to sysv/gnu/both. Default: "
msgstr " --hash-style=STYLE Fixer le style de hachage à sysv/gnu/both. Défaut :"
-#: lexsup.c:2020
+#: lexsup.c:2036
#, c-format
msgid ""
" -P AUDITLIB, --depaudit=AUDITLIB\n"
@@ -2196,17 +2209,17 @@ msgstr ""
" -P AUDITLIB, --depaudit=AUDITLIB\n"
" Specifie une bibliothèque à utiliser pour auditionner les dépendences\n"
-#: lexsup.c:2023
+#: lexsup.c:2039
#, c-format
msgid " -z combreloc Merge dynamic relocs into one section and sort\n"
msgstr " -z combreloc Fusionner et trier les relocalisations dynamiques dans une seule section\n"
-#: lexsup.c:2025
+#: lexsup.c:2041
#, c-format
msgid " -z nocombreloc Don't merge dynamic relocs into one section\n"
msgstr " -z nocombreloc Ne pas fusionner les relocalisations dynamiques dans une seule section\n"
-#: lexsup.c:2027
+#: lexsup.c:2043
#, c-format
msgid ""
" -z global Make symbols in DSO available for subsequently\n"
@@ -2215,67 +2228,67 @@ msgstr ""
" -z global Rendre les symboles dans le DSO disponibles pour les objects\n"
" chargés par la suite\n"
-#: lexsup.c:2030
+#: lexsup.c:2046
#, c-format
msgid " -z initfirst Mark DSO to be initialized first at runtime\n"
msgstr " -z initfirst Marquer le DSO pour qu'il soit initialisé en premier à l'exécution\n"
-#: lexsup.c:2032
+#: lexsup.c:2048
#, c-format
msgid " -z interpose Mark object to interpose all DSOs but executable\n"
msgstr " -z interpose Marquer les objets pour qu'ils s'interposent à tous les DSOs mais pas aux exécutables\n"
-#: lexsup.c:2034
+#: lexsup.c:2050
#, c-format
msgid " -z unique Mark DSO to be loaded at most once by default, and only in the main namespace\n"
msgstr " -z unique Marquer le DSO pour n'être chargé qu'une seule fois par défaut et uniquement dans l'espace de noms principal\n"
-#: lexsup.c:2036
+#: lexsup.c:2052
#, c-format
msgid " -z nounique Don't mark DSO as a loadable at most once\n"
msgstr " -z nounique Ne pas marquer le DSO comme ne pouvant être chargé qu'une seule fois\n"
-#: lexsup.c:2038
+#: lexsup.c:2054
#, c-format
msgid " -z lazy Mark object lazy runtime binding (default)\n"
msgstr " -z lazy Marquer la liaison de l'objet paresseuse à l'exécution (défaut)\n"
-#: lexsup.c:2040
+#: lexsup.c:2056
#, c-format
msgid " -z loadfltr Mark object requiring immediate process\n"
msgstr " -z loadfltr Marquer les objets nécessitant un traitement immédiat\n"
-#: lexsup.c:2042
+#: lexsup.c:2058
#, c-format
msgid " -z nocopyreloc Don't create copy relocs\n"
msgstr " -z nocopyreloc Ne pas créer de copie de relocalisations\n"
-#: lexsup.c:2044
+#: lexsup.c:2060
#, c-format
msgid " -z nodefaultlib Mark object not to use default search paths\n"
msgstr " -z nodefaultlib Marquer les objets pour ne pas qu'ils utilisent les chemins de recherche par défaut\n"
-#: lexsup.c:2046
+#: lexsup.c:2062
#, c-format
msgid " -z nodelete Mark DSO non-deletable at runtime\n"
msgstr " -z nodelete Marquer le DSO comme non supprimable à l'exécution\n"
-#: lexsup.c:2048
+#: lexsup.c:2064
#, c-format
msgid " -z nodlopen Mark DSO not available to dlopen\n"
msgstr " -z nodlopen Marquer le DSO comme non accessible pour dlopen\n"
-#: lexsup.c:2050
+#: lexsup.c:2066
#, c-format
msgid " -z nodump Mark DSO not available to dldump\n"
msgstr " -z nodump Marquer le DSO comme non accessible pour dldump\n"
-#: lexsup.c:2052
+#: lexsup.c:2068
#, c-format
msgid " -z now Mark object non-lazy runtime binding\n"
msgstr " -z now Marquer la liaison de l'objet non paresseuse à l'exécution\n"
-#: lexsup.c:2054
+#: lexsup.c:2070
#, c-format
msgid ""
" -z origin Mark object requiring immediate $ORIGIN\n"
@@ -2284,92 +2297,92 @@ msgstr ""
" -z origin Marquer l'objet comme nécessitant un traitement immédiat de\n"
" $ORIGIN à l'exécution\n"
-#: lexsup.c:2058
+#: lexsup.c:2074
#, c-format
msgid " -z relro Create RELRO program header (default)\n"
msgstr " -z relro Créer l'en-tête de programme RELRO (défaut)\n"
-#: lexsup.c:2060
+#: lexsup.c:2076
#, c-format
msgid " -z norelro Don't create RELRO program header\n"
msgstr " -z norelro Ne pas créer l'en-tête de programme RELRO\n"
-#: lexsup.c:2063
+#: lexsup.c:2079
#, c-format
msgid " -z relro Create RELRO program header\n"
msgstr " -z relro Créer l'en-tête de programme RELRO\n"
-#: lexsup.c:2065
+#: lexsup.c:2081
#, c-format
msgid " -z norelro Don't create RELRO program header (default)\n"
msgstr " -z norelro Ne pas créer l'en-tête de programme RELRO (défaut)\n"
-#: lexsup.c:2069
+#: lexsup.c:2085
#, c-format
msgid " -z separate-code Create separate code program header (default)\n"
msgstr " -z separate-code Créer l'en-tête de programme de code séparé (défaut)\n"
-#: lexsup.c:2071
+#: lexsup.c:2087
#, c-format
msgid " -z noseparate-code Don't create separate code program header\n"
msgstr " -z noseparate-code Ne pas créer l'en-tête de programme de code séparé\n"
-#: lexsup.c:2074
+#: lexsup.c:2090
#, c-format
msgid " -z separate-code Create separate code program header\n"
msgstr " -z separate-code Créer l'en-tête de programme de code séparé\n"
-#: lexsup.c:2076
+#: lexsup.c:2092
#, c-format
msgid " -z noseparate-code Don't create separate code program header (default)\n"
msgstr " -z noseparate-code Ne pas créer l'en-tête de programme de code séparé (défaut)\n"
-#: lexsup.c:2079
+#: lexsup.c:2095
#, c-format
msgid " -z common Generate common symbols with STT_COMMON type\n"
msgstr " -z common Générer les symboles communs avec STT_COMMON pour type\n"
-#: lexsup.c:2081
+#: lexsup.c:2097
#, c-format
msgid " -z nocommon Generate common symbols with STT_OBJECT type\n"
msgstr " -z nocommon Générer les symboles communs avec STT_OBJECT pour type\n"
-#: lexsup.c:2084
+#: lexsup.c:2100
#, c-format
msgid " -z text Treat DT_TEXTREL in output as error (default)\n"
msgstr " -z text Traiter DT_TEXTREL dans la sortie comme une erreur (défaut)\n"
-#: lexsup.c:2087
+#: lexsup.c:2103
#, c-format
msgid " -z text Treat DT_TEXTREL in output as error\n"
msgstr " -z text Traiter DT_TEXTREL dans la sortie comme une erreur\n"
-#: lexsup.c:2091
+#: lexsup.c:2107
#, c-format
msgid " -z notext Don't treat DT_TEXTREL in output as error (default)\n"
msgstr " -z notext Ne pas traiter DT_TEXTREL dans la sortie comme une erreur (défaut)\n"
-#: lexsup.c:2093
+#: lexsup.c:2109
#, c-format
msgid " -z textoff Don't treat DT_TEXTREL in output as error (default)\n"
msgstr " -z textoff Ne pas traiter DT_TEXTREL dans la sortie comme une erreur (défaut)\n"
-#: lexsup.c:2098
+#: lexsup.c:2114
#, c-format
msgid " -z notext Don't treat DT_TEXTREL in output as error\n"
msgstr " -z notext Ne pas traiter DT_TEXTREL dans la sortie comme une erreur\n"
-#: lexsup.c:2100
+#: lexsup.c:2116
#, c-format
msgid " -z textoff Don't treat DT_TEXTREL in output as error\n"
msgstr " -z textoff Ne pas traiter DT_TEXTREL dans la sortie comme une erreur\n"
-#: lexsup.c:2108
+#: lexsup.c:2124
#, c-format
msgid " --build-id[=STYLE] Generate build ID note\n"
msgstr " --build-id[=STYLE] Générer la note de l'ID de contruction\n"
-#: lexsup.c:2110
+#: lexsup.c:2126
#, c-format
msgid ""
" --compress-debug-sections=[none|zlib|zlib-gnu|zlib-gabi]\n"
@@ -2378,82 +2391,82 @@ msgstr ""
" --compress-debug-sections=[none|zlib|zlib-gnu|zlib-gabi]\n"
" Compresser les sections de debogage DWARF en utilisant zlib\n"
-#: lexsup.c:2114
+#: lexsup.c:2130
#, c-format
msgid " Default: zlib-gabi\n"
msgstr " Défaut: zlib-gabi\n"
-#: lexsup.c:2117
+#: lexsup.c:2133
#, c-format
msgid " Default: none\n"
msgstr " Défaut: none\n"
-#: lexsup.c:2120
+#: lexsup.c:2136
#, c-format
msgid " -z common-page-size=SIZE Set common page size to SIZE\n"
msgstr " -z common-page-size=TAILLE Fixe la taille courante des pages à TAILLE\n"
-#: lexsup.c:2122
+#: lexsup.c:2138
#, c-format
msgid " -z max-page-size=SIZE Set maximum page size to SIZE\n"
msgstr " -z max-page-size=TAILLE Fixe la taille maximale des pages à TAILLE\n"
-#: lexsup.c:2124
+#: lexsup.c:2140
#, c-format
msgid " -z defs Report unresolved symbols in object files\n"
msgstr " -z defs Signaler les symboles non résolus dans les fichiers objets\n"
-#: lexsup.c:2126
+#: lexsup.c:2142
#, c-format
msgid " -z undefs Ignore unresolved symbols in object files\n"
msgstr " -z undefs Signaler les symboles non résolus dans les fichiers objets\n"
-#: lexsup.c:2128
+#: lexsup.c:2144
#, c-format
msgid " -z muldefs Allow multiple definitions\n"
msgstr "-z muldefs Autoriser les définitions multiples\n"
-#: lexsup.c:2130
+#: lexsup.c:2146
#, c-format
msgid " -z stack-size=SIZE Set size of stack segment\n"
msgstr " -z stack-size=TAILLE Fixe la taille du segment de pile\n"
-#: lexsup.c:2132
+#: lexsup.c:2148
#, c-format
msgid " -z execstack Mark executable as requiring executable stack\n"
msgstr " -z execstack Marquer l'exécutable comme nécessitant une pile d'exécution\n"
-#: lexsup.c:2134
+#: lexsup.c:2150
#, c-format
msgid " -z noexecstack Mark executable as not requiring executable stack\n"
msgstr " -z noexecstack Marquer l'exécutable comme ne nécessitant pas d'une pile d'exécution\n"
-#: lexsup.c:2136
+#: lexsup.c:2152
#, c-format
msgid " -z unique-symbol Avoid duplicated local symbol names\n"
msgstr " -z unique-symbol Éviter les noms de symboles locaux dupliqués\n"
-#: lexsup.c:2138
+#: lexsup.c:2154
#, c-format
msgid " -z nounique-symbol Keep duplicated local symbol names (default)\n"
msgstr " -z nounique-symbol Conserver les noms de symboles locaux dupliqués (défaut)\n"
-#: lexsup.c:2140
+#: lexsup.c:2156
#, c-format
msgid " -z globalaudit Mark executable requiring global auditing\n"
msgstr " -z globalaudit Marquer l'exécutable comme nécessitant un audit global\n"
-#: lexsup.c:2142
+#: lexsup.c:2158
#, c-format
msgid " -z start-stop-gc Enable garbage collection on __start/__stop\n"
msgstr " -z start-stop-gc Activer le ramasse-miette pour __start/__stop\n"
-#: lexsup.c:2144
+#: lexsup.c:2160
#, c-format
msgid " -z nostart-stop-gc Don't garbage collect __start/__stop (default)\n"
msgstr " -z nostart-stop-gc Ne pas exécuter le ramasse-miettes pour __start/__stop (défaut)\n"
-#: lexsup.c:2146
+#: lexsup.c:2162
#, c-format
msgid ""
" -z start-stop-visibility=V Set visibility of built-in __start/__stop symbols\n"
@@ -2462,12 +2475,12 @@ msgstr ""
" -z start-stop-visibility=V Établir la visibilité des symboles intégrés __start/__stop\n"
" à DEFAULT, PROTECTED, HIDDEN ou INTERNAL\n"
-#: lexsup.c:2154
+#: lexsup.c:2170
#, c-format
msgid " --ld-generated-unwind-info Generate exception handling info for PLT\n"
msgstr " --ld-generated-unwind-info Générer les informations de gestion des exception pour le PLT\n"
-#: lexsup.c:2156
+#: lexsup.c:2172
#, c-format
msgid ""
" --no-ld-generated-unwind-info\n"
@@ -2476,49 +2489,49 @@ msgstr ""
" --no-ld-generated-unwind-info\n"
" Ne pas générer les informations de gestion des exception pour le PLT\n"
-#: lexsup.c:2166
+#: lexsup.c:2182
#, c-format
msgid "ELF emulations:\n"
msgstr "ELF émulations:\n"
-#: lexsup.c:2184
+#: lexsup.c:2200
#, c-format
msgid "Usage: %s [options] file...\n"
msgstr "Usage : %s [options] fichier...\n"
-#: lexsup.c:2186
+#: lexsup.c:2202
#, c-format
msgid "Options:\n"
msgstr "Options :\n"
-#: lexsup.c:2264
+#: lexsup.c:2280
#, c-format
msgid " @FILE"
msgstr " @FICHIER"
-#: lexsup.c:2267
+#: lexsup.c:2283
#, c-format
msgid "Read options from FILE\n"
msgstr "Lire les options à partir du FICHIER\n"
#. Note: Various tools (such as libtool) depend upon the
#. format of the listings below - do not change them.
-#: lexsup.c:2272
+#: lexsup.c:2288
#, c-format
msgid "%s: supported targets:"
msgstr "%s : cibles prises en charge :"
-#: lexsup.c:2280
+#: lexsup.c:2296
#, c-format
msgid "%s: supported emulations: "
msgstr "%s : émulations prises en charge : "
-#: lexsup.c:2285
+#: lexsup.c:2301
#, c-format
msgid "%s: emulation specific options:\n"
msgstr "%s : options spécifiques d'émulation :\n"
-#: lexsup.c:2292
+#: lexsup.c:2308
#, c-format
msgid "Report bugs to %s\n"
msgstr "Rapporter toutes anomalies à %s\n"
@@ -2527,46 +2540,47 @@ msgstr "Rapporter toutes anomalies à %s\n"
msgid "%F%P: unknown format type %s\n"
msgstr "%F%P : type de format inconnu %s\n"
-#: pe-dll.c:447
+#: pe-dll.c:448
msgid "%X%P: unsupported PEI architecture: %s\n"
msgstr "%X%P : architecture PEI non prise en charge : %s\n"
-#: pe-dll.c:826
+#: pe-dll.c:827
msgid "%X%P: cannot export %s: invalid export name\n"
msgstr "%X%P : ne peut exporter %s : nom d'export invalide\n"
-#: pe-dll.c:878
+#: pe-dll.c:879
#, c-format
msgid "%X%P: error, duplicate EXPORT with ordinals: %s (%d vs %d)\n"
msgstr "%X%P : erreur, duplicattion EXPORT avec nombre ordinal : %s (%d vs %d)\n"
-#: pe-dll.c:885
+#: pe-dll.c:886
#, c-format
msgid "%P: warning, duplicate EXPORT: %s\n"
msgstr "%P : avertissement, duplication EXPORT : %s\n"
-#: pe-dll.c:992
+#: pe-dll.c:993
#, c-format
msgid "%X%P: cannot export %s: symbol not defined\n"
msgstr "%X%P : ne peut exporter %s : symbole indéfini\n"
-#: pe-dll.c:998
+#: pe-dll.c:999
#, c-format
msgid "%X%P: cannot export %s: symbol wrong type (%d vs %d)\n"
msgstr "%X%P : ne peut exporter %s : mauvais type de symbole (%d vs %d)\n"
-#: pe-dll.c:1005
+#: pe-dll.c:1006
#, c-format
msgid "%X%P: cannot export %s: symbol not found\n"
msgstr "%X%P : ne peut exporter %s : symbole non repéré\n"
-#: pe-dll.c:1028 eaarch64cloudabi.c:360 eaarch64cloudabib.c:360
+#: pe-dll.c:1029 eaarch64cloudabi.c:360 eaarch64cloudabib.c:360
#: eaarch64elf.c:359 eaarch64elf32.c:359 eaarch64elf32b.c:359
#: eaarch64elfb.c:359 eaarch64fbsd.c:360 eaarch64fbsdb.c:360
-#: eaarch64linux.c:360 eaarch64linux32.c:360 eaarch64linux32b.c:360
-#: eaarch64linuxb.c:360 eaix5ppc.c:1470 eaix5ppc.c:1480 eaix5rs6.c:1470
-#: eaix5rs6.c:1480 eaixppc.c:1470 eaixppc.c:1480 eaixrs6.c:1470 eaixrs6.c:1480
-#: earmelf.c:568 earmelf_fbsd.c:568 earmelf_fuchsia.c:569 earmelf_linux.c:569
+#: eaarch64haiku.c:360 eaarch64linux.c:360 eaarch64linux32.c:360
+#: eaarch64linux32b.c:360 eaarch64linuxb.c:360 eaix5ppc.c:1470 eaix5ppc.c:1480
+#: eaix5rs6.c:1470 eaix5rs6.c:1480 eaixppc.c:1470 eaixppc.c:1480
+#: eaixrs6.c:1470 eaixrs6.c:1480 earmelf.c:568 earmelf_fbsd.c:568
+#: earmelf_fuchsia.c:569 earmelf_haiku.c:569 earmelf_linux.c:569
#: earmelf_linux_eabi.c:569 earmelf_linux_fdpiceabi.c:569 earmelf_nacl.c:569
#: earmelf_nbsd.c:568 earmelf_phoenix.c:569 earmelf_vxworks.c:568
#: earmelfb.c:568 earmelfb_fbsd.c:568 earmelfb_fuchsia.c:569
@@ -2582,235 +2596,237 @@ msgstr "%X%P : ne peut exporter %s : symbole non repéré\n"
#: eelf32ltsmipn32_fbsd.c:172 eelf32metag.c:87 eelf32mipswindiss.c:172
#: eelf64bmip.c:186 eelf64btsmip.c:172 eelf64btsmip_fbsd.c:172
#: eelf64lppc.c:119 eelf64lppc_fbsd.c:119 eelf64ltsmip.c:172
-#: eelf64ltsmip_fbsd.c:172 eelf64ppc.c:119 eelf64ppc_fbsd.c:119 ehppaelf.c:110
-#: ehppalinux.c:110 ehppanbsd.c:110 ehppaobsd.c:110 em68hc11elf.c:170
-#: em68hc11elfb.c:170 em68hc12elf.c:170 em68hc12elfb.c:170 enios2elf.c:92
-#: enios2linux.c:92 eppcmacos.c:1470 eppcmacos.c:1480
+#: eelf64ltsmip_fbsd.c:172 eelf64ppc.c:119 eelf64ppc_fbsd.c:119
+#: eelf_mipsel_haiku.c:172 ehppaelf.c:110 ehppalinux.c:110 ehppanbsd.c:110
+#: ehppaobsd.c:110 em68hc11elf.c:170 em68hc11elfb.c:170 em68hc12elf.c:170
+#: em68hc12elfb.c:170 enios2elf.c:92 enios2linux.c:92 eppcmacos.c:1470
+#: eppcmacos.c:1480
msgid "%F%P: can not create BFD: %E\n"
msgstr "%F%P : ne peut créer le BFD : %E\n"
-#: pe-dll.c:1042
+#: pe-dll.c:1043
msgid "%X%P: can not create .edata section: %E\n"
msgstr "%X%P : ne peut créer la section .edata : %E\n"
-#: pe-dll.c:1056
+#: pe-dll.c:1057
msgid "%X%P: can not create .reloc section: %E\n"
msgstr "%X%P: ne peut créer la section .reloc : %E\n"
-#: pe-dll.c:1117
+#: pe-dll.c:1118
#, c-format
msgid "%X%P: error: ordinal used twice: %d (%s vs %s)\n"
msgstr "%X%P : erreur : ordinal utilisé 2 fois : %d (%s vs %s)\n"
-#: pe-dll.c:1153
+#: pe-dll.c:1154
#, c-format
msgid "%X%P: error: export ordinal too large: %d\n"
msgstr "%X%P : erreur : export d'un ordinal trop grand : %d\n"
-#: pe-dll.c:1476
+#: pe-dll.c:1477
#, c-format
msgid "Info: resolving %s by linking to %s (auto-import)\n"
msgstr "Info : résolution de %s par un lien vers %s (auto-importé)\n"
-#: pe-dll.c:1482
+#: pe-dll.c:1483
msgid "%P: warning: auto-importing has been activated without --enable-auto-import specified on the command line; this should work unless it involves constant data structures referencing symbols from auto-imported DLLs\n"
msgstr ""
"%P : avertissement : auto-importing a été activé sans que --enable-auto-import n'ait été spécifié dans la ligne de commande.\n"
"Cela devrait fonctionner à moins que cela n'implique des structures de données constantes référençant des symboles depuis des DLL importées automatiquements\n"
-#: pe-dll.c:1553
+#: pe-dll.c:1554
msgid "%P: zero vma section reloc detected: `%s' #%d f=%d\n"
msgstr "%P : aucune relocalisation de section vma détectée : `%s' #%d f=%d\n"
-#: pe-dll.c:1636
+#: pe-dll.c:1637
msgid "%P: base relocation for section `%s' above .reloc section\n"
msgstr "%P : relocalisation de base pour la section « %s » au dessus de la section .reloc\n"
-#: pe-dll.c:1685
+#: pe-dll.c:1686
#, c-format
msgid "%X%P: error: %d-bit reloc in dll\n"
msgstr "%X%P : erreur : %d-bit relocalisation dans dll\n"
-#: pe-dll.c:1810
+#: pe-dll.c:1811
#, c-format
msgid "%P: can't open output def file %s\n"
msgstr "%P : impossible d'ouvrir le fichier def %s\n"
-#: pe-dll.c:1961
+#: pe-dll.c:1962
#, c-format
msgid "; no contents available\n"
msgstr "; aucun contenu disponible\n"
-#: pe-dll.c:2820
+#: pe-dll.c:2822
msgid "%X%P: %C: variable '%pT' can't be auto-imported; please read the documentation for ld's --enable-auto-import for details\n"
msgstr "%X%P : %C : variable « %pT » ne peut être auto-importée ; merci de lire la documentation de ld --enable-auto-import pour plus de détails.\n"
-#: pe-dll.c:2847
+#: pe-dll.c:2850
#, c-format
msgid "%X%P: can't open .lib file: %s\n"
msgstr "%X%P : impossible d'ouvrir le fichier .lib : %s\n"
-#: pe-dll.c:2853
+#: pe-dll.c:2856
#, c-format
msgid "Creating library file: %s\n"
msgstr "Création du fichier de bibliothèque : %s\n"
-#: pe-dll.c:2883
+#: pe-dll.c:2886
msgid "%X%P: bfd_openr %s: %E\n"
msgstr "%X%P : bfd_openr %s : %E\n"
-#: pe-dll.c:2895
+#: pe-dll.c:2898
msgid "%X%P: %s(%s): can't find member in non-archive file"
msgstr "%X%P : %s (%s) : impossible de trouver le membre dans le fichier qui n'est pas une archive"
-#: pe-dll.c:2909
+#: pe-dll.c:2912
msgid "%X%P: %s(%s): can't find member in archive"
msgstr "%X%P : %s (%s) : impossible de trouver le membre dans l'archive"
-#: pe-dll.c:3174
+#: pe-dll.c:3177
msgid "%X%P: add symbols %s: %E\n"
msgstr "%X%P : ajout des symboles %s : %E\n"
-#: pe-dll.c:3361
+#: pe-dll.c:3365
msgid "%X%P: open %s: %E\n"
msgstr "%X%P : ouvre %s : %E\n"
-#: pe-dll.c:3370
+#: pe-dll.c:3374
msgid "%X%P: %s: this doesn't appear to be a DLL\n"
msgstr "%X%P : %s : cela ne semble pas être une DLL\n"
-#: pe-dll.c:3575
+#: pe-dll.c:3579
msgid "%X%P: error: can't use long section names on this arch\n"
msgstr "%X%P : erreur : impossible d'utiliser de longs noms de section pour cette architecture\n"
-#: plugin.c:233 plugin.c:279
+#: plugin.c:236 plugin.c:282
msgid "<no plugin>"
msgstr "<no plugin>"
-#: plugin.c:248 plugin.c:1100
+#: plugin.c:251 plugin.c:1111
msgid "%F%P: %s: error loading plugin: %s\n"
msgstr "%F%P : %s : erreur lors du chargement du greffon : %s\n"
-#: plugin.c:255
+#: plugin.c:258
msgid "%P: %s: duplicated plugin\n"
msgstr "%P : %s : greffon dupliqué\n"
-#: plugin.c:341
+#: plugin.c:344
msgid "%F%P: could not create dummy IR bfd: %E\n"
msgstr "%F%P : impossible de créer l'IR bfd factice : %E\n"
-#: plugin.c:422
+#: plugin.c:425
msgid "%F%P: %s: non-ELF symbol in ELF BFD!\n"
msgstr "%F%P : %s : symbole non conforme au format ELF dans ELF BFD !\n"
-#: plugin.c:433
+#: plugin.c:436
msgid "%F%P: unknown ELF symbol visibility: %d!\n"
msgstr "%F%P : symbole de visibilité ELF inconnu : %d !\n"
-#: plugin.c:542
+#: plugin.c:545
msgid "%F%P: unsupported input file size: %s (%ld bytes)\n"
msgstr "%F%P : taille de fichier d'entré non pris en charge : %s (%ld octets)\n"
-#: plugin.c:679
+#: plugin.c:690
#, c-format
msgid "unknown LTO kind value %x"
msgstr "valeur de type LTO non connue %x"
-#: plugin.c:705
+#: plugin.c:716
#, c-format
msgid "unknown LTO resolution value %x"
msgstr "valeur de résolution LTO non connue %x"
-#: plugin.c:725
+#: plugin.c:736
#, c-format
msgid "unknown LTO visibility value %x"
msgstr "valeur de visibilité LTO %x non connue"
#. We should not have a new, indirect or warning symbol here.
-#: plugin.c:805
+#: plugin.c:816
msgid "%F%P: %s: plugin symbol table corrupt (sym type %d)\n"
msgstr "%F%P : %s : table de symboles du greffon corrompue (type de symbole %d)\n"
-#: plugin.c:867
+#: plugin.c:878
msgid "%P: %pB: symbol `%s' definition: %s, visibility: %s, resolution: %s\n"
msgstr "%P : %pB : définition du symbole « %s » : %s, visibilité : %s, résolution : %s\n"
-#: plugin.c:944
+#: plugin.c:955
msgid "%P: warning: "
msgstr "%P : avertissement : "
-#: plugin.c:955
+#: plugin.c:966
msgid "%P: error: "
msgstr "%P : erreur : "
-#: plugin.c:1107
+#: plugin.c:1118
msgid "%F%P: %s: plugin error: %d\n"
msgstr "%F%P : %s : erreur du greffon : %d\n"
-#: plugin.c:1162
+#: plugin.c:1173
msgid "%F%P: plugin_strdup failed to allocate memory: %s\n"
msgstr "%F%P : échec de l'allocation mémoire de plugin_strdup : %s\n"
-#: plugin.c:1199
+#: plugin.c:1210
msgid "%F%P: plugin failed to allocate memory for input: %s\n"
msgstr "%F%P : le greffon a échoué à allouer de la mémoire pour l'entrée : %s\n"
-#: plugin.c:1226
+#: plugin.c:1238
msgid "%F%P: %s: plugin reported error claiming file\n"
msgstr "%F%P : %s : le greffon à signalé une erreur lors de la recherche d'un fichier\n"
-#: plugin.c:1337
+#: plugin.c:1349
msgid "%P: %s: error in plugin cleanup: %d (ignored)\n"
msgstr "%P : %s : erreur lors du nettoyage du greffon : %d (ignoré)\n"
#: eaarch64cloudabi.c:223 eaarch64cloudabib.c:223 eaarch64elf.c:222
#: eaarch64elf32.c:222 eaarch64elf32b.c:222 eaarch64elfb.c:222
-#: eaarch64fbsd.c:223 eaarch64fbsdb.c:223 eaarch64linux.c:223
-#: eaarch64linux32.c:223 eaarch64linux32b.c:223 eaarch64linuxb.c:223
-#: earmelf.c:292 earmelf_fbsd.c:292 earmelf_fuchsia.c:293 earmelf_linux.c:293
-#: earmelf_linux_eabi.c:293 earmelf_linux_fdpiceabi.c:293 earmelf_nacl.c:293
-#: earmelf_nbsd.c:292 earmelf_phoenix.c:293 earmelf_vxworks.c:292
-#: earmelfb.c:292 earmelfb_fbsd.c:292 earmelfb_fuchsia.c:293
-#: earmelfb_linux.c:293 earmelfb_linux_eabi.c:293
-#: earmelfb_linux_fdpiceabi.c:293 earmelfb_nacl.c:293 earmelfb_nbsd.c:292
-#: earmnto.c:292 eavr1.c:178 eavr2.c:178 eavr25.c:178 eavr3.c:178 eavr31.c:178
-#: eavr35.c:178 eavr4.c:178 eavr5.c:178 eavr51.c:178 eavr6.c:178
-#: eavrtiny.c:178 eavrxmega1.c:178 eavrxmega2.c:178 eavrxmega3.c:178
-#: eavrxmega4.c:178 eavrxmega5.c:178 eavrxmega6.c:178 eavrxmega7.c:178
-#: ecskyelf.c:210 ecskyelf_linux.c:210 eelf32b4300.c:205 eelf32bmip.c:205
-#: eelf32bmipn32.c:219 eelf32bsmip.c:219 eelf32btsmip.c:205
-#: eelf32btsmip_fbsd.c:205 eelf32btsmipn32.c:205 eelf32btsmipn32_fbsd.c:205
-#: eelf32ebmip.c:205 eelf32ebmipvxworks.c:205 eelf32elmip.c:205
-#: eelf32elmipvxworks.c:205 eelf32l4300.c:205 eelf32lmip.c:205
-#: eelf32lr5900.c:205 eelf32lr5900n32.c:205 eelf32lsmip.c:205
+#: eaarch64fbsd.c:223 eaarch64fbsdb.c:223 eaarch64haiku.c:223
+#: eaarch64linux.c:223 eaarch64linux32.c:223 eaarch64linux32b.c:223
+#: eaarch64linuxb.c:223 earmelf.c:292 earmelf_fbsd.c:292 earmelf_fuchsia.c:293
+#: earmelf_haiku.c:293 earmelf_linux.c:293 earmelf_linux_eabi.c:293
+#: earmelf_linux_fdpiceabi.c:293 earmelf_nacl.c:293 earmelf_nbsd.c:292
+#: earmelf_phoenix.c:293 earmelf_vxworks.c:292 earmelfb.c:292
+#: earmelfb_fbsd.c:292 earmelfb_fuchsia.c:293 earmelfb_linux.c:293
+#: earmelfb_linux_eabi.c:293 earmelfb_linux_fdpiceabi.c:293
+#: earmelfb_nacl.c:293 earmelfb_nbsd.c:292 earmnto.c:292 eavr1.c:178
+#: eavr2.c:178 eavr25.c:178 eavr3.c:178 eavr31.c:178 eavr35.c:178 eavr4.c:178
+#: eavr5.c:178 eavr51.c:178 eavr6.c:178 eavrtiny.c:178 eavrxmega1.c:178
+#: eavrxmega2.c:178 eavrxmega3.c:178 eavrxmega4.c:178 eavrxmega5.c:178
+#: eavrxmega6.c:178 eavrxmega7.c:178 ecskyelf.c:210 ecskyelf_linux.c:210
+#: eelf32b4300.c:205 eelf32bmip.c:205 eelf32bmipn32.c:219 eelf32bsmip.c:219
+#: eelf32btsmip.c:205 eelf32btsmip_fbsd.c:205 eelf32btsmipn32.c:205
+#: eelf32btsmipn32_fbsd.c:205 eelf32ebmip.c:205 eelf32ebmipvxworks.c:205
+#: eelf32elmip.c:205 eelf32elmipvxworks.c:205 eelf32l4300.c:205
+#: eelf32lmip.c:205 eelf32lr5900.c:205 eelf32lr5900n32.c:205 eelf32lsmip.c:205
#: eelf32ltsmip.c:205 eelf32ltsmip_fbsd.c:205 eelf32ltsmipn32.c:205
#: eelf32ltsmipn32_fbsd.c:205 eelf32metag.c:206 eelf32mipswindiss.c:205
#: eelf64bmip.c:219 eelf64btsmip.c:205 eelf64btsmip_fbsd.c:205
#: eelf64lppc.c:482 eelf64lppc_fbsd.c:482 eelf64ltsmip.c:205
-#: eelf64ltsmip_fbsd.c:205 eelf64ppc.c:482 eelf64ppc_fbsd.c:482 ehppaelf.c:230
-#: ehppalinux.c:230 ehppanbsd.c:230 ehppaobsd.c:230 em68hc11elf.c:295
-#: em68hc11elfb.c:295 em68hc12elf.c:295 em68hc12elfb.c:295 enios2elf.c:223
-#: enios2linux.c:223
+#: eelf64ltsmip_fbsd.c:205 eelf64ppc.c:482 eelf64ppc_fbsd.c:482
+#: eelf_mipsel_haiku.c:205 ehppaelf.c:230 ehppalinux.c:230 ehppanbsd.c:230
+#: ehppaobsd.c:230 em68hc11elf.c:295 em68hc11elfb.c:295 em68hc12elf.c:295
+#: em68hc12elfb.c:295 enios2elf.c:223 enios2linux.c:223
msgid "%X%P: can not make stub section: %E\n"
msgstr "%X%P : impossible de créer une section d'amorçage : %E\n"
#: eaarch64cloudabi.c:266 eaarch64cloudabib.c:266 eaarch64elf.c:265
#: eaarch64elf32.c:265 eaarch64elf32b.c:265 eaarch64elfb.c:265
-#: eaarch64fbsd.c:266 eaarch64fbsdb.c:266 eaarch64linux.c:266
-#: eaarch64linux32.c:266 eaarch64linux32b.c:266 eaarch64linuxb.c:266
-#: earcelf.c:96 earclinux.c:97 earclinux_nps.c:97 earcv2elf.c:96
-#: earcv2elfx.c:96 earmelf.c:404 earmelf_fbsd.c:404 earmelf_fuchsia.c:405
-#: earmelf_linux.c:405 earmelf_linux_eabi.c:405 earmelf_linux_fdpiceabi.c:405
-#: earmelf_nacl.c:405 earmelf_nbsd.c:404 earmelf_phoenix.c:405
-#: earmelf_vxworks.c:404 earmelfb.c:404 earmelfb_fbsd.c:404
-#: earmelfb_fuchsia.c:405 earmelfb_linux.c:405 earmelfb_linux_eabi.c:405
+#: eaarch64fbsd.c:266 eaarch64fbsdb.c:266 eaarch64haiku.c:266
+#: eaarch64linux.c:266 eaarch64linux32.c:266 eaarch64linux32b.c:266
+#: eaarch64linuxb.c:266 earcelf.c:96 earclinux.c:97 earclinux_nps.c:97
+#: earcv2elf.c:96 earcv2elfx.c:96 earmelf.c:404 earmelf_fbsd.c:404
+#: earmelf_fuchsia.c:405 earmelf_haiku.c:405 earmelf_linux.c:405
+#: earmelf_linux_eabi.c:405 earmelf_linux_fdpiceabi.c:405 earmelf_nacl.c:405
+#: earmelf_nbsd.c:404 earmelf_phoenix.c:405 earmelf_vxworks.c:404
+#: earmelfb.c:404 earmelfb_fbsd.c:404 earmelfb_fuchsia.c:405
+#: earmelfb_linux.c:405 earmelfb_linux_eabi.c:405
#: earmelfb_linux_fdpiceabi.c:405 earmelfb_nacl.c:405 earmelfb_nbsd.c:404
#: earmnto.c:404 eavr1.c:299 eavr2.c:299 eavr25.c:299 eavr3.c:299 eavr31.c:299
#: eavr35.c:299 eavr4.c:299 eavr5.c:299 eavr51.c:299 eavr6.c:299
#: eavrtiny.c:299 eavrxmega1.c:299 eavrxmega2.c:299 eavrxmega3.c:299
#: eavrxmega4.c:299 eavrxmega5.c:299 eavrxmega6.c:299 eavrxmega7.c:299
#: ecriself.c:96 ecrislinux.c:97 ed10velf.c:96 eelf32_sparc.c:97
-#: eelf32_sparc_sol2.c:229 eelf32_sparc_vxworks.c:126 eelf32_spu.c:630
+#: eelf32_sparc_sol2.c:229 eelf32_sparc_vxworks.c:126 eelf32_spu.c:766
#: eelf32_tic6x_be.c:181 eelf32_tic6x_elf_be.c:181 eelf32_tic6x_elf_le.c:181
#: eelf32_tic6x_le.c:181 eelf32_tic6x_linux_be.c:181
#: eelf32_tic6x_linux_le.c:181 eelf32_x86_64.c:121 eelf32am33lin.c:96
@@ -2821,17 +2837,18 @@ msgstr "%X%P : impossible de créer une section d'amorçage : %E\n"
#: eelf32cr16.c:246 eelf32crx.c:133 eelf32ebmip.c:293 eelf32ebmipvxworks.c:322
#: eelf32elmip.c:293 eelf32elmipvxworks.c:322 eelf32epiphany.c:96
#: eelf32epiphany_4x4.c:98 eelf32frvfd.c:96 eelf32ip2k.c:96 eelf32l4300.c:293
-#: eelf32lm32.c:96 eelf32lm32fd.c:96 eelf32lmip.c:293 eelf32lppc.c:305
-#: eelf32lppclinux.c:305 eelf32lppcnto.c:305 eelf32lppcsim.c:305
-#: eelf32lr5900.c:293 eelf32lr5900n32.c:292 eelf32lriscv.c:89
-#: eelf32lriscv_ilp32.c:89 eelf32lriscv_ilp32f.c:89 eelf32lsmip.c:293
-#: eelf32ltsmip.c:293 eelf32ltsmip_fbsd.c:293 eelf32ltsmipn32.c:293
-#: eelf32ltsmipn32_fbsd.c:293 eelf32m32c.c:107 eelf32mb_linux.c:97
-#: eelf32mbel_linux.c:97 eelf32mcore.c:96 eelf32mep.c:96 eelf32metag.c:256
-#: eelf32microblaze.c:96 eelf32microblazeel.c:96 eelf32mipswindiss.c:292
-#: eelf32moxie.c:96 eelf32or1k.c:97 eelf32or1k_linux.c:97 eelf32ppc.c:305
-#: eelf32ppc_fbsd.c:305 eelf32ppclinux.c:305 eelf32ppcnto.c:305
-#: eelf32ppcsim.c:305 eelf32ppcvxworks.c:279 eelf32ppcwindiss.c:305
+#: eelf32lm32.c:96 eelf32lm32fd.c:96 eelf32lmip.c:293 eelf32loongarch.c:88
+#: eelf32lppc.c:317 eelf32lppclinux.c:317 eelf32lppcnto.c:317
+#: eelf32lppcsim.c:317 eelf32lr5900.c:293 eelf32lr5900n32.c:292
+#: eelf32lriscv.c:89 eelf32lriscv_ilp32.c:89 eelf32lriscv_ilp32f.c:89
+#: eelf32lsmip.c:293 eelf32ltsmip.c:293 eelf32ltsmip_fbsd.c:293
+#: eelf32ltsmipn32.c:293 eelf32ltsmipn32_fbsd.c:293 eelf32m32c.c:107
+#: eelf32mb_linux.c:97 eelf32mbel_linux.c:97 eelf32mcore.c:96 eelf32mep.c:96
+#: eelf32metag.c:256 eelf32microblaze.c:96 eelf32microblazeel.c:96
+#: eelf32mipswindiss.c:292 eelf32moxie.c:96 eelf32or1k.c:97
+#: eelf32or1k_linux.c:97 eelf32ppc.c:317 eelf32ppc_fbsd.c:317
+#: eelf32ppchaiku.c:317 eelf32ppclinux.c:317 eelf32ppcnto.c:317
+#: eelf32ppcsim.c:317 eelf32ppcvxworks.c:291 eelf32ppcwindiss.c:317
#: eelf32rl78.c:96 eelf32rx.c:112 eelf32rx_linux.c:109 eelf32tilegx.c:97
#: eelf32tilegx_be.c:97 eelf32tilepro.c:97 eelf32vax.c:96 eelf32visium.c:96
#: eelf32xc16x.c:96 eelf32xc16xl.c:96 eelf32xc16xs.c:96 eelf32xstormy16.c:107
@@ -2841,15 +2858,16 @@ msgstr "%X%P : impossible de créer une section d'amorçage : %E\n"
#: eelf64alpha.c:180 eelf64alpha_fbsd.c:180 eelf64alpha_nbsd.c:180
#: eelf64bmip.c:307 eelf64bpf.c:96 eelf64briscv.c:89 eelf64briscv_lp64.c:89
#: eelf64briscv_lp64f.c:89 eelf64btsmip.c:293 eelf64btsmip_fbsd.c:293
-#: eelf64hppa.c:96 eelf64lppc.c:592 eelf64lppc_fbsd.c:592 eelf64lriscv.c:89
-#: eelf64lriscv_lp64.c:89 eelf64lriscv_lp64f.c:89 eelf64ltsmip.c:293
-#: eelf64ltsmip_fbsd.c:293 eelf64mmix.c:207 eelf64ppc.c:592
+#: eelf64hppa.c:96 eelf64loongarch.c:88 eelf64lppc.c:592 eelf64lppc_fbsd.c:592
+#: eelf64lriscv.c:89 eelf64lriscv_lp64.c:89 eelf64lriscv_lp64f.c:89
+#: eelf64ltsmip.c:293 eelf64ltsmip_fbsd.c:293 eelf64mmix.c:207 eelf64ppc.c:592
#: eelf64ppc_fbsd.c:592 eelf64rdos.c:112 eelf64tilegx.c:97
#: eelf64tilegx_be.c:97 eelf_i386.c:121 eelf_i386_be.c:120
-#: eelf_i386_fbsd.c:121 eelf_i386_ldso.c:121 eelf_i386_sol2.c:253
-#: eelf_i386_vxworks.c:150 eelf_iamcu.c:121 eelf_k1om.c:121
-#: eelf_k1om_fbsd.c:121 eelf_l1om.c:121 eelf_l1om_fbsd.c:121 eelf_s390.c:97
-#: eelf_x86_64.c:121 eelf_x86_64_cloudabi.c:121 eelf_x86_64_fbsd.c:121
+#: eelf_i386_fbsd.c:121 eelf_i386_haiku.c:121 eelf_i386_ldso.c:121
+#: eelf_i386_sol2.c:253 eelf_i386_vxworks.c:150 eelf_iamcu.c:121
+#: eelf_k1om.c:121 eelf_k1om_fbsd.c:121 eelf_l1om.c:121 eelf_l1om_fbsd.c:121
+#: eelf_mipsel_haiku.c:293 eelf_s390.c:97 eelf_x86_64.c:121
+#: eelf_x86_64_cloudabi.c:121 eelf_x86_64_fbsd.c:121 eelf_x86_64_haiku.c:121
#: eelf_x86_64_sol2.c:253 eh8300elf.c:96 eh8300elf_linux.c:96 eh8300helf.c:96
#: eh8300helf_linux.c:96 eh8300hnelf.c:96 eh8300self.c:96
#: eh8300self_linux.c:96 eh8300snelf.c:96 eh8300sxelf.c:96
@@ -2870,67 +2888,69 @@ msgstr "%X%P : édition de .eh_frame/.stab : %E\n"
#: eaarch64cloudabi.c:282 eaarch64cloudabib.c:282 eaarch64elf.c:281
#: eaarch64elf32.c:281 eaarch64elf32b.c:281 eaarch64elfb.c:281
-#: eaarch64fbsd.c:282 eaarch64fbsdb.c:282 eaarch64linux.c:282
-#: eaarch64linux32.c:282 eaarch64linux32b.c:282 eaarch64linuxb.c:282
-#: earmelf.c:419 earmelf_fbsd.c:419 earmelf_fuchsia.c:420 earmelf_linux.c:420
-#: earmelf_linux_eabi.c:420 earmelf_linux_fdpiceabi.c:420 earmelf_nacl.c:420
-#: earmelf_nbsd.c:419 earmelf_phoenix.c:420 earmelf_vxworks.c:419
-#: earmelfb.c:419 earmelfb_fbsd.c:419 earmelfb_fuchsia.c:420
-#: earmelfb_linux.c:420 earmelfb_linux_eabi.c:420
-#: earmelfb_linux_fdpiceabi.c:420 earmelfb_nacl.c:420 earmelfb_nbsd.c:419
-#: earmnto.c:419 ecskyelf.c:260 ecskyelf_linux.c:260
+#: eaarch64fbsd.c:282 eaarch64fbsdb.c:282 eaarch64haiku.c:282
+#: eaarch64linux.c:282 eaarch64linux32.c:282 eaarch64linux32b.c:282
+#: eaarch64linuxb.c:282 earmelf.c:419 earmelf_fbsd.c:419 earmelf_fuchsia.c:420
+#: earmelf_haiku.c:420 earmelf_linux.c:420 earmelf_linux_eabi.c:420
+#: earmelf_linux_fdpiceabi.c:420 earmelf_nacl.c:420 earmelf_nbsd.c:419
+#: earmelf_phoenix.c:420 earmelf_vxworks.c:419 earmelfb.c:419
+#: earmelfb_fbsd.c:419 earmelfb_fuchsia.c:420 earmelfb_linux.c:420
+#: earmelfb_linux_eabi.c:420 earmelfb_linux_fdpiceabi.c:420
+#: earmelfb_nacl.c:420 earmelfb_nbsd.c:419 earmnto.c:419 ecskyelf.c:260
+#: ecskyelf_linux.c:260
msgid "%X%P: could not compute sections lists for stub generation: %E\n"
msgstr "%X%P : impossible de calculer les listes de sections pour la génération d'espace d'amorçage : %E\n"
#: eaarch64cloudabi.c:297 eaarch64cloudabib.c:297 eaarch64elf.c:296
#: eaarch64elf32.c:296 eaarch64elf32b.c:296 eaarch64elfb.c:296
-#: eaarch64fbsd.c:297 eaarch64fbsdb.c:297 eaarch64linux.c:297
-#: eaarch64linux32.c:297 eaarch64linux32b.c:297 eaarch64linuxb.c:297
-#: earmelf.c:434 earmelf_fbsd.c:434 earmelf_fuchsia.c:435 earmelf_linux.c:435
-#: earmelf_linux_eabi.c:435 earmelf_linux_fdpiceabi.c:435 earmelf_nacl.c:435
-#: earmelf_nbsd.c:434 earmelf_phoenix.c:435 earmelf_vxworks.c:434
-#: earmelfb.c:434 earmelfb_fbsd.c:434 earmelfb_fuchsia.c:435
-#: earmelfb_linux.c:435 earmelfb_linux_eabi.c:435
-#: earmelfb_linux_fdpiceabi.c:435 earmelfb_nacl.c:435 earmelfb_nbsd.c:434
-#: earmnto.c:434 eavr1.c:129 eavr1.c:192 eavr2.c:129 eavr2.c:192 eavr25.c:129
-#: eavr25.c:192 eavr3.c:129 eavr3.c:192 eavr31.c:129 eavr31.c:192 eavr35.c:129
-#: eavr35.c:192 eavr4.c:129 eavr4.c:192 eavr5.c:129 eavr5.c:192 eavr51.c:129
-#: eavr51.c:192 eavr6.c:129 eavr6.c:192 eavrtiny.c:129 eavrtiny.c:192
-#: eavrxmega1.c:129 eavrxmega1.c:192 eavrxmega2.c:129 eavrxmega2.c:192
-#: eavrxmega3.c:129 eavrxmega3.c:192 eavrxmega4.c:129 eavrxmega4.c:192
-#: eavrxmega5.c:129 eavrxmega5.c:192 eavrxmega6.c:129 eavrxmega6.c:192
-#: eavrxmega7.c:129 eavrxmega7.c:192 eelf32metag.c:271 eelf32metag.c:285
-#: eelf64lppc.c:535 eelf64lppc.c:554 eelf64lppc.c:581 eelf64lppc_fbsd.c:535
-#: eelf64lppc_fbsd.c:554 eelf64lppc_fbsd.c:581 eelf64ppc.c:535 eelf64ppc.c:554
-#: eelf64ppc.c:581 eelf64ppc_fbsd.c:535 eelf64ppc_fbsd.c:554
-#: eelf64ppc_fbsd.c:581 ehppaelf.c:295 ehppaelf.c:310 ehppalinux.c:295
-#: ehppalinux.c:310 ehppanbsd.c:295 ehppanbsd.c:310 ehppaobsd.c:295
-#: ehppaobsd.c:310 em68hc11elf.c:90 em68hc11elf.c:100 em68hc11elf.c:317
-#: em68hc11elfb.c:90 em68hc11elfb.c:100 em68hc11elfb.c:317 em68hc12elf.c:90
-#: em68hc12elf.c:100 em68hc12elf.c:317 em68hc12elfb.c:90 em68hc12elfb.c:100
-#: em68hc12elfb.c:317 enios2elf.c:290 enios2elf.c:303 enios2linux.c:290
-#: enios2linux.c:303
+#: eaarch64fbsd.c:297 eaarch64fbsdb.c:297 eaarch64haiku.c:297
+#: eaarch64linux.c:297 eaarch64linux32.c:297 eaarch64linux32b.c:297
+#: eaarch64linuxb.c:297 earmelf.c:434 earmelf_fbsd.c:434 earmelf_fuchsia.c:435
+#: earmelf_haiku.c:435 earmelf_linux.c:435 earmelf_linux_eabi.c:435
+#: earmelf_linux_fdpiceabi.c:435 earmelf_nacl.c:435 earmelf_nbsd.c:434
+#: earmelf_phoenix.c:435 earmelf_vxworks.c:434 earmelfb.c:434
+#: earmelfb_fbsd.c:434 earmelfb_fuchsia.c:435 earmelfb_linux.c:435
+#: earmelfb_linux_eabi.c:435 earmelfb_linux_fdpiceabi.c:435
+#: earmelfb_nacl.c:435 earmelfb_nbsd.c:434 earmnto.c:434 eavr1.c:129
+#: eavr1.c:192 eavr2.c:129 eavr2.c:192 eavr25.c:129 eavr25.c:192 eavr3.c:129
+#: eavr3.c:192 eavr31.c:129 eavr31.c:192 eavr35.c:129 eavr35.c:192 eavr4.c:129
+#: eavr4.c:192 eavr5.c:129 eavr5.c:192 eavr51.c:129 eavr51.c:192 eavr6.c:129
+#: eavr6.c:192 eavrtiny.c:129 eavrtiny.c:192 eavrxmega1.c:129 eavrxmega1.c:192
+#: eavrxmega2.c:129 eavrxmega2.c:192 eavrxmega3.c:129 eavrxmega3.c:192
+#: eavrxmega4.c:129 eavrxmega4.c:192 eavrxmega5.c:129 eavrxmega5.c:192
+#: eavrxmega6.c:129 eavrxmega6.c:192 eavrxmega7.c:129 eavrxmega7.c:192
+#: eelf32metag.c:271 eelf32metag.c:285 eelf64lppc.c:535 eelf64lppc.c:554
+#: eelf64lppc.c:581 eelf64lppc_fbsd.c:535 eelf64lppc_fbsd.c:554
+#: eelf64lppc_fbsd.c:581 eelf64ppc.c:535 eelf64ppc.c:554 eelf64ppc.c:581
+#: eelf64ppc_fbsd.c:535 eelf64ppc_fbsd.c:554 eelf64ppc_fbsd.c:581
+#: ehppaelf.c:295 ehppaelf.c:310 ehppalinux.c:295 ehppalinux.c:310
+#: ehppanbsd.c:295 ehppanbsd.c:310 ehppaobsd.c:295 ehppaobsd.c:310
+#: em68hc11elf.c:90 em68hc11elf.c:100 em68hc11elf.c:317 em68hc11elfb.c:90
+#: em68hc11elfb.c:100 em68hc11elfb.c:317 em68hc12elf.c:90 em68hc12elf.c:100
+#: em68hc12elf.c:317 em68hc12elfb.c:90 em68hc12elfb.c:100 em68hc12elfb.c:317
+#: enios2elf.c:290 enios2elf.c:303 enios2linux.c:290 enios2linux.c:303
msgid "%X%P: can not size stub section: %E\n"
msgstr "%X%P : impossible de récupérer la taille de la section d'amorçage : %E\n"
#: eaarch64cloudabi.c:316 eaarch64cloudabib.c:316 eaarch64elf.c:315
#: eaarch64elf32.c:315 eaarch64elf32b.c:315 eaarch64elfb.c:315
-#: eaarch64fbsd.c:316 eaarch64fbsdb.c:316 eaarch64linux.c:316
-#: eaarch64linux32.c:316 eaarch64linux32b.c:316 eaarch64linuxb.c:316
-#: earmelf.c:468 earmelf_fbsd.c:468 earmelf_fuchsia.c:469 earmelf_linux.c:469
-#: earmelf_linux_eabi.c:469 earmelf_linux_fdpiceabi.c:469 earmelf_nacl.c:469
-#: earmelf_nbsd.c:468 earmelf_phoenix.c:469 earmelf_vxworks.c:468
-#: earmelfb.c:468 earmelfb_fbsd.c:468 earmelfb_fuchsia.c:469
-#: earmelfb_linux.c:469 earmelfb_linux_eabi.c:469
-#: earmelfb_linux_fdpiceabi.c:469 earmelfb_nacl.c:469 earmelfb_nbsd.c:468
-#: earmnto.c:468 eavr1.c:201 eavr2.c:201 eavr25.c:201 eavr3.c:201 eavr31.c:201
-#: eavr35.c:201 eavr4.c:201 eavr5.c:201 eavr51.c:201 eavr6.c:201
-#: eavrtiny.c:201 eavrxmega1.c:201 eavrxmega2.c:201 eavrxmega3.c:201
-#: eavrxmega4.c:201 eavrxmega5.c:201 eavrxmega6.c:201 eavrxmega7.c:201
-#: eelf32metag.c:300 eelf64lppc.c:631 eelf64lppc_fbsd.c:631 eelf64ppc.c:631
-#: eelf64ppc_fbsd.c:631 ehppaelf.c:332 ehppalinux.c:332 ehppanbsd.c:332
-#: ehppaobsd.c:332 em68hc11elf.c:321 em68hc11elfb.c:321 em68hc12elf.c:321
-#: em68hc12elfb.c:321 enios2elf.c:318 enios2linux.c:318
+#: eaarch64fbsd.c:316 eaarch64fbsdb.c:316 eaarch64haiku.c:316
+#: eaarch64linux.c:316 eaarch64linux32.c:316 eaarch64linux32b.c:316
+#: eaarch64linuxb.c:316 earmelf.c:468 earmelf_fbsd.c:468 earmelf_fuchsia.c:469
+#: earmelf_haiku.c:469 earmelf_linux.c:469 earmelf_linux_eabi.c:469
+#: earmelf_linux_fdpiceabi.c:469 earmelf_nacl.c:469 earmelf_nbsd.c:468
+#: earmelf_phoenix.c:469 earmelf_vxworks.c:468 earmelfb.c:468
+#: earmelfb_fbsd.c:468 earmelfb_fuchsia.c:469 earmelfb_linux.c:469
+#: earmelfb_linux_eabi.c:469 earmelfb_linux_fdpiceabi.c:469
+#: earmelfb_nacl.c:469 earmelfb_nbsd.c:468 earmnto.c:468 eavr1.c:201
+#: eavr2.c:201 eavr25.c:201 eavr3.c:201 eavr31.c:201 eavr35.c:201 eavr4.c:201
+#: eavr5.c:201 eavr51.c:201 eavr6.c:201 eavrtiny.c:201 eavrxmega1.c:201
+#: eavrxmega2.c:201 eavrxmega3.c:201 eavrxmega4.c:201 eavrxmega5.c:201
+#: eavrxmega6.c:201 eavrxmega7.c:201 eelf32metag.c:300 eelf64lppc.c:631
+#: eelf64lppc_fbsd.c:631 eelf64ppc.c:631 eelf64ppc_fbsd.c:631 ehppaelf.c:332
+#: ehppalinux.c:332 ehppanbsd.c:332 ehppaobsd.c:332 em68hc11elf.c:321
+#: em68hc11elfb.c:321 em68hc12elf.c:321 em68hc12elfb.c:321 enios2elf.c:318
+#: enios2linux.c:318
msgid "%X%P: can not build stubs: %E\n"
msgstr "%X%P : impossible de construire les secteurs d'amorçage : %E\n"
@@ -2961,39 +2981,42 @@ msgstr "%X%P : impossible de construire les secteurs d'amorçage : %E\n"
#. same time. Use a link followed by objcopy to change output formats.
#: eaarch64cloudabi.c:334 eaarch64cloudabib.c:334 eaarch64elf.c:333
#: eaarch64elf32.c:333 eaarch64elf32b.c:333 eaarch64elfb.c:333
-#: eaarch64fbsd.c:334 eaarch64fbsdb.c:334 eaarch64linux.c:334
-#: eaarch64linux32.c:334 eaarch64linux32b.c:334 eaarch64linuxb.c:334
-#: earm_wince_pe.c:1426 earmelf.c:540 earmelf_fbsd.c:540 earmelf_fuchsia.c:541
-#: earmelf_linux.c:541 earmelf_linux_eabi.c:541 earmelf_linux_fdpiceabi.c:541
-#: earmelf_nacl.c:541 earmelf_nbsd.c:540 earmelf_phoenix.c:541
-#: earmelf_vxworks.c:540 earmelfb.c:540 earmelfb_fbsd.c:540
-#: earmelfb_fuchsia.c:541 earmelfb_linux.c:541 earmelfb_linux_eabi.c:541
+#: eaarch64fbsd.c:334 eaarch64fbsdb.c:334 eaarch64haiku.c:334
+#: eaarch64linux.c:334 eaarch64linux32.c:334 eaarch64linux32b.c:334
+#: eaarch64linuxb.c:334 earm_wince_pe.c:1426 earmelf.c:540 earmelf_fbsd.c:540
+#: earmelf_fuchsia.c:541 earmelf_haiku.c:541 earmelf_linux.c:541
+#: earmelf_linux_eabi.c:541 earmelf_linux_fdpiceabi.c:541 earmelf_nacl.c:541
+#: earmelf_nbsd.c:540 earmelf_phoenix.c:541 earmelf_vxworks.c:540
+#: earmelfb.c:540 earmelfb_fbsd.c:540 earmelfb_fuchsia.c:541
+#: earmelfb_linux.c:541 earmelfb_linux_eabi.c:541
#: earmelfb_linux_fdpiceabi.c:541 earmelfb_nacl.c:541 earmelfb_nbsd.c:540
#: earmnto.c:540 earmpe.c:1426 eavr1.c:142 eavr2.c:142 eavr25.c:142
#: eavr3.c:142 eavr31.c:142 eavr35.c:142 eavr4.c:142 eavr5.c:142 eavr51.c:142
#: eavr6.c:142 eavrtiny.c:142 eavrxmega1.c:142 eavrxmega2.c:142
#: eavrxmega3.c:142 eavrxmega4.c:142 eavrxmega5.c:142 eavrxmega6.c:142
-#: eavrxmega7.c:142 eelf32briscv.c:128 eelf32briscv_ilp32.c:128
-#: eelf32briscv_ilp32f.c:128 eelf32lriscv.c:128 eelf32lriscv_ilp32.c:128
-#: eelf32lriscv_ilp32f.c:128 eelf64briscv.c:128 eelf64briscv_lp64.c:128
-#: eelf64briscv_lp64f.c:128 eelf64lriscv.c:128 eelf64lriscv_lp64.c:128
-#: eelf64lriscv_lp64f.c:128 ei386pe.c:1426 ei386pe_posix.c:1426
-#: emcorepe.c:1426 ends32belf.c:74 ends32belf16m.c:74 ends32belf_linux.c:74
-#: ends32elf.c:74 ends32elf16m.c:74 ends32elf_linux.c:74 escore3_elf.c:75
-#: escore7_elf.c:75 eshpe.c:1426 ev850.c:91 ev850_rh850.c:91
+#: eavrxmega7.c:142 eelf32briscv.c:124 eelf32briscv_ilp32.c:124
+#: eelf32briscv_ilp32f.c:124 eelf32loongarch.c:106 eelf32lriscv.c:124
+#: eelf32lriscv_ilp32.c:124 eelf32lriscv_ilp32f.c:124 eelf64briscv.c:124
+#: eelf64briscv_lp64.c:124 eelf64briscv_lp64f.c:124 eelf64loongarch.c:106
+#: eelf64lriscv.c:124 eelf64lriscv_lp64.c:124 eelf64lriscv_lp64f.c:124
+#: ei386pe.c:1426 ei386pe_posix.c:1426 emcorepe.c:1426 ends32belf.c:74
+#: ends32belf16m.c:74 ends32belf_linux.c:74 ends32elf.c:74 ends32elf16m.c:74
+#: ends32elf_linux.c:74 escore3_elf.c:75 escore7_elf.c:75 eshpe.c:1426
+#: ev850.c:91 ev850_rh850.c:91
msgid "%F%P: error: cannot change output format whilst linking %s binaries\n"
msgstr "%F%P : erreur : impossible de changer le format de sortie lors de l'édition de liens de binaires %s\n"
#: eaarch64cloudabi.c:570 eaarch64cloudabib.c:570 eaarch64elf.c:569
#: eaarch64elf32.c:569 eaarch64elf32b.c:569 eaarch64elfb.c:569
-#: eaarch64fbsd.c:570 eaarch64fbsdb.c:570 eaarch64linux.c:570
-#: eaarch64linux32.c:570 eaarch64linux32b.c:570 eaarch64linuxb.c:570
-#: earcelf.c:202 earclinux.c:258 earclinux_nps.c:258 earcv2elf.c:186
-#: earcv2elfx.c:186 earmelf.c:812 earmelf_fbsd.c:812 earmelf_fuchsia.c:813
-#: earmelf_linux.c:813 earmelf_linux_eabi.c:813 earmelf_linux_fdpiceabi.c:813
-#: earmelf_nacl.c:813 earmelf_nbsd.c:812 earmelf_phoenix.c:813
-#: earmelf_vxworks.c:848 earmelfb.c:812 earmelfb_fbsd.c:812
-#: earmelfb_fuchsia.c:813 earmelfb_linux.c:813 earmelfb_linux_eabi.c:813
+#: eaarch64fbsd.c:570 eaarch64fbsdb.c:570 eaarch64haiku.c:570
+#: eaarch64linux.c:570 eaarch64linux32.c:570 eaarch64linux32b.c:570
+#: eaarch64linuxb.c:570 earcelf.c:202 earclinux.c:258 earclinux_nps.c:258
+#: earcv2elf.c:186 earcv2elfx.c:186 earmelf.c:812 earmelf_fbsd.c:812
+#: earmelf_fuchsia.c:813 earmelf_haiku.c:813 earmelf_linux.c:813
+#: earmelf_linux_eabi.c:813 earmelf_linux_fdpiceabi.c:813 earmelf_nacl.c:813
+#: earmelf_nbsd.c:812 earmelf_phoenix.c:813 earmelf_vxworks.c:848
+#: earmelfb.c:812 earmelfb_fbsd.c:812 earmelfb_fuchsia.c:813
+#: earmelfb_linux.c:813 earmelfb_linux_eabi.c:813
#: earmelfb_linux_fdpiceabi.c:813 earmelfb_nacl.c:813 earmelfb_nbsd.c:812
#: earmnto.c:787 eavr1.c:409 eavr2.c:409 eavr25.c:409 eavr3.c:409 eavr31.c:409
#: eavr35.c:409 eavr4.c:409 eavr5.c:409 eavr51.c:409 eavr6.c:409
@@ -3001,46 +3024,48 @@ msgstr "%F%P : erreur : impossible de changer le format de sortie lors de l'é
#: eavrxmega4.c:409 eavrxmega5.c:409 eavrxmega6.c:409 eavrxmega7.c:409
#: ecriself.c:201 ecrislinux.c:233 ecskyelf.c:445 ecskyelf_linux.c:502
#: ed10velf.c:186 eelf32_sparc.c:258 eelf32_sparc_sol2.c:390
-#: eelf32_sparc_vxworks.c:295 eelf32_spu.c:783 eelf32_tic6x_be.c:369
+#: eelf32_sparc_vxworks.c:295 eelf32_spu.c:919 eelf32_tic6x_be.c:369
#: eelf32_tic6x_elf_be.c:369 eelf32_tic6x_elf_le.c:369 eelf32_tic6x_le.c:369
#: eelf32_tic6x_linux_be.c:369 eelf32_tic6x_linux_le.c:369
-#: eelf32_x86_64.c:5327 eelf32am33lin.c:232 eelf32b4300.c:473 eelf32bfin.c:250
-#: eelf32bfinfd.c:275 eelf32bmip.c:473 eelf32bmipn32.c:487 eelf32briscv.c:330
-#: eelf32briscv_ilp32.c:330 eelf32briscv_ilp32f.c:330 eelf32bsmip.c:487
+#: eelf32_x86_64.c:5349 eelf32am33lin.c:232 eelf32b4300.c:473 eelf32bfin.c:250
+#: eelf32bfinfd.c:275 eelf32bmip.c:473 eelf32bmipn32.c:487 eelf32briscv.c:326
+#: eelf32briscv_ilp32.c:326 eelf32briscv_ilp32f.c:326 eelf32bsmip.c:487
#: eelf32btsmip.c:473 eelf32btsmip_fbsd.c:473 eelf32btsmipn32.c:473
#: eelf32btsmipn32_fbsd.c:473 eelf32cr16.c:336 eelf32crx.c:223
#: eelf32ebmip.c:473 eelf32ebmipvxworks.c:508 eelf32elmip.c:473
#: eelf32elmipvxworks.c:508 eelf32epiphany.c:201 eelf32epiphany_4x4.c:188
#: eelf32frvfd.c:257 eelf32ip2k.c:201 eelf32l4300.c:473 eelf32lm32.c:201
-#: eelf32lm32fd.c:257 eelf32lmip.c:473 eelf32lppc.c:509 eelf32lppclinux.c:509
-#: eelf32lppcnto.c:509 eelf32lppcsim.c:509 eelf32lr5900.c:442
-#: eelf32lr5900n32.c:441 eelf32lriscv.c:330 eelf32lriscv_ilp32.c:330
-#: eelf32lriscv_ilp32f.c:330 eelf32lsmip.c:473 eelf32ltsmip.c:473
-#: eelf32ltsmip_fbsd.c:473 eelf32ltsmipn32.c:473 eelf32ltsmipn32_fbsd.c:473
-#: eelf32m32c.c:212 eelf32mb_linux.c:258 eelf32mbel_linux.c:258
-#: eelf32mcore.c:207 eelf32mep.c:186 eelf32metag.c:507 eelf32microblaze.c:186
-#: eelf32microblazeel.c:186 eelf32mipswindiss.c:416 eelf32moxie.c:201
-#: eelf32or1k.c:202 eelf32or1k_linux.c:258 eelf32ppc.c:509
-#: eelf32ppc_fbsd.c:509 eelf32ppclinux.c:509 eelf32ppcnto.c:509
-#: eelf32ppcsim.c:509 eelf32ppcvxworks.c:483 eelf32ppcwindiss.c:509
-#: eelf32rl78.c:201 eelf32rx.c:229 eelf32rx_linux.c:214 eelf32tilegx.c:258
-#: eelf32tilegx_be.c:258 eelf32tilepro.c:258 eelf32vax.c:232
-#: eelf32visium.c:186 eelf32xc16x.c:186 eelf32xc16xl.c:186 eelf32xc16xs.c:186
-#: eelf32xstormy16.c:197 eelf32xtensa.c:2179 eelf32z80.c:213 eelf64_aix.c:232
-#: eelf64_ia64.c:289 eelf64_ia64_fbsd.c:289 eelf64_s390.c:328
-#: eelf64_sparc.c:258 eelf64_sparc_fbsd.c:258 eelf64_sparc_sol2.c:390
-#: eelf64alpha.c:351 eelf64alpha_fbsd.c:351 eelf64alpha_nbsd.c:351
-#: eelf64bmip.c:487 eelf64bpf.c:186 eelf64briscv.c:330 eelf64briscv_lp64.c:330
-#: eelf64briscv_lp64f.c:330 eelf64btsmip.c:473 eelf64btsmip_fbsd.c:473
-#: eelf64hppa.c:202 eelf64lppc.c:959 eelf64lppc_fbsd.c:959 eelf64lriscv.c:330
-#: eelf64lriscv_lp64.c:330 eelf64lriscv_lp64f.c:330 eelf64ltsmip.c:473
-#: eelf64ltsmip_fbsd.c:473 eelf64mmix.c:343 eelf64ppc.c:959
-#: eelf64ppc_fbsd.c:959 eelf64rdos.c:283 eelf64tilegx.c:258
-#: eelf64tilegx_be.c:258 eelf_i386.c:4949 eelf_i386_be.c:256
-#: eelf_i386_fbsd.c:292 eelf_i386_ldso.c:267 eelf_i386_sol2.c:424
-#: eelf_i386_vxworks.c:319 eelf_iamcu.c:292 eelf_k1om.c:5283
-#: eelf_k1om_fbsd.c:292 eelf_l1om.c:5283 eelf_l1om_fbsd.c:292 eelf_s390.c:258
-#: eelf_x86_64.c:5327 eelf_x86_64_cloudabi.c:292 eelf_x86_64_fbsd.c:292
+#: eelf32lm32fd.c:257 eelf32lmip.c:473 eelf32loongarch.c:308 eelf32lppc.c:521
+#: eelf32lppclinux.c:521 eelf32lppcnto.c:521 eelf32lppcsim.c:521
+#: eelf32lr5900.c:442 eelf32lr5900n32.c:441 eelf32lriscv.c:326
+#: eelf32lriscv_ilp32.c:326 eelf32lriscv_ilp32f.c:326 eelf32lsmip.c:473
+#: eelf32ltsmip.c:473 eelf32ltsmip_fbsd.c:473 eelf32ltsmipn32.c:473
+#: eelf32ltsmipn32_fbsd.c:473 eelf32m32c.c:212 eelf32mb_linux.c:258
+#: eelf32mbel_linux.c:258 eelf32mcore.c:207 eelf32mep.c:186 eelf32metag.c:507
+#: eelf32microblaze.c:186 eelf32microblazeel.c:186 eelf32mipswindiss.c:416
+#: eelf32moxie.c:201 eelf32or1k.c:202 eelf32or1k_linux.c:258 eelf32ppc.c:521
+#: eelf32ppc_fbsd.c:521 eelf32ppchaiku.c:521 eelf32ppclinux.c:521
+#: eelf32ppcnto.c:521 eelf32ppcsim.c:521 eelf32ppcvxworks.c:495
+#: eelf32ppcwindiss.c:521 eelf32rl78.c:201 eelf32rx.c:229 eelf32rx_linux.c:214
+#: eelf32tilegx.c:258 eelf32tilegx_be.c:258 eelf32tilepro.c:258
+#: eelf32vax.c:232 eelf32visium.c:186 eelf32xc16x.c:186 eelf32xc16xl.c:186
+#: eelf32xc16xs.c:186 eelf32xstormy16.c:197 eelf32xtensa.c:2179
+#: eelf32z80.c:213 eelf64_aix.c:232 eelf64_ia64.c:289 eelf64_ia64_fbsd.c:289
+#: eelf64_s390.c:328 eelf64_sparc.c:258 eelf64_sparc_fbsd.c:258
+#: eelf64_sparc_sol2.c:390 eelf64alpha.c:351 eelf64alpha_fbsd.c:351
+#: eelf64alpha_nbsd.c:351 eelf64bmip.c:487 eelf64bpf.c:186 eelf64briscv.c:326
+#: eelf64briscv_lp64.c:326 eelf64briscv_lp64f.c:326 eelf64btsmip.c:473
+#: eelf64btsmip_fbsd.c:473 eelf64hppa.c:202 eelf64loongarch.c:308
+#: eelf64lppc.c:970 eelf64lppc_fbsd.c:970 eelf64lriscv.c:326
+#: eelf64lriscv_lp64.c:326 eelf64lriscv_lp64f.c:326 eelf64ltsmip.c:473
+#: eelf64ltsmip_fbsd.c:473 eelf64mmix.c:343 eelf64ppc.c:970
+#: eelf64ppc_fbsd.c:970 eelf64rdos.c:283 eelf64tilegx.c:258
+#: eelf64tilegx_be.c:258 eelf_i386.c:4971 eelf_i386_be.c:256
+#: eelf_i386_fbsd.c:292 eelf_i386_haiku.c:292 eelf_i386_ldso.c:267
+#: eelf_i386_sol2.c:424 eelf_i386_vxworks.c:319 eelf_iamcu.c:292
+#: eelf_k1om.c:5283 eelf_k1om_fbsd.c:292 eelf_l1om.c:5283 eelf_l1om_fbsd.c:292
+#: eelf_mipsel_haiku.c:473 eelf_s390.c:258 eelf_x86_64.c:5349
+#: eelf_x86_64_cloudabi.c:292 eelf_x86_64_fbsd.c:292 eelf_x86_64_haiku.c:292
#: eelf_x86_64_sol2.c:424 eh8300elf.c:201 eh8300elf_linux.c:201
#: eh8300helf.c:201 eh8300helf_linux.c:201 eh8300hnelf.c:201 eh8300self.c:201
#: eh8300self_linux.c:201 eh8300snelf.c:201 eh8300sxelf.c:201
@@ -3062,49 +3087,51 @@ msgstr "%F%P : option --compress-debug-sections invalide : « %s »\n"
#: eaarch64cloudabi.c:621 eaarch64cloudabib.c:621 eaarch64elf.c:620
#: eaarch64elf32.c:620 eaarch64elf32b.c:620 eaarch64elfb.c:620
-#: eaarch64fbsd.c:621 eaarch64fbsdb.c:621 eaarch64linux.c:621
-#: eaarch64linux32.c:621 eaarch64linux32b.c:621 eaarch64linuxb.c:621
-#: earcelf.c:253 earclinux.c:309 earclinux_nps.c:309 earmelf.c:863
-#: earmelf_fbsd.c:863 earmelf_fuchsia.c:864 earmelf_linux.c:864
-#: earmelf_linux_eabi.c:864 earmelf_linux_fdpiceabi.c:864 earmelf_nacl.c:864
-#: earmelf_nbsd.c:863 earmelf_phoenix.c:864 earmelf_vxworks.c:899
-#: earmelfb.c:863 earmelfb_fbsd.c:863 earmelfb_fuchsia.c:864
-#: earmelfb_linux.c:864 earmelfb_linux_eabi.c:864
+#: eaarch64fbsd.c:621 eaarch64fbsdb.c:621 eaarch64haiku.c:621
+#: eaarch64linux.c:621 eaarch64linux32.c:621 eaarch64linux32b.c:621
+#: eaarch64linuxb.c:621 earcelf.c:253 earclinux.c:309 earclinux_nps.c:309
+#: earmelf.c:863 earmelf_fbsd.c:863 earmelf_fuchsia.c:864 earmelf_haiku.c:864
+#: earmelf_linux.c:864 earmelf_linux_eabi.c:864 earmelf_linux_fdpiceabi.c:864
+#: earmelf_nacl.c:864 earmelf_nbsd.c:863 earmelf_phoenix.c:864
+#: earmelf_vxworks.c:899 earmelfb.c:863 earmelfb_fbsd.c:863
+#: earmelfb_fuchsia.c:864 earmelfb_linux.c:864 earmelfb_linux_eabi.c:864
#: earmelfb_linux_fdpiceabi.c:864 earmelfb_nacl.c:864 earmelfb_nbsd.c:863
#: earmnto.c:838 ecrislinux.c:284 ecskyelf_linux.c:553 eelf32_sparc.c:309
#: eelf32_sparc_sol2.c:441 eelf32_sparc_vxworks.c:346 eelf32_tic6x_be.c:420
#: eelf32_tic6x_elf_be.c:420 eelf32_tic6x_elf_le.c:420 eelf32_tic6x_le.c:420
#: eelf32_tic6x_linux_be.c:420 eelf32_tic6x_linux_le.c:420
-#: eelf32_x86_64.c:5378 eelf32am33lin.c:283 eelf32b4300.c:524 eelf32bfin.c:301
-#: eelf32bfinfd.c:326 eelf32bmip.c:524 eelf32bmipn32.c:538 eelf32briscv.c:381
-#: eelf32briscv_ilp32.c:381 eelf32briscv_ilp32f.c:381 eelf32bsmip.c:538
+#: eelf32_x86_64.c:5400 eelf32am33lin.c:283 eelf32b4300.c:524 eelf32bfin.c:301
+#: eelf32bfinfd.c:326 eelf32bmip.c:524 eelf32bmipn32.c:538 eelf32briscv.c:377
+#: eelf32briscv_ilp32.c:377 eelf32briscv_ilp32f.c:377 eelf32bsmip.c:538
#: eelf32btsmip.c:524 eelf32btsmip_fbsd.c:524 eelf32btsmipn32.c:524
#: eelf32btsmipn32_fbsd.c:524 eelf32ebmip.c:524 eelf32ebmipvxworks.c:559
#: eelf32elmip.c:524 eelf32elmipvxworks.c:559 eelf32frvfd.c:308
-#: eelf32l4300.c:524 eelf32lm32fd.c:308 eelf32lmip.c:524 eelf32lppc.c:560
-#: eelf32lppclinux.c:560 eelf32lppcnto.c:560 eelf32lppcsim.c:560
-#: eelf32lriscv.c:381 eelf32lriscv_ilp32.c:381 eelf32lriscv_ilp32f.c:381
-#: eelf32lsmip.c:524 eelf32ltsmip.c:524 eelf32ltsmip_fbsd.c:524
-#: eelf32ltsmipn32.c:524 eelf32ltsmipn32_fbsd.c:524 eelf32mb_linux.c:309
-#: eelf32mbel_linux.c:309 eelf32metag.c:558 eelf32or1k_linux.c:309
-#: eelf32ppc.c:560 eelf32ppc_fbsd.c:560 eelf32ppclinux.c:560
-#: eelf32ppcnto.c:560 eelf32ppcsim.c:560 eelf32ppcvxworks.c:534
-#: eelf32ppcwindiss.c:560 eelf32tilegx.c:309 eelf32tilegx_be.c:309
-#: eelf32tilepro.c:309 eelf32vax.c:283 eelf32xtensa.c:2230 eelf64_aix.c:283
-#: eelf64_ia64.c:340 eelf64_ia64_fbsd.c:340 eelf64_s390.c:379
-#: eelf64_sparc.c:309 eelf64_sparc_fbsd.c:309 eelf64_sparc_sol2.c:441
-#: eelf64alpha.c:402 eelf64alpha_fbsd.c:402 eelf64alpha_nbsd.c:402
-#: eelf64bmip.c:538 eelf64briscv.c:381 eelf64briscv_lp64.c:381
-#: eelf64briscv_lp64f.c:381 eelf64btsmip.c:524 eelf64btsmip_fbsd.c:524
-#: eelf64hppa.c:253 eelf64lppc.c:1010 eelf64lppc_fbsd.c:1010
-#: eelf64lriscv.c:381 eelf64lriscv_lp64.c:381 eelf64lriscv_lp64f.c:381
+#: eelf32l4300.c:524 eelf32lm32fd.c:308 eelf32lmip.c:524 eelf32loongarch.c:359
+#: eelf32lppc.c:572 eelf32lppclinux.c:572 eelf32lppcnto.c:572
+#: eelf32lppcsim.c:572 eelf32lriscv.c:377 eelf32lriscv_ilp32.c:377
+#: eelf32lriscv_ilp32f.c:377 eelf32lsmip.c:524 eelf32ltsmip.c:524
+#: eelf32ltsmip_fbsd.c:524 eelf32ltsmipn32.c:524 eelf32ltsmipn32_fbsd.c:524
+#: eelf32mb_linux.c:309 eelf32mbel_linux.c:309 eelf32metag.c:558
+#: eelf32or1k_linux.c:309 eelf32ppc.c:572 eelf32ppc_fbsd.c:572
+#: eelf32ppchaiku.c:572 eelf32ppclinux.c:572 eelf32ppcnto.c:572
+#: eelf32ppcsim.c:572 eelf32ppcvxworks.c:546 eelf32ppcwindiss.c:572
+#: eelf32tilegx.c:309 eelf32tilegx_be.c:309 eelf32tilepro.c:309
+#: eelf32vax.c:283 eelf32xtensa.c:2230 eelf64_aix.c:283 eelf64_ia64.c:340
+#: eelf64_ia64_fbsd.c:340 eelf64_s390.c:379 eelf64_sparc.c:309
+#: eelf64_sparc_fbsd.c:309 eelf64_sparc_sol2.c:441 eelf64alpha.c:402
+#: eelf64alpha_fbsd.c:402 eelf64alpha_nbsd.c:402 eelf64bmip.c:538
+#: eelf64briscv.c:377 eelf64briscv_lp64.c:377 eelf64briscv_lp64f.c:377
+#: eelf64btsmip.c:524 eelf64btsmip_fbsd.c:524 eelf64hppa.c:253
+#: eelf64loongarch.c:359 eelf64lppc.c:1021 eelf64lppc_fbsd.c:1021
+#: eelf64lriscv.c:377 eelf64lriscv_lp64.c:377 eelf64lriscv_lp64f.c:377
#: eelf64ltsmip.c:524 eelf64ltsmip_fbsd.c:524 eelf64mmix.c:394
-#: eelf64ppc.c:1010 eelf64ppc_fbsd.c:1010 eelf64rdos.c:334 eelf64tilegx.c:309
-#: eelf64tilegx_be.c:309 eelf_i386.c:5000 eelf_i386_be.c:307
-#: eelf_i386_fbsd.c:343 eelf_i386_ldso.c:318 eelf_i386_sol2.c:475
-#: eelf_i386_vxworks.c:370 eelf_iamcu.c:343 eelf_k1om.c:5334
-#: eelf_k1om_fbsd.c:343 eelf_l1om.c:5334 eelf_l1om_fbsd.c:343 eelf_s390.c:309
-#: eelf_x86_64.c:5378 eelf_x86_64_cloudabi.c:343 eelf_x86_64_fbsd.c:343
+#: eelf64ppc.c:1021 eelf64ppc_fbsd.c:1021 eelf64rdos.c:334 eelf64tilegx.c:309
+#: eelf64tilegx_be.c:309 eelf_i386.c:5022 eelf_i386_be.c:307
+#: eelf_i386_fbsd.c:343 eelf_i386_haiku.c:343 eelf_i386_ldso.c:318
+#: eelf_i386_sol2.c:475 eelf_i386_vxworks.c:370 eelf_iamcu.c:343
+#: eelf_k1om.c:5334 eelf_k1om_fbsd.c:343 eelf_l1om.c:5334 eelf_l1om_fbsd.c:343
+#: eelf_mipsel_haiku.c:524 eelf_s390.c:309 eelf_x86_64.c:5400
+#: eelf_x86_64_cloudabi.c:343 eelf_x86_64_fbsd.c:343 eelf_x86_64_haiku.c:343
#: eelf_x86_64_sol2.c:475 ehppa64linux.c:283 ehppalinux.c:592 ehppanbsd.c:592
#: ehppaobsd.c:592 ei386lynx.c:298 ei386moss.c:298 ei386nto.c:298
#: em32relf_linux.c:308 em32rlelf_linux.c:308 em68kelf.c:466
@@ -3119,14 +3146,15 @@ msgstr "%F%P : style de hachage « %s » invalide\n"
#: eaarch64cloudabi.c:638 eaarch64cloudabib.c:638 eaarch64elf.c:637
#: eaarch64elf32.c:637 eaarch64elf32b.c:637 eaarch64elfb.c:637
-#: eaarch64fbsd.c:638 eaarch64fbsdb.c:638 eaarch64linux.c:638
-#: eaarch64linux32.c:638 eaarch64linux32b.c:638 eaarch64linuxb.c:638
-#: earcelf.c:270 earclinux.c:326 earclinux_nps.c:326 earcv2elf.c:203
-#: earcv2elfx.c:203 earmelf.c:880 earmelf_fbsd.c:880 earmelf_fuchsia.c:881
-#: earmelf_linux.c:881 earmelf_linux_eabi.c:881 earmelf_linux_fdpiceabi.c:881
-#: earmelf_nacl.c:881 earmelf_nbsd.c:880 earmelf_phoenix.c:881
-#: earmelf_vxworks.c:916 earmelfb.c:880 earmelfb_fbsd.c:880
-#: earmelfb_fuchsia.c:881 earmelfb_linux.c:881 earmelfb_linux_eabi.c:881
+#: eaarch64fbsd.c:638 eaarch64fbsdb.c:638 eaarch64haiku.c:638
+#: eaarch64linux.c:638 eaarch64linux32.c:638 eaarch64linux32b.c:638
+#: eaarch64linuxb.c:638 earcelf.c:270 earclinux.c:326 earclinux_nps.c:326
+#: earcv2elf.c:203 earcv2elfx.c:203 earmelf.c:880 earmelf_fbsd.c:880
+#: earmelf_fuchsia.c:881 earmelf_haiku.c:881 earmelf_linux.c:881
+#: earmelf_linux_eabi.c:881 earmelf_linux_fdpiceabi.c:881 earmelf_nacl.c:881
+#: earmelf_nbsd.c:880 earmelf_phoenix.c:881 earmelf_vxworks.c:916
+#: earmelfb.c:880 earmelfb_fbsd.c:880 earmelfb_fuchsia.c:881
+#: earmelfb_linux.c:881 earmelfb_linux_eabi.c:881
#: earmelfb_linux_fdpiceabi.c:881 earmelfb_nacl.c:881 earmelfb_nbsd.c:880
#: earmnto.c:855 eavr1.c:426 eavr2.c:426 eavr25.c:426 eavr3.c:426 eavr31.c:426
#: eavr35.c:426 eavr4.c:426 eavr5.c:426 eavr51.c:426 eavr6.c:426
@@ -3134,46 +3162,48 @@ msgstr "%F%P : style de hachage « %s » invalide\n"
#: eavrxmega4.c:426 eavrxmega5.c:426 eavrxmega6.c:426 eavrxmega7.c:426
#: ecriself.c:218 ecrislinux.c:301 ecskyelf.c:462 ecskyelf_linux.c:570
#: ed10velf.c:203 eelf32_sparc.c:326 eelf32_sparc_sol2.c:458
-#: eelf32_sparc_vxworks.c:363 eelf32_spu.c:800 eelf32_tic6x_be.c:437
+#: eelf32_sparc_vxworks.c:363 eelf32_spu.c:936 eelf32_tic6x_be.c:437
#: eelf32_tic6x_elf_be.c:437 eelf32_tic6x_elf_le.c:437 eelf32_tic6x_le.c:437
#: eelf32_tic6x_linux_be.c:437 eelf32_tic6x_linux_le.c:437
-#: eelf32_x86_64.c:5395 eelf32am33lin.c:300 eelf32b4300.c:541 eelf32bfin.c:318
-#: eelf32bfinfd.c:343 eelf32bmip.c:541 eelf32bmipn32.c:555 eelf32briscv.c:398
-#: eelf32briscv_ilp32.c:398 eelf32briscv_ilp32f.c:398 eelf32bsmip.c:555
+#: eelf32_x86_64.c:5417 eelf32am33lin.c:300 eelf32b4300.c:541 eelf32bfin.c:318
+#: eelf32bfinfd.c:343 eelf32bmip.c:541 eelf32bmipn32.c:555 eelf32briscv.c:394
+#: eelf32briscv_ilp32.c:394 eelf32briscv_ilp32f.c:394 eelf32bsmip.c:555
#: eelf32btsmip.c:541 eelf32btsmip_fbsd.c:541 eelf32btsmipn32.c:541
#: eelf32btsmipn32_fbsd.c:541 eelf32cr16.c:353 eelf32crx.c:240
#: eelf32ebmip.c:541 eelf32ebmipvxworks.c:576 eelf32elmip.c:541
#: eelf32elmipvxworks.c:576 eelf32epiphany.c:218 eelf32epiphany_4x4.c:205
#: eelf32frvfd.c:325 eelf32ip2k.c:218 eelf32l4300.c:541 eelf32lm32.c:218
-#: eelf32lm32fd.c:325 eelf32lmip.c:541 eelf32lppc.c:577 eelf32lppclinux.c:577
-#: eelf32lppcnto.c:577 eelf32lppcsim.c:577 eelf32lr5900.c:459
-#: eelf32lr5900n32.c:458 eelf32lriscv.c:398 eelf32lriscv_ilp32.c:398
-#: eelf32lriscv_ilp32f.c:398 eelf32lsmip.c:541 eelf32ltsmip.c:541
-#: eelf32ltsmip_fbsd.c:541 eelf32ltsmipn32.c:541 eelf32ltsmipn32_fbsd.c:541
-#: eelf32m32c.c:229 eelf32mb_linux.c:326 eelf32mbel_linux.c:326
-#: eelf32mcore.c:224 eelf32mep.c:203 eelf32metag.c:575 eelf32microblaze.c:203
-#: eelf32microblazeel.c:203 eelf32mipswindiss.c:433 eelf32moxie.c:218
-#: eelf32or1k.c:219 eelf32or1k_linux.c:326 eelf32ppc.c:577
-#: eelf32ppc_fbsd.c:577 eelf32ppclinux.c:577 eelf32ppcnto.c:577
-#: eelf32ppcsim.c:577 eelf32ppcvxworks.c:551 eelf32ppcwindiss.c:577
-#: eelf32rl78.c:218 eelf32rx.c:246 eelf32rx_linux.c:231 eelf32tilegx.c:326
-#: eelf32tilegx_be.c:326 eelf32tilepro.c:326 eelf32vax.c:300
-#: eelf32visium.c:203 eelf32xc16x.c:203 eelf32xc16xl.c:203 eelf32xc16xs.c:203
-#: eelf32xstormy16.c:214 eelf32xtensa.c:2247 eelf32z80.c:230 eelf64_aix.c:300
-#: eelf64_ia64.c:357 eelf64_ia64_fbsd.c:357 eelf64_s390.c:396
-#: eelf64_sparc.c:326 eelf64_sparc_fbsd.c:326 eelf64_sparc_sol2.c:458
-#: eelf64alpha.c:419 eelf64alpha_fbsd.c:419 eelf64alpha_nbsd.c:419
-#: eelf64bmip.c:555 eelf64bpf.c:203 eelf64briscv.c:398 eelf64briscv_lp64.c:398
-#: eelf64briscv_lp64f.c:398 eelf64btsmip.c:541 eelf64btsmip_fbsd.c:541
-#: eelf64hppa.c:270 eelf64lppc.c:1027 eelf64lppc_fbsd.c:1027
-#: eelf64lriscv.c:398 eelf64lriscv_lp64.c:398 eelf64lriscv_lp64f.c:398
-#: eelf64ltsmip.c:541 eelf64ltsmip_fbsd.c:541 eelf64mmix.c:411
-#: eelf64ppc.c:1027 eelf64ppc_fbsd.c:1027 eelf64rdos.c:351 eelf64tilegx.c:326
-#: eelf64tilegx_be.c:326 eelf_i386.c:5017 eelf_i386_be.c:324
-#: eelf_i386_fbsd.c:360 eelf_i386_ldso.c:335 eelf_i386_sol2.c:492
-#: eelf_i386_vxworks.c:387 eelf_iamcu.c:360 eelf_k1om.c:5351
-#: eelf_k1om_fbsd.c:360 eelf_l1om.c:5351 eelf_l1om_fbsd.c:360 eelf_s390.c:326
-#: eelf_x86_64.c:5395 eelf_x86_64_cloudabi.c:360 eelf_x86_64_fbsd.c:360
+#: eelf32lm32fd.c:325 eelf32lmip.c:541 eelf32loongarch.c:376 eelf32lppc.c:589
+#: eelf32lppclinux.c:589 eelf32lppcnto.c:589 eelf32lppcsim.c:589
+#: eelf32lr5900.c:459 eelf32lr5900n32.c:458 eelf32lriscv.c:394
+#: eelf32lriscv_ilp32.c:394 eelf32lriscv_ilp32f.c:394 eelf32lsmip.c:541
+#: eelf32ltsmip.c:541 eelf32ltsmip_fbsd.c:541 eelf32ltsmipn32.c:541
+#: eelf32ltsmipn32_fbsd.c:541 eelf32m32c.c:229 eelf32mb_linux.c:326
+#: eelf32mbel_linux.c:326 eelf32mcore.c:224 eelf32mep.c:203 eelf32metag.c:575
+#: eelf32microblaze.c:203 eelf32microblazeel.c:203 eelf32mipswindiss.c:433
+#: eelf32moxie.c:218 eelf32or1k.c:219 eelf32or1k_linux.c:326 eelf32ppc.c:589
+#: eelf32ppc_fbsd.c:589 eelf32ppchaiku.c:589 eelf32ppclinux.c:589
+#: eelf32ppcnto.c:589 eelf32ppcsim.c:589 eelf32ppcvxworks.c:563
+#: eelf32ppcwindiss.c:589 eelf32rl78.c:218 eelf32rx.c:246 eelf32rx_linux.c:231
+#: eelf32tilegx.c:326 eelf32tilegx_be.c:326 eelf32tilepro.c:326
+#: eelf32vax.c:300 eelf32visium.c:203 eelf32xc16x.c:203 eelf32xc16xl.c:203
+#: eelf32xc16xs.c:203 eelf32xstormy16.c:214 eelf32xtensa.c:2247
+#: eelf32z80.c:230 eelf64_aix.c:300 eelf64_ia64.c:357 eelf64_ia64_fbsd.c:357
+#: eelf64_s390.c:396 eelf64_sparc.c:326 eelf64_sparc_fbsd.c:326
+#: eelf64_sparc_sol2.c:458 eelf64alpha.c:419 eelf64alpha_fbsd.c:419
+#: eelf64alpha_nbsd.c:419 eelf64bmip.c:555 eelf64bpf.c:203 eelf64briscv.c:394
+#: eelf64briscv_lp64.c:394 eelf64briscv_lp64f.c:394 eelf64btsmip.c:541
+#: eelf64btsmip_fbsd.c:541 eelf64hppa.c:270 eelf64loongarch.c:376
+#: eelf64lppc.c:1038 eelf64lppc_fbsd.c:1038 eelf64lriscv.c:394
+#: eelf64lriscv_lp64.c:394 eelf64lriscv_lp64f.c:394 eelf64ltsmip.c:541
+#: eelf64ltsmip_fbsd.c:541 eelf64mmix.c:411 eelf64ppc.c:1038
+#: eelf64ppc_fbsd.c:1038 eelf64rdos.c:351 eelf64tilegx.c:326
+#: eelf64tilegx_be.c:326 eelf_i386.c:5039 eelf_i386_be.c:324
+#: eelf_i386_fbsd.c:360 eelf_i386_haiku.c:360 eelf_i386_ldso.c:335
+#: eelf_i386_sol2.c:492 eelf_i386_vxworks.c:387 eelf_iamcu.c:360
+#: eelf_k1om.c:5351 eelf_k1om_fbsd.c:360 eelf_l1om.c:5351 eelf_l1om_fbsd.c:360
+#: eelf_mipsel_haiku.c:541 eelf_s390.c:326 eelf_x86_64.c:5417
+#: eelf_x86_64_cloudabi.c:360 eelf_x86_64_fbsd.c:360 eelf_x86_64_haiku.c:360
#: eelf_x86_64_sol2.c:492 eh8300elf.c:218 eh8300elf_linux.c:218
#: eh8300helf.c:218 eh8300helf_linux.c:218 eh8300hnelf.c:218 eh8300self.c:218
#: eh8300self_linux.c:218 eh8300snelf.c:218 eh8300sxelf.c:218
@@ -3193,329 +3223,342 @@ msgstr "%F%P : style de hachage « %s » invalide\n"
msgid "%F%P: invalid maximum page size `%s'\n"
msgstr "%F%P : taille maximale de page « %s » invalide\n"
-#: eaarch64cloudabi.c:647 eaarch64cloudabib.c:647 eaarch64elf.c:646
-#: eaarch64elf32.c:646 eaarch64elf32b.c:646 eaarch64elfb.c:646
-#: eaarch64fbsd.c:647 eaarch64fbsdb.c:647 eaarch64linux.c:647
-#: eaarch64linux32.c:647 eaarch64linux32b.c:647 eaarch64linuxb.c:647
-#: earcelf.c:279 earclinux.c:335 earclinux_nps.c:335 earcv2elf.c:212
-#: earcv2elfx.c:212 earmelf.c:889 earmelf_fbsd.c:889 earmelf_fuchsia.c:890
-#: earmelf_linux.c:890 earmelf_linux_eabi.c:890 earmelf_linux_fdpiceabi.c:890
-#: earmelf_nacl.c:890 earmelf_nbsd.c:889 earmelf_phoenix.c:890
-#: earmelf_vxworks.c:925 earmelfb.c:889 earmelfb_fbsd.c:889
-#: earmelfb_fuchsia.c:890 earmelfb_linux.c:890 earmelfb_linux_eabi.c:890
-#: earmelfb_linux_fdpiceabi.c:890 earmelfb_nacl.c:890 earmelfb_nbsd.c:889
-#: earmnto.c:864 eavr1.c:435 eavr2.c:435 eavr25.c:435 eavr3.c:435 eavr31.c:435
-#: eavr35.c:435 eavr4.c:435 eavr5.c:435 eavr51.c:435 eavr6.c:435
-#: eavrtiny.c:435 eavrxmega1.c:435 eavrxmega2.c:435 eavrxmega3.c:435
-#: eavrxmega4.c:435 eavrxmega5.c:435 eavrxmega6.c:435 eavrxmega7.c:435
-#: ecriself.c:227 ecrislinux.c:310 ecskyelf.c:471 ecskyelf_linux.c:579
-#: ed10velf.c:212 eelf32_sparc.c:335 eelf32_sparc_sol2.c:467
-#: eelf32_sparc_vxworks.c:372 eelf32_spu.c:809 eelf32_tic6x_be.c:446
-#: eelf32_tic6x_elf_be.c:446 eelf32_tic6x_elf_le.c:446 eelf32_tic6x_le.c:446
-#: eelf32_tic6x_linux_be.c:446 eelf32_tic6x_linux_le.c:446
-#: eelf32_x86_64.c:5404 eelf32am33lin.c:309 eelf32b4300.c:550 eelf32bfin.c:327
-#: eelf32bfinfd.c:352 eelf32bmip.c:550 eelf32bmipn32.c:564 eelf32briscv.c:407
-#: eelf32briscv_ilp32.c:407 eelf32briscv_ilp32f.c:407 eelf32bsmip.c:564
-#: eelf32btsmip.c:550 eelf32btsmip_fbsd.c:550 eelf32btsmipn32.c:550
-#: eelf32btsmipn32_fbsd.c:550 eelf32cr16.c:362 eelf32crx.c:249
-#: eelf32ebmip.c:550 eelf32ebmipvxworks.c:585 eelf32elmip.c:550
-#: eelf32elmipvxworks.c:585 eelf32epiphany.c:227 eelf32epiphany_4x4.c:214
-#: eelf32frvfd.c:334 eelf32ip2k.c:227 eelf32l4300.c:550 eelf32lm32.c:227
-#: eelf32lm32fd.c:334 eelf32lmip.c:550 eelf32lppc.c:586 eelf32lppclinux.c:586
-#: eelf32lppcnto.c:586 eelf32lppcsim.c:586 eelf32lr5900.c:468
-#: eelf32lr5900n32.c:467 eelf32lriscv.c:407 eelf32lriscv_ilp32.c:407
-#: eelf32lriscv_ilp32f.c:407 eelf32lsmip.c:550 eelf32ltsmip.c:550
-#: eelf32ltsmip_fbsd.c:550 eelf32ltsmipn32.c:550 eelf32ltsmipn32_fbsd.c:550
-#: eelf32m32c.c:238 eelf32mb_linux.c:335 eelf32mbel_linux.c:335
-#: eelf32mcore.c:233 eelf32mep.c:212 eelf32metag.c:584 eelf32microblaze.c:212
-#: eelf32microblazeel.c:212 eelf32mipswindiss.c:442 eelf32moxie.c:227
-#: eelf32or1k.c:228 eelf32or1k_linux.c:335 eelf32ppc.c:586
-#: eelf32ppc_fbsd.c:586 eelf32ppclinux.c:586 eelf32ppcnto.c:586
-#: eelf32ppcsim.c:586 eelf32ppcvxworks.c:560 eelf32ppcwindiss.c:586
-#: eelf32rl78.c:227 eelf32rx.c:255 eelf32rx_linux.c:240 eelf32tilegx.c:335
-#: eelf32tilegx_be.c:335 eelf32tilepro.c:335 eelf32vax.c:309
-#: eelf32visium.c:212 eelf32xc16x.c:212 eelf32xc16xl.c:212 eelf32xc16xs.c:212
-#: eelf32xstormy16.c:223 eelf32xtensa.c:2256 eelf32z80.c:239 eelf64_aix.c:309
-#: eelf64_ia64.c:366 eelf64_ia64_fbsd.c:366 eelf64_s390.c:405
-#: eelf64_sparc.c:335 eelf64_sparc_fbsd.c:335 eelf64_sparc_sol2.c:467
-#: eelf64alpha.c:428 eelf64alpha_fbsd.c:428 eelf64alpha_nbsd.c:428
-#: eelf64bmip.c:564 eelf64bpf.c:212 eelf64briscv.c:407 eelf64briscv_lp64.c:407
-#: eelf64briscv_lp64f.c:407 eelf64btsmip.c:550 eelf64btsmip_fbsd.c:550
-#: eelf64hppa.c:279 eelf64lppc.c:1036 eelf64lppc_fbsd.c:1036
-#: eelf64lriscv.c:407 eelf64lriscv_lp64.c:407 eelf64lriscv_lp64f.c:407
-#: eelf64ltsmip.c:550 eelf64ltsmip_fbsd.c:550 eelf64mmix.c:420
-#: eelf64ppc.c:1036 eelf64ppc_fbsd.c:1036 eelf64rdos.c:360 eelf64tilegx.c:335
-#: eelf64tilegx_be.c:335 eelf_i386.c:5026 eelf_i386_be.c:333
-#: eelf_i386_fbsd.c:369 eelf_i386_ldso.c:344 eelf_i386_sol2.c:501
-#: eelf_i386_vxworks.c:396 eelf_iamcu.c:369 eelf_k1om.c:5360
-#: eelf_k1om_fbsd.c:369 eelf_l1om.c:5360 eelf_l1om_fbsd.c:369 eelf_s390.c:335
-#: eelf_x86_64.c:5404 eelf_x86_64_cloudabi.c:369 eelf_x86_64_fbsd.c:369
-#: eelf_x86_64_sol2.c:501 eh8300elf.c:227 eh8300elf_linux.c:227
-#: eh8300helf.c:227 eh8300helf_linux.c:227 eh8300hnelf.c:227 eh8300self.c:227
-#: eh8300self_linux.c:227 eh8300snelf.c:227 eh8300sxelf.c:227
-#: eh8300sxelf_linux.c:227 eh8300sxnelf.c:227 ehppa64linux.c:309
-#: ehppaelf.c:495 ehppalinux.c:618 ehppanbsd.c:618 ehppaobsd.c:618
-#: ei386lynx.c:324 ei386moss.c:324 ei386nto.c:324 em32relf.c:227
-#: em32relf_linux.c:334 em32rlelf.c:227 em32rlelf_linux.c:334
-#: em68hc11elf.c:497 em68hc11elfb.c:497 em68hc12elf.c:497 em68hc12elfb.c:497
-#: em68kelf.c:492 em68kelfnbsd.c:492 emn10300.c:309 ends32belf.c:348
-#: ends32belf16m.c:348 ends32belf_linux.c:422 ends32elf.c:348
-#: ends32elf16m.c:348 ends32elf_linux.c:422 enios2elf.c:514 enios2linux.c:596
-#: epruelf.c:233 escore3_elf.c:330 escore7_elf.c:330 eshelf.c:309
-#: eshelf_fd.c:335 eshelf_linux.c:335 eshelf_nbsd.c:309 eshelf_nto.c:309
-#: eshelf_uclinux.c:309 eshelf_vxworks.c:346 eshlelf.c:309 eshlelf_fd.c:335
-#: eshlelf_linux.c:335 eshlelf_nbsd.c:309 eshlelf_nto.c:309
-#: eshlelf_vxworks.c:346 ev850.c:259 ev850_rh850.c:259
+#: eaarch64cloudabi.c:648 eaarch64cloudabib.c:648 eaarch64elf.c:647
+#: eaarch64elf32.c:647 eaarch64elf32b.c:647 eaarch64elfb.c:647
+#: eaarch64fbsd.c:648 eaarch64fbsdb.c:648 eaarch64haiku.c:648
+#: eaarch64linux.c:648 eaarch64linux32.c:648 eaarch64linux32b.c:648
+#: eaarch64linuxb.c:648 earcelf.c:280 earclinux.c:336 earclinux_nps.c:336
+#: earcv2elf.c:213 earcv2elfx.c:213 earmelf.c:890 earmelf_fbsd.c:890
+#: earmelf_fuchsia.c:891 earmelf_haiku.c:891 earmelf_linux.c:891
+#: earmelf_linux_eabi.c:891 earmelf_linux_fdpiceabi.c:891 earmelf_nacl.c:891
+#: earmelf_nbsd.c:890 earmelf_phoenix.c:891 earmelf_vxworks.c:926
+#: earmelfb.c:890 earmelfb_fbsd.c:890 earmelfb_fuchsia.c:891
+#: earmelfb_linux.c:891 earmelfb_linux_eabi.c:891
+#: earmelfb_linux_fdpiceabi.c:891 earmelfb_nacl.c:891 earmelfb_nbsd.c:890
+#: earmnto.c:865 eavr1.c:436 eavr2.c:436 eavr25.c:436 eavr3.c:436 eavr31.c:436
+#: eavr35.c:436 eavr4.c:436 eavr5.c:436 eavr51.c:436 eavr6.c:436
+#: eavrtiny.c:436 eavrxmega1.c:436 eavrxmega2.c:436 eavrxmega3.c:436
+#: eavrxmega4.c:436 eavrxmega5.c:436 eavrxmega6.c:436 eavrxmega7.c:436
+#: ecriself.c:228 ecrislinux.c:311 ecskyelf.c:472 ecskyelf_linux.c:580
+#: ed10velf.c:213 eelf32_sparc.c:336 eelf32_sparc_sol2.c:468
+#: eelf32_sparc_vxworks.c:373 eelf32_spu.c:946 eelf32_tic6x_be.c:447
+#: eelf32_tic6x_elf_be.c:447 eelf32_tic6x_elf_le.c:447 eelf32_tic6x_le.c:447
+#: eelf32_tic6x_linux_be.c:447 eelf32_tic6x_linux_le.c:447
+#: eelf32_x86_64.c:5427 eelf32am33lin.c:310 eelf32b4300.c:551 eelf32bfin.c:328
+#: eelf32bfinfd.c:353 eelf32bmip.c:551 eelf32bmipn32.c:565 eelf32briscv.c:404
+#: eelf32briscv_ilp32.c:404 eelf32briscv_ilp32f.c:404 eelf32bsmip.c:565
+#: eelf32btsmip.c:551 eelf32btsmip_fbsd.c:551 eelf32btsmipn32.c:551
+#: eelf32btsmipn32_fbsd.c:551 eelf32cr16.c:363 eelf32crx.c:250
+#: eelf32ebmip.c:551 eelf32ebmipvxworks.c:586 eelf32elmip.c:551
+#: eelf32elmipvxworks.c:586 eelf32epiphany.c:228 eelf32epiphany_4x4.c:215
+#: eelf32frvfd.c:335 eelf32ip2k.c:228 eelf32l4300.c:551 eelf32lm32.c:228
+#: eelf32lm32fd.c:335 eelf32lmip.c:551 eelf32loongarch.c:386 eelf32lppc.c:599
+#: eelf32lppclinux.c:599 eelf32lppcnto.c:599 eelf32lppcsim.c:599
+#: eelf32lr5900.c:469 eelf32lr5900n32.c:468 eelf32lriscv.c:404
+#: eelf32lriscv_ilp32.c:404 eelf32lriscv_ilp32f.c:404 eelf32lsmip.c:551
+#: eelf32ltsmip.c:551 eelf32ltsmip_fbsd.c:551 eelf32ltsmipn32.c:551
+#: eelf32ltsmipn32_fbsd.c:551 eelf32m32c.c:239 eelf32mb_linux.c:336
+#: eelf32mbel_linux.c:336 eelf32mcore.c:234 eelf32mep.c:213 eelf32metag.c:585
+#: eelf32microblaze.c:213 eelf32microblazeel.c:213 eelf32mipswindiss.c:443
+#: eelf32moxie.c:228 eelf32or1k.c:229 eelf32or1k_linux.c:336 eelf32ppc.c:599
+#: eelf32ppc_fbsd.c:599 eelf32ppchaiku.c:599 eelf32ppclinux.c:599
+#: eelf32ppcnto.c:599 eelf32ppcsim.c:599 eelf32ppcvxworks.c:573
+#: eelf32ppcwindiss.c:599 eelf32rl78.c:228 eelf32rx.c:256 eelf32rx_linux.c:241
+#: eelf32tilegx.c:336 eelf32tilegx_be.c:336 eelf32tilepro.c:336
+#: eelf32vax.c:310 eelf32visium.c:213 eelf32xc16x.c:213 eelf32xc16xl.c:213
+#: eelf32xc16xs.c:213 eelf32xstormy16.c:224 eelf32xtensa.c:2257
+#: eelf32z80.c:240 eelf64_aix.c:310 eelf64_ia64.c:367 eelf64_ia64_fbsd.c:367
+#: eelf64_s390.c:406 eelf64_sparc.c:336 eelf64_sparc_fbsd.c:336
+#: eelf64_sparc_sol2.c:468 eelf64alpha.c:429 eelf64alpha_fbsd.c:429
+#: eelf64alpha_nbsd.c:429 eelf64bmip.c:565 eelf64bpf.c:213 eelf64briscv.c:404
+#: eelf64briscv_lp64.c:404 eelf64briscv_lp64f.c:404 eelf64btsmip.c:551
+#: eelf64btsmip_fbsd.c:551 eelf64hppa.c:280 eelf64loongarch.c:386
+#: eelf64lppc.c:1048 eelf64lppc_fbsd.c:1048 eelf64lriscv.c:404
+#: eelf64lriscv_lp64.c:404 eelf64lriscv_lp64f.c:404 eelf64ltsmip.c:551
+#: eelf64ltsmip_fbsd.c:551 eelf64mmix.c:421 eelf64ppc.c:1048
+#: eelf64ppc_fbsd.c:1048 eelf64rdos.c:361 eelf64tilegx.c:336
+#: eelf64tilegx_be.c:336 eelf_i386.c:5049 eelf_i386_be.c:334
+#: eelf_i386_fbsd.c:370 eelf_i386_haiku.c:370 eelf_i386_ldso.c:345
+#: eelf_i386_sol2.c:502 eelf_i386_vxworks.c:397 eelf_iamcu.c:370
+#: eelf_k1om.c:5361 eelf_k1om_fbsd.c:370 eelf_l1om.c:5361 eelf_l1om_fbsd.c:370
+#: eelf_mipsel_haiku.c:551 eelf_s390.c:336 eelf_x86_64.c:5427
+#: eelf_x86_64_cloudabi.c:370 eelf_x86_64_fbsd.c:370 eelf_x86_64_haiku.c:370
+#: eelf_x86_64_sol2.c:502 eh8300elf.c:228 eh8300elf_linux.c:228
+#: eh8300helf.c:228 eh8300helf_linux.c:228 eh8300hnelf.c:228 eh8300self.c:228
+#: eh8300self_linux.c:228 eh8300snelf.c:228 eh8300sxelf.c:228
+#: eh8300sxelf_linux.c:228 eh8300sxnelf.c:228 ehppa64linux.c:310
+#: ehppaelf.c:496 ehppalinux.c:619 ehppanbsd.c:619 ehppaobsd.c:619
+#: ei386lynx.c:325 ei386moss.c:325 ei386nto.c:325 em32relf.c:228
+#: em32relf_linux.c:335 em32rlelf.c:228 em32rlelf_linux.c:335
+#: em68hc11elf.c:498 em68hc11elfb.c:498 em68hc12elf.c:498 em68hc12elfb.c:498
+#: em68kelf.c:493 em68kelfnbsd.c:493 emn10300.c:310 ends32belf.c:349
+#: ends32belf16m.c:349 ends32belf_linux.c:423 ends32elf.c:349
+#: ends32elf16m.c:349 ends32elf_linux.c:423 enios2elf.c:515 enios2linux.c:597
+#: epruelf.c:234 escore3_elf.c:331 escore7_elf.c:331 eshelf.c:310
+#: eshelf_fd.c:336 eshelf_linux.c:336 eshelf_nbsd.c:310 eshelf_nto.c:310
+#: eshelf_uclinux.c:310 eshelf_vxworks.c:347 eshlelf.c:310 eshlelf_fd.c:336
+#: eshlelf_linux.c:336 eshlelf_nbsd.c:310 eshlelf_nto.c:310
+#: eshlelf_vxworks.c:347 ev850.c:260 ev850_rh850.c:260
msgid "%F%P: invalid common page size `%s'\n"
msgstr "%F%P : taille de page commune « %s » invalide\n"
-#: eaarch64cloudabi.c:655 eaarch64cloudabib.c:655 eaarch64elf.c:654
-#: eaarch64elf32.c:654 eaarch64elf32b.c:654 eaarch64elfb.c:654
-#: eaarch64fbsd.c:655 eaarch64fbsdb.c:655 eaarch64linux.c:655
-#: eaarch64linux32.c:655 eaarch64linux32b.c:655 eaarch64linuxb.c:655
-#: earcelf.c:287 earclinux.c:343 earclinux_nps.c:343 earcv2elf.c:220
-#: earcv2elfx.c:220 earmelf.c:897 earmelf_fbsd.c:897 earmelf_fuchsia.c:898
-#: earmelf_linux.c:898 earmelf_linux_eabi.c:898 earmelf_linux_fdpiceabi.c:898
-#: earmelf_nacl.c:898 earmelf_nbsd.c:897 earmelf_phoenix.c:898
-#: earmelf_vxworks.c:933 earmelfb.c:897 earmelfb_fbsd.c:897
-#: earmelfb_fuchsia.c:898 earmelfb_linux.c:898 earmelfb_linux_eabi.c:898
-#: earmelfb_linux_fdpiceabi.c:898 earmelfb_nacl.c:898 earmelfb_nbsd.c:897
-#: earmnto.c:872 eavr1.c:443 eavr2.c:443 eavr25.c:443 eavr3.c:443 eavr31.c:443
-#: eavr35.c:443 eavr4.c:443 eavr5.c:443 eavr51.c:443 eavr6.c:443
-#: eavrtiny.c:443 eavrxmega1.c:443 eavrxmega2.c:443 eavrxmega3.c:443
-#: eavrxmega4.c:443 eavrxmega5.c:443 eavrxmega6.c:443 eavrxmega7.c:443
-#: ecriself.c:235 ecrislinux.c:318 ecskyelf.c:479 ecskyelf_linux.c:587
-#: ed10velf.c:220 eelf32_sparc.c:343 eelf32_sparc_sol2.c:475
-#: eelf32_sparc_vxworks.c:380 eelf32_spu.c:817 eelf32_tic6x_be.c:454
-#: eelf32_tic6x_elf_be.c:454 eelf32_tic6x_elf_le.c:454 eelf32_tic6x_le.c:454
-#: eelf32_tic6x_linux_be.c:454 eelf32_tic6x_linux_le.c:454
-#: eelf32_x86_64.c:5412 eelf32am33lin.c:317 eelf32b4300.c:558 eelf32bfin.c:335
-#: eelf32bfinfd.c:360 eelf32bmip.c:558 eelf32bmipn32.c:572 eelf32briscv.c:415
-#: eelf32briscv_ilp32.c:415 eelf32briscv_ilp32f.c:415 eelf32bsmip.c:572
-#: eelf32btsmip.c:558 eelf32btsmip_fbsd.c:558 eelf32btsmipn32.c:558
-#: eelf32btsmipn32_fbsd.c:558 eelf32cr16.c:370 eelf32crx.c:257
-#: eelf32ebmip.c:558 eelf32ebmipvxworks.c:593 eelf32elmip.c:558
-#: eelf32elmipvxworks.c:593 eelf32epiphany.c:235 eelf32epiphany_4x4.c:222
-#: eelf32frvfd.c:342 eelf32ip2k.c:235 eelf32l4300.c:558 eelf32lm32.c:235
-#: eelf32lm32fd.c:342 eelf32lmip.c:558 eelf32lppc.c:594 eelf32lppclinux.c:594
-#: eelf32lppcnto.c:594 eelf32lppcsim.c:594 eelf32lr5900.c:476
-#: eelf32lr5900n32.c:475 eelf32lriscv.c:415 eelf32lriscv_ilp32.c:415
-#: eelf32lriscv_ilp32f.c:415 eelf32lsmip.c:558 eelf32ltsmip.c:558
-#: eelf32ltsmip_fbsd.c:558 eelf32ltsmipn32.c:558 eelf32ltsmipn32_fbsd.c:558
-#: eelf32m32c.c:246 eelf32mb_linux.c:343 eelf32mbel_linux.c:343
-#: eelf32mcore.c:241 eelf32mep.c:220 eelf32metag.c:592 eelf32microblaze.c:220
-#: eelf32microblazeel.c:220 eelf32mipswindiss.c:450 eelf32moxie.c:235
-#: eelf32or1k.c:236 eelf32or1k_linux.c:343 eelf32ppc.c:594
-#: eelf32ppc_fbsd.c:594 eelf32ppclinux.c:594 eelf32ppcnto.c:594
-#: eelf32ppcsim.c:594 eelf32ppcvxworks.c:568 eelf32ppcwindiss.c:594
-#: eelf32rl78.c:235 eelf32rx.c:263 eelf32rx_linux.c:248 eelf32tilegx.c:343
-#: eelf32tilegx_be.c:343 eelf32tilepro.c:343 eelf32vax.c:317
-#: eelf32visium.c:220 eelf32xc16x.c:220 eelf32xc16xl.c:220 eelf32xc16xs.c:220
-#: eelf32xstormy16.c:231 eelf32xtensa.c:2264 eelf32z80.c:247 eelf64_aix.c:317
-#: eelf64_ia64.c:374 eelf64_ia64_fbsd.c:374 eelf64_s390.c:413
-#: eelf64_sparc.c:343 eelf64_sparc_fbsd.c:343 eelf64_sparc_sol2.c:475
-#: eelf64alpha.c:436 eelf64alpha_fbsd.c:436 eelf64alpha_nbsd.c:436
-#: eelf64bmip.c:572 eelf64bpf.c:220 eelf64briscv.c:415 eelf64briscv_lp64.c:415
-#: eelf64briscv_lp64f.c:415 eelf64btsmip.c:558 eelf64btsmip_fbsd.c:558
-#: eelf64hppa.c:287 eelf64lppc.c:1044 eelf64lppc_fbsd.c:1044
-#: eelf64lriscv.c:415 eelf64lriscv_lp64.c:415 eelf64lriscv_lp64f.c:415
-#: eelf64ltsmip.c:558 eelf64ltsmip_fbsd.c:558 eelf64mmix.c:428
-#: eelf64ppc.c:1044 eelf64ppc_fbsd.c:1044 eelf64rdos.c:368 eelf64tilegx.c:343
-#: eelf64tilegx_be.c:343 eelf_i386.c:5034 eelf_i386_be.c:341
-#: eelf_i386_fbsd.c:377 eelf_i386_ldso.c:352 eelf_i386_sol2.c:509
-#: eelf_i386_vxworks.c:404 eelf_iamcu.c:377 eelf_k1om.c:5368
-#: eelf_k1om_fbsd.c:377 eelf_l1om.c:5368 eelf_l1om_fbsd.c:377 eelf_s390.c:343
-#: eelf_x86_64.c:5412 eelf_x86_64_cloudabi.c:377 eelf_x86_64_fbsd.c:377
-#: eelf_x86_64_sol2.c:509 eh8300elf.c:235 eh8300elf_linux.c:235
-#: eh8300helf.c:235 eh8300helf_linux.c:235 eh8300hnelf.c:235 eh8300self.c:235
-#: eh8300self_linux.c:235 eh8300snelf.c:235 eh8300sxelf.c:235
-#: eh8300sxelf_linux.c:235 eh8300sxnelf.c:235 ehppa64linux.c:317
-#: ehppaelf.c:503 ehppalinux.c:626 ehppanbsd.c:626 ehppaobsd.c:626
-#: ei386lynx.c:332 ei386moss.c:332 ei386nto.c:332 em32relf.c:235
-#: em32relf_linux.c:342 em32rlelf.c:235 em32rlelf_linux.c:342
-#: em68hc11elf.c:505 em68hc11elfb.c:505 em68hc12elf.c:505 em68hc12elfb.c:505
-#: em68kelf.c:500 em68kelfnbsd.c:500 emn10300.c:317 ends32belf.c:356
-#: ends32belf16m.c:356 ends32belf_linux.c:430 ends32elf.c:356
-#: ends32elf16m.c:356 ends32elf_linux.c:430 enios2elf.c:522 enios2linux.c:604
-#: epruelf.c:241 escore3_elf.c:338 escore7_elf.c:338 eshelf.c:317
-#: eshelf_fd.c:343 eshelf_linux.c:343 eshelf_nbsd.c:317 eshelf_nto.c:317
-#: eshelf_uclinux.c:317 eshelf_vxworks.c:354 eshlelf.c:317 eshlelf_fd.c:343
-#: eshlelf_linux.c:343 eshlelf_nbsd.c:317 eshlelf_nto.c:317
-#: eshlelf_vxworks.c:354 ev850.c:267 ev850_rh850.c:267
+#: eaarch64cloudabi.c:657 eaarch64cloudabib.c:657 eaarch64elf.c:656
+#: eaarch64elf32.c:656 eaarch64elf32b.c:656 eaarch64elfb.c:656
+#: eaarch64fbsd.c:657 eaarch64fbsdb.c:657 eaarch64haiku.c:657
+#: eaarch64linux.c:657 eaarch64linux32.c:657 eaarch64linux32b.c:657
+#: eaarch64linuxb.c:657 earcelf.c:289 earclinux.c:345 earclinux_nps.c:345
+#: earcv2elf.c:222 earcv2elfx.c:222 earmelf.c:899 earmelf_fbsd.c:899
+#: earmelf_fuchsia.c:900 earmelf_haiku.c:900 earmelf_linux.c:900
+#: earmelf_linux_eabi.c:900 earmelf_linux_fdpiceabi.c:900 earmelf_nacl.c:900
+#: earmelf_nbsd.c:899 earmelf_phoenix.c:900 earmelf_vxworks.c:935
+#: earmelfb.c:899 earmelfb_fbsd.c:899 earmelfb_fuchsia.c:900
+#: earmelfb_linux.c:900 earmelfb_linux_eabi.c:900
+#: earmelfb_linux_fdpiceabi.c:900 earmelfb_nacl.c:900 earmelfb_nbsd.c:899
+#: earmnto.c:874 eavr1.c:445 eavr2.c:445 eavr25.c:445 eavr3.c:445 eavr31.c:445
+#: eavr35.c:445 eavr4.c:445 eavr5.c:445 eavr51.c:445 eavr6.c:445
+#: eavrtiny.c:445 eavrxmega1.c:445 eavrxmega2.c:445 eavrxmega3.c:445
+#: eavrxmega4.c:445 eavrxmega5.c:445 eavrxmega6.c:445 eavrxmega7.c:445
+#: ecriself.c:237 ecrislinux.c:320 ecskyelf.c:481 ecskyelf_linux.c:589
+#: ed10velf.c:222 eelf32_sparc.c:345 eelf32_sparc_sol2.c:477
+#: eelf32_sparc_vxworks.c:382 eelf32_spu.c:955 eelf32_tic6x_be.c:456
+#: eelf32_tic6x_elf_be.c:456 eelf32_tic6x_elf_le.c:456 eelf32_tic6x_le.c:456
+#: eelf32_tic6x_linux_be.c:456 eelf32_tic6x_linux_le.c:456
+#: eelf32_x86_64.c:5436 eelf32am33lin.c:319 eelf32b4300.c:560 eelf32bfin.c:337
+#: eelf32bfinfd.c:362 eelf32bmip.c:560 eelf32bmipn32.c:574 eelf32briscv.c:413
+#: eelf32briscv_ilp32.c:413 eelf32briscv_ilp32f.c:413 eelf32bsmip.c:574
+#: eelf32btsmip.c:560 eelf32btsmip_fbsd.c:560 eelf32btsmipn32.c:560
+#: eelf32btsmipn32_fbsd.c:560 eelf32cr16.c:372 eelf32crx.c:259
+#: eelf32ebmip.c:560 eelf32ebmipvxworks.c:595 eelf32elmip.c:560
+#: eelf32elmipvxworks.c:595 eelf32epiphany.c:237 eelf32epiphany_4x4.c:224
+#: eelf32frvfd.c:344 eelf32ip2k.c:237 eelf32l4300.c:560 eelf32lm32.c:237
+#: eelf32lm32fd.c:344 eelf32lmip.c:560 eelf32loongarch.c:395 eelf32lppc.c:608
+#: eelf32lppclinux.c:608 eelf32lppcnto.c:608 eelf32lppcsim.c:608
+#: eelf32lr5900.c:478 eelf32lr5900n32.c:477 eelf32lriscv.c:413
+#: eelf32lriscv_ilp32.c:413 eelf32lriscv_ilp32f.c:413 eelf32lsmip.c:560
+#: eelf32ltsmip.c:560 eelf32ltsmip_fbsd.c:560 eelf32ltsmipn32.c:560
+#: eelf32ltsmipn32_fbsd.c:560 eelf32m32c.c:248 eelf32mb_linux.c:345
+#: eelf32mbel_linux.c:345 eelf32mcore.c:243 eelf32mep.c:222 eelf32metag.c:594
+#: eelf32microblaze.c:222 eelf32microblazeel.c:222 eelf32mipswindiss.c:452
+#: eelf32moxie.c:237 eelf32or1k.c:238 eelf32or1k_linux.c:345 eelf32ppc.c:608
+#: eelf32ppc_fbsd.c:608 eelf32ppchaiku.c:608 eelf32ppclinux.c:608
+#: eelf32ppcnto.c:608 eelf32ppcsim.c:608 eelf32ppcvxworks.c:582
+#: eelf32ppcwindiss.c:608 eelf32rl78.c:237 eelf32rx.c:265 eelf32rx_linux.c:250
+#: eelf32tilegx.c:345 eelf32tilegx_be.c:345 eelf32tilepro.c:345
+#: eelf32vax.c:319 eelf32visium.c:222 eelf32xc16x.c:222 eelf32xc16xl.c:222
+#: eelf32xc16xs.c:222 eelf32xstormy16.c:233 eelf32xtensa.c:2266
+#: eelf32z80.c:249 eelf64_aix.c:319 eelf64_ia64.c:376 eelf64_ia64_fbsd.c:376
+#: eelf64_s390.c:415 eelf64_sparc.c:345 eelf64_sparc_fbsd.c:345
+#: eelf64_sparc_sol2.c:477 eelf64alpha.c:438 eelf64alpha_fbsd.c:438
+#: eelf64alpha_nbsd.c:438 eelf64bmip.c:574 eelf64bpf.c:222 eelf64briscv.c:413
+#: eelf64briscv_lp64.c:413 eelf64briscv_lp64f.c:413 eelf64btsmip.c:560
+#: eelf64btsmip_fbsd.c:560 eelf64hppa.c:289 eelf64loongarch.c:395
+#: eelf64lppc.c:1057 eelf64lppc_fbsd.c:1057 eelf64lriscv.c:413
+#: eelf64lriscv_lp64.c:413 eelf64lriscv_lp64f.c:413 eelf64ltsmip.c:560
+#: eelf64ltsmip_fbsd.c:560 eelf64mmix.c:430 eelf64ppc.c:1057
+#: eelf64ppc_fbsd.c:1057 eelf64rdos.c:370 eelf64tilegx.c:345
+#: eelf64tilegx_be.c:345 eelf_i386.c:5058 eelf_i386_be.c:343
+#: eelf_i386_fbsd.c:379 eelf_i386_haiku.c:379 eelf_i386_ldso.c:354
+#: eelf_i386_sol2.c:511 eelf_i386_vxworks.c:406 eelf_iamcu.c:379
+#: eelf_k1om.c:5370 eelf_k1om_fbsd.c:379 eelf_l1om.c:5370 eelf_l1om_fbsd.c:379
+#: eelf_mipsel_haiku.c:560 eelf_s390.c:345 eelf_x86_64.c:5436
+#: eelf_x86_64_cloudabi.c:379 eelf_x86_64_fbsd.c:379 eelf_x86_64_haiku.c:379
+#: eelf_x86_64_sol2.c:511 eh8300elf.c:237 eh8300elf_linux.c:237
+#: eh8300helf.c:237 eh8300helf_linux.c:237 eh8300hnelf.c:237 eh8300self.c:237
+#: eh8300self_linux.c:237 eh8300snelf.c:237 eh8300sxelf.c:237
+#: eh8300sxelf_linux.c:237 eh8300sxnelf.c:237 ehppa64linux.c:319
+#: ehppaelf.c:505 ehppalinux.c:628 ehppanbsd.c:628 ehppaobsd.c:628
+#: ei386lynx.c:334 ei386moss.c:334 ei386nto.c:334 em32relf.c:237
+#: em32relf_linux.c:344 em32rlelf.c:237 em32rlelf_linux.c:344
+#: em68hc11elf.c:507 em68hc11elfb.c:507 em68hc12elf.c:507 em68hc12elfb.c:507
+#: em68kelf.c:502 em68kelfnbsd.c:502 emn10300.c:319 ends32belf.c:358
+#: ends32belf16m.c:358 ends32belf_linux.c:432 ends32elf.c:358
+#: ends32elf16m.c:358 ends32elf_linux.c:432 enios2elf.c:524 enios2linux.c:606
+#: epruelf.c:243 escore3_elf.c:340 escore7_elf.c:340 eshelf.c:319
+#: eshelf_fd.c:345 eshelf_linux.c:345 eshelf_nbsd.c:319 eshelf_nto.c:319
+#: eshelf_uclinux.c:319 eshelf_vxworks.c:356 eshlelf.c:319 eshlelf_fd.c:345
+#: eshlelf_linux.c:345 eshlelf_nbsd.c:319 eshlelf_nto.c:319
+#: eshlelf_vxworks.c:356 ev850.c:269 ev850_rh850.c:269
msgid "%F%P: invalid stack size `%s'\n"
msgstr "%F%P : taille de pile « %s » invalide\n"
-#: eaarch64cloudabi.c:694 eaarch64cloudabib.c:694 eaarch64elf.c:693
-#: eaarch64elf32.c:693 eaarch64elf32b.c:693 eaarch64elfb.c:693
-#: eaarch64fbsd.c:694 eaarch64fbsdb.c:694 eaarch64linux.c:694
-#: eaarch64linux32.c:694 eaarch64linux32b.c:694 eaarch64linuxb.c:694
-#: earcelf.c:326 earclinux.c:382 earclinux_nps.c:382 earcv2elf.c:259
-#: earcv2elfx.c:259 earmelf.c:936 earmelf_fbsd.c:936 earmelf_fuchsia.c:937
-#: earmelf_linux.c:937 earmelf_linux_eabi.c:937 earmelf_linux_fdpiceabi.c:937
-#: earmelf_nacl.c:937 earmelf_nbsd.c:936 earmelf_phoenix.c:937
-#: earmelf_vxworks.c:972 earmelfb.c:936 earmelfb_fbsd.c:936
-#: earmelfb_fuchsia.c:937 earmelfb_linux.c:937 earmelfb_linux_eabi.c:937
-#: earmelfb_linux_fdpiceabi.c:937 earmelfb_nacl.c:937 earmelfb_nbsd.c:936
-#: earmnto.c:911 eavr1.c:482 eavr2.c:482 eavr25.c:482 eavr3.c:482 eavr31.c:482
-#: eavr35.c:482 eavr4.c:482 eavr5.c:482 eavr51.c:482 eavr6.c:482
-#: eavrtiny.c:482 eavrxmega1.c:482 eavrxmega2.c:482 eavrxmega3.c:482
-#: eavrxmega4.c:482 eavrxmega5.c:482 eavrxmega6.c:482 eavrxmega7.c:482
-#: ecriself.c:274 ecrislinux.c:357 ecskyelf.c:518 ecskyelf_linux.c:626
-#: ed10velf.c:259 eelf32_sparc.c:382 eelf32_sparc_sol2.c:514
-#: eelf32_sparc_vxworks.c:419 eelf32_spu.c:856 eelf32_tic6x_be.c:493
-#: eelf32_tic6x_elf_be.c:493 eelf32_tic6x_elf_le.c:493 eelf32_tic6x_le.c:493
-#: eelf32_tic6x_linux_be.c:493 eelf32_tic6x_linux_le.c:493
-#: eelf32_x86_64.c:5451 eelf32am33lin.c:356 eelf32b4300.c:597 eelf32bfin.c:374
-#: eelf32bfinfd.c:399 eelf32bmip.c:597 eelf32bmipn32.c:611 eelf32briscv.c:454
-#: eelf32briscv_ilp32.c:454 eelf32briscv_ilp32f.c:454 eelf32bsmip.c:611
-#: eelf32btsmip.c:597 eelf32btsmip_fbsd.c:597 eelf32btsmipn32.c:597
-#: eelf32btsmipn32_fbsd.c:597 eelf32cr16.c:409 eelf32crx.c:296
-#: eelf32ebmip.c:597 eelf32ebmipvxworks.c:632 eelf32elmip.c:597
-#: eelf32elmipvxworks.c:632 eelf32epiphany.c:274 eelf32epiphany_4x4.c:261
-#: eelf32frvfd.c:381 eelf32ip2k.c:274 eelf32l4300.c:597 eelf32lm32.c:274
-#: eelf32lm32fd.c:381 eelf32lmip.c:597 eelf32lppc.c:633 eelf32lppclinux.c:633
-#: eelf32lppcnto.c:633 eelf32lppcsim.c:633 eelf32lr5900.c:515
-#: eelf32lr5900n32.c:514 eelf32lriscv.c:454 eelf32lriscv_ilp32.c:454
-#: eelf32lriscv_ilp32f.c:454 eelf32lsmip.c:597 eelf32ltsmip.c:597
-#: eelf32ltsmip_fbsd.c:597 eelf32ltsmipn32.c:597 eelf32ltsmipn32_fbsd.c:597
-#: eelf32m32c.c:285 eelf32mb_linux.c:382 eelf32mbel_linux.c:382
-#: eelf32mcore.c:280 eelf32mep.c:259 eelf32metag.c:631 eelf32microblaze.c:259
-#: eelf32microblazeel.c:259 eelf32mipswindiss.c:489 eelf32moxie.c:274
-#: eelf32or1k.c:275 eelf32or1k_linux.c:382 eelf32ppc.c:633
-#: eelf32ppc_fbsd.c:633 eelf32ppclinux.c:633 eelf32ppcnto.c:633
-#: eelf32ppcsim.c:633 eelf32ppcvxworks.c:607 eelf32ppcwindiss.c:633
-#: eelf32rl78.c:274 eelf32rx.c:302 eelf32rx_linux.c:287 eelf32tilegx.c:382
-#: eelf32tilegx_be.c:382 eelf32tilepro.c:382 eelf32vax.c:356
-#: eelf32visium.c:259 eelf32xc16x.c:259 eelf32xc16xl.c:259 eelf32xc16xs.c:259
-#: eelf32xstormy16.c:270 eelf32xtensa.c:2303 eelf32z80.c:286 eelf64_aix.c:356
-#: eelf64_ia64.c:413 eelf64_ia64_fbsd.c:413 eelf64_s390.c:452
-#: eelf64_sparc.c:382 eelf64_sparc_fbsd.c:382 eelf64_sparc_sol2.c:514
-#: eelf64alpha.c:475 eelf64alpha_fbsd.c:475 eelf64alpha_nbsd.c:475
-#: eelf64bmip.c:611 eelf64bpf.c:259 eelf64briscv.c:454 eelf64briscv_lp64.c:454
-#: eelf64briscv_lp64f.c:454 eelf64btsmip.c:597 eelf64btsmip_fbsd.c:597
-#: eelf64hppa.c:326 eelf64lppc.c:1083 eelf64lppc_fbsd.c:1083
-#: eelf64lriscv.c:454 eelf64lriscv_lp64.c:454 eelf64lriscv_lp64f.c:454
-#: eelf64ltsmip.c:597 eelf64ltsmip_fbsd.c:597 eelf64mmix.c:467
-#: eelf64ppc.c:1083 eelf64ppc_fbsd.c:1083 eelf64rdos.c:407 eelf64tilegx.c:382
-#: eelf64tilegx_be.c:382 eelf_i386.c:5073 eelf_i386_be.c:380
-#: eelf_i386_fbsd.c:416 eelf_i386_ldso.c:391 eelf_i386_sol2.c:548
-#: eelf_i386_vxworks.c:443 eelf_iamcu.c:416 eelf_k1om.c:5407
-#: eelf_k1om_fbsd.c:416 eelf_l1om.c:5407 eelf_l1om_fbsd.c:416 eelf_s390.c:382
-#: eelf_x86_64.c:5451 eelf_x86_64_cloudabi.c:416 eelf_x86_64_fbsd.c:416
-#: eelf_x86_64_sol2.c:548 eh8300elf.c:274 eh8300elf_linux.c:274
-#: eh8300helf.c:274 eh8300helf_linux.c:274 eh8300hnelf.c:274 eh8300self.c:274
-#: eh8300self_linux.c:274 eh8300snelf.c:274 eh8300sxelf.c:274
-#: eh8300sxelf_linux.c:274 eh8300sxnelf.c:274 ehppa64linux.c:356
-#: ehppaelf.c:542 ehppalinux.c:665 ehppanbsd.c:665 ehppaobsd.c:665
-#: ei386lynx.c:371 ei386moss.c:371 ei386nto.c:371 em32relf.c:274
-#: em32relf_linux.c:381 em32rlelf.c:274 em32rlelf_linux.c:381
-#: em68hc11elf.c:544 em68hc11elfb.c:544 em68hc12elf.c:544 em68hc12elfb.c:544
-#: em68kelf.c:539 em68kelfnbsd.c:539 emn10300.c:356 ends32belf.c:395
-#: ends32belf16m.c:395 ends32belf_linux.c:469 ends32elf.c:395
-#: ends32elf16m.c:395 ends32elf_linux.c:469 enios2elf.c:561 enios2linux.c:643
-#: epruelf.c:280 escore3_elf.c:377 escore7_elf.c:377 eshelf.c:356
-#: eshelf_fd.c:382 eshelf_linux.c:382 eshelf_nbsd.c:356 eshelf_nto.c:356
-#: eshelf_uclinux.c:356 eshelf_vxworks.c:393 eshlelf.c:356 eshlelf_fd.c:382
-#: eshlelf_linux.c:382 eshlelf_nbsd.c:356 eshlelf_nto.c:356
-#: eshlelf_vxworks.c:393 ev850.c:306 ev850_rh850.c:306
+#: eaarch64cloudabi.c:696 eaarch64cloudabib.c:696 eaarch64elf.c:695
+#: eaarch64elf32.c:695 eaarch64elf32b.c:695 eaarch64elfb.c:695
+#: eaarch64fbsd.c:696 eaarch64fbsdb.c:696 eaarch64haiku.c:696
+#: eaarch64linux.c:696 eaarch64linux32.c:696 eaarch64linux32b.c:696
+#: eaarch64linuxb.c:696 earcelf.c:328 earclinux.c:384 earclinux_nps.c:384
+#: earcv2elf.c:261 earcv2elfx.c:261 earmelf.c:938 earmelf_fbsd.c:938
+#: earmelf_fuchsia.c:939 earmelf_haiku.c:939 earmelf_linux.c:939
+#: earmelf_linux_eabi.c:939 earmelf_linux_fdpiceabi.c:939 earmelf_nacl.c:939
+#: earmelf_nbsd.c:938 earmelf_phoenix.c:939 earmelf_vxworks.c:974
+#: earmelfb.c:938 earmelfb_fbsd.c:938 earmelfb_fuchsia.c:939
+#: earmelfb_linux.c:939 earmelfb_linux_eabi.c:939
+#: earmelfb_linux_fdpiceabi.c:939 earmelfb_nacl.c:939 earmelfb_nbsd.c:938
+#: earmnto.c:913 eavr1.c:484 eavr2.c:484 eavr25.c:484 eavr3.c:484 eavr31.c:484
+#: eavr35.c:484 eavr4.c:484 eavr5.c:484 eavr51.c:484 eavr6.c:484
+#: eavrtiny.c:484 eavrxmega1.c:484 eavrxmega2.c:484 eavrxmega3.c:484
+#: eavrxmega4.c:484 eavrxmega5.c:484 eavrxmega6.c:484 eavrxmega7.c:484
+#: ecriself.c:276 ecrislinux.c:359 ecskyelf.c:520 ecskyelf_linux.c:628
+#: ed10velf.c:261 eelf32_sparc.c:384 eelf32_sparc_sol2.c:516
+#: eelf32_sparc_vxworks.c:421 eelf32_spu.c:994 eelf32_tic6x_be.c:495
+#: eelf32_tic6x_elf_be.c:495 eelf32_tic6x_elf_le.c:495 eelf32_tic6x_le.c:495
+#: eelf32_tic6x_linux_be.c:495 eelf32_tic6x_linux_le.c:495
+#: eelf32_x86_64.c:5475 eelf32am33lin.c:358 eelf32b4300.c:599 eelf32bfin.c:376
+#: eelf32bfinfd.c:401 eelf32bmip.c:599 eelf32bmipn32.c:613 eelf32briscv.c:452
+#: eelf32briscv_ilp32.c:452 eelf32briscv_ilp32f.c:452 eelf32bsmip.c:613
+#: eelf32btsmip.c:599 eelf32btsmip_fbsd.c:599 eelf32btsmipn32.c:599
+#: eelf32btsmipn32_fbsd.c:599 eelf32cr16.c:411 eelf32crx.c:298
+#: eelf32ebmip.c:599 eelf32ebmipvxworks.c:634 eelf32elmip.c:599
+#: eelf32elmipvxworks.c:634 eelf32epiphany.c:276 eelf32epiphany_4x4.c:263
+#: eelf32frvfd.c:383 eelf32ip2k.c:276 eelf32l4300.c:599 eelf32lm32.c:276
+#: eelf32lm32fd.c:383 eelf32lmip.c:599 eelf32loongarch.c:434 eelf32lppc.c:647
+#: eelf32lppclinux.c:647 eelf32lppcnto.c:647 eelf32lppcsim.c:647
+#: eelf32lr5900.c:517 eelf32lr5900n32.c:516 eelf32lriscv.c:452
+#: eelf32lriscv_ilp32.c:452 eelf32lriscv_ilp32f.c:452 eelf32lsmip.c:599
+#: eelf32ltsmip.c:599 eelf32ltsmip_fbsd.c:599 eelf32ltsmipn32.c:599
+#: eelf32ltsmipn32_fbsd.c:599 eelf32m32c.c:287 eelf32mb_linux.c:384
+#: eelf32mbel_linux.c:384 eelf32mcore.c:282 eelf32mep.c:261 eelf32metag.c:633
+#: eelf32microblaze.c:261 eelf32microblazeel.c:261 eelf32mipswindiss.c:491
+#: eelf32moxie.c:276 eelf32or1k.c:277 eelf32or1k_linux.c:384 eelf32ppc.c:647
+#: eelf32ppc_fbsd.c:647 eelf32ppchaiku.c:647 eelf32ppclinux.c:647
+#: eelf32ppcnto.c:647 eelf32ppcsim.c:647 eelf32ppcvxworks.c:621
+#: eelf32ppcwindiss.c:647 eelf32rl78.c:276 eelf32rx.c:304 eelf32rx_linux.c:289
+#: eelf32tilegx.c:384 eelf32tilegx_be.c:384 eelf32tilepro.c:384
+#: eelf32vax.c:358 eelf32visium.c:261 eelf32xc16x.c:261 eelf32xc16xl.c:261
+#: eelf32xc16xs.c:261 eelf32xstormy16.c:272 eelf32xtensa.c:2305
+#: eelf32z80.c:288 eelf64_aix.c:358 eelf64_ia64.c:415 eelf64_ia64_fbsd.c:415
+#: eelf64_s390.c:454 eelf64_sparc.c:384 eelf64_sparc_fbsd.c:384
+#: eelf64_sparc_sol2.c:516 eelf64alpha.c:477 eelf64alpha_fbsd.c:477
+#: eelf64alpha_nbsd.c:477 eelf64bmip.c:613 eelf64bpf.c:261 eelf64briscv.c:452
+#: eelf64briscv_lp64.c:452 eelf64briscv_lp64f.c:452 eelf64btsmip.c:599
+#: eelf64btsmip_fbsd.c:599 eelf64hppa.c:328 eelf64loongarch.c:434
+#: eelf64lppc.c:1096 eelf64lppc_fbsd.c:1096 eelf64lriscv.c:452
+#: eelf64lriscv_lp64.c:452 eelf64lriscv_lp64f.c:452 eelf64ltsmip.c:599
+#: eelf64ltsmip_fbsd.c:599 eelf64mmix.c:469 eelf64ppc.c:1096
+#: eelf64ppc_fbsd.c:1096 eelf64rdos.c:409 eelf64tilegx.c:384
+#: eelf64tilegx_be.c:384 eelf_i386.c:5097 eelf_i386_be.c:382
+#: eelf_i386_fbsd.c:418 eelf_i386_haiku.c:418 eelf_i386_ldso.c:393
+#: eelf_i386_sol2.c:550 eelf_i386_vxworks.c:445 eelf_iamcu.c:418
+#: eelf_k1om.c:5409 eelf_k1om_fbsd.c:418 eelf_l1om.c:5409 eelf_l1om_fbsd.c:418
+#: eelf_mipsel_haiku.c:599 eelf_s390.c:384 eelf_x86_64.c:5475
+#: eelf_x86_64_cloudabi.c:418 eelf_x86_64_fbsd.c:418 eelf_x86_64_haiku.c:418
+#: eelf_x86_64_sol2.c:550 eh8300elf.c:276 eh8300elf_linux.c:276
+#: eh8300helf.c:276 eh8300helf_linux.c:276 eh8300hnelf.c:276 eh8300self.c:276
+#: eh8300self_linux.c:276 eh8300snelf.c:276 eh8300sxelf.c:276
+#: eh8300sxelf_linux.c:276 eh8300sxnelf.c:276 ehppa64linux.c:358
+#: ehppaelf.c:544 ehppalinux.c:667 ehppanbsd.c:667 ehppaobsd.c:667
+#: ei386lynx.c:373 ei386moss.c:373 ei386nto.c:373 em32relf.c:276
+#: em32relf_linux.c:383 em32rlelf.c:276 em32rlelf_linux.c:383
+#: em68hc11elf.c:546 em68hc11elfb.c:546 em68hc12elf.c:546 em68hc12elfb.c:546
+#: em68kelf.c:541 em68kelfnbsd.c:541 emn10300.c:358 ends32belf.c:397
+#: ends32belf16m.c:397 ends32belf_linux.c:471 ends32elf.c:397
+#: ends32elf16m.c:397 ends32elf_linux.c:471 enios2elf.c:563 enios2linux.c:645
+#: epruelf.c:282 escore3_elf.c:379 escore7_elf.c:379 eshelf.c:358
+#: eshelf_fd.c:384 eshelf_linux.c:384 eshelf_nbsd.c:358 eshelf_nto.c:358
+#: eshelf_uclinux.c:358 eshelf_vxworks.c:395 eshlelf.c:358 eshlelf_fd.c:384
+#: eshlelf_linux.c:384 eshlelf_nbsd.c:358 eshlelf_nto.c:358
+#: eshlelf_vxworks.c:395 ev850.c:308 ev850_rh850.c:308
msgid "%F%P: invalid visibility in `-z %s'; must be default, internal, hidden, or protected"
msgstr "%F%P : visibilité invalide dans « -z %s » ; doit être « default », « internal », « hidden » ou « protected »"
-#: eaarch64cloudabi.c:767 eaarch64cloudabib.c:767 eaarch64elf.c:762
-#: eaarch64elf32.c:762 eaarch64elf32b.c:762 eaarch64elfb.c:762
-#: eaarch64fbsd.c:767 eaarch64fbsdb.c:767 eaarch64linux.c:767
-#: eaarch64linux32.c:767 eaarch64linux32b.c:767 eaarch64linuxb.c:767
-#: earcelf.c:386 earclinux.c:446 earclinux_nps.c:446 earcv2elf.c:264
-#: earcv2elfx.c:264 earmelf.c:996 earmelf_fbsd.c:996 earmelf_fuchsia.c:1001
-#: earmelf_linux.c:1001 earmelf_linux_eabi.c:1001
-#: earmelf_linux_fdpiceabi.c:1001 earmelf_nacl.c:1001 earmelf_nbsd.c:996
-#: earmelf_phoenix.c:1001 earmelf_vxworks.c:1032 earmelfb.c:996
-#: earmelfb_fbsd.c:996 earmelfb_fuchsia.c:1001 earmelfb_linux.c:1001
-#: earmelfb_linux_eabi.c:1001 earmelfb_linux_fdpiceabi.c:1001
-#: earmelfb_nacl.c:1001 earmelfb_nbsd.c:996 earmnto.c:971 eavr1.c:487
-#: eavr2.c:487 eavr25.c:487 eavr3.c:487 eavr31.c:487 eavr35.c:487 eavr4.c:487
-#: eavr5.c:487 eavr51.c:487 eavr6.c:487 eavrtiny.c:487 eavrxmega1.c:487
-#: eavrxmega2.c:487 eavrxmega3.c:487 eavrxmega4.c:487 eavrxmega5.c:487
-#: eavrxmega6.c:487 eavrxmega7.c:487 ecriself.c:279 ecrislinux.c:421
-#: ecskyelf.c:523 ecskyelf_linux.c:690 ed10velf.c:264 eelf32_sparc.c:446
-#: eelf32_sparc_sol2.c:578 eelf32_sparc_vxworks.c:483 eelf32_spu.c:861
-#: eelf32_tic6x_be.c:553 eelf32_tic6x_elf_be.c:553 eelf32_tic6x_elf_le.c:553
-#: eelf32_tic6x_le.c:553 eelf32_tic6x_linux_be.c:553
-#: eelf32_tic6x_linux_le.c:553 eelf32_x86_64.c:5598 eelf32am33lin.c:416
-#: eelf32b4300.c:661 eelf32bfin.c:434 eelf32bfinfd.c:459 eelf32bmip.c:661
-#: eelf32bmipn32.c:675 eelf32briscv.c:518 eelf32briscv_ilp32.c:518
-#: eelf32briscv_ilp32f.c:518 eelf32bsmip.c:675 eelf32btsmip.c:661
-#: eelf32btsmip_fbsd.c:661 eelf32btsmipn32.c:661 eelf32btsmipn32_fbsd.c:661
-#: eelf32cr16.c:414 eelf32crx.c:301 eelf32ebmip.c:661 eelf32ebmipvxworks.c:696
-#: eelf32elmip.c:661 eelf32elmipvxworks.c:696 eelf32epiphany.c:279
-#: eelf32epiphany_4x4.c:266 eelf32frvfd.c:441 eelf32ip2k.c:279
-#: eelf32l4300.c:661 eelf32lm32.c:279 eelf32lm32fd.c:441 eelf32lmip.c:661
-#: eelf32lppc.c:703 eelf32lppclinux.c:703 eelf32lppcnto.c:703
-#: eelf32lppcsim.c:703 eelf32lr5900.c:520 eelf32lr5900n32.c:519
-#: eelf32lriscv.c:518 eelf32lriscv_ilp32.c:518 eelf32lriscv_ilp32f.c:518
-#: eelf32lsmip.c:661 eelf32ltsmip.c:661 eelf32ltsmip_fbsd.c:661
-#: eelf32ltsmipn32.c:661 eelf32ltsmipn32_fbsd.c:661 eelf32m32c.c:290
-#: eelf32mb_linux.c:446 eelf32mbel_linux.c:446 eelf32mcore.c:285
-#: eelf32mep.c:264 eelf32metag.c:695 eelf32microblaze.c:264
-#: eelf32microblazeel.c:264 eelf32mipswindiss.c:494 eelf32moxie.c:279
-#: eelf32or1k.c:280 eelf32or1k_linux.c:446 eelf32ppc.c:703
-#: eelf32ppc_fbsd.c:703 eelf32ppclinux.c:703 eelf32ppcnto.c:703
-#: eelf32ppcsim.c:703 eelf32ppcvxworks.c:677 eelf32ppcwindiss.c:703
-#: eelf32rl78.c:279 eelf32rx.c:307 eelf32rx_linux.c:292 eelf32tilegx.c:446
-#: eelf32tilegx_be.c:446 eelf32tilepro.c:446 eelf32vax.c:416
-#: eelf32visium.c:264 eelf32xc16x.c:264 eelf32xc16xl.c:264 eelf32xc16xs.c:264
-#: eelf32xstormy16.c:275 eelf32xtensa.c:2367 eelf32z80.c:291 eelf64_aix.c:416
-#: eelf64_ia64.c:473 eelf64_ia64_fbsd.c:473 eelf64_s390.c:516
-#: eelf64_sparc.c:446 eelf64_sparc_fbsd.c:446 eelf64_sparc_sol2.c:578
-#: eelf64alpha.c:539 eelf64alpha_fbsd.c:539 eelf64alpha_nbsd.c:539
-#: eelf64bmip.c:675 eelf64bpf.c:264 eelf64briscv.c:518 eelf64briscv_lp64.c:518
-#: eelf64briscv_lp64f.c:518 eelf64btsmip.c:661 eelf64btsmip_fbsd.c:661
-#: eelf64hppa.c:386 eelf64lppc.c:1153 eelf64lppc_fbsd.c:1153
-#: eelf64lriscv.c:518 eelf64lriscv_lp64.c:518 eelf64lriscv_lp64f.c:518
-#: eelf64ltsmip.c:661 eelf64ltsmip_fbsd.c:661 eelf64mmix.c:527
-#: eelf64ppc.c:1153 eelf64ppc_fbsd.c:1153 eelf64rdos.c:471 eelf64tilegx.c:446
-#: eelf64tilegx_be.c:446 eelf_i386.c:5217 eelf_i386_be.c:483
-#: eelf_i386_fbsd.c:560 eelf_i386_ldso.c:498 eelf_i386_sol2.c:655
-#: eelf_i386_vxworks.c:550 eelf_iamcu.c:523 eelf_k1om.c:5514
-#: eelf_k1om_fbsd.c:523 eelf_l1om.c:5514 eelf_l1om_fbsd.c:523 eelf_s390.c:446
-#: eelf_x86_64.c:5651 eelf_x86_64_cloudabi.c:616 eelf_x86_64_fbsd.c:616
-#: eelf_x86_64_sol2.c:748 eh8300elf.c:279 eh8300elf_linux.c:279
-#: eh8300helf.c:279 eh8300helf_linux.c:279 eh8300hnelf.c:279 eh8300self.c:279
-#: eh8300self_linux.c:279 eh8300snelf.c:279 eh8300sxelf.c:279
-#: eh8300sxelf_linux.c:279 eh8300sxnelf.c:279 ehppa64linux.c:416
-#: ehppaelf.c:547 ehppalinux.c:729 ehppanbsd.c:729 ehppaobsd.c:729
-#: ei386lynx.c:431 ei386moss.c:431 ei386nto.c:431 em32relf.c:279
-#: em32relf_linux.c:441 em32rlelf.c:279 em32rlelf_linux.c:441
-#: em68hc11elf.c:549 em68hc11elfb.c:549 em68hc12elf.c:549 em68hc12elfb.c:549
-#: em68kelf.c:603 em68kelfnbsd.c:603 emn10300.c:416 ends32belf.c:400
-#: ends32belf16m.c:400 ends32belf_linux.c:533 ends32elf.c:400
-#: ends32elf16m.c:400 ends32elf_linux.c:533 enios2elf.c:566 enios2linux.c:707
-#: epruelf.c:285 escore3_elf.c:437 escore7_elf.c:437 eshelf.c:416
-#: eshelf_fd.c:446 eshelf_linux.c:446 eshelf_nbsd.c:416 eshelf_nto.c:416
-#: eshelf_uclinux.c:416 eshelf_vxworks.c:453 eshlelf.c:416 eshlelf_fd.c:446
-#: eshlelf_linux.c:446 eshlelf_nbsd.c:416 eshlelf_nto.c:416
-#: eshlelf_vxworks.c:453 ev850.c:311 ev850_rh850.c:311
+#: eaarch64cloudabi.c:769 eaarch64cloudabib.c:769 eaarch64elf.c:764
+#: eaarch64elf32.c:764 eaarch64elf32b.c:764 eaarch64elfb.c:764
+#: eaarch64fbsd.c:769 eaarch64fbsdb.c:769 eaarch64haiku.c:769
+#: eaarch64linux.c:769 eaarch64linux32.c:769 eaarch64linux32b.c:769
+#: eaarch64linuxb.c:769 earcelf.c:388 earclinux.c:448 earclinux_nps.c:448
+#: earcv2elf.c:266 earcv2elfx.c:266 earmelf.c:998 earmelf_fbsd.c:998
+#: earmelf_fuchsia.c:1003 earmelf_haiku.c:1003 earmelf_linux.c:1003
+#: earmelf_linux_eabi.c:1003 earmelf_linux_fdpiceabi.c:1003
+#: earmelf_nacl.c:1003 earmelf_nbsd.c:998 earmelf_phoenix.c:1003
+#: earmelf_vxworks.c:1034 earmelfb.c:998 earmelfb_fbsd.c:998
+#: earmelfb_fuchsia.c:1003 earmelfb_linux.c:1003 earmelfb_linux_eabi.c:1003
+#: earmelfb_linux_fdpiceabi.c:1003 earmelfb_nacl.c:1003 earmelfb_nbsd.c:998
+#: earmnto.c:973 eavr1.c:489 eavr2.c:489 eavr25.c:489 eavr3.c:489 eavr31.c:489
+#: eavr35.c:489 eavr4.c:489 eavr5.c:489 eavr51.c:489 eavr6.c:489
+#: eavrtiny.c:489 eavrxmega1.c:489 eavrxmega2.c:489 eavrxmega3.c:489
+#: eavrxmega4.c:489 eavrxmega5.c:489 eavrxmega6.c:489 eavrxmega7.c:489
+#: ecriself.c:281 ecrislinux.c:423 ecskyelf.c:525 ecskyelf_linux.c:692
+#: ed10velf.c:266 eelf32_sparc.c:448 eelf32_sparc_sol2.c:580
+#: eelf32_sparc_vxworks.c:485 eelf32_spu.c:999 eelf32_tic6x_be.c:555
+#: eelf32_tic6x_elf_be.c:555 eelf32_tic6x_elf_le.c:555 eelf32_tic6x_le.c:555
+#: eelf32_tic6x_linux_be.c:555 eelf32_tic6x_linux_le.c:555
+#: eelf32_x86_64.c:5631 eelf32am33lin.c:418 eelf32b4300.c:663 eelf32bfin.c:436
+#: eelf32bfinfd.c:461 eelf32bmip.c:663 eelf32bmipn32.c:677 eelf32briscv.c:516
+#: eelf32briscv_ilp32.c:516 eelf32briscv_ilp32f.c:516 eelf32bsmip.c:677
+#: eelf32btsmip.c:663 eelf32btsmip_fbsd.c:663 eelf32btsmipn32.c:663
+#: eelf32btsmipn32_fbsd.c:663 eelf32cr16.c:416 eelf32crx.c:303
+#: eelf32ebmip.c:663 eelf32ebmipvxworks.c:698 eelf32elmip.c:663
+#: eelf32elmipvxworks.c:698 eelf32epiphany.c:281 eelf32epiphany_4x4.c:268
+#: eelf32frvfd.c:443 eelf32ip2k.c:281 eelf32l4300.c:663 eelf32lm32.c:281
+#: eelf32lm32fd.c:443 eelf32lmip.c:663 eelf32loongarch.c:498 eelf32lppc.c:717
+#: eelf32lppclinux.c:717 eelf32lppcnto.c:717 eelf32lppcsim.c:717
+#: eelf32lr5900.c:522 eelf32lr5900n32.c:521 eelf32lriscv.c:516
+#: eelf32lriscv_ilp32.c:516 eelf32lriscv_ilp32f.c:516 eelf32lsmip.c:663
+#: eelf32ltsmip.c:663 eelf32ltsmip_fbsd.c:663 eelf32ltsmipn32.c:663
+#: eelf32ltsmipn32_fbsd.c:663 eelf32m32c.c:292 eelf32mb_linux.c:448
+#: eelf32mbel_linux.c:448 eelf32mcore.c:287 eelf32mep.c:266 eelf32metag.c:697
+#: eelf32microblaze.c:266 eelf32microblazeel.c:266 eelf32mipswindiss.c:496
+#: eelf32moxie.c:281 eelf32or1k.c:282 eelf32or1k_linux.c:448 eelf32ppc.c:717
+#: eelf32ppc_fbsd.c:717 eelf32ppchaiku.c:717 eelf32ppclinux.c:717
+#: eelf32ppcnto.c:717 eelf32ppcsim.c:717 eelf32ppcvxworks.c:691
+#: eelf32ppcwindiss.c:717 eelf32rl78.c:281 eelf32rx.c:309 eelf32rx_linux.c:294
+#: eelf32tilegx.c:448 eelf32tilegx_be.c:448 eelf32tilepro.c:448
+#: eelf32vax.c:418 eelf32visium.c:266 eelf32xc16x.c:266 eelf32xc16xl.c:266
+#: eelf32xc16xs.c:266 eelf32xstormy16.c:277 eelf32xtensa.c:2369
+#: eelf32z80.c:293 eelf64_aix.c:418 eelf64_ia64.c:475 eelf64_ia64_fbsd.c:475
+#: eelf64_s390.c:518 eelf64_sparc.c:448 eelf64_sparc_fbsd.c:448
+#: eelf64_sparc_sol2.c:580 eelf64alpha.c:541 eelf64alpha_fbsd.c:541
+#: eelf64alpha_nbsd.c:541 eelf64bmip.c:677 eelf64bpf.c:266 eelf64briscv.c:516
+#: eelf64briscv_lp64.c:516 eelf64briscv_lp64f.c:516 eelf64btsmip.c:663
+#: eelf64btsmip_fbsd.c:663 eelf64hppa.c:388 eelf64loongarch.c:498
+#: eelf64lppc.c:1171 eelf64lppc_fbsd.c:1171 eelf64lriscv.c:516
+#: eelf64lriscv_lp64.c:516 eelf64lriscv_lp64f.c:516 eelf64ltsmip.c:663
+#: eelf64ltsmip_fbsd.c:663 eelf64mmix.c:529 eelf64ppc.c:1171
+#: eelf64ppc_fbsd.c:1171 eelf64rdos.c:473 eelf64tilegx.c:448
+#: eelf64tilegx_be.c:448 eelf_i386.c:5250 eelf_i386_be.c:489
+#: eelf_i386_fbsd.c:571 eelf_i386_haiku.c:571 eelf_i386_ldso.c:504
+#: eelf_i386_sol2.c:661 eelf_i386_vxworks.c:556 eelf_iamcu.c:529
+#: eelf_k1om.c:5520 eelf_k1om_fbsd.c:529 eelf_l1om.c:5520 eelf_l1om_fbsd.c:529
+#: eelf_mipsel_haiku.c:663 eelf_s390.c:448 eelf_x86_64.c:5684
+#: eelf_x86_64_cloudabi.c:627 eelf_x86_64_fbsd.c:627 eelf_x86_64_haiku.c:627
+#: eelf_x86_64_sol2.c:759 eh8300elf.c:281 eh8300elf_linux.c:281
+#: eh8300helf.c:281 eh8300helf_linux.c:281 eh8300hnelf.c:281 eh8300self.c:281
+#: eh8300self_linux.c:281 eh8300snelf.c:281 eh8300sxelf.c:281
+#: eh8300sxelf_linux.c:281 eh8300sxnelf.c:281 ehppa64linux.c:418
+#: ehppaelf.c:549 ehppalinux.c:731 ehppanbsd.c:731 ehppaobsd.c:731
+#: ei386lynx.c:433 ei386moss.c:433 ei386nto.c:433 em32relf.c:281
+#: em32relf_linux.c:443 em32rlelf.c:281 em32rlelf_linux.c:443
+#: em68hc11elf.c:551 em68hc11elfb.c:551 em68hc12elf.c:551 em68hc12elfb.c:551
+#: em68kelf.c:605 em68kelfnbsd.c:605 emn10300.c:418 ends32belf.c:402
+#: ends32belf16m.c:402 ends32belf_linux.c:535 ends32elf.c:402
+#: ends32elf16m.c:402 ends32elf_linux.c:535 enios2elf.c:568 enios2linux.c:709
+#: epruelf.c:287 escore3_elf.c:439 escore7_elf.c:439 eshelf.c:418
+#: eshelf_fd.c:448 eshelf_linux.c:448 eshelf_nbsd.c:418 eshelf_nto.c:418
+#: eshelf_uclinux.c:418 eshelf_vxworks.c:455 eshlelf.c:418 eshlelf_fd.c:448
+#: eshlelf_linux.c:448 eshlelf_nbsd.c:418 eshlelf_nto.c:418
+#: eshlelf_vxworks.c:455 ev850.c:313 ev850_rh850.c:313
msgid "%P: warning: -z %s ignored\n"
msgstr "%P : avertissement : -z %s ignoré\n"
-#: eaarch64cloudabi.c:801 eaarch64cloudabib.c:801 eaarch64elf.c:796
-#: eaarch64elf32.c:796 eaarch64elf32b.c:796 eaarch64elfb.c:796
-#: eaarch64fbsd.c:801 eaarch64fbsdb.c:801 eaarch64linux.c:801
-#: eaarch64linux32.c:801 eaarch64linux32b.c:801 eaarch64linuxb.c:801
+#: eaarch64cloudabi.c:803 eaarch64cloudabib.c:803 eaarch64elf.c:798
+#: eaarch64elf32.c:798 eaarch64elf32b.c:798 eaarch64elfb.c:798
+#: eaarch64fbsd.c:803 eaarch64fbsdb.c:803 eaarch64haiku.c:803
+#: eaarch64linux.c:803 eaarch64linux32.c:803 eaarch64linux32b.c:803
+#: eaarch64linuxb.c:803
msgid "%P: error: unrecognized option for --fix-cortex-a53-843419: %s\n"
msgstr "%P : erreur : option non reconnue pour --fix-cortex-a53-843419 : %s\n"
-#: eaarch64cloudabi.c:830 eaarch64cloudabib.c:830 eaarch64elf.c:825
-#: eaarch64elf32.c:825 eaarch64elf32b.c:825 eaarch64elfb.c:825
-#: eaarch64fbsd.c:830 eaarch64fbsdb.c:830 eaarch64linux.c:830
-#: eaarch64linux32.c:830 eaarch64linux32b.c:830 eaarch64linuxb.c:830
-#: earmelf.c:1133 earmelf_fbsd.c:1133 earmelf_fuchsia.c:1138
-#: earmelf_linux.c:1138 earmelf_linux_eabi.c:1138
-#: earmelf_linux_fdpiceabi.c:1138 earmelf_nacl.c:1138 earmelf_nbsd.c:1133
-#: earmelf_phoenix.c:1138 earmelf_vxworks.c:1173 earmelfb.c:1133
-#: earmelfb_fbsd.c:1133 earmelfb_fuchsia.c:1138 earmelfb_linux.c:1138
-#: earmelfb_linux_eabi.c:1138 earmelfb_linux_fdpiceabi.c:1138
-#: earmelfb_nacl.c:1138 earmelfb_nbsd.c:1133 earmnto.c:1108
+#: eaarch64cloudabi.c:832 eaarch64cloudabib.c:832 eaarch64elf.c:827
+#: eaarch64elf32.c:827 eaarch64elf32b.c:827 eaarch64elfb.c:827
+#: eaarch64fbsd.c:832 eaarch64fbsdb.c:832 eaarch64haiku.c:832
+#: eaarch64linux.c:832 eaarch64linux32.c:832 eaarch64linux32b.c:832
+#: eaarch64linuxb.c:832 earmelf.c:1135 earmelf_fbsd.c:1135
+#: earmelf_fuchsia.c:1140 earmelf_haiku.c:1140 earmelf_linux.c:1140
+#: earmelf_linux_eabi.c:1140 earmelf_linux_fdpiceabi.c:1140
+#: earmelf_nacl.c:1140 earmelf_nbsd.c:1135 earmelf_phoenix.c:1140
+#: earmelf_vxworks.c:1175 earmelfb.c:1135 earmelfb_fbsd.c:1135
+#: earmelfb_fuchsia.c:1140 earmelfb_linux.c:1140 earmelfb_linux_eabi.c:1140
+#: earmelfb_linux_fdpiceabi.c:1140 earmelfb_nacl.c:1140 earmelfb_nbsd.c:1135
+#: earmnto.c:1110
#, c-format
msgid ""
" --no-enum-size-warning Don't warn about objects with incompatible\n"
@@ -3524,17 +3567,18 @@ msgstr ""
" --no-enum-size-warning Ne pas avertir des objets avec des tailles\n"
" d'enumération non compatibles\n"
-#: eaarch64cloudabi.c:832 eaarch64cloudabib.c:832 eaarch64elf.c:827
-#: eaarch64elf32.c:827 eaarch64elf32b.c:827 eaarch64elfb.c:827
-#: eaarch64fbsd.c:832 eaarch64fbsdb.c:832 eaarch64linux.c:832
-#: eaarch64linux32.c:832 eaarch64linux32b.c:832 eaarch64linuxb.c:832
-#: earmelf.c:1135 earmelf_fbsd.c:1135 earmelf_fuchsia.c:1140
-#: earmelf_linux.c:1140 earmelf_linux_eabi.c:1140
-#: earmelf_linux_fdpiceabi.c:1140 earmelf_nacl.c:1140 earmelf_nbsd.c:1135
-#: earmelf_phoenix.c:1140 earmelf_vxworks.c:1175 earmelfb.c:1135
-#: earmelfb_fbsd.c:1135 earmelfb_fuchsia.c:1140 earmelfb_linux.c:1140
-#: earmelfb_linux_eabi.c:1140 earmelfb_linux_fdpiceabi.c:1140
-#: earmelfb_nacl.c:1140 earmelfb_nbsd.c:1135 earmnto.c:1110
+#: eaarch64cloudabi.c:834 eaarch64cloudabib.c:834 eaarch64elf.c:829
+#: eaarch64elf32.c:829 eaarch64elf32b.c:829 eaarch64elfb.c:829
+#: eaarch64fbsd.c:834 eaarch64fbsdb.c:834 eaarch64haiku.c:834
+#: eaarch64linux.c:834 eaarch64linux32.c:834 eaarch64linux32b.c:834
+#: eaarch64linuxb.c:834 earmelf.c:1137 earmelf_fbsd.c:1137
+#: earmelf_fuchsia.c:1142 earmelf_haiku.c:1142 earmelf_linux.c:1142
+#: earmelf_linux_eabi.c:1142 earmelf_linux_fdpiceabi.c:1142
+#: earmelf_nacl.c:1142 earmelf_nbsd.c:1137 earmelf_phoenix.c:1142
+#: earmelf_vxworks.c:1177 earmelfb.c:1137 earmelfb_fbsd.c:1137
+#: earmelfb_fuchsia.c:1142 earmelfb_linux.c:1142 earmelfb_linux_eabi.c:1142
+#: earmelfb_linux_fdpiceabi.c:1142 earmelfb_nacl.c:1142 earmelfb_nbsd.c:1137
+#: earmnto.c:1112
#, c-format
msgid ""
" --no-wchar-size-warning Don't warn about objects with incompatible\n"
@@ -3543,32 +3587,34 @@ msgstr ""
" --no-wchar-size-warning Ne pas avertir des objets avec des tailles de\n"
" wchar_t incompatibles\n"
-#: eaarch64cloudabi.c:834 eaarch64cloudabib.c:834 eaarch64elf.c:829
-#: eaarch64elf32.c:829 eaarch64elf32b.c:829 eaarch64elfb.c:829
-#: eaarch64fbsd.c:834 eaarch64fbsdb.c:834 eaarch64linux.c:834
-#: eaarch64linux32.c:834 eaarch64linux32b.c:834 eaarch64linuxb.c:834
-#: earmelf.c:1137 earmelf_fbsd.c:1137 earmelf_fuchsia.c:1142
-#: earmelf_linux.c:1142 earmelf_linux_eabi.c:1142
-#: earmelf_linux_fdpiceabi.c:1142 earmelf_nacl.c:1142 earmelf_nbsd.c:1137
-#: earmelf_phoenix.c:1142 earmelf_vxworks.c:1177 earmelfb.c:1137
-#: earmelfb_fbsd.c:1137 earmelfb_fuchsia.c:1142 earmelfb_linux.c:1142
-#: earmelfb_linux_eabi.c:1142 earmelfb_linux_fdpiceabi.c:1142
-#: earmelfb_nacl.c:1142 earmelfb_nbsd.c:1137 earmnto.c:1112
+#: eaarch64cloudabi.c:836 eaarch64cloudabib.c:836 eaarch64elf.c:831
+#: eaarch64elf32.c:831 eaarch64elf32b.c:831 eaarch64elfb.c:831
+#: eaarch64fbsd.c:836 eaarch64fbsdb.c:836 eaarch64haiku.c:836
+#: eaarch64linux.c:836 eaarch64linux32.c:836 eaarch64linux32b.c:836
+#: eaarch64linuxb.c:836 earmelf.c:1139 earmelf_fbsd.c:1139
+#: earmelf_fuchsia.c:1144 earmelf_haiku.c:1144 earmelf_linux.c:1144
+#: earmelf_linux_eabi.c:1144 earmelf_linux_fdpiceabi.c:1144
+#: earmelf_nacl.c:1144 earmelf_nbsd.c:1139 earmelf_phoenix.c:1144
+#: earmelf_vxworks.c:1179 earmelfb.c:1139 earmelfb_fbsd.c:1139
+#: earmelfb_fuchsia.c:1144 earmelfb_linux.c:1144 earmelfb_linux_eabi.c:1144
+#: earmelfb_linux_fdpiceabi.c:1144 earmelfb_nacl.c:1144 earmelfb_nbsd.c:1139
+#: earmnto.c:1114
#, c-format
msgid " --pic-veneer Always generate PIC interworking veneers\n"
msgstr " --pic-veneer Toujours générer le vernissage d'inter opérabilité PIC\n"
-#: eaarch64cloudabi.c:835 eaarch64cloudabib.c:835 eaarch64elf.c:830
-#: eaarch64elf32.c:830 eaarch64elf32b.c:830 eaarch64elfb.c:830
-#: eaarch64fbsd.c:835 eaarch64fbsdb.c:835 eaarch64linux.c:835
-#: eaarch64linux32.c:835 eaarch64linux32b.c:835 eaarch64linuxb.c:835
-#: earmelf.c:1144 earmelf_fbsd.c:1144 earmelf_fuchsia.c:1149
-#: earmelf_linux.c:1149 earmelf_linux_eabi.c:1149
-#: earmelf_linux_fdpiceabi.c:1149 earmelf_nacl.c:1149 earmelf_nbsd.c:1144
-#: earmelf_phoenix.c:1149 earmelf_vxworks.c:1184 earmelfb.c:1144
-#: earmelfb_fbsd.c:1144 earmelfb_fuchsia.c:1149 earmelfb_linux.c:1149
-#: earmelfb_linux_eabi.c:1149 earmelfb_linux_fdpiceabi.c:1149
-#: earmelfb_nacl.c:1149 earmelfb_nbsd.c:1144 earmnto.c:1119
+#: eaarch64cloudabi.c:837 eaarch64cloudabib.c:837 eaarch64elf.c:832
+#: eaarch64elf32.c:832 eaarch64elf32b.c:832 eaarch64elfb.c:832
+#: eaarch64fbsd.c:837 eaarch64fbsdb.c:837 eaarch64haiku.c:837
+#: eaarch64linux.c:837 eaarch64linux32.c:837 eaarch64linux32b.c:837
+#: eaarch64linuxb.c:837 earmelf.c:1146 earmelf_fbsd.c:1146
+#: earmelf_fuchsia.c:1151 earmelf_haiku.c:1151 earmelf_linux.c:1151
+#: earmelf_linux_eabi.c:1151 earmelf_linux_fdpiceabi.c:1151
+#: earmelf_nacl.c:1151 earmelf_nbsd.c:1146 earmelf_phoenix.c:1151
+#: earmelf_vxworks.c:1186 earmelfb.c:1146 earmelfb_fbsd.c:1146
+#: earmelfb_fuchsia.c:1151 earmelfb_linux.c:1151 earmelfb_linux_eabi.c:1151
+#: earmelfb_linux_fdpiceabi.c:1151 earmelfb_nacl.c:1151 earmelfb_nbsd.c:1146
+#: earmnto.c:1121
#, c-format
msgid ""
" --stub-group-size=N Maximum size of a group of input sections that\n"
@@ -3589,18 +3635,20 @@ msgstr ""
" Les valeurs +/-1 indiquent que l'éditeur de liens doit\n"
" choisir des règlages par défaut appropriés.\n"
-#: eaarch64cloudabi.c:844 eaarch64cloudabib.c:844 eaarch64elf.c:839
-#: eaarch64elf32.c:839 eaarch64elf32b.c:839 eaarch64elfb.c:839
-#: eaarch64fbsd.c:844 eaarch64fbsdb.c:844 eaarch64linux.c:844
-#: eaarch64linux32.c:844 eaarch64linux32b.c:844 eaarch64linuxb.c:844
+#: eaarch64cloudabi.c:846 eaarch64cloudabib.c:846 eaarch64elf.c:841
+#: eaarch64elf32.c:841 eaarch64elf32b.c:841 eaarch64elfb.c:841
+#: eaarch64fbsd.c:846 eaarch64fbsdb.c:846 eaarch64haiku.c:846
+#: eaarch64linux.c:846 eaarch64linux32.c:846 eaarch64linux32b.c:846
+#: eaarch64linuxb.c:846
#, c-format
msgid " --fix-cortex-a53-835769 Fix erratum 835769\n"
msgstr " --fix-cortex-a53-835769 Corrige l'erratum 835769\n"
-#: eaarch64cloudabi.c:845 eaarch64cloudabib.c:845 eaarch64elf.c:840
-#: eaarch64elf32.c:840 eaarch64elf32b.c:840 eaarch64elfb.c:840
-#: eaarch64fbsd.c:845 eaarch64fbsdb.c:845 eaarch64linux.c:845
-#: eaarch64linux32.c:845 eaarch64linux32b.c:845 eaarch64linuxb.c:845
+#: eaarch64cloudabi.c:847 eaarch64cloudabib.c:847 eaarch64elf.c:842
+#: eaarch64elf32.c:842 eaarch64elf32b.c:842 eaarch64elfb.c:842
+#: eaarch64fbsd.c:847 eaarch64fbsdb.c:847 eaarch64haiku.c:847
+#: eaarch64linux.c:847 eaarch64linux32.c:847 eaarch64linux32b.c:847
+#: eaarch64linuxb.c:847
#, c-format
msgid ""
" --fix-cortex-a53-843419[=full|adr|adrp] Fix erratum 843419 and optionally specify which workaround to use.\n"
@@ -3625,26 +3673,29 @@ msgstr ""
" en un ADR. Comme tel, la solution utilisera toujours un\n"
" veneer et aura un coût en termes de performance et de taille.\n"
-#: eaarch64cloudabi.c:856 eaarch64cloudabib.c:856 eaarch64elf.c:851
-#: eaarch64elf32.c:851 eaarch64elf32b.c:851 eaarch64elfb.c:851
-#: eaarch64fbsd.c:856 eaarch64fbsdb.c:856 eaarch64linux.c:856
-#: eaarch64linux32.c:856 eaarch64linux32b.c:856 eaarch64linuxb.c:856
+#: eaarch64cloudabi.c:858 eaarch64cloudabib.c:858 eaarch64elf.c:853
+#: eaarch64elf32.c:853 eaarch64elf32b.c:853 eaarch64elfb.c:853
+#: eaarch64fbsd.c:858 eaarch64fbsdb.c:858 eaarch64haiku.c:858
+#: eaarch64linux.c:858 eaarch64linux32.c:858 eaarch64linux32b.c:858
+#: eaarch64linuxb.c:858
#, c-format
msgid " --no-apply-dynamic-relocs Do not apply link-time values for dynamic relocations\n"
msgstr " --no-apply-dynamic-relocs Ne pas appliquer de valeurs à l'édition de liens pour les relocalisations dynamiques\n"
-#: eaarch64cloudabi.c:857 eaarch64cloudabib.c:857 eaarch64elf.c:852
-#: eaarch64elf32.c:852 eaarch64elf32b.c:852 eaarch64elfb.c:852
-#: eaarch64fbsd.c:857 eaarch64fbsdb.c:857 eaarch64linux.c:857
-#: eaarch64linux32.c:857 eaarch64linux32b.c:857 eaarch64linuxb.c:857
+#: eaarch64cloudabi.c:859 eaarch64cloudabib.c:859 eaarch64elf.c:854
+#: eaarch64elf32.c:854 eaarch64elf32b.c:854 eaarch64elfb.c:854
+#: eaarch64fbsd.c:859 eaarch64fbsdb.c:859 eaarch64haiku.c:859
+#: eaarch64linux.c:859 eaarch64linux32.c:859 eaarch64linux32b.c:859
+#: eaarch64linuxb.c:859
#, c-format
msgid " -z force-bti Turn on Branch Target Identification mechanism and generate PLTs with BTI. Generate warnings for missing BTI on inputs\n"
msgstr " -z force-bti Activer le mécanisme d'Identification de Cible de Branche (BTI) et générer des PLT avec des BTI. Produire des avertissements pour des BTI manquantes sur des entrées\n"
-#: eaarch64cloudabi.c:858 eaarch64cloudabib.c:858 eaarch64elf.c:853
-#: eaarch64elf32.c:853 eaarch64elf32b.c:853 eaarch64elfb.c:853
-#: eaarch64fbsd.c:858 eaarch64fbsdb.c:858 eaarch64linux.c:858
-#: eaarch64linux32.c:858 eaarch64linux32b.c:858 eaarch64linuxb.c:858
+#: eaarch64cloudabi.c:860 eaarch64cloudabib.c:860 eaarch64elf.c:855
+#: eaarch64elf32.c:855 eaarch64elf32b.c:855 eaarch64elfb.c:855
+#: eaarch64fbsd.c:860 eaarch64fbsdb.c:860 eaarch64haiku.c:860
+#: eaarch64linux.c:860 eaarch64linux32.c:860 eaarch64linux32b.c:860
+#: eaarch64linuxb.c:860
#, c-format
msgid " -z pac-plt Protect PLTs with Pointer Authentication.\n"
msgstr " -z pac-plt Protége les PLT avec l'Authentification de Pointeur.\n"
@@ -4184,7 +4235,7 @@ msgstr "%F%P : nombre hexadécimal invalide pour un paramètre PE « %s »\n"
msgid "%F%P: strange hex info for PE parameter '%s'\n"
msgstr "%F%P : info étrange en hexadécimal pour un paramètre PE « %s »\n"
-#: earm_wince_pe.c:663 earmpe.c:663 eelf32mcore.c:291 ei386beos.c:266
+#: earm_wince_pe.c:663 earmpe.c:663 eelf32mcore.c:293 ei386beos.c:266
#: ei386pe.c:663 ei386pe_posix.c:663 ei386pep.c:642 emcorepe.c:663 eshpe.c:663
msgid "%F%P: cannot open base file %s\n"
msgstr "%F%P : impossible d'ouvrir le fichier de base %s\n"
@@ -4246,205 +4297,190 @@ msgid "%P: errors encountered processing file %s for interworking\n"
msgstr "%P : erreurs rencontrées lors du traitement du fichier %s pour l'interfonctionnement\n"
#: earm_wince_pe.c:1909 earmelf.c:520 earmelf_fbsd.c:520 earmelf_fuchsia.c:521
-#: earmelf_linux.c:521 earmelf_linux_eabi.c:521 earmelf_linux_fdpiceabi.c:521
-#: earmelf_nacl.c:521 earmelf_nbsd.c:520 earmelf_phoenix.c:521
-#: earmelf_vxworks.c:520 earmelfb.c:520 earmelfb_fbsd.c:520
-#: earmelfb_fuchsia.c:521 earmelfb_linux.c:521 earmelfb_linux_eabi.c:521
-#: earmelfb_linux_fdpiceabi.c:521 earmelfb_nacl.c:521 earmelfb_nbsd.c:520
-#: earmnto.c:520 earmpe.c:1909 ei386pe.c:1909 ei386pe_posix.c:1909
-#: emcorepe.c:1909 eshpe.c:1909
+#: earmelf_haiku.c:521 earmelf_linux.c:521 earmelf_linux_eabi.c:521
+#: earmelf_linux_fdpiceabi.c:521 earmelf_nacl.c:521 earmelf_nbsd.c:520
+#: earmelf_phoenix.c:521 earmelf_vxworks.c:520 earmelfb.c:520
+#: earmelfb_fbsd.c:520 earmelfb_fuchsia.c:521 earmelfb_linux.c:521
+#: earmelfb_linux_eabi.c:521 earmelfb_linux_fdpiceabi.c:521
+#: earmelfb_nacl.c:521 earmelfb_nbsd.c:520 earmnto.c:520 earmpe.c:1909
+#: ei386pe.c:1909 ei386pe_posix.c:1909 emcorepe.c:1909 eshpe.c:1909
msgid "%P: warning: '--thumb-entry %s' is overriding '-e %s'\n"
msgstr "%P : avertissement : « --thumb-entry %s » écrase « -e %s »\n"
#: earm_wince_pe.c:1914 earmelf.c:525 earmelf_fbsd.c:525 earmelf_fuchsia.c:526
-#: earmelf_linux.c:526 earmelf_linux_eabi.c:526 earmelf_linux_fdpiceabi.c:526
-#: earmelf_nacl.c:526 earmelf_nbsd.c:525 earmelf_phoenix.c:526
-#: earmelf_vxworks.c:525 earmelfb.c:525 earmelfb_fbsd.c:525
-#: earmelfb_fuchsia.c:526 earmelfb_linux.c:526 earmelfb_linux_eabi.c:526
-#: earmelfb_linux_fdpiceabi.c:526 earmelfb_nacl.c:526 earmelfb_nbsd.c:525
-#: earmnto.c:525 earmpe.c:1914 ei386pe.c:1914 ei386pe_posix.c:1914
-#: emcorepe.c:1914 eshpe.c:1914
+#: earmelf_haiku.c:526 earmelf_linux.c:526 earmelf_linux_eabi.c:526
+#: earmelf_linux_fdpiceabi.c:526 earmelf_nacl.c:526 earmelf_nbsd.c:525
+#: earmelf_phoenix.c:526 earmelf_vxworks.c:525 earmelfb.c:525
+#: earmelfb_fbsd.c:525 earmelfb_fuchsia.c:526 earmelfb_linux.c:526
+#: earmelfb_linux_eabi.c:526 earmelfb_linux_fdpiceabi.c:526
+#: earmelfb_nacl.c:526 earmelfb_nbsd.c:525 earmnto.c:525 earmpe.c:1914
+#: ei386pe.c:1914 ei386pe_posix.c:1914 emcorepe.c:1914 eshpe.c:1914
msgid "%P: warning: cannot find thumb start symbol %s\n"
msgstr "%P : avertissement : ne peut repérer le symbole thumb de départ %s\n"
-#: earmelf.c:138 earmelf_fbsd.c:138 earmelf_fuchsia.c:139 earmelf_linux.c:139
-#: earmelf_linux_eabi.c:139 earmelf_linux_fdpiceabi.c:139 earmelf_nacl.c:139
-#: earmelf_nbsd.c:138 earmelf_phoenix.c:139 earmelf_vxworks.c:138
-#: earmelfb.c:138 earmelfb_fbsd.c:138 earmelfb_fuchsia.c:139
-#: earmelfb_linux.c:139 earmelfb_linux_eabi.c:139
+#: earmelf.c:138 earmelf_fbsd.c:138 earmelf_fuchsia.c:139 earmelf_haiku.c:139
+#: earmelf_linux.c:139 earmelf_linux_eabi.c:139 earmelf_linux_fdpiceabi.c:139
+#: earmelf_nacl.c:139 earmelf_nbsd.c:138 earmelf_phoenix.c:139
+#: earmelf_vxworks.c:138 earmelfb.c:138 earmelfb_fbsd.c:138
+#: earmelfb_fuchsia.c:139 earmelfb_linux.c:139 earmelfb_linux_eabi.c:139
#: earmelfb_linux_fdpiceabi.c:139 earmelfb_nacl.c:139 earmelfb_nbsd.c:138
#: earmnto.c:138 ei386beos.c:615
#, c-format
msgid "%P: errors encountered processing file %s\n"
msgstr "%P : erreurs rencontrées lors du traitement du fichier %s\n"
-#: earmelf.c:551 earmelf_fbsd.c:551 earmelf_fuchsia.c:552 earmelf_linux.c:552
-#: earmelf_linux_eabi.c:552 earmelf_linux_fdpiceabi.c:552 earmelf_nacl.c:552
-#: earmelf_nbsd.c:551 earmelf_phoenix.c:552 earmelf_vxworks.c:551
-#: earmelfb.c:551 earmelfb_fbsd.c:551 earmelfb_fuchsia.c:552
-#: earmelfb_linux.c:552 earmelfb_linux_eabi.c:552
+#: earmelf.c:551 earmelf_fbsd.c:551 earmelf_fuchsia.c:552 earmelf_haiku.c:552
+#: earmelf_linux.c:552 earmelf_linux_eabi.c:552 earmelf_linux_fdpiceabi.c:552
+#: earmelf_nacl.c:552 earmelf_nbsd.c:551 earmelf_phoenix.c:552
+#: earmelf_vxworks.c:551 earmelfb.c:551 earmelfb_fbsd.c:551
+#: earmelfb_fuchsia.c:552 earmelfb_linux.c:552 earmelfb_linux_eabi.c:552
#: earmelfb_linux_fdpiceabi.c:552 earmelfb_nacl.c:552 earmelfb_nbsd.c:551
#: earmnto.c:551
msgid "%F%P: %s: can't open: %E\n"
msgstr "%F%P : %s : impossible d'ouvrir : %E\n"
-#: earmelf.c:554 earmelf_fbsd.c:554 earmelf_fuchsia.c:555 earmelf_linux.c:555
-#: earmelf_linux_eabi.c:555 earmelf_linux_fdpiceabi.c:555 earmelf_nacl.c:555
-#: earmelf_nbsd.c:554 earmelf_phoenix.c:555 earmelf_vxworks.c:554
-#: earmelfb.c:554 earmelfb_fbsd.c:554 earmelfb_fuchsia.c:555
-#: earmelfb_linux.c:555 earmelfb_linux_eabi.c:555
+#: earmelf.c:554 earmelf_fbsd.c:554 earmelf_fuchsia.c:555 earmelf_haiku.c:555
+#: earmelf_linux.c:555 earmelf_linux_eabi.c:555 earmelf_linux_fdpiceabi.c:555
+#: earmelf_nacl.c:555 earmelf_nbsd.c:554 earmelf_phoenix.c:555
+#: earmelf_vxworks.c:554 earmelfb.c:554 earmelfb_fbsd.c:554
+#: earmelfb_fuchsia.c:555 earmelfb_linux.c:555 earmelfb_linux_eabi.c:555
#: earmelfb_linux_fdpiceabi.c:555 earmelfb_nacl.c:555 earmelfb_nbsd.c:554
#: earmnto.c:554
msgid "%F%P: %s: not a relocatable file: %E\n"
msgstr "%F%P : %s : n'st pas un fichier relocalisable : %E\n"
-#: earmelf.c:1043 earmelf_fbsd.c:1043 earmelf_fuchsia.c:1048
-#: earmelf_linux.c:1048 earmelf_linux_eabi.c:1048
-#: earmelf_linux_fdpiceabi.c:1048 earmelf_nacl.c:1048 earmelf_nbsd.c:1043
-#: earmelf_phoenix.c:1048 earmelf_vxworks.c:1079 earmelfb.c:1043
-#: earmelfb_fbsd.c:1043 earmelfb_fuchsia.c:1048 earmelfb_linux.c:1048
-#: earmelfb_linux_eabi.c:1048 earmelfb_linux_fdpiceabi.c:1048
-#: earmelfb_nacl.c:1048 earmelfb_nbsd.c:1043 earmnto.c:1018
+#: earmelf.c:1045 earmelf_fbsd.c:1045 earmelf_fuchsia.c:1050
+#: earmelf_haiku.c:1050 earmelf_linux.c:1050 earmelf_linux_eabi.c:1050
+#: earmelf_linux_fdpiceabi.c:1050 earmelf_nacl.c:1050 earmelf_nbsd.c:1045
+#: earmelf_phoenix.c:1050 earmelf_vxworks.c:1081 earmelfb.c:1045
+#: earmelfb_fbsd.c:1045 earmelfb_fuchsia.c:1050 earmelfb_linux.c:1050
+#: earmelfb_linux_eabi.c:1050 earmelfb_linux_fdpiceabi.c:1050
+#: earmelfb_nacl.c:1050 earmelfb_nbsd.c:1045 earmnto.c:1020
msgid "%P: unrecognized VFP11 fix type '%s'\n"
msgstr "%P : type VFP11 de réparation '%s' non reconnu\n"
-#: earmelf.c:1056 earmelf_fbsd.c:1056 earmelf_fuchsia.c:1061
-#: earmelf_linux.c:1061 earmelf_linux_eabi.c:1061
-#: earmelf_linux_fdpiceabi.c:1061 earmelf_nacl.c:1061 earmelf_nbsd.c:1056
-#: earmelf_phoenix.c:1061 earmelf_vxworks.c:1092 earmelfb.c:1056
-#: earmelfb_fbsd.c:1056 earmelfb_fuchsia.c:1061 earmelfb_linux.c:1061
-#: earmelfb_linux_eabi.c:1061 earmelfb_linux_fdpiceabi.c:1061
-#: earmelfb_nacl.c:1061 earmelfb_nbsd.c:1056 earmnto.c:1031
+#: earmelf.c:1058 earmelf_fbsd.c:1058 earmelf_fuchsia.c:1063
+#: earmelf_haiku.c:1063 earmelf_linux.c:1063 earmelf_linux_eabi.c:1063
+#: earmelf_linux_fdpiceabi.c:1063 earmelf_nacl.c:1063 earmelf_nbsd.c:1058
+#: earmelf_phoenix.c:1063 earmelf_vxworks.c:1094 earmelfb.c:1058
+#: earmelfb_fbsd.c:1058 earmelfb_fuchsia.c:1063 earmelfb_linux.c:1063
+#: earmelfb_linux_eabi.c:1063 earmelfb_linux_fdpiceabi.c:1063
+#: earmelfb_nacl.c:1063 earmelfb_nbsd.c:1058 earmnto.c:1033
msgid "%P: unrecognized STM32L4XX fix type '%s'\n"
msgstr "%P : type de réparation STM32L4XX '%s' non reconnu\n"
-#: earmelf.c:1123 earmelf_fbsd.c:1123 earmelf_fuchsia.c:1128
-#: earmelf_linux.c:1128 earmelf_linux_eabi.c:1128
-#: earmelf_linux_fdpiceabi.c:1128 earmelf_nacl.c:1128 earmelf_nbsd.c:1123
-#: earmelf_phoenix.c:1128 earmelf_vxworks.c:1163 earmelfb.c:1123
-#: earmelfb_fbsd.c:1123 earmelfb_fuchsia.c:1128 earmelfb_linux.c:1128
-#: earmelfb_linux_eabi.c:1128 earmelfb_linux_fdpiceabi.c:1128
-#: earmelfb_nacl.c:1128 earmelfb_nbsd.c:1123 earmnto.c:1098
-#, c-format
-msgid " --thumb-entry=<sym> Set the entry point to be Thumb symbol <sym>\n"
-msgstr " --thumb-entry=<sym> Initialiser le point d'entrée au symbole Thumb <sym>\n"
-
-#: earmelf.c:1124 earmelf_fbsd.c:1124 earmelf_fuchsia.c:1129
-#: earmelf_linux.c:1129 earmelf_linux_eabi.c:1129
-#: earmelf_linux_fdpiceabi.c:1129 earmelf_nacl.c:1129 earmelf_nbsd.c:1124
-#: earmelf_phoenix.c:1129 earmelf_vxworks.c:1164 earmelfb.c:1124
-#: earmelfb_fbsd.c:1124 earmelfb_fuchsia.c:1129 earmelfb_linux.c:1129
-#: earmelfb_linux_eabi.c:1129 earmelfb_linux_fdpiceabi.c:1129
-#: earmelfb_nacl.c:1129 earmelfb_nbsd.c:1124 earmnto.c:1099
-#, c-format
-msgid " --be8 Output BE8 format image\n"
-msgstr " --be8 Retourne une image au format BE8\n"
-
#: earmelf.c:1125 earmelf_fbsd.c:1125 earmelf_fuchsia.c:1130
-#: earmelf_linux.c:1130 earmelf_linux_eabi.c:1130
+#: earmelf_haiku.c:1130 earmelf_linux.c:1130 earmelf_linux_eabi.c:1130
#: earmelf_linux_fdpiceabi.c:1130 earmelf_nacl.c:1130 earmelf_nbsd.c:1125
#: earmelf_phoenix.c:1130 earmelf_vxworks.c:1165 earmelfb.c:1125
#: earmelfb_fbsd.c:1125 earmelfb_fuchsia.c:1130 earmelfb_linux.c:1130
#: earmelfb_linux_eabi.c:1130 earmelfb_linux_fdpiceabi.c:1130
#: earmelfb_nacl.c:1130 earmelfb_nbsd.c:1125 earmnto.c:1100
#, c-format
-msgid " --target1-rel Interpret R_ARM_TARGET1 as R_ARM_REL32\n"
-msgstr " --target1-rel Interprête R_ARM_TARGET1 comme R_ARM_REL32\n"
+msgid " --thumb-entry=<sym> Set the entry point to be Thumb symbol <sym>\n"
+msgstr " --thumb-entry=<sym> Initialiser le point d'entrée au symbole Thumb <sym>\n"
#: earmelf.c:1126 earmelf_fbsd.c:1126 earmelf_fuchsia.c:1131
-#: earmelf_linux.c:1131 earmelf_linux_eabi.c:1131
+#: earmelf_haiku.c:1131 earmelf_linux.c:1131 earmelf_linux_eabi.c:1131
#: earmelf_linux_fdpiceabi.c:1131 earmelf_nacl.c:1131 earmelf_nbsd.c:1126
#: earmelf_phoenix.c:1131 earmelf_vxworks.c:1166 earmelfb.c:1126
#: earmelfb_fbsd.c:1126 earmelfb_fuchsia.c:1131 earmelfb_linux.c:1131
#: earmelfb_linux_eabi.c:1131 earmelfb_linux_fdpiceabi.c:1131
#: earmelfb_nacl.c:1131 earmelfb_nbsd.c:1126 earmnto.c:1101
#, c-format
-msgid " --target1-abs Interpret R_ARM_TARGET1 as R_ARM_ABS32\n"
-msgstr " --target1-abs Interprête R_ARM_TARGET1 comme R_ARM_ABS32\n"
+msgid " --be8 Output BE8 format image\n"
+msgstr " --be8 Retourne une image au format BE8\n"
#: earmelf.c:1127 earmelf_fbsd.c:1127 earmelf_fuchsia.c:1132
-#: earmelf_linux.c:1132 earmelf_linux_eabi.c:1132
+#: earmelf_haiku.c:1132 earmelf_linux.c:1132 earmelf_linux_eabi.c:1132
#: earmelf_linux_fdpiceabi.c:1132 earmelf_nacl.c:1132 earmelf_nbsd.c:1127
#: earmelf_phoenix.c:1132 earmelf_vxworks.c:1167 earmelfb.c:1127
#: earmelfb_fbsd.c:1127 earmelfb_fuchsia.c:1132 earmelfb_linux.c:1132
#: earmelfb_linux_eabi.c:1132 earmelfb_linux_fdpiceabi.c:1132
#: earmelfb_nacl.c:1132 earmelfb_nbsd.c:1127 earmnto.c:1102
#, c-format
-msgid " --target2=<type> Specify definition of R_ARM_TARGET2\n"
-msgstr " --target2=<type> Specifie la définition de R_ARM_TARGET2\n"
+msgid " --target1-rel Interpret R_ARM_TARGET1 as R_ARM_REL32\n"
+msgstr " --target1-rel Interprête R_ARM_TARGET1 comme R_ARM_REL32\n"
#: earmelf.c:1128 earmelf_fbsd.c:1128 earmelf_fuchsia.c:1133
-#: earmelf_linux.c:1133 earmelf_linux_eabi.c:1133
+#: earmelf_haiku.c:1133 earmelf_linux.c:1133 earmelf_linux_eabi.c:1133
#: earmelf_linux_fdpiceabi.c:1133 earmelf_nacl.c:1133 earmelf_nbsd.c:1128
#: earmelf_phoenix.c:1133 earmelf_vxworks.c:1168 earmelfb.c:1128
#: earmelfb_fbsd.c:1128 earmelfb_fuchsia.c:1133 earmelfb_linux.c:1133
#: earmelfb_linux_eabi.c:1133 earmelfb_linux_fdpiceabi.c:1133
#: earmelfb_nacl.c:1133 earmelfb_nbsd.c:1128 earmnto.c:1103
#, c-format
-msgid " --fix-v4bx Rewrite BX rn as MOV pc, rn for ARMv4\n"
-msgstr " --fix-v4bx Réécrit BX rn en MOV pc, rn pour ARMv4\n"
+msgid " --target1-abs Interpret R_ARM_TARGET1 as R_ARM_ABS32\n"
+msgstr " --target1-abs Interprête R_ARM_TARGET1 comme R_ARM_ABS32\n"
#: earmelf.c:1129 earmelf_fbsd.c:1129 earmelf_fuchsia.c:1134
-#: earmelf_linux.c:1134 earmelf_linux_eabi.c:1134
+#: earmelf_haiku.c:1134 earmelf_linux.c:1134 earmelf_linux_eabi.c:1134
#: earmelf_linux_fdpiceabi.c:1134 earmelf_nacl.c:1134 earmelf_nbsd.c:1129
#: earmelf_phoenix.c:1134 earmelf_vxworks.c:1169 earmelfb.c:1129
#: earmelfb_fbsd.c:1129 earmelfb_fuchsia.c:1134 earmelfb_linux.c:1134
#: earmelfb_linux_eabi.c:1134 earmelfb_linux_fdpiceabi.c:1134
#: earmelfb_nacl.c:1134 earmelfb_nbsd.c:1129 earmnto.c:1104
#, c-format
-msgid " --fix-v4bx-interworking Rewrite BX rn branch to ARMv4 interworking veneer\n"
-msgstr " --fix-v4bx-interworking Réécrire les branches BX rn en vernis ARMv4 interopérable\n"
+msgid " --target2=<type> Specify definition of R_ARM_TARGET2\n"
+msgstr " --target2=<type> Specifie la définition de R_ARM_TARGET2\n"
#: earmelf.c:1130 earmelf_fbsd.c:1130 earmelf_fuchsia.c:1135
-#: earmelf_linux.c:1135 earmelf_linux_eabi.c:1135
+#: earmelf_haiku.c:1135 earmelf_linux.c:1135 earmelf_linux_eabi.c:1135
#: earmelf_linux_fdpiceabi.c:1135 earmelf_nacl.c:1135 earmelf_nbsd.c:1130
#: earmelf_phoenix.c:1135 earmelf_vxworks.c:1170 earmelfb.c:1130
#: earmelfb_fbsd.c:1130 earmelfb_fuchsia.c:1135 earmelfb_linux.c:1135
#: earmelfb_linux_eabi.c:1135 earmelfb_linux_fdpiceabi.c:1135
#: earmelfb_nacl.c:1135 earmelfb_nbsd.c:1130 earmnto.c:1105
#, c-format
-msgid " --use-blx Enable use of BLX instructions\n"
-msgstr " --use-blx Activer l'utilisation d'instructions BLX\n"
+msgid " --fix-v4bx Rewrite BX rn as MOV pc, rn for ARMv4\n"
+msgstr " --fix-v4bx Réécrit BX rn en MOV pc, rn pour ARMv4\n"
#: earmelf.c:1131 earmelf_fbsd.c:1131 earmelf_fuchsia.c:1136
-#: earmelf_linux.c:1136 earmelf_linux_eabi.c:1136
+#: earmelf_haiku.c:1136 earmelf_linux.c:1136 earmelf_linux_eabi.c:1136
#: earmelf_linux_fdpiceabi.c:1136 earmelf_nacl.c:1136 earmelf_nbsd.c:1131
#: earmelf_phoenix.c:1136 earmelf_vxworks.c:1171 earmelfb.c:1131
#: earmelfb_fbsd.c:1131 earmelfb_fuchsia.c:1136 earmelfb_linux.c:1136
#: earmelfb_linux_eabi.c:1136 earmelfb_linux_fdpiceabi.c:1136
#: earmelfb_nacl.c:1136 earmelfb_nbsd.c:1131 earmnto.c:1106
#, c-format
-msgid " --vfp11-denorm-fix Specify how to fix VFP11 denorm erratum\n"
-msgstr " --vfp11-denorm-fix Specifie comment résoudre l'erratum de dénormalisation VFP11\n"
+msgid " --fix-v4bx-interworking Rewrite BX rn branch to ARMv4 interworking veneer\n"
+msgstr " --fix-v4bx-interworking Réécrire les branches BX rn en vernis ARMv4 interopérable\n"
#: earmelf.c:1132 earmelf_fbsd.c:1132 earmelf_fuchsia.c:1137
-#: earmelf_linux.c:1137 earmelf_linux_eabi.c:1137
+#: earmelf_haiku.c:1137 earmelf_linux.c:1137 earmelf_linux_eabi.c:1137
#: earmelf_linux_fdpiceabi.c:1137 earmelf_nacl.c:1137 earmelf_nbsd.c:1132
#: earmelf_phoenix.c:1137 earmelf_vxworks.c:1172 earmelfb.c:1132
#: earmelfb_fbsd.c:1132 earmelfb_fuchsia.c:1137 earmelfb_linux.c:1137
#: earmelfb_linux_eabi.c:1137 earmelfb_linux_fdpiceabi.c:1137
#: earmelfb_nacl.c:1137 earmelfb_nbsd.c:1132 earmnto.c:1107
#, c-format
-msgid " --fix-stm32l4xx-629360 Specify how to fix STM32L4XX 629360 erratum\n"
-msgstr " --fix-stm32l4xx-629360 Spécifie comment corriger l'erratum STM32L4XX 629360\n"
+msgid " --use-blx Enable use of BLX instructions\n"
+msgstr " --use-blx Activer l'utilisation d'instructions BLX\n"
-#: earmelf.c:1138 earmelf_fbsd.c:1138 earmelf_fuchsia.c:1143
-#: earmelf_linux.c:1143 earmelf_linux_eabi.c:1143
-#: earmelf_linux_fdpiceabi.c:1143 earmelf_nacl.c:1143 earmelf_nbsd.c:1138
-#: earmelf_phoenix.c:1143 earmelf_vxworks.c:1178 earmelfb.c:1138
-#: earmelfb_fbsd.c:1138 earmelfb_fuchsia.c:1143 earmelfb_linux.c:1143
-#: earmelfb_linux_eabi.c:1143 earmelfb_linux_fdpiceabi.c:1143
-#: earmelfb_nacl.c:1143 earmelfb_nbsd.c:1138 earmnto.c:1113
+#: earmelf.c:1133 earmelf_fbsd.c:1133 earmelf_fuchsia.c:1138
+#: earmelf_haiku.c:1138 earmelf_linux.c:1138 earmelf_linux_eabi.c:1138
+#: earmelf_linux_fdpiceabi.c:1138 earmelf_nacl.c:1138 earmelf_nbsd.c:1133
+#: earmelf_phoenix.c:1138 earmelf_vxworks.c:1173 earmelfb.c:1133
+#: earmelfb_fbsd.c:1133 earmelfb_fuchsia.c:1138 earmelfb_linux.c:1138
+#: earmelfb_linux_eabi.c:1138 earmelfb_linux_fdpiceabi.c:1138
+#: earmelfb_nacl.c:1138 earmelfb_nbsd.c:1133 earmnto.c:1108
#, c-format
-msgid ""
-" --long-plt Generate long .plt entries\n"
-" to handle large .plt/.got displacements\n"
-msgstr ""
-" --long-plt Générer de longues entrées .plt\n"
-" pour gérer de larges déplacements .plt/.got\n"
+msgid " --vfp11-denorm-fix Specify how to fix VFP11 denorm erratum\n"
+msgstr " --vfp11-denorm-fix Specifie comment résoudre l'erratum de dénormalisation VFP11\n"
+
+#: earmelf.c:1134 earmelf_fbsd.c:1134 earmelf_fuchsia.c:1139
+#: earmelf_haiku.c:1139 earmelf_linux.c:1139 earmelf_linux_eabi.c:1139
+#: earmelf_linux_fdpiceabi.c:1139 earmelf_nacl.c:1139 earmelf_nbsd.c:1134
+#: earmelf_phoenix.c:1139 earmelf_vxworks.c:1174 earmelfb.c:1134
+#: earmelfb_fbsd.c:1134 earmelfb_fuchsia.c:1139 earmelfb_linux.c:1139
+#: earmelfb_linux_eabi.c:1139 earmelfb_linux_fdpiceabi.c:1139
+#: earmelfb_nacl.c:1139 earmelfb_nbsd.c:1134 earmnto.c:1109
+#, c-format
+msgid " --fix-stm32l4xx-629360 Specify how to fix STM32L4XX 629360 erratum\n"
+msgstr " --fix-stm32l4xx-629360 Spécifie comment corriger l'erratum STM32L4XX 629360\n"
#: earmelf.c:1140 earmelf_fbsd.c:1140 earmelf_fuchsia.c:1145
-#: earmelf_linux.c:1145 earmelf_linux_eabi.c:1145
+#: earmelf_haiku.c:1145 earmelf_linux.c:1145 earmelf_linux_eabi.c:1145
#: earmelf_linux_fdpiceabi.c:1145 earmelf_nacl.c:1145 earmelf_nbsd.c:1140
#: earmelf_phoenix.c:1145 earmelf_vxworks.c:1180 earmelfb.c:1140
#: earmelfb_fbsd.c:1140 earmelfb_fuchsia.c:1145 earmelfb_linux.c:1145
@@ -4452,14 +4488,14 @@ msgstr ""
#: earmelfb_nacl.c:1145 earmelfb_nbsd.c:1140 earmnto.c:1115
#, c-format
msgid ""
-" --cmse-implib Make import library to be a secure gateway import\n"
-" library as per ARMv8-M Security Extensions\n"
+" --long-plt Generate long .plt entries\n"
+" to handle large .plt/.got displacements\n"
msgstr ""
-" --cmse-implib Rendre la bibliothèque d'import comme étant une biliothèque passerelle d'import\n"
-" sécurisée selon les extensions de sécurité ARMv8-M\n"
+" --long-plt Générer de longues entrées .plt\n"
+" pour gérer de larges déplacements .plt/.got\n"
#: earmelf.c:1142 earmelf_fbsd.c:1142 earmelf_fuchsia.c:1147
-#: earmelf_linux.c:1147 earmelf_linux_eabi.c:1147
+#: earmelf_haiku.c:1147 earmelf_linux.c:1147 earmelf_linux_eabi.c:1147
#: earmelf_linux_fdpiceabi.c:1147 earmelf_nacl.c:1147 earmelf_nbsd.c:1142
#: earmelf_phoenix.c:1147 earmelf_vxworks.c:1182 earmelfb.c:1142
#: earmelfb_fbsd.c:1142 earmelfb_fuchsia.c:1147 earmelfb_linux.c:1147
@@ -4467,60 +4503,75 @@ msgstr ""
#: earmelfb_nacl.c:1147 earmelfb_nbsd.c:1142 earmnto.c:1117
#, c-format
msgid ""
+" --cmse-implib Make import library to be a secure gateway import\n"
+" library as per ARMv8-M Security Extensions\n"
+msgstr ""
+" --cmse-implib Rendre la bibliothèque d'import comme étant une biliothèque passerelle d'import\n"
+" sécurisée selon les extensions de sécurité ARMv8-M\n"
+
+#: earmelf.c:1144 earmelf_fbsd.c:1144 earmelf_fuchsia.c:1149
+#: earmelf_haiku.c:1149 earmelf_linux.c:1149 earmelf_linux_eabi.c:1149
+#: earmelf_linux_fdpiceabi.c:1149 earmelf_nacl.c:1149 earmelf_nbsd.c:1144
+#: earmelf_phoenix.c:1149 earmelf_vxworks.c:1184 earmelfb.c:1144
+#: earmelfb_fbsd.c:1144 earmelfb_fuchsia.c:1149 earmelfb_linux.c:1149
+#: earmelfb_linux_eabi.c:1149 earmelfb_linux_fdpiceabi.c:1149
+#: earmelfb_nacl.c:1149 earmelfb_nbsd.c:1144 earmnto.c:1119
+#, c-format
+msgid ""
" --in-implib Import library whose symbols address must\n"
" remain stable\n"
msgstr ""
" --in-implib Importer des libraries dont les adresses des symboles doivent\n"
" rester stable\n"
-#: earmelf.c:1153 earmelf_fbsd.c:1153 earmelf_fuchsia.c:1158
-#: earmelf_linux.c:1158 earmelf_linux_eabi.c:1158
-#: earmelf_linux_fdpiceabi.c:1158 earmelf_nacl.c:1158 earmelf_nbsd.c:1153
-#: earmelf_phoenix.c:1158 earmelf_vxworks.c:1193 earmelfb.c:1153
-#: earmelfb_fbsd.c:1153 earmelfb_fuchsia.c:1158 earmelfb_linux.c:1158
-#: earmelfb_linux_eabi.c:1158 earmelfb_linux_fdpiceabi.c:1158
-#: earmelfb_nacl.c:1158 earmelfb_nbsd.c:1153 earmnto.c:1128
+#: earmelf.c:1155 earmelf_fbsd.c:1155 earmelf_fuchsia.c:1160
+#: earmelf_haiku.c:1160 earmelf_linux.c:1160 earmelf_linux_eabi.c:1160
+#: earmelf_linux_fdpiceabi.c:1160 earmelf_nacl.c:1160 earmelf_nbsd.c:1155
+#: earmelf_phoenix.c:1160 earmelf_vxworks.c:1195 earmelfb.c:1155
+#: earmelfb_fbsd.c:1155 earmelfb_fuchsia.c:1160 earmelfb_linux.c:1160
+#: earmelfb_linux_eabi.c:1160 earmelfb_linux_fdpiceabi.c:1160
+#: earmelfb_nacl.c:1160 earmelfb_nbsd.c:1155 earmnto.c:1130
#, c-format
msgid " --[no-]fix-cortex-a8 Disable/enable Cortex-A8 Thumb-2 branch erratum fix\n"
msgstr " --[no-]fix-cortex-a8 Désactiver/activer la résolution de l'erratum de branches Cortex-A8 Thumb-2\n"
-#: earmelf.c:1154 earmelf_fbsd.c:1154 earmelf_fuchsia.c:1159
-#: earmelf_linux.c:1159 earmelf_linux_eabi.c:1159
-#: earmelf_linux_fdpiceabi.c:1159 earmelf_nacl.c:1159 earmelf_nbsd.c:1154
-#: earmelf_phoenix.c:1159 earmelf_vxworks.c:1194 earmelfb.c:1154
-#: earmelfb_fbsd.c:1154 earmelfb_fuchsia.c:1159 earmelfb_linux.c:1159
-#: earmelfb_linux_eabi.c:1159 earmelfb_linux_fdpiceabi.c:1159
-#: earmelfb_nacl.c:1159 earmelfb_nbsd.c:1154 earmnto.c:1129
+#: earmelf.c:1156 earmelf_fbsd.c:1156 earmelf_fuchsia.c:1161
+#: earmelf_haiku.c:1161 earmelf_linux.c:1161 earmelf_linux_eabi.c:1161
+#: earmelf_linux_fdpiceabi.c:1161 earmelf_nacl.c:1161 earmelf_nbsd.c:1156
+#: earmelf_phoenix.c:1161 earmelf_vxworks.c:1196 earmelfb.c:1156
+#: earmelfb_fbsd.c:1156 earmelfb_fuchsia.c:1161 earmelfb_linux.c:1161
+#: earmelfb_linux_eabi.c:1161 earmelfb_linux_fdpiceabi.c:1161
+#: earmelfb_nacl.c:1161 earmelfb_nbsd.c:1156 earmnto.c:1131
#, c-format
msgid " --no-merge-exidx-entries Disable merging exidx entries\n"
msgstr " --no-merge-exidx-entries Désactive la fusions d'entrées exidx\n"
-#: earmelf.c:1155 earmelf_fbsd.c:1155 earmelf_fuchsia.c:1160
-#: earmelf_linux.c:1160 earmelf_linux_eabi.c:1160
-#: earmelf_linux_fdpiceabi.c:1160 earmelf_nacl.c:1160 earmelf_nbsd.c:1155
-#: earmelf_phoenix.c:1160 earmelf_vxworks.c:1195 earmelfb.c:1155
-#: earmelfb_fbsd.c:1155 earmelfb_fuchsia.c:1160 earmelfb_linux.c:1160
-#: earmelfb_linux_eabi.c:1160 earmelfb_linux_fdpiceabi.c:1160
-#: earmelfb_nacl.c:1160 earmelfb_nbsd.c:1155 earmnto.c:1130
+#: earmelf.c:1157 earmelf_fbsd.c:1157 earmelf_fuchsia.c:1162
+#: earmelf_haiku.c:1162 earmelf_linux.c:1162 earmelf_linux_eabi.c:1162
+#: earmelf_linux_fdpiceabi.c:1162 earmelf_nacl.c:1162 earmelf_nbsd.c:1157
+#: earmelf_phoenix.c:1162 earmelf_vxworks.c:1197 earmelfb.c:1157
+#: earmelfb_fbsd.c:1157 earmelfb_fuchsia.c:1162 earmelfb_linux.c:1162
+#: earmelfb_linux_eabi.c:1162 earmelfb_linux_fdpiceabi.c:1162
+#: earmelfb_nacl.c:1162 earmelfb_nbsd.c:1157 earmnto.c:1132
#, c-format
msgid " --[no-]fix-arm1176 Disable/enable ARM1176 BLX immediate erratum fix\n"
msgstr " --[no-]fix-arm1176 Désactive/active la résolution immédiate de l'erratum ARM1176 BLX\n"
#: earmelf_vxworks.c:600 eelf32_sparc_vxworks.c:71 eelf32ebmipvxworks.c:267
-#: eelf32elmipvxworks.c:267 eelf32ppcvxworks.c:224 eelf_i386_vxworks.c:95
+#: eelf32elmipvxworks.c:267 eelf32ppcvxworks.c:236 eelf_i386_vxworks.c:95
#: eshelf_vxworks.c:71 eshlelf_vxworks.c:71
msgid "%X%P: cannot create dynamic sections %E\n"
msgstr "%X%P : impossible de créer des sections dynamiques %E\n"
#: earmelf_vxworks.c:606 eelf32_sparc_vxworks.c:77 eelf32ebmipvxworks.c:273
-#: eelf32elmipvxworks.c:273 eelf32ppcvxworks.c:230 eelf_i386_vxworks.c:101
+#: eelf32elmipvxworks.c:273 eelf32ppcvxworks.c:242 eelf_i386_vxworks.c:101
#: eshelf_vxworks.c:77 eshlelf_vxworks.c:77
msgid "%X%P: dynamic sections created in non-dynamic link\n"
msgstr "%X%P : sections dynamiques créés dans un lien non dynamique\n"
-#: earmelf_vxworks.c:1197 eelf32_sparc_vxworks.c:500 eelf32ebmipvxworks.c:758
-#: eelf32elmipvxworks.c:758 eelf32ppcvxworks.c:811 eelf_i386_vxworks.c:577
-#: eshelf_vxworks.c:470 eshlelf_vxworks.c:470
+#: earmelf_vxworks.c:1199 eelf32_sparc_vxworks.c:502 eelf32ebmipvxworks.c:760
+#: eelf32elmipvxworks.c:760 eelf32ppcvxworks.c:825 eelf_i386_vxworks.c:587
+#: eshelf_vxworks.c:472 eshlelf_vxworks.c:472
#, c-format
msgid " --force-dynamic Always create dynamic sections\n"
msgstr " --force-dynamic Toujours créer des sections dynamiques\n"
@@ -4539,10 +4590,10 @@ msgstr "%X%P : impossible d'installer la liste des sections d'entrée : %E\n"
msgid "%X%P: can not create stub BFD: %E\n"
msgstr "%X%P : impossible de créer l'espace d'amorçage BFD : %E\n"
-#: eavr1.c:536 eavr2.c:536 eavr25.c:536 eavr3.c:536 eavr31.c:536 eavr35.c:536
-#: eavr4.c:536 eavr5.c:536 eavr51.c:536 eavr6.c:536 eavrtiny.c:536
-#: eavrxmega1.c:536 eavrxmega2.c:536 eavrxmega3.c:536 eavrxmega4.c:536
-#: eavrxmega5.c:536 eavrxmega6.c:536 eavrxmega7.c:536
+#: eavr1.c:538 eavr2.c:538 eavr25.c:538 eavr3.c:538 eavr31.c:538 eavr35.c:538
+#: eavr4.c:538 eavr5.c:538 eavr51.c:538 eavr6.c:538 eavrtiny.c:538
+#: eavrxmega1.c:538 eavrxmega2.c:538 eavrxmega3.c:538 eavrxmega4.c:538
+#: eavrxmega5.c:538 eavrxmega6.c:538 eavrxmega7.c:538
#, c-format
msgid ""
" --pmem-wrap-around=<val> Make the linker relaxation machine assume that a\n"
@@ -4553,10 +4604,10 @@ msgstr ""
" bouclage du compteur du programme survienne à l'adresse\n"
" <val>. Valeurs supportées: 8k, 16k, 32k et 64k.\n"
-#: eavr1.c:542 eavr2.c:542 eavr25.c:542 eavr3.c:542 eavr31.c:542 eavr35.c:542
-#: eavr4.c:542 eavr5.c:542 eavr51.c:542 eavr6.c:542 eavrtiny.c:542
-#: eavrxmega1.c:542 eavrxmega2.c:542 eavrxmega3.c:542 eavrxmega4.c:542
-#: eavrxmega5.c:542 eavrxmega6.c:542 eavrxmega7.c:542
+#: eavr1.c:544 eavr2.c:544 eavr25.c:544 eavr3.c:544 eavr31.c:544 eavr35.c:544
+#: eavr4.c:544 eavr5.c:544 eavr51.c:544 eavr6.c:544 eavrtiny.c:544
+#: eavrxmega1.c:544 eavrxmega2.c:544 eavrxmega3.c:544 eavrxmega4.c:544
+#: eavrxmega5.c:544 eavrxmega6.c:544 eavrxmega7.c:544
#, c-format
msgid ""
" --no-call-ret-replacement The relaxation machine normally will\n"
@@ -4569,10 +4620,10 @@ msgstr ""
" consécutives par une seule instruction de saut (jump).\n"
" Cette option désactive cette optimisation.\n"
-#: eavr1.c:550 eavr2.c:550 eavr25.c:550 eavr3.c:550 eavr31.c:550 eavr35.c:550
-#: eavr4.c:550 eavr5.c:550 eavr51.c:550 eavr6.c:550 eavrtiny.c:550
-#: eavrxmega1.c:550 eavrxmega2.c:550 eavrxmega3.c:550 eavrxmega4.c:550
-#: eavrxmega5.c:550 eavrxmega6.c:550 eavrxmega7.c:550
+#: eavr1.c:552 eavr2.c:552 eavr25.c:552 eavr3.c:552 eavr31.c:552 eavr35.c:552
+#: eavr4.c:552 eavr5.c:552 eavr51.c:552 eavr6.c:552 eavrtiny.c:552
+#: eavrxmega1.c:552 eavrxmega2.c:552 eavrxmega3.c:552 eavrxmega4.c:552
+#: eavrxmega5.c:552 eavrxmega6.c:552 eavrxmega7.c:552
#, c-format
msgid ""
" --no-stubs If the linker detects to attempt to access\n"
@@ -4585,19 +4636,19 @@ msgstr ""
" est limitée à 128k maximum, il insère un espace d'amorçage\n"
" de saut. Vous pouvez désactiver cela avec cette option.\n"
-#: eavr1.c:558 eavr2.c:558 eavr25.c:558 eavr3.c:558 eavr31.c:558 eavr35.c:558
-#: eavr4.c:558 eavr5.c:558 eavr51.c:558 eavr6.c:558 eavrtiny.c:558
-#: eavrxmega1.c:558 eavrxmega2.c:558 eavrxmega3.c:558 eavrxmega4.c:558
-#: eavrxmega5.c:558 eavrxmega6.c:558 eavrxmega7.c:558
-#, c-format
-msgid " --debug-stubs Used for debugging avr-ld.\n"
-msgstr " --debug-stubs Utilisé pour déboguer avr-ld.\n"
-
#: eavr1.c:560 eavr2.c:560 eavr25.c:560 eavr3.c:560 eavr31.c:560 eavr35.c:560
#: eavr4.c:560 eavr5.c:560 eavr51.c:560 eavr6.c:560 eavrtiny.c:560
#: eavrxmega1.c:560 eavrxmega2.c:560 eavrxmega3.c:560 eavrxmega4.c:560
#: eavrxmega5.c:560 eavrxmega6.c:560 eavrxmega7.c:560
#, c-format
+msgid " --debug-stubs Used for debugging avr-ld.\n"
+msgstr " --debug-stubs Utilisé pour déboguer avr-ld.\n"
+
+#: eavr1.c:562 eavr2.c:562 eavr25.c:562 eavr3.c:562 eavr31.c:562 eavr35.c:562
+#: eavr4.c:562 eavr5.c:562 eavr51.c:562 eavr6.c:562 eavrtiny.c:562
+#: eavrxmega1.c:562 eavrxmega2.c:562 eavrxmega3.c:562 eavrxmega4.c:562
+#: eavrxmega5.c:562 eavrxmega6.c:562 eavrxmega7.c:562
+#, c-format
msgid " --debug-relax Used for debugging avr-ld.\n"
msgstr " --debug-relax Utilisé pour déboguer avr-ld.\n"
@@ -4609,7 +4660,7 @@ msgstr "%X%P : impossible de récupérer la taille de la section d'amorçage :
msgid "%X%P: cannot build stubs: %E\n"
msgstr "%X%P : impossible de construire les secteurs d'amorçage : %E\n"
-#: ecskyelf.c:553 ecskyelf_linux.c:720
+#: ecskyelf.c:555 ecskyelf_linux.c:722
#, c-format
msgid ""
" --[no-]branch-stub Disable/enable use of stubs to expand branch\n"
@@ -4618,7 +4669,7 @@ msgstr ""
" --[no-]branch-stub Désactiver/activer l'utilisation des espaces d'amorçage pour développer\n"
" les instructions de branchement qui ne peuvent pas atteindre la cible.\n"
-#: ecskyelf.c:557 ecskyelf_linux.c:724
+#: ecskyelf.c:559 ecskyelf_linux.c:726
#, c-format
msgid ""
" --stub-group-size=N Maximum size of a group of input sections\n"
@@ -4674,79 +4725,84 @@ msgstr "%X%P : %pA dépasse la limite de stockage local\n"
msgid "%P: --auto-overlay ignored with zero local store range\n"
msgstr "%P : --auto-overlay ignoré avec une limite de stockage local nul\n"
-#: eelf32_spu.c:894
+#: eelf32_spu.c:675
+#, c-format
+msgid "running: %s \"%s\" \"%s\" \"%s\" \"%s\"\n"
+msgstr "exécute : %s \"%s\" \"%s\" \"%s\" \"%s\"\n"
+
+#: eelf32_spu.c:1032
msgid "%F%P: invalid --local-store address range `%s'\n"
msgstr "%F%P : plage d'adresses --local-store « %s » invalide\n"
-#: eelf32_spu.c:930
+#: eelf32_spu.c:1068
msgid "%F%P: invalid --num-lines/--num-regions `%u'\n"
msgstr "%F%P : --num-lines/--num-regions « %u » invalide\n"
-#: eelf32_spu.c:935
+#: eelf32_spu.c:1073
msgid "%F%P: invalid --line-size/--region-size `%u'\n"
msgstr "%F%P : --line-size/--region-size « %u » invalide\n"
-#: eelf32_spu.c:956
+#: eelf32_spu.c:1094
msgid "%F%P: invalid --num-lines/--num-regions `%s'\n"
msgstr "%F%P : --num-lines/--num-regions « %s » invalide\n"
-#: eelf32_spu.c:969
+#: eelf32_spu.c:1107
msgid "%F%P: invalid --line-size/--region-size `%s'\n"
msgstr "%F%P : --line-size/--region-size « %s » invalide\n"
-#: eelf32_spu.c:978
+#: eelf32_spu.c:1116
msgid "%F%P: invalid --fixed-space value `%s'\n"
msgstr "%F%P : valeur de --fixed-space « %s » invalide\n"
-#: eelf32_spu.c:987
+#: eelf32_spu.c:1125
msgid "%F%P: invalid --reserved-space value `%s'\n"
msgstr "%F%P : valeur de --reserved-space « %s » invalide\n"
-#: eelf32_spu.c:996
+#: eelf32_spu.c:1134
msgid "%F%P: invalid --extra-stack-space value `%s'\n"
msgstr "%F%P : valeur de --extra-stack-space « %s » invalide\n"
-#: eelf32_spu.c:1033
+#: eelf32_spu.c:1171
#, c-format
msgid " --plugin Make SPU plugin\n"
msgstr " --plugin Créer un greffon SPU\n"
-#: eelf32_spu.c:1035
+#: eelf32_spu.c:1173
#, c-format
msgid " --no-overlays No overlay handling\n"
msgstr " --no-overlays Pas de gestion des recouvrements\n"
-#: eelf32_spu.c:1037
+#: eelf32_spu.c:1175
#, c-format
msgid " --compact-stubs Use smaller and possibly slower call stubs\n"
msgstr " --compact-stubs utiliser des espaces d'amorçage d'appel plus petits mais possiblement plus lents\n"
-#: eelf32_spu.c:1039
+#: eelf32_spu.c:1177
#, c-format
msgid " --emit-stub-syms Add symbols on overlay call stubs\n"
msgstr " --emit-stub-syms Ajouter les symboles sur les espace d'amorçage d'appel de recouvrement\n"
-#: eelf32_spu.c:1041
+#: eelf32_spu.c:1179
#, c-format
msgid " --extra-overlay-stubs Add stubs on all calls out of overlay regions\n"
msgstr " --extra-overlay-stubs Ajouter des espaces d'amorçage pour tous les appels en dehors des régions de recouvrement\n"
-#: eelf32_spu.c:1043
+#: eelf32_spu.c:1181
#, c-format
msgid " --local-store=lo:hi Valid address range\n"
msgstr " --local-store=bas:haut Plage d'adresses valides\n"
-#: eelf32_spu.c:1045
+#: eelf32_spu.c:1183
#, c-format
msgid " --stack-analysis Estimate maximum stack requirement\n"
msgstr " --stack-analysis Estimer le besoin maximal de la pile\n"
-#: eelf32_spu.c:1047
+#: eelf32_spu.c:1185
#, c-format
msgid " --emit-stack-syms Add sym giving stack needed for each func\n"
msgstr " --emit-stack-syms Ajouter un sym donnant la pile nécessaire à chaque fonction\n"
-#: eelf32_spu.c:1049
+#: eelf32_spu.c:1187
#, c-format
msgid ""
" --auto-overlay [=filename] Create an overlay script in filename if\n"
@@ -4755,12 +4811,12 @@ msgstr ""
" --auto-overlay [=fichier] Créer un script de recouvrement dans le fichier si\n"
" l'exécutable ne rentre pas dans le stockage local\n"
-#: eelf32_spu.c:1052
+#: eelf32_spu.c:1190
#, c-format
msgid " --auto-relink Rerun linker using auto-overlay script\n"
msgstr " --auto-relink Relancer l'éditeur de liens en utilisant un script de recouvrements automatiques\n"
-#: eelf32_spu.c:1054
+#: eelf32_spu.c:1192
#, c-format
msgid ""
" --overlay-rodata Place read-only data with associated function\n"
@@ -4769,22 +4825,22 @@ msgstr ""
" --overlay-rodata Placer les données en lecture seule avec le code des fonctions\n"
" associées dans des recouvrements\n"
-#: eelf32_spu.c:1057
+#: eelf32_spu.c:1195
#, c-format
msgid " --num-regions Number of overlay buffers (default 1)\n"
msgstr " --num-regions Nombre de tampons de recouvrements (défaut 1)\n"
-#: eelf32_spu.c:1059
+#: eelf32_spu.c:1197
#, c-format
msgid " --region-size Size of overlay buffers (default 0, auto)\n"
msgstr " --region-size Taille des tampons de recouvrements (défaut 0, auto)\n"
-#: eelf32_spu.c:1061
+#: eelf32_spu.c:1199
#, c-format
msgid " --fixed-space=bytes Local store for non-overlay code and data\n"
msgstr " --fixed-space=octets Stockage local pour du code et des données sans recouvrement\n"
-#: eelf32_spu.c:1063
+#: eelf32_spu.c:1201
#, c-format
msgid ""
" --reserved-space=bytes Local store for stack and heap. If not specified\n"
@@ -4793,7 +4849,7 @@ msgstr ""
" --reserved-space=octets Stockage local pour la pile et le tas. Si non spécifié\n"
" ld estimera la taille de la pile et ne supposera aucun tas\n"
-#: eelf32_spu.c:1066
+#: eelf32_spu.c:1204
#, c-format
msgid ""
" --extra-stack-space=bytes Space for negative sp access (default 2000) if\n"
@@ -4802,27 +4858,27 @@ msgstr ""
" --extra-stack-space=octets Espace pour les accès sp négatifs (défaut 2000) si\n"
" --reserved-space n'est pas donné\n"
-#: eelf32_spu.c:1069
+#: eelf32_spu.c:1207
#, c-format
msgid " --soft-icache Generate software icache overlays\n"
msgstr " --soft-icache Générer des recouvrements icache logiciels\n"
-#: eelf32_spu.c:1071
+#: eelf32_spu.c:1209
#, c-format
msgid " --num-lines Number of soft-icache lines (default 32)\n"
msgstr " --num-lines Nombre de lignes de icache logiciel (défaut 32)\n"
-#: eelf32_spu.c:1073
+#: eelf32_spu.c:1211
#, c-format
msgid " --line-size Size of soft-icache lines (default 1k)\n"
msgstr " --line-size Taille des lignes icache logiciel (défaut 1k)\n"
-#: eelf32_spu.c:1075
+#: eelf32_spu.c:1213
#, c-format
msgid " --non-ia-text Allow non-icache code in icache lines\n"
msgstr " --non-ia-text Autorise du code non icache dans des lignes icache\n"
-#: eelf32_spu.c:1077
+#: eelf32_spu.c:1215
#, c-format
msgid " --lrlive-analysis Scan function prologue for lr liveness\n"
msgstr " --lrlive-analysis Scanner le prologue des functions pour une exécution lr\n"
@@ -4832,106 +4888,126 @@ msgstr " --lrlive-analysis Scanner le prologue des functions pour une
msgid "%F%P: invalid --dsbt-index %d, outside DSBT size\n"
msgstr "%F%P : invalide --dsbt-index %d, en dehors de la taille DSBT\n"
-#: eelf32_tic6x_be.c:563 eelf32_tic6x_elf_be.c:563 eelf32_tic6x_elf_le.c:563
-#: eelf32_tic6x_le.c:563 eelf32_tic6x_linux_be.c:563
-#: eelf32_tic6x_linux_le.c:563
+#: eelf32_tic6x_be.c:565 eelf32_tic6x_elf_be.c:565 eelf32_tic6x_elf_le.c:565
+#: eelf32_tic6x_le.c:565 eelf32_tic6x_linux_be.c:565
+#: eelf32_tic6x_linux_le.c:565
msgid "%F%P: invalid --dsbt-index %s\n"
msgstr "%F%P : --dsbt-index %s invalide\n"
-#: eelf32_tic6x_be.c:573 eelf32_tic6x_elf_be.c:573 eelf32_tic6x_elf_le.c:573
-#: eelf32_tic6x_le.c:573 eelf32_tic6x_linux_be.c:573
-#: eelf32_tic6x_linux_le.c:573
+#: eelf32_tic6x_be.c:575 eelf32_tic6x_elf_be.c:575 eelf32_tic6x_elf_le.c:575
+#: eelf32_tic6x_le.c:575 eelf32_tic6x_linux_be.c:575
+#: eelf32_tic6x_linux_le.c:575
msgid "%F%P: invalid --dsbt-size %s\n"
msgstr "%F%P : --dsbt-size %s invalide\n"
-#: eelf32_tic6x_be.c:589 eelf32_tic6x_elf_be.c:589 eelf32_tic6x_elf_le.c:589
-#: eelf32_tic6x_le.c:589 eelf32_tic6x_linux_be.c:589
-#: eelf32_tic6x_linux_le.c:589
+#: eelf32_tic6x_be.c:591 eelf32_tic6x_elf_be.c:591 eelf32_tic6x_elf_le.c:591
+#: eelf32_tic6x_le.c:591 eelf32_tic6x_linux_be.c:591
+#: eelf32_tic6x_linux_le.c:591
#, c-format
msgid " --dsbt-index <index> Use this as the DSBT index for the output object\n"
msgstr " --dsbt-index <index> Utilise cela comme index DSBT pour l'object en sortie\n"
-#: eelf32_tic6x_be.c:590 eelf32_tic6x_elf_be.c:590 eelf32_tic6x_elf_le.c:590
-#: eelf32_tic6x_le.c:590 eelf32_tic6x_linux_be.c:590
-#: eelf32_tic6x_linux_le.c:590
+#: eelf32_tic6x_be.c:592 eelf32_tic6x_elf_be.c:592 eelf32_tic6x_elf_le.c:592
+#: eelf32_tic6x_le.c:592 eelf32_tic6x_linux_be.c:592
+#: eelf32_tic6x_linux_le.c:592
#, c-format
msgid " --dsbt-size <index> Use this as the number of entries in the DSBT table\n"
msgstr " --dsbt-size <index> Utilise cela comme le nombre d'entrées dans la table DSBT\n"
-#: eelf32_tic6x_be.c:591 eelf32_tic6x_elf_be.c:591 eelf32_tic6x_elf_le.c:591
-#: eelf32_tic6x_le.c:591 eelf32_tic6x_linux_be.c:591
-#: eelf32_tic6x_linux_le.c:591
+#: eelf32_tic6x_be.c:593 eelf32_tic6x_elf_be.c:593 eelf32_tic6x_elf_le.c:593
+#: eelf32_tic6x_le.c:593 eelf32_tic6x_linux_be.c:593
+#: eelf32_tic6x_linux_le.c:593
#, c-format
msgid " --no-merge-exidx-entries\n"
msgstr " --no-merge-exidx-entries\n"
-#: eelf32_tic6x_be.c:592 eelf32_tic6x_elf_be.c:592 eelf32_tic6x_elf_le.c:592
-#: eelf32_tic6x_le.c:592 eelf32_tic6x_linux_be.c:592
-#: eelf32_tic6x_linux_le.c:592
+#: eelf32_tic6x_be.c:594 eelf32_tic6x_elf_be.c:594 eelf32_tic6x_elf_le.c:594
+#: eelf32_tic6x_le.c:594 eelf32_tic6x_linux_be.c:594
+#: eelf32_tic6x_linux_le.c:594
#, c-format
msgid " Disable merging exidx entries\n"
msgstr " Désactive la fusion d'entrées exidx\n"
-#: eelf32_x86_64.c:5543 eelf_i386.c:5162 eelf_i386_be.c:465
-#: eelf_i386_fbsd.c:505 eelf_i386_ldso.c:480 eelf_i386_sol2.c:637
-#: eelf_i386_vxworks.c:532 eelf_iamcu.c:505 eelf_k1om.c:5496
-#: eelf_k1om_fbsd.c:505 eelf_l1om.c:5496 eelf_l1om_fbsd.c:505
-#: eelf_x86_64.c:5543 eelf_x86_64_cloudabi.c:508 eelf_x86_64_fbsd.c:508
-#: eelf_x86_64_sol2.c:640
+#: eelf32_x86_64.c:5571 eelf_i386.c:5190 eelf_i386_be.c:471
+#: eelf_i386_fbsd.c:511 eelf_i386_haiku.c:511 eelf_i386_ldso.c:486
+#: eelf_i386_sol2.c:643 eelf_i386_vxworks.c:538 eelf_iamcu.c:511
+#: eelf_k1om.c:5502 eelf_k1om_fbsd.c:511 eelf_l1om.c:5502 eelf_l1om_fbsd.c:511
+#: eelf_x86_64.c:5571 eelf_x86_64_cloudabi.c:514 eelf_x86_64_fbsd.c:514
+#: eelf_x86_64_haiku.c:514 eelf_x86_64_sol2.c:646
msgid "%F%P: invalid number for -z call-nop=prefix-: %s\n"
msgstr "%F%P : nombre invalide pour -z call-nop=prefix- : %s\n"
-#: eelf32_x86_64.c:5552 eelf_i386.c:5171 eelf_i386_be.c:474
-#: eelf_i386_fbsd.c:514 eelf_i386_ldso.c:489 eelf_i386_sol2.c:646
-#: eelf_i386_vxworks.c:541 eelf_iamcu.c:514 eelf_k1om.c:5505
-#: eelf_k1om_fbsd.c:514 eelf_l1om.c:5505 eelf_l1om_fbsd.c:514
-#: eelf_x86_64.c:5552 eelf_x86_64_cloudabi.c:517 eelf_x86_64_fbsd.c:517
-#: eelf_x86_64_sol2.c:649
+#: eelf32_x86_64.c:5580 eelf_i386.c:5199 eelf_i386_be.c:480
+#: eelf_i386_fbsd.c:520 eelf_i386_haiku.c:520 eelf_i386_ldso.c:495
+#: eelf_i386_sol2.c:652 eelf_i386_vxworks.c:547 eelf_iamcu.c:520
+#: eelf_k1om.c:5511 eelf_k1om_fbsd.c:520 eelf_l1om.c:5511 eelf_l1om_fbsd.c:520
+#: eelf_x86_64.c:5580 eelf_x86_64_cloudabi.c:523 eelf_x86_64_fbsd.c:523
+#: eelf_x86_64_haiku.c:523 eelf_x86_64_sol2.c:655
msgid "%F%P: invalid number for -z call-nop=suffix-: %s\n"
msgstr "%F%P : nombre invalide pour -z call-nop=suffix- : %s\n"
-#: eelf32_x86_64.c:5557 eelf_i386.c:5176 eelf_i386_be.c:479
-#: eelf_i386_fbsd.c:519 eelf_i386_ldso.c:494 eelf_i386_sol2.c:651
-#: eelf_i386_vxworks.c:546 eelf_iamcu.c:519 eelf_k1om.c:5510
-#: eelf_k1om_fbsd.c:519 eelf_l1om.c:5510 eelf_l1om_fbsd.c:519
-#: eelf_x86_64.c:5557 eelf_x86_64_cloudabi.c:522 eelf_x86_64_fbsd.c:522
-#: eelf_x86_64_sol2.c:654
+#: eelf32_x86_64.c:5585 eelf_i386.c:5204 eelf_i386_be.c:485
+#: eelf_i386_fbsd.c:525 eelf_i386_haiku.c:525 eelf_i386_ldso.c:500
+#: eelf_i386_sol2.c:657 eelf_i386_vxworks.c:552 eelf_iamcu.c:525
+#: eelf_k1om.c:5516 eelf_k1om_fbsd.c:525 eelf_l1om.c:5516 eelf_l1om_fbsd.c:525
+#: eelf_x86_64.c:5585 eelf_x86_64_cloudabi.c:528 eelf_x86_64_fbsd.c:528
+#: eelf_x86_64_haiku.c:528 eelf_x86_64_sol2.c:660
msgid "%F%P: unsupported option: -z %s\n"
msgstr "%F%P : option non prise en charge : -z %s\n"
-#: eelf32_x86_64.c:5579 eelf_i386.c:5198 eelf_i386_fbsd.c:541
-#: eelf_x86_64.c:5579 eelf_x86_64_cloudabi.c:544 eelf_x86_64_fbsd.c:544
-#: eelf_x86_64_sol2.c:676
+#: eelf32_x86_64.c:5607 eelf_i386.c:5226 eelf_i386_fbsd.c:547
+#: eelf_i386_haiku.c:547 eelf_x86_64.c:5607 eelf_x86_64_cloudabi.c:550
+#: eelf_x86_64_fbsd.c:550 eelf_x86_64_haiku.c:550 eelf_x86_64_sol2.c:682
msgid "%F%P: invalid option for -z cet-report=: %s\n"
msgstr "%F%P : option invalide pour -z cet-report=: %s\n"
-#: eelf32_x86_64.c:5593 eelf_i386.c:5212 eelf_i386_fbsd.c:555
-#: eelf_x86_64.c:5593 eelf_x86_64_cloudabi.c:558 eelf_x86_64_fbsd.c:558
-#: eelf_x86_64_sol2.c:690
+#: eelf32_x86_64.c:5621 eelf_i386.c:5240 eelf_i386_fbsd.c:561
+#: eelf_i386_haiku.c:561 eelf_x86_64.c:5621 eelf_x86_64_cloudabi.c:564
+#: eelf_x86_64_fbsd.c:564 eelf_x86_64_haiku.c:564 eelf_x86_64_sol2.c:696
msgid "%F%P: invalid x86-64 ISA level: %s\n"
msgstr "%F%P : niveau ISA x86-64 invalide : %s\n"
-#: eelf32_x86_64.c:5630 eelf_i386.c:5249 eelf_i386_be.c:495
-#: eelf_i386_fbsd.c:592 eelf_i386_ldso.c:519 eelf_i386_sol2.c:676
-#: eelf_i386_vxworks.c:567 eelf_iamcu.c:544 eelf_k1om.c:5535
-#: eelf_k1om_fbsd.c:544 eelf_l1om.c:5535 eelf_l1om_fbsd.c:544
-#: eelf_x86_64.c:5683 eelf_x86_64_cloudabi.c:648 eelf_x86_64_fbsd.c:648
-#: eelf_x86_64_sol2.c:780
+#: eelf32_x86_64.c:5663 eelf_i386.c:5282 eelf_i386_be.c:501
+#: eelf_i386_fbsd.c:603 eelf_i386_haiku.c:603 eelf_i386_ldso.c:525
+#: eelf_i386_sol2.c:682 eelf_i386_vxworks.c:573 eelf_iamcu.c:550
+#: eelf_k1om.c:5541 eelf_k1om_fbsd.c:550 eelf_l1om.c:5541 eelf_l1om_fbsd.c:550
+#: eelf_x86_64.c:5716 eelf_x86_64_cloudabi.c:659 eelf_x86_64_fbsd.c:659
+#: eelf_x86_64_haiku.c:659 eelf_x86_64_sol2.c:791
#, c-format
msgid " -z noextern-protected-data Do not treat protected data symbol as external\n"
msgstr " -z noextern-protected-data Ne pas traiter les symboles de données protégées comme externes\n"
-#: eelf32_x86_64.c:5633 eelf32lppc.c:803 eelf32lppclinux.c:803
-#: eelf32lppcnto.c:803 eelf32lppcsim.c:803 eelf32ppc.c:803
-#: eelf32ppc_fbsd.c:803 eelf32ppclinux.c:803 eelf32ppcnto.c:803
-#: eelf32ppcsim.c:803 eelf32ppcvxworks.c:781 eelf32ppcwindiss.c:803
-#: eelf64lppc.c:1328 eelf64lppc_fbsd.c:1328 eelf64ppc.c:1328
-#: eelf64ppc_fbsd.c:1328 eelf_i386.c:5252 eelf_i386_be.c:498
-#: eelf_i386_fbsd.c:595 eelf_i386_ldso.c:522 eelf_i386_sol2.c:679
-#: eelf_i386_vxworks.c:570 eelf_iamcu.c:547 eelf_k1om.c:5538
-#: eelf_k1om_fbsd.c:547 eelf_l1om.c:5538 eelf_l1om_fbsd.c:547
-#: eelf_x86_64.c:5686 eelf_x86_64_cloudabi.c:651 eelf_x86_64_fbsd.c:651
-#: eelf_x86_64_sol2.c:783
+#: eelf32_x86_64.c:5665 eelf_i386.c:5284 eelf_i386_be.c:503
+#: eelf_i386_fbsd.c:605 eelf_i386_haiku.c:605 eelf_i386_ldso.c:527
+#: eelf_i386_sol2.c:684 eelf_i386_vxworks.c:575 eelf_iamcu.c:552
+#: eelf_k1om.c:5543 eelf_k1om_fbsd.c:552 eelf_l1om.c:5543 eelf_l1om_fbsd.c:552
+#: eelf_x86_64.c:5718 eelf_x86_64_cloudabi.c:661 eelf_x86_64_fbsd.c:661
+#: eelf_x86_64_haiku.c:661 eelf_x86_64_sol2.c:793
+#, c-format
+msgid " -z indirect-extern-access Enable indirect external access\n"
+msgstr " -z indirect-extern-access Autorise l'accès externe indirect\n"
+
+#: eelf32_x86_64.c:5667 eelf_i386.c:5286 eelf_i386_be.c:505
+#: eelf_i386_fbsd.c:607 eelf_i386_haiku.c:607 eelf_i386_ldso.c:529
+#: eelf_i386_sol2.c:686 eelf_i386_vxworks.c:577 eelf_iamcu.c:554
+#: eelf_k1om.c:5545 eelf_k1om_fbsd.c:554 eelf_l1om.c:5545 eelf_l1om_fbsd.c:554
+#: eelf_x86_64.c:5720 eelf_x86_64_cloudabi.c:663 eelf_x86_64_fbsd.c:663
+#: eelf_x86_64_haiku.c:663 eelf_x86_64_sol2.c:795
+#, c-format
+msgid " -z noindirect-extern-access Disable indirect external access (default)\n"
+msgstr " -z noindirect-extern-access N'autorise pas l'accès externe indirect (défaut)\n"
+
+#: eelf32_x86_64.c:5670 eelf32lppc.c:817 eelf32lppclinux.c:817
+#: eelf32lppcnto.c:817 eelf32lppcsim.c:817 eelf32ppc.c:817
+#: eelf32ppc_fbsd.c:817 eelf32ppchaiku.c:817 eelf32ppclinux.c:817
+#: eelf32ppcnto.c:817 eelf32ppcsim.c:817 eelf32ppcvxworks.c:795
+#: eelf32ppcwindiss.c:817 eelf64lppc.c:1346 eelf64lppc_fbsd.c:1346
+#: eelf64ppc.c:1346 eelf64ppc_fbsd.c:1346 eelf_i386.c:5289 eelf_i386_be.c:508
+#: eelf_i386_fbsd.c:610 eelf_i386_haiku.c:610 eelf_i386_ldso.c:532
+#: eelf_i386_sol2.c:689 eelf_i386_vxworks.c:580 eelf_iamcu.c:557
+#: eelf_k1om.c:5548 eelf_k1om_fbsd.c:557 eelf_l1om.c:5548 eelf_l1om_fbsd.c:557
+#: eelf_x86_64.c:5723 eelf_x86_64_cloudabi.c:666 eelf_x86_64_fbsd.c:666
+#: eelf_x86_64_haiku.c:666 eelf_x86_64_sol2.c:798
#, c-format
msgid ""
" -z dynamic-undefined-weak Make undefined weak symbols dynamic\n"
@@ -4940,46 +5016,46 @@ msgstr ""
" -z dynamic-undefined-weak Rendre les symboles faibles non définis dynamiques\n"
" -z nodynamic-undefined-weak Ne pas rendre les symboles faibles non définis dynamiques\n"
-#: eelf32_x86_64.c:5637 eelf_x86_64.c:5690 eelf_x86_64_cloudabi.c:655
-#: eelf_x86_64_fbsd.c:655 eelf_x86_64_sol2.c:787
+#: eelf32_x86_64.c:5674 eelf_x86_64.c:5727 eelf_x86_64_cloudabi.c:670
+#: eelf_x86_64_fbsd.c:670 eelf_x86_64_haiku.c:670 eelf_x86_64_sol2.c:802
#, c-format
msgid " -z noreloc-overflow Disable relocation overflow check\n"
msgstr " -z noreloc-overflow Désactiver la vérification de débordement des relocalisations\n"
-#: eelf32_x86_64.c:5640 eelf_i386.c:5256 eelf_i386_be.c:502
-#: eelf_i386_fbsd.c:599 eelf_i386_ldso.c:526 eelf_i386_sol2.c:683
-#: eelf_i386_vxworks.c:574 eelf_iamcu.c:551 eelf_k1om.c:5542
-#: eelf_k1om_fbsd.c:551 eelf_l1om.c:5542 eelf_l1om_fbsd.c:551
-#: eelf_x86_64.c:5693 eelf_x86_64_cloudabi.c:658 eelf_x86_64_fbsd.c:658
-#: eelf_x86_64_sol2.c:790
+#: eelf32_x86_64.c:5677 eelf_i386.c:5293 eelf_i386_be.c:512
+#: eelf_i386_fbsd.c:614 eelf_i386_haiku.c:614 eelf_i386_ldso.c:536
+#: eelf_i386_sol2.c:693 eelf_i386_vxworks.c:584 eelf_iamcu.c:561
+#: eelf_k1om.c:5552 eelf_k1om_fbsd.c:561 eelf_l1om.c:5552 eelf_l1om_fbsd.c:561
+#: eelf_x86_64.c:5730 eelf_x86_64_cloudabi.c:673 eelf_x86_64_fbsd.c:673
+#: eelf_x86_64_haiku.c:673 eelf_x86_64_sol2.c:805
#, c-format
msgid " -z call-nop=PADDING Use PADDING as 1-byte NOP for branch\n"
msgstr " -z call-nop=REMBOURRAGE Utiliser REMBOURRAGE comme un NOP de 1 octet pour les branches\n"
-#: eelf32_x86_64.c:5643 eelf_i386.c:5259 eelf_i386_fbsd.c:602
-#: eelf_x86_64.c:5696 eelf_x86_64_cloudabi.c:661 eelf_x86_64_fbsd.c:661
-#: eelf_x86_64_sol2.c:793
+#: eelf32_x86_64.c:5680 eelf_i386.c:5296 eelf_i386_fbsd.c:617
+#: eelf_i386_haiku.c:617 eelf_x86_64.c:5733 eelf_x86_64_cloudabi.c:676
+#: eelf_x86_64_fbsd.c:676 eelf_x86_64_haiku.c:676 eelf_x86_64_sol2.c:808
#, c-format
msgid " -z ibtplt Generate IBT-enabled PLT entries\n"
msgstr " -z ibtplt Générer des entrées PLT actives pour l'IBT\n"
-#: eelf32_x86_64.c:5645 eelf_i386.c:5261 eelf_i386_fbsd.c:604
-#: eelf_x86_64.c:5698 eelf_x86_64_cloudabi.c:663 eelf_x86_64_fbsd.c:663
-#: eelf_x86_64_sol2.c:795
+#: eelf32_x86_64.c:5682 eelf_i386.c:5298 eelf_i386_fbsd.c:619
+#: eelf_i386_haiku.c:619 eelf_x86_64.c:5735 eelf_x86_64_cloudabi.c:678
+#: eelf_x86_64_fbsd.c:678 eelf_x86_64_haiku.c:678 eelf_x86_64_sol2.c:810
#, c-format
msgid " -z ibt Generate GNU_PROPERTY_X86_FEATURE_1_IBT\n"
msgstr " -z ibt Générer GNU_PROPERTY_X86_FEATURE_1_IBT\n"
-#: eelf32_x86_64.c:5647 eelf_i386.c:5263 eelf_i386_fbsd.c:606
-#: eelf_x86_64.c:5700 eelf_x86_64_cloudabi.c:665 eelf_x86_64_fbsd.c:665
-#: eelf_x86_64_sol2.c:797
+#: eelf32_x86_64.c:5684 eelf_i386.c:5300 eelf_i386_fbsd.c:621
+#: eelf_i386_haiku.c:621 eelf_x86_64.c:5737 eelf_x86_64_cloudabi.c:680
+#: eelf_x86_64_fbsd.c:680 eelf_x86_64_haiku.c:680 eelf_x86_64_sol2.c:812
#, c-format
msgid " -z shstk Generate GNU_PROPERTY_X86_FEATURE_1_SHSTK\n"
msgstr " -z shstk Générer GNU_PROPERTY_X86_FEATURE_1_SHSTK\n"
-#: eelf32_x86_64.c:5649 eelf_i386.c:5265 eelf_i386_fbsd.c:608
-#: eelf_x86_64.c:5702 eelf_x86_64_cloudabi.c:667 eelf_x86_64_fbsd.c:667
-#: eelf_x86_64_sol2.c:799
+#: eelf32_x86_64.c:5686 eelf_i386.c:5302 eelf_i386_fbsd.c:623
+#: eelf_i386_haiku.c:623 eelf_x86_64.c:5739 eelf_x86_64_cloudabi.c:682
+#: eelf_x86_64_fbsd.c:682 eelf_x86_64_haiku.c:682 eelf_x86_64_sol2.c:814
#, c-format
msgid ""
" -z cet-report=[none|warning|error] (default: none)\n"
@@ -4988,55 +5064,73 @@ msgstr ""
" -z cet-report=[none|warning|error] (défaut : none)\n"
" Signaler les propriétés IBT et SHSTK manquantes\n"
-#: eelf32_x86_64.c:5653 eelf_i386.c:5269 eelf_i386_fbsd.c:612
-#: eelf_x86_64.c:5706 eelf_x86_64_cloudabi.c:671 eelf_x86_64_fbsd.c:671
-#: eelf_x86_64_sol2.c:803
+#: eelf32_x86_64.c:5690 eelf_i386.c:5306 eelf_i386_fbsd.c:627
+#: eelf_i386_haiku.c:627 eelf_x86_64.c:5743 eelf_x86_64_cloudabi.c:686
+#: eelf_x86_64_fbsd.c:686 eelf_x86_64_haiku.c:686 eelf_x86_64_sol2.c:818
#, c-format
msgid " -z report-relative-reloc Report relative relocations\n"
msgstr " -z report-relative-reloc Signaler les relocalisations relatives\n"
-#: eelf32_x86_64.c:5656 eelf_i386.c:5272 eelf_i386_fbsd.c:615
-#: eelf_x86_64.c:5709 eelf_x86_64_cloudabi.c:674 eelf_x86_64_fbsd.c:674
-#: eelf_x86_64_sol2.c:806
+#: eelf32_x86_64.c:5693 eelf_i386.c:5309 eelf_i386_fbsd.c:630
+#: eelf_i386_haiku.c:630 eelf_x86_64.c:5746 eelf_x86_64_cloudabi.c:689
+#: eelf_x86_64_fbsd.c:689 eelf_x86_64_haiku.c:689 eelf_x86_64_sol2.c:821
#, c-format
msgid " -z x86-64-{baseline|v[234]} Mark x86-64-{baseline|v[234]} ISA level as needed\n"
msgstr " -z x86-64-{baseline|v[234]} Marquer le niveau ISA x86-64-{baseline|v[234]} comme requis\n"
-#: eelf32b4300.c:698 eelf32bmip.c:698 eelf32bmipn32.c:712 eelf32bsmip.c:712
-#: eelf32btsmip.c:698 eelf32btsmip_fbsd.c:698 eelf32btsmipn32.c:698
-#: eelf32btsmipn32_fbsd.c:698 eelf32ebmip.c:698 eelf32ebmipvxworks.c:737
-#: eelf32elmip.c:698 eelf32elmipvxworks.c:737 eelf32l4300.c:698
-#: eelf32lmip.c:698 eelf32lr5900.c:557 eelf32lr5900n32.c:556 eelf32lsmip.c:698
-#: eelf32ltsmip.c:698 eelf32ltsmip_fbsd.c:698 eelf32ltsmipn32.c:698
-#: eelf32ltsmipn32_fbsd.c:698 eelf32mipswindiss.c:531 eelf64bmip.c:712
-#: eelf64btsmip.c:698 eelf64btsmip_fbsd.c:698 eelf64ltsmip.c:698
-#: eelf64ltsmip_fbsd.c:698
+#: eelf32_x86_64.c:5696 eelf64lppc.c:1350 eelf64lppc_fbsd.c:1350
+#: eelf64ppc.c:1350 eelf64ppc_fbsd.c:1350 eelf_i386.c:5312
+#: eelf_i386_fbsd.c:633 eelf_i386_haiku.c:633 eelf_x86_64.c:5763
+#: eelf_x86_64_cloudabi.c:706 eelf_x86_64_fbsd.c:706 eelf_x86_64_haiku.c:706
+#: eelf_x86_64_sol2.c:838
+#, c-format
+msgid " -z pack-relative-relocs Pack relative relocations\n"
+msgstr " -z pack-relative-relocs Inclure les relocalisations relatives\n"
+
+#: eelf32_x86_64.c:5698 eelf64lppc.c:1352 eelf64lppc_fbsd.c:1352
+#: eelf64ppc.c:1352 eelf64ppc_fbsd.c:1352 eelf_i386.c:5314
+#: eelf_i386_fbsd.c:635 eelf_i386_haiku.c:635 eelf_x86_64.c:5765
+#: eelf_x86_64_cloudabi.c:708 eelf_x86_64_fbsd.c:708 eelf_x86_64_haiku.c:708
+#: eelf_x86_64_sol2.c:840
+#, c-format
+msgid " -z nopack-relative-relocs Do not pack relative relocations (default)\n"
+msgstr " -z nopack-relative-relocs Ne pas inclure les relocalisations relatives (défaut)\n"
+
+#: eelf32b4300.c:700 eelf32bmip.c:700 eelf32bmipn32.c:714 eelf32bsmip.c:714
+#: eelf32btsmip.c:700 eelf32btsmip_fbsd.c:700 eelf32btsmipn32.c:700
+#: eelf32btsmipn32_fbsd.c:700 eelf32ebmip.c:700 eelf32ebmipvxworks.c:739
+#: eelf32elmip.c:700 eelf32elmipvxworks.c:739 eelf32l4300.c:700
+#: eelf32lmip.c:700 eelf32lr5900.c:559 eelf32lr5900n32.c:558 eelf32lsmip.c:700
+#: eelf32ltsmip.c:700 eelf32ltsmip_fbsd.c:700 eelf32ltsmipn32.c:700
+#: eelf32ltsmipn32_fbsd.c:700 eelf32mipswindiss.c:533 eelf64bmip.c:714
+#: eelf64btsmip.c:700 eelf64btsmip_fbsd.c:700 eelf64ltsmip.c:700
+#: eelf64ltsmip_fbsd.c:700 eelf_mipsel_haiku.c:700
#, c-format
msgid " --insn32 Only generate 32-bit microMIPS instructions\n"
msgstr " --insn32 Générer uniquement des instructions 32-bit microMIPS\n"
-#: eelf32b4300.c:701 eelf32bmip.c:701 eelf32bmipn32.c:715 eelf32bsmip.c:715
-#: eelf32btsmip.c:701 eelf32btsmip_fbsd.c:701 eelf32btsmipn32.c:701
-#: eelf32btsmipn32_fbsd.c:701 eelf32ebmip.c:701 eelf32ebmipvxworks.c:740
-#: eelf32elmip.c:701 eelf32elmipvxworks.c:740 eelf32l4300.c:701
-#: eelf32lmip.c:701 eelf32lr5900.c:560 eelf32lr5900n32.c:559 eelf32lsmip.c:701
-#: eelf32ltsmip.c:701 eelf32ltsmip_fbsd.c:701 eelf32ltsmipn32.c:701
-#: eelf32ltsmipn32_fbsd.c:701 eelf32mipswindiss.c:534 eelf64bmip.c:715
-#: eelf64btsmip.c:701 eelf64btsmip_fbsd.c:701 eelf64ltsmip.c:701
-#: eelf64ltsmip_fbsd.c:701
+#: eelf32b4300.c:703 eelf32bmip.c:703 eelf32bmipn32.c:717 eelf32bsmip.c:717
+#: eelf32btsmip.c:703 eelf32btsmip_fbsd.c:703 eelf32btsmipn32.c:703
+#: eelf32btsmipn32_fbsd.c:703 eelf32ebmip.c:703 eelf32ebmipvxworks.c:742
+#: eelf32elmip.c:703 eelf32elmipvxworks.c:742 eelf32l4300.c:703
+#: eelf32lmip.c:703 eelf32lr5900.c:562 eelf32lr5900n32.c:561 eelf32lsmip.c:703
+#: eelf32ltsmip.c:703 eelf32ltsmip_fbsd.c:703 eelf32ltsmipn32.c:703
+#: eelf32ltsmipn32_fbsd.c:703 eelf32mipswindiss.c:536 eelf64bmip.c:717
+#: eelf64btsmip.c:703 eelf64btsmip_fbsd.c:703 eelf64ltsmip.c:703
+#: eelf64ltsmip_fbsd.c:703 eelf_mipsel_haiku.c:703
#, c-format
msgid " --no-insn32 Generate all microMIPS instructions\n"
msgstr " --no-insn32 Générer toutes les instructions microMIPS\n"
-#: eelf32b4300.c:704 eelf32bmip.c:704 eelf32bmipn32.c:718 eelf32bsmip.c:718
-#: eelf32btsmip.c:704 eelf32btsmip_fbsd.c:704 eelf32btsmipn32.c:704
-#: eelf32btsmipn32_fbsd.c:704 eelf32ebmip.c:704 eelf32ebmipvxworks.c:743
-#: eelf32elmip.c:704 eelf32elmipvxworks.c:743 eelf32l4300.c:704
-#: eelf32lmip.c:704 eelf32lr5900.c:563 eelf32lr5900n32.c:562 eelf32lsmip.c:704
-#: eelf32ltsmip.c:704 eelf32ltsmip_fbsd.c:704 eelf32ltsmipn32.c:704
-#: eelf32ltsmipn32_fbsd.c:704 eelf32mipswindiss.c:537 eelf64bmip.c:718
-#: eelf64btsmip.c:704 eelf64btsmip_fbsd.c:704 eelf64ltsmip.c:704
-#: eelf64ltsmip_fbsd.c:704
+#: eelf32b4300.c:706 eelf32bmip.c:706 eelf32bmipn32.c:720 eelf32bsmip.c:720
+#: eelf32btsmip.c:706 eelf32btsmip_fbsd.c:706 eelf32btsmipn32.c:706
+#: eelf32btsmipn32_fbsd.c:706 eelf32ebmip.c:706 eelf32ebmipvxworks.c:745
+#: eelf32elmip.c:706 eelf32elmipvxworks.c:745 eelf32l4300.c:706
+#: eelf32lmip.c:706 eelf32lr5900.c:565 eelf32lr5900n32.c:564 eelf32lsmip.c:706
+#: eelf32ltsmip.c:706 eelf32ltsmip_fbsd.c:706 eelf32ltsmipn32.c:706
+#: eelf32ltsmipn32_fbsd.c:706 eelf32mipswindiss.c:539 eelf64bmip.c:720
+#: eelf64btsmip.c:706 eelf64btsmip_fbsd.c:706 eelf64ltsmip.c:706
+#: eelf64ltsmip_fbsd.c:706 eelf_mipsel_haiku.c:706
#, c-format
msgid ""
" --ignore-branch-isa Accept invalid branch relocations requiring\n"
@@ -5045,15 +5139,15 @@ msgstr ""
" --ignore-branch-isa Accepter des relocalisation de branche invalides nécessitant\n"
" une option de mode ISA\n"
-#: eelf32b4300.c:708 eelf32bmip.c:708 eelf32bmipn32.c:722 eelf32bsmip.c:722
-#: eelf32btsmip.c:708 eelf32btsmip_fbsd.c:708 eelf32btsmipn32.c:708
-#: eelf32btsmipn32_fbsd.c:708 eelf32ebmip.c:708 eelf32ebmipvxworks.c:747
-#: eelf32elmip.c:708 eelf32elmipvxworks.c:747 eelf32l4300.c:708
-#: eelf32lmip.c:708 eelf32lr5900.c:567 eelf32lr5900n32.c:566 eelf32lsmip.c:708
-#: eelf32ltsmip.c:708 eelf32ltsmip_fbsd.c:708 eelf32ltsmipn32.c:708
-#: eelf32ltsmipn32_fbsd.c:708 eelf32mipswindiss.c:541 eelf64bmip.c:722
-#: eelf64btsmip.c:708 eelf64btsmip_fbsd.c:708 eelf64ltsmip.c:708
-#: eelf64ltsmip_fbsd.c:708
+#: eelf32b4300.c:710 eelf32bmip.c:710 eelf32bmipn32.c:724 eelf32bsmip.c:724
+#: eelf32btsmip.c:710 eelf32btsmip_fbsd.c:710 eelf32btsmipn32.c:710
+#: eelf32btsmipn32_fbsd.c:710 eelf32ebmip.c:710 eelf32ebmipvxworks.c:749
+#: eelf32elmip.c:710 eelf32elmipvxworks.c:749 eelf32l4300.c:710
+#: eelf32lmip.c:710 eelf32lr5900.c:569 eelf32lr5900n32.c:568 eelf32lsmip.c:710
+#: eelf32ltsmip.c:710 eelf32ltsmip_fbsd.c:710 eelf32ltsmipn32.c:710
+#: eelf32ltsmipn32_fbsd.c:710 eelf32mipswindiss.c:543 eelf64bmip.c:724
+#: eelf64btsmip.c:710 eelf64btsmip_fbsd.c:710 eelf64ltsmip.c:710
+#: eelf64ltsmip_fbsd.c:710 eelf_mipsel_haiku.c:710
#, c-format
msgid ""
" --no-ignore-branch-isa Reject invalid branch relocations requiring\n"
@@ -5062,38 +5156,38 @@ msgstr ""
" --no-ignore-branch-isa Rejeter des relocalisations de branche invalides nécessitant\n"
" une option de mode ISA\n"
-#: eelf32b4300.c:712 eelf32bmip.c:712 eelf32bmipn32.c:726 eelf32bsmip.c:726
-#: eelf32btsmip.c:712 eelf32btsmip_fbsd.c:712 eelf32btsmipn32.c:712
-#: eelf32btsmipn32_fbsd.c:712 eelf32ebmip.c:712 eelf32ebmipvxworks.c:751
-#: eelf32elmip.c:712 eelf32elmipvxworks.c:751 eelf32l4300.c:712
-#: eelf32lmip.c:712 eelf32lr5900.c:571 eelf32lr5900n32.c:570 eelf32lsmip.c:712
-#: eelf32ltsmip.c:712 eelf32ltsmip_fbsd.c:712 eelf32ltsmipn32.c:712
-#: eelf32ltsmipn32_fbsd.c:712 eelf32mipswindiss.c:545 eelf64bmip.c:726
-#: eelf64btsmip.c:712 eelf64btsmip_fbsd.c:712 eelf64ltsmip.c:712
-#: eelf64ltsmip_fbsd.c:712
+#: eelf32b4300.c:714 eelf32bmip.c:714 eelf32bmipn32.c:728 eelf32bsmip.c:728
+#: eelf32btsmip.c:714 eelf32btsmip_fbsd.c:714 eelf32btsmipn32.c:714
+#: eelf32btsmipn32_fbsd.c:714 eelf32ebmip.c:714 eelf32ebmipvxworks.c:753
+#: eelf32elmip.c:714 eelf32elmipvxworks.c:753 eelf32l4300.c:714
+#: eelf32lmip.c:714 eelf32lr5900.c:573 eelf32lr5900n32.c:572 eelf32lsmip.c:714
+#: eelf32ltsmip.c:714 eelf32ltsmip_fbsd.c:714 eelf32ltsmipn32.c:714
+#: eelf32ltsmipn32_fbsd.c:714 eelf32mipswindiss.c:547 eelf64bmip.c:728
+#: eelf64btsmip.c:714 eelf64btsmip_fbsd.c:714 eelf64ltsmip.c:714
+#: eelf64ltsmip_fbsd.c:714 eelf_mipsel_haiku.c:714
#, c-format
msgid " --compact-branches Generate compact branches/jumps for MIPS R6\n"
msgstr " --compact-branches Générer des branches/sauts compacts pour MIPS R6\n"
-#: eelf32b4300.c:715 eelf32bmip.c:715 eelf32bmipn32.c:729 eelf32bsmip.c:729
-#: eelf32btsmip.c:715 eelf32btsmip_fbsd.c:715 eelf32btsmipn32.c:715
-#: eelf32btsmipn32_fbsd.c:715 eelf32ebmip.c:715 eelf32ebmipvxworks.c:754
-#: eelf32elmip.c:715 eelf32elmipvxworks.c:754 eelf32l4300.c:715
-#: eelf32lmip.c:715 eelf32lr5900.c:574 eelf32lr5900n32.c:573 eelf32lsmip.c:715
-#: eelf32ltsmip.c:715 eelf32ltsmip_fbsd.c:715 eelf32ltsmipn32.c:715
-#: eelf32ltsmipn32_fbsd.c:715 eelf32mipswindiss.c:548 eelf64bmip.c:729
-#: eelf64btsmip.c:715 eelf64btsmip_fbsd.c:715 eelf64ltsmip.c:715
-#: eelf64ltsmip_fbsd.c:715
+#: eelf32b4300.c:717 eelf32bmip.c:717 eelf32bmipn32.c:731 eelf32bsmip.c:731
+#: eelf32btsmip.c:717 eelf32btsmip_fbsd.c:717 eelf32btsmipn32.c:717
+#: eelf32btsmipn32_fbsd.c:717 eelf32ebmip.c:717 eelf32ebmipvxworks.c:756
+#: eelf32elmip.c:717 eelf32elmipvxworks.c:756 eelf32l4300.c:717
+#: eelf32lmip.c:717 eelf32lr5900.c:576 eelf32lr5900n32.c:575 eelf32lsmip.c:717
+#: eelf32ltsmip.c:717 eelf32ltsmip_fbsd.c:717 eelf32ltsmipn32.c:717
+#: eelf32ltsmipn32_fbsd.c:717 eelf32mipswindiss.c:550 eelf64bmip.c:731
+#: eelf64btsmip.c:717 eelf64btsmip_fbsd.c:717 eelf64ltsmip.c:717
+#: eelf64ltsmip_fbsd.c:717 eelf_mipsel_haiku.c:717
#, c-format
msgid " --no-compact-branches Generate delay slot branches/jumps for MIPS R6\n"
msgstr " --no-compact-branches Générer des branches/sauts à instructions concomitantes (delay slot) pour MIPS R6\n"
-#: eelf32bfin.c:454 eelf32bfinfd.c:479
+#: eelf32bfin.c:456 eelf32bfinfd.c:481
#, c-format
msgid " --code-in-l1 Put code in L1\n"
msgstr " --code-in-l1 Mettre du code en L1\n"
-#: eelf32bfin.c:456 eelf32bfinfd.c:481
+#: eelf32bfin.c:458 eelf32bfinfd.c:483
#, c-format
msgid " --data-in-l1 Put data in L1\n"
msgstr " --data-in-l1 Mettre de la données en L1\n"
@@ -5119,140 +5213,146 @@ msgid "%X%P: %pB: can not create runtime reloc information: %s\n"
msgstr "%X%P : %pB : impossible de créer des informations de relocalisation pour l'exécution : %s\n"
#: eelf32lppc.c:96 eelf32lppclinux.c:96 eelf32lppcnto.c:96 eelf32lppcsim.c:96
-#: eelf32ppc.c:96 eelf32ppc_fbsd.c:96 eelf32ppclinux.c:96 eelf32ppcnto.c:96
-#: eelf32ppcsim.c:96 eelf32ppcwindiss.c:96
+#: eelf32ppc.c:96 eelf32ppc_fbsd.c:96 eelf32ppchaiku.c:96 eelf32ppclinux.c:96
+#: eelf32ppcnto.c:96 eelf32ppcsim.c:96 eelf32ppcwindiss.c:96
msgid "%X%P: select_plt_layout problem %E\n"
msgstr "%X%P: problème select_plt_layout %E\n"
#: eelf32lppc.c:160 eelf32lppclinux.c:160 eelf32lppcnto.c:160
#: eelf32lppcsim.c:160 eelf32ppc.c:160 eelf32ppc_fbsd.c:160
-#: eelf32ppclinux.c:160 eelf32ppcnto.c:160 eelf32ppcsim.c:160
-#: eelf32ppcvxworks.c:105 eelf32ppcwindiss.c:160 eelf64lppc.c:321
-#: eelf64lppc_fbsd.c:321 eelf64ppc.c:321 eelf64ppc_fbsd.c:321
+#: eelf32ppchaiku.c:160 eelf32ppclinux.c:160 eelf32ppcnto.c:160
+#: eelf32ppcsim.c:160 eelf32ppcvxworks.c:105 eelf32ppcwindiss.c:160
+#: eelf64lppc.c:321 eelf64lppc_fbsd.c:321 eelf64ppc.c:321 eelf64ppc_fbsd.c:321
msgid "%X%P: inline PLT: %E\n"
msgstr "%X%P : PLT en ligne : %E\n"
#: eelf32lppc.c:168 eelf32lppclinux.c:168 eelf32lppcnto.c:168
#: eelf32lppcsim.c:168 eelf32ppc.c:168 eelf32ppc_fbsd.c:168
-#: eelf32ppclinux.c:168 eelf32ppcnto.c:168 eelf32ppcsim.c:168
-#: eelf32ppcvxworks.c:113 eelf32ppcwindiss.c:168 eelf64lppc.c:325
-#: eelf64lppc.c:344 eelf64lppc_fbsd.c:325 eelf64lppc_fbsd.c:344
-#: eelf64ppc.c:325 eelf64ppc.c:344 eelf64ppc_fbsd.c:325 eelf64ppc_fbsd.c:344
+#: eelf32ppchaiku.c:168 eelf32ppclinux.c:168 eelf32ppcnto.c:168
+#: eelf32ppcsim.c:168 eelf32ppcvxworks.c:113 eelf32ppcwindiss.c:168
+#: eelf64lppc.c:325 eelf64lppc.c:344 eelf64lppc_fbsd.c:325
+#: eelf64lppc_fbsd.c:344 eelf64ppc.c:325 eelf64ppc.c:344 eelf64ppc_fbsd.c:325
+#: eelf64ppc_fbsd.c:344
msgid "%X%P: TLS problem %E\n"
msgstr "%X%P : problème TLS %E\n"
#: eelf32lppc.c:255 eelf32lppclinux.c:255 eelf32lppcnto.c:255
#: eelf32lppcsim.c:255 eelf32ppc.c:255 eelf32ppc_fbsd.c:255
-#: eelf32ppclinux.c:255 eelf32ppcnto.c:255 eelf32ppcsim.c:255
-#: eelf32ppcvxworks.c:200 eelf32ppcwindiss.c:255
+#: eelf32ppchaiku.c:255 eelf32ppclinux.c:255 eelf32ppcnto.c:255
+#: eelf32ppcsim.c:255 eelf32ppcvxworks.c:200 eelf32ppcwindiss.c:255
msgid "%X%P: ppc_finish_symbols problem %E\n"
msgstr "%X%P : problème ppc_finish_symbols %E\n"
-#: eelf32lppc.c:744 eelf32lppclinux.c:744 eelf32lppcnto.c:744
-#: eelf32lppcsim.c:744 eelf32ppc.c:744 eelf32ppc_fbsd.c:744
-#: eelf32ppclinux.c:744 eelf32ppcnto.c:744 eelf32ppcsim.c:744
-#: eelf32ppcvxworks.c:718 eelf32ppcwindiss.c:744 eelf64lppc.c:1195
-#: eelf64lppc_fbsd.c:1195 eelf64ppc.c:1195 eelf64ppc_fbsd.c:1195
+#: eelf32lppc.c:758 eelf32lppclinux.c:758 eelf32lppcnto.c:758
+#: eelf32lppcsim.c:758 eelf32ppc.c:758 eelf32ppc_fbsd.c:758
+#: eelf32ppchaiku.c:758 eelf32ppclinux.c:758 eelf32ppcnto.c:758
+#: eelf32ppcsim.c:758 eelf32ppcvxworks.c:732 eelf32ppcwindiss.c:758
+#: eelf64lppc.c:1213 eelf64lppc_fbsd.c:1213 eelf64ppc.c:1213
+#: eelf64ppc_fbsd.c:1213
msgid "%F%P: invalid --plt-align `%s'\n"
msgstr "%F%P : --plt-align « %s » invalide\n"
-#: eelf32lppc.c:777 eelf32lppclinux.c:777 eelf32lppcnto.c:777
-#: eelf32lppcsim.c:777 eelf32ppc.c:777 eelf32ppc_fbsd.c:777
-#: eelf32ppclinux.c:777 eelf32ppcnto.c:777 eelf32ppcsim.c:777
-#: eelf32ppcvxworks.c:751 eelf32ppcwindiss.c:777
+#: eelf32lppc.c:791 eelf32lppclinux.c:791 eelf32lppcnto.c:791
+#: eelf32lppcsim.c:791 eelf32ppc.c:791 eelf32ppc_fbsd.c:791
+#: eelf32ppchaiku.c:791 eelf32ppclinux.c:791 eelf32ppcnto.c:791
+#: eelf32ppcsim.c:791 eelf32ppcvxworks.c:765 eelf32ppcwindiss.c:791
msgid "%F%P: invalid pagesize `%s'\n"
msgstr "%F%P : taille de page « %s » invalide\n"
-#: eelf32lppc.c:807 eelf32lppclinux.c:807 eelf32lppcnto.c:807
-#: eelf32lppcsim.c:807 eelf32ppc.c:807 eelf32ppc_fbsd.c:807
-#: eelf32ppclinux.c:807 eelf32ppcnto.c:807 eelf32ppcsim.c:807
-#: eelf32ppcvxworks.c:785 eelf32ppcwindiss.c:807 eelf64lppc.c:1375
-#: eelf64lppc_fbsd.c:1375 eelf64ppc.c:1375 eelf64ppc_fbsd.c:1375
+#: eelf32lppc.c:821 eelf32lppclinux.c:821 eelf32lppcnto.c:821
+#: eelf32lppcsim.c:821 eelf32ppc.c:821 eelf32ppc_fbsd.c:821
+#: eelf32ppchaiku.c:821 eelf32ppclinux.c:821 eelf32ppcnto.c:821
+#: eelf32ppcsim.c:821 eelf32ppcvxworks.c:799 eelf32ppcwindiss.c:821
+#: eelf64lppc.c:1398 eelf64lppc_fbsd.c:1398 eelf64ppc.c:1398
+#: eelf64ppc_fbsd.c:1398
#, c-format
msgid " --emit-stub-syms Label linker stubs with a symbol\n"
msgstr " --emit-stub-syms Etiqueter les espaces d'amorçage de l'éditeur de liens avec un symbole\n"
-#: eelf32lppc.c:810 eelf32lppclinux.c:810 eelf32lppcnto.c:810
-#: eelf32lppcsim.c:810 eelf32ppc.c:810 eelf32ppc_fbsd.c:810
-#: eelf32ppclinux.c:810 eelf32ppcnto.c:810 eelf32ppcsim.c:810
-#: eelf32ppcvxworks.c:788 eelf32ppcwindiss.c:810 eelf64lppc.c:1378
-#: eelf64lppc_fbsd.c:1378 eelf64ppc.c:1378 eelf64ppc_fbsd.c:1378
+#: eelf32lppc.c:824 eelf32lppclinux.c:824 eelf32lppcnto.c:824
+#: eelf32lppcsim.c:824 eelf32ppc.c:824 eelf32ppc_fbsd.c:824
+#: eelf32ppchaiku.c:824 eelf32ppclinux.c:824 eelf32ppcnto.c:824
+#: eelf32ppcsim.c:824 eelf32ppcvxworks.c:802 eelf32ppcwindiss.c:824
+#: eelf64lppc.c:1401 eelf64lppc_fbsd.c:1401 eelf64ppc.c:1401
+#: eelf64ppc_fbsd.c:1401
#, c-format
msgid " --no-emit-stub-syms Don't label linker stubs with a symbol\n"
msgstr " --no-emit-stub-syms Ne pas étiqueter les espaces d'amorçage de l'éditeur de liens avec un symbole\n"
-#: eelf32lppc.c:813 eelf32lppclinux.c:813 eelf32lppcnto.c:813
-#: eelf32lppcsim.c:813 eelf32ppc.c:813 eelf32ppc_fbsd.c:813
-#: eelf32ppclinux.c:813 eelf32ppcnto.c:813 eelf32ppcsim.c:813
-#: eelf32ppcvxworks.c:791 eelf32ppcwindiss.c:813 eelf64lppc.c:1398
-#: eelf64lppc_fbsd.c:1398 eelf64ppc.c:1398 eelf64ppc_fbsd.c:1398
+#: eelf32lppc.c:827 eelf32lppclinux.c:827 eelf32lppcnto.c:827
+#: eelf32lppcsim.c:827 eelf32ppc.c:827 eelf32ppc_fbsd.c:827
+#: eelf32ppchaiku.c:827 eelf32ppclinux.c:827 eelf32ppcnto.c:827
+#: eelf32ppcsim.c:827 eelf32ppcvxworks.c:805 eelf32ppcwindiss.c:827
+#: eelf64lppc.c:1421 eelf64lppc_fbsd.c:1421 eelf64ppc.c:1421
+#: eelf64ppc_fbsd.c:1421
#, c-format
msgid " --no-tls-optimize Don't try to optimize TLS accesses\n"
msgstr " --no-tls-optimize Ne pas essayer d'optimiser les accès TLS\n"
-#: eelf32lppc.c:816 eelf32lppclinux.c:816 eelf32lppcnto.c:816
-#: eelf32lppcsim.c:816 eelf32ppc.c:816 eelf32ppc_fbsd.c:816
-#: eelf32ppclinux.c:816 eelf32ppcnto.c:816 eelf32ppcsim.c:816
-#: eelf32ppcvxworks.c:794 eelf32ppcwindiss.c:816 eelf64lppc.c:1404
-#: eelf64lppc_fbsd.c:1404 eelf64ppc.c:1404 eelf64ppc_fbsd.c:1404
+#: eelf32lppc.c:830 eelf32lppclinux.c:830 eelf32lppcnto.c:830
+#: eelf32lppcsim.c:830 eelf32ppc.c:830 eelf32ppc_fbsd.c:830
+#: eelf32ppchaiku.c:830 eelf32ppclinux.c:830 eelf32ppcnto.c:830
+#: eelf32ppcsim.c:830 eelf32ppcvxworks.c:808 eelf32ppcwindiss.c:830
+#: eelf64lppc.c:1427 eelf64lppc_fbsd.c:1427 eelf64ppc.c:1427
+#: eelf64ppc_fbsd.c:1427
#, c-format
msgid " --no-tls-get-addr-optimize Don't use a special __tls_get_addr call\n"
msgstr " --no-tls-get-addr-optimize Ne pas utiliser d'appel special __tls_get_addr\n"
-#: eelf32lppc.c:819 eelf32lppclinux.c:819 eelf32lppcnto.c:819
-#: eelf32lppcsim.c:819 eelf32ppc.c:819 eelf32ppc_fbsd.c:819
-#: eelf32ppclinux.c:819 eelf32ppcnto.c:819 eelf32ppcsim.c:819
-#: eelf32ppcwindiss.c:819
+#: eelf32lppc.c:833 eelf32lppclinux.c:833 eelf32lppcnto.c:833
+#: eelf32lppcsim.c:833 eelf32ppc.c:833 eelf32ppc_fbsd.c:833
+#: eelf32ppchaiku.c:833 eelf32ppclinux.c:833 eelf32ppcnto.c:833
+#: eelf32ppcsim.c:833 eelf32ppcwindiss.c:833
#, c-format
msgid " --secure-plt Use new-style PLT if possible\n"
msgstr " --secure-plt Utiliser un style de PLT moderne si possible\n"
-#: eelf32lppc.c:822 eelf32lppclinux.c:822 eelf32lppcnto.c:822
-#: eelf32lppcsim.c:822 eelf32ppc.c:822 eelf32ppc_fbsd.c:822
-#: eelf32ppclinux.c:822 eelf32ppcnto.c:822 eelf32ppcsim.c:822
-#: eelf32ppcwindiss.c:822
+#: eelf32lppc.c:836 eelf32lppclinux.c:836 eelf32lppcnto.c:836
+#: eelf32lppcsim.c:836 eelf32ppc.c:836 eelf32ppc_fbsd.c:836
+#: eelf32ppchaiku.c:836 eelf32ppclinux.c:836 eelf32ppcnto.c:836
+#: eelf32ppcsim.c:836 eelf32ppcwindiss.c:836
#, c-format
msgid " --bss-plt Force old-style BSS PLT\n"
msgstr " --bss-plt Forcer un style ancien de PLT BSS\n"
-#: eelf32lppc.c:825 eelf32lppclinux.c:825 eelf32lppcnto.c:825
-#: eelf32lppcsim.c:825 eelf32ppc.c:825 eelf32ppc_fbsd.c:825
-#: eelf32ppclinux.c:825 eelf32ppcnto.c:825 eelf32ppcsim.c:825
-#: eelf32ppcwindiss.c:825
+#: eelf32lppc.c:839 eelf32lppclinux.c:839 eelf32lppcnto.c:839
+#: eelf32lppcsim.c:839 eelf32ppc.c:839 eelf32ppc_fbsd.c:839
+#: eelf32ppchaiku.c:839 eelf32ppclinux.c:839 eelf32ppcnto.c:839
+#: eelf32ppcsim.c:839 eelf32ppcwindiss.c:839
#, c-format
msgid " --plt-align Align PLT call stubs to fit cache lines\n"
msgstr " --plt-align Aligner les espaces d'amorçage d'appel PLT pour tenir dans les lignes de cache\n"
-#: eelf32lppc.c:828 eelf32lppclinux.c:828 eelf32lppcnto.c:828
-#: eelf32lppcsim.c:828 eelf32ppc.c:828 eelf32ppc_fbsd.c:828
-#: eelf32ppclinux.c:828 eelf32ppcnto.c:828 eelf32ppcsim.c:828
-#: eelf32ppcwindiss.c:828 eelf64lppc.c:1357 eelf64lppc_fbsd.c:1357
-#: eelf64ppc.c:1357 eelf64ppc_fbsd.c:1357
+#: eelf32lppc.c:842 eelf32lppclinux.c:842 eelf32lppcnto.c:842
+#: eelf32lppcsim.c:842 eelf32ppc.c:842 eelf32ppc_fbsd.c:842
+#: eelf32ppchaiku.c:842 eelf32ppclinux.c:842 eelf32ppcnto.c:842
+#: eelf32ppcsim.c:842 eelf32ppcwindiss.c:842 eelf64lppc.c:1380
+#: eelf64lppc_fbsd.c:1380 eelf64ppc.c:1380 eelf64ppc_fbsd.c:1380
#, c-format
msgid " --no-plt-align Dont't align individual PLT call stubs\n"
msgstr " --no-plt-align Ne pas algner les espaces d'amorçage d'appel PLT individuels\n"
-#: eelf32lppc.c:831 eelf32lppclinux.c:831 eelf32lppcnto.c:831
-#: eelf32lppcsim.c:831 eelf32ppc.c:831 eelf32ppc_fbsd.c:831
-#: eelf32ppclinux.c:831 eelf32ppcnto.c:831 eelf32ppcsim.c:831
-#: eelf32ppcwindiss.c:831 eelf64lppc.c:1416 eelf64lppc_fbsd.c:1416
-#: eelf64ppc.c:1416 eelf64ppc_fbsd.c:1416
+#: eelf32lppc.c:845 eelf32lppclinux.c:845 eelf32lppcnto.c:845
+#: eelf32lppcsim.c:845 eelf32ppc.c:845 eelf32ppc_fbsd.c:845
+#: eelf32ppchaiku.c:845 eelf32ppclinux.c:845 eelf32ppcnto.c:845
+#: eelf32ppcsim.c:845 eelf32ppcwindiss.c:845 eelf64lppc.c:1439
+#: eelf64lppc_fbsd.c:1439 eelf64ppc.c:1439 eelf64ppc_fbsd.c:1439
#, c-format
msgid " --no-inline-optimize Don't convert inline PLT to direct calls\n"
msgstr " --no-inline-optimize Ne pas convertir les PLT en ligne en appels directs\n"
-#: eelf32lppc.c:834 eelf32lppclinux.c:834 eelf32lppcnto.c:834
-#: eelf32lppcsim.c:834 eelf32ppc.c:834 eelf32ppc_fbsd.c:834
-#: eelf32ppclinux.c:834 eelf32ppcnto.c:834 eelf32ppcsim.c:834
-#: eelf32ppcwindiss.c:834
+#: eelf32lppc.c:848 eelf32lppclinux.c:848 eelf32lppcnto.c:848
+#: eelf32lppcsim.c:848 eelf32ppc.c:848 eelf32ppc_fbsd.c:848
+#: eelf32ppchaiku.c:848 eelf32ppclinux.c:848 eelf32ppcnto.c:848
+#: eelf32ppcsim.c:848 eelf32ppcwindiss.c:848
#, c-format
msgid " --sdata-got Force GOT location just before .sdata\n"
msgstr " --sdata-got Forcer la position GOT juste avant .sdata\n"
-#: eelf32lppc.c:837 eelf32lppclinux.c:837 eelf32lppcnto.c:837
-#: eelf32lppcsim.c:837 eelf32ppc.c:837 eelf32ppc_fbsd.c:837
-#: eelf32ppclinux.c:837 eelf32ppcnto.c:837 eelf32ppcsim.c:837
-#: eelf32ppcvxworks.c:797 eelf32ppcwindiss.c:837
+#: eelf32lppc.c:851 eelf32lppclinux.c:851 eelf32lppcnto.c:851
+#: eelf32lppcsim.c:851 eelf32ppc.c:851 eelf32ppc_fbsd.c:851
+#: eelf32ppchaiku.c:851 eelf32ppclinux.c:851 eelf32ppcnto.c:851
+#: eelf32ppcsim.c:851 eelf32ppcvxworks.c:811 eelf32ppcwindiss.c:851
#, c-format
msgid ""
" --ppc476-workaround [=pagesize]\n"
@@ -5261,38 +5361,38 @@ msgstr ""
" --ppc476-workaround [=taille-de-page]\n"
" Evite un bogue de cache sur ppc476\n"
-#: eelf32lppc.c:841 eelf32lppclinux.c:841 eelf32lppcnto.c:841
-#: eelf32lppcsim.c:841 eelf32ppc.c:841 eelf32ppc_fbsd.c:841
-#: eelf32ppclinux.c:841 eelf32ppcnto.c:841 eelf32ppcsim.c:841
-#: eelf32ppcvxworks.c:801 eelf32ppcwindiss.c:841
+#: eelf32lppc.c:855 eelf32lppclinux.c:855 eelf32lppcnto.c:855
+#: eelf32lppcsim.c:855 eelf32ppc.c:855 eelf32ppc_fbsd.c:855
+#: eelf32ppchaiku.c:855 eelf32ppclinux.c:855 eelf32ppcnto.c:855
+#: eelf32ppcsim.c:855 eelf32ppcvxworks.c:815 eelf32ppcwindiss.c:855
#, c-format
msgid " --no-ppc476-workaround Disable workaround\n"
msgstr " --no-ppc476-workaround Désactiver le contournement\n"
-#: eelf32lppc.c:844 eelf32lppclinux.c:844 eelf32lppcnto.c:844
-#: eelf32lppcsim.c:844 eelf32ppc.c:844 eelf32ppc_fbsd.c:844
-#: eelf32ppclinux.c:844 eelf32ppcnto.c:844 eelf32ppcsim.c:844
-#: eelf32ppcvxworks.c:804 eelf32ppcwindiss.c:844
+#: eelf32lppc.c:858 eelf32lppclinux.c:858 eelf32lppcnto.c:858
+#: eelf32lppcsim.c:858 eelf32ppc.c:858 eelf32ppc_fbsd.c:858
+#: eelf32ppchaiku.c:858 eelf32ppclinux.c:858 eelf32ppcnto.c:858
+#: eelf32ppcsim.c:858 eelf32ppcvxworks.c:818 eelf32ppcwindiss.c:858
#, c-format
msgid " --no-pic-fixup Don't edit non-pic to pic\n"
msgstr " --no-pic-fixup Ne pas éditer non-pic en pic\n"
-#: eelf32lppc.c:847 eelf32lppclinux.c:847 eelf32lppcnto.c:847
-#: eelf32lppcsim.c:847 eelf32ppc.c:847 eelf32ppc_fbsd.c:847
-#: eelf32ppclinux.c:847 eelf32ppcnto.c:847 eelf32ppcsim.c:847
-#: eelf32ppcvxworks.c:807 eelf32ppcwindiss.c:847
+#: eelf32lppc.c:861 eelf32lppclinux.c:861 eelf32lppcnto.c:861
+#: eelf32lppcsim.c:861 eelf32ppc.c:861 eelf32ppc_fbsd.c:861
+#: eelf32ppchaiku.c:861 eelf32ppclinux.c:861 eelf32ppcnto.c:861
+#: eelf32ppcsim.c:861 eelf32ppcvxworks.c:821 eelf32ppcwindiss.c:861
#, c-format
msgid " --vle-reloc-fixup Correct old object file 16A/16D relocation\n"
msgstr " --vle-reloc-fixup Corrige les relocalisations d'anciens fichiers objet 16A/16D\n"
-#: eelf32mcore.c:304
+#: eelf32mcore.c:306
#, c-format
msgid " --base_file <basefile> Generate a base file for relocatable DLLs\n"
msgstr " --base_file <fichier_de_base> Générer un fichier de base pour les DLL relocalisables\n"
-#: eelf32metag.c:717 eelf64lppc.c:1332 eelf64lppc_fbsd.c:1332 eelf64ppc.c:1332
-#: eelf64ppc_fbsd.c:1332 ehppaelf.c:577 ehppalinux.c:759 ehppanbsd.c:759
-#: ehppaobsd.c:759
+#: eelf32metag.c:719 eelf64lppc.c:1355 eelf64lppc_fbsd.c:1355 eelf64ppc.c:1355
+#: eelf64ppc_fbsd.c:1355 ehppaelf.c:579 ehppalinux.c:761 ehppanbsd.c:761
+#: ehppaobsd.c:761
#, c-format
msgid ""
" --stub-group-size=N Maximum size of a group of input sections that\n"
@@ -5313,7 +5413,7 @@ msgstr ""
" Les valeurs +/-1 indiquent que l'éditeur de liens doit\n"
" choisir des règlages par défaut appropriés.\n"
-#: eelf32rx.c:336
+#: eelf32rx.c:338
#, c-format
msgid ""
" --no-flag-mismatch-warnings Don't warn about objects with incompatible\n"
@@ -5322,7 +5422,7 @@ msgstr ""
" --no-flag-mismatch-warnings Ne pas avertir des objets ayant des paramètres\n"
" de boutisme ou de dsp incompatibles\n"
-#: eelf32rx.c:338
+#: eelf32rx.c:340
#, c-format
msgid ""
" --flag-mismatch-warnings Warn about objects with incompatible\n"
@@ -5331,7 +5431,7 @@ msgstr ""
" --flag-mismatch-warnings Avertir des objets ayant des paramètres\n"
" de boutisme, dsp ou ABI incompatibles\n"
-#: eelf32rx.c:340
+#: eelf32rx.c:342
#, c-format
msgid ""
" --ignore-lma Ignore segment LMAs [default]\n"
@@ -5340,7 +5440,7 @@ msgstr ""
" --ignore-lma Ignorer les LMAs de segment [défaut]\n"
" (par compatibilité avec Renesas Tools)\n"
-#: eelf32rx.c:342
+#: eelf32rx.c:344
#, c-format
msgid " --no-ignore-lma Don't ignore segment LMAs\n"
msgstr " --no-ignore-lma Ne pas ignorer les LMAs de segment\n"
@@ -5401,7 +5501,7 @@ msgstr "%F%P : échec de la création de la section .xtensa.info\n"
msgid "%F%P: Relaxation not supported with --enable-non-contiguous-regions.\n"
msgstr "%F%P : la relaxation n'est pas prise en charge avec --enable-non-contiguous-regions.\n"
-#: eelf32xtensa.c:2396
+#: eelf32xtensa.c:2398
#, c-format
msgid ""
" --size-opt When relaxing longcalls, prefer size\n"
@@ -5410,12 +5510,12 @@ msgstr ""
" --size-opt Lors de la relaxation d'appels longs, préfèrer l'optimisation\n"
" de la taille à l'alignement de branche cible\n"
-#: eelf32xtensa.c:2399
+#: eelf32xtensa.c:2401
#, c-format
msgid " --abi-windowed Choose windowed ABI for the output object\n"
msgstr " --abi-windowed Utilise l'ABI fenêtré pour l'object en sortie\n"
-#: eelf32xtensa.c:2401
+#: eelf32xtensa.c:2403
#, c-format
msgid " --abi-call0 Choose call0 ABI for the output object\n"
msgstr " --abi-call0 Utilise l'ABI call0 pour l'objet en sortie\n"
@@ -5424,7 +5524,7 @@ msgstr " --abi-call0 Utilise l'ABI call0 pour l'objet en sortie
msgid "%F%P: %pB: Instruction sets of object files incompatible\n"
msgstr "%F%P : %pB : jeu d'instructions des fichiers objet incompatibles\n"
-#: eelf64_ia64.c:490 eelf64_ia64_fbsd.c:490
+#: eelf64_ia64.c:492 eelf64_ia64_fbsd.c:492
#, c-format
msgid " --itanium Generate code for Intel Itanium processor\n"
msgstr " --itanium Générer du code pour les processeurs Itanium d'Intel\n"
@@ -5434,12 +5534,12 @@ msgstr " --itanium Générer du code pour les processeurs Ita
msgid "%F%P: can not init BFD: %E\n"
msgstr "%F%P : impossible d'initialiser le BFD : %E\n"
-#: eelf64_s390.c:533
+#: eelf64_s390.c:535
#, c-format
msgid " --s390-pgste Tell the kernel to allocate 4k page tables\n"
msgstr " --s390-pgste Dire au noyau d'allouer des tables de page de 4k\n"
-#: eelf64alpha.c:562 eelf64alpha_fbsd.c:562 eelf64alpha_nbsd.c:562
+#: eelf64alpha.c:564 eelf64alpha_fbsd.c:564 eelf64alpha_nbsd.c:564
#, c-format
msgid ""
" --taso Load executable in the lower 31-bit addressable\n"
@@ -5448,12 +5548,12 @@ msgstr ""
" --taso Charger l'exécutable dans les 31-bit bas de la plage\n"
" d'adresses virtuelles addressables\n"
-#: eelf64alpha.c:565 eelf64alpha_fbsd.c:565 eelf64alpha_nbsd.c:565
+#: eelf64alpha.c:567 eelf64alpha_fbsd.c:567 eelf64alpha_nbsd.c:567
#, c-format
msgid " --secureplt Force PLT in text segment\n"
msgstr " --secureplt Force le PLT dans le segment texte\n"
-#: eelf64alpha.c:567 eelf64alpha_fbsd.c:567 eelf64alpha_nbsd.c:567
+#: eelf64alpha.c:569 eelf64alpha_fbsd.c:569 eelf64alpha_nbsd.c:569
#, c-format
msgid " --no-secureplt Force PLT in data segment\n"
msgstr " --no-secureplt Force le PLT dans le segment de données\n"
@@ -5472,71 +5572,71 @@ msgstr "%X%P : le script de l'éditeur de liens sépare .got et .toc\n"
msgid "%P: .init/.fini fragments use differing TOC pointers\n"
msgstr "%P : les fragments .init/.fini utilisent des pointeurs TOC différents\n"
-#: eelf64lppc.c:1224 eelf64lppc_fbsd.c:1224 eelf64ppc.c:1224
-#: eelf64ppc_fbsd.c:1224
+#: eelf64lppc.c:1242 eelf64lppc_fbsd.c:1242 eelf64ppc.c:1242
+#: eelf64ppc_fbsd.c:1242
msgid "%F%P: invalid --power10-stubs argument `%s'\n"
msgstr "%F%P : l'argument « %s » de --power10-stubs n'est pas valable\n"
-#: eelf64lppc.c:1342 eelf64ppc.c:1342
+#: eelf64lppc.c:1365 eelf64ppc.c:1365
#, c-format
msgid " --plt-static-chain PLT call stubs should load r11 (default)\n"
msgstr " --plt-static-chain Les espace d'amorçage d'appel PLT doivent charger r11 (défaut)\n"
-#: eelf64lppc.c:1345 eelf64ppc.c:1345
+#: eelf64lppc.c:1368 eelf64ppc.c:1368
#, c-format
msgid " --no-plt-static-chain PLT call stubs should not load r11\n"
msgstr " --no-plt-static-chain Les espace d'amorçage d'appel PLT ne doivent pas charger r11\n"
-#: eelf64lppc.c:1348 eelf64lppc_fbsd.c:1348 eelf64ppc.c:1348
-#: eelf64ppc_fbsd.c:1348
+#: eelf64lppc.c:1371 eelf64lppc_fbsd.c:1371 eelf64ppc.c:1371
+#: eelf64ppc_fbsd.c:1371
#, c-format
msgid " --plt-thread-safe PLT call stubs with load-load barrier\n"
msgstr " --plt-thread-safe Espace d'amorçage d'appel PLT avec des barrières chargement-chargement\n"
-#: eelf64lppc.c:1351 eelf64lppc_fbsd.c:1351 eelf64ppc.c:1351
-#: eelf64ppc_fbsd.c:1351
+#: eelf64lppc.c:1374 eelf64lppc_fbsd.c:1374 eelf64ppc.c:1374
+#: eelf64ppc_fbsd.c:1374
#, c-format
msgid " --no-plt-thread-safe PLT call stubs without barrier\n"
msgstr " --no-plt-thread-safe Espaces d'amorçage d'appel PLT sans barrières\n"
-#: eelf64lppc.c:1354 eelf64lppc_fbsd.c:1354 eelf64ppc.c:1354
-#: eelf64ppc_fbsd.c:1354
+#: eelf64lppc.c:1377 eelf64lppc_fbsd.c:1377 eelf64ppc.c:1377
+#: eelf64ppc_fbsd.c:1377
#, c-format
msgid " --plt-align [=<align>] Align PLT call stubs to fit cache lines\n"
msgstr " --plt-align [=<align>] Aligner les espaces d'amorçage d'appel PLT pour tenir dans les lignes de cache\n"
-#: eelf64lppc.c:1360 eelf64lppc_fbsd.c:1360 eelf64ppc.c:1360
-#: eelf64ppc_fbsd.c:1360
+#: eelf64lppc.c:1383 eelf64lppc_fbsd.c:1383 eelf64ppc.c:1383
+#: eelf64ppc_fbsd.c:1383
#, c-format
msgid " --plt-localentry Optimize calls to ELFv2 localentry:0 functions\n"
msgstr " --plt-localentry Optimise les appels aux fonctions ELFv2 localentry:0\n"
-#: eelf64lppc.c:1363 eelf64lppc_fbsd.c:1363 eelf64ppc.c:1363
-#: eelf64ppc_fbsd.c:1363
+#: eelf64lppc.c:1386 eelf64lppc_fbsd.c:1386 eelf64ppc.c:1386
+#: eelf64ppc_fbsd.c:1386
#, c-format
msgid " --no-plt-localentry Don't optimize ELFv2 calls\n"
msgstr " --no-plt-localentry Ne pas optimiser les appels ELFv2\n"
-#: eelf64lppc.c:1366 eelf64lppc_fbsd.c:1366 eelf64ppc.c:1366
-#: eelf64ppc_fbsd.c:1366
+#: eelf64lppc.c:1389 eelf64lppc_fbsd.c:1389 eelf64ppc.c:1389
+#: eelf64ppc_fbsd.c:1389
#, c-format
msgid " --power10-stubs [=auto] Use Power10 PLT call stubs (default auto)\n"
msgstr " --power10-stubs [=auto] Utiliser les espaces d'amorçage d'appel PLT Power10 (défaut auto)\n"
-#: eelf64lppc.c:1369 eelf64lppc_fbsd.c:1369 eelf64ppc.c:1369
-#: eelf64ppc_fbsd.c:1369
+#: eelf64lppc.c:1392 eelf64lppc_fbsd.c:1392 eelf64ppc.c:1392
+#: eelf64ppc_fbsd.c:1392
#, c-format
msgid " --no-pcrel-optimize Don't perform R_PPC64_PCREL_OPT optimization\n"
msgstr " --no-pcrel-optimize Ne pas effectuer l'optimisation R_PPC64_PCREL_OPT\n"
-#: eelf64lppc.c:1372 eelf64lppc_fbsd.c:1372 eelf64ppc.c:1372
-#: eelf64ppc_fbsd.c:1372
+#: eelf64lppc.c:1395 eelf64lppc_fbsd.c:1395 eelf64ppc.c:1395
+#: eelf64ppc_fbsd.c:1395
#, c-format
msgid " --no-power10-stubs Don't use Power10 PLT call stubs\n"
msgstr " --no-power10-stubs Ne pas utilser les espaces d'amorçage d'appel Power10\n"
-#: eelf64lppc.c:1381 eelf64lppc_fbsd.c:1381 eelf64ppc.c:1381
-#: eelf64ppc_fbsd.c:1381
+#: eelf64lppc.c:1404 eelf64lppc_fbsd.c:1404 eelf64ppc.c:1404
+#: eelf64ppc_fbsd.c:1404
#, c-format
msgid ""
" --dotsyms For every version pattern \"foo\" in a version\n"
@@ -5549,14 +5649,14 @@ msgstr ""
" de fonction soient traités identiquement aux symboles de description \n"
" de fonction. Activé pas défauts.\n"
-#: eelf64lppc.c:1387 eelf64lppc_fbsd.c:1387 eelf64ppc.c:1387
-#: eelf64ppc_fbsd.c:1387
+#: eelf64lppc.c:1410 eelf64lppc_fbsd.c:1410 eelf64ppc.c:1410
+#: eelf64ppc_fbsd.c:1410
#, c-format
msgid " --no-dotsyms Don't do anything special in version scripts\n"
msgstr " --no-dotsyms Ne rien faire de spécial dans les scripts de version\n"
-#: eelf64lppc.c:1390 eelf64lppc_fbsd.c:1390 eelf64ppc.c:1390
-#: eelf64ppc_fbsd.c:1390
+#: eelf64lppc.c:1413 eelf64lppc_fbsd.c:1413 eelf64ppc.c:1413
+#: eelf64ppc_fbsd.c:1413
#, c-format
msgid ""
" --save-restore-funcs Provide register save and restore routines used\n"
@@ -5567,56 +5667,56 @@ msgstr ""
" par le code produit avec gcc -Os. Activé par défault pour les liens\n"
" finaux normaux, désactivé pour ld -r.\n"
-#: eelf64lppc.c:1395 eelf64lppc_fbsd.c:1395 eelf64ppc.c:1395
-#: eelf64ppc_fbsd.c:1395
+#: eelf64lppc.c:1418 eelf64lppc_fbsd.c:1418 eelf64ppc.c:1418
+#: eelf64ppc_fbsd.c:1418
#, c-format
msgid " --no-save-restore-funcs Don't provide these routines\n"
msgstr " --no-save-restore-funcs Ne pas fournir ces routines\n"
-#: eelf64lppc.c:1401 eelf64lppc_fbsd.c:1401 eelf64ppc.c:1401
-#: eelf64ppc_fbsd.c:1401
+#: eelf64lppc.c:1424 eelf64lppc_fbsd.c:1424 eelf64ppc.c:1424
+#: eelf64ppc_fbsd.c:1424
#, c-format
msgid " --tls-get-addr-optimize Force use of special __tls_get_addr call\n"
msgstr " --tls-get-addr-optimize Force l'utilisation d'un appel spécial à __tls_get_addr\n"
-#: eelf64lppc.c:1407 eelf64lppc_fbsd.c:1407 eelf64ppc.c:1407
-#: eelf64ppc_fbsd.c:1407
+#: eelf64lppc.c:1430 eelf64lppc_fbsd.c:1430 eelf64ppc.c:1430
+#: eelf64ppc_fbsd.c:1430
#, c-format
msgid " --tls-get-addr-regsave Force register save __tls_get_addr stub\n"
msgstr " --tls-get-addr-regsave Forcer la sauvegarde dans un registre de l'espace d'amorçage __tls_get_addr\n"
-#: eelf64lppc.c:1410 eelf64lppc_fbsd.c:1410 eelf64ppc.c:1410
-#: eelf64ppc_fbsd.c:1410
+#: eelf64lppc.c:1433 eelf64lppc_fbsd.c:1433 eelf64ppc.c:1433
+#: eelf64ppc_fbsd.c:1433
#, c-format
msgid " --no-tls-get-addr-regsave Don't use register save __tls_get_addr stub\n"
msgstr " --no-tls-get-addr-regsave Ne pas forcer la sauvegarde dans un registre de l'espace d'amorçage __tls_get_addr\\n\n"
-#: eelf64lppc.c:1413 eelf64lppc_fbsd.c:1413 eelf64ppc.c:1413
-#: eelf64ppc_fbsd.c:1413
+#: eelf64lppc.c:1436 eelf64lppc_fbsd.c:1436 eelf64ppc.c:1436
+#: eelf64ppc_fbsd.c:1436
#, c-format
msgid " --no-opd-optimize Don't optimize the OPD section\n"
msgstr " --no-opd-optimize Ne pas optimiser la section OPD\n"
-#: eelf64lppc.c:1419 eelf64lppc_fbsd.c:1419 eelf64ppc.c:1419
-#: eelf64ppc_fbsd.c:1419
+#: eelf64lppc.c:1442 eelf64lppc_fbsd.c:1442 eelf64ppc.c:1442
+#: eelf64ppc_fbsd.c:1442
#, c-format
msgid " --no-toc-optimize Don't optimize the TOC section\n"
msgstr " --no-toc-optimize Ne pas optimiser la section TOC\n"
-#: eelf64lppc.c:1422 eelf64lppc_fbsd.c:1422 eelf64ppc.c:1422
-#: eelf64ppc_fbsd.c:1422
+#: eelf64lppc.c:1445 eelf64lppc_fbsd.c:1445 eelf64ppc.c:1445
+#: eelf64ppc_fbsd.c:1445
#, c-format
msgid " --no-multi-toc Disallow automatic multiple toc sections\n"
msgstr " --no-multi-toc Empêcher de multiples sections toc automatiques\n"
-#: eelf64lppc.c:1425 eelf64lppc_fbsd.c:1425 eelf64ppc.c:1425
-#: eelf64ppc_fbsd.c:1425
+#: eelf64lppc.c:1448 eelf64lppc_fbsd.c:1448 eelf64ppc.c:1448
+#: eelf64ppc_fbsd.c:1448
#, c-format
msgid " --no-toc-sort Don't sort TOC and GOT sections\n"
msgstr " --no-toc-sort Ne pas trier les sections TOC et GOT\n"
-#: eelf64lppc.c:1428 eelf64lppc_fbsd.c:1428 eelf64ppc.c:1428
-#: eelf64ppc_fbsd.c:1428
+#: eelf64lppc.c:1451 eelf64lppc_fbsd.c:1451 eelf64ppc.c:1451
+#: eelf64ppc_fbsd.c:1451
#, c-format
msgid ""
" --non-overlapping-opd Canonicalize .opd, so that there are no\n"
@@ -5625,12 +5725,12 @@ msgstr ""
" --non-overlapping-opd Canoniser .opd, pour que les entrées\n"
" .opd ne se superposent pas.\n"
-#: eelf64lppc_fbsd.c:1342 eelf64ppc_fbsd.c:1342
+#: eelf64lppc_fbsd.c:1365 eelf64ppc_fbsd.c:1365
#, c-format
msgid " --plt-static-chain PLT call stubs should load r111\n"
msgstr " --plt-static-chain Les espaces d'amorçage d'appel PLT doivent charger r111\n"
-#: eelf64lppc_fbsd.c:1345 eelf64ppc_fbsd.c:1345
+#: eelf64lppc_fbsd.c:1368 eelf64ppc_fbsd.c:1368
#, c-format
msgid " --no-plt-static-chain PLT call stubs should not load r11 (default)\n"
msgstr " --no-plt-static-chain Les espaces d'amorçage d'appel PLT ne doivent pas charger r11 (défaut)\n"
@@ -5648,29 +5748,29 @@ msgstr "%X%P : trop de registres généraux : %u, maximum 223\n"
msgid "%F%P: can't finalize linker-allocated global registers\n"
msgstr "%F%P : impossible de terminer les registres globaux alloués par l'éditeur de liens\n"
-#: eelf_x86_64.c:5608 eelf_x86_64_cloudabi.c:573 eelf_x86_64_fbsd.c:573
-#: eelf_x86_64_sol2.c:705
+#: eelf_x86_64.c:5636 eelf_x86_64_cloudabi.c:579 eelf_x86_64_fbsd.c:579
+#: eelf_x86_64_haiku.c:579 eelf_x86_64_sol2.c:711
msgid "%F%P: invalid option for -z lam-u48-report=: %s\n"
msgstr "%F%P : option non valable pour -z lam-u48-report=: %s\n"
-#: eelf_x86_64.c:5622 eelf_x86_64_cloudabi.c:587 eelf_x86_64_fbsd.c:587
-#: eelf_x86_64_sol2.c:719
+#: eelf_x86_64.c:5650 eelf_x86_64_cloudabi.c:593 eelf_x86_64_fbsd.c:593
+#: eelf_x86_64_haiku.c:593 eelf_x86_64_sol2.c:725
msgid "%F%P: invalid option for -z lam-u57-report=: %s\n"
msgstr "%F%P : option non valable pour -z lam-u57-report=: %s\n"
-#: eelf_x86_64.c:5643 eelf_x86_64_cloudabi.c:608 eelf_x86_64_fbsd.c:608
-#: eelf_x86_64_sol2.c:740
+#: eelf_x86_64.c:5671 eelf_x86_64_cloudabi.c:614 eelf_x86_64_fbsd.c:614
+#: eelf_x86_64_haiku.c:614 eelf_x86_64_sol2.c:746
msgid "%F%P: invalid option for -z lam-report=: %s\n"
msgstr "%F%P : option non valable pour -z lam-report=: %s\n"
-#: eelf_x86_64.c:5712 eelf_x86_64_cloudabi.c:677 eelf_x86_64_fbsd.c:677
-#: eelf_x86_64_sol2.c:809
+#: eelf_x86_64.c:5749 eelf_x86_64_cloudabi.c:692 eelf_x86_64_fbsd.c:692
+#: eelf_x86_64_haiku.c:692 eelf_x86_64_sol2.c:824
#, c-format
msgid " -z lam-u48 Generate GNU_PROPERTY_X86_FEATURE_1_LAM_U48\n"
msgstr " -z lam-u48 Générer GNU_PROPERTY_X86_FEATURE_1_LAM_U48\n"
-#: eelf_x86_64.c:5714 eelf_x86_64_cloudabi.c:679 eelf_x86_64_fbsd.c:679
-#: eelf_x86_64_sol2.c:811
+#: eelf_x86_64.c:5751 eelf_x86_64_cloudabi.c:694 eelf_x86_64_fbsd.c:694
+#: eelf_x86_64_haiku.c:694 eelf_x86_64_sol2.c:826
#, c-format
msgid ""
" -z lam-u48-report=[none|warning|error] (default: none)\n"
@@ -5679,14 +5779,14 @@ msgstr ""
" -z lam-u48-report=[none|warning|error] (défaut : none)\n"
" Signaler les propriétés LAM_U48 manquantes\n"
-#: eelf_x86_64.c:5717 eelf_x86_64_cloudabi.c:682 eelf_x86_64_fbsd.c:682
-#: eelf_x86_64_sol2.c:814
+#: eelf_x86_64.c:5754 eelf_x86_64_cloudabi.c:697 eelf_x86_64_fbsd.c:697
+#: eelf_x86_64_haiku.c:697 eelf_x86_64_sol2.c:829
#, c-format
msgid " -z lam-u57 Generate GNU_PROPERTY_X86_FEATURE_1_LAM_U57\n"
msgstr " -z lam-u57 Générer GNU_PROPERTY_X86_FEATURE_1_LAM_U57\n"
-#: eelf_x86_64.c:5719 eelf_x86_64_cloudabi.c:684 eelf_x86_64_fbsd.c:684
-#: eelf_x86_64_sol2.c:816
+#: eelf_x86_64.c:5756 eelf_x86_64_cloudabi.c:699 eelf_x86_64_fbsd.c:699
+#: eelf_x86_64_haiku.c:699 eelf_x86_64_sol2.c:831
#, c-format
msgid ""
" -z lam-u57-report=[none|warning|error] (default: none)\n"
@@ -5695,8 +5795,8 @@ msgstr ""
" -z lam-u57-report=[none|warning|error] (défaut : none)\n"
" Signaler les propriétés LAM_U57 manquantes\n"
-#: eelf_x86_64.c:5722 eelf_x86_64_cloudabi.c:687 eelf_x86_64_fbsd.c:687
-#: eelf_x86_64_sol2.c:819
+#: eelf_x86_64.c:5759 eelf_x86_64_cloudabi.c:702 eelf_x86_64_fbsd.c:702
+#: eelf_x86_64_haiku.c:702 eelf_x86_64_sol2.c:834
#, c-format
msgid ""
" -z lam-report=[none|warning|error] (default: none)\n"
@@ -5705,8 +5805,8 @@ msgstr ""
" -z lam-report=[none|warning|error] (défaut : none)\n"
" Signaler les propriétés LAM_U48 et LAM_U57 manquantes\n"
-#: eelf_x86_64.c:5726 eelf_x86_64_cloudabi.c:691 eelf_x86_64_fbsd.c:691
-#: eelf_x86_64_sol2.c:823
+#: eelf_x86_64.c:5768 eelf_x86_64_cloudabi.c:711 eelf_x86_64_fbsd.c:711
+#: eelf_x86_64_haiku.c:711 eelf_x86_64_sol2.c:843
#, c-format
msgid " -z bndplt Always generate BND prefix in PLT entries\n"
msgstr " -z bndplt Toujours générer les préfixes BND dans les entrées PLT\n"
@@ -5715,7 +5815,7 @@ msgstr " -z bndplt Toujours générer les préfixes BND dans
msgid "%X%P: can not set gp\n"
msgstr "%X%P : impossible de fixer\n"
-#: ehppaelf.c:573 ehppalinux.c:755 ehppanbsd.c:755 ehppaobsd.c:755
+#: ehppaelf.c:575 ehppalinux.c:757 ehppanbsd.c:757 ehppaobsd.c:757
#, c-format
msgid ""
" --multi-subspace Generate import and export stubs to support\n"
@@ -5838,7 +5938,7 @@ msgstr "%P : avertissement : la taille de la région mémoire 'fenêtre' n'est
msgid "%X%P: changing output format whilst linking is not supported\n"
msgstr "%X%P : changer le format de la sortie lors de l'édition de liens n'est pas pris en charge\n"
-#: em68hc11elf.c:570 em68hc11elfb.c:570 em68hc12elf.c:570 em68hc12elfb.c:570
+#: em68hc11elf.c:572 em68hc11elfb.c:572 em68hc12elf.c:572 em68hc12elfb.c:572
#, c-format
msgid ""
" --no-trampoline Do not generate the far trampolines used to call\n"
@@ -5847,7 +5947,7 @@ msgstr ""
" --no-trampoline Ne pas générer les trampolines lointains utilisés pour appeler\n"
" une fonction éloignée utilisant jsr ou bsr\n"
-#: em68hc11elf.c:573 em68hc11elfb.c:573 em68hc12elf.c:573 em68hc12elfb.c:573
+#: em68hc11elf.c:575 em68hc11elfb.c:575 em68hc12elf.c:575 em68hc12elfb.c:575
#, c-format
msgid ""
" --bank-window NAME Specify the name of the memory region describing\n"
@@ -5860,11 +5960,11 @@ msgstr ""
msgid "%F%P: %pB: all input objects must be ELF for --embedded-relocs\n"
msgstr "%F%P : %pB : tous les objets d'entrée doivent être ELF pour --embedded-relocs\n"
-#: em68kelf.c:616 em68kelfnbsd.c:616
+#: em68kelf.c:618 em68kelfnbsd.c:618
msgid "%P: unrecognized --got argument '%s'\n"
msgstr "%P : argument --got non reconnue\n"
-#: em68kelf.c:629 em68kelfnbsd.c:629
+#: em68kelf.c:631 em68kelfnbsd.c:631
#, c-format
msgid " --got=<type> Specify GOT handling scheme\n"
msgstr " --got=<type> Specifie le mécanisme de gestion GOT\n"
@@ -5938,48 +6038,48 @@ msgstr "%P : erreur : argument non reconnu pour --data-region= option : \"%s\
msgid "%F%P: %pB: ABI version of object files mismatched\n"
msgstr "%F%P : %pB : versions ABI des fichiers objets non concordantes\n"
-#: ends32belf.c:404 ends32belf16m.c:404 ends32belf_linux.c:537 ends32elf.c:404
-#: ends32elf16m.c:404 ends32elf_linux.c:537
+#: ends32belf.c:406 ends32belf16m.c:406 ends32belf_linux.c:539 ends32elf.c:406
+#: ends32elf16m.c:406 ends32elf_linux.c:539
msgid "%P: --mbaseline is not used anymore\n"
msgstr "%P : --mbaseline n'est désormais plus utilisé\n"
-#: ends32belf.c:415 ends32belf16m.c:415 ends32belf_linux.c:548 ends32elf.c:415
-#: ends32elf16m.c:415 ends32elf_linux.c:548
+#: ends32belf.c:417 ends32belf16m.c:417 ends32belf_linux.c:550 ends32elf.c:417
+#: ends32elf16m.c:417 ends32elf_linux.c:550
msgid "%P: --relax-[no-]reduce-fp-updat is not used anymore\n"
msgstr "%P : --relax-[no-]reduce-fp-updat n'est désormais plus utilisé\n"
-#: ends32belf.c:419 ends32belf16m.c:419 ends32belf_linux.c:552 ends32elf.c:419
-#: ends32elf16m.c:419 ends32elf_linux.c:552
+#: ends32belf.c:421 ends32belf16m.c:421 ends32belf_linux.c:554 ends32elf.c:421
+#: ends32elf16m.c:421 ends32elf_linux.c:554
msgid "%P: missing file for --mexport-symbols\n"
msgstr "%P : fichier manquant pour --mexport-symbols\n"
-#: ends32belf.c:432 ends32belf.c:441 ends32belf16m.c:432 ends32belf16m.c:441
-#: ends32belf_linux.c:565 ends32belf_linux.c:574 ends32elf.c:432
-#: ends32elf.c:441 ends32elf16m.c:432 ends32elf16m.c:441 ends32elf_linux.c:565
-#: ends32elf_linux.c:574
+#: ends32belf.c:434 ends32belf.c:443 ends32belf16m.c:434 ends32belf16m.c:443
+#: ends32belf_linux.c:567 ends32belf_linux.c:576 ends32elf.c:434
+#: ends32elf.c:443 ends32elf16m.c:434 ends32elf16m.c:443 ends32elf_linux.c:567
+#: ends32elf_linux.c:576
msgid "%P: valid arguments to --mhyper-relax=(low|medium|high)\n"
msgstr "%P : arguments valides de --mhyper-relax=(low|medium|high)\n"
-#: ends32belf.c:461 ends32belf16m.c:461 ends32belf_linux.c:594 ends32elf.c:461
-#: ends32elf16m.c:461 ends32elf_linux.c:594
+#: ends32belf.c:463 ends32belf16m.c:463 ends32belf_linux.c:596 ends32elf.c:463
+#: ends32elf16m.c:463 ends32elf_linux.c:596
#, c-format
msgid " --m[no-]fp-as-gp Disable/enable fp-as-gp relaxation\n"
msgstr " --m[no-]fp-as-gp Désactiver/activer la relaxation fp-as-gp\n"
-#: ends32belf.c:463 ends32belf16m.c:463 ends32belf_linux.c:596 ends32elf.c:463
-#: ends32elf16m.c:463 ends32elf_linux.c:596
+#: ends32belf.c:465 ends32belf16m.c:465 ends32belf_linux.c:598 ends32elf.c:465
+#: ends32elf16m.c:465 ends32elf_linux.c:598
#, c-format
msgid " --mexport-symbols=FILE Exporting symbols in linker script\n"
msgstr " --mexport-symbols=FILE Exporter les symboles dans le script de l'éditeur de liens\n"
-#: ends32belf.c:465 ends32belf16m.c:465 ends32belf_linux.c:598 ends32elf.c:465
-#: ends32elf16m.c:465 ends32elf_linux.c:598
+#: ends32belf.c:467 ends32belf16m.c:467 ends32belf_linux.c:600 ends32elf.c:467
+#: ends32elf16m.c:467 ends32elf_linux.c:600
#, c-format
msgid " --mhyper-relax=level Adjust relax level (low|medium|high). default: medium\n"
msgstr " --mhyper-relax=level Ajuster le niveau de relaxation (low|medium|high). défaut : medium\n"
-#: ends32belf.c:467 ends32belf16m.c:467 ends32belf_linux.c:600 ends32elf.c:467
-#: ends32elf16m.c:467 ends32elf_linux.c:600
+#: ends32belf.c:469 ends32belf16m.c:469 ends32belf_linux.c:602 ends32elf.c:469
+#: ends32elf16m.c:469 ends32elf_linux.c:602
#, c-format
msgid " --m[no-]tlsdesc-trampoline Disable/enable TLS DESC trampoline\n"
msgstr " --m[no-]tlsdesc-trampoline Désactiver/activer les trampolines TLS DESC\n"
@@ -6012,75 +6112,3 @@ msgstr " --format 0|1|2 Précise quelle version de COFF utiliser\n
#: etic3xcoff.c:91 etic3xcoff_onchip.c:91 etic4xcoff.c:91 etic54xcoff.c:91
msgid "%F%P: invalid COFF format version %s\n"
msgstr "%F%P : la version de format %s pour COOF est invalide\n"
-
-#~ msgid "%F%P: cannot link with CTF in %pB: %s\n"
-#~ msgstr "%F%P : impossible d'éditer les liens avec CTF dans %pB : %s\n"
-
-#~ msgid "running: %s \"%s\" \"%s\" \"%s\" \"%s\"\n"
-#~ msgstr "exécute : %s \"%s\" \"%s\" \"%s\" \"%s\"\n"
-
-#~ msgid " --[no-]branch-stub\n"
-#~ msgstr " --[no-]branch-stub\n"
-
-#~ msgid " --stub-group-size=N\n"
-#~ msgstr " --stub-group-size=N\n"
-
-#~ msgid "%P: warning: unknown machine type %u"
-#~ msgstr "%P : avertissement : type de machine %u inconnu"
-
-#~ msgid "%P: warning: mixing ADL and Z80 mode binaries, objdump may generate invalid output"
-#~ msgstr "%P : avertissement : mélange de binaires de mode ADL et Z80, objdump générera peut-être une sortie non valide"
-
-#~ msgid "%P: warning: incompatible object files linked, result code might not work"
-#~ msgstr "%P : avertissement : les liens de fichiers objets non compatibles ont été édités, le code en résultant pourrait ne pas fonctionner"
-
-#~ msgid " --fix-cortex-a53-843419 Fix erratum 843419\n"
-#~ msgstr " --fix-cortex-a53-843419 Corrige l'erratum 843419\n"
-
-#~ msgid "%X%P: .gnu.hash is incompatible with the MIPS ABI\n"
-#~ msgstr "%X%P : .gnu.hash est incompatible avec l'ABI MIPS\n"
-
-#~ msgid " --no-wchar-size-warning Don't warn about objects with incompatible wchar_t sizes\n"
-#~ msgstr " --no-wchar-size-warning Ne pas avertir des objets avec des tailles de wchar_t incompatibles\n"
-
-#~ msgid "%P: %pB: must use -fpic to compile this file for shared object or PIE\n"
-#~ msgstr "%P : %pB : -fpic doit être utilisé pour compiler ce fichier pour des objets partagés ou PIE\n"
-
-#~ msgid "%P: missing file for --mexport-ex9=<file>\n"
-#~ msgstr "%P : fichier manquant pour --mexport-ex9=<fichier>\n"
-
-#~ msgid "%F%P: cannot open ex9 export file %s\n"
-#~ msgstr "%F%P : impossible d'ouvrier le fichier d'export ex9 %s\n"
-
-#~ msgid "%P: missing file for --mimport-ex9=<file>\n"
-#~ msgstr "%P : fichier manquant pour --mimport-ex9=<fichier>\n"
-
-#~ msgid "%F%P: cannot open ex9 import file %s\n"
-#~ msgstr "%F%P : impossible d'ouvrir le ficher d'import ex9 %s\n"
-
-#~ msgid "%F%P: the range of ex9_limit must between 1 and 511\n"
-#~ msgstr "%F%P : la plage de ex9_limit doit être comprise entre 1 et 511\n"
-
-#~ msgid " --m[no-]ex9 Disable/enable link-time EX9 relaxation\n"
-#~ msgstr " --m[no-]ex9 Désactiver/activer la relaxation EX9 lors de l'édition de liens\n"
-
-#~ msgid " --mexport-ex9=FILE Export EX9 table after linking\n"
-#~ msgstr " --mexport-ex9=FICHIER Exporter la table EX9 après l'édition de liens\n"
-
-#~ msgid " --mimport-ex9=FILE Import Ex9 table for EX9 relaxation\n"
-#~ msgstr " --mimport-ex9=FILE Importer la table EX9 pour la relaxation EX9\n"
-
-#~ msgid " --mupdate-ex9 Update existing EX9 table\n"
-#~ msgstr " --mupdate-ex9 Mettre à jour la table EX9 existante\n"
-
-#~ msgid " --mex9-limit=NUM Maximum number of entries in ex9 table\n"
-#~ msgstr " --mex9-limit=NOM Nombre maximal d'entrées dans la table EX9\n"
-
-#~ msgid " --mex9-loop-aware Avoid generate EX9 instruction inside loop\n"
-#~ msgstr " --mex9-loop-aware Eviter la génération d'instructions EX9 à l'intérieur de boucles\n"
-
-#~ msgid " --m[no-]ifc Disable/enable link-time IFC optimization\n"
-#~ msgstr " --m[no-]ifc Désactive/activer les optimisations IFC lors de l'édition de liens\n"
-
-#~ msgid " --mifc-loop-aware Avoid generate IFC instruction inside loop\n"
-#~ msgstr " --mifc-loop-aware Evite la génération d'instructions IFC à l'intérieur de boucles\n"
diff --git a/ld/po/ld.pot b/ld/po/ld.pot
index aa88619fd89..46781511e1c 100644
--- a/ld/po/ld.pot
+++ b/ld/po/ld.pot
@@ -7,8 +7,8 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: bug-binutils@gnu.org\n"
-"POT-Creation-Date: 2021-08-11 10:49+0100\n"
+"Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n"
+"POT-Creation-Date: 2022-01-22 12:22+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -56,8 +56,8 @@ msgstr ""
msgid "%P: symbol `%pT' missing from main hash table\n"
msgstr ""
-#: ldcref.c:517 ldcref.c:628 ldmain.c:1304 ldmisc.c:336 pe-dll.c:737
-#: pe-dll.c:1315 pe-dll.c:1436 pe-dll.c:1562 earm_wince_pe.c:1486
+#: ldcref.c:517 ldcref.c:628 ldmain.c:1304 ldmisc.c:336 pe-dll.c:738
+#: pe-dll.c:1316 pe-dll.c:1437 pe-dll.c:1563 earm_wince_pe.c:1486
#: earm_wince_pe.c:1693 earmpe.c:1486 earmpe.c:1693 ei386pe.c:1486
#: ei386pe.c:1693 ei386pe_posix.c:1486 ei386pe_posix.c:1693 ei386pep.c:1475
#: emcorepe.c:1486 emcorepe.c:1693 eshpe.c:1486 eshpe.c:1693
@@ -107,142 +107,146 @@ msgstr ""
msgid "%P: warning: -z dynamic-undefined-weak ignored\n"
msgstr ""
-#: ldelf.c:98
+#: ldelf.c:91
+msgid "%F%P: common page size (0x%v) > maximum page size (0x%v)\n"
+msgstr ""
+
+#: ldelf.c:117
msgid "%F%P: %pB: --just-symbols may not be used on DSO\n"
msgstr ""
-#: ldelf.c:200
+#: ldelf.c:219
msgid "%P: %pB: bfd_stat failed: %E\n"
msgstr ""
-#: ldelf.c:241
+#: ldelf.c:260
msgid "%P: warning: %s, needed by %pB, may conflict with %s\n"
msgstr ""
-#: ldelf.c:261 ldfile.c:133
+#: ldelf.c:280 ldfile.c:133
#, c-format
msgid "attempt to open %s failed\n"
msgstr ""
-#: ldelf.c:298
+#: ldelf.c:317
msgid "%F%P: %pB: bfd_elf_get_bfd_needed_list failed: %E\n"
msgstr ""
-#: ldelf.c:346
+#: ldelf.c:365
msgid "%F%P: %pB: bfd_stat failed: %E\n"
msgstr ""
-#: ldelf.c:352
+#: ldelf.c:371
#, c-format
msgid "found %s at %s\n"
msgstr ""
-#: ldelf.c:385 ldlang.c:3149 ldlang.c:3163
+#: ldelf.c:404 ldlang.c:3159 ldlang.c:3173
msgid "%F%P: %pB: error adding symbols: %E\n"
msgstr ""
#. We only issue an "unrecognised" message in verbose mode
#. as the $<foo> token might be a legitimate component of
#. a path name in the target's file system.
-#: ldelf.c:572
+#: ldelf.c:591
#, c-format
msgid "unrecognised or unsupported token '%s' in search path\n"
msgstr ""
-#: ldelf.c:1016
+#: ldelf.c:1035
msgid "%F%P: %s: can't open for writing: %E\n"
msgstr ""
-#: ldelf.c:1054
+#: ldelf.c:1081
msgid "%F%P: cannot use executable file '%pB' as input to a link\n"
msgstr ""
-#: ldelf.c:1108
+#: ldelf.c:1135
msgid ""
"%F%P: compact frame descriptions incompatible with DWARF2 .eh_frame from "
"%pB\n"
msgstr ""
-#: ldelf.c:1144
+#: ldelf.c:1171
msgid ""
"%P: warning: cannot create .eh_frame_hdr section, --eh-frame-hdr ignored\n"
msgstr ""
-#: ldelf.c:1200
+#: ldelf.c:1227
#, c-format
msgid "%s needed by %pB\n"
msgstr ""
-#: ldelf.c:1309
+#: ldelf.c:1336
msgid ""
"%P: warning: %s, needed by %pB, not found (try using -rpath or -rpath-link)\n"
msgstr ""
-#: ldelf.c:1322
+#: ldelf.c:1349
msgid "%F%P: failed to add DT_NEEDED dynamic tag\n"
msgstr ""
-#: ldelf.c:1330
+#: ldelf.c:1357
msgid "%F%P: failed to parse EH frame entries\n"
msgstr ""
-#: ldelf.c:1369
+#: ldelf.c:1396
msgid "%P: warning: .note.gnu.build-id section discarded, --build-id ignored\n"
msgstr ""
-#: ldelf.c:1415 earm_wince_pe.c:1277 earmpe.c:1277 ei386pe.c:1277
+#: ldelf.c:1445 earm_wince_pe.c:1277 earmpe.c:1277 ei386pe.c:1277
#: ei386pe_posix.c:1277 ei386pep.c:1284 emcorepe.c:1277 eshpe.c:1277
msgid "%P: warning: unrecognized --build-id style ignored\n"
msgstr ""
-#: ldelf.c:1433
+#: ldelf.c:1464
msgid ""
"%P: warning: cannot create .note.gnu.build-id section, --build-id ignored\n"
msgstr ""
-#: ldelf.c:1465 eaix5ppc.c:1408 eaix5rs6.c:1408 eaixppc.c:1408 eaixrs6.c:1408
+#: ldelf.c:1496 eaix5ppc.c:1408 eaix5rs6.c:1408 eaixppc.c:1408 eaixrs6.c:1408
#: eppcmacos.c:1408
msgid "%F%P: failed to record assignment to %s: %E\n"
msgstr ""
-#: ldelf.c:1649 ldelf.c:1714 eaix5ppc.c:831 eaix5rs6.c:831 eaixppc.c:831
+#: ldelf.c:1675 ldelf.c:1740 eaix5ppc.c:831 eaix5rs6.c:831 eaixppc.c:831
#: eaixrs6.c:831 eelf64_ia64_vms.c:209 eppcmacos.c:831
msgid "%F%P: failed to set dynamic section sizes: %E\n"
msgstr ""
-#: ldelf.c:1686
+#: ldelf.c:1712
msgid "%F%P: %pB: can't read contents of section .gnu.warning: %E\n"
msgstr ""
-#: ldelfgen.c:283
-msgid "%F%P: %pA has both ordered and unordered sections"
+#: ldelfgen.c:284
+msgid "%F%P: %pA has both ordered and unordered sections\n"
msgstr ""
-#: ldelfgen.c:307
+#: ldelfgen.c:309
msgid "%F%P: map sections to segments failed: %E\n"
msgstr ""
-#: ldelfgen.c:327
-msgid "%F%P: looping in map_segments"
+#: ldelfgen.c:329
+msgid "%F%P: looping in map_segments\n"
msgstr ""
-#: ldelfgen.c:339
-msgid "%F%P: failed to strip zero-sized dynamic sections"
+#: ldelfgen.c:341
+msgid "%F%P: failed to strip zero-sized dynamic sections\n"
msgstr ""
-#: ldelfgen.c:417
+#: ldelfgen.c:419
msgid ""
"%F%P: warning: CTF strtab association failed; strings will not be shared: "
"%s\n"
msgstr ""
-#: ldelfgen.c:444
+#: ldelfgen.c:446
msgid ""
"%F%P: warning: CTF symbol addition failed; CTF will not be tied to symbols: "
"%s\n"
msgstr ""
-#: ldelfgen.c:454
+#: ldelfgen.c:456
msgid ""
"%F%P: warning: CTF symbol shuffling failed; CTF will not be tied to symbols: "
"%s\n"
@@ -291,7 +295,7 @@ msgstr ""
msgid "%F%P:%pS / by zero\n"
msgstr ""
-#: ldexp.c:737 ldlang.c:3985 ldmain.c:1271 earm_wince_pe.c:1804 earmpe.c:1804
+#: ldexp.c:737 ldlang.c:4011 ldmain.c:1271 earm_wince_pe.c:1804 earmpe.c:1804
#: ei386pe.c:1804 ei386pe_posix.c:1804 ei386pep.c:1699 emcorepe.c:1804
#: eshpe.c:1804
msgid "%F%P: bfd_link_hash_lookup failed: %E\n"
@@ -341,7 +345,7 @@ msgstr ""
msgid "%F%P:%pS: nonconstant expression for %s\n"
msgstr ""
-#: ldexp.c:1670 ldlang.c:1279 ldlang.c:3467 ldlang.c:7951
+#: ldexp.c:1670 ldlang.c:1279 ldlang.c:3493 ldlang.c:8066
msgid "%F%P: can not create hash table: %E\n"
msgstr ""
@@ -504,335 +508,339 @@ msgid ""
"section `%pA' from '%pB' (assigned to %pA, but additional match: %pA)\n"
msgstr ""
-#: ldlang.c:3053
+#: ldlang.c:3063
msgid "%P: %pB: file not recognized: %E; matching formats:"
msgstr ""
-#: ldlang.c:3061
+#: ldlang.c:3071
msgid "%F%P: %pB: file not recognized: %E\n"
msgstr ""
-#: ldlang.c:3134
+#: ldlang.c:3144
msgid "%F%P: %pB: member %pB in archive is not an object\n"
msgstr ""
-#: ldlang.c:3437
+#: ldlang.c:3415
+msgid "%F%P: input file '%s' is the same as output file\n"
+msgstr ""
+
+#: ldlang.c:3463
msgid ""
"%P: warning: could not find any targets that match endianness requirement\n"
msgstr ""
-#: ldlang.c:3451
+#: ldlang.c:3477
msgid "%F%P: target %s not found\n"
msgstr ""
-#: ldlang.c:3453
+#: ldlang.c:3479
msgid "%F%P: cannot open output file %s: %E\n"
msgstr ""
-#: ldlang.c:3459
+#: ldlang.c:3485
msgid "%F%P: %s: can not make object file: %E\n"
msgstr ""
-#: ldlang.c:3463
+#: ldlang.c:3489
msgid "%F%P: %s: can not set architecture: %E\n"
msgstr ""
-#: ldlang.c:3643
+#: ldlang.c:3669
msgid "%P: warning: %s contains output sections; did you forget -T?\n"
msgstr ""
-#: ldlang.c:3690
+#: ldlang.c:3716
#, c-format
msgid "%s: %s\n"
msgstr ""
-#: ldlang.c:3690
+#: ldlang.c:3716
msgid "CTF warning"
msgstr ""
-#: ldlang.c:3690
+#: ldlang.c:3716
msgid "CTF error"
msgstr ""
-#: ldlang.c:3696
+#: ldlang.c:3722
#, c-format
msgid "CTF error: cannot get CTF errors: `%s'\n"
msgstr ""
-#: ldlang.c:3730
+#: ldlang.c:3756
msgid ""
"%P: warning: CTF section in %pB not loaded; its types will be discarded: %s\n"
msgstr ""
-#: ldlang.c:3759
+#: ldlang.c:3785
msgid "%P: warning: CTF output not created: `%s'\n"
msgstr ""
-#: ldlang.c:3802
+#: ldlang.c:3828
msgid "%P: warning: CTF section in %pB cannot be linked: `%s'\n"
msgstr ""
-#: ldlang.c:3822
+#: ldlang.c:3848
msgid "%P: warning: CTF linking failed; output will have no CTF section: %s\n"
msgstr ""
-#: ldlang.c:3893
+#: ldlang.c:3919
msgid ""
"%P: warning: CTF section emission failed; output will have no CTF section: "
"%s\n"
msgstr ""
-#: ldlang.c:3932
+#: ldlang.c:3958
msgid ""
"%P: warning: CTF section in %pB not linkable: %P was built without support "
"for CTF\n"
msgstr ""
-#: ldlang.c:4070
+#: ldlang.c:4096
msgid "%X%P: required symbol `%s' not defined\n"
msgstr ""
-#: ldlang.c:4368
+#: ldlang.c:4394
msgid ""
"warning: INSERT statement in linker script is incompatible with --enable-non-"
"contiguous-regions.\n"
msgstr ""
-#: ldlang.c:4381
+#: ldlang.c:4407
msgid "%F%P: %s not found for insert\n"
msgstr ""
-#: ldlang.c:4621
+#: ldlang.c:4647
msgid " load address 0x%V"
msgstr ""
-#: ldlang.c:4854
+#: ldlang.c:4880
msgid "%W (size before relaxing)\n"
msgstr ""
-#: ldlang.c:4947
+#: ldlang.c:4973
#, c-format
msgid "Address of section %s set to "
msgstr ""
-#: ldlang.c:5145
+#: ldlang.c:5171
#, c-format
msgid "Fail with %d\n"
msgstr ""
-#: ldlang.c:5358
+#: ldlang.c:5384
msgid ""
"%F%P: Output section '%s' not large enough for the linker-created stubs "
"section '%s'.\n"
msgstr ""
-#: ldlang.c:5363
+#: ldlang.c:5389
msgid ""
"%F%P: Relaxation not supported with --enable-non-contiguous-regions (section "
"'%s' would overflow '%s' after it changed size).\n"
msgstr ""
-#: ldlang.c:5472
+#: ldlang.c:5498
msgid "%X%P: section %s VMA wraps around address space\n"
msgstr ""
-#: ldlang.c:5478
+#: ldlang.c:5504
msgid "%X%P: section %s LMA wraps around address space\n"
msgstr ""
-#: ldlang.c:5530
+#: ldlang.c:5556
msgid "%X%P: section %s LMA [%V,%V] overlaps section %s LMA [%V,%V]\n"
msgstr ""
-#: ldlang.c:5574
+#: ldlang.c:5600
msgid "%X%P: section %s VMA [%V,%V] overlaps section %s VMA [%V,%V]\n"
msgstr ""
-#: ldlang.c:5597
+#: ldlang.c:5623
msgid "%X%P: region `%s' overflowed by %lu byte\n"
msgid_plural "%X%P: region `%s' overflowed by %lu bytes\n"
msgstr[0] ""
msgstr[1] ""
-#: ldlang.c:5622
+#: ldlang.c:5648
msgid "%X%P: address 0x%v of %pB section `%s' is not within region `%s'\n"
msgstr ""
-#: ldlang.c:5633
+#: ldlang.c:5659
msgid "%X%P: %pB section `%s' will not fit in region `%s'\n"
msgstr ""
-#: ldlang.c:5719
+#: ldlang.c:5745
msgid ""
"%F%P:%pS: non constant or forward reference address expression for section "
"%s\n"
msgstr ""
-#: ldlang.c:5744
+#: ldlang.c:5770
msgid "%X%P: internal error on COFF shared library section %s\n"
msgstr ""
-#: ldlang.c:5802
+#: ldlang.c:5828
msgid "%F%P: error: no memory region specified for loadable section `%s'\n"
msgstr ""
-#: ldlang.c:5806
+#: ldlang.c:5832
msgid "%P: warning: no memory region specified for loadable section `%s'\n"
msgstr ""
-#: ldlang.c:5840
+#: ldlang.c:5866
msgid "%P: warning: start of section %s changed by %ld\n"
msgstr ""
-#: ldlang.c:5932
+#: ldlang.c:5958
msgid "%P: warning: dot moved backwards before `%s'\n"
msgstr ""
-#: ldlang.c:6113
+#: ldlang.c:6139
msgid "%F%P: can't relax section: %E\n"
msgstr ""
-#: ldlang.c:6534
+#: ldlang.c:6603
msgid "%F%P: invalid data statement\n"
msgstr ""
-#: ldlang.c:6567
+#: ldlang.c:6636
msgid "%F%P: invalid reloc statement\n"
msgstr ""
-#: ldlang.c:6947
+#: ldlang.c:7053
msgid ""
"%F%P: --gc-sections requires a defined symbol root specified by -e or -u\n"
msgstr ""
-#: ldlang.c:6972
+#: ldlang.c:7078
msgid "%F%P: %s: can't set start address\n"
msgstr ""
-#: ldlang.c:6985 ldlang.c:7003
+#: ldlang.c:7091 ldlang.c:7110
msgid "%F%P: can't set start address\n"
msgstr ""
-#: ldlang.c:6997
+#: ldlang.c:7104
msgid "%P: warning: cannot find entry symbol %s; defaulting to %V\n"
msgstr ""
-#: ldlang.c:7008
+#: ldlang.c:7115 ldlang.c:7123
msgid "%P: warning: cannot find entry symbol %s; not setting start address\n"
msgstr ""
-#: ldlang.c:7065
+#: ldlang.c:7179
msgid ""
"%F%P: relocatable linking with relocations from format %s (%pB) to format %s "
"(%pB) is not supported\n"
msgstr ""
-#: ldlang.c:7075
+#: ldlang.c:7189
msgid ""
"%X%P: %s architecture of input file `%pB' is incompatible with %s output\n"
msgstr ""
-#: ldlang.c:7099
+#: ldlang.c:7213
msgid "%X%P: failed to merge target specific data of file %pB\n"
msgstr ""
-#: ldlang.c:7170
+#: ldlang.c:7284
msgid "%F%P: could not define common symbol `%pT': %E\n"
msgstr ""
-#: ldlang.c:7182
+#: ldlang.c:7296
msgid ""
"\n"
"Allocating common symbols\n"
msgstr ""
-#: ldlang.c:7183
+#: ldlang.c:7297
msgid ""
"Common symbol size file\n"
"\n"
msgstr ""
-#: ldlang.c:7256
+#: ldlang.c:7370
msgid "%X%P: error: unplaced orphan section `%pA' from `%pB'\n"
msgstr ""
-#: ldlang.c:7274
+#: ldlang.c:7388
msgid ""
"%P: warning: orphan section `%pA' from `%pB' being placed in section `%s'\n"
msgstr ""
-#: ldlang.c:7364
+#: ldlang.c:7478
msgid "%F%P: invalid character %c (%d) in flags\n"
msgstr ""
-#: ldlang.c:7473
+#: ldlang.c:7587
msgid "%F%P:%pS: error: align with input and explicit align specified\n"
msgstr ""
-#: ldlang.c:7987
+#: ldlang.c:8102
msgid "%F%P: %s: plugin reported error after all symbols read\n"
msgstr ""
-#: ldlang.c:8427
+#: ldlang.c:8538
msgid "%F%P: multiple STARTUP files\n"
msgstr ""
-#: ldlang.c:8473
+#: ldlang.c:8584
msgid "%X%P:%pS: section has both a load address and a load region\n"
msgstr ""
-#: ldlang.c:8579
+#: ldlang.c:8690
msgid ""
"%X%P:%pS: PHDRS and FILEHDR are not supported when prior PT_LOAD headers "
"lack them\n"
msgstr ""
-#: ldlang.c:8652
+#: ldlang.c:8763
msgid "%F%P: no sections assigned to phdrs\n"
msgstr ""
-#: ldlang.c:8690
+#: ldlang.c:8801
msgid "%F%P: bfd_record_phdr failed: %E\n"
msgstr ""
-#: ldlang.c:8710
+#: ldlang.c:8821
msgid "%X%P: section `%s' assigned to non-existent phdr `%s'\n"
msgstr ""
-#: ldlang.c:9133
+#: ldlang.c:9244
msgid "%X%P: unknown language `%s' in version information\n"
msgstr ""
-#: ldlang.c:9278
+#: ldlang.c:9389
msgid ""
"%X%P: anonymous version tag cannot be combined with other version tags\n"
msgstr ""
-#: ldlang.c:9287
+#: ldlang.c:9398
msgid "%X%P: duplicate version tag `%s'\n"
msgstr ""
-#: ldlang.c:9308 ldlang.c:9317 ldlang.c:9335 ldlang.c:9345
+#: ldlang.c:9419 ldlang.c:9428 ldlang.c:9446 ldlang.c:9456
msgid "%X%P: duplicate expression `%s' in version information\n"
msgstr ""
-#: ldlang.c:9385
+#: ldlang.c:9496
msgid "%X%P: unable to find version dependency `%s'\n"
msgstr ""
-#: ldlang.c:9408
+#: ldlang.c:9519
msgid "%X%P: unable to read .exports section contents\n"
msgstr ""
-#: ldlang.c:9454
+#: ldlang.c:9565
msgid "%P: invalid origin for memory region %s\n"
msgstr ""
-#: ldlang.c:9466
+#: ldlang.c:9577
msgid "%P: invalid length for memory region %s\n"
msgstr ""
-#: ldlang.c:9578
+#: ldlang.c:9689
msgid "%X%P: unknown feature `%s'\n"
msgstr ""
@@ -872,8 +880,8 @@ msgstr ""
msgid "%P: mode %s\n"
msgstr ""
-#: ldmain.c:490 ends32belf.c:427 ends32belf16m.c:427 ends32belf_linux.c:560
-#: ends32elf.c:427 ends32elf16m.c:427 ends32elf_linux.c:560
+#: ldmain.c:490 ends32belf.c:429 ends32belf16m.c:429 ends32belf_linux.c:562
+#: ends32elf.c:429 ends32elf16m.c:429 ends32elf_linux.c:562
msgid "%F%P: cannot open map file %s: %E\n"
msgstr ""
@@ -897,7 +905,7 @@ msgstr ""
msgid "%P: error writing file `%s'\n"
msgstr ""
-#: ldmain.c:594 pe-dll.c:1965
+#: ldmain.c:594 pe-dll.c:1966
#, c-format
msgid "%P: error closing file `%s'\n"
msgstr ""
@@ -911,7 +919,7 @@ msgstr ""
msgid "%F%P: missing argument to -m\n"
msgstr ""
-#: ldmain.c:749 ldmain.c:766 ldmain.c:786 ldmain.c:818 pe-dll.c:1396
+#: ldmain.c:749 ldmain.c:766 ldmain.c:786 ldmain.c:818 pe-dll.c:1397
msgid "%F%P: bfd_hash_table_init failed: %E\n"
msgstr ""
@@ -1110,7 +1118,7 @@ msgstr ""
#: ldver.c:42
#, c-format
-msgid "Copyright (C) 2021 Free Software Foundation, Inc.\n"
+msgid "Copyright (C) 2022 Free Software Foundation, Inc.\n"
msgstr ""
#: ldver.c:43
@@ -1164,7 +1172,7 @@ msgstr ""
msgid "Set architecture"
msgstr ""
-#: lexsup.c:110 lexsup.c:424
+#: lexsup.c:110 lexsup.c:425
msgid "TARGET"
msgstr ""
@@ -1173,8 +1181,8 @@ msgid "Specify target for following input files"
msgstr ""
#: lexsup.c:113 lexsup.c:119 lexsup.c:176 lexsup.c:180 lexsup.c:216
-#: lexsup.c:229 lexsup.c:231 lexsup.c:446 lexsup.c:515 lexsup.c:528
-#: lexsup.c:532
+#: lexsup.c:229 lexsup.c:231 lexsup.c:447 lexsup.c:516 lexsup.c:529
+#: lexsup.c:533
msgid "FILE"
msgstr ""
@@ -1194,8 +1202,8 @@ msgstr ""
msgid "Force group members out of groups"
msgstr ""
-#: lexsup.c:124 lexsup.c:492 lexsup.c:494 lexsup.c:496 lexsup.c:498
-#: lexsup.c:500 lexsup.c:502
+#: lexsup.c:124 lexsup.c:493 lexsup.c:495 lexsup.c:497 lexsup.c:499
+#: lexsup.c:501 lexsup.c:503
msgid "ADDRESS"
msgstr ""
@@ -1405,8 +1413,8 @@ msgstr ""
msgid "Read default linker script"
msgstr ""
-#: lexsup.c:235 lexsup.c:238 lexsup.c:256 lexsup.c:347 lexsup.c:371
-#: lexsup.c:485 lexsup.c:518 lexsup.c:530 lexsup.c:568 lexsup.c:571
+#: lexsup.c:235 lexsup.c:238 lexsup.c:256 lexsup.c:348 lexsup.c:372
+#: lexsup.c:486 lexsup.c:519 lexsup.c:531 lexsup.c:569 lexsup.c:572
msgid "SYMBOL"
msgstr ""
@@ -1454,7 +1462,7 @@ msgstr ""
msgid "Trace mentions of SYMBOL"
msgstr ""
-#: lexsup.c:258 lexsup.c:448 lexsup.c:450
+#: lexsup.c:258 lexsup.c:449 lexsup.c:451
msgid "PATH"
msgstr ""
@@ -1554,281 +1562,281 @@ msgid ""
" in filename invoked by -R or --just-symbols"
msgstr ""
-#: lexsup.c:339
+#: lexsup.c:340
msgid "Generate embedded relocs"
msgstr ""
-#: lexsup.c:341
+#: lexsup.c:342
msgid "Treat warnings as errors"
msgstr ""
-#: lexsup.c:344
+#: lexsup.c:345
msgid "Do not treat warnings as errors (default)"
msgstr ""
-#: lexsup.c:347
+#: lexsup.c:348
msgid "Call SYMBOL at unload-time"
msgstr ""
-#: lexsup.c:349
+#: lexsup.c:350
msgid "Force generation of file with .exe suffix"
msgstr ""
-#: lexsup.c:351
+#: lexsup.c:352
msgid "Remove unused sections (on some targets)"
msgstr ""
-#: lexsup.c:354
+#: lexsup.c:355
msgid "Don't remove unused sections (default)"
msgstr ""
-#: lexsup.c:357
+#: lexsup.c:358
msgid "List removed unused sections on stderr"
msgstr ""
-#: lexsup.c:360
+#: lexsup.c:361
msgid "Do not list removed unused sections"
msgstr ""
-#: lexsup.c:363
+#: lexsup.c:364
msgid "Keep exported symbols when removing unused sections"
msgstr ""
-#: lexsup.c:366
+#: lexsup.c:367
msgid "Set default hash table size close to <NUMBER>"
msgstr ""
-#: lexsup.c:369
+#: lexsup.c:370
msgid "Print option help"
msgstr ""
-#: lexsup.c:371
+#: lexsup.c:372
msgid "Call SYMBOL at load-time"
msgstr ""
-#: lexsup.c:373
+#: lexsup.c:374
msgid "FILE/DIR"
msgstr ""
-#: lexsup.c:373
+#: lexsup.c:374
msgid "Write a linker map to FILE or DIR/<outputname>.map"
msgstr ""
-#: lexsup.c:375
+#: lexsup.c:376
msgid "Do not define Common storage"
msgstr ""
-#: lexsup.c:377
+#: lexsup.c:378
msgid "Do not demangle symbol names"
msgstr ""
-#: lexsup.c:379
+#: lexsup.c:380
msgid "Use less memory and more disk I/O"
msgstr ""
-#: lexsup.c:381
+#: lexsup.c:382
msgid "Do not allow unresolved references in object files"
msgstr ""
-#: lexsup.c:384
+#: lexsup.c:385
msgid "Allow unresolved references in shared libraries"
msgstr ""
-#: lexsup.c:388
+#: lexsup.c:389
msgid "Do not allow unresolved references in shared libs"
msgstr ""
-#: lexsup.c:392
+#: lexsup.c:393
msgid "Allow multiple definitions"
msgstr ""
-#: lexsup.c:396
+#: lexsup.c:397
msgid "SCRIPT"
msgstr ""
-#: lexsup.c:396
+#: lexsup.c:397
msgid "Provide a script to help with undefined symbol errors"
msgstr ""
-#: lexsup.c:399
+#: lexsup.c:400
msgid "Disallow undefined version"
msgstr ""
-#: lexsup.c:401
+#: lexsup.c:402
msgid "Create default symbol version"
msgstr ""
-#: lexsup.c:404
+#: lexsup.c:405
msgid "Create default symbol version for imported symbols"
msgstr ""
-#: lexsup.c:407
+#: lexsup.c:408
msgid "Don't warn about mismatched input files"
msgstr ""
-#: lexsup.c:410
+#: lexsup.c:411
msgid "Don't warn on finding an incompatible library"
msgstr ""
-#: lexsup.c:413
+#: lexsup.c:414
msgid "Turn off --whole-archive"
msgstr ""
-#: lexsup.c:415
+#: lexsup.c:416
msgid "Create an output file even if errors occur"
msgstr ""
-#: lexsup.c:420
+#: lexsup.c:421
msgid ""
"Only use library directories specified on\n"
" the command line"
msgstr ""
-#: lexsup.c:424
+#: lexsup.c:425
msgid "Specify target of output file"
msgstr ""
-#: lexsup.c:427
+#: lexsup.c:428
msgid "Print default output format"
msgstr ""
-#: lexsup.c:429
+#: lexsup.c:430
msgid "Print current sysroot"
msgstr ""
-#: lexsup.c:431
+#: lexsup.c:432
msgid "Ignored for Linux compatibility"
msgstr ""
-#: lexsup.c:434
+#: lexsup.c:435
msgid "Reduce memory overheads, possibly taking much longer"
msgstr ""
-#: lexsup.c:438
+#: lexsup.c:439
msgid "Set the maximum cache size to SIZE bytes"
msgstr ""
-#: lexsup.c:441
+#: lexsup.c:442
msgid "Reduce code size by using target specific optimizations"
msgstr ""
-#: lexsup.c:443
+#: lexsup.c:444
msgid "Do not use relaxation techniques to reduce code size"
msgstr ""
-#: lexsup.c:446
+#: lexsup.c:447
msgid "Keep only symbols listed in FILE"
msgstr ""
-#: lexsup.c:448
+#: lexsup.c:449
msgid "Set runtime shared library search path"
msgstr ""
-#: lexsup.c:450
+#: lexsup.c:451
msgid "Set link time shared library search path"
msgstr ""
-#: lexsup.c:453
+#: lexsup.c:454
msgid "Create a shared library"
msgstr ""
-#: lexsup.c:457
+#: lexsup.c:458
msgid "Create a position independent executable"
msgstr ""
-#: lexsup.c:461
+#: lexsup.c:462
msgid "Create a position dependent executable (default)"
msgstr ""
-#: lexsup.c:463
+#: lexsup.c:464
msgid "[=ascending|descending]"
msgstr ""
-#: lexsup.c:464
+#: lexsup.c:465
msgid "Sort common symbols by alignment [in specified order]"
msgstr ""
-#: lexsup.c:469
+#: lexsup.c:470
msgid "name|alignment"
msgstr ""
-#: lexsup.c:470
+#: lexsup.c:471
msgid "Sort sections by name or maximum alignment"
msgstr ""
-#: lexsup.c:472
+#: lexsup.c:473
msgid "COUNT"
msgstr ""
-#: lexsup.c:472
+#: lexsup.c:473
msgid "How many tags to reserve in .dynamic section"
msgstr ""
-#: lexsup.c:475
+#: lexsup.c:476
msgid "[=SIZE]"
msgstr ""
-#: lexsup.c:475
+#: lexsup.c:476
msgid "Split output sections every SIZE octets"
msgstr ""
-#: lexsup.c:478
+#: lexsup.c:479
msgid "[=COUNT]"
msgstr ""
-#: lexsup.c:478
+#: lexsup.c:479
msgid "Split output sections every COUNT relocs"
msgstr ""
-#: lexsup.c:481
+#: lexsup.c:482
msgid "Print memory usage statistics"
msgstr ""
-#: lexsup.c:483
+#: lexsup.c:484
msgid "Display target specific options"
msgstr ""
-#: lexsup.c:485
+#: lexsup.c:486
msgid "Do task level linking"
msgstr ""
-#: lexsup.c:487
+#: lexsup.c:488
msgid "Use same format as native linker"
msgstr ""
-#: lexsup.c:489
+#: lexsup.c:490
msgid "SECTION=ADDRESS"
msgstr ""
-#: lexsup.c:489
+#: lexsup.c:490
msgid "Set address of named section"
msgstr ""
-#: lexsup.c:492
+#: lexsup.c:493
msgid "Set address of .bss section"
msgstr ""
-#: lexsup.c:494
+#: lexsup.c:495
msgid "Set address of .data section"
msgstr ""
-#: lexsup.c:496
+#: lexsup.c:497
msgid "Set address of .text section"
msgstr ""
-#: lexsup.c:498
+#: lexsup.c:499
msgid "Set address of text segment"
msgstr ""
-#: lexsup.c:500
+#: lexsup.c:501
msgid "Set address of rodata segment"
msgstr ""
-#: lexsup.c:502
+#: lexsup.c:503
msgid "Set address of ldata segment"
msgstr ""
-#: lexsup.c:505
+#: lexsup.c:506
msgid ""
"How to handle unresolved symbols. <method> is:\n"
" ignore-all, report-all, ignore-in-object-"
@@ -1836,197 +1844,198 @@ msgid ""
" ignore-in-shared-libs"
msgstr ""
-#: lexsup.c:510
+#: lexsup.c:511
msgid "[=NUMBER]"
msgstr ""
-#: lexsup.c:511
+#: lexsup.c:512
msgid "Output lots of information during link"
msgstr ""
-#: lexsup.c:515
+#: lexsup.c:516
msgid "Read version information script"
msgstr ""
-#: lexsup.c:518
+#: lexsup.c:519
msgid ""
"Take export symbols list from .exports, using\n"
" SYMBOL as the version."
msgstr ""
-#: lexsup.c:522
+#: lexsup.c:523
msgid "Add data symbols to dynamic list"
msgstr ""
-#: lexsup.c:524
+#: lexsup.c:525
msgid "Use C++ operator new/delete dynamic list"
msgstr ""
-#: lexsup.c:526
+#: lexsup.c:527
msgid "Use C++ typeinfo dynamic list"
msgstr ""
-#: lexsup.c:528
+#: lexsup.c:529
msgid "Read dynamic list"
msgstr ""
-#: lexsup.c:530
+#: lexsup.c:531
msgid "Export the specified symbol"
msgstr ""
-#: lexsup.c:532
+#: lexsup.c:533
msgid "Read export dynamic symbol list"
msgstr ""
-#: lexsup.c:534
+#: lexsup.c:535
msgid "Warn about duplicate common symbols"
msgstr ""
-#: lexsup.c:536
+#: lexsup.c:537
msgid "Warn if global constructors/destructors are seen"
msgstr ""
-#: lexsup.c:539
+#: lexsup.c:540
msgid "Warn if the multiple GP values are used"
msgstr ""
-#: lexsup.c:541
+#: lexsup.c:542
msgid "Warn only once per undefined symbol"
msgstr ""
-#: lexsup.c:543
+#: lexsup.c:544
msgid "Warn if start of section changes due to alignment"
msgstr ""
-#: lexsup.c:548
+#: lexsup.c:549
msgid "Warn if output has DT_TEXTREL (default)"
msgstr ""
-#: lexsup.c:550
+#: lexsup.c:551
msgid "Warn if output has DT_TEXTREL"
msgstr ""
-#: lexsup.c:556
+#: lexsup.c:557
msgid "Warn if an object has alternate ELF machine code"
msgstr ""
-#: lexsup.c:560
+#: lexsup.c:561
msgid "Report unresolved symbols as warnings"
msgstr ""
-#: lexsup.c:563
+#: lexsup.c:564
msgid "Report unresolved symbols as errors"
msgstr ""
-#: lexsup.c:565
+#: lexsup.c:566
msgid "Include all objects from following archives"
msgstr ""
-#: lexsup.c:568
+#: lexsup.c:569
msgid "Use wrapper functions for SYMBOL"
msgstr ""
-#: lexsup.c:572
+#: lexsup.c:573
msgid "Unresolved SYMBOL will not cause an error or warning"
msgstr ""
-#: lexsup.c:574
+#: lexsup.c:575
msgid "Push state of flags governing input file handling"
msgstr ""
-#: lexsup.c:577
+#: lexsup.c:578
msgid "Pop state of flags governing input file handling"
msgstr ""
-#: lexsup.c:580
+#: lexsup.c:581
msgid "Report target memory usage"
msgstr ""
-#: lexsup.c:582
+#: lexsup.c:583
msgid "=MODE"
msgstr ""
-#: lexsup.c:582
+#: lexsup.c:583
msgid "Control how orphan sections are handled."
msgstr ""
-#: lexsup.c:585
+#: lexsup.c:586
msgid "Show discarded sections in map file output (default)"
msgstr ""
-#: lexsup.c:588
+#: lexsup.c:589
msgid "Do not show discarded sections in map file output"
msgstr ""
-#: lexsup.c:591
+#: lexsup.c:592
msgid "Emit names and types of static variables in CTF"
msgstr ""
-#: lexsup.c:594
+#: lexsup.c:595
msgid "Do not emit names and types of static variables in CTF"
msgstr ""
-#: lexsup.c:598
+#: lexsup.c:599
msgid ""
"How to share CTF types between translation units.\n"
" <method> is: share-unconflicted (default),\n"
" share-duplicated"
msgstr ""
-#: lexsup.c:762
+#: lexsup.c:763
msgid "%F%P: Error: unable to disambiguate: %s (did you mean -%s ?)\n"
msgstr ""
-#: lexsup.c:765
+#: lexsup.c:766
msgid "%P: Warning: grouped short command line options are deprecated: %s\n"
msgstr ""
-#: lexsup.c:792
+#: lexsup.c:793
msgid "%P: %s: missing argument\n"
msgstr ""
-#: lexsup.c:797
+#: lexsup.c:798
msgid "%P: unrecognized option '%s'\n"
msgstr ""
-#: lexsup.c:802
+#: lexsup.c:803
msgid "%F%P: use the --help option for usage information\n"
msgstr ""
-#: lexsup.c:821
+#: lexsup.c:822
msgid "%F%P: unrecognized -a option `%s'\n"
msgstr ""
-#: lexsup.c:834
+#: lexsup.c:835
msgid "%F%P: unrecognized -assert option `%s'\n"
msgstr ""
-#: lexsup.c:878
+#: lexsup.c:879
msgid "%F%P: unknown demangling style `%s'\n"
msgstr ""
-#: lexsup.c:954 lexsup.c:1428 eaarch64cloudabi.c:816 eaarch64cloudabib.c:816
-#: eaarch64elf.c:811 eaarch64elf32.c:811 eaarch64elf32b.c:811
-#: eaarch64elfb.c:811 eaarch64fbsd.c:816 eaarch64fbsdb.c:816
-#: eaarch64linux.c:816 eaarch64linux32.c:816 eaarch64linux32b.c:816
-#: eaarch64linuxb.c:816 earmelf.c:1077 earmelf_fbsd.c:1077
-#: earmelf_fuchsia.c:1082 earmelf_linux.c:1082 earmelf_linux_eabi.c:1082
-#: earmelf_linux_fdpiceabi.c:1082 earmelf_nacl.c:1082 earmelf_nbsd.c:1077
-#: earmelf_phoenix.c:1082 earmelf_vxworks.c:1113 earmelfb.c:1077
-#: earmelfb_fbsd.c:1077 earmelfb_fuchsia.c:1082 earmelfb_linux.c:1082
-#: earmelfb_linux_eabi.c:1082 earmelfb_linux_fdpiceabi.c:1082
-#: earmelfb_nacl.c:1082 earmelfb_nbsd.c:1077 earmnto.c:1052 ecskyelf.c:539
-#: ecskyelf_linux.c:706 eelf32metag.c:703 eelf64lppc.c:1180
-#: eelf64lppc_fbsd.c:1180 eelf64ppc.c:1180 eelf64ppc_fbsd.c:1180 ehppaelf.c:559
-#: ehppalinux.c:741 ehppanbsd.c:741 ehppaobsd.c:741
+#: lexsup.c:955 lexsup.c:1429 eaarch64cloudabi.c:818 eaarch64cloudabib.c:818
+#: eaarch64elf.c:813 eaarch64elf32.c:813 eaarch64elf32b.c:813
+#: eaarch64elfb.c:813 eaarch64fbsd.c:818 eaarch64fbsdb.c:818
+#: eaarch64haiku.c:818 eaarch64linux.c:818 eaarch64linux32.c:818
+#: eaarch64linux32b.c:818 eaarch64linuxb.c:818 earmelf.c:1079
+#: earmelf_fbsd.c:1079 earmelf_fuchsia.c:1084 earmelf_haiku.c:1084
+#: earmelf_linux.c:1084 earmelf_linux_eabi.c:1084
+#: earmelf_linux_fdpiceabi.c:1084 earmelf_nacl.c:1084 earmelf_nbsd.c:1079
+#: earmelf_phoenix.c:1084 earmelf_vxworks.c:1115 earmelfb.c:1079
+#: earmelfb_fbsd.c:1079 earmelfb_fuchsia.c:1084 earmelfb_linux.c:1084
+#: earmelfb_linux_eabi.c:1084 earmelfb_linux_fdpiceabi.c:1084
+#: earmelfb_nacl.c:1084 earmelfb_nbsd.c:1079 earmnto.c:1054 ecskyelf.c:541
+#: ecskyelf_linux.c:708 eelf32metag.c:705 eelf64lppc.c:1187
+#: eelf64lppc_fbsd.c:1187 eelf64ppc.c:1187 eelf64ppc_fbsd.c:1187 ehppaelf.c:561
+#: ehppalinux.c:743 ehppanbsd.c:743 ehppaobsd.c:743
msgid "%F%P: invalid number `%s'\n"
msgstr ""
-#: lexsup.c:1050
+#: lexsup.c:1051
msgid "%F%P: bad --unresolved-symbols option: %s\n"
msgstr ""
-#: lexsup.c:1127
+#: lexsup.c:1128
msgid "%F%P: bad -plugin-opt option\n"
msgstr ""
@@ -2038,163 +2047,163 @@ msgstr ""
#. an error message here. We cannot just make this a warning,
#. increment optind, and continue because getopt is too confused
#. and will seg-fault the next time around.
-#: lexsup.c:1144
+#: lexsup.c:1145
msgid "%F%P: unrecognised option: %s\n"
msgstr ""
-#: lexsup.c:1147 lexsup.c:1257 lexsup.c:1278 lexsup.c:1397
+#: lexsup.c:1148 lexsup.c:1258 lexsup.c:1279 lexsup.c:1398
msgid "%F%P: -r and %s may not be used together\n"
msgstr ""
-#: lexsup.c:1269
+#: lexsup.c:1270
msgid "%F%P: -shared not supported\n"
msgstr ""
-#: lexsup.c:1283
+#: lexsup.c:1284
msgid "%F%P: -pie not supported\n"
msgstr ""
-#: lexsup.c:1289
+#: lexsup.c:1290
msgid "%P: SONAME must not be empty string; keeping previous one\n"
msgstr ""
-#: lexsup.c:1295
+#: lexsup.c:1296
msgid "descending"
msgstr ""
-#: lexsup.c:1297
+#: lexsup.c:1298
msgid "ascending"
msgstr ""
-#: lexsup.c:1300
+#: lexsup.c:1301
msgid "%F%P: invalid common section sorting option: %s\n"
msgstr ""
-#: lexsup.c:1304
+#: lexsup.c:1305
msgid "name"
msgstr ""
-#: lexsup.c:1306
+#: lexsup.c:1307
msgid "alignment"
msgstr ""
-#: lexsup.c:1309
+#: lexsup.c:1310
msgid "%F%P: invalid section sorting option: %s\n"
msgstr ""
-#: lexsup.c:1346
+#: lexsup.c:1347
msgid "%F%P: invalid argument to option \"--section-start\"\n"
msgstr ""
-#: lexsup.c:1353
+#: lexsup.c:1354
msgid "%F%P: missing argument(s) to option \"--section-start\"\n"
msgstr ""
-#: lexsup.c:1618
+#: lexsup.c:1619
msgid "%F%P: group ended before it began (--help for usage)\n"
msgstr ""
-#: lexsup.c:1643
+#: lexsup.c:1644
msgid "%F%P: invalid cache memory size: %s\n"
msgstr ""
-#: lexsup.c:1657
+#: lexsup.c:1658
msgid "%X%P: --hash-size needs a numeric argument\n"
msgstr ""
-#: lexsup.c:1669
+#: lexsup.c:1670
msgid "%F%P: no state pushed before popping\n"
msgstr ""
-#: lexsup.c:1692
+#: lexsup.c:1693
msgid "%F%P: invalid argument to option \"--orphan-handling\"\n"
msgstr ""
-#: lexsup.c:1722
+#: lexsup.c:1723
msgid "%F%P: bad --ctf-share-types option: %s\n"
msgstr ""
-#: lexsup.c:1740
+#: lexsup.c:1741
msgid "%P: no file/directory name provided for map output; ignored\n"
msgstr ""
-#: lexsup.c:1768
+#: lexsup.c:1769
msgid "%P: cannot stat linker map file: %E\n"
msgstr ""
-#: lexsup.c:1780
+#: lexsup.c:1781
msgid "%P: linker map file is not a regular file\n"
msgstr ""
#. If the asprintf failed then something is probably very
#. wrong. Better to halt now rather than continue on
#. into more problems.
-#: lexsup.c:1791
+#: lexsup.c:1792
msgid "%P%F: cannot create name for linker map file: %E\n"
msgstr ""
-#: lexsup.c:1802
+#: lexsup.c:1803
msgid "%P: SONAME must not be empty string; ignored\n"
msgstr ""
-#: lexsup.c:1808
+#: lexsup.c:1809
msgid "%P: missing --end-group; added as last command line option\n"
msgstr ""
-#: lexsup.c:1916
+#: lexsup.c:1917
msgid "%F%P: -F may not be used without -shared\n"
msgstr ""
-#: lexsup.c:1918
+#: lexsup.c:1919
msgid "%F%P: -f may not be used without -shared\n"
msgstr ""
-#: lexsup.c:1959 lexsup.c:1972
+#: lexsup.c:1960 lexsup.c:1973
msgid "%F%P: invalid hex number `%s'\n"
msgstr ""
-#: lexsup.c:2002
+#: lexsup.c:2003
#, c-format
msgid " --audit=AUDITLIB Specify a library to use for auditing\n"
msgstr ""
-#: lexsup.c:2004
+#: lexsup.c:2005
#, c-format
msgid " -Bgroup Selects group name lookup rules for DSO\n"
msgstr ""
-#: lexsup.c:2006
+#: lexsup.c:2007
#, c-format
msgid " --disable-new-dtags Disable new dynamic tags\n"
msgstr ""
-#: lexsup.c:2008
+#: lexsup.c:2009
#, c-format
msgid " --enable-new-dtags Enable new dynamic tags\n"
msgstr ""
-#: lexsup.c:2010
+#: lexsup.c:2011
#, c-format
msgid " --eh-frame-hdr Create .eh_frame_hdr section\n"
msgstr ""
-#: lexsup.c:2012
+#: lexsup.c:2013
#, c-format
msgid " --no-eh-frame-hdr Do not create .eh_frame_hdr section\n"
msgstr ""
-#: lexsup.c:2014
+#: lexsup.c:2015
#, c-format
msgid " --exclude-libs=LIBS Make all symbols in LIBS hidden\n"
msgstr ""
-#: lexsup.c:2016
+#: lexsup.c:2017
#, c-format
msgid ""
" --hash-style=STYLE Set hash style to sysv/gnu/both. Default: "
msgstr ""
-#: lexsup.c:2035
+#: lexsup.c:2036
#, c-format
msgid ""
" -P AUDITLIB, --depaudit=AUDITLIB\n"
@@ -2202,20 +2211,20 @@ msgid ""
"dependencies\n"
msgstr ""
-#: lexsup.c:2038
+#: lexsup.c:2039
#, c-format
msgid ""
" -z combreloc Merge dynamic relocs into one section and "
"sort\n"
msgstr ""
-#: lexsup.c:2040
+#: lexsup.c:2041
#, c-format
msgid ""
" -z nocombreloc Don't merge dynamic relocs into one section\n"
msgstr ""
-#: lexsup.c:2042
+#: lexsup.c:2043
#, c-format
msgid ""
" -z global Make symbols in DSO available for "
@@ -2223,273 +2232,273 @@ msgid ""
" loaded objects\n"
msgstr ""
-#: lexsup.c:2045
+#: lexsup.c:2046
#, c-format
msgid ""
" -z initfirst Mark DSO to be initialized first at runtime\n"
msgstr ""
-#: lexsup.c:2047
+#: lexsup.c:2048
#, c-format
msgid ""
" -z interpose Mark object to interpose all DSOs but "
"executable\n"
msgstr ""
-#: lexsup.c:2049
+#: lexsup.c:2050
#, c-format
msgid ""
" -z unique Mark DSO to be loaded at most once by default, "
"and only in the main namespace\n"
msgstr ""
-#: lexsup.c:2051
+#: lexsup.c:2052
#, c-format
msgid ""
" -z nounique Don't mark DSO as a loadable at most once\n"
msgstr ""
-#: lexsup.c:2053
+#: lexsup.c:2054
#, c-format
msgid ""
" -z lazy Mark object lazy runtime binding (default)\n"
msgstr ""
-#: lexsup.c:2055
+#: lexsup.c:2056
#, c-format
msgid " -z loadfltr Mark object requiring immediate process\n"
msgstr ""
-#: lexsup.c:2057
+#: lexsup.c:2058
#, c-format
msgid " -z nocopyreloc Don't create copy relocs\n"
msgstr ""
-#: lexsup.c:2059
+#: lexsup.c:2060
#, c-format
msgid ""
" -z nodefaultlib Mark object not to use default search paths\n"
msgstr ""
-#: lexsup.c:2061
+#: lexsup.c:2062
#, c-format
msgid " -z nodelete Mark DSO non-deletable at runtime\n"
msgstr ""
-#: lexsup.c:2063
+#: lexsup.c:2064
#, c-format
msgid " -z nodlopen Mark DSO not available to dlopen\n"
msgstr ""
-#: lexsup.c:2065
+#: lexsup.c:2066
#, c-format
msgid " -z nodump Mark DSO not available to dldump\n"
msgstr ""
-#: lexsup.c:2067
+#: lexsup.c:2068
#, c-format
msgid " -z now Mark object non-lazy runtime binding\n"
msgstr ""
-#: lexsup.c:2069
+#: lexsup.c:2070
#, c-format
msgid ""
" -z origin Mark object requiring immediate $ORIGIN\n"
" processing at runtime\n"
msgstr ""
-#: lexsup.c:2073
+#: lexsup.c:2074
#, c-format
msgid " -z relro Create RELRO program header (default)\n"
msgstr ""
-#: lexsup.c:2075
+#: lexsup.c:2076
#, c-format
msgid " -z norelro Don't create RELRO program header\n"
msgstr ""
-#: lexsup.c:2078
+#: lexsup.c:2079
#, c-format
msgid " -z relro Create RELRO program header\n"
msgstr ""
-#: lexsup.c:2080
+#: lexsup.c:2081
#, c-format
msgid ""
" -z norelro Don't create RELRO program header (default)\n"
msgstr ""
-#: lexsup.c:2084
+#: lexsup.c:2085
#, c-format
msgid ""
" -z separate-code Create separate code program header (default)\n"
msgstr ""
-#: lexsup.c:2086
+#: lexsup.c:2087
#, c-format
msgid ""
" -z noseparate-code Don't create separate code program header\n"
msgstr ""
-#: lexsup.c:2089
+#: lexsup.c:2090
#, c-format
msgid " -z separate-code Create separate code program header\n"
msgstr ""
-#: lexsup.c:2091
+#: lexsup.c:2092
#, c-format
msgid ""
" -z noseparate-code Don't create separate code program header "
"(default)\n"
msgstr ""
-#: lexsup.c:2094
+#: lexsup.c:2095
#, c-format
msgid ""
" -z common Generate common symbols with STT_COMMON type\n"
msgstr ""
-#: lexsup.c:2096
+#: lexsup.c:2097
#, c-format
msgid ""
" -z nocommon Generate common symbols with STT_OBJECT type\n"
msgstr ""
-#: lexsup.c:2099
+#: lexsup.c:2100
#, c-format
msgid ""
" -z text Treat DT_TEXTREL in output as error (default)\n"
msgstr ""
-#: lexsup.c:2102
+#: lexsup.c:2103
#, c-format
msgid " -z text Treat DT_TEXTREL in output as error\n"
msgstr ""
-#: lexsup.c:2106
+#: lexsup.c:2107
#, c-format
msgid ""
" -z notext Don't treat DT_TEXTREL in output as error "
"(default)\n"
msgstr ""
-#: lexsup.c:2108
+#: lexsup.c:2109
#, c-format
msgid ""
" -z textoff Don't treat DT_TEXTREL in output as error "
"(default)\n"
msgstr ""
-#: lexsup.c:2113
+#: lexsup.c:2114
#, c-format
msgid ""
" -z notext Don't treat DT_TEXTREL in output as error\n"
msgstr ""
-#: lexsup.c:2115
+#: lexsup.c:2116
#, c-format
msgid ""
" -z textoff Don't treat DT_TEXTREL in output as error\n"
msgstr ""
-#: lexsup.c:2123
+#: lexsup.c:2124
#, c-format
msgid " --build-id[=STYLE] Generate build ID note\n"
msgstr ""
-#: lexsup.c:2125
+#: lexsup.c:2126
#, c-format
msgid ""
" --compress-debug-sections=[none|zlib|zlib-gnu|zlib-gabi]\n"
" Compress DWARF debug sections using zlib\n"
msgstr ""
-#: lexsup.c:2129
+#: lexsup.c:2130
#, c-format
msgid " Default: zlib-gabi\n"
msgstr ""
-#: lexsup.c:2132
+#: lexsup.c:2133
#, c-format
msgid " Default: none\n"
msgstr ""
-#: lexsup.c:2135
+#: lexsup.c:2136
#, c-format
msgid " -z common-page-size=SIZE Set common page size to SIZE\n"
msgstr ""
-#: lexsup.c:2137
+#: lexsup.c:2138
#, c-format
msgid " -z max-page-size=SIZE Set maximum page size to SIZE\n"
msgstr ""
-#: lexsup.c:2139
+#: lexsup.c:2140
#, c-format
msgid ""
" -z defs Report unresolved symbols in object files\n"
msgstr ""
-#: lexsup.c:2141
+#: lexsup.c:2142
#, c-format
msgid ""
" -z undefs Ignore unresolved symbols in object files\n"
msgstr ""
-#: lexsup.c:2143
+#: lexsup.c:2144
#, c-format
msgid " -z muldefs Allow multiple definitions\n"
msgstr ""
-#: lexsup.c:2145
+#: lexsup.c:2146
#, c-format
msgid " -z stack-size=SIZE Set size of stack segment\n"
msgstr ""
-#: lexsup.c:2147
+#: lexsup.c:2148
#, c-format
msgid ""
" -z execstack Mark executable as requiring executable stack\n"
msgstr ""
-#: lexsup.c:2149
+#: lexsup.c:2150
#, c-format
msgid ""
" -z noexecstack Mark executable as not requiring executable "
"stack\n"
msgstr ""
-#: lexsup.c:2151
+#: lexsup.c:2152
#, c-format
msgid " -z unique-symbol Avoid duplicated local symbol names\n"
msgstr ""
-#: lexsup.c:2153
+#: lexsup.c:2154
#, c-format
msgid ""
" -z nounique-symbol Keep duplicated local symbol names (default)\n"
msgstr ""
-#: lexsup.c:2155
+#: lexsup.c:2156
#, c-format
msgid ""
" -z globalaudit Mark executable requiring global auditing\n"
msgstr ""
-#: lexsup.c:2157
+#: lexsup.c:2158
#, c-format
msgid ""
" -z start-stop-gc Enable garbage collection on __start/__stop\n"
msgstr ""
-#: lexsup.c:2159
+#: lexsup.c:2160
#, c-format
msgid ""
" -z nostart-stop-gc Don't garbage collect __start/__stop "
"(default)\n"
msgstr ""
-#: lexsup.c:2161
+#: lexsup.c:2162
#, c-format
msgid ""
" -z start-stop-visibility=V Set visibility of built-in __start/__stop "
@@ -2497,13 +2506,13 @@ msgid ""
" to DEFAULT, PROTECTED, HIDDEN or INTERNAL\n"
msgstr ""
-#: lexsup.c:2169
+#: lexsup.c:2170
#, c-format
msgid ""
" --ld-generated-unwind-info Generate exception handling info for PLT\n"
msgstr ""
-#: lexsup.c:2171
+#: lexsup.c:2172
#, c-format
msgid ""
" --no-ld-generated-unwind-info\n"
@@ -2511,49 +2520,49 @@ msgid ""
"PLT\n"
msgstr ""
-#: lexsup.c:2181
+#: lexsup.c:2182
#, c-format
msgid "ELF emulations:\n"
msgstr ""
-#: lexsup.c:2199
+#: lexsup.c:2200
#, c-format
msgid "Usage: %s [options] file...\n"
msgstr ""
-#: lexsup.c:2201
+#: lexsup.c:2202
#, c-format
msgid "Options:\n"
msgstr ""
-#: lexsup.c:2279
+#: lexsup.c:2280
#, c-format
msgid " @FILE"
msgstr ""
-#: lexsup.c:2282
+#: lexsup.c:2283
#, c-format
msgid "Read options from FILE\n"
msgstr ""
#. Note: Various tools (such as libtool) depend upon the
#. format of the listings below - do not change them.
-#: lexsup.c:2287
+#: lexsup.c:2288
#, c-format
msgid "%s: supported targets:"
msgstr ""
-#: lexsup.c:2295
+#: lexsup.c:2296
#, c-format
msgid "%s: supported emulations: "
msgstr ""
-#: lexsup.c:2300
+#: lexsup.c:2301
#, c-format
msgid "%s: emulation specific options:\n"
msgstr ""
-#: lexsup.c:2307
+#: lexsup.c:2308
#, c-format
msgid "Report bugs to %s\n"
msgstr ""
@@ -2562,162 +2571,162 @@ msgstr ""
msgid "%F%P: unknown format type %s\n"
msgstr ""
-#: pe-dll.c:447
+#: pe-dll.c:448
msgid "%X%P: unsupported PEI architecture: %s\n"
msgstr ""
-#: pe-dll.c:826
+#: pe-dll.c:827
msgid "%X%P: cannot export %s: invalid export name\n"
msgstr ""
-#: pe-dll.c:878
+#: pe-dll.c:879
#, c-format
msgid "%X%P: error, duplicate EXPORT with ordinals: %s (%d vs %d)\n"
msgstr ""
-#: pe-dll.c:885
+#: pe-dll.c:886
#, c-format
msgid "%P: warning, duplicate EXPORT: %s\n"
msgstr ""
-#: pe-dll.c:992
+#: pe-dll.c:993
#, c-format
msgid "%X%P: cannot export %s: symbol not defined\n"
msgstr ""
-#: pe-dll.c:998
+#: pe-dll.c:999
#, c-format
msgid "%X%P: cannot export %s: symbol wrong type (%d vs %d)\n"
msgstr ""
-#: pe-dll.c:1005
+#: pe-dll.c:1006
#, c-format
msgid "%X%P: cannot export %s: symbol not found\n"
msgstr ""
-#: pe-dll.c:1028 eaarch64cloudabi.c:360 eaarch64cloudabib.c:360
+#: pe-dll.c:1029 eaarch64cloudabi.c:360 eaarch64cloudabib.c:360
#: eaarch64elf.c:359 eaarch64elf32.c:359 eaarch64elf32b.c:359
#: eaarch64elfb.c:359 eaarch64fbsd.c:360 eaarch64fbsdb.c:360
-#: eaarch64linux.c:360 eaarch64linux32.c:360 eaarch64linux32b.c:360
-#: eaarch64linuxb.c:360 eaix5ppc.c:1470 eaix5ppc.c:1480 eaix5rs6.c:1470
-#: eaix5rs6.c:1480 eaixppc.c:1470 eaixppc.c:1480 eaixrs6.c:1470 eaixrs6.c:1480
-#: earmelf.c:568 earmelf_fbsd.c:568 earmelf_fuchsia.c:569 earmelf_linux.c:569
-#: earmelf_linux_eabi.c:569 earmelf_linux_fdpiceabi.c:569 earmelf_nacl.c:569
-#: earmelf_nbsd.c:568 earmelf_phoenix.c:569 earmelf_vxworks.c:568
-#: earmelfb.c:568 earmelfb_fbsd.c:568 earmelfb_fuchsia.c:569
-#: earmelfb_linux.c:569 earmelfb_linux_eabi.c:569
-#: earmelfb_linux_fdpiceabi.c:569 earmelfb_nacl.c:569 earmelfb_nbsd.c:568
-#: earmnto.c:568 ecskyelf.c:163 ecskyelf_linux.c:163 eelf32b4300.c:172
-#: eelf32bmip.c:172 eelf32bmipn32.c:186 eelf32bsmip.c:186 eelf32btsmip.c:172
-#: eelf32btsmip_fbsd.c:172 eelf32btsmipn32.c:172 eelf32btsmipn32_fbsd.c:172
-#: eelf32ebmip.c:172 eelf32ebmipvxworks.c:172 eelf32elmip.c:172
-#: eelf32elmipvxworks.c:172 eelf32l4300.c:172 eelf32lmip.c:172
-#: eelf32lr5900.c:172 eelf32lr5900n32.c:172 eelf32lsmip.c:172
+#: eaarch64haiku.c:360 eaarch64linux.c:360 eaarch64linux32.c:360
+#: eaarch64linux32b.c:360 eaarch64linuxb.c:360 eaix5ppc.c:1470 eaix5ppc.c:1480
+#: eaix5rs6.c:1470 eaix5rs6.c:1480 eaixppc.c:1470 eaixppc.c:1480 eaixrs6.c:1470
+#: eaixrs6.c:1480 earmelf.c:568 earmelf_fbsd.c:568 earmelf_fuchsia.c:569
+#: earmelf_haiku.c:569 earmelf_linux.c:569 earmelf_linux_eabi.c:569
+#: earmelf_linux_fdpiceabi.c:569 earmelf_nacl.c:569 earmelf_nbsd.c:568
+#: earmelf_phoenix.c:569 earmelf_vxworks.c:568 earmelfb.c:568
+#: earmelfb_fbsd.c:568 earmelfb_fuchsia.c:569 earmelfb_linux.c:569
+#: earmelfb_linux_eabi.c:569 earmelfb_linux_fdpiceabi.c:569 earmelfb_nacl.c:569
+#: earmelfb_nbsd.c:568 earmnto.c:568 ecskyelf.c:163 ecskyelf_linux.c:163
+#: eelf32b4300.c:172 eelf32bmip.c:172 eelf32bmipn32.c:186 eelf32bsmip.c:186
+#: eelf32btsmip.c:172 eelf32btsmip_fbsd.c:172 eelf32btsmipn32.c:172
+#: eelf32btsmipn32_fbsd.c:172 eelf32ebmip.c:172 eelf32ebmipvxworks.c:172
+#: eelf32elmip.c:172 eelf32elmipvxworks.c:172 eelf32l4300.c:172
+#: eelf32lmip.c:172 eelf32lr5900.c:172 eelf32lr5900n32.c:172 eelf32lsmip.c:172
#: eelf32ltsmip.c:172 eelf32ltsmip_fbsd.c:172 eelf32ltsmipn32.c:172
#: eelf32ltsmipn32_fbsd.c:172 eelf32metag.c:87 eelf32mipswindiss.c:172
#: eelf64bmip.c:186 eelf64btsmip.c:172 eelf64btsmip_fbsd.c:172 eelf64lppc.c:119
#: eelf64lppc_fbsd.c:119 eelf64ltsmip.c:172 eelf64ltsmip_fbsd.c:172
-#: eelf64ppc.c:119 eelf64ppc_fbsd.c:119 ehppaelf.c:110 ehppalinux.c:110
-#: ehppanbsd.c:110 ehppaobsd.c:110 em68hc11elf.c:170 em68hc11elfb.c:170
-#: em68hc12elf.c:170 em68hc12elfb.c:170 enios2elf.c:92 enios2linux.c:92
-#: eppcmacos.c:1470 eppcmacos.c:1480
+#: eelf64ppc.c:119 eelf64ppc_fbsd.c:119 eelf_mipsel_haiku.c:172 ehppaelf.c:110
+#: ehppalinux.c:110 ehppanbsd.c:110 ehppaobsd.c:110 em68hc11elf.c:170
+#: em68hc11elfb.c:170 em68hc12elf.c:170 em68hc12elfb.c:170 enios2elf.c:92
+#: enios2linux.c:92 eppcmacos.c:1470 eppcmacos.c:1480
msgid "%F%P: can not create BFD: %E\n"
msgstr ""
-#: pe-dll.c:1042
+#: pe-dll.c:1043
msgid "%X%P: can not create .edata section: %E\n"
msgstr ""
-#: pe-dll.c:1056
+#: pe-dll.c:1057
msgid "%X%P: can not create .reloc section: %E\n"
msgstr ""
-#: pe-dll.c:1117
+#: pe-dll.c:1118
#, c-format
msgid "%X%P: error: ordinal used twice: %d (%s vs %s)\n"
msgstr ""
-#: pe-dll.c:1153
+#: pe-dll.c:1154
#, c-format
msgid "%X%P: error: export ordinal too large: %d\n"
msgstr ""
-#: pe-dll.c:1476
+#: pe-dll.c:1477
#, c-format
msgid "Info: resolving %s by linking to %s (auto-import)\n"
msgstr ""
-#: pe-dll.c:1482
+#: pe-dll.c:1483
msgid ""
"%P: warning: auto-importing has been activated without --enable-auto-import "
"specified on the command line; this should work unless it involves constant "
"data structures referencing symbols from auto-imported DLLs\n"
msgstr ""
-#: pe-dll.c:1553
+#: pe-dll.c:1554
msgid "%P: zero vma section reloc detected: `%s' #%d f=%d\n"
msgstr ""
-#: pe-dll.c:1636
+#: pe-dll.c:1637
msgid "%P: base relocation for section `%s' above .reloc section\n"
msgstr ""
-#: pe-dll.c:1685
+#: pe-dll.c:1686
#, c-format
msgid "%X%P: error: %d-bit reloc in dll\n"
msgstr ""
-#: pe-dll.c:1810
+#: pe-dll.c:1811
#, c-format
msgid "%P: can't open output def file %s\n"
msgstr ""
-#: pe-dll.c:1961
+#: pe-dll.c:1962
#, c-format
msgid "; no contents available\n"
msgstr ""
-#: pe-dll.c:2820
+#: pe-dll.c:2822
msgid ""
"%X%P: %C: variable '%pT' can't be auto-imported; please read the "
"documentation for ld's --enable-auto-import for details\n"
msgstr ""
-#: pe-dll.c:2847
+#: pe-dll.c:2850
#, c-format
msgid "%X%P: can't open .lib file: %s\n"
msgstr ""
-#: pe-dll.c:2853
+#: pe-dll.c:2856
#, c-format
msgid "Creating library file: %s\n"
msgstr ""
-#: pe-dll.c:2883
+#: pe-dll.c:2886
msgid "%X%P: bfd_openr %s: %E\n"
msgstr ""
-#: pe-dll.c:2895
+#: pe-dll.c:2898
msgid "%X%P: %s(%s): can't find member in non-archive file"
msgstr ""
-#: pe-dll.c:2909
+#: pe-dll.c:2912
msgid "%X%P: %s(%s): can't find member in archive"
msgstr ""
-#: pe-dll.c:3174
+#: pe-dll.c:3177
msgid "%X%P: add symbols %s: %E\n"
msgstr ""
-#: pe-dll.c:3361
+#: pe-dll.c:3365
msgid "%X%P: open %s: %E\n"
msgstr ""
-#: pe-dll.c:3370
+#: pe-dll.c:3374
msgid "%X%P: %s: this doesn't appear to be a DLL\n"
msgstr ""
-#: pe-dll.c:3575
+#: pe-dll.c:3579
msgid "%X%P: error: can't use long section names on this arch\n"
msgstr ""
@@ -2803,44 +2812,46 @@ msgstr ""
#: eaarch64cloudabi.c:223 eaarch64cloudabib.c:223 eaarch64elf.c:222
#: eaarch64elf32.c:222 eaarch64elf32b.c:222 eaarch64elfb.c:222
-#: eaarch64fbsd.c:223 eaarch64fbsdb.c:223 eaarch64linux.c:223
-#: eaarch64linux32.c:223 eaarch64linux32b.c:223 eaarch64linuxb.c:223
-#: earmelf.c:292 earmelf_fbsd.c:292 earmelf_fuchsia.c:293 earmelf_linux.c:293
-#: earmelf_linux_eabi.c:293 earmelf_linux_fdpiceabi.c:293 earmelf_nacl.c:293
-#: earmelf_nbsd.c:292 earmelf_phoenix.c:293 earmelf_vxworks.c:292
-#: earmelfb.c:292 earmelfb_fbsd.c:292 earmelfb_fuchsia.c:293
-#: earmelfb_linux.c:293 earmelfb_linux_eabi.c:293
-#: earmelfb_linux_fdpiceabi.c:293 earmelfb_nacl.c:293 earmelfb_nbsd.c:292
-#: earmnto.c:292 eavr1.c:178 eavr2.c:178 eavr25.c:178 eavr3.c:178 eavr31.c:178
-#: eavr35.c:178 eavr4.c:178 eavr5.c:178 eavr51.c:178 eavr6.c:178 eavrtiny.c:178
-#: eavrxmega1.c:178 eavrxmega2.c:178 eavrxmega3.c:178 eavrxmega4.c:178
-#: eavrxmega5.c:178 eavrxmega6.c:178 eavrxmega7.c:178 ecskyelf.c:210
-#: ecskyelf_linux.c:210 eelf32b4300.c:205 eelf32bmip.c:205 eelf32bmipn32.c:219
-#: eelf32bsmip.c:219 eelf32btsmip.c:205 eelf32btsmip_fbsd.c:205
-#: eelf32btsmipn32.c:205 eelf32btsmipn32_fbsd.c:205 eelf32ebmip.c:205
-#: eelf32ebmipvxworks.c:205 eelf32elmip.c:205 eelf32elmipvxworks.c:205
-#: eelf32l4300.c:205 eelf32lmip.c:205 eelf32lr5900.c:205 eelf32lr5900n32.c:205
-#: eelf32lsmip.c:205 eelf32ltsmip.c:205 eelf32ltsmip_fbsd.c:205
-#: eelf32ltsmipn32.c:205 eelf32ltsmipn32_fbsd.c:205 eelf32metag.c:206
-#: eelf32mipswindiss.c:205 eelf64bmip.c:219 eelf64btsmip.c:205
-#: eelf64btsmip_fbsd.c:205 eelf64lppc.c:482 eelf64lppc_fbsd.c:482
-#: eelf64ltsmip.c:205 eelf64ltsmip_fbsd.c:205 eelf64ppc.c:482
-#: eelf64ppc_fbsd.c:482 ehppaelf.c:230 ehppalinux.c:230 ehppanbsd.c:230
-#: ehppaobsd.c:230 em68hc11elf.c:295 em68hc11elfb.c:295 em68hc12elf.c:295
-#: em68hc12elfb.c:295 enios2elf.c:223 enios2linux.c:223
+#: eaarch64fbsd.c:223 eaarch64fbsdb.c:223 eaarch64haiku.c:223
+#: eaarch64linux.c:223 eaarch64linux32.c:223 eaarch64linux32b.c:223
+#: eaarch64linuxb.c:223 earmelf.c:292 earmelf_fbsd.c:292 earmelf_fuchsia.c:293
+#: earmelf_haiku.c:293 earmelf_linux.c:293 earmelf_linux_eabi.c:293
+#: earmelf_linux_fdpiceabi.c:293 earmelf_nacl.c:293 earmelf_nbsd.c:292
+#: earmelf_phoenix.c:293 earmelf_vxworks.c:292 earmelfb.c:292
+#: earmelfb_fbsd.c:292 earmelfb_fuchsia.c:293 earmelfb_linux.c:293
+#: earmelfb_linux_eabi.c:293 earmelfb_linux_fdpiceabi.c:293 earmelfb_nacl.c:293
+#: earmelfb_nbsd.c:292 earmnto.c:292 eavr1.c:178 eavr2.c:178 eavr25.c:178
+#: eavr3.c:178 eavr31.c:178 eavr35.c:178 eavr4.c:178 eavr5.c:178 eavr51.c:178
+#: eavr6.c:178 eavrtiny.c:178 eavrxmega1.c:178 eavrxmega2.c:178
+#: eavrxmega3.c:178 eavrxmega4.c:178 eavrxmega5.c:178 eavrxmega6.c:178
+#: eavrxmega7.c:178 ecskyelf.c:210 ecskyelf_linux.c:210 eelf32b4300.c:205
+#: eelf32bmip.c:205 eelf32bmipn32.c:219 eelf32bsmip.c:219 eelf32btsmip.c:205
+#: eelf32btsmip_fbsd.c:205 eelf32btsmipn32.c:205 eelf32btsmipn32_fbsd.c:205
+#: eelf32ebmip.c:205 eelf32ebmipvxworks.c:205 eelf32elmip.c:205
+#: eelf32elmipvxworks.c:205 eelf32l4300.c:205 eelf32lmip.c:205
+#: eelf32lr5900.c:205 eelf32lr5900n32.c:205 eelf32lsmip.c:205
+#: eelf32ltsmip.c:205 eelf32ltsmip_fbsd.c:205 eelf32ltsmipn32.c:205
+#: eelf32ltsmipn32_fbsd.c:205 eelf32metag.c:206 eelf32mipswindiss.c:205
+#: eelf64bmip.c:219 eelf64btsmip.c:205 eelf64btsmip_fbsd.c:205 eelf64lppc.c:482
+#: eelf64lppc_fbsd.c:482 eelf64ltsmip.c:205 eelf64ltsmip_fbsd.c:205
+#: eelf64ppc.c:482 eelf64ppc_fbsd.c:482 eelf_mipsel_haiku.c:205 ehppaelf.c:230
+#: ehppalinux.c:230 ehppanbsd.c:230 ehppaobsd.c:230 em68hc11elf.c:295
+#: em68hc11elfb.c:295 em68hc12elf.c:295 em68hc12elfb.c:295 enios2elf.c:223
+#: enios2linux.c:223
msgid "%X%P: can not make stub section: %E\n"
msgstr ""
#: eaarch64cloudabi.c:266 eaarch64cloudabib.c:266 eaarch64elf.c:265
#: eaarch64elf32.c:265 eaarch64elf32b.c:265 eaarch64elfb.c:265
-#: eaarch64fbsd.c:266 eaarch64fbsdb.c:266 eaarch64linux.c:266
-#: eaarch64linux32.c:266 eaarch64linux32b.c:266 eaarch64linuxb.c:266
-#: earcelf.c:96 earclinux.c:97 earclinux_nps.c:97 earcv2elf.c:96
-#: earcv2elfx.c:96 earmelf.c:404 earmelf_fbsd.c:404 earmelf_fuchsia.c:405
-#: earmelf_linux.c:405 earmelf_linux_eabi.c:405 earmelf_linux_fdpiceabi.c:405
-#: earmelf_nacl.c:405 earmelf_nbsd.c:404 earmelf_phoenix.c:405
-#: earmelf_vxworks.c:404 earmelfb.c:404 earmelfb_fbsd.c:404
-#: earmelfb_fuchsia.c:405 earmelfb_linux.c:405 earmelfb_linux_eabi.c:405
+#: eaarch64fbsd.c:266 eaarch64fbsdb.c:266 eaarch64haiku.c:266
+#: eaarch64linux.c:266 eaarch64linux32.c:266 eaarch64linux32b.c:266
+#: eaarch64linuxb.c:266 earcelf.c:96 earclinux.c:97 earclinux_nps.c:97
+#: earcv2elf.c:96 earcv2elfx.c:96 earmelf.c:404 earmelf_fbsd.c:404
+#: earmelf_fuchsia.c:405 earmelf_haiku.c:405 earmelf_linux.c:405
+#: earmelf_linux_eabi.c:405 earmelf_linux_fdpiceabi.c:405 earmelf_nacl.c:405
+#: earmelf_nbsd.c:404 earmelf_phoenix.c:405 earmelf_vxworks.c:404
+#: earmelfb.c:404 earmelfb_fbsd.c:404 earmelfb_fuchsia.c:405
+#: earmelfb_linux.c:405 earmelfb_linux_eabi.c:405
#: earmelfb_linux_fdpiceabi.c:405 earmelfb_nacl.c:405 earmelfb_nbsd.c:404
#: earmnto.c:404 eavr1.c:299 eavr2.c:299 eavr25.c:299 eavr3.c:299 eavr31.c:299
#: eavr35.c:299 eavr4.c:299 eavr5.c:299 eavr51.c:299 eavr6.c:299 eavrtiny.c:299
@@ -2858,115 +2869,118 @@ msgstr ""
#: eelf32ebmip.c:293 eelf32ebmipvxworks.c:322 eelf32elmip.c:293
#: eelf32elmipvxworks.c:322 eelf32epiphany.c:96 eelf32epiphany_4x4.c:98
#: eelf32frvfd.c:96 eelf32ip2k.c:96 eelf32l4300.c:293 eelf32lm32.c:96
-#: eelf32lm32fd.c:96 eelf32lmip.c:293 eelf32lppc.c:317 eelf32lppclinux.c:317
-#: eelf32lppcnto.c:317 eelf32lppcsim.c:317 eelf32lr5900.c:293
-#: eelf32lr5900n32.c:292 eelf32lriscv.c:89 eelf32lriscv_ilp32.c:89
-#: eelf32lriscv_ilp32f.c:89 eelf32lsmip.c:293 eelf32ltsmip.c:293
-#: eelf32ltsmip_fbsd.c:293 eelf32ltsmipn32.c:293 eelf32ltsmipn32_fbsd.c:293
-#: eelf32m32c.c:107 eelf32mb_linux.c:97 eelf32mbel_linux.c:97 eelf32mcore.c:96
-#: eelf32mep.c:96 eelf32metag.c:256 eelf32microblaze.c:96
-#: eelf32microblazeel.c:96 eelf32mipswindiss.c:292 eelf32moxie.c:96
-#: eelf32or1k.c:97 eelf32or1k_linux.c:97 eelf32ppc.c:317 eelf32ppc_fbsd.c:317
-#: eelf32ppclinux.c:317 eelf32ppcnto.c:317 eelf32ppcsim.c:317
-#: eelf32ppcvxworks.c:291 eelf32ppcwindiss.c:317 eelf32rl78.c:96 eelf32rx.c:112
-#: eelf32rx_linux.c:109 eelf32tilegx.c:97 eelf32tilegx_be.c:97
-#: eelf32tilepro.c:97 eelf32vax.c:96 eelf32visium.c:96 eelf32xc16x.c:96
-#: eelf32xc16xl.c:96 eelf32xc16xs.c:96 eelf32xstormy16.c:107
-#: eelf32xtensa.c:2001 eelf32z80.c:123 eelf64_aix.c:96 eelf64_ia64.c:122
-#: eelf64_ia64_fbsd.c:122 eelf64_ia64_vms.c:220 eelf64_s390.c:112
-#: eelf64_sparc.c:97 eelf64_sparc_fbsd.c:97 eelf64_sparc_sol2.c:229
-#: eelf64alpha.c:180 eelf64alpha_fbsd.c:180 eelf64alpha_nbsd.c:180
-#: eelf64bmip.c:307 eelf64bpf.c:96 eelf64briscv.c:89 eelf64briscv_lp64.c:89
-#: eelf64briscv_lp64f.c:89 eelf64btsmip.c:293 eelf64btsmip_fbsd.c:293
-#: eelf64hppa.c:96 eelf64lppc.c:592 eelf64lppc_fbsd.c:592 eelf64lriscv.c:89
+#: eelf32lm32fd.c:96 eelf32lmip.c:293 eelf32loongarch.c:88 eelf32lppc.c:317
+#: eelf32lppclinux.c:317 eelf32lppcnto.c:317 eelf32lppcsim.c:317
+#: eelf32lr5900.c:293 eelf32lr5900n32.c:292 eelf32lriscv.c:89
+#: eelf32lriscv_ilp32.c:89 eelf32lriscv_ilp32f.c:89 eelf32lsmip.c:293
+#: eelf32ltsmip.c:293 eelf32ltsmip_fbsd.c:293 eelf32ltsmipn32.c:293
+#: eelf32ltsmipn32_fbsd.c:293 eelf32m32c.c:107 eelf32mb_linux.c:97
+#: eelf32mbel_linux.c:97 eelf32mcore.c:96 eelf32mep.c:96 eelf32metag.c:256
+#: eelf32microblaze.c:96 eelf32microblazeel.c:96 eelf32mipswindiss.c:292
+#: eelf32moxie.c:96 eelf32or1k.c:97 eelf32or1k_linux.c:97 eelf32ppc.c:317
+#: eelf32ppc_fbsd.c:317 eelf32ppchaiku.c:317 eelf32ppclinux.c:317
+#: eelf32ppcnto.c:317 eelf32ppcsim.c:317 eelf32ppcvxworks.c:291
+#: eelf32ppcwindiss.c:317 eelf32rl78.c:96 eelf32rx.c:112 eelf32rx_linux.c:109
+#: eelf32tilegx.c:97 eelf32tilegx_be.c:97 eelf32tilepro.c:97 eelf32vax.c:96
+#: eelf32visium.c:96 eelf32xc16x.c:96 eelf32xc16xl.c:96 eelf32xc16xs.c:96
+#: eelf32xstormy16.c:107 eelf32xtensa.c:2001 eelf32z80.c:123 eelf64_aix.c:96
+#: eelf64_ia64.c:122 eelf64_ia64_fbsd.c:122 eelf64_ia64_vms.c:220
+#: eelf64_s390.c:112 eelf64_sparc.c:97 eelf64_sparc_fbsd.c:97
+#: eelf64_sparc_sol2.c:229 eelf64alpha.c:180 eelf64alpha_fbsd.c:180
+#: eelf64alpha_nbsd.c:180 eelf64bmip.c:307 eelf64bpf.c:96 eelf64briscv.c:89
+#: eelf64briscv_lp64.c:89 eelf64briscv_lp64f.c:89 eelf64btsmip.c:293
+#: eelf64btsmip_fbsd.c:293 eelf64hppa.c:96 eelf64loongarch.c:88
+#: eelf64lppc.c:592 eelf64lppc_fbsd.c:592 eelf64lriscv.c:89
#: eelf64lriscv_lp64.c:89 eelf64lriscv_lp64f.c:89 eelf64ltsmip.c:293
#: eelf64ltsmip_fbsd.c:293 eelf64mmix.c:207 eelf64ppc.c:592
#: eelf64ppc_fbsd.c:592 eelf64rdos.c:112 eelf64tilegx.c:97 eelf64tilegx_be.c:97
-#: eelf_i386.c:121 eelf_i386_be.c:120 eelf_i386_fbsd.c:121 eelf_i386_ldso.c:121
-#: eelf_i386_sol2.c:253 eelf_i386_vxworks.c:150 eelf_iamcu.c:121
-#: eelf_k1om.c:121 eelf_k1om_fbsd.c:121 eelf_l1om.c:121 eelf_l1om_fbsd.c:121
-#: eelf_s390.c:97 eelf_x86_64.c:121 eelf_x86_64_cloudabi.c:121
-#: eelf_x86_64_fbsd.c:121 eelf_x86_64_sol2.c:253 eh8300elf.c:96
-#: eh8300elf_linux.c:96 eh8300helf.c:96 eh8300helf_linux.c:96 eh8300hnelf.c:96
-#: eh8300self.c:96 eh8300self_linux.c:96 eh8300snelf.c:96 eh8300sxelf.c:96
-#: eh8300sxelf_linux.c:96 eh8300sxnelf.c:96 ehppa64linux.c:96 ehppaelf.c:280
-#: ehppalinux.c:280 ehppanbsd.c:280 ehppaobsd.c:280 ei386lynx.c:111
-#: ei386moss.c:111 ei386nto.c:111 em32relf.c:96 em32relf_linux.c:96
-#: em32rlelf.c:96 em32rlelf_linux.c:96 em68hc11elf.c:373 em68hc11elfb.c:373
-#: em68hc12elf.c:373 em68hc12elfb.c:373 em68kelf.c:248 em68kelfnbsd.c:248
-#: emn10300.c:96 ends32belf.c:204 ends32belf16m.c:204 ends32belf_linux.c:204
-#: ends32elf.c:204 ends32elf16m.c:204 ends32elf_linux.c:204 enios2elf.c:273
-#: enios2linux.c:273 epruelf.c:117 escore3_elf.c:117 escore7_elf.c:117
-#: eshelf.c:96 eshelf_fd.c:97 eshelf_linux.c:97 eshelf_nbsd.c:96
-#: eshelf_nto.c:96 eshelf_uclinux.c:96 eshelf_vxworks.c:125 eshlelf.c:96
-#: eshlelf_fd.c:97 eshlelf_linux.c:97 eshlelf_nbsd.c:96 eshlelf_nto.c:96
-#: eshlelf_vxworks.c:125 ev850.c:143 ev850_rh850.c:143
+#: eelf_i386.c:121 eelf_i386_be.c:120 eelf_i386_fbsd.c:121
+#: eelf_i386_haiku.c:121 eelf_i386_ldso.c:121 eelf_i386_sol2.c:253
+#: eelf_i386_vxworks.c:150 eelf_iamcu.c:121 eelf_k1om.c:121
+#: eelf_k1om_fbsd.c:121 eelf_l1om.c:121 eelf_l1om_fbsd.c:121
+#: eelf_mipsel_haiku.c:293 eelf_s390.c:97 eelf_x86_64.c:121
+#: eelf_x86_64_cloudabi.c:121 eelf_x86_64_fbsd.c:121 eelf_x86_64_haiku.c:121
+#: eelf_x86_64_sol2.c:253 eh8300elf.c:96 eh8300elf_linux.c:96 eh8300helf.c:96
+#: eh8300helf_linux.c:96 eh8300hnelf.c:96 eh8300self.c:96 eh8300self_linux.c:96
+#: eh8300snelf.c:96 eh8300sxelf.c:96 eh8300sxelf_linux.c:96 eh8300sxnelf.c:96
+#: ehppa64linux.c:96 ehppaelf.c:280 ehppalinux.c:280 ehppanbsd.c:280
+#: ehppaobsd.c:280 ei386lynx.c:111 ei386moss.c:111 ei386nto.c:111 em32relf.c:96
+#: em32relf_linux.c:96 em32rlelf.c:96 em32rlelf_linux.c:96 em68hc11elf.c:373
+#: em68hc11elfb.c:373 em68hc12elf.c:373 em68hc12elfb.c:373 em68kelf.c:248
+#: em68kelfnbsd.c:248 emn10300.c:96 ends32belf.c:204 ends32belf16m.c:204
+#: ends32belf_linux.c:204 ends32elf.c:204 ends32elf16m.c:204
+#: ends32elf_linux.c:204 enios2elf.c:273 enios2linux.c:273 epruelf.c:117
+#: escore3_elf.c:117 escore7_elf.c:117 eshelf.c:96 eshelf_fd.c:97
+#: eshelf_linux.c:97 eshelf_nbsd.c:96 eshelf_nto.c:96 eshelf_uclinux.c:96
+#: eshelf_vxworks.c:125 eshlelf.c:96 eshlelf_fd.c:97 eshlelf_linux.c:97
+#: eshlelf_nbsd.c:96 eshlelf_nto.c:96 eshlelf_vxworks.c:125 ev850.c:143
+#: ev850_rh850.c:143
msgid "%X%P: .eh_frame/.stab edit: %E\n"
msgstr ""
#: eaarch64cloudabi.c:282 eaarch64cloudabib.c:282 eaarch64elf.c:281
#: eaarch64elf32.c:281 eaarch64elf32b.c:281 eaarch64elfb.c:281
-#: eaarch64fbsd.c:282 eaarch64fbsdb.c:282 eaarch64linux.c:282
-#: eaarch64linux32.c:282 eaarch64linux32b.c:282 eaarch64linuxb.c:282
-#: earmelf.c:419 earmelf_fbsd.c:419 earmelf_fuchsia.c:420 earmelf_linux.c:420
-#: earmelf_linux_eabi.c:420 earmelf_linux_fdpiceabi.c:420 earmelf_nacl.c:420
-#: earmelf_nbsd.c:419 earmelf_phoenix.c:420 earmelf_vxworks.c:419
-#: earmelfb.c:419 earmelfb_fbsd.c:419 earmelfb_fuchsia.c:420
-#: earmelfb_linux.c:420 earmelfb_linux_eabi.c:420
-#: earmelfb_linux_fdpiceabi.c:420 earmelfb_nacl.c:420 earmelfb_nbsd.c:419
-#: earmnto.c:419 ecskyelf.c:260 ecskyelf_linux.c:260
+#: eaarch64fbsd.c:282 eaarch64fbsdb.c:282 eaarch64haiku.c:282
+#: eaarch64linux.c:282 eaarch64linux32.c:282 eaarch64linux32b.c:282
+#: eaarch64linuxb.c:282 earmelf.c:419 earmelf_fbsd.c:419 earmelf_fuchsia.c:420
+#: earmelf_haiku.c:420 earmelf_linux.c:420 earmelf_linux_eabi.c:420
+#: earmelf_linux_fdpiceabi.c:420 earmelf_nacl.c:420 earmelf_nbsd.c:419
+#: earmelf_phoenix.c:420 earmelf_vxworks.c:419 earmelfb.c:419
+#: earmelfb_fbsd.c:419 earmelfb_fuchsia.c:420 earmelfb_linux.c:420
+#: earmelfb_linux_eabi.c:420 earmelfb_linux_fdpiceabi.c:420 earmelfb_nacl.c:420
+#: earmelfb_nbsd.c:419 earmnto.c:419 ecskyelf.c:260 ecskyelf_linux.c:260
msgid "%X%P: could not compute sections lists for stub generation: %E\n"
msgstr ""
#: eaarch64cloudabi.c:297 eaarch64cloudabib.c:297 eaarch64elf.c:296
#: eaarch64elf32.c:296 eaarch64elf32b.c:296 eaarch64elfb.c:296
-#: eaarch64fbsd.c:297 eaarch64fbsdb.c:297 eaarch64linux.c:297
-#: eaarch64linux32.c:297 eaarch64linux32b.c:297 eaarch64linuxb.c:297
-#: earmelf.c:434 earmelf_fbsd.c:434 earmelf_fuchsia.c:435 earmelf_linux.c:435
-#: earmelf_linux_eabi.c:435 earmelf_linux_fdpiceabi.c:435 earmelf_nacl.c:435
-#: earmelf_nbsd.c:434 earmelf_phoenix.c:435 earmelf_vxworks.c:434
-#: earmelfb.c:434 earmelfb_fbsd.c:434 earmelfb_fuchsia.c:435
-#: earmelfb_linux.c:435 earmelfb_linux_eabi.c:435
-#: earmelfb_linux_fdpiceabi.c:435 earmelfb_nacl.c:435 earmelfb_nbsd.c:434
-#: earmnto.c:434 eavr1.c:129 eavr1.c:192 eavr2.c:129 eavr2.c:192 eavr25.c:129
-#: eavr25.c:192 eavr3.c:129 eavr3.c:192 eavr31.c:129 eavr31.c:192 eavr35.c:129
-#: eavr35.c:192 eavr4.c:129 eavr4.c:192 eavr5.c:129 eavr5.c:192 eavr51.c:129
-#: eavr51.c:192 eavr6.c:129 eavr6.c:192 eavrtiny.c:129 eavrtiny.c:192
-#: eavrxmega1.c:129 eavrxmega1.c:192 eavrxmega2.c:129 eavrxmega2.c:192
-#: eavrxmega3.c:129 eavrxmega3.c:192 eavrxmega4.c:129 eavrxmega4.c:192
-#: eavrxmega5.c:129 eavrxmega5.c:192 eavrxmega6.c:129 eavrxmega6.c:192
-#: eavrxmega7.c:129 eavrxmega7.c:192 eelf32metag.c:271 eelf32metag.c:285
-#: eelf64lppc.c:535 eelf64lppc.c:554 eelf64lppc.c:581 eelf64lppc_fbsd.c:535
-#: eelf64lppc_fbsd.c:554 eelf64lppc_fbsd.c:581 eelf64ppc.c:535 eelf64ppc.c:554
-#: eelf64ppc.c:581 eelf64ppc_fbsd.c:535 eelf64ppc_fbsd.c:554
-#: eelf64ppc_fbsd.c:581 ehppaelf.c:295 ehppaelf.c:310 ehppalinux.c:295
-#: ehppalinux.c:310 ehppanbsd.c:295 ehppanbsd.c:310 ehppaobsd.c:295
-#: ehppaobsd.c:310 em68hc11elf.c:90 em68hc11elf.c:100 em68hc11elf.c:317
-#: em68hc11elfb.c:90 em68hc11elfb.c:100 em68hc11elfb.c:317 em68hc12elf.c:90
-#: em68hc12elf.c:100 em68hc12elf.c:317 em68hc12elfb.c:90 em68hc12elfb.c:100
-#: em68hc12elfb.c:317 enios2elf.c:290 enios2elf.c:303 enios2linux.c:290
-#: enios2linux.c:303
+#: eaarch64fbsd.c:297 eaarch64fbsdb.c:297 eaarch64haiku.c:297
+#: eaarch64linux.c:297 eaarch64linux32.c:297 eaarch64linux32b.c:297
+#: eaarch64linuxb.c:297 earmelf.c:434 earmelf_fbsd.c:434 earmelf_fuchsia.c:435
+#: earmelf_haiku.c:435 earmelf_linux.c:435 earmelf_linux_eabi.c:435
+#: earmelf_linux_fdpiceabi.c:435 earmelf_nacl.c:435 earmelf_nbsd.c:434
+#: earmelf_phoenix.c:435 earmelf_vxworks.c:434 earmelfb.c:434
+#: earmelfb_fbsd.c:434 earmelfb_fuchsia.c:435 earmelfb_linux.c:435
+#: earmelfb_linux_eabi.c:435 earmelfb_linux_fdpiceabi.c:435 earmelfb_nacl.c:435
+#: earmelfb_nbsd.c:434 earmnto.c:434 eavr1.c:129 eavr1.c:192 eavr2.c:129
+#: eavr2.c:192 eavr25.c:129 eavr25.c:192 eavr3.c:129 eavr3.c:192 eavr31.c:129
+#: eavr31.c:192 eavr35.c:129 eavr35.c:192 eavr4.c:129 eavr4.c:192 eavr5.c:129
+#: eavr5.c:192 eavr51.c:129 eavr51.c:192 eavr6.c:129 eavr6.c:192 eavrtiny.c:129
+#: eavrtiny.c:192 eavrxmega1.c:129 eavrxmega1.c:192 eavrxmega2.c:129
+#: eavrxmega2.c:192 eavrxmega3.c:129 eavrxmega3.c:192 eavrxmega4.c:129
+#: eavrxmega4.c:192 eavrxmega5.c:129 eavrxmega5.c:192 eavrxmega6.c:129
+#: eavrxmega6.c:192 eavrxmega7.c:129 eavrxmega7.c:192 eelf32metag.c:271
+#: eelf32metag.c:285 eelf64lppc.c:535 eelf64lppc.c:554 eelf64lppc.c:581
+#: eelf64lppc_fbsd.c:535 eelf64lppc_fbsd.c:554 eelf64lppc_fbsd.c:581
+#: eelf64ppc.c:535 eelf64ppc.c:554 eelf64ppc.c:581 eelf64ppc_fbsd.c:535
+#: eelf64ppc_fbsd.c:554 eelf64ppc_fbsd.c:581 ehppaelf.c:295 ehppaelf.c:310
+#: ehppalinux.c:295 ehppalinux.c:310 ehppanbsd.c:295 ehppanbsd.c:310
+#: ehppaobsd.c:295 ehppaobsd.c:310 em68hc11elf.c:90 em68hc11elf.c:100
+#: em68hc11elf.c:317 em68hc11elfb.c:90 em68hc11elfb.c:100 em68hc11elfb.c:317
+#: em68hc12elf.c:90 em68hc12elf.c:100 em68hc12elf.c:317 em68hc12elfb.c:90
+#: em68hc12elfb.c:100 em68hc12elfb.c:317 enios2elf.c:290 enios2elf.c:303
+#: enios2linux.c:290 enios2linux.c:303
msgid "%X%P: can not size stub section: %E\n"
msgstr ""
#: eaarch64cloudabi.c:316 eaarch64cloudabib.c:316 eaarch64elf.c:315
#: eaarch64elf32.c:315 eaarch64elf32b.c:315 eaarch64elfb.c:315
-#: eaarch64fbsd.c:316 eaarch64fbsdb.c:316 eaarch64linux.c:316
-#: eaarch64linux32.c:316 eaarch64linux32b.c:316 eaarch64linuxb.c:316
-#: earmelf.c:468 earmelf_fbsd.c:468 earmelf_fuchsia.c:469 earmelf_linux.c:469
-#: earmelf_linux_eabi.c:469 earmelf_linux_fdpiceabi.c:469 earmelf_nacl.c:469
-#: earmelf_nbsd.c:468 earmelf_phoenix.c:469 earmelf_vxworks.c:468
-#: earmelfb.c:468 earmelfb_fbsd.c:468 earmelfb_fuchsia.c:469
-#: earmelfb_linux.c:469 earmelfb_linux_eabi.c:469
-#: earmelfb_linux_fdpiceabi.c:469 earmelfb_nacl.c:469 earmelfb_nbsd.c:468
-#: earmnto.c:468 eavr1.c:201 eavr2.c:201 eavr25.c:201 eavr3.c:201 eavr31.c:201
-#: eavr35.c:201 eavr4.c:201 eavr5.c:201 eavr51.c:201 eavr6.c:201 eavrtiny.c:201
-#: eavrxmega1.c:201 eavrxmega2.c:201 eavrxmega3.c:201 eavrxmega4.c:201
-#: eavrxmega5.c:201 eavrxmega6.c:201 eavrxmega7.c:201 eelf32metag.c:300
-#: eelf64lppc.c:631 eelf64lppc_fbsd.c:631 eelf64ppc.c:631 eelf64ppc_fbsd.c:631
-#: ehppaelf.c:332 ehppalinux.c:332 ehppanbsd.c:332 ehppaobsd.c:332
-#: em68hc11elf.c:321 em68hc11elfb.c:321 em68hc12elf.c:321 em68hc12elfb.c:321
-#: enios2elf.c:318 enios2linux.c:318
+#: eaarch64fbsd.c:316 eaarch64fbsdb.c:316 eaarch64haiku.c:316
+#: eaarch64linux.c:316 eaarch64linux32.c:316 eaarch64linux32b.c:316
+#: eaarch64linuxb.c:316 earmelf.c:468 earmelf_fbsd.c:468 earmelf_fuchsia.c:469
+#: earmelf_haiku.c:469 earmelf_linux.c:469 earmelf_linux_eabi.c:469
+#: earmelf_linux_fdpiceabi.c:469 earmelf_nacl.c:469 earmelf_nbsd.c:468
+#: earmelf_phoenix.c:469 earmelf_vxworks.c:468 earmelfb.c:468
+#: earmelfb_fbsd.c:468 earmelfb_fuchsia.c:469 earmelfb_linux.c:469
+#: earmelfb_linux_eabi.c:469 earmelfb_linux_fdpiceabi.c:469 earmelfb_nacl.c:469
+#: earmelfb_nbsd.c:468 earmnto.c:468 eavr1.c:201 eavr2.c:201 eavr25.c:201
+#: eavr3.c:201 eavr31.c:201 eavr35.c:201 eavr4.c:201 eavr5.c:201 eavr51.c:201
+#: eavr6.c:201 eavrtiny.c:201 eavrxmega1.c:201 eavrxmega2.c:201
+#: eavrxmega3.c:201 eavrxmega4.c:201 eavrxmega5.c:201 eavrxmega6.c:201
+#: eavrxmega7.c:201 eelf32metag.c:300 eelf64lppc.c:631 eelf64lppc_fbsd.c:631
+#: eelf64ppc.c:631 eelf64ppc_fbsd.c:631 ehppaelf.c:332 ehppalinux.c:332
+#: ehppanbsd.c:332 ehppaobsd.c:332 em68hc11elf.c:321 em68hc11elfb.c:321
+#: em68hc12elf.c:321 em68hc12elfb.c:321 enios2elf.c:318 enios2linux.c:318
msgid "%X%P: can not build stubs: %E\n"
msgstr ""
@@ -2997,39 +3011,41 @@ msgstr ""
#. same time. Use a link followed by objcopy to change output formats.
#: eaarch64cloudabi.c:334 eaarch64cloudabib.c:334 eaarch64elf.c:333
#: eaarch64elf32.c:333 eaarch64elf32b.c:333 eaarch64elfb.c:333
-#: eaarch64fbsd.c:334 eaarch64fbsdb.c:334 eaarch64linux.c:334
-#: eaarch64linux32.c:334 eaarch64linux32b.c:334 eaarch64linuxb.c:334
-#: earm_wince_pe.c:1426 earmelf.c:540 earmelf_fbsd.c:540 earmelf_fuchsia.c:541
-#: earmelf_linux.c:541 earmelf_linux_eabi.c:541 earmelf_linux_fdpiceabi.c:541
-#: earmelf_nacl.c:541 earmelf_nbsd.c:540 earmelf_phoenix.c:541
-#: earmelf_vxworks.c:540 earmelfb.c:540 earmelfb_fbsd.c:540
-#: earmelfb_fuchsia.c:541 earmelfb_linux.c:541 earmelfb_linux_eabi.c:541
+#: eaarch64fbsd.c:334 eaarch64fbsdb.c:334 eaarch64haiku.c:334
+#: eaarch64linux.c:334 eaarch64linux32.c:334 eaarch64linux32b.c:334
+#: eaarch64linuxb.c:334 earm_wince_pe.c:1426 earmelf.c:540 earmelf_fbsd.c:540
+#: earmelf_fuchsia.c:541 earmelf_haiku.c:541 earmelf_linux.c:541
+#: earmelf_linux_eabi.c:541 earmelf_linux_fdpiceabi.c:541 earmelf_nacl.c:541
+#: earmelf_nbsd.c:540 earmelf_phoenix.c:541 earmelf_vxworks.c:540
+#: earmelfb.c:540 earmelfb_fbsd.c:540 earmelfb_fuchsia.c:541
+#: earmelfb_linux.c:541 earmelfb_linux_eabi.c:541
#: earmelfb_linux_fdpiceabi.c:541 earmelfb_nacl.c:541 earmelfb_nbsd.c:540
#: earmnto.c:540 earmpe.c:1426 eavr1.c:142 eavr2.c:142 eavr25.c:142 eavr3.c:142
#: eavr31.c:142 eavr35.c:142 eavr4.c:142 eavr5.c:142 eavr51.c:142 eavr6.c:142
#: eavrtiny.c:142 eavrxmega1.c:142 eavrxmega2.c:142 eavrxmega3.c:142
#: eavrxmega4.c:142 eavrxmega5.c:142 eavrxmega6.c:142 eavrxmega7.c:142
-#: eelf32briscv.c:128 eelf32briscv_ilp32.c:128 eelf32briscv_ilp32f.c:128
-#: eelf32lriscv.c:128 eelf32lriscv_ilp32.c:128 eelf32lriscv_ilp32f.c:128
-#: eelf64briscv.c:128 eelf64briscv_lp64.c:128 eelf64briscv_lp64f.c:128
-#: eelf64lriscv.c:128 eelf64lriscv_lp64.c:128 eelf64lriscv_lp64f.c:128
-#: ei386pe.c:1426 ei386pe_posix.c:1426 emcorepe.c:1426 ends32belf.c:74
-#: ends32belf16m.c:74 ends32belf_linux.c:74 ends32elf.c:74 ends32elf16m.c:74
-#: ends32elf_linux.c:74 escore3_elf.c:75 escore7_elf.c:75 eshpe.c:1426
-#: ev850.c:91 ev850_rh850.c:91
+#: eelf32briscv.c:124 eelf32briscv_ilp32.c:124 eelf32briscv_ilp32f.c:124
+#: eelf32loongarch.c:106 eelf32lriscv.c:124 eelf32lriscv_ilp32.c:124
+#: eelf32lriscv_ilp32f.c:124 eelf64briscv.c:124 eelf64briscv_lp64.c:124
+#: eelf64briscv_lp64f.c:124 eelf64loongarch.c:106 eelf64lriscv.c:124
+#: eelf64lriscv_lp64.c:124 eelf64lriscv_lp64f.c:124 ei386pe.c:1426
+#: ei386pe_posix.c:1426 emcorepe.c:1426 ends32belf.c:74 ends32belf16m.c:74
+#: ends32belf_linux.c:74 ends32elf.c:74 ends32elf16m.c:74 ends32elf_linux.c:74
+#: escore3_elf.c:75 escore7_elf.c:75 eshpe.c:1426 ev850.c:91 ev850_rh850.c:91
msgid "%F%P: error: cannot change output format whilst linking %s binaries\n"
msgstr ""
#: eaarch64cloudabi.c:570 eaarch64cloudabib.c:570 eaarch64elf.c:569
#: eaarch64elf32.c:569 eaarch64elf32b.c:569 eaarch64elfb.c:569
-#: eaarch64fbsd.c:570 eaarch64fbsdb.c:570 eaarch64linux.c:570
-#: eaarch64linux32.c:570 eaarch64linux32b.c:570 eaarch64linuxb.c:570
-#: earcelf.c:202 earclinux.c:258 earclinux_nps.c:258 earcv2elf.c:186
-#: earcv2elfx.c:186 earmelf.c:812 earmelf_fbsd.c:812 earmelf_fuchsia.c:813
-#: earmelf_linux.c:813 earmelf_linux_eabi.c:813 earmelf_linux_fdpiceabi.c:813
-#: earmelf_nacl.c:813 earmelf_nbsd.c:812 earmelf_phoenix.c:813
-#: earmelf_vxworks.c:848 earmelfb.c:812 earmelfb_fbsd.c:812
-#: earmelfb_fuchsia.c:813 earmelfb_linux.c:813 earmelfb_linux_eabi.c:813
+#: eaarch64fbsd.c:570 eaarch64fbsdb.c:570 eaarch64haiku.c:570
+#: eaarch64linux.c:570 eaarch64linux32.c:570 eaarch64linux32b.c:570
+#: eaarch64linuxb.c:570 earcelf.c:202 earclinux.c:258 earclinux_nps.c:258
+#: earcv2elf.c:186 earcv2elfx.c:186 earmelf.c:812 earmelf_fbsd.c:812
+#: earmelf_fuchsia.c:813 earmelf_haiku.c:813 earmelf_linux.c:813
+#: earmelf_linux_eabi.c:813 earmelf_linux_fdpiceabi.c:813 earmelf_nacl.c:813
+#: earmelf_nbsd.c:812 earmelf_phoenix.c:813 earmelf_vxworks.c:848
+#: earmelfb.c:812 earmelfb_fbsd.c:812 earmelfb_fuchsia.c:813
+#: earmelfb_linux.c:813 earmelfb_linux_eabi.c:813
#: earmelfb_linux_fdpiceabi.c:813 earmelfb_nacl.c:813 earmelfb_nbsd.c:812
#: earmnto.c:787 eavr1.c:409 eavr2.c:409 eavr25.c:409 eavr3.c:409 eavr31.c:409
#: eavr35.c:409 eavr4.c:409 eavr5.c:409 eavr51.c:409 eavr6.c:409 eavrtiny.c:409
@@ -3039,44 +3055,45 @@ msgstr ""
#: eelf32_sparc.c:258 eelf32_sparc_sol2.c:390 eelf32_sparc_vxworks.c:295
#: eelf32_spu.c:919 eelf32_tic6x_be.c:369 eelf32_tic6x_elf_be.c:369
#: eelf32_tic6x_elf_le.c:369 eelf32_tic6x_le.c:369 eelf32_tic6x_linux_be.c:369
-#: eelf32_tic6x_linux_le.c:369 eelf32_x86_64.c:5327 eelf32am33lin.c:232
+#: eelf32_tic6x_linux_le.c:369 eelf32_x86_64.c:5349 eelf32am33lin.c:232
#: eelf32b4300.c:473 eelf32bfin.c:250 eelf32bfinfd.c:275 eelf32bmip.c:473
-#: eelf32bmipn32.c:487 eelf32briscv.c:330 eelf32briscv_ilp32.c:330
-#: eelf32briscv_ilp32f.c:330 eelf32bsmip.c:487 eelf32btsmip.c:473
+#: eelf32bmipn32.c:487 eelf32briscv.c:326 eelf32briscv_ilp32.c:326
+#: eelf32briscv_ilp32f.c:326 eelf32bsmip.c:487 eelf32btsmip.c:473
#: eelf32btsmip_fbsd.c:473 eelf32btsmipn32.c:473 eelf32btsmipn32_fbsd.c:473
#: eelf32cr16.c:336 eelf32crx.c:223 eelf32ebmip.c:473 eelf32ebmipvxworks.c:508
#: eelf32elmip.c:473 eelf32elmipvxworks.c:508 eelf32epiphany.c:201
#: eelf32epiphany_4x4.c:188 eelf32frvfd.c:257 eelf32ip2k.c:201
#: eelf32l4300.c:473 eelf32lm32.c:201 eelf32lm32fd.c:257 eelf32lmip.c:473
-#: eelf32lppc.c:521 eelf32lppclinux.c:521 eelf32lppcnto.c:521
-#: eelf32lppcsim.c:521 eelf32lr5900.c:442 eelf32lr5900n32.c:441
-#: eelf32lriscv.c:330 eelf32lriscv_ilp32.c:330 eelf32lriscv_ilp32f.c:330
-#: eelf32lsmip.c:473 eelf32ltsmip.c:473 eelf32ltsmip_fbsd.c:473
-#: eelf32ltsmipn32.c:473 eelf32ltsmipn32_fbsd.c:473 eelf32m32c.c:212
-#: eelf32mb_linux.c:258 eelf32mbel_linux.c:258 eelf32mcore.c:207
-#: eelf32mep.c:186 eelf32metag.c:507 eelf32microblaze.c:186
+#: eelf32loongarch.c:308 eelf32lppc.c:521 eelf32lppclinux.c:521
+#: eelf32lppcnto.c:521 eelf32lppcsim.c:521 eelf32lr5900.c:442
+#: eelf32lr5900n32.c:441 eelf32lriscv.c:326 eelf32lriscv_ilp32.c:326
+#: eelf32lriscv_ilp32f.c:326 eelf32lsmip.c:473 eelf32ltsmip.c:473
+#: eelf32ltsmip_fbsd.c:473 eelf32ltsmipn32.c:473 eelf32ltsmipn32_fbsd.c:473
+#: eelf32m32c.c:212 eelf32mb_linux.c:258 eelf32mbel_linux.c:258
+#: eelf32mcore.c:207 eelf32mep.c:186 eelf32metag.c:507 eelf32microblaze.c:186
#: eelf32microblazeel.c:186 eelf32mipswindiss.c:416 eelf32moxie.c:201
#: eelf32or1k.c:202 eelf32or1k_linux.c:258 eelf32ppc.c:521 eelf32ppc_fbsd.c:521
-#: eelf32ppclinux.c:521 eelf32ppcnto.c:521 eelf32ppcsim.c:521
-#: eelf32ppcvxworks.c:495 eelf32ppcwindiss.c:521 eelf32rl78.c:201
-#: eelf32rx.c:229 eelf32rx_linux.c:214 eelf32tilegx.c:258 eelf32tilegx_be.c:258
-#: eelf32tilepro.c:258 eelf32vax.c:232 eelf32visium.c:186 eelf32xc16x.c:186
-#: eelf32xc16xl.c:186 eelf32xc16xs.c:186 eelf32xstormy16.c:197
-#: eelf32xtensa.c:2179 eelf32z80.c:213 eelf64_aix.c:232 eelf64_ia64.c:289
-#: eelf64_ia64_fbsd.c:289 eelf64_s390.c:328 eelf64_sparc.c:258
-#: eelf64_sparc_fbsd.c:258 eelf64_sparc_sol2.c:390 eelf64alpha.c:351
-#: eelf64alpha_fbsd.c:351 eelf64alpha_nbsd.c:351 eelf64bmip.c:487
-#: eelf64bpf.c:186 eelf64briscv.c:330 eelf64briscv_lp64.c:330
-#: eelf64briscv_lp64f.c:330 eelf64btsmip.c:473 eelf64btsmip_fbsd.c:473
-#: eelf64hppa.c:202 eelf64lppc.c:970 eelf64lppc_fbsd.c:970 eelf64lriscv.c:330
-#: eelf64lriscv_lp64.c:330 eelf64lriscv_lp64f.c:330 eelf64ltsmip.c:473
-#: eelf64ltsmip_fbsd.c:473 eelf64mmix.c:343 eelf64ppc.c:970
-#: eelf64ppc_fbsd.c:970 eelf64rdos.c:283 eelf64tilegx.c:258
-#: eelf64tilegx_be.c:258 eelf_i386.c:4949 eelf_i386_be.c:256
-#: eelf_i386_fbsd.c:292 eelf_i386_ldso.c:267 eelf_i386_sol2.c:424
-#: eelf_i386_vxworks.c:319 eelf_iamcu.c:292 eelf_k1om.c:5283
-#: eelf_k1om_fbsd.c:292 eelf_l1om.c:5283 eelf_l1om_fbsd.c:292 eelf_s390.c:258
-#: eelf_x86_64.c:5327 eelf_x86_64_cloudabi.c:292 eelf_x86_64_fbsd.c:292
+#: eelf32ppchaiku.c:521 eelf32ppclinux.c:521 eelf32ppcnto.c:521
+#: eelf32ppcsim.c:521 eelf32ppcvxworks.c:495 eelf32ppcwindiss.c:521
+#: eelf32rl78.c:201 eelf32rx.c:229 eelf32rx_linux.c:214 eelf32tilegx.c:258
+#: eelf32tilegx_be.c:258 eelf32tilepro.c:258 eelf32vax.c:232 eelf32visium.c:186
+#: eelf32xc16x.c:186 eelf32xc16xl.c:186 eelf32xc16xs.c:186
+#: eelf32xstormy16.c:197 eelf32xtensa.c:2179 eelf32z80.c:213 eelf64_aix.c:232
+#: eelf64_ia64.c:289 eelf64_ia64_fbsd.c:289 eelf64_s390.c:328
+#: eelf64_sparc.c:258 eelf64_sparc_fbsd.c:258 eelf64_sparc_sol2.c:390
+#: eelf64alpha.c:351 eelf64alpha_fbsd.c:351 eelf64alpha_nbsd.c:351
+#: eelf64bmip.c:487 eelf64bpf.c:186 eelf64briscv.c:326 eelf64briscv_lp64.c:326
+#: eelf64briscv_lp64f.c:326 eelf64btsmip.c:473 eelf64btsmip_fbsd.c:473
+#: eelf64hppa.c:202 eelf64loongarch.c:308 eelf64lppc.c:970
+#: eelf64lppc_fbsd.c:970 eelf64lriscv.c:326 eelf64lriscv_lp64.c:326
+#: eelf64lriscv_lp64f.c:326 eelf64ltsmip.c:473 eelf64ltsmip_fbsd.c:473
+#: eelf64mmix.c:343 eelf64ppc.c:970 eelf64ppc_fbsd.c:970 eelf64rdos.c:283
+#: eelf64tilegx.c:258 eelf64tilegx_be.c:258 eelf_i386.c:4971 eelf_i386_be.c:256
+#: eelf_i386_fbsd.c:292 eelf_i386_haiku.c:292 eelf_i386_ldso.c:267
+#: eelf_i386_sol2.c:424 eelf_i386_vxworks.c:319 eelf_iamcu.c:292
+#: eelf_k1om.c:5283 eelf_k1om_fbsd.c:292 eelf_l1om.c:5283 eelf_l1om_fbsd.c:292
+#: eelf_mipsel_haiku.c:473 eelf_s390.c:258 eelf_x86_64.c:5349
+#: eelf_x86_64_cloudabi.c:292 eelf_x86_64_fbsd.c:292 eelf_x86_64_haiku.c:292
#: eelf_x86_64_sol2.c:424 eh8300elf.c:201 eh8300elf_linux.c:201
#: eh8300helf.c:201 eh8300helf_linux.c:201 eh8300hnelf.c:201 eh8300self.c:201
#: eh8300self_linux.c:201 eh8300snelf.c:201 eh8300sxelf.c:201
@@ -3097,49 +3114,51 @@ msgstr ""
#: eaarch64cloudabi.c:621 eaarch64cloudabib.c:621 eaarch64elf.c:620
#: eaarch64elf32.c:620 eaarch64elf32b.c:620 eaarch64elfb.c:620
-#: eaarch64fbsd.c:621 eaarch64fbsdb.c:621 eaarch64linux.c:621
-#: eaarch64linux32.c:621 eaarch64linux32b.c:621 eaarch64linuxb.c:621
-#: earcelf.c:253 earclinux.c:309 earclinux_nps.c:309 earmelf.c:863
-#: earmelf_fbsd.c:863 earmelf_fuchsia.c:864 earmelf_linux.c:864
-#: earmelf_linux_eabi.c:864 earmelf_linux_fdpiceabi.c:864 earmelf_nacl.c:864
-#: earmelf_nbsd.c:863 earmelf_phoenix.c:864 earmelf_vxworks.c:899
-#: earmelfb.c:863 earmelfb_fbsd.c:863 earmelfb_fuchsia.c:864
-#: earmelfb_linux.c:864 earmelfb_linux_eabi.c:864
+#: eaarch64fbsd.c:621 eaarch64fbsdb.c:621 eaarch64haiku.c:621
+#: eaarch64linux.c:621 eaarch64linux32.c:621 eaarch64linux32b.c:621
+#: eaarch64linuxb.c:621 earcelf.c:253 earclinux.c:309 earclinux_nps.c:309
+#: earmelf.c:863 earmelf_fbsd.c:863 earmelf_fuchsia.c:864 earmelf_haiku.c:864
+#: earmelf_linux.c:864 earmelf_linux_eabi.c:864 earmelf_linux_fdpiceabi.c:864
+#: earmelf_nacl.c:864 earmelf_nbsd.c:863 earmelf_phoenix.c:864
+#: earmelf_vxworks.c:899 earmelfb.c:863 earmelfb_fbsd.c:863
+#: earmelfb_fuchsia.c:864 earmelfb_linux.c:864 earmelfb_linux_eabi.c:864
#: earmelfb_linux_fdpiceabi.c:864 earmelfb_nacl.c:864 earmelfb_nbsd.c:863
#: earmnto.c:838 ecrislinux.c:284 ecskyelf_linux.c:553 eelf32_sparc.c:309
#: eelf32_sparc_sol2.c:441 eelf32_sparc_vxworks.c:346 eelf32_tic6x_be.c:420
#: eelf32_tic6x_elf_be.c:420 eelf32_tic6x_elf_le.c:420 eelf32_tic6x_le.c:420
-#: eelf32_tic6x_linux_be.c:420 eelf32_tic6x_linux_le.c:420 eelf32_x86_64.c:5378
+#: eelf32_tic6x_linux_be.c:420 eelf32_tic6x_linux_le.c:420 eelf32_x86_64.c:5400
#: eelf32am33lin.c:283 eelf32b4300.c:524 eelf32bfin.c:301 eelf32bfinfd.c:326
-#: eelf32bmip.c:524 eelf32bmipn32.c:538 eelf32briscv.c:381
-#: eelf32briscv_ilp32.c:381 eelf32briscv_ilp32f.c:381 eelf32bsmip.c:538
+#: eelf32bmip.c:524 eelf32bmipn32.c:538 eelf32briscv.c:377
+#: eelf32briscv_ilp32.c:377 eelf32briscv_ilp32f.c:377 eelf32bsmip.c:538
#: eelf32btsmip.c:524 eelf32btsmip_fbsd.c:524 eelf32btsmipn32.c:524
#: eelf32btsmipn32_fbsd.c:524 eelf32ebmip.c:524 eelf32ebmipvxworks.c:559
#: eelf32elmip.c:524 eelf32elmipvxworks.c:559 eelf32frvfd.c:308
-#: eelf32l4300.c:524 eelf32lm32fd.c:308 eelf32lmip.c:524 eelf32lppc.c:572
-#: eelf32lppclinux.c:572 eelf32lppcnto.c:572 eelf32lppcsim.c:572
-#: eelf32lriscv.c:381 eelf32lriscv_ilp32.c:381 eelf32lriscv_ilp32f.c:381
-#: eelf32lsmip.c:524 eelf32ltsmip.c:524 eelf32ltsmip_fbsd.c:524
-#: eelf32ltsmipn32.c:524 eelf32ltsmipn32_fbsd.c:524 eelf32mb_linux.c:309
-#: eelf32mbel_linux.c:309 eelf32metag.c:558 eelf32or1k_linux.c:309
-#: eelf32ppc.c:572 eelf32ppc_fbsd.c:572 eelf32ppclinux.c:572 eelf32ppcnto.c:572
+#: eelf32l4300.c:524 eelf32lm32fd.c:308 eelf32lmip.c:524 eelf32loongarch.c:359
+#: eelf32lppc.c:572 eelf32lppclinux.c:572 eelf32lppcnto.c:572
+#: eelf32lppcsim.c:572 eelf32lriscv.c:377 eelf32lriscv_ilp32.c:377
+#: eelf32lriscv_ilp32f.c:377 eelf32lsmip.c:524 eelf32ltsmip.c:524
+#: eelf32ltsmip_fbsd.c:524 eelf32ltsmipn32.c:524 eelf32ltsmipn32_fbsd.c:524
+#: eelf32mb_linux.c:309 eelf32mbel_linux.c:309 eelf32metag.c:558
+#: eelf32or1k_linux.c:309 eelf32ppc.c:572 eelf32ppc_fbsd.c:572
+#: eelf32ppchaiku.c:572 eelf32ppclinux.c:572 eelf32ppcnto.c:572
#: eelf32ppcsim.c:572 eelf32ppcvxworks.c:546 eelf32ppcwindiss.c:572
#: eelf32tilegx.c:309 eelf32tilegx_be.c:309 eelf32tilepro.c:309 eelf32vax.c:283
#: eelf32xtensa.c:2230 eelf64_aix.c:283 eelf64_ia64.c:340
#: eelf64_ia64_fbsd.c:340 eelf64_s390.c:379 eelf64_sparc.c:309
#: eelf64_sparc_fbsd.c:309 eelf64_sparc_sol2.c:441 eelf64alpha.c:402
#: eelf64alpha_fbsd.c:402 eelf64alpha_nbsd.c:402 eelf64bmip.c:538
-#: eelf64briscv.c:381 eelf64briscv_lp64.c:381 eelf64briscv_lp64f.c:381
+#: eelf64briscv.c:377 eelf64briscv_lp64.c:377 eelf64briscv_lp64f.c:377
#: eelf64btsmip.c:524 eelf64btsmip_fbsd.c:524 eelf64hppa.c:253
-#: eelf64lppc.c:1021 eelf64lppc_fbsd.c:1021 eelf64lriscv.c:381
-#: eelf64lriscv_lp64.c:381 eelf64lriscv_lp64f.c:381 eelf64ltsmip.c:524
-#: eelf64ltsmip_fbsd.c:524 eelf64mmix.c:394 eelf64ppc.c:1021
+#: eelf64loongarch.c:359 eelf64lppc.c:1021 eelf64lppc_fbsd.c:1021
+#: eelf64lriscv.c:377 eelf64lriscv_lp64.c:377 eelf64lriscv_lp64f.c:377
+#: eelf64ltsmip.c:524 eelf64ltsmip_fbsd.c:524 eelf64mmix.c:394 eelf64ppc.c:1021
#: eelf64ppc_fbsd.c:1021 eelf64rdos.c:334 eelf64tilegx.c:309
-#: eelf64tilegx_be.c:309 eelf_i386.c:5000 eelf_i386_be.c:307
-#: eelf_i386_fbsd.c:343 eelf_i386_ldso.c:318 eelf_i386_sol2.c:475
-#: eelf_i386_vxworks.c:370 eelf_iamcu.c:343 eelf_k1om.c:5334
-#: eelf_k1om_fbsd.c:343 eelf_l1om.c:5334 eelf_l1om_fbsd.c:343 eelf_s390.c:309
-#: eelf_x86_64.c:5378 eelf_x86_64_cloudabi.c:343 eelf_x86_64_fbsd.c:343
+#: eelf64tilegx_be.c:309 eelf_i386.c:5022 eelf_i386_be.c:307
+#: eelf_i386_fbsd.c:343 eelf_i386_haiku.c:343 eelf_i386_ldso.c:318
+#: eelf_i386_sol2.c:475 eelf_i386_vxworks.c:370 eelf_iamcu.c:343
+#: eelf_k1om.c:5334 eelf_k1om_fbsd.c:343 eelf_l1om.c:5334 eelf_l1om_fbsd.c:343
+#: eelf_mipsel_haiku.c:524 eelf_s390.c:309 eelf_x86_64.c:5400
+#: eelf_x86_64_cloudabi.c:343 eelf_x86_64_fbsd.c:343 eelf_x86_64_haiku.c:343
#: eelf_x86_64_sol2.c:475 ehppa64linux.c:283 ehppalinux.c:592 ehppanbsd.c:592
#: ehppaobsd.c:592 ei386lynx.c:298 ei386moss.c:298 ei386nto.c:298
#: em32relf_linux.c:308 em32rlelf_linux.c:308 em68kelf.c:466 em68kelfnbsd.c:466
@@ -3154,14 +3173,15 @@ msgstr ""
#: eaarch64cloudabi.c:638 eaarch64cloudabib.c:638 eaarch64elf.c:637
#: eaarch64elf32.c:637 eaarch64elf32b.c:637 eaarch64elfb.c:637
-#: eaarch64fbsd.c:638 eaarch64fbsdb.c:638 eaarch64linux.c:638
-#: eaarch64linux32.c:638 eaarch64linux32b.c:638 eaarch64linuxb.c:638
-#: earcelf.c:270 earclinux.c:326 earclinux_nps.c:326 earcv2elf.c:203
-#: earcv2elfx.c:203 earmelf.c:880 earmelf_fbsd.c:880 earmelf_fuchsia.c:881
-#: earmelf_linux.c:881 earmelf_linux_eabi.c:881 earmelf_linux_fdpiceabi.c:881
-#: earmelf_nacl.c:881 earmelf_nbsd.c:880 earmelf_phoenix.c:881
-#: earmelf_vxworks.c:916 earmelfb.c:880 earmelfb_fbsd.c:880
-#: earmelfb_fuchsia.c:881 earmelfb_linux.c:881 earmelfb_linux_eabi.c:881
+#: eaarch64fbsd.c:638 eaarch64fbsdb.c:638 eaarch64haiku.c:638
+#: eaarch64linux.c:638 eaarch64linux32.c:638 eaarch64linux32b.c:638
+#: eaarch64linuxb.c:638 earcelf.c:270 earclinux.c:326 earclinux_nps.c:326
+#: earcv2elf.c:203 earcv2elfx.c:203 earmelf.c:880 earmelf_fbsd.c:880
+#: earmelf_fuchsia.c:881 earmelf_haiku.c:881 earmelf_linux.c:881
+#: earmelf_linux_eabi.c:881 earmelf_linux_fdpiceabi.c:881 earmelf_nacl.c:881
+#: earmelf_nbsd.c:880 earmelf_phoenix.c:881 earmelf_vxworks.c:916
+#: earmelfb.c:880 earmelfb_fbsd.c:880 earmelfb_fuchsia.c:881
+#: earmelfb_linux.c:881 earmelfb_linux_eabi.c:881
#: earmelfb_linux_fdpiceabi.c:881 earmelfb_nacl.c:881 earmelfb_nbsd.c:880
#: earmnto.c:855 eavr1.c:426 eavr2.c:426 eavr25.c:426 eavr3.c:426 eavr31.c:426
#: eavr35.c:426 eavr4.c:426 eavr5.c:426 eavr51.c:426 eavr6.c:426 eavrtiny.c:426
@@ -3171,44 +3191,45 @@ msgstr ""
#: eelf32_sparc.c:326 eelf32_sparc_sol2.c:458 eelf32_sparc_vxworks.c:363
#: eelf32_spu.c:936 eelf32_tic6x_be.c:437 eelf32_tic6x_elf_be.c:437
#: eelf32_tic6x_elf_le.c:437 eelf32_tic6x_le.c:437 eelf32_tic6x_linux_be.c:437
-#: eelf32_tic6x_linux_le.c:437 eelf32_x86_64.c:5395 eelf32am33lin.c:300
+#: eelf32_tic6x_linux_le.c:437 eelf32_x86_64.c:5417 eelf32am33lin.c:300
#: eelf32b4300.c:541 eelf32bfin.c:318 eelf32bfinfd.c:343 eelf32bmip.c:541
-#: eelf32bmipn32.c:555 eelf32briscv.c:398 eelf32briscv_ilp32.c:398
-#: eelf32briscv_ilp32f.c:398 eelf32bsmip.c:555 eelf32btsmip.c:541
+#: eelf32bmipn32.c:555 eelf32briscv.c:394 eelf32briscv_ilp32.c:394
+#: eelf32briscv_ilp32f.c:394 eelf32bsmip.c:555 eelf32btsmip.c:541
#: eelf32btsmip_fbsd.c:541 eelf32btsmipn32.c:541 eelf32btsmipn32_fbsd.c:541
#: eelf32cr16.c:353 eelf32crx.c:240 eelf32ebmip.c:541 eelf32ebmipvxworks.c:576
#: eelf32elmip.c:541 eelf32elmipvxworks.c:576 eelf32epiphany.c:218
#: eelf32epiphany_4x4.c:205 eelf32frvfd.c:325 eelf32ip2k.c:218
#: eelf32l4300.c:541 eelf32lm32.c:218 eelf32lm32fd.c:325 eelf32lmip.c:541
-#: eelf32lppc.c:589 eelf32lppclinux.c:589 eelf32lppcnto.c:589
-#: eelf32lppcsim.c:589 eelf32lr5900.c:459 eelf32lr5900n32.c:458
-#: eelf32lriscv.c:398 eelf32lriscv_ilp32.c:398 eelf32lriscv_ilp32f.c:398
-#: eelf32lsmip.c:541 eelf32ltsmip.c:541 eelf32ltsmip_fbsd.c:541
-#: eelf32ltsmipn32.c:541 eelf32ltsmipn32_fbsd.c:541 eelf32m32c.c:229
-#: eelf32mb_linux.c:326 eelf32mbel_linux.c:326 eelf32mcore.c:224
-#: eelf32mep.c:203 eelf32metag.c:575 eelf32microblaze.c:203
+#: eelf32loongarch.c:376 eelf32lppc.c:589 eelf32lppclinux.c:589
+#: eelf32lppcnto.c:589 eelf32lppcsim.c:589 eelf32lr5900.c:459
+#: eelf32lr5900n32.c:458 eelf32lriscv.c:394 eelf32lriscv_ilp32.c:394
+#: eelf32lriscv_ilp32f.c:394 eelf32lsmip.c:541 eelf32ltsmip.c:541
+#: eelf32ltsmip_fbsd.c:541 eelf32ltsmipn32.c:541 eelf32ltsmipn32_fbsd.c:541
+#: eelf32m32c.c:229 eelf32mb_linux.c:326 eelf32mbel_linux.c:326
+#: eelf32mcore.c:224 eelf32mep.c:203 eelf32metag.c:575 eelf32microblaze.c:203
#: eelf32microblazeel.c:203 eelf32mipswindiss.c:433 eelf32moxie.c:218
#: eelf32or1k.c:219 eelf32or1k_linux.c:326 eelf32ppc.c:589 eelf32ppc_fbsd.c:589
-#: eelf32ppclinux.c:589 eelf32ppcnto.c:589 eelf32ppcsim.c:589
-#: eelf32ppcvxworks.c:563 eelf32ppcwindiss.c:589 eelf32rl78.c:218
-#: eelf32rx.c:246 eelf32rx_linux.c:231 eelf32tilegx.c:326 eelf32tilegx_be.c:326
-#: eelf32tilepro.c:326 eelf32vax.c:300 eelf32visium.c:203 eelf32xc16x.c:203
-#: eelf32xc16xl.c:203 eelf32xc16xs.c:203 eelf32xstormy16.c:214
-#: eelf32xtensa.c:2247 eelf32z80.c:230 eelf64_aix.c:300 eelf64_ia64.c:357
-#: eelf64_ia64_fbsd.c:357 eelf64_s390.c:396 eelf64_sparc.c:326
-#: eelf64_sparc_fbsd.c:326 eelf64_sparc_sol2.c:458 eelf64alpha.c:419
-#: eelf64alpha_fbsd.c:419 eelf64alpha_nbsd.c:419 eelf64bmip.c:555
-#: eelf64bpf.c:203 eelf64briscv.c:398 eelf64briscv_lp64.c:398
-#: eelf64briscv_lp64f.c:398 eelf64btsmip.c:541 eelf64btsmip_fbsd.c:541
-#: eelf64hppa.c:270 eelf64lppc.c:1038 eelf64lppc_fbsd.c:1038 eelf64lriscv.c:398
-#: eelf64lriscv_lp64.c:398 eelf64lriscv_lp64f.c:398 eelf64ltsmip.c:541
-#: eelf64ltsmip_fbsd.c:541 eelf64mmix.c:411 eelf64ppc.c:1038
-#: eelf64ppc_fbsd.c:1038 eelf64rdos.c:351 eelf64tilegx.c:326
-#: eelf64tilegx_be.c:326 eelf_i386.c:5017 eelf_i386_be.c:324
-#: eelf_i386_fbsd.c:360 eelf_i386_ldso.c:335 eelf_i386_sol2.c:492
-#: eelf_i386_vxworks.c:387 eelf_iamcu.c:360 eelf_k1om.c:5351
-#: eelf_k1om_fbsd.c:360 eelf_l1om.c:5351 eelf_l1om_fbsd.c:360 eelf_s390.c:326
-#: eelf_x86_64.c:5395 eelf_x86_64_cloudabi.c:360 eelf_x86_64_fbsd.c:360
+#: eelf32ppchaiku.c:589 eelf32ppclinux.c:589 eelf32ppcnto.c:589
+#: eelf32ppcsim.c:589 eelf32ppcvxworks.c:563 eelf32ppcwindiss.c:589
+#: eelf32rl78.c:218 eelf32rx.c:246 eelf32rx_linux.c:231 eelf32tilegx.c:326
+#: eelf32tilegx_be.c:326 eelf32tilepro.c:326 eelf32vax.c:300 eelf32visium.c:203
+#: eelf32xc16x.c:203 eelf32xc16xl.c:203 eelf32xc16xs.c:203
+#: eelf32xstormy16.c:214 eelf32xtensa.c:2247 eelf32z80.c:230 eelf64_aix.c:300
+#: eelf64_ia64.c:357 eelf64_ia64_fbsd.c:357 eelf64_s390.c:396
+#: eelf64_sparc.c:326 eelf64_sparc_fbsd.c:326 eelf64_sparc_sol2.c:458
+#: eelf64alpha.c:419 eelf64alpha_fbsd.c:419 eelf64alpha_nbsd.c:419
+#: eelf64bmip.c:555 eelf64bpf.c:203 eelf64briscv.c:394 eelf64briscv_lp64.c:394
+#: eelf64briscv_lp64f.c:394 eelf64btsmip.c:541 eelf64btsmip_fbsd.c:541
+#: eelf64hppa.c:270 eelf64loongarch.c:376 eelf64lppc.c:1038
+#: eelf64lppc_fbsd.c:1038 eelf64lriscv.c:394 eelf64lriscv_lp64.c:394
+#: eelf64lriscv_lp64f.c:394 eelf64ltsmip.c:541 eelf64ltsmip_fbsd.c:541
+#: eelf64mmix.c:411 eelf64ppc.c:1038 eelf64ppc_fbsd.c:1038 eelf64rdos.c:351
+#: eelf64tilegx.c:326 eelf64tilegx_be.c:326 eelf_i386.c:5039 eelf_i386_be.c:324
+#: eelf_i386_fbsd.c:360 eelf_i386_haiku.c:360 eelf_i386_ldso.c:335
+#: eelf_i386_sol2.c:492 eelf_i386_vxworks.c:387 eelf_iamcu.c:360
+#: eelf_k1om.c:5351 eelf_k1om_fbsd.c:360 eelf_l1om.c:5351 eelf_l1om_fbsd.c:360
+#: eelf_mipsel_haiku.c:541 eelf_s390.c:326 eelf_x86_64.c:5417
+#: eelf_x86_64_cloudabi.c:360 eelf_x86_64_fbsd.c:360 eelf_x86_64_haiku.c:360
#: eelf_x86_64_sol2.c:492 eh8300elf.c:218 eh8300elf_linux.c:218
#: eh8300helf.c:218 eh8300helf_linux.c:218 eh8300hnelf.c:218 eh8300self.c:218
#: eh8300self_linux.c:218 eh8300snelf.c:218 eh8300sxelf.c:218
@@ -3227,377 +3248,389 @@ msgstr ""
msgid "%F%P: invalid maximum page size `%s'\n"
msgstr ""
-#: eaarch64cloudabi.c:647 eaarch64cloudabib.c:647 eaarch64elf.c:646
-#: eaarch64elf32.c:646 eaarch64elf32b.c:646 eaarch64elfb.c:646
-#: eaarch64fbsd.c:647 eaarch64fbsdb.c:647 eaarch64linux.c:647
-#: eaarch64linux32.c:647 eaarch64linux32b.c:647 eaarch64linuxb.c:647
-#: earcelf.c:279 earclinux.c:335 earclinux_nps.c:335 earcv2elf.c:212
-#: earcv2elfx.c:212 earmelf.c:889 earmelf_fbsd.c:889 earmelf_fuchsia.c:890
-#: earmelf_linux.c:890 earmelf_linux_eabi.c:890 earmelf_linux_fdpiceabi.c:890
-#: earmelf_nacl.c:890 earmelf_nbsd.c:889 earmelf_phoenix.c:890
-#: earmelf_vxworks.c:925 earmelfb.c:889 earmelfb_fbsd.c:889
-#: earmelfb_fuchsia.c:890 earmelfb_linux.c:890 earmelfb_linux_eabi.c:890
-#: earmelfb_linux_fdpiceabi.c:890 earmelfb_nacl.c:890 earmelfb_nbsd.c:889
-#: earmnto.c:864 eavr1.c:435 eavr2.c:435 eavr25.c:435 eavr3.c:435 eavr31.c:435
-#: eavr35.c:435 eavr4.c:435 eavr5.c:435 eavr51.c:435 eavr6.c:435 eavrtiny.c:435
-#: eavrxmega1.c:435 eavrxmega2.c:435 eavrxmega3.c:435 eavrxmega4.c:435
-#: eavrxmega5.c:435 eavrxmega6.c:435 eavrxmega7.c:435 ecriself.c:227
-#: ecrislinux.c:310 ecskyelf.c:471 ecskyelf_linux.c:579 ed10velf.c:212
-#: eelf32_sparc.c:335 eelf32_sparc_sol2.c:467 eelf32_sparc_vxworks.c:372
-#: eelf32_spu.c:945 eelf32_tic6x_be.c:446 eelf32_tic6x_elf_be.c:446
-#: eelf32_tic6x_elf_le.c:446 eelf32_tic6x_le.c:446 eelf32_tic6x_linux_be.c:446
-#: eelf32_tic6x_linux_le.c:446 eelf32_x86_64.c:5404 eelf32am33lin.c:309
-#: eelf32b4300.c:550 eelf32bfin.c:327 eelf32bfinfd.c:352 eelf32bmip.c:550
-#: eelf32bmipn32.c:564 eelf32briscv.c:407 eelf32briscv_ilp32.c:407
-#: eelf32briscv_ilp32f.c:407 eelf32bsmip.c:564 eelf32btsmip.c:550
-#: eelf32btsmip_fbsd.c:550 eelf32btsmipn32.c:550 eelf32btsmipn32_fbsd.c:550
-#: eelf32cr16.c:362 eelf32crx.c:249 eelf32ebmip.c:550 eelf32ebmipvxworks.c:585
-#: eelf32elmip.c:550 eelf32elmipvxworks.c:585 eelf32epiphany.c:227
-#: eelf32epiphany_4x4.c:214 eelf32frvfd.c:334 eelf32ip2k.c:227
-#: eelf32l4300.c:550 eelf32lm32.c:227 eelf32lm32fd.c:334 eelf32lmip.c:550
-#: eelf32lppc.c:598 eelf32lppclinux.c:598 eelf32lppcnto.c:598
-#: eelf32lppcsim.c:598 eelf32lr5900.c:468 eelf32lr5900n32.c:467
-#: eelf32lriscv.c:407 eelf32lriscv_ilp32.c:407 eelf32lriscv_ilp32f.c:407
-#: eelf32lsmip.c:550 eelf32ltsmip.c:550 eelf32ltsmip_fbsd.c:550
-#: eelf32ltsmipn32.c:550 eelf32ltsmipn32_fbsd.c:550 eelf32m32c.c:238
-#: eelf32mb_linux.c:335 eelf32mbel_linux.c:335 eelf32mcore.c:233
-#: eelf32mep.c:212 eelf32metag.c:584 eelf32microblaze.c:212
-#: eelf32microblazeel.c:212 eelf32mipswindiss.c:442 eelf32moxie.c:227
-#: eelf32or1k.c:228 eelf32or1k_linux.c:335 eelf32ppc.c:598 eelf32ppc_fbsd.c:598
-#: eelf32ppclinux.c:598 eelf32ppcnto.c:598 eelf32ppcsim.c:598
-#: eelf32ppcvxworks.c:572 eelf32ppcwindiss.c:598 eelf32rl78.c:227
-#: eelf32rx.c:255 eelf32rx_linux.c:240 eelf32tilegx.c:335 eelf32tilegx_be.c:335
-#: eelf32tilepro.c:335 eelf32vax.c:309 eelf32visium.c:212 eelf32xc16x.c:212
-#: eelf32xc16xl.c:212 eelf32xc16xs.c:212 eelf32xstormy16.c:223
-#: eelf32xtensa.c:2256 eelf32z80.c:239 eelf64_aix.c:309 eelf64_ia64.c:366
-#: eelf64_ia64_fbsd.c:366 eelf64_s390.c:405 eelf64_sparc.c:335
-#: eelf64_sparc_fbsd.c:335 eelf64_sparc_sol2.c:467 eelf64alpha.c:428
-#: eelf64alpha_fbsd.c:428 eelf64alpha_nbsd.c:428 eelf64bmip.c:564
-#: eelf64bpf.c:212 eelf64briscv.c:407 eelf64briscv_lp64.c:407
-#: eelf64briscv_lp64f.c:407 eelf64btsmip.c:550 eelf64btsmip_fbsd.c:550
-#: eelf64hppa.c:279 eelf64lppc.c:1047 eelf64lppc_fbsd.c:1047 eelf64lriscv.c:407
-#: eelf64lriscv_lp64.c:407 eelf64lriscv_lp64f.c:407 eelf64ltsmip.c:550
-#: eelf64ltsmip_fbsd.c:550 eelf64mmix.c:420 eelf64ppc.c:1047
-#: eelf64ppc_fbsd.c:1047 eelf64rdos.c:360 eelf64tilegx.c:335
-#: eelf64tilegx_be.c:335 eelf_i386.c:5026 eelf_i386_be.c:333
-#: eelf_i386_fbsd.c:369 eelf_i386_ldso.c:344 eelf_i386_sol2.c:501
-#: eelf_i386_vxworks.c:396 eelf_iamcu.c:369 eelf_k1om.c:5360
-#: eelf_k1om_fbsd.c:369 eelf_l1om.c:5360 eelf_l1om_fbsd.c:369 eelf_s390.c:335
-#: eelf_x86_64.c:5404 eelf_x86_64_cloudabi.c:369 eelf_x86_64_fbsd.c:369
-#: eelf_x86_64_sol2.c:501 eh8300elf.c:227 eh8300elf_linux.c:227
-#: eh8300helf.c:227 eh8300helf_linux.c:227 eh8300hnelf.c:227 eh8300self.c:227
-#: eh8300self_linux.c:227 eh8300snelf.c:227 eh8300sxelf.c:227
-#: eh8300sxelf_linux.c:227 eh8300sxnelf.c:227 ehppa64linux.c:309 ehppaelf.c:495
-#: ehppalinux.c:618 ehppanbsd.c:618 ehppaobsd.c:618 ei386lynx.c:324
-#: ei386moss.c:324 ei386nto.c:324 em32relf.c:227 em32relf_linux.c:334
-#: em32rlelf.c:227 em32rlelf_linux.c:334 em68hc11elf.c:497 em68hc11elfb.c:497
-#: em68hc12elf.c:497 em68hc12elfb.c:497 em68kelf.c:492 em68kelfnbsd.c:492
-#: emn10300.c:309 ends32belf.c:348 ends32belf16m.c:348 ends32belf_linux.c:422
-#: ends32elf.c:348 ends32elf16m.c:348 ends32elf_linux.c:422 enios2elf.c:514
-#: enios2linux.c:596 epruelf.c:233 escore3_elf.c:330 escore7_elf.c:330
-#: eshelf.c:309 eshelf_fd.c:335 eshelf_linux.c:335 eshelf_nbsd.c:309
-#: eshelf_nto.c:309 eshelf_uclinux.c:309 eshelf_vxworks.c:346 eshlelf.c:309
-#: eshlelf_fd.c:335 eshlelf_linux.c:335 eshlelf_nbsd.c:309 eshlelf_nto.c:309
-#: eshlelf_vxworks.c:346 ev850.c:259 ev850_rh850.c:259
+#: eaarch64cloudabi.c:648 eaarch64cloudabib.c:648 eaarch64elf.c:647
+#: eaarch64elf32.c:647 eaarch64elf32b.c:647 eaarch64elfb.c:647
+#: eaarch64fbsd.c:648 eaarch64fbsdb.c:648 eaarch64haiku.c:648
+#: eaarch64linux.c:648 eaarch64linux32.c:648 eaarch64linux32b.c:648
+#: eaarch64linuxb.c:648 earcelf.c:280 earclinux.c:336 earclinux_nps.c:336
+#: earcv2elf.c:213 earcv2elfx.c:213 earmelf.c:890 earmelf_fbsd.c:890
+#: earmelf_fuchsia.c:891 earmelf_haiku.c:891 earmelf_linux.c:891
+#: earmelf_linux_eabi.c:891 earmelf_linux_fdpiceabi.c:891 earmelf_nacl.c:891
+#: earmelf_nbsd.c:890 earmelf_phoenix.c:891 earmelf_vxworks.c:926
+#: earmelfb.c:890 earmelfb_fbsd.c:890 earmelfb_fuchsia.c:891
+#: earmelfb_linux.c:891 earmelfb_linux_eabi.c:891
+#: earmelfb_linux_fdpiceabi.c:891 earmelfb_nacl.c:891 earmelfb_nbsd.c:890
+#: earmnto.c:865 eavr1.c:436 eavr2.c:436 eavr25.c:436 eavr3.c:436 eavr31.c:436
+#: eavr35.c:436 eavr4.c:436 eavr5.c:436 eavr51.c:436 eavr6.c:436 eavrtiny.c:436
+#: eavrxmega1.c:436 eavrxmega2.c:436 eavrxmega3.c:436 eavrxmega4.c:436
+#: eavrxmega5.c:436 eavrxmega6.c:436 eavrxmega7.c:436 ecriself.c:228
+#: ecrislinux.c:311 ecskyelf.c:472 ecskyelf_linux.c:580 ed10velf.c:213
+#: eelf32_sparc.c:336 eelf32_sparc_sol2.c:468 eelf32_sparc_vxworks.c:373
+#: eelf32_spu.c:946 eelf32_tic6x_be.c:447 eelf32_tic6x_elf_be.c:447
+#: eelf32_tic6x_elf_le.c:447 eelf32_tic6x_le.c:447 eelf32_tic6x_linux_be.c:447
+#: eelf32_tic6x_linux_le.c:447 eelf32_x86_64.c:5427 eelf32am33lin.c:310
+#: eelf32b4300.c:551 eelf32bfin.c:328 eelf32bfinfd.c:353 eelf32bmip.c:551
+#: eelf32bmipn32.c:565 eelf32briscv.c:404 eelf32briscv_ilp32.c:404
+#: eelf32briscv_ilp32f.c:404 eelf32bsmip.c:565 eelf32btsmip.c:551
+#: eelf32btsmip_fbsd.c:551 eelf32btsmipn32.c:551 eelf32btsmipn32_fbsd.c:551
+#: eelf32cr16.c:363 eelf32crx.c:250 eelf32ebmip.c:551 eelf32ebmipvxworks.c:586
+#: eelf32elmip.c:551 eelf32elmipvxworks.c:586 eelf32epiphany.c:228
+#: eelf32epiphany_4x4.c:215 eelf32frvfd.c:335 eelf32ip2k.c:228
+#: eelf32l4300.c:551 eelf32lm32.c:228 eelf32lm32fd.c:335 eelf32lmip.c:551
+#: eelf32loongarch.c:386 eelf32lppc.c:599 eelf32lppclinux.c:599
+#: eelf32lppcnto.c:599 eelf32lppcsim.c:599 eelf32lr5900.c:469
+#: eelf32lr5900n32.c:468 eelf32lriscv.c:404 eelf32lriscv_ilp32.c:404
+#: eelf32lriscv_ilp32f.c:404 eelf32lsmip.c:551 eelf32ltsmip.c:551
+#: eelf32ltsmip_fbsd.c:551 eelf32ltsmipn32.c:551 eelf32ltsmipn32_fbsd.c:551
+#: eelf32m32c.c:239 eelf32mb_linux.c:336 eelf32mbel_linux.c:336
+#: eelf32mcore.c:234 eelf32mep.c:213 eelf32metag.c:585 eelf32microblaze.c:213
+#: eelf32microblazeel.c:213 eelf32mipswindiss.c:443 eelf32moxie.c:228
+#: eelf32or1k.c:229 eelf32or1k_linux.c:336 eelf32ppc.c:599 eelf32ppc_fbsd.c:599
+#: eelf32ppchaiku.c:599 eelf32ppclinux.c:599 eelf32ppcnto.c:599
+#: eelf32ppcsim.c:599 eelf32ppcvxworks.c:573 eelf32ppcwindiss.c:599
+#: eelf32rl78.c:228 eelf32rx.c:256 eelf32rx_linux.c:241 eelf32tilegx.c:336
+#: eelf32tilegx_be.c:336 eelf32tilepro.c:336 eelf32vax.c:310 eelf32visium.c:213
+#: eelf32xc16x.c:213 eelf32xc16xl.c:213 eelf32xc16xs.c:213
+#: eelf32xstormy16.c:224 eelf32xtensa.c:2257 eelf32z80.c:240 eelf64_aix.c:310
+#: eelf64_ia64.c:367 eelf64_ia64_fbsd.c:367 eelf64_s390.c:406
+#: eelf64_sparc.c:336 eelf64_sparc_fbsd.c:336 eelf64_sparc_sol2.c:468
+#: eelf64alpha.c:429 eelf64alpha_fbsd.c:429 eelf64alpha_nbsd.c:429
+#: eelf64bmip.c:565 eelf64bpf.c:213 eelf64briscv.c:404 eelf64briscv_lp64.c:404
+#: eelf64briscv_lp64f.c:404 eelf64btsmip.c:551 eelf64btsmip_fbsd.c:551
+#: eelf64hppa.c:280 eelf64loongarch.c:386 eelf64lppc.c:1048
+#: eelf64lppc_fbsd.c:1048 eelf64lriscv.c:404 eelf64lriscv_lp64.c:404
+#: eelf64lriscv_lp64f.c:404 eelf64ltsmip.c:551 eelf64ltsmip_fbsd.c:551
+#: eelf64mmix.c:421 eelf64ppc.c:1048 eelf64ppc_fbsd.c:1048 eelf64rdos.c:361
+#: eelf64tilegx.c:336 eelf64tilegx_be.c:336 eelf_i386.c:5049 eelf_i386_be.c:334
+#: eelf_i386_fbsd.c:370 eelf_i386_haiku.c:370 eelf_i386_ldso.c:345
+#: eelf_i386_sol2.c:502 eelf_i386_vxworks.c:397 eelf_iamcu.c:370
+#: eelf_k1om.c:5361 eelf_k1om_fbsd.c:370 eelf_l1om.c:5361 eelf_l1om_fbsd.c:370
+#: eelf_mipsel_haiku.c:551 eelf_s390.c:336 eelf_x86_64.c:5427
+#: eelf_x86_64_cloudabi.c:370 eelf_x86_64_fbsd.c:370 eelf_x86_64_haiku.c:370
+#: eelf_x86_64_sol2.c:502 eh8300elf.c:228 eh8300elf_linux.c:228
+#: eh8300helf.c:228 eh8300helf_linux.c:228 eh8300hnelf.c:228 eh8300self.c:228
+#: eh8300self_linux.c:228 eh8300snelf.c:228 eh8300sxelf.c:228
+#: eh8300sxelf_linux.c:228 eh8300sxnelf.c:228 ehppa64linux.c:310 ehppaelf.c:496
+#: ehppalinux.c:619 ehppanbsd.c:619 ehppaobsd.c:619 ei386lynx.c:325
+#: ei386moss.c:325 ei386nto.c:325 em32relf.c:228 em32relf_linux.c:335
+#: em32rlelf.c:228 em32rlelf_linux.c:335 em68hc11elf.c:498 em68hc11elfb.c:498
+#: em68hc12elf.c:498 em68hc12elfb.c:498 em68kelf.c:493 em68kelfnbsd.c:493
+#: emn10300.c:310 ends32belf.c:349 ends32belf16m.c:349 ends32belf_linux.c:423
+#: ends32elf.c:349 ends32elf16m.c:349 ends32elf_linux.c:423 enios2elf.c:515
+#: enios2linux.c:597 epruelf.c:234 escore3_elf.c:331 escore7_elf.c:331
+#: eshelf.c:310 eshelf_fd.c:336 eshelf_linux.c:336 eshelf_nbsd.c:310
+#: eshelf_nto.c:310 eshelf_uclinux.c:310 eshelf_vxworks.c:347 eshlelf.c:310
+#: eshlelf_fd.c:336 eshlelf_linux.c:336 eshlelf_nbsd.c:310 eshlelf_nto.c:310
+#: eshlelf_vxworks.c:347 ev850.c:260 ev850_rh850.c:260
msgid "%F%P: invalid common page size `%s'\n"
msgstr ""
-#: eaarch64cloudabi.c:655 eaarch64cloudabib.c:655 eaarch64elf.c:654
-#: eaarch64elf32.c:654 eaarch64elf32b.c:654 eaarch64elfb.c:654
-#: eaarch64fbsd.c:655 eaarch64fbsdb.c:655 eaarch64linux.c:655
-#: eaarch64linux32.c:655 eaarch64linux32b.c:655 eaarch64linuxb.c:655
-#: earcelf.c:287 earclinux.c:343 earclinux_nps.c:343 earcv2elf.c:220
-#: earcv2elfx.c:220 earmelf.c:897 earmelf_fbsd.c:897 earmelf_fuchsia.c:898
-#: earmelf_linux.c:898 earmelf_linux_eabi.c:898 earmelf_linux_fdpiceabi.c:898
-#: earmelf_nacl.c:898 earmelf_nbsd.c:897 earmelf_phoenix.c:898
-#: earmelf_vxworks.c:933 earmelfb.c:897 earmelfb_fbsd.c:897
-#: earmelfb_fuchsia.c:898 earmelfb_linux.c:898 earmelfb_linux_eabi.c:898
-#: earmelfb_linux_fdpiceabi.c:898 earmelfb_nacl.c:898 earmelfb_nbsd.c:897
-#: earmnto.c:872 eavr1.c:443 eavr2.c:443 eavr25.c:443 eavr3.c:443 eavr31.c:443
-#: eavr35.c:443 eavr4.c:443 eavr5.c:443 eavr51.c:443 eavr6.c:443 eavrtiny.c:443
-#: eavrxmega1.c:443 eavrxmega2.c:443 eavrxmega3.c:443 eavrxmega4.c:443
-#: eavrxmega5.c:443 eavrxmega6.c:443 eavrxmega7.c:443 ecriself.c:235
-#: ecrislinux.c:318 ecskyelf.c:479 ecskyelf_linux.c:587 ed10velf.c:220
-#: eelf32_sparc.c:343 eelf32_sparc_sol2.c:475 eelf32_sparc_vxworks.c:380
-#: eelf32_spu.c:953 eelf32_tic6x_be.c:454 eelf32_tic6x_elf_be.c:454
-#: eelf32_tic6x_elf_le.c:454 eelf32_tic6x_le.c:454 eelf32_tic6x_linux_be.c:454
-#: eelf32_tic6x_linux_le.c:454 eelf32_x86_64.c:5412 eelf32am33lin.c:317
-#: eelf32b4300.c:558 eelf32bfin.c:335 eelf32bfinfd.c:360 eelf32bmip.c:558
-#: eelf32bmipn32.c:572 eelf32briscv.c:415 eelf32briscv_ilp32.c:415
-#: eelf32briscv_ilp32f.c:415 eelf32bsmip.c:572 eelf32btsmip.c:558
-#: eelf32btsmip_fbsd.c:558 eelf32btsmipn32.c:558 eelf32btsmipn32_fbsd.c:558
-#: eelf32cr16.c:370 eelf32crx.c:257 eelf32ebmip.c:558 eelf32ebmipvxworks.c:593
-#: eelf32elmip.c:558 eelf32elmipvxworks.c:593 eelf32epiphany.c:235
-#: eelf32epiphany_4x4.c:222 eelf32frvfd.c:342 eelf32ip2k.c:235
-#: eelf32l4300.c:558 eelf32lm32.c:235 eelf32lm32fd.c:342 eelf32lmip.c:558
-#: eelf32lppc.c:606 eelf32lppclinux.c:606 eelf32lppcnto.c:606
-#: eelf32lppcsim.c:606 eelf32lr5900.c:476 eelf32lr5900n32.c:475
-#: eelf32lriscv.c:415 eelf32lriscv_ilp32.c:415 eelf32lriscv_ilp32f.c:415
-#: eelf32lsmip.c:558 eelf32ltsmip.c:558 eelf32ltsmip_fbsd.c:558
-#: eelf32ltsmipn32.c:558 eelf32ltsmipn32_fbsd.c:558 eelf32m32c.c:246
-#: eelf32mb_linux.c:343 eelf32mbel_linux.c:343 eelf32mcore.c:241
-#: eelf32mep.c:220 eelf32metag.c:592 eelf32microblaze.c:220
-#: eelf32microblazeel.c:220 eelf32mipswindiss.c:450 eelf32moxie.c:235
-#: eelf32or1k.c:236 eelf32or1k_linux.c:343 eelf32ppc.c:606 eelf32ppc_fbsd.c:606
-#: eelf32ppclinux.c:606 eelf32ppcnto.c:606 eelf32ppcsim.c:606
-#: eelf32ppcvxworks.c:580 eelf32ppcwindiss.c:606 eelf32rl78.c:235
-#: eelf32rx.c:263 eelf32rx_linux.c:248 eelf32tilegx.c:343 eelf32tilegx_be.c:343
-#: eelf32tilepro.c:343 eelf32vax.c:317 eelf32visium.c:220 eelf32xc16x.c:220
-#: eelf32xc16xl.c:220 eelf32xc16xs.c:220 eelf32xstormy16.c:231
-#: eelf32xtensa.c:2264 eelf32z80.c:247 eelf64_aix.c:317 eelf64_ia64.c:374
-#: eelf64_ia64_fbsd.c:374 eelf64_s390.c:413 eelf64_sparc.c:343
-#: eelf64_sparc_fbsd.c:343 eelf64_sparc_sol2.c:475 eelf64alpha.c:436
-#: eelf64alpha_fbsd.c:436 eelf64alpha_nbsd.c:436 eelf64bmip.c:572
-#: eelf64bpf.c:220 eelf64briscv.c:415 eelf64briscv_lp64.c:415
-#: eelf64briscv_lp64f.c:415 eelf64btsmip.c:558 eelf64btsmip_fbsd.c:558
-#: eelf64hppa.c:287 eelf64lppc.c:1055 eelf64lppc_fbsd.c:1055 eelf64lriscv.c:415
-#: eelf64lriscv_lp64.c:415 eelf64lriscv_lp64f.c:415 eelf64ltsmip.c:558
-#: eelf64ltsmip_fbsd.c:558 eelf64mmix.c:428 eelf64ppc.c:1055
-#: eelf64ppc_fbsd.c:1055 eelf64rdos.c:368 eelf64tilegx.c:343
-#: eelf64tilegx_be.c:343 eelf_i386.c:5034 eelf_i386_be.c:341
-#: eelf_i386_fbsd.c:377 eelf_i386_ldso.c:352 eelf_i386_sol2.c:509
-#: eelf_i386_vxworks.c:404 eelf_iamcu.c:377 eelf_k1om.c:5368
-#: eelf_k1om_fbsd.c:377 eelf_l1om.c:5368 eelf_l1om_fbsd.c:377 eelf_s390.c:343
-#: eelf_x86_64.c:5412 eelf_x86_64_cloudabi.c:377 eelf_x86_64_fbsd.c:377
-#: eelf_x86_64_sol2.c:509 eh8300elf.c:235 eh8300elf_linux.c:235
-#: eh8300helf.c:235 eh8300helf_linux.c:235 eh8300hnelf.c:235 eh8300self.c:235
-#: eh8300self_linux.c:235 eh8300snelf.c:235 eh8300sxelf.c:235
-#: eh8300sxelf_linux.c:235 eh8300sxnelf.c:235 ehppa64linux.c:317 ehppaelf.c:503
-#: ehppalinux.c:626 ehppanbsd.c:626 ehppaobsd.c:626 ei386lynx.c:332
-#: ei386moss.c:332 ei386nto.c:332 em32relf.c:235 em32relf_linux.c:342
-#: em32rlelf.c:235 em32rlelf_linux.c:342 em68hc11elf.c:505 em68hc11elfb.c:505
-#: em68hc12elf.c:505 em68hc12elfb.c:505 em68kelf.c:500 em68kelfnbsd.c:500
-#: emn10300.c:317 ends32belf.c:356 ends32belf16m.c:356 ends32belf_linux.c:430
-#: ends32elf.c:356 ends32elf16m.c:356 ends32elf_linux.c:430 enios2elf.c:522
-#: enios2linux.c:604 epruelf.c:241 escore3_elf.c:338 escore7_elf.c:338
-#: eshelf.c:317 eshelf_fd.c:343 eshelf_linux.c:343 eshelf_nbsd.c:317
-#: eshelf_nto.c:317 eshelf_uclinux.c:317 eshelf_vxworks.c:354 eshlelf.c:317
-#: eshlelf_fd.c:343 eshlelf_linux.c:343 eshlelf_nbsd.c:317 eshlelf_nto.c:317
-#: eshlelf_vxworks.c:354 ev850.c:267 ev850_rh850.c:267
+#: eaarch64cloudabi.c:657 eaarch64cloudabib.c:657 eaarch64elf.c:656
+#: eaarch64elf32.c:656 eaarch64elf32b.c:656 eaarch64elfb.c:656
+#: eaarch64fbsd.c:657 eaarch64fbsdb.c:657 eaarch64haiku.c:657
+#: eaarch64linux.c:657 eaarch64linux32.c:657 eaarch64linux32b.c:657
+#: eaarch64linuxb.c:657 earcelf.c:289 earclinux.c:345 earclinux_nps.c:345
+#: earcv2elf.c:222 earcv2elfx.c:222 earmelf.c:899 earmelf_fbsd.c:899
+#: earmelf_fuchsia.c:900 earmelf_haiku.c:900 earmelf_linux.c:900
+#: earmelf_linux_eabi.c:900 earmelf_linux_fdpiceabi.c:900 earmelf_nacl.c:900
+#: earmelf_nbsd.c:899 earmelf_phoenix.c:900 earmelf_vxworks.c:935
+#: earmelfb.c:899 earmelfb_fbsd.c:899 earmelfb_fuchsia.c:900
+#: earmelfb_linux.c:900 earmelfb_linux_eabi.c:900
+#: earmelfb_linux_fdpiceabi.c:900 earmelfb_nacl.c:900 earmelfb_nbsd.c:899
+#: earmnto.c:874 eavr1.c:445 eavr2.c:445 eavr25.c:445 eavr3.c:445 eavr31.c:445
+#: eavr35.c:445 eavr4.c:445 eavr5.c:445 eavr51.c:445 eavr6.c:445 eavrtiny.c:445
+#: eavrxmega1.c:445 eavrxmega2.c:445 eavrxmega3.c:445 eavrxmega4.c:445
+#: eavrxmega5.c:445 eavrxmega6.c:445 eavrxmega7.c:445 ecriself.c:237
+#: ecrislinux.c:320 ecskyelf.c:481 ecskyelf_linux.c:589 ed10velf.c:222
+#: eelf32_sparc.c:345 eelf32_sparc_sol2.c:477 eelf32_sparc_vxworks.c:382
+#: eelf32_spu.c:955 eelf32_tic6x_be.c:456 eelf32_tic6x_elf_be.c:456
+#: eelf32_tic6x_elf_le.c:456 eelf32_tic6x_le.c:456 eelf32_tic6x_linux_be.c:456
+#: eelf32_tic6x_linux_le.c:456 eelf32_x86_64.c:5436 eelf32am33lin.c:319
+#: eelf32b4300.c:560 eelf32bfin.c:337 eelf32bfinfd.c:362 eelf32bmip.c:560
+#: eelf32bmipn32.c:574 eelf32briscv.c:413 eelf32briscv_ilp32.c:413
+#: eelf32briscv_ilp32f.c:413 eelf32bsmip.c:574 eelf32btsmip.c:560
+#: eelf32btsmip_fbsd.c:560 eelf32btsmipn32.c:560 eelf32btsmipn32_fbsd.c:560
+#: eelf32cr16.c:372 eelf32crx.c:259 eelf32ebmip.c:560 eelf32ebmipvxworks.c:595
+#: eelf32elmip.c:560 eelf32elmipvxworks.c:595 eelf32epiphany.c:237
+#: eelf32epiphany_4x4.c:224 eelf32frvfd.c:344 eelf32ip2k.c:237
+#: eelf32l4300.c:560 eelf32lm32.c:237 eelf32lm32fd.c:344 eelf32lmip.c:560
+#: eelf32loongarch.c:395 eelf32lppc.c:608 eelf32lppclinux.c:608
+#: eelf32lppcnto.c:608 eelf32lppcsim.c:608 eelf32lr5900.c:478
+#: eelf32lr5900n32.c:477 eelf32lriscv.c:413 eelf32lriscv_ilp32.c:413
+#: eelf32lriscv_ilp32f.c:413 eelf32lsmip.c:560 eelf32ltsmip.c:560
+#: eelf32ltsmip_fbsd.c:560 eelf32ltsmipn32.c:560 eelf32ltsmipn32_fbsd.c:560
+#: eelf32m32c.c:248 eelf32mb_linux.c:345 eelf32mbel_linux.c:345
+#: eelf32mcore.c:243 eelf32mep.c:222 eelf32metag.c:594 eelf32microblaze.c:222
+#: eelf32microblazeel.c:222 eelf32mipswindiss.c:452 eelf32moxie.c:237
+#: eelf32or1k.c:238 eelf32or1k_linux.c:345 eelf32ppc.c:608 eelf32ppc_fbsd.c:608
+#: eelf32ppchaiku.c:608 eelf32ppclinux.c:608 eelf32ppcnto.c:608
+#: eelf32ppcsim.c:608 eelf32ppcvxworks.c:582 eelf32ppcwindiss.c:608
+#: eelf32rl78.c:237 eelf32rx.c:265 eelf32rx_linux.c:250 eelf32tilegx.c:345
+#: eelf32tilegx_be.c:345 eelf32tilepro.c:345 eelf32vax.c:319 eelf32visium.c:222
+#: eelf32xc16x.c:222 eelf32xc16xl.c:222 eelf32xc16xs.c:222
+#: eelf32xstormy16.c:233 eelf32xtensa.c:2266 eelf32z80.c:249 eelf64_aix.c:319
+#: eelf64_ia64.c:376 eelf64_ia64_fbsd.c:376 eelf64_s390.c:415
+#: eelf64_sparc.c:345 eelf64_sparc_fbsd.c:345 eelf64_sparc_sol2.c:477
+#: eelf64alpha.c:438 eelf64alpha_fbsd.c:438 eelf64alpha_nbsd.c:438
+#: eelf64bmip.c:574 eelf64bpf.c:222 eelf64briscv.c:413 eelf64briscv_lp64.c:413
+#: eelf64briscv_lp64f.c:413 eelf64btsmip.c:560 eelf64btsmip_fbsd.c:560
+#: eelf64hppa.c:289 eelf64loongarch.c:395 eelf64lppc.c:1057
+#: eelf64lppc_fbsd.c:1057 eelf64lriscv.c:413 eelf64lriscv_lp64.c:413
+#: eelf64lriscv_lp64f.c:413 eelf64ltsmip.c:560 eelf64ltsmip_fbsd.c:560
+#: eelf64mmix.c:430 eelf64ppc.c:1057 eelf64ppc_fbsd.c:1057 eelf64rdos.c:370
+#: eelf64tilegx.c:345 eelf64tilegx_be.c:345 eelf_i386.c:5058 eelf_i386_be.c:343
+#: eelf_i386_fbsd.c:379 eelf_i386_haiku.c:379 eelf_i386_ldso.c:354
+#: eelf_i386_sol2.c:511 eelf_i386_vxworks.c:406 eelf_iamcu.c:379
+#: eelf_k1om.c:5370 eelf_k1om_fbsd.c:379 eelf_l1om.c:5370 eelf_l1om_fbsd.c:379
+#: eelf_mipsel_haiku.c:560 eelf_s390.c:345 eelf_x86_64.c:5436
+#: eelf_x86_64_cloudabi.c:379 eelf_x86_64_fbsd.c:379 eelf_x86_64_haiku.c:379
+#: eelf_x86_64_sol2.c:511 eh8300elf.c:237 eh8300elf_linux.c:237
+#: eh8300helf.c:237 eh8300helf_linux.c:237 eh8300hnelf.c:237 eh8300self.c:237
+#: eh8300self_linux.c:237 eh8300snelf.c:237 eh8300sxelf.c:237
+#: eh8300sxelf_linux.c:237 eh8300sxnelf.c:237 ehppa64linux.c:319 ehppaelf.c:505
+#: ehppalinux.c:628 ehppanbsd.c:628 ehppaobsd.c:628 ei386lynx.c:334
+#: ei386moss.c:334 ei386nto.c:334 em32relf.c:237 em32relf_linux.c:344
+#: em32rlelf.c:237 em32rlelf_linux.c:344 em68hc11elf.c:507 em68hc11elfb.c:507
+#: em68hc12elf.c:507 em68hc12elfb.c:507 em68kelf.c:502 em68kelfnbsd.c:502
+#: emn10300.c:319 ends32belf.c:358 ends32belf16m.c:358 ends32belf_linux.c:432
+#: ends32elf.c:358 ends32elf16m.c:358 ends32elf_linux.c:432 enios2elf.c:524
+#: enios2linux.c:606 epruelf.c:243 escore3_elf.c:340 escore7_elf.c:340
+#: eshelf.c:319 eshelf_fd.c:345 eshelf_linux.c:345 eshelf_nbsd.c:319
+#: eshelf_nto.c:319 eshelf_uclinux.c:319 eshelf_vxworks.c:356 eshlelf.c:319
+#: eshlelf_fd.c:345 eshlelf_linux.c:345 eshlelf_nbsd.c:319 eshlelf_nto.c:319
+#: eshlelf_vxworks.c:356 ev850.c:269 ev850_rh850.c:269
msgid "%F%P: invalid stack size `%s'\n"
msgstr ""
-#: eaarch64cloudabi.c:694 eaarch64cloudabib.c:694 eaarch64elf.c:693
-#: eaarch64elf32.c:693 eaarch64elf32b.c:693 eaarch64elfb.c:693
-#: eaarch64fbsd.c:694 eaarch64fbsdb.c:694 eaarch64linux.c:694
-#: eaarch64linux32.c:694 eaarch64linux32b.c:694 eaarch64linuxb.c:694
-#: earcelf.c:326 earclinux.c:382 earclinux_nps.c:382 earcv2elf.c:259
-#: earcv2elfx.c:259 earmelf.c:936 earmelf_fbsd.c:936 earmelf_fuchsia.c:937
-#: earmelf_linux.c:937 earmelf_linux_eabi.c:937 earmelf_linux_fdpiceabi.c:937
-#: earmelf_nacl.c:937 earmelf_nbsd.c:936 earmelf_phoenix.c:937
-#: earmelf_vxworks.c:972 earmelfb.c:936 earmelfb_fbsd.c:936
-#: earmelfb_fuchsia.c:937 earmelfb_linux.c:937 earmelfb_linux_eabi.c:937
-#: earmelfb_linux_fdpiceabi.c:937 earmelfb_nacl.c:937 earmelfb_nbsd.c:936
-#: earmnto.c:911 eavr1.c:482 eavr2.c:482 eavr25.c:482 eavr3.c:482 eavr31.c:482
-#: eavr35.c:482 eavr4.c:482 eavr5.c:482 eavr51.c:482 eavr6.c:482 eavrtiny.c:482
-#: eavrxmega1.c:482 eavrxmega2.c:482 eavrxmega3.c:482 eavrxmega4.c:482
-#: eavrxmega5.c:482 eavrxmega6.c:482 eavrxmega7.c:482 ecriself.c:274
-#: ecrislinux.c:357 ecskyelf.c:518 ecskyelf_linux.c:626 ed10velf.c:259
-#: eelf32_sparc.c:382 eelf32_sparc_sol2.c:514 eelf32_sparc_vxworks.c:419
-#: eelf32_spu.c:992 eelf32_tic6x_be.c:493 eelf32_tic6x_elf_be.c:493
-#: eelf32_tic6x_elf_le.c:493 eelf32_tic6x_le.c:493 eelf32_tic6x_linux_be.c:493
-#: eelf32_tic6x_linux_le.c:493 eelf32_x86_64.c:5451 eelf32am33lin.c:356
-#: eelf32b4300.c:597 eelf32bfin.c:374 eelf32bfinfd.c:399 eelf32bmip.c:597
-#: eelf32bmipn32.c:611 eelf32briscv.c:454 eelf32briscv_ilp32.c:454
-#: eelf32briscv_ilp32f.c:454 eelf32bsmip.c:611 eelf32btsmip.c:597
-#: eelf32btsmip_fbsd.c:597 eelf32btsmipn32.c:597 eelf32btsmipn32_fbsd.c:597
-#: eelf32cr16.c:409 eelf32crx.c:296 eelf32ebmip.c:597 eelf32ebmipvxworks.c:632
-#: eelf32elmip.c:597 eelf32elmipvxworks.c:632 eelf32epiphany.c:274
-#: eelf32epiphany_4x4.c:261 eelf32frvfd.c:381 eelf32ip2k.c:274
-#: eelf32l4300.c:597 eelf32lm32.c:274 eelf32lm32fd.c:381 eelf32lmip.c:597
-#: eelf32lppc.c:645 eelf32lppclinux.c:645 eelf32lppcnto.c:645
-#: eelf32lppcsim.c:645 eelf32lr5900.c:515 eelf32lr5900n32.c:514
-#: eelf32lriscv.c:454 eelf32lriscv_ilp32.c:454 eelf32lriscv_ilp32f.c:454
-#: eelf32lsmip.c:597 eelf32ltsmip.c:597 eelf32ltsmip_fbsd.c:597
-#: eelf32ltsmipn32.c:597 eelf32ltsmipn32_fbsd.c:597 eelf32m32c.c:285
-#: eelf32mb_linux.c:382 eelf32mbel_linux.c:382 eelf32mcore.c:280
-#: eelf32mep.c:259 eelf32metag.c:631 eelf32microblaze.c:259
-#: eelf32microblazeel.c:259 eelf32mipswindiss.c:489 eelf32moxie.c:274
-#: eelf32or1k.c:275 eelf32or1k_linux.c:382 eelf32ppc.c:645 eelf32ppc_fbsd.c:645
-#: eelf32ppclinux.c:645 eelf32ppcnto.c:645 eelf32ppcsim.c:645
-#: eelf32ppcvxworks.c:619 eelf32ppcwindiss.c:645 eelf32rl78.c:274
-#: eelf32rx.c:302 eelf32rx_linux.c:287 eelf32tilegx.c:382 eelf32tilegx_be.c:382
-#: eelf32tilepro.c:382 eelf32vax.c:356 eelf32visium.c:259 eelf32xc16x.c:259
-#: eelf32xc16xl.c:259 eelf32xc16xs.c:259 eelf32xstormy16.c:270
-#: eelf32xtensa.c:2303 eelf32z80.c:286 eelf64_aix.c:356 eelf64_ia64.c:413
-#: eelf64_ia64_fbsd.c:413 eelf64_s390.c:452 eelf64_sparc.c:382
-#: eelf64_sparc_fbsd.c:382 eelf64_sparc_sol2.c:514 eelf64alpha.c:475
-#: eelf64alpha_fbsd.c:475 eelf64alpha_nbsd.c:475 eelf64bmip.c:611
-#: eelf64bpf.c:259 eelf64briscv.c:454 eelf64briscv_lp64.c:454
-#: eelf64briscv_lp64f.c:454 eelf64btsmip.c:597 eelf64btsmip_fbsd.c:597
-#: eelf64hppa.c:326 eelf64lppc.c:1094 eelf64lppc_fbsd.c:1094 eelf64lriscv.c:454
-#: eelf64lriscv_lp64.c:454 eelf64lriscv_lp64f.c:454 eelf64ltsmip.c:597
-#: eelf64ltsmip_fbsd.c:597 eelf64mmix.c:467 eelf64ppc.c:1094
-#: eelf64ppc_fbsd.c:1094 eelf64rdos.c:407 eelf64tilegx.c:382
-#: eelf64tilegx_be.c:382 eelf_i386.c:5073 eelf_i386_be.c:380
-#: eelf_i386_fbsd.c:416 eelf_i386_ldso.c:391 eelf_i386_sol2.c:548
-#: eelf_i386_vxworks.c:443 eelf_iamcu.c:416 eelf_k1om.c:5407
-#: eelf_k1om_fbsd.c:416 eelf_l1om.c:5407 eelf_l1om_fbsd.c:416 eelf_s390.c:382
-#: eelf_x86_64.c:5451 eelf_x86_64_cloudabi.c:416 eelf_x86_64_fbsd.c:416
-#: eelf_x86_64_sol2.c:548 eh8300elf.c:274 eh8300elf_linux.c:274
-#: eh8300helf.c:274 eh8300helf_linux.c:274 eh8300hnelf.c:274 eh8300self.c:274
-#: eh8300self_linux.c:274 eh8300snelf.c:274 eh8300sxelf.c:274
-#: eh8300sxelf_linux.c:274 eh8300sxnelf.c:274 ehppa64linux.c:356 ehppaelf.c:542
-#: ehppalinux.c:665 ehppanbsd.c:665 ehppaobsd.c:665 ei386lynx.c:371
-#: ei386moss.c:371 ei386nto.c:371 em32relf.c:274 em32relf_linux.c:381
-#: em32rlelf.c:274 em32rlelf_linux.c:381 em68hc11elf.c:544 em68hc11elfb.c:544
-#: em68hc12elf.c:544 em68hc12elfb.c:544 em68kelf.c:539 em68kelfnbsd.c:539
-#: emn10300.c:356 ends32belf.c:395 ends32belf16m.c:395 ends32belf_linux.c:469
-#: ends32elf.c:395 ends32elf16m.c:395 ends32elf_linux.c:469 enios2elf.c:561
-#: enios2linux.c:643 epruelf.c:280 escore3_elf.c:377 escore7_elf.c:377
-#: eshelf.c:356 eshelf_fd.c:382 eshelf_linux.c:382 eshelf_nbsd.c:356
-#: eshelf_nto.c:356 eshelf_uclinux.c:356 eshelf_vxworks.c:393 eshlelf.c:356
-#: eshlelf_fd.c:382 eshlelf_linux.c:382 eshlelf_nbsd.c:356 eshlelf_nto.c:356
-#: eshlelf_vxworks.c:393 ev850.c:306 ev850_rh850.c:306
+#: eaarch64cloudabi.c:696 eaarch64cloudabib.c:696 eaarch64elf.c:695
+#: eaarch64elf32.c:695 eaarch64elf32b.c:695 eaarch64elfb.c:695
+#: eaarch64fbsd.c:696 eaarch64fbsdb.c:696 eaarch64haiku.c:696
+#: eaarch64linux.c:696 eaarch64linux32.c:696 eaarch64linux32b.c:696
+#: eaarch64linuxb.c:696 earcelf.c:328 earclinux.c:384 earclinux_nps.c:384
+#: earcv2elf.c:261 earcv2elfx.c:261 earmelf.c:938 earmelf_fbsd.c:938
+#: earmelf_fuchsia.c:939 earmelf_haiku.c:939 earmelf_linux.c:939
+#: earmelf_linux_eabi.c:939 earmelf_linux_fdpiceabi.c:939 earmelf_nacl.c:939
+#: earmelf_nbsd.c:938 earmelf_phoenix.c:939 earmelf_vxworks.c:974
+#: earmelfb.c:938 earmelfb_fbsd.c:938 earmelfb_fuchsia.c:939
+#: earmelfb_linux.c:939 earmelfb_linux_eabi.c:939
+#: earmelfb_linux_fdpiceabi.c:939 earmelfb_nacl.c:939 earmelfb_nbsd.c:938
+#: earmnto.c:913 eavr1.c:484 eavr2.c:484 eavr25.c:484 eavr3.c:484 eavr31.c:484
+#: eavr35.c:484 eavr4.c:484 eavr5.c:484 eavr51.c:484 eavr6.c:484 eavrtiny.c:484
+#: eavrxmega1.c:484 eavrxmega2.c:484 eavrxmega3.c:484 eavrxmega4.c:484
+#: eavrxmega5.c:484 eavrxmega6.c:484 eavrxmega7.c:484 ecriself.c:276
+#: ecrislinux.c:359 ecskyelf.c:520 ecskyelf_linux.c:628 ed10velf.c:261
+#: eelf32_sparc.c:384 eelf32_sparc_sol2.c:516 eelf32_sparc_vxworks.c:421
+#: eelf32_spu.c:994 eelf32_tic6x_be.c:495 eelf32_tic6x_elf_be.c:495
+#: eelf32_tic6x_elf_le.c:495 eelf32_tic6x_le.c:495 eelf32_tic6x_linux_be.c:495
+#: eelf32_tic6x_linux_le.c:495 eelf32_x86_64.c:5475 eelf32am33lin.c:358
+#: eelf32b4300.c:599 eelf32bfin.c:376 eelf32bfinfd.c:401 eelf32bmip.c:599
+#: eelf32bmipn32.c:613 eelf32briscv.c:452 eelf32briscv_ilp32.c:452
+#: eelf32briscv_ilp32f.c:452 eelf32bsmip.c:613 eelf32btsmip.c:599
+#: eelf32btsmip_fbsd.c:599 eelf32btsmipn32.c:599 eelf32btsmipn32_fbsd.c:599
+#: eelf32cr16.c:411 eelf32crx.c:298 eelf32ebmip.c:599 eelf32ebmipvxworks.c:634
+#: eelf32elmip.c:599 eelf32elmipvxworks.c:634 eelf32epiphany.c:276
+#: eelf32epiphany_4x4.c:263 eelf32frvfd.c:383 eelf32ip2k.c:276
+#: eelf32l4300.c:599 eelf32lm32.c:276 eelf32lm32fd.c:383 eelf32lmip.c:599
+#: eelf32loongarch.c:434 eelf32lppc.c:647 eelf32lppclinux.c:647
+#: eelf32lppcnto.c:647 eelf32lppcsim.c:647 eelf32lr5900.c:517
+#: eelf32lr5900n32.c:516 eelf32lriscv.c:452 eelf32lriscv_ilp32.c:452
+#: eelf32lriscv_ilp32f.c:452 eelf32lsmip.c:599 eelf32ltsmip.c:599
+#: eelf32ltsmip_fbsd.c:599 eelf32ltsmipn32.c:599 eelf32ltsmipn32_fbsd.c:599
+#: eelf32m32c.c:287 eelf32mb_linux.c:384 eelf32mbel_linux.c:384
+#: eelf32mcore.c:282 eelf32mep.c:261 eelf32metag.c:633 eelf32microblaze.c:261
+#: eelf32microblazeel.c:261 eelf32mipswindiss.c:491 eelf32moxie.c:276
+#: eelf32or1k.c:277 eelf32or1k_linux.c:384 eelf32ppc.c:647 eelf32ppc_fbsd.c:647
+#: eelf32ppchaiku.c:647 eelf32ppclinux.c:647 eelf32ppcnto.c:647
+#: eelf32ppcsim.c:647 eelf32ppcvxworks.c:621 eelf32ppcwindiss.c:647
+#: eelf32rl78.c:276 eelf32rx.c:304 eelf32rx_linux.c:289 eelf32tilegx.c:384
+#: eelf32tilegx_be.c:384 eelf32tilepro.c:384 eelf32vax.c:358 eelf32visium.c:261
+#: eelf32xc16x.c:261 eelf32xc16xl.c:261 eelf32xc16xs.c:261
+#: eelf32xstormy16.c:272 eelf32xtensa.c:2305 eelf32z80.c:288 eelf64_aix.c:358
+#: eelf64_ia64.c:415 eelf64_ia64_fbsd.c:415 eelf64_s390.c:454
+#: eelf64_sparc.c:384 eelf64_sparc_fbsd.c:384 eelf64_sparc_sol2.c:516
+#: eelf64alpha.c:477 eelf64alpha_fbsd.c:477 eelf64alpha_nbsd.c:477
+#: eelf64bmip.c:613 eelf64bpf.c:261 eelf64briscv.c:452 eelf64briscv_lp64.c:452
+#: eelf64briscv_lp64f.c:452 eelf64btsmip.c:599 eelf64btsmip_fbsd.c:599
+#: eelf64hppa.c:328 eelf64loongarch.c:434 eelf64lppc.c:1096
+#: eelf64lppc_fbsd.c:1096 eelf64lriscv.c:452 eelf64lriscv_lp64.c:452
+#: eelf64lriscv_lp64f.c:452 eelf64ltsmip.c:599 eelf64ltsmip_fbsd.c:599
+#: eelf64mmix.c:469 eelf64ppc.c:1096 eelf64ppc_fbsd.c:1096 eelf64rdos.c:409
+#: eelf64tilegx.c:384 eelf64tilegx_be.c:384 eelf_i386.c:5097 eelf_i386_be.c:382
+#: eelf_i386_fbsd.c:418 eelf_i386_haiku.c:418 eelf_i386_ldso.c:393
+#: eelf_i386_sol2.c:550 eelf_i386_vxworks.c:445 eelf_iamcu.c:418
+#: eelf_k1om.c:5409 eelf_k1om_fbsd.c:418 eelf_l1om.c:5409 eelf_l1om_fbsd.c:418
+#: eelf_mipsel_haiku.c:599 eelf_s390.c:384 eelf_x86_64.c:5475
+#: eelf_x86_64_cloudabi.c:418 eelf_x86_64_fbsd.c:418 eelf_x86_64_haiku.c:418
+#: eelf_x86_64_sol2.c:550 eh8300elf.c:276 eh8300elf_linux.c:276
+#: eh8300helf.c:276 eh8300helf_linux.c:276 eh8300hnelf.c:276 eh8300self.c:276
+#: eh8300self_linux.c:276 eh8300snelf.c:276 eh8300sxelf.c:276
+#: eh8300sxelf_linux.c:276 eh8300sxnelf.c:276 ehppa64linux.c:358 ehppaelf.c:544
+#: ehppalinux.c:667 ehppanbsd.c:667 ehppaobsd.c:667 ei386lynx.c:373
+#: ei386moss.c:373 ei386nto.c:373 em32relf.c:276 em32relf_linux.c:383
+#: em32rlelf.c:276 em32rlelf_linux.c:383 em68hc11elf.c:546 em68hc11elfb.c:546
+#: em68hc12elf.c:546 em68hc12elfb.c:546 em68kelf.c:541 em68kelfnbsd.c:541
+#: emn10300.c:358 ends32belf.c:397 ends32belf16m.c:397 ends32belf_linux.c:471
+#: ends32elf.c:397 ends32elf16m.c:397 ends32elf_linux.c:471 enios2elf.c:563
+#: enios2linux.c:645 epruelf.c:282 escore3_elf.c:379 escore7_elf.c:379
+#: eshelf.c:358 eshelf_fd.c:384 eshelf_linux.c:384 eshelf_nbsd.c:358
+#: eshelf_nto.c:358 eshelf_uclinux.c:358 eshelf_vxworks.c:395 eshlelf.c:358
+#: eshlelf_fd.c:384 eshlelf_linux.c:384 eshlelf_nbsd.c:358 eshlelf_nto.c:358
+#: eshlelf_vxworks.c:395 ev850.c:308 ev850_rh850.c:308
msgid ""
"%F%P: invalid visibility in `-z %s'; must be default, internal, hidden, or "
"protected"
msgstr ""
-#: eaarch64cloudabi.c:767 eaarch64cloudabib.c:767 eaarch64elf.c:762
-#: eaarch64elf32.c:762 eaarch64elf32b.c:762 eaarch64elfb.c:762
-#: eaarch64fbsd.c:767 eaarch64fbsdb.c:767 eaarch64linux.c:767
-#: eaarch64linux32.c:767 eaarch64linux32b.c:767 eaarch64linuxb.c:767
-#: earcelf.c:386 earclinux.c:446 earclinux_nps.c:446 earcv2elf.c:264
-#: earcv2elfx.c:264 earmelf.c:996 earmelf_fbsd.c:996 earmelf_fuchsia.c:1001
-#: earmelf_linux.c:1001 earmelf_linux_eabi.c:1001
-#: earmelf_linux_fdpiceabi.c:1001 earmelf_nacl.c:1001 earmelf_nbsd.c:996
-#: earmelf_phoenix.c:1001 earmelf_vxworks.c:1032 earmelfb.c:996
-#: earmelfb_fbsd.c:996 earmelfb_fuchsia.c:1001 earmelfb_linux.c:1001
-#: earmelfb_linux_eabi.c:1001 earmelfb_linux_fdpiceabi.c:1001
-#: earmelfb_nacl.c:1001 earmelfb_nbsd.c:996 earmnto.c:971 eavr1.c:487
-#: eavr2.c:487 eavr25.c:487 eavr3.c:487 eavr31.c:487 eavr35.c:487 eavr4.c:487
-#: eavr5.c:487 eavr51.c:487 eavr6.c:487 eavrtiny.c:487 eavrxmega1.c:487
-#: eavrxmega2.c:487 eavrxmega3.c:487 eavrxmega4.c:487 eavrxmega5.c:487
-#: eavrxmega6.c:487 eavrxmega7.c:487 ecriself.c:279 ecrislinux.c:421
-#: ecskyelf.c:523 ecskyelf_linux.c:690 ed10velf.c:264 eelf32_sparc.c:446
-#: eelf32_sparc_sol2.c:578 eelf32_sparc_vxworks.c:483 eelf32_spu.c:997
-#: eelf32_tic6x_be.c:553 eelf32_tic6x_elf_be.c:553 eelf32_tic6x_elf_le.c:553
-#: eelf32_tic6x_le.c:553 eelf32_tic6x_linux_be.c:553
-#: eelf32_tic6x_linux_le.c:553 eelf32_x86_64.c:5602 eelf32am33lin.c:416
-#: eelf32b4300.c:661 eelf32bfin.c:434 eelf32bfinfd.c:459 eelf32bmip.c:661
-#: eelf32bmipn32.c:675 eelf32briscv.c:518 eelf32briscv_ilp32.c:518
-#: eelf32briscv_ilp32f.c:518 eelf32bsmip.c:675 eelf32btsmip.c:661
-#: eelf32btsmip_fbsd.c:661 eelf32btsmipn32.c:661 eelf32btsmipn32_fbsd.c:661
-#: eelf32cr16.c:414 eelf32crx.c:301 eelf32ebmip.c:661 eelf32ebmipvxworks.c:696
-#: eelf32elmip.c:661 eelf32elmipvxworks.c:696 eelf32epiphany.c:279
-#: eelf32epiphany_4x4.c:266 eelf32frvfd.c:441 eelf32ip2k.c:279
-#: eelf32l4300.c:661 eelf32lm32.c:279 eelf32lm32fd.c:441 eelf32lmip.c:661
-#: eelf32lppc.c:715 eelf32lppclinux.c:715 eelf32lppcnto.c:715
-#: eelf32lppcsim.c:715 eelf32lr5900.c:520 eelf32lr5900n32.c:519
-#: eelf32lriscv.c:518 eelf32lriscv_ilp32.c:518 eelf32lriscv_ilp32f.c:518
-#: eelf32lsmip.c:661 eelf32ltsmip.c:661 eelf32ltsmip_fbsd.c:661
-#: eelf32ltsmipn32.c:661 eelf32ltsmipn32_fbsd.c:661 eelf32m32c.c:290
-#: eelf32mb_linux.c:446 eelf32mbel_linux.c:446 eelf32mcore.c:285
-#: eelf32mep.c:264 eelf32metag.c:695 eelf32microblaze.c:264
-#: eelf32microblazeel.c:264 eelf32mipswindiss.c:494 eelf32moxie.c:279
-#: eelf32or1k.c:280 eelf32or1k_linux.c:446 eelf32ppc.c:715 eelf32ppc_fbsd.c:715
-#: eelf32ppclinux.c:715 eelf32ppcnto.c:715 eelf32ppcsim.c:715
-#: eelf32ppcvxworks.c:689 eelf32ppcwindiss.c:715 eelf32rl78.c:279
-#: eelf32rx.c:307 eelf32rx_linux.c:292 eelf32tilegx.c:446 eelf32tilegx_be.c:446
-#: eelf32tilepro.c:446 eelf32vax.c:416 eelf32visium.c:264 eelf32xc16x.c:264
-#: eelf32xc16xl.c:264 eelf32xc16xs.c:264 eelf32xstormy16.c:275
-#: eelf32xtensa.c:2367 eelf32z80.c:291 eelf64_aix.c:416 eelf64_ia64.c:473
-#: eelf64_ia64_fbsd.c:473 eelf64_s390.c:516 eelf64_sparc.c:446
-#: eelf64_sparc_fbsd.c:446 eelf64_sparc_sol2.c:578 eelf64alpha.c:539
-#: eelf64alpha_fbsd.c:539 eelf64alpha_nbsd.c:539 eelf64bmip.c:675
-#: eelf64bpf.c:264 eelf64briscv.c:518 eelf64briscv_lp64.c:518
-#: eelf64briscv_lp64f.c:518 eelf64btsmip.c:661 eelf64btsmip_fbsd.c:661
-#: eelf64hppa.c:386 eelf64lppc.c:1164 eelf64lppc_fbsd.c:1164 eelf64lriscv.c:518
-#: eelf64lriscv_lp64.c:518 eelf64lriscv_lp64f.c:518 eelf64ltsmip.c:661
-#: eelf64ltsmip_fbsd.c:661 eelf64mmix.c:527 eelf64ppc.c:1164
-#: eelf64ppc_fbsd.c:1164 eelf64rdos.c:471 eelf64tilegx.c:446
-#: eelf64tilegx_be.c:446 eelf_i386.c:5221 eelf_i386_be.c:487
-#: eelf_i386_fbsd.c:564 eelf_i386_ldso.c:502 eelf_i386_sol2.c:659
-#: eelf_i386_vxworks.c:554 eelf_iamcu.c:527 eelf_k1om.c:5518
-#: eelf_k1om_fbsd.c:527 eelf_l1om.c:5518 eelf_l1om_fbsd.c:527 eelf_s390.c:446
-#: eelf_x86_64.c:5655 eelf_x86_64_cloudabi.c:620 eelf_x86_64_fbsd.c:620
-#: eelf_x86_64_sol2.c:752 eh8300elf.c:279 eh8300elf_linux.c:279
-#: eh8300helf.c:279 eh8300helf_linux.c:279 eh8300hnelf.c:279 eh8300self.c:279
-#: eh8300self_linux.c:279 eh8300snelf.c:279 eh8300sxelf.c:279
-#: eh8300sxelf_linux.c:279 eh8300sxnelf.c:279 ehppa64linux.c:416 ehppaelf.c:547
-#: ehppalinux.c:729 ehppanbsd.c:729 ehppaobsd.c:729 ei386lynx.c:431
-#: ei386moss.c:431 ei386nto.c:431 em32relf.c:279 em32relf_linux.c:441
-#: em32rlelf.c:279 em32rlelf_linux.c:441 em68hc11elf.c:549 em68hc11elfb.c:549
-#: em68hc12elf.c:549 em68hc12elfb.c:549 em68kelf.c:603 em68kelfnbsd.c:603
-#: emn10300.c:416 ends32belf.c:400 ends32belf16m.c:400 ends32belf_linux.c:533
-#: ends32elf.c:400 ends32elf16m.c:400 ends32elf_linux.c:533 enios2elf.c:566
-#: enios2linux.c:707 epruelf.c:285 escore3_elf.c:437 escore7_elf.c:437
-#: eshelf.c:416 eshelf_fd.c:446 eshelf_linux.c:446 eshelf_nbsd.c:416
-#: eshelf_nto.c:416 eshelf_uclinux.c:416 eshelf_vxworks.c:453 eshlelf.c:416
-#: eshlelf_fd.c:446 eshlelf_linux.c:446 eshlelf_nbsd.c:416 eshlelf_nto.c:416
-#: eshlelf_vxworks.c:453 ev850.c:311 ev850_rh850.c:311
+#: eaarch64cloudabi.c:769 eaarch64cloudabib.c:769 eaarch64elf.c:764
+#: eaarch64elf32.c:764 eaarch64elf32b.c:764 eaarch64elfb.c:764
+#: eaarch64fbsd.c:769 eaarch64fbsdb.c:769 eaarch64haiku.c:769
+#: eaarch64linux.c:769 eaarch64linux32.c:769 eaarch64linux32b.c:769
+#: eaarch64linuxb.c:769 earcelf.c:388 earclinux.c:448 earclinux_nps.c:448
+#: earcv2elf.c:266 earcv2elfx.c:266 earmelf.c:998 earmelf_fbsd.c:998
+#: earmelf_fuchsia.c:1003 earmelf_haiku.c:1003 earmelf_linux.c:1003
+#: earmelf_linux_eabi.c:1003 earmelf_linux_fdpiceabi.c:1003 earmelf_nacl.c:1003
+#: earmelf_nbsd.c:998 earmelf_phoenix.c:1003 earmelf_vxworks.c:1034
+#: earmelfb.c:998 earmelfb_fbsd.c:998 earmelfb_fuchsia.c:1003
+#: earmelfb_linux.c:1003 earmelfb_linux_eabi.c:1003
+#: earmelfb_linux_fdpiceabi.c:1003 earmelfb_nacl.c:1003 earmelfb_nbsd.c:998
+#: earmnto.c:973 eavr1.c:489 eavr2.c:489 eavr25.c:489 eavr3.c:489 eavr31.c:489
+#: eavr35.c:489 eavr4.c:489 eavr5.c:489 eavr51.c:489 eavr6.c:489 eavrtiny.c:489
+#: eavrxmega1.c:489 eavrxmega2.c:489 eavrxmega3.c:489 eavrxmega4.c:489
+#: eavrxmega5.c:489 eavrxmega6.c:489 eavrxmega7.c:489 ecriself.c:281
+#: ecrislinux.c:423 ecskyelf.c:525 ecskyelf_linux.c:692 ed10velf.c:266
+#: eelf32_sparc.c:448 eelf32_sparc_sol2.c:580 eelf32_sparc_vxworks.c:485
+#: eelf32_spu.c:999 eelf32_tic6x_be.c:555 eelf32_tic6x_elf_be.c:555
+#: eelf32_tic6x_elf_le.c:555 eelf32_tic6x_le.c:555 eelf32_tic6x_linux_be.c:555
+#: eelf32_tic6x_linux_le.c:555 eelf32_x86_64.c:5631 eelf32am33lin.c:418
+#: eelf32b4300.c:663 eelf32bfin.c:436 eelf32bfinfd.c:461 eelf32bmip.c:663
+#: eelf32bmipn32.c:677 eelf32briscv.c:516 eelf32briscv_ilp32.c:516
+#: eelf32briscv_ilp32f.c:516 eelf32bsmip.c:677 eelf32btsmip.c:663
+#: eelf32btsmip_fbsd.c:663 eelf32btsmipn32.c:663 eelf32btsmipn32_fbsd.c:663
+#: eelf32cr16.c:416 eelf32crx.c:303 eelf32ebmip.c:663 eelf32ebmipvxworks.c:698
+#: eelf32elmip.c:663 eelf32elmipvxworks.c:698 eelf32epiphany.c:281
+#: eelf32epiphany_4x4.c:268 eelf32frvfd.c:443 eelf32ip2k.c:281
+#: eelf32l4300.c:663 eelf32lm32.c:281 eelf32lm32fd.c:443 eelf32lmip.c:663
+#: eelf32loongarch.c:498 eelf32lppc.c:717 eelf32lppclinux.c:717
+#: eelf32lppcnto.c:717 eelf32lppcsim.c:717 eelf32lr5900.c:522
+#: eelf32lr5900n32.c:521 eelf32lriscv.c:516 eelf32lriscv_ilp32.c:516
+#: eelf32lriscv_ilp32f.c:516 eelf32lsmip.c:663 eelf32ltsmip.c:663
+#: eelf32ltsmip_fbsd.c:663 eelf32ltsmipn32.c:663 eelf32ltsmipn32_fbsd.c:663
+#: eelf32m32c.c:292 eelf32mb_linux.c:448 eelf32mbel_linux.c:448
+#: eelf32mcore.c:287 eelf32mep.c:266 eelf32metag.c:697 eelf32microblaze.c:266
+#: eelf32microblazeel.c:266 eelf32mipswindiss.c:496 eelf32moxie.c:281
+#: eelf32or1k.c:282 eelf32or1k_linux.c:448 eelf32ppc.c:717 eelf32ppc_fbsd.c:717
+#: eelf32ppchaiku.c:717 eelf32ppclinux.c:717 eelf32ppcnto.c:717
+#: eelf32ppcsim.c:717 eelf32ppcvxworks.c:691 eelf32ppcwindiss.c:717
+#: eelf32rl78.c:281 eelf32rx.c:309 eelf32rx_linux.c:294 eelf32tilegx.c:448
+#: eelf32tilegx_be.c:448 eelf32tilepro.c:448 eelf32vax.c:418 eelf32visium.c:266
+#: eelf32xc16x.c:266 eelf32xc16xl.c:266 eelf32xc16xs.c:266
+#: eelf32xstormy16.c:277 eelf32xtensa.c:2369 eelf32z80.c:293 eelf64_aix.c:418
+#: eelf64_ia64.c:475 eelf64_ia64_fbsd.c:475 eelf64_s390.c:518
+#: eelf64_sparc.c:448 eelf64_sparc_fbsd.c:448 eelf64_sparc_sol2.c:580
+#: eelf64alpha.c:541 eelf64alpha_fbsd.c:541 eelf64alpha_nbsd.c:541
+#: eelf64bmip.c:677 eelf64bpf.c:266 eelf64briscv.c:516 eelf64briscv_lp64.c:516
+#: eelf64briscv_lp64f.c:516 eelf64btsmip.c:663 eelf64btsmip_fbsd.c:663
+#: eelf64hppa.c:388 eelf64loongarch.c:498 eelf64lppc.c:1171
+#: eelf64lppc_fbsd.c:1171 eelf64lriscv.c:516 eelf64lriscv_lp64.c:516
+#: eelf64lriscv_lp64f.c:516 eelf64ltsmip.c:663 eelf64ltsmip_fbsd.c:663
+#: eelf64mmix.c:529 eelf64ppc.c:1171 eelf64ppc_fbsd.c:1171 eelf64rdos.c:473
+#: eelf64tilegx.c:448 eelf64tilegx_be.c:448 eelf_i386.c:5250 eelf_i386_be.c:489
+#: eelf_i386_fbsd.c:571 eelf_i386_haiku.c:571 eelf_i386_ldso.c:504
+#: eelf_i386_sol2.c:661 eelf_i386_vxworks.c:556 eelf_iamcu.c:529
+#: eelf_k1om.c:5520 eelf_k1om_fbsd.c:529 eelf_l1om.c:5520 eelf_l1om_fbsd.c:529
+#: eelf_mipsel_haiku.c:663 eelf_s390.c:448 eelf_x86_64.c:5684
+#: eelf_x86_64_cloudabi.c:627 eelf_x86_64_fbsd.c:627 eelf_x86_64_haiku.c:627
+#: eelf_x86_64_sol2.c:759 eh8300elf.c:281 eh8300elf_linux.c:281
+#: eh8300helf.c:281 eh8300helf_linux.c:281 eh8300hnelf.c:281 eh8300self.c:281
+#: eh8300self_linux.c:281 eh8300snelf.c:281 eh8300sxelf.c:281
+#: eh8300sxelf_linux.c:281 eh8300sxnelf.c:281 ehppa64linux.c:418 ehppaelf.c:549
+#: ehppalinux.c:731 ehppanbsd.c:731 ehppaobsd.c:731 ei386lynx.c:433
+#: ei386moss.c:433 ei386nto.c:433 em32relf.c:281 em32relf_linux.c:443
+#: em32rlelf.c:281 em32rlelf_linux.c:443 em68hc11elf.c:551 em68hc11elfb.c:551
+#: em68hc12elf.c:551 em68hc12elfb.c:551 em68kelf.c:605 em68kelfnbsd.c:605
+#: emn10300.c:418 ends32belf.c:402 ends32belf16m.c:402 ends32belf_linux.c:535
+#: ends32elf.c:402 ends32elf16m.c:402 ends32elf_linux.c:535 enios2elf.c:568
+#: enios2linux.c:709 epruelf.c:287 escore3_elf.c:439 escore7_elf.c:439
+#: eshelf.c:418 eshelf_fd.c:448 eshelf_linux.c:448 eshelf_nbsd.c:418
+#: eshelf_nto.c:418 eshelf_uclinux.c:418 eshelf_vxworks.c:455 eshlelf.c:418
+#: eshlelf_fd.c:448 eshlelf_linux.c:448 eshlelf_nbsd.c:418 eshlelf_nto.c:418
+#: eshlelf_vxworks.c:455 ev850.c:313 ev850_rh850.c:313
msgid "%P: warning: -z %s ignored\n"
msgstr ""
-#: eaarch64cloudabi.c:801 eaarch64cloudabib.c:801 eaarch64elf.c:796
-#: eaarch64elf32.c:796 eaarch64elf32b.c:796 eaarch64elfb.c:796
-#: eaarch64fbsd.c:801 eaarch64fbsdb.c:801 eaarch64linux.c:801
-#: eaarch64linux32.c:801 eaarch64linux32b.c:801 eaarch64linuxb.c:801
+#: eaarch64cloudabi.c:803 eaarch64cloudabib.c:803 eaarch64elf.c:798
+#: eaarch64elf32.c:798 eaarch64elf32b.c:798 eaarch64elfb.c:798
+#: eaarch64fbsd.c:803 eaarch64fbsdb.c:803 eaarch64haiku.c:803
+#: eaarch64linux.c:803 eaarch64linux32.c:803 eaarch64linux32b.c:803
+#: eaarch64linuxb.c:803
msgid "%P: error: unrecognized option for --fix-cortex-a53-843419: %s\n"
msgstr ""
-#: eaarch64cloudabi.c:830 eaarch64cloudabib.c:830 eaarch64elf.c:825
-#: eaarch64elf32.c:825 eaarch64elf32b.c:825 eaarch64elfb.c:825
-#: eaarch64fbsd.c:830 eaarch64fbsdb.c:830 eaarch64linux.c:830
-#: eaarch64linux32.c:830 eaarch64linux32b.c:830 eaarch64linuxb.c:830
-#: earmelf.c:1133 earmelf_fbsd.c:1133 earmelf_fuchsia.c:1138
-#: earmelf_linux.c:1138 earmelf_linux_eabi.c:1138
-#: earmelf_linux_fdpiceabi.c:1138 earmelf_nacl.c:1138 earmelf_nbsd.c:1133
-#: earmelf_phoenix.c:1138 earmelf_vxworks.c:1173 earmelfb.c:1133
-#: earmelfb_fbsd.c:1133 earmelfb_fuchsia.c:1138 earmelfb_linux.c:1138
-#: earmelfb_linux_eabi.c:1138 earmelfb_linux_fdpiceabi.c:1138
-#: earmelfb_nacl.c:1138 earmelfb_nbsd.c:1133 earmnto.c:1108
+#: eaarch64cloudabi.c:832 eaarch64cloudabib.c:832 eaarch64elf.c:827
+#: eaarch64elf32.c:827 eaarch64elf32b.c:827 eaarch64elfb.c:827
+#: eaarch64fbsd.c:832 eaarch64fbsdb.c:832 eaarch64haiku.c:832
+#: eaarch64linux.c:832 eaarch64linux32.c:832 eaarch64linux32b.c:832
+#: eaarch64linuxb.c:832 earmelf.c:1135 earmelf_fbsd.c:1135
+#: earmelf_fuchsia.c:1140 earmelf_haiku.c:1140 earmelf_linux.c:1140
+#: earmelf_linux_eabi.c:1140 earmelf_linux_fdpiceabi.c:1140 earmelf_nacl.c:1140
+#: earmelf_nbsd.c:1135 earmelf_phoenix.c:1140 earmelf_vxworks.c:1175
+#: earmelfb.c:1135 earmelfb_fbsd.c:1135 earmelfb_fuchsia.c:1140
+#: earmelfb_linux.c:1140 earmelfb_linux_eabi.c:1140
+#: earmelfb_linux_fdpiceabi.c:1140 earmelfb_nacl.c:1140 earmelfb_nbsd.c:1135
+#: earmnto.c:1110
#, c-format
msgid ""
" --no-enum-size-warning Don't warn about objects with incompatible\n"
" enum sizes\n"
msgstr ""
-#: eaarch64cloudabi.c:832 eaarch64cloudabib.c:832 eaarch64elf.c:827
-#: eaarch64elf32.c:827 eaarch64elf32b.c:827 eaarch64elfb.c:827
-#: eaarch64fbsd.c:832 eaarch64fbsdb.c:832 eaarch64linux.c:832
-#: eaarch64linux32.c:832 eaarch64linux32b.c:832 eaarch64linuxb.c:832
-#: earmelf.c:1135 earmelf_fbsd.c:1135 earmelf_fuchsia.c:1140
-#: earmelf_linux.c:1140 earmelf_linux_eabi.c:1140
-#: earmelf_linux_fdpiceabi.c:1140 earmelf_nacl.c:1140 earmelf_nbsd.c:1135
-#: earmelf_phoenix.c:1140 earmelf_vxworks.c:1175 earmelfb.c:1135
-#: earmelfb_fbsd.c:1135 earmelfb_fuchsia.c:1140 earmelfb_linux.c:1140
-#: earmelfb_linux_eabi.c:1140 earmelfb_linux_fdpiceabi.c:1140
-#: earmelfb_nacl.c:1140 earmelfb_nbsd.c:1135 earmnto.c:1110
+#: eaarch64cloudabi.c:834 eaarch64cloudabib.c:834 eaarch64elf.c:829
+#: eaarch64elf32.c:829 eaarch64elf32b.c:829 eaarch64elfb.c:829
+#: eaarch64fbsd.c:834 eaarch64fbsdb.c:834 eaarch64haiku.c:834
+#: eaarch64linux.c:834 eaarch64linux32.c:834 eaarch64linux32b.c:834
+#: eaarch64linuxb.c:834 earmelf.c:1137 earmelf_fbsd.c:1137
+#: earmelf_fuchsia.c:1142 earmelf_haiku.c:1142 earmelf_linux.c:1142
+#: earmelf_linux_eabi.c:1142 earmelf_linux_fdpiceabi.c:1142 earmelf_nacl.c:1142
+#: earmelf_nbsd.c:1137 earmelf_phoenix.c:1142 earmelf_vxworks.c:1177
+#: earmelfb.c:1137 earmelfb_fbsd.c:1137 earmelfb_fuchsia.c:1142
+#: earmelfb_linux.c:1142 earmelfb_linux_eabi.c:1142
+#: earmelfb_linux_fdpiceabi.c:1142 earmelfb_nacl.c:1142 earmelfb_nbsd.c:1137
+#: earmnto.c:1112
#, c-format
msgid ""
" --no-wchar-size-warning Don't warn about objects with incompatible\n"
" wchar_t sizes\n"
msgstr ""
-#: eaarch64cloudabi.c:834 eaarch64cloudabib.c:834 eaarch64elf.c:829
-#: eaarch64elf32.c:829 eaarch64elf32b.c:829 eaarch64elfb.c:829
-#: eaarch64fbsd.c:834 eaarch64fbsdb.c:834 eaarch64linux.c:834
-#: eaarch64linux32.c:834 eaarch64linux32b.c:834 eaarch64linuxb.c:834
-#: earmelf.c:1137 earmelf_fbsd.c:1137 earmelf_fuchsia.c:1142
-#: earmelf_linux.c:1142 earmelf_linux_eabi.c:1142
-#: earmelf_linux_fdpiceabi.c:1142 earmelf_nacl.c:1142 earmelf_nbsd.c:1137
-#: earmelf_phoenix.c:1142 earmelf_vxworks.c:1177 earmelfb.c:1137
-#: earmelfb_fbsd.c:1137 earmelfb_fuchsia.c:1142 earmelfb_linux.c:1142
-#: earmelfb_linux_eabi.c:1142 earmelfb_linux_fdpiceabi.c:1142
-#: earmelfb_nacl.c:1142 earmelfb_nbsd.c:1137 earmnto.c:1112
+#: eaarch64cloudabi.c:836 eaarch64cloudabib.c:836 eaarch64elf.c:831
+#: eaarch64elf32.c:831 eaarch64elf32b.c:831 eaarch64elfb.c:831
+#: eaarch64fbsd.c:836 eaarch64fbsdb.c:836 eaarch64haiku.c:836
+#: eaarch64linux.c:836 eaarch64linux32.c:836 eaarch64linux32b.c:836
+#: eaarch64linuxb.c:836 earmelf.c:1139 earmelf_fbsd.c:1139
+#: earmelf_fuchsia.c:1144 earmelf_haiku.c:1144 earmelf_linux.c:1144
+#: earmelf_linux_eabi.c:1144 earmelf_linux_fdpiceabi.c:1144 earmelf_nacl.c:1144
+#: earmelf_nbsd.c:1139 earmelf_phoenix.c:1144 earmelf_vxworks.c:1179
+#: earmelfb.c:1139 earmelfb_fbsd.c:1139 earmelfb_fuchsia.c:1144
+#: earmelfb_linux.c:1144 earmelfb_linux_eabi.c:1144
+#: earmelfb_linux_fdpiceabi.c:1144 earmelfb_nacl.c:1144 earmelfb_nbsd.c:1139
+#: earmnto.c:1114
#, c-format
msgid ""
" --pic-veneer Always generate PIC interworking veneers\n"
msgstr ""
-#: eaarch64cloudabi.c:835 eaarch64cloudabib.c:835 eaarch64elf.c:830
-#: eaarch64elf32.c:830 eaarch64elf32b.c:830 eaarch64elfb.c:830
-#: eaarch64fbsd.c:835 eaarch64fbsdb.c:835 eaarch64linux.c:835
-#: eaarch64linux32.c:835 eaarch64linux32b.c:835 eaarch64linuxb.c:835
-#: earmelf.c:1144 earmelf_fbsd.c:1144 earmelf_fuchsia.c:1149
-#: earmelf_linux.c:1149 earmelf_linux_eabi.c:1149
-#: earmelf_linux_fdpiceabi.c:1149 earmelf_nacl.c:1149 earmelf_nbsd.c:1144
-#: earmelf_phoenix.c:1149 earmelf_vxworks.c:1184 earmelfb.c:1144
-#: earmelfb_fbsd.c:1144 earmelfb_fuchsia.c:1149 earmelfb_linux.c:1149
-#: earmelfb_linux_eabi.c:1149 earmelfb_linux_fdpiceabi.c:1149
-#: earmelfb_nacl.c:1149 earmelfb_nbsd.c:1144 earmnto.c:1119
+#: eaarch64cloudabi.c:837 eaarch64cloudabib.c:837 eaarch64elf.c:832
+#: eaarch64elf32.c:832 eaarch64elf32b.c:832 eaarch64elfb.c:832
+#: eaarch64fbsd.c:837 eaarch64fbsdb.c:837 eaarch64haiku.c:837
+#: eaarch64linux.c:837 eaarch64linux32.c:837 eaarch64linux32b.c:837
+#: eaarch64linuxb.c:837 earmelf.c:1146 earmelf_fbsd.c:1146
+#: earmelf_fuchsia.c:1151 earmelf_haiku.c:1151 earmelf_linux.c:1151
+#: earmelf_linux_eabi.c:1151 earmelf_linux_fdpiceabi.c:1151 earmelf_nacl.c:1151
+#: earmelf_nbsd.c:1146 earmelf_phoenix.c:1151 earmelf_vxworks.c:1186
+#: earmelfb.c:1146 earmelfb_fbsd.c:1146 earmelfb_fuchsia.c:1151
+#: earmelfb_linux.c:1151 earmelfb_linux_eabi.c:1151
+#: earmelfb_linux_fdpiceabi.c:1151 earmelfb_nacl.c:1151 earmelfb_nbsd.c:1146
+#: earmnto.c:1121
#, c-format
msgid ""
" --stub-group-size=N Maximum size of a group of input sections "
@@ -3614,18 +3647,20 @@ msgid ""
" choose suitable defaults.\n"
msgstr ""
-#: eaarch64cloudabi.c:844 eaarch64cloudabib.c:844 eaarch64elf.c:839
-#: eaarch64elf32.c:839 eaarch64elf32b.c:839 eaarch64elfb.c:839
-#: eaarch64fbsd.c:844 eaarch64fbsdb.c:844 eaarch64linux.c:844
-#: eaarch64linux32.c:844 eaarch64linux32b.c:844 eaarch64linuxb.c:844
+#: eaarch64cloudabi.c:846 eaarch64cloudabib.c:846 eaarch64elf.c:841
+#: eaarch64elf32.c:841 eaarch64elf32b.c:841 eaarch64elfb.c:841
+#: eaarch64fbsd.c:846 eaarch64fbsdb.c:846 eaarch64haiku.c:846
+#: eaarch64linux.c:846 eaarch64linux32.c:846 eaarch64linux32b.c:846
+#: eaarch64linuxb.c:846
#, c-format
msgid " --fix-cortex-a53-835769 Fix erratum 835769\n"
msgstr ""
-#: eaarch64cloudabi.c:845 eaarch64cloudabib.c:845 eaarch64elf.c:840
-#: eaarch64elf32.c:840 eaarch64elf32b.c:840 eaarch64elfb.c:840
-#: eaarch64fbsd.c:845 eaarch64fbsdb.c:845 eaarch64linux.c:845
-#: eaarch64linux32.c:845 eaarch64linux32b.c:845 eaarch64linuxb.c:845
+#: eaarch64cloudabi.c:847 eaarch64cloudabib.c:847 eaarch64elf.c:842
+#: eaarch64elf32.c:842 eaarch64elf32b.c:842 eaarch64elfb.c:842
+#: eaarch64fbsd.c:847 eaarch64fbsdb.c:847 eaarch64haiku.c:847
+#: eaarch64linux.c:847 eaarch64linux32.c:847 eaarch64linux32b.c:847
+#: eaarch64linuxb.c:847
#, c-format
msgid ""
" --fix-cortex-a53-843419[=full|adr|adrp] Fix erratum 843419 and "
@@ -3650,20 +3685,22 @@ msgid ""
"you both a performance and size overhead.\n"
msgstr ""
-#: eaarch64cloudabi.c:856 eaarch64cloudabib.c:856 eaarch64elf.c:851
-#: eaarch64elf32.c:851 eaarch64elf32b.c:851 eaarch64elfb.c:851
-#: eaarch64fbsd.c:856 eaarch64fbsdb.c:856 eaarch64linux.c:856
-#: eaarch64linux32.c:856 eaarch64linux32b.c:856 eaarch64linuxb.c:856
+#: eaarch64cloudabi.c:858 eaarch64cloudabib.c:858 eaarch64elf.c:853
+#: eaarch64elf32.c:853 eaarch64elf32b.c:853 eaarch64elfb.c:853
+#: eaarch64fbsd.c:858 eaarch64fbsdb.c:858 eaarch64haiku.c:858
+#: eaarch64linux.c:858 eaarch64linux32.c:858 eaarch64linux32b.c:858
+#: eaarch64linuxb.c:858
#, c-format
msgid ""
" --no-apply-dynamic-relocs Do not apply link-time values for dynamic "
"relocations\n"
msgstr ""
-#: eaarch64cloudabi.c:857 eaarch64cloudabib.c:857 eaarch64elf.c:852
-#: eaarch64elf32.c:852 eaarch64elf32b.c:852 eaarch64elfb.c:852
-#: eaarch64fbsd.c:857 eaarch64fbsdb.c:857 eaarch64linux.c:857
-#: eaarch64linux32.c:857 eaarch64linux32b.c:857 eaarch64linuxb.c:857
+#: eaarch64cloudabi.c:859 eaarch64cloudabib.c:859 eaarch64elf.c:854
+#: eaarch64elf32.c:854 eaarch64elf32b.c:854 eaarch64elfb.c:854
+#: eaarch64fbsd.c:859 eaarch64fbsdb.c:859 eaarch64haiku.c:859
+#: eaarch64linux.c:859 eaarch64linux32.c:859 eaarch64linux32b.c:859
+#: eaarch64linuxb.c:859
#, c-format
msgid ""
" -z force-bti Turn on Branch Target Identification "
@@ -3671,10 +3708,11 @@ msgid ""
"inputs\n"
msgstr ""
-#: eaarch64cloudabi.c:858 eaarch64cloudabib.c:858 eaarch64elf.c:853
-#: eaarch64elf32.c:853 eaarch64elf32b.c:853 eaarch64elfb.c:853
-#: eaarch64fbsd.c:858 eaarch64fbsdb.c:858 eaarch64linux.c:858
-#: eaarch64linux32.c:858 eaarch64linux32b.c:858 eaarch64linuxb.c:858
+#: eaarch64cloudabi.c:860 eaarch64cloudabib.c:860 eaarch64elf.c:855
+#: eaarch64elf32.c:855 eaarch64elf32b.c:855 eaarch64elfb.c:855
+#: eaarch64fbsd.c:860 eaarch64fbsdb.c:860 eaarch64haiku.c:860
+#: eaarch64linux.c:860 eaarch64linux32.c:860 eaarch64linux32b.c:860
+#: eaarch64linuxb.c:860
#, c-format
msgid ""
" -z pac-plt Protect PLTs with Pointer Authentication.\n"
@@ -4235,7 +4273,7 @@ msgstr ""
msgid "%F%P: strange hex info for PE parameter '%s'\n"
msgstr ""
-#: earm_wince_pe.c:663 earmpe.c:663 eelf32mcore.c:291 ei386beos.c:266
+#: earm_wince_pe.c:663 earmpe.c:663 eelf32mcore.c:293 ei386beos.c:266
#: ei386pe.c:663 ei386pe_posix.c:663 ei386pep.c:642 emcorepe.c:663 eshpe.c:663
msgid "%F%P: cannot open base file %s\n"
msgstr ""
@@ -4299,207 +4337,194 @@ msgid "%P: errors encountered processing file %s for interworking\n"
msgstr ""
#: earm_wince_pe.c:1909 earmelf.c:520 earmelf_fbsd.c:520 earmelf_fuchsia.c:521
-#: earmelf_linux.c:521 earmelf_linux_eabi.c:521 earmelf_linux_fdpiceabi.c:521
-#: earmelf_nacl.c:521 earmelf_nbsd.c:520 earmelf_phoenix.c:521
-#: earmelf_vxworks.c:520 earmelfb.c:520 earmelfb_fbsd.c:520
-#: earmelfb_fuchsia.c:521 earmelfb_linux.c:521 earmelfb_linux_eabi.c:521
-#: earmelfb_linux_fdpiceabi.c:521 earmelfb_nacl.c:521 earmelfb_nbsd.c:520
-#: earmnto.c:520 earmpe.c:1909 ei386pe.c:1909 ei386pe_posix.c:1909
-#: emcorepe.c:1909 eshpe.c:1909
+#: earmelf_haiku.c:521 earmelf_linux.c:521 earmelf_linux_eabi.c:521
+#: earmelf_linux_fdpiceabi.c:521 earmelf_nacl.c:521 earmelf_nbsd.c:520
+#: earmelf_phoenix.c:521 earmelf_vxworks.c:520 earmelfb.c:520
+#: earmelfb_fbsd.c:520 earmelfb_fuchsia.c:521 earmelfb_linux.c:521
+#: earmelfb_linux_eabi.c:521 earmelfb_linux_fdpiceabi.c:521 earmelfb_nacl.c:521
+#: earmelfb_nbsd.c:520 earmnto.c:520 earmpe.c:1909 ei386pe.c:1909
+#: ei386pe_posix.c:1909 emcorepe.c:1909 eshpe.c:1909
msgid "%P: warning: '--thumb-entry %s' is overriding '-e %s'\n"
msgstr ""
#: earm_wince_pe.c:1914 earmelf.c:525 earmelf_fbsd.c:525 earmelf_fuchsia.c:526
-#: earmelf_linux.c:526 earmelf_linux_eabi.c:526 earmelf_linux_fdpiceabi.c:526
-#: earmelf_nacl.c:526 earmelf_nbsd.c:525 earmelf_phoenix.c:526
-#: earmelf_vxworks.c:525 earmelfb.c:525 earmelfb_fbsd.c:525
-#: earmelfb_fuchsia.c:526 earmelfb_linux.c:526 earmelfb_linux_eabi.c:526
-#: earmelfb_linux_fdpiceabi.c:526 earmelfb_nacl.c:526 earmelfb_nbsd.c:525
-#: earmnto.c:525 earmpe.c:1914 ei386pe.c:1914 ei386pe_posix.c:1914
-#: emcorepe.c:1914 eshpe.c:1914
+#: earmelf_haiku.c:526 earmelf_linux.c:526 earmelf_linux_eabi.c:526
+#: earmelf_linux_fdpiceabi.c:526 earmelf_nacl.c:526 earmelf_nbsd.c:525
+#: earmelf_phoenix.c:526 earmelf_vxworks.c:525 earmelfb.c:525
+#: earmelfb_fbsd.c:525 earmelfb_fuchsia.c:526 earmelfb_linux.c:526
+#: earmelfb_linux_eabi.c:526 earmelfb_linux_fdpiceabi.c:526 earmelfb_nacl.c:526
+#: earmelfb_nbsd.c:525 earmnto.c:525 earmpe.c:1914 ei386pe.c:1914
+#: ei386pe_posix.c:1914 emcorepe.c:1914 eshpe.c:1914
msgid "%P: warning: cannot find thumb start symbol %s\n"
msgstr ""
-#: earmelf.c:138 earmelf_fbsd.c:138 earmelf_fuchsia.c:139 earmelf_linux.c:139
-#: earmelf_linux_eabi.c:139 earmelf_linux_fdpiceabi.c:139 earmelf_nacl.c:139
-#: earmelf_nbsd.c:138 earmelf_phoenix.c:139 earmelf_vxworks.c:138
-#: earmelfb.c:138 earmelfb_fbsd.c:138 earmelfb_fuchsia.c:139
-#: earmelfb_linux.c:139 earmelfb_linux_eabi.c:139
+#: earmelf.c:138 earmelf_fbsd.c:138 earmelf_fuchsia.c:139 earmelf_haiku.c:139
+#: earmelf_linux.c:139 earmelf_linux_eabi.c:139 earmelf_linux_fdpiceabi.c:139
+#: earmelf_nacl.c:139 earmelf_nbsd.c:138 earmelf_phoenix.c:139
+#: earmelf_vxworks.c:138 earmelfb.c:138 earmelfb_fbsd.c:138
+#: earmelfb_fuchsia.c:139 earmelfb_linux.c:139 earmelfb_linux_eabi.c:139
#: earmelfb_linux_fdpiceabi.c:139 earmelfb_nacl.c:139 earmelfb_nbsd.c:138
#: earmnto.c:138 ei386beos.c:615
#, c-format
msgid "%P: errors encountered processing file %s\n"
msgstr ""
-#: earmelf.c:551 earmelf_fbsd.c:551 earmelf_fuchsia.c:552 earmelf_linux.c:552
-#: earmelf_linux_eabi.c:552 earmelf_linux_fdpiceabi.c:552 earmelf_nacl.c:552
-#: earmelf_nbsd.c:551 earmelf_phoenix.c:552 earmelf_vxworks.c:551
-#: earmelfb.c:551 earmelfb_fbsd.c:551 earmelfb_fuchsia.c:552
-#: earmelfb_linux.c:552 earmelfb_linux_eabi.c:552
+#: earmelf.c:551 earmelf_fbsd.c:551 earmelf_fuchsia.c:552 earmelf_haiku.c:552
+#: earmelf_linux.c:552 earmelf_linux_eabi.c:552 earmelf_linux_fdpiceabi.c:552
+#: earmelf_nacl.c:552 earmelf_nbsd.c:551 earmelf_phoenix.c:552
+#: earmelf_vxworks.c:551 earmelfb.c:551 earmelfb_fbsd.c:551
+#: earmelfb_fuchsia.c:552 earmelfb_linux.c:552 earmelfb_linux_eabi.c:552
#: earmelfb_linux_fdpiceabi.c:552 earmelfb_nacl.c:552 earmelfb_nbsd.c:551
#: earmnto.c:551
msgid "%F%P: %s: can't open: %E\n"
msgstr ""
-#: earmelf.c:554 earmelf_fbsd.c:554 earmelf_fuchsia.c:555 earmelf_linux.c:555
-#: earmelf_linux_eabi.c:555 earmelf_linux_fdpiceabi.c:555 earmelf_nacl.c:555
-#: earmelf_nbsd.c:554 earmelf_phoenix.c:555 earmelf_vxworks.c:554
-#: earmelfb.c:554 earmelfb_fbsd.c:554 earmelfb_fuchsia.c:555
-#: earmelfb_linux.c:555 earmelfb_linux_eabi.c:555
+#: earmelf.c:554 earmelf_fbsd.c:554 earmelf_fuchsia.c:555 earmelf_haiku.c:555
+#: earmelf_linux.c:555 earmelf_linux_eabi.c:555 earmelf_linux_fdpiceabi.c:555
+#: earmelf_nacl.c:555 earmelf_nbsd.c:554 earmelf_phoenix.c:555
+#: earmelf_vxworks.c:554 earmelfb.c:554 earmelfb_fbsd.c:554
+#: earmelfb_fuchsia.c:555 earmelfb_linux.c:555 earmelfb_linux_eabi.c:555
#: earmelfb_linux_fdpiceabi.c:555 earmelfb_nacl.c:555 earmelfb_nbsd.c:554
#: earmnto.c:554
msgid "%F%P: %s: not a relocatable file: %E\n"
msgstr ""
-#: earmelf.c:1043 earmelf_fbsd.c:1043 earmelf_fuchsia.c:1048
-#: earmelf_linux.c:1048 earmelf_linux_eabi.c:1048
-#: earmelf_linux_fdpiceabi.c:1048 earmelf_nacl.c:1048 earmelf_nbsd.c:1043
-#: earmelf_phoenix.c:1048 earmelf_vxworks.c:1079 earmelfb.c:1043
-#: earmelfb_fbsd.c:1043 earmelfb_fuchsia.c:1048 earmelfb_linux.c:1048
-#: earmelfb_linux_eabi.c:1048 earmelfb_linux_fdpiceabi.c:1048
-#: earmelfb_nacl.c:1048 earmelfb_nbsd.c:1043 earmnto.c:1018
+#: earmelf.c:1045 earmelf_fbsd.c:1045 earmelf_fuchsia.c:1050
+#: earmelf_haiku.c:1050 earmelf_linux.c:1050 earmelf_linux_eabi.c:1050
+#: earmelf_linux_fdpiceabi.c:1050 earmelf_nacl.c:1050 earmelf_nbsd.c:1045
+#: earmelf_phoenix.c:1050 earmelf_vxworks.c:1081 earmelfb.c:1045
+#: earmelfb_fbsd.c:1045 earmelfb_fuchsia.c:1050 earmelfb_linux.c:1050
+#: earmelfb_linux_eabi.c:1050 earmelfb_linux_fdpiceabi.c:1050
+#: earmelfb_nacl.c:1050 earmelfb_nbsd.c:1045 earmnto.c:1020
msgid "%P: unrecognized VFP11 fix type '%s'\n"
msgstr ""
-#: earmelf.c:1056 earmelf_fbsd.c:1056 earmelf_fuchsia.c:1061
-#: earmelf_linux.c:1061 earmelf_linux_eabi.c:1061
-#: earmelf_linux_fdpiceabi.c:1061 earmelf_nacl.c:1061 earmelf_nbsd.c:1056
-#: earmelf_phoenix.c:1061 earmelf_vxworks.c:1092 earmelfb.c:1056
-#: earmelfb_fbsd.c:1056 earmelfb_fuchsia.c:1061 earmelfb_linux.c:1061
-#: earmelfb_linux_eabi.c:1061 earmelfb_linux_fdpiceabi.c:1061
-#: earmelfb_nacl.c:1061 earmelfb_nbsd.c:1056 earmnto.c:1031
+#: earmelf.c:1058 earmelf_fbsd.c:1058 earmelf_fuchsia.c:1063
+#: earmelf_haiku.c:1063 earmelf_linux.c:1063 earmelf_linux_eabi.c:1063
+#: earmelf_linux_fdpiceabi.c:1063 earmelf_nacl.c:1063 earmelf_nbsd.c:1058
+#: earmelf_phoenix.c:1063 earmelf_vxworks.c:1094 earmelfb.c:1058
+#: earmelfb_fbsd.c:1058 earmelfb_fuchsia.c:1063 earmelfb_linux.c:1063
+#: earmelfb_linux_eabi.c:1063 earmelfb_linux_fdpiceabi.c:1063
+#: earmelfb_nacl.c:1063 earmelfb_nbsd.c:1058 earmnto.c:1033
msgid "%P: unrecognized STM32L4XX fix type '%s'\n"
msgstr ""
-#: earmelf.c:1123 earmelf_fbsd.c:1123 earmelf_fuchsia.c:1128
-#: earmelf_linux.c:1128 earmelf_linux_eabi.c:1128
-#: earmelf_linux_fdpiceabi.c:1128 earmelf_nacl.c:1128 earmelf_nbsd.c:1123
-#: earmelf_phoenix.c:1128 earmelf_vxworks.c:1163 earmelfb.c:1123
-#: earmelfb_fbsd.c:1123 earmelfb_fuchsia.c:1128 earmelfb_linux.c:1128
-#: earmelfb_linux_eabi.c:1128 earmelfb_linux_fdpiceabi.c:1128
-#: earmelfb_nacl.c:1128 earmelfb_nbsd.c:1123 earmnto.c:1098
-#, c-format
-msgid ""
-" --thumb-entry=<sym> Set the entry point to be Thumb symbol <sym>\n"
-msgstr ""
-
-#: earmelf.c:1124 earmelf_fbsd.c:1124 earmelf_fuchsia.c:1129
-#: earmelf_linux.c:1129 earmelf_linux_eabi.c:1129
-#: earmelf_linux_fdpiceabi.c:1129 earmelf_nacl.c:1129 earmelf_nbsd.c:1124
-#: earmelf_phoenix.c:1129 earmelf_vxworks.c:1164 earmelfb.c:1124
-#: earmelfb_fbsd.c:1124 earmelfb_fuchsia.c:1129 earmelfb_linux.c:1129
-#: earmelfb_linux_eabi.c:1129 earmelfb_linux_fdpiceabi.c:1129
-#: earmelfb_nacl.c:1129 earmelfb_nbsd.c:1124 earmnto.c:1099
-#, c-format
-msgid " --be8 Output BE8 format image\n"
-msgstr ""
-
#: earmelf.c:1125 earmelf_fbsd.c:1125 earmelf_fuchsia.c:1130
-#: earmelf_linux.c:1130 earmelf_linux_eabi.c:1130
+#: earmelf_haiku.c:1130 earmelf_linux.c:1130 earmelf_linux_eabi.c:1130
#: earmelf_linux_fdpiceabi.c:1130 earmelf_nacl.c:1130 earmelf_nbsd.c:1125
#: earmelf_phoenix.c:1130 earmelf_vxworks.c:1165 earmelfb.c:1125
#: earmelfb_fbsd.c:1125 earmelfb_fuchsia.c:1130 earmelfb_linux.c:1130
#: earmelfb_linux_eabi.c:1130 earmelfb_linux_fdpiceabi.c:1130
#: earmelfb_nacl.c:1130 earmelfb_nbsd.c:1125 earmnto.c:1100
#, c-format
-msgid " --target1-rel Interpret R_ARM_TARGET1 as R_ARM_REL32\n"
+msgid ""
+" --thumb-entry=<sym> Set the entry point to be Thumb symbol <sym>\n"
msgstr ""
#: earmelf.c:1126 earmelf_fbsd.c:1126 earmelf_fuchsia.c:1131
-#: earmelf_linux.c:1131 earmelf_linux_eabi.c:1131
+#: earmelf_haiku.c:1131 earmelf_linux.c:1131 earmelf_linux_eabi.c:1131
#: earmelf_linux_fdpiceabi.c:1131 earmelf_nacl.c:1131 earmelf_nbsd.c:1126
#: earmelf_phoenix.c:1131 earmelf_vxworks.c:1166 earmelfb.c:1126
#: earmelfb_fbsd.c:1126 earmelfb_fuchsia.c:1131 earmelfb_linux.c:1131
#: earmelfb_linux_eabi.c:1131 earmelfb_linux_fdpiceabi.c:1131
#: earmelfb_nacl.c:1131 earmelfb_nbsd.c:1126 earmnto.c:1101
#, c-format
-msgid " --target1-abs Interpret R_ARM_TARGET1 as R_ARM_ABS32\n"
+msgid " --be8 Output BE8 format image\n"
msgstr ""
#: earmelf.c:1127 earmelf_fbsd.c:1127 earmelf_fuchsia.c:1132
-#: earmelf_linux.c:1132 earmelf_linux_eabi.c:1132
+#: earmelf_haiku.c:1132 earmelf_linux.c:1132 earmelf_linux_eabi.c:1132
#: earmelf_linux_fdpiceabi.c:1132 earmelf_nacl.c:1132 earmelf_nbsd.c:1127
#: earmelf_phoenix.c:1132 earmelf_vxworks.c:1167 earmelfb.c:1127
#: earmelfb_fbsd.c:1127 earmelfb_fuchsia.c:1132 earmelfb_linux.c:1132
#: earmelfb_linux_eabi.c:1132 earmelfb_linux_fdpiceabi.c:1132
#: earmelfb_nacl.c:1132 earmelfb_nbsd.c:1127 earmnto.c:1102
#, c-format
-msgid " --target2=<type> Specify definition of R_ARM_TARGET2\n"
+msgid " --target1-rel Interpret R_ARM_TARGET1 as R_ARM_REL32\n"
msgstr ""
#: earmelf.c:1128 earmelf_fbsd.c:1128 earmelf_fuchsia.c:1133
-#: earmelf_linux.c:1133 earmelf_linux_eabi.c:1133
+#: earmelf_haiku.c:1133 earmelf_linux.c:1133 earmelf_linux_eabi.c:1133
#: earmelf_linux_fdpiceabi.c:1133 earmelf_nacl.c:1133 earmelf_nbsd.c:1128
#: earmelf_phoenix.c:1133 earmelf_vxworks.c:1168 earmelfb.c:1128
#: earmelfb_fbsd.c:1128 earmelfb_fuchsia.c:1133 earmelfb_linux.c:1133
#: earmelfb_linux_eabi.c:1133 earmelfb_linux_fdpiceabi.c:1133
#: earmelfb_nacl.c:1133 earmelfb_nbsd.c:1128 earmnto.c:1103
#, c-format
-msgid " --fix-v4bx Rewrite BX rn as MOV pc, rn for ARMv4\n"
+msgid " --target1-abs Interpret R_ARM_TARGET1 as R_ARM_ABS32\n"
msgstr ""
#: earmelf.c:1129 earmelf_fbsd.c:1129 earmelf_fuchsia.c:1134
-#: earmelf_linux.c:1134 earmelf_linux_eabi.c:1134
+#: earmelf_haiku.c:1134 earmelf_linux.c:1134 earmelf_linux_eabi.c:1134
#: earmelf_linux_fdpiceabi.c:1134 earmelf_nacl.c:1134 earmelf_nbsd.c:1129
#: earmelf_phoenix.c:1134 earmelf_vxworks.c:1169 earmelfb.c:1129
#: earmelfb_fbsd.c:1129 earmelfb_fuchsia.c:1134 earmelfb_linux.c:1134
#: earmelfb_linux_eabi.c:1134 earmelfb_linux_fdpiceabi.c:1134
#: earmelfb_nacl.c:1134 earmelfb_nbsd.c:1129 earmnto.c:1104
#, c-format
-msgid ""
-" --fix-v4bx-interworking Rewrite BX rn branch to ARMv4 interworking "
-"veneer\n"
+msgid " --target2=<type> Specify definition of R_ARM_TARGET2\n"
msgstr ""
#: earmelf.c:1130 earmelf_fbsd.c:1130 earmelf_fuchsia.c:1135
-#: earmelf_linux.c:1135 earmelf_linux_eabi.c:1135
+#: earmelf_haiku.c:1135 earmelf_linux.c:1135 earmelf_linux_eabi.c:1135
#: earmelf_linux_fdpiceabi.c:1135 earmelf_nacl.c:1135 earmelf_nbsd.c:1130
#: earmelf_phoenix.c:1135 earmelf_vxworks.c:1170 earmelfb.c:1130
#: earmelfb_fbsd.c:1130 earmelfb_fuchsia.c:1135 earmelfb_linux.c:1135
#: earmelfb_linux_eabi.c:1135 earmelfb_linux_fdpiceabi.c:1135
#: earmelfb_nacl.c:1135 earmelfb_nbsd.c:1130 earmnto.c:1105
#, c-format
-msgid " --use-blx Enable use of BLX instructions\n"
+msgid " --fix-v4bx Rewrite BX rn as MOV pc, rn for ARMv4\n"
msgstr ""
#: earmelf.c:1131 earmelf_fbsd.c:1131 earmelf_fuchsia.c:1136
-#: earmelf_linux.c:1136 earmelf_linux_eabi.c:1136
+#: earmelf_haiku.c:1136 earmelf_linux.c:1136 earmelf_linux_eabi.c:1136
#: earmelf_linux_fdpiceabi.c:1136 earmelf_nacl.c:1136 earmelf_nbsd.c:1131
#: earmelf_phoenix.c:1136 earmelf_vxworks.c:1171 earmelfb.c:1131
#: earmelfb_fbsd.c:1131 earmelfb_fuchsia.c:1136 earmelfb_linux.c:1136
#: earmelfb_linux_eabi.c:1136 earmelfb_linux_fdpiceabi.c:1136
#: earmelfb_nacl.c:1136 earmelfb_nbsd.c:1131 earmnto.c:1106
#, c-format
-msgid " --vfp11-denorm-fix Specify how to fix VFP11 denorm erratum\n"
+msgid ""
+" --fix-v4bx-interworking Rewrite BX rn branch to ARMv4 interworking "
+"veneer\n"
msgstr ""
#: earmelf.c:1132 earmelf_fbsd.c:1132 earmelf_fuchsia.c:1137
-#: earmelf_linux.c:1137 earmelf_linux_eabi.c:1137
+#: earmelf_haiku.c:1137 earmelf_linux.c:1137 earmelf_linux_eabi.c:1137
#: earmelf_linux_fdpiceabi.c:1137 earmelf_nacl.c:1137 earmelf_nbsd.c:1132
#: earmelf_phoenix.c:1137 earmelf_vxworks.c:1172 earmelfb.c:1132
#: earmelfb_fbsd.c:1132 earmelfb_fuchsia.c:1137 earmelfb_linux.c:1137
#: earmelfb_linux_eabi.c:1137 earmelfb_linux_fdpiceabi.c:1137
#: earmelfb_nacl.c:1137 earmelfb_nbsd.c:1132 earmnto.c:1107
#, c-format
-msgid ""
-" --fix-stm32l4xx-629360 Specify how to fix STM32L4XX 629360 erratum\n"
+msgid " --use-blx Enable use of BLX instructions\n"
msgstr ""
-#: earmelf.c:1138 earmelf_fbsd.c:1138 earmelf_fuchsia.c:1143
-#: earmelf_linux.c:1143 earmelf_linux_eabi.c:1143
-#: earmelf_linux_fdpiceabi.c:1143 earmelf_nacl.c:1143 earmelf_nbsd.c:1138
-#: earmelf_phoenix.c:1143 earmelf_vxworks.c:1178 earmelfb.c:1138
-#: earmelfb_fbsd.c:1138 earmelfb_fuchsia.c:1143 earmelfb_linux.c:1143
-#: earmelfb_linux_eabi.c:1143 earmelfb_linux_fdpiceabi.c:1143
-#: earmelfb_nacl.c:1143 earmelfb_nbsd.c:1138 earmnto.c:1113
+#: earmelf.c:1133 earmelf_fbsd.c:1133 earmelf_fuchsia.c:1138
+#: earmelf_haiku.c:1138 earmelf_linux.c:1138 earmelf_linux_eabi.c:1138
+#: earmelf_linux_fdpiceabi.c:1138 earmelf_nacl.c:1138 earmelf_nbsd.c:1133
+#: earmelf_phoenix.c:1138 earmelf_vxworks.c:1173 earmelfb.c:1133
+#: earmelfb_fbsd.c:1133 earmelfb_fuchsia.c:1138 earmelfb_linux.c:1138
+#: earmelfb_linux_eabi.c:1138 earmelfb_linux_fdpiceabi.c:1138
+#: earmelfb_nacl.c:1138 earmelfb_nbsd.c:1133 earmnto.c:1108
+#, c-format
+msgid " --vfp11-denorm-fix Specify how to fix VFP11 denorm erratum\n"
+msgstr ""
+
+#: earmelf.c:1134 earmelf_fbsd.c:1134 earmelf_fuchsia.c:1139
+#: earmelf_haiku.c:1139 earmelf_linux.c:1139 earmelf_linux_eabi.c:1139
+#: earmelf_linux_fdpiceabi.c:1139 earmelf_nacl.c:1139 earmelf_nbsd.c:1134
+#: earmelf_phoenix.c:1139 earmelf_vxworks.c:1174 earmelfb.c:1134
+#: earmelfb_fbsd.c:1134 earmelfb_fuchsia.c:1139 earmelfb_linux.c:1139
+#: earmelfb_linux_eabi.c:1139 earmelfb_linux_fdpiceabi.c:1139
+#: earmelfb_nacl.c:1139 earmelfb_nbsd.c:1134 earmnto.c:1109
#, c-format
msgid ""
-" --long-plt Generate long .plt entries\n"
-" to handle large .plt/.got displacements\n"
+" --fix-stm32l4xx-629360 Specify how to fix STM32L4XX 629360 erratum\n"
msgstr ""
#: earmelf.c:1140 earmelf_fbsd.c:1140 earmelf_fuchsia.c:1145
-#: earmelf_linux.c:1145 earmelf_linux_eabi.c:1145
+#: earmelf_haiku.c:1145 earmelf_linux.c:1145 earmelf_linux_eabi.c:1145
#: earmelf_linux_fdpiceabi.c:1145 earmelf_nacl.c:1145 earmelf_nbsd.c:1140
#: earmelf_phoenix.c:1145 earmelf_vxworks.c:1180 earmelfb.c:1140
#: earmelfb_fbsd.c:1140 earmelfb_fuchsia.c:1145 earmelfb_linux.c:1145
@@ -4507,13 +4532,12 @@ msgstr ""
#: earmelfb_nacl.c:1145 earmelfb_nbsd.c:1140 earmnto.c:1115
#, c-format
msgid ""
-" --cmse-implib Make import library to be a secure gateway "
-"import\n"
-" library as per ARMv8-M Security Extensions\n"
+" --long-plt Generate long .plt entries\n"
+" to handle large .plt/.got displacements\n"
msgstr ""
#: earmelf.c:1142 earmelf_fbsd.c:1142 earmelf_fuchsia.c:1147
-#: earmelf_linux.c:1147 earmelf_linux_eabi.c:1147
+#: earmelf_haiku.c:1147 earmelf_linux.c:1147 earmelf_linux_eabi.c:1147
#: earmelf_linux_fdpiceabi.c:1147 earmelf_nacl.c:1147 earmelf_nbsd.c:1142
#: earmelf_phoenix.c:1147 earmelf_vxworks.c:1182 earmelfb.c:1142
#: earmelfb_fbsd.c:1142 earmelfb_fuchsia.c:1147 earmelfb_linux.c:1147
@@ -4521,41 +4545,55 @@ msgstr ""
#: earmelfb_nacl.c:1147 earmelfb_nbsd.c:1142 earmnto.c:1117
#, c-format
msgid ""
+" --cmse-implib Make import library to be a secure gateway "
+"import\n"
+" library as per ARMv8-M Security Extensions\n"
+msgstr ""
+
+#: earmelf.c:1144 earmelf_fbsd.c:1144 earmelf_fuchsia.c:1149
+#: earmelf_haiku.c:1149 earmelf_linux.c:1149 earmelf_linux_eabi.c:1149
+#: earmelf_linux_fdpiceabi.c:1149 earmelf_nacl.c:1149 earmelf_nbsd.c:1144
+#: earmelf_phoenix.c:1149 earmelf_vxworks.c:1184 earmelfb.c:1144
+#: earmelfb_fbsd.c:1144 earmelfb_fuchsia.c:1149 earmelfb_linux.c:1149
+#: earmelfb_linux_eabi.c:1149 earmelfb_linux_fdpiceabi.c:1149
+#: earmelfb_nacl.c:1149 earmelfb_nbsd.c:1144 earmnto.c:1119
+#, c-format
+msgid ""
" --in-implib Import library whose symbols address must\n"
" remain stable\n"
msgstr ""
-#: earmelf.c:1153 earmelf_fbsd.c:1153 earmelf_fuchsia.c:1158
-#: earmelf_linux.c:1158 earmelf_linux_eabi.c:1158
-#: earmelf_linux_fdpiceabi.c:1158 earmelf_nacl.c:1158 earmelf_nbsd.c:1153
-#: earmelf_phoenix.c:1158 earmelf_vxworks.c:1193 earmelfb.c:1153
-#: earmelfb_fbsd.c:1153 earmelfb_fuchsia.c:1158 earmelfb_linux.c:1158
-#: earmelfb_linux_eabi.c:1158 earmelfb_linux_fdpiceabi.c:1158
-#: earmelfb_nacl.c:1158 earmelfb_nbsd.c:1153 earmnto.c:1128
+#: earmelf.c:1155 earmelf_fbsd.c:1155 earmelf_fuchsia.c:1160
+#: earmelf_haiku.c:1160 earmelf_linux.c:1160 earmelf_linux_eabi.c:1160
+#: earmelf_linux_fdpiceabi.c:1160 earmelf_nacl.c:1160 earmelf_nbsd.c:1155
+#: earmelf_phoenix.c:1160 earmelf_vxworks.c:1195 earmelfb.c:1155
+#: earmelfb_fbsd.c:1155 earmelfb_fuchsia.c:1160 earmelfb_linux.c:1160
+#: earmelfb_linux_eabi.c:1160 earmelfb_linux_fdpiceabi.c:1160
+#: earmelfb_nacl.c:1160 earmelfb_nbsd.c:1155 earmnto.c:1130
#, c-format
msgid ""
" --[no-]fix-cortex-a8 Disable/enable Cortex-A8 Thumb-2 branch "
"erratum fix\n"
msgstr ""
-#: earmelf.c:1154 earmelf_fbsd.c:1154 earmelf_fuchsia.c:1159
-#: earmelf_linux.c:1159 earmelf_linux_eabi.c:1159
-#: earmelf_linux_fdpiceabi.c:1159 earmelf_nacl.c:1159 earmelf_nbsd.c:1154
-#: earmelf_phoenix.c:1159 earmelf_vxworks.c:1194 earmelfb.c:1154
-#: earmelfb_fbsd.c:1154 earmelfb_fuchsia.c:1159 earmelfb_linux.c:1159
-#: earmelfb_linux_eabi.c:1159 earmelfb_linux_fdpiceabi.c:1159
-#: earmelfb_nacl.c:1159 earmelfb_nbsd.c:1154 earmnto.c:1129
+#: earmelf.c:1156 earmelf_fbsd.c:1156 earmelf_fuchsia.c:1161
+#: earmelf_haiku.c:1161 earmelf_linux.c:1161 earmelf_linux_eabi.c:1161
+#: earmelf_linux_fdpiceabi.c:1161 earmelf_nacl.c:1161 earmelf_nbsd.c:1156
+#: earmelf_phoenix.c:1161 earmelf_vxworks.c:1196 earmelfb.c:1156
+#: earmelfb_fbsd.c:1156 earmelfb_fuchsia.c:1161 earmelfb_linux.c:1161
+#: earmelfb_linux_eabi.c:1161 earmelfb_linux_fdpiceabi.c:1161
+#: earmelfb_nacl.c:1161 earmelfb_nbsd.c:1156 earmnto.c:1131
#, c-format
msgid " --no-merge-exidx-entries Disable merging exidx entries\n"
msgstr ""
-#: earmelf.c:1155 earmelf_fbsd.c:1155 earmelf_fuchsia.c:1160
-#: earmelf_linux.c:1160 earmelf_linux_eabi.c:1160
-#: earmelf_linux_fdpiceabi.c:1160 earmelf_nacl.c:1160 earmelf_nbsd.c:1155
-#: earmelf_phoenix.c:1160 earmelf_vxworks.c:1195 earmelfb.c:1155
-#: earmelfb_fbsd.c:1155 earmelfb_fuchsia.c:1160 earmelfb_linux.c:1160
-#: earmelfb_linux_eabi.c:1160 earmelfb_linux_fdpiceabi.c:1160
-#: earmelfb_nacl.c:1160 earmelfb_nbsd.c:1155 earmnto.c:1130
+#: earmelf.c:1157 earmelf_fbsd.c:1157 earmelf_fuchsia.c:1162
+#: earmelf_haiku.c:1162 earmelf_linux.c:1162 earmelf_linux_eabi.c:1162
+#: earmelf_linux_fdpiceabi.c:1162 earmelf_nacl.c:1162 earmelf_nbsd.c:1157
+#: earmelf_phoenix.c:1162 earmelf_vxworks.c:1197 earmelfb.c:1157
+#: earmelfb_fbsd.c:1157 earmelfb_fuchsia.c:1162 earmelfb_linux.c:1162
+#: earmelfb_linux_eabi.c:1162 earmelfb_linux_fdpiceabi.c:1162
+#: earmelfb_nacl.c:1162 earmelfb_nbsd.c:1157 earmnto.c:1132
#, c-format
msgid ""
" --[no-]fix-arm1176 Disable/enable ARM1176 BLX immediate erratum "
@@ -4574,9 +4612,9 @@ msgstr ""
msgid "%X%P: dynamic sections created in non-dynamic link\n"
msgstr ""
-#: earmelf_vxworks.c:1197 eelf32_sparc_vxworks.c:500 eelf32ebmipvxworks.c:758
-#: eelf32elmipvxworks.c:758 eelf32ppcvxworks.c:823 eelf_i386_vxworks.c:585
-#: eshelf_vxworks.c:470 eshlelf_vxworks.c:470
+#: earmelf_vxworks.c:1199 eelf32_sparc_vxworks.c:502 eelf32ebmipvxworks.c:760
+#: eelf32elmipvxworks.c:760 eelf32ppcvxworks.c:825 eelf_i386_vxworks.c:587
+#: eshelf_vxworks.c:472 eshlelf_vxworks.c:472
#, c-format
msgid " --force-dynamic Always create dynamic sections\n"
msgstr ""
@@ -4595,10 +4633,10 @@ msgstr ""
msgid "%X%P: can not create stub BFD: %E\n"
msgstr ""
-#: eavr1.c:536 eavr2.c:536 eavr25.c:536 eavr3.c:536 eavr31.c:536 eavr35.c:536
-#: eavr4.c:536 eavr5.c:536 eavr51.c:536 eavr6.c:536 eavrtiny.c:536
-#: eavrxmega1.c:536 eavrxmega2.c:536 eavrxmega3.c:536 eavrxmega4.c:536
-#: eavrxmega5.c:536 eavrxmega6.c:536 eavrxmega7.c:536
+#: eavr1.c:538 eavr2.c:538 eavr25.c:538 eavr3.c:538 eavr31.c:538 eavr35.c:538
+#: eavr4.c:538 eavr5.c:538 eavr51.c:538 eavr6.c:538 eavrtiny.c:538
+#: eavrxmega1.c:538 eavrxmega2.c:538 eavrxmega3.c:538 eavrxmega4.c:538
+#: eavrxmega5.c:538 eavrxmega6.c:538 eavrxmega7.c:538
#, c-format
msgid ""
" --pmem-wrap-around=<val> Make the linker relaxation machine assume that "
@@ -4609,10 +4647,10 @@ msgid ""
"64k.\n"
msgstr ""
-#: eavr1.c:542 eavr2.c:542 eavr25.c:542 eavr3.c:542 eavr31.c:542 eavr35.c:542
-#: eavr4.c:542 eavr5.c:542 eavr51.c:542 eavr6.c:542 eavrtiny.c:542
-#: eavrxmega1.c:542 eavrxmega2.c:542 eavrxmega3.c:542 eavrxmega4.c:542
-#: eavrxmega5.c:542 eavrxmega6.c:542 eavrxmega7.c:542
+#: eavr1.c:544 eavr2.c:544 eavr25.c:544 eavr3.c:544 eavr31.c:544 eavr35.c:544
+#: eavr4.c:544 eavr5.c:544 eavr51.c:544 eavr6.c:544 eavrtiny.c:544
+#: eavrxmega1.c:544 eavrxmega2.c:544 eavrxmega3.c:544 eavrxmega4.c:544
+#: eavrxmega5.c:544 eavrxmega6.c:544 eavrxmega7.c:544
#, c-format
msgid ""
" --no-call-ret-replacement The relaxation machine normally will\n"
@@ -4622,10 +4660,10 @@ msgid ""
" This option disables this optimization.\n"
msgstr ""
-#: eavr1.c:550 eavr2.c:550 eavr25.c:550 eavr3.c:550 eavr31.c:550 eavr35.c:550
-#: eavr4.c:550 eavr5.c:550 eavr51.c:550 eavr6.c:550 eavrtiny.c:550
-#: eavrxmega1.c:550 eavrxmega2.c:550 eavrxmega3.c:550 eavrxmega4.c:550
-#: eavrxmega5.c:550 eavrxmega6.c:550 eavrxmega7.c:550
+#: eavr1.c:552 eavr2.c:552 eavr25.c:552 eavr3.c:552 eavr31.c:552 eavr35.c:552
+#: eavr4.c:552 eavr5.c:552 eavr51.c:552 eavr6.c:552 eavrtiny.c:552
+#: eavrxmega1.c:552 eavrxmega2.c:552 eavrxmega3.c:552 eavrxmega4.c:552
+#: eavrxmega5.c:552 eavrxmega6.c:552 eavrxmega7.c:552
#, c-format
msgid ""
" --no-stubs If the linker detects to attempt to access\n"
@@ -4635,19 +4673,19 @@ msgid ""
"switch.\n"
msgstr ""
-#: eavr1.c:558 eavr2.c:558 eavr25.c:558 eavr3.c:558 eavr31.c:558 eavr35.c:558
-#: eavr4.c:558 eavr5.c:558 eavr51.c:558 eavr6.c:558 eavrtiny.c:558
-#: eavrxmega1.c:558 eavrxmega2.c:558 eavrxmega3.c:558 eavrxmega4.c:558
-#: eavrxmega5.c:558 eavrxmega6.c:558 eavrxmega7.c:558
-#, c-format
-msgid " --debug-stubs Used for debugging avr-ld.\n"
-msgstr ""
-
#: eavr1.c:560 eavr2.c:560 eavr25.c:560 eavr3.c:560 eavr31.c:560 eavr35.c:560
#: eavr4.c:560 eavr5.c:560 eavr51.c:560 eavr6.c:560 eavrtiny.c:560
#: eavrxmega1.c:560 eavrxmega2.c:560 eavrxmega3.c:560 eavrxmega4.c:560
#: eavrxmega5.c:560 eavrxmega6.c:560 eavrxmega7.c:560
#, c-format
+msgid " --debug-stubs Used for debugging avr-ld.\n"
+msgstr ""
+
+#: eavr1.c:562 eavr2.c:562 eavr25.c:562 eavr3.c:562 eavr31.c:562 eavr35.c:562
+#: eavr4.c:562 eavr5.c:562 eavr51.c:562 eavr6.c:562 eavrtiny.c:562
+#: eavrxmega1.c:562 eavrxmega2.c:562 eavrxmega3.c:562 eavrxmega4.c:562
+#: eavrxmega5.c:562 eavrxmega6.c:562 eavrxmega7.c:562
+#, c-format
msgid " --debug-relax Used for debugging avr-ld.\n"
msgstr ""
@@ -4659,14 +4697,14 @@ msgstr ""
msgid "%X%P: cannot build stubs: %E\n"
msgstr ""
-#: ecskyelf.c:553 ecskyelf_linux.c:720
+#: ecskyelf.c:555 ecskyelf_linux.c:722
#, c-format
msgid ""
" --[no-]branch-stub Disable/enable use of stubs to expand branch\n"
" instructions that cannot reach the target.\n"
msgstr ""
-#: ecskyelf.c:557 ecskyelf_linux.c:724
+#: ecskyelf.c:559 ecskyelf_linux.c:726
#, c-format
msgid ""
" --stub-group-size=N Maximum size of a group of input sections\n"
@@ -4725,118 +4763,118 @@ msgstr ""
msgid "running: %s \"%s\" \"%s\" \"%s\" \"%s\"\n"
msgstr ""
-#: eelf32_spu.c:1030
+#: eelf32_spu.c:1032
msgid "%F%P: invalid --local-store address range `%s'\n"
msgstr ""
-#: eelf32_spu.c:1066
+#: eelf32_spu.c:1068
msgid "%F%P: invalid --num-lines/--num-regions `%u'\n"
msgstr ""
-#: eelf32_spu.c:1071
+#: eelf32_spu.c:1073
msgid "%F%P: invalid --line-size/--region-size `%u'\n"
msgstr ""
-#: eelf32_spu.c:1092
+#: eelf32_spu.c:1094
msgid "%F%P: invalid --num-lines/--num-regions `%s'\n"
msgstr ""
-#: eelf32_spu.c:1105
+#: eelf32_spu.c:1107
msgid "%F%P: invalid --line-size/--region-size `%s'\n"
msgstr ""
-#: eelf32_spu.c:1114
+#: eelf32_spu.c:1116
msgid "%F%P: invalid --fixed-space value `%s'\n"
msgstr ""
-#: eelf32_spu.c:1123
+#: eelf32_spu.c:1125
msgid "%F%P: invalid --reserved-space value `%s'\n"
msgstr ""
-#: eelf32_spu.c:1132
+#: eelf32_spu.c:1134
msgid "%F%P: invalid --extra-stack-space value `%s'\n"
msgstr ""
-#: eelf32_spu.c:1169
+#: eelf32_spu.c:1171
#, c-format
msgid " --plugin Make SPU plugin\n"
msgstr ""
-#: eelf32_spu.c:1171
+#: eelf32_spu.c:1173
#, c-format
msgid " --no-overlays No overlay handling\n"
msgstr ""
-#: eelf32_spu.c:1173
+#: eelf32_spu.c:1175
#, c-format
msgid ""
" --compact-stubs Use smaller and possibly slower call stubs\n"
msgstr ""
-#: eelf32_spu.c:1175
+#: eelf32_spu.c:1177
#, c-format
msgid " --emit-stub-syms Add symbols on overlay call stubs\n"
msgstr ""
-#: eelf32_spu.c:1177
+#: eelf32_spu.c:1179
#, c-format
msgid ""
" --extra-overlay-stubs Add stubs on all calls out of overlay regions\n"
msgstr ""
-#: eelf32_spu.c:1179
+#: eelf32_spu.c:1181
#, c-format
msgid " --local-store=lo:hi Valid address range\n"
msgstr ""
-#: eelf32_spu.c:1181
+#: eelf32_spu.c:1183
#, c-format
msgid " --stack-analysis Estimate maximum stack requirement\n"
msgstr ""
-#: eelf32_spu.c:1183
+#: eelf32_spu.c:1185
#, c-format
msgid ""
" --emit-stack-syms Add sym giving stack needed for each func\n"
msgstr ""
-#: eelf32_spu.c:1185
+#: eelf32_spu.c:1187
#, c-format
msgid ""
" --auto-overlay [=filename] Create an overlay script in filename if\n"
" executable does not fit in local store\n"
msgstr ""
-#: eelf32_spu.c:1188
+#: eelf32_spu.c:1190
#, c-format
msgid " --auto-relink Rerun linker using auto-overlay script\n"
msgstr ""
-#: eelf32_spu.c:1190
+#: eelf32_spu.c:1192
#, c-format
msgid ""
" --overlay-rodata Place read-only data with associated function\n"
" code in overlays\n"
msgstr ""
-#: eelf32_spu.c:1193
+#: eelf32_spu.c:1195
#, c-format
msgid " --num-regions Number of overlay buffers (default 1)\n"
msgstr ""
-#: eelf32_spu.c:1195
+#: eelf32_spu.c:1197
#, c-format
msgid ""
" --region-size Size of overlay buffers (default 0, auto)\n"
msgstr ""
-#: eelf32_spu.c:1197
+#: eelf32_spu.c:1199
#, c-format
msgid ""
" --fixed-space=bytes Local store for non-overlay code and data\n"
msgstr ""
-#: eelf32_spu.c:1199
+#: eelf32_spu.c:1201
#, c-format
msgid ""
" --reserved-space=bytes Local store for stack and heap. If not "
@@ -4845,7 +4883,7 @@ msgid ""
"heap\n"
msgstr ""
-#: eelf32_spu.c:1202
+#: eelf32_spu.c:1204
#, c-format
msgid ""
" --extra-stack-space=bytes Space for negative sp access (default 2000) "
@@ -4853,28 +4891,28 @@ msgid ""
" --reserved-space not given\n"
msgstr ""
-#: eelf32_spu.c:1205
+#: eelf32_spu.c:1207
#, c-format
msgid " --soft-icache Generate software icache overlays\n"
msgstr ""
-#: eelf32_spu.c:1207
+#: eelf32_spu.c:1209
#, c-format
msgid ""
" --num-lines Number of soft-icache lines (default 32)\n"
msgstr ""
-#: eelf32_spu.c:1209
+#: eelf32_spu.c:1211
#, c-format
msgid " --line-size Size of soft-icache lines (default 1k)\n"
msgstr ""
-#: eelf32_spu.c:1211
+#: eelf32_spu.c:1213
#, c-format
msgid " --non-ia-text Allow non-icache code in icache lines\n"
msgstr ""
-#: eelf32_spu.c:1213
+#: eelf32_spu.c:1215
#, c-format
msgid " --lrlive-analysis Scan function prologue for lr liveness\n"
msgstr ""
@@ -4884,292 +4922,310 @@ msgstr ""
msgid "%F%P: invalid --dsbt-index %d, outside DSBT size\n"
msgstr ""
-#: eelf32_tic6x_be.c:563 eelf32_tic6x_elf_be.c:563 eelf32_tic6x_elf_le.c:563
-#: eelf32_tic6x_le.c:563 eelf32_tic6x_linux_be.c:563
-#: eelf32_tic6x_linux_le.c:563
+#: eelf32_tic6x_be.c:565 eelf32_tic6x_elf_be.c:565 eelf32_tic6x_elf_le.c:565
+#: eelf32_tic6x_le.c:565 eelf32_tic6x_linux_be.c:565
+#: eelf32_tic6x_linux_le.c:565
msgid "%F%P: invalid --dsbt-index %s\n"
msgstr ""
-#: eelf32_tic6x_be.c:573 eelf32_tic6x_elf_be.c:573 eelf32_tic6x_elf_le.c:573
-#: eelf32_tic6x_le.c:573 eelf32_tic6x_linux_be.c:573
-#: eelf32_tic6x_linux_le.c:573
+#: eelf32_tic6x_be.c:575 eelf32_tic6x_elf_be.c:575 eelf32_tic6x_elf_le.c:575
+#: eelf32_tic6x_le.c:575 eelf32_tic6x_linux_be.c:575
+#: eelf32_tic6x_linux_le.c:575
msgid "%F%P: invalid --dsbt-size %s\n"
msgstr ""
-#: eelf32_tic6x_be.c:589 eelf32_tic6x_elf_be.c:589 eelf32_tic6x_elf_le.c:589
-#: eelf32_tic6x_le.c:589 eelf32_tic6x_linux_be.c:589
-#: eelf32_tic6x_linux_le.c:589
+#: eelf32_tic6x_be.c:591 eelf32_tic6x_elf_be.c:591 eelf32_tic6x_elf_le.c:591
+#: eelf32_tic6x_le.c:591 eelf32_tic6x_linux_be.c:591
+#: eelf32_tic6x_linux_le.c:591
#, c-format
msgid ""
" --dsbt-index <index> Use this as the DSBT index for the output object\n"
msgstr ""
-#: eelf32_tic6x_be.c:590 eelf32_tic6x_elf_be.c:590 eelf32_tic6x_elf_le.c:590
-#: eelf32_tic6x_le.c:590 eelf32_tic6x_linux_be.c:590
-#: eelf32_tic6x_linux_le.c:590
+#: eelf32_tic6x_be.c:592 eelf32_tic6x_elf_be.c:592 eelf32_tic6x_elf_le.c:592
+#: eelf32_tic6x_le.c:592 eelf32_tic6x_linux_be.c:592
+#: eelf32_tic6x_linux_le.c:592
#, c-format
msgid ""
" --dsbt-size <index> Use this as the number of entries in the DSBT "
"table\n"
msgstr ""
-#: eelf32_tic6x_be.c:591 eelf32_tic6x_elf_be.c:591 eelf32_tic6x_elf_le.c:591
-#: eelf32_tic6x_le.c:591 eelf32_tic6x_linux_be.c:591
-#: eelf32_tic6x_linux_le.c:591
+#: eelf32_tic6x_be.c:593 eelf32_tic6x_elf_be.c:593 eelf32_tic6x_elf_le.c:593
+#: eelf32_tic6x_le.c:593 eelf32_tic6x_linux_be.c:593
+#: eelf32_tic6x_linux_le.c:593
#, c-format
msgid " --no-merge-exidx-entries\n"
msgstr ""
-#: eelf32_tic6x_be.c:592 eelf32_tic6x_elf_be.c:592 eelf32_tic6x_elf_le.c:592
-#: eelf32_tic6x_le.c:592 eelf32_tic6x_linux_be.c:592
-#: eelf32_tic6x_linux_le.c:592
+#: eelf32_tic6x_be.c:594 eelf32_tic6x_elf_be.c:594 eelf32_tic6x_elf_le.c:594
+#: eelf32_tic6x_le.c:594 eelf32_tic6x_linux_be.c:594
+#: eelf32_tic6x_linux_le.c:594
#, c-format
msgid " Disable merging exidx entries\n"
msgstr ""
-#: eelf32_x86_64.c:5547 eelf_i386.c:5166 eelf_i386_be.c:469
-#: eelf_i386_fbsd.c:509 eelf_i386_ldso.c:484 eelf_i386_sol2.c:641
-#: eelf_i386_vxworks.c:536 eelf_iamcu.c:509 eelf_k1om.c:5500
-#: eelf_k1om_fbsd.c:509 eelf_l1om.c:5500 eelf_l1om_fbsd.c:509
-#: eelf_x86_64.c:5547 eelf_x86_64_cloudabi.c:512 eelf_x86_64_fbsd.c:512
-#: eelf_x86_64_sol2.c:644
+#: eelf32_x86_64.c:5571 eelf_i386.c:5190 eelf_i386_be.c:471
+#: eelf_i386_fbsd.c:511 eelf_i386_haiku.c:511 eelf_i386_ldso.c:486
+#: eelf_i386_sol2.c:643 eelf_i386_vxworks.c:538 eelf_iamcu.c:511
+#: eelf_k1om.c:5502 eelf_k1om_fbsd.c:511 eelf_l1om.c:5502 eelf_l1om_fbsd.c:511
+#: eelf_x86_64.c:5571 eelf_x86_64_cloudabi.c:514 eelf_x86_64_fbsd.c:514
+#: eelf_x86_64_haiku.c:514 eelf_x86_64_sol2.c:646
msgid "%F%P: invalid number for -z call-nop=prefix-: %s\n"
msgstr ""
-#: eelf32_x86_64.c:5556 eelf_i386.c:5175 eelf_i386_be.c:478
-#: eelf_i386_fbsd.c:518 eelf_i386_ldso.c:493 eelf_i386_sol2.c:650
-#: eelf_i386_vxworks.c:545 eelf_iamcu.c:518 eelf_k1om.c:5509
-#: eelf_k1om_fbsd.c:518 eelf_l1om.c:5509 eelf_l1om_fbsd.c:518
-#: eelf_x86_64.c:5556 eelf_x86_64_cloudabi.c:521 eelf_x86_64_fbsd.c:521
-#: eelf_x86_64_sol2.c:653
+#: eelf32_x86_64.c:5580 eelf_i386.c:5199 eelf_i386_be.c:480
+#: eelf_i386_fbsd.c:520 eelf_i386_haiku.c:520 eelf_i386_ldso.c:495
+#: eelf_i386_sol2.c:652 eelf_i386_vxworks.c:547 eelf_iamcu.c:520
+#: eelf_k1om.c:5511 eelf_k1om_fbsd.c:520 eelf_l1om.c:5511 eelf_l1om_fbsd.c:520
+#: eelf_x86_64.c:5580 eelf_x86_64_cloudabi.c:523 eelf_x86_64_fbsd.c:523
+#: eelf_x86_64_haiku.c:523 eelf_x86_64_sol2.c:655
msgid "%F%P: invalid number for -z call-nop=suffix-: %s\n"
msgstr ""
-#: eelf32_x86_64.c:5561 eelf_i386.c:5180 eelf_i386_be.c:483
-#: eelf_i386_fbsd.c:523 eelf_i386_ldso.c:498 eelf_i386_sol2.c:655
-#: eelf_i386_vxworks.c:550 eelf_iamcu.c:523 eelf_k1om.c:5514
-#: eelf_k1om_fbsd.c:523 eelf_l1om.c:5514 eelf_l1om_fbsd.c:523
-#: eelf_x86_64.c:5561 eelf_x86_64_cloudabi.c:526 eelf_x86_64_fbsd.c:526
-#: eelf_x86_64_sol2.c:658
+#: eelf32_x86_64.c:5585 eelf_i386.c:5204 eelf_i386_be.c:485
+#: eelf_i386_fbsd.c:525 eelf_i386_haiku.c:525 eelf_i386_ldso.c:500
+#: eelf_i386_sol2.c:657 eelf_i386_vxworks.c:552 eelf_iamcu.c:525
+#: eelf_k1om.c:5516 eelf_k1om_fbsd.c:525 eelf_l1om.c:5516 eelf_l1om_fbsd.c:525
+#: eelf_x86_64.c:5585 eelf_x86_64_cloudabi.c:528 eelf_x86_64_fbsd.c:528
+#: eelf_x86_64_haiku.c:528 eelf_x86_64_sol2.c:660
msgid "%F%P: unsupported option: -z %s\n"
msgstr ""
-#: eelf32_x86_64.c:5583 eelf_i386.c:5202 eelf_i386_fbsd.c:545
-#: eelf_x86_64.c:5583 eelf_x86_64_cloudabi.c:548 eelf_x86_64_fbsd.c:548
-#: eelf_x86_64_sol2.c:680
+#: eelf32_x86_64.c:5607 eelf_i386.c:5226 eelf_i386_fbsd.c:547
+#: eelf_i386_haiku.c:547 eelf_x86_64.c:5607 eelf_x86_64_cloudabi.c:550
+#: eelf_x86_64_fbsd.c:550 eelf_x86_64_haiku.c:550 eelf_x86_64_sol2.c:682
msgid "%F%P: invalid option for -z cet-report=: %s\n"
msgstr ""
-#: eelf32_x86_64.c:5597 eelf_i386.c:5216 eelf_i386_fbsd.c:559
-#: eelf_x86_64.c:5597 eelf_x86_64_cloudabi.c:562 eelf_x86_64_fbsd.c:562
-#: eelf_x86_64_sol2.c:694
+#: eelf32_x86_64.c:5621 eelf_i386.c:5240 eelf_i386_fbsd.c:561
+#: eelf_i386_haiku.c:561 eelf_x86_64.c:5621 eelf_x86_64_cloudabi.c:564
+#: eelf_x86_64_fbsd.c:564 eelf_x86_64_haiku.c:564 eelf_x86_64_sol2.c:696
msgid "%F%P: invalid x86-64 ISA level: %s\n"
msgstr ""
-#: eelf32_x86_64.c:5634 eelf_i386.c:5253 eelf_i386_be.c:499
-#: eelf_i386_fbsd.c:596 eelf_i386_ldso.c:523 eelf_i386_sol2.c:680
-#: eelf_i386_vxworks.c:571 eelf_iamcu.c:548 eelf_k1om.c:5539
-#: eelf_k1om_fbsd.c:548 eelf_l1om.c:5539 eelf_l1om_fbsd.c:548
-#: eelf_x86_64.c:5687 eelf_x86_64_cloudabi.c:652 eelf_x86_64_fbsd.c:652
-#: eelf_x86_64_sol2.c:784
+#: eelf32_x86_64.c:5663 eelf_i386.c:5282 eelf_i386_be.c:501
+#: eelf_i386_fbsd.c:603 eelf_i386_haiku.c:603 eelf_i386_ldso.c:525
+#: eelf_i386_sol2.c:682 eelf_i386_vxworks.c:573 eelf_iamcu.c:550
+#: eelf_k1om.c:5541 eelf_k1om_fbsd.c:550 eelf_l1om.c:5541 eelf_l1om_fbsd.c:550
+#: eelf_x86_64.c:5716 eelf_x86_64_cloudabi.c:659 eelf_x86_64_fbsd.c:659
+#: eelf_x86_64_haiku.c:659 eelf_x86_64_sol2.c:791
#, c-format
msgid ""
" -z noextern-protected-data Do not treat protected data symbol as "
"external\n"
msgstr ""
-#: eelf32_x86_64.c:5636 eelf_i386.c:5255 eelf_i386_be.c:501
-#: eelf_i386_fbsd.c:598 eelf_i386_ldso.c:525 eelf_i386_sol2.c:682
-#: eelf_i386_vxworks.c:573 eelf_iamcu.c:550 eelf_k1om.c:5541
-#: eelf_k1om_fbsd.c:550 eelf_l1om.c:5541 eelf_l1om_fbsd.c:550
-#: eelf_x86_64.c:5689 eelf_x86_64_cloudabi.c:654 eelf_x86_64_fbsd.c:654
-#: eelf_x86_64_sol2.c:786
+#: eelf32_x86_64.c:5665 eelf_i386.c:5284 eelf_i386_be.c:503
+#: eelf_i386_fbsd.c:605 eelf_i386_haiku.c:605 eelf_i386_ldso.c:527
+#: eelf_i386_sol2.c:684 eelf_i386_vxworks.c:575 eelf_iamcu.c:552
+#: eelf_k1om.c:5543 eelf_k1om_fbsd.c:552 eelf_l1om.c:5543 eelf_l1om_fbsd.c:552
+#: eelf_x86_64.c:5718 eelf_x86_64_cloudabi.c:661 eelf_x86_64_fbsd.c:661
+#: eelf_x86_64_haiku.c:661 eelf_x86_64_sol2.c:793
#, c-format
msgid " -z indirect-extern-access Enable indirect external access\n"
msgstr ""
-#: eelf32_x86_64.c:5638 eelf_i386.c:5257 eelf_i386_be.c:503
-#: eelf_i386_fbsd.c:600 eelf_i386_ldso.c:527 eelf_i386_sol2.c:684
-#: eelf_i386_vxworks.c:575 eelf_iamcu.c:552 eelf_k1om.c:5543
-#: eelf_k1om_fbsd.c:552 eelf_l1om.c:5543 eelf_l1om_fbsd.c:552
-#: eelf_x86_64.c:5691 eelf_x86_64_cloudabi.c:656 eelf_x86_64_fbsd.c:656
-#: eelf_x86_64_sol2.c:788
+#: eelf32_x86_64.c:5667 eelf_i386.c:5286 eelf_i386_be.c:505
+#: eelf_i386_fbsd.c:607 eelf_i386_haiku.c:607 eelf_i386_ldso.c:529
+#: eelf_i386_sol2.c:686 eelf_i386_vxworks.c:577 eelf_iamcu.c:554
+#: eelf_k1om.c:5545 eelf_k1om_fbsd.c:554 eelf_l1om.c:5545 eelf_l1om_fbsd.c:554
+#: eelf_x86_64.c:5720 eelf_x86_64_cloudabi.c:663 eelf_x86_64_fbsd.c:663
+#: eelf_x86_64_haiku.c:663 eelf_x86_64_sol2.c:795
#, c-format
msgid ""
" -z noindirect-extern-access Disable indirect external access (default)\n"
msgstr ""
-#: eelf32_x86_64.c:5641 eelf32lppc.c:815 eelf32lppclinux.c:815
-#: eelf32lppcnto.c:815 eelf32lppcsim.c:815 eelf32ppc.c:815 eelf32ppc_fbsd.c:815
-#: eelf32ppclinux.c:815 eelf32ppcnto.c:815 eelf32ppcsim.c:815
-#: eelf32ppcvxworks.c:793 eelf32ppcwindiss.c:815 eelf64lppc.c:1339
-#: eelf64lppc_fbsd.c:1339 eelf64ppc.c:1339 eelf64ppc_fbsd.c:1339
-#: eelf_i386.c:5260 eelf_i386_be.c:506 eelf_i386_fbsd.c:603
-#: eelf_i386_ldso.c:530 eelf_i386_sol2.c:687 eelf_i386_vxworks.c:578
-#: eelf_iamcu.c:555 eelf_k1om.c:5546 eelf_k1om_fbsd.c:555 eelf_l1om.c:5546
-#: eelf_l1om_fbsd.c:555 eelf_x86_64.c:5694 eelf_x86_64_cloudabi.c:659
-#: eelf_x86_64_fbsd.c:659 eelf_x86_64_sol2.c:791
+#: eelf32_x86_64.c:5670 eelf32lppc.c:817 eelf32lppclinux.c:817
+#: eelf32lppcnto.c:817 eelf32lppcsim.c:817 eelf32ppc.c:817 eelf32ppc_fbsd.c:817
+#: eelf32ppchaiku.c:817 eelf32ppclinux.c:817 eelf32ppcnto.c:817
+#: eelf32ppcsim.c:817 eelf32ppcvxworks.c:795 eelf32ppcwindiss.c:817
+#: eelf64lppc.c:1346 eelf64lppc_fbsd.c:1346 eelf64ppc.c:1346
+#: eelf64ppc_fbsd.c:1346 eelf_i386.c:5289 eelf_i386_be.c:508
+#: eelf_i386_fbsd.c:610 eelf_i386_haiku.c:610 eelf_i386_ldso.c:532
+#: eelf_i386_sol2.c:689 eelf_i386_vxworks.c:580 eelf_iamcu.c:557
+#: eelf_k1om.c:5548 eelf_k1om_fbsd.c:557 eelf_l1om.c:5548 eelf_l1om_fbsd.c:557
+#: eelf_x86_64.c:5723 eelf_x86_64_cloudabi.c:666 eelf_x86_64_fbsd.c:666
+#: eelf_x86_64_haiku.c:666 eelf_x86_64_sol2.c:798
#, c-format
msgid ""
" -z dynamic-undefined-weak Make undefined weak symbols dynamic\n"
" -z nodynamic-undefined-weak Do not make undefined weak symbols dynamic\n"
msgstr ""
-#: eelf32_x86_64.c:5645 eelf_x86_64.c:5698 eelf_x86_64_cloudabi.c:663
-#: eelf_x86_64_fbsd.c:663 eelf_x86_64_sol2.c:795
+#: eelf32_x86_64.c:5674 eelf_x86_64.c:5727 eelf_x86_64_cloudabi.c:670
+#: eelf_x86_64_fbsd.c:670 eelf_x86_64_haiku.c:670 eelf_x86_64_sol2.c:802
#, c-format
msgid " -z noreloc-overflow Disable relocation overflow check\n"
msgstr ""
-#: eelf32_x86_64.c:5648 eelf_i386.c:5264 eelf_i386_be.c:510
-#: eelf_i386_fbsd.c:607 eelf_i386_ldso.c:534 eelf_i386_sol2.c:691
-#: eelf_i386_vxworks.c:582 eelf_iamcu.c:559 eelf_k1om.c:5550
-#: eelf_k1om_fbsd.c:559 eelf_l1om.c:5550 eelf_l1om_fbsd.c:559
-#: eelf_x86_64.c:5701 eelf_x86_64_cloudabi.c:666 eelf_x86_64_fbsd.c:666
-#: eelf_x86_64_sol2.c:798
+#: eelf32_x86_64.c:5677 eelf_i386.c:5293 eelf_i386_be.c:512
+#: eelf_i386_fbsd.c:614 eelf_i386_haiku.c:614 eelf_i386_ldso.c:536
+#: eelf_i386_sol2.c:693 eelf_i386_vxworks.c:584 eelf_iamcu.c:561
+#: eelf_k1om.c:5552 eelf_k1om_fbsd.c:561 eelf_l1om.c:5552 eelf_l1om_fbsd.c:561
+#: eelf_x86_64.c:5730 eelf_x86_64_cloudabi.c:673 eelf_x86_64_fbsd.c:673
+#: eelf_x86_64_haiku.c:673 eelf_x86_64_sol2.c:805
#, c-format
msgid " -z call-nop=PADDING Use PADDING as 1-byte NOP for branch\n"
msgstr ""
-#: eelf32_x86_64.c:5651 eelf_i386.c:5267 eelf_i386_fbsd.c:610
-#: eelf_x86_64.c:5704 eelf_x86_64_cloudabi.c:669 eelf_x86_64_fbsd.c:669
-#: eelf_x86_64_sol2.c:801
+#: eelf32_x86_64.c:5680 eelf_i386.c:5296 eelf_i386_fbsd.c:617
+#: eelf_i386_haiku.c:617 eelf_x86_64.c:5733 eelf_x86_64_cloudabi.c:676
+#: eelf_x86_64_fbsd.c:676 eelf_x86_64_haiku.c:676 eelf_x86_64_sol2.c:808
#, c-format
msgid " -z ibtplt Generate IBT-enabled PLT entries\n"
msgstr ""
-#: eelf32_x86_64.c:5653 eelf_i386.c:5269 eelf_i386_fbsd.c:612
-#: eelf_x86_64.c:5706 eelf_x86_64_cloudabi.c:671 eelf_x86_64_fbsd.c:671
-#: eelf_x86_64_sol2.c:803
+#: eelf32_x86_64.c:5682 eelf_i386.c:5298 eelf_i386_fbsd.c:619
+#: eelf_i386_haiku.c:619 eelf_x86_64.c:5735 eelf_x86_64_cloudabi.c:678
+#: eelf_x86_64_fbsd.c:678 eelf_x86_64_haiku.c:678 eelf_x86_64_sol2.c:810
#, c-format
msgid " -z ibt Generate GNU_PROPERTY_X86_FEATURE_1_IBT\n"
msgstr ""
-#: eelf32_x86_64.c:5655 eelf_i386.c:5271 eelf_i386_fbsd.c:614
-#: eelf_x86_64.c:5708 eelf_x86_64_cloudabi.c:673 eelf_x86_64_fbsd.c:673
-#: eelf_x86_64_sol2.c:805
+#: eelf32_x86_64.c:5684 eelf_i386.c:5300 eelf_i386_fbsd.c:621
+#: eelf_i386_haiku.c:621 eelf_x86_64.c:5737 eelf_x86_64_cloudabi.c:680
+#: eelf_x86_64_fbsd.c:680 eelf_x86_64_haiku.c:680 eelf_x86_64_sol2.c:812
#, c-format
msgid ""
" -z shstk Generate GNU_PROPERTY_X86_FEATURE_1_SHSTK\n"
msgstr ""
-#: eelf32_x86_64.c:5657 eelf_i386.c:5273 eelf_i386_fbsd.c:616
-#: eelf_x86_64.c:5710 eelf_x86_64_cloudabi.c:675 eelf_x86_64_fbsd.c:675
-#: eelf_x86_64_sol2.c:807
+#: eelf32_x86_64.c:5686 eelf_i386.c:5302 eelf_i386_fbsd.c:623
+#: eelf_i386_haiku.c:623 eelf_x86_64.c:5739 eelf_x86_64_cloudabi.c:682
+#: eelf_x86_64_fbsd.c:682 eelf_x86_64_haiku.c:682 eelf_x86_64_sol2.c:814
#, c-format
msgid ""
" -z cet-report=[none|warning|error] (default: none)\n"
" Report missing IBT and SHSTK properties\n"
msgstr ""
-#: eelf32_x86_64.c:5661 eelf_i386.c:5277 eelf_i386_fbsd.c:620
-#: eelf_x86_64.c:5714 eelf_x86_64_cloudabi.c:679 eelf_x86_64_fbsd.c:679
-#: eelf_x86_64_sol2.c:811
+#: eelf32_x86_64.c:5690 eelf_i386.c:5306 eelf_i386_fbsd.c:627
+#: eelf_i386_haiku.c:627 eelf_x86_64.c:5743 eelf_x86_64_cloudabi.c:686
+#: eelf_x86_64_fbsd.c:686 eelf_x86_64_haiku.c:686 eelf_x86_64_sol2.c:818
#, c-format
msgid " -z report-relative-reloc Report relative relocations\n"
msgstr ""
-#: eelf32_x86_64.c:5664 eelf_i386.c:5280 eelf_i386_fbsd.c:623
-#: eelf_x86_64.c:5717 eelf_x86_64_cloudabi.c:682 eelf_x86_64_fbsd.c:682
-#: eelf_x86_64_sol2.c:814
+#: eelf32_x86_64.c:5693 eelf_i386.c:5309 eelf_i386_fbsd.c:630
+#: eelf_i386_haiku.c:630 eelf_x86_64.c:5746 eelf_x86_64_cloudabi.c:689
+#: eelf_x86_64_fbsd.c:689 eelf_x86_64_haiku.c:689 eelf_x86_64_sol2.c:821
#, c-format
msgid ""
" -z x86-64-{baseline|v[234]} Mark x86-64-{baseline|v[234]} ISA level as "
"needed\n"
msgstr ""
-#: eelf32b4300.c:698 eelf32bmip.c:698 eelf32bmipn32.c:712 eelf32bsmip.c:712
-#: eelf32btsmip.c:698 eelf32btsmip_fbsd.c:698 eelf32btsmipn32.c:698
-#: eelf32btsmipn32_fbsd.c:698 eelf32ebmip.c:698 eelf32ebmipvxworks.c:737
-#: eelf32elmip.c:698 eelf32elmipvxworks.c:737 eelf32l4300.c:698
-#: eelf32lmip.c:698 eelf32lr5900.c:557 eelf32lr5900n32.c:556 eelf32lsmip.c:698
-#: eelf32ltsmip.c:698 eelf32ltsmip_fbsd.c:698 eelf32ltsmipn32.c:698
-#: eelf32ltsmipn32_fbsd.c:698 eelf32mipswindiss.c:531 eelf64bmip.c:712
-#: eelf64btsmip.c:698 eelf64btsmip_fbsd.c:698 eelf64ltsmip.c:698
-#: eelf64ltsmip_fbsd.c:698
+#: eelf32_x86_64.c:5696 eelf64lppc.c:1350 eelf64lppc_fbsd.c:1350
+#: eelf64ppc.c:1350 eelf64ppc_fbsd.c:1350 eelf_i386.c:5312 eelf_i386_fbsd.c:633
+#: eelf_i386_haiku.c:633 eelf_x86_64.c:5763 eelf_x86_64_cloudabi.c:706
+#: eelf_x86_64_fbsd.c:706 eelf_x86_64_haiku.c:706 eelf_x86_64_sol2.c:838
+#, c-format
+msgid " -z pack-relative-relocs Pack relative relocations\n"
+msgstr ""
+
+#: eelf32_x86_64.c:5698 eelf64lppc.c:1352 eelf64lppc_fbsd.c:1352
+#: eelf64ppc.c:1352 eelf64ppc_fbsd.c:1352 eelf_i386.c:5314 eelf_i386_fbsd.c:635
+#: eelf_i386_haiku.c:635 eelf_x86_64.c:5765 eelf_x86_64_cloudabi.c:708
+#: eelf_x86_64_fbsd.c:708 eelf_x86_64_haiku.c:708 eelf_x86_64_sol2.c:840
+#, c-format
+msgid ""
+" -z nopack-relative-relocs Do not pack relative relocations (default)\n"
+msgstr ""
+
+#: eelf32b4300.c:700 eelf32bmip.c:700 eelf32bmipn32.c:714 eelf32bsmip.c:714
+#: eelf32btsmip.c:700 eelf32btsmip_fbsd.c:700 eelf32btsmipn32.c:700
+#: eelf32btsmipn32_fbsd.c:700 eelf32ebmip.c:700 eelf32ebmipvxworks.c:739
+#: eelf32elmip.c:700 eelf32elmipvxworks.c:739 eelf32l4300.c:700
+#: eelf32lmip.c:700 eelf32lr5900.c:559 eelf32lr5900n32.c:558 eelf32lsmip.c:700
+#: eelf32ltsmip.c:700 eelf32ltsmip_fbsd.c:700 eelf32ltsmipn32.c:700
+#: eelf32ltsmipn32_fbsd.c:700 eelf32mipswindiss.c:533 eelf64bmip.c:714
+#: eelf64btsmip.c:700 eelf64btsmip_fbsd.c:700 eelf64ltsmip.c:700
+#: eelf64ltsmip_fbsd.c:700 eelf_mipsel_haiku.c:700
#, c-format
msgid ""
" --insn32 Only generate 32-bit microMIPS instructions\n"
msgstr ""
-#: eelf32b4300.c:701 eelf32bmip.c:701 eelf32bmipn32.c:715 eelf32bsmip.c:715
-#: eelf32btsmip.c:701 eelf32btsmip_fbsd.c:701 eelf32btsmipn32.c:701
-#: eelf32btsmipn32_fbsd.c:701 eelf32ebmip.c:701 eelf32ebmipvxworks.c:740
-#: eelf32elmip.c:701 eelf32elmipvxworks.c:740 eelf32l4300.c:701
-#: eelf32lmip.c:701 eelf32lr5900.c:560 eelf32lr5900n32.c:559 eelf32lsmip.c:701
-#: eelf32ltsmip.c:701 eelf32ltsmip_fbsd.c:701 eelf32ltsmipn32.c:701
-#: eelf32ltsmipn32_fbsd.c:701 eelf32mipswindiss.c:534 eelf64bmip.c:715
-#: eelf64btsmip.c:701 eelf64btsmip_fbsd.c:701 eelf64ltsmip.c:701
-#: eelf64ltsmip_fbsd.c:701
+#: eelf32b4300.c:703 eelf32bmip.c:703 eelf32bmipn32.c:717 eelf32bsmip.c:717
+#: eelf32btsmip.c:703 eelf32btsmip_fbsd.c:703 eelf32btsmipn32.c:703
+#: eelf32btsmipn32_fbsd.c:703 eelf32ebmip.c:703 eelf32ebmipvxworks.c:742
+#: eelf32elmip.c:703 eelf32elmipvxworks.c:742 eelf32l4300.c:703
+#: eelf32lmip.c:703 eelf32lr5900.c:562 eelf32lr5900n32.c:561 eelf32lsmip.c:703
+#: eelf32ltsmip.c:703 eelf32ltsmip_fbsd.c:703 eelf32ltsmipn32.c:703
+#: eelf32ltsmipn32_fbsd.c:703 eelf32mipswindiss.c:536 eelf64bmip.c:717
+#: eelf64btsmip.c:703 eelf64btsmip_fbsd.c:703 eelf64ltsmip.c:703
+#: eelf64ltsmip_fbsd.c:703 eelf_mipsel_haiku.c:703
#, c-format
msgid " --no-insn32 Generate all microMIPS instructions\n"
msgstr ""
-#: eelf32b4300.c:704 eelf32bmip.c:704 eelf32bmipn32.c:718 eelf32bsmip.c:718
-#: eelf32btsmip.c:704 eelf32btsmip_fbsd.c:704 eelf32btsmipn32.c:704
-#: eelf32btsmipn32_fbsd.c:704 eelf32ebmip.c:704 eelf32ebmipvxworks.c:743
-#: eelf32elmip.c:704 eelf32elmipvxworks.c:743 eelf32l4300.c:704
-#: eelf32lmip.c:704 eelf32lr5900.c:563 eelf32lr5900n32.c:562 eelf32lsmip.c:704
-#: eelf32ltsmip.c:704 eelf32ltsmip_fbsd.c:704 eelf32ltsmipn32.c:704
-#: eelf32ltsmipn32_fbsd.c:704 eelf32mipswindiss.c:537 eelf64bmip.c:718
-#: eelf64btsmip.c:704 eelf64btsmip_fbsd.c:704 eelf64ltsmip.c:704
-#: eelf64ltsmip_fbsd.c:704
+#: eelf32b4300.c:706 eelf32bmip.c:706 eelf32bmipn32.c:720 eelf32bsmip.c:720
+#: eelf32btsmip.c:706 eelf32btsmip_fbsd.c:706 eelf32btsmipn32.c:706
+#: eelf32btsmipn32_fbsd.c:706 eelf32ebmip.c:706 eelf32ebmipvxworks.c:745
+#: eelf32elmip.c:706 eelf32elmipvxworks.c:745 eelf32l4300.c:706
+#: eelf32lmip.c:706 eelf32lr5900.c:565 eelf32lr5900n32.c:564 eelf32lsmip.c:706
+#: eelf32ltsmip.c:706 eelf32ltsmip_fbsd.c:706 eelf32ltsmipn32.c:706
+#: eelf32ltsmipn32_fbsd.c:706 eelf32mipswindiss.c:539 eelf64bmip.c:720
+#: eelf64btsmip.c:706 eelf64btsmip_fbsd.c:706 eelf64ltsmip.c:706
+#: eelf64ltsmip_fbsd.c:706 eelf_mipsel_haiku.c:706
#, c-format
msgid ""
" --ignore-branch-isa Accept invalid branch relocations requiring\n"
" an ISA mode switch\n"
msgstr ""
-#: eelf32b4300.c:708 eelf32bmip.c:708 eelf32bmipn32.c:722 eelf32bsmip.c:722
-#: eelf32btsmip.c:708 eelf32btsmip_fbsd.c:708 eelf32btsmipn32.c:708
-#: eelf32btsmipn32_fbsd.c:708 eelf32ebmip.c:708 eelf32ebmipvxworks.c:747
-#: eelf32elmip.c:708 eelf32elmipvxworks.c:747 eelf32l4300.c:708
-#: eelf32lmip.c:708 eelf32lr5900.c:567 eelf32lr5900n32.c:566 eelf32lsmip.c:708
-#: eelf32ltsmip.c:708 eelf32ltsmip_fbsd.c:708 eelf32ltsmipn32.c:708
-#: eelf32ltsmipn32_fbsd.c:708 eelf32mipswindiss.c:541 eelf64bmip.c:722
-#: eelf64btsmip.c:708 eelf64btsmip_fbsd.c:708 eelf64ltsmip.c:708
-#: eelf64ltsmip_fbsd.c:708
+#: eelf32b4300.c:710 eelf32bmip.c:710 eelf32bmipn32.c:724 eelf32bsmip.c:724
+#: eelf32btsmip.c:710 eelf32btsmip_fbsd.c:710 eelf32btsmipn32.c:710
+#: eelf32btsmipn32_fbsd.c:710 eelf32ebmip.c:710 eelf32ebmipvxworks.c:749
+#: eelf32elmip.c:710 eelf32elmipvxworks.c:749 eelf32l4300.c:710
+#: eelf32lmip.c:710 eelf32lr5900.c:569 eelf32lr5900n32.c:568 eelf32lsmip.c:710
+#: eelf32ltsmip.c:710 eelf32ltsmip_fbsd.c:710 eelf32ltsmipn32.c:710
+#: eelf32ltsmipn32_fbsd.c:710 eelf32mipswindiss.c:543 eelf64bmip.c:724
+#: eelf64btsmip.c:710 eelf64btsmip_fbsd.c:710 eelf64ltsmip.c:710
+#: eelf64ltsmip_fbsd.c:710 eelf_mipsel_haiku.c:710
#, c-format
msgid ""
" --no-ignore-branch-isa Reject invalid branch relocations requiring\n"
" an ISA mode switch\n"
msgstr ""
-#: eelf32b4300.c:712 eelf32bmip.c:712 eelf32bmipn32.c:726 eelf32bsmip.c:726
-#: eelf32btsmip.c:712 eelf32btsmip_fbsd.c:712 eelf32btsmipn32.c:712
-#: eelf32btsmipn32_fbsd.c:712 eelf32ebmip.c:712 eelf32ebmipvxworks.c:751
-#: eelf32elmip.c:712 eelf32elmipvxworks.c:751 eelf32l4300.c:712
-#: eelf32lmip.c:712 eelf32lr5900.c:571 eelf32lr5900n32.c:570 eelf32lsmip.c:712
-#: eelf32ltsmip.c:712 eelf32ltsmip_fbsd.c:712 eelf32ltsmipn32.c:712
-#: eelf32ltsmipn32_fbsd.c:712 eelf32mipswindiss.c:545 eelf64bmip.c:726
-#: eelf64btsmip.c:712 eelf64btsmip_fbsd.c:712 eelf64ltsmip.c:712
-#: eelf64ltsmip_fbsd.c:712
+#: eelf32b4300.c:714 eelf32bmip.c:714 eelf32bmipn32.c:728 eelf32bsmip.c:728
+#: eelf32btsmip.c:714 eelf32btsmip_fbsd.c:714 eelf32btsmipn32.c:714
+#: eelf32btsmipn32_fbsd.c:714 eelf32ebmip.c:714 eelf32ebmipvxworks.c:753
+#: eelf32elmip.c:714 eelf32elmipvxworks.c:753 eelf32l4300.c:714
+#: eelf32lmip.c:714 eelf32lr5900.c:573 eelf32lr5900n32.c:572 eelf32lsmip.c:714
+#: eelf32ltsmip.c:714 eelf32ltsmip_fbsd.c:714 eelf32ltsmipn32.c:714
+#: eelf32ltsmipn32_fbsd.c:714 eelf32mipswindiss.c:547 eelf64bmip.c:728
+#: eelf64btsmip.c:714 eelf64btsmip_fbsd.c:714 eelf64ltsmip.c:714
+#: eelf64ltsmip_fbsd.c:714 eelf_mipsel_haiku.c:714
#, c-format
msgid ""
" --compact-branches Generate compact branches/jumps for MIPS R6\n"
msgstr ""
-#: eelf32b4300.c:715 eelf32bmip.c:715 eelf32bmipn32.c:729 eelf32bsmip.c:729
-#: eelf32btsmip.c:715 eelf32btsmip_fbsd.c:715 eelf32btsmipn32.c:715
-#: eelf32btsmipn32_fbsd.c:715 eelf32ebmip.c:715 eelf32ebmipvxworks.c:754
-#: eelf32elmip.c:715 eelf32elmipvxworks.c:754 eelf32l4300.c:715
-#: eelf32lmip.c:715 eelf32lr5900.c:574 eelf32lr5900n32.c:573 eelf32lsmip.c:715
-#: eelf32ltsmip.c:715 eelf32ltsmip_fbsd.c:715 eelf32ltsmipn32.c:715
-#: eelf32ltsmipn32_fbsd.c:715 eelf32mipswindiss.c:548 eelf64bmip.c:729
-#: eelf64btsmip.c:715 eelf64btsmip_fbsd.c:715 eelf64ltsmip.c:715
-#: eelf64ltsmip_fbsd.c:715
+#: eelf32b4300.c:717 eelf32bmip.c:717 eelf32bmipn32.c:731 eelf32bsmip.c:731
+#: eelf32btsmip.c:717 eelf32btsmip_fbsd.c:717 eelf32btsmipn32.c:717
+#: eelf32btsmipn32_fbsd.c:717 eelf32ebmip.c:717 eelf32ebmipvxworks.c:756
+#: eelf32elmip.c:717 eelf32elmipvxworks.c:756 eelf32l4300.c:717
+#: eelf32lmip.c:717 eelf32lr5900.c:576 eelf32lr5900n32.c:575 eelf32lsmip.c:717
+#: eelf32ltsmip.c:717 eelf32ltsmip_fbsd.c:717 eelf32ltsmipn32.c:717
+#: eelf32ltsmipn32_fbsd.c:717 eelf32mipswindiss.c:550 eelf64bmip.c:731
+#: eelf64btsmip.c:717 eelf64btsmip_fbsd.c:717 eelf64ltsmip.c:717
+#: eelf64ltsmip_fbsd.c:717 eelf_mipsel_haiku.c:717
#, c-format
msgid ""
" --no-compact-branches Generate delay slot branches/jumps for MIPS "
"R6\n"
msgstr ""
-#: eelf32bfin.c:454 eelf32bfinfd.c:479
+#: eelf32bfin.c:456 eelf32bfinfd.c:481
#, c-format
msgid " --code-in-l1 Put code in L1\n"
msgstr ""
-#: eelf32bfin.c:456 eelf32bfinfd.c:481
+#: eelf32bfin.c:458 eelf32bfinfd.c:483
#, c-format
msgid " --data-in-l1 Put data in L1\n"
msgstr ""
@@ -5196,181 +5252,187 @@ msgid "%X%P: %pB: can not create runtime reloc information: %s\n"
msgstr ""
#: eelf32lppc.c:96 eelf32lppclinux.c:96 eelf32lppcnto.c:96 eelf32lppcsim.c:96
-#: eelf32ppc.c:96 eelf32ppc_fbsd.c:96 eelf32ppclinux.c:96 eelf32ppcnto.c:96
-#: eelf32ppcsim.c:96 eelf32ppcwindiss.c:96
+#: eelf32ppc.c:96 eelf32ppc_fbsd.c:96 eelf32ppchaiku.c:96 eelf32ppclinux.c:96
+#: eelf32ppcnto.c:96 eelf32ppcsim.c:96 eelf32ppcwindiss.c:96
msgid "%X%P: select_plt_layout problem %E\n"
msgstr ""
#: eelf32lppc.c:160 eelf32lppclinux.c:160 eelf32lppcnto.c:160
#: eelf32lppcsim.c:160 eelf32ppc.c:160 eelf32ppc_fbsd.c:160
-#: eelf32ppclinux.c:160 eelf32ppcnto.c:160 eelf32ppcsim.c:160
-#: eelf32ppcvxworks.c:105 eelf32ppcwindiss.c:160 eelf64lppc.c:321
-#: eelf64lppc_fbsd.c:321 eelf64ppc.c:321 eelf64ppc_fbsd.c:321
+#: eelf32ppchaiku.c:160 eelf32ppclinux.c:160 eelf32ppcnto.c:160
+#: eelf32ppcsim.c:160 eelf32ppcvxworks.c:105 eelf32ppcwindiss.c:160
+#: eelf64lppc.c:321 eelf64lppc_fbsd.c:321 eelf64ppc.c:321 eelf64ppc_fbsd.c:321
msgid "%X%P: inline PLT: %E\n"
msgstr ""
#: eelf32lppc.c:168 eelf32lppclinux.c:168 eelf32lppcnto.c:168
#: eelf32lppcsim.c:168 eelf32ppc.c:168 eelf32ppc_fbsd.c:168
-#: eelf32ppclinux.c:168 eelf32ppcnto.c:168 eelf32ppcsim.c:168
-#: eelf32ppcvxworks.c:113 eelf32ppcwindiss.c:168 eelf64lppc.c:325
-#: eelf64lppc.c:344 eelf64lppc_fbsd.c:325 eelf64lppc_fbsd.c:344 eelf64ppc.c:325
-#: eelf64ppc.c:344 eelf64ppc_fbsd.c:325 eelf64ppc_fbsd.c:344
+#: eelf32ppchaiku.c:168 eelf32ppclinux.c:168 eelf32ppcnto.c:168
+#: eelf32ppcsim.c:168 eelf32ppcvxworks.c:113 eelf32ppcwindiss.c:168
+#: eelf64lppc.c:325 eelf64lppc.c:344 eelf64lppc_fbsd.c:325
+#: eelf64lppc_fbsd.c:344 eelf64ppc.c:325 eelf64ppc.c:344 eelf64ppc_fbsd.c:325
+#: eelf64ppc_fbsd.c:344
msgid "%X%P: TLS problem %E\n"
msgstr ""
#: eelf32lppc.c:255 eelf32lppclinux.c:255 eelf32lppcnto.c:255
#: eelf32lppcsim.c:255 eelf32ppc.c:255 eelf32ppc_fbsd.c:255
-#: eelf32ppclinux.c:255 eelf32ppcnto.c:255 eelf32ppcsim.c:255
-#: eelf32ppcvxworks.c:200 eelf32ppcwindiss.c:255
+#: eelf32ppchaiku.c:255 eelf32ppclinux.c:255 eelf32ppcnto.c:255
+#: eelf32ppcsim.c:255 eelf32ppcvxworks.c:200 eelf32ppcwindiss.c:255
msgid "%X%P: ppc_finish_symbols problem %E\n"
msgstr ""
-#: eelf32lppc.c:756 eelf32lppclinux.c:756 eelf32lppcnto.c:756
-#: eelf32lppcsim.c:756 eelf32ppc.c:756 eelf32ppc_fbsd.c:756
-#: eelf32ppclinux.c:756 eelf32ppcnto.c:756 eelf32ppcsim.c:756
-#: eelf32ppcvxworks.c:730 eelf32ppcwindiss.c:756 eelf64lppc.c:1206
-#: eelf64lppc_fbsd.c:1206 eelf64ppc.c:1206 eelf64ppc_fbsd.c:1206
+#: eelf32lppc.c:758 eelf32lppclinux.c:758 eelf32lppcnto.c:758
+#: eelf32lppcsim.c:758 eelf32ppc.c:758 eelf32ppc_fbsd.c:758
+#: eelf32ppchaiku.c:758 eelf32ppclinux.c:758 eelf32ppcnto.c:758
+#: eelf32ppcsim.c:758 eelf32ppcvxworks.c:732 eelf32ppcwindiss.c:758
+#: eelf64lppc.c:1213 eelf64lppc_fbsd.c:1213 eelf64ppc.c:1213
+#: eelf64ppc_fbsd.c:1213
msgid "%F%P: invalid --plt-align `%s'\n"
msgstr ""
-#: eelf32lppc.c:789 eelf32lppclinux.c:789 eelf32lppcnto.c:789
-#: eelf32lppcsim.c:789 eelf32ppc.c:789 eelf32ppc_fbsd.c:789
-#: eelf32ppclinux.c:789 eelf32ppcnto.c:789 eelf32ppcsim.c:789
-#: eelf32ppcvxworks.c:763 eelf32ppcwindiss.c:789
+#: eelf32lppc.c:791 eelf32lppclinux.c:791 eelf32lppcnto.c:791
+#: eelf32lppcsim.c:791 eelf32ppc.c:791 eelf32ppc_fbsd.c:791
+#: eelf32ppchaiku.c:791 eelf32ppclinux.c:791 eelf32ppcnto.c:791
+#: eelf32ppcsim.c:791 eelf32ppcvxworks.c:765 eelf32ppcwindiss.c:791
msgid "%F%P: invalid pagesize `%s'\n"
msgstr ""
-#: eelf32lppc.c:819 eelf32lppclinux.c:819 eelf32lppcnto.c:819
-#: eelf32lppcsim.c:819 eelf32ppc.c:819 eelf32ppc_fbsd.c:819
-#: eelf32ppclinux.c:819 eelf32ppcnto.c:819 eelf32ppcsim.c:819
-#: eelf32ppcvxworks.c:797 eelf32ppcwindiss.c:819 eelf64lppc.c:1386
-#: eelf64lppc_fbsd.c:1386 eelf64ppc.c:1386 eelf64ppc_fbsd.c:1386
+#: eelf32lppc.c:821 eelf32lppclinux.c:821 eelf32lppcnto.c:821
+#: eelf32lppcsim.c:821 eelf32ppc.c:821 eelf32ppc_fbsd.c:821
+#: eelf32ppchaiku.c:821 eelf32ppclinux.c:821 eelf32ppcnto.c:821
+#: eelf32ppcsim.c:821 eelf32ppcvxworks.c:799 eelf32ppcwindiss.c:821
+#: eelf64lppc.c:1398 eelf64lppc_fbsd.c:1398 eelf64ppc.c:1398
+#: eelf64ppc_fbsd.c:1398
#, c-format
msgid " --emit-stub-syms Label linker stubs with a symbol\n"
msgstr ""
-#: eelf32lppc.c:822 eelf32lppclinux.c:822 eelf32lppcnto.c:822
-#: eelf32lppcsim.c:822 eelf32ppc.c:822 eelf32ppc_fbsd.c:822
-#: eelf32ppclinux.c:822 eelf32ppcnto.c:822 eelf32ppcsim.c:822
-#: eelf32ppcvxworks.c:800 eelf32ppcwindiss.c:822 eelf64lppc.c:1389
-#: eelf64lppc_fbsd.c:1389 eelf64ppc.c:1389 eelf64ppc_fbsd.c:1389
+#: eelf32lppc.c:824 eelf32lppclinux.c:824 eelf32lppcnto.c:824
+#: eelf32lppcsim.c:824 eelf32ppc.c:824 eelf32ppc_fbsd.c:824
+#: eelf32ppchaiku.c:824 eelf32ppclinux.c:824 eelf32ppcnto.c:824
+#: eelf32ppcsim.c:824 eelf32ppcvxworks.c:802 eelf32ppcwindiss.c:824
+#: eelf64lppc.c:1401 eelf64lppc_fbsd.c:1401 eelf64ppc.c:1401
+#: eelf64ppc_fbsd.c:1401
#, c-format
msgid " --no-emit-stub-syms Don't label linker stubs with a symbol\n"
msgstr ""
-#: eelf32lppc.c:825 eelf32lppclinux.c:825 eelf32lppcnto.c:825
-#: eelf32lppcsim.c:825 eelf32ppc.c:825 eelf32ppc_fbsd.c:825
-#: eelf32ppclinux.c:825 eelf32ppcnto.c:825 eelf32ppcsim.c:825
-#: eelf32ppcvxworks.c:803 eelf32ppcwindiss.c:825 eelf64lppc.c:1409
-#: eelf64lppc_fbsd.c:1409 eelf64ppc.c:1409 eelf64ppc_fbsd.c:1409
+#: eelf32lppc.c:827 eelf32lppclinux.c:827 eelf32lppcnto.c:827
+#: eelf32lppcsim.c:827 eelf32ppc.c:827 eelf32ppc_fbsd.c:827
+#: eelf32ppchaiku.c:827 eelf32ppclinux.c:827 eelf32ppcnto.c:827
+#: eelf32ppcsim.c:827 eelf32ppcvxworks.c:805 eelf32ppcwindiss.c:827
+#: eelf64lppc.c:1421 eelf64lppc_fbsd.c:1421 eelf64ppc.c:1421
+#: eelf64ppc_fbsd.c:1421
#, c-format
msgid " --no-tls-optimize Don't try to optimize TLS accesses\n"
msgstr ""
-#: eelf32lppc.c:828 eelf32lppclinux.c:828 eelf32lppcnto.c:828
-#: eelf32lppcsim.c:828 eelf32ppc.c:828 eelf32ppc_fbsd.c:828
-#: eelf32ppclinux.c:828 eelf32ppcnto.c:828 eelf32ppcsim.c:828
-#: eelf32ppcvxworks.c:806 eelf32ppcwindiss.c:828 eelf64lppc.c:1415
-#: eelf64lppc_fbsd.c:1415 eelf64ppc.c:1415 eelf64ppc_fbsd.c:1415
+#: eelf32lppc.c:830 eelf32lppclinux.c:830 eelf32lppcnto.c:830
+#: eelf32lppcsim.c:830 eelf32ppc.c:830 eelf32ppc_fbsd.c:830
+#: eelf32ppchaiku.c:830 eelf32ppclinux.c:830 eelf32ppcnto.c:830
+#: eelf32ppcsim.c:830 eelf32ppcvxworks.c:808 eelf32ppcwindiss.c:830
+#: eelf64lppc.c:1427 eelf64lppc_fbsd.c:1427 eelf64ppc.c:1427
+#: eelf64ppc_fbsd.c:1427
#, c-format
msgid " --no-tls-get-addr-optimize Don't use a special __tls_get_addr call\n"
msgstr ""
-#: eelf32lppc.c:831 eelf32lppclinux.c:831 eelf32lppcnto.c:831
-#: eelf32lppcsim.c:831 eelf32ppc.c:831 eelf32ppc_fbsd.c:831
-#: eelf32ppclinux.c:831 eelf32ppcnto.c:831 eelf32ppcsim.c:831
-#: eelf32ppcwindiss.c:831
+#: eelf32lppc.c:833 eelf32lppclinux.c:833 eelf32lppcnto.c:833
+#: eelf32lppcsim.c:833 eelf32ppc.c:833 eelf32ppc_fbsd.c:833
+#: eelf32ppchaiku.c:833 eelf32ppclinux.c:833 eelf32ppcnto.c:833
+#: eelf32ppcsim.c:833 eelf32ppcwindiss.c:833
#, c-format
msgid " --secure-plt Use new-style PLT if possible\n"
msgstr ""
-#: eelf32lppc.c:834 eelf32lppclinux.c:834 eelf32lppcnto.c:834
-#: eelf32lppcsim.c:834 eelf32ppc.c:834 eelf32ppc_fbsd.c:834
-#: eelf32ppclinux.c:834 eelf32ppcnto.c:834 eelf32ppcsim.c:834
-#: eelf32ppcwindiss.c:834
+#: eelf32lppc.c:836 eelf32lppclinux.c:836 eelf32lppcnto.c:836
+#: eelf32lppcsim.c:836 eelf32ppc.c:836 eelf32ppc_fbsd.c:836
+#: eelf32ppchaiku.c:836 eelf32ppclinux.c:836 eelf32ppcnto.c:836
+#: eelf32ppcsim.c:836 eelf32ppcwindiss.c:836
#, c-format
msgid " --bss-plt Force old-style BSS PLT\n"
msgstr ""
-#: eelf32lppc.c:837 eelf32lppclinux.c:837 eelf32lppcnto.c:837
-#: eelf32lppcsim.c:837 eelf32ppc.c:837 eelf32ppc_fbsd.c:837
-#: eelf32ppclinux.c:837 eelf32ppcnto.c:837 eelf32ppcsim.c:837
-#: eelf32ppcwindiss.c:837
+#: eelf32lppc.c:839 eelf32lppclinux.c:839 eelf32lppcnto.c:839
+#: eelf32lppcsim.c:839 eelf32ppc.c:839 eelf32ppc_fbsd.c:839
+#: eelf32ppchaiku.c:839 eelf32ppclinux.c:839 eelf32ppcnto.c:839
+#: eelf32ppcsim.c:839 eelf32ppcwindiss.c:839
#, c-format
msgid " --plt-align Align PLT call stubs to fit cache lines\n"
msgstr ""
-#: eelf32lppc.c:840 eelf32lppclinux.c:840 eelf32lppcnto.c:840
-#: eelf32lppcsim.c:840 eelf32ppc.c:840 eelf32ppc_fbsd.c:840
-#: eelf32ppclinux.c:840 eelf32ppcnto.c:840 eelf32ppcsim.c:840
-#: eelf32ppcwindiss.c:840 eelf64lppc.c:1368 eelf64lppc_fbsd.c:1368
-#: eelf64ppc.c:1368 eelf64ppc_fbsd.c:1368
+#: eelf32lppc.c:842 eelf32lppclinux.c:842 eelf32lppcnto.c:842
+#: eelf32lppcsim.c:842 eelf32ppc.c:842 eelf32ppc_fbsd.c:842
+#: eelf32ppchaiku.c:842 eelf32ppclinux.c:842 eelf32ppcnto.c:842
+#: eelf32ppcsim.c:842 eelf32ppcwindiss.c:842 eelf64lppc.c:1380
+#: eelf64lppc_fbsd.c:1380 eelf64ppc.c:1380 eelf64ppc_fbsd.c:1380
#, c-format
msgid " --no-plt-align Dont't align individual PLT call stubs\n"
msgstr ""
-#: eelf32lppc.c:843 eelf32lppclinux.c:843 eelf32lppcnto.c:843
-#: eelf32lppcsim.c:843 eelf32ppc.c:843 eelf32ppc_fbsd.c:843
-#: eelf32ppclinux.c:843 eelf32ppcnto.c:843 eelf32ppcsim.c:843
-#: eelf32ppcwindiss.c:843 eelf64lppc.c:1427 eelf64lppc_fbsd.c:1427
-#: eelf64ppc.c:1427 eelf64ppc_fbsd.c:1427
+#: eelf32lppc.c:845 eelf32lppclinux.c:845 eelf32lppcnto.c:845
+#: eelf32lppcsim.c:845 eelf32ppc.c:845 eelf32ppc_fbsd.c:845
+#: eelf32ppchaiku.c:845 eelf32ppclinux.c:845 eelf32ppcnto.c:845
+#: eelf32ppcsim.c:845 eelf32ppcwindiss.c:845 eelf64lppc.c:1439
+#: eelf64lppc_fbsd.c:1439 eelf64ppc.c:1439 eelf64ppc_fbsd.c:1439
#, c-format
msgid ""
" --no-inline-optimize Don't convert inline PLT to direct calls\n"
msgstr ""
-#: eelf32lppc.c:846 eelf32lppclinux.c:846 eelf32lppcnto.c:846
-#: eelf32lppcsim.c:846 eelf32ppc.c:846 eelf32ppc_fbsd.c:846
-#: eelf32ppclinux.c:846 eelf32ppcnto.c:846 eelf32ppcsim.c:846
-#: eelf32ppcwindiss.c:846
+#: eelf32lppc.c:848 eelf32lppclinux.c:848 eelf32lppcnto.c:848
+#: eelf32lppcsim.c:848 eelf32ppc.c:848 eelf32ppc_fbsd.c:848
+#: eelf32ppchaiku.c:848 eelf32ppclinux.c:848 eelf32ppcnto.c:848
+#: eelf32ppcsim.c:848 eelf32ppcwindiss.c:848
#, c-format
msgid " --sdata-got Force GOT location just before .sdata\n"
msgstr ""
-#: eelf32lppc.c:849 eelf32lppclinux.c:849 eelf32lppcnto.c:849
-#: eelf32lppcsim.c:849 eelf32ppc.c:849 eelf32ppc_fbsd.c:849
-#: eelf32ppclinux.c:849 eelf32ppcnto.c:849 eelf32ppcsim.c:849
-#: eelf32ppcvxworks.c:809 eelf32ppcwindiss.c:849
+#: eelf32lppc.c:851 eelf32lppclinux.c:851 eelf32lppcnto.c:851
+#: eelf32lppcsim.c:851 eelf32ppc.c:851 eelf32ppc_fbsd.c:851
+#: eelf32ppchaiku.c:851 eelf32ppclinux.c:851 eelf32ppcnto.c:851
+#: eelf32ppcsim.c:851 eelf32ppcvxworks.c:811 eelf32ppcwindiss.c:851
#, c-format
msgid ""
" --ppc476-workaround [=pagesize]\n"
" Avoid a cache bug on ppc476\n"
msgstr ""
-#: eelf32lppc.c:853 eelf32lppclinux.c:853 eelf32lppcnto.c:853
-#: eelf32lppcsim.c:853 eelf32ppc.c:853 eelf32ppc_fbsd.c:853
-#: eelf32ppclinux.c:853 eelf32ppcnto.c:853 eelf32ppcsim.c:853
-#: eelf32ppcvxworks.c:813 eelf32ppcwindiss.c:853
+#: eelf32lppc.c:855 eelf32lppclinux.c:855 eelf32lppcnto.c:855
+#: eelf32lppcsim.c:855 eelf32ppc.c:855 eelf32ppc_fbsd.c:855
+#: eelf32ppchaiku.c:855 eelf32ppclinux.c:855 eelf32ppcnto.c:855
+#: eelf32ppcsim.c:855 eelf32ppcvxworks.c:815 eelf32ppcwindiss.c:855
#, c-format
msgid " --no-ppc476-workaround Disable workaround\n"
msgstr ""
-#: eelf32lppc.c:856 eelf32lppclinux.c:856 eelf32lppcnto.c:856
-#: eelf32lppcsim.c:856 eelf32ppc.c:856 eelf32ppc_fbsd.c:856
-#: eelf32ppclinux.c:856 eelf32ppcnto.c:856 eelf32ppcsim.c:856
-#: eelf32ppcvxworks.c:816 eelf32ppcwindiss.c:856
+#: eelf32lppc.c:858 eelf32lppclinux.c:858 eelf32lppcnto.c:858
+#: eelf32lppcsim.c:858 eelf32ppc.c:858 eelf32ppc_fbsd.c:858
+#: eelf32ppchaiku.c:858 eelf32ppclinux.c:858 eelf32ppcnto.c:858
+#: eelf32ppcsim.c:858 eelf32ppcvxworks.c:818 eelf32ppcwindiss.c:858
#, c-format
msgid " --no-pic-fixup Don't edit non-pic to pic\n"
msgstr ""
-#: eelf32lppc.c:859 eelf32lppclinux.c:859 eelf32lppcnto.c:859
-#: eelf32lppcsim.c:859 eelf32ppc.c:859 eelf32ppc_fbsd.c:859
-#: eelf32ppclinux.c:859 eelf32ppcnto.c:859 eelf32ppcsim.c:859
-#: eelf32ppcvxworks.c:819 eelf32ppcwindiss.c:859
+#: eelf32lppc.c:861 eelf32lppclinux.c:861 eelf32lppcnto.c:861
+#: eelf32lppcsim.c:861 eelf32ppc.c:861 eelf32ppc_fbsd.c:861
+#: eelf32ppchaiku.c:861 eelf32ppclinux.c:861 eelf32ppcnto.c:861
+#: eelf32ppcsim.c:861 eelf32ppcvxworks.c:821 eelf32ppcwindiss.c:861
#, c-format
msgid ""
" --vle-reloc-fixup Correct old object file 16A/16D relocation\n"
msgstr ""
-#: eelf32mcore.c:304
+#: eelf32mcore.c:306
#, c-format
msgid ""
" --base_file <basefile> Generate a base file for relocatable DLLs\n"
msgstr ""
-#: eelf32metag.c:717 eelf64lppc.c:1343 eelf64lppc_fbsd.c:1343 eelf64ppc.c:1343
-#: eelf64ppc_fbsd.c:1343 ehppaelf.c:577 ehppalinux.c:759 ehppanbsd.c:759
-#: ehppaobsd.c:759
+#: eelf32metag.c:719 eelf64lppc.c:1355 eelf64lppc_fbsd.c:1355 eelf64ppc.c:1355
+#: eelf64ppc_fbsd.c:1355 ehppaelf.c:579 ehppalinux.c:761 ehppanbsd.c:761
+#: ehppaobsd.c:761
#, c-format
msgid ""
" --stub-group-size=N Maximum size of a group of input sections "
@@ -5387,28 +5449,28 @@ msgid ""
" choose suitable defaults.\n"
msgstr ""
-#: eelf32rx.c:336
+#: eelf32rx.c:338
#, c-format
msgid ""
" --no-flag-mismatch-warnings Don't warn about objects with incompatible\n"
" endian or dsp settings\n"
msgstr ""
-#: eelf32rx.c:338
+#: eelf32rx.c:340
#, c-format
msgid ""
" --flag-mismatch-warnings Warn about objects with incompatible\n"
" endian, dsp or ABI settings\n"
msgstr ""
-#: eelf32rx.c:340
+#: eelf32rx.c:342
#, c-format
msgid ""
" --ignore-lma Ignore segment LMAs [default]\n"
" (for Renesas Tools compatibility)\n"
msgstr ""
-#: eelf32rx.c:342
+#: eelf32rx.c:344
#, c-format
msgid " --no-ignore-lma Don't ignore segment LMAs\n"
msgstr ""
@@ -5471,20 +5533,20 @@ msgstr ""
msgid "%F%P: Relaxation not supported with --enable-non-contiguous-regions.\n"
msgstr ""
-#: eelf32xtensa.c:2396
+#: eelf32xtensa.c:2398
#, c-format
msgid ""
" --size-opt When relaxing longcalls, prefer size\n"
" optimization over branch target alignment\n"
msgstr ""
-#: eelf32xtensa.c:2399
+#: eelf32xtensa.c:2401
#, c-format
msgid ""
" --abi-windowed Choose windowed ABI for the output object\n"
msgstr ""
-#: eelf32xtensa.c:2401
+#: eelf32xtensa.c:2403
#, c-format
msgid " --abi-call0 Choose call0 ABI for the output object\n"
msgstr ""
@@ -5493,7 +5555,7 @@ msgstr ""
msgid "%F%P: %pB: Instruction sets of object files incompatible\n"
msgstr ""
-#: eelf64_ia64.c:490 eelf64_ia64_fbsd.c:490
+#: eelf64_ia64.c:492 eelf64_ia64_fbsd.c:492
#, c-format
msgid ""
" --itanium Generate code for Intel Itanium processor\n"
@@ -5504,13 +5566,13 @@ msgstr ""
msgid "%F%P: can not init BFD: %E\n"
msgstr ""
-#: eelf64_s390.c:533
+#: eelf64_s390.c:535
#, c-format
msgid ""
" --s390-pgste Tell the kernel to allocate 4k page tables\n"
msgstr ""
-#: eelf64alpha.c:562 eelf64alpha_fbsd.c:562 eelf64alpha_nbsd.c:562
+#: eelf64alpha.c:564 eelf64alpha_fbsd.c:564 eelf64alpha_nbsd.c:564
#, c-format
msgid ""
" --taso Load executable in the lower 31-bit "
@@ -5518,12 +5580,12 @@ msgid ""
" virtual address range\n"
msgstr ""
-#: eelf64alpha.c:565 eelf64alpha_fbsd.c:565 eelf64alpha_nbsd.c:565
+#: eelf64alpha.c:567 eelf64alpha_fbsd.c:567 eelf64alpha_nbsd.c:567
#, c-format
msgid " --secureplt Force PLT in text segment\n"
msgstr ""
-#: eelf64alpha.c:567 eelf64alpha_fbsd.c:567 eelf64alpha_nbsd.c:567
+#: eelf64alpha.c:569 eelf64alpha_fbsd.c:569 eelf64alpha_nbsd.c:569
#, c-format
msgid " --no-secureplt Force PLT in data segment\n"
msgstr ""
@@ -5542,76 +5604,76 @@ msgstr ""
msgid "%P: .init/.fini fragments use differing TOC pointers\n"
msgstr ""
-#: eelf64lppc.c:1235 eelf64lppc_fbsd.c:1235 eelf64ppc.c:1235
-#: eelf64ppc_fbsd.c:1235
+#: eelf64lppc.c:1242 eelf64lppc_fbsd.c:1242 eelf64ppc.c:1242
+#: eelf64ppc_fbsd.c:1242
msgid "%F%P: invalid --power10-stubs argument `%s'\n"
msgstr ""
-#: eelf64lppc.c:1353 eelf64ppc.c:1353
+#: eelf64lppc.c:1365 eelf64ppc.c:1365
#, c-format
msgid ""
" --plt-static-chain PLT call stubs should load r11 (default)\n"
msgstr ""
-#: eelf64lppc.c:1356 eelf64ppc.c:1356
+#: eelf64lppc.c:1368 eelf64ppc.c:1368
#, c-format
msgid " --no-plt-static-chain PLT call stubs should not load r11\n"
msgstr ""
-#: eelf64lppc.c:1359 eelf64lppc_fbsd.c:1359 eelf64ppc.c:1359
-#: eelf64ppc_fbsd.c:1359
+#: eelf64lppc.c:1371 eelf64lppc_fbsd.c:1371 eelf64ppc.c:1371
+#: eelf64ppc_fbsd.c:1371
#, c-format
msgid " --plt-thread-safe PLT call stubs with load-load barrier\n"
msgstr ""
-#: eelf64lppc.c:1362 eelf64lppc_fbsd.c:1362 eelf64ppc.c:1362
-#: eelf64ppc_fbsd.c:1362
+#: eelf64lppc.c:1374 eelf64lppc_fbsd.c:1374 eelf64ppc.c:1374
+#: eelf64ppc_fbsd.c:1374
#, c-format
msgid " --no-plt-thread-safe PLT call stubs without barrier\n"
msgstr ""
-#: eelf64lppc.c:1365 eelf64lppc_fbsd.c:1365 eelf64ppc.c:1365
-#: eelf64ppc_fbsd.c:1365
+#: eelf64lppc.c:1377 eelf64lppc_fbsd.c:1377 eelf64ppc.c:1377
+#: eelf64ppc_fbsd.c:1377
#, c-format
msgid " --plt-align [=<align>] Align PLT call stubs to fit cache lines\n"
msgstr ""
-#: eelf64lppc.c:1371 eelf64lppc_fbsd.c:1371 eelf64ppc.c:1371
-#: eelf64ppc_fbsd.c:1371
+#: eelf64lppc.c:1383 eelf64lppc_fbsd.c:1383 eelf64ppc.c:1383
+#: eelf64ppc_fbsd.c:1383
#, c-format
msgid ""
" --plt-localentry Optimize calls to ELFv2 localentry:0 "
"functions\n"
msgstr ""
-#: eelf64lppc.c:1374 eelf64lppc_fbsd.c:1374 eelf64ppc.c:1374
-#: eelf64ppc_fbsd.c:1374
+#: eelf64lppc.c:1386 eelf64lppc_fbsd.c:1386 eelf64ppc.c:1386
+#: eelf64ppc_fbsd.c:1386
#, c-format
msgid " --no-plt-localentry Don't optimize ELFv2 calls\n"
msgstr ""
-#: eelf64lppc.c:1377 eelf64lppc_fbsd.c:1377 eelf64ppc.c:1377
-#: eelf64ppc_fbsd.c:1377
+#: eelf64lppc.c:1389 eelf64lppc_fbsd.c:1389 eelf64ppc.c:1389
+#: eelf64ppc_fbsd.c:1389
#, c-format
msgid ""
" --power10-stubs [=auto] Use Power10 PLT call stubs (default auto)\n"
msgstr ""
-#: eelf64lppc.c:1380 eelf64lppc_fbsd.c:1380 eelf64ppc.c:1380
-#: eelf64ppc_fbsd.c:1380
+#: eelf64lppc.c:1392 eelf64lppc_fbsd.c:1392 eelf64ppc.c:1392
+#: eelf64ppc_fbsd.c:1392
#, c-format
msgid ""
" --no-pcrel-optimize Don't perform R_PPC64_PCREL_OPT optimization\n"
msgstr ""
-#: eelf64lppc.c:1383 eelf64lppc_fbsd.c:1383 eelf64ppc.c:1383
-#: eelf64ppc_fbsd.c:1383
+#: eelf64lppc.c:1395 eelf64lppc_fbsd.c:1395 eelf64ppc.c:1395
+#: eelf64ppc_fbsd.c:1395
#, c-format
msgid " --no-power10-stubs Don't use Power10 PLT call stubs\n"
msgstr ""
-#: eelf64lppc.c:1392 eelf64lppc_fbsd.c:1392 eelf64ppc.c:1392
-#: eelf64ppc_fbsd.c:1392
+#: eelf64lppc.c:1404 eelf64lppc_fbsd.c:1404 eelf64ppc.c:1404
+#: eelf64ppc_fbsd.c:1404
#, c-format
msgid ""
" --dotsyms For every version pattern \"foo\" in a "
@@ -5621,15 +5683,15 @@ msgid ""
" descriptor symbols. Defaults to on.\n"
msgstr ""
-#: eelf64lppc.c:1398 eelf64lppc_fbsd.c:1398 eelf64ppc.c:1398
-#: eelf64ppc_fbsd.c:1398
+#: eelf64lppc.c:1410 eelf64lppc_fbsd.c:1410 eelf64ppc.c:1410
+#: eelf64ppc_fbsd.c:1410
#, c-format
msgid ""
" --no-dotsyms Don't do anything special in version scripts\n"
msgstr ""
-#: eelf64lppc.c:1401 eelf64lppc_fbsd.c:1401 eelf64ppc.c:1401
-#: eelf64ppc_fbsd.c:1401
+#: eelf64lppc.c:1413 eelf64lppc_fbsd.c:1413 eelf64ppc.c:1413
+#: eelf64ppc_fbsd.c:1413
#, c-format
msgid ""
" --save-restore-funcs Provide register save and restore routines "
@@ -5638,71 +5700,71 @@ msgid ""
" final link, off for ld -r.\n"
msgstr ""
-#: eelf64lppc.c:1406 eelf64lppc_fbsd.c:1406 eelf64ppc.c:1406
-#: eelf64ppc_fbsd.c:1406
+#: eelf64lppc.c:1418 eelf64lppc_fbsd.c:1418 eelf64ppc.c:1418
+#: eelf64ppc_fbsd.c:1418
#, c-format
msgid " --no-save-restore-funcs Don't provide these routines\n"
msgstr ""
-#: eelf64lppc.c:1412 eelf64lppc_fbsd.c:1412 eelf64ppc.c:1412
-#: eelf64ppc_fbsd.c:1412
+#: eelf64lppc.c:1424 eelf64lppc_fbsd.c:1424 eelf64ppc.c:1424
+#: eelf64ppc_fbsd.c:1424
#, c-format
msgid ""
" --tls-get-addr-optimize Force use of special __tls_get_addr call\n"
msgstr ""
-#: eelf64lppc.c:1418 eelf64lppc_fbsd.c:1418 eelf64ppc.c:1418
-#: eelf64ppc_fbsd.c:1418
+#: eelf64lppc.c:1430 eelf64lppc_fbsd.c:1430 eelf64ppc.c:1430
+#: eelf64ppc_fbsd.c:1430
#, c-format
msgid " --tls-get-addr-regsave Force register save __tls_get_addr stub\n"
msgstr ""
-#: eelf64lppc.c:1421 eelf64lppc_fbsd.c:1421 eelf64ppc.c:1421
-#: eelf64ppc_fbsd.c:1421
+#: eelf64lppc.c:1433 eelf64lppc_fbsd.c:1433 eelf64ppc.c:1433
+#: eelf64ppc_fbsd.c:1433
#, c-format
msgid ""
" --no-tls-get-addr-regsave Don't use register save __tls_get_addr stub\n"
msgstr ""
-#: eelf64lppc.c:1424 eelf64lppc_fbsd.c:1424 eelf64ppc.c:1424
-#: eelf64ppc_fbsd.c:1424
+#: eelf64lppc.c:1436 eelf64lppc_fbsd.c:1436 eelf64ppc.c:1436
+#: eelf64ppc_fbsd.c:1436
#, c-format
msgid " --no-opd-optimize Don't optimize the OPD section\n"
msgstr ""
-#: eelf64lppc.c:1430 eelf64lppc_fbsd.c:1430 eelf64ppc.c:1430
-#: eelf64ppc_fbsd.c:1430
+#: eelf64lppc.c:1442 eelf64lppc_fbsd.c:1442 eelf64ppc.c:1442
+#: eelf64ppc_fbsd.c:1442
#, c-format
msgid " --no-toc-optimize Don't optimize the TOC section\n"
msgstr ""
-#: eelf64lppc.c:1433 eelf64lppc_fbsd.c:1433 eelf64ppc.c:1433
-#: eelf64ppc_fbsd.c:1433
+#: eelf64lppc.c:1445 eelf64lppc_fbsd.c:1445 eelf64ppc.c:1445
+#: eelf64ppc_fbsd.c:1445
#, c-format
msgid ""
" --no-multi-toc Disallow automatic multiple toc sections\n"
msgstr ""
-#: eelf64lppc.c:1436 eelf64lppc_fbsd.c:1436 eelf64ppc.c:1436
-#: eelf64ppc_fbsd.c:1436
+#: eelf64lppc.c:1448 eelf64lppc_fbsd.c:1448 eelf64ppc.c:1448
+#: eelf64ppc_fbsd.c:1448
#, c-format
msgid " --no-toc-sort Don't sort TOC and GOT sections\n"
msgstr ""
-#: eelf64lppc.c:1439 eelf64lppc_fbsd.c:1439 eelf64ppc.c:1439
-#: eelf64ppc_fbsd.c:1439
+#: eelf64lppc.c:1451 eelf64lppc_fbsd.c:1451 eelf64ppc.c:1451
+#: eelf64ppc_fbsd.c:1451
#, c-format
msgid ""
" --non-overlapping-opd Canonicalize .opd, so that there are no\n"
" overlapping .opd entries\n"
msgstr ""
-#: eelf64lppc_fbsd.c:1353 eelf64ppc_fbsd.c:1353
+#: eelf64lppc_fbsd.c:1365 eelf64ppc_fbsd.c:1365
#, c-format
msgid " --plt-static-chain PLT call stubs should load r111\n"
msgstr ""
-#: eelf64lppc_fbsd.c:1356 eelf64ppc_fbsd.c:1356
+#: eelf64lppc_fbsd.c:1368 eelf64ppc_fbsd.c:1368
#, c-format
msgid ""
" --no-plt-static-chain PLT call stubs should not load r11 (default)\n"
@@ -5721,61 +5783,61 @@ msgstr ""
msgid "%F%P: can't finalize linker-allocated global registers\n"
msgstr ""
-#: eelf_x86_64.c:5612 eelf_x86_64_cloudabi.c:577 eelf_x86_64_fbsd.c:577
-#: eelf_x86_64_sol2.c:709
+#: eelf_x86_64.c:5636 eelf_x86_64_cloudabi.c:579 eelf_x86_64_fbsd.c:579
+#: eelf_x86_64_haiku.c:579 eelf_x86_64_sol2.c:711
msgid "%F%P: invalid option for -z lam-u48-report=: %s\n"
msgstr ""
-#: eelf_x86_64.c:5626 eelf_x86_64_cloudabi.c:591 eelf_x86_64_fbsd.c:591
-#: eelf_x86_64_sol2.c:723
+#: eelf_x86_64.c:5650 eelf_x86_64_cloudabi.c:593 eelf_x86_64_fbsd.c:593
+#: eelf_x86_64_haiku.c:593 eelf_x86_64_sol2.c:725
msgid "%F%P: invalid option for -z lam-u57-report=: %s\n"
msgstr ""
-#: eelf_x86_64.c:5647 eelf_x86_64_cloudabi.c:612 eelf_x86_64_fbsd.c:612
-#: eelf_x86_64_sol2.c:744
+#: eelf_x86_64.c:5671 eelf_x86_64_cloudabi.c:614 eelf_x86_64_fbsd.c:614
+#: eelf_x86_64_haiku.c:614 eelf_x86_64_sol2.c:746
msgid "%F%P: invalid option for -z lam-report=: %s\n"
msgstr ""
-#: eelf_x86_64.c:5720 eelf_x86_64_cloudabi.c:685 eelf_x86_64_fbsd.c:685
-#: eelf_x86_64_sol2.c:817
+#: eelf_x86_64.c:5749 eelf_x86_64_cloudabi.c:692 eelf_x86_64_fbsd.c:692
+#: eelf_x86_64_haiku.c:692 eelf_x86_64_sol2.c:824
#, c-format
msgid ""
" -z lam-u48 Generate GNU_PROPERTY_X86_FEATURE_1_LAM_U48\n"
msgstr ""
-#: eelf_x86_64.c:5722 eelf_x86_64_cloudabi.c:687 eelf_x86_64_fbsd.c:687
-#: eelf_x86_64_sol2.c:819
+#: eelf_x86_64.c:5751 eelf_x86_64_cloudabi.c:694 eelf_x86_64_fbsd.c:694
+#: eelf_x86_64_haiku.c:694 eelf_x86_64_sol2.c:826
#, c-format
msgid ""
" -z lam-u48-report=[none|warning|error] (default: none)\n"
" Report missing LAM_U48 property\n"
msgstr ""
-#: eelf_x86_64.c:5725 eelf_x86_64_cloudabi.c:690 eelf_x86_64_fbsd.c:690
-#: eelf_x86_64_sol2.c:822
+#: eelf_x86_64.c:5754 eelf_x86_64_cloudabi.c:697 eelf_x86_64_fbsd.c:697
+#: eelf_x86_64_haiku.c:697 eelf_x86_64_sol2.c:829
#, c-format
msgid ""
" -z lam-u57 Generate GNU_PROPERTY_X86_FEATURE_1_LAM_U57\n"
msgstr ""
-#: eelf_x86_64.c:5727 eelf_x86_64_cloudabi.c:692 eelf_x86_64_fbsd.c:692
-#: eelf_x86_64_sol2.c:824
+#: eelf_x86_64.c:5756 eelf_x86_64_cloudabi.c:699 eelf_x86_64_fbsd.c:699
+#: eelf_x86_64_haiku.c:699 eelf_x86_64_sol2.c:831
#, c-format
msgid ""
" -z lam-u57-report=[none|warning|error] (default: none)\n"
" Report missing LAM_U57 property\n"
msgstr ""
-#: eelf_x86_64.c:5730 eelf_x86_64_cloudabi.c:695 eelf_x86_64_fbsd.c:695
-#: eelf_x86_64_sol2.c:827
+#: eelf_x86_64.c:5759 eelf_x86_64_cloudabi.c:702 eelf_x86_64_fbsd.c:702
+#: eelf_x86_64_haiku.c:702 eelf_x86_64_sol2.c:834
#, c-format
msgid ""
" -z lam-report=[none|warning|error] (default: none)\n"
" Report missing LAM_U48 and LAM_U57 properties\n"
msgstr ""
-#: eelf_x86_64.c:5734 eelf_x86_64_cloudabi.c:699 eelf_x86_64_fbsd.c:699
-#: eelf_x86_64_sol2.c:831
+#: eelf_x86_64.c:5768 eelf_x86_64_cloudabi.c:711 eelf_x86_64_fbsd.c:711
+#: eelf_x86_64_haiku.c:711 eelf_x86_64_sol2.c:843
#, c-format
msgid ""
" -z bndplt Always generate BND prefix in PLT entries\n"
@@ -5785,7 +5847,7 @@ msgstr ""
msgid "%X%P: can not set gp\n"
msgstr ""
-#: ehppaelf.c:573 ehppalinux.c:755 ehppanbsd.c:755 ehppaobsd.c:755
+#: ehppaelf.c:575 ehppalinux.c:757 ehppanbsd.c:757 ehppaobsd.c:757
#, c-format
msgid ""
" --multi-subspace Generate import and export stubs to support\n"
@@ -5908,7 +5970,7 @@ msgstr ""
msgid "%X%P: changing output format whilst linking is not supported\n"
msgstr ""
-#: em68hc11elf.c:570 em68hc11elfb.c:570 em68hc12elf.c:570 em68hc12elfb.c:570
+#: em68hc11elf.c:572 em68hc11elfb.c:572 em68hc12elf.c:572 em68hc12elfb.c:572
#, c-format
msgid ""
" --no-trampoline Do not generate the far trampolines used to "
@@ -5916,7 +5978,7 @@ msgid ""
" a far function using jsr or bsr\n"
msgstr ""
-#: em68hc11elf.c:573 em68hc11elfb.c:573 em68hc12elf.c:573 em68hc12elfb.c:573
+#: em68hc11elf.c:575 em68hc11elfb.c:575 em68hc12elf.c:575 em68hc12elfb.c:575
#, c-format
msgid ""
" --bank-window NAME Specify the name of the memory region "
@@ -5928,11 +5990,11 @@ msgstr ""
msgid "%F%P: %pB: all input objects must be ELF for --embedded-relocs\n"
msgstr ""
-#: em68kelf.c:616 em68kelfnbsd.c:616
+#: em68kelf.c:618 em68kelfnbsd.c:618
msgid "%P: unrecognized --got argument '%s'\n"
msgstr ""
-#: em68kelf.c:629 em68kelfnbsd.c:629
+#: em68kelf.c:631 em68kelfnbsd.c:631
#, c-format
msgid " --got=<type> Specify GOT handling scheme\n"
msgstr ""
@@ -5999,50 +6061,50 @@ msgstr ""
msgid "%F%P: %pB: ABI version of object files mismatched\n"
msgstr ""
-#: ends32belf.c:404 ends32belf16m.c:404 ends32belf_linux.c:537 ends32elf.c:404
-#: ends32elf16m.c:404 ends32elf_linux.c:537
+#: ends32belf.c:406 ends32belf16m.c:406 ends32belf_linux.c:539 ends32elf.c:406
+#: ends32elf16m.c:406 ends32elf_linux.c:539
msgid "%P: --mbaseline is not used anymore\n"
msgstr ""
-#: ends32belf.c:415 ends32belf16m.c:415 ends32belf_linux.c:548 ends32elf.c:415
-#: ends32elf16m.c:415 ends32elf_linux.c:548
+#: ends32belf.c:417 ends32belf16m.c:417 ends32belf_linux.c:550 ends32elf.c:417
+#: ends32elf16m.c:417 ends32elf_linux.c:550
msgid "%P: --relax-[no-]reduce-fp-updat is not used anymore\n"
msgstr ""
-#: ends32belf.c:419 ends32belf16m.c:419 ends32belf_linux.c:552 ends32elf.c:419
-#: ends32elf16m.c:419 ends32elf_linux.c:552
+#: ends32belf.c:421 ends32belf16m.c:421 ends32belf_linux.c:554 ends32elf.c:421
+#: ends32elf16m.c:421 ends32elf_linux.c:554
msgid "%P: missing file for --mexport-symbols\n"
msgstr ""
-#: ends32belf.c:432 ends32belf.c:441 ends32belf16m.c:432 ends32belf16m.c:441
-#: ends32belf_linux.c:565 ends32belf_linux.c:574 ends32elf.c:432
-#: ends32elf.c:441 ends32elf16m.c:432 ends32elf16m.c:441 ends32elf_linux.c:565
-#: ends32elf_linux.c:574
+#: ends32belf.c:434 ends32belf.c:443 ends32belf16m.c:434 ends32belf16m.c:443
+#: ends32belf_linux.c:567 ends32belf_linux.c:576 ends32elf.c:434
+#: ends32elf.c:443 ends32elf16m.c:434 ends32elf16m.c:443 ends32elf_linux.c:567
+#: ends32elf_linux.c:576
msgid "%P: valid arguments to --mhyper-relax=(low|medium|high)\n"
msgstr ""
-#: ends32belf.c:461 ends32belf16m.c:461 ends32belf_linux.c:594 ends32elf.c:461
-#: ends32elf16m.c:461 ends32elf_linux.c:594
+#: ends32belf.c:463 ends32belf16m.c:463 ends32belf_linux.c:596 ends32elf.c:463
+#: ends32elf16m.c:463 ends32elf_linux.c:596
#, c-format
msgid " --m[no-]fp-as-gp Disable/enable fp-as-gp relaxation\n"
msgstr ""
-#: ends32belf.c:463 ends32belf16m.c:463 ends32belf_linux.c:596 ends32elf.c:463
-#: ends32elf16m.c:463 ends32elf_linux.c:596
+#: ends32belf.c:465 ends32belf16m.c:465 ends32belf_linux.c:598 ends32elf.c:465
+#: ends32elf16m.c:465 ends32elf_linux.c:598
#, c-format
msgid " --mexport-symbols=FILE Exporting symbols in linker script\n"
msgstr ""
-#: ends32belf.c:465 ends32belf16m.c:465 ends32belf_linux.c:598 ends32elf.c:465
-#: ends32elf16m.c:465 ends32elf_linux.c:598
+#: ends32belf.c:467 ends32belf16m.c:467 ends32belf_linux.c:600 ends32elf.c:467
+#: ends32elf16m.c:467 ends32elf_linux.c:600
#, c-format
msgid ""
" --mhyper-relax=level Adjust relax level (low|medium|high). default: "
"medium\n"
msgstr ""
-#: ends32belf.c:467 ends32belf16m.c:467 ends32belf_linux.c:600 ends32elf.c:467
-#: ends32elf16m.c:467 ends32elf_linux.c:600
+#: ends32belf.c:469 ends32belf16m.c:469 ends32belf_linux.c:602 ends32elf.c:469
+#: ends32elf16m.c:469 ends32elf_linux.c:602
#, c-format
msgid " --m[no-]tlsdesc-trampoline Disable/enable TLS DESC trampoline\n"
msgstr ""
diff --git a/ld/po/sr.po b/ld/po/sr.po
index 8a6fa285979..3aad5fb7ec7 100644
--- a/ld/po/sr.po
+++ b/ld/po/sr.po
@@ -1,13 +1,13 @@
# Serbian translation of binutils ld.
# Copyright © 2017 Free Software Foundation, Inc.
# This file is distributed under the same license as the binutils package.
-# МироÑлав Ðиколић <miroslavnikolic@rocketmail.com>, 2017–2020.
+# МироÑлав Ðиколић <miroslavnikolic@rocketmail.com>, 2017–2022.
msgid ""
msgstr ""
-"Project-Id-Version: ld-2.34.90\n"
-"Report-Msgid-Bugs-To: bug-binutils@gnu.org\n"
-"POT-Creation-Date: 2020-07-04 10:34+0100\n"
-"PO-Revision-Date: 2020-11-06 07:31+0200\n"
+"Project-Id-Version: ld-2.37.90\n"
+"Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n"
+"POT-Creation-Date: 2022-01-22 12:24+0000\n"
+"PO-Revision-Date: 2022-02-15 20:28+0200\n"
"Last-Translator: МироÑлав Ðиколић <miroslavnikolic@rocketmail.com>\n"
"Language-Team: Serbian <(nothing)>\n"
"Language: sr\n"
@@ -17,19 +17,19 @@ msgstr ""
"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"
"X-Bugs: Report translation errors to the Language-Team address.\n"
-#: ldcref.c:171
+#: ldcref.c:170
msgid "%X%P: bfd_hash_table_init of cref table failed: %E\n"
msgstr "%X%P: „bfd_hash_table_init“ табеле унакрÑне упуте није уÑпело: %E\n"
-#: ldcref.c:177
+#: ldcref.c:176
msgid "%X%P: cref_hash_lookup failed: %E\n"
msgstr "%X%P: „cref_hash_lookup“ није уÑпело: %E\n"
-#: ldcref.c:187
+#: ldcref.c:186
msgid "%X%P: cref alloc failed: %E\n"
msgstr "%X%P: додељивање унакрÑне упуте није уÑпело: %E\n"
-#: ldcref.c:372
+#: ldcref.c:371
#, c-format
msgid ""
"\n"
@@ -40,34 +40,33 @@ msgstr ""
"Табела унакрÑне упуте\n"
"\n"
-#: ldcref.c:373
+#: ldcref.c:372
msgid "Symbol"
msgstr "Симбол"
-#: ldcref.c:381
+#: ldcref.c:380
#, c-format
msgid "File\n"
msgstr "Датотека\n"
-#: ldcref.c:385
+#: ldcref.c:384
#, c-format
msgid "No symbols\n"
msgstr "Ðема Ñимбола\n"
-#: ldcref.c:414 ldcref.c:566
+#: ldcref.c:413 ldcref.c:565
msgid "%P: symbol `%pT' missing from main hash table\n"
msgstr "%P: Ñимбол „%pT“ недоÑтаје у главној хеш табели\n"
-#: ldcref.c:518 ldcref.c:629 ldmain.c:1293 ldmisc.c:335 pe-dll.c:736
-#: pe-dll.c:1314 pe-dll.c:1435 pe-dll.c:1558 earm_wince_pe.c:1437
-#: earm_wince_pe.c:1644 earmpe.c:1437 earmpe.c:1644 ei386pe.c:1437
-#: ei386pe.c:1644 ei386pe_posix.c:1437 ei386pe_posix.c:1644 ei386pep.c:1422
-#: emcorepe.c:1437 emcorepe.c:1644 eppcpe.c:1437 eppcpe.c:1644 eshpe.c:1437
-#: eshpe.c:1644
+#: ldcref.c:517 ldcref.c:628 ldmain.c:1304 ldmisc.c:336 pe-dll.c:738
+#: pe-dll.c:1316 pe-dll.c:1437 pe-dll.c:1563 earm_wince_pe.c:1486
+#: earm_wince_pe.c:1693 earmpe.c:1486 earmpe.c:1693 ei386pe.c:1486
+#: ei386pe.c:1693 ei386pe_posix.c:1486 ei386pe_posix.c:1693 ei386pep.c:1475
+#: emcorepe.c:1486 emcorepe.c:1693 eshpe.c:1486 eshpe.c:1693
msgid "%F%P: %pB: could not read symbols: %E\n"
msgstr "%F%P: %pB: не могу да читам Ñимболе: %E\n"
-#: ldcref.c:691 ldcref.c:698 ldmain.c:1355 ldmain.c:1362
+#: ldcref.c:690 ldcref.c:697 ldmain.c:1366 ldmain.c:1373
msgid "%F%P: %pB: could not read relocs: %E\n"
msgstr "%F%P: %pB: не могу да читам премештања: %E\n"
@@ -75,7 +74,7 @@ msgstr "%F%P: %pB: не могу да читам премештања: %E\n"
#. in OUTSECNAME. This reloc is from a section which is
#. mapped into a section from which references to OUTSECNAME
#. are prohibited. We must report an error.
-#: ldcref.c:725
+#: ldcref.c:724
msgid "%X%P: %C: prohibited cross reference from %s to `%pT' in %s\n"
msgstr "%X%P: %C: забрањена унакрÑна упута из „%s“ у „%pT“ у „%s“\n"
@@ -113,148 +112,159 @@ msgstr ""
msgid "%P: warning: -z dynamic-undefined-weak ignored\n"
msgstr "%P: упозорење: „-z dynamic-undefined-weak“ је занемарено\n"
-#: ldelf.c:98
+#: ldelf.c:91
+msgid "%F%P: common page size (0x%v) > maximum page size (0x%v)\n"
+msgstr "%F%P: уобичајена величина Ñтранице (0x%v) > највећа величина Ñтранице (0x%v)\n"
+
+#: ldelf.c:117
msgid "%F%P: %pB: --just-symbols may not be used on DSO\n"
msgstr "%F%P: %pB: „--just-symbols“ Ñе не могу нкориÑтити на „DSO“\n"
-#: ldelf.c:200
+#: ldelf.c:219
msgid "%P: %pB: bfd_stat failed: %E\n"
msgstr "%P: %pB: „bfd_stat“ није уÑпело: %E\n"
-#: ldelf.c:241
+#: ldelf.c:260
msgid "%P: warning: %s, needed by %pB, may conflict with %s\n"
msgstr "%P: упозорење: „%s“, које је потребно „%pB“-у, Ñе може Ñукобити Ñа „%s“\n"
-#: ldelf.c:261 ldfile.c:133
+#: ldelf.c:280 ldfile.c:133
#, c-format
msgid "attempt to open %s failed\n"
msgstr "покушај отварања „%s“ није уÑпео\n"
-#: ldelf.c:298
+#: ldelf.c:317
msgid "%F%P: %pB: bfd_elf_get_bfd_needed_list failed: %E\n"
msgstr "%F%P: %pB: „bfd_elf_get_bfd_needed_list“ није уÑпело: %E\n"
-#: ldelf.c:346
+#: ldelf.c:365
msgid "%F%P: %pB: bfd_stat failed: %E\n"
msgstr "%F%P: %pB: „bfd_stat“ није уÑпело: %E\n"
-#: ldelf.c:352
+#: ldelf.c:371
#, c-format
msgid "found %s at %s\n"
msgstr "нађох „%s“ на „%s“\n"
-#: ldelf.c:385 ldlang.c:3146 ldlang.c:3160
+#: ldelf.c:404 ldlang.c:3159 ldlang.c:3173
msgid "%F%P: %pB: error adding symbols: %E\n"
msgstr "%F%P: %pB: грешка додавања Ñимбола: %E\n"
#. We only issue an "unrecognised" message in verbose mode
#. as the $<foo> token might be a legitimate component of
#. a path name in the target's file system.
-#: ldelf.c:572
+#: ldelf.c:591
#, c-format
msgid "unrecognised or unsupported token '%s' in search path\n"
msgstr "непозната или неподржана Ñкупина „%s“ у путањи претраге\n"
-#: ldelf.c:1016
+#: ldelf.c:1035
msgid "%F%P: %s: can't open for writing: %E\n"
msgstr "%F%P: %s: не могу да отворим за пиÑање: %E\n"
-#: ldelf.c:1050 ldelf.c:1084
+#: ldelf.c:1081
msgid "%F%P: cannot use executable file '%pB' as input to a link\n"
msgstr "%F%P: не могу да кориÑтим извршну датотеку „%pB“ као улаз за везу\n"
-#: ldelf.c:1111
+#: ldelf.c:1135
msgid "%F%P: compact frame descriptions incompatible with DWARF2 .eh_frame from %pB\n"
msgstr "%F%P: Ñажети опиÑи оквира ниÑу ÑаглаÑни Ñа „DWARF2 .eh_frame“ из „%pB“\n"
-#: ldelf.c:1147
+#: ldelf.c:1171
msgid "%P: warning: cannot create .eh_frame_hdr section, --eh-frame-hdr ignored\n"
msgstr "%P: упозорење: не могу да направим „.eh_frame_hdr“ одељак, „--eh-frame-hdr“ је занемарено\n"
-#: ldelf.c:1203
+#: ldelf.c:1227
#, c-format
msgid "%s needed by %pB\n"
msgstr "„%s“ је потребно за „%pB“\n"
-#: ldelf.c:1312
+#: ldelf.c:1336
msgid "%P: warning: %s, needed by %pB, not found (try using -rpath or -rpath-link)\n"
msgstr "%P: упозорење: „%s“, које је потребно „%pB“-у, ниÑам нашао (покушајте да кориÑтите „-rpath“ или „-rpath-link“)\n"
-#: ldelf.c:1325
+#: ldelf.c:1349
msgid "%F%P: failed to add DT_NEEDED dynamic tag\n"
msgstr "%F%P: ниÑам уÑпео да додам „DT_NEEDED“ динамичку ознаку\n"
-#: ldelf.c:1333
+#: ldelf.c:1357
msgid "%F%P: failed to parse EH frame entries\n"
msgstr "%F%P: ниÑам уÑпео да обрадим уноÑе „EH“ оквира\n"
-#: ldelf.c:1372
+#: ldelf.c:1396
msgid "%P: warning: .note.gnu.build-id section discarded, --build-id ignored\n"
msgstr "%P: упозорење: „.note.gnu.build-id“ одељак је одбачен, „--build-id“ је занемарено\n"
-#: ldelf.c:1418 earm_wince_pe.c:1228 earmpe.c:1228 ei386pe.c:1228
-#: ei386pe_posix.c:1228 ei386pep.c:1231 emcorepe.c:1228 eppcpe.c:1228
-#: eshpe.c:1228
+#: ldelf.c:1445 earm_wince_pe.c:1277 earmpe.c:1277 ei386pe.c:1277
+#: ei386pe_posix.c:1277 ei386pep.c:1284 emcorepe.c:1277 eshpe.c:1277
msgid "%P: warning: unrecognized --build-id style ignored\n"
msgstr "%P: упозорење: непознат „--build-id“ Ñтил је занемарен\n"
-#: ldelf.c:1436
+#: ldelf.c:1464
msgid "%P: warning: cannot create .note.gnu.build-id section, --build-id ignored\n"
msgstr "%P: упозорење: не могу да направим „.note.gnu.build-id“ одељак, „--build-id“ је занемарено\n"
-#: ldelf.c:1468 eaix5ppc.c:1370 eaix5rs6.c:1370 eaixppc.c:1370 eaixrs6.c:1370
-#: eppcmacos.c:1370
+#: ldelf.c:1496 eaix5ppc.c:1408 eaix5rs6.c:1408 eaixppc.c:1408 eaixrs6.c:1408
+#: eppcmacos.c:1408
msgid "%F%P: failed to record assignment to %s: %E\n"
msgstr "%F%P: ниÑам уÑпео да прибележим доделу за „%s“: %E\n"
-#: ldelf.c:1650 ldelf.c:1715 eaix5ppc.c:832 eaix5rs6.c:832 eaixppc.c:832
-#: eaixrs6.c:832 eelf64_ia64_vms.c:209 eppcmacos.c:832
+#: ldelf.c:1675 ldelf.c:1740 eaix5ppc.c:831 eaix5rs6.c:831 eaixppc.c:831
+#: eaixrs6.c:831 eelf64_ia64_vms.c:209 eppcmacos.c:831
msgid "%F%P: failed to set dynamic section sizes: %E\n"
msgstr "%F%P: ниÑам уÑпео да поÑтавим величине динамичког одељка: %E\n"
-#: ldelf.c:1687
+#: ldelf.c:1712
msgid "%F%P: %pB: can't read contents of section .gnu.warning: %E\n"
msgstr "%F%P: %pB: не могу да читам Ñадржаје одељка „.gnu.warning“: %E\n"
-#: ldelfgen.c:55
+#: ldelfgen.c:284
+msgid "%F%P: %pA has both ordered and unordered sections\n"
+msgstr "%F%P: „%pA“ има и Ñређене и неÑређене одељке\n"
+
+#: ldelfgen.c:309
msgid "%F%P: map sections to segments failed: %E\n"
msgstr "%F%P: мапирање одељака у подеоке није уÑпело: %E\n"
-#: ldelfgen.c:75
-msgid "%F%P: looping in map_segments"
-msgstr "%F%P: кружење у подеоцима_мапе"
+#: ldelfgen.c:329
+msgid "%F%P: looping in map_segments\n"
+msgstr "%F%P: кружење у подеоцима_мапе\n"
-#: ldelfgen.c:87
-msgid "%F%P: failed to strip zero-sized dynamic sections"
-msgstr "%F%P: ниÑам уÑпео да покидам динамичке одељке нулте величине"
+#: ldelfgen.c:341
+msgid "%F%P: failed to strip zero-sized dynamic sections\n"
+msgstr "%F%P: ниÑам уÑпео да покидам динамичке одељке нулте величине\n"
-#: ldelfgen.c:191
+#: ldelfgen.c:419
msgid "%F%P: warning: CTF strtab association failed; strings will not be shared: %s\n"
msgstr "%F%P: упозорење: придруживање „CTF“ таб_ниÑке није уÑпело; ниÑке неће бити дељене: %s\n"
-#: ldelfgen.c:197
-msgid "%F%P: warning: CTF symbol shuffling failed; slight space cost: %s\n"
-msgstr "%F%P: упозорење: мешање „CTF“ Ñимбпла није уÑпело; незнатан трошак проÑтора: %s\n"
+#: ldelfgen.c:446
+msgid "%F%P: warning: CTF symbol addition failed; CTF will not be tied to symbols: %s\n"
+msgstr "%F%P: упозорење: придодавање „CTF“ Ñимбола није уÑпело; „CTF“ неће бити везано за Ñимболе: %s\n"
-#: ldemul.c:314
+#: ldelfgen.c:456
+msgid "%F%P: warning: CTF symbol shuffling failed; CTF will not be tied to symbols: %s\n"
+msgstr "%F%P: упозорење: мешање „CTF“ Ñимбола није уÑпело; „CTF“ неће бити везано за Ñимболе: %s\n"
+
+#: ldemul.c:311
#, c-format
msgid "%pS SYSLIB ignored\n"
msgstr "„%pS SYSLIB“ је занемарено\n"
-#: ldemul.c:320
+#: ldemul.c:317
#, c-format
msgid "%pS HLL ignored\n"
msgstr "„%pS HLL“ је занемарено\n"
-#: ldemul.c:340
+#: ldemul.c:337
msgid "%P: unrecognised emulation mode: %s\n"
msgstr "%P: непзнат режим емулације: %s\n"
-#: ldemul.c:341
+#: ldemul.c:338
msgid "Supported emulations: "
msgstr "Подржане емулације: "
-#: ldemul.c:383
+#: ldemul.c:380
#, c-format
msgid " no emulation specific options.\n"
msgstr " нема поÑебних опција емулације.\n"
@@ -267,69 +277,69 @@ msgstr "%F%P: „bfd_hash_allocate“ није уÑпело Ñа ÑтварањÐ
msgid "%F%P: bfd_hash_lookup failed creating symbol %s\n"
msgstr "%F%P: „bfd_hash_lookup“ није уÑпело Ñа Ñтварањем Ñимбола „%s“\n"
-#: ldexp.c:552
+#: ldexp.c:553
msgid "%P: warning: address of `%s' isn't multiple of maximum page size\n"
msgstr "%P: упозорење: адреÑа од „%s“ није множилац највеће величине Ñтранице\n"
-#: ldexp.c:631
+#: ldexp.c:632
msgid "%F%P:%pS %% by zero\n"
msgstr "%F%P:%pS %% нулом\n"
-#: ldexp.c:640
+#: ldexp.c:641
msgid "%F%P:%pS / by zero\n"
msgstr "%F%P:%pS / нулом\n"
-#: ldexp.c:736 ldlang.c:3922 ldmain.c:1260 earm_wince_pe.c:1772 earmpe.c:1772
-#: ei386pe.c:1772 ei386pe_posix.c:1772 ei386pep.c:1646 emcorepe.c:1772
-#: eppcpe.c:1772 eshpe.c:1772
+#: ldexp.c:737 ldlang.c:4011 ldmain.c:1271 earm_wince_pe.c:1804 earmpe.c:1804
+#: ei386pe.c:1804 ei386pe_posix.c:1804 ei386pep.c:1699 emcorepe.c:1804
+#: eshpe.c:1804
msgid "%F%P: bfd_link_hash_lookup failed: %E\n"
msgstr "%F%P: „bfd_link_hash_lookup“ није уÑпело: %E\n"
-#: ldexp.c:749
+#: ldexp.c:750
msgid "%X%P:%pS: unresolvable symbol `%s' referenced in expression\n"
msgstr "%X%P:%pS: нерешиви Ñимбол „%s“ има упуту у изразу\n"
-#: ldexp.c:764
+#: ldexp.c:765
msgid "%F%P:%pS: undefined symbol `%s' referenced in expression\n"
msgstr "%F%P:%pS: недефиниÑани Ñимбол „%s“ има упуту у изразу\n"
-#: ldexp.c:802 ldexp.c:820 ldexp.c:848
+#: ldexp.c:803 ldexp.c:821 ldexp.c:849
msgid "%F%P:%pS: undefined section `%s' referenced in expression\n"
msgstr "%F%P:%pS: недефиниÑани одељак „%s“ има упуту у изразу\n"
-#: ldexp.c:879 ldexp.c:893
+#: ldexp.c:880 ldexp.c:894
msgid "%F%P:%pS: undefined MEMORY region `%s' referenced in expression\n"
msgstr "%F%P:%pS: недефиниÑана облаÑÑ‚ МЕМОРИЈЕ „%s“ има упуту у изразу\n"
-#: ldexp.c:905
+#: ldexp.c:906
msgid "%F%P:%pS: unknown constant `%s' referenced in expression\n"
msgstr "%F%P:%pS непозната конÑтанта „%s“ има упуту у изразу\n"
-#: ldexp.c:1053
+#: ldexp.c:1054
msgid "%F%P:%pS can not PROVIDE assignment to location counter\n"
msgstr "„%F%P:%pS“ не може да ОБЕЗБЕДИ додељивање бројачу меÑта\n"
-#: ldexp.c:1086
+#: ldexp.c:1087
msgid "%F%P:%pS invalid assignment to location counter\n"
msgstr "„%F%P:%pS“ неиÑправно додељивање бројачу меÑта\n"
-#: ldexp.c:1090
+#: ldexp.c:1091
msgid "%F%P:%pS assignment to location counter invalid outside of SECTIONS\n"
msgstr "„%F%P:%pS“ додељивање бројачу меÑта неиÑправно изван ОДЕЉÐКÐ\n"
-#: ldexp.c:1109
+#: ldexp.c:1110
msgid "%F%P:%pS cannot move location counter backwards (from %V to %V)\n"
msgstr "„%F%P:%pS“ не може да помери бројач меÑта уназад (од %V до %V)\n"
-#: ldexp.c:1169
+#: ldexp.c:1170
msgid "%F%P:%s: hash creation failed\n"
msgstr "%F%P:%s: Ñтварање хеша није уÑпело\n"
-#: ldexp.c:1538 ldexp.c:1580 ldexp.c:1640
+#: ldexp.c:1542 ldexp.c:1584 ldexp.c:1644
msgid "%F%P:%pS: nonconstant expression for %s\n"
msgstr "%F%P:%pS: неконÑтантни израз за „%s“\n"
-#: ldexp.c:1666 ldlang.c:1281 ldlang.c:3464 ldlang.c:7848
+#: ldexp.c:1670 ldlang.c:1279 ldlang.c:3493 ldlang.c:8066
msgid "%F%P: can not create hash table: %E\n"
msgstr "%F%P: не могу да направим хеш табелу: %E\n"
@@ -354,7 +364,9 @@ msgstr "%F%P: покушах Ñтатичку везу динамичког об
msgid "%P: cannot find %s (%s): %E\n"
msgstr "%P: не могу да нађем „%s“ (%s): %E\n"
-#: ldfile.c:410
+#. We ignore the return status of the script
+#. and always print the error message.
+#: ldfile.c:410 ldfile.c:494 ldfile.c:498
msgid "%P: cannot find %s: %E\n"
msgstr "%P: не могу да нађем „%s“: %E\n"
@@ -362,61 +374,69 @@ msgstr "%P: не могу да нађем „%s“: %E\n"
msgid "%P: cannot find %s inside %s\n"
msgstr "%P: не могу да нађем „%s“ унутар „%s“\n"
-#: ldfile.c:465
-msgid "%P: cannot find %s\n"
-msgstr "%P: не могу да нађем „%s“\n"
+#: ldfile.c:477 ldmain.c:1451
+msgid "%P: About to run error handling script '%s' with arguments: '%s' '%s'\n"
+msgstr "%P: Покренућу Ñкрипту рада Ñа грешком „%s“ Ñа аргументима: „%s“ „%s“\n"
+
+#: ldfile.c:481 ldmain.c:1455
+msgid "error handling script"
+msgstr "грешка рада Ñа Ñкриптом"
-#: ldfile.c:475
+#: ldfile.c:487 ldmain.c:1461
+msgid "%P: Failed to run error handling script '%s', reason: "
+msgstr "%P: ÐиÑам уÑпео да покренем Ñкрипту рада Ñа грешком „%s“, разлог: "
+
+#: ldfile.c:508
msgid "%P: note to link with %s use -l:%s or rename it to lib%s\n"
msgstr "%P: напомена ка вези Ñа „%s“ кориÑти „-l:%s“ или га преименује у „lib%s“\n"
-#: ldfile.c:503
+#: ldfile.c:537
#, c-format
msgid "cannot find script file %s\n"
msgstr "не могу да нађем датотеку Ñкрипте „%s“\n"
-#: ldfile.c:505
+#: ldfile.c:539
#, c-format
msgid "opened script file %s\n"
msgstr "отворих датотеку Ñкрипте „%s“\n"
-#: ldfile.c:654
+#: ldfile.c:688
msgid "%F%P: error: linker script file '%s' appears multiple times\n"
msgstr "%F%P: грешка: датотека Ñкрипте повезивача „%s“ Ñе јавља више пута\n"
-#: ldfile.c:676
+#: ldfile.c:710
msgid "%F%P: cannot open linker script file %s: %E\n"
msgstr "%F%P: не могу да отворим датотеку Ñкрипте повезивача „%s“: %E\n"
-#: ldfile.c:749
+#: ldfile.c:783
msgid "%F%P: cannot represent machine `%s'\n"
msgstr "%F%P: не могу да предÑтавим машину „%s“\n"
-#: ldlang.c:1365
+#: ldlang.c:1363
msgid "%P:%pS: warning: redeclaration of memory region `%s'\n"
msgstr "%P:%pS: упозорење: поновно деклариÑање облаÑти меморије „%s“\n"
-#: ldlang.c:1371
+#: ldlang.c:1369
msgid "%P:%pS: warning: memory region `%s' not declared\n"
msgstr "%P:%pS: упозорење: облаÑÑ‚ меморије „%s“ није деклариÑана\n"
-#: ldlang.c:1407
+#: ldlang.c:1405
msgid "%F%P:%pS: error: alias for default memory region\n"
msgstr "%F%P:%pS: грешка: Ð°Ð»Ð¸Ñ˜Ð°Ñ Ð·Ð° оÑновну облаÑÑ‚ меморије\n"
-#: ldlang.c:1418
+#: ldlang.c:1416
msgid "%F%P:%pS: error: redefinition of memory region alias `%s'\n"
msgstr "%F%P:%pS: грешка: поновно дефиниÑање алијаÑа облаÑти меморије „%s“\n"
-#: ldlang.c:1425
+#: ldlang.c:1423
msgid "%F%P:%pS: error: memory region `%s' for alias `%s' does not exist\n"
msgstr "%F%P:%pS: грешка: облаÑÑ‚ меморије „%s“ за алијаÑа „%s“ не поÑтоји\n"
-#: ldlang.c:1484 ldlang.c:1523
+#: ldlang.c:1484 ldlang.c:1519
msgid "%F%P: failed creating section `%s': %E\n"
msgstr "%F%P: ниÑам уÑпео да направим одељак „%s“: %E\n"
-#: ldlang.c:2221
+#: ldlang.c:2219
msgid ""
"\n"
"As-needed library included to satisfy reference by file (symbol)\n"
@@ -426,7 +446,7 @@ msgstr ""
"Библиотека као-што-је-потребно је укључена да би задовољила упуту датотеком (Ñимболом)\n"
"\n"
-#: ldlang.c:2288
+#: ldlang.c:2286
#, c-format
msgid ""
"\n"
@@ -437,7 +457,7 @@ msgstr ""
"Одбачени одељци улаза\n"
"\n"
-#: ldlang.c:2296
+#: ldlang.c:2294
msgid ""
"\n"
"Memory Configuration\n"
@@ -447,23 +467,23 @@ msgstr ""
"Подешавање меморије\n"
"\n"
-#: ldlang.c:2298
+#: ldlang.c:2296
msgid "Name"
msgstr "Ðазив"
-#: ldlang.c:2298
+#: ldlang.c:2296
msgid "Origin"
msgstr "Порекло"
-#: ldlang.c:2298
+#: ldlang.c:2296
msgid "Length"
msgstr "Дужина"
-#: ldlang.c:2298
+#: ldlang.c:2296
msgid "Attributes"
msgstr "Ðтрибути"
-#: ldlang.c:2338
+#: ldlang.c:2336
#, c-format
msgid ""
"\n"
@@ -474,224 +494,246 @@ msgstr ""
"Скрипта повезивача и мапа меморије\n"
"\n"
-#: ldlang.c:2391
+#: ldlang.c:2389
msgid "%F%P: illegal use of `%s' section\n"
msgstr "%F%P: неиÑправна употреба одељка „%s“\n"
-#: ldlang.c:2400
+#: ldlang.c:2398
msgid "%F%P: output format %s cannot represent section called %s: %E\n"
msgstr "%F%P: формат излаза „%s“ не може да предÑтавља одељак под називом „%s: %E“\n"
-#: ldlang.c:2567
+#: ldlang.c:2566
msgid "%P:%pS: warning: --enable-non-contiguous-regions makes section `%pA' from '%pB' match /DISCARD/ clause.\n"
msgstr "%P:%pS: упозорење: „--enable-non-contiguous-regions“ чини да одељак „%pA“ из „%pB“ одговара клаузули „/DISCARD/“.\n"
-#: ldlang.c:2600
+#: ldlang.c:2599
msgid "%P:%pS: warning: --enable-non-contiguous-regions may change behaviour for section `%pA' from '%pB' (assigned to %pA, but additional match: %pA)\n"
msgstr "%P:%pS: упозорење: „--enable-non-contiguous-regions“ може променити понашање за одељак „%pA“ из „%pB“ (додељено за „%pA“, али додатно Ñе поклапа Ñа: %pA)\n"
-#: ldlang.c:3050
+#: ldlang.c:3063
msgid "%P: %pB: file not recognized: %E; matching formats:"
msgstr "%P: %pB: датотека није препозната: %E; одговарајући запиÑи:"
-#: ldlang.c:3058
+#: ldlang.c:3071
msgid "%F%P: %pB: file not recognized: %E\n"
msgstr "%F%P: %pB: датотека није препозната: %E\n"
-#: ldlang.c:3131
+#: ldlang.c:3144
msgid "%F%P: %pB: member %pB in archive is not an object\n"
msgstr "%F%P: %pB: члан „%pB“ у архиви није објекат\n"
-#: ldlang.c:3434
+#: ldlang.c:3415
+msgid "%F%P: input file '%s' is the same as output file\n"
+msgstr "%F%P: улазна датотека „%s“ је иÑта као излазна датотека\n"
+
+#: ldlang.c:3463
msgid "%P: warning: could not find any targets that match endianness requirement\n"
msgstr "%P: упозорење: не могу да нађем ниједну мету која одговар захтевима крајњоÑти\n"
-#: ldlang.c:3448
+#: ldlang.c:3477
msgid "%F%P: target %s not found\n"
msgstr "%F%P: ниÑам нашао мету „%s“\n"
-#: ldlang.c:3450
+#: ldlang.c:3479
msgid "%F%P: cannot open output file %s: %E\n"
msgstr "%F%P: не могу да отворим излазну датотеку „%s“: %E\n"
-#: ldlang.c:3456
+#: ldlang.c:3485
msgid "%F%P: %s: can not make object file: %E\n"
msgstr "%F%P: %s: не могу да направим објектну датотеку: %E\n"
-#: ldlang.c:3460
+#: ldlang.c:3489
msgid "%F%P: %s: can not set architecture: %E\n"
msgstr "%F%P: %s: не могу да подеÑим архитектуру: %E\n"
-#: ldlang.c:3640
+#: ldlang.c:3669
msgid "%P: warning: %s contains output sections; did you forget -T?\n"
msgstr "%P: упозорење: „%s“ Ñадржи излазне одељке; да ли Ñте заборавили „-T“?\n"
-#: ldlang.c:3697
-msgid "%P: warning: CTF section in `%pI' not loaded: its types will be discarded: `%s'\n"
-msgstr "%P: упозорење: „CTF“ одељак у „%pI“ није учитан: његове врÑте биће одбачене: „%s“\n"
+#: ldlang.c:3716
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+#: ldlang.c:3716
+msgid "CTF warning"
+msgstr "„CTF“ упозорење"
+
+#: ldlang.c:3716
+msgid "CTF error"
+msgstr "„CTF“ грешка"
#: ldlang.c:3722
+#, c-format
+msgid "CTF error: cannot get CTF errors: `%s'\n"
+msgstr "„CTF“ грешка: не могу да добавим „CTF“ грешке: %s\n"
+
+#: ldlang.c:3756
+msgid "%P: warning: CTF section in %pB not loaded; its types will be discarded: %s\n"
+msgstr "%P: упозорење: „CTF“ одељак у „%pB“ није учитан; његове врÑте биће одбачене: „%s“\n"
+
+#: ldlang.c:3785
msgid "%P: warning: CTF output not created: `%s'\n"
msgstr "%P: упозорење: „CTF“ излаз није направљен: „%s“\n"
-#: ldlang.c:3764
-msgid "%F%P: cannot link with CTF in %pB: %s\n"
-msgstr "%F%P: не могу да повежем Ñа „CTF“ у „%pB: %s\n"
+#: ldlang.c:3828
+msgid "%P: warning: CTF section in %pB cannot be linked: `%s'\n"
+msgstr "%P: упозорење: „CTF“ одељак у „%pB“ Ñе не може повезати: %s\n"
-#: ldlang.c:3774
-msgid "%F%P: CTF linking failed; output will have no CTF section: %s\n"
-msgstr "%F%P: „CTF“ повезивање није уÑпело; излаз неће имати „CTF“ одељак: %s\n"
+#: ldlang.c:3848
+msgid "%P: warning: CTF linking failed; output will have no CTF section: %s\n"
+msgstr "%P: упозорење: „CTF“ повезивање није уÑпело; излаз неће имати „CTF“ одељак: %s\n"
-#: ldlang.c:3830
-msgid "%F%P: CTF section emission failed; output will have no CTF section: %s\n"
-msgstr "%F%P: емитовање „CTF“ одељка није уÑпело; излаз неће имати „CTF“ одељак: %s\n"
+#: ldlang.c:3919
+msgid "%P: warning: CTF section emission failed; output will have no CTF section: %s\n"
+msgstr "%P: емитовање „CTF“ одељка није уÑпело; излаз неће имати „CTF“ одељак: %s\n"
-#: ldlang.c:3868
-msgid "%P: warning: CTF section in `%pI' not linkable: %P was built without support for CTF\n"
-msgstr "%P: упозорење: „CTF“ одељак у „%pI“ није Ñвезив: „%P“ је узграђен без подршке за „CTF“\n"
+#: ldlang.c:3958
+msgid "%P: warning: CTF section in %pB not linkable: %P was built without support for CTF\n"
+msgstr "%P: упозорење: „CTF“ одељак у „%pB“ није Ñвезив: „%P“ је уграђен без подршке за „CTF“\n"
-#: ldlang.c:3992
+#: ldlang.c:4096
msgid "%X%P: required symbol `%s' not defined\n"
msgstr "%X%P: затражен Ñимбол „%s“ није дефиниÑан\n"
-#: ldlang.c:4291
+#: ldlang.c:4394
msgid "warning: INSERT statement in linker script is incompatible with --enable-non-contiguous-regions.\n"
msgstr "warning: „INSERT“ тврдња у Ñкрипти Ñвезача није ÑаглаÑна Ñа „--enable-non-contiguous-regions“.\n"
-#: ldlang.c:4304
+#: ldlang.c:4407
msgid "%F%P: %s not found for insert\n"
msgstr "%F%P: ниÑам нашао „%s“ за уметање\n"
-#: ldlang.c:4544
+#: ldlang.c:4647
msgid " load address 0x%V"
msgstr " адреÑа учитавања 0x%V"
-#: ldlang.c:4777
+#: ldlang.c:4880
msgid "%W (size before relaxing)\n"
msgstr "%W (величина пре одмора)\n"
-#: ldlang.c:4870
+#: ldlang.c:4973
#, c-format
msgid "Address of section %s set to "
msgstr "ÐдреÑа одељка „%s“ је поÑтављена на "
-#: ldlang.c:5068
+#: ldlang.c:5171
#, c-format
msgid "Fail with %d\n"
msgstr "ÐиÑам уÑпео Ñа Ñтањем „%d“\n"
-#: ldlang.c:5281
+#: ldlang.c:5384
msgid "%F%P: Output section '%s' not large enough for the linker-created stubs section '%s'.\n"
msgstr "%F%P: Излазни одељак „%s“ није довољно велик за Ñвезачем направљен одељак окрајка „%s“.\n"
-#: ldlang.c:5286
+#: ldlang.c:5389
msgid "%F%P: Relaxation not supported with --enable-non-contiguous-regions (section '%s' would overflow '%s' after it changed size).\n"
msgstr "%F%P: Опуштање није подржано Ñа „--enable-non-contiguous-regions“ (одељак „%s“ ће преплавити „%s“ након његове промењене величине).\n"
-#: ldlang.c:5395
+#: ldlang.c:5498
msgid "%X%P: section %s VMA wraps around address space\n"
msgstr "%X%P: одељак „%s VMA“ Ñе прелама око проÑтора адреÑе\n"
-#: ldlang.c:5401
+#: ldlang.c:5504
msgid "%X%P: section %s LMA wraps around address space\n"
msgstr "%X%P: одељак „%s LMA“ Ñе прелама око проÑтора адреÑе\n"
-#: ldlang.c:5453
+#: ldlang.c:5556
msgid "%X%P: section %s LMA [%V,%V] overlaps section %s LMA [%V,%V]\n"
msgstr "%X%P: одељак „%s LMA“ [%V,%V] преклапа одељак „%s LMA“ [%V,%V]\n"
-#: ldlang.c:5497
+#: ldlang.c:5600
msgid "%X%P: section %s VMA [%V,%V] overlaps section %s VMA [%V,%V]\n"
msgstr "%X%P: одељак „%s VMA“ [%V,%V] преклапа одељак „%s VMA“ [%V,%V]\n"
-#: ldlang.c:5520
+#: ldlang.c:5623
msgid "%X%P: region `%s' overflowed by %lu byte\n"
msgid_plural "%X%P: region `%s' overflowed by %lu bytes\n"
msgstr[0] "%X%P: облаÑÑ‚ „%s“ је препуњена Ñа %lu бајтом\n"
msgstr[1] "%X%P: облаÑÑ‚ „%s“ је препуњена Ñа %lu бајта\n"
msgstr[2] "%X%P: облаÑÑ‚ „%s“ је препуњена Ñа %lu бајтова\n"
-#: ldlang.c:5545
+#: ldlang.c:5648
msgid "%X%P: address 0x%v of %pB section `%s' is not within region `%s'\n"
msgstr "%X%P: адреÑа 0x%v %pB одељка „%s“ није унутар облаÑти „%s“\n"
-#: ldlang.c:5556
+#: ldlang.c:5659
msgid "%X%P: %pB section `%s' will not fit in region `%s'\n"
msgstr "%X%P: %pB одељак „%s“ неће Ñтати у облаÑÑ‚ „%s“\n"
-#: ldlang.c:5642
+#: ldlang.c:5745
msgid "%F%P:%pS: non constant or forward reference address expression for section %s\n"
msgstr "%F%P:%pS: не конÑтанта или Ñледећи израз адреÑе упуте за одељак „%s“\n"
-#: ldlang.c:5667
+#: ldlang.c:5770
msgid "%X%P: internal error on COFF shared library section %s\n"
msgstr "%X%P: унутрашња грешка на „COFF“ дељеном одељку библиотеке „%s“\n"
-#: ldlang.c:5725
+#: ldlang.c:5828
msgid "%F%P: error: no memory region specified for loadable section `%s'\n"
msgstr "%F%P: грешка: није наведена облаÑÑ‚ меморије за учитљив одељак „%s“\n"
-#: ldlang.c:5729
+#: ldlang.c:5832
msgid "%P: warning: no memory region specified for loadable section `%s'\n"
msgstr "%P: упозорење: није наведена облаÑÑ‚ меморије за учитљив одељак „%s“\n"
-#: ldlang.c:5763
+#: ldlang.c:5866
msgid "%P: warning: start of section %s changed by %ld\n"
msgstr "%P: упозорење: почетак одељка „%s“ је измењен за %lu\n"
-#: ldlang.c:5855
+#: ldlang.c:5958
msgid "%P: warning: dot moved backwards before `%s'\n"
msgstr "%P: упозорење: тачка је померена уназад пре „%s“\n"
-#: ldlang.c:6036
+#: ldlang.c:6139
msgid "%F%P: can't relax section: %E\n"
msgstr "%F%P: не могу да одморим одељак: %E\n"
-#: ldlang.c:6457
+#: ldlang.c:6603
msgid "%F%P: invalid data statement\n"
msgstr "%F%P: неиÑправна изјава података\n"
-#: ldlang.c:6490
+#: ldlang.c:6636
msgid "%F%P: invalid reloc statement\n"
msgstr "%F%P: неиÑправна изјава премештања\n"
-#: ldlang.c:6844
-msgid "%F%P: gc-sections requires either an entry or an undefined symbol\n"
-msgstr "%F%P: гц-одељци захтевају или ÑƒÐ½Ð¾Ñ Ð¸Ð»Ð¸ недефиниÑани Ñимбол\n"
+#: ldlang.c:7053
+msgid "%F%P: --gc-sections requires a defined symbol root specified by -e or -u\n"
+msgstr "%F%P: „--gc-sections“ захтева дефиниÑани корен Ñимбола одређеног Ñа „-e“ или „-u“\n"
-#: ldlang.c:6868
+#: ldlang.c:7078
msgid "%F%P: %s: can't set start address\n"
msgstr "%F%P: %s: не могу да подеÑим почетну адреÑу\n"
-#: ldlang.c:6881 ldlang.c:6899
+#: ldlang.c:7091 ldlang.c:7110
msgid "%F%P: can't set start address\n"
msgstr "%F%P: не могу да подеÑим почетну адреÑу\n"
-#: ldlang.c:6893
+#: ldlang.c:7104
msgid "%P: warning: cannot find entry symbol %s; defaulting to %V\n"
msgstr "%P: упозорење: не могу да нађем улазни Ñимбол „%s“; поÑтављам на оÑновно „%V“\n"
-#: ldlang.c:6904
+#: ldlang.c:7115 ldlang.c:7123
msgid "%P: warning: cannot find entry symbol %s; not setting start address\n"
msgstr "%P: упозорење: не могу да нађем улазни Ñимбол „%s“; не подешавам почетну адреÑу\n"
-#: ldlang.c:6960
+#: ldlang.c:7179
msgid "%F%P: relocatable linking with relocations from format %s (%pB) to format %s (%pB) is not supported\n"
msgstr "%F%P: премеÑтиво повезивање Ñа премештањима из формата „%s“ (%pB) у формат „%s“ (%pB) није подржано\n"
-#: ldlang.c:6970
+#: ldlang.c:7189
msgid "%X%P: %s architecture of input file `%pB' is incompatible with %s output\n"
msgstr "%X%P: „%s“ архитектура улазне датотеке „%pB“ није ÑаглаÑна Ñа излазом „%s“\n"
-#: ldlang.c:6993
+#: ldlang.c:7213
msgid "%X%P: failed to merge target specific data of file %pB\n"
msgstr "%X%P: ниÑма уÑпео да Ñпојим мети Ñпецифичне податке датотеке „%pB“\n"
-#: ldlang.c:7064
+#: ldlang.c:7284
msgid "%F%P: could not define common symbol `%pT': %E\n"
msgstr "%F%P: не могу да дефинишем општи Ñимбол „%pT“: %E\n"
-#: ldlang.c:7076
+#: ldlang.c:7296
msgid ""
"\n"
"Allocating common symbols\n"
@@ -699,7 +741,7 @@ msgstr ""
"\n"
"Додељујем опште Ñимболе\n"
-#: ldlang.c:7077
+#: ldlang.c:7297
msgid ""
"Common symbol size file\n"
"\n"
@@ -707,87 +749,87 @@ msgstr ""
"Општи Ñимбол величина датотека\n"
"\n"
-#: ldlang.c:7151
+#: ldlang.c:7370
msgid "%X%P: error: unplaced orphan section `%pA' from `%pB'\n"
msgstr "%X%P: грешка: није Ñтављен напуштен одељак „%pA“ из „%pB“\n"
-#: ldlang.c:7169
+#: ldlang.c:7388
msgid "%P: warning: orphan section `%pA' from `%pB' being placed in section `%s'\n"
msgstr "%P: упозорење: напуштен одељак „%pA“ из „%pB“ је Ñтављен у одељак „%s“\n"
-#: ldlang.c:7260
+#: ldlang.c:7478
msgid "%F%P: invalid character %c (%d) in flags\n"
msgstr "%F%P: неиÑправан знак „%c“ (%d) у заÑтавицама\n"
-#: ldlang.c:7369
+#: ldlang.c:7587
msgid "%F%P:%pS: error: align with input and explicit align specified\n"
msgstr "%F%P:%pS: грешка: поравнање Ñа улазом и изричитим поравнањем је наведено\n"
-#: ldlang.c:7875
+#: ldlang.c:8102
msgid "%F%P: %s: plugin reported error after all symbols read\n"
msgstr "%F%P: %s: извештена грешка прикључка након читања Ñвих Ñимбола\n"
-#: ldlang.c:8312
+#: ldlang.c:8538
msgid "%F%P: multiple STARTUP files\n"
msgstr "%F%P: неколико ПОЧЕТÐИХ датотека\n"
-#: ldlang.c:8358
+#: ldlang.c:8584
msgid "%X%P:%pS: section has both a load address and a load region\n"
msgstr "%X%P:%pS: одељак има и адреÑу учитавања и облаÑÑ‚ учитавања\n"
-#: ldlang.c:8464
+#: ldlang.c:8690
msgid "%X%P:%pS: PHDRS and FILEHDR are not supported when prior PT_LOAD headers lack them\n"
msgstr "%X%P:%pS: „PHDRS“ и „FILEHDR“ ниÑу подржани када недоÑтају у претходним „PT_LOAD“ заглављима\n"
-#: ldlang.c:8537
+#: ldlang.c:8763
msgid "%F%P: no sections assigned to phdrs\n"
msgstr "%F%P: ниједан одељак није додељен „phdrs“-у\n"
-#: ldlang.c:8575
+#: ldlang.c:8801
msgid "%F%P: bfd_record_phdr failed: %E\n"
msgstr "%F%P: „bfd_record_phdr“ није уÑпело: %E\n"
-#: ldlang.c:8595
+#: ldlang.c:8821
msgid "%X%P: section `%s' assigned to non-existent phdr `%s'\n"
msgstr "%X%P: одељак „%s“ је додељен непоÑтојећем „phdr“-у „%s“\n"
-#: ldlang.c:9018
+#: ldlang.c:9244
msgid "%X%P: unknown language `%s' in version information\n"
msgstr "%X%P: непознат језик „%s“ у подацима о издању\n"
-#: ldlang.c:9163
+#: ldlang.c:9389
msgid "%X%P: anonymous version tag cannot be combined with other version tags\n"
msgstr "%X%P: анонимна ознака издања Ñе не може комбиновати Ñа другим ознакама издања\n"
-#: ldlang.c:9172
+#: ldlang.c:9398
msgid "%X%P: duplicate version tag `%s'\n"
msgstr "%X%P: удвоÑтручена ознака издања „%s“\n"
-#: ldlang.c:9193 ldlang.c:9202 ldlang.c:9220 ldlang.c:9230
+#: ldlang.c:9419 ldlang.c:9428 ldlang.c:9446 ldlang.c:9456
msgid "%X%P: duplicate expression `%s' in version information\n"
msgstr "%X%P: удвоÑтручени израз „%s“ у подацима о издању\n"
-#: ldlang.c:9270
+#: ldlang.c:9496
msgid "%X%P: unable to find version dependency `%s'\n"
msgstr "%X%P: не могу да нађем завиÑноÑÑ‚ издања „%s“\n"
-#: ldlang.c:9293
+#: ldlang.c:9519
msgid "%X%P: unable to read .exports section contents\n"
msgstr "%X%P: не могу да прочитам Ñадржаје одељка „.exports“ (извоза)\n"
-#: ldlang.c:9331
-msgid "%F%P: invalid origin for memory region %s\n"
-msgstr "%F%P: неиÑправно порекло за облаÑÑ‚ меморије „%s“\n"
+#: ldlang.c:9565
+msgid "%P: invalid origin for memory region %s\n"
+msgstr "%P: неиÑправно порекло за облаÑÑ‚ меморије „%s“\n"
-#: ldlang.c:9340
-msgid "%F%P: invalid length for memory region %s\n"
-msgstr "%F%P: неиÑправна дужина за облаÑÑ‚ меморије „%s“\n"
+#: ldlang.c:9577
+msgid "%P: invalid length for memory region %s\n"
+msgstr "%P: неиÑправна дужина за облаÑÑ‚ меморије „%s“\n"
-#: ldlang.c:9451
+#: ldlang.c:9689
msgid "%X%P: unknown feature `%s'\n"
msgstr "%X%P: непозната функција „%s“\n"
-#: ldmain.c:194
+#: ldmain.c:196
msgid "%F%P: cannot open dependency file %s: %E\n"
msgstr "%F%P: не могу да отворим датотеку завиÑноÑти „%s“: %E\n"
@@ -799,90 +841,90 @@ msgstr "%F%P: кобна грешка: „libbfd ABI“ не одговара\n"
msgid "%X%P: can't set BFD default target to `%s': %E\n"
msgstr "%X%P: не могу да поÑтавим оÑновну БФД мету на „%s“: %E\n"
-#: ldmain.c:402
+#: ldmain.c:405
msgid "built in linker script"
msgstr "уграђена Ñкрипта повезивача"
-#: ldmain.c:412
+#: ldmain.c:415
msgid "using external linker script:"
msgstr "кориÑтим Ñпољну Ñкрипту повезивача:"
-#: ldmain.c:414
+#: ldmain.c:417
msgid "using internal linker script:"
msgstr "кориÑтим унутрашњу Ñкрипту повезивача:"
-#: ldmain.c:461
+#: ldmain.c:464
msgid "%F%P: --no-define-common may not be used without -shared\n"
msgstr "%F%P: „--no-define-common“ Ñе не може кориÑтити без „-shared“\n"
-#: ldmain.c:467
+#: ldmain.c:470
msgid "%F%P: no input files\n"
msgstr "%F%P: нема улазних датотека\n"
-#: ldmain.c:471
+#: ldmain.c:474
msgid "%P: mode %s\n"
msgstr "%P: режим „%s“\n"
-#: ldmain.c:487 ends32belf.c:418 ends32belf16m.c:418 ends32belf_linux.c:547
-#: ends32elf.c:418 ends32elf16m.c:418 ends32elf_linux.c:547
+#: ldmain.c:490 ends32belf.c:429 ends32belf16m.c:429 ends32belf_linux.c:562
+#: ends32elf.c:429 ends32elf16m.c:429 ends32elf_linux.c:562
msgid "%F%P: cannot open map file %s: %E\n"
msgstr "%F%P: не могу да отворим датотеку мапе „%s“: %E\n"
-#: ldmain.c:540
+#: ldmain.c:543
msgid "%P: link errors found, deleting executable `%s'\n"
msgstr "%P: нађох грешке везе, бришем извршног „%s“\n"
-#: ldmain.c:549
+#: ldmain.c:552
msgid "%F%P: %pB: final close failed: %E\n"
msgstr "%F%P: %pB: завршно затварање није уÑпело: %E\n"
-#: ldmain.c:576
+#: ldmain.c:579
msgid "%F%P: unable to open for source of copy `%s'\n"
msgstr "%F%P: не могу да отворим за извором умношка „%s“\n"
-#: ldmain.c:579
+#: ldmain.c:582
msgid "%F%P: unable to open for destination of copy `%s'\n"
msgstr "%F%P: не могу да отворим за одредиштем умношка „%s“\n"
-#: ldmain.c:586
+#: ldmain.c:589
msgid "%P: error writing file `%s'\n"
msgstr "%P: грешка пиÑања датотеке „%s“\n"
-#: ldmain.c:591 pe-dll.c:1949
+#: ldmain.c:594 pe-dll.c:1966
#, c-format
msgid "%P: error closing file `%s'\n"
msgstr "%P: грешка затварања датотеке „%s“\n"
-#: ldmain.c:605
+#: ldmain.c:608
#, c-format
msgid "%s: total time in link: %ld.%06ld\n"
msgstr "%s: укупно време у вези: %ld.%06ld\n"
-#: ldmain.c:692
+#: ldmain.c:695
msgid "%F%P: missing argument to -m\n"
msgstr "%F%P: недоÑтаје аргумент за „-m“\n"
-#: ldmain.c:742 ldmain.c:759 ldmain.c:779 ldmain.c:811 pe-dll.c:1395
+#: ldmain.c:749 ldmain.c:766 ldmain.c:786 ldmain.c:818 pe-dll.c:1397
msgid "%F%P: bfd_hash_table_init failed: %E\n"
msgstr "%F%P: „bfd_hash_table_init“ није уÑпело: %E\n"
-#: ldmain.c:746 ldmain.c:763 ldmain.c:783
+#: ldmain.c:753 ldmain.c:770 ldmain.c:790
msgid "%F%P: bfd_hash_lookup failed: %E\n"
msgstr "%F%P: „bfd_hash_lookup“ није уÑпело: %E\n"
-#: ldmain.c:797
+#: ldmain.c:804
msgid "%X%P: error: duplicate retain-symbols-file\n"
msgstr "%X%P: грешка: удвоÑтручено задржи-датотеку-Ñимбола\n"
-#: ldmain.c:841
+#: ldmain.c:848
msgid "%F%P: bfd_hash_lookup for insertion failed: %E\n"
msgstr "%F%P: „bfd_hash_lookup“ за уметање није уÑпело: %E\n"
-#: ldmain.c:846
+#: ldmain.c:853
msgid "%P: `-retain-symbols-file' overrides `-s' and `-S'\n"
msgstr "%P: „-retain-symbols-file“ препиÑује `-s' и „-S“\n"
-#: ldmain.c:962
+#: ldmain.c:969
msgid ""
"Archive member included to satisfy reference by file (symbol)\n"
"\n"
@@ -890,161 +932,165 @@ msgstr ""
"Члан архиве је укључен да би задовољио упуту датотеком (Ñимболом)\n"
"\n"
-#: ldmain.c:1071
+#: ldmain.c:1079
+msgid "%P: %C: warning: multiple definition of `%pT'"
+msgstr "%P: %C: упозорење: вишеÑтрука дефиниција за „%pT“"
+
+#: ldmain.c:1082
msgid "%X%P: %C: multiple definition of `%pT'"
msgstr "%X%P: %C: вишеÑтрука дефиниција за „%pT“"
-#: ldmain.c:1074
+#: ldmain.c:1085
msgid "; %D: first defined here"
msgstr "; %D: прво је дефиниÑано овде"
-#: ldmain.c:1079
+#: ldmain.c:1090
msgid "%P: disabling relaxation; it will not work with multiple definitions\n"
msgstr "%P: иÑкључујем опуштање: неће радити Ñа вишеÑтруким дефиницијама\n"
-#: ldmain.c:1132
+#: ldmain.c:1143
msgid "%P: %pB: warning: definition of `%pT' overriding common from %pB\n"
msgstr "%P: %pB: упозорење: дефиниција за „%pT“ препиÑује опште из „%pB“\n"
-#: ldmain.c:1136
+#: ldmain.c:1147
msgid "%P: %pB: warning: definition of `%pT' overriding common\n"
msgstr "%P: %pB: упозорење: дефиниција за „%pT“ препиÑује опште\n"
-#: ldmain.c:1145
+#: ldmain.c:1156
msgid "%P: %pB: warning: common of `%pT' overridden by definition from %pB\n"
msgstr "%P: %pB: упозорење: опште за „%pT“ је препиÑано дефиницијом из „%pB“\n"
-#: ldmain.c:1149
+#: ldmain.c:1160
msgid "%P: %pB: warning: common of `%pT' overridden by definition\n"
msgstr "%P: %pB: упозорење: опште за „%pT“ је препиÑано дефиницијом\n"
-#: ldmain.c:1158
+#: ldmain.c:1169
msgid "%P: %pB: warning: common of `%pT' overridden by larger common from %pB\n"
msgstr "%P: %pB: упозорење: опште за „%pT“ је препиÑано већим општим из „%pB“\n"
-#: ldmain.c:1162
+#: ldmain.c:1173
msgid "%P: %pB: warning: common of `%pT' overridden by larger common\n"
msgstr "%P: %pB: упозорење: опште за „%pT“ је препиÑано већим општим\n"
-#: ldmain.c:1169
+#: ldmain.c:1180
msgid "%P: %pB: warning: common of `%pT' overriding smaller common from %pB\n"
msgstr "%P: %pB: упозорење: опште за „%pT“ препиÑује мањег општег из „%pB“\n"
-#: ldmain.c:1173
+#: ldmain.c:1184
msgid "%P: %pB: warning: common of `%pT' overriding smaller common\n"
msgstr "%P: %pB: упозорење: опште за „%pT“ препиÑује мањег општег\n"
-#: ldmain.c:1180
+#: ldmain.c:1191
msgid "%P: %pB and %pB: warning: multiple common of `%pT'\n"
msgstr "%P: „%pB“ и „%pB“: упозорење: више општих за „%pT“\n"
-#: ldmain.c:1183
+#: ldmain.c:1194
msgid "%P: %pB: warning: multiple common of `%pT'\n"
msgstr "%P: %pB: упозорење: више општих за „%pT“\n"
-#: ldmain.c:1202 ldmain.c:1238
+#: ldmain.c:1213 ldmain.c:1249
msgid "%P: warning: global constructor %s used\n"
msgstr "%P: упозорење: глобални конÑтруктор „%s“ је коришћен\n"
-#: ldmain.c:1248
+#: ldmain.c:1259
msgid "%F%P: BFD backend error: BFD_RELOC_CTOR unsupported\n"
msgstr "%F%P: грешка БФД позадинца: „BFD_RELOC_CTOR“ није подржано\n"
#. We found a reloc for the symbol we are looking for.
-#: ldmain.c:1320 ldmain.c:1322 ldmain.c:1324 ldmain.c:1332 ldmain.c:1375
+#: ldmain.c:1331 ldmain.c:1333 ldmain.c:1335 ldmain.c:1343 ldmain.c:1386
msgid "warning: "
msgstr "упозорење: "
-#: ldmain.c:1427
+#: ldmain.c:1476
msgid "%X%P: %C: undefined reference to `%pT'\n"
msgstr "%X%P: %C: недефиниÑана упута ка „%pT“\n"
-#: ldmain.c:1430
+#: ldmain.c:1479
msgid "%P: %C: warning: undefined reference to `%pT'\n"
msgstr "%P: %C: упозорење: недефиниÑана упута ка „%pT“\n"
-#: ldmain.c:1436
+#: ldmain.c:1485
msgid "%X%P: %D: more undefined references to `%pT' follow\n"
msgstr "%X%P: %D: још недефиниÑаних упута ка „%pT“ Ñледи\n"
-#: ldmain.c:1439
+#: ldmain.c:1488
msgid "%P: %D: warning: more undefined references to `%pT' follow\n"
msgstr "%P: %D: упозорење: још недефиниÑаних упута ка „%pT“ Ñледи\n"
-#: ldmain.c:1450
+#: ldmain.c:1499
msgid "%X%P: %pB: undefined reference to `%pT'\n"
msgstr "%X%P: %pB: недефиниÑана упута ка „%pT“\n"
-#: ldmain.c:1453
+#: ldmain.c:1502
msgid "%P: %pB: warning: undefined reference to `%pT'\n"
msgstr "%P: %pB: упозорење: недефиниÑана упута ка „%pT“\n"
-#: ldmain.c:1459
+#: ldmain.c:1508
msgid "%X%P: %pB: more undefined references to `%pT' follow\n"
msgstr "%X%P: %pB: још недефиниÑаних упута ка „%pT“ Ñледи\n"
-#: ldmain.c:1462
+#: ldmain.c:1511
msgid "%P: %pB: warning: more undefined references to `%pT' follow\n"
msgstr "%P: %pB: упозорење: још недефиниÑаних упута ка „%pT“ Ñледи\n"
-#: ldmain.c:1499
+#: ldmain.c:1548
msgid " additional relocation overflows omitted from the output\n"
msgstr " додатна превазилажења премештања Ñу изоÑтављена из излаза\n"
-#: ldmain.c:1512
+#: ldmain.c:1561
#, c-format
msgid " relocation truncated to fit: %s against undefined symbol `%pT'"
msgstr " премештање је Ñкраћено да Ñтане: „%s“ наÑпрам недефиниÑаног Ñимбола „%pT“"
-#: ldmain.c:1518
+#: ldmain.c:1567
#, c-format
msgid " relocation truncated to fit: %s against symbol `%pT' defined in %pA section in %pB"
msgstr " премештање је Ñкраћено да Ñтане: „%s“ наÑпрам Ñимбола „%pT“ дефиниÑаног у одељку „%pA“ у „%pB“"
-#: ldmain.c:1531
+#: ldmain.c:1580
#, c-format
msgid " relocation truncated to fit: %s against `%pT'"
msgstr " премештање је Ñкраћено да Ñтане: „%s“ наÑпрам „%pT“"
-#: ldmain.c:1547
+#: ldmain.c:1596
msgid "%X%H: dangerous relocation: %s\n"
msgstr "%X%H: опаÑно премештање: %s\n"
-#: ldmain.c:1561
+#: ldmain.c:1610
msgid "%X%H: reloc refers to symbol `%pT' which is not being output\n"
msgstr "%X%H: премештање упућује на Ñимбол „%pT“ који није био излаз\n"
-#: ldmain.c:1595
+#: ldmain.c:1644
msgid "%P: %pB: reference to %s\n"
msgstr "%P: %pB: упута ка „%s“\n"
-#: ldmain.c:1597
+#: ldmain.c:1646
msgid "%P: %pB: definition of %s\n"
msgstr "%P: %pB: дефиниција за „%s“\n"
-#: ldmisc.c:374
+#: ldmisc.c:375
#, c-format
msgid "%pB: in function `%pT':\n"
msgstr "%pB: у функцији „%pT“:\n"
-#: ldmisc.c:512
+#: ldmisc.c:515
#, c-format
msgid "no symbol"
msgstr "нема Ñимбола"
-#: ldmisc.c:619
+#: ldmisc.c:622
msgid "%F%P: internal error %s %d\n"
msgstr "%F%P: унутрашња грешка „%s“ %d\n"
-#: ldmisc.c:683
+#: ldmisc.c:686
msgid "%P: internal error: aborting at %s:%d in %s\n"
msgstr "%P: унутрашња грешка: прекидам при „%s“: %d у „%s“\n"
-#: ldmisc.c:686
+#: ldmisc.c:689
msgid "%P: internal error: aborting at %s:%d\n"
msgstr "%P: унутрашња грешка: прекидам при „%s“: %d\n"
-#: ldmisc.c:688
+#: ldmisc.c:691
msgid "%F%P: please report this bug\n"
msgstr "%F%P: пријавите ову грешку\n"
@@ -1056,8 +1102,8 @@ msgstr "ГÐУ лд %s\n"
#: ldver.c:42
#, c-format
-msgid "Copyright (C) 2020 Free Software Foundation, Inc.\n"
-msgstr "ÐуторÑка права © 2020 Задужбина Ñлободног Ñофтвера, Доо.\n"
+msgid "Copyright (C) 2022 Free Software Foundation, Inc.\n"
+msgstr "ÐуторÑка права © 2022 Фондација Ñлободног Ñофтвера, Доо.\n"
#: ldver.c:43
#, c-format
@@ -1096,339 +1142,339 @@ msgstr "%8x нешто друго\n"
msgid "%F%P: final link failed: %E\n"
msgstr "%F%P: завршна веза није уÑпела: %E\n"
-#: lexsup.c:103 lexsup.c:288
+#: lexsup.c:105 lexsup.c:290
msgid "KEYWORD"
msgstr "КЉУЧÐРРЕЧ"
-#: lexsup.c:103
+#: lexsup.c:105
msgid "Shared library control for HP/UX compatibility"
msgstr "Управљање дељеном библиотеком за ХП/Ð£Ð˜ÐºÑ ÑаглаÑноÑÑ‚"
-#: lexsup.c:106
+#: lexsup.c:108
msgid "ARCH"
msgstr "ÐРХИТЕКТУРÐ"
-#: lexsup.c:106
+#: lexsup.c:108
msgid "Set architecture"
msgstr "Подешава архитектуру"
-#: lexsup.c:108 lexsup.c:415
+#: lexsup.c:110 lexsup.c:425
msgid "TARGET"
msgstr "МЕТÐ"
-#: lexsup.c:108
+#: lexsup.c:110
msgid "Specify target for following input files"
msgstr "Ðаводи мету за пратеће улазне датотеке"
-#: lexsup.c:111 lexsup.c:117 lexsup.c:174 lexsup.c:178 lexsup.c:214
-#: lexsup.c:227 lexsup.c:229 lexsup.c:433 lexsup.c:500 lexsup.c:513
-#: lexsup.c:517
+#: lexsup.c:113 lexsup.c:119 lexsup.c:176 lexsup.c:180 lexsup.c:216
+#: lexsup.c:229 lexsup.c:231 lexsup.c:447 lexsup.c:516 lexsup.c:529
+#: lexsup.c:533
msgid "FILE"
msgstr "ДÐТОТЕКÐ"
-#: lexsup.c:111
+#: lexsup.c:113
msgid "Read MRI format linker script"
msgstr "Чита МРИ формат Ñкрипте повезивача"
-#: lexsup.c:113
+#: lexsup.c:115
msgid "Force common symbols to be defined"
msgstr "Приморава дефиниÑање општих Ñимбола"
-#: lexsup.c:117
+#: lexsup.c:119
msgid "Write dependency file"
msgstr "Пише датотеку завиÑноÑти"
-#: lexsup.c:120
+#: lexsup.c:122
msgid "Force group members out of groups"
msgstr "ПриÑиљава чланове групе ван група"
-#: lexsup.c:122 lexsup.c:477 lexsup.c:479 lexsup.c:481 lexsup.c:483
-#: lexsup.c:485 lexsup.c:487
+#: lexsup.c:124 lexsup.c:493 lexsup.c:495 lexsup.c:497 lexsup.c:499
+#: lexsup.c:501 lexsup.c:503
msgid "ADDRESS"
msgstr "ÐДРЕСÐ"
-#: lexsup.c:122
+#: lexsup.c:124
msgid "Set start address"
msgstr "Подешава полазну адреÑу"
-#: lexsup.c:124
+#: lexsup.c:126
msgid "Export all dynamic symbols"
msgstr "Извози Ñве динамичке Ñимболе"
-#: lexsup.c:126
+#: lexsup.c:128
msgid "Undo the effect of --export-dynamic"
msgstr "Поништава дејÑтво „--export-dynamic“"
-#: lexsup.c:128
+#: lexsup.c:130
msgid "Enable support of non-contiguous memory regions"
msgstr "Омогућује подршку иÑпрекиданих подручја меморије"
-#: lexsup.c:130
+#: lexsup.c:132
msgid "Enable warnings when --enable-non-contiguous-regions may cause unexpected behaviour"
msgstr "Омогућује упозорења када „--enable-non-contiguous-regions“ може довеÑти до неочекиваног понашања"
-#: lexsup.c:132
+#: lexsup.c:134
msgid "Link big-endian objects"
msgstr "Повезује објекте велике крајњоÑти"
-#: lexsup.c:134
+#: lexsup.c:136
msgid "Link little-endian objects"
msgstr "Повезује објекте мале крајњоÑти"
-#: lexsup.c:136 lexsup.c:139
+#: lexsup.c:138 lexsup.c:141
msgid "SHLIB"
msgstr "ДЕЉ_БИБЛ"
-#: lexsup.c:136
+#: lexsup.c:138
msgid "Auxiliary filter for shared object symbol table"
msgstr "Помоћни филтер за табелу Ñимбола дељеног објекта"
-#: lexsup.c:139
+#: lexsup.c:141
msgid "Filter for shared object symbol table"
msgstr "Филтер за табелу Ñимбола дељеног објекта"
-#: lexsup.c:142
+#: lexsup.c:144
msgid "Ignored"
msgstr "Занемарено"
-#: lexsup.c:144
+#: lexsup.c:146
msgid "SIZE"
msgstr "ВЕЛИЧИÐÐ"
-#: lexsup.c:144
+#: lexsup.c:146
msgid "Small data size (if no size, same as --shared)"
msgstr "Величина малих података (ако нема величине, иÑто као „--shared“)"
-#: lexsup.c:147
+#: lexsup.c:149
msgid "FILENAME"
msgstr "ДÐТОТЕКÐ"
-#: lexsup.c:147
+#: lexsup.c:149
msgid "Set internal name of shared library"
msgstr "Подешава унутрашњи назив дељене библиотеке"
-#: lexsup.c:149
+#: lexsup.c:151
msgid "PROGRAM"
msgstr "ПРОГРÐÐœ"
-#: lexsup.c:149
+#: lexsup.c:151
msgid "Set PROGRAM as the dynamic linker to use"
msgstr "ПоÑтавља ПРОГРÐÐœ као динамички повезивач за коришћење"
-#: lexsup.c:152
+#: lexsup.c:154
msgid "Produce an executable with no program interpreter header"
msgstr "Производи извршну без заглавља тумача програма"
-#: lexsup.c:155
+#: lexsup.c:157
msgid "LIBNAME"
msgstr "ÐÐЗИВ_БИБЛ"
-#: lexsup.c:155
+#: lexsup.c:157
msgid "Search for library LIBNAME"
msgstr "Тражи библиотеку ÐÐЗИВ_БИБЛ"
-#: lexsup.c:157
+#: lexsup.c:159
msgid "DIRECTORY"
msgstr "ДИРЕКТРОРИЈУМ"
-#: lexsup.c:157
+#: lexsup.c:159
msgid "Add DIRECTORY to library search path"
msgstr "Додаје ДИРЕКТРОРИЈУМ у путању тражења библиотеке"
-#: lexsup.c:160
+#: lexsup.c:162
msgid "Override the default sysroot location"
msgstr "ПрепиÑује оÑновно меÑто ÑиÑтемÑког админиÑтратора"
-#: lexsup.c:162
+#: lexsup.c:164
msgid "EMULATION"
msgstr "ЕМУЛÐЦИЈÐ"
-#: lexsup.c:162
+#: lexsup.c:164
msgid "Set emulation"
msgstr "Подешава емулацију"
-#: lexsup.c:164
+#: lexsup.c:166
msgid "Print map file on standard output"
msgstr "ИÑпиÑује датотеку мапе на Ñтандардном излазу"
-#: lexsup.c:166
+#: lexsup.c:168
msgid "Do not page align data"
msgstr "Ðе Ñтраничи податке поравнања"
-#: lexsup.c:168
+#: lexsup.c:170
msgid "Do not page align data, do not make text readonly"
msgstr "Ðе Ñтраничи податке поравнања, не чини текÑÑ‚ Ñамо за читање"
-#: lexsup.c:171
+#: lexsup.c:173
msgid "Page align data, make text readonly"
msgstr "Страничи податке поравнања, чини текÑÑ‚ Ñамо за читање"
-#: lexsup.c:174
+#: lexsup.c:176
msgid "Set output file name"
msgstr "ПоÑтавља назив излазне датотеке"
-#: lexsup.c:176
+#: lexsup.c:178
msgid "Optimize output file"
msgstr "Оптимизује излазну датотеку"
-#: lexsup.c:178
+#: lexsup.c:180
msgid "Generate import library"
msgstr "Прави библиотеку увоза"
-#: lexsup.c:181 lexsup.c:192
+#: lexsup.c:183 lexsup.c:194
msgid "PLUGIN"
msgstr "ПРИКЉУЧÐК"
-#: lexsup.c:181
+#: lexsup.c:183
msgid "Load named plugin"
msgstr "Учитава именовани прикључак"
-#: lexsup.c:183 lexsup.c:194
+#: lexsup.c:185 lexsup.c:196
msgid "ARG"
msgstr "ÐРГ"
-#: lexsup.c:183
+#: lexsup.c:185
msgid "Send arg to last-loaded plugin"
-msgstr " Шаље аргумент поÑледње учитаном прикључку"
+msgstr "Шаље аргумент поÑледње учитаном прикључку"
-#: lexsup.c:185 lexsup.c:188
+#: lexsup.c:187 lexsup.c:190
msgid "Ignored for GCC LTO option compatibility"
msgstr "Занемарено зарад ÑаглаÑноÑти ГЦЦ ЛТО опције"
-#: lexsup.c:192
+#: lexsup.c:194
msgid "Load named plugin (ignored)"
msgstr "Учитава именовани прикључак (занемарено)"
-#: lexsup.c:194
+#: lexsup.c:196
msgid "Send arg to last-loaded plugin (ignored)"
msgstr "Шаље аргумент поÑледње учитаном прикључку (занемарено)"
-#: lexsup.c:197
+#: lexsup.c:199
msgid "Ignored for GCC linker option compatibility"
msgstr "Занемарено зарад ÑаглаÑноÑти опције ГЦЦ повезивача"
-#: lexsup.c:200 lexsup.c:203
+#: lexsup.c:202 lexsup.c:205
msgid "Ignored for gold option compatibility"
msgstr "занемарено зарад ÑаглаÑноÑти „gold“ опције"
-#: lexsup.c:206
+#: lexsup.c:208
msgid "Ignored for SVR4 compatibility"
msgstr "Занемарено зарад СВР4 ÑаглаÑноÑти"
-#: lexsup.c:210
+#: lexsup.c:212
msgid "Generate relocatable output"
msgstr "Ствара премеÑтиви излаз"
-#: lexsup.c:214
+#: lexsup.c:216
msgid "Just link symbols (if directory, same as --rpath)"
msgstr "Само повезује Ñимболе (ако је директоријум, иÑто као „--rpath“)"
-#: lexsup.c:217
+#: lexsup.c:219
msgid "Strip all symbols"
msgstr "Кида Ñве Ñимболе"
-#: lexsup.c:219
+#: lexsup.c:221
msgid "Strip debugging symbols"
msgstr "Кида Ñимболе прочишћавања"
-#: lexsup.c:221
+#: lexsup.c:223
msgid "Strip symbols in discarded sections"
msgstr "Кида Ñимболе у одбаченим одељцима"
-#: lexsup.c:223
+#: lexsup.c:225
msgid "Do not strip symbols in discarded sections"
msgstr "Ðе кида Ñимболе у одбаченим одељцима"
-#: lexsup.c:225
+#: lexsup.c:227
msgid "Trace file opens"
msgstr "Прати отварања датотеке"
-#: lexsup.c:227
+#: lexsup.c:229
msgid "Read linker script"
msgstr "Чита Ñкрипту повезивача"
-#: lexsup.c:229
+#: lexsup.c:231
msgid "Read default linker script"
msgstr "Чита оÑновну Ñкрипту повезивача"
-#: lexsup.c:233 lexsup.c:236 lexsup.c:254 lexsup.c:343 lexsup.c:367
-#: lexsup.c:470 lexsup.c:503 lexsup.c:515 lexsup.c:553 lexsup.c:556
+#: lexsup.c:235 lexsup.c:238 lexsup.c:256 lexsup.c:348 lexsup.c:372
+#: lexsup.c:486 lexsup.c:519 lexsup.c:531 lexsup.c:569 lexsup.c:572
msgid "SYMBOL"
msgstr "СИМБОЛ"
-#: lexsup.c:233
+#: lexsup.c:235
msgid "Start with undefined reference to SYMBOL"
msgstr "Почиње Ñа недефиниÑаном упутом ка СИМБОЛУ"
-#: lexsup.c:236
+#: lexsup.c:238
msgid "Require SYMBOL be defined in the final output"
msgstr "Захтева да „СИМБОЛ“ буде дефиниÑан у крајњем излазу"
-#: lexsup.c:239
+#: lexsup.c:241
msgid "[=SECTION]"
msgstr "[=ОДЕЉÐК]"
-#: lexsup.c:240
+#: lexsup.c:242
msgid "Don't merge input [SECTION | orphan] sections"
-msgstr " Ðе Ñтапа улазне [ОДЕЉÐК | Ñироче] одељке"
+msgstr "Ðе Ñтапа улазне [ОДЕЉÐК | Ñироче] одељке"
-#: lexsup.c:242
+#: lexsup.c:244
msgid "Build global constructor/destructor tables"
msgstr "Гради опште табеле градитеља/рушитеља"
-#: lexsup.c:244
+#: lexsup.c:246
msgid "Print version information"
msgstr "ИÑпиÑује податке о издању"
-#: lexsup.c:246
+#: lexsup.c:248
msgid "Print version and emulation information"
msgstr "ИÑпиÑује податке о издању и емулацији"
-#: lexsup.c:248
+#: lexsup.c:250
msgid "Discard all local symbols"
msgstr "Одбацује Ñве локалне Ñимболе"
-#: lexsup.c:250
+#: lexsup.c:252
msgid "Discard temporary local symbols (default)"
msgstr "Одбацује привремене локалне Ñимболе (оÑновно)"
-#: lexsup.c:252
+#: lexsup.c:254
msgid "Don't discard any local symbols"
msgstr "Ðе одбацује никакве локалне Ñимболе"
-#: lexsup.c:254
+#: lexsup.c:256
msgid "Trace mentions of SYMBOL"
msgstr "Прати помињање СИМБОЛÐ"
-#: lexsup.c:256 lexsup.c:435 lexsup.c:437
+#: lexsup.c:258 lexsup.c:449 lexsup.c:451
msgid "PATH"
msgstr "ПУТÐЊÐ"
-#: lexsup.c:256
+#: lexsup.c:258
msgid "Default search path for Solaris compatibility"
-msgstr " ОÑновна путања претраге за ÑаглаÑноÑÑ‚ Ñа СолариÑом"
+msgstr "ОÑновна путања претраге за ÑаглаÑноÑÑ‚ Ñа СолариÑом"
-#: lexsup.c:259
+#: lexsup.c:261
msgid "Start a group"
msgstr "Започиње групу"
-#: lexsup.c:261
+#: lexsup.c:263
msgid "End a group"
msgstr "Завршава групу"
-#: lexsup.c:265
+#: lexsup.c:267
msgid "Accept input files whose architecture cannot be determined"
msgstr "Прихвата улазне датотеке чија Ñе архитектура не може одредити"
-#: lexsup.c:269
+#: lexsup.c:271
msgid "Reject input files whose architecture is unknown"
msgstr "Одбија улазне датотеке чија је архитектура непозната"
-#: lexsup.c:281
+#: lexsup.c:283
msgid "Only set DT_NEEDED for following dynamic libs if used"
msgstr "Само поÑтавља „DT_NEEDED“ за пратеће динамичке библиотеке ако Ñе кориÑте"
-#: lexsup.c:284
+#: lexsup.c:286
msgid ""
"Always set DT_NEEDED for dynamic libraries mentioned on\n"
" the command line"
@@ -1436,187 +1482,199 @@ msgstr ""
"Увек поÑтавља „DT_NEEDED“ за динамичке библиотеке поменуте на\n"
" линији наредби"
-#: lexsup.c:288
+#: lexsup.c:290
msgid "Ignored for SunOS compatibility"
-msgstr " Занемарено зарад СанОС ÑаглаÑноÑти"
+msgstr "Занемарено зарад СанОС ÑаглаÑноÑти"
-#: lexsup.c:290
+#: lexsup.c:292
msgid "Link against shared libraries"
msgstr "Повезује дељене библиотеке"
-#: lexsup.c:296
+#: lexsup.c:298
msgid "Do not link against shared libraries"
msgstr "Ðе повезује дељене библиотеке"
-#: lexsup.c:304
+#: lexsup.c:306
+msgid "Don't bind global references locally"
+msgstr "Ðе Ñвезује опште упуте локално"
+
+#: lexsup.c:308
msgid "Bind global references locally"
msgstr "Свезује опште упуте локално"
-#: lexsup.c:306
+#: lexsup.c:310
msgid "Bind global function references locally"
msgstr "Свезује опште упуте функције локално"
-#: lexsup.c:308
+#: lexsup.c:312
msgid "Check section addresses for overlaps (default)"
msgstr "Проверава адреÑе одељка за преклапањима (оÑновно)"
-#: lexsup.c:311
+#: lexsup.c:315
msgid "Do not check section addresses for overlaps"
msgstr "Ðе проверава адреÑе одељка за преклапањима"
-#: lexsup.c:315
+#: lexsup.c:319
msgid "Copy DT_NEEDED links mentioned inside DSOs that follow"
msgstr "Умножава „DT_NEEDED“ везе Ñпоменуте унутар ДСО-а који Ñледи"
-#: lexsup.c:319
+#: lexsup.c:323
msgid "Do not copy DT_NEEDED links mentioned inside DSOs that follow"
msgstr "Ðе умножава „DT_NEEDED“ везе Ñпоменуте унутар ДСО-а који Ñледи"
-#: lexsup.c:323
+#: lexsup.c:327
msgid "Output cross reference table"
msgstr "ИÑпиÑује табелу унакрÑне упуте"
-#: lexsup.c:325
+#: lexsup.c:329
msgid "SYMBOL=EXPRESSION"
msgstr "СИМБОЛ=ИЗРÐЗ"
-#: lexsup.c:325
+#: lexsup.c:329
msgid "Define a symbol"
msgstr "Дефинише Ñимбол"
-#: lexsup.c:327
+#: lexsup.c:331
msgid "[=STYLE]"
msgstr "[=СТИЛ]"
-#: lexsup.c:327
+#: lexsup.c:331
msgid "Demangle symbol names [using STYLE]"
-msgstr " Прекрштава називе Ñимбола [кориÑтећи СТИЛ]"
+msgstr "Прекрштава називе Ñимбола [кориÑтећи СТИЛ]"
-#: lexsup.c:331
+#: lexsup.c:335
msgid ""
"Do not allow multiple definitions with symbols included\n"
" in filename invoked by -R or --just-symbols"
msgstr ""
"Ðе допушта више дефиниција Ñа Ñимболима укљученим\n"
-" у називу датотеке призване Ñа „-R“ или „--just-symbols“"
+" у називу датотеке призване Ñа „-R“ или „--just-symbols“"
-#: lexsup.c:335
+#: lexsup.c:340
msgid "Generate embedded relocs"
msgstr "Ствара угнежђена премештања"
-#: lexsup.c:337
+#: lexsup.c:342
msgid "Treat warnings as errors"
msgstr "Сматра упозорења грешкама"
-#: lexsup.c:340
+#: lexsup.c:345
msgid "Do not treat warnings as errors (default)"
msgstr "Ðе Ñматра упозорења грешкама (оÑновно)"
-#: lexsup.c:343
+#: lexsup.c:348
msgid "Call SYMBOL at unload-time"
-msgstr " Позива СИМБОЛ за време иÑтовара"
+msgstr "Позива СИМБОЛ за време иÑтовара"
-#: lexsup.c:345
+#: lexsup.c:350
msgid "Force generation of file with .exe suffix"
msgstr "Приморава Ñтварање датотеке Ñа ÑуфикÑом „.exe“"
-#: lexsup.c:347
+#: lexsup.c:352
msgid "Remove unused sections (on some targets)"
msgstr "Уклања некоришћене одељке (на неким метама)"
-#: lexsup.c:350
+#: lexsup.c:355
msgid "Don't remove unused sections (default)"
msgstr "Ðе уклања некоришћене одељке (оÑновно)"
-#: lexsup.c:353
+#: lexsup.c:358
msgid "List removed unused sections on stderr"
msgstr "ИÑпиÑује уклоњене некоришћене одељке на Ñтандардној грешци"
-#: lexsup.c:356
+#: lexsup.c:361
msgid "Do not list removed unused sections"
msgstr "Ðе иÑпиÑује уклоњене некоришћене одељке"
-#: lexsup.c:359
+#: lexsup.c:364
msgid "Keep exported symbols when removing unused sections"
msgstr "Задржава извезене Ñимболе када уклања некоришћене одељке"
-#: lexsup.c:362
+#: lexsup.c:367
msgid "Set default hash table size close to <NUMBER>"
msgstr "ПоÑтавља оÑновну величину хеш табеле приближно на <БРОЈ>"
-#: lexsup.c:365
+#: lexsup.c:370
msgid "Print option help"
msgstr "ИÑпиÑује помоћ опције"
-#: lexsup.c:367
+#: lexsup.c:372
msgid "Call SYMBOL at load-time"
-msgstr " Позива СИМБОЛ за време учитавања"
+msgstr "Позива СИМБОЛ за време учитавања"
-#: lexsup.c:369
+#: lexsup.c:374
msgid "FILE/DIR"
msgstr "ДÐТОТЕКÐ/ДИРЕКТРОРИЈУМ"
-#: lexsup.c:369
+#: lexsup.c:374
msgid "Write a linker map to FILE or DIR/<outputname>.map"
msgstr "Пише мапу Ñвезача у ДÐТОТЕКУ или ДИРЕКТРОРИЈУМ/<излазног_назива>.map"
-#: lexsup.c:371
+#: lexsup.c:376
msgid "Do not define Common storage"
msgstr "Ðе дефинише општи Ñмештај"
-#: lexsup.c:373
+#: lexsup.c:378
msgid "Do not demangle symbol names"
msgstr "Ðе прекрштава називе Ñимбола"
-#: lexsup.c:375
+#: lexsup.c:380
msgid "Use less memory and more disk I/O"
msgstr "КориÑти мање меморије а више У/И диÑка"
-#: lexsup.c:377
+#: lexsup.c:382
msgid "Do not allow unresolved references in object files"
msgstr "Ðе дозвољава нерешене упуте у објектним датотекама"
-#: lexsup.c:380
+#: lexsup.c:385
msgid "Allow unresolved references in shared libraries"
msgstr "Дозвољава нерешене упуте у дељеним библиотекама"
-#: lexsup.c:384
+#: lexsup.c:389
msgid "Do not allow unresolved references in shared libs"
msgstr "Ðе дозвољава нерешене упуте у дељеним библиотекама"
-#: lexsup.c:388
+#: lexsup.c:393
msgid "Allow multiple definitions"
msgstr "Дозвољава више дефиниција"
-#: lexsup.c:390
+#: lexsup.c:397
+msgid "SCRIPT"
+msgstr "СКРИПТÐ"
+
+#: lexsup.c:397
+msgid "Provide a script to help with undefined symbol errors"
+msgstr "Обезбеђује Ñкрипту да помогне Ñа недефиниÑаним грешкама Ñимбола"
+
+#: lexsup.c:400
msgid "Disallow undefined version"
msgstr "ИÑкључује недефиниÑано издање"
-#: lexsup.c:392
+#: lexsup.c:402
msgid "Create default symbol version"
msgstr "Ствара оÑновно издање Ñимбола"
-#: lexsup.c:395
+#: lexsup.c:405
msgid "Create default symbol version for imported symbols"
msgstr "Ствара оÑновно издање Ñимбола за увезене Ñимболе"
-#: lexsup.c:398
+#: lexsup.c:408
msgid "Don't warn about mismatched input files"
msgstr "Ðе упозорава о неодговарајућим улазним датотекама"
-#: lexsup.c:401
+#: lexsup.c:411
msgid "Don't warn on finding an incompatible library"
msgstr "Ðе упозорава о налажењу неÑаглаÑне библиотеке"
-#: lexsup.c:404
+#: lexsup.c:414
msgid "Turn off --whole-archive"
msgstr "ИÑкључује „--whole-archive“"
-#: lexsup.c:406
+#: lexsup.c:416
msgid "Create an output file even if errors occur"
msgstr "Ствара излазну датотеку чак и ако дође до грешака"
-#: lexsup.c:411
+#: lexsup.c:421
msgid ""
"Only use library directories specified on\n"
" the command line"
@@ -1624,143 +1682,151 @@ msgstr ""
"Само кориÑти директоријуме библиотеке наведене на\n"
" линији наредби"
-#: lexsup.c:415
+#: lexsup.c:425
msgid "Specify target of output file"
-msgstr " Ðаводи мету излазне датотеке"
+msgstr "Ðаводи мету излазне датотеке"
-#: lexsup.c:418
+#: lexsup.c:428
msgid "Print default output format"
msgstr "ИÑпиÑује оÑновни излазни формат"
-#: lexsup.c:420
+#: lexsup.c:430
msgid "Print current sysroot"
msgstr "ИÑпиÑује текућег админиÑтратора ÑиÑтема"
-#: lexsup.c:422
+#: lexsup.c:432
msgid "Ignored for Linux compatibility"
msgstr "Занемарено зарад Ð›Ð¸Ð½ÑƒÐºÑ ÑаглаÑноÑти"
-#: lexsup.c:425
+#: lexsup.c:435
msgid "Reduce memory overheads, possibly taking much longer"
msgstr "Умањује утрошке меморије, вероватно трајући дуже"
-#: lexsup.c:428
+#: lexsup.c:439
+msgid "Set the maximum cache size to SIZE bytes"
+msgstr "оÑтавља највећу величину оÑтаве на ВЕЛИЧИÐРбајтова"
+
+#: lexsup.c:442
msgid "Reduce code size by using target specific optimizations"
msgstr "Смањује величину кода кориÑтећи оптимизације Ñпецифичне мети"
-#: lexsup.c:430
+#: lexsup.c:444
msgid "Do not use relaxation techniques to reduce code size"
msgstr "Ðе кориÑти технике опуштања да умањи величину кода"
-#: lexsup.c:433
+#: lexsup.c:447
msgid "Keep only symbols listed in FILE"
msgstr "КориÑти Ñамо Ñимболе иÑпиÑане у ДÐТОТЕЦИ"
-#: lexsup.c:435
+#: lexsup.c:449
msgid "Set runtime shared library search path"
-msgstr " ПоÑтавља путању претраге дељене библиотеке времена извршавања"
+msgstr "ПоÑтавља путању претраге дељене библиотеке времена извршавања"
-#: lexsup.c:437
+#: lexsup.c:451
msgid "Set link time shared library search path"
-msgstr " ПоÑтавља путању претраге дељене библиотеке времена везе"
+msgstr "ПоÑтавља путању претраге дељене библиотеке времена везе"
-#: lexsup.c:440
+#: lexsup.c:454
msgid "Create a shared library"
msgstr "Прави дељену библиотеку"
-#: lexsup.c:444
+#: lexsup.c:458
msgid "Create a position independent executable"
msgstr "Ствара извршног незавиÑног од положаја"
-#: lexsup.c:448
+#: lexsup.c:462
+msgid "Create a position dependent executable (default)"
+msgstr "Ствара извршног завиÑног од положаја (оÑновно)"
+
+#: lexsup.c:464
msgid "[=ascending|descending]"
msgstr "[=раÑтуће|опадајуће]"
-#: lexsup.c:449
+#: lexsup.c:465
msgid "Sort common symbols by alignment [in specified order]"
msgstr "Ређа опште Ñимболе према поравнању [наведеним редом]"
-#: lexsup.c:454
+#: lexsup.c:470
msgid "name|alignment"
msgstr "назив|поравнање"
-#: lexsup.c:455
+#: lexsup.c:471
msgid "Sort sections by name or maximum alignment"
msgstr "Ређа одељке према називу или највећем поравнању"
-#: lexsup.c:457
+#: lexsup.c:473
msgid "COUNT"
msgstr "БРОЈ"
-#: lexsup.c:457
+#: lexsup.c:473
msgid "How many tags to reserve in .dynamic section"
msgstr "Колико ознака да резервише у одељку „.dynamic“"
-#: lexsup.c:460
+#: lexsup.c:476
msgid "[=SIZE]"
msgstr "[=ВЕЛИЧИÐÐ]"
-#: lexsup.c:460
+#: lexsup.c:476
msgid "Split output sections every SIZE octets"
msgstr "Дели излазне одељке Ñвака ВЕЛИЧИÐРоктета"
-#: lexsup.c:463
+#: lexsup.c:479
msgid "[=COUNT]"
msgstr "[=БРОЈ]"
-#: lexsup.c:463
+#: lexsup.c:479
msgid "Split output sections every COUNT relocs"
msgstr "Дели излазне одељке Ñвака ВЕЛИЧИÐРпремештања"
-#: lexsup.c:466
+#: lexsup.c:482
msgid "Print memory usage statistics"
msgstr "ИÑпиÑује ÑтатиÑтику коришћења меморије"
-#: lexsup.c:468
+#: lexsup.c:484
msgid "Display target specific options"
msgstr "Приказује опције Ñпецифичне за мету"
-#: lexsup.c:470
+#: lexsup.c:486
msgid "Do task level linking"
-msgstr " Обавља повезивање на нивоу задатка"
+msgstr "Обавља повезивање на нивоу задатка"
-#: lexsup.c:472
+#: lexsup.c:488
msgid "Use same format as native linker"
msgstr "КориÑти иÑти формат као матични повезивач"
-#: lexsup.c:474
+#: lexsup.c:490
msgid "SECTION=ADDRESS"
msgstr "ОДЕЉÐК=ÐДРЕСÐ"
-#: lexsup.c:474
+#: lexsup.c:490
msgid "Set address of named section"
msgstr "ПоÑтавља адреÑу именованог одељка"
-#: lexsup.c:477
+#: lexsup.c:493
msgid "Set address of .bss section"
-msgstr " ПоÑтавља адреÑу одељка „.bss“"
+msgstr "ПоÑтавља адреÑу одељка „.bss“"
-#: lexsup.c:479
+#: lexsup.c:495
msgid "Set address of .data section"
msgstr " ПоÑтавља адреÑу одељка „.data“"
-#: lexsup.c:481
+#: lexsup.c:497
msgid "Set address of .text section"
msgstr " ПоÑтавља адреÑу одељка „.text“"
-#: lexsup.c:483
+#: lexsup.c:499
msgid "Set address of text segment"
msgstr " ПоÑтавља адреÑу одељка текÑта"
-#: lexsup.c:485
+#: lexsup.c:501
msgid "Set address of rodata segment"
msgstr "ПоÑтавља адреÑу одељка ро-података"
-#: lexsup.c:487
+#: lexsup.c:503
msgid "Set address of ldata segment"
msgstr "ПоÑтавља адреÑу одељка л-података"
-#: lexsup.c:490
+#: lexsup.c:506
msgid ""
"How to handle unresolved symbols. <method> is:\n"
" ignore-all, report-all, ignore-in-object-files,\n"
@@ -1770,19 +1836,19 @@ msgstr ""
" „ignore-all“ (занемари Ñве), „report-all“ (пријави Ñве), „ignore-in-object-files“ (занемари у објектним датотекама),\n"
" „ignore-in-shared-libs“ (занемари у дељеним библиотекама)"
-#: lexsup.c:495
+#: lexsup.c:511
msgid "[=NUMBER]"
msgstr "[=БРОЈ]"
-#: lexsup.c:496
+#: lexsup.c:512
msgid "Output lots of information during link"
msgstr " ИÑпиÑује доÑта података за време повезивања"
-#: lexsup.c:500
+#: lexsup.c:516
msgid "Read version information script"
msgstr "Чита Ñкрипту података о издању"
-#: lexsup.c:503
+#: lexsup.c:519
msgid ""
"Take export symbols list from .exports, using\n"
" SYMBOL as the version."
@@ -1790,156 +1856,183 @@ msgstr ""
"Узима извозни ÑпиÑак Ñимбола из „.exports“, кориÑтећи\n"
" СИМБОЛ као издање."
-#: lexsup.c:507
+#: lexsup.c:523
msgid "Add data symbols to dynamic list"
msgstr "Додаје Ñимболе података на динамички ÑпиÑак"
-#: lexsup.c:509
+#: lexsup.c:525
msgid "Use C++ operator new/delete dynamic list"
msgstr "КориÑти нови/обриши динамички ÑпиÑак Ц++ оператора"
-#: lexsup.c:511
+#: lexsup.c:527
msgid "Use C++ typeinfo dynamic list"
msgstr "КориÑти Ц++ динамички ÑпиÑак врÑте података"
-#: lexsup.c:513
+#: lexsup.c:529
msgid "Read dynamic list"
msgstr "Чита динамички ÑпиÑак"
-#: lexsup.c:515
+#: lexsup.c:531
msgid "Export the specified symbol"
msgstr "Извози наведени Ñимбол"
-#: lexsup.c:517
+#: lexsup.c:533
msgid "Read export dynamic symbol list"
msgstr "Чита ÑпиÑак извоза динамичког Ñимбола"
-#: lexsup.c:519
+#: lexsup.c:535
msgid "Warn about duplicate common symbols"
msgstr "Упозорава о удвоÑтрученим општим Ñимболима"
-#: lexsup.c:521
+#: lexsup.c:537
msgid "Warn if global constructors/destructors are seen"
msgstr "Упозорава ако је виђен општи градитељ/рушитељ"
-#: lexsup.c:524
+#: lexsup.c:540
msgid "Warn if the multiple GP values are used"
msgstr "Упозорава ако је коришћено више ГП вредноÑти"
-#: lexsup.c:526
+#: lexsup.c:542
msgid "Warn only once per undefined symbol"
msgstr "Упозорава Ñамо једном по недефиниÑаном Ñимболу"
-#: lexsup.c:528
+#: lexsup.c:544
msgid "Warn if start of section changes due to alignment"
msgstr "Упозорава ако Ñе почетак одељка промени у току поравнања"
-#: lexsup.c:533
-msgid "Warn if outpout has DT_TEXTREL (default)"
+#: lexsup.c:549
+msgid "Warn if output has DT_TEXTREL (default)"
msgstr "Упозорава ако излаз има „DT_TEXTREL“ (оÑновно)"
-#: lexsup.c:535
-msgid "Warn if outpout has DT_TEXTREL"
+#: lexsup.c:551
+msgid "Warn if output has DT_TEXTREL"
msgstr "Упозорава ако излаз има „DT_TEXTREL“"
-#: lexsup.c:541
+#: lexsup.c:557
msgid "Warn if an object has alternate ELF machine code"
msgstr "Упозорава ако објект има заменÑки ЕЛФ машинÑки код"
-#: lexsup.c:545
+#: lexsup.c:561
msgid "Report unresolved symbols as warnings"
msgstr "ПредÑтавља нерешене Ñимболе као упозорења"
-#: lexsup.c:548
+#: lexsup.c:564
msgid "Report unresolved symbols as errors"
msgstr "ПредÑтавља нерешене Ñимболе као грешке"
-#: lexsup.c:550
+#: lexsup.c:566
msgid "Include all objects from following archives"
msgstr "Укључује Ñве објкете из пратећих архива"
-#: lexsup.c:553
+#: lexsup.c:569
msgid "Use wrapper functions for SYMBOL"
msgstr " КориÑти функције омотача за СИМБОЛ"
-#: lexsup.c:557
+#: lexsup.c:573
msgid "Unresolved SYMBOL will not cause an error or warning"
msgstr "Ðерешени СИМБОЛ неће довеÑти до грешке или упозорења"
-#: lexsup.c:559
+#: lexsup.c:575
msgid "Push state of flags governing input file handling"
msgstr "Стање гурања заÑтавица влада руковањем улазне датотеке"
-#: lexsup.c:562
+#: lexsup.c:578
msgid "Pop state of flags governing input file handling"
msgstr "Стање избацивања у први план заÑтавица влада руковањем улазне датотеке"
-#: lexsup.c:565
+#: lexsup.c:581
msgid "Report target memory usage"
msgstr "Извештава коришћење меморије циља"
-#: lexsup.c:567
+#: lexsup.c:583
msgid "=MODE"
msgstr "=РЕЖИМ"
-#: lexsup.c:567
+#: lexsup.c:583
msgid "Control how orphan sections are handled."
msgstr "Контролише како Ñе ради Ñа напуштеним одељцима."
-#: lexsup.c:570
+#: lexsup.c:586
msgid "Show discarded sections in map file output (default)"
msgstr "Приказује одбачене одељке у излазу датотеке мапе (оÑновно)"
-#: lexsup.c:573
+#: lexsup.c:589
msgid "Do not show discarded sections in map file output"
msgstr "Приказује одбачене одељке у излазу датотеке мапе"
-#: lexsup.c:751
+#: lexsup.c:592
+msgid "Emit names and types of static variables in CTF"
+msgstr "Емитује називе и врÑте Ñтатичких променљивих у „CTF“-у"
+
+#: lexsup.c:595
+msgid "Do not emit names and types of static variables in CTF"
+msgstr "Ðе емитује називе и врÑте Ñтатичких променљивих у „CTF“-у"
+
+#: lexsup.c:599
+msgid ""
+"How to share CTF types between translation units.\n"
+" <method> is: share-unconflicted (default),\n"
+" share-duplicated"
+msgstr ""
+"Како да дели „CTF“ врÑте између јединица превођења.\n"
+" <метода> је: „share-unconflicted“ (оÑновно),\n"
+" „share-duplicated“"
+
+#: lexsup.c:763
+msgid "%F%P: Error: unable to disambiguate: %s (did you mean -%s ?)\n"
+msgstr "%F%P: Грешка: не могу да разликујем: %s (да ли Ñте миÑлили „-%s“ ?)\n"
+
+#: lexsup.c:766
+msgid "%P: Warning: grouped short command line options are deprecated: %s\n"
+msgstr "%P: Упозорење: групиÑане кратке опције линије наредби Ñу заÑтареле: %s\n"
+
+#: lexsup.c:793
msgid "%P: %s: missing argument\n"
msgstr "%P: %s: недоÑтаје аргумент\n"
-#: lexsup.c:756
+#: lexsup.c:798
msgid "%P: unrecognized option '%s'\n"
msgstr "%P: непозната опција „%s“\n"
-#: lexsup.c:761
+#: lexsup.c:803
msgid "%F%P: use the --help option for usage information\n"
msgstr "%F%P: кориÑтите опцију „--help“ за податке о коришћењу\n"
-#: lexsup.c:780
+#: lexsup.c:822
msgid "%F%P: unrecognized -a option `%s'\n"
msgstr "%F%P: непозната „-a“ опција „%s“\n"
-#: lexsup.c:793
+#: lexsup.c:835
msgid "%F%P: unrecognized -assert option `%s'\n"
msgstr "%F%P: непозната „-assert“ опција „%s“\n"
-#: lexsup.c:837
+#: lexsup.c:879
msgid "%F%P: unknown demangling style `%s'\n"
msgstr "%F%P: непознат Ñтил прекрштавања „%s“\n"
-#: lexsup.c:913 lexsup.c:1372 eaarch64cloudabi.c:803 eaarch64cloudabib.c:803
-#: eaarch64elf.c:798 eaarch64elf32.c:798 eaarch64elf32b.c:798
-#: eaarch64elfb.c:798 eaarch64fbsd.c:803 eaarch64fbsdb.c:803
-#: eaarch64linux.c:803 eaarch64linux32.c:803 eaarch64linux32b.c:803
-#: eaarch64linuxb.c:803 earmelf.c:1064 earmelf_fbsd.c:1064
-#: earmelf_fuchsia.c:1069 earmelf_linux.c:1069 earmelf_linux_eabi.c:1069
-#: earmelf_linux_fdpiceabi.c:1069 earmelf_nacl.c:1069 earmelf_nbsd.c:1064
-#: earmelf_phoenix.c:1069 earmelf_vxworks.c:1100 earmelfb.c:1064
-#: earmelfb_fbsd.c:1064 earmelfb_fuchsia.c:1069 earmelfb_linux.c:1069
-#: earmelfb_linux_eabi.c:1069 earmelfb_linux_fdpiceabi.c:1069
-#: earmelfb_nacl.c:1069 earmelfb_nbsd.c:1064 earmnto.c:1039 earmsymbian.c:1064
-#: ecskyelf.c:530 ecskyelf_linux.c:693 eelf32metag.c:690 eelf64lppc.c:1149
-#: eelf64ppc.c:1149 eelf64ppc_fbsd.c:1149 ehppaelf.c:550 ehppalinux.c:728
-#: ehppanbsd.c:728 ehppaobsd.c:728
+#: lexsup.c:955 lexsup.c:1429 eaarch64cloudabi.c:818 eaarch64cloudabib.c:818
+#: eaarch64elf.c:813 eaarch64elf32.c:813 eaarch64elf32b.c:813
+#: eaarch64elfb.c:813 eaarch64fbsd.c:818 eaarch64fbsdb.c:818
+#: eaarch64haiku.c:818 eaarch64linux.c:818 eaarch64linux32.c:818
+#: eaarch64linux32b.c:818 eaarch64linuxb.c:818 earmelf.c:1079
+#: earmelf_fbsd.c:1079 earmelf_fuchsia.c:1084 earmelf_haiku.c:1084
+#: earmelf_linux.c:1084 earmelf_linux_eabi.c:1084
+#: earmelf_linux_fdpiceabi.c:1084 earmelf_nacl.c:1084 earmelf_nbsd.c:1079
+#: earmelf_phoenix.c:1084 earmelf_vxworks.c:1115 earmelfb.c:1079
+#: earmelfb_fbsd.c:1079 earmelfb_fuchsia.c:1084 earmelfb_linux.c:1084
+#: earmelfb_linux_eabi.c:1084 earmelfb_linux_fdpiceabi.c:1084
+#: earmelfb_nacl.c:1084 earmelfb_nbsd.c:1079 earmnto.c:1054 ecskyelf.c:541
+#: ecskyelf_linux.c:708 eelf32metag.c:705 eelf64lppc.c:1187
+#: eelf64lppc_fbsd.c:1187 eelf64ppc.c:1187 eelf64ppc_fbsd.c:1187
+#: ehppaelf.c:561 ehppalinux.c:743 ehppanbsd.c:743 ehppaobsd.c:743
msgid "%F%P: invalid number `%s'\n"
msgstr "%F%P: неиÑправан број „%s“\n"
-#: lexsup.c:1009
+#: lexsup.c:1051
msgid "%F%P: bad --unresolved-symbols option: %s\n"
msgstr "%F%P: лоша опција „--unresolved-symbols“: %s\n"
-#: lexsup.c:1077
+#: lexsup.c:1128
msgid "%F%P: bad -plugin-opt option\n"
msgstr "%F%P: лоша опција „-plugin-opt“\n"
@@ -1951,146 +2044,162 @@ msgstr "%F%P: лоша опција „-plugin-opt“\n"
#. an error message here. We cannot just make this a warning,
#. increment optind, and continue because getopt is too confused
#. and will seg-fault the next time around.
-#: lexsup.c:1094
+#: lexsup.c:1145
msgid "%F%P: unrecognised option: %s\n"
msgstr "%F%P: непозната опција „%s“\n"
-#: lexsup.c:1097 lexsup.c:1207 lexsup.c:1225 lexsup.c:1341
+#: lexsup.c:1148 lexsup.c:1258 lexsup.c:1279 lexsup.c:1398
msgid "%F%P: -r and %s may not be used together\n"
msgstr "%F%P: „-r“ и „%s“ Ñе не могу кориÑтити заједно\n"
-#: lexsup.c:1219
+#: lexsup.c:1270
msgid "%F%P: -shared not supported\n"
msgstr "%F%P: „-shared“ није подржана\n"
-#: lexsup.c:1230
+#: lexsup.c:1284
msgid "%F%P: -pie not supported\n"
msgstr "%F%P: „-pie“ није подржана\n"
-#: lexsup.c:1236
+#: lexsup.c:1290
msgid "%P: SONAME must not be empty string; keeping previous one\n"
msgstr "%P: „SONAME“ не Ñме бити празна ниÑка; задржавам претходну\n"
-#: lexsup.c:1242
+#: lexsup.c:1296
msgid "descending"
msgstr "опадајуће"
-#: lexsup.c:1244
+#: lexsup.c:1298
msgid "ascending"
msgstr "раÑтуће"
-#: lexsup.c:1247
+#: lexsup.c:1301
msgid "%F%P: invalid common section sorting option: %s\n"
msgstr "%F%P: неиÑправна опција ређања општег одељка: %s\n"
-#: lexsup.c:1251
+#: lexsup.c:1305
msgid "name"
msgstr "назив"
-#: lexsup.c:1253
+#: lexsup.c:1307
msgid "alignment"
msgstr "поравнање"
-#: lexsup.c:1256
+#: lexsup.c:1310
msgid "%F%P: invalid section sorting option: %s\n"
msgstr "%F%P: неиÑправна опција ређања одељка: %s\n"
-#: lexsup.c:1290
+#: lexsup.c:1347
msgid "%F%P: invalid argument to option \"--section-start\"\n"
msgstr "%F%P: неиÑправан аргумент за опцију „--section-start“\n"
-#: lexsup.c:1297
+#: lexsup.c:1354
msgid "%F%P: missing argument(s) to option \"--section-start\"\n"
msgstr "%F%P: недоÑтаје аргумент за опцију „--section-start“\n"
-#: lexsup.c:1562
+#: lexsup.c:1619
msgid "%F%P: group ended before it began (--help for usage)\n"
msgstr "%F%P: група је завршена пре почетка („--help“ за коришћење)\n"
-#: lexsup.c:1590
+#: lexsup.c:1644
+msgid "%F%P: invalid cache memory size: %s\n"
+msgstr "%F%P: неиÑправна величина оÑтаве: %s\n"
+
+#: lexsup.c:1658
msgid "%X%P: --hash-size needs a numeric argument\n"
msgstr "%X%P: „--hash-size“ је потребан бројевни аргумент\n"
-#: lexsup.c:1602
+#: lexsup.c:1670
msgid "%F%P: no state pushed before popping\n"
msgstr "%F%P: ниједно Ñтање није погурано пре издизања\n"
-#: lexsup.c:1625
+#: lexsup.c:1693
msgid "%F%P: invalid argument to option \"--orphan-handling\"\n"
msgstr "%F%P: неиÑправан аргумент за опцију „--orphan-handling“\n"
-#: lexsup.c:1648
+#: lexsup.c:1723
+msgid "%F%P: bad --ctf-share-types option: %s\n"
+msgstr "%F%P: лоша „--ctf-share-types“ опција: %s\n"
+
+#: lexsup.c:1741
msgid "%P: no file/directory name provided for map output; ignored\n"
msgstr "%P: није доÑтављен ниједан назив датотеке/директоријума за излаз мапе; занемарено\n"
-#. If this alloc fails then something is probably very
+#: lexsup.c:1769
+msgid "%P: cannot stat linker map file: %E\n"
+msgstr "%P: не могу да добавим податке датотеке мапе Ñвезача: %E\n"
+
+#: lexsup.c:1781
+msgid "%P: linker map file is not a regular file\n"
+msgstr "%P: датотека мапе Ñвезача није обична датотека\n"
+
+#. If the asprintf failed then something is probably very
#. wrong. Better to halt now rather than continue on
#. into more problems.
-#: lexsup.c:1669
+#: lexsup.c:1792
msgid "%P%F: cannot create name for linker map file: %E\n"
msgstr "%P%F: не могу да направим назив за датотеку мапе Ñвезача: %E\n"
-#: lexsup.c:1680
+#: lexsup.c:1803
msgid "%P: SONAME must not be empty string; ignored\n"
msgstr "%P: „SONAME“ не Ñме бити празна ниÑка; занемарено\n"
-#: lexsup.c:1686
+#: lexsup.c:1809
msgid "%P: missing --end-group; added as last command line option\n"
msgstr "%P: недоÑтаје „--end-group“; додато је као поÑледња опција линије наредби\n"
-#: lexsup.c:1794
+#: lexsup.c:1917
msgid "%F%P: -F may not be used without -shared\n"
msgstr "%F%P: „-F“ Ñе не може кориÑтити Ñа „-shared“\n"
-#: lexsup.c:1796
+#: lexsup.c:1919
msgid "%F%P: -f may not be used without -shared\n"
msgstr "%F%P: „-f“ Ñе не може кориÑтити без „-shared“\n"
-#: lexsup.c:1837 lexsup.c:1850
+#: lexsup.c:1960 lexsup.c:1973
msgid "%F%P: invalid hex number `%s'\n"
msgstr "%F%P: неиÑправан хекÑадецимални број „%s“\n"
-#: lexsup.c:1880
+#: lexsup.c:2003
#, c-format
msgid " --audit=AUDITLIB Specify a library to use for auditing\n"
msgstr " --audit=БИБЛ_ÐÐДГЛЕДÐЊРÐаводи библиотеку која ће Ñе кориÑтити за надгледање\n"
-#: lexsup.c:1882
+#: lexsup.c:2005
#, c-format
msgid " -Bgroup Selects group name lookup rules for DSO\n"
msgstr " -Bgroup Бира правила тражења назива групе за „DSO“\n"
-#: lexsup.c:1884
+#: lexsup.c:2007
#, c-format
msgid " --disable-new-dtags Disable new dynamic tags\n"
msgstr " --disable-new-dtags Онемогућује нове динамичке ознаке\n"
-#: lexsup.c:1886
+#: lexsup.c:2009
#, c-format
msgid " --enable-new-dtags Enable new dynamic tags\n"
msgstr " --enable-new-dtags Омогућује нове динамичке ознаке\n"
-#: lexsup.c:1888
+#: lexsup.c:2011
#, c-format
msgid " --eh-frame-hdr Create .eh_frame_hdr section\n"
msgstr " --eh-frame-hdr Прави „.eh_frame_hdr“ одељак\n"
-#: lexsup.c:1890
+#: lexsup.c:2013
#, c-format
msgid " --no-eh-frame-hdr Do not create .eh_frame_hdr section\n"
msgstr " --no-eh-frame-hdr Ðе прави „.eh_frame_hdrд одељак\n"
-#: lexsup.c:1892
+#: lexsup.c:2015
#, c-format
msgid " --exclude-libs=LIBS Make all symbols in LIBS hidden\n"
msgstr " --exclude-libs=БИБЛЕ Чини Ñве Ñимболе у БИБЛИОТЕКÐМРÑкривеним\n"
-#: lexsup.c:1894
+#: lexsup.c:2017
#, c-format
msgid " --hash-style=STYLE Set hash style to sysv/gnu/both. Default: "
msgstr " --hash-style=СТИЛ ПоÑтавља хеш Ñтил на ÑиÑв/гну/оба. ОÑновно: "
-#: lexsup.c:1913
+#: lexsup.c:2036
#, c-format
msgid ""
" -P AUDITLIB, --depaudit=AUDITLIB\n"
@@ -2099,17 +2208,17 @@ msgstr ""
" -P БИБЛ_ÐÐДГЛЕДÐЊÐ, --depaudit=БИБЛ_ÐÐДГЛЕДÐЊÐ\n"
" Ðаводи библиотеку која ће Ñе кориÑтити за надгледање завиÑноÑти\n"
-#: lexsup.c:1916
+#: lexsup.c:2039
#, c-format
msgid " -z combreloc Merge dynamic relocs into one section and sort\n"
msgstr " -z combreloc Стапа динамичке премештаје у један одељак и ређа\n"
-#: lexsup.c:1918
+#: lexsup.c:2041
#, c-format
msgid " -z nocombreloc Don't merge dynamic relocs into one section\n"
msgstr " -z nocombreloc Ðе Ñтапа динамичке премештаје у један одељак\n"
-#: lexsup.c:1920
+#: lexsup.c:2043
#, c-format
msgid ""
" -z global Make symbols in DSO available for subsequently\n"
@@ -2118,57 +2227,67 @@ msgstr ""
" -z global Чини Ñимболе у „DSO“ доÑтупним за накнадно\n"
" учитане објекте\n"
-#: lexsup.c:1923
+#: lexsup.c:2046
#, c-format
msgid " -z initfirst Mark DSO to be initialized first at runtime\n"
msgstr " -z initfirst Означава „DSO“ да буде први покренут у време извршења\n"
-#: lexsup.c:1925
+#: lexsup.c:2048
#, c-format
msgid " -z interpose Mark object to interpose all DSOs but executable\n"
msgstr " -z interpose Означава објекте да уметну Ñве „DSO“-ове оÑим извршне\n"
-#: lexsup.c:1927
+#: lexsup.c:2050
+#, c-format
+msgid " -z unique Mark DSO to be loaded at most once by default, and only in the main namespace\n"
+msgstr " -z unique Означава „DSO за учитавање највише једном по оÑнови, и Ñамо у главном називном проÑтору\n"
+
+#: lexsup.c:2052
+#, c-format
+msgid " -z nounique Don't mark DSO as a loadable at most once\n"
+msgstr " -z nounique Ðе означава „DSO“ за учитавање највише једном\n"
+
+#: lexsup.c:2054
#, c-format
msgid " -z lazy Mark object lazy runtime binding (default)\n"
msgstr " -z lazy Означава лењо време извршења увезивања објекта (оÑновно)\n"
-#: lexsup.c:1929
+#: lexsup.c:2056
#, c-format
msgid " -z loadfltr Mark object requiring immediate process\n"
msgstr " -z loadfltr Означава објекте да захтевају моменталну обраду\n"
-#: lexsup.c:1931
+#: lexsup.c:2058
#, c-format
msgid " -z nocopyreloc Don't create copy relocs\n"
msgstr " -z nocopyreloc Ðе Ñтвара умножак премештаја\n"
-#: lexsup.c:1933
+#: lexsup.c:2060
#, c-format
msgid " -z nodefaultlib Mark object not to use default search paths\n"
msgstr " -z nodefaultlib Означава објекат да не кориÑти оÑновне путање претраге\n"
-#: lexsup.c:1935
+#: lexsup.c:2062
#, c-format
msgid " -z nodelete Mark DSO non-deletable at runtime\n"
msgstr " -z nodelete Означава „DSO“ необриÑивим у време извршења\n"
-#: lexsup.c:1937
+#: lexsup.c:2064
#, c-format
msgid " -z nodlopen Mark DSO not available to dlopen\n"
msgstr " -z nodlopen Означава „DSO“ недоÑтупним за „dlopen“\n"
-#: lexsup.c:1939
+#: lexsup.c:2066
#, c-format
msgid " -z nodump Mark DSO not available to dldump\n"
msgstr " -z nodump Означава „DSO“ недоÑтупним за „dldump“\n"
-#: lexsup.c:1941
+#: lexsup.c:2068
#, c-format
msgid " -z now Mark object non-lazy runtime binding\n"
msgstr " -z now Означава не лењо време извршења увезивања објекта\n"
-#: lexsup.c:1943
+#: lexsup.c:2070
#, c-format
msgid ""
" -z origin Mark object requiring immediate $ORIGIN\n"
@@ -2177,97 +2296,92 @@ msgstr ""
" -z origin Означава објекат да захтева тренутну „$ORIGIN“\n"
" обраду у време извршавања\n"
-#: lexsup.c:1947
+#: lexsup.c:2074
#, c-format
msgid " -z relro Create RELRO program header (default)\n"
msgstr " -z relro Ствара „RELRO“ заглавље програма (оÑновно)\n"
-#: lexsup.c:1949
+#: lexsup.c:2076
#, c-format
msgid " -z norelro Don't create RELRO program header\n"
msgstr " -z norelro Ðе Ñтвара „RELRO“ заглавље програма\n"
-#: lexsup.c:1952
+#: lexsup.c:2079
#, c-format
msgid " -z relro Create RELRO program header\n"
msgstr " -z relro Ствара „RELRO“ заглавље програма\n"
-#: lexsup.c:1954
+#: lexsup.c:2081
#, c-format
msgid " -z norelro Don't create RELRO program header (default)\n"
msgstr " -z norelro Ðе Ñтвара „RELRO“ заглавље програма (оÑновно)\n"
-#: lexsup.c:1958
+#: lexsup.c:2085
#, c-format
msgid " -z separate-code Create separate code program header (default)\n"
msgstr " -z separate-code Ствара одвојено заглавље програма кода (оÑновно)\n"
-#: lexsup.c:1960
+#: lexsup.c:2087
#, c-format
msgid " -z noseparate-code Don't create separate code program header\n"
msgstr " -z noseparate-code Ðе Ñтвара одвојено заглавље програма кода\n"
-#: lexsup.c:1963
+#: lexsup.c:2090
#, c-format
msgid " -z separate-code Create separate code program header\n"
msgstr " -z separate-code Ствара одвојено заглавље програма кода\n"
-#: lexsup.c:1965
+#: lexsup.c:2092
#, c-format
msgid " -z noseparate-code Don't create separate code program header (default)\n"
msgstr " -z noseparate-code Ðе Ñтвара одвојено заглавље програма кода (оÑновно)\n"
-#: lexsup.c:1968
+#: lexsup.c:2095
#, c-format
msgid " -z common Generate common symbols with STT_COMMON type\n"
msgstr " -z common Ствара опште Ñимболе Ñа „STT_COMMON“ врÑтом\n"
-#: lexsup.c:1970
+#: lexsup.c:2097
#, c-format
msgid " -z nocommon Generate common symbols with STT_OBJECT type\n"
msgstr " -z nocommon Ствара опште Ñимболе Ñа „STT_OBJECT“ врÑтом\n"
-#: lexsup.c:1972
-#, c-format
-msgid " -z stack-size=SIZE Set size of stack segment\n"
-msgstr " -z stack-size=ВЕЛИЧИÐРПоÑтавља величину подеока Ñпремника\n"
-
-#: lexsup.c:1975
+#: lexsup.c:2100
#, c-format
msgid " -z text Treat DT_TEXTREL in output as error (default)\n"
msgstr " -z текÑÑ‚ Сматра грешком „DT_TEXTREL“ у излазу (оÑновно)\n"
-#: lexsup.c:1978
+#: lexsup.c:2103
#, c-format
msgid " -z text Treat DT_TEXTREL in output as error\n"
msgstr " -z текÑÑ‚ Сматра грешком „DT_TEXTREL“ у излазу\n"
-#: lexsup.c:1982
+#: lexsup.c:2107
#, c-format
msgid " -z notext Don't treat DT_TEXTREL in output as error (default)\n"
msgstr " -z без-текÑта Ðе Ñматра грешком „DT_TEXTREL“ у излазу (оÑновно)\n"
-#: lexsup.c:1984
+#: lexsup.c:2109
#, c-format
msgid " -z textoff Don't treat DT_TEXTREL in output as error (default)\n"
msgstr " -z иÑкљ-текÑÑ‚ Ðе Ñматра грешком „DT_TEXTREL“ у излазу (оÑновно)\n"
-#: lexsup.c:1989
+#: lexsup.c:2114
#, c-format
msgid " -z notext Don't treat DT_TEXTREL in output as error\n"
msgstr " -z без-текÑта Ðе Ñматра грешком „DT_TEXTREL“ у излазу\n"
-#: lexsup.c:1991
+#: lexsup.c:2116
#, c-format
msgid " -z textoff Don't treat DT_TEXTREL in output as error\n"
msgstr " -z иÑкљ-текÑÑ‚ Ðе Ñматра грешком „DT_TEXTREL“ у излазу\n"
-#: lexsup.c:1999
+#: lexsup.c:2124
#, c-format
msgid " --build-id[=STYLE] Generate build ID note\n"
msgstr " --build-id[=СТИЛ] Ствара напомену ИБ-а изградње\n"
-#: lexsup.c:2001
+#: lexsup.c:2126
#, c-format
msgid ""
" --compress-debug-sections=[none|zlib|zlib-gnu|zlib-gabi]\n"
@@ -2276,57 +2390,96 @@ msgstr ""
" --compress-debug-sections=[ништа|zlib|zlib-gnu|zlib-gabi]\n"
" Сажима „DWARF“ одељке прочишћавања кориÑтећи „zlib“\n"
-#: lexsup.c:2005
+#: lexsup.c:2130
#, c-format
msgid " Default: zlib-gabi\n"
msgstr " ОÑновно: zlib-gabi\n"
-#: lexsup.c:2008
+#: lexsup.c:2133
#, c-format
msgid " Default: none\n"
msgstr " ОÑновно: ништа\n"
-#: lexsup.c:2011
+#: lexsup.c:2136
#, c-format
msgid " -z common-page-size=SIZE Set common page size to SIZE\n"
msgstr " -z common-page-size=ВЕЛЧ ПоÑтавља општу величину Ñтранице на „ВЕЛИЧИÐУ“\n"
-#: lexsup.c:2013
+#: lexsup.c:2138
#, c-format
msgid " -z max-page-size=SIZE Set maximum page size to SIZE\n"
msgstr " -z max-page-size=ВЕЛЧ ПоÑтавља највећу величину Ñтранице на „ВЕЛИЧИÐУ“\n"
-#: lexsup.c:2015
+#: lexsup.c:2140
#, c-format
msgid " -z defs Report unresolved symbols in object files\n"
msgstr " -z defs Пријављује нерешене Ñимболе у ојкетним датотекама\n"
-#: lexsup.c:2017
+#: lexsup.c:2142
+#, c-format
+msgid " -z undefs Ignore unresolved symbols in object files\n"
+msgstr " -z undefs Занемарује нерешене Ñимболе у датотекама објекта\n"
+
+#: lexsup.c:2144
#, c-format
msgid " -z muldefs Allow multiple definitions\n"
msgstr " -z muldefs Допушта више дефиниција\n"
-#: lexsup.c:2019
+#: lexsup.c:2146
+#, c-format
+msgid " -z stack-size=SIZE Set size of stack segment\n"
+msgstr " -z stack-size=ВЕЛИЧИÐРПоÑтавља величину подеока Ñпремника\n"
+
+#: lexsup.c:2148
#, c-format
msgid " -z execstack Mark executable as requiring executable stack\n"
msgstr " -z execstack Означава извршну као да захтева извршни Ñпремник\n"
-#: lexsup.c:2021
+#: lexsup.c:2150
#, c-format
msgid " -z noexecstack Mark executable as not requiring executable stack\n"
msgstr " -z noexecstack Означава извршну као да не захтева извршни Ñпремник\n"
-#: lexsup.c:2023
+#: lexsup.c:2152
+#, c-format
+msgid " -z unique-symbol Avoid duplicated local symbol names\n"
+msgstr " -z unique-symbol Избегава удвоÑтручене локалне називе Ñимбола\n"
+
+#: lexsup.c:2154
+#, c-format
+msgid " -z nounique-symbol Keep duplicated local symbol names (default)\n"
+msgstr " -z nounique-symbol Задржава удвоÑтручене локалне називе Ñимбола (оÑновно)\n"
+
+#: lexsup.c:2156
#, c-format
msgid " -z globalaudit Mark executable requiring global auditing\n"
msgstr " -z globalaudit Означава извршне који захтевају опште надгледање\n"
-#: lexsup.c:2030
+#: lexsup.c:2158
+#, c-format
+msgid " -z start-stop-gc Enable garbage collection on __start/__stop\n"
+msgstr " -z start-stop-gc Укључује Ñкупљање Ñмећа на „__start/__stop“\n"
+
+#: lexsup.c:2160
+#, c-format
+msgid " -z nostart-stop-gc Don't garbage collect __start/__stop (default)\n"
+msgstr " -z nostart-stop-gc Ðе Ñкупља Ñмеће на „__start/__stop“ (оÑновно)\n"
+
+#: lexsup.c:2162
+#, c-format
+msgid ""
+" -z start-stop-visibility=V Set visibility of built-in __start/__stop symbols\n"
+" to DEFAULT, PROTECTED, HIDDEN or INTERNAL\n"
+msgstr ""
+" -z start-stop-visibility=V ПоÑтавља видљивоÑÑ‚ уграђених „__start/__stop“ Ñимбола\n"
+" на „DEFAULT“, „PROTECTED“, „HIDDEN“ или „INTERNAL“\n"
+
+#: lexsup.c:2170
#, c-format
msgid " --ld-generated-unwind-info Generate exception handling info for PLT\n"
msgstr " --ld-generated-unwind-info Ствара податке руковања изузетком за „PLT“\n"
-#: lexsup.c:2032
+#: lexsup.c:2172
#, c-format
msgid ""
" --no-ld-generated-unwind-info\n"
@@ -2335,49 +2488,49 @@ msgstr ""
" --no-ld-generated-unwind-info\n"
" Ðе Ñтвара податке руковања изузетком за „PLT“\n"
-#: lexsup.c:2043
+#: lexsup.c:2182
#, c-format
msgid "ELF emulations:\n"
msgstr "„ELF“ емулације:\n"
-#: lexsup.c:2061
+#: lexsup.c:2200
#, c-format
msgid "Usage: %s [options] file...\n"
msgstr "Употреба: %s [опције] датотека...\n"
-#: lexsup.c:2063
+#: lexsup.c:2202
#, c-format
msgid "Options:\n"
msgstr "Опције:\n"
-#: lexsup.c:2141
+#: lexsup.c:2280
#, c-format
msgid " @FILE"
msgstr " @ДÐТОТЕКÐ"
-#: lexsup.c:2144
+#: lexsup.c:2283
#, c-format
msgid "Read options from FILE\n"
msgstr "Чита опције из ДÐТОТЕКЕ\n"
#. Note: Various tools (such as libtool) depend upon the
#. format of the listings below - do not change them.
-#: lexsup.c:2149
+#: lexsup.c:2288
#, c-format
msgid "%s: supported targets:"
msgstr "%s: подржане мете:"
-#: lexsup.c:2157
+#: lexsup.c:2296
#, c-format
msgid "%s: supported emulations: "
msgstr "%s: подржане емулације: "
-#: lexsup.c:2162
+#: lexsup.c:2301
#, c-format
msgid "%s: emulation specific options:\n"
msgstr "%s: поÑебне опције емулације:\n"
-#: lexsup.c:2169
+#: lexsup.c:2308
#, c-format
msgid "Report bugs to %s\n"
msgstr "Грешке пријавите на „%s“\n"
@@ -2386,262 +2539,268 @@ msgstr "Грешке пријавите на „%s“\n"
msgid "%F%P: unknown format type %s\n"
msgstr "%F%P: непозната врÑта формата „%s“\n"
-#: pe-dll.c:447
+#: pe-dll.c:448
msgid "%X%P: unsupported PEI architecture: %s\n"
msgstr "%X%P: неподржана ПЕИ архитектура: %s\n"
-#: pe-dll.c:825
+#: pe-dll.c:827
msgid "%X%P: cannot export %s: invalid export name\n"
msgstr "%X%P: не могу да извезем „%s“: неиÑправан назив извоза\n"
-#: pe-dll.c:877
+#: pe-dll.c:879
#, c-format
msgid "%X%P: error, duplicate EXPORT with ordinals: %s (%d vs %d)\n"
msgstr "%X%P: грешка, удвоÑтручени ИЗВОЗ Ñа редним бројевима: %s (%d vs %d)\n"
-#: pe-dll.c:884
+#: pe-dll.c:886
#, c-format
msgid "%P: warning, duplicate EXPORT: %s\n"
msgstr "%P: упозорење, удвоÑтручено „ИЗВЕЗИ“: %s\n"
-#: pe-dll.c:991
+#: pe-dll.c:993
#, c-format
msgid "%X%P: cannot export %s: symbol not defined\n"
msgstr "%X%P: не могу да извезем „%s“: Ñимбол није дефиниÑан\n"
-#: pe-dll.c:997
+#: pe-dll.c:999
#, c-format
msgid "%X%P: cannot export %s: symbol wrong type (%d vs %d)\n"
msgstr "%X%P: не могу да извезем „%s“: погрешна врÑта Ñимбола (%d vs %d)\n"
-#: pe-dll.c:1004
+#: pe-dll.c:1006
#, c-format
msgid "%X%P: cannot export %s: symbol not found\n"
msgstr "%X%P: не могу да извезем „%s“: ниÑам нашао Ñимбол\n"
-#: pe-dll.c:1027 eaarch64cloudabi.c:360 eaarch64cloudabib.c:360
+#: pe-dll.c:1029 eaarch64cloudabi.c:360 eaarch64cloudabib.c:360
#: eaarch64elf.c:359 eaarch64elf32.c:359 eaarch64elf32b.c:359
#: eaarch64elfb.c:359 eaarch64fbsd.c:360 eaarch64fbsdb.c:360
-#: eaarch64linux.c:360 eaarch64linux32.c:360 eaarch64linux32b.c:360
-#: eaarch64linuxb.c:360 eaix5ppc.c:1432 eaix5ppc.c:1442 eaix5rs6.c:1432
-#: eaix5rs6.c:1442 eaixppc.c:1432 eaixppc.c:1442 eaixrs6.c:1432 eaixrs6.c:1442
-#: earmelf.c:568 earmelf_fbsd.c:568 earmelf_fuchsia.c:569 earmelf_linux.c:569
+#: eaarch64haiku.c:360 eaarch64linux.c:360 eaarch64linux32.c:360
+#: eaarch64linux32b.c:360 eaarch64linuxb.c:360 eaix5ppc.c:1470 eaix5ppc.c:1480
+#: eaix5rs6.c:1470 eaix5rs6.c:1480 eaixppc.c:1470 eaixppc.c:1480
+#: eaixrs6.c:1470 eaixrs6.c:1480 earmelf.c:568 earmelf_fbsd.c:568
+#: earmelf_fuchsia.c:569 earmelf_haiku.c:569 earmelf_linux.c:569
#: earmelf_linux_eabi.c:569 earmelf_linux_fdpiceabi.c:569 earmelf_nacl.c:569
#: earmelf_nbsd.c:568 earmelf_phoenix.c:569 earmelf_vxworks.c:568
#: earmelfb.c:568 earmelfb_fbsd.c:568 earmelfb_fuchsia.c:569
#: earmelfb_linux.c:569 earmelfb_linux_eabi.c:569
#: earmelfb_linux_fdpiceabi.c:569 earmelfb_nacl.c:569 earmelfb_nbsd.c:568
-#: earmnto.c:568 earmsymbian.c:568 ecskyelf.c:163 ecskyelf_linux.c:163
-#: eelf32b4300.c:172 eelf32bmip.c:172 eelf32bmipn32.c:186 eelf32bsmip.c:186
-#: eelf32btsmip.c:172 eelf32btsmip_fbsd.c:172 eelf32btsmipn32.c:172
-#: eelf32btsmipn32_fbsd.c:172 eelf32ebmip.c:172 eelf32ebmipvxworks.c:172
-#: eelf32elmip.c:172 eelf32elmipvxworks.c:172 eelf32l4300.c:172
-#: eelf32lmip.c:172 eelf32lr5900.c:172 eelf32lr5900n32.c:172 eelf32lsmip.c:172
+#: earmnto.c:568 ecskyelf.c:163 ecskyelf_linux.c:163 eelf32b4300.c:172
+#: eelf32bmip.c:172 eelf32bmipn32.c:186 eelf32bsmip.c:186 eelf32btsmip.c:172
+#: eelf32btsmip_fbsd.c:172 eelf32btsmipn32.c:172 eelf32btsmipn32_fbsd.c:172
+#: eelf32ebmip.c:172 eelf32ebmipvxworks.c:172 eelf32elmip.c:172
+#: eelf32elmipvxworks.c:172 eelf32l4300.c:172 eelf32lmip.c:172
+#: eelf32lr5900.c:172 eelf32lr5900n32.c:172 eelf32lsmip.c:172
#: eelf32ltsmip.c:172 eelf32ltsmip_fbsd.c:172 eelf32ltsmipn32.c:172
#: eelf32ltsmipn32_fbsd.c:172 eelf32metag.c:87 eelf32mipswindiss.c:172
#: eelf64bmip.c:186 eelf64btsmip.c:172 eelf64btsmip_fbsd.c:172
-#: eelf64lppc.c:117 eelf64ltsmip.c:172 eelf64ltsmip_fbsd.c:172 eelf64ppc.c:117
-#: eelf64ppc_fbsd.c:117 ehppaelf.c:110 ehppalinux.c:110 ehppanbsd.c:110
+#: eelf64lppc.c:119 eelf64lppc_fbsd.c:119 eelf64ltsmip.c:172
+#: eelf64ltsmip_fbsd.c:172 eelf64ppc.c:119 eelf64ppc_fbsd.c:119
+#: eelf_mipsel_haiku.c:172 ehppaelf.c:110 ehppalinux.c:110 ehppanbsd.c:110
#: ehppaobsd.c:110 em68hc11elf.c:170 em68hc11elfb.c:170 em68hc12elf.c:170
-#: em68hc12elfb.c:170 enios2elf.c:92 enios2linux.c:92 eppcmacos.c:1432
-#: eppcmacos.c:1442
+#: em68hc12elfb.c:170 enios2elf.c:92 enios2linux.c:92 eppcmacos.c:1470
+#: eppcmacos.c:1480
msgid "%F%P: can not create BFD: %E\n"
msgstr "%F%P: не могу да направим „BFD“: %E\n"
-#: pe-dll.c:1041
+#: pe-dll.c:1043
msgid "%X%P: can not create .edata section: %E\n"
msgstr "%X%P: не могу да направим „.edata“ одељак: %E\n"
-#: pe-dll.c:1055
+#: pe-dll.c:1057
msgid "%X%P: can not create .reloc section: %E\n"
msgstr "%X%P: не могу да направим „.reloc“ одељак: %E\n"
-#: pe-dll.c:1116
+#: pe-dll.c:1118
#, c-format
msgid "%X%P: error: ordinal used twice: %d (%s vs %s)\n"
msgstr "%X%P: грешка, редни број је коришћен два пута: %d (%s vs %s)\n"
-#: pe-dll.c:1152
+#: pe-dll.c:1154
#, c-format
msgid "%X%P: error: export ordinal too large: %d\n"
msgstr "%X%P: грешка: извоз редног броја је превелик: %d\n"
-#: pe-dll.c:1475
+#: pe-dll.c:1477
#, c-format
msgid "Info: resolving %s by linking to %s (auto-import)\n"
msgstr "Инфо: решавам „%s“ повезивањем на „%s“ (ÑамоÑтални увоз)\n"
-#: pe-dll.c:1481
+#: pe-dll.c:1483
msgid "%P: warning: auto-importing has been activated without --enable-auto-import specified on the command line; this should work unless it involves constant data structures referencing symbols from auto-imported DLLs\n"
msgstr "%P: упозорење: ÑамоÑтални увоз је активиран без наведеног „--enable-auto-import“ на линији наредби; ово би требало да ради оÑим ако не умеша и конÑтантне Ñтруктуре података које упућују на Ñимболе из ÑамоÑтално увезених „DLLs“-а\n"
-#. Huh? Shouldn't happen, but punt if it does.
-#: pe-dll.c:1550
+#: pe-dll.c:1554
msgid "%P: zero vma section reloc detected: `%s' #%d f=%d\n"
msgstr "%P: откривено је нула премештаја „vma“ одељка: „%s“ #%d f=%d\n"
-#: pe-dll.c:1666
+#: pe-dll.c:1637
+msgid "%P: base relocation for section `%s' above .reloc section\n"
+msgstr "%P: премештај оÑнове за одељак „%s“ изнад „.reloc“ одељка\n"
+
+#: pe-dll.c:1686
#, c-format
msgid "%X%P: error: %d-bit reloc in dll\n"
msgstr "%X%P: грешка: %d-битно премештање у „dll“-у\n"
-#: pe-dll.c:1794
+#: pe-dll.c:1811
#, c-format
msgid "%P: can't open output def file %s\n"
msgstr "%P: не могу да отворим излазну датотеку дефиниције „%s“\n"
-#: pe-dll.c:1945
+#: pe-dll.c:1962
#, c-format
msgid "; no contents available\n"
msgstr "; Ñадржај није доÑтупан\n"
-#: pe-dll.c:2804
+#: pe-dll.c:2822
msgid "%X%P: %C: variable '%pT' can't be auto-imported; please read the documentation for ld's --enable-auto-import for details\n"
msgstr "%X%P: %C: променљива „%pT“ Ñе не може Ñама увеÑти; прочитајте документацију за лд-ову опцију „--enable-auto-import“\n"
-#: pe-dll.c:2831
+#: pe-dll.c:2850
#, c-format
msgid "%X%P: can't open .lib file: %s\n"
msgstr "%X%P: не могу да отворим датотеку „.lib“: %s\n"
-#: pe-dll.c:2837
+#: pe-dll.c:2856
#, c-format
msgid "Creating library file: %s\n"
msgstr "Правим датотеку библиотеке: %s\n"
-#: pe-dll.c:2867
+#: pe-dll.c:2886
msgid "%X%P: bfd_openr %s: %E\n"
msgstr "%X%P: „bfd_openr“ „%s“: %E\n"
-#: pe-dll.c:2879
+#: pe-dll.c:2898
msgid "%X%P: %s(%s): can't find member in non-archive file"
msgstr "%X%P: %s(%s): не могу наћи члана у датотеци која није архива"
-#: pe-dll.c:2893
+#: pe-dll.c:2912
msgid "%X%P: %s(%s): can't find member in archive"
msgstr "%X%P: %s(%s): не могу наћи члана у архиви"
-#: pe-dll.c:3156
+#: pe-dll.c:3177
msgid "%X%P: add symbols %s: %E\n"
msgstr "%X%P: додајем Ñимболе „%s“: %E\n"
-#: pe-dll.c:3343
+#: pe-dll.c:3365
msgid "%X%P: open %s: %E\n"
msgstr "%X%P: отварам „%s“: %E\n"
-#: pe-dll.c:3352
+#: pe-dll.c:3374
msgid "%X%P: %s: this doesn't appear to be a DLL\n"
msgstr "%X%P: %s: ово не изгледа као да је „DLL“\n"
-#: pe-dll.c:3557
+#: pe-dll.c:3579
msgid "%X%P: error: can't use long section names on this arch\n"
msgstr "%X%P: грешка: не могу да кориÑтим дуге називе одељака на овој архитектури\n"
-#: plugin.c:233 plugin.c:279
+#: plugin.c:236 plugin.c:282
msgid "<no plugin>"
msgstr "<нема прикључка>"
-#: plugin.c:248 plugin.c:1100
+#: plugin.c:251 plugin.c:1111
msgid "%F%P: %s: error loading plugin: %s\n"
msgstr "%F%P: %s: грешка учитавања прикључка: %s\n"
-#: plugin.c:255
+#: plugin.c:258
msgid "%P: %s: duplicated plugin\n"
msgstr "%P: %s: удвоÑтручени прикључак\n"
-#: plugin.c:341
+#: plugin.c:344
msgid "%F%P: could not create dummy IR bfd: %E\n"
msgstr "%F%P: не могу да направим лажни ИР бфд: %E\n"
-#: plugin.c:422
+#: plugin.c:425
msgid "%F%P: %s: non-ELF symbol in ELF BFD!\n"
msgstr "%F%P: %s: не-„ELF“ Ñимбол у „ELF BFD“!\n"
-#: plugin.c:433
+#: plugin.c:436
msgid "%F%P: unknown ELF symbol visibility: %d!\n"
msgstr "%F%P: непозната видљивоÑÑ‚ „ELF“ Ñимбола: %d!\n"
-#: plugin.c:542
+#: plugin.c:545
msgid "%F%P: unsupported input file size: %s (%ld bytes)\n"
msgstr "%F%P: неподржана величина улазне датотеке: %s (%ld бајта)\n"
-#: plugin.c:679
+#: plugin.c:690
#, c-format
msgid "unknown LTO kind value %x"
msgstr "непозната „LTO“ врÑта вредноÑти „%x“"
-#: plugin.c:705
+#: plugin.c:716
#, c-format
msgid "unknown LTO resolution value %x"
msgstr "непозната вредноÑÑ‚ „LTO“ резолуције „%x“"
-#: plugin.c:725
+#: plugin.c:736
#, c-format
msgid "unknown LTO visibility value %x"
msgstr "непозната вредноÑÑ‚ „LTO“ видљивоÑти „%x“"
#. We should not have a new, indirect or warning symbol here.
-#: plugin.c:805
+#: plugin.c:816
msgid "%F%P: %s: plugin symbol table corrupt (sym type %d)\n"
msgstr "%F%P: %s: табела Ñимбола прикључка је оштећена (врÑта Ñимбола „%d“)\n"
-#: plugin.c:867
+#: plugin.c:878
msgid "%P: %pB: symbol `%s' definition: %s, visibility: %s, resolution: %s\n"
msgstr "%P: %pB: дефиниција Ñимбола „%s“: %s, видљивоÑÑ‚: %s, резолуција: %s\n"
-#: plugin.c:944
+#: plugin.c:955
msgid "%P: warning: "
msgstr "%P: упозорење: "
-#: plugin.c:955
+#: plugin.c:966
msgid "%P: error: "
msgstr "%P: грешка: "
-#: plugin.c:1107
+#: plugin.c:1118
msgid "%F%P: %s: plugin error: %d\n"
msgstr "%F%P: %s: грешка прикључка: %d\n"
-#: plugin.c:1162
+#: plugin.c:1173
msgid "%F%P: plugin_strdup failed to allocate memory: %s\n"
msgstr "%F%P: „plugin_strdup“ није уÑпео да додели меморију: %s\n"
-#: plugin.c:1199
+#: plugin.c:1210
msgid "%F%P: plugin failed to allocate memory for input: %s\n"
msgstr "%F%P: прикључак није уÑпео да додели меморију за улаз: %s\n"
-#: plugin.c:1226
+#: plugin.c:1238
msgid "%F%P: %s: plugin reported error claiming file\n"
msgstr "%F%P: %s: прикључак је извеÑтио грешку захтевајући датотеку\n"
-#: plugin.c:1337
+#: plugin.c:1349
msgid "%P: %s: error in plugin cleanup: %d (ignored)\n"
msgstr "%P: %s: грешка у чишћењу прикључка: %d (ignored)\n"
#: eaarch64cloudabi.c:223 eaarch64cloudabib.c:223 eaarch64elf.c:222
#: eaarch64elf32.c:222 eaarch64elf32b.c:222 eaarch64elfb.c:222
-#: eaarch64fbsd.c:223 eaarch64fbsdb.c:223 eaarch64linux.c:223
-#: eaarch64linux32.c:223 eaarch64linux32b.c:223 eaarch64linuxb.c:223
-#: earmelf.c:292 earmelf_fbsd.c:292 earmelf_fuchsia.c:293 earmelf_linux.c:293
-#: earmelf_linux_eabi.c:293 earmelf_linux_fdpiceabi.c:293 earmelf_nacl.c:293
-#: earmelf_nbsd.c:292 earmelf_phoenix.c:293 earmelf_vxworks.c:292
-#: earmelfb.c:292 earmelfb_fbsd.c:292 earmelfb_fuchsia.c:293
-#: earmelfb_linux.c:293 earmelfb_linux_eabi.c:293
-#: earmelfb_linux_fdpiceabi.c:293 earmelfb_nacl.c:293 earmelfb_nbsd.c:292
-#: earmnto.c:292 earmsymbian.c:292 eavr1.c:178 eavr2.c:178 eavr25.c:178
-#: eavr3.c:178 eavr31.c:178 eavr35.c:178 eavr4.c:178 eavr5.c:178 eavr51.c:178
-#: eavr6.c:178 eavrtiny.c:178 eavrxmega1.c:178 eavrxmega2.c:178
-#: eavrxmega3.c:178 eavrxmega4.c:178 eavrxmega5.c:178 eavrxmega6.c:178
-#: eavrxmega7.c:178 ecskyelf.c:210 ecskyelf_linux.c:210 eelf32b4300.c:205
-#: eelf32bmip.c:205 eelf32bmipn32.c:219 eelf32bsmip.c:219 eelf32btsmip.c:205
-#: eelf32btsmip_fbsd.c:205 eelf32btsmipn32.c:205 eelf32btsmipn32_fbsd.c:205
-#: eelf32ebmip.c:205 eelf32ebmipvxworks.c:205 eelf32elmip.c:205
-#: eelf32elmipvxworks.c:205 eelf32l4300.c:205 eelf32lmip.c:205
-#: eelf32lr5900.c:205 eelf32lr5900n32.c:205 eelf32lsmip.c:205
+#: eaarch64fbsd.c:223 eaarch64fbsdb.c:223 eaarch64haiku.c:223
+#: eaarch64linux.c:223 eaarch64linux32.c:223 eaarch64linux32b.c:223
+#: eaarch64linuxb.c:223 earmelf.c:292 earmelf_fbsd.c:292 earmelf_fuchsia.c:293
+#: earmelf_haiku.c:293 earmelf_linux.c:293 earmelf_linux_eabi.c:293
+#: earmelf_linux_fdpiceabi.c:293 earmelf_nacl.c:293 earmelf_nbsd.c:292
+#: earmelf_phoenix.c:293 earmelf_vxworks.c:292 earmelfb.c:292
+#: earmelfb_fbsd.c:292 earmelfb_fuchsia.c:293 earmelfb_linux.c:293
+#: earmelfb_linux_eabi.c:293 earmelfb_linux_fdpiceabi.c:293
+#: earmelfb_nacl.c:293 earmelfb_nbsd.c:292 earmnto.c:292 eavr1.c:178
+#: eavr2.c:178 eavr25.c:178 eavr3.c:178 eavr31.c:178 eavr35.c:178 eavr4.c:178
+#: eavr5.c:178 eavr51.c:178 eavr6.c:178 eavrtiny.c:178 eavrxmega1.c:178
+#: eavrxmega2.c:178 eavrxmega3.c:178 eavrxmega4.c:178 eavrxmega5.c:178
+#: eavrxmega6.c:178 eavrxmega7.c:178 ecskyelf.c:210 ecskyelf_linux.c:210
+#: eelf32b4300.c:205 eelf32bmip.c:205 eelf32bmipn32.c:219 eelf32bsmip.c:219
+#: eelf32btsmip.c:205 eelf32btsmip_fbsd.c:205 eelf32btsmipn32.c:205
+#: eelf32btsmipn32_fbsd.c:205 eelf32ebmip.c:205 eelf32ebmipvxworks.c:205
+#: eelf32elmip.c:205 eelf32elmipvxworks.c:205 eelf32l4300.c:205
+#: eelf32lmip.c:205 eelf32lr5900.c:205 eelf32lr5900n32.c:205 eelf32lsmip.c:205
#: eelf32ltsmip.c:205 eelf32ltsmip_fbsd.c:205 eelf32ltsmipn32.c:205
#: eelf32ltsmipn32_fbsd.c:205 eelf32metag.c:206 eelf32mipswindiss.c:205
#: eelf64bmip.c:219 eelf64btsmip.c:205 eelf64btsmip_fbsd.c:205
-#: eelf64lppc.c:470 eelf64ltsmip.c:205 eelf64ltsmip_fbsd.c:205 eelf64ppc.c:470
-#: eelf64ppc_fbsd.c:470 ehppaelf.c:230 ehppalinux.c:230 ehppanbsd.c:230
+#: eelf64lppc.c:482 eelf64lppc_fbsd.c:482 eelf64ltsmip.c:205
+#: eelf64ltsmip_fbsd.c:205 eelf64ppc.c:482 eelf64ppc_fbsd.c:482
+#: eelf_mipsel_haiku.c:205 ehppaelf.c:230 ehppalinux.c:230 ehppanbsd.c:230
#: ehppaobsd.c:230 em68hc11elf.c:295 em68hc11elfb.c:295 em68hc12elf.c:295
#: em68hc12elfb.c:295 enios2elf.c:223 enios2linux.c:223
msgid "%X%P: can not make stub section: %E\n"
@@ -2649,58 +2808,64 @@ msgstr "%X%P: не могу да направим одељак окрајка: %
#: eaarch64cloudabi.c:266 eaarch64cloudabib.c:266 eaarch64elf.c:265
#: eaarch64elf32.c:265 eaarch64elf32b.c:265 eaarch64elfb.c:265
-#: eaarch64fbsd.c:266 eaarch64fbsdb.c:266 eaarch64linux.c:266
-#: eaarch64linux32.c:266 eaarch64linux32b.c:266 eaarch64linuxb.c:266
-#: earcelf.c:96 earclinux.c:97 earclinux_nps.c:97 earcv2elf.c:96
-#: earcv2elfx.c:96 earmelf.c:404 earmelf_fbsd.c:404 earmelf_fuchsia.c:405
-#: earmelf_linux.c:405 earmelf_linux_eabi.c:405 earmelf_linux_fdpiceabi.c:405
-#: earmelf_nacl.c:405 earmelf_nbsd.c:404 earmelf_phoenix.c:405
-#: earmelf_vxworks.c:404 earmelfb.c:404 earmelfb_fbsd.c:404
-#: earmelfb_fuchsia.c:405 earmelfb_linux.c:405 earmelfb_linux_eabi.c:405
+#: eaarch64fbsd.c:266 eaarch64fbsdb.c:266 eaarch64haiku.c:266
+#: eaarch64linux.c:266 eaarch64linux32.c:266 eaarch64linux32b.c:266
+#: eaarch64linuxb.c:266 earcelf.c:96 earclinux.c:97 earclinux_nps.c:97
+#: earcv2elf.c:96 earcv2elfx.c:96 earmelf.c:404 earmelf_fbsd.c:404
+#: earmelf_fuchsia.c:405 earmelf_haiku.c:405 earmelf_linux.c:405
+#: earmelf_linux_eabi.c:405 earmelf_linux_fdpiceabi.c:405 earmelf_nacl.c:405
+#: earmelf_nbsd.c:404 earmelf_phoenix.c:405 earmelf_vxworks.c:404
+#: earmelfb.c:404 earmelfb_fbsd.c:404 earmelfb_fuchsia.c:405
+#: earmelfb_linux.c:405 earmelfb_linux_eabi.c:405
#: earmelfb_linux_fdpiceabi.c:405 earmelfb_nacl.c:405 earmelfb_nbsd.c:404
-#: earmnto.c:404 earmsymbian.c:404 eavr1.c:299 eavr2.c:299 eavr25.c:299
-#: eavr3.c:299 eavr31.c:299 eavr35.c:299 eavr4.c:299 eavr5.c:299 eavr51.c:299
-#: eavr6.c:299 eavrtiny.c:299 eavrxmega1.c:299 eavrxmega2.c:299
-#: eavrxmega3.c:299 eavrxmega4.c:299 eavrxmega5.c:299 eavrxmega6.c:299
-#: eavrxmega7.c:299 ecriself.c:96 ecrislinux.c:97 ed10velf.c:96
-#: eelf32_sparc.c:97 eelf32_sparc_sol2.c:228 eelf32_sparc_vxworks.c:126
-#: eelf32_spu.c:766 eelf32_tic6x_be.c:181 eelf32_tic6x_elf_be.c:181
-#: eelf32_tic6x_elf_le.c:181 eelf32_tic6x_le.c:181 eelf32_tic6x_linux_be.c:181
+#: earmnto.c:404 eavr1.c:299 eavr2.c:299 eavr25.c:299 eavr3.c:299 eavr31.c:299
+#: eavr35.c:299 eavr4.c:299 eavr5.c:299 eavr51.c:299 eavr6.c:299
+#: eavrtiny.c:299 eavrxmega1.c:299 eavrxmega2.c:299 eavrxmega3.c:299
+#: eavrxmega4.c:299 eavrxmega5.c:299 eavrxmega6.c:299 eavrxmega7.c:299
+#: ecriself.c:96 ecrislinux.c:97 ed10velf.c:96 eelf32_sparc.c:97
+#: eelf32_sparc_sol2.c:229 eelf32_sparc_vxworks.c:126 eelf32_spu.c:766
+#: eelf32_tic6x_be.c:181 eelf32_tic6x_elf_be.c:181 eelf32_tic6x_elf_le.c:181
+#: eelf32_tic6x_le.c:181 eelf32_tic6x_linux_be.c:181
#: eelf32_tic6x_linux_le.c:181 eelf32_x86_64.c:121 eelf32am33lin.c:96
#: eelf32b4300.c:293 eelf32bfin.c:106 eelf32bfinfd.c:106 eelf32bmip.c:293
-#: eelf32bmipn32.c:307 eelf32bsmip.c:307 eelf32btsmip.c:293
+#: eelf32bmipn32.c:307 eelf32briscv.c:89 eelf32briscv_ilp32.c:89
+#: eelf32briscv_ilp32f.c:89 eelf32bsmip.c:307 eelf32btsmip.c:293
#: eelf32btsmip_fbsd.c:293 eelf32btsmipn32.c:293 eelf32btsmipn32_fbsd.c:293
#: eelf32cr16.c:246 eelf32crx.c:133 eelf32ebmip.c:293 eelf32ebmipvxworks.c:322
#: eelf32elmip.c:293 eelf32elmipvxworks.c:322 eelf32epiphany.c:96
#: eelf32epiphany_4x4.c:98 eelf32frvfd.c:96 eelf32ip2k.c:96 eelf32l4300.c:293
-#: eelf32lm32.c:96 eelf32lm32fd.c:96 eelf32lmip.c:293 eelf32lppc.c:317
-#: eelf32lppclinux.c:317 eelf32lppcnto.c:317 eelf32lppcsim.c:317
-#: eelf32lr5900.c:293 eelf32lr5900n32.c:292 eelf32lriscv.c:89
-#: eelf32lriscv_ilp32.c:89 eelf32lriscv_ilp32f.c:89 eelf32lsmip.c:293
-#: eelf32ltsmip.c:293 eelf32ltsmip_fbsd.c:293 eelf32ltsmipn32.c:293
-#: eelf32ltsmipn32_fbsd.c:293 eelf32m32c.c:107 eelf32mb_linux.c:97
-#: eelf32mbel_linux.c:97 eelf32mcore.c:96 eelf32mep.c:96 eelf32metag.c:256
-#: eelf32microblaze.c:96 eelf32microblazeel.c:96 eelf32mipswindiss.c:292
-#: eelf32moxie.c:96 eelf32or1k.c:97 eelf32or1k_linux.c:97 eelf32ppc.c:317
-#: eelf32ppc_fbsd.c:317 eelf32ppclinux.c:317 eelf32ppcnto.c:317
+#: eelf32lm32.c:96 eelf32lm32fd.c:96 eelf32lmip.c:293 eelf32loongarch.c:88
+#: eelf32lppc.c:317 eelf32lppclinux.c:317 eelf32lppcnto.c:317
+#: eelf32lppcsim.c:317 eelf32lr5900.c:293 eelf32lr5900n32.c:292
+#: eelf32lriscv.c:89 eelf32lriscv_ilp32.c:89 eelf32lriscv_ilp32f.c:89
+#: eelf32lsmip.c:293 eelf32ltsmip.c:293 eelf32ltsmip_fbsd.c:293
+#: eelf32ltsmipn32.c:293 eelf32ltsmipn32_fbsd.c:293 eelf32m32c.c:107
+#: eelf32mb_linux.c:97 eelf32mbel_linux.c:97 eelf32mcore.c:96 eelf32mep.c:96
+#: eelf32metag.c:256 eelf32microblaze.c:96 eelf32microblazeel.c:96
+#: eelf32mipswindiss.c:292 eelf32moxie.c:96 eelf32or1k.c:97
+#: eelf32or1k_linux.c:97 eelf32ppc.c:317 eelf32ppc_fbsd.c:317
+#: eelf32ppchaiku.c:317 eelf32ppclinux.c:317 eelf32ppcnto.c:317
#: eelf32ppcsim.c:317 eelf32ppcvxworks.c:291 eelf32ppcwindiss.c:317
#: eelf32rl78.c:96 eelf32rx.c:112 eelf32rx_linux.c:109 eelf32tilegx.c:97
#: eelf32tilegx_be.c:97 eelf32tilepro.c:97 eelf32vax.c:96 eelf32visium.c:96
#: eelf32xc16x.c:96 eelf32xc16xl.c:96 eelf32xc16xs.c:96 eelf32xstormy16.c:107
#: eelf32xtensa.c:2001 eelf32z80.c:123 eelf64_aix.c:96 eelf64_ia64.c:122
#: eelf64_ia64_fbsd.c:122 eelf64_ia64_vms.c:220 eelf64_s390.c:112
-#: eelf64_sparc.c:97 eelf64_sparc_fbsd.c:97 eelf64_sparc_sol2.c:228
+#: eelf64_sparc.c:97 eelf64_sparc_fbsd.c:97 eelf64_sparc_sol2.c:229
#: eelf64alpha.c:180 eelf64alpha_fbsd.c:180 eelf64alpha_nbsd.c:180
-#: eelf64bmip.c:307 eelf64bpf.c:96 eelf64btsmip.c:293 eelf64btsmip_fbsd.c:293
-#: eelf64hppa.c:96 eelf64lppc.c:580 eelf64lriscv.c:89 eelf64lriscv_lp64.c:89
-#: eelf64lriscv_lp64f.c:89 eelf64ltsmip.c:293 eelf64ltsmip_fbsd.c:293
-#: eelf64mmix.c:207 eelf64ppc.c:580 eelf64ppc_fbsd.c:580 eelf64rdos.c:112
-#: eelf64tilegx.c:97 eelf64tilegx_be.c:97 eelf_i386.c:121 eelf_i386_be.c:120
-#: eelf_i386_fbsd.c:121 eelf_i386_ldso.c:121 eelf_i386_sol2.c:252
-#: eelf_i386_vxworks.c:150 eelf_iamcu.c:121 eelf_k1om.c:121
-#: eelf_k1om_fbsd.c:121 eelf_l1om.c:121 eelf_l1om_fbsd.c:121 eelf_s390.c:97
-#: eelf_x86_64.c:121 eelf_x86_64_cloudabi.c:121 eelf_x86_64_fbsd.c:121
-#: eelf_x86_64_sol2.c:252 eh8300elf.c:96 eh8300elf_linux.c:96 eh8300helf.c:96
+#: eelf64bmip.c:307 eelf64bpf.c:96 eelf64briscv.c:89 eelf64briscv_lp64.c:89
+#: eelf64briscv_lp64f.c:89 eelf64btsmip.c:293 eelf64btsmip_fbsd.c:293
+#: eelf64hppa.c:96 eelf64loongarch.c:88 eelf64lppc.c:592 eelf64lppc_fbsd.c:592
+#: eelf64lriscv.c:89 eelf64lriscv_lp64.c:89 eelf64lriscv_lp64f.c:89
+#: eelf64ltsmip.c:293 eelf64ltsmip_fbsd.c:293 eelf64mmix.c:207 eelf64ppc.c:592
+#: eelf64ppc_fbsd.c:592 eelf64rdos.c:112 eelf64tilegx.c:97
+#: eelf64tilegx_be.c:97 eelf_i386.c:121 eelf_i386_be.c:120
+#: eelf_i386_fbsd.c:121 eelf_i386_haiku.c:121 eelf_i386_ldso.c:121
+#: eelf_i386_sol2.c:253 eelf_i386_vxworks.c:150 eelf_iamcu.c:121
+#: eelf_k1om.c:121 eelf_k1om_fbsd.c:121 eelf_l1om.c:121 eelf_l1om_fbsd.c:121
+#: eelf_mipsel_haiku.c:293 eelf_s390.c:97 eelf_x86_64.c:121
+#: eelf_x86_64_cloudabi.c:121 eelf_x86_64_fbsd.c:121 eelf_x86_64_haiku.c:121
+#: eelf_x86_64_sol2.c:253 eh8300elf.c:96 eh8300elf_linux.c:96 eh8300helf.c:96
#: eh8300helf_linux.c:96 eh8300hnelf.c:96 eh8300self.c:96
#: eh8300self_linux.c:96 eh8300snelf.c:96 eh8300sxelf.c:96
#: eh8300sxelf_linux.c:96 eh8300sxnelf.c:96 ehppa64linux.c:96 ehppaelf.c:280
@@ -2710,49 +2875,51 @@ msgstr "%X%P: не могу да направим одељак окрајка: %
#: em68hc12elf.c:373 em68hc12elfb.c:373 em68kelf.c:248 em68kelfnbsd.c:248
#: emn10300.c:96 ends32belf.c:204 ends32belf16m.c:204 ends32belf_linux.c:204
#: ends32elf.c:204 ends32elf16m.c:204 ends32elf_linux.c:204 enios2elf.c:273
-#: enios2linux.c:273 eppclynx.c:317 epruelf.c:117 escore3_elf.c:117
-#: escore7_elf.c:117 eshelf.c:96 eshelf_fd.c:97 eshelf_linux.c:97
-#: eshelf_nbsd.c:96 eshelf_nto.c:96 eshelf_uclinux.c:96 eshelf_vxworks.c:125
-#: eshlelf.c:96 eshlelf_fd.c:97 eshlelf_linux.c:97 eshlelf_nbsd.c:96
-#: eshlelf_nto.c:96 eshlelf_vxworks.c:125 ev850.c:143 ev850_rh850.c:143
+#: enios2linux.c:273 epruelf.c:117 escore3_elf.c:117 escore7_elf.c:117
+#: eshelf.c:96 eshelf_fd.c:97 eshelf_linux.c:97 eshelf_nbsd.c:96
+#: eshelf_nto.c:96 eshelf_uclinux.c:96 eshelf_vxworks.c:125 eshlelf.c:96
+#: eshlelf_fd.c:97 eshlelf_linux.c:97 eshlelf_nbsd.c:96 eshlelf_nto.c:96
+#: eshlelf_vxworks.c:125 ev850.c:143 ev850_rh850.c:143
msgid "%X%P: .eh_frame/.stab edit: %E\n"
msgstr "%X%P: „.eh_frame/.stab“ уређује: %E\n"
#: eaarch64cloudabi.c:282 eaarch64cloudabib.c:282 eaarch64elf.c:281
#: eaarch64elf32.c:281 eaarch64elf32b.c:281 eaarch64elfb.c:281
-#: eaarch64fbsd.c:282 eaarch64fbsdb.c:282 eaarch64linux.c:282
-#: eaarch64linux32.c:282 eaarch64linux32b.c:282 eaarch64linuxb.c:282
-#: earmelf.c:419 earmelf_fbsd.c:419 earmelf_fuchsia.c:420 earmelf_linux.c:420
-#: earmelf_linux_eabi.c:420 earmelf_linux_fdpiceabi.c:420 earmelf_nacl.c:420
-#: earmelf_nbsd.c:419 earmelf_phoenix.c:420 earmelf_vxworks.c:419
-#: earmelfb.c:419 earmelfb_fbsd.c:419 earmelfb_fuchsia.c:420
-#: earmelfb_linux.c:420 earmelfb_linux_eabi.c:420
-#: earmelfb_linux_fdpiceabi.c:420 earmelfb_nacl.c:420 earmelfb_nbsd.c:419
-#: earmnto.c:419 earmsymbian.c:419 ecskyelf.c:260 ecskyelf_linux.c:260
+#: eaarch64fbsd.c:282 eaarch64fbsdb.c:282 eaarch64haiku.c:282
+#: eaarch64linux.c:282 eaarch64linux32.c:282 eaarch64linux32b.c:282
+#: eaarch64linuxb.c:282 earmelf.c:419 earmelf_fbsd.c:419 earmelf_fuchsia.c:420
+#: earmelf_haiku.c:420 earmelf_linux.c:420 earmelf_linux_eabi.c:420
+#: earmelf_linux_fdpiceabi.c:420 earmelf_nacl.c:420 earmelf_nbsd.c:419
+#: earmelf_phoenix.c:420 earmelf_vxworks.c:419 earmelfb.c:419
+#: earmelfb_fbsd.c:419 earmelfb_fuchsia.c:420 earmelfb_linux.c:420
+#: earmelfb_linux_eabi.c:420 earmelfb_linux_fdpiceabi.c:420
+#: earmelfb_nacl.c:420 earmelfb_nbsd.c:419 earmnto.c:419 ecskyelf.c:260
+#: ecskyelf_linux.c:260
msgid "%X%P: could not compute sections lists for stub generation: %E\n"
msgstr "%X%P: не могу да израчунам ÑпиÑкове одељака за Ñтварање окрајка: %E\n"
#: eaarch64cloudabi.c:297 eaarch64cloudabib.c:297 eaarch64elf.c:296
#: eaarch64elf32.c:296 eaarch64elf32b.c:296 eaarch64elfb.c:296
-#: eaarch64fbsd.c:297 eaarch64fbsdb.c:297 eaarch64linux.c:297
-#: eaarch64linux32.c:297 eaarch64linux32b.c:297 eaarch64linuxb.c:297
-#: earmelf.c:434 earmelf_fbsd.c:434 earmelf_fuchsia.c:435 earmelf_linux.c:435
-#: earmelf_linux_eabi.c:435 earmelf_linux_fdpiceabi.c:435 earmelf_nacl.c:435
-#: earmelf_nbsd.c:434 earmelf_phoenix.c:435 earmelf_vxworks.c:434
-#: earmelfb.c:434 earmelfb_fbsd.c:434 earmelfb_fuchsia.c:435
-#: earmelfb_linux.c:435 earmelfb_linux_eabi.c:435
-#: earmelfb_linux_fdpiceabi.c:435 earmelfb_nacl.c:435 earmelfb_nbsd.c:434
-#: earmnto.c:434 earmsymbian.c:434 eavr1.c:129 eavr1.c:192 eavr2.c:129
-#: eavr2.c:192 eavr25.c:129 eavr25.c:192 eavr3.c:129 eavr3.c:192 eavr31.c:129
-#: eavr31.c:192 eavr35.c:129 eavr35.c:192 eavr4.c:129 eavr4.c:192 eavr5.c:129
-#: eavr5.c:192 eavr51.c:129 eavr51.c:192 eavr6.c:129 eavr6.c:192
-#: eavrtiny.c:129 eavrtiny.c:192 eavrxmega1.c:129 eavrxmega1.c:192
+#: eaarch64fbsd.c:297 eaarch64fbsdb.c:297 eaarch64haiku.c:297
+#: eaarch64linux.c:297 eaarch64linux32.c:297 eaarch64linux32b.c:297
+#: eaarch64linuxb.c:297 earmelf.c:434 earmelf_fbsd.c:434 earmelf_fuchsia.c:435
+#: earmelf_haiku.c:435 earmelf_linux.c:435 earmelf_linux_eabi.c:435
+#: earmelf_linux_fdpiceabi.c:435 earmelf_nacl.c:435 earmelf_nbsd.c:434
+#: earmelf_phoenix.c:435 earmelf_vxworks.c:434 earmelfb.c:434
+#: earmelfb_fbsd.c:434 earmelfb_fuchsia.c:435 earmelfb_linux.c:435
+#: earmelfb_linux_eabi.c:435 earmelfb_linux_fdpiceabi.c:435
+#: earmelfb_nacl.c:435 earmelfb_nbsd.c:434 earmnto.c:434 eavr1.c:129
+#: eavr1.c:192 eavr2.c:129 eavr2.c:192 eavr25.c:129 eavr25.c:192 eavr3.c:129
+#: eavr3.c:192 eavr31.c:129 eavr31.c:192 eavr35.c:129 eavr35.c:192 eavr4.c:129
+#: eavr4.c:192 eavr5.c:129 eavr5.c:192 eavr51.c:129 eavr51.c:192 eavr6.c:129
+#: eavr6.c:192 eavrtiny.c:129 eavrtiny.c:192 eavrxmega1.c:129 eavrxmega1.c:192
#: eavrxmega2.c:129 eavrxmega2.c:192 eavrxmega3.c:129 eavrxmega3.c:192
#: eavrxmega4.c:129 eavrxmega4.c:192 eavrxmega5.c:129 eavrxmega5.c:192
#: eavrxmega6.c:129 eavrxmega6.c:192 eavrxmega7.c:129 eavrxmega7.c:192
-#: eelf32metag.c:271 eelf32metag.c:285 eelf64lppc.c:523 eelf64lppc.c:542
-#: eelf64lppc.c:569 eelf64ppc.c:523 eelf64ppc.c:542 eelf64ppc.c:569
-#: eelf64ppc_fbsd.c:523 eelf64ppc_fbsd.c:542 eelf64ppc_fbsd.c:569
+#: eelf32metag.c:271 eelf32metag.c:285 eelf64lppc.c:535 eelf64lppc.c:554
+#: eelf64lppc.c:581 eelf64lppc_fbsd.c:535 eelf64lppc_fbsd.c:554
+#: eelf64lppc_fbsd.c:581 eelf64ppc.c:535 eelf64ppc.c:554 eelf64ppc.c:581
+#: eelf64ppc_fbsd.c:535 eelf64ppc_fbsd.c:554 eelf64ppc_fbsd.c:581
#: ehppaelf.c:295 ehppaelf.c:310 ehppalinux.c:295 ehppalinux.c:310
#: ehppanbsd.c:295 ehppanbsd.c:310 ehppaobsd.c:295 ehppaobsd.c:310
#: em68hc11elf.c:90 em68hc11elf.c:100 em68hc11elf.c:317 em68hc11elfb.c:90
@@ -2764,22 +2931,23 @@ msgstr "%X%P: не могу да одрадим величину одељка о
#: eaarch64cloudabi.c:316 eaarch64cloudabib.c:316 eaarch64elf.c:315
#: eaarch64elf32.c:315 eaarch64elf32b.c:315 eaarch64elfb.c:315
-#: eaarch64fbsd.c:316 eaarch64fbsdb.c:316 eaarch64linux.c:316
-#: eaarch64linux32.c:316 eaarch64linux32b.c:316 eaarch64linuxb.c:316
-#: earmelf.c:468 earmelf_fbsd.c:468 earmelf_fuchsia.c:469 earmelf_linux.c:469
-#: earmelf_linux_eabi.c:469 earmelf_linux_fdpiceabi.c:469 earmelf_nacl.c:469
-#: earmelf_nbsd.c:468 earmelf_phoenix.c:469 earmelf_vxworks.c:468
-#: earmelfb.c:468 earmelfb_fbsd.c:468 earmelfb_fuchsia.c:469
-#: earmelfb_linux.c:469 earmelfb_linux_eabi.c:469
-#: earmelfb_linux_fdpiceabi.c:469 earmelfb_nacl.c:469 earmelfb_nbsd.c:468
-#: earmnto.c:468 earmsymbian.c:468 eavr1.c:201 eavr2.c:201 eavr25.c:201
-#: eavr3.c:201 eavr31.c:201 eavr35.c:201 eavr4.c:201 eavr5.c:201 eavr51.c:201
-#: eavr6.c:201 eavrtiny.c:201 eavrxmega1.c:201 eavrxmega2.c:201
-#: eavrxmega3.c:201 eavrxmega4.c:201 eavrxmega5.c:201 eavrxmega6.c:201
-#: eavrxmega7.c:201 eelf32metag.c:300 eelf64lppc.c:619 eelf64ppc.c:619
-#: eelf64ppc_fbsd.c:619 ehppaelf.c:332 ehppalinux.c:332 ehppanbsd.c:332
-#: ehppaobsd.c:332 em68hc11elf.c:321 em68hc11elfb.c:321 em68hc12elf.c:321
-#: em68hc12elfb.c:321 enios2elf.c:318 enios2linux.c:318
+#: eaarch64fbsd.c:316 eaarch64fbsdb.c:316 eaarch64haiku.c:316
+#: eaarch64linux.c:316 eaarch64linux32.c:316 eaarch64linux32b.c:316
+#: eaarch64linuxb.c:316 earmelf.c:468 earmelf_fbsd.c:468 earmelf_fuchsia.c:469
+#: earmelf_haiku.c:469 earmelf_linux.c:469 earmelf_linux_eabi.c:469
+#: earmelf_linux_fdpiceabi.c:469 earmelf_nacl.c:469 earmelf_nbsd.c:468
+#: earmelf_phoenix.c:469 earmelf_vxworks.c:468 earmelfb.c:468
+#: earmelfb_fbsd.c:468 earmelfb_fuchsia.c:469 earmelfb_linux.c:469
+#: earmelfb_linux_eabi.c:469 earmelfb_linux_fdpiceabi.c:469
+#: earmelfb_nacl.c:469 earmelfb_nbsd.c:468 earmnto.c:468 eavr1.c:201
+#: eavr2.c:201 eavr25.c:201 eavr3.c:201 eavr31.c:201 eavr35.c:201 eavr4.c:201
+#: eavr5.c:201 eavr51.c:201 eavr6.c:201 eavrtiny.c:201 eavrxmega1.c:201
+#: eavrxmega2.c:201 eavrxmega3.c:201 eavrxmega4.c:201 eavrxmega5.c:201
+#: eavrxmega6.c:201 eavrxmega7.c:201 eelf32metag.c:300 eelf64lppc.c:631
+#: eelf64lppc_fbsd.c:631 eelf64ppc.c:631 eelf64ppc_fbsd.c:631 ehppaelf.c:332
+#: ehppalinux.c:332 ehppanbsd.c:332 ehppaobsd.c:332 em68hc11elf.c:321
+#: em68hc11elfb.c:321 em68hc12elf.c:321 em68hc12elfb.c:321 enios2elf.c:318
+#: enios2linux.c:318
msgid "%X%P: can not build stubs: %E\n"
msgstr "%X%P: не могу да изградим окрајке: %E\n"
@@ -2796,10 +2964,6 @@ msgstr "%X%P: не могу да изградим окрајке: %E\n"
#. hence we do not support linking and changing output formats at the
#. same time. Use a link followed by objcopy to change output formats.
#. Check the output target is nds32.
-#. The arm backend needs special fields in the output hash structure.
-#. These will only be created if the output format is an arm format,
-#. hence we do not support linking and changing output formats at the
-#. same time. Use a link followed by objcopy to change output formats.
#. The score backend needs special fields in the output hash structure.
#. These will only be created if the output format is an score format,
#. hence we do not support linking and changing output formats at the
@@ -2814,604 +2978,640 @@ msgstr "%X%P: не могу да изградим окрајке: %E\n"
#. same time. Use a link followed by objcopy to change output formats.
#: eaarch64cloudabi.c:334 eaarch64cloudabib.c:334 eaarch64elf.c:333
#: eaarch64elf32.c:333 eaarch64elf32b.c:333 eaarch64elfb.c:333
-#: eaarch64fbsd.c:334 eaarch64fbsdb.c:334 eaarch64linux.c:334
-#: eaarch64linux32.c:334 eaarch64linux32b.c:334 eaarch64linuxb.c:334
-#: earm_wince_pe.c:1377 earmelf.c:540 earmelf_fbsd.c:540 earmelf_fuchsia.c:541
-#: earmelf_linux.c:541 earmelf_linux_eabi.c:541 earmelf_linux_fdpiceabi.c:541
-#: earmelf_nacl.c:541 earmelf_nbsd.c:540 earmelf_phoenix.c:541
-#: earmelf_vxworks.c:540 earmelfb.c:540 earmelfb_fbsd.c:540
-#: earmelfb_fuchsia.c:541 earmelfb_linux.c:541 earmelfb_linux_eabi.c:541
+#: eaarch64fbsd.c:334 eaarch64fbsdb.c:334 eaarch64haiku.c:334
+#: eaarch64linux.c:334 eaarch64linux32.c:334 eaarch64linux32b.c:334
+#: eaarch64linuxb.c:334 earm_wince_pe.c:1426 earmelf.c:540 earmelf_fbsd.c:540
+#: earmelf_fuchsia.c:541 earmelf_haiku.c:541 earmelf_linux.c:541
+#: earmelf_linux_eabi.c:541 earmelf_linux_fdpiceabi.c:541 earmelf_nacl.c:541
+#: earmelf_nbsd.c:540 earmelf_phoenix.c:541 earmelf_vxworks.c:540
+#: earmelfb.c:540 earmelfb_fbsd.c:540 earmelfb_fuchsia.c:541
+#: earmelfb_linux.c:541 earmelfb_linux_eabi.c:541
#: earmelfb_linux_fdpiceabi.c:541 earmelfb_nacl.c:541 earmelfb_nbsd.c:540
-#: earmnto.c:540 earmpe.c:1377 earmsymbian.c:540 eavr1.c:142 eavr2.c:142
-#: eavr25.c:142 eavr3.c:142 eavr31.c:142 eavr35.c:142 eavr4.c:142 eavr5.c:142
-#: eavr51.c:142 eavr6.c:142 eavrtiny.c:142 eavrxmega1.c:142 eavrxmega2.c:142
+#: earmnto.c:540 earmpe.c:1426 eavr1.c:142 eavr2.c:142 eavr25.c:142
+#: eavr3.c:142 eavr31.c:142 eavr35.c:142 eavr4.c:142 eavr5.c:142 eavr51.c:142
+#: eavr6.c:142 eavrtiny.c:142 eavrxmega1.c:142 eavrxmega2.c:142
#: eavrxmega3.c:142 eavrxmega4.c:142 eavrxmega5.c:142 eavrxmega6.c:142
-#: eavrxmega7.c:142 eelf32lriscv.c:110 eelf32lriscv_ilp32.c:110
-#: eelf32lriscv_ilp32f.c:110 eelf64lriscv.c:110 eelf64lriscv_lp64.c:110
-#: eelf64lriscv_lp64f.c:110 ei386pe.c:1377 ei386pe_posix.c:1377
-#: emcorepe.c:1377 ends32belf.c:74 ends32belf16m.c:74 ends32belf_linux.c:74
-#: ends32elf.c:74 ends32elf16m.c:74 ends32elf_linux.c:74 eppcpe.c:1377
-#: escore3_elf.c:75 escore7_elf.c:75 eshpe.c:1377 ev850.c:91 ev850_rh850.c:91
+#: eavrxmega7.c:142 eelf32briscv.c:124 eelf32briscv_ilp32.c:124
+#: eelf32briscv_ilp32f.c:124 eelf32loongarch.c:106 eelf32lriscv.c:124
+#: eelf32lriscv_ilp32.c:124 eelf32lriscv_ilp32f.c:124 eelf64briscv.c:124
+#: eelf64briscv_lp64.c:124 eelf64briscv_lp64f.c:124 eelf64loongarch.c:106
+#: eelf64lriscv.c:124 eelf64lriscv_lp64.c:124 eelf64lriscv_lp64f.c:124
+#: ei386pe.c:1426 ei386pe_posix.c:1426 emcorepe.c:1426 ends32belf.c:74
+#: ends32belf16m.c:74 ends32belf_linux.c:74 ends32elf.c:74 ends32elf16m.c:74
+#: ends32elf_linux.c:74 escore3_elf.c:75 escore7_elf.c:75 eshpe.c:1426
+#: ev850.c:91 ev850_rh850.c:91
msgid "%F%P: error: cannot change output format whilst linking %s binaries\n"
msgstr "%F%P: грешка: не могу да изменим излазни Ð·Ð°Ð¿Ð¸Ñ Ð´Ð¾Ðº повезујем „%s“ извршне\n"
#: eaarch64cloudabi.c:570 eaarch64cloudabib.c:570 eaarch64elf.c:569
#: eaarch64elf32.c:569 eaarch64elf32b.c:569 eaarch64elfb.c:569
-#: eaarch64fbsd.c:570 eaarch64fbsdb.c:570 eaarch64linux.c:570
-#: eaarch64linux32.c:570 eaarch64linux32b.c:570 eaarch64linuxb.c:570
-#: earcelf.c:202 earclinux.c:258 earclinux_nps.c:258 earcv2elf.c:186
-#: earcv2elfx.c:186 earmelf.c:812 earmelf_fbsd.c:812 earmelf_fuchsia.c:813
-#: earmelf_linux.c:813 earmelf_linux_eabi.c:813 earmelf_linux_fdpiceabi.c:813
-#: earmelf_nacl.c:813 earmelf_nbsd.c:812 earmelf_phoenix.c:813
-#: earmelf_vxworks.c:848 earmelfb.c:812 earmelfb_fbsd.c:812
-#: earmelfb_fuchsia.c:813 earmelfb_linux.c:813 earmelfb_linux_eabi.c:813
+#: eaarch64fbsd.c:570 eaarch64fbsdb.c:570 eaarch64haiku.c:570
+#: eaarch64linux.c:570 eaarch64linux32.c:570 eaarch64linux32b.c:570
+#: eaarch64linuxb.c:570 earcelf.c:202 earclinux.c:258 earclinux_nps.c:258
+#: earcv2elf.c:186 earcv2elfx.c:186 earmelf.c:812 earmelf_fbsd.c:812
+#: earmelf_fuchsia.c:813 earmelf_haiku.c:813 earmelf_linux.c:813
+#: earmelf_linux_eabi.c:813 earmelf_linux_fdpiceabi.c:813 earmelf_nacl.c:813
+#: earmelf_nbsd.c:812 earmelf_phoenix.c:813 earmelf_vxworks.c:848
+#: earmelfb.c:812 earmelfb_fbsd.c:812 earmelfb_fuchsia.c:813
+#: earmelfb_linux.c:813 earmelfb_linux_eabi.c:813
#: earmelfb_linux_fdpiceabi.c:813 earmelfb_nacl.c:813 earmelfb_nbsd.c:812
-#: earmnto.c:787 earmsymbian.c:812 eavr1.c:409 eavr2.c:409 eavr25.c:409
-#: eavr3.c:409 eavr31.c:409 eavr35.c:409 eavr4.c:409 eavr5.c:409 eavr51.c:409
-#: eavr6.c:409 eavrtiny.c:409 eavrxmega1.c:409 eavrxmega2.c:409
-#: eavrxmega3.c:409 eavrxmega4.c:409 eavrxmega5.c:409 eavrxmega6.c:409
-#: eavrxmega7.c:409 ecriself.c:201 ecrislinux.c:233 ecskyelf.c:445
-#: ecskyelf_linux.c:502 ed10velf.c:186 eelf32_sparc.c:258
-#: eelf32_sparc_sol2.c:389 eelf32_sparc_vxworks.c:295 eelf32_spu.c:919
-#: eelf32_tic6x_be.c:369 eelf32_tic6x_elf_be.c:369 eelf32_tic6x_elf_le.c:369
-#: eelf32_tic6x_le.c:369 eelf32_tic6x_linux_be.c:369
-#: eelf32_tic6x_linux_le.c:369 eelf32_x86_64.c:5195 eelf32am33lin.c:232
-#: eelf32b4300.c:473 eelf32bfin.c:250 eelf32bfinfd.c:275 eelf32bmip.c:473
-#: eelf32bmipn32.c:487 eelf32bsmip.c:487 eelf32btsmip.c:473
-#: eelf32btsmip_fbsd.c:473 eelf32btsmipn32.c:473 eelf32btsmipn32_fbsd.c:473
-#: eelf32cr16.c:336 eelf32crx.c:223 eelf32ebmip.c:473 eelf32ebmipvxworks.c:508
-#: eelf32elmip.c:473 eelf32elmipvxworks.c:508 eelf32epiphany.c:201
-#: eelf32epiphany_4x4.c:188 eelf32frvfd.c:257 eelf32ip2k.c:201
-#: eelf32l4300.c:473 eelf32lm32.c:201 eelf32lm32fd.c:257 eelf32lmip.c:473
-#: eelf32lppc.c:521 eelf32lppclinux.c:521 eelf32lppcnto.c:521
-#: eelf32lppcsim.c:521 eelf32lr5900.c:442 eelf32lr5900n32.c:441
-#: eelf32lriscv.c:312 eelf32lriscv_ilp32.c:312 eelf32lriscv_ilp32f.c:312
-#: eelf32lsmip.c:473 eelf32ltsmip.c:473 eelf32ltsmip_fbsd.c:473
-#: eelf32ltsmipn32.c:473 eelf32ltsmipn32_fbsd.c:473 eelf32m32c.c:212
-#: eelf32mb_linux.c:258 eelf32mbel_linux.c:258 eelf32mcore.c:207
-#: eelf32mep.c:186 eelf32metag.c:507 eelf32microblaze.c:186
-#: eelf32microblazeel.c:186 eelf32mipswindiss.c:416 eelf32moxie.c:201
-#: eelf32or1k.c:202 eelf32or1k_linux.c:258 eelf32ppc.c:521
-#: eelf32ppc_fbsd.c:521 eelf32ppclinux.c:521 eelf32ppcnto.c:521
-#: eelf32ppcsim.c:521 eelf32ppcvxworks.c:495 eelf32ppcwindiss.c:521
-#: eelf32rl78.c:201 eelf32rx.c:229 eelf32rx_linux.c:214 eelf32tilegx.c:258
-#: eelf32tilegx_be.c:258 eelf32tilepro.c:258 eelf32vax.c:232
-#: eelf32visium.c:186 eelf32xc16x.c:186 eelf32xc16xl.c:186 eelf32xc16xs.c:186
-#: eelf32xstormy16.c:197 eelf32xtensa.c:2179 eelf32z80.c:213 eelf64_aix.c:232
-#: eelf64_ia64.c:289 eelf64_ia64_fbsd.c:289 eelf64_s390.c:328
-#: eelf64_sparc.c:258 eelf64_sparc_fbsd.c:258 eelf64_sparc_sol2.c:389
-#: eelf64alpha.c:351 eelf64alpha_fbsd.c:351 eelf64alpha_nbsd.c:351
-#: eelf64bmip.c:487 eelf64bpf.c:186 eelf64btsmip.c:473 eelf64btsmip_fbsd.c:473
-#: eelf64hppa.c:202 eelf64lppc.c:952 eelf64lriscv.c:312
-#: eelf64lriscv_lp64.c:312 eelf64lriscv_lp64f.c:312 eelf64ltsmip.c:473
-#: eelf64ltsmip_fbsd.c:473 eelf64mmix.c:4009 eelf64ppc.c:952
-#: eelf64ppc_fbsd.c:952 eelf64rdos.c:283 eelf64tilegx.c:258
-#: eelf64tilegx_be.c:258 eelf_i386.c:4817 eelf_i386_be.c:256
-#: eelf_i386_fbsd.c:292 eelf_i386_ldso.c:267 eelf_i386_sol2.c:423
-#: eelf_i386_vxworks.c:319 eelf_iamcu.c:4795 eelf_k1om.c:5151
-#: eelf_k1om_fbsd.c:5131 eelf_l1om.c:5151 eelf_l1om_fbsd.c:5131
-#: eelf_s390.c:258 eelf_x86_64.c:5195 eelf_x86_64_cloudabi.c:292
-#: eelf_x86_64_fbsd.c:292 eelf_x86_64_sol2.c:423 eh8300elf.c:201
-#: eh8300elf_linux.c:201 eh8300helf.c:201 eh8300helf_linux.c:201
-#: eh8300hnelf.c:201 eh8300self.c:201 eh8300self_linux.c:201 eh8300snelf.c:201
-#: eh8300sxelf.c:201 eh8300sxelf_linux.c:201 eh8300sxnelf.c:201
-#: ehppa64linux.c:232 ehppaelf.c:469 ehppalinux.c:541 ehppanbsd.c:541
-#: ehppaobsd.c:541 ei386lynx.c:247 ei386moss.c:247 ei386nto.c:247
-#: em32relf.c:201 em32relf_linux.c:257 em32rlelf.c:201 em32rlelf_linux.c:257
+#: earmnto.c:787 eavr1.c:409 eavr2.c:409 eavr25.c:409 eavr3.c:409 eavr31.c:409
+#: eavr35.c:409 eavr4.c:409 eavr5.c:409 eavr51.c:409 eavr6.c:409
+#: eavrtiny.c:409 eavrxmega1.c:409 eavrxmega2.c:409 eavrxmega3.c:409
+#: eavrxmega4.c:409 eavrxmega5.c:409 eavrxmega6.c:409 eavrxmega7.c:409
+#: ecriself.c:201 ecrislinux.c:233 ecskyelf.c:445 ecskyelf_linux.c:502
+#: ed10velf.c:186 eelf32_sparc.c:258 eelf32_sparc_sol2.c:390
+#: eelf32_sparc_vxworks.c:295 eelf32_spu.c:919 eelf32_tic6x_be.c:369
+#: eelf32_tic6x_elf_be.c:369 eelf32_tic6x_elf_le.c:369 eelf32_tic6x_le.c:369
+#: eelf32_tic6x_linux_be.c:369 eelf32_tic6x_linux_le.c:369
+#: eelf32_x86_64.c:5349 eelf32am33lin.c:232 eelf32b4300.c:473 eelf32bfin.c:250
+#: eelf32bfinfd.c:275 eelf32bmip.c:473 eelf32bmipn32.c:487 eelf32briscv.c:326
+#: eelf32briscv_ilp32.c:326 eelf32briscv_ilp32f.c:326 eelf32bsmip.c:487
+#: eelf32btsmip.c:473 eelf32btsmip_fbsd.c:473 eelf32btsmipn32.c:473
+#: eelf32btsmipn32_fbsd.c:473 eelf32cr16.c:336 eelf32crx.c:223
+#: eelf32ebmip.c:473 eelf32ebmipvxworks.c:508 eelf32elmip.c:473
+#: eelf32elmipvxworks.c:508 eelf32epiphany.c:201 eelf32epiphany_4x4.c:188
+#: eelf32frvfd.c:257 eelf32ip2k.c:201 eelf32l4300.c:473 eelf32lm32.c:201
+#: eelf32lm32fd.c:257 eelf32lmip.c:473 eelf32loongarch.c:308 eelf32lppc.c:521
+#: eelf32lppclinux.c:521 eelf32lppcnto.c:521 eelf32lppcsim.c:521
+#: eelf32lr5900.c:442 eelf32lr5900n32.c:441 eelf32lriscv.c:326
+#: eelf32lriscv_ilp32.c:326 eelf32lriscv_ilp32f.c:326 eelf32lsmip.c:473
+#: eelf32ltsmip.c:473 eelf32ltsmip_fbsd.c:473 eelf32ltsmipn32.c:473
+#: eelf32ltsmipn32_fbsd.c:473 eelf32m32c.c:212 eelf32mb_linux.c:258
+#: eelf32mbel_linux.c:258 eelf32mcore.c:207 eelf32mep.c:186 eelf32metag.c:507
+#: eelf32microblaze.c:186 eelf32microblazeel.c:186 eelf32mipswindiss.c:416
+#: eelf32moxie.c:201 eelf32or1k.c:202 eelf32or1k_linux.c:258 eelf32ppc.c:521
+#: eelf32ppc_fbsd.c:521 eelf32ppchaiku.c:521 eelf32ppclinux.c:521
+#: eelf32ppcnto.c:521 eelf32ppcsim.c:521 eelf32ppcvxworks.c:495
+#: eelf32ppcwindiss.c:521 eelf32rl78.c:201 eelf32rx.c:229 eelf32rx_linux.c:214
+#: eelf32tilegx.c:258 eelf32tilegx_be.c:258 eelf32tilepro.c:258
+#: eelf32vax.c:232 eelf32visium.c:186 eelf32xc16x.c:186 eelf32xc16xl.c:186
+#: eelf32xc16xs.c:186 eelf32xstormy16.c:197 eelf32xtensa.c:2179
+#: eelf32z80.c:213 eelf64_aix.c:232 eelf64_ia64.c:289 eelf64_ia64_fbsd.c:289
+#: eelf64_s390.c:328 eelf64_sparc.c:258 eelf64_sparc_fbsd.c:258
+#: eelf64_sparc_sol2.c:390 eelf64alpha.c:351 eelf64alpha_fbsd.c:351
+#: eelf64alpha_nbsd.c:351 eelf64bmip.c:487 eelf64bpf.c:186 eelf64briscv.c:326
+#: eelf64briscv_lp64.c:326 eelf64briscv_lp64f.c:326 eelf64btsmip.c:473
+#: eelf64btsmip_fbsd.c:473 eelf64hppa.c:202 eelf64loongarch.c:308
+#: eelf64lppc.c:970 eelf64lppc_fbsd.c:970 eelf64lriscv.c:326
+#: eelf64lriscv_lp64.c:326 eelf64lriscv_lp64f.c:326 eelf64ltsmip.c:473
+#: eelf64ltsmip_fbsd.c:473 eelf64mmix.c:343 eelf64ppc.c:970
+#: eelf64ppc_fbsd.c:970 eelf64rdos.c:283 eelf64tilegx.c:258
+#: eelf64tilegx_be.c:258 eelf_i386.c:4971 eelf_i386_be.c:256
+#: eelf_i386_fbsd.c:292 eelf_i386_haiku.c:292 eelf_i386_ldso.c:267
+#: eelf_i386_sol2.c:424 eelf_i386_vxworks.c:319 eelf_iamcu.c:292
+#: eelf_k1om.c:5283 eelf_k1om_fbsd.c:292 eelf_l1om.c:5283 eelf_l1om_fbsd.c:292
+#: eelf_mipsel_haiku.c:473 eelf_s390.c:258 eelf_x86_64.c:5349
+#: eelf_x86_64_cloudabi.c:292 eelf_x86_64_fbsd.c:292 eelf_x86_64_haiku.c:292
+#: eelf_x86_64_sol2.c:424 eh8300elf.c:201 eh8300elf_linux.c:201
+#: eh8300helf.c:201 eh8300helf_linux.c:201 eh8300hnelf.c:201 eh8300self.c:201
+#: eh8300self_linux.c:201 eh8300snelf.c:201 eh8300sxelf.c:201
+#: eh8300sxelf_linux.c:201 eh8300sxnelf.c:201 ehppa64linux.c:232
+#: ehppaelf.c:469 ehppalinux.c:541 ehppanbsd.c:541 ehppaobsd.c:541
+#: ei386lynx.c:247 ei386moss.c:247 ei386nto.c:247 em32relf.c:201
+#: em32relf_linux.c:257 em32rlelf.c:201 em32rlelf_linux.c:257
#: em68hc11elf.c:471 em68hc11elfb.c:471 em68hc12elf.c:471 em68hc12elfb.c:471
#: em68kelf.c:415 em68kelfnbsd.c:415 emn10300.c:232 ends32belf.c:322
#: ends32belf16m.c:322 ends32belf_linux.c:345 ends32elf.c:322
#: ends32elf16m.c:322 ends32elf_linux.c:345 enios2elf.c:488 enios2linux.c:519
-#: eppclynx.c:521 epruelf.c:207 escore3_elf.c:253 escore7_elf.c:253
-#: eshelf.c:232 eshelf_fd.c:258 eshelf_linux.c:258 eshelf_nbsd.c:232
-#: eshelf_nto.c:232 eshelf_uclinux.c:232 eshelf_vxworks.c:269 eshlelf.c:232
-#: eshlelf_fd.c:258 eshlelf_linux.c:258 eshlelf_nbsd.c:232 eshlelf_nto.c:232
+#: epruelf.c:207 escore3_elf.c:253 escore7_elf.c:253 eshelf.c:232
+#: eshelf_fd.c:258 eshelf_linux.c:258 eshelf_nbsd.c:232 eshelf_nto.c:232
+#: eshelf_uclinux.c:232 eshelf_vxworks.c:269 eshlelf.c:232 eshlelf_fd.c:258
+#: eshlelf_linux.c:258 eshlelf_nbsd.c:232 eshlelf_nto.c:232
#: eshlelf_vxworks.c:269 ev850.c:233 ev850_rh850.c:233
msgid "%F%P: invalid --compress-debug-sections option: `%s'\n"
msgstr "%F%P: неиÑправна „--compress-debug-sections“ одељка: %s\n"
#: eaarch64cloudabi.c:621 eaarch64cloudabib.c:621 eaarch64elf.c:620
#: eaarch64elf32.c:620 eaarch64elf32b.c:620 eaarch64elfb.c:620
-#: eaarch64fbsd.c:621 eaarch64fbsdb.c:621 eaarch64linux.c:621
-#: eaarch64linux32.c:621 eaarch64linux32b.c:621 eaarch64linuxb.c:621
-#: earcelf.c:253 earclinux.c:309 earclinux_nps.c:309 earmelf.c:863
-#: earmelf_fbsd.c:863 earmelf_fuchsia.c:864 earmelf_linux.c:864
-#: earmelf_linux_eabi.c:864 earmelf_linux_fdpiceabi.c:864 earmelf_nacl.c:864
-#: earmelf_nbsd.c:863 earmelf_phoenix.c:864 earmelf_vxworks.c:899
-#: earmelfb.c:863 earmelfb_fbsd.c:863 earmelfb_fuchsia.c:864
-#: earmelfb_linux.c:864 earmelfb_linux_eabi.c:864
+#: eaarch64fbsd.c:621 eaarch64fbsdb.c:621 eaarch64haiku.c:621
+#: eaarch64linux.c:621 eaarch64linux32.c:621 eaarch64linux32b.c:621
+#: eaarch64linuxb.c:621 earcelf.c:253 earclinux.c:309 earclinux_nps.c:309
+#: earmelf.c:863 earmelf_fbsd.c:863 earmelf_fuchsia.c:864 earmelf_haiku.c:864
+#: earmelf_linux.c:864 earmelf_linux_eabi.c:864 earmelf_linux_fdpiceabi.c:864
+#: earmelf_nacl.c:864 earmelf_nbsd.c:863 earmelf_phoenix.c:864
+#: earmelf_vxworks.c:899 earmelfb.c:863 earmelfb_fbsd.c:863
+#: earmelfb_fuchsia.c:864 earmelfb_linux.c:864 earmelfb_linux_eabi.c:864
#: earmelfb_linux_fdpiceabi.c:864 earmelfb_nacl.c:864 earmelfb_nbsd.c:863
-#: earmnto.c:838 earmsymbian.c:863 ecrislinux.c:284 ecskyelf_linux.c:553
-#: eelf32_sparc.c:309 eelf32_sparc_sol2.c:440 eelf32_sparc_vxworks.c:346
-#: eelf32_tic6x_be.c:420 eelf32_tic6x_elf_be.c:420 eelf32_tic6x_elf_le.c:420
-#: eelf32_tic6x_le.c:420 eelf32_tic6x_linux_be.c:420
-#: eelf32_tic6x_linux_le.c:420 eelf32_x86_64.c:5246 eelf32am33lin.c:283
-#: eelf32b4300.c:524 eelf32bfin.c:301 eelf32bfinfd.c:326 eelf32bmip.c:524
-#: eelf32bmipn32.c:538 eelf32bsmip.c:538 eelf32btsmip.c:524
-#: eelf32btsmip_fbsd.c:524 eelf32btsmipn32.c:524 eelf32btsmipn32_fbsd.c:524
-#: eelf32ebmip.c:524 eelf32ebmipvxworks.c:559 eelf32elmip.c:524
-#: eelf32elmipvxworks.c:559 eelf32frvfd.c:308 eelf32l4300.c:524
-#: eelf32lm32fd.c:308 eelf32lmip.c:524 eelf32lppc.c:572 eelf32lppclinux.c:572
-#: eelf32lppcnto.c:572 eelf32lppcsim.c:572 eelf32lriscv.c:363
-#: eelf32lriscv_ilp32.c:363 eelf32lriscv_ilp32f.c:363 eelf32lsmip.c:524
-#: eelf32ltsmip.c:524 eelf32ltsmip_fbsd.c:524 eelf32ltsmipn32.c:524
-#: eelf32ltsmipn32_fbsd.c:524 eelf32mb_linux.c:309 eelf32mbel_linux.c:309
-#: eelf32metag.c:558 eelf32or1k_linux.c:309 eelf32ppc.c:572
-#: eelf32ppc_fbsd.c:572 eelf32ppclinux.c:572 eelf32ppcnto.c:572
+#: earmnto.c:838 ecrislinux.c:284 ecskyelf_linux.c:553 eelf32_sparc.c:309
+#: eelf32_sparc_sol2.c:441 eelf32_sparc_vxworks.c:346 eelf32_tic6x_be.c:420
+#: eelf32_tic6x_elf_be.c:420 eelf32_tic6x_elf_le.c:420 eelf32_tic6x_le.c:420
+#: eelf32_tic6x_linux_be.c:420 eelf32_tic6x_linux_le.c:420
+#: eelf32_x86_64.c:5400 eelf32am33lin.c:283 eelf32b4300.c:524 eelf32bfin.c:301
+#: eelf32bfinfd.c:326 eelf32bmip.c:524 eelf32bmipn32.c:538 eelf32briscv.c:377
+#: eelf32briscv_ilp32.c:377 eelf32briscv_ilp32f.c:377 eelf32bsmip.c:538
+#: eelf32btsmip.c:524 eelf32btsmip_fbsd.c:524 eelf32btsmipn32.c:524
+#: eelf32btsmipn32_fbsd.c:524 eelf32ebmip.c:524 eelf32ebmipvxworks.c:559
+#: eelf32elmip.c:524 eelf32elmipvxworks.c:559 eelf32frvfd.c:308
+#: eelf32l4300.c:524 eelf32lm32fd.c:308 eelf32lmip.c:524 eelf32loongarch.c:359
+#: eelf32lppc.c:572 eelf32lppclinux.c:572 eelf32lppcnto.c:572
+#: eelf32lppcsim.c:572 eelf32lriscv.c:377 eelf32lriscv_ilp32.c:377
+#: eelf32lriscv_ilp32f.c:377 eelf32lsmip.c:524 eelf32ltsmip.c:524
+#: eelf32ltsmip_fbsd.c:524 eelf32ltsmipn32.c:524 eelf32ltsmipn32_fbsd.c:524
+#: eelf32mb_linux.c:309 eelf32mbel_linux.c:309 eelf32metag.c:558
+#: eelf32or1k_linux.c:309 eelf32ppc.c:572 eelf32ppc_fbsd.c:572
+#: eelf32ppchaiku.c:572 eelf32ppclinux.c:572 eelf32ppcnto.c:572
#: eelf32ppcsim.c:572 eelf32ppcvxworks.c:546 eelf32ppcwindiss.c:572
#: eelf32tilegx.c:309 eelf32tilegx_be.c:309 eelf32tilepro.c:309
#: eelf32vax.c:283 eelf32xtensa.c:2230 eelf64_aix.c:283 eelf64_ia64.c:340
#: eelf64_ia64_fbsd.c:340 eelf64_s390.c:379 eelf64_sparc.c:309
-#: eelf64_sparc_fbsd.c:309 eelf64_sparc_sol2.c:440 eelf64alpha.c:402
+#: eelf64_sparc_fbsd.c:309 eelf64_sparc_sol2.c:441 eelf64alpha.c:402
#: eelf64alpha_fbsd.c:402 eelf64alpha_nbsd.c:402 eelf64bmip.c:538
+#: eelf64briscv.c:377 eelf64briscv_lp64.c:377 eelf64briscv_lp64f.c:377
#: eelf64btsmip.c:524 eelf64btsmip_fbsd.c:524 eelf64hppa.c:253
-#: eelf64lppc.c:1003 eelf64lriscv.c:363 eelf64lriscv_lp64.c:363
-#: eelf64lriscv_lp64f.c:363 eelf64ltsmip.c:524 eelf64ltsmip_fbsd.c:524
-#: eelf64mmix.c:4060 eelf64ppc.c:1003 eelf64ppc_fbsd.c:1003 eelf64rdos.c:334
-#: eelf64tilegx.c:309 eelf64tilegx_be.c:309 eelf_i386.c:4868
-#: eelf_i386_be.c:307 eelf_i386_fbsd.c:343 eelf_i386_ldso.c:318
-#: eelf_i386_sol2.c:474 eelf_i386_vxworks.c:370 eelf_iamcu.c:4846
-#: eelf_k1om.c:5202 eelf_k1om_fbsd.c:5182 eelf_l1om.c:5202
-#: eelf_l1om_fbsd.c:5182 eelf_s390.c:309 eelf_x86_64.c:5246
-#: eelf_x86_64_cloudabi.c:343 eelf_x86_64_fbsd.c:343 eelf_x86_64_sol2.c:474
-#: ehppa64linux.c:283 ehppalinux.c:592 ehppanbsd.c:592 ehppaobsd.c:592
-#: ei386lynx.c:298 ei386moss.c:298 ei386nto.c:298 em32relf_linux.c:308
-#: em32rlelf_linux.c:308 em68kelf.c:466 em68kelfnbsd.c:466 emn10300.c:283
-#: ends32belf_linux.c:396 ends32elf_linux.c:396 enios2linux.c:570
-#: eppclynx.c:572 escore3_elf.c:304 escore7_elf.c:304 eshelf.c:283
-#: eshelf_fd.c:309 eshelf_linux.c:309 eshelf_nbsd.c:283 eshelf_nto.c:283
-#: eshelf_uclinux.c:283 eshelf_vxworks.c:320 eshlelf.c:283 eshlelf_fd.c:309
-#: eshlelf_linux.c:309 eshlelf_nbsd.c:283 eshlelf_nto.c:283
+#: eelf64loongarch.c:359 eelf64lppc.c:1021 eelf64lppc_fbsd.c:1021
+#: eelf64lriscv.c:377 eelf64lriscv_lp64.c:377 eelf64lriscv_lp64f.c:377
+#: eelf64ltsmip.c:524 eelf64ltsmip_fbsd.c:524 eelf64mmix.c:394
+#: eelf64ppc.c:1021 eelf64ppc_fbsd.c:1021 eelf64rdos.c:334 eelf64tilegx.c:309
+#: eelf64tilegx_be.c:309 eelf_i386.c:5022 eelf_i386_be.c:307
+#: eelf_i386_fbsd.c:343 eelf_i386_haiku.c:343 eelf_i386_ldso.c:318
+#: eelf_i386_sol2.c:475 eelf_i386_vxworks.c:370 eelf_iamcu.c:343
+#: eelf_k1om.c:5334 eelf_k1om_fbsd.c:343 eelf_l1om.c:5334 eelf_l1om_fbsd.c:343
+#: eelf_mipsel_haiku.c:524 eelf_s390.c:309 eelf_x86_64.c:5400
+#: eelf_x86_64_cloudabi.c:343 eelf_x86_64_fbsd.c:343 eelf_x86_64_haiku.c:343
+#: eelf_x86_64_sol2.c:475 ehppa64linux.c:283 ehppalinux.c:592 ehppanbsd.c:592
+#: ehppaobsd.c:592 ei386lynx.c:298 ei386moss.c:298 ei386nto.c:298
+#: em32relf_linux.c:308 em32rlelf_linux.c:308 em68kelf.c:466
+#: em68kelfnbsd.c:466 emn10300.c:283 ends32belf_linux.c:396
+#: ends32elf_linux.c:396 enios2linux.c:570 escore3_elf.c:304 escore7_elf.c:304
+#: eshelf.c:283 eshelf_fd.c:309 eshelf_linux.c:309 eshelf_nbsd.c:283
+#: eshelf_nto.c:283 eshelf_uclinux.c:283 eshelf_vxworks.c:320 eshlelf.c:283
+#: eshlelf_fd.c:309 eshlelf_linux.c:309 eshlelf_nbsd.c:283 eshlelf_nto.c:283
#: eshlelf_vxworks.c:320
msgid "%F%P: invalid hash style `%s'\n"
msgstr "%F%P: неиÑправан Ñтил хеша „%s“\n"
-#: eaarch64cloudabi.c:637 eaarch64cloudabib.c:637 eaarch64elf.c:636
-#: eaarch64elf32.c:636 eaarch64elf32b.c:636 eaarch64elfb.c:636
-#: eaarch64fbsd.c:637 eaarch64fbsdb.c:637 eaarch64linux.c:637
-#: eaarch64linux32.c:637 eaarch64linux32b.c:637 eaarch64linuxb.c:637
-#: earcelf.c:269 earclinux.c:325 earclinux_nps.c:325 earcv2elf.c:202
-#: earcv2elfx.c:202 earmelf.c:879 earmelf_fbsd.c:879 earmelf_fuchsia.c:880
-#: earmelf_linux.c:880 earmelf_linux_eabi.c:880 earmelf_linux_fdpiceabi.c:880
-#: earmelf_nacl.c:880 earmelf_nbsd.c:879 earmelf_phoenix.c:880
-#: earmelf_vxworks.c:915 earmelfb.c:879 earmelfb_fbsd.c:879
-#: earmelfb_fuchsia.c:880 earmelfb_linux.c:880 earmelfb_linux_eabi.c:880
-#: earmelfb_linux_fdpiceabi.c:880 earmelfb_nacl.c:880 earmelfb_nbsd.c:879
-#: earmnto.c:854 earmsymbian.c:879 eavr1.c:425 eavr2.c:425 eavr25.c:425
-#: eavr3.c:425 eavr31.c:425 eavr35.c:425 eavr4.c:425 eavr5.c:425 eavr51.c:425
-#: eavr6.c:425 eavrtiny.c:425 eavrxmega1.c:425 eavrxmega2.c:425
-#: eavrxmega3.c:425 eavrxmega4.c:425 eavrxmega5.c:425 eavrxmega6.c:425
-#: eavrxmega7.c:425 ecriself.c:217 ecrislinux.c:300 ecskyelf.c:461
-#: ecskyelf_linux.c:569 ed10velf.c:202 eelf32_sparc.c:325
-#: eelf32_sparc_sol2.c:456 eelf32_sparc_vxworks.c:362 eelf32_spu.c:935
-#: eelf32_tic6x_be.c:436 eelf32_tic6x_elf_be.c:436 eelf32_tic6x_elf_le.c:436
-#: eelf32_tic6x_le.c:436 eelf32_tic6x_linux_be.c:436
-#: eelf32_tic6x_linux_le.c:436 eelf32_x86_64.c:5262 eelf32am33lin.c:299
-#: eelf32b4300.c:540 eelf32bfin.c:317 eelf32bfinfd.c:342 eelf32bmip.c:540
-#: eelf32bmipn32.c:554 eelf32bsmip.c:554 eelf32btsmip.c:540
-#: eelf32btsmip_fbsd.c:540 eelf32btsmipn32.c:540 eelf32btsmipn32_fbsd.c:540
-#: eelf32cr16.c:352 eelf32crx.c:239 eelf32ebmip.c:540 eelf32ebmipvxworks.c:575
-#: eelf32elmip.c:540 eelf32elmipvxworks.c:575 eelf32epiphany.c:217
-#: eelf32epiphany_4x4.c:204 eelf32frvfd.c:324 eelf32ip2k.c:217
-#: eelf32l4300.c:540 eelf32lm32.c:217 eelf32lm32fd.c:324 eelf32lmip.c:540
-#: eelf32lppc.c:588 eelf32lppclinux.c:588 eelf32lppcnto.c:588
-#: eelf32lppcsim.c:588 eelf32lr5900.c:458 eelf32lr5900n32.c:457
-#: eelf32lriscv.c:379 eelf32lriscv_ilp32.c:379 eelf32lriscv_ilp32f.c:379
-#: eelf32lsmip.c:540 eelf32ltsmip.c:540 eelf32ltsmip_fbsd.c:540
-#: eelf32ltsmipn32.c:540 eelf32ltsmipn32_fbsd.c:540 eelf32m32c.c:228
-#: eelf32mb_linux.c:325 eelf32mbel_linux.c:325 eelf32mcore.c:223
-#: eelf32mep.c:202 eelf32metag.c:574 eelf32microblaze.c:202
-#: eelf32microblazeel.c:202 eelf32mipswindiss.c:432 eelf32moxie.c:217
-#: eelf32or1k.c:218 eelf32or1k_linux.c:325 eelf32ppc.c:588
-#: eelf32ppc_fbsd.c:588 eelf32ppclinux.c:588 eelf32ppcnto.c:588
-#: eelf32ppcsim.c:588 eelf32ppcvxworks.c:562 eelf32ppcwindiss.c:588
-#: eelf32rl78.c:217 eelf32rx.c:245 eelf32rx_linux.c:230 eelf32tilegx.c:325
-#: eelf32tilegx_be.c:325 eelf32tilepro.c:325 eelf32vax.c:299
-#: eelf32visium.c:202 eelf32xc16x.c:202 eelf32xc16xl.c:202 eelf32xc16xs.c:202
-#: eelf32xstormy16.c:213 eelf32xtensa.c:2246 eelf32z80.c:229 eelf64_aix.c:299
-#: eelf64_ia64.c:356 eelf64_ia64_fbsd.c:356 eelf64_s390.c:395
-#: eelf64_sparc.c:325 eelf64_sparc_fbsd.c:325 eelf64_sparc_sol2.c:456
-#: eelf64alpha.c:418 eelf64alpha_fbsd.c:418 eelf64alpha_nbsd.c:418
-#: eelf64bmip.c:554 eelf64bpf.c:202 eelf64btsmip.c:540 eelf64btsmip_fbsd.c:540
-#: eelf64hppa.c:269 eelf64lppc.c:1019 eelf64lriscv.c:379
-#: eelf64lriscv_lp64.c:379 eelf64lriscv_lp64f.c:379 eelf64ltsmip.c:540
-#: eelf64ltsmip_fbsd.c:540 eelf64mmix.c:4076 eelf64ppc.c:1019
-#: eelf64ppc_fbsd.c:1019 eelf64rdos.c:350 eelf64tilegx.c:325
-#: eelf64tilegx_be.c:325 eelf_i386.c:4884 eelf_i386_be.c:323
-#: eelf_i386_fbsd.c:359 eelf_i386_ldso.c:334 eelf_i386_sol2.c:490
-#: eelf_i386_vxworks.c:386 eelf_iamcu.c:4862 eelf_k1om.c:5218
-#: eelf_k1om_fbsd.c:5198 eelf_l1om.c:5218 eelf_l1om_fbsd.c:5198
-#: eelf_s390.c:325 eelf_x86_64.c:5262 eelf_x86_64_cloudabi.c:359
-#: eelf_x86_64_fbsd.c:359 eelf_x86_64_sol2.c:490 eh8300elf.c:217
-#: eh8300elf_linux.c:217 eh8300helf.c:217 eh8300helf_linux.c:217
-#: eh8300hnelf.c:217 eh8300self.c:217 eh8300self_linux.c:217 eh8300snelf.c:217
-#: eh8300sxelf.c:217 eh8300sxelf_linux.c:217 eh8300sxnelf.c:217
-#: ehppa64linux.c:299 ehppaelf.c:485 ehppalinux.c:608 ehppanbsd.c:608
-#: ehppaobsd.c:608 ei386lynx.c:314 ei386moss.c:314 ei386nto.c:314
-#: em32relf.c:217 em32relf_linux.c:324 em32rlelf.c:217 em32rlelf_linux.c:324
-#: em68hc11elf.c:487 em68hc11elfb.c:487 em68hc12elf.c:487 em68hc12elfb.c:487
-#: em68kelf.c:482 em68kelfnbsd.c:482 emn10300.c:299 ends32belf.c:338
-#: ends32belf16m.c:338 ends32belf_linux.c:412 ends32elf.c:338
-#: ends32elf16m.c:338 ends32elf_linux.c:412 enios2elf.c:504 enios2linux.c:586
-#: eppclynx.c:588 epruelf.c:223 escore3_elf.c:320 escore7_elf.c:320
-#: eshelf.c:299 eshelf_fd.c:325 eshelf_linux.c:325 eshelf_nbsd.c:299
-#: eshelf_nto.c:299 eshelf_uclinux.c:299 eshelf_vxworks.c:336 eshlelf.c:299
-#: eshlelf_fd.c:325 eshlelf_linux.c:325 eshlelf_nbsd.c:299 eshlelf_nto.c:299
-#: eshlelf_vxworks.c:336 ev850.c:249 ev850_rh850.c:249
+#: eaarch64cloudabi.c:638 eaarch64cloudabib.c:638 eaarch64elf.c:637
+#: eaarch64elf32.c:637 eaarch64elf32b.c:637 eaarch64elfb.c:637
+#: eaarch64fbsd.c:638 eaarch64fbsdb.c:638 eaarch64haiku.c:638
+#: eaarch64linux.c:638 eaarch64linux32.c:638 eaarch64linux32b.c:638
+#: eaarch64linuxb.c:638 earcelf.c:270 earclinux.c:326 earclinux_nps.c:326
+#: earcv2elf.c:203 earcv2elfx.c:203 earmelf.c:880 earmelf_fbsd.c:880
+#: earmelf_fuchsia.c:881 earmelf_haiku.c:881 earmelf_linux.c:881
+#: earmelf_linux_eabi.c:881 earmelf_linux_fdpiceabi.c:881 earmelf_nacl.c:881
+#: earmelf_nbsd.c:880 earmelf_phoenix.c:881 earmelf_vxworks.c:916
+#: earmelfb.c:880 earmelfb_fbsd.c:880 earmelfb_fuchsia.c:881
+#: earmelfb_linux.c:881 earmelfb_linux_eabi.c:881
+#: earmelfb_linux_fdpiceabi.c:881 earmelfb_nacl.c:881 earmelfb_nbsd.c:880
+#: earmnto.c:855 eavr1.c:426 eavr2.c:426 eavr25.c:426 eavr3.c:426 eavr31.c:426
+#: eavr35.c:426 eavr4.c:426 eavr5.c:426 eavr51.c:426 eavr6.c:426
+#: eavrtiny.c:426 eavrxmega1.c:426 eavrxmega2.c:426 eavrxmega3.c:426
+#: eavrxmega4.c:426 eavrxmega5.c:426 eavrxmega6.c:426 eavrxmega7.c:426
+#: ecriself.c:218 ecrislinux.c:301 ecskyelf.c:462 ecskyelf_linux.c:570
+#: ed10velf.c:203 eelf32_sparc.c:326 eelf32_sparc_sol2.c:458
+#: eelf32_sparc_vxworks.c:363 eelf32_spu.c:936 eelf32_tic6x_be.c:437
+#: eelf32_tic6x_elf_be.c:437 eelf32_tic6x_elf_le.c:437 eelf32_tic6x_le.c:437
+#: eelf32_tic6x_linux_be.c:437 eelf32_tic6x_linux_le.c:437
+#: eelf32_x86_64.c:5417 eelf32am33lin.c:300 eelf32b4300.c:541 eelf32bfin.c:318
+#: eelf32bfinfd.c:343 eelf32bmip.c:541 eelf32bmipn32.c:555 eelf32briscv.c:394
+#: eelf32briscv_ilp32.c:394 eelf32briscv_ilp32f.c:394 eelf32bsmip.c:555
+#: eelf32btsmip.c:541 eelf32btsmip_fbsd.c:541 eelf32btsmipn32.c:541
+#: eelf32btsmipn32_fbsd.c:541 eelf32cr16.c:353 eelf32crx.c:240
+#: eelf32ebmip.c:541 eelf32ebmipvxworks.c:576 eelf32elmip.c:541
+#: eelf32elmipvxworks.c:576 eelf32epiphany.c:218 eelf32epiphany_4x4.c:205
+#: eelf32frvfd.c:325 eelf32ip2k.c:218 eelf32l4300.c:541 eelf32lm32.c:218
+#: eelf32lm32fd.c:325 eelf32lmip.c:541 eelf32loongarch.c:376 eelf32lppc.c:589
+#: eelf32lppclinux.c:589 eelf32lppcnto.c:589 eelf32lppcsim.c:589
+#: eelf32lr5900.c:459 eelf32lr5900n32.c:458 eelf32lriscv.c:394
+#: eelf32lriscv_ilp32.c:394 eelf32lriscv_ilp32f.c:394 eelf32lsmip.c:541
+#: eelf32ltsmip.c:541 eelf32ltsmip_fbsd.c:541 eelf32ltsmipn32.c:541
+#: eelf32ltsmipn32_fbsd.c:541 eelf32m32c.c:229 eelf32mb_linux.c:326
+#: eelf32mbel_linux.c:326 eelf32mcore.c:224 eelf32mep.c:203 eelf32metag.c:575
+#: eelf32microblaze.c:203 eelf32microblazeel.c:203 eelf32mipswindiss.c:433
+#: eelf32moxie.c:218 eelf32or1k.c:219 eelf32or1k_linux.c:326 eelf32ppc.c:589
+#: eelf32ppc_fbsd.c:589 eelf32ppchaiku.c:589 eelf32ppclinux.c:589
+#: eelf32ppcnto.c:589 eelf32ppcsim.c:589 eelf32ppcvxworks.c:563
+#: eelf32ppcwindiss.c:589 eelf32rl78.c:218 eelf32rx.c:246 eelf32rx_linux.c:231
+#: eelf32tilegx.c:326 eelf32tilegx_be.c:326 eelf32tilepro.c:326
+#: eelf32vax.c:300 eelf32visium.c:203 eelf32xc16x.c:203 eelf32xc16xl.c:203
+#: eelf32xc16xs.c:203 eelf32xstormy16.c:214 eelf32xtensa.c:2247
+#: eelf32z80.c:230 eelf64_aix.c:300 eelf64_ia64.c:357 eelf64_ia64_fbsd.c:357
+#: eelf64_s390.c:396 eelf64_sparc.c:326 eelf64_sparc_fbsd.c:326
+#: eelf64_sparc_sol2.c:458 eelf64alpha.c:419 eelf64alpha_fbsd.c:419
+#: eelf64alpha_nbsd.c:419 eelf64bmip.c:555 eelf64bpf.c:203 eelf64briscv.c:394
+#: eelf64briscv_lp64.c:394 eelf64briscv_lp64f.c:394 eelf64btsmip.c:541
+#: eelf64btsmip_fbsd.c:541 eelf64hppa.c:270 eelf64loongarch.c:376
+#: eelf64lppc.c:1038 eelf64lppc_fbsd.c:1038 eelf64lriscv.c:394
+#: eelf64lriscv_lp64.c:394 eelf64lriscv_lp64f.c:394 eelf64ltsmip.c:541
+#: eelf64ltsmip_fbsd.c:541 eelf64mmix.c:411 eelf64ppc.c:1038
+#: eelf64ppc_fbsd.c:1038 eelf64rdos.c:351 eelf64tilegx.c:326
+#: eelf64tilegx_be.c:326 eelf_i386.c:5039 eelf_i386_be.c:324
+#: eelf_i386_fbsd.c:360 eelf_i386_haiku.c:360 eelf_i386_ldso.c:335
+#: eelf_i386_sol2.c:492 eelf_i386_vxworks.c:387 eelf_iamcu.c:360
+#: eelf_k1om.c:5351 eelf_k1om_fbsd.c:360 eelf_l1om.c:5351 eelf_l1om_fbsd.c:360
+#: eelf_mipsel_haiku.c:541 eelf_s390.c:326 eelf_x86_64.c:5417
+#: eelf_x86_64_cloudabi.c:360 eelf_x86_64_fbsd.c:360 eelf_x86_64_haiku.c:360
+#: eelf_x86_64_sol2.c:492 eh8300elf.c:218 eh8300elf_linux.c:218
+#: eh8300helf.c:218 eh8300helf_linux.c:218 eh8300hnelf.c:218 eh8300self.c:218
+#: eh8300self_linux.c:218 eh8300snelf.c:218 eh8300sxelf.c:218
+#: eh8300sxelf_linux.c:218 eh8300sxnelf.c:218 ehppa64linux.c:300
+#: ehppaelf.c:486 ehppalinux.c:609 ehppanbsd.c:609 ehppaobsd.c:609
+#: ei386lynx.c:315 ei386moss.c:315 ei386nto.c:315 em32relf.c:218
+#: em32relf_linux.c:325 em32rlelf.c:218 em32rlelf_linux.c:325
+#: em68hc11elf.c:488 em68hc11elfb.c:488 em68hc12elf.c:488 em68hc12elfb.c:488
+#: em68kelf.c:483 em68kelfnbsd.c:483 emn10300.c:300 ends32belf.c:339
+#: ends32belf16m.c:339 ends32belf_linux.c:413 ends32elf.c:339
+#: ends32elf16m.c:339 ends32elf_linux.c:413 enios2elf.c:505 enios2linux.c:587
+#: epruelf.c:224 escore3_elf.c:321 escore7_elf.c:321 eshelf.c:300
+#: eshelf_fd.c:326 eshelf_linux.c:326 eshelf_nbsd.c:300 eshelf_nto.c:300
+#: eshelf_uclinux.c:300 eshelf_vxworks.c:337 eshlelf.c:300 eshlelf_fd.c:326
+#: eshlelf_linux.c:326 eshlelf_nbsd.c:300 eshlelf_nto.c:300
+#: eshlelf_vxworks.c:337 ev850.c:250 ev850_rh850.c:250
msgid "%F%P: invalid maximum page size `%s'\n"
msgstr "%F%P: неиÑправна највећа величина Ñтранице „%s“\n"
-#: eaarch64cloudabi.c:646 eaarch64cloudabib.c:646 eaarch64elf.c:645
-#: eaarch64elf32.c:645 eaarch64elf32b.c:645 eaarch64elfb.c:645
-#: eaarch64fbsd.c:646 eaarch64fbsdb.c:646 eaarch64linux.c:646
-#: eaarch64linux32.c:646 eaarch64linux32b.c:646 eaarch64linuxb.c:646
-#: earcelf.c:278 earclinux.c:334 earclinux_nps.c:334 earcv2elf.c:211
-#: earcv2elfx.c:211 earmelf.c:888 earmelf_fbsd.c:888 earmelf_fuchsia.c:889
-#: earmelf_linux.c:889 earmelf_linux_eabi.c:889 earmelf_linux_fdpiceabi.c:889
-#: earmelf_nacl.c:889 earmelf_nbsd.c:888 earmelf_phoenix.c:889
-#: earmelf_vxworks.c:924 earmelfb.c:888 earmelfb_fbsd.c:888
-#: earmelfb_fuchsia.c:889 earmelfb_linux.c:889 earmelfb_linux_eabi.c:889
-#: earmelfb_linux_fdpiceabi.c:889 earmelfb_nacl.c:889 earmelfb_nbsd.c:888
-#: earmnto.c:863 earmsymbian.c:888 eavr1.c:434 eavr2.c:434 eavr25.c:434
-#: eavr3.c:434 eavr31.c:434 eavr35.c:434 eavr4.c:434 eavr5.c:434 eavr51.c:434
-#: eavr6.c:434 eavrtiny.c:434 eavrxmega1.c:434 eavrxmega2.c:434
-#: eavrxmega3.c:434 eavrxmega4.c:434 eavrxmega5.c:434 eavrxmega6.c:434
-#: eavrxmega7.c:434 ecriself.c:226 ecrislinux.c:309 ecskyelf.c:470
-#: ecskyelf_linux.c:578 ed10velf.c:211 eelf32_sparc.c:334
-#: eelf32_sparc_sol2.c:465 eelf32_sparc_vxworks.c:371 eelf32_spu.c:944
-#: eelf32_tic6x_be.c:445 eelf32_tic6x_elf_be.c:445 eelf32_tic6x_elf_le.c:445
-#: eelf32_tic6x_le.c:445 eelf32_tic6x_linux_be.c:445
-#: eelf32_tic6x_linux_le.c:445 eelf32_x86_64.c:5271 eelf32am33lin.c:308
-#: eelf32b4300.c:549 eelf32bfin.c:326 eelf32bfinfd.c:351 eelf32bmip.c:549
-#: eelf32bmipn32.c:563 eelf32bsmip.c:563 eelf32btsmip.c:549
-#: eelf32btsmip_fbsd.c:549 eelf32btsmipn32.c:549 eelf32btsmipn32_fbsd.c:549
-#: eelf32cr16.c:361 eelf32crx.c:248 eelf32ebmip.c:549 eelf32ebmipvxworks.c:584
-#: eelf32elmip.c:549 eelf32elmipvxworks.c:584 eelf32epiphany.c:226
-#: eelf32epiphany_4x4.c:213 eelf32frvfd.c:333 eelf32ip2k.c:226
-#: eelf32l4300.c:549 eelf32lm32.c:226 eelf32lm32fd.c:333 eelf32lmip.c:549
-#: eelf32lppc.c:597 eelf32lppclinux.c:597 eelf32lppcnto.c:597
-#: eelf32lppcsim.c:597 eelf32lr5900.c:467 eelf32lr5900n32.c:466
-#: eelf32lriscv.c:388 eelf32lriscv_ilp32.c:388 eelf32lriscv_ilp32f.c:388
-#: eelf32lsmip.c:549 eelf32ltsmip.c:549 eelf32ltsmip_fbsd.c:549
-#: eelf32ltsmipn32.c:549 eelf32ltsmipn32_fbsd.c:549 eelf32m32c.c:237
-#: eelf32mb_linux.c:334 eelf32mbel_linux.c:334 eelf32mcore.c:232
-#: eelf32mep.c:211 eelf32metag.c:583 eelf32microblaze.c:211
-#: eelf32microblazeel.c:211 eelf32mipswindiss.c:441 eelf32moxie.c:226
-#: eelf32or1k.c:227 eelf32or1k_linux.c:334 eelf32ppc.c:597
-#: eelf32ppc_fbsd.c:597 eelf32ppclinux.c:597 eelf32ppcnto.c:597
-#: eelf32ppcsim.c:597 eelf32ppcvxworks.c:571 eelf32ppcwindiss.c:597
-#: eelf32rl78.c:226 eelf32rx.c:254 eelf32rx_linux.c:239 eelf32tilegx.c:334
-#: eelf32tilegx_be.c:334 eelf32tilepro.c:334 eelf32vax.c:308
-#: eelf32visium.c:211 eelf32xc16x.c:211 eelf32xc16xl.c:211 eelf32xc16xs.c:211
-#: eelf32xstormy16.c:222 eelf32xtensa.c:2255 eelf32z80.c:238 eelf64_aix.c:308
-#: eelf64_ia64.c:365 eelf64_ia64_fbsd.c:365 eelf64_s390.c:404
-#: eelf64_sparc.c:334 eelf64_sparc_fbsd.c:334 eelf64_sparc_sol2.c:465
-#: eelf64alpha.c:427 eelf64alpha_fbsd.c:427 eelf64alpha_nbsd.c:427
-#: eelf64bmip.c:563 eelf64bpf.c:211 eelf64btsmip.c:549 eelf64btsmip_fbsd.c:549
-#: eelf64hppa.c:278 eelf64lppc.c:1028 eelf64lriscv.c:388
-#: eelf64lriscv_lp64.c:388 eelf64lriscv_lp64f.c:388 eelf64ltsmip.c:549
-#: eelf64ltsmip_fbsd.c:549 eelf64mmix.c:4085 eelf64ppc.c:1028
-#: eelf64ppc_fbsd.c:1028 eelf64rdos.c:359 eelf64tilegx.c:334
-#: eelf64tilegx_be.c:334 eelf_i386.c:4893 eelf_i386_be.c:332
-#: eelf_i386_fbsd.c:368 eelf_i386_ldso.c:343 eelf_i386_sol2.c:499
-#: eelf_i386_vxworks.c:395 eelf_iamcu.c:4871 eelf_k1om.c:5227
-#: eelf_k1om_fbsd.c:5207 eelf_l1om.c:5227 eelf_l1om_fbsd.c:5207
-#: eelf_s390.c:334 eelf_x86_64.c:5271 eelf_x86_64_cloudabi.c:368
-#: eelf_x86_64_fbsd.c:368 eelf_x86_64_sol2.c:499 eh8300elf.c:226
-#: eh8300elf_linux.c:226 eh8300helf.c:226 eh8300helf_linux.c:226
-#: eh8300hnelf.c:226 eh8300self.c:226 eh8300self_linux.c:226 eh8300snelf.c:226
-#: eh8300sxelf.c:226 eh8300sxelf_linux.c:226 eh8300sxnelf.c:226
-#: ehppa64linux.c:308 ehppaelf.c:494 ehppalinux.c:617 ehppanbsd.c:617
-#: ehppaobsd.c:617 ei386lynx.c:323 ei386moss.c:323 ei386nto.c:323
-#: em32relf.c:226 em32relf_linux.c:333 em32rlelf.c:226 em32rlelf_linux.c:333
-#: em68hc11elf.c:496 em68hc11elfb.c:496 em68hc12elf.c:496 em68hc12elfb.c:496
-#: em68kelf.c:491 em68kelfnbsd.c:491 emn10300.c:308 ends32belf.c:347
-#: ends32belf16m.c:347 ends32belf_linux.c:421 ends32elf.c:347
-#: ends32elf16m.c:347 ends32elf_linux.c:421 enios2elf.c:513 enios2linux.c:595
-#: eppclynx.c:597 epruelf.c:232 escore3_elf.c:329 escore7_elf.c:329
-#: eshelf.c:308 eshelf_fd.c:334 eshelf_linux.c:334 eshelf_nbsd.c:308
-#: eshelf_nto.c:308 eshelf_uclinux.c:308 eshelf_vxworks.c:345 eshlelf.c:308
-#: eshlelf_fd.c:334 eshlelf_linux.c:334 eshlelf_nbsd.c:308 eshlelf_nto.c:308
-#: eshlelf_vxworks.c:345 ev850.c:258 ev850_rh850.c:258
+#: eaarch64cloudabi.c:648 eaarch64cloudabib.c:648 eaarch64elf.c:647
+#: eaarch64elf32.c:647 eaarch64elf32b.c:647 eaarch64elfb.c:647
+#: eaarch64fbsd.c:648 eaarch64fbsdb.c:648 eaarch64haiku.c:648
+#: eaarch64linux.c:648 eaarch64linux32.c:648 eaarch64linux32b.c:648
+#: eaarch64linuxb.c:648 earcelf.c:280 earclinux.c:336 earclinux_nps.c:336
+#: earcv2elf.c:213 earcv2elfx.c:213 earmelf.c:890 earmelf_fbsd.c:890
+#: earmelf_fuchsia.c:891 earmelf_haiku.c:891 earmelf_linux.c:891
+#: earmelf_linux_eabi.c:891 earmelf_linux_fdpiceabi.c:891 earmelf_nacl.c:891
+#: earmelf_nbsd.c:890 earmelf_phoenix.c:891 earmelf_vxworks.c:926
+#: earmelfb.c:890 earmelfb_fbsd.c:890 earmelfb_fuchsia.c:891
+#: earmelfb_linux.c:891 earmelfb_linux_eabi.c:891
+#: earmelfb_linux_fdpiceabi.c:891 earmelfb_nacl.c:891 earmelfb_nbsd.c:890
+#: earmnto.c:865 eavr1.c:436 eavr2.c:436 eavr25.c:436 eavr3.c:436 eavr31.c:436
+#: eavr35.c:436 eavr4.c:436 eavr5.c:436 eavr51.c:436 eavr6.c:436
+#: eavrtiny.c:436 eavrxmega1.c:436 eavrxmega2.c:436 eavrxmega3.c:436
+#: eavrxmega4.c:436 eavrxmega5.c:436 eavrxmega6.c:436 eavrxmega7.c:436
+#: ecriself.c:228 ecrislinux.c:311 ecskyelf.c:472 ecskyelf_linux.c:580
+#: ed10velf.c:213 eelf32_sparc.c:336 eelf32_sparc_sol2.c:468
+#: eelf32_sparc_vxworks.c:373 eelf32_spu.c:946 eelf32_tic6x_be.c:447
+#: eelf32_tic6x_elf_be.c:447 eelf32_tic6x_elf_le.c:447 eelf32_tic6x_le.c:447
+#: eelf32_tic6x_linux_be.c:447 eelf32_tic6x_linux_le.c:447
+#: eelf32_x86_64.c:5427 eelf32am33lin.c:310 eelf32b4300.c:551 eelf32bfin.c:328
+#: eelf32bfinfd.c:353 eelf32bmip.c:551 eelf32bmipn32.c:565 eelf32briscv.c:404
+#: eelf32briscv_ilp32.c:404 eelf32briscv_ilp32f.c:404 eelf32bsmip.c:565
+#: eelf32btsmip.c:551 eelf32btsmip_fbsd.c:551 eelf32btsmipn32.c:551
+#: eelf32btsmipn32_fbsd.c:551 eelf32cr16.c:363 eelf32crx.c:250
+#: eelf32ebmip.c:551 eelf32ebmipvxworks.c:586 eelf32elmip.c:551
+#: eelf32elmipvxworks.c:586 eelf32epiphany.c:228 eelf32epiphany_4x4.c:215
+#: eelf32frvfd.c:335 eelf32ip2k.c:228 eelf32l4300.c:551 eelf32lm32.c:228
+#: eelf32lm32fd.c:335 eelf32lmip.c:551 eelf32loongarch.c:386 eelf32lppc.c:599
+#: eelf32lppclinux.c:599 eelf32lppcnto.c:599 eelf32lppcsim.c:599
+#: eelf32lr5900.c:469 eelf32lr5900n32.c:468 eelf32lriscv.c:404
+#: eelf32lriscv_ilp32.c:404 eelf32lriscv_ilp32f.c:404 eelf32lsmip.c:551
+#: eelf32ltsmip.c:551 eelf32ltsmip_fbsd.c:551 eelf32ltsmipn32.c:551
+#: eelf32ltsmipn32_fbsd.c:551 eelf32m32c.c:239 eelf32mb_linux.c:336
+#: eelf32mbel_linux.c:336 eelf32mcore.c:234 eelf32mep.c:213 eelf32metag.c:585
+#: eelf32microblaze.c:213 eelf32microblazeel.c:213 eelf32mipswindiss.c:443
+#: eelf32moxie.c:228 eelf32or1k.c:229 eelf32or1k_linux.c:336 eelf32ppc.c:599
+#: eelf32ppc_fbsd.c:599 eelf32ppchaiku.c:599 eelf32ppclinux.c:599
+#: eelf32ppcnto.c:599 eelf32ppcsim.c:599 eelf32ppcvxworks.c:573
+#: eelf32ppcwindiss.c:599 eelf32rl78.c:228 eelf32rx.c:256 eelf32rx_linux.c:241
+#: eelf32tilegx.c:336 eelf32tilegx_be.c:336 eelf32tilepro.c:336
+#: eelf32vax.c:310 eelf32visium.c:213 eelf32xc16x.c:213 eelf32xc16xl.c:213
+#: eelf32xc16xs.c:213 eelf32xstormy16.c:224 eelf32xtensa.c:2257
+#: eelf32z80.c:240 eelf64_aix.c:310 eelf64_ia64.c:367 eelf64_ia64_fbsd.c:367
+#: eelf64_s390.c:406 eelf64_sparc.c:336 eelf64_sparc_fbsd.c:336
+#: eelf64_sparc_sol2.c:468 eelf64alpha.c:429 eelf64alpha_fbsd.c:429
+#: eelf64alpha_nbsd.c:429 eelf64bmip.c:565 eelf64bpf.c:213 eelf64briscv.c:404
+#: eelf64briscv_lp64.c:404 eelf64briscv_lp64f.c:404 eelf64btsmip.c:551
+#: eelf64btsmip_fbsd.c:551 eelf64hppa.c:280 eelf64loongarch.c:386
+#: eelf64lppc.c:1048 eelf64lppc_fbsd.c:1048 eelf64lriscv.c:404
+#: eelf64lriscv_lp64.c:404 eelf64lriscv_lp64f.c:404 eelf64ltsmip.c:551
+#: eelf64ltsmip_fbsd.c:551 eelf64mmix.c:421 eelf64ppc.c:1048
+#: eelf64ppc_fbsd.c:1048 eelf64rdos.c:361 eelf64tilegx.c:336
+#: eelf64tilegx_be.c:336 eelf_i386.c:5049 eelf_i386_be.c:334
+#: eelf_i386_fbsd.c:370 eelf_i386_haiku.c:370 eelf_i386_ldso.c:345
+#: eelf_i386_sol2.c:502 eelf_i386_vxworks.c:397 eelf_iamcu.c:370
+#: eelf_k1om.c:5361 eelf_k1om_fbsd.c:370 eelf_l1om.c:5361 eelf_l1om_fbsd.c:370
+#: eelf_mipsel_haiku.c:551 eelf_s390.c:336 eelf_x86_64.c:5427
+#: eelf_x86_64_cloudabi.c:370 eelf_x86_64_fbsd.c:370 eelf_x86_64_haiku.c:370
+#: eelf_x86_64_sol2.c:502 eh8300elf.c:228 eh8300elf_linux.c:228
+#: eh8300helf.c:228 eh8300helf_linux.c:228 eh8300hnelf.c:228 eh8300self.c:228
+#: eh8300self_linux.c:228 eh8300snelf.c:228 eh8300sxelf.c:228
+#: eh8300sxelf_linux.c:228 eh8300sxnelf.c:228 ehppa64linux.c:310
+#: ehppaelf.c:496 ehppalinux.c:619 ehppanbsd.c:619 ehppaobsd.c:619
+#: ei386lynx.c:325 ei386moss.c:325 ei386nto.c:325 em32relf.c:228
+#: em32relf_linux.c:335 em32rlelf.c:228 em32rlelf_linux.c:335
+#: em68hc11elf.c:498 em68hc11elfb.c:498 em68hc12elf.c:498 em68hc12elfb.c:498
+#: em68kelf.c:493 em68kelfnbsd.c:493 emn10300.c:310 ends32belf.c:349
+#: ends32belf16m.c:349 ends32belf_linux.c:423 ends32elf.c:349
+#: ends32elf16m.c:349 ends32elf_linux.c:423 enios2elf.c:515 enios2linux.c:597
+#: epruelf.c:234 escore3_elf.c:331 escore7_elf.c:331 eshelf.c:310
+#: eshelf_fd.c:336 eshelf_linux.c:336 eshelf_nbsd.c:310 eshelf_nto.c:310
+#: eshelf_uclinux.c:310 eshelf_vxworks.c:347 eshlelf.c:310 eshlelf_fd.c:336
+#: eshlelf_linux.c:336 eshlelf_nbsd.c:310 eshlelf_nto.c:310
+#: eshlelf_vxworks.c:347 ev850.c:260 ev850_rh850.c:260
msgid "%F%P: invalid common page size `%s'\n"
msgstr "%F%P: неиÑправна општа величина Ñтранице „%s“\n"
-#: eaarch64cloudabi.c:654 eaarch64cloudabib.c:654 eaarch64elf.c:653
-#: eaarch64elf32.c:653 eaarch64elf32b.c:653 eaarch64elfb.c:653
-#: eaarch64fbsd.c:654 eaarch64fbsdb.c:654 eaarch64linux.c:654
-#: eaarch64linux32.c:654 eaarch64linux32b.c:654 eaarch64linuxb.c:654
-#: earcelf.c:286 earclinux.c:342 earclinux_nps.c:342 earcv2elf.c:219
-#: earcv2elfx.c:219 earmelf.c:896 earmelf_fbsd.c:896 earmelf_fuchsia.c:897
-#: earmelf_linux.c:897 earmelf_linux_eabi.c:897 earmelf_linux_fdpiceabi.c:897
-#: earmelf_nacl.c:897 earmelf_nbsd.c:896 earmelf_phoenix.c:897
-#: earmelf_vxworks.c:932 earmelfb.c:896 earmelfb_fbsd.c:896
-#: earmelfb_fuchsia.c:897 earmelfb_linux.c:897 earmelfb_linux_eabi.c:897
-#: earmelfb_linux_fdpiceabi.c:897 earmelfb_nacl.c:897 earmelfb_nbsd.c:896
-#: earmnto.c:871 earmsymbian.c:896 eavr1.c:442 eavr2.c:442 eavr25.c:442
-#: eavr3.c:442 eavr31.c:442 eavr35.c:442 eavr4.c:442 eavr5.c:442 eavr51.c:442
-#: eavr6.c:442 eavrtiny.c:442 eavrxmega1.c:442 eavrxmega2.c:442
-#: eavrxmega3.c:442 eavrxmega4.c:442 eavrxmega5.c:442 eavrxmega6.c:442
-#: eavrxmega7.c:442 ecriself.c:234 ecrislinux.c:317 ecskyelf.c:478
-#: ecskyelf_linux.c:586 ed10velf.c:219 eelf32_sparc.c:342
-#: eelf32_sparc_sol2.c:473 eelf32_sparc_vxworks.c:379 eelf32_spu.c:952
-#: eelf32_tic6x_be.c:453 eelf32_tic6x_elf_be.c:453 eelf32_tic6x_elf_le.c:453
-#: eelf32_tic6x_le.c:453 eelf32_tic6x_linux_be.c:453
-#: eelf32_tic6x_linux_le.c:453 eelf32_x86_64.c:5279 eelf32am33lin.c:316
-#: eelf32b4300.c:557 eelf32bfin.c:334 eelf32bfinfd.c:359 eelf32bmip.c:557
-#: eelf32bmipn32.c:571 eelf32bsmip.c:571 eelf32btsmip.c:557
-#: eelf32btsmip_fbsd.c:557 eelf32btsmipn32.c:557 eelf32btsmipn32_fbsd.c:557
-#: eelf32cr16.c:369 eelf32crx.c:256 eelf32ebmip.c:557 eelf32ebmipvxworks.c:592
-#: eelf32elmip.c:557 eelf32elmipvxworks.c:592 eelf32epiphany.c:234
-#: eelf32epiphany_4x4.c:221 eelf32frvfd.c:341 eelf32ip2k.c:234
-#: eelf32l4300.c:557 eelf32lm32.c:234 eelf32lm32fd.c:341 eelf32lmip.c:557
-#: eelf32lppc.c:605 eelf32lppclinux.c:605 eelf32lppcnto.c:605
-#: eelf32lppcsim.c:605 eelf32lr5900.c:475 eelf32lr5900n32.c:474
-#: eelf32lriscv.c:396 eelf32lriscv_ilp32.c:396 eelf32lriscv_ilp32f.c:396
-#: eelf32lsmip.c:557 eelf32ltsmip.c:557 eelf32ltsmip_fbsd.c:557
-#: eelf32ltsmipn32.c:557 eelf32ltsmipn32_fbsd.c:557 eelf32m32c.c:245
-#: eelf32mb_linux.c:342 eelf32mbel_linux.c:342 eelf32mcore.c:240
-#: eelf32mep.c:219 eelf32metag.c:591 eelf32microblaze.c:219
-#: eelf32microblazeel.c:219 eelf32mipswindiss.c:449 eelf32moxie.c:234
-#: eelf32or1k.c:235 eelf32or1k_linux.c:342 eelf32ppc.c:605
-#: eelf32ppc_fbsd.c:605 eelf32ppclinux.c:605 eelf32ppcnto.c:605
-#: eelf32ppcsim.c:605 eelf32ppcvxworks.c:579 eelf32ppcwindiss.c:605
-#: eelf32rl78.c:234 eelf32rx.c:262 eelf32rx_linux.c:247 eelf32tilegx.c:342
-#: eelf32tilegx_be.c:342 eelf32tilepro.c:342 eelf32vax.c:316
-#: eelf32visium.c:219 eelf32xc16x.c:219 eelf32xc16xl.c:219 eelf32xc16xs.c:219
-#: eelf32xstormy16.c:230 eelf32xtensa.c:2263 eelf32z80.c:246 eelf64_aix.c:316
-#: eelf64_ia64.c:373 eelf64_ia64_fbsd.c:373 eelf64_s390.c:412
-#: eelf64_sparc.c:342 eelf64_sparc_fbsd.c:342 eelf64_sparc_sol2.c:473
-#: eelf64alpha.c:435 eelf64alpha_fbsd.c:435 eelf64alpha_nbsd.c:435
-#: eelf64bmip.c:571 eelf64bpf.c:219 eelf64btsmip.c:557 eelf64btsmip_fbsd.c:557
-#: eelf64hppa.c:286 eelf64lppc.c:1036 eelf64lriscv.c:396
-#: eelf64lriscv_lp64.c:396 eelf64lriscv_lp64f.c:396 eelf64ltsmip.c:557
-#: eelf64ltsmip_fbsd.c:557 eelf64mmix.c:4093 eelf64ppc.c:1036
-#: eelf64ppc_fbsd.c:1036 eelf64rdos.c:367 eelf64tilegx.c:342
-#: eelf64tilegx_be.c:342 eelf_i386.c:4901 eelf_i386_be.c:340
-#: eelf_i386_fbsd.c:376 eelf_i386_ldso.c:351 eelf_i386_sol2.c:507
-#: eelf_i386_vxworks.c:403 eelf_iamcu.c:4879 eelf_k1om.c:5235
-#: eelf_k1om_fbsd.c:5215 eelf_l1om.c:5235 eelf_l1om_fbsd.c:5215
-#: eelf_s390.c:342 eelf_x86_64.c:5279 eelf_x86_64_cloudabi.c:376
-#: eelf_x86_64_fbsd.c:376 eelf_x86_64_sol2.c:507 eh8300elf.c:234
-#: eh8300elf_linux.c:234 eh8300helf.c:234 eh8300helf_linux.c:234
-#: eh8300hnelf.c:234 eh8300self.c:234 eh8300self_linux.c:234 eh8300snelf.c:234
-#: eh8300sxelf.c:234 eh8300sxelf_linux.c:234 eh8300sxnelf.c:234
-#: ehppa64linux.c:316 ehppaelf.c:502 ehppalinux.c:625 ehppanbsd.c:625
-#: ehppaobsd.c:625 ei386lynx.c:331 ei386moss.c:331 ei386nto.c:331
-#: em32relf.c:234 em32relf_linux.c:341 em32rlelf.c:234 em32rlelf_linux.c:341
-#: em68hc11elf.c:504 em68hc11elfb.c:504 em68hc12elf.c:504 em68hc12elfb.c:504
-#: em68kelf.c:499 em68kelfnbsd.c:499 emn10300.c:316 ends32belf.c:355
-#: ends32belf16m.c:355 ends32belf_linux.c:429 ends32elf.c:355
-#: ends32elf16m.c:355 ends32elf_linux.c:429 enios2elf.c:521 enios2linux.c:603
-#: eppclynx.c:605 epruelf.c:240 escore3_elf.c:337 escore7_elf.c:337
-#: eshelf.c:316 eshelf_fd.c:342 eshelf_linux.c:342 eshelf_nbsd.c:316
-#: eshelf_nto.c:316 eshelf_uclinux.c:316 eshelf_vxworks.c:353 eshlelf.c:316
-#: eshlelf_fd.c:342 eshlelf_linux.c:342 eshlelf_nbsd.c:316 eshlelf_nto.c:316
-#: eshlelf_vxworks.c:353 ev850.c:266 ev850_rh850.c:266
+#: eaarch64cloudabi.c:657 eaarch64cloudabib.c:657 eaarch64elf.c:656
+#: eaarch64elf32.c:656 eaarch64elf32b.c:656 eaarch64elfb.c:656
+#: eaarch64fbsd.c:657 eaarch64fbsdb.c:657 eaarch64haiku.c:657
+#: eaarch64linux.c:657 eaarch64linux32.c:657 eaarch64linux32b.c:657
+#: eaarch64linuxb.c:657 earcelf.c:289 earclinux.c:345 earclinux_nps.c:345
+#: earcv2elf.c:222 earcv2elfx.c:222 earmelf.c:899 earmelf_fbsd.c:899
+#: earmelf_fuchsia.c:900 earmelf_haiku.c:900 earmelf_linux.c:900
+#: earmelf_linux_eabi.c:900 earmelf_linux_fdpiceabi.c:900 earmelf_nacl.c:900
+#: earmelf_nbsd.c:899 earmelf_phoenix.c:900 earmelf_vxworks.c:935
+#: earmelfb.c:899 earmelfb_fbsd.c:899 earmelfb_fuchsia.c:900
+#: earmelfb_linux.c:900 earmelfb_linux_eabi.c:900
+#: earmelfb_linux_fdpiceabi.c:900 earmelfb_nacl.c:900 earmelfb_nbsd.c:899
+#: earmnto.c:874 eavr1.c:445 eavr2.c:445 eavr25.c:445 eavr3.c:445 eavr31.c:445
+#: eavr35.c:445 eavr4.c:445 eavr5.c:445 eavr51.c:445 eavr6.c:445
+#: eavrtiny.c:445 eavrxmega1.c:445 eavrxmega2.c:445 eavrxmega3.c:445
+#: eavrxmega4.c:445 eavrxmega5.c:445 eavrxmega6.c:445 eavrxmega7.c:445
+#: ecriself.c:237 ecrislinux.c:320 ecskyelf.c:481 ecskyelf_linux.c:589
+#: ed10velf.c:222 eelf32_sparc.c:345 eelf32_sparc_sol2.c:477
+#: eelf32_sparc_vxworks.c:382 eelf32_spu.c:955 eelf32_tic6x_be.c:456
+#: eelf32_tic6x_elf_be.c:456 eelf32_tic6x_elf_le.c:456 eelf32_tic6x_le.c:456
+#: eelf32_tic6x_linux_be.c:456 eelf32_tic6x_linux_le.c:456
+#: eelf32_x86_64.c:5436 eelf32am33lin.c:319 eelf32b4300.c:560 eelf32bfin.c:337
+#: eelf32bfinfd.c:362 eelf32bmip.c:560 eelf32bmipn32.c:574 eelf32briscv.c:413
+#: eelf32briscv_ilp32.c:413 eelf32briscv_ilp32f.c:413 eelf32bsmip.c:574
+#: eelf32btsmip.c:560 eelf32btsmip_fbsd.c:560 eelf32btsmipn32.c:560
+#: eelf32btsmipn32_fbsd.c:560 eelf32cr16.c:372 eelf32crx.c:259
+#: eelf32ebmip.c:560 eelf32ebmipvxworks.c:595 eelf32elmip.c:560
+#: eelf32elmipvxworks.c:595 eelf32epiphany.c:237 eelf32epiphany_4x4.c:224
+#: eelf32frvfd.c:344 eelf32ip2k.c:237 eelf32l4300.c:560 eelf32lm32.c:237
+#: eelf32lm32fd.c:344 eelf32lmip.c:560 eelf32loongarch.c:395 eelf32lppc.c:608
+#: eelf32lppclinux.c:608 eelf32lppcnto.c:608 eelf32lppcsim.c:608
+#: eelf32lr5900.c:478 eelf32lr5900n32.c:477 eelf32lriscv.c:413
+#: eelf32lriscv_ilp32.c:413 eelf32lriscv_ilp32f.c:413 eelf32lsmip.c:560
+#: eelf32ltsmip.c:560 eelf32ltsmip_fbsd.c:560 eelf32ltsmipn32.c:560
+#: eelf32ltsmipn32_fbsd.c:560 eelf32m32c.c:248 eelf32mb_linux.c:345
+#: eelf32mbel_linux.c:345 eelf32mcore.c:243 eelf32mep.c:222 eelf32metag.c:594
+#: eelf32microblaze.c:222 eelf32microblazeel.c:222 eelf32mipswindiss.c:452
+#: eelf32moxie.c:237 eelf32or1k.c:238 eelf32or1k_linux.c:345 eelf32ppc.c:608
+#: eelf32ppc_fbsd.c:608 eelf32ppchaiku.c:608 eelf32ppclinux.c:608
+#: eelf32ppcnto.c:608 eelf32ppcsim.c:608 eelf32ppcvxworks.c:582
+#: eelf32ppcwindiss.c:608 eelf32rl78.c:237 eelf32rx.c:265 eelf32rx_linux.c:250
+#: eelf32tilegx.c:345 eelf32tilegx_be.c:345 eelf32tilepro.c:345
+#: eelf32vax.c:319 eelf32visium.c:222 eelf32xc16x.c:222 eelf32xc16xl.c:222
+#: eelf32xc16xs.c:222 eelf32xstormy16.c:233 eelf32xtensa.c:2266
+#: eelf32z80.c:249 eelf64_aix.c:319 eelf64_ia64.c:376 eelf64_ia64_fbsd.c:376
+#: eelf64_s390.c:415 eelf64_sparc.c:345 eelf64_sparc_fbsd.c:345
+#: eelf64_sparc_sol2.c:477 eelf64alpha.c:438 eelf64alpha_fbsd.c:438
+#: eelf64alpha_nbsd.c:438 eelf64bmip.c:574 eelf64bpf.c:222 eelf64briscv.c:413
+#: eelf64briscv_lp64.c:413 eelf64briscv_lp64f.c:413 eelf64btsmip.c:560
+#: eelf64btsmip_fbsd.c:560 eelf64hppa.c:289 eelf64loongarch.c:395
+#: eelf64lppc.c:1057 eelf64lppc_fbsd.c:1057 eelf64lriscv.c:413
+#: eelf64lriscv_lp64.c:413 eelf64lriscv_lp64f.c:413 eelf64ltsmip.c:560
+#: eelf64ltsmip_fbsd.c:560 eelf64mmix.c:430 eelf64ppc.c:1057
+#: eelf64ppc_fbsd.c:1057 eelf64rdos.c:370 eelf64tilegx.c:345
+#: eelf64tilegx_be.c:345 eelf_i386.c:5058 eelf_i386_be.c:343
+#: eelf_i386_fbsd.c:379 eelf_i386_haiku.c:379 eelf_i386_ldso.c:354
+#: eelf_i386_sol2.c:511 eelf_i386_vxworks.c:406 eelf_iamcu.c:379
+#: eelf_k1om.c:5370 eelf_k1om_fbsd.c:379 eelf_l1om.c:5370 eelf_l1om_fbsd.c:379
+#: eelf_mipsel_haiku.c:560 eelf_s390.c:345 eelf_x86_64.c:5436
+#: eelf_x86_64_cloudabi.c:379 eelf_x86_64_fbsd.c:379 eelf_x86_64_haiku.c:379
+#: eelf_x86_64_sol2.c:511 eh8300elf.c:237 eh8300elf_linux.c:237
+#: eh8300helf.c:237 eh8300helf_linux.c:237 eh8300hnelf.c:237 eh8300self.c:237
+#: eh8300self_linux.c:237 eh8300snelf.c:237 eh8300sxelf.c:237
+#: eh8300sxelf_linux.c:237 eh8300sxnelf.c:237 ehppa64linux.c:319
+#: ehppaelf.c:505 ehppalinux.c:628 ehppanbsd.c:628 ehppaobsd.c:628
+#: ei386lynx.c:334 ei386moss.c:334 ei386nto.c:334 em32relf.c:237
+#: em32relf_linux.c:344 em32rlelf.c:237 em32rlelf_linux.c:344
+#: em68hc11elf.c:507 em68hc11elfb.c:507 em68hc12elf.c:507 em68hc12elfb.c:507
+#: em68kelf.c:502 em68kelfnbsd.c:502 emn10300.c:319 ends32belf.c:358
+#: ends32belf16m.c:358 ends32belf_linux.c:432 ends32elf.c:358
+#: ends32elf16m.c:358 ends32elf_linux.c:432 enios2elf.c:524 enios2linux.c:606
+#: epruelf.c:243 escore3_elf.c:340 escore7_elf.c:340 eshelf.c:319
+#: eshelf_fd.c:345 eshelf_linux.c:345 eshelf_nbsd.c:319 eshelf_nto.c:319
+#: eshelf_uclinux.c:319 eshelf_vxworks.c:356 eshlelf.c:319 eshlelf_fd.c:345
+#: eshlelf_linux.c:345 eshlelf_nbsd.c:319 eshlelf_nto.c:319
+#: eshlelf_vxworks.c:356 ev850.c:269 ev850_rh850.c:269
msgid "%F%P: invalid stack size `%s'\n"
msgstr "%F%P: неиÑправна величина Ñпремника „%s“\n"
-#: eaarch64cloudabi.c:685 eaarch64cloudabib.c:685 eaarch64elf.c:684
-#: eaarch64elf32.c:684 eaarch64elf32b.c:684 eaarch64elfb.c:684
-#: eaarch64fbsd.c:685 eaarch64fbsdb.c:685 eaarch64linux.c:685
-#: eaarch64linux32.c:685 eaarch64linux32b.c:685 eaarch64linuxb.c:685
-#: earcelf.c:317 earclinux.c:373 earclinux_nps.c:373 earcv2elf.c:250
-#: earcv2elfx.c:250 earmelf.c:927 earmelf_fbsd.c:927 earmelf_fuchsia.c:928
-#: earmelf_linux.c:928 earmelf_linux_eabi.c:928 earmelf_linux_fdpiceabi.c:928
-#: earmelf_nacl.c:928 earmelf_nbsd.c:927 earmelf_phoenix.c:928
-#: earmelf_vxworks.c:963 earmelfb.c:927 earmelfb_fbsd.c:927
-#: earmelfb_fuchsia.c:928 earmelfb_linux.c:928 earmelfb_linux_eabi.c:928
-#: earmelfb_linux_fdpiceabi.c:928 earmelfb_nacl.c:928 earmelfb_nbsd.c:927
-#: earmnto.c:902 earmsymbian.c:927 eavr1.c:473 eavr2.c:473 eavr25.c:473
-#: eavr3.c:473 eavr31.c:473 eavr35.c:473 eavr4.c:473 eavr5.c:473 eavr51.c:473
-#: eavr6.c:473 eavrtiny.c:473 eavrxmega1.c:473 eavrxmega2.c:473
-#: eavrxmega3.c:473 eavrxmega4.c:473 eavrxmega5.c:473 eavrxmega6.c:473
-#: eavrxmega7.c:473 ecriself.c:265 ecrislinux.c:348 ecskyelf.c:509
-#: ecskyelf_linux.c:617 ed10velf.c:250 eelf32_sparc.c:373
-#: eelf32_sparc_sol2.c:504 eelf32_sparc_vxworks.c:410 eelf32_spu.c:983
-#: eelf32_tic6x_be.c:484 eelf32_tic6x_elf_be.c:484 eelf32_tic6x_elf_le.c:484
-#: eelf32_tic6x_le.c:484 eelf32_tic6x_linux_be.c:484
-#: eelf32_tic6x_linux_le.c:484 eelf32_x86_64.c:5310 eelf32am33lin.c:347
-#: eelf32b4300.c:588 eelf32bfin.c:365 eelf32bfinfd.c:390 eelf32bmip.c:588
-#: eelf32bmipn32.c:602 eelf32bsmip.c:602 eelf32btsmip.c:588
-#: eelf32btsmip_fbsd.c:588 eelf32btsmipn32.c:588 eelf32btsmipn32_fbsd.c:588
-#: eelf32cr16.c:400 eelf32crx.c:287 eelf32ebmip.c:588 eelf32ebmipvxworks.c:623
-#: eelf32elmip.c:588 eelf32elmipvxworks.c:623 eelf32epiphany.c:265
-#: eelf32epiphany_4x4.c:252 eelf32frvfd.c:372 eelf32ip2k.c:265
-#: eelf32l4300.c:588 eelf32lm32.c:265 eelf32lm32fd.c:372 eelf32lmip.c:588
-#: eelf32lppc.c:636 eelf32lppclinux.c:636 eelf32lppcnto.c:636
-#: eelf32lppcsim.c:636 eelf32lr5900.c:506 eelf32lr5900n32.c:505
-#: eelf32lriscv.c:427 eelf32lriscv_ilp32.c:427 eelf32lriscv_ilp32f.c:427
-#: eelf32lsmip.c:588 eelf32ltsmip.c:588 eelf32ltsmip_fbsd.c:588
-#: eelf32ltsmipn32.c:588 eelf32ltsmipn32_fbsd.c:588 eelf32m32c.c:276
-#: eelf32mb_linux.c:373 eelf32mbel_linux.c:373 eelf32mcore.c:271
-#: eelf32mep.c:250 eelf32metag.c:622 eelf32microblaze.c:250
-#: eelf32microblazeel.c:250 eelf32mipswindiss.c:480 eelf32moxie.c:265
-#: eelf32or1k.c:266 eelf32or1k_linux.c:373 eelf32ppc.c:636
-#: eelf32ppc_fbsd.c:636 eelf32ppclinux.c:636 eelf32ppcnto.c:636
-#: eelf32ppcsim.c:636 eelf32ppcvxworks.c:610 eelf32ppcwindiss.c:636
-#: eelf32rl78.c:265 eelf32rx.c:293 eelf32rx_linux.c:278 eelf32tilegx.c:373
-#: eelf32tilegx_be.c:373 eelf32tilepro.c:373 eelf32vax.c:347
-#: eelf32visium.c:250 eelf32xc16x.c:250 eelf32xc16xl.c:250 eelf32xc16xs.c:250
-#: eelf32xstormy16.c:261 eelf32xtensa.c:2294 eelf32z80.c:277 eelf64_aix.c:347
-#: eelf64_ia64.c:404 eelf64_ia64_fbsd.c:404 eelf64_s390.c:443
-#: eelf64_sparc.c:373 eelf64_sparc_fbsd.c:373 eelf64_sparc_sol2.c:504
-#: eelf64alpha.c:466 eelf64alpha_fbsd.c:466 eelf64alpha_nbsd.c:466
-#: eelf64bmip.c:602 eelf64bpf.c:250 eelf64btsmip.c:588 eelf64btsmip_fbsd.c:588
-#: eelf64hppa.c:317 eelf64lppc.c:1067 eelf64lriscv.c:427
-#: eelf64lriscv_lp64.c:427 eelf64lriscv_lp64f.c:427 eelf64ltsmip.c:588
-#: eelf64ltsmip_fbsd.c:588 eelf64mmix.c:4124 eelf64ppc.c:1067
-#: eelf64ppc_fbsd.c:1067 eelf64rdos.c:398 eelf64tilegx.c:373
-#: eelf64tilegx_be.c:373 eelf_i386.c:4932 eelf_i386_be.c:371
-#: eelf_i386_fbsd.c:407 eelf_i386_ldso.c:382 eelf_i386_sol2.c:538
-#: eelf_i386_vxworks.c:434 eelf_iamcu.c:4910 eelf_k1om.c:5266
-#: eelf_k1om_fbsd.c:5246 eelf_l1om.c:5266 eelf_l1om_fbsd.c:5246
-#: eelf_s390.c:373 eelf_x86_64.c:5310 eelf_x86_64_cloudabi.c:407
-#: eelf_x86_64_fbsd.c:407 eelf_x86_64_sol2.c:538 eh8300elf.c:265
-#: eh8300elf_linux.c:265 eh8300helf.c:265 eh8300helf_linux.c:265
-#: eh8300hnelf.c:265 eh8300self.c:265 eh8300self_linux.c:265 eh8300snelf.c:265
-#: eh8300sxelf.c:265 eh8300sxelf_linux.c:265 eh8300sxnelf.c:265
-#: ehppa64linux.c:347 ehppaelf.c:533 ehppalinux.c:656 ehppanbsd.c:656
-#: ehppaobsd.c:656 ei386lynx.c:362 ei386moss.c:362 ei386nto.c:362
-#: em32relf.c:265 em32relf_linux.c:372 em32rlelf.c:265 em32rlelf_linux.c:372
-#: em68hc11elf.c:535 em68hc11elfb.c:535 em68hc12elf.c:535 em68hc12elfb.c:535
-#: em68kelf.c:530 em68kelfnbsd.c:530 emn10300.c:347 ends32belf.c:386
-#: ends32belf16m.c:386 ends32belf_linux.c:460 ends32elf.c:386
-#: ends32elf16m.c:386 ends32elf_linux.c:460 enios2elf.c:552 enios2linux.c:634
-#: eppclynx.c:636 epruelf.c:271 escore3_elf.c:368 escore7_elf.c:368
-#: eshelf.c:347 eshelf_fd.c:373 eshelf_linux.c:373 eshelf_nbsd.c:347
-#: eshelf_nto.c:347 eshelf_uclinux.c:347 eshelf_vxworks.c:384 eshlelf.c:347
-#: eshlelf_fd.c:373 eshlelf_linux.c:373 eshlelf_nbsd.c:347 eshlelf_nto.c:347
-#: eshlelf_vxworks.c:384 ev850.c:297 ev850_rh850.c:297
+#: eaarch64cloudabi.c:696 eaarch64cloudabib.c:696 eaarch64elf.c:695
+#: eaarch64elf32.c:695 eaarch64elf32b.c:695 eaarch64elfb.c:695
+#: eaarch64fbsd.c:696 eaarch64fbsdb.c:696 eaarch64haiku.c:696
+#: eaarch64linux.c:696 eaarch64linux32.c:696 eaarch64linux32b.c:696
+#: eaarch64linuxb.c:696 earcelf.c:328 earclinux.c:384 earclinux_nps.c:384
+#: earcv2elf.c:261 earcv2elfx.c:261 earmelf.c:938 earmelf_fbsd.c:938
+#: earmelf_fuchsia.c:939 earmelf_haiku.c:939 earmelf_linux.c:939
+#: earmelf_linux_eabi.c:939 earmelf_linux_fdpiceabi.c:939 earmelf_nacl.c:939
+#: earmelf_nbsd.c:938 earmelf_phoenix.c:939 earmelf_vxworks.c:974
+#: earmelfb.c:938 earmelfb_fbsd.c:938 earmelfb_fuchsia.c:939
+#: earmelfb_linux.c:939 earmelfb_linux_eabi.c:939
+#: earmelfb_linux_fdpiceabi.c:939 earmelfb_nacl.c:939 earmelfb_nbsd.c:938
+#: earmnto.c:913 eavr1.c:484 eavr2.c:484 eavr25.c:484 eavr3.c:484 eavr31.c:484
+#: eavr35.c:484 eavr4.c:484 eavr5.c:484 eavr51.c:484 eavr6.c:484
+#: eavrtiny.c:484 eavrxmega1.c:484 eavrxmega2.c:484 eavrxmega3.c:484
+#: eavrxmega4.c:484 eavrxmega5.c:484 eavrxmega6.c:484 eavrxmega7.c:484
+#: ecriself.c:276 ecrislinux.c:359 ecskyelf.c:520 ecskyelf_linux.c:628
+#: ed10velf.c:261 eelf32_sparc.c:384 eelf32_sparc_sol2.c:516
+#: eelf32_sparc_vxworks.c:421 eelf32_spu.c:994 eelf32_tic6x_be.c:495
+#: eelf32_tic6x_elf_be.c:495 eelf32_tic6x_elf_le.c:495 eelf32_tic6x_le.c:495
+#: eelf32_tic6x_linux_be.c:495 eelf32_tic6x_linux_le.c:495
+#: eelf32_x86_64.c:5475 eelf32am33lin.c:358 eelf32b4300.c:599 eelf32bfin.c:376
+#: eelf32bfinfd.c:401 eelf32bmip.c:599 eelf32bmipn32.c:613 eelf32briscv.c:452
+#: eelf32briscv_ilp32.c:452 eelf32briscv_ilp32f.c:452 eelf32bsmip.c:613
+#: eelf32btsmip.c:599 eelf32btsmip_fbsd.c:599 eelf32btsmipn32.c:599
+#: eelf32btsmipn32_fbsd.c:599 eelf32cr16.c:411 eelf32crx.c:298
+#: eelf32ebmip.c:599 eelf32ebmipvxworks.c:634 eelf32elmip.c:599
+#: eelf32elmipvxworks.c:634 eelf32epiphany.c:276 eelf32epiphany_4x4.c:263
+#: eelf32frvfd.c:383 eelf32ip2k.c:276 eelf32l4300.c:599 eelf32lm32.c:276
+#: eelf32lm32fd.c:383 eelf32lmip.c:599 eelf32loongarch.c:434 eelf32lppc.c:647
+#: eelf32lppclinux.c:647 eelf32lppcnto.c:647 eelf32lppcsim.c:647
+#: eelf32lr5900.c:517 eelf32lr5900n32.c:516 eelf32lriscv.c:452
+#: eelf32lriscv_ilp32.c:452 eelf32lriscv_ilp32f.c:452 eelf32lsmip.c:599
+#: eelf32ltsmip.c:599 eelf32ltsmip_fbsd.c:599 eelf32ltsmipn32.c:599
+#: eelf32ltsmipn32_fbsd.c:599 eelf32m32c.c:287 eelf32mb_linux.c:384
+#: eelf32mbel_linux.c:384 eelf32mcore.c:282 eelf32mep.c:261 eelf32metag.c:633
+#: eelf32microblaze.c:261 eelf32microblazeel.c:261 eelf32mipswindiss.c:491
+#: eelf32moxie.c:276 eelf32or1k.c:277 eelf32or1k_linux.c:384 eelf32ppc.c:647
+#: eelf32ppc_fbsd.c:647 eelf32ppchaiku.c:647 eelf32ppclinux.c:647
+#: eelf32ppcnto.c:647 eelf32ppcsim.c:647 eelf32ppcvxworks.c:621
+#: eelf32ppcwindiss.c:647 eelf32rl78.c:276 eelf32rx.c:304 eelf32rx_linux.c:289
+#: eelf32tilegx.c:384 eelf32tilegx_be.c:384 eelf32tilepro.c:384
+#: eelf32vax.c:358 eelf32visium.c:261 eelf32xc16x.c:261 eelf32xc16xl.c:261
+#: eelf32xc16xs.c:261 eelf32xstormy16.c:272 eelf32xtensa.c:2305
+#: eelf32z80.c:288 eelf64_aix.c:358 eelf64_ia64.c:415 eelf64_ia64_fbsd.c:415
+#: eelf64_s390.c:454 eelf64_sparc.c:384 eelf64_sparc_fbsd.c:384
+#: eelf64_sparc_sol2.c:516 eelf64alpha.c:477 eelf64alpha_fbsd.c:477
+#: eelf64alpha_nbsd.c:477 eelf64bmip.c:613 eelf64bpf.c:261 eelf64briscv.c:452
+#: eelf64briscv_lp64.c:452 eelf64briscv_lp64f.c:452 eelf64btsmip.c:599
+#: eelf64btsmip_fbsd.c:599 eelf64hppa.c:328 eelf64loongarch.c:434
+#: eelf64lppc.c:1096 eelf64lppc_fbsd.c:1096 eelf64lriscv.c:452
+#: eelf64lriscv_lp64.c:452 eelf64lriscv_lp64f.c:452 eelf64ltsmip.c:599
+#: eelf64ltsmip_fbsd.c:599 eelf64mmix.c:469 eelf64ppc.c:1096
+#: eelf64ppc_fbsd.c:1096 eelf64rdos.c:409 eelf64tilegx.c:384
+#: eelf64tilegx_be.c:384 eelf_i386.c:5097 eelf_i386_be.c:382
+#: eelf_i386_fbsd.c:418 eelf_i386_haiku.c:418 eelf_i386_ldso.c:393
+#: eelf_i386_sol2.c:550 eelf_i386_vxworks.c:445 eelf_iamcu.c:418
+#: eelf_k1om.c:5409 eelf_k1om_fbsd.c:418 eelf_l1om.c:5409 eelf_l1om_fbsd.c:418
+#: eelf_mipsel_haiku.c:599 eelf_s390.c:384 eelf_x86_64.c:5475
+#: eelf_x86_64_cloudabi.c:418 eelf_x86_64_fbsd.c:418 eelf_x86_64_haiku.c:418
+#: eelf_x86_64_sol2.c:550 eh8300elf.c:276 eh8300elf_linux.c:276
+#: eh8300helf.c:276 eh8300helf_linux.c:276 eh8300hnelf.c:276 eh8300self.c:276
+#: eh8300self_linux.c:276 eh8300snelf.c:276 eh8300sxelf.c:276
+#: eh8300sxelf_linux.c:276 eh8300sxnelf.c:276 ehppa64linux.c:358
+#: ehppaelf.c:544 ehppalinux.c:667 ehppanbsd.c:667 ehppaobsd.c:667
+#: ei386lynx.c:373 ei386moss.c:373 ei386nto.c:373 em32relf.c:276
+#: em32relf_linux.c:383 em32rlelf.c:276 em32rlelf_linux.c:383
+#: em68hc11elf.c:546 em68hc11elfb.c:546 em68hc12elf.c:546 em68hc12elfb.c:546
+#: em68kelf.c:541 em68kelfnbsd.c:541 emn10300.c:358 ends32belf.c:397
+#: ends32belf16m.c:397 ends32belf_linux.c:471 ends32elf.c:397
+#: ends32elf16m.c:397 ends32elf_linux.c:471 enios2elf.c:563 enios2linux.c:645
+#: epruelf.c:282 escore3_elf.c:379 escore7_elf.c:379 eshelf.c:358
+#: eshelf_fd.c:384 eshelf_linux.c:384 eshelf_nbsd.c:358 eshelf_nto.c:358
+#: eshelf_uclinux.c:358 eshelf_vxworks.c:395 eshlelf.c:358 eshlelf_fd.c:384
+#: eshlelf_linux.c:384 eshlelf_nbsd.c:358 eshlelf_nto.c:358
+#: eshlelf_vxworks.c:395 ev850.c:308 ev850_rh850.c:308
msgid "%F%P: invalid visibility in `-z %s'; must be default, internal, hidden, or protected"
msgstr "%F%P: неиÑправна видљивоÑÑ‚ у „-z %s“; мора бити оÑновна, унутрашња, Ñкривена или заштићена"
-#: eaarch64cloudabi.c:754 eaarch64cloudabib.c:754 eaarch64elf.c:749
-#: eaarch64elf32.c:749 eaarch64elf32b.c:749 eaarch64elfb.c:749
-#: eaarch64fbsd.c:754 eaarch64fbsdb.c:754 eaarch64linux.c:754
-#: eaarch64linux32.c:754 eaarch64linux32b.c:754 eaarch64linuxb.c:754
-#: earcelf.c:373 earclinux.c:433 earclinux_nps.c:433 earcv2elf.c:255
-#: earcv2elfx.c:255 earmelf.c:983 earmelf_fbsd.c:983 earmelf_fuchsia.c:988
-#: earmelf_linux.c:988 earmelf_linux_eabi.c:988 earmelf_linux_fdpiceabi.c:988
-#: earmelf_nacl.c:988 earmelf_nbsd.c:983 earmelf_phoenix.c:988
-#: earmelf_vxworks.c:1019 earmelfb.c:983 earmelfb_fbsd.c:983
-#: earmelfb_fuchsia.c:988 earmelfb_linux.c:988 earmelfb_linux_eabi.c:988
-#: earmelfb_linux_fdpiceabi.c:988 earmelfb_nacl.c:988 earmelfb_nbsd.c:983
-#: earmnto.c:958 earmsymbian.c:983 eavr1.c:478 eavr2.c:478 eavr25.c:478
-#: eavr3.c:478 eavr31.c:478 eavr35.c:478 eavr4.c:478 eavr5.c:478 eavr51.c:478
-#: eavr6.c:478 eavrtiny.c:478 eavrxmega1.c:478 eavrxmega2.c:478
-#: eavrxmega3.c:478 eavrxmega4.c:478 eavrxmega5.c:478 eavrxmega6.c:478
-#: eavrxmega7.c:478 ecriself.c:270 ecrislinux.c:408 ecskyelf.c:514
-#: ecskyelf_linux.c:677 ed10velf.c:255 eelf32_sparc.c:433
-#: eelf32_sparc_sol2.c:564 eelf32_sparc_vxworks.c:470 eelf32_spu.c:988
-#: eelf32_tic6x_be.c:540 eelf32_tic6x_elf_be.c:540 eelf32_tic6x_elf_le.c:540
-#: eelf32_tic6x_le.c:540 eelf32_tic6x_linux_be.c:540
-#: eelf32_tic6x_linux_le.c:540 eelf32_x86_64.c:5439 eelf32am33lin.c:403
-#: eelf32b4300.c:648 eelf32bfin.c:421 eelf32bfinfd.c:446 eelf32bmip.c:648
-#: eelf32bmipn32.c:662 eelf32bsmip.c:662 eelf32btsmip.c:648
-#: eelf32btsmip_fbsd.c:648 eelf32btsmipn32.c:648 eelf32btsmipn32_fbsd.c:648
-#: eelf32cr16.c:405 eelf32crx.c:292 eelf32ebmip.c:648 eelf32ebmipvxworks.c:683
-#: eelf32elmip.c:648 eelf32elmipvxworks.c:683 eelf32epiphany.c:270
-#: eelf32epiphany_4x4.c:257 eelf32frvfd.c:428 eelf32ip2k.c:270
-#: eelf32l4300.c:648 eelf32lm32.c:270 eelf32lm32fd.c:428 eelf32lmip.c:648
-#: eelf32lppc.c:702 eelf32lppclinux.c:702 eelf32lppcnto.c:702
-#: eelf32lppcsim.c:702 eelf32lr5900.c:511 eelf32lr5900n32.c:510
-#: eelf32lriscv.c:487 eelf32lriscv_ilp32.c:487 eelf32lriscv_ilp32f.c:487
-#: eelf32lsmip.c:648 eelf32ltsmip.c:648 eelf32ltsmip_fbsd.c:648
-#: eelf32ltsmipn32.c:648 eelf32ltsmipn32_fbsd.c:648 eelf32m32c.c:281
-#: eelf32mb_linux.c:433 eelf32mbel_linux.c:433 eelf32mcore.c:276
-#: eelf32mep.c:255 eelf32metag.c:682 eelf32microblaze.c:255
-#: eelf32microblazeel.c:255 eelf32mipswindiss.c:485 eelf32moxie.c:270
-#: eelf32or1k.c:271 eelf32or1k_linux.c:433 eelf32ppc.c:702
-#: eelf32ppc_fbsd.c:702 eelf32ppclinux.c:702 eelf32ppcnto.c:702
-#: eelf32ppcsim.c:702 eelf32ppcvxworks.c:676 eelf32ppcwindiss.c:702
-#: eelf32rl78.c:270 eelf32rx.c:298 eelf32rx_linux.c:283 eelf32tilegx.c:433
-#: eelf32tilegx_be.c:433 eelf32tilepro.c:433 eelf32vax.c:403
-#: eelf32visium.c:255 eelf32xc16x.c:255 eelf32xc16xl.c:255 eelf32xc16xs.c:255
-#: eelf32xstormy16.c:266 eelf32xtensa.c:2354 eelf32z80.c:282 eelf64_aix.c:403
-#: eelf64_ia64.c:460 eelf64_ia64_fbsd.c:460 eelf64_s390.c:503
-#: eelf64_sparc.c:433 eelf64_sparc_fbsd.c:433 eelf64_sparc_sol2.c:564
-#: eelf64alpha.c:526 eelf64alpha_fbsd.c:526 eelf64alpha_nbsd.c:526
-#: eelf64bmip.c:662 eelf64bpf.c:255 eelf64btsmip.c:648 eelf64btsmip_fbsd.c:648
-#: eelf64hppa.c:373 eelf64lppc.c:1133 eelf64lriscv.c:487
-#: eelf64lriscv_lp64.c:487 eelf64lriscv_lp64f.c:487 eelf64ltsmip.c:648
-#: eelf64ltsmip_fbsd.c:648 eelf64mmix.c:4180 eelf64ppc.c:1133
-#: eelf64ppc_fbsd.c:1133 eelf64rdos.c:458 eelf64tilegx.c:433
-#: eelf64tilegx_be.c:433 eelf_i386.c:5058 eelf_i386_be.c:470
-#: eelf_i386_fbsd.c:533 eelf_i386_ldso.c:485 eelf_i386_sol2.c:641
-#: eelf_i386_vxworks.c:537 eelf_iamcu.c:5013 eelf_k1om.c:5369
-#: eelf_k1om_fbsd.c:5349 eelf_l1om.c:5369 eelf_l1om_fbsd.c:5349
-#: eelf_s390.c:433 eelf_x86_64.c:5442 eelf_x86_64_cloudabi.c:539
-#: eelf_x86_64_fbsd.c:539 eelf_x86_64_sol2.c:670 eh8300elf.c:270
-#: eh8300elf_linux.c:270 eh8300helf.c:270 eh8300helf_linux.c:270
-#: eh8300hnelf.c:270 eh8300self.c:270 eh8300self_linux.c:270 eh8300snelf.c:270
-#: eh8300sxelf.c:270 eh8300sxelf_linux.c:270 eh8300sxnelf.c:270
-#: ehppa64linux.c:403 ehppaelf.c:538 ehppalinux.c:716 ehppanbsd.c:716
-#: ehppaobsd.c:716 ei386lynx.c:418 ei386moss.c:418 ei386nto.c:418
-#: em32relf.c:270 em32relf_linux.c:428 em32rlelf.c:270 em32rlelf_linux.c:428
-#: em68hc11elf.c:540 em68hc11elfb.c:540 em68hc12elf.c:540 em68hc12elfb.c:540
-#: em68kelf.c:590 em68kelfnbsd.c:590 emn10300.c:403 ends32belf.c:391
-#: ends32belf16m.c:391 ends32belf_linux.c:520 ends32elf.c:391
-#: ends32elf16m.c:391 ends32elf_linux.c:520 enios2elf.c:557 enios2linux.c:694
-#: eppclynx.c:702 epruelf.c:276 escore3_elf.c:424 escore7_elf.c:424
-#: eshelf.c:403 eshelf_fd.c:433 eshelf_linux.c:433 eshelf_nbsd.c:403
-#: eshelf_nto.c:403 eshelf_uclinux.c:403 eshelf_vxworks.c:440 eshlelf.c:403
-#: eshlelf_fd.c:433 eshlelf_linux.c:433 eshlelf_nbsd.c:403 eshlelf_nto.c:403
-#: eshlelf_vxworks.c:440 ev850.c:302 ev850_rh850.c:302
+#: eaarch64cloudabi.c:769 eaarch64cloudabib.c:769 eaarch64elf.c:764
+#: eaarch64elf32.c:764 eaarch64elf32b.c:764 eaarch64elfb.c:764
+#: eaarch64fbsd.c:769 eaarch64fbsdb.c:769 eaarch64haiku.c:769
+#: eaarch64linux.c:769 eaarch64linux32.c:769 eaarch64linux32b.c:769
+#: eaarch64linuxb.c:769 earcelf.c:388 earclinux.c:448 earclinux_nps.c:448
+#: earcv2elf.c:266 earcv2elfx.c:266 earmelf.c:998 earmelf_fbsd.c:998
+#: earmelf_fuchsia.c:1003 earmelf_haiku.c:1003 earmelf_linux.c:1003
+#: earmelf_linux_eabi.c:1003 earmelf_linux_fdpiceabi.c:1003
+#: earmelf_nacl.c:1003 earmelf_nbsd.c:998 earmelf_phoenix.c:1003
+#: earmelf_vxworks.c:1034 earmelfb.c:998 earmelfb_fbsd.c:998
+#: earmelfb_fuchsia.c:1003 earmelfb_linux.c:1003 earmelfb_linux_eabi.c:1003
+#: earmelfb_linux_fdpiceabi.c:1003 earmelfb_nacl.c:1003 earmelfb_nbsd.c:998
+#: earmnto.c:973 eavr1.c:489 eavr2.c:489 eavr25.c:489 eavr3.c:489 eavr31.c:489
+#: eavr35.c:489 eavr4.c:489 eavr5.c:489 eavr51.c:489 eavr6.c:489
+#: eavrtiny.c:489 eavrxmega1.c:489 eavrxmega2.c:489 eavrxmega3.c:489
+#: eavrxmega4.c:489 eavrxmega5.c:489 eavrxmega6.c:489 eavrxmega7.c:489
+#: ecriself.c:281 ecrislinux.c:423 ecskyelf.c:525 ecskyelf_linux.c:692
+#: ed10velf.c:266 eelf32_sparc.c:448 eelf32_sparc_sol2.c:580
+#: eelf32_sparc_vxworks.c:485 eelf32_spu.c:999 eelf32_tic6x_be.c:555
+#: eelf32_tic6x_elf_be.c:555 eelf32_tic6x_elf_le.c:555 eelf32_tic6x_le.c:555
+#: eelf32_tic6x_linux_be.c:555 eelf32_tic6x_linux_le.c:555
+#: eelf32_x86_64.c:5631 eelf32am33lin.c:418 eelf32b4300.c:663 eelf32bfin.c:436
+#: eelf32bfinfd.c:461 eelf32bmip.c:663 eelf32bmipn32.c:677 eelf32briscv.c:516
+#: eelf32briscv_ilp32.c:516 eelf32briscv_ilp32f.c:516 eelf32bsmip.c:677
+#: eelf32btsmip.c:663 eelf32btsmip_fbsd.c:663 eelf32btsmipn32.c:663
+#: eelf32btsmipn32_fbsd.c:663 eelf32cr16.c:416 eelf32crx.c:303
+#: eelf32ebmip.c:663 eelf32ebmipvxworks.c:698 eelf32elmip.c:663
+#: eelf32elmipvxworks.c:698 eelf32epiphany.c:281 eelf32epiphany_4x4.c:268
+#: eelf32frvfd.c:443 eelf32ip2k.c:281 eelf32l4300.c:663 eelf32lm32.c:281
+#: eelf32lm32fd.c:443 eelf32lmip.c:663 eelf32loongarch.c:498 eelf32lppc.c:717
+#: eelf32lppclinux.c:717 eelf32lppcnto.c:717 eelf32lppcsim.c:717
+#: eelf32lr5900.c:522 eelf32lr5900n32.c:521 eelf32lriscv.c:516
+#: eelf32lriscv_ilp32.c:516 eelf32lriscv_ilp32f.c:516 eelf32lsmip.c:663
+#: eelf32ltsmip.c:663 eelf32ltsmip_fbsd.c:663 eelf32ltsmipn32.c:663
+#: eelf32ltsmipn32_fbsd.c:663 eelf32m32c.c:292 eelf32mb_linux.c:448
+#: eelf32mbel_linux.c:448 eelf32mcore.c:287 eelf32mep.c:266 eelf32metag.c:697
+#: eelf32microblaze.c:266 eelf32microblazeel.c:266 eelf32mipswindiss.c:496
+#: eelf32moxie.c:281 eelf32or1k.c:282 eelf32or1k_linux.c:448 eelf32ppc.c:717
+#: eelf32ppc_fbsd.c:717 eelf32ppchaiku.c:717 eelf32ppclinux.c:717
+#: eelf32ppcnto.c:717 eelf32ppcsim.c:717 eelf32ppcvxworks.c:691
+#: eelf32ppcwindiss.c:717 eelf32rl78.c:281 eelf32rx.c:309 eelf32rx_linux.c:294
+#: eelf32tilegx.c:448 eelf32tilegx_be.c:448 eelf32tilepro.c:448
+#: eelf32vax.c:418 eelf32visium.c:266 eelf32xc16x.c:266 eelf32xc16xl.c:266
+#: eelf32xc16xs.c:266 eelf32xstormy16.c:277 eelf32xtensa.c:2369
+#: eelf32z80.c:293 eelf64_aix.c:418 eelf64_ia64.c:475 eelf64_ia64_fbsd.c:475
+#: eelf64_s390.c:518 eelf64_sparc.c:448 eelf64_sparc_fbsd.c:448
+#: eelf64_sparc_sol2.c:580 eelf64alpha.c:541 eelf64alpha_fbsd.c:541
+#: eelf64alpha_nbsd.c:541 eelf64bmip.c:677 eelf64bpf.c:266 eelf64briscv.c:516
+#: eelf64briscv_lp64.c:516 eelf64briscv_lp64f.c:516 eelf64btsmip.c:663
+#: eelf64btsmip_fbsd.c:663 eelf64hppa.c:388 eelf64loongarch.c:498
+#: eelf64lppc.c:1171 eelf64lppc_fbsd.c:1171 eelf64lriscv.c:516
+#: eelf64lriscv_lp64.c:516 eelf64lriscv_lp64f.c:516 eelf64ltsmip.c:663
+#: eelf64ltsmip_fbsd.c:663 eelf64mmix.c:529 eelf64ppc.c:1171
+#: eelf64ppc_fbsd.c:1171 eelf64rdos.c:473 eelf64tilegx.c:448
+#: eelf64tilegx_be.c:448 eelf_i386.c:5250 eelf_i386_be.c:489
+#: eelf_i386_fbsd.c:571 eelf_i386_haiku.c:571 eelf_i386_ldso.c:504
+#: eelf_i386_sol2.c:661 eelf_i386_vxworks.c:556 eelf_iamcu.c:529
+#: eelf_k1om.c:5520 eelf_k1om_fbsd.c:529 eelf_l1om.c:5520 eelf_l1om_fbsd.c:529
+#: eelf_mipsel_haiku.c:663 eelf_s390.c:448 eelf_x86_64.c:5684
+#: eelf_x86_64_cloudabi.c:627 eelf_x86_64_fbsd.c:627 eelf_x86_64_haiku.c:627
+#: eelf_x86_64_sol2.c:759 eh8300elf.c:281 eh8300elf_linux.c:281
+#: eh8300helf.c:281 eh8300helf_linux.c:281 eh8300hnelf.c:281 eh8300self.c:281
+#: eh8300self_linux.c:281 eh8300snelf.c:281 eh8300sxelf.c:281
+#: eh8300sxelf_linux.c:281 eh8300sxnelf.c:281 ehppa64linux.c:418
+#: ehppaelf.c:549 ehppalinux.c:731 ehppanbsd.c:731 ehppaobsd.c:731
+#: ei386lynx.c:433 ei386moss.c:433 ei386nto.c:433 em32relf.c:281
+#: em32relf_linux.c:443 em32rlelf.c:281 em32rlelf_linux.c:443
+#: em68hc11elf.c:551 em68hc11elfb.c:551 em68hc12elf.c:551 em68hc12elfb.c:551
+#: em68kelf.c:605 em68kelfnbsd.c:605 emn10300.c:418 ends32belf.c:402
+#: ends32belf16m.c:402 ends32belf_linux.c:535 ends32elf.c:402
+#: ends32elf16m.c:402 ends32elf_linux.c:535 enios2elf.c:568 enios2linux.c:709
+#: epruelf.c:287 escore3_elf.c:439 escore7_elf.c:439 eshelf.c:418
+#: eshelf_fd.c:448 eshelf_linux.c:448 eshelf_nbsd.c:418 eshelf_nto.c:418
+#: eshelf_uclinux.c:418 eshelf_vxworks.c:455 eshlelf.c:418 eshlelf_fd.c:448
+#: eshlelf_linux.c:448 eshlelf_nbsd.c:418 eshlelf_nto.c:418
+#: eshlelf_vxworks.c:455 ev850.c:313 ev850_rh850.c:313
msgid "%P: warning: -z %s ignored\n"
msgstr "%P: упозорење: „-z %s“ је занемарено\n"
-#: eaarch64cloudabi.c:788 eaarch64cloudabib.c:788 eaarch64elf.c:783
-#: eaarch64elf32.c:783 eaarch64elf32b.c:783 eaarch64elfb.c:783
-#: eaarch64fbsd.c:788 eaarch64fbsdb.c:788 eaarch64linux.c:788
-#: eaarch64linux32.c:788 eaarch64linux32b.c:788 eaarch64linuxb.c:788
+#: eaarch64cloudabi.c:803 eaarch64cloudabib.c:803 eaarch64elf.c:798
+#: eaarch64elf32.c:798 eaarch64elf32b.c:798 eaarch64elfb.c:798
+#: eaarch64fbsd.c:803 eaarch64fbsdb.c:803 eaarch64haiku.c:803
+#: eaarch64linux.c:803 eaarch64linux32.c:803 eaarch64linux32b.c:803
+#: eaarch64linuxb.c:803
msgid "%P: error: unrecognized option for --fix-cortex-a53-843419: %s\n"
msgstr "%P: грешка: непозната опција за „--fix-cortex-a53-843419“: %s\n"
-#: eaarch64cloudabi.c:817 eaarch64cloudabib.c:817 eaarch64elf.c:812
-#: eaarch64elf32.c:812 eaarch64elf32b.c:812 eaarch64elfb.c:812
-#: eaarch64fbsd.c:817 eaarch64fbsdb.c:817 eaarch64linux.c:817
-#: eaarch64linux32.c:817 eaarch64linux32b.c:817 eaarch64linuxb.c:817
-#: earmelf.c:1120 earmelf_fbsd.c:1120 earmelf_fuchsia.c:1125
-#: earmelf_linux.c:1125 earmelf_linux_eabi.c:1125
-#: earmelf_linux_fdpiceabi.c:1125 earmelf_nacl.c:1125 earmelf_nbsd.c:1120
-#: earmelf_phoenix.c:1125 earmelf_vxworks.c:1160 earmelfb.c:1120
-#: earmelfb_fbsd.c:1120 earmelfb_fuchsia.c:1125 earmelfb_linux.c:1125
-#: earmelfb_linux_eabi.c:1125 earmelfb_linux_fdpiceabi.c:1125
-#: earmelfb_nacl.c:1125 earmelfb_nbsd.c:1120 earmnto.c:1095 earmsymbian.c:1120
+#: eaarch64cloudabi.c:832 eaarch64cloudabib.c:832 eaarch64elf.c:827
+#: eaarch64elf32.c:827 eaarch64elf32b.c:827 eaarch64elfb.c:827
+#: eaarch64fbsd.c:832 eaarch64fbsdb.c:832 eaarch64haiku.c:832
+#: eaarch64linux.c:832 eaarch64linux32.c:832 eaarch64linux32b.c:832
+#: eaarch64linuxb.c:832 earmelf.c:1135 earmelf_fbsd.c:1135
+#: earmelf_fuchsia.c:1140 earmelf_haiku.c:1140 earmelf_linux.c:1140
+#: earmelf_linux_eabi.c:1140 earmelf_linux_fdpiceabi.c:1140
+#: earmelf_nacl.c:1140 earmelf_nbsd.c:1135 earmelf_phoenix.c:1140
+#: earmelf_vxworks.c:1175 earmelfb.c:1135 earmelfb_fbsd.c:1135
+#: earmelfb_fuchsia.c:1140 earmelfb_linux.c:1140 earmelfb_linux_eabi.c:1140
+#: earmelfb_linux_fdpiceabi.c:1140 earmelfb_nacl.c:1140 earmelfb_nbsd.c:1135
+#: earmnto.c:1110
#, c-format
msgid ""
" --no-enum-size-warning Don't warn about objects with incompatible\n"
" enum sizes\n"
msgstr ""
-" --no-enum-size-warning Ðе упозорава о објектима Ñа неÑаглаÑним\n"
-" величинама набрајања\n"
-
-#: eaarch64cloudabi.c:819 eaarch64cloudabib.c:819 eaarch64elf.c:814
-#: eaarch64elf32.c:814 eaarch64elf32b.c:814 eaarch64elfb.c:814
-#: eaarch64fbsd.c:819 eaarch64fbsdb.c:819 eaarch64linux.c:819
-#: eaarch64linux32.c:819 eaarch64linux32b.c:819 eaarch64linuxb.c:819
-#: earmelf.c:1122 earmelf_fbsd.c:1122 earmelf_fuchsia.c:1127
-#: earmelf_linux.c:1127 earmelf_linux_eabi.c:1127
-#: earmelf_linux_fdpiceabi.c:1127 earmelf_nacl.c:1127 earmelf_nbsd.c:1122
-#: earmelf_phoenix.c:1127 earmelf_vxworks.c:1162 earmelfb.c:1122
-#: earmelfb_fbsd.c:1122 earmelfb_fuchsia.c:1127 earmelfb_linux.c:1127
-#: earmelfb_linux_eabi.c:1127 earmelfb_linux_fdpiceabi.c:1127
-#: earmelfb_nacl.c:1127 earmelfb_nbsd.c:1122 earmnto.c:1097 earmsymbian.c:1122
+" --no-enum-size-warning Ðе упозорава о објектима Ñа неÑаглаÑним\n"
+" величинама набрајања\n"
+
+#: eaarch64cloudabi.c:834 eaarch64cloudabib.c:834 eaarch64elf.c:829
+#: eaarch64elf32.c:829 eaarch64elf32b.c:829 eaarch64elfb.c:829
+#: eaarch64fbsd.c:834 eaarch64fbsdb.c:834 eaarch64haiku.c:834
+#: eaarch64linux.c:834 eaarch64linux32.c:834 eaarch64linux32b.c:834
+#: eaarch64linuxb.c:834 earmelf.c:1137 earmelf_fbsd.c:1137
+#: earmelf_fuchsia.c:1142 earmelf_haiku.c:1142 earmelf_linux.c:1142
+#: earmelf_linux_eabi.c:1142 earmelf_linux_fdpiceabi.c:1142
+#: earmelf_nacl.c:1142 earmelf_nbsd.c:1137 earmelf_phoenix.c:1142
+#: earmelf_vxworks.c:1177 earmelfb.c:1137 earmelfb_fbsd.c:1137
+#: earmelfb_fuchsia.c:1142 earmelfb_linux.c:1142 earmelfb_linux_eabi.c:1142
+#: earmelfb_linux_fdpiceabi.c:1142 earmelfb_nacl.c:1142 earmelfb_nbsd.c:1137
+#: earmnto.c:1112
#, c-format
msgid ""
" --no-wchar-size-warning Don't warn about objects with incompatible\n"
" wchar_t sizes\n"
msgstr ""
-" --no-wchar-size-warning Ðе упозорава о објектима Ñа неÑаглаÑним\n"
-" „wchar_t“ величинама\n"
-
-#: eaarch64cloudabi.c:821 eaarch64cloudabib.c:821 eaarch64elf.c:816
-#: eaarch64elf32.c:816 eaarch64elf32b.c:816 eaarch64elfb.c:816
-#: eaarch64fbsd.c:821 eaarch64fbsdb.c:821 eaarch64linux.c:821
-#: eaarch64linux32.c:821 eaarch64linux32b.c:821 eaarch64linuxb.c:821
-#: earmelf.c:1124 earmelf_fbsd.c:1124 earmelf_fuchsia.c:1129
-#: earmelf_linux.c:1129 earmelf_linux_eabi.c:1129
-#: earmelf_linux_fdpiceabi.c:1129 earmelf_nacl.c:1129 earmelf_nbsd.c:1124
-#: earmelf_phoenix.c:1129 earmelf_vxworks.c:1164 earmelfb.c:1124
-#: earmelfb_fbsd.c:1124 earmelfb_fuchsia.c:1129 earmelfb_linux.c:1129
-#: earmelfb_linux_eabi.c:1129 earmelfb_linux_fdpiceabi.c:1129
-#: earmelfb_nacl.c:1129 earmelfb_nbsd.c:1124 earmnto.c:1099 earmsymbian.c:1124
+" --no-wchar-size-warning Ðе упозорава о објектима Ñа неÑаглаÑним\n"
+" „wchar_t“ величинама\n"
+
+#: eaarch64cloudabi.c:836 eaarch64cloudabib.c:836 eaarch64elf.c:831
+#: eaarch64elf32.c:831 eaarch64elf32b.c:831 eaarch64elfb.c:831
+#: eaarch64fbsd.c:836 eaarch64fbsdb.c:836 eaarch64haiku.c:836
+#: eaarch64linux.c:836 eaarch64linux32.c:836 eaarch64linux32b.c:836
+#: eaarch64linuxb.c:836 earmelf.c:1139 earmelf_fbsd.c:1139
+#: earmelf_fuchsia.c:1144 earmelf_haiku.c:1144 earmelf_linux.c:1144
+#: earmelf_linux_eabi.c:1144 earmelf_linux_fdpiceabi.c:1144
+#: earmelf_nacl.c:1144 earmelf_nbsd.c:1139 earmelf_phoenix.c:1144
+#: earmelf_vxworks.c:1179 earmelfb.c:1139 earmelfb_fbsd.c:1139
+#: earmelfb_fuchsia.c:1144 earmelfb_linux.c:1144 earmelfb_linux_eabi.c:1144
+#: earmelfb_linux_fdpiceabi.c:1144 earmelfb_nacl.c:1144 earmelfb_nbsd.c:1139
+#: earmnto.c:1114
#, c-format
msgid " --pic-veneer Always generate PIC interworking veneers\n"
-msgstr " --pic-veneer Увек Ñтвара „PIC“ међурадне превлаке\n"
-
-#: eaarch64cloudabi.c:822 eaarch64cloudabib.c:822 eaarch64elf.c:817
-#: eaarch64elf32.c:817 eaarch64elf32b.c:817 eaarch64elfb.c:817
-#: eaarch64fbsd.c:822 eaarch64fbsdb.c:822 eaarch64linux.c:822
-#: eaarch64linux32.c:822 eaarch64linux32b.c:822 eaarch64linuxb.c:822
-#: earmelf.c:1131 earmelf_fbsd.c:1131 earmelf_fuchsia.c:1136
-#: earmelf_linux.c:1136 earmelf_linux_eabi.c:1136
-#: earmelf_linux_fdpiceabi.c:1136 earmelf_nacl.c:1136 earmelf_nbsd.c:1131
-#: earmelf_phoenix.c:1136 earmelf_vxworks.c:1171 earmelfb.c:1131
-#: earmelfb_fbsd.c:1131 earmelfb_fuchsia.c:1136 earmelfb_linux.c:1136
-#: earmelfb_linux_eabi.c:1136 earmelfb_linux_fdpiceabi.c:1136
-#: earmelfb_nacl.c:1136 earmelfb_nbsd.c:1131 earmnto.c:1106 earmsymbian.c:1131
+msgstr " --pic-veneer Увек Ñтвара „PIC“ међурадне превлаке\n"
+
+#: eaarch64cloudabi.c:837 eaarch64cloudabib.c:837 eaarch64elf.c:832
+#: eaarch64elf32.c:832 eaarch64elf32b.c:832 eaarch64elfb.c:832
+#: eaarch64fbsd.c:837 eaarch64fbsdb.c:837 eaarch64haiku.c:837
+#: eaarch64linux.c:837 eaarch64linux32.c:837 eaarch64linux32b.c:837
+#: eaarch64linuxb.c:837 earmelf.c:1146 earmelf_fbsd.c:1146
+#: earmelf_fuchsia.c:1151 earmelf_haiku.c:1151 earmelf_linux.c:1151
+#: earmelf_linux_eabi.c:1151 earmelf_linux_fdpiceabi.c:1151
+#: earmelf_nacl.c:1151 earmelf_nbsd.c:1146 earmelf_phoenix.c:1151
+#: earmelf_vxworks.c:1186 earmelfb.c:1146 earmelfb_fbsd.c:1146
+#: earmelfb_fuchsia.c:1151 earmelfb_linux.c:1151 earmelfb_linux_eabi.c:1151
+#: earmelfb_linux_fdpiceabi.c:1151 earmelfb_nacl.c:1151 earmelfb_nbsd.c:1146
+#: earmnto.c:1121
#, c-format
msgid ""
" --stub-group-size=N Maximum size of a group of input sections that\n"
@@ -3423,39 +3623,30 @@ msgid ""
" Values of +/-1 indicate the linker should\n"
" choose suitable defaults.\n"
msgstr ""
-" --stub-group-size=N Ðајвећа величина групе улазних одељака којима\n"
-" може да ради један одељак окрајка. Ðегативна\n"
-" вредноÑÑ‚ налази Ñве окрајке након њихових грана\n"
-" (Ñа величином групе „-N“), док позитивна\n"
-" вредноÑÑ‚ допушта две групе улазних одељака, једну\n"
-" пре , а другу након Ñваког одељка окрајка.\n"
-" ВредноÑти +/-1 означавају да повезивач треба да\n"
-" изабере одговарајућу подразумеваноÑÑ‚.\n"
-
-#: eaarch64cloudabi.c:831 eaarch64cloudabib.c:831 eaarch64elf.c:826
-#: eaarch64elf32.c:826 eaarch64elf32b.c:826 eaarch64elfb.c:826
-#: eaarch64fbsd.c:831 eaarch64fbsdb.c:831 eaarch64linux.c:831
-#: eaarch64linux32.c:831 eaarch64linux32b.c:831 eaarch64linuxb.c:831
+" --stub-group-size=N Ðајвећа величина групе улазних одељака којима\n"
+" може да ради један одељак окрајка. Ðегативна\n"
+" вредноÑÑ‚ налази Ñве окрајке након њихових грана\n"
+" (Ñа величином групе „-N“), док позитивна\n"
+" вредноÑÑ‚ допушта две групе улазних одељака, једну\n"
+" пре , а другу након Ñваког одељка окрајка.\n"
+" ВредноÑти +/-1 означавају да повезивач треба да\n"
+" изабере одговарајућу подразумеваноÑÑ‚.\n"
+
+#: eaarch64cloudabi.c:846 eaarch64cloudabib.c:846 eaarch64elf.c:841
+#: eaarch64elf32.c:841 eaarch64elf32b.c:841 eaarch64elfb.c:841
+#: eaarch64fbsd.c:846 eaarch64fbsdb.c:846 eaarch64haiku.c:846
+#: eaarch64linux.c:846 eaarch64linux32.c:846 eaarch64linux32b.c:846
+#: eaarch64linuxb.c:846
#, c-format
msgid " --fix-cortex-a53-835769 Fix erratum 835769\n"
-msgstr " --fix-cortex-a53-835769 Поправља грешку 835769\n"
+msgstr " --fix-cortex-a53-835769 Поправља грешку 835769\n"
-#: eaarch64cloudabi.c:832 eaarch64cloudabib.c:832 eaarch64elf.c:827
-#: eaarch64elf32.c:827 eaarch64elf32b.c:827 eaarch64elfb.c:827
-#: eaarch64fbsd.c:832 eaarch64fbsdb.c:832 eaarch64linux.c:832
-#: eaarch64linux32.c:832 eaarch64linux32b.c:832 eaarch64linuxb.c:832
-#, fuzzy, c-format
-#| msgid ""
-#| " --fix-cortex-a53-843419[=full|adr|adrp] Fix erratum 843419 and optionally specify which workaround to use.\n"
-#| " full (default): Use both ADRP and ADR workaround, this will \n"
-#| " increase the size of your binaries.\n"
-#| " adr: Only use the ADR workaround, this will not cause any increase\n"
-#| " in binary size but linking will fail if the referenced address is\n"
-#| " out of range of an ADR instruction. This will remove the need of using\n"
-#| " a veneer and results in both performance and size benefits.\n"
-#| " adrp: Use only the ADRP workaround, this will never rewrite your ADRP\n"
-#| " instruction into an ADR. As such the workaround will always use a\n"
-#| " veneer and this will give you both a performance and size overhead.\n"
+#: eaarch64cloudabi.c:847 eaarch64cloudabib.c:847 eaarch64elf.c:842
+#: eaarch64elf32.c:842 eaarch64elf32b.c:842 eaarch64elfb.c:842
+#: eaarch64fbsd.c:847 eaarch64fbsdb.c:847 eaarch64haiku.c:847
+#: eaarch64linux.c:847 eaarch64linux32.c:847 eaarch64linux32b.c:847
+#: eaarch64linuxb.c:847
+#, c-format
msgid ""
" --fix-cortex-a53-843419[=full|adr|adrp] Fix erratum 843419 and optionally specify which workaround to use.\n"
" full (default): Use both ADRP and ADR workaround, this will \n"
@@ -3469,39 +3660,42 @@ msgid ""
" veneer and this will give you both a performance and size overhead.\n"
msgstr ""
" --fix-cortex-a53-843419[=full|adr|adrp] Поправља грешку 843419 и изборно наводи које решење ће Ñе кориÑтити.\n"
-" full (оÑновно): КориÑти и „ADRP“ и „ADR“ решења, ово ће \n"
-" повећати величину ваших извршних.\n"
-" adr: КориÑти Ñамо „ADR“ решење, ово неће довеÑти ни до каквог повећања\n"
-" у величини извршне али повезивање неће уÑпети ако је упутна адреÑа\n"
-" ван опÑега „ADR“ инÑтрукцције. Ово ће уклонити потребу за коришћењем\n"
-" превлаке и резултата кориÑти и у перформанÑама и величини.\n"
-" adrp: КориÑти Ñамо „ADRP“ решење, ово неће никада препиÑати вашу „ADRP“\n"
-" инÑтрукцију у „ADR“. Као такво решење ће увек кориÑтити\n"
-" превлаку а ово ће вам дати утрошак и делотворноÑти и величине.\n"
-
-#: eaarch64cloudabi.c:843 eaarch64cloudabib.c:843 eaarch64elf.c:838
-#: eaarch64elf32.c:838 eaarch64elf32b.c:838 eaarch64elfb.c:838
-#: eaarch64fbsd.c:843 eaarch64fbsdb.c:843 eaarch64linux.c:843
-#: eaarch64linux32.c:843 eaarch64linux32b.c:843 eaarch64linuxb.c:843
+" full (оÑновно): КориÑти и „ADRP“ и „ADR“ решења, ово ће \n"
+" повећати величину ваших извршних.\n"
+" adr: КориÑти Ñамо „ADR“ решење, ово неће довеÑти ни до каквог повећања\n"
+" у величини извршне али повезивање неће уÑпети ако је упутна адреÑа\n"
+" ван опÑега „ADR“ инÑтрукције. Ово ће уклонити потребу за коришћењем\n"
+" превлаке и резултата кориÑти и у делотворноÑти и величини.\n"
+" adrp: КориÑти Ñамо „ADRP“ решење, ово неће никада препиÑати вашу „ADRP“\n"
+" инÑтрукцију у „ADR“. Као такво решење ће увек кориÑтити\n"
+" превлаку а ово ће вам дати утрошак и делотворноÑти и величине.\n"
+
+#: eaarch64cloudabi.c:858 eaarch64cloudabib.c:858 eaarch64elf.c:853
+#: eaarch64elf32.c:853 eaarch64elf32b.c:853 eaarch64elfb.c:853
+#: eaarch64fbsd.c:858 eaarch64fbsdb.c:858 eaarch64haiku.c:858
+#: eaarch64linux.c:858 eaarch64linux32.c:858 eaarch64linux32b.c:858
+#: eaarch64linuxb.c:858
#, c-format
msgid " --no-apply-dynamic-relocs Do not apply link-time values for dynamic relocations\n"
-msgstr " --no-apply-dynamic-relocs Ðе примењује вредноÑти времена повезивања за динамичке премештаје\n"
+msgstr " --no-apply-dynamic-relocs Ðе примењује вредноÑти времена повезивања за динамичке премештаје\n"
-#: eaarch64cloudabi.c:844 eaarch64cloudabib.c:844 eaarch64elf.c:839
-#: eaarch64elf32.c:839 eaarch64elf32b.c:839 eaarch64elfb.c:839
-#: eaarch64fbsd.c:844 eaarch64fbsdb.c:844 eaarch64linux.c:844
-#: eaarch64linux32.c:844 eaarch64linux32b.c:844 eaarch64linuxb.c:844
+#: eaarch64cloudabi.c:859 eaarch64cloudabib.c:859 eaarch64elf.c:854
+#: eaarch64elf32.c:854 eaarch64elf32b.c:854 eaarch64elfb.c:854
+#: eaarch64fbsd.c:859 eaarch64fbsdb.c:859 eaarch64haiku.c:859
+#: eaarch64linux.c:859 eaarch64linux32.c:859 eaarch64linux32b.c:859
+#: eaarch64linuxb.c:859
#, c-format
msgid " -z force-bti Turn on Branch Target Identification mechanism and generate PLTs with BTI. Generate warnings for missing BTI on inputs\n"
-msgstr " -z force-bti Укључује механизам препознавања циља гране и Ñтвара „PLT“-ове Ñа „BTI“. Ствара упозорења за недоÑтајуће „BTI“ на улазима\n"
+msgstr " -z force-bti Укључује механизам препознавања циља гране и Ñтвара „PLT“-ове Ñа „BTI“. Ствара упозорења за недоÑтајуће „BTI“ на улазима\n"
-#: eaarch64cloudabi.c:845 eaarch64cloudabib.c:845 eaarch64elf.c:840
-#: eaarch64elf32.c:840 eaarch64elf32b.c:840 eaarch64elfb.c:840
-#: eaarch64fbsd.c:845 eaarch64fbsdb.c:845 eaarch64linux.c:845
-#: eaarch64linux32.c:845 eaarch64linux32b.c:845 eaarch64linuxb.c:845
+#: eaarch64cloudabi.c:860 eaarch64cloudabib.c:860 eaarch64elf.c:855
+#: eaarch64elf32.c:855 eaarch64elf32b.c:855 eaarch64elfb.c:855
+#: eaarch64fbsd.c:860 eaarch64fbsdb.c:860 eaarch64haiku.c:860
+#: eaarch64linux.c:860 eaarch64linux32.c:860 eaarch64linux32b.c:860
+#: eaarch64linuxb.c:860
#, c-format
msgid " -z pac-plt Protect PLTs with Pointer Authentication.\n"
-msgstr " -z pac-plt Штити „PLT“-ове потврђивањем идентитета показивача.\n"
+msgstr " -z pac-plt Штити „PLT“-ове потврђивањем идентитета показивача.\n"
#: eaix5ppc.c:317 eaix5rs6.c:317 eaixppc.c:317 eaixrs6.c:317 eppcmacos.c:317
msgid "%F%P: cannot open %s\n"
@@ -3551,61 +3745,61 @@ msgstr "%F%P: „bfd_link_hash_lookup“ извоза Ñимбола није у
msgid "%F%P: bfd_xcoff_export_symbol failed: %E\n"
msgstr "%F%P: „bfd_xcoff_export_symbol“ није уÑпело: %E\n"
-#: eaix5ppc.c:854 eaix5rs6.c:854 eaixppc.c:854 eaixrs6.c:854 eppcmacos.c:854
+#: eaix5ppc.c:853 eaix5rs6.c:853 eaixppc.c:853 eaixrs6.c:853 eppcmacos.c:853
msgid "%F%P: can't find output section %s\n"
msgstr "%F%P: не могу да нађем излазни одељак „%s“\n"
-#: eaix5ppc.c:891 eaix5rs6.c:891 eaixppc.c:891 eaixrs6.c:891 eppcmacos.c:891
+#: eaix5ppc.c:890 eaix5rs6.c:890 eaixppc.c:890 eaixrs6.c:890 eppcmacos.c:890
msgid "%F%P: can't find %s in output section\n"
msgstr "%F%P: не могу да нађем „%s“ у излазном одељку\n"
-#: eaix5ppc.c:958 eaix5rs6.c:958 eaixppc.c:958 eaixrs6.c:958 eppcmacos.c:958
+#: eaix5ppc.c:957 eaix5rs6.c:957 eaixppc.c:957 eaixrs6.c:957 eppcmacos.c:957
msgid "%P: can't find required output section %s\n"
msgstr "%P: не могу да нађем захтевани излазни одељак „%s“\n"
-#: eaix5ppc.c:1167 eaix5rs6.c:1167 eaixppc.c:1167 eaixrs6.c:1167
-#: eppcmacos.c:1167
+#: eaix5ppc.c:1204 eaix5rs6.c:1204 eaixppc.c:1204 eaixrs6.c:1204
+#: eppcmacos.c:1204
msgid "%F%P:%s:%d: #! ([member]) is not supported in import files\n"
msgstr "%F%P:%s:%d: #! ([члан]) није подржано у увозним датотекама\n"
-#: eaix5ppc.c:1184 eaix5rs6.c:1184 eaixppc.c:1184 eaixrs6.c:1184
-#: eppcmacos.c:1184
+#: eaix5ppc.c:1221 eaix5rs6.c:1221 eaixppc.c:1221 eaixrs6.c:1221
+#: eppcmacos.c:1221
msgid "%F%P: could not parse import path: %E\n"
msgstr "%F%P: не могу да обрадим путању увоза: %E\n"
-#: eaix5ppc.c:1194 eaix5ppc.c:1206 eaix5rs6.c:1194 eaix5rs6.c:1206
-#: eaixppc.c:1194 eaixppc.c:1206 eaixrs6.c:1194 eaixrs6.c:1206
-#: eppcmacos.c:1194 eppcmacos.c:1206
+#: eaix5ppc.c:1231 eaix5ppc.c:1243 eaix5rs6.c:1231 eaix5rs6.c:1243
+#: eaixppc.c:1231 eaixppc.c:1243 eaixrs6.c:1231 eaixrs6.c:1243
+#: eppcmacos.c:1231 eppcmacos.c:1243
msgid "%P:%s:%d: warning: syntax error in import file\n"
msgstr "%P:%s:%d: упозорење: грешка ÑинтакÑе у датотеци увоза\n"
-#: eaix5ppc.c:1241 eaix5rs6.c:1241 eaixppc.c:1241 eaixrs6.c:1241
-#: eppcmacos.c:1241
+#: eaix5ppc.c:1278 eaix5rs6.c:1278 eaixppc.c:1278 eaixrs6.c:1278
+#: eppcmacos.c:1278
msgid "%P:%s%d: warning: syntax error in import/export file\n"
msgstr "%P:%s%d: упозорење: грешка ÑинтакÑе у датотеци увоза/извоза\n"
-#: eaix5ppc.c:1259 eaix5rs6.c:1259 eaixppc.c:1259 eaixrs6.c:1259
-#: eppcmacos.c:1259
+#: eaix5ppc.c:1296 eaix5rs6.c:1296 eaixppc.c:1296 eaixrs6.c:1296
+#: eppcmacos.c:1296
msgid "%P:%s:%d: warning: syntax error in import/export file\n"
msgstr "%P:%s:%d: упозорење: грешка ÑинтакÑе у датотеци увоза/извоза\n"
-#: eaix5ppc.c:1294 eaix5rs6.c:1294 eaixppc.c:1294 eaixrs6.c:1294
-#: eppcmacos.c:1294
+#: eaix5ppc.c:1331 eaix5rs6.c:1331 eaixppc.c:1331 eaixrs6.c:1331
+#: eppcmacos.c:1331
msgid "%X%P:%s:%d: failed to import symbol %s: %E\n"
msgstr "%X%P:%s:%d: ниÑам уÑпео да увезем Ñимбол „%s“: %E\n"
-#: eaix5ppc.c:1304 eaix5rs6.c:1304 eaixppc.c:1304 eaixrs6.c:1304
-#: eppcmacos.c:1304
+#: eaix5ppc.c:1341 eaix5rs6.c:1341 eaixppc.c:1341 eaixrs6.c:1341
+#: eppcmacos.c:1341
msgid "%P:%s:%d: warning: ignoring unterminated last line\n"
msgstr "%P:%s:%d: упозорење: занемарујем незавршен поÑледњи ред\n"
-#: eaix5ppc.c:1339 eaix5rs6.c:1339 eaixppc.c:1339 eaixrs6.c:1339
-#: eppcmacos.c:1339
+#: eaix5ppc.c:1376 eaix5rs6.c:1376 eaixppc.c:1376 eaixrs6.c:1376
+#: eppcmacos.c:1376
msgid "%F%P: only relocations against symbols are permitted\n"
msgstr "%F%P: Ñамо премештаји наÑпрам Ñимбола Ñу дозвољени\n"
-#: eaix5ppc.c:1342 eaix5rs6.c:1342 eaixppc.c:1342 eaixrs6.c:1342
-#: eppcmacos.c:1342
+#: eaix5ppc.c:1379 eaix5rs6.c:1379 eaixppc.c:1379 eaixrs6.c:1379
+#: eppcmacos.c:1379
msgid "%F%P: bfd_xcoff_link_count_reloc failed: %E\n"
msgstr "%F%P: „bfd_xcoff_link_count_reloc“ није уÑпело: %E\n"
@@ -3614,210 +3808,210 @@ msgstr "%F%P: „bfd_xcoff_link_count_reloc“ није уÑпело: %E\n"
msgid " --identification <string> Set the identification of the output\n"
msgstr " --identification <ниÑка> ПоÑтавља идентификацију излаза\n"
-#: earm_wince_pe.c:378 earmpe.c:378 ei386pe.c:378 ei386pe_posix.c:378
-#: ei386pep.c:361 emcorepe.c:378 eppcpe.c:378 eshpe.c:378
+#: earm_wince_pe.c:399 earmpe.c:399 ei386pe.c:399 ei386pe_posix.c:399
+#: ei386pep.c:383 emcorepe.c:399 eshpe.c:399
#, c-format
msgid " --base_file <basefile> Generate a base file for relocatable DLLs\n"
msgstr " --base_file <дттка_оÑнове> Ствара датотеку оÑнове за премеÑтљиве ДЛЛ-е\n"
-#: earm_wince_pe.c:379 earmpe.c:379 ei386pe.c:379 ei386pe_posix.c:379
-#: ei386pep.c:362 emcorepe.c:379 eppcpe.c:379 eshpe.c:379
+#: earm_wince_pe.c:400 earmpe.c:400 ei386pe.c:400 ei386pe_posix.c:400
+#: ei386pep.c:384 emcorepe.c:400 eshpe.c:400
#, c-format
msgid " --dll Set image base to the default for DLLs\n"
msgstr " --dll Подешава оÑнову Ñлике на оÑновну за ДЛЛ-е\n"
-#: earm_wince_pe.c:380 earmpe.c:380 ei386pe.c:380 ei386pe_posix.c:380
-#: ei386pep.c:363 emcorepe.c:380 eppcpe.c:380 eshpe.c:380
+#: earm_wince_pe.c:401 earmpe.c:401 ei386pe.c:401 ei386pe_posix.c:401
+#: ei386pep.c:385 emcorepe.c:401 eshpe.c:401
#, c-format
msgid " --file-alignment <size> Set file alignment\n"
msgstr " --file-alignment <величина> Подешава поравнање датотеке\n"
-#: earm_wince_pe.c:381 earmpe.c:381 ei386pe.c:381 ei386pe_posix.c:381
-#: ei386pep.c:364 emcorepe.c:381 eppcpe.c:381 eshpe.c:381
+#: earm_wince_pe.c:402 earmpe.c:402 ei386pe.c:402 ei386pe_posix.c:402
+#: ei386pep.c:386 emcorepe.c:402 eshpe.c:402
#, c-format
msgid " --heap <size> Set initial size of the heap\n"
msgstr " --heap <величина> Подешава почетнуи величину гомиле\n"
-#: earm_wince_pe.c:382 earmpe.c:382 ei386pe.c:382 ei386pe_posix.c:382
-#: ei386pep.c:365 emcorepe.c:382 eppcpe.c:382 eshpe.c:382
+#: earm_wince_pe.c:403 earmpe.c:403 ei386pe.c:403 ei386pe_posix.c:403
+#: ei386pep.c:387 emcorepe.c:403 eshpe.c:403
#, c-format
msgid " --image-base <address> Set start address of the executable\n"
msgstr " --image-base <адреÑа> Подешава почетну адреÑу извршног\n"
-#: earm_wince_pe.c:383 earmpe.c:383 ei386pe.c:383 ei386pe_posix.c:383
-#: ei386pep.c:366 emcorepe.c:383 eppcpe.c:383 eshpe.c:383
+#: earm_wince_pe.c:404 earmpe.c:404 ei386pe.c:404 ei386pe_posix.c:404
+#: ei386pep.c:388 emcorepe.c:404 eshpe.c:404
#, c-format
msgid " --major-image-version <number> Set version number of the executable\n"
msgstr " --major-image-version <број> Подешава број издања извршног\n"
-#: earm_wince_pe.c:384 earmpe.c:384 ei386pe.c:384 ei386pe_posix.c:384
-#: ei386pep.c:367 emcorepe.c:384 eppcpe.c:384 eshpe.c:384
+#: earm_wince_pe.c:405 earmpe.c:405 ei386pe.c:405 ei386pe_posix.c:405
+#: ei386pep.c:389 emcorepe.c:405 eshpe.c:405
#, c-format
msgid " --major-os-version <number> Set minimum required OS version\n"
msgstr " --major-os-version <број> Подешава најмање захтевано издање ОС-а\n"
-#: earm_wince_pe.c:385 earmpe.c:385 ei386pe.c:385 ei386pe_posix.c:385
-#: ei386pep.c:368 emcorepe.c:385 eppcpe.c:385 eshpe.c:385
+#: earm_wince_pe.c:406 earmpe.c:406 ei386pe.c:406 ei386pe_posix.c:406
+#: ei386pep.c:390 emcorepe.c:406 eshpe.c:406
#, c-format
msgid " --major-subsystem-version <number> Set minimum required OS subsystem version\n"
msgstr " --major-subsystem-version <број> Подешава најмање захтевано издање подÑиÑтема ОС-а\n"
-#: earm_wince_pe.c:386 earmpe.c:386 ei386pe.c:386 ei386pe_posix.c:386
-#: ei386pep.c:369 emcorepe.c:386 eppcpe.c:386 eshpe.c:386
+#: earm_wince_pe.c:407 earmpe.c:407 ei386pe.c:407 ei386pe_posix.c:407
+#: ei386pep.c:391 emcorepe.c:407 eshpe.c:407
#, c-format
msgid " --minor-image-version <number> Set revision number of the executable\n"
msgstr " --minor-image-version <број> Подешава број ревизије извршног\n"
-#: earm_wince_pe.c:387 earmpe.c:387 ei386pe.c:387 ei386pe_posix.c:387
-#: ei386pep.c:370 emcorepe.c:387 eppcpe.c:387 eshpe.c:387
+#: earm_wince_pe.c:408 earmpe.c:408 ei386pe.c:408 ei386pe_posix.c:408
+#: ei386pep.c:392 emcorepe.c:408 eshpe.c:408
#, c-format
msgid " --minor-os-version <number> Set minimum required OS revision\n"
msgstr " --minor-os-version <број> Подешава најмању захтевану ревизију ОС-а\n"
-#: earm_wince_pe.c:388 earmpe.c:388 ei386pe.c:388 ei386pe_posix.c:388
-#: ei386pep.c:371 emcorepe.c:388 eppcpe.c:388 eshpe.c:388
+#: earm_wince_pe.c:409 earmpe.c:409 ei386pe.c:409 ei386pe_posix.c:409
+#: ei386pep.c:393 emcorepe.c:409 eshpe.c:409
#, c-format
msgid " --minor-subsystem-version <number> Set minimum required OS subsystem revision\n"
msgstr " --minor-subsystem-version <број> Подешава најмању захтевану ревизију подÑиÑтема ОС-а\n"
-#: earm_wince_pe.c:389 earmpe.c:389 ei386pe.c:389 ei386pe_posix.c:389
-#: ei386pep.c:372 emcorepe.c:389 eppcpe.c:389 eshpe.c:389
+#: earm_wince_pe.c:410 earmpe.c:410 ei386pe.c:410 ei386pe_posix.c:410
+#: ei386pep.c:394 emcorepe.c:410 eshpe.c:410
#, c-format
msgid " --section-alignment <size> Set section alignment\n"
msgstr " --section-alignment <величина> Подешава поравнање одељка\n"
-#: earm_wince_pe.c:390 earmpe.c:390 ei386pe.c:390 ei386pe_posix.c:390
-#: ei386pep.c:373 emcorepe.c:390 eppcpe.c:390 eshpe.c:390
+#: earm_wince_pe.c:411 earmpe.c:411 ei386pe.c:411 ei386pe_posix.c:411
+#: ei386pep.c:395 emcorepe.c:411 eshpe.c:411
#, c-format
msgid " --stack <size> Set size of the initial stack\n"
msgstr " --stack <величина> Подешава величину почетног Ñпремника\n"
-#: earm_wince_pe.c:391 earmpe.c:391 ei386pe.c:391 ei386pe_posix.c:391
-#: ei386pep.c:374 emcorepe.c:391 eppcpe.c:391 eshpe.c:391
+#: earm_wince_pe.c:412 earmpe.c:412 ei386pe.c:412 ei386pe_posix.c:412
+#: ei386pep.c:396 emcorepe.c:412 eshpe.c:412
#, c-format
msgid " --subsystem <name>[:<version>] Set required OS subsystem [& version]\n"
msgstr " --subsystem <назив>[:<издање>] Подешава захтевани подÑиÑтем ОС-а [и издања]\n"
-#: earm_wince_pe.c:392 earmpe.c:392 ei386pe.c:392 ei386pe_posix.c:392
-#: ei386pep.c:375 emcorepe.c:392 eppcpe.c:392 eshpe.c:392
+#: earm_wince_pe.c:413 earmpe.c:413 ei386pe.c:413 ei386pe_posix.c:413
+#: ei386pep.c:397 emcorepe.c:413 eshpe.c:413
#, c-format
msgid " --support-old-code Support interworking with old code\n"
msgstr " --support-old-code Подржава међуÑобни рад Ñа Ñтарим кодом\n"
-#: earm_wince_pe.c:393 earmpe.c:393 ei386pe.c:393 ei386pe_posix.c:393
-#: ei386pep.c:376 emcorepe.c:393 eppcpe.c:393 eshpe.c:393
+#: earm_wince_pe.c:414 earmpe.c:414 ei386pe.c:414 ei386pe_posix.c:414
+#: ei386pep.c:398 emcorepe.c:414 eshpe.c:414
#, c-format
msgid " --[no-]leading-underscore Set explicit symbol underscore prefix mode\n"
msgstr " --[no-]leading-underscore Подешава изричити режим префикÑа подвлаке Ñимбола\n"
-#: earm_wince_pe.c:394 earmpe.c:394 ei386pe.c:394 ei386pe_posix.c:394
-#: emcorepe.c:394 eppcpe.c:394 eshpe.c:394
+#: earm_wince_pe.c:415 earmpe.c:415 ei386pe.c:415 ei386pe_posix.c:415
+#: emcorepe.c:415 eshpe.c:415
#, c-format
msgid " --thumb-entry=<symbol> Set the entry point to be Thumb <symbol>\n"
msgstr " --thumb-entry=<Ñимбол> Подешава тачку уноÑа да буде Ñличица <Ñимбол>\n"
-#: earm_wince_pe.c:395 earmpe.c:395 ei386pe.c:395 ei386pe_posix.c:395
-#: emcorepe.c:395 eppcpe.c:395 eshpe.c:395
+#: earm_wince_pe.c:416 earmpe.c:416 ei386pe.c:416 ei386pe_posix.c:416
+#: emcorepe.c:416 eshpe.c:416
#, c-format
msgid " --[no-]insert-timestamp Use a real timestamp rather than zero (default).\n"
msgstr " --[no-]insert-timestamp КориÑти Ñтварну временÑку ознаку умеÑто нуле (оÑновно).\n"
-#: earm_wince_pe.c:396 earmpe.c:396 ei386pe.c:396 ei386pe_posix.c:396
-#: ei386pep.c:378 emcorepe.c:396 eppcpe.c:396 eshpe.c:396
+#: earm_wince_pe.c:417 earmpe.c:417 ei386pe.c:417 ei386pe_posix.c:417
+#: ei386pep.c:400 emcorepe.c:417 eshpe.c:417
#, c-format
msgid " This makes binaries non-deterministic\n"
msgstr " Ово чини бинарне не-детерминиÑтичким\n"
-#: earm_wince_pe.c:398 earmpe.c:398 ei386pe.c:398 ei386pe_posix.c:398
-#: ei386pep.c:380 emcorepe.c:398 eppcpe.c:398 eshpe.c:398
+#: earm_wince_pe.c:419 earmpe.c:419 ei386pe.c:419 ei386pe_posix.c:419
+#: ei386pep.c:402 emcorepe.c:419 eshpe.c:419
#, c-format
msgid " --add-stdcall-alias Export symbols with and without @nn\n"
msgstr " --add-stdcall-alias Извози Ñимболе Ñа и без „@nn“\n"
-#: earm_wince_pe.c:399 earmpe.c:399 ei386pe.c:399 ei386pe_posix.c:399
-#: ei386pep.c:381 emcorepe.c:399 eppcpe.c:399 eshpe.c:399
+#: earm_wince_pe.c:420 earmpe.c:420 ei386pe.c:420 ei386pe_posix.c:420
+#: ei386pep.c:403 emcorepe.c:420 eshpe.c:420
#, c-format
msgid " --disable-stdcall-fixup Don't link _sym to _sym@nn\n"
msgstr " --disable-stdcall-fixup Ðе прави везу за „_sym“ на „_sym@nn“\n"
-#: earm_wince_pe.c:400 earmpe.c:400 ei386pe.c:400 ei386pe_posix.c:400
-#: ei386pep.c:382 emcorepe.c:400 eppcpe.c:400 eshpe.c:400
+#: earm_wince_pe.c:421 earmpe.c:421 ei386pe.c:421 ei386pe_posix.c:421
+#: ei386pep.c:404 emcorepe.c:421 eshpe.c:421
#, c-format
msgid " --enable-stdcall-fixup Link _sym to _sym@nn without warnings\n"
msgstr " --enable-stdcall-fixup Прави вез од „_sym“ на „_sym@nn“ без упозорења\n"
-#: earm_wince_pe.c:401 earmpe.c:401 ei386pe.c:401 ei386pe_posix.c:401
-#: ei386pep.c:383 emcorepe.c:401 eppcpe.c:401 eshpe.c:401
+#: earm_wince_pe.c:422 earmpe.c:422 ei386pe.c:422 ei386pe_posix.c:422
+#: ei386pep.c:405 emcorepe.c:422 eshpe.c:422
#, c-format
msgid " --exclude-symbols sym,sym,... Exclude symbols from automatic export\n"
msgstr " --exclude-symbols Ñим,Ñим,... ИÑкључује Ñимболе из ÑамоÑталног извоза\n"
-#: earm_wince_pe.c:402 earmpe.c:402 ei386pe.c:402 ei386pe_posix.c:402
-#: ei386pep.c:384 emcorepe.c:402 eppcpe.c:402 eshpe.c:402
+#: earm_wince_pe.c:423 earmpe.c:423 ei386pe.c:423 ei386pe_posix.c:423
+#: ei386pep.c:406 emcorepe.c:423 eshpe.c:423
#, c-format
msgid " --exclude-all-symbols Exclude all symbols from automatic export\n"
msgstr " --exclude-all-symbols ИÑкључује Ñве Ñимболе из ÑамоÑталног извоза\n"
-#: earm_wince_pe.c:403 earmpe.c:403 ei386pe.c:403 ei386pe_posix.c:403
-#: ei386pep.c:385 emcorepe.c:403 eppcpe.c:403 eshpe.c:403
+#: earm_wince_pe.c:424 earmpe.c:424 ei386pe.c:424 ei386pe_posix.c:424
+#: ei386pep.c:407 emcorepe.c:424 eshpe.c:424
#, c-format
msgid " --exclude-libs lib,lib,... Exclude libraries from automatic export\n"
msgstr " --exclude-libs библ,библ,... ИÑкључује библиотеке из ÑамоÑталног извоза\n"
-#: earm_wince_pe.c:404 earmpe.c:404 ei386pe.c:404 ei386pe_posix.c:404
-#: ei386pep.c:386 emcorepe.c:404 eppcpe.c:404 eshpe.c:404
+#: earm_wince_pe.c:425 earmpe.c:425 ei386pe.c:425 ei386pe_posix.c:425
+#: ei386pep.c:408 emcorepe.c:425 eshpe.c:425
#, c-format
msgid " --exclude-modules-for-implib mod,mod,...\n"
msgstr " --exclude-modules-for-implib мод,мод,...\n"
-#: earm_wince_pe.c:405 earmpe.c:405 ei386pe.c:405 ei386pe_posix.c:405
-#: ei386pep.c:387 emcorepe.c:405 eppcpe.c:405 eshpe.c:405
+#: earm_wince_pe.c:426 earmpe.c:426 ei386pe.c:426 ei386pe_posix.c:426
+#: ei386pep.c:409 emcorepe.c:426 eshpe.c:426
#, c-format
msgid " Exclude objects, archive members from auto\n"
msgstr " ИÑкључује објекте, чланове архиве из ÑамоÑталног\n"
-#: earm_wince_pe.c:406 earmpe.c:406 ei386pe.c:406 ei386pe_posix.c:406
-#: emcorepe.c:406 eppcpe.c:406 eshpe.c:406
+#: earm_wince_pe.c:427 earmpe.c:427 ei386pe.c:427 ei386pe_posix.c:427
+#: emcorepe.c:427 eshpe.c:427
#, c-format
msgid " export, place into import library instead.\n"
-msgstr " извози, Ñтавља у библиотеку увоза умеÑто тога.\n"
+msgstr " извози, Ñтавља у библиотеку увоза умеÑто тога.\n"
-#: earm_wince_pe.c:407 earmpe.c:407 ei386pe.c:407 ei386pe_posix.c:407
-#: ei386pep.c:389 emcorepe.c:407 eppcpe.c:407 eshpe.c:407
+#: earm_wince_pe.c:428 earmpe.c:428 ei386pe.c:428 ei386pe_posix.c:428
+#: ei386pep.c:411 emcorepe.c:428 eshpe.c:428
#, c-format
msgid " --export-all-symbols Automatically export all globals to DLL\n"
msgstr " --export-all-symbols СамоÑтално извози Ñве општоÑти у ДЛЛ\n"
-#: earm_wince_pe.c:408 earmpe.c:408 ei386pe.c:408 ei386pe_posix.c:408
-#: ei386pep.c:390 emcorepe.c:408 eppcpe.c:408 eshpe.c:408
+#: earm_wince_pe.c:429 earmpe.c:429 ei386pe.c:429 ei386pe_posix.c:429
+#: ei386pep.c:412 emcorepe.c:429 eshpe.c:429
#, c-format
msgid " --kill-at Remove @nn from exported symbols\n"
msgstr " --kill-at Уклања „@nn“ из извезених Ñимбола\n"
-#: earm_wince_pe.c:409 earmpe.c:409 ei386pe.c:409 ei386pe_posix.c:409
-#: ei386pep.c:391 emcorepe.c:409 eppcpe.c:409 eshpe.c:409
+#: earm_wince_pe.c:430 earmpe.c:430 ei386pe.c:430 ei386pe_posix.c:430
+#: ei386pep.c:413 emcorepe.c:430 eshpe.c:430
#, c-format
msgid " --output-def <file> Generate a .DEF file for the built DLL\n"
msgstr " --output-def <дттка> Ствара датотеку „.DEF“ за ДЛЛ изградње\n"
-#: earm_wince_pe.c:410 earmpe.c:410 ei386pe.c:410 ei386pe_posix.c:410
-#: ei386pep.c:392 emcorepe.c:410 eppcpe.c:410 eshpe.c:410
+#: earm_wince_pe.c:431 earmpe.c:431 ei386pe.c:431 ei386pe_posix.c:431
+#: ei386pep.c:414 emcorepe.c:431 eshpe.c:431
#, c-format
msgid " --warn-duplicate-exports Warn about duplicate exports\n"
msgstr " --warn-duplicate-exports Упозорава о удвоÑтрученим извозима\n"
-#: earm_wince_pe.c:411 earmpe.c:411 ei386pe.c:411 ei386pe_posix.c:411
-#: emcorepe.c:411 eppcpe.c:411 eshpe.c:411
+#: earm_wince_pe.c:432 earmpe.c:432 ei386pe.c:432 ei386pe_posix.c:432
+#: emcorepe.c:432 eshpe.c:432
#, c-format
msgid ""
" --compat-implib Create backward compatible import libs;\n"
" create __imp_<SYMBOL> as well.\n"
msgstr ""
" --compat-implib Прави уназад ÑаглаÑне библиотеке увоза;\n"
-" прави „__imp_<СИМБОЛ>“ такође.\n"
+" прави „__imp_<СИМБОЛ>“ такође.\n"
-#: earm_wince_pe.c:412 earmpe.c:412 ei386pe.c:412 ei386pe_posix.c:412
-#: emcorepe.c:412 eppcpe.c:412 eshpe.c:412
+#: earm_wince_pe.c:433 earmpe.c:433 ei386pe.c:433 ei386pe_posix.c:433
+#: emcorepe.c:433 eshpe.c:433
#, c-format
msgid ""
" --enable-auto-image-base[=<address>] Automatically choose image base for DLLs\n"
@@ -3825,17 +4019,17 @@ msgid ""
" specifically set with --image-base\n"
msgstr ""
" --enable-auto-image-base[=<адреÑа>] ÐутоматÑки бира оÑнову Ñлике за „DLL“-ове\n"
-" (опционално почињавши Ñа адреÑом) оÑим ако\n"
-" је нарочито поÑтављено Ñа „--image-base“\n"
+" (опционално почињавши Ñа адреÑом) оÑим ако\n"
+" је нарочито поÑтављено Ñа „--image-base“\n"
-#: earm_wince_pe.c:413 earmpe.c:413 ei386pe.c:413 ei386pe_posix.c:413
-#: emcorepe.c:413 eppcpe.c:413 eshpe.c:413
+#: earm_wince_pe.c:434 earmpe.c:434 ei386pe.c:434 ei386pe_posix.c:434
+#: emcorepe.c:434 eshpe.c:434
#, c-format
msgid " --disable-auto-image-base Do not auto-choose image base. (default)\n"
msgstr " --disable-auto-image-base Ðе бира Ñам оÑнову Ñлике. (оÑновно)\n"
-#: earm_wince_pe.c:414 earmpe.c:414 ei386pe.c:414 ei386pe_posix.c:414
-#: ei386pep.c:396 emcorepe.c:414 eppcpe.c:414 eshpe.c:414
+#: earm_wince_pe.c:435 earmpe.c:435 ei386pe.c:435 ei386pe_posix.c:435
+#: ei386pep.c:418 emcorepe.c:435 eshpe.c:435
#, c-format
msgid ""
" --dll-search-prefix=<string> When linking dynamically to a dll without\n"
@@ -3843,27 +4037,27 @@ msgid ""
" in preference to lib<basename>.dll \n"
msgstr ""
" --dll-search-prefix=<ниÑка> Када динамички повезује на „dll“ без\n"
-" библиотеке увоза, кориÑти „<ниÑка><назив_оÑнове>.dll“\n"
-" умеÑто „lib<назив_оÑнове>.dll“ \n"
+" библиотеке увоза, кориÑти „<ниÑка><назив_оÑнове>.dll“\n"
+" умеÑто „lib<назив_оÑнове>.dll“ \n"
-#: earm_wince_pe.c:415 earmpe.c:415 ei386pe.c:415 ei386pe_posix.c:415
-#: ei386pep.c:397 emcorepe.c:415 eppcpe.c:415 eshpe.c:415
+#: earm_wince_pe.c:436 earmpe.c:436 ei386pe.c:436 ei386pe_posix.c:436
+#: ei386pep.c:419 emcorepe.c:436 eshpe.c:436
#, c-format
msgid ""
" --enable-auto-import Do sophisticated linking of _sym to\n"
" __imp_sym for DATA references\n"
msgstr ""
" --enable-auto-import Одрађује префињеније повезивање „_sym“-а на\n"
-" „__imp_sym“ за упуте ПОДÐТÐКÐ\n"
+" „__imp_sym“ за упуте ПОДÐТÐКÐ\n"
-#: earm_wince_pe.c:416 earmpe.c:416 ei386pe.c:416 ei386pe_posix.c:416
-#: ei386pep.c:398 emcorepe.c:416 eppcpe.c:416 eshpe.c:416
+#: earm_wince_pe.c:437 earmpe.c:437 ei386pe.c:437 ei386pe_posix.c:437
+#: ei386pep.c:420 emcorepe.c:437 eshpe.c:437
#, c-format
msgid " --disable-auto-import Do not auto-import DATA items from DLLs\n"
msgstr " --disable-auto-import Ðе увози ÑамоÑтално Ñтавке ПОДÐТÐКРиз ДЛЛ-а\n"
-#: earm_wince_pe.c:417 earmpe.c:417 ei386pe.c:417 ei386pe_posix.c:417
-#: emcorepe.c:417 eppcpe.c:417 eshpe.c:417
+#: earm_wince_pe.c:438 earmpe.c:438 ei386pe.c:438 ei386pe_posix.c:438
+#: emcorepe.c:438 eshpe.c:438
#, c-format
msgid ""
" --enable-runtime-pseudo-reloc Work around auto-import limitations by\n"
@@ -3871,411 +4065,422 @@ msgid ""
" runtime.\n"
msgstr ""
" --enable-runtime-pseudo-reloc Превазилази ограничења ÑамоÑталног увоза\n"
-" додавајући пÑеудо-премештања која Ñе решавају\n"
-" у време извршавања.\n"
+" додавајући пÑеудо-премештања која Ñе решавају\n"
+" у време извршавања.\n"
-#: earm_wince_pe.c:418 earmpe.c:418 ei386pe.c:418 ei386pe_posix.c:418
-#: emcorepe.c:418 eppcpe.c:418 eshpe.c:418
+#: earm_wince_pe.c:439 earmpe.c:439 ei386pe.c:439 ei386pe_posix.c:439
+#: emcorepe.c:439 eshpe.c:439
#, c-format
msgid ""
" --disable-runtime-pseudo-reloc Do not add runtime pseudo-relocations for\n"
" auto-imported DATA.\n"
msgstr ""
" --disable-runtime-pseudo-reloc Ðе додаје пÑеудо-премештања у време извршавања за\n"
-" ÑамоÑтално увезене ПОДÐТКЕ.\n"
+" ÑамоÑтално увезене ПОДÐТКЕ.\n"
-#: earm_wince_pe.c:419 earmpe.c:419 ei386pe.c:419 ei386pe_posix.c:419
-#: emcorepe.c:419 eppcpe.c:419 eshpe.c:419
+#: earm_wince_pe.c:440 earmpe.c:440 ei386pe.c:440 ei386pe_posix.c:440
+#: emcorepe.c:440 eshpe.c:440
#, c-format
msgid ""
" --enable-extra-pe-debug Enable verbose debug output when building\n"
" or linking to DLLs (esp. auto-import)\n"
msgstr ""
" --enable-extra-pe-debug Укључује опширан излаз прочишћавања када изграђује\n"
-" или прави везе до ДЛЛ-а (нарочито ÑамоÑтални увоз)\n"
+" или прави везе до ДЛЛ-а (нарочито ÑамоÑтални увоз)\n"
-#: earm_wince_pe.c:421 earmpe.c:421 ei386pe.c:421 ei386pe_posix.c:421
-#: emcorepe.c:421 eppcpe.c:421 eshpe.c:421
+#: earm_wince_pe.c:442 earmpe.c:442 ei386pe.c:442 ei386pe_posix.c:442
+#: emcorepe.c:442 eshpe.c:442
#, c-format
msgid ""
" --large-address-aware Executable supports virtual addresses\n"
" greater than 2 gigabytes\n"
msgstr ""
" --large-address-aware Извршни подржава виртуелне адреÑе\n"
-" веће од 2 гигабајта\n"
+" веће од 2 гигабајта\n"
-#: earm_wince_pe.c:422 earmpe.c:422 ei386pe.c:422 ei386pe_posix.c:422
-#: emcorepe.c:422 eppcpe.c:422 eshpe.c:422
+#: earm_wince_pe.c:443 earmpe.c:443 ei386pe.c:443 ei386pe_posix.c:443
+#: emcorepe.c:443 eshpe.c:443
#, c-format
msgid ""
" --disable-large-address-aware Executable does not support virtual\n"
" addresses greater than 2 gigabytes\n"
msgstr ""
" --disable-large-address-aware Извршни не подржава виртуелне\n"
-" адреÑе веће од 2 гигабајта\n"
+" адреÑе веће од 2 гигабајта\n"
-#: earm_wince_pe.c:423 earmpe.c:423 ei386pe.c:423 ei386pe_posix.c:423
-#: ei386pep.c:402 emcorepe.c:423 eppcpe.c:423 eshpe.c:423
+#: earm_wince_pe.c:444 earmpe.c:444 ei386pe.c:444 ei386pe_posix.c:444
+#: ei386pep.c:424 emcorepe.c:444 eshpe.c:444
#, c-format
msgid ""
" --enable-long-section-names Use long COFF section names even in\n"
" executable image files\n"
msgstr ""
" --enable-long-section-names КориÑти дуге називе ЦОФФ одељка, чак и у\n"
-" извршним датотекама Ñлике\n"
+" извршним датотекама Ñлике\n"
-#: earm_wince_pe.c:424 earmpe.c:424 ei386pe.c:424 ei386pe_posix.c:424
-#: ei386pep.c:403 emcorepe.c:424 eppcpe.c:424 eshpe.c:424
+#: earm_wince_pe.c:445 earmpe.c:445 ei386pe.c:445 ei386pe_posix.c:445
+#: ei386pep.c:425 emcorepe.c:445 eshpe.c:445
#, c-format
msgid ""
" --disable-long-section-names Never use long COFF section names, even\n"
" in object files\n"
msgstr ""
" --disable-long-section-names Ðикада не кориÑти дуге називе ЦОФФ одељка, чак ни у\n"
-" објектним датотекама\n"
+" објектним датотекама\n"
-#: earm_wince_pe.c:425 earmpe.c:425 ei386pe.c:425 ei386pe_posix.c:425
-#: ei386pep.c:405 emcorepe.c:425 eppcpe.c:425 eshpe.c:425
+#: earm_wince_pe.c:446 earmpe.c:446 ei386pe.c:446 ei386pe_posix.c:446
+#: ei386pep.c:427 emcorepe.c:446 eshpe.c:446
#, c-format
msgid ""
-" --dynamicbase Image base address may be relocated using\n"
+" --[disable-]dynamicbase Image base address may be relocated using\n"
" address space layout randomization (ASLR)\n"
msgstr ""
-" --dynamicbase ÐдреÑа оÑнове Ñлике Ñе може премеÑтити коришћењем\n"
-" наÑумичноÑти раÑпореда проÑтора адреÑе (ASLR)\n"
+" --[disable-]dynamicbase ÐдреÑа оÑнове Ñлике Ñе може премеÑтити коришћењем\n"
+" наÑумичноÑти раÑпореда проÑтора адреÑе (ASLR)\n"
-#: earm_wince_pe.c:426 earmpe.c:426 ei386pe.c:426 ei386pe_posix.c:426
-#: ei386pep.c:406 emcorepe.c:426 eppcpe.c:426 eshpe.c:426
+#: earm_wince_pe.c:447 earmpe.c:447 ei386pe.c:447 ei386pe_posix.c:447
+#: ei386pep.c:428 emcorepe.c:447 eshpe.c:447
#, c-format
msgid " --enable-reloc-section Create the base relocation table\n"
msgstr " --enable-reloc-section Ствара табелу премештаја оÑнове\n"
-#: earm_wince_pe.c:427 earmpe.c:427 ei386pe.c:427 ei386pe_posix.c:427
-#: ei386pep.c:407 emcorepe.c:427 eppcpe.c:427 eshpe.c:427
+#: earm_wince_pe.c:448 earmpe.c:448 ei386pe.c:448 ei386pe_posix.c:448
+#: ei386pep.c:429 emcorepe.c:448 eshpe.c:448
#, c-format
-msgid " --forceinteg Code integrity checks are enforced\n"
-msgstr " --forceinteg Провере целовитоÑти кода Ñу приÑиљене\n"
+msgid " --disable-reloc-section Do not create the base relocation table\n"
+msgstr " --disable-reloc-section Ðе Ñтвара табелу премештаја оÑнове\n"
-#: earm_wince_pe.c:428 earmpe.c:428 ei386pe.c:428 ei386pe_posix.c:428
-#: ei386pep.c:408 emcorepe.c:428 eppcpe.c:428 eshpe.c:428
+#: earm_wince_pe.c:449 earmpe.c:449 ei386pe.c:449 ei386pe_posix.c:449
+#: ei386pep.c:430 emcorepe.c:449 eshpe.c:449
#, c-format
-msgid " --nxcompat Image is compatible with data execution prevention\n"
-msgstr " --nxcompat Слика је ÑаглаÑна Ñа Ñпречавањем извршавања података\n"
+msgid " --[disable-]forceinteg Code integrity checks are enforced\n"
+msgstr " --[disable-]forceinteg Провере целовитоÑти кода Ñу приÑилне\n"
-#: earm_wince_pe.c:429 earmpe.c:429 ei386pe.c:429 ei386pe_posix.c:429
-#: ei386pep.c:409 emcorepe.c:429 eppcpe.c:429 eshpe.c:429
+#: earm_wince_pe.c:450 earmpe.c:450 ei386pe.c:450 ei386pe_posix.c:450
+#: ei386pep.c:431 emcorepe.c:450 eshpe.c:450
+#, c-format
+msgid ""
+" --[disable-]nxcompat Image is compatible with data execution\n"
+" prevention\n"
+msgstr ""
+" --[disable-]nxcompat Слика је ÑаглаÑна Ñа Ñпречавањем извршавања\n"
+" података\n"
+
+#: earm_wince_pe.c:451 earmpe.c:451 ei386pe.c:451 ei386pe_posix.c:451
+#: ei386pep.c:432 emcorepe.c:451 eshpe.c:451
#, c-format
-msgid " --no-isolation Image understands isolation but do not isolate the image\n"
-msgstr " --no-isolation Слика разуме изолацију али не изолује Ñлику\n"
+msgid ""
+" --[disable-]no-isolation Image understands isolation but do not\n"
+" isolate the image\n"
+msgstr ""
+" --[disable-]no-isolation Слика разуме изолацију али не\n"
+" изолује Ñлику\n"
-#: earm_wince_pe.c:430 earmpe.c:430 ei386pe.c:430 ei386pe_posix.c:430
-#: emcorepe.c:430 eppcpe.c:430 eshpe.c:430
+#: earm_wince_pe.c:452 earmpe.c:452 ei386pe.c:452 ei386pe_posix.c:452
+#: emcorepe.c:452 eshpe.c:452
#, c-format
msgid ""
-" --no-seh Image does not use SEH. No SE handler may\n"
+" --[disable-]no-seh Image does not use SEH. No SE handler may\n"
" be called in this image\n"
msgstr ""
-" --no-seh Слика не кориÑти „SEH“. Ðикакав „SE“ руковалац не може\n"
-" бити позван у овој Ñлици\n"
+" --[disable-]no-seh Слика не кориÑти „SEH“. Ðикакав „SE“ руковалац не може\n"
+" бити позван у овој Ñлици\n"
-#: earm_wince_pe.c:431 earmpe.c:431 ei386pe.c:431 ei386pe_posix.c:431
-#: ei386pep.c:411 emcorepe.c:431 eppcpe.c:431 eshpe.c:431
+#: earm_wince_pe.c:453 earmpe.c:453 ei386pe.c:453 ei386pe_posix.c:453
+#: ei386pep.c:434 emcorepe.c:453 eshpe.c:453
#, c-format
-msgid " --no-bind Do not bind this image\n"
-msgstr " --no-bind Ðе Ñвезује ову Ñлику\n"
+msgid " --[disable-]no-bind Do not bind this image\n"
+msgstr " --[disable-]no-bind Ðе Ñвезује ову Ñлику\n"
-#: earm_wince_pe.c:432 earmpe.c:432 ei386pe.c:432 ei386pe_posix.c:432
-#: ei386pep.c:412 emcorepe.c:432 eppcpe.c:432 eshpe.c:432
+#: earm_wince_pe.c:454 earmpe.c:454 ei386pe.c:454 ei386pe_posix.c:454
+#: ei386pep.c:435 emcorepe.c:454 eshpe.c:454
#, c-format
-msgid " --wdmdriver Driver uses the WDM model\n"
-msgstr " --wdmdriver Управљачки програм кориÑти „WDM“ модел\n"
+msgid " --[disable-]wdmdriver Driver uses the WDM model\n"
+msgstr " --[disable-]wdmdriver Управљачки програм кориÑти „WDM“ модел\n"
-#: earm_wince_pe.c:433 earmpe.c:433 ei386pe.c:433 ei386pe_posix.c:433
-#: ei386pep.c:413 emcorepe.c:433 eppcpe.c:433 eshpe.c:433
+#: earm_wince_pe.c:455 earmpe.c:455 ei386pe.c:455 ei386pe_posix.c:455
+#: ei386pep.c:436 emcorepe.c:455 eshpe.c:455
#, c-format
-msgid " --tsaware Image is Terminal Server aware\n"
-msgstr " --tsaware Слика је ÑвеÑна Ñервера терминала\n"
+msgid " --[disable-]tsaware Image is Terminal Server aware\n"
+msgstr " --[disable-]tsaware Слика је ÑвеÑна Ñервера терминала\n"
-#: earm_wince_pe.c:434 earmpe.c:434 ei386pe.c:434 ei386pe_posix.c:434
-#: ei386pep.c:414 emcorepe.c:434 eppcpe.c:434 eshpe.c:434
+#: earm_wince_pe.c:456 earmpe.c:456 ei386pe.c:456 ei386pe_posix.c:456
+#: ei386pep.c:437 emcorepe.c:456 eshpe.c:456
#, c-format
-msgid " --build-id[=STYLE] Generate build ID\n"
+msgid " --build-id[=STYLE] Generate build ID\n"
msgstr " --build-id[=СТИЛ] Ствара ИБ изградње\n"
-#: earm_wince_pe.c:562 earmpe.c:562 ei386beos.c:205 ei386pe.c:562
-#: ei386pe_posix.c:562 ei386pep.c:539 emcorepe.c:562 eppcpe.c:562 eshpe.c:562
+#: earm_wince_pe.c:584 earmpe.c:584 ei386beos.c:205 ei386pe.c:584
+#: ei386pe_posix.c:584 ei386pep.c:562 emcorepe.c:584 eshpe.c:584
msgid "%P: warning: bad version number in -subsystem option\n"
msgstr "%P: упозорење: лош број издања у опцији „-subsystem“\n"
-#: earm_wince_pe.c:587 earmpe.c:587 ei386beos.c:222 ei386pe.c:587
-#: ei386pe_posix.c:587 ei386pep.c:564 emcorepe.c:587 eppcpe.c:587 eshpe.c:587
+#: earm_wince_pe.c:609 earmpe.c:609 ei386beos.c:222 ei386pe.c:609
+#: ei386pe_posix.c:609 ei386pep.c:587 emcorepe.c:609 eshpe.c:609
msgid "%F%P: invalid subsystem type %s\n"
msgstr "%F%P: неиÑправна врÑта подÑиÑтема „%s“\n"
-#: earm_wince_pe.c:608 earmpe.c:608 ei386beos.c:233 ei386pe.c:608
-#: ei386pe_posix.c:608 ei386pep.c:585 emcorepe.c:608 eppcpe.c:608 eshpe.c:608
+#: earm_wince_pe.c:630 earmpe.c:630 ei386beos.c:233 ei386pe.c:630
+#: ei386pe_posix.c:630 ei386pep.c:608 emcorepe.c:630 eshpe.c:630
msgid "%F%P: invalid hex number for PE parameter '%s'\n"
msgstr "%F%P: неиÑправан Ñ…ÐµÐºÑ Ð±Ñ€Ð¾Ñ˜ за ПЕ параметар „%s“\n"
-#: earm_wince_pe.c:625 earmpe.c:625 ei386beos.c:250 ei386pe.c:625
-#: ei386pe_posix.c:625 ei386pep.c:602 emcorepe.c:625 eppcpe.c:625 eshpe.c:625
+#: earm_wince_pe.c:647 earmpe.c:647 ei386beos.c:250 ei386pe.c:647
+#: ei386pe_posix.c:647 ei386pep.c:625 emcorepe.c:647 eshpe.c:647
msgid "%F%P: strange hex info for PE parameter '%s'\n"
msgstr "%F%P: чудни Ñ…ÐµÐºÑ Ð¿Ð¾Ð´Ð°Ñ†Ð¸ за ПЕ параметар „%s“\n"
-#: earm_wince_pe.c:641 earmpe.c:641 eelf32mcore.c:282 ei386beos.c:266
-#: ei386pe.c:641 ei386pe_posix.c:641 ei386pep.c:619 emcorepe.c:641
-#: eppcpe.c:641 eshpe.c:641
+#: earm_wince_pe.c:663 earmpe.c:663 eelf32mcore.c:293 ei386beos.c:266
+#: ei386pe.c:663 ei386pe_posix.c:663 ei386pep.c:642 emcorepe.c:663 eshpe.c:663
msgid "%F%P: cannot open base file %s\n"
msgstr "%F%P: не могу да отворим датотеку оÑнове „%s“\n"
-#: earm_wince_pe.c:937 earmpe.c:937 ei386beos.c:362 ei386pe.c:937
-#: ei386pe_posix.c:937 ei386pep.c:899 emcorepe.c:937 eppcpe.c:937 eshpe.c:937
+#: earm_wince_pe.c:986 earmpe.c:986 ei386beos.c:362 ei386pe.c:986
+#: ei386pe_posix.c:986 ei386pep.c:952 emcorepe.c:986 eshpe.c:986
msgid "%P: warning, file alignment > section alignment\n"
msgstr "%P: упозорење: поравнање датотеке > поравнања одељка\n"
-#: earm_wince_pe.c:950 earmpe.c:950 ei386pe.c:950 ei386pe_posix.c:950
-#: emcorepe.c:950 eppcpe.c:950 eshpe.c:950
+#: earm_wince_pe.c:999 earmpe.c:999 ei386pe.c:999 ei386pe_posix.c:999
+#: emcorepe.c:999 eshpe.c:999
msgid "%P: warning: --export-dynamic is not supported for PE targets, did you mean --export-all-symbols?\n"
msgstr "%P: упозорење: „--export-dynamic“ није подржано за ПЕ мете, да ли Ñте миÑлили „--export-all-symbols“?\n"
-#: earm_wince_pe.c:995 earmpe.c:995 ei386pe.c:995 ei386pe_posix.c:995
-#: emcorepe.c:995 eppcpe.c:995 eshpe.c:995
+#: earm_wince_pe.c:1044 earmpe.c:1044 ei386pe.c:1044 ei386pe_posix.c:1044
+#: emcorepe.c:1044 eshpe.c:1044
msgid "%P: warning: resolving %s by linking to %s\n"
msgstr "%P: упозорење: решавам „%s“ повезивањем на „%s“\n"
-#: earm_wince_pe.c:1000 earmpe.c:1000 ei386pe.c:1000 ei386pe_posix.c:1000
-#: ei386pep.c:985 ei386pep.c:1012 emcorepe.c:1000 eppcpe.c:1000 eshpe.c:1000
+#: earm_wince_pe.c:1049 earmpe.c:1049 ei386pe.c:1049 ei386pe_posix.c:1049
+#: ei386pep.c:1038 ei386pep.c:1065 emcorepe.c:1049 eshpe.c:1049
msgid "Use --enable-stdcall-fixup to disable these warnings\n"
msgstr "КориÑтите „--enable-stdcall-fixup“ да иÑкључите ова упозорења\n"
-#: earm_wince_pe.c:1001 earmpe.c:1001 ei386pe.c:1001 ei386pe_posix.c:1001
-#: ei386pep.c:986 ei386pep.c:1013 emcorepe.c:1001 eppcpe.c:1001 eshpe.c:1001
+#: earm_wince_pe.c:1050 earmpe.c:1050 ei386pe.c:1050 ei386pe_posix.c:1050
+#: ei386pep.c:1039 ei386pep.c:1066 emcorepe.c:1050 eshpe.c:1050
msgid "Use --disable-stdcall-fixup to disable these fixups\n"
msgstr "КориÑтите „--disable-stdcall-fixup“ да иÑкључите ове иÑправке\n"
-#: earm_wince_pe.c:1070 earmpe.c:1070 ei386pe.c:1070 ei386pe_posix.c:1070
-#: ei386pep.c:1064 emcorepe.c:1070 eppcpe.c:1070 eshpe.c:1070
+#: earm_wince_pe.c:1119 earmpe.c:1119 ei386pe.c:1119 ei386pe_posix.c:1119
+#: ei386pep.c:1117 emcorepe.c:1119 eshpe.c:1119
msgid "%P: %C: cannot get section contents - auto-import exception\n"
msgstr "%P: %C: не могу да добавим Ñадржај одељка — изузетак ÑамоÑталног увоза\n"
-#: earm_wince_pe.c:1155 earmpe.c:1155 ei386pe.c:1155 ei386pe_posix.c:1155
-#: ei386pep.c:1158 emcorepe.c:1155 eppcpe.c:1155 eshpe.c:1155
+#: earm_wince_pe.c:1204 earmpe.c:1204 ei386pe.c:1204 ei386pe_posix.c:1204
+#: ei386pep.c:1211 emcorepe.c:1204 eshpe.c:1204
msgid "%P: warning: .buildid section discarded, --build-id ignored\n"
msgstr "%P: упозорење: „.buildid“ одељак је одбачен, „--build-id“ је занемарено\n"
-#: earm_wince_pe.c:1252 earmpe.c:1252 ei386pe.c:1252 ei386pe_posix.c:1252
-#: ei386pep.c:1255 emcorepe.c:1252 eppcpe.c:1252 eshpe.c:1252
+#: earm_wince_pe.c:1301 earmpe.c:1301 ei386pe.c:1301 ei386pe_posix.c:1301
+#: ei386pep.c:1308 emcorepe.c:1301 eshpe.c:1301
msgid "%P: warning: cannot create .buildid section, --build-id ignored\n"
msgstr "%P: упозорење: не могу да направим „.buildid“ одељак, „--build-id“ је занемарено\n"
-#: earm_wince_pe.c:1306 earmpe.c:1306 ei386pe.c:1306 ei386pe_posix.c:1306
-#: ei386pep.c:1310 emcorepe.c:1306 eppcpe.c:1306 eshpe.c:1306
+#: earm_wince_pe.c:1355 earmpe.c:1355 ei386pe.c:1355 ei386pe_posix.c:1355
+#: ei386pep.c:1363 emcorepe.c:1355 eshpe.c:1355
msgid "%F%P: cannot perform PE operations on non PE output file '%pB'\n"
msgstr "%F%P: не могу да обавим ПЕ радње на излазној датотеци која није ПЕ „%pB“\n"
-#: earm_wince_pe.c:1449 earmpe.c:1449 ei386pe.c:1449 ei386pe_posix.c:1449
-#: ei386pep.c:1434 emcorepe.c:1449 eppcpe.c:1449 eshpe.c:1449
+#: earm_wince_pe.c:1498 earmpe.c:1498 ei386pe.c:1498 ei386pe_posix.c:1498
+#: ei386pep.c:1487 emcorepe.c:1498 eshpe.c:1498
msgid "%X%P: unable to process relocs: %E\n"
msgstr "%X%P: не могу да обрадим премештаје: %E\n"
-#: earm_wince_pe.c:1687 earmelf.c:138 earmelf_fbsd.c:138 earmelf_fuchsia.c:139
-#: earmelf_linux.c:139 earmelf_linux_eabi.c:139 earmelf_linux_fdpiceabi.c:139
-#: earmelf_nacl.c:139 earmelf_nbsd.c:138 earmelf_phoenix.c:139
-#: earmelf_vxworks.c:138 earmelfb.c:138 earmelfb_fbsd.c:138
-#: earmelfb_fuchsia.c:139 earmelfb_linux.c:139 earmelfb_linux_eabi.c:139
-#: earmelfb_linux_fdpiceabi.c:139 earmelfb_nacl.c:139 earmelfb_nbsd.c:138
-#: earmnto.c:138 earmpe.c:1687 earmsymbian.c:138 ei386beos.c:610
-#: ei386beos.c:631 ei386pe.c:1687 ei386pe_posix.c:1687 emcorepe.c:1687
-#: eppcpe.c:1687 eshpe.c:1687
-#, c-format
-msgid "%P: errors encountered processing file %s\n"
-msgstr "%P: наиђох на грешке током обраде датотеке „%s“\n"
-
-#: earm_wince_pe.c:1710 earmpe.c:1710 ei386pe.c:1710 ei386pe_posix.c:1710
-#: emcorepe.c:1710 eppcpe.c:1710 eshpe.c:1710
+#: earm_wince_pe.c:1742 earmpe.c:1742 ei386pe.c:1742 ei386pe_posix.c:1742
+#: emcorepe.c:1742 eshpe.c:1742
#, c-format
msgid "%P: errors encountered processing file %s for interworking\n"
msgstr "%P: наиђох на грешке током обраде датотеке „%s“ за међуÑобни рад\n"
-#: earm_wince_pe.c:1877 earmelf.c:520 earmelf_fbsd.c:520 earmelf_fuchsia.c:521
-#: earmelf_linux.c:521 earmelf_linux_eabi.c:521 earmelf_linux_fdpiceabi.c:521
-#: earmelf_nacl.c:521 earmelf_nbsd.c:520 earmelf_phoenix.c:521
-#: earmelf_vxworks.c:520 earmelfb.c:520 earmelfb_fbsd.c:520
-#: earmelfb_fuchsia.c:521 earmelfb_linux.c:521 earmelfb_linux_eabi.c:521
-#: earmelfb_linux_fdpiceabi.c:521 earmelfb_nacl.c:521 earmelfb_nbsd.c:520
-#: earmnto.c:520 earmpe.c:1877 earmsymbian.c:520 ei386pe.c:1877
-#: ei386pe_posix.c:1877 emcorepe.c:1877 eppcpe.c:1877 eshpe.c:1877
+#: earm_wince_pe.c:1909 earmelf.c:520 earmelf_fbsd.c:520 earmelf_fuchsia.c:521
+#: earmelf_haiku.c:521 earmelf_linux.c:521 earmelf_linux_eabi.c:521
+#: earmelf_linux_fdpiceabi.c:521 earmelf_nacl.c:521 earmelf_nbsd.c:520
+#: earmelf_phoenix.c:521 earmelf_vxworks.c:520 earmelfb.c:520
+#: earmelfb_fbsd.c:520 earmelfb_fuchsia.c:521 earmelfb_linux.c:521
+#: earmelfb_linux_eabi.c:521 earmelfb_linux_fdpiceabi.c:521
+#: earmelfb_nacl.c:521 earmelfb_nbsd.c:520 earmnto.c:520 earmpe.c:1909
+#: ei386pe.c:1909 ei386pe_posix.c:1909 emcorepe.c:1909 eshpe.c:1909
msgid "%P: warning: '--thumb-entry %s' is overriding '-e %s'\n"
msgstr "%P: упозорење: „--thumb-entry %s“ препиÑује „-e %s“\n"
-#: earm_wince_pe.c:1882 earmelf.c:525 earmelf_fbsd.c:525 earmelf_fuchsia.c:526
-#: earmelf_linux.c:526 earmelf_linux_eabi.c:526 earmelf_linux_fdpiceabi.c:526
-#: earmelf_nacl.c:526 earmelf_nbsd.c:525 earmelf_phoenix.c:526
-#: earmelf_vxworks.c:525 earmelfb.c:525 earmelfb_fbsd.c:525
-#: earmelfb_fuchsia.c:526 earmelfb_linux.c:526 earmelfb_linux_eabi.c:526
-#: earmelfb_linux_fdpiceabi.c:526 earmelfb_nacl.c:526 earmelfb_nbsd.c:525
-#: earmnto.c:525 earmpe.c:1882 earmsymbian.c:525 ei386pe.c:1882
-#: ei386pe_posix.c:1882 emcorepe.c:1882 eppcpe.c:1882 eshpe.c:1882
+#: earm_wince_pe.c:1914 earmelf.c:525 earmelf_fbsd.c:525 earmelf_fuchsia.c:526
+#: earmelf_haiku.c:526 earmelf_linux.c:526 earmelf_linux_eabi.c:526
+#: earmelf_linux_fdpiceabi.c:526 earmelf_nacl.c:526 earmelf_nbsd.c:525
+#: earmelf_phoenix.c:526 earmelf_vxworks.c:525 earmelfb.c:525
+#: earmelfb_fbsd.c:525 earmelfb_fuchsia.c:526 earmelfb_linux.c:526
+#: earmelfb_linux_eabi.c:526 earmelfb_linux_fdpiceabi.c:526
+#: earmelfb_nacl.c:526 earmelfb_nbsd.c:525 earmnto.c:525 earmpe.c:1914
+#: ei386pe.c:1914 ei386pe_posix.c:1914 emcorepe.c:1914 eshpe.c:1914
msgid "%P: warning: cannot find thumb start symbol %s\n"
msgstr "%P: упозорење: не могу да нађем почетни Ñимбол Ñличице „%s“\n"
-#: earmelf.c:551 earmelf_fbsd.c:551 earmelf_fuchsia.c:552 earmelf_linux.c:552
-#: earmelf_linux_eabi.c:552 earmelf_linux_fdpiceabi.c:552 earmelf_nacl.c:552
-#: earmelf_nbsd.c:551 earmelf_phoenix.c:552 earmelf_vxworks.c:551
-#: earmelfb.c:551 earmelfb_fbsd.c:551 earmelfb_fuchsia.c:552
-#: earmelfb_linux.c:552 earmelfb_linux_eabi.c:552
+#: earmelf.c:138 earmelf_fbsd.c:138 earmelf_fuchsia.c:139 earmelf_haiku.c:139
+#: earmelf_linux.c:139 earmelf_linux_eabi.c:139 earmelf_linux_fdpiceabi.c:139
+#: earmelf_nacl.c:139 earmelf_nbsd.c:138 earmelf_phoenix.c:139
+#: earmelf_vxworks.c:138 earmelfb.c:138 earmelfb_fbsd.c:138
+#: earmelfb_fuchsia.c:139 earmelfb_linux.c:139 earmelfb_linux_eabi.c:139
+#: earmelfb_linux_fdpiceabi.c:139 earmelfb_nacl.c:139 earmelfb_nbsd.c:138
+#: earmnto.c:138 ei386beos.c:615
+#, c-format
+msgid "%P: errors encountered processing file %s\n"
+msgstr "%P: наиђох на грешке током обраде датотеке „%s“\n"
+
+#: earmelf.c:551 earmelf_fbsd.c:551 earmelf_fuchsia.c:552 earmelf_haiku.c:552
+#: earmelf_linux.c:552 earmelf_linux_eabi.c:552 earmelf_linux_fdpiceabi.c:552
+#: earmelf_nacl.c:552 earmelf_nbsd.c:551 earmelf_phoenix.c:552
+#: earmelf_vxworks.c:551 earmelfb.c:551 earmelfb_fbsd.c:551
+#: earmelfb_fuchsia.c:552 earmelfb_linux.c:552 earmelfb_linux_eabi.c:552
#: earmelfb_linux_fdpiceabi.c:552 earmelfb_nacl.c:552 earmelfb_nbsd.c:551
-#: earmnto.c:551 earmsymbian.c:551
+#: earmnto.c:551
msgid "%F%P: %s: can't open: %E\n"
msgstr "%F%P: %s: не могу да отворим: %E\n"
-#: earmelf.c:554 earmelf_fbsd.c:554 earmelf_fuchsia.c:555 earmelf_linux.c:555
-#: earmelf_linux_eabi.c:555 earmelf_linux_fdpiceabi.c:555 earmelf_nacl.c:555
-#: earmelf_nbsd.c:554 earmelf_phoenix.c:555 earmelf_vxworks.c:554
-#: earmelfb.c:554 earmelfb_fbsd.c:554 earmelfb_fuchsia.c:555
-#: earmelfb_linux.c:555 earmelfb_linux_eabi.c:555
+#: earmelf.c:554 earmelf_fbsd.c:554 earmelf_fuchsia.c:555 earmelf_haiku.c:555
+#: earmelf_linux.c:555 earmelf_linux_eabi.c:555 earmelf_linux_fdpiceabi.c:555
+#: earmelf_nacl.c:555 earmelf_nbsd.c:554 earmelf_phoenix.c:555
+#: earmelf_vxworks.c:554 earmelfb.c:554 earmelfb_fbsd.c:554
+#: earmelfb_fuchsia.c:555 earmelfb_linux.c:555 earmelfb_linux_eabi.c:555
#: earmelfb_linux_fdpiceabi.c:555 earmelfb_nacl.c:555 earmelfb_nbsd.c:554
-#: earmnto.c:554 earmsymbian.c:554
+#: earmnto.c:554
msgid "%F%P: %s: not a relocatable file: %E\n"
msgstr "%F%P: %s: није премеÑтива датотека: %E\n"
-#: earmelf.c:1030 earmelf_fbsd.c:1030 earmelf_fuchsia.c:1035
-#: earmelf_linux.c:1035 earmelf_linux_eabi.c:1035
-#: earmelf_linux_fdpiceabi.c:1035 earmelf_nacl.c:1035 earmelf_nbsd.c:1030
-#: earmelf_phoenix.c:1035 earmelf_vxworks.c:1066 earmelfb.c:1030
-#: earmelfb_fbsd.c:1030 earmelfb_fuchsia.c:1035 earmelfb_linux.c:1035
-#: earmelfb_linux_eabi.c:1035 earmelfb_linux_fdpiceabi.c:1035
-#: earmelfb_nacl.c:1035 earmelfb_nbsd.c:1030 earmnto.c:1005 earmsymbian.c:1030
+#: earmelf.c:1045 earmelf_fbsd.c:1045 earmelf_fuchsia.c:1050
+#: earmelf_haiku.c:1050 earmelf_linux.c:1050 earmelf_linux_eabi.c:1050
+#: earmelf_linux_fdpiceabi.c:1050 earmelf_nacl.c:1050 earmelf_nbsd.c:1045
+#: earmelf_phoenix.c:1050 earmelf_vxworks.c:1081 earmelfb.c:1045
+#: earmelfb_fbsd.c:1045 earmelfb_fuchsia.c:1050 earmelfb_linux.c:1050
+#: earmelfb_linux_eabi.c:1050 earmelfb_linux_fdpiceabi.c:1050
+#: earmelfb_nacl.c:1050 earmelfb_nbsd.c:1045 earmnto.c:1020
msgid "%P: unrecognized VFP11 fix type '%s'\n"
msgstr "%P: непозната врÑта „VFP11“ поправке „%s“\n"
-#: earmelf.c:1043 earmelf_fbsd.c:1043 earmelf_fuchsia.c:1048
-#: earmelf_linux.c:1048 earmelf_linux_eabi.c:1048
-#: earmelf_linux_fdpiceabi.c:1048 earmelf_nacl.c:1048 earmelf_nbsd.c:1043
-#: earmelf_phoenix.c:1048 earmelf_vxworks.c:1079 earmelfb.c:1043
-#: earmelfb_fbsd.c:1043 earmelfb_fuchsia.c:1048 earmelfb_linux.c:1048
-#: earmelfb_linux_eabi.c:1048 earmelfb_linux_fdpiceabi.c:1048
-#: earmelfb_nacl.c:1048 earmelfb_nbsd.c:1043 earmnto.c:1018 earmsymbian.c:1043
+#: earmelf.c:1058 earmelf_fbsd.c:1058 earmelf_fuchsia.c:1063
+#: earmelf_haiku.c:1063 earmelf_linux.c:1063 earmelf_linux_eabi.c:1063
+#: earmelf_linux_fdpiceabi.c:1063 earmelf_nacl.c:1063 earmelf_nbsd.c:1058
+#: earmelf_phoenix.c:1063 earmelf_vxworks.c:1094 earmelfb.c:1058
+#: earmelfb_fbsd.c:1058 earmelfb_fuchsia.c:1063 earmelfb_linux.c:1063
+#: earmelfb_linux_eabi.c:1063 earmelfb_linux_fdpiceabi.c:1063
+#: earmelfb_nacl.c:1063 earmelfb_nbsd.c:1058 earmnto.c:1033
msgid "%P: unrecognized STM32L4XX fix type '%s'\n"
msgstr "%P: непозната врÑта „STM32L4XX“ поправке „%s“\n"
-#: earmelf.c:1110 earmelf_fbsd.c:1110 earmelf_fuchsia.c:1115
-#: earmelf_linux.c:1115 earmelf_linux_eabi.c:1115
-#: earmelf_linux_fdpiceabi.c:1115 earmelf_nacl.c:1115 earmelf_nbsd.c:1110
-#: earmelf_phoenix.c:1115 earmelf_vxworks.c:1150 earmelfb.c:1110
-#: earmelfb_fbsd.c:1110 earmelfb_fuchsia.c:1115 earmelfb_linux.c:1115
-#: earmelfb_linux_eabi.c:1115 earmelfb_linux_fdpiceabi.c:1115
-#: earmelfb_nacl.c:1115 earmelfb_nbsd.c:1110 earmnto.c:1085 earmsymbian.c:1110
+#: earmelf.c:1125 earmelf_fbsd.c:1125 earmelf_fuchsia.c:1130
+#: earmelf_haiku.c:1130 earmelf_linux.c:1130 earmelf_linux_eabi.c:1130
+#: earmelf_linux_fdpiceabi.c:1130 earmelf_nacl.c:1130 earmelf_nbsd.c:1125
+#: earmelf_phoenix.c:1130 earmelf_vxworks.c:1165 earmelfb.c:1125
+#: earmelfb_fbsd.c:1125 earmelfb_fuchsia.c:1130 earmelfb_linux.c:1130
+#: earmelfb_linux_eabi.c:1130 earmelfb_linux_fdpiceabi.c:1130
+#: earmelfb_nacl.c:1130 earmelfb_nbsd.c:1125 earmnto.c:1100
#, c-format
msgid " --thumb-entry=<sym> Set the entry point to be Thumb symbol <sym>\n"
msgstr " --thumb-entry=<Ñим> Подешава тачку уноÑа на Ñимбол Ñличице <Ñим>\n"
-#: earmelf.c:1111 earmelf_fbsd.c:1111 earmelf_fuchsia.c:1116
-#: earmelf_linux.c:1116 earmelf_linux_eabi.c:1116
-#: earmelf_linux_fdpiceabi.c:1116 earmelf_nacl.c:1116 earmelf_nbsd.c:1111
-#: earmelf_phoenix.c:1116 earmelf_vxworks.c:1151 earmelfb.c:1111
-#: earmelfb_fbsd.c:1111 earmelfb_fuchsia.c:1116 earmelfb_linux.c:1116
-#: earmelfb_linux_eabi.c:1116 earmelfb_linux_fdpiceabi.c:1116
-#: earmelfb_nacl.c:1116 earmelfb_nbsd.c:1111 earmnto.c:1086 earmsymbian.c:1111
+#: earmelf.c:1126 earmelf_fbsd.c:1126 earmelf_fuchsia.c:1131
+#: earmelf_haiku.c:1131 earmelf_linux.c:1131 earmelf_linux_eabi.c:1131
+#: earmelf_linux_fdpiceabi.c:1131 earmelf_nacl.c:1131 earmelf_nbsd.c:1126
+#: earmelf_phoenix.c:1131 earmelf_vxworks.c:1166 earmelfb.c:1126
+#: earmelfb_fbsd.c:1126 earmelfb_fuchsia.c:1131 earmelfb_linux.c:1131
+#: earmelfb_linux_eabi.c:1131 earmelfb_linux_fdpiceabi.c:1131
+#: earmelfb_nacl.c:1131 earmelfb_nbsd.c:1126 earmnto.c:1101
#, c-format
msgid " --be8 Output BE8 format image\n"
msgstr " --be8 Даје излаз Ñлике у „BE8“ запиÑу\n"
-#: earmelf.c:1112 earmelf_fbsd.c:1112 earmelf_fuchsia.c:1117
-#: earmelf_linux.c:1117 earmelf_linux_eabi.c:1117
-#: earmelf_linux_fdpiceabi.c:1117 earmelf_nacl.c:1117 earmelf_nbsd.c:1112
-#: earmelf_phoenix.c:1117 earmelf_vxworks.c:1152 earmelfb.c:1112
-#: earmelfb_fbsd.c:1112 earmelfb_fuchsia.c:1117 earmelfb_linux.c:1117
-#: earmelfb_linux_eabi.c:1117 earmelfb_linux_fdpiceabi.c:1117
-#: earmelfb_nacl.c:1117 earmelfb_nbsd.c:1112 earmnto.c:1087 earmsymbian.c:1112
+#: earmelf.c:1127 earmelf_fbsd.c:1127 earmelf_fuchsia.c:1132
+#: earmelf_haiku.c:1132 earmelf_linux.c:1132 earmelf_linux_eabi.c:1132
+#: earmelf_linux_fdpiceabi.c:1132 earmelf_nacl.c:1132 earmelf_nbsd.c:1127
+#: earmelf_phoenix.c:1132 earmelf_vxworks.c:1167 earmelfb.c:1127
+#: earmelfb_fbsd.c:1127 earmelfb_fuchsia.c:1132 earmelfb_linux.c:1132
+#: earmelfb_linux_eabi.c:1132 earmelfb_linux_fdpiceabi.c:1132
+#: earmelfb_nacl.c:1132 earmelfb_nbsd.c:1127 earmnto.c:1102
#, c-format
msgid " --target1-rel Interpret R_ARM_TARGET1 as R_ARM_REL32\n"
msgstr " --target1-rel Тумачи „R_ARM_TARGET1“ као „R_ARM_REL32“\n"
-#: earmelf.c:1113 earmelf_fbsd.c:1113 earmelf_fuchsia.c:1118
-#: earmelf_linux.c:1118 earmelf_linux_eabi.c:1118
-#: earmelf_linux_fdpiceabi.c:1118 earmelf_nacl.c:1118 earmelf_nbsd.c:1113
-#: earmelf_phoenix.c:1118 earmelf_vxworks.c:1153 earmelfb.c:1113
-#: earmelfb_fbsd.c:1113 earmelfb_fuchsia.c:1118 earmelfb_linux.c:1118
-#: earmelfb_linux_eabi.c:1118 earmelfb_linux_fdpiceabi.c:1118
-#: earmelfb_nacl.c:1118 earmelfb_nbsd.c:1113 earmnto.c:1088 earmsymbian.c:1113
+#: earmelf.c:1128 earmelf_fbsd.c:1128 earmelf_fuchsia.c:1133
+#: earmelf_haiku.c:1133 earmelf_linux.c:1133 earmelf_linux_eabi.c:1133
+#: earmelf_linux_fdpiceabi.c:1133 earmelf_nacl.c:1133 earmelf_nbsd.c:1128
+#: earmelf_phoenix.c:1133 earmelf_vxworks.c:1168 earmelfb.c:1128
+#: earmelfb_fbsd.c:1128 earmelfb_fuchsia.c:1133 earmelfb_linux.c:1133
+#: earmelfb_linux_eabi.c:1133 earmelfb_linux_fdpiceabi.c:1133
+#: earmelfb_nacl.c:1133 earmelfb_nbsd.c:1128 earmnto.c:1103
#, c-format
msgid " --target1-abs Interpret R_ARM_TARGET1 as R_ARM_ABS32\n"
msgstr " --target1-abs Тумачи „R_ARM_TARGET1“ као „R_ARM_REL32“\n"
-#: earmelf.c:1114 earmelf_fbsd.c:1114 earmelf_fuchsia.c:1119
-#: earmelf_linux.c:1119 earmelf_linux_eabi.c:1119
-#: earmelf_linux_fdpiceabi.c:1119 earmelf_nacl.c:1119 earmelf_nbsd.c:1114
-#: earmelf_phoenix.c:1119 earmelf_vxworks.c:1154 earmelfb.c:1114
-#: earmelfb_fbsd.c:1114 earmelfb_fuchsia.c:1119 earmelfb_linux.c:1119
-#: earmelfb_linux_eabi.c:1119 earmelfb_linux_fdpiceabi.c:1119
-#: earmelfb_nacl.c:1119 earmelfb_nbsd.c:1114 earmnto.c:1089 earmsymbian.c:1114
+#: earmelf.c:1129 earmelf_fbsd.c:1129 earmelf_fuchsia.c:1134
+#: earmelf_haiku.c:1134 earmelf_linux.c:1134 earmelf_linux_eabi.c:1134
+#: earmelf_linux_fdpiceabi.c:1134 earmelf_nacl.c:1134 earmelf_nbsd.c:1129
+#: earmelf_phoenix.c:1134 earmelf_vxworks.c:1169 earmelfb.c:1129
+#: earmelfb_fbsd.c:1129 earmelfb_fuchsia.c:1134 earmelfb_linux.c:1134
+#: earmelfb_linux_eabi.c:1134 earmelfb_linux_fdpiceabi.c:1134
+#: earmelfb_nacl.c:1134 earmelfb_nbsd.c:1129 earmnto.c:1104
#, c-format
msgid " --target2=<type> Specify definition of R_ARM_TARGET2\n"
msgstr " --target2=<врÑта> Ðаводи дефиницију за „R_ARM_TARGET2“\n"
-#: earmelf.c:1115 earmelf_fbsd.c:1115 earmelf_fuchsia.c:1120
-#: earmelf_linux.c:1120 earmelf_linux_eabi.c:1120
-#: earmelf_linux_fdpiceabi.c:1120 earmelf_nacl.c:1120 earmelf_nbsd.c:1115
-#: earmelf_phoenix.c:1120 earmelf_vxworks.c:1155 earmelfb.c:1115
-#: earmelfb_fbsd.c:1115 earmelfb_fuchsia.c:1120 earmelfb_linux.c:1120
-#: earmelfb_linux_eabi.c:1120 earmelfb_linux_fdpiceabi.c:1120
-#: earmelfb_nacl.c:1120 earmelfb_nbsd.c:1115 earmnto.c:1090 earmsymbian.c:1115
+#: earmelf.c:1130 earmelf_fbsd.c:1130 earmelf_fuchsia.c:1135
+#: earmelf_haiku.c:1135 earmelf_linux.c:1135 earmelf_linux_eabi.c:1135
+#: earmelf_linux_fdpiceabi.c:1135 earmelf_nacl.c:1135 earmelf_nbsd.c:1130
+#: earmelf_phoenix.c:1135 earmelf_vxworks.c:1170 earmelfb.c:1130
+#: earmelfb_fbsd.c:1130 earmelfb_fuchsia.c:1135 earmelfb_linux.c:1135
+#: earmelfb_linux_eabi.c:1135 earmelfb_linux_fdpiceabi.c:1135
+#: earmelfb_nacl.c:1135 earmelfb_nbsd.c:1130 earmnto.c:1105
#, c-format
msgid " --fix-v4bx Rewrite BX rn as MOV pc, rn for ARMv4\n"
msgstr " --fix-v4bx ПрепиÑује „BX rn“ као „MOV pc“, „rn“ за „ARMv4“\n"
-#: earmelf.c:1116 earmelf_fbsd.c:1116 earmelf_fuchsia.c:1121
-#: earmelf_linux.c:1121 earmelf_linux_eabi.c:1121
-#: earmelf_linux_fdpiceabi.c:1121 earmelf_nacl.c:1121 earmelf_nbsd.c:1116
-#: earmelf_phoenix.c:1121 earmelf_vxworks.c:1156 earmelfb.c:1116
-#: earmelfb_fbsd.c:1116 earmelfb_fuchsia.c:1121 earmelfb_linux.c:1121
-#: earmelfb_linux_eabi.c:1121 earmelfb_linux_fdpiceabi.c:1121
-#: earmelfb_nacl.c:1121 earmelfb_nbsd.c:1116 earmnto.c:1091 earmsymbian.c:1116
+#: earmelf.c:1131 earmelf_fbsd.c:1131 earmelf_fuchsia.c:1136
+#: earmelf_haiku.c:1136 earmelf_linux.c:1136 earmelf_linux_eabi.c:1136
+#: earmelf_linux_fdpiceabi.c:1136 earmelf_nacl.c:1136 earmelf_nbsd.c:1131
+#: earmelf_phoenix.c:1136 earmelf_vxworks.c:1171 earmelfb.c:1131
+#: earmelfb_fbsd.c:1131 earmelfb_fuchsia.c:1136 earmelfb_linux.c:1136
+#: earmelfb_linux_eabi.c:1136 earmelfb_linux_fdpiceabi.c:1136
+#: earmelfb_nacl.c:1136 earmelfb_nbsd.c:1131 earmnto.c:1106
#, c-format
msgid " --fix-v4bx-interworking Rewrite BX rn branch to ARMv4 interworking veneer\n"
msgstr " --fix-v4bx-interworking ПрепиÑује „BX rn“ грану у „ARMv4“ међурадну превлаку\n"
-#: earmelf.c:1117 earmelf_fbsd.c:1117 earmelf_fuchsia.c:1122
-#: earmelf_linux.c:1122 earmelf_linux_eabi.c:1122
-#: earmelf_linux_fdpiceabi.c:1122 earmelf_nacl.c:1122 earmelf_nbsd.c:1117
-#: earmelf_phoenix.c:1122 earmelf_vxworks.c:1157 earmelfb.c:1117
-#: earmelfb_fbsd.c:1117 earmelfb_fuchsia.c:1122 earmelfb_linux.c:1122
-#: earmelfb_linux_eabi.c:1122 earmelfb_linux_fdpiceabi.c:1122
-#: earmelfb_nacl.c:1122 earmelfb_nbsd.c:1117 earmnto.c:1092 earmsymbian.c:1117
+#: earmelf.c:1132 earmelf_fbsd.c:1132 earmelf_fuchsia.c:1137
+#: earmelf_haiku.c:1137 earmelf_linux.c:1137 earmelf_linux_eabi.c:1137
+#: earmelf_linux_fdpiceabi.c:1137 earmelf_nacl.c:1137 earmelf_nbsd.c:1132
+#: earmelf_phoenix.c:1137 earmelf_vxworks.c:1172 earmelfb.c:1132
+#: earmelfb_fbsd.c:1132 earmelfb_fuchsia.c:1137 earmelfb_linux.c:1137
+#: earmelfb_linux_eabi.c:1137 earmelfb_linux_fdpiceabi.c:1137
+#: earmelfb_nacl.c:1137 earmelfb_nbsd.c:1132 earmnto.c:1107
#, c-format
msgid " --use-blx Enable use of BLX instructions\n"
msgstr " --use-blx Омогућује коришћење „BLX“ инÑтрукција\n"
-#: earmelf.c:1118 earmelf_fbsd.c:1118 earmelf_fuchsia.c:1123
-#: earmelf_linux.c:1123 earmelf_linux_eabi.c:1123
-#: earmelf_linux_fdpiceabi.c:1123 earmelf_nacl.c:1123 earmelf_nbsd.c:1118
-#: earmelf_phoenix.c:1123 earmelf_vxworks.c:1158 earmelfb.c:1118
-#: earmelfb_fbsd.c:1118 earmelfb_fuchsia.c:1123 earmelfb_linux.c:1123
-#: earmelfb_linux_eabi.c:1123 earmelfb_linux_fdpiceabi.c:1123
-#: earmelfb_nacl.c:1123 earmelfb_nbsd.c:1118 earmnto.c:1093 earmsymbian.c:1118
+#: earmelf.c:1133 earmelf_fbsd.c:1133 earmelf_fuchsia.c:1138
+#: earmelf_haiku.c:1138 earmelf_linux.c:1138 earmelf_linux_eabi.c:1138
+#: earmelf_linux_fdpiceabi.c:1138 earmelf_nacl.c:1138 earmelf_nbsd.c:1133
+#: earmelf_phoenix.c:1138 earmelf_vxworks.c:1173 earmelfb.c:1133
+#: earmelfb_fbsd.c:1133 earmelfb_fuchsia.c:1138 earmelfb_linux.c:1138
+#: earmelfb_linux_eabi.c:1138 earmelfb_linux_fdpiceabi.c:1138
+#: earmelfb_nacl.c:1138 earmelfb_nbsd.c:1133 earmnto.c:1108
#, c-format
msgid " --vfp11-denorm-fix Specify how to fix VFP11 denorm erratum\n"
msgstr " --vfp11-denorm-fix Ðаводи како поправити „VFP11“ денорм грешку\n"
-#: earmelf.c:1119 earmelf_fbsd.c:1119 earmelf_fuchsia.c:1124
-#: earmelf_linux.c:1124 earmelf_linux_eabi.c:1124
-#: earmelf_linux_fdpiceabi.c:1124 earmelf_nacl.c:1124 earmelf_nbsd.c:1119
-#: earmelf_phoenix.c:1124 earmelf_vxworks.c:1159 earmelfb.c:1119
-#: earmelfb_fbsd.c:1119 earmelfb_fuchsia.c:1124 earmelfb_linux.c:1124
-#: earmelfb_linux_eabi.c:1124 earmelfb_linux_fdpiceabi.c:1124
-#: earmelfb_nacl.c:1124 earmelfb_nbsd.c:1119 earmnto.c:1094 earmsymbian.c:1119
+#: earmelf.c:1134 earmelf_fbsd.c:1134 earmelf_fuchsia.c:1139
+#: earmelf_haiku.c:1139 earmelf_linux.c:1139 earmelf_linux_eabi.c:1139
+#: earmelf_linux_fdpiceabi.c:1139 earmelf_nacl.c:1139 earmelf_nbsd.c:1134
+#: earmelf_phoenix.c:1139 earmelf_vxworks.c:1174 earmelfb.c:1134
+#: earmelfb_fbsd.c:1134 earmelfb_fuchsia.c:1139 earmelfb_linux.c:1139
+#: earmelfb_linux_eabi.c:1139 earmelfb_linux_fdpiceabi.c:1139
+#: earmelfb_nacl.c:1139 earmelfb_nbsd.c:1134 earmnto.c:1109
#, c-format
msgid " --fix-stm32l4xx-629360 Specify how to fix STM32L4XX 629360 erratum\n"
msgstr " --fix-stm32l4xx-629360 Ðаводи каоко поправити „STM32L4XX 629360“ грешку\n"
-#: earmelf.c:1125 earmelf_fbsd.c:1125 earmelf_fuchsia.c:1130
-#: earmelf_linux.c:1130 earmelf_linux_eabi.c:1130
-#: earmelf_linux_fdpiceabi.c:1130 earmelf_nacl.c:1130 earmelf_nbsd.c:1125
-#: earmelf_phoenix.c:1130 earmelf_vxworks.c:1165 earmelfb.c:1125
-#: earmelfb_fbsd.c:1125 earmelfb_fuchsia.c:1130 earmelfb_linux.c:1130
-#: earmelfb_linux_eabi.c:1130 earmelfb_linux_fdpiceabi.c:1130
-#: earmelfb_nacl.c:1130 earmelfb_nbsd.c:1125 earmnto.c:1100 earmsymbian.c:1125
+#: earmelf.c:1140 earmelf_fbsd.c:1140 earmelf_fuchsia.c:1145
+#: earmelf_haiku.c:1145 earmelf_linux.c:1145 earmelf_linux_eabi.c:1145
+#: earmelf_linux_fdpiceabi.c:1145 earmelf_nacl.c:1145 earmelf_nbsd.c:1140
+#: earmelf_phoenix.c:1145 earmelf_vxworks.c:1180 earmelfb.c:1140
+#: earmelfb_fbsd.c:1140 earmelfb_fuchsia.c:1145 earmelfb_linux.c:1145
+#: earmelfb_linux_eabi.c:1145 earmelfb_linux_fdpiceabi.c:1145
+#: earmelfb_nacl.c:1145 earmelfb_nbsd.c:1140 earmnto.c:1115
#, c-format
msgid ""
" --long-plt Generate long .plt entries\n"
@@ -4284,13 +4489,13 @@ msgstr ""
" --long-plt Ствара дуге „.plt“ уноÑе\n"
" за руковање дугим „.plt/.got“ размештајима\n"
-#: earmelf.c:1127 earmelf_fbsd.c:1127 earmelf_fuchsia.c:1132
-#: earmelf_linux.c:1132 earmelf_linux_eabi.c:1132
-#: earmelf_linux_fdpiceabi.c:1132 earmelf_nacl.c:1132 earmelf_nbsd.c:1127
-#: earmelf_phoenix.c:1132 earmelf_vxworks.c:1167 earmelfb.c:1127
-#: earmelfb_fbsd.c:1127 earmelfb_fuchsia.c:1132 earmelfb_linux.c:1132
-#: earmelfb_linux_eabi.c:1132 earmelfb_linux_fdpiceabi.c:1132
-#: earmelfb_nacl.c:1132 earmelfb_nbsd.c:1127 earmnto.c:1102 earmsymbian.c:1127
+#: earmelf.c:1142 earmelf_fbsd.c:1142 earmelf_fuchsia.c:1147
+#: earmelf_haiku.c:1147 earmelf_linux.c:1147 earmelf_linux_eabi.c:1147
+#: earmelf_linux_fdpiceabi.c:1147 earmelf_nacl.c:1147 earmelf_nbsd.c:1142
+#: earmelf_phoenix.c:1147 earmelf_vxworks.c:1182 earmelfb.c:1142
+#: earmelfb_fbsd.c:1142 earmelfb_fuchsia.c:1147 earmelfb_linux.c:1147
+#: earmelfb_linux_eabi.c:1147 earmelfb_linux_fdpiceabi.c:1147
+#: earmelfb_nacl.c:1147 earmelfb_nbsd.c:1142 earmnto.c:1117
#, c-format
msgid ""
" --cmse-implib Make import library to be a secure gateway import\n"
@@ -4299,13 +4504,13 @@ msgstr ""
" --cmse-implib Чини да библиотека увоза буде безбедна библиотека увоза\n"
" мрежног пролаза као за „ARMv8-M“ проширења безбедноÑти\n"
-#: earmelf.c:1129 earmelf_fbsd.c:1129 earmelf_fuchsia.c:1134
-#: earmelf_linux.c:1134 earmelf_linux_eabi.c:1134
-#: earmelf_linux_fdpiceabi.c:1134 earmelf_nacl.c:1134 earmelf_nbsd.c:1129
-#: earmelf_phoenix.c:1134 earmelf_vxworks.c:1169 earmelfb.c:1129
-#: earmelfb_fbsd.c:1129 earmelfb_fuchsia.c:1134 earmelfb_linux.c:1134
-#: earmelfb_linux_eabi.c:1134 earmelfb_linux_fdpiceabi.c:1134
-#: earmelfb_nacl.c:1134 earmelfb_nbsd.c:1129 earmnto.c:1104 earmsymbian.c:1129
+#: earmelf.c:1144 earmelf_fbsd.c:1144 earmelf_fuchsia.c:1149
+#: earmelf_haiku.c:1149 earmelf_linux.c:1149 earmelf_linux_eabi.c:1149
+#: earmelf_linux_fdpiceabi.c:1149 earmelf_nacl.c:1149 earmelf_nbsd.c:1144
+#: earmelf_phoenix.c:1149 earmelf_vxworks.c:1184 earmelfb.c:1144
+#: earmelfb_fbsd.c:1144 earmelfb_fuchsia.c:1149 earmelfb_linux.c:1149
+#: earmelfb_linux_eabi.c:1149 earmelfb_linux_fdpiceabi.c:1149
+#: earmelfb_nacl.c:1149 earmelfb_nbsd.c:1144 earmnto.c:1119
#, c-format
msgid ""
" --in-implib Import library whose symbols address must\n"
@@ -4314,35 +4519,35 @@ msgstr ""
" --in-implib Увози библиотеку чија адреÑа Ñимбола мора\n"
" оÑтати Ñтабилна\n"
-#: earmelf.c:1140 earmelf_fbsd.c:1140 earmelf_fuchsia.c:1145
-#: earmelf_linux.c:1145 earmelf_linux_eabi.c:1145
-#: earmelf_linux_fdpiceabi.c:1145 earmelf_nacl.c:1145 earmelf_nbsd.c:1140
-#: earmelf_phoenix.c:1145 earmelf_vxworks.c:1180 earmelfb.c:1140
-#: earmelfb_fbsd.c:1140 earmelfb_fuchsia.c:1145 earmelfb_linux.c:1145
-#: earmelfb_linux_eabi.c:1145 earmelfb_linux_fdpiceabi.c:1145
-#: earmelfb_nacl.c:1145 earmelfb_nbsd.c:1140 earmnto.c:1115 earmsymbian.c:1140
+#: earmelf.c:1155 earmelf_fbsd.c:1155 earmelf_fuchsia.c:1160
+#: earmelf_haiku.c:1160 earmelf_linux.c:1160 earmelf_linux_eabi.c:1160
+#: earmelf_linux_fdpiceabi.c:1160 earmelf_nacl.c:1160 earmelf_nbsd.c:1155
+#: earmelf_phoenix.c:1160 earmelf_vxworks.c:1195 earmelfb.c:1155
+#: earmelfb_fbsd.c:1155 earmelfb_fuchsia.c:1160 earmelfb_linux.c:1160
+#: earmelfb_linux_eabi.c:1160 earmelfb_linux_fdpiceabi.c:1160
+#: earmelfb_nacl.c:1160 earmelfb_nbsd.c:1155 earmnto.c:1130
#, c-format
msgid " --[no-]fix-cortex-a8 Disable/enable Cortex-A8 Thumb-2 branch erratum fix\n"
msgstr " --[no-]fix-cortex-a8 Онемогућује/омогућује поправку грешке „Cortex-A8 Thumb-2“ гране\n"
-#: earmelf.c:1141 earmelf_fbsd.c:1141 earmelf_fuchsia.c:1146
-#: earmelf_linux.c:1146 earmelf_linux_eabi.c:1146
-#: earmelf_linux_fdpiceabi.c:1146 earmelf_nacl.c:1146 earmelf_nbsd.c:1141
-#: earmelf_phoenix.c:1146 earmelf_vxworks.c:1181 earmelfb.c:1141
-#: earmelfb_fbsd.c:1141 earmelfb_fuchsia.c:1146 earmelfb_linux.c:1146
-#: earmelfb_linux_eabi.c:1146 earmelfb_linux_fdpiceabi.c:1146
-#: earmelfb_nacl.c:1146 earmelfb_nbsd.c:1141 earmnto.c:1116 earmsymbian.c:1141
+#: earmelf.c:1156 earmelf_fbsd.c:1156 earmelf_fuchsia.c:1161
+#: earmelf_haiku.c:1161 earmelf_linux.c:1161 earmelf_linux_eabi.c:1161
+#: earmelf_linux_fdpiceabi.c:1161 earmelf_nacl.c:1161 earmelf_nbsd.c:1156
+#: earmelf_phoenix.c:1161 earmelf_vxworks.c:1196 earmelfb.c:1156
+#: earmelfb_fbsd.c:1156 earmelfb_fuchsia.c:1161 earmelfb_linux.c:1161
+#: earmelfb_linux_eabi.c:1161 earmelfb_linux_fdpiceabi.c:1161
+#: earmelfb_nacl.c:1161 earmelfb_nbsd.c:1156 earmnto.c:1131
#, c-format
msgid " --no-merge-exidx-entries Disable merging exidx entries\n"
msgstr " --no-merge-exidx-entries ИÑкључује Ñтапање „exidx“ уноÑа\n"
-#: earmelf.c:1142 earmelf_fbsd.c:1142 earmelf_fuchsia.c:1147
-#: earmelf_linux.c:1147 earmelf_linux_eabi.c:1147
-#: earmelf_linux_fdpiceabi.c:1147 earmelf_nacl.c:1147 earmelf_nbsd.c:1142
-#: earmelf_phoenix.c:1147 earmelf_vxworks.c:1182 earmelfb.c:1142
-#: earmelfb_fbsd.c:1142 earmelfb_fuchsia.c:1147 earmelfb_linux.c:1147
-#: earmelfb_linux_eabi.c:1147 earmelfb_linux_fdpiceabi.c:1147
-#: earmelfb_nacl.c:1147 earmelfb_nbsd.c:1142 earmnto.c:1117 earmsymbian.c:1142
+#: earmelf.c:1157 earmelf_fbsd.c:1157 earmelf_fuchsia.c:1162
+#: earmelf_haiku.c:1162 earmelf_linux.c:1162 earmelf_linux_eabi.c:1162
+#: earmelf_linux_fdpiceabi.c:1162 earmelf_nacl.c:1162 earmelf_nbsd.c:1157
+#: earmelf_phoenix.c:1162 earmelf_vxworks.c:1197 earmelfb.c:1157
+#: earmelfb_fbsd.c:1157 earmelfb_fuchsia.c:1162 earmelfb_linux.c:1162
+#: earmelfb_linux_eabi.c:1162 earmelfb_linux_fdpiceabi.c:1162
+#: earmelfb_nacl.c:1162 earmelfb_nbsd.c:1157 earmnto.c:1132
#, c-format
msgid " --[no-]fix-arm1176 Disable/enable ARM1176 BLX immediate erratum fix\n"
msgstr " --[no-]fix-arm1176 Онемогућава/омогућава тренутну поправку „ARM1176 BLX“ грешке\n"
@@ -4359,9 +4564,9 @@ msgstr "%X%P: не могу да направим динамичке одељкÐ
msgid "%X%P: dynamic sections created in non-dynamic link\n"
msgstr "%X%P: динамички одељци Ñу Ñтворени у нединамичкој вези\n"
-#: earmelf_vxworks.c:1184 eelf32_sparc_vxworks.c:487 eelf32ebmipvxworks.c:745
-#: eelf32elmipvxworks.c:745 eelf32ppcvxworks.c:810 eelf_i386_vxworks.c:564
-#: eshelf_vxworks.c:457 eshlelf_vxworks.c:457
+#: earmelf_vxworks.c:1199 eelf32_sparc_vxworks.c:502 eelf32ebmipvxworks.c:760
+#: eelf32elmipvxworks.c:760 eelf32ppcvxworks.c:825 eelf_i386_vxworks.c:587
+#: eshelf_vxworks.c:472 eshlelf_vxworks.c:472
#, c-format
msgid " --force-dynamic Always create dynamic sections\n"
msgstr " --force-dynamic Увек Ñтвара динамичке одељке\n"
@@ -4380,24 +4585,24 @@ msgstr "%X%P: не могу да поÑтавим ÑпиÑак улазног о
msgid "%X%P: can not create stub BFD: %E\n"
msgstr "%X%P: не могу да направим „BFD“ окрајка: %E\n"
-#: eavr1.c:527 eavr2.c:527 eavr25.c:527 eavr3.c:527 eavr31.c:527 eavr35.c:527
-#: eavr4.c:527 eavr5.c:527 eavr51.c:527 eavr6.c:527 eavrtiny.c:527
-#: eavrxmega1.c:527 eavrxmega2.c:527 eavrxmega3.c:527 eavrxmega4.c:527
-#: eavrxmega5.c:527 eavrxmega6.c:527 eavrxmega7.c:527
+#: eavr1.c:538 eavr2.c:538 eavr25.c:538 eavr3.c:538 eavr31.c:538 eavr35.c:538
+#: eavr4.c:538 eavr5.c:538 eavr51.c:538 eavr6.c:538 eavrtiny.c:538
+#: eavrxmega1.c:538 eavrxmega2.c:538 eavrxmega3.c:538 eavrxmega4.c:538
+#: eavrxmega5.c:538 eavrxmega6.c:538 eavrxmega7.c:538
#, c-format
msgid ""
" --pmem-wrap-around=<val> Make the linker relaxation machine assume that a\n"
" program counter wrap-around occurs at address\n"
" <val>. Supported values: 8k, 16k, 32k and 64k.\n"
msgstr ""
-" --pmem-wrap-around=<врд> Чини да машина одмарања повезивача претпоÑтави\n"
+" --pmem-wrap-around=<врд> Чини да машина одмарања повезивача претпоÑтави\n"
" да Ñе преламања бројача програма јављају на адреÑи\n"
" <вредноÑÑ‚>. Подржане вредноÑти Ñу: 8k, 16k, 32k и 64k.\n"
-#: eavr1.c:533 eavr2.c:533 eavr25.c:533 eavr3.c:533 eavr31.c:533 eavr35.c:533
-#: eavr4.c:533 eavr5.c:533 eavr51.c:533 eavr6.c:533 eavrtiny.c:533
-#: eavrxmega1.c:533 eavrxmega2.c:533 eavrxmega3.c:533 eavrxmega4.c:533
-#: eavrxmega5.c:533 eavrxmega6.c:533 eavrxmega7.c:533
+#: eavr1.c:544 eavr2.c:544 eavr25.c:544 eavr3.c:544 eavr31.c:544 eavr35.c:544
+#: eavr4.c:544 eavr5.c:544 eavr51.c:544 eavr6.c:544 eavrtiny.c:544
+#: eavrxmega1.c:544 eavrxmega2.c:544 eavrxmega3.c:544 eavrxmega4.c:544
+#: eavrxmega5.c:544 eavrxmega6.c:544 eavrxmega7.c:544
#, c-format
msgid ""
" --no-call-ret-replacement The relaxation machine normally will\n"
@@ -4410,10 +4615,10 @@ msgstr ""
" инÑтрукције једном инÑтрукцијом Ñкока.\n"
" Ова опција иÑкључује ову оптимизацију.\n"
-#: eavr1.c:541 eavr2.c:541 eavr25.c:541 eavr3.c:541 eavr31.c:541 eavr35.c:541
-#: eavr4.c:541 eavr5.c:541 eavr51.c:541 eavr6.c:541 eavrtiny.c:541
-#: eavrxmega1.c:541 eavrxmega2.c:541 eavrxmega3.c:541 eavrxmega4.c:541
-#: eavrxmega5.c:541 eavrxmega6.c:541 eavrxmega7.c:541
+#: eavr1.c:552 eavr2.c:552 eavr25.c:552 eavr3.c:552 eavr31.c:552 eavr35.c:552
+#: eavr4.c:552 eavr5.c:552 eavr51.c:552 eavr6.c:552 eavrtiny.c:552
+#: eavrxmega1.c:552 eavrxmega2.c:552 eavrxmega3.c:552 eavrxmega4.c:552
+#: eavrxmega5.c:552 eavrxmega6.c:552 eavrxmega7.c:552
#, c-format
msgid ""
" --no-stubs If the linker detects to attempt to access\n"
@@ -4421,26 +4626,26 @@ msgid ""
" is limited to 128k max, it inserts a jump\n"
" stub. You can de-active this with this switch.\n"
msgstr ""
-" --no-stubs Ðко повезивач открије да покушава да приÑтупи\n"
+" --no-stubs Ðко повезивач открије да покушава да приÑтупи\n"
" инÑтрукцији изван 128k премештајем које је\n"
" ограничено на највише 128k, убацује окрајак\n"
" Ñкока. Ово можете иÑкључити овом опцијом.\n"
-#: eavr1.c:549 eavr2.c:549 eavr25.c:549 eavr3.c:549 eavr31.c:549 eavr35.c:549
-#: eavr4.c:549 eavr5.c:549 eavr51.c:549 eavr6.c:549 eavrtiny.c:549
-#: eavrxmega1.c:549 eavrxmega2.c:549 eavrxmega3.c:549 eavrxmega4.c:549
-#: eavrxmega5.c:549 eavrxmega6.c:549 eavrxmega7.c:549
+#: eavr1.c:560 eavr2.c:560 eavr25.c:560 eavr3.c:560 eavr31.c:560 eavr35.c:560
+#: eavr4.c:560 eavr5.c:560 eavr51.c:560 eavr6.c:560 eavrtiny.c:560
+#: eavrxmega1.c:560 eavrxmega2.c:560 eavrxmega3.c:560 eavrxmega4.c:560
+#: eavrxmega5.c:560 eavrxmega6.c:560 eavrxmega7.c:560
#, c-format
msgid " --debug-stubs Used for debugging avr-ld.\n"
-msgstr " --debug-stubs КориÑти Ñе за прочишћавање „avr-ld“.\n"
+msgstr " --debug-stubs КориÑти Ñе за прочишћавање „avr-ld“.\n"
-#: eavr1.c:551 eavr2.c:551 eavr25.c:551 eavr3.c:551 eavr31.c:551 eavr35.c:551
-#: eavr4.c:551 eavr5.c:551 eavr51.c:551 eavr6.c:551 eavrtiny.c:551
-#: eavrxmega1.c:551 eavrxmega2.c:551 eavrxmega3.c:551 eavrxmega4.c:551
-#: eavrxmega5.c:551 eavrxmega6.c:551 eavrxmega7.c:551
+#: eavr1.c:562 eavr2.c:562 eavr25.c:562 eavr3.c:562 eavr31.c:562 eavr35.c:562
+#: eavr4.c:562 eavr5.c:562 eavr51.c:562 eavr6.c:562 eavrtiny.c:562
+#: eavrxmega1.c:562 eavrxmega2.c:562 eavrxmega3.c:562 eavrxmega4.c:562
+#: eavrxmega5.c:562 eavrxmega6.c:562 eavrxmega7.c:562
#, c-format
msgid " --debug-relax Used for debugging avr-ld.\n"
-msgstr " --debug-relax КориÑти Ñе за прочишћавање „avr-ld“.\n"
+msgstr " --debug-relax КориÑти Ñе за прочишћавање „avr-ld“.\n"
#: ecskyelf.c:275 ecskyelf_linux.c:275
msgid "%X%P: cannot size stub section: %E\n"
@@ -4450,22 +4655,22 @@ msgstr "%X%P: не могу да одрадим величину одељка о
msgid "%X%P: cannot build stubs: %E\n"
msgstr "%X%P: не могу да изградим окрајке: %E\n"
-#: ecskyelf.c:544 ecskyelf_linux.c:707
+#: ecskyelf.c:555 ecskyelf_linux.c:722
#, c-format
msgid ""
" --[no-]branch-stub Disable/enable use of stubs to expand branch\n"
" instructions that cannot reach the target.\n"
msgstr ""
-" --[no-]branch-stub Онемогућује/омогућује коришћење окрајака за ширење гране\n"
+" --[no-]branch-stub Онемогућује/омогућује коришћење окрајака за ширење гране\n"
" инÑтрукција које не могу да дођу до циља.\n"
-#: ecskyelf.c:548 ecskyelf_linux.c:711
+#: ecskyelf.c:559 ecskyelf_linux.c:726
#, c-format
msgid ""
" --stub-group-size=N Maximum size of a group of input sections\n"
" handled by one stub section.\n"
msgstr ""
-" --stub-group-size=N Ðајвећа величина групе улазних одељака\n"
+" --stub-group-size=N Ðајвећа величина групе улазних одељака\n"
" којима рукује један одељак окрајка.\n"
#: ed30v_e.c:73 ed30v_o.c:73 ed30velf.c:73 eelf32_dlx.c:73 eelf32fr30.c:73
@@ -4520,155 +4725,155 @@ msgstr "%P: „--auto-overlay“ занемарено Ñа нултим опÑе
msgid "running: %s \"%s\" \"%s\" \"%s\" \"%s\"\n"
msgstr "покрећем: %s „%s“ „%s“ „%s“ „%s“\n"
-#: eelf32_spu.c:1021
+#: eelf32_spu.c:1032
msgid "%F%P: invalid --local-store address range `%s'\n"
msgstr "%F%P: неиÑправан опÑег „--local-store“ адреÑе „%s“\n"
-#: eelf32_spu.c:1057
+#: eelf32_spu.c:1068
msgid "%F%P: invalid --num-lines/--num-regions `%u'\n"
msgstr "%F%P: неиÑправно „--num-lines/--num-regions“ „%u“\n"
-#: eelf32_spu.c:1062
+#: eelf32_spu.c:1073
msgid "%F%P: invalid --line-size/--region-size `%u'\n"
msgstr "%F%P: неиÑправно „--line-size/--region-size“ „%u“\n"
-#: eelf32_spu.c:1083
+#: eelf32_spu.c:1094
msgid "%F%P: invalid --num-lines/--num-regions `%s'\n"
msgstr "%F%P: неиÑправно „--num-lines/--num-regions“ „%s“\n"
-#: eelf32_spu.c:1096
+#: eelf32_spu.c:1107
msgid "%F%P: invalid --line-size/--region-size `%s'\n"
msgstr "%F%P: неиÑправно „--line-size/--region-size“ „%s“\n"
-#: eelf32_spu.c:1105
+#: eelf32_spu.c:1116
msgid "%F%P: invalid --fixed-space value `%s'\n"
msgstr "%F%P: неиÑправна „--fixed-space“ вредноÑÑ‚ „%s“\n"
-#: eelf32_spu.c:1114
+#: eelf32_spu.c:1125
msgid "%F%P: invalid --reserved-space value `%s'\n"
msgstr "%F%P: неиÑправна „--reserved-space“ вредноÑÑ‚ „%s“\n"
-#: eelf32_spu.c:1123
+#: eelf32_spu.c:1134
msgid "%F%P: invalid --extra-stack-space value `%s'\n"
msgstr "%F%P: неиÑправна „--extra-stack-space“ вредноÑÑ‚ „%s“\n"
-#: eelf32_spu.c:1160
+#: eelf32_spu.c:1171
#, c-format
msgid " --plugin Make SPU plugin\n"
msgstr " --plugin Прави „SPU“ прикључак\n"
-#: eelf32_spu.c:1162
+#: eelf32_spu.c:1173
#, c-format
msgid " --no-overlays No overlay handling\n"
msgstr " --no-overlays Ðема руковања преклапањем\n"
-#: eelf32_spu.c:1164
+#: eelf32_spu.c:1175
#, c-format
msgid " --compact-stubs Use smaller and possibly slower call stubs\n"
msgstr " --compact-stubs КориÑти мање и по могућÑтву Ñпорије окрајке позива\n"
-#: eelf32_spu.c:1166
+#: eelf32_spu.c:1177
#, c-format
msgid " --emit-stub-syms Add symbols on overlay call stubs\n"
msgstr " --emit-stub-syms Додаје Ñимболе на преклапање окрајака позива\n"
-#: eelf32_spu.c:1168
+#: eelf32_spu.c:1179
#, c-format
msgid " --extra-overlay-stubs Add stubs on all calls out of overlay regions\n"
msgstr " --extra-overlay-stubs Додаје окрајке на Ñве позиве ван облаÑти преклапања\n"
-#: eelf32_spu.c:1170
+#: eelf32_spu.c:1181
#, c-format
msgid " --local-store=lo:hi Valid address range\n"
msgstr " --local-store=lo:hi ИÑправан опÑег адреÑе\n"
-#: eelf32_spu.c:1172
+#: eelf32_spu.c:1183
#, c-format
msgid " --stack-analysis Estimate maximum stack requirement\n"
msgstr " --stack-analysis Процењује највеће захтевање Ñпремника\n"
-#: eelf32_spu.c:1174
+#: eelf32_spu.c:1185
#, c-format
msgid " --emit-stack-syms Add sym giving stack needed for each func\n"
msgstr " --emit-stack-syms Додаје Ñимбол дајући Ñпремник потребан за Ñваку функцију\n"
-#: eelf32_spu.c:1176
+#: eelf32_spu.c:1187
#, c-format
msgid ""
" --auto-overlay [=filename] Create an overlay script in filename if\n"
" executable does not fit in local store\n"
msgstr ""
" --auto-overlay [=датотека] Ствара Ñкрипту преклапања у датотеци ако\n"
-" извршна не Ñтане у локалном Ñмештају\n"
+" извршна не Ñтане у локалном Ñмештају\n"
-#: eelf32_spu.c:1179
+#: eelf32_spu.c:1190
#, c-format
msgid " --auto-relink Rerun linker using auto-overlay script\n"
msgstr " --auto-relink Поново покреће повезивача кориÑтећи Ñкрипту ауто-преклапања\n"
-#: eelf32_spu.c:1181
+#: eelf32_spu.c:1192
#, c-format
msgid ""
" --overlay-rodata Place read-only data with associated function\n"
" code in overlays\n"
msgstr ""
" --overlay-rodata Ставља податке Ñамо за читање Ñа придруженим кодом\n"
-" функције у преклапањима\n"
+" функције у преклапањима\n"
-#: eelf32_spu.c:1184
+#: eelf32_spu.c:1195
#, c-format
msgid " --num-regions Number of overlay buffers (default 1)\n"
msgstr " --num-regions Број међумеморија преклапања (оÑновно је 1)\n"
-#: eelf32_spu.c:1186
+#: eelf32_spu.c:1197
#, c-format
msgid " --region-size Size of overlay buffers (default 0, auto)\n"
msgstr " --region-size Величина међумеморија преклапања (оÑновно је 0, ÑамоÑтално)\n"
-#: eelf32_spu.c:1188
+#: eelf32_spu.c:1199
#, c-format
msgid " --fixed-space=bytes Local store for non-overlay code and data\n"
msgstr " --fixed-space=бајта Локални Ñмештај за код и податке не-преклапања\n"
-#: eelf32_spu.c:1190
+#: eelf32_spu.c:1201
#, c-format
msgid ""
" --reserved-space=bytes Local store for stack and heap. If not specified\n"
" ld will estimate stack size and assume no heap\n"
msgstr ""
" --reserved-space=бајтова Локални Ñмештај за Ñпремник и гомилу. Ðко није наведено\n"
-" „ld“ ће проценити величину Ñпремника и претпоÑтавити да нема гомиле\n"
+" „ld“ ће проценити величину Ñпремника и претпоÑтавити да нема гомиле\n"
-#: eelf32_spu.c:1193
+#: eelf32_spu.c:1204
#, c-format
msgid ""
" --extra-stack-space=bytes Space for negative sp access (default 2000) if\n"
" --reserved-space not given\n"
msgstr ""
" --extra-stack-space=бајта ПроÑтор за негативан „sp“ приÑтуп (оÑновно је 2000) ако\n"
-" „--reserved-space“ није дато\n"
+" „--reserved-space“ није дато\n"
-#: eelf32_spu.c:1196
+#: eelf32_spu.c:1207
#, c-format
msgid " --soft-icache Generate software icache overlays\n"
msgstr " --soft-icache Ствара ÑофтверÑка „icache“ преклапања\n"
-#: eelf32_spu.c:1198
+#: eelf32_spu.c:1209
#, c-format
msgid " --num-lines Number of soft-icache lines (default 32)\n"
msgstr " --num-lines Број „soft-icache“ редова (оÑновно је 32)\n"
-#: eelf32_spu.c:1200
+#: eelf32_spu.c:1211
#, c-format
msgid " --line-size Size of soft-icache lines (default 1k)\n"
msgstr " --line-size Величина „soft-icache“ редова (оÑновно је 1k)\n"
-#: eelf32_spu.c:1202
+#: eelf32_spu.c:1213
#, c-format
msgid " --non-ia-text Allow non-icache code in icache lines\n"
msgstr " --non-ia-text Допушта „non-icache“ код у „icache“ редовима\n"
-#: eelf32_spu.c:1204
+#: eelf32_spu.c:1215
#, c-format
msgid " --lrlive-analysis Scan function prologue for lr liveness\n"
msgstr " --lrlive-analysis ТРажи има ли у прологу функције „lr“ живоÑти\n"
@@ -4678,99 +4883,126 @@ msgstr " --lrlive-analysis ТРажи има ли у прол
msgid "%F%P: invalid --dsbt-index %d, outside DSBT size\n"
msgstr "%F%P: неиÑправно „--dsbt-index“ %d, изван „DSBT“ величине\n"
-#: eelf32_tic6x_be.c:550 eelf32_tic6x_elf_be.c:550 eelf32_tic6x_elf_le.c:550
-#: eelf32_tic6x_le.c:550 eelf32_tic6x_linux_be.c:550
-#: eelf32_tic6x_linux_le.c:550
+#: eelf32_tic6x_be.c:565 eelf32_tic6x_elf_be.c:565 eelf32_tic6x_elf_le.c:565
+#: eelf32_tic6x_le.c:565 eelf32_tic6x_linux_be.c:565
+#: eelf32_tic6x_linux_le.c:565
msgid "%F%P: invalid --dsbt-index %s\n"
msgstr "%F%P: неиÑправно „--dsbt-index %s“\n"
-#: eelf32_tic6x_be.c:560 eelf32_tic6x_elf_be.c:560 eelf32_tic6x_elf_le.c:560
-#: eelf32_tic6x_le.c:560 eelf32_tic6x_linux_be.c:560
-#: eelf32_tic6x_linux_le.c:560
+#: eelf32_tic6x_be.c:575 eelf32_tic6x_elf_be.c:575 eelf32_tic6x_elf_le.c:575
+#: eelf32_tic6x_le.c:575 eelf32_tic6x_linux_be.c:575
+#: eelf32_tic6x_linux_le.c:575
msgid "%F%P: invalid --dsbt-size %s\n"
msgstr "%F%P: неиÑправно „--dsbt-size %s“\n"
-#: eelf32_tic6x_be.c:576 eelf32_tic6x_elf_be.c:576 eelf32_tic6x_elf_le.c:576
-#: eelf32_tic6x_le.c:576 eelf32_tic6x_linux_be.c:576
-#: eelf32_tic6x_linux_le.c:576
+#: eelf32_tic6x_be.c:591 eelf32_tic6x_elf_be.c:591 eelf32_tic6x_elf_le.c:591
+#: eelf32_tic6x_le.c:591 eelf32_tic6x_linux_be.c:591
+#: eelf32_tic6x_linux_le.c:591
#, c-format
msgid " --dsbt-index <index> Use this as the DSBT index for the output object\n"
msgstr " --dsbt-index <индекÑ> КориÑти ово као „DSBT“ Ð¸Ð½Ð´ÐµÐºÑ Ð·Ð° излазни објект\n"
-#: eelf32_tic6x_be.c:577 eelf32_tic6x_elf_be.c:577 eelf32_tic6x_elf_le.c:577
-#: eelf32_tic6x_le.c:577 eelf32_tic6x_linux_be.c:577
-#: eelf32_tic6x_linux_le.c:577
+#: eelf32_tic6x_be.c:592 eelf32_tic6x_elf_be.c:592 eelf32_tic6x_elf_le.c:592
+#: eelf32_tic6x_le.c:592 eelf32_tic6x_linux_be.c:592
+#: eelf32_tic6x_linux_le.c:592
#, c-format
msgid " --dsbt-size <index> Use this as the number of entries in the DSBT table\n"
msgstr " --dsbt-size <индекÑ> КориÑти ово као број уноÑа у „DSBT“ табели\n"
-#: eelf32_tic6x_be.c:578 eelf32_tic6x_elf_be.c:578 eelf32_tic6x_elf_le.c:578
-#: eelf32_tic6x_le.c:578 eelf32_tic6x_linux_be.c:578
-#: eelf32_tic6x_linux_le.c:578
+#: eelf32_tic6x_be.c:593 eelf32_tic6x_elf_be.c:593 eelf32_tic6x_elf_le.c:593
+#: eelf32_tic6x_le.c:593 eelf32_tic6x_linux_be.c:593
+#: eelf32_tic6x_linux_le.c:593
#, c-format
msgid " --no-merge-exidx-entries\n"
msgstr " --no-merge-exidx-entries\n"
-#: eelf32_tic6x_be.c:579 eelf32_tic6x_elf_be.c:579 eelf32_tic6x_elf_le.c:579
-#: eelf32_tic6x_le.c:579 eelf32_tic6x_linux_be.c:579
-#: eelf32_tic6x_linux_le.c:579
+#: eelf32_tic6x_be.c:594 eelf32_tic6x_elf_be.c:594 eelf32_tic6x_elf_le.c:594
+#: eelf32_tic6x_le.c:594 eelf32_tic6x_linux_be.c:594
+#: eelf32_tic6x_linux_le.c:594
#, c-format
msgid " Disable merging exidx entries\n"
msgstr " Онеогућује Ñтапање „exidx“ уноÑа\n"
-#: eelf32_x86_64.c:5398 eelf_i386.c:5017 eelf_i386_be.c:452
-#: eelf_i386_fbsd.c:492 eelf_i386_ldso.c:467 eelf_i386_sol2.c:623
-#: eelf_i386_vxworks.c:519 eelf_iamcu.c:4995 eelf_k1om.c:5351
-#: eelf_k1om_fbsd.c:5331 eelf_l1om.c:5351 eelf_l1om_fbsd.c:5331
-#: eelf_x86_64.c:5398 eelf_x86_64_cloudabi.c:495 eelf_x86_64_fbsd.c:495
-#: eelf_x86_64_sol2.c:626
+#: eelf32_x86_64.c:5571 eelf_i386.c:5190 eelf_i386_be.c:471
+#: eelf_i386_fbsd.c:511 eelf_i386_haiku.c:511 eelf_i386_ldso.c:486
+#: eelf_i386_sol2.c:643 eelf_i386_vxworks.c:538 eelf_iamcu.c:511
+#: eelf_k1om.c:5502 eelf_k1om_fbsd.c:511 eelf_l1om.c:5502 eelf_l1om_fbsd.c:511
+#: eelf_x86_64.c:5571 eelf_x86_64_cloudabi.c:514 eelf_x86_64_fbsd.c:514
+#: eelf_x86_64_haiku.c:514 eelf_x86_64_sol2.c:646
msgid "%F%P: invalid number for -z call-nop=prefix-: %s\n"
msgstr "%F%P: неиÑправан број за „-z call-nop=prefix-“: %s\n"
-#: eelf32_x86_64.c:5407 eelf_i386.c:5026 eelf_i386_be.c:461
-#: eelf_i386_fbsd.c:501 eelf_i386_ldso.c:476 eelf_i386_sol2.c:632
-#: eelf_i386_vxworks.c:528 eelf_iamcu.c:5004 eelf_k1om.c:5360
-#: eelf_k1om_fbsd.c:5340 eelf_l1om.c:5360 eelf_l1om_fbsd.c:5340
-#: eelf_x86_64.c:5407 eelf_x86_64_cloudabi.c:504 eelf_x86_64_fbsd.c:504
-#: eelf_x86_64_sol2.c:635
+#: eelf32_x86_64.c:5580 eelf_i386.c:5199 eelf_i386_be.c:480
+#: eelf_i386_fbsd.c:520 eelf_i386_haiku.c:520 eelf_i386_ldso.c:495
+#: eelf_i386_sol2.c:652 eelf_i386_vxworks.c:547 eelf_iamcu.c:520
+#: eelf_k1om.c:5511 eelf_k1om_fbsd.c:520 eelf_l1om.c:5511 eelf_l1om_fbsd.c:520
+#: eelf_x86_64.c:5580 eelf_x86_64_cloudabi.c:523 eelf_x86_64_fbsd.c:523
+#: eelf_x86_64_haiku.c:523 eelf_x86_64_sol2.c:655
msgid "%F%P: invalid number for -z call-nop=suffix-: %s\n"
msgstr "%F%P: неиÑправан број за „-z call-nop=suffix-“: %s\n"
-#: eelf32_x86_64.c:5412 eelf_i386.c:5031 eelf_i386_be.c:466
-#: eelf_i386_fbsd.c:506 eelf_i386_ldso.c:481 eelf_i386_sol2.c:637
-#: eelf_i386_vxworks.c:533 eelf_iamcu.c:5009 eelf_k1om.c:5365
-#: eelf_k1om_fbsd.c:5345 eelf_l1om.c:5365 eelf_l1om_fbsd.c:5345
-#: eelf_x86_64.c:5412 eelf_x86_64_cloudabi.c:509 eelf_x86_64_fbsd.c:509
-#: eelf_x86_64_sol2.c:640
+#: eelf32_x86_64.c:5585 eelf_i386.c:5204 eelf_i386_be.c:485
+#: eelf_i386_fbsd.c:525 eelf_i386_haiku.c:525 eelf_i386_ldso.c:500
+#: eelf_i386_sol2.c:657 eelf_i386_vxworks.c:552 eelf_iamcu.c:525
+#: eelf_k1om.c:5516 eelf_k1om_fbsd.c:525 eelf_l1om.c:5516 eelf_l1om_fbsd.c:525
+#: eelf_x86_64.c:5585 eelf_x86_64_cloudabi.c:528 eelf_x86_64_fbsd.c:528
+#: eelf_x86_64_haiku.c:528 eelf_x86_64_sol2.c:660
msgid "%F%P: unsupported option: -z %s\n"
msgstr "%F%P: неподржана опција: „-z“ „%s“\n"
-#: eelf32_x86_64.c:5434 eelf_i386.c:5053 eelf_i386_fbsd.c:528
-#: eelf_x86_64.c:5434 eelf_x86_64_cloudabi.c:531 eelf_x86_64_fbsd.c:531
-#: eelf_x86_64_sol2.c:662
+#: eelf32_x86_64.c:5607 eelf_i386.c:5226 eelf_i386_fbsd.c:547
+#: eelf_i386_haiku.c:547 eelf_x86_64.c:5607 eelf_x86_64_cloudabi.c:550
+#: eelf_x86_64_fbsd.c:550 eelf_x86_64_haiku.c:550 eelf_x86_64_sol2.c:682
msgid "%F%P: invalid option for -z cet-report=: %s\n"
msgstr "%F%P: неиÑправна опција „-z cet-report=“: %s\n"
-#: eelf32_x86_64.c:5471 eelf_i386.c:5090 eelf_i386_be.c:482
-#: eelf_i386_fbsd.c:565 eelf_i386_ldso.c:506 eelf_i386_sol2.c:662
-#: eelf_i386_vxworks.c:554 eelf_iamcu.c:5034 eelf_k1om.c:5390
-#: eelf_k1om_fbsd.c:5370 eelf_l1om.c:5390 eelf_l1om_fbsd.c:5370
-#: eelf_x86_64.c:5474 eelf_x86_64_cloudabi.c:571 eelf_x86_64_fbsd.c:571
-#: eelf_x86_64_sol2.c:702
+#: eelf32_x86_64.c:5621 eelf_i386.c:5240 eelf_i386_fbsd.c:561
+#: eelf_i386_haiku.c:561 eelf_x86_64.c:5621 eelf_x86_64_cloudabi.c:564
+#: eelf_x86_64_fbsd.c:564 eelf_x86_64_haiku.c:564 eelf_x86_64_sol2.c:696
+msgid "%F%P: invalid x86-64 ISA level: %s\n"
+msgstr "%F%P: неиÑправан „x86-64 ISA“ ниво: %s\n"
+
+#: eelf32_x86_64.c:5663 eelf_i386.c:5282 eelf_i386_be.c:501
+#: eelf_i386_fbsd.c:603 eelf_i386_haiku.c:603 eelf_i386_ldso.c:525
+#: eelf_i386_sol2.c:682 eelf_i386_vxworks.c:573 eelf_iamcu.c:550
+#: eelf_k1om.c:5541 eelf_k1om_fbsd.c:550 eelf_l1om.c:5541 eelf_l1om_fbsd.c:550
+#: eelf_x86_64.c:5716 eelf_x86_64_cloudabi.c:659 eelf_x86_64_fbsd.c:659
+#: eelf_x86_64_haiku.c:659 eelf_x86_64_sol2.c:791
#, c-format
msgid " -z noextern-protected-data Do not treat protected data symbol as external\n"
msgstr " -z noextern-protected-data Ðе Ñматра заштићени Ñимбол података Ñпољним\n"
-#: eelf32_x86_64.c:5474 eelf32lppc.c:802 eelf32lppclinux.c:802
-#: eelf32lppcnto.c:802 eelf32lppcsim.c:802 eelf32ppc.c:802
-#: eelf32ppc_fbsd.c:802 eelf32ppclinux.c:802 eelf32ppcnto.c:802
-#: eelf32ppcsim.c:802 eelf32ppcvxworks.c:780 eelf32ppcwindiss.c:802
-#: eelf64lppc.c:1282 eelf64ppc.c:1282 eelf64ppc_fbsd.c:1282 eelf_i386.c:5093
-#: eelf_i386_be.c:485 eelf_i386_fbsd.c:568 eelf_i386_ldso.c:509
-#: eelf_i386_sol2.c:665 eelf_i386_vxworks.c:557 eelf_iamcu.c:5037
-#: eelf_k1om.c:5393 eelf_k1om_fbsd.c:5373 eelf_l1om.c:5393
-#: eelf_l1om_fbsd.c:5373 eelf_x86_64.c:5477 eelf_x86_64_cloudabi.c:574
-#: eelf_x86_64_fbsd.c:574 eelf_x86_64_sol2.c:705 eppclynx.c:802
+#: eelf32_x86_64.c:5665 eelf_i386.c:5284 eelf_i386_be.c:503
+#: eelf_i386_fbsd.c:605 eelf_i386_haiku.c:605 eelf_i386_ldso.c:527
+#: eelf_i386_sol2.c:684 eelf_i386_vxworks.c:575 eelf_iamcu.c:552
+#: eelf_k1om.c:5543 eelf_k1om_fbsd.c:552 eelf_l1om.c:5543 eelf_l1om_fbsd.c:552
+#: eelf_x86_64.c:5718 eelf_x86_64_cloudabi.c:661 eelf_x86_64_fbsd.c:661
+#: eelf_x86_64_haiku.c:661 eelf_x86_64_sol2.c:793
+#, c-format
+msgid " -z indirect-extern-access Enable indirect external access\n"
+msgstr " -z indirect-extern-access Укључује поÑредан Ñпољни приÑтуп\n"
+
+#: eelf32_x86_64.c:5667 eelf_i386.c:5286 eelf_i386_be.c:505
+#: eelf_i386_fbsd.c:607 eelf_i386_haiku.c:607 eelf_i386_ldso.c:529
+#: eelf_i386_sol2.c:686 eelf_i386_vxworks.c:577 eelf_iamcu.c:554
+#: eelf_k1om.c:5545 eelf_k1om_fbsd.c:554 eelf_l1om.c:5545 eelf_l1om_fbsd.c:554
+#: eelf_x86_64.c:5720 eelf_x86_64_cloudabi.c:663 eelf_x86_64_fbsd.c:663
+#: eelf_x86_64_haiku.c:663 eelf_x86_64_sol2.c:795
+#, c-format
+msgid " -z noindirect-extern-access Disable indirect external access (default)\n"
+msgstr " -z noindirect-extern-access ИÑкључује поÑредан Ñпољни приÑтуп (оÑновно)\n"
+
+#: eelf32_x86_64.c:5670 eelf32lppc.c:817 eelf32lppclinux.c:817
+#: eelf32lppcnto.c:817 eelf32lppcsim.c:817 eelf32ppc.c:817
+#: eelf32ppc_fbsd.c:817 eelf32ppchaiku.c:817 eelf32ppclinux.c:817
+#: eelf32ppcnto.c:817 eelf32ppcsim.c:817 eelf32ppcvxworks.c:795
+#: eelf32ppcwindiss.c:817 eelf64lppc.c:1346 eelf64lppc_fbsd.c:1346
+#: eelf64ppc.c:1346 eelf64ppc_fbsd.c:1346 eelf_i386.c:5289 eelf_i386_be.c:508
+#: eelf_i386_fbsd.c:610 eelf_i386_haiku.c:610 eelf_i386_ldso.c:532
+#: eelf_i386_sol2.c:689 eelf_i386_vxworks.c:580 eelf_iamcu.c:557
+#: eelf_k1om.c:5548 eelf_k1om_fbsd.c:557 eelf_l1om.c:5548 eelf_l1om_fbsd.c:557
+#: eelf_x86_64.c:5723 eelf_x86_64_cloudabi.c:666 eelf_x86_64_fbsd.c:666
+#: eelf_x86_64_haiku.c:666 eelf_x86_64_sol2.c:798
#, c-format
msgid ""
" -z dynamic-undefined-weak Make undefined weak symbols dynamic\n"
@@ -4779,46 +5011,46 @@ msgstr ""
" -z dynamic-undefined-weak Чини недефиниÑане Ñлабе Ñимболе динамичким\n"
" -z nodynamic-undefined-weak Ðе чини недефиниÑане Ñлабе Ñимболе динамичким\n"
-#: eelf32_x86_64.c:5478 eelf_x86_64.c:5481 eelf_x86_64_cloudabi.c:578
-#: eelf_x86_64_fbsd.c:578 eelf_x86_64_sol2.c:709
+#: eelf32_x86_64.c:5674 eelf_x86_64.c:5727 eelf_x86_64_cloudabi.c:670
+#: eelf_x86_64_fbsd.c:670 eelf_x86_64_haiku.c:670 eelf_x86_64_sol2.c:802
#, c-format
msgid " -z noreloc-overflow Disable relocation overflow check\n"
msgstr " -z noreloc-overflow ИÑкључује проверу прекорачења премештаја\n"
-#: eelf32_x86_64.c:5481 eelf_i386.c:5097 eelf_i386_be.c:489
-#: eelf_i386_fbsd.c:572 eelf_i386_ldso.c:513 eelf_i386_sol2.c:669
-#: eelf_i386_vxworks.c:561 eelf_iamcu.c:5041 eelf_k1om.c:5397
-#: eelf_k1om_fbsd.c:5377 eelf_l1om.c:5397 eelf_l1om_fbsd.c:5377
-#: eelf_x86_64.c:5484 eelf_x86_64_cloudabi.c:581 eelf_x86_64_fbsd.c:581
-#: eelf_x86_64_sol2.c:712
+#: eelf32_x86_64.c:5677 eelf_i386.c:5293 eelf_i386_be.c:512
+#: eelf_i386_fbsd.c:614 eelf_i386_haiku.c:614 eelf_i386_ldso.c:536
+#: eelf_i386_sol2.c:693 eelf_i386_vxworks.c:584 eelf_iamcu.c:561
+#: eelf_k1om.c:5552 eelf_k1om_fbsd.c:561 eelf_l1om.c:5552 eelf_l1om_fbsd.c:561
+#: eelf_x86_64.c:5730 eelf_x86_64_cloudabi.c:673 eelf_x86_64_fbsd.c:673
+#: eelf_x86_64_haiku.c:673 eelf_x86_64_sol2.c:805
#, c-format
msgid " -z call-nop=PADDING Use PADDING as 1-byte NOP for branch\n"
msgstr " -z call-nop=ПОПУЊÐÐ’ÐЊЕ КориÑти ПОПУЊÐÐ’ÐЊЕ као 1-бајтни „NOP“ за грану\n"
-#: eelf32_x86_64.c:5484 eelf_i386.c:5100 eelf_i386_fbsd.c:575
-#: eelf_x86_64.c:5487 eelf_x86_64_cloudabi.c:584 eelf_x86_64_fbsd.c:584
-#: eelf_x86_64_sol2.c:715
+#: eelf32_x86_64.c:5680 eelf_i386.c:5296 eelf_i386_fbsd.c:617
+#: eelf_i386_haiku.c:617 eelf_x86_64.c:5733 eelf_x86_64_cloudabi.c:676
+#: eelf_x86_64_fbsd.c:676 eelf_x86_64_haiku.c:676 eelf_x86_64_sol2.c:808
#, c-format
msgid " -z ibtplt Generate IBT-enabled PLT entries\n"
msgstr " -z ibtplt Ствара „IBT“-ом омогућене „PLT“ уноÑе\n"
-#: eelf32_x86_64.c:5486 eelf_i386.c:5102 eelf_i386_fbsd.c:577
-#: eelf_x86_64.c:5489 eelf_x86_64_cloudabi.c:586 eelf_x86_64_fbsd.c:586
-#: eelf_x86_64_sol2.c:717
+#: eelf32_x86_64.c:5682 eelf_i386.c:5298 eelf_i386_fbsd.c:619
+#: eelf_i386_haiku.c:619 eelf_x86_64.c:5735 eelf_x86_64_cloudabi.c:678
+#: eelf_x86_64_fbsd.c:678 eelf_x86_64_haiku.c:678 eelf_x86_64_sol2.c:810
#, c-format
msgid " -z ibt Generate GNU_PROPERTY_X86_FEATURE_1_IBT\n"
msgstr " -z ibt Ствара „GNU_PROPERTY_X86_FEATURE_1_IBT“\n"
-#: eelf32_x86_64.c:5488 eelf_i386.c:5104 eelf_i386_fbsd.c:579
-#: eelf_x86_64.c:5491 eelf_x86_64_cloudabi.c:588 eelf_x86_64_fbsd.c:588
-#: eelf_x86_64_sol2.c:719
+#: eelf32_x86_64.c:5684 eelf_i386.c:5300 eelf_i386_fbsd.c:621
+#: eelf_i386_haiku.c:621 eelf_x86_64.c:5737 eelf_x86_64_cloudabi.c:680
+#: eelf_x86_64_fbsd.c:680 eelf_x86_64_haiku.c:680 eelf_x86_64_sol2.c:812
#, c-format
msgid " -z shstk Generate GNU_PROPERTY_X86_FEATURE_1_SHSTK\n"
msgstr " -z shstk Ствара „GNU_PROPERTY_X86_FEATURE_1_SHSTK“\n"
-#: eelf32_x86_64.c:5490 eelf_i386.c:5106 eelf_i386_fbsd.c:581
-#: eelf_x86_64.c:5493 eelf_x86_64_cloudabi.c:590 eelf_x86_64_fbsd.c:590
-#: eelf_x86_64_sol2.c:721
+#: eelf32_x86_64.c:5686 eelf_i386.c:5302 eelf_i386_fbsd.c:623
+#: eelf_i386_haiku.c:623 eelf_x86_64.c:5739 eelf_x86_64_cloudabi.c:682
+#: eelf_x86_64_fbsd.c:682 eelf_x86_64_haiku.c:682 eelf_x86_64_sol2.c:814
#, c-format
msgid ""
" -z cet-report=[none|warning|error] (default: none)\n"
@@ -4827,98 +5059,130 @@ msgstr ""
" -z cet-report=[ништа|упозорење|грешка] (оÑновно: ништа)\n"
" Извештава о недоÑтајућим „IBT“ и „SHSTK“ извештајима\n"
-#: eelf32b4300.c:685 eelf32bmip.c:685 eelf32bmipn32.c:699 eelf32bsmip.c:699
-#: eelf32btsmip.c:685 eelf32btsmip_fbsd.c:685 eelf32btsmipn32.c:685
-#: eelf32btsmipn32_fbsd.c:685 eelf32ebmip.c:685 eelf32ebmipvxworks.c:724
-#: eelf32elmip.c:685 eelf32elmipvxworks.c:724 eelf32l4300.c:685
-#: eelf32lmip.c:685 eelf32lr5900.c:548 eelf32lr5900n32.c:547 eelf32lsmip.c:685
-#: eelf32ltsmip.c:685 eelf32ltsmip_fbsd.c:685 eelf32ltsmipn32.c:685
-#: eelf32ltsmipn32_fbsd.c:685 eelf32mipswindiss.c:522 eelf64bmip.c:699
-#: eelf64btsmip.c:685 eelf64btsmip_fbsd.c:685 eelf64ltsmip.c:685
-#: eelf64ltsmip_fbsd.c:685
+#: eelf32_x86_64.c:5690 eelf_i386.c:5306 eelf_i386_fbsd.c:627
+#: eelf_i386_haiku.c:627 eelf_x86_64.c:5743 eelf_x86_64_cloudabi.c:686
+#: eelf_x86_64_fbsd.c:686 eelf_x86_64_haiku.c:686 eelf_x86_64_sol2.c:818
+#, c-format
+msgid " -z report-relative-reloc Report relative relocations\n"
+msgstr " -z report-relative-reloc Извештава о релативним премештајима\n"
+
+#: eelf32_x86_64.c:5693 eelf_i386.c:5309 eelf_i386_fbsd.c:630
+#: eelf_i386_haiku.c:630 eelf_x86_64.c:5746 eelf_x86_64_cloudabi.c:689
+#: eelf_x86_64_fbsd.c:689 eelf_x86_64_haiku.c:689 eelf_x86_64_sol2.c:821
+#, c-format
+msgid " -z x86-64-{baseline|v[234]} Mark x86-64-{baseline|v[234]} ISA level as needed\n"
+msgstr " -z x86-64-{baseline|v[234]} Означава потребним „x86-64-{baseline|v[234]} ISA“ ниво\n"
+
+#: eelf32_x86_64.c:5696 eelf64lppc.c:1350 eelf64lppc_fbsd.c:1350
+#: eelf64ppc.c:1350 eelf64ppc_fbsd.c:1350 eelf_i386.c:5312
+#: eelf_i386_fbsd.c:633 eelf_i386_haiku.c:633 eelf_x86_64.c:5763
+#: eelf_x86_64_cloudabi.c:706 eelf_x86_64_fbsd.c:706 eelf_x86_64_haiku.c:706
+#: eelf_x86_64_sol2.c:838
+#, c-format
+msgid " -z pack-relative-relocs Pack relative relocations\n"
+msgstr " -z pack-relative-relocs Пакује релативне премештаје\n"
+
+#: eelf32_x86_64.c:5698 eelf64lppc.c:1352 eelf64lppc_fbsd.c:1352
+#: eelf64ppc.c:1352 eelf64ppc_fbsd.c:1352 eelf_i386.c:5314
+#: eelf_i386_fbsd.c:635 eelf_i386_haiku.c:635 eelf_x86_64.c:5765
+#: eelf_x86_64_cloudabi.c:708 eelf_x86_64_fbsd.c:708 eelf_x86_64_haiku.c:708
+#: eelf_x86_64_sol2.c:840
+#, c-format
+msgid " -z nopack-relative-relocs Do not pack relative relocations (default)\n"
+msgstr " -z nopack-relative-relocs Ðе пакује релативне премештаје (оÑновно)\n"
+
+#: eelf32b4300.c:700 eelf32bmip.c:700 eelf32bmipn32.c:714 eelf32bsmip.c:714
+#: eelf32btsmip.c:700 eelf32btsmip_fbsd.c:700 eelf32btsmipn32.c:700
+#: eelf32btsmipn32_fbsd.c:700 eelf32ebmip.c:700 eelf32ebmipvxworks.c:739
+#: eelf32elmip.c:700 eelf32elmipvxworks.c:739 eelf32l4300.c:700
+#: eelf32lmip.c:700 eelf32lr5900.c:559 eelf32lr5900n32.c:558 eelf32lsmip.c:700
+#: eelf32ltsmip.c:700 eelf32ltsmip_fbsd.c:700 eelf32ltsmipn32.c:700
+#: eelf32ltsmipn32_fbsd.c:700 eelf32mipswindiss.c:533 eelf64bmip.c:714
+#: eelf64btsmip.c:700 eelf64btsmip_fbsd.c:700 eelf64ltsmip.c:700
+#: eelf64ltsmip_fbsd.c:700 eelf_mipsel_haiku.c:700
#, c-format
msgid " --insn32 Only generate 32-bit microMIPS instructions\n"
msgstr " --insn32 Ствара Ñамо 32-битне „microMIPS“ инÑтрукције\n"
-#: eelf32b4300.c:688 eelf32bmip.c:688 eelf32bmipn32.c:702 eelf32bsmip.c:702
-#: eelf32btsmip.c:688 eelf32btsmip_fbsd.c:688 eelf32btsmipn32.c:688
-#: eelf32btsmipn32_fbsd.c:688 eelf32ebmip.c:688 eelf32ebmipvxworks.c:727
-#: eelf32elmip.c:688 eelf32elmipvxworks.c:727 eelf32l4300.c:688
-#: eelf32lmip.c:688 eelf32lr5900.c:551 eelf32lr5900n32.c:550 eelf32lsmip.c:688
-#: eelf32ltsmip.c:688 eelf32ltsmip_fbsd.c:688 eelf32ltsmipn32.c:688
-#: eelf32ltsmipn32_fbsd.c:688 eelf32mipswindiss.c:525 eelf64bmip.c:702
-#: eelf64btsmip.c:688 eelf64btsmip_fbsd.c:688 eelf64ltsmip.c:688
-#: eelf64ltsmip_fbsd.c:688
+#: eelf32b4300.c:703 eelf32bmip.c:703 eelf32bmipn32.c:717 eelf32bsmip.c:717
+#: eelf32btsmip.c:703 eelf32btsmip_fbsd.c:703 eelf32btsmipn32.c:703
+#: eelf32btsmipn32_fbsd.c:703 eelf32ebmip.c:703 eelf32ebmipvxworks.c:742
+#: eelf32elmip.c:703 eelf32elmipvxworks.c:742 eelf32l4300.c:703
+#: eelf32lmip.c:703 eelf32lr5900.c:562 eelf32lr5900n32.c:561 eelf32lsmip.c:703
+#: eelf32ltsmip.c:703 eelf32ltsmip_fbsd.c:703 eelf32ltsmipn32.c:703
+#: eelf32ltsmipn32_fbsd.c:703 eelf32mipswindiss.c:536 eelf64bmip.c:717
+#: eelf64btsmip.c:703 eelf64btsmip_fbsd.c:703 eelf64ltsmip.c:703
+#: eelf64ltsmip_fbsd.c:703 eelf_mipsel_haiku.c:703
#, c-format
msgid " --no-insn32 Generate all microMIPS instructions\n"
msgstr " --no---insn32 Ствара Ñве „microMIPS“ инÑтрукције\n"
-#: eelf32b4300.c:691 eelf32bmip.c:691 eelf32bmipn32.c:705 eelf32bsmip.c:705
-#: eelf32btsmip.c:691 eelf32btsmip_fbsd.c:691 eelf32btsmipn32.c:691
-#: eelf32btsmipn32_fbsd.c:691 eelf32ebmip.c:691 eelf32ebmipvxworks.c:730
-#: eelf32elmip.c:691 eelf32elmipvxworks.c:730 eelf32l4300.c:691
-#: eelf32lmip.c:691 eelf32lr5900.c:554 eelf32lr5900n32.c:553 eelf32lsmip.c:691
-#: eelf32ltsmip.c:691 eelf32ltsmip_fbsd.c:691 eelf32ltsmipn32.c:691
-#: eelf32ltsmipn32_fbsd.c:691 eelf32mipswindiss.c:528 eelf64bmip.c:705
-#: eelf64btsmip.c:691 eelf64btsmip_fbsd.c:691 eelf64ltsmip.c:691
-#: eelf64ltsmip_fbsd.c:691
+#: eelf32b4300.c:706 eelf32bmip.c:706 eelf32bmipn32.c:720 eelf32bsmip.c:720
+#: eelf32btsmip.c:706 eelf32btsmip_fbsd.c:706 eelf32btsmipn32.c:706
+#: eelf32btsmipn32_fbsd.c:706 eelf32ebmip.c:706 eelf32ebmipvxworks.c:745
+#: eelf32elmip.c:706 eelf32elmipvxworks.c:745 eelf32l4300.c:706
+#: eelf32lmip.c:706 eelf32lr5900.c:565 eelf32lr5900n32.c:564 eelf32lsmip.c:706
+#: eelf32ltsmip.c:706 eelf32ltsmip_fbsd.c:706 eelf32ltsmipn32.c:706
+#: eelf32ltsmipn32_fbsd.c:706 eelf32mipswindiss.c:539 eelf64bmip.c:720
+#: eelf64btsmip.c:706 eelf64btsmip_fbsd.c:706 eelf64ltsmip.c:706
+#: eelf64ltsmip_fbsd.c:706 eelf_mipsel_haiku.c:706
#, c-format
msgid ""
" --ignore-branch-isa Accept invalid branch relocations requiring\n"
" an ISA mode switch\n"
msgstr ""
" --ignore-branch-isa Прихвата неиÑправне премештаје гране захтевајући\n"
-" прекидача „ISA“ режима\n"
-
-#: eelf32b4300.c:695 eelf32bmip.c:695 eelf32bmipn32.c:709 eelf32bsmip.c:709
-#: eelf32btsmip.c:695 eelf32btsmip_fbsd.c:695 eelf32btsmipn32.c:695
-#: eelf32btsmipn32_fbsd.c:695 eelf32ebmip.c:695 eelf32ebmipvxworks.c:734
-#: eelf32elmip.c:695 eelf32elmipvxworks.c:734 eelf32l4300.c:695
-#: eelf32lmip.c:695 eelf32lr5900.c:558 eelf32lr5900n32.c:557 eelf32lsmip.c:695
-#: eelf32ltsmip.c:695 eelf32ltsmip_fbsd.c:695 eelf32ltsmipn32.c:695
-#: eelf32ltsmipn32_fbsd.c:695 eelf32mipswindiss.c:532 eelf64bmip.c:709
-#: eelf64btsmip.c:695 eelf64btsmip_fbsd.c:695 eelf64ltsmip.c:695
-#: eelf64ltsmip_fbsd.c:695
+" прекидача „ISA“ режима\n"
+
+#: eelf32b4300.c:710 eelf32bmip.c:710 eelf32bmipn32.c:724 eelf32bsmip.c:724
+#: eelf32btsmip.c:710 eelf32btsmip_fbsd.c:710 eelf32btsmipn32.c:710
+#: eelf32btsmipn32_fbsd.c:710 eelf32ebmip.c:710 eelf32ebmipvxworks.c:749
+#: eelf32elmip.c:710 eelf32elmipvxworks.c:749 eelf32l4300.c:710
+#: eelf32lmip.c:710 eelf32lr5900.c:569 eelf32lr5900n32.c:568 eelf32lsmip.c:710
+#: eelf32ltsmip.c:710 eelf32ltsmip_fbsd.c:710 eelf32ltsmipn32.c:710
+#: eelf32ltsmipn32_fbsd.c:710 eelf32mipswindiss.c:543 eelf64bmip.c:724
+#: eelf64btsmip.c:710 eelf64btsmip_fbsd.c:710 eelf64ltsmip.c:710
+#: eelf64ltsmip_fbsd.c:710 eelf_mipsel_haiku.c:710
#, c-format
msgid ""
" --no-ignore-branch-isa Reject invalid branch relocations requiring\n"
" an ISA mode switch\n"
msgstr ""
" --no-ignore-branch-isa Одбацује неиÑправне премештаје гране захтевајући\n"
-" прекидача „ISA“ режима\n"
-
-#: eelf32b4300.c:699 eelf32bmip.c:699 eelf32bmipn32.c:713 eelf32bsmip.c:713
-#: eelf32btsmip.c:699 eelf32btsmip_fbsd.c:699 eelf32btsmipn32.c:699
-#: eelf32btsmipn32_fbsd.c:699 eelf32ebmip.c:699 eelf32ebmipvxworks.c:738
-#: eelf32elmip.c:699 eelf32elmipvxworks.c:738 eelf32l4300.c:699
-#: eelf32lmip.c:699 eelf32lr5900.c:562 eelf32lr5900n32.c:561 eelf32lsmip.c:699
-#: eelf32ltsmip.c:699 eelf32ltsmip_fbsd.c:699 eelf32ltsmipn32.c:699
-#: eelf32ltsmipn32_fbsd.c:699 eelf32mipswindiss.c:536 eelf64bmip.c:713
-#: eelf64btsmip.c:699 eelf64btsmip_fbsd.c:699 eelf64ltsmip.c:699
-#: eelf64ltsmip_fbsd.c:699
+" прекидача „ISA“ режима\n"
+
+#: eelf32b4300.c:714 eelf32bmip.c:714 eelf32bmipn32.c:728 eelf32bsmip.c:728
+#: eelf32btsmip.c:714 eelf32btsmip_fbsd.c:714 eelf32btsmipn32.c:714
+#: eelf32btsmipn32_fbsd.c:714 eelf32ebmip.c:714 eelf32ebmipvxworks.c:753
+#: eelf32elmip.c:714 eelf32elmipvxworks.c:753 eelf32l4300.c:714
+#: eelf32lmip.c:714 eelf32lr5900.c:573 eelf32lr5900n32.c:572 eelf32lsmip.c:714
+#: eelf32ltsmip.c:714 eelf32ltsmip_fbsd.c:714 eelf32ltsmipn32.c:714
+#: eelf32ltsmipn32_fbsd.c:714 eelf32mipswindiss.c:547 eelf64bmip.c:728
+#: eelf64btsmip.c:714 eelf64btsmip_fbsd.c:714 eelf64ltsmip.c:714
+#: eelf64ltsmip_fbsd.c:714 eelf_mipsel_haiku.c:714
#, c-format
msgid " --compact-branches Generate compact branches/jumps for MIPS R6\n"
msgstr " --compact-branches Ствара Ñажете гране/Ñкокове за „MIPS R6“\n"
-#: eelf32b4300.c:702 eelf32bmip.c:702 eelf32bmipn32.c:716 eelf32bsmip.c:716
-#: eelf32btsmip.c:702 eelf32btsmip_fbsd.c:702 eelf32btsmipn32.c:702
-#: eelf32btsmipn32_fbsd.c:702 eelf32ebmip.c:702 eelf32ebmipvxworks.c:741
-#: eelf32elmip.c:702 eelf32elmipvxworks.c:741 eelf32l4300.c:702
-#: eelf32lmip.c:702 eelf32lr5900.c:565 eelf32lr5900n32.c:564 eelf32lsmip.c:702
-#: eelf32ltsmip.c:702 eelf32ltsmip_fbsd.c:702 eelf32ltsmipn32.c:702
-#: eelf32ltsmipn32_fbsd.c:702 eelf32mipswindiss.c:539 eelf64bmip.c:716
-#: eelf64btsmip.c:702 eelf64btsmip_fbsd.c:702 eelf64ltsmip.c:702
-#: eelf64ltsmip_fbsd.c:702
+#: eelf32b4300.c:717 eelf32bmip.c:717 eelf32bmipn32.c:731 eelf32bsmip.c:731
+#: eelf32btsmip.c:717 eelf32btsmip_fbsd.c:717 eelf32btsmipn32.c:717
+#: eelf32btsmipn32_fbsd.c:717 eelf32ebmip.c:717 eelf32ebmipvxworks.c:756
+#: eelf32elmip.c:717 eelf32elmipvxworks.c:756 eelf32l4300.c:717
+#: eelf32lmip.c:717 eelf32lr5900.c:576 eelf32lr5900n32.c:575 eelf32lsmip.c:717
+#: eelf32ltsmip.c:717 eelf32ltsmip_fbsd.c:717 eelf32ltsmipn32.c:717
+#: eelf32ltsmipn32_fbsd.c:717 eelf32mipswindiss.c:550 eelf64bmip.c:731
+#: eelf64btsmip.c:717 eelf64btsmip_fbsd.c:717 eelf64ltsmip.c:717
+#: eelf64ltsmip_fbsd.c:717 eelf_mipsel_haiku.c:717
#, c-format
msgid " --no-compact-branches Generate delay slot branches/jumps for MIPS R6\n"
msgstr " --no-compact-branches Ствара гране/Ñкокове заÑтоја утора за „MIPS R6“\n"
-#: eelf32bfin.c:441 eelf32bfinfd.c:466
+#: eelf32bfin.c:456 eelf32bfinfd.c:481
#, c-format
msgid " --code-in-l1 Put code in L1\n"
msgstr " --code-in-l1 Ставља код у „L1“\n"
-#: eelf32bfin.c:443 eelf32bfinfd.c:468
+#: eelf32bfin.c:458 eelf32bfinfd.c:483
#, c-format
msgid " --data-in-l1 Put data in L1\n"
msgstr " --data-in-l1 Ставља податке у „L1“\n"
@@ -4944,139 +5208,146 @@ msgid "%X%P: %pB: can not create runtime reloc information: %s\n"
msgstr "%X%P: %pB: не могу да направим податке премштаја времена извршења: %s\n"
#: eelf32lppc.c:96 eelf32lppclinux.c:96 eelf32lppcnto.c:96 eelf32lppcsim.c:96
-#: eelf32ppc.c:96 eelf32ppc_fbsd.c:96 eelf32ppclinux.c:96 eelf32ppcnto.c:96
-#: eelf32ppcsim.c:96 eelf32ppcwindiss.c:96 eppclynx.c:96
+#: eelf32ppc.c:96 eelf32ppc_fbsd.c:96 eelf32ppchaiku.c:96 eelf32ppclinux.c:96
+#: eelf32ppcnto.c:96 eelf32ppcsim.c:96 eelf32ppcwindiss.c:96
msgid "%X%P: select_plt_layout problem %E\n"
msgstr "%X%P: „select_plt_layout“ проблем „%E“\n"
#: eelf32lppc.c:160 eelf32lppclinux.c:160 eelf32lppcnto.c:160
#: eelf32lppcsim.c:160 eelf32ppc.c:160 eelf32ppc_fbsd.c:160
-#: eelf32ppclinux.c:160 eelf32ppcnto.c:160 eelf32ppcsim.c:160
-#: eelf32ppcvxworks.c:105 eelf32ppcwindiss.c:160 eelf64lppc.c:319
-#: eelf64ppc.c:319 eelf64ppc_fbsd.c:319 eppclynx.c:160
+#: eelf32ppchaiku.c:160 eelf32ppclinux.c:160 eelf32ppcnto.c:160
+#: eelf32ppcsim.c:160 eelf32ppcvxworks.c:105 eelf32ppcwindiss.c:160
+#: eelf64lppc.c:321 eelf64lppc_fbsd.c:321 eelf64ppc.c:321 eelf64ppc_fbsd.c:321
msgid "%X%P: inline PLT: %E\n"
msgstr "%X%P: унутарње „PLT“: %E\n"
#: eelf32lppc.c:168 eelf32lppclinux.c:168 eelf32lppcnto.c:168
#: eelf32lppcsim.c:168 eelf32ppc.c:168 eelf32ppc_fbsd.c:168
-#: eelf32ppclinux.c:168 eelf32ppcnto.c:168 eelf32ppcsim.c:168
-#: eelf32ppcvxworks.c:113 eelf32ppcwindiss.c:168 eelf64lppc.c:330
-#: eelf64ppc.c:330 eelf64ppc_fbsd.c:330 eppclynx.c:168
+#: eelf32ppchaiku.c:168 eelf32ppclinux.c:168 eelf32ppcnto.c:168
+#: eelf32ppcsim.c:168 eelf32ppcvxworks.c:113 eelf32ppcwindiss.c:168
+#: eelf64lppc.c:325 eelf64lppc.c:344 eelf64lppc_fbsd.c:325
+#: eelf64lppc_fbsd.c:344 eelf64ppc.c:325 eelf64ppc.c:344 eelf64ppc_fbsd.c:325
+#: eelf64ppc_fbsd.c:344
msgid "%X%P: TLS problem %E\n"
msgstr "%X%P: „TLS“ проблем „%E“\n"
#: eelf32lppc.c:255 eelf32lppclinux.c:255 eelf32lppcnto.c:255
#: eelf32lppcsim.c:255 eelf32ppc.c:255 eelf32ppc_fbsd.c:255
-#: eelf32ppclinux.c:255 eelf32ppcnto.c:255 eelf32ppcsim.c:255
-#: eelf32ppcvxworks.c:200 eelf32ppcwindiss.c:255 eppclynx.c:255
+#: eelf32ppchaiku.c:255 eelf32ppclinux.c:255 eelf32ppcnto.c:255
+#: eelf32ppcsim.c:255 eelf32ppcvxworks.c:200 eelf32ppcwindiss.c:255
msgid "%X%P: ppc_finish_symbols problem %E\n"
msgstr "%X%P: „ppc_finish_symbols“ проблем „%E“\n"
-#: eelf32lppc.c:743 eelf32lppclinux.c:743 eelf32lppcnto.c:743
-#: eelf32lppcsim.c:743 eelf32ppc.c:743 eelf32ppc_fbsd.c:743
-#: eelf32ppclinux.c:743 eelf32ppcnto.c:743 eelf32ppcsim.c:743
-#: eelf32ppcvxworks.c:717 eelf32ppcwindiss.c:743 eelf64lppc.c:1175
-#: eelf64ppc.c:1175 eelf64ppc_fbsd.c:1175 eppclynx.c:743
+#: eelf32lppc.c:758 eelf32lppclinux.c:758 eelf32lppcnto.c:758
+#: eelf32lppcsim.c:758 eelf32ppc.c:758 eelf32ppc_fbsd.c:758
+#: eelf32ppchaiku.c:758 eelf32ppclinux.c:758 eelf32ppcnto.c:758
+#: eelf32ppcsim.c:758 eelf32ppcvxworks.c:732 eelf32ppcwindiss.c:758
+#: eelf64lppc.c:1213 eelf64lppc_fbsd.c:1213 eelf64ppc.c:1213
+#: eelf64ppc_fbsd.c:1213
msgid "%F%P: invalid --plt-align `%s'\n"
msgstr "%F%P: неиÑправно „--plt-align“ „%s“\n"
-#: eelf32lppc.c:776 eelf32lppclinux.c:776 eelf32lppcnto.c:776
-#: eelf32lppcsim.c:776 eelf32ppc.c:776 eelf32ppc_fbsd.c:776
-#: eelf32ppclinux.c:776 eelf32ppcnto.c:776 eelf32ppcsim.c:776
-#: eelf32ppcvxworks.c:750 eelf32ppcwindiss.c:776 eppclynx.c:776
+#: eelf32lppc.c:791 eelf32lppclinux.c:791 eelf32lppcnto.c:791
+#: eelf32lppcsim.c:791 eelf32ppc.c:791 eelf32ppc_fbsd.c:791
+#: eelf32ppchaiku.c:791 eelf32ppclinux.c:791 eelf32ppcnto.c:791
+#: eelf32ppcsim.c:791 eelf32ppcvxworks.c:765 eelf32ppcwindiss.c:791
msgid "%F%P: invalid pagesize `%s'\n"
msgstr "%F%P: неиÑправна величина Ñтранице „%s“\n"
-#: eelf32lppc.c:806 eelf32lppclinux.c:806 eelf32lppcnto.c:806
-#: eelf32lppcsim.c:806 eelf32ppc.c:806 eelf32ppc_fbsd.c:806
-#: eelf32ppclinux.c:806 eelf32ppcnto.c:806 eelf32ppcsim.c:806
-#: eelf32ppcvxworks.c:784 eelf32ppcwindiss.c:806 eelf64lppc.c:1320
-#: eelf64ppc.c:1320 eelf64ppc_fbsd.c:1320 eppclynx.c:806
+#: eelf32lppc.c:821 eelf32lppclinux.c:821 eelf32lppcnto.c:821
+#: eelf32lppcsim.c:821 eelf32ppc.c:821 eelf32ppc_fbsd.c:821
+#: eelf32ppchaiku.c:821 eelf32ppclinux.c:821 eelf32ppcnto.c:821
+#: eelf32ppcsim.c:821 eelf32ppcvxworks.c:799 eelf32ppcwindiss.c:821
+#: eelf64lppc.c:1398 eelf64lppc_fbsd.c:1398 eelf64ppc.c:1398
+#: eelf64ppc_fbsd.c:1398
#, c-format
msgid " --emit-stub-syms Label linker stubs with a symbol\n"
msgstr " --emit-stub-syms Етикетира окрајке повезивача Ñимболом\n"
-#: eelf32lppc.c:809 eelf32lppclinux.c:809 eelf32lppcnto.c:809
-#: eelf32lppcsim.c:809 eelf32ppc.c:809 eelf32ppc_fbsd.c:809
-#: eelf32ppclinux.c:809 eelf32ppcnto.c:809 eelf32ppcsim.c:809
-#: eelf32ppcvxworks.c:787 eelf32ppcwindiss.c:809 eelf64lppc.c:1323
-#: eelf64ppc.c:1323 eelf64ppc_fbsd.c:1323 eppclynx.c:809
+#: eelf32lppc.c:824 eelf32lppclinux.c:824 eelf32lppcnto.c:824
+#: eelf32lppcsim.c:824 eelf32ppc.c:824 eelf32ppc_fbsd.c:824
+#: eelf32ppchaiku.c:824 eelf32ppclinux.c:824 eelf32ppcnto.c:824
+#: eelf32ppcsim.c:824 eelf32ppcvxworks.c:802 eelf32ppcwindiss.c:824
+#: eelf64lppc.c:1401 eelf64lppc_fbsd.c:1401 eelf64ppc.c:1401
+#: eelf64ppc_fbsd.c:1401
#, c-format
msgid " --no-emit-stub-syms Don't label linker stubs with a symbol\n"
msgstr " --no-emit-stub-syms Ðе етикетира окрајке повезивача Ñимболом\n"
-#: eelf32lppc.c:812 eelf32lppclinux.c:812 eelf32lppcnto.c:812
-#: eelf32lppcsim.c:812 eelf32ppc.c:812 eelf32ppc_fbsd.c:812
-#: eelf32ppclinux.c:812 eelf32ppcnto.c:812 eelf32ppcsim.c:812
-#: eelf32ppcvxworks.c:790 eelf32ppcwindiss.c:812 eelf64lppc.c:1343
-#: eelf64ppc.c:1343 eelf64ppc_fbsd.c:1343 eppclynx.c:812
+#: eelf32lppc.c:827 eelf32lppclinux.c:827 eelf32lppcnto.c:827
+#: eelf32lppcsim.c:827 eelf32ppc.c:827 eelf32ppc_fbsd.c:827
+#: eelf32ppchaiku.c:827 eelf32ppclinux.c:827 eelf32ppcnto.c:827
+#: eelf32ppcsim.c:827 eelf32ppcvxworks.c:805 eelf32ppcwindiss.c:827
+#: eelf64lppc.c:1421 eelf64lppc_fbsd.c:1421 eelf64ppc.c:1421
+#: eelf64ppc_fbsd.c:1421
#, c-format
msgid " --no-tls-optimize Don't try to optimize TLS accesses\n"
msgstr " --no-tls-optimize Ðе покушава да оптимизује „TLS“ приÑтупе\n"
-#: eelf32lppc.c:815 eelf32lppclinux.c:815 eelf32lppcnto.c:815
-#: eelf32lppcsim.c:815 eelf32ppc.c:815 eelf32ppc_fbsd.c:815
-#: eelf32ppclinux.c:815 eelf32ppcnto.c:815 eelf32ppcsim.c:815
-#: eelf32ppcvxworks.c:793 eelf32ppcwindiss.c:815 eelf64lppc.c:1349
-#: eelf64ppc.c:1349 eelf64ppc_fbsd.c:1349 eppclynx.c:815
+#: eelf32lppc.c:830 eelf32lppclinux.c:830 eelf32lppcnto.c:830
+#: eelf32lppcsim.c:830 eelf32ppc.c:830 eelf32ppc_fbsd.c:830
+#: eelf32ppchaiku.c:830 eelf32ppclinux.c:830 eelf32ppcnto.c:830
+#: eelf32ppcsim.c:830 eelf32ppcvxworks.c:808 eelf32ppcwindiss.c:830
+#: eelf64lppc.c:1427 eelf64lppc_fbsd.c:1427 eelf64ppc.c:1427
+#: eelf64ppc_fbsd.c:1427
#, c-format
msgid " --no-tls-get-addr-optimize Don't use a special __tls_get_addr call\n"
msgstr " --no-tls-get-addr-optimize Ðе кориÑти Ñпецијални „__tls_get_addr“ позив\n"
-#: eelf32lppc.c:818 eelf32lppclinux.c:818 eelf32lppcnto.c:818
-#: eelf32lppcsim.c:818 eelf32ppc.c:818 eelf32ppc_fbsd.c:818
-#: eelf32ppclinux.c:818 eelf32ppcnto.c:818 eelf32ppcsim.c:818
-#: eelf32ppcwindiss.c:818 eppclynx.c:818
+#: eelf32lppc.c:833 eelf32lppclinux.c:833 eelf32lppcnto.c:833
+#: eelf32lppcsim.c:833 eelf32ppc.c:833 eelf32ppc_fbsd.c:833
+#: eelf32ppchaiku.c:833 eelf32ppclinux.c:833 eelf32ppcnto.c:833
+#: eelf32ppcsim.c:833 eelf32ppcwindiss.c:833
#, c-format
msgid " --secure-plt Use new-style PLT if possible\n"
msgstr " --secure-plt КориÑти новоÑтилни „PLT“ ако је могуће\n"
-#: eelf32lppc.c:821 eelf32lppclinux.c:821 eelf32lppcnto.c:821
-#: eelf32lppcsim.c:821 eelf32ppc.c:821 eelf32ppc_fbsd.c:821
-#: eelf32ppclinux.c:821 eelf32ppcnto.c:821 eelf32ppcsim.c:821
-#: eelf32ppcwindiss.c:821 eppclynx.c:821
+#: eelf32lppc.c:836 eelf32lppclinux.c:836 eelf32lppcnto.c:836
+#: eelf32lppcsim.c:836 eelf32ppc.c:836 eelf32ppc_fbsd.c:836
+#: eelf32ppchaiku.c:836 eelf32ppclinux.c:836 eelf32ppcnto.c:836
+#: eelf32ppcsim.c:836 eelf32ppcwindiss.c:836
#, c-format
msgid " --bss-plt Force old-style BSS PLT\n"
msgstr " --bss-plt ПриÑиљава ÑтароÑтилни „BSS PLT“\n"
-#: eelf32lppc.c:824 eelf32lppclinux.c:824 eelf32lppcnto.c:824
-#: eelf32lppcsim.c:824 eelf32ppc.c:824 eelf32ppc_fbsd.c:824
-#: eelf32ppclinux.c:824 eelf32ppcnto.c:824 eelf32ppcsim.c:824
-#: eelf32ppcwindiss.c:824 eppclynx.c:824
+#: eelf32lppc.c:839 eelf32lppclinux.c:839 eelf32lppcnto.c:839
+#: eelf32lppcsim.c:839 eelf32ppc.c:839 eelf32ppc_fbsd.c:839
+#: eelf32ppchaiku.c:839 eelf32ppclinux.c:839 eelf32ppcnto.c:839
+#: eelf32ppcsim.c:839 eelf32ppcwindiss.c:839
#, c-format
msgid " --plt-align Align PLT call stubs to fit cache lines\n"
msgstr " --plt-align Поравнава окрајке „PLT“ позива да Ñтану у редове оÑтаве\n"
-#: eelf32lppc.c:827 eelf32lppclinux.c:827 eelf32lppcnto.c:827
-#: eelf32lppcsim.c:827 eelf32ppc.c:827 eelf32ppc_fbsd.c:827
-#: eelf32ppclinux.c:827 eelf32ppcnto.c:827 eelf32ppcsim.c:827
-#: eelf32ppcwindiss.c:827 eelf64lppc.c:1311 eelf64ppc.c:1311
-#: eelf64ppc_fbsd.c:1311 eppclynx.c:827
+#: eelf32lppc.c:842 eelf32lppclinux.c:842 eelf32lppcnto.c:842
+#: eelf32lppcsim.c:842 eelf32ppc.c:842 eelf32ppc_fbsd.c:842
+#: eelf32ppchaiku.c:842 eelf32ppclinux.c:842 eelf32ppcnto.c:842
+#: eelf32ppcsim.c:842 eelf32ppcwindiss.c:842 eelf64lppc.c:1380
+#: eelf64lppc_fbsd.c:1380 eelf64ppc.c:1380 eelf64ppc_fbsd.c:1380
#, c-format
msgid " --no-plt-align Dont't align individual PLT call stubs\n"
msgstr " --no-plt-align Ðе поравнава неиÑправне окрајке „PLT“ позива\n"
-#: eelf32lppc.c:830 eelf32lppclinux.c:830 eelf32lppcnto.c:830
-#: eelf32lppcsim.c:830 eelf32ppc.c:830 eelf32ppc_fbsd.c:830
-#: eelf32ppclinux.c:830 eelf32ppcnto.c:830 eelf32ppcsim.c:830
-#: eelf32ppcwindiss.c:830 eelf64lppc.c:1361 eelf64ppc.c:1361
-#: eelf64ppc_fbsd.c:1361 eppclynx.c:830
+#: eelf32lppc.c:845 eelf32lppclinux.c:845 eelf32lppcnto.c:845
+#: eelf32lppcsim.c:845 eelf32ppc.c:845 eelf32ppc_fbsd.c:845
+#: eelf32ppchaiku.c:845 eelf32ppclinux.c:845 eelf32ppcnto.c:845
+#: eelf32ppcsim.c:845 eelf32ppcwindiss.c:845 eelf64lppc.c:1439
+#: eelf64lppc_fbsd.c:1439 eelf64ppc.c:1439 eelf64ppc_fbsd.c:1439
#, c-format
msgid " --no-inline-optimize Don't convert inline PLT to direct calls\n"
msgstr " --no-inline-optimize Ðе претвара унутарње „PLT“ у директне позиве\n"
-#: eelf32lppc.c:833 eelf32lppclinux.c:833 eelf32lppcnto.c:833
-#: eelf32lppcsim.c:833 eelf32ppc.c:833 eelf32ppc_fbsd.c:833
-#: eelf32ppclinux.c:833 eelf32ppcnto.c:833 eelf32ppcsim.c:833
-#: eelf32ppcwindiss.c:833 eppclynx.c:833
+#: eelf32lppc.c:848 eelf32lppclinux.c:848 eelf32lppcnto.c:848
+#: eelf32lppcsim.c:848 eelf32ppc.c:848 eelf32ppc_fbsd.c:848
+#: eelf32ppchaiku.c:848 eelf32ppclinux.c:848 eelf32ppcnto.c:848
+#: eelf32ppcsim.c:848 eelf32ppcwindiss.c:848
#, c-format
msgid " --sdata-got Force GOT location just before .sdata\n"
msgstr " --sdata-got ПриÑиљава „GOT“ меÑто одмах пре „.sdata“\n"
-#: eelf32lppc.c:836 eelf32lppclinux.c:836 eelf32lppcnto.c:836
-#: eelf32lppcsim.c:836 eelf32ppc.c:836 eelf32ppc_fbsd.c:836
-#: eelf32ppclinux.c:836 eelf32ppcnto.c:836 eelf32ppcsim.c:836
-#: eelf32ppcvxworks.c:796 eelf32ppcwindiss.c:836 eppclynx.c:836
+#: eelf32lppc.c:851 eelf32lppclinux.c:851 eelf32lppcnto.c:851
+#: eelf32lppcsim.c:851 eelf32ppc.c:851 eelf32ppc_fbsd.c:851
+#: eelf32ppchaiku.c:851 eelf32ppclinux.c:851 eelf32ppcnto.c:851
+#: eelf32ppcsim.c:851 eelf32ppcvxworks.c:811 eelf32ppcwindiss.c:851
#, c-format
msgid ""
" --ppc476-workaround [=pagesize]\n"
@@ -5085,37 +5356,38 @@ msgstr ""
" --ppc476-workaround [=величина_Ñтранице]\n"
" Избегава грешку оÑтаве на „ppc476“\n"
-#: eelf32lppc.c:840 eelf32lppclinux.c:840 eelf32lppcnto.c:840
-#: eelf32lppcsim.c:840 eelf32ppc.c:840 eelf32ppc_fbsd.c:840
-#: eelf32ppclinux.c:840 eelf32ppcnto.c:840 eelf32ppcsim.c:840
-#: eelf32ppcvxworks.c:800 eelf32ppcwindiss.c:840 eppclynx.c:840
+#: eelf32lppc.c:855 eelf32lppclinux.c:855 eelf32lppcnto.c:855
+#: eelf32lppcsim.c:855 eelf32ppc.c:855 eelf32ppc_fbsd.c:855
+#: eelf32ppchaiku.c:855 eelf32ppclinux.c:855 eelf32ppcnto.c:855
+#: eelf32ppcsim.c:855 eelf32ppcvxworks.c:815 eelf32ppcwindiss.c:855
#, c-format
msgid " --no-ppc476-workaround Disable workaround\n"
msgstr " --no-ppc476-workaround Онемогућује решавања\n"
-#: eelf32lppc.c:843 eelf32lppclinux.c:843 eelf32lppcnto.c:843
-#: eelf32lppcsim.c:843 eelf32ppc.c:843 eelf32ppc_fbsd.c:843
-#: eelf32ppclinux.c:843 eelf32ppcnto.c:843 eelf32ppcsim.c:843
-#: eelf32ppcvxworks.c:803 eelf32ppcwindiss.c:843 eppclynx.c:843
+#: eelf32lppc.c:858 eelf32lppclinux.c:858 eelf32lppcnto.c:858
+#: eelf32lppcsim.c:858 eelf32ppc.c:858 eelf32ppc_fbsd.c:858
+#: eelf32ppchaiku.c:858 eelf32ppclinux.c:858 eelf32ppcnto.c:858
+#: eelf32ppcsim.c:858 eelf32ppcvxworks.c:818 eelf32ppcwindiss.c:858
#, c-format
msgid " --no-pic-fixup Don't edit non-pic to pic\n"
msgstr " --no-pic-fixup Ðе уређује „non-pic“ у „pic“\n"
-#: eelf32lppc.c:846 eelf32lppclinux.c:846 eelf32lppcnto.c:846
-#: eelf32lppcsim.c:846 eelf32ppc.c:846 eelf32ppc_fbsd.c:846
-#: eelf32ppclinux.c:846 eelf32ppcnto.c:846 eelf32ppcsim.c:846
-#: eelf32ppcvxworks.c:806 eelf32ppcwindiss.c:846 eppclynx.c:846
+#: eelf32lppc.c:861 eelf32lppclinux.c:861 eelf32lppcnto.c:861
+#: eelf32lppcsim.c:861 eelf32ppc.c:861 eelf32ppc_fbsd.c:861
+#: eelf32ppchaiku.c:861 eelf32ppclinux.c:861 eelf32ppcnto.c:861
+#: eelf32ppcsim.c:861 eelf32ppcvxworks.c:821 eelf32ppcwindiss.c:861
#, c-format
msgid " --vle-reloc-fixup Correct old object file 16A/16D relocation\n"
msgstr " --vle-reloc-fixup Поправља „16A/16D“ премештај Ñтаре објектне датотеке\n"
-#: eelf32mcore.c:295
+#: eelf32mcore.c:306
#, c-format
msgid " --base_file <basefile> Generate a base file for relocatable DLLs\n"
msgstr " --base_file <дттка_оÑнове> Ствара датотеку оÑнове за премеÑтљиве „DLL“-ове\n"
-#: eelf32metag.c:704 eelf64lppc.c:1286 eelf64ppc.c:1286 eelf64ppc_fbsd.c:1286
-#: ehppaelf.c:568 ehppalinux.c:746 ehppanbsd.c:746 ehppaobsd.c:746
+#: eelf32metag.c:719 eelf64lppc.c:1355 eelf64lppc_fbsd.c:1355 eelf64ppc.c:1355
+#: eelf64ppc_fbsd.c:1355 ehppaelf.c:579 ehppalinux.c:761 ehppanbsd.c:761
+#: ehppaobsd.c:761
#, c-format
msgid ""
" --stub-group-size=N Maximum size of a group of input sections that\n"
@@ -5128,42 +5400,42 @@ msgid ""
" choose suitable defaults.\n"
msgstr ""
" --stub-group-size=N Ðајвећа величина групе улазних одељака којима\n"
-" може да ради један одељак окрајка. Ðегативна\n"
-" вредноÑÑ‚ налази Ñве окрајке пре њихових грана\n"
-" (Ñа величином групе „-N“), док позитивна\n"
-" вредноÑÑ‚ допушта две групе улазних одељака, једну\n"
-" пре , а другу након Ñваког одељка окрајка.\n"
-" ВредноÑти +/-1 означавају да повезивач треба да\n"
-" изабере одговарајућу подразумеваноÑÑ‚.\n"
+" може да ради један одељак окрајка. Ðегативна\n"
+" вредноÑÑ‚ налази Ñве окрајке пре њихових грана\n"
+" (Ñа величином групе „-N“), док позитивна\n"
+" вредноÑÑ‚ допушта две групе улазних одељака, једну\n"
+" пре , а другу након Ñваког одељка окрајка.\n"
+" ВредноÑти +/-1 означавају да повезивач треба да\n"
+" изабере одговарајућу подразумеваноÑÑ‚.\n"
-#: eelf32rx.c:327
+#: eelf32rx.c:338
#, c-format
msgid ""
" --no-flag-mismatch-warnings Don't warn about objects with incompatible\n"
" endian or dsp settings\n"
msgstr ""
" --no-flag-mismatch-warnings Ðе упозорава о објектима Ñа неÑаглаÑним\n"
-" подешавањима крајноÑти или „dsp“-а\n"
+" подешавањима крајноÑти или „dsp“-а\n"
-#: eelf32rx.c:329
+#: eelf32rx.c:340
#, c-format
msgid ""
" --flag-mismatch-warnings Warn about objects with incompatible\n"
" endian, dsp or ABI settings\n"
msgstr ""
" --flag-mismatch-warnings Упозорава о објектима Ñа неÑаглаÑним\n"
-" подешавањима крајноÑти, „dsp“-а или „ABI“-а\n"
+" подешавањима крајноÑти, „dsp“-а или „ABI“-а\n"
-#: eelf32rx.c:331
+#: eelf32rx.c:342
#, c-format
msgid ""
" --ignore-lma Ignore segment LMAs [default]\n"
" (for Renesas Tools compatibility)\n"
msgstr ""
" --ignore-lma Занемарује „LMA“-ове одељка [оÑновно]\n"
-" (за ÑаглаÑноÑÑ‚ „Renesas“ алата)\n"
+" (за ÑаглаÑноÑÑ‚ „Renesas“ алата)\n"
-#: eelf32rx.c:333
+#: eelf32rx.c:344
#, c-format
msgid " --no-ignore-lma Don't ignore segment LMAs\n"
msgstr " --no-ignore-lma Ðе занемарује „LMA“-еве подеока\n"
@@ -5224,21 +5496,21 @@ msgstr "%F%P: ниÑам уÑпео да направим одељак „.xtens
msgid "%F%P: Relaxation not supported with --enable-non-contiguous-regions.\n"
msgstr "%F%P: Опуштање није подржано Ñа „--enable-non-contiguous-regions“.\n"
-#: eelf32xtensa.c:2383
+#: eelf32xtensa.c:2398
#, c-format
msgid ""
" --size-opt When relaxing longcalls, prefer size\n"
" optimization over branch target alignment\n"
msgstr ""
" --size-opt Приликом опуштања дугих позива, даје предноÑÑ‚\n"
-" оптимизацији величине над поравнањем циља гране\n"
+" оптимизацији величине над поравнањем циља гране\n"
-#: eelf32xtensa.c:2386
+#: eelf32xtensa.c:2401
#, c-format
msgid " --abi-windowed Choose windowed ABI for the output object\n"
msgstr " --abi-windowed Бира упрозорен „ABI“ за излазни објекат\n"
-#: eelf32xtensa.c:2388
+#: eelf32xtensa.c:2403
#, c-format
msgid " --abi-call0 Choose call0 ABI for the output object\n"
msgstr " --abi-call0 Бира „call0 ABI“ за излазни објекат\n"
@@ -5247,88 +5519,119 @@ msgstr " --abi-call0 Бира „call0 ABI“ за из
msgid "%F%P: %pB: Instruction sets of object files incompatible\n"
msgstr "%F%P: %pB: Скупови инÑтрукција објектних датотека ниÑу ÑаглаÑни\n"
-#: eelf64_ia64.c:477 eelf64_ia64_fbsd.c:477
+#: eelf64_ia64.c:492 eelf64_ia64_fbsd.c:492
#, c-format
msgid " --itanium Generate code for Intel Itanium processor\n"
msgstr " --itanium Ствара код за „Intel Itanium“ процеÑор\n"
-#: eelf64_s390.c:63 eelf64lppc.c:127 eelf64ppc.c:127 eelf64ppc_fbsd.c:127
+#: eelf64_s390.c:63 eelf64lppc.c:129 eelf64lppc_fbsd.c:129 eelf64ppc.c:129
+#: eelf64ppc_fbsd.c:129
msgid "%F%P: can not init BFD: %E\n"
msgstr "%F%P: не могу да покренем „BFD“: %E\n"
-#: eelf64_s390.c:520
+#: eelf64_s390.c:535
#, c-format
msgid " --s390-pgste Tell the kernel to allocate 4k page tables\n"
msgstr " --s390-pgste Говори језгру да додели 4k табеле Ñтранице\n"
-#: eelf64alpha.c:549 eelf64alpha_fbsd.c:549 eelf64alpha_nbsd.c:549
+#: eelf64alpha.c:564 eelf64alpha_fbsd.c:564 eelf64alpha_nbsd.c:564
#, c-format
msgid ""
" --taso Load executable in the lower 31-bit addressable\n"
" virtual address range\n"
msgstr ""
" --taso Учитава извршну у нижем 31-битном адреÑивом\n"
-" виртуелном опÑегу адреÑе\n"
+" виртуелном опÑегу адреÑе\n"
-#: eelf64alpha.c:552 eelf64alpha_fbsd.c:552 eelf64alpha_nbsd.c:552
+#: eelf64alpha.c:567 eelf64alpha_fbsd.c:567 eelf64alpha_nbsd.c:567
#, c-format
msgid " --secureplt Force PLT in text segment\n"
msgstr " --secureplt ПриÑиљава „PLT“ у подеоку текÑта\n"
-#: eelf64alpha.c:554 eelf64alpha_fbsd.c:554 eelf64alpha_nbsd.c:554
+#: eelf64alpha.c:569 eelf64alpha_fbsd.c:569 eelf64alpha_nbsd.c:569
#, c-format
msgid " --no-secureplt Force PLT in data segment\n"
msgstr " --no-secureplt ПриÑиљава „PLT“ у подеоку података\n"
-#: eelf64lppc.c:311 eelf64lppc.c:339 eelf64ppc.c:311 eelf64ppc.c:339
-#: eelf64ppc_fbsd.c:311 eelf64ppc_fbsd.c:339
+#: eelf64lppc.c:313 eelf64lppc.c:353 eelf64lppc_fbsd.c:313
+#: eelf64lppc_fbsd.c:353 eelf64ppc.c:313 eelf64ppc.c:353 eelf64ppc_fbsd.c:313
+#: eelf64ppc_fbsd.c:353
msgid "%X%P: can not edit %s: %E\n"
msgstr "%X%P: не могу да уредим „%s“: %E\n"
-#: eelf64lppc.c:504 eelf64ppc.c:504 eelf64ppc_fbsd.c:504
+#: eelf64lppc.c:516 eelf64lppc_fbsd.c:516 eelf64ppc.c:516 eelf64ppc_fbsd.c:516
msgid "%X%P: linker script separates .got and .toc\n"
msgstr "%X%P: Ñрипта повезивача раздваја „.got“ и „.toc“\n"
-#: eelf64lppc.c:565 eelf64ppc.c:565 eelf64ppc_fbsd.c:565
+#: eelf64lppc.c:577 eelf64lppc_fbsd.c:577 eelf64ppc.c:577 eelf64ppc_fbsd.c:577
msgid "%P: .init/.fini fragments use differing TOC pointers\n"
msgstr "%P: „.init/.fini“ одломци кориÑте другачије „TOC“ показиваче\n"
-#: eelf64lppc.c:1296 eelf64ppc.c:1296
+#: eelf64lppc.c:1242 eelf64lppc_fbsd.c:1242 eelf64ppc.c:1242
+#: eelf64ppc_fbsd.c:1242
+msgid "%F%P: invalid --power10-stubs argument `%s'\n"
+msgstr "%F%P: неиÑправан „--power10-stubs“ аргумент „%s“\n"
+
+#: eelf64lppc.c:1365 eelf64ppc.c:1365
#, c-format
msgid " --plt-static-chain PLT call stubs should load r11 (default)\n"
msgstr " --plt-static-chain Окрајци „PLT“ позива треба да учитају „r11“ (оÑновно)\n"
-#: eelf64lppc.c:1299 eelf64ppc.c:1299
+#: eelf64lppc.c:1368 eelf64ppc.c:1368
#, c-format
msgid " --no-plt-static-chain PLT call stubs should not load r11\n"
msgstr " --no-plt-static-chain Окрајци „PLT“ позива не треба да учитају „r11“\n"
-#: eelf64lppc.c:1302 eelf64ppc.c:1302 eelf64ppc_fbsd.c:1302
+#: eelf64lppc.c:1371 eelf64lppc_fbsd.c:1371 eelf64ppc.c:1371
+#: eelf64ppc_fbsd.c:1371
#, c-format
msgid " --plt-thread-safe PLT call stubs with load-load barrier\n"
msgstr " --plt-thread-safe Окрајци „PLT“ позива Ñа учитај-учитај баријером\n"
-#: eelf64lppc.c:1305 eelf64ppc.c:1305 eelf64ppc_fbsd.c:1305
+#: eelf64lppc.c:1374 eelf64lppc_fbsd.c:1374 eelf64ppc.c:1374
+#: eelf64ppc_fbsd.c:1374
#, c-format
msgid " --no-plt-thread-safe PLT call stubs without barrier\n"
msgstr " --no-plt-thread-safe Окрајци „PLT“ позива без баријере\n"
-#: eelf64lppc.c:1308 eelf64ppc.c:1308 eelf64ppc_fbsd.c:1308
+#: eelf64lppc.c:1377 eelf64lppc_fbsd.c:1377 eelf64ppc.c:1377
+#: eelf64ppc_fbsd.c:1377
#, c-format
msgid " --plt-align [=<align>] Align PLT call stubs to fit cache lines\n"
msgstr " --plt-align [=<поравнај>] Поравнава окрајке „PLT“ позива да Ñтану у редове оÑтаве\n"
-#: eelf64lppc.c:1314 eelf64ppc.c:1314 eelf64ppc_fbsd.c:1314
+#: eelf64lppc.c:1383 eelf64lppc_fbsd.c:1383 eelf64ppc.c:1383
+#: eelf64ppc_fbsd.c:1383
#, c-format
msgid " --plt-localentry Optimize calls to ELFv2 localentry:0 functions\n"
msgstr " --plt-localentry Оптимизује позиве на „ELFv2 localentry:0“ функције\n"
-#: eelf64lppc.c:1317 eelf64ppc.c:1317 eelf64ppc_fbsd.c:1317
+#: eelf64lppc.c:1386 eelf64lppc_fbsd.c:1386 eelf64ppc.c:1386
+#: eelf64ppc_fbsd.c:1386
#, c-format
msgid " --no-plt-localentry Don't optimize ELFv2 calls\n"
msgstr " --no-plt-localentry Ðе оптимизује „ELFv2“ позиве\n"
-#: eelf64lppc.c:1326 eelf64ppc.c:1326 eelf64ppc_fbsd.c:1326
+#: eelf64lppc.c:1389 eelf64lppc_fbsd.c:1389 eelf64ppc.c:1389
+#: eelf64ppc_fbsd.c:1389
+#, c-format
+msgid " --power10-stubs [=auto] Use Power10 PLT call stubs (default auto)\n"
+msgstr " --power10-stubs [=auto] КориÑти окрајке „Power10 PLT“ позива (оÑновно је „auto“)\n"
+
+#: eelf64lppc.c:1392 eelf64lppc_fbsd.c:1392 eelf64ppc.c:1392
+#: eelf64ppc_fbsd.c:1392
+#, c-format
+msgid " --no-pcrel-optimize Don't perform R_PPC64_PCREL_OPT optimization\n"
+msgstr " --no-pcrel-optimize Ðе обавља „R_PPC64_PCREL_OPT“ оптимизацију\n"
+
+#: eelf64lppc.c:1395 eelf64lppc_fbsd.c:1395 eelf64ppc.c:1395
+#: eelf64ppc_fbsd.c:1395
+#, c-format
+msgid " --no-power10-stubs Don't use Power10 PLT call stubs\n"
+msgstr " --no-power10-stubs Ðе кориÑти окрајке „Power10 PLT“ позива\n"
+
+#: eelf64lppc.c:1404 eelf64lppc_fbsd.c:1404 eelf64ppc.c:1404
+#: eelf64ppc_fbsd.c:1404
#, c-format
msgid ""
" --dotsyms For every version pattern \"foo\" in a version\n"
@@ -5337,16 +5640,18 @@ msgid ""
" descriptor symbols. Defaults to on.\n"
msgstr ""
" --dotsyms За Ñваки „foo“ шаблон издања у Ñкрипти\n"
-" издања, додаје „.foo“ тако да Ñе Ñимболи кода\n"
-" функције Ñматрају иÑто као Ñимболи опиÑника\n"
-" функције. Подразумева Ñе укљученом.\n"
+" издања, додаје „.foo“ тако да Ñе Ñимболи кода\n"
+" функције Ñматрају иÑто као Ñимболи опиÑника\n"
+" функције. Подразумева Ñе укљученом.\n"
-#: eelf64lppc.c:1332 eelf64ppc.c:1332 eelf64ppc_fbsd.c:1332
+#: eelf64lppc.c:1410 eelf64lppc_fbsd.c:1410 eelf64ppc.c:1410
+#: eelf64ppc_fbsd.c:1410
#, c-format
msgid " --no-dotsyms Don't do anything special in version scripts\n"
msgstr " --no-dotsyms Ðе ради ништа поÑебно у Ñкриптама издања\n"
-#: eelf64lppc.c:1335 eelf64ppc.c:1335 eelf64ppc_fbsd.c:1335
+#: eelf64lppc.c:1413 eelf64lppc_fbsd.c:1413 eelf64ppc.c:1413
+#: eelf64ppc_fbsd.c:1413
#, c-format
msgid ""
" --save-restore-funcs Provide register save and restore routines used\n"
@@ -5354,57 +5659,76 @@ msgid ""
" final link, off for ld -r.\n"
msgstr ""
" --save-restore-funcs Обезбеђује рутине чувања и повраћаја региÑтра кога\n"
-" кориÑти „gcc -Os“ код. Подразумева Ñе укљученом за уобичајену\n"
-" крајњу везу, иÑкљученом за „ld -r“.\n"
+" кориÑти „gcc -Os“ код. Подразумева Ñе укљученом за уобичајену\n"
+" крајњу везу, иÑкљученом за „ld -r“.\n"
-#: eelf64lppc.c:1340 eelf64ppc.c:1340 eelf64ppc_fbsd.c:1340
+#: eelf64lppc.c:1418 eelf64lppc_fbsd.c:1418 eelf64ppc.c:1418
+#: eelf64ppc_fbsd.c:1418
#, c-format
msgid " --no-save-restore-funcs Don't provide these routines\n"
msgstr " --no-save-restore-funcs Ðе обезбеђује ове рутине\n"
-#: eelf64lppc.c:1346 eelf64ppc.c:1346 eelf64ppc_fbsd.c:1346
+#: eelf64lppc.c:1424 eelf64lppc_fbsd.c:1424 eelf64ppc.c:1424
+#: eelf64ppc_fbsd.c:1424
#, c-format
msgid " --tls-get-addr-optimize Force use of special __tls_get_addr call\n"
msgstr " --tls-get-addr-optimize ПриÑиљава коришћење Ñпецијалног „__tls_get_addr“ позив\n"
-#: eelf64lppc.c:1352 eelf64ppc.c:1352 eelf64ppc_fbsd.c:1352
+#: eelf64lppc.c:1430 eelf64lppc_fbsd.c:1430 eelf64ppc.c:1430
+#: eelf64ppc_fbsd.c:1430
#, c-format
msgid " --tls-get-addr-regsave Force register save __tls_get_addr stub\n"
msgstr " --tls-get-addr-regsave Приморава да региÑтар Ñачува „__tls_get_addr“ окрајак\n"
-#: eelf64lppc.c:1355 eelf64ppc.c:1355 eelf64ppc_fbsd.c:1355
+#: eelf64lppc.c:1433 eelf64lppc_fbsd.c:1433 eelf64ppc.c:1433
+#: eelf64ppc_fbsd.c:1433
#, c-format
msgid " --no-tls-get-addr-regsave Don't use register save __tls_get_addr stub\n"
msgstr " --no-tls-get-addr-regsave Ðе кориÑти да региÑтар Ñачува „__tls_get_addr“ окрајак\n"
-#: eelf64lppc.c:1358 eelf64ppc.c:1358 eelf64ppc_fbsd.c:1358
+#: eelf64lppc.c:1436 eelf64lppc_fbsd.c:1436 eelf64ppc.c:1436
+#: eelf64ppc_fbsd.c:1436
#, c-format
msgid " --no-opd-optimize Don't optimize the OPD section\n"
msgstr " --no-opd-optimize Ðе оптимизује „OPD“ одељак\n"
-#: eelf64lppc.c:1364 eelf64ppc.c:1364 eelf64ppc_fbsd.c:1364
+#: eelf64lppc.c:1442 eelf64lppc_fbsd.c:1442 eelf64ppc.c:1442
+#: eelf64ppc_fbsd.c:1442
#, c-format
msgid " --no-toc-optimize Don't optimize the TOC section\n"
msgstr " --no-toc-optimize Ðе оптимизује „TOC“ одељак\n"
-#: eelf64lppc.c:1367 eelf64ppc.c:1367 eelf64ppc_fbsd.c:1367
+#: eelf64lppc.c:1445 eelf64lppc_fbsd.c:1445 eelf64ppc.c:1445
+#: eelf64ppc_fbsd.c:1445
#, c-format
msgid " --no-multi-toc Disallow automatic multiple toc sections\n"
msgstr " --no-multi-toc Ðе омогућава више ÑамоÑталних одељака табеле Ñадржаја\n"
-#: eelf64lppc.c:1370 eelf64ppc.c:1370 eelf64ppc_fbsd.c:1370
+#: eelf64lppc.c:1448 eelf64lppc_fbsd.c:1448 eelf64ppc.c:1448
+#: eelf64ppc_fbsd.c:1448
#, c-format
msgid " --no-toc-sort Don't sort TOC and GOT sections\n"
msgstr " --no-toc-sort Ðе ређа „TOC“ и „GOT“ одељке\n"
-#: eelf64lppc.c:1373 eelf64ppc.c:1373 eelf64ppc_fbsd.c:1373
+#: eelf64lppc.c:1451 eelf64lppc_fbsd.c:1451 eelf64ppc.c:1451
+#: eelf64ppc_fbsd.c:1451
#, c-format
msgid ""
" --non-overlapping-opd Canonicalize .opd, so that there are no\n"
" overlapping .opd entries\n"
msgstr ""
" --non-overlapping-opd Стандардизује „.opd“, тако да нема\n"
-" преклапајућих „.opd“ уноÑа\n"
+" преклапајућих „.opd“ уноÑа\n"
+
+#: eelf64lppc_fbsd.c:1365 eelf64ppc_fbsd.c:1365
+#, c-format
+msgid " --plt-static-chain PLT call stubs should load r111\n"
+msgstr " --plt-static-chain Окрајци „PLT“ позива треба да учитају „r111“\n"
+
+#: eelf64lppc_fbsd.c:1368 eelf64ppc_fbsd.c:1368
+#, c-format
+msgid " --no-plt-static-chain PLT call stubs should not load r11 (default)\n"
+msgstr " --no-plt-static-chain Окрајци „PLT“ позива не треба да учитају „r11“ (оÑновно)\n"
#: eelf64mmix.c:81 emmo.c:84
msgid "%X%P: internal problems setting up section %s"
@@ -5419,18 +5743,65 @@ msgstr "%X%P: превише општих региÑтара: %u, највише
msgid "%F%P: can't finalize linker-allocated global registers\n"
msgstr "%F%P: не могу да завршим повезивачем додељене опште региÑтре\n"
-#: eelf64ppc_fbsd.c:1296
+#: eelf_x86_64.c:5636 eelf_x86_64_cloudabi.c:579 eelf_x86_64_fbsd.c:579
+#: eelf_x86_64_haiku.c:579 eelf_x86_64_sol2.c:711
+msgid "%F%P: invalid option for -z lam-u48-report=: %s\n"
+msgstr "%F%P: неиÑправна опција за „-z lam-u48-report=“: %s\n"
+
+#: eelf_x86_64.c:5650 eelf_x86_64_cloudabi.c:593 eelf_x86_64_fbsd.c:593
+#: eelf_x86_64_haiku.c:593 eelf_x86_64_sol2.c:725
+msgid "%F%P: invalid option for -z lam-u57-report=: %s\n"
+msgstr "%F%P: неиÑправна опција за „-z lam-u57-report=“: %s\n"
+
+#: eelf_x86_64.c:5671 eelf_x86_64_cloudabi.c:614 eelf_x86_64_fbsd.c:614
+#: eelf_x86_64_haiku.c:614 eelf_x86_64_sol2.c:746
+msgid "%F%P: invalid option for -z lam-report=: %s\n"
+msgstr "%F%P: неиÑправна опција за „-z lam-report=“: %s\n"
+
+#: eelf_x86_64.c:5749 eelf_x86_64_cloudabi.c:692 eelf_x86_64_fbsd.c:692
+#: eelf_x86_64_haiku.c:692 eelf_x86_64_sol2.c:824
#, c-format
-msgid " --plt-static-chain PLT call stubs should load r111\n"
-msgstr " --plt-static-chain Окрајци „PLT“ позива треба да учитају „r111“\n"
+msgid " -z lam-u48 Generate GNU_PROPERTY_X86_FEATURE_1_LAM_U48\n"
+msgstr " -z lam-u48 Ствара „GNU_PROPERTY_X86_FEATURE_1_LAM_U48“\n"
-#: eelf64ppc_fbsd.c:1299
+#: eelf_x86_64.c:5751 eelf_x86_64_cloudabi.c:694 eelf_x86_64_fbsd.c:694
+#: eelf_x86_64_haiku.c:694 eelf_x86_64_sol2.c:826
#, c-format
-msgid " --no-plt-static-chain PLT call stubs should not load r11 (default)\n"
-msgstr " --no-plt-static-chain Окрајци „PLT“ позива не треба да учитају „r11“ (оÑновно)\n"
+msgid ""
+" -z lam-u48-report=[none|warning|error] (default: none)\n"
+" Report missing LAM_U48 property\n"
+msgstr ""
+" -z lam-u48-report=[none|warning|error] (оÑновно: none)\n"
+" Извештава о недоÑтајућем „LAM_U48“ ÑвојÑтву\n"
-#: eelf_x86_64.c:5497 eelf_x86_64_cloudabi.c:594 eelf_x86_64_fbsd.c:594
-#: eelf_x86_64_sol2.c:725
+#: eelf_x86_64.c:5754 eelf_x86_64_cloudabi.c:697 eelf_x86_64_fbsd.c:697
+#: eelf_x86_64_haiku.c:697 eelf_x86_64_sol2.c:829
+#, c-format
+msgid " -z lam-u57 Generate GNU_PROPERTY_X86_FEATURE_1_LAM_U57\n"
+msgstr " -z lam-u57 Ствара „GNU_PROPERTY_X86_FEATURE_1_LAM_U57“\n"
+
+#: eelf_x86_64.c:5756 eelf_x86_64_cloudabi.c:699 eelf_x86_64_fbsd.c:699
+#: eelf_x86_64_haiku.c:699 eelf_x86_64_sol2.c:831
+#, c-format
+msgid ""
+" -z lam-u57-report=[none|warning|error] (default: none)\n"
+" Report missing LAM_U57 property\n"
+msgstr ""
+" -z lam-u57-report=[none|warning|error] (оÑновно: none)\n"
+" Извештава о недоÑтајућем „LAM_U57“ ÑвојÑтву\n"
+
+#: eelf_x86_64.c:5759 eelf_x86_64_cloudabi.c:702 eelf_x86_64_fbsd.c:702
+#: eelf_x86_64_haiku.c:702 eelf_x86_64_sol2.c:834
+#, c-format
+msgid ""
+" -z lam-report=[none|warning|error] (default: none)\n"
+" Report missing LAM_U48 and LAM_U57 properties\n"
+msgstr ""
+" -z lam-report=[none|warning|error] (оÑновно: none)\n"
+" Извештава о недоÑтајућим „LAM_U48“ и „LAM_U57“ ÑвојÑтвима\n"
+
+#: eelf_x86_64.c:5768 eelf_x86_64_cloudabi.c:711 eelf_x86_64_fbsd.c:711
+#: eelf_x86_64_haiku.c:711 eelf_x86_64_sol2.c:843
#, c-format
msgid " -z bndplt Always generate BND prefix in PLT entries\n"
msgstr " -z bndplt Увек Ñтвара „BND“ Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ Ñƒ „PLT“ уноÑима\n"
@@ -5439,14 +5810,14 @@ msgstr " -z bndplt Увек Ñтвара „BND“ п
msgid "%X%P: can not set gp\n"
msgstr "%X%P: не могу да подеÑим „gp“\n"
-#: ehppaelf.c:564 ehppalinux.c:742 ehppanbsd.c:742 ehppaobsd.c:742
+#: ehppaelf.c:575 ehppalinux.c:757 ehppanbsd.c:757 ehppaobsd.c:757
#, c-format
msgid ""
" --multi-subspace Generate import and export stubs to support\n"
" multiple sub-space shared libraries\n"
msgstr ""
" --multi-subspace Ствара окрајке увоза и извоза да подржавају\n"
-" више под-проÑторних дељених библиотека\n"
+" више под-проÑторних дељених библиотека\n"
#: ei386beos.c:376
msgid "%F%P: PE operations on non PE file\n"
@@ -5456,48 +5827,48 @@ msgstr "%F%P: „PE“ радње на не „PE“ датотеци\n"
msgid "%F%P: %pB: can't read contents of section .idata: %E\n"
msgstr "%F%P: %pB: не могу да читам Ñадржаје одељка „.idata“: %E\n"
-#: ei386beos.c:680
+#: ei386beos.c:663
msgid "%F%P: section %s has '$' as first character\n"
msgstr "%F%P: одељак „%s“ има $ као први знак\n"
-#: ei386beos.c:712
+#: ei386beos.c:693
msgid "%F%P: *(%s$) missing from linker script\n"
msgstr "%F%P: „*(%s$)“ недоÑтаје из Ñкрипте повезивача\n"
-#: ei386pep.c:377
+#: ei386pep.c:399
#, c-format
msgid " --[no-]insert-timestamp Use a real timestamp rather than zero (default)\n"
msgstr " --[no-]insert-timestamp КориÑти Ñтварну временÑку ознаку умеÑто нуле (оÑновно)\n"
-#: ei386pep.c:388
+#: ei386pep.c:410
#, c-format
msgid " export, place into import library instead\n"
msgstr " извози, Ñтавља у библиотеку увоза умеÑто тога\n"
-#: ei386pep.c:393
+#: ei386pep.c:415
#, c-format
msgid ""
" --compat-implib Create backward compatible import libs;\n"
" create __imp_<SYMBOL> as well\n"
msgstr ""
" --compat-implib Прави уназад ÑаглаÑне библиотеке увоза;\n"
-" прави „__imp_<СИМБОЛ>“ такође\n"
+" прави „__imp_<СИМБОЛ>“ такође\n"
-#: ei386pep.c:394
+#: ei386pep.c:416
#, c-format
msgid ""
" --enable-auto-image-base Automatically choose image base for DLLs\n"
" unless user specifies one\n"
msgstr ""
" --enable-auto-image-base Сам бира оÑнову Ñлике за ДЛЛ-е\n"
-" оÑим ако кориÑник не наведе неку\n"
+" оÑим ако кориÑник не наведе неку\n"
-#: ei386pep.c:395
+#: ei386pep.c:417
#, c-format
msgid " --disable-auto-image-base Do not auto-choose image base (default)\n"
msgstr " --disable-auto-image-base Ðе бира Ñам оÑнову Ñлике (оÑновно)\n"
-#: ei386pep.c:399
+#: ei386pep.c:421
#, c-format
msgid ""
" --enable-runtime-pseudo-reloc Work around auto-import limitations by\n"
@@ -5505,50 +5876,50 @@ msgid ""
" runtime\n"
msgstr ""
" --enable-runtime-pseudo-reloc Превазилази ограничења ÑамоÑталног увоза\n"
-" додавајући пÑеудо-премештања која Ñе решавају\n"
-" у време извршавања\n"
+" додавајући пÑеудо-премештања која Ñе решавају\n"
+" у време извршавања\n"
-#: ei386pep.c:400
+#: ei386pep.c:422
#, c-format
msgid ""
" --disable-runtime-pseudo-reloc Do not add runtime pseudo-relocations for\n"
" auto-imported DATA\n"
msgstr ""
" --disable-runtime-pseudo-reloc Ðе додаје пÑеудо-премештања у време извршавања за\n"
-" ÑамоÑтално увезене ПОДÐТКЕ\n"
+" ÑамоÑтално увезене ПОДÐТКЕ\n"
-#: ei386pep.c:401
+#: ei386pep.c:423
#, c-format
msgid ""
" --enable-extra-pep-debug Enable verbose debug output when building\n"
" or linking to DLLs (esp. auto-import)\n"
msgstr ""
" --enable-extra-pep-debug Укључује опширан излаз прочишћавања када изграђује\n"
-" или прави везе до ДЛЛ-а (нарочито ÑамоÑтални увоз)\n"
+" или прави везе до ДЛЛ-а (нарочито ÑамоÑтални увоз)\n"
-#: ei386pep.c:404
+#: ei386pep.c:426
#, c-format
msgid ""
-" --high-entropy-va Image is compatible with 64-bit address space\n"
+" --[disable-]high-entropy-va Image is compatible with 64-bit address space\n"
" layout randomization (ASLR)\n"
msgstr ""
-" --high-entropy-va Слика је ÑаглаÑна Ñа 64-битном наÑумичношћу\n"
-" раÑпореда проÑтора адреÑе (ASLR)\n"
+" --[disable-]high-entropy-va Слика је ÑаглаÑна Ñа 64-битном наÑумичношћу\n"
+" раÑпореда проÑтора адреÑе (ASLR)\n"
-#: ei386pep.c:410
+#: ei386pep.c:433
#, c-format
msgid ""
-" --no-seh Image does not use SEH; no SE handler may\n"
+" --[disable-]no-seh Image does not use SEH; no SE handler may\n"
" be called in this image\n"
msgstr ""
-" --no-seh Слика не кориÑти „СЕХ“; никакав „СЕ“ руковалац не може\n"
-" бити позван у овој Ñлици\n"
+" --[disable-]no-seh Слика не кориÑти „SEH“; никакав „SE“ руковалац не може\n"
+" бити позван у овој Ñлици\n"
-#: ei386pep.c:912
+#: ei386pep.c:965
msgid "%P: warning: --export-dynamic is not supported for PE+ targets, did you mean --export-all-symbols?\n"
msgstr "%P: упозорење: „--export-dynamic“ није подржано за „PE+“ мете, да ли Ñте миÑлили „--export-all-symbols“?\n"
-#: ei386pep.c:980 ei386pep.c:1007
+#: ei386pep.c:1033 ei386pep.c:1060
#, c-format
msgid "warning: resolving %s by linking to %s\n"
msgstr "упозорење: решавам „%s“ повезивањем на „%s“\n"
@@ -5561,33 +5932,33 @@ msgstr "%P: упозорење: величина облаÑти меморије
msgid "%X%P: changing output format whilst linking is not supported\n"
msgstr "%X%P: мења Ð·Ð°Ð¿Ð¸Ñ Ð¸Ð·Ð»Ð°Ð·Ð° док повезивање није подржано\n"
-#: em68hc11elf.c:561 em68hc11elfb.c:561 em68hc12elf.c:561 em68hc12elfb.c:561
+#: em68hc11elf.c:572 em68hc11elfb.c:572 em68hc12elf.c:572 em68hc12elfb.c:572
#, c-format
msgid ""
" --no-trampoline Do not generate the far trampolines used to call\n"
" a far function using jsr or bsr\n"
msgstr ""
" --no-trampoline Ðе Ñтвара „far“ трамполине коришћене за позивање\n"
-" „far“ функције кориÑтећи „jsr“ или „bsr“\n"
+" „far“ функције кориÑтећи „jsr“ или „bsr“\n"
-#: em68hc11elf.c:564 em68hc11elfb.c:564 em68hc12elf.c:564 em68hc12elfb.c:564
+#: em68hc11elf.c:575 em68hc11elfb.c:575 em68hc12elf.c:575 em68hc12elfb.c:575
#, c-format
msgid ""
" --bank-window NAME Specify the name of the memory region describing\n"
" the layout of the memory bank window\n"
msgstr ""
" --bank-window ÐÐЗИВ Ðаводи назив облаÑти меморије који опиÑује\n"
-" раÑпоред прозора групе меморије\n"
+" раÑпоред прозора групе меморије\n"
#: em68kelf.c:89 em68kelfnbsd.c:89
msgid "%F%P: %pB: all input objects must be ELF for --embedded-relocs\n"
msgstr "%F%P: %pB: Ñви улазни објекти морају бити „ELF“ за „--embedded-relocs“\n"
-#: em68kelf.c:603 em68kelfnbsd.c:603
+#: em68kelf.c:618 em68kelfnbsd.c:618
msgid "%P: unrecognized --got argument '%s'\n"
msgstr "%P: непознат „--got“ аргумент „%s“\n"
-#: em68kelf.c:616 em68kelfnbsd.c:616
+#: em68kelf.c:631 em68kelfnbsd.c:631
#, c-format
msgid " --got=<type> Specify GOT handling scheme\n"
msgstr " --got=<врÑта> Ðаводи шему „GOT“ руковања\n"
@@ -5600,15 +5971,15 @@ msgstr "%X%P: унутрашњи проблеми Ñкенирања „%pB“ Ð
msgid "%P: error: unhandled data_statement size\n"
msgstr "%P: грешка: непозната величина изјаве података\n"
-#: emsp430X.c:300 emsp430elf.c:300
+#: emsp430X.c:299 emsp430elf.c:299
msgid "%P: error: no section named %s or %s in linker script\n"
msgstr "%P: грешка: нема одељка под називом „%s“ или „%s“ у Ñкрипти повезивача\n"
-#: emsp430X.c:309 emsp430elf.c:309
+#: emsp430X.c:308 emsp430elf.c:308
msgid "%P: error: no section named %s in linker script\n"
msgstr "%P: грешка: нема одељка под називом „%s“ у Ñкрипти повезивача\n"
-#: emsp430X.c:452 emsp430elf.c:452
+#: emsp430X.c:459 emsp430elf.c:459
#, c-format
msgid ""
" --code-region={either,lower,upper,none}\n"
@@ -5617,7 +5988,7 @@ msgstr ""
" --code-region={оба,нижи,виши,ништа}\n"
" Преображава одељке „.text*“ у одељке „{оба,нижи,виши,ништа}.text*“\n"
-#: emsp430X.c:453 emsp430elf.c:453
+#: emsp430X.c:460 emsp430elf.c:460
#, c-format
msgid ""
" --data-region={either,lower,upper,none}\n"
@@ -5626,9 +5997,9 @@ msgid ""
msgstr ""
" --data-region={оба,нижи,виши,ништа}\n"
" Преображава одељке „.data*“, „.rodata*“ и „.bss*“ у\n"
-" одељке „{оба,нижи,виши,ништа}.{bss,data,rodata}*“\n"
+" одељке „{оба,нижи,виши,ништа}.{bss,data,rodata}*“\n"
-#: emsp430X.c:454 emsp430elf.c:454
+#: emsp430X.c:461 emsp430elf.c:461
#, c-format
msgid ""
" --disable-sec-transformation\n"
@@ -5637,21 +6008,21 @@ msgid ""
msgstr ""
" --disable-sec-transformation\n"
" ИÑкључује преображавање одељака „.{text,data,bss,rodata}*“ за\n"
-" додавање префикÑа {оба,нижи,виши,ништа}\n"
+" додавање префикÑа {оба,нижи,виши,ништа}\n"
-#: emsp430X.c:473 emsp430elf.c:473
+#: emsp430X.c:480 emsp430elf.c:480
msgid "%P: --code-region requires an argument: {upper,lower,either,none}\n"
msgstr "%P: „--code-region“ захтева аргумент: {оба,нижи,виши,ништа}\n"
-#: emsp430X.c:479 emsp430elf.c:479
+#: emsp430X.c:486 emsp430elf.c:486
msgid "%P: error: unrecognized argument to --code-region= option: \"%s\"\n"
msgstr "%P: грешка: непознат аргумент за „--code-region=“ опцију: \"%s\"\n"
-#: emsp430X.c:496 emsp430elf.c:496
+#: emsp430X.c:503 emsp430elf.c:503
msgid "%P: --data-region requires an argument: {upper,lower,either,none}\n"
msgstr "%P: „--data-region“ захтева аргумент: {оба,нижи,виши,ништа}\n"
-#: emsp430X.c:502 emsp430elf.c:502
+#: emsp430X.c:509 emsp430elf.c:509
msgid "%P: error: unrecognized argument to --data-region= option: \"%s\"\n"
msgstr "%P: грешка: непознат аргумент за „--data-region=“ опцију: \"%s\"\n"
@@ -5661,48 +6032,48 @@ msgstr "%P: грешка: непознат аргумент за „--data-regio
msgid "%F%P: %pB: ABI version of object files mismatched\n"
msgstr "%F%P: %pB: „ABI“ издање објектних датотека не одговара\n"
-#: ends32belf.c:395 ends32belf16m.c:395 ends32belf_linux.c:524 ends32elf.c:395
-#: ends32elf16m.c:395 ends32elf_linux.c:524
+#: ends32belf.c:406 ends32belf16m.c:406 ends32belf_linux.c:539 ends32elf.c:406
+#: ends32elf16m.c:406 ends32elf_linux.c:539
msgid "%P: --mbaseline is not used anymore\n"
msgstr "%P: „--mbaseline“ Ñе више не кориÑти\n"
-#: ends32belf.c:406 ends32belf16m.c:406 ends32belf_linux.c:535 ends32elf.c:406
-#: ends32elf16m.c:406 ends32elf_linux.c:535
+#: ends32belf.c:417 ends32belf16m.c:417 ends32belf_linux.c:550 ends32elf.c:417
+#: ends32elf16m.c:417 ends32elf_linux.c:550
msgid "%P: --relax-[no-]reduce-fp-updat is not used anymore\n"
msgstr "%P: „--relax-[no-]reduce-fp-updat“ Ñе више не кориÑти\n"
-#: ends32belf.c:410 ends32belf16m.c:410 ends32belf_linux.c:539 ends32elf.c:410
-#: ends32elf16m.c:410 ends32elf_linux.c:539
+#: ends32belf.c:421 ends32belf16m.c:421 ends32belf_linux.c:554 ends32elf.c:421
+#: ends32elf16m.c:421 ends32elf_linux.c:554
msgid "%P: missing file for --mexport-symbols\n"
msgstr "%P: недоÑтаје датотека за „--mexport-symbols“\n"
-#: ends32belf.c:423 ends32belf.c:432 ends32belf16m.c:423 ends32belf16m.c:432
-#: ends32belf_linux.c:552 ends32belf_linux.c:561 ends32elf.c:423
-#: ends32elf.c:432 ends32elf16m.c:423 ends32elf16m.c:432 ends32elf_linux.c:552
-#: ends32elf_linux.c:561
+#: ends32belf.c:434 ends32belf.c:443 ends32belf16m.c:434 ends32belf16m.c:443
+#: ends32belf_linux.c:567 ends32belf_linux.c:576 ends32elf.c:434
+#: ends32elf.c:443 ends32elf16m.c:434 ends32elf16m.c:443 ends32elf_linux.c:567
+#: ends32elf_linux.c:576
msgid "%P: valid arguments to --mhyper-relax=(low|medium|high)\n"
msgstr "%P: иÑправни аргументи за „--mhyper-relax=(ниÑко|Ñредње|виÑоко)“\n"
-#: ends32belf.c:452 ends32belf16m.c:452 ends32belf_linux.c:581 ends32elf.c:452
-#: ends32elf16m.c:452 ends32elf_linux.c:581
+#: ends32belf.c:463 ends32belf16m.c:463 ends32belf_linux.c:596 ends32elf.c:463
+#: ends32elf16m.c:463 ends32elf_linux.c:596
#, c-format
msgid " --m[no-]fp-as-gp Disable/enable fp-as-gp relaxation\n"
msgstr " --m[no-]fp-as-gp ИÑкључује/укључује „fp-as-gp“ опуштања\n"
-#: ends32belf.c:454 ends32belf16m.c:454 ends32belf_linux.c:583 ends32elf.c:454
-#: ends32elf16m.c:454 ends32elf_linux.c:583
+#: ends32belf.c:465 ends32belf16m.c:465 ends32belf_linux.c:598 ends32elf.c:465
+#: ends32elf16m.c:465 ends32elf_linux.c:598
#, c-format
msgid " --mexport-symbols=FILE Exporting symbols in linker script\n"
msgstr " --mexport-symbols=ДТТКРИзвози Ñимболе у Ñкрипти повезивача\n"
-#: ends32belf.c:456 ends32belf16m.c:456 ends32belf_linux.c:585 ends32elf.c:456
-#: ends32elf16m.c:456 ends32elf_linux.c:585
+#: ends32belf.c:467 ends32belf16m.c:467 ends32belf_linux.c:600 ends32elf.c:467
+#: ends32elf16m.c:467 ends32elf_linux.c:600
#, c-format
msgid " --mhyper-relax=level Adjust relax level (low|medium|high). default: medium\n"
msgstr " --mhyper-relax=ниво Подешава ниво опуштања (низак|Ñредњи|виÑок). оÑновно је: Ñредњи\n"
-#: ends32belf.c:458 ends32belf16m.c:458 ends32belf_linux.c:587 ends32elf.c:458
-#: ends32elf16m.c:458 ends32elf_linux.c:587
+#: ends32belf.c:469 ends32belf16m.c:469 ends32belf_linux.c:602 ends32elf.c:469
+#: ends32elf16m.c:469 ends32elf_linux.c:602
#, c-format
msgid " --m[no-]tlsdesc-trampoline Disable/enable TLS DESC trampoline\n"
msgstr " --m[no-]tlsdesc-trampoline ИÑкључује/укључује „TLS DESC“ трамполину\n"
@@ -5736,6 +6107,12 @@ msgstr " --format 0|1|2 Ðаводи које „COFF“ Ð
msgid "%F%P: invalid COFF format version %s\n"
msgstr "%F%P: неиÑправно издање „COFF“ запиÑа „%s“\n"
+#~ msgid "%P: cannot find %s\n"
+#~ msgstr "%P: не могу да нађем „%s“\n"
+
+#~ msgid "%F%P: cannot link with CTF in %pB: %s\n"
+#~ msgstr "%F%P: не могу да повежем Ñа „CTF“ у „%pB: %s\n"
+
#~ msgid " --[no-]branch-stub\n"
#~ msgstr " --[no-]branch-stub\n"
diff --git a/ld/po/uk.po b/ld/po/uk.po
index bc5cf46df1a..84071030c96 100644
--- a/ld/po/uk.po
+++ b/ld/po/uk.po
@@ -2,13 +2,13 @@
# Copyright (C) 2012 Free Software Foundation, Inc.
# This file is distributed under the same license as the binutils package.
#
-# Yuri Chornoivan <yurchor@ukr.net>, 2012, 2014, 2017, 2018, 2019, 2020, 2021.
+# Yuri Chornoivan <yurchor@ukr.net>, 2012, 2014, 2017, 2018, 2019, 2020, 2021, 2022.
msgid ""
msgstr ""
-"Project-Id-Version: ld 2.36.90\n"
-"Report-Msgid-Bugs-To: bug-binutils@gnu.org\n"
-"POT-Creation-Date: 2021-07-03 15:08+0100\n"
-"PO-Revision-Date: 2021-07-04 11:03+0300\n"
+"Project-Id-Version: ld 2.37.90\n"
+"Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n"
+"POT-Creation-Date: 2022-01-22 12:24+0000\n"
+"PO-Revision-Date: 2022-01-23 14:06+0200\n"
"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
"Language-Team: Ukrainian <trans-uk@lists.fedoraproject.org>\n"
"Language: uk\n"
@@ -60,15 +60,15 @@ msgstr "Ðемає Ñимволів\n"
msgid "%P: symbol `%pT' missing from main hash table\n"
msgstr "%P: немає Ñимволу «%pT» у оÑновній таблиці хешів\n"
-#: ldcref.c:517 ldcref.c:628 ldmain.c:1302 ldmisc.c:336 pe-dll.c:737
-#: pe-dll.c:1315 pe-dll.c:1436 pe-dll.c:1562 earm_wince_pe.c:1486
+#: ldcref.c:517 ldcref.c:628 ldmain.c:1304 ldmisc.c:336 pe-dll.c:738
+#: pe-dll.c:1316 pe-dll.c:1437 pe-dll.c:1563 earm_wince_pe.c:1486
#: earm_wince_pe.c:1693 earmpe.c:1486 earmpe.c:1693 ei386pe.c:1486
#: ei386pe.c:1693 ei386pe_posix.c:1486 ei386pe_posix.c:1693 ei386pep.c:1475
#: emcorepe.c:1486 emcorepe.c:1693 eshpe.c:1486 eshpe.c:1693
msgid "%F%P: %pB: could not read symbols: %E\n"
msgstr "%F%P: %pB: не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ Ñимволи: %E\n"
-#: ldcref.c:690 ldcref.c:697 ldmain.c:1364 ldmain.c:1371
+#: ldcref.c:690 ldcref.c:697 ldmain.c:1366 ldmain.c:1373
msgid "%F%P: %pB: could not read relocs: %E\n"
msgstr "%F%P: %pB: не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ переÑуваннÑ: %E\n"
@@ -114,133 +114,137 @@ msgstr ""
msgid "%P: warning: -z dynamic-undefined-weak ignored\n"
msgstr "%P: попередженнÑ: проігноровано -z dynamic-undefined-weak\n"
-#: ldelf.c:98
+#: ldelf.c:91
+msgid "%F%P: common page size (0x%v) > maximum page size (0x%v)\n"
+msgstr "%F%P: типовий розмір Ñторінки (0x%v) > макÑимального розміру Ñторінки (0x%v)\n"
+
+#: ldelf.c:117
msgid "%F%P: %pB: --just-symbols may not be used on DSO\n"
msgstr "%F%P: %pB: --just-symbols може бути не викориÑтано Ð´Ð»Ñ DSO\n"
-#: ldelf.c:200
+#: ldelf.c:219
msgid "%P: %pB: bfd_stat failed: %E\n"
msgstr "%P: %pB: помилка bfd_stat: %E\n"
-#: ldelf.c:241
+#: ldelf.c:260
msgid "%P: warning: %s, needed by %pB, may conflict with %s\n"
msgstr "%P: попередженнÑ: %s, потрібна Ð´Ð»Ñ %pB, може конфліктувати з %s\n"
-#: ldelf.c:261 ldfile.c:133
+#: ldelf.c:280 ldfile.c:133
#, c-format
msgid "attempt to open %s failed\n"
msgstr "не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ %s\n"
-#: ldelf.c:298
+#: ldelf.c:317
msgid "%F%P: %pB: bfd_elf_get_bfd_needed_list failed: %E\n"
msgstr "%F%P: %pB: помилка bfd_elf_get_bfd_needed_list: %E\n"
-#: ldelf.c:346
+#: ldelf.c:365
msgid "%F%P: %pB: bfd_stat failed: %E\n"
msgstr "%F%P: %pB: помилка bfd_stat: %E\n"
-#: ldelf.c:352
+#: ldelf.c:371
#, c-format
msgid "found %s at %s\n"
msgstr "знайдено %s у %s\n"
-#: ldelf.c:385 ldlang.c:3146 ldlang.c:3160
+#: ldelf.c:404 ldlang.c:3159 ldlang.c:3173
msgid "%F%P: %pB: error adding symbols: %E\n"
msgstr "%F%P: %pB: помилка під Ñ‡Ð°Ñ Ñпроби додати Ñимволи: %E\n"
#. We only issue an "unrecognised" message in verbose mode
#. as the $<foo> token might be a legitimate component of
#. a path name in the target's file system.
-#: ldelf.c:572
+#: ldelf.c:591
#, c-format
msgid "unrecognised or unsupported token '%s' in search path\n"
msgstr "нерозпізнаний або непідтримуваний Ð·Ð°Ð¿Ð¸Ñ Â«%s» у шлÑху Ð´Ð»Ñ Ð¿Ð¾ÑˆÑƒÐºÑƒ\n"
-#: ldelf.c:1016
+#: ldelf.c:1035
msgid "%F%P: %s: can't open for writing: %E\n"
msgstr "%F%P: %s: не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸ÑуваннÑ: %E\n"
-#: ldelf.c:1054
+#: ldelf.c:1081
msgid "%F%P: cannot use executable file '%pB' as input to a link\n"
msgstr "%F%P: не можна викориÑтовувати виконуваний файл «%pB» Ñк вхідні дані до поÑиланнÑ\n"
-#: ldelf.c:1108
+#: ldelf.c:1135
msgid "%F%P: compact frame descriptions incompatible with DWARF2 .eh_frame from %pB\n"
msgstr "%F%P: компактні опиÑи кадрів неÑуміÑні з .eh_frame DWARF2 з %pB\n"
-#: ldelf.c:1144
+#: ldelf.c:1171
msgid "%P: warning: cannot create .eh_frame_hdr section, --eh-frame-hdr ignored\n"
msgstr "%P: попередженнÑ: не вдалоÑÑ Ñтворити розділ .eh_frame_hdr, --eh-frame-hdr проігноровано\n"
-#: ldelf.c:1200
+#: ldelf.c:1227
#, c-format
msgid "%s needed by %pB\n"
msgstr "%s потрібен Ð´Ð»Ñ %pB\n"
-#: ldelf.c:1309
+#: ldelf.c:1336
msgid "%P: warning: %s, needed by %pB, not found (try using -rpath or -rpath-link)\n"
msgstr "P: попередженнÑ: %s, потрібного Ð´Ð»Ñ %pB, не знайдено (Ñпробуйте ÑкориÑтатиÑÑ -rpath або -rpath-link)\n"
-#: ldelf.c:1322
+#: ldelf.c:1349
msgid "%F%P: failed to add DT_NEEDED dynamic tag\n"
msgstr "%F%P: не вдалоÑÑ Ð´Ð¾Ð´Ð°Ñ‚Ð¸ динамічну мітку DT_NEEDED\n"
-#: ldelf.c:1330
+#: ldelf.c:1357
msgid "%F%P: failed to parse EH frame entries\n"
msgstr "%F%P: не вдалоÑÑ Ð¾Ð±Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸ запиÑи кадру EH\n"
-#: ldelf.c:1369
+#: ldelf.c:1396
msgid "%P: warning: .note.gnu.build-id section discarded, --build-id ignored\n"
msgstr "%P: попередженнÑ: розділ .note.gnu.build-id відкинуто, --build-id проігноровано.\n"
-#: ldelf.c:1415 earm_wince_pe.c:1277 earmpe.c:1277 ei386pe.c:1277
+#: ldelf.c:1445 earm_wince_pe.c:1277 earmpe.c:1277 ei386pe.c:1277
#: ei386pe_posix.c:1277 ei386pep.c:1284 emcorepe.c:1277 eshpe.c:1277
msgid "%P: warning: unrecognized --build-id style ignored\n"
msgstr "%P: попередженнÑ: проігноровано нерозпізнаний Ñтиль --build-id\n"
-#: ldelf.c:1433
+#: ldelf.c:1464
msgid "%P: warning: cannot create .note.gnu.build-id section, --build-id ignored\n"
msgstr "%P: попередженнÑ: неможливо Ñтворити розділ .note.gnu.build-id, --build-id проігноровано\n"
-#: ldelf.c:1465 eaix5ppc.c:1408 eaix5rs6.c:1408 eaixppc.c:1408 eaixrs6.c:1408
+#: ldelf.c:1496 eaix5ppc.c:1408 eaix5rs6.c:1408 eaixppc.c:1408 eaixrs6.c:1408
#: eppcmacos.c:1408
msgid "%F%P: failed to record assignment to %s: %E\n"
msgstr "%F%P: не вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ %s: %E\n"
-#: ldelf.c:1649 ldelf.c:1714 eaix5ppc.c:831 eaix5rs6.c:831 eaixppc.c:831
+#: ldelf.c:1675 ldelf.c:1740 eaix5ppc.c:831 eaix5rs6.c:831 eaixppc.c:831
#: eaixrs6.c:831 eelf64_ia64_vms.c:209 eppcmacos.c:831
msgid "%F%P: failed to set dynamic section sizes: %E\n"
msgstr "%F%P: не вдалоÑÑ Ð²Ñтановити розміри динамічного розділу: %E\n"
-#: ldelf.c:1686
+#: ldelf.c:1712
msgid "%F%P: %pB: can't read contents of section .gnu.warning: %E\n"
msgstr "%F%P: %pB: не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ вміÑÑ‚ розділу .gnu.warning: %E\n"
-#: ldelfgen.c:283
-msgid "%F%P: %pA has both ordered and unordered sections"
-msgstr "%F%P: %pA міÑтить одразу впорÑдкований Ñ– невпорÑдкований розділи"
+#: ldelfgen.c:284
+msgid "%F%P: %pA has both ordered and unordered sections\n"
+msgstr "%F%P: %pA міÑтить одразу впорÑдкований Ñ– невпорÑдкований розділи\n"
-#: ldelfgen.c:307
+#: ldelfgen.c:309
msgid "%F%P: map sections to segments failed: %E\n"
msgstr "%F%P: помилка прив'Ñзки розділів до Ñегментів: %E\n"
-#: ldelfgen.c:327
-msgid "%F%P: looping in map_segments"
-msgstr "%F%P: Ð·Ð°Ñ†Ð¸ÐºÐ»ÐµÐ½Ð½Ñ Ñƒ map_segments"
+#: ldelfgen.c:329
+msgid "%F%P: looping in map_segments\n"
+msgstr "%F%P: Ð·Ð°Ñ†Ð¸ÐºÐ»ÐµÐ½Ð½Ñ Ñƒ map_segments\n"
-#: ldelfgen.c:339
-msgid "%F%P: failed to strip zero-sized dynamic sections"
-msgstr "%F%P: не вдалоÑÑ Ð²Ð¸Ð»ÑƒÑ‡Ð¸Ñ‚Ð¸ динамічні розділи нульового розміру"
+#: ldelfgen.c:341
+msgid "%F%P: failed to strip zero-sized dynamic sections\n"
+msgstr "%F%P: не вдалоÑÑ Ð²Ð¸Ð»ÑƒÑ‡Ð¸Ñ‚Ð¸ динамічні розділи нульового розміру\n"
-#: ldelfgen.c:417
+#: ldelfgen.c:419
msgid "%F%P: warning: CTF strtab association failed; strings will not be shared: %s\n"
msgstr "%F%P: попередженнÑ: не вдалоÑÑ Ð¿Ñ€Ð¸Ð²'Ñзати таблицю Ñ€Ñдків CTF; Ñпільне викориÑÑ‚Ð°Ð½Ð½Ñ Ñ€Ñдків Ñ” неможливим: %s\n"
-#: ldelfgen.c:444
+#: ldelfgen.c:446
msgid "%F%P: warning: CTF symbol addition failed; CTF will not be tied to symbols: %s\n"
msgstr "%F%P: попередженнÑ: не вдалоÑÑ Ð´Ð¾Ð´Ð°Ñ‚Ð¸ Ñимвол CTF; CTF не буде пов'Ñзано із Ñимволами: %s\n"
-#: ldelfgen.c:454
+#: ldelfgen.c:456
msgid "%F%P: warning: CTF symbol shuffling failed; CTF will not be tied to symbols: %s\n"
msgstr "%F%P: попередженнÑ: не вдалоÑÑ Ð¿Ð¾Ð¼Ñ–Ð½Ñти міÑцÑми Ñимволи CTF; CTF не буде пов'Ñзано із Ñимволами: %s\n"
@@ -287,7 +291,7 @@ msgstr "%F%P:%pS %% на нуль\n"
msgid "%F%P:%pS / by zero\n"
msgstr "%F%P:%pS / на нуль\n"
-#: ldexp.c:737 ldlang.c:3982 ldmain.c:1269 earm_wince_pe.c:1804 earmpe.c:1804
+#: ldexp.c:737 ldlang.c:4011 ldmain.c:1271 earm_wince_pe.c:1804 earmpe.c:1804
#: ei386pe.c:1804 ei386pe_posix.c:1804 ei386pep.c:1699 emcorepe.c:1804
#: eshpe.c:1804
msgid "%F%P: bfd_link_hash_lookup failed: %E\n"
@@ -337,7 +341,7 @@ msgstr "%F%P:%s: не вдалоÑÑ Ñтворити хеш\n"
msgid "%F%P:%pS: nonconstant expression for %s\n"
msgstr "%F%P:%pS: неÑталий вираз Ð´Ð»Ñ %s\n"
-#: ldexp.c:1670 ldlang.c:1279 ldlang.c:3464 ldlang.c:7945
+#: ldexp.c:1670 ldlang.c:1279 ldlang.c:3493 ldlang.c:8066
msgid "%F%P: can not create hash table: %E\n"
msgstr "%F%P: не вдалоÑÑ Ñтворити таблицю хешів: %E\n"
@@ -362,7 +366,9 @@ msgstr "%F%P: Ñпроба Ñтатичного ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð¸Ð½Ð
msgid "%P: cannot find %s (%s): %E\n"
msgstr "%P: не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ %s (%s): %E\n"
-#: ldfile.c:410
+#. We ignore the return status of the script
+#. and always print the error message.
+#: ldfile.c:410 ldfile.c:494 ldfile.c:498
msgid "%P: cannot find %s: %E\n"
msgstr "%P: не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ %s: %E\n"
@@ -370,24 +376,18 @@ msgstr "%P: не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ %s: %E\n"
msgid "%P: cannot find %s inside %s\n"
msgstr "%P: не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ %s у %s\n"
-#: ldfile.c:477 ldmain.c:1449
+#: ldfile.c:477 ldmain.c:1451
msgid "%P: About to run error handling script '%s' with arguments: '%s' '%s'\n"
msgstr "%P: зараз запуÑтимо Ñкрипт обробки помилок «%s» із такими аргументами: «%s» «%s»\n"
-#: ldfile.c:481 ldmain.c:1453
+#: ldfile.c:481 ldmain.c:1455
msgid "error handling script"
msgstr "Ñкрипт обробки помилок"
-#: ldfile.c:487 ldmain.c:1459
+#: ldfile.c:487 ldmain.c:1461
msgid "%P: Failed to run error handling script '%s', reason: "
msgstr "%P: не вдалоÑÑ Ð·Ð°Ð¿ÑƒÑтити Ñкрипт обробки помилок «%s», причина: "
-#. We ignore the return status of the script
-#. and always print the error message.
-#: ldfile.c:494 ldfile.c:498
-msgid "%P: cannot find %s\n"
-msgstr "%P: не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ %s\n"
-
#: ldfile.c:508
msgid "%P: note to link with %s use -l:%s or rename it to lib%s\n"
msgstr "%P: зауважте, що Ð´Ð»Ñ Ð¿Ð¾Ð²'ÑÐ·ÑƒÐ²Ð°Ð½Ð½Ñ %s Ñлід ÑкориÑтатиÑÑ -l:%s або перейменувати його на lib%s\n"
@@ -512,139 +512,143 @@ msgstr "%P:%pS: попередженнÑ: --enable-non-contiguous-regions роб
msgid "%P:%pS: warning: --enable-non-contiguous-regions may change behaviour for section `%pA' from '%pB' (assigned to %pA, but additional match: %pA)\n"
msgstr "%P:%pS: попередженнÑ: --enable-non-contiguous-regions може змінити поведінку розділу «%pA» з «%pB» (призначено до %pA, але Ñ” додаткова відповідніÑÑ‚ÑŒ: %pA)\n"
-#: ldlang.c:3050
+#: ldlang.c:3063
msgid "%P: %pB: file not recognized: %E; matching formats:"
msgstr "%P: %pB: файл не розпізнано: %E; відповідні формати:"
-#: ldlang.c:3058
+#: ldlang.c:3071
msgid "%F%P: %pB: file not recognized: %E\n"
msgstr "%F%P: %pB: файл не розпізнано: %E\n"
-#: ldlang.c:3131
+#: ldlang.c:3144
msgid "%F%P: %pB: member %pB in archive is not an object\n"
msgstr "%F%P: %pB: елемент %pB у архіві не є об’єктом\n"
-#: ldlang.c:3434
+#: ldlang.c:3415
+msgid "%F%P: input file '%s' is the same as output file\n"
+msgstr "%F%P: файл вхідних даних «%s» збігаєтьÑÑ Ñ–Ð· файлом Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ…\n"
+
+#: ldlang.c:3463
msgid "%P: warning: could not find any targets that match endianness requirement\n"
msgstr "%P: попередженнÑ: не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ жодних призначень, Ñкі б відповідали вимозі щодо порÑдку байтів\n"
-#: ldlang.c:3448
+#: ldlang.c:3477
msgid "%F%P: target %s not found\n"
msgstr "%F%P: Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ %s не знайдено\n"
-#: ldlang.c:3450
+#: ldlang.c:3479
msgid "%F%P: cannot open output file %s: %E\n"
msgstr "%F%P: не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл вихідних даних %s: %E\n"
-#: ldlang.c:3456
+#: ldlang.c:3485
msgid "%F%P: %s: can not make object file: %E\n"
msgstr "%F%P:%s: не вдалоÑÑ Ñтворити об’єктний файл: %E\n"
-#: ldlang.c:3460
+#: ldlang.c:3489
msgid "%F%P: %s: can not set architecture: %E\n"
msgstr "%F%P:%s: не вдалоÑÑ Ð²Ñтановити архітектуру: %E\n"
-#: ldlang.c:3640
+#: ldlang.c:3669
msgid "%P: warning: %s contains output sections; did you forget -T?\n"
msgstr "%P: попередженнÑ: %s міÑтить розділи Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ…; не забули параметр -T?\n"
-#: ldlang.c:3687
+#: ldlang.c:3716
#, c-format
msgid "%s: %s\n"
msgstr "%s: %s\n"
-#: ldlang.c:3687
+#: ldlang.c:3716
msgid "CTF warning"
msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ CTF"
-#: ldlang.c:3687
+#: ldlang.c:3716
msgid "CTF error"
msgstr "помилка CTF"
-#: ldlang.c:3693
+#: ldlang.c:3722
#, c-format
msgid "CTF error: cannot get CTF errors: `%s'\n"
msgstr "Помилка CTF: не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ помилки CTF: «%s»\n"
-#: ldlang.c:3727
+#: ldlang.c:3756
msgid "%P: warning: CTF section in %pB not loaded; its types will be discarded: %s\n"
msgstr "%P: попередженнÑ: розділ CTF у %pB не завантажено; його типи буде відкинуто: %s\n"
-#: ldlang.c:3756
+#: ldlang.c:3785
msgid "%P: warning: CTF output not created: `%s'\n"
msgstr "%P: попередженнÑ: дані CTF не виведено: «%s»\n"
-#: ldlang.c:3799
+#: ldlang.c:3828
msgid "%P: warning: CTF section in %pB cannot be linked: `%s'\n"
msgstr "%P: попередженнÑ: розділ CTF у %pB не може бути Ñкомпоновано: «%s»\n"
-#: ldlang.c:3819
+#: ldlang.c:3848
msgid "%P: warning: CTF linking failed; output will have no CTF section: %s\n"
msgstr "%P: попередженнÑ: не вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ð· CTF; у виведених даних не буде розділу CTF: %s\n"
-#: ldlang.c:3890
+#: ldlang.c:3919
msgid "%P: warning: CTF section emission failed; output will have no CTF section: %s\n"
msgstr "%P: попередженнÑ: не вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ CTF; у виведених даних не буде розділу CTF: %s\n"
-#: ldlang.c:3929
+#: ldlang.c:3958
msgid "%P: warning: CTF section in %pB not linkable: %P was built without support for CTF\n"
msgstr "%P: попередженнÑ: розділ CTF у %pB Ñ” непридатним до компонуваннÑ: %P було зібрано без підтримки CTF\n"
-#: ldlang.c:4067
+#: ldlang.c:4096
msgid "%X%P: required symbol `%s' not defined\n"
msgstr "%X%P: обов’Ñзковий Ñимвол «%s» не визначено\n"
-#: ldlang.c:4362
+#: ldlang.c:4394
msgid "warning: INSERT statement in linker script is incompatible with --enable-non-contiguous-regions.\n"
msgstr "попередженнÑ: інÑÑ‚Ñ€ÑƒÐºÑ†Ñ–Ñ INSERT у Ñкрипті компонувальника Ñ” неÑуміÑною із --enable-non-contiguous-regions.\n"
-#: ldlang.c:4375
+#: ldlang.c:4407
msgid "%F%P: %s not found for insert\n"
msgstr "%F%P: не знайдено %s Ð´Ð»Ñ Ð²ÑтавленнÑ\n"
-#: ldlang.c:4615
+#: ldlang.c:4647
msgid " load address 0x%V"
msgstr " адреÑа Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ 0x%V"
-#: ldlang.c:4848
+#: ldlang.c:4880
msgid "%W (size before relaxing)\n"
msgstr "%W (розмір до впорÑдкуваннÑ)\n"
-#: ldlang.c:4941
+#: ldlang.c:4973
#, c-format
msgid "Address of section %s set to "
msgstr "ÐдреÑу розділу %s вÑтановлено у Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ "
-#: ldlang.c:5139
+#: ldlang.c:5171
#, c-format
msgid "Fail with %d\n"
msgstr "Помилка з %d\n"
-#: ldlang.c:5352
+#: ldlang.c:5384
msgid "%F%P: Output section '%s' not large enough for the linker-created stubs section '%s'.\n"
msgstr "%F%P: розділ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Â«%s» Ñ” недоÑтатньо великим Ð´Ð»Ñ Ñтвореного компонувальником фіктивного розділу «%s».\n"
-#: ldlang.c:5357
+#: ldlang.c:5389
msgid "%F%P: Relaxation not supported with --enable-non-contiguous-regions (section '%s' would overflow '%s' after it changed size).\n"
msgstr "%F%P: підтримки оптимізації разом із --enable-non-contiguous-regions не передбачено (розділ «%s» переповнить «%s» піÑÐ»Ñ Ð·Ð¼Ñ–Ð½Ð¸ розмірів).\n"
-#: ldlang.c:5466
+#: ldlang.c:5498
msgid "%X%P: section %s VMA wraps around address space\n"
msgstr "%X%P: розділ VMA %s згортає проÑÑ‚Ñ–Ñ€ адреÑ\n"
-#: ldlang.c:5472
+#: ldlang.c:5504
msgid "%X%P: section %s LMA wraps around address space\n"
msgstr "%X%P: розділ LMA %s згортає проÑÑ‚Ñ–Ñ€ адреÑ\n"
-#: ldlang.c:5524
+#: ldlang.c:5556
msgid "%X%P: section %s LMA [%V,%V] overlaps section %s LMA [%V,%V]\n"
msgstr "%X%P: розділ LMA %s [%V,%V], перекриваєтьÑÑ Ð· розділом LMA %s [%V,%V]\n"
-#: ldlang.c:5568
+#: ldlang.c:5600
msgid "%X%P: section %s VMA [%V,%V] overlaps section %s VMA [%V,%V]\n"
msgstr "%X%P: розділ VMA %s [%V,%V], перекриваєтьÑÑ Ð· розділом VMA %s [%V,%V]\n"
-#: ldlang.c:5591
+#: ldlang.c:5623
msgid "%X%P: region `%s' overflowed by %lu byte\n"
msgid_plural "%X%P: region `%s' overflowed by %lu bytes\n"
msgstr[0] "%X%P: ділÑнку «%s» переповнено на %ld байт\n"
@@ -652,87 +656,87 @@ msgstr[1] "%X%P: ділÑнку «%s» переповнено на %ld байтÐ
msgstr[2] "%X%P: ділÑнку «%s» переповнено на %ld байтів\n"
msgstr[3] "%X%P: ділÑнку «%s» переповнено на %ld байт\n"
-#: ldlang.c:5616
+#: ldlang.c:5648
msgid "%X%P: address 0x%v of %pB section `%s' is not within region `%s'\n"
msgstr "%X%P: адреÑа 0x%v розділу %pB «%s» не лежить у ділÑнці «%s»\n"
-#: ldlang.c:5627
+#: ldlang.c:5659
msgid "%X%P: %pB section `%s' will not fit in region `%s'\n"
msgstr "%X%P: розділ %pB «%s» не вміÑтитьÑÑ Ñƒ ділÑнці «%s»\n"
-#: ldlang.c:5713
+#: ldlang.c:5745
msgid "%F%P:%pS: non constant or forward reference address expression for section %s\n"
msgstr "%F%P: %pS: не Ñталий вираз адреÑи або вираз з випереджувальним поÑиланнÑм Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %s\n"
-#: ldlang.c:5738
+#: ldlang.c:5770
msgid "%X%P: internal error on COFF shared library section %s\n"
msgstr "%X%P: Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° у розділі бібліотеки Ñпільного викориÑÑ‚Ð°Ð½Ð½Ñ COFF, %s\n"
-#: ldlang.c:5796
+#: ldlang.c:5828
msgid "%F%P: error: no memory region specified for loadable section `%s'\n"
msgstr "%F%P: помилка: Ð´Ð»Ñ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÑƒÐ²Ð°Ð½Ð¾Ð³Ð¾ розділу «%s» не вказано ділÑнки пам’ÑÑ‚Ñ–\n"
-#: ldlang.c:5800
+#: ldlang.c:5832
msgid "%P: warning: no memory region specified for loadable section `%s'\n"
msgstr "%P: попередженнÑ: у завантажуваному розділі «%s» не вказано ділÑнки пам’ÑÑ‚Ñ–\n"
-#: ldlang.c:5834
+#: ldlang.c:5866
msgid "%P: warning: start of section %s changed by %ld\n"
msgstr "%P: попередженнÑ: початок розділу %s змінено на %ld\n"
-#: ldlang.c:5926
+#: ldlang.c:5958
msgid "%P: warning: dot moved backwards before `%s'\n"
msgstr "%P: попередженнÑ: dot переÑунуто назад до «%s»\n"
-#: ldlang.c:6107
+#: ldlang.c:6139
msgid "%F%P: can't relax section: %E\n"
msgstr "%F%P: не вдалоÑÑ Ð²Ð¿Ð¾Ñ€Ñдкувати розділ: %E\n"
-#: ldlang.c:6528
+#: ldlang.c:6603
msgid "%F%P: invalid data statement\n"
msgstr "%F%P: некоректне Ð·Ð°Ð´Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ…\n"
-#: ldlang.c:6561
+#: ldlang.c:6636
msgid "%F%P: invalid reloc statement\n"
msgstr "%F%P: некоректна Ð·Ð°Ð´Ð°Ð½Ð½Ñ Ð¿ÐµÑ€ÐµÑуваннÑ\n"
-#: ldlang.c:6941
+#: ldlang.c:7053
msgid "%F%P: --gc-sections requires a defined symbol root specified by -e or -u\n"
msgstr "%F%P: --gc-sections потребує визначеного кореневого Ñимволу, вказаного за допомогою -e або -u\n"
-#: ldlang.c:6966
+#: ldlang.c:7078
msgid "%F%P: %s: can't set start address\n"
msgstr "%F%P:%s: не вдалоÑÑ Ð²Ñтановити початкову адреÑу\n"
-#: ldlang.c:6979 ldlang.c:6997
+#: ldlang.c:7091 ldlang.c:7110
msgid "%F%P: can't set start address\n"
msgstr "%F%P: не вдалоÑÑ Ð²Ñтановити початкову адреÑу\n"
-#: ldlang.c:6991
+#: ldlang.c:7104
msgid "%P: warning: cannot find entry symbol %s; defaulting to %V\n"
msgstr "%P: попередженнÑ: не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ вхідних Ñимвол %s; типовим визначено %V\n"
-#: ldlang.c:7002
+#: ldlang.c:7115 ldlang.c:7123
msgid "%P: warning: cannot find entry symbol %s; not setting start address\n"
msgstr "%P: попередженнÑ: не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ вхідний Ñимвол %s; не кажучи вже про початкову адреÑу\n"
-#: ldlang.c:7059
+#: ldlang.c:7179
msgid "%F%P: relocatable linking with relocations from format %s (%pB) to format %s (%pB) is not supported\n"
msgstr "%F%P: підтримки придатного до переÑÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ð· переÑуваннÑми з формату %s (%pB) до формату %s (%pB) не передбачено\n"
-#: ldlang.c:7069
+#: ldlang.c:7189
msgid "%X%P: %s architecture of input file `%pB' is incompatible with %s output\n"
msgstr "%X%P: архітектура %s файла вхідних даних, «%pB», Ñ” неÑуміÑною з виведеннÑм даних %s\n"
-#: ldlang.c:7093
+#: ldlang.c:7213
msgid "%X%P: failed to merge target specific data of file %pB\n"
msgstr "%X%P: не вдалоÑÑ Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ñ‚Ð¸ Ñпецифічні Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ñ– файла %pB\n"
-#: ldlang.c:7164
+#: ldlang.c:7284
msgid "%F%P: could not define common symbol `%pT': %E\n"
msgstr "%F%P: не вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ типовий Ñимвол «%pT»: %E\n"
-#: ldlang.c:7176
+#: ldlang.c:7296
msgid ""
"\n"
"Allocating common symbols\n"
@@ -740,7 +744,7 @@ msgstr ""
"\n"
"Ð Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¸Ñ… Ñимволів\n"
-#: ldlang.c:7177
+#: ldlang.c:7297
msgid ""
"Common symbol size file\n"
"\n"
@@ -748,83 +752,83 @@ msgstr ""
"Загальний Ñимвол розмір файл\n"
"\n"
-#: ldlang.c:7250
+#: ldlang.c:7370
msgid "%X%P: error: unplaced orphan section `%pA' from `%pB'\n"
msgstr "%X%P: помилка: нерозміщений оÑиротілий розділ «%pA» з «%pB».\n"
-#: ldlang.c:7268
+#: ldlang.c:7388
msgid "%P: warning: orphan section `%pA' from `%pB' being placed in section `%s'\n"
msgstr "%P: попередженнÑ: оÑиротілий розділ «%pA» з «%pB» розташовуєтьÑÑ Ñƒ розділі «%s»\n"
-#: ldlang.c:7358
+#: ldlang.c:7478
msgid "%F%P: invalid character %c (%d) in flags\n"
msgstr "%F%P: некоректний Ñимвол %c (%d) у прапорцÑÑ…\n"
-#: ldlang.c:7467
+#: ldlang.c:7587
msgid "%F%P:%pS: error: align with input and explicit align specified\n"
msgstr "%F%P:%pS: помилка: вказано Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ Ð·Ð° вхідними даними та Ñвне вирівнюваннÑ\n"
-#: ldlang.c:7981
+#: ldlang.c:8102
msgid "%F%P: %s: plugin reported error after all symbols read\n"
msgstr "%F%P: %s: додатком піÑÐ»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð²ÑÑ–Ñ… Ñимволів повідомлено про помилку\n"
-#: ldlang.c:8421
+#: ldlang.c:8538
msgid "%F%P: multiple STARTUP files\n"
msgstr "%F%P: декілька файлів STARTUP\n"
-#: ldlang.c:8467
+#: ldlang.c:8584
msgid "%X%P:%pS: section has both a load address and a load region\n"
msgstr "%X%P:%pS: у розділі Ñ” одразу адреÑа Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñ– ділÑнка завантаженнÑ\n"
-#: ldlang.c:8573
+#: ldlang.c:8690
msgid "%X%P:%pS: PHDRS and FILEHDR are not supported when prior PT_LOAD headers lack them\n"
msgstr "%X%P:%pS: підтримки PHDRS Ñ– FILEHDR не передбачено, Ñкщо у попередніх заголовках PT_LOAD Ñ—Ñ… немає\n"
-#: ldlang.c:8646
+#: ldlang.c:8763
msgid "%F%P: no sections assigned to phdrs\n"
msgstr "%F%P: з p-заголовками не пов’Ñзано жодних розділів\n"
-#: ldlang.c:8684
+#: ldlang.c:8801
msgid "%F%P: bfd_record_phdr failed: %E\n"
msgstr "%F%P: помилка bfd_record_phdr: %E\n"
-#: ldlang.c:8704
+#: ldlang.c:8821
msgid "%X%P: section `%s' assigned to non-existent phdr `%s'\n"
msgstr "%X%P: розділ «%s» пов’Ñзано з p-заголовком, Ñкого не Ñ–Ñнує «%s»\n"
-#: ldlang.c:9127
+#: ldlang.c:9244
msgid "%X%P: unknown language `%s' in version information\n"
msgstr "%X%P: невідома мова, «%s», у даних щодо верÑÑ–Ñ—\n"
-#: ldlang.c:9272
+#: ldlang.c:9389
msgid "%X%P: anonymous version tag cannot be combined with other version tags\n"
msgstr "%X%P: анонімний теґ верÑÑ–Ñ— не може бути поєднано з іншими теґами верÑій\n"
-#: ldlang.c:9281
+#: ldlang.c:9398
msgid "%X%P: duplicate version tag `%s'\n"
msgstr "%X%P: Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ñ‚ÐµÒ‘Ñƒ version «%s»\n"
-#: ldlang.c:9302 ldlang.c:9311 ldlang.c:9329 ldlang.c:9339
+#: ldlang.c:9419 ldlang.c:9428 ldlang.c:9446 ldlang.c:9456
msgid "%X%P: duplicate expression `%s' in version information\n"
msgstr "%X%P: Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð²Ð¸Ñ€Ð°Ð·Ñƒ «%s» у даних щодо верÑÑ–Ñ—\n"
-#: ldlang.c:9379
+#: ldlang.c:9496
msgid "%X%P: unable to find version dependency `%s'\n"
msgstr "%X%P: не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ залежніÑÑ‚ÑŒ за верÑÑ–Ñми «%s»\n"
-#: ldlang.c:9402
+#: ldlang.c:9519
msgid "%X%P: unable to read .exports section contents\n"
msgstr "%X%P: не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ вміÑÑ‚ розділу .exports\n"
-#: ldlang.c:9448
+#: ldlang.c:9565
msgid "%P: invalid origin for memory region %s\n"
msgstr "%P: некоректне Ð¿Ð¾Ñ…Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ Ð¾Ð±Ð»Ð°ÑÑ‚Ñ– пам’ÑÑ‚Ñ– %s\n"
-#: ldlang.c:9460
+#: ldlang.c:9577
msgid "%P: invalid length for memory region %s\n"
msgstr "%P: некоректна довжина облаÑÑ‚Ñ– пам’ÑÑ‚Ñ– %s\n"
-#: ldlang.c:9572
+#: ldlang.c:9689
msgid "%X%P: unknown feature `%s'\n"
msgstr "%X%P: невідома можливіÑÑ‚ÑŒ «%s»\n"
@@ -840,90 +844,90 @@ msgstr "%F%P: критична помилка: невідповідніÑÑ‚ÑŒ д
msgid "%X%P: can't set BFD default target to `%s': %E\n"
msgstr "%X%P: не вдалоÑÑ Ð²Ñтановити типове Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ BFD у «%s»: %E\n"
-#: ldmain.c:403
+#: ldmain.c:405
msgid "built in linker script"
msgstr "зібрано у Ñкрипті компонувальника"
-#: ldmain.c:413
+#: ldmain.c:415
msgid "using external linker script:"
msgstr "за допомогою зовнішнього Ñкрипту компонуваннÑ:"
-#: ldmain.c:415
+#: ldmain.c:417
msgid "using internal linker script:"
msgstr "за допомогою внутрішнього Ñкрипту компонуваннÑ:"
-#: ldmain.c:462
+#: ldmain.c:464
msgid "%F%P: --no-define-common may not be used without -shared\n"
msgstr "%F%P: --no-define-common не можна викориÑтовувати без -shared\n"
-#: ldmain.c:468
+#: ldmain.c:470
msgid "%F%P: no input files\n"
msgstr "%F%P: немає файлів вхідних даних\n"
-#: ldmain.c:472
+#: ldmain.c:474
msgid "%P: mode %s\n"
msgstr "%P: режим %s\n"
-#: ldmain.c:488 ends32belf.c:427 ends32belf16m.c:427 ends32belf_linux.c:560
-#: ends32elf.c:427 ends32elf16m.c:427 ends32elf_linux.c:560
+#: ldmain.c:490 ends32belf.c:429 ends32belf16m.c:429 ends32belf_linux.c:562
+#: ends32elf.c:429 ends32elf16m.c:429 ends32elf_linux.c:562
msgid "%F%P: cannot open map file %s: %E\n"
msgstr "%F%P: не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл карти %s: %E\n"
-#: ldmain.c:541
+#: ldmain.c:543
msgid "%P: link errors found, deleting executable `%s'\n"
msgstr "%P: виÑвлено помилки компонуваннÑ, вилучаємо виконуваний файл «%s»\n"
-#: ldmain.c:550
+#: ldmain.c:552
msgid "%F%P: %pB: final close failed: %E\n"
msgstr "%F%P: %pB: Ñпроба оÑтаточного Ð·Ð°ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Ð·Ð°Ð·Ð½Ð°Ð»Ð° невдачі: %E\n"
-#: ldmain.c:577
+#: ldmain.c:579
msgid "%F%P: unable to open for source of copy `%s'\n"
msgstr "%F%P: не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ Ð´Ð»Ñ Ð´Ð¶ÐµÑ€ÐµÐ»Ð° копії «%s»\n"
-#: ldmain.c:580
+#: ldmain.c:582
msgid "%F%P: unable to open for destination of copy `%s'\n"
msgstr "%F%P: не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÐºÐ¾Ð¿Ñ–Ñ— «%s»\n"
-#: ldmain.c:587
+#: ldmain.c:589
msgid "%P: error writing file `%s'\n"
msgstr "%P: помилка під Ñ‡Ð°Ñ Ð¿Ñ€Ð¾Ð±Ð¸ запиÑу файла «%s»\n"
-#: ldmain.c:592 pe-dll.c:1965
+#: ldmain.c:594 pe-dll.c:1966
#, c-format
msgid "%P: error closing file `%s'\n"
msgstr "%P: помилка під Ñ‡Ð°Ñ Ñпроби закрити файл «%s»\n"
-#: ldmain.c:606
+#: ldmain.c:608
#, c-format
msgid "%s: total time in link: %ld.%06ld\n"
msgstr "%s: загальний чаÑ, витрачений на компонуваннÑ: %ld.%06ld\n"
-#: ldmain.c:693
+#: ldmain.c:695
msgid "%F%P: missing argument to -m\n"
msgstr "%F%P: не виÑтачає аргументу до -m\n"
-#: ldmain.c:747 ldmain.c:764 ldmain.c:784 ldmain.c:816 pe-dll.c:1396
+#: ldmain.c:749 ldmain.c:766 ldmain.c:786 ldmain.c:818 pe-dll.c:1397
msgid "%F%P: bfd_hash_table_init failed: %E\n"
msgstr "%F%P: помилка bfd_hash_table_init: %E\n"
-#: ldmain.c:751 ldmain.c:768 ldmain.c:788
+#: ldmain.c:753 ldmain.c:770 ldmain.c:790
msgid "%F%P: bfd_hash_lookup failed: %E\n"
msgstr "%F%P: помилка bfd_hash_lookup: %E\n"
-#: ldmain.c:802
+#: ldmain.c:804
msgid "%X%P: error: duplicate retain-symbols-file\n"
msgstr "%X%P: помилка: Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ retain-symbols-file\n"
-#: ldmain.c:846
+#: ldmain.c:848
msgid "%F%P: bfd_hash_lookup for insertion failed: %E\n"
msgstr "%F%P: Ñпроба викориÑÑ‚Ð°Ð½Ð½Ñ bfd_hash_lookup Ð´Ð»Ñ Ð²ÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð½Ñ Ð·Ð°Ð·Ð½Ð°Ð»Ð° невдачі: %E\n"
-#: ldmain.c:851
+#: ldmain.c:853
msgid "%P: `-retain-symbols-file' overrides `-s' and `-S'\n"
msgstr "%P: «-retain-symbols-file» має вищий пріоритет «-s» і «-S»\n"
-#: ldmain.c:967
+#: ldmain.c:969
msgid ""
"Archive member included to satisfy reference by file (symbol)\n"
"\n"
@@ -931,139 +935,139 @@ msgstr ""
"Включено елемент архіву Ð´Ð»Ñ Ð·Ð°Ð´Ð¾Ð²Ð¾Ð»ÐµÐ½Ð½Ñ Ð¿Ð¾ÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° файл (Ñимвол)\n"
"\n"
-#: ldmain.c:1077
+#: ldmain.c:1079
msgid "%P: %C: warning: multiple definition of `%pT'"
msgstr "%P: %C: попередженнÑ: декілька визначень «%pT»"
-#: ldmain.c:1080
+#: ldmain.c:1082
msgid "%X%P: %C: multiple definition of `%pT'"
msgstr "%X%P: %C: повторне Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«%pT»"
-#: ldmain.c:1083
+#: ldmain.c:1085
msgid "; %D: first defined here"
msgstr "; %D: тут визначено вперше"
-#: ldmain.c:1088
+#: ldmain.c:1090
msgid "%P: disabling relaxation; it will not work with multiple definitions\n"
msgstr "%P: вимикаємо оптимізацію: вона не працюватиме з декількома визначеннÑми\n"
-#: ldmain.c:1141
+#: ldmain.c:1143
msgid "%P: %pB: warning: definition of `%pT' overriding common from %pB\n"
msgstr "%P: %pB: попередженнÑ: Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«%pT», що перевизначає «common» з %pB\n"
-#: ldmain.c:1145
+#: ldmain.c:1147
msgid "%P: %pB: warning: definition of `%pT' overriding common\n"
msgstr "%P: %pB: попередженнÑ: Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«%pT», що перевизначає «common»\n"
-#: ldmain.c:1154
+#: ldmain.c:1156
msgid "%P: %pB: warning: common of `%pT' overridden by definition from %pB\n"
msgstr "%P: %pB: попередженнÑ: common «%pT» перевизначаєтьÑÑ Ð· %pB\n"
-#: ldmain.c:1158
+#: ldmain.c:1160
msgid "%P: %pB: warning: common of `%pT' overridden by definition\n"
msgstr "%P: %pB: попередженнÑ: common «%pT» перевизначаєтьÑÑ\n"
-#: ldmain.c:1167
+#: ldmain.c:1169
msgid "%P: %pB: warning: common of `%pT' overridden by larger common from %pB\n"
msgstr "%P: %pB: попередженнÑ: common «%pT» перевизначаєтьÑÑ Ð±Ñ–Ð»ÑŒÑˆÐ¸Ð¼ common\n"
-#: ldmain.c:1171
+#: ldmain.c:1173
msgid "%P: %pB: warning: common of `%pT' overridden by larger common\n"
msgstr "%P: %pB: попередженнÑ: common «%pT» перевизначаєтьÑÑ Ð±Ñ–Ð»ÑŒÑˆÐ¸Ð¼ common\n"
-#: ldmain.c:1178
+#: ldmain.c:1180
msgid "%P: %pB: warning: common of `%pT' overriding smaller common from %pB\n"
msgstr "%P: %pB: попередженнÑ: common «%pT» перевизначає менший common з %pB\n"
-#: ldmain.c:1182
+#: ldmain.c:1184
msgid "%P: %pB: warning: common of `%pT' overriding smaller common\n"
msgstr "%P: %pB: попередженнÑ: common «%pT» перевизначає менший common\n"
-#: ldmain.c:1189
+#: ldmain.c:1191
msgid "%P: %pB and %pB: warning: multiple common of `%pT'\n"
msgstr "%P: %pB Ñ– %pB: попередженнÑ: декілька common «%pT»\n"
-#: ldmain.c:1192
+#: ldmain.c:1194
msgid "%P: %pB: warning: multiple common of `%pT'\n"
msgstr "%P: %pB: попередженнÑ: декілька common «%pT»\n"
-#: ldmain.c:1211 ldmain.c:1247
+#: ldmain.c:1213 ldmain.c:1249
msgid "%P: warning: global constructor %s used\n"
msgstr "%P: попередженнÑ: викориÑтано загальний конÑтруктор %s\n"
-#: ldmain.c:1257
+#: ldmain.c:1259
msgid "%F%P: BFD backend error: BFD_RELOC_CTOR unsupported\n"
msgstr "%F%P: помилка Ð¼Ð¾Ð´ÑƒÐ»Ñ BFD: підтримки BFD_RELOC_CTOR не передбачено\n"
#. We found a reloc for the symbol we are looking for.
-#: ldmain.c:1329 ldmain.c:1331 ldmain.c:1333 ldmain.c:1341 ldmain.c:1384
+#: ldmain.c:1331 ldmain.c:1333 ldmain.c:1335 ldmain.c:1343 ldmain.c:1386
msgid "warning: "
msgstr "попередженнÑ: "
-#: ldmain.c:1474
+#: ldmain.c:1476
msgid "%X%P: %C: undefined reference to `%pT'\n"
msgstr "%X%P: %C: невизначене поÑÐ¸Ð»Ð°Ð½Ð½Ñ Â«%pT»\n"
-#: ldmain.c:1477
+#: ldmain.c:1479
msgid "%P: %C: warning: undefined reference to `%pT'\n"
msgstr "%P: %C: попередженнÑ: невизначене поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° «%pT»\n"
-#: ldmain.c:1483
+#: ldmain.c:1485
msgid "%X%P: %D: more undefined references to `%pT' follow\n"
msgstr "%X%P: %D: нижче інші невизначені поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° «%pT»\n"
-#: ldmain.c:1486
+#: ldmain.c:1488
msgid "%P: %D: warning: more undefined references to `%pT' follow\n"
msgstr "%P: %D: попередженнÑ: нижче інші невизначені поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° «%pT»\n"
-#: ldmain.c:1497
+#: ldmain.c:1499
msgid "%X%P: %pB: undefined reference to `%pT'\n"
msgstr "%X%P: %pB: невизначене поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° «%pT»\n"
-#: ldmain.c:1500
+#: ldmain.c:1502
msgid "%P: %pB: warning: undefined reference to `%pT'\n"
msgstr "%P: %pB: попередженнÑ: невизначене поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° «%pT»\n"
-#: ldmain.c:1506
+#: ldmain.c:1508
msgid "%X%P: %pB: more undefined references to `%pT' follow\n"
msgstr "%X%P: %pB: нижче інші невизначені поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° «%pT»\n"
-#: ldmain.c:1509
+#: ldmain.c:1511
msgid "%P: %pB: warning: more undefined references to `%pT' follow\n"
msgstr "%P: %pB: попередженнÑ: нижче інші невизначені поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° «%pT»\n"
-#: ldmain.c:1546
+#: ldmain.c:1548
msgid " additional relocation overflows omitted from the output\n"
msgstr " додаткові Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÐµÐ¼Ñ–Ñ‰ÐµÐ½ÑŒ виключено з виведених даних\n"
-#: ldmain.c:1559
+#: ldmain.c:1561
#, c-format
msgid " relocation truncated to fit: %s against undefined symbol `%pT'"
msgstr " переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¾Ð±Ñ€Ñ–Ð·Ð°Ð½Ð¾ за потребою: %s щодо невизначеного Ñимволу «%pT»"
-#: ldmain.c:1565
+#: ldmain.c:1567
#, c-format
msgid " relocation truncated to fit: %s against symbol `%pT' defined in %pA section in %pB"
msgstr " переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¾Ð±Ñ€Ñ–Ð·Ð°Ð½Ð¾ за потребою: %s щодо Ñимволу «%pT», визначеного у розділі %pA у %pB"
-#: ldmain.c:1578
+#: ldmain.c:1580
#, c-format
msgid " relocation truncated to fit: %s against `%pT'"
msgstr " переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¾Ð±Ñ€Ñ–Ð·Ð°Ð½Ð¾ за потребою: %s щодо «%pT»"
-#: ldmain.c:1594
+#: ldmain.c:1596
msgid "%X%H: dangerous relocation: %s\n"
msgstr "%X%H: небезпечне переÑуваннÑ: %s\n"
-#: ldmain.c:1608
+#: ldmain.c:1610
msgid "%X%H: reloc refers to symbol `%pT' which is not being output\n"
msgstr "%X%P: переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾ÑилаєтьÑÑ Ð½Ð° Ñимвол «%pT», Ñкий не виводитьÑÑ\n"
-#: ldmain.c:1642
+#: ldmain.c:1644
msgid "%P: %pB: reference to %s\n"
msgstr "%P: %pB: поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° %s\n"
-#: ldmain.c:1644
+#: ldmain.c:1646
msgid "%P: %pB: definition of %s\n"
msgstr "%P: %pB: Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ %s\n"
@@ -1101,8 +1105,8 @@ msgstr "GNU ld %s\n"
#: ldver.c:42
#, c-format
-msgid "Copyright (C) 2021 Free Software Foundation, Inc.\n"
-msgstr "© Free Software Foundation, Inc., 2021\n"
+msgid "Copyright (C) 2022 Free Software Foundation, Inc.\n"
+msgstr "© Free Software Foundation, Inc., 2022\n"
#: ldver.c:43
#, c-format
@@ -1158,7 +1162,7 @@ msgstr "ÐРХ"
msgid "Set architecture"
msgstr "вÑтановити архітектуру"
-#: lexsup.c:110 lexsup.c:424
+#: lexsup.c:110 lexsup.c:425
msgid "TARGET"
msgstr "ПРИЗÐÐЧЕÐÐЯ"
@@ -1167,8 +1171,8 @@ msgid "Specify target for following input files"
msgstr "Вказати Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð½Ð°Ñтупних файлів вхідних даних"
#: lexsup.c:113 lexsup.c:119 lexsup.c:176 lexsup.c:180 lexsup.c:216
-#: lexsup.c:229 lexsup.c:231 lexsup.c:442 lexsup.c:511 lexsup.c:524
-#: lexsup.c:528
+#: lexsup.c:229 lexsup.c:231 lexsup.c:447 lexsup.c:516 lexsup.c:529
+#: lexsup.c:533
msgid "FILE"
msgstr "ФÐЙЛ"
@@ -1188,8 +1192,8 @@ msgstr "запиÑати файл залежноÑтей"
msgid "Force group members out of groups"
msgstr "примуÑово групувати учаÑників поза групами"
-#: lexsup.c:124 lexsup.c:488 lexsup.c:490 lexsup.c:492 lexsup.c:494
-#: lexsup.c:496 lexsup.c:498
+#: lexsup.c:124 lexsup.c:493 lexsup.c:495 lexsup.c:497 lexsup.c:499
+#: lexsup.c:501 lexsup.c:503
msgid "ADDRESS"
msgstr "ÐДРЕСÐ"
@@ -1397,8 +1401,8 @@ msgstr "Прочитати Ñкрипт компонувальника"
msgid "Read default linker script"
msgstr "Прочитати типовий Ñкрипт компонувальника"
-#: lexsup.c:235 lexsup.c:238 lexsup.c:256 lexsup.c:347 lexsup.c:371
-#: lexsup.c:481 lexsup.c:514 lexsup.c:526 lexsup.c:564 lexsup.c:567
+#: lexsup.c:235 lexsup.c:238 lexsup.c:256 lexsup.c:348 lexsup.c:372
+#: lexsup.c:486 lexsup.c:519 lexsup.c:531 lexsup.c:569 lexsup.c:572
msgid "SYMBOL"
msgstr "СИМВОЛ"
@@ -1446,7 +1450,7 @@ msgstr "не відкидати жодних локальних Ñимволів
msgid "Trace mentions of SYMBOL"
msgstr "ТраÑувати згадки СИМВОЛу"
-#: lexsup.c:258 lexsup.c:444 lexsup.c:446
+#: lexsup.c:258 lexsup.c:449 lexsup.c:451
msgid "PATH"
msgstr "ШЛЯХ"
@@ -1548,133 +1552,133 @@ msgid ""
" in filename invoked by -R or --just-symbols"
msgstr ""
"ЗаборонÑти кратні Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½ÑŒ із Ñимволами, включеними\n"
-" до назви файла, що викликаєтьÑÑ -R або --just-symbols"
+" до назви файла, що викликаєтьÑÑ -R або --just-symbols"
-#: lexsup.c:339
+#: lexsup.c:340
msgid "Generate embedded relocs"
msgstr "Ñтворити вбудовані переÑуваннÑ"
-#: lexsup.c:341
+#: lexsup.c:342
msgid "Treat warnings as errors"
msgstr "вважати Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°Ð¼Ð¸"
-#: lexsup.c:344
+#: lexsup.c:345
msgid "Do not treat warnings as errors (default)"
msgstr "не вважати Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°Ð¼Ð¸ (типова поведінка)"
-#: lexsup.c:347
+#: lexsup.c:348
msgid "Call SYMBOL at unload-time"
msgstr "викликати СИМВОЛ під Ñ‡Ð°Ñ Ð²Ð¸Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ"
-#: lexsup.c:349
+#: lexsup.c:350
msgid "Force generation of file with .exe suffix"
msgstr "примуÑово Ñтворити файл з ÑуфікÑом назви .exe"
-#: lexsup.c:351
+#: lexsup.c:352
msgid "Remove unused sections (on some targets)"
msgstr "вилучити невикориÑтані розділи (Ð´Ð»Ñ Ð´ÐµÑких призначень)"
-#: lexsup.c:354
+#: lexsup.c:355
msgid "Don't remove unused sections (default)"
msgstr "не вилучати невикориÑтаних розділів (типова поведінка)"
-#: lexsup.c:357
+#: lexsup.c:358
msgid "List removed unused sections on stderr"
msgstr "вивеÑти ÑпиÑок вилучених невикориÑтаних розділів до stderr"
-#: lexsup.c:360
+#: lexsup.c:361
msgid "Do not list removed unused sections"
msgstr "не виводити ÑпиÑок вилучених невикориÑтаних розділів"
-#: lexsup.c:363
+#: lexsup.c:364
msgid "Keep exported symbols when removing unused sections"
msgstr "зберігати екÑпортовані Ñимволи під Ñ‡Ð°Ñ Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð½ÐµÐ²Ð¸ÐºÐ¾Ñ€Ð¸Ñтаних розділів"
-#: lexsup.c:366
+#: lexsup.c:367
msgid "Set default hash table size close to <NUMBER>"
msgstr "вÑтановити типовий розмір таблиці хешів близьким до <ЧИСЛО>"
-#: lexsup.c:369
+#: lexsup.c:370
msgid "Print option help"
msgstr "Показати довідку з параметрів"
-#: lexsup.c:371
+#: lexsup.c:372
msgid "Call SYMBOL at load-time"
msgstr "Викликати СИМВОЛ під Ñ‡Ð°Ñ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ"
-#: lexsup.c:373
+#: lexsup.c:374
msgid "FILE/DIR"
msgstr "ФÐЙЛ/КÐТÐЛОГ"
-#: lexsup.c:373
+#: lexsup.c:374
msgid "Write a linker map to FILE or DIR/<outputname>.map"
msgstr "ЗапиÑати карту ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð¾ файла ФÐЙЛ або до файла КÐТÐЛОГ/<назва_результату>.map"
-#: lexsup.c:375
+#: lexsup.c:376
msgid "Do not define Common storage"
msgstr "не визначати Ñховище Common"
-#: lexsup.c:377
+#: lexsup.c:378
msgid "Do not demangle symbol names"
msgstr "не розкодовувати назви Ñимволів"
-#: lexsup.c:379
+#: lexsup.c:380
msgid "Use less memory and more disk I/O"
msgstr "викориÑтовувати менше пам’ÑÑ‚Ñ– Ñ– ширший обмін даними з диÑком"
-#: lexsup.c:381
+#: lexsup.c:382
msgid "Do not allow unresolved references in object files"
msgstr "заборонÑти нерозв’Ñзні поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ñƒ об’єктних файлах"
-#: lexsup.c:384
+#: lexsup.c:385
msgid "Allow unresolved references in shared libraries"
msgstr "дозволÑти нерозв’Ñзні поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ñƒ бібліотеках Ñпільного викориÑтаннÑ"
-#: lexsup.c:388
+#: lexsup.c:389
msgid "Do not allow unresolved references in shared libs"
msgstr "заборонÑти нерозв’Ñзні поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ñƒ бібліотеках Ñпільного викориÑтаннÑ"
-#: lexsup.c:392
+#: lexsup.c:393
msgid "Allow multiple definitions"
msgstr "дозволÑти повторні визначеннÑ"
-#: lexsup.c:396
+#: lexsup.c:397
msgid "SCRIPT"
msgstr "СКРИПТ"
-#: lexsup.c:396
+#: lexsup.c:397
msgid "Provide a script to help with undefined symbol errors"
msgstr "Ðадати Ñкрипт, Ñкий допоможе із помилками, пов'Ñзаними із невизначеними Ñимволами"
-#: lexsup.c:399
+#: lexsup.c:400
msgid "Disallow undefined version"
msgstr "заборонити повторні визначеннÑ"
-#: lexsup.c:401
+#: lexsup.c:402
msgid "Create default symbol version"
msgstr "Ñтворити типову верÑÑ–ÑŽ Ñимволів"
-#: lexsup.c:404
+#: lexsup.c:405
msgid "Create default symbol version for imported symbols"
msgstr "Ñтворити типову верÑÑ–ÑŽ Ñимволів Ð´Ð»Ñ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚Ð¾Ð²Ð°Ð½Ð¸Ñ… Ñимволів"
-#: lexsup.c:407
+#: lexsup.c:408
msgid "Don't warn about mismatched input files"
msgstr "не попереджати про невідповідніÑÑ‚ÑŒ файлів вхідних даних"
-#: lexsup.c:410
+#: lexsup.c:411
msgid "Don't warn on finding an incompatible library"
msgstr "не попереджати про виÑÐ²Ð»ÐµÐ½Ð½Ñ Ð½ÐµÑуміÑних бібліотек"
-#: lexsup.c:413
+#: lexsup.c:414
msgid "Turn off --whole-archive"
msgstr "вимкнути --whole-archive"
-#: lexsup.c:415
+#: lexsup.c:416
msgid "Create an output file even if errors occur"
msgstr "Ñтворити файл виведених даних, навіть Ñкщо трапилиÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸"
-#: lexsup.c:420
+#: lexsup.c:421
msgid ""
"Only use library directories specified on\n"
" the command line"
@@ -1682,147 +1686,151 @@ msgstr ""
"викориÑтовувати лише каталоги бібліотек,\n"
" вказані у командному Ñ€Ñдку"
-#: lexsup.c:424
+#: lexsup.c:425
msgid "Specify target of output file"
msgstr "вказати Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ð° виведених даних"
-#: lexsup.c:427
+#: lexsup.c:428
msgid "Print default output format"
msgstr "вивеÑти дані щодо типового формату виведеннÑ"
-#: lexsup.c:429
+#: lexsup.c:430
msgid "Print current sysroot"
msgstr "вивеÑти поточний sysroot"
-#: lexsup.c:431
+#: lexsup.c:432
msgid "Ignored for Linux compatibility"
msgstr "проігноровано Ð´Ð»Ñ ÑуміÑноÑÑ‚Ñ– з Linux"
-#: lexsup.c:434
+#: lexsup.c:435
msgid "Reduce memory overheads, possibly taking much longer"
msgstr "зменшити ÑÐ¿Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ Ð¿Ð°Ð¼â€™ÑÑ‚Ñ– з можливіÑÑ‚ÑŽ уповільненнÑ"
-#: lexsup.c:437
+#: lexsup.c:439
+msgid "Set the maximum cache size to SIZE bytes"
+msgstr "Ð’Ñтановити Ð´Ð»Ñ Ð¼Ð°ÐºÑимального розміру кешу у байтах Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð ÐžÐ—ÐœÐ†Ð "
+
+#: lexsup.c:442
msgid "Reduce code size by using target specific optimizations"
msgstr "зменшити розмір коду викориÑтаннÑм Ñпецифічних Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¾Ð¿Ñ‚Ð¸Ð¼Ñ–Ð·Ð°Ñ†Ñ–Ð¹"
-#: lexsup.c:439
+#: lexsup.c:444
msgid "Do not use relaxation techniques to reduce code size"
msgstr "не викориÑтовувати методики оптимізації Ð´Ð»Ñ Ð·Ð¼ÐµÐ½ÑˆÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñ–Ð² коду"
-#: lexsup.c:442
+#: lexsup.c:447
msgid "Keep only symbols listed in FILE"
msgstr "зберегти лише Ñимволи, перелічені у файлі ФÐЙЛ"
-#: lexsup.c:444
+#: lexsup.c:449
msgid "Set runtime shared library search path"
msgstr "вÑтановити шлÑÑ… пошуку бібліотеки Ñпільного викориÑÑ‚Ð°Ð½Ð½Ñ Ð· динамічним завантаженнÑм"
-#: lexsup.c:446
+#: lexsup.c:451
msgid "Set link time shared library search path"
msgstr "вÑтановити шлÑÑ… пошуку бібліотеки Ñпільного викориÑÑ‚Ð°Ð½Ð½Ñ Ð½Ð° Ñ‡Ð°Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ"
-#: lexsup.c:449
+#: lexsup.c:454
msgid "Create a shared library"
msgstr "Ñтворити бібліотеку Ñпільного викориÑтаннÑ"
-#: lexsup.c:453
+#: lexsup.c:458
msgid "Create a position independent executable"
msgstr "Ñтворити виконуваний файл з незалежним позиціюваннÑм"
-#: lexsup.c:457
+#: lexsup.c:462
msgid "Create a position dependent executable (default)"
msgstr "Створити позиційно незалежний виконуваний файл (типова поведінка)"
-#: lexsup.c:459
+#: lexsup.c:464
msgid "[=ascending|descending]"
msgstr "[=ascending|descending]"
-#: lexsup.c:460
+#: lexsup.c:465
msgid "Sort common symbols by alignment [in specified order]"
msgstr "впорÑдкувати загальні Ñимволи за вирівнюваннÑм [у вказаному порÑдку]"
-#: lexsup.c:465
+#: lexsup.c:470
msgid "name|alignment"
msgstr "name|alignment"
-#: lexsup.c:466
+#: lexsup.c:471
msgid "Sort sections by name or maximum alignment"
msgstr "впорÑдкувати розділи за назвою або макÑимальним вирівнюваннÑм"
-#: lexsup.c:468
+#: lexsup.c:473
msgid "COUNT"
msgstr "КІЛЬКІСТЬ"
-#: lexsup.c:468
+#: lexsup.c:473
msgid "How many tags to reserve in .dynamic section"
msgstr "кількіÑÑ‚ÑŒ теґів, міÑце Ð´Ð»Ñ Ñких Ñлід зарезервувати у розділі .dynamic"
-#: lexsup.c:471
+#: lexsup.c:476
msgid "[=SIZE]"
msgstr "[=РОЗМІР]"
-#: lexsup.c:471
+#: lexsup.c:476
msgid "Split output sections every SIZE octets"
msgstr "розділÑти розділи виведених даних кожні РОЗМІР октет"
-#: lexsup.c:474
+#: lexsup.c:479
msgid "[=COUNT]"
msgstr "[=КІЛЬКІСТЬ]"
-#: lexsup.c:474
+#: lexsup.c:479
msgid "Split output sections every COUNT relocs"
msgstr "розділÑти розділи виведених даних кожні КІЛЬКІСТЬ переміщень"
-#: lexsup.c:477
+#: lexsup.c:482
msgid "Print memory usage statistics"
msgstr "вивеÑти ÑтатиÑтичні дані щодо викориÑÑ‚Ð°Ð½Ð½Ñ Ð¿Ð°Ð¼â€™ÑÑ‚Ñ–"
-#: lexsup.c:479
+#: lexsup.c:484
msgid "Display target specific options"
msgstr "вивеÑти параметри, Ñпецифічні Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ"
-#: lexsup.c:481
+#: lexsup.c:486
msgid "Do task level linking"
msgstr "виконати ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð° рівні завдань"
-#: lexsup.c:483
+#: lexsup.c:488
msgid "Use same format as native linker"
msgstr "викориÑтовувати той Ñамий формат, що Ñ– природний компонувальник"
-#: lexsup.c:485
+#: lexsup.c:490
msgid "SECTION=ADDRESS"
msgstr "РОЗДІЛ=ÐДРЕСÐ"
-#: lexsup.c:485
+#: lexsup.c:490
msgid "Set address of named section"
msgstr "вÑтановити адреÑу іменованого розділу"
-#: lexsup.c:488
+#: lexsup.c:493
msgid "Set address of .bss section"
msgstr "вÑтановити адреÑу розділу .bss"
-#: lexsup.c:490
+#: lexsup.c:495
msgid "Set address of .data section"
msgstr "вÑтановити адреÑу розділу .data"
-#: lexsup.c:492
+#: lexsup.c:497
msgid "Set address of .text section"
msgstr "вÑтановити адреÑу розділу .text"
-#: lexsup.c:494
+#: lexsup.c:499
msgid "Set address of text segment"
msgstr "вÑтановити адреÑу текÑтового Ñегмента"
-#: lexsup.c:496
+#: lexsup.c:501
msgid "Set address of rodata segment"
msgstr "вÑтановити адреÑу Ñегмента rodata"
-#: lexsup.c:498
+#: lexsup.c:503
msgid "Set address of ldata segment"
msgstr "вÑтановити адреÑу Ñегмента ldata"
-#: lexsup.c:501
+#: lexsup.c:506
msgid ""
"How to handle unresolved symbols. <method> is:\n"
" ignore-all, report-all, ignore-in-object-files,\n"
@@ -1832,19 +1840,19 @@ msgstr ""
" ignore-all, report-all, ignore-in-object-files,\n"
" ignore-in-shared-libs"
-#: lexsup.c:506
+#: lexsup.c:511
msgid "[=NUMBER]"
msgstr "[=ЧИСЛО]"
-#: lexsup.c:507
+#: lexsup.c:512
msgid "Output lots of information during link"
msgstr "вивеÑти докладні відомоÑÑ‚Ñ– під Ñ‡Ð°Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ"
-#: lexsup.c:511
+#: lexsup.c:516
msgid "Read version information script"
msgstr "прочитати Ñкрипт даних щодо верÑÑ–Ñ—"
-#: lexsup.c:514
+#: lexsup.c:519
msgid ""
"Take export symbols list from .exports, using\n"
" SYMBOL as the version."
@@ -1852,119 +1860,119 @@ msgstr ""
"отримати ÑпиÑок Ñимволів екÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð· .exports, викориÑтовуючи\n"
" викориÑтовуючи СИМВОЛ Ñк верÑÑ–ÑŽ."
-#: lexsup.c:518
+#: lexsup.c:523
msgid "Add data symbols to dynamic list"
msgstr "додавати Ñимволи даних до динамічного ÑпиÑку"
-#: lexsup.c:520
+#: lexsup.c:525
msgid "Use C++ operator new/delete dynamic list"
msgstr "викориÑтовувати динамічний ÑпиÑок операторів new/delete C++"
-#: lexsup.c:522
+#: lexsup.c:527
msgid "Use C++ typeinfo dynamic list"
msgstr "викориÑтовувати динамічний ÑпиÑок typeinfo C++"
-#: lexsup.c:524
+#: lexsup.c:529
msgid "Read dynamic list"
msgstr "читати динамічний ÑпиÑок"
-#: lexsup.c:526
+#: lexsup.c:531
msgid "Export the specified symbol"
msgstr "екÑпортувати вказаний Ñимвол"
-#: lexsup.c:528
+#: lexsup.c:533
msgid "Read export dynamic symbol list"
msgstr "прочитати екÑпортований ÑпиÑок динамічних Ñимволів"
-#: lexsup.c:530
+#: lexsup.c:535
msgid "Warn about duplicate common symbols"
msgstr "попереджати про Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¸Ñ… Ñимволів"
-#: lexsup.c:532
+#: lexsup.c:537
msgid "Warn if global constructors/destructors are seen"
msgstr "попереджати, Ñкщо Ñ” видимими загальні конÑтруктори або деÑтруктори"
-#: lexsup.c:535
+#: lexsup.c:540
msgid "Warn if the multiple GP values are used"
msgstr "попереджати, Ñкщо викориÑтано декілька значень GP"
-#: lexsup.c:537
+#: lexsup.c:542
msgid "Warn only once per undefined symbol"
msgstr "попереджати про невизначений Ñимвол лише один раз"
-#: lexsup.c:539
+#: lexsup.c:544
msgid "Warn if start of section changes due to alignment"
msgstr "попереджати, Ñкщо початок розділу змінюєтьÑÑ Ñ‡ÐµÑ€ÐµÐ· вирівнюваннÑ"
-#: lexsup.c:544
+#: lexsup.c:549
msgid "Warn if output has DT_TEXTREL (default)"
msgstr "Попереджати, Ñкщо у виведенні Ñ” DT_TEXTREL (типова поведінка)"
-#: lexsup.c:546
+#: lexsup.c:551
msgid "Warn if output has DT_TEXTREL"
msgstr "Попереджати, Ñкщо у виведенні Ñ” DT_TEXTREL"
-#: lexsup.c:552
+#: lexsup.c:557
msgid "Warn if an object has alternate ELF machine code"
msgstr "попереджати, Ñкщо об’єкт має альтернативний машинний код ELF"
-#: lexsup.c:556
+#: lexsup.c:561
msgid "Report unresolved symbols as warnings"
msgstr "повідомлÑти про нерозв’Ñзні Ñимволи Ñк про попередженнÑ"
-#: lexsup.c:559
+#: lexsup.c:564
msgid "Report unresolved symbols as errors"
msgstr "повідомлÑти про нерозв’Ñзні Ñимволи Ñк про помилки"
-#: lexsup.c:561
+#: lexsup.c:566
msgid "Include all objects from following archives"
msgstr "включити вÑÑ– об’єкти з вказаних нижче архівів"
-#: lexsup.c:564
+#: lexsup.c:569
msgid "Use wrapper functions for SYMBOL"
msgstr "викориÑтовувати функції-обгортки Ð´Ð»Ñ Ñимволу СИМВОЛ"
-#: lexsup.c:568
+#: lexsup.c:573
msgid "Unresolved SYMBOL will not cause an error or warning"
msgstr "невизначений СИМВОЛ не призведе до Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ помилку або попередженнÑ"
-#: lexsup.c:570
+#: lexsup.c:575
msgid "Push state of flags governing input file handling"
msgstr "подати Ñтан прапорців, Ñкі керують обробкою вхідного файла"
-#: lexsup.c:573
+#: lexsup.c:578
msgid "Pop state of flags governing input file handling"
msgstr "отримати Ñтан прапорців, Ñкі керують обробкою вхідного файла"
-#: lexsup.c:576
+#: lexsup.c:581
msgid "Report target memory usage"
msgstr "вивеÑти звіт щодо викориÑÑ‚Ð°Ð½Ð½Ñ Ð¿Ð°Ð¼â€™ÑÑ‚Ñ– призначеннÑ"
-#: lexsup.c:578
+#: lexsup.c:583
msgid "=MODE"
msgstr "=РЕЖИМ"
-#: lexsup.c:578
+#: lexsup.c:583
msgid "Control how orphan sections are handled."
msgstr "керувати тим, Ñк оброблÑтимутьÑÑ Ð¾Ñиротілі розділи."
-#: lexsup.c:581
+#: lexsup.c:586
msgid "Show discarded sections in map file output (default)"
msgstr "Показувати відкинуті розділи у виведенні прив'Ñзки файлів (типова поведінка)"
-#: lexsup.c:584
+#: lexsup.c:589
msgid "Do not show discarded sections in map file output"
msgstr "Ðе показувати відкинуті розділи у виведенні прив'Ñзки файлів"
-#: lexsup.c:587
+#: lexsup.c:592
msgid "Emit names and types of static variables in CTF"
msgstr "ÐадÑилати назви Ñ– типи Ñтатичних змінних у CTF"
-#: lexsup.c:590
+#: lexsup.c:595
msgid "Do not emit names and types of static variables in CTF"
msgstr "Ðе надÑилати назви Ñ– типи Ñтатичних змінних у CTF"
-#: lexsup.c:594
+#: lexsup.c:599
msgid ""
"How to share CTF types between translation units.\n"
" <method> is: share-unconflicted (default),\n"
@@ -1974,60 +1982,61 @@ msgstr ""
" <метод>: share-unconflicted (типовий),\n"
" share-duplicated"
-#: lexsup.c:758
+#: lexsup.c:763
msgid "%F%P: Error: unable to disambiguate: %s (did you mean -%s ?)\n"
msgstr "%F%P: помилка: не вдалоÑÑ Ð¿Ð¾Ð·Ð±ÑƒÑ‚Ð¸ÑÑ Ð½ÐµÐ¾Ð´Ð½Ð¾Ð·Ð½Ð°Ñ‡Ð½Ð¾ÑÑ‚Ñ–: %s (мали на увазі -%s ?)\n"
-#: lexsup.c:761
+#: lexsup.c:766
msgid "%P: Warning: grouped short command line options are deprecated: %s\n"
msgstr "%P: попередженнÑ: викориÑÑ‚Ð°Ð½Ð½Ñ Ð·Ð³Ñ€ÑƒÐ¿Ð¾Ð²Ð°Ð½Ð¸Ñ… Ñкорочених параметрів командного Ñ€Ñдка вважаєтьÑÑ Ð·Ð°Ñтарілим: %s\n"
-#: lexsup.c:788
+#: lexsup.c:793
msgid "%P: %s: missing argument\n"
msgstr "%P: %s: не виÑтачає аргументу\n"
-#: lexsup.c:793
+#: lexsup.c:798
msgid "%P: unrecognized option '%s'\n"
msgstr "%P: нерозпізнаний параметр «%s»\n"
-#: lexsup.c:798
+#: lexsup.c:803
msgid "%F%P: use the --help option for usage information\n"
msgstr "%F%P: ÑкориÑтайтеÑÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ --help, щоб отримати підказку щодо кориÑтуваннÑ\n"
-#: lexsup.c:817
+#: lexsup.c:822
msgid "%F%P: unrecognized -a option `%s'\n"
msgstr "%F%P: нерозпізнаний параметр -a, «%s»\n"
-#: lexsup.c:830
+#: lexsup.c:835
msgid "%F%P: unrecognized -assert option `%s'\n"
msgstr "%F%P: нерозпізнаний параметр -assert, «%s»\n"
-#: lexsup.c:874
+#: lexsup.c:879
msgid "%F%P: unknown demangling style `%s'\n"
msgstr "%F%P: невідомий Ñтиль розгортаннÑ, «%s»\n"
-#: lexsup.c:950 lexsup.c:1424 eaarch64cloudabi.c:816 eaarch64cloudabib.c:816
-#: eaarch64elf.c:811 eaarch64elf32.c:811 eaarch64elf32b.c:811
-#: eaarch64elfb.c:811 eaarch64fbsd.c:816 eaarch64fbsdb.c:816
-#: eaarch64linux.c:816 eaarch64linux32.c:816 eaarch64linux32b.c:816
-#: eaarch64linuxb.c:816 earmelf.c:1077 earmelf_fbsd.c:1077
-#: earmelf_fuchsia.c:1082 earmelf_linux.c:1082 earmelf_linux_eabi.c:1082
-#: earmelf_linux_fdpiceabi.c:1082 earmelf_nacl.c:1082 earmelf_nbsd.c:1077
-#: earmelf_phoenix.c:1082 earmelf_vxworks.c:1113 earmelfb.c:1077
-#: earmelfb_fbsd.c:1077 earmelfb_fuchsia.c:1082 earmelfb_linux.c:1082
-#: earmelfb_linux_eabi.c:1082 earmelfb_linux_fdpiceabi.c:1082
-#: earmelfb_nacl.c:1082 earmelfb_nbsd.c:1077 earmnto.c:1052 ecskyelf.c:539
-#: ecskyelf_linux.c:706 eelf32metag.c:703 eelf64lppc.c:1169
-#: eelf64lppc_fbsd.c:1169 eelf64ppc.c:1169 eelf64ppc_fbsd.c:1169
-#: ehppaelf.c:559 ehppalinux.c:741 ehppanbsd.c:741 ehppaobsd.c:741
+#: lexsup.c:955 lexsup.c:1429 eaarch64cloudabi.c:818 eaarch64cloudabib.c:818
+#: eaarch64elf.c:813 eaarch64elf32.c:813 eaarch64elf32b.c:813
+#: eaarch64elfb.c:813 eaarch64fbsd.c:818 eaarch64fbsdb.c:818
+#: eaarch64haiku.c:818 eaarch64linux.c:818 eaarch64linux32.c:818
+#: eaarch64linux32b.c:818 eaarch64linuxb.c:818 earmelf.c:1079
+#: earmelf_fbsd.c:1079 earmelf_fuchsia.c:1084 earmelf_haiku.c:1084
+#: earmelf_linux.c:1084 earmelf_linux_eabi.c:1084
+#: earmelf_linux_fdpiceabi.c:1084 earmelf_nacl.c:1084 earmelf_nbsd.c:1079
+#: earmelf_phoenix.c:1084 earmelf_vxworks.c:1115 earmelfb.c:1079
+#: earmelfb_fbsd.c:1079 earmelfb_fuchsia.c:1084 earmelfb_linux.c:1084
+#: earmelfb_linux_eabi.c:1084 earmelfb_linux_fdpiceabi.c:1084
+#: earmelfb_nacl.c:1084 earmelfb_nbsd.c:1079 earmnto.c:1054 ecskyelf.c:541
+#: ecskyelf_linux.c:708 eelf32metag.c:705 eelf64lppc.c:1187
+#: eelf64lppc_fbsd.c:1187 eelf64ppc.c:1187 eelf64ppc_fbsd.c:1187
+#: ehppaelf.c:561 ehppalinux.c:743 ehppanbsd.c:743 ehppaobsd.c:743
msgid "%F%P: invalid number `%s'\n"
msgstr "%F%P: некоректне чиÑло, «%s»\n"
-#: lexsup.c:1046
+#: lexsup.c:1051
msgid "%F%P: bad --unresolved-symbols option: %s\n"
msgstr "%F%P: помилковий параметр --unresolved-symbols: %s\n"
-#: lexsup.c:1123
+#: lexsup.c:1128
msgid "%F%P: bad -plugin-opt option\n"
msgstr "%F%P: помилковий параметр -plugin-opt\n"
@@ -2039,158 +2048,162 @@ msgstr "%F%P: помилковий параметр -plugin-opt\n"
#. an error message here. We cannot just make this a warning,
#. increment optind, and continue because getopt is too confused
#. and will seg-fault the next time around.
-#: lexsup.c:1140
+#: lexsup.c:1145
msgid "%F%P: unrecognised option: %s\n"
msgstr "%F%P: нерозпізнаний параметр: %s\n"
-#: lexsup.c:1143 lexsup.c:1253 lexsup.c:1274 lexsup.c:1393
+#: lexsup.c:1148 lexsup.c:1258 lexsup.c:1279 lexsup.c:1398
msgid "%F%P: -r and %s may not be used together\n"
msgstr "%F%P: -r Ñ– %s не можна викориÑтовувати одночаÑно\n"
-#: lexsup.c:1265
+#: lexsup.c:1270
msgid "%F%P: -shared not supported\n"
msgstr "%F%P: підтримки -shared не передбачено\n"
-#: lexsup.c:1279
+#: lexsup.c:1284
msgid "%F%P: -pie not supported\n"
msgstr "%F%P: підтримки -pie не передбачено\n"
-#: lexsup.c:1285
+#: lexsup.c:1290
msgid "%P: SONAME must not be empty string; keeping previous one\n"
msgstr "%P: SONAME має бути непорожнім Ñ€Ñдком; лишаємо попереднє значеннÑ\n"
-#: lexsup.c:1291
+#: lexsup.c:1296
msgid "descending"
msgstr "за ÑпаданнÑм"
-#: lexsup.c:1293
+#: lexsup.c:1298
msgid "ascending"
msgstr "за зроÑтаннÑм"
-#: lexsup.c:1296
+#: lexsup.c:1301
msgid "%F%P: invalid common section sorting option: %s\n"
msgstr "%F%P: некоректний параметр впорÑÐ´ÐºÐ¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ñпільних розділів: %s\n"
-#: lexsup.c:1300
+#: lexsup.c:1305
msgid "name"
msgstr "назва"
-#: lexsup.c:1302
+#: lexsup.c:1307
msgid "alignment"
msgstr "вирівнюваннÑ"
-#: lexsup.c:1305
+#: lexsup.c:1310
msgid "%F%P: invalid section sorting option: %s\n"
msgstr "%F%P: некоректний параметр впорÑÐ´ÐºÐ¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð²: %s\n"
-#: lexsup.c:1342
+#: lexsup.c:1347
msgid "%F%P: invalid argument to option \"--section-start\"\n"
msgstr "%F%P: некоректний аргумент параметра «--section-start»\n"
-#: lexsup.c:1349
+#: lexsup.c:1354
msgid "%F%P: missing argument(s) to option \"--section-start\"\n"
msgstr "%F%P: не виÑтачає аргументів параметра «--section-start»\n"
-#: lexsup.c:1614
+#: lexsup.c:1619
msgid "%F%P: group ended before it began (--help for usage)\n"
msgstr "%F%P: групу завершено до Ñ—Ñ— початку (ÑкориÑтайтеÑÑ --help, щоб отримати довідку з кориÑтуваннÑ)\n"
-#: lexsup.c:1642
+#: lexsup.c:1644
+msgid "%F%P: invalid cache memory size: %s\n"
+msgstr "%F%P: некоректний розмір кешу у пам'ÑÑ‚Ñ–: «%s»\n"
+
+#: lexsup.c:1658
msgid "%X%P: --hash-size needs a numeric argument\n"
msgstr "%X%P: --hash-size потребує чиÑлового аргументу\n"
-#: lexsup.c:1654
+#: lexsup.c:1670
msgid "%F%P: no state pushed before popping\n"
msgstr "%F%P: не подано (push) Ñтану до Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ (pop)\n"
-#: lexsup.c:1677
+#: lexsup.c:1693
msgid "%F%P: invalid argument to option \"--orphan-handling\"\n"
msgstr "%F%P: некоректний аргумент параметра «--orphan-handling»\n"
-#: lexsup.c:1707
+#: lexsup.c:1723
msgid "%F%P: bad --ctf-share-types option: %s\n"
msgstr "%F%P: помилковий параметр --ctf-share-types: %s\n"
-#: lexsup.c:1725
+#: lexsup.c:1741
msgid "%P: no file/directory name provided for map output; ignored\n"
msgstr "%P: не надано назви файла або каталогу Ð´Ð»Ñ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ ÐºÐ°Ñ€Ñ‚Ð¸; проігноровано\n"
-#: lexsup.c:1753
+#: lexsup.c:1769
msgid "%P: cannot stat linker map file: %E\n"
msgstr "%P: не вдалоÑÑ Ð¾Ð±Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸ файл карти компонуваннÑ: %E\n"
-#: lexsup.c:1765
+#: lexsup.c:1781
msgid "%P: linker map file is not a regular file\n"
msgstr "%P: файл карти ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ðµ Ñ” звичайним файлом\n"
#. If the asprintf failed then something is probably very
#. wrong. Better to halt now rather than continue on
#. into more problems.
-#: lexsup.c:1776
+#: lexsup.c:1792
msgid "%P%F: cannot create name for linker map file: %E\n"
msgstr "%P%F: не вдалоÑÑ Ñтворити назву Ð´Ð»Ñ Ñ„Ð°Ð»Ð¹Ð° карти компонуваннÑ: %E\n"
-#: lexsup.c:1787
+#: lexsup.c:1803
msgid "%P: SONAME must not be empty string; ignored\n"
msgstr "%P: SONAME має бути непорожнім Ñ€Ñдком; ігноруємо\n"
-#: lexsup.c:1793
+#: lexsup.c:1809
msgid "%P: missing --end-group; added as last command line option\n"
msgstr "%P: пропущено --end-group; додано Ñк оÑтанній параметр командного Ñ€Ñдка\n"
-#: lexsup.c:1901
+#: lexsup.c:1917
msgid "%F%P: -F may not be used without -shared\n"
msgstr "%F%P: -F не можна викориÑтовувати без -shared\n"
-#: lexsup.c:1903
+#: lexsup.c:1919
msgid "%F%P: -f may not be used without -shared\n"
msgstr "%F%P: -f не можна викориÑтовувати без -shared\n"
-#: lexsup.c:1944 lexsup.c:1957
+#: lexsup.c:1960 lexsup.c:1973
msgid "%F%P: invalid hex number `%s'\n"
msgstr "%F%P: некоректне шіÑтнадцÑткове чиÑло «%s»\n"
-#: lexsup.c:1987
+#: lexsup.c:2003
#, c-format
msgid " --audit=AUDITLIB Specify a library to use for auditing\n"
msgstr " --audit=БІБЛÐУДИТУ вказати бібліотеку, Ñку Ñлід викориÑтати Ð´Ð»Ñ Ð°ÑƒÐ´Ð¸Ñ‚Ñƒ\n"
-#: lexsup.c:1989
+#: lexsup.c:2005
#, c-format
msgid " -Bgroup Selects group name lookup rules for DSO\n"
msgstr " -Bgroup вибирає правила пошук назви групи Ð´Ð»Ñ DSO\n"
-#: lexsup.c:1991
+#: lexsup.c:2007
#, c-format
msgid " --disable-new-dtags Disable new dynamic tags\n"
msgstr " --disable-new-dtags вимкнути нові динамічні мітки\n"
-#: lexsup.c:1993
+#: lexsup.c:2009
#, c-format
msgid " --enable-new-dtags Enable new dynamic tags\n"
msgstr " --enable-new-dtags увімкнути нові динамічні мітки\n"
-#: lexsup.c:1995
+#: lexsup.c:2011
#, c-format
msgid " --eh-frame-hdr Create .eh_frame_hdr section\n"
msgstr " --eh-frame-hdr Ñтворити розділ .eh_frame_hdr\n"
-#: lexsup.c:1997
+#: lexsup.c:2013
#, c-format
msgid " --no-eh-frame-hdr Do not create .eh_frame_hdr section\n"
msgstr " --no-eh-frame-hdr не Ñтворювати розділ .eh_frame_hdr\n"
-#: lexsup.c:1999
+#: lexsup.c:2015
#, c-format
msgid " --exclude-libs=LIBS Make all symbols in LIBS hidden\n"
msgstr " --exclude-libs=БІБЛ зробити уÑÑ– Ñимволи у бібліотеках БІБЛ прихованими\n"
-#: lexsup.c:2001
+#: lexsup.c:2017
#, c-format
msgid " --hash-style=STYLE Set hash style to sysv/gnu/both. Default: "
msgstr " --hash-style=СТИЛЬ вÑтановити Ñтиль хешуваннÑ: sysv, gnu або both. Типове: "
-#: lexsup.c:2020
+#: lexsup.c:2036
#, c-format
msgid ""
" -P AUDITLIB, --depaudit=AUDITLIB\n"
@@ -2199,17 +2212,17 @@ msgstr ""
" -P БІБЛÐУДИТУ, --depaudit=БІБЛÐУДИТУ\n"
" вказати бібліотеку Ð´Ð»Ñ Ð°ÑƒÐ´Ð¸Ñ‚Ñƒ залежноÑтей\n"
-#: lexsup.c:2023
+#: lexsup.c:2039
#, c-format
msgid " -z combreloc Merge dynamic relocs into one section and sort\n"
msgstr " -z combreloc об’єднати динамічні переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð¾ одного розділу Ñ– упорÑдкувати\n"
-#: lexsup.c:2025
+#: lexsup.c:2041
#, c-format
msgid " -z nocombreloc Don't merge dynamic relocs into one section\n"
msgstr " -z nocombreloc не об’єднувати динамічні переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð¾ одного розділу\n"
-#: lexsup.c:2027
+#: lexsup.c:2043
#, c-format
msgid ""
" -z global Make symbols in DSO available for subsequently\n"
@@ -2218,69 +2231,69 @@ msgstr ""
" -z global зробити Ñимволи у DSO доÑтупними длÑ\n"
" наÑтупних поÑлідовно завантажених об’єктів\n"
-#: lexsup.c:2030
+#: lexsup.c:2046
#, c-format
msgid " -z initfirst Mark DSO to be initialized first at runtime\n"
msgstr " -z initfirst позначити DSO Ñк такий, що ініціалізуєтьÑÑ Ð¿ÐµÑ€ÑˆÐ¸Ð¼ при запуÑку\n"
-#: lexsup.c:2032
+#: lexsup.c:2048
#, c-format
msgid " -z interpose Mark object to interpose all DSOs but executable\n"
msgstr " -z interpose позначити об’єкт Ð´Ð»Ñ Ð²ÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð½Ñ ÑƒÑÑ–Ñ… DSO, окрім виконуваних\n"
-#: lexsup.c:2034
+#: lexsup.c:2050
#, c-format
msgid " -z unique Mark DSO to be loaded at most once by default, and only in the main namespace\n"
msgstr " -z unique Позначити DSO Ñк такий, що типово завантажуєтьÑÑ Ð¿Ñ€Ð¸Ð½Ð°Ð¹Ð¼Ð½Ñ– один раз Ñ– лише до оÑновного проÑтору назв\n"
-#: lexsup.c:2036
+#: lexsup.c:2052
#, c-format
msgid " -z nounique Don't mark DSO as a loadable at most once\n"
msgstr " -z nounique не позначати DSO Ñк такий, Ñкий можна завантажувати не більше одного разу\n"
-#: lexsup.c:2038
+#: lexsup.c:2054
#, c-format
msgid " -z lazy Mark object lazy runtime binding (default)\n"
msgstr " -z lazy визначити ліниве прив’ÑÐ·ÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ динамічному режимі Ð´Ð»Ñ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° (типове)\n"
-#: lexsup.c:2040
+#: lexsup.c:2056
#, c-format
msgid " -z loadfltr Mark object requiring immediate process\n"
msgstr " -z loadfltr позначити об’єкт Ñк такий, що потребує негайної обробки\n"
-#: lexsup.c:2042
+#: lexsup.c:2058
#, c-format
msgid " -z nocopyreloc Don't create copy relocs\n"
msgstr " -z nocopyreloc не Ñтворювати переміщено копій\n"
-#: lexsup.c:2044
+#: lexsup.c:2060
#, c-format
msgid " -z nodefaultlib Mark object not to use default search paths\n"
msgstr ""
" -z nodefaultlib позначити об’єкт Ñк такий, що не викориÑтовує\n"
" типових шлÑхів пошуку\n"
-#: lexsup.c:2046
+#: lexsup.c:2062
#, c-format
msgid " -z nodelete Mark DSO non-deletable at runtime\n"
msgstr " -z nodelete позначити DSO, Ñк непридатний до Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ\n"
-#: lexsup.c:2048
+#: lexsup.c:2064
#, c-format
msgid " -z nodlopen Mark DSO not available to dlopen\n"
msgstr " -z nodlopen позначити DSO Ñк недоÑтупний Ð´Ð»Ñ dlopen\n"
-#: lexsup.c:2050
+#: lexsup.c:2066
#, c-format
msgid " -z nodump Mark DSO not available to dldump\n"
msgstr " -z nodump позначити DSO Ñк недоÑтупний Ð´Ð»Ñ dldump\n"
-#: lexsup.c:2052
+#: lexsup.c:2068
#, c-format
msgid " -z now Mark object non-lazy runtime binding\n"
msgstr " -z now визначити Ð´Ð»Ñ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° неліниве прив’ÑÐ·ÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ динамічному режимі\n"
-#: lexsup.c:2054
+#: lexsup.c:2070
#, c-format
msgid ""
" -z origin Mark object requiring immediate $ORIGIN\n"
@@ -2289,92 +2302,92 @@ msgstr ""
" -z origin позначити об’єкт Ñк такий, що потребує негайної\n"
" обробки $ORIGIN під Ñ‡Ð°Ñ Ð·Ð°Ð¿ÑƒÑку\n"
-#: lexsup.c:2058
+#: lexsup.c:2074
#, c-format
msgid " -z relro Create RELRO program header (default)\n"
msgstr " -z relro Ñтворити заголовок програми RELRO (типово)\n"
-#: lexsup.c:2060
+#: lexsup.c:2076
#, c-format
msgid " -z norelro Don't create RELRO program header\n"
msgstr " -z norelro не Ñтворювати заголовок програми RELRO\n"
-#: lexsup.c:2063
+#: lexsup.c:2079
#, c-format
msgid " -z relro Create RELRO program header\n"
msgstr " -z relro Ñтворити заголовок програми RELRO\n"
-#: lexsup.c:2065
+#: lexsup.c:2081
#, c-format
msgid " -z norelro Don't create RELRO program header (default)\n"
msgstr " -z norelro не Ñтворювати заголовок програми RELRO (типово)\n"
-#: lexsup.c:2069
+#: lexsup.c:2085
#, c-format
msgid " -z separate-code Create separate code program header (default)\n"
msgstr " -z separate-code Ñтворити окремий заголовок коду програми (типово)\n"
-#: lexsup.c:2071
+#: lexsup.c:2087
#, c-format
msgid " -z noseparate-code Don't create separate code program header\n"
msgstr " -z noseparate-code не Ñтворювати окремого заголовка коду програми\n"
-#: lexsup.c:2074
+#: lexsup.c:2090
#, c-format
msgid " -z separate-code Create separate code program header\n"
msgstr " -z separate-code Ñтворити окремий заголовок коду програми\n"
-#: lexsup.c:2076
+#: lexsup.c:2092
#, c-format
msgid " -z noseparate-code Don't create separate code program header (default)\n"
msgstr " -z noseparate-code не Ñтворювати окремого заголовка коду програми (типово)\n"
-#: lexsup.c:2079
+#: lexsup.c:2095
#, c-format
msgid " -z common Generate common symbols with STT_COMMON type\n"
msgstr " -z common Ñтворити загальні Ñимволи із типом STT_COMMON\n"
-#: lexsup.c:2081
+#: lexsup.c:2097
#, c-format
msgid " -z nocommon Generate common symbols with STT_OBJECT type\n"
msgstr " -z nocommon Ñтворити загальні Ñимволи із типом STT_OBJECT\n"
-#: lexsup.c:2084
+#: lexsup.c:2100
#, c-format
msgid " -z text Treat DT_TEXTREL in output as error (default)\n"
msgstr " -z text вважати DT_TEXTREL у виведенні помилкою (типова поведінка)\n"
-#: lexsup.c:2087
+#: lexsup.c:2103
#, c-format
msgid " -z text Treat DT_TEXTREL in output as error\n"
msgstr " -z text вважати DT_TEXTREL у виведенні помилкою\n"
-#: lexsup.c:2091
+#: lexsup.c:2107
#, c-format
msgid " -z notext Don't treat DT_TEXTREL in output as error (default)\n"
msgstr " -z notext не вважати DT_TEXTREL у виведенні помилкою (типова поведінка)\n"
-#: lexsup.c:2093
+#: lexsup.c:2109
#, c-format
msgid " -z textoff Don't treat DT_TEXTREL in output as error (default)\n"
msgstr " -z textoff не вважати DT_TEXTREL у виведенні помилкою (типова поведінка)\n"
-#: lexsup.c:2098
+#: lexsup.c:2114
#, c-format
msgid " -z notext Don't treat DT_TEXTREL in output as error\n"
msgstr " -z notext не вважати DT_TEXTREL у виведенні помилкою\n"
-#: lexsup.c:2100
+#: lexsup.c:2116
#, c-format
msgid " -z textoff Don't treat DT_TEXTREL in output as error\n"
msgstr " -z textoff не вважати DT_TEXTREL у виведенні помилкою\n"
-#: lexsup.c:2108
+#: lexsup.c:2124
#, c-format
msgid " --build-id[=STYLE] Generate build ID note\n"
msgstr " --build-id[=СТИЛЬ] Ñтворити нотатку щодо ідентифікатора збираннÑ\n"
-#: lexsup.c:2110
+#: lexsup.c:2126
#, c-format
msgid ""
" --compress-debug-sections=[none|zlib|zlib-gnu|zlib-gabi]\n"
@@ -2383,82 +2396,82 @@ msgstr ""
" --compress-debug-sections=[none|zlib|zlib-gnu|zlib-gabi]\n"
" ÑтиÑнути розділи діагноÑтики DWARF за допомогою zlib\n"
-#: lexsup.c:2114
+#: lexsup.c:2130
#, c-format
msgid " Default: zlib-gabi\n"
msgstr " Типове значеннÑ: zlib-gabi\n"
-#: lexsup.c:2117
+#: lexsup.c:2133
#, c-format
msgid " Default: none\n"
msgstr " Типове значеннÑ: none\n"
-#: lexsup.c:2120
+#: lexsup.c:2136
#, c-format
msgid " -z common-page-size=SIZE Set common page size to SIZE\n"
msgstr " -z common-page-size=РОЗМІР вÑтановити Ð´Ð»Ñ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ Ñторінки загальне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð ÐžÐ—ÐœÐ†Ð \n"
-#: lexsup.c:2122
+#: lexsup.c:2138
#, c-format
msgid " -z max-page-size=SIZE Set maximum page size to SIZE\n"
msgstr " -z max-page-size=РОЗМІР вÑтановити Ð´Ð»Ñ Ð¼Ð°ÐºÑимального розміру Ñторінки Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð ÐžÐ—ÐœÐ†Ð \n"
-#: lexsup.c:2124
+#: lexsup.c:2140
#, c-format
msgid " -z defs Report unresolved symbols in object files\n"
msgstr " -z defs повідомлÑти про невизначені Ñимволи у об’єктних файлах\n"
-#: lexsup.c:2126
+#: lexsup.c:2142
#, c-format
msgid " -z undefs Ignore unresolved symbols in object files\n"
msgstr " -z undefs ігнорувати невизначені Ñимволи в об'єктних файлах\n"
-#: lexsup.c:2128
+#: lexsup.c:2144
#, c-format
msgid " -z muldefs Allow multiple definitions\n"
msgstr " -z muldefs дозволÑти декілька визначень\n"
-#: lexsup.c:2130
+#: lexsup.c:2146
#, c-format
msgid " -z stack-size=SIZE Set size of stack segment\n"
msgstr " -z stack-size=РОЗМІР вÑтановити розмір Ñегмента Ñтека\n"
-#: lexsup.c:2132
+#: lexsup.c:2148
#, c-format
msgid " -z execstack Mark executable as requiring executable stack\n"
msgstr " -z execstack позначити виконуваний файл Ñк такий, що потребує виконуваного Ñтека\n"
-#: lexsup.c:2134
+#: lexsup.c:2150
#, c-format
msgid " -z noexecstack Mark executable as not requiring executable stack\n"
msgstr " -z noexecstack позначити виконуваний файл Ñк такий, що не потребує виконуваного Ñтека\n"
-#: lexsup.c:2136
+#: lexsup.c:2152
#, c-format
msgid " -z unique-symbol Avoid duplicated local symbol names\n"
msgstr " -z unique-symbol уникати Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð½Ð°Ð·Ð² локальних Ñимволів\n"
-#: lexsup.c:2138
+#: lexsup.c:2154
#, c-format
msgid " -z nounique-symbol Keep duplicated local symbol names (default)\n"
msgstr " -z nounique-symbol зберігати дубльовані назви локальних Ñимволів (типова поведінка)\n"
-#: lexsup.c:2140
+#: lexsup.c:2156
#, c-format
msgid " -z globalaudit Mark executable requiring global auditing\n"
msgstr " -z globalaudit позначити виконуваний файл Ñк такий, Ñкий потребує загального наглÑду\n"
-#: lexsup.c:2142
+#: lexsup.c:2158
#, c-format
msgid " -z start-stop-gc Enable garbage collection on __start/__stop\n"
msgstr " -z start-stop-gc увімкнути Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ ÑÐ¼Ñ–Ñ‚Ñ‚Ñ Ð¿Ñ€Ð¸ __start/__stop\n"
-#: lexsup.c:2144
+#: lexsup.c:2160
#, c-format
msgid " -z nostart-stop-gc Don't garbage collect __start/__stop (default)\n"
msgstr " -z nostart-stop-gc не збирати ÑÐ¼Ñ–Ñ‚Ñ‚Ñ Ð¿Ñ€Ð¸ __start/__stop (типова поведінка)\n"
-#: lexsup.c:2146
+#: lexsup.c:2162
#, c-format
msgid ""
" -z start-stop-visibility=V Set visibility of built-in __start/__stop symbols\n"
@@ -2467,12 +2480,12 @@ msgstr ""
" -z start-stop-visibility=V вÑтановити видиміÑÑ‚ÑŒ вбудованих Ñимволів __start/__stop\n"
" у Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ DEFAULT, PROTECTED, HIDDEN або INTERNAL\n"
-#: lexsup.c:2154
+#: lexsup.c:2170
#, c-format
msgid " --ld-generated-unwind-info Generate exception handling info for PLT\n"
msgstr " --ld-generated-unwind-info Ñтворити дані Ð´Ð»Ñ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ виключень Ð´Ð»Ñ PLT\n"
-#: lexsup.c:2156
+#: lexsup.c:2172
#, c-format
msgid ""
" --no-ld-generated-unwind-info\n"
@@ -2481,49 +2494,49 @@ msgstr ""
" --no-ld-generated-unwind-info\n"
" не Ñтворювати дані Ð´Ð»Ñ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ виключень Ð´Ð»Ñ PLT\n"
-#: lexsup.c:2166
+#: lexsup.c:2182
#, c-format
msgid "ELF emulations:\n"
msgstr "ЕмулÑÑ†Ñ–Ñ ELF:\n"
-#: lexsup.c:2184
+#: lexsup.c:2200
#, c-format
msgid "Usage: %s [options] file...\n"
msgstr "ВикориÑтаннÑ: %s [параметри] файл…\n"
-#: lexsup.c:2186
+#: lexsup.c:2202
#, c-format
msgid "Options:\n"
msgstr "Параметри:\n"
-#: lexsup.c:2264
+#: lexsup.c:2280
#, c-format
msgid " @FILE"
msgstr " @ФÐЙЛ"
-#: lexsup.c:2267
+#: lexsup.c:2283
#, c-format
msgid "Read options from FILE\n"
msgstr "читати параметри з файла ФÐЙЛ\n"
#. Note: Various tools (such as libtool) depend upon the
#. format of the listings below - do not change them.
-#: lexsup.c:2272
+#: lexsup.c:2288
#, c-format
msgid "%s: supported targets:"
msgstr "%s: підтримувані призначеннÑ:"
-#: lexsup.c:2280
+#: lexsup.c:2296
#, c-format
msgid "%s: supported emulations: "
msgstr "%s: підтримувані режими емулÑції: "
-#: lexsup.c:2285
+#: lexsup.c:2301
#, c-format
msgid "%s: emulation specific options:\n"
msgstr "%s: Ñпецифічні параметри емулÑції:\n"
-#: lexsup.c:2292
+#: lexsup.c:2308
#, c-format
msgid "Report bugs to %s\n"
msgstr "ПовідомлÑйте про вади за адреÑою %s\n"
@@ -2532,46 +2545,47 @@ msgstr "ПовідомлÑйте про вади за адреÑою %s\n"
msgid "%F%P: unknown format type %s\n"
msgstr "%F%P: невідомий тип Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ %s\n"
-#: pe-dll.c:447
+#: pe-dll.c:448
msgid "%X%P: unsupported PEI architecture: %s\n"
msgstr "%X%P: непідтримувана архітектура PEI: %s\n"
-#: pe-dll.c:826
+#: pe-dll.c:827
msgid "%X%P: cannot export %s: invalid export name\n"
msgstr "%X%P: неможливо екÑпортувати %s: некоректна назва екÑпортуваннÑ\n"
-#: pe-dll.c:878
+#: pe-dll.c:879
#, c-format
msgid "%X%P: error, duplicate EXPORT with ordinals: %s (%d vs %d)\n"
msgstr "%X%P: помилка: EXPORT повторюєтьÑÑ Ñ–Ð· порÑдковими чиÑлівниками: %s (%d Ñ– %d)\n"
-#: pe-dll.c:885
+#: pe-dll.c:886
#, c-format
msgid "%P: warning, duplicate EXPORT: %s\n"
msgstr "%P: попередженнÑ: Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ EXPORT: %s\n"
-#: pe-dll.c:992
+#: pe-dll.c:993
#, c-format
msgid "%X%P: cannot export %s: symbol not defined\n"
msgstr "%X%P: екÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ %s неможливе: Ñимвол не визначено\n"
-#: pe-dll.c:998
+#: pe-dll.c:999
#, c-format
msgid "%X%P: cannot export %s: symbol wrong type (%d vs %d)\n"
msgstr "%X%P: екÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ %s неможливе: Ñимвол належить до помилкового типу (%d Ñ– %d)\n"
-#: pe-dll.c:1005
+#: pe-dll.c:1006
#, c-format
msgid "%X%P: cannot export %s: symbol not found\n"
msgstr "%X%P: екÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ %s неможливе: Ñимвол не визначено\n"
-#: pe-dll.c:1028 eaarch64cloudabi.c:360 eaarch64cloudabib.c:360
+#: pe-dll.c:1029 eaarch64cloudabi.c:360 eaarch64cloudabib.c:360
#: eaarch64elf.c:359 eaarch64elf32.c:359 eaarch64elf32b.c:359
#: eaarch64elfb.c:359 eaarch64fbsd.c:360 eaarch64fbsdb.c:360
-#: eaarch64linux.c:360 eaarch64linux32.c:360 eaarch64linux32b.c:360
-#: eaarch64linuxb.c:360 eaix5ppc.c:1470 eaix5ppc.c:1480 eaix5rs6.c:1470
-#: eaix5rs6.c:1480 eaixppc.c:1470 eaixppc.c:1480 eaixrs6.c:1470 eaixrs6.c:1480
-#: earmelf.c:568 earmelf_fbsd.c:568 earmelf_fuchsia.c:569 earmelf_linux.c:569
+#: eaarch64haiku.c:360 eaarch64linux.c:360 eaarch64linux32.c:360
+#: eaarch64linux32b.c:360 eaarch64linuxb.c:360 eaix5ppc.c:1470 eaix5ppc.c:1480
+#: eaix5rs6.c:1470 eaix5rs6.c:1480 eaixppc.c:1470 eaixppc.c:1480
+#: eaixrs6.c:1470 eaixrs6.c:1480 earmelf.c:568 earmelf_fbsd.c:568
+#: earmelf_fuchsia.c:569 earmelf_haiku.c:569 earmelf_linux.c:569
#: earmelf_linux_eabi.c:569 earmelf_linux_fdpiceabi.c:569 earmelf_nacl.c:569
#: earmelf_nbsd.c:568 earmelf_phoenix.c:569 earmelf_vxworks.c:568
#: earmelfb.c:568 earmelfb_fbsd.c:568 earmelfb_fuchsia.c:569
@@ -2587,233 +2601,235 @@ msgstr "%X%P: екÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ %s неможливе: Ñимвол нÐ
#: eelf32ltsmipn32_fbsd.c:172 eelf32metag.c:87 eelf32mipswindiss.c:172
#: eelf64bmip.c:186 eelf64btsmip.c:172 eelf64btsmip_fbsd.c:172
#: eelf64lppc.c:119 eelf64lppc_fbsd.c:119 eelf64ltsmip.c:172
-#: eelf64ltsmip_fbsd.c:172 eelf64ppc.c:119 eelf64ppc_fbsd.c:119 ehppaelf.c:110
-#: ehppalinux.c:110 ehppanbsd.c:110 ehppaobsd.c:110 em68hc11elf.c:170
-#: em68hc11elfb.c:170 em68hc12elf.c:170 em68hc12elfb.c:170 enios2elf.c:92
-#: enios2linux.c:92 eppcmacos.c:1470 eppcmacos.c:1480
+#: eelf64ltsmip_fbsd.c:172 eelf64ppc.c:119 eelf64ppc_fbsd.c:119
+#: eelf_mipsel_haiku.c:172 ehppaelf.c:110 ehppalinux.c:110 ehppanbsd.c:110
+#: ehppaobsd.c:110 em68hc11elf.c:170 em68hc11elfb.c:170 em68hc12elf.c:170
+#: em68hc12elfb.c:170 enios2elf.c:92 enios2linux.c:92 eppcmacos.c:1470
+#: eppcmacos.c:1480
msgid "%F%P: can not create BFD: %E\n"
msgstr "%F%P: не вдалоÑÑ Ñтворити BFD: %E\n"
-#: pe-dll.c:1042
+#: pe-dll.c:1043
msgid "%X%P: can not create .edata section: %E\n"
msgstr "%X%P: не вдалоÑÑ Ñтворити розділ .edata: %E\n"
-#: pe-dll.c:1056
+#: pe-dll.c:1057
msgid "%X%P: can not create .reloc section: %E\n"
msgstr "%X%P: не вдалоÑÑ Ñтворити розділ .reloc: %E\n"
-#: pe-dll.c:1117
+#: pe-dll.c:1118
#, c-format
msgid "%X%P: error: ordinal used twice: %d (%s vs %s)\n"
msgstr "%X%P: помилка: порÑдковий номер викориÑтано двічі: %d (%s Ñ– %s)\n"
-#: pe-dll.c:1153
+#: pe-dll.c:1154
#, c-format
msgid "%X%P: error: export ordinal too large: %d\n"
msgstr "%X%P: помилка: порÑдковий номер екÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ” надто великим: %d\n"
-#: pe-dll.c:1476
+#: pe-dll.c:1477
#, c-format
msgid "Info: resolving %s by linking to %s (auto-import)\n"
msgstr "ІнформаціÑ: визначаємо %s компонуваннÑм з %s (автоімпортуваннÑ)\n"
-#: pe-dll.c:1482
+#: pe-dll.c:1483
msgid "%P: warning: auto-importing has been activated without --enable-auto-import specified on the command line; this should work unless it involves constant data structures referencing symbols from auto-imported DLLs\n"
msgstr "%P: попередженнÑ: Ð°Ð²Ñ‚Ð¾Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð°Ð´Ñ–Ñно без вказаного --enable-auto-import у командному Ñ€Ñдку. Це має Ñпрацювати, Ñкщо у автоматично імпортованих DLL немає Ñимволів з поÑиланнÑм на Ñталі Ñтруктури даних.\n"
-#: pe-dll.c:1553
+#: pe-dll.c:1554
msgid "%P: zero vma section reloc detected: `%s' #%d f=%d\n"
msgstr "%P: виÑвлено нульове переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ vma: «%s» #%d f=%d\n"
-#: pe-dll.c:1636
+#: pe-dll.c:1637
msgid "%P: base relocation for section `%s' above .reloc section\n"
msgstr "%P: переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¾Ñнови Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ «%s» у міÑце над розділом .reloc\n"
-#: pe-dll.c:1685
+#: pe-dll.c:1686
#, c-format
msgid "%X%P: error: %d-bit reloc in dll\n"
msgstr "%X%P: помилка: %d-бітове переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ dll\n"
-#: pe-dll.c:1810
+#: pe-dll.c:1811
#, c-format
msgid "%P: can't open output def file %s\n"
msgstr "%P: не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл def, %s, Ð´Ð»Ñ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ…\n"
-#: pe-dll.c:1961
+#: pe-dll.c:1962
#, c-format
msgid "; no contents available\n"
msgstr "; вміÑÑ‚ недоÑтупний\n"
-#: pe-dll.c:2820
+#: pe-dll.c:2822
msgid "%X%P: %C: variable '%pT' can't be auto-imported; please read the documentation for ld's --enable-auto-import for details\n"
msgstr "%X%P: %C: змінну «%pT» не може бути імпортовано у автоматичному режимі. Будь лаÑка, ознайомтеÑÑ Ð· документацією до параметра --enable-auto-import ld, щоб дізнатиÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ.\n"
-#: pe-dll.c:2847
+#: pe-dll.c:2850
#, c-format
msgid "%X%P: can't open .lib file: %s\n"
msgstr "%X%P: не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл .lib: %s\n"
-#: pe-dll.c:2853
+#: pe-dll.c:2856
#, c-format
msgid "Creating library file: %s\n"
msgstr "Створюємо файл бібліотеки: %s\n"
-#: pe-dll.c:2883
+#: pe-dll.c:2886
msgid "%X%P: bfd_openr %s: %E\n"
msgstr "%X%P: bfd_openr %s: %E\n"
-#: pe-dll.c:2895
+#: pe-dll.c:2898
msgid "%X%P: %s(%s): can't find member in non-archive file"
msgstr "%X%P: %s(%s): не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ елемент у неархівному файлі"
-#: pe-dll.c:2909
+#: pe-dll.c:2912
msgid "%X%P: %s(%s): can't find member in archive"
msgstr "%X%P: %s(%s): не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ елемент у архіві"
-#: pe-dll.c:3174
+#: pe-dll.c:3177
msgid "%X%P: add symbols %s: %E\n"
msgstr "%X%P: Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ñимволів %s: %E\n"
-#: pe-dll.c:3361
+#: pe-dll.c:3365
msgid "%X%P: open %s: %E\n"
msgstr "%X%P: Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ñ‚Ñ %s: %E\n"
-#: pe-dll.c:3370
+#: pe-dll.c:3374
msgid "%X%P: %s: this doesn't appear to be a DLL\n"
msgstr "%X%P: %s: здаєтьÑÑ, ще не DLL\n"
-#: pe-dll.c:3575
+#: pe-dll.c:3579
msgid "%X%P: error: can't use long section names on this arch\n"
msgstr "%X%P: помилка: на цій архітектурі не можна викориÑтовувати довгі назви розділів\n"
-#: plugin.c:233 plugin.c:279
+#: plugin.c:236 plugin.c:282
msgid "<no plugin>"
msgstr "<немає додатка>"
-#: plugin.c:248 plugin.c:1100
+#: plugin.c:251 plugin.c:1111
msgid "%F%P: %s: error loading plugin: %s\n"
msgstr "%F%P: %s: помилка під Ñ‡Ð°Ñ Ñпроби завантажити додаток: %s\n"
-#: plugin.c:255
+#: plugin.c:258
msgid "%P: %s: duplicated plugin\n"
msgstr "%P: %s: Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð´Ð¾Ð´Ð°Ñ‚ÐºÐ°\n"
-#: plugin.c:341
+#: plugin.c:344
msgid "%F%P: could not create dummy IR bfd: %E\n"
msgstr "%F%P: не вдалоÑÑ Ñтворити шаблон bfd IR: %E\n"
-#: plugin.c:422
+#: plugin.c:425
msgid "%F%P: %s: non-ELF symbol in ELF BFD!\n"
msgstr "%F%P: %s: не-ELF Ñимвол у BFD ELF!\n"
-#: plugin.c:433
+#: plugin.c:436
msgid "%F%P: unknown ELF symbol visibility: %d!\n"
msgstr "%F%P: невідоме Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð¸Ð´Ð¸Ð¼Ð¾ÑÑ‚Ñ– Ñимволу ELF: %d!\n"
-#: plugin.c:542
+#: plugin.c:545
msgid "%F%P: unsupported input file size: %s (%ld bytes)\n"
msgstr "%F%P: непідтримуваний розмір файла вхідних даних: %s (%ld байтів)\n"
-#: plugin.c:679
+#: plugin.c:690
#, c-format
msgid "unknown LTO kind value %x"
msgstr "невідоме Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ‚Ð¸Ð¿Ñƒ LTO, %x"
-#: plugin.c:705
+#: plugin.c:716
#, c-format
msgid "unknown LTO resolution value %x"
msgstr "невідоме Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ð²'Ñзку LTO, %x"
-#: plugin.c:725
+#: plugin.c:736
#, c-format
msgid "unknown LTO visibility value %x"
msgstr "невідоме Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð¸Ð´Ð¸Ð¼Ð¾ÑÑ‚Ñ– LTO, %x"
#. We should not have a new, indirect or warning symbol here.
-#: plugin.c:805
+#: plugin.c:816
msgid "%F%P: %s: plugin symbol table corrupt (sym type %d)\n"
msgstr "%F%P: %s: пошкоджено таблицю Ñимволів додатка (тип Ñимволів %d)\n"
-#: plugin.c:867
+#: plugin.c:878
msgid "%P: %pB: symbol `%s' definition: %s, visibility: %s, resolution: %s\n"
msgstr "%P: %pB: Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñимволу «%s»: %s, видиміÑÑ‚ÑŒ: %s, розв’ÑзаннÑ: %s\n"
-#: plugin.c:944
+#: plugin.c:955
msgid "%P: warning: "
msgstr "%P: попередженнÑ: "
-#: plugin.c:955
+#: plugin.c:966
msgid "%P: error: "
msgstr "%P: помилка: "
-#: plugin.c:1107
+#: plugin.c:1118
msgid "%F%P: %s: plugin error: %d\n"
msgstr "%F%P: %s: помилка додатка: %d\n"
-#: plugin.c:1162
+#: plugin.c:1173
msgid "%F%P: plugin_strdup failed to allocate memory: %s\n"
msgstr "%F%P: plugin_strdup не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ пам’ÑÑ‚ÑŒ: %s\n"
-#: plugin.c:1199
+#: plugin.c:1210
msgid "%F%P: plugin failed to allocate memory for input: %s\n"
msgstr "%F%P: додатку не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ пам’ÑÑ‚ÑŒ Ð´Ð»Ñ Ð²Ñ…Ñ–Ð´Ð½Ð¸Ñ… даних: %s\n"
-#: plugin.c:1226
+#: plugin.c:1238
msgid "%F%P: %s: plugin reported error claiming file\n"
msgstr "%F%P: %s: додатком повідомлено про помилку під Ñ‡Ð°Ñ Ñпроби Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð°\n"
-#: plugin.c:1337
+#: plugin.c:1349
msgid "%P: %s: error in plugin cleanup: %d (ignored)\n"
msgstr "%P: %s: помилка під Ñ‡Ð°Ñ ÑÐ¿Ð¾Ñ€Ð¾Ð¶Ð½ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… додатка: %d (проігноровано)\n"
#: eaarch64cloudabi.c:223 eaarch64cloudabib.c:223 eaarch64elf.c:222
#: eaarch64elf32.c:222 eaarch64elf32b.c:222 eaarch64elfb.c:222
-#: eaarch64fbsd.c:223 eaarch64fbsdb.c:223 eaarch64linux.c:223
-#: eaarch64linux32.c:223 eaarch64linux32b.c:223 eaarch64linuxb.c:223
-#: earmelf.c:292 earmelf_fbsd.c:292 earmelf_fuchsia.c:293 earmelf_linux.c:293
-#: earmelf_linux_eabi.c:293 earmelf_linux_fdpiceabi.c:293 earmelf_nacl.c:293
-#: earmelf_nbsd.c:292 earmelf_phoenix.c:293 earmelf_vxworks.c:292
-#: earmelfb.c:292 earmelfb_fbsd.c:292 earmelfb_fuchsia.c:293
-#: earmelfb_linux.c:293 earmelfb_linux_eabi.c:293
-#: earmelfb_linux_fdpiceabi.c:293 earmelfb_nacl.c:293 earmelfb_nbsd.c:292
-#: earmnto.c:292 eavr1.c:178 eavr2.c:178 eavr25.c:178 eavr3.c:178 eavr31.c:178
-#: eavr35.c:178 eavr4.c:178 eavr5.c:178 eavr51.c:178 eavr6.c:178
-#: eavrtiny.c:178 eavrxmega1.c:178 eavrxmega2.c:178 eavrxmega3.c:178
-#: eavrxmega4.c:178 eavrxmega5.c:178 eavrxmega6.c:178 eavrxmega7.c:178
-#: ecskyelf.c:210 ecskyelf_linux.c:210 eelf32b4300.c:205 eelf32bmip.c:205
-#: eelf32bmipn32.c:219 eelf32bsmip.c:219 eelf32btsmip.c:205
-#: eelf32btsmip_fbsd.c:205 eelf32btsmipn32.c:205 eelf32btsmipn32_fbsd.c:205
-#: eelf32ebmip.c:205 eelf32ebmipvxworks.c:205 eelf32elmip.c:205
-#: eelf32elmipvxworks.c:205 eelf32l4300.c:205 eelf32lmip.c:205
-#: eelf32lr5900.c:205 eelf32lr5900n32.c:205 eelf32lsmip.c:205
+#: eaarch64fbsd.c:223 eaarch64fbsdb.c:223 eaarch64haiku.c:223
+#: eaarch64linux.c:223 eaarch64linux32.c:223 eaarch64linux32b.c:223
+#: eaarch64linuxb.c:223 earmelf.c:292 earmelf_fbsd.c:292 earmelf_fuchsia.c:293
+#: earmelf_haiku.c:293 earmelf_linux.c:293 earmelf_linux_eabi.c:293
+#: earmelf_linux_fdpiceabi.c:293 earmelf_nacl.c:293 earmelf_nbsd.c:292
+#: earmelf_phoenix.c:293 earmelf_vxworks.c:292 earmelfb.c:292
+#: earmelfb_fbsd.c:292 earmelfb_fuchsia.c:293 earmelfb_linux.c:293
+#: earmelfb_linux_eabi.c:293 earmelfb_linux_fdpiceabi.c:293
+#: earmelfb_nacl.c:293 earmelfb_nbsd.c:292 earmnto.c:292 eavr1.c:178
+#: eavr2.c:178 eavr25.c:178 eavr3.c:178 eavr31.c:178 eavr35.c:178 eavr4.c:178
+#: eavr5.c:178 eavr51.c:178 eavr6.c:178 eavrtiny.c:178 eavrxmega1.c:178
+#: eavrxmega2.c:178 eavrxmega3.c:178 eavrxmega4.c:178 eavrxmega5.c:178
+#: eavrxmega6.c:178 eavrxmega7.c:178 ecskyelf.c:210 ecskyelf_linux.c:210
+#: eelf32b4300.c:205 eelf32bmip.c:205 eelf32bmipn32.c:219 eelf32bsmip.c:219
+#: eelf32btsmip.c:205 eelf32btsmip_fbsd.c:205 eelf32btsmipn32.c:205
+#: eelf32btsmipn32_fbsd.c:205 eelf32ebmip.c:205 eelf32ebmipvxworks.c:205
+#: eelf32elmip.c:205 eelf32elmipvxworks.c:205 eelf32l4300.c:205
+#: eelf32lmip.c:205 eelf32lr5900.c:205 eelf32lr5900n32.c:205 eelf32lsmip.c:205
#: eelf32ltsmip.c:205 eelf32ltsmip_fbsd.c:205 eelf32ltsmipn32.c:205
#: eelf32ltsmipn32_fbsd.c:205 eelf32metag.c:206 eelf32mipswindiss.c:205
#: eelf64bmip.c:219 eelf64btsmip.c:205 eelf64btsmip_fbsd.c:205
#: eelf64lppc.c:482 eelf64lppc_fbsd.c:482 eelf64ltsmip.c:205
-#: eelf64ltsmip_fbsd.c:205 eelf64ppc.c:482 eelf64ppc_fbsd.c:482 ehppaelf.c:230
-#: ehppalinux.c:230 ehppanbsd.c:230 ehppaobsd.c:230 em68hc11elf.c:295
-#: em68hc11elfb.c:295 em68hc12elf.c:295 em68hc12elfb.c:295 enios2elf.c:223
-#: enios2linux.c:223
+#: eelf64ltsmip_fbsd.c:205 eelf64ppc.c:482 eelf64ppc_fbsd.c:482
+#: eelf_mipsel_haiku.c:205 ehppaelf.c:230 ehppalinux.c:230 ehppanbsd.c:230
+#: ehppaobsd.c:230 em68hc11elf.c:295 em68hc11elfb.c:295 em68hc12elf.c:295
+#: em68hc12elfb.c:295 enios2elf.c:223 enios2linux.c:223
msgid "%X%P: can not make stub section: %E\n"
msgstr "%X%P: не вдалоÑÑ Ñтворити фіктивний розділ: %E\n"
#: eaarch64cloudabi.c:266 eaarch64cloudabib.c:266 eaarch64elf.c:265
#: eaarch64elf32.c:265 eaarch64elf32b.c:265 eaarch64elfb.c:265
-#: eaarch64fbsd.c:266 eaarch64fbsdb.c:266 eaarch64linux.c:266
-#: eaarch64linux32.c:266 eaarch64linux32b.c:266 eaarch64linuxb.c:266
-#: earcelf.c:96 earclinux.c:97 earclinux_nps.c:97 earcv2elf.c:96
-#: earcv2elfx.c:96 earmelf.c:404 earmelf_fbsd.c:404 earmelf_fuchsia.c:405
-#: earmelf_linux.c:405 earmelf_linux_eabi.c:405 earmelf_linux_fdpiceabi.c:405
-#: earmelf_nacl.c:405 earmelf_nbsd.c:404 earmelf_phoenix.c:405
-#: earmelf_vxworks.c:404 earmelfb.c:404 earmelfb_fbsd.c:404
-#: earmelfb_fuchsia.c:405 earmelfb_linux.c:405 earmelfb_linux_eabi.c:405
+#: eaarch64fbsd.c:266 eaarch64fbsdb.c:266 eaarch64haiku.c:266
+#: eaarch64linux.c:266 eaarch64linux32.c:266 eaarch64linux32b.c:266
+#: eaarch64linuxb.c:266 earcelf.c:96 earclinux.c:97 earclinux_nps.c:97
+#: earcv2elf.c:96 earcv2elfx.c:96 earmelf.c:404 earmelf_fbsd.c:404
+#: earmelf_fuchsia.c:405 earmelf_haiku.c:405 earmelf_linux.c:405
+#: earmelf_linux_eabi.c:405 earmelf_linux_fdpiceabi.c:405 earmelf_nacl.c:405
+#: earmelf_nbsd.c:404 earmelf_phoenix.c:405 earmelf_vxworks.c:404
+#: earmelfb.c:404 earmelfb_fbsd.c:404 earmelfb_fuchsia.c:405
+#: earmelfb_linux.c:405 earmelfb_linux_eabi.c:405
#: earmelfb_linux_fdpiceabi.c:405 earmelfb_nacl.c:405 earmelfb_nbsd.c:404
#: earmnto.c:404 eavr1.c:299 eavr2.c:299 eavr25.c:299 eavr3.c:299 eavr31.c:299
#: eavr35.c:299 eavr4.c:299 eavr5.c:299 eavr51.c:299 eavr6.c:299
#: eavrtiny.c:299 eavrxmega1.c:299 eavrxmega2.c:299 eavrxmega3.c:299
#: eavrxmega4.c:299 eavrxmega5.c:299 eavrxmega6.c:299 eavrxmega7.c:299
#: ecriself.c:96 ecrislinux.c:97 ed10velf.c:96 eelf32_sparc.c:97
-#: eelf32_sparc_sol2.c:229 eelf32_sparc_vxworks.c:126 eelf32_spu.c:630
+#: eelf32_sparc_sol2.c:229 eelf32_sparc_vxworks.c:126 eelf32_spu.c:766
#: eelf32_tic6x_be.c:181 eelf32_tic6x_elf_be.c:181 eelf32_tic6x_elf_le.c:181
#: eelf32_tic6x_le.c:181 eelf32_tic6x_linux_be.c:181
#: eelf32_tic6x_linux_le.c:181 eelf32_x86_64.c:121 eelf32am33lin.c:96
@@ -2824,17 +2840,18 @@ msgstr "%X%P: не вдалоÑÑ Ñтворити фіктивний розді
#: eelf32cr16.c:246 eelf32crx.c:133 eelf32ebmip.c:293 eelf32ebmipvxworks.c:322
#: eelf32elmip.c:293 eelf32elmipvxworks.c:322 eelf32epiphany.c:96
#: eelf32epiphany_4x4.c:98 eelf32frvfd.c:96 eelf32ip2k.c:96 eelf32l4300.c:293
-#: eelf32lm32.c:96 eelf32lm32fd.c:96 eelf32lmip.c:293 eelf32lppc.c:305
-#: eelf32lppclinux.c:305 eelf32lppcnto.c:305 eelf32lppcsim.c:305
-#: eelf32lr5900.c:293 eelf32lr5900n32.c:292 eelf32lriscv.c:89
-#: eelf32lriscv_ilp32.c:89 eelf32lriscv_ilp32f.c:89 eelf32lsmip.c:293
-#: eelf32ltsmip.c:293 eelf32ltsmip_fbsd.c:293 eelf32ltsmipn32.c:293
-#: eelf32ltsmipn32_fbsd.c:293 eelf32m32c.c:107 eelf32mb_linux.c:97
-#: eelf32mbel_linux.c:97 eelf32mcore.c:96 eelf32mep.c:96 eelf32metag.c:256
-#: eelf32microblaze.c:96 eelf32microblazeel.c:96 eelf32mipswindiss.c:292
-#: eelf32moxie.c:96 eelf32or1k.c:97 eelf32or1k_linux.c:97 eelf32ppc.c:305
-#: eelf32ppc_fbsd.c:305 eelf32ppclinux.c:305 eelf32ppcnto.c:305
-#: eelf32ppcsim.c:305 eelf32ppcvxworks.c:279 eelf32ppcwindiss.c:305
+#: eelf32lm32.c:96 eelf32lm32fd.c:96 eelf32lmip.c:293 eelf32loongarch.c:88
+#: eelf32lppc.c:317 eelf32lppclinux.c:317 eelf32lppcnto.c:317
+#: eelf32lppcsim.c:317 eelf32lr5900.c:293 eelf32lr5900n32.c:292
+#: eelf32lriscv.c:89 eelf32lriscv_ilp32.c:89 eelf32lriscv_ilp32f.c:89
+#: eelf32lsmip.c:293 eelf32ltsmip.c:293 eelf32ltsmip_fbsd.c:293
+#: eelf32ltsmipn32.c:293 eelf32ltsmipn32_fbsd.c:293 eelf32m32c.c:107
+#: eelf32mb_linux.c:97 eelf32mbel_linux.c:97 eelf32mcore.c:96 eelf32mep.c:96
+#: eelf32metag.c:256 eelf32microblaze.c:96 eelf32microblazeel.c:96
+#: eelf32mipswindiss.c:292 eelf32moxie.c:96 eelf32or1k.c:97
+#: eelf32or1k_linux.c:97 eelf32ppc.c:317 eelf32ppc_fbsd.c:317
+#: eelf32ppchaiku.c:317 eelf32ppclinux.c:317 eelf32ppcnto.c:317
+#: eelf32ppcsim.c:317 eelf32ppcvxworks.c:291 eelf32ppcwindiss.c:317
#: eelf32rl78.c:96 eelf32rx.c:112 eelf32rx_linux.c:109 eelf32tilegx.c:97
#: eelf32tilegx_be.c:97 eelf32tilepro.c:97 eelf32vax.c:96 eelf32visium.c:96
#: eelf32xc16x.c:96 eelf32xc16xl.c:96 eelf32xc16xs.c:96 eelf32xstormy16.c:107
@@ -2844,15 +2861,16 @@ msgstr "%X%P: не вдалоÑÑ Ñтворити фіктивний розді
#: eelf64alpha.c:180 eelf64alpha_fbsd.c:180 eelf64alpha_nbsd.c:180
#: eelf64bmip.c:307 eelf64bpf.c:96 eelf64briscv.c:89 eelf64briscv_lp64.c:89
#: eelf64briscv_lp64f.c:89 eelf64btsmip.c:293 eelf64btsmip_fbsd.c:293
-#: eelf64hppa.c:96 eelf64lppc.c:592 eelf64lppc_fbsd.c:592 eelf64lriscv.c:89
-#: eelf64lriscv_lp64.c:89 eelf64lriscv_lp64f.c:89 eelf64ltsmip.c:293
-#: eelf64ltsmip_fbsd.c:293 eelf64mmix.c:207 eelf64ppc.c:592
+#: eelf64hppa.c:96 eelf64loongarch.c:88 eelf64lppc.c:592 eelf64lppc_fbsd.c:592
+#: eelf64lriscv.c:89 eelf64lriscv_lp64.c:89 eelf64lriscv_lp64f.c:89
+#: eelf64ltsmip.c:293 eelf64ltsmip_fbsd.c:293 eelf64mmix.c:207 eelf64ppc.c:592
#: eelf64ppc_fbsd.c:592 eelf64rdos.c:112 eelf64tilegx.c:97
#: eelf64tilegx_be.c:97 eelf_i386.c:121 eelf_i386_be.c:120
-#: eelf_i386_fbsd.c:121 eelf_i386_ldso.c:121 eelf_i386_sol2.c:253
-#: eelf_i386_vxworks.c:150 eelf_iamcu.c:121 eelf_k1om.c:121
-#: eelf_k1om_fbsd.c:121 eelf_l1om.c:121 eelf_l1om_fbsd.c:121 eelf_s390.c:97
-#: eelf_x86_64.c:121 eelf_x86_64_cloudabi.c:121 eelf_x86_64_fbsd.c:121
+#: eelf_i386_fbsd.c:121 eelf_i386_haiku.c:121 eelf_i386_ldso.c:121
+#: eelf_i386_sol2.c:253 eelf_i386_vxworks.c:150 eelf_iamcu.c:121
+#: eelf_k1om.c:121 eelf_k1om_fbsd.c:121 eelf_l1om.c:121 eelf_l1om_fbsd.c:121
+#: eelf_mipsel_haiku.c:293 eelf_s390.c:97 eelf_x86_64.c:121
+#: eelf_x86_64_cloudabi.c:121 eelf_x86_64_fbsd.c:121 eelf_x86_64_haiku.c:121
#: eelf_x86_64_sol2.c:253 eh8300elf.c:96 eh8300elf_linux.c:96 eh8300helf.c:96
#: eh8300helf_linux.c:96 eh8300hnelf.c:96 eh8300self.c:96
#: eh8300self_linux.c:96 eh8300snelf.c:96 eh8300sxelf.c:96
@@ -2873,67 +2891,69 @@ msgstr "%X%P: Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ .eh_frame/.stab: %E\n"
#: eaarch64cloudabi.c:282 eaarch64cloudabib.c:282 eaarch64elf.c:281
#: eaarch64elf32.c:281 eaarch64elf32b.c:281 eaarch64elfb.c:281
-#: eaarch64fbsd.c:282 eaarch64fbsdb.c:282 eaarch64linux.c:282
-#: eaarch64linux32.c:282 eaarch64linux32b.c:282 eaarch64linuxb.c:282
-#: earmelf.c:419 earmelf_fbsd.c:419 earmelf_fuchsia.c:420 earmelf_linux.c:420
-#: earmelf_linux_eabi.c:420 earmelf_linux_fdpiceabi.c:420 earmelf_nacl.c:420
-#: earmelf_nbsd.c:419 earmelf_phoenix.c:420 earmelf_vxworks.c:419
-#: earmelfb.c:419 earmelfb_fbsd.c:419 earmelfb_fuchsia.c:420
-#: earmelfb_linux.c:420 earmelfb_linux_eabi.c:420
-#: earmelfb_linux_fdpiceabi.c:420 earmelfb_nacl.c:420 earmelfb_nbsd.c:419
-#: earmnto.c:419 ecskyelf.c:260 ecskyelf_linux.c:260
+#: eaarch64fbsd.c:282 eaarch64fbsdb.c:282 eaarch64haiku.c:282
+#: eaarch64linux.c:282 eaarch64linux32.c:282 eaarch64linux32b.c:282
+#: eaarch64linuxb.c:282 earmelf.c:419 earmelf_fbsd.c:419 earmelf_fuchsia.c:420
+#: earmelf_haiku.c:420 earmelf_linux.c:420 earmelf_linux_eabi.c:420
+#: earmelf_linux_fdpiceabi.c:420 earmelf_nacl.c:420 earmelf_nbsd.c:419
+#: earmelf_phoenix.c:420 earmelf_vxworks.c:419 earmelfb.c:419
+#: earmelfb_fbsd.c:419 earmelfb_fuchsia.c:420 earmelfb_linux.c:420
+#: earmelfb_linux_eabi.c:420 earmelfb_linux_fdpiceabi.c:420
+#: earmelfb_nacl.c:420 earmelfb_nbsd.c:419 earmnto.c:419 ecskyelf.c:260
+#: ecskyelf_linux.c:260
msgid "%X%P: could not compute sections lists for stub generation: %E\n"
msgstr "%X%P: не вдалоÑÑ Ð¾Ð±Ñ‡Ð¸Ñтити ÑпиÑки розділів Ð´Ð»Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ¸: %E\n"
#: eaarch64cloudabi.c:297 eaarch64cloudabib.c:297 eaarch64elf.c:296
#: eaarch64elf32.c:296 eaarch64elf32b.c:296 eaarch64elfb.c:296
-#: eaarch64fbsd.c:297 eaarch64fbsdb.c:297 eaarch64linux.c:297
-#: eaarch64linux32.c:297 eaarch64linux32b.c:297 eaarch64linuxb.c:297
-#: earmelf.c:434 earmelf_fbsd.c:434 earmelf_fuchsia.c:435 earmelf_linux.c:435
-#: earmelf_linux_eabi.c:435 earmelf_linux_fdpiceabi.c:435 earmelf_nacl.c:435
-#: earmelf_nbsd.c:434 earmelf_phoenix.c:435 earmelf_vxworks.c:434
-#: earmelfb.c:434 earmelfb_fbsd.c:434 earmelfb_fuchsia.c:435
-#: earmelfb_linux.c:435 earmelfb_linux_eabi.c:435
-#: earmelfb_linux_fdpiceabi.c:435 earmelfb_nacl.c:435 earmelfb_nbsd.c:434
-#: earmnto.c:434 eavr1.c:129 eavr1.c:192 eavr2.c:129 eavr2.c:192 eavr25.c:129
-#: eavr25.c:192 eavr3.c:129 eavr3.c:192 eavr31.c:129 eavr31.c:192 eavr35.c:129
-#: eavr35.c:192 eavr4.c:129 eavr4.c:192 eavr5.c:129 eavr5.c:192 eavr51.c:129
-#: eavr51.c:192 eavr6.c:129 eavr6.c:192 eavrtiny.c:129 eavrtiny.c:192
-#: eavrxmega1.c:129 eavrxmega1.c:192 eavrxmega2.c:129 eavrxmega2.c:192
-#: eavrxmega3.c:129 eavrxmega3.c:192 eavrxmega4.c:129 eavrxmega4.c:192
-#: eavrxmega5.c:129 eavrxmega5.c:192 eavrxmega6.c:129 eavrxmega6.c:192
-#: eavrxmega7.c:129 eavrxmega7.c:192 eelf32metag.c:271 eelf32metag.c:285
-#: eelf64lppc.c:535 eelf64lppc.c:554 eelf64lppc.c:581 eelf64lppc_fbsd.c:535
-#: eelf64lppc_fbsd.c:554 eelf64lppc_fbsd.c:581 eelf64ppc.c:535 eelf64ppc.c:554
-#: eelf64ppc.c:581 eelf64ppc_fbsd.c:535 eelf64ppc_fbsd.c:554
-#: eelf64ppc_fbsd.c:581 ehppaelf.c:295 ehppaelf.c:310 ehppalinux.c:295
-#: ehppalinux.c:310 ehppanbsd.c:295 ehppanbsd.c:310 ehppaobsd.c:295
-#: ehppaobsd.c:310 em68hc11elf.c:90 em68hc11elf.c:100 em68hc11elf.c:317
-#: em68hc11elfb.c:90 em68hc11elfb.c:100 em68hc11elfb.c:317 em68hc12elf.c:90
-#: em68hc12elf.c:100 em68hc12elf.c:317 em68hc12elfb.c:90 em68hc12elfb.c:100
-#: em68hc12elfb.c:317 enios2elf.c:290 enios2elf.c:303 enios2linux.c:290
-#: enios2linux.c:303
+#: eaarch64fbsd.c:297 eaarch64fbsdb.c:297 eaarch64haiku.c:297
+#: eaarch64linux.c:297 eaarch64linux32.c:297 eaarch64linux32b.c:297
+#: eaarch64linuxb.c:297 earmelf.c:434 earmelf_fbsd.c:434 earmelf_fuchsia.c:435
+#: earmelf_haiku.c:435 earmelf_linux.c:435 earmelf_linux_eabi.c:435
+#: earmelf_linux_fdpiceabi.c:435 earmelf_nacl.c:435 earmelf_nbsd.c:434
+#: earmelf_phoenix.c:435 earmelf_vxworks.c:434 earmelfb.c:434
+#: earmelfb_fbsd.c:434 earmelfb_fuchsia.c:435 earmelfb_linux.c:435
+#: earmelfb_linux_eabi.c:435 earmelfb_linux_fdpiceabi.c:435
+#: earmelfb_nacl.c:435 earmelfb_nbsd.c:434 earmnto.c:434 eavr1.c:129
+#: eavr1.c:192 eavr2.c:129 eavr2.c:192 eavr25.c:129 eavr25.c:192 eavr3.c:129
+#: eavr3.c:192 eavr31.c:129 eavr31.c:192 eavr35.c:129 eavr35.c:192 eavr4.c:129
+#: eavr4.c:192 eavr5.c:129 eavr5.c:192 eavr51.c:129 eavr51.c:192 eavr6.c:129
+#: eavr6.c:192 eavrtiny.c:129 eavrtiny.c:192 eavrxmega1.c:129 eavrxmega1.c:192
+#: eavrxmega2.c:129 eavrxmega2.c:192 eavrxmega3.c:129 eavrxmega3.c:192
+#: eavrxmega4.c:129 eavrxmega4.c:192 eavrxmega5.c:129 eavrxmega5.c:192
+#: eavrxmega6.c:129 eavrxmega6.c:192 eavrxmega7.c:129 eavrxmega7.c:192
+#: eelf32metag.c:271 eelf32metag.c:285 eelf64lppc.c:535 eelf64lppc.c:554
+#: eelf64lppc.c:581 eelf64lppc_fbsd.c:535 eelf64lppc_fbsd.c:554
+#: eelf64lppc_fbsd.c:581 eelf64ppc.c:535 eelf64ppc.c:554 eelf64ppc.c:581
+#: eelf64ppc_fbsd.c:535 eelf64ppc_fbsd.c:554 eelf64ppc_fbsd.c:581
+#: ehppaelf.c:295 ehppaelf.c:310 ehppalinux.c:295 ehppalinux.c:310
+#: ehppanbsd.c:295 ehppanbsd.c:310 ehppaobsd.c:295 ehppaobsd.c:310
+#: em68hc11elf.c:90 em68hc11elf.c:100 em68hc11elf.c:317 em68hc11elfb.c:90
+#: em68hc11elfb.c:100 em68hc11elfb.c:317 em68hc12elf.c:90 em68hc12elf.c:100
+#: em68hc12elf.c:317 em68hc12elfb.c:90 em68hc12elfb.c:100 em68hc12elfb.c:317
+#: enios2elf.c:290 enios2elf.c:303 enios2linux.c:290 enios2linux.c:303
msgid "%X%P: can not size stub section: %E\n"
msgstr "%X%P: неможливо вимірÑти фіктивний розділ: %E\n"
#: eaarch64cloudabi.c:316 eaarch64cloudabib.c:316 eaarch64elf.c:315
#: eaarch64elf32.c:315 eaarch64elf32b.c:315 eaarch64elfb.c:315
-#: eaarch64fbsd.c:316 eaarch64fbsdb.c:316 eaarch64linux.c:316
-#: eaarch64linux32.c:316 eaarch64linux32b.c:316 eaarch64linuxb.c:316
-#: earmelf.c:468 earmelf_fbsd.c:468 earmelf_fuchsia.c:469 earmelf_linux.c:469
-#: earmelf_linux_eabi.c:469 earmelf_linux_fdpiceabi.c:469 earmelf_nacl.c:469
-#: earmelf_nbsd.c:468 earmelf_phoenix.c:469 earmelf_vxworks.c:468
-#: earmelfb.c:468 earmelfb_fbsd.c:468 earmelfb_fuchsia.c:469
-#: earmelfb_linux.c:469 earmelfb_linux_eabi.c:469
-#: earmelfb_linux_fdpiceabi.c:469 earmelfb_nacl.c:469 earmelfb_nbsd.c:468
-#: earmnto.c:468 eavr1.c:201 eavr2.c:201 eavr25.c:201 eavr3.c:201 eavr31.c:201
-#: eavr35.c:201 eavr4.c:201 eavr5.c:201 eavr51.c:201 eavr6.c:201
-#: eavrtiny.c:201 eavrxmega1.c:201 eavrxmega2.c:201 eavrxmega3.c:201
-#: eavrxmega4.c:201 eavrxmega5.c:201 eavrxmega6.c:201 eavrxmega7.c:201
-#: eelf32metag.c:300 eelf64lppc.c:631 eelf64lppc_fbsd.c:631 eelf64ppc.c:631
-#: eelf64ppc_fbsd.c:631 ehppaelf.c:332 ehppalinux.c:332 ehppanbsd.c:332
-#: ehppaobsd.c:332 em68hc11elf.c:321 em68hc11elfb.c:321 em68hc12elf.c:321
-#: em68hc12elfb.c:321 enios2elf.c:318 enios2linux.c:318
+#: eaarch64fbsd.c:316 eaarch64fbsdb.c:316 eaarch64haiku.c:316
+#: eaarch64linux.c:316 eaarch64linux32.c:316 eaarch64linux32b.c:316
+#: eaarch64linuxb.c:316 earmelf.c:468 earmelf_fbsd.c:468 earmelf_fuchsia.c:469
+#: earmelf_haiku.c:469 earmelf_linux.c:469 earmelf_linux_eabi.c:469
+#: earmelf_linux_fdpiceabi.c:469 earmelf_nacl.c:469 earmelf_nbsd.c:468
+#: earmelf_phoenix.c:469 earmelf_vxworks.c:468 earmelfb.c:468
+#: earmelfb_fbsd.c:468 earmelfb_fuchsia.c:469 earmelfb_linux.c:469
+#: earmelfb_linux_eabi.c:469 earmelfb_linux_fdpiceabi.c:469
+#: earmelfb_nacl.c:469 earmelfb_nbsd.c:468 earmnto.c:468 eavr1.c:201
+#: eavr2.c:201 eavr25.c:201 eavr3.c:201 eavr31.c:201 eavr35.c:201 eavr4.c:201
+#: eavr5.c:201 eavr51.c:201 eavr6.c:201 eavrtiny.c:201 eavrxmega1.c:201
+#: eavrxmega2.c:201 eavrxmega3.c:201 eavrxmega4.c:201 eavrxmega5.c:201
+#: eavrxmega6.c:201 eavrxmega7.c:201 eelf32metag.c:300 eelf64lppc.c:631
+#: eelf64lppc_fbsd.c:631 eelf64ppc.c:631 eelf64ppc_fbsd.c:631 ehppaelf.c:332
+#: ehppalinux.c:332 ehppanbsd.c:332 ehppaobsd.c:332 em68hc11elf.c:321
+#: em68hc11elfb.c:321 em68hc12elf.c:321 em68hc12elfb.c:321 enios2elf.c:318
+#: enios2linux.c:318
msgid "%X%P: can not build stubs: %E\n"
msgstr "%X%P: неможливо збирати фіктивні запиÑи: %E\n"
@@ -2964,39 +2984,42 @@ msgstr "%X%P: неможливо збирати фіктивні запиÑи: %
#. same time. Use a link followed by objcopy to change output formats.
#: eaarch64cloudabi.c:334 eaarch64cloudabib.c:334 eaarch64elf.c:333
#: eaarch64elf32.c:333 eaarch64elf32b.c:333 eaarch64elfb.c:333
-#: eaarch64fbsd.c:334 eaarch64fbsdb.c:334 eaarch64linux.c:334
-#: eaarch64linux32.c:334 eaarch64linux32b.c:334 eaarch64linuxb.c:334
-#: earm_wince_pe.c:1426 earmelf.c:540 earmelf_fbsd.c:540 earmelf_fuchsia.c:541
-#: earmelf_linux.c:541 earmelf_linux_eabi.c:541 earmelf_linux_fdpiceabi.c:541
-#: earmelf_nacl.c:541 earmelf_nbsd.c:540 earmelf_phoenix.c:541
-#: earmelf_vxworks.c:540 earmelfb.c:540 earmelfb_fbsd.c:540
-#: earmelfb_fuchsia.c:541 earmelfb_linux.c:541 earmelfb_linux_eabi.c:541
+#: eaarch64fbsd.c:334 eaarch64fbsdb.c:334 eaarch64haiku.c:334
+#: eaarch64linux.c:334 eaarch64linux32.c:334 eaarch64linux32b.c:334
+#: eaarch64linuxb.c:334 earm_wince_pe.c:1426 earmelf.c:540 earmelf_fbsd.c:540
+#: earmelf_fuchsia.c:541 earmelf_haiku.c:541 earmelf_linux.c:541
+#: earmelf_linux_eabi.c:541 earmelf_linux_fdpiceabi.c:541 earmelf_nacl.c:541
+#: earmelf_nbsd.c:540 earmelf_phoenix.c:541 earmelf_vxworks.c:540
+#: earmelfb.c:540 earmelfb_fbsd.c:540 earmelfb_fuchsia.c:541
+#: earmelfb_linux.c:541 earmelfb_linux_eabi.c:541
#: earmelfb_linux_fdpiceabi.c:541 earmelfb_nacl.c:541 earmelfb_nbsd.c:540
#: earmnto.c:540 earmpe.c:1426 eavr1.c:142 eavr2.c:142 eavr25.c:142
#: eavr3.c:142 eavr31.c:142 eavr35.c:142 eavr4.c:142 eavr5.c:142 eavr51.c:142
#: eavr6.c:142 eavrtiny.c:142 eavrxmega1.c:142 eavrxmega2.c:142
#: eavrxmega3.c:142 eavrxmega4.c:142 eavrxmega5.c:142 eavrxmega6.c:142
-#: eavrxmega7.c:142 eelf32briscv.c:128 eelf32briscv_ilp32.c:128
-#: eelf32briscv_ilp32f.c:128 eelf32lriscv.c:128 eelf32lriscv_ilp32.c:128
-#: eelf32lriscv_ilp32f.c:128 eelf64briscv.c:128 eelf64briscv_lp64.c:128
-#: eelf64briscv_lp64f.c:128 eelf64lriscv.c:128 eelf64lriscv_lp64.c:128
-#: eelf64lriscv_lp64f.c:128 ei386pe.c:1426 ei386pe_posix.c:1426
-#: emcorepe.c:1426 ends32belf.c:74 ends32belf16m.c:74 ends32belf_linux.c:74
-#: ends32elf.c:74 ends32elf16m.c:74 ends32elf_linux.c:74 escore3_elf.c:75
-#: escore7_elf.c:75 eshpe.c:1426 ev850.c:91 ev850_rh850.c:91
+#: eavrxmega7.c:142 eelf32briscv.c:124 eelf32briscv_ilp32.c:124
+#: eelf32briscv_ilp32f.c:124 eelf32loongarch.c:106 eelf32lriscv.c:124
+#: eelf32lriscv_ilp32.c:124 eelf32lriscv_ilp32f.c:124 eelf64briscv.c:124
+#: eelf64briscv_lp64.c:124 eelf64briscv_lp64f.c:124 eelf64loongarch.c:106
+#: eelf64lriscv.c:124 eelf64lriscv_lp64.c:124 eelf64lriscv_lp64f.c:124
+#: ei386pe.c:1426 ei386pe_posix.c:1426 emcorepe.c:1426 ends32belf.c:74
+#: ends32belf16m.c:74 ends32belf_linux.c:74 ends32elf.c:74 ends32elf16m.c:74
+#: ends32elf_linux.c:74 escore3_elf.c:75 escore7_elf.c:75 eshpe.c:1426
+#: ev850.c:91 ev850_rh850.c:91
msgid "%F%P: error: cannot change output format whilst linking %s binaries\n"
msgstr "%F%P: помилка: неможливо змінити формат під Ñ‡Ð°Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¸Ñ… файлів %s\n"
#: eaarch64cloudabi.c:570 eaarch64cloudabib.c:570 eaarch64elf.c:569
#: eaarch64elf32.c:569 eaarch64elf32b.c:569 eaarch64elfb.c:569
-#: eaarch64fbsd.c:570 eaarch64fbsdb.c:570 eaarch64linux.c:570
-#: eaarch64linux32.c:570 eaarch64linux32b.c:570 eaarch64linuxb.c:570
-#: earcelf.c:202 earclinux.c:258 earclinux_nps.c:258 earcv2elf.c:186
-#: earcv2elfx.c:186 earmelf.c:812 earmelf_fbsd.c:812 earmelf_fuchsia.c:813
-#: earmelf_linux.c:813 earmelf_linux_eabi.c:813 earmelf_linux_fdpiceabi.c:813
-#: earmelf_nacl.c:813 earmelf_nbsd.c:812 earmelf_phoenix.c:813
-#: earmelf_vxworks.c:848 earmelfb.c:812 earmelfb_fbsd.c:812
-#: earmelfb_fuchsia.c:813 earmelfb_linux.c:813 earmelfb_linux_eabi.c:813
+#: eaarch64fbsd.c:570 eaarch64fbsdb.c:570 eaarch64haiku.c:570
+#: eaarch64linux.c:570 eaarch64linux32.c:570 eaarch64linux32b.c:570
+#: eaarch64linuxb.c:570 earcelf.c:202 earclinux.c:258 earclinux_nps.c:258
+#: earcv2elf.c:186 earcv2elfx.c:186 earmelf.c:812 earmelf_fbsd.c:812
+#: earmelf_fuchsia.c:813 earmelf_haiku.c:813 earmelf_linux.c:813
+#: earmelf_linux_eabi.c:813 earmelf_linux_fdpiceabi.c:813 earmelf_nacl.c:813
+#: earmelf_nbsd.c:812 earmelf_phoenix.c:813 earmelf_vxworks.c:848
+#: earmelfb.c:812 earmelfb_fbsd.c:812 earmelfb_fuchsia.c:813
+#: earmelfb_linux.c:813 earmelfb_linux_eabi.c:813
#: earmelfb_linux_fdpiceabi.c:813 earmelfb_nacl.c:813 earmelfb_nbsd.c:812
#: earmnto.c:787 eavr1.c:409 eavr2.c:409 eavr25.c:409 eavr3.c:409 eavr31.c:409
#: eavr35.c:409 eavr4.c:409 eavr5.c:409 eavr51.c:409 eavr6.c:409
@@ -3004,46 +3027,48 @@ msgstr "%F%P: помилка: неможливо змінити формат пÑ
#: eavrxmega4.c:409 eavrxmega5.c:409 eavrxmega6.c:409 eavrxmega7.c:409
#: ecriself.c:201 ecrislinux.c:233 ecskyelf.c:445 ecskyelf_linux.c:502
#: ed10velf.c:186 eelf32_sparc.c:258 eelf32_sparc_sol2.c:390
-#: eelf32_sparc_vxworks.c:295 eelf32_spu.c:783 eelf32_tic6x_be.c:369
+#: eelf32_sparc_vxworks.c:295 eelf32_spu.c:919 eelf32_tic6x_be.c:369
#: eelf32_tic6x_elf_be.c:369 eelf32_tic6x_elf_le.c:369 eelf32_tic6x_le.c:369
#: eelf32_tic6x_linux_be.c:369 eelf32_tic6x_linux_le.c:369
-#: eelf32_x86_64.c:5327 eelf32am33lin.c:232 eelf32b4300.c:473 eelf32bfin.c:250
-#: eelf32bfinfd.c:275 eelf32bmip.c:473 eelf32bmipn32.c:487 eelf32briscv.c:330
-#: eelf32briscv_ilp32.c:330 eelf32briscv_ilp32f.c:330 eelf32bsmip.c:487
+#: eelf32_x86_64.c:5349 eelf32am33lin.c:232 eelf32b4300.c:473 eelf32bfin.c:250
+#: eelf32bfinfd.c:275 eelf32bmip.c:473 eelf32bmipn32.c:487 eelf32briscv.c:326
+#: eelf32briscv_ilp32.c:326 eelf32briscv_ilp32f.c:326 eelf32bsmip.c:487
#: eelf32btsmip.c:473 eelf32btsmip_fbsd.c:473 eelf32btsmipn32.c:473
#: eelf32btsmipn32_fbsd.c:473 eelf32cr16.c:336 eelf32crx.c:223
#: eelf32ebmip.c:473 eelf32ebmipvxworks.c:508 eelf32elmip.c:473
#: eelf32elmipvxworks.c:508 eelf32epiphany.c:201 eelf32epiphany_4x4.c:188
#: eelf32frvfd.c:257 eelf32ip2k.c:201 eelf32l4300.c:473 eelf32lm32.c:201
-#: eelf32lm32fd.c:257 eelf32lmip.c:473 eelf32lppc.c:509 eelf32lppclinux.c:509
-#: eelf32lppcnto.c:509 eelf32lppcsim.c:509 eelf32lr5900.c:442
-#: eelf32lr5900n32.c:441 eelf32lriscv.c:330 eelf32lriscv_ilp32.c:330
-#: eelf32lriscv_ilp32f.c:330 eelf32lsmip.c:473 eelf32ltsmip.c:473
-#: eelf32ltsmip_fbsd.c:473 eelf32ltsmipn32.c:473 eelf32ltsmipn32_fbsd.c:473
-#: eelf32m32c.c:212 eelf32mb_linux.c:258 eelf32mbel_linux.c:258
-#: eelf32mcore.c:207 eelf32mep.c:186 eelf32metag.c:507 eelf32microblaze.c:186
-#: eelf32microblazeel.c:186 eelf32mipswindiss.c:416 eelf32moxie.c:201
-#: eelf32or1k.c:202 eelf32or1k_linux.c:258 eelf32ppc.c:509
-#: eelf32ppc_fbsd.c:509 eelf32ppclinux.c:509 eelf32ppcnto.c:509
-#: eelf32ppcsim.c:509 eelf32ppcvxworks.c:483 eelf32ppcwindiss.c:509
-#: eelf32rl78.c:201 eelf32rx.c:229 eelf32rx_linux.c:214 eelf32tilegx.c:258
-#: eelf32tilegx_be.c:258 eelf32tilepro.c:258 eelf32vax.c:232
-#: eelf32visium.c:186 eelf32xc16x.c:186 eelf32xc16xl.c:186 eelf32xc16xs.c:186
-#: eelf32xstormy16.c:197 eelf32xtensa.c:2179 eelf32z80.c:213 eelf64_aix.c:232
-#: eelf64_ia64.c:289 eelf64_ia64_fbsd.c:289 eelf64_s390.c:328
-#: eelf64_sparc.c:258 eelf64_sparc_fbsd.c:258 eelf64_sparc_sol2.c:390
-#: eelf64alpha.c:351 eelf64alpha_fbsd.c:351 eelf64alpha_nbsd.c:351
-#: eelf64bmip.c:487 eelf64bpf.c:186 eelf64briscv.c:330 eelf64briscv_lp64.c:330
-#: eelf64briscv_lp64f.c:330 eelf64btsmip.c:473 eelf64btsmip_fbsd.c:473
-#: eelf64hppa.c:202 eelf64lppc.c:959 eelf64lppc_fbsd.c:959 eelf64lriscv.c:330
-#: eelf64lriscv_lp64.c:330 eelf64lriscv_lp64f.c:330 eelf64ltsmip.c:473
-#: eelf64ltsmip_fbsd.c:473 eelf64mmix.c:343 eelf64ppc.c:959
-#: eelf64ppc_fbsd.c:959 eelf64rdos.c:283 eelf64tilegx.c:258
-#: eelf64tilegx_be.c:258 eelf_i386.c:4949 eelf_i386_be.c:256
-#: eelf_i386_fbsd.c:292 eelf_i386_ldso.c:267 eelf_i386_sol2.c:424
-#: eelf_i386_vxworks.c:319 eelf_iamcu.c:292 eelf_k1om.c:5283
-#: eelf_k1om_fbsd.c:292 eelf_l1om.c:5283 eelf_l1om_fbsd.c:292 eelf_s390.c:258
-#: eelf_x86_64.c:5327 eelf_x86_64_cloudabi.c:292 eelf_x86_64_fbsd.c:292
+#: eelf32lm32fd.c:257 eelf32lmip.c:473 eelf32loongarch.c:308 eelf32lppc.c:521
+#: eelf32lppclinux.c:521 eelf32lppcnto.c:521 eelf32lppcsim.c:521
+#: eelf32lr5900.c:442 eelf32lr5900n32.c:441 eelf32lriscv.c:326
+#: eelf32lriscv_ilp32.c:326 eelf32lriscv_ilp32f.c:326 eelf32lsmip.c:473
+#: eelf32ltsmip.c:473 eelf32ltsmip_fbsd.c:473 eelf32ltsmipn32.c:473
+#: eelf32ltsmipn32_fbsd.c:473 eelf32m32c.c:212 eelf32mb_linux.c:258
+#: eelf32mbel_linux.c:258 eelf32mcore.c:207 eelf32mep.c:186 eelf32metag.c:507
+#: eelf32microblaze.c:186 eelf32microblazeel.c:186 eelf32mipswindiss.c:416
+#: eelf32moxie.c:201 eelf32or1k.c:202 eelf32or1k_linux.c:258 eelf32ppc.c:521
+#: eelf32ppc_fbsd.c:521 eelf32ppchaiku.c:521 eelf32ppclinux.c:521
+#: eelf32ppcnto.c:521 eelf32ppcsim.c:521 eelf32ppcvxworks.c:495
+#: eelf32ppcwindiss.c:521 eelf32rl78.c:201 eelf32rx.c:229 eelf32rx_linux.c:214
+#: eelf32tilegx.c:258 eelf32tilegx_be.c:258 eelf32tilepro.c:258
+#: eelf32vax.c:232 eelf32visium.c:186 eelf32xc16x.c:186 eelf32xc16xl.c:186
+#: eelf32xc16xs.c:186 eelf32xstormy16.c:197 eelf32xtensa.c:2179
+#: eelf32z80.c:213 eelf64_aix.c:232 eelf64_ia64.c:289 eelf64_ia64_fbsd.c:289
+#: eelf64_s390.c:328 eelf64_sparc.c:258 eelf64_sparc_fbsd.c:258
+#: eelf64_sparc_sol2.c:390 eelf64alpha.c:351 eelf64alpha_fbsd.c:351
+#: eelf64alpha_nbsd.c:351 eelf64bmip.c:487 eelf64bpf.c:186 eelf64briscv.c:326
+#: eelf64briscv_lp64.c:326 eelf64briscv_lp64f.c:326 eelf64btsmip.c:473
+#: eelf64btsmip_fbsd.c:473 eelf64hppa.c:202 eelf64loongarch.c:308
+#: eelf64lppc.c:970 eelf64lppc_fbsd.c:970 eelf64lriscv.c:326
+#: eelf64lriscv_lp64.c:326 eelf64lriscv_lp64f.c:326 eelf64ltsmip.c:473
+#: eelf64ltsmip_fbsd.c:473 eelf64mmix.c:343 eelf64ppc.c:970
+#: eelf64ppc_fbsd.c:970 eelf64rdos.c:283 eelf64tilegx.c:258
+#: eelf64tilegx_be.c:258 eelf_i386.c:4971 eelf_i386_be.c:256
+#: eelf_i386_fbsd.c:292 eelf_i386_haiku.c:292 eelf_i386_ldso.c:267
+#: eelf_i386_sol2.c:424 eelf_i386_vxworks.c:319 eelf_iamcu.c:292
+#: eelf_k1om.c:5283 eelf_k1om_fbsd.c:292 eelf_l1om.c:5283 eelf_l1om_fbsd.c:292
+#: eelf_mipsel_haiku.c:473 eelf_s390.c:258 eelf_x86_64.c:5349
+#: eelf_x86_64_cloudabi.c:292 eelf_x86_64_fbsd.c:292 eelf_x86_64_haiku.c:292
#: eelf_x86_64_sol2.c:424 eh8300elf.c:201 eh8300elf_linux.c:201
#: eh8300helf.c:201 eh8300helf_linux.c:201 eh8300hnelf.c:201 eh8300self.c:201
#: eh8300self_linux.c:201 eh8300snelf.c:201 eh8300sxelf.c:201
@@ -3065,49 +3090,51 @@ msgstr "%F%P: некоректний параметр --compress-debug-sections:
#: eaarch64cloudabi.c:621 eaarch64cloudabib.c:621 eaarch64elf.c:620
#: eaarch64elf32.c:620 eaarch64elf32b.c:620 eaarch64elfb.c:620
-#: eaarch64fbsd.c:621 eaarch64fbsdb.c:621 eaarch64linux.c:621
-#: eaarch64linux32.c:621 eaarch64linux32b.c:621 eaarch64linuxb.c:621
-#: earcelf.c:253 earclinux.c:309 earclinux_nps.c:309 earmelf.c:863
-#: earmelf_fbsd.c:863 earmelf_fuchsia.c:864 earmelf_linux.c:864
-#: earmelf_linux_eabi.c:864 earmelf_linux_fdpiceabi.c:864 earmelf_nacl.c:864
-#: earmelf_nbsd.c:863 earmelf_phoenix.c:864 earmelf_vxworks.c:899
-#: earmelfb.c:863 earmelfb_fbsd.c:863 earmelfb_fuchsia.c:864
-#: earmelfb_linux.c:864 earmelfb_linux_eabi.c:864
+#: eaarch64fbsd.c:621 eaarch64fbsdb.c:621 eaarch64haiku.c:621
+#: eaarch64linux.c:621 eaarch64linux32.c:621 eaarch64linux32b.c:621
+#: eaarch64linuxb.c:621 earcelf.c:253 earclinux.c:309 earclinux_nps.c:309
+#: earmelf.c:863 earmelf_fbsd.c:863 earmelf_fuchsia.c:864 earmelf_haiku.c:864
+#: earmelf_linux.c:864 earmelf_linux_eabi.c:864 earmelf_linux_fdpiceabi.c:864
+#: earmelf_nacl.c:864 earmelf_nbsd.c:863 earmelf_phoenix.c:864
+#: earmelf_vxworks.c:899 earmelfb.c:863 earmelfb_fbsd.c:863
+#: earmelfb_fuchsia.c:864 earmelfb_linux.c:864 earmelfb_linux_eabi.c:864
#: earmelfb_linux_fdpiceabi.c:864 earmelfb_nacl.c:864 earmelfb_nbsd.c:863
#: earmnto.c:838 ecrislinux.c:284 ecskyelf_linux.c:553 eelf32_sparc.c:309
#: eelf32_sparc_sol2.c:441 eelf32_sparc_vxworks.c:346 eelf32_tic6x_be.c:420
#: eelf32_tic6x_elf_be.c:420 eelf32_tic6x_elf_le.c:420 eelf32_tic6x_le.c:420
#: eelf32_tic6x_linux_be.c:420 eelf32_tic6x_linux_le.c:420
-#: eelf32_x86_64.c:5378 eelf32am33lin.c:283 eelf32b4300.c:524 eelf32bfin.c:301
-#: eelf32bfinfd.c:326 eelf32bmip.c:524 eelf32bmipn32.c:538 eelf32briscv.c:381
-#: eelf32briscv_ilp32.c:381 eelf32briscv_ilp32f.c:381 eelf32bsmip.c:538
+#: eelf32_x86_64.c:5400 eelf32am33lin.c:283 eelf32b4300.c:524 eelf32bfin.c:301
+#: eelf32bfinfd.c:326 eelf32bmip.c:524 eelf32bmipn32.c:538 eelf32briscv.c:377
+#: eelf32briscv_ilp32.c:377 eelf32briscv_ilp32f.c:377 eelf32bsmip.c:538
#: eelf32btsmip.c:524 eelf32btsmip_fbsd.c:524 eelf32btsmipn32.c:524
#: eelf32btsmipn32_fbsd.c:524 eelf32ebmip.c:524 eelf32ebmipvxworks.c:559
#: eelf32elmip.c:524 eelf32elmipvxworks.c:559 eelf32frvfd.c:308
-#: eelf32l4300.c:524 eelf32lm32fd.c:308 eelf32lmip.c:524 eelf32lppc.c:560
-#: eelf32lppclinux.c:560 eelf32lppcnto.c:560 eelf32lppcsim.c:560
-#: eelf32lriscv.c:381 eelf32lriscv_ilp32.c:381 eelf32lriscv_ilp32f.c:381
-#: eelf32lsmip.c:524 eelf32ltsmip.c:524 eelf32ltsmip_fbsd.c:524
-#: eelf32ltsmipn32.c:524 eelf32ltsmipn32_fbsd.c:524 eelf32mb_linux.c:309
-#: eelf32mbel_linux.c:309 eelf32metag.c:558 eelf32or1k_linux.c:309
-#: eelf32ppc.c:560 eelf32ppc_fbsd.c:560 eelf32ppclinux.c:560
-#: eelf32ppcnto.c:560 eelf32ppcsim.c:560 eelf32ppcvxworks.c:534
-#: eelf32ppcwindiss.c:560 eelf32tilegx.c:309 eelf32tilegx_be.c:309
-#: eelf32tilepro.c:309 eelf32vax.c:283 eelf32xtensa.c:2230 eelf64_aix.c:283
-#: eelf64_ia64.c:340 eelf64_ia64_fbsd.c:340 eelf64_s390.c:379
-#: eelf64_sparc.c:309 eelf64_sparc_fbsd.c:309 eelf64_sparc_sol2.c:441
-#: eelf64alpha.c:402 eelf64alpha_fbsd.c:402 eelf64alpha_nbsd.c:402
-#: eelf64bmip.c:538 eelf64briscv.c:381 eelf64briscv_lp64.c:381
-#: eelf64briscv_lp64f.c:381 eelf64btsmip.c:524 eelf64btsmip_fbsd.c:524
-#: eelf64hppa.c:253 eelf64lppc.c:1010 eelf64lppc_fbsd.c:1010
-#: eelf64lriscv.c:381 eelf64lriscv_lp64.c:381 eelf64lriscv_lp64f.c:381
+#: eelf32l4300.c:524 eelf32lm32fd.c:308 eelf32lmip.c:524 eelf32loongarch.c:359
+#: eelf32lppc.c:572 eelf32lppclinux.c:572 eelf32lppcnto.c:572
+#: eelf32lppcsim.c:572 eelf32lriscv.c:377 eelf32lriscv_ilp32.c:377
+#: eelf32lriscv_ilp32f.c:377 eelf32lsmip.c:524 eelf32ltsmip.c:524
+#: eelf32ltsmip_fbsd.c:524 eelf32ltsmipn32.c:524 eelf32ltsmipn32_fbsd.c:524
+#: eelf32mb_linux.c:309 eelf32mbel_linux.c:309 eelf32metag.c:558
+#: eelf32or1k_linux.c:309 eelf32ppc.c:572 eelf32ppc_fbsd.c:572
+#: eelf32ppchaiku.c:572 eelf32ppclinux.c:572 eelf32ppcnto.c:572
+#: eelf32ppcsim.c:572 eelf32ppcvxworks.c:546 eelf32ppcwindiss.c:572
+#: eelf32tilegx.c:309 eelf32tilegx_be.c:309 eelf32tilepro.c:309
+#: eelf32vax.c:283 eelf32xtensa.c:2230 eelf64_aix.c:283 eelf64_ia64.c:340
+#: eelf64_ia64_fbsd.c:340 eelf64_s390.c:379 eelf64_sparc.c:309
+#: eelf64_sparc_fbsd.c:309 eelf64_sparc_sol2.c:441 eelf64alpha.c:402
+#: eelf64alpha_fbsd.c:402 eelf64alpha_nbsd.c:402 eelf64bmip.c:538
+#: eelf64briscv.c:377 eelf64briscv_lp64.c:377 eelf64briscv_lp64f.c:377
+#: eelf64btsmip.c:524 eelf64btsmip_fbsd.c:524 eelf64hppa.c:253
+#: eelf64loongarch.c:359 eelf64lppc.c:1021 eelf64lppc_fbsd.c:1021
+#: eelf64lriscv.c:377 eelf64lriscv_lp64.c:377 eelf64lriscv_lp64f.c:377
#: eelf64ltsmip.c:524 eelf64ltsmip_fbsd.c:524 eelf64mmix.c:394
-#: eelf64ppc.c:1010 eelf64ppc_fbsd.c:1010 eelf64rdos.c:334 eelf64tilegx.c:309
-#: eelf64tilegx_be.c:309 eelf_i386.c:5000 eelf_i386_be.c:307
-#: eelf_i386_fbsd.c:343 eelf_i386_ldso.c:318 eelf_i386_sol2.c:475
-#: eelf_i386_vxworks.c:370 eelf_iamcu.c:343 eelf_k1om.c:5334
-#: eelf_k1om_fbsd.c:343 eelf_l1om.c:5334 eelf_l1om_fbsd.c:343 eelf_s390.c:309
-#: eelf_x86_64.c:5378 eelf_x86_64_cloudabi.c:343 eelf_x86_64_fbsd.c:343
+#: eelf64ppc.c:1021 eelf64ppc_fbsd.c:1021 eelf64rdos.c:334 eelf64tilegx.c:309
+#: eelf64tilegx_be.c:309 eelf_i386.c:5022 eelf_i386_be.c:307
+#: eelf_i386_fbsd.c:343 eelf_i386_haiku.c:343 eelf_i386_ldso.c:318
+#: eelf_i386_sol2.c:475 eelf_i386_vxworks.c:370 eelf_iamcu.c:343
+#: eelf_k1om.c:5334 eelf_k1om_fbsd.c:343 eelf_l1om.c:5334 eelf_l1om_fbsd.c:343
+#: eelf_mipsel_haiku.c:524 eelf_s390.c:309 eelf_x86_64.c:5400
+#: eelf_x86_64_cloudabi.c:343 eelf_x86_64_fbsd.c:343 eelf_x86_64_haiku.c:343
#: eelf_x86_64_sol2.c:475 ehppa64linux.c:283 ehppalinux.c:592 ehppanbsd.c:592
#: ehppaobsd.c:592 ei386lynx.c:298 ei386moss.c:298 ei386nto.c:298
#: em32relf_linux.c:308 em32rlelf_linux.c:308 em68kelf.c:466
@@ -3122,14 +3149,15 @@ msgstr "%F%P: некоректний Ñтиль хешуваннÑ, «%s»\n"
#: eaarch64cloudabi.c:638 eaarch64cloudabib.c:638 eaarch64elf.c:637
#: eaarch64elf32.c:637 eaarch64elf32b.c:637 eaarch64elfb.c:637
-#: eaarch64fbsd.c:638 eaarch64fbsdb.c:638 eaarch64linux.c:638
-#: eaarch64linux32.c:638 eaarch64linux32b.c:638 eaarch64linuxb.c:638
-#: earcelf.c:270 earclinux.c:326 earclinux_nps.c:326 earcv2elf.c:203
-#: earcv2elfx.c:203 earmelf.c:880 earmelf_fbsd.c:880 earmelf_fuchsia.c:881
-#: earmelf_linux.c:881 earmelf_linux_eabi.c:881 earmelf_linux_fdpiceabi.c:881
-#: earmelf_nacl.c:881 earmelf_nbsd.c:880 earmelf_phoenix.c:881
-#: earmelf_vxworks.c:916 earmelfb.c:880 earmelfb_fbsd.c:880
-#: earmelfb_fuchsia.c:881 earmelfb_linux.c:881 earmelfb_linux_eabi.c:881
+#: eaarch64fbsd.c:638 eaarch64fbsdb.c:638 eaarch64haiku.c:638
+#: eaarch64linux.c:638 eaarch64linux32.c:638 eaarch64linux32b.c:638
+#: eaarch64linuxb.c:638 earcelf.c:270 earclinux.c:326 earclinux_nps.c:326
+#: earcv2elf.c:203 earcv2elfx.c:203 earmelf.c:880 earmelf_fbsd.c:880
+#: earmelf_fuchsia.c:881 earmelf_haiku.c:881 earmelf_linux.c:881
+#: earmelf_linux_eabi.c:881 earmelf_linux_fdpiceabi.c:881 earmelf_nacl.c:881
+#: earmelf_nbsd.c:880 earmelf_phoenix.c:881 earmelf_vxworks.c:916
+#: earmelfb.c:880 earmelfb_fbsd.c:880 earmelfb_fuchsia.c:881
+#: earmelfb_linux.c:881 earmelfb_linux_eabi.c:881
#: earmelfb_linux_fdpiceabi.c:881 earmelfb_nacl.c:881 earmelfb_nbsd.c:880
#: earmnto.c:855 eavr1.c:426 eavr2.c:426 eavr25.c:426 eavr3.c:426 eavr31.c:426
#: eavr35.c:426 eavr4.c:426 eavr5.c:426 eavr51.c:426 eavr6.c:426
@@ -3137,46 +3165,48 @@ msgstr "%F%P: некоректний Ñтиль хешуваннÑ, «%s»\n"
#: eavrxmega4.c:426 eavrxmega5.c:426 eavrxmega6.c:426 eavrxmega7.c:426
#: ecriself.c:218 ecrislinux.c:301 ecskyelf.c:462 ecskyelf_linux.c:570
#: ed10velf.c:203 eelf32_sparc.c:326 eelf32_sparc_sol2.c:458
-#: eelf32_sparc_vxworks.c:363 eelf32_spu.c:800 eelf32_tic6x_be.c:437
+#: eelf32_sparc_vxworks.c:363 eelf32_spu.c:936 eelf32_tic6x_be.c:437
#: eelf32_tic6x_elf_be.c:437 eelf32_tic6x_elf_le.c:437 eelf32_tic6x_le.c:437
#: eelf32_tic6x_linux_be.c:437 eelf32_tic6x_linux_le.c:437
-#: eelf32_x86_64.c:5395 eelf32am33lin.c:300 eelf32b4300.c:541 eelf32bfin.c:318
-#: eelf32bfinfd.c:343 eelf32bmip.c:541 eelf32bmipn32.c:555 eelf32briscv.c:398
-#: eelf32briscv_ilp32.c:398 eelf32briscv_ilp32f.c:398 eelf32bsmip.c:555
+#: eelf32_x86_64.c:5417 eelf32am33lin.c:300 eelf32b4300.c:541 eelf32bfin.c:318
+#: eelf32bfinfd.c:343 eelf32bmip.c:541 eelf32bmipn32.c:555 eelf32briscv.c:394
+#: eelf32briscv_ilp32.c:394 eelf32briscv_ilp32f.c:394 eelf32bsmip.c:555
#: eelf32btsmip.c:541 eelf32btsmip_fbsd.c:541 eelf32btsmipn32.c:541
#: eelf32btsmipn32_fbsd.c:541 eelf32cr16.c:353 eelf32crx.c:240
#: eelf32ebmip.c:541 eelf32ebmipvxworks.c:576 eelf32elmip.c:541
#: eelf32elmipvxworks.c:576 eelf32epiphany.c:218 eelf32epiphany_4x4.c:205
#: eelf32frvfd.c:325 eelf32ip2k.c:218 eelf32l4300.c:541 eelf32lm32.c:218
-#: eelf32lm32fd.c:325 eelf32lmip.c:541 eelf32lppc.c:577 eelf32lppclinux.c:577
-#: eelf32lppcnto.c:577 eelf32lppcsim.c:577 eelf32lr5900.c:459
-#: eelf32lr5900n32.c:458 eelf32lriscv.c:398 eelf32lriscv_ilp32.c:398
-#: eelf32lriscv_ilp32f.c:398 eelf32lsmip.c:541 eelf32ltsmip.c:541
-#: eelf32ltsmip_fbsd.c:541 eelf32ltsmipn32.c:541 eelf32ltsmipn32_fbsd.c:541
-#: eelf32m32c.c:229 eelf32mb_linux.c:326 eelf32mbel_linux.c:326
-#: eelf32mcore.c:224 eelf32mep.c:203 eelf32metag.c:575 eelf32microblaze.c:203
-#: eelf32microblazeel.c:203 eelf32mipswindiss.c:433 eelf32moxie.c:218
-#: eelf32or1k.c:219 eelf32or1k_linux.c:326 eelf32ppc.c:577
-#: eelf32ppc_fbsd.c:577 eelf32ppclinux.c:577 eelf32ppcnto.c:577
-#: eelf32ppcsim.c:577 eelf32ppcvxworks.c:551 eelf32ppcwindiss.c:577
-#: eelf32rl78.c:218 eelf32rx.c:246 eelf32rx_linux.c:231 eelf32tilegx.c:326
-#: eelf32tilegx_be.c:326 eelf32tilepro.c:326 eelf32vax.c:300
-#: eelf32visium.c:203 eelf32xc16x.c:203 eelf32xc16xl.c:203 eelf32xc16xs.c:203
-#: eelf32xstormy16.c:214 eelf32xtensa.c:2247 eelf32z80.c:230 eelf64_aix.c:300
-#: eelf64_ia64.c:357 eelf64_ia64_fbsd.c:357 eelf64_s390.c:396
-#: eelf64_sparc.c:326 eelf64_sparc_fbsd.c:326 eelf64_sparc_sol2.c:458
-#: eelf64alpha.c:419 eelf64alpha_fbsd.c:419 eelf64alpha_nbsd.c:419
-#: eelf64bmip.c:555 eelf64bpf.c:203 eelf64briscv.c:398 eelf64briscv_lp64.c:398
-#: eelf64briscv_lp64f.c:398 eelf64btsmip.c:541 eelf64btsmip_fbsd.c:541
-#: eelf64hppa.c:270 eelf64lppc.c:1027 eelf64lppc_fbsd.c:1027
-#: eelf64lriscv.c:398 eelf64lriscv_lp64.c:398 eelf64lriscv_lp64f.c:398
-#: eelf64ltsmip.c:541 eelf64ltsmip_fbsd.c:541 eelf64mmix.c:411
-#: eelf64ppc.c:1027 eelf64ppc_fbsd.c:1027 eelf64rdos.c:351 eelf64tilegx.c:326
-#: eelf64tilegx_be.c:326 eelf_i386.c:5017 eelf_i386_be.c:324
-#: eelf_i386_fbsd.c:360 eelf_i386_ldso.c:335 eelf_i386_sol2.c:492
-#: eelf_i386_vxworks.c:387 eelf_iamcu.c:360 eelf_k1om.c:5351
-#: eelf_k1om_fbsd.c:360 eelf_l1om.c:5351 eelf_l1om_fbsd.c:360 eelf_s390.c:326
-#: eelf_x86_64.c:5395 eelf_x86_64_cloudabi.c:360 eelf_x86_64_fbsd.c:360
+#: eelf32lm32fd.c:325 eelf32lmip.c:541 eelf32loongarch.c:376 eelf32lppc.c:589
+#: eelf32lppclinux.c:589 eelf32lppcnto.c:589 eelf32lppcsim.c:589
+#: eelf32lr5900.c:459 eelf32lr5900n32.c:458 eelf32lriscv.c:394
+#: eelf32lriscv_ilp32.c:394 eelf32lriscv_ilp32f.c:394 eelf32lsmip.c:541
+#: eelf32ltsmip.c:541 eelf32ltsmip_fbsd.c:541 eelf32ltsmipn32.c:541
+#: eelf32ltsmipn32_fbsd.c:541 eelf32m32c.c:229 eelf32mb_linux.c:326
+#: eelf32mbel_linux.c:326 eelf32mcore.c:224 eelf32mep.c:203 eelf32metag.c:575
+#: eelf32microblaze.c:203 eelf32microblazeel.c:203 eelf32mipswindiss.c:433
+#: eelf32moxie.c:218 eelf32or1k.c:219 eelf32or1k_linux.c:326 eelf32ppc.c:589
+#: eelf32ppc_fbsd.c:589 eelf32ppchaiku.c:589 eelf32ppclinux.c:589
+#: eelf32ppcnto.c:589 eelf32ppcsim.c:589 eelf32ppcvxworks.c:563
+#: eelf32ppcwindiss.c:589 eelf32rl78.c:218 eelf32rx.c:246 eelf32rx_linux.c:231
+#: eelf32tilegx.c:326 eelf32tilegx_be.c:326 eelf32tilepro.c:326
+#: eelf32vax.c:300 eelf32visium.c:203 eelf32xc16x.c:203 eelf32xc16xl.c:203
+#: eelf32xc16xs.c:203 eelf32xstormy16.c:214 eelf32xtensa.c:2247
+#: eelf32z80.c:230 eelf64_aix.c:300 eelf64_ia64.c:357 eelf64_ia64_fbsd.c:357
+#: eelf64_s390.c:396 eelf64_sparc.c:326 eelf64_sparc_fbsd.c:326
+#: eelf64_sparc_sol2.c:458 eelf64alpha.c:419 eelf64alpha_fbsd.c:419
+#: eelf64alpha_nbsd.c:419 eelf64bmip.c:555 eelf64bpf.c:203 eelf64briscv.c:394
+#: eelf64briscv_lp64.c:394 eelf64briscv_lp64f.c:394 eelf64btsmip.c:541
+#: eelf64btsmip_fbsd.c:541 eelf64hppa.c:270 eelf64loongarch.c:376
+#: eelf64lppc.c:1038 eelf64lppc_fbsd.c:1038 eelf64lriscv.c:394
+#: eelf64lriscv_lp64.c:394 eelf64lriscv_lp64f.c:394 eelf64ltsmip.c:541
+#: eelf64ltsmip_fbsd.c:541 eelf64mmix.c:411 eelf64ppc.c:1038
+#: eelf64ppc_fbsd.c:1038 eelf64rdos.c:351 eelf64tilegx.c:326
+#: eelf64tilegx_be.c:326 eelf_i386.c:5039 eelf_i386_be.c:324
+#: eelf_i386_fbsd.c:360 eelf_i386_haiku.c:360 eelf_i386_ldso.c:335
+#: eelf_i386_sol2.c:492 eelf_i386_vxworks.c:387 eelf_iamcu.c:360
+#: eelf_k1om.c:5351 eelf_k1om_fbsd.c:360 eelf_l1om.c:5351 eelf_l1om_fbsd.c:360
+#: eelf_mipsel_haiku.c:541 eelf_s390.c:326 eelf_x86_64.c:5417
+#: eelf_x86_64_cloudabi.c:360 eelf_x86_64_fbsd.c:360 eelf_x86_64_haiku.c:360
#: eelf_x86_64_sol2.c:492 eh8300elf.c:218 eh8300elf_linux.c:218
#: eh8300helf.c:218 eh8300helf_linux.c:218 eh8300hnelf.c:218 eh8300self.c:218
#: eh8300self_linux.c:218 eh8300snelf.c:218 eh8300sxelf.c:218
@@ -3196,329 +3226,342 @@ msgstr "%F%P: некоректний Ñтиль хешуваннÑ, «%s»\n"
msgid "%F%P: invalid maximum page size `%s'\n"
msgstr "%F%P: некоректний макÑимальний розмір Ñторінки, «%s»\n"
-#: eaarch64cloudabi.c:647 eaarch64cloudabib.c:647 eaarch64elf.c:646
-#: eaarch64elf32.c:646 eaarch64elf32b.c:646 eaarch64elfb.c:646
-#: eaarch64fbsd.c:647 eaarch64fbsdb.c:647 eaarch64linux.c:647
-#: eaarch64linux32.c:647 eaarch64linux32b.c:647 eaarch64linuxb.c:647
-#: earcelf.c:279 earclinux.c:335 earclinux_nps.c:335 earcv2elf.c:212
-#: earcv2elfx.c:212 earmelf.c:889 earmelf_fbsd.c:889 earmelf_fuchsia.c:890
-#: earmelf_linux.c:890 earmelf_linux_eabi.c:890 earmelf_linux_fdpiceabi.c:890
-#: earmelf_nacl.c:890 earmelf_nbsd.c:889 earmelf_phoenix.c:890
-#: earmelf_vxworks.c:925 earmelfb.c:889 earmelfb_fbsd.c:889
-#: earmelfb_fuchsia.c:890 earmelfb_linux.c:890 earmelfb_linux_eabi.c:890
-#: earmelfb_linux_fdpiceabi.c:890 earmelfb_nacl.c:890 earmelfb_nbsd.c:889
-#: earmnto.c:864 eavr1.c:435 eavr2.c:435 eavr25.c:435 eavr3.c:435 eavr31.c:435
-#: eavr35.c:435 eavr4.c:435 eavr5.c:435 eavr51.c:435 eavr6.c:435
-#: eavrtiny.c:435 eavrxmega1.c:435 eavrxmega2.c:435 eavrxmega3.c:435
-#: eavrxmega4.c:435 eavrxmega5.c:435 eavrxmega6.c:435 eavrxmega7.c:435
-#: ecriself.c:227 ecrislinux.c:310 ecskyelf.c:471 ecskyelf_linux.c:579
-#: ed10velf.c:212 eelf32_sparc.c:335 eelf32_sparc_sol2.c:467
-#: eelf32_sparc_vxworks.c:372 eelf32_spu.c:809 eelf32_tic6x_be.c:446
-#: eelf32_tic6x_elf_be.c:446 eelf32_tic6x_elf_le.c:446 eelf32_tic6x_le.c:446
-#: eelf32_tic6x_linux_be.c:446 eelf32_tic6x_linux_le.c:446
-#: eelf32_x86_64.c:5404 eelf32am33lin.c:309 eelf32b4300.c:550 eelf32bfin.c:327
-#: eelf32bfinfd.c:352 eelf32bmip.c:550 eelf32bmipn32.c:564 eelf32briscv.c:407
-#: eelf32briscv_ilp32.c:407 eelf32briscv_ilp32f.c:407 eelf32bsmip.c:564
-#: eelf32btsmip.c:550 eelf32btsmip_fbsd.c:550 eelf32btsmipn32.c:550
-#: eelf32btsmipn32_fbsd.c:550 eelf32cr16.c:362 eelf32crx.c:249
-#: eelf32ebmip.c:550 eelf32ebmipvxworks.c:585 eelf32elmip.c:550
-#: eelf32elmipvxworks.c:585 eelf32epiphany.c:227 eelf32epiphany_4x4.c:214
-#: eelf32frvfd.c:334 eelf32ip2k.c:227 eelf32l4300.c:550 eelf32lm32.c:227
-#: eelf32lm32fd.c:334 eelf32lmip.c:550 eelf32lppc.c:586 eelf32lppclinux.c:586
-#: eelf32lppcnto.c:586 eelf32lppcsim.c:586 eelf32lr5900.c:468
-#: eelf32lr5900n32.c:467 eelf32lriscv.c:407 eelf32lriscv_ilp32.c:407
-#: eelf32lriscv_ilp32f.c:407 eelf32lsmip.c:550 eelf32ltsmip.c:550
-#: eelf32ltsmip_fbsd.c:550 eelf32ltsmipn32.c:550 eelf32ltsmipn32_fbsd.c:550
-#: eelf32m32c.c:238 eelf32mb_linux.c:335 eelf32mbel_linux.c:335
-#: eelf32mcore.c:233 eelf32mep.c:212 eelf32metag.c:584 eelf32microblaze.c:212
-#: eelf32microblazeel.c:212 eelf32mipswindiss.c:442 eelf32moxie.c:227
-#: eelf32or1k.c:228 eelf32or1k_linux.c:335 eelf32ppc.c:586
-#: eelf32ppc_fbsd.c:586 eelf32ppclinux.c:586 eelf32ppcnto.c:586
-#: eelf32ppcsim.c:586 eelf32ppcvxworks.c:560 eelf32ppcwindiss.c:586
-#: eelf32rl78.c:227 eelf32rx.c:255 eelf32rx_linux.c:240 eelf32tilegx.c:335
-#: eelf32tilegx_be.c:335 eelf32tilepro.c:335 eelf32vax.c:309
-#: eelf32visium.c:212 eelf32xc16x.c:212 eelf32xc16xl.c:212 eelf32xc16xs.c:212
-#: eelf32xstormy16.c:223 eelf32xtensa.c:2256 eelf32z80.c:239 eelf64_aix.c:309
-#: eelf64_ia64.c:366 eelf64_ia64_fbsd.c:366 eelf64_s390.c:405
-#: eelf64_sparc.c:335 eelf64_sparc_fbsd.c:335 eelf64_sparc_sol2.c:467
-#: eelf64alpha.c:428 eelf64alpha_fbsd.c:428 eelf64alpha_nbsd.c:428
-#: eelf64bmip.c:564 eelf64bpf.c:212 eelf64briscv.c:407 eelf64briscv_lp64.c:407
-#: eelf64briscv_lp64f.c:407 eelf64btsmip.c:550 eelf64btsmip_fbsd.c:550
-#: eelf64hppa.c:279 eelf64lppc.c:1036 eelf64lppc_fbsd.c:1036
-#: eelf64lriscv.c:407 eelf64lriscv_lp64.c:407 eelf64lriscv_lp64f.c:407
-#: eelf64ltsmip.c:550 eelf64ltsmip_fbsd.c:550 eelf64mmix.c:420
-#: eelf64ppc.c:1036 eelf64ppc_fbsd.c:1036 eelf64rdos.c:360 eelf64tilegx.c:335
-#: eelf64tilegx_be.c:335 eelf_i386.c:5026 eelf_i386_be.c:333
-#: eelf_i386_fbsd.c:369 eelf_i386_ldso.c:344 eelf_i386_sol2.c:501
-#: eelf_i386_vxworks.c:396 eelf_iamcu.c:369 eelf_k1om.c:5360
-#: eelf_k1om_fbsd.c:369 eelf_l1om.c:5360 eelf_l1om_fbsd.c:369 eelf_s390.c:335
-#: eelf_x86_64.c:5404 eelf_x86_64_cloudabi.c:369 eelf_x86_64_fbsd.c:369
-#: eelf_x86_64_sol2.c:501 eh8300elf.c:227 eh8300elf_linux.c:227
-#: eh8300helf.c:227 eh8300helf_linux.c:227 eh8300hnelf.c:227 eh8300self.c:227
-#: eh8300self_linux.c:227 eh8300snelf.c:227 eh8300sxelf.c:227
-#: eh8300sxelf_linux.c:227 eh8300sxnelf.c:227 ehppa64linux.c:309
-#: ehppaelf.c:495 ehppalinux.c:618 ehppanbsd.c:618 ehppaobsd.c:618
-#: ei386lynx.c:324 ei386moss.c:324 ei386nto.c:324 em32relf.c:227
-#: em32relf_linux.c:334 em32rlelf.c:227 em32rlelf_linux.c:334
-#: em68hc11elf.c:497 em68hc11elfb.c:497 em68hc12elf.c:497 em68hc12elfb.c:497
-#: em68kelf.c:492 em68kelfnbsd.c:492 emn10300.c:309 ends32belf.c:348
-#: ends32belf16m.c:348 ends32belf_linux.c:422 ends32elf.c:348
-#: ends32elf16m.c:348 ends32elf_linux.c:422 enios2elf.c:514 enios2linux.c:596
-#: epruelf.c:233 escore3_elf.c:330 escore7_elf.c:330 eshelf.c:309
-#: eshelf_fd.c:335 eshelf_linux.c:335 eshelf_nbsd.c:309 eshelf_nto.c:309
-#: eshelf_uclinux.c:309 eshelf_vxworks.c:346 eshlelf.c:309 eshlelf_fd.c:335
-#: eshlelf_linux.c:335 eshlelf_nbsd.c:309 eshlelf_nto.c:309
-#: eshlelf_vxworks.c:346 ev850.c:259 ev850_rh850.c:259
+#: eaarch64cloudabi.c:648 eaarch64cloudabib.c:648 eaarch64elf.c:647
+#: eaarch64elf32.c:647 eaarch64elf32b.c:647 eaarch64elfb.c:647
+#: eaarch64fbsd.c:648 eaarch64fbsdb.c:648 eaarch64haiku.c:648
+#: eaarch64linux.c:648 eaarch64linux32.c:648 eaarch64linux32b.c:648
+#: eaarch64linuxb.c:648 earcelf.c:280 earclinux.c:336 earclinux_nps.c:336
+#: earcv2elf.c:213 earcv2elfx.c:213 earmelf.c:890 earmelf_fbsd.c:890
+#: earmelf_fuchsia.c:891 earmelf_haiku.c:891 earmelf_linux.c:891
+#: earmelf_linux_eabi.c:891 earmelf_linux_fdpiceabi.c:891 earmelf_nacl.c:891
+#: earmelf_nbsd.c:890 earmelf_phoenix.c:891 earmelf_vxworks.c:926
+#: earmelfb.c:890 earmelfb_fbsd.c:890 earmelfb_fuchsia.c:891
+#: earmelfb_linux.c:891 earmelfb_linux_eabi.c:891
+#: earmelfb_linux_fdpiceabi.c:891 earmelfb_nacl.c:891 earmelfb_nbsd.c:890
+#: earmnto.c:865 eavr1.c:436 eavr2.c:436 eavr25.c:436 eavr3.c:436 eavr31.c:436
+#: eavr35.c:436 eavr4.c:436 eavr5.c:436 eavr51.c:436 eavr6.c:436
+#: eavrtiny.c:436 eavrxmega1.c:436 eavrxmega2.c:436 eavrxmega3.c:436
+#: eavrxmega4.c:436 eavrxmega5.c:436 eavrxmega6.c:436 eavrxmega7.c:436
+#: ecriself.c:228 ecrislinux.c:311 ecskyelf.c:472 ecskyelf_linux.c:580
+#: ed10velf.c:213 eelf32_sparc.c:336 eelf32_sparc_sol2.c:468
+#: eelf32_sparc_vxworks.c:373 eelf32_spu.c:946 eelf32_tic6x_be.c:447
+#: eelf32_tic6x_elf_be.c:447 eelf32_tic6x_elf_le.c:447 eelf32_tic6x_le.c:447
+#: eelf32_tic6x_linux_be.c:447 eelf32_tic6x_linux_le.c:447
+#: eelf32_x86_64.c:5427 eelf32am33lin.c:310 eelf32b4300.c:551 eelf32bfin.c:328
+#: eelf32bfinfd.c:353 eelf32bmip.c:551 eelf32bmipn32.c:565 eelf32briscv.c:404
+#: eelf32briscv_ilp32.c:404 eelf32briscv_ilp32f.c:404 eelf32bsmip.c:565
+#: eelf32btsmip.c:551 eelf32btsmip_fbsd.c:551 eelf32btsmipn32.c:551
+#: eelf32btsmipn32_fbsd.c:551 eelf32cr16.c:363 eelf32crx.c:250
+#: eelf32ebmip.c:551 eelf32ebmipvxworks.c:586 eelf32elmip.c:551
+#: eelf32elmipvxworks.c:586 eelf32epiphany.c:228 eelf32epiphany_4x4.c:215
+#: eelf32frvfd.c:335 eelf32ip2k.c:228 eelf32l4300.c:551 eelf32lm32.c:228
+#: eelf32lm32fd.c:335 eelf32lmip.c:551 eelf32loongarch.c:386 eelf32lppc.c:599
+#: eelf32lppclinux.c:599 eelf32lppcnto.c:599 eelf32lppcsim.c:599
+#: eelf32lr5900.c:469 eelf32lr5900n32.c:468 eelf32lriscv.c:404
+#: eelf32lriscv_ilp32.c:404 eelf32lriscv_ilp32f.c:404 eelf32lsmip.c:551
+#: eelf32ltsmip.c:551 eelf32ltsmip_fbsd.c:551 eelf32ltsmipn32.c:551
+#: eelf32ltsmipn32_fbsd.c:551 eelf32m32c.c:239 eelf32mb_linux.c:336
+#: eelf32mbel_linux.c:336 eelf32mcore.c:234 eelf32mep.c:213 eelf32metag.c:585
+#: eelf32microblaze.c:213 eelf32microblazeel.c:213 eelf32mipswindiss.c:443
+#: eelf32moxie.c:228 eelf32or1k.c:229 eelf32or1k_linux.c:336 eelf32ppc.c:599
+#: eelf32ppc_fbsd.c:599 eelf32ppchaiku.c:599 eelf32ppclinux.c:599
+#: eelf32ppcnto.c:599 eelf32ppcsim.c:599 eelf32ppcvxworks.c:573
+#: eelf32ppcwindiss.c:599 eelf32rl78.c:228 eelf32rx.c:256 eelf32rx_linux.c:241
+#: eelf32tilegx.c:336 eelf32tilegx_be.c:336 eelf32tilepro.c:336
+#: eelf32vax.c:310 eelf32visium.c:213 eelf32xc16x.c:213 eelf32xc16xl.c:213
+#: eelf32xc16xs.c:213 eelf32xstormy16.c:224 eelf32xtensa.c:2257
+#: eelf32z80.c:240 eelf64_aix.c:310 eelf64_ia64.c:367 eelf64_ia64_fbsd.c:367
+#: eelf64_s390.c:406 eelf64_sparc.c:336 eelf64_sparc_fbsd.c:336
+#: eelf64_sparc_sol2.c:468 eelf64alpha.c:429 eelf64alpha_fbsd.c:429
+#: eelf64alpha_nbsd.c:429 eelf64bmip.c:565 eelf64bpf.c:213 eelf64briscv.c:404
+#: eelf64briscv_lp64.c:404 eelf64briscv_lp64f.c:404 eelf64btsmip.c:551
+#: eelf64btsmip_fbsd.c:551 eelf64hppa.c:280 eelf64loongarch.c:386
+#: eelf64lppc.c:1048 eelf64lppc_fbsd.c:1048 eelf64lriscv.c:404
+#: eelf64lriscv_lp64.c:404 eelf64lriscv_lp64f.c:404 eelf64ltsmip.c:551
+#: eelf64ltsmip_fbsd.c:551 eelf64mmix.c:421 eelf64ppc.c:1048
+#: eelf64ppc_fbsd.c:1048 eelf64rdos.c:361 eelf64tilegx.c:336
+#: eelf64tilegx_be.c:336 eelf_i386.c:5049 eelf_i386_be.c:334
+#: eelf_i386_fbsd.c:370 eelf_i386_haiku.c:370 eelf_i386_ldso.c:345
+#: eelf_i386_sol2.c:502 eelf_i386_vxworks.c:397 eelf_iamcu.c:370
+#: eelf_k1om.c:5361 eelf_k1om_fbsd.c:370 eelf_l1om.c:5361 eelf_l1om_fbsd.c:370
+#: eelf_mipsel_haiku.c:551 eelf_s390.c:336 eelf_x86_64.c:5427
+#: eelf_x86_64_cloudabi.c:370 eelf_x86_64_fbsd.c:370 eelf_x86_64_haiku.c:370
+#: eelf_x86_64_sol2.c:502 eh8300elf.c:228 eh8300elf_linux.c:228
+#: eh8300helf.c:228 eh8300helf_linux.c:228 eh8300hnelf.c:228 eh8300self.c:228
+#: eh8300self_linux.c:228 eh8300snelf.c:228 eh8300sxelf.c:228
+#: eh8300sxelf_linux.c:228 eh8300sxnelf.c:228 ehppa64linux.c:310
+#: ehppaelf.c:496 ehppalinux.c:619 ehppanbsd.c:619 ehppaobsd.c:619
+#: ei386lynx.c:325 ei386moss.c:325 ei386nto.c:325 em32relf.c:228
+#: em32relf_linux.c:335 em32rlelf.c:228 em32rlelf_linux.c:335
+#: em68hc11elf.c:498 em68hc11elfb.c:498 em68hc12elf.c:498 em68hc12elfb.c:498
+#: em68kelf.c:493 em68kelfnbsd.c:493 emn10300.c:310 ends32belf.c:349
+#: ends32belf16m.c:349 ends32belf_linux.c:423 ends32elf.c:349
+#: ends32elf16m.c:349 ends32elf_linux.c:423 enios2elf.c:515 enios2linux.c:597
+#: epruelf.c:234 escore3_elf.c:331 escore7_elf.c:331 eshelf.c:310
+#: eshelf_fd.c:336 eshelf_linux.c:336 eshelf_nbsd.c:310 eshelf_nto.c:310
+#: eshelf_uclinux.c:310 eshelf_vxworks.c:347 eshlelf.c:310 eshlelf_fd.c:336
+#: eshlelf_linux.c:336 eshlelf_nbsd.c:310 eshlelf_nto.c:310
+#: eshlelf_vxworks.c:347 ev850.c:260 ev850_rh850.c:260
msgid "%F%P: invalid common page size `%s'\n"
msgstr "%F%P: некоректний загальний розмір Ñторінки, «%s»\n"
-#: eaarch64cloudabi.c:655 eaarch64cloudabib.c:655 eaarch64elf.c:654
-#: eaarch64elf32.c:654 eaarch64elf32b.c:654 eaarch64elfb.c:654
-#: eaarch64fbsd.c:655 eaarch64fbsdb.c:655 eaarch64linux.c:655
-#: eaarch64linux32.c:655 eaarch64linux32b.c:655 eaarch64linuxb.c:655
-#: earcelf.c:287 earclinux.c:343 earclinux_nps.c:343 earcv2elf.c:220
-#: earcv2elfx.c:220 earmelf.c:897 earmelf_fbsd.c:897 earmelf_fuchsia.c:898
-#: earmelf_linux.c:898 earmelf_linux_eabi.c:898 earmelf_linux_fdpiceabi.c:898
-#: earmelf_nacl.c:898 earmelf_nbsd.c:897 earmelf_phoenix.c:898
-#: earmelf_vxworks.c:933 earmelfb.c:897 earmelfb_fbsd.c:897
-#: earmelfb_fuchsia.c:898 earmelfb_linux.c:898 earmelfb_linux_eabi.c:898
-#: earmelfb_linux_fdpiceabi.c:898 earmelfb_nacl.c:898 earmelfb_nbsd.c:897
-#: earmnto.c:872 eavr1.c:443 eavr2.c:443 eavr25.c:443 eavr3.c:443 eavr31.c:443
-#: eavr35.c:443 eavr4.c:443 eavr5.c:443 eavr51.c:443 eavr6.c:443
-#: eavrtiny.c:443 eavrxmega1.c:443 eavrxmega2.c:443 eavrxmega3.c:443
-#: eavrxmega4.c:443 eavrxmega5.c:443 eavrxmega6.c:443 eavrxmega7.c:443
-#: ecriself.c:235 ecrislinux.c:318 ecskyelf.c:479 ecskyelf_linux.c:587
-#: ed10velf.c:220 eelf32_sparc.c:343 eelf32_sparc_sol2.c:475
-#: eelf32_sparc_vxworks.c:380 eelf32_spu.c:817 eelf32_tic6x_be.c:454
-#: eelf32_tic6x_elf_be.c:454 eelf32_tic6x_elf_le.c:454 eelf32_tic6x_le.c:454
-#: eelf32_tic6x_linux_be.c:454 eelf32_tic6x_linux_le.c:454
-#: eelf32_x86_64.c:5412 eelf32am33lin.c:317 eelf32b4300.c:558 eelf32bfin.c:335
-#: eelf32bfinfd.c:360 eelf32bmip.c:558 eelf32bmipn32.c:572 eelf32briscv.c:415
-#: eelf32briscv_ilp32.c:415 eelf32briscv_ilp32f.c:415 eelf32bsmip.c:572
-#: eelf32btsmip.c:558 eelf32btsmip_fbsd.c:558 eelf32btsmipn32.c:558
-#: eelf32btsmipn32_fbsd.c:558 eelf32cr16.c:370 eelf32crx.c:257
-#: eelf32ebmip.c:558 eelf32ebmipvxworks.c:593 eelf32elmip.c:558
-#: eelf32elmipvxworks.c:593 eelf32epiphany.c:235 eelf32epiphany_4x4.c:222
-#: eelf32frvfd.c:342 eelf32ip2k.c:235 eelf32l4300.c:558 eelf32lm32.c:235
-#: eelf32lm32fd.c:342 eelf32lmip.c:558 eelf32lppc.c:594 eelf32lppclinux.c:594
-#: eelf32lppcnto.c:594 eelf32lppcsim.c:594 eelf32lr5900.c:476
-#: eelf32lr5900n32.c:475 eelf32lriscv.c:415 eelf32lriscv_ilp32.c:415
-#: eelf32lriscv_ilp32f.c:415 eelf32lsmip.c:558 eelf32ltsmip.c:558
-#: eelf32ltsmip_fbsd.c:558 eelf32ltsmipn32.c:558 eelf32ltsmipn32_fbsd.c:558
-#: eelf32m32c.c:246 eelf32mb_linux.c:343 eelf32mbel_linux.c:343
-#: eelf32mcore.c:241 eelf32mep.c:220 eelf32metag.c:592 eelf32microblaze.c:220
-#: eelf32microblazeel.c:220 eelf32mipswindiss.c:450 eelf32moxie.c:235
-#: eelf32or1k.c:236 eelf32or1k_linux.c:343 eelf32ppc.c:594
-#: eelf32ppc_fbsd.c:594 eelf32ppclinux.c:594 eelf32ppcnto.c:594
-#: eelf32ppcsim.c:594 eelf32ppcvxworks.c:568 eelf32ppcwindiss.c:594
-#: eelf32rl78.c:235 eelf32rx.c:263 eelf32rx_linux.c:248 eelf32tilegx.c:343
-#: eelf32tilegx_be.c:343 eelf32tilepro.c:343 eelf32vax.c:317
-#: eelf32visium.c:220 eelf32xc16x.c:220 eelf32xc16xl.c:220 eelf32xc16xs.c:220
-#: eelf32xstormy16.c:231 eelf32xtensa.c:2264 eelf32z80.c:247 eelf64_aix.c:317
-#: eelf64_ia64.c:374 eelf64_ia64_fbsd.c:374 eelf64_s390.c:413
-#: eelf64_sparc.c:343 eelf64_sparc_fbsd.c:343 eelf64_sparc_sol2.c:475
-#: eelf64alpha.c:436 eelf64alpha_fbsd.c:436 eelf64alpha_nbsd.c:436
-#: eelf64bmip.c:572 eelf64bpf.c:220 eelf64briscv.c:415 eelf64briscv_lp64.c:415
-#: eelf64briscv_lp64f.c:415 eelf64btsmip.c:558 eelf64btsmip_fbsd.c:558
-#: eelf64hppa.c:287 eelf64lppc.c:1044 eelf64lppc_fbsd.c:1044
-#: eelf64lriscv.c:415 eelf64lriscv_lp64.c:415 eelf64lriscv_lp64f.c:415
-#: eelf64ltsmip.c:558 eelf64ltsmip_fbsd.c:558 eelf64mmix.c:428
-#: eelf64ppc.c:1044 eelf64ppc_fbsd.c:1044 eelf64rdos.c:368 eelf64tilegx.c:343
-#: eelf64tilegx_be.c:343 eelf_i386.c:5034 eelf_i386_be.c:341
-#: eelf_i386_fbsd.c:377 eelf_i386_ldso.c:352 eelf_i386_sol2.c:509
-#: eelf_i386_vxworks.c:404 eelf_iamcu.c:377 eelf_k1om.c:5368
-#: eelf_k1om_fbsd.c:377 eelf_l1om.c:5368 eelf_l1om_fbsd.c:377 eelf_s390.c:343
-#: eelf_x86_64.c:5412 eelf_x86_64_cloudabi.c:377 eelf_x86_64_fbsd.c:377
-#: eelf_x86_64_sol2.c:509 eh8300elf.c:235 eh8300elf_linux.c:235
-#: eh8300helf.c:235 eh8300helf_linux.c:235 eh8300hnelf.c:235 eh8300self.c:235
-#: eh8300self_linux.c:235 eh8300snelf.c:235 eh8300sxelf.c:235
-#: eh8300sxelf_linux.c:235 eh8300sxnelf.c:235 ehppa64linux.c:317
-#: ehppaelf.c:503 ehppalinux.c:626 ehppanbsd.c:626 ehppaobsd.c:626
-#: ei386lynx.c:332 ei386moss.c:332 ei386nto.c:332 em32relf.c:235
-#: em32relf_linux.c:342 em32rlelf.c:235 em32rlelf_linux.c:342
-#: em68hc11elf.c:505 em68hc11elfb.c:505 em68hc12elf.c:505 em68hc12elfb.c:505
-#: em68kelf.c:500 em68kelfnbsd.c:500 emn10300.c:317 ends32belf.c:356
-#: ends32belf16m.c:356 ends32belf_linux.c:430 ends32elf.c:356
-#: ends32elf16m.c:356 ends32elf_linux.c:430 enios2elf.c:522 enios2linux.c:604
-#: epruelf.c:241 escore3_elf.c:338 escore7_elf.c:338 eshelf.c:317
-#: eshelf_fd.c:343 eshelf_linux.c:343 eshelf_nbsd.c:317 eshelf_nto.c:317
-#: eshelf_uclinux.c:317 eshelf_vxworks.c:354 eshlelf.c:317 eshlelf_fd.c:343
-#: eshlelf_linux.c:343 eshlelf_nbsd.c:317 eshlelf_nto.c:317
-#: eshlelf_vxworks.c:354 ev850.c:267 ev850_rh850.c:267
+#: eaarch64cloudabi.c:657 eaarch64cloudabib.c:657 eaarch64elf.c:656
+#: eaarch64elf32.c:656 eaarch64elf32b.c:656 eaarch64elfb.c:656
+#: eaarch64fbsd.c:657 eaarch64fbsdb.c:657 eaarch64haiku.c:657
+#: eaarch64linux.c:657 eaarch64linux32.c:657 eaarch64linux32b.c:657
+#: eaarch64linuxb.c:657 earcelf.c:289 earclinux.c:345 earclinux_nps.c:345
+#: earcv2elf.c:222 earcv2elfx.c:222 earmelf.c:899 earmelf_fbsd.c:899
+#: earmelf_fuchsia.c:900 earmelf_haiku.c:900 earmelf_linux.c:900
+#: earmelf_linux_eabi.c:900 earmelf_linux_fdpiceabi.c:900 earmelf_nacl.c:900
+#: earmelf_nbsd.c:899 earmelf_phoenix.c:900 earmelf_vxworks.c:935
+#: earmelfb.c:899 earmelfb_fbsd.c:899 earmelfb_fuchsia.c:900
+#: earmelfb_linux.c:900 earmelfb_linux_eabi.c:900
+#: earmelfb_linux_fdpiceabi.c:900 earmelfb_nacl.c:900 earmelfb_nbsd.c:899
+#: earmnto.c:874 eavr1.c:445 eavr2.c:445 eavr25.c:445 eavr3.c:445 eavr31.c:445
+#: eavr35.c:445 eavr4.c:445 eavr5.c:445 eavr51.c:445 eavr6.c:445
+#: eavrtiny.c:445 eavrxmega1.c:445 eavrxmega2.c:445 eavrxmega3.c:445
+#: eavrxmega4.c:445 eavrxmega5.c:445 eavrxmega6.c:445 eavrxmega7.c:445
+#: ecriself.c:237 ecrislinux.c:320 ecskyelf.c:481 ecskyelf_linux.c:589
+#: ed10velf.c:222 eelf32_sparc.c:345 eelf32_sparc_sol2.c:477
+#: eelf32_sparc_vxworks.c:382 eelf32_spu.c:955 eelf32_tic6x_be.c:456
+#: eelf32_tic6x_elf_be.c:456 eelf32_tic6x_elf_le.c:456 eelf32_tic6x_le.c:456
+#: eelf32_tic6x_linux_be.c:456 eelf32_tic6x_linux_le.c:456
+#: eelf32_x86_64.c:5436 eelf32am33lin.c:319 eelf32b4300.c:560 eelf32bfin.c:337
+#: eelf32bfinfd.c:362 eelf32bmip.c:560 eelf32bmipn32.c:574 eelf32briscv.c:413
+#: eelf32briscv_ilp32.c:413 eelf32briscv_ilp32f.c:413 eelf32bsmip.c:574
+#: eelf32btsmip.c:560 eelf32btsmip_fbsd.c:560 eelf32btsmipn32.c:560
+#: eelf32btsmipn32_fbsd.c:560 eelf32cr16.c:372 eelf32crx.c:259
+#: eelf32ebmip.c:560 eelf32ebmipvxworks.c:595 eelf32elmip.c:560
+#: eelf32elmipvxworks.c:595 eelf32epiphany.c:237 eelf32epiphany_4x4.c:224
+#: eelf32frvfd.c:344 eelf32ip2k.c:237 eelf32l4300.c:560 eelf32lm32.c:237
+#: eelf32lm32fd.c:344 eelf32lmip.c:560 eelf32loongarch.c:395 eelf32lppc.c:608
+#: eelf32lppclinux.c:608 eelf32lppcnto.c:608 eelf32lppcsim.c:608
+#: eelf32lr5900.c:478 eelf32lr5900n32.c:477 eelf32lriscv.c:413
+#: eelf32lriscv_ilp32.c:413 eelf32lriscv_ilp32f.c:413 eelf32lsmip.c:560
+#: eelf32ltsmip.c:560 eelf32ltsmip_fbsd.c:560 eelf32ltsmipn32.c:560
+#: eelf32ltsmipn32_fbsd.c:560 eelf32m32c.c:248 eelf32mb_linux.c:345
+#: eelf32mbel_linux.c:345 eelf32mcore.c:243 eelf32mep.c:222 eelf32metag.c:594
+#: eelf32microblaze.c:222 eelf32microblazeel.c:222 eelf32mipswindiss.c:452
+#: eelf32moxie.c:237 eelf32or1k.c:238 eelf32or1k_linux.c:345 eelf32ppc.c:608
+#: eelf32ppc_fbsd.c:608 eelf32ppchaiku.c:608 eelf32ppclinux.c:608
+#: eelf32ppcnto.c:608 eelf32ppcsim.c:608 eelf32ppcvxworks.c:582
+#: eelf32ppcwindiss.c:608 eelf32rl78.c:237 eelf32rx.c:265 eelf32rx_linux.c:250
+#: eelf32tilegx.c:345 eelf32tilegx_be.c:345 eelf32tilepro.c:345
+#: eelf32vax.c:319 eelf32visium.c:222 eelf32xc16x.c:222 eelf32xc16xl.c:222
+#: eelf32xc16xs.c:222 eelf32xstormy16.c:233 eelf32xtensa.c:2266
+#: eelf32z80.c:249 eelf64_aix.c:319 eelf64_ia64.c:376 eelf64_ia64_fbsd.c:376
+#: eelf64_s390.c:415 eelf64_sparc.c:345 eelf64_sparc_fbsd.c:345
+#: eelf64_sparc_sol2.c:477 eelf64alpha.c:438 eelf64alpha_fbsd.c:438
+#: eelf64alpha_nbsd.c:438 eelf64bmip.c:574 eelf64bpf.c:222 eelf64briscv.c:413
+#: eelf64briscv_lp64.c:413 eelf64briscv_lp64f.c:413 eelf64btsmip.c:560
+#: eelf64btsmip_fbsd.c:560 eelf64hppa.c:289 eelf64loongarch.c:395
+#: eelf64lppc.c:1057 eelf64lppc_fbsd.c:1057 eelf64lriscv.c:413
+#: eelf64lriscv_lp64.c:413 eelf64lriscv_lp64f.c:413 eelf64ltsmip.c:560
+#: eelf64ltsmip_fbsd.c:560 eelf64mmix.c:430 eelf64ppc.c:1057
+#: eelf64ppc_fbsd.c:1057 eelf64rdos.c:370 eelf64tilegx.c:345
+#: eelf64tilegx_be.c:345 eelf_i386.c:5058 eelf_i386_be.c:343
+#: eelf_i386_fbsd.c:379 eelf_i386_haiku.c:379 eelf_i386_ldso.c:354
+#: eelf_i386_sol2.c:511 eelf_i386_vxworks.c:406 eelf_iamcu.c:379
+#: eelf_k1om.c:5370 eelf_k1om_fbsd.c:379 eelf_l1om.c:5370 eelf_l1om_fbsd.c:379
+#: eelf_mipsel_haiku.c:560 eelf_s390.c:345 eelf_x86_64.c:5436
+#: eelf_x86_64_cloudabi.c:379 eelf_x86_64_fbsd.c:379 eelf_x86_64_haiku.c:379
+#: eelf_x86_64_sol2.c:511 eh8300elf.c:237 eh8300elf_linux.c:237
+#: eh8300helf.c:237 eh8300helf_linux.c:237 eh8300hnelf.c:237 eh8300self.c:237
+#: eh8300self_linux.c:237 eh8300snelf.c:237 eh8300sxelf.c:237
+#: eh8300sxelf_linux.c:237 eh8300sxnelf.c:237 ehppa64linux.c:319
+#: ehppaelf.c:505 ehppalinux.c:628 ehppanbsd.c:628 ehppaobsd.c:628
+#: ei386lynx.c:334 ei386moss.c:334 ei386nto.c:334 em32relf.c:237
+#: em32relf_linux.c:344 em32rlelf.c:237 em32rlelf_linux.c:344
+#: em68hc11elf.c:507 em68hc11elfb.c:507 em68hc12elf.c:507 em68hc12elfb.c:507
+#: em68kelf.c:502 em68kelfnbsd.c:502 emn10300.c:319 ends32belf.c:358
+#: ends32belf16m.c:358 ends32belf_linux.c:432 ends32elf.c:358
+#: ends32elf16m.c:358 ends32elf_linux.c:432 enios2elf.c:524 enios2linux.c:606
+#: epruelf.c:243 escore3_elf.c:340 escore7_elf.c:340 eshelf.c:319
+#: eshelf_fd.c:345 eshelf_linux.c:345 eshelf_nbsd.c:319 eshelf_nto.c:319
+#: eshelf_uclinux.c:319 eshelf_vxworks.c:356 eshlelf.c:319 eshlelf_fd.c:345
+#: eshlelf_linux.c:345 eshlelf_nbsd.c:319 eshlelf_nto.c:319
+#: eshlelf_vxworks.c:356 ev850.c:269 ev850_rh850.c:269
msgid "%F%P: invalid stack size `%s'\n"
msgstr "%F%P: некоректний розмір Ñтека «%s»\n"
-#: eaarch64cloudabi.c:694 eaarch64cloudabib.c:694 eaarch64elf.c:693
-#: eaarch64elf32.c:693 eaarch64elf32b.c:693 eaarch64elfb.c:693
-#: eaarch64fbsd.c:694 eaarch64fbsdb.c:694 eaarch64linux.c:694
-#: eaarch64linux32.c:694 eaarch64linux32b.c:694 eaarch64linuxb.c:694
-#: earcelf.c:326 earclinux.c:382 earclinux_nps.c:382 earcv2elf.c:259
-#: earcv2elfx.c:259 earmelf.c:936 earmelf_fbsd.c:936 earmelf_fuchsia.c:937
-#: earmelf_linux.c:937 earmelf_linux_eabi.c:937 earmelf_linux_fdpiceabi.c:937
-#: earmelf_nacl.c:937 earmelf_nbsd.c:936 earmelf_phoenix.c:937
-#: earmelf_vxworks.c:972 earmelfb.c:936 earmelfb_fbsd.c:936
-#: earmelfb_fuchsia.c:937 earmelfb_linux.c:937 earmelfb_linux_eabi.c:937
-#: earmelfb_linux_fdpiceabi.c:937 earmelfb_nacl.c:937 earmelfb_nbsd.c:936
-#: earmnto.c:911 eavr1.c:482 eavr2.c:482 eavr25.c:482 eavr3.c:482 eavr31.c:482
-#: eavr35.c:482 eavr4.c:482 eavr5.c:482 eavr51.c:482 eavr6.c:482
-#: eavrtiny.c:482 eavrxmega1.c:482 eavrxmega2.c:482 eavrxmega3.c:482
-#: eavrxmega4.c:482 eavrxmega5.c:482 eavrxmega6.c:482 eavrxmega7.c:482
-#: ecriself.c:274 ecrislinux.c:357 ecskyelf.c:518 ecskyelf_linux.c:626
-#: ed10velf.c:259 eelf32_sparc.c:382 eelf32_sparc_sol2.c:514
-#: eelf32_sparc_vxworks.c:419 eelf32_spu.c:856 eelf32_tic6x_be.c:493
-#: eelf32_tic6x_elf_be.c:493 eelf32_tic6x_elf_le.c:493 eelf32_tic6x_le.c:493
-#: eelf32_tic6x_linux_be.c:493 eelf32_tic6x_linux_le.c:493
-#: eelf32_x86_64.c:5451 eelf32am33lin.c:356 eelf32b4300.c:597 eelf32bfin.c:374
-#: eelf32bfinfd.c:399 eelf32bmip.c:597 eelf32bmipn32.c:611 eelf32briscv.c:454
-#: eelf32briscv_ilp32.c:454 eelf32briscv_ilp32f.c:454 eelf32bsmip.c:611
-#: eelf32btsmip.c:597 eelf32btsmip_fbsd.c:597 eelf32btsmipn32.c:597
-#: eelf32btsmipn32_fbsd.c:597 eelf32cr16.c:409 eelf32crx.c:296
-#: eelf32ebmip.c:597 eelf32ebmipvxworks.c:632 eelf32elmip.c:597
-#: eelf32elmipvxworks.c:632 eelf32epiphany.c:274 eelf32epiphany_4x4.c:261
-#: eelf32frvfd.c:381 eelf32ip2k.c:274 eelf32l4300.c:597 eelf32lm32.c:274
-#: eelf32lm32fd.c:381 eelf32lmip.c:597 eelf32lppc.c:633 eelf32lppclinux.c:633
-#: eelf32lppcnto.c:633 eelf32lppcsim.c:633 eelf32lr5900.c:515
-#: eelf32lr5900n32.c:514 eelf32lriscv.c:454 eelf32lriscv_ilp32.c:454
-#: eelf32lriscv_ilp32f.c:454 eelf32lsmip.c:597 eelf32ltsmip.c:597
-#: eelf32ltsmip_fbsd.c:597 eelf32ltsmipn32.c:597 eelf32ltsmipn32_fbsd.c:597
-#: eelf32m32c.c:285 eelf32mb_linux.c:382 eelf32mbel_linux.c:382
-#: eelf32mcore.c:280 eelf32mep.c:259 eelf32metag.c:631 eelf32microblaze.c:259
-#: eelf32microblazeel.c:259 eelf32mipswindiss.c:489 eelf32moxie.c:274
-#: eelf32or1k.c:275 eelf32or1k_linux.c:382 eelf32ppc.c:633
-#: eelf32ppc_fbsd.c:633 eelf32ppclinux.c:633 eelf32ppcnto.c:633
-#: eelf32ppcsim.c:633 eelf32ppcvxworks.c:607 eelf32ppcwindiss.c:633
-#: eelf32rl78.c:274 eelf32rx.c:302 eelf32rx_linux.c:287 eelf32tilegx.c:382
-#: eelf32tilegx_be.c:382 eelf32tilepro.c:382 eelf32vax.c:356
-#: eelf32visium.c:259 eelf32xc16x.c:259 eelf32xc16xl.c:259 eelf32xc16xs.c:259
-#: eelf32xstormy16.c:270 eelf32xtensa.c:2303 eelf32z80.c:286 eelf64_aix.c:356
-#: eelf64_ia64.c:413 eelf64_ia64_fbsd.c:413 eelf64_s390.c:452
-#: eelf64_sparc.c:382 eelf64_sparc_fbsd.c:382 eelf64_sparc_sol2.c:514
-#: eelf64alpha.c:475 eelf64alpha_fbsd.c:475 eelf64alpha_nbsd.c:475
-#: eelf64bmip.c:611 eelf64bpf.c:259 eelf64briscv.c:454 eelf64briscv_lp64.c:454
-#: eelf64briscv_lp64f.c:454 eelf64btsmip.c:597 eelf64btsmip_fbsd.c:597
-#: eelf64hppa.c:326 eelf64lppc.c:1083 eelf64lppc_fbsd.c:1083
-#: eelf64lriscv.c:454 eelf64lriscv_lp64.c:454 eelf64lriscv_lp64f.c:454
-#: eelf64ltsmip.c:597 eelf64ltsmip_fbsd.c:597 eelf64mmix.c:467
-#: eelf64ppc.c:1083 eelf64ppc_fbsd.c:1083 eelf64rdos.c:407 eelf64tilegx.c:382
-#: eelf64tilegx_be.c:382 eelf_i386.c:5073 eelf_i386_be.c:380
-#: eelf_i386_fbsd.c:416 eelf_i386_ldso.c:391 eelf_i386_sol2.c:548
-#: eelf_i386_vxworks.c:443 eelf_iamcu.c:416 eelf_k1om.c:5407
-#: eelf_k1om_fbsd.c:416 eelf_l1om.c:5407 eelf_l1om_fbsd.c:416 eelf_s390.c:382
-#: eelf_x86_64.c:5451 eelf_x86_64_cloudabi.c:416 eelf_x86_64_fbsd.c:416
-#: eelf_x86_64_sol2.c:548 eh8300elf.c:274 eh8300elf_linux.c:274
-#: eh8300helf.c:274 eh8300helf_linux.c:274 eh8300hnelf.c:274 eh8300self.c:274
-#: eh8300self_linux.c:274 eh8300snelf.c:274 eh8300sxelf.c:274
-#: eh8300sxelf_linux.c:274 eh8300sxnelf.c:274 ehppa64linux.c:356
-#: ehppaelf.c:542 ehppalinux.c:665 ehppanbsd.c:665 ehppaobsd.c:665
-#: ei386lynx.c:371 ei386moss.c:371 ei386nto.c:371 em32relf.c:274
-#: em32relf_linux.c:381 em32rlelf.c:274 em32rlelf_linux.c:381
-#: em68hc11elf.c:544 em68hc11elfb.c:544 em68hc12elf.c:544 em68hc12elfb.c:544
-#: em68kelf.c:539 em68kelfnbsd.c:539 emn10300.c:356 ends32belf.c:395
-#: ends32belf16m.c:395 ends32belf_linux.c:469 ends32elf.c:395
-#: ends32elf16m.c:395 ends32elf_linux.c:469 enios2elf.c:561 enios2linux.c:643
-#: epruelf.c:280 escore3_elf.c:377 escore7_elf.c:377 eshelf.c:356
-#: eshelf_fd.c:382 eshelf_linux.c:382 eshelf_nbsd.c:356 eshelf_nto.c:356
-#: eshelf_uclinux.c:356 eshelf_vxworks.c:393 eshlelf.c:356 eshlelf_fd.c:382
-#: eshlelf_linux.c:382 eshlelf_nbsd.c:356 eshlelf_nto.c:356
-#: eshlelf_vxworks.c:393 ev850.c:306 ev850_rh850.c:306
+#: eaarch64cloudabi.c:696 eaarch64cloudabib.c:696 eaarch64elf.c:695
+#: eaarch64elf32.c:695 eaarch64elf32b.c:695 eaarch64elfb.c:695
+#: eaarch64fbsd.c:696 eaarch64fbsdb.c:696 eaarch64haiku.c:696
+#: eaarch64linux.c:696 eaarch64linux32.c:696 eaarch64linux32b.c:696
+#: eaarch64linuxb.c:696 earcelf.c:328 earclinux.c:384 earclinux_nps.c:384
+#: earcv2elf.c:261 earcv2elfx.c:261 earmelf.c:938 earmelf_fbsd.c:938
+#: earmelf_fuchsia.c:939 earmelf_haiku.c:939 earmelf_linux.c:939
+#: earmelf_linux_eabi.c:939 earmelf_linux_fdpiceabi.c:939 earmelf_nacl.c:939
+#: earmelf_nbsd.c:938 earmelf_phoenix.c:939 earmelf_vxworks.c:974
+#: earmelfb.c:938 earmelfb_fbsd.c:938 earmelfb_fuchsia.c:939
+#: earmelfb_linux.c:939 earmelfb_linux_eabi.c:939
+#: earmelfb_linux_fdpiceabi.c:939 earmelfb_nacl.c:939 earmelfb_nbsd.c:938
+#: earmnto.c:913 eavr1.c:484 eavr2.c:484 eavr25.c:484 eavr3.c:484 eavr31.c:484
+#: eavr35.c:484 eavr4.c:484 eavr5.c:484 eavr51.c:484 eavr6.c:484
+#: eavrtiny.c:484 eavrxmega1.c:484 eavrxmega2.c:484 eavrxmega3.c:484
+#: eavrxmega4.c:484 eavrxmega5.c:484 eavrxmega6.c:484 eavrxmega7.c:484
+#: ecriself.c:276 ecrislinux.c:359 ecskyelf.c:520 ecskyelf_linux.c:628
+#: ed10velf.c:261 eelf32_sparc.c:384 eelf32_sparc_sol2.c:516
+#: eelf32_sparc_vxworks.c:421 eelf32_spu.c:994 eelf32_tic6x_be.c:495
+#: eelf32_tic6x_elf_be.c:495 eelf32_tic6x_elf_le.c:495 eelf32_tic6x_le.c:495
+#: eelf32_tic6x_linux_be.c:495 eelf32_tic6x_linux_le.c:495
+#: eelf32_x86_64.c:5475 eelf32am33lin.c:358 eelf32b4300.c:599 eelf32bfin.c:376
+#: eelf32bfinfd.c:401 eelf32bmip.c:599 eelf32bmipn32.c:613 eelf32briscv.c:452
+#: eelf32briscv_ilp32.c:452 eelf32briscv_ilp32f.c:452 eelf32bsmip.c:613
+#: eelf32btsmip.c:599 eelf32btsmip_fbsd.c:599 eelf32btsmipn32.c:599
+#: eelf32btsmipn32_fbsd.c:599 eelf32cr16.c:411 eelf32crx.c:298
+#: eelf32ebmip.c:599 eelf32ebmipvxworks.c:634 eelf32elmip.c:599
+#: eelf32elmipvxworks.c:634 eelf32epiphany.c:276 eelf32epiphany_4x4.c:263
+#: eelf32frvfd.c:383 eelf32ip2k.c:276 eelf32l4300.c:599 eelf32lm32.c:276
+#: eelf32lm32fd.c:383 eelf32lmip.c:599 eelf32loongarch.c:434 eelf32lppc.c:647
+#: eelf32lppclinux.c:647 eelf32lppcnto.c:647 eelf32lppcsim.c:647
+#: eelf32lr5900.c:517 eelf32lr5900n32.c:516 eelf32lriscv.c:452
+#: eelf32lriscv_ilp32.c:452 eelf32lriscv_ilp32f.c:452 eelf32lsmip.c:599
+#: eelf32ltsmip.c:599 eelf32ltsmip_fbsd.c:599 eelf32ltsmipn32.c:599
+#: eelf32ltsmipn32_fbsd.c:599 eelf32m32c.c:287 eelf32mb_linux.c:384
+#: eelf32mbel_linux.c:384 eelf32mcore.c:282 eelf32mep.c:261 eelf32metag.c:633
+#: eelf32microblaze.c:261 eelf32microblazeel.c:261 eelf32mipswindiss.c:491
+#: eelf32moxie.c:276 eelf32or1k.c:277 eelf32or1k_linux.c:384 eelf32ppc.c:647
+#: eelf32ppc_fbsd.c:647 eelf32ppchaiku.c:647 eelf32ppclinux.c:647
+#: eelf32ppcnto.c:647 eelf32ppcsim.c:647 eelf32ppcvxworks.c:621
+#: eelf32ppcwindiss.c:647 eelf32rl78.c:276 eelf32rx.c:304 eelf32rx_linux.c:289
+#: eelf32tilegx.c:384 eelf32tilegx_be.c:384 eelf32tilepro.c:384
+#: eelf32vax.c:358 eelf32visium.c:261 eelf32xc16x.c:261 eelf32xc16xl.c:261
+#: eelf32xc16xs.c:261 eelf32xstormy16.c:272 eelf32xtensa.c:2305
+#: eelf32z80.c:288 eelf64_aix.c:358 eelf64_ia64.c:415 eelf64_ia64_fbsd.c:415
+#: eelf64_s390.c:454 eelf64_sparc.c:384 eelf64_sparc_fbsd.c:384
+#: eelf64_sparc_sol2.c:516 eelf64alpha.c:477 eelf64alpha_fbsd.c:477
+#: eelf64alpha_nbsd.c:477 eelf64bmip.c:613 eelf64bpf.c:261 eelf64briscv.c:452
+#: eelf64briscv_lp64.c:452 eelf64briscv_lp64f.c:452 eelf64btsmip.c:599
+#: eelf64btsmip_fbsd.c:599 eelf64hppa.c:328 eelf64loongarch.c:434
+#: eelf64lppc.c:1096 eelf64lppc_fbsd.c:1096 eelf64lriscv.c:452
+#: eelf64lriscv_lp64.c:452 eelf64lriscv_lp64f.c:452 eelf64ltsmip.c:599
+#: eelf64ltsmip_fbsd.c:599 eelf64mmix.c:469 eelf64ppc.c:1096
+#: eelf64ppc_fbsd.c:1096 eelf64rdos.c:409 eelf64tilegx.c:384
+#: eelf64tilegx_be.c:384 eelf_i386.c:5097 eelf_i386_be.c:382
+#: eelf_i386_fbsd.c:418 eelf_i386_haiku.c:418 eelf_i386_ldso.c:393
+#: eelf_i386_sol2.c:550 eelf_i386_vxworks.c:445 eelf_iamcu.c:418
+#: eelf_k1om.c:5409 eelf_k1om_fbsd.c:418 eelf_l1om.c:5409 eelf_l1om_fbsd.c:418
+#: eelf_mipsel_haiku.c:599 eelf_s390.c:384 eelf_x86_64.c:5475
+#: eelf_x86_64_cloudabi.c:418 eelf_x86_64_fbsd.c:418 eelf_x86_64_haiku.c:418
+#: eelf_x86_64_sol2.c:550 eh8300elf.c:276 eh8300elf_linux.c:276
+#: eh8300helf.c:276 eh8300helf_linux.c:276 eh8300hnelf.c:276 eh8300self.c:276
+#: eh8300self_linux.c:276 eh8300snelf.c:276 eh8300sxelf.c:276
+#: eh8300sxelf_linux.c:276 eh8300sxnelf.c:276 ehppa64linux.c:358
+#: ehppaelf.c:544 ehppalinux.c:667 ehppanbsd.c:667 ehppaobsd.c:667
+#: ei386lynx.c:373 ei386moss.c:373 ei386nto.c:373 em32relf.c:276
+#: em32relf_linux.c:383 em32rlelf.c:276 em32rlelf_linux.c:383
+#: em68hc11elf.c:546 em68hc11elfb.c:546 em68hc12elf.c:546 em68hc12elfb.c:546
+#: em68kelf.c:541 em68kelfnbsd.c:541 emn10300.c:358 ends32belf.c:397
+#: ends32belf16m.c:397 ends32belf_linux.c:471 ends32elf.c:397
+#: ends32elf16m.c:397 ends32elf_linux.c:471 enios2elf.c:563 enios2linux.c:645
+#: epruelf.c:282 escore3_elf.c:379 escore7_elf.c:379 eshelf.c:358
+#: eshelf_fd.c:384 eshelf_linux.c:384 eshelf_nbsd.c:358 eshelf_nto.c:358
+#: eshelf_uclinux.c:358 eshelf_vxworks.c:395 eshlelf.c:358 eshlelf_fd.c:384
+#: eshlelf_linux.c:384 eshlelf_nbsd.c:358 eshlelf_nto.c:358
+#: eshlelf_vxworks.c:395 ev850.c:308 ev850_rh850.c:308
msgid "%F%P: invalid visibility in `-z %s'; must be default, internal, hidden, or protected"
msgstr "%F%P: некоректна видиміÑÑ‚ÑŒ у «-z %s»; має бути default, internal, hidden або protected"
-#: eaarch64cloudabi.c:767 eaarch64cloudabib.c:767 eaarch64elf.c:762
-#: eaarch64elf32.c:762 eaarch64elf32b.c:762 eaarch64elfb.c:762
-#: eaarch64fbsd.c:767 eaarch64fbsdb.c:767 eaarch64linux.c:767
-#: eaarch64linux32.c:767 eaarch64linux32b.c:767 eaarch64linuxb.c:767
-#: earcelf.c:386 earclinux.c:446 earclinux_nps.c:446 earcv2elf.c:264
-#: earcv2elfx.c:264 earmelf.c:996 earmelf_fbsd.c:996 earmelf_fuchsia.c:1001
-#: earmelf_linux.c:1001 earmelf_linux_eabi.c:1001
-#: earmelf_linux_fdpiceabi.c:1001 earmelf_nacl.c:1001 earmelf_nbsd.c:996
-#: earmelf_phoenix.c:1001 earmelf_vxworks.c:1032 earmelfb.c:996
-#: earmelfb_fbsd.c:996 earmelfb_fuchsia.c:1001 earmelfb_linux.c:1001
-#: earmelfb_linux_eabi.c:1001 earmelfb_linux_fdpiceabi.c:1001
-#: earmelfb_nacl.c:1001 earmelfb_nbsd.c:996 earmnto.c:971 eavr1.c:487
-#: eavr2.c:487 eavr25.c:487 eavr3.c:487 eavr31.c:487 eavr35.c:487 eavr4.c:487
-#: eavr5.c:487 eavr51.c:487 eavr6.c:487 eavrtiny.c:487 eavrxmega1.c:487
-#: eavrxmega2.c:487 eavrxmega3.c:487 eavrxmega4.c:487 eavrxmega5.c:487
-#: eavrxmega6.c:487 eavrxmega7.c:487 ecriself.c:279 ecrislinux.c:421
-#: ecskyelf.c:523 ecskyelf_linux.c:690 ed10velf.c:264 eelf32_sparc.c:446
-#: eelf32_sparc_sol2.c:578 eelf32_sparc_vxworks.c:483 eelf32_spu.c:861
-#: eelf32_tic6x_be.c:553 eelf32_tic6x_elf_be.c:553 eelf32_tic6x_elf_le.c:553
-#: eelf32_tic6x_le.c:553 eelf32_tic6x_linux_be.c:553
-#: eelf32_tic6x_linux_le.c:553 eelf32_x86_64.c:5598 eelf32am33lin.c:416
-#: eelf32b4300.c:661 eelf32bfin.c:434 eelf32bfinfd.c:459 eelf32bmip.c:661
-#: eelf32bmipn32.c:675 eelf32briscv.c:518 eelf32briscv_ilp32.c:518
-#: eelf32briscv_ilp32f.c:518 eelf32bsmip.c:675 eelf32btsmip.c:661
-#: eelf32btsmip_fbsd.c:661 eelf32btsmipn32.c:661 eelf32btsmipn32_fbsd.c:661
-#: eelf32cr16.c:414 eelf32crx.c:301 eelf32ebmip.c:661 eelf32ebmipvxworks.c:696
-#: eelf32elmip.c:661 eelf32elmipvxworks.c:696 eelf32epiphany.c:279
-#: eelf32epiphany_4x4.c:266 eelf32frvfd.c:441 eelf32ip2k.c:279
-#: eelf32l4300.c:661 eelf32lm32.c:279 eelf32lm32fd.c:441 eelf32lmip.c:661
-#: eelf32lppc.c:703 eelf32lppclinux.c:703 eelf32lppcnto.c:703
-#: eelf32lppcsim.c:703 eelf32lr5900.c:520 eelf32lr5900n32.c:519
-#: eelf32lriscv.c:518 eelf32lriscv_ilp32.c:518 eelf32lriscv_ilp32f.c:518
-#: eelf32lsmip.c:661 eelf32ltsmip.c:661 eelf32ltsmip_fbsd.c:661
-#: eelf32ltsmipn32.c:661 eelf32ltsmipn32_fbsd.c:661 eelf32m32c.c:290
-#: eelf32mb_linux.c:446 eelf32mbel_linux.c:446 eelf32mcore.c:285
-#: eelf32mep.c:264 eelf32metag.c:695 eelf32microblaze.c:264
-#: eelf32microblazeel.c:264 eelf32mipswindiss.c:494 eelf32moxie.c:279
-#: eelf32or1k.c:280 eelf32or1k_linux.c:446 eelf32ppc.c:703
-#: eelf32ppc_fbsd.c:703 eelf32ppclinux.c:703 eelf32ppcnto.c:703
-#: eelf32ppcsim.c:703 eelf32ppcvxworks.c:677 eelf32ppcwindiss.c:703
-#: eelf32rl78.c:279 eelf32rx.c:307 eelf32rx_linux.c:292 eelf32tilegx.c:446
-#: eelf32tilegx_be.c:446 eelf32tilepro.c:446 eelf32vax.c:416
-#: eelf32visium.c:264 eelf32xc16x.c:264 eelf32xc16xl.c:264 eelf32xc16xs.c:264
-#: eelf32xstormy16.c:275 eelf32xtensa.c:2367 eelf32z80.c:291 eelf64_aix.c:416
-#: eelf64_ia64.c:473 eelf64_ia64_fbsd.c:473 eelf64_s390.c:516
-#: eelf64_sparc.c:446 eelf64_sparc_fbsd.c:446 eelf64_sparc_sol2.c:578
-#: eelf64alpha.c:539 eelf64alpha_fbsd.c:539 eelf64alpha_nbsd.c:539
-#: eelf64bmip.c:675 eelf64bpf.c:264 eelf64briscv.c:518 eelf64briscv_lp64.c:518
-#: eelf64briscv_lp64f.c:518 eelf64btsmip.c:661 eelf64btsmip_fbsd.c:661
-#: eelf64hppa.c:386 eelf64lppc.c:1153 eelf64lppc_fbsd.c:1153
-#: eelf64lriscv.c:518 eelf64lriscv_lp64.c:518 eelf64lriscv_lp64f.c:518
-#: eelf64ltsmip.c:661 eelf64ltsmip_fbsd.c:661 eelf64mmix.c:527
-#: eelf64ppc.c:1153 eelf64ppc_fbsd.c:1153 eelf64rdos.c:471 eelf64tilegx.c:446
-#: eelf64tilegx_be.c:446 eelf_i386.c:5217 eelf_i386_be.c:483
-#: eelf_i386_fbsd.c:560 eelf_i386_ldso.c:498 eelf_i386_sol2.c:655
-#: eelf_i386_vxworks.c:550 eelf_iamcu.c:523 eelf_k1om.c:5514
-#: eelf_k1om_fbsd.c:523 eelf_l1om.c:5514 eelf_l1om_fbsd.c:523 eelf_s390.c:446
-#: eelf_x86_64.c:5651 eelf_x86_64_cloudabi.c:616 eelf_x86_64_fbsd.c:616
-#: eelf_x86_64_sol2.c:748 eh8300elf.c:279 eh8300elf_linux.c:279
-#: eh8300helf.c:279 eh8300helf_linux.c:279 eh8300hnelf.c:279 eh8300self.c:279
-#: eh8300self_linux.c:279 eh8300snelf.c:279 eh8300sxelf.c:279
-#: eh8300sxelf_linux.c:279 eh8300sxnelf.c:279 ehppa64linux.c:416
-#: ehppaelf.c:547 ehppalinux.c:729 ehppanbsd.c:729 ehppaobsd.c:729
-#: ei386lynx.c:431 ei386moss.c:431 ei386nto.c:431 em32relf.c:279
-#: em32relf_linux.c:441 em32rlelf.c:279 em32rlelf_linux.c:441
-#: em68hc11elf.c:549 em68hc11elfb.c:549 em68hc12elf.c:549 em68hc12elfb.c:549
-#: em68kelf.c:603 em68kelfnbsd.c:603 emn10300.c:416 ends32belf.c:400
-#: ends32belf16m.c:400 ends32belf_linux.c:533 ends32elf.c:400
-#: ends32elf16m.c:400 ends32elf_linux.c:533 enios2elf.c:566 enios2linux.c:707
-#: epruelf.c:285 escore3_elf.c:437 escore7_elf.c:437 eshelf.c:416
-#: eshelf_fd.c:446 eshelf_linux.c:446 eshelf_nbsd.c:416 eshelf_nto.c:416
-#: eshelf_uclinux.c:416 eshelf_vxworks.c:453 eshlelf.c:416 eshlelf_fd.c:446
-#: eshlelf_linux.c:446 eshlelf_nbsd.c:416 eshlelf_nto.c:416
-#: eshlelf_vxworks.c:453 ev850.c:311 ev850_rh850.c:311
+#: eaarch64cloudabi.c:769 eaarch64cloudabib.c:769 eaarch64elf.c:764
+#: eaarch64elf32.c:764 eaarch64elf32b.c:764 eaarch64elfb.c:764
+#: eaarch64fbsd.c:769 eaarch64fbsdb.c:769 eaarch64haiku.c:769
+#: eaarch64linux.c:769 eaarch64linux32.c:769 eaarch64linux32b.c:769
+#: eaarch64linuxb.c:769 earcelf.c:388 earclinux.c:448 earclinux_nps.c:448
+#: earcv2elf.c:266 earcv2elfx.c:266 earmelf.c:998 earmelf_fbsd.c:998
+#: earmelf_fuchsia.c:1003 earmelf_haiku.c:1003 earmelf_linux.c:1003
+#: earmelf_linux_eabi.c:1003 earmelf_linux_fdpiceabi.c:1003
+#: earmelf_nacl.c:1003 earmelf_nbsd.c:998 earmelf_phoenix.c:1003
+#: earmelf_vxworks.c:1034 earmelfb.c:998 earmelfb_fbsd.c:998
+#: earmelfb_fuchsia.c:1003 earmelfb_linux.c:1003 earmelfb_linux_eabi.c:1003
+#: earmelfb_linux_fdpiceabi.c:1003 earmelfb_nacl.c:1003 earmelfb_nbsd.c:998
+#: earmnto.c:973 eavr1.c:489 eavr2.c:489 eavr25.c:489 eavr3.c:489 eavr31.c:489
+#: eavr35.c:489 eavr4.c:489 eavr5.c:489 eavr51.c:489 eavr6.c:489
+#: eavrtiny.c:489 eavrxmega1.c:489 eavrxmega2.c:489 eavrxmega3.c:489
+#: eavrxmega4.c:489 eavrxmega5.c:489 eavrxmega6.c:489 eavrxmega7.c:489
+#: ecriself.c:281 ecrislinux.c:423 ecskyelf.c:525 ecskyelf_linux.c:692
+#: ed10velf.c:266 eelf32_sparc.c:448 eelf32_sparc_sol2.c:580
+#: eelf32_sparc_vxworks.c:485 eelf32_spu.c:999 eelf32_tic6x_be.c:555
+#: eelf32_tic6x_elf_be.c:555 eelf32_tic6x_elf_le.c:555 eelf32_tic6x_le.c:555
+#: eelf32_tic6x_linux_be.c:555 eelf32_tic6x_linux_le.c:555
+#: eelf32_x86_64.c:5631 eelf32am33lin.c:418 eelf32b4300.c:663 eelf32bfin.c:436
+#: eelf32bfinfd.c:461 eelf32bmip.c:663 eelf32bmipn32.c:677 eelf32briscv.c:516
+#: eelf32briscv_ilp32.c:516 eelf32briscv_ilp32f.c:516 eelf32bsmip.c:677
+#: eelf32btsmip.c:663 eelf32btsmip_fbsd.c:663 eelf32btsmipn32.c:663
+#: eelf32btsmipn32_fbsd.c:663 eelf32cr16.c:416 eelf32crx.c:303
+#: eelf32ebmip.c:663 eelf32ebmipvxworks.c:698 eelf32elmip.c:663
+#: eelf32elmipvxworks.c:698 eelf32epiphany.c:281 eelf32epiphany_4x4.c:268
+#: eelf32frvfd.c:443 eelf32ip2k.c:281 eelf32l4300.c:663 eelf32lm32.c:281
+#: eelf32lm32fd.c:443 eelf32lmip.c:663 eelf32loongarch.c:498 eelf32lppc.c:717
+#: eelf32lppclinux.c:717 eelf32lppcnto.c:717 eelf32lppcsim.c:717
+#: eelf32lr5900.c:522 eelf32lr5900n32.c:521 eelf32lriscv.c:516
+#: eelf32lriscv_ilp32.c:516 eelf32lriscv_ilp32f.c:516 eelf32lsmip.c:663
+#: eelf32ltsmip.c:663 eelf32ltsmip_fbsd.c:663 eelf32ltsmipn32.c:663
+#: eelf32ltsmipn32_fbsd.c:663 eelf32m32c.c:292 eelf32mb_linux.c:448
+#: eelf32mbel_linux.c:448 eelf32mcore.c:287 eelf32mep.c:266 eelf32metag.c:697
+#: eelf32microblaze.c:266 eelf32microblazeel.c:266 eelf32mipswindiss.c:496
+#: eelf32moxie.c:281 eelf32or1k.c:282 eelf32or1k_linux.c:448 eelf32ppc.c:717
+#: eelf32ppc_fbsd.c:717 eelf32ppchaiku.c:717 eelf32ppclinux.c:717
+#: eelf32ppcnto.c:717 eelf32ppcsim.c:717 eelf32ppcvxworks.c:691
+#: eelf32ppcwindiss.c:717 eelf32rl78.c:281 eelf32rx.c:309 eelf32rx_linux.c:294
+#: eelf32tilegx.c:448 eelf32tilegx_be.c:448 eelf32tilepro.c:448
+#: eelf32vax.c:418 eelf32visium.c:266 eelf32xc16x.c:266 eelf32xc16xl.c:266
+#: eelf32xc16xs.c:266 eelf32xstormy16.c:277 eelf32xtensa.c:2369
+#: eelf32z80.c:293 eelf64_aix.c:418 eelf64_ia64.c:475 eelf64_ia64_fbsd.c:475
+#: eelf64_s390.c:518 eelf64_sparc.c:448 eelf64_sparc_fbsd.c:448
+#: eelf64_sparc_sol2.c:580 eelf64alpha.c:541 eelf64alpha_fbsd.c:541
+#: eelf64alpha_nbsd.c:541 eelf64bmip.c:677 eelf64bpf.c:266 eelf64briscv.c:516
+#: eelf64briscv_lp64.c:516 eelf64briscv_lp64f.c:516 eelf64btsmip.c:663
+#: eelf64btsmip_fbsd.c:663 eelf64hppa.c:388 eelf64loongarch.c:498
+#: eelf64lppc.c:1171 eelf64lppc_fbsd.c:1171 eelf64lriscv.c:516
+#: eelf64lriscv_lp64.c:516 eelf64lriscv_lp64f.c:516 eelf64ltsmip.c:663
+#: eelf64ltsmip_fbsd.c:663 eelf64mmix.c:529 eelf64ppc.c:1171
+#: eelf64ppc_fbsd.c:1171 eelf64rdos.c:473 eelf64tilegx.c:448
+#: eelf64tilegx_be.c:448 eelf_i386.c:5250 eelf_i386_be.c:489
+#: eelf_i386_fbsd.c:571 eelf_i386_haiku.c:571 eelf_i386_ldso.c:504
+#: eelf_i386_sol2.c:661 eelf_i386_vxworks.c:556 eelf_iamcu.c:529
+#: eelf_k1om.c:5520 eelf_k1om_fbsd.c:529 eelf_l1om.c:5520 eelf_l1om_fbsd.c:529
+#: eelf_mipsel_haiku.c:663 eelf_s390.c:448 eelf_x86_64.c:5684
+#: eelf_x86_64_cloudabi.c:627 eelf_x86_64_fbsd.c:627 eelf_x86_64_haiku.c:627
+#: eelf_x86_64_sol2.c:759 eh8300elf.c:281 eh8300elf_linux.c:281
+#: eh8300helf.c:281 eh8300helf_linux.c:281 eh8300hnelf.c:281 eh8300self.c:281
+#: eh8300self_linux.c:281 eh8300snelf.c:281 eh8300sxelf.c:281
+#: eh8300sxelf_linux.c:281 eh8300sxnelf.c:281 ehppa64linux.c:418
+#: ehppaelf.c:549 ehppalinux.c:731 ehppanbsd.c:731 ehppaobsd.c:731
+#: ei386lynx.c:433 ei386moss.c:433 ei386nto.c:433 em32relf.c:281
+#: em32relf_linux.c:443 em32rlelf.c:281 em32rlelf_linux.c:443
+#: em68hc11elf.c:551 em68hc11elfb.c:551 em68hc12elf.c:551 em68hc12elfb.c:551
+#: em68kelf.c:605 em68kelfnbsd.c:605 emn10300.c:418 ends32belf.c:402
+#: ends32belf16m.c:402 ends32belf_linux.c:535 ends32elf.c:402
+#: ends32elf16m.c:402 ends32elf_linux.c:535 enios2elf.c:568 enios2linux.c:709
+#: epruelf.c:287 escore3_elf.c:439 escore7_elf.c:439 eshelf.c:418
+#: eshelf_fd.c:448 eshelf_linux.c:448 eshelf_nbsd.c:418 eshelf_nto.c:418
+#: eshelf_uclinux.c:418 eshelf_vxworks.c:455 eshlelf.c:418 eshlelf_fd.c:448
+#: eshlelf_linux.c:448 eshlelf_nbsd.c:418 eshlelf_nto.c:418
+#: eshlelf_vxworks.c:455 ev850.c:313 ev850_rh850.c:313
msgid "%P: warning: -z %s ignored\n"
msgstr "%P: попередженнÑ: проігноровано -z %s\n"
-#: eaarch64cloudabi.c:801 eaarch64cloudabib.c:801 eaarch64elf.c:796
-#: eaarch64elf32.c:796 eaarch64elf32b.c:796 eaarch64elfb.c:796
-#: eaarch64fbsd.c:801 eaarch64fbsdb.c:801 eaarch64linux.c:801
-#: eaarch64linux32.c:801 eaarch64linux32b.c:801 eaarch64linuxb.c:801
+#: eaarch64cloudabi.c:803 eaarch64cloudabib.c:803 eaarch64elf.c:798
+#: eaarch64elf32.c:798 eaarch64elf32b.c:798 eaarch64elfb.c:798
+#: eaarch64fbsd.c:803 eaarch64fbsdb.c:803 eaarch64haiku.c:803
+#: eaarch64linux.c:803 eaarch64linux32.c:803 eaarch64linux32b.c:803
+#: eaarch64linuxb.c:803
msgid "%P: error: unrecognized option for --fix-cortex-a53-843419: %s\n"
msgstr "%P: помилка: невідомий параметр Ð´Ð»Ñ --fix-cortex-a53-843419: %s\n"
-#: eaarch64cloudabi.c:830 eaarch64cloudabib.c:830 eaarch64elf.c:825
-#: eaarch64elf32.c:825 eaarch64elf32b.c:825 eaarch64elfb.c:825
-#: eaarch64fbsd.c:830 eaarch64fbsdb.c:830 eaarch64linux.c:830
-#: eaarch64linux32.c:830 eaarch64linux32b.c:830 eaarch64linuxb.c:830
-#: earmelf.c:1133 earmelf_fbsd.c:1133 earmelf_fuchsia.c:1138
-#: earmelf_linux.c:1138 earmelf_linux_eabi.c:1138
-#: earmelf_linux_fdpiceabi.c:1138 earmelf_nacl.c:1138 earmelf_nbsd.c:1133
-#: earmelf_phoenix.c:1138 earmelf_vxworks.c:1173 earmelfb.c:1133
-#: earmelfb_fbsd.c:1133 earmelfb_fuchsia.c:1138 earmelfb_linux.c:1138
-#: earmelfb_linux_eabi.c:1138 earmelfb_linux_fdpiceabi.c:1138
-#: earmelfb_nacl.c:1138 earmelfb_nbsd.c:1133 earmnto.c:1108
+#: eaarch64cloudabi.c:832 eaarch64cloudabib.c:832 eaarch64elf.c:827
+#: eaarch64elf32.c:827 eaarch64elf32b.c:827 eaarch64elfb.c:827
+#: eaarch64fbsd.c:832 eaarch64fbsdb.c:832 eaarch64haiku.c:832
+#: eaarch64linux.c:832 eaarch64linux32.c:832 eaarch64linux32b.c:832
+#: eaarch64linuxb.c:832 earmelf.c:1135 earmelf_fbsd.c:1135
+#: earmelf_fuchsia.c:1140 earmelf_haiku.c:1140 earmelf_linux.c:1140
+#: earmelf_linux_eabi.c:1140 earmelf_linux_fdpiceabi.c:1140
+#: earmelf_nacl.c:1140 earmelf_nbsd.c:1135 earmelf_phoenix.c:1140
+#: earmelf_vxworks.c:1175 earmelfb.c:1135 earmelfb_fbsd.c:1135
+#: earmelfb_fuchsia.c:1140 earmelfb_linux.c:1140 earmelfb_linux_eabi.c:1140
+#: earmelfb_linux_fdpiceabi.c:1140 earmelfb_nacl.c:1140 earmelfb_nbsd.c:1135
+#: earmnto.c:1110
#, c-format
msgid ""
" --no-enum-size-warning Don't warn about objects with incompatible\n"
@@ -3527,17 +3570,18 @@ msgstr ""
" --no-enum-size-warning не попереджати про об'єкти із неÑуміÑними\n"
" розмірами enum\n"
-#: eaarch64cloudabi.c:832 eaarch64cloudabib.c:832 eaarch64elf.c:827
-#: eaarch64elf32.c:827 eaarch64elf32b.c:827 eaarch64elfb.c:827
-#: eaarch64fbsd.c:832 eaarch64fbsdb.c:832 eaarch64linux.c:832
-#: eaarch64linux32.c:832 eaarch64linux32b.c:832 eaarch64linuxb.c:832
-#: earmelf.c:1135 earmelf_fbsd.c:1135 earmelf_fuchsia.c:1140
-#: earmelf_linux.c:1140 earmelf_linux_eabi.c:1140
-#: earmelf_linux_fdpiceabi.c:1140 earmelf_nacl.c:1140 earmelf_nbsd.c:1135
-#: earmelf_phoenix.c:1140 earmelf_vxworks.c:1175 earmelfb.c:1135
-#: earmelfb_fbsd.c:1135 earmelfb_fuchsia.c:1140 earmelfb_linux.c:1140
-#: earmelfb_linux_eabi.c:1140 earmelfb_linux_fdpiceabi.c:1140
-#: earmelfb_nacl.c:1140 earmelfb_nbsd.c:1135 earmnto.c:1110
+#: eaarch64cloudabi.c:834 eaarch64cloudabib.c:834 eaarch64elf.c:829
+#: eaarch64elf32.c:829 eaarch64elf32b.c:829 eaarch64elfb.c:829
+#: eaarch64fbsd.c:834 eaarch64fbsdb.c:834 eaarch64haiku.c:834
+#: eaarch64linux.c:834 eaarch64linux32.c:834 eaarch64linux32b.c:834
+#: eaarch64linuxb.c:834 earmelf.c:1137 earmelf_fbsd.c:1137
+#: earmelf_fuchsia.c:1142 earmelf_haiku.c:1142 earmelf_linux.c:1142
+#: earmelf_linux_eabi.c:1142 earmelf_linux_fdpiceabi.c:1142
+#: earmelf_nacl.c:1142 earmelf_nbsd.c:1137 earmelf_phoenix.c:1142
+#: earmelf_vxworks.c:1177 earmelfb.c:1137 earmelfb_fbsd.c:1137
+#: earmelfb_fuchsia.c:1142 earmelfb_linux.c:1142 earmelfb_linux_eabi.c:1142
+#: earmelfb_linux_fdpiceabi.c:1142 earmelfb_nacl.c:1142 earmelfb_nbsd.c:1137
+#: earmnto.c:1112
#, c-format
msgid ""
" --no-wchar-size-warning Don't warn about objects with incompatible\n"
@@ -3546,32 +3590,34 @@ msgstr ""
" --no-wchar-size-warning не попереджати про об'єкти із неÑуміÑними\n"
" розмірами wchar_t\n"
-#: eaarch64cloudabi.c:834 eaarch64cloudabib.c:834 eaarch64elf.c:829
-#: eaarch64elf32.c:829 eaarch64elf32b.c:829 eaarch64elfb.c:829
-#: eaarch64fbsd.c:834 eaarch64fbsdb.c:834 eaarch64linux.c:834
-#: eaarch64linux32.c:834 eaarch64linux32b.c:834 eaarch64linuxb.c:834
-#: earmelf.c:1137 earmelf_fbsd.c:1137 earmelf_fuchsia.c:1142
-#: earmelf_linux.c:1142 earmelf_linux_eabi.c:1142
-#: earmelf_linux_fdpiceabi.c:1142 earmelf_nacl.c:1142 earmelf_nbsd.c:1137
-#: earmelf_phoenix.c:1142 earmelf_vxworks.c:1177 earmelfb.c:1137
-#: earmelfb_fbsd.c:1137 earmelfb_fuchsia.c:1142 earmelfb_linux.c:1142
-#: earmelfb_linux_eabi.c:1142 earmelfb_linux_fdpiceabi.c:1142
-#: earmelfb_nacl.c:1142 earmelfb_nbsd.c:1137 earmnto.c:1112
+#: eaarch64cloudabi.c:836 eaarch64cloudabib.c:836 eaarch64elf.c:831
+#: eaarch64elf32.c:831 eaarch64elf32b.c:831 eaarch64elfb.c:831
+#: eaarch64fbsd.c:836 eaarch64fbsdb.c:836 eaarch64haiku.c:836
+#: eaarch64linux.c:836 eaarch64linux32.c:836 eaarch64linux32b.c:836
+#: eaarch64linuxb.c:836 earmelf.c:1139 earmelf_fbsd.c:1139
+#: earmelf_fuchsia.c:1144 earmelf_haiku.c:1144 earmelf_linux.c:1144
+#: earmelf_linux_eabi.c:1144 earmelf_linux_fdpiceabi.c:1144
+#: earmelf_nacl.c:1144 earmelf_nbsd.c:1139 earmelf_phoenix.c:1144
+#: earmelf_vxworks.c:1179 earmelfb.c:1139 earmelfb_fbsd.c:1139
+#: earmelfb_fuchsia.c:1144 earmelfb_linux.c:1144 earmelfb_linux_eabi.c:1144
+#: earmelfb_linux_fdpiceabi.c:1144 earmelfb_nacl.c:1144 earmelfb_nbsd.c:1139
+#: earmnto.c:1114
#, c-format
msgid " --pic-veneer Always generate PIC interworking veneers\n"
msgstr " --pic-veneer завжди Ñтворювати обгортки взаємодії PIC\n"
-#: eaarch64cloudabi.c:835 eaarch64cloudabib.c:835 eaarch64elf.c:830
-#: eaarch64elf32.c:830 eaarch64elf32b.c:830 eaarch64elfb.c:830
-#: eaarch64fbsd.c:835 eaarch64fbsdb.c:835 eaarch64linux.c:835
-#: eaarch64linux32.c:835 eaarch64linux32b.c:835 eaarch64linuxb.c:835
-#: earmelf.c:1144 earmelf_fbsd.c:1144 earmelf_fuchsia.c:1149
-#: earmelf_linux.c:1149 earmelf_linux_eabi.c:1149
-#: earmelf_linux_fdpiceabi.c:1149 earmelf_nacl.c:1149 earmelf_nbsd.c:1144
-#: earmelf_phoenix.c:1149 earmelf_vxworks.c:1184 earmelfb.c:1144
-#: earmelfb_fbsd.c:1144 earmelfb_fuchsia.c:1149 earmelfb_linux.c:1149
-#: earmelfb_linux_eabi.c:1149 earmelfb_linux_fdpiceabi.c:1149
-#: earmelfb_nacl.c:1149 earmelfb_nbsd.c:1144 earmnto.c:1119
+#: eaarch64cloudabi.c:837 eaarch64cloudabib.c:837 eaarch64elf.c:832
+#: eaarch64elf32.c:832 eaarch64elf32b.c:832 eaarch64elfb.c:832
+#: eaarch64fbsd.c:837 eaarch64fbsdb.c:837 eaarch64haiku.c:837
+#: eaarch64linux.c:837 eaarch64linux32.c:837 eaarch64linux32b.c:837
+#: eaarch64linuxb.c:837 earmelf.c:1146 earmelf_fbsd.c:1146
+#: earmelf_fuchsia.c:1151 earmelf_haiku.c:1151 earmelf_linux.c:1151
+#: earmelf_linux_eabi.c:1151 earmelf_linux_fdpiceabi.c:1151
+#: earmelf_nacl.c:1151 earmelf_nbsd.c:1146 earmelf_phoenix.c:1151
+#: earmelf_vxworks.c:1186 earmelfb.c:1146 earmelfb_fbsd.c:1146
+#: earmelfb_fuchsia.c:1151 earmelfb_linux.c:1151 earmelfb_linux_eabi.c:1151
+#: earmelfb_linux_fdpiceabi.c:1151 earmelfb_nacl.c:1151 earmelfb_nbsd.c:1146
+#: earmnto.c:1121
#, c-format
msgid ""
" --stub-group-size=N Maximum size of a group of input sections that\n"
@@ -3592,18 +3638,20 @@ msgstr ""
" Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ +/-1 вказуватимуть на те, що заÑіб компонуваннÑ\n"
" має вибрати відповідні типові параметри.\n"
-#: eaarch64cloudabi.c:844 eaarch64cloudabib.c:844 eaarch64elf.c:839
-#: eaarch64elf32.c:839 eaarch64elf32b.c:839 eaarch64elfb.c:839
-#: eaarch64fbsd.c:844 eaarch64fbsdb.c:844 eaarch64linux.c:844
-#: eaarch64linux32.c:844 eaarch64linux32b.c:844 eaarch64linuxb.c:844
+#: eaarch64cloudabi.c:846 eaarch64cloudabib.c:846 eaarch64elf.c:841
+#: eaarch64elf32.c:841 eaarch64elf32b.c:841 eaarch64elfb.c:841
+#: eaarch64fbsd.c:846 eaarch64fbsdb.c:846 eaarch64haiku.c:846
+#: eaarch64linux.c:846 eaarch64linux32.c:846 eaarch64linux32b.c:846
+#: eaarch64linuxb.c:846
#, c-format
msgid " --fix-cortex-a53-835769 Fix erratum 835769\n"
msgstr " --fix-cortex-a53-835769 виправлÑти помилку 835769\n"
-#: eaarch64cloudabi.c:845 eaarch64cloudabib.c:845 eaarch64elf.c:840
-#: eaarch64elf32.c:840 eaarch64elf32b.c:840 eaarch64elfb.c:840
-#: eaarch64fbsd.c:845 eaarch64fbsdb.c:845 eaarch64linux.c:845
-#: eaarch64linux32.c:845 eaarch64linux32b.c:845 eaarch64linuxb.c:845
+#: eaarch64cloudabi.c:847 eaarch64cloudabib.c:847 eaarch64elf.c:842
+#: eaarch64elf32.c:842 eaarch64elf32b.c:842 eaarch64elfb.c:842
+#: eaarch64fbsd.c:847 eaarch64fbsdb.c:847 eaarch64haiku.c:847
+#: eaarch64linux.c:847 eaarch64linux32.c:847 eaarch64linux32b.c:847
+#: eaarch64linuxb.c:847
#, c-format
msgid ""
" --fix-cortex-a53-843419[=full|adr|adrp] Fix erratum 843419 and optionally specify which workaround to use.\n"
@@ -3629,26 +3677,29 @@ msgstr ""
" інÑтрукцією ADR. ОÑкільки Ð´Ð»Ñ Ñ€ÐµÐ°Ð»Ñ–Ð·Ð°Ñ†Ñ–Ñ— цього ÑпоÑобу завжди викориÑтовуєтьÑÑ\n"
" обгортка, результат буде повільнішим і більшим за розміром.\n"
-#: eaarch64cloudabi.c:856 eaarch64cloudabib.c:856 eaarch64elf.c:851
-#: eaarch64elf32.c:851 eaarch64elf32b.c:851 eaarch64elfb.c:851
-#: eaarch64fbsd.c:856 eaarch64fbsdb.c:856 eaarch64linux.c:856
-#: eaarch64linux32.c:856 eaarch64linux32b.c:856 eaarch64linuxb.c:856
+#: eaarch64cloudabi.c:858 eaarch64cloudabib.c:858 eaarch64elf.c:853
+#: eaarch64elf32.c:853 eaarch64elf32b.c:853 eaarch64elfb.c:853
+#: eaarch64fbsd.c:858 eaarch64fbsdb.c:858 eaarch64haiku.c:858
+#: eaarch64linux.c:858 eaarch64linux32.c:858 eaarch64linux32b.c:858
+#: eaarch64linuxb.c:858
#, c-format
msgid " --no-apply-dynamic-relocs Do not apply link-time values for dynamic relocations\n"
msgstr " --no-apply-dynamic-relocs не заÑтоÑовувати Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð¾ÑиланнÑ-Ñ‡Ð°Ñ Ð´Ð»Ñ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¸Ñ… переÑувань\n"
-#: eaarch64cloudabi.c:857 eaarch64cloudabib.c:857 eaarch64elf.c:852
-#: eaarch64elf32.c:852 eaarch64elf32b.c:852 eaarch64elfb.c:852
-#: eaarch64fbsd.c:857 eaarch64fbsdb.c:857 eaarch64linux.c:857
-#: eaarch64linux32.c:857 eaarch64linux32b.c:857 eaarch64linuxb.c:857
+#: eaarch64cloudabi.c:859 eaarch64cloudabib.c:859 eaarch64elf.c:854
+#: eaarch64elf32.c:854 eaarch64elf32b.c:854 eaarch64elfb.c:854
+#: eaarch64fbsd.c:859 eaarch64fbsdb.c:859 eaarch64haiku.c:859
+#: eaarch64linux.c:859 eaarch64linux32.c:859 eaarch64linux32b.c:859
+#: eaarch64linuxb.c:859
#, c-format
msgid " -z force-bti Turn on Branch Target Identification mechanism and generate PLTs with BTI. Generate warnings for missing BTI on inputs\n"
msgstr " -z force-bti увімкнути механізм Branch Target Identification (ідентифікації цілі розгалуженнÑ) Ñ– Ñтворити PLT із BTI. Показувати Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ пропущених BTI у вхідних даних\n"
-#: eaarch64cloudabi.c:858 eaarch64cloudabib.c:858 eaarch64elf.c:853
-#: eaarch64elf32.c:853 eaarch64elf32b.c:853 eaarch64elfb.c:853
-#: eaarch64fbsd.c:858 eaarch64fbsdb.c:858 eaarch64linux.c:858
-#: eaarch64linux32.c:858 eaarch64linux32b.c:858 eaarch64linuxb.c:858
+#: eaarch64cloudabi.c:860 eaarch64cloudabib.c:860 eaarch64elf.c:855
+#: eaarch64elf32.c:855 eaarch64elf32b.c:855 eaarch64elfb.c:855
+#: eaarch64fbsd.c:860 eaarch64fbsdb.c:860 eaarch64haiku.c:860
+#: eaarch64linux.c:860 eaarch64linux32.c:860 eaarch64linux32b.c:860
+#: eaarch64linuxb.c:860
#, c-format
msgid " -z pac-plt Protect PLTs with Pointer Authentication.\n"
msgstr " -z pac-plt захиÑтити PLT за допомогою Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð²Ð°Ð½Ð½Ñ Ð²ÐºÐ°Ð·Ñ–Ð²Ð½Ð¸ÐºÑ–Ð².\n"
@@ -4186,7 +4237,7 @@ msgstr "%F%P: некоректний шіÑтнадцÑтковий номер Ð
msgid "%F%P: strange hex info for PE parameter '%s'\n"
msgstr "%F%P: дивна шіÑтнадцÑткова Ñ–Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ Ð´Ð»Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° PE «%s»\n"
-#: earm_wince_pe.c:663 earmpe.c:663 eelf32mcore.c:291 ei386beos.c:266
+#: earm_wince_pe.c:663 earmpe.c:663 eelf32mcore.c:293 ei386beos.c:266
#: ei386pe.c:663 ei386pe_posix.c:663 ei386pep.c:642 emcorepe.c:663 eshpe.c:663
msgid "%F%P: cannot open base file %s\n"
msgstr "%F%P: не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл оÑнови %s\n"
@@ -4248,205 +4299,190 @@ msgid "%P: errors encountered processing file %s for interworking\n"
msgstr "%P: під Ñ‡Ð°Ñ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ файла Ð´Ð»Ñ ÑуміÑної роботи ÑталиÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸, %s\n"
#: earm_wince_pe.c:1909 earmelf.c:520 earmelf_fbsd.c:520 earmelf_fuchsia.c:521
-#: earmelf_linux.c:521 earmelf_linux_eabi.c:521 earmelf_linux_fdpiceabi.c:521
-#: earmelf_nacl.c:521 earmelf_nbsd.c:520 earmelf_phoenix.c:521
-#: earmelf_vxworks.c:520 earmelfb.c:520 earmelfb_fbsd.c:520
-#: earmelfb_fuchsia.c:521 earmelfb_linux.c:521 earmelfb_linux_eabi.c:521
-#: earmelfb_linux_fdpiceabi.c:521 earmelfb_nacl.c:521 earmelfb_nbsd.c:520
-#: earmnto.c:520 earmpe.c:1909 ei386pe.c:1909 ei386pe_posix.c:1909
-#: emcorepe.c:1909 eshpe.c:1909
+#: earmelf_haiku.c:521 earmelf_linux.c:521 earmelf_linux_eabi.c:521
+#: earmelf_linux_fdpiceabi.c:521 earmelf_nacl.c:521 earmelf_nbsd.c:520
+#: earmelf_phoenix.c:521 earmelf_vxworks.c:520 earmelfb.c:520
+#: earmelfb_fbsd.c:520 earmelfb_fuchsia.c:521 earmelfb_linux.c:521
+#: earmelfb_linux_eabi.c:521 earmelfb_linux_fdpiceabi.c:521
+#: earmelfb_nacl.c:521 earmelfb_nbsd.c:520 earmnto.c:520 earmpe.c:1909
+#: ei386pe.c:1909 ei386pe_posix.c:1909 emcorepe.c:1909 eshpe.c:1909
msgid "%P: warning: '--thumb-entry %s' is overriding '-e %s'\n"
msgstr "%P: попередженнÑ: «--thumb-entry %s» має вищий пріоритет за «-e %s»\n"
#: earm_wince_pe.c:1914 earmelf.c:525 earmelf_fbsd.c:525 earmelf_fuchsia.c:526
-#: earmelf_linux.c:526 earmelf_linux_eabi.c:526 earmelf_linux_fdpiceabi.c:526
-#: earmelf_nacl.c:526 earmelf_nbsd.c:525 earmelf_phoenix.c:526
-#: earmelf_vxworks.c:525 earmelfb.c:525 earmelfb_fbsd.c:525
-#: earmelfb_fuchsia.c:526 earmelfb_linux.c:526 earmelfb_linux_eabi.c:526
-#: earmelfb_linux_fdpiceabi.c:526 earmelfb_nacl.c:526 earmelfb_nbsd.c:525
-#: earmnto.c:525 earmpe.c:1914 ei386pe.c:1914 ei386pe_posix.c:1914
-#: emcorepe.c:1914 eshpe.c:1914
+#: earmelf_haiku.c:526 earmelf_linux.c:526 earmelf_linux_eabi.c:526
+#: earmelf_linux_fdpiceabi.c:526 earmelf_nacl.c:526 earmelf_nbsd.c:525
+#: earmelf_phoenix.c:526 earmelf_vxworks.c:525 earmelfb.c:525
+#: earmelfb_fbsd.c:525 earmelfb_fuchsia.c:526 earmelfb_linux.c:526
+#: earmelfb_linux_eabi.c:526 earmelfb_linux_fdpiceabi.c:526
+#: earmelfb_nacl.c:526 earmelfb_nbsd.c:525 earmnto.c:525 earmpe.c:1914
+#: ei386pe.c:1914 ei386pe_posix.c:1914 emcorepe.c:1914 eshpe.c:1914
msgid "%P: warning: cannot find thumb start symbol %s\n"
msgstr "%P: попередженнÑ: не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ початковий Ñимвол мініатюри %s\n"
-#: earmelf.c:138 earmelf_fbsd.c:138 earmelf_fuchsia.c:139 earmelf_linux.c:139
-#: earmelf_linux_eabi.c:139 earmelf_linux_fdpiceabi.c:139 earmelf_nacl.c:139
-#: earmelf_nbsd.c:138 earmelf_phoenix.c:139 earmelf_vxworks.c:138
-#: earmelfb.c:138 earmelfb_fbsd.c:138 earmelfb_fuchsia.c:139
-#: earmelfb_linux.c:139 earmelfb_linux_eabi.c:139
+#: earmelf.c:138 earmelf_fbsd.c:138 earmelf_fuchsia.c:139 earmelf_haiku.c:139
+#: earmelf_linux.c:139 earmelf_linux_eabi.c:139 earmelf_linux_fdpiceabi.c:139
+#: earmelf_nacl.c:139 earmelf_nbsd.c:138 earmelf_phoenix.c:139
+#: earmelf_vxworks.c:138 earmelfb.c:138 earmelfb_fbsd.c:138
+#: earmelfb_fuchsia.c:139 earmelfb_linux.c:139 earmelfb_linux_eabi.c:139
#: earmelfb_linux_fdpiceabi.c:139 earmelfb_nacl.c:139 earmelfb_nbsd.c:138
#: earmnto.c:138 ei386beos.c:615
#, c-format
msgid "%P: errors encountered processing file %s\n"
msgstr "%P: під Ñ‡Ð°Ñ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ файла ÑталиÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸, %s\n"
-#: earmelf.c:551 earmelf_fbsd.c:551 earmelf_fuchsia.c:552 earmelf_linux.c:552
-#: earmelf_linux_eabi.c:552 earmelf_linux_fdpiceabi.c:552 earmelf_nacl.c:552
-#: earmelf_nbsd.c:551 earmelf_phoenix.c:552 earmelf_vxworks.c:551
-#: earmelfb.c:551 earmelfb_fbsd.c:551 earmelfb_fuchsia.c:552
-#: earmelfb_linux.c:552 earmelfb_linux_eabi.c:552
+#: earmelf.c:551 earmelf_fbsd.c:551 earmelf_fuchsia.c:552 earmelf_haiku.c:552
+#: earmelf_linux.c:552 earmelf_linux_eabi.c:552 earmelf_linux_fdpiceabi.c:552
+#: earmelf_nacl.c:552 earmelf_nbsd.c:551 earmelf_phoenix.c:552
+#: earmelf_vxworks.c:551 earmelfb.c:551 earmelfb_fbsd.c:551
+#: earmelfb_fuchsia.c:552 earmelfb_linux.c:552 earmelfb_linux_eabi.c:552
#: earmelfb_linux_fdpiceabi.c:552 earmelfb_nacl.c:552 earmelfb_nbsd.c:551
#: earmnto.c:551
msgid "%F%P: %s: can't open: %E\n"
msgstr "%F%P: %s: не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸: %E\n"
-#: earmelf.c:554 earmelf_fbsd.c:554 earmelf_fuchsia.c:555 earmelf_linux.c:555
-#: earmelf_linux_eabi.c:555 earmelf_linux_fdpiceabi.c:555 earmelf_nacl.c:555
-#: earmelf_nbsd.c:554 earmelf_phoenix.c:555 earmelf_vxworks.c:554
-#: earmelfb.c:554 earmelfb_fbsd.c:554 earmelfb_fuchsia.c:555
-#: earmelfb_linux.c:555 earmelfb_linux_eabi.c:555
+#: earmelf.c:554 earmelf_fbsd.c:554 earmelf_fuchsia.c:555 earmelf_haiku.c:555
+#: earmelf_linux.c:555 earmelf_linux_eabi.c:555 earmelf_linux_fdpiceabi.c:555
+#: earmelf_nacl.c:555 earmelf_nbsd.c:554 earmelf_phoenix.c:555
+#: earmelf_vxworks.c:554 earmelfb.c:554 earmelfb_fbsd.c:554
+#: earmelfb_fuchsia.c:555 earmelfb_linux.c:555 earmelfb_linux_eabi.c:555
#: earmelfb_linux_fdpiceabi.c:555 earmelfb_nacl.c:555 earmelfb_nbsd.c:554
#: earmnto.c:554
msgid "%F%P: %s: not a relocatable file: %E\n"
msgstr "%F%P: %s: не Ñ” придатним до переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð¼: %E\n"
-#: earmelf.c:1043 earmelf_fbsd.c:1043 earmelf_fuchsia.c:1048
-#: earmelf_linux.c:1048 earmelf_linux_eabi.c:1048
-#: earmelf_linux_fdpiceabi.c:1048 earmelf_nacl.c:1048 earmelf_nbsd.c:1043
-#: earmelf_phoenix.c:1048 earmelf_vxworks.c:1079 earmelfb.c:1043
-#: earmelfb_fbsd.c:1043 earmelfb_fuchsia.c:1048 earmelfb_linux.c:1048
-#: earmelfb_linux_eabi.c:1048 earmelfb_linux_fdpiceabi.c:1048
-#: earmelfb_nacl.c:1048 earmelfb_nbsd.c:1043 earmnto.c:1018
+#: earmelf.c:1045 earmelf_fbsd.c:1045 earmelf_fuchsia.c:1050
+#: earmelf_haiku.c:1050 earmelf_linux.c:1050 earmelf_linux_eabi.c:1050
+#: earmelf_linux_fdpiceabi.c:1050 earmelf_nacl.c:1050 earmelf_nbsd.c:1045
+#: earmelf_phoenix.c:1050 earmelf_vxworks.c:1081 earmelfb.c:1045
+#: earmelfb_fbsd.c:1045 earmelfb_fuchsia.c:1050 earmelfb_linux.c:1050
+#: earmelfb_linux_eabi.c:1050 earmelfb_linux_fdpiceabi.c:1050
+#: earmelfb_nacl.c:1050 earmelfb_nbsd.c:1045 earmnto.c:1020
msgid "%P: unrecognized VFP11 fix type '%s'\n"
msgstr "%P: нерозпізнаний тип Ð²Ð¸Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð½Ñ VFP11, «%s»\n"
-#: earmelf.c:1056 earmelf_fbsd.c:1056 earmelf_fuchsia.c:1061
-#: earmelf_linux.c:1061 earmelf_linux_eabi.c:1061
-#: earmelf_linux_fdpiceabi.c:1061 earmelf_nacl.c:1061 earmelf_nbsd.c:1056
-#: earmelf_phoenix.c:1061 earmelf_vxworks.c:1092 earmelfb.c:1056
-#: earmelfb_fbsd.c:1056 earmelfb_fuchsia.c:1061 earmelfb_linux.c:1061
-#: earmelfb_linux_eabi.c:1061 earmelfb_linux_fdpiceabi.c:1061
-#: earmelfb_nacl.c:1061 earmelfb_nbsd.c:1056 earmnto.c:1031
+#: earmelf.c:1058 earmelf_fbsd.c:1058 earmelf_fuchsia.c:1063
+#: earmelf_haiku.c:1063 earmelf_linux.c:1063 earmelf_linux_eabi.c:1063
+#: earmelf_linux_fdpiceabi.c:1063 earmelf_nacl.c:1063 earmelf_nbsd.c:1058
+#: earmelf_phoenix.c:1063 earmelf_vxworks.c:1094 earmelfb.c:1058
+#: earmelfb_fbsd.c:1058 earmelfb_fuchsia.c:1063 earmelfb_linux.c:1063
+#: earmelfb_linux_eabi.c:1063 earmelfb_linux_fdpiceabi.c:1063
+#: earmelfb_nacl.c:1063 earmelfb_nbsd.c:1058 earmnto.c:1033
msgid "%P: unrecognized STM32L4XX fix type '%s'\n"
msgstr "%P: нерозпізнаний тип Ð²Ð¸Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð½Ñ STM32L4XX, «%s»\n"
-#: earmelf.c:1123 earmelf_fbsd.c:1123 earmelf_fuchsia.c:1128
-#: earmelf_linux.c:1128 earmelf_linux_eabi.c:1128
-#: earmelf_linux_fdpiceabi.c:1128 earmelf_nacl.c:1128 earmelf_nbsd.c:1123
-#: earmelf_phoenix.c:1128 earmelf_vxworks.c:1163 earmelfb.c:1123
-#: earmelfb_fbsd.c:1123 earmelfb_fuchsia.c:1128 earmelfb_linux.c:1128
-#: earmelfb_linux_eabi.c:1128 earmelfb_linux_fdpiceabi.c:1128
-#: earmelfb_nacl.c:1128 earmelfb_nbsd.c:1123 earmnto.c:1098
-#, c-format
-msgid " --thumb-entry=<sym> Set the entry point to be Thumb symbol <sym>\n"
-msgstr " --thumb-entry=<Ñимвол> вÑтановити точку Ð²Ñ…Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ Ñƒ позицію Ñимволу Thumb <Ñимвол>\n"
-
-#: earmelf.c:1124 earmelf_fbsd.c:1124 earmelf_fuchsia.c:1129
-#: earmelf_linux.c:1129 earmelf_linux_eabi.c:1129
-#: earmelf_linux_fdpiceabi.c:1129 earmelf_nacl.c:1129 earmelf_nbsd.c:1124
-#: earmelf_phoenix.c:1129 earmelf_vxworks.c:1164 earmelfb.c:1124
-#: earmelfb_fbsd.c:1124 earmelfb_fuchsia.c:1129 earmelfb_linux.c:1129
-#: earmelfb_linux_eabi.c:1129 earmelfb_linux_fdpiceabi.c:1129
-#: earmelfb_nacl.c:1129 earmelfb_nbsd.c:1124 earmnto.c:1099
-#, c-format
-msgid " --be8 Output BE8 format image\n"
-msgstr " --be8 вивеÑти образ у форматі BE8\n"
-
#: earmelf.c:1125 earmelf_fbsd.c:1125 earmelf_fuchsia.c:1130
-#: earmelf_linux.c:1130 earmelf_linux_eabi.c:1130
+#: earmelf_haiku.c:1130 earmelf_linux.c:1130 earmelf_linux_eabi.c:1130
#: earmelf_linux_fdpiceabi.c:1130 earmelf_nacl.c:1130 earmelf_nbsd.c:1125
#: earmelf_phoenix.c:1130 earmelf_vxworks.c:1165 earmelfb.c:1125
#: earmelfb_fbsd.c:1125 earmelfb_fuchsia.c:1130 earmelfb_linux.c:1130
#: earmelfb_linux_eabi.c:1130 earmelfb_linux_fdpiceabi.c:1130
#: earmelfb_nacl.c:1130 earmelfb_nbsd.c:1125 earmnto.c:1100
#, c-format
-msgid " --target1-rel Interpret R_ARM_TARGET1 as R_ARM_REL32\n"
-msgstr " --target1-rel оброблÑти R_ARM_TARGET1 Ñк R_ARM_REL32\n"
+msgid " --thumb-entry=<sym> Set the entry point to be Thumb symbol <sym>\n"
+msgstr " --thumb-entry=<Ñимвол> вÑтановити точку Ð²Ñ…Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ Ñƒ позицію Ñимволу Thumb <Ñимвол>\n"
#: earmelf.c:1126 earmelf_fbsd.c:1126 earmelf_fuchsia.c:1131
-#: earmelf_linux.c:1131 earmelf_linux_eabi.c:1131
+#: earmelf_haiku.c:1131 earmelf_linux.c:1131 earmelf_linux_eabi.c:1131
#: earmelf_linux_fdpiceabi.c:1131 earmelf_nacl.c:1131 earmelf_nbsd.c:1126
#: earmelf_phoenix.c:1131 earmelf_vxworks.c:1166 earmelfb.c:1126
#: earmelfb_fbsd.c:1126 earmelfb_fuchsia.c:1131 earmelfb_linux.c:1131
#: earmelfb_linux_eabi.c:1131 earmelfb_linux_fdpiceabi.c:1131
#: earmelfb_nacl.c:1131 earmelfb_nbsd.c:1126 earmnto.c:1101
#, c-format
-msgid " --target1-abs Interpret R_ARM_TARGET1 as R_ARM_ABS32\n"
-msgstr " --target1-abs оброблÑти R_ARM_TARGET1 Ñк R_ARM_ABS32\n"
+msgid " --be8 Output BE8 format image\n"
+msgstr " --be8 вивеÑти образ у форматі BE8\n"
#: earmelf.c:1127 earmelf_fbsd.c:1127 earmelf_fuchsia.c:1132
-#: earmelf_linux.c:1132 earmelf_linux_eabi.c:1132
+#: earmelf_haiku.c:1132 earmelf_linux.c:1132 earmelf_linux_eabi.c:1132
#: earmelf_linux_fdpiceabi.c:1132 earmelf_nacl.c:1132 earmelf_nbsd.c:1127
#: earmelf_phoenix.c:1132 earmelf_vxworks.c:1167 earmelfb.c:1127
#: earmelfb_fbsd.c:1127 earmelfb_fuchsia.c:1132 earmelfb_linux.c:1132
#: earmelfb_linux_eabi.c:1132 earmelfb_linux_fdpiceabi.c:1132
#: earmelfb_nacl.c:1132 earmelfb_nbsd.c:1127 earmnto.c:1102
#, c-format
-msgid " --target2=<type> Specify definition of R_ARM_TARGET2\n"
-msgstr " --target2=<тип> вказати Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ R_ARM_TARGET2\n"
+msgid " --target1-rel Interpret R_ARM_TARGET1 as R_ARM_REL32\n"
+msgstr " --target1-rel оброблÑти R_ARM_TARGET1 Ñк R_ARM_REL32\n"
#: earmelf.c:1128 earmelf_fbsd.c:1128 earmelf_fuchsia.c:1133
-#: earmelf_linux.c:1133 earmelf_linux_eabi.c:1133
+#: earmelf_haiku.c:1133 earmelf_linux.c:1133 earmelf_linux_eabi.c:1133
#: earmelf_linux_fdpiceabi.c:1133 earmelf_nacl.c:1133 earmelf_nbsd.c:1128
#: earmelf_phoenix.c:1133 earmelf_vxworks.c:1168 earmelfb.c:1128
#: earmelfb_fbsd.c:1128 earmelfb_fuchsia.c:1133 earmelfb_linux.c:1133
#: earmelfb_linux_eabi.c:1133 earmelfb_linux_fdpiceabi.c:1133
#: earmelfb_nacl.c:1133 earmelfb_nbsd.c:1128 earmnto.c:1103
#, c-format
-msgid " --fix-v4bx Rewrite BX rn as MOV pc, rn for ARMv4\n"
-msgstr " --fix-v4bx перезапиÑати BX rn Ñк MOV pc, rn Ð´Ð»Ñ ARMv4\n"
+msgid " --target1-abs Interpret R_ARM_TARGET1 as R_ARM_ABS32\n"
+msgstr " --target1-abs оброблÑти R_ARM_TARGET1 Ñк R_ARM_ABS32\n"
#: earmelf.c:1129 earmelf_fbsd.c:1129 earmelf_fuchsia.c:1134
-#: earmelf_linux.c:1134 earmelf_linux_eabi.c:1134
+#: earmelf_haiku.c:1134 earmelf_linux.c:1134 earmelf_linux_eabi.c:1134
#: earmelf_linux_fdpiceabi.c:1134 earmelf_nacl.c:1134 earmelf_nbsd.c:1129
#: earmelf_phoenix.c:1134 earmelf_vxworks.c:1169 earmelfb.c:1129
#: earmelfb_fbsd.c:1129 earmelfb_fuchsia.c:1134 earmelfb_linux.c:1134
#: earmelfb_linux_eabi.c:1134 earmelfb_linux_fdpiceabi.c:1134
#: earmelfb_nacl.c:1134 earmelfb_nbsd.c:1129 earmnto.c:1104
#, c-format
-msgid " --fix-v4bx-interworking Rewrite BX rn branch to ARMv4 interworking veneer\n"
-msgstr " --fix-v4bx-interworking перезапиÑувати гілку rn BX на обгортку взаємодії ARMv4\n"
+msgid " --target2=<type> Specify definition of R_ARM_TARGET2\n"
+msgstr " --target2=<тип> вказати Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ R_ARM_TARGET2\n"
#: earmelf.c:1130 earmelf_fbsd.c:1130 earmelf_fuchsia.c:1135
-#: earmelf_linux.c:1135 earmelf_linux_eabi.c:1135
+#: earmelf_haiku.c:1135 earmelf_linux.c:1135 earmelf_linux_eabi.c:1135
#: earmelf_linux_fdpiceabi.c:1135 earmelf_nacl.c:1135 earmelf_nbsd.c:1130
#: earmelf_phoenix.c:1135 earmelf_vxworks.c:1170 earmelfb.c:1130
#: earmelfb_fbsd.c:1130 earmelfb_fuchsia.c:1135 earmelfb_linux.c:1135
#: earmelfb_linux_eabi.c:1135 earmelfb_linux_fdpiceabi.c:1135
#: earmelfb_nacl.c:1135 earmelfb_nbsd.c:1130 earmnto.c:1105
#, c-format
-msgid " --use-blx Enable use of BLX instructions\n"
-msgstr " --use-blx увімкнути викориÑÑ‚Ð°Ð½Ð½Ñ Ñ–Ð½Ñтрукцій BLX\n"
+msgid " --fix-v4bx Rewrite BX rn as MOV pc, rn for ARMv4\n"
+msgstr " --fix-v4bx перезапиÑати BX rn Ñк MOV pc, rn Ð´Ð»Ñ ARMv4\n"
#: earmelf.c:1131 earmelf_fbsd.c:1131 earmelf_fuchsia.c:1136
-#: earmelf_linux.c:1136 earmelf_linux_eabi.c:1136
+#: earmelf_haiku.c:1136 earmelf_linux.c:1136 earmelf_linux_eabi.c:1136
#: earmelf_linux_fdpiceabi.c:1136 earmelf_nacl.c:1136 earmelf_nbsd.c:1131
#: earmelf_phoenix.c:1136 earmelf_vxworks.c:1171 earmelfb.c:1131
#: earmelfb_fbsd.c:1131 earmelfb_fuchsia.c:1136 earmelfb_linux.c:1136
#: earmelfb_linux_eabi.c:1136 earmelfb_linux_fdpiceabi.c:1136
#: earmelfb_nacl.c:1136 earmelfb_nbsd.c:1131 earmnto.c:1106
#, c-format
-msgid " --vfp11-denorm-fix Specify how to fix VFP11 denorm erratum\n"
-msgstr " --vfp11-denorm-fix вказати, Ñк Ñлід виправлÑти помилку Ð´ÐµÐ½Ð¾Ñ€Ð¼ÑƒÐ²Ð°Ð½Ð½Ñ VFP11\n"
+msgid " --fix-v4bx-interworking Rewrite BX rn branch to ARMv4 interworking veneer\n"
+msgstr " --fix-v4bx-interworking перезапиÑувати гілку rn BX на обгортку взаємодії ARMv4\n"
#: earmelf.c:1132 earmelf_fbsd.c:1132 earmelf_fuchsia.c:1137
-#: earmelf_linux.c:1137 earmelf_linux_eabi.c:1137
+#: earmelf_haiku.c:1137 earmelf_linux.c:1137 earmelf_linux_eabi.c:1137
#: earmelf_linux_fdpiceabi.c:1137 earmelf_nacl.c:1137 earmelf_nbsd.c:1132
#: earmelf_phoenix.c:1137 earmelf_vxworks.c:1172 earmelfb.c:1132
#: earmelfb_fbsd.c:1132 earmelfb_fuchsia.c:1137 earmelfb_linux.c:1137
#: earmelfb_linux_eabi.c:1137 earmelfb_linux_fdpiceabi.c:1137
#: earmelfb_nacl.c:1137 earmelfb_nbsd.c:1132 earmnto.c:1107
#, c-format
-msgid " --fix-stm32l4xx-629360 Specify how to fix STM32L4XX 629360 erratum\n"
-msgstr " --fix-stm32l4xx-629360 вказати, Ñк виправлÑти помилку STM32L4XX 629360\n"
+msgid " --use-blx Enable use of BLX instructions\n"
+msgstr " --use-blx увімкнути викориÑÑ‚Ð°Ð½Ð½Ñ Ñ–Ð½Ñтрукцій BLX\n"
+
+#: earmelf.c:1133 earmelf_fbsd.c:1133 earmelf_fuchsia.c:1138
+#: earmelf_haiku.c:1138 earmelf_linux.c:1138 earmelf_linux_eabi.c:1138
+#: earmelf_linux_fdpiceabi.c:1138 earmelf_nacl.c:1138 earmelf_nbsd.c:1133
+#: earmelf_phoenix.c:1138 earmelf_vxworks.c:1173 earmelfb.c:1133
+#: earmelfb_fbsd.c:1133 earmelfb_fuchsia.c:1138 earmelfb_linux.c:1138
+#: earmelfb_linux_eabi.c:1138 earmelfb_linux_fdpiceabi.c:1138
+#: earmelfb_nacl.c:1138 earmelfb_nbsd.c:1133 earmnto.c:1108
+#, c-format
+msgid " --vfp11-denorm-fix Specify how to fix VFP11 denorm erratum\n"
+msgstr " --vfp11-denorm-fix вказати, Ñк Ñлід виправлÑти помилку Ð´ÐµÐ½Ð¾Ñ€Ð¼ÑƒÐ²Ð°Ð½Ð½Ñ VFP11\n"
-#: earmelf.c:1138 earmelf_fbsd.c:1138 earmelf_fuchsia.c:1143
-#: earmelf_linux.c:1143 earmelf_linux_eabi.c:1143
-#: earmelf_linux_fdpiceabi.c:1143 earmelf_nacl.c:1143 earmelf_nbsd.c:1138
-#: earmelf_phoenix.c:1143 earmelf_vxworks.c:1178 earmelfb.c:1138
-#: earmelfb_fbsd.c:1138 earmelfb_fuchsia.c:1143 earmelfb_linux.c:1143
-#: earmelfb_linux_eabi.c:1143 earmelfb_linux_fdpiceabi.c:1143
-#: earmelfb_nacl.c:1143 earmelfb_nbsd.c:1138 earmnto.c:1113
+#: earmelf.c:1134 earmelf_fbsd.c:1134 earmelf_fuchsia.c:1139
+#: earmelf_haiku.c:1139 earmelf_linux.c:1139 earmelf_linux_eabi.c:1139
+#: earmelf_linux_fdpiceabi.c:1139 earmelf_nacl.c:1139 earmelf_nbsd.c:1134
+#: earmelf_phoenix.c:1139 earmelf_vxworks.c:1174 earmelfb.c:1134
+#: earmelfb_fbsd.c:1134 earmelfb_fuchsia.c:1139 earmelfb_linux.c:1139
+#: earmelfb_linux_eabi.c:1139 earmelfb_linux_fdpiceabi.c:1139
+#: earmelfb_nacl.c:1139 earmelfb_nbsd.c:1134 earmnto.c:1109
#, c-format
-msgid ""
-" --long-plt Generate long .plt entries\n"
-" to handle large .plt/.got displacements\n"
-msgstr ""
-" --long-plt Ñтворювати довгі запиÑи .plt\n"
-" Ð´Ð»Ñ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ великих переміщень .plt/.got\n"
+msgid " --fix-stm32l4xx-629360 Specify how to fix STM32L4XX 629360 erratum\n"
+msgstr " --fix-stm32l4xx-629360 вказати, Ñк виправлÑти помилку STM32L4XX 629360\n"
#: earmelf.c:1140 earmelf_fbsd.c:1140 earmelf_fuchsia.c:1145
-#: earmelf_linux.c:1145 earmelf_linux_eabi.c:1145
+#: earmelf_haiku.c:1145 earmelf_linux.c:1145 earmelf_linux_eabi.c:1145
#: earmelf_linux_fdpiceabi.c:1145 earmelf_nacl.c:1145 earmelf_nbsd.c:1140
#: earmelf_phoenix.c:1145 earmelf_vxworks.c:1180 earmelfb.c:1140
#: earmelfb_fbsd.c:1140 earmelfb_fuchsia.c:1145 earmelfb_linux.c:1145
@@ -4454,14 +4490,14 @@ msgstr ""
#: earmelfb_nacl.c:1145 earmelfb_nbsd.c:1140 earmnto.c:1115
#, c-format
msgid ""
-" --cmse-implib Make import library to be a secure gateway import\n"
-" library as per ARMv8-M Security Extensions\n"
+" --long-plt Generate long .plt entries\n"
+" to handle large .plt/.got displacements\n"
msgstr ""
-" --cmse-implib зробити бібліотеку Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð±ÐµÐ·Ð¿ÐµÑ‡Ð½Ð¾ÑŽ шлюзовою бібліотекою\n"
-" Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð° розширеннÑми захиÑту ARMv8-M\n"
+" --long-plt Ñтворювати довгі запиÑи .plt\n"
+" Ð´Ð»Ñ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ великих переміщень .plt/.got\n"
#: earmelf.c:1142 earmelf_fbsd.c:1142 earmelf_fuchsia.c:1147
-#: earmelf_linux.c:1147 earmelf_linux_eabi.c:1147
+#: earmelf_haiku.c:1147 earmelf_linux.c:1147 earmelf_linux_eabi.c:1147
#: earmelf_linux_fdpiceabi.c:1147 earmelf_nacl.c:1147 earmelf_nbsd.c:1142
#: earmelf_phoenix.c:1147 earmelf_vxworks.c:1182 earmelfb.c:1142
#: earmelfb_fbsd.c:1142 earmelfb_fuchsia.c:1147 earmelfb_linux.c:1147
@@ -4469,60 +4505,75 @@ msgstr ""
#: earmelfb_nacl.c:1147 earmelfb_nbsd.c:1142 earmnto.c:1117
#, c-format
msgid ""
+" --cmse-implib Make import library to be a secure gateway import\n"
+" library as per ARMv8-M Security Extensions\n"
+msgstr ""
+" --cmse-implib зробити бібліотеку Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð±ÐµÐ·Ð¿ÐµÑ‡Ð½Ð¾ÑŽ шлюзовою бібліотекою\n"
+" Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð° розширеннÑми захиÑту ARMv8-M\n"
+
+#: earmelf.c:1144 earmelf_fbsd.c:1144 earmelf_fuchsia.c:1149
+#: earmelf_haiku.c:1149 earmelf_linux.c:1149 earmelf_linux_eabi.c:1149
+#: earmelf_linux_fdpiceabi.c:1149 earmelf_nacl.c:1149 earmelf_nbsd.c:1144
+#: earmelf_phoenix.c:1149 earmelf_vxworks.c:1184 earmelfb.c:1144
+#: earmelfb_fbsd.c:1144 earmelfb_fuchsia.c:1149 earmelfb_linux.c:1149
+#: earmelfb_linux_eabi.c:1149 earmelfb_linux_fdpiceabi.c:1149
+#: earmelfb_nacl.c:1149 earmelfb_nbsd.c:1144 earmnto.c:1119
+#, c-format
+msgid ""
" --in-implib Import library whose symbols address must\n"
" remain stable\n"
msgstr ""
" --in-implib імпортувати бібліотеку, Ñ‡Ð¸Ñ Ð°Ð´Ñ€ÐµÑа Ñимволів має\n"
" лишатиÑÑ Ñтабільною\n"
-#: earmelf.c:1153 earmelf_fbsd.c:1153 earmelf_fuchsia.c:1158
-#: earmelf_linux.c:1158 earmelf_linux_eabi.c:1158
-#: earmelf_linux_fdpiceabi.c:1158 earmelf_nacl.c:1158 earmelf_nbsd.c:1153
-#: earmelf_phoenix.c:1158 earmelf_vxworks.c:1193 earmelfb.c:1153
-#: earmelfb_fbsd.c:1153 earmelfb_fuchsia.c:1158 earmelfb_linux.c:1158
-#: earmelfb_linux_eabi.c:1158 earmelfb_linux_fdpiceabi.c:1158
-#: earmelfb_nacl.c:1158 earmelfb_nbsd.c:1153 earmnto.c:1128
+#: earmelf.c:1155 earmelf_fbsd.c:1155 earmelf_fuchsia.c:1160
+#: earmelf_haiku.c:1160 earmelf_linux.c:1160 earmelf_linux_eabi.c:1160
+#: earmelf_linux_fdpiceabi.c:1160 earmelf_nacl.c:1160 earmelf_nbsd.c:1155
+#: earmelf_phoenix.c:1160 earmelf_vxworks.c:1195 earmelfb.c:1155
+#: earmelfb_fbsd.c:1155 earmelfb_fuchsia.c:1160 earmelfb_linux.c:1160
+#: earmelfb_linux_eabi.c:1160 earmelfb_linux_fdpiceabi.c:1160
+#: earmelfb_nacl.c:1160 earmelfb_nbsd.c:1155 earmnto.c:1130
#, c-format
msgid " --[no-]fix-cortex-a8 Disable/enable Cortex-A8 Thumb-2 branch erratum fix\n"
msgstr " --[no-]fix-cortex-a8 вимкнути або увімкнути Ð²Ð¸Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸ Ñ€Ð¾Ð·Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ Cortex-A8 Thumb-2\n"
-#: earmelf.c:1154 earmelf_fbsd.c:1154 earmelf_fuchsia.c:1159
-#: earmelf_linux.c:1159 earmelf_linux_eabi.c:1159
-#: earmelf_linux_fdpiceabi.c:1159 earmelf_nacl.c:1159 earmelf_nbsd.c:1154
-#: earmelf_phoenix.c:1159 earmelf_vxworks.c:1194 earmelfb.c:1154
-#: earmelfb_fbsd.c:1154 earmelfb_fuchsia.c:1159 earmelfb_linux.c:1159
-#: earmelfb_linux_eabi.c:1159 earmelfb_linux_fdpiceabi.c:1159
-#: earmelfb_nacl.c:1159 earmelfb_nbsd.c:1154 earmnto.c:1129
+#: earmelf.c:1156 earmelf_fbsd.c:1156 earmelf_fuchsia.c:1161
+#: earmelf_haiku.c:1161 earmelf_linux.c:1161 earmelf_linux_eabi.c:1161
+#: earmelf_linux_fdpiceabi.c:1161 earmelf_nacl.c:1161 earmelf_nbsd.c:1156
+#: earmelf_phoenix.c:1161 earmelf_vxworks.c:1196 earmelfb.c:1156
+#: earmelfb_fbsd.c:1156 earmelfb_fuchsia.c:1161 earmelfb_linux.c:1161
+#: earmelfb_linux_eabi.c:1161 earmelfb_linux_fdpiceabi.c:1161
+#: earmelfb_nacl.c:1161 earmelfb_nbsd.c:1156 earmnto.c:1131
#, c-format
msgid " --no-merge-exidx-entries Disable merging exidx entries\n"
msgstr " --no-merge-exidx-entries вимкнути об'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñів exidx\n"
-#: earmelf.c:1155 earmelf_fbsd.c:1155 earmelf_fuchsia.c:1160
-#: earmelf_linux.c:1160 earmelf_linux_eabi.c:1160
-#: earmelf_linux_fdpiceabi.c:1160 earmelf_nacl.c:1160 earmelf_nbsd.c:1155
-#: earmelf_phoenix.c:1160 earmelf_vxworks.c:1195 earmelfb.c:1155
-#: earmelfb_fbsd.c:1155 earmelfb_fuchsia.c:1160 earmelfb_linux.c:1160
-#: earmelfb_linux_eabi.c:1160 earmelfb_linux_fdpiceabi.c:1160
-#: earmelfb_nacl.c:1160 earmelfb_nbsd.c:1155 earmnto.c:1130
+#: earmelf.c:1157 earmelf_fbsd.c:1157 earmelf_fuchsia.c:1162
+#: earmelf_haiku.c:1162 earmelf_linux.c:1162 earmelf_linux_eabi.c:1162
+#: earmelf_linux_fdpiceabi.c:1162 earmelf_nacl.c:1162 earmelf_nbsd.c:1157
+#: earmelf_phoenix.c:1162 earmelf_vxworks.c:1197 earmelfb.c:1157
+#: earmelfb_fbsd.c:1157 earmelfb_fuchsia.c:1162 earmelfb_linux.c:1162
+#: earmelfb_linux_eabi.c:1162 earmelfb_linux_fdpiceabi.c:1162
+#: earmelfb_nacl.c:1162 earmelfb_nbsd.c:1157 earmnto.c:1132
#, c-format
msgid " --[no-]fix-arm1176 Disable/enable ARM1176 BLX immediate erratum fix\n"
msgstr " --[no-]fix-arm1176 вимкнути або увімкнути Ð²Ð¸Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸ із проміжними значеннÑми ARM1176 BLX\n"
#: earmelf_vxworks.c:600 eelf32_sparc_vxworks.c:71 eelf32ebmipvxworks.c:267
-#: eelf32elmipvxworks.c:267 eelf32ppcvxworks.c:224 eelf_i386_vxworks.c:95
+#: eelf32elmipvxworks.c:267 eelf32ppcvxworks.c:236 eelf_i386_vxworks.c:95
#: eshelf_vxworks.c:71 eshlelf_vxworks.c:71
msgid "%X%P: cannot create dynamic sections %E\n"
msgstr "%X%P: не вдалоÑÑ Ñтворити динамічні розділи: %E\n"
#: earmelf_vxworks.c:606 eelf32_sparc_vxworks.c:77 eelf32ebmipvxworks.c:273
-#: eelf32elmipvxworks.c:273 eelf32ppcvxworks.c:230 eelf_i386_vxworks.c:101
+#: eelf32elmipvxworks.c:273 eelf32ppcvxworks.c:242 eelf_i386_vxworks.c:101
#: eshelf_vxworks.c:77 eshlelf_vxworks.c:77
msgid "%X%P: dynamic sections created in non-dynamic link\n"
msgstr "%X%P: динамічні розділи Ñтворено у нединамічному компонуванні\n"
-#: earmelf_vxworks.c:1197 eelf32_sparc_vxworks.c:500 eelf32ebmipvxworks.c:758
-#: eelf32elmipvxworks.c:758 eelf32ppcvxworks.c:811 eelf_i386_vxworks.c:577
-#: eshelf_vxworks.c:470 eshlelf_vxworks.c:470
+#: earmelf_vxworks.c:1199 eelf32_sparc_vxworks.c:502 eelf32ebmipvxworks.c:760
+#: eelf32elmipvxworks.c:760 eelf32ppcvxworks.c:825 eelf_i386_vxworks.c:587
+#: eshelf_vxworks.c:472 eshlelf_vxworks.c:472
#, c-format
msgid " --force-dynamic Always create dynamic sections\n"
msgstr " --force-dynamic завжди Ñтворювати динамічні розділи\n"
@@ -4541,10 +4592,10 @@ msgstr "%X%P: не вдалоÑÑ Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ñ‚Ð¸ ÑпиÑок вхідн
msgid "%X%P: can not create stub BFD: %E\n"
msgstr "%X%P: не вдалоÑÑ Ñтворити фіктивний BFD: %E\n"
-#: eavr1.c:536 eavr2.c:536 eavr25.c:536 eavr3.c:536 eavr31.c:536 eavr35.c:536
-#: eavr4.c:536 eavr5.c:536 eavr51.c:536 eavr6.c:536 eavrtiny.c:536
-#: eavrxmega1.c:536 eavrxmega2.c:536 eavrxmega3.c:536 eavrxmega4.c:536
-#: eavrxmega5.c:536 eavrxmega6.c:536 eavrxmega7.c:536
+#: eavr1.c:538 eavr2.c:538 eavr25.c:538 eavr3.c:538 eavr31.c:538 eavr35.c:538
+#: eavr4.c:538 eavr5.c:538 eavr51.c:538 eavr6.c:538 eavrtiny.c:538
+#: eavrxmega1.c:538 eavrxmega2.c:538 eavrxmega3.c:538 eavrxmega4.c:538
+#: eavrxmega5.c:538 eavrxmega6.c:538 eavrxmega7.c:538
#, c-format
msgid ""
" --pmem-wrap-around=<val> Make the linker relaxation machine assume that a\n"
@@ -4555,10 +4606,10 @@ msgstr ""
" що ÑÐºÐ¸Ð´Ð°Ð½Ð½Ñ Ð°Ð´Ñ€ÐµÑ Ð»Ñ–Ñ‡Ð¸Ð»ÑŒÐ½Ð¸ÐºÐ° програми відбуваєтьÑÑ Ð·Ð° адреÑою\n"
" <значеннÑ>. Можливі значеннÑ: 8k, 16k, 32k Ñ– 64k.\n"
-#: eavr1.c:542 eavr2.c:542 eavr25.c:542 eavr3.c:542 eavr31.c:542 eavr35.c:542
-#: eavr4.c:542 eavr5.c:542 eavr51.c:542 eavr6.c:542 eavrtiny.c:542
-#: eavrxmega1.c:542 eavrxmega2.c:542 eavrxmega3.c:542 eavrxmega4.c:542
-#: eavrxmega5.c:542 eavrxmega6.c:542 eavrxmega7.c:542
+#: eavr1.c:544 eavr2.c:544 eavr25.c:544 eavr3.c:544 eavr31.c:544 eavr35.c:544
+#: eavr4.c:544 eavr5.c:544 eavr51.c:544 eavr6.c:544 eavrtiny.c:544
+#: eavrxmega1.c:544 eavrxmega2.c:544 eavrxmega3.c:544 eavrxmega4.c:544
+#: eavrxmega5.c:544 eavrxmega6.c:544 eavrxmega7.c:544
#, c-format
msgid ""
" --no-call-ret-replacement The relaxation machine normally will\n"
@@ -4572,10 +4623,10 @@ msgstr ""
" За допомогою цього параметра можна\n"
" вимкнути цю оптимізацію.\n"
-#: eavr1.c:550 eavr2.c:550 eavr25.c:550 eavr3.c:550 eavr31.c:550 eavr35.c:550
-#: eavr4.c:550 eavr5.c:550 eavr51.c:550 eavr6.c:550 eavrtiny.c:550
-#: eavrxmega1.c:550 eavrxmega2.c:550 eavrxmega3.c:550 eavrxmega4.c:550
-#: eavrxmega5.c:550 eavrxmega6.c:550 eavrxmega7.c:550
+#: eavr1.c:552 eavr2.c:552 eavr25.c:552 eavr3.c:552 eavr31.c:552 eavr35.c:552
+#: eavr4.c:552 eavr5.c:552 eavr51.c:552 eavr6.c:552 eavrtiny.c:552
+#: eavrxmega1.c:552 eavrxmega2.c:552 eavrxmega3.c:552 eavrxmega4.c:552
+#: eavrxmega5.c:552 eavrxmega6.c:552 eavrxmega7.c:552
#, c-format
msgid ""
" --no-stubs If the linker detects to attempt to access\n"
@@ -4589,19 +4640,19 @@ msgstr ""
" заглушку jump. Ви можете вимкнути цю поведінку\n"
" за допомогою цього параметра.\n"
-#: eavr1.c:558 eavr2.c:558 eavr25.c:558 eavr3.c:558 eavr31.c:558 eavr35.c:558
-#: eavr4.c:558 eavr5.c:558 eavr51.c:558 eavr6.c:558 eavrtiny.c:558
-#: eavrxmega1.c:558 eavrxmega2.c:558 eavrxmega3.c:558 eavrxmega4.c:558
-#: eavrxmega5.c:558 eavrxmega6.c:558 eavrxmega7.c:558
-#, c-format
-msgid " --debug-stubs Used for debugging avr-ld.\n"
-msgstr " --debug-stubs викориÑтовуєтьÑÑ Ð´Ð»Ñ Ð´Ñ–Ð°Ð³Ð½Ð¾Ñтики avr-ld.\n"
-
#: eavr1.c:560 eavr2.c:560 eavr25.c:560 eavr3.c:560 eavr31.c:560 eavr35.c:560
#: eavr4.c:560 eavr5.c:560 eavr51.c:560 eavr6.c:560 eavrtiny.c:560
#: eavrxmega1.c:560 eavrxmega2.c:560 eavrxmega3.c:560 eavrxmega4.c:560
#: eavrxmega5.c:560 eavrxmega6.c:560 eavrxmega7.c:560
#, c-format
+msgid " --debug-stubs Used for debugging avr-ld.\n"
+msgstr " --debug-stubs викориÑтовуєтьÑÑ Ð´Ð»Ñ Ð´Ñ–Ð°Ð³Ð½Ð¾Ñтики avr-ld.\n"
+
+#: eavr1.c:562 eavr2.c:562 eavr25.c:562 eavr3.c:562 eavr31.c:562 eavr35.c:562
+#: eavr4.c:562 eavr5.c:562 eavr51.c:562 eavr6.c:562 eavrtiny.c:562
+#: eavrxmega1.c:562 eavrxmega2.c:562 eavrxmega3.c:562 eavrxmega4.c:562
+#: eavrxmega5.c:562 eavrxmega6.c:562 eavrxmega7.c:562
+#, c-format
msgid " --debug-relax Used for debugging avr-ld.\n"
msgstr " --debug-relax викориÑтовуєтьÑÑ Ð´Ð»Ñ Ð´Ñ–Ð°Ð³Ð½Ð¾Ñтики avr-ld.\n"
@@ -4613,14 +4664,14 @@ msgstr "%X%P: не вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ розмір фіктивн
msgid "%X%P: cannot build stubs: %E\n"
msgstr "%X%P: неможливо зібрати фіктивні блоки: %E\n"
-#: ecskyelf.c:553 ecskyelf_linux.c:720
+#: ecskyelf.c:555 ecskyelf_linux.c:722
#, c-format
msgid ""
" --[no-]branch-stub Disable/enable use of stubs to expand branch\n"
" instructions that cannot reach the target.\n"
msgstr " --[no-]branch-stub Вимкнути або увімкнути викориÑÑ‚Ð°Ð½Ð½Ñ Ñ„Ñ–ÐºÑ‚Ð¸Ð²Ð½Ð¸Ñ… команд Ð´Ð»Ñ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Ñ–Ð½Ñтрукцій гілок, Ñкі не можуть доÑÑгти Ñ€Ñ–Ð²Ð½Ñ Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ.\n"
-#: ecskyelf.c:557 ecskyelf_linux.c:724
+#: ecskyelf.c:559 ecskyelf_linux.c:726
#, c-format
msgid ""
" --stub-group-size=N Maximum size of a group of input sections\n"
@@ -4674,79 +4725,84 @@ msgstr "%X%P: %pA виходить за межі діапазону локаль
msgid "%P: --auto-overlay ignored with zero local store range\n"
msgstr "%P: --auto-overlay проігноровано, оÑкільки діапазон локального Ñховища Ñ” нульовим\n"
-#: eelf32_spu.c:894
+#: eelf32_spu.c:675
+#, c-format
+msgid "running: %s \"%s\" \"%s\" \"%s\" \"%s\"\n"
+msgstr "виконуємо: %s \"%s\" \"%s\" \"%s\" \"%s\"\n"
+
+#: eelf32_spu.c:1032
msgid "%F%P: invalid --local-store address range `%s'\n"
msgstr "%F%P: некоректний діапазон Ð°Ð´Ñ€ÐµÑ --local-store, «%s»\n"
-#: eelf32_spu.c:930
+#: eelf32_spu.c:1068
msgid "%F%P: invalid --num-lines/--num-regions `%u'\n"
msgstr "%F%P: некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ --num-lines/--num-regions, «%u»\n"
-#: eelf32_spu.c:935
+#: eelf32_spu.c:1073
msgid "%F%P: invalid --line-size/--region-size `%u'\n"
msgstr "%F%P: некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ --line-size/--region-size, «%u»\n"
-#: eelf32_spu.c:956
+#: eelf32_spu.c:1094
msgid "%F%P: invalid --num-lines/--num-regions `%s'\n"
msgstr "%F%P: некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ --num-lines/--num-regions, «%s»\n"
-#: eelf32_spu.c:969
+#: eelf32_spu.c:1107
msgid "%F%P: invalid --line-size/--region-size `%s'\n"
msgstr "%F%P: некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ --line-size/--region-size, «%s»\n"
-#: eelf32_spu.c:978
+#: eelf32_spu.c:1116
msgid "%F%P: invalid --fixed-space value `%s'\n"
msgstr "%F%P: некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ --fixed-space, «%s»\n"
-#: eelf32_spu.c:987
+#: eelf32_spu.c:1125
msgid "%F%P: invalid --reserved-space value `%s'\n"
msgstr "%F%P: некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ --reserved-space, «%s»\n"
-#: eelf32_spu.c:996
+#: eelf32_spu.c:1134
msgid "%F%P: invalid --extra-stack-space value `%s'\n"
msgstr "%F%P: некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ --extra-stack-space, «%s»\n"
-#: eelf32_spu.c:1033
+#: eelf32_spu.c:1171
#, c-format
msgid " --plugin Make SPU plugin\n"
msgstr " --plugin Ñтворити додаток SPU\n"
-#: eelf32_spu.c:1035
+#: eelf32_spu.c:1173
#, c-format
msgid " --no-overlays No overlay handling\n"
msgstr " --no-overlays без обробки накладки\n"
-#: eelf32_spu.c:1037
+#: eelf32_spu.c:1175
#, c-format
msgid " --compact-stubs Use smaller and possibly slower call stubs\n"
msgstr " --compact-stubs викориÑтовувати менші Ñ–, можливо, повільніші заглушки викликів\n"
-#: eelf32_spu.c:1039
+#: eelf32_spu.c:1177
#, c-format
msgid " --emit-stub-syms Add symbols on overlay call stubs\n"
msgstr " --emit-stub-syms додавати Ñимволи Ð´Ð»Ñ Ð½Ð°ÐºÐ»Ð°Ð´Ð¾Ðº заглушок викликів\n"
-#: eelf32_spu.c:1041
+#: eelf32_spu.c:1179
#, c-format
msgid " --extra-overlay-stubs Add stubs on all calls out of overlay regions\n"
msgstr " --extra-overlay-stubs додати заглушки Ð´Ð»Ñ ÑƒÑÑ–Ñ… викликів поза облаÑÑ‚Ñми накладок\n"
-#: eelf32_spu.c:1043
+#: eelf32_spu.c:1181
#, c-format
msgid " --local-store=lo:hi Valid address range\n"
msgstr " --local-store=верх:низ коректний діапазон адреÑ\n"
-#: eelf32_spu.c:1045
+#: eelf32_spu.c:1183
#, c-format
msgid " --stack-analysis Estimate maximum stack requirement\n"
msgstr " --stack-analysis оцінка макÑимального запиту щодо Ñтека\n"
-#: eelf32_spu.c:1047
+#: eelf32_spu.c:1185
#, c-format
msgid " --emit-stack-syms Add sym giving stack needed for each func\n"
msgstr " --emit-stack-syms додати заданий Ñтек sym Ð´Ð»Ñ ÐºÐ¾Ð¶Ð½Ð¾Ñ— функції\n"
-#: eelf32_spu.c:1049
+#: eelf32_spu.c:1187
#, c-format
msgid ""
" --auto-overlay [=filename] Create an overlay script in filename if\n"
@@ -4756,12 +4812,12 @@ msgstr ""
" Ñкщо виконуваний файл не уміщуєтьÑÑ Ñƒ\n"
" локальному Ñховищі даних\n"
-#: eelf32_spu.c:1052
+#: eelf32_spu.c:1190
#, c-format
msgid " --auto-relink Rerun linker using auto-overlay script\n"
msgstr " --auto-relink повторно запуÑтити компонувальних за допомогою Ñкрипту автонакладок\n"
-#: eelf32_spu.c:1054
+#: eelf32_spu.c:1192
#, c-format
msgid ""
" --overlay-rodata Place read-only data with associated function\n"
@@ -4770,22 +4826,22 @@ msgstr ""
" --overlay-rodata розташувати придатні лише Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ñ– із пов'Ñзаним\n"
" кодом функцій у накладках\n"
-#: eelf32_spu.c:1057
+#: eelf32_spu.c:1195
#, c-format
msgid " --num-regions Number of overlay buffers (default 1)\n"
msgstr " --num-regions кількіÑÑ‚ÑŒ буферів накладок (типове значеннÑ: 1)\n"
-#: eelf32_spu.c:1059
+#: eelf32_spu.c:1197
#, c-format
msgid " --region-size Size of overlay buffers (default 0, auto)\n"
msgstr " --region-size розмір буферів накладок (типовим є 0, автоматично)\n"
-#: eelf32_spu.c:1061
+#: eelf32_spu.c:1199
#, c-format
msgid " --fixed-space=bytes Local store for non-overlay code and data\n"
msgstr " --fixed-space=байти локальне Ñховище Ð´Ð»Ñ Ð½ÐµÐ½Ð°ÐºÐ»Ð°Ð´ÐµÐ½Ð¾Ð³Ð¾ коду Ñ– даних\n"
-#: eelf32_spu.c:1063
+#: eelf32_spu.c:1201
#, c-format
msgid ""
" --reserved-space=bytes Local store for stack and heap. If not specified\n"
@@ -4794,7 +4850,7 @@ msgstr ""
" --reserved-space=байти локальне Ñховище Ð´Ð»Ñ Ñтека Ñ– купи. Якщо не вказано,\n"
" ld викориÑтає оцінку розміру Ñтека Ñ– не викориÑтовуватиме купу\n"
-#: eelf32_spu.c:1066
+#: eelf32_spu.c:1204
#, c-format
msgid ""
" --extra-stack-space=bytes Space for negative sp access (default 2000) if\n"
@@ -4803,27 +4859,27 @@ msgstr ""
" --extra-stack-space=байти проÑÑ‚Ñ–Ñ€ Ð´Ð»Ñ Ð²Ñ–Ð´'ємного доÑтупу sp (типово, 2000), Ñкщо\n"
" не вказано --reserved-space\n"
-#: eelf32_spu.c:1069
+#: eelf32_spu.c:1207
#, c-format
msgid " --soft-icache Generate software icache overlays\n"
msgstr " --soft-icache Ñтворювати програмні накладки icache\n"
-#: eelf32_spu.c:1071
+#: eelf32_spu.c:1209
#, c-format
msgid " --num-lines Number of soft-icache lines (default 32)\n"
msgstr " --num-lines кількіÑÑ‚ÑŒ Ñ€Ñдків soft-icache (типово 32)\n"
-#: eelf32_spu.c:1073
+#: eelf32_spu.c:1211
#, c-format
msgid " --line-size Size of soft-icache lines (default 1k)\n"
msgstr " --line-size розмір Ñ€Ñдків soft-icache (типово, 1k)\n"
-#: eelf32_spu.c:1075
+#: eelf32_spu.c:1213
#, c-format
msgid " --non-ia-text Allow non-icache code in icache lines\n"
msgstr " --non-ia-text дозволити код не-icache у Ñ€Ñдках icache\n"
-#: eelf32_spu.c:1077
+#: eelf32_spu.c:1215
#, c-format
msgid " --lrlive-analysis Scan function prologue for lr liveness\n"
msgstr " --lrlive-analysis Ñканувати пролог функції щодо живучоÑÑ‚Ñ– lr\n"
@@ -4833,106 +4889,126 @@ msgstr " --lrlive-analysis Ñканувати пролог функц
msgid "%F%P: invalid --dsbt-index %d, outside DSBT size\n"
msgstr "%F%P: некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ --dsbt-index %d поза розміром DSBT\n"
-#: eelf32_tic6x_be.c:563 eelf32_tic6x_elf_be.c:563 eelf32_tic6x_elf_le.c:563
-#: eelf32_tic6x_le.c:563 eelf32_tic6x_linux_be.c:563
-#: eelf32_tic6x_linux_le.c:563
+#: eelf32_tic6x_be.c:565 eelf32_tic6x_elf_be.c:565 eelf32_tic6x_elf_le.c:565
+#: eelf32_tic6x_le.c:565 eelf32_tic6x_linux_be.c:565
+#: eelf32_tic6x_linux_le.c:565
msgid "%F%P: invalid --dsbt-index %s\n"
msgstr "%F%P: некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ --dsbt-index %s\n"
-#: eelf32_tic6x_be.c:573 eelf32_tic6x_elf_be.c:573 eelf32_tic6x_elf_le.c:573
-#: eelf32_tic6x_le.c:573 eelf32_tic6x_linux_be.c:573
-#: eelf32_tic6x_linux_le.c:573
+#: eelf32_tic6x_be.c:575 eelf32_tic6x_elf_be.c:575 eelf32_tic6x_elf_le.c:575
+#: eelf32_tic6x_le.c:575 eelf32_tic6x_linux_be.c:575
+#: eelf32_tic6x_linux_le.c:575
msgid "%F%P: invalid --dsbt-size %s\n"
msgstr "%F%P: некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ --dsbt-size %s\n"
-#: eelf32_tic6x_be.c:589 eelf32_tic6x_elf_be.c:589 eelf32_tic6x_elf_le.c:589
-#: eelf32_tic6x_le.c:589 eelf32_tic6x_linux_be.c:589
-#: eelf32_tic6x_linux_le.c:589
+#: eelf32_tic6x_be.c:591 eelf32_tic6x_elf_be.c:591 eelf32_tic6x_elf_le.c:591
+#: eelf32_tic6x_le.c:591 eelf32_tic6x_linux_be.c:591
+#: eelf32_tic6x_linux_le.c:591
#, c-format
msgid " --dsbt-index <index> Use this as the DSBT index for the output object\n"
msgstr " --dsbt-index <індекÑ> викориÑтовувати вказане Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñк Ñ–Ð½Ð´ÐµÐºÑ DSBT Ð´Ð»Ñ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð¾Ð³Ð¾ об'єкта\n"
-#: eelf32_tic6x_be.c:590 eelf32_tic6x_elf_be.c:590 eelf32_tic6x_elf_le.c:590
-#: eelf32_tic6x_le.c:590 eelf32_tic6x_linux_be.c:590
-#: eelf32_tic6x_linux_le.c:590
+#: eelf32_tic6x_be.c:592 eelf32_tic6x_elf_be.c:592 eelf32_tic6x_elf_le.c:592
+#: eelf32_tic6x_le.c:592 eelf32_tic6x_linux_be.c:592
+#: eelf32_tic6x_linux_le.c:592
#, c-format
msgid " --dsbt-size <index> Use this as the number of entries in the DSBT table\n"
msgstr " --dsbt-size <індекÑ> викориÑтовувати вказане чиÑло Ñк кількіÑÑ‚ÑŒ запиÑів у таблиці DSBT\n"
-#: eelf32_tic6x_be.c:591 eelf32_tic6x_elf_be.c:591 eelf32_tic6x_elf_le.c:591
-#: eelf32_tic6x_le.c:591 eelf32_tic6x_linux_be.c:591
-#: eelf32_tic6x_linux_le.c:591
+#: eelf32_tic6x_be.c:593 eelf32_tic6x_elf_be.c:593 eelf32_tic6x_elf_le.c:593
+#: eelf32_tic6x_le.c:593 eelf32_tic6x_linux_be.c:593
+#: eelf32_tic6x_linux_le.c:593
#, c-format
msgid " --no-merge-exidx-entries\n"
msgstr " --no-merge-exidx-entries\n"
-#: eelf32_tic6x_be.c:592 eelf32_tic6x_elf_be.c:592 eelf32_tic6x_elf_le.c:592
-#: eelf32_tic6x_le.c:592 eelf32_tic6x_linux_be.c:592
-#: eelf32_tic6x_linux_le.c:592
+#: eelf32_tic6x_be.c:594 eelf32_tic6x_elf_be.c:594 eelf32_tic6x_elf_le.c:594
+#: eelf32_tic6x_le.c:594 eelf32_tic6x_linux_be.c:594
+#: eelf32_tic6x_linux_le.c:594
#, c-format
msgid " Disable merging exidx entries\n"
msgstr " вимкнути об'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñів exidx\n"
-#: eelf32_x86_64.c:5543 eelf_i386.c:5162 eelf_i386_be.c:465
-#: eelf_i386_fbsd.c:505 eelf_i386_ldso.c:480 eelf_i386_sol2.c:637
-#: eelf_i386_vxworks.c:532 eelf_iamcu.c:505 eelf_k1om.c:5496
-#: eelf_k1om_fbsd.c:505 eelf_l1om.c:5496 eelf_l1om_fbsd.c:505
-#: eelf_x86_64.c:5543 eelf_x86_64_cloudabi.c:508 eelf_x86_64_fbsd.c:508
-#: eelf_x86_64_sol2.c:640
+#: eelf32_x86_64.c:5571 eelf_i386.c:5190 eelf_i386_be.c:471
+#: eelf_i386_fbsd.c:511 eelf_i386_haiku.c:511 eelf_i386_ldso.c:486
+#: eelf_i386_sol2.c:643 eelf_i386_vxworks.c:538 eelf_iamcu.c:511
+#: eelf_k1om.c:5502 eelf_k1om_fbsd.c:511 eelf_l1om.c:5502 eelf_l1om_fbsd.c:511
+#: eelf_x86_64.c:5571 eelf_x86_64_cloudabi.c:514 eelf_x86_64_fbsd.c:514
+#: eelf_x86_64_haiku.c:514 eelf_x86_64_sol2.c:646
msgid "%F%P: invalid number for -z call-nop=prefix-: %s\n"
msgstr "%F%P: некоректне чиÑло Ð´Ð»Ñ -z call-nop=prefix-: %s\n"
-#: eelf32_x86_64.c:5552 eelf_i386.c:5171 eelf_i386_be.c:474
-#: eelf_i386_fbsd.c:514 eelf_i386_ldso.c:489 eelf_i386_sol2.c:646
-#: eelf_i386_vxworks.c:541 eelf_iamcu.c:514 eelf_k1om.c:5505
-#: eelf_k1om_fbsd.c:514 eelf_l1om.c:5505 eelf_l1om_fbsd.c:514
-#: eelf_x86_64.c:5552 eelf_x86_64_cloudabi.c:517 eelf_x86_64_fbsd.c:517
-#: eelf_x86_64_sol2.c:649
+#: eelf32_x86_64.c:5580 eelf_i386.c:5199 eelf_i386_be.c:480
+#: eelf_i386_fbsd.c:520 eelf_i386_haiku.c:520 eelf_i386_ldso.c:495
+#: eelf_i386_sol2.c:652 eelf_i386_vxworks.c:547 eelf_iamcu.c:520
+#: eelf_k1om.c:5511 eelf_k1om_fbsd.c:520 eelf_l1om.c:5511 eelf_l1om_fbsd.c:520
+#: eelf_x86_64.c:5580 eelf_x86_64_cloudabi.c:523 eelf_x86_64_fbsd.c:523
+#: eelf_x86_64_haiku.c:523 eelf_x86_64_sol2.c:655
msgid "%F%P: invalid number for -z call-nop=suffix-: %s\n"
msgstr "%F%P: некоректне чиÑло Ð´Ð»Ñ -z call-nop=suffix-: %s\n"
-#: eelf32_x86_64.c:5557 eelf_i386.c:5176 eelf_i386_be.c:479
-#: eelf_i386_fbsd.c:519 eelf_i386_ldso.c:494 eelf_i386_sol2.c:651
-#: eelf_i386_vxworks.c:546 eelf_iamcu.c:519 eelf_k1om.c:5510
-#: eelf_k1om_fbsd.c:519 eelf_l1om.c:5510 eelf_l1om_fbsd.c:519
-#: eelf_x86_64.c:5557 eelf_x86_64_cloudabi.c:522 eelf_x86_64_fbsd.c:522
-#: eelf_x86_64_sol2.c:654
+#: eelf32_x86_64.c:5585 eelf_i386.c:5204 eelf_i386_be.c:485
+#: eelf_i386_fbsd.c:525 eelf_i386_haiku.c:525 eelf_i386_ldso.c:500
+#: eelf_i386_sol2.c:657 eelf_i386_vxworks.c:552 eelf_iamcu.c:525
+#: eelf_k1om.c:5516 eelf_k1om_fbsd.c:525 eelf_l1om.c:5516 eelf_l1om_fbsd.c:525
+#: eelf_x86_64.c:5585 eelf_x86_64_cloudabi.c:528 eelf_x86_64_fbsd.c:528
+#: eelf_x86_64_haiku.c:528 eelf_x86_64_sol2.c:660
msgid "%F%P: unsupported option: -z %s\n"
msgstr "%F%P: непідтримуваний параметр: -z %s\n"
-#: eelf32_x86_64.c:5579 eelf_i386.c:5198 eelf_i386_fbsd.c:541
-#: eelf_x86_64.c:5579 eelf_x86_64_cloudabi.c:544 eelf_x86_64_fbsd.c:544
-#: eelf_x86_64_sol2.c:676
+#: eelf32_x86_64.c:5607 eelf_i386.c:5226 eelf_i386_fbsd.c:547
+#: eelf_i386_haiku.c:547 eelf_x86_64.c:5607 eelf_x86_64_cloudabi.c:550
+#: eelf_x86_64_fbsd.c:550 eelf_x86_64_haiku.c:550 eelf_x86_64_sol2.c:682
msgid "%F%P: invalid option for -z cet-report=: %s\n"
msgstr "%F%P: некоректний параметр Ð´Ð»Ñ -z cet-report=: %s\n"
-#: eelf32_x86_64.c:5593 eelf_i386.c:5212 eelf_i386_fbsd.c:555
-#: eelf_x86_64.c:5593 eelf_x86_64_cloudabi.c:558 eelf_x86_64_fbsd.c:558
-#: eelf_x86_64_sol2.c:690
+#: eelf32_x86_64.c:5621 eelf_i386.c:5240 eelf_i386_fbsd.c:561
+#: eelf_i386_haiku.c:561 eelf_x86_64.c:5621 eelf_x86_64_cloudabi.c:564
+#: eelf_x86_64_fbsd.c:564 eelf_x86_64_haiku.c:564 eelf_x86_64_sol2.c:696
msgid "%F%P: invalid x86-64 ISA level: %s\n"
msgstr "%F%P: некоректний рівень ISA x86-64: %s\n"
-#: eelf32_x86_64.c:5630 eelf_i386.c:5249 eelf_i386_be.c:495
-#: eelf_i386_fbsd.c:592 eelf_i386_ldso.c:519 eelf_i386_sol2.c:676
-#: eelf_i386_vxworks.c:567 eelf_iamcu.c:544 eelf_k1om.c:5535
-#: eelf_k1om_fbsd.c:544 eelf_l1om.c:5535 eelf_l1om_fbsd.c:544
-#: eelf_x86_64.c:5683 eelf_x86_64_cloudabi.c:648 eelf_x86_64_fbsd.c:648
-#: eelf_x86_64_sol2.c:780
+#: eelf32_x86_64.c:5663 eelf_i386.c:5282 eelf_i386_be.c:501
+#: eelf_i386_fbsd.c:603 eelf_i386_haiku.c:603 eelf_i386_ldso.c:525
+#: eelf_i386_sol2.c:682 eelf_i386_vxworks.c:573 eelf_iamcu.c:550
+#: eelf_k1om.c:5541 eelf_k1om_fbsd.c:550 eelf_l1om.c:5541 eelf_l1om_fbsd.c:550
+#: eelf_x86_64.c:5716 eelf_x86_64_cloudabi.c:659 eelf_x86_64_fbsd.c:659
+#: eelf_x86_64_haiku.c:659 eelf_x86_64_sol2.c:791
#, c-format
msgid " -z noextern-protected-data Do not treat protected data symbol as external\n"
msgstr " -z noextern-protected-data не вважати захищений Ñимвол даних зовнішнім\n"
-#: eelf32_x86_64.c:5633 eelf32lppc.c:803 eelf32lppclinux.c:803
-#: eelf32lppcnto.c:803 eelf32lppcsim.c:803 eelf32ppc.c:803
-#: eelf32ppc_fbsd.c:803 eelf32ppclinux.c:803 eelf32ppcnto.c:803
-#: eelf32ppcsim.c:803 eelf32ppcvxworks.c:781 eelf32ppcwindiss.c:803
-#: eelf64lppc.c:1328 eelf64lppc_fbsd.c:1328 eelf64ppc.c:1328
-#: eelf64ppc_fbsd.c:1328 eelf_i386.c:5252 eelf_i386_be.c:498
-#: eelf_i386_fbsd.c:595 eelf_i386_ldso.c:522 eelf_i386_sol2.c:679
-#: eelf_i386_vxworks.c:570 eelf_iamcu.c:547 eelf_k1om.c:5538
-#: eelf_k1om_fbsd.c:547 eelf_l1om.c:5538 eelf_l1om_fbsd.c:547
-#: eelf_x86_64.c:5686 eelf_x86_64_cloudabi.c:651 eelf_x86_64_fbsd.c:651
-#: eelf_x86_64_sol2.c:783
+#: eelf32_x86_64.c:5665 eelf_i386.c:5284 eelf_i386_be.c:503
+#: eelf_i386_fbsd.c:605 eelf_i386_haiku.c:605 eelf_i386_ldso.c:527
+#: eelf_i386_sol2.c:684 eelf_i386_vxworks.c:575 eelf_iamcu.c:552
+#: eelf_k1om.c:5543 eelf_k1om_fbsd.c:552 eelf_l1om.c:5543 eelf_l1om_fbsd.c:552
+#: eelf_x86_64.c:5718 eelf_x86_64_cloudabi.c:661 eelf_x86_64_fbsd.c:661
+#: eelf_x86_64_haiku.c:661 eelf_x86_64_sol2.c:793
+#, c-format
+msgid " -z indirect-extern-access Enable indirect external access\n"
+msgstr " -z indirect-extern-access увімкнути опоÑередкований зовнішній доÑтуп\n"
+
+#: eelf32_x86_64.c:5667 eelf_i386.c:5286 eelf_i386_be.c:505
+#: eelf_i386_fbsd.c:607 eelf_i386_haiku.c:607 eelf_i386_ldso.c:529
+#: eelf_i386_sol2.c:686 eelf_i386_vxworks.c:577 eelf_iamcu.c:554
+#: eelf_k1om.c:5545 eelf_k1om_fbsd.c:554 eelf_l1om.c:5545 eelf_l1om_fbsd.c:554
+#: eelf_x86_64.c:5720 eelf_x86_64_cloudabi.c:663 eelf_x86_64_fbsd.c:663
+#: eelf_x86_64_haiku.c:663 eelf_x86_64_sol2.c:795
+#, c-format
+msgid " -z noindirect-extern-access Disable indirect external access (default)\n"
+msgstr " -z noindirect-extern-access вимкнути опоÑередкований зовнішній доÑтуп (типовий)\n"
+
+#: eelf32_x86_64.c:5670 eelf32lppc.c:817 eelf32lppclinux.c:817
+#: eelf32lppcnto.c:817 eelf32lppcsim.c:817 eelf32ppc.c:817
+#: eelf32ppc_fbsd.c:817 eelf32ppchaiku.c:817 eelf32ppclinux.c:817
+#: eelf32ppcnto.c:817 eelf32ppcsim.c:817 eelf32ppcvxworks.c:795
+#: eelf32ppcwindiss.c:817 eelf64lppc.c:1346 eelf64lppc_fbsd.c:1346
+#: eelf64ppc.c:1346 eelf64ppc_fbsd.c:1346 eelf_i386.c:5289 eelf_i386_be.c:508
+#: eelf_i386_fbsd.c:610 eelf_i386_haiku.c:610 eelf_i386_ldso.c:532
+#: eelf_i386_sol2.c:689 eelf_i386_vxworks.c:580 eelf_iamcu.c:557
+#: eelf_k1om.c:5548 eelf_k1om_fbsd.c:557 eelf_l1om.c:5548 eelf_l1om_fbsd.c:557
+#: eelf_x86_64.c:5723 eelf_x86_64_cloudabi.c:666 eelf_x86_64_fbsd.c:666
+#: eelf_x86_64_haiku.c:666 eelf_x86_64_sol2.c:798
#, c-format
msgid ""
" -z dynamic-undefined-weak Make undefined weak symbols dynamic\n"
@@ -4941,46 +5017,46 @@ msgstr ""
" -z dynamic-undefined-weak зробити невизначені Ñлабкі Ñимволи динамічними\n"
" -z nodynamic-undefined-weak не робити невизначені Ñлабкі Ñимволи динамічними\n"
-#: eelf32_x86_64.c:5637 eelf_x86_64.c:5690 eelf_x86_64_cloudabi.c:655
-#: eelf_x86_64_fbsd.c:655 eelf_x86_64_sol2.c:787
+#: eelf32_x86_64.c:5674 eelf_x86_64.c:5727 eelf_x86_64_cloudabi.c:670
+#: eelf_x86_64_fbsd.c:670 eelf_x86_64_haiku.c:670 eelf_x86_64_sol2.c:802
#, c-format
msgid " -z noreloc-overflow Disable relocation overflow check\n"
msgstr " -z noreloc-overflow вимкнути перевірку Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¸ переÑуванні\n"
-#: eelf32_x86_64.c:5640 eelf_i386.c:5256 eelf_i386_be.c:502
-#: eelf_i386_fbsd.c:599 eelf_i386_ldso.c:526 eelf_i386_sol2.c:683
-#: eelf_i386_vxworks.c:574 eelf_iamcu.c:551 eelf_k1om.c:5542
-#: eelf_k1om_fbsd.c:551 eelf_l1om.c:5542 eelf_l1om_fbsd.c:551
-#: eelf_x86_64.c:5693 eelf_x86_64_cloudabi.c:658 eelf_x86_64_fbsd.c:658
-#: eelf_x86_64_sol2.c:790
+#: eelf32_x86_64.c:5677 eelf_i386.c:5293 eelf_i386_be.c:512
+#: eelf_i386_fbsd.c:614 eelf_i386_haiku.c:614 eelf_i386_ldso.c:536
+#: eelf_i386_sol2.c:693 eelf_i386_vxworks.c:584 eelf_iamcu.c:561
+#: eelf_k1om.c:5552 eelf_k1om_fbsd.c:561 eelf_l1om.c:5552 eelf_l1om_fbsd.c:561
+#: eelf_x86_64.c:5730 eelf_x86_64_cloudabi.c:673 eelf_x86_64_fbsd.c:673
+#: eelf_x86_64_haiku.c:673 eelf_x86_64_sol2.c:805
#, c-format
msgid " -z call-nop=PADDING Use PADDING as 1-byte NOP for branch\n"
msgstr " -z call-nop=ДОПОВÐЕÐÐЯ викориÑтовувати ДОПОВÐЕÐÐЯ Ñк 1-байтовий NOP Ð´Ð»Ñ Ð³Ñ–Ð»ÐºÐ¸\n"
-#: eelf32_x86_64.c:5643 eelf_i386.c:5259 eelf_i386_fbsd.c:602
-#: eelf_x86_64.c:5696 eelf_x86_64_cloudabi.c:661 eelf_x86_64_fbsd.c:661
-#: eelf_x86_64_sol2.c:793
+#: eelf32_x86_64.c:5680 eelf_i386.c:5296 eelf_i386_fbsd.c:617
+#: eelf_i386_haiku.c:617 eelf_x86_64.c:5733 eelf_x86_64_cloudabi.c:676
+#: eelf_x86_64_fbsd.c:676 eelf_x86_64_haiku.c:676 eelf_x86_64_sol2.c:808
#, c-format
msgid " -z ibtplt Generate IBT-enabled PLT entries\n"
msgstr " -z ibtplt Ñтворити запиÑи PLT із увімкненим IBT\n"
-#: eelf32_x86_64.c:5645 eelf_i386.c:5261 eelf_i386_fbsd.c:604
-#: eelf_x86_64.c:5698 eelf_x86_64_cloudabi.c:663 eelf_x86_64_fbsd.c:663
-#: eelf_x86_64_sol2.c:795
+#: eelf32_x86_64.c:5682 eelf_i386.c:5298 eelf_i386_fbsd.c:619
+#: eelf_i386_haiku.c:619 eelf_x86_64.c:5735 eelf_x86_64_cloudabi.c:678
+#: eelf_x86_64_fbsd.c:678 eelf_x86_64_haiku.c:678 eelf_x86_64_sol2.c:810
#, c-format
msgid " -z ibt Generate GNU_PROPERTY_X86_FEATURE_1_IBT\n"
msgstr " -z ibt Ñтворити GNU_PROPERTY_X86_FEATURE_1_IBT\n"
-#: eelf32_x86_64.c:5647 eelf_i386.c:5263 eelf_i386_fbsd.c:606
-#: eelf_x86_64.c:5700 eelf_x86_64_cloudabi.c:665 eelf_x86_64_fbsd.c:665
-#: eelf_x86_64_sol2.c:797
+#: eelf32_x86_64.c:5684 eelf_i386.c:5300 eelf_i386_fbsd.c:621
+#: eelf_i386_haiku.c:621 eelf_x86_64.c:5737 eelf_x86_64_cloudabi.c:680
+#: eelf_x86_64_fbsd.c:680 eelf_x86_64_haiku.c:680 eelf_x86_64_sol2.c:812
#, c-format
msgid " -z shstk Generate GNU_PROPERTY_X86_FEATURE_1_SHSTK\n"
msgstr " -z shstk Ñтворити GNU_PROPERTY_X86_FEATURE_1_SHSTK\n"
-#: eelf32_x86_64.c:5649 eelf_i386.c:5265 eelf_i386_fbsd.c:608
-#: eelf_x86_64.c:5702 eelf_x86_64_cloudabi.c:667 eelf_x86_64_fbsd.c:667
-#: eelf_x86_64_sol2.c:799
+#: eelf32_x86_64.c:5686 eelf_i386.c:5302 eelf_i386_fbsd.c:623
+#: eelf_i386_haiku.c:623 eelf_x86_64.c:5739 eelf_x86_64_cloudabi.c:682
+#: eelf_x86_64_fbsd.c:682 eelf_x86_64_haiku.c:682 eelf_x86_64_sol2.c:814
#, c-format
msgid ""
" -z cet-report=[none|warning|error] (default: none)\n"
@@ -4989,55 +5065,73 @@ msgstr ""
" -z cet-report=[none|warning|error] (типове значеннÑ: none)\n"
" ПовідомлÑти про пропущені влаÑтивоÑÑ‚Ñ– IBT Ñ– SHSTK\n"
-#: eelf32_x86_64.c:5653 eelf_i386.c:5269 eelf_i386_fbsd.c:612
-#: eelf_x86_64.c:5706 eelf_x86_64_cloudabi.c:671 eelf_x86_64_fbsd.c:671
-#: eelf_x86_64_sol2.c:803
+#: eelf32_x86_64.c:5690 eelf_i386.c:5306 eelf_i386_fbsd.c:627
+#: eelf_i386_haiku.c:627 eelf_x86_64.c:5743 eelf_x86_64_cloudabi.c:686
+#: eelf_x86_64_fbsd.c:686 eelf_x86_64_haiku.c:686 eelf_x86_64_sol2.c:818
#, c-format
msgid " -z report-relative-reloc Report relative relocations\n"
msgstr " -z report-relative-reloc повідомлÑти про відноÑні переÑуваннÑ\n"
-#: eelf32_x86_64.c:5656 eelf_i386.c:5272 eelf_i386_fbsd.c:615
-#: eelf_x86_64.c:5709 eelf_x86_64_cloudabi.c:674 eelf_x86_64_fbsd.c:674
-#: eelf_x86_64_sol2.c:806
+#: eelf32_x86_64.c:5693 eelf_i386.c:5309 eelf_i386_fbsd.c:630
+#: eelf_i386_haiku.c:630 eelf_x86_64.c:5746 eelf_x86_64_cloudabi.c:689
+#: eelf_x86_64_fbsd.c:689 eelf_x86_64_haiku.c:689 eelf_x86_64_sol2.c:821
#, c-format
msgid " -z x86-64-{baseline|v[234]} Mark x86-64-{baseline|v[234]} ISA level as needed\n"
msgstr " -z x86-64-{baseline|v[234]} позначити рівень ISA x86-64-{baseline|v[234]}, Ñкщо потрібно\n"
-#: eelf32b4300.c:698 eelf32bmip.c:698 eelf32bmipn32.c:712 eelf32bsmip.c:712
-#: eelf32btsmip.c:698 eelf32btsmip_fbsd.c:698 eelf32btsmipn32.c:698
-#: eelf32btsmipn32_fbsd.c:698 eelf32ebmip.c:698 eelf32ebmipvxworks.c:737
-#: eelf32elmip.c:698 eelf32elmipvxworks.c:737 eelf32l4300.c:698
-#: eelf32lmip.c:698 eelf32lr5900.c:557 eelf32lr5900n32.c:556 eelf32lsmip.c:698
-#: eelf32ltsmip.c:698 eelf32ltsmip_fbsd.c:698 eelf32ltsmipn32.c:698
-#: eelf32ltsmipn32_fbsd.c:698 eelf32mipswindiss.c:531 eelf64bmip.c:712
-#: eelf64btsmip.c:698 eelf64btsmip_fbsd.c:698 eelf64ltsmip.c:698
-#: eelf64ltsmip_fbsd.c:698
+#: eelf32_x86_64.c:5696 eelf64lppc.c:1350 eelf64lppc_fbsd.c:1350
+#: eelf64ppc.c:1350 eelf64ppc_fbsd.c:1350 eelf_i386.c:5312
+#: eelf_i386_fbsd.c:633 eelf_i386_haiku.c:633 eelf_x86_64.c:5763
+#: eelf_x86_64_cloudabi.c:706 eelf_x86_64_fbsd.c:706 eelf_x86_64_haiku.c:706
+#: eelf_x86_64_sol2.c:838
+#, c-format
+msgid " -z pack-relative-relocs Pack relative relocations\n"
+msgstr " -z pack-relative-relocs пакувати відноÑні переÑуваннÑ\n"
+
+#: eelf32_x86_64.c:5698 eelf64lppc.c:1352 eelf64lppc_fbsd.c:1352
+#: eelf64ppc.c:1352 eelf64ppc_fbsd.c:1352 eelf_i386.c:5314
+#: eelf_i386_fbsd.c:635 eelf_i386_haiku.c:635 eelf_x86_64.c:5765
+#: eelf_x86_64_cloudabi.c:708 eelf_x86_64_fbsd.c:708 eelf_x86_64_haiku.c:708
+#: eelf_x86_64_sol2.c:840
+#, c-format
+msgid " -z nopack-relative-relocs Do not pack relative relocations (default)\n"
+msgstr " -z nopack-relative-relocs не пакувати відноÑні переÑÑƒÐ²Ð°Ð½Ð½Ñ (типова поведінка)\n"
+
+#: eelf32b4300.c:700 eelf32bmip.c:700 eelf32bmipn32.c:714 eelf32bsmip.c:714
+#: eelf32btsmip.c:700 eelf32btsmip_fbsd.c:700 eelf32btsmipn32.c:700
+#: eelf32btsmipn32_fbsd.c:700 eelf32ebmip.c:700 eelf32ebmipvxworks.c:739
+#: eelf32elmip.c:700 eelf32elmipvxworks.c:739 eelf32l4300.c:700
+#: eelf32lmip.c:700 eelf32lr5900.c:559 eelf32lr5900n32.c:558 eelf32lsmip.c:700
+#: eelf32ltsmip.c:700 eelf32ltsmip_fbsd.c:700 eelf32ltsmipn32.c:700
+#: eelf32ltsmipn32_fbsd.c:700 eelf32mipswindiss.c:533 eelf64bmip.c:714
+#: eelf64btsmip.c:700 eelf64btsmip_fbsd.c:700 eelf64ltsmip.c:700
+#: eelf64ltsmip_fbsd.c:700 eelf_mipsel_haiku.c:700
#, c-format
msgid " --insn32 Only generate 32-bit microMIPS instructions\n"
msgstr " --insn32 Ñтворювати лише 32-бітові інÑтрукції microMIPS\n"
-#: eelf32b4300.c:701 eelf32bmip.c:701 eelf32bmipn32.c:715 eelf32bsmip.c:715
-#: eelf32btsmip.c:701 eelf32btsmip_fbsd.c:701 eelf32btsmipn32.c:701
-#: eelf32btsmipn32_fbsd.c:701 eelf32ebmip.c:701 eelf32ebmipvxworks.c:740
-#: eelf32elmip.c:701 eelf32elmipvxworks.c:740 eelf32l4300.c:701
-#: eelf32lmip.c:701 eelf32lr5900.c:560 eelf32lr5900n32.c:559 eelf32lsmip.c:701
-#: eelf32ltsmip.c:701 eelf32ltsmip_fbsd.c:701 eelf32ltsmipn32.c:701
-#: eelf32ltsmipn32_fbsd.c:701 eelf32mipswindiss.c:534 eelf64bmip.c:715
-#: eelf64btsmip.c:701 eelf64btsmip_fbsd.c:701 eelf64ltsmip.c:701
-#: eelf64ltsmip_fbsd.c:701
+#: eelf32b4300.c:703 eelf32bmip.c:703 eelf32bmipn32.c:717 eelf32bsmip.c:717
+#: eelf32btsmip.c:703 eelf32btsmip_fbsd.c:703 eelf32btsmipn32.c:703
+#: eelf32btsmipn32_fbsd.c:703 eelf32ebmip.c:703 eelf32ebmipvxworks.c:742
+#: eelf32elmip.c:703 eelf32elmipvxworks.c:742 eelf32l4300.c:703
+#: eelf32lmip.c:703 eelf32lr5900.c:562 eelf32lr5900n32.c:561 eelf32lsmip.c:703
+#: eelf32ltsmip.c:703 eelf32ltsmip_fbsd.c:703 eelf32ltsmipn32.c:703
+#: eelf32ltsmipn32_fbsd.c:703 eelf32mipswindiss.c:536 eelf64bmip.c:717
+#: eelf64btsmip.c:703 eelf64btsmip_fbsd.c:703 eelf64ltsmip.c:703
+#: eelf64ltsmip_fbsd.c:703 eelf_mipsel_haiku.c:703
#, c-format
msgid " --no-insn32 Generate all microMIPS instructions\n"
msgstr " --no-insn32 Ñтворювати уÑÑ– інÑтрукції microMIPS\n"
-#: eelf32b4300.c:704 eelf32bmip.c:704 eelf32bmipn32.c:718 eelf32bsmip.c:718
-#: eelf32btsmip.c:704 eelf32btsmip_fbsd.c:704 eelf32btsmipn32.c:704
-#: eelf32btsmipn32_fbsd.c:704 eelf32ebmip.c:704 eelf32ebmipvxworks.c:743
-#: eelf32elmip.c:704 eelf32elmipvxworks.c:743 eelf32l4300.c:704
-#: eelf32lmip.c:704 eelf32lr5900.c:563 eelf32lr5900n32.c:562 eelf32lsmip.c:704
-#: eelf32ltsmip.c:704 eelf32ltsmip_fbsd.c:704 eelf32ltsmipn32.c:704
-#: eelf32ltsmipn32_fbsd.c:704 eelf32mipswindiss.c:537 eelf64bmip.c:718
-#: eelf64btsmip.c:704 eelf64btsmip_fbsd.c:704 eelf64ltsmip.c:704
-#: eelf64ltsmip_fbsd.c:704
+#: eelf32b4300.c:706 eelf32bmip.c:706 eelf32bmipn32.c:720 eelf32bsmip.c:720
+#: eelf32btsmip.c:706 eelf32btsmip_fbsd.c:706 eelf32btsmipn32.c:706
+#: eelf32btsmipn32_fbsd.c:706 eelf32ebmip.c:706 eelf32ebmipvxworks.c:745
+#: eelf32elmip.c:706 eelf32elmipvxworks.c:745 eelf32l4300.c:706
+#: eelf32lmip.c:706 eelf32lr5900.c:565 eelf32lr5900n32.c:564 eelf32lsmip.c:706
+#: eelf32ltsmip.c:706 eelf32ltsmip_fbsd.c:706 eelf32ltsmipn32.c:706
+#: eelf32ltsmipn32_fbsd.c:706 eelf32mipswindiss.c:539 eelf64bmip.c:720
+#: eelf64btsmip.c:706 eelf64btsmip_fbsd.c:706 eelf64ltsmip.c:706
+#: eelf64ltsmip_fbsd.c:706 eelf_mipsel_haiku.c:706
#, c-format
msgid ""
" --ignore-branch-isa Accept invalid branch relocations requiring\n"
@@ -5046,15 +5140,15 @@ msgstr ""
" --ignore-branch-isa приймати некоректні переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð³Ñ–Ð»Ð¾Ðº, що\n"
" потребують Ð¿ÐµÑ€ÐµÐ¼Ð¸ÐºÐ°Ð½Ð½Ñ Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸ ISA\n"
-#: eelf32b4300.c:708 eelf32bmip.c:708 eelf32bmipn32.c:722 eelf32bsmip.c:722
-#: eelf32btsmip.c:708 eelf32btsmip_fbsd.c:708 eelf32btsmipn32.c:708
-#: eelf32btsmipn32_fbsd.c:708 eelf32ebmip.c:708 eelf32ebmipvxworks.c:747
-#: eelf32elmip.c:708 eelf32elmipvxworks.c:747 eelf32l4300.c:708
-#: eelf32lmip.c:708 eelf32lr5900.c:567 eelf32lr5900n32.c:566 eelf32lsmip.c:708
-#: eelf32ltsmip.c:708 eelf32ltsmip_fbsd.c:708 eelf32ltsmipn32.c:708
-#: eelf32ltsmipn32_fbsd.c:708 eelf32mipswindiss.c:541 eelf64bmip.c:722
-#: eelf64btsmip.c:708 eelf64btsmip_fbsd.c:708 eelf64ltsmip.c:708
-#: eelf64ltsmip_fbsd.c:708
+#: eelf32b4300.c:710 eelf32bmip.c:710 eelf32bmipn32.c:724 eelf32bsmip.c:724
+#: eelf32btsmip.c:710 eelf32btsmip_fbsd.c:710 eelf32btsmipn32.c:710
+#: eelf32btsmipn32_fbsd.c:710 eelf32ebmip.c:710 eelf32ebmipvxworks.c:749
+#: eelf32elmip.c:710 eelf32elmipvxworks.c:749 eelf32l4300.c:710
+#: eelf32lmip.c:710 eelf32lr5900.c:569 eelf32lr5900n32.c:568 eelf32lsmip.c:710
+#: eelf32ltsmip.c:710 eelf32ltsmip_fbsd.c:710 eelf32ltsmipn32.c:710
+#: eelf32ltsmipn32_fbsd.c:710 eelf32mipswindiss.c:543 eelf64bmip.c:724
+#: eelf64btsmip.c:710 eelf64btsmip_fbsd.c:710 eelf64ltsmip.c:710
+#: eelf64ltsmip_fbsd.c:710 eelf_mipsel_haiku.c:710
#, c-format
msgid ""
" --no-ignore-branch-isa Reject invalid branch relocations requiring\n"
@@ -5063,38 +5157,38 @@ msgstr ""
" --no-ignore-branch-isa відкидати некоректні переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð³Ñ–Ð»Ð¾Ðº, що\n"
" потребують Ð¿ÐµÑ€ÐµÐ¼Ð¸ÐºÐ°Ð½Ð½Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ñƒ ISA\n"
-#: eelf32b4300.c:712 eelf32bmip.c:712 eelf32bmipn32.c:726 eelf32bsmip.c:726
-#: eelf32btsmip.c:712 eelf32btsmip_fbsd.c:712 eelf32btsmipn32.c:712
-#: eelf32btsmipn32_fbsd.c:712 eelf32ebmip.c:712 eelf32ebmipvxworks.c:751
-#: eelf32elmip.c:712 eelf32elmipvxworks.c:751 eelf32l4300.c:712
-#: eelf32lmip.c:712 eelf32lr5900.c:571 eelf32lr5900n32.c:570 eelf32lsmip.c:712
-#: eelf32ltsmip.c:712 eelf32ltsmip_fbsd.c:712 eelf32ltsmipn32.c:712
-#: eelf32ltsmipn32_fbsd.c:712 eelf32mipswindiss.c:545 eelf64bmip.c:726
-#: eelf64btsmip.c:712 eelf64btsmip_fbsd.c:712 eelf64ltsmip.c:712
-#: eelf64ltsmip_fbsd.c:712
+#: eelf32b4300.c:714 eelf32bmip.c:714 eelf32bmipn32.c:728 eelf32bsmip.c:728
+#: eelf32btsmip.c:714 eelf32btsmip_fbsd.c:714 eelf32btsmipn32.c:714
+#: eelf32btsmipn32_fbsd.c:714 eelf32ebmip.c:714 eelf32ebmipvxworks.c:753
+#: eelf32elmip.c:714 eelf32elmipvxworks.c:753 eelf32l4300.c:714
+#: eelf32lmip.c:714 eelf32lr5900.c:573 eelf32lr5900n32.c:572 eelf32lsmip.c:714
+#: eelf32ltsmip.c:714 eelf32ltsmip_fbsd.c:714 eelf32ltsmipn32.c:714
+#: eelf32ltsmipn32_fbsd.c:714 eelf32mipswindiss.c:547 eelf64bmip.c:728
+#: eelf64btsmip.c:714 eelf64btsmip_fbsd.c:714 eelf64ltsmip.c:714
+#: eelf64ltsmip_fbsd.c:714 eelf_mipsel_haiku.c:714
#, c-format
msgid " --compact-branches Generate compact branches/jumps for MIPS R6\n"
msgstr " --compact-branches Ñтворити компактні Ð²Ñ–Ð´Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ Ñ‚Ð° переходи Ð´Ð»Ñ MIPS R6\n"
-#: eelf32b4300.c:715 eelf32bmip.c:715 eelf32bmipn32.c:729 eelf32bsmip.c:729
-#: eelf32btsmip.c:715 eelf32btsmip_fbsd.c:715 eelf32btsmipn32.c:715
-#: eelf32btsmipn32_fbsd.c:715 eelf32ebmip.c:715 eelf32ebmipvxworks.c:754
-#: eelf32elmip.c:715 eelf32elmipvxworks.c:754 eelf32l4300.c:715
-#: eelf32lmip.c:715 eelf32lr5900.c:574 eelf32lr5900n32.c:573 eelf32lsmip.c:715
-#: eelf32ltsmip.c:715 eelf32ltsmip_fbsd.c:715 eelf32ltsmipn32.c:715
-#: eelf32ltsmipn32_fbsd.c:715 eelf32mipswindiss.c:548 eelf64bmip.c:729
-#: eelf64btsmip.c:715 eelf64btsmip_fbsd.c:715 eelf64ltsmip.c:715
-#: eelf64ltsmip_fbsd.c:715
+#: eelf32b4300.c:717 eelf32bmip.c:717 eelf32bmipn32.c:731 eelf32bsmip.c:731
+#: eelf32btsmip.c:717 eelf32btsmip_fbsd.c:717 eelf32btsmipn32.c:717
+#: eelf32btsmipn32_fbsd.c:717 eelf32ebmip.c:717 eelf32ebmipvxworks.c:756
+#: eelf32elmip.c:717 eelf32elmipvxworks.c:756 eelf32l4300.c:717
+#: eelf32lmip.c:717 eelf32lr5900.c:576 eelf32lr5900n32.c:575 eelf32lsmip.c:717
+#: eelf32ltsmip.c:717 eelf32ltsmip_fbsd.c:717 eelf32ltsmipn32.c:717
+#: eelf32ltsmipn32_fbsd.c:717 eelf32mipswindiss.c:550 eelf64bmip.c:731
+#: eelf64btsmip.c:717 eelf64btsmip_fbsd.c:717 eelf64ltsmip.c:717
+#: eelf64ltsmip_fbsd.c:717 eelf_mipsel_haiku.c:717
#, c-format
msgid " --no-compact-branches Generate delay slot branches/jumps for MIPS R6\n"
msgstr " --no-compact-branches Створити Ð²Ñ–Ð´Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ Ñ– переходи із Ñлотами затримки Ð´Ð»Ñ MIPS R6\n"
-#: eelf32bfin.c:454 eelf32bfinfd.c:479
+#: eelf32bfin.c:456 eelf32bfinfd.c:481
#, c-format
msgid " --code-in-l1 Put code in L1\n"
msgstr " --code-in-l1 запиÑати код до L1\n"
-#: eelf32bfin.c:456 eelf32bfinfd.c:481
+#: eelf32bfin.c:458 eelf32bfinfd.c:483
#, c-format
msgid " --data-in-l1 Put data in L1\n"
msgstr " --data-in-l1 запиÑати дані до L1\n"
@@ -5120,140 +5214,146 @@ msgid "%X%P: %pB: can not create runtime reloc information: %s\n"
msgstr "%X%P: %pB: неможливо Ñтворити відомоÑÑ‚Ñ– щодо переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ режимі виконаннÑ: %s\n"
#: eelf32lppc.c:96 eelf32lppclinux.c:96 eelf32lppcnto.c:96 eelf32lppcsim.c:96
-#: eelf32ppc.c:96 eelf32ppc_fbsd.c:96 eelf32ppclinux.c:96 eelf32ppcnto.c:96
-#: eelf32ppcsim.c:96 eelf32ppcwindiss.c:96
+#: eelf32ppc.c:96 eelf32ppc_fbsd.c:96 eelf32ppchaiku.c:96 eelf32ppclinux.c:96
+#: eelf32ppcnto.c:96 eelf32ppcsim.c:96 eelf32ppcwindiss.c:96
msgid "%X%P: select_plt_layout problem %E\n"
msgstr "%X%P: проблема із select_plt_layout: %E\n"
#: eelf32lppc.c:160 eelf32lppclinux.c:160 eelf32lppcnto.c:160
#: eelf32lppcsim.c:160 eelf32ppc.c:160 eelf32ppc_fbsd.c:160
-#: eelf32ppclinux.c:160 eelf32ppcnto.c:160 eelf32ppcsim.c:160
-#: eelf32ppcvxworks.c:105 eelf32ppcwindiss.c:160 eelf64lppc.c:321
-#: eelf64lppc_fbsd.c:321 eelf64ppc.c:321 eelf64ppc_fbsd.c:321
+#: eelf32ppchaiku.c:160 eelf32ppclinux.c:160 eelf32ppcnto.c:160
+#: eelf32ppcsim.c:160 eelf32ppcvxworks.c:105 eelf32ppcwindiss.c:160
+#: eelf64lppc.c:321 eelf64lppc_fbsd.c:321 eelf64ppc.c:321 eelf64ppc_fbsd.c:321
msgid "%X%P: inline PLT: %E\n"
msgstr "%X%P: вбудоване PLT: %E\n"
#: eelf32lppc.c:168 eelf32lppclinux.c:168 eelf32lppcnto.c:168
#: eelf32lppcsim.c:168 eelf32ppc.c:168 eelf32ppc_fbsd.c:168
-#: eelf32ppclinux.c:168 eelf32ppcnto.c:168 eelf32ppcsim.c:168
-#: eelf32ppcvxworks.c:113 eelf32ppcwindiss.c:168 eelf64lppc.c:325
-#: eelf64lppc.c:344 eelf64lppc_fbsd.c:325 eelf64lppc_fbsd.c:344
-#: eelf64ppc.c:325 eelf64ppc.c:344 eelf64ppc_fbsd.c:325 eelf64ppc_fbsd.c:344
+#: eelf32ppchaiku.c:168 eelf32ppclinux.c:168 eelf32ppcnto.c:168
+#: eelf32ppcsim.c:168 eelf32ppcvxworks.c:113 eelf32ppcwindiss.c:168
+#: eelf64lppc.c:325 eelf64lppc.c:344 eelf64lppc_fbsd.c:325
+#: eelf64lppc_fbsd.c:344 eelf64ppc.c:325 eelf64ppc.c:344 eelf64ppc_fbsd.c:325
+#: eelf64ppc_fbsd.c:344
msgid "%X%P: TLS problem %E\n"
msgstr "%X%P: проблема із TLS: %E\n"
#: eelf32lppc.c:255 eelf32lppclinux.c:255 eelf32lppcnto.c:255
#: eelf32lppcsim.c:255 eelf32ppc.c:255 eelf32ppc_fbsd.c:255
-#: eelf32ppclinux.c:255 eelf32ppcnto.c:255 eelf32ppcsim.c:255
-#: eelf32ppcvxworks.c:200 eelf32ppcwindiss.c:255
+#: eelf32ppchaiku.c:255 eelf32ppclinux.c:255 eelf32ppcnto.c:255
+#: eelf32ppcsim.c:255 eelf32ppcvxworks.c:200 eelf32ppcwindiss.c:255
msgid "%X%P: ppc_finish_symbols problem %E\n"
msgstr "%X%P: проблема із ppc_finish_symbols: %E\n"
-#: eelf32lppc.c:744 eelf32lppclinux.c:744 eelf32lppcnto.c:744
-#: eelf32lppcsim.c:744 eelf32ppc.c:744 eelf32ppc_fbsd.c:744
-#: eelf32ppclinux.c:744 eelf32ppcnto.c:744 eelf32ppcsim.c:744
-#: eelf32ppcvxworks.c:718 eelf32ppcwindiss.c:744 eelf64lppc.c:1195
-#: eelf64lppc_fbsd.c:1195 eelf64ppc.c:1195 eelf64ppc_fbsd.c:1195
+#: eelf32lppc.c:758 eelf32lppclinux.c:758 eelf32lppcnto.c:758
+#: eelf32lppcsim.c:758 eelf32ppc.c:758 eelf32ppc_fbsd.c:758
+#: eelf32ppchaiku.c:758 eelf32ppclinux.c:758 eelf32ppcnto.c:758
+#: eelf32ppcsim.c:758 eelf32ppcvxworks.c:732 eelf32ppcwindiss.c:758
+#: eelf64lppc.c:1213 eelf64lppc_fbsd.c:1213 eelf64ppc.c:1213
+#: eelf64ppc_fbsd.c:1213
msgid "%F%P: invalid --plt-align `%s'\n"
msgstr "%F%P: некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ --plt-align, «%s»\n"
-#: eelf32lppc.c:777 eelf32lppclinux.c:777 eelf32lppcnto.c:777
-#: eelf32lppcsim.c:777 eelf32ppc.c:777 eelf32ppc_fbsd.c:777
-#: eelf32ppclinux.c:777 eelf32ppcnto.c:777 eelf32ppcsim.c:777
-#: eelf32ppcvxworks.c:751 eelf32ppcwindiss.c:777
+#: eelf32lppc.c:791 eelf32lppclinux.c:791 eelf32lppcnto.c:791
+#: eelf32lppcsim.c:791 eelf32ppc.c:791 eelf32ppc_fbsd.c:791
+#: eelf32ppchaiku.c:791 eelf32ppclinux.c:791 eelf32ppcnto.c:791
+#: eelf32ppcsim.c:791 eelf32ppcvxworks.c:765 eelf32ppcwindiss.c:791
msgid "%F%P: invalid pagesize `%s'\n"
msgstr "%F%P: некоректний розмір Ñторінки, «%s»\n"
-#: eelf32lppc.c:807 eelf32lppclinux.c:807 eelf32lppcnto.c:807
-#: eelf32lppcsim.c:807 eelf32ppc.c:807 eelf32ppc_fbsd.c:807
-#: eelf32ppclinux.c:807 eelf32ppcnto.c:807 eelf32ppcsim.c:807
-#: eelf32ppcvxworks.c:785 eelf32ppcwindiss.c:807 eelf64lppc.c:1375
-#: eelf64lppc_fbsd.c:1375 eelf64ppc.c:1375 eelf64ppc_fbsd.c:1375
+#: eelf32lppc.c:821 eelf32lppclinux.c:821 eelf32lppcnto.c:821
+#: eelf32lppcsim.c:821 eelf32ppc.c:821 eelf32ppc_fbsd.c:821
+#: eelf32ppchaiku.c:821 eelf32ppclinux.c:821 eelf32ppcnto.c:821
+#: eelf32ppcsim.c:821 eelf32ppcvxworks.c:799 eelf32ppcwindiss.c:821
+#: eelf64lppc.c:1398 eelf64lppc_fbsd.c:1398 eelf64ppc.c:1398
+#: eelf64ppc_fbsd.c:1398
#, c-format
msgid " --emit-stub-syms Label linker stubs with a symbol\n"
msgstr " --emit-stub-syms позначити заглушки заÑобу ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ñимволом\n"
-#: eelf32lppc.c:810 eelf32lppclinux.c:810 eelf32lppcnto.c:810
-#: eelf32lppcsim.c:810 eelf32ppc.c:810 eelf32ppc_fbsd.c:810
-#: eelf32ppclinux.c:810 eelf32ppcnto.c:810 eelf32ppcsim.c:810
-#: eelf32ppcvxworks.c:788 eelf32ppcwindiss.c:810 eelf64lppc.c:1378
-#: eelf64lppc_fbsd.c:1378 eelf64ppc.c:1378 eelf64ppc_fbsd.c:1378
+#: eelf32lppc.c:824 eelf32lppclinux.c:824 eelf32lppcnto.c:824
+#: eelf32lppcsim.c:824 eelf32ppc.c:824 eelf32ppc_fbsd.c:824
+#: eelf32ppchaiku.c:824 eelf32ppclinux.c:824 eelf32ppcnto.c:824
+#: eelf32ppcsim.c:824 eelf32ppcvxworks.c:802 eelf32ppcwindiss.c:824
+#: eelf64lppc.c:1401 eelf64lppc_fbsd.c:1401 eelf64ppc.c:1401
+#: eelf64ppc_fbsd.c:1401
#, c-format
msgid " --no-emit-stub-syms Don't label linker stubs with a symbol\n"
msgstr " --no-emit-stub-syms не мітити заглушки компонувальника Ñимволами\n"
-#: eelf32lppc.c:813 eelf32lppclinux.c:813 eelf32lppcnto.c:813
-#: eelf32lppcsim.c:813 eelf32ppc.c:813 eelf32ppc_fbsd.c:813
-#: eelf32ppclinux.c:813 eelf32ppcnto.c:813 eelf32ppcsim.c:813
-#: eelf32ppcvxworks.c:791 eelf32ppcwindiss.c:813 eelf64lppc.c:1398
-#: eelf64lppc_fbsd.c:1398 eelf64ppc.c:1398 eelf64ppc_fbsd.c:1398
+#: eelf32lppc.c:827 eelf32lppclinux.c:827 eelf32lppcnto.c:827
+#: eelf32lppcsim.c:827 eelf32ppc.c:827 eelf32ppc_fbsd.c:827
+#: eelf32ppchaiku.c:827 eelf32ppclinux.c:827 eelf32ppcnto.c:827
+#: eelf32ppcsim.c:827 eelf32ppcvxworks.c:805 eelf32ppcwindiss.c:827
+#: eelf64lppc.c:1421 eelf64lppc_fbsd.c:1421 eelf64ppc.c:1421
+#: eelf64ppc_fbsd.c:1421
#, c-format
msgid " --no-tls-optimize Don't try to optimize TLS accesses\n"
msgstr " --no-tls-optimize не намагатиÑÑ Ð¾Ð¿Ñ‚Ð¸Ð¼Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ доÑтупи до TLS\n"
-#: eelf32lppc.c:816 eelf32lppclinux.c:816 eelf32lppcnto.c:816
-#: eelf32lppcsim.c:816 eelf32ppc.c:816 eelf32ppc_fbsd.c:816
-#: eelf32ppclinux.c:816 eelf32ppcnto.c:816 eelf32ppcsim.c:816
-#: eelf32ppcvxworks.c:794 eelf32ppcwindiss.c:816 eelf64lppc.c:1404
-#: eelf64lppc_fbsd.c:1404 eelf64ppc.c:1404 eelf64ppc_fbsd.c:1404
+#: eelf32lppc.c:830 eelf32lppclinux.c:830 eelf32lppcnto.c:830
+#: eelf32lppcsim.c:830 eelf32ppc.c:830 eelf32ppc_fbsd.c:830
+#: eelf32ppchaiku.c:830 eelf32ppclinux.c:830 eelf32ppcnto.c:830
+#: eelf32ppcsim.c:830 eelf32ppcvxworks.c:808 eelf32ppcwindiss.c:830
+#: eelf64lppc.c:1427 eelf64lppc_fbsd.c:1427 eelf64ppc.c:1427
+#: eelf64ppc_fbsd.c:1427
#, c-format
msgid " --no-tls-get-addr-optimize Don't use a special __tls_get_addr call\n"
msgstr " --no-tls-get-addr-optimize не викориÑтовувати Ñпеціальний виклик __tls_get_addr\n"
-#: eelf32lppc.c:819 eelf32lppclinux.c:819 eelf32lppcnto.c:819
-#: eelf32lppcsim.c:819 eelf32ppc.c:819 eelf32ppc_fbsd.c:819
-#: eelf32ppclinux.c:819 eelf32ppcnto.c:819 eelf32ppcsim.c:819
-#: eelf32ppcwindiss.c:819
+#: eelf32lppc.c:833 eelf32lppclinux.c:833 eelf32lppcnto.c:833
+#: eelf32lppcsim.c:833 eelf32ppc.c:833 eelf32ppc_fbsd.c:833
+#: eelf32ppchaiku.c:833 eelf32ppclinux.c:833 eelf32ppcnto.c:833
+#: eelf32ppcsim.c:833 eelf32ppcwindiss.c:833
#, c-format
msgid " --secure-plt Use new-style PLT if possible\n"
msgstr " --secure-plt викориÑтовувати новий Ñтиль PLT, Ñкщо можна\n"
-#: eelf32lppc.c:822 eelf32lppclinux.c:822 eelf32lppcnto.c:822
-#: eelf32lppcsim.c:822 eelf32ppc.c:822 eelf32ppc_fbsd.c:822
-#: eelf32ppclinux.c:822 eelf32ppcnto.c:822 eelf32ppcsim.c:822
-#: eelf32ppcwindiss.c:822
+#: eelf32lppc.c:836 eelf32lppclinux.c:836 eelf32lppcnto.c:836
+#: eelf32lppcsim.c:836 eelf32ppc.c:836 eelf32ppc_fbsd.c:836
+#: eelf32ppchaiku.c:836 eelf32ppclinux.c:836 eelf32ppcnto.c:836
+#: eelf32ppcsim.c:836 eelf32ppcwindiss.c:836
#, c-format
msgid " --bss-plt Force old-style BSS PLT\n"
msgstr " --bss-plt примуÑово викориÑтовувати Ñтарий Ñтиль BSS PLT\n"
-#: eelf32lppc.c:825 eelf32lppclinux.c:825 eelf32lppcnto.c:825
-#: eelf32lppcsim.c:825 eelf32ppc.c:825 eelf32ppc_fbsd.c:825
-#: eelf32ppclinux.c:825 eelf32ppcnto.c:825 eelf32ppcsim.c:825
-#: eelf32ppcwindiss.c:825
+#: eelf32lppc.c:839 eelf32lppclinux.c:839 eelf32lppcnto.c:839
+#: eelf32lppcsim.c:839 eelf32ppc.c:839 eelf32ppc_fbsd.c:839
+#: eelf32ppchaiku.c:839 eelf32ppclinux.c:839 eelf32ppcnto.c:839
+#: eelf32ppcsim.c:839 eelf32ppcwindiss.c:839
#, c-format
msgid " --plt-align Align PLT call stubs to fit cache lines\n"
msgstr " --plt-align вирівнÑти фіктивні виклики PLT за Ñ€Ñдками кешу\n"
-#: eelf32lppc.c:828 eelf32lppclinux.c:828 eelf32lppcnto.c:828
-#: eelf32lppcsim.c:828 eelf32ppc.c:828 eelf32ppc_fbsd.c:828
-#: eelf32ppclinux.c:828 eelf32ppcnto.c:828 eelf32ppcsim.c:828
-#: eelf32ppcwindiss.c:828 eelf64lppc.c:1357 eelf64lppc_fbsd.c:1357
-#: eelf64ppc.c:1357 eelf64ppc_fbsd.c:1357
+#: eelf32lppc.c:842 eelf32lppclinux.c:842 eelf32lppcnto.c:842
+#: eelf32lppcsim.c:842 eelf32ppc.c:842 eelf32ppc_fbsd.c:842
+#: eelf32ppchaiku.c:842 eelf32ppclinux.c:842 eelf32ppcnto.c:842
+#: eelf32ppcsim.c:842 eelf32ppcwindiss.c:842 eelf64lppc.c:1380
+#: eelf64lppc_fbsd.c:1380 eelf64ppc.c:1380 eelf64ppc_fbsd.c:1380
#, c-format
msgid " --no-plt-align Dont't align individual PLT call stubs\n"
msgstr " --no-plt-align не вирівнювати окремі заглушки викликів PLT\n"
-#: eelf32lppc.c:831 eelf32lppclinux.c:831 eelf32lppcnto.c:831
-#: eelf32lppcsim.c:831 eelf32ppc.c:831 eelf32ppc_fbsd.c:831
-#: eelf32ppclinux.c:831 eelf32ppcnto.c:831 eelf32ppcsim.c:831
-#: eelf32ppcwindiss.c:831 eelf64lppc.c:1416 eelf64lppc_fbsd.c:1416
-#: eelf64ppc.c:1416 eelf64ppc_fbsd.c:1416
+#: eelf32lppc.c:845 eelf32lppclinux.c:845 eelf32lppcnto.c:845
+#: eelf32lppcsim.c:845 eelf32ppc.c:845 eelf32ppc_fbsd.c:845
+#: eelf32ppchaiku.c:845 eelf32ppclinux.c:845 eelf32ppcnto.c:845
+#: eelf32ppcsim.c:845 eelf32ppcwindiss.c:845 eelf64lppc.c:1439
+#: eelf64lppc_fbsd.c:1439 eelf64ppc.c:1439 eelf64ppc_fbsd.c:1439
#, c-format
msgid " --no-inline-optimize Don't convert inline PLT to direct calls\n"
msgstr " --no-inline-optimize не перетворювати вбудовані PLT на безпоÑередні виклики\n"
-#: eelf32lppc.c:834 eelf32lppclinux.c:834 eelf32lppcnto.c:834
-#: eelf32lppcsim.c:834 eelf32ppc.c:834 eelf32ppc_fbsd.c:834
-#: eelf32ppclinux.c:834 eelf32ppcnto.c:834 eelf32ppcsim.c:834
-#: eelf32ppcwindiss.c:834
+#: eelf32lppc.c:848 eelf32lppclinux.c:848 eelf32lppcnto.c:848
+#: eelf32lppcsim.c:848 eelf32ppc.c:848 eelf32ppc_fbsd.c:848
+#: eelf32ppchaiku.c:848 eelf32ppclinux.c:848 eelf32ppcnto.c:848
+#: eelf32ppcsim.c:848 eelf32ppcwindiss.c:848
#, c-format
msgid " --sdata-got Force GOT location just before .sdata\n"
msgstr " --sdata-got примуÑово вÑтановити Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ GOT одразу перед .sdata\n"
-#: eelf32lppc.c:837 eelf32lppclinux.c:837 eelf32lppcnto.c:837
-#: eelf32lppcsim.c:837 eelf32ppc.c:837 eelf32ppc_fbsd.c:837
-#: eelf32ppclinux.c:837 eelf32ppcnto.c:837 eelf32ppcsim.c:837
-#: eelf32ppcvxworks.c:797 eelf32ppcwindiss.c:837
+#: eelf32lppc.c:851 eelf32lppclinux.c:851 eelf32lppcnto.c:851
+#: eelf32lppcsim.c:851 eelf32ppc.c:851 eelf32ppc_fbsd.c:851
+#: eelf32ppchaiku.c:851 eelf32ppclinux.c:851 eelf32ppcnto.c:851
+#: eelf32ppcsim.c:851 eelf32ppcvxworks.c:811 eelf32ppcwindiss.c:851
#, c-format
msgid ""
" --ppc476-workaround [=pagesize]\n"
@@ -5262,38 +5362,38 @@ msgstr ""
" --ppc476-workaround [=розмір_Ñторінки]\n"
" обійти ваду кешу у ppc476\n"
-#: eelf32lppc.c:841 eelf32lppclinux.c:841 eelf32lppcnto.c:841
-#: eelf32lppcsim.c:841 eelf32ppc.c:841 eelf32ppc_fbsd.c:841
-#: eelf32ppclinux.c:841 eelf32ppcnto.c:841 eelf32ppcsim.c:841
-#: eelf32ppcvxworks.c:801 eelf32ppcwindiss.c:841
+#: eelf32lppc.c:855 eelf32lppclinux.c:855 eelf32lppcnto.c:855
+#: eelf32lppcsim.c:855 eelf32ppc.c:855 eelf32ppc_fbsd.c:855
+#: eelf32ppchaiku.c:855 eelf32ppclinux.c:855 eelf32ppcnto.c:855
+#: eelf32ppcsim.c:855 eelf32ppcvxworks.c:815 eelf32ppcwindiss.c:855
#, c-format
msgid " --no-ppc476-workaround Disable workaround\n"
msgstr " --no-ppc476-workaround вимкнути обхідний маневр\n"
-#: eelf32lppc.c:844 eelf32lppclinux.c:844 eelf32lppcnto.c:844
-#: eelf32lppcsim.c:844 eelf32ppc.c:844 eelf32ppc_fbsd.c:844
-#: eelf32ppclinux.c:844 eelf32ppcnto.c:844 eelf32ppcsim.c:844
-#: eelf32ppcvxworks.c:804 eelf32ppcwindiss.c:844
+#: eelf32lppc.c:858 eelf32lppclinux.c:858 eelf32lppcnto.c:858
+#: eelf32lppcsim.c:858 eelf32ppc.c:858 eelf32ppc_fbsd.c:858
+#: eelf32ppchaiku.c:858 eelf32ppclinux.c:858 eelf32ppcnto.c:858
+#: eelf32ppcsim.c:858 eelf32ppcvxworks.c:818 eelf32ppcwindiss.c:858
#, c-format
msgid " --no-pic-fixup Don't edit non-pic to pic\n"
msgstr " --no-pic-fixup не редагувати не-pic Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð½Ð° pic\n"
-#: eelf32lppc.c:847 eelf32lppclinux.c:847 eelf32lppcnto.c:847
-#: eelf32lppcsim.c:847 eelf32ppc.c:847 eelf32ppc_fbsd.c:847
-#: eelf32ppclinux.c:847 eelf32ppcnto.c:847 eelf32ppcsim.c:847
-#: eelf32ppcvxworks.c:807 eelf32ppcwindiss.c:847
+#: eelf32lppc.c:861 eelf32lppclinux.c:861 eelf32lppcnto.c:861
+#: eelf32lppcsim.c:861 eelf32ppc.c:861 eelf32ppc_fbsd.c:861
+#: eelf32ppchaiku.c:861 eelf32ppclinux.c:861 eelf32ppcnto.c:861
+#: eelf32ppcsim.c:861 eelf32ppcvxworks.c:821 eelf32ppcwindiss.c:861
#, c-format
msgid " --vle-reloc-fixup Correct old object file 16A/16D relocation\n"
msgstr " --vle-reloc-fixup виправити переÑÑƒÐ²Ð°Ð½Ð½Ñ 16A/16D у заÑтарілих об'єктних файлах\n"
-#: eelf32mcore.c:304
+#: eelf32mcore.c:306
#, c-format
msgid " --base_file <basefile> Generate a base file for relocatable DLLs\n"
msgstr " --base_file <базовий файл> Ñтворити оÑновний файл Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð¸Ñ… до переÑÑƒÐ²Ð°Ð½Ð½Ñ DLL\n"
-#: eelf32metag.c:717 eelf64lppc.c:1332 eelf64lppc_fbsd.c:1332 eelf64ppc.c:1332
-#: eelf64ppc_fbsd.c:1332 ehppaelf.c:577 ehppalinux.c:759 ehppanbsd.c:759
-#: ehppaobsd.c:759
+#: eelf32metag.c:719 eelf64lppc.c:1355 eelf64lppc_fbsd.c:1355 eelf64ppc.c:1355
+#: eelf64ppc_fbsd.c:1355 ehppaelf.c:579 ehppalinux.c:761 ehppanbsd.c:761
+#: ehppaobsd.c:761
#, c-format
msgid ""
" --stub-group-size=N Maximum size of a group of input sections that\n"
@@ -5314,7 +5414,7 @@ msgstr ""
" Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ +/-1 вказуватимуть на те, що заÑіб компонуваннÑ\n"
" має вибрати відповідні типові параметри.\n"
-#: eelf32rx.c:336
+#: eelf32rx.c:338
#, c-format
msgid ""
" --no-flag-mismatch-warnings Don't warn about objects with incompatible\n"
@@ -5323,7 +5423,7 @@ msgstr ""
" --no-flag-mismatch-warnings не попереджати щодо об'єктів із неÑуміÑними\n"
" параметрами порÑдку байтів або dsp\n"
-#: eelf32rx.c:338
+#: eelf32rx.c:340
#, c-format
msgid ""
" --flag-mismatch-warnings Warn about objects with incompatible\n"
@@ -5332,7 +5432,7 @@ msgstr ""
" --flag-mismatch-warnings попереджати щодо об'єктів із неÑуміÑними параметрами\n"
" порÑдку байтів, dsp або ABI\n"
-#: eelf32rx.c:340
+#: eelf32rx.c:342
#, c-format
msgid ""
" --ignore-lma Ignore segment LMAs [default]\n"
@@ -5341,7 +5441,7 @@ msgstr ""
" --ignore-lma ігнорувати LMA Ñегментів [типова поведінка]\n"
" (Ð´Ð»Ñ ÑуміÑноÑÑ‚Ñ– із Renesas Tools)\n"
-#: eelf32rx.c:342
+#: eelf32rx.c:344
#, c-format
msgid " --no-ignore-lma Don't ignore segment LMAs\n"
msgstr " --no-ignore-lma не ігнорувати LMA Ñегментів\n"
@@ -5402,7 +5502,7 @@ msgstr "%F%P: не вдалоÑÑ Ñтворити розділ .xtensa.info\n"
msgid "%F%P: Relaxation not supported with --enable-non-contiguous-regions.\n"
msgstr "%F%P: підтримки оптимізації разом із --enable-non-contiguous-regions не передбачено.\n"
-#: eelf32xtensa.c:2396
+#: eelf32xtensa.c:2398
#, c-format
msgid ""
" --size-opt When relaxing longcalls, prefer size\n"
@@ -5411,12 +5511,12 @@ msgstr ""
" --size-opt при оптимізації довгих викликів надавати перевагу\n"
" оптимізації над вирівнюваннÑм гілок\n"
-#: eelf32xtensa.c:2399
+#: eelf32xtensa.c:2401
#, c-format
msgid " --abi-windowed Choose windowed ABI for the output object\n"
msgstr " --abi-windowed вибрати віконний двійковий Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð´Ð»Ñ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð¾Ð³Ð¾ об'єкта\n"
-#: eelf32xtensa.c:2401
+#: eelf32xtensa.c:2403
#, c-format
msgid " --abi-call0 Choose call0 ABI for the output object\n"
msgstr " --abi-call0 вибрати двійковий Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ call0 Ð´Ð»Ñ Ð¾Ð±'єкта результату\n"
@@ -5425,7 +5525,7 @@ msgstr " --abi-call0 вибрати двійковий інте
msgid "%F%P: %pB: Instruction sets of object files incompatible\n"
msgstr "%F%P: %pB: набори інÑтрукцій об'єктних файлів Ñ” неÑуміÑними\n"
-#: eelf64_ia64.c:490 eelf64_ia64_fbsd.c:490
+#: eelf64_ia64.c:492 eelf64_ia64_fbsd.c:492
#, c-format
msgid " --itanium Generate code for Intel Itanium processor\n"
msgstr " --itanium Ñтворювати код Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑора Intel Itanium\n"
@@ -5435,12 +5535,12 @@ msgstr " --itanium Ñтворювати код Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñ
msgid "%F%P: can not init BFD: %E\n"
msgstr "%F%P: не вдалоÑÑ Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ BFD: %E\n"
-#: eelf64_s390.c:533
+#: eelf64_s390.c:535
#, c-format
msgid " --s390-pgste Tell the kernel to allocate 4k page tables\n"
msgstr " --s390-pgste наказати Ñдру розміщувати дані за таблицÑми 4-кілобайтових Ñторінок\n"
-#: eelf64alpha.c:562 eelf64alpha_fbsd.c:562 eelf64alpha_nbsd.c:562
+#: eelf64alpha.c:564 eelf64alpha_fbsd.c:564 eelf64alpha_nbsd.c:564
#, c-format
msgid ""
" --taso Load executable in the lower 31-bit addressable\n"
@@ -5449,12 +5549,12 @@ msgstr ""
" --taso завантажити виконуваний файл у нижній діапазон\n"
" 31-бітових віртуальних адреÑ\n"
-#: eelf64alpha.c:565 eelf64alpha_fbsd.c:565 eelf64alpha_nbsd.c:565
+#: eelf64alpha.c:567 eelf64alpha_fbsd.c:567 eelf64alpha_nbsd.c:567
#, c-format
msgid " --secureplt Force PLT in text segment\n"
msgstr " --secureplt примуÑове PLT у Ñегменті текÑту\n"
-#: eelf64alpha.c:567 eelf64alpha_fbsd.c:567 eelf64alpha_nbsd.c:567
+#: eelf64alpha.c:569 eelf64alpha_fbsd.c:569 eelf64alpha_nbsd.c:569
#, c-format
msgid " --no-secureplt Force PLT in data segment\n"
msgstr " --no-secureplt примуÑове PLT у Ñегменті даних\n"
@@ -5473,71 +5573,71 @@ msgstr "%X%P: Ñкрипт ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ñ–Ð´Ð¾ÐºÑ€ÐµÐ¼Ð»ÑŽÑ” .got
msgid "%P: .init/.fini fragments use differing TOC pointers\n"
msgstr "%P: фрагменти .init/.fini викориÑтовують різні вказівники TOC\n"
-#: eelf64lppc.c:1224 eelf64lppc_fbsd.c:1224 eelf64ppc.c:1224
-#: eelf64ppc_fbsd.c:1224
+#: eelf64lppc.c:1242 eelf64lppc_fbsd.c:1242 eelf64ppc.c:1242
+#: eelf64ppc_fbsd.c:1242
msgid "%F%P: invalid --power10-stubs argument `%s'\n"
msgstr "%F%P: некоректний аргумент --power10-stubs «%s»\n"
-#: eelf64lppc.c:1342 eelf64ppc.c:1342
+#: eelf64lppc.c:1365 eelf64ppc.c:1365
#, c-format
msgid " --plt-static-chain PLT call stubs should load r11 (default)\n"
msgstr " --plt-static-chain заглушки викликів PLT мають завантажувати r11 (типово)\n"
-#: eelf64lppc.c:1345 eelf64ppc.c:1345
+#: eelf64lppc.c:1368 eelf64ppc.c:1368
#, c-format
msgid " --no-plt-static-chain PLT call stubs should not load r11\n"
msgstr " --no-plt-static-chain заглушки викликів PLT не повинні завантажувати r11\n"
-#: eelf64lppc.c:1348 eelf64lppc_fbsd.c:1348 eelf64ppc.c:1348
-#: eelf64ppc_fbsd.c:1348
+#: eelf64lppc.c:1371 eelf64lppc_fbsd.c:1371 eelf64ppc.c:1371
+#: eelf64ppc_fbsd.c:1371
#, c-format
msgid " --plt-thread-safe PLT call stubs with load-load barrier\n"
msgstr " --plt-thread-safe заглушки викликів PLT із бар'єром навантаженнÑ-навантаженнÑ\n"
-#: eelf64lppc.c:1351 eelf64lppc_fbsd.c:1351 eelf64ppc.c:1351
-#: eelf64ppc_fbsd.c:1351
+#: eelf64lppc.c:1374 eelf64lppc_fbsd.c:1374 eelf64ppc.c:1374
+#: eelf64ppc_fbsd.c:1374
#, c-format
msgid " --no-plt-thread-safe PLT call stubs without barrier\n"
msgstr " --no-plt-thread-safe заглушки викликів PLT без бар'єра\n"
-#: eelf64lppc.c:1354 eelf64lppc_fbsd.c:1354 eelf64ppc.c:1354
-#: eelf64ppc_fbsd.c:1354
+#: eelf64lppc.c:1377 eelf64lppc_fbsd.c:1377 eelf64ppc.c:1377
+#: eelf64ppc_fbsd.c:1377
#, c-format
msgid " --plt-align [=<align>] Align PLT call stubs to fit cache lines\n"
msgstr " --plt-align [=<вирівнюваннÑ>] вирівнÑти фіктивні виклики PLT за Ñ€Ñдками кешу\n"
-#: eelf64lppc.c:1360 eelf64lppc_fbsd.c:1360 eelf64ppc.c:1360
-#: eelf64ppc_fbsd.c:1360
+#: eelf64lppc.c:1383 eelf64lppc_fbsd.c:1383 eelf64ppc.c:1383
+#: eelf64ppc_fbsd.c:1383
#, c-format
msgid " --plt-localentry Optimize calls to ELFv2 localentry:0 functions\n"
msgstr " --plt-localentry оптимізувати виклики до функцій localentry:0 ELFv2\n"
-#: eelf64lppc.c:1363 eelf64lppc_fbsd.c:1363 eelf64ppc.c:1363
-#: eelf64ppc_fbsd.c:1363
+#: eelf64lppc.c:1386 eelf64lppc_fbsd.c:1386 eelf64ppc.c:1386
+#: eelf64ppc_fbsd.c:1386
#, c-format
msgid " --no-plt-localentry Don't optimize ELFv2 calls\n"
msgstr " --no-plt-localentry не оптимізувати виклики ELFv2\n"
-#: eelf64lppc.c:1366 eelf64lppc_fbsd.c:1366 eelf64ppc.c:1366
-#: eelf64ppc_fbsd.c:1366
+#: eelf64lppc.c:1389 eelf64lppc_fbsd.c:1389 eelf64ppc.c:1389
+#: eelf64ppc_fbsd.c:1389
#, c-format
msgid " --power10-stubs [=auto] Use Power10 PLT call stubs (default auto)\n"
msgstr " --power10-stubs [=auto] викориÑтовувати фіктивні виклики PLT Power10 (типове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ â€” auto)\n"
-#: eelf64lppc.c:1369 eelf64lppc_fbsd.c:1369 eelf64ppc.c:1369
-#: eelf64ppc_fbsd.c:1369
+#: eelf64lppc.c:1392 eelf64lppc_fbsd.c:1392 eelf64ppc.c:1392
+#: eelf64ppc_fbsd.c:1392
#, c-format
msgid " --no-pcrel-optimize Don't perform R_PPC64_PCREL_OPT optimization\n"
msgstr " --no-pcrel-optimize не виконувати оптимізацію R_PPC64_PCREL_OPT\n"
-#: eelf64lppc.c:1372 eelf64lppc_fbsd.c:1372 eelf64ppc.c:1372
-#: eelf64ppc_fbsd.c:1372
+#: eelf64lppc.c:1395 eelf64lppc_fbsd.c:1395 eelf64ppc.c:1395
+#: eelf64ppc_fbsd.c:1395
#, c-format
msgid " --no-power10-stubs Don't use Power10 PLT call stubs\n"
msgstr " --no-power10-stubs не викориÑтовувати фіктивні виклики PLT Power10\n"
-#: eelf64lppc.c:1381 eelf64lppc_fbsd.c:1381 eelf64ppc.c:1381
-#: eelf64ppc_fbsd.c:1381
+#: eelf64lppc.c:1404 eelf64lppc_fbsd.c:1404 eelf64ppc.c:1404
+#: eelf64ppc_fbsd.c:1404
#, c-format
msgid ""
" --dotsyms For every version pattern \"foo\" in a version\n"
@@ -5550,14 +5650,14 @@ msgstr ""
" коду функції оброблÑлиÑÑ Ñ‚Ð°Ðº Ñамо, Ñк Ñимволи\n"
" деÑкрипторів функції. Типово увімкнено.\n"
-#: eelf64lppc.c:1387 eelf64lppc_fbsd.c:1387 eelf64ppc.c:1387
-#: eelf64ppc_fbsd.c:1387
+#: eelf64lppc.c:1410 eelf64lppc_fbsd.c:1410 eelf64ppc.c:1410
+#: eelf64ppc_fbsd.c:1410
#, c-format
msgid " --no-dotsyms Don't do anything special in version scripts\n"
msgstr " --no-dotsyms не робити нічого оÑобливого у Ñкриптах верÑÑ–Ñ—\n"
-#: eelf64lppc.c:1390 eelf64lppc_fbsd.c:1390 eelf64ppc.c:1390
-#: eelf64ppc_fbsd.c:1390
+#: eelf64lppc.c:1413 eelf64lppc_fbsd.c:1413 eelf64ppc.c:1413
+#: eelf64ppc_fbsd.c:1413
#, c-format
msgid ""
" --save-restore-funcs Provide register save and restore routines used\n"
@@ -5568,56 +5668,56 @@ msgstr ""
" Ñкі викориÑтовувалиÑÑ ÐºÐ¾Ð´Ð¾Ð¼ gcc -Os. Типово увімкнено длÑ\n"
" звичайного оÑтаточного компонуваннÑ, вимкнено Ð´Ð»Ñ ld -r.\n"
-#: eelf64lppc.c:1395 eelf64lppc_fbsd.c:1395 eelf64ppc.c:1395
-#: eelf64ppc_fbsd.c:1395
+#: eelf64lppc.c:1418 eelf64lppc_fbsd.c:1418 eelf64ppc.c:1418
+#: eelf64ppc_fbsd.c:1418
#, c-format
msgid " --no-save-restore-funcs Don't provide these routines\n"
msgstr " --no-save-restore-funcs не надавати ці підпрограми\n"
-#: eelf64lppc.c:1401 eelf64lppc_fbsd.c:1401 eelf64ppc.c:1401
-#: eelf64ppc_fbsd.c:1401
+#: eelf64lppc.c:1424 eelf64lppc_fbsd.c:1424 eelf64ppc.c:1424
+#: eelf64ppc_fbsd.c:1424
#, c-format
msgid " --tls-get-addr-optimize Force use of special __tls_get_addr call\n"
msgstr " --tls-get-addr-optimize примуÑово викориÑтовувати оÑобливий виклик __tls_get_addr\n"
-#: eelf64lppc.c:1407 eelf64lppc_fbsd.c:1407 eelf64ppc.c:1407
-#: eelf64ppc_fbsd.c:1407
+#: eelf64lppc.c:1430 eelf64lppc_fbsd.c:1430 eelf64ppc.c:1430
+#: eelf64ppc_fbsd.c:1430
#, c-format
msgid " --tls-get-addr-regsave Force register save __tls_get_addr stub\n"
msgstr " --tls-get-addr-regsave примуÑово викориÑтовувати Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ Ñƒ регіÑтрах фіктивної __tls_get_addr\n"
-#: eelf64lppc.c:1410 eelf64lppc_fbsd.c:1410 eelf64ppc.c:1410
-#: eelf64ppc_fbsd.c:1410
+#: eelf64lppc.c:1433 eelf64lppc_fbsd.c:1433 eelf64ppc.c:1433
+#: eelf64ppc_fbsd.c:1433
#, c-format
msgid " --no-tls-get-addr-regsave Don't use register save __tls_get_addr stub\n"
msgstr " --no-tls-get-addr-regsave не викориÑтовувати Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ Ñƒ регіÑтрах фіктивної __tls_get_addr\n"
-#: eelf64lppc.c:1413 eelf64lppc_fbsd.c:1413 eelf64ppc.c:1413
-#: eelf64ppc_fbsd.c:1413
+#: eelf64lppc.c:1436 eelf64lppc_fbsd.c:1436 eelf64ppc.c:1436
+#: eelf64ppc_fbsd.c:1436
#, c-format
msgid " --no-opd-optimize Don't optimize the OPD section\n"
msgstr " --no-opd-optimize не оптимізувати розділ OPD\n"
-#: eelf64lppc.c:1419 eelf64lppc_fbsd.c:1419 eelf64ppc.c:1419
-#: eelf64ppc_fbsd.c:1419
+#: eelf64lppc.c:1442 eelf64lppc_fbsd.c:1442 eelf64ppc.c:1442
+#: eelf64ppc_fbsd.c:1442
#, c-format
msgid " --no-toc-optimize Don't optimize the TOC section\n"
msgstr " --no-toc-optimize не оптимізувати розділ TOC\n"
-#: eelf64lppc.c:1422 eelf64lppc_fbsd.c:1422 eelf64ppc.c:1422
-#: eelf64ppc_fbsd.c:1422
+#: eelf64lppc.c:1445 eelf64lppc_fbsd.c:1445 eelf64ppc.c:1445
+#: eelf64ppc_fbsd.c:1445
#, c-format
msgid " --no-multi-toc Disallow automatic multiple toc sections\n"
msgstr " --no-multi-toc заборонити автоматичне ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð´ÐµÐºÑ–Ð»ÑŒÐºÐ¾Ñ… розділів toc\n"
-#: eelf64lppc.c:1425 eelf64lppc_fbsd.c:1425 eelf64ppc.c:1425
-#: eelf64ppc_fbsd.c:1425
+#: eelf64lppc.c:1448 eelf64lppc_fbsd.c:1448 eelf64ppc.c:1448
+#: eelf64ppc_fbsd.c:1448
#, c-format
msgid " --no-toc-sort Don't sort TOC and GOT sections\n"
msgstr " --no-toc-sort не упорÑдковувати розділи TOC Ñ– GOT\n"
-#: eelf64lppc.c:1428 eelf64lppc_fbsd.c:1428 eelf64ppc.c:1428
-#: eelf64ppc_fbsd.c:1428
+#: eelf64lppc.c:1451 eelf64lppc_fbsd.c:1451 eelf64ppc.c:1451
+#: eelf64ppc_fbsd.c:1451
#, c-format
msgid ""
" --non-overlapping-opd Canonicalize .opd, so that there are no\n"
@@ -5626,12 +5726,12 @@ msgstr ""
" --non-overlapping-opd перетворити .opd на канонічну форму так,\n"
" щоб не було перекриттів запиÑів .opd\n"
-#: eelf64lppc_fbsd.c:1342 eelf64ppc_fbsd.c:1342
+#: eelf64lppc_fbsd.c:1365 eelf64ppc_fbsd.c:1365
#, c-format
msgid " --plt-static-chain PLT call stubs should load r111\n"
msgstr " --plt-static-chain заглушки викликів PLT мають завантажувати r11\n"
-#: eelf64lppc_fbsd.c:1345 eelf64ppc_fbsd.c:1345
+#: eelf64lppc_fbsd.c:1368 eelf64ppc_fbsd.c:1368
#, c-format
msgid " --no-plt-static-chain PLT call stubs should not load r11 (default)\n"
msgstr " --no-plt-static-chain заглушки викликів PLT не мають завантажувати r11 (типово)\n"
@@ -5649,29 +5749,29 @@ msgstr "%X%P: забагато загальних регіÑтрів: %u, мак
msgid "%F%P: can't finalize linker-allocated global registers\n"
msgstr "%F%P: не вдалоÑÑ Ð·Ð°Ð²ÐµÑ€ÑˆÐ¸Ñ‚Ð¸ обробку розподілених компонувальником загальних регіÑтрів\n"
-#: eelf_x86_64.c:5608 eelf_x86_64_cloudabi.c:573 eelf_x86_64_fbsd.c:573
-#: eelf_x86_64_sol2.c:705
+#: eelf_x86_64.c:5636 eelf_x86_64_cloudabi.c:579 eelf_x86_64_fbsd.c:579
+#: eelf_x86_64_haiku.c:579 eelf_x86_64_sol2.c:711
msgid "%F%P: invalid option for -z lam-u48-report=: %s\n"
msgstr "%F%P: некоректний параметр Ð´Ð»Ñ -z lam-u48-report=: %s\n"
-#: eelf_x86_64.c:5622 eelf_x86_64_cloudabi.c:587 eelf_x86_64_fbsd.c:587
-#: eelf_x86_64_sol2.c:719
+#: eelf_x86_64.c:5650 eelf_x86_64_cloudabi.c:593 eelf_x86_64_fbsd.c:593
+#: eelf_x86_64_haiku.c:593 eelf_x86_64_sol2.c:725
msgid "%F%P: invalid option for -z lam-u57-report=: %s\n"
msgstr "%F%P: некоректний параметр Ð´Ð»Ñ -z lam-u57-report=: %s\n"
-#: eelf_x86_64.c:5643 eelf_x86_64_cloudabi.c:608 eelf_x86_64_fbsd.c:608
-#: eelf_x86_64_sol2.c:740
+#: eelf_x86_64.c:5671 eelf_x86_64_cloudabi.c:614 eelf_x86_64_fbsd.c:614
+#: eelf_x86_64_haiku.c:614 eelf_x86_64_sol2.c:746
msgid "%F%P: invalid option for -z lam-report=: %s\n"
msgstr "%F%P: некоректний параметр Ð´Ð»Ñ -z lam-report=: %s\n"
-#: eelf_x86_64.c:5712 eelf_x86_64_cloudabi.c:677 eelf_x86_64_fbsd.c:677
-#: eelf_x86_64_sol2.c:809
+#: eelf_x86_64.c:5749 eelf_x86_64_cloudabi.c:692 eelf_x86_64_fbsd.c:692
+#: eelf_x86_64_haiku.c:692 eelf_x86_64_sol2.c:824
#, c-format
msgid " -z lam-u48 Generate GNU_PROPERTY_X86_FEATURE_1_LAM_U48\n"
msgstr " -z lam-u48 Ñтворити GNU_PROPERTY_X86_FEATURE_1_LAM_U48\n"
-#: eelf_x86_64.c:5714 eelf_x86_64_cloudabi.c:679 eelf_x86_64_fbsd.c:679
-#: eelf_x86_64_sol2.c:811
+#: eelf_x86_64.c:5751 eelf_x86_64_cloudabi.c:694 eelf_x86_64_fbsd.c:694
+#: eelf_x86_64_haiku.c:694 eelf_x86_64_sol2.c:826
#, c-format
msgid ""
" -z lam-u48-report=[none|warning|error] (default: none)\n"
@@ -5680,14 +5780,14 @@ msgstr ""
" -z lam-u48-report=[none|warning|error] (типове значеннÑ: none)\n"
" ПовідомлÑти про пропущену влаÑтивіÑÑ‚ÑŒ LAM_U48\n"
-#: eelf_x86_64.c:5717 eelf_x86_64_cloudabi.c:682 eelf_x86_64_fbsd.c:682
-#: eelf_x86_64_sol2.c:814
+#: eelf_x86_64.c:5754 eelf_x86_64_cloudabi.c:697 eelf_x86_64_fbsd.c:697
+#: eelf_x86_64_haiku.c:697 eelf_x86_64_sol2.c:829
#, c-format
msgid " -z lam-u57 Generate GNU_PROPERTY_X86_FEATURE_1_LAM_U57\n"
msgstr " -z lam-u57 Ñтворити GNU_PROPERTY_X86_FEATURE_1_LAM_U57\n"
-#: eelf_x86_64.c:5719 eelf_x86_64_cloudabi.c:684 eelf_x86_64_fbsd.c:684
-#: eelf_x86_64_sol2.c:816
+#: eelf_x86_64.c:5756 eelf_x86_64_cloudabi.c:699 eelf_x86_64_fbsd.c:699
+#: eelf_x86_64_haiku.c:699 eelf_x86_64_sol2.c:831
#, c-format
msgid ""
" -z lam-u57-report=[none|warning|error] (default: none)\n"
@@ -5696,8 +5796,8 @@ msgstr ""
" -z lam-u57-report=[none|warning|error] (типове значеннÑ: none)\n"
" ПовідомлÑти про пропущену влаÑтивіÑÑ‚ÑŒ LAM_U57\n"
-#: eelf_x86_64.c:5722 eelf_x86_64_cloudabi.c:687 eelf_x86_64_fbsd.c:687
-#: eelf_x86_64_sol2.c:819
+#: eelf_x86_64.c:5759 eelf_x86_64_cloudabi.c:702 eelf_x86_64_fbsd.c:702
+#: eelf_x86_64_haiku.c:702 eelf_x86_64_sol2.c:834
#, c-format
msgid ""
" -z lam-report=[none|warning|error] (default: none)\n"
@@ -5706,8 +5806,8 @@ msgstr ""
" -z lam-report=[none|warning|error] (типове значеннÑ: none)\n"
" ПовідомлÑти про пропущені влаÑтивоÑÑ‚Ñ– LAM_U48 Ñ– LAM_U57\n"
-#: eelf_x86_64.c:5726 eelf_x86_64_cloudabi.c:691 eelf_x86_64_fbsd.c:691
-#: eelf_x86_64_sol2.c:823
+#: eelf_x86_64.c:5768 eelf_x86_64_cloudabi.c:711 eelf_x86_64_fbsd.c:711
+#: eelf_x86_64_haiku.c:711 eelf_x86_64_sol2.c:843
#, c-format
msgid " -z bndplt Always generate BND prefix in PLT entries\n"
msgstr " -z bndplt завжди Ñтворювати Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ BND у запиÑах PLT\n"
@@ -5716,7 +5816,7 @@ msgstr " -z bndplt завжди Ñтворювати преф
msgid "%X%P: can not set gp\n"
msgstr "%X%P: не вдалоÑÑ Ð²Ñтановити gp\n"
-#: ehppaelf.c:573 ehppalinux.c:755 ehppanbsd.c:755 ehppaobsd.c:755
+#: ehppaelf.c:575 ehppalinux.c:757 ehppanbsd.c:757 ehppaobsd.c:757
#, c-format
msgid ""
" --multi-subspace Generate import and export stubs to support\n"
@@ -5838,7 +5938,7 @@ msgstr "%P: попередженнÑ: розмір облаÑÑ‚Ñ– пам'ÑÑ‚Ñ–
msgid "%X%P: changing output format whilst linking is not supported\n"
msgstr "%X%P: зміни формату Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ðµ передбачено\n"
-#: em68hc11elf.c:570 em68hc11elfb.c:570 em68hc12elf.c:570 em68hc12elfb.c:570
+#: em68hc11elf.c:572 em68hc11elfb.c:572 em68hc12elf.c:572 em68hc12elfb.c:572
#, c-format
msgid ""
" --no-trampoline Do not generate the far trampolines used to call\n"
@@ -5847,7 +5947,7 @@ msgstr ""
" --no-trampoline не Ñтворювати дальні трампліни, Ñкі викориÑтовуютьÑÑ\n"
" Ð´Ð»Ñ Ð²Ð¸ÐºÐ»Ð¸ÐºÑƒ далеких функцій за допомогою jsr або bsr\n"
-#: em68hc11elf.c:573 em68hc11elfb.c:573 em68hc12elf.c:573 em68hc12elfb.c:573
+#: em68hc11elf.c:575 em68hc11elfb.c:575 em68hc12elf.c:575 em68hc12elfb.c:575
#, c-format
msgid ""
" --bank-window NAME Specify the name of the memory region describing\n"
@@ -5860,11 +5960,11 @@ msgstr ""
msgid "%F%P: %pB: all input objects must be ELF for --embedded-relocs\n"
msgstr "%F%P: %pB: уÑÑ– вхідні об'єкти Ð´Ð»Ñ --embedded-relocs мають бути об'єктами ELF\n"
-#: em68kelf.c:616 em68kelfnbsd.c:616
+#: em68kelf.c:618 em68kelfnbsd.c:618
msgid "%P: unrecognized --got argument '%s'\n"
msgstr "%P: нерозпізнаний аргумент --got, «%s»\n"
-#: em68kelf.c:629 em68kelfnbsd.c:629
+#: em68kelf.c:631 em68kelfnbsd.c:631
#, c-format
msgid " --got=<type> Specify GOT handling scheme\n"
msgstr " --got=<тип> вказати Ñхему обробки GOT\n"
@@ -5938,48 +6038,48 @@ msgstr "%P: помилка: нерозпізнаний аргумент пара
msgid "%F%P: %pB: ABI version of object files mismatched\n"
msgstr "%F%P: %pB: невідповідніÑÑ‚ÑŒ верÑій ABI об'єктних файлів\n"
-#: ends32belf.c:404 ends32belf16m.c:404 ends32belf_linux.c:537 ends32elf.c:404
-#: ends32elf16m.c:404 ends32elf_linux.c:537
+#: ends32belf.c:406 ends32belf16m.c:406 ends32belf_linux.c:539 ends32elf.c:406
+#: ends32elf16m.c:406 ends32elf_linux.c:539
msgid "%P: --mbaseline is not used anymore\n"
msgstr "%P: --mbaseline більше не викориÑтовуєтьÑÑ\n"
-#: ends32belf.c:415 ends32belf16m.c:415 ends32belf_linux.c:548 ends32elf.c:415
-#: ends32elf16m.c:415 ends32elf_linux.c:548
+#: ends32belf.c:417 ends32belf16m.c:417 ends32belf_linux.c:550 ends32elf.c:417
+#: ends32elf16m.c:417 ends32elf_linux.c:550
msgid "%P: --relax-[no-]reduce-fp-updat is not used anymore\n"
msgstr "%P: --relax-[no-]reduce-fp-updat більше не викориÑтовуєтьÑÑ\n"
-#: ends32belf.c:419 ends32belf16m.c:419 ends32belf_linux.c:552 ends32elf.c:419
-#: ends32elf16m.c:419 ends32elf_linux.c:552
+#: ends32belf.c:421 ends32belf16m.c:421 ends32belf_linux.c:554 ends32elf.c:421
+#: ends32elf16m.c:421 ends32elf_linux.c:554
msgid "%P: missing file for --mexport-symbols\n"
msgstr "%P: пропущено файл Ð´Ð»Ñ --mexport-symbols\n"
-#: ends32belf.c:432 ends32belf.c:441 ends32belf16m.c:432 ends32belf16m.c:441
-#: ends32belf_linux.c:565 ends32belf_linux.c:574 ends32elf.c:432
-#: ends32elf.c:441 ends32elf16m.c:432 ends32elf16m.c:441 ends32elf_linux.c:565
-#: ends32elf_linux.c:574
+#: ends32belf.c:434 ends32belf.c:443 ends32belf16m.c:434 ends32belf16m.c:443
+#: ends32belf_linux.c:567 ends32belf_linux.c:576 ends32elf.c:434
+#: ends32elf.c:443 ends32elf16m.c:434 ends32elf16m.c:443 ends32elf_linux.c:567
+#: ends32elf_linux.c:576
msgid "%P: valid arguments to --mhyper-relax=(low|medium|high)\n"
msgstr "%P: коректні аргументи --mhyper-relax=(low|medium|high)\n"
-#: ends32belf.c:461 ends32belf16m.c:461 ends32belf_linux.c:594 ends32elf.c:461
-#: ends32elf16m.c:461 ends32elf_linux.c:594
+#: ends32belf.c:463 ends32belf16m.c:463 ends32belf_linux.c:596 ends32elf.c:463
+#: ends32elf16m.c:463 ends32elf_linux.c:596
#, c-format
msgid " --m[no-]fp-as-gp Disable/enable fp-as-gp relaxation\n"
msgstr " --m[no-]fp-as-gp вимкнути або увімкнути оптимізацію fp-as-gp\n"
-#: ends32belf.c:463 ends32belf16m.c:463 ends32belf_linux.c:596 ends32elf.c:463
-#: ends32elf16m.c:463 ends32elf_linux.c:596
+#: ends32belf.c:465 ends32belf16m.c:465 ends32belf_linux.c:598 ends32elf.c:465
+#: ends32elf16m.c:465 ends32elf_linux.c:598
#, c-format
msgid " --mexport-symbols=FILE Exporting symbols in linker script\n"
msgstr " --mexport-symbols=ФÐЙЛ екÑпортувати Ñимволи до Ñкрипту заÑобу компонуваннÑ\n"
-#: ends32belf.c:465 ends32belf16m.c:465 ends32belf_linux.c:598 ends32elf.c:465
-#: ends32elf16m.c:465 ends32elf_linux.c:598
+#: ends32belf.c:467 ends32belf16m.c:467 ends32belf_linux.c:600 ends32elf.c:467
+#: ends32elf16m.c:467 ends32elf_linux.c:600
#, c-format
msgid " --mhyper-relax=level Adjust relax level (low|medium|high). default: medium\n"
msgstr " --mhyper-relax=рівень Скоригувати рівень оптимізації (low|medium|high). Типове значеннÑ: medium\n"
-#: ends32belf.c:467 ends32belf16m.c:467 ends32belf_linux.c:600 ends32elf.c:467
-#: ends32elf16m.c:467 ends32elf_linux.c:600
+#: ends32belf.c:469 ends32belf16m.c:469 ends32belf_linux.c:602 ends32elf.c:469
+#: ends32elf16m.c:469 ends32elf_linux.c:602
#, c-format
msgid " --m[no-]tlsdesc-trampoline Disable/enable TLS DESC trampoline\n"
msgstr " --m[no-]tlsdesc-trampoline Увімкнути або вимкнути трамплін DESC TLS\n"
@@ -6013,8 +6113,8 @@ msgstr " --format 0|1|2 вказати, Ñку верÑÑ–ÑŽ COFF Ñ
msgid "%F%P: invalid COFF format version %s\n"
msgstr "%F%P: некоректна верÑÑ–Ñ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ñƒ COFF, %s\n"
+#~ msgid "%P: cannot find %s\n"
+#~ msgstr "%P: не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ %s\n"
+
#~ msgid "%F%P: cannot link with CTF in %pB: %s\n"
#~ msgstr "%F%P: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ð· CTF у %pB неможливе: %s\n"
-
-#~ msgid "running: %s \"%s\" \"%s\" \"%s\" \"%s\"\n"
-#~ msgstr "виконуємо: %s \"%s\" \"%s\" \"%s\" \"%s\"\n"
diff --git a/ld/scripttempl/elf.sc b/ld/scripttempl/elf.sc
index a9a39ad402c..bf2268bb0ad 100644
--- a/ld/scripttempl/elf.sc
+++ b/ld/scripttempl/elf.sc
@@ -10,6 +10,7 @@
# empty.
# HAVE_NOINIT - Include a .noinit output section in the script.
# HAVE_PERSISTENT - Include a .persistent output section in the script.
+# HAVE_DT_RELR - Include a .relr.dyn output section in the script.
# SMALL_DATA_CTOR - .ctors contains small data.
# SMALL_DATA_DTOR - .dtors contains small data.
# DATA_ADDR - if end-of-text-plus-one-page isn't right for data start
@@ -520,6 +521,9 @@ emit_dyn()
fi
fi
rm -f ldscripts/dyntmp.$$
+ if test -n "${HAVE_DT_RELR}"; then
+ echo " .relr.dyn : { *(.relr.dyn) }"
+ fi
}
test -n "${NON_ALLOC_DYN}${SEPARATE_CODE}" || emit_dyn
diff --git a/ld/stamp-h.in b/ld/stamp-h.in
deleted file mode 100644
index 9788f70238c..00000000000
--- a/ld/stamp-h.in
+++ /dev/null
@@ -1 +0,0 @@
-timestamp
diff --git a/ld/testsuite/config/default.exp b/ld/testsuite/config/default.exp
index c988d5d2924..103b426bbd8 100644
--- a/ld/testsuite/config/default.exp
+++ b/ld/testsuite/config/default.exp
@@ -301,6 +301,14 @@ if ![info exists READELFFLAGS] then {
set READELFFLAGS {}
}
+if ![info exists SIZE] then {
+ set SIZE [findfile $base_dir/../binutils/size]
+}
+
+if ![info exists SIZEFLAGS] then {
+ set SIZEFLAGS ""
+}
+
if ![info exists ELFEDIT] then {
set ELFEDIT [findfile $base_dir/../binutils/elfedit]
}
@@ -313,6 +321,38 @@ if ![info exists LDFLAGS] then {
set LDFLAGS {}
}
+if { ![info exists DT_RELR_LDFLAGS] } then {
+ if { [supports_dt_relr] } then {
+ set DT_RELR_LDFLAGS "-z pack-relative-relocs"
+ } else {
+ set DT_RELR_LDFLAGS {}
+ }
+}
+
+if { ![info exists DT_RELR_CC_LDFLAGS] } then {
+ if { [supports_dt_relr] } then {
+ set DT_RELR_CC_LDFLAGS "-Wl,-z,pack-relative-relocs"
+ } else {
+ set DT_RELR_CC_LDFLAGS {}
+ }
+}
+
+if { ![info exists NO_DT_RELR_LDFLAGS] } then {
+ if { [supports_dt_relr] } then {
+ set NO_DT_RELR_LDFLAGS "-z nopack-relative-relocs"
+ } else {
+ set NO_DT_RELR_LDFLAGS {}
+ }
+}
+
+if { ![info exists NO_DT_RELR_CC_LDFLAGS] } then {
+ if { [supports_dt_relr] } then {
+ set NO_DT_RELR_CC_LDFLAGS "-Wl,-z,nopack-relative-relocs"
+ } else {
+ set NO_DT_RELR_CC_LDFLAGS {}
+ }
+}
+
# Set LD_CLASS to "64bit" for a 64-bit *host* linker.
if { ![info exists LD_CLASS] } then {
set REAL_LD [findfile $base_dir/.libs/ld-new .libs/ld-new $LD [transform ld]]
diff --git a/ld/testsuite/ld-cris/globsymw2.s b/ld/testsuite/ld-cris/globsymw2.s
index a9e11ffb900..e05f7b2a431 100644
--- a/ld/testsuite/ld-cris/globsymw2.s
+++ b/ld/testsuite/ld-cris/globsymw2.s
@@ -2,7 +2,7 @@
.stabn 162,0,0,0
;# A bit like globsymw1.s but containing a valid, working, stabs
;# symbol warning construct.
- .stabs "isatty is not implemented and will always fail",30,0,0,0
+ .stabs "isatty is not implemented, will always fail",30,0,0,0
.stabs "globsym1",1,0,0,0
.global globsym1
.type globsym1, @function
diff --git a/ld/testsuite/ld-cris/warn3.d b/ld/testsuite/ld-cris/warn3.d
index c01b6cb822e..8cd143565c5 100644
--- a/ld/testsuite/ld-cris/warn3.d
+++ b/ld/testsuite/ld-cris/warn3.d
@@ -4,7 +4,7 @@
#target: cris-*-*elf* cris-*-*aout*
#as: --em=crisaout
#ld: -mcrisaout
-#warning: warning: isatty is not implemented and will always fail$
+#warning: warning: isatty is not implemented, will always fail$
#objdump: -p
.*: file format a\.out-cris
#pass
diff --git a/ld/testsuite/ld-ctf/array-char-conflicting-1.c b/ld/testsuite/ld-ctf/array-char-conflicting-1.c
new file mode 100644
index 00000000000..a6736a8a114
--- /dev/null
+++ b/ld/testsuite/ld-ctf/array-char-conflicting-1.c
@@ -0,0 +1,9 @@
+typedef char *array[10];
+
+static array digits_names = {"zero", "one", "two", "three", "four",
+ "five", "six", "seven", "eight", "nine"};
+
+void *foo (void)
+{
+ return digits_names;
+}
diff --git a/ld/testsuite/ld-ctf/array-char-conflicting-2.c b/ld/testsuite/ld-ctf/array-char-conflicting-2.c
new file mode 100644
index 00000000000..1cc46f0a31b
--- /dev/null
+++ b/ld/testsuite/ld-ctf/array-char-conflicting-2.c
@@ -0,0 +1,9 @@
+typedef char *array[9];
+
+static array digits_names = {"one", "two", "three", "four",
+ "five", "six", "seven", "eight", "nine"};
+
+void *bar (void)
+{
+ return digits_names;
+}
diff --git a/ld/testsuite/ld-ctf/array-conflicted-ordering.d b/ld/testsuite/ld-ctf/array-conflicted-ordering.d
new file mode 100644
index 00000000000..a8bbc3dd65e
--- /dev/null
+++ b/ld/testsuite/ld-ctf/array-conflicted-ordering.d
@@ -0,0 +1,26 @@
+#as:
+#source: array-char-conflicting-1.c
+#source: array-char-conflicting-2.c
+#objdump: --ctf
+#cc: -fPIC
+#ld: -shared --ctf-variables --hash-style=sysv
+#name: Arrays (conflicted)
+
+.*: +file format .*
+
+Contents of CTF section .ctf:
+
+ Header:
+ Magic number: 0xdff2
+ Version: 4 \(CTF_VERSION_3\)
+#...
+ Variables:
+ digits_names -> .* \(kind 4\) char \*\[10\] .*
+#...
+ Header:
+#...
+ Parent name: .ctf
+#...
+ Variables:
+ digits_names -> .* \(kind 4\) char \*\[9\] .*
+#...
diff --git a/ld/testsuite/ld-ctf/array-extern.c b/ld/testsuite/ld-ctf/array-extern.c
new file mode 100644
index 00000000000..730ba5a7d81
--- /dev/null
+++ b/ld/testsuite/ld-ctf/array-extern.c
@@ -0,0 +1 @@
+extern char * digits_names[];
diff --git a/ld/testsuite/ld-ctf/array-extern.d b/ld/testsuite/ld-ctf/array-extern.d
new file mode 100644
index 00000000000..4c9ce784e6a
--- /dev/null
+++ b/ld/testsuite/ld-ctf/array-extern.d
@@ -0,0 +1,32 @@
+#as:
+#source: array-char.c
+#source: array-extern.c
+#objdump: --ctf
+#ld: -shared --ctf-variables --hash-style=sysv
+#name: Arrays (extern)
+
+.*: +file format .*
+
+Contents of CTF section .ctf:
+
+ Header:
+ Magic number: 0xdff2
+ Version: 4 \(CTF_VERSION_3\)
+#...
+ Data object section: .* \(0x[1-9a-f][0-9a-f]* bytes\)
+ Type section: .* \(0x44 bytes\)
+ String section: .*
+
+ Labels:
+
+ Data objects:
+ digits_names -> 0x[0-9a-f]*: \(kind 4\) char \*\[10\] .*
+
+ Function objects:
+
+ Variables:
+
+ Types:
+#...
+ 0x[0-9a-f]*: \(kind 4\) .*\[10\] \(size .*
+#...
diff --git a/ld/testsuite/ld-ctf/conflicting-typedefs.d b/ld/testsuite/ld-ctf/conflicting-typedefs.d
index 4ae8de41364..beb1f7776c6 100644
--- a/ld/testsuite/ld-ctf/conflicting-typedefs.d
+++ b/ld/testsuite/ld-ctf/conflicting-typedefs.d
@@ -15,8 +15,8 @@ Contents of CTF section .ctf:
#...
Types:
0x1: .*int .*
- 0x[0-9]:.*int .*
0x[0-9]: \(kind 10\) word .* -> 0x[0-9]: \(kind 1\) .*int \(format 0x1\) \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\)
+ 0x[0-9]:.*int .*
Strings:
#...
diff --git a/ld/testsuite/ld-ctf/data-func-conflicted-vars.d b/ld/testsuite/ld-ctf/data-func-conflicted-vars.d
new file mode 100644
index 00000000000..b278dfe5d84
--- /dev/null
+++ b/ld/testsuite/ld-ctf/data-func-conflicted-vars.d
@@ -0,0 +1,69 @@
+#as:
+#source: data-func-1.c
+#source: data-func-2.c
+#objdump: --ctf
+#ld: -shared -s --ctf-variables
+#name: Conflicted data syms, partially indexed, stripped, with variables
+
+.*: +file format .*
+
+Contents of CTF section \.ctf:
+
+ Header:
+ Magic number: 0xdff2
+ Version: 4 \(CTF_VERSION_3\)
+#...
+ Data object section: .* \(0x[1-9a-f][0-9a-f]* bytes\)
+ Function info section: .* \(0x[1-9a-f][0-9a-f]* bytes\)
+ Object index section: .* \(0xc bytes\)
+ Variable section: .* \(0x10 bytes\)
+ Type section: .* \(0x118 bytes\)
+ String section: .*
+#...
+ Data objects:
+ bar -> 0x[0-9a-f]*: \(kind 6\) struct var_3 \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\)
+ var_1 -> 0x[0-9a-f]*: \(kind 10\) foo_t \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) -> .*
+ var_666 -> 0x[0-9a-f]*: \(kind 3\) foo_t \* \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) -> .*
+
+ Function objects:
+ func_[0-9]* -> 0x[0-9a-f]*: \(kind 5\) void \*\(\*\) \(const char \*restrict, int \(\*\)\(\*\) \(const char \*\)\) \(aligned at 0x[0-9a-f]*\)
+#...
+ Variables:
+ funcs -> .*
+ other_func -> .*
+#...
+ Types:
+#...
+ .*: \(kind 6\) struct var_3 .*
+#...
+CTF archive member: .*/data-func-1\.c:
+
+ Header:
+ Magic number: 0xdff2
+ Version: 4 \(CTF_VERSION_3\)
+#...
+ Parent name: \.ctf
+ Compilation unit name: .*/data-func-1\.c
+ Data object section: .* \(0x[1-9a-f][0-9a-f]* bytes\)
+ Type section: .* \(0xc bytes\)
+ String section: .*
+
+ Labels:
+
+ Data objects:
+ var_[0-9]* -> 0x80000001*: \(kind 10\) foo_t \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) -> .*
+ var_[0-9]* -> 0x80000001*: \(kind 10\) foo_t \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) -> .*
+ var_[0-9]* -> 0x80000001*: \(kind 10\) foo_t \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) -> .*
+ var_[0-9]* -> 0x80000001*: \(kind 10\) foo_t \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) -> .*
+ var_[0-9]* -> 0x80000001*: \(kind 10\) foo_t \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) -> .*
+ var_[0-9]* -> 0x80000001*: \(kind 10\) foo_t \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) -> .*
+ var_[0-9]* -> 0x80000001*: \(kind 10\) foo_t \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) -> .*
+ var_[0-9]* -> 0x80000001*: \(kind 10\) foo_t \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) -> .*
+#...
+ Function objects:
+
+ Variables:
+
+ Types:
+ 0x80000001: \(kind 10\) foo_t .* -> .* int .*
+#...
diff --git a/ld/testsuite/ld-ctf/diag-cttname-invalid.s b/ld/testsuite/ld-ctf/diag-cttname-invalid.s
index dbfdd21fe27..f025254665d 100644
--- a/ld/testsuite/ld-ctf/diag-cttname-invalid.s
+++ b/ld/testsuite/ld-ctf/diag-cttname-invalid.s
@@ -15,7 +15,7 @@
.long 0x8
.long 0x10
.long 0x40
- .long 0x42
+ .long 0x37
.long 0x1
.long 0x7
.long 0x7
diff --git a/ld/testsuite/ld-ctf/diag-cttname-null.s b/ld/testsuite/ld-ctf/diag-cttname-null.s
index ad6ce60f964..f3ba2129fef 100644
--- a/ld/testsuite/ld-ctf/diag-cttname-null.s
+++ b/ld/testsuite/ld-ctf/diag-cttname-null.s
@@ -15,7 +15,7 @@
.long 0x8
.long 0x10
.long 0x40
- .long 0x42
+ .long 0x37
.long 0x1
.long 0x7
.long 0x7
diff --git a/ld/testsuite/ld-ctf/diag-cuname.s b/ld/testsuite/ld-ctf/diag-cuname.s
index dcdbd62aa73..95f3d72feea 100644
--- a/ld/testsuite/ld-ctf/diag-cuname.s
+++ b/ld/testsuite/ld-ctf/diag-cuname.s
@@ -15,7 +15,7 @@
.long 0x8
.long 0x10
.long 0x40
- .long 0x42
+ .long 0x37
.long 0x1
.long 0x7
.long 0x7
diff --git a/ld/testsuite/ld-ctf/diag-parlabel.s b/ld/testsuite/ld-ctf/diag-parlabel.s
index e0ce57ca535..b31fb8181a3 100644
--- a/ld/testsuite/ld-ctf/diag-parlabel.s
+++ b/ld/testsuite/ld-ctf/diag-parlabel.s
@@ -15,7 +15,7 @@
.long 0x8
.long 0x10
.long 0x40
- .long 0x42
+ .long 0x37
.long 0x1
.long 0x7
.long 0x7
diff --git a/ld/testsuite/ld-ctf/diag-parname.s b/ld/testsuite/ld-ctf/diag-parname.s
index da30e4a7c85..d30178de39b 100644
--- a/ld/testsuite/ld-ctf/diag-parname.s
+++ b/ld/testsuite/ld-ctf/diag-parname.s
@@ -15,7 +15,7 @@
.long 0x8
.long 0x10
.long 0x40
- .long 0x42
+ .long 0x37
.long 0x1
.long 0x7
.long 0x7
diff --git a/ld/testsuite/ld-ctf/diag-strlen-invalid.d b/ld/testsuite/ld-ctf/diag-strlen-invalid.d
new file mode 100644
index 00000000000..8a7b69b41df
--- /dev/null
+++ b/ld/testsuite/ld-ctf/diag-strlen-invalid.d
@@ -0,0 +1,5 @@
+#as:
+#source: diag-strlen-invalid.s
+#ld: -shared
+#name: Diagnostics - String offset invalid.
+#warning: .* byte long CTF dictionary overruns .* byte long CTF section
diff --git a/ld/testsuite/ld-ctf/diag-strlen-invalid.s b/ld/testsuite/ld-ctf/diag-strlen-invalid.s
new file mode 100644
index 00000000000..dbfdd21fe27
--- /dev/null
+++ b/ld/testsuite/ld-ctf/diag-strlen-invalid.s
@@ -0,0 +1,44 @@
+ .file "A.c"
+ .section .ctf,"",@progbits
+.Lctf0:
+ .2byte 0xdff2
+ .byte 0x4
+ .byte 0
+ .long 0
+ .long 0
+ .long 0x9
+ .long 0
+ .long 0
+ .long 0x4
+ .long 0x4
+ .long 0x8
+ .long 0x8
+ .long 0x10
+ .long 0x40
+ .long 0x42
+ .long 0x1
+ .long 0x7
+ .long 0x7
+ .long 0x1
+ .long 0xff00
+ .long 0x1a000001
+ .long 0x8
+ .long 0x5
+ .long 0
+ .long 0x3
+ .long 0x3
+ .long 0x26000000
+ .long 0x6
+ .long 0
+ .long 0xe000000
+ .long 0x2
+ .ascii "\0"
+ .ascii "A\0"
+ .ascii "B\0"
+ .ascii "b\0"
+ .ascii "a\0"
+ .ascii "/usr/src/binutils-gdb/ld/testsuite/ld-ctf/A.c\0"
+ .text
+ .comm a,8,8
+ .ident "GCC: (GNU) 8.3.1 20191121 (Red Hat 8.3.1-5.0.1)"
+ .section .note.GNU-stack,"",@progbits
diff --git a/ld/testsuite/ld-ctf/nonrepresentable.d b/ld/testsuite/ld-ctf/nonrepresentable.d
index 610558f6605..fa3fdca58fc 100644
--- a/ld/testsuite/ld-ctf/nonrepresentable.d
+++ b/ld/testsuite/ld-ctf/nonrepresentable.d
@@ -15,7 +15,7 @@ Contents of CTF section .ctf:
#...
Function objects:
#...
- foo -> 0x[0-9]*: \(kind 5\) int \(\*\) \(\(nonrepresentable type.*\)\) \(aligned at 0x8\)
+ foo -> 0x[0-9]*: \(kind 5\) int \(\*\) \(\(nonrepresentable type.*\)\) \(aligned at .*\)
#...
Types:
#...
diff --git a/ld/testsuite/ld-elf/changelma.d b/ld/testsuite/ld-elf/changelma.d
index 858a8db37ae..567e72d3301 100644
--- a/ld/testsuite/ld-elf/changelma.d
+++ b/ld/testsuite/ld-elf/changelma.d
@@ -1,5 +1,5 @@
#name: changelma (pr20659)
-#ld: -T changelma.lnk
+#ld: -T changelma.lnk --no-warn-rwx-segments
#objcopy_linked_file: --change-section-lma .dynamic+0x80000000
#readelf: -l --wide
#xfail: rx-*-*
diff --git a/ld/testsuite/ld-elf/dt-relr-1.s b/ld/testsuite/ld-elf/dt-relr-1.s
new file mode 100644
index 00000000000..ce1a876b1e8
--- /dev/null
+++ b/ld/testsuite/ld-elf/dt-relr-1.s
@@ -0,0 +1,13 @@
+ .text
+ .p2align 3
+ .globl _start
+_start:
+ .byte 0
+
+ .data
+ .p2align 3
+ .globl data
+data:
+ .byte 0
+# Offset is not a multiple of 2. Don't use DT_RELR.
+ .dc.a __ehdr_start + 10
diff --git a/ld/testsuite/ld-elf/dt-relr-1a.d b/ld/testsuite/ld-elf/dt-relr-1a.d
new file mode 100644
index 00000000000..5280f628da7
--- /dev/null
+++ b/ld/testsuite/ld-elf/dt-relr-1a.d
@@ -0,0 +1,10 @@
+#source: dt-relr-1.s
+#ld: -e _start $DT_RELR_LDFLAGS
+#readelf: -rW -d
+#target: [supports_dt_relr]
+
+#...
+There is no dynamic section in this file.
+#...
+There are no relocations in this file.
+#pass
diff --git a/ld/testsuite/ld-elf/dt-relr-1b.d b/ld/testsuite/ld-elf/dt-relr-1b.d
new file mode 100644
index 00000000000..f9d75d3de12
--- /dev/null
+++ b/ld/testsuite/ld-elf/dt-relr-1b.d
@@ -0,0 +1,9 @@
+#source: dt-relr-1.s
+#ld: -e _start -pie $DT_RELR_LDFLAGS
+#readelf: -rW -d
+#target: [supports_dt_relr]
+
+#failif
+#...
+Relocation section '\.relr\.dyn' at offset .*
+#pass
diff --git a/ld/testsuite/ld-elf/dt-relr-1c.d b/ld/testsuite/ld-elf/dt-relr-1c.d
new file mode 100644
index 00000000000..7e3d5207146
--- /dev/null
+++ b/ld/testsuite/ld-elf/dt-relr-1c.d
@@ -0,0 +1,9 @@
+#source: dt-relr-1.s
+#ld: -shared $DT_RELR_LDFLAGS
+#readelf: -rW -d
+#target: [supports_dt_relr]
+
+#failif
+#...
+Relocation section '\.relr\.dyn' at offset .*
+#pass
diff --git a/ld/testsuite/ld-elf/dt-relr-2.s b/ld/testsuite/ld-elf/dt-relr-2.s
new file mode 100644
index 00000000000..1fcee6c6fce
--- /dev/null
+++ b/ld/testsuite/ld-elf/dt-relr-2.s
@@ -0,0 +1,20 @@
+ .text
+ .p2align 3
+ .globl _start
+_start:
+ .byte 0
+
+ .data
+ .p2align 3
+ .globl data
+data:
+
+ .dc.a .data
+ .dc.a 0
+ .dc.a data + 2
+ .dc.a __ehdr_start + 4
+ .dc.a __ehdr_start + 9
+
+ .byte 0
+# Offset is not a multiple of 2. Don't use DT_RELR.
+ .dc.a __ehdr_start + 10
diff --git a/ld/testsuite/ld-elf/dt-relr-2a.d b/ld/testsuite/ld-elf/dt-relr-2a.d
new file mode 100644
index 00000000000..eb00ea0c057
--- /dev/null
+++ b/ld/testsuite/ld-elf/dt-relr-2a.d
@@ -0,0 +1,10 @@
+#source: dt-relr-2.s
+#ld: -e _start $DT_RELR_LDFLAGS
+#readelf: -rW -d
+#target: [supports_dt_relr]
+
+#...
+There is no dynamic section in this file.
+#...
+There are no relocations in this file.
+#pass
diff --git a/ld/testsuite/ld-elf/dt-relr-2b.d b/ld/testsuite/ld-elf/dt-relr-2b.d
new file mode 100644
index 00000000000..b1391566a13
--- /dev/null
+++ b/ld/testsuite/ld-elf/dt-relr-2b.d
@@ -0,0 +1,17 @@
+#source: dt-relr-2.s
+#ld: -e _start -pie $DT_RELR_LDFLAGS
+#readelf: -rW -d
+#target: [supports_dt_relr]
+
+#...
+ 0x[0-9a-f]+ \(RELR\) +0x[0-9a-f]+
+ 0x[0-9a-f]+ \(RELRSZ\) +(8|16) \(bytes\)
+ 0x[0-9a-f]+ \(RELRENT\) +(4|8) \(bytes\)
+#...
+Relocation section '\.rel(a|)\.dyn' at offset 0x[0-9a-f]+ contains 1 entry:
+#...
+[0-9a-f]+ +[0-9a-f]+ +R_.*_(RELATIVE|UADDR.*) .*
+#...
+Relocation section '\.relr\.dyn' at offset 0x[0-9a-f]+ contains 2 entries:
+ 4 offsets
+#pass
diff --git a/ld/testsuite/ld-elf/dt-relr-2c.d b/ld/testsuite/ld-elf/dt-relr-2c.d
new file mode 100644
index 00000000000..c285e8707d7
--- /dev/null
+++ b/ld/testsuite/ld-elf/dt-relr-2c.d
@@ -0,0 +1,17 @@
+#source: dt-relr-2.s
+#ld: -shared $DT_RELR_LDFLAGS
+#readelf: -rW -d
+#target: [supports_dt_relr]
+
+#...
+ 0x[0-9a-f]+ \(RELR\) +0x[0-9a-f]+
+ 0x[0-9a-f]+ \(RELRSZ\) +(8|16) \(bytes\)
+ 0x[0-9a-f]+ \(RELRENT\) +(4|8) \(bytes\)
+#...
+Relocation section '\.rel(a|)\.dyn' at offset 0x[0-9a-f]+ contains 2 entries:
+#...
+[0-9a-f]+ +[0-9a-f]+ +R_.*_(RELATIVE|UADDR.*) .*
+#...
+Relocation section '\.relr\.dyn' at offset 0x[0-9a-f]+ contains 2 entries:
+ 3 offsets
+#pass
diff --git a/ld/testsuite/ld-elf/dt-relr-2d.d b/ld/testsuite/ld-elf/dt-relr-2d.d
new file mode 100644
index 00000000000..7fd3046a1cf
--- /dev/null
+++ b/ld/testsuite/ld-elf/dt-relr-2d.d
@@ -0,0 +1,17 @@
+#source: dt-relr-2.s
+#ld: -e _start -pie $DT_RELR_LDFLAGS --no-relax
+#readelf: -rW -d
+#target: [supports_dt_relr]
+
+#...
+ 0x[0-9a-f]+ \(RELR\) +0x[0-9a-f]+
+ 0x[0-9a-f]+ \(RELRSZ\) +(8|16) \(bytes\)
+ 0x[0-9a-f]+ \(RELRENT\) +(4|8) \(bytes\)
+#...
+Relocation section '\.rel(a|)\.dyn' at offset 0x[0-9a-f]+ contains 1 entry:
+#...
+[0-9a-f]+ +[0-9a-f]+ +R_.*_(RELATIVE|UADDR.*) .*
+#...
+Relocation section '\.relr\.dyn' at offset 0x[0-9a-f]+ contains 2 entries:
+ 4 offsets
+#pass
diff --git a/ld/testsuite/ld-elf/dt-relr-2e.d b/ld/testsuite/ld-elf/dt-relr-2e.d
new file mode 100644
index 00000000000..cdff8465a57
--- /dev/null
+++ b/ld/testsuite/ld-elf/dt-relr-2e.d
@@ -0,0 +1,17 @@
+#source: dt-relr-2.s
+#ld: -e _start -pie $DT_RELR_LDFLAGS -z nocombreloc
+#readelf: -rW -d
+#target: [supports_dt_relr]
+
+#...
+ 0x[0-9a-f]+ \(RELR\) +0x[0-9a-f]+
+ 0x[0-9a-f]+ \(RELRSZ\) +(8|16) \(bytes\)
+ 0x[0-9a-f]+ \(RELRENT\) +(4|8) \(bytes\)
+#...
+Relocation section '\.rel(a|)\.data' at offset 0x[0-9a-f]+ contains 1 entry:
+#...
+[0-9a-f]+ +[0-9a-f]+ +R_.*_(RELATIVE|UADDR.*) .*
+#...
+Relocation section '\.relr\.dyn' at offset 0x[0-9a-f]+ contains 2 entries:
+ 4 offsets
+#pass
diff --git a/ld/testsuite/ld-elf/dt-relr-2f.d b/ld/testsuite/ld-elf/dt-relr-2f.d
new file mode 100644
index 00000000000..6e2d86b2a74
--- /dev/null
+++ b/ld/testsuite/ld-elf/dt-relr-2f.d
@@ -0,0 +1,8 @@
+#source: dt-relr-2.s
+#ld: -r $DT_RELR_LDFLAGS
+#readelf: -rW
+#target: [supports_dt_relr]
+
+#...
+Relocation section '\.rel(a|)\.data' at offset 0x[0-9a-f]+ contains 5 entries:
+#pass
diff --git a/ld/testsuite/ld-elf/dt-relr-2g.d b/ld/testsuite/ld-elf/dt-relr-2g.d
new file mode 100644
index 00000000000..bbdcf123286
--- /dev/null
+++ b/ld/testsuite/ld-elf/dt-relr-2g.d
@@ -0,0 +1,9 @@
+#source: dt-relr-2.s
+#ld: -e _start -pie $NO_DT_RELR_LDFLAGS
+#readelf: -rW -d
+#target: [supports_dt_relr]
+
+#failif
+#...
+Relocation section '\.relr\.dyn' at offset .*
+#pass
diff --git a/ld/testsuite/ld-elf/dt-relr-2h.d b/ld/testsuite/ld-elf/dt-relr-2h.d
new file mode 100644
index 00000000000..3d0bdfc7103
--- /dev/null
+++ b/ld/testsuite/ld-elf/dt-relr-2h.d
@@ -0,0 +1,9 @@
+#source: dt-relr-2.s
+#ld: -e _start -shared $NO_DT_RELR_LDFLAGS
+#readelf: -rW -d
+#target: [supports_dt_relr]
+
+#failif
+#...
+Relocation section '\.relr\.dyn' at offset .*
+#pass
diff --git a/ld/testsuite/ld-elf/dt-relr-3.s b/ld/testsuite/ld-elf/dt-relr-3.s
new file mode 100644
index 00000000000..41ea08ec28c
--- /dev/null
+++ b/ld/testsuite/ld-elf/dt-relr-3.s
@@ -0,0 +1,12 @@
+ .text
+ .p2align 3
+ .globl _start
+_start:
+ .byte 0
+
+# Section alignment is not a multiple of 2. Don't use DT_RELR.
+ .data
+ .p2align 0
+ .globl data
+data:
+ .dc.a data
diff --git a/ld/testsuite/ld-elf/dt-relr-3a.d b/ld/testsuite/ld-elf/dt-relr-3a.d
new file mode 100644
index 00000000000..44180a989ec
--- /dev/null
+++ b/ld/testsuite/ld-elf/dt-relr-3a.d
@@ -0,0 +1,9 @@
+#source: dt-relr-3.s
+#ld: -e _start -pie $DT_RELR_LDFLAGS
+#readelf: -rW -d
+#target: [supports_dt_relr]
+
+#failif
+#...
+Relocation section '\.relr\.dyn' at offset .*
+#pass
diff --git a/ld/testsuite/ld-elf/dt-relr-3b.d b/ld/testsuite/ld-elf/dt-relr-3b.d
new file mode 100644
index 00000000000..20d1f75fd41
--- /dev/null
+++ b/ld/testsuite/ld-elf/dt-relr-3b.d
@@ -0,0 +1,9 @@
+#source: dt-relr-3.s
+#ld: -shared $DT_RELR_LDFLAGS
+#readelf: -rW -d
+#target: [supports_dt_relr]
+
+#failif
+#...
+Relocation section '\.relr\.dyn' at offset .*
+#pass
diff --git a/ld/testsuite/ld-elf/dt-relr-glibc-1.c b/ld/testsuite/ld-elf/dt-relr-glibc-1.c
new file mode 100644
index 00000000000..beacffe29e7
--- /dev/null
+++ b/ld/testsuite/ld-elf/dt-relr-glibc-1.c
@@ -0,0 +1,11 @@
+#define REL(n) \
+ static int data##n; \
+ void *p##n = &data##n;
+
+REL(1)
+REL(2)
+REL(3)
+REL(4)
+REL(5)
+REL(6)
+REL(7)
diff --git a/ld/testsuite/ld-elf/dt-relr-glibc-1a.rd b/ld/testsuite/ld-elf/dt-relr-glibc-1a.rd
new file mode 100644
index 00000000000..51bda5d70a1
--- /dev/null
+++ b/ld/testsuite/ld-elf/dt-relr-glibc-1a.rd
@@ -0,0 +1,4 @@
+#failif
+#...
+ 0x[a-f0-9]+: Name: GLIBC_ABI_DT_RELR Flags: none Version: [0-9]+
+#...
diff --git a/ld/testsuite/ld-elf/dt-relr-glibc-1b.rd b/ld/testsuite/ld-elf/dt-relr-glibc-1b.rd
new file mode 100644
index 00000000000..6556a6d939e
--- /dev/null
+++ b/ld/testsuite/ld-elf/dt-relr-glibc-1b.rd
@@ -0,0 +1,7 @@
+#...
+Version needs section '.gnu.version_r' contains 1 entry:
+ Addr: 0x[0-9a-f]+ +Offset: 0x[0-9a-f]+ +Link: +[0-9]+ +\(.dynstr\)
+ +0+: Version: 1 +File: libc\.so\.6(|\.1) +Cnt: +[0-9]+
+#...
+ 0x[a-f0-9]+: Name: GLIBC_ABI_DT_RELR Flags: none Version: [0-9]+
+#pass
diff --git a/ld/testsuite/ld-elf/dt-relr.exp b/ld/testsuite/ld-elf/dt-relr.exp
new file mode 100644
index 00000000000..42373605066
--- /dev/null
+++ b/ld/testsuite/ld-elf/dt-relr.exp
@@ -0,0 +1,43 @@
+# Expect script for DT_RELR.
+# Copyright (C) 2022 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+if { ![supports_dt_relr] } {
+ return
+}
+
+run_cc_link_tests [list \
+ [list \
+ "Build dt-relr-glibc-1a.so" \
+ "-shared -Wl,--no-as-needed $NO_DT_RELR_CC_LDFLAGS" \
+ "-fPIC" \
+ { dt-relr-glibc-1.c } \
+ {{readelf {--version-info} dt-relr-glibc-1a.rd}} \
+ "glibc-relr-1a.so" \
+ ] \
+ [list \
+ "Build dt-relr-glibc-1b.so" \
+ "-shared -Wl,--no-as-needed $DT_RELR_CC_LDFLAGS" \
+ "-fPIC" \
+ { dt-relr-glibc-1.c } \
+ {{readelf {-W --version-info} dt-relr-glibc-1b.rd}} \
+ "dt-relr-glibc-1b.so" \
+ ] \
+]
diff --git a/ld/testsuite/ld-elf/eh4.d b/ld/testsuite/ld-elf/eh4.d
index f33431a8b7f..95abafbf9ce 100644
--- a/ld/testsuite/ld-elf/eh4.d
+++ b/ld/testsuite/ld-elf/eh4.d
@@ -1,7 +1,7 @@
#source: eh4.s
#source: eh4a.s
#as: --64
-#ld: -melf_x86_64 -shared -Ttext 0x400 -z max-page-size=0x200000 -z noseparate-code
+#ld: -melf_x86_64 -shared -Ttext 0x400 -z max-page-size=0x200000 -z noseparate-code -z noexecstack
#readelf: -wf
#target: x86_64-*-*
diff --git a/ld/testsuite/ld-elf/eh5.d b/ld/testsuite/ld-elf/eh5.d
index 4a697482355..d614251587c 100644
--- a/ld/testsuite/ld-elf/eh5.d
+++ b/ld/testsuite/ld-elf/eh5.d
@@ -4,7 +4,7 @@
#ld:
#readelf: -wf
#target: [check_as_cfi]
-#xfail: alpha-*-*ecoff hppa64-*-* tile*-*-* visium-*-*
+#xfail: alpha-*-*ecoff hppa64-*-* tile*-*-* visium-*-* loongarch64-*-*
Contents of the .eh_frame section:
diff --git a/ld/testsuite/ld-elf/elf.exp b/ld/testsuite/ld-elf/elf.exp
index 16128c2989f..1b300117ad1 100644
--- a/ld/testsuite/ld-elf/elf.exp
+++ b/ld/testsuite/ld-elf/elf.exp
@@ -180,9 +180,25 @@ if { [check_gc_sections_available] && ![istarget "v850-*-*"] } {
}
}
-if { [istarget *-*-*linux*]
- || [istarget *-*-nacl*]
- || [istarget *-*-gnu*] } {
+proc target_defaults_to_execstack {} {
+ if { [istarget "aarch64*-*-*"]
+ || [istarget "*-*-nacl"]
+ || [istarget "arc*-*-*"]
+ || [istarget "ia64*-*-*"]
+ || [istarget "loongarch*-*-*"]
+ || [istarget "nios2*-*-*"]
+ || [istarget "powerpc64*-*-*"]
+ || [istarget "riscv*-*-*"]
+ || [istarget "tilegx*-*-*"]
+ || [istarget "tilepro*-*-*"] } {
+ return 0
+ }
+ return 1
+}
+
+if { [istarget *-*-*linux*]
+ || [istarget *-*-nacl*]
+ || [istarget *-*-gnu*] } {
run_ld_link_tests [list \
[list "stack exec" \
"-z execstack" \
@@ -199,7 +215,7 @@ if { [istarget *-*-*linux*]
{{readelf {-Wl} stack-noexec.rd}} \
"stack-noexec.exe"] \
[list "stack size" \
- "-z stack-size=0x123400" \
+ "-z stack-size=0x123400 -z noexecstack" \
"" \
"" \
{stack.s} \
@@ -211,8 +227,87 @@ if { [istarget *-*-*linux*]
"" \
{pr23900-1.s} \
[list [list "readelf" {-Wl} $pr23900_1_exp]] \
- "pr23900-1.exe"] \
+ "pr23900-1.exe"] \
+ ]
+
+ # Test the linker's generation of execstack and executable segment warnings.
+ # Since these are normally pruned from the linker's output we temporarily
+ # disable tha action here.
+ rename prune_warnings_extra old_prune_warnings_extra
+ proc prune_warnings_extra { text } {
+ return $text
+ }
+
+ run_ld_link_tests [list \
+ [list "PR ld/29072 (warn about an executable .note.GNU-stack)" \
+ "-e 0" \
+ "" \
+ "" \
+ {pr29072-a.s} \
+ {{ld pr29072.a.warn}} \
+ "pr29072-a.exe"] \
+ [list "PR 29072 (warn about -z execstack)" \
+ "-z execstack --warn-execstack" \
+ "" \
+ "" \
+ {stack.s} \
+ {{ld pr29072.c.warn}} \
+ "pr29072-c.exe"] \
+ [list "PR ld/29072 (suppress warnings about executable stack)" \
+ "-e 0 --no-warn-execstack" \
+ "" \
+ "" \
+ {pr29072-a.s} \
+ {} \
+ "pr29072-d.exe"] \
+ [list "Ensure that a warning issued when creating a segment with RWX permissions" \
+ "-e 0 -Tnobits-1.t --warn-rwx-segments" \
+ "" \
+ "" \
+ {nobits-1.s} \
+ {{ld rwx-segments-1.l}} \
+ "rwx-segments-1.exe"] \
+ [list "Ensure that a warning issued when creating a TLS segment with execute permission" \
+ "-e 0 -T rwx-segments-2.t --warn-rwx-segments" \
+ "" \
+ "" \
+ {size-2.s} \
+ {{ld rwx-segments-2.l}} \
+ "rwx-segments-2.exe"] \
+ [list "Ensure that the warning can be suppressed" \
+ "-e 0 -Tnobits-1.t --no-warn-rwx-segments" \
+ "" \
+ "" \
+ {nobits-1.s} \
+ {} \
+ "rwx-segments-3.exe"] \
+ ]
+
+ if { [target_defaults_to_execstack] } {
+ run_ld_link_tests [list \
+ [list "PR ld/29072 (warn about absent .note.GNU-stack)" \
+ "-e 0 -z stack-size=0x123400 --warn-execstack" \
+ "" \
+ "" \
+ {pr29072-b.s} \
+ {{ld pr29072.b.warn}} \
+ "pr29072-b.exe"] \
]
+ } else {
+ run_ld_link_tests [list \
+ [list "PR ld/29072 (ignore absent .note.GNU-stack)" \
+ "-e 0 -z stack-size=0x123400" \
+ "" \
+ "" \
+ {pr29072-b.s} \
+ {} \
+ "pr29072-b.exe"] \
+ ]
+ }
+
+ # Restore the normal pruning behaviour.
+ rename prune_warnings_extra ""
+ rename old_prune_warnings_extra prune_warnings_extra
}
if [check_gc_sections_available] {
@@ -365,7 +460,7 @@ if { [istarget *-*-linux*]
run_ld_link_exec_tests [list \
[list \
"Run mbind2a" \
- "$NOPIE_LDFLAGS -Wl,-z,common-page-size=0x4000,-z,max-page-size=0x4000" \
+ "$NOPIE_LDFLAGS -Wl,-z,common-page-size=0x4000 -Wl,-z,noexecstack" \
"" \
{ mbind2a.s mbind2b.c } \
"mbind2a" \
@@ -374,7 +469,7 @@ if { [istarget *-*-linux*]
] \
[list \
"Run mbind2b" \
- "-static -Wl,-z,common-page-size=0x4000,-z,max-page-size=0x4000" \
+ "-static -Wl,-z,common-page-size=0x4000 -Wl,-z,noexecstack" \
"" \
{ mbind2a.s mbind2b.c } \
"mbind2b" \
diff --git a/ld/testsuite/ld-elf/flags1.d b/ld/testsuite/ld-elf/flags1.d
index 6cd8b3f3832..d9034e25dc7 100644
--- a/ld/testsuite/ld-elf/flags1.d
+++ b/ld/testsuite/ld-elf/flags1.d
@@ -1,5 +1,5 @@
#name: --set-section-flags test 1 (sections)
-#ld: -Tflags1.ld
+#ld: -Tflags1.ld --no-warn-rwx-segments
#objcopy_linked_file: --set-section-flags .post_text_reserve=contents,alloc,load,readonly,code
#readelf: -S --wide
diff --git a/ld/testsuite/ld-elf/linux-x86.exp b/ld/testsuite/ld-elf/linux-x86.exp
index 2e0cbd37f17..e3f20189e4c 100644
--- a/ld/testsuite/ld-elf/linux-x86.exp
+++ b/ld/testsuite/ld-elf/linux-x86.exp
@@ -51,7 +51,7 @@ run_ld_link_tests [list \
run_ld_link_exec_tests [list \
[list \
"Run PR ld/23428 test" \
- "--no-dynamic-linker -z separate-code" \
+ "--no-dynamic-linker -z separate-code -z noexecstack" \
"" \
{ linux-x86.S pr23428.c dummy.s } \
"pr23428" \
@@ -76,7 +76,7 @@ run_ld_link_tests [list \
run_cc_link_tests [list \
[list \
"Build indirect-extern-access-1.so" \
- "-shared" \
+ "-shared -z noexecstack" \
"-fPIC" \
{ indirect-extern-access-1a.c } \
{} \
@@ -84,7 +84,7 @@ run_cc_link_tests [list \
] \
[list \
"Build indirect-extern-access-1a without PIE" \
- "$NOPIE_LDFLAGS -Wl,--no-as-needed \
+ "$NOPIE_LDFLAGS -Wl,--no-as-needed -z noexecstack \
tmpdir/indirect-extern-access-1.so" \
"$NOPIE_CFLAGS" \
{ indirect-extern-access.S indirect-extern-access-1b.c } \
@@ -101,7 +101,7 @@ run_cc_link_tests [list \
] \
[list \
"Build indirect-extern-access-2a without PIE" \
- "$NOPIE_LDFLAGS -Wl,--no-as-needed \
+ "$NOPIE_LDFLAGS -Wl,--no-as-needed -z noexecstack \
tmpdir/indirect-extern-access-2.so" \
"$NOPIE_CFLAGS" \
{ indirect-extern-access.S indirect-extern-access-1b.c } \
@@ -110,7 +110,7 @@ run_cc_link_tests [list \
] \
[list \
"Build indirect-extern-access-2b with PIE" \
- "-pie -Wl,--no-as-needed \
+ "-pie -Wl,--no-as-needed -z noexecstack \
tmpdir/indirect-extern-access-2.so" \
"-fpie" \
{ indirect-extern-access.S indirect-extern-access-2b.c } \
@@ -139,7 +139,7 @@ run_cc_link_tests [list \
run_ld_link_exec_tests [list \
[list \
"Run indirect-extern-access-1a without PIE" \
- "$NOPIE_LDFLAGS" \
+ "$NOPIE_LDFLAGS -z noexecstack" \
"" \
{ indirect-extern-access.S indirect-extern-access-1b.c } \
"indirect-extern-access-1a" \
@@ -151,7 +151,7 @@ run_ld_link_exec_tests [list \
] \
[list \
"Run indirect-extern-access-1b with PIE" \
- "-pie" \
+ "-pie -z noexecstack" \
"" \
{ indirect-extern-access.S indirect-extern-access-1b.c } \
"indirect-extern-access-1b" \
@@ -163,7 +163,7 @@ run_ld_link_exec_tests [list \
] \
[list \
"Run indirect-extern-access-2a without PIE" \
- "$NOPIE_LDFLAGS" \
+ "$NOPIE_LDFLAGS -z noexecstack" \
"" \
{ indirect-extern-access.S indirect-extern-access-2b.c } \
"indirect-extern-access-2a" \
@@ -175,7 +175,7 @@ run_ld_link_exec_tests [list \
] \
[list \
"Run indirect-extern-access-2b with PIE" \
- "-pie" \
+ "-pie -z noexecstack" \
"" \
{ indirect-extern-access.S indirect-extern-access-2b.c } \
"indirect-extern-access-2b" \
@@ -292,7 +292,7 @@ proc check_pr25749a {testname srcfilea srcfileb cflags ldflags lderror} {
run_cc_link_tests [list \
[list \
"Build $testname ($ldflags $cflags)" \
- "$ldflags tmpdir/pr25749-bin.o" \
+ "$ldflags tmpdir/pr25749-bin.o -z noexecstack" \
"$cflags -I../bfd" \
[list $srcfilea $srcfileb]\
{{readelf {-Wr} pr25749.rd}} \
@@ -302,7 +302,7 @@ proc check_pr25749a {testname srcfilea srcfileb cflags ldflags lderror} {
run_ld_link_exec_tests [list \
[list \
"Run ${testname}a ($ldflags $cflags)" \
- "$ldflags tmpdir/pr25749-bin.o" \
+ "$ldflags tmpdir/pr25749-bin.o -z noexecstack" \
"" \
[list $srcfilea $srcfileb]\
"${testname}a" \
@@ -314,7 +314,7 @@ proc check_pr25749a {testname srcfilea srcfileb cflags ldflags lderror} {
run_cc_link_tests [list \
[list \
"Build $testname ($ldflags $cflags)" \
- "$ldflags tmpdir/pr25749-bin.o" \
+ "$ldflags tmpdir/pr25749-bin.o -z noexecstack" \
"$cflags -I../bfd" \
[list $srcfilea $srcfileb]\
[list [list error_output $lderror]] \
@@ -395,7 +395,7 @@ proc check_pr25749b {testname srcfilea srcfileb cflags ldflags dsoldflags args}
run_cc_link_tests [list \
[list \
"Build lib${testname}.so ($dsoldflags)" \
- "-shared $dsoldflags tmpdir/pr25749-bin.o" \
+ "-shared $dsoldflags tmpdir/pr25749-bin.o -z noexecstack" \
"-fPIC -I../bfd" \
[list $srcfileb] \
{{readelf {-Wr} pr25749.rd}} \
@@ -411,7 +411,7 @@ proc check_pr25749b {testname srcfilea srcfileb cflags ldflags dsoldflags args}
run_ld_link_exec_tests [list \
[list \
"Run ${testname}b ($ldflags $cflags)" \
- "$ldflags -Wl,--no-as-needed tmpdir/lib${testname}.so" \
+ "$ldflags -Wl,--no-as-needed tmpdir/lib${testname}.so -z noexecstack" \
"" \
[list $srcfilea]\
"${testname}b" \
diff --git a/ld/testsuite/ld-elf/maxpage5.d b/ld/testsuite/ld-elf/maxpage5.d
index 9d9b57a853a..843a976111a 100644
--- a/ld/testsuite/ld-elf/maxpage5.d
+++ b/ld/testsuite/ld-elf/maxpage5.d
@@ -1,6 +1,6 @@
#source: maxpage5.s
#as: --32
-#ld: -z max-page-size=0x200000 -T maxpage5.t
+#ld: -z max-page-size=0x200000 -T maxpage5.t --no-warn-rwx-segments
#objcopy_linked_file: -R .foo
#readelf: -l --wide
#target: x86_64-*-linux* i?86-*-linux-gnu i?86-*-gnu*
diff --git a/ld/testsuite/ld-elf/note-2.d b/ld/testsuite/ld-elf/note-2.d
index aff32406de2..ed81703dc2d 100644
--- a/ld/testsuite/ld-elf/note-2.d
+++ b/ld/testsuite/ld-elf/note-2.d
@@ -1,4 +1,4 @@
-#ld: -Tnote-2.t
+#ld: -Tnote-2.t --no-warn-rwx-segments
#objcopy_linked_file: -R .foo
#readelf: -l --wide
diff --git a/ld/testsuite/ld-elf/pr21884.d b/ld/testsuite/ld-elf/pr21884.d
index 3d44ccfe602..e289b419f8f 100644
--- a/ld/testsuite/ld-elf/pr21884.d
+++ b/ld/testsuite/ld-elf/pr21884.d
@@ -3,7 +3,7 @@
#ld: -T pr21884.t
#objdump: -b binary -s
#xfail: aarch64*-*-* arm*-*-* avr-*-* ia64-*-* m68hc1*-*-* nds32*-*-*
-#xfail: riscv*-*-* score-*-* v850-*-*
+#xfail: riscv*-*-* score-*-* v850-*-* loongarch*-*-*
# Skip targets which can't change output format to binary.
.*: file format binary
diff --git a/ld/testsuite/ld-elf/pr21964-1a.c b/ld/testsuite/ld-elf/pr21964-1a.c
index 680bda4dbfe..a060162ddad 100644
--- a/ld/testsuite/ld-elf/pr21964-1a.c
+++ b/ld/testsuite/ld-elf/pr21964-1a.c
@@ -4,7 +4,7 @@ int
foo1 (void)
{
static int my_var __attribute__((used, section("__verbose"))) = 5;
- if (__start___verbose == __stop___verbose
+ if (& __start___verbose[0] == & __stop___verbose[0]
|| __start___verbose[0] != 5)
return -1;
else
diff --git a/ld/testsuite/ld-elf/pr21964-1b.c b/ld/testsuite/ld-elf/pr21964-1b.c
index 1507b228088..688bbeb6870 100644
--- a/ld/testsuite/ld-elf/pr21964-1b.c
+++ b/ld/testsuite/ld-elf/pr21964-1b.c
@@ -4,7 +4,7 @@ int
foo2 (void)
{
static int my_var __attribute__((used, section("__verbose"))) = 10;
- if (__start___verbose == __stop___verbose
+ if (& __start___verbose[0] == & __stop___verbose[0]
|| __start___verbose[0] != 10)
return -1;
else
diff --git a/ld/testsuite/ld-elf/pr21964-1c.c b/ld/testsuite/ld-elf/pr21964-1c.c
index 996a9e182f4..58322bcc227 100644
--- a/ld/testsuite/ld-elf/pr21964-1c.c
+++ b/ld/testsuite/ld-elf/pr21964-1c.c
@@ -9,7 +9,7 @@ static int my_var __attribute__((used, section("__verbose"))) = 6;
int
bar (void)
{
- if (__start___verbose == __stop___verbose)
+ if (& __start___verbose[0] == & __stop___verbose[0])
return -1;
if (__start___verbose[0] != 6)
diff --git a/ld/testsuite/ld-elf/pr21964-2a.c b/ld/testsuite/ld-elf/pr21964-2a.c
index 6331ff063b9..8b1afca2acc 100644
--- a/ld/testsuite/ld-elf/pr21964-2a.c
+++ b/ld/testsuite/ld-elf/pr21964-2a.c
@@ -4,7 +4,7 @@ int
foo1 (void)
{
static int my_var __attribute__((used, section("__verbose"))) = 5;
- if (__start___verbose == __stop___verbose
+ if (& __start___verbose[0] == & __stop___verbose[0]
&& __start___verbose[0] != 5)
return -1;
else
diff --git a/ld/testsuite/ld-elf/pr21964-2b.c b/ld/testsuite/ld-elf/pr21964-2b.c
index 1507b228088..688bbeb6870 100644
--- a/ld/testsuite/ld-elf/pr21964-2b.c
+++ b/ld/testsuite/ld-elf/pr21964-2b.c
@@ -4,7 +4,7 @@ int
foo2 (void)
{
static int my_var __attribute__((used, section("__verbose"))) = 10;
- if (__start___verbose == __stop___verbose
+ if (& __start___verbose[0] == & __stop___verbose[0]
|| __start___verbose[0] != 10)
return -1;
else
diff --git a/ld/testsuite/ld-elf/pr21964-3a.c b/ld/testsuite/ld-elf/pr21964-3a.c
index 835040ee342..89f7b883573 100644
--- a/ld/testsuite/ld-elf/pr21964-3a.c
+++ b/ld/testsuite/ld-elf/pr21964-3a.c
@@ -3,7 +3,7 @@ extern int __stop___verbose[];
int
foo3 (void)
{
- if (__start___verbose == __stop___verbose
+ if (& __start___verbose[0] == & __stop___verbose[0]
|| __start___verbose[0] != 6)
return -1;
else
diff --git a/ld/testsuite/ld-elf/pr24718-1.d b/ld/testsuite/ld-elf/pr24718-1.d
new file mode 100644
index 00000000000..767cf740ee0
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr24718-1.d
@@ -0,0 +1,13 @@
+#ld: -shared -version-script pr24718-1.t
+#readelf: -V
+#target: [check_shared_lib_support]
+#xfail: tic6x-*-*
+# tic6x requires a non-default emulation.
+
+#...
+Version definition section '\.gnu\.version_d' contains 3 entries:
+ +Addr: 0x[0-9a-f]+ +Offset: 0x[0-9a-f]+ +Link: [0-9]+ \(\.dynstr\)
+ +000000: Rev: 1 +Flags: BASE +Index: 1 +Cnt: 1 +Name: dump
+ +0x001c: Rev: 1 +Flags: WEAK +Index: 2 +Cnt: 1 +Name: FOO_DEP
+ +0x0038: Rev: 1 +Flags: none +Index: 3 +Cnt: 1 +Name: FOO
+#pass
diff --git a/ld/testsuite/ld-elf/pr24718-1.s b/ld/testsuite/ld-elf/pr24718-1.s
new file mode 100644
index 00000000000..c7c9ee2d5bf
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr24718-1.s
@@ -0,0 +1,7 @@
+ .text
+ .globl foo
+ .globl foo
+ .type foo,%function
+foo:
+ .byte 0
+ .size foo, 1
diff --git a/ld/testsuite/ld-elf/pr24718-1.t b/ld/testsuite/ld-elf/pr24718-1.t
new file mode 100644
index 00000000000..fcbeed6e6a8
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr24718-1.t
@@ -0,0 +1,4 @@
+FOO_DEP { };
+FOO {
+ foo;
+};
diff --git a/ld/testsuite/ld-elf/pr26936.d b/ld/testsuite/ld-elf/pr26936.d
index c479f475829..9115f810465 100644
--- a/ld/testsuite/ld-elf/pr26936.d
+++ b/ld/testsuite/ld-elf/pr26936.d
@@ -9,7 +9,7 @@
# sed. mn10300 and riscv put different numbers of local symbols in
# linkonce section and comdat sections. xtensa has more than one member
# in comdat groups.
-#xfail: am33_2.0-*-* hppa*-*-hpux* mn10300-*-* riscv*-*-* xtensa*-*-*
+#xfail: am33_2.0-*-* hppa*-*-hpux* mn10300-*-* riscv*-*-* xtensa*-*-* loongarch*-*-*
#...
CU: .*/pr26936c.s:
diff --git a/ld/testsuite/ld-elf/pr29072-a.s b/ld/testsuite/ld-elf/pr29072-a.s
new file mode 100644
index 00000000000..12ba994e04f
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr29072-a.s
@@ -0,0 +1,6 @@
+ .text
+ .global main
+main:
+ .nop
+
+ .section .note.GNU-stack,"x",%progbits
diff --git a/ld/testsuite/ld-elf/pr29072-b.s b/ld/testsuite/ld-elf/pr29072-b.s
new file mode 100644
index 00000000000..99df33210e5
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr29072-b.s
@@ -0,0 +1,5 @@
+ .text
+ .globl foo
+foo:
+ .nop
+
diff --git a/ld/testsuite/ld-elf/pr29072.a.warn b/ld/testsuite/ld-elf/pr29072.a.warn
new file mode 100644
index 00000000000..aecff233da9
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr29072.a.warn
@@ -0,0 +1 @@
+.*: warning: .*\.o: requires executable stack \(because the \.note\.GNU-stack section is executable\)
diff --git a/ld/testsuite/ld-elf/pr29072.b.warn b/ld/testsuite/ld-elf/pr29072.b.warn
new file mode 100644
index 00000000000..9058cc0e68b
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr29072.b.warn
@@ -0,0 +1,2 @@
+.*: warning: .*\.o: missing \.note\.GNU-stack section implies executable stack
+.*: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
diff --git a/ld/testsuite/ld-elf/pr29072.c.warn b/ld/testsuite/ld-elf/pr29072.c.warn
new file mode 100644
index 00000000000..e058be43e72
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr29072.c.warn
@@ -0,0 +1 @@
+.*: warning: enabling an executable stack because of -z execstack command line option
diff --git a/ld/testsuite/ld-elf/rwx-segments-1.l b/ld/testsuite/ld-elf/rwx-segments-1.l
new file mode 100644
index 00000000000..432fcebd335
--- /dev/null
+++ b/ld/testsuite/ld-elf/rwx-segments-1.l
@@ -0,0 +1 @@
+.*warning: .* has a LOAD segment with RWX permissions
diff --git a/ld/testsuite/ld-elf/rwx-segments-2.l b/ld/testsuite/ld-elf/rwx-segments-2.l
new file mode 100644
index 00000000000..b830de60ea8
--- /dev/null
+++ b/ld/testsuite/ld-elf/rwx-segments-2.l
@@ -0,0 +1 @@
+.*: warning: .* has a TLS segment with execute permission
diff --git a/ld/testsuite/ld-elf/rwx-segments-2.t b/ld/testsuite/ld-elf/rwx-segments-2.t
new file mode 100644
index 00000000000..f3aef1d5d44
--- /dev/null
+++ b/ld/testsuite/ld-elf/rwx-segments-2.t
@@ -0,0 +1,20 @@
+PHDRS
+{
+ header PT_PHDR PHDRS ;
+
+ image PT_LOAD FLAGS (5) PHDRS;
+ tls PT_TLS FLAGS (7);
+
+}
+SECTIONS
+{
+ .text 0x100 : { *(.text) } :image
+ .tdata : { *(.tdata) } :image :tls
+ .tbss : { *(.tbss) } :image : tls
+ .map : {
+ LONG (SIZEOF (.text))
+ LONG (SIZEOF (.tdata))
+ LONG (SIZEOF (.tbss))
+ } :image
+ /DISCARD/ : { *(*) }
+}
diff --git a/ld/testsuite/ld-elf/shared.exp b/ld/testsuite/ld-elf/shared.exp
index cb3b8c15cfc..06c3202d5cc 100644
--- a/ld/testsuite/ld-elf/shared.exp
+++ b/ld/testsuite/ld-elf/shared.exp
@@ -452,7 +452,8 @@ setup_xfail mips*-*-* bfin-*-*
clear_xfail bfin-*-linux*
run_ld_link_tests [list \
[list "-Bsymbolic-functions" \
- "-shared -Bsymbolic-functions" "" "$AFLAGS_PIC" \
+ "-shared -Bsymbolic-functions $NO_DT_RELR_LDFLAGS" \
+ "" "$AFLAGS_PIC" \
{symbolic-func.s} {{readelf {-r --wide} symbolic-func.r}} \
"symbolic-func.so"] \
]
@@ -913,7 +914,7 @@ run_cc_link_tests [list \
if { ![istarget alpha-*-*] } {
append build_tests {
{"Build pr19073a.o"
- "-r -nostdlib" ""
+ "-r -nostdlib -z noexecstack" ""
{pr19073.s} {} "pr19073a.o"}
{"Build libpr19073.so"
"-shared -Wl,--version-script=pr19073.map tmpdir/pr19073a.o" "-fPIC"
diff --git a/ld/testsuite/ld-frv/fdpic1.s b/ld/testsuite/ld-frv/fdpic1.s
index 29f7fff8703..fa8aa482428 100644
--- a/ld/testsuite/ld-frv/fdpic1.s
+++ b/ld/testsuite/ld-frv/fdpic1.s
@@ -62,3 +62,4 @@ D1:
.D4:
.picptr funcdesc(.Fb)
.word .Fb
+ .section .note.GNU-stack
diff --git a/ld/testsuite/ld-frv/fdpic2.s b/ld/testsuite/ld-frv/fdpic2.s
index 29876436d34..aa42c2980d2 100644
--- a/ld/testsuite/ld-frv/fdpic2.s
+++ b/ld/testsuite/ld-frv/fdpic2.s
@@ -79,3 +79,4 @@ GD3:
GD4:
.picptr funcdesc(GFb)
.word GFb
+ .section .note.GNU-stack
diff --git a/ld/testsuite/ld-frv/fdpic3.s b/ld/testsuite/ld-frv/fdpic3.s
index f867b93d9a7..5fa5b0200ae 100644
--- a/ld/testsuite/ld-frv/fdpic3.s
+++ b/ld/testsuite/ld-frv/fdpic3.s
@@ -97,3 +97,4 @@ HD3:
HD4:
.picptr funcdesc(HFb)
.word HFb
+ .section .note.GNU-stack
diff --git a/ld/testsuite/ld-frv/fdpic4.s b/ld/testsuite/ld-frv/fdpic4.s
index 795ae45516e..c877407c157 100644
--- a/ld/testsuite/ld-frv/fdpic4.s
+++ b/ld/testsuite/ld-frv/fdpic4.s
@@ -97,3 +97,4 @@ PD3:
PD4:
.picptr funcdesc(PFb)
.word PFb
+ .section .note.GNU-stack
diff --git a/ld/testsuite/ld-frv/fdpic5.s b/ld/testsuite/ld-frv/fdpic5.s
index f4d466a82e0..d4fd8930d8e 100644
--- a/ld/testsuite/ld-frv/fdpic5.s
+++ b/ld/testsuite/ld-frv/fdpic5.s
@@ -36,3 +36,4 @@ D5:
.picptr funcdesc(UFb)
.word UFb
+ .section .note.GNU-stack
diff --git a/ld/testsuite/ld-frv/fdpic6.s b/ld/testsuite/ld-frv/fdpic6.s
index cd8e1d0e358..f2befde5ffd 100644
--- a/ld/testsuite/ld-frv/fdpic6.s
+++ b/ld/testsuite/ld-frv/fdpic6.s
@@ -53,3 +53,4 @@ D6:
.picptr funcdesc(WFb)
.word WFb
+ .section .note.GNU-stack
diff --git a/ld/testsuite/ld-frv/fdpic7.s b/ld/testsuite/ld-frv/fdpic7.s
index ceac5fcd7bc..60a345299c7 100644
--- a/ld/testsuite/ld-frv/fdpic7.s
+++ b/ld/testsuite/ld-frv/fdpic7.s
@@ -61,3 +61,4 @@ D7:
.D4:
.picptr funcdesc(.Fb+4)
.word .Fb+4
+ .section .note.GNU-stack
diff --git a/ld/testsuite/ld-frv/fdpic8.s b/ld/testsuite/ld-frv/fdpic8.s
index 037250fae8c..d881f887dd8 100644
--- a/ld/testsuite/ld-frv/fdpic8.s
+++ b/ld/testsuite/ld-frv/fdpic8.s
@@ -79,3 +79,4 @@ GD3:
GD4:
.picptr funcdesc(GFb+4)
.word GFb+4
+ .section .note.GNU-stack
diff --git a/ld/testsuite/ld-frv/tls-1-dep.s b/ld/testsuite/ld-frv/tls-1-dep.s
index 75daab732b5..aa5004b22bd 100644
--- a/ld/testsuite/ld-frv/tls-1-dep.s
+++ b/ld/testsuite/ld-frv/tls-1-dep.s
@@ -5,3 +5,4 @@
.size x, 4
x:
.zero 4
+ .section .note.GNU-stack
diff --git a/ld/testsuite/ld-frv/tls-1.s b/ld/testsuite/ld-frv/tls-1.s
index a13c91bc2d6..213acf0ae3f 100644
--- a/ld/testsuite/ld-frv/tls-1.s
+++ b/ld/testsuite/ld-frv/tls-1.s
@@ -83,3 +83,5 @@ _start:
sethi.p #gottlsoffhi(0), gr14
setlo #gottlsofflo(0), gr14
ld #tlsoff(0)@(gr15, gr14), gr9
+
+ .section .note.GNU-stack
diff --git a/ld/testsuite/ld-frv/tls-2.s b/ld/testsuite/ld-frv/tls-2.s
index f0712e32b95..28a2930c969 100644
--- a/ld/testsuite/ld-frv/tls-2.s
+++ b/ld/testsuite/ld-frv/tls-2.s
@@ -181,3 +181,5 @@ _start:
setlo #gottlsofflo(i+1+4096), gr8
ld #tlsoff(i+1+4096)@(gr15, gr8), gr9
.endif
+
+ .section .note.GNU-stack
diff --git a/ld/testsuite/ld-frv/tls-3.s b/ld/testsuite/ld-frv/tls-3.s
index 6dd7972837c..59928884e91 100644
--- a/ld/testsuite/ld-frv/tls-3.s
+++ b/ld/testsuite/ld-frv/tls-3.s
@@ -18,3 +18,5 @@ _start:
sethi.p #gottlsoffhi(u), gr14
setlo #gottlsofflo(u), gr14
ld #tlsoff(u)@(gr15, gr14), gr9
+
+ .section .note.GNU-stack
diff --git a/ld/testsuite/ld-gc/dummy.s b/ld/testsuite/ld-gc/dummy.s
index 403f98000d9..66d3b2a8856 100644
--- a/ld/testsuite/ld-gc/dummy.s
+++ b/ld/testsuite/ld-gc/dummy.s
@@ -1 +1,2 @@
# Dummy
+ .section ".note.GNU-stack"
diff --git a/ld/testsuite/ld-i386/dt-relr-1.s b/ld/testsuite/ld-i386/dt-relr-1.s
new file mode 100644
index 00000000000..034939299ba
--- /dev/null
+++ b/ld/testsuite/ld-i386/dt-relr-1.s
@@ -0,0 +1,14 @@
+ .text
+foo:
+ call func1@PLT
+ pushl __ehdr_start@GOT(%ebx)
+
+ .section .bar,"aw",@progbits
+ .p2align 2
+ .dc.a data1
+ .dc.a __ehdr_start
+
+ .section .foo,"aw",@progbits
+ .p2align 2
+ .dc.a data1
+ .dc.a __ehdr_start
diff --git a/ld/testsuite/ld-i386/dt-relr-1a.d b/ld/testsuite/ld-i386/dt-relr-1a.d
new file mode 100644
index 00000000000..cbb8ab6158b
--- /dev/null
+++ b/ld/testsuite/ld-i386/dt-relr-1a.d
@@ -0,0 +1,27 @@
+#source: dt-relr-1.s
+#as: --32
+#ld: -shared -melf_i386 $DT_RELR_LDFLAGS
+#readelf: -r -s --wide
+#target: x86_64-*-linux* i?86-*-linux-gnu i?86-*-gnu*
+
+Relocation section '\.rel\.dyn' at offset [0x0-9a-f]+ contains 2 entries:
+ +Offset +Info +Type +Sym. Value +Symbol's Name
+[0-9a-f]+ +[0-9a-f]+ +R_386_32 +0+ +data1
+[0-9a-f]+ +[0-9a-f]+ +R_386_32 +0+ +data1
+
+Relocation section '\.rel\.plt' at offset 0x[0-9a-f]+ contains 1 entry:
+ +Offset +Info +Type +Sym. Value +Symbol's Name
+[0-9a-f]+ +[0-9a-f]+ +R_386_JUMP_SLOT +0+ +func1
+
+Relocation section '.relr.dyn' at offset 0x[a-f0-9]+ contains 2 entries:
+ +3 offsets
+[a-f0-9]+
+[a-f0-9]+
+[a-f0-9]+
+
+#...
+Symbol table '.symtab' contains [0-9]+ entries:
+ Num: Value Size Type Bind Vis Ndx Name
+#...
+ +[a-f0-9]+: 00000000 0 NOTYPE LOCAL DEFAULT 1 __ehdr_start
+#pass
diff --git a/ld/testsuite/ld-i386/dt-relr-1b.d b/ld/testsuite/ld-i386/dt-relr-1b.d
new file mode 100644
index 00000000000..3dd988158c6
--- /dev/null
+++ b/ld/testsuite/ld-i386/dt-relr-1b.d
@@ -0,0 +1,30 @@
+#source: dt-relr-1.s
+#as: --32
+#ld: -shared -melf_i386 $DT_RELR_LDFLAGS -z nocombreloc
+#readelf: -r -s --wide
+#target: x86_64-*-linux* i?86-*-linux-gnu i?86-*-gnu*
+
+Relocation section '\.rel\.bar' at offset [0x0-9a-f]+ contains 1 entry:
+ +Offset +Info +Type +Sym. Value +Symbol's Name
+[0-9a-f]+ +[0-9a-f]+ +R_386_32 +0+ +data1
+
+Relocation section '\.rel\.foo' at offset [0x0-9a-f]+ contains 1 entry:
+ +Offset +Info +Type +Sym. Value +Symbol's Name
+[0-9a-f]+ +[0-9a-f]+ +R_386_32 +0+ +data1
+
+Relocation section '\.rel\.plt' at offset 0x[0-9a-f]+ contains 1 entry:
+ +Offset +Info +Type +Sym. Value +Symbol's Name
+[0-9a-f]+ +[0-9a-f]+ +R_386_JUMP_SLOT +0+ +func1
+
+Relocation section '.relr.dyn' at offset 0x[a-f0-9]+ contains 2 entries:
+ +3 offsets
+[a-f0-9]+
+[a-f0-9]+
+[a-f0-9]+
+
+#...
+Symbol table '.symtab' contains [0-9]+ entries:
+ Num: Value Size Type Bind Vis Ndx Name
+#...
+ +[a-f0-9]+: 00000000 0 NOTYPE LOCAL DEFAULT 1 __ehdr_start
+#pass
diff --git a/ld/testsuite/ld-i386/export-class.exp b/ld/testsuite/ld-i386/export-class.exp
index 47b2c0f0056..04bc6a0d836 100644
--- a/ld/testsuite/ld-i386/export-class.exp
+++ b/ld/testsuite/ld-i386/export-class.exp
@@ -74,7 +74,7 @@ run_ld_link_tests [list \
run_ld_link_tests [list \
[list \
"$testname (final shared object)" \
- "-shared -Tdata=0x12340000 tmpdir/i386-export-class-ref-r.o tmpdir/i386-export-class-lib.so" "" \
+ "-shared $NO_DT_RELR_LDFLAGS -Tdata=0x12340000 tmpdir/i386-export-class-ref-r.o tmpdir/i386-export-class-lib.so" "" \
"" \
{ ../ld-elf/export-class-dep.s ../ld-elf/export-class-def.s } \
{ \
diff --git a/ld/testsuite/ld-i386/i386.exp b/ld/testsuite/ld-i386/i386.exp
index 3ed6e42e78f..b4f7de49fd5 100644
--- a/ld/testsuite/ld-i386/i386.exp
+++ b/ld/testsuite/ld-i386/i386.exp
@@ -177,12 +177,6 @@ set i386tests {
{{readelf -Ssrl tlsbindesc.rd} {objdump -drj.text tlsbindesc.dd}
{objdump -sj.got tlsbindesc.sd} {objdump -sj.tdata tlsbindesc.td}}
"tlsbindesc"}
- {"TLS -fno-pic -shared"
- "-shared -melf_i386 --no-ld-generated-unwind-info -z notext \
- -z noseparate-code --hash-style=sysv" ""
- "--32" {tlsnopic1.s tlsnopic2.s}
- {{readelf -Ssrl tlsnopic.rd} {objdump -drj.text tlsnopic.dd}
- {objdump -sj.got tlsnopic.sd}} "libtlsnopic.so"}
{"TLS with global dynamic and descriptors"
"-shared -melf_i386 --no-ld-generated-unwind-info \
-z noseparate-code --hash-style=sysv" ""
@@ -246,12 +240,12 @@ set i386tests {
"--32 -mx86-used-note=yes"
{ pr19827a.S } {{readelf {-rW} pr19827.rd}} "pr19827.so"}
{"Build pr27193a.so"
- "-melf_i386 -shared" ""
+ "-melf_i386 -shared -z noexecstack" ""
"--32"
{ pr27193a.o.bz2 pr27193b.s }
{{objdump {-dw} pr27193.dd}} "pr27193a.so"}
{"Build pr27193b.so"
- "-melf_i386 -shared --reduce-memory-overheads" ""
+ "-melf_i386 -shared --reduce-memory-overheads -z noexecstack" ""
"--32"
{ pr27193a.o.bz2 pr27193b.s }
{{objdump {-dw} pr27193.dd}} "pr27193b.so"}
@@ -293,6 +287,20 @@ iamcu_tests
run_ld_link_tests $i386tests
+run_ld_link_tests [list \
+ [list \
+ "TLS -fno-pic -shared" \
+ "-shared -melf_i386 --no-ld-generated-unwind-info -z notext \
+ -z noseparate-code --hash-style=sysv $NO_DT_RELR_LDFLAGS" \
+ "" "--32" \
+ {tlsnopic1.s tlsnopic2.s} \
+ {{readelf -Ssrl tlsnopic.rd} \
+ {objdump -drj.text tlsnopic.dd} \
+ {objdump -sj.got tlsnopic.sd}} \
+ "libtlsnopic.so" \
+ ] \
+]
+
run_dump_test "abs"
run_dump_test "pcrel8"
run_dump_test "pcrel16"
@@ -499,6 +507,10 @@ run_dump_test "pr27491-1c"
run_dump_test "pr27491-2"
run_dump_test "pr27491-3"
run_dump_test "pr27491-4"
+run_dump_test "dt-relr-1a"
+run_dump_test "dt-relr-1b"
+run_dump_test "pr28870"
+run_dump_test "pr28894"
if { !([istarget "i?86-*-linux*"]
|| [istarget "i?86-*-gnu*"]
@@ -801,7 +813,8 @@ if { [isnative]
] \
[list \
"Build gotpc1" \
- "$NOPIE_LDFLAGS -Wl,--as-needed tmpdir/gotpc1.o tmpdir/got1d.so" \
+ "$NOPIE_LDFLAGS -Wl,--as-needed,-z,noexecstack \
+ tmpdir/gotpc1.o tmpdir/got1d.so" \
"-Wa,-mx86-used-note=no" \
{ dummy.s } \
{{objdump {-dw} got1.dd}} \
@@ -978,7 +991,8 @@ if { [isnative]
] \
[list \
"Build property-6" \
- "-Wl,--as-needed tmpdir/property-6.o tmpdir/property-6.so" \
+ "-Wl,--as-needed,-z,noexecstack \
+ tmpdir/property-6.o tmpdir/property-6.so" \
"-Wa,-mx86-used-note=no" \
{ dummy.s } \
{{readelf {-n} property-2.r}} \
@@ -1277,6 +1291,30 @@ if { [isnative]
{} \
"pr22842.so" \
] \
+ [list \
+ "Build pr28875.so" \
+ "-shared -Wl,-z,indirect-extern-access" \
+ "-fPIC" \
+ { pr28875a.c } \
+ {} \
+ "pr28875.so" \
+ ] \
+ [list \
+ "Build pr28875" \
+ "$NOPIE_LDFLAGS -Wl,--no-as-needed tmpdir/pr28875.so" \
+ "$NOPIE_CFLAGS" \
+ { pr28875b.c } \
+ {{error_output "pr28875.err"}} \
+ "pr28875" \
+ ] \
+ [list \
+ "Build pr21997-1" \
+ "$NOPIE_LDFLAGS -Wl,--no-as-needed,-z,notext tmpdir/pr21997-1.so" \
+ "$NOPIE_CFLAGS -Wa,-mx86-used-note=yes" \
+ { pr21997-1b.c } \
+ {{error_output "pr21997-1.err"}} \
+ "pr21997-1" \
+ ] \
]
run_ld_link_exec_tests [list \
@@ -1333,15 +1371,6 @@ if { [isnative]
"-fPIC" \
] \
[list \
- "Run pr21997-1" \
- "$NOPIE_LDFLAGS -Wl,--no-as-needed,-z,notext tmpdir/pr21997-1.so" \
- "-Wa,-mx86-used-note=yes" \
- { pr21997-1b.c } \
- "pr21997-1" \
- "pass.out" \
- "$NOPIE_CFLAGS" \
- ] \
- [list \
"Run pr21997-1 (PIC 1)" \
"$NOPIE_LDFLAGS -Wl,--no-as-needed tmpdir/pr21997-1.so" \
"-Wa,-mx86-used-note=yes" \
diff --git a/ld/testsuite/ld-i386/ibt-plt-2a.d b/ld/testsuite/ld-i386/ibt-plt-2a.d
index 42aa2ce7410..98b6fb9a5aa 100644
--- a/ld/testsuite/ld-i386/ibt-plt-2a.d
+++ b/ld/testsuite/ld-i386/ibt-plt-2a.d
@@ -1,6 +1,6 @@
#source: ibt-plt-2.s
#as: --32
-#ld: -shared -m elf_i386 -z ibtplt --hash-style=sysv -z noseparate-code
+#ld: -shared -m elf_i386 -z ibtplt --hash-style=sysv -z noseparate-code $NO_DT_RELR_LDFLAGS
#objdump: -dw
.*: +file format .*
diff --git a/ld/testsuite/ld-i386/ibt-plt-3a.d b/ld/testsuite/ld-i386/ibt-plt-3a.d
index b357a74a33b..91f2023db35 100644
--- a/ld/testsuite/ld-i386/ibt-plt-3a.d
+++ b/ld/testsuite/ld-i386/ibt-plt-3a.d
@@ -1,6 +1,6 @@
#source: ibt-plt-3.s
#as: --32
-#ld: -shared -m elf_i386 -z ibtplt --hash-style=sysv -z noseparate-code
+#ld: -shared -m elf_i386 -z ibtplt --hash-style=sysv -z noseparate-code $NO_DT_RELR_LDFLAGS
#objdump: -dw
.*: +file format .*
diff --git a/ld/testsuite/ld-i386/ibt-plt-3c.d b/ld/testsuite/ld-i386/ibt-plt-3c.d
index b357a74a33b..91f2023db35 100644
--- a/ld/testsuite/ld-i386/ibt-plt-3c.d
+++ b/ld/testsuite/ld-i386/ibt-plt-3c.d
@@ -1,6 +1,6 @@
#source: ibt-plt-3.s
#as: --32
-#ld: -shared -m elf_i386 -z ibtplt --hash-style=sysv -z noseparate-code
+#ld: -shared -m elf_i386 -z ibtplt --hash-style=sysv -z noseparate-code $NO_DT_RELR_LDFLAGS
#objdump: -dw
.*: +file format .*
diff --git a/ld/testsuite/ld-i386/pr20830.d b/ld/testsuite/ld-i386/pr20830.d
index 8a14a6087a1..78cbc00864a 100644
--- a/ld/testsuite/ld-i386/pr20830.d
+++ b/ld/testsuite/ld-i386/pr20830.d
@@ -1,6 +1,6 @@
#name: PR ld/20830 (.plt.got)
#as: --32
-#ld: -melf_i386 -shared -z relro --ld-generated-unwind-info --hash-style=sysv -z noseparate-code
+#ld: -melf_i386 -shared -z relro --ld-generated-unwind-info --hash-style=sysv -z noseparate-code $NO_DT_RELR_LDFLAGS
#objdump: -dw -Wf
.*: +file format .*
diff --git a/ld/testsuite/ld-i386/pr21997-1.err b/ld/testsuite/ld-i386/pr21997-1.err
new file mode 100644
index 00000000000..e46f1cebeb9
--- /dev/null
+++ b/ld/testsuite/ld-i386/pr21997-1.err
@@ -0,0 +1,2 @@
+.*: tmpdir/pr21997-1b.o: copy relocation against non-copyable protected symbol `protected' in tmpdir/pr21997-1.so
+#...
diff --git a/ld/testsuite/ld-i386/pr26869.d b/ld/testsuite/ld-i386/pr26869.d
index bfd00a70e9b..c8b1acc51ae 100644
--- a/ld/testsuite/ld-i386/pr26869.d
+++ b/ld/testsuite/ld-i386/pr26869.d
@@ -1,5 +1,5 @@
#as: --32
-#ld: -shared -melf_i386
+#ld: -shared -melf_i386 $NO_DT_RELR_LDFLAGS
#readelf: -r -s --wide
Relocation section '.rel.dyn' at offset 0x[a-f0-9]+ contains 1 entry:
diff --git a/ld/testsuite/ld-i386/pr28870.d b/ld/testsuite/ld-i386/pr28870.d
new file mode 100644
index 00000000000..8e9b9fb82eb
--- /dev/null
+++ b/ld/testsuite/ld-i386/pr28870.d
@@ -0,0 +1,10 @@
+#as: --32
+#ld: --no-dynamic-linker -m elf_i386 -pie
+#readelf: -s --wide
+
+#...
+Symbol table '.symtab' contains [0-9]+ entries:
+ Num: Value Size Type Bind Vis Ndx Name
+#...
+ +[a-f0-9]+: 00000002 0 NOTYPE LOCAL DEFAULT ABS foo
+#pass
diff --git a/ld/testsuite/ld-i386/pr28870.s b/ld/testsuite/ld-i386/pr28870.s
new file mode 100644
index 00000000000..8e320470e2d
--- /dev/null
+++ b/ld/testsuite/ld-i386/pr28870.s
@@ -0,0 +1,6 @@
+ .text
+ .globl _start
+_start:
+ addl foo@GOT(%ebx), %eax
+ cmpl $0, foo@GOT(%ebx)
+foo = 2
diff --git a/ld/testsuite/ld-i386/pr28875.err b/ld/testsuite/ld-i386/pr28875.err
new file mode 100644
index 00000000000..46f6f47dfd3
--- /dev/null
+++ b/ld/testsuite/ld-i386/pr28875.err
@@ -0,0 +1,2 @@
+.*: tmpdir/pr28875b.o: non-canonical reference to canonical protected function `internal_f' in tmpdir/pr28875.so
+#...
diff --git a/ld/testsuite/ld-i386/pr28875a.c b/ld/testsuite/ld-i386/pr28875a.c
new file mode 100644
index 00000000000..d24cf29faac
--- /dev/null
+++ b/ld/testsuite/ld-i386/pr28875a.c
@@ -0,0 +1,5 @@
+__attribute__ ((visibility("protected")))
+void
+internal_f (void)
+{
+}
diff --git a/ld/testsuite/ld-i386/pr28875b.c b/ld/testsuite/ld-i386/pr28875b.c
new file mode 100644
index 00000000000..2c0381d4252
--- /dev/null
+++ b/ld/testsuite/ld-i386/pr28875b.c
@@ -0,0 +1,7 @@
+extern void internal_f (void);
+
+int
+main ()
+{
+ return (int) &internal_f;
+}
diff --git a/ld/testsuite/ld-i386/pr28894.d b/ld/testsuite/ld-i386/pr28894.d
new file mode 100644
index 00000000000..a8d1111eb1f
--- /dev/null
+++ b/ld/testsuite/ld-i386/pr28894.d
@@ -0,0 +1,3 @@
+#as: --32
+#ld: -shared -melf_i386 --warn-shared-textrel --fatal-warnings
+#error: .*warning: creating DT_TEXTREL in a shared object
diff --git a/ld/testsuite/ld-i386/pr28894.s b/ld/testsuite/ld-i386/pr28894.s
new file mode 100644
index 00000000000..1d3e3f37f3e
--- /dev/null
+++ b/ld/testsuite/ld-i386/pr28894.s
@@ -0,0 +1,7 @@
+ .text
+ addl foo@INDNTPOFF, %eax
+ .section .tbss,"awT",@nobits
+ .globl foo
+ .hidden foo
+foo:
+ .byte 0
diff --git a/ld/testsuite/ld-i386/report-reloc-1.d b/ld/testsuite/ld-i386/report-reloc-1.d
index 51fbbd8d105..162161592a1 100644
--- a/ld/testsuite/ld-i386/report-reloc-1.d
+++ b/ld/testsuite/ld-i386/report-reloc-1.d
@@ -1,6 +1,6 @@
#source: report-reloc-1.s
#as: --32
-#ld: -pie -melf_i386 -z report-relative-reloc
+#ld: -pie -melf_i386 -z report-relative-reloc $NO_DT_RELR_LDFLAGS
#warning_output: report-reloc-1.l
#readelf: -r --wide
diff --git a/ld/testsuite/ld-ifunc/ifunc-2-i386-now.d b/ld/testsuite/ld-ifunc/ifunc-2-i386-now.d
index 0d3f7b80d06..aae24b2809d 100644
--- a/ld/testsuite/ld-ifunc/ifunc-2-i386-now.d
+++ b/ld/testsuite/ld-ifunc/ifunc-2-i386-now.d
@@ -1,5 +1,5 @@
#source: ifunc-2-i386.s
-#ld: -z now -m elf_i386 -shared --hash-style=sysv -z noseparate-code
+#ld: -z now -m elf_i386 -shared --hash-style=sysv -z noseparate-code $NO_DT_RELR_LDFLAGS
#as: --32
#objdump: -dw
#target: x86_64-*-* i?86-*-*
diff --git a/ld/testsuite/ld-ifunc/ifunc-2-local-i386-now.d b/ld/testsuite/ld-ifunc/ifunc-2-local-i386-now.d
index 48d2084d38f..86083c12a08 100644
--- a/ld/testsuite/ld-ifunc/ifunc-2-local-i386-now.d
+++ b/ld/testsuite/ld-ifunc/ifunc-2-local-i386-now.d
@@ -1,5 +1,5 @@
#source: ifunc-2-local-i386.s
-#ld: -z now -m elf_i386 -shared --hash-style=sysv -z noseparate-code
+#ld: -z now -m elf_i386 -shared --hash-style=sysv -z noseparate-code $NO_DT_RELR_LDFLAGS
#as: --32
#objdump: -dw
#target: x86_64-*-* i?86-*-*
diff --git a/ld/testsuite/ld-ifunc/ifunc-2-local-x86-64-now.d b/ld/testsuite/ld-ifunc/ifunc-2-local-x86-64-now.d
index 14866a8f6cc..be3da08e12b 100644
--- a/ld/testsuite/ld-ifunc/ifunc-2-local-x86-64-now.d
+++ b/ld/testsuite/ld-ifunc/ifunc-2-local-x86-64-now.d
@@ -1,6 +1,6 @@
#source: ifunc-2-local-x86-64.s
#as: --64
-#ld: -z now -shared -melf_x86_64 --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code
+#ld: -z now -shared -melf_x86_64 --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code $NO_DT_RELR_LDFLAGS
#objdump: -dw
#target: x86_64-*-*
diff --git a/ld/testsuite/ld-ifunc/ifunc-2-x86-64-now.d b/ld/testsuite/ld-ifunc/ifunc-2-x86-64-now.d
index 1cd60941ac0..b504f9adedd 100644
--- a/ld/testsuite/ld-ifunc/ifunc-2-x86-64-now.d
+++ b/ld/testsuite/ld-ifunc/ifunc-2-x86-64-now.d
@@ -1,6 +1,6 @@
#source: ifunc-2-x86-64.s
#as: --64
-#ld: -z now -shared -melf_x86_64 --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code
+#ld: -z now -shared -melf_x86_64 --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code $NO_DT_RELR_LDFLAGS
#objdump: -dw
#target: x86_64-*-*
diff --git a/ld/testsuite/ld-ifunc/pr17154-x86-64-now.d b/ld/testsuite/ld-ifunc/pr17154-x86-64-now.d
index 4cc1dc206d5..f6920272b63 100644
--- a/ld/testsuite/ld-ifunc/pr17154-x86-64-now.d
+++ b/ld/testsuite/ld-ifunc/pr17154-x86-64-now.d
@@ -1,6 +1,6 @@
#source: pr17154-x86.s
#as: --64
-#ld: -z now -shared -melf_x86_64 --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code
+#ld: -z now -shared -melf_x86_64 --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code $NO_DT_RELR_LDFLAGS
#objdump: -dw
#target: x86_64-*-*
diff --git a/ld/testsuite/ld-ifunc/pr17154-x86-64.d b/ld/testsuite/ld-ifunc/pr17154-x86-64.d
index 9fb23d410e3..90918426ee5 100644
--- a/ld/testsuite/ld-ifunc/pr17154-x86-64.d
+++ b/ld/testsuite/ld-ifunc/pr17154-x86-64.d
@@ -1,6 +1,6 @@
#source: pr17154-x86.s
#as: --64
-#ld: -shared -melf_x86_64 --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code
+#ld: -shared -melf_x86_64 --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code $NO_DT_RELR_LDFLAGS
#objdump: -dw
#target: x86_64-*-*
diff --git a/ld/testsuite/ld-loongarch-elf/disas-jirl-32.d b/ld/testsuite/ld-loongarch-elf/disas-jirl-32.d
new file mode 100644
index 00000000000..6621c03e5bc
--- /dev/null
+++ b/ld/testsuite/ld-loongarch-elf/disas-jirl-32.d
@@ -0,0 +1,15 @@
+#name: jirl zero-offset symbols for LoongArch32
+#source: disas-jirl-32.s
+#ld: --no-relax
+#objdump: -d
+#skip: loongarch64-*-*
+
+.*:[ ]+file format .*
+
+
+Disassembly of section .text:
+
+00010054 <_start>:
+[ ]+10054:[ ]+1c000014 [ ]+pcaddu12i[ ]+[ ]+\$t8, 0
+[ ]+10058:[ ]+02800294 [ ]+addi.w[ ]+[ ]+\$t8, \$t8, 0
+[ ]+1005c:[ ]+4c000281 [ ]+jirl[ ]+[ ]+\$ra, \$t8, 0
diff --git a/ld/testsuite/ld-loongarch-elf/disas-jirl-32.s b/ld/testsuite/ld-loongarch-elf/disas-jirl-32.s
new file mode 100644
index 00000000000..d6027c9cc9a
--- /dev/null
+++ b/ld/testsuite/ld-loongarch-elf/disas-jirl-32.s
@@ -0,0 +1,5 @@
+ .text
+ .globl _start
+_start:
+ la.local $r20,_start
+ jirl $r1, $r20, 0
diff --git a/ld/testsuite/ld-loongarch-elf/disas-jirl.d b/ld/testsuite/ld-loongarch-elf/disas-jirl.d
index 8c60f634156..f79111a5d8b 100644
--- a/ld/testsuite/ld-loongarch-elf/disas-jirl.d
+++ b/ld/testsuite/ld-loongarch-elf/disas-jirl.d
@@ -1,7 +1,8 @@
-#name: jirl zero-offset symbols
+#name: jirl zero-offset symbols for LoongArch64
#source: disas-jirl.s
#ld: --no-relax
#objdump: -d
+#skip: loongarch32-*-*
.*:[ ]+file format .*
diff --git a/ld/testsuite/ld-loongarch-elf/jmp_op.d b/ld/testsuite/ld-loongarch-elf/jmp_op.d
index e6c50e8e991..c68f7aa49ba 100644
--- a/ld/testsuite/ld-loongarch-elf/jmp_op.d
+++ b/ld/testsuite/ld-loongarch-elf/jmp_op.d
@@ -6,7 +6,7 @@
Disassembly of section .text:
-0000000000000000 <.text>:
+0+0 <.text>:
[ ]+0:[ ]+03400000 [ ]+andi[ ]+[ ]+\$zero, \$zero, 0x0
[ ]+4:[ ]+60000004 [ ]+bgtz[ ]+[ ]+\$a0, 0[ ]+# 0x4
[ ]+[ ]+[ ]+4: R_LARCH_SOP_PUSH_PCREL[ ]+L1
diff --git a/ld/testsuite/ld-loongarch-elf/ld-loongarch-elf.exp b/ld/testsuite/ld-loongarch-elf/ld-loongarch-elf.exp
index c9480ab3323..dfa8ee18865 100644
--- a/ld/testsuite/ld-loongarch-elf/ld-loongarch-elf.exp
+++ b/ld/testsuite/ld-loongarch-elf/ld-loongarch-elf.exp
@@ -26,9 +26,16 @@ proc loongarch_choose_lp64_emul {} {
return "elf64lloongarch"
}
-if [istarget "loongarch*-*-*"] {
+if [istarget "loongarch64-*-*"] {
run_dump_test "jmp_op"
run_dump_test "macro_op"
run_dump_test "syscall"
run_dump_test "disas-jirl"
}
+
+if [istarget "loongarch32-*-*"] {
+ run_dump_test "jmp_op"
+ run_dump_test "macro_op_32"
+ run_dump_test "syscall"
+ run_dump_test "disas-jirl-32"
+}
diff --git a/ld/testsuite/ld-loongarch-elf/macro_op.d b/ld/testsuite/ld-loongarch-elf/macro_op.d
index 548553eedbc..af100608824 100644
--- a/ld/testsuite/ld-loongarch-elf/macro_op.d
+++ b/ld/testsuite/ld-loongarch-elf/macro_op.d
@@ -1,12 +1,13 @@
#as:
#objdump: -dr
+#skip: loongarch32-*-*
.*:[ ]+file format .*
Disassembly of section .text:
-0000000000000000 <.text>:
+0+0 <.text>:
[ ]+0:[ ]+00150004 [ ]+move[ ]+[ ]+\$a0, \$zero
[ ]+4:[ ]+02bffc04 [ ]+addi.w[ ]+[ ]+\$a0, \$zero, -1\(0xfff\)
[ ]+8:[ ]+00150004 [ ]+move[ ]+[ ]+\$a0, \$zero
diff --git a/ld/testsuite/ld-loongarch-elf/macro_op_32.d b/ld/testsuite/ld-loongarch-elf/macro_op_32.d
new file mode 100644
index 00000000000..24906ecfd04
--- /dev/null
+++ b/ld/testsuite/ld-loongarch-elf/macro_op_32.d
@@ -0,0 +1,729 @@
+#as:
+#objdump: -dr
+#skip: loongarch64-*-*
+
+.*:[ ]+file format .*
+
+
+Disassembly of section .text:
+
+0+0 <.text>:
+[ ]+0:[ ]+00150004 [ ]+move[ ]+[ ]+\$a0, \$zero
+[ ]+4:[ ]+02bffc04 [ ]+addi.w[ ]+[ ]+\$a0, \$zero, -1\(0xfff\)
+[ ]+8:[ ]+00150004 [ ]+move[ ]+[ ]+\$a0, \$zero
+[ ]+c:[ ]+02bffc04 [ ]+addi.w[ ]+[ ]+\$a0, \$zero, -1\(0xfff\)
+[ ]+10:[ ]+1c000004 [ ]+pcaddu12i[ ]+[ ]+\$a0, 0
+[ ]+[ ]+[ ]+10: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_\+0x800
+[ ]+[ ]+[ ]+10: R_LARCH_SOP_PUSH_GPREL[ ]+L1
+[ ]+[ ]+[ ]+10: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+10: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x20
+[ ]+[ ]+[ ]+10: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+10: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x2c
+[ ]+[ ]+[ ]+10: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+10: R_LARCH_SOP_POP_32_S_5_20[ ]+\*ABS\*
+[ ]+14:[ ]+28800084 [ ]+ld.w[ ]+[ ]+\$a0, \$a0, 0
+[ ]+[ ]+[ ]+14: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_\+0x4
+[ ]+[ ]+[ ]+14: R_LARCH_SOP_PUSH_GPREL[ ]+L1
+[ ]+[ ]+[ ]+14: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+14: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_\+0x804
+[ ]+[ ]+[ ]+14: R_LARCH_SOP_PUSH_GPREL[ ]+L1
+[ ]+[ ]+[ ]+14: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+14: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0xc
+[ ]+[ ]+[ ]+14: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+14: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0xc
+[ ]+[ ]+[ ]+14: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+14: R_LARCH_SOP_SUB[ ]+\*ABS\*
+[ ]+[ ]+[ ]+14: R_LARCH_SOP_POP_32_S_10_12[ ]+\*ABS\*
+[ ]+18:[ ]+1c000004 [ ]+pcaddu12i[ ]+[ ]+\$a0, 0
+[ ]+[ ]+[ ]+18: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_\+0x800
+[ ]+[ ]+[ ]+18: R_LARCH_SOP_PUSH_GPREL[ ]+L1
+[ ]+[ ]+[ ]+18: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+18: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x20
+[ ]+[ ]+[ ]+18: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+18: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x2c
+[ ]+[ ]+[ ]+18: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+18: R_LARCH_SOP_POP_32_S_5_20[ ]+\*ABS\*
+[ ]+1c:[ ]+28800084 [ ]+ld.w[ ]+[ ]+\$a0, \$a0, 0
+[ ]+[ ]+[ ]+1c: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_\+0x4
+[ ]+[ ]+[ ]+1c: R_LARCH_SOP_PUSH_GPREL[ ]+L1
+[ ]+[ ]+[ ]+1c: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+1c: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_\+0x804
+[ ]+[ ]+[ ]+1c: R_LARCH_SOP_PUSH_GPREL[ ]+L1
+[ ]+[ ]+[ ]+1c: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+1c: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0xc
+[ ]+[ ]+[ ]+1c: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+1c: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0xc
+[ ]+[ ]+[ ]+1c: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+1c: R_LARCH_SOP_SUB[ ]+\*ABS\*
+[ ]+[ ]+[ ]+1c: R_LARCH_SOP_POP_32_S_10_12[ ]+\*ABS\*
+[ ]+20:[ ]+1c000004 [ ]+pcaddu12i[ ]+[ ]+\$a0, 0
+[ ]+[ ]+[ ]+20: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_
+[ ]+[ ]+[ ]+20: R_LARCH_SOP_PUSH_GPREL[ ]+L1
+[ ]+[ ]+[ ]+20: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+20: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_\-0x80000000
+[ ]+[ ]+[ ]+20: R_LARCH_SOP_PUSH_GPREL[ ]+L1
+[ ]+[ ]+[ ]+20: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+20: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x20
+[ ]+[ ]+[ ]+20: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+20: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x20
+[ ]+[ ]+[ ]+20: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+20: R_LARCH_SOP_SUB[ ]+\*ABS\*
+[ ]+[ ]+[ ]+20: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x20
+[ ]+[ ]+[ ]+20: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+20: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x2c
+[ ]+[ ]+[ ]+20: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+20: R_LARCH_SOP_POP_32_S_5_20[ ]+\*ABS\*
+[ ]+24:[ ]+03800005 [ ]+ori[ ]+[ ]+\$a1, \$zero, 0x0
+[ ]+[ ]+[ ]+24: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_\+0x4
+[ ]+[ ]+[ ]+24: R_LARCH_SOP_PUSH_GPREL[ ]+L1
+[ ]+[ ]+[ ]+24: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+24: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_\-0x7ffffffc
+[ ]+[ ]+[ ]+24: R_LARCH_SOP_PUSH_GPREL[ ]+L1
+[ ]+[ ]+[ ]+24: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+24: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x20
+[ ]+[ ]+[ ]+24: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+24: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x20
+[ ]+[ ]+[ ]+24: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+24: R_LARCH_SOP_SUB[ ]+\*ABS\*
+[ ]+[ ]+[ ]+24: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0xfff
+[ ]+[ ]+[ ]+24: R_LARCH_SOP_AND[ ]+\*ABS\*
+[ ]+[ ]+[ ]+24: R_LARCH_SOP_POP_32_U_10_12[ ]+\*ABS\*
+[ ]+28:[ ]+16000005 [ ]+lu32i.d[ ]+[ ]+\$a1, 0
+[ ]+[ ]+[ ]+28: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_\-0x7ffffff8
+[ ]+[ ]+[ ]+28: R_LARCH_SOP_PUSH_GPREL[ ]+L1
+[ ]+[ ]+[ ]+28: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+28: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0xc
+[ ]+[ ]+[ ]+28: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+28: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x2c
+[ ]+[ ]+[ ]+28: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+28: R_LARCH_SOP_POP_32_S_5_20[ ]+\*ABS\*
+[ ]+2c:[ ]+030000a5 [ ]+lu52i.d[ ]+[ ]+\$a1, \$a1, 0
+[ ]+[ ]+[ ]+2c: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_\-0x7ffffff4
+[ ]+[ ]+[ ]+2c: R_LARCH_SOP_PUSH_GPREL[ ]+L1
+[ ]+[ ]+[ ]+2c: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+2c: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x34
+[ ]+[ ]+[ ]+2c: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+2c: R_LARCH_SOP_POP_32_S_10_12[ ]+\*ABS\*
+[ ]+30:[ ]+380c1484 [ ]+ldx.d[ ]+[ ]+\$a0, \$a0, \$a1
+[ ]+34:[ ]+1c000004 [ ]+pcaddu12i[ ]+[ ]+\$a0, 0
+[ ]+[ ]+[ ]+34: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_\+0x800
+[ ]+[ ]+[ ]+34: R_LARCH_SOP_PUSH_GPREL[ ]+L1
+[ ]+[ ]+[ ]+34: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+34: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x20
+[ ]+[ ]+[ ]+34: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+34: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x2c
+[ ]+[ ]+[ ]+34: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+34: R_LARCH_SOP_POP_32_S_5_20[ ]+\*ABS\*
+[ ]+38:[ ]+28800084 [ ]+ld.w[ ]+[ ]+\$a0, \$a0, 0
+[ ]+[ ]+[ ]+38: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_\+0x4
+[ ]+[ ]+[ ]+38: R_LARCH_SOP_PUSH_GPREL[ ]+L1
+[ ]+[ ]+[ ]+38: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+38: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_\+0x804
+[ ]+[ ]+[ ]+38: R_LARCH_SOP_PUSH_GPREL[ ]+L1
+[ ]+[ ]+[ ]+38: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+38: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0xc
+[ ]+[ ]+[ ]+38: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+38: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0xc
+[ ]+[ ]+[ ]+38: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+38: R_LARCH_SOP_SUB[ ]+\*ABS\*
+[ ]+[ ]+[ ]+38: R_LARCH_SOP_POP_32_S_10_12[ ]+\*ABS\*
+[ ]+3c:[ ]+1c000004 [ ]+pcaddu12i[ ]+[ ]+\$a0, 0
+[ ]+[ ]+[ ]+3c: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_
+[ ]+[ ]+[ ]+3c: R_LARCH_SOP_PUSH_GPREL[ ]+L1
+[ ]+[ ]+[ ]+3c: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+3c: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_\-0x80000000
+[ ]+[ ]+[ ]+3c: R_LARCH_SOP_PUSH_GPREL[ ]+L1
+[ ]+[ ]+[ ]+3c: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+3c: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x20
+[ ]+[ ]+[ ]+3c: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+3c: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x20
+[ ]+[ ]+[ ]+3c: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+3c: R_LARCH_SOP_SUB[ ]+\*ABS\*
+[ ]+[ ]+[ ]+3c: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x20
+[ ]+[ ]+[ ]+3c: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+3c: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x2c
+[ ]+[ ]+[ ]+3c: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+3c: R_LARCH_SOP_POP_32_S_5_20[ ]+\*ABS\*
+[ ]+40:[ ]+03800005 [ ]+ori[ ]+[ ]+\$a1, \$zero, 0x0
+[ ]+[ ]+[ ]+40: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_\+0x4
+[ ]+[ ]+[ ]+40: R_LARCH_SOP_PUSH_GPREL[ ]+L1
+[ ]+[ ]+[ ]+40: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+40: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_\-0x7ffffffc
+[ ]+[ ]+[ ]+40: R_LARCH_SOP_PUSH_GPREL[ ]+L1
+[ ]+[ ]+[ ]+40: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+40: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x20
+[ ]+[ ]+[ ]+40: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+40: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x20
+[ ]+[ ]+[ ]+40: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+40: R_LARCH_SOP_SUB[ ]+\*ABS\*
+[ ]+[ ]+[ ]+40: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0xfff
+[ ]+[ ]+[ ]+40: R_LARCH_SOP_AND[ ]+\*ABS\*
+[ ]+[ ]+[ ]+40: R_LARCH_SOP_POP_32_U_10_12[ ]+\*ABS\*
+[ ]+44:[ ]+16000005 [ ]+lu32i.d[ ]+[ ]+\$a1, 0
+[ ]+[ ]+[ ]+44: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_\-0x7ffffff8
+[ ]+[ ]+[ ]+44: R_LARCH_SOP_PUSH_GPREL[ ]+L1
+[ ]+[ ]+[ ]+44: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+44: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0xc
+[ ]+[ ]+[ ]+44: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+44: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x2c
+[ ]+[ ]+[ ]+44: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+44: R_LARCH_SOP_POP_32_S_5_20[ ]+\*ABS\*
+[ ]+48:[ ]+030000a5 [ ]+lu52i.d[ ]+[ ]+\$a1, \$a1, 0
+[ ]+[ ]+[ ]+48: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_\-0x7ffffff4
+[ ]+[ ]+[ ]+48: R_LARCH_SOP_PUSH_GPREL[ ]+L1
+[ ]+[ ]+[ ]+48: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+48: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x34
+[ ]+[ ]+[ ]+48: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+48: R_LARCH_SOP_POP_32_S_10_12[ ]+\*ABS\*
+[ ]+4c:[ ]+380c1484 [ ]+ldx.d[ ]+[ ]+\$a0, \$a0, \$a1
+[ ]+50:[ ]+1c000004 [ ]+pcaddu12i[ ]+[ ]+\$a0, 0
+[ ]+[ ]+[ ]+50: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_\+0x800
+[ ]+[ ]+[ ]+50: R_LARCH_SOP_PUSH_GPREL[ ]+L1
+[ ]+[ ]+[ ]+50: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+50: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x20
+[ ]+[ ]+[ ]+50: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+50: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x2c
+[ ]+[ ]+[ ]+50: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+50: R_LARCH_SOP_POP_32_S_5_20[ ]+\*ABS\*
+[ ]+54:[ ]+28800084 [ ]+ld.w[ ]+[ ]+\$a0, \$a0, 0
+[ ]+[ ]+[ ]+54: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_\+0x4
+[ ]+[ ]+[ ]+54: R_LARCH_SOP_PUSH_GPREL[ ]+L1
+[ ]+[ ]+[ ]+54: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+54: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_\+0x804
+[ ]+[ ]+[ ]+54: R_LARCH_SOP_PUSH_GPREL[ ]+L1
+[ ]+[ ]+[ ]+54: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+54: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0xc
+[ ]+[ ]+[ ]+54: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+54: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0xc
+[ ]+[ ]+[ ]+54: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+54: R_LARCH_SOP_SUB[ ]+\*ABS\*
+[ ]+[ ]+[ ]+54: R_LARCH_SOP_POP_32_S_10_12[ ]+\*ABS\*
+[ ]+58:[ ]+1c000004 [ ]+pcaddu12i[ ]+[ ]+\$a0, 0
+[ ]+[ ]+[ ]+58: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_
+[ ]+[ ]+[ ]+58: R_LARCH_SOP_PUSH_GPREL[ ]+L1
+[ ]+[ ]+[ ]+58: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+58: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_\-0x80000000
+[ ]+[ ]+[ ]+58: R_LARCH_SOP_PUSH_GPREL[ ]+L1
+[ ]+[ ]+[ ]+58: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+58: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x20
+[ ]+[ ]+[ ]+58: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+58: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x20
+[ ]+[ ]+[ ]+58: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+58: R_LARCH_SOP_SUB[ ]+\*ABS\*
+[ ]+[ ]+[ ]+58: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x20
+[ ]+[ ]+[ ]+58: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+58: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x2c
+[ ]+[ ]+[ ]+58: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+58: R_LARCH_SOP_POP_32_S_5_20[ ]+\*ABS\*
+[ ]+5c:[ ]+03800005 [ ]+ori[ ]+[ ]+\$a1, \$zero, 0x0
+[ ]+[ ]+[ ]+5c: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_\+0x4
+[ ]+[ ]+[ ]+5c: R_LARCH_SOP_PUSH_GPREL[ ]+L1
+[ ]+[ ]+[ ]+5c: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+5c: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_\-0x7ffffffc
+[ ]+[ ]+[ ]+5c: R_LARCH_SOP_PUSH_GPREL[ ]+L1
+[ ]+[ ]+[ ]+5c: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+5c: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x20
+[ ]+[ ]+[ ]+5c: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+5c: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x20
+[ ]+[ ]+[ ]+5c: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+5c: R_LARCH_SOP_SUB[ ]+\*ABS\*
+[ ]+[ ]+[ ]+5c: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0xfff
+[ ]+[ ]+[ ]+5c: R_LARCH_SOP_AND[ ]+\*ABS\*
+[ ]+[ ]+[ ]+5c: R_LARCH_SOP_POP_32_U_10_12[ ]+\*ABS\*
+[ ]+60:[ ]+16000005 [ ]+lu32i.d[ ]+[ ]+\$a1, 0
+[ ]+[ ]+[ ]+60: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_\-0x7ffffff8
+[ ]+[ ]+[ ]+60: R_LARCH_SOP_PUSH_GPREL[ ]+L1
+[ ]+[ ]+[ ]+60: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+60: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0xc
+[ ]+[ ]+[ ]+60: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+60: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x2c
+[ ]+[ ]+[ ]+60: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+60: R_LARCH_SOP_POP_32_S_5_20[ ]+\*ABS\*
+[ ]+64:[ ]+030000a5 [ ]+lu52i.d[ ]+[ ]+\$a1, \$a1, 0
+[ ]+[ ]+[ ]+64: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_\-0x7ffffff4
+[ ]+[ ]+[ ]+64: R_LARCH_SOP_PUSH_GPREL[ ]+L1
+[ ]+[ ]+[ ]+64: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+64: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x34
+[ ]+[ ]+[ ]+64: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+64: R_LARCH_SOP_POP_32_S_10_12[ ]+\*ABS\*
+[ ]+68:[ ]+380c1484 [ ]+ldx.d[ ]+[ ]+\$a0, \$a0, \$a1
+[ ]+6c:[ ]+1c000004 [ ]+pcaddu12i[ ]+[ ]+\$a0, 0
+[ ]+[ ]+[ ]+6c: R_LARCH_SOP_PUSH_PCREL[ ]+L1\+0x800
+[ ]+[ ]+[ ]+6c: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x20
+[ ]+[ ]+[ ]+6c: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+6c: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x2c
+[ ]+[ ]+[ ]+6c: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+6c: R_LARCH_SOP_POP_32_S_5_20[ ]+\*ABS\*
+[ ]+70:[ ]+02800084 [ ]+addi.w[ ]+[ ]+\$a0, \$a0, 0
+[ ]+[ ]+[ ]+70: R_LARCH_SOP_PUSH_PCREL[ ]+L1\+0x4
+[ ]+[ ]+[ ]+70: R_LARCH_SOP_PUSH_PCREL[ ]+L1\+0x804
+[ ]+[ ]+[ ]+70: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0xc
+[ ]+[ ]+[ ]+70: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+70: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0xc
+[ ]+[ ]+[ ]+70: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+70: R_LARCH_SOP_SUB[ ]+\*ABS\*
+[ ]+[ ]+[ ]+70: R_LARCH_SOP_POP_32_S_10_12[ ]+\*ABS\*
+[ ]+74:[ ]+1c000004 [ ]+pcaddu12i[ ]+[ ]+\$a0, 0
+[ ]+[ ]+[ ]+74: R_LARCH_SOP_PUSH_PCREL[ ]+L1
+[ ]+[ ]+[ ]+74: R_LARCH_SOP_PUSH_PCREL[ ]+L1\-0x80000000
+[ ]+[ ]+[ ]+74: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x20
+[ ]+[ ]+[ ]+74: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+74: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x20
+[ ]+[ ]+[ ]+74: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+74: R_LARCH_SOP_SUB[ ]+\*ABS\*
+[ ]+[ ]+[ ]+74: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x20
+[ ]+[ ]+[ ]+74: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+74: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x2c
+[ ]+[ ]+[ ]+74: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+74: R_LARCH_SOP_POP_32_S_5_20[ ]+\*ABS\*
+[ ]+78:[ ]+03800005 [ ]+ori[ ]+[ ]+\$a1, \$zero, 0x0
+[ ]+[ ]+[ ]+78: R_LARCH_SOP_PUSH_PCREL[ ]+L1\+0x4
+[ ]+[ ]+[ ]+78: R_LARCH_SOP_PUSH_PCREL[ ]+L1\-0x7ffffffc
+[ ]+[ ]+[ ]+78: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x20
+[ ]+[ ]+[ ]+78: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+78: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x20
+[ ]+[ ]+[ ]+78: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+78: R_LARCH_SOP_SUB[ ]+\*ABS\*
+[ ]+[ ]+[ ]+78: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0xfff
+[ ]+[ ]+[ ]+78: R_LARCH_SOP_AND[ ]+\*ABS\*
+[ ]+[ ]+[ ]+78: R_LARCH_SOP_POP_32_U_10_12[ ]+\*ABS\*
+[ ]+7c:[ ]+16000005 [ ]+lu32i.d[ ]+[ ]+\$a1, 0
+[ ]+[ ]+[ ]+7c: R_LARCH_SOP_PUSH_PCREL[ ]+L1\-0x7ffffff8
+[ ]+[ ]+[ ]+7c: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0xc
+[ ]+[ ]+[ ]+7c: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+7c: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x2c
+[ ]+[ ]+[ ]+7c: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+7c: R_LARCH_SOP_POP_32_S_5_20[ ]+\*ABS\*
+[ ]+80:[ ]+030000a5 [ ]+lu52i.d[ ]+[ ]+\$a1, \$a1, 0
+[ ]+[ ]+[ ]+80: R_LARCH_SOP_PUSH_PCREL[ ]+L1\-0x7ffffff4
+[ ]+[ ]+[ ]+80: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x34
+[ ]+[ ]+[ ]+80: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+80: R_LARCH_SOP_POP_32_S_10_12[ ]+\*ABS\*
+[ ]+84:[ ]+00109484 [ ]+add.d[ ]+[ ]+\$a0, \$a0, \$a1
+[ ]+88:[ ]+1c000004 [ ]+pcaddu12i[ ]+[ ]+\$a0, 0
+[ ]+[ ]+[ ]+88: R_LARCH_SOP_PUSH_PCREL[ ]+L1\+0x800
+[ ]+[ ]+[ ]+88: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x20
+[ ]+[ ]+[ ]+88: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+88: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x2c
+[ ]+[ ]+[ ]+88: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+88: R_LARCH_SOP_POP_32_S_5_20[ ]+\*ABS\*
+[ ]+8c:[ ]+02800084 [ ]+addi.w[ ]+[ ]+\$a0, \$a0, 0
+[ ]+[ ]+[ ]+8c: R_LARCH_SOP_PUSH_PCREL[ ]+L1\+0x4
+[ ]+[ ]+[ ]+8c: R_LARCH_SOP_PUSH_PCREL[ ]+L1\+0x804
+[ ]+[ ]+[ ]+8c: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0xc
+[ ]+[ ]+[ ]+8c: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+8c: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0xc
+[ ]+[ ]+[ ]+8c: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+8c: R_LARCH_SOP_SUB[ ]+\*ABS\*
+[ ]+[ ]+[ ]+8c: R_LARCH_SOP_POP_32_S_10_12[ ]+\*ABS\*
+[ ]+90:[ ]+1c000004 [ ]+pcaddu12i[ ]+[ ]+\$a0, 0
+[ ]+[ ]+[ ]+90: R_LARCH_SOP_PUSH_PCREL[ ]+L1
+[ ]+[ ]+[ ]+90: R_LARCH_SOP_PUSH_PCREL[ ]+L1\-0x80000000
+[ ]+[ ]+[ ]+90: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x20
+[ ]+[ ]+[ ]+90: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+90: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x20
+[ ]+[ ]+[ ]+90: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+90: R_LARCH_SOP_SUB[ ]+\*ABS\*
+[ ]+[ ]+[ ]+90: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x20
+[ ]+[ ]+[ ]+90: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+90: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x2c
+[ ]+[ ]+[ ]+90: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+90: R_LARCH_SOP_POP_32_S_5_20[ ]+\*ABS\*
+[ ]+94:[ ]+03800005 [ ]+ori[ ]+[ ]+\$a1, \$zero, 0x0
+[ ]+[ ]+[ ]+94: R_LARCH_SOP_PUSH_PCREL[ ]+L1\+0x4
+[ ]+[ ]+[ ]+94: R_LARCH_SOP_PUSH_PCREL[ ]+L1\-0x7ffffffc
+[ ]+[ ]+[ ]+94: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x20
+[ ]+[ ]+[ ]+94: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+94: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x20
+[ ]+[ ]+[ ]+94: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+94: R_LARCH_SOP_SUB[ ]+\*ABS\*
+[ ]+[ ]+[ ]+94: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0xfff
+[ ]+[ ]+[ ]+94: R_LARCH_SOP_AND[ ]+\*ABS\*
+[ ]+[ ]+[ ]+94: R_LARCH_SOP_POP_32_U_10_12[ ]+\*ABS\*
+[ ]+98:[ ]+16000005 [ ]+lu32i.d[ ]+[ ]+\$a1, 0
+[ ]+[ ]+[ ]+98: R_LARCH_SOP_PUSH_PCREL[ ]+L1\-0x7ffffff8
+[ ]+[ ]+[ ]+98: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0xc
+[ ]+[ ]+[ ]+98: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+98: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x2c
+[ ]+[ ]+[ ]+98: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+98: R_LARCH_SOP_POP_32_S_5_20[ ]+\*ABS\*
+[ ]+9c:[ ]+030000a5 [ ]+lu52i.d[ ]+[ ]+\$a1, \$a1, 0
+[ ]+[ ]+[ ]+9c: R_LARCH_SOP_PUSH_PCREL[ ]+L1\-0x7ffffff4
+[ ]+[ ]+[ ]+9c: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x34
+[ ]+[ ]+[ ]+9c: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+9c: R_LARCH_SOP_POP_32_S_10_12[ ]+\*ABS\*
+[ ]+a0:[ ]+00109484 [ ]+add.d[ ]+[ ]+\$a0, \$a0, \$a1
+[ ]+a4:[ ]+14000004 [ ]+lu12i.w[ ]+[ ]+\$a0, 0
+[ ]+[ ]+[ ]+a4: R_LARCH_MARK_LA[ ]+L1
+[ ]+[ ]+[ ]+a4: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+L1
+[ ]+[ ]+[ ]+a4: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0xc
+[ ]+[ ]+[ ]+a4: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+a4: R_LARCH_SOP_POP_32_S_5_20[ ]+\*ABS\*
+[ ]+a8:[ ]+03800084 [ ]+ori[ ]+[ ]+\$a0, \$a0, 0x0
+[ ]+[ ]+[ ]+a8: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+L1
+[ ]+[ ]+[ ]+a8: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0xfff
+[ ]+[ ]+[ ]+a8: R_LARCH_SOP_AND[ ]+\*ABS\*
+[ ]+[ ]+[ ]+a8: R_LARCH_SOP_POP_32_U_10_12[ ]+\*ABS\*
+[ ]+ac:[ ]+1c000004 [ ]+pcaddu12i[ ]+[ ]+\$a0, 0
+[ ]+[ ]+[ ]+ac: R_LARCH_SOP_PUSH_PCREL[ ]+L1\+0x800
+[ ]+[ ]+[ ]+ac: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x20
+[ ]+[ ]+[ ]+ac: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+ac: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x2c
+[ ]+[ ]+[ ]+ac: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+ac: R_LARCH_SOP_POP_32_S_5_20[ ]+\*ABS\*
+[ ]+b0:[ ]+02800084 [ ]+addi.w[ ]+[ ]+\$a0, \$a0, 0
+[ ]+[ ]+[ ]+b0: R_LARCH_SOP_PUSH_PCREL[ ]+L1\+0x4
+[ ]+[ ]+[ ]+b0: R_LARCH_SOP_PUSH_PCREL[ ]+L1\+0x804
+[ ]+[ ]+[ ]+b0: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0xc
+[ ]+[ ]+[ ]+b0: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+b0: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0xc
+[ ]+[ ]+[ ]+b0: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+b0: R_LARCH_SOP_SUB[ ]+\*ABS\*
+[ ]+[ ]+[ ]+b0: R_LARCH_SOP_POP_32_S_10_12[ ]+\*ABS\*
+[ ]+b4:[ ]+1c000004 [ ]+pcaddu12i[ ]+[ ]+\$a0, 0
+[ ]+[ ]+[ ]+b4: R_LARCH_SOP_PUSH_PCREL[ ]+L1\+0x800
+[ ]+[ ]+[ ]+b4: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x20
+[ ]+[ ]+[ ]+b4: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+b4: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x2c
+[ ]+[ ]+[ ]+b4: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+b4: R_LARCH_SOP_POP_32_S_5_20[ ]+\*ABS\*
+[ ]+b8:[ ]+02800084 [ ]+addi.w[ ]+[ ]+\$a0, \$a0, 0
+[ ]+[ ]+[ ]+b8: R_LARCH_SOP_PUSH_PCREL[ ]+L1\+0x4
+[ ]+[ ]+[ ]+b8: R_LARCH_SOP_PUSH_PCREL[ ]+L1\+0x804
+[ ]+[ ]+[ ]+b8: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0xc
+[ ]+[ ]+[ ]+b8: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+b8: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0xc
+[ ]+[ ]+[ ]+b8: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+b8: R_LARCH_SOP_SUB[ ]+\*ABS\*
+[ ]+[ ]+[ ]+b8: R_LARCH_SOP_POP_32_S_10_12[ ]+\*ABS\*
+[ ]+bc:[ ]+1c000004 [ ]+pcaddu12i[ ]+[ ]+\$a0, 0
+[ ]+[ ]+[ ]+bc: R_LARCH_SOP_PUSH_PCREL[ ]+L1
+[ ]+[ ]+[ ]+bc: R_LARCH_SOP_PUSH_PCREL[ ]+L1\-0x80000000
+[ ]+[ ]+[ ]+bc: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x20
+[ ]+[ ]+[ ]+bc: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+bc: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x20
+[ ]+[ ]+[ ]+bc: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+bc: R_LARCH_SOP_SUB[ ]+\*ABS\*
+[ ]+[ ]+[ ]+bc: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x20
+[ ]+[ ]+[ ]+bc: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+bc: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x2c
+[ ]+[ ]+[ ]+bc: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+bc: R_LARCH_SOP_POP_32_S_5_20[ ]+\*ABS\*
+[ ]+c0:[ ]+03800005 [ ]+ori[ ]+[ ]+\$a1, \$zero, 0x0
+[ ]+[ ]+[ ]+c0: R_LARCH_SOP_PUSH_PCREL[ ]+L1\+0x4
+[ ]+[ ]+[ ]+c0: R_LARCH_SOP_PUSH_PCREL[ ]+L1\-0x7ffffffc
+[ ]+[ ]+[ ]+c0: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x20
+[ ]+[ ]+[ ]+c0: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+c0: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x20
+[ ]+[ ]+[ ]+c0: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+c0: R_LARCH_SOP_SUB[ ]+\*ABS\*
+[ ]+[ ]+[ ]+c0: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0xfff
+[ ]+[ ]+[ ]+c0: R_LARCH_SOP_AND[ ]+\*ABS\*
+[ ]+[ ]+[ ]+c0: R_LARCH_SOP_POP_32_U_10_12[ ]+\*ABS\*
+[ ]+c4:[ ]+16000005 [ ]+lu32i.d[ ]+[ ]+\$a1, 0
+[ ]+[ ]+[ ]+c4: R_LARCH_SOP_PUSH_PCREL[ ]+L1\-0x7ffffff8
+[ ]+[ ]+[ ]+c4: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0xc
+[ ]+[ ]+[ ]+c4: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+c4: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x2c
+[ ]+[ ]+[ ]+c4: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+c4: R_LARCH_SOP_POP_32_S_5_20[ ]+\*ABS\*
+[ ]+c8:[ ]+030000a5 [ ]+lu52i.d[ ]+[ ]+\$a1, \$a1, 0
+[ ]+[ ]+[ ]+c8: R_LARCH_SOP_PUSH_PCREL[ ]+L1\-0x7ffffff4
+[ ]+[ ]+[ ]+c8: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x34
+[ ]+[ ]+[ ]+c8: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+c8: R_LARCH_SOP_POP_32_S_10_12[ ]+\*ABS\*
+[ ]+cc:[ ]+00109484 [ ]+add.d[ ]+[ ]+\$a0, \$a0, \$a1
+[ ]+d0:[ ]+1c000004 [ ]+pcaddu12i[ ]+[ ]+\$a0, 0
+[ ]+[ ]+[ ]+d0: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_\+0x800
+[ ]+[ ]+[ ]+d0: R_LARCH_SOP_PUSH_GPREL[ ]+L1
+[ ]+[ ]+[ ]+d0: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+d0: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x20
+[ ]+[ ]+[ ]+d0: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+d0: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x2c
+[ ]+[ ]+[ ]+d0: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+d0: R_LARCH_SOP_POP_32_S_5_20[ ]+\*ABS\*
+[ ]+d4:[ ]+28800084 [ ]+ld.w[ ]+[ ]+\$a0, \$a0, 0
+[ ]+[ ]+[ ]+d4: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_\+0x4
+[ ]+[ ]+[ ]+d4: R_LARCH_SOP_PUSH_GPREL[ ]+L1
+[ ]+[ ]+[ ]+d4: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+d4: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_\+0x804
+[ ]+[ ]+[ ]+d4: R_LARCH_SOP_PUSH_GPREL[ ]+L1
+[ ]+[ ]+[ ]+d4: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+d4: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0xc
+[ ]+[ ]+[ ]+d4: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+d4: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0xc
+[ ]+[ ]+[ ]+d4: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+d4: R_LARCH_SOP_SUB[ ]+\*ABS\*
+[ ]+[ ]+[ ]+d4: R_LARCH_SOP_POP_32_S_10_12[ ]+\*ABS\*
+[ ]+d8:[ ]+1c000004 [ ]+pcaddu12i[ ]+[ ]+\$a0, 0
+[ ]+[ ]+[ ]+d8: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_
+[ ]+[ ]+[ ]+d8: R_LARCH_SOP_PUSH_GPREL[ ]+L1
+[ ]+[ ]+[ ]+d8: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+d8: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_\-0x80000000
+[ ]+[ ]+[ ]+d8: R_LARCH_SOP_PUSH_GPREL[ ]+L1
+[ ]+[ ]+[ ]+d8: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+d8: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x20
+[ ]+[ ]+[ ]+d8: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+d8: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x20
+[ ]+[ ]+[ ]+d8: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+d8: R_LARCH_SOP_SUB[ ]+\*ABS\*
+[ ]+[ ]+[ ]+d8: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x20
+[ ]+[ ]+[ ]+d8: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+d8: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x2c
+[ ]+[ ]+[ ]+d8: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+d8: R_LARCH_SOP_POP_32_S_5_20[ ]+\*ABS\*
+[ ]+dc:[ ]+03800005 [ ]+ori[ ]+[ ]+\$a1, \$zero, 0x0
+[ ]+[ ]+[ ]+dc: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_\+0x4
+[ ]+[ ]+[ ]+dc: R_LARCH_SOP_PUSH_GPREL[ ]+L1
+[ ]+[ ]+[ ]+dc: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+dc: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_\-0x7ffffffc
+[ ]+[ ]+[ ]+dc: R_LARCH_SOP_PUSH_GPREL[ ]+L1
+[ ]+[ ]+[ ]+dc: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+dc: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x20
+[ ]+[ ]+[ ]+dc: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+dc: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x20
+[ ]+[ ]+[ ]+dc: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+dc: R_LARCH_SOP_SUB[ ]+\*ABS\*
+[ ]+[ ]+[ ]+dc: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0xfff
+[ ]+[ ]+[ ]+dc: R_LARCH_SOP_AND[ ]+\*ABS\*
+[ ]+[ ]+[ ]+dc: R_LARCH_SOP_POP_32_U_10_12[ ]+\*ABS\*
+[ ]+e0:[ ]+16000005 [ ]+lu32i.d[ ]+[ ]+\$a1, 0
+[ ]+[ ]+[ ]+e0: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_\-0x7ffffff8
+[ ]+[ ]+[ ]+e0: R_LARCH_SOP_PUSH_GPREL[ ]+L1
+[ ]+[ ]+[ ]+e0: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+e0: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0xc
+[ ]+[ ]+[ ]+e0: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+e0: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x2c
+[ ]+[ ]+[ ]+e0: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+e0: R_LARCH_SOP_POP_32_S_5_20[ ]+\*ABS\*
+[ ]+e4:[ ]+030000a5 [ ]+lu52i.d[ ]+[ ]+\$a1, \$a1, 0
+[ ]+[ ]+[ ]+e4: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_\-0x7ffffff4
+[ ]+[ ]+[ ]+e4: R_LARCH_SOP_PUSH_GPREL[ ]+L1
+[ ]+[ ]+[ ]+e4: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+e4: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x34
+[ ]+[ ]+[ ]+e4: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+e4: R_LARCH_SOP_POP_32_S_10_12[ ]+\*ABS\*
+[ ]+e8:[ ]+380c1484 [ ]+ldx.d[ ]+[ ]+\$a0, \$a0, \$a1
+[ ]+ec:[ ]+14000004 [ ]+lu12i.w[ ]+[ ]+\$a0, 0
+[ ]+[ ]+[ ]+ec: R_LARCH_SOP_PUSH_TLS_TPREL[ ]+L1
+[ ]+[ ]+[ ]+ec: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0xc
+[ ]+[ ]+[ ]+ec: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+ec: R_LARCH_SOP_POP_32_S_5_20[ ]+\*ABS\*
+[ ]+f0:[ ]+03800084 [ ]+ori[ ]+[ ]+\$a0, \$a0, 0x0
+[ ]+[ ]+[ ]+f0: R_LARCH_SOP_PUSH_TLS_TPREL[ ]+L1
+[ ]+[ ]+[ ]+f0: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0xfff
+[ ]+[ ]+[ ]+f0: R_LARCH_SOP_AND[ ]+\*ABS\*
+[ ]+[ ]+[ ]+f0: R_LARCH_SOP_POP_32_U_10_12[ ]+\*ABS\*
+[ ]+f4:[ ]+1c000004 [ ]+pcaddu12i[ ]+[ ]+\$a0, 0
+[ ]+[ ]+[ ]+f4: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_\+0x800
+[ ]+[ ]+[ ]+f4: R_LARCH_SOP_PUSH_TLS_GOT[ ]+L1
+[ ]+[ ]+[ ]+f4: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+f4: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x20
+[ ]+[ ]+[ ]+f4: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+f4: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x2c
+[ ]+[ ]+[ ]+f4: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+f4: R_LARCH_SOP_POP_32_S_5_20[ ]+\*ABS\*
+[ ]+f8:[ ]+28800084 [ ]+ld.w[ ]+[ ]+\$a0, \$a0, 0
+[ ]+[ ]+[ ]+f8: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_\+0x4
+[ ]+[ ]+[ ]+f8: R_LARCH_SOP_PUSH_TLS_GOT[ ]+L1
+[ ]+[ ]+[ ]+f8: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+f8: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_\+0x804
+[ ]+[ ]+[ ]+f8: R_LARCH_SOP_PUSH_TLS_GOT[ ]+L1
+[ ]+[ ]+[ ]+f8: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+f8: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0xc
+[ ]+[ ]+[ ]+f8: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+f8: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0xc
+[ ]+[ ]+[ ]+f8: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+f8: R_LARCH_SOP_SUB[ ]+\*ABS\*
+[ ]+[ ]+[ ]+f8: R_LARCH_SOP_POP_32_S_10_12[ ]+\*ABS\*
+[ ]+fc:[ ]+1c000004 [ ]+pcaddu12i[ ]+[ ]+\$a0, 0
+[ ]+[ ]+[ ]+fc: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_
+[ ]+[ ]+[ ]+fc: R_LARCH_SOP_PUSH_TLS_GOT[ ]+L1
+[ ]+[ ]+[ ]+fc: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+fc: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_\-0x80000000
+[ ]+[ ]+[ ]+fc: R_LARCH_SOP_PUSH_TLS_GOT[ ]+L1
+[ ]+[ ]+[ ]+fc: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+fc: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x20
+[ ]+[ ]+[ ]+fc: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+fc: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x20
+[ ]+[ ]+[ ]+fc: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+fc: R_LARCH_SOP_SUB[ ]+\*ABS\*
+[ ]+[ ]+[ ]+fc: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x20
+[ ]+[ ]+[ ]+fc: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+fc: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x2c
+[ ]+[ ]+[ ]+fc: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+fc: R_LARCH_SOP_POP_32_S_5_20[ ]+\*ABS\*
+[ ]+100:[ ]+03800005 [ ]+ori[ ]+[ ]+\$a1, \$zero, 0x0
+[ ]+[ ]+[ ]+100: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_\+0x4
+[ ]+[ ]+[ ]+100: R_LARCH_SOP_PUSH_TLS_GOT[ ]+L1
+[ ]+[ ]+[ ]+100: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+100: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_\-0x7ffffffc
+[ ]+[ ]+[ ]+100: R_LARCH_SOP_PUSH_TLS_GOT[ ]+L1
+[ ]+[ ]+[ ]+100: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+100: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x20
+[ ]+[ ]+[ ]+100: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+100: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x20
+[ ]+[ ]+[ ]+100: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+100: R_LARCH_SOP_SUB[ ]+\*ABS\*
+[ ]+[ ]+[ ]+100: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0xfff
+[ ]+[ ]+[ ]+100: R_LARCH_SOP_AND[ ]+\*ABS\*
+[ ]+[ ]+[ ]+100: R_LARCH_SOP_POP_32_U_10_12[ ]+\*ABS\*
+[ ]+104:[ ]+16000005 [ ]+lu32i.d[ ]+[ ]+\$a1, 0
+[ ]+[ ]+[ ]+104: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_\-0x7ffffff8
+[ ]+[ ]+[ ]+104: R_LARCH_SOP_PUSH_TLS_GOT[ ]+L1
+[ ]+[ ]+[ ]+104: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+104: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0xc
+[ ]+[ ]+[ ]+104: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+104: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x2c
+[ ]+[ ]+[ ]+104: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+104: R_LARCH_SOP_POP_32_S_5_20[ ]+\*ABS\*
+[ ]+108:[ ]+030000a5 [ ]+lu52i.d[ ]+[ ]+\$a1, \$a1, 0
+[ ]+[ ]+[ ]+108: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_\-0x7ffffff4
+[ ]+[ ]+[ ]+108: R_LARCH_SOP_PUSH_TLS_GOT[ ]+L1
+[ ]+[ ]+[ ]+108: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+108: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x34
+[ ]+[ ]+[ ]+108: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+108: R_LARCH_SOP_POP_32_S_10_12[ ]+\*ABS\*
+[ ]+10c:[ ]+380c1484 [ ]+ldx.d[ ]+[ ]+\$a0, \$a0, \$a1
+[ ]+110:[ ]+1c000004 [ ]+pcaddu12i[ ]+[ ]+\$a0, 0
+[ ]+[ ]+[ ]+110: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_\+0x800
+[ ]+[ ]+[ ]+110: R_LARCH_SOP_PUSH_TLS_GD[ ]+L1
+[ ]+[ ]+[ ]+110: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+110: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x20
+[ ]+[ ]+[ ]+110: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+110: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x2c
+[ ]+[ ]+[ ]+110: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+110: R_LARCH_SOP_POP_32_S_5_20[ ]+\*ABS\*
+[ ]+114:[ ]+02800084 [ ]+addi.w[ ]+[ ]+\$a0, \$a0, 0
+[ ]+[ ]+[ ]+114: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_\+0x4
+[ ]+[ ]+[ ]+114: R_LARCH_SOP_PUSH_TLS_GD[ ]+L1
+[ ]+[ ]+[ ]+114: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+114: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_\+0x804
+[ ]+[ ]+[ ]+114: R_LARCH_SOP_PUSH_TLS_GD[ ]+L1
+[ ]+[ ]+[ ]+114: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+114: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0xc
+[ ]+[ ]+[ ]+114: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+114: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0xc
+[ ]+[ ]+[ ]+114: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+114: R_LARCH_SOP_SUB[ ]+\*ABS\*
+[ ]+[ ]+[ ]+114: R_LARCH_SOP_POP_32_S_10_12[ ]+\*ABS\*
+[ ]+118:[ ]+1c000004 [ ]+pcaddu12i[ ]+[ ]+\$a0, 0
+[ ]+[ ]+[ ]+118: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_
+[ ]+[ ]+[ ]+118: R_LARCH_SOP_PUSH_TLS_GD[ ]+L1
+[ ]+[ ]+[ ]+118: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+118: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_\-0x80000000
+[ ]+[ ]+[ ]+118: R_LARCH_SOP_PUSH_TLS_GD[ ]+L1
+[ ]+[ ]+[ ]+118: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+118: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x20
+[ ]+[ ]+[ ]+118: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+118: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x20
+[ ]+[ ]+[ ]+118: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+118: R_LARCH_SOP_SUB[ ]+\*ABS\*
+[ ]+[ ]+[ ]+118: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x20
+[ ]+[ ]+[ ]+118: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+118: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x2c
+[ ]+[ ]+[ ]+118: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+118: R_LARCH_SOP_POP_32_S_5_20[ ]+\*ABS\*
+[ ]+11c:[ ]+03800005 [ ]+ori[ ]+[ ]+\$a1, \$zero, 0x0
+[ ]+[ ]+[ ]+11c: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_\+0x4
+[ ]+[ ]+[ ]+11c: R_LARCH_SOP_PUSH_TLS_GD[ ]+L1
+[ ]+[ ]+[ ]+11c: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+11c: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_\-0x7ffffffc
+[ ]+[ ]+[ ]+11c: R_LARCH_SOP_PUSH_TLS_GD[ ]+L1
+[ ]+[ ]+[ ]+11c: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+11c: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x20
+[ ]+[ ]+[ ]+11c: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+11c: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x20
+[ ]+[ ]+[ ]+11c: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+11c: R_LARCH_SOP_SUB[ ]+\*ABS\*
+[ ]+[ ]+[ ]+11c: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0xfff
+[ ]+[ ]+[ ]+11c: R_LARCH_SOP_AND[ ]+\*ABS\*
+[ ]+[ ]+[ ]+11c: R_LARCH_SOP_POP_32_U_10_12[ ]+\*ABS\*
+[ ]+120:[ ]+16000005 [ ]+lu32i.d[ ]+[ ]+\$a1, 0
+[ ]+[ ]+[ ]+120: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_\-0x7ffffff8
+[ ]+[ ]+[ ]+120: R_LARCH_SOP_PUSH_TLS_GD[ ]+L1
+[ ]+[ ]+[ ]+120: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+120: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0xc
+[ ]+[ ]+[ ]+120: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+120: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x2c
+[ ]+[ ]+[ ]+120: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+120: R_LARCH_SOP_POP_32_S_5_20[ ]+\*ABS\*
+[ ]+124:[ ]+030000a5 [ ]+lu52i.d[ ]+[ ]+\$a1, \$a1, 0
+[ ]+[ ]+[ ]+124: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_\-0x7ffffff4
+[ ]+[ ]+[ ]+124: R_LARCH_SOP_PUSH_TLS_GD[ ]+L1
+[ ]+[ ]+[ ]+124: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+124: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x34
+[ ]+[ ]+[ ]+124: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+124: R_LARCH_SOP_POP_32_S_10_12[ ]+\*ABS\*
+[ ]+128:[ ]+00109484 [ ]+add.d[ ]+[ ]+\$a0, \$a0, \$a1
+[ ]+12c:[ ]+1c000004 [ ]+pcaddu12i[ ]+[ ]+\$a0, 0
+[ ]+[ ]+[ ]+12c: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_\+0x800
+[ ]+[ ]+[ ]+12c: R_LARCH_SOP_PUSH_TLS_GD[ ]+L1
+[ ]+[ ]+[ ]+12c: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+12c: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x20
+[ ]+[ ]+[ ]+12c: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+12c: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x2c
+[ ]+[ ]+[ ]+12c: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+12c: R_LARCH_SOP_POP_32_S_5_20[ ]+\*ABS\*
+[ ]+130:[ ]+02800084 [ ]+addi.w[ ]+[ ]+\$a0, \$a0, 0
+[ ]+[ ]+[ ]+130: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_\+0x4
+[ ]+[ ]+[ ]+130: R_LARCH_SOP_PUSH_TLS_GD[ ]+L1
+[ ]+[ ]+[ ]+130: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+130: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_\+0x804
+[ ]+[ ]+[ ]+130: R_LARCH_SOP_PUSH_TLS_GD[ ]+L1
+[ ]+[ ]+[ ]+130: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+130: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0xc
+[ ]+[ ]+[ ]+130: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+130: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0xc
+[ ]+[ ]+[ ]+130: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+130: R_LARCH_SOP_SUB[ ]+\*ABS\*
+[ ]+[ ]+[ ]+130: R_LARCH_SOP_POP_32_S_10_12[ ]+\*ABS\*
+[ ]+134:[ ]+1c000004 [ ]+pcaddu12i[ ]+[ ]+\$a0, 0
+[ ]+[ ]+[ ]+134: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_
+[ ]+[ ]+[ ]+134: R_LARCH_SOP_PUSH_TLS_GD[ ]+L1
+[ ]+[ ]+[ ]+134: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+134: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_\-0x80000000
+[ ]+[ ]+[ ]+134: R_LARCH_SOP_PUSH_TLS_GD[ ]+L1
+[ ]+[ ]+[ ]+134: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+134: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x20
+[ ]+[ ]+[ ]+134: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+134: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x20
+[ ]+[ ]+[ ]+134: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+134: R_LARCH_SOP_SUB[ ]+\*ABS\*
+[ ]+[ ]+[ ]+134: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x20
+[ ]+[ ]+[ ]+134: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+134: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x2c
+[ ]+[ ]+[ ]+134: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+134: R_LARCH_SOP_POP_32_S_5_20[ ]+\*ABS\*
+[ ]+138:[ ]+03800005 [ ]+ori[ ]+[ ]+\$a1, \$zero, 0x0
+[ ]+[ ]+[ ]+138: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_\+0x4
+[ ]+[ ]+[ ]+138: R_LARCH_SOP_PUSH_TLS_GD[ ]+L1
+[ ]+[ ]+[ ]+138: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+138: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_\-0x7ffffffc
+[ ]+[ ]+[ ]+138: R_LARCH_SOP_PUSH_TLS_GD[ ]+L1
+[ ]+[ ]+[ ]+138: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+138: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x20
+[ ]+[ ]+[ ]+138: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+138: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x20
+[ ]+[ ]+[ ]+138: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+138: R_LARCH_SOP_SUB[ ]+\*ABS\*
+[ ]+[ ]+[ ]+138: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0xfff
+[ ]+[ ]+[ ]+138: R_LARCH_SOP_AND[ ]+\*ABS\*
+[ ]+[ ]+[ ]+138: R_LARCH_SOP_POP_32_U_10_12[ ]+\*ABS\*
+[ ]+13c:[ ]+16000005 [ ]+lu32i.d[ ]+[ ]+\$a1, 0
+[ ]+[ ]+[ ]+13c: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_\-0x7ffffff8
+[ ]+[ ]+[ ]+13c: R_LARCH_SOP_PUSH_TLS_GD[ ]+L1
+[ ]+[ ]+[ ]+13c: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+13c: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0xc
+[ ]+[ ]+[ ]+13c: R_LARCH_SOP_SL[ ]+\*ABS\*
+[ ]+[ ]+[ ]+13c: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x2c
+[ ]+[ ]+[ ]+13c: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+13c: R_LARCH_SOP_POP_32_S_5_20[ ]+\*ABS\*
+[ ]+140:[ ]+030000a5 [ ]+lu52i.d[ ]+[ ]+\$a1, \$a1, 0
+[ ]+[ ]+[ ]+140: R_LARCH_SOP_PUSH_PCREL[ ]+_GLOBAL_OFFSET_TABLE_\-0x7ffffff4
+[ ]+[ ]+[ ]+140: R_LARCH_SOP_PUSH_TLS_GD[ ]+L1
+[ ]+[ ]+[ ]+140: R_LARCH_SOP_ADD[ ]+\*ABS\*
+[ ]+[ ]+[ ]+140: R_LARCH_SOP_PUSH_ABSOLUTE[ ]+\*ABS\*\+0x34
+[ ]+[ ]+[ ]+140: R_LARCH_SOP_SR[ ]+\*ABS\*
+[ ]+[ ]+[ ]+140: R_LARCH_SOP_POP_32_S_10_12[ ]+\*ABS\*
+[ ]+144:[ ]+00109484 [ ]+add.d[ ]+[ ]+\$a0, \$a0, \$a1
diff --git a/ld/testsuite/ld-loongarch-elf/macro_op_32.s b/ld/testsuite/ld-loongarch-elf/macro_op_32.s
new file mode 100644
index 00000000000..2e26b6b3f9b
--- /dev/null
+++ b/ld/testsuite/ld-loongarch-elf/macro_op_32.s
@@ -0,0 +1,29 @@
+.L1:
+ li.w $r4,0
+ li.w $r4,0xffffffff
+ li.w $r4,0
+ li.w $r4,0xffffffff
+ la $r4,L1
+ la.global $r4,L1
+ la.global $r4,$r5,L1
+ la.global $r4,L1
+ la.global $r4,$r5,L1
+ la.global $r4,L1
+ la.global $r4,$r5,L1
+ la.local $r4,L1
+ la.local $r4,$r5,L1
+ la.local $r4,L1
+ la.local $r4,$r5,L1
+ la.abs $r4,L1
+ la.pcrel $r4,L1
+ la.pcrel $r4,L1
+ la.pcrel $r4,$r5,L1
+ la.got $r4,L1
+ la.got $r4,$r5,L1
+ la.tls.le $r4,L1
+ la.tls.ie $r4,L1
+ la.tls.ie $r4,$r5,L1
+ la.tls.ld $r4,L1
+ la.tls.ld $r4,$r5,L1
+ la.tls.gd $r4,L1
+ la.tls.gd $r4,$r5,L1
diff --git a/ld/testsuite/ld-pe/pe.exp b/ld/testsuite/ld-pe/pe.exp
index f47c7eb2370..413b316f152 100644
--- a/ld/testsuite/ld-pe/pe.exp
+++ b/ld/testsuite/ld-pe/pe.exp
@@ -35,6 +35,8 @@ if {[istarget i*86-*-cygwin*]
set pe_tests {
{".secrel32" "--disable-reloc-section" "" "" {secrel1.s secrel2.s}
{{objdump -s secrel_64.d}} "secrel.x"}
+ {".secidx" "--disable-reloc-section" "" "" {secidx1.s secidx2.s}
+ {{objdump -s secidx_64.d}} "secidx.x"}
{"Empty export table" "" "" "" "exports.s"
{{objdump -p exports64.d}} "exports.dll"}
{"TLS directory entry" "" "" "" "tlssec.s"
@@ -44,6 +46,17 @@ if {[istarget i*86-*-cygwin*]
set pe_tests {
{".secrel32" "--disable-auto-import --disable-reloc-section" "" "" {secrel1.s secrel2.s}
{{objdump -s secrel.d}} "secrel.x"}
+ {".secidx" "--disable-auto-import --disable-reloc-section" "" "" {secidx1.s secidx2.s}
+ {{objdump -s secidx.d}} "secidx.x"}
+ {"Empty export table" "" "" "" "exports.s"
+ {{objdump -p exports.d}} "exports.dll"}
+ {"TLS directory entry" "" "" "" "tlssec.s"
+ {{objdump -p tlssec32.d}} "tlssec.dll"}
+ }
+ } elseif {[istarget arm-wince-pe] } {
+ set pe_tests {
+ {".secrel32" "--disable-reloc-section" "" "" {secrel1.s secrel2.s}
+ {{objdump -s secrel.d}} "secrel.x"}
{"Empty export table" "" "" "" "exports.s"
{{objdump -p exports.d}} "exports.dll"}
{"TLS directory entry" "" "" "" "tlssec.s"
@@ -53,6 +66,8 @@ if {[istarget i*86-*-cygwin*]
set pe_tests {
{".secrel32" "--disable-reloc-section" "" "" {secrel1.s secrel2.s}
{{objdump -s secrel.d}} "secrel.x"}
+ {".secidx" "--disable-reloc-section" "" "" {secidx1.s secidx2.s}
+ {{objdump -s secidx.d}} "secidx.x"}
{"Empty export table" "" "" "" "exports.s"
{{objdump -p exports.d}} "exports.dll"}
{"TLS directory entry" "" "" "" "tlssec.s"
diff --git a/ld/testsuite/ld-pe/pr19803.d b/ld/testsuite/ld-pe/pr19803.d
index 238194bc1d9..1bd7958cf24 100644
--- a/ld/testsuite/ld-pe/pr19803.d
+++ b/ld/testsuite/ld-pe/pr19803.d
@@ -9,5 +9,5 @@
# collection.
#...
-.*\(sec 1\)\(fl 0x00\)\(ty 0\)\(scl 2\) \(nx 0\) 0x0+000 .*Startup.*
+.*\(sec 1\)\(fl 0x00\)\(ty 0\)\(scl 2\) \(nx 0\) 0x0+000 .*Startup.*
#pass
diff --git a/ld/testsuite/ld-pe/secidx.d b/ld/testsuite/ld-pe/secidx.d
new file mode 100644
index 00000000000..20ace36d1ed
--- /dev/null
+++ b/ld/testsuite/ld-pe/secidx.d
@@ -0,0 +1,27 @@
+
+tmpdir/secidx\.x: +file format pei-.*
+
+Contents of section .text:
+ .*1000 3e3e3e3e 3c3c3c3c 3e3e3e3e 3e3c3c3c >>>><<<<>>>>><<<
+ .*1010 3e3e3e3e 3e3e3c3c 3e3e3e3e 3e3e3e3c >>>>>><<>>>>>>><
+ .*1020 3c3c3c3c 3e3e3e3e 3e909090 ffffffff <<<<>>>>>.......
+ .*1030 00000000 ffffffff 00000000 ............
+Contents of section .data:
+ .*2000 3e3e3e3e 3c3c3c3c 3e3e3e3e 3e3c3c3c >>>><<<<>>>>><<<
+ .*2010 3e3e3e3e 3e3e3c3c 3e3e3e3e 3e3e3e3c >>>>>><<>>>>>>><
+ .*2020 3e3e3e3e 01001101 00110100 11010011 >>>>............
+ .*2030 3c3c3c3c 3c3c3c3c 3e3e3e3e 02001102 <<<<<<<<>>>>....
+ .*2040 00110200 11020011 3c3c3c3c 3c3c3c3c ........<<<<<<<<
+ .*2050 3e3e3e3e 03001103 00110300 11030011 >>>>............
+ .*2060 3c3c3c3c 3c3c3c3c 3e3e3e3e 01001102 <<<<<<<<>>>>....
+ .*2070 00110300 113c3c3c 3c3c3c3c 3c000000 .....<<<<<<<<...
+ .*2080 3c3c3c3e 3e3e3e3e 3e000000 <<<>>>>>>...
+Contents of section .rdata:
+ .*3000 3e3e3e3e 3c3c3c3c 3e3e3e3e 3e3c3c3c >>>><<<<>>>>><<<
+ .*3010 3e3e3e3e 3e3e3c3c 3e3e3e3e 3e3e3e3c >>>>>><<>>>>>>><
+ .*3020 3e3e3e3e 00000000 00000000 00000000 >>>>............
+ .*3030 3c3c3c3e 3e3e3e3e 3e000000 <<<>>>>>>...
+Contents of section .idata:
+ .*4000 00000000 00000000 00000000 00000000 ................
+ .*4010 00000000 ....
+#...
diff --git a/ld/testsuite/ld-pe/secidx1.s b/ld/testsuite/ld-pe/secidx1.s
new file mode 100644
index 00000000000..b562caf26a4
--- /dev/null
+++ b/ld/testsuite/ld-pe/secidx1.s
@@ -0,0 +1,77 @@
+.text
+
+ .ascii ">>>>"
+pre04: .ascii "<<<<"
+ .ascii ">>>>>"
+pre0d: .ascii "<<<"
+ .ascii ">>>>>>"
+pre16: .ascii "<<"
+ .ascii ">>>>>>>"
+pre1f: .ascii "<"
+
+.data
+
+ .ascii ">>>>"
+sam04: .ascii "<<<<"
+ .ascii ">>>>>"
+sam0d: .ascii "<<<"
+ .ascii ">>>>>>"
+sam16: .ascii "<<"
+ .ascii ">>>>>>>"
+sam1f: .ascii "<"
+
+ .ascii ">>>>"
+ .secidx pre04
+ .byte 0x11
+ .secidx pre0d
+ .byte 0x11
+ .secidx pre16
+ .byte 0x11
+ .secidx pre1f
+ .byte 0x11
+ .ascii "<<<<<<<<"
+
+ .ascii ">>>>"
+ .secidx sam04
+ .byte 0x11
+ .secidx sam0d
+ .byte 0x11
+ .secidx sam16
+ .byte 0x11
+ .secidx sam1f
+ .byte 0x11
+ .ascii "<<<<<<<<"
+
+ .ascii ">>>>"
+ .secidx nex04
+ .byte 0x11
+ .secidx nex0d
+ .byte 0x11
+ .secidx nex16
+ .byte 0x11
+ .secidx nex1f
+ .byte 0x11
+ .ascii "<<<<<<<<"
+
+ .ascii ">>>>"
+ .secidx ext1
+ .byte 0x11
+ .secidx ext2
+ .byte 0x11
+ .secidx ext3
+ .byte 0x11
+ .ascii "<<<<<<<<"
+
+.section .rdata
+
+ .ascii ">>>>"
+nex04: .ascii "<<<<"
+ .ascii ">>>>>"
+nex0d: .ascii "<<<"
+ .ascii ">>>>>>"
+nex16: .ascii "<<"
+ .ascii ">>>>>>>"
+nex1f: .ascii "<"
+ .ascii ">>>>"
+
+ .p2align 4,0
diff --git a/ld/testsuite/ld-pe/secidx2.s b/ld/testsuite/ld-pe/secidx2.s
new file mode 100644
index 00000000000..0895bd9282a
--- /dev/null
+++ b/ld/testsuite/ld-pe/secidx2.s
@@ -0,0 +1,17 @@
+.text
+
+.global ext1
+ext1: .ascii "<<<<"
+ .ascii ">>>>>"
+
+.data
+
+.global ext2
+ext2: .ascii "<<<"
+ .ascii ">>>>>>"
+
+.section .rdata
+
+.global ext3
+ext3: .ascii "<<<"
+ .ascii ">>>>>>"
diff --git a/ld/testsuite/ld-pe/secidx_64.d b/ld/testsuite/ld-pe/secidx_64.d
new file mode 100644
index 00000000000..ddf4aec74f9
--- /dev/null
+++ b/ld/testsuite/ld-pe/secidx_64.d
@@ -0,0 +1,27 @@
+
+tmpdir/secidx\.x: +file format pei-.*
+
+Contents of section \.text:
+ .*1000 3e3e3e3e 3c3c3c3c 3e3e3e3e 3e3c3c3c >>>><<<<>>>>><<<
+ .*1010 3e3e3e3e 3e3e3c3c 3e3e3e3e 3e3e3e3c >>>>>><<>>>>>>><
+ .*1020 3c3c3c3c 3e3e3e3e 3e909090 90909090 <<<<>>>>>.......
+ .*1030 ffffffff ffffffff 00000000 00000000 ................
+ .*1040 ffffffff ffffffff 00000000 00000000 ................
+Contents of section \.data:
+ .*2000 3e3e3e3e 3c3c3c3c 3e3e3e3e 3e3c3c3c >>>><<<<>>>>><<<
+ .*2010 3e3e3e3e 3e3e3c3c 3e3e3e3e 3e3e3e3c >>>>>><<>>>>>>><
+ .*2020 3e3e3e3e 01001101 00110100 11010011 >>>>............
+ .*2030 3c3c3c3c 3c3c3c3c 3e3e3e3e 02001102 <<<<<<<<>>>>....
+ .*2040 00110200 11020011 3c3c3c3c 3c3c3c3c ........<<<<<<<<
+ .*2050 3e3e3e3e 03001103 00110300 11030011 >>>>............
+ .*2060 3c3c3c3c 3c3c3c3c 3e3e3e3e 01001102 <<<<<<<<>>>>....
+ .*2070 00110300 113c3c3c 3c3c3c3c 3c000000 .....<<<<<<<<...
+ .*2080 3c3c3c3e 3e3e3e3e 3e000000 00000000 <<<>>>>>>.......
+Contents of section \.rdata:
+ .*3000 3e3e3e3e 3c3c3c3c 3e3e3e3e 3e3c3c3c >>>><<<<>>>>><<<
+ .*3010 3e3e3e3e 3e3e3c3c 3e3e3e3e 3e3e3e3c >>>>>><<>>>>>>><
+ .*3020 3e3e3e3e 00000000 00000000 00000000 >>>>............
+ .*3030 3c3c3c3e 3e3e3e3e 3e000000 00000000 <<<>>>>>>.......
+Contents of section \.idata:
+ .*4000 00000000 00000000 00000000 00000000 ................
+ .*4010 00000000 ....
diff --git a/ld/testsuite/ld-plugin/lto.exp b/ld/testsuite/ld-plugin/lto.exp
index a70a84562b8..4e8e2dc7748 100644
--- a/ld/testsuite/ld-plugin/lto.exp
+++ b/ld/testsuite/ld-plugin/lto.exp
@@ -471,6 +471,65 @@ set lto_link_elf_tests [list \
[list {pr27441c.so} \
{-shared -fPIC -Wl,--as-needed tmpdir/pr27441c.o tmpdir/pr27441b.so tmpdir/pr27441a.so} {-fPIC} \
{dummy.c} {{readelf {-dW} pr27441c.d}} {pr27441c.so}] \
+ [list \
+ "Build libpr28879a.so" \
+ "-shared" \
+ "-O0 -fpic" \
+ {pr28879a.cc} \
+ {} \
+ "libpr28879a.so" \
+ "c++" \
+ ] \
+ [list \
+ "Build libpr28879b.so" \
+ "-shared -Wl,--no-as-needed tmpdir/libpr28879a.so" \
+ "-O2 -fpic" \
+ {dummy.c} \
+ {} \
+ "libpr28879b.so" \
+ ] \
+ [list \
+ "Build pr28879" \
+ "-Wl,--no-as-needed tmpdir/libpr28879b.so -Wl,-rpath-link,." \
+ "-O0 -flto -D_GLIBCXX_ASSERTIONS" \
+ {pr28879b.cc} \
+ {} \
+ "pr28879" \
+ "c++" \
+ ] \
+ [list \
+ "Build libpr28849a.so" \
+ "-shared" \
+ "-fPIC" \
+ {pr28849a.c} \
+ "" \
+ "libpr28849a.so" \
+ ] \
+ [list \
+ "Build libpr28849b.so" \
+ "-shared -Wl,--no-as-needed,tmpdir/libpr28849a.so" \
+ "" \
+ {dummy.c} \
+ "" \
+ "libpr28849b.so" \
+ ] \
+ [list \
+ "Build pr28849" \
+ "-Wl,--no-as-needed,--copy-dt-needed-entries,-rpath-link,. \
+ tmpdir/libpr28849b.so" \
+ "-O2 -flto" \
+ {pr28849b.c} \
+ {{"nm" {-D} "pr28849.d"}} \
+ "pr28849" \
+ ] \
+ [list \
+ "PR ld/pr29086" \
+ "-Wl,--wrap=foo" \
+ "-O0 -flto" \
+ {pr29086.c} \
+ {} \
+ "pr29086" \
+ ] \
]
# PR 14918 checks that libgcc is not spuriously included in a shared link of
diff --git a/ld/testsuite/ld-plugin/pr28849.d b/ld/testsuite/ld-plugin/pr28849.d
new file mode 100644
index 00000000000..8ea4e3fde43
--- /dev/null
+++ b/ld/testsuite/ld-plugin/pr28849.d
@@ -0,0 +1,3 @@
+#...
+.* _?should_be_dynamic_in_exec
+#pass
diff --git a/ld/testsuite/ld-plugin/pr28849a.c b/ld/testsuite/ld-plugin/pr28849a.c
new file mode 100644
index 00000000000..2fc5c7b052b
--- /dev/null
+++ b/ld/testsuite/ld-plugin/pr28849a.c
@@ -0,0 +1,2 @@
+extern void should_be_dynamic_in_exec (void);
+void y (void) { should_be_dynamic_in_exec (); }
diff --git a/ld/testsuite/ld-plugin/pr28849b.c b/ld/testsuite/ld-plugin/pr28849b.c
new file mode 100644
index 00000000000..616d9a585d2
--- /dev/null
+++ b/ld/testsuite/ld-plugin/pr28849b.c
@@ -0,0 +1,3 @@
+extern void y (void);
+void should_be_dynamic_in_exec (void) {}
+int main (void) { y (); return 0; }
diff --git a/ld/testsuite/ld-plugin/pr28879a.cc b/ld/testsuite/ld-plugin/pr28879a.cc
new file mode 100644
index 00000000000..8307a42e2fb
--- /dev/null
+++ b/ld/testsuite/ld-plugin/pr28879a.cc
@@ -0,0 +1,7 @@
+#include <string>
+
+void
+func (std::string *s)
+{
+ delete s;
+}
diff --git a/ld/testsuite/ld-plugin/pr28879b.cc b/ld/testsuite/ld-plugin/pr28879b.cc
new file mode 100644
index 00000000000..02fc351366c
--- /dev/null
+++ b/ld/testsuite/ld-plugin/pr28879b.cc
@@ -0,0 +1,8 @@
+#include <string>
+
+int
+main (void)
+{
+ std::string header;
+ return 0;
+}
diff --git a/ld/testsuite/ld-plugin/pr29086.c b/ld/testsuite/ld-plugin/pr29086.c
new file mode 100644
index 00000000000..d333d68e262
--- /dev/null
+++ b/ld/testsuite/ld-plugin/pr29086.c
@@ -0,0 +1,19 @@
+int
+foo (void)
+{
+ return 0;
+}
+
+int
+main ()
+{
+ return foo ();
+}
+
+extern int __real_foo (void);
+
+int
+__wrap_foo (void)
+{
+ return __real_foo ();
+}
diff --git a/ld/testsuite/ld-powerpc/abs-pie-relr.d b/ld/testsuite/ld-powerpc/abs-pie-relr.d
new file mode 100644
index 00000000000..edf0b430c78
--- /dev/null
+++ b/ld/testsuite/ld-powerpc/abs-pie-relr.d
@@ -0,0 +1,34 @@
+#source: abs-reloc.s
+#as: -a64
+#ld: -melf64ppc -pie --hash-style=sysv -z pack-relative-relocs --defsym a=1 --defsym 'HIDDEN(b=2)' --defsym c=0x123456789abcdef0
+#objdump: -sdr
+
+#...
+Contents of section .got:
+.* (00000000 00018300|00830100 00000000) (00000000 00000001|01000000 00000000) .*
+.* (00000000 00000002|02000000 00000000) (12345678 9abcdef0|f0debc9a 78563412) .*
+.* (00000000 00000002|02000000 00000000) (12345678 9abcdef0|f0debc9a 78563412) .*
+.* (00000000 00000001|01000000 00000000) .*
+Contents of section \.data:
+.* (00000000 00010338|38030100 00000000) (00000000 00000001|01000000 00000000) .*
+.* (00000000 00000002|02000000 00000000) (12345678 9abcdef0|f0debc9a 78563412) .*
+#...
+.* <_start>:
+.*: (3c 4c 00 02|02 00 4c 3c) addis r2,r12,2
+.*: (38 42 81 58|58 81 42 38) addi r2,r2,-32424
+.*: (60 00 00 00|00 00 00 60) nop
+.*: (38 62 80 38|38 80 62 38) addi r3,r2,-32712
+.*: (60 00 00 00|00 00 00 60) nop
+.*: (e8 82 80 08|08 80 82 e8) ld r4,-32760\(r2\)
+.*: (60 00 00 00|00 00 00 60) nop
+.*: (e8 a2 80 10|10 80 a2 e8) ld r5,-32752\(r2\)
+.*: (60 00 00 00|00 00 00 60) nop
+.*: (e8 c2 80 18|18 80 c2 e8) ld r6,-32744\(r2\)
+.*: (60 00 00 00|00 00 00 60) nop
+.*: (38 e2 80 38|38 80 e2 38) addi r7,r2,-32712
+.*: (3d 02 00 00|00 00 02 3d) addis r8,r2,0
+.*: (e9 08 80 30|30 80 08 e9) ld r8,-32720\(r8\)
+.*: (3d 22 00 00|00 00 22 3d) addis r9,r2,0
+.*: (e9 29 80 20|20 80 29 e9) ld r9,-32736\(r9\)
+.*: (3d 42 00 00|00 00 42 3d) addis r10,r2,0
+.*: (e9 4a 80 28|28 80 4a e9) ld r10,-32728\(r10\)
diff --git a/ld/testsuite/ld-powerpc/abs-pie-relr.r b/ld/testsuite/ld-powerpc/abs-pie-relr.r
new file mode 100644
index 00000000000..22effe89541
--- /dev/null
+++ b/ld/testsuite/ld-powerpc/abs-pie-relr.r
@@ -0,0 +1,8 @@
+#source: abs-reloc.s
+#as: -a64
+#ld: -melf64ppc -pie --hash-style=sysv -z pack-relative-relocs --defsym a=1 --defsym 'HIDDEN(b=2)' --defsym c=0x123456789abcdef0
+#readelf: -rW
+
+Relocation section '\.relr\.dyn' at offset .* contains 1 entry:
+ 1 offset
+0+10338
diff --git a/ld/testsuite/ld-powerpc/abs-pie.d b/ld/testsuite/ld-powerpc/abs-pie.d
new file mode 100644
index 00000000000..b0930b6269f
--- /dev/null
+++ b/ld/testsuite/ld-powerpc/abs-pie.d
@@ -0,0 +1,34 @@
+#source: abs-reloc.s
+#as: -a64
+#ld: -melf64ppc -pie --hash-style=sysv --defsym a=1 --defsym 'HIDDEN(b=2)' --defsym c=0x123456789abcdef0
+#objdump: -sdr
+
+#...
+Contents of section \.got:
+.* (00000000 00018400|00840100 00000000) (00000000 00000001|01000000 00000000) .*
+.* (00000000 00000002|02000000 00000000) (12345678 9abcdef0|f0debc9a 78563412) .*
+.* (00000000 00000002|02000000 00000000) (12345678 9abcdef0|f0debc9a 78563412) .*
+.* (00000000 00000001|01000000 00000000) .*
+Contents of section \.data:
+.* (00000000 00010438|38040100 00000000) (00000000 00000001|01000000 00000000) .*
+.* (00000000 00000002|02000000 00000000) (12345678 9abcdef0|f0debc9a 78563412) .*
+#...
+.* <_start>:
+.*: (3c 4c 00 02|02 00 4c 3c) addis r2,r12,2
+.*: (38 42 82 10|10 82 42 38) addi r2,r2,-32240
+.*: (60 00 00 00|00 00 00 60) nop
+.*: (38 62 80 38|38 80 62 38) addi r3,r2,-32712
+.*: (60 00 00 00|00 00 00 60) nop
+.*: (e8 82 80 08|08 80 82 e8) ld r4,-32760\(r2\)
+.*: (60 00 00 00|00 00 00 60) nop
+.*: (e8 a2 80 10|10 80 a2 e8) ld r5,-32752\(r2\)
+.*: (60 00 00 00|00 00 00 60) nop
+.*: (e8 c2 80 18|18 80 c2 e8) ld r6,-32744\(r2\)
+.*: (60 00 00 00|00 00 00 60) nop
+.*: (38 e2 80 38|38 80 e2 38) addi r7,r2,-32712
+.*: (3d 02 00 00|00 00 02 3d) addis r8,r2,0
+.*: (e9 08 80 30|30 80 08 e9) ld r8,-32720\(r8\)
+.*: (3d 22 00 00|00 00 22 3d) addis r9,r2,0
+.*: (e9 29 80 20|20 80 29 e9) ld r9,-32736\(r9\)
+.*: (3d 42 00 00|00 00 42 3d) addis r10,r2,0
+.*: (e9 4a 80 28|28 80 4a e9) ld r10,-32728\(r10\)
diff --git a/ld/testsuite/ld-powerpc/abs-pie.r b/ld/testsuite/ld-powerpc/abs-pie.r
new file mode 100644
index 00000000000..2ae4d0e96a2
--- /dev/null
+++ b/ld/testsuite/ld-powerpc/abs-pie.r
@@ -0,0 +1,8 @@
+#source: abs-reloc.s
+#as: -a64
+#ld: -melf64ppc -pie --hash-style=sysv --defsym a=1 --defsym 'HIDDEN(b=2)' --defsym c=0x123456789abcdef0
+#readelf: -rW
+
+Relocation section '\.rela\.dyn' at offset .* contains 1 entry:
+ +Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend
+0+10438 +0+16 R_PPC64_RELATIVE +10438
diff --git a/ld/testsuite/ld-powerpc/abs-reloc.s b/ld/testsuite/ld-powerpc/abs-reloc.s
new file mode 100644
index 00000000000..a5898e1dcb1
--- /dev/null
+++ b/ld/testsuite/ld-powerpc/abs-reloc.s
@@ -0,0 +1,49 @@
+ .globl x
+ .hidden x
+
+ .section .toc,"aw"
+ .p2align 3
+.Lx:
+ .quad x
+.La:
+ .quad a
+.Lb:
+ .quad b
+.Lc:
+ .quad c
+
+ .data
+ .p2align 3
+x:
+ .quad x
+ .quad a
+ .quad b
+ .quad c
+
+ .text
+ .p2align 2
+ .globl _start
+ .type _start,@function
+_start:
+0:
+ addis 2,12,.TOC.-0b@ha
+ addi 2,2,.TOC.-0b@l
+ .localentry _start,.-_start
+ addis 3,2,.Lx@toc@ha
+ ld 3,.Lx@toc@l(3)
+ addis 4,2,.La@toc@ha
+ ld 4,.La@toc@l(4)
+ addis 5,2,.Lb@toc@ha
+ ld 5,.Lb@toc@l(5)
+ addis 6,2,.Lc@toc@ha
+ ld 6,.Lc@toc@l(6)
+
+ addis 7,2,x@got@ha
+ ld 7,x@got@l(7)
+ addis 8,2,a@got@ha
+ ld 8,a@got@l(8)
+ addis 9,2,b@got@ha
+ ld 9,b@got@l(9)
+ addis 10,2,c@got@ha
+ ld 10,c@got@l(10)
+ .size _start,.-_start
diff --git a/ld/testsuite/ld-powerpc/abs-shared-relr.d b/ld/testsuite/ld-powerpc/abs-shared-relr.d
new file mode 100644
index 00000000000..1460809bf0b
--- /dev/null
+++ b/ld/testsuite/ld-powerpc/abs-shared-relr.d
@@ -0,0 +1,34 @@
+#source: abs-reloc.s
+#as: -a64
+#ld: -melf64ppc -shared --hash-style=sysv -z pack-relative-relocs --defsym a=1 --defsym 'HIDDEN(b=2)' --defsym c=0x123456789abcdef0
+#objdump: -sdr
+
+#...
+Contents of section \.got:
+.* (00000000 00018400|00840100 00000000) 00000000 00000000 .*
+.* (00000000 00000002|02000000 00000000) 00000000 00000000 .*
+.* (00000000 00000002|02000000 00000000) 00000000 00000000 .*
+.* 00000000 00000000 .*
+Contents of section \.data:
+.* (00000000 00010438|38040100 00000000) 00000000 00000000 .*
+.* (00000000 00000002|02000000 00000000) 00000000 00000000 .*
+#...
+.* <_start>:
+.*: (3c 4c 00 02|02 00 4c 3c) addis r2,r12,2
+.*: (38 42 81 b0|b0 81 42 38) addi r2,r2,-32336
+.*: (60 00 00 00|00 00 00 60) nop
+.*: (38 62 80 38|38 80 62 38) addi r3,r2,-32712
+.*: (60 00 00 00|00 00 00 60) nop
+.*: (e8 82 80 08|08 80 82 e8) ld r4,-32760\(r2\)
+.*: (60 00 00 00|00 00 00 60) nop
+.*: (e8 a2 80 10|10 80 a2 e8) ld r5,-32752\(r2\)
+.*: (60 00 00 00|00 00 00 60) nop
+.*: (e8 c2 80 18|18 80 c2 e8) ld r6,-32744\(r2\)
+.*: (60 00 00 00|00 00 00 60) nop
+.*: (38 e2 80 38|38 80 e2 38) addi r7,r2,-32712
+.*: (3d 02 00 00|00 00 02 3d) addis r8,r2,0
+.*: (e9 08 80 30|30 80 08 e9) ld r8,-32720\(r8\)
+.*: (3d 22 00 00|00 00 22 3d) addis r9,r2,0
+.*: (e9 29 80 20|20 80 29 e9) ld r9,-32736\(r9\)
+.*: (3d 42 00 00|00 00 42 3d) addis r10,r2,0
+.*: (e9 4a 80 28|28 80 4a e9) ld r10,-32728\(r10\)
diff --git a/ld/testsuite/ld-powerpc/abs-shared-relr.r b/ld/testsuite/ld-powerpc/abs-shared-relr.r
new file mode 100644
index 00000000000..978c43a38e9
--- /dev/null
+++ b/ld/testsuite/ld-powerpc/abs-shared-relr.r
@@ -0,0 +1,17 @@
+#source: abs-reloc.s
+#as: -a64
+#ld: -melf64ppc -pie --hash-style=sysv -z pack-relative-relocs --defsym a=1 --defsym 'HIDDEN(b=2)' --defsym c=0x123456789abcdef0
+#readelf: -rW
+
+Relocation section '\.rela\.dyn' at offset .* contains 6 entries:
+ +Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend
+0+10408 0+500000026 R_PPC64_ADDR64 0+1 a \+ 0
+0+10430 0+500000014 R_PPC64_GLOB_DAT 0+1 a \+ 0
+0+10440 0+500000026 R_PPC64_ADDR64 0+1 a \+ 0
+0+10418 0+400000026 R_PPC64_ADDR64 123456789abcdef0 c \+ 0
+0+10428 0+400000014 R_PPC64_GLOB_DAT 123456789abcdef0 c \+ 0
+0+10450 0+400000026 R_PPC64_ADDR64 123456789abcdef0 c \+ 0
+
+Relocation section '\.relr\.dyn' at offset .* contains 1 entry:
+ 1 offset
+0+10438
diff --git a/ld/testsuite/ld-powerpc/abs-shared.d b/ld/testsuite/ld-powerpc/abs-shared.d
new file mode 100644
index 00000000000..b66a4b0b863
--- /dev/null
+++ b/ld/testsuite/ld-powerpc/abs-shared.d
@@ -0,0 +1,34 @@
+#source: abs-reloc.s
+#as: -a64
+#ld: -melf64ppc -shared --hash-style=sysv --defsym a=1 --defsym 'HIDDEN(b=2)' --defsym c=0x123456789abcdef0
+#objdump: -sdr
+
+#...
+Contents of section \.got:
+.* (00000000 00018400|00840100 00000000) 00000000 00000000 .*
+.* (00000000 00000002|02000000 00000000) 00000000 00000000 .*
+.* (00000000 00000002|02000000 00000000) 00000000 00000000 .*
+.* 00000000 00000000 .*
+Contents of section \.data:
+.* (00000000 00010438|38040100 00000000) 00000000 00000000 .*
+.* (00000000 00000002|02000000 00000000) 00000000 00000000 .*
+#...
+.* <_start>:
+.*: (3c 4c 00 02|02 00 4c 3c) addis r2,r12,2
+.*: (38 42 81 a0|a0 81 42 38) addi r2,r2,-32352
+.*: (60 00 00 00|00 00 00 60) nop
+.*: (38 62 80 38|38 80 62 38) addi r3,r2,-32712
+.*: (60 00 00 00|00 00 00 60) nop
+.*: (e8 82 80 08|08 80 82 e8) ld r4,-32760\(r2\)
+.*: (60 00 00 00|00 00 00 60) nop
+.*: (e8 a2 80 10|10 80 a2 e8) ld r5,-32752\(r2\)
+.*: (60 00 00 00|00 00 00 60) nop
+.*: (e8 c2 80 18|18 80 c2 e8) ld r6,-32744\(r2\)
+.*: (60 00 00 00|00 00 00 60) nop
+.*: (38 e2 80 38|38 80 e2 38) addi r7,r2,-32712
+.*: (3d 02 00 00|00 00 02 3d) addis r8,r2,0
+.*: (e9 08 80 30|30 80 08 e9) ld r8,-32720\(r8\)
+.*: (3d 22 00 00|00 00 22 3d) addis r9,r2,0
+.*: (e9 29 80 20|20 80 29 e9) ld r9,-32736\(r9\)
+.*: (3d 42 00 00|00 00 42 3d) addis r10,r2,0
+.*: (e9 4a 80 28|28 80 4a e9) ld r10,-32728\(r10\)
diff --git a/ld/testsuite/ld-powerpc/abs-shared.r b/ld/testsuite/ld-powerpc/abs-shared.r
new file mode 100644
index 00000000000..70fb78139ba
--- /dev/null
+++ b/ld/testsuite/ld-powerpc/abs-shared.r
@@ -0,0 +1,14 @@
+#source: abs-reloc.s
+#as: -a64
+#ld: -melf64ppc -shared --hash-style=sysv --defsym a=1 --defsym 'HIDDEN(b=2)' --defsym c=0x123456789abcdef0
+#readelf: -rW
+
+Relocation section '\.rela\.dyn' at offset .* contains 7 entries:
+ +Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend
+0+10438 0+000000016 R_PPC64_RELATIVE +10438
+0+10408 0+500000026 R_PPC64_ADDR64 0+1 a \+ 0
+0+10430 0+500000014 R_PPC64_GLOB_DAT 0+1 a \+ 0
+0+10440 0+500000026 R_PPC64_ADDR64 0+1 a \+ 0
+0+10418 0+400000026 R_PPC64_ADDR64 123456789abcdef0 c \+ 0
+0+10428 0+400000014 R_PPC64_GLOB_DAT 123456789abcdef0 c \+ 0
+0+10450 0+400000026 R_PPC64_ADDR64 123456789abcdef0 c \+ 0
diff --git a/ld/testsuite/ld-powerpc/abs-static.d b/ld/testsuite/ld-powerpc/abs-static.d
new file mode 100644
index 00000000000..fafb1a6e944
--- /dev/null
+++ b/ld/testsuite/ld-powerpc/abs-static.d
@@ -0,0 +1,32 @@
+#source: abs-reloc.s
+#as: -a64
+#ld: -melf64ppc -static --defsym a=1 --defsym 'HIDDEN(b=2)' --defsym c=0x123456789abcdef0
+#objdump: -sdr
+
+#...
+Contents of section \.got:
+.* (00000000 10018100|00810110 00000000) (12345678 9abcdef0|f0debc9a 78563412) .*
+.* (12345678 9abcdef0|f0debc9a 78563412) .*
+Contents of section \.data:
+.* (00000000 10010118|18010110 00000000) (00000000 00000001|01000000 00000000) .*
+.* (00000000 00000002|02000000 00000000) (12345678 9abcdef0|f0debc9a 78563412) .*
+#...
+.* <_start>:
+.*: (3c 40 10 02|02 10 40 3c) lis r2,4098
+.*: (38 42 81 00|00 81 42 38) addi r2,r2,-32512
+.*: (60 00 00 00|00 00 00 60) nop
+.*: (38 62 80 18|18 80 62 38) addi r3,r2,-32744
+.*: (3c 82 ef fe|fe ef 82 3c) addis r4,r2,-4098
+.*: (38 84 7f 01|01 7f 84 38) addi r4,r4,32513
+.*: (3c a2 ef fe|fe ef a2 3c) addis r5,r2,-4098
+.*: (38 a5 7f 02|02 7f a5 38) addi r5,r5,32514
+.*: (60 00 00 00|00 00 00 60) nop
+.*: (e8 c2 80 08|08 80 c2 e8) ld r6,-32760\(r2\)
+.*: (60 00 00 00|00 00 00 60) nop
+.*: (38 e2 80 18|18 80 e2 38) addi r7,r2,-32744
+.*: (3d 02 ef fe|fe ef 02 3d) addis r8,r2,-4098
+.*: (39 08 7f 01|01 7f 08 39) addi r8,r8,32513
+.*: (3d 22 ef fe|fe ef 22 3d) addis r9,r2,-4098
+.*: (39 29 7f 02|02 7f 29 39) addi r9,r9,32514
+.*: (60 00 00 00|00 00 00 60) nop
+.*: (e9 42 80 10|10 80 42 e9) ld r10,-32752\(r2\)
diff --git a/ld/testsuite/ld-powerpc/abs-static.r b/ld/testsuite/ld-powerpc/abs-static.r
new file mode 100644
index 00000000000..4b5886cb021
--- /dev/null
+++ b/ld/testsuite/ld-powerpc/abs-static.r
@@ -0,0 +1,6 @@
+#source: abs-reloc.s
+#as: -a64
+#ld: -melf64ppc -static --defsym a=1 --defsym 'HIDDEN(b=2)' --defsym c=0x123456789abcdef0
+#readelf: -rW
+
+There are no relocations in this file.
diff --git a/ld/testsuite/ld-powerpc/abs32-pie.d b/ld/testsuite/ld-powerpc/abs32-pie.d
new file mode 100644
index 00000000000..7f9912100b7
--- /dev/null
+++ b/ld/testsuite/ld-powerpc/abs32-pie.d
@@ -0,0 +1,26 @@
+#source: abs32-reloc.s
+#as: -a32
+#ld: -melf32ppc -pie --hash-style=sysv --defsym a=1 --defsym 'HIDDEN(b=2)' --defsym c=0x12345678
+#objdump: -dr
+
+.*: file format .*
+
+Disassembly of section \.text:
+
+00000138 <_start>:
+ 138: (80 fe ff f0|f0 ff fe 80) lwz r7,-16\(r30\)
+ 13c: (81 1e ff f8|f8 ff 1e 81) lwz r8,-8\(r30\)
+ 140: (81 3e ff ec|ec ff 3e 81) lwz r9,-20\(r30\)
+ 144: (81 5e ff f4|f4 ff 5e 81) lwz r10,-12\(r30\)
+
+Disassembly of section \.got:
+
+000101d8 <\.got>:
+ 101d8: (00 00 00 02|02 00 00 00) .*
+ 101dc: (00 00 00 00|00 00 00 00) .*
+ 101e0: (12 34 56 78|78 56 34 12) .*
+ 101e4: (00 00 00 01|01 00 00 00) .*
+ 101e8: (4e 80 00 21|21 00 80 4e) blrl
+
+000101ec <_GLOBAL_OFFSET_TABLE_>:
+ 101ec: (00 01 01 48|48 01 01 00) 00 00 00 00 00 00 00 00 .*
diff --git a/ld/testsuite/ld-powerpc/abs32-pie.r b/ld/testsuite/ld-powerpc/abs32-pie.r
new file mode 100644
index 00000000000..6a45fbf06f6
--- /dev/null
+++ b/ld/testsuite/ld-powerpc/abs32-pie.r
@@ -0,0 +1,9 @@
+#source: abs32-reloc.s
+#as: -a32
+#ld: -melf32ppc -pie --hash-style=sysv --defsym a=1 --defsym 'HIDDEN(b=2)' --defsym c=0x12345678
+#readelf: -rW
+
+Relocation section '\.rela\.dyn' at offset .* contains 2 entries:
+ Offset Info Type Sym\. Value Symbol's Name \+ Addend
+000101c8 00000016 R_PPC_RELATIVE 101c8
+000101dc 00000016 R_PPC_RELATIVE 101c8
diff --git a/ld/testsuite/ld-powerpc/abs32-reloc.s b/ld/testsuite/ld-powerpc/abs32-reloc.s
new file mode 100644
index 00000000000..70776c86411
--- /dev/null
+++ b/ld/testsuite/ld-powerpc/abs32-reloc.s
@@ -0,0 +1,22 @@
+ .globl x
+ .hidden x
+
+ .data
+ .p2align 2
+x:
+ .long x
+ .long a
+ .long b
+ .long c
+
+ .text
+ .p2align 2
+ .globl _start
+ .type _start,@function
+_start:
+0:
+ lwz 7,x@got(30)
+ lwz 8,a@got(30)
+ lwz 9,b@got(30)
+ lwz 10,c@got(30)
+ .size _start,.-_start
diff --git a/ld/testsuite/ld-powerpc/abs32-shared.d b/ld/testsuite/ld-powerpc/abs32-shared.d
new file mode 100644
index 00000000000..a08930bb1b9
--- /dev/null
+++ b/ld/testsuite/ld-powerpc/abs32-shared.d
@@ -0,0 +1,24 @@
+#source: abs32-reloc.s
+#as: -a32
+#ld: -melf32ppc -shared --hash-style=sysv --defsym a=1 --defsym 'HIDDEN(b=2)' --defsym c=0x12345678
+#objdump: -dr
+
+.*: file format .*
+
+Disassembly of section \.text:
+
+00000160 <_start>:
+ 160: (80 fe ff f0|f0 ff fe 80) lwz r7,-16\(r30\)
+ 164: (81 1e ff f8|f8 ff 1e 81) lwz r8,-8\(r30\)
+ 168: (81 3e ff ec|ec ff 3e 81) lwz r9,-20\(r30\)
+ 16c: (81 5e ff f4|f4 ff 5e 81) lwz r10,-12\(r30\)
+
+Disassembly of section \.got:
+
+000101f0 <\.got>:
+ 101f0: (00 00 00 02|02 00 00 00) .*
+ .\.\.
+ 10200: (4e 80 00 21|21 00 80 4e) blrl
+
+00010204 <_GLOBAL_OFFSET_TABLE_>:
+ 10204: (00 01 01 70|70 01 01 00) 00 00 00 00 00 00 00 00 .*
diff --git a/ld/testsuite/ld-powerpc/abs32-shared.r b/ld/testsuite/ld-powerpc/abs32-shared.r
new file mode 100644
index 00000000000..d0cd80ff717
--- /dev/null
+++ b/ld/testsuite/ld-powerpc/abs32-shared.r
@@ -0,0 +1,13 @@
+#source: abs32-reloc.s
+#as: -a32
+#ld: -melf32ppc -shared --hash-style=sysv --defsym a=1 --defsym 'HIDDEN(b=2)' --defsym c=0x12345678
+#readelf: -rW
+
+Relocation section '\.rela\.dyn' at offset .* contains 6 entries:
+ Offset Info Type Sym\. Value Symbol's Name \+ Addend
+000101e0 00000016 R_PPC_RELATIVE 101e0
+000101f4 00000016 R_PPC_RELATIVE 101e0
+000101e4 00000401 R_PPC_ADDR32 00000001 a \+ 0
+000101fc 00000414 R_PPC_GLOB_DAT 00000001 a \+ 0
+000101ec 00000301 R_PPC_ADDR32 12345678 c \+ 0
+000101f8 00000314 R_PPC_GLOB_DAT 12345678 c \+ 0
diff --git a/ld/testsuite/ld-powerpc/abs32-static.d b/ld/testsuite/ld-powerpc/abs32-static.d
new file mode 100644
index 00000000000..f37f1046e87
--- /dev/null
+++ b/ld/testsuite/ld-powerpc/abs32-static.d
@@ -0,0 +1,26 @@
+#source: abs32-reloc.s
+#as: -a32
+#ld: -melf32ppc -static --defsym a=1 --defsym 'HIDDEN(b=2)' --defsym c=0x12345678
+#objdump: -dr
+
+.*: file format .*
+
+Disassembly of section \.text:
+
+01800074 <_start>:
+ 1800074: (80 fe ff f0|f0 ff fe 80) lwz r7,-16\(r30\)
+ 1800078: (81 1e ff f8|f8 ff 1e 81) lwz r8,-8\(r30\)
+ 180007c: (81 3e ff ec|ec ff 3e 81) lwz r9,-20\(r30\)
+ 1800080: (81 5e ff f4|f4 ff 5e 81) lwz r10,-12\(r30\)
+
+Disassembly of section \.got:
+
+01810094 <\.got>:
+ 1810094: (00 00 00 02|02 00 00 00) .*
+ 1810098: (01 81 00 84|84 00 81 01) .*
+ 181009c: (12 34 56 78|78 56 34 12) .*
+ 18100a0: (00 00 00 01|01 00 00 00) .*
+ 18100a4: (4e 80 00 21|21 00 80 4e) blrl
+
+018100a8 <_GLOBAL_OFFSET_TABLE_>:
+ \.\.\.
diff --git a/ld/testsuite/ld-powerpc/abs32-static.r b/ld/testsuite/ld-powerpc/abs32-static.r
new file mode 100644
index 00000000000..3eca8776817
--- /dev/null
+++ b/ld/testsuite/ld-powerpc/abs32-static.r
@@ -0,0 +1,6 @@
+#source: abs32-reloc.s
+#as: -a32
+#ld: -melf32ppc -static --defsym a=1 --defsym 'HIDDEN(b=2)' --defsym c=0x12345678
+#readelf: -rW
+
+There are no relocations in this file.
diff --git a/ld/testsuite/ld-powerpc/elfv2so.d b/ld/testsuite/ld-powerpc/elfv2so.d
index 4018f0536c6..0005710f621 100644
--- a/ld/testsuite/ld-powerpc/elfv2so.d
+++ b/ld/testsuite/ld-powerpc/elfv2so.d
@@ -80,7 +80,7 @@ Disassembly of section \.text:
.*: (7d 60 5a 14|14 5a 60 7d) add r11,r0,r11
.*: (38 0c ff d4|d4 ff 0c 38) addi r0,r12,-44
.*: (e9 8b 00 00|00 00 8b e9) ld r12,0\(r11\)
-.*: (78 00 f0 82|82 f0 00 78) rldicl r0,r0,62,2
+.*: (78 00 f0 82|82 f0 00 78) srdi r0,r0,2
.*: (7d 89 03 a6|a6 03 89 7d) mtctr r12
.*: (e9 6b 00 08|08 00 6b e9) ld r11,8\(r11\)
.*: (4e 80 04 20|20 04 80 4e) bctr
diff --git a/ld/testsuite/ld-powerpc/notoc.d b/ld/testsuite/ld-powerpc/notoc.d
index 3555be7334c..69f17217779 100644
--- a/ld/testsuite/ld-powerpc/notoc.d
+++ b/ld/testsuite/ld-powerpc/notoc.d
@@ -23,7 +23,7 @@ Disassembly of section \.text:
.*: (a6 03 88 7d|7d 88 03 a6) mtlr r12
.*: (ff 7f 80 3d|3d 80 7f ff) lis r12,32767
.*: (ff ff 8c 61|61 8c ff ff) ori r12,r12,65535
-.*: (c6 07 9c 79|79 9c 07 c6) rldicr r28,r12,32,31
+.*: (c6 07 9c 79|79 9c 07 c6) sldi r28,r12,32
.*: (ff ef 8c 65|65 8c ef ff) oris r12,r12,61439
.*: (28 ff 8c 61|61 8c ff 28) ori r12,r12,65320
.*: (14 62 8b 7d|7d 8b 62 14) add r12,r11,r12
diff --git a/ld/testsuite/ld-powerpc/notoc3.d b/ld/testsuite/ld-powerpc/notoc3.d
index 134bba31bfd..24cf9bb19c0 100644
--- a/ld/testsuite/ld-powerpc/notoc3.d
+++ b/ld/testsuite/ld-powerpc/notoc3.d
@@ -20,7 +20,7 @@ Disassembly of section \.text:
.*: (00 00 6b 61|61 6b 00 00) ori r11,r11,0
.*: (ff ef 13 06|06 13 ef ff) pla r12,-268435736 # 0
.*: (e8 fe 80 39|39 80 fe e8)
-.*: (46 17 6b 79|79 6b 17 46) rldicr r11,r11,34,29
+.*: (46 17 6b 79|79 6b 17 46) sldi r11,r11,34
.*: (14 62 8b 7d|7d 8b 62 14) add r12,r11,r12
.*: (a6 03 89 7d|7d 89 03 a6) mtctr r12
.*: (20 04 80 4e|4e 80 04 20) bctr
diff --git a/ld/testsuite/ld-powerpc/powerpc.exp b/ld/testsuite/ld-powerpc/powerpc.exp
index 3eb707f42ea..1c7a378aebc 100644
--- a/ld/testsuite/ld-powerpc/powerpc.exp
+++ b/ld/testsuite/ld-powerpc/powerpc.exp
@@ -173,6 +173,18 @@ set ppcelftests {
{{objdump -dr relaxrl.d}}
"rrelax"}
{"build empty shared library" "-shared" "" "" "empty.s" {} "empty.so"}
+ {"abs32-static" "-melf32ppc -static --defsym a=1 --defsym 'HIDDEN(b=2)' --defsym c=0x12345678" ""
+ "-a32" {abs32-reloc.s}
+ {{objdump {-dr} abs32-static.d}
+ {readelf {-rW} abs32-static.r}} "abs32-static"}
+ {"abs32-pie" "-melf32ppc -pie --hash-style=sysv --defsym a=1 --defsym 'HIDDEN(b=2)' --defsym c=0x12345678" ""
+ "-a32" {abs32-reloc.s}
+ {{objdump {-dr} abs32-pie.d}
+ {readelf {-rW} abs32-pie.r}} "abs32-pie"}
+ {"abs32-shared" "-melf32ppc -shared --hash-style=sysv --defsym a=1 --defsym 'HIDDEN(b=2)' --defsym c=0x12345678" ""
+ "-a32" {abs32-reloc.s}
+ {{objdump {-dr} abs32-shared.d}
+ {readelf {-rW} abs32-shared.r}} "abs32-shared"}
}
set ppc64elftests {
@@ -354,6 +366,26 @@ set ppc64elftests {
{"startstop" "-shared -melf64ppc --hash-style=sysv --gc-sections -z start-stop-gc" ""
"-a64 -mpower10" {startstop.s}
{{objdump -d startstop.d} {readelf {-rW} startstop.r}} "startstop.so"}
+ {"abs-static" "-melf64ppc -static --defsym a=1 --defsym 'HIDDEN(b=2)' --defsym c=0x123456789abcdef0" ""
+ "-a64" {abs-reloc.s}
+ {{objdump {-sdr} abs-static.d}
+ {readelf {-rW} abs-static.r}} "abs-static"}
+ {"abs-pie" "-melf64ppc -pie --hash-style=sysv --defsym a=1 --defsym 'HIDDEN(b=2)' --defsym c=0x123456789abcdef0" ""
+ "-a64" {abs-reloc.s}
+ {{objdump {-sdr} abs-pie.d}
+ {readelf {-rW} abs-pie.r}} "abs-pie"}
+ {"abs-shared" "-melf64ppc -shared --hash-style=sysv --defsym a=1 --defsym 'HIDDEN(b=2)' --defsym c=0x123456789abcdef0" ""
+ "-a64" {abs-reloc.s}
+ {{objdump {-sdr} abs-shared.d}
+ {readelf {-rW} abs-shared.r}} "abs-shared"}
+ {"abs-pie-relr" "-melf64ppc -pie --hash-style=sysv -z pack-relative-relocs --defsym a=1 --defsym 'HIDDEN(b=2)' --defsym c=0x123456789abcdef0" ""
+ "-a64" {abs-reloc.s}
+ {{objdump {-sdr} abs-pie-relr.d}
+ {readelf {-rW} abs-pie-relr.r}} "abs-pie-relr"}
+ {"abs-shared-relr" "-melf64ppc -shared --hash-style=sysv -z pack-relative-relocs --defsym a=1 --defsym 'HIDDEN(b=2)' --defsym c=0x123456789abcdef0" ""
+ "-a64" {abs-reloc.s}
+ {{objdump {-sdr} abs-shared-relr.d}
+ {readelf {-rW} abs-shared-relr.r}} "abs-shared-relr"}
}
set ppceabitests {
@@ -445,6 +477,8 @@ if [ supports_ppc64 ] then {
run_dump_test "tlsie"
run_dump_test "non-contiguous-powerpc64"
run_dump_test "tprel"
+ run_dump_test "pr28827-1"
+ run_dump_test "pr28827-2"
}
run_dump_test "localgot"
diff --git a/ld/testsuite/ld-powerpc/pr28827-1.d b/ld/testsuite/ld-powerpc/pr28827-1.d
new file mode 100644
index 00000000000..b4e4980a816
--- /dev/null
+++ b/ld/testsuite/ld-powerpc/pr28827-1.d
@@ -0,0 +1,5 @@
+# as: -a64
+# ld: -melf64ppc -gc-sections -shared -z relro --plt-align=0
+# size: -A
+
+#pass
diff --git a/ld/testsuite/ld-powerpc/pr28827-1.s b/ld/testsuite/ld-powerpc/pr28827-1.s
new file mode 100644
index 00000000000..b9129843c66
--- /dev/null
+++ b/ld/testsuite/ld-powerpc/pr28827-1.s
@@ -0,0 +1,83 @@
+ .globl _start
+ .type _start,@function
+ .text
+_start:
+ .cfi_startproc
+0:
+ addis 2,12,(.TOC.-0b)@ha
+ addi 2,2,(.TOC.-0b)@l
+ .localentry _start,.-0b
+ mflr 0
+ std 0,16(1)
+ stdu 1,-32(1)
+ .cfi_def_cfa_offset 32
+ .cfi_offset 65, 16
+
+ .macro call f
+ bl \f
+ nop
+ .endm
+
+# 3000 plt calls, giving over 64k in .plt size. With a small .got
+# this guarantees some plt call stubs can use a 16-bit signed offset
+# from .TOC. while others need a 32-bit signed offset (and are larger).
+
+ .irpc t4,012
+ .irpc t3,0123456789
+ .irpc t2,0123456789
+ .irpc t1,0123456789
+ .if \t4
+ call f\t4\t3\t2\t1
+ .elseif \t3
+ call f\t3\t2\t1
+ .elseif \t2
+ call f\t2\t1
+ .else
+ call f\t1
+ .endif
+ .endr
+ .endr
+ .endr
+ .endr
+
+ addi 1,1,32
+ .cfi_def_cfa_offset 0
+ ld 0,16(1)
+ mtlr 0
+ .cfi_restore 65
+ blr
+ .cfi_endproc
+ .size _start,.-_start
+
+# Padding to trigger a stub sizing error with commit 2f83249c13 and
+# c804c6f98d (relro changes). This particular testcase gives a decrease
+# in .got to .plt gap after .eh_frame editing, resulting in some plt
+# call stubs being smaller. If the very last one is smaller the size
+# error triggers. Arguably, the ppc64 backend should not report an
+# error for shrinkage. However, the actual PR object files showed an
+# *increase* in .got to .plt gap after .eh_frame editing, resulting in
+# some plt call stubs being larger. That hit an assertion failure
+# when a long branch stub followed the larger plt call stub and
+# overwrote the end of the plt call stub.
+# With enough fiddling of this testcase it likely would be possible to
+# find the right padding here and .eh_frame sizing to trigger an
+# increase in .got to .plt gap. The point of this testcase is to show
+# that the .got to .plt gap should not change after sizing.
+ .space 50000
+
+# Generate some .eh_frame info that -gc-sections will trim
+ .macro fundef f
+ .section .text.\f,"ax",@progbits
+ .type \f,@function
+\f:
+ .cfi_startproc
+ blr
+ .cfi_endproc
+ .size \f,.-\f
+ .endm
+
+ .irpc t2,0123456789
+ .irpc t1,0123456789
+ fundef dummy\t2\t1
+ .endr
+ .endr
diff --git a/ld/testsuite/ld-powerpc/pr28827-2.d b/ld/testsuite/ld-powerpc/pr28827-2.d
new file mode 100644
index 00000000000..8da819d822a
--- /dev/null
+++ b/ld/testsuite/ld-powerpc/pr28827-2.d
@@ -0,0 +1,48 @@
+#as: -a64
+#ld: -melf64ppc --plt-align=0 -T pr28827-2.lnk
+#objdump: -dr
+
+.*: file format .*
+
+Disassembly of section \.text:
+
+.*:
+.*: (49 ff ff f0|f0 ff ff 49) b .* <far1>
+ \.\.\.
+
+.* <.*\.plt_branch\..*>:
+.*: (e9 82 80 28|28 80 82 e9) ld r12,-32728\(r2\)
+.*: (7d 89 03 a6|a6 03 89 7d) mtctr r12
+.*: (4e 80 04 20|20 04 80 4e) bctr
+
+.* <_start>:
+.*: (49 ff ff d8|d8 ff ff 49) b .* <far1>
+.*: (4b ff ff f0|f0 ff ff 4b) b .*
+
+Disassembly of section \.far1:
+
+.*:
+.*: (4a 00 00 38|38 00 00 4a) b .* <_start>
+
+.* <.*\.long_branch\..*>:
+.*: (49 ff ff f4|f4 ff ff 49) b .* <far2>
+ \.\.\.
+
+.* <far1>:
+.*: (41 82 ff f4|f4 ff 82 41) beq .*
+.*: (4a 00 00 24|24 00 00 4a) b .* <_start>
+
+Disassembly of section \.far2:
+
+.*:
+.*: (e9 82 80 20|20 80 82 e9) ld r12,-32736\(r2\)
+.*: (7d 89 03 a6|a6 03 89 7d) mtctr r12
+.*: (4e 80 04 20|20 04 80 4e) bctr
+
+.*:
+.*: (4a 00 00 24|24 00 00 4a) b .* <far1>
+ \.\.\.
+
+.* <far2>:
+.*: (40 82 ff f4|f4 ff 82 40) bne .*
+.*: (4b ff ff e4|e4 ff ff 4b) b .*
diff --git a/ld/testsuite/ld-powerpc/pr28827-2.lnk b/ld/testsuite/ld-powerpc/pr28827-2.lnk
new file mode 100644
index 00000000000..61a8ca269f3
--- /dev/null
+++ b/ld/testsuite/ld-powerpc/pr28827-2.lnk
@@ -0,0 +1,9 @@
+SECTIONS
+{
+ . = SIZEOF_HEADERS;
+ .text : { *(.text) }
+ . = . + 0x2000000 + 32 - 4 * SIZEOF (.text);
+ .far1 : { *(.far1) }
+ . = . + 0x2000000 + 32 - 4 * SIZEOF (.far1);
+ .far2 : { *(.far2) }
+}
diff --git a/ld/testsuite/ld-powerpc/pr28827-2.s b/ld/testsuite/ld-powerpc/pr28827-2.s
new file mode 100644
index 00000000000..a628d6d09f9
--- /dev/null
+++ b/ld/testsuite/ld-powerpc/pr28827-2.s
@@ -0,0 +1,15 @@
+ .globl _start
+ .text
+_start:
+ b far1
+ b far2
+
+ .section .far1,"ax",@progbits
+far1:
+ beq far2
+ b _start
+
+ .section .far2,"ax",@progbits
+far2:
+ bne far1
+ b _start
diff --git a/ld/testsuite/ld-powerpc/symtocbase-1.s b/ld/testsuite/ld-powerpc/symtocbase-1.s
index ba6f073710c..5b6417bd0a7 100644
--- a/ld/testsuite/ld-powerpc/symtocbase-1.s
+++ b/ld/testsuite/ld-powerpc/symtocbase-1.s
@@ -1,18 +1,22 @@
-.section .toc,"aw",@progbits
+ .section .toc,"aw",@progbits
.align 15
.globl x
x: .quad .x,.x@tocbase,0
.LCi: .quad i
.space 48 * 1024
-.data
+
+ .data
+ .p2align 2
.globl i
i: .long 0
.L1bases:
.quad .TOC.@tocbase
.quad .x@tocbase
.quad .y@tocbase
-.text
+
+ .text
.globl .x
+ .hidden .x
.x:
ld 9,.LCi@toc(2)
blr
diff --git a/ld/testsuite/ld-powerpc/symtocbase-2.s b/ld/testsuite/ld-powerpc/symtocbase-2.s
index 1176cb8a9c5..01cba6a19e0 100644
--- a/ld/testsuite/ld-powerpc/symtocbase-2.s
+++ b/ld/testsuite/ld-powerpc/symtocbase-2.s
@@ -1,16 +1,20 @@
-.section .toc,"aw",@progbits
+ .section .toc,"aw",@progbits
.align 15
.globl y
y: .quad .y,.y@tocbase,0
.LCi: .quad i
.space 48 * 1024
-.data
+
+ .data
+ .p2align 3
.L2bases:
.quad .TOC.@tocbase
.quad .x@tocbase
.quad .y@tocbase
-.text
+
+ .text
.globl .y
+ .hidden .y
.y:
ld 9,.LCi@toc(2)
blr
diff --git a/ld/testsuite/ld-powerpc/symtocbase.d b/ld/testsuite/ld-powerpc/symtocbase.d
index 118885faa72..ffad90dbc56 100644
--- a/ld/testsuite/ld-powerpc/symtocbase.d
+++ b/ld/testsuite/ld-powerpc/symtocbase.d
@@ -16,7 +16,7 @@ Disassembly of section \.data:
.* \.long 0x28000
.* \.long 0x0
.* \.long 0x38000
-.* \.long 0x0
+#...
.* \.long 0x38000
.* \.long 0x0
.* \.long 0x28000
diff --git a/ld/testsuite/ld-powerpc/tlsdesc2.d b/ld/testsuite/ld-powerpc/tlsdesc2.d
index c271c949b01..cd2663a18c4 100644
--- a/ld/testsuite/ld-powerpc/tlsdesc2.d
+++ b/ld/testsuite/ld-powerpc/tlsdesc2.d
@@ -59,7 +59,7 @@ Disassembly of section \.text:
.*: (7d 60 5a 14|14 5a 60 7d) add r11,r0,r11
.*: (38 0c ff d4|d4 ff 0c 38) addi r0,r12,-44
.*: (e9 8b 00 00|00 00 8b e9) ld r12,0\(r11\)
-.*: (78 00 f0 82|82 f0 00 78) rldicl r0,r0,62,2
+.*: (78 00 f0 82|82 f0 00 78) srdi r0,r0,2
.*: (7d 89 03 a6|a6 03 89 7d) mtctr r12
.*: (e9 6b 00 08|08 00 6b e9) ld r11,8\(r11\)
.*: (4e 80 04 20|20 04 80 4e) bctr
diff --git a/ld/testsuite/ld-powerpc/tlsget.d b/ld/testsuite/ld-powerpc/tlsget.d
index f419fca4d29..f16febcdb9c 100644
--- a/ld/testsuite/ld-powerpc/tlsget.d
+++ b/ld/testsuite/ld-powerpc/tlsget.d
@@ -80,7 +80,7 @@ Disassembly of section \.text:
.*: (7d 60 5a 14|14 5a 60 7d) add r11,r0,r11
.*: (38 0c ff d4|d4 ff 0c 38) addi r0,r12,-44
.*: (e9 8b 00 00|00 00 8b e9) ld r12,0\(r11\)
-.*: (78 00 f0 82|82 f0 00 78) rldicl r0,r0,62,2
+.*: (78 00 f0 82|82 f0 00 78) srdi r0,r0,2
.*: (7d 89 03 a6|a6 03 89 7d) mtctr r12
.*: (e9 6b 00 08|08 00 6b e9) ld r11,8\(r11\)
.*: (4e 80 04 20|20 04 80 4e) bctr
diff --git a/ld/testsuite/ld-powerpc/tlsget2.d b/ld/testsuite/ld-powerpc/tlsget2.d
index 13dc64b595e..910e048e7b9 100644
--- a/ld/testsuite/ld-powerpc/tlsget2.d
+++ b/ld/testsuite/ld-powerpc/tlsget2.d
@@ -67,7 +67,7 @@ Disassembly of section \.text:
.*: (7d 60 5a 14|14 5a 60 7d) add r11,r0,r11
.*: (38 0c ff d4|d4 ff 0c 38) addi r0,r12,-44
.*: (e9 8b 00 00|00 00 8b e9) ld r12,0\(r11\)
-.*: (78 00 f0 82|82 f0 00 78) rldicl r0,r0,62,2
+.*: (78 00 f0 82|82 f0 00 78) srdi r0,r0,2
.*: (7d 89 03 a6|a6 03 89 7d) mtctr r12
.*: (e9 6b 00 08|08 00 6b e9) ld r11,8\(r11\)
.*: (4e 80 04 20|20 04 80 4e) bctr
diff --git a/ld/testsuite/ld-powerpc/tlsopt5.d b/ld/testsuite/ld-powerpc/tlsopt5.d
index efd6debc555..2ea1f7f7970 100644
--- a/ld/testsuite/ld-powerpc/tlsopt5.d
+++ b/ld/testsuite/ld-powerpc/tlsopt5.d
@@ -55,7 +55,7 @@ Disassembly of section \.text:
.*: (14 5a 60 7d|7d 60 5a 14) add r11,r0,r11
.*: (d4 ff 0c 38|38 0c ff d4) addi r0,r12,-44
.*: (00 00 8b e9|e9 8b 00 00) ld r12,0\(r11\)
-.*: (82 f0 00 78|78 00 f0 82) rldicl r0,r0,62,2
+.*: (82 f0 00 78|78 00 f0 82) srdi r0,r0,2
.*: (a6 03 89 7d|7d 89 03 a6) mtctr r12
.*: (08 00 6b e9|e9 6b 00 08) ld r11,8\(r11\)
.*: (20 04 80 4e|4e 80 04 20) bctr
diff --git a/ld/testsuite/ld-powerpc/tlsopt6.d b/ld/testsuite/ld-powerpc/tlsopt6.d
index 15def719cba..38a2068bbdf 100644
--- a/ld/testsuite/ld-powerpc/tlsopt6.d
+++ b/ld/testsuite/ld-powerpc/tlsopt6.d
@@ -73,7 +73,7 @@ Disassembly of section \.text:
.*: (14 5a 60 7d|7d 60 5a 14) add r11,r0,r11
.*: (d4 ff 0c 38|38 0c ff d4) addi r0,r12,-44
.*: (00 00 8b e9|e9 8b 00 00) ld r12,0\(r11\)
-.*: (82 f0 00 78|78 00 f0 82) rldicl r0,r0,62,2
+.*: (82 f0 00 78|78 00 f0 82) srdi r0,r0,2
.*: (a6 03 89 7d|7d 89 03 a6) mtctr r12
.*: (08 00 6b e9|e9 6b 00 08) ld r11,8\(r11\)
.*: (20 04 80 4e|4e 80 04 20) bctr
diff --git a/ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-01.d b/ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-01.d
deleted file mode 100644
index 669a1392067..00000000000
--- a/ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-01.d
+++ /dev/null
@@ -1,11 +0,0 @@
-#source: attr-merge-arch-failed-01a.s
-#source: attr-merge-arch-failed-01b.s
-#as: -march-attr
-#ld: -r -m[riscv_choose_ilp32_emul]
-#warning: .*mis-matched ISA version 3.0 for 'a' extension, the output version is 2.0
-#readelf: -A
-
-Attribute Section: riscv
-File Attributes
- Tag_RISCV_arch: ".*a3p0.*"
-#..
diff --git a/ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-01a.s b/ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-01a.s
deleted file mode 100644
index 365901d8dc1..00000000000
--- a/ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-01a.s
+++ /dev/null
@@ -1 +0,0 @@
- .attribute arch, "rv32i2p0_m2p0_a2p0"
diff --git a/ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-01b.s b/ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-01b.s
deleted file mode 100644
index 49263bf66d4..00000000000
--- a/ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-01b.s
+++ /dev/null
@@ -1 +0,0 @@
- .attribute arch, "rv32i2p0_m2p0_a3p0"
diff --git a/ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-02.d b/ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-02.d
deleted file mode 100644
index 2f2638ace22..00000000000
--- a/ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-02.d
+++ /dev/null
@@ -1,27 +0,0 @@
-#source: attr-merge-arch-failed-02a.s
-#source: attr-merge-arch-failed-02b.s
-#source: attr-merge-arch-failed-02c.s
-#source: attr-merge-arch-failed-02d.s
-#as: -march-attr
-#ld: -r -m[riscv_choose_ilp32_emul]
-#warning: .*mis-matched ISA version 3.0 for 'i' extension, the output version is 2.0
-#warning: .*mis-matched ISA version 3.0 for 'm' extension, the output version is 2.0
-#warning: .*mis-matched ISA version 3.0 for 'a' extension, the output version is 2.0
-#warning: .*mis-matched ISA version 3.0 for 'zicsr' extension, the output version is 2.0
-#warning: .*mis-matched ISA version 3.0 for 'xunknown' extension, the output version is 2.0
-#warning: .*mis-matched ISA version 2.1 for 'i' extension, the output version is 3.0
-#warning: .*mis-matched ISA version 2.2 for 'm' extension, the output version is 3.0
-#warning: .*mis-matched ISA version 2.3 for 'a' extension, the output version is 3.0
-#warning: .*mis-matched ISA version 2.4 for 'zicsr' extension, the output version is 3.0
-#warning: .*mis-matched ISA version 2.5 for 'xunknown' extension, the output version is 3.0
-#warning: .*mis-matched ISA version 4.6 for 'i' extension, the output version is 3.0
-#warning: .*mis-matched ISA version 4.7 for 'm' extension, the output version is 3.0
-#warning: .*mis-matched ISA version 4.8 for 'a' extension, the output version is 3.0
-#warning: .*mis-matched ISA version 4.9 for 'zicsr' extension, the output version is 3.0
-#warning: .*mis-matched ISA version 4.0 for 'xunknown' extension, the output version is 3.0
-#readelf: -A
-
-Attribute Section: riscv
-File Attributes
- Tag_RISCV_arch: "rv32i4p6_m4p7_a4p8_zicsr4p9_zifencei2p0_xunknown4p0"
-#..
diff --git a/ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-02a.s b/ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-02a.s
deleted file mode 100644
index 3dbf8a20d59..00000000000
--- a/ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-02a.s
+++ /dev/null
@@ -1 +0,0 @@
- .attribute arch, "rv32i2p0_m2p0_a2p0_zicsr2p0_xunknown2p0"
diff --git a/ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-02b.s b/ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-02b.s
deleted file mode 100644
index 7bbc39f4258..00000000000
--- a/ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-02b.s
+++ /dev/null
@@ -1 +0,0 @@
- .attribute arch, "rv32i3p0_m3p0_a3p0_zicsr3p0_xunknown3p0"
diff --git a/ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-02c.s b/ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-02c.s
deleted file mode 100644
index 2a921e62dca..00000000000
--- a/ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-02c.s
+++ /dev/null
@@ -1 +0,0 @@
- .attribute arch, "rv32i2p1_m2p2_a2p3_zicsr2p4_xunknown2p5"
diff --git a/ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-02d.s b/ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-02d.s
deleted file mode 100644
index 6ef5ee5851a..00000000000
--- a/ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-02d.s
+++ /dev/null
@@ -1 +0,0 @@
- .attribute arch, "rv32i4p6_m4p7_a4p8_zicsr4p9_xunknown4p0"
diff --git a/ld/testsuite/ld-riscv-elf/attr-merge-user-ext-01.d b/ld/testsuite/ld-riscv-elf/attr-merge-user-ext-01.d
new file mode 100644
index 00000000000..d15bcdcab1b
--- /dev/null
+++ b/ld/testsuite/ld-riscv-elf/attr-merge-user-ext-01.d
@@ -0,0 +1,9 @@
+#source: attr-merge-user-ext-rv32i2p1_m2p0.s
+#source: attr-merge-user-ext-rv32i2p1_m2p1.s
+#as:
+#ld: -r -m[riscv_choose_ilp32_emul]
+#readelf: -A
+
+Attribute Section: riscv
+File Attributes
+ Tag_RISCV_arch: "rv32i2p1_m2p1"
diff --git a/ld/testsuite/ld-riscv-elf/attr-merge-user-ext-rv32i2p1_m2p0.s b/ld/testsuite/ld-riscv-elf/attr-merge-user-ext-rv32i2p1_m2p0.s
new file mode 100644
index 00000000000..a7e0547215f
--- /dev/null
+++ b/ld/testsuite/ld-riscv-elf/attr-merge-user-ext-rv32i2p1_m2p0.s
@@ -0,0 +1 @@
+.attribute arch, "rv32i2p1_m2p0"
diff --git a/ld/testsuite/ld-riscv-elf/attr-merge-user-ext-rv32i2p1_m2p1.s b/ld/testsuite/ld-riscv-elf/attr-merge-user-ext-rv32i2p1_m2p1.s
new file mode 100644
index 00000000000..a1b61e3a949
--- /dev/null
+++ b/ld/testsuite/ld-riscv-elf/attr-merge-user-ext-rv32i2p1_m2p1.s
@@ -0,0 +1 @@
+.attribute arch, "rv32i2p1_m2p1"
diff --git a/ld/testsuite/ld-riscv-elf/ld-riscv-elf.exp b/ld/testsuite/ld-riscv-elf/ld-riscv-elf.exp
index 3d8950238a4..272424b33e3 100644
--- a/ld/testsuite/ld-riscv-elf/ld-riscv-elf.exp
+++ b/ld/testsuite/ld-riscv-elf/ld-riscv-elf.exp
@@ -160,8 +160,7 @@ if [istarget "riscv*-*-*"] {
run_dump_test "attr-merge-priv-spec-01"
run_dump_test "attr-merge-priv-spec-02"
run_dump_test "attr-merge-priv-spec-03"
- run_dump_test "attr-merge-arch-failed-01"
- run_dump_test "attr-merge-arch-failed-02"
+ run_dump_test "attr-merge-user-ext-01"
run_dump_test "attr-merge-stack-align-failed"
run_dump_test "attr-merge-priv-spec-failed-01"
run_dump_test "attr-merge-priv-spec-failed-02"
diff --git a/ld/testsuite/ld-scripts/defined5.d b/ld/testsuite/ld-scripts/defined5.d
index 7aa680b85ab..97096f705f2 100644
--- a/ld/testsuite/ld-scripts/defined5.d
+++ b/ld/testsuite/ld-scripts/defined5.d
@@ -1,8 +1,6 @@
#ld: -Tdefined5.t
#warning: .*multiple definition of `defined'.*
#nm: -B
-#xfail: [is_xcoff_format]
-# xcoff outputs value of "defined" from the object file
# Check that a script can override an object file symbol, if multiple
# definitions are allowed. See pr12356.
diff --git a/ld/testsuite/ld-scripts/output-section-types.d b/ld/testsuite/ld-scripts/output-section-types.d
index ab124fa4dd7..2ecacaba57d 100644
--- a/ld/testsuite/ld-scripts/output-section-types.d
+++ b/ld/testsuite/ld-scripts/output-section-types.d
@@ -1,13 +1,17 @@
#ld: -Toutput-section-types.t
#source: align2a.s
-#objdump: -h
+#readelf: -S --wide
#target: [is_elf_format]
#...
- . \.rom.*
-[ ]+ALLOC, READONLY
- . \.ro.*
-[ ]+CONTENTS, ALLOC, LOAD, READONLY, DATA
- . \.over.*
-[ ]+CONTENTS, READONLY
+.* .rom +NOBITS +[0-9a-f]+ +[0-9a-f]+ +[0-9a-f]+ +00 +A +0 +0 +[1248]
+.* .ro +PROGBITS +[0-9a-f]+ +[0-9a-f]+ +[0-9a-f]+ +00 +A +0 +0 +[1248]
+.* .over +PROGBITS +[0-9a-f]+ +[0-9a-f]+ +[0-9a-f]+ +00 + +0 +0 +[1248]
+.* progbits +PROGBITS +[0-9a-f]+ +[0-9a-f]+ +[0-9a-f]+ +00 +A +0 +0 +[1248]
+.* strtab +STRTAB +[0-9a-f]+ +[0-9a-f]+ +[0-9a-f]+ +00 +A +0 +0 +[1248]
+.* note +NOTE +[0-9a-f]+ +[0-9a-f]+ +[0-9a-f]+ +00 +A +0 +0 +[1248]
+.* init_array +INIT_ARRAY +[0-9a-f]+ +[0-9a-f]+ +[0-9a-f]+ +0[48] +A +0 +0 +[1248]
+.* fini_array +FINI_ARRAY +[0-9a-f]+ +[0-9a-f]+ +[0-9a-f]+ +0[48] +A +0 +0 +[1248]
+.* preinit_array +PREINIT_ARRAY +[0-9a-f]+ +[0-9a-f]+ +[0-9a-f]+ +0[48] +A +0 +0 +[1248]
+.* .ro.note +NOTE +[0-9a-f]+ +[0-9a-f]+ +[0-9a-f]+ +00 +A +0 +0 +[1248]
#pass
diff --git a/ld/testsuite/ld-scripts/output-section-types.t b/ld/testsuite/ld-scripts/output-section-types.t
index d8fdfda1a03..18fc5c11980 100644
--- a/ld/testsuite/ld-scripts/output-section-types.t
+++ b/ld/testsuite/ld-scripts/output-section-types.t
@@ -2,6 +2,13 @@ SECTIONS {
.rom (NOLOAD) : { LONG(1234); }
.ro (READONLY) : { LONG(5678); }
.over (OVERLAY) : { LONG(0123); }
+ progbits (TYPE=SHT_PROGBITS) : { BYTE(1) }
+ strtab (TYPE = SHT_STRTAB) : { BYTE(0) }
+ note (TYPE =SHT_NOTE) : { BYTE(8) }
+ init_array (TYPE= 14) : { QUAD(14) }
+ fini_array ( TYPE=SHT_FINI_ARRAY) : { QUAD(15) }
+ preinit_array (TYPE=SHT_PREINIT_ARRAY ) : { QUAD(16) }
+ .ro.note (READONLY (TYPE=SHT_NOTE)) : { LONG(5678); }
/DISCARD/ : { *(*) }
}
diff --git a/ld/testsuite/ld-tic6x/got-reloc-global.s b/ld/testsuite/ld-tic6x/got-reloc-global.s
index 054c2977904..e6fb809a0fe 100644
--- a/ld/testsuite/ld-tic6x/got-reloc-global.s
+++ b/ld/testsuite/ld-tic6x/got-reloc-global.s
@@ -9,3 +9,4 @@
.type a, @object
.size a, 4
a:
+ .section .note.GNU-stack
diff --git a/ld/testsuite/ld-tic6x/shlib-1.rd b/ld/testsuite/ld-tic6x/shlib-1.rd
index 9ad2396170e..cf1f34689f1 100644
--- a/ld/testsuite/ld-tic6x/shlib-1.rd
+++ b/ld/testsuite/ld-tic6x/shlib-1.rd
@@ -31,7 +31,7 @@ Program Headers:
LOAD 0x001000 0x00008000 0x00008000 0x001fc 0x001fc RW 0x1000
LOAD 0x002000 0x10000000 0x10000000 0x00130 0x00134 RWE 0x1000
DYNAMIC 0x001154 0x00008154 0x00008154 0x000a8 0x000a8 RW 0x4
- GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x20000 RWE 0x8
+ GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x20000 RW 0x8
Section to Segment mapping:
Segment Sections\.\.\.
diff --git a/ld/testsuite/ld-tic6x/shlib-1.s b/ld/testsuite/ld-tic6x/shlib-1.s
index cb065a2910f..058bcbc69ff 100644
--- a/ld/testsuite/ld-tic6x/shlib-1.s
+++ b/ld/testsuite/ld-tic6x/shlib-1.s
@@ -42,3 +42,4 @@ g2:
.hidden c
.scomm c,4,4
+ .section .note.GNU-stack
diff --git a/ld/testsuite/ld-tic6x/shlib-1b.rd b/ld/testsuite/ld-tic6x/shlib-1b.rd
index 9ad2396170e..cf1f34689f1 100644
--- a/ld/testsuite/ld-tic6x/shlib-1b.rd
+++ b/ld/testsuite/ld-tic6x/shlib-1b.rd
@@ -31,7 +31,7 @@ Program Headers:
LOAD 0x001000 0x00008000 0x00008000 0x001fc 0x001fc RW 0x1000
LOAD 0x002000 0x10000000 0x10000000 0x00130 0x00134 RWE 0x1000
DYNAMIC 0x001154 0x00008154 0x00008154 0x000a8 0x000a8 RW 0x4
- GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x20000 RWE 0x8
+ GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x20000 RW 0x8
Section to Segment mapping:
Segment Sections\.\.\.
diff --git a/ld/testsuite/ld-tic6x/shlib-1r.rd b/ld/testsuite/ld-tic6x/shlib-1r.rd
index 9ad2396170e..cf1f34689f1 100644
--- a/ld/testsuite/ld-tic6x/shlib-1r.rd
+++ b/ld/testsuite/ld-tic6x/shlib-1r.rd
@@ -31,7 +31,7 @@ Program Headers:
LOAD 0x001000 0x00008000 0x00008000 0x001fc 0x001fc RW 0x1000
LOAD 0x002000 0x10000000 0x10000000 0x00130 0x00134 RWE 0x1000
DYNAMIC 0x001154 0x00008154 0x00008154 0x000a8 0x000a8 RW 0x4
- GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x20000 RWE 0x8
+ GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x20000 RW 0x8
Section to Segment mapping:
Segment Sections\.\.\.
diff --git a/ld/testsuite/ld-tic6x/shlib-1rb.rd b/ld/testsuite/ld-tic6x/shlib-1rb.rd
index 9ad2396170e..cf1f34689f1 100644
--- a/ld/testsuite/ld-tic6x/shlib-1rb.rd
+++ b/ld/testsuite/ld-tic6x/shlib-1rb.rd
@@ -31,7 +31,7 @@ Program Headers:
LOAD 0x001000 0x00008000 0x00008000 0x001fc 0x001fc RW 0x1000
LOAD 0x002000 0x10000000 0x10000000 0x00130 0x00134 RWE 0x1000
DYNAMIC 0x001154 0x00008154 0x00008154 0x000a8 0x000a8 RW 0x4
- GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x20000 RWE 0x8
+ GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x20000 RW 0x8
Section to Segment mapping:
Segment Sections\.\.\.
diff --git a/ld/testsuite/ld-tic6x/shlib-2.s b/ld/testsuite/ld-tic6x/shlib-2.s
index 3d786dd298b..e6eba01c93a 100644
--- a/ld/testsuite/ld-tic6x/shlib-2.s
+++ b/ld/testsuite/ld-tic6x/shlib-2.s
@@ -21,3 +21,4 @@ sub:
ldw .d2t2 *+B14(c), B9
nop 1
.size sub, .-sub
+ .section .note.GNU-stack
diff --git a/ld/testsuite/ld-tic6x/shlib-app-1.rd b/ld/testsuite/ld-tic6x/shlib-app-1.rd
index 607d2709b3f..fb3a080f2c3 100644
--- a/ld/testsuite/ld-tic6x/shlib-app-1.rd
+++ b/ld/testsuite/ld-tic6x/shlib-app-1.rd
@@ -32,7 +32,7 @@ Program Headers:
LOAD 0x001000 0x00008000 0x00008000 0x00208 0x00208 RW 0x1000
LOAD 0x002000 0x10000000 0x10000000 0x000cc 0x000d0 RWE 0x1000
DYNAMIC 0x001150 0x00008150 0x00008150 0x000b8 0x000b8 RW 0x4
- GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x20000 RWE 0x8
+ GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x20000 RW 0x8
Section to Segment mapping:
Segment Sections\.\.\.
diff --git a/ld/testsuite/ld-tic6x/shlib-app-1.s b/ld/testsuite/ld-tic6x/shlib-app-1.s
index fe254bba3aa..3bb00079f83 100644
--- a/ld/testsuite/ld-tic6x/shlib-app-1.s
+++ b/ld/testsuite/ld-tic6x/shlib-app-1.s
@@ -29,3 +29,4 @@ b:
w:
.long g1
.long g2
+ .section .note.GNU-stack
diff --git a/ld/testsuite/ld-tic6x/shlib-app-1b.rd b/ld/testsuite/ld-tic6x/shlib-app-1b.rd
index 68d2076857c..3a5d2178301 100644
--- a/ld/testsuite/ld-tic6x/shlib-app-1b.rd
+++ b/ld/testsuite/ld-tic6x/shlib-app-1b.rd
@@ -32,7 +32,7 @@ Program Headers:
LOAD 0x001000 0x00008000 0x00008000 0x00208 0x00208 RW 0x1000
LOAD 0x002000 0x10000000 0x10000000 0x000cc 0x000d0 RWE 0x1000
DYNAMIC 0x001150 0x00008150 0x00008150 0x000b8 0x000b8 RW 0x4
- GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x20000 RWE 0x8
+ GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x20000 RW 0x8
Section to Segment mapping:
Segment Sections\.\.\.
diff --git a/ld/testsuite/ld-tic6x/shlib-app-1r.rd b/ld/testsuite/ld-tic6x/shlib-app-1r.rd
index 82502afb0d0..288400b1bbc 100644
--- a/ld/testsuite/ld-tic6x/shlib-app-1r.rd
+++ b/ld/testsuite/ld-tic6x/shlib-app-1r.rd
@@ -31,7 +31,7 @@ Program Headers:
LOAD 0x001000 0x00008000 0x00008000 0x001c4 0x001c4 RW 0x1000
LOAD 0x002000 0x10000000 0x10000000 0x000c4 0x000c8 RWE 0x1000
DYNAMIC 0x00110c 0x0000810c 0x0000810c 0x000b8 0x000b8 RW 0x4
- GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x20000 RWE 0x8
+ GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x20000 RW 0x8
Section to Segment mapping:
Segment Sections\.\.\.
diff --git a/ld/testsuite/ld-tic6x/shlib-app-1r.s b/ld/testsuite/ld-tic6x/shlib-app-1r.s
index a6de9000e3a..4928804ed0f 100644
--- a/ld/testsuite/ld-tic6x/shlib-app-1r.s
+++ b/ld/testsuite/ld-tic6x/shlib-app-1r.s
@@ -17,3 +17,4 @@ fish:
.size b, 4
b:
.long 0x12345678
+ .section .note.GNU-stack
diff --git a/ld/testsuite/ld-tic6x/shlib-app-1rb.rd b/ld/testsuite/ld-tic6x/shlib-app-1rb.rd
index 8d13fb2c2c4..058261db8ca 100644
--- a/ld/testsuite/ld-tic6x/shlib-app-1rb.rd
+++ b/ld/testsuite/ld-tic6x/shlib-app-1rb.rd
@@ -31,7 +31,7 @@ Program Headers:
LOAD 0x001000 0x00008000 0x00008000 0x001c4 0x001c4 RW 0x1000
LOAD 0x002000 0x10000000 0x10000000 0x000c4 0x000c8 RWE 0x1000
DYNAMIC 0x00110c 0x0000810c 0x0000810c 0x000b8 0x000b8 RW 0x4
- GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x20000 RWE 0x8
+ GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x20000 RW 0x8
Section to Segment mapping:
Segment Sections\.\.\.
diff --git a/ld/testsuite/ld-tic6x/shlib-noindex.rd b/ld/testsuite/ld-tic6x/shlib-noindex.rd
index f087d15bffd..52e433424f1 100644
--- a/ld/testsuite/ld-tic6x/shlib-noindex.rd
+++ b/ld/testsuite/ld-tic6x/shlib-noindex.rd
@@ -32,7 +32,7 @@ Program Headers:
LOAD 0x001000 0x00008000 0x00008000 0x00210 0x00210 RW 0x1000
LOAD 0x002000 0x10000000 0x10000000 0x00130 0x00134 RWE 0x1000
DYNAMIC 0x001160 0x00008160 0x00008160 0x000b0 0x000b0 RW 0x4
- GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x20000 RWE 0x8
+ GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x20000 RW 0x8
Section to Segment mapping:
Segment Sections\.\.\.
diff --git a/ld/testsuite/ld-tic6x/static-app-1.rd b/ld/testsuite/ld-tic6x/static-app-1.rd
index 36c48109912..6cb86cd4b75 100644
--- a/ld/testsuite/ld-tic6x/static-app-1.rd
+++ b/ld/testsuite/ld-tic6x/static-app-1.rd
@@ -29,7 +29,7 @@ Program Headers:
LOAD 0x001000 0x00008000 0x00008000 0x001b8 0x001b8 RW 0x1000
LOAD 0x002000 0x10000000 0x10000000 0x000f4 0x000f8 RWE 0x1000
DYNAMIC 0x001128 0x00008128 0x00008128 0x00090 0x00090 RW 0x4
- GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x20000 RWE 0x8
+ GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x20000 RW 0x8
Section to Segment mapping:
Segment Sections\.\.\.
diff --git a/ld/testsuite/ld-tic6x/static-app-1b.rd b/ld/testsuite/ld-tic6x/static-app-1b.rd
index 36c48109912..6cb86cd4b75 100644
--- a/ld/testsuite/ld-tic6x/static-app-1b.rd
+++ b/ld/testsuite/ld-tic6x/static-app-1b.rd
@@ -29,7 +29,7 @@ Program Headers:
LOAD 0x001000 0x00008000 0x00008000 0x001b8 0x001b8 RW 0x1000
LOAD 0x002000 0x10000000 0x10000000 0x000f4 0x000f8 RWE 0x1000
DYNAMIC 0x001128 0x00008128 0x00008128 0x00090 0x00090 RW 0x4
- GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x20000 RWE 0x8
+ GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x20000 RW 0x8
Section to Segment mapping:
Segment Sections\.\.\.
diff --git a/ld/testsuite/ld-tic6x/static-app-1r.rd b/ld/testsuite/ld-tic6x/static-app-1r.rd
index b04e327207d..8d9d11937b4 100644
--- a/ld/testsuite/ld-tic6x/static-app-1r.rd
+++ b/ld/testsuite/ld-tic6x/static-app-1r.rd
@@ -29,7 +29,7 @@ Program Headers:
LOAD 0x001000 0x00008000 0x00008000 0x001a0 0x001a0 RW 0x1000
LOAD 0x002000 0x10000000 0x10000000 0x000ec 0x000f0 RWE 0x1000
DYNAMIC 0x001110 0x00008110 0x00008110 0x00090 0x00090 RW 0x4
- GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x20000 RWE 0x8
+ GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x20000 RW 0x8
Section to Segment mapping:
Segment Sections\.\.\.
diff --git a/ld/testsuite/ld-tic6x/static-app-1rb.rd b/ld/testsuite/ld-tic6x/static-app-1rb.rd
index b04e327207d..8d9d11937b4 100644
--- a/ld/testsuite/ld-tic6x/static-app-1rb.rd
+++ b/ld/testsuite/ld-tic6x/static-app-1rb.rd
@@ -29,7 +29,7 @@ Program Headers:
LOAD 0x001000 0x00008000 0x00008000 0x001a0 0x001a0 RW 0x1000
LOAD 0x002000 0x10000000 0x10000000 0x000ec 0x000f0 RWE 0x1000
DYNAMIC 0x001110 0x00008110 0x00008110 0x00090 0x00090 RW 0x4
- GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x20000 RWE 0x8
+ GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x20000 RW 0x8
Section to Segment mapping:
Segment Sections\.\.\.
diff --git a/ld/testsuite/ld-unique/unique.s b/ld/testsuite/ld-unique/unique.s
index cd5e64e60d2..2ad41c25201 100644
--- a/ld/testsuite/ld-unique/unique.s
+++ b/ld/testsuite/ld-unique/unique.s
@@ -6,3 +6,6 @@ a_val: .long 0
.global main
main:
.long 0
+
+ .section .note.GNU-stack,""
+
diff --git a/ld/testsuite/ld-unique/unique_empty.s b/ld/testsuite/ld-unique/unique_empty.s
index 4896641b50b..71d5b862498 100644
--- a/ld/testsuite/ld-unique/unique_empty.s
+++ b/ld/testsuite/ld-unique/unique_empty.s
@@ -2,3 +2,5 @@
.global main
main:
.dc.a b_val
+
+ .section .note.GNU-stack
diff --git a/ld/testsuite/ld-unique/unique_shared.s b/ld/testsuite/ld-unique/unique_shared.s
index f1914f3393f..359b13eb809 100644
--- a/ld/testsuite/ld-unique/unique_shared.s
+++ b/ld/testsuite/ld-unique/unique_shared.s
@@ -1,3 +1,4 @@
.type b_val, %gnu_unique_object
b_val: .long 0
.size b_val, .-b_val
+ .section .note.GNU-stack
diff --git a/ld/testsuite/ld-elfvsb/common.c b/ld/testsuite/ld-vsb/common.c
index 0432a07915f..0432a07915f 100644
--- a/ld/testsuite/ld-elfvsb/common.c
+++ b/ld/testsuite/ld-vsb/common.c
diff --git a/ld/testsuite/ld-elfvsb/define.s b/ld/testsuite/ld-vsb/define.s
index b38e3e0c053..3dc25ed7185 100644
--- a/ld/testsuite/ld-elfvsb/define.s
+++ b/ld/testsuite/ld-vsb/define.s
@@ -1,10 +1,16 @@
.data
.globl protected
+ .ifndef XCOFF_TEST
.type protected,"object"
+ .endif
protected:
.globl hidden
+ .ifndef XCOFF_TEST
.type hidden,"object"
+ .endif
hidden:
.globl internal
+ .ifndef XCOFF_TEST
.type internal,"object"
+ .endif
internal:
diff --git a/ld/testsuite/ld-elfvsb/elf-offset.ld b/ld/testsuite/ld-vsb/elf-offset.ld
index b60861a8d81..b60861a8d81 100644
--- a/ld/testsuite/ld-elfvsb/elf-offset.ld
+++ b/ld/testsuite/ld-vsb/elf-offset.ld
diff --git a/ld/testsuite/ld-elfvsb/elfvsb.dat b/ld/testsuite/ld-vsb/elfvsb.dat
index bad3b1ec142..bad3b1ec142 100644
--- a/ld/testsuite/ld-elfvsb/elfvsb.dat
+++ b/ld/testsuite/ld-vsb/elfvsb.dat
diff --git a/ld/testsuite/ld-elfvsb/hidden0.d b/ld/testsuite/ld-vsb/hidden0-elf.d
index abd26a2b22a..abd26a2b22a 100644
--- a/ld/testsuite/ld-elfvsb/hidden0.d
+++ b/ld/testsuite/ld-vsb/hidden0-elf.d
diff --git a/ld/testsuite/ld-elfvsb/hidden1.d b/ld/testsuite/ld-vsb/hidden1-elf.d
index 7820c214507..7820c214507 100644
--- a/ld/testsuite/ld-elfvsb/hidden1.d
+++ b/ld/testsuite/ld-vsb/hidden1-elf.d
diff --git a/ld/testsuite/ld-elfvsb/hidden2.d b/ld/testsuite/ld-vsb/hidden2-elf.d
index 5d299746f56..5d299746f56 100644
--- a/ld/testsuite/ld-elfvsb/hidden2.d
+++ b/ld/testsuite/ld-vsb/hidden2-elf.d
diff --git a/ld/testsuite/ld-elfvsb/hidden2.ld b/ld/testsuite/ld-vsb/hidden2.ld
index 3c414dba487..3c414dba487 100644
--- a/ld/testsuite/ld-elfvsb/hidden2.ld
+++ b/ld/testsuite/ld-vsb/hidden2.ld
diff --git a/ld/testsuite/ld-elfvsb/hidden2.s b/ld/testsuite/ld-vsb/hidden2.s
index 62f110702d8..62f110702d8 100644
--- a/ld/testsuite/ld-elfvsb/hidden2.s
+++ b/ld/testsuite/ld-vsb/hidden2.s
diff --git a/ld/testsuite/ld-elfvsb/internal0.d b/ld/testsuite/ld-vsb/internal0-elf.d
index 9d37ae8e662..9d37ae8e662 100644
--- a/ld/testsuite/ld-elfvsb/internal0.d
+++ b/ld/testsuite/ld-vsb/internal0-elf.d
diff --git a/ld/testsuite/ld-elfvsb/internal1.d b/ld/testsuite/ld-vsb/internal1-elf.d
index 5cacdafed8f..5cacdafed8f 100644
--- a/ld/testsuite/ld-elfvsb/internal1.d
+++ b/ld/testsuite/ld-vsb/internal1-elf.d
diff --git a/ld/testsuite/ld-elfvsb/main.c b/ld/testsuite/ld-vsb/main.c
index c2c92911344..b0359c0d815 100644
--- a/ld/testsuite/ld-elfvsb/main.c
+++ b/ld/testsuite/ld-vsb/main.c
@@ -236,8 +236,8 @@ main (void)
printf ("mainvar == %d\n", mainvar);
printf ("overriddenvar == %d\n", overriddenvar);
printf ("shlibvar1 == %d\n", shlibvar1);
-#ifndef XCOFF_TEST
printf ("shlib_mainvar () == %d\n", shlib_mainvar ());
+#ifndef XCOFF_TEST
printf ("shlib_overriddenvar () == %d\n", shlib_overriddenvar ());
#endif
printf ("shlib_shlibvar1 () == %d\n", shlib_shlibvar1 ());
@@ -245,15 +245,13 @@ main (void)
printf ("shlib_shlibcall () == %d\n", shlib_shlibcall ());
#ifndef XCOFF_TEST
printf ("shlib_shlibcall2 () == %d\n", shlib_shlibcall2 ());
- printf ("shlib_maincall () == %d\n", shlib_maincall ());
#endif
+ printf ("shlib_maincall () == %d\n", shlib_maincall ());
printf ("main_called () == %d\n", main_called ());
printf ("shlib_checkfunptr1 (shlib_shlibvar1) == %d\n",
shlib_checkfunptr1 (shlib_shlibvar1));
-#ifndef XCOFF_TEST
printf ("shlib_checkfunptr2 (main_called) == %d\n",
shlib_checkfunptr2 (main_called));
-#endif
p = shlib_getfunptr1 ();
printf ("shlib_getfunptr1 () ");
if (p == shlib_shlibvar1)
@@ -261,7 +259,6 @@ main (void)
else
printf ("!=");
printf (" shlib_shlibvar1\n");
-#ifndef XCOFF_TEST
p = shlib_getfunptr2 ();
printf ("shlib_getfunptr2 () ");
if (p == main_called)
@@ -269,7 +266,6 @@ main (void)
else
printf ("!=");
printf (" main_called\n");
-#endif
printf ("shlib_check () == %d\n", shlib_check ());
printf ("visibility_check () == %d\n", visibility_check ());
printf ("visibility_checkfunptr () == %d\n",
diff --git a/ld/testsuite/ld-elfvsb/protected0.d b/ld/testsuite/ld-vsb/protected0-elf.d
index ea781dd3dbc..ea781dd3dbc 100644
--- a/ld/testsuite/ld-elfvsb/protected0.d
+++ b/ld/testsuite/ld-vsb/protected0-elf.d
diff --git a/ld/testsuite/ld-elfvsb/protected1.d b/ld/testsuite/ld-vsb/protected1-elf.d
index 235db0011ad..235db0011ad 100644
--- a/ld/testsuite/ld-elfvsb/protected1.d
+++ b/ld/testsuite/ld-vsb/protected1-elf.d
diff --git a/ld/testsuite/ld-elfvsb/sh1.c b/ld/testsuite/ld-vsb/sh1.c
index 1aba63c7541..193eca2943b 100644
--- a/ld/testsuite/ld-elfvsb/sh1.c
+++ b/ld/testsuite/ld-vsb/sh1.c
@@ -6,9 +6,7 @@
of a shared library. */
/* This variable is supplied by the main program. */
-#ifndef XCOFF_TEST
extern int mainvar;
-#endif
/* This variable is defined in the shared library, and overridden by
the main program. */
@@ -33,13 +31,11 @@ extern int shlibvar2;
/* These functions return the values of the above variables as seen in
the shared library. */
-#ifndef XCOFF_TEST
int
shlib_mainvar ()
{
return mainvar;
}
-#endif
#ifndef XCOFF_TEST
int
@@ -95,7 +91,6 @@ shlib_overriddencall2 ()
/* This function calls a function defined by the main program. */
-#ifndef XCOFF_TEST
extern int main_called ();
int
@@ -103,7 +98,6 @@ shlib_maincall ()
{
return main_called ();
}
-#endif
/* This function is passed a function pointer to shlib_mainvar. It
confirms that the pointer compares equally. */
@@ -118,14 +112,12 @@ shlib_checkfunptr1 (p)
/* This function is passed a function pointer to main_called. It
confirms that the pointer compares equally. */
-#ifndef XCOFF_TEST
int
shlib_checkfunptr2 (p)
int (*p) ();
{
return p == main_called;
}
-#endif
/* This function returns a pointer to shlib_mainvar. */
@@ -137,13 +129,11 @@ int
/* This function returns a pointer to main_called. */
-#ifndef XCOFF_TEST
int
(*shlib_getfunptr2 ()) ()
{
return main_called;
}
-#endif
/* This function makes sure that constant data and local functions
work. */
diff --git a/ld/testsuite/ld-elfvsb/sh2.c b/ld/testsuite/ld-vsb/sh2.c
index e9a9687bcce..e9a9687bcce 100644
--- a/ld/testsuite/ld-elfvsb/sh2.c
+++ b/ld/testsuite/ld-vsb/sh2.c
diff --git a/ld/testsuite/ld-elfvsb/sh3.c b/ld/testsuite/ld-vsb/sh3.c
index a6d5dc88637..a6d5dc88637 100644
--- a/ld/testsuite/ld-elfvsb/sh3.c
+++ b/ld/testsuite/ld-vsb/sh3.c
diff --git a/ld/testsuite/ld-elfvsb/test.c b/ld/testsuite/ld-vsb/test.c
index d2210accc62..d2210accc62 100644
--- a/ld/testsuite/ld-elfvsb/test.c
+++ b/ld/testsuite/ld-vsb/test.c
diff --git a/ld/testsuite/ld-elfvsb/undef.s b/ld/testsuite/ld-vsb/undef.s
index 5b99d6f6fc1..5b99d6f6fc1 100644
--- a/ld/testsuite/ld-elfvsb/undef.s
+++ b/ld/testsuite/ld-vsb/undef.s
diff --git a/ld/testsuite/ld-vsb/visibility-1-xcoff-32.d b/ld/testsuite/ld-vsb/visibility-1-xcoff-32.d
new file mode 100644
index 00000000000..19cff64827f
--- /dev/null
+++ b/ld/testsuite/ld-vsb/visibility-1-xcoff-32.d
@@ -0,0 +1,21 @@
+#source: define.s
+#source: undef.s
+#as: -a32 --defsym XCOFF_TEST=1
+#ld: -b32 -r
+#objdump: -t
+
+.*
+
+SYMBOL TABLE:
+.*
+.*
+.*
+.*
+\[ 4\]\(sec 2\).*\(ty 3000\).*protected
+.*
+\[ 6\]\(sec 2\).*\(ty 2000\).*hidden
+.*
+\[ 8\]\(sec 2\).*\(ty 1000\).*internal
+.*
+.*
+.*
diff --git a/ld/testsuite/ld-vsb/visibility-1-xcoff-64.d b/ld/testsuite/ld-vsb/visibility-1-xcoff-64.d
new file mode 100644
index 00000000000..a63dcf03819
--- /dev/null
+++ b/ld/testsuite/ld-vsb/visibility-1-xcoff-64.d
@@ -0,0 +1,21 @@
+#source: define.s
+#source: undef.s
+#as: -a64 --defsym XCOFF_TEST=1
+#ld: -b64 -r
+#objdump: -t
+
+.*
+
+SYMBOL TABLE:
+.*
+.*
+.*
+.*
+\[ 4\]\(sec 2\).*\(ty 3000\).*protected
+.*
+\[ 6\]\(sec 2\).*\(ty 2000\).*hidden
+.*
+\[ 8\]\(sec 2\).*\(ty 1000\).*internal
+.*
+.*
+.*
diff --git a/ld/testsuite/ld-vsb/visibility-2-xcoff-32.d b/ld/testsuite/ld-vsb/visibility-2-xcoff-32.d
new file mode 100644
index 00000000000..54beedd4a60
--- /dev/null
+++ b/ld/testsuite/ld-vsb/visibility-2-xcoff-32.d
@@ -0,0 +1,16 @@
+#source: undef.s
+#as: -a32 --defsym XCOFF_TEST=1
+#ld: -b32 -r
+#objdump: -t
+
+.*
+
+SYMBOL TABLE:
+.*
+.*
+\[ 2\]\(sec 0\).*\(ty 3000\).*protected
+.*
+\[ 4\]\(sec 0\).*\(ty 2000\).*hidden
+.*
+\[ 6\]\(sec 0\).*\(ty 1000\).*internal
+.*
diff --git a/ld/testsuite/ld-vsb/visibility-2-xcoff-64.d b/ld/testsuite/ld-vsb/visibility-2-xcoff-64.d
new file mode 100644
index 00000000000..b607a5325de
--- /dev/null
+++ b/ld/testsuite/ld-vsb/visibility-2-xcoff-64.d
@@ -0,0 +1,16 @@
+#source: undef.s
+#as: -a64 --defsym XCOFF_TEST=1
+#ld: -b64 -r
+#objdump: -t
+
+.*
+
+SYMBOL TABLE:
+.*
+.*
+\[ 2\]\(sec 0\).*\(ty 3000\).*protected
+.*
+\[ 4\]\(sec 0\).*\(ty 2000\).*hidden
+.*
+\[ 6\]\(sec 0\).*\(ty 1000\).*internal
+.*
diff --git a/ld/testsuite/ld-elfvsb/elfvsb.exp b/ld/testsuite/ld-vsb/vsb.exp
index c21913112fa..bc2a9b8a836 100644
--- a/ld/testsuite/ld-elfvsb/elfvsb.exp
+++ b/ld/testsuite/ld-vsb/vsb.exp
@@ -29,7 +29,8 @@ if { ![check_compiler_available] } {
return
}
-# This test can only be run on a couple of ELF platforms.
+# This test can only be run on a couple of ELF platforms or with
+# XCOFF formats.
# Square bracket expressions seem to confuse istarget.
if { ![istarget hppa*64*-*-hpux*] \
&& ![istarget hppa*-*-linux*] \
@@ -45,11 +46,17 @@ if { ![istarget hppa*64*-*-hpux*] \
&& ![istarget sparc*-*-linux*] \
&& ![istarget s390*-*-linux*] \
&& ![istarget sh\[34\]*-*-linux*] \
- && ![istarget x86_64-*-linux*] } {
+ && ![istarget x86_64-*-linux*] \
+ && ![is_xcoff_format] } {
return
}
-set test_list [lsort [glob -nocomplain $srcdir/$subdir/*.d]]
+if [is_xcoff_format] {
+ set test_list [lsort [glob -nocomplain $srcdir/$subdir/*-xcoff*.d]]
+} else {
+ set test_list [lsort [glob -nocomplain $srcdir/$subdir/*-elf.d]]
+}
+
foreach t $test_list {
# We need to strip the ".d", but can leave the dirname.
verbose [file rootname $t]
@@ -61,6 +68,28 @@ set SHCFLAG ""
set shared_needs_pic "no"
set COMPRESS_LDFLAG "-Wl,--compress-debug-sections=zlib-gabi"
+if { [is_xcoff_format] } {
+ # Not all the useful features are available with AIX shared
+ # libraries by default.
+ # We can manage to simulate some of them with export/import
+ # files but the overriding of shared library functions or
+ # variables by the main program doesn't seem possible.
+ # We avoid testing those features.
+ set SHCFLAG "-DXCOFF_TEST"
+
+ # In order to avoid listing every symbols in an export file,
+ # the export will be done with -bexpall flag.
+ # However for imports, we must create the import file.
+ set file [open $tmpdir/xcoff-shared.imp w]
+ puts $file "#! ."
+ puts $file mainvar
+ puts $file main_called
+ close $file
+
+ # XCOFF doesn't yet support debug sections compresion.
+ set COMPRESS_LDFLAG ""
+}
+
if [istarget arm*-*-linux*] {
# On ARM section anchors can change the symbol pre-emptability for
# non-PIC shared libraries, causing these tests to fail. Turn section
@@ -108,6 +137,10 @@ proc visibility_test { visibility progname testname main sh1 sh2 dat args } {
# Build the shared library.
set shared -shared
+ if { [is_xcoff_format] } {
+ # On AIX, setup imports and exports.
+ append shared " -Wl,-bexpall -Wl,-bI:$tmpdir/xcoff-shared.imp"
+ }
if { [is_elf_format] && [check_shared_lib_support] } {
append shared " -Wl,-z,notext"
}
@@ -128,8 +161,15 @@ proc visibility_test { visibility progname testname main sh1 sh2 dat args } {
# Link against the shared library. Use -rpath so that the
# dynamic linker can locate the shared library at runtime.
+ # On AIX, we must include /lib in -rpath, as otherwise the loader
+ # can not find -lc.
set rpath $tmpdir
- if ![ld_link $CC_FOR_TARGET $tmpdir/$progname "-Wl,-rpath,$rpath $tmpdir/$main $tmpdir/$progname.so"] {
+ set exportflag ""
+ if { [is_xcoff_format] } {
+ set rpath /lib:$tmpdir
+ set exportflag " -Wl,-bexpall"
+ }
+ if ![ld_link $CC_FOR_TARGET $tmpdir/$progname "-Wl,-rpath,$rpath $tmpdir/$main $tmpdir/$progname.so $exportflag"] {
if { [ string match $visibility "hidden" ]
&& [regexp "undefined reference to \`\.?visibility\'" $link_output]
&& [regexp "undefined reference to \`visibility_var\'" $link_output] } {
@@ -225,6 +265,14 @@ proc visibility_run {visibility} {
# tests below.
remote_file host delete $tmpdir/sh1p.o $tmpdir/sh2p.o $tmpdir/sh1np.o $tmpdir/sh2np.o
+ set datfile elfvsb
+ if { [is_xcoff_format] } {
+ # As explained above, XCOFF shared libraries doesn't support
+ # all the ELF features. Thus, the output of the tests are
+ # a bit different.
+ set datfile xcoffvsb
+ }
+
if { [istarget powerpc*-*-linux*] \
|| ( [istarget mips*-*-linux*] && [at_least_gcc_version 4 3] )} {
# Testing non-PIC libraries is a waste of effort on any target.
@@ -287,7 +335,15 @@ proc visibility_run {visibility} {
setup_xfail "arm*-*-linux*"
}
- visibility_test $visibility vnp "visibility ($visibility) (non PIC)" mainnp.o sh1np.o sh2np.o elfvsb
+ # XCOFF format doesn't know how to handle weak undefined symbols
+ # in shared objects.
+ if { [ string match $visibility "hidden_weak" ]
+ || [ string match $visibility "protected_weak" ] } {
+ setup_xfail "*-*-aix*"
+ setup_xfail "*-*-beos*"
+ }
+
+ visibility_test $visibility vnp "visibility ($visibility) (non PIC)" mainnp.o sh1np.o sh2np.o $datfile
# Test ELF shared library relocations with a non-zero load
# address for the library. Near as I can tell, the R_*_RELATIVE
@@ -328,9 +384,19 @@ proc visibility_run {visibility} {
setup_xfail "arm*-*-linux*"
}
- visibility_test $visibility vnp "visibility ($visibility) (non PIC, load offset)" \
- mainnp.o sh1np.o sh2np.o elfvsb \
- "-Wl,-T,$srcdir/$subdir/elf-offset.ld,--hash-style=sysv"
+ # XCOFF format doesn't know how to handle weak undefined symbols
+ # in shared objects.
+ if { [ string match $visibility "hidden_weak" ]
+ || [ string match $visibility "protected_weak" ] } {
+ setup_xfail "*-*-aix*"
+ setup_xfail "*-*-beos*"
+ }
+
+ if { ![is_xcoff_format] } {
+ visibility_test $visibility vnp "visibility ($visibility) (non PIC, load offset)" \
+ mainnp.o sh1np.o sh2np.o $datfile \
+ "-Wl,-T,$srcdir/$subdir/elf-offset.ld,--hash-style=sysv"
+ }
}
# Now compile the code using -fpic.
@@ -345,7 +411,7 @@ proc visibility_run {visibility} {
setup_xfail $target_triplet
}
}
- visibility_test $visibility vp "visibility ($visibility)" mainnp.o sh1p.o sh2p.o elfvsb $COMPRESS_LDFLAG
+ visibility_test $visibility vp "visibility ($visibility)" mainnp.o sh1p.o sh2p.o $datfile $COMPRESS_LDFLAG
}
}}
@@ -392,7 +458,15 @@ proc visibility_run {visibility} {
setup_xfail "arm*-*-linux*"
}
- visibility_test $visibility vmpnp "visibility ($visibility) (PIC main, non PIC so)" mainp.o sh1np.o sh2np.o elfvsb
+ # XCOFF format doesn't know how to handle weak undefined symbols
+ # in shared objects.
+ if { [ string match $visibility "hidden_weak" ]
+ || [ string match $visibility "protected_weak" ] } {
+ setup_xfail "*-*-aix*"
+ setup_xfail "*-*-beos*"
+ }
+
+ visibility_test $visibility vmpnp "visibility ($visibility) (PIC main, non PIC so)" mainp.o sh1np.o sh2np.o $datfile
} else {
unsupported "visibility (PIC main, non PIC so)"
}
@@ -405,7 +479,16 @@ proc visibility_run {visibility} {
setup_xfail $target_triplet
}
}
- visibility_test $visibility vmpp "visibility ($visibility) (PIC main)" mainp.o sh1p.o sh2p.o elfvsb
+
+ # XCOFF format doesn't know how to handle weak undefined symbols
+ # in shared objects.
+ if { [ string match $visibility "hidden_weak" ]
+ || [ string match $visibility "protected_weak" ] } {
+ setup_xfail "*-*-aix*"
+ setup_xfail "*-*-beos*"
+ }
+
+ visibility_test $visibility vmpp "visibility ($visibility) (PIC main)" mainp.o sh1p.o sh2p.o $datfile
} else {
unsupported "visibility ($visibility) (PIC main)"
}
@@ -461,7 +544,12 @@ if { ![ld_compile "$CC_FOR_TARGET -g $NOSANITIZE_CFLAGS $NOLTO_CFLAGS" $srcdir/$
if { ![ld_compile "$CC_FOR_TARGET -g $NOSANITIZE_CFLAGS $NOLTO_CFLAGS -DSHARED $picflag" $srcdir/$subdir/sh3.c tmpdir/sh3.o] } {
unsupported "weak hidden symbol"
} else {
- if ![ld_link $ld tmpdir/sh3.so "-shared tmpdir/sh3.o"] {
+ set shared "-shared"
+ if { [is_xcoff_format] } {
+ # On AIX, setup imports and exports.
+ append shared " -bexpall"
+ }
+ if ![ld_link $ld tmpdir/sh3.so "$shared tmpdir/sh3.o"] {
fail "weak hidden symbol"
} else {
if ![ld_link $ld tmpdir/weak "tmpdir/test.o tmpdir/sh3.so"] {
diff --git a/ld/testsuite/ld-vsb/xcoffvsb.dat b/ld/testsuite/ld-vsb/xcoffvsb.dat
new file mode 100644
index 00000000000..aa75969583c
--- /dev/null
+++ b/ld/testsuite/ld-vsb/xcoffvsb.dat
@@ -0,0 +1,24 @@
+mainvar == 1
+overriddenvar == 2
+shlibvar1 == 3
+shlib_mainvar () == 1
+shlib_shlibvar1 () == 3
+shlib_shlibvar2 () == 4
+shlib_shlibcall () == 5
+shlib_maincall () == 6
+main_called () == 6
+shlib_checkfunptr1 (shlib_shlibvar1) == 1
+shlib_checkfunptr2 (main_called) == 1
+shlib_getfunptr1 () == shlib_shlibvar1
+shlib_getfunptr2 () == main_called
+shlib_check () == 1
+visibility_check () == 1
+visibility_checkfunptr () == 1
+main_visibility_check () == 1
+visibility_checkvar () == 1
+visibility_checkvarptr () == 1
+main_visibility_checkvar () == 1
+main_visibility_checkcom () == 1
+shlib_visibility_checkcom () == 1
+main_visibility_checkweak () == 1
+shlib_visibility_checkweak () == 1
diff --git a/ld/testsuite/ld-x86-64/abs-k1om.d b/ld/testsuite/ld-x86-64/abs-k1om.d
deleted file mode 100644
index ec7664c49fa..00000000000
--- a/ld/testsuite/ld-x86-64/abs-k1om.d
+++ /dev/null
@@ -1,12 +0,0 @@
-#name: Absolute non-overflowing relocs
-#source: ../ld-i386/abs.s
-#source: ../ld-i386/zero.s
-#as: --64 -march=k1om
-#ld: -m elf_k1om -z noseparate-code
-#objdump: -rs -j .text
-#target: x86_64-*-linux*
-
-.*: file format .*
-
-Contents of section \.text:
-[ ][0-9a-f]+ c800fff0 c8000110 c9c3.*
diff --git a/ld/testsuite/ld-x86-64/abs-l1om.d b/ld/testsuite/ld-x86-64/abs-l1om.d
deleted file mode 100644
index f87869f9d04..00000000000
--- a/ld/testsuite/ld-x86-64/abs-l1om.d
+++ /dev/null
@@ -1,12 +0,0 @@
-#name: Absolute non-overflowing relocs
-#source: ../ld-i386/abs.s
-#source: ../ld-i386/zero.s
-#as: --64 -march=l1om
-#ld: -m elf_l1om -z noseparate-code
-#objdump: -rs -j .text
-#target: x86_64-*-linux*
-
-.*: file format .*
-
-Contents of section \.text:
-[ ][0-9a-f]+ c800fff0 c8000110 c9c3.*
diff --git a/ld/testsuite/ld-x86-64/bnd-branch-1-now.d b/ld/testsuite/ld-x86-64/bnd-branch-1-now.d
index b7bc4e526cc..b1bcea3cf4c 100644
--- a/ld/testsuite/ld-x86-64/bnd-branch-1-now.d
+++ b/ld/testsuite/ld-x86-64/bnd-branch-1-now.d
@@ -1,6 +1,6 @@
#source: bnd-branch-1.s -mx86-used-note=no
#as: --64
-#ld: -z now -shared -melf_x86_64 --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code
+#ld: -z now -shared -melf_x86_64 --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code $NO_DT_RELR_LDFLAGS
#objdump: -dw
.*: +file format .*
diff --git a/ld/testsuite/ld-x86-64/bnd-ifunc-1-now.d b/ld/testsuite/ld-x86-64/bnd-ifunc-1-now.d
index 15ecfe1cc50..86ba30a46d5 100644
--- a/ld/testsuite/ld-x86-64/bnd-ifunc-1-now.d
+++ b/ld/testsuite/ld-x86-64/bnd-ifunc-1-now.d
@@ -1,6 +1,6 @@
#source: bnd-ifunc-1.s
#as: --64 -madd-bnd-prefix -mx86-used-note=no
-#ld: -z now -shared -melf_x86_64 -z bndplt --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code
+#ld: -z now -shared -melf_x86_64 -z bndplt --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code $NO_DT_RELR_LDFLAGS
#objdump: -dw
.*: +file format .*
diff --git a/ld/testsuite/ld-x86-64/bnd-ifunc-2-now.d b/ld/testsuite/ld-x86-64/bnd-ifunc-2-now.d
index 211d72d2335..fa7ec07aaf0 100644
--- a/ld/testsuite/ld-x86-64/bnd-ifunc-2-now.d
+++ b/ld/testsuite/ld-x86-64/bnd-ifunc-2-now.d
@@ -1,6 +1,6 @@
#source: bnd-ifunc-2.s
#as: --64 -madd-bnd-prefix -mx86-used-note=no
-#ld: -z now -shared -melf_x86_64 -z bndplt --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code
+#ld: -z now -shared -melf_x86_64 -z bndplt --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code $NO_DT_RELR_LDFLAGS
#objdump: -dw
.*: +file format .*
diff --git a/ld/testsuite/ld-x86-64/bnd-ifunc-2.d b/ld/testsuite/ld-x86-64/bnd-ifunc-2.d
index f80ba15aa35..36534b14feb 100644
--- a/ld/testsuite/ld-x86-64/bnd-ifunc-2.d
+++ b/ld/testsuite/ld-x86-64/bnd-ifunc-2.d
@@ -1,5 +1,5 @@
#as: --64 -madd-bnd-prefix -mx86-used-note=no
-#ld: -shared -melf_x86_64 -z bndplt --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code
+#ld: -shared -melf_x86_64 -z bndplt --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code $NO_DT_RELR_LDFLAGS
#objdump: -dw
#...
diff --git a/ld/testsuite/ld-x86-64/bnd-plt-1-now.d b/ld/testsuite/ld-x86-64/bnd-plt-1-now.d
index 24e28210a0a..47289a04f43 100644
--- a/ld/testsuite/ld-x86-64/bnd-plt-1-now.d
+++ b/ld/testsuite/ld-x86-64/bnd-plt-1-now.d
@@ -1,6 +1,6 @@
#source: bnd-branch-1.s
#as: --64 -mx86-used-note=no
-#ld: -z now -shared -melf_x86_64 -z bndplt --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code
+#ld: -z now -shared -melf_x86_64 -z bndplt --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code $NO_DT_RELR_LDFLAGS
#objdump: -dw
.*: +file format .*
diff --git a/ld/testsuite/ld-x86-64/bnd-plt-1.d b/ld/testsuite/ld-x86-64/bnd-plt-1.d
index 0df32555c18..f047da897ce 100644
--- a/ld/testsuite/ld-x86-64/bnd-plt-1.d
+++ b/ld/testsuite/ld-x86-64/bnd-plt-1.d
@@ -1,6 +1,6 @@
#source: bnd-branch-1.s
#as: --64 -mx86-used-note=no
-#ld: -shared -melf_x86_64 -z bndplt --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code
+#ld: -shared -melf_x86_64 -z bndplt --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code $NO_DT_RELR_LDFLAGS
#objdump: -dw
.*: +file format .*
diff --git a/ld/testsuite/ld-x86-64/dt-relr-1.s b/ld/testsuite/ld-x86-64/dt-relr-1.s
new file mode 100644
index 00000000000..0483a9c6253
--- /dev/null
+++ b/ld/testsuite/ld-x86-64/dt-relr-1.s
@@ -0,0 +1,14 @@
+ .text
+foo:
+ call func1@PLT
+ add __ehdr_start@GOTPCREL(%rip), %rax
+
+ .section .bar,"aw",@progbits
+ .p2align 3
+ .dc.a data1
+ .dc.a __ehdr_start
+
+ .section .foo,"aw",@progbits
+ .p2align 3
+ .dc.a data1
+ .dc.a __ehdr_start
diff --git a/ld/testsuite/ld-x86-64/dt-relr-1a-x32.d b/ld/testsuite/ld-x86-64/dt-relr-1a-x32.d
new file mode 100644
index 00000000000..3b603cd4b01
--- /dev/null
+++ b/ld/testsuite/ld-x86-64/dt-relr-1a-x32.d
@@ -0,0 +1,27 @@
+#source: dt-relr-1.s
+#as: --x32
+#ld: -shared -melf32_x86_64 $DT_RELR_LDFLAGS
+#readelf: -r -s --wide
+#target: x86_64-*-linux*
+
+Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 2 entries:
+ +Offset +Info +Type +Sym. Value +Symbol's Name \+ Addend
+[0-9a-f]+ +[0-9a-f]+ +R_X86_64_32 +0+ +data1 \+ 0
+[0-9a-f]+ +[0-9a-f]+ +R_X86_64_32 +0+ +data1 \+ 0
+
+Relocation section '.rela.plt' at offset 0x[0-9a-f]+ contains 1 entry:
+ +Offset +Info +Type +Sym. Value +Symbol's Name \+ Addend
+[0-9a-f]+ +[0-9a-f]+ +R_X86_64_JUMP_SLOT +0+ +func1 \+ 0
+
+Relocation section '.relr.dyn' at offset 0x[a-f0-9]+ contains 2 entries:
+ +3 offsets
+[a-f0-9]+
+[a-f0-9]+
+[a-f0-9]+
+
+#...
+Symbol table '.symtab' contains [0-9]+ entries:
+ +Num: +Value +Size Type +Bind +Vis +Ndx Name
+#...
+ +[0-9]+: +[a-f0-9]+ +0 +NOTYPE +LOCAL +DEFAULT +[0-9]+ +__ehdr_start
+#pass
diff --git a/ld/testsuite/ld-x86-64/dt-relr-1a.d b/ld/testsuite/ld-x86-64/dt-relr-1a.d
new file mode 100644
index 00000000000..abf2352a92a
--- /dev/null
+++ b/ld/testsuite/ld-x86-64/dt-relr-1a.d
@@ -0,0 +1,27 @@
+#source: dt-relr-1.s
+#as: --64
+#ld: -shared -melf_x86_64 $DT_RELR_LDFLAGS
+#readelf: -r -s --wide
+#target: x86_64-*-linux*
+
+Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 2 entries:
+ +Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend
+[0-9a-f]+ +[0-9a-f]+ +R_X86_64_64 +0+ +data1 \+ 0
+[0-9a-f]+ +[0-9a-f]+ +R_X86_64_64 +0+ +data1 \+ 0
+
+Relocation section '.rela.plt' at offset 0x[0-9a-f]+ contains 1 entry:
+ +Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend
+[0-9a-f]+ +[0-9a-f]+ +R_X86_64_JUMP_SLOT +0+ +func1 \+ 0
+
+Relocation section '.relr.dyn' at offset 0x[a-f0-9]+ contains 2 entries:
+ +3 offsets
+[a-f0-9]+
+[a-f0-9]+
+[a-f0-9]+
+
+#...
+Symbol table '.symtab' contains [0-9]+ entries:
+ +Num: +Value +Size Type +Bind +Vis +Ndx Name
+#...
+ +[0-9]+: +[a-f0-9]+ +0 +NOTYPE +LOCAL +DEFAULT +[0-9]+ +__ehdr_start
+#pass
diff --git a/ld/testsuite/ld-x86-64/dt-relr-1b-x32.d b/ld/testsuite/ld-x86-64/dt-relr-1b-x32.d
new file mode 100644
index 00000000000..05c376c5d46
--- /dev/null
+++ b/ld/testsuite/ld-x86-64/dt-relr-1b-x32.d
@@ -0,0 +1,30 @@
+#source: dt-relr-1.s
+#as: --x32
+#ld: -shared -melf32_x86_64 $DT_RELR_LDFLAGS -z nocombreloc
+#readelf: -r -s --wide
+#target: x86_64-*-linux*
+
+Relocation section '.rela.bar' at offset 0x[0-9a-f]+ contains 1 entry:
+ +Offset +Info +Type +Sym. Value +Symbol's Name \+ Addend
+[0-9a-f]+ +[0-9a-f]+ +R_X86_64_32 +0+ +data1 \+ 0
+
+Relocation section '.rela.foo' at offset 0x[0-9a-f]+ contains 1 entry:
+ +Offset +Info +Type +Sym. Value +Symbol's Name \+ Addend
+[0-9a-f]+ +[0-9a-f]+ +R_X86_64_32 +0+ +data1 \+ 0
+
+Relocation section '.rela.plt' at offset 0x[0-9a-f]+ contains 1 entry:
+ +Offset +Info +Type +Sym. Value +Symbol's Name \+ Addend
+[0-9a-f]+ +[0-9a-f]+ +R_X86_64_JUMP_SLOT +0+ +func1 \+ 0
+
+Relocation section '.relr.dyn' at offset 0x[a-f0-9]+ contains 2 entries:
+ +3 offsets
+[a-f0-9]+
+[a-f0-9]+
+[a-f0-9]+
+
+#...
+Symbol table '.symtab' contains [0-9]+ entries:
+ +Num: +Value +Size Type +Bind +Vis +Ndx Name
+#...
+ +[0-9]+: +[a-f0-9]+ +0 +NOTYPE +LOCAL +DEFAULT +[0-9]+ +__ehdr_start
+#pass
diff --git a/ld/testsuite/ld-x86-64/dt-relr-1b.d b/ld/testsuite/ld-x86-64/dt-relr-1b.d
new file mode 100644
index 00000000000..703b68f6fa8
--- /dev/null
+++ b/ld/testsuite/ld-x86-64/dt-relr-1b.d
@@ -0,0 +1,30 @@
+#source: dt-relr-1.s
+#as: --64
+#ld: -shared -melf_x86_64 $DT_RELR_LDFLAGS -z nocombreloc
+#readelf: -r -s --wide
+#target: x86_64-*-linux*
+
+Relocation section '.rela.bar' at offset 0x[0-9a-f]+ contains 1 entry:
+ +Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend
+[0-9a-f]+ +[0-9a-f]+ +R_X86_64_64 +0+ +data1 \+ 0
+
+Relocation section '.rela.foo' at offset 0x[0-9a-f]+ contains 1 entry:
+ +Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend
+[0-9a-f]+ +[0-9a-f]+ +R_X86_64_64 +0+ +data1 \+ 0
+
+Relocation section '.rela.plt' at offset 0x[0-9a-f]+ contains 1 entry:
+ +Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend
+[0-9a-f]+ +[0-9a-f]+ +R_X86_64_JUMP_SLOT +0+ +func1 \+ 0
+
+Relocation section '.relr.dyn' at offset 0x[a-f0-9]+ contains 2 entries:
+ +3 offsets
+[a-f0-9]+
+[a-f0-9]+
+[a-f0-9]+
+
+#...
+Symbol table '.symtab' contains [0-9]+ entries:
+ +Num: +Value +Size Type +Bind +Vis +Ndx Name
+#...
+ +[0-9]+: +[a-f0-9]+ +0 +NOTYPE +LOCAL +DEFAULT +[0-9]+ +__ehdr_start
+#pass
diff --git a/ld/testsuite/ld-x86-64/dummy.s b/ld/testsuite/ld-x86-64/dummy.s
index 403f98000d9..66d3b2a8856 100644
--- a/ld/testsuite/ld-x86-64/dummy.s
+++ b/ld/testsuite/ld-x86-64/dummy.s
@@ -1 +1,2 @@
# Dummy
+ .section ".note.GNU-stack"
diff --git a/ld/testsuite/ld-x86-64/export-class.exp b/ld/testsuite/ld-x86-64/export-class.exp
index 26896d1ca87..14c2d240fac 100644
--- a/ld/testsuite/ld-x86-64/export-class.exp
+++ b/ld/testsuite/ld-x86-64/export-class.exp
@@ -31,6 +31,7 @@ if { ![istarget x86_64*-*-linux*] } {
}
proc x86_64_export_class_test { abi flag emul } {
+ global NO_DT_RELR_LDFLAGS
set testname "x86-64 $abi symbol export class test"
@@ -75,7 +76,7 @@ proc x86_64_export_class_test { abi flag emul } {
run_ld_link_tests [list \
[list \
"$testname (final shared object)" \
- "$LDFLAGS -shared -Tdata=0x12340000 tmpdir/x86-64-$abi-export-class-ref-r.o tmpdir/x86-64-$abi-export-class-lib.so" "" \
+ "$LDFLAGS $NO_DT_RELR_LDFLAGS -shared -Tdata=0x12340000 tmpdir/x86-64-$abi-export-class-ref-r.o tmpdir/x86-64-$abi-export-class-lib.so" "" \
"$AFLAGS" \
{ ../ld-elf/export-class-dep.s ../ld-elf/export-class-def.s } \
[list \
diff --git a/ld/testsuite/ld-x86-64/foo.s b/ld/testsuite/ld-x86-64/foo.s
index 461bfa43147..01618d36d5a 100644
--- a/ld/testsuite/ld-x86-64/foo.s
+++ b/ld/testsuite/ld-x86-64/foo.s
@@ -1,3 +1,4 @@
.globl foo
foo:
mov %eax, %ebx
+ .section .note.GNU-stack
diff --git a/ld/testsuite/ld-x86-64/gotpcrel1a.S b/ld/testsuite/ld-x86-64/gotpcrel1a.S
index 58dfbb1dd82..62050e6a4cc 100644
--- a/ld/testsuite/ld-x86-64/gotpcrel1a.S
+++ b/ld/testsuite/ld-x86-64/gotpcrel1a.S
@@ -16,3 +16,4 @@ main:
addq $8, %rsp
jmp *myexit@GOTPCREL(%rip)
.size main, .-main
+ .section .note.GNU-stack
diff --git a/ld/testsuite/ld-x86-64/gotpcrel1d.S b/ld/testsuite/ld-x86-64/gotpcrel1d.S
index 4b014999269..84a0c5d4908 100644
--- a/ld/testsuite/ld-x86-64/gotpcrel1d.S
+++ b/ld/testsuite/ld-x86-64/gotpcrel1d.S
@@ -24,3 +24,4 @@ __FUNCTION__.2219:
.size __FUNCTION__.2215, 4
__FUNCTION__.2215:
.string "bar"
+ .section .note.GNU-stack
diff --git a/ld/testsuite/ld-x86-64/ibt-plt-2a-x32.d b/ld/testsuite/ld-x86-64/ibt-plt-2a-x32.d
index a19cece98e8..23e31e62f55 100644
--- a/ld/testsuite/ld-x86-64/ibt-plt-2a-x32.d
+++ b/ld/testsuite/ld-x86-64/ibt-plt-2a-x32.d
@@ -1,6 +1,6 @@
#source: ibt-plt-2.s
#as: --x32
-#ld: -shared -m elf32_x86_64 -z ibtplt --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code
+#ld: -shared -m elf32_x86_64 -z ibtplt --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code $NO_DT_RELR_LDFLAGS
#objdump: -dw
.*: +file format .*
diff --git a/ld/testsuite/ld-x86-64/ibt-plt-2a.d b/ld/testsuite/ld-x86-64/ibt-plt-2a.d
index 92785929092..adbbf62e84d 100644
--- a/ld/testsuite/ld-x86-64/ibt-plt-2a.d
+++ b/ld/testsuite/ld-x86-64/ibt-plt-2a.d
@@ -1,6 +1,6 @@
#source: ibt-plt-2.s
#as: --64 -defsym __64_bit__=1
-#ld: -shared -m elf_x86_64 -z ibtplt --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code
+#ld: -shared -m elf_x86_64 -z ibtplt --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code $NO_DT_RELR_LDFLAGS
#objdump: -dw
.*: +file format .*
diff --git a/ld/testsuite/ld-x86-64/ibt-plt-3a-x32.d b/ld/testsuite/ld-x86-64/ibt-plt-3a-x32.d
index d6f8bb3afbe..f52b1cc796f 100644
--- a/ld/testsuite/ld-x86-64/ibt-plt-3a-x32.d
+++ b/ld/testsuite/ld-x86-64/ibt-plt-3a-x32.d
@@ -1,6 +1,6 @@
#source: ibt-plt-3.s
#as: --x32
-#ld: -shared -m elf32_x86_64 -z ibtplt --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code
+#ld: -shared -m elf32_x86_64 -z ibtplt --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code $NO_DT_RELR_LDFLAGS
#objdump: -dw
.*: +file format .*
diff --git a/ld/testsuite/ld-x86-64/ibt-plt-3a.d b/ld/testsuite/ld-x86-64/ibt-plt-3a.d
index 9c15ed4f928..8bd8851ea73 100644
--- a/ld/testsuite/ld-x86-64/ibt-plt-3a.d
+++ b/ld/testsuite/ld-x86-64/ibt-plt-3a.d
@@ -1,6 +1,6 @@
#source: ibt-plt-3.s
#as: --64 -defsym __64_bit__=1
-#ld: -shared -m elf_x86_64 -z ibtplt --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code
+#ld: -shared -m elf_x86_64 -z ibtplt --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code $NO_DT_RELR_LDFLAGS
#objdump: -dw
.*: +file format .*
diff --git a/ld/testsuite/ld-x86-64/ilp32-4.d b/ld/testsuite/ld-x86-64/ilp32-4.d
index 34be012056e..ad5c9cdf858 100644
--- a/ld/testsuite/ld-x86-64/ilp32-4.d
+++ b/ld/testsuite/ld-x86-64/ilp32-4.d
@@ -1,5 +1,5 @@
#as: --x32
-#ld: -m elf32_x86_64 -shared --no-ld-generated-unwind-info --hash-style=sysv
+#ld: -m elf32_x86_64 -shared --no-ld-generated-unwind-info --hash-style=sysv $NO_DT_RELR_LDFLAGS
#readelf: -d -S --wide
#target: x86_64-*-linux*
diff --git a/ld/testsuite/ld-x86-64/load1c.d b/ld/testsuite/ld-x86-64/load1c.d
index db9c69fadbf..7404c7093b4 100644
--- a/ld/testsuite/ld-x86-64/load1c.d
+++ b/ld/testsuite/ld-x86-64/load1c.d
@@ -1,6 +1,6 @@
#source: load1.s
#as: --64
-#ld: -shared -melf_x86_64 --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code
+#ld: -shared -melf_x86_64 --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code $NO_DT_RELR_LDFLAGS
#objdump: -dw
.*: +file format .*
diff --git a/ld/testsuite/ld-x86-64/load1d.d b/ld/testsuite/ld-x86-64/load1d.d
index 7ccae532f27..1b474a375c7 100644
--- a/ld/testsuite/ld-x86-64/load1d.d
+++ b/ld/testsuite/ld-x86-64/load1d.d
@@ -1,6 +1,6 @@
#source: load1.s
#as: --x32
-#ld: -shared -melf32_x86_64 --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code
+#ld: -shared -melf32_x86_64 --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code $NO_DT_RELR_LDFLAGS
#objdump: -dw
.*: +file format .*
diff --git a/ld/testsuite/ld-x86-64/plt-main-bnd.dd b/ld/testsuite/ld-x86-64/plt-main-bnd.dd
index 70b8d545344..571ef77f477 100644
--- a/ld/testsuite/ld-x86-64/plt-main-bnd.dd
+++ b/ld/testsuite/ld-x86-64/plt-main-bnd.dd
@@ -2,6 +2,6 @@
Disassembly of section .plt.got:
[a-f0-9]+ <[a-z_]+@plt>:
-[ ]*[a-f0-9]+: f2 ff 25 .. .. 20 00 bnd jmp \*0x20....\(%rip\) # ...... <.*>
+[ ]*[a-f0-9]+: f2 ff 25 .. .. 3f 00 bnd jmp \*0x3f....\(%rip\) # ...... <.*>
[ ]*[a-f0-9]+: 90 nop
#pass
diff --git a/ld/testsuite/ld-x86-64/plt-main-ibt-x32.dd b/ld/testsuite/ld-x86-64/plt-main-ibt-x32.dd
index 84e1d17370b..54b55288095 100644
--- a/ld/testsuite/ld-x86-64/plt-main-ibt-x32.dd
+++ b/ld/testsuite/ld-x86-64/plt-main-ibt-x32.dd
@@ -3,5 +3,5 @@ Disassembly of section .plt.got:
[a-f0-9]+ <[_a-z]+@plt>:
[ ]*[a-f0-9]+: f3 0f 1e fa endbr64
-[ ]*[a-f0-9]+: ff 25 .. .. 20 00 jmp +\*0x20....\(%rip\) # ...... <.*>
+[ ]*[a-f0-9]+: ff 25 .. .. 3f 00 jmp +\*0x3f....\(%rip\) # ...... <.*>
#pass
diff --git a/ld/testsuite/ld-x86-64/plt-main-ibt.dd b/ld/testsuite/ld-x86-64/plt-main-ibt.dd
index 3c9c6584933..6cdce13f274 100644
--- a/ld/testsuite/ld-x86-64/plt-main-ibt.dd
+++ b/ld/testsuite/ld-x86-64/plt-main-ibt.dd
@@ -3,5 +3,5 @@ Disassembly of section .plt.got:
[a-f0-9]+ <[_a-z]+@plt>:
[ ]*[a-f0-9]+: f3 0f 1e fa endbr64
-[ ]*[a-f0-9]+: f2 ff 25 .. .. 20 00 bnd jmp \*0x20....\(%rip\) # ...... <.*>
+[ ]*[a-f0-9]+: f2 ff 25 .. .. 3f 00 bnd jmp \*0x3f....\(%rip\) # ...... <.*>
#pass
diff --git a/ld/testsuite/ld-x86-64/pr13082-2b.d b/ld/testsuite/ld-x86-64/pr13082-2b.d
index c218eafe34c..71c44fc0ee5 100644
--- a/ld/testsuite/ld-x86-64/pr13082-2b.d
+++ b/ld/testsuite/ld-x86-64/pr13082-2b.d
@@ -1,7 +1,7 @@
#source: pr13082-2.s
#name: PR ld/13082-2 (b)
#as: --x32
-#ld: -pie -melf32_x86_64
+#ld: -pie -melf32_x86_64 $NO_DT_RELR_LDFLAGS
#readelf: -r --wide
Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 1 entry:
diff --git a/ld/testsuite/ld-x86-64/pr14207.d b/ld/testsuite/ld-x86-64/pr14207.d
index f330600b916..c718c77e1d1 100644
--- a/ld/testsuite/ld-x86-64/pr14207.d
+++ b/ld/testsuite/ld-x86-64/pr14207.d
@@ -1,6 +1,6 @@
#name: PR ld/14207
#as: --64
-#ld: -melf_x86_64 -shared -z relro -z now --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code
+#ld: -melf_x86_64 -shared -z relro -z now --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code $NO_DT_RELR_LDFLAGS
#readelf: -l --wide
#target: x86_64-*-linux*
@@ -11,9 +11,9 @@ There are 4 program headers, starting at offset 64
Program Headers:
Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
LOAD 0x000000 0x0000000000000000 0x0000000000000000 0x000150 0x000150 R 0x200000
- LOAD 0x000b.8 0x0000000000200b.8 0x0000000000200b.8 0x0004.0 0x000c.8 RW 0x200000
- DYNAMIC 0x000b.0 0x0000000000200b.0 0x0000000000200b.0 0x0001.0 0x0001.0 RW 0x8
- GNU_RELRO 0x000b.8 0x0000000000200b.8 0x0000000000200b.8 0x0004.0 0x0004.8 R 0x1
+ LOAD 0x1ffb.8 0x00000000003ffb.8 0x00000000003ffb.8 0x0004.0 0x000c.8 RW 0x200000
+ DYNAMIC 0x1ffb.0 0x00000000003ffb.0 0x00000000003ffb.0 0x0001.0 0x0001.0 RW 0x8
+ GNU_RELRO 0x1ffb.8 0x00000000003ffb.8 0x00000000003ffb.8 0x0004.0 0x0004.8 R 0x1
Section to Segment mapping:
Segment Sections...
diff --git a/ld/testsuite/ld-x86-64/pr18176.d b/ld/testsuite/ld-x86-64/pr18176.d
index 4e3ad9ff08d..b1b3251f98c 100644
--- a/ld/testsuite/ld-x86-64/pr18176.d
+++ b/ld/testsuite/ld-x86-64/pr18176.d
@@ -1,9 +1,9 @@
#name: PR ld/18176
#as: --64
-#ld: -melf_x86_64 -shared -z relro -T pr18176.t -z max-page-size=0x200000 -z common-page-size=0x1000
+#ld: -melf_x86_64 -shared -z relro -T pr18176.t -z max-page-size=0x200000 -z common-page-size=0x1000 $NO_DT_RELR_LDFLAGS
#readelf: -l --wide
#target: x86_64-*-linux*
#...
- GNU_RELRO 0x04bd17 0x000000000024bd17 0x000000000024bd17 0x0022e9 0x0022e9 R 0x1
+ GNU_RELRO 0x1fdd17 0x00000000003fdd17 0x00000000003fdd17 0x0022e9 0x0022e9 R 0x1
#pass
diff --git a/ld/testsuite/ld-x86-64/pr19031b.S b/ld/testsuite/ld-x86-64/pr19031b.S
index ccc91258729..7bc8b31f77b 100644
--- a/ld/testsuite/ld-x86-64/pr19031b.S
+++ b/ld/testsuite/ld-x86-64/pr19031b.S
@@ -16,3 +16,4 @@ h:
.data
zed:
.long f - .
+ .section .note.GNU-stack
diff --git a/ld/testsuite/ld-x86-64/pr19162.d b/ld/testsuite/ld-x86-64/pr19162.d
index 2d51dabe729..f458853d8e5 100644
--- a/ld/testsuite/ld-x86-64/pr19162.d
+++ b/ld/testsuite/ld-x86-64/pr19162.d
@@ -1,7 +1,7 @@
#source: pr19162a.s
#source: pr19162b.s
#as: --64
-#ld: -melf_x86_64 -shared -z noseparate-code -z max-page-size=0x200000 -z common-page-size=0x1000 --hash-style=sysv
+#ld: -melf_x86_64 -shared -z noseparate-code -z max-page-size=0x200000 -z common-page-size=0x1000 --hash-style=sysv $NO_DT_RELR_LDFLAGS
#readelf: -l --wide
#target: x86_64-*-linux*
diff --git a/ld/testsuite/ld-x86-64/pr19319a.S b/ld/testsuite/ld-x86-64/pr19319a.S
index 438d7a5284a..01eca1b85ab 100644
--- a/ld/testsuite/ld-x86-64/pr19319a.S
+++ b/ld/testsuite/ld-x86-64/pr19319a.S
@@ -9,3 +9,4 @@ foo:
.align 8
.long 4660
.long 22136
+ .section .note.GNU-stack
diff --git a/ld/testsuite/ld-x86-64/pr19319b.S b/ld/testsuite/ld-x86-64/pr19319b.S
index c9285c07c17..73b8e89de66 100644
--- a/ld/testsuite/ld-x86-64/pr19319b.S
+++ b/ld/testsuite/ld-x86-64/pr19319b.S
@@ -9,3 +9,4 @@ _start:
.align 8
.long 4660
.long 22136
+ .section .note.GNU-stack
diff --git a/ld/testsuite/ld-x86-64/pr19636-2d.d b/ld/testsuite/ld-x86-64/pr19636-2d.d
index 3bd33a9a915..092992be9d4 100644
--- a/ld/testsuite/ld-x86-64/pr19636-2d.d
+++ b/ld/testsuite/ld-x86-64/pr19636-2d.d
@@ -1,6 +1,6 @@
#source: pr19636-2.s
#as: --64 -mrelax-relocations=no
-#ld: -pie -m elf_x86_64 --no-dynamic-linker --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code
+#ld: -pie -m elf_x86_64 --no-dynamic-linker --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code $NO_DT_RELR_LDFLAGS
#objdump: -dw
.*: +file format .*
diff --git a/ld/testsuite/ld-x86-64/pr19636-2l.d b/ld/testsuite/ld-x86-64/pr19636-2l.d
index 1b894b3e97c..8c23c0b7411 100644
--- a/ld/testsuite/ld-x86-64/pr19636-2l.d
+++ b/ld/testsuite/ld-x86-64/pr19636-2l.d
@@ -1,6 +1,6 @@
#source: pr19636-2.s
#as: --64 -mrelax-relocations=no
-#ld: -pie -m elf_x86_64 --no-dynamic-linker --hash-style=sysv -z dynamic-undefined-weak -z max-page-size=0x200000 -z noseparate-code
+#ld: -pie -m elf_x86_64 --no-dynamic-linker --hash-style=sysv -z dynamic-undefined-weak -z max-page-size=0x200000 -z noseparate-code $NO_DT_RELR_LDFLAGS
#objdump: -dw
#warning: -z dynamic-undefined-weak ignored
diff --git a/ld/testsuite/ld-x86-64/pr19827a.S b/ld/testsuite/ld-x86-64/pr19827a.S
index cdf1d4b8a30..43241f5224e 100644
--- a/ld/testsuite/ld-x86-64/pr19827a.S
+++ b/ld/testsuite/ld-x86-64/pr19827a.S
@@ -6,3 +6,5 @@ _start:
.globl foo
foo:
.byte 0
+
+ .section .note.GNU-stack
diff --git a/ld/testsuite/ld-x86-64/pr19827b.S b/ld/testsuite/ld-x86-64/pr19827b.S
index bb46e1d59f0..897c149ce2c 100644
--- a/ld/testsuite/ld-x86-64/pr19827b.S
+++ b/ld/testsuite/ld-x86-64/pr19827b.S
@@ -1,2 +1,3 @@
.data
.dc.a foo
+ .section .note.GNU-stack
diff --git a/ld/testsuite/ld-x86-64/pr19969a.S b/ld/testsuite/ld-x86-64/pr19969a.S
index f318401e699..9038436a624 100644
--- a/ld/testsuite/ld-x86-64/pr19969a.S
+++ b/ld/testsuite/ld-x86-64/pr19969a.S
@@ -5,3 +5,4 @@
.size foo, 4
foo:
.long -1
+ .section .note.GNU-stack
diff --git a/ld/testsuite/ld-x86-64/pr19969b.S b/ld/testsuite/ld-x86-64/pr19969b.S
index eabeba2fb08..abe96facac3 100644
--- a/ld/testsuite/ld-x86-64/pr19969b.S
+++ b/ld/testsuite/ld-x86-64/pr19969b.S
@@ -12,3 +12,4 @@ _start:
.size foo_p, 4
foo_p:
.long foo
+ .section .note.GNU-stack
diff --git a/ld/testsuite/ld-x86-64/pr20253-1d.d b/ld/testsuite/ld-x86-64/pr20253-1d.d
index f9f03ba8403..057577bdc57 100644
--- a/ld/testsuite/ld-x86-64/pr20253-1d.d
+++ b/ld/testsuite/ld-x86-64/pr20253-1d.d
@@ -1,6 +1,6 @@
#source: pr20253-1.s
#as: --64
-#ld: -pie -melf_x86_64 --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code
+#ld: -pie -melf_x86_64 --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code $NO_DT_RELR_LDFLAGS
#objdump: -dw
.*: +file format .*
diff --git a/ld/testsuite/ld-x86-64/pr20253-1f.d b/ld/testsuite/ld-x86-64/pr20253-1f.d
index 6666bcaf147..479db8202e8 100644
--- a/ld/testsuite/ld-x86-64/pr20253-1f.d
+++ b/ld/testsuite/ld-x86-64/pr20253-1f.d
@@ -1,6 +1,6 @@
#source: pr20253-1.s
#as: --64
-#ld: -shared -melf_x86_64 --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code
+#ld: -shared -melf_x86_64 --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code $NO_DT_RELR_LDFLAGS
#objdump: -dw
.*: +file format .*
diff --git a/ld/testsuite/ld-x86-64/pr20253-1j.d b/ld/testsuite/ld-x86-64/pr20253-1j.d
index 88c9715ad75..20176a2d357 100644
--- a/ld/testsuite/ld-x86-64/pr20253-1j.d
+++ b/ld/testsuite/ld-x86-64/pr20253-1j.d
@@ -1,6 +1,6 @@
#source: pr20253-1.s
#as: --x32
-#ld: -pie -melf32_x86_64 --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code
+#ld: -pie -melf32_x86_64 --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code $NO_DT_RELR_LDFLAGS
#objdump: -dw
.*: +file format .*
diff --git a/ld/testsuite/ld-x86-64/pr20253-1l.d b/ld/testsuite/ld-x86-64/pr20253-1l.d
index 7428a721b16..4b179077dec 100644
--- a/ld/testsuite/ld-x86-64/pr20253-1l.d
+++ b/ld/testsuite/ld-x86-64/pr20253-1l.d
@@ -1,6 +1,6 @@
#source: pr20253-1.s
#as: --x32
-#ld: -shared -melf32_x86_64 --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code
+#ld: -shared -melf32_x86_64 --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code $NO_DT_RELR_LDFLAGS
#objdump: -dw
.*: +file format .*
diff --git a/ld/testsuite/ld-x86-64/pr20550a.s b/ld/testsuite/ld-x86-64/pr20550a.s
index 4430398817d..167255a797a 100644
--- a/ld/testsuite/ld-x86-64/pr20550a.s
+++ b/ld/testsuite/ld-x86-64/pr20550a.s
@@ -4,3 +4,4 @@ _start:
movabsq $strings@SIZE, %rdx
.section .data.rel,"aw",@progbits
.quad strings
+ .section .note.GNU-stack
diff --git a/ld/testsuite/ld-x86-64/pr20800a.S b/ld/testsuite/ld-x86-64/pr20800a.S
index c4bcd80a7a1..95024e280e5 100644
--- a/ld/testsuite/ld-x86-64/pr20800a.S
+++ b/ld/testsuite/ld-x86-64/pr20800a.S
@@ -15,3 +15,4 @@ main:
popq %r15
ret
.size main, .-main
+ .section .note.GNU-stack
diff --git a/ld/testsuite/ld-x86-64/pr20830a-now.d b/ld/testsuite/ld-x86-64/pr20830a-now.d
index 4f284c44a40..28f595f1c83 100644
--- a/ld/testsuite/ld-x86-64/pr20830a-now.d
+++ b/ld/testsuite/ld-x86-64/pr20830a-now.d
@@ -1,13 +1,14 @@
#name: PR ld/20830 (.plt.got, -z now)
#source: pr20830.s
#as: --64
-#ld: -z now -melf_x86_64 -shared -z relro --ld-generated-unwind-info --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code
+#ld: -z now -melf_x86_64 -shared -z relro --ld-generated-unwind-info --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code $NO_DT_RELR_LDFLAGS
#objdump: -dw -Wf
.*: +file format .*
Contents of the .eh_frame section:
+
0+ 0000000000000014 00000000 CIE
Version: 1
Augmentation: "zR"
@@ -15,7 +16,6 @@ Contents of the .eh_frame section:
Data alignment factor: -8
Return address column: 16
Augmentation data: 1b
-
DW_CFA_def_cfa: r7 \(rsp\) ofs 8
DW_CFA_offset: r16 \(rip\) at cfa-8
DW_CFA_nop
@@ -50,19 +50,19 @@ Contents of the .eh_frame section:
Disassembly of section .plt:
0+1b0 <.plt>:
- +[a-f0-9]+: ff 35 32 0e 20 00 push 0x200e32\(%rip\) # 200fe8 <_GLOBAL_OFFSET_TABLE_\+0x8>
- +[a-f0-9]+: ff 25 34 0e 20 00 jmp \*0x200e34\(%rip\) # 200ff0 <_GLOBAL_OFFSET_TABLE_\+0x10>
+ +[a-f0-9]+: ff 35 32 fe 3f 00 push 0x3ffe32\(%rip\) # 3fffe8 <_GLOBAL_OFFSET_TABLE_\+0x8>
+ +[a-f0-9]+: ff 25 34 fe 3f 00 jmp \*0x3ffe34\(%rip\) # 3ffff0 <_GLOBAL_OFFSET_TABLE_\+0x10>
+[a-f0-9]+: 0f 1f 40 00 nopl 0x0\(%rax\)
Disassembly of section .plt.got:
0+1c0 <func@plt>:
- +[a-f0-9]+: ff 25 32 0e 20 00 jmp \*0x200e32\(%rip\) # 200ff8 <func>
+ +[a-f0-9]+: ff 25 32 fe 3f 00 jmp \*0x3ffe32\(%rip\) # 3ffff8 <func>
+[a-f0-9]+: 66 90 xchg %ax,%ax
Disassembly of section .text:
0+1c8 <foo>:
+[a-f0-9]+: e8 f3 ff ff ff call 1c0 <func@plt>
- +[a-f0-9]+: 48 8b 05 24 0e 20 00 mov 0x200e24\(%rip\),%rax # 200ff8 <func>
+ +[a-f0-9]+: 48 8b 05 24 fe 3f 00 mov 0x3ffe24\(%rip\),%rax # 3ffff8 <func>
#pass
diff --git a/ld/testsuite/ld-x86-64/pr20830a.d b/ld/testsuite/ld-x86-64/pr20830a.d
index 615b59fd5de..2c47a51b19d 100644
--- a/ld/testsuite/ld-x86-64/pr20830a.d
+++ b/ld/testsuite/ld-x86-64/pr20830a.d
@@ -1,13 +1,14 @@
#name: PR ld/20830 (.plt.got)
#source: pr20830.s
#as: --64
-#ld: -melf_x86_64 -shared -z relro --ld-generated-unwind-info --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code
+#ld: -melf_x86_64 -shared -z relro --ld-generated-unwind-info --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code $NO_DT_RELR_LDFLAGS
#objdump: -dw -Wf
.*: +file format .*
Contents of the .eh_frame section:
+
0+ 0000000000000014 00000000 CIE
Version: 1
Augmentation: "zR"
@@ -15,7 +16,6 @@ Contents of the .eh_frame section:
Data alignment factor: -8
Return address column: 16
Augmentation data: 1b
-
DW_CFA_def_cfa: r7 \(rsp\) ofs 8
DW_CFA_offset: r16 \(rip\) at cfa-8
DW_CFA_nop
@@ -50,19 +50,19 @@ Contents of the .eh_frame section:
Disassembly of section .plt:
0+1b0 <.plt>:
- +[a-f0-9]+: ff 35 52 0e 20 00 push 0x200e52\(%rip\) # 201008 <_GLOBAL_OFFSET_TABLE_\+0x8>
- +[a-f0-9]+: ff 25 54 0e 20 00 jmp \*0x200e54\(%rip\) # 201010 <_GLOBAL_OFFSET_TABLE_\+0x10>
+ +[a-f0-9]+: ff 35 52 fe 3f 00 push 0x3ffe52\(%rip\) # 400008 <_GLOBAL_OFFSET_TABLE_\+0x8>
+ +[a-f0-9]+: ff 25 54 fe 3f 00 jmp \*0x3ffe54\(%rip\) # 400010 <_GLOBAL_OFFSET_TABLE_\+0x10>
+[a-f0-9]+: 0f 1f 40 00 nopl 0x0\(%rax\)
Disassembly of section .plt.got:
0+1c0 <func@plt>:
- +[a-f0-9]+: ff 25 32 0e 20 00 jmp \*0x200e32\(%rip\) # 200ff8 <func>
+ +[a-f0-9]+: ff 25 32 fe 3f 00 jmp \*0x3ffe32\(%rip\) # 3ffff8 <func>
+[a-f0-9]+: 66 90 xchg %ax,%ax
Disassembly of section .text:
0+1c8 <foo>:
+[a-f0-9]+: e8 f3 ff ff ff call 1c0 <func@plt>
- +[a-f0-9]+: 48 8b 05 24 0e 20 00 mov 0x200e24\(%rip\),%rax # 200ff8 <func>
+ +[a-f0-9]+: 48 8b 05 24 fe 3f 00 mov 0x3ffe24\(%rip\),%rax # 3ffff8 <func>
#pass
diff --git a/ld/testsuite/ld-x86-64/pr20830b-now.d b/ld/testsuite/ld-x86-64/pr20830b-now.d
index 7c7f2f928ac..2cad0234853 100644
--- a/ld/testsuite/ld-x86-64/pr20830b-now.d
+++ b/ld/testsuite/ld-x86-64/pr20830b-now.d
@@ -1,13 +1,14 @@
-#name: PR ld/20830 (.plt.got, -z now)
+#name: PR ld/20830 (.plt.got, -z now) (x32)
#source: pr20830.s
#as: --x32
-#ld: -z now -melf32_x86_64 -shared -z relro --ld-generated-unwind-info --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code
+#ld: -z now -melf32_x86_64 -shared -z relro --ld-generated-unwind-info --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code $NO_DT_RELR_LDFLAGS
#objdump: -dw -Wf
.*: +file format .*
Contents of the .eh_frame section:
+
0+ 0000000000000014 00000000 CIE
Version: 1
Augmentation: "zR"
@@ -15,7 +16,6 @@ Contents of the .eh_frame section:
Data alignment factor: -8
Return address column: 16
Augmentation data: 1b
-
DW_CFA_def_cfa: r7 \(rsp\) ofs 8
DW_CFA_offset: r16 \(rip\) at cfa-8
DW_CFA_nop
@@ -42,19 +42,19 @@ Contents of the .eh_frame section:
Disassembly of section .plt:
0+120 <.plt>:
- +[a-f0-9]+: ff 35 c2 0e 20 00 push 0x200ec2\(%rip\) # 200fe8 <_GLOBAL_OFFSET_TABLE_\+0x8>
- +[a-f0-9]+: ff 25 c4 0e 20 00 jmp \*0x200ec4\(%rip\) # 200ff0 <_GLOBAL_OFFSET_TABLE_\+0x10>
+ +[a-f0-9]+: ff 35 c2 fe 3f 00 push 0x3ffec2\(%rip\) # 3fffe8 <_GLOBAL_OFFSET_TABLE_\+0x8>
+ +[a-f0-9]+: ff 25 c4 fe 3f 00 jmp \*0x3ffec4\(%rip\) # 3ffff0 <_GLOBAL_OFFSET_TABLE_\+0x10>
+[a-f0-9]+: 0f 1f 40 00 nopl 0x0\(%rax\)
Disassembly of section .plt.got:
0+130 <func@plt>:
- +[a-f0-9]+: ff 25 c2 0e 20 00 jmp \*0x200ec2\(%rip\) # 200ff8 <func>
+ +[a-f0-9]+: ff 25 c2 fe 3f 00 jmp \*0x3ffec2\(%rip\) # 3ffff8 <func>
+[a-f0-9]+: 66 90 xchg %ax,%ax
Disassembly of section .text:
0+138 <foo>:
+[a-f0-9]+: e8 f3 ff ff ff call 130 <func@plt>
- +[a-f0-9]+: 48 8b 05 b4 0e 20 00 mov 0x200eb4\(%rip\),%rax # 200ff8 <func>
+ +[a-f0-9]+: 48 8b 05 b4 fe 3f 00 mov 0x3ffeb4\(%rip\),%rax # 3ffff8 <func>
#pass
diff --git a/ld/testsuite/ld-x86-64/pr20830b.d b/ld/testsuite/ld-x86-64/pr20830b.d
index 3c5d42b9c43..047adc17460 100644
--- a/ld/testsuite/ld-x86-64/pr20830b.d
+++ b/ld/testsuite/ld-x86-64/pr20830b.d
@@ -1,13 +1,14 @@
-#name: PR ld/20830 (.plt.got)
+#name: PR ld/20830 (.plt.got) (x32)
#source: pr20830.s
#as: --x32
-#ld: -melf32_x86_64 -shared -z relro --ld-generated-unwind-info --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code
+#ld: -melf32_x86_64 -shared -z relro --ld-generated-unwind-info --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code $NO_DT_RELR_LDFLAGS
#objdump: -dw -Wf
.*: +file format .*
Contents of the .eh_frame section:
+
0+ 0000000000000014 00000000 CIE
Version: 1
Augmentation: "zR"
@@ -15,7 +16,6 @@ Contents of the .eh_frame section:
Data alignment factor: -8
Return address column: 16
Augmentation data: 1b
-
DW_CFA_def_cfa: r7 \(rsp\) ofs 8
DW_CFA_offset: r16 \(rip\) at cfa-8
DW_CFA_nop
@@ -42,19 +42,19 @@ Contents of the .eh_frame section:
Disassembly of section .plt:
0+120 <.plt>:
- +[a-f0-9]+: ff 35 e2 0e 20 00 push 0x200ee2\(%rip\) # 201008 <_GLOBAL_OFFSET_TABLE_\+0x8>
- +[a-f0-9]+: ff 25 e4 0e 20 00 jmp \*0x200ee4\(%rip\) # 201010 <_GLOBAL_OFFSET_TABLE_\+0x10>
+ +[a-f0-9]+: ff 35 e2 fe 3f 00 push 0x3ffee2\(%rip\) # 400008 <_GLOBAL_OFFSET_TABLE_\+0x8>
+ +[a-f0-9]+: ff 25 e4 fe 3f 00 jmp \*0x3ffee4\(%rip\) # 400010 <_GLOBAL_OFFSET_TABLE_\+0x10>
+[a-f0-9]+: 0f 1f 40 00 nopl 0x0\(%rax\)
Disassembly of section .plt.got:
0+130 <func@plt>:
- +[a-f0-9]+: ff 25 c2 0e 20 00 jmp \*0x200ec2\(%rip\) # 200ff8 <func>
+ +[a-f0-9]+: ff 25 c2 fe 3f 00 jmp \*0x3ffec2\(%rip\) # 3ffff8 <func>
+[a-f0-9]+: 66 90 xchg %ax,%ax
Disassembly of section .text:
0+138 <foo>:
+[a-f0-9]+: e8 f3 ff ff ff call 130 <func@plt>
- +[a-f0-9]+: 48 8b 05 b4 0e 20 00 mov 0x200eb4\(%rip\),%rax # 200ff8 <func>
+ +[a-f0-9]+: 48 8b 05 b4 fe 3f 00 mov 0x3ffeb4\(%rip\),%rax # 3ffff8 <func>
#pass
diff --git a/ld/testsuite/ld-x86-64/pr21038a-now.d b/ld/testsuite/ld-x86-64/pr21038a-now.d
index 1653a68ff8a..1fae617cb2e 100644
--- a/ld/testsuite/ld-x86-64/pr21038a-now.d
+++ b/ld/testsuite/ld-x86-64/pr21038a-now.d
@@ -1,13 +1,14 @@
#name: PR ld/21038 (.plt.got, -z now)
#source: pr21038a.s
#as: --64
-#ld: -z now -z bndplt -melf_x86_64 -shared -z relro --ld-generated-unwind-info --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code
+#ld: -z now -z bndplt -melf_x86_64 -shared -z relro --ld-generated-unwind-info --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code $NO_DT_RELR_LDFLAGS
#objdump: -dw -Wf
.*: +file format .*
Contents of the .eh_frame section:
+
0+ 0000000000000014 00000000 CIE
Version: 1
Augmentation: "zR"
@@ -15,7 +16,6 @@ Contents of the .eh_frame section:
Data alignment factor: -8
Return address column: 16
Augmentation data: 1b
-
DW_CFA_def_cfa: r7 \(rsp\) ofs 8
DW_CFA_offset: r16 \(rip\) at cfa-8
DW_CFA_nop
@@ -50,19 +50,19 @@ Contents of the .eh_frame section:
Disassembly of section .plt:
0+1b0 <.plt>:
- +[a-f0-9]+: ff 35 32 0e 20 00 push 0x200e32\(%rip\) # 200fe8 <_GLOBAL_OFFSET_TABLE_\+0x8>
- +[a-f0-9]+: f2 ff 25 33 0e 20 00 bnd jmp \*0x200e33\(%rip\) # 200ff0 <_GLOBAL_OFFSET_TABLE_\+0x10>
+ +[a-f0-9]+: ff 35 32 fe 3f 00 push 0x3ffe32\(%rip\) # 3fffe8 <_GLOBAL_OFFSET_TABLE_\+0x8>
+ +[a-f0-9]+: f2 ff 25 33 fe 3f 00 bnd jmp \*0x3ffe33\(%rip\) # 3ffff0 <_GLOBAL_OFFSET_TABLE_\+0x10>
+[a-f0-9]+: 0f 1f 00 nopl \(%rax\)
Disassembly of section .plt.got:
0+1c0 <func@plt>:
- +[a-f0-9]+: f2 ff 25 31 0e 20 00 bnd jmp \*0x200e31\(%rip\) # 200ff8 <func>
+ +[a-f0-9]+: f2 ff 25 31 fe 3f 00 bnd jmp \*0x3ffe31\(%rip\) # 3ffff8 <func>
+[a-f0-9]+: 90 nop
Disassembly of section .text:
0+1c8 <foo>:
+[a-f0-9]+: e8 f3 ff ff ff call 1c0 <func@plt>
- +[a-f0-9]+: 48 8b 05 24 0e 20 00 mov 0x200e24\(%rip\),%rax # 200ff8 <func>
+ +[a-f0-9]+: 48 8b 05 24 fe 3f 00 mov 0x3ffe24\(%rip\),%rax # 3ffff8 <func>
#pass
diff --git a/ld/testsuite/ld-x86-64/pr21038a.d b/ld/testsuite/ld-x86-64/pr21038a.d
index 6ef8db254e9..070d37e5bcc 100644
--- a/ld/testsuite/ld-x86-64/pr21038a.d
+++ b/ld/testsuite/ld-x86-64/pr21038a.d
@@ -1,12 +1,13 @@
#name: PR ld/21038 (.plt.got)
#as: --64
-#ld: -z bndplt -melf_x86_64 -shared -z relro --ld-generated-unwind-info --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code
+#ld: -z bndplt -melf_x86_64 -shared -z relro --ld-generated-unwind-info --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code $NO_DT_RELR_LDFLAGS
#objdump: -dw -Wf
.*: +file format .*
Contents of the .eh_frame section:
+
0+ 0000000000000014 00000000 CIE
Version: 1
Augmentation: "zR"
@@ -14,7 +15,6 @@ Contents of the .eh_frame section:
Data alignment factor: -8
Return address column: 16
Augmentation data: 1b
-
DW_CFA_def_cfa: r7 \(rsp\) ofs 8
DW_CFA_offset: r16 \(rip\) at cfa-8
DW_CFA_nop
@@ -49,19 +49,19 @@ Contents of the .eh_frame section:
Disassembly of section .plt:
0+1b0 <.plt>:
- +[a-f0-9]+: ff 35 52 0e 20 00 push 0x200e52\(%rip\) # 201008 <_GLOBAL_OFFSET_TABLE_\+0x8>
- +[a-f0-9]+: f2 ff 25 53 0e 20 00 bnd jmp \*0x200e53\(%rip\) # 201010 <_GLOBAL_OFFSET_TABLE_\+0x10>
+ +[a-f0-9]+: ff 35 52 fe 3f 00 push 0x3ffe52\(%rip\) # 400008 <_GLOBAL_OFFSET_TABLE_\+0x8>
+ +[a-f0-9]+: f2 ff 25 53 fe 3f 00 bnd jmp \*0x3ffe53\(%rip\) # 400010 <_GLOBAL_OFFSET_TABLE_\+0x10>
+[a-f0-9]+: 0f 1f 00 nopl \(%rax\)
Disassembly of section .plt.got:
0+1c0 <func@plt>:
- +[a-f0-9]+: f2 ff 25 31 0e 20 00 bnd jmp \*0x200e31\(%rip\) # 200ff8 <func>
+ +[a-f0-9]+: f2 ff 25 31 fe 3f 00 bnd jmp \*0x3ffe31\(%rip\) # 3ffff8 <func>
+[a-f0-9]+: 90 nop
Disassembly of section .text:
0+1c8 <foo>:
+[a-f0-9]+: e8 f3 ff ff ff call 1c0 <func@plt>
- +[a-f0-9]+: 48 8b 05 24 0e 20 00 mov 0x200e24\(%rip\),%rax # 200ff8 <func>
+ +[a-f0-9]+: 48 8b 05 24 fe 3f 00 mov 0x3ffe24\(%rip\),%rax # 3ffff8 <func>
#pass
diff --git a/ld/testsuite/ld-x86-64/pr21038b-now.d b/ld/testsuite/ld-x86-64/pr21038b-now.d
index c042b6cf702..72e5109f5db 100644
--- a/ld/testsuite/ld-x86-64/pr21038b-now.d
+++ b/ld/testsuite/ld-x86-64/pr21038b-now.d
@@ -1,13 +1,14 @@
#name: PR ld/21038 (.plt.sec, -z now)
#source: pr21038b.s
#as: --64
-#ld: -z now -z bndplt -melf_x86_64 -shared -z relro --ld-generated-unwind-info --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code
+#ld: -z now -z bndplt -melf_x86_64 -shared -z relro --ld-generated-unwind-info --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code $NO_DT_RELR_LDFLAGS
#objdump: -dw -Wf
.*: +file format .*
Contents of the .eh_frame section:
+
0+ 0000000000000014 00000000 CIE
Version: 1
Augmentation: "zR"
@@ -15,7 +16,6 @@ Contents of the .eh_frame section:
Data alignment factor: -8
Return address column: 16
Augmentation data: 1b
-
DW_CFA_def_cfa: r7 \(rsp\) ofs 8
DW_CFA_offset: r16 \(rip\) at cfa-8
DW_CFA_nop
@@ -50,8 +50,8 @@ Contents of the .eh_frame section:
Disassembly of section .plt:
0+1b0 <.plt>:
- +[a-f0-9]+: ff 35 32 0e 20 00 push 0x200e32\(%rip\) # 200fe8 <_GLOBAL_OFFSET_TABLE_\+0x8>
- +[a-f0-9]+: f2 ff 25 33 0e 20 00 bnd jmp \*0x200e33\(%rip\) # 200ff0 <_GLOBAL_OFFSET_TABLE_\+0x10>
+ +[a-f0-9]+: ff 35 32 fe 3f 00 push 0x3ffe32\(%rip\) # 3fffe8 <_GLOBAL_OFFSET_TABLE_\+0x8>
+ +[a-f0-9]+: f2 ff 25 33 fe 3f 00 bnd jmp \*0x3ffe33\(%rip\) # 3ffff0 <_GLOBAL_OFFSET_TABLE_\+0x10>
+[a-f0-9]+: 0f 1f 00 nopl \(%rax\)
+[a-f0-9]+: 68 00 00 00 00 push \$0x0
+[a-f0-9]+: f2 e9 e5 ff ff ff bnd jmp 1b0 <func@plt-0x20>
@@ -60,7 +60,7 @@ Disassembly of section .plt:
Disassembly of section .plt.sec:
0+1d0 <func@plt>:
- +[a-f0-9]+: f2 ff 25 21 0e 20 00 bnd jmp \*0x200e21\(%rip\) # 200ff8 <func>
+ +[a-f0-9]+: f2 ff 25 21 fe 3f 00 bnd jmp \*0x3ffe21\(%rip\) # 3ffff8 <func>
+[a-f0-9]+: 90 nop
Disassembly of section .text:
diff --git a/ld/testsuite/ld-x86-64/pr21038b.d b/ld/testsuite/ld-x86-64/pr21038b.d
index 144ed44cccf..d6a9567364d 100644
--- a/ld/testsuite/ld-x86-64/pr21038b.d
+++ b/ld/testsuite/ld-x86-64/pr21038b.d
@@ -7,6 +7,7 @@
Contents of the .eh_frame section:
+
0+ 0000000000000014 00000000 CIE
Version: 1
Augmentation: "zR"
@@ -14,7 +15,6 @@ Contents of the .eh_frame section:
Data alignment factor: -8
Return address column: 16
Augmentation data: 1b
-
DW_CFA_def_cfa: r7 \(rsp\) ofs 8
DW_CFA_offset: r16 \(rip\) at cfa-8
DW_CFA_nop
@@ -49,8 +49,8 @@ Contents of the .eh_frame section:
Disassembly of section .plt:
0+1b0 <.plt>:
- +[a-f0-9]+: ff 35 52 0e 20 00 push 0x200e52\(%rip\) # 201008 <_GLOBAL_OFFSET_TABLE_\+0x8>
- +[a-f0-9]+: f2 ff 25 53 0e 20 00 bnd jmp \*0x200e53\(%rip\) # 201010 <_GLOBAL_OFFSET_TABLE_\+0x10>
+ +[a-f0-9]+: ff 35 52 fe 3f 00 push 0x3ffe52\(%rip\) # 400008 <_GLOBAL_OFFSET_TABLE_\+0x8>
+ +[a-f0-9]+: f2 ff 25 53 fe 3f 00 bnd jmp \*0x3ffe53\(%rip\) # 400010 <_GLOBAL_OFFSET_TABLE_\+0x10>
+[a-f0-9]+: 0f 1f 00 nopl \(%rax\)
+[a-f0-9]+: 68 00 00 00 00 push \$0x0
+[a-f0-9]+: f2 e9 e5 ff ff ff bnd jmp 1b0 <func@plt-0x20>
@@ -59,7 +59,7 @@ Disassembly of section .plt:
Disassembly of section .plt.sec:
0+1d0 <func@plt>:
- +[a-f0-9]+: f2 ff 25 41 0e 20 00 bnd jmp \*0x200e41\(%rip\) # 201018 <func>
+ +[a-f0-9]+: f2 ff 25 41 fe 3f 00 bnd jmp \*0x3ffe41\(%rip\) # 400018 <func>
+[a-f0-9]+: 90 nop
Disassembly of section .text:
diff --git a/ld/testsuite/ld-x86-64/pr21038c-now.d b/ld/testsuite/ld-x86-64/pr21038c-now.d
index 2058512b74e..cda1c446c2d 100644
--- a/ld/testsuite/ld-x86-64/pr21038c-now.d
+++ b/ld/testsuite/ld-x86-64/pr21038c-now.d
@@ -1,13 +1,14 @@
#name: PR ld/21038 (.plt.got and .plt.sec, -z now)
#source: pr21038c.s
#as: --64
-#ld: -z now -z bndplt -melf_x86_64 -shared -z relro --ld-generated-unwind-info --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code
+#ld: -z now -z bndplt -melf_x86_64 -shared -z relro --ld-generated-unwind-info --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code $NO_DT_RELR_LDFLAGS
#objdump: -dw -Wf
.*: +file format .*
Contents of the .eh_frame section:
+
0+ 0000000000000014 00000000 CIE
Version: 1
Augmentation: "zR"
@@ -15,7 +16,6 @@ Contents of the .eh_frame section:
Data alignment factor: -8
Return address column: 16
Augmentation data: 1b
-
DW_CFA_def_cfa: r7 \(rsp\) ofs 8
DW_CFA_offset: r16 \(rip\) at cfa-8
DW_CFA_nop
@@ -59,8 +59,8 @@ Contents of the .eh_frame section:
Disassembly of section .plt:
0+1f0 <.plt>:
- +[a-f0-9]+: ff 35 ea 0d 20 00 push 0x200dea\(%rip\) # 200fe0 <_GLOBAL_OFFSET_TABLE_\+0x8>
- +[a-f0-9]+: f2 ff 25 eb 0d 20 00 bnd jmp \*0x200deb\(%rip\) # 200fe8 <_GLOBAL_OFFSET_TABLE_\+0x10>
+ +[a-f0-9]+: ff 35 ea fd 3f 00 push 0x3ffdea\(%rip\) # 3fffe0 <_GLOBAL_OFFSET_TABLE_\+0x8>
+ +[a-f0-9]+: f2 ff 25 eb fd 3f 00 bnd jmp \*0x3ffdeb\(%rip\) # 3fffe8 <_GLOBAL_OFFSET_TABLE_\+0x10>
+[a-f0-9]+: 0f 1f 00 nopl \(%rax\)
+[a-f0-9]+: 68 00 00 00 00 push \$0x0
+[a-f0-9]+: f2 e9 e5 ff ff ff bnd jmp 1f0 <func1@plt-0x20>
@@ -69,13 +69,13 @@ Disassembly of section .plt:
Disassembly of section .plt.got:
0+210 <func1@plt>:
- +[a-f0-9]+: f2 ff 25 e1 0d 20 00 bnd jmp \*0x200de1\(%rip\) # 200ff8 <func1>
+ +[a-f0-9]+: f2 ff 25 e1 fd 3f 00 bnd jmp \*0x3ffde1\(%rip\) # 3ffff8 <func1>
+[a-f0-9]+: 90 nop
Disassembly of section .plt.sec:
0+218 <func2@plt>:
- +[a-f0-9]+: f2 ff 25 d1 0d 20 00 bnd jmp \*0x200dd1\(%rip\) # 200ff0 <func2>
+ +[a-f0-9]+: f2 ff 25 d1 fd 3f 00 bnd jmp \*0x3ffdd1\(%rip\) # 3ffff0 <func2>
+[a-f0-9]+: 90 nop
Disassembly of section .text:
@@ -83,5 +83,5 @@ Disassembly of section .text:
0+220 <foo>:
+[a-f0-9]+: e8 eb ff ff ff call 210 <func1@plt>
+[a-f0-9]+: e8 ee ff ff ff call 218 <func2@plt>
- +[a-f0-9]+: 48 8b 05 c7 0d 20 00 mov 0x200dc7\(%rip\),%rax # 200ff8 <func1>
+ +[a-f0-9]+: 48 8b 05 c7 fd 3f 00 mov 0x3ffdc7\(%rip\),%rax # 3ffff8 <func1>
#pass
diff --git a/ld/testsuite/ld-x86-64/pr21038c.d b/ld/testsuite/ld-x86-64/pr21038c.d
index a62d43a7bc0..6784d336a53 100644
--- a/ld/testsuite/ld-x86-64/pr21038c.d
+++ b/ld/testsuite/ld-x86-64/pr21038c.d
@@ -1,12 +1,13 @@
#name: PR ld/21038 (.plt.got and .plt.sec)
#as: --64
-#ld: -z bndplt -melf_x86_64 -shared -z relro --ld-generated-unwind-info --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code
+#ld: -z bndplt -melf_x86_64 -shared -z relro --ld-generated-unwind-info --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code $NO_DT_RELR_LDFLAGS
#objdump: -dw -Wf
.*: +file format .*
Contents of the .eh_frame section:
+
0+ 0000000000000014 00000000 CIE
Version: 1
Augmentation: "zR"
@@ -14,7 +15,6 @@ Contents of the .eh_frame section:
Data alignment factor: -8
Return address column: 16
Augmentation data: 1b
-
DW_CFA_def_cfa: r7 \(rsp\) ofs 8
DW_CFA_offset: r16 \(rip\) at cfa-8
DW_CFA_nop
@@ -58,8 +58,8 @@ Contents of the .eh_frame section:
Disassembly of section .plt:
0+1f0 <.plt>:
- +[a-f0-9]+: ff 35 12 0e 20 00 push 0x200e12\(%rip\) # 201008 <_GLOBAL_OFFSET_TABLE_\+0x8>
- +[a-f0-9]+: f2 ff 25 13 0e 20 00 bnd jmp \*0x200e13\(%rip\) # 201010 <_GLOBAL_OFFSET_TABLE_\+0x10>
+ +[a-f0-9]+: ff 35 12 fe 3f 00 push 0x3ffe12\(%rip\) # 400008 <_GLOBAL_OFFSET_TABLE_\+0x8>
+ +[a-f0-9]+: f2 ff 25 13 fe 3f 00 bnd jmp \*0x3ffe13\(%rip\) # 400010 <_GLOBAL_OFFSET_TABLE_\+0x10>
+[a-f0-9]+: 0f 1f 00 nopl \(%rax\)
+[a-f0-9]+: 68 00 00 00 00 push \$0x0
+[a-f0-9]+: f2 e9 e5 ff ff ff bnd jmp 1f0 <func1@plt-0x20>
@@ -68,13 +68,13 @@ Disassembly of section .plt:
Disassembly of section .plt.got:
0+210 <func1@plt>:
- +[a-f0-9]+: f2 ff 25 e1 0d 20 00 bnd jmp \*0x200de1\(%rip\) # 200ff8 <func1>
+ +[a-f0-9]+: f2 ff 25 e1 fd 3f 00 bnd jmp \*0x3ffde1\(%rip\) # 3ffff8 <func1>
+[a-f0-9]+: 90 nop
Disassembly of section .plt.sec:
0+218 <func2@plt>:
- +[a-f0-9]+: f2 ff 25 f9 0d 20 00 bnd jmp \*0x200df9\(%rip\) # 201018 <func2>
+ +[a-f0-9]+: f2 ff 25 f9 fd 3f 00 bnd jmp \*0x3ffdf9\(%rip\) # 400018 <func2>
+[a-f0-9]+: 90 nop
Disassembly of section .text:
@@ -82,5 +82,5 @@ Disassembly of section .text:
0+220 <foo>:
+[a-f0-9]+: e8 eb ff ff ff call 210 <func1@plt>
+[a-f0-9]+: e8 ee ff ff ff call 218 <func2@plt>
- +[a-f0-9]+: 48 8b 05 c7 0d 20 00 mov 0x200dc7\(%rip\),%rax # 200ff8 <func1>
+ +[a-f0-9]+: 48 8b 05 c7 fd 3f 00 mov 0x3ffdc7\(%rip\),%rax # 3ffff8 <func1>
#pass
diff --git a/ld/testsuite/ld-x86-64/pr21997-1a.err b/ld/testsuite/ld-x86-64/pr21997-1a.err
index e57ebd1f461..e46f1cebeb9 100644
--- a/ld/testsuite/ld-x86-64/pr21997-1a.err
+++ b/ld/testsuite/ld-x86-64/pr21997-1a.err
@@ -1,2 +1,2 @@
-.*relocation R_X86_64_PC32 against protected symbol `protected' can not be used when making a P(D|I)E object; recompile with -fPIE
+.*: tmpdir/pr21997-1b.o: copy relocation against non-copyable protected symbol `protected' in tmpdir/pr21997-1.so
#...
diff --git a/ld/testsuite/ld-x86-64/pr21997-1b.err b/ld/testsuite/ld-x86-64/pr21997-1b.err
index a99fc1d5149..af028b7d5e9 100644
--- a/ld/testsuite/ld-x86-64/pr21997-1b.err
+++ b/ld/testsuite/ld-x86-64/pr21997-1b.err
@@ -1,2 +1,2 @@
-.*relocation R_X86_64_32S against protected symbol `protected' can not be used when making a P(D|I)E object; recompile with -fPIE
+.*: tmpdir/pr21997-1c.o: copy relocation against non-copyable protected symbol `protected' in tmpdir/pr21997-1.so
#...
diff --git a/ld/testsuite/ld-x86-64/pr22791-1b.s b/ld/testsuite/ld-x86-64/pr22791-1b.s
index 9751db49aa5..4bd75570253 100644
--- a/ld/testsuite/ld-x86-64/pr22791-1b.s
+++ b/ld/testsuite/ld-x86-64/pr22791-1b.s
@@ -4,3 +4,4 @@
main:
movl foo(%rip), %eax
.size main, .-main
+ .section .note.GNU-stack
diff --git a/ld/testsuite/ld-x86-64/pr26711.s b/ld/testsuite/ld-x86-64/pr26711.s
index 8fa185d42a7..9bbcdc5f867 100644
--- a/ld/testsuite/ld-x86-64/pr26711.s
+++ b/ld/testsuite/ld-x86-64/pr26711.s
@@ -31,3 +31,4 @@
.type foo, @function
foo:
ret
+ .section .note.GNU-stack
diff --git a/ld/testsuite/ld-x86-64/pr28875-data.err b/ld/testsuite/ld-x86-64/pr28875-data.err
new file mode 100644
index 00000000000..62dd5b04223
--- /dev/null
+++ b/ld/testsuite/ld-x86-64/pr28875-data.err
@@ -0,0 +1,2 @@
+.*: tmpdir/protected-data-1b.o: copy relocation against non-copyable protected symbol `protected_data_1a' in tmpdir/libprotected-data-1b.so
+#...
diff --git a/ld/testsuite/ld-x86-64/pr28875-func.err b/ld/testsuite/ld-x86-64/pr28875-func.err
new file mode 100644
index 00000000000..64e961cb3d4
--- /dev/null
+++ b/ld/testsuite/ld-x86-64/pr28875-func.err
@@ -0,0 +1,2 @@
+.*: tmpdir/protected-func-1b.o: non-canonical reference to canonical protected function `protected_func_1a' in tmpdir/libprotected-func-2b.so
+#...
diff --git a/ld/testsuite/ld-x86-64/property-6c.S b/ld/testsuite/ld-x86-64/property-6c.S
index 41246d305e2..ab453188686 100644
--- a/ld/testsuite/ld-x86-64/property-6c.S
+++ b/ld/testsuite/ld-x86-64/property-6c.S
@@ -21,3 +21,4 @@
5:
.p2align ALIGN
3:
+ .section .note.GNU-stack
diff --git a/ld/testsuite/ld-x86-64/property-no-copy.S b/ld/testsuite/ld-x86-64/property-no-copy.S
index 88cc2520211..c95054c3f76 100644
--- a/ld/testsuite/ld-x86-64/property-no-copy.S
+++ b/ld/testsuite/ld-x86-64/property-no-copy.S
@@ -18,3 +18,4 @@
.long 0 /* pr_datasz. */
.p2align ALIGN
3:
+ .section .note.GNU-stack
diff --git a/ld/testsuite/ld-x86-64/property-stack.S b/ld/testsuite/ld-x86-64/property-stack.S
index 7f45654dc25..ede808a7de0 100644
--- a/ld/testsuite/ld-x86-64/property-stack.S
+++ b/ld/testsuite/ld-x86-64/property-stack.S
@@ -21,3 +21,4 @@
5:
.p2align ALIGN
3:
+ .section .note.GNU-stack
diff --git a/ld/testsuite/ld-x86-64/property-unsorted-1.S b/ld/testsuite/ld-x86-64/property-unsorted-1.S
index de96e7a4e80..482b85e7017 100644
--- a/ld/testsuite/ld-x86-64/property-unsorted-1.S
+++ b/ld/testsuite/ld-x86-64/property-unsorted-1.S
@@ -37,3 +37,4 @@
5:
.p2align ALIGN
3:
+ .section .note.GNU-stack
diff --git a/ld/testsuite/ld-x86-64/property-unsorted-2.S b/ld/testsuite/ld-x86-64/property-unsorted-2.S
index 65d7fad3fe9..1be6703083f 100644
--- a/ld/testsuite/ld-x86-64/property-unsorted-2.S
+++ b/ld/testsuite/ld-x86-64/property-unsorted-2.S
@@ -25,3 +25,4 @@
5:
.p2align ALIGN
3:
+ .section .note.GNU-stack
diff --git a/ld/testsuite/ld-x86-64/property-x86-1.S b/ld/testsuite/ld-x86-64/property-x86-1.S
index b669e728a51..6d1d8fbaef5 100644
--- a/ld/testsuite/ld-x86-64/property-x86-1.S
+++ b/ld/testsuite/ld-x86-64/property-x86-1.S
@@ -35,3 +35,4 @@
5:
.p2align ALIGN
3:
+ .section .note.GNU-stack
diff --git a/ld/testsuite/ld-x86-64/property-x86-2.S b/ld/testsuite/ld-x86-64/property-x86-2.S
index b108b1704de..613d5b21ce7 100644
--- a/ld/testsuite/ld-x86-64/property-x86-2.S
+++ b/ld/testsuite/ld-x86-64/property-x86-2.S
@@ -28,3 +28,4 @@
5:
.p2align ALIGN
3:
+ .section .note.GNU-stack
diff --git a/ld/testsuite/ld-x86-64/protected-func-3.c b/ld/testsuite/ld-x86-64/protected-func-3.c
new file mode 100644
index 00000000000..bbf433b2462
--- /dev/null
+++ b/ld/testsuite/ld-x86-64/protected-func-3.c
@@ -0,0 +1,41 @@
+#include <stdio.h>
+
+#include "protected-func-1.h"
+
+protected_func_type protected_func_1a_ptr = protected_func_1a;
+protected_func_type protected_func_1b_ptr = protected_func_1b;
+
+int
+protected_func_1b (void)
+{
+ return 3;
+}
+
+int
+main (void)
+{
+ int res = 0;
+
+ protected_func_1a ();
+ protected_func_1b ();
+
+ /* Check if we get the same address for the protected function symbol. */
+ if (protected_func_1a_ptr != protected_func_1a_p ())
+ {
+ puts ("'protected_func_1a' in main and shared library doesn't have same address");
+ res = 1;
+ }
+
+ /* Check if we get the different addresses for the protected function
+ symbol. */
+ if (protected_func_1b_ptr == protected_func_1b_p ())
+ {
+ puts ("'protected_func_1b' in main and shared library has same address");
+ res = 1;
+ }
+
+ if (!res)
+ puts ("PASS");
+
+ return res;
+}
diff --git a/ld/testsuite/ld-x86-64/protected2-k1om.d b/ld/testsuite/ld-x86-64/protected2-k1om.d
deleted file mode 100644
index cda2c95a03b..00000000000
--- a/ld/testsuite/ld-x86-64/protected2-k1om.d
+++ /dev/null
@@ -1,18 +0,0 @@
-#source: protected2.s
-#as: --64 -march=k1om
-#ld: -shared -melf_k1om
-#objdump: -drw
-#target: x86_64-*-linux*
-
-.*: +file format .*
-
-
-Disassembly of section .text:
-
-0+[a-f0-9]+ <foo>:
-[ ]*[a-f0-9]+: c3 ret *
-
-0+[a-f0-9]+ <bar>:
-[ ]*[a-f0-9]+: e8 fa ff ff ff call [a-f0-9]+ <foo>
-[ ]*[a-f0-9]+: c3 ret *
-#pass
diff --git a/ld/testsuite/ld-x86-64/protected2-l1om.d b/ld/testsuite/ld-x86-64/protected2-l1om.d
deleted file mode 100644
index ffacee17d44..00000000000
--- a/ld/testsuite/ld-x86-64/protected2-l1om.d
+++ /dev/null
@@ -1,18 +0,0 @@
-#source: protected2.s
-#as: --64 -march=l1om
-#ld: -shared -melf_l1om
-#objdump: -drw --insn-width=7
-#target: x86_64-*-linux*
-
-.*: +file format .*
-
-
-Disassembly of section .text:
-
-0+[a-f0-9]+ <foo>:
-[ ]*[a-f0-9]+: c3 ret *
-
-0+[a-f0-9]+ <bar>:
-[ ]*[a-f0-9]+: e8 fa ff ff ff call [a-f0-9]+ <foo>
-[ ]*[a-f0-9]+: c3 ret *
-#pass
diff --git a/ld/testsuite/ld-x86-64/protected3-k1om.d b/ld/testsuite/ld-x86-64/protected3-k1om.d
deleted file mode 100644
index 68db8c57182..00000000000
--- a/ld/testsuite/ld-x86-64/protected3-k1om.d
+++ /dev/null
@@ -1,17 +0,0 @@
-#source: protected3.s
-#as: --64 -march=k1om
-#ld: -shared -melf_k1om
-#readelf: -h
-#target: x86_64-*-linux*
-
-ELF Header:
- Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
- Class: ELF64
- Data: 2's complement, little endian
- Version: 1 \(current\)
- OS/ABI: UNIX - System V
- ABI Version: 0
- Type: DYN \(Shared object file\)
- Machine: Intel K1OM
- Version: 0x1
-#pass
diff --git a/ld/testsuite/ld-x86-64/protected3-l1om.d b/ld/testsuite/ld-x86-64/protected3-l1om.d
deleted file mode 100644
index 9ecc89c7329..00000000000
--- a/ld/testsuite/ld-x86-64/protected3-l1om.d
+++ /dev/null
@@ -1,17 +0,0 @@
-#source: protected3.s
-#as: --64 -march=l1om
-#ld: -shared -melf_l1om
-#readelf: -h
-#target: x86_64-*-linux*
-
-ELF Header:
- Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
- Class: ELF64
- Data: 2's complement, little endian
- Version: 1 \(current\)
- OS/ABI: UNIX - System V
- ABI Version: 0
- Type: DYN \(Shared object file\)
- Machine: Intel L1OM
- Version: 0x1
-#pass
diff --git a/ld/testsuite/ld-x86-64/report-reloc-1-x32.d b/ld/testsuite/ld-x86-64/report-reloc-1-x32.d
index c66f956c473..63fe7b1bb8a 100644
--- a/ld/testsuite/ld-x86-64/report-reloc-1-x32.d
+++ b/ld/testsuite/ld-x86-64/report-reloc-1-x32.d
@@ -1,6 +1,6 @@
#source: report-reloc-1.s
#as: --x32
-#ld: -pie -melf32_x86_64 -z report-relative-reloc
+#ld: -pie -melf32_x86_64 -z report-relative-reloc $NO_DT_RELR_LDFLAGS
#warning_output: report-reloc-1.l
#readelf: -r --wide
diff --git a/ld/testsuite/ld-x86-64/report-reloc-1.d b/ld/testsuite/ld-x86-64/report-reloc-1.d
index 1b5f91fdd3f..69f164c9434 100644
--- a/ld/testsuite/ld-x86-64/report-reloc-1.d
+++ b/ld/testsuite/ld-x86-64/report-reloc-1.d
@@ -1,6 +1,6 @@
#source: report-reloc-1.s
#as: --64
-#ld: -pie -melf_x86_64 -z report-relative-reloc
+#ld: -pie -melf_x86_64 -z report-relative-reloc $NO_DT_RELR_LDFLAGS
#warning_output: report-reloc-1.l
#readelf: -r --wide
diff --git a/ld/testsuite/ld-x86-64/start.s b/ld/testsuite/ld-x86-64/start.s
index 80301c6a7e4..4262a3380fa 100644
--- a/ld/testsuite/ld-x86-64/start.s
+++ b/ld/testsuite/ld-x86-64/start.s
@@ -1,3 +1,4 @@
.globl _start
_start:
jmp foo
+ .section .note.GNU-stack
diff --git a/ld/testsuite/ld-x86-64/x86-64.exp b/ld/testsuite/ld-x86-64/x86-64.exp
index c100879397e..5e5636bcebe 100644
--- a/ld/testsuite/ld-x86-64/x86-64.exp
+++ b/ld/testsuite/ld-x86-64/x86-64.exp
@@ -45,28 +45,6 @@ set x86_64tests {
{"basic PLT generation"
"-melf_x86_64 tmpdir/libpltlib.so" "" "--64" {plt.s}
{{objdump -drj.plt plt.pd}} "plt"}
- {"TLS -fpic -shared transitions"
- "-shared -melf_x86_64 --no-ld-generated-unwind-info \
- -z noseparate-code -z max-page-size=0x200000 --hash-style=sysv" ""
- "--64" {tlspic1.s tlspic2.s}
- {{readelf -WSsrl tlspic.rd} {objdump -drj.text\ -Mintel64 tlspic.dd}
- {objdump -sj.got tlspic.sd} {objdump -sj.tdata tlspic.td}}
- "libtlspic.so"}
- {"TLS -fpic -shared transitions with r15 as GOT base"
- "-shared -melf_x86_64 --no-ld-generated-unwind-info \
- -z noseparate-code -z max-page-size=0x200000 --hash-style=sysv" ""
- "--64 -mrelax-relocations=yes"
- {tlspic3.s tlspic2.s}
- {{readelf -WSsrl tlspic2.rd} {objdump -drj.text\ -Mintel64 tlspic2.dd}
- {objdump -sj.got tlspic2.sd} {objdump -sj.tdata tlspic2.td}}
- "libtlspic2.so"}
- {"TLS descriptor -fpic -shared transitions"
- "-shared -melf_x86_64 --no-ld-generated-unwind-info \
- -z noseparate-code -z max-page-size=0x200000 --hash-style=sysv" ""
- "--64" {tlsdesc.s tlspic2.s}
- {{readelf -WSsrld tlsdesc.rd} {objdump -drj.text tlsdesc.dd}
- {objdump "-s -j.got -j.got.plt" tlsdesc.sd} {objdump -sj.tdata tlsdesc.td}
- {objdump -drj.plt tlsdesc.pd}} "libtlsdesc.so"}
{"Helper shared library" "-shared -melf_x86_64" ""
"--64" {tlslib.s} {} "libtlslib.so"}
{"TLS -fpic and -fno-pic exec transitions"
@@ -240,6 +218,49 @@ set x86_64tests {
run_ld_link_tests $x86_64tests
+run_ld_link_tests [list \
+ [list \
+ "TLS -fpic -shared transitions" \
+ "-shared -melf_x86_64 --no-ld-generated-unwind-info \
+ -z noseparate-code -z max-page-size=0x200000 --hash-style=sysv \
+ $NO_DT_RELR_LDFLAGS" \
+ "" "--64" \
+ {tlspic1.s tlspic2.s} \
+ {{readelf -WSsrl tlspic.rd} \
+ {objdump {-drj.text -Mintel64} tlspic.dd} \
+ {objdump -sj.got tlspic.sd} \
+ {objdump -sj.tdata tlspic.td}} \
+ "libtlspic.so" \
+ ] \
+ [list \
+ "TLS -fpic -shared transitions with r15 as GOT base" \
+ "-shared -melf_x86_64 --no-ld-generated-unwind-info \
+ -z noseparate-code -z max-page-size=0x200000 --hash-style=sysv \
+ $NO_DT_RELR_LDFLAGS" \
+ "" "--64 -mrelax-relocations=yes" \
+ {tlspic3.s tlspic2.s} \
+ {{readelf -WSsrl tlspic2.rd} \
+ {objdump {-drj.text -Mintel64} tlspic2.dd} \
+ {objdump -sj.got tlspic2.sd} \
+ {objdump -sj.tdata tlspic2.td}} \
+ "libtlspic2.so" \
+ ] \
+ [list \
+ "TLS descriptor -fpic -shared transitions" \
+ "-shared -melf_x86_64 --no-ld-generated-unwind-info \
+ -z noseparate-code -z max-page-size=0x200000 --hash-style=sysv \
+ $NO_DT_RELR_LDFLAGS" \
+ "" "--64" \
+ {tlsdesc.s tlspic2.s} \
+ {{readelf -WSsrld tlsdesc.rd} \
+ {objdump -drj.text tlsdesc.dd} \
+ {objdump {-s -j.got -j.got.plt} tlsdesc.sd} \
+ {objdump -sj.tdata tlsdesc.td} \
+ {objdump -drj.plt tlsdesc.pd}} \
+ "libtlsdesc.so" \
+ ] \
+]
+
set test_name "Mixed x86_64 and i386 input test 1"
set test mixed1
if { ![ld_link $ld tmpdir/$test "-m$emul tmpdir/${test}a.o tmpdir/${test}b.o"] } {
@@ -261,8 +282,6 @@ if { ![ld_link $ld tmpdir/$test "-m$emul tmpdir/${test}a.o tmpdir/${test}b.o"] }
}
run_dump_test "abs"
-run_dump_test "abs-k1om"
-run_dump_test "abs-l1om"
run_dump_test "apic"
run_dump_test "pcrel8"
run_dump_test "pcrel16"
@@ -281,11 +300,7 @@ run_dump_test "hidden4"
run_dump_test "hidden5"
run_dump_test "protected1"
run_dump_test "protected2"
-run_dump_test "protected2-k1om"
-run_dump_test "protected2-l1om"
run_dump_test "protected3"
-run_dump_test "protected3-k1om"
-run_dump_test "protected3-l1om"
run_dump_test "protected4"
run_dump_test "protected5"
run_dump_test "protected6a"
@@ -486,6 +501,10 @@ run_dump_test "pr27491-1c"
run_dump_test "pr27491-2"
run_dump_test "pr27491-3"
run_dump_test "pr27491-4"
+run_dump_test "dt-relr-1a"
+run_dump_test "dt-relr-1a-x32"
+run_dump_test "dt-relr-1b"
+run_dump_test "dt-relr-1b-x32"
if ![istarget "x86_64-*-linux*"] {
return
@@ -1357,6 +1376,14 @@ if { [isnative] && [check_compiler_available] } {
"libprotected-func-2b.so" \
] \
[list \
+ "Build protected-func-2 without PIE" \
+ "$NOPIE_LDFLAGS -Wl,--no-as-needed tmpdir/libprotected-func-2b.so" \
+ "$NOPIE_CFLAGS -Wa,-mx86-used-note=yes" \
+ { protected-func-1b.c } \
+ {{error_output "pr28875-func.err"}} \
+ "protected-func-2" \
+ ] \
+ [list \
"Build libprotected-data-1a.so" \
"-shared -z noindirect-extern-access" \
"-fPIC -Wa,-mx86-used-note=yes" \
@@ -1377,7 +1404,7 @@ if { [isnative] && [check_compiler_available] } {
"$NOPIE_LDFLAGS -Wl,--no-as-needed tmpdir/libprotected-data-1b.so" \
"$NOPIE_CFLAGS -Wa,-mx86-used-note=yes" \
{ protected-data-1b.c } \
- {} \
+ {{error_output "pr28875-data.err"}} \
"protected-data-1" \
] \
[list \
@@ -1443,6 +1470,14 @@ if { [isnative] && [check_compiler_available] } {
"-Wa,-mx86-used-note=yes" \
{ pr25416-5d.s } \
] \
+ [list \
+ "Build pr21997-1b" \
+ "$NOPIE_LDFLAGS -Wl,--no-as-needed,-z,notext tmpdir/pr21997-1.so" \
+ "$NOPIE_CFLAGS -Wa,-mx86-used-note=yes" \
+ { pr21997-1c.c } \
+ {{error_output "pr21997-1b.err"}} \
+ "pr21997-1b" \
+ ] \
]
run_ld_link_exec_tests [list \
@@ -1456,15 +1491,6 @@ if { [isnative] && [check_compiler_available] } {
"$NOPIE_CFLAGS" \
] \
[list \
- "Run pr21997-1b" \
- "$NOPIE_LDFLAGS -Wl,--no-as-needed,-z,notext tmpdir/pr21997-1.so" \
- "-Wa,-mx86-used-note=yes" \
- { pr21997-1c.c } \
- "pr21997-1b" \
- "pass.out" \
- "$NOPIE_CFLAGS" \
- ] \
- [list \
"Run pr25416-5a (GDesc -> IE -maddress-mode=short)" \
"$NOPIE_LDFLAGS -Wl,--no-as-needed tmpdir/pr25416-5b.so" \
"-Wa,-mx86-used-note=yes" \
@@ -1861,6 +1887,24 @@ if { [isnative] && [check_compiler_available] } {
"-fPIE" \
] \
[list \
+ "Run protected-func-3a without PIE" \
+ "$NOPIE_LDFLAGS -Wl,--no-as-needed tmpdir/libprotected-func-2a.so" \
+ "-Wa,-mx86-used-note=yes" \
+ { protected-func-3.c } \
+ "protected-func-3a" \
+ "pass.out" \
+ "$NOPIE_CFLAGS" \
+ ] \
+ [list \
+ "Run protected-func-3b with PIE" \
+ "-Wl,--no-as-needed -pie tmpdir/libprotected-func-2a.so" \
+ "-Wa,-mx86-used-note=yes" \
+ { protected-func-3.c } \
+ "protected-func-2b" \
+ "pass.out" \
+ "-fPIE" \
+ ] \
+ [list \
"Run protected-data-1a without PIE" \
"$NOPIE_LDFLAGS -Wl,--no-as-needed tmpdir/libprotected-data-1a.so" \
"-Wa,-mx86-used-note=yes" \
@@ -2288,8 +2332,8 @@ run_ld_link_tests [list \
] \
]
-# Linux only tests
-if { "$LD_CLASS" == "64bit" } then {
+# Linux only tests. Disabled due to large memory requirement.
+if { "x$LD_CLASS" == "64bit" } then {
# This test needs 64-bit linker.
run_dump_test "pr17618"
}
diff --git a/ld/testsuite/lib/ld-lib.exp b/ld/testsuite/lib/ld-lib.exp
index 5c7771f7221..ec27388a72e 100644
--- a/ld/testsuite/lib/ld-lib.exp
+++ b/ld/testsuite/lib/ld-lib.exp
@@ -1628,24 +1628,36 @@ proc compile_one_cc { src output additional_flags } {
return [run_host_cmd_yesno "$CC_FOR_TARGET" "$flags $CFLAGS_FOR_TARGET $additional_flags $src -o $output"]
}
-# Returns true if the target compiler supports -gctf
+# Returns true if the target compiler supports -gctf.
proc check_ctf_available { } {
global ctf_available_saved
if {![info exists ctf_available_saved]} {
- if { ![check_compiler_available] } {
- set ctf_available_saved 0
- } else {
+ set ctf_available_saved 0
+
+ # Don't check for compiler availability, because that FNs if the
+ # compiler is available but emits warnings. An unavailable
+ # compiler will fail this test anyway.
+
+ if ([check_compiler_available]) {
set basename "tmpdir/ctf_available[pid]"
set src ${basename}.c
- set output ${basename}.o
+ set output ${basename}.s
set f [open $src "w"]
puts $f "int main() { return 0; }"
close $f
- set ctf_available_saved [compile_one_cc $src $output "-gctf -c"]
+ compile_one_cc $src $output "-gctf -S -c"
remote_file host delete $src
+ if {! [remote_file host exists $output] } {
+ file delete $src
+ return 0
+ }
+ set status [remote_exec host fgrep ".ctf $output"]
remote_file host delete $output
file delete $src
+ if { [lindex $status 0] == 0 } {
+ set ctf_available_saved 1
+ }
}
}
return $ctf_available_saved
diff --git a/libbacktrace/configure b/libbacktrace/configure
index a2f33c0f35d..406b67b8cbc 100755
--- a/libbacktrace/configure
+++ b/libbacktrace/configure
@@ -5818,48 +5818,55 @@ if ${lt_cv_path_NM+:} false; then :
$as_echo_n "(cached) " >&6
else
if test -n "$NM"; then
- # Let the user override the test.
- lt_cv_path_NM="$NM"
-else
- lt_nm_to_check="${ac_tool_prefix}nm"
- if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
- lt_nm_to_check="$lt_nm_to_check nm"
- fi
- for lt_tmp_nm in $lt_nm_to_check; do
- lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
- for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
- IFS="$lt_save_ifs"
- test -z "$ac_dir" && ac_dir=.
- tmp_nm="$ac_dir/$lt_tmp_nm"
- if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
- # Check to see if the nm accepts a BSD-compat flag.
- # Adding the `sed 1q' prevents false positives on HP-UX, which says:
- # nm: unknown option "B" ignored
- # Tru64's nm complains that /dev/null is an invalid object file
- case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
- */dev/null* | *'Invalid file or object type'*)
- lt_cv_path_NM="$tmp_nm -B"
- break
- ;;
- *)
- case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
- */dev/null*)
- lt_cv_path_NM="$tmp_nm -p"
- break
- ;;
- *)
- lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
- continue # so that we can try to find one that supports BSD flags
- ;;
- esac
- ;;
- esac
- fi
- done
- IFS="$lt_save_ifs"
- done
- : ${lt_cv_path_NM=no}
-fi
+ # Let the user override the nm to test.
+ lt_nm_to_check="$NM"
+ else
+ lt_nm_to_check="${ac_tool_prefix}nm"
+ if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+ lt_nm_to_check="$lt_nm_to_check nm"
+ fi
+ fi
+ for lt_tmp_nm in "$lt_nm_to_check"; do
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ # Strip out any user-provided options from the nm to test twice,
+ # the first time to test to see if nm (rather than its options) has
+ # an explicit path, the second time to yield a file which can be
+ # nm'ed itself.
+ tmp_nm_path="`$ECHO "$lt_tmp_nm" | sed 's, -.*$,,'`"
+ case "$tmp_nm_path" in
+ */*|*\\*) tmp_nm="$lt_tmp_nm";;
+ *) tmp_nm="$ac_dir/$lt_tmp_nm";;
+ esac
+ tmp_nm_to_nm="`$ECHO "$tmp_nm" | sed 's, -.*$,,'`"
+ if test -f "$tmp_nm_to_nm" || test -f "$tmp_nm_to_nm$ac_exeext" ; then
+ # Check to see if the nm accepts a BSD-compat flag.
+ # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+ # nm: unknown option "B" ignored
+ case `"$tmp_nm" -B "$tmp_nm_to_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
+ *$tmp_nm*) lt_cv_path_NM="$tmp_nm -B"
+ break
+ ;;
+ *)
+ case `"$tmp_nm" -p "$tmp_nm_to_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
+ *$tmp_nm*)
+ lt_cv_path_NM="$tmp_nm -p"
+ break
+ ;;
+ *)
+ lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+ continue # so that we can try to find one that supports BSD flags
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ done
+ IFS="$lt_save_ifs"
+ done
+ : ${lt_cv_path_NM=no}
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5
$as_echo "$lt_cv_path_NM" >&6; }
@@ -6480,7 +6487,7 @@ irix5* | irix6* | nonstopux*)
;;
# This must be Linux ELF.
-linux* | k*bsd*-gnu | kopensolaris*-gnu | uclinuxfdpiceabi)
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
lt_cv_deplibs_check_method=pass_all
;;
@@ -6576,6 +6583,19 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown
+plugin_option=
+plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
+for plugin in $plugin_names; do
+ plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin`
+ if test x$plugin_so = x$plugin; then
+ plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin`
+ fi
+ if test x$plugin_so != x$plugin; then
+ plugin_option="--plugin $plugin_so"
+ break
+ fi
+done
+
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
set dummy ${ac_tool_prefix}ar; ac_word=$2
@@ -6669,6 +6689,19 @@ else
fi
test -z "$AR" && AR=ar
+if test -n "$plugin_option"; then
+ if $AR --help 2>&1 | grep -q "\--plugin"; then
+ touch conftest.c
+ $AR $plugin_option rc conftest.a conftest.c
+ if test "$?" != 0; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
+$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
+ else
+ AR="$AR $plugin_option"
+ fi
+ rm -f conftest.*
+ fi
+fi
test -z "$AR_FLAGS" && AR_FLAGS=cru
@@ -6873,6 +6906,11 @@ else
fi
test -z "$RANLIB" && RANLIB=:
+if test -n "$plugin_option" && test "$RANLIB" != ":"; then
+ if $RANLIB --help 2>&1 | grep -q "\--plugin"; then
+ RANLIB="$RANLIB $plugin_option"
+ fi
+fi
@@ -6987,7 +7025,7 @@ osf*)
symcode='[BCDEGQRST]'
;;
solaris*)
- symcode='[BDRT]'
+ symcode='[BCDRT]'
;;
sco3.2v5*)
symcode='[DT]'
@@ -7986,25 +8024,23 @@ _LT_EOF
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5
$as_echo "$lt_cv_ld_force_load" >&6; }
- # Allow for Darwin 4-7 (macOS 10.0-10.3) although these are not expect to
- # build without first building modern cctools / linker.
- case $host_cpu-$host_os in
- *-rhapsody* | *-darwin1.[012])
+ case $host_os in
+ rhapsody* | darwin1.[012])
_lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
- *-darwin1.*)
+ darwin1.*)
_lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
- *-darwin*)
- # darwin 5.x (macOS 10.1) onwards we only need to adjust when the
- # deployment target is forced to an earlier version.
- case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host in
- UNSET,*-darwin[89]*|UNSET,*-darwin[12][0123456789]*)
- ;;
+ darwin*) # darwin 5.x on
+ # if running on 10.5 or later, the deployment target defaults
+ # to the OS version, if on x86, and 10.4, the deployment
+ # target defaults to 10.4. Don't you love it?
+ case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+ 10.0,*86*-darwin8*|10.0,*-darwin[91]*)
+ _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
10.[012][,.]*)
- _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
- ;;
- *)
- ;;
- esac
+ _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+ 10.*)
+ _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+ esac
;;
esac
if test "$lt_cv_apple_cc_single_mod" = "yes"; then
@@ -9294,7 +9330,7 @@ _LT_EOF
archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
;;
- gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu | uclinuxfdpiceabi)
+ gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
tmp_diet=no
if test "$host_os" = linux-dietlibc; then
case $cc_basename in
@@ -9803,7 +9839,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
if test "$GCC" = yes && test "$with_gnu_ld" = no; then
case $host_cpu in
hppa*64*)
- archive_cmds='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
;;
ia64*)
archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
@@ -9815,7 +9851,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
else
case $host_cpu in
hppa*64*)
- archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
;;
ia64*)
archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
@@ -10708,7 +10744,7 @@ haiku*)
soname_spec='${libname}${release}${shared_ext}$major'
shlibpath_var=LIBRARY_PATH
shlibpath_overrides_runpath=yes
- sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/beos/system/lib'
+ sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
hardcode_into_libs=yes
;;
@@ -10815,12 +10851,7 @@ linux*oldld* | linux*aout* | linux*coff*)
;;
# This must be Linux ELF.
-
-# uclinux* changes (here and below) have been submitted to the libtool
-# project, but have not yet been accepted: they are GCC-local changes
-# for the time being. (See
-# https://lists.gnu.org/archive/html/libtool-patches/2018-05/msg00000.html)
-linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu* | uclinuxfdpiceabi)
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
version_type=linux
need_lib_prefix=no
need_version=no
@@ -11509,7 +11540,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11512 "configure"
+#line 11543 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -11615,7 +11646,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11618 "configure"
+#line 11649 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
diff --git a/libctf/ChangeLog b/libctf/ChangeLog
index 26207a3ac64..9b939bb91df 100644
--- a/libctf/ChangeLog
+++ b/libctf/ChangeLog
@@ -1,3 +1,7 @@
+2022-01-22 Nick Clifton <nickc@redhat.com>
+
+ * 2.38 release branch created.
+
2021-11-08 Nick Alcock <nick.alcock@oracle.com>
* doc/ctf-spec.texi: New file.
diff --git a/libctf/Makefile.in b/libctf/Makefile.in
index 3b5ab73324e..1984f50867a 100644
--- a/libctf/Makefile.in
+++ b/libctf/Makefile.in
@@ -578,7 +578,6 @@ RUNTESTFLAGS =
# development.sh is used to determine -Werror default.
@TCL_TRY_TRUE@CONFIG_STATUS_DEPENDENCIES = $(BFDDIR)/development.sh
@TCL_TRY_TRUE@EXTRA_DEJAGNU_SITE_CONFIG = development.exp
-@BUILD_INFO_TRUE@libctf_TEXINFOS = $(info_TEXINFOS)
@BUILD_INFO_TRUE@AM_MAKEINFOFLAGS = --no-split
all: config.h
$(MAKE) $(AM_MAKEFLAGS) all-am
diff --git a/libctf/NEWS b/libctf/NEWS
index 956cca8473e..f4e59734639 100644
--- a/libctf/NEWS
+++ b/libctf/NEWS
@@ -1,5 +1,14 @@
-*- text -*-
+Changes in 2.39:
+
+* New features
+
+** The CTF variable section (if generated via ld --ctf-variables) now contains
+ entries for static functions, hidden functions, and other functions with
+ no associated symbol. The associated type is of kind CTF_K_FUNCTION.
+ (No change if --ctf-variables is not specified, which is the default.)
+
Changes in 2.37:
* New features
diff --git a/libctf/configure b/libctf/configure
index c56ac218213..8704bc215f4 100755
--- a/libctf/configure
+++ b/libctf/configure
@@ -5951,25 +5951,31 @@ else
lt_nm_to_check="$lt_nm_to_check nm"
fi
fi
- for lt_tmp_nm in $lt_nm_to_check; do
+ for lt_tmp_nm in "$lt_nm_to_check"; do
lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
IFS="$lt_save_ifs"
test -z "$ac_dir" && ac_dir=.
- case "$lt_tmp_nm" in
+ # Strip out any user-provided options from the nm to test twice,
+ # the first time to test to see if nm (rather than its options) has
+ # an explicit path, the second time to yield a file which can be
+ # nm'ed itself.
+ tmp_nm_path="`$ECHO "$lt_tmp_nm" | sed 's, -.*$,,'`"
+ case "$tmp_nm_path" in
*/*|*\\*) tmp_nm="$lt_tmp_nm";;
*) tmp_nm="$ac_dir/$lt_tmp_nm";;
esac
- if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+ tmp_nm_to_nm="`$ECHO "$tmp_nm" | sed 's, -.*$,,'`"
+ if test -f "$tmp_nm_to_nm" || test -f "$tmp_nm_to_nm$ac_exeext" ; then
# Check to see if the nm accepts a BSD-compat flag.
# Adding the `sed 1q' prevents false positives on HP-UX, which says:
# nm: unknown option "B" ignored
- case `"$tmp_nm" -B "$tmp_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
+ case `"$tmp_nm" -B "$tmp_nm_to_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
*$tmp_nm*) lt_cv_path_NM="$tmp_nm -B"
break
;;
*)
- case `"$tmp_nm" -p "$tmp_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
+ case `"$tmp_nm" -p "$tmp_nm_to_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
*$tmp_nm*)
lt_cv_path_NM="$tmp_nm -p"
break
@@ -11629,7 +11635,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11632 "configure"
+#line 11638 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -11735,7 +11741,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11738 "configure"
+#line 11744 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
diff --git a/libctf/ctf-dedup.c b/libctf/ctf-dedup.c
index b2fb0a13441..cddf4376eae 100644
--- a/libctf/ctf-dedup.c
+++ b/libctf/ctf-dedup.c
@@ -1502,12 +1502,17 @@ ctf_dedup_detect_name_ambiguity (ctf_dict_t *fp, ctf_dict_t **inputs)
the most-popular type on insertion, and we want conflicting structs
et al to have all forwards left intact, so the user is notified
that this type is conflicting. TODO: improve this in future by
- setting such forwards non-root-visible.) */
+ setting such forwards non-root-visible.)
+
+ If multiple distinct types are "most common", pick the one that
+ appears first on the link line, and within that, the one with the
+ lowest type ID. (See sort_output_mapping.) */
const void *key;
const void *count;
const char *hval;
long max_hcount = -1;
+ void *max_gid = NULL;
const char *max_hval = NULL;
if (ctf_dynhash_elements (name_counts) <= 1)
@@ -1517,10 +1522,24 @@ ctf_dedup_detect_name_ambiguity (ctf_dict_t *fp, ctf_dict_t **inputs)
while ((err = ctf_dynhash_cnext (name_counts, &j, &key, &count)) == 0)
{
hval = (const char *) key;
+
if ((long int) (uintptr_t) count > max_hcount)
{
max_hcount = (long int) (uintptr_t) count;
max_hval = hval;
+ max_gid = ctf_dynhash_lookup (d->cd_output_first_gid, hval);
+ }
+ else if ((long int) (uintptr_t) count == max_hcount)
+ {
+ void *gid = ctf_dynhash_lookup (d->cd_output_first_gid, hval);
+
+ if (CTF_DEDUP_GID_TO_INPUT(gid) < CTF_DEDUP_GID_TO_INPUT(max_gid)
+ || (CTF_DEDUP_GID_TO_INPUT(gid) == CTF_DEDUP_GID_TO_INPUT(max_gid)
+ && CTF_DEDUP_GID_TO_TYPE(gid) < CTF_DEDUP_GID_TO_TYPE(max_gid)))
+ {
+ max_hval = hval;
+ max_gid = ctf_dynhash_lookup (d->cd_output_first_gid, hval);
+ }
}
}
if (err != ECTF_NEXT_END)
diff --git a/libctf/ctf-impl.h b/libctf/ctf-impl.h
index f749b839ab3..6b6ec16291a 100644
--- a/libctf/ctf-impl.h
+++ b/libctf/ctf-impl.h
@@ -738,6 +738,8 @@ extern void ctf_arc_close_internal (struct ctf_archive *);
extern const ctf_preamble_t *ctf_arc_bufpreamble (const ctf_sect_t *);
extern void *ctf_set_open_errno (int *, int);
extern unsigned long ctf_set_errno (ctf_dict_t *, int);
+extern void ctf_flip_header (ctf_header_t *);
+extern int ctf_flip (ctf_dict_t *, ctf_header_t *, unsigned char *, int);
extern ctf_dict_t *ctf_simple_open_internal (const char *, size_t, const char *,
size_t, size_t,
diff --git a/libctf/ctf-link.c b/libctf/ctf-link.c
index ee836054463..d92a6930dd0 100644
--- a/libctf/ctf-link.c
+++ b/libctf/ctf-link.c
@@ -807,7 +807,12 @@ ctf_link_deduplicating_close_inputs (ctf_dict_t *fp, ctf_dynhash_t *cu_names,
return 0;
}
-/* Do a deduplicating link of all variables in the inputs. */
+/* Do a deduplicating link of all variables in the inputs.
+
+ Also, if we are not omitting the variable section, integrate all symbols from
+ the symtypetabs into the variable section too. (Duplication with the
+ symtypetab section in the output will be eliminated at serialization time.) */
+
static int
ctf_link_deduplicating_variables (ctf_dict_t *fp, ctf_dict_t **inputs,
size_t ninputs, int cu_mapped)
@@ -820,6 +825,8 @@ ctf_link_deduplicating_variables (ctf_dict_t *fp, ctf_dict_t **inputs,
ctf_id_t type;
const char *name;
+ /* First the variables on the inputs. */
+
while ((type = ctf_variable_next (inputs[i], &it, &name)) != CTF_ERR)
{
if (ctf_link_one_variable (fp, inputs[i], name, type, cu_mapped) < 0)
@@ -830,6 +837,34 @@ ctf_link_deduplicating_variables (ctf_dict_t *fp, ctf_dict_t **inputs,
}
if (ctf_errno (inputs[i]) != ECTF_NEXT_END)
return ctf_set_errno (fp, ctf_errno (inputs[i]));
+
+ /* Next the symbols. We integrate data symbols even though the compiler
+ is currently doing the same, to allow the compiler to stop in
+ future. */
+
+ while ((type = ctf_symbol_next (inputs[i], &it, &name, 0)) != CTF_ERR)
+ {
+ if (ctf_link_one_variable (fp, inputs[i], name, type, 1) < 0)
+ {
+ ctf_next_destroy (it);
+ return -1; /* errno is set for us. */
+ }
+ }
+ if (ctf_errno (inputs[i]) != ECTF_NEXT_END)
+ return ctf_set_errno (fp, ctf_errno (inputs[i]));
+
+ /* Finally the function symbols. */
+
+ while ((type = ctf_symbol_next (inputs[i], &it, &name, 1)) != CTF_ERR)
+ {
+ if (ctf_link_one_variable (fp, inputs[i], name, type, 1) < 0)
+ {
+ ctf_next_destroy (it);
+ return -1; /* errno is set for us. */
+ }
+ }
+ if (ctf_errno (inputs[i]) != ECTF_NEXT_END)
+ return ctf_set_errno (fp, ctf_errno (inputs[i]));
}
return 0;
}
diff --git a/libctf/ctf-open.c b/libctf/ctf-open.c
index c7ca37e5249..f0e203e0a16 100644
--- a/libctf/ctf-open.c
+++ b/libctf/ctf-open.c
@@ -965,8 +965,8 @@ init_types (ctf_dict_t *fp, ctf_header_t *cth)
/* Flip the endianness of the CTF header. */
-static void
-flip_header (ctf_header_t *cth)
+void
+ctf_flip_header (ctf_header_t *cth)
{
swap_thing (cth->cth_preamble.ctp_magic);
swap_thing (cth->cth_preamble.ctp_version);
@@ -1031,26 +1031,48 @@ flip_vars (void *start, size_t len)
ctf_stype followed by variable data. */
static int
-flip_types (ctf_dict_t *fp, void *start, size_t len)
+flip_types (ctf_dict_t *fp, void *start, size_t len, int to_foreign)
{
ctf_type_t *t = start;
while ((uintptr_t) t < ((uintptr_t) start) + len)
{
+ uint32_t kind;
+ size_t size;
+ uint32_t vlen;
+ size_t vbytes;
+
+ if (to_foreign)
+ {
+ kind = CTF_V2_INFO_KIND (t->ctt_info);
+ size = t->ctt_size;
+ vlen = CTF_V2_INFO_VLEN (t->ctt_info);
+ vbytes = get_vbytes_v2 (fp, kind, size, vlen);
+ }
+
swap_thing (t->ctt_name);
swap_thing (t->ctt_info);
swap_thing (t->ctt_size);
- uint32_t kind = CTF_V2_INFO_KIND (t->ctt_info);
- size_t size = t->ctt_size;
- uint32_t vlen = CTF_V2_INFO_VLEN (t->ctt_info);
- size_t vbytes = get_vbytes_v2 (fp, kind, size, vlen);
+ if (!to_foreign)
+ {
+ kind = CTF_V2_INFO_KIND (t->ctt_info);
+ size = t->ctt_size;
+ vlen = CTF_V2_INFO_VLEN (t->ctt_info);
+ vbytes = get_vbytes_v2 (fp, kind, size, vlen);
+ }
if (_libctf_unlikely_ (size == CTF_LSIZE_SENT))
{
+ if (to_foreign)
+ size = CTF_TYPE_LSIZE (t);
+
swap_thing (t->ctt_lsizehi);
swap_thing (t->ctt_lsizelo);
- size = CTF_TYPE_LSIZE (t);
+
+ if (!to_foreign)
+ size = CTF_TYPE_LSIZE (t);
+
t = (ctf_type_t *) ((uintptr_t) t + sizeof (ctf_type_t));
}
else
@@ -1182,22 +1204,27 @@ flip_types (ctf_dict_t *fp, void *start, size_t len)
}
/* Flip the endianness of BUF, given the offsets in the (already endian-
- converted) CTH.
+ converted) CTH. If TO_FOREIGN is set, flip to foreign-endianness; if not,
+ flip away.
All of this stuff happens before the header is fully initialized, so the
LCTF_*() macros cannot be used yet. Since we do not try to endian-convert v1
data, this is no real loss. */
-static int
-flip_ctf (ctf_dict_t *fp, ctf_header_t *cth, unsigned char *buf)
+int
+ctf_flip (ctf_dict_t *fp, ctf_header_t *cth, unsigned char *buf,
+ int to_foreign)
{
+ ctf_dprintf("flipping endianness\n");
+
flip_lbls (buf + cth->cth_lbloff, cth->cth_objtoff - cth->cth_lbloff);
flip_objts (buf + cth->cth_objtoff, cth->cth_funcoff - cth->cth_objtoff);
flip_objts (buf + cth->cth_funcoff, cth->cth_objtidxoff - cth->cth_funcoff);
flip_objts (buf + cth->cth_objtidxoff, cth->cth_funcidxoff - cth->cth_objtidxoff);
flip_objts (buf + cth->cth_funcidxoff, cth->cth_varoff - cth->cth_funcidxoff);
flip_vars (buf + cth->cth_varoff, cth->cth_typeoff - cth->cth_varoff);
- return flip_types (fp, buf + cth->cth_typeoff, cth->cth_stroff - cth->cth_typeoff);
+ return flip_types (fp, buf + cth->cth_typeoff,
+ cth->cth_stroff - cth->cth_typeoff, to_foreign);
}
/* Set up the ctl hashes in a ctf_dict_t. Called by both writable and
@@ -1404,7 +1431,7 @@ ctf_bufopen_internal (const ctf_sect_t *ctfsect, const ctf_sect_t *symsect,
upgrade_header (hp);
if (foreign_endian)
- flip_header (hp);
+ ctf_flip_header (hp);
fp->ctf_openflags = hp->cth_flags;
fp->ctf_size = hp->cth_stroff + hp->cth_strlen;
@@ -1517,26 +1544,39 @@ ctf_bufopen_internal (const ctf_sect_t *ctfsect, const ctf_sect_t *symsect,
goto bad;
}
}
- else if (foreign_endian)
+ else
{
- if ((fp->ctf_base = malloc (fp->ctf_size)) == NULL)
+ if (_libctf_unlikely_ (ctfsect->cts_size < hdrsz + fp->ctf_size))
{
- err = ECTF_ZALLOC;
+ ctf_err_warn (NULL, 0, ECTF_CORRUPT,
+ _("%lu byte long CTF dictionary overruns %lu byte long CTF section"),
+ (unsigned long) ctfsect->cts_size,
+ (unsigned long) (hdrsz + fp->ctf_size));
+ err = ECTF_CORRUPT;
goto bad;
}
- fp->ctf_dynbase = fp->ctf_base;
- memcpy (fp->ctf_base, ((unsigned char *) ctfsect->cts_data) + hdrsz,
- fp->ctf_size);
- fp->ctf_buf = fp->ctf_base;
- }
- else
- {
- /* We are just using the section passed in -- but its header may be an old
- version. Point ctf_buf past the old header, and never touch it
- again. */
- fp->ctf_base = (unsigned char *) ctfsect->cts_data;
- fp->ctf_dynbase = NULL;
- fp->ctf_buf = fp->ctf_base + hdrsz;
+
+ if (foreign_endian)
+ {
+ if ((fp->ctf_base = malloc (fp->ctf_size)) == NULL)
+ {
+ err = ECTF_ZALLOC;
+ goto bad;
+ }
+ fp->ctf_dynbase = fp->ctf_base;
+ memcpy (fp->ctf_base, ((unsigned char *) ctfsect->cts_data) + hdrsz,
+ fp->ctf_size);
+ fp->ctf_buf = fp->ctf_base;
+ }
+ else
+ {
+ /* We are just using the section passed in -- but its header may
+ be an old version. Point ctf_buf past the old header, and
+ never touch it again. */
+ fp->ctf_base = (unsigned char *) ctfsect->cts_data;
+ fp->ctf_dynbase = NULL;
+ fp->ctf_buf = fp->ctf_base + hdrsz;
+ }
}
/* Once we have uncompressed and validated the CTF data buffer, we can
@@ -1597,9 +1637,9 @@ ctf_bufopen_internal (const ctf_sect_t *ctfsect, const ctf_sect_t *symsect,
fp->ctf_syn_ext_strtab = syn_strtab;
if (foreign_endian &&
- (err = flip_ctf (fp, hp, fp->ctf_buf)) != 0)
+ (err = ctf_flip (fp, hp, fp->ctf_buf, 0)) != 0)
{
- /* We can be certain that flip_ctf() will have endian-flipped everything
+ /* We can be certain that ctf_flip() will have endian-flipped everything
other than the types table when we return. In particular the header
is fine, so set it, to allow freeing to use the usual code path. */
diff --git a/libctf/ctf-serialize.c b/libctf/ctf-serialize.c
index 89f1ac01aa1..c6b8b495568 100644
--- a/libctf/ctf-serialize.c
+++ b/libctf/ctf-serialize.c
@@ -431,12 +431,12 @@ emit_symtypetab_index (ctf_dict_t *fp, ctf_dict_t *symfp, uint32_t *dp,
return 0;
}
-/* Delete data symbols that have been assigned names from the variable section.
- Must be called from within ctf_serialize, because that is the only place
- you can safely delete variables without messing up ctf_rollback. */
+/* Delete symbols that have been assigned names from the variable section. Must
+ be called from within ctf_serialize, because that is the only place you can
+ safely delete variables without messing up ctf_rollback. */
static int
-symtypetab_delete_nonstatic_vars (ctf_dict_t *fp, ctf_dict_t *symfp)
+symtypetab_delete_nonstatics (ctf_dict_t *fp, ctf_dict_t *symfp)
{
ctf_dvdef_t *dvd, *nvd;
ctf_id_t type;
@@ -445,8 +445,10 @@ symtypetab_delete_nonstatic_vars (ctf_dict_t *fp, ctf_dict_t *symfp)
{
nvd = ctf_list_next (dvd);
- if (((type = (ctf_id_t) (uintptr_t)
- ctf_dynhash_lookup (fp->ctf_objthash, dvd->dvd_name)) > 0)
+ if ((((type = (ctf_id_t) (uintptr_t)
+ ctf_dynhash_lookup (fp->ctf_objthash, dvd->dvd_name)) > 0)
+ || (type = (ctf_id_t) (uintptr_t)
+ ctf_dynhash_lookup (fp->ctf_funchash, dvd->dvd_name)) > 0)
&& ctf_dynhash_lookup (symfp->ctf_dynsyms, dvd->dvd_name) != NULL
&& type == dvd->dvd_type)
ctf_dvd_delete (fp, dvd);
@@ -560,13 +562,12 @@ ctf_symtypetab_sect_sizes (ctf_dict_t *fp, emit_symtypetab_state_t *s,
/* If we are filtering symbols out, those symbols that the linker has not
reported have now been removed from the ctf_objthash and ctf_funchash.
- Delete entries from the variable section that duplicate newly-added data
- symbols. There's no need to migrate new ones in, because the compiler
- always emits both a variable and a data symbol simultaneously, and
- filtering only happens at final link time. */
+ Delete entries from the variable section that duplicate newly-added
+ symbols. There's no need to migrate new ones in: we do that (if necessary)
+ in ctf_link_deduplicating_variables. */
if (s->filter_syms && s->symfp->ctf_dynsyms &&
- symtypetab_delete_nonstatic_vars (fp, s->symfp) < 0)
+ symtypetab_delete_nonstatics (fp, s->symfp) < 0)
return -1;
return 0;
@@ -1228,7 +1229,13 @@ err:
/* File writing. */
-/* Write the compressed CTF data stream to the specified gzFile descriptor. */
+/* Write the compressed CTF data stream to the specified gzFile descriptor. The
+ whole stream is compressed, and cannot be read by CTF opening functions in
+ this library until it is decompressed. (The functions below this one leave
+ the header uncompressed, and the CTF opening functions work on them without
+ manual decompression.)
+
+ No support for (testing-only) endian-flipping. */
int
ctf_gzwrite (ctf_dict_t *fp, gzFile fd)
{
@@ -1259,85 +1266,25 @@ ctf_gzwrite (ctf_dict_t *fp, gzFile fd)
return 0;
}
-/* Compress the specified CTF data stream and write it to the specified file
- descriptor. */
-int
-ctf_compress_write (ctf_dict_t *fp, int fd)
-{
- unsigned char *buf;
- unsigned char *bp;
- ctf_header_t h;
- ctf_header_t *hp = &h;
- ssize_t header_len = sizeof (ctf_header_t);
- ssize_t compress_len;
- ssize_t len;
- int rc;
- int err = 0;
-
- if (ctf_serialize (fp) < 0)
- return -1; /* errno is set for us. */
-
- memcpy (hp, fp->ctf_header, header_len);
- hp->cth_flags |= CTF_F_COMPRESS;
- compress_len = compressBound (fp->ctf_size);
-
- if ((buf = malloc (compress_len)) == NULL)
- {
- ctf_err_warn (fp, 0, 0, _("ctf_compress_write: cannot allocate %li bytes"),
- (unsigned long) compress_len);
- return (ctf_set_errno (fp, ECTF_ZALLOC));
- }
-
- if ((rc = compress (buf, (uLongf *) &compress_len,
- fp->ctf_buf, fp->ctf_size)) != Z_OK)
- {
- err = ctf_set_errno (fp, ECTF_COMPRESS);
- ctf_err_warn (fp, 0, 0, _("zlib deflate err: %s"), zError (rc));
- goto ret;
- }
-
- while (header_len > 0)
- {
- if ((len = write (fd, hp, header_len)) < 0)
- {
- err = ctf_set_errno (fp, errno);
- ctf_err_warn (fp, 0, 0, _("ctf_compress_write: error writing header"));
- goto ret;
- }
- header_len -= len;
- hp += len;
- }
-
- bp = buf;
- while (compress_len > 0)
- {
- if ((len = write (fd, bp, compress_len)) < 0)
- {
- err = ctf_set_errno (fp, errno);
- ctf_err_warn (fp, 0, 0, _("ctf_compress_write: error writing"));
- goto ret;
- }
- compress_len -= len;
- bp += len;
- }
-
-ret:
- free (buf);
- return err;
-}
-
/* Optionally compress the specified CTF data stream and return it as a new
- dynamically-allocated string. */
+ dynamically-allocated string. Possibly write it with reversed
+ endianness. */
unsigned char *
ctf_write_mem (ctf_dict_t *fp, size_t *size, size_t threshold)
{
unsigned char *buf;
unsigned char *bp;
ctf_header_t *hp;
+ unsigned char *flipped, *src;
ssize_t header_len = sizeof (ctf_header_t);
ssize_t compress_len;
+ int flip_endian;
+ int uncompressed;
int rc;
+ flip_endian = getenv ("LIBCTF_WRITE_FOREIGN_ENDIAN") != NULL;
+ uncompressed = (fp->ctf_size < threshold);
+
if (ctf_serialize (fp) < 0)
return NULL; /* errno is set for us. */
@@ -1358,17 +1305,43 @@ ctf_write_mem (ctf_dict_t *fp, size_t *size, size_t threshold)
bp = buf + sizeof (struct ctf_header);
*size = sizeof (struct ctf_header);
- if (fp->ctf_size < threshold)
+ if (uncompressed)
+ hp->cth_flags &= ~CTF_F_COMPRESS;
+ else
+ hp->cth_flags |= CTF_F_COMPRESS;
+
+ src = fp->ctf_buf;
+ flipped = NULL;
+
+ if (flip_endian)
{
- hp->cth_flags &= ~CTF_F_COMPRESS;
- memcpy (bp, fp->ctf_buf, fp->ctf_size);
+ if ((flipped = malloc (fp->ctf_size)) == NULL)
+ {
+ ctf_set_errno (fp, ENOMEM);
+ ctf_err_warn (fp, 0, 0, _("ctf_write_mem: cannot allocate %li bytes"),
+ (unsigned long) fp->ctf_size + sizeof (struct ctf_header));
+ return NULL;
+ }
+ ctf_flip_header (hp);
+ memcpy (flipped, fp->ctf_buf, fp->ctf_size);
+ if (ctf_flip (fp, fp->ctf_header, flipped, 1) < 0)
+ {
+ free (buf);
+ free (flipped);
+ return NULL; /* errno is set for us. */
+ }
+ src = flipped;
+ }
+
+ if (uncompressed)
+ {
+ memcpy (bp, src, fp->ctf_size);
*size += fp->ctf_size;
}
else
{
- hp->cth_flags |= CTF_F_COMPRESS;
if ((rc = compress (bp, (uLongf *) &compress_len,
- fp->ctf_buf, fp->ctf_size)) != Z_OK)
+ src, fp->ctf_size)) != Z_OK)
{
ctf_set_errno (fp, ECTF_COMPRESS);
ctf_err_warn (fp, 0, 0, _("zlib deflate err: %s"), zError (rc));
@@ -1377,45 +1350,77 @@ ctf_write_mem (ctf_dict_t *fp, size_t *size, size_t threshold)
}
*size += compress_len;
}
+
+ free (flipped);
+
return buf;
}
-/* Write the uncompressed CTF data stream to the specified file descriptor. */
+/* Compress the specified CTF data stream and write it to the specified file
+ descriptor. */
int
-ctf_write (ctf_dict_t *fp, int fd)
+ctf_compress_write (ctf_dict_t *fp, int fd)
{
- const unsigned char *buf;
- ssize_t resid;
+ unsigned char *buf;
+ unsigned char *bp;
+ size_t tmp;
+ ssize_t buf_len;
ssize_t len;
+ int err = 0;
- if (ctf_serialize (fp) < 0)
+ if ((buf = ctf_write_mem (fp, &tmp, 0)) == NULL)
return -1; /* errno is set for us. */
- resid = sizeof (ctf_header_t);
- buf = (unsigned char *) fp->ctf_header;
- while (resid != 0)
+ buf_len = tmp;
+ bp = buf;
+
+ while (buf_len > 0)
{
- if ((len = write (fd, buf, resid)) <= 0)
+ if ((len = write (fd, bp, buf_len)) < 0)
{
- ctf_err_warn (fp, 0, errno, _("ctf_write: error writing header"));
- return (ctf_set_errno (fp, errno));
+ err = ctf_set_errno (fp, errno);
+ ctf_err_warn (fp, 0, 0, _("ctf_compress_write: error writing"));
+ goto ret;
}
- resid -= len;
- buf += len;
+ buf_len -= len;
+ bp += len;
}
- resid = fp->ctf_size;
- buf = fp->ctf_buf;
- while (resid != 0)
+ret:
+ free (buf);
+ return err;
+}
+
+/* Write the uncompressed CTF data stream to the specified file descriptor. */
+int
+ctf_write (ctf_dict_t *fp, int fd)
+{
+ unsigned char *buf;
+ unsigned char *bp;
+ size_t tmp;
+ ssize_t buf_len;
+ ssize_t len;
+ int err = 0;
+
+ if ((buf = ctf_write_mem (fp, &tmp, (size_t) -1)) == NULL)
+ return -1; /* errno is set for us. */
+
+ buf_len = tmp;
+ bp = buf;
+
+ while (buf_len > 0)
{
- if ((len = write (fd, buf, resid)) <= 0)
+ if ((len = write (fd, bp, buf_len)) < 0)
{
- ctf_err_warn (fp, 0, errno, _("ctf_write: error writing"));
- return (ctf_set_errno (fp, errno));
+ err = ctf_set_errno (fp, errno);
+ ctf_err_warn (fp, 0, 0, _("ctf_compress_write: error writing"));
+ goto ret;
}
- resid -= len;
- buf += len;
+ buf_len -= len;
+ bp += len;
}
- return 0;
+ret:
+ free (buf);
+ return err;
}
diff --git a/libctf/doc/local.mk b/libctf/doc/local.mk
index cc7d990ebd0..93177971a92 100644
--- a/libctf/doc/local.mk
+++ b/libctf/doc/local.mk
@@ -20,7 +20,6 @@
if BUILD_INFO
info_TEXINFOS += %D%/ctf-spec.texi
-libctf_TEXINFOS = $(info_TEXINFOS)
AM_MAKEINFOFLAGS = --no-split
diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog
index b45c7487b30..de3a6eeef52 100644
--- a/libiberty/ChangeLog
+++ b/libiberty/ChangeLog
@@ -1,10 +1,143 @@
-2021-07-03 Nick Clifton <nickc@redhat.com>
+2022-01-31 Nick Clifton <nickc@redhat.com>
+
+ PR 98886
+ PR 99935
+ * rust-demangle.c (struct rust_demangler): Add a recursion
+ counter.
+ (demangle_path): Increment/decrement the recursion counter upon
+ entry and exit. Fail if the counter exceeds a fixed limit.
+ (demangle_type): Likewise.
+ (rust_demangle_callback): Initialise the recursion counter,
+ disabling if requested by the option flags.
+
+2022-01-15 Martin Sebor <msebor@redhat.com>
+
+ * regex.c: Suppress -Wuse-after-free.
+
+2022-01-22 Nick Clifton <nickc@redhat.com>
+
+ * 2.38 release branch created.
+
+2021-12-30 Lancelot SIX <lsix@lancelotsix.com>
+
+ * cp-demangle.c (d_clone_suffix): Support digits in clone tag
+ names.
+ * testsuite/demangle-expected: Check demangling of clone symbols
+ with digits in name.
+
+2021-12-16 H.J. Lu <hjl.tools@gmail.com>
+
+ Revert:
+ 2021-12-16 H.J. Lu <hjl.tools@gmail.com>
+
+ * Makefile.in (AR): Add @AR_PLUGIN_OPTION@
+ (RANLIB): Add @RANLIB_PLUGIN_OPTION@.
+ (configure_deps): Depend on ../config/gcc-plugin.m4.
+ * configure.ac: AC_SUBST AR_PLUGIN_OPTION and
+ RANLIB_PLUGIN_OPTION.
+ * aclocal.m4: Regenerated.
+ * configure: Likewise.
+
+2021-12-15 H.J. Lu <hjl.tools@gmail.com>
+
+ * Makefile.in (AR): Add @AR_PLUGIN_OPTION@
+ (RANLIB): Add @RANLIB_PLUGIN_OPTION@.
+ (configure_deps): Depend on ../config/gcc-plugin.m4.
+ * configure.ac: AC_SUBST AR_PLUGIN_OPTION and
+ RANLIB_PLUGIN_OPTION.
+ * aclocal.m4: Regenerated.
+ * configure: Likewise.
+
+2021-11-29 Eric Gallager <egallager@gcc.gnu.org>
+
+ PR other/103021
+ * Makefile.in: Use ETAGS variable in TAGS target.
+ * configure: Regenerate.
+ * configure.ac: Allow ETAGS variable to be overridden.
+
+2021-11-29 Andrew Pinski <apinski@marvell.com>
+
+ * make-temp-file.c (try_dir): Check to see if the dir
+ is actually a directory.
+
+2021-10-22 Eric Gallager <egallager@gcc.gnu.org>
+
+ PR other/102663
+ * Makefile.in: Allow dvi-formatted documentation
+ to be installed.
+
+2021-10-17 Luís Ferreira <contact@lsferreira.net>
+
+ PR d/102618
+ * d-demangle.c (dlang_parse_qualified): Handle anonymous
+ symbols correctly.
+ * testsuite/d-demangle-expected: New tests to cover anonymous
+ symbols.
+
+2021-10-14 Luís Ferreira <contact@lsferreira.net>
+
+ * testsuite/d-demangle-expected: Add test case for function literals.
+
+2021-10-14 Luís Ferreira <contact@lsferreira.net>
+
+ * testsuite/d-demangle-expected: Add test cases for simple special
+ mangles.
+
+2021-10-12 Luís Ferreira <contact@lsferreira.net>
+
+ * d-demangle.c (dlang_parse_qualified): Remove redudant parenthesis
+ around lhs and rhs of assignments.
+
+2021-10-01 Luís Ferreira <contact@lsferreira.net>
+
+ * testsuite/d-demangle-expected: Add missing format for new test
+
+2021-09-23 Luís Ferreira <contact@lsferreira.net>
+
+ * d-demangle.c (dlang_Type): Validate MANGLED is nonnull.
+ * testsuite/d-demangle-expected: New test.
+
+2021-09-23 Luís Ferreira <contact@lsferreira.net>
+
+ * d-demangle.c (dlang_symbol_backref): Ensure strlen of
+ string is less than length computed by dlang_number.
+
+2021-09-01 Iain Sandoe <iain@sandoe.co.uk>
* configure: Regenerate.
+ * configure.ac: Do not search for sbrk on Darwin.
+ * xmalloc.c: Do not declare sbrk unless it has been found
+ by configure.
+
+2021-08-29 Iain Buclaw <ibuclaw@gdcproject.org>
+
+ * d-demangle.c (dlang_identifier): Skip over fake parent manglings.
+ * testsuite/d-demangle-expected: Add tests.
+
+2021-08-29 Iain Buclaw <ibuclaw@gdcproject.org>
+
+ * d-demangle.c (dlang_parse_arrayliteral): Add 'info' parameter.
+ (dlang_parse_assocarray): Likewise.
+ (dlang_parse_structlit): Likewise.
+ (dlang_value): Likewise. Handle function literal symbols.
+ (dlang_template_args): Pass 'info' to dlang_value.
+ * testsuite/d-demangle-expected: Add new test.
+
+2021-08-29 Iain Buclaw <ibuclaw@gdcproject.org>
+
+ * d-demangle.c (dlang_attributes): Handle typeof(*null).
+ (dlang_type): Likewise. Demangle 'n' as typeof(null).
+ * testsuite/d-demangle-expected: Update tests.
+
+2021-08-23 Iain Sandoe <iain@sandoe.co.uk>
+
+ * simple-object-mach-o.c (simple_object_mach_o_write_segment):
+ Cast the first argument to set_32 as needed.
-2021-07-03 Nick Clifton <nickc@redhat.com>
+2021-08-18 Iain Sandoe <iain@sandoe.co.uk>
- * 2.37 release branch created.
+ * simple-object-mach-o.c (simple_object_mach_o_write_segment):
+ Arrange to swap the LTO index tables where needed.
2021-06-30 Gerald Pfeifer <gerald@pfeifer.com>
diff --git a/libiberty/Makefile.in b/libiberty/Makefile.in
index a99122b9ad0..abef3c4601b 100644
--- a/libiberty/Makefile.in
+++ b/libiberty/Makefile.in
@@ -29,6 +29,7 @@ bindir = @bindir@
libdir = @libdir@
includedir = @includedir@
target_header_dir = @target_header_dir@
+dvidir = @dvidir@
objext = @OBJEXT@
SHELL = @SHELL@
@@ -276,7 +277,24 @@ $(TESTLIB): $(REQUIRED_OFILES) $(CONFIGURED_OFILES)
info: libiberty.info info-subdir
install-info: install-info-subdir
clean-info: clean-info-subdir
-dvi: libiberty.dvi dvi-subdir
+
+LIBIBERTY_DVIFILES = libiberty.dvi
+
+dvi: $(LIBIBERTY_DVIFILES) dvi-subdir
+
+.PHONY: install-dvi
+
+dvi__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+
+install-dvi: $(LIBIBERTY_DVIFILES)
+ @$(NORMAL_INSTALL)
+ test -z "$(dvidir)" || $(mkinstalldirs) "$(DESTDIR)$(dvidir)"
+ @list='$(LIBIBERTY_DVIFILES)'; for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ f=$(dvi__strip_dir) \
+ echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(dvidir)/$$f'"; \
+ $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(dvidir)/$$f"; \
+ done
LIBIBERTY_PDFFILES = libiberty.pdf
@@ -411,8 +429,10 @@ stamp-noasandir:
.PHONY: all etags tags TAGS ls clean stage1 stage2
+ETAGS = @ETAGS@
+
etags tags TAGS: etags-subdir
- cd $(srcdir) && etags $(CFILES)
+ cd $(srcdir) && $(ETAGS) $(CFILES)
# The standalone demangler (c++filt) has been moved to binutils.
# But make this target work anyway for demangler hacking.
diff --git a/libiberty/configure b/libiberty/configure
index f4169b40e0f..e09ddd91e58 100755
--- a/libiberty/configure
+++ b/libiberty/configure
@@ -661,6 +661,7 @@ HAVE_PERL
PERL
BUILD_INFO
MAKEINFO
+ETAGS
NOTMAINT
MAINT
libiberty_topdir
@@ -2560,6 +2561,11 @@ else
NOTMAINT=''
fi
+if test -z "$ETAGS"; then
+ ETAGS=etags
+fi
+
+
# Do we have a single-tree copy of texinfo? Even if we do, we can't
# rely on it - libiberty is built before texinfo.
# Extract the first word of "makeinfo", so it can be a program name with args.
@@ -6155,9 +6161,16 @@ vars="sys_errlist sys_nerr sys_siglist"
checkfuncs="__fsetlocking canonicalize_file_name dup3 getrlimit getrusage \
getsysinfo gettimeofday on_exit pipe2 psignal pstat_getdynamic pstat_getstatic \
- realpath setrlimit sbrk spawnve spawnvpe strerror strsignal sysconf sysctl \
+ realpath setrlimit spawnve spawnvpe strerror strsignal sysconf sysctl \
sysmp table times wait3 wait4"
+# Darwin has sbrk, but it is deprecated and that produces build-time warnings
+# so do not check for it.
+case "${host}" in
+ *-*-darwin*) ;;
+ *) checkfuncs="$checkfuncs sbrk"
+esac
+
# These are neither executed nor required, but they help keep
# autoheader happy without adding a bunch of text to acconfig.h.
if test "x" = "y"; then
@@ -7386,7 +7399,10 @@ fi
cat >>confdefs.h <<_ACEOF
#define HAVE_DECL_REALLOC $ac_have_decl
_ACEOF
-ac_fn_c_check_decl "$LINENO" "sbrk" "ac_cv_have_decl_sbrk" "$ac_includes_default"
+
+ case "${host}" in
+ *-*-darwin*) ;; # Darwin's sbrk implementation is deprecated.
+ *) ac_fn_c_check_decl "$LINENO" "sbrk" "ac_cv_have_decl_sbrk" "$ac_includes_default"
if test "x$ac_cv_have_decl_sbrk" = xyes; then :
ac_have_decl=1
else
@@ -7396,7 +7412,8 @@ fi
cat >>confdefs.h <<_ACEOF
#define HAVE_DECL_SBRK $ac_have_decl
_ACEOF
-
+;;
+ esac
ac_fn_c_check_decl "$LINENO" "strtol" "ac_cv_have_decl_strtol" "$ac_includes_default"
if test "x$ac_cv_have_decl_strtol" = xyes; then :
ac_have_decl=1
diff --git a/libiberty/configure.ac b/libiberty/configure.ac
index 9b451a4c61a..f59f35e1f20 100644
--- a/libiberty/configure.ac
+++ b/libiberty/configure.ac
@@ -61,6 +61,11 @@ fi
AC_SUBST(MAINT)dnl
AC_SUBST(NOTMAINT)dnl
+if test -z "$ETAGS"; then
+ ETAGS=etags
+fi
+AC_SUBST([ETAGS])
+
# Do we have a single-tree copy of texinfo? Even if we do, we can't
# rely on it - libiberty is built before texinfo.
AC_CHECK_PROG(MAKEINFO, makeinfo, makeinfo, )
@@ -407,9 +412,16 @@ vars="sys_errlist sys_nerr sys_siglist"
checkfuncs="__fsetlocking canonicalize_file_name dup3 getrlimit getrusage \
getsysinfo gettimeofday on_exit pipe2 psignal pstat_getdynamic pstat_getstatic \
- realpath setrlimit sbrk spawnve spawnvpe strerror strsignal sysconf sysctl \
+ realpath setrlimit spawnve spawnvpe strerror strsignal sysconf sysctl \
sysmp table times wait3 wait4"
+# Darwin has sbrk, but it is deprecated and that produces build-time warnings
+# so do not check for it.
+case "${host}" in
+ *-*-darwin*) ;;
+ *) checkfuncs="$checkfuncs sbrk"
+esac
+
# These are neither executed nor required, but they help keep
# autoheader happy without adding a bunch of text to acconfig.h.
if test "x" = "y"; then
@@ -707,7 +719,11 @@ if test -z "${setobjs}"; then
AC_CHECK_FUNCS($checkfuncs)
AC_CHECK_DECLS([basename(char *), ffs, asprintf, vasprintf, snprintf, vsnprintf])
- AC_CHECK_DECLS([calloc, getenv, getopt, malloc, realloc, sbrk])
+ AC_CHECK_DECLS([calloc, getenv, getopt, malloc, realloc])
+ case "${host}" in
+ *-*-darwin*) ;; # Darwin's sbrk implementation is deprecated.
+ *) AC_CHECK_DECLS([sbrk]);;
+ esac
AC_CHECK_DECLS([strtol, strtoul, strtoll, strtoull])
AC_CHECK_DECLS([strverscmp])
AC_CHECK_DECLS([strnlen])
diff --git a/libiberty/cp-demangle.c b/libiberty/cp-demangle.c
index 3d1e5ec0aec..6dff7d28fcf 100644
--- a/libiberty/cp-demangle.c
+++ b/libiberty/cp-demangle.c
@@ -3884,10 +3884,11 @@ d_clone_suffix (struct d_info *di, struct demangle_component *encoding)
const char *pend = suffix;
struct demangle_component *n;
- if (*pend == '.' && (IS_LOWER (pend[1]) || pend[1] == '_'))
+ if (*pend == '.' && (IS_LOWER (pend[1]) || IS_DIGIT (pend[1])
+ || pend[1] == '_'))
{
pend += 2;
- while (IS_LOWER (*pend) || *pend == '_')
+ while (IS_LOWER (*pend) || IS_DIGIT (*pend) || *pend == '_')
++pend;
}
while (*pend == '.' && IS_DIGIT (pend[1]))
diff --git a/libiberty/d-demangle.c b/libiberty/d-demangle.c
index 4d14a4a0e4c..e53990ef4f3 100644
--- a/libiberty/d-demangle.c
+++ b/libiberty/d-demangle.c
@@ -191,7 +191,8 @@ static const char *dlang_function_args (string *, const char *,
static const char *dlang_type (string *, const char *, struct dlang_info *);
-static const char *dlang_value (string *, const char *, const char *, char);
+static const char *dlang_value (string *, const char *, const char *, char,
+ struct dlang_info *);
static const char *dlang_parse_qualified (string *, const char *,
struct dlang_info *, int);
@@ -252,15 +253,15 @@ dlang_hexdigit (const char *mangled, char *ret)
c = mangled[0];
if (!ISDIGIT (c))
- (*ret) = (c - (ISUPPER (c) ? 'A' : 'a') + 10);
+ *ret = c - (ISUPPER (c) ? 'A' : 'a') + 10;
else
- (*ret) = (c - '0');
+ *ret = c - '0';
c = mangled[1];
if (!ISDIGIT (c))
- (*ret) = (*ret << 4) | (c - (ISUPPER (c) ? 'A' : 'a') + 10);
+ *ret = (*ret << 4) | (c - (ISUPPER (c) ? 'A' : 'a') + 10);
else
- (*ret) = (*ret << 4) | (c - '0');
+ *ret = (*ret << 4) | (c - '0');
mangled += 2;
@@ -337,7 +338,7 @@ dlang_decode_backref (const char *mangled, long *ret)
static const char *
dlang_backref (const char *mangled, const char **ret, struct dlang_info *info)
{
- (*ret) = NULL;
+ *ret = NULL;
if (mangled == NULL || *mangled != 'Q')
return NULL;
@@ -355,7 +356,7 @@ dlang_backref (const char *mangled, const char **ret, struct dlang_info *info)
return NULL;
/* Set the position of the back reference. */
- (*ret) = qpos - refpos;
+ *ret = qpos - refpos;
return mangled;
}
@@ -380,7 +381,7 @@ dlang_symbol_backref (string *decl, const char *mangled,
/* Must point to a simple identifier. */
backref = dlang_number (backref, &len);
- if (backref == NULL)
+ if (backref == NULL || strlen(backref) < len)
return NULL;
backref = dlang_lname (decl, backref, len);
@@ -573,9 +574,11 @@ dlang_attributes (string *decl, const char *mangled)
case 'g':
case 'h':
case 'k':
+ case 'n':
/* inout parameter is represented as 'Ng'.
vector parameter is represented as 'Nh'.
- return paramenter is represented as 'Nk'.
+ return parameter is represented as 'Nk'.
+ typeof(*null) parameter is represented as 'Nn'.
If we see this, then we know we're really in the
parameter list. Rewind and break. */
mangled--;
@@ -787,6 +790,12 @@ dlang_type (string *decl, const char *mangled, struct dlang_info *info)
string_append (decl, ")");
return mangled;
}
+ else if (*mangled == 'n') /* typeof(*null) */
+ {
+ mangled++;
+ string_append (decl, "typeof(*null)");
+ return mangled;
+ }
else
return NULL;
case 'A': /* dynamic array (T[]) */
@@ -866,7 +875,7 @@ dlang_type (string *decl, const char *mangled, struct dlang_info *info)
szmods = string_length (&mods);
/* Back referenced function type. */
- if (*mangled == 'Q')
+ if (mangled && *mangled == 'Q')
mangled = dlang_type_backref (decl, mangled, info, 1);
else
mangled = dlang_function_type (decl, mangled, info);
@@ -884,7 +893,7 @@ dlang_type (string *decl, const char *mangled, struct dlang_info *info)
/* Basic types */
case 'n':
mangled++;
- string_append (decl, "none");
+ string_append (decl, "typeof(null)");
return mangled;
case 'v':
mangled++;
@@ -1035,6 +1044,25 @@ dlang_identifier (string *decl, const char *mangled, struct dlang_info *info)
&& (mangled[2] == 'T' || mangled[2] == 'U'))
return dlang_parse_template (decl, mangled, info, len);
+ /* There can be multiple different declarations in the same function that have
+ the same mangled name. To make the mangled names unique, a fake parent in
+ the form `__Sddd' is added to the symbol. */
+ if (len >= 4 && mangled[0] == '_' && mangled[1] == '_' && mangled[2] == 'S')
+ {
+ const char *numptr = mangled + 3;
+ while (numptr < (mangled + len) && ISDIGIT (*numptr))
+ numptr++;
+
+ if (mangled + len == numptr)
+ {
+ /* Skip over the fake parent. */
+ mangled += len;
+ return dlang_identifier (decl, mangled, info);
+ }
+
+ /* else demangle it as a plain identifier. */
+ }
+
return dlang_lname (decl, mangled, len);
}
@@ -1378,7 +1406,8 @@ dlang_parse_string (string *decl, const char *mangled)
/* Extract the static array value from MANGLED and append it to DECL.
Return the remaining string on success or NULL on failure. */
static const char *
-dlang_parse_arrayliteral (string *decl, const char *mangled)
+dlang_parse_arrayliteral (string *decl, const char *mangled,
+ struct dlang_info *info)
{
unsigned long elements;
@@ -1389,7 +1418,7 @@ dlang_parse_arrayliteral (string *decl, const char *mangled)
string_append (decl, "[");
while (elements--)
{
- mangled = dlang_value (decl, mangled, NULL, '\0');
+ mangled = dlang_value (decl, mangled, NULL, '\0', info);
if (mangled == NULL)
return NULL;
@@ -1404,7 +1433,8 @@ dlang_parse_arrayliteral (string *decl, const char *mangled)
/* Extract the associative array value from MANGLED and append it to DECL.
Return the remaining string on success or NULL on failure. */
static const char *
-dlang_parse_assocarray (string *decl, const char *mangled)
+dlang_parse_assocarray (string *decl, const char *mangled,
+ struct dlang_info *info)
{
unsigned long elements;
@@ -1415,12 +1445,12 @@ dlang_parse_assocarray (string *decl, const char *mangled)
string_append (decl, "[");
while (elements--)
{
- mangled = dlang_value (decl, mangled, NULL, '\0');
+ mangled = dlang_value (decl, mangled, NULL, '\0', info);
if (mangled == NULL)
return NULL;
string_append (decl, ":");
- mangled = dlang_value (decl, mangled, NULL, '\0');
+ mangled = dlang_value (decl, mangled, NULL, '\0', info);
if (mangled == NULL)
return NULL;
@@ -1435,7 +1465,8 @@ dlang_parse_assocarray (string *decl, const char *mangled)
/* Extract the struct literal value for NAME from MANGLED and append it to DECL.
Return the remaining string on success or NULL on failure. */
static const char *
-dlang_parse_structlit (string *decl, const char *mangled, const char *name)
+dlang_parse_structlit (string *decl, const char *mangled, const char *name,
+ struct dlang_info *info)
{
unsigned long args;
@@ -1449,7 +1480,7 @@ dlang_parse_structlit (string *decl, const char *mangled, const char *name)
string_append (decl, "(");
while (args--)
{
- mangled = dlang_value (decl, mangled, NULL, '\0');
+ mangled = dlang_value (decl, mangled, NULL, '\0', info);
if (mangled == NULL)
return NULL;
@@ -1464,7 +1495,8 @@ dlang_parse_structlit (string *decl, const char *mangled, const char *name)
/* Extract the value from MANGLED and append it to DECL.
Return the remaining string on success or NULL on failure. */
static const char *
-dlang_value (string *decl, const char *mangled, const char *name, char type)
+dlang_value (string *decl, const char *mangled, const char *name, char type,
+ struct dlang_info *info)
{
if (mangled == NULL || *mangled == '\0')
return NULL;
@@ -1525,15 +1557,24 @@ dlang_value (string *decl, const char *mangled, const char *name, char type)
case 'A':
mangled++;
if (type == 'H')
- mangled = dlang_parse_assocarray (decl, mangled);
+ mangled = dlang_parse_assocarray (decl, mangled, info);
else
- mangled = dlang_parse_arrayliteral (decl, mangled);
+ mangled = dlang_parse_arrayliteral (decl, mangled, info);
break;
/* Struct values. */
case 'S':
mangled++;
- mangled = dlang_parse_structlit (decl, mangled, name);
+ mangled = dlang_parse_structlit (decl, mangled, name, info);
+ break;
+
+ /* Function literal symbol. */
+ case 'f':
+ mangled++;
+ if (strncmp (mangled, "_D", 2) != 0
+ || !dlang_symbol_name_p (mangled + 2, info))
+ return NULL;
+ mangled = dlang_parse_mangle (decl, mangled, info);
break;
default:
@@ -1609,13 +1650,19 @@ dlang_parse_qualified (string *decl, const char *mangled,
size_t n = 0;
do
{
+ /* Skip over anonymous symbols. */
+ if (*mangled == '0')
+ {
+ do
+ mangled++;
+ while (*mangled == '0');
+
+ continue;
+ }
+
if (n++)
string_append (decl, ".");
- /* Skip over anonymous symbols. */
- while (*mangled == '0')
- mangled++;
-
mangled = dlang_identifier (decl, mangled, info);
/* Consume the encoded arguments. However if this is not followed by the
@@ -1806,7 +1853,7 @@ dlang_template_args (string *decl, const char *mangled, struct dlang_info *info)
string_need (&name, 1);
*(name.p) = '\0';
- mangled = dlang_value (decl, mangled, name.b, type);
+ mangled = dlang_value (decl, mangled, name.b, type, info);
string_delete (&name);
break;
}
diff --git a/libiberty/floatformat.c b/libiberty/floatformat.c
index ce36bae7b63..f93568b375e 100644
--- a/libiberty/floatformat.c
+++ b/libiberty/floatformat.c
@@ -78,7 +78,7 @@ floatformat_always_valid (const struct floatformat *fmt ATTRIBUTE_UNUSED,
a system header, what we do if not, etc. */
#define FLOATFORMAT_CHAR_BIT 8
-/* floatformats for IEEE half, single and double, big and little endian. */
+/* floatformats for IEEE half, single, double and quad, big and little endian. */
const struct floatformat floatformat_ieee_half_big =
{
floatformat_big, 16, 0, 1, 5, 15, 31, 6, 10,
@@ -127,6 +127,22 @@ const struct floatformat floatformat_ieee_double_little =
floatformat_always_valid,
NULL
};
+const struct floatformat floatformat_ieee_quad_big =
+{
+ floatformat_big, 128, 0, 1, 15, 16383, 0x7fff, 16, 112,
+ floatformat_intbit_no,
+ "floatformat_ieee_quad_big",
+ floatformat_always_valid,
+ NULL
+};
+const struct floatformat floatformat_ieee_quad_little =
+{
+ floatformat_little, 128, 0, 1, 15, 16383, 0x7fff, 16, 112,
+ floatformat_intbit_no,
+ "floatformat_ieee_quad_little",
+ floatformat_always_valid,
+ NULL
+};
/* floatformat for IEEE double, little endian byte order, with big endian word
ordering, as on the ARM. */
@@ -269,22 +285,6 @@ const struct floatformat floatformat_ia64_spill_little =
floatformat_always_valid,
NULL
};
-const struct floatformat floatformat_ia64_quad_big =
-{
- floatformat_big, 128, 0, 1, 15, 16383, 0x7fff, 16, 112,
- floatformat_intbit_no,
- "floatformat_ia64_quad_big",
- floatformat_always_valid,
- NULL
-};
-const struct floatformat floatformat_ia64_quad_little =
-{
- floatformat_little, 128, 0, 1, 15, 16383, 0x7fff, 16, 112,
- floatformat_intbit_no,
- "floatformat_ia64_quad_little",
- floatformat_always_valid,
- NULL
-};
static int
floatformat_ibm_long_double_is_valid (const struct floatformat *fmt,
diff --git a/libiberty/make-temp-file.c b/libiberty/make-temp-file.c
index b05df569639..7bfc65ea613 100644
--- a/libiberty/make-temp-file.c
+++ b/libiberty/make-temp-file.c
@@ -39,6 +39,10 @@ Boston, MA 02110-1301, USA. */
#if defined(_WIN32) && !defined(__CYGWIN__)
#include <windows.h>
#endif
+#if HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+
#ifndef R_OK
#define R_OK 4
@@ -76,7 +80,17 @@ try_dir (const char *dir, const char *base)
return base;
if (dir != 0
&& access (dir, R_OK | W_OK | X_OK) == 0)
- return dir;
+ {
+ /* Check to make sure dir is actually a directory. */
+#ifdef S_ISDIR
+ struct stat s;
+ if (stat (dir, &s))
+ return NULL;
+ if (!S_ISDIR (s.st_mode))
+ return NULL;
+#endif
+ return dir;
+ }
return 0;
}
diff --git a/libiberty/regex.c b/libiberty/regex.c
index cc5a4605ced..84af5276ae8 100644
--- a/libiberty/regex.c
+++ b/libiberty/regex.c
@@ -30,6 +30,10 @@
#pragma alloca
#endif
+#if __GNUC__ >= 12
+# pragma GCC diagnostic ignored "-Wuse-after-free"
+#endif
+
#undef _GNU_SOURCE
#define _GNU_SOURCE
diff --git a/libiberty/rust-demangle.c b/libiberty/rust-demangle.c
index 18c760491bd..3b24d63892a 100644
--- a/libiberty/rust-demangle.c
+++ b/libiberty/rust-demangle.c
@@ -74,6 +74,12 @@ struct rust_demangler
/* Rust mangling version, with legacy mangling being -1. */
int version;
+ /* Recursion depth. */
+ unsigned int recursion;
+ /* Maximum number of times demangle_path may be called recursively. */
+#define RUST_MAX_RECURSION_COUNT 1024
+#define RUST_NO_RECURSION_LIMIT ((unsigned int) -1)
+
uint64_t bound_lifetime_depth;
};
@@ -671,6 +677,15 @@ demangle_path (struct rust_demangler *rdm, int in_value)
if (rdm->errored)
return;
+ if (rdm->recursion != RUST_NO_RECURSION_LIMIT)
+ {
+ ++ rdm->recursion;
+ if (rdm->recursion > RUST_MAX_RECURSION_COUNT)
+ /* FIXME: There ought to be a way to report
+ that the recursion limit has been reached. */
+ goto fail_return;
+ }
+
switch (tag = next (rdm))
{
case 'C':
@@ -688,10 +703,7 @@ demangle_path (struct rust_demangler *rdm, int in_value)
case 'N':
ns = next (rdm);
if (!ISLOWER (ns) && !ISUPPER (ns))
- {
- rdm->errored = 1;
- return;
- }
+ goto fail_return;
demangle_path (rdm, in_value);
@@ -776,9 +788,15 @@ demangle_path (struct rust_demangler *rdm, int in_value)
}
break;
default:
- rdm->errored = 1;
- return;
+ goto fail_return;
}
+ goto pass_return;
+
+ fail_return:
+ rdm->errored = 1;
+ pass_return:
+ if (rdm->recursion != RUST_NO_RECURSION_LIMIT)
+ -- rdm->recursion;
}
static void
@@ -870,6 +888,19 @@ demangle_type (struct rust_demangler *rdm)
return;
}
+ if (rdm->recursion != RUST_NO_RECURSION_LIMIT)
+ {
+ ++ rdm->recursion;
+ if (rdm->recursion > RUST_MAX_RECURSION_COUNT)
+ /* FIXME: There ought to be a way to report
+ that the recursion limit has been reached. */
+ {
+ rdm->errored = 1;
+ -- rdm->recursion;
+ return;
+ }
+ }
+
switch (tag)
{
case 'R':
@@ -1030,6 +1061,9 @@ demangle_type (struct rust_demangler *rdm)
rdm->next--;
demangle_path (rdm, 0);
}
+
+ if (rdm->recursion != RUST_NO_RECURSION_LIMIT)
+ -- rdm->recursion;
}
/* A trait in a trait object may have some "existential projections"
@@ -1320,6 +1354,7 @@ rust_demangle_callback (const char *mangled, int options,
rdm.skipping_printing = 0;
rdm.verbose = (options & DMGL_VERBOSE) != 0;
rdm.version = 0;
+ rdm.recursion = (options & DMGL_NO_RECURSE_LIMIT) ? RUST_NO_RECURSION_LIMIT : 0;
rdm.bound_lifetime_depth = 0;
/* Rust symbols always start with _R (v0) or _ZN (legacy). */
diff --git a/libiberty/simple-object-mach-o.c b/libiberty/simple-object-mach-o.c
index 03954d28827..bbb7d7550d4 100644
--- a/libiberty/simple-object-mach-o.c
+++ b/libiberty/simple-object-mach-o.c
@@ -1225,6 +1225,11 @@ simple_object_mach_o_write_segment (simple_object_write *sobj, int descriptor,
index[4 * i] -= index[0];
index[0] = 0;
+ /* Swap the indices, if required. */
+
+ for (i = 0; i < (nsects_in * 4); ++i)
+ set_32 ((unsigned char *) &index[i], index[i]);
+
sechdr_offset += sechdrsize;
/* Write out the section names.
diff --git a/libiberty/testsuite/d-demangle-expected b/libiberty/testsuite/d-demangle-expected
index ba0ffed5c8d..47b059c4298 100644
--- a/libiberty/testsuite/d-demangle-expected
+++ b/libiberty/testsuite/d-demangle-expected
@@ -18,6 +18,14 @@ _Dmain
D main
#
--format=dlang
+_D8demangleZ
+demangle
+#
+--format=dlang
+_D8demangle4testZ
+demangle.test
+#
+--format=dlang
_D8demangle4testPFLAiYi
demangle.test
#
@@ -83,7 +91,11 @@ demangle.test(ulong)
#
--format=dlang
_D8demangle4testFnZv
-demangle.test(none)
+demangle.test(typeof(null))
+#
+--format=dlang
+_D8demangle4testFNnZv
+demangle.test(typeof(*null))
#
--format=dlang
_D8demangle4testFoZv
@@ -969,6 +981,10 @@ demangle.test(char)
_D8demangle000000004testFaZv
demangle.test(char)
#
+--format=dlang
+_D8demangle__T3abcS_DQt10__lambda13FNaNbNiNfZiZQBhFZi
+demangle.abc!(demangle.__lambda13()).abc()
+#
# Unittests
#
--format=dlang
@@ -992,6 +1008,10 @@ _D00
_D00
#
--format=dlang
+_D01_D
+_D01_D
+#
+--format=dlang
_D9223372036854775817
_D9223372036854775817
#
@@ -1414,3 +1434,39 @@ std.algorithm.iteration.FilterResult!(std.typecons.Tuple!(int, "a", int, "b", in
--format=dlang
_D3std3uni__T6toCaseS_DQvQt12toLowerIndexFNaNbNiNewZtVii1043S_DQCjQCi10toLowerTabFNaNbNiNemZwSQDo5ascii7toLowerTAyaZQDzFNaNeQmZ14__foreachbody2MFNaNeKmKwZ14__foreachbody3MFNaNeKwZi
std.uni.toCase!(std.uni.toLowerIndex(dchar), 1043, std.uni.toLowerTab(ulong), std.ascii.toLower, immutable(char)[]).toCase(immutable(char)[]).__foreachbody2(ref ulong, ref dchar).__foreachbody3(ref dchar)
+#
+--format=dlang
+_D8demangle4mainFZ1xi
+demangle.main().x
+#
+--format=dlang
+_D8demangle4mainFZ4__S11xi
+demangle.main().x
+#
+--format=dlang
+_D8demangle4mainFZ1fMFNaNbNiNfZv
+demangle.main().f()
+#
+--format=dlang
+_D8demangle4mainFZ4__S11fMFNaNbNiNfZv
+demangle.main().f()
+#
+--format=dlang
+_D3mod4funcFZ__T6nestedTiZQkMFNaNbNiNfZi
+mod.func().nested!(int).nested()
+#
+--format=dlang
+_D3mod4funcFZ__T6nestedTiZ4__S1QpMFNaNbNiNfZi
+mod.func().nested!(int).nested()
+#
+--format=dlang
+_D6mangle__T8fun21753VSQv6S21753S1f_DQBj10__lambda71MFNaNbNiNfZvZQCbQp
+mangle.fun21753!(mangle.S21753(mangle.__lambda71())).fun21753
+#
+--format=dlang
+_D8demangle9anonymous0Z
+demangle.anonymous
+#
+--format=dlang
+_D8demangle9anonymous03fooZ
+demangle.anonymous.foo
diff --git a/libiberty/testsuite/demangle-expected b/libiberty/testsuite/demangle-expected
index 19a0d621bc0..de54ad73cc8 100644
--- a/libiberty/testsuite/demangle-expected
+++ b/libiberty/testsuite/demangle-expected
@@ -1164,6 +1164,11 @@ foo(int) [clone ._omp_cpyfn.6]
foo
#
--format=gnu-v3 --no-params
+_Z3fooPfS_S_j.sse4_1.2
+foo(float*, float*, float*, unsigned int) [clone .sse4_1.2]
+foo
+#
+--format=gnu-v3 --no-params
_Z1fIKFvvES0_Evv
void f<void () const, void () const>()
f<void () const, void () const>
diff --git a/libiberty/xmalloc.c b/libiberty/xmalloc.c
index 3971c8f77a2..e7d52683d35 100644
--- a/libiberty/xmalloc.c
+++ b/libiberty/xmalloc.c
@@ -87,7 +87,9 @@ extern "C" {
void *malloc (size_t);
void *realloc (void *, size_t);
void *calloc (size_t, size_t);
+#ifdef HAVE_SBRK
void *sbrk (ptrdiff_t);
+#endif
# ifdef __cplusplus
}
# endif /* __cplusplus */
diff --git a/libtool.m4 b/libtool.m4
index a216bb14e99..ad63ebbb385 100644
--- a/libtool.m4
+++ b/libtool.m4
@@ -3214,25 +3214,31 @@ AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM,
lt_nm_to_check="$lt_nm_to_check nm"
fi
fi
- for lt_tmp_nm in $lt_nm_to_check; do
+ for lt_tmp_nm in "$lt_nm_to_check"; do
lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
IFS="$lt_save_ifs"
test -z "$ac_dir" && ac_dir=.
- case "$lt_tmp_nm" in
+ # Strip out any user-provided options from the nm to test twice,
+ # the first time to test to see if nm (rather than its options) has
+ # an explicit path, the second time to yield a file which can be
+ # nm'ed itself.
+ tmp_nm_path="`$ECHO "$lt_tmp_nm" | sed 's, -.*$,,'`"
+ case "$tmp_nm_path" in
*/*|*\\*) tmp_nm="$lt_tmp_nm";;
*) tmp_nm="$ac_dir/$lt_tmp_nm";;
esac
- if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+ tmp_nm_to_nm="`$ECHO "$tmp_nm" | sed 's, -.*$,,'`"
+ if test -f "$tmp_nm_to_nm" || test -f "$tmp_nm_to_nm$ac_exeext" ; then
# Check to see if the nm accepts a BSD-compat flag.
# Adding the `sed 1q' prevents false positives on HP-UX, which says:
# nm: unknown option "B" ignored
- case `"$tmp_nm" -B "$tmp_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
+ case `"$tmp_nm" -B "$tmp_nm_to_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
*$tmp_nm*) lt_cv_path_NM="$tmp_nm -B"
break
;;
*)
- case `"$tmp_nm" -p "$tmp_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
+ case `"$tmp_nm" -p "$tmp_nm_to_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
*$tmp_nm*)
lt_cv_path_NM="$tmp_nm -p"
break
diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog
index d0f6aacc8e9..3d9f4a14532 100644
--- a/opcodes/ChangeLog
+++ b/opcodes/ChangeLog
@@ -1,3 +1,49 @@
+2022-04-07 Andreas Krebbel <krebbel@linux.ibm.com>
+
+ * s390-mkopc.c (main): Enable z16 as CPU string in the opcode
+ table.
+
+2022-03-16 Simon Marchi <simon.marchi@efficios.com>
+
+ * configure.ac: Handle bfd_amdgcn_arch.
+ * configure: Re-generate.
+
+2022-03-06 Sagar Patel <sagarmp@cs.unc.edu>
+ Maciej W. Rozycki <macro@orcam.me.uk>
+
+ * mips-opc.c (mips_builtin_opcodes): Fix INSN2_ALIAS annotation
+ for "bal", "beqz", "beqzl", "bnez" and "bnezl" instructions.
+ * micromips-opc.c (micromips_opcodes): Likewise for "beqz" and
+ "bnez" instructions.
+
+2022-02-17 Nick Clifton <nickc@redhat.com>
+
+ * po/sr.po: Updated Serbian translation.
+
+2022-02-14 Sergei Trofimovich <siarheit@google.com>
+
+ * microblaze-opcm.h: Renamed 'fsqrt' to 'microblaze_fsqrt'.
+ * microblaze-opc.h: Follow 'fsqrt' rename.
+
+2022-01-24 Nick Clifton <nickc@redhat.com>
+
+ * po/ro.po: Updated Romanian translation.
+ * po/uk.po: Updated Ukranian translation.
+
+2022-01-22 Nick Clifton <nickc@redhat.com>
+
+ * configure: Regenerate.
+ * po/opcodes.pot: Regenerate.
+
+2022-01-22 Nick Clifton <nickc@redhat.com>
+
+ * 2.38 release branch created.
+
+2022-01-17 Nick Clifton <nickc@redhat.com>
+
+ * Makefile.in: Regenerate.
+ * po/opcodes.pot: Regenerate.
+
2021-12-02 Marcus Nilsson <brainbomb@gmail.com>
* avr-dis.c (avr_operand); Pass in disassemble_info and fill
diff --git a/opcodes/Makefile.am b/opcodes/Makefile.am
index afd19fa7785..10ea3368d7f 100644
--- a/opcodes/Makefile.am
+++ b/opcodes/Makefile.am
@@ -115,7 +115,9 @@ TARGET64_LIBOPCODES_CFILES = \
mmix-opc.c \
nfp-dis.c \
riscv-dis.c \
- riscv-opc.c
+ riscv-opc.c \
+ tilegx-dis.c \
+ tilegx-opc.c
TARGET32_LIBOPCODES_CFILES = \
arc-dis.c \
@@ -252,8 +254,6 @@ TARGET32_LIBOPCODES_CFILES = \
tic54x-dis.c \
tic54x-opc.c \
tic6x-dis.c \
- tilegx-dis.c \
- tilegx-opc.c \
tilepro-dis.c \
tilepro-opc.c \
v850-dis.c \
diff --git a/opcodes/Makefile.in b/opcodes/Makefile.in
index 3ab8bfb0548..b8545a0fa82 100644
--- a/opcodes/Makefile.in
+++ b/opcodes/Makefile.in
@@ -507,7 +507,9 @@ TARGET64_LIBOPCODES_CFILES = \
mmix-opc.c \
nfp-dis.c \
riscv-dis.c \
- riscv-opc.c
+ riscv-opc.c \
+ tilegx-dis.c \
+ tilegx-opc.c
TARGET32_LIBOPCODES_CFILES = \
arc-dis.c \
@@ -644,8 +646,6 @@ TARGET32_LIBOPCODES_CFILES = \
tic54x-dis.c \
tic54x-opc.c \
tic6x-dis.c \
- tilegx-dis.c \
- tilegx-opc.c \
tilepro-dis.c \
tilepro-opc.c \
v850-dis.c \
diff --git a/opcodes/aarch64-opc.c b/opcodes/aarch64-opc.c
index 4774eba2e54..37f6dae07ad 100644
--- a/opcodes/aarch64-opc.c
+++ b/opcodes/aarch64-opc.c
@@ -3974,7 +3974,6 @@ aarch64_print_operand (char *buf, size_t size, bfd_vma pc,
SYSREG ((n), (e), (f) | F_ARCHEXT, \
AARCH64_FEATURE_##fe1 | AARCH64_FEATURE_##fe2)
-#define SR_RNG(n,e,f) SR_FEAT2(n,e,f,RNG,V8_5)
#define SR_V8_1_A(n,e,f) SR_FEAT2(n,e,f,V8_A,V8_1)
#define SR_V8_4_A(n,e,f) SR_FEAT2(n,e,f,V8_A,V8_4)
@@ -3994,6 +3993,7 @@ aarch64_print_operand (char *buf, size_t size, bfd_vma pc,
#define SR_LOR(n,e,f) SR_FEAT (n,e,f,LOR)
#define SR_PAN(n,e,f) SR_FEAT (n,e,f,PAN)
#define SR_RAS(n,e,f) SR_FEAT (n,e,f,RAS)
+#define SR_RNG(n,e,f) SR_FEAT (n,e,f,RNG)
#define SR_SME(n,e,f) SR_FEAT (n,e,f,SME)
#define SR_SSBS(n,e,f) SR_FEAT (n,e,f,SSBS)
#define SR_SVE(n,e,f) SR_FEAT (n,e,f,SVE)
diff --git a/opcodes/configure b/opcodes/configure
index d3cef604c85..792c863b895 100755
--- a/opcodes/configure
+++ b/opcodes/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for opcodes 2.37.50.
+# Generated by GNU Autoconf 2.69 for opcodes 2.38.50.
#
#
# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
@@ -587,8 +587,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='opcodes'
PACKAGE_TARNAME='opcodes'
-PACKAGE_VERSION='2.37.50'
-PACKAGE_STRING='opcodes 2.37.50'
+PACKAGE_VERSION='2.38.50'
+PACKAGE_STRING='opcodes 2.38.50'
PACKAGE_BUGREPORT=''
PACKAGE_URL=''
@@ -1360,7 +1360,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 opcodes 2.37.50 to adapt to many kinds of systems.
+\`configure' configures opcodes 2.38.50 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1431,7 +1431,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of opcodes 2.37.50:";;
+ short | recursive ) echo "Configuration of opcodes 2.38.50:";;
esac
cat <<\_ACEOF
@@ -1545,7 +1545,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-opcodes configure 2.37.50
+opcodes configure 2.38.50
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2139,7 +2139,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 opcodes $as_me 2.37.50, which was
+It was created by opcodes $as_me 2.38.50, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -3118,7 +3118,7 @@ fi
# Define the identity of the package.
PACKAGE='opcodes'
- VERSION='2.37.50'
+ VERSION='2.38.50'
cat >>confdefs.h <<_ACEOF
@@ -5357,25 +5357,31 @@ else
lt_nm_to_check="$lt_nm_to_check nm"
fi
fi
- for lt_tmp_nm in $lt_nm_to_check; do
+ for lt_tmp_nm in "$lt_nm_to_check"; do
lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
IFS="$lt_save_ifs"
test -z "$ac_dir" && ac_dir=.
- case "$lt_tmp_nm" in
+ # Strip out any user-provided options from the nm to test twice,
+ # the first time to test to see if nm (rather than its options) has
+ # an explicit path, the second time to yield a file which can be
+ # nm'ed itself.
+ tmp_nm_path="`$ECHO "$lt_tmp_nm" | sed 's, -.*$,,'`"
+ case "$tmp_nm_path" in
*/*|*\\*) tmp_nm="$lt_tmp_nm";;
*) tmp_nm="$ac_dir/$lt_tmp_nm";;
esac
- if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+ tmp_nm_to_nm="`$ECHO "$tmp_nm" | sed 's, -.*$,,'`"
+ if test -f "$tmp_nm_to_nm" || test -f "$tmp_nm_to_nm$ac_exeext" ; then
# Check to see if the nm accepts a BSD-compat flag.
# Adding the `sed 1q' prevents false positives on HP-UX, which says:
# nm: unknown option "B" ignored
- case `"$tmp_nm" -B "$tmp_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
+ case `"$tmp_nm" -B "$tmp_nm_to_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
*$tmp_nm*) lt_cv_path_NM="$tmp_nm -B"
break
;;
*)
- case `"$tmp_nm" -p "$tmp_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
+ case `"$tmp_nm" -p "$tmp_nm_to_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
*$tmp_nm*)
lt_cv_path_NM="$tmp_nm -p"
break
@@ -11035,7 +11041,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11038 "configure"
+#line 11044 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -11141,7 +11147,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11144 "configure"
+#line 11150 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -12491,6 +12497,7 @@ if test x${all_targets} = xfalse ; then
case "$arch" in
bfd_aarch64_arch) ta="$ta aarch64-asm.lo aarch64-dis.lo aarch64-opc.lo aarch64-asm-2.lo aarch64-dis-2.lo aarch64-opc-2.lo" ;;
bfd_alpha_arch) ta="$ta alpha-dis.lo alpha-opc.lo" ;;
+ bfd_amdgcn_arch) ;;
bfd_arc_arch) ta="$ta arc-dis.lo arc-opc.lo arc-ext.lo" ;;
bfd_arm_arch) ta="$ta arm-dis.lo" ;;
bfd_avr_arch) ta="$ta avr-dis.lo" ;;
@@ -12508,7 +12515,7 @@ if test x${all_targets} = xfalse ; then
bfd_moxie_arch) ta="$ta moxie-dis.lo moxie-opc.lo" ;;
bfd_h8300_arch) ta="$ta h8300-dis.lo" ;;
bfd_hppa_arch) ta="$ta hppa-dis.lo" ;;
- bfd_i386_arch|bfd_iamcu_arch|bfd_l1om_arch|bfd_k1om_arch)
+ bfd_i386_arch|bfd_iamcu_arch)
ta="$ta i386-dis.lo i386-opc.lo" ;;
bfd_ia64_arch) ta="$ta ia64-dis.lo ia64-opc.lo" ;;
bfd_ip2k_arch) ta="$ta ip2k-asm.lo ip2k-desc.lo ip2k-dis.lo ip2k-ibld.lo ip2k-opc.lo" using_cgen=yes ;;
@@ -13167,7 +13174,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 opcodes $as_me 2.37.50, which was
+This file was extended by opcodes $as_me 2.38.50, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -13233,7 +13240,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-opcodes config.status 2.37.50
+opcodes config.status 2.38.50
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
diff --git a/opcodes/configure.ac b/opcodes/configure.ac
index e1dc8de2792..006a95d8704 100644
--- a/opcodes/configure.ac
+++ b/opcodes/configure.ac
@@ -263,6 +263,7 @@ if test x${all_targets} = xfalse ; then
case "$arch" in
bfd_aarch64_arch) ta="$ta aarch64-asm.lo aarch64-dis.lo aarch64-opc.lo aarch64-asm-2.lo aarch64-dis-2.lo aarch64-opc-2.lo" ;;
bfd_alpha_arch) ta="$ta alpha-dis.lo alpha-opc.lo" ;;
+ bfd_amdgcn_arch) ;;
bfd_arc_arch) ta="$ta arc-dis.lo arc-opc.lo arc-ext.lo" ;;
bfd_arm_arch) ta="$ta arm-dis.lo" ;;
bfd_avr_arch) ta="$ta avr-dis.lo" ;;
@@ -280,7 +281,7 @@ if test x${all_targets} = xfalse ; then
bfd_moxie_arch) ta="$ta moxie-dis.lo moxie-opc.lo" ;;
bfd_h8300_arch) ta="$ta h8300-dis.lo" ;;
bfd_hppa_arch) ta="$ta hppa-dis.lo" ;;
- bfd_i386_arch|bfd_iamcu_arch|bfd_l1om_arch|bfd_k1om_arch)
+ bfd_i386_arch|bfd_iamcu_arch)
ta="$ta i386-dis.lo i386-opc.lo" ;;
bfd_ia64_arch) ta="$ta ia64-dis.lo ia64-opc.lo" ;;
bfd_ip2k_arch) ta="$ta ip2k-asm.lo ip2k-desc.lo ip2k-dis.lo ip2k-ibld.lo ip2k-opc.lo" using_cgen=yes ;;
diff --git a/opcodes/csky-dis.c b/opcodes/csky-dis.c
index 96163166fc3..b7c833623e5 100644
--- a/opcodes/csky-dis.c
+++ b/opcodes/csky-dis.c
@@ -239,7 +239,7 @@ csky_get_disassembler (bfd *abfd)
{
obj_attribute *attr;
const char *sec_name = NULL;
- if (!abfd)
+ if (!abfd || bfd_get_flavour (abfd) != bfd_target_elf_flavour)
dis_info.isa = CSKY_DEFAULT_ISA;
else
{
diff --git a/opcodes/dis-init.c b/opcodes/dis-init.c
index 0b171c0f36d..59039ef8b11 100644
--- a/opcodes/dis-init.c
+++ b/opcodes/dis-init.c
@@ -25,7 +25,8 @@
void
init_disassemble_info (struct disassemble_info *info, void *stream,
- fprintf_ftype fprintf_func)
+ fprintf_ftype fprintf_func,
+ fprintf_styled_ftype fprintf_styled_func)
{
memset (info, 0, sizeof (*info));
@@ -35,6 +36,7 @@ init_disassemble_info (struct disassemble_info *info, void *stream,
info->endian_code = info->endian;
info->octets_per_byte = 1;
info->fprintf_func = fprintf_func;
+ info->fprintf_styled_func = fprintf_styled_func;
info->stream = stream;
info->read_memory_func = buffer_read_memory;
info->memory_error_func = perror_memory;
@@ -42,5 +44,6 @@ init_disassemble_info (struct disassemble_info *info, void *stream,
info->symbol_at_address_func = generic_symbol_at_address;
info->symbol_is_valid = generic_symbol_is_valid;
info->display_endian = BFD_ENDIAN_UNKNOWN;
+ info->created_styled_output = false;
}
diff --git a/opcodes/disassemble.c b/opcodes/disassemble.c
index e613935eff8..5a472ce5349 100644
--- a/opcodes/disassemble.c
+++ b/opcodes/disassemble.c
@@ -28,7 +28,6 @@
#define ARCH_aarch64
#define ARCH_alpha
#define ARCH_bpf
-#define ARCH_cris
#define ARCH_ia64
#define ARCH_loongarch
#define ARCH_mips
@@ -43,6 +42,7 @@
#define ARCH_avr
#define ARCH_bfin
#define ARCH_cr16
+#define ARCH_cris
#define ARCH_crx
#define ARCH_csky
#define ARCH_d10v
@@ -229,8 +229,6 @@ disassembler (enum bfd_architecture a,
#ifdef ARCH_i386
case bfd_arch_i386:
case bfd_arch_iamcu:
- case bfd_arch_l1om:
- case bfd_arch_k1om:
disassemble = print_insn_i386;
break;
#endif
@@ -632,7 +630,12 @@ disassemble_init_for_target (struct disassemble_info * info)
info->disassembler_needs_relocs = true;
break;
#endif
-
+#ifdef ARCH_i386
+ case bfd_arch_i386:
+ case bfd_arch_iamcu:
+ info->created_styled_output = true;
+ break;
+#endif
#ifdef ARCH_ia64
case bfd_arch_ia64:
info->skip_zeroes = 16;
@@ -708,6 +711,7 @@ disassemble_init_for_target (struct disassemble_info * info)
#ifdef ARCH_riscv
case bfd_arch_riscv:
info->symbol_is_valid = riscv_symbol_is_valid;
+ info->created_styled_output = true;
break;
#endif
#ifdef ARCH_wasm32
@@ -860,3 +864,16 @@ opcodes_assert (const char *file, int line)
opcodes_error_handler (_("Please report this bug"));
abort ();
}
+
+/* Set the stream, and the styled and unstyled printf functions within
+ INFO. */
+
+void
+disassemble_set_printf (struct disassemble_info *info, void *stream,
+ fprintf_ftype unstyled_printf,
+ fprintf_styled_ftype styled_printf)
+{
+ info->stream = stream;
+ info->fprintf_func = unstyled_printf;
+ info->fprintf_styled_func = styled_printf;
+}
diff --git a/opcodes/i386-dis-evex-mod.h b/opcodes/i386-dis-evex-mod.h
index 7a372ce8c0b..b3af48e421d 100644
--- a/opcodes/i386-dis-evex-mod.h
+++ b/opcodes/i386-dis-evex-mod.h
@@ -1,33 +1,3 @@
- {
- /* MOD_EVEX_0F12_PREFIX_0 */
- { "vmovlpX", { XMM, Vex, EXq }, PREFIX_OPCODE },
- { VEX_W_TABLE (EVEX_W_0F12_P_0_M_1) },
- },
- {
- /* MOD_EVEX_0F12_PREFIX_2 */
- { "vmovlpX", { XMM, Vex, EXq }, PREFIX_OPCODE },
- },
- {
- /* MOD_EVEX_0F13 */
- { "vmovlpX", { EXq, XMM }, PREFIX_OPCODE },
- },
- {
- /* MOD_EVEX_0F16_PREFIX_0 */
- { "vmovhpX", { XMM, Vex, EXq }, PREFIX_OPCODE },
- { VEX_W_TABLE (EVEX_W_0F16_P_0_M_1) },
- },
- {
- /* MOD_EVEX_0F16_PREFIX_2 */
- { "vmovhpX", { XMM, Vex, EXq }, PREFIX_OPCODE },
- },
- {
- /* MOD_EVEX_0F17 */
- { "vmovhpX", { EXq, XMM }, PREFIX_OPCODE },
- },
- {
- /* MOD_EVEX_0F2B */
- { "vmovntpX", { EXx, XM }, PREFIX_OPCODE },
- },
/* MOD_EVEX_0F381A */
{
{ EVEX_LEN_TABLE (EVEX_LEN_0F381A_M_0) },
diff --git a/opcodes/i386-dis-evex-prefix.h b/opcodes/i386-dis-evex-prefix.h
index 9c8156ac11e..7c2fb484f95 100644
--- a/opcodes/i386-dis-evex-prefix.h
+++ b/opcodes/i386-dis-evex-prefix.h
@@ -1,98 +1,8 @@
- /* PREFIX_EVEX_0F10 */
- {
- { "vmovupX", { XM, EXEvexXNoBcst }, PREFIX_OPCODE },
- { VEX_W_TABLE (EVEX_W_0F10_P_1) },
- { "vmovupX", { XM, EXEvexXNoBcst }, PREFIX_OPCODE },
- { VEX_W_TABLE (EVEX_W_0F10_P_3) },
- },
- /* PREFIX_EVEX_0F11 */
- {
- { "vmovupX", { EXxS, XM }, PREFIX_OPCODE },
- { VEX_W_TABLE (EVEX_W_0F11_P_1) },
- { "vmovupX", { EXxS, XM }, PREFIX_OPCODE },
- { VEX_W_TABLE (EVEX_W_0F11_P_3) },
- },
- /* PREFIX_EVEX_0F12 */
- {
- { MOD_TABLE (MOD_EVEX_0F12_PREFIX_0) },
- { VEX_W_TABLE (EVEX_W_0F12_P_1) },
- { MOD_TABLE (MOD_EVEX_0F12_PREFIX_2) },
- { VEX_W_TABLE (EVEX_W_0F12_P_3) },
- },
- /* PREFIX_EVEX_0F16 */
- {
- { MOD_TABLE (MOD_EVEX_0F16_PREFIX_0) },
- { VEX_W_TABLE (EVEX_W_0F16_P_1) },
- { MOD_TABLE (MOD_EVEX_0F16_PREFIX_2) },
- },
- /* PREFIX_EVEX_0F2A */
- {
- { Bad_Opcode },
- { "vcvtsi2ss{%LQ|}", { XMScalar, VexScalar, EXxEVexR, Edq }, 0 },
- { Bad_Opcode },
- { "vcvtsi2sd{%LQ|}", { XMScalar, VexScalar, EXxEVexR64, Edq }, 0 },
- },
- /* PREFIX_EVEX_0F51 */
- {
- { "vsqrtpX", { XM, EXx, EXxEVexR }, PREFIX_OPCODE },
- { VEX_W_TABLE (EVEX_W_0F51_P_1) },
- { "vsqrtpX", { XM, EXx, EXxEVexR }, PREFIX_OPCODE },
- { VEX_W_TABLE (EVEX_W_0F51_P_3) },
- },
- /* PREFIX_EVEX_0F58 */
- {
- { "vaddpX", { XM, Vex, EXx, EXxEVexR }, PREFIX_OPCODE },
- { VEX_W_TABLE (EVEX_W_0F58_P_1) },
- { "vaddpX", { XM, Vex, EXx, EXxEVexR }, PREFIX_OPCODE },
- { VEX_W_TABLE (EVEX_W_0F58_P_3) },
- },
- /* PREFIX_EVEX_0F59 */
- {
- { "vmulpX", { XM, Vex, EXx, EXxEVexR }, PREFIX_OPCODE },
- { VEX_W_TABLE (EVEX_W_0F59_P_1) },
- { "vmulpX", { XM, Vex, EXx, EXxEVexR }, PREFIX_OPCODE },
- { VEX_W_TABLE (EVEX_W_0F59_P_3) },
- },
- /* PREFIX_EVEX_0F5A */
- {
- { VEX_W_TABLE (EVEX_W_0F5A_P_0) },
- { VEX_W_TABLE (EVEX_W_0F5A_P_1) },
- { VEX_W_TABLE (EVEX_W_0F5A_P_2) },
- { VEX_W_TABLE (EVEX_W_0F5A_P_3) },
- },
/* PREFIX_EVEX_0F5B */
{
{ VEX_W_TABLE (EVEX_W_0F5B_P_0) },
- { VEX_W_TABLE (EVEX_W_0F5B_P_1) },
- { VEX_W_TABLE (EVEX_W_0F5B_P_2) },
- },
- /* PREFIX_EVEX_0F5C */
- {
- { "vsubpX", { XM, Vex, EXx, EXxEVexR }, PREFIX_OPCODE },
- { VEX_W_TABLE (EVEX_W_0F5C_P_1) },
- { "vsubpX", { XM, Vex, EXx, EXxEVexR }, PREFIX_OPCODE },
- { VEX_W_TABLE (EVEX_W_0F5C_P_3) },
- },
- /* PREFIX_EVEX_0F5D */
- {
- { "vminpX", { XM, Vex, EXx, EXxEVexS }, PREFIX_OPCODE },
- { VEX_W_TABLE (EVEX_W_0F5D_P_1) },
- { "vminpX", { XM, Vex, EXx, EXxEVexS }, PREFIX_OPCODE },
- { VEX_W_TABLE (EVEX_W_0F5D_P_3) },
- },
- /* PREFIX_EVEX_0F5E */
- {
- { "vdivpX", { XM, Vex, EXx, EXxEVexR }, PREFIX_OPCODE },
- { VEX_W_TABLE (EVEX_W_0F5E_P_1) },
- { "vdivpX", { XM, Vex, EXx, EXxEVexR }, PREFIX_OPCODE },
- { VEX_W_TABLE (EVEX_W_0F5E_P_3) },
- },
- /* PREFIX_EVEX_0F5F */
- {
- { "vmaxpX", { XM, Vex, EXx, EXxEVexS }, PREFIX_OPCODE },
- { VEX_W_TABLE (EVEX_W_0F5F_P_1) },
- { "vmaxpX", { XM, Vex, EXx, EXxEVexS }, PREFIX_OPCODE },
- { VEX_W_TABLE (EVEX_W_0F5F_P_3) },
+ { "vcvttp%XS2dq", { XM, EXx, EXxEVexS }, 0 },
+ { "vcvtp%XS2dq", { XM, EXx, EXxEVexR }, 0 },
},
/* PREFIX_EVEX_0F6F */
{
@@ -152,16 +62,16 @@
/* PREFIX_EVEX_0FC2 */
{
{ "vcmppX", { MaskG, Vex, EXx, EXxEVexS, CMP }, PREFIX_OPCODE },
- { VEX_W_TABLE (EVEX_W_0FC2_P_1) },
+ { "vcmps%XS", { MaskG, VexScalar, EXd, EXxEVexS, CMP }, 0 },
{ "vcmppX", { MaskG, Vex, EXx, EXxEVexS, CMP }, PREFIX_OPCODE },
- { VEX_W_TABLE (EVEX_W_0FC2_P_3) },
+ { "vcmps%XD", { MaskG, VexScalar, EXq, EXxEVexS, CMP }, 0 },
},
/* PREFIX_EVEX_0FE6 */
{
{ Bad_Opcode },
{ VEX_W_TABLE (EVEX_W_0FE6_P_1) },
- { VEX_W_TABLE (EVEX_W_0FE6_P_2) },
- { VEX_W_TABLE (EVEX_W_0FE6_P_3) },
+ { "vcvttp%XD2dq%XY", { XMxmmq, EXx, EXxEVexS }, 0 },
+ { "vcvtp%XD2dq%XY", { XMxmmq, EXx, EXxEVexR }, 0 },
},
/* PREFIX_EVEX_0F3810 */
{
@@ -185,7 +95,7 @@
{
{ Bad_Opcode },
{ VEX_W_TABLE (EVEX_W_0F3813_P_1) },
- { VEX_W_TABLE (EVEX_W_0F3813_P_2) },
+ { "vcvtph2p%XS", { XM, EXxmmq, EXxEVexS }, 0 },
},
/* PREFIX_EVEX_0F3814 */
{
@@ -322,7 +232,7 @@
/* PREFIX_EVEX_0F3852 */
{
{ Bad_Opcode },
- { VEX_W_TABLE (EVEX_W_0F3852_P_1) },
+ { "vdpbf16p%XS", { XM, Vex, EXx }, 0 },
{ "vpdpwssd", { XM, Vex, EXx }, 0 },
{ "vp4dpwssd", { XM, Vex, EXxmm }, 0 },
},
@@ -343,9 +253,9 @@
/* PREFIX_EVEX_0F3872 */
{
{ Bad_Opcode },
- { VEX_W_TABLE (EVEX_W_0F3872_P_1) },
+ { "vcvtnep%XS2bf16%XY", { XMxmmq, EXx }, 0 },
{ VEX_W_TABLE (EVEX_W_0F3872_P_2) },
- { VEX_W_TABLE (EVEX_W_0F3872_P_3) },
+ { "vcvtne2p%XS2bf16", { XM, Vex, EXx}, 0 },
},
/* PREFIX_EVEX_0F389A */
{
@@ -375,17 +285,17 @@
{ "vfmsub213s%XW", { XMScalar, VexScalar, EXdq, EXxEVexR }, 0 },
{ "v4fnmaddss", { XMScalar, VexScalar, Mxmm }, 0 },
},
- /* PREFIX_EVEX_0F3A08_W_0 */
+ /* PREFIX_EVEX_0F3A08 */
{
- { "vrndscaleph", { XM, EXxh, EXxEVexS, Ib }, 0 },
+ { "vrndscalep%XH", { XM, EXxh, EXxEVexS, Ib }, 0 },
{ Bad_Opcode },
- { "vrndscaleps", { XM, EXx, EXxEVexS, Ib }, 0 },
+ { "vrndscalep%XS", { XM, EXx, EXxEVexS, Ib }, 0 },
},
- /* PREFIX_EVEX_0F3A0A_W_0 */
+ /* PREFIX_EVEX_0F3A0A */
{
- { "vrndscalesh", { XMScalar, VexScalar, EXw, EXxEVexS, Ib }, 0 },
+ { "vrndscales%XH", { XMScalar, VexScalar, EXw, EXxEVexS, Ib }, 0 },
{ Bad_Opcode },
- { "vrndscaless", { XMScalar, VexScalar, EXd, EXxEVexS, Ib }, 0 },
+ { "vrndscales%XS", { XMScalar, VexScalar, EXd, EXxEVexS, Ib }, 0 },
},
/* PREFIX_EVEX_0F3A26 */
{
@@ -440,7 +350,7 @@
},
/* PREFIX_EVEX_MAP5_1D */
{
- { "vcvtss2s%XH", { XMM, VexScalar, EXd, EXxEVexR }, 0 },
+ { "vcvtss2s%XH", { XMScalar, VexScalar, EXd, EXxEVexR }, 0 },
{ Bad_Opcode },
{ "vcvtps2p%XHx%XY", { XMxmmq, EXx, EXxEVexR }, 0 },
},
@@ -470,103 +380,94 @@
/* PREFIX_EVEX_MAP5_51 */
{
{ "vsqrtp%XH", { XM, EXxh, EXxEVexR }, 0 },
- { "vsqrts%XH", { XMM, VexScalar, EXw, EXxEVexR }, 0 },
+ { "vsqrts%XH", { XMScalar, VexScalar, EXw, EXxEVexR }, 0 },
},
/* PREFIX_EVEX_MAP5_58 */
{
{ "vaddp%XH", { XM, Vex, EXxh, EXxEVexR }, 0 },
- { "vadds%XH", { XMM, VexScalar, EXw, EXxEVexR }, 0 },
+ { "vadds%XH", { XMScalar, VexScalar, EXw, EXxEVexR }, 0 },
},
/* PREFIX_EVEX_MAP5_59 */
{
{ "vmulp%XH", { XM, Vex, EXxh, EXxEVexR }, 0 },
- { "vmuls%XH", { XMM, VexScalar, EXw, EXxEVexR }, 0 },
- },
- /* PREFIX_EVEX_MAP5_5A_W_0 */
- {
- { "vcvtph2pd", { XM, EXxmmqdh, EXxEVexS }, 0 },
- { "vcvtsh2sd", { XMM, VexScalar, EXw, EXxEVexS }, 0 },
- },
- /* PREFIX_EVEX_MAP5_5A_W_1 */
- {
- { Bad_Opcode },
- { Bad_Opcode },
- { "vcvtpd2ph%XZ", { XMM, EXx, EXxEVexR }, 0 },
- { "vcvtsd2sh", { XMM, VexScalar, EXq, EXxEVexR }, 0 },
+ { "vmuls%XH", { XMScalar, VexScalar, EXw, EXxEVexR }, 0 },
},
- /* PREFIX_EVEX_MAP5_5B_W_0 */
+ /* PREFIX_EVEX_MAP5_5A */
{
- { "vcvtdq2ph%XY", { XMxmmq, EXx, EXxEVexR }, 0 },
- { "vcvttph2dq", { XM, EXxmmqh, EXxEVexS }, 0 },
- { "vcvtph2dq", { XM, EXxmmqh, EXxEVexR }, 0 },
+ { "vcvtp%XH2pd", { XM, EXxmmqdh, EXxEVexS }, 0 },
+ { "vcvts%XH2sd", { XMScalar, VexScalar, EXw, EXxEVexS }, 0 },
+ { "vcvtp%XD2ph%XZ", { XMM, EXx, EXxEVexR }, 0 },
+ { "vcvts%XD2sh", { XMScalar, VexScalar, EXq, EXxEVexR }, 0 },
},
- /* PREFIX_EVEX_MAP5_5B_W_1 */
+ /* PREFIX_EVEX_MAP5_5B */
{
- { "vcvtqq2ph%XZ", { XMM, EXx, EXxEVexR }, 0 },
+ { VEX_W_TABLE (EVEX_W_MAP5_5B_P_0) },
+ { "vcvttp%XH2dq", { XM, EXxmmqh, EXxEVexS }, 0 },
+ { "vcvtp%XH2dq", { XM, EXxmmqh, EXxEVexR }, 0 },
},
/* PREFIX_EVEX_MAP5_5C */
{
{ "vsubp%XH", { XM, Vex, EXxh, EXxEVexR }, 0 },
- { "vsubs%XH", { XMM, VexScalar, EXw, EXxEVexR }, 0 },
+ { "vsubs%XH", { XMScalar, VexScalar, EXw, EXxEVexR }, 0 },
},
/* PREFIX_EVEX_MAP5_5D */
{
{ "vminp%XH", { XM, Vex, EXxh, EXxEVexS }, 0 },
- { "vmins%XH", { XMM, VexScalar, EXw, EXxEVexS }, 0 },
+ { "vmins%XH", { XMScalar, VexScalar, EXw, EXxEVexS }, 0 },
},
/* PREFIX_EVEX_MAP5_5E */
{
{ "vdivp%XH", { XM, Vex, EXxh, EXxEVexR }, 0 },
- { "vdivs%XH", { XMM, VexScalar, EXw, EXxEVexR }, 0 },
+ { "vdivs%XH", { XMScalar, VexScalar, EXw, EXxEVexR }, 0 },
},
/* PREFIX_EVEX_MAP5_5F */
{
{ "vmaxp%XH", { XM, Vex, EXxh, EXxEVexS }, 0 },
- { "vmaxs%XH", { XMM, VexScalar, EXw, EXxEVexS }, 0 },
+ { "vmaxs%XH", { XMScalar, VexScalar, EXw, EXxEVexS }, 0 },
},
/* PREFIX_EVEX_MAP5_78 */
{
- { VEX_W_TABLE (EVEX_W_MAP5_78_P_0) },
+ { "vcvttp%XH2udq", { XM, EXxmmqh, EXxEVexS }, 0 },
{ "vcvttsh2usi", { Gdq, EXw, EXxEVexS }, 0 },
- { VEX_W_TABLE (EVEX_W_MAP5_78_P_2) },
+ { "vcvttp%XH2uqq", { XM, EXxmmqdh, EXxEVexS }, 0 },
},
/* PREFIX_EVEX_MAP5_79 */
{
- { VEX_W_TABLE (EVEX_W_MAP5_79_P_0) },
+ { "vcvtp%XH2udq", { XM, EXxmmqh, EXxEVexR }, 0 },
{ "vcvtsh2usi", { Gdq, EXw, EXxEVexR }, 0 },
- { VEX_W_TABLE (EVEX_W_MAP5_79_P_2) },
+ { "vcvtp%XH2uqq", { XM, EXxmmqdh, EXxEVexR }, 0 },
},
/* PREFIX_EVEX_MAP5_7A */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { VEX_W_TABLE (EVEX_W_MAP5_7A_P_2) },
+ { "vcvttp%XH2qq", { XM, EXxmmqdh, EXxEVexS }, 0 },
{ VEX_W_TABLE (EVEX_W_MAP5_7A_P_3) },
},
/* PREFIX_EVEX_MAP5_7B */
{
{ Bad_Opcode },
{ "vcvtusi2sh{%LQ|}", { XMScalar, VexScalar, EXxEVexR, Edq }, 0 },
- { VEX_W_TABLE (EVEX_W_MAP5_7B_P_2) },
+ { "vcvtp%XH2qq", { XM, EXxmmqdh, EXxEVexR }, 0 },
},
/* PREFIX_EVEX_MAP5_7C */
{
- { VEX_W_TABLE (EVEX_W_MAP5_7C_P_0) },
+ { "vcvttp%XH2uw", { XM, EXxh, EXxEVexS }, 0 },
{ Bad_Opcode },
- { VEX_W_TABLE (EVEX_W_MAP5_7C_P_2) },
+ { "vcvttp%XH2w", { XM, EXxh, EXxEVexS }, 0 },
},
- /* PREFIX_EVEX_MAP5_7D_W_0 */
+ /* PREFIX_EVEX_MAP5_7D */
{
- { "vcvtph2uw", { XM, EXxh, EXxEVexR }, 0 },
- { "vcvtw2ph", { XM, EXxh, EXxEVexR }, 0 },
- { "vcvtph2w", { XM, EXxh, EXxEVexR }, 0 },
- { "vcvtuw2ph", { XM, EXxh, EXxEVexR }, 0 },
+ { "vcvtp%XH2uw", { XM, EXxh, EXxEVexR }, 0 },
+ { "vcvtw2p%XH", { XM, EXxh, EXxEVexR }, 0 },
+ { "vcvtp%XH2w", { XM, EXxh, EXxEVexR }, 0 },
+ { "vcvtuw2p%XH", { XM, EXxh, EXxEVexR }, 0 },
},
/* PREFIX_EVEX_MAP6_13 */
{
- { VEX_W_TABLE (EVEX_W_MAP6_13_P_0) },
+ { "vcvts%XH2ss", { XMScalar, VexScalar, EXw, EXxEVexS }, 0 },
{ Bad_Opcode },
- { VEX_W_TABLE (EVEX_W_MAP6_13_P_2) },
+ { "vcvtp%XH2psx", { XM, EXxmmqh, EXxEVexS }, 0 },
},
/* PREFIX_EVEX_MAP6_56 */
{
@@ -578,9 +479,9 @@
/* PREFIX_EVEX_MAP6_57 */
{
{ Bad_Opcode },
- { "vfmaddcs%XH", { { DistinctDest_Fixup, xmm_mode }, VexScalar, EXd, EXxEVexR }, 0 },
+ { "vfmaddcs%XH", { { DistinctDest_Fixup, scalar_mode }, VexScalar, EXd, EXxEVexR }, 0 },
{ Bad_Opcode },
- { "vfcmaddcs%XH", { { DistinctDest_Fixup, xmm_mode }, VexScalar, EXd, EXxEVexR }, 0 },
+ { "vfcmaddcs%XH", { { DistinctDest_Fixup, scalar_mode }, VexScalar, EXd, EXxEVexR }, 0 },
},
/* PREFIX_EVEX_MAP6_D6 */
{
@@ -592,7 +493,7 @@
/* PREFIX_EVEX_MAP6_D7 */
{
{ Bad_Opcode },
- { "vfmulcs%XH", { { DistinctDest_Fixup, xmm_mode }, VexScalar, EXd, EXxEVexR }, 0 },
+ { "vfmulcs%XH", { { DistinctDest_Fixup, scalar_mode }, VexScalar, EXd, EXxEVexR }, 0 },
{ Bad_Opcode },
- { "vfcmulcs%XH", { { DistinctDest_Fixup, xmm_mode }, VexScalar, EXd, EXxEVexR }, 0 },
+ { "vfcmulcs%XH", { { DistinctDest_Fixup, scalar_mode }, VexScalar, EXd, EXxEVexR }, 0 },
},
diff --git a/opcodes/i386-dis-evex-w.h b/opcodes/i386-dis-evex-w.h
index 62c3d3b9afb..9b4bb6a2924 100644
--- a/opcodes/i386-dis-evex-w.h
+++ b/opcodes/i386-dis-evex-w.h
@@ -1,136 +1,8 @@
- /* EVEX_W_0F10_P_1 */
- {
- { "vmovss", { XMScalar, VexScalarR, EXd }, 0 },
- },
- /* EVEX_W_0F10_P_3 */
- {
- { Bad_Opcode },
- { "vmovsd", { XMScalar, VexScalarR, EXq }, 0 },
- },
- /* EVEX_W_0F11_P_1 */
- {
- { "vmovss", { EXdS, VexScalarR, XMScalar }, 0 },
- },
- /* EVEX_W_0F11_P_3 */
- {
- { Bad_Opcode },
- { "vmovsd", { EXqS, VexScalarR, XMScalar }, 0 },
- },
- /* EVEX_W_0F12_P_0_M_1 */
- {
- { "vmovhlps", { XMM, Vex, EXq }, 0 },
- },
- /* EVEX_W_0F12_P_1 */
- {
- { "vmovsldup", { XM, EXEvexXNoBcst }, 0 },
- },
- /* EVEX_W_0F12_P_3 */
- {
- { Bad_Opcode },
- { "vmovddup", { XM, EXymmq }, 0 },
- },
- /* EVEX_W_0F16_P_0_M_1 */
- {
- { "vmovlhps", { XMM, Vex, EXx }, 0 },
- },
- /* EVEX_W_0F16_P_1 */
- {
- { "vmovshdup", { XM, EXx }, 0 },
- },
- /* EVEX_W_0F51_P_1 */
- {
- { "vsqrtss", { XMScalar, VexScalar, EXd, EXxEVexR }, 0 },
- },
- /* EVEX_W_0F51_P_3 */
- {
- { Bad_Opcode },
- { "vsqrtsd", { XMScalar, VexScalar, EXq, EXxEVexR }, 0 },
- },
- /* EVEX_W_0F58_P_1 */
- {
- { "vaddss", { XMScalar, VexScalar, EXd, EXxEVexR }, 0 },
- },
- /* EVEX_W_0F58_P_3 */
- {
- { Bad_Opcode },
- { "vaddsd", { XMScalar, VexScalar, EXq, EXxEVexR }, 0 },
- },
- /* EVEX_W_0F59_P_1 */
- {
- { "vmulss", { XMScalar, VexScalar, EXd, EXxEVexR }, 0 },
- },
- /* EVEX_W_0F59_P_3 */
- {
- { Bad_Opcode },
- { "vmulsd", { XMScalar, VexScalar, EXq, EXxEVexR }, 0 },
- },
- /* EVEX_W_0F5A_P_0 */
- {
- { "vcvtps2pd", { XM, EXEvexHalfBcstXmmq, EXxEVexS }, 0 },
- },
- /* EVEX_W_0F5A_P_1 */
- {
- { "vcvtss2sd", { XMScalar, VexScalar, EXd, EXxEVexS }, 0 },
- },
- /* EVEX_W_0F5A_P_2 */
- {
- { Bad_Opcode },
- { "vcvtpd2ps%XY", { XMxmmq, EXx, EXxEVexR }, 0 },
- },
- /* EVEX_W_0F5A_P_3 */
- {
- { Bad_Opcode },
- { "vcvtsd2ss", { XMScalar, VexScalar, EXq, EXxEVexR }, 0 },
- },
/* EVEX_W_0F5B_P_0 */
{
{ "vcvtdq2ps", { XM, EXx, EXxEVexR }, 0 },
{ "vcvtqq2ps%XY", { XMxmmq, EXx, EXxEVexR }, 0 },
},
- /* EVEX_W_0F5B_P_1 */
- {
- { "vcvttps2dq", { XM, EXx, EXxEVexS }, 0 },
- },
- /* EVEX_W_0F5B_P_2 */
- {
- { "vcvtps2dq", { XM, EXx, EXxEVexR }, 0 },
- },
- /* EVEX_W_0F5C_P_1 */
- {
- { "vsubss", { XMScalar, VexScalar, EXd, EXxEVexR }, 0 },
- },
- /* EVEX_W_0F5C_P_3 */
- {
- { Bad_Opcode },
- { "vsubsd", { XMScalar, VexScalar, EXq, EXxEVexR }, 0 },
- },
- /* EVEX_W_0F5D_P_1 */
- {
- { "vminss", { XMScalar, VexScalar, EXd, EXxEVexS }, 0 },
- },
- /* EVEX_W_0F5D_P_3 */
- {
- { Bad_Opcode },
- { "vminsd", { XMScalar, VexScalar, EXq, EXxEVexS }, 0 },
- },
- /* EVEX_W_0F5E_P_1 */
- {
- { "vdivss", { XMScalar, VexScalar, EXd, EXxEVexR }, 0 },
- },
- /* EVEX_W_0F5E_P_3 */
- {
- { Bad_Opcode },
- { "vdivsd", { XMScalar, VexScalar, EXq, EXxEVexR }, 0 },
- },
- /* EVEX_W_0F5F_P_1 */
- {
- { "vmaxss", { XMScalar, VexScalar, EXd, EXxEVexS }, 0 },
- },
- /* EVEX_W_0F5F_P_3 */
- {
- { Bad_Opcode },
- { "vmaxsd", { XMScalar, VexScalar, EXq, EXxEVexS }, 0 },
- },
/* EVEX_W_0F62 */
{
{ "vpunpckldq", { XM, Vex, EXx }, PREFIX_DATA },
@@ -258,15 +130,6 @@
{ "vmovdqu8", { EXxS, XM }, 0 },
{ "vmovdqu16", { EXxS, XM }, 0 },
},
- /* EVEX_W_0FC2_P_1 */
- {
- { "vcmpss", { MaskG, VexScalar, EXd, EXxEVexS, CMP }, 0 },
- },
- /* EVEX_W_0FC2_P_3 */
- {
- { Bad_Opcode },
- { "vcmpsd", { MaskG, VexScalar, EXq, EXxEVexS, CMP }, 0 },
- },
/* EVEX_W_0FD2 */
{
{ "vpsrld", { XM, Vex, EXxmm }, PREFIX_DATA },
@@ -291,16 +154,6 @@
{ "vcvtdq2pd", { XM, EXEvexHalfBcstXmmq }, 0 },
{ "vcvtqq2pd", { XM, EXx, EXxEVexR }, 0 },
},
- /* EVEX_W_0FE6_P_2 */
- {
- { Bad_Opcode },
- { "vcvttpd2dq%XY", { XMxmmq, EXx, EXxEVexS }, 0 },
- },
- /* EVEX_W_0FE6_P_3 */
- {
- { Bad_Opcode },
- { "vcvtpd2dq%XY", { XMxmmq, EXx, EXxEVexR }, 0 },
- },
/* EVEX_W_0FE7 */
{
{ "vmovntdq", { EXEvexXNoBcst, XM }, PREFIX_DATA },
@@ -332,11 +185,6 @@
{
{ "vpaddd", { XM, Vex, EXx }, PREFIX_DATA },
},
- /* EVEX_W_0F380D */
- {
- { Bad_Opcode },
- { "vpermilpd", { XM, Vex, EXx }, PREFIX_DATA },
- },
/* EVEX_W_0F3810_P_1 */
{
{ "vpmovuswb", { EXxmmq, XM }, 0 },
@@ -368,10 +216,6 @@
{
{ "vpmovusdw", { EXxmmq, XM }, 0 },
},
- /* EVEX_W_0F3813_P_2 */
- {
- { "vcvtph2ps", { XM, EXxmmq, EXxEVexS }, 0 },
- },
/* EVEX_W_0F3814_P_1 */
{
{ "vpmovusqw", { EXxmmqd, XM }, 0 },
@@ -492,11 +336,6 @@
{
{ MOD_TABLE (MOD_EVEX_0F383A_P_1_W_0) },
},
- /* EVEX_W_0F3852_P_1 */
- {
- { "vdpbf16ps", { XM, Vex, EXx }, 0 },
- { Bad_Opcode },
- },
/* EVEX_W_0F3859 */
{
{ "vbroadcasti32x2", { XM, EXq }, PREFIX_DATA },
@@ -517,21 +356,11 @@
{ Bad_Opcode },
{ "vpshldvw", { XM, Vex, EXx }, PREFIX_DATA },
},
- /* EVEX_W_0F3872_P_1 */
- {
- { "vcvtneps2bf16%XY", { XMxmmq, EXx }, 0 },
- { Bad_Opcode },
- },
/* EVEX_W_0F3872_P_2 */
{
{ Bad_Opcode },
{ "vpshrdvw", { XM, Vex, EXx }, 0 },
},
- /* EVEX_W_0F3872_P_3 */
- {
- { "vcvtne2ps2bf16", { XM, Vex, EXx}, 0 },
- { Bad_Opcode },
- },
/* EVEX_W_0F387A */
{
{ MOD_TABLE (MOD_EVEX_0F387A_W_0) },
@@ -545,29 +374,6 @@
{ Bad_Opcode },
{ "vpmultishiftqb", { XM, Vex, EXx }, PREFIX_DATA },
},
- /* EVEX_W_0F3A05 */
- {
- { Bad_Opcode },
- { "vpermilpd", { XM, EXx, Ib }, PREFIX_DATA },
- },
- /* EVEX_W_0F3A08 */
- {
- { PREFIX_TABLE (PREFIX_EVEX_0F3A08_W_0) },
- },
- /* EVEX_W_0F3A09 */
- {
- { Bad_Opcode },
- { "vrndscalepd", { XM, EXx, EXxEVexS, Ib }, PREFIX_DATA },
- },
- /* EVEX_W_0F3A0A */
- {
- { PREFIX_TABLE (PREFIX_EVEX_0F3A0A_W_0) },
- },
- /* EVEX_W_0F3A0B */
- {
- { Bad_Opcode },
- { "vrndscalesd", { XMScalar, VexScalar, EXq, EXxEVexS, Ib }, PREFIX_DATA },
- },
/* EVEX_W_0F3A18_L_n */
{
{ "vinsertf32x4", { XM, Vex, EXxmm, Ib }, PREFIX_DATA },
@@ -636,62 +442,13 @@
{ Bad_Opcode },
{ "vpshrdw", { XM, Vex, EXx, Ib }, 0 },
},
- /* EVEX_W_MAP5_5A */
- {
- { PREFIX_TABLE (PREFIX_EVEX_MAP5_5A_W_0) },
- { PREFIX_TABLE (PREFIX_EVEX_MAP5_5A_W_1) },
- },
- /* EVEX_W_MAP5_5B */
- {
- { PREFIX_TABLE (PREFIX_EVEX_MAP5_5B_W_0) },
- { PREFIX_TABLE (PREFIX_EVEX_MAP5_5B_W_1) },
- },
- /* EVEX_W_MAP5_78_P_0 */
- {
- { "vcvttph2udq", { XM, EXxmmqh, EXxEVexS }, 0 },
- },
- /* EVEX_W_MAP5_78_P_2 */
- {
- { "vcvttph2uqq", { XM, EXxmmqdh, EXxEVexS }, 0 },
- },
- /* EVEX_W_MAP5_79_P_0 */
+ /* EVEX_W_MAP5_5B_P_0 */
{
- { "vcvtph2udq", { XM, EXxmmqh, EXxEVexR }, 0 },
- },
- /* EVEX_W_MAP5_79_P_2 */
- {
- { "vcvtph2uqq", { XM, EXxmmqdh, EXxEVexR }, 0 },
- },
- /* EVEX_W_MAP5_7A_P_2 */
- {
- { "vcvttph2qq", { XM, EXxmmqdh, EXxEVexS }, 0 },
+ { "vcvtdq2ph%XY", { XMxmmq, EXx, EXxEVexR }, 0 },
+ { "vcvtqq2ph%XZ", { XMM, EXx, EXxEVexR }, 0 },
},
/* EVEX_W_MAP5_7A_P_3 */
{
{ "vcvtudq2ph%XY", { XMxmmq, EXx, EXxEVexR }, 0 },
{ "vcvtuqq2ph%XZ", { XMM, EXx, EXxEVexR }, 0 },
},
- /* EVEX_W_MAP5_7B_P_2 */
- {
- { "vcvtph2qq", { XM, EXxmmqdh, EXxEVexR }, 0 },
- },
- /* EVEX_W_MAP5_7C_P_0 */
- {
- { "vcvttph2uw", { XM, EXxh, EXxEVexS }, 0 },
- },
- /* EVEX_W_MAP5_7C_P_2 */
- {
- { "vcvttph2w", { XM, EXxh, EXxEVexS }, 0 },
- },
- /* EVEX_W_MAP5_7D */
- {
- { PREFIX_TABLE (PREFIX_EVEX_MAP5_7D_W_0) },
- },
- /* EVEX_W_MAP6_13_P_0 */
- {
- { "vcvtsh2ss", { XMM, VexScalar, EXw, EXxEVexS }, 0 },
- },
- /* EVEX_W_MAP6_13_P_2 */
- {
- { "vcvtph2psx", { XM, EXxmmqh, EXxEVexS }, 0 },
- },
diff --git a/opcodes/i386-dis-evex.h b/opcodes/i386-dis-evex.h
index d79c78c1793..176529a475c 100644
--- a/opcodes/i386-dis-evex.h
+++ b/opcodes/i386-dis-evex.h
@@ -20,14 +20,14 @@ static const struct dis386 evex_table[][256] = {
{ Bad_Opcode },
{ Bad_Opcode },
/* 10 */
- { PREFIX_TABLE (PREFIX_EVEX_0F10) },
- { PREFIX_TABLE (PREFIX_EVEX_0F11) },
- { PREFIX_TABLE (PREFIX_EVEX_0F12) },
- { MOD_TABLE (MOD_EVEX_0F13) },
+ { PREFIX_TABLE (PREFIX_VEX_0F10) },
+ { PREFIX_TABLE (PREFIX_VEX_0F11) },
+ { PREFIX_TABLE (PREFIX_VEX_0F12) },
+ { MOD_TABLE (MOD_VEX_0F13) },
{ "vunpcklpX", { XM, Vex, EXx }, PREFIX_OPCODE },
{ "vunpckhpX", { XM, Vex, EXx }, PREFIX_OPCODE },
- { PREFIX_TABLE (PREFIX_EVEX_0F16) },
- { MOD_TABLE (MOD_EVEX_0F17) },
+ { PREFIX_TABLE (PREFIX_VEX_0F16) },
+ { MOD_TABLE (MOD_VEX_0F17) },
/* 18 */
{ Bad_Opcode },
{ Bad_Opcode },
@@ -49,8 +49,8 @@ static const struct dis386 evex_table[][256] = {
/* 28 */
{ "vmovapX", { XM, EXx }, PREFIX_OPCODE },
{ "vmovapX", { EXxS, XM }, PREFIX_OPCODE },
- { PREFIX_TABLE (PREFIX_EVEX_0F2A) },
- { MOD_TABLE (MOD_EVEX_0F2B) },
+ { PREFIX_TABLE (PREFIX_VEX_0F2A) },
+ { MOD_TABLE (MOD_VEX_0F2B) },
{ PREFIX_TABLE (PREFIX_VEX_0F2C) },
{ PREFIX_TABLE (PREFIX_VEX_0F2D) },
{ PREFIX_TABLE (PREFIX_VEX_0F2E) },
@@ -93,7 +93,7 @@ static const struct dis386 evex_table[][256] = {
{ Bad_Opcode },
/* 50 */
{ Bad_Opcode },
- { PREFIX_TABLE (PREFIX_EVEX_0F51) },
+ { PREFIX_TABLE (PREFIX_VEX_0F51) },
{ Bad_Opcode },
{ Bad_Opcode },
{ "vandpX", { XM, Vex, EXx }, PREFIX_OPCODE },
@@ -101,14 +101,14 @@ static const struct dis386 evex_table[][256] = {
{ "vorpX", { XM, Vex, EXx }, PREFIX_OPCODE },
{ "vxorpX", { XM, Vex, EXx }, PREFIX_OPCODE },
/* 58 */
- { PREFIX_TABLE (PREFIX_EVEX_0F58) },
- { PREFIX_TABLE (PREFIX_EVEX_0F59) },
- { PREFIX_TABLE (PREFIX_EVEX_0F5A) },
+ { PREFIX_TABLE (PREFIX_VEX_0F58) },
+ { PREFIX_TABLE (PREFIX_VEX_0F59) },
+ { PREFIX_TABLE (PREFIX_VEX_0F5A) },
{ PREFIX_TABLE (PREFIX_EVEX_0F5B) },
- { PREFIX_TABLE (PREFIX_EVEX_0F5C) },
- { PREFIX_TABLE (PREFIX_EVEX_0F5D) },
- { PREFIX_TABLE (PREFIX_EVEX_0F5E) },
- { PREFIX_TABLE (PREFIX_EVEX_0F5F) },
+ { PREFIX_TABLE (PREFIX_VEX_0F5C) },
+ { PREFIX_TABLE (PREFIX_VEX_0F5D) },
+ { PREFIX_TABLE (PREFIX_VEX_0F5E) },
+ { PREFIX_TABLE (PREFIX_VEX_0F5F) },
/* 60 */
{ "vpunpcklbw", { XM, Vex, EXx }, PREFIX_DATA },
{ "vpunpcklwd", { XM, Vex, EXx }, PREFIX_DATA },
@@ -307,7 +307,7 @@ static const struct dis386 evex_table[][256] = {
{ Bad_Opcode },
{ "vpmulhrsw", { XM, Vex, EXx }, PREFIX_DATA },
{ VEX_W_TABLE (VEX_W_0F380C) },
- { VEX_W_TABLE (EVEX_W_0F380D) },
+ { "vpermilp%XD", { XM, Vex, EXx }, PREFIX_DATA },
{ Bad_Opcode },
{ Bad_Opcode },
/* 10 */
@@ -589,14 +589,14 @@ static const struct dis386 evex_table[][256] = {
{ Bad_Opcode },
{ "valign%DQ", { XM, Vex, EXx, Ib }, PREFIX_DATA },
{ VEX_W_TABLE (VEX_W_0F3A04) },
- { VEX_W_TABLE (EVEX_W_0F3A05) },
+ { "vpermilp%XD", { XM, EXx, Ib }, PREFIX_DATA },
{ Bad_Opcode },
{ Bad_Opcode },
/* 08 */
- { VEX_W_TABLE (EVEX_W_0F3A08) },
- { VEX_W_TABLE (EVEX_W_0F3A09) },
- { VEX_W_TABLE (EVEX_W_0F3A0A) },
- { VEX_W_TABLE (EVEX_W_0F3A0B) },
+ { PREFIX_TABLE (PREFIX_EVEX_0F3A08) },
+ { "vrndscalep%XD", { XM, EXx, EXxEVexS, Ib }, PREFIX_DATA },
+ { PREFIX_TABLE (PREFIX_EVEX_0F3A0A) },
+ { "vrndscales%XD", { XMScalar, VexScalar, EXq, EXxEVexS, Ib }, PREFIX_DATA },
{ Bad_Opcode },
{ Bad_Opcode },
{ Bad_Opcode },
@@ -976,8 +976,8 @@ static const struct dis386 evex_table[][256] = {
/* 58 */
{ PREFIX_TABLE (PREFIX_EVEX_MAP5_58) },
{ PREFIX_TABLE (PREFIX_EVEX_MAP5_59) },
- { VEX_W_TABLE (EVEX_W_MAP5_5A) },
- { VEX_W_TABLE (EVEX_W_MAP5_5B) },
+ { PREFIX_TABLE (PREFIX_EVEX_MAP5_5A) },
+ { PREFIX_TABLE (PREFIX_EVEX_MAP5_5B) },
{ PREFIX_TABLE (PREFIX_EVEX_MAP5_5C) },
{ PREFIX_TABLE (PREFIX_EVEX_MAP5_5D) },
{ PREFIX_TABLE (PREFIX_EVEX_MAP5_5E) },
@@ -1015,7 +1015,7 @@ static const struct dis386 evex_table[][256] = {
{ PREFIX_TABLE (PREFIX_EVEX_MAP5_7A) },
{ PREFIX_TABLE (PREFIX_EVEX_MAP5_7B) },
{ PREFIX_TABLE (PREFIX_EVEX_MAP5_7C) },
- { VEX_W_TABLE (EVEX_W_MAP5_7D) },
+ { PREFIX_TABLE (PREFIX_EVEX_MAP5_7D) },
{ "vmovw", { Edw, XMScalar }, PREFIX_DATA },
{ Bad_Opcode },
/* 80 */
@@ -1216,7 +1216,7 @@ static const struct dis386 evex_table[][256] = {
{ Bad_Opcode },
{ Bad_Opcode },
{ "vscalefp%XH", { XM, Vex, EXxh, EXxEVexR }, PREFIX_DATA },
- { "vscalefs%XH", { XMM, VexScalar, EXw, EXxEVexR }, PREFIX_DATA },
+ { "vscalefs%XH", { XMScalar, VexScalar, EXw, EXxEVexR }, PREFIX_DATA },
{ Bad_Opcode },
{ Bad_Opcode },
/* 30 */
@@ -1241,7 +1241,7 @@ static const struct dis386 evex_table[][256] = {
{ Bad_Opcode },
{ Bad_Opcode },
{ "vgetexpp%XH", { XM, EXxh, EXxEVexS }, PREFIX_DATA },
- { "vgetexps%XH", { XMM, VexScalar, EXw, EXxEVexS }, PREFIX_DATA },
+ { "vgetexps%XH", { XMScalar, VexScalar, EXw, EXxEVexS }, PREFIX_DATA },
{ Bad_Opcode },
{ Bad_Opcode },
{ Bad_Opcode },
@@ -1252,9 +1252,9 @@ static const struct dis386 evex_table[][256] = {
{ Bad_Opcode },
{ Bad_Opcode },
{ "vrcpp%XH", { XM, EXxh }, PREFIX_DATA },
- { "vrcps%XH", { XMM, VexScalar, EXw }, PREFIX_DATA },
+ { "vrcps%XH", { XMScalar, VexScalar, EXw }, PREFIX_DATA },
{ "vrsqrtp%XH", { XM, EXxh }, PREFIX_DATA },
- { "vrsqrts%XH", { XMM, VexScalar, EXw }, PREFIX_DATA },
+ { "vrsqrts%XH", { XMScalar, VexScalar, EXw }, PREFIX_DATA },
/* 50 */
{ Bad_Opcode },
{ Bad_Opcode },
@@ -1338,13 +1338,13 @@ static const struct dis386 evex_table[][256] = {
{ "vfmsubadd132p%XH", { XM, Vex, EXxh, EXxEVexR }, PREFIX_DATA },
/* 98 */
{ "vfmadd132p%XH", { XM, Vex, EXxh, EXxEVexR }, PREFIX_DATA },
- { "vfmadd132s%XH", { XMM, VexScalar, EXw, EXxEVexR }, PREFIX_DATA },
+ { "vfmadd132s%XH", { XMScalar, VexScalar, EXw, EXxEVexR }, PREFIX_DATA },
{ "vfmsub132p%XH", { XM, Vex, EXxh, EXxEVexR }, PREFIX_DATA },
- { "vfmsub132s%XH", { XMM, VexScalar, EXw, EXxEVexR }, PREFIX_DATA },
+ { "vfmsub132s%XH", { XMScalar, VexScalar, EXw, EXxEVexR }, PREFIX_DATA },
{ "vfnmadd132p%XH", { XM, Vex, EXxh, EXxEVexR }, PREFIX_DATA },
- { "vfnmadd132s%XH", { XMM, VexScalar, EXw, EXxEVexR }, PREFIX_DATA },
+ { "vfnmadd132s%XH", { XMScalar, VexScalar, EXw, EXxEVexR }, PREFIX_DATA },
{ "vfnmsub132p%XH", { XM, Vex, EXxh, EXxEVexR }, PREFIX_DATA },
- { "vfnmsub132s%XH", { XMM, VexScalar, EXw, EXxEVexR }, PREFIX_DATA },
+ { "vfnmsub132s%XH", { XMScalar, VexScalar, EXw, EXxEVexR }, PREFIX_DATA },
/* A0 */
{ Bad_Opcode },
{ Bad_Opcode },
@@ -1356,13 +1356,13 @@ static const struct dis386 evex_table[][256] = {
{ "vfmsubadd213p%XH", { XM, Vex, EXxh, EXxEVexR }, PREFIX_DATA },
/* A8 */
{ "vfmadd213p%XH", { XM, Vex, EXxh, EXxEVexR }, PREFIX_DATA },
- { "vfmadd213s%XH", { XMM, VexScalar, EXw, EXxEVexR }, PREFIX_DATA },
+ { "vfmadd213s%XH", { XMScalar, VexScalar, EXw, EXxEVexR }, PREFIX_DATA },
{ "vfmsub213p%XH", { XM, Vex, EXxh, EXxEVexR }, PREFIX_DATA },
- { "vfmsub213s%XH", { XMM, VexScalar, EXw, EXxEVexR }, PREFIX_DATA },
+ { "vfmsub213s%XH", { XMScalar, VexScalar, EXw, EXxEVexR }, PREFIX_DATA },
{ "vfnmadd213p%XH", { XM, Vex, EXxh, EXxEVexR }, PREFIX_DATA },
- { "vfnmadd213s%XH", { XMM, VexScalar, EXw, EXxEVexR }, PREFIX_DATA },
+ { "vfnmadd213s%XH", { XMScalar, VexScalar, EXw, EXxEVexR }, PREFIX_DATA },
{ "vfnmsub213p%XH", { XM, Vex, EXxh, EXxEVexR }, PREFIX_DATA },
- { "vfnmsub213s%XH", { XMM, VexScalar, EXw, EXxEVexR }, PREFIX_DATA },
+ { "vfnmsub213s%XH", { XMScalar, VexScalar, EXw, EXxEVexR }, PREFIX_DATA },
/* B0 */
{ Bad_Opcode },
{ Bad_Opcode },
@@ -1374,13 +1374,13 @@ static const struct dis386 evex_table[][256] = {
{ "vfmsubadd231p%XH", { XM, Vex, EXxh, EXxEVexR }, PREFIX_DATA },
/* B8 */
{ "vfmadd231p%XH", { XM, Vex, EXxh, EXxEVexR }, PREFIX_DATA },
- { "vfmadd231s%XH", { XMM, VexScalar, EXw, EXxEVexR }, PREFIX_DATA },
+ { "vfmadd231s%XH", { XMScalar, VexScalar, EXw, EXxEVexR }, PREFIX_DATA },
{ "vfmsub231p%XH", { XM, Vex, EXxh, EXxEVexR }, PREFIX_DATA },
- { "vfmsub231s%XH", { XMM, VexScalar, EXw, EXxEVexR }, PREFIX_DATA },
+ { "vfmsub231s%XH", { XMScalar, VexScalar, EXw, EXxEVexR }, PREFIX_DATA },
{ "vfnmadd231p%XH", { XM, Vex, EXxh, EXxEVexR }, PREFIX_DATA },
- { "vfnmadd231s%XH", { XMM, VexScalar, EXw, EXxEVexR }, PREFIX_DATA },
+ { "vfnmadd231s%XH", { XMScalar, VexScalar, EXw, EXxEVexR }, PREFIX_DATA },
{ "vfnmsub231p%XH", { XM, Vex, EXxh, EXxEVexR }, PREFIX_DATA },
- { "vfnmsub231s%XH", { XMM, VexScalar, EXw, EXxEVexR }, PREFIX_DATA },
+ { "vfnmsub231s%XH", { XMScalar, VexScalar, EXw, EXxEVexR }, PREFIX_DATA },
/* C0 */
{ Bad_Opcode },
{ Bad_Opcode },
diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c
index 4e0e1559339..1e3266329c1 100644
--- a/opcodes/i386-dis.c
+++ b/opcodes/i386-dis.c
@@ -98,8 +98,7 @@ static void VPCOM_Fixup (instr_info *, int, int);
static void OP_0f07 (instr_info *, int, int);
static void OP_Monitor (instr_info *, int, int);
static void OP_Mwait (instr_info *, int, int);
-static void NOP_Fixup1 (instr_info *, int, int);
-static void NOP_Fixup2 (instr_info *, int, int);
+static void NOP_Fixup (instr_info *, int, int);
static void OP_3DNowSuffix (instr_info *, int, int);
static void CMP_Fixup (instr_info *, int, int);
static void BadOp (instr_info *);
@@ -147,9 +146,13 @@ struct instr_info
int prefixes;
/* REX prefix the current instruction. See below. */
- int rex;
+ unsigned char rex;
/* Bits of REX we've already used. */
- int rex_used;
+ unsigned char rex_used;
+
+ bool need_modrm;
+ bool need_vex;
+ bool has_sib;
/* Flags for ins->prefixes which we somehow handled when printing the
current instruction. */
@@ -191,7 +194,6 @@ struct instr_info
int rm;
}
modrm;
- unsigned char need_modrm;
struct
{
@@ -206,42 +208,26 @@ struct instr_info
int register_specifier;
int length;
int prefix;
- int w;
- int evex;
- int r;
- int v;
int mask_register_specifier;
- int zeroing;
int ll;
- int b;
- int no_broadcast;
+ bool w;
+ bool evex;
+ bool r;
+ bool v;
+ bool zeroing;
+ bool b;
+ bool no_broadcast;
}
vex;
- unsigned char need_vex;
-
- const char **names64;
- const char **names32;
- const char **names16;
- const char **names8;
- const char **names8rex;
- const char **names_seg;
- const char *index64;
- const char *index32;
- const char **index16;
- const char **names_bnd;
- const char **names_mm;
- const char **names_xmm;
- const char **names_ymm;
- const char **names_zmm;
- const char **names_tmm;
- const char **names_mask;
/* Remember if the current op is a jump instruction. */
bool op_is_jump;
+ bool two_source_ops;
+
+ unsigned char op_ad;
+ signed char op_index[MAX_OPERANDS];
char op_out[MAX_OPERANDS][100];
- int op_ad, op_index[MAX_OPERANDS];
- int two_source_ops;
bfd_vma op_address[MAX_OPERANDS];
bfd_vma op_riprel[MAX_OPERANDS];
bfd_vma start_pc;
@@ -254,7 +240,7 @@ struct instr_info
* The function returns the length of this instruction in bytes.
*/
char intel_syntax;
- char intel_mnemonic;
+ bool intel_mnemonic;
char open_char;
char close_char;
char separator_char;
@@ -628,8 +614,6 @@ enum
ymm_mode,
/* quad word, ymmword or zmmword memory operand. */
ymmq_mode,
- /* 32-byte YMM or 16-byte word operand */
- ymmxmm_mode,
/* TMM operand */
tmm_mode,
/* d_mode in 32bit, q_mode in 64bit mode. */
@@ -955,13 +939,6 @@ enum
MOD_XOP_09_12,
- MOD_EVEX_0F12_PREFIX_0,
- MOD_EVEX_0F12_PREFIX_2,
- MOD_EVEX_0F13,
- MOD_EVEX_0F16_PREFIX_0,
- MOD_EVEX_0F16_PREFIX_2,
- MOD_EVEX_0F17,
- MOD_EVEX_0F2B,
MOD_EVEX_0F381A,
MOD_EVEX_0F381B,
MOD_EVEX_0F3828_P_1,
@@ -1153,20 +1130,7 @@ enum
PREFIX_VEX_0F38F7_L_0,
PREFIX_VEX_0F3AF0_L_0,
- PREFIX_EVEX_0F10,
- PREFIX_EVEX_0F11,
- PREFIX_EVEX_0F12,
- PREFIX_EVEX_0F16,
- PREFIX_EVEX_0F2A,
- PREFIX_EVEX_0F51,
- PREFIX_EVEX_0F58,
- PREFIX_EVEX_0F59,
- PREFIX_EVEX_0F5A,
PREFIX_EVEX_0F5B,
- PREFIX_EVEX_0F5C,
- PREFIX_EVEX_0F5D,
- PREFIX_EVEX_0F5E,
- PREFIX_EVEX_0F5F,
PREFIX_EVEX_0F6F,
PREFIX_EVEX_0F70,
PREFIX_EVEX_0F78,
@@ -1212,8 +1176,8 @@ enum
PREFIX_EVEX_0F38AA,
PREFIX_EVEX_0F38AB,
- PREFIX_EVEX_0F3A08_W_0,
- PREFIX_EVEX_0F3A0A_W_0,
+ PREFIX_EVEX_0F3A08,
+ PREFIX_EVEX_0F3A0A,
PREFIX_EVEX_0F3A26,
PREFIX_EVEX_0F3A27,
PREFIX_EVEX_0F3A56,
@@ -1233,10 +1197,8 @@ enum
PREFIX_EVEX_MAP5_51,
PREFIX_EVEX_MAP5_58,
PREFIX_EVEX_MAP5_59,
- PREFIX_EVEX_MAP5_5A_W_0,
- PREFIX_EVEX_MAP5_5A_W_1,
- PREFIX_EVEX_MAP5_5B_W_0,
- PREFIX_EVEX_MAP5_5B_W_1,
+ PREFIX_EVEX_MAP5_5A,
+ PREFIX_EVEX_MAP5_5B,
PREFIX_EVEX_MAP5_5C,
PREFIX_EVEX_MAP5_5D,
PREFIX_EVEX_MAP5_5E,
@@ -1246,7 +1208,7 @@ enum
PREFIX_EVEX_MAP5_7A,
PREFIX_EVEX_MAP5_7B,
PREFIX_EVEX_MAP5_7C,
- PREFIX_EVEX_MAP5_7D_W_0,
+ PREFIX_EVEX_MAP5_7D,
PREFIX_EVEX_MAP6_13,
PREFIX_EVEX_MAP6_56,
@@ -1623,36 +1585,7 @@ enum
VEX_W_0FXOP_09_E2_L_0,
VEX_W_0FXOP_09_E3_L_0,
- EVEX_W_0F10_P_1,
- EVEX_W_0F10_P_3,
- EVEX_W_0F11_P_1,
- EVEX_W_0F11_P_3,
- EVEX_W_0F12_P_0_M_1,
- EVEX_W_0F12_P_1,
- EVEX_W_0F12_P_3,
- EVEX_W_0F16_P_0_M_1,
- EVEX_W_0F16_P_1,
- EVEX_W_0F51_P_1,
- EVEX_W_0F51_P_3,
- EVEX_W_0F58_P_1,
- EVEX_W_0F58_P_3,
- EVEX_W_0F59_P_1,
- EVEX_W_0F59_P_3,
- EVEX_W_0F5A_P_0,
- EVEX_W_0F5A_P_1,
- EVEX_W_0F5A_P_2,
- EVEX_W_0F5A_P_3,
EVEX_W_0F5B_P_0,
- EVEX_W_0F5B_P_1,
- EVEX_W_0F5B_P_2,
- EVEX_W_0F5C_P_1,
- EVEX_W_0F5C_P_3,
- EVEX_W_0F5D_P_1,
- EVEX_W_0F5D_P_3,
- EVEX_W_0F5E_P_1,
- EVEX_W_0F5E_P_3,
- EVEX_W_0F5F_P_1,
- EVEX_W_0F5F_P_3,
EVEX_W_0F62,
EVEX_W_0F66,
EVEX_W_0F6A,
@@ -1680,15 +1613,11 @@ enum
EVEX_W_0F7F_P_1,
EVEX_W_0F7F_P_2,
EVEX_W_0F7F_P_3,
- EVEX_W_0FC2_P_1,
- EVEX_W_0FC2_P_3,
EVEX_W_0FD2,
EVEX_W_0FD3,
EVEX_W_0FD4,
EVEX_W_0FD6,
EVEX_W_0FE6_P_1,
- EVEX_W_0FE6_P_2,
- EVEX_W_0FE6_P_3,
EVEX_W_0FE7,
EVEX_W_0FF2,
EVEX_W_0FF3,
@@ -1696,7 +1625,7 @@ enum
EVEX_W_0FFA,
EVEX_W_0FFB,
EVEX_W_0FFE,
- EVEX_W_0F380D,
+
EVEX_W_0F3810_P_1,
EVEX_W_0F3810_P_2,
EVEX_W_0F3811_P_1,
@@ -1704,7 +1633,6 @@ enum
EVEX_W_0F3812_P_1,
EVEX_W_0F3812_P_2,
EVEX_W_0F3813_P_1,
- EVEX_W_0F3813_P_2,
EVEX_W_0F3814_P_1,
EVEX_W_0F3815_P_1,
EVEX_W_0F3819_L_n,
@@ -1733,23 +1661,15 @@ enum
EVEX_W_0F3835_P_2,
EVEX_W_0F3837,
EVEX_W_0F383A_P_1,
- EVEX_W_0F3852_P_1,
EVEX_W_0F3859,
EVEX_W_0F385A_M_0_L_n,
EVEX_W_0F385B_M_0_L_2,
EVEX_W_0F3870,
- EVEX_W_0F3872_P_1,
EVEX_W_0F3872_P_2,
- EVEX_W_0F3872_P_3,
EVEX_W_0F387A,
EVEX_W_0F387B,
EVEX_W_0F3883,
- EVEX_W_0F3A05,
- EVEX_W_0F3A08,
- EVEX_W_0F3A09,
- EVEX_W_0F3A0A,
- EVEX_W_0F3A0B,
EVEX_W_0F3A18_L_n,
EVEX_W_0F3A19_L_n,
EVEX_W_0F3A1A_L_2,
@@ -1765,21 +1685,8 @@ enum
EVEX_W_0F3A70,
EVEX_W_0F3A72,
- EVEX_W_MAP5_5A,
- EVEX_W_MAP5_5B,
- EVEX_W_MAP5_78_P_0,
- EVEX_W_MAP5_78_P_2,
- EVEX_W_MAP5_79_P_0,
- EVEX_W_MAP5_79_P_2,
- EVEX_W_MAP5_7A_P_2,
+ EVEX_W_MAP5_5B_P_0,
EVEX_W_MAP5_7A_P_3,
- EVEX_W_MAP5_7B_P_2,
- EVEX_W_MAP5_7C_P_0,
- EVEX_W_MAP5_7C_P_2,
- EVEX_W_MAP5_7D,
-
- EVEX_W_MAP6_13_P_0,
- EVEX_W_MAP6_13_P_2,
};
typedef void (*op_rtn) (instr_info *ins, int bytemode, int sizeflag);
@@ -1840,7 +1747,9 @@ struct dis386 {
"XZ" => print 'x', 'y', or 'z' if suffix_always is true or no
register operands and no broadcast.
"XW" => print 's', 'd' depending on the VEX.W bit (for FMA)
+ "XD" => print 'd' if !EVEX or EVEX.W=1, EVEX.W=0 is not a valid encoding
"XH" => print 'h' if EVEX.W=0, EVEX.W=1 is not a valid encoding (for FP16)
+ "XS" => print 's' if !EVEX or EVEX.W=0, EVEX.W=1 is not a valid encoding
"XV" => print "{vex3}" pseudo prefix
"LQ" => print 'l' ('d' in Intel mode) or 'q' for memory operand, cond
being false, or no operand at all in 64bit mode, or if suffix_always
@@ -2442,7 +2351,7 @@ static const struct dis386 dis386_twobyte[] = {
{ "ud0S", { Gv, Ev }, 0 },
};
-static const unsigned char onebyte_has_modrm[256] = {
+static const bool onebyte_has_modrm[256] = {
/* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
/* ------------------------------- */
/* 00 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 00 */
@@ -2465,7 +2374,7 @@ static const unsigned char onebyte_has_modrm[256] = {
/* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
};
-static const unsigned char twobyte_has_modrm[256] = {
+static const bool twobyte_has_modrm[256] = {
/* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
/* ------------------------------- */
/* 00 */ 1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1, /* 0f */
@@ -2500,90 +2409,48 @@ struct op
need to update onebyte_has_modrm or twobyte_has_modrm. */
#define MODRM_CHECK if (!ins->need_modrm) abort ()
-static const char *intel_names64[] = {
- "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi",
- "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
-};
-static const char *intel_names32[] = {
- "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi",
- "r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d"
-};
-static const char *intel_names16[] = {
- "ax", "cx", "dx", "bx", "sp", "bp", "si", "di",
- "r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w"
-};
-static const char *intel_names8[] = {
- "al", "cl", "dl", "bl", "ah", "ch", "dh", "bh",
-};
-static const char *intel_names8rex[] = {
- "al", "cl", "dl", "bl", "spl", "bpl", "sil", "dil",
- "r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b", "r15b"
-};
-static const char *intel_names_seg[] = {
- "es", "cs", "ss", "ds", "fs", "gs", "?", "?",
-};
-static const char *intel_index64 = "riz";
-static const char *intel_index32 = "eiz";
-static const char *intel_index16[] = {
+static const char *const intel_index16[] = {
"bx+si", "bx+di", "bp+si", "bp+di", "si", "di", "bp", "bx"
};
-static const char *att_names64[] = {
+static const char *const att_names64[] = {
"%rax", "%rcx", "%rdx", "%rbx", "%rsp", "%rbp", "%rsi", "%rdi",
"%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15"
};
-static const char *att_names32[] = {
+static const char *const att_names32[] = {
"%eax", "%ecx", "%edx", "%ebx", "%esp", "%ebp", "%esi", "%edi",
"%r8d", "%r9d", "%r10d", "%r11d", "%r12d", "%r13d", "%r14d", "%r15d"
};
-static const char *att_names16[] = {
+static const char *const att_names16[] = {
"%ax", "%cx", "%dx", "%bx", "%sp", "%bp", "%si", "%di",
"%r8w", "%r9w", "%r10w", "%r11w", "%r12w", "%r13w", "%r14w", "%r15w"
};
-static const char *att_names8[] = {
+static const char *const att_names8[] = {
"%al", "%cl", "%dl", "%bl", "%ah", "%ch", "%dh", "%bh",
};
-static const char *att_names8rex[] = {
+static const char *const att_names8rex[] = {
"%al", "%cl", "%dl", "%bl", "%spl", "%bpl", "%sil", "%dil",
"%r8b", "%r9b", "%r10b", "%r11b", "%r12b", "%r13b", "%r14b", "%r15b"
};
-static const char *att_names_seg[] = {
+static const char *const att_names_seg[] = {
"%es", "%cs", "%ss", "%ds", "%fs", "%gs", "%?", "%?",
};
-static const char *att_index64 = "%riz";
-static const char *att_index32 = "%eiz";
-static const char *att_index16[] = {
+static const char att_index64[] = "%riz";
+static const char att_index32[] = "%eiz";
+static const char *const att_index16[] = {
"%bx,%si", "%bx,%di", "%bp,%si", "%bp,%di", "%si", "%di", "%bp", "%bx"
};
-static const char *intel_names_mm[] = {
- "mm0", "mm1", "mm2", "mm3",
- "mm4", "mm5", "mm6", "mm7"
-};
-static const char *att_names_mm[] = {
+static const char *const att_names_mm[] = {
"%mm0", "%mm1", "%mm2", "%mm3",
"%mm4", "%mm5", "%mm6", "%mm7"
};
-static const char *intel_names_bnd[] = {
- "bnd0", "bnd1", "bnd2", "bnd3"
-};
-
-static const char *att_names_bnd[] = {
+static const char *const att_names_bnd[] = {
"%bnd0", "%bnd1", "%bnd2", "%bnd3"
};
-static const char *intel_names_xmm[] = {
- "xmm0", "xmm1", "xmm2", "xmm3",
- "xmm4", "xmm5", "xmm6", "xmm7",
- "xmm8", "xmm9", "xmm10", "xmm11",
- "xmm12", "xmm13", "xmm14", "xmm15",
- "xmm16", "xmm17", "xmm18", "xmm19",
- "xmm20", "xmm21", "xmm22", "xmm23",
- "xmm24", "xmm25", "xmm26", "xmm27",
- "xmm28", "xmm29", "xmm30", "xmm31"
-};
-static const char *att_names_xmm[] = {
+static const char *const att_names_xmm[] = {
"%xmm0", "%xmm1", "%xmm2", "%xmm3",
"%xmm4", "%xmm5", "%xmm6", "%xmm7",
"%xmm8", "%xmm9", "%xmm10", "%xmm11",
@@ -2594,17 +2461,7 @@ static const char *att_names_xmm[] = {
"%xmm28", "%xmm29", "%xmm30", "%xmm31"
};
-static const char *intel_names_ymm[] = {
- "ymm0", "ymm1", "ymm2", "ymm3",
- "ymm4", "ymm5", "ymm6", "ymm7",
- "ymm8", "ymm9", "ymm10", "ymm11",
- "ymm12", "ymm13", "ymm14", "ymm15",
- "ymm16", "ymm17", "ymm18", "ymm19",
- "ymm20", "ymm21", "ymm22", "ymm23",
- "ymm24", "ymm25", "ymm26", "ymm27",
- "ymm28", "ymm29", "ymm30", "ymm31"
-};
-static const char *att_names_ymm[] = {
+static const char *const att_names_ymm[] = {
"%ymm0", "%ymm1", "%ymm2", "%ymm3",
"%ymm4", "%ymm5", "%ymm6", "%ymm7",
"%ymm8", "%ymm9", "%ymm10", "%ymm11",
@@ -2615,17 +2472,7 @@ static const char *att_names_ymm[] = {
"%ymm28", "%ymm29", "%ymm30", "%ymm31"
};
-static const char *intel_names_zmm[] = {
- "zmm0", "zmm1", "zmm2", "zmm3",
- "zmm4", "zmm5", "zmm6", "zmm7",
- "zmm8", "zmm9", "zmm10", "zmm11",
- "zmm12", "zmm13", "zmm14", "zmm15",
- "zmm16", "zmm17", "zmm18", "zmm19",
- "zmm20", "zmm21", "zmm22", "zmm23",
- "zmm24", "zmm25", "zmm26", "zmm27",
- "zmm28", "zmm29", "zmm30", "zmm31"
-};
-static const char *att_names_zmm[] = {
+static const char *const att_names_zmm[] = {
"%zmm0", "%zmm1", "%zmm2", "%zmm3",
"%zmm4", "%zmm5", "%zmm6", "%zmm7",
"%zmm8", "%zmm9", "%zmm10", "%zmm11",
@@ -2636,19 +2483,12 @@ static const char *att_names_zmm[] = {
"%zmm28", "%zmm29", "%zmm30", "%zmm31"
};
-static const char *intel_names_tmm[] = {
- "tmm0", "tmm1", "tmm2", "tmm3",
- "tmm4", "tmm5", "tmm6", "tmm7"
-};
-static const char *att_names_tmm[] = {
+static const char *const att_names_tmm[] = {
"%tmm0", "%tmm1", "%tmm2", "%tmm3",
"%tmm4", "%tmm5", "%tmm6", "%tmm7"
};
-static const char *intel_names_mask[] = {
- "k0", "k1", "k2", "k3", "k4", "k5", "k6", "k7"
-};
-static const char *att_names_mask[] = {
+static const char *const att_names_mask[] = {
"%k0", "%k1", "%k2", "%k3", "%k4", "%k5", "%k6", "%k7"
};
@@ -3072,9 +2912,9 @@ static const struct dis386 reg_table[][8] = {
static const struct dis386 prefix_table[][4] = {
/* PREFIX_90 */
{
- { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } }, 0 },
+ { "xchgS", { { NOP_Fixup, 0 }, { NOP_Fixup, 1 } }, 0 },
{ "pause", { XX }, 0 },
- { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } }, 0 },
+ { "xchgS", { { NOP_Fixup, 0 }, { NOP_Fixup, 1 } }, 0 },
{ NULL, { { NULL, 0 } }, PREFIX_IGNORED }
},
@@ -3716,41 +3556,41 @@ static const struct dis386 prefix_table[][4] = {
/* PREFIX_VEX_0F10 */
{
- { "vmovups", { XM, EXx }, 0 },
- { "vmovss", { XMScalar, VexScalarR, EXd }, 0 },
- { "vmovupd", { XM, EXx }, 0 },
- { "vmovsd", { XMScalar, VexScalarR, EXq }, 0 },
+ { "vmovupX", { XM, EXEvexXNoBcst }, PREFIX_OPCODE },
+ { "vmovs%XS", { XMScalar, VexScalarR, EXd }, 0 },
+ { "vmovupX", { XM, EXEvexXNoBcst }, PREFIX_OPCODE },
+ { "vmovs%XD", { XMScalar, VexScalarR, EXq }, 0 },
},
/* PREFIX_VEX_0F11 */
{
- { "vmovups", { EXxS, XM }, 0 },
- { "vmovss", { EXdS, VexScalarR, XMScalar }, 0 },
- { "vmovupd", { EXxS, XM }, 0 },
- { "vmovsd", { EXqS, VexScalarR, XMScalar }, 0 },
+ { "vmovupX", { EXxS, XM }, PREFIX_OPCODE },
+ { "vmovs%XS", { EXdS, VexScalarR, XMScalar }, 0 },
+ { "vmovupX", { EXxS, XM }, PREFIX_OPCODE },
+ { "vmovs%XD", { EXqS, VexScalarR, XMScalar }, 0 },
},
/* PREFIX_VEX_0F12 */
{
{ MOD_TABLE (MOD_VEX_0F12_PREFIX_0) },
- { "vmovsldup", { XM, EXx }, 0 },
+ { "vmov%XSldup", { XM, EXEvexXNoBcst }, 0 },
{ MOD_TABLE (MOD_VEX_0F12_PREFIX_2) },
- { "vmovddup", { XM, EXymmq }, 0 },
+ { "vmov%XDdup", { XM, EXymmq }, 0 },
},
/* PREFIX_VEX_0F16 */
{
{ MOD_TABLE (MOD_VEX_0F16_PREFIX_0) },
- { "vmovshdup", { XM, EXx }, 0 },
+ { "vmov%XShdup", { XM, EXEvexXNoBcst }, 0 },
{ MOD_TABLE (MOD_VEX_0F16_PREFIX_2) },
},
/* PREFIX_VEX_0F2A */
{
{ Bad_Opcode },
- { "vcvtsi2ss{%LQ|}", { XMScalar, VexScalar, Edq }, 0 },
+ { "vcvtsi2ss{%LQ|}", { XMScalar, VexScalar, EXxEVexR, Edq }, 0 },
{ Bad_Opcode },
- { "vcvtsi2sd{%LQ|}", { XMScalar, VexScalar, Edq }, 0 },
+ { "vcvtsi2sd{%LQ|}", { XMScalar, VexScalar, EXxEVexR64, Edq }, 0 },
},
/* PREFIX_VEX_0F2C */
@@ -3895,10 +3735,10 @@ static const struct dis386 prefix_table[][4] = {
/* PREFIX_VEX_0F51 */
{
- { "vsqrtps", { XM, EXx }, 0 },
- { "vsqrtss", { XMScalar, VexScalar, EXd }, 0 },
- { "vsqrtpd", { XM, EXx }, 0 },
- { "vsqrtsd", { XMScalar, VexScalar, EXq }, 0 },
+ { "vsqrtpX", { XM, EXx, EXxEVexR }, PREFIX_OPCODE },
+ { "vsqrts%XS", { XMScalar, VexScalar, EXd, EXxEVexR }, 0 },
+ { "vsqrtpX", { XM, EXx, EXxEVexR }, PREFIX_OPCODE },
+ { "vsqrts%XD", { XMScalar, VexScalar, EXq, EXxEVexR }, 0 },
},
/* PREFIX_VEX_0F52 */
@@ -3915,26 +3755,26 @@ static const struct dis386 prefix_table[][4] = {
/* PREFIX_VEX_0F58 */
{
- { "vaddps", { XM, Vex, EXx }, 0 },
- { "vaddss", { XMScalar, VexScalar, EXd }, 0 },
- { "vaddpd", { XM, Vex, EXx }, 0 },
- { "vaddsd", { XMScalar, VexScalar, EXq }, 0 },
+ { "vaddpX", { XM, Vex, EXx, EXxEVexR }, PREFIX_OPCODE },
+ { "vadds%XS", { XMScalar, VexScalar, EXd, EXxEVexR }, 0 },
+ { "vaddpX", { XM, Vex, EXx, EXxEVexR }, PREFIX_OPCODE },
+ { "vadds%XD", { XMScalar, VexScalar, EXq, EXxEVexR }, 0 },
},
/* PREFIX_VEX_0F59 */
{
- { "vmulps", { XM, Vex, EXx }, 0 },
- { "vmulss", { XMScalar, VexScalar, EXd }, 0 },
- { "vmulpd", { XM, Vex, EXx }, 0 },
- { "vmulsd", { XMScalar, VexScalar, EXq }, 0 },
+ { "vmulpX", { XM, Vex, EXx, EXxEVexR }, PREFIX_OPCODE },
+ { "vmuls%XS", { XMScalar, VexScalar, EXd, EXxEVexR }, 0 },
+ { "vmulpX", { XM, Vex, EXx, EXxEVexR }, PREFIX_OPCODE },
+ { "vmuls%XD", { XMScalar, VexScalar, EXq, EXxEVexR }, 0 },
},
/* PREFIX_VEX_0F5A */
{
- { "vcvtps2pd", { XM, EXxmmq }, 0 },
- { "vcvtss2sd", { XMScalar, VexScalar, EXd }, 0 },
- { "vcvtpd2ps%XY",{ XMM, EXx }, 0 },
- { "vcvtsd2ss", { XMScalar, VexScalar, EXq }, 0 },
+ { "vcvtp%XS2pd", { XM, EXEvexHalfBcstXmmq, EXxEVexS }, 0 },
+ { "vcvts%XS2sd", { XMScalar, VexScalar, EXd, EXxEVexS }, 0 },
+ { "vcvtp%XD2ps%XY", { XMxmmq, EXx, EXxEVexR }, 0 },
+ { "vcvts%XD2ss", { XMScalar, VexScalar, EXq, EXxEVexR }, 0 },
},
/* PREFIX_VEX_0F5B */
@@ -3946,34 +3786,34 @@ static const struct dis386 prefix_table[][4] = {
/* PREFIX_VEX_0F5C */
{
- { "vsubps", { XM, Vex, EXx }, 0 },
- { "vsubss", { XMScalar, VexScalar, EXd }, 0 },
- { "vsubpd", { XM, Vex, EXx }, 0 },
- { "vsubsd", { XMScalar, VexScalar, EXq }, 0 },
+ { "vsubpX", { XM, Vex, EXx, EXxEVexR }, PREFIX_OPCODE },
+ { "vsubs%XS", { XMScalar, VexScalar, EXd, EXxEVexR }, 0 },
+ { "vsubpX", { XM, Vex, EXx, EXxEVexR }, PREFIX_OPCODE },
+ { "vsubs%XD", { XMScalar, VexScalar, EXq, EXxEVexR }, 0 },
},
/* PREFIX_VEX_0F5D */
{
- { "vminps", { XM, Vex, EXx }, 0 },
- { "vminss", { XMScalar, VexScalar, EXd }, 0 },
- { "vminpd", { XM, Vex, EXx }, 0 },
- { "vminsd", { XMScalar, VexScalar, EXq }, 0 },
+ { "vminpX", { XM, Vex, EXx, EXxEVexS }, PREFIX_OPCODE },
+ { "vmins%XS", { XMScalar, VexScalar, EXd, EXxEVexS }, 0 },
+ { "vminpX", { XM, Vex, EXx, EXxEVexS }, PREFIX_OPCODE },
+ { "vmins%XD", { XMScalar, VexScalar, EXq, EXxEVexS }, 0 },
},
/* PREFIX_VEX_0F5E */
{
- { "vdivps", { XM, Vex, EXx }, 0 },
- { "vdivss", { XMScalar, VexScalar, EXd }, 0 },
- { "vdivpd", { XM, Vex, EXx }, 0 },
- { "vdivsd", { XMScalar, VexScalar, EXq }, 0 },
+ { "vdivpX", { XM, Vex, EXx, EXxEVexR }, PREFIX_OPCODE },
+ { "vdivs%XS", { XMScalar, VexScalar, EXd, EXxEVexR }, 0 },
+ { "vdivpX", { XM, Vex, EXx, EXxEVexR }, PREFIX_OPCODE },
+ { "vdivs%XD", { XMScalar, VexScalar, EXq, EXxEVexR }, 0 },
},
/* PREFIX_VEX_0F5F */
{
- { "vmaxps", { XM, Vex, EXx }, 0 },
- { "vmaxss", { XMScalar, VexScalar, EXd }, 0 },
- { "vmaxpd", { XM, Vex, EXx }, 0 },
- { "vmaxsd", { XMScalar, VexScalar, EXq }, 0 },
+ { "vmaxpX", { XM, Vex, EXx, EXxEVexS }, PREFIX_OPCODE },
+ { "vmaxs%XS", { XMScalar, VexScalar, EXd, EXxEVexS }, 0 },
+ { "vmaxpX", { XM, Vex, EXx, EXxEVexS }, PREFIX_OPCODE },
+ { "vmaxs%XD", { XMScalar, VexScalar, EXq, EXxEVexS }, 0 },
},
/* PREFIX_VEX_0F6F */
@@ -6832,12 +6672,12 @@ static const struct dis386 vex_table[][256] = {
static const struct dis386 vex_len_table[][2] = {
/* VEX_LEN_0F12_P_0_M_0 / VEX_LEN_0F12_P_2_M_0 */
{
- { "vmovlpX", { XM, Vex, EXq }, 0 },
+ { "vmovlpX", { XM, Vex, EXq }, PREFIX_OPCODE },
},
/* VEX_LEN_0F12_P_0_M_1 */
{
- { "vmovhlps", { XM, Vex, EXq }, 0 },
+ { "vmovhlp%XS", { XM, Vex, EXq }, 0 },
},
/* VEX_LEN_0F13_M_0 */
@@ -6847,12 +6687,12 @@ static const struct dis386 vex_len_table[][2] = {
/* VEX_LEN_0F16_P_0_M_0 / VEX_LEN_0F16_P_2_M_0 */
{
- { "vmovhpX", { XM, Vex, EXq }, 0 },
+ { "vmovhpX", { XM, Vex, EXq }, PREFIX_OPCODE },
},
/* VEX_LEN_0F16_P_0_M_1 */
{
- { "vmovlhps", { XM, Vex, EXq }, 0 },
+ { "vmovlhp%XS", { XM, Vex, EXq }, 0 },
},
/* VEX_LEN_0F17_M_0 */
@@ -9192,7 +9032,7 @@ get_valid_dis386 (const struct dis386 *dp, instr_info *ins)
ins->vex.prefix = REPNE_PREFIX_OPCODE;
break;
}
- ins->need_vex = 1;
+ ins->need_vex = true;
ins->codep++;
vindex = *ins->codep++;
dp = &xop_table[vex_table_index][vindex];
@@ -9258,7 +9098,7 @@ get_valid_dis386 (const struct dis386 *dp, instr_info *ins)
ins->vex.prefix = REPNE_PREFIX_OPCODE;
break;
}
- ins->need_vex = 1;
+ ins->need_vex = true;
ins->codep++;
vindex = *ins->codep++;
dp = &vex_table[vex_table_index][vindex];
@@ -9296,7 +9136,7 @@ get_valid_dis386 (const struct dis386 *dp, instr_info *ins)
ins->vex.prefix = REPNE_PREFIX_OPCODE;
break;
}
- ins->need_vex = 1;
+ ins->need_vex = true;
ins->codep++;
vindex = *ins->codep++;
dp = &vex_table[dp->op[1].bytemode][vindex];
@@ -9315,13 +9155,13 @@ get_valid_dis386 (const struct dis386 *dp, instr_info *ins)
if (!ins->need_vex)
abort ();
- dp = &vex_w_table[dp->op[1].bytemode][ins->vex.w ? 1 : 0];
+ dp = &vex_w_table[dp->op[1].bytemode][ins->vex.w];
break;
case USE_EVEX_TABLE:
- ins->two_source_ops = 0;
+ ins->two_source_ops = false;
/* EVEX prefix. */
- ins->vex.evex = 1;
+ ins->vex.evex = true;
FETCH_DATA (ins->info, ins->codep + 4);
/* The first byte after 0x62. */
ins->rex = ~(*ins->codep >> 5) & 0x7;
@@ -9379,7 +9219,7 @@ get_valid_dis386 (const struct dis386 *dp, instr_info *ins)
/* Remember the static rounding bits. */
ins->vex.ll = (*ins->codep >> 5) & 3;
- ins->vex.b = (*ins->codep & 0x10) != 0;
+ ins->vex.b = *ins->codep & 0x10;
ins->vex.v = *ins->codep & 0x8;
ins->vex.mask_register_specifier = *ins->codep & 0x7;
@@ -9389,10 +9229,10 @@ get_valid_dis386 (const struct dis386 *dp, instr_info *ins)
{
/* In 16/32-bit mode silently ignore following bits. */
ins->rex &= ~REX_B;
- ins->vex.r = 1;
+ ins->vex.r = true;
}
- ins->need_vex = 1;
+ ins->need_vex = true;
ins->codep++;
vindex = *ins->codep++;
dp = &evex_table[vex_table_index][vindex];
@@ -9451,7 +9291,18 @@ get_sib (instr_info *ins, int sizeflag)
ins->sib.index = (ins->codep[1] >> 3) & 7;
ins->sib.scale = (ins->codep[1] >> 6) & 3;
ins->sib.base = ins->codep[1] & 7;
+ ins->has_sib = true;
}
+ else
+ ins->has_sib = false;
+}
+
+/* Like oappend (below), but S is a string starting with '%'.
+ In Intel syntax, the '%' is elided. */
+static void
+oappend_maybe_intel (instr_info *ins, const char *s)
+{
+ oappend (ins, s + ins->intel_syntax);
}
static int
@@ -9508,13 +9359,13 @@ print_insn (bfd_vma pc, instr_info *ins)
{
ins->intel_syntax = 1;
if (startswith (p + 5, "-mnemonic"))
- ins->intel_mnemonic = 1;
+ ins->intel_mnemonic = true;
}
else if (startswith (p, "att"))
{
ins->intel_syntax = 0;
if (startswith (p + 3, "-mnemonic"))
- ins->intel_mnemonic = 0;
+ ins->intel_mnemonic = false;
}
else if (startswith (p, "addr"))
{
@@ -9550,29 +9401,13 @@ print_insn (bfd_vma pc, instr_info *ins)
if (ins->address_mode == mode_64bit && sizeof (bfd_vma) < 8)
{
- (*ins->info->fprintf_func) (ins->info->stream,
- _("64-bit address is disabled"));
+ (*ins->info->fprintf_styled_func) (ins->info->stream, dis_style_text,
+ _("64-bit address is disabled"));
return -1;
}
if (ins->intel_syntax)
{
- ins->names64 = intel_names64;
- ins->names32 = intel_names32;
- ins->names16 = intel_names16;
- ins->names8 = intel_names8;
- ins->names8rex = intel_names8rex;
- ins->names_seg = intel_names_seg;
- ins->names_mm = intel_names_mm;
- ins->names_bnd = intel_names_bnd;
- ins->names_xmm = intel_names_xmm;
- ins->names_ymm = intel_names_ymm;
- ins->names_zmm = intel_names_zmm;
- ins->names_tmm = intel_names_tmm;
- ins->index64 = intel_index64;
- ins->index32 = intel_index32;
- ins->names_mask = intel_names_mask;
- ins->index16 = intel_index16;
ins->open_char = '[';
ins->close_char = ']';
ins->separator_char = '+';
@@ -9580,22 +9415,6 @@ print_insn (bfd_vma pc, instr_info *ins)
}
else
{
- ins->names64 = att_names64;
- ins->names32 = att_names32;
- ins->names16 = att_names16;
- ins->names8 = att_names8;
- ins->names8rex = att_names8rex;
- ins->names_seg = att_names_seg;
- ins->names_mm = att_names_mm;
- ins->names_bnd = att_names_bnd;
- ins->names_xmm = att_names_xmm;
- ins->names_ymm = att_names_ymm;
- ins->names_zmm = att_names_zmm;
- ins->names_tmm = att_names_tmm;
- ins->index64 = att_index64;
- ins->index32 = att_index32;
- ins->names_mask = att_names_mask;
- ins->index16 = att_index16;
ins->open_char = '(';
ins->close_char = ')';
ins->separator_char = ',';
@@ -9603,12 +9422,8 @@ print_insn (bfd_vma pc, instr_info *ins)
}
/* The output looks better if we put 7 bytes on a line, since that
- puts most long word instructions on a single line. Use 8 bytes
- for Intel L1OM. */
- if ((ins->info->mach & bfd_mach_l1om) != 0)
- ins->info->bytes_per_line = 8;
- else
- ins->info->bytes_per_line = 7;
+ puts most long word instructions on a single line. */
+ ins->info->bytes_per_line = 7;
ins->info->private_data = &priv;
priv.max_fetched = priv.the_buffer;
@@ -9636,12 +9451,16 @@ print_insn (bfd_vma pc, instr_info *ins)
{
name = prefix_name (ins, priv.the_buffer[0], priv.orig_sizeflag);
if (name != NULL)
- (*ins->info->fprintf_func) (ins->info->stream, "%s", name);
+ (*ins->info->fprintf_styled_func)
+ (ins->info->stream, dis_style_mnemonic, "%s", name);
else
{
/* Just print the first byte as a .byte instruction. */
- (*ins->info->fprintf_func) (ins->info->stream, ".byte 0x%x",
- (unsigned int) priv.the_buffer[0]);
+ (*ins->info->fprintf_styled_func)
+ (ins->info->stream, dis_style_assembler_directive, ".byte ");
+ (*ins->info->fprintf_styled_func)
+ (ins->info->stream, dis_style_immediate, "0x%x",
+ (unsigned int) priv.the_buffer[0]);
}
return 1;
@@ -9659,10 +9478,10 @@ print_insn (bfd_vma pc, instr_info *ins)
for (i = 0;
i < (int) ARRAY_SIZE (ins->all_prefixes) && ins->all_prefixes[i];
i++)
- (*ins->info->fprintf_func) (ins->info->stream, "%s%s",
- i == 0 ? "" : " ",
- prefix_name (ins, ins->all_prefixes[i],
- sizeflag));
+ (*ins->info->fprintf_styled_func)
+ (ins->info->stream, dis_style_mnemonic, "%s%s",
+ (i == 0 ? "" : " "), prefix_name (ins, ins->all_prefixes[i],
+ sizeflag));
return i;
}
@@ -9677,10 +9496,11 @@ print_insn (bfd_vma pc, instr_info *ins)
/* Handle ins->prefixes before fwait. */
for (i = 0; i < ins->fwait_prefix && ins->all_prefixes[i];
i++)
- (*ins->info->fprintf_func) (ins->info->stream, "%s ",
- prefix_name (ins, ins->all_prefixes[i],
- sizeflag));
- (*ins->info->fprintf_func) (ins->info->stream, "fwait");
+ (*ins->info->fprintf_styled_func)
+ (ins->info->stream, dis_style_mnemonic, "%s ",
+ prefix_name (ins, ins->all_prefixes[i], sizeflag));
+ (*ins->info->fprintf_styled_func)
+ (ins->info->stream, dis_style_mnemonic, "fwait");
return i + 1;
}
@@ -9722,7 +9542,7 @@ print_insn (bfd_vma pc, instr_info *ins)
else
memset (&ins->modrm, 0, sizeof (ins->modrm));
- ins->need_vex = 0;
+ ins->need_vex = false;
memset (&ins->vex, 0, sizeof (ins->vex));
if (dp->name == NULL && dp->op[0].bytemode == FLOATCODE)
@@ -9750,8 +9570,9 @@ print_insn (bfd_vma pc, instr_info *ins)
if (ins->vex.mask_register_specifier)
{
oappend (ins, "{");
- oappend (ins,
- ins->names_mask[ins->vex.mask_register_specifier]);
+ oappend_maybe_intel (ins,
+ att_names_mask
+ [ins->vex.mask_register_specifier]);
oappend (ins, "}");
}
if (ins->vex.zeroing)
@@ -9828,14 +9649,16 @@ print_insn (bfd_vma pc, instr_info *ins)
are all 0s in inverted form. */
if (ins->need_vex && ins->vex.register_specifier != 0)
{
- (*ins->info->fprintf_func) (ins->info->stream, "(bad)");
+ (*ins->info->fprintf_styled_func) (ins->info->stream, dis_style_text,
+ "(bad)");
return ins->end_codep - priv.the_buffer;
}
/* If EVEX.z is set, there must be an actual mask register in use. */
if (ins->vex.zeroing && ins->vex.mask_register_specifier == 0)
{
- (*ins->info->fprintf_func) (ins->info->stream, "(bad)");
+ (*ins->info->fprintf_styled_func) (ins->info->stream, dis_style_text,
+ "(bad)");
return ins->end_codep - priv.the_buffer;
}
@@ -9846,7 +9669,8 @@ print_insn (bfd_vma pc, instr_info *ins)
the encoding invalid. Most other PREFIX_OPCODE rules still apply. */
if (ins->need_vex ? !ins->vex.prefix : !(ins->prefixes & PREFIX_DATA))
{
- (*ins->info->fprintf_func) (ins->info->stream, "(bad)");
+ (*ins->info->fprintf_styled_func) (ins->info->stream,
+ dis_style_text, "(bad)");
return ins->end_codep - priv.the_buffer;
}
ins->used_prefixes |= PREFIX_DATA;
@@ -9873,7 +9697,8 @@ print_insn (bfd_vma pc, instr_info *ins)
|| (ins->vex.evex && dp->prefix_requirement != PREFIX_DATA
&& !ins->vex.w != !(ins->used_prefixes & PREFIX_DATA)))
{
- (*ins->info->fprintf_func) (ins->info->stream, "(bad)");
+ (*ins->info->fprintf_styled_func) (ins->info->stream,
+ dis_style_text, "(bad)");
return ins->end_codep - priv.the_buffer;
}
break;
@@ -9923,13 +9748,15 @@ print_insn (bfd_vma pc, instr_info *ins)
if (name == NULL)
abort ();
prefix_length += strlen (name) + 1;
- (*ins->info->fprintf_func) (ins->info->stream, "%s ", name);
+ (*ins->info->fprintf_styled_func)
+ (ins->info->stream, dis_style_mnemonic, "%s ", name);
}
/* Check maximum code length. */
if ((ins->codep - ins->start_codep) > MAX_CODE_LENGTH)
{
- (*ins->info->fprintf_func) (ins->info->stream, "(bad)");
+ (*ins->info->fprintf_styled_func)
+ (ins->info->stream, dis_style_text, "(bad)");
return MAX_CODE_LENGTH;
}
@@ -9937,7 +9764,8 @@ print_insn (bfd_vma pc, instr_info *ins)
for (i = strlen (ins->obuf) + prefix_length; i < 6; i++)
oappend (ins, " ");
oappend (ins, " ");
- (*ins->info->fprintf_func) (ins->info->stream, "%s", ins->obuf);
+ (*ins->info->fprintf_styled_func)
+ (ins->info->stream, dis_style_mnemonic, "%s", ins->obuf);
/* The enter and bound instructions are printed with operands in the same
order as the intel book; everything else is printed in reverse order. */
@@ -9976,7 +9804,8 @@ print_insn (bfd_vma pc, instr_info *ins)
if (*op_txt[i])
{
if (needcomma)
- (*ins->info->fprintf_func) (ins->info->stream, ",");
+ (*ins->info->fprintf_styled_func) (ins->info->stream,
+ dis_style_text, ",");
if (ins->op_index[i] != -1 && !ins->op_riprel[i])
{
bfd_vma target = (bfd_vma) ins->op_address[ins->op_index[i]];
@@ -9992,14 +9821,18 @@ print_insn (bfd_vma pc, instr_info *ins)
(*ins->info->print_address_func) (target, ins->info);
}
else
- (*ins->info->fprintf_func) (ins->info->stream, "%s", op_txt[i]);
+ (*ins->info->fprintf_styled_func) (ins->info->stream,
+ dis_style_text, "%s",
+ op_txt[i]);
needcomma = 1;
}
for (i = 0; i < MAX_OPERANDS; i++)
if (ins->op_index[i] != -1 && ins->op_riprel[i])
{
- (*ins->info->fprintf_func) (ins->info->stream, " # ");
+ (*ins->info->fprintf_styled_func) (ins->info->stream,
+ dis_style_comment_start,
+ " # ");
(*ins->info->print_address_func) ((bfd_vma)
(ins->start_pc + (ins->codep - ins->start_codep)
+ ins->op_address[ins->op_index[i]]), ins->info);
@@ -10262,7 +10095,7 @@ static const struct dis386 float_reg[][8] = {
},
};
-static char *fgrps[][8] = {
+static const char *const fgrps[][8] = {
/* Bad opcode 0 */
{
"(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
@@ -10362,7 +10195,7 @@ dofloat (instr_info *ins, int sizeflag)
/* Instruction fnstsw is only one with strange arg. */
if (floatop == 0xdf && ins->codep[-1] == 0xe0)
- strcpy (ins->op_out[0], ins->names16[0]);
+ strcpy (ins->op_out[0], att_names16[0] + ins->intel_syntax);
}
else
{
@@ -10380,14 +10213,6 @@ dofloat (instr_info *ins, int sizeflag)
}
}
-/* Like oappend (below), but S is a string starting with '%'.
- In Intel syntax, the '%' is elided. */
-static void
-oappend_maybe_intel (instr_info *ins, const char *s)
-{
- oappend (ins, s + ins->intel_syntax);
-}
-
static void
OP_ST (instr_info *ins, int bytemode ATTRIBUTE_UNUSED,
int sizeflag ATTRIBUTE_UNUSED)
@@ -10496,6 +10321,23 @@ putop (instr_info *ins, const char *in_template, int sizeflag)
}
break;
case 'D':
+ if (l == 1)
+ {
+ switch (last[0])
+ {
+ case 'X':
+ if (!ins->vex.evex || ins->vex.w)
+ *ins->obufp++ = 'd';
+ else
+ oappend (ins, "{bad}");
+ break;
+ default:
+ abort ();
+ }
+ break;
+ }
+ if (l)
+ abort ();
if (ins->intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
break;
USED_REX (REX_W);
@@ -10579,16 +10421,10 @@ putop (instr_info *ins, const char *in_template, int sizeflag)
}
else if (l == 1 && last[0] == 'X')
{
- if (ins->vex.w == 0)
+ if (!ins->vex.w)
*ins->obufp++ = 'h';
else
- {
- *ins->obufp++ = '{';
- *ins->obufp++ = 'b';
- *ins->obufp++ = 'a';
- *ins->obufp++ = 'd';
- *ins->obufp++ = '}';
- }
+ oappend (ins, "{bad}");
}
else
abort ();
@@ -10752,9 +10588,13 @@ putop (instr_info *ins, const char *in_template, int sizeflag)
ins->used_prefixes |= (ins->prefixes & PREFIX_DATA);
}
}
+ break;
}
- else if (l == 1 && last[0] == 'L')
+ if (l != 1)
+ abort ();
+ switch (last[0])
{
+ case 'L':
if (ins->address_mode == mode_64bit
&& !(ins->prefixes & PREFIX_ADDR))
{
@@ -10764,9 +10604,15 @@ putop (instr_info *ins, const char *in_template, int sizeflag)
}
goto case_S;
+ case 'X':
+ if (!ins->vex.evex || !ins->vex.w)
+ *ins->obufp++ = 's';
+ else
+ oappend (ins, "{bad}");
+ break;
+ default:
+ abort ();
}
- else
- abort ();
break;
case 'V':
if (l == 0)
@@ -11095,7 +10941,7 @@ intel_operand_size (instr_info *ins, int bytemode, int sizeflag)
oappend (ins, "WORD PTR ");
break;
default:
- ins->vex.no_broadcast = 1;
+ ins->vex.no_broadcast = true;
break;
}
return;
@@ -11300,20 +11146,6 @@ intel_operand_size (instr_info *ins, int bytemode, int sizeflag)
abort ();
}
break;
- case ymmxmm_mode:
- if (!ins->need_vex)
- abort ();
-
- switch (ins->vex.length)
- {
- case 128:
- case 256:
- oappend (ins, "XMMWORD PTR ");
- break;
- default:
- abort ();
- }
- break;
case o_mode:
oappend (ins, "OWORD PTR ");
break;
@@ -11353,7 +11185,7 @@ static void
print_register (instr_info *ins, unsigned int reg, unsigned int rexmask,
int bytemode, int sizeflag)
{
- const char **names;
+ const char *const *names;
USED_REX (rexmask);
if (ins->rex & rexmask)
@@ -11366,24 +11198,24 @@ print_register (instr_info *ins, unsigned int reg, unsigned int rexmask,
if (reg & 4)
USED_REX (0);
if (ins->rex)
- names = ins->names8rex;
+ names = att_names8rex;
else
- names = ins->names8;
+ names = att_names8;
break;
case w_mode:
- names = ins->names16;
+ names = att_names16;
break;
case d_mode:
case dw_mode:
case db_mode:
- names = ins->names32;
+ names = att_names32;
break;
case q_mode:
- names = ins->names64;
+ names = att_names64;
break;
case m_mode:
case v_bnd_mode:
- names = ins->address_mode == mode_64bit ? ins->names64 : ins->names32;
+ names = ins->address_mode == mode_64bit ? att_names64 : att_names32;
break;
case bnd_mode:
case bnd_swap_mode:
@@ -11392,12 +11224,12 @@ print_register (instr_info *ins, unsigned int reg, unsigned int rexmask,
oappend (ins, "(bad)");
return;
}
- names = ins->names_bnd;
+ names = att_names_bnd;
break;
case indir_v_mode:
if (ins->address_mode == mode_64bit && ins->isa64 == intel64)
{
- names = ins->names64;
+ names = att_names64;
break;
}
/* Fall through. */
@@ -11405,7 +11237,7 @@ print_register (instr_info *ins, unsigned int reg, unsigned int rexmask,
if (ins->address_mode == mode_64bit && ((sizeflag & DFLAG)
|| (ins->rex & REX_W)))
{
- names = ins->names64;
+ names = att_names64;
break;
}
bytemode = v_mode;
@@ -11415,37 +11247,37 @@ print_register (instr_info *ins, unsigned int reg, unsigned int rexmask,
case dq_mode:
USED_REX (REX_W);
if (ins->rex & REX_W)
- names = ins->names64;
+ names = att_names64;
else if (bytemode != v_mode && bytemode != v_swap_mode)
- names = ins->names32;
+ names = att_names32;
else
{
if (sizeflag & DFLAG)
- names = ins->names32;
+ names = att_names32;
else
- names = ins->names16;
+ names = att_names16;
ins->used_prefixes |= (ins->prefixes & PREFIX_DATA);
}
break;
case movsxd_mode:
if (!(sizeflag & DFLAG) && ins->isa64 == intel64)
- names = ins->names16;
+ names = att_names16;
else
- names = ins->names32;
+ names = att_names32;
ins->used_prefixes |= (ins->prefixes & PREFIX_DATA);
break;
case va_mode:
names = (ins->address_mode == mode_64bit
- ? ins->names64 : ins->names32);
+ ? att_names64 : att_names32);
if (!(ins->prefixes & PREFIX_ADDR))
names = (ins->address_mode == mode_16bit
- ? ins->names16 : names);
+ ? att_names16 : names);
else
{
/* Remove "addr16/addr32". */
ins->all_prefixes[ins->last_addr_prefix] = 0;
names = (ins->address_mode != mode_32bit
- ? ins->names32 : ins->names16);
+ ? att_names32 : att_names16);
ins->used_prefixes |= PREFIX_ADDR;
}
break;
@@ -11456,7 +11288,7 @@ print_register (instr_info *ins, unsigned int reg, unsigned int rexmask,
oappend (ins, "(bad)");
return;
}
- names = ins->names_mask;
+ names = att_names_mask;
break;
case 0:
return;
@@ -11464,7 +11296,7 @@ print_register (instr_info *ins, unsigned int reg, unsigned int rexmask,
oappend (ins, INTERNAL_DISASSEMBLER_ERROR);
return;
}
- oappend (ins, names[reg]);
+ oappend_maybe_intel (ins, names[reg]);
}
static void
@@ -11580,9 +11412,7 @@ OP_E_memory (instr_info *ins, int bytemode, int sizeflag)
{
/* 32/64 bit address mode */
int havedisp;
- int havesib;
int havebase;
- int haveindex;
int needindex;
int needaddr32;
int base, rbase;
@@ -11594,17 +11424,13 @@ OP_E_memory (instr_info *ins, int bytemode, int sizeflag)
|| bytemode == bnd_mode
|| bytemode == bnd_swap_mode);
bool check_gather = false;
- const char **indexes64 = ins->names64;
- const char **indexes32 = ins->names32;
+ const char *const *indexes = NULL;
- havesib = 0;
havebase = 1;
- haveindex = 0;
base = ins->modrm.rm;
if (base == 4)
{
- havesib = 1;
vindex = ins->sib.index;
USED_REX (REX_X);
if (ins->rex & REX_X)
@@ -11622,32 +11448,33 @@ OP_E_memory (instr_info *ins, int bytemode, int sizeflag)
check_gather = ins->obufp == ins->op_out[1];
}
- haveindex = 1;
switch (ins->vex.length)
{
case 128:
- indexes64 = indexes32 = ins->names_xmm;
+ indexes = att_names_xmm;
break;
case 256:
if (!ins->vex.w
|| bytemode == vex_vsib_q_w_dq_mode)
- indexes64 = indexes32 = ins->names_ymm;
+ indexes = att_names_ymm;
else
- indexes64 = indexes32 = ins->names_xmm;
+ indexes = att_names_xmm;
break;
case 512:
if (!ins->vex.w
|| bytemode == vex_vsib_q_w_dq_mode)
- indexes64 = indexes32 = ins->names_zmm;
+ indexes = att_names_zmm;
else
- indexes64 = indexes32 = ins->names_ymm;
+ indexes = att_names_ymm;
break;
default:
abort ();
}
break;
default:
- haveindex = vindex != 4;
+ if (vindex != 4)
+ indexes = ins->address_mode == mode_64bit && !addr32flag
+ ? att_names64 : att_names32;
break;
}
scale = ins->sib.scale;
@@ -11673,7 +11500,7 @@ OP_E_memory (instr_info *ins, int bytemode, int sizeflag)
if (base == 5)
{
havebase = 0;
- if (ins->address_mode == mode_64bit && !havesib)
+ if (ins->address_mode == mode_64bit && !ins->has_sib)
riprel = 1;
disp = get32s (ins);
if (riprel && bytemode == v_bndmk_mode)
@@ -11698,9 +11525,9 @@ OP_E_memory (instr_info *ins, int bytemode, int sizeflag)
needindex = 0;
needaddr32 = 0;
- if (havesib
+ if (ins->has_sib
&& !havebase
- && !haveindex
+ && !indexes
&& ins->address_mode != mode_16bit)
{
if (ins->address_mode == mode_64bit)
@@ -11724,7 +11551,7 @@ OP_E_memory (instr_info *ins, int bytemode, int sizeflag)
havedisp = (havebase
|| needindex
- || (havesib && (haveindex || scale != 0)));
+ || (ins->has_sib && (indexes || scale != 0)));
if (!ins->intel_syntax)
if (ins->modrm.mod != 0 || base == 5)
@@ -11741,7 +11568,7 @@ OP_E_memory (instr_info *ins, int bytemode, int sizeflag)
}
}
- if ((havebase || haveindex || needindex || needaddr32 || riprel)
+ if ((havebase || indexes || needindex || needaddr32 || riprel)
&& (ins->address_mode != mode_64bit
|| ((bytemode != v_bnd_mode)
&& (bytemode != v_bndmk_mode)
@@ -11759,15 +11586,16 @@ OP_E_memory (instr_info *ins, int bytemode, int sizeflag)
}
*ins->obufp = '\0';
if (havebase)
- oappend (ins, ins->address_mode == mode_64bit && !addr32flag
- ? ins->names64[rbase] : ins->names32[rbase]);
- if (havesib)
+ oappend_maybe_intel (ins,
+ (ins->address_mode == mode_64bit && !addr32flag
+ ? att_names64 : att_names32)[rbase]);
+ if (ins->has_sib)
{
/* ESP/RSP won't allow index. If base isn't ESP/RSP,
print index to tell base + index from base. */
if (scale != 0
|| needindex
- || haveindex
+ || indexes
|| (havebase && base != ESP_REG_NUM))
{
if (!ins->intel_syntax || havebase)
@@ -11775,18 +11603,18 @@ OP_E_memory (instr_info *ins, int bytemode, int sizeflag)
*ins->obufp++ = ins->separator_char;
*ins->obufp = '\0';
}
- if (haveindex)
+ if (indexes)
{
if (ins->address_mode == mode_64bit || vindex < 16)
- oappend (ins, ins->address_mode == mode_64bit
- && !addr32flag
- ? indexes64[vindex] : indexes32[vindex]);
+ oappend_maybe_intel (ins, indexes[vindex]);
else
oappend (ins, "(bad)");
}
else
- oappend (ins, ins->address_mode == mode_64bit && !addr32flag
- ? ins->index64 : ins->index32);
+ oappend_maybe_intel (ins,
+ ins->address_mode == mode_64bit
+ && !addr32flag ? att_index64
+ : att_index32);
*ins->obufp++ = ins->scale_char;
*ins->obufp = '\0';
@@ -11838,7 +11666,7 @@ OP_E_memory (instr_info *ins, int bytemode, int sizeflag)
{
if (!ins->active_seg_prefix)
{
- oappend (ins, ins->names_seg[ds_reg - es_reg]);
+ oappend_maybe_intel (ins, att_names_seg[ds_reg - es_reg]);
oappend (ins, ":");
}
print_operand_value (ins, ins->scratchbuf, 1, disp);
@@ -11896,7 +11724,9 @@ OP_E_memory (instr_info *ins, int bytemode, int sizeflag)
{
*ins->obufp++ = ins->open_char;
*ins->obufp = '\0';
- oappend (ins, ins->index16[ins->modrm.rm]);
+ oappend (ins,
+ (ins->intel_syntax ? intel_index16
+ : att_index16)[ins->modrm.rm]);
if (ins->intel_syntax
&& (disp || ins->modrm.mod != 0 || ins->modrm.rm == 6))
{
@@ -11923,7 +11753,7 @@ OP_E_memory (instr_info *ins, int bytemode, int sizeflag)
{
if (!ins->active_seg_prefix)
{
- oappend (ins, ins->names_seg[ds_reg - es_reg]);
+ oappend_maybe_intel (ins, att_names_seg[ds_reg - es_reg]);
oappend (ins, ":");
}
print_operand_value (ins, ins->scratchbuf, 1, disp & 0xffff);
@@ -11933,6 +11763,11 @@ OP_E_memory (instr_info *ins, int bytemode, int sizeflag)
if (ins->vex.b)
{
ins->evex_used |= EVEX_b_used;
+
+ /* Broadcast can only ever be valid for memory sources. */
+ if (ins->obufp == ins->op_out[0])
+ ins->vex.no_broadcast = true;
+
if (!ins->vex.no_broadcast)
{
if (bytemode == xh_mode)
@@ -11957,6 +11792,9 @@ OP_E_memory (instr_info *ins, int bytemode, int sizeflag)
}
}
}
+ else if (bytemode == q_mode
+ || bytemode == ymmq_mode)
+ ins->vex.no_broadcast = true;
else if (ins->vex.w
|| bytemode == evex_half_bcst_xmmqdh_mode
|| bytemode == evex_half_bcst_xmmq_mode)
@@ -11995,7 +11833,7 @@ OP_E_memory (instr_info *ins, int bytemode, int sizeflag)
}
}
else
- ins->vex.no_broadcast = 1;
+ ins->vex.no_broadcast = true;
}
if (ins->vex.no_broadcast)
oappend (ins, "{bad}");
@@ -12131,7 +11969,7 @@ OP_REG (instr_info *ins, int code, int sizeflag)
{
case es_reg: case ss_reg: case cs_reg:
case ds_reg: case fs_reg: case gs_reg:
- oappend (ins, ins->names_seg[code - es_reg]);
+ oappend_maybe_intel (ins, att_names_seg[code - es_reg]);
return;
}
@@ -12145,23 +11983,23 @@ OP_REG (instr_info *ins, int code, int sizeflag)
{
case ax_reg: case cx_reg: case dx_reg: case bx_reg:
case sp_reg: case bp_reg: case si_reg: case di_reg:
- s = ins->names16[code - ax_reg + add];
+ s = att_names16[code - ax_reg + add];
break;
case ah_reg: case ch_reg: case dh_reg: case bh_reg:
USED_REX (0);
/* Fall through. */
case al_reg: case cl_reg: case dl_reg: case bl_reg:
if (ins->rex)
- s = ins->names8rex[code - al_reg + add];
+ s = att_names8rex[code - al_reg + add];
else
- s = ins->names8[code - al_reg];
+ s = att_names8[code - al_reg];
break;
case rAX_reg: case rCX_reg: case rDX_reg: case rBX_reg:
case rSP_reg: case rBP_reg: case rSI_reg: case rDI_reg:
if (ins->address_mode == mode_64bit
&& ((sizeflag & DFLAG) || (ins->rex & REX_W)))
{
- s = ins->names64[code - rAX_reg + add];
+ s = att_names64[code - rAX_reg + add];
break;
}
code += eAX_reg - rAX_reg;
@@ -12170,21 +12008,21 @@ OP_REG (instr_info *ins, int code, int sizeflag)
case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
USED_REX (REX_W);
if (ins->rex & REX_W)
- s = ins->names64[code - eAX_reg + add];
+ s = att_names64[code - eAX_reg + add];
else
{
if (sizeflag & DFLAG)
- s = ins->names32[code - eAX_reg + add];
+ s = att_names32[code - eAX_reg + add];
else
- s = ins->names16[code - eAX_reg + add];
+ s = att_names16[code - eAX_reg + add];
ins->used_prefixes |= (ins->prefixes & PREFIX_DATA);
}
break;
default:
- s = INTERNAL_DISASSEMBLER_ERROR;
- break;
+ oappend (ins, INTERNAL_DISASSEMBLER_ERROR);
+ return;
}
- oappend (ins, s);
+ oappend_maybe_intel (ins, s);
}
static void
@@ -12195,35 +12033,37 @@ OP_IMREG (instr_info *ins, int code, int sizeflag)
switch (code)
{
case indir_dx_reg:
- if (ins->intel_syntax)
- s = "dx";
- else
- s = "(%dx)";
+ if (!ins->intel_syntax)
+ {
+ oappend (ins, "(%dx)");
+ return;
+ }
+ s = att_names16[dx_reg - ax_reg];
break;
case al_reg: case cl_reg:
- s = ins->names8[code - al_reg];
+ s = att_names8[code - al_reg];
break;
case eAX_reg:
USED_REX (REX_W);
if (ins->rex & REX_W)
{
- s = *ins->names64;
+ s = *att_names64;
break;
}
/* Fall through. */
case z_mode_ax_reg:
if ((ins->rex & REX_W) || (sizeflag & DFLAG))
- s = *ins->names32;
+ s = *att_names32;
else
- s = *ins->names16;
+ s = *att_names16;
if (!(ins->rex & REX_W))
ins->used_prefixes |= (ins->prefixes & PREFIX_DATA);
break;
default:
- s = INTERNAL_DISASSEMBLER_ERROR;
- break;
+ oappend (ins, INTERNAL_DISASSEMBLER_ERROR);
+ return;
}
- oappend (ins, s);
+ oappend_maybe_intel (ins, s);
}
static void
@@ -12408,7 +12248,7 @@ static void
OP_SEG (instr_info *ins, int bytemode, int sizeflag)
{
if (bytemode == w_mode)
- oappend (ins, ins->names_seg[ins->modrm.reg]);
+ oappend_maybe_intel (ins, att_names_seg[ins->modrm.reg]);
else
OP_E (ins, ins->modrm.mod == 3 ? bytemode : w_mode, sizeflag);
}
@@ -12454,7 +12294,7 @@ OP_OFF (instr_info *ins, int bytemode, int sizeflag)
{
if (!ins->active_seg_prefix)
{
- oappend (ins, ins->names_seg[ds_reg - es_reg]);
+ oappend_maybe_intel (ins, att_names_seg[ds_reg - es_reg]);
oappend (ins, ":");
}
}
@@ -12484,7 +12324,7 @@ OP_OFF64 (instr_info *ins, int bytemode, int sizeflag)
{
if (!ins->active_seg_prefix)
{
- oappend (ins, ins->names_seg[ds_reg - es_reg]);
+ oappend_maybe_intel (ins, att_names_seg[ds_reg - es_reg]);
oappend (ins, ":");
}
}
@@ -12502,15 +12342,15 @@ ptr_reg (instr_info *ins, int code, int sizeflag)
if (ins->address_mode == mode_64bit)
{
if (!(sizeflag & AFLAG))
- s = ins->names32[code - eAX_reg];
+ s = att_names32[code - eAX_reg];
else
- s = ins->names64[code - eAX_reg];
+ s = att_names64[code - eAX_reg];
}
else if (sizeflag & AFLAG)
- s = ins->names32[code - eAX_reg];
+ s = att_names32[code - eAX_reg];
else
- s = ins->names16[code - eAX_reg];
- oappend (ins, s);
+ s = att_names16[code - eAX_reg];
+ oappend_maybe_intel (ins, s);
*ins->obufp++ = ins->close_char;
*ins->obufp = 0;
}
@@ -12618,25 +12458,25 @@ OP_MMX (instr_info *ins, int bytemode ATTRIBUTE_UNUSED,
int sizeflag ATTRIBUTE_UNUSED)
{
int reg = ins->modrm.reg;
- const char **names;
+ const char *const *names;
ins->used_prefixes |= (ins->prefixes & PREFIX_DATA);
if (ins->prefixes & PREFIX_DATA)
{
- names = ins->names_xmm;
+ names = att_names_xmm;
USED_REX (REX_R);
if (ins->rex & REX_R)
reg += 8;
}
else
- names = ins->names_mm;
- oappend (ins, names[reg]);
+ names = att_names_mm;
+ oappend_maybe_intel (ins, names[reg]);
}
static void
print_vector_reg (instr_info *ins, unsigned int reg, int bytemode)
{
- const char **names;
+ const char *const *names;
if (bytemode == xmmq_mode
|| bytemode == evex_half_bcst_xmmqh_mode
@@ -12646,17 +12486,17 @@ print_vector_reg (instr_info *ins, unsigned int reg, int bytemode)
{
case 128:
case 256:
- names = ins->names_xmm;
+ names = att_names_xmm;
break;
case 512:
- names = ins->names_ymm;
+ names = att_names_ymm;
break;
default:
abort ();
}
}
else if (bytemode == ymm_mode)
- names = ins->names_ymm;
+ names = att_names_ymm;
else if (bytemode == tmm_mode)
{
if (reg >= 8)
@@ -12664,7 +12504,7 @@ print_vector_reg (instr_info *ins, unsigned int reg, int bytemode)
oappend (ins, "(bad)");
return;
}
- names = ins->names_tmm;
+ names = att_names_tmm;
}
else if (ins->need_vex
&& bytemode != xmm_mode
@@ -12681,29 +12521,29 @@ print_vector_reg (instr_info *ins, unsigned int reg, int bytemode)
switch (ins->vex.length)
{
case 128:
- names = ins->names_xmm;
+ names = att_names_xmm;
break;
case 256:
if (ins->vex.w
|| bytemode != vex_vsib_q_w_dq_mode)
- names = ins->names_ymm;
+ names = att_names_ymm;
else
- names = ins->names_xmm;
+ names = att_names_xmm;
break;
case 512:
if (ins->vex.w
|| bytemode != vex_vsib_q_w_dq_mode)
- names = ins->names_zmm;
+ names = att_names_zmm;
else
- names = ins->names_ymm;
+ names = att_names_ymm;
break;
default:
abort ();
}
}
else
- names = ins->names_xmm;
- oappend (ins, names[reg]);
+ names = att_names_xmm;
+ oappend_maybe_intel (ins, names[reg]);
}
static void
@@ -12723,7 +12563,7 @@ OP_XMM (instr_info *ins, int bytemode, int sizeflag ATTRIBUTE_UNUSED)
if (bytemode == tmm_mode)
ins->modrm.reg = reg;
else if (bytemode == scalar_mode)
- ins->vex.no_broadcast = 1;
+ ins->vex.no_broadcast = true;
print_vector_reg (ins, reg, bytemode);
}
@@ -12732,7 +12572,7 @@ static void
OP_EM (instr_info *ins, int bytemode, int sizeflag)
{
int reg;
- const char **names;
+ const char *const *names;
if (ins->modrm.mod != 3)
{
@@ -12756,14 +12596,14 @@ OP_EM (instr_info *ins, int bytemode, int sizeflag)
reg = ins->modrm.rm;
if (ins->prefixes & PREFIX_DATA)
{
- names = ins->names_xmm;
+ names = att_names_xmm;
USED_REX (REX_B);
if (ins->rex & REX_B)
reg += 8;
}
else
- names = ins->names_mm;
- oappend (ins, names[reg]);
+ names = att_names_mm;
+ oappend_maybe_intel (ins, names[reg]);
}
/* cvt* are the only instructions in sse2 which have
@@ -12789,7 +12629,7 @@ OP_EMC (instr_info *ins, int bytemode, int sizeflag)
MODRM_CHECK;
ins->codep++;
ins->used_prefixes |= (ins->prefixes & PREFIX_DATA);
- oappend (ins, ins->names_mm[ins->modrm.rm]);
+ oappend_maybe_intel (ins, att_names_mm[ins->modrm.rm]);
}
static void
@@ -12797,7 +12637,7 @@ OP_MXC (instr_info *ins, int bytemode ATTRIBUTE_UNUSED,
int sizeflag ATTRIBUTE_UNUSED)
{
ins->used_prefixes |= (ins->prefixes & PREFIX_DATA);
- oappend (ins, ins->names_mm[ins->modrm.reg]);
+ oappend_maybe_intel (ins, att_names_mm[ins->modrm.reg]);
}
static void
@@ -12883,25 +12723,14 @@ OP_0f07 (instr_info *ins, int bytemode, int sizeflag)
32bit mode and "xchg %rax,%rax" in 64bit mode. */
static void
-NOP_Fixup1 (instr_info *ins, int bytemode, int sizeflag)
+NOP_Fixup (instr_info *ins, int opnd, int sizeflag)
{
- if ((ins->prefixes & PREFIX_DATA) != 0
- || (ins->rex != 0
- && ins->rex != 0x48
- && ins->address_mode == mode_64bit))
- OP_REG (ins, bytemode, sizeflag);
- else
+ if ((ins->prefixes & PREFIX_DATA) == 0 && (ins->rex & REX_B) == 0)
strcpy (ins->obuf, "nop");
-}
-
-static void
-NOP_Fixup2 (instr_info *ins, int bytemode, int sizeflag)
-{
- if ((ins->prefixes & PREFIX_DATA) != 0
- || (ins->rex != 0
- && ins->rex != 0x48
- && ins->address_mode == mode_64bit))
- OP_IMREG (ins, bytemode, sizeflag);
+ else if (opnd == 0)
+ OP_REG (ins, eAX_reg, sizeflag);
+ else
+ OP_IMREG (ins, eAX_reg, sizeflag);
}
static const char *const Suffix3DNow[] = {
@@ -13084,11 +12913,11 @@ OP_Mwait (instr_info *ins, int bytemode, int sizeflag ATTRIBUTE_UNUSED)
/* mwait %eax,%ecx / mwaitx %eax,%ecx,%ebx */
if (!ins->intel_syntax)
{
- strcpy (ins->op_out[0], ins->names32[0]);
- strcpy (ins->op_out[1], ins->names32[1]);
+ strcpy (ins->op_out[0], att_names32[0] + ins->intel_syntax);
+ strcpy (ins->op_out[1], att_names32[1] + ins->intel_syntax);
if (bytemode == eBX_reg)
- strcpy (ins->op_out[2], ins->names32[3]);
- ins->two_source_ops = 1;
+ strcpy (ins->op_out[2], att_names32[3] + ins->intel_syntax);
+ ins->two_source_ops = true;
}
/* Skip mod/rm byte. */
MODRM_CHECK;
@@ -13102,23 +12931,23 @@ OP_Monitor (instr_info *ins, int bytemode ATTRIBUTE_UNUSED,
/* monitor %{e,r,}ax,%ecx,%edx" */
if (!ins->intel_syntax)
{
- const char **names = (ins->address_mode == mode_64bit
- ? ins->names64 : ins->names32);
+ const char *const *names = (ins->address_mode == mode_64bit
+ ? att_names64 : att_names32);
if (ins->prefixes & PREFIX_ADDR)
{
/* Remove "addr16/addr32". */
ins->all_prefixes[ins->last_addr_prefix] = 0;
names = (ins->address_mode != mode_32bit
- ? ins->names32 : ins->names16);
+ ? att_names32 : att_names16);
ins->used_prefixes |= PREFIX_ADDR;
}
else if (ins->address_mode == mode_16bit)
- names = ins->names16;
- strcpy (ins->op_out[0], names[0]);
- strcpy (ins->op_out[1], ins->names32[1]);
- strcpy (ins->op_out[2], ins->names32[2]);
- ins->two_source_ops = 1;
+ names = att_names16;
+ strcpy (ins->op_out[0], names[0] + ins->intel_syntax);
+ strcpy (ins->op_out[1], att_names32[1] + ins->intel_syntax);
+ strcpy (ins->op_out[2], att_names32[2] + ins->intel_syntax);
+ ins->two_source_ops = true;
}
/* Skip mod/rm byte. */
MODRM_CHECK;
@@ -13279,25 +13108,22 @@ CMPXCHG8B_Fixup (instr_info *ins, int bytemode, int sizeflag)
static void
XMM_Fixup (instr_info *ins, int reg, int sizeflag ATTRIBUTE_UNUSED)
{
- const char **names;
+ const char *const *names = att_names_xmm;
if (ins->need_vex)
{
switch (ins->vex.length)
{
case 128:
- names = ins->names_xmm;
break;
case 256:
- names = ins->names_ymm;
+ names = att_names_ymm;
break;
default:
abort ();
}
}
- else
- names = ins->names_xmm;
- oappend (ins, names[reg]);
+ oappend_maybe_intel (ins, names[reg]);
}
static void
@@ -13323,7 +13149,7 @@ static void
OP_VEX (instr_info *ins, int bytemode, int sizeflag ATTRIBUTE_UNUSED)
{
int reg, modrm_reg, sib_index = -1;
- const char **names;
+ const char *const *names;
if (!ins->need_vex)
abort ();
@@ -13346,7 +13172,7 @@ OP_VEX (instr_info *ins, int bytemode, int sizeflag ATTRIBUTE_UNUSED)
switch (bytemode)
{
case scalar_mode:
- oappend (ins, ins->names_xmm[reg]);
+ oappend_maybe_intel (ins, att_names_xmm[reg]);
return;
case vex_vsib_d_w_dq_mode:
@@ -13357,16 +13183,16 @@ OP_VEX (instr_info *ins, int bytemode, int sizeflag ATTRIBUTE_UNUSED)
if (ins->vex.length == 128
|| (bytemode != vex_vsib_d_w_dq_mode
&& !ins->vex.w))
- oappend (ins, ins->names_xmm[reg]);
+ oappend_maybe_intel (ins, att_names_xmm[reg]);
else
- oappend (ins, ins->names_ymm[reg]);
+ oappend_maybe_intel (ins, att_names_ymm[reg]);
/* All 3 XMM/YMM registers must be distinct. */
modrm_reg = ins->modrm.reg;
if (ins->rex & REX_R)
modrm_reg += 8;
- if (ins->modrm.rm == 4)
+ if (ins->has_sib && ins->modrm.rm == 4)
{
sib_index = ins->sib.index;
if (ins->rex & REX_X)
@@ -13391,7 +13217,7 @@ OP_VEX (instr_info *ins, int bytemode, int sizeflag ATTRIBUTE_UNUSED)
/* This must be the 3rd operand. */
if (ins->obufp != ins->op_out[2])
abort ();
- oappend (ins, ins->names_tmm[reg]);
+ oappend_maybe_intel (ins, att_names_tmm[reg]);
if (reg == ins->modrm.reg || reg == ins->modrm.rm)
strcpy (ins->obufp, "/(bad)");
}
@@ -13416,13 +13242,13 @@ OP_VEX (instr_info *ins, int bytemode, int sizeflag ATTRIBUTE_UNUSED)
switch (bytemode)
{
case x_mode:
- names = ins->names_xmm;
+ names = att_names_xmm;
break;
case dq_mode:
if (ins->rex & REX_W)
- names = ins->names64;
+ names = att_names64;
else
- names = ins->names32;
+ names = att_names32;
break;
case mask_bd_mode:
case mask_mode:
@@ -13431,7 +13257,7 @@ OP_VEX (instr_info *ins, int bytemode, int sizeflag ATTRIBUTE_UNUSED)
oappend (ins, "(bad)");
return;
}
- names = ins->names_mask;
+ names = att_names_mask;
break;
default:
abort ();
@@ -13442,7 +13268,7 @@ OP_VEX (instr_info *ins, int bytemode, int sizeflag ATTRIBUTE_UNUSED)
switch (bytemode)
{
case x_mode:
- names = ins->names_ymm;
+ names = att_names_ymm;
break;
case mask_bd_mode:
case mask_mode:
@@ -13451,7 +13277,7 @@ OP_VEX (instr_info *ins, int bytemode, int sizeflag ATTRIBUTE_UNUSED)
oappend (ins, "(bad)");
return;
}
- names = ins->names_mask;
+ names = att_names_mask;
break;
default:
/* See PR binutils/20893 for a reproducer. */
@@ -13460,13 +13286,13 @@ OP_VEX (instr_info *ins, int bytemode, int sizeflag ATTRIBUTE_UNUSED)
}
break;
case 512:
- names = ins->names_zmm;
+ names = att_names_zmm;
break;
default:
abort ();
break;
}
- oappend (ins, names[reg]);
+ oappend_maybe_intel (ins, names[reg]);
}
static void
@@ -13494,7 +13320,7 @@ static void
OP_REG_VexI4 (instr_info *ins, int bytemode, int sizeflag ATTRIBUTE_UNUSED)
{
int reg;
- const char **names = ins->names_xmm;
+ const char *const *names = att_names_xmm;
FETCH_DATA (ins->info, ins->codep + 1);
reg = *ins->codep++;
@@ -13507,9 +13333,9 @@ OP_REG_VexI4 (instr_info *ins, int bytemode, int sizeflag ATTRIBUTE_UNUSED)
reg &= 7;
if (bytemode == x_mode && ins->vex.length == 256)
- names = ins->names_ymm;
+ names = att_names_ymm;
- oappend (ins, names[reg]);
+ oappend_maybe_intel (ins, names[reg]);
if (ins->vex.w)
{
diff --git a/opcodes/i386-gen.c b/opcodes/i386-gen.c
index 6770b34d893..d18a7d27545 100644
--- a/opcodes/i386-gen.c
+++ b/opcodes/i386-gen.c
@@ -46,7 +46,7 @@ typedef struct initializer
static initializer cpu_flag_init[] =
{
{ "CPU_UNKNOWN_FLAGS",
- "~(CpuL1OM|CpuK1OM)" },
+ "~CpuIAMCU" },
{ "CPU_GENERIC32_FLAGS",
"Cpu186|Cpu286|Cpu386" },
{ "CPU_GENERIC64_FLAGS",
@@ -245,12 +245,8 @@ static initializer cpu_flag_init[] =
"CPU_AVX512F_FLAGS|CpuAVX512_BF16" },
{ "CPU_AVX512_FP16_FLAGS",
"CPU_AVX512BW_FLAGS|CpuAVX512_FP16" },
- { "CPU_L1OM_FLAGS",
- "unknown" },
- { "CPU_K1OM_FLAGS",
- "unknown" },
{ "CPU_IAMCU_FLAGS",
- "Cpu186|Cpu286|Cpu386|Cpu486|Cpu586" },
+ "Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|CpuIAMCU" },
{ "CPU_ADX_FLAGS",
"CpuADX" },
{ "CPU_RDSEED_FLAGS",
@@ -588,8 +584,6 @@ static bitfield cpu_flags[] =
BITFIELD (CpuAVX512VL),
BITFIELD (CpuAVX512DQ),
BITFIELD (CpuAVX512BW),
- BITFIELD (CpuL1OM),
- BITFIELD (CpuK1OM),
BITFIELD (CpuIAMCU),
BITFIELD (CpuSSE4a),
BITFIELD (Cpu3dnow),
@@ -634,8 +628,6 @@ static bitfield cpu_flags[] =
BITFIELD (CpuPREFETCHWT1),
BITFIELD (CpuSE1),
BITFIELD (CpuCLWB),
- BITFIELD (Cpu64),
- BITFIELD (CpuNo64),
BITFIELD (CpuMPX),
BITFIELD (CpuAVX512IFMA),
BITFIELD (CpuAVX512VBMI),
@@ -682,6 +674,8 @@ static bitfield cpu_flags[] =
BITFIELD (CpuINVLPGB),
BITFIELD (CpuTLBSYNC),
BITFIELD (CpuSNP),
+ BITFIELD (Cpu64),
+ BITFIELD (CpuNo64),
#ifdef CpuUnused
BITFIELD (CpuUnused),
#endif
@@ -1050,22 +1044,15 @@ process_i386_cpu_flag (FILE *table, char *flag, int macro,
const char *comma, const char *indent,
int lineno)
{
- char *str, *next, *last;
+ char *str, *next = flag, *last;
unsigned int i;
+ int value = 1;
bitfield flags [ARRAY_SIZE (cpu_flags)];
/* Copy the default cpu flags. */
memcpy (flags, cpu_flags, sizeof (cpu_flags));
- if (strcasecmp (flag, "unknown") == 0)
- {
- /* We turn on everything except for cpu64 in case of
- CPU_UNKNOWN_FLAGS. */
- for (i = 0; i < ARRAY_SIZE (flags); i++)
- if (flags[i].position != Cpu64)
- flags[i].value = 1;
- }
- else if (flag[0] == '~')
+ if (flag[0] == '~')
{
last = flag + strlen (flag);
@@ -1081,28 +1068,25 @@ process_i386_cpu_flag (FILE *table, char *flag, int macro,
else
next = flag + 1;
- /* First we turn on everything except for cpu64. */
+ /* First we turn on everything except for cpu64, cpuno64, and - if
+ present - the padding field. */
for (i = 0; i < ARRAY_SIZE (flags); i++)
- if (flags[i].position != Cpu64)
+ if (flags[i].position < Cpu64)
flags[i].value = 1;
/* Turn off selective bits. */
- for (; next && next < last; )
- {
- str = next_field (next, '|', &next, last);
- if (str)
- set_bitfield (str, flags, 0, ARRAY_SIZE (flags), lineno);
- }
+ value = 0;
}
- else if (strcmp (flag, "0"))
+
+ if (strcmp (flag, "0"))
{
- /* Turn on selective bits. */
+ /* Turn on/off selective bits. */
last = flag + strlen (flag);
- for (next = flag; next && next < last; )
+ for (; next && next < last; )
{
str = next_field (next, '|', &next, last);
if (str)
- set_bitfield (str, flags, 1, ARRAY_SIZE (flags), lineno);
+ set_bitfield (str, flags, value, ARRAY_SIZE (flags), lineno);
}
}
diff --git a/opcodes/i386-init.h b/opcodes/i386-init.h
index fa73bd26136..df2f7bcd498 100644
--- a/opcodes/i386-init.h
+++ b/opcodes/i386-init.h
@@ -21,11 +21,11 @@
#define CPU_UNKNOWN_FLAGS \
{ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
- 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
+ 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
- 1, 1, 1, 1, 0, 1, 1 } }
+ 1, 1, 0, 0, 0 } }
#define CPU_GENERIC32_FLAGS \
{ { 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -34,16 +34,16 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_GENERIC64_FLAGS \
{ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_NONE_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -52,7 +52,7 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_I186_FLAGS \
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -61,7 +61,7 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_I286_FLAGS \
{ { 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -70,7 +70,7 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_I386_FLAGS \
{ { 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -79,7 +79,7 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_I486_FLAGS \
{ { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -88,7 +88,7 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_I586_FLAGS \
{ { 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, \
@@ -97,7 +97,7 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_I686_FLAGS \
{ { 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, \
@@ -106,7 +106,7 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_PENTIUMPRO_FLAGS \
{ { 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, \
@@ -115,7 +115,7 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_P2_FLAGS \
{ { 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, \
@@ -124,7 +124,7 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_P3_FLAGS \
{ { 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, \
@@ -133,7 +133,7 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_P4_FLAGS \
{ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, \
@@ -142,43 +142,43 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_NOCONA_FLAGS \
{ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, \
0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_CORE_FLAGS \
{ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, \
0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_CORE2_FLAGS \
{ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, \
0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_COREI7_FLAGS \
{ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, \
0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_K6_FLAGS \
{ { 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, \
@@ -187,7 +187,7 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_K6_2_FLAGS \
{ { 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, \
@@ -196,7 +196,7 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_ATHLON_FLAGS \
{ { 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, \
@@ -205,106 +205,106 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_K8_FLAGS \
{ { 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, \
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_AMDFAM10_FLAGS \
{ { 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, \
1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_BDVER1_FLAGS \
{ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, \
0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_BDVER2_FLAGS \
{ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, \
0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, \
- 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, \
+ 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_BDVER3_FLAGS \
{ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, \
0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, \
- 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, \
+ 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_BDVER4_FLAGS \
{ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, \
0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, \
- 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, \
+ 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_ZNVER1_FLAGS \
{ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, \
0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, \
- 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, \
+ 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_ZNVER2_FLAGS \
{ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, \
0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, \
- 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, \
+ 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0 } }
#define CPU_ZNVER3_FLAGS \
{ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, \
0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, \
- 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, \
- 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, \
- 0, 1, 1, 1, 0, 0, 0 } }
+ 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, \
+ 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, \
+ 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, \
+ 1, 1, 0, 0, 0 } }
#define CPU_BTVER1_FLAGS \
{ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, \
0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_BTVER2_FLAGS \
{ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, \
0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, \
- 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, \
+ 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_8087_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -313,7 +313,7 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_287_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, \
@@ -322,7 +322,7 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_387_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, \
@@ -331,7 +331,7 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_687_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, \
@@ -340,7 +340,7 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_CMOV_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -349,7 +349,7 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_FXSR_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -358,7 +358,7 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_CLFLUSH_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -367,7 +367,7 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_NOP_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -376,7 +376,7 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_SYSCALL_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -385,7 +385,7 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_MMX_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, \
@@ -394,7 +394,7 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_SSE_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, \
@@ -403,7 +403,7 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_SSE2_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \
@@ -412,7 +412,7 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_SSE3_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \
@@ -421,7 +421,7 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_SSSE3_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \
@@ -430,7 +430,7 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_SSE4_1_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \
@@ -439,7 +439,7 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_SSE4_2_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \
@@ -448,7 +448,7 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_VMX_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -457,7 +457,7 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_SMX_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -466,169 +466,169 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_XSAVE_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_XSAVEOPT_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_AES_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_PCLMUL_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_FMA_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \
0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_FMA4_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \
0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_XOP_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \
0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_LWP_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_BMI_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_TBM_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_MOVBE_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_CX16_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_RDTSCP_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_EPT_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_FSGSBASE_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_RDRND_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_F16C_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \
0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0 } }
#define CPU_BMI2_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_LZCNT_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -637,7 +637,7 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_POPCNT_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -646,43 +646,43 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_HLE_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_RTM_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_INVPCID_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_VMFUNC_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_3DNOW_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, \
@@ -691,7 +691,7 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_3DNOWA_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, \
@@ -700,7 +700,7 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_PADLOCK_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -709,7 +709,7 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_SVME_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -718,7 +718,7 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_SSE4A_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \
@@ -727,7 +727,7 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_ABM_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -736,385 +736,367 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_AVX_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \
0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_AVX2_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \
0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_AVX_VNNI_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \
0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_AVX512F_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \
0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_AVX512CD_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \
0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, \
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_AVX512ER_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \
0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, \
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_AVX512PF_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \
0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, \
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_AVX512DQ_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \
0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, \
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_AVX512BW_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \
0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, \
- 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_AVX512VL_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \
0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, \
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_AVX512IFMA_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \
0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, \
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_AVX512VBMI_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \
0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_AVX512_4FMAPS_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \
0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_AVX512_4VNNIW_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \
0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0 } }
#define CPU_AVX512_VPOPCNTDQ_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \
0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_AVX512_VBMI2_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \
0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_AVX512_VNNI_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \
0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_AVX512_BITALG_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \
0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_AVX512_BF16_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \
0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_AVX512_FP16_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \
0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, \
- 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
-
-#define CPU_L1OM_FLAGS \
- { { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
- 1, 1, 1, 1, 0, 1, 1 } }
-
-#define CPU_K1OM_FLAGS \
- { { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
- 1, 1, 1, 1, 0, 1, 1 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_IAMCU_FLAGS \
{ { 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_ADX_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_RDSEED_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_PRFCHW_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_SMAP_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_MPX_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_SHA_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_CLFLUSHOPT_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_XSAVES_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, \
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_XSAVEC_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, \
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_PREFETCHWT1_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_SE1_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_CLWB_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_CLZERO_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_MWAITX_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_OSPKE_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_RDPID_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_PTWRITE_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_IBT_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_SHSTK_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_GFNI_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -1122,8 +1104,8 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0 } }
#define CPU_VAES_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -1131,8 +1113,8 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0 } }
#define CPU_VPCLMULQDQ_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -1140,8 +1122,8 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0 } }
#define CPU_WBNOINVD_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -1149,8 +1131,8 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0 } }
#define CPU_PCONFIG_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -1158,8 +1140,8 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0 } }
#define CPU_WAITPKG_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -1167,8 +1149,8 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0 } }
#define CPU_UINTR_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -1176,8 +1158,8 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0 } }
#define CPU_CLDEMOTE_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -1185,35 +1167,35 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0 } }
#define CPU_AMX_INT8_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_AMX_BF16_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_AMX_TILE_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_MOVDIRI_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -1221,8 +1203,8 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0 } }
#define CPU_MOVDIR64B_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -1230,8 +1212,8 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0 } }
#define CPU_ENQCMD_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -1239,8 +1221,8 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0 } }
#define CPU_SERIALIZE_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -1248,26 +1230,26 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0 } }
#define CPU_AVX512_VP2INTERSECT_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_TDX_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_RDPRU_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -1275,8 +1257,8 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0 } }
#define CPU_MCOMMIT_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -1284,8 +1266,8 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0 } }
#define CPU_SEV_ES_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -1293,8 +1275,8 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0 } }
#define CPU_TSXLDTRK_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -1302,8 +1284,8 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0 } }
#define CPU_KL_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -1311,8 +1293,8 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, \
+ 0, 0, 0, 0, 0 } }
#define CPU_WIDEKL_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -1320,8 +1302,8 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, \
+ 0, 0, 0, 0, 0 } }
#define CPU_HRESET_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -1329,8 +1311,8 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 1, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, \
+ 0, 0, 0, 0, 0 } }
#define CPU_INVLPGB_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -1338,8 +1320,8 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 1, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, \
+ 0, 0, 0, 0, 0 } }
#define CPU_TLBSYNC_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -1348,7 +1330,7 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 1, 0, 0, 0, 0 } }
+ 1, 0, 0, 0, 0 } }
#define CPU_SNP_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -1357,7 +1339,7 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 1, 0, 0, 0 } }
+ 0, 1, 0, 0, 0 } }
#define CPU_ANY_X87_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, \
@@ -1366,7 +1348,7 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_ANY_287_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, \
@@ -1375,7 +1357,7 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_ANY_387_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, \
@@ -1384,7 +1366,7 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_ANY_687_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, \
@@ -1393,7 +1375,7 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_ANY_CMOV_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -1402,7 +1384,7 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_ANY_FXSR_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -1411,7 +1393,7 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_ANY_MMX_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, \
@@ -1420,7 +1402,7 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_ANY_SSE_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \
@@ -1429,7 +1411,7 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_ANY_SSE2_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, \
@@ -1438,7 +1420,7 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_ANY_SSE3_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -1447,7 +1429,7 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_ANY_SSSE3_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -1456,7 +1438,7 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_ANY_SSE4_1_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -1465,7 +1447,7 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_ANY_SSE4_2_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -1474,7 +1456,7 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_ANY_SSE4A_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -1483,34 +1465,34 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_ANY_AVX_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, \
- 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, \
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, \
+ 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_ANY_AVX2_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, \
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, \
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, \
+ 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_ANY_AVX512F_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, \
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, \
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, \
+ 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_ANY_AVX512CD_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -1519,7 +1501,7 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_ANY_AVX512ER_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -1528,7 +1510,7 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_ANY_AVX512PF_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -1537,7 +1519,7 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_ANY_AVX512DQ_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -1546,16 +1528,16 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_ANY_AVX512BW_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_ANY_AVX512VL_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -1564,142 +1546,142 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_ANY_AVX512IFMA_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_ANY_AVX512VBMI_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_ANY_AVX512_4FMAPS_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_ANY_AVX512_4VNNIW_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_ANY_AVX512_VPOPCNTDQ_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_ANY_IBT_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_ANY_SHSTK_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_ANY_AVX512_VBMI2_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_ANY_AVX512_VNNI_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_ANY_AVX512_BITALG_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_ANY_AVX512_BF16_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_ANY_AMX_INT8_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_ANY_AMX_BF16_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_ANY_AMX_TILE_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, \
- 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0 } }
#define CPU_ANY_AVX_VNNI_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_ANY_MOVDIRI_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -1707,8 +1689,8 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0 } }
#define CPU_ANY_UINTR_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -1716,8 +1698,8 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0 } }
#define CPU_ANY_MOVDIR64B_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -1725,8 +1707,8 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0 } }
#define CPU_ANY_ENQCMD_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -1734,8 +1716,8 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0 } }
#define CPU_ANY_SERIALIZE_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -1743,26 +1725,26 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0 } }
#define CPU_ANY_AVX512_VP2INTERSECT_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_ANY_TDX_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define CPU_ANY_TSXLDTRK_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -1770,8 +1752,8 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0 } }
#define CPU_ANY_KL_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -1779,8 +1761,8 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, \
+ 0, 0, 0, 0, 0 } }
#define CPU_ANY_WIDEKL_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -1788,8 +1770,8 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, \
+ 0, 0, 0, 0, 0 } }
#define CPU_ANY_HRESET_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -1797,17 +1779,17 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 1, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, \
+ 0, 0, 0, 0, 0 } }
#define CPU_ANY_AVX512_FP16_FLAGS \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0 } }
+ 0, 0, 0, 0, 0 } }
#define OPERAND_TYPE_NONE \
diff --git a/opcodes/i386-opc.h b/opcodes/i386-opc.h
index ff2eaa2d457..cba7cd2d36a 100644
--- a/opcodes/i386-opc.h
+++ b/opcodes/i386-opc.h
@@ -111,10 +111,6 @@ enum
CpuAVX512DQ,
/* Intel AVX-512 BW Instructions support required. */
CpuAVX512BW,
- /* Intel L1OM support required */
- CpuL1OM,
- /* Intel K1OM support required */
- CpuK1OM,
/* Intel IAMCU support required */
CpuIAMCU,
/* Xsave/xrstor New Instructions support required */
@@ -276,6 +272,9 @@ enum
CpuTLBSYNC,
/* SNP instructions required */
CpuSNP,
+
+ /* NOTE: These last three items need to remain last and in this order. */
+
/* 64bit support required */
Cpu64,
/* Not supported in the 64bit mode */
@@ -340,8 +339,6 @@ typedef union i386_cpu_flags
unsigned int cpuavx512vl:1;
unsigned int cpuavx512dq:1;
unsigned int cpuavx512bw:1;
- unsigned int cpul1om:1;
- unsigned int cpuk1om:1;
unsigned int cpuiamcu:1;
unsigned int cpuxsave:1;
unsigned int cpuxsaveopt:1;
@@ -423,6 +420,7 @@ typedef union i386_cpu_flags
unsigned int cpuinvlpgb:1;
unsigned int cputlbsync:1;
unsigned int cpusnp:1;
+ /* NOTE: These last three fields need to remain last and in this order. */
unsigned int cpu64:1;
unsigned int cpuno64:1;
#ifdef CpuUnused
diff --git a/opcodes/i386-opc.tbl b/opcodes/i386-opc.tbl
index c7ce1c196f3..c29af3b632b 100644
--- a/opcodes/i386-opc.tbl
+++ b/opcodes/i386-opc.tbl
@@ -1591,7 +1591,7 @@ vmovlps, 0x13, None, CpuAVX, Modrm|Vex|Space0F|VexWIG|IgnoreSize|No_bSuf|No_wSuf
vmovmskpd, 0x6650, None, CpuAVX, Modrm|Vex|Space0F|VexWIG|No_bSuf|No_wSuf|No_sSuf|No_ldSuf, { RegXMM|RegYMM, Reg32|Reg64 }
vmovmskps, 0x50, None, CpuAVX, Modrm|Vex|Space0F|VexWIG|No_bSuf|No_wSuf|No_sSuf|No_ldSuf, { RegXMM|RegYMM, Reg32|Reg64 }
vmovntdq, 0x66e7, None, CpuAVX, Modrm|Vex|Space0F|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM, Xmmword|Ymmword|Unspecified|BaseIndex }
-vmovntdqa, 0x662a, None, CpuAVX, Modrm|Vex|Space0F38|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Xmmword|Unspecified|BaseIndex, RegXMM }
+vmovntdqa, 0x662a, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F38|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Xmmword|Ymmword|Unspecified|BaseIndex, RegXMM|RegYMM }
vmovntpd, 0x662b, None, CpuAVX, Modrm|Vex|Space0F|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM, Xmmword|Ymmword|Unspecified|BaseIndex }
vmovntps, 0x2b, None, CpuAVX, Modrm|Vex|Space0F|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM, Xmmword|Ymmword|Unspecified|BaseIndex }
vmovq, 0xf37e, None, CpuAVX, Load|Modrm|Vex=1|Space0F|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM }
@@ -1605,47 +1605,47 @@ vmovss, 0xf310, None, CpuAVX, D|Modrm|Vex=3|Space0F|VexWIG|IgnoreSize|No_bSuf|No
vmovss, 0xf310, None, CpuAVX, D|Modrm|Vex=3|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, RegXMM, RegXMM }
vmovupd, 0x6610, None, CpuAVX, D|Modrm|Vex|Space0F|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM }
vmovups, 0x10, None, CpuAVX, D|Modrm|Vex|Space0F|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM }
-vmpsadbw, 0x6642, None, CpuAVX, Modrm|Vex|Space0F3A|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
+vmpsadbw, 0x6642, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F3A|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
vmulpd, 0x6659, None, CpuAVX, Modrm|Vex|Space0F|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
vmulps, 0x59, None, CpuAVX, Modrm|Vex|Space0F|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
vmulsd, 0xf259, None, CpuAVX, Modrm|Vex=3|Space0F|VexVVVV|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
vmulss, 0xf359, None, CpuAVX, Modrm|Vex=3|Space0F|VexVVVV|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
vorpd, 0x6656, None, CpuAVX, Modrm|C|Vex|Space0F|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
vorps, 0x56, None, CpuAVX, Modrm|C|Vex|Space0F|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
-vpabsb, 0x661c, None, CpuAVX, Modrm|Vex|Space0F38|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM }
-vpabsd, 0x661e, None, CpuAVX, Modrm|Vex|Space0F38|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM }
-vpabsw, 0x661d, None, CpuAVX, Modrm|Vex|Space0F38|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM }
-vpackssdw, 0x666b, None, CpuAVX, Modrm|Vex|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpacksswb, 0x6663, None, CpuAVX, Modrm|Vex|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpackusdw, 0x662b, None, CpuAVX, Modrm|Vex|Space0F38|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpackuswb, 0x6667, None, CpuAVX, Modrm|Vex|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpaddsb, 0x66ec, None, CpuAVX, Modrm|C|Vex|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpaddsw, 0x66ed, None, CpuAVX, Modrm|C|Vex|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpaddb, 0x66fc, None, CpuAVX, Modrm|C|Vex|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpaddd, 0x66fe, None, CpuAVX, Modrm|C|Vex|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpaddq, 0x66d4, None, CpuAVX, Modrm|C|Vex|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpaddw, 0x66fd, None, CpuAVX, Modrm|C|Vex|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpaddusb, 0x66dc, None, CpuAVX, Modrm|C|Vex|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpaddusw, 0x66dd, None, CpuAVX, Modrm|C|Vex|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpalignr, 0x660f, None, CpuAVX, Modrm|Vex|Space0F3A|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpand, 0x66db, None, CpuAVX, Modrm|C|Vex|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpandn, 0x66df, None, CpuAVX, Modrm|Vex|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpavgb, 0x66e0, None, CpuAVX, Modrm|C|Vex|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpavgw, 0x66e3, None, CpuAVX, Modrm|C|Vex|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpblendvb, 0x664c, None, CpuAVX, Modrm|Vex|Space0F3A|VexVVVV=1|VexW=1|VexSources=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpblendw, 0x660e, None, CpuAVX, Modrm|Vex|Space0F3A|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpcmpeqb, 0x6674, None, CpuAVX, Modrm|C|Vex|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpcmpeqd, 0x6676, None, CpuAVX, Modrm|C|Vex|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpcmpeqq, 0x6629, None, CpuAVX, Modrm|Vex|Space0F38|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpcmpeqw, 0x6675, None, CpuAVX, Modrm|C|Vex|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
+vpabsb, 0x661c, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F38|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM }
+vpabsd, 0x661e, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F38|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM }
+vpabsw, 0x661d, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F38|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM }
+vpackssdw, 0x666b, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpacksswb, 0x6663, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpackusdw, 0x662b, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F38|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpackuswb, 0x6667, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpaddsb, 0x66ec, None, CpuAVX|CpuAVX2, Modrm|C|Vex|Space0F|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpaddsw, 0x66ed, None, CpuAVX|CpuAVX2, Modrm|C|Vex|Space0F|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpaddb, 0x66fc, None, CpuAVX|CpuAVX2, Modrm|C|Vex|Space0F|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpaddd, 0x66fe, None, CpuAVX|CpuAVX2, Modrm|C|Vex|Space0F|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpaddq, 0x66d4, None, CpuAVX|CpuAVX2, Modrm|C|Vex|Space0F|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpaddw, 0x66fd, None, CpuAVX|CpuAVX2, Modrm|C|Vex|Space0F|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpaddusb, 0x66dc, None, CpuAVX|CpuAVX2, Modrm|C|Vex|Space0F|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpaddusw, 0x66dd, None, CpuAVX|CpuAVX2, Modrm|C|Vex|Space0F|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpalignr, 0x660f, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F3A|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpand, 0x66db, None, CpuAVX|CpuAVX2, Modrm|C|Vex|Space0F|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpandn, 0x66df, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Optimize, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpavgb, 0x66e0, None, CpuAVX|CpuAVX2, Modrm|C|Vex|Space0F|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpavgw, 0x66e3, None, CpuAVX|CpuAVX2, Modrm|C|Vex|Space0F|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpblendvb, 0x664c, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F3A|VexVVVV|VexWIG|CheckRegSize|VexSources=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM, Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpblendw, 0x660e, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F3A|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpcmpeqb, 0x6674, None, CpuAVX|CpuAVX2, Modrm|C|Vex|Space0F|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpcmpeqd, 0x6676, None, CpuAVX|CpuAVX2, Modrm|C|Vex|Space0F|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpcmpeqq, 0x6629, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F38|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpcmpeqw, 0x6675, None, CpuAVX|CpuAVX2, Modrm|C|Vex|Space0F|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
vpcmpestri, 0x6661, None, CpuAVX|CpuNo64, Modrm|Vex|Space0F3A|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Unspecified|BaseIndex|RegXMM, RegXMM }
vpcmpestri, 0x6661, None, CpuAVX|Cpu64, Modrm|Vex|Space0F3A|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_ldSuf, { Imm8, Xmmword|Unspecified|BaseIndex|RegXMM, RegXMM }
vpcmpestrm, 0x6660, None, CpuAVX|CpuNo64, Modrm|Vex|Space0F3A|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Unspecified|BaseIndex|RegXMM, RegXMM }
vpcmpestrm, 0x6660, None, CpuAVX|Cpu64, Modrm|Vex|Space0F3A|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_ldSuf, { Imm8, Xmmword|Unspecified|BaseIndex|RegXMM, RegXMM }
-vpcmpgtb, 0x6664, None, CpuAVX, Modrm|Vex|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpcmpgtd, 0x6666, None, CpuAVX, Modrm|Vex|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpcmpgtq, 0x6637, None, CpuAVX, Modrm|Vex|Space0F38|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpcmpgtw, 0x6665, None, CpuAVX, Modrm|Vex|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
+vpcmpgtb, 0x6664, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpcmpgtd, 0x6666, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpcmpgtq, 0x6637, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F38|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpcmpgtw, 0x6665, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
vpcmpistri, 0x6663, None, CpuAVX, Modrm|Vex|Space0F3A|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Unspecified|BaseIndex|RegXMM, RegXMM }
vpcmpistrm, 0x6662, None, CpuAVX, Modrm|Vex|Space0F3A|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Unspecified|BaseIndex|RegXMM, RegXMM }
vperm2f128, 0x6606, None, CpuAVX, Modrm|Vex=2|Space0F3A|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
@@ -1660,34 +1660,34 @@ vpextrq, 0x6616, None, CpuAVX|Cpu64, Modrm|Vex|Space0F3A|VexW1|No_bSuf|No_wSuf|N
vpextrw, 0x66c5, None, CpuAVX, Load|Modrm|Vex|Space0F|VexWIG|No_bSuf|No_wSuf|No_sSuf|No_ldSuf, { Imm8, RegXMM, Reg32|Reg64 }
vpextrw, 0x6615, None, CpuAVX, RegMem|Vex|Space0F3A|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM, Reg32|Reg64 }
vpextrw, 0x6615, None, CpuAVX, Modrm|Vex|Space0F3A|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM, Word|Unspecified|BaseIndex }
-vphaddd, 0x6602, None, CpuAVX, Modrm|Vex|Space0F38|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vphaddsw, 0x6603, None, CpuAVX, Modrm|Vex|Space0F38|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vphaddw, 0x6601, None, CpuAVX, Modrm|Vex|Space0F38|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
+vphaddd, 0x6602, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F38|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vphaddsw, 0x6603, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F38|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vphaddw, 0x6601, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F38|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
vphminposuw, 0x6641, None, CpuAVX, Modrm|Vex|Space0F38|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM }
-vphsubd, 0x6606, None, CpuAVX, Modrm|Vex|Space0F38|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vphsubsw, 0x6607, None, CpuAVX, Modrm|Vex|Space0F38|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vphsubw, 0x6605, None, CpuAVX, Modrm|Vex|Space0F38|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
+vphsubd, 0x6606, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F38|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vphsubsw, 0x6607, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F38|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vphsubw, 0x6605, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F38|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
vpinsrb, 0x6620, None, CpuAVX, Modrm|Vex|Space0F3A|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Reg32|Reg64, RegXMM, RegXMM }
vpinsrb, 0x6620, None, CpuAVX, Modrm|Vex|Space0F3A|VexVVVV|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Byte|Unspecified|BaseIndex, RegXMM, RegXMM }
vpinsrd, 0x6622, None, CpuAVX, Modrm|Vex|Space0F3A|VexVVVV=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Reg32|Dword|Unspecified|BaseIndex, RegXMM, RegXMM }
vpinsrq, 0x6622, None, CpuAVX|Cpu64, Modrm|Vex|Space0F3A|VexVVVV=1|VexW1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Reg64|Unspecified|BaseIndex, RegXMM, RegXMM }
vpinsrw, 0x66c4, None, CpuAVX, Modrm|Vex|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_sSuf|No_ldSuf, { Imm8, Reg32|Reg64, RegXMM, RegXMM }
vpinsrw, 0x66c4, None, CpuAVX, Modrm|Vex|Space0F|VexVVVV|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Word|Unspecified|BaseIndex, RegXMM, RegXMM }
-vpmaddubsw, 0x6604, None, CpuAVX, Modrm|Vex|Space0F38|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpmaddwd, 0x66f5, None, CpuAVX, Modrm|C|Vex|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpmaxsb, 0x663c, None, CpuAVX, Modrm|Vex|Space0F38|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpmaxsd, 0x663d, None, CpuAVX, Modrm|Vex|Space0F38|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpmaxsw, 0x66ee, None, CpuAVX, Modrm|C|Vex|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpmaxub, 0x66de, None, CpuAVX, Modrm|C|Vex|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpmaxud, 0x663f, None, CpuAVX, Modrm|Vex|Space0F38|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpmaxuw, 0x663e, None, CpuAVX, Modrm|Vex|Space0F38|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpminsb, 0x6638, None, CpuAVX, Modrm|Vex|Space0F38|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpminsd, 0x6639, None, CpuAVX, Modrm|Vex|Space0F38|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpminsw, 0x66ea, None, CpuAVX, Modrm|C|Vex|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpminub, 0x66da, None, CpuAVX, Modrm|C|Vex|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpminud, 0x663b, None, CpuAVX, Modrm|Vex|Space0F38|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpminuw, 0x663a, None, CpuAVX, Modrm|Vex|Space0F38|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpmovmskb, 0x66d7, None, CpuAVX, Modrm|Vex|Space0F|VexWIG|No_bSuf|No_wSuf|No_sSuf|No_ldSuf, { RegXMM, Reg32|Reg64 }
+vpmaddubsw, 0x6604, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F38|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpmaddwd, 0x66f5, None, CpuAVX|CpuAVX2, Modrm|C|Vex|Space0F|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpmaxsb, 0x663c, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F38|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpmaxsd, 0x663d, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F38|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpmaxsw, 0x66ee, None, CpuAVX|CpuAVX2, Modrm|C|Vex|Space0F|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpmaxub, 0x66de, None, CpuAVX|CpuAVX2, Modrm|C|Vex|Space0F|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpmaxud, 0x663f, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F38|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpmaxuw, 0x663e, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F38|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpminsb, 0x6638, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F38|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpminsd, 0x6639, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F38|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpminsw, 0x66ea, None, CpuAVX|CpuAVX2, Modrm|C|Vex|Space0F|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpminub, 0x66da, None, CpuAVX|CpuAVX2, Modrm|C|Vex|Space0F|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpminud, 0x663b, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F38|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpminuw, 0x663a, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F38|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpmovmskb, 0x66d7, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F|VexWIG|No_bSuf|No_wSuf|No_sSuf|No_ldSuf, { RegXMM|RegYMM, Reg32|Reg64 }
vpmovsxbd, 0x6621, None, CpuAVX, Modrm|Vex|Space0F38|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM }
vpmovsxbq, 0x6622, None, CpuAVX, Modrm|Vex|Space0F38|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Word|Unspecified|BaseIndex|RegXMM, RegXMM }
vpmovsxbw, 0x6620, None, CpuAVX, Modrm|Vex|Space0F38|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM }
@@ -1700,58 +1700,58 @@ vpmovzxbw, 0x6630, None, CpuAVX, Modrm|Vex|Space0F38|VexWIG|No_bSuf|No_wSuf|No_l
vpmovzxdq, 0x6635, None, CpuAVX, Modrm|Vex|Space0F38|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM }
vpmovzxwd, 0x6633, None, CpuAVX, Modrm|Vex|Space0F38|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM }
vpmovzxwq, 0x6634, None, CpuAVX, Modrm|Vex|Space0F38|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM }
-vpmuldq, 0x6628, None, CpuAVX, Modrm|Vex|Space0F38|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpmulhrsw, 0x660b, None, CpuAVX, Modrm|Vex|Space0F38|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpmulhuw, 0x66e4, None, CpuAVX, Modrm|C|Vex|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpmulhw, 0x66e5, None, CpuAVX, Modrm|C|Vex|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpmulld, 0x6640, None, CpuAVX, Modrm|Vex|Space0F38|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpmullw, 0x66d5, None, CpuAVX, Modrm|C|Vex|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpmuludq, 0x66f4, None, CpuAVX, Modrm|C|Vex|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpor, 0x66eb, None, CpuAVX, Modrm|C|Vex|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpsadbw, 0x66f6, None, CpuAVX, Modrm|Vex|Space0F|VexVVVV=1|VexWIG|C|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpshufb, 0x6600, None, CpuAVX, Modrm|Vex|Space0F38|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpshufd, 0x6670, None, CpuAVX, Modrm|Vex|Space0F|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Unspecified|BaseIndex|RegXMM, RegXMM }
-vpshufhw, 0xf370, None, CpuAVX, Modrm|Vex|Space0F|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Unspecified|BaseIndex|RegXMM, RegXMM }
-vpshuflw, 0xf270, None, CpuAVX, Modrm|Vex|Space0F|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Unspecified|BaseIndex|RegXMM, RegXMM }
-vpsignb, 0x6608, None, CpuAVX, Modrm|Vex|Space0F38|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpsignd, 0x660a, None, CpuAVX, Modrm|Vex|Space0F38|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpsignw, 0x6609, None, CpuAVX, Modrm|Vex|Space0F38|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpslld, 0x6672, 6, CpuAVX, Modrm|Vex|Space0F|VexVVVV=2|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM, RegXMM }
-vpslld, 0x66f2, None, CpuAVX, Modrm|Vex|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpslldq, 0x6673, 7, CpuAVX, Modrm|Vex|Space0F|VexVVVV=2|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM, RegXMM }
-vpsllq, 0x6673, 6, CpuAVX, Modrm|Vex|Space0F|VexVVVV=2|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM, RegXMM }
-vpsllq, 0x66f3, None, CpuAVX, Modrm|Vex|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpsllw, 0x6671, 6, CpuAVX, Modrm|Vex|Space0F|VexVVVV=2|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM, RegXMM }
-vpsllw, 0x66f1, None, CpuAVX, Modrm|Vex|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpsrad, 0x6672, 4, CpuAVX, Modrm|Vex|Space0F|VexVVVV=2|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM, RegXMM }
-vpsrad, 0x66e2, None, CpuAVX, Modrm|Vex|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpsraw, 0x6671, 4, CpuAVX, Modrm|Vex|Space0F|VexVVVV=2|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM, RegXMM }
-vpsraw, 0x66e1, None, CpuAVX, Modrm|Vex|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpsrld, 0x6672, 2, CpuAVX, Modrm|Vex|Space0F|VexVVVV=2|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM, RegXMM }
-vpsrld, 0x66d2, None, CpuAVX, Modrm|Vex|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpsrldq, 0x6673, 3, CpuAVX, Modrm|Vex|Space0F|VexVVVV=2|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM, RegXMM }
-vpsrlq, 0x6673, 2, CpuAVX, Modrm|Vex|Space0F|VexVVVV=2|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM, RegXMM }
-vpsrlq, 0x66d3, None, CpuAVX, Modrm|Vex|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpsrlw, 0x6671, 2, CpuAVX, Modrm|Vex|Space0F|VexVVVV=2|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM, RegXMM }
-vpsrlw, 0x66d1, None, CpuAVX, Modrm|Vex|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpsubb, 0x66f8, None, CpuAVX, Modrm|Vex|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpsubd, 0x66fa, None, CpuAVX, Modrm|Vex|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpsubq, 0x66fb, None, CpuAVX, Modrm|Vex|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpsubsb, 0x66e8, None, CpuAVX, Modrm|Vex|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpsubsw, 0x66e9, None, CpuAVX, Modrm|Vex|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpsubusb, 0x66d8, None, CpuAVX, Modrm|Vex|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpsubusw, 0x66d9, None, CpuAVX, Modrm|Vex|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpsubw, 0x66f9, None, CpuAVX, Modrm|Vex|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
+vpmuldq, 0x6628, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F38|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpmulhrsw, 0x660b, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F38|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpmulhuw, 0x66e4, None, CpuAVX|CpuAVX2, Modrm|C|Vex|Space0F|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpmulhw, 0x66e5, None, CpuAVX|CpuAVX2, Modrm|C|Vex|Space0F|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpmulld, 0x6640, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F38|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpmullw, 0x66d5, None, CpuAVX|CpuAVX2, Modrm|C|Vex|Space0F|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpmuludq, 0x66f4, None, CpuAVX|CpuAVX2, Modrm|C|Vex|Space0F|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpor, 0x66eb, None, CpuAVX|CpuAVX2, Modrm|C|Vex|Space0F|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpsadbw, 0x66f6, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckRegSize|C|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpshufb, 0x6600, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F38|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpshufd, 0x6670, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM }
+vpshufhw, 0xf370, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM }
+vpshuflw, 0xf270, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM }
+vpsignb, 0x6608, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F38|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpsignd, 0x660a, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F38|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpsignw, 0x6609, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F38|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpslld, 0x6672, 6, CpuAVX|CpuAVX2, Modrm|Vex|Space0F|VexVVVV=2|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|RegYMM, RegXMM|RegYMM }
+vpslld, 0x66f2, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpslldq, 0x6673, 7, CpuAVX|CpuAVX2, Modrm|Vex|Space0F|VexVVVV=2|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|RegYMM, RegXMM|RegYMM }
+vpsllq, 0x6673, 6, CpuAVX|CpuAVX2, Modrm|Vex|Space0F|VexVVVV=2|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|RegYMM, RegXMM|RegYMM }
+vpsllq, 0x66f3, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpsllw, 0x6671, 6, CpuAVX|CpuAVX2, Modrm|Vex|Space0F|VexVVVV=2|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|RegYMM, RegXMM|RegYMM }
+vpsllw, 0x66f1, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpsrad, 0x6672, 4, CpuAVX|CpuAVX2, Modrm|Vex|Space0F|VexVVVV=2|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|RegYMM, RegXMM|RegYMM }
+vpsrad, 0x66e2, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpsraw, 0x6671, 4, CpuAVX|CpuAVX2, Modrm|Vex|Space0F|VexVVVV=2|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|RegYMM, RegXMM|RegYMM }
+vpsraw, 0x66e1, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpsrld, 0x6672, 2, CpuAVX|CpuAVX2, Modrm|Vex|Space0F|VexVVVV=2|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|RegYMM, RegXMM|RegYMM }
+vpsrld, 0x66d2, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpsrldq, 0x6673, 3, CpuAVX|CpuAVX2, Modrm|Vex|Space0F|VexVVVV=2|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|RegYMM, RegXMM|RegYMM }
+vpsrlq, 0x6673, 2, CpuAVX|CpuAVX2, Modrm|Vex|Space0F|VexVVVV=2|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|RegYMM, RegXMM|RegYMM }
+vpsrlq, 0x66d3, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpsrlw, 0x6671, 2, CpuAVX|CpuAVX2, Modrm|Vex|Space0F|VexVVVV=2|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|RegYMM, RegXMM|RegYMM }
+vpsrlw, 0x66d1, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpsubb, 0x66f8, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Optimize, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpsubd, 0x66fa, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Optimize, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpsubq, 0x66fb, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Optimize, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpsubsb, 0x66e8, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpsubsw, 0x66e9, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpsubusb, 0x66d8, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpsubusw, 0x66d9, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpsubw, 0x66f9, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Optimize, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
vptest, 0x6617, None, CpuAVX, Modrm|Vex|Space0F38|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM }
-vpunpckhbw, 0x6668, None, CpuAVX, Modrm|Vex|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpunpckhdq, 0x666a, None, CpuAVX, Modrm|Vex|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpunpckhqdq, 0x666d, None, CpuAVX, Modrm|Vex|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpunpckhwd, 0x6669, None, CpuAVX, Modrm|Vex|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpunpcklbw, 0x6660, None, CpuAVX, Modrm|Vex|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpunpckldq, 0x6662, None, CpuAVX, Modrm|Vex|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpunpcklqdq, 0x666c, None, CpuAVX, Modrm|Vex|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpunpcklwd, 0x6661, None, CpuAVX, Modrm|Vex|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
-vpxor, 0x66ef, None, CpuAVX, Modrm|C|Vex|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
+vpunpckhbw, 0x6668, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpunpckhdq, 0x666a, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpunpckhqdq, 0x666d, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpunpckhwd, 0x6669, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpunpcklbw, 0x6660, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpunpckldq, 0x6662, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpunpcklqdq, 0x666c, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpunpcklwd, 0x6661, None, CpuAVX|CpuAVX2, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpxor, 0x66ef, None, CpuAVX|CpuAVX2, Modrm|C|Vex|Space0F|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Optimize, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
vrcpps, 0x53, None, CpuAVX, Modrm|Vex|Space0F|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM }
vrcpss, 0xf353, None, CpuAVX, Modrm|Vex=3|Space0F|VexVVVV|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM }
vroundpd, 0x6609, None, CpuAVX, Modrm|Vex|Space0F3A|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM }
@@ -1786,59 +1786,6 @@ vzeroupper, 0x77, None, CpuAVX, Vex|Space0F|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sS
// 256bit integer AVX2 instructions.
-vmovntdqa, 0x662a, None, CpuAVX2, Modrm|Vex=2|Space0F38|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Ymmword|Unspecified|BaseIndex, RegYMM }
-vmpsadbw, 0x6642, None, CpuAVX2, Modrm|Vex=2|Space0F3A|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpabsb, 0x661c, None, CpuAVX2, Modrm|Vex=2|Space0F38|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM }
-vpabsd, 0x661e, None, CpuAVX2, Modrm|Vex=2|Space0F38|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM }
-vpabsw, 0x661d, None, CpuAVX2, Modrm|Vex=2|Space0F38|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM }
-vpackssdw, 0x666b, None, CpuAVX2, Modrm|Vex=2|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpacksswb, 0x6663, None, CpuAVX2, Modrm|Vex=2|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpackusdw, 0x662b, None, CpuAVX2, Modrm|Vex=2|Space0F38|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpackuswb, 0x6667, None, CpuAVX2, Modrm|Vex=2|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpaddsb, 0x66ec, None, CpuAVX2, Modrm|C|Vex=2|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpaddsw, 0x66ed, None, CpuAVX2, Modrm|C|Vex=2|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpaddb, 0x66fc, None, CpuAVX2, Modrm|C|Vex=2|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpaddd, 0x66fe, None, CpuAVX2, Modrm|C|Vex=2|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpaddq, 0x66d4, None, CpuAVX2, Modrm|C|Vex=2|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpaddw, 0x66fd, None, CpuAVX2, Modrm|C|Vex=2|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpaddusb, 0x66dc, None, CpuAVX2, Modrm|C|Vex=2|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpaddusw, 0x66dd, None, CpuAVX2, Modrm|C|Vex=2|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpalignr, 0x660f, None, CpuAVX2, Modrm|Vex=2|Space0F3A|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpand, 0x66db, None, CpuAVX2, Modrm|C|Vex=2|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpandn, 0x66df, None, CpuAVX2, Modrm|Vex=2|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Optimize, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpavgb, 0x66e0, None, CpuAVX2, Modrm|C|Vex=2|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpavgw, 0x66e3, None, CpuAVX2, Modrm|C|Vex=2|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpblendvb, 0x664c, None, CpuAVX2, Modrm|Vex=2|Space0F3A|VexVVVV=1|VexSources=2|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegYMM, Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpblendw, 0x660e, None, CpuAVX2, Modrm|Vex=2|Space0F3A|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpcmpeqb, 0x6674, None, CpuAVX2, Modrm|C|Vex=2|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpcmpeqd, 0x6676, None, CpuAVX2, Modrm|C|Vex=2|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpcmpeqq, 0x6629, None, CpuAVX2, Modrm|Vex=2|Space0F38|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpcmpeqw, 0x6675, None, CpuAVX2, Modrm|C|Vex=2|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpcmpgtb, 0x6664, None, CpuAVX2, Modrm|Vex=2|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpcmpgtd, 0x6666, None, CpuAVX2, Modrm|Vex=2|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpcmpgtq, 0x6637, None, CpuAVX2, Modrm|Vex=2|Space0F38|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpcmpgtw, 0x6665, None, CpuAVX2, Modrm|Vex=2|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vphaddd, 0x6602, None, CpuAVX2, Modrm|Vex=2|Space0F38|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vphaddsw, 0x6603, None, CpuAVX2, Modrm|Vex=2|Space0F38|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vphaddw, 0x6601, None, CpuAVX2, Modrm|Vex=2|Space0F38|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vphsubd, 0x6606, None, CpuAVX2, Modrm|Vex=2|Space0F38|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vphsubsw, 0x6607, None, CpuAVX2, Modrm|Vex=2|Space0F38|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vphsubw, 0x6605, None, CpuAVX2, Modrm|Vex=2|Space0F38|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpmaddubsw, 0x6604, None, CpuAVX2, Modrm|Vex=2|Space0F38|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpmaddwd, 0x66f5, None, CpuAVX2, Modrm|C|Vex=2|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpmaxsb, 0x663c, None, CpuAVX2, Modrm|Vex=2|Space0F38|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpmaxsd, 0x663d, None, CpuAVX2, Modrm|Vex=2|Space0F38|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpmaxsw, 0x66ee, None, CpuAVX2, Modrm|C|Vex=2|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpmaxub, 0x66de, None, CpuAVX2, Modrm|C|Vex=2|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpmaxud, 0x663f, None, CpuAVX2, Modrm|Vex=2|Space0F38|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpmaxuw, 0x663e, None, CpuAVX2, Modrm|Vex=2|Space0F38|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpminsb, 0x6638, None, CpuAVX2, Modrm|Vex=2|Space0F38|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpminsd, 0x6639, None, CpuAVX2, Modrm|Vex=2|Space0F38|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpminsw, 0x66ea, None, CpuAVX2, Modrm|C|Vex=2|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpminub, 0x66da, None, CpuAVX2, Modrm|C|Vex=2|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpminud, 0x663b, None, CpuAVX2, Modrm|Vex=2|Space0F38|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpminuw, 0x663a, None, CpuAVX2, Modrm|Vex=2|Space0F38|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpmovmskb, 0x66d7, None, CpuAVX2, Modrm|Vex=2|Space0F|VexWIG|No_bSuf|No_wSuf|No_sSuf|No_ldSuf, { RegYMM, Reg32|Reg64 }
vpmovsxbd, 0x6621, None, CpuAVX2, Modrm|Vex=2|Space0F38|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegYMM }
vpmovsxbq, 0x6622, None, CpuAVX2, Modrm|Vex=2|Space0F38|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegYMM }
vpmovsxbw, 0x6620, None, CpuAVX2, Modrm|Vex=2|Space0F38|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegYMM }
@@ -1851,57 +1798,6 @@ vpmovzxbw, 0x6630, None, CpuAVX2, Modrm|Vex=2|Space0F38|VexWIG|No_bSuf|No_wSuf|N
vpmovzxdq, 0x6635, None, CpuAVX2, Modrm|Vex=2|Space0F38|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegYMM }
vpmovzxwd, 0x6633, None, CpuAVX2, Modrm|Vex=2|Space0F38|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegYMM }
vpmovzxwq, 0x6634, None, CpuAVX2, Modrm|Vex=2|Space0F38|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegYMM }
-vpmuldq, 0x6628, None, CpuAVX2, Modrm|Vex=2|Space0F38|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpmulhrsw, 0x660b, None, CpuAVX2, Modrm|Vex=2|Space0F38|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpmulhuw, 0x66e4, None, CpuAVX2, Modrm|C|Vex=2|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpmulhw, 0x66e5, None, CpuAVX2, Modrm|C|Vex=2|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpmulld, 0x6640, None, CpuAVX2, Modrm|Vex=2|Space0F38|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpmullw, 0x66d5, None, CpuAVX2, Modrm|C|Vex=2|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpmuludq, 0x66f4, None, CpuAVX2, Modrm|C|Vex=2|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpor, 0x66eb, None, CpuAVX2, Modrm|C|Vex=2|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpsadbw, 0x66f6, None, CpuAVX2, Modrm|Vex=2|Space0F|VexVVVV=1|VexWIG|C|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpshufb, 0x6600, None, CpuAVX2, Modrm|Vex=2|Space0F38|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpshufd, 0x6670, None, CpuAVX2, Modrm|Vex=2|Space0F|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Unspecified|BaseIndex|RegYMM, RegYMM }
-vpshufhw, 0xf370, None, CpuAVX2, Modrm|Vex=2|Space0F|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Unspecified|BaseIndex|RegYMM, RegYMM }
-vpshuflw, 0xf270, None, CpuAVX2, Modrm|Vex=2|Space0F|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Unspecified|BaseIndex|RegYMM, RegYMM }
-vpsignb, 0x6608, None, CpuAVX2, Modrm|Vex=2|Space0F38|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpsignd, 0x660a, None, CpuAVX2, Modrm|Vex=2|Space0F38|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpsignw, 0x6609, None, CpuAVX2, Modrm|Vex=2|Space0F38|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpslld, 0x6672, 6, CpuAVX2, Modrm|Vex=2|Space0F|VexVVVV=2|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegYMM, RegYMM }
-vpslld, 0x66f2, None, CpuAVX2, Modrm|Vex=2|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegYMM, RegYMM }
-vpslldq, 0x6673, 7, CpuAVX2, Modrm|Vex=2|Space0F|VexVVVV=2|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegYMM, RegYMM }
-vpsllq, 0x6673, 6, CpuAVX2, Modrm|Vex=2|Space0F|VexVVVV=2|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegYMM, RegYMM }
-vpsllq, 0x66f3, None, CpuAVX2, Modrm|Vex=2|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegYMM, RegYMM }
-vpsllw, 0x6671, 6, CpuAVX2, Modrm|Vex=2|Space0F|VexVVVV=2|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegYMM, RegYMM }
-vpsllw, 0x66f1, None, CpuAVX2, Modrm|Vex=2|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegYMM, RegYMM }
-vpsrad, 0x6672, 4, CpuAVX2, Modrm|Vex=2|Space0F|VexVVVV=2|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegYMM, RegYMM }
-vpsrad, 0x66e2, None, CpuAVX2, Modrm|Vex=2|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegYMM, RegYMM }
-vpsraw, 0x6671, 4, CpuAVX2, Modrm|Vex=2|Space0F|VexVVVV=2|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegYMM, RegYMM }
-vpsraw, 0x66e1, None, CpuAVX2, Modrm|Vex=2|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegYMM, RegYMM }
-vpsrld, 0x6672, 2, CpuAVX2, Modrm|Vex=2|Space0F|VexVVVV=2|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegYMM, RegYMM }
-vpsrld, 0x66d2, None, CpuAVX2, Modrm|Vex=2|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegYMM, RegYMM }
-vpsrldq, 0x6673, 3, CpuAVX2, Modrm|Vex=2|Space0F|VexVVVV=2|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegYMM, RegYMM }
-vpsrlq, 0x6673, 2, CpuAVX2, Modrm|Vex=2|Space0F|VexVVVV=2|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegYMM, RegYMM }
-vpsrlq, 0x66d3, None, CpuAVX2, Modrm|Vex=2|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegYMM, RegYMM }
-vpsrlw, 0x6671, 2, CpuAVX2, Modrm|Vex=2|Space0F|VexVVVV=2|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegYMM, RegYMM }
-vpsrlw, 0x66d1, None, CpuAVX2, Modrm|Vex=2|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegYMM, RegYMM }
-vpsubb, 0x66f8, None, CpuAVX2, Modrm|Vex=2|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Optimize, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpsubd, 0x66fa, None, CpuAVX2, Modrm|Vex=2|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Optimize, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpsubq, 0x66fb, None, CpuAVX2, Modrm|Vex=2|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Optimize, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpsubsb, 0x66e8, None, CpuAVX2, Modrm|Vex=2|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpsubsw, 0x66e9, None, CpuAVX2, Modrm|Vex=2|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpsubusb, 0x66d8, None, CpuAVX2, Modrm|Vex=2|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpsubusw, 0x66d9, None, CpuAVX2, Modrm|Vex=2|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpsubw, 0x66f9, None, CpuAVX2, Modrm|Vex=2|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Optimize, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpunpckhbw, 0x6668, None, CpuAVX2, Modrm|Vex=2|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpunpckhdq, 0x666a, None, CpuAVX2, Modrm|Vex=2|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpunpckhqdq, 0x666d, None, CpuAVX2, Modrm|Vex=2|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpunpckhwd, 0x6669, None, CpuAVX2, Modrm|Vex=2|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpunpcklbw, 0x6660, None, CpuAVX2, Modrm|Vex=2|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpunpckldq, 0x6662, None, CpuAVX2, Modrm|Vex=2|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpunpcklqdq, 0x666c, None, CpuAVX2, Modrm|Vex=2|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpunpcklwd, 0x6661, None, CpuAVX2, Modrm|Vex=2|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpxor, 0x66ef, None, CpuAVX2, Modrm|C|Vex=2|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Optimize, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
// New AVX2 instructions.
@@ -2538,8 +2434,8 @@ vpexpandq, 0x6689, None, CpuAVX512F, Modrm|Masking=3|Space0F38|VexW=2|Disp8MemSh
vexpandps, 0x6688, None, CpuAVX512F, Modrm|Masking=3|Space0F38|VexW=1|Disp8MemShift=2|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM }
vpexpandd, 0x6689, None, CpuAVX512F, Modrm|Masking=3|Space0F38|VexW=1|Disp8MemShift=2|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM }
-vextractf32x4, 0x6619, None, CpuAVX512F, Modrm|MaskingMorZ|Space0F3A|VexW=1|Disp8MemShift=4|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegYMM|RegZMM, RegXMM|Unspecified|BaseIndex }
-vextracti32x4, 0x6639, None, CpuAVX512F, Modrm|MaskingMorZ|Space0F3A|VexW=1|Disp8MemShift=4|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegYMM|RegZMM, RegXMM|Unspecified|BaseIndex }
+vextractf32x4, 0x6619, None, CpuAVX512F, Modrm|MaskingMorZ|Space0F3A|VexW=1|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegYMM|RegZMM, RegXMM|Unspecified|BaseIndex }
+vextracti32x4, 0x6639, None, CpuAVX512F, Modrm|MaskingMorZ|Space0F3A|VexW=1|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegYMM|RegZMM, RegXMM|Unspecified|BaseIndex }
vextractf64x4, 0x661B, None, CpuAVX512F, Modrm|EVex=1|MaskingMorZ|Space0F3A|VexW=2|Disp8MemShift=5|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegZMM, RegYMM|Unspecified|BaseIndex }
vextracti64x4, 0x663B, None, CpuAVX512F, Modrm|EVex=1|MaskingMorZ|Space0F3A|VexW=2|Disp8MemShift=5|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegZMM, RegYMM|Unspecified|BaseIndex }
@@ -2840,18 +2736,18 @@ vscatterqps, 0x66A3, None, CpuAVX512F, Modrm|EVex=1|Masking=2|NoDefMask|Space0F3
vpshufd, 0x6670, None, CpuAVX512F, Modrm|Masking=3|Space0F|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM }
-vpslld, 0x66F2, None, CpuAVX512F, Modrm|Masking=3|Space0F|VexVVVV=1|VexW=1|Disp8MemShift=4|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegYMM|RegZMM, RegYMM|RegZMM }
+vpslld, 0x66F2, None, CpuAVX512F, Modrm|Masking=3|Space0F|VexVVVV|VexW0|Disp8MemShift=4|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM }
vpslld, 0x6672, 6, CpuAVX512F, Modrm|Masking=3|Space0F|VexVVVV=2|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM }
-vpsrad, 0x66E2, None, CpuAVX512F, Modrm|Masking=3|Space0F|VexVVVV=1|VexW=1|Disp8MemShift=4|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegYMM|RegZMM, RegYMM|RegZMM }
+vpsrad, 0x66E2, None, CpuAVX512F, Modrm|Masking=3|Space0F|VexVVVV=1|VexW=1|Disp8MemShift=4|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM }
vpsrad, 0x6672, 4, CpuAVX512F, Modrm|Masking=3|Space0F|VexVVVV=2|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM }
-vpsrld, 0x66D2, None, CpuAVX512F, Modrm|Masking=3|Space0F|VexVVVV=1|VexW=1|Disp8MemShift=4|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegYMM|RegZMM, RegYMM|RegZMM }
+vpsrld, 0x66D2, None, CpuAVX512F, Modrm|Masking=3|Space0F|VexVVVV=1|VexW=1|Disp8MemShift=4|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM }
vpsrld, 0x6672, 2, CpuAVX512F, Modrm|Masking=3|Space0F|VexVVVV=2|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM }
-vpsllq, 0x66F3, None, CpuAVX512F, Modrm|Masking=3|Space0F|VexVVVV=1|VexW=2|Disp8MemShift=4|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegYMM|RegZMM, RegYMM|RegZMM }
+vpsllq, 0x66F3, None, CpuAVX512F, Modrm|Masking=3|Space0F|VexVVVV=1|VexW=2|Disp8MemShift=4|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM }
vpsllq, 0x6673, 6, CpuAVX512F, Modrm|Masking=3|Space0F|VexVVVV=2|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM }
-vpsraq, 0x66E2, None, CpuAVX512F, Modrm|Masking=3|Space0F|VexVVVV=1|VexW=2|Disp8MemShift=4|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegYMM|RegZMM, RegYMM|RegZMM }
+vpsraq, 0x66E2, None, CpuAVX512F, Modrm|Masking=3|Space0F|VexVVVV=1|VexW=2|Disp8MemShift=4|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM }
vpsraq, 0x6672, 4, CpuAVX512F, Modrm|Masking=3|Space0F|VexVVVV=2|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM }
-vpsrlq, 0x66D3, None, CpuAVX512F, Modrm|Masking=3|Space0F|VexVVVV=1|VexW=2|Disp8MemShift=4|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegYMM|RegZMM, RegYMM|RegZMM }
+vpsrlq, 0x66D3, None, CpuAVX512F, Modrm|Masking=3|Space0F|VexVVVV=1|VexW=2|Disp8MemShift=4|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM }
vpsrlq, 0x6673, 2, CpuAVX512F, Modrm|Masking=3|Space0F|VexVVVV=2|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM }
vrcp14sd, 0x664D, None, CpuAVX512F, Modrm|EVex=4|Masking=3|Space0F38|VexVVVV|VexW1|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM }
@@ -3052,14 +2948,6 @@ vcvttpd2udqy, 0x78, None, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|Masking=3|Space0F
vmovddup, 0xF212, None, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=3|Space0F|VexW1|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM }
-vpslld, 0x66F2, None, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=3|Space0F|VexVVVV=1|VexW=1|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM }
-vpsrad, 0x66E2, None, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=3|Space0F|VexVVVV=1|VexW=1|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM }
-vpsrld, 0x66D2, None, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=3|Space0F|VexVVVV=1|VexW=1|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM }
-
-vpsllq, 0x66F3, None, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=3|Space0F|VexVVVV=1|VexW=2|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM }
-vpsraq, 0x66E2, None, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=3|Space0F|VexVVVV=1|VexW=2|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM }
-vpsrlq, 0x66D3, None, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=3|Space0F|VexVVVV=1|VexW=2|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM }
-
vpmovdb, 0xF331, None, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|MaskingMorZ|Space0F38|VexW0|Disp8MemShift=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, RegXMM|Dword|Unspecified|BaseIndex }
vpmovdb, 0xF331, None, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|MaskingMorZ|Space0F38|VexW0|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegYMM, RegXMM|Qword|Unspecified|BaseIndex }
vpmovsdb, 0xF321, None, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|MaskingMorZ|Space0F38|VexW0|Disp8MemShift=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, RegXMM|Dword|Unspecified|BaseIndex }
@@ -3200,14 +3088,11 @@ vpmulhuw, 0x66E4, None, CpuAVX512BW, Modrm|Masking=3|Space0F|VexWIG|VexVVVV=1|Di
vpmulhw, 0x66E5, None, CpuAVX512BW, Modrm|Masking=3|Space0F|VexWIG|VexVVVV=1|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM }
vpmullw, 0x66D5, None, CpuAVX512BW, Modrm|Masking=3|Space0F|VexWIG|VexVVVV=1|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM }
vpsllw, 0x6671, 6, CpuAVX512BW, Modrm|Masking=3|Space0F|VexWIG|VexVVVV=2|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM }
-vpsllw, 0x66F1, None, CpuAVX512BW|CpuAVX512VL, Modrm|EVex=2|Masking=3|Space0F|VexVVVV=1|VexWIG|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM }
-vpsllw, 0x66F1, None, CpuAVX512BW, Modrm|Masking=3|Space0F|VexVVVV=1|VexWIG|Disp8MemShift=4|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegYMM|RegZMM, RegYMM|RegZMM }
+vpsllw, 0x66F1, None, CpuAVX512BW, Modrm|Masking=3|Space0F|VexWIG|VexVVVV|Disp8MemShift=4|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM }
vpsraw, 0x6671, 4, CpuAVX512BW, Modrm|Masking=3|Space0F|VexWIG|VexVVVV=2|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM }
-vpsraw, 0x66E1, None, CpuAVX512BW|CpuAVX512VL, Modrm|EVex=2|Masking=3|Space0F|VexWIG|VexVVVV=1|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM }
-vpsraw, 0x66E1, None, CpuAVX512BW, Modrm|Masking=3|Space0F|VexWIG|VexVVVV=1|Disp8MemShift=4|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegYMM|RegZMM, RegYMM|RegZMM }
+vpsraw, 0x66E1, None, CpuAVX512BW, Modrm|Masking=3|Space0F|VexWIG|VexVVVV|Disp8MemShift=4|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM }
vpsrlw, 0x6671, 2, CpuAVX512BW, Modrm|Masking=3|Space0F|VexWIG|VexVVVV=2|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM }
-vpsrlw, 0x66D1, None, CpuAVX512BW|CpuAVX512VL, Modrm|EVex=2|Masking=3|Space0F|VexWIG|VexVVVV=1|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM }
-vpsrlw, 0x66D1, None, CpuAVX512BW, Modrm|Masking=3|Space0F|VexWIG|VexVVVV=1|Disp8MemShift=4|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegYMM|RegZMM, RegYMM|RegZMM }
+vpsrlw, 0x66D1, None, CpuAVX512BW, Modrm|Masking=3|Space0F|VexWIG|VexVVVV|Disp8MemShift=4|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM }
vpsubsw, 0x66E9, None, CpuAVX512BW, Modrm|Masking=3|Space0F|VexWIG|VexVVVV=1|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM }
vpsubusw, 0x66D9, None, CpuAVX512BW, Modrm|Masking=3|Space0F|VexWIG|VexVVVV=1|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM }
vpsubw, 0x66F9, None, CpuAVX512BW, Modrm|Masking=3|Space0F|VexVVVV=1|VexWIG|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Optimize, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM }
@@ -3854,10 +3739,10 @@ vcmp<avx_frel>ph, 0xc2, 0x<avx_frel:imm>, CpuAVX512_FP16, Modrm|EVex512|Masking=
vcmpph, 0xc2, None, CpuAVX512_FP16, Modrm|Masking=2|Space0F3A|VexVVVV|VexW0|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|RegYMM|RegZMM|Word|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask }
vcmpph, 0xc2, None, CpuAVX512_FP16, Modrm|EVex512|Masking=2|Space0F3A|VexVVVV=1|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SAE, { Imm8, Imm8, RegZMM, RegZMM, RegMask }
-vcmp<avx_frel>sh, 0xf3c2, 0x<avx_frel:imm>, CpuAVX512_FP16, Modrm|EVex128|Masking=2|Space0F3A|VexVVVV|VexW0|Disp8MemShift=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Word|Unspecified|BaseIndex, RegXMM, RegMask }
-vcmp<avx_frel>sh, 0xf3c2, 0x<avx_frel:imm>, CpuAVX512_FP16, Modrm|EVex128|Masking=2|Space0F3A|VexVVVV|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask }
-vcmpsh, 0xf3c2, None, CpuAVX512_FP16, Modrm|EVex128|Masking=2|Space0F3A|VexVVVV|VexW0|Disp8MemShift=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|Word|Unspecified|BaseIndex, RegXMM, RegMask }
-vcmpsh, 0xf3c2, None, CpuAVX512_FP16, Modrm|EVex128|Masking=2|Space0F3A|VexVVVV|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SAE, { Imm8, Imm8, RegXMM, RegXMM, RegMask }
+vcmp<avx_frel>sh, 0xf3c2, 0x<avx_frel:imm>, CpuAVX512_FP16, Modrm|EVexLIG|Masking=2|Space0F3A|VexVVVV|VexW0|Disp8MemShift=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Word|Unspecified|BaseIndex, RegXMM, RegMask }
+vcmp<avx_frel>sh, 0xf3c2, 0x<avx_frel:imm>, CpuAVX512_FP16, Modrm|EVexLIG|Masking=2|Space0F3A|VexVVVV|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask }
+vcmpsh, 0xf3c2, None, CpuAVX512_FP16, Modrm|EVexLIG|Masking=2|Space0F3A|VexVVVV|VexW0|Disp8MemShift=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|Word|Unspecified|BaseIndex, RegXMM, RegMask }
+vcmpsh, 0xf3c2, None, CpuAVX512_FP16, Modrm|EVexLIG|Masking=2|Space0F3A|VexVVVV|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SAE, { Imm8, Imm8, RegXMM, RegXMM, RegMask }
vcomish, 0x2f, None, CpuAVX512_FP16, Modrm|EVexLIG|EVexMap5|VexW0|Disp8MemShift=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Word|Unspecified|BaseIndex, RegXMM }
vcomish, 0x2f, None, CpuAVX512_FP16, Modrm|EVexLIG|EVexMap5|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SAE, { Imm8, RegXMM, RegXMM }
@@ -4029,12 +3914,11 @@ vfnmsub<fma>ph, 0x668e | 0x<fma:opc>, None, CpuAVX512_FP16, Modrm|EVex512|VexVVV
vfnmsub<fma>sh, 0x668f | 0x<fma:opc>, None, CpuAVX512_FP16, Modrm|EVexLIG|VexVVVV|Masking=3|EVexMap6|VexW0|Disp8MemShift=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Word|Unspecified|BaseIndex, RegXMM, RegXMM }
vfnmsub<fma>sh, 0x668f | 0x<fma:opc>, None, CpuAVX512_FP16, Modrm|EVexLIG|VexVVVV|Masking=3|EVexMap6|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|StaticRounding|SAE, { Imm8, RegXMM, RegXMM, RegXMM }
-vfpclassph, 0x66, None, CpuAVX512_FP16, Modrm|Masking=2|Space0F3A|VexW0|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|RegYMM|RegZMM|Word|BaseIndex, RegMask }
+vfpclassph, 0x66, None, CpuAVX512_FP16, Modrm|Masking=2|Space0F3A|VexW0|Broadcast|Disp8ShiftVL|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|RegYMM|RegZMM|Word|BaseIndex, RegMask }
vfpclassphz, 0x66, None, CpuAVX512_FP16, Modrm|EVex512|Masking=2|Space0F3A|VexW0|Disp8MemShift=6|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTSyntax, { Imm8, RegZMM|Unspecified|BaseIndex, RegMask }
vfpclassphx, 0x66, None, CpuAVX512_FP16|CpuAVX512VL, Modrm|EVex128|Masking=2|Space0F3A|VexW0|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTSyntax, { Imm8, RegXMM|Unspecified|BaseIndex, RegMask }
vfpclassphy, 0x66, None, CpuAVX512_FP16|CpuAVX512VL, Modrm|EVex256|Masking=2|Space0F3A|VexW0|Disp8MemShift=5|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTSyntax, { Imm8, RegYMM|Unspecified|BaseIndex, RegMask }
-
-vfpclasssh, 0x67, None, CpuAVX512_FP16, Modrm|EVex128|Masking=2|Space0F3A|VexW0|Disp8MemShift=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|Word|Unspecified|BaseIndex, RegMask }
+vfpclasssh, 0x67, None, CpuAVX512_FP16, Modrm|EVexLIG|Masking=2|Space0F3A|VexW0|Disp8MemShift=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|Word|Unspecified|BaseIndex, RegMask }
vgetmantph, 0x26, None, CpuAVX512_FP16, Modrm|Masking=3|Space0F3A|VexW0|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|RegYMM|RegZMM|Word|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM }
vgetmantph, 0x26, None, CpuAVX512_FP16, Modrm|EVex512|Masking=3|Space0F3A|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SAE, { Imm8, Imm8, RegZMM, RegZMM }
diff --git a/opcodes/i386-tbl.h b/opcodes/i386-tbl.h
index c240b43b013..f996add7cc8 100644
--- a/opcodes/i386-tbl.h
+++ b/opcodes/i386-tbl.h
@@ -32,7 +32,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1,
@@ -47,7 +47,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
@@ -62,7 +62,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0,
@@ -77,7 +77,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
@@ -92,7 +92,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
@@ -107,7 +107,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
@@ -122,7 +122,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
@@ -137,7 +137,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } },
{ { 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -152,7 +152,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
@@ -167,7 +167,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
@@ -182,7 +182,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
@@ -197,7 +197,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
@@ -212,7 +212,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
@@ -227,7 +227,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1,
@@ -242,7 +242,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
@@ -257,7 +257,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
@@ -272,7 +272,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -287,7 +287,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -302,7 +302,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
@@ -317,7 +317,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
@@ -332,7 +332,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
@@ -347,7 +347,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
@@ -362,7 +362,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -377,7 +377,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -392,7 +392,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -407,7 +407,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -422,7 +422,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -437,7 +437,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -452,7 +452,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -467,7 +467,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -478,11 +478,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
@@ -493,11 +493,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
@@ -512,7 +512,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
@@ -527,7 +527,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
@@ -542,7 +542,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
@@ -557,7 +557,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
@@ -572,7 +572,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
@@ -587,7 +587,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
@@ -602,7 +602,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
@@ -617,7 +617,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -632,7 +632,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -647,7 +647,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
@@ -662,7 +662,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
@@ -677,7 +677,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
@@ -692,7 +692,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -707,7 +707,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
@@ -722,7 +722,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "push", 0xff, 6, 1,
@@ -735,7 +735,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "push", 0x6a, None, 1,
@@ -748,7 +748,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "push", 0x68, None, 1,
@@ -761,7 +761,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "push", 0x06, None, 1,
@@ -774,7 +774,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "push", 0x50, None, 1,
@@ -787,7 +787,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "push", 0xff, 6, 1,
@@ -800,7 +800,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "push", 0x6a, None, 1,
@@ -813,7 +813,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "push", 0x68, None, 1,
@@ -826,7 +826,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "push", 0xa0, None, 1,
@@ -839,7 +839,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "pusha", 0x60, None, 0,
@@ -852,7 +852,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "pop", 0x58, None, 1,
@@ -865,7 +865,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "pop", 0x8f, 0, 1,
@@ -878,7 +878,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "pop", 0x07, None, 1,
@@ -891,7 +891,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "pop", 0x58, None, 1,
@@ -904,7 +904,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "pop", 0x8f, 0, 1,
@@ -917,7 +917,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "pop", 0xa1, None, 1,
@@ -930,7 +930,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "popa", 0x61, None, 0,
@@ -943,7 +943,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "xchg", 0x90, None, 2,
@@ -956,7 +956,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
@@ -971,7 +971,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
@@ -986,7 +986,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
@@ -1001,7 +1001,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1,
@@ -1016,7 +1016,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0,
@@ -1031,7 +1031,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0,
@@ -1046,7 +1046,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "in", 0xec, None, 1,
@@ -1059,7 +1059,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "out", 0xe6, None, 2,
@@ -1072,7 +1072,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -1087,7 +1087,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
@@ -1102,7 +1102,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "out", 0xee, None, 1,
@@ -1115,7 +1115,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "lea", 0x8d, None, 2,
@@ -1128,7 +1128,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
@@ -1143,7 +1143,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
@@ -1158,7 +1158,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
@@ -1173,7 +1173,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
@@ -1188,7 +1188,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0,
1, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
@@ -1203,7 +1203,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
@@ -1218,7 +1218,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0,
1, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
@@ -1233,7 +1233,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
@@ -1248,7 +1248,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0,
1, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
@@ -1263,7 +1263,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "cld", 0xfc, None, 0,
@@ -1276,7 +1276,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "cli", 0xfa, None, 0,
@@ -1289,7 +1289,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "clts", 0x06, None, 0,
@@ -1302,7 +1302,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "cmc", 0xf5, None, 0,
@@ -1315,7 +1315,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "lahf", 0x9f, None, 0,
@@ -1328,7 +1328,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "sahf", 0x9e, None, 0,
@@ -1341,7 +1341,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "pushf", 0x9c, None, 0,
@@ -1354,7 +1354,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "pushf", 0x9c, None, 0,
@@ -1367,7 +1367,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "popf", 0x9d, None, 0,
@@ -1380,7 +1380,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "popf", 0x9d, None, 0,
@@ -1393,7 +1393,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "stc", 0xf9, None, 0,
@@ -1406,7 +1406,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "std", 0xfd, None, 0,
@@ -1419,7 +1419,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "sti", 0xfb, None, 0,
@@ -1432,7 +1432,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "add", 0x00, None, 2,
@@ -1445,7 +1445,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
@@ -1460,7 +1460,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
@@ -1475,7 +1475,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1,
@@ -1490,7 +1490,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
@@ -1505,7 +1505,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "inc", 0xfe, 0, 1,
@@ -1518,7 +1518,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "sub", 0x28, None, 2,
@@ -1531,7 +1531,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
@@ -1546,7 +1546,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
@@ -1561,7 +1561,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1,
@@ -1576,7 +1576,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
@@ -1591,7 +1591,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "dec", 0xfe, 1, 1,
@@ -1604,7 +1604,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "sbb", 0x18, None, 2,
@@ -1617,7 +1617,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
@@ -1632,7 +1632,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
@@ -1647,7 +1647,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1,
@@ -1662,7 +1662,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
@@ -1677,7 +1677,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
@@ -1692,7 +1692,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
@@ -1707,7 +1707,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1,
@@ -1722,7 +1722,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
@@ -1737,7 +1737,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
@@ -1752,7 +1752,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1,
@@ -1767,7 +1767,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1,
@@ -1782,7 +1782,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
@@ -1797,7 +1797,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
@@ -1812,7 +1812,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
@@ -1827,7 +1827,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1,
@@ -1842,7 +1842,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
@@ -1857,7 +1857,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
@@ -1872,7 +1872,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
@@ -1887,7 +1887,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1,
@@ -1902,7 +1902,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
@@ -1917,7 +1917,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
@@ -1932,7 +1932,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
@@ -1947,7 +1947,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1,
@@ -1962,7 +1962,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
@@ -1977,7 +1977,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "adc", 0x10, None, 2,
@@ -1990,7 +1990,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
@@ -2005,7 +2005,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
@@ -2020,7 +2020,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1,
@@ -2035,7 +2035,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
@@ -2050,7 +2050,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "not", 0xf6, 2, 1,
@@ -2063,7 +2063,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "aaa", 0x37, None, 0,
@@ -2076,7 +2076,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "aas", 0x3f, None, 0,
@@ -2089,7 +2089,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "daa", 0x27, None, 0,
@@ -2102,7 +2102,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "das", 0x2f, None, 0,
@@ -2115,7 +2115,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "aad", 0xd50a, None, 0,
@@ -2128,7 +2128,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "aad", 0xd5, None, 1,
@@ -2141,7 +2141,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "aam", 0xd40a, None, 0,
@@ -2154,7 +2154,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "aam", 0xd4, None, 1,
@@ -2167,7 +2167,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "cbw", 0x98, None, 0,
@@ -2180,7 +2180,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "cdqe", 0x98, None, 0,
@@ -2193,7 +2193,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "cwde", 0x98, None, 0,
@@ -2206,7 +2206,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "cwd", 0x99, None, 0,
@@ -2219,7 +2219,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "cdq", 0x99, None, 0,
@@ -2232,7 +2232,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "cqo", 0x99, None, 0,
@@ -2245,7 +2245,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "cbtw", 0x98, None, 0,
@@ -2258,7 +2258,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "cltq", 0x98, None, 0,
@@ -2271,7 +2271,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "cwtl", 0x98, None, 0,
@@ -2284,7 +2284,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "cwtd", 0x99, None, 0,
@@ -2297,7 +2297,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "cltd", 0x99, None, 0,
@@ -2310,7 +2310,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "cqto", 0x99, None, 0,
@@ -2323,7 +2323,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "mul", 0xf6, 4, 1,
@@ -2336,7 +2336,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "imul", 0xf6, 5, 1,
@@ -2349,7 +2349,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "imul", 0xaf, None, 2,
@@ -2362,7 +2362,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
@@ -2377,7 +2377,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
@@ -2394,7 +2394,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
@@ -2411,7 +2411,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
@@ -2426,7 +2426,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
@@ -2441,7 +2441,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "div", 0xf6, 6, 2,
@@ -2454,7 +2454,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1,
@@ -2469,7 +2469,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "idiv", 0xf6, 7, 2,
@@ -2482,7 +2482,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1,
@@ -2497,7 +2497,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
@@ -2512,7 +2512,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
@@ -2527,7 +2527,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
@@ -2542,7 +2542,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "ror", 0xd0, 1, 2,
@@ -2555,7 +2555,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
@@ -2570,7 +2570,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
@@ -2585,7 +2585,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
@@ -2600,7 +2600,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "rcl", 0xd0, 2, 2,
@@ -2613,7 +2613,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
@@ -2628,7 +2628,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
@@ -2643,7 +2643,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
@@ -2658,7 +2658,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "rcr", 0xd0, 3, 2,
@@ -2671,7 +2671,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
@@ -2686,7 +2686,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
@@ -2701,7 +2701,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
@@ -2716,7 +2716,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "sal", 0xd0, 4, 2,
@@ -2729,7 +2729,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
@@ -2744,7 +2744,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
@@ -2759,7 +2759,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
@@ -2774,7 +2774,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "shl", 0xd0, 4, 2,
@@ -2787,7 +2787,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
@@ -2802,7 +2802,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
@@ -2817,7 +2817,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
@@ -2832,7 +2832,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "shr", 0xd0, 5, 2,
@@ -2845,7 +2845,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
@@ -2860,7 +2860,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
@@ -2875,7 +2875,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
@@ -2890,7 +2890,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "sar", 0xd0, 7, 2,
@@ -2903,7 +2903,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
@@ -2918,7 +2918,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
@@ -2933,7 +2933,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
@@ -2948,7 +2948,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "shld", 0xa4, None, 3,
@@ -2961,7 +2961,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
@@ -2978,7 +2978,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
@@ -2995,7 +2995,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
@@ -3010,7 +3010,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
@@ -3027,7 +3027,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
@@ -3044,7 +3044,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
@@ -3059,7 +3059,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "call", 0xe8, None, 1,
@@ -3072,7 +3072,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "call", 0xe8, None, 1,
@@ -3085,7 +3085,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "call", 0xff, 2, 1,
@@ -3098,7 +3098,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "call", 0xff, 2, 1,
@@ -3111,7 +3111,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "call", 0xff, 2, 1,
@@ -3124,7 +3124,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "call", 0x9a, None, 2,
@@ -3137,7 +3137,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -3152,7 +3152,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "call", 0xff, 3, 1,
@@ -3165,7 +3165,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0,
1, 0, 0, 0, 0, 0, 0 } } } },
{ "lcall", 0x9a, None, 2,
@@ -3178,7 +3178,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -3193,7 +3193,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "lcall", 0xff, 3, 1,
@@ -3206,7 +3206,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "jmp", 0xeb, None, 1,
@@ -3219,7 +3219,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "jmp", 0xeb, None, 1,
@@ -3232,7 +3232,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "jmp", 0xff, 4, 1,
@@ -3245,7 +3245,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "jmp", 0xff, 4, 1,
@@ -3258,7 +3258,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "jmp", 0xff, 4, 1,
@@ -3271,7 +3271,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "jmp", 0xea, None, 2,
@@ -3284,7 +3284,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -3299,7 +3299,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "jmp", 0xff, 5, 1,
@@ -3312,7 +3312,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0,
1, 0, 0, 0, 0, 0, 0 } } } },
{ "ljmp", 0xea, None, 2,
@@ -3325,7 +3325,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -3340,7 +3340,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "ljmp", 0xff, 5, 1,
@@ -3353,7 +3353,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "ret", 0xc3, None, 0,
@@ -3366,7 +3366,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "ret", 0xc2, None, 1,
@@ -3379,7 +3379,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "ret", 0xc3, None, 0,
@@ -3392,7 +3392,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "ret", 0xc2, None, 1,
@@ -3405,7 +3405,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "ret", 0xc3, None, 0,
@@ -3418,7 +3418,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "ret", 0xc2, None, 1,
@@ -3431,7 +3431,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "lret", 0xcb, None, 0,
@@ -3444,7 +3444,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "lret", 0xca, None, 1,
@@ -3457,7 +3457,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "retf", 0xcb, None, 0,
@@ -3470,7 +3470,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "retf", 0xca, None, 1,
@@ -3483,7 +3483,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "enter", 0xc8, None, 2,
@@ -3496,7 +3496,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -3511,7 +3511,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -3526,7 +3526,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "leave", 0xc9, None, 0,
@@ -3539,7 +3539,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "jo", 0x70, None, 1,
@@ -3552,7 +3552,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "jno", 0x71, None, 1,
@@ -3565,7 +3565,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "jb", 0x72, None, 1,
@@ -3578,7 +3578,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "jc", 0x72, None, 1,
@@ -3591,7 +3591,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "jnae", 0x72, None, 1,
@@ -3604,7 +3604,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "jnb", 0x73, None, 1,
@@ -3617,7 +3617,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "jnc", 0x73, None, 1,
@@ -3630,7 +3630,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "jae", 0x73, None, 1,
@@ -3643,7 +3643,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "je", 0x74, None, 1,
@@ -3656,7 +3656,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "jz", 0x74, None, 1,
@@ -3669,7 +3669,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "jne", 0x75, None, 1,
@@ -3682,7 +3682,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "jnz", 0x75, None, 1,
@@ -3695,7 +3695,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "jbe", 0x76, None, 1,
@@ -3708,7 +3708,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "jna", 0x76, None, 1,
@@ -3721,7 +3721,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "jnbe", 0x77, None, 1,
@@ -3734,7 +3734,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "ja", 0x77, None, 1,
@@ -3747,7 +3747,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "js", 0x78, None, 1,
@@ -3760,7 +3760,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "jns", 0x79, None, 1,
@@ -3773,7 +3773,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "jp", 0x7a, None, 1,
@@ -3786,7 +3786,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "jpe", 0x7a, None, 1,
@@ -3799,7 +3799,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "jnp", 0x7b, None, 1,
@@ -3812,7 +3812,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "jpo", 0x7b, None, 1,
@@ -3825,7 +3825,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "jl", 0x7c, None, 1,
@@ -3838,7 +3838,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "jnge", 0x7c, None, 1,
@@ -3851,7 +3851,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "jnl", 0x7d, None, 1,
@@ -3864,7 +3864,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "jge", 0x7d, None, 1,
@@ -3877,7 +3877,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "jle", 0x7e, None, 1,
@@ -3890,7 +3890,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "jng", 0x7e, None, 1,
@@ -3903,7 +3903,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "jnle", 0x7f, None, 1,
@@ -3916,7 +3916,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "jg", 0x7f, None, 1,
@@ -3929,7 +3929,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "jcxz", 0xe3, None, 1,
@@ -3942,7 +3942,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "jecxz", 0xe3, None, 1,
@@ -3955,7 +3955,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "jrcxz", 0xe3, None, 1,
@@ -3968,7 +3968,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "loop", 0xe2, None, 1,
@@ -3981,7 +3981,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "loop", 0xe2, None, 1,
@@ -3994,7 +3994,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "loopz", 0xe1, None, 1,
@@ -4007,7 +4007,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "loopz", 0xe1, None, 1,
@@ -4020,7 +4020,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "loope", 0xe1, None, 1,
@@ -4033,7 +4033,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "loope", 0xe1, None, 1,
@@ -4046,7 +4046,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "loopnz", 0xe0, None, 1,
@@ -4059,7 +4059,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "loopnz", 0xe0, None, 1,
@@ -4072,7 +4072,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "loopne", 0xe0, None, 1,
@@ -4085,7 +4085,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "loopne", 0xe0, None, 1,
@@ -4098,7 +4098,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "seto", 0x90, 0, 1,
@@ -4111,7 +4111,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "setno", 0x91, 0, 1,
@@ -4124,7 +4124,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "setb", 0x92, 0, 1,
@@ -4137,7 +4137,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "setc", 0x92, 0, 1,
@@ -4150,7 +4150,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "setnae", 0x92, 0, 1,
@@ -4163,7 +4163,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "setnb", 0x93, 0, 1,
@@ -4176,7 +4176,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "setnc", 0x93, 0, 1,
@@ -4189,7 +4189,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "setae", 0x93, 0, 1,
@@ -4202,7 +4202,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "sete", 0x94, 0, 1,
@@ -4215,7 +4215,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "setz", 0x94, 0, 1,
@@ -4228,7 +4228,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "setne", 0x95, 0, 1,
@@ -4241,7 +4241,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "setnz", 0x95, 0, 1,
@@ -4254,7 +4254,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "setbe", 0x96, 0, 1,
@@ -4267,7 +4267,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "setna", 0x96, 0, 1,
@@ -4280,7 +4280,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "setnbe", 0x97, 0, 1,
@@ -4293,7 +4293,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "seta", 0x97, 0, 1,
@@ -4306,7 +4306,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "sets", 0x98, 0, 1,
@@ -4319,7 +4319,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "setns", 0x99, 0, 1,
@@ -4332,7 +4332,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "setp", 0x9a, 0, 1,
@@ -4345,7 +4345,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "setpe", 0x9a, 0, 1,
@@ -4358,7 +4358,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "setnp", 0x9b, 0, 1,
@@ -4371,7 +4371,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "setpo", 0x9b, 0, 1,
@@ -4384,7 +4384,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "setl", 0x9c, 0, 1,
@@ -4397,7 +4397,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "setnge", 0x9c, 0, 1,
@@ -4410,7 +4410,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "setnl", 0x9d, 0, 1,
@@ -4423,7 +4423,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "setge", 0x9d, 0, 1,
@@ -4436,7 +4436,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "setle", 0x9e, 0, 1,
@@ -4449,7 +4449,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "setng", 0x9e, 0, 1,
@@ -4462,7 +4462,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "setnle", 0x9f, 0, 1,
@@ -4475,7 +4475,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "setg", 0x9f, 0, 1,
@@ -4488,7 +4488,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "cmps", 0xa6, None, 0,
@@ -4501,7 +4501,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "cmps", 0xa6, None, 2,
@@ -4514,7 +4514,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
@@ -4529,7 +4529,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "cmpsd", 0xa7, None, 2,
@@ -4542,7 +4542,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -4557,7 +4557,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -4574,7 +4574,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -4591,7 +4591,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "scmp", 0xa6, None, 2,
@@ -4604,7 +4604,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
@@ -4619,7 +4619,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "ins", 0x6c, None, 2,
@@ -4632,7 +4632,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0,
@@ -4647,7 +4647,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "outs", 0x6e, None, 2,
@@ -4660,7 +4660,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
@@ -4675,7 +4675,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "lods", 0xac, None, 1,
@@ -4688,7 +4688,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "lods", 0xac, None, 2,
@@ -4701,7 +4701,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1,
@@ -4716,7 +4716,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "slod", 0xac, None, 1,
@@ -4729,7 +4729,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "slod", 0xac, None, 2,
@@ -4742,7 +4742,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1,
@@ -4757,7 +4757,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "movs", 0xa4, None, 2,
@@ -4770,7 +4770,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
@@ -4785,7 +4785,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "movsd", 0xa5, None, 2,
@@ -4798,7 +4798,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -4813,7 +4813,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -4828,7 +4828,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -4843,7 +4843,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -4858,7 +4858,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "smov", 0xa4, None, 2,
@@ -4871,7 +4871,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
@@ -4886,7 +4886,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "scas", 0xae, None, 1,
@@ -4899,7 +4899,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "scas", 0xae, None, 2,
@@ -4912,7 +4912,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1,
@@ -4927,7 +4927,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "ssca", 0xae, None, 1,
@@ -4940,7 +4940,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "ssca", 0xae, None, 2,
@@ -4953,7 +4953,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1,
@@ -4968,7 +4968,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "stos", 0xaa, None, 1,
@@ -4981,7 +4981,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "stos", 0xaa, None, 2,
@@ -4994,7 +4994,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
@@ -5009,7 +5009,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "ssto", 0xaa, None, 1,
@@ -5022,7 +5022,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "ssto", 0xaa, None, 2,
@@ -5035,7 +5035,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
@@ -5050,7 +5050,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "xlat", 0xd7, None, 1,
@@ -5063,7 +5063,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "bsf", 0xbc, None, 2,
@@ -5076,7 +5076,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
@@ -5091,7 +5091,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
@@ -5106,7 +5106,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
@@ -5121,7 +5121,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
@@ -5136,7 +5136,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
@@ -5151,7 +5151,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
@@ -5166,7 +5166,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
@@ -5181,7 +5181,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
@@ -5196,7 +5196,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
@@ -5211,7 +5211,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
@@ -5226,7 +5226,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "int1", 0xf1, None, 0,
@@ -5239,7 +5239,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "int3", 0xcc, None, 0,
@@ -5252,7 +5252,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "into", 0xce, None, 0,
@@ -5265,7 +5265,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "iret", 0xcf, None, 0,
@@ -5278,7 +5278,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "rsm", 0xaa, None, 0,
@@ -5291,7 +5291,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "bound", 0x62, None, 2,
@@ -5304,7 +5304,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1,
@@ -5319,7 +5319,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "nop", 0x1f, 0, 1,
@@ -5332,7 +5332,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "nop", 0x90, None, 0,
@@ -5345,7 +5345,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "arpl", 0x63, None, 2,
@@ -5358,7 +5358,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0,
@@ -5373,7 +5373,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
@@ -5388,7 +5388,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "lgdt", 0x01, 2, 1,
@@ -5401,7 +5401,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 1, 0 } } } },
{ "lidt", 0x01, 3, 1,
@@ -5414,7 +5414,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "lidt", 0x01, 3, 1,
@@ -5427,7 +5427,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 1, 0 } } } },
{ "lldt", 0x00, 2, 1,
@@ -5440,7 +5440,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "lmsw", 0x01, 6, 1,
@@ -5453,7 +5453,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "lsl", 0x03, None, 2,
@@ -5466,7 +5466,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
@@ -5481,7 +5481,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "sgdt", 0x01, 0, 1,
@@ -5494,7 +5494,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "sgdt", 0x01, 0, 1,
@@ -5507,7 +5507,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 1, 0 } } } },
{ "sidt", 0x01, 1, 1,
@@ -5520,7 +5520,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "sidt", 0x01, 1, 1,
@@ -5533,7 +5533,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 1, 0 } } } },
{ "sldt", 0x00, 0, 1,
@@ -5546,7 +5546,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "sldt", 0x00, 0, 1,
@@ -5559,7 +5559,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "smsw", 0x01, 4, 1,
@@ -5572,7 +5572,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "smsw", 0x01, 4, 1,
@@ -5585,7 +5585,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "str", 0x00, 1, 1,
@@ -5598,7 +5598,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "str", 0x00, 1, 1,
@@ -5611,7 +5611,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "verr", 0x00, 4, 1,
@@ -5624,7 +5624,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "verw", 0x00, 5, 1,
@@ -5637,7 +5637,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "fld", 0xd9c0, None, 1,
@@ -5650,7 +5650,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } } } },
{ "fld", 0xd9, 0, 1,
@@ -5663,7 +5663,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "fld", 0xd9c0, None, 1,
@@ -5676,7 +5676,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } } } },
{ "fld", 0xdb, 5, 1,
@@ -5689,7 +5689,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 1, 0 } } } },
{ "fild", 0xdf, 0, 1,
@@ -5702,7 +5702,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "fild", 0xdf, 5, 1,
@@ -5715,7 +5715,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "fildll", 0xdf, 5, 1,
@@ -5728,7 +5728,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "fldt", 0xdb, 5, 1,
@@ -5741,7 +5741,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 1, 0 } } } },
{ "fbld", 0xdf, 4, 1,
@@ -5754,7 +5754,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 1, 0 } } } },
{ "fst", 0xddd0, None, 1,
@@ -5767,7 +5767,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } } } },
{ "fst", 0xd9, 2, 1,
@@ -5780,7 +5780,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "fst", 0xddd0, None, 1,
@@ -5793,7 +5793,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } } } },
{ "fist", 0xdf, 2, 1,
@@ -5806,7 +5806,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "fstp", 0xddd8, None, 1,
@@ -5819,7 +5819,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } } } },
{ "fstp", 0xd9, 3, 1,
@@ -5832,7 +5832,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "fstp", 0xddd8, None, 1,
@@ -5845,7 +5845,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } } } },
{ "fstp", 0xdb, 7, 1,
@@ -5858,7 +5858,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 1, 0 } } } },
{ "fistp", 0xdf, 3, 1,
@@ -5871,7 +5871,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "fistp", 0xdf, 7, 1,
@@ -5884,7 +5884,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "fistpll", 0xdf, 7, 1,
@@ -5897,7 +5897,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "fstpt", 0xdb, 7, 1,
@@ -5910,7 +5910,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 1, 0 } } } },
{ "fbstp", 0xdf, 6, 1,
@@ -5923,7 +5923,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 1, 0 } } } },
{ "fxch", 0xd9c8, None, 1,
@@ -5936,7 +5936,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } } } },
{ "fxch", 0xd9c9, None, 0,
@@ -5949,7 +5949,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fcom", 0xd8d0, None, 1,
@@ -5962,7 +5962,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } } } },
{ "fcom", 0xd8d1, None, 0,
@@ -5975,7 +5975,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fcom", 0xd8, 2, 1,
@@ -5988,7 +5988,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "fcom", 0xd8d0, None, 1,
@@ -6001,7 +6001,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } } } },
{ "ficom", 0xde, 2, 1,
@@ -6014,7 +6014,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "fcomp", 0xd8d8, None, 1,
@@ -6027,7 +6027,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } } } },
{ "fcomp", 0xd8d9, None, 0,
@@ -6040,7 +6040,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fcomp", 0xd8, 3, 1,
@@ -6053,7 +6053,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "fcomp", 0xd8d8, None, 1,
@@ -6066,7 +6066,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } } } },
{ "ficomp", 0xde, 3, 1,
@@ -6079,7 +6079,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "fcompp", 0xded9, None, 0,
@@ -6092,7 +6092,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fucom", 0xdde0, None, 1,
@@ -6105,7 +6105,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } } } },
{ "fucom", 0xdde1, None, 0,
@@ -6118,7 +6118,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fucomp", 0xdde8, None, 1,
@@ -6131,7 +6131,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } } } },
{ "fucomp", 0xdde9, None, 0,
@@ -6144,7 +6144,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fucompp", 0xdae9, None, 0,
@@ -6157,7 +6157,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "ftst", 0xd9e4, None, 0,
@@ -6170,7 +6170,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fxam", 0xd9e5, None, 0,
@@ -6183,7 +6183,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fld1", 0xd9e8, None, 0,
@@ -6196,7 +6196,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fldl2t", 0xd9e9, None, 0,
@@ -6209,7 +6209,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fldl2e", 0xd9ea, None, 0,
@@ -6222,7 +6222,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fldpi", 0xd9eb, None, 0,
@@ -6235,7 +6235,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fldlg2", 0xd9ec, None, 0,
@@ -6248,7 +6248,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fldln2", 0xd9ed, None, 0,
@@ -6261,7 +6261,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fldz", 0xd9ee, None, 0,
@@ -6274,7 +6274,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fadd", 0xd8c0, None, 2,
@@ -6287,7 +6287,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } },
{ { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -6302,7 +6302,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } } } },
{ "fadd", 0xdec1, None, 0,
@@ -6315,7 +6315,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fadd", 0xd8, 0, 1,
@@ -6328,7 +6328,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "fiadd", 0xde, 0, 1,
@@ -6341,7 +6341,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "faddp", 0xdec0, None, 2,
@@ -6354,7 +6354,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -6369,7 +6369,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } } } },
{ "faddp", 0xdec1, None, 0,
@@ -6382,7 +6382,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "faddp", 0xdec0, None, 2,
@@ -6395,7 +6395,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } },
{ { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -6410,7 +6410,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } } } },
{ "fsub", 0xd8e0, None, 2,
@@ -6423,7 +6423,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } },
{ { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -6438,7 +6438,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fsub", 0xdee9, None, 0,
@@ -6451,7 +6451,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fsub", 0xd8e0, None, 2,
@@ -6464,7 +6464,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } },
{ { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -6479,7 +6479,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "fisub", 0xde, 4, 1,
@@ -6492,7 +6492,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "fsubp", 0xdee0, None, 2,
@@ -6505,7 +6505,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -6520,7 +6520,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } } } },
{ "fsubp", 0xdee1, None, 0,
@@ -6533,7 +6533,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fsubp", 0xdee8, None, 2,
@@ -6546,7 +6546,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -6561,7 +6561,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } } } },
{ "fsubp", 0xdee9, None, 0,
@@ -6574,7 +6574,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fsubr", 0xd8e8, None, 1,
@@ -6587,7 +6587,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } } } },
{ "fsubr", 0xd8e8, None, 2,
@@ -6600,7 +6600,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } },
{ { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -6615,7 +6615,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fsubr", 0xdee1, None, 0,
@@ -6628,7 +6628,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fsubr", 0xd8e8, None, 2,
@@ -6641,7 +6641,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } },
{ { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -6656,7 +6656,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "fisubr", 0xde, 5, 1,
@@ -6669,7 +6669,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "fsubrp", 0xdee8, None, 2,
@@ -6682,7 +6682,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -6697,7 +6697,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } } } },
{ "fsubrp", 0xdee9, None, 0,
@@ -6710,7 +6710,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fsubrp", 0xdee0, None, 2,
@@ -6723,7 +6723,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -6738,7 +6738,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } } } },
{ "fsubrp", 0xdee1, None, 0,
@@ -6751,7 +6751,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fmul", 0xd8c8, None, 2,
@@ -6764,7 +6764,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } },
{ { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -6779,7 +6779,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } } } },
{ "fmul", 0xdec9, None, 0,
@@ -6792,7 +6792,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fmul", 0xd8, 1, 1,
@@ -6805,7 +6805,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "fimul", 0xde, 1, 1,
@@ -6818,7 +6818,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "fmulp", 0xdec8, None, 2,
@@ -6831,7 +6831,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -6846,7 +6846,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } } } },
{ "fmulp", 0xdec9, None, 0,
@@ -6859,7 +6859,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fmulp", 0xdec8, None, 2,
@@ -6872,7 +6872,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } },
{ { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -6887,7 +6887,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } } } },
{ "fdiv", 0xd8f0, None, 2,
@@ -6900,7 +6900,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } },
{ { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -6915,7 +6915,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fdiv", 0xdef9, None, 0,
@@ -6928,7 +6928,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fdiv", 0xd8f0, None, 2,
@@ -6941,7 +6941,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } },
{ { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -6956,7 +6956,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "fidiv", 0xde, 6, 1,
@@ -6969,7 +6969,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "fdivp", 0xdef0, None, 2,
@@ -6982,7 +6982,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -6997,7 +6997,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } } } },
{ "fdivp", 0xdef1, None, 0,
@@ -7010,7 +7010,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fdivp", 0xdef8, None, 2,
@@ -7023,7 +7023,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -7038,7 +7038,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } } } },
{ "fdivp", 0xdef9, None, 0,
@@ -7051,7 +7051,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fdivr", 0xd8f8, None, 1,
@@ -7064,7 +7064,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } } } },
{ "fdivr", 0xd8f8, None, 2,
@@ -7077,7 +7077,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } },
{ { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -7092,7 +7092,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fdivr", 0xdef1, None, 0,
@@ -7105,7 +7105,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fdivr", 0xd8f8, None, 2,
@@ -7118,7 +7118,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } },
{ { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -7133,7 +7133,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "fidivr", 0xde, 7, 1,
@@ -7146,7 +7146,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "fdivrp", 0xdef8, None, 2,
@@ -7159,7 +7159,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -7174,7 +7174,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } } } },
{ "fdivrp", 0xdef9, None, 0,
@@ -7187,7 +7187,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fdivrp", 0xdef0, None, 2,
@@ -7200,7 +7200,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -7215,7 +7215,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } } } },
{ "fdivrp", 0xdef1, None, 0,
@@ -7228,7 +7228,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "f2xm1", 0xd9f0, None, 0,
@@ -7241,7 +7241,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fyl2x", 0xd9f1, None, 0,
@@ -7254,7 +7254,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fptan", 0xd9f2, None, 0,
@@ -7267,7 +7267,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fpatan", 0xd9f3, None, 0,
@@ -7280,7 +7280,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fxtract", 0xd9f4, None, 0,
@@ -7293,7 +7293,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fprem1", 0xd9f5, None, 0,
@@ -7306,7 +7306,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fdecstp", 0xd9f6, None, 0,
@@ -7319,7 +7319,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fincstp", 0xd9f7, None, 0,
@@ -7332,7 +7332,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fprem", 0xd9f8, None, 0,
@@ -7345,7 +7345,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fyl2xp1", 0xd9f9, None, 0,
@@ -7358,7 +7358,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fsqrt", 0xd9fa, None, 0,
@@ -7371,7 +7371,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fsincos", 0xd9fb, None, 0,
@@ -7384,7 +7384,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "frndint", 0xd9fc, None, 0,
@@ -7397,7 +7397,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fscale", 0xd9fd, None, 0,
@@ -7410,7 +7410,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fsin", 0xd9fe, None, 0,
@@ -7423,7 +7423,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fcos", 0xd9ff, None, 0,
@@ -7436,7 +7436,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fchs", 0xd9e0, None, 0,
@@ -7449,7 +7449,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fabs", 0xd9e1, None, 0,
@@ -7462,7 +7462,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fninit", 0xdbe3, None, 0,
@@ -7475,7 +7475,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "finit", 0xdbe3, None, 0,
@@ -7488,7 +7488,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fldcw", 0xd9, 5, 1,
@@ -7501,7 +7501,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "fnstcw", 0xd9, 7, 1,
@@ -7514,7 +7514,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "fstcw", 0xd9, 7, 1,
@@ -7527,7 +7527,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "fnstsw", 0xdfe0, None, 1,
@@ -7540,7 +7540,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fnstsw", 0xdd, 7, 1,
@@ -7553,7 +7553,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "fnstsw", 0xdfe0, None, 0,
@@ -7566,7 +7566,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fstsw", 0xdfe0, None, 1,
@@ -7579,7 +7579,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fstsw", 0xdd, 7, 1,
@@ -7592,7 +7592,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "fstsw", 0xdfe0, None, 0,
@@ -7605,7 +7605,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fnclex", 0xdbe2, None, 0,
@@ -7618,7 +7618,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fclex", 0xdbe2, None, 0,
@@ -7631,7 +7631,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fnstenv", 0xd9, 6, 1,
@@ -7644,7 +7644,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "fstenv", 0xd9, 6, 1,
@@ -7657,7 +7657,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "fldenv", 0xd9, 4, 1,
@@ -7670,7 +7670,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "fnsave", 0xdd, 6, 1,
@@ -7683,7 +7683,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "fsave", 0xdd, 6, 1,
@@ -7696,7 +7696,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "frstor", 0xdd, 4, 1,
@@ -7709,7 +7709,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "fneni", 0xdbe0, None, 0,
@@ -7722,7 +7722,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "feni", 0xdbe0, None, 0,
@@ -7735,7 +7735,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fndisi", 0xdbe1, None, 0,
@@ -7748,7 +7748,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fdisi", 0xdbe1, None, 0,
@@ -7761,7 +7761,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fnsetpm", 0xdbe4, None, 0,
@@ -7774,7 +7774,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fsetpm", 0xdbe4, None, 0,
@@ -7787,7 +7787,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "frstpm", 0xdbe5, None, 0,
@@ -7800,7 +7800,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "ffree", 0xddc0, None, 1,
@@ -7813,7 +7813,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } } } },
{ "ffreep", 0xdfc0, None, 1,
@@ -7826,7 +7826,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } } } },
{ "fnop", 0xd9d0, None, 0,
@@ -7839,7 +7839,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fwait", 0x9b, None, 0,
@@ -7852,7 +7852,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "addr16", 0x67, None, 0,
@@ -7865,7 +7865,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "addr32", 0x67, None, 0,
@@ -7878,7 +7878,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "aword", 0x67, None, 0,
@@ -7891,7 +7891,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "adword", 0x67, None, 0,
@@ -7904,7 +7904,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "data16", 0x66, None, 0,
@@ -7917,7 +7917,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "data32", 0x66, None, 0,
@@ -7930,7 +7930,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "word", 0x66, None, 0,
@@ -7943,7 +7943,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "dword", 0x66, None, 0,
@@ -7956,7 +7956,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "lock", 0xf0, None, 0,
@@ -7969,7 +7969,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "wait", 0x9b, None, 0,
@@ -7982,7 +7982,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "cs", 0x2e, None, 0,
@@ -7995,7 +7995,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "ds", 0x3e, None, 0,
@@ -8008,7 +8008,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "es", 0x26, None, 0,
@@ -8021,7 +8021,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fs", 0x64, None, 0,
@@ -8034,7 +8034,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "gs", 0x65, None, 0,
@@ -8047,7 +8047,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "ss", 0x36, None, 0,
@@ -8060,7 +8060,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "rep", 0xf3, None, 0,
@@ -8073,7 +8073,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "repe", 0xf3, None, 0,
@@ -8086,7 +8086,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "repz", 0xf3, None, 0,
@@ -8099,7 +8099,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "repne", 0xf2, None, 0,
@@ -8112,7 +8112,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "repnz", 0xf2, None, 0,
@@ -8125,7 +8125,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "ht", 0x3e, None, 0,
@@ -8138,7 +8138,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "hnt", 0x2e, None, 0,
@@ -8151,7 +8151,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "rex", 0x40, None, 0,
@@ -8164,7 +8164,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "rexz", 0x41, None, 0,
@@ -8177,7 +8177,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "rexy", 0x42, None, 0,
@@ -8190,7 +8190,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "rexyz", 0x43, None, 0,
@@ -8203,7 +8203,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "rexx", 0x44, None, 0,
@@ -8216,7 +8216,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "rexxz", 0x45, None, 0,
@@ -8229,7 +8229,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "rexxy", 0x46, None, 0,
@@ -8242,7 +8242,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "rexxyz", 0x47, None, 0,
@@ -8255,7 +8255,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "rex64", 0x48, None, 0,
@@ -8268,7 +8268,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "rex64z", 0x49, None, 0,
@@ -8281,7 +8281,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "rex64y", 0x4a, None, 0,
@@ -8294,7 +8294,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "rex64yz", 0x4b, None, 0,
@@ -8307,7 +8307,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "rex64x", 0x4c, None, 0,
@@ -8320,7 +8320,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "rex64xz", 0x4d, None, 0,
@@ -8333,7 +8333,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "rex64xy", 0x4e, None, 0,
@@ -8346,7 +8346,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "rex64xyz", 0x4f, None, 0,
@@ -8359,7 +8359,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "rex.b", 0x41, None, 0,
@@ -8372,7 +8372,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "rex.x", 0x42, None, 0,
@@ -8385,7 +8385,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "rex.xb", 0x43, None, 0,
@@ -8398,7 +8398,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "rex.r", 0x44, None, 0,
@@ -8411,7 +8411,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "rex.rb", 0x45, None, 0,
@@ -8424,7 +8424,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "rex.rx", 0x46, None, 0,
@@ -8437,7 +8437,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "rex.rxb", 0x47, None, 0,
@@ -8450,7 +8450,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "rex.w", 0x48, None, 0,
@@ -8463,7 +8463,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "rex.wb", 0x49, None, 0,
@@ -8476,7 +8476,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "rex.wx", 0x4a, None, 0,
@@ -8489,7 +8489,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "rex.wxb", 0x4b, None, 0,
@@ -8502,7 +8502,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "rex.wr", 0x4c, None, 0,
@@ -8515,7 +8515,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "rex.wrb", 0x4d, None, 0,
@@ -8528,7 +8528,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "rex.wrx", 0x4e, None, 0,
@@ -8541,7 +8541,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "rex.wrxb", 0x4f, None, 0,
@@ -8554,7 +8554,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "{disp8}", 0x00, Prefix_Disp8, 0,
@@ -8567,7 +8567,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "{disp16}", 0x00, Prefix_Disp16, 0,
@@ -8580,7 +8580,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "{disp32}", 0x00, Prefix_Disp32, 0,
@@ -8593,7 +8593,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "{load}", 0x00, Prefix_Load, 0,
@@ -8606,7 +8606,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "{store}", 0x00, Prefix_Store, 0,
@@ -8619,7 +8619,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "{vex}", 0x00, Prefix_VEX, 0,
@@ -8632,7 +8632,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "{vex2}", 0x00, Prefix_VEX, 0,
@@ -8645,7 +8645,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "{vex3}", 0x00, Prefix_VEX3, 0,
@@ -8658,7 +8658,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "{evex}", 0x00, Prefix_EVEX, 0,
@@ -8671,7 +8671,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "{rex}", 0x00, Prefix_REX, 0,
@@ -8684,7 +8684,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "{nooptimize}", 0x00, Prefix_NoOptimize, 0,
@@ -8697,7 +8697,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "bswap", 0xc8, None, 1,
@@ -8710,7 +8710,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "xadd", 0xc0, None, 2,
@@ -8723,7 +8723,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
@@ -8738,7 +8738,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
@@ -8753,7 +8753,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "wbinvd", 0x09, None, 0,
@@ -8766,7 +8766,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "invlpg", 0x01, 7, 1,
@@ -8779,7 +8779,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "cpuid", 0xa2, None, 0,
@@ -8792,7 +8792,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "wrmsr", 0x30, None, 0,
@@ -8805,7 +8805,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "rdtsc", 0x31, None, 0,
@@ -8818,7 +8818,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "rdmsr", 0x32, None, 0,
@@ -8831,7 +8831,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "cmpxchg8b", 0xc7, 1, 1,
@@ -8844,7 +8844,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "sysenter", 0x34, None, 0,
@@ -8857,7 +8857,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "sysenter", 0x34, None, 0,
@@ -8870,7 +8870,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "sysexit", 0x35, None, 0,
@@ -8883,7 +8883,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "sysexit", 0x35, None, 0,
@@ -8896,7 +8896,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fxsave", 0xae, 0, 1,
@@ -8909,7 +8909,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "fxsave64", 0xae, 0, 1,
@@ -8922,7 +8922,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "fxrstor", 0xae, 1, 1,
@@ -8935,7 +8935,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "fxrstor64", 0xae, 1, 1,
@@ -8948,7 +8948,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "rdpmc", 0x33, None, 0,
@@ -8961,7 +8961,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "ud2", 0x0b, None, 0,
@@ -8974,7 +8974,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "ud2a", 0x0b, None, 0,
@@ -8987,7 +8987,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "ud1", 0xb9, None, 2,
@@ -9000,7 +9000,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
@@ -9015,7 +9015,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
@@ -9030,7 +9030,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
@@ -9045,7 +9045,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
@@ -9060,7 +9060,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
@@ -9075,7 +9075,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
@@ -9090,7 +9090,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
@@ -9105,7 +9105,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
@@ -9120,7 +9120,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
@@ -9135,7 +9135,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
@@ -9150,7 +9150,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
@@ -9165,7 +9165,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
@@ -9180,7 +9180,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
@@ -9195,7 +9195,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
@@ -9210,7 +9210,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
@@ -9225,7 +9225,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
@@ -9240,7 +9240,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
@@ -9255,7 +9255,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
@@ -9270,7 +9270,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
@@ -9285,7 +9285,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
@@ -9300,7 +9300,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
@@ -9315,7 +9315,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
@@ -9330,7 +9330,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
@@ -9345,7 +9345,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
@@ -9360,7 +9360,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
@@ -9375,7 +9375,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
@@ -9390,7 +9390,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
@@ -9405,7 +9405,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
@@ -9420,7 +9420,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
@@ -9435,7 +9435,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
@@ -9450,7 +9450,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
@@ -9465,7 +9465,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
@@ -9480,7 +9480,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
@@ -9495,7 +9495,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } },
{ { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -9510,7 +9510,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } },
{ { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -9525,7 +9525,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } },
{ { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -9540,7 +9540,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } },
{ { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -9555,7 +9555,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } },
{ { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -9570,7 +9570,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } },
{ { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -9585,7 +9585,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } },
{ { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -9600,7 +9600,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } },
{ { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -9615,7 +9615,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } },
{ { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -9630,7 +9630,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } },
{ { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -9645,7 +9645,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } },
{ { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -9660,7 +9660,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } },
{ { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -9675,7 +9675,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } },
{ { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -9690,7 +9690,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fcomi", 0xdbf0, None, 1,
@@ -9703,7 +9703,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } } } },
{ "fucomi", 0xdbe8, None, 2,
@@ -9716,7 +9716,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } },
{ { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -9731,7 +9731,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fucomi", 0xdbe8, None, 1,
@@ -9744,7 +9744,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } } } },
{ "fcomip", 0xdff0, None, 2,
@@ -9757,7 +9757,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } },
{ { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -9772,7 +9772,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fcomip", 0xdff0, None, 1,
@@ -9785,7 +9785,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } } } },
{ "fcompi", 0xdff0, None, 2,
@@ -9798,7 +9798,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } },
{ { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -9813,7 +9813,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fcompi", 0xdff0, None, 1,
@@ -9826,7 +9826,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } } } },
{ "fucomip", 0xdfe8, None, 2,
@@ -9839,7 +9839,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } },
{ { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -9854,7 +9854,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fucomip", 0xdfe8, None, 1,
@@ -9867,7 +9867,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } } } },
{ "fucompi", 0xdfe8, None, 2,
@@ -9880,7 +9880,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } },
{ { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -9895,7 +9895,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "fucompi", 0xdfe8, None, 1,
@@ -9908,7 +9908,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0 } } } },
{ "movnti", 0xc3, None, 2,
@@ -9921,7 +9921,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
@@ -9936,7 +9936,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "lfence", 0xaee8, None, 0,
@@ -9949,7 +9949,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "mfence", 0xaef0, None, 0,
@@ -9962,7 +9962,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "pause", 0x90, None, 0,
@@ -9975,7 +9975,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "emms", 0x77, None, 0,
@@ -9988,7 +9988,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "movd", 0x6e, None, 2,
@@ -10001,7 +10001,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10016,7 +10016,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10031,7 +10031,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10046,7 +10046,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10061,7 +10061,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10076,7 +10076,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10091,7 +10091,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10106,7 +10106,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10121,7 +10121,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10136,7 +10136,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10151,7 +10151,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10166,7 +10166,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10181,7 +10181,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10196,7 +10196,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10211,7 +10211,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10226,7 +10226,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10241,7 +10241,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10256,7 +10256,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10271,7 +10271,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10286,7 +10286,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10301,7 +10301,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10316,7 +10316,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10331,7 +10331,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10346,7 +10346,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10361,7 +10361,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10376,7 +10376,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10391,7 +10391,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10406,7 +10406,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10421,7 +10421,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10436,7 +10436,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10451,7 +10451,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10466,7 +10466,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10481,7 +10481,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10496,7 +10496,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10511,7 +10511,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10526,7 +10526,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10541,7 +10541,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10556,7 +10556,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10571,7 +10571,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10586,7 +10586,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10601,7 +10601,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10616,7 +10616,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10631,7 +10631,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10646,7 +10646,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10661,7 +10661,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10676,7 +10676,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10691,7 +10691,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10706,7 +10706,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10721,7 +10721,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10736,7 +10736,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10751,7 +10751,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10766,7 +10766,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10781,7 +10781,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10796,7 +10796,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10811,7 +10811,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10826,7 +10826,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10841,7 +10841,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10856,7 +10856,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10871,7 +10871,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10886,7 +10886,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10901,7 +10901,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10916,7 +10916,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10931,7 +10931,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10946,7 +10946,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10961,7 +10961,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10976,7 +10976,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -10991,7 +10991,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11006,7 +11006,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11021,7 +11021,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11036,7 +11036,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11051,7 +11051,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11066,7 +11066,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11081,7 +11081,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11096,7 +11096,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11111,7 +11111,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11126,7 +11126,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11141,7 +11141,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11156,7 +11156,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11171,7 +11171,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11186,7 +11186,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11201,7 +11201,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11216,7 +11216,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11231,7 +11231,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11246,7 +11246,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11261,7 +11261,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11276,7 +11276,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11291,7 +11291,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11306,7 +11306,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11321,7 +11321,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11336,7 +11336,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11351,7 +11351,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11366,7 +11366,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11381,7 +11381,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11396,7 +11396,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11411,7 +11411,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11426,7 +11426,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11441,7 +11441,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11456,7 +11456,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11471,7 +11471,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11486,7 +11486,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11501,7 +11501,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11516,7 +11516,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11531,7 +11531,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11546,7 +11546,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11561,7 +11561,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11576,7 +11576,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11591,7 +11591,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11606,7 +11606,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11621,7 +11621,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11636,7 +11636,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11651,7 +11651,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11666,7 +11666,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11681,7 +11681,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11696,7 +11696,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11711,7 +11711,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11726,7 +11726,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11741,7 +11741,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11756,7 +11756,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11771,7 +11771,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11786,7 +11786,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11801,7 +11801,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11816,7 +11816,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11831,7 +11831,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11846,7 +11846,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11861,7 +11861,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11876,7 +11876,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11891,7 +11891,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11906,7 +11906,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11921,7 +11921,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11936,7 +11936,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11951,7 +11951,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11966,7 +11966,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11981,7 +11981,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -11996,7 +11996,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12011,7 +12011,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12026,7 +12026,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12041,7 +12041,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12056,7 +12056,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12071,7 +12071,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12086,7 +12086,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12101,7 +12101,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12116,7 +12116,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12131,7 +12131,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12146,7 +12146,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12161,7 +12161,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12176,7 +12176,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12191,7 +12191,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12206,7 +12206,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12221,7 +12221,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12236,7 +12236,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12251,7 +12251,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12266,7 +12266,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12281,7 +12281,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12296,7 +12296,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12311,7 +12311,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12326,7 +12326,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12341,7 +12341,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12356,7 +12356,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12371,7 +12371,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12386,7 +12386,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12401,7 +12401,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12416,7 +12416,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12431,7 +12431,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12446,7 +12446,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12461,7 +12461,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12476,7 +12476,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12491,7 +12491,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12506,7 +12506,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12521,7 +12521,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12536,7 +12536,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12551,7 +12551,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12566,7 +12566,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12581,7 +12581,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12596,7 +12596,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12611,7 +12611,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12626,7 +12626,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12641,7 +12641,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12656,7 +12656,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12671,7 +12671,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12686,7 +12686,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12701,7 +12701,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12716,7 +12716,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12731,7 +12731,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12746,7 +12746,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12761,7 +12761,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12776,7 +12776,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12791,7 +12791,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12806,7 +12806,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12821,7 +12821,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12836,7 +12836,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12851,7 +12851,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12866,7 +12866,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12881,7 +12881,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12896,7 +12896,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12911,7 +12911,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12926,7 +12926,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12941,7 +12941,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12956,7 +12956,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12971,7 +12971,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12986,7 +12986,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -13001,7 +13001,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -13016,7 +13016,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -13031,7 +13031,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -13046,7 +13046,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -13061,7 +13061,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -13076,7 +13076,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -13091,7 +13091,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -13106,7 +13106,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -13121,7 +13121,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -13138,7 +13138,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -13155,7 +13155,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -13172,7 +13172,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -13189,7 +13189,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -13204,7 +13204,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -13219,7 +13219,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -13234,7 +13234,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -13249,7 +13249,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -13264,7 +13264,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -13279,7 +13279,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -13294,7 +13294,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -13309,7 +13309,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -13324,7 +13324,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -13339,7 +13339,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -13354,7 +13354,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -13369,7 +13369,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -13384,7 +13384,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -13399,7 +13399,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -13414,7 +13414,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -13429,7 +13429,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -13444,7 +13444,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -13459,7 +13459,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -13474,7 +13474,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "ldmxcsr", 0xae, 2, 1,
@@ -13487,7 +13487,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "maskmovq", 0xf7, None, 2,
@@ -13500,7 +13500,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -13515,7 +13515,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -13530,7 +13530,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -13545,7 +13545,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -13560,7 +13560,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -13575,7 +13575,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -13590,7 +13590,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -13605,7 +13605,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -13620,7 +13620,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -13635,7 +13635,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -13650,7 +13650,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -13665,7 +13665,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -13680,7 +13680,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -13695,7 +13695,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -13710,7 +13710,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -13725,7 +13725,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -13740,7 +13740,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -13755,7 +13755,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -13770,7 +13770,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -13785,7 +13785,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -13800,7 +13800,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -13815,7 +13815,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -13830,7 +13830,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -13845,7 +13845,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -13860,7 +13860,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -13875,7 +13875,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -13890,7 +13890,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -13905,7 +13905,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -13920,7 +13920,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -13935,7 +13935,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -13950,7 +13950,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -13965,7 +13965,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -13980,7 +13980,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -13995,7 +13995,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -14010,7 +14010,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -14025,7 +14025,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -14040,7 +14040,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -14055,7 +14055,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -14070,7 +14070,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -14085,7 +14085,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -14100,7 +14100,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -14115,7 +14115,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -14130,7 +14130,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -14145,7 +14145,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -14160,7 +14160,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -14175,7 +14175,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -14192,7 +14192,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -14209,7 +14209,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -14226,7 +14226,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -14243,7 +14243,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -14260,7 +14260,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -14277,7 +14277,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -14294,7 +14294,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -14311,7 +14311,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -14328,7 +14328,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
@@ -14345,7 +14345,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
@@ -14362,7 +14362,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -14379,7 +14379,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
@@ -14396,7 +14396,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -14411,7 +14411,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -14426,7 +14426,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -14441,7 +14441,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -14456,7 +14456,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -14471,7 +14471,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -14486,7 +14486,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -14501,7 +14501,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -14516,7 +14516,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -14531,7 +14531,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -14546,7 +14546,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -14561,7 +14561,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -14576,7 +14576,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -14591,7 +14591,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -14606,7 +14606,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -14621,7 +14621,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -14636,7 +14636,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -14651,7 +14651,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -14666,7 +14666,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "prefetcht0", 0x18, 1, 1,
@@ -14679,7 +14679,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "prefetcht1", 0x18, 2, 1,
@@ -14692,7 +14692,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "prefetcht2", 0x18, 3, 1,
@@ -14705,7 +14705,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "psadbw", 0xf6, None, 2,
@@ -14718,7 +14718,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -14733,7 +14733,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -14748,7 +14748,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -14763,7 +14763,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -14780,7 +14780,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -14795,7 +14795,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -14810,7 +14810,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -14825,7 +14825,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -14840,7 +14840,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -14855,7 +14855,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -14870,7 +14870,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -14885,7 +14885,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -14900,7 +14900,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "shufps", 0xc6, None, 3,
@@ -14913,7 +14913,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -14930,7 +14930,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -14947,7 +14947,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -14962,7 +14962,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -14977,7 +14977,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -14992,7 +14992,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15007,7 +15007,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "stmxcsr", 0xae, 3, 1,
@@ -15020,7 +15020,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "subps", 0x5c, None, 2,
@@ -15033,7 +15033,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15048,7 +15048,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15063,7 +15063,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15078,7 +15078,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15093,7 +15093,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15108,7 +15108,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15123,7 +15123,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15138,7 +15138,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15153,7 +15153,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15168,7 +15168,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15183,7 +15183,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15198,7 +15198,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15213,7 +15213,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15228,7 +15228,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15243,7 +15243,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15258,7 +15258,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15273,7 +15273,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15288,7 +15288,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15303,7 +15303,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15318,7 +15318,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15333,7 +15333,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15348,7 +15348,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15363,7 +15363,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15378,7 +15378,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15393,7 +15393,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15408,7 +15408,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15423,7 +15423,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15438,7 +15438,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15453,7 +15453,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15468,7 +15468,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15483,7 +15483,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15498,7 +15498,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15513,7 +15513,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15528,7 +15528,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15543,7 +15543,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15558,7 +15558,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15573,7 +15573,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15588,7 +15588,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15603,7 +15603,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15618,7 +15618,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15633,7 +15633,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15648,7 +15648,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15663,7 +15663,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15678,7 +15678,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15693,7 +15693,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15708,7 +15708,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15723,7 +15723,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15738,7 +15738,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15753,7 +15753,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15768,7 +15768,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15783,7 +15783,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15798,7 +15798,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15813,7 +15813,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -15830,7 +15830,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -15847,7 +15847,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15862,7 +15862,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15877,7 +15877,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15892,7 +15892,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15907,7 +15907,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15922,7 +15922,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15937,7 +15937,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15952,7 +15952,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15967,7 +15967,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15982,7 +15982,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15997,7 +15997,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -16012,7 +16012,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -16027,7 +16027,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -16042,7 +16042,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -16057,7 +16057,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -16072,7 +16072,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -16087,7 +16087,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -16102,7 +16102,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -16117,7 +16117,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -16132,7 +16132,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -16147,7 +16147,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -16162,7 +16162,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -16177,7 +16177,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -16192,7 +16192,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -16207,7 +16207,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -16222,7 +16222,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -16237,7 +16237,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -16252,7 +16252,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -16267,7 +16267,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -16282,7 +16282,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -16297,7 +16297,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -16312,7 +16312,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -16327,7 +16327,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -16342,7 +16342,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -16357,7 +16357,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -16372,7 +16372,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -16387,7 +16387,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -16402,7 +16402,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -16417,7 +16417,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -16432,7 +16432,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -16447,7 +16447,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -16462,7 +16462,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -16477,7 +16477,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -16492,7 +16492,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -16509,7 +16509,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -16526,7 +16526,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -16541,7 +16541,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -16556,7 +16556,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -16571,7 +16571,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -16586,7 +16586,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -16601,7 +16601,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -16616,7 +16616,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -16631,7 +16631,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -16646,7 +16646,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -16661,7 +16661,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -16676,7 +16676,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -16691,7 +16691,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -16706,7 +16706,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -16721,7 +16721,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -16736,7 +16736,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -16751,7 +16751,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -16766,7 +16766,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -16781,7 +16781,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -16796,7 +16796,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -16811,7 +16811,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -16826,7 +16826,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -16841,7 +16841,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -16856,7 +16856,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -16871,7 +16871,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -16886,7 +16886,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -16901,7 +16901,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -16916,7 +16916,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -16931,7 +16931,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -16946,7 +16946,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -16961,7 +16961,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -16976,7 +16976,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -16991,7 +16991,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -17006,7 +17006,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -17021,7 +17021,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -17036,7 +17036,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -17051,7 +17051,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -17066,7 +17066,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -17081,7 +17081,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -17096,7 +17096,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -17111,7 +17111,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -17126,7 +17126,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -17141,7 +17141,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -17156,7 +17156,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -17171,7 +17171,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -17186,7 +17186,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -17201,7 +17201,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -17216,7 +17216,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -17231,7 +17231,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -17246,7 +17246,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -17261,7 +17261,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -17276,7 +17276,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -17291,7 +17291,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -17306,7 +17306,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -17321,7 +17321,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -17338,7 +17338,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -17355,7 +17355,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -17372,7 +17372,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -17389,7 +17389,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -17406,7 +17406,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -17423,7 +17423,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -17438,7 +17438,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -17453,7 +17453,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -17468,7 +17468,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -17483,7 +17483,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -17498,7 +17498,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -17513,7 +17513,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -17528,7 +17528,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -17543,7 +17543,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -17558,7 +17558,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -17573,7 +17573,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -17588,7 +17588,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -17603,7 +17603,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -17618,7 +17618,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -17633,7 +17633,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -17648,7 +17648,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -17663,7 +17663,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -17678,7 +17678,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -17693,7 +17693,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -17708,7 +17708,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -17723,7 +17723,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -17738,7 +17738,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -17753,7 +17753,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -17768,7 +17768,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -17783,7 +17783,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -17798,7 +17798,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -17813,7 +17813,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -17828,7 +17828,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -17843,7 +17843,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "fisttp", 0xdd, 1, 1,
@@ -17856,7 +17856,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "fisttpll", 0xdd, 1, 1,
@@ -17869,7 +17869,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "cmpxchg16b", 0xc7, 1, 1,
@@ -17878,11 +17878,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } } } },
{ "monitor", 0x01c8, None, 0,
@@ -17895,7 +17895,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "monitor", 0x01c8, None, 3,
@@ -17908,7 +17908,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
@@ -17925,7 +17925,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
@@ -17942,7 +17942,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "mwait", 0x01c9, None, 2,
@@ -17955,7 +17955,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -17970,7 +17970,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "vmclear", 0xc7, 6, 1,
@@ -17983,7 +17983,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "vmlaunch", 0x01c2, None, 0,
@@ -17996,7 +17996,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "vmresume", 0x01c3, None, 0,
@@ -18009,7 +18009,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "vmptrld", 0xc7, 6, 1,
@@ -18022,7 +18022,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "vmptrst", 0xc7, 7, 1,
@@ -18035,7 +18035,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "vmread", 0x78, None, 2,
@@ -18048,7 +18048,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0,
@@ -18063,7 +18063,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -18078,7 +18078,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
@@ -18093,7 +18093,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
@@ -18108,7 +18108,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "vmxon", 0xc7, 6, 1,
@@ -18121,7 +18121,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "vmfunc", 0x01d4, None, 0,
@@ -18131,10 +18131,10 @@ const insn_template i386_optab[] =
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "getsec", 0x37, None, 0,
@@ -18147,7 +18147,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "invept", 0x80, None, 2,
@@ -18156,11 +18156,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
@@ -18171,11 +18171,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
@@ -18186,11 +18186,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
@@ -18201,11 +18201,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
@@ -18217,10 +18217,10 @@ const insn_template i386_optab[] =
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
@@ -18232,10 +18232,10 @@ const insn_template i386_optab[] =
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
@@ -18250,7 +18250,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -18265,7 +18265,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -18280,7 +18280,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -18295,7 +18295,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -18310,7 +18310,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -18325,7 +18325,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -18340,7 +18340,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -18355,7 +18355,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -18370,7 +18370,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -18385,7 +18385,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -18400,7 +18400,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -18415,7 +18415,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -18430,7 +18430,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -18445,7 +18445,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -18460,7 +18460,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -18475,7 +18475,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -18490,7 +18490,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -18505,7 +18505,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -18520,7 +18520,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -18535,7 +18535,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -18550,7 +18550,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -18565,7 +18565,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -18580,7 +18580,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -18595,7 +18595,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -18610,7 +18610,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -18625,7 +18625,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -18640,7 +18640,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -18655,7 +18655,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -18670,7 +18670,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -18685,7 +18685,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -18700,7 +18700,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -18715,7 +18715,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -18730,7 +18730,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -18745,7 +18745,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -18760,7 +18760,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -18775,7 +18775,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -18790,7 +18790,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -18807,7 +18807,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -18824,7 +18824,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -18841,7 +18841,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -18856,7 +18856,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -18871,7 +18871,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -18886,7 +18886,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -18901,7 +18901,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -18916,7 +18916,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -18931,7 +18931,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -18946,7 +18946,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -18961,7 +18961,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -18976,7 +18976,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -18993,7 +18993,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -19010,7 +19010,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -19027,7 +19027,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -19044,7 +19044,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -19061,7 +19061,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -19076,7 +19076,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -19093,7 +19093,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -19108,7 +19108,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -19125,7 +19125,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -19140,7 +19140,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -19157,7 +19157,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -19172,7 +19172,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -19189,7 +19189,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -19206,7 +19206,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -19223,7 +19223,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -19240,7 +19240,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -19257,7 +19257,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -19274,7 +19274,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -19291,7 +19291,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -19308,7 +19308,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -19325,7 +19325,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -19342,7 +19342,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -19357,7 +19357,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -19372,7 +19372,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -19389,7 +19389,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -19406,7 +19406,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -19421,7 +19421,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -19436,7 +19436,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -19453,7 +19453,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -19468,7 +19468,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -19485,7 +19485,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -19500,7 +19500,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -19517,7 +19517,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -19534,7 +19534,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -19549,7 +19549,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -19564,7 +19564,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -19581,7 +19581,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -19598,7 +19598,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -19615,7 +19615,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -19632,7 +19632,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -19649,7 +19649,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -19666,7 +19666,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -19683,7 +19683,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -19700,7 +19700,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -19715,7 +19715,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -19730,7 +19730,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -19747,7 +19747,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -19764,7 +19764,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0,
@@ -19781,7 +19781,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0,
@@ -19798,7 +19798,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -19815,7 +19815,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -19832,7 +19832,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -19849,7 +19849,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -19866,7 +19866,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -19881,7 +19881,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -19896,7 +19896,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -19911,7 +19911,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -19926,7 +19926,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -19941,7 +19941,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -19956,7 +19956,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -19971,7 +19971,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -19986,7 +19986,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -20001,7 +20001,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -20016,7 +20016,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -20031,7 +20031,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -20046,7 +20046,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -20061,7 +20061,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -20076,7 +20076,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -20091,7 +20091,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -20106,7 +20106,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -20121,7 +20121,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -20136,7 +20136,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -20151,7 +20151,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -20166,7 +20166,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -20181,7 +20181,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -20196,7 +20196,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -20211,7 +20211,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -20226,7 +20226,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -20241,7 +20241,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -20256,7 +20256,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -20271,7 +20271,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -20286,7 +20286,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -20301,7 +20301,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -20316,7 +20316,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -20331,7 +20331,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -20346,7 +20346,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -20361,7 +20361,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -20376,7 +20376,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -20391,7 +20391,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -20406,7 +20406,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -20421,7 +20421,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -20436,7 +20436,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -20451,7 +20451,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -20466,7 +20466,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -20481,7 +20481,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -20496,7 +20496,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -20511,7 +20511,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -20526,7 +20526,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -20541,7 +20541,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -20556,7 +20556,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -20573,7 +20573,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -20590,7 +20590,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -20607,7 +20607,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -20624,7 +20624,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -20641,7 +20641,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -20658,7 +20658,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -20675,7 +20675,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -20692,7 +20692,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -20707,7 +20707,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -20722,7 +20722,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0,
@@ -20739,7 +20739,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0,
@@ -20756,7 +20756,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -20773,7 +20773,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -20790,7 +20790,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0,
@@ -20807,7 +20807,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0,
@@ -20824,7 +20824,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -20841,7 +20841,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -20858,7 +20858,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -20875,7 +20875,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -20892,7 +20892,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -20909,7 +20909,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -20926,7 +20926,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
@@ -20941,7 +20941,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
@@ -20952,11 +20952,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "xsave64", 0xae, 4, 1,
@@ -20965,11 +20965,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "xrstor", 0xae, 5, 1,
@@ -20978,11 +20978,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "xrstor64", 0xae, 5, 1,
@@ -20991,11 +20991,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "xgetbv", 0x01d0, None, 0,
@@ -21004,11 +21004,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "xsetbv", 0x01d1, None, 0,
@@ -21017,11 +21017,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "xsaveopt", 0xae, 6, 1,
@@ -21030,11 +21030,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "xsaveopt64", 0xae, 6, 1,
@@ -21043,11 +21043,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "aesdec", 0xde, None, 2,
@@ -21056,11 +21056,11 @@ const insn_template i386_optab[] =
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -21071,11 +21071,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -21086,11 +21086,11 @@ const insn_template i386_optab[] =
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -21101,11 +21101,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -21116,11 +21116,11 @@ const insn_template i386_optab[] =
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -21131,11 +21131,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -21146,11 +21146,11 @@ const insn_template i386_optab[] =
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -21161,11 +21161,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -21176,11 +21176,11 @@ const insn_template i386_optab[] =
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -21191,11 +21191,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -21206,11 +21206,11 @@ const insn_template i386_optab[] =
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -21223,11 +21223,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -21243,8 +21243,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -21257,11 +21257,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -21277,8 +21277,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -21294,8 +21294,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -21308,11 +21308,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -21328,8 +21328,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -21345,8 +21345,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -21359,11 +21359,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -21379,8 +21379,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -21396,8 +21396,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -21410,11 +21410,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -21430,8 +21430,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -21444,11 +21444,11 @@ const insn_template i386_optab[] =
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -21461,11 +21461,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -21478,11 +21478,11 @@ const insn_template i386_optab[] =
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -21493,11 +21493,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -21508,11 +21508,11 @@ const insn_template i386_optab[] =
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -21523,11 +21523,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -21538,11 +21538,11 @@ const insn_template i386_optab[] =
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -21553,11 +21553,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -21568,11 +21568,11 @@ const insn_template i386_optab[] =
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -21583,11 +21583,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -21601,8 +21601,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -21618,8 +21618,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -21635,8 +21635,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -21652,8 +21652,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -21669,8 +21669,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -21684,8 +21684,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -21700,7 +21700,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -21717,7 +21717,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -21734,7 +21734,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -21753,7 +21753,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -21770,7 +21770,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -21787,7 +21787,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -21806,7 +21806,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -21823,7 +21823,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -21840,7 +21840,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -21859,7 +21859,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -21876,7 +21876,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -21893,7 +21893,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -21912,7 +21912,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -21929,7 +21929,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -21946,7 +21946,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -21963,7 +21963,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -21980,7 +21980,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -21997,7 +21997,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -22014,7 +22014,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -22031,7 +22031,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -22048,7 +22048,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -22065,7 +22065,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -22082,7 +22082,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -22101,7 +22101,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -22120,7 +22120,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -22139,7 +22139,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -22158,7 +22158,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -22173,7 +22173,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -22188,7 +22188,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -22203,7 +22203,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -22218,7 +22218,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -22233,7 +22233,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -22248,7 +22248,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -22263,7 +22263,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -22280,7 +22280,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -22297,7 +22297,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -22316,7 +22316,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -22333,7 +22333,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -22350,7 +22350,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -22369,7 +22369,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -22386,7 +22386,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -22403,7 +22403,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -22422,7 +22422,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -22439,7 +22439,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -22456,7 +22456,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -22475,7 +22475,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -22492,7 +22492,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -22509,7 +22509,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -22528,7 +22528,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -22545,7 +22545,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -22562,7 +22562,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -22581,7 +22581,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -22598,7 +22598,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -22615,7 +22615,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -22634,7 +22634,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -22651,7 +22651,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -22668,7 +22668,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -22687,7 +22687,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -22704,7 +22704,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -22721,7 +22721,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -22740,7 +22740,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -22757,7 +22757,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -22774,7 +22774,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -22793,7 +22793,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -22810,7 +22810,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -22827,7 +22827,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -22846,7 +22846,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -22863,7 +22863,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -22880,7 +22880,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -22899,7 +22899,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -22916,7 +22916,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -22933,7 +22933,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -22952,7 +22952,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -22969,7 +22969,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -22986,7 +22986,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -23005,7 +23005,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -23022,7 +23022,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -23039,7 +23039,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -23058,7 +23058,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -23075,7 +23075,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -23092,7 +23092,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -23111,7 +23111,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -23128,7 +23128,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -23145,7 +23145,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -23164,7 +23164,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -23181,7 +23181,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -23198,7 +23198,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -23217,7 +23217,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -23234,7 +23234,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -23251,7 +23251,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -23270,7 +23270,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -23287,7 +23287,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -23304,7 +23304,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -23323,7 +23323,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -23340,7 +23340,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -23357,7 +23357,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -23376,7 +23376,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -23393,7 +23393,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -23410,7 +23410,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -23429,7 +23429,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -23446,7 +23446,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -23463,7 +23463,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -23482,7 +23482,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -23499,7 +23499,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -23516,7 +23516,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -23535,7 +23535,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -23552,7 +23552,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -23569,7 +23569,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -23588,7 +23588,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -23605,7 +23605,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -23622,7 +23622,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -23641,7 +23641,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -23658,7 +23658,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -23675,7 +23675,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -23694,7 +23694,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -23711,7 +23711,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -23728,7 +23728,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -23747,7 +23747,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -23764,7 +23764,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -23781,7 +23781,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -23800,7 +23800,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -23817,7 +23817,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -23834,7 +23834,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -23853,7 +23853,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -23870,7 +23870,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -23887,7 +23887,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -23906,7 +23906,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -23923,7 +23923,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -23940,7 +23940,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -23959,7 +23959,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -23976,7 +23976,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -23993,7 +23993,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -24012,7 +24012,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -24029,7 +24029,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -24046,7 +24046,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -24065,7 +24065,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -24082,7 +24082,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -24099,7 +24099,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -24118,7 +24118,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -24135,7 +24135,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -24152,7 +24152,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -24171,7 +24171,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -24188,7 +24188,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -24205,7 +24205,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -24224,7 +24224,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -24241,7 +24241,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -24258,7 +24258,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -24277,7 +24277,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -24294,7 +24294,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -24311,7 +24311,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -24330,7 +24330,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -24347,7 +24347,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -24364,7 +24364,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -24383,7 +24383,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -24400,7 +24400,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -24417,7 +24417,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -24436,7 +24436,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -24453,7 +24453,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -24470,7 +24470,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -24489,7 +24489,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -24506,7 +24506,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -24523,7 +24523,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -24542,7 +24542,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -24559,7 +24559,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -24576,7 +24576,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -24595,7 +24595,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -24612,7 +24612,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -24629,7 +24629,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -24648,7 +24648,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -24665,7 +24665,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -24682,7 +24682,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -24701,7 +24701,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -24718,7 +24718,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -24735,7 +24735,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -24754,7 +24754,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -24771,7 +24771,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -24788,7 +24788,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -24807,7 +24807,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -24824,7 +24824,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -24841,7 +24841,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -24860,7 +24860,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -24877,7 +24877,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -24894,7 +24894,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -24913,7 +24913,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -24930,7 +24930,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -24947,7 +24947,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -24966,7 +24966,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -24983,7 +24983,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -25000,7 +25000,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -25019,7 +25019,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -25036,7 +25036,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -25053,7 +25053,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -25072,7 +25072,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -25089,7 +25089,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -25106,7 +25106,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -25125,7 +25125,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -25142,7 +25142,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -25159,7 +25159,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -25178,7 +25178,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -25195,7 +25195,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -25212,7 +25212,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -25231,7 +25231,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -25248,7 +25248,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -25265,7 +25265,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -25284,7 +25284,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -25301,7 +25301,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -25318,7 +25318,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -25337,7 +25337,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -25354,7 +25354,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -25371,7 +25371,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -25390,7 +25390,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -25407,7 +25407,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -25424,7 +25424,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -25443,7 +25443,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -25460,7 +25460,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -25477,7 +25477,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -25496,7 +25496,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -25513,7 +25513,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -25530,7 +25530,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -25549,7 +25549,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -25566,7 +25566,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -25583,7 +25583,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -25602,7 +25602,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -25619,7 +25619,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -25636,7 +25636,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -25655,7 +25655,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -25672,7 +25672,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -25689,7 +25689,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -25708,7 +25708,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -25725,7 +25725,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -25742,7 +25742,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -25761,7 +25761,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -25778,7 +25778,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -25795,7 +25795,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -25814,7 +25814,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -25831,7 +25831,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -25848,7 +25848,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -25867,7 +25867,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -25884,7 +25884,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -25901,7 +25901,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -25920,7 +25920,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -25937,7 +25937,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -25954,7 +25954,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -25973,7 +25973,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -25990,7 +25990,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -26007,7 +26007,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -26026,7 +26026,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -26043,7 +26043,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -26060,7 +26060,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -26079,7 +26079,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -26096,7 +26096,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -26113,7 +26113,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -26132,7 +26132,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -26149,7 +26149,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -26166,7 +26166,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -26185,7 +26185,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -26202,7 +26202,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -26219,7 +26219,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -26238,7 +26238,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -26255,7 +26255,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -26272,7 +26272,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -26291,7 +26291,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -26308,7 +26308,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -26325,7 +26325,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -26344,7 +26344,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -26361,7 +26361,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -26378,7 +26378,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -26397,7 +26397,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -26414,7 +26414,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -26431,7 +26431,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -26450,7 +26450,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -26467,7 +26467,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -26484,7 +26484,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -26503,7 +26503,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -26520,7 +26520,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -26537,7 +26537,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -26556,7 +26556,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -26573,7 +26573,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -26590,7 +26590,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -26609,7 +26609,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -26626,7 +26626,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -26643,7 +26643,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -26662,7 +26662,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -26679,7 +26679,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -26696,7 +26696,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -26715,7 +26715,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -26732,7 +26732,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -26749,7 +26749,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -26768,7 +26768,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -26785,7 +26785,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -26802,7 +26802,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -26821,7 +26821,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -26838,7 +26838,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -26855,7 +26855,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -26874,7 +26874,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -26891,7 +26891,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -26908,7 +26908,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -26927,7 +26927,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -26944,7 +26944,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -26961,7 +26961,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -26980,7 +26980,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -26997,7 +26997,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -27014,7 +27014,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -27033,7 +27033,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -27050,7 +27050,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -27067,7 +27067,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -27086,7 +27086,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -27103,7 +27103,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -27120,7 +27120,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -27139,7 +27139,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -27156,7 +27156,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -27173,7 +27173,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -27192,7 +27192,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -27209,7 +27209,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -27226,7 +27226,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -27245,7 +27245,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -27262,7 +27262,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -27279,7 +27279,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -27298,7 +27298,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -27315,7 +27315,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -27332,7 +27332,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -27351,7 +27351,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -27368,7 +27368,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -27385,7 +27385,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -27404,7 +27404,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -27421,7 +27421,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -27438,7 +27438,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -27457,7 +27457,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -27474,7 +27474,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -27491,7 +27491,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -27510,7 +27510,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -27527,7 +27527,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -27544,7 +27544,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -27563,7 +27563,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -27580,7 +27580,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -27597,7 +27597,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -27616,7 +27616,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -27633,7 +27633,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -27650,7 +27650,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -27669,7 +27669,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -27686,7 +27686,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -27703,7 +27703,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -27722,7 +27722,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -27739,7 +27739,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -27756,7 +27756,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -27775,7 +27775,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -27792,7 +27792,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -27809,7 +27809,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -27828,7 +27828,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -27845,7 +27845,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -27862,7 +27862,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -27881,7 +27881,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -27898,7 +27898,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -27915,7 +27915,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -27934,7 +27934,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -27951,7 +27951,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -27968,7 +27968,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -27987,7 +27987,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -28004,7 +28004,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -28021,7 +28021,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -28040,7 +28040,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -28057,7 +28057,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -28074,7 +28074,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -28093,7 +28093,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -28110,7 +28110,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -28127,7 +28127,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -28146,7 +28146,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -28163,7 +28163,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -28180,7 +28180,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -28199,7 +28199,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -28216,7 +28216,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -28233,7 +28233,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -28252,7 +28252,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -28269,7 +28269,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -28286,7 +28286,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -28305,7 +28305,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -28322,7 +28322,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -28339,7 +28339,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -28358,7 +28358,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -28375,7 +28375,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -28392,7 +28392,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -28411,7 +28411,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -28428,7 +28428,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -28445,7 +28445,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -28464,7 +28464,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -28481,7 +28481,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -28498,7 +28498,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -28517,7 +28517,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -28534,7 +28534,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -28551,7 +28551,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -28570,7 +28570,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -28587,7 +28587,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -28604,7 +28604,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -28623,7 +28623,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -28640,7 +28640,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -28657,7 +28657,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -28676,7 +28676,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -28693,7 +28693,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -28710,7 +28710,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -28729,7 +28729,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -28746,7 +28746,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -28763,7 +28763,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -28782,7 +28782,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -28799,7 +28799,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -28816,7 +28816,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -28835,7 +28835,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -28852,7 +28852,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -28869,7 +28869,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -28888,7 +28888,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -28905,7 +28905,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -28922,7 +28922,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -28941,7 +28941,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -28958,7 +28958,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -28975,7 +28975,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -28994,7 +28994,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -29011,7 +29011,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -29028,7 +29028,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -29047,7 +29047,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -29064,7 +29064,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -29081,7 +29081,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -29100,7 +29100,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -29117,7 +29117,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -29134,7 +29134,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -29153,7 +29153,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -29170,7 +29170,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -29187,7 +29187,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -29206,7 +29206,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -29223,7 +29223,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -29240,7 +29240,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -29259,7 +29259,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -29276,7 +29276,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -29293,7 +29293,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -29312,7 +29312,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -29329,7 +29329,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -29346,7 +29346,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -29365,7 +29365,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -29382,7 +29382,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -29399,7 +29399,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -29418,7 +29418,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -29435,7 +29435,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -29452,7 +29452,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -29471,7 +29471,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -29488,7 +29488,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -29505,7 +29505,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -29524,7 +29524,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -29541,7 +29541,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -29558,7 +29558,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -29577,7 +29577,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -29594,7 +29594,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -29611,7 +29611,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -29630,7 +29630,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -29647,7 +29647,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -29664,7 +29664,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -29683,7 +29683,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -29700,7 +29700,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -29717,7 +29717,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -29736,7 +29736,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -29753,7 +29753,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -29770,7 +29770,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -29789,7 +29789,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -29806,7 +29806,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -29823,7 +29823,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -29842,7 +29842,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -29859,7 +29859,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -29876,7 +29876,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -29895,7 +29895,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -29912,7 +29912,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -29929,7 +29929,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -29948,7 +29948,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -29965,7 +29965,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -29982,7 +29982,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -30001,7 +30001,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -30018,7 +30018,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -30035,7 +30035,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -30054,7 +30054,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -30071,7 +30071,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -30088,7 +30088,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -30107,7 +30107,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -30124,7 +30124,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -30141,7 +30141,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -30160,7 +30160,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -30177,7 +30177,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -30194,7 +30194,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -30213,7 +30213,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -30230,7 +30230,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -30247,7 +30247,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -30266,7 +30266,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -30283,7 +30283,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -30300,7 +30300,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -30319,7 +30319,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -30336,7 +30336,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -30353,7 +30353,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -30372,7 +30372,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -30389,7 +30389,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -30406,7 +30406,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -30425,7 +30425,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -30442,7 +30442,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -30459,7 +30459,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -30478,7 +30478,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -30495,7 +30495,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -30512,7 +30512,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -30531,7 +30531,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -30548,7 +30548,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -30565,7 +30565,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -30584,7 +30584,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -30601,7 +30601,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -30618,7 +30618,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -30637,7 +30637,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -30654,7 +30654,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -30671,7 +30671,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -30690,7 +30690,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -30707,7 +30707,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -30724,7 +30724,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -30743,7 +30743,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -30760,7 +30760,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -30777,7 +30777,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -30796,7 +30796,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -30813,7 +30813,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -30830,7 +30830,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -30849,7 +30849,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -30866,7 +30866,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -30883,7 +30883,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -30902,7 +30902,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -30919,7 +30919,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -30936,7 +30936,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -30955,7 +30955,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -30972,7 +30972,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -30989,7 +30989,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -31008,7 +31008,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -31025,7 +31025,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -31042,7 +31042,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -31061,7 +31061,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -31078,7 +31078,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -31095,7 +31095,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -31114,7 +31114,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -31131,7 +31131,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -31148,7 +31148,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -31167,7 +31167,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -31184,7 +31184,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -31201,7 +31201,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -31220,7 +31220,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -31237,7 +31237,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -31254,7 +31254,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -31273,7 +31273,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -31290,7 +31290,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -31307,7 +31307,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -31326,7 +31326,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -31343,7 +31343,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -31360,7 +31360,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -31379,7 +31379,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -31396,7 +31396,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -31413,7 +31413,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -31432,7 +31432,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -31449,7 +31449,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -31466,7 +31466,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -31485,7 +31485,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -31502,7 +31502,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -31519,7 +31519,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -31538,7 +31538,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -31555,7 +31555,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -31572,7 +31572,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -31591,7 +31591,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -31608,7 +31608,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -31625,7 +31625,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -31644,7 +31644,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -31661,7 +31661,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -31678,7 +31678,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -31697,7 +31697,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -31714,7 +31714,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -31731,7 +31731,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -31750,7 +31750,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -31767,7 +31767,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -31784,7 +31784,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -31803,7 +31803,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -31820,7 +31820,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -31837,7 +31837,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -31856,7 +31856,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -31873,7 +31873,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -31890,7 +31890,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -31909,7 +31909,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -31926,7 +31926,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -31943,7 +31943,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -31962,7 +31962,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -31979,7 +31979,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -31996,7 +31996,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -32015,7 +32015,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -32034,7 +32034,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -32053,7 +32053,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -32074,7 +32074,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -32093,7 +32093,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -32112,7 +32112,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -32133,7 +32133,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -32152,7 +32152,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -32171,7 +32171,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -32192,7 +32192,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -32211,7 +32211,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -32230,7 +32230,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -32251,7 +32251,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -32266,7 +32266,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -32281,7 +32281,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -32298,7 +32298,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -32313,7 +32313,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -32328,7 +32328,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -32345,7 +32345,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -32360,7 +32360,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -32375,7 +32375,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -32390,7 +32390,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -32405,7 +32405,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -32420,7 +32420,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -32435,7 +32435,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -32450,7 +32450,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -32467,7 +32467,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -32482,7 +32482,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -32497,7 +32497,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -32512,7 +32512,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -32529,7 +32529,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -32544,7 +32544,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -32559,7 +32559,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -32574,7 +32574,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -32589,7 +32589,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -32604,7 +32604,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -32619,7 +32619,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -32634,7 +32634,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -32649,7 +32649,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -32664,7 +32664,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -32681,7 +32681,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -32696,7 +32696,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -32711,7 +32711,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -32726,7 +32726,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -32741,7 +32741,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -32756,7 +32756,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -32771,7 +32771,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -32786,7 +32786,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -32801,7 +32801,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -32818,7 +32818,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -32833,7 +32833,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -32848,7 +32848,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -32863,7 +32863,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -32880,7 +32880,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -32895,7 +32895,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -32910,7 +32910,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -32925,7 +32925,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -32940,7 +32940,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -32957,7 +32957,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -32974,7 +32974,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -32991,7 +32991,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -33010,7 +33010,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -33027,7 +33027,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -33044,7 +33044,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -33061,7 +33061,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -33078,7 +33078,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -33097,7 +33097,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
@@ -33116,7 +33116,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -33133,7 +33133,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -33150,7 +33150,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -33167,7 +33167,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -33184,7 +33184,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -33203,7 +33203,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -33222,7 +33222,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -33239,7 +33239,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -33256,7 +33256,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -33275,7 +33275,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -33290,7 +33290,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -33305,7 +33305,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -33322,7 +33322,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -33337,7 +33337,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -33352,7 +33352,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -33367,7 +33367,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -33384,7 +33384,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -33399,7 +33399,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -33414,7 +33414,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -33429,7 +33429,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -33444,7 +33444,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -33459,7 +33459,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -33474,7 +33474,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -33489,7 +33489,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -33504,7 +33504,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -33521,7 +33521,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -33536,7 +33536,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -33551,7 +33551,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -33568,7 +33568,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -33583,7 +33583,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -33598,7 +33598,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -33615,7 +33615,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -33632,7 +33632,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -33649,7 +33649,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -33668,7 +33668,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -33685,7 +33685,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -33702,7 +33702,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -33721,7 +33721,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -33738,7 +33738,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -33755,7 +33755,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -33774,7 +33774,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -33791,7 +33791,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -33808,7 +33808,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -33827,7 +33827,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -33846,7 +33846,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -33865,7 +33865,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -33882,7 +33882,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -33899,7 +33899,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -33916,7 +33916,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -33933,7 +33933,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -33950,7 +33950,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -33967,7 +33967,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -33984,7 +33984,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -34001,7 +34001,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -34018,7 +34018,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -34037,7 +34037,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -34056,7 +34056,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -34075,7 +34075,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -34090,7 +34090,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "vmaskmovdqu", 0xf7, None, 2,
@@ -34103,7 +34103,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -34118,7 +34118,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -34135,7 +34135,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -34152,7 +34152,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -34169,7 +34169,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -34186,7 +34186,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -34203,7 +34203,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -34220,7 +34220,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -34239,7 +34239,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -34256,7 +34256,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -34273,7 +34273,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -34292,7 +34292,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -34309,7 +34309,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -34326,7 +34326,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -34345,7 +34345,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -34362,7 +34362,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -34379,7 +34379,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -34398,7 +34398,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -34415,7 +34415,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -34432,7 +34432,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -34451,7 +34451,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -34468,7 +34468,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -34485,7 +34485,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -34504,7 +34504,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -34521,7 +34521,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -34538,7 +34538,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -34557,7 +34557,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -34574,7 +34574,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -34591,7 +34591,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -34610,7 +34610,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -34625,7 +34625,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -34640,7 +34640,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -34655,7 +34655,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -34670,7 +34670,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -34685,7 +34685,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
@@ -34700,7 +34700,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -34715,7 +34715,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -34730,7 +34730,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -34745,7 +34745,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -34760,7 +34760,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -34775,7 +34775,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -34790,7 +34790,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -34805,7 +34805,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -34822,7 +34822,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -34839,7 +34839,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -34856,7 +34856,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -34871,7 +34871,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -34888,7 +34888,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -34903,7 +34903,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -34920,7 +34920,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -34935,7 +34935,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -34952,7 +34952,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -34967,7 +34967,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -34984,7 +34984,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -35001,7 +35001,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -35018,7 +35018,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -35033,7 +35033,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -35050,7 +35050,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -35065,7 +35065,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -35082,7 +35082,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -35097,7 +35097,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -35114,7 +35114,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -35129,7 +35129,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -35144,7 +35144,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -35159,7 +35159,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -35174,41 +35174,26 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } } } },
{ "vmovntdqa", 0x2a, None, 2,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 2, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vmovntdqa", 0x2a, None, 2,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 2, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vmovntdqa", 0x2a, None, 2,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0,
@@ -35219,7 +35204,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -35234,7 +35219,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -35249,7 +35234,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -35264,7 +35249,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -35279,7 +35264,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -35294,7 +35279,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -35309,7 +35294,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -35324,7 +35309,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -35339,7 +35324,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -35354,7 +35339,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -35369,7 +35354,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -35384,7 +35369,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -35399,7 +35384,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -35416,7 +35401,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -35431,7 +35416,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -35448,7 +35433,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -35463,7 +35448,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -35478,7 +35463,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -35493,7 +35478,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -35508,7 +35493,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -35523,7 +35508,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -35540,7 +35525,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -35555,7 +35540,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -35572,7 +35557,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -35587,7 +35572,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -35602,7 +35587,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -35617,49 +35602,30 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vmpsadbw", 0x42, None, 4,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 3, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vmpsadbw", 0x42, None, 4,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 3, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vmulpd", 0x59, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 1, 0, 0,
@@ -35670,7 +35636,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -35687,7 +35653,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -35704,7 +35670,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -35723,7 +35689,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -35740,7 +35706,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -35757,7 +35723,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -35776,7 +35742,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -35793,7 +35759,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -35810,7 +35776,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -35829,7 +35795,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -35846,7 +35812,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -35863,7 +35829,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -35882,7 +35848,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -35899,7 +35865,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -35916,7 +35882,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -35933,7 +35899,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -35941,35 +35907,20 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpabsb", 0x1c, None, 2,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 2, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpabsb", 0x1c, None, 2,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 2, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpabsb", 0x1c, None, 2,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 1, 0, 0,
@@ -35980,41 +35931,26 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpabsd", 0x1e, None, 2,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 2, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpabsd", 0x1e, None, 2,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 2, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpabsd", 0x1e, None, 2,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0,
@@ -36025,41 +35961,26 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpabsw", 0x1d, None, 2,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 2, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpabsw", 0x1d, None, 2,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 2, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpabsw", 0x1d, None, 2,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 1, 0, 0,
@@ -36070,45 +35991,28 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpackssdw", 0x6b, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpackssdw", 0x6b, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpackssdw", 0x6b, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0,
@@ -36119,7 +36023,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -36127,39 +36031,22 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpacksswb", 0x63, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpacksswb", 0x63, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpacksswb", 0x63, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 1, 0, 0,
@@ -36170,7 +36057,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -36178,39 +36065,22 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpackusdw", 0x2b, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 2, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpackusdw", 0x2b, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 2, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpackusdw", 0x2b, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 1, 0, 0,
@@ -36221,7 +36091,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -36229,39 +36099,22 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpackuswb", 0x67, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpackuswb", 0x67, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpackuswb", 0x67, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 1, 0, 0,
@@ -36272,7 +36125,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -36280,39 +36133,22 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpaddsb", 0xec, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 1, 0, 0,
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpaddsb", 0xec, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpaddsb", 0xec, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 1, 0, 0,
@@ -36323,7 +36159,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -36331,39 +36167,22 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpaddsw", 0xed, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 1, 0, 0,
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpaddsw", 0xed, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpaddsw", 0xed, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 1, 0, 0,
@@ -36374,7 +36193,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -36382,39 +36201,22 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpaddb", 0xfc, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 1, 0, 0,
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpaddb", 0xfc, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpaddb", 0xfc, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 1, 0, 0,
@@ -36425,7 +36227,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -36433,39 +36235,22 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpaddd", 0xfe, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 1, 0, 0,
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpaddd", 0xfe, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpaddd", 0xfe, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0,
@@ -36476,7 +36261,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -36484,39 +36269,22 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpaddq", 0xd4, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 1, 0, 0,
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpaddq", 0xd4, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpaddq", 0xd4, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 1, 0, 0,
@@ -36527,7 +36295,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -36535,39 +36303,22 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpaddw", 0xfd, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 1, 0, 0,
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpaddw", 0xfd, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpaddw", 0xfd, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 1, 0, 0,
@@ -36578,7 +36329,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -36586,39 +36337,22 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpaddusb", 0xdc, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 1, 0, 0,
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpaddusb", 0xdc, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpaddusb", 0xdc, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 1, 0, 0,
@@ -36629,7 +36363,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -36637,39 +36371,22 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpaddusw", 0xdd, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 1, 0, 0,
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpaddusw", 0xdd, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpaddusw", 0xdd, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 1, 0, 0,
@@ -36680,7 +36397,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -36688,43 +36405,24 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpalignr", 0x0f, None, 4,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 3, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpalignr", 0x0f, None, 4,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 3, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpalignr", 0x0f, None, 4,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 3, 1, 0, 0,
@@ -36735,7 +36433,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -36745,107 +36443,56 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpand", 0xdb, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 1, 0, 0,
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpand", 0xdb, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpandn", 0xdf, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpandn", 0xdf, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpavgb", 0xe0, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 1, 0, 0,
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpavgb", 0xe0, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpavgb", 0xe0, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 1, 0, 0,
@@ -36856,7 +36503,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -36864,39 +36511,22 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpavgw", 0xe3, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 1, 0, 0,
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpavgw", 0xe3, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpavgw", 0xe3, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 1, 0, 0,
@@ -36907,7 +36537,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -36915,115 +36545,60 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpblendvb", 0x4c, None, 4,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 3, 1, 2, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpblendvb", 0x4c, None, 4,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, 3, 1, 2, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 3, 1, 2, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpblendw", 0x0e, None, 4,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 3, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpblendw", 0x0e, None, 4,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 3, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpcmpeqb", 0x74, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 1, 0, 0,
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpcmpeqb", 0x74, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpcmpeqb", 0x74, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 1, 0, 0,
@@ -37034,7 +36609,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -37051,7 +36626,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -37059,39 +36634,22 @@ const insn_template i386_optab[] =
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "vpcmpeqd", 0x76, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 1, 0, 0,
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpcmpeqd", 0x76, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpcmpeqd", 0x76, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0,
@@ -37102,7 +36660,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -37119,7 +36677,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -37127,39 +36685,22 @@ const insn_template i386_optab[] =
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "vpcmpeqq", 0x29, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 2, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpcmpeqq", 0x29, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 2, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpcmpeqq", 0x29, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 1, 0, 0,
@@ -37170,7 +36711,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -37187,7 +36728,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -37195,39 +36736,22 @@ const insn_template i386_optab[] =
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "vpcmpeqw", 0x75, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 1, 0, 0,
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpcmpeqw", 0x75, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpcmpeqw", 0x75, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 1, 0, 0,
@@ -37238,7 +36762,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -37255,7 +36779,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -37272,7 +36796,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0,
@@ -37289,7 +36813,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -37306,7 +36830,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0,
@@ -37323,7 +36847,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -37331,39 +36855,22 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } } } },
{ "vpcmpgtb", 0x64, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpcmpgtb", 0x64, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpcmpgtb", 0x64, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 1, 0, 0,
@@ -37374,7 +36881,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -37382,39 +36889,22 @@ const insn_template i386_optab[] =
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "vpcmpgtd", 0x66, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpcmpgtd", 0x66, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpcmpgtd", 0x66, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0,
@@ -37425,7 +36915,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -37433,39 +36923,22 @@ const insn_template i386_optab[] =
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "vpcmpgtq", 0x37, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 2, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpcmpgtq", 0x37, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 2, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpcmpgtq", 0x37, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 1, 0, 0,
@@ -37476,7 +36949,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -37484,39 +36957,22 @@ const insn_template i386_optab[] =
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "vpcmpgtw", 0x65, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpcmpgtw", 0x65, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpcmpgtw", 0x65, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 1, 0, 0,
@@ -37527,7 +36983,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -37544,7 +37000,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -37561,7 +37017,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -37578,7 +37034,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -37597,7 +37053,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -37614,7 +37070,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -37631,7 +37087,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -37648,7 +37104,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -37665,7 +37121,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -37682,7 +37138,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -37699,7 +37155,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -37716,7 +37172,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -37733,7 +37189,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -37750,7 +37206,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -37767,7 +37223,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -37784,7 +37240,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -37801,7 +37257,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -37818,7 +37274,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -37835,7 +37291,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -37852,7 +37308,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -37869,7 +37325,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -37886,7 +37342,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -37903,7 +37359,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -37920,7 +37376,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -37937,7 +37393,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -37954,7 +37410,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -37962,107 +37418,56 @@ const insn_template i386_optab[] =
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "vphaddd", 0x02, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 2, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vphaddd", 0x02, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 2, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vphaddsw", 0x03, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 2, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vphaddsw", 0x03, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 2, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vphaddw", 0x01, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 2, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vphaddw", 0x01, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 2, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vphminposuw", 0x41, None, 2,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 2, 1, 0, 0,
@@ -38073,113 +37478,62 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } } } },
{ "vphsubd", 0x06, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 2, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vphsubd", 0x06, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 2, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vphsubsw", 0x07, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 2, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vphsubsw", 0x07, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 2, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vphsubw", 0x05, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 2, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vphsubw", 0x05, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 2, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpinsrb", 0x20, None, 4,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 3, 1, 0, 0,
@@ -38190,7 +37544,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -38209,7 +37563,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0,
@@ -38228,7 +37582,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -38247,7 +37601,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0,
@@ -38266,7 +37620,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -38285,7 +37639,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -38304,7 +37658,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -38323,7 +37677,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -38342,7 +37696,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -38361,7 +37715,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
@@ -38380,7 +37734,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -38399,7 +37753,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
@@ -38409,39 +37763,22 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } } } },
{ "vpmaddubsw", 0x04, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 2, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpmaddubsw", 0x04, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 2, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpmaddubsw", 0x04, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 2, 1, 0, 0,
@@ -38452,7 +37789,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -38460,39 +37797,22 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpmaddwd", 0xf5, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 1, 0, 0,
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpmaddwd", 0xf5, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpmaddwd", 0xf5, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 1, 0, 0,
@@ -38503,7 +37823,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -38511,39 +37831,22 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpmaxsb", 0x3c, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 2, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpmaxsb", 0x3c, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 2, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpmaxsb", 0x3c, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 2, 1, 0, 0,
@@ -38554,7 +37857,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -38562,39 +37865,22 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpmaxsd", 0x3d, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 2, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpmaxsd", 0x3d, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 2, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpmaxsd", 0x3d, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 1, 0, 0,
@@ -38605,7 +37891,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -38613,39 +37899,22 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpmaxsw", 0xee, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 1, 0, 0,
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpmaxsw", 0xee, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpmaxsw", 0xee, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 1, 0, 0,
@@ -38656,7 +37925,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -38664,39 +37933,22 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpmaxub", 0xde, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 1, 0, 0,
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpmaxub", 0xde, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpmaxub", 0xde, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 1, 0, 0,
@@ -38707,7 +37959,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -38715,39 +37967,22 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpmaxud", 0x3f, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 2, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpmaxud", 0x3f, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 2, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpmaxud", 0x3f, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 1, 0, 0,
@@ -38758,7 +37993,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -38766,39 +38001,22 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpmaxuw", 0x3e, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 2, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpmaxuw", 0x3e, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 2, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpmaxuw", 0x3e, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 2, 1, 0, 0,
@@ -38809,7 +38027,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -38817,39 +38035,22 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpminsb", 0x38, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 2, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpminsb", 0x38, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 2, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpminsb", 0x38, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 2, 1, 0, 0,
@@ -38860,7 +38061,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -38868,39 +38069,22 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpminsd", 0x39, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 2, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpminsd", 0x39, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 2, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpminsd", 0x39, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 1, 0, 0,
@@ -38911,7 +38095,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -38919,39 +38103,22 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpminsw", 0xea, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 1, 0, 0,
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpminsw", 0xea, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpminsw", 0xea, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 1, 0, 0,
@@ -38962,7 +38129,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -38970,39 +38137,22 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpminub", 0xda, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 1, 0, 0,
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpminub", 0xda, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpminub", 0xda, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 1, 0, 0,
@@ -39013,7 +38163,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -39021,39 +38171,22 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpminud", 0x3b, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 2, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpminud", 0x3b, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 2, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpminud", 0x3b, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 1, 0, 0,
@@ -39064,7 +38197,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -39072,39 +38205,22 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpminuw", 0x3a, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 2, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpminuw", 0x3a, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 2, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpminuw", 0x3a, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 2, 1, 0, 0,
@@ -39115,7 +38231,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -39127,29 +38243,14 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
- 0, 0, 0, 0, 0, 0, 0 } } } },
- { "vpmovmskb", 0xd7, None, 2,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "vpmovsxbd", 0x21, None, 2,
@@ -39162,7 +38263,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -39177,7 +38278,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -39192,7 +38293,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -39207,7 +38308,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -39222,7 +38323,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -39237,7 +38338,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -39252,7 +38353,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -39267,7 +38368,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -39282,7 +38383,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -39297,7 +38398,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -39312,7 +38413,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -39327,7 +38428,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -39342,7 +38443,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -39357,7 +38458,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -39372,7 +38473,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -39387,7 +38488,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -39402,7 +38503,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -39417,7 +38518,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -39432,7 +38533,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -39447,7 +38548,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -39462,7 +38563,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -39477,7 +38578,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -39492,7 +38593,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -39507,7 +38608,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -39522,7 +38623,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -39537,7 +38638,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -39552,7 +38653,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -39567,7 +38668,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -39582,7 +38683,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -39597,7 +38698,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -39612,7 +38713,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -39627,7 +38728,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -39642,7 +38743,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -39657,7 +38758,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -39672,7 +38773,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -39687,7 +38788,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -39702,7 +38803,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -39717,7 +38818,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -39732,7 +38833,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -39747,7 +38848,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -39762,7 +38863,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -39777,7 +38878,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -39792,7 +38893,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -39807,7 +38908,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -39822,7 +38923,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -39837,7 +38938,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -39852,7 +38953,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -39867,7 +38968,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -39882,7 +38983,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -39897,7 +38998,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -39912,7 +39013,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -39927,7 +39028,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -39942,7 +39043,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -39957,7 +39058,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -39972,7 +39073,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -39987,7 +39088,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -40002,7 +39103,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -40017,7 +39118,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -40032,7 +39133,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -40047,45 +39148,28 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 0, 0 } } } },
{ "vpmuldq", 0x28, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 2, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpmuldq", 0x28, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 2, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpmuldq", 0x28, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 1, 0, 0,
@@ -40096,7 +39180,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -40104,39 +39188,22 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpmulhrsw", 0x0b, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 2, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpmulhrsw", 0x0b, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 2, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpmulhrsw", 0x0b, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 2, 1, 0, 0,
@@ -40147,7 +39214,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -40155,39 +39222,22 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpmulhuw", 0xe4, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 1, 0, 0,
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpmulhuw", 0xe4, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpmulhuw", 0xe4, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 1, 0, 0,
@@ -40198,7 +39248,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -40206,39 +39256,22 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpmulhw", 0xe5, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 1, 0, 0,
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpmulhw", 0xe5, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpmulhw", 0xe5, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 1, 0, 0,
@@ -40249,7 +39282,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -40257,39 +39290,22 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpmulld", 0x40, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 2, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpmulld", 0x40, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 2, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpmulld", 0x40, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 1, 0, 0,
@@ -40300,7 +39316,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -40308,39 +39324,22 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpmullw", 0xd5, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 1, 0, 0,
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpmullw", 0xd5, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpmullw", 0xd5, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 1, 0, 0,
@@ -40351,7 +39350,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -40359,39 +39358,22 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpmuludq", 0xf4, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 1, 0, 0,
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpmuludq", 0xf4, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpmuludq", 0xf4, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 1, 0, 0,
@@ -40402,7 +39384,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -40410,73 +39392,39 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpor", 0xeb, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 1, 0, 0,
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpor", 0xeb, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpsadbw", 0xf6, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 1, 0, 0,
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpsadbw", 0xf6, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpsadbw", 0xf6, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 1, 0, 0,
@@ -40487,7 +39435,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -40495,39 +39443,22 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpshufb", 0x00, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 2, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpshufb", 0x00, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 2, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpshufb", 0x00, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 2, 1, 0, 0,
@@ -40538,7 +39469,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -40546,39 +39477,22 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpshufd", 0x70, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpshufd", 0x70, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpshufd", 0x70, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0,
@@ -40589,7 +39503,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -40597,39 +39511,22 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpshufhw", 0x70, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 1, 2, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpshufhw", 0x70, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 1, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpshufhw", 0x70, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 2, 0, 0,
@@ -40640,7 +39537,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -40648,39 +39545,22 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpshuflw", 0x70, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 1, 3, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpshuflw", 0x70, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 1, 3, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpshuflw", 0x70, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 3, 0, 0,
@@ -40691,7 +39571,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -40699,175 +39579,90 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpsignb", 0x08, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 2, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpsignb", 0x08, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 2, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpsignd", 0x0a, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 2, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpsignd", 0x0a, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 2, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpsignw", 0x09, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 2, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpsignw", 0x09, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 2, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpslld", 0x72, 6, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpslld", 0xf2, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpslld", 0x72, 6, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
- { "vpslld", 0xf2, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpslld", 0xf2, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0,
@@ -40878,13 +39673,13 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0 } },
+ 0, 1, 1, 1, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0 } } } },
+ 0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpslld", 0x72, 6, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, 1, 0, 0,
@@ -40895,64 +39690,30 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
- { "vpslld", 0xf2, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 2, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
{ "vpslldq", 0x73, 7, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpslldq", 0x73, 7, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpslldq", 0x73, 7, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 1, 1, 0, 0,
@@ -40963,7 +39724,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -40971,73 +39732,39 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpsllq", 0x73, 6, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpsllq", 0xf3, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpsllq", 0x73, 6, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
- { "vpsllq", 0xf3, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpsllq", 0xf3, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 1, 0, 0,
@@ -41048,13 +39775,13 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0 } },
+ 0, 1, 1, 1, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0 } } } },
+ 0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpsllq", 0x73, 6, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 1, 1, 0, 0,
@@ -41065,98 +39792,47 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
- { "vpsllq", 0xf3, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 1, 0, 0,
- 0, 2, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
{ "vpsllw", 0x71, 6, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpsllw", 0xf1, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpsllw", 0x71, 6, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
- { "vpsllw", 0xf1, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpsllw", 0x71, 6, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 1, 1, 0, 0,
@@ -41167,7 +39843,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -41175,23 +39851,6 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpsllw", 0xf1, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 1, 0, 0,
- 0, 2, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpsllw", 0xf1, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 1, 0, 0,
0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 },
@@ -41201,81 +39860,47 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0 } },
+ 0, 1, 1, 1, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0 } } } },
+ 0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpsrad", 0x72, 4, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpsrad", 0xe2, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpsrad", 0x72, 4, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
- { "vpsrad", 0xe2, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpsrad", 0xe2, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0,
@@ -41286,13 +39911,13 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0 } },
+ 0, 1, 1, 1, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0 } } } },
+ 0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpsrad", 0x72, 4, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, 1, 0, 0,
@@ -41303,98 +39928,47 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
- { "vpsrad", 0xe2, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 2, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
{ "vpsraw", 0x71, 4, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpsraw", 0xe1, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpsraw", 0x71, 4, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
- { "vpsraw", 0xe1, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpsraw", 0x71, 4, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 1, 1, 0, 0,
@@ -41405,7 +39979,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -41413,23 +39987,6 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpsraw", 0xe1, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 1, 0, 0,
- 0, 2, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpsraw", 0xe1, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 1, 0, 0,
0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 },
@@ -41439,81 +39996,47 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0 } },
+ 0, 1, 1, 1, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0 } } } },
+ 0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpsrld", 0x72, 2, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpsrld", 0xd2, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpsrld", 0x72, 2, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
- { "vpsrld", 0xd2, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpsrld", 0xd2, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0,
@@ -41524,13 +40047,13 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0 } },
+ 0, 1, 1, 1, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0 } } } },
+ 0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpsrld", 0x72, 2, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, 1, 0, 0,
@@ -41541,64 +40064,30 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
- { "vpsrld", 0xd2, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 2, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
{ "vpsrldq", 0x73, 3, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpsrldq", 0x73, 3, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpsrldq", 0x73, 3, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 1, 1, 0, 0,
@@ -41609,7 +40098,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -41617,73 +40106,39 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpsrlq", 0x73, 2, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpsrlq", 0xd3, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpsrlq", 0x73, 2, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
- { "vpsrlq", 0xd3, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpsrlq", 0xd3, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 1, 0, 0,
@@ -41694,13 +40149,13 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0 } },
+ 0, 1, 1, 1, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0 } } } },
+ 0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpsrlq", 0x73, 2, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 1, 1, 0, 0,
@@ -41711,98 +40166,47 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
- { "vpsrlq", 0xd3, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 1, 0, 0,
- 0, 2, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
{ "vpsrlw", 0x71, 2, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpsrlw", 0xd1, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpsrlw", 0x71, 2, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
- { "vpsrlw", 0xd1, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpsrlw", 0x71, 2, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 1, 1, 0, 0,
@@ -41813,7 +40217,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -41821,23 +40225,6 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpsrlw", 0xd1, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 1, 0, 0,
- 0, 2, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpsrlw", 0xd1, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 1, 0, 0,
0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 },
@@ -41847,47 +40234,30 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0 } },
+ 0, 1, 1, 1, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0 } } } },
+ 0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpsubb", 0xf8, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpsubb", 0xf8, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpsubb", 0xf8, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 1, 0, 0,
@@ -41898,7 +40268,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -41906,39 +40276,22 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpsubd", 0xfa, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpsubd", 0xfa, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpsubd", 0xfa, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0,
@@ -41949,7 +40302,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -41957,39 +40310,22 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpsubq", 0xfb, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpsubq", 0xfb, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpsubq", 0xfb, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 1, 0, 0,
@@ -42000,7 +40336,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -42008,39 +40344,22 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpsubsb", 0xe8, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpsubsb", 0xe8, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpsubsb", 0xe8, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 1, 0, 0,
@@ -42051,7 +40370,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -42059,39 +40378,22 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpsubsw", 0xe9, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpsubsw", 0xe9, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpsubsw", 0xe9, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 1, 0, 0,
@@ -42102,7 +40404,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -42110,39 +40412,22 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpsubusb", 0xd8, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpsubusb", 0xd8, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpsubusb", 0xd8, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 1, 0, 0,
@@ -42153,7 +40438,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -42161,39 +40446,22 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpsubusw", 0xd9, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpsubusw", 0xd9, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpsubusw", 0xd9, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 1, 0, 0,
@@ -42204,7 +40472,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -42212,39 +40480,22 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpsubw", 0xf9, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpsubw", 0xf9, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpsubw", 0xf9, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 1, 0, 0,
@@ -42255,7 +40506,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -42272,45 +40523,28 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpunpckhbw", 0x68, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpunpckhbw", 0x68, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpunpckhbw", 0x68, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 1, 0, 0,
@@ -42321,7 +40555,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -42329,39 +40563,22 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpunpckhdq", 0x6a, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpunpckhdq", 0x6a, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpunpckhdq", 0x6a, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0,
@@ -42372,7 +40589,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -42380,39 +40597,22 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpunpckhqdq", 0x6d, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpunpckhqdq", 0x6d, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpunpckhqdq", 0x6d, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 1, 0, 0,
@@ -42423,7 +40623,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -42431,39 +40631,22 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpunpckhwd", 0x69, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpunpckhwd", 0x69, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpunpckhwd", 0x69, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 1, 0, 0,
@@ -42474,7 +40657,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -42482,39 +40665,22 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpunpcklbw", 0x60, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpunpcklbw", 0x60, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpunpcklbw", 0x60, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 1, 0, 0,
@@ -42525,7 +40691,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -42533,39 +40699,22 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpunpckldq", 0x62, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpunpckldq", 0x62, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpunpckldq", 0x62, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0,
@@ -42576,7 +40725,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -42584,39 +40733,22 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpunpcklqdq", 0x6c, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpunpcklqdq", 0x6c, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpunpcklqdq", 0x6c, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 1, 0, 0,
@@ -42627,7 +40759,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -42635,39 +40767,22 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpunpcklwd", 0x61, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpunpcklwd", 0x61, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vpunpcklwd", 0x61, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 1, 0, 0,
@@ -42678,7 +40793,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -42686,39 +40801,22 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpxor", 0xef, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
- { "vpxor", 0xef, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 1, 0, 0,
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0 } },
+ 0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } } } },
+ 0, 1, 1, 0, 0, 0, 0 } } } },
{ "vrcpps", 0x53, None, 2,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 1, 0, 0, 0,
@@ -42729,7 +40827,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -42744,7 +40842,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -42761,7 +40859,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -42778,7 +40876,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -42795,7 +40893,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -42814,7 +40912,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -42833,7 +40931,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -42848,7 +40946,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -42865,7 +40963,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -42884,7 +40982,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -42903,7 +41001,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -42922,7 +41020,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -42941,7 +41039,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -42956,7 +41054,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -42971,7 +41069,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -42988,7 +41086,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -43003,7 +41101,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -43018,7 +41116,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -43035,7 +41133,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -43052,7 +41150,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -43069,7 +41167,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -43088,7 +41186,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -43105,7 +41203,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -43122,7 +41220,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -43141,7 +41239,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "vsubpd", 0x5c, None, 3,
@@ -43154,7 +41252,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -43171,7 +41269,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -43188,7 +41286,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -43207,7 +41305,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -43224,7 +41322,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -43241,7 +41339,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -43260,7 +41358,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -43277,7 +41375,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -43294,7 +41392,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -43313,7 +41411,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -43330,7 +41428,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -43347,7 +41445,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -43366,7 +41464,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -43381,7 +41479,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -43396,7 +41494,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -43411,7 +41509,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -43426,7 +41524,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -43443,7 +41541,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -43458,7 +41556,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -43473,7 +41571,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -43490,7 +41588,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -43507,7 +41605,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -43524,7 +41622,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -43541,7 +41639,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -43558,7 +41656,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -43575,7 +41673,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -43592,7 +41690,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -43609,7 +41707,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -43626,7 +41724,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -43643,7 +41741,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -43660,7 +41758,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -43677,7 +41775,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -43694,7 +41792,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "vzeroupper", 0x77, None, 0,
@@ -43707,7 +41805,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "vbroadcasti128", 0x5a, None, 2,
@@ -43720,7 +41818,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -43735,7 +41833,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -43754,7 +41852,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -43769,7 +41867,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -43784,7 +41882,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -43799,7 +41897,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -43814,7 +41912,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -43829,7 +41927,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -43844,7 +41942,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -43859,7 +41957,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -43874,7 +41972,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -43889,7 +41987,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -43904,7 +42002,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -43919,7 +42017,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -43934,7 +42032,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -43953,7 +42051,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -43970,7 +42068,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -43987,7 +42085,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -44004,7 +42102,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -44021,7 +42119,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -44038,7 +42136,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -44055,7 +42153,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -44072,7 +42170,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -44089,7 +42187,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -44106,7 +42204,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -44123,7 +42221,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -44140,7 +42238,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -44159,7 +42257,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -44176,7 +42274,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -44193,7 +42291,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -44210,7 +42308,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -44227,7 +42325,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -44244,7 +42342,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -44261,7 +42359,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -44278,7 +42376,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -44295,7 +42393,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -44312,7 +42410,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -44329,7 +42427,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -44346,7 +42444,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -44363,7 +42461,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -44380,7 +42478,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -44397,7 +42495,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -44414,7 +42512,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -44431,7 +42529,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -44446,7 +42544,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -44461,7 +42559,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -44478,7 +42576,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -44495,7 +42593,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -44510,7 +42608,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -44525,7 +42623,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -44540,7 +42638,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -44557,7 +42655,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -44574,7 +42672,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -44589,7 +42687,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -44604,7 +42702,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -44619,7 +42717,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -44636,7 +42734,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -44653,7 +42751,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -44668,7 +42766,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -44683,7 +42781,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -44698,7 +42796,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -44715,7 +42813,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -44732,7 +42830,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -44747,7 +42845,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -44762,7 +42860,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -44777,7 +42875,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -44794,7 +42892,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -44811,7 +42909,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -44826,7 +42924,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -44841,7 +42939,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -44858,7 +42956,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -44875,7 +42973,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -44890,7 +42988,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -44905,7 +43003,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -44920,7 +43018,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -44937,7 +43035,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -44954,7 +43052,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -44969,7 +43067,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -44984,7 +43082,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -44995,11 +43093,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -45010,11 +43108,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -45027,11 +43125,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -45049,8 +43147,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -45068,8 +43166,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -45084,11 +43182,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -45104,8 +43202,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -45121,8 +43219,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -45135,11 +43233,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -45155,8 +43253,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -45172,8 +43270,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -45186,11 +43284,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -45206,8 +43304,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -45223,8 +43321,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -45237,11 +43335,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -45257,8 +43355,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -45274,8 +43372,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -45291,8 +43389,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -45310,8 +43408,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -45329,8 +43427,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -45348,8 +43446,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -45367,8 +43465,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -45384,8 +43482,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -45398,11 +43496,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "rdgsbase", 0xae, 1, 1,
@@ -45411,11 +43509,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "rdrand", 0xc7, 6, 1,
@@ -45424,11 +43522,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "wrfsbase", 0xae, 2, 1,
@@ -45437,11 +43535,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "wrgsbase", 0xae, 3, 1,
@@ -45450,11 +43548,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "vcvtph2ps", 0x13, None, 2,
@@ -45463,11 +43561,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -45478,11 +43576,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -45497,7 +43595,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -45512,7 +43610,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -45529,7 +43627,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -45544,7 +43642,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -45555,11 +43653,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -45572,11 +43670,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -45593,7 +43691,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -45610,7 +43708,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -45629,7 +43727,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -45646,7 +43744,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -45659,11 +43757,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -45680,7 +43778,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -45697,7 +43795,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -45712,11 +43810,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -45733,7 +43831,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -45750,7 +43848,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -45765,11 +43863,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -45786,7 +43884,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -45803,7 +43901,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -45818,11 +43916,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -45839,7 +43937,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -45856,7 +43954,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -45871,11 +43969,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -45892,7 +43990,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -45909,7 +44007,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -45924,11 +44022,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -45945,7 +44043,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -45962,7 +44060,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -45977,11 +44075,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -45998,7 +44096,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -46015,7 +44113,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -46030,11 +44128,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -46051,7 +44149,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -46068,7 +44166,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -46083,11 +44181,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -46104,7 +44202,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -46121,7 +44219,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -46136,11 +44234,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -46157,7 +44255,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -46174,7 +44272,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -46189,11 +44287,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -46210,7 +44308,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -46227,7 +44325,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -46242,11 +44340,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -46263,7 +44361,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -46280,7 +44378,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -46295,11 +44393,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -46316,7 +44414,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -46333,7 +44431,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -46348,11 +44446,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -46369,7 +44467,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -46386,7 +44484,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -46401,11 +44499,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -46422,7 +44520,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -46439,7 +44537,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -46454,11 +44552,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -46475,7 +44573,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -46492,7 +44590,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -46507,11 +44605,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -46528,7 +44626,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -46545,7 +44643,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -46560,11 +44658,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -46581,7 +44679,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -46598,7 +44696,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -46613,11 +44711,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -46634,7 +44732,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -46651,7 +44749,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -46666,11 +44764,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -46687,7 +44785,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -46704,7 +44802,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -46719,11 +44817,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -46740,7 +44838,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -46757,7 +44855,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -46772,11 +44870,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -46793,7 +44891,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -46810,7 +44908,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -46825,11 +44923,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -46846,7 +44944,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -46863,7 +44961,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -46878,11 +44976,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -46899,7 +44997,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -46916,7 +45014,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -46931,11 +45029,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -46952,7 +45050,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -46969,7 +45067,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -46984,11 +45082,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -47005,7 +45103,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -47022,7 +45120,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -47037,11 +45135,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -47058,7 +45156,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -47075,7 +45173,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -47090,11 +45188,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -47111,7 +45209,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -47128,7 +45226,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -47143,11 +45241,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -47164,7 +45262,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -47181,7 +45279,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -47196,11 +45294,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -47217,7 +45315,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -47234,7 +45332,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -47249,11 +45347,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -47270,7 +45368,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -47287,7 +45385,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -47302,11 +45400,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -47323,7 +45421,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -47340,7 +45438,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -47355,11 +45453,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -47376,7 +45474,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -47393,7 +45491,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -47408,11 +45506,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -47429,7 +45527,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -47446,7 +45544,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -47461,11 +45559,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -47482,7 +45580,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -47499,7 +45597,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -47514,11 +45612,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -47535,7 +45633,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -47552,7 +45650,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -47567,11 +45665,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -47588,7 +45686,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -47605,7 +45703,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -47620,11 +45718,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -47641,7 +45739,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -47658,7 +45756,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -47673,11 +45771,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -47694,7 +45792,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -47711,7 +45809,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -47726,11 +45824,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -47747,7 +45845,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -47764,7 +45862,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -47779,11 +45877,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -47800,7 +45898,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -47817,7 +45915,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -47832,11 +45930,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -47853,7 +45951,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -47870,7 +45968,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -47885,11 +45983,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -47906,7 +46004,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -47923,7 +46021,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -47938,11 +46036,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -47959,7 +46057,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -47976,7 +46074,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -47991,11 +46089,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -48012,7 +46110,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -48029,7 +46127,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -48044,11 +46142,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -48065,7 +46163,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -48082,7 +46180,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -48097,11 +46195,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -48118,7 +46216,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -48135,7 +46233,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -48150,11 +46248,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -48171,7 +46269,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -48188,7 +46286,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -48203,11 +46301,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -48224,7 +46322,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -48241,7 +46339,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -48256,11 +46354,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -48277,7 +46375,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -48294,7 +46392,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -48309,11 +46407,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -48330,7 +46428,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -48347,7 +46445,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -48362,11 +46460,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -48383,7 +46481,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -48400,7 +46498,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -48415,11 +46513,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -48436,7 +46534,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -48453,7 +46551,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -48468,11 +46566,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -48489,7 +46587,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -48506,7 +46604,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -48521,11 +46619,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -48542,7 +46640,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -48559,7 +46657,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -48574,11 +46672,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -48595,7 +46693,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -48612,7 +46710,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -48627,11 +46725,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -48648,7 +46746,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -48665,7 +46763,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -48680,11 +46778,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -48701,7 +46799,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -48718,7 +46816,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -48733,11 +46831,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -48754,7 +46852,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -48771,7 +46869,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -48786,11 +46884,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -48807,7 +46905,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -48824,7 +46922,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -48840,10 +46938,10 @@ const insn_template i386_optab[] =
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "xrelease", 0xf3, None, 0,
@@ -48853,10 +46951,10 @@ const insn_template i386_optab[] =
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "xabort", 0xc6f8, None, 1,
@@ -48866,10 +46964,10 @@ const insn_template i386_optab[] =
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "xbegin", 0xc7f8, None, 1,
@@ -48879,10 +46977,10 @@ const insn_template i386_optab[] =
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "xend", 0x01d5, None, 0,
@@ -48892,10 +46990,10 @@ const insn_template i386_optab[] =
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "xtest", 0x01d6, None, 0,
@@ -48905,10 +47003,10 @@ const insn_template i386_optab[] =
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "bzhi", 0xf5, None, 3,
@@ -48917,11 +47015,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
@@ -48934,11 +47032,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -48951,11 +47049,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -48968,11 +47066,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -48985,11 +47083,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
@@ -49002,11 +47100,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
@@ -49019,11 +47117,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
@@ -49036,11 +47134,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
@@ -49053,11 +47151,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -49072,11 +47170,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -49091,11 +47189,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -49110,11 +47208,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -49129,11 +47227,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -49148,11 +47246,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -49167,11 +47265,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -49186,11 +47284,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -49205,11 +47303,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -49224,11 +47322,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -49243,11 +47341,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -49262,11 +47360,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -49281,11 +47379,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -49300,11 +47398,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -49319,11 +47417,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -49338,11 +47436,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -49357,11 +47455,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -49376,11 +47474,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -49395,11 +47493,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -49414,11 +47512,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -49433,11 +47531,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -49452,11 +47550,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -49471,11 +47569,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -49490,11 +47588,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -49509,11 +47607,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -49528,11 +47626,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -49547,11 +47645,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -49566,11 +47664,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -49585,11 +47683,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -49604,11 +47702,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -49623,11 +47721,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -49642,11 +47740,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -49661,11 +47759,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -49680,11 +47778,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -49699,11 +47797,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -49718,11 +47816,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -49737,11 +47835,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -49756,11 +47854,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -49775,11 +47873,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -49794,11 +47892,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -49813,11 +47911,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -49828,11 +47926,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -49843,11 +47941,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -49858,11 +47956,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -49873,11 +47971,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -49892,11 +47990,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -49911,11 +48009,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -49930,11 +48028,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -49949,11 +48047,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -49968,11 +48066,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -49987,11 +48085,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -50006,11 +48104,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -50025,11 +48123,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -50044,11 +48142,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -50063,11 +48161,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -50080,11 +48178,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -50097,11 +48195,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -50114,11 +48212,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -50131,11 +48229,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -50148,11 +48246,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -50165,11 +48263,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -50182,11 +48280,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -50199,11 +48297,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -50216,11 +48314,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -50233,11 +48331,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -50250,11 +48348,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -50267,11 +48365,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -50284,11 +48382,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -50301,11 +48399,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -50318,11 +48416,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -50335,11 +48433,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -50352,11 +48450,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -50369,11 +48467,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -50386,11 +48484,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -50403,11 +48501,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -50420,11 +48518,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -50437,11 +48535,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -50454,11 +48552,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -50471,11 +48569,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -50488,11 +48586,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -50505,11 +48603,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -50522,11 +48620,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -50539,11 +48637,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -50556,11 +48654,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -50573,11 +48671,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -50590,11 +48688,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -50607,11 +48705,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -50624,11 +48722,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -50641,11 +48739,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -50658,11 +48756,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -50675,11 +48773,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -50692,11 +48790,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -50709,11 +48807,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -50726,11 +48824,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -50743,11 +48841,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -50760,11 +48858,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -50777,11 +48875,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -50794,11 +48892,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -50811,11 +48909,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -50828,11 +48926,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -50845,11 +48943,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -50862,11 +48960,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -50879,11 +48977,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -50896,11 +48994,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -50913,11 +49011,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -50930,11 +49028,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -50947,11 +49045,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -50964,11 +49062,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -50981,11 +49079,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -50998,11 +49096,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -51015,11 +49113,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -51032,11 +49130,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -51049,11 +49147,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -51066,11 +49164,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -51083,11 +49181,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -51100,11 +49198,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -51117,11 +49215,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -51134,11 +49232,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -51151,11 +49249,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -51172,11 +49270,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -51193,11 +49291,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -51214,11 +49312,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -51235,11 +49333,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -51250,11 +49348,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -51265,11 +49363,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -51280,11 +49378,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -51295,11 +49393,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -51310,11 +49408,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -51325,11 +49423,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -51340,11 +49438,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -51355,11 +49453,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -51370,11 +49468,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -51385,11 +49483,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -51400,11 +49498,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -51415,11 +49513,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -51430,11 +49528,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -51445,11 +49543,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -51460,11 +49558,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -51479,11 +49577,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -51498,11 +49596,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -51517,11 +49615,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -51536,11 +49634,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -51555,11 +49653,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -51574,11 +49672,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -51593,11 +49691,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -51612,11 +49710,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -51631,11 +49729,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -51650,11 +49748,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -51669,11 +49767,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -51688,11 +49786,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -51707,11 +49805,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -51726,11 +49824,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -51743,11 +49841,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -51760,11 +49858,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -51777,11 +49875,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -51794,11 +49892,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -51811,11 +49909,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -51828,11 +49926,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -51845,11 +49943,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -51862,11 +49960,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -51879,11 +49977,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -51896,11 +49994,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -51913,11 +50011,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -51930,11 +50028,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -51947,11 +50045,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -51964,11 +50062,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -51981,11 +50079,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -51998,11 +50096,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -52015,11 +50113,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -52032,11 +50130,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -52049,11 +50147,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -52066,11 +50164,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -52083,11 +50181,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -52100,11 +50198,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -52117,11 +50215,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -52134,11 +50232,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -52151,11 +50249,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -52168,11 +50266,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -52185,11 +50283,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -52202,11 +50300,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "slwpcb", 0x12, 1, 1,
@@ -52215,11 +50313,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "lwpval", 0x12, 1, 3,
@@ -52228,11 +50326,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -52245,11 +50343,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -52262,11 +50360,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -52279,11 +50377,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
@@ -52296,11 +50394,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
@@ -52313,11 +50411,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -52328,11 +50426,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -52343,11 +50441,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -52358,11 +50456,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
@@ -52373,11 +50471,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -52388,11 +50486,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -52403,11 +50501,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -52418,11 +50516,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -52433,11 +50531,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -52448,11 +50546,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -52463,11 +50561,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -52478,11 +50576,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -52493,11 +50591,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -52509,10 +50607,10 @@ const insn_template i386_optab[] =
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "prefetchw", 0x0d, 1, 1,
@@ -52522,10 +50620,10 @@ const insn_template i386_optab[] =
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "femms", 0x0e, None, 0,
@@ -52538,7 +50636,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "pavgusb", 0x0f, 0xbf, 2,
@@ -52551,7 +50649,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -52566,7 +50664,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -52581,7 +50679,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -52596,7 +50694,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -52611,7 +50709,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -52626,7 +50724,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -52641,7 +50739,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -52656,7 +50754,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -52671,7 +50769,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -52686,7 +50784,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -52701,7 +50799,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -52716,7 +50814,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -52731,7 +50829,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -52746,7 +50844,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -52761,7 +50859,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -52776,7 +50874,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -52791,7 +50889,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -52806,7 +50904,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -52821,7 +50919,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -52836,7 +50934,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -52851,7 +50949,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -52866,7 +50964,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -52881,7 +50979,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -52896,7 +50994,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -52911,7 +51009,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "sysret", 0x07, None, 0,
@@ -52924,7 +51022,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "swapgs", 0x01f8, None, 0,
@@ -52937,7 +51035,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "rdtscp", 0x01f9, None, 0,
@@ -52946,11 +51044,11 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "clgi", 0x01dd, None, 0,
@@ -52963,7 +51061,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "invlpga", 0x01df, None, 0,
@@ -52976,7 +51074,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "invlpga", 0x01df, None, 2,
@@ -52989,7 +51087,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
@@ -53004,7 +51102,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "skinit", 0x01de, None, 1,
@@ -53017,7 +51115,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "stgi", 0x01dc, None, 0,
@@ -53030,7 +51128,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "vmgexit", 0x01d9, None, 0,
@@ -53042,8 +51140,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "vmload", 0x01da, None, 0,
@@ -53056,7 +51154,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "vmload", 0x01da, None, 1,
@@ -53069,7 +51167,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "vmmcall", 0x01d9, None, 0,
@@ -53082,7 +51180,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "vmrun", 0x01d8, None, 0,
@@ -53095,7 +51193,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "vmrun", 0x01d8, None, 1,
@@ -53108,7 +51206,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "vmsave", 0x01db, None, 0,
@@ -53121,7 +51219,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "vmsave", 0x01db, None, 1,
@@ -53134,7 +51232,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "movntsd", 0x2b, None, 2,
@@ -53147,7 +51245,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -53162,7 +51260,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -53177,7 +51275,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -53194,7 +51292,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -53209,7 +51307,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -53224,7 +51322,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -53243,7 +51341,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
@@ -53258,7 +51356,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
@@ -53273,7 +51371,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "xcrypt-ecb", 0xa7c8, None, 0,
@@ -53286,7 +51384,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "xcrypt-cbc", 0xa7d0, None, 0,
@@ -53299,7 +51397,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "xcrypt-ctr", 0xa7d8, None, 0,
@@ -53312,7 +51410,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "xcrypt-cfb", 0xa7e0, None, 0,
@@ -53325,7 +51423,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "xcrypt-ofb", 0xa7e8, None, 0,
@@ -53338,7 +51436,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "montmul", 0xa6c0, None, 0,
@@ -53351,7 +51449,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "xsha1", 0xa6c8, None, 0,
@@ -53364,7 +51462,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "xsha256", 0xa6d0, None, 0,
@@ -53377,7 +51475,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "xstorerng", 0xa7c0, None, 0,
@@ -53390,7 +51488,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "xcryptecb", 0xa7c8, None, 0,
@@ -53403,7 +51501,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "xcryptcbc", 0xa7d0, None, 0,
@@ -53416,7 +51514,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "xcryptctr", 0xa7d8, None, 0,
@@ -53429,7 +51527,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "xcryptcfb", 0xa7e0, None, 0,
@@ -53442,7 +51540,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "xcryptofb", 0xa7e8, None, 0,
@@ -53455,7 +51553,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "xstore", 0xa7c0, None, 0,
@@ -53468,7 +51566,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "adcx", 0xf6, None, 2,
@@ -53478,10 +51576,10 @@ const insn_template i386_optab[] =
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -53493,10 +51591,10 @@ const insn_template i386_optab[] =
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -53508,10 +51606,10 @@ const insn_template i386_optab[] =
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "clac", 0x01ca, None, 0,
@@ -53521,10 +51619,10 @@ const insn_template i386_optab[] =
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "stac", 0x01cb, None, 0,
@@ -53534,10 +51632,10 @@ const insn_template i386_optab[] =
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "bnd", 0xf2, None, 0,
@@ -53547,10 +51645,10 @@ const insn_template i386_optab[] =
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "bndmk", 0x1b, None, 2,
@@ -53560,10 +51658,10 @@ const insn_template i386_optab[] =
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -53575,10 +51673,10 @@ const insn_template i386_optab[] =
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 9, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -53590,10 +51688,10 @@ const insn_template i386_optab[] =
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -53605,10 +51703,10 @@ const insn_template i386_optab[] =
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0 } },
{ { 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -53620,10 +51718,10 @@ const insn_template i386_optab[] =
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -53635,10 +51733,10 @@ const insn_template i386_optab[] =
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0 } },
{ { 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -53650,10 +51748,10 @@ const insn_template i386_optab[] =
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -53665,10 +51763,10 @@ const insn_template i386_optab[] =
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0 } },
{ { 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -53680,10 +51778,10 @@ const insn_template i386_optab[] =
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -53695,10 +51793,10 @@ const insn_template i386_optab[] =
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -53710,10 +51808,10 @@ const insn_template i386_optab[] =
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -53727,10 +51825,10 @@ const insn_template i386_optab[] =
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -53742,10 +51840,10 @@ const insn_template i386_optab[] =
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -53757,10 +51855,10 @@ const insn_template i386_optab[] =
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -53772,10 +51870,10 @@ const insn_template i386_optab[] =
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -53789,10 +51887,10 @@ const insn_template i386_optab[] =
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -53804,10 +51902,10 @@ const insn_template i386_optab[] =
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -53819,10 +51917,10 @@ const insn_template i386_optab[] =
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -53837,7 +51935,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -53854,7 +51952,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -53871,7 +51969,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -53888,7 +51986,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -53905,7 +52003,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -53922,7 +52020,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -53937,7 +52035,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
@@ -53952,7 +52050,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -53967,7 +52065,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -53982,7 +52080,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -53997,7 +52095,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -54014,7 +52112,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -54031,7 +52129,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -54048,7 +52146,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -54067,7 +52165,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -54086,7 +52184,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -54105,7 +52203,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -54124,7 +52222,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -54141,7 +52239,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -54158,7 +52256,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -54175,7 +52273,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -54192,7 +52290,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -54209,7 +52307,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -54226,7 +52324,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -54243,7 +52341,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -54260,7 +52358,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -54277,7 +52375,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -54294,7 +52392,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -54311,7 +52409,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -54328,7 +52426,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -54345,7 +52443,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -54362,7 +52460,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -54379,7 +52477,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -54396,7 +52494,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -54413,7 +52511,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -54430,7 +52528,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -54447,7 +52545,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -54464,7 +52562,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -54481,7 +52579,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -54496,7 +52594,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -54511,7 +52609,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -54526,7 +52624,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -54541,7 +52639,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -54556,7 +52654,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -54571,7 +52669,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -54586,7 +52684,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -54601,7 +52699,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 1, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -54616,7 +52714,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -54631,7 +52729,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 1, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -54646,7 +52744,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -54661,7 +52759,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -54676,7 +52774,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 1, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -54691,7 +52789,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -54706,7 +52804,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 1, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -54721,7 +52819,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -54736,7 +52834,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -54751,7 +52849,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 1, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -54766,7 +52864,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -54781,7 +52879,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -54796,7 +52894,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 1, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -54811,7 +52909,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -54826,7 +52924,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -54841,7 +52939,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -54856,7 +52954,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -54871,7 +52969,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -54886,7 +52984,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -54901,7 +52999,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -54918,7 +53016,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -54933,7 +53031,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -54950,7 +53048,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -54965,7 +53063,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -54980,7 +53078,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -54995,7 +53093,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -55012,7 +53110,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -55029,7 +53127,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -55046,7 +53144,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -55065,7 +53163,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
@@ -55084,7 +53182,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -55101,7 +53199,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -55118,7 +53216,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -55137,7 +53235,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -55156,7 +53254,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -55171,7 +53269,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -55188,7 +53286,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -55203,7 +53301,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -55220,7 +53318,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -55235,7 +53333,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -55250,7 +53348,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -55265,7 +53363,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -55282,7 +53380,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -55297,7 +53395,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -55314,7 +53412,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -55329,7 +53427,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -55346,7 +53444,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -55361,7 +53459,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -55378,7 +53476,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -55393,7 +53491,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -55408,7 +53506,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -55423,13 +53521,13 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
{ "vextractf32x4", 0x19, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 0, 0,
0, 0, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -55438,7 +53536,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -55446,7 +53544,7 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } } } },
{ "vextracti32x4", 0x39, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 0, 0,
0, 0, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -55455,7 +53553,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -55472,7 +53570,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -55489,7 +53587,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -55506,7 +53604,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -55525,7 +53623,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -55546,7 +53644,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -55565,7 +53663,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -55586,7 +53684,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -55605,7 +53703,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -55626,7 +53724,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -55645,7 +53743,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -55666,7 +53764,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -55685,7 +53783,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -55706,7 +53804,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -55725,7 +53823,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -55746,7 +53844,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -55765,7 +53863,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -55786,7 +53884,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -55805,7 +53903,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -55826,7 +53924,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -55843,7 +53941,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -55862,7 +53960,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -55879,7 +53977,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -55898,7 +53996,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -55915,7 +54013,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -55934,7 +54032,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -55951,7 +54049,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -55970,7 +54068,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -55985,7 +54083,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -56002,7 +54100,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -56017,7 +54115,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -56034,7 +54132,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -56051,7 +54149,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -56070,7 +54168,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -56087,7 +54185,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -56106,7 +54204,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -56123,7 +54221,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -56142,7 +54240,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -56159,7 +54257,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -56178,7 +54276,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -56195,7 +54293,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -56214,7 +54312,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -56231,7 +54329,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -56250,7 +54348,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -56269,7 +54367,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -56288,7 +54386,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -56307,7 +54405,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -56326,7 +54424,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -56341,7 +54439,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -56356,7 +54454,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -56371,7 +54469,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -56386,7 +54484,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -56401,7 +54499,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -56416,7 +54514,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -56431,7 +54529,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -56446,7 +54544,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -56461,7 +54559,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -56478,7 +54576,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -56495,7 +54593,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -56512,7 +54610,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -56529,7 +54627,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -56546,7 +54644,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -56563,7 +54661,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -56580,7 +54678,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -56597,7 +54695,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -56616,7 +54714,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -56633,7 +54731,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -56650,7 +54748,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -56667,7 +54765,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -56684,7 +54782,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -56701,7 +54799,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -56720,7 +54818,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -56737,7 +54835,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -56754,7 +54852,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -56771,7 +54869,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -56788,7 +54886,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -56805,7 +54903,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -56822,7 +54920,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -56841,7 +54939,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -56858,7 +54956,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -56875,7 +54973,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -56892,7 +54990,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -56909,7 +55007,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -56926,7 +55024,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -56945,7 +55043,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -56962,7 +55060,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -56979,7 +55077,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -56996,7 +55094,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -57013,7 +55111,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -57030,7 +55128,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -57047,7 +55145,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -57064,7 +55162,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -57081,7 +55179,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -57098,7 +55196,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -57115,7 +55213,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 1, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -57130,7 +55228,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -57145,7 +55243,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -57160,7 +55258,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 1, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -57175,7 +55273,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -57190,7 +55288,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -57205,7 +55303,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 1, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -57220,7 +55318,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -57235,7 +55333,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -57250,7 +55348,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 1, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -57265,7 +55363,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -57280,7 +55378,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -57295,7 +55393,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 1, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -57310,7 +55408,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -57325,7 +55423,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -57340,7 +55438,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 1, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -57355,7 +55453,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -57370,7 +55468,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -57385,7 +55483,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 1, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -57400,7 +55498,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
@@ -57415,7 +55513,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -57430,7 +55528,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 1, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -57445,7 +55543,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
@@ -57460,7 +55558,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -57475,7 +55573,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 1, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -57490,7 +55588,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
@@ -57505,7 +55603,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -57520,7 +55618,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 1, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -57535,7 +55633,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -57550,7 +55648,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -57565,7 +55663,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 1, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -57580,7 +55678,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -57595,7 +55693,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -57610,7 +55708,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 1, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -57625,7 +55723,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -57640,7 +55738,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -57655,7 +55753,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 1, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -57670,7 +55768,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -57685,7 +55783,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -57700,7 +55798,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 1, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -57715,7 +55813,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -57730,7 +55828,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -57745,7 +55843,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 1, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -57760,7 +55858,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -57775,7 +55873,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -57790,7 +55888,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -57807,7 +55905,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -57824,7 +55922,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -57841,7 +55939,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -57858,7 +55956,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -57873,7 +55971,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -57888,7 +55986,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -57903,7 +56001,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -57918,7 +56016,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -57933,7 +56031,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -57948,13 +56046,13 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0 } },
+ 0, 1, 1, 1, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0 } } } },
+ 0, 1, 1, 1, 0, 0, 0 } } } },
{ "vpsraq", 0x72, 4, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 1, 1, 0, 0,
@@ -57965,30 +56063,13 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } } } },
- { "vpsraq", 0xe2, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 1, 0, 0,
- 0, 2, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 },
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
- { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
- { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } } } },
{ "vrcp14sd", 0x4d, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 1, 0, 0,
@@ -57999,7 +56080,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -58016,7 +56097,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -58033,7 +56114,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -58050,7 +56131,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -58067,7 +56148,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -58086,7 +56167,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -58105,7 +56186,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -58124,7 +56205,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -58143,7 +56224,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -58158,7 +56239,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -58173,7 +56254,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -58188,7 +56269,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -58203,7 +56284,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -58218,7 +56299,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -58233,7 +56314,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -58248,7 +56329,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -58265,7 +56346,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -58280,7 +56361,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -58297,7 +56378,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -58312,7 +56393,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -58329,7 +56410,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -58344,7 +56425,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -58361,7 +56442,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -58376,7 +56457,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -58393,7 +56474,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -58408,7 +56489,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -58425,7 +56506,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -58442,7 +56523,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -58461,7 +56542,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -58478,7 +56559,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -58497,7 +56578,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -58514,7 +56595,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -58533,7 +56614,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -58550,7 +56631,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -58569,7 +56650,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "vgatherpf0qpd", 0xc7, 1, 1,
@@ -58582,7 +56663,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "vgatherpf1dpd", 0xc6, 2, 1,
@@ -58595,7 +56676,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "vgatherpf1qpd", 0xc7, 2, 1,
@@ -58608,7 +56689,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "vscatterpf0dpd", 0xc6, 5, 1,
@@ -58621,7 +56702,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "vscatterpf0qpd", 0xc7, 5, 1,
@@ -58634,7 +56715,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "vscatterpf1dpd", 0xc6, 6, 1,
@@ -58647,7 +56728,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "vscatterpf1qpd", 0xc7, 6, 1,
@@ -58660,7 +56741,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "vgatherpf0dps", 0xc6, 1, 1,
@@ -58673,7 +56754,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "vgatherpf0qps", 0xc7, 1, 1,
@@ -58686,7 +56767,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "vgatherpf1dps", 0xc6, 2, 1,
@@ -58699,7 +56780,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "vgatherpf1qps", 0xc7, 2, 1,
@@ -58712,7 +56793,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "vscatterpf0dps", 0xc6, 5, 1,
@@ -58725,7 +56806,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "vscatterpf0qps", 0xc7, 5, 1,
@@ -58738,7 +56819,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "vscatterpf1dps", 0xc6, 6, 1,
@@ -58751,7 +56832,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "vscatterpf1qps", 0xc7, 6, 1,
@@ -58764,7 +56845,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "prefetchwt1", 0x0d, 2, 1,
@@ -58774,10 +56855,10 @@ const insn_template i386_optab[] =
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "clflushopt", 0xae, 7, 1,
@@ -58787,10 +56868,10 @@ const insn_template i386_optab[] =
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "xrstors", 0xc7, 3, 1,
@@ -58800,10 +56881,10 @@ const insn_template i386_optab[] =
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "xrstors64", 0xc7, 3, 1,
@@ -58813,10 +56894,10 @@ const insn_template i386_optab[] =
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "xsaves", 0xc7, 5, 1,
@@ -58826,10 +56907,10 @@ const insn_template i386_optab[] =
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "xsaves64", 0xc7, 5, 1,
@@ -58839,10 +56920,10 @@ const insn_template i386_optab[] =
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "xsavec", 0xc7, 4, 1,
@@ -58852,10 +56933,10 @@ const insn_template i386_optab[] =
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "xsavec64", 0xc7, 4, 1,
@@ -58865,10 +56946,10 @@ const insn_template i386_optab[] =
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "encls", 0x01cf, None, 0,
@@ -58878,10 +56959,10 @@ const insn_template i386_optab[] =
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "enclu", 0x01d7, None, 0,
@@ -58891,10 +56972,10 @@ const insn_template i386_optab[] =
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "enclv", 0x01c0, None, 0,
@@ -58904,10 +56985,10 @@ const insn_template i386_optab[] =
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "vcvtpd2udqx", 0x79, None, 2,
@@ -58920,7 +57001,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -58935,7 +57016,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -58950,7 +57031,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -58965,7 +57046,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -58980,7 +57061,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -58997,7 +57078,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -59014,7 +57095,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -59031,7 +57112,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -59046,7 +57127,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -59061,7 +57142,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -59076,7 +57157,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -59091,7 +57172,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -59108,7 +57189,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -59123,7 +57204,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -59138,7 +57219,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -59155,7 +57236,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -59172,7 +57253,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -59189,7 +57270,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -59206,7 +57287,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -59223,7 +57304,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -59238,7 +57319,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -59253,7 +57334,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0 } },
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -59268,7 +57349,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -59283,7 +57364,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -59300,7 +57381,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -59315,7 +57396,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -59330,7 +57411,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -59347,7 +57428,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -59364,7 +57445,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -59381,7 +57462,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -59398,7 +57479,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -59415,7 +57496,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -59432,7 +57513,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -59449,7 +57530,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -59466,7 +57547,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -59485,7 +57566,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -59500,7 +57581,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -59515,7 +57596,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -59532,7 +57613,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -59549,7 +57630,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -59566,7 +57647,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -59583,7 +57664,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -59600,7 +57681,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -59617,7 +57698,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -59634,7 +57715,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -59651,7 +57732,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -59670,7 +57751,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -59687,7 +57768,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -59704,7 +57785,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -59721,7 +57802,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -59738,7 +57819,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -59755,7 +57836,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -59774,7 +57855,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -59791,7 +57872,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -59808,7 +57889,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -59825,7 +57906,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -59842,7 +57923,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -59859,7 +57940,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -59876,7 +57957,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -59895,7 +57976,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -59912,7 +57993,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -59929,7 +58010,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -59946,7 +58027,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -59963,7 +58044,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -59980,7 +58061,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -59999,7 +58080,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -60016,7 +58097,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -60033,7 +58114,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -60050,7 +58131,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -60067,7 +58148,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -60084,7 +58165,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -60101,7 +58182,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } },
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -60116,7 +58197,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } },
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -60131,7 +58212,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -60146,7 +58227,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -60161,7 +58242,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 1, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -60176,7 +58257,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -60191,7 +58272,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -60206,7 +58287,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 1, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -60221,7 +58302,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -60236,7 +58317,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -60251,7 +58332,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 1, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -60266,7 +58347,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -60281,7 +58362,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -60296,7 +58377,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -60313,7 +58394,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -60330,7 +58411,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -60347,7 +58428,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -60364,7 +58445,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -60381,7 +58462,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -60398,7 +58479,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -60415,7 +58496,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -60430,7 +58511,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0,
@@ -60445,7 +58526,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -60460,7 +58541,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -60475,7 +58556,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -60492,7 +58573,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -60507,7 +58588,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -60522,7 +58603,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -60539,7 +58620,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -60556,7 +58637,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -60573,7 +58654,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -60588,7 +58669,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -60605,7 +58686,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -60622,7 +58703,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -60637,7 +58718,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -60652,7 +58733,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -60667,7 +58748,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -60682,7 +58763,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -60697,7 +58778,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -60712,7 +58793,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -60727,7 +58808,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -60744,7 +58825,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -60759,7 +58840,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -60776,7 +58857,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -60791,7 +58872,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -60808,7 +58889,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -60823,7 +58904,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -60838,7 +58919,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -60853,7 +58934,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -60870,7 +58951,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -60885,7 +58966,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -60900,7 +58981,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -60915,7 +58996,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -60932,7 +59013,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -60947,7 +59028,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -60964,7 +59045,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -60979,7 +59060,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -60996,7 +59077,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -61011,7 +59092,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -61026,7 +59107,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -61041,7 +59122,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -61056,7 +59137,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -61071,7 +59152,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -61088,7 +59169,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -61103,7 +59184,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -61120,7 +59201,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -61135,7 +59216,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -61152,7 +59233,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -61167,7 +59248,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -61182,7 +59263,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -61197,7 +59278,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -61214,7 +59295,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -61229,7 +59310,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -61244,7 +59325,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -61259,7 +59340,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -61276,7 +59357,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -61291,7 +59372,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -61306,7 +59387,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -61321,7 +59402,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -61336,7 +59417,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -61353,7 +59434,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -61370,7 +59451,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -61389,7 +59470,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -61408,7 +59489,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -61425,7 +59506,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -61442,7 +59523,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -61459,7 +59540,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -61476,7 +59557,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -61495,7 +59576,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -61514,7 +59595,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -61531,7 +59612,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -61548,7 +59629,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -61565,7 +59646,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -61582,7 +59663,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -61599,7 +59680,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -61616,7 +59697,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -61633,7 +59714,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -61650,7 +59731,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -61667,7 +59748,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -61684,7 +59765,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } },
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -61699,7 +59780,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } },
{ { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -61714,7 +59795,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -61729,7 +59810,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -61744,7 +59825,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -61761,7 +59842,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -61780,7 +59861,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -61801,7 +59882,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -61818,7 +59899,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -61837,7 +59918,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -61856,7 +59937,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -61877,7 +59958,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -61894,7 +59975,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -61913,7 +59994,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -61932,7 +60013,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -61953,7 +60034,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -61972,7 +60053,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -61993,7 +60074,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -62012,7 +60093,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -62033,7 +60114,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -62052,7 +60133,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -62070,10 +60151,10 @@ const insn_template i386_optab[] =
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "vpmadd52huq", 0xb5, None, 3,
@@ -62083,10 +60164,10 @@ const insn_template i386_optab[] =
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -62100,10 +60181,10 @@ const insn_template i386_optab[] =
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -62117,10 +60198,10 @@ const insn_template i386_optab[] =
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -62134,10 +60215,10 @@ const insn_template i386_optab[] =
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -62151,10 +60232,10 @@ const insn_template i386_optab[] =
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -62168,10 +60249,10 @@ const insn_template i386_optab[] =
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -62185,10 +60266,10 @@ const insn_template i386_optab[] =
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -62202,10 +60283,10 @@ const insn_template i386_optab[] =
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -62219,10 +60300,10 @@ const insn_template i386_optab[] =
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -62236,10 +60317,10 @@ const insn_template i386_optab[] =
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -62254,9 +60335,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -62271,9 +60352,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -62288,9 +60369,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -62303,9 +60384,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -62318,9 +60399,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -62333,9 +60414,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -62348,9 +60429,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -62363,9 +60444,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -62378,9 +60459,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -62395,9 +60476,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -62412,9 +60493,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -62429,9 +60510,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -62446,9 +60527,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -62463,9 +60544,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -62480,9 +60561,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -62499,9 +60580,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -62518,9 +60599,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -62537,9 +60618,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -62556,9 +60637,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -62575,9 +60656,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -62594,9 +60675,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -62611,9 +60692,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -62628,9 +60709,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -62645,9 +60726,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -62662,9 +60743,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -62679,9 +60760,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -62696,9 +60777,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -62713,9 +60794,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -62730,9 +60811,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -62745,9 +60826,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -62760,9 +60841,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -62778,8 +60859,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "invlpgb", 0x01fe, None, 3,
@@ -62791,8 +60872,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0 } },
{ { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
@@ -62809,7 +60890,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0 } },
+ 1, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "clzero", 0x01fc, None, 0,
@@ -62820,9 +60901,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "clzero", 0x01fc, None, 1,
@@ -62833,9 +60914,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "monitorx", 0x01fa, None, 0,
@@ -62846,9 +60927,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "monitorx", 0x01fa, None, 3,
@@ -62859,9 +60940,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
@@ -62876,9 +60957,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
@@ -62893,9 +60974,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "mwaitx", 0x01fb, None, 3,
@@ -62906,9 +60987,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -62923,9 +61004,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "wrpkru", 0x01ef, None, 0,
@@ -62936,9 +61017,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "rdpid", 0xc7, 7, 1,
@@ -62949,9 +61030,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "rdpid", 0xc7, 7, 1,
@@ -62962,9 +61043,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "ptwrite", 0xae, 4, 1,
@@ -62975,9 +61056,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
+ 0, 0, 0, 1, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "ptwrite", 0xae, 4, 1,
@@ -62988,9 +61069,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "incsspd", 0xae, 5, 1,
@@ -63001,9 +61082,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "incsspq", 0xae, 5, 1,
@@ -63014,9 +61095,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "rdsspd", 0x1e, 1, 1,
@@ -63027,9 +61108,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "rdsspq", 0x1e, 1, 1,
@@ -63040,9 +61121,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "saveprevssp", 0x01ea, None, 0,
@@ -63053,9 +61134,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "rstorssp", 0x01, 5, 1,
@@ -63066,9 +61147,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "wrssd", 0xf6, None, 2,
@@ -63079,9 +61160,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -63094,9 +61175,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -63109,9 +61190,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
@@ -63124,9 +61205,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1,
@@ -63139,9 +61220,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "clrssbsy", 0xae, 6, 1,
@@ -63152,9 +61233,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "endbr64", 0x1efa, None, 0,
@@ -63165,9 +61246,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "endbr32", 0x1efb, None, 0,
@@ -63178,9 +61259,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "notrack", 0x3e, None, 0,
@@ -63191,9 +61272,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "wbnoinvd", 0x09, None, 0,
@@ -63205,8 +61286,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "pconfig", 0x01c5, None, 0,
@@ -63218,8 +61299,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "umonitor", 0xae, 6, 1,
@@ -63231,8 +61312,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "tpause", 0xae, 6, 1,
@@ -63244,8 +61325,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "tpause", 0xae, 6, 3,
@@ -63257,8 +61338,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
@@ -63274,8 +61355,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "umwait", 0xae, 6, 3,
@@ -63287,8 +61368,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
@@ -63304,8 +61385,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "movdiri", 0xf9, None, 2,
@@ -63317,8 +61398,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
@@ -63332,8 +61413,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
@@ -63346,9 +61427,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -63363,9 +61444,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -63378,9 +61459,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -63393,9 +61474,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -63408,9 +61489,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -63423,9 +61504,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -63438,9 +61519,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -63456,8 +61537,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
@@ -63471,8 +61552,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
@@ -63485,9 +61566,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -63502,9 +61583,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -63520,8 +61601,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "psmash", 0x01ff, None, 0,
@@ -63534,7 +61615,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0 } },
+ 0, 1, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "psmash", 0x01ff, None, 1,
@@ -63547,7 +61628,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0 } },
+ 0, 1, 1, 0, 0 } },
{ { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "pvalidate", 0x01ff, None, 0,
@@ -63560,7 +61641,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0 } },
+ 0, 1, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "pvalidate", 0x01ff, None, 3,
@@ -63573,7 +61654,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0 } },
+ 0, 1, 0, 0, 0 } },
{ { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
@@ -63590,7 +61671,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0 } },
+ 0, 1, 0, 0, 0 } },
{ { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "rmpupdate", 0x01fe, None, 0,
@@ -63603,7 +61684,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0 } },
+ 0, 1, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "rmpupdate", 0x01fe, None, 2,
@@ -63616,7 +61697,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0 } },
+ 0, 1, 1, 0, 0 } },
{ { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
@@ -63631,7 +61712,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0 } },
+ 0, 1, 1, 0, 0 } },
{ { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "rmpadjust", 0x01fe, None, 0,
@@ -63644,7 +61725,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0 } },
+ 0, 1, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "rmpadjust", 0x01fe, None, 3,
@@ -63657,7 +61738,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0 } },
+ 0, 1, 1, 0, 0 } },
{ { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
@@ -63674,7 +61755,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0 } },
+ 0, 1, 1, 0, 0 } },
{ { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "rdpru", 0x01fd, None, 0,
@@ -63686,8 +61767,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "serialize", 0x01e8, None, 0,
@@ -63699,8 +61780,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "xsusldtrk", 0x01e8, None, 0,
@@ -63712,8 +61793,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "xresldtrk", 0x01e9, None, 0,
@@ -63725,8 +61806,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "ldtilecfg", 0x49, None, 1,
@@ -63737,9 +61818,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "sttilecfg", 0x49, None, 1,
@@ -63750,9 +61831,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "tdpbf16ps", 0x5c, None, 3,
@@ -63763,9 +61844,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 1, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -63780,9 +61861,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 1, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -63797,9 +61878,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 1, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -63814,9 +61895,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 1, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -63831,9 +61912,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 1, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -63848,9 +61929,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -63863,9 +61944,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -63878,9 +61959,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 1, 0, 0 } },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -63893,9 +61974,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "tilezero", 0x49, None, 1,
@@ -63906,9 +61987,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 1, 0, 0 } } } },
{ "loadiwkey", 0xdc, None, 2,
@@ -63920,8 +62001,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -63935,8 +62016,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
@@ -63950,8 +62031,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
@@ -63965,8 +62046,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -63980,8 +62061,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -63995,8 +62076,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -64010,8 +62091,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -64025,8 +62106,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "aesdecwide128kl", 0xd8, 1, 1,
@@ -64038,8 +62119,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "aesencwide256kl", 0xd8, 2, 1,
@@ -64051,8 +62132,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "aesdecwide256kl", 0xd8, 3, 1,
@@ -64064,8 +62145,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } } } },
{ "tdcall", 0x01cc, None, 0,
@@ -64076,9 +62157,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "seamret", 0x01cd, None, 0,
@@ -64089,9 +62170,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "seamops", 0x01ce, None, 0,
@@ -64102,9 +62183,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "seamcall", 0x01cf, None, 0,
@@ -64115,9 +62196,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "uiret", 0x01ec, None, 0,
@@ -64129,8 +62210,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "clui", 0x01ee, None, 0,
@@ -64142,8 +62223,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "stui", 0x01ef, None, 0,
@@ -64155,8 +62236,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "testui", 0x01ed, None, 0,
@@ -64168,8 +62249,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "senduipi", 0xc7, 6, 1,
@@ -64181,8 +62262,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "hreset", 0xf0c0, None, 1,
@@ -64194,8 +62275,8 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } },
{ "vaddph", 0x58, None, 3,
@@ -64206,9 +62287,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -64223,9 +62304,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -64242,9 +62323,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -64259,9 +62340,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -64278,9 +62359,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -64295,9 +62376,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -64314,9 +62395,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -64331,9 +62412,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -64350,9 +62431,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -64367,9 +62448,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -64386,9 +62467,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -64403,9 +62484,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -64422,9 +62503,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -64439,9 +62520,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -64458,9 +62539,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -64475,9 +62556,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -64494,9 +62575,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -64511,9 +62592,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -64530,9 +62611,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -64547,9 +62628,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -64566,9 +62647,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -64583,9 +62664,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -64602,9 +62683,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -64619,9 +62700,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -64638,9 +62719,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -64655,9 +62736,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -64674,9 +62755,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -64691,9 +62772,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -64710,9 +62791,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -64727,9 +62808,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -64746,9 +62827,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -64763,9 +62844,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -64782,9 +62863,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -64799,9 +62880,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -64818,9 +62899,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -64835,9 +62916,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -64854,9 +62935,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -64871,9 +62952,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -64890,9 +62971,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -64907,9 +62988,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -64926,9 +63007,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -64943,9 +63024,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -64962,9 +63043,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -64979,9 +63060,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -64998,9 +63079,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -65015,9 +63096,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -65034,9 +63115,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -65051,9 +63132,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -65070,9 +63151,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -65087,9 +63168,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -65106,9 +63187,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -65123,9 +63204,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -65142,9 +63223,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -65159,9 +63240,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -65178,9 +63259,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -65195,9 +63276,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -65214,9 +63295,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -65231,9 +63312,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -65250,9 +63331,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -65267,9 +63348,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -65286,9 +63367,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -65303,9 +63384,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -65322,9 +63403,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -65339,9 +63420,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -65358,9 +63439,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -65375,9 +63456,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -65394,9 +63475,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -65411,9 +63492,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -65430,9 +63511,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -65447,9 +63528,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -65466,9 +63547,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -65483,9 +63564,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -65502,9 +63583,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -65519,9 +63600,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -65538,9 +63619,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -65555,9 +63636,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -65574,9 +63655,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -65591,9 +63672,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -65610,9 +63691,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -65627,9 +63708,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -65646,9 +63727,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -65663,9 +63744,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -65682,9 +63763,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -65699,9 +63780,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -65718,9 +63799,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -65735,9 +63816,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -65754,9 +63835,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -65771,9 +63852,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -65790,9 +63871,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -65807,9 +63888,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -65826,9 +63907,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -65843,9 +63924,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -65862,9 +63943,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -65879,9 +63960,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -65898,9 +63979,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -65915,9 +63996,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -65934,9 +64015,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -65951,9 +64032,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -65970,9 +64051,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -65987,9 +64068,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -66006,9 +64087,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -66023,9 +64104,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -66042,9 +64123,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -66059,9 +64140,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -66078,9 +64159,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -66095,9 +64176,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -66114,9 +64195,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -66131,9 +64212,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -66150,9 +64231,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -66167,9 +64248,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -66186,9 +64267,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -66203,9 +64284,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -66222,9 +64303,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
@@ -66241,9 +64322,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -66257,14 +64338,14 @@ const insn_template i386_optab[] =
{ "vcmpeqsh", 0xc2, 0x00, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -66274,14 +64355,14 @@ const insn_template i386_optab[] =
{ "vcmpeqsh", 0xc2, 0x00, 4,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -66293,14 +64374,14 @@ const insn_template i386_optab[] =
{ "vcmpeq_oqsh", 0xc2, 0x00, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -66310,14 +64391,14 @@ const insn_template i386_optab[] =
{ "vcmpeq_oqsh", 0xc2, 0x00, 4,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -66329,14 +64410,14 @@ const insn_template i386_optab[] =
{ "vcmpltsh", 0xc2, 0x01, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -66346,14 +64427,14 @@ const insn_template i386_optab[] =
{ "vcmpltsh", 0xc2, 0x01, 4,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -66365,14 +64446,14 @@ const insn_template i386_optab[] =
{ "vcmplt_ossh", 0xc2, 0x01, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -66382,14 +64463,14 @@ const insn_template i386_optab[] =
{ "vcmplt_ossh", 0xc2, 0x01, 4,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -66401,14 +64482,14 @@ const insn_template i386_optab[] =
{ "vcmplesh", 0xc2, 0x02, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -66418,14 +64499,14 @@ const insn_template i386_optab[] =
{ "vcmplesh", 0xc2, 0x02, 4,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -66437,14 +64518,14 @@ const insn_template i386_optab[] =
{ "vcmple_ossh", 0xc2, 0x02, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -66454,14 +64535,14 @@ const insn_template i386_optab[] =
{ "vcmple_ossh", 0xc2, 0x02, 4,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -66473,14 +64554,14 @@ const insn_template i386_optab[] =
{ "vcmpunordsh", 0xc2, 0x03, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -66490,14 +64571,14 @@ const insn_template i386_optab[] =
{ "vcmpunordsh", 0xc2, 0x03, 4,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -66509,14 +64590,14 @@ const insn_template i386_optab[] =
{ "vcmpunord_qsh", 0xc2, 0x03, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -66526,14 +64607,14 @@ const insn_template i386_optab[] =
{ "vcmpunord_qsh", 0xc2, 0x03, 4,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -66545,14 +64626,14 @@ const insn_template i386_optab[] =
{ "vcmpneqsh", 0xc2, 0x04, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -66562,14 +64643,14 @@ const insn_template i386_optab[] =
{ "vcmpneqsh", 0xc2, 0x04, 4,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -66581,14 +64662,14 @@ const insn_template i386_optab[] =
{ "vcmpneq_uqsh", 0xc2, 0x04, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -66598,14 +64679,14 @@ const insn_template i386_optab[] =
{ "vcmpneq_uqsh", 0xc2, 0x04, 4,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -66617,14 +64698,14 @@ const insn_template i386_optab[] =
{ "vcmpnltsh", 0xc2, 0x05, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -66634,14 +64715,14 @@ const insn_template i386_optab[] =
{ "vcmpnltsh", 0xc2, 0x05, 4,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -66653,14 +64734,14 @@ const insn_template i386_optab[] =
{ "vcmpnlt_ussh", 0xc2, 0x05, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -66670,14 +64751,14 @@ const insn_template i386_optab[] =
{ "vcmpnlt_ussh", 0xc2, 0x05, 4,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -66689,14 +64770,14 @@ const insn_template i386_optab[] =
{ "vcmpnlesh", 0xc2, 0x06, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -66706,14 +64787,14 @@ const insn_template i386_optab[] =
{ "vcmpnlesh", 0xc2, 0x06, 4,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -66725,14 +64806,14 @@ const insn_template i386_optab[] =
{ "vcmpnle_ussh", 0xc2, 0x06, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -66742,14 +64823,14 @@ const insn_template i386_optab[] =
{ "vcmpnle_ussh", 0xc2, 0x06, 4,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -66761,14 +64842,14 @@ const insn_template i386_optab[] =
{ "vcmpordsh", 0xc2, 0x07, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -66778,14 +64859,14 @@ const insn_template i386_optab[] =
{ "vcmpordsh", 0xc2, 0x07, 4,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -66797,14 +64878,14 @@ const insn_template i386_optab[] =
{ "vcmpord_qsh", 0xc2, 0x07, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -66814,14 +64895,14 @@ const insn_template i386_optab[] =
{ "vcmpord_qsh", 0xc2, 0x07, 4,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -66833,14 +64914,14 @@ const insn_template i386_optab[] =
{ "vcmpeq_uqsh", 0xc2, 0x08, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -66850,14 +64931,14 @@ const insn_template i386_optab[] =
{ "vcmpeq_uqsh", 0xc2, 0x08, 4,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -66869,14 +64950,14 @@ const insn_template i386_optab[] =
{ "vcmpngesh", 0xc2, 0x09, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -66886,14 +64967,14 @@ const insn_template i386_optab[] =
{ "vcmpngesh", 0xc2, 0x09, 4,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -66905,14 +64986,14 @@ const insn_template i386_optab[] =
{ "vcmpnge_ussh", 0xc2, 0x09, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -66922,14 +65003,14 @@ const insn_template i386_optab[] =
{ "vcmpnge_ussh", 0xc2, 0x09, 4,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -66941,14 +65022,14 @@ const insn_template i386_optab[] =
{ "vcmpngtsh", 0xc2, 0x0a, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -66958,14 +65039,14 @@ const insn_template i386_optab[] =
{ "vcmpngtsh", 0xc2, 0x0a, 4,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -66977,14 +65058,14 @@ const insn_template i386_optab[] =
{ "vcmpngt_ussh", 0xc2, 0x0a, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -66994,14 +65075,14 @@ const insn_template i386_optab[] =
{ "vcmpngt_ussh", 0xc2, 0x0a, 4,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -67013,14 +65094,14 @@ const insn_template i386_optab[] =
{ "vcmpfalsesh", 0xc2, 0x0b, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -67030,14 +65111,14 @@ const insn_template i386_optab[] =
{ "vcmpfalsesh", 0xc2, 0x0b, 4,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -67049,14 +65130,14 @@ const insn_template i386_optab[] =
{ "vcmpfalse_oqsh", 0xc2, 0x0b, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -67066,14 +65147,14 @@ const insn_template i386_optab[] =
{ "vcmpfalse_oqsh", 0xc2, 0x0b, 4,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -67085,14 +65166,14 @@ const insn_template i386_optab[] =
{ "vcmpneq_oqsh", 0xc2, 0x0c, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -67102,14 +65183,14 @@ const insn_template i386_optab[] =
{ "vcmpneq_oqsh", 0xc2, 0x0c, 4,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -67121,14 +65202,14 @@ const insn_template i386_optab[] =
{ "vcmpgesh", 0xc2, 0x0d, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -67138,14 +65219,14 @@ const insn_template i386_optab[] =
{ "vcmpgesh", 0xc2, 0x0d, 4,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -67157,14 +65238,14 @@ const insn_template i386_optab[] =
{ "vcmpge_ossh", 0xc2, 0x0d, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -67174,14 +65255,14 @@ const insn_template i386_optab[] =
{ "vcmpge_ossh", 0xc2, 0x0d, 4,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -67193,14 +65274,14 @@ const insn_template i386_optab[] =
{ "vcmpgtsh", 0xc2, 0x0e, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -67210,14 +65291,14 @@ const insn_template i386_optab[] =
{ "vcmpgtsh", 0xc2, 0x0e, 4,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -67229,14 +65310,14 @@ const insn_template i386_optab[] =
{ "vcmpgt_ossh", 0xc2, 0x0e, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -67246,14 +65327,14 @@ const insn_template i386_optab[] =
{ "vcmpgt_ossh", 0xc2, 0x0e, 4,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -67265,14 +65346,14 @@ const insn_template i386_optab[] =
{ "vcmptruesh", 0xc2, 0x0f, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -67282,14 +65363,14 @@ const insn_template i386_optab[] =
{ "vcmptruesh", 0xc2, 0x0f, 4,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -67301,14 +65382,14 @@ const insn_template i386_optab[] =
{ "vcmptrue_uqsh", 0xc2, 0x0f, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -67318,14 +65399,14 @@ const insn_template i386_optab[] =
{ "vcmptrue_uqsh", 0xc2, 0x0f, 4,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -67337,14 +65418,14 @@ const insn_template i386_optab[] =
{ "vcmpeq_ossh", 0xc2, 0x10, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -67354,14 +65435,14 @@ const insn_template i386_optab[] =
{ "vcmpeq_ossh", 0xc2, 0x10, 4,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -67373,14 +65454,14 @@ const insn_template i386_optab[] =
{ "vcmplt_oqsh", 0xc2, 0x11, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -67390,14 +65471,14 @@ const insn_template i386_optab[] =
{ "vcmplt_oqsh", 0xc2, 0x11, 4,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -67409,14 +65490,14 @@ const insn_template i386_optab[] =
{ "vcmple_oqsh", 0xc2, 0x12, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -67426,14 +65507,14 @@ const insn_template i386_optab[] =
{ "vcmple_oqsh", 0xc2, 0x12, 4,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -67445,14 +65526,14 @@ const insn_template i386_optab[] =
{ "vcmpunord_ssh", 0xc2, 0x13, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -67462,14 +65543,14 @@ const insn_template i386_optab[] =
{ "vcmpunord_ssh", 0xc2, 0x13, 4,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -67481,14 +65562,14 @@ const insn_template i386_optab[] =
{ "vcmpneq_ussh", 0xc2, 0x14, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -67498,14 +65579,14 @@ const insn_template i386_optab[] =
{ "vcmpneq_ussh", 0xc2, 0x14, 4,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -67517,14 +65598,14 @@ const insn_template i386_optab[] =
{ "vcmpnlt_uqsh", 0xc2, 0x15, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -67534,14 +65615,14 @@ const insn_template i386_optab[] =
{ "vcmpnlt_uqsh", 0xc2, 0x15, 4,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -67553,14 +65634,14 @@ const insn_template i386_optab[] =
{ "vcmpnle_uqsh", 0xc2, 0x16, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -67570,14 +65651,14 @@ const insn_template i386_optab[] =
{ "vcmpnle_uqsh", 0xc2, 0x16, 4,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -67589,14 +65670,14 @@ const insn_template i386_optab[] =
{ "vcmpord_ssh", 0xc2, 0x17, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -67606,14 +65687,14 @@ const insn_template i386_optab[] =
{ "vcmpord_ssh", 0xc2, 0x17, 4,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -67625,14 +65706,14 @@ const insn_template i386_optab[] =
{ "vcmpeq_ussh", 0xc2, 0x18, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -67642,14 +65723,14 @@ const insn_template i386_optab[] =
{ "vcmpeq_ussh", 0xc2, 0x18, 4,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -67661,14 +65742,14 @@ const insn_template i386_optab[] =
{ "vcmpnge_uqsh", 0xc2, 0x19, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -67678,14 +65759,14 @@ const insn_template i386_optab[] =
{ "vcmpnge_uqsh", 0xc2, 0x19, 4,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -67697,14 +65778,14 @@ const insn_template i386_optab[] =
{ "vcmpngt_uqsh", 0xc2, 0x1a, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -67714,14 +65795,14 @@ const insn_template i386_optab[] =
{ "vcmpngt_uqsh", 0xc2, 0x1a, 4,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -67733,14 +65814,14 @@ const insn_template i386_optab[] =
{ "vcmpfalse_ossh", 0xc2, 0x1b, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -67750,14 +65831,14 @@ const insn_template i386_optab[] =
{ "vcmpfalse_ossh", 0xc2, 0x1b, 4,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -67769,14 +65850,14 @@ const insn_template i386_optab[] =
{ "vcmpneq_ossh", 0xc2, 0x1c, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -67786,14 +65867,14 @@ const insn_template i386_optab[] =
{ "vcmpneq_ossh", 0xc2, 0x1c, 4,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -67805,14 +65886,14 @@ const insn_template i386_optab[] =
{ "vcmpge_oqsh", 0xc2, 0x1d, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -67822,14 +65903,14 @@ const insn_template i386_optab[] =
{ "vcmpge_oqsh", 0xc2, 0x1d, 4,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -67841,14 +65922,14 @@ const insn_template i386_optab[] =
{ "vcmpgt_oqsh", 0xc2, 0x1e, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -67858,14 +65939,14 @@ const insn_template i386_optab[] =
{ "vcmpgt_oqsh", 0xc2, 0x1e, 4,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -67877,14 +65958,14 @@ const insn_template i386_optab[] =
{ "vcmptrue_ussh", 0xc2, 0x1f, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -67894,14 +65975,14 @@ const insn_template i386_optab[] =
{ "vcmptrue_ussh", 0xc2, 0x1f, 4,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -67913,14 +65994,14 @@ const insn_template i386_optab[] =
{ "vcmpsh", 0xc2, None, 4,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
@@ -67932,14 +66013,14 @@ const insn_template i386_optab[] =
{ "vcmpsh", 0xc2, None, 5,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0,
- 0, 2, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -67958,9 +66039,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -67973,9 +66054,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -67990,9 +66071,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68005,9 +66086,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68022,9 +66103,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68037,9 +66118,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68052,9 +66133,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68069,9 +66150,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68084,9 +66165,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68099,9 +66180,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68114,9 +66195,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68129,9 +66210,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68146,9 +66227,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68161,9 +66242,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68176,9 +66257,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68191,9 +66272,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68208,9 +66289,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68223,9 +66304,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68238,9 +66319,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68253,9 +66334,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68268,9 +66349,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68285,9 +66366,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68300,9 +66381,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68315,9 +66396,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68330,9 +66411,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 1, 1, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68345,9 +66426,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68362,9 +66443,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68377,9 +66458,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68392,9 +66473,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68407,9 +66488,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68422,9 +66503,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68437,9 +66518,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68454,9 +66535,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68469,9 +66550,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68484,9 +66565,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68499,9 +66580,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68516,9 +66597,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68531,9 +66612,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68548,9 +66629,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68563,9 +66644,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68578,9 +66659,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 0, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68593,9 +66674,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68610,9 +66691,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68625,9 +66706,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68640,9 +66721,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 0, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68655,9 +66736,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68672,9 +66753,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68687,9 +66768,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68702,9 +66783,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68717,9 +66798,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68734,9 +66815,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68749,9 +66830,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68764,9 +66845,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68779,9 +66860,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68796,9 +66877,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68811,9 +66892,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68826,9 +66907,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68841,9 +66922,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68858,9 +66939,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68873,9 +66954,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68890,9 +66971,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68905,9 +66986,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68922,9 +67003,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68939,9 +67020,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68958,9 +67039,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68975,9 +67056,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -68994,9 +67075,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -69011,9 +67092,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -69028,9 +67109,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -69047,9 +67128,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -69066,9 +67147,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -69083,9 +67164,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -69100,9 +67181,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -69119,9 +67200,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -69138,9 +67219,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -69155,9 +67236,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -69174,9 +67255,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -69191,9 +67272,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -69210,9 +67291,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -69225,9 +67306,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -69242,9 +67323,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -69257,9 +67338,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -69274,9 +67355,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -69289,9 +67370,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -69304,9 +67385,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 0, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -69319,9 +67400,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -69336,9 +67417,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -69351,9 +67432,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -69366,9 +67447,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 0, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -69381,9 +67462,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -69398,9 +67479,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -69413,9 +67494,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -69428,9 +67509,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -69443,9 +67524,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -69460,9 +67541,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -69475,9 +67556,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -69490,9 +67571,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -69505,9 +67586,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -69522,9 +67603,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -69537,9 +67618,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -69552,9 +67633,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 0, 1, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -69567,9 +67648,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -69584,9 +67665,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -69599,9 +67680,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -69616,9 +67697,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -69631,9 +67712,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -69648,9 +67729,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -69663,9 +67744,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -69680,9 +67761,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
@@ -69695,9 +67776,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -69712,9 +67793,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -69729,9 +67810,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -69748,9 +67829,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -69765,9 +67846,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -69784,9 +67865,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -69801,9 +67882,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -69820,9 +67901,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -69837,9 +67918,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -69856,9 +67937,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -69873,9 +67954,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -69892,9 +67973,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -69909,9 +67990,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -69928,9 +68009,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -69945,9 +68026,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -69964,9 +68045,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -69981,9 +68062,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -70000,9 +68081,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -70017,9 +68098,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -70036,9 +68117,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -70053,9 +68134,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -70072,9 +68153,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -70089,9 +68170,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -70108,9 +68189,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -70125,9 +68206,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -70144,9 +68225,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -70161,9 +68242,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -70180,9 +68261,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -70197,9 +68278,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -70216,9 +68297,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -70233,9 +68314,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -70252,9 +68333,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -70269,9 +68350,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -70288,9 +68369,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -70305,9 +68386,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -70324,9 +68405,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -70341,9 +68422,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -70360,9 +68441,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -70377,9 +68458,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -70396,9 +68477,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -70413,9 +68494,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -70432,9 +68513,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -70449,9 +68530,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -70468,9 +68549,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -70485,9 +68566,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -70504,9 +68585,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -70521,9 +68602,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -70540,9 +68621,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -70557,9 +68638,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -70576,9 +68657,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -70593,9 +68674,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -70612,9 +68693,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -70629,9 +68710,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -70648,9 +68729,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -70665,9 +68746,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -70684,9 +68765,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -70701,9 +68782,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -70720,9 +68801,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -70737,9 +68818,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -70756,9 +68837,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -70773,9 +68854,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -70792,9 +68873,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -70809,9 +68890,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -70828,9 +68909,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -70845,9 +68926,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -70857,16 +68938,16 @@ const insn_template i386_optab[] =
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } } } },
{ "vfpclassph", 0x66, None, 3,
- { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0,
0, 0, 2, 2, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
@@ -70881,9 +68962,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -70898,9 +68979,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -70915,9 +68996,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
@@ -70927,14 +69008,14 @@ const insn_template i386_optab[] =
{ "vfpclasssh", 0x67, None, 3,
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0,
- 0, 2, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+ 0, 4, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
@@ -70949,9 +69030,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
@@ -70966,9 +69047,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -70985,9 +69066,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
@@ -71004,9 +69085,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -71025,9 +69106,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -71042,9 +69123,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -71061,9 +69142,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -71078,9 +69159,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -71097,9 +69178,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -71114,9 +69195,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -71133,9 +69214,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -71150,9 +69231,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -71169,9 +69250,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -71184,9 +69265,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -71201,9 +69282,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -71216,9 +69297,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
@@ -71231,9 +69312,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -71246,9 +69327,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -71263,9 +69344,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -71280,9 +69361,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -71299,9 +69380,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -71316,9 +69397,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -71335,9 +69416,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -71352,9 +69433,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -71371,9 +69452,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
@@ -71388,9 +69469,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -71407,9 +69488,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
@@ -71426,9 +69507,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -71447,9 +69528,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
@@ -71464,9 +69545,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -71483,9 +69564,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
@@ -71502,9 +69583,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -71523,9 +69604,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -71538,9 +69619,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -71555,9 +69636,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -71570,9 +69651,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -71587,9 +69668,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -71604,9 +69685,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -71623,9 +69704,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -71640,9 +69721,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -71659,9 +69740,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -71674,9 +69755,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -71691,9 +69772,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -71708,9 +69789,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -71727,9 +69808,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 1, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -71744,9 +69825,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -71763,9 +69844,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -71780,9 +69861,9 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } },
{ { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -71801,7 +69882,7 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0 } },
+ 0, 0, 0, 0, 0 } },
{ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 } } } }
};
diff --git a/opcodes/loongarch-coder.c b/opcodes/loongarch-coder.c
index cb6d5648da0..f5e10b94e17 100644
--- a/opcodes/loongarch-coder.c
+++ b/opcodes/loongarch-coder.c
@@ -106,11 +106,13 @@ loongarch_decode_imm (const char *bit_field, insn_t insn, int si)
else if (*bit_field_1 == '+')
ret += atoi (bit_field_1 + 1);
+ /* Extend signed bit. */
if (si)
{
- ret <<= sizeof (ret) * 8 - len;
- ret >>= sizeof (ret) * 8 - len;
+ uint32_t sign = 1u << (len - 1);
+ ret = (ret ^ sign) - sign;
}
+
return ret;
}
@@ -133,7 +135,8 @@ loongarch_encode_imm (const char *bit_field, int32_t imm)
else if (*t == '+')
uimm -= atoi (t + 1);
- uimm <<= sizeof (uimm) * 8 - width;
+ uimm = width ? (uimm << (sizeof (uimm) * 8 - width)) : 0;
+
while (1)
{
b_start = strtol (bit_field_1, &bit_field_1, 10);
@@ -141,10 +144,10 @@ loongarch_encode_imm (const char *bit_field, int32_t imm)
break;
width = strtol (bit_field_1 + 1, &bit_field_1, 10);
i = uimm;
- i >>= sizeof (i) * 8 - width;
- i <<= b_start;
+ i = width ? (i >> (sizeof (i) * 8 - width)) : 0;
+ i = (b_start == 32) ? 0 : (i << b_start);
ret |= i;
- uimm <<= width;
+ uimm = (width == 32) ? 0 : (uimm << width);
if (*bit_field_1 != '|')
break;
@@ -375,13 +378,18 @@ char *
loongarch_expand_macro_with_format_map (
const char *format, const char *macro, const char *const arg_strs[],
const char *(*map) (char esc1, char esc2, const char *arg),
- char *(*helper) (const char *const arg_strs[], void *context), void *context)
+ char *(*helper) (const char *const arg_strs[], void *context), void *context,
+ size_t len_str)
{
char esc1s[MAX_ARG_NUM_PLUS_2 - 1], esc2s[MAX_ARG_NUM_PLUS_2 - 1];
const char *bit_fields[MAX_ARG_NUM_PLUS_2 - 1];
const char *src;
char *dest;
- char buffer[8192];
+
+ /* The expanded macro character length does not exceed 1000, and number of
+ label is 6 at most in the expanded macro. The len_str is the length of
+ str. */
+ char *buffer =(char *) malloc(1024 + 6 * len_str);
if (format)
loongarch_parse_format (format, esc1s, esc2s, bit_fields);
@@ -419,17 +427,17 @@ loongarch_expand_macro_with_format_map (
*dest++ = *src++;
*dest = '\0';
- return strdup (buffer);
+ return buffer;
}
char *
loongarch_expand_macro (const char *macro, const char *const arg_strs[],
char *(*helper) (const char *const arg_strs[],
void *context),
- void *context)
+ void *context, size_t len_str)
{
return loongarch_expand_macro_with_format_map (NULL, macro, arg_strs, I,
- helper, context);
+ helper, context, len_str);
}
size_t
diff --git a/opcodes/mep-dis.c b/opcodes/mep-dis.c
index 188ee298202..c56e90dcc6f 100644
--- a/opcodes/mep-dis.c
+++ b/opcodes/mep-dis.c
@@ -647,12 +647,15 @@ mep_print_insn (CGEN_CPU_DESC cd, bfd_vma pc, disassemble_info *info)
if (info->section && info->section->owner)
{
bfd *abfd = info->section->owner;
- mep_config_index = abfd->tdata.elf_obj_data->elf_header->e_flags & EF_MEP_INDEX_MASK;
- /* This instantly redefines MEP_CONFIG, MEP_OMASK, .... MEP_VLIW64 */
+ if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
+ {
+ mep_config_index = abfd->tdata.elf_obj_data->elf_header->e_flags & EF_MEP_INDEX_MASK;
+ /* This instantly redefines MEP_CONFIG, MEP_OMASK, .... MEP_VLIW64 */
- cop_type = abfd->tdata.elf_obj_data->elf_header->e_flags & EF_MEP_COP_MASK;
- if (cop_type == EF_MEP_COP_IVC2)
- ivc2 = 1;
+ cop_type = abfd->tdata.elf_obj_data->elf_header->e_flags & EF_MEP_COP_MASK;
+ if (cop_type == EF_MEP_COP_IVC2)
+ ivc2 = 1;
+ }
}
/* Picking the right ISA bitmask for the current context is tricky. */
diff --git a/opcodes/microblaze-opc.h b/opcodes/microblaze-opc.h
index 81bf2e19548..ffb0f08c692 100644
--- a/opcodes/microblaze-opc.h
+++ b/opcodes/microblaze-opc.h
@@ -268,7 +268,7 @@ const struct op_code_struct
{"fcmp.un", INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x58000200, OPCODE_MASK_H4, fcmp_un, arithmetic_inst },
{"flt", INST_TYPE_RD_R1, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x58000280, OPCODE_MASK_H4, flt, arithmetic_inst },
{"fint", INST_TYPE_RD_R1, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x58000300, OPCODE_MASK_H4, fint, arithmetic_inst },
- {"fsqrt", INST_TYPE_RD_R1, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x58000380, OPCODE_MASK_H4, fsqrt, arithmetic_inst },
+ {"fsqrt", INST_TYPE_RD_R1, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x58000380, OPCODE_MASK_H4, microblaze_fsqrt, arithmetic_inst },
{"tget", INST_TYPE_RD_RFSL, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C001000, OPCODE_MASK_H32, tget, anyware_inst },
{"tcget", INST_TYPE_RD_RFSL, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C003000, OPCODE_MASK_H32, tcget, anyware_inst },
{"tnget", INST_TYPE_RD_RFSL, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C005000, OPCODE_MASK_H32, tnget, anyware_inst },
diff --git a/opcodes/microblaze-opcm.h b/opcodes/microblaze-opcm.h
index 1b0955c4e0f..8e293465fec 100644
--- a/opcodes/microblaze-opcm.h
+++ b/opcodes/microblaze-opcm.h
@@ -42,7 +42,8 @@ enum microblaze_instr
shr, sw, swr, swx, lbui, lhui, lwi,
sbi, shi, swi, msrset, msrclr, tuqula, mbi_fadd, frsub, mbi_fmul, mbi_fdiv,
fcmp_lt, fcmp_eq, fcmp_le, fcmp_gt, fcmp_ne, fcmp_ge, fcmp_un, flt,
- fint, fsqrt,
+ /* 'fsqrt' is a glibc:math.h symbol. */
+ fint, microblaze_fsqrt,
tget, tcget, tnget, tncget, tput, tcput, tnput, tncput,
eget, ecget, neget, necget, eput, ecput, neput, necput,
teget, tecget, tneget, tnecget, teput, tecput, tneput, tnecput,
diff --git a/opcodes/micromips-opc.c b/opcodes/micromips-opc.c
index b0109b03319..9393e22be5b 100644
--- a/opcodes/micromips-opc.c
+++ b/opcodes/micromips-opc.c
@@ -373,7 +373,7 @@ const struct mips_opcode micromips_opcodes[] =
{"bc2tl", "p", 0, (int) M_BC2TL, INSN_MACRO, 0, I1, 0, 0 },
{"bc2tl", "N,p", 0, (int) M_BC2TL, INSN_MACRO, 0, I1, 0, 0 },
{"beqz", "md,mE", 0x8c00, 0xfc00, RD_1|CBD, 0, I1, 0, 0 },
-{"beqz", "s,p", 0x94000000, 0xffe00000, RD_1|CBD, 0, I1, 0, 0 },
+{"beqz", "s,p", 0x94000000, 0xffe00000, RD_1|CBD, INSN2_ALIAS, I1, 0, 0 },
{"beqzl", "s,p", 0, (int) M_BEQL, INSN_MACRO, 0, I1, 0, 0 },
{"beq", "md,mz,mE", 0x8c00, 0xfc00, RD_1|CBD, 0, I1, 0, 0 }, /* beqz */
{"beq", "mz,md,mE", 0x8c00, 0xfc00, RD_2|CBD, 0, I1, 0, 0 }, /* beqz */
@@ -431,7 +431,7 @@ const struct mips_opcode micromips_opcodes[] =
{"bltzals", "s,p", 0x42200000, 0xffe00000, RD_1|WR_31|CBD, BD16, I1, 0, 0 },
{"bltzall", "s,p", 0, (int) M_BLTZALL, INSN_MACRO, 0, I1, 0, 0 },
{"bnez", "md,mE", 0xac00, 0xfc00, RD_1|CBD, 0, I1, 0, 0 },
-{"bnez", "s,p", 0xb4000000, 0xffe00000, RD_1|CBD, 0, I1, 0, 0 },
+{"bnez", "s,p", 0xb4000000, 0xffe00000, RD_1|CBD, INSN2_ALIAS, I1, 0, 0 },
{"bnezl", "s,p", 0, (int) M_BNEL, INSN_MACRO, 0, I1, 0, 0 },
{"bne", "md,mz,mE", 0xac00, 0xfc00, RD_1|CBD, 0, I1, 0, 0 }, /* bnez */
{"bne", "mz,md,mE", 0xac00, 0xfc00, RD_2|CBD, 0, I1, 0, 0 }, /* bnez */
diff --git a/opcodes/mips-opc.c b/opcodes/mips-opc.c
index 0f596d5d43b..329bdc628cb 100644
--- a/opcodes/mips-opc.c
+++ b/opcodes/mips-opc.c
@@ -460,7 +460,8 @@ const struct mips_opcode mips_builtin_opcodes[] =
{"move", "d,s", 0x00000021, 0xfc1f07ff, WR_1|RD_2, INSN2_ALIAS, I1, 0, 0 },/* addu */
{"b", "p", 0x10000000, 0xffff0000, UBD, INSN2_ALIAS, I1, 0, 0 },/* beq 0,0 */
{"b", "p", 0x04010000, 0xffff0000, UBD, INSN2_ALIAS, I1, 0, 0 },/* bgez 0 */
-{"bal", "p", 0x04110000, 0xffff0000, WR_31|UBD, INSN2_ALIAS, I1, 0, 0 },/* bgezal 0*/
+{"bal", "p", 0x04110000, 0xffff0000, WR_31|UBD, INSN2_ALIAS, I1, 0, I37 }, /* bgezal 0 */
+{"bal", "p", 0x04110000, 0xffff0000, WR_31|UBD, 0, I37, 0, 0 },
{"bc", "+'", 0xc8000000, 0xfc000000, NODS, 0, I37, 0, 0 },
{"balc", "+'", 0xe8000000, 0xfc000000, WR_31|NODS, 0, I37, 0, 0 },
{"lapc", "s,-A", 0xec000000, 0xfc180000, WR_1, RD_pc, I37, 0, 0 },
@@ -733,8 +734,8 @@ const struct mips_opcode mips_builtin_opcodes[] =
{"bc1tl", "N,p", 0x45030000, 0xffe30000, RD_CC|CBL|FP_S, 0, I4_32, 0, I37 },
/* bc2* are at the bottom of the table. */
/* bc3* are at the bottom of the table. */
-{"beqz", "s,p", 0x10000000, 0xfc1f0000, RD_1|CBD, 0, I1, 0, 0 },
-{"beqzl", "s,p", 0x50000000, 0xfc1f0000, RD_1|CBL, 0, I2|T3, 0, I37 },
+{"beqz", "s,p", 0x10000000, 0xfc1f0000, RD_1|CBD, INSN2_ALIAS, I1, 0, 0 },
+{"beqzl", "s,p", 0x50000000, 0xfc1f0000, RD_1|CBL, INSN2_ALIAS, I2|T3, 0, I37 },
{"beq", "s,t,p", 0x10000000, 0xfc000000, RD_1|RD_2|CBD, 0, I1, 0, 0 },
{"beq", "s,I,p", 0, (int) M_BEQ_I, INSN_MACRO, 0, I1, 0, 0 },
{"beql", "s,t,p", 0x50000000, 0xfc000000, RD_1|RD_2|CBL, 0, I2|T3, 0, I37 },
@@ -784,8 +785,8 @@ const struct mips_opcode mips_builtin_opcodes[] =
{"bltzal", "s,p", 0x04100000, 0xfc1f0000, RD_1|WR_31|CBD, 0, I1, 0, I37 },
{"nal", "", 0x04100000, 0xffffffff, WR_31|CBD, 0, I1, 0, 0 }, /* bltzal 0,.+4 */
{"bltzall", "s,p", 0x04120000, 0xfc1f0000, RD_1|WR_31|CBL, 0, I2|T3, 0, I37 },
-{"bnez", "s,p", 0x14000000, 0xfc1f0000, RD_1|CBD, 0, I1, 0, 0 },
-{"bnezl", "s,p", 0x54000000, 0xfc1f0000, RD_1|CBL, 0, I2|T3, 0, I37 },
+{"bnez", "s,p", 0x14000000, 0xfc1f0000, RD_1|CBD, INSN2_ALIAS, I1, 0, 0 },
+{"bnezl", "s,p", 0x54000000, 0xfc1f0000, RD_1|CBL, INSN2_ALIAS, I2|T3, 0, I37 },
{"bne", "s,t,p", 0x14000000, 0xfc000000, RD_1|RD_2|CBD, 0, I1, 0, 0 },
{"bne", "s,I,p", 0, (int) M_BNE_I, INSN_MACRO, 0, I1, 0, 0 },
{"bnel", "s,t,p", 0x54000000, 0xfc000000, RD_1|RD_2|CBL, 0, I2|T3, 0, I37 },
diff --git a/opcodes/po/de.po b/opcodes/po/de.po
index f657534aff4..056f3511074 100644
--- a/opcodes/po/de.po
+++ b/opcodes/po/de.po
@@ -2,23 +2,24 @@
# Copyright (C) 2002 Free Software Foundation, Inc.
# This file is distributed under the same license as the binutils package.
# Martin v. Löwis <martin@v.loewis.de>, 2002.
-# Roland Illig <roland.illig@gmx.de>, 2004-2021.
+# Roland Illig <roland.illig@gmx.de>, 2004-2022.
#
msgid ""
msgstr ""
-"Project-Id-Version: opcodes 2.36.90\n"
-"Report-Msgid-Bugs-To: bug-binutils@gnu.org\n"
-"POT-Creation-Date: 2021-07-03 15:02+0100\n"
-"PO-Revision-Date: 2021-07-04 11:24+0200\n"
+"Project-Id-Version: opcodes 2.37.90\n"
+"Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n"
+"POT-Creation-Date: 2022-01-22 12:21+0000\n"
+"PO-Revision-Date: 2022-01-23 15:09+0100\n"
"Last-Translator: Roland Illig <roland.illig@gmx.de>\n"
"Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Bugs: Report translation errors to the Language-Team address.\n"
-"X-Generator: Poedit 3.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"X-Generator: Poedit 3.0.1\n"
+"X-Poedit-Bookmarks: -1,64,-1,-1,-1,-1,-1,-1,-1,-1\n"
#: aarch64-asm.c:821
msgid "specified register cannot be read from"
@@ -29,12 +30,22 @@ msgid "specified register cannot be written to"
msgstr "In das angegebene Register kann nicht geschrieben werden"
#. Invalid option.
-#: aarch64-dis.c:94 arc-dis.c:802 arm-dis.c:11652
+#: aarch64-dis.c:94 arc-dis.c:802 arm-dis.c:11670
#, c-format
msgid "unrecognised disassembler option: %s"
msgstr "Unbekannte Disassembler-Option: %s"
-#: aarch64-dis.c:3589
+#: aarch64-dis.c:3395
+#, c-format
+msgid "this `%s' should have an immediately preceding `%s'"
+msgstr "dieses »%s« sollte ein unmittelbar vorangehendes »%s« haben"
+
+#: aarch64-dis.c:3402
+#, c-format
+msgid "expected `%s' after previous `%s'"
+msgstr "»%s« nach vorherigem »%s« erwartet"
+
+#: aarch64-dis.c:3806
#, c-format
msgid ""
"\n"
@@ -46,7 +57,7 @@ msgstr ""
"mit dem Schalter »-M« unterstützt (mehrere Optionen sollten durch\n"
"Kommata getrennt werden):\n"
-#: aarch64-dis.c:3593
+#: aarch64-dis.c:3810
#, c-format
msgid ""
"\n"
@@ -55,7 +66,7 @@ msgstr ""
"\n"
" no-aliases Befehls-Aliase nicht ausgeben.\n"
-#: aarch64-dis.c:3596
+#: aarch64-dis.c:3813
#, c-format
msgid ""
"\n"
@@ -64,7 +75,7 @@ msgstr ""
"\n"
" aliases Befehls-Aliase ausgeben.\n"
-#: aarch64-dis.c:3599
+#: aarch64-dis.c:3816
#, c-format
msgid ""
"\n"
@@ -73,7 +84,7 @@ msgstr ""
"\n"
" no-notes Befehls-Hinweise nicht ausgeben.\n"
-#: aarch64-dis.c:3602
+#: aarch64-dis.c:3819
#, c-format
msgid ""
"\n"
@@ -82,7 +93,7 @@ msgstr ""
"\n"
" notes Befehls-Hinweise ausgeben.\n"
-#: aarch64-dis.c:3606
+#: aarch64-dis.c:3823
#, c-format
msgid ""
"\n"
@@ -91,265 +102,281 @@ msgstr ""
"\n"
" debug_dump Temporärer Schalter für Debugspuren.\n"
-#: aarch64-dis.c:3610 arc-dis.c:1551 arc-dis.c:1572 arc-dis.c:1575
-#: mips-dis.c:2807 mips-dis.c:2817 mips-dis.c:2820 nfp-dis.c:2981
-#: riscv-dis.c:655
+#: aarch64-dis.c:3827 arc-dis.c:1551 arc-dis.c:1572 arc-dis.c:1575
+#: loongarch-dis.c:306 mips-dis.c:2807 mips-dis.c:2817 mips-dis.c:2820
+#: nfp-dis.c:2993 riscv-dis.c:1140 riscv-dis.c:1143
#, c-format
msgid "\n"
msgstr "\n"
-#: aarch64-opc.c:1350
+#: aarch64-opc.c:1365
msgid "immediate value"
msgstr "Direktwert"
-#: aarch64-opc.c:1360
+#: aarch64-opc.c:1375
msgid "immediate offset"
msgstr "Direkter Offset"
-#: aarch64-opc.c:1370
+#: aarch64-opc.c:1385
msgid "register number"
msgstr "Registernummer"
-#: aarch64-opc.c:1380
+#: aarch64-opc.c:1395
msgid "register element index"
msgstr "Register-Elementindex"
-#: aarch64-opc.c:1390
+#: aarch64-opc.c:1405
msgid "shift amount"
msgstr "Schiebeanzahl"
-#: aarch64-opc.c:1402
+#: aarch64-opc.c:1417
msgid "multiplier"
msgstr "Multiplikator"
-#: aarch64-opc.c:1475
+#: aarch64-opc.c:1491
msgid "reg pair must start from even reg"
msgstr "Registerpaar muss mit geradem Register anfangen"
-#: aarch64-opc.c:1481
+#: aarch64-opc.c:1497
msgid "reg pair must be contiguous"
msgstr "Registerpaar muss zusammenhängend sein"
-#: aarch64-opc.c:1495
+#: aarch64-opc.c:1511
msgid "extraneous register"
msgstr "Irrelevantes Register"
-#: aarch64-opc.c:1501
+#: aarch64-opc.c:1517
msgid "missing register"
msgstr "Fehlendes Register"
-#: aarch64-opc.c:1512
+#: aarch64-opc.c:1528
msgid "stack pointer register expected"
msgstr "Stackpointer-Register erwartet"
-#: aarch64-opc.c:1537
+#: aarch64-opc.c:1553
msgid "z0-z15 expected"
msgstr "z0-z15 erwartet"
-#: aarch64-opc.c:1538
+#: aarch64-opc.c:1554
msgid "z0-z7 expected"
msgstr "z0-z7 erwartet"
-#: aarch64-opc.c:1564
+#: aarch64-opc.c:1580
msgid "invalid register list"
msgstr "Ungültige Registerliste"
-#: aarch64-opc.c:1578
+#: aarch64-opc.c:1594
msgid "p0-p7 expected"
msgstr "p0-p7 erwartet"
-#: aarch64-opc.c:1604 aarch64-opc.c:1612
+#: aarch64-opc.c:1620 aarch64-opc.c:1628
msgid "unexpected address writeback"
msgstr "Unerwartetes Adressen-Zurückschreiben"
-#: aarch64-opc.c:1623
+#: aarch64-opc.c:1639
msgid "address writeback expected"
msgstr "Adressen-Zurückschreiben erwartet"
-#: aarch64-opc.c:1670
+#: aarch64-opc.c:1686
msgid "negative or unaligned offset expected"
msgstr "Negativer oder unausgerichteter Offset erwartet"
-#: aarch64-opc.c:1727
+#: aarch64-opc.c:1743
msgid "invalid register offset"
msgstr "Ungültiger Register-Offset"
-#: aarch64-opc.c:1749
+#: aarch64-opc.c:1765
msgid "invalid post-increment amount"
msgstr "Nicht erlaubte Anzahl im Post-Inkrement"
-#: aarch64-opc.c:1765 aarch64-opc.c:2274
+#: aarch64-opc.c:1781 aarch64-opc.c:2299
msgid "invalid shift amount"
msgstr "Ungültige Schiebeanzahl"
-#: aarch64-opc.c:1778
+#: aarch64-opc.c:1794
msgid "invalid extend/shift operator"
msgstr "Nicht erlaubter Extend/Shift-Operator"
-#: aarch64-opc.c:1824 aarch64-opc.c:2076 aarch64-opc.c:2111 aarch64-opc.c:2130
-#: aarch64-opc.c:2138 aarch64-opc.c:2227 aarch64-opc.c:2404 aarch64-opc.c:2504
-#: aarch64-opc.c:2517
+#: aarch64-opc.c:1840 aarch64-opc.c:2101 aarch64-opc.c:2136 aarch64-opc.c:2155
+#: aarch64-opc.c:2163 aarch64-opc.c:2252 aarch64-opc.c:2429 aarch64-opc.c:2529
+#: aarch64-opc.c:2542
msgid "immediate out of range"
msgstr "Direktoperand außerhalb des gültigen Bereichs"
-#: aarch64-opc.c:1846 aarch64-opc.c:1888 aarch64-opc.c:1950 aarch64-opc.c:1984
+#: aarch64-opc.c:1870 aarch64-opc.c:1912 aarch64-opc.c:1975 aarch64-opc.c:2009
msgid "invalid addressing mode"
msgstr "Ungültiger Adressierungsmodus"
-#: aarch64-opc.c:1942
+#: aarch64-opc.c:1967
msgid "index register xzr is not allowed"
msgstr "Indexregister xzr ist nicht erlaubt"
-#: aarch64-opc.c:2064 aarch64-opc.c:2086 aarch64-opc.c:2307 aarch64-opc.c:2315
-#: aarch64-opc.c:2381 aarch64-opc.c:2410
+#: aarch64-opc.c:2089 aarch64-opc.c:2111 aarch64-opc.c:2332 aarch64-opc.c:2340
+#: aarch64-opc.c:2406 aarch64-opc.c:2435
msgid "invalid shift operator"
msgstr "Ungültiger Schiebeoperator"
-#: aarch64-opc.c:2070
+#: aarch64-opc.c:2095
msgid "shift amount must be 0 or 12"
msgstr "Schiebeanzahl muss 0 oder 12 sein"
-#: aarch64-opc.c:2093
+#: aarch64-opc.c:2118
msgid "shift amount must be a multiple of 16"
msgstr "Schiebeanzahl muss ein Vielfaches von 16 sein"
-#: aarch64-opc.c:2105
+#: aarch64-opc.c:2130
msgid "negative immediate value not allowed"
msgstr "Negativer Direktwert nicht erlaubt"
-#: aarch64-opc.c:2238
+#: aarch64-opc.c:2263
msgid "immediate zero expected"
msgstr "Direkte Null erwartet"
-#: aarch64-opc.c:2252
+#: aarch64-opc.c:2277
msgid "rotate expected to be 0, 90, 180 or 270"
msgstr "Rotation muss 0, 90, 180 oder 270 sein"
-#: aarch64-opc.c:2263
+#: aarch64-opc.c:2288
msgid "rotate expected to be 90 or 270"
msgstr "Rotation muss 90 oder 270 sein"
-#: aarch64-opc.c:2323
+#: aarch64-opc.c:2348
msgid "shift is not permitted"
msgstr "Schieben ist hier nicht erlaubt"
-#: aarch64-opc.c:2348
+#: aarch64-opc.c:2373
msgid "invalid value for immediate"
msgstr "Ungültiger Wert für Direktwert"
-#: aarch64-opc.c:2373
+#: aarch64-opc.c:2398
msgid "shift amount must be 0 or 16"
msgstr "Schiebeanzahl muss 0 oder 16 sein"
-#: aarch64-opc.c:2394
+#: aarch64-opc.c:2419
msgid "floating-point immediate expected"
msgstr "Gleitkomma-Direktwert erwartet"
-#: aarch64-opc.c:2428
+#: aarch64-opc.c:2453
msgid "no shift amount allowed for 8-bit constants"
msgstr "Schieben ist für 8-Bit-Konstanten nicht möglich"
-#: aarch64-opc.c:2438
+#: aarch64-opc.c:2463
msgid "shift amount must be 0 or 8"
msgstr "Schiebeanzahl muss 0 oder 8 sein"
-#: aarch64-opc.c:2451
+#: aarch64-opc.c:2476
msgid "immediate too big for element size"
msgstr "Direktwert ist zu groß für Elementgröße"
-#: aarch64-opc.c:2458
+#: aarch64-opc.c:2483
msgid "invalid arithmetic immediate"
msgstr "Ungültiger Wert für Direktwert"
-#: aarch64-opc.c:2472
+#: aarch64-opc.c:2497
msgid "floating-point value must be 0.5 or 1.0"
msgstr "Gleitkommazahl muss entweder 0.5 oder 1.0 sein"
-#: aarch64-opc.c:2482
+#: aarch64-opc.c:2507
msgid "floating-point value must be 0.5 or 2.0"
msgstr "Gleitkommazahl muss entweder 0.5 oder 2.0 sein"
-#: aarch64-opc.c:2492
+#: aarch64-opc.c:2517
msgid "floating-point value must be 0.0 or 1.0"
msgstr "Gleitkommazahl muss entweder 0.0 oder 1.0 sein"
-#: aarch64-opc.c:2523
+#: aarch64-opc.c:2548
msgid "invalid replicated MOV immediate"
msgstr "Ungültiger replizierter Direktwert für MOV"
-#: aarch64-opc.c:2644
+#: aarch64-opc.c:2656
msgid "extend operator expected"
msgstr "Extend-Operator erwartet"
-#: aarch64-opc.c:2657
+#: aarch64-opc.c:2669
msgid "missing extend operator"
msgstr "Extend-Operator fehlt"
-#: aarch64-opc.c:2663
+#: aarch64-opc.c:2675
msgid "'LSL' operator not allowed"
msgstr "LSL-Operator ist hier nicht erlaubt"
-#: aarch64-opc.c:2684
+#: aarch64-opc.c:2696
msgid "W register expected"
msgstr "W-Register erwartet"
-#: aarch64-opc.c:2695
+#: aarch64-opc.c:2707
msgid "shift operator expected"
msgstr "Schiebe-Operator erwartet"
-#: aarch64-opc.c:2702
+#: aarch64-opc.c:2714
msgid "'ROR' operator not allowed"
msgstr "ROR-Operator ist hier nicht erlaubt"
-#: aarch64-opc.c:3722
+#: aarch64-opc.c:3852
msgid "reading from a write-only register"
msgstr "Versuch, ein lesegeschütztes Register auszulesen"
-#: aarch64-opc.c:3724
+#: aarch64-opc.c:3854
msgid "writing to a read-only register"
msgstr "Versuch, ein schreibgeschütztes Register zu beschreiben"
-#: aarch64-opc.c:5165
+#: aarch64-opc.c:5445
+msgid "the three register operands must be distinct from one another"
+msgstr "Die drei Register-Operanden müssen verschieden sein"
+
+#: aarch64-opc.c:5556
+msgid "destination register differs from preceding instruction"
+msgstr "Zielregister unterscheidet sich von dem im vorangehenden Befehl"
+
+#: aarch64-opc.c:5559
+msgid "source register differs from preceding instruction"
+msgstr "Quellregister unterscheidet sich von dem im vorangehenden Befehl"
+
+#: aarch64-opc.c:5562
+msgid "size register differs from preceding instruction"
+msgstr "Größenregister unterscheidet sich von dem im vorangehenden Befehl"
+
+#: aarch64-opc.c:5610
msgid "instruction opens new dependency sequence without ending previous one"
msgstr "Der Befehl beginnt eine neue Abhängigkeitsfolge, ohne die vorherige zu beenden"
-#: aarch64-opc.c:5185
+#: aarch64-opc.c:5639
msgid "previous `movprfx' sequence not closed"
msgstr "Vorherige »movprfx«-Folge nicht beendet"
-#: aarch64-opc.c:5204
+#: aarch64-opc.c:5658
msgid "SVE instruction expected after `movprfx'"
msgstr "SVE-Befehl hinter »movprfx« erwartet"
-#: aarch64-opc.c:5217
+#: aarch64-opc.c:5671
msgid "SVE `movprfx' compatible instruction expected"
msgstr "Zu SVE-»movprfx« kompatibler Befehl erwartet"
-#: aarch64-opc.c:5304
+#: aarch64-opc.c:5759
msgid "predicated instruction expected after `movprfx'"
msgstr "Bedingter Befehl nach »movprfx« erwartet"
-#: aarch64-opc.c:5316
+#: aarch64-opc.c:5771
msgid "merging predicate expected due to preceding `movprfx'"
msgstr "Zusammenführende Bedingung erwartet, aufgrund des vorangehenden »movprfx«"
-#: aarch64-opc.c:5328
+#: aarch64-opc.c:5783
msgid "predicate register differs from that in preceding `movprfx'"
msgstr "Bedingungsregister unterscheidet sich von dem im vorangehenden »movprfx«"
-#: aarch64-opc.c:5347
+#: aarch64-opc.c:5802
msgid "output register of preceding `movprfx' not used in current instruction"
msgstr "Ausgaberegister des vorangehenden »movprfx« wird in aktuellem Befehl nicht verwendet"
-#: aarch64-opc.c:5360
+#: aarch64-opc.c:5815
msgid "output register of preceding `movprfx' expected as output"
msgstr "Ausgaberegister des vorangehenden »movprfx« auch hier als Ausgabe erwartet"
-#: aarch64-opc.c:5372
+#: aarch64-opc.c:5827
msgid "output register of preceding `movprfx' used as input"
msgstr "Ausgaberegister des vorangehenden »movprfx« wird als Eingabe verwendet"
-#: aarch64-opc.c:5388
+#: aarch64-opc.c:5843
msgid "register size not compatible with previous `movprfx'"
msgstr "Registergröße nicht mit vorangehendem »movprfx« kompatibel"
@@ -443,7 +470,7 @@ msgstr ""
"mit dem Schalter »-M« unterstützt (mehrere Optionen sollten durch\n"
"Kommata getrennt werden):\n"
-#: arc-dis.c:1558 mips-dis.c:2812
+#: arc-dis.c:1558 mips-dis.c:2812 riscv-dis.c:1135
#, c-format
msgid ""
"\n"
@@ -624,67 +651,67 @@ msgstr "Wert muss im Bereich von 0 bis 31 liegen"
msgid "invalid position, should be one of: 0,4,8,...124."
msgstr "Ungültige Position; muss 0, 4, 8, ..., 124 sein."
-#: arm-dis.c:5187
+#: arm-dis.c:5204
msgid "Select raw register names"
msgstr "Rohe Registernamen auswählen"
-#: arm-dis.c:5189
+#: arm-dis.c:5206
msgid "Select register names used by GCC"
msgstr "Von GCC verwendete Registernamen auswählen"
-#: arm-dis.c:5191
+#: arm-dis.c:5208
msgid "Select register names used in ARM's ISA documentation"
msgstr "Von ARMs ISA-Dokumentation verwendete Registernamen verwenden"
-#: arm-dis.c:5193
+#: arm-dis.c:5210
msgid "Assume all insns are Thumb insns"
msgstr "Annnehmen, dass alle Befehle Thumb-Befehle sind"
-#: arm-dis.c:5194
+#: arm-dis.c:5211
msgid "Examine preceding label to determine an insn's type"
msgstr "Vorangehende Sprungmarke untersuchen, um die Befehlsart festzustellen"
-#: arm-dis.c:5195
+#: arm-dis.c:5212
msgid "Select register names used in the APCS"
msgstr "In APCS verwendete Registernamen auswählen"
-#: arm-dis.c:5197
+#: arm-dis.c:5214
msgid "Select register names used in the ATPCS"
msgstr "In ATPCS verwendete Registernamen auswählen"
-#: arm-dis.c:5199
+#: arm-dis.c:5216
msgid "Select special register names used in the ATPCS"
msgstr "Spezielle Registernamen für ATPCS auswählen"
-#: arm-dis.c:5201
+#: arm-dis.c:5218
msgid "Enable CDE extensions for coprocessor N space"
msgstr "CDE-Erweiterungen für Koprozessor-N-Raum aktivieren"
-#: arm-dis.c:8373
+#: arm-dis.c:8390
msgid "<illegal precision>"
msgstr "<ungültige Genauigkeit>"
-#: arm-dis.c:11613
+#: arm-dis.c:11631
#, c-format
msgid "unrecognised register name set: %s"
msgstr "Unbekannte Registernamensmenge: %s"
-#: arm-dis.c:11627
+#: arm-dis.c:11645
#, c-format
msgid "cde coprocessor not between 0-7: %s"
msgstr "CDE-Koprozessor muss zwischen 0 und 7 sein: %s"
-#: arm-dis.c:11633
+#: arm-dis.c:11651
#, c-format
msgid "coproc must have an argument: %s"
msgstr "»coproc« erfordert ein Argument: %s"
-#: arm-dis.c:11646
+#: arm-dis.c:11664
#, c-format
msgid "coprocN argument takes options \"generic\", \"cde\", or \"CDE\": %s"
msgstr "Das Argument für »coprocN« akzeptiert nur die Werte »generic«, »cde« oder »CDE«: %s"
-#: arm-dis.c:12357
+#: arm-dis.c:12374
#, c-format
msgid ""
"\n"
@@ -695,17 +722,17 @@ msgstr ""
"Die folgenden ARM-spezifischen Disassembleroptionen werden in Kombination\n"
"mit dem Schalter »-M« unterstützt:\n"
-#: avr-dis.c:115 avr-dis.c:136
+#: avr-dis.c:124 avr-dis.c:145
#, c-format
msgid "undefined"
msgstr "undefiniert"
-#: avr-dis.c:218
+#: avr-dis.c:236
#, c-format
msgid "internal disassembler error"
msgstr "internal disassembler error"
-#: avr-dis.c:272
+#: avr-dis.c:290
#, c-format
msgid "unknown constraint `%c'"
msgstr "Unbekannte Einschränkung »%c«"
@@ -793,17 +820,17 @@ msgstr "Falscher Befehl »%.50s...«"
msgid "bad instruction `%.50s'"
msgstr "Falscher Befehl »%.50s«"
-#: bpf-desc.c:1767
+#: bpf-desc.c:1768
#, c-format
msgid "internal error: bpf_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
msgstr "internal error: bpf_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
-#: bpf-desc.c:1855
+#: bpf-desc.c:1856
#, c-format
msgid "internal error: bpf_cgen_cpu_open: unsupported argument `%d'"
msgstr "internal error: bpf_cgen_cpu_open: unsupported argument `%d'"
-#: bpf-desc.c:1874
+#: bpf-desc.c:1875
#, c-format
msgid "internal error: bpf_cgen_cpu_open: no endianness specified"
msgstr "internal error: bpf_cgen_cpu_open: no endianness specified"
@@ -902,17 +929,17 @@ msgstr "internal error: unrecognized field %d while setting vma operand"
msgid "operand out of range (%lu not between %lu and %lu)"
msgstr "Operand außerhalb des gültigen Bereichs (%lu ist nicht zwischen %lu und %lu)"
-#: cris-desc.c:2621
+#: cris-desc.c:2622
#, c-format
msgid "internal error: cris_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
msgstr "internal error: cris_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
-#: cris-desc.c:2709
+#: cris-desc.c:2710
#, c-format
msgid "internal error: cris_cgen_cpu_open: unsupported argument `%d'"
msgstr "internal error: cris_cgen_cpu_open: unsupported argument `%d'"
-#: cris-desc.c:2728
+#: cris-desc.c:2729
#, c-format
msgid "internal error: cris_cgen_cpu_open: no endianness specified"
msgstr "internal error: cris_cgen_cpu_open: no endianness specified"
@@ -939,12 +966,12 @@ msgstr "Unbekannter Fehler %d\n"
msgid "Address 0x%s is out of bounds.\n"
msgstr "Adresse 0x%s ist außerhalb des gültigen Bereichs.\n"
-#: disassemble.c:848
+#: disassemble.c:859
#, c-format
msgid "assertion fail %s:%d"
msgstr "Assertion fehlgeschlagen: %s:%d"
-#: disassemble.c:849
+#: disassemble.c:860
msgid "Please report this bug"
msgstr "Bitte melden Sie diesen Fehler (auf Englisch, an https://www.sourceware.org/bugzilla/)"
@@ -983,17 +1010,17 @@ msgstr "ABBRUCH: Unbekannter Operand"
msgid "Not a pc-relative address."
msgstr "Das ist keine PC-relative Adresse."
-#: epiphany-desc.c:2109
+#: epiphany-desc.c:2110
#, c-format
msgid "internal error: epiphany_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
msgstr "internal error: epiphany_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
-#: epiphany-desc.c:2197
+#: epiphany-desc.c:2198
#, c-format
msgid "internal error: epiphany_cgen_cpu_open: unsupported argument `%d'"
msgstr "internal error: epiphany_cgen_cpu_open: unsupported argument `%d'"
-#: epiphany-desc.c:2216
+#: epiphany-desc.c:2217
#, c-format
msgid "internal error: epiphany_cgen_cpu_open: no endianness specified"
msgstr "internal error: epiphany_cgen_cpu_open: no endianness specified"
@@ -1014,17 +1041,17 @@ msgstr "Das Register muss zwischen r8 und r15 liegen"
msgid "Register list is not valid"
msgstr "Registerliste ist ungültig"
-#: fr30-desc.c:1586
+#: fr30-desc.c:1587
#, c-format
msgid "internal error: fr30_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
msgstr "internal error: fr30_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
-#: fr30-desc.c:1674
+#: fr30-desc.c:1675
#, c-format
msgid "internal error: fr30_cgen_cpu_open: unsupported argument `%d'"
msgstr "internal error: fr30_cgen_cpu_open: unsupported argument `%d'"
-#: fr30-desc.c:1693
+#: fr30-desc.c:1694
#, c-format
msgid "internal error: fr30_cgen_cpu_open: no endianness specified"
msgstr "internal error: fr30_cgen_cpu_open: no endianness specified"
@@ -1045,17 +1072,17 @@ msgstr "Wert des A-Operanden muss entweder 0 oder 1 sein"
msgid "register number must be even"
msgstr "Die Registernummer muss gerade sein"
-#: frv-desc.c:6326
+#: frv-desc.c:6327
#, c-format
msgid "internal error: frv_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
msgstr "internal error: frv_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
-#: frv-desc.c:6414
+#: frv-desc.c:6415
#, c-format
msgid "internal error: frv_cgen_cpu_open: unsupported argument `%d'"
msgstr "internal error: frv_cgen_cpu_open: unsupported argument `%d'"
-#: frv-desc.c:6433
+#: frv-desc.c:6434
#, c-format
msgid "internal error: frv_cgen_cpu_open: no endianness specified"
msgstr "internal error: frv_cgen_cpu_open: no endianness specified"
@@ -1085,11 +1112,11 @@ msgstr "Hmmmm 0x%x"
msgid "Don't understand 0x%x \n"
msgstr "Ich verstehe »0x%x« nicht.\n"
-#: i386-dis.c:8591
+#: i386-dis.c:8528
msgid "<internal disassembler error>"
msgstr "<interner Disassemblerfehler>"
-#: i386-dis.c:8900
+#: i386-dis.c:8802
#, c-format
msgid ""
"\n"
@@ -1101,32 +1128,32 @@ msgstr ""
"mit dem Schalter »-M« unterstützt (mehrere Optionen sollten durch\n"
"Kommata getrennt werden):\n"
-#: i386-dis.c:8904
+#: i386-dis.c:8806
#, c-format
msgid " x86-64 Disassemble in 64bit mode\n"
msgstr " x86-64 Im 64-Bit-Modus disassemblieren\n"
-#: i386-dis.c:8905
+#: i386-dis.c:8807
#, c-format
msgid " i386 Disassemble in 32bit mode\n"
msgstr " i386 Im 32-Bit-Modus disassemblieren\n"
-#: i386-dis.c:8906
+#: i386-dis.c:8808
#, c-format
msgid " i8086 Disassemble in 16bit mode\n"
msgstr " i8086 Im 16-Bit-Modus disassemblieren\n"
-#: i386-dis.c:8907
+#: i386-dis.c:8809
#, c-format
msgid " att Display instruction in AT&T syntax\n"
msgstr " att Maschinenbefehl in AT&T-syntax anzeigen\n"
-#: i386-dis.c:8908
+#: i386-dis.c:8810
#, c-format
msgid " intel Display instruction in Intel syntax\n"
msgstr " intel Maschinenbefehl in Intel-Syntax anzeigen\n"
-#: i386-dis.c:8909
+#: i386-dis.c:8811
#, c-format
msgid ""
" att-mnemonic\n"
@@ -1135,7 +1162,7 @@ msgstr ""
" att-mnemonic\n"
" Maschinenbefehl in AT&T-Mnemonic anzeigen\n"
-#: i386-dis.c:8911
+#: i386-dis.c:8813
#, c-format
msgid ""
" intel-mnemonic\n"
@@ -1144,136 +1171,136 @@ msgstr ""
" intel-mnemonic\n"
" Maschinenbefehl in Intel-Mnemonic anzeigen\n"
-#: i386-dis.c:8913
+#: i386-dis.c:8815
#, c-format
msgid " addr64 Assume 64bit address size\n"
msgstr " addr64 64-Bit-Adressgröße annehmen\n"
-#: i386-dis.c:8914
+#: i386-dis.c:8816
#, c-format
msgid " addr32 Assume 32bit address size\n"
msgstr " addr32 32-Bit-Adressgröße annehmen\n"
-#: i386-dis.c:8915
+#: i386-dis.c:8817
#, c-format
msgid " addr16 Assume 16bit address size\n"
msgstr " addr16 16-Bit-Adressgröße annehmen\n"
-#: i386-dis.c:8916
+#: i386-dis.c:8818
#, c-format
msgid " data32 Assume 32bit data size\n"
msgstr " data32 32-Bit-Datengröße annehmen\n"
-#: i386-dis.c:8917
+#: i386-dis.c:8819
#, c-format
msgid " data16 Assume 16bit data size\n"
msgstr " data16 16-Bit-Datengröße annehmen\n"
-#: i386-dis.c:8918
+#: i386-dis.c:8820
#, c-format
msgid " suffix Always display instruction suffix in AT&T syntax\n"
msgstr " suffix Maschinenbefehl-Suffix immer in AT&T-Syntax anzeigen\n"
-#: i386-dis.c:8919
+#: i386-dis.c:8821
#, c-format
msgid " amd64 Display instruction in AMD64 ISA\n"
msgstr " amd64 Maschinenbefehl in AMD64-ISA anzeigen\n"
-#: i386-dis.c:8920
+#: i386-dis.c:8822
#, c-format
msgid " intel64 Display instruction in Intel64 ISA\n"
msgstr " intel64 Maschinenbefehl in Intel64-ISA anzeigen\n"
-#: i386-dis.c:9484
+#: i386-dis.c:9402
msgid "64-bit address is disabled"
msgstr "64-Bit-Adresse ist deaktiviert"
-#: i386-gen.c:851
+#: i386-gen.c:856
#, c-format
msgid "%s: error: "
msgstr "%s: Fehler: "
-#: i386-gen.c:1007
+#: i386-gen.c:1012
#, c-format
msgid "%s: %d: unknown bitfield: %s\n"
msgstr "%s: %d: Unbekanntes Bitfeld: %s\n"
-#: i386-gen.c:1009
+#: i386-gen.c:1014
#, c-format
msgid "unknown bitfield: %s\n"
msgstr "Unbekanntes Bitfeld: %s\n"
-#: i386-gen.c:1072
+#: i386-gen.c:1077
#, c-format
msgid "%s: %d: missing `)' in bitfield: %s\n"
msgstr "%s: %d: Hier fehlt eine »)« im Bitfeld: %s\n"
-#: i386-gen.c:1173
+#: i386-gen.c:1178
#, c-format
msgid "unknown broadcast operand: %s\n"
msgstr "Unbekannter Broadcast-Operand: %s\n"
-#: i386-gen.c:1228
+#: i386-gen.c:1233
#, c-format
msgid "%s:%d: Conflicting opcode space specifications\n"
msgstr "%s:%d: Widersprüchliche Opcode-Space-Angaben\n"
-#: i386-gen.c:1232
+#: i386-gen.c:1237
#, c-format
msgid "%s:%d: Warning: redundant opcode space specification\n"
msgstr "%s:%d: Warnung: Redundante Opcode-Space-Angabe\n"
-#: i386-gen.c:1241
+#: i386-gen.c:1246
#, c-format
msgid "%s:%d: Conflicting prefix specifications\n"
msgstr "%s:%d: Widersprüchliche Präfix-Angaben\n"
-#: i386-gen.c:1245
+#: i386-gen.c:1250
#, c-format
msgid "%s:%d: Warning: redundant prefix specification\n"
msgstr "%s:%d: Warnung: Redundante Präfix-Angabe\n"
-#: i386-gen.c:1455
+#: i386-gen.c:1460
#, c-format
msgid "%s:%d: %s: unrecognized opcode encoding space\n"
msgstr "%s:%d: %s: nicht erkannter Opcode-Kodierungsraum\n"
-#: i386-gen.c:1461
+#: i386-gen.c:1466
#, c-format
msgid "%s:%d: %s: residual opcode (0x%0*llx) too large\n"
msgstr "%s:%d: %s: Restlicher Opcode (0x%0*llx) zu groß\n"
-#: i386-gen.c:1883
+#: i386-gen.c:1888
#, c-format
msgid "can't find i386-reg.tbl for reading, errno = %s\n"
msgstr "Kann »i386-reg.tbl« nicht zum Lesen finden, errno = %s\n"
-#: i386-gen.c:1961
+#: i386-gen.c:1966
#, c-format
msgid "can't create i386-init.h, errno = %s\n"
msgstr "Kann i386-init.h nicht anlegen, errno = %s\n"
-#: i386-gen.c:2051 ia64-gen.c:2829
+#: i386-gen.c:2056 ia64-gen.c:2829
#, c-format
msgid "unable to change directory to \"%s\", errno = %s\n"
msgstr "Kann nicht in das Verzeichnis »%s« wechseln, errno = %s\n"
-#: i386-gen.c:2065 i386-gen.c:2070
+#: i386-gen.c:2070 i386-gen.c:2075
#, c-format
msgid "CpuMax != %d!\n"
msgstr "CpuMax != %d\n"
-#: i386-gen.c:2074
+#: i386-gen.c:2079
#, c-format
msgid "%d unused bits in i386_cpu_flags.\n"
msgstr "%d ungenutzte Bits in i386_cpu_flags.\n"
-#: i386-gen.c:2089
+#: i386-gen.c:2094
#, c-format
msgid "%d unused bits in i386_operand_type.\n"
msgstr "%d ungenutzte Bits in i386_operand_type.\n"
-#: i386-gen.c:2103
+#: i386-gen.c:2108
#, c-format
msgid "can't create i386-tbl.h, errno = %s\n"
msgstr "Kann i386-tbl.h nicht anlegen, errno = %s\n"
@@ -1444,17 +1471,17 @@ msgstr "Der Prozent-Operator ist kein Symbol"
msgid "Attempt to find bit index of 0"
msgstr "Versuch, ein gesetztes Bit von 0 zu bestimmen"
-#: ip2k-desc.c:1015
+#: ip2k-desc.c:1016
#, c-format
msgid "internal error: ip2k_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
msgstr "internal error: ip2k_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
-#: ip2k-desc.c:1103
+#: ip2k-desc.c:1104
#, c-format
msgid "internal error: ip2k_cgen_cpu_open: unsupported argument `%d'"
msgstr "internal error: ip2k_cgen_cpu_open: unsupported argument `%d'"
-#: ip2k-desc.c:1122
+#: ip2k-desc.c:1123
#, c-format
msgid "internal error: ip2k_cgen_cpu_open: no endianness specified"
msgstr "internal error: ip2k_cgen_cpu_open: no endianness specified"
@@ -1471,17 +1498,17 @@ msgstr "Direktoperand außerhalb des gültigen Bereichs"
msgid "21-bit offset out of range"
msgstr "21-Bit-Offset außerhalb des gültigen Bereichs"
-#: iq2000-desc.c:2020
+#: iq2000-desc.c:2021
#, c-format
msgid "internal error: iq2000_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
msgstr "internal error: iq2000_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
-#: iq2000-desc.c:2108
+#: iq2000-desc.c:2109
#, c-format
msgid "internal error: iq2000_cgen_cpu_open: unsupported argument `%d'"
msgstr "internal error: iq2000_cgen_cpu_open: unsupported argument `%d'"
-#: iq2000-desc.c:2127
+#: iq2000-desc.c:2128
#, c-format
msgid "internal error: iq2000_cgen_cpu_open: no endianness specified"
msgstr "internal error: iq2000_cgen_cpu_open: no endianness specified"
@@ -1502,21 +1529,42 @@ msgstr "Adresse relativ zu got erwartet: gotoffhi16(Symbol)"
msgid "expecting got relative address: gotofflo16(symbol)"
msgstr "Adresse relativ zu got erwartet: gotofflo16(Symbol)"
-#: lm32-desc.c:1002
+#: lm32-desc.c:1003
#, c-format
msgid "internal error: lm32_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
msgstr "internal error: lm32_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
-#: lm32-desc.c:1090
+#: lm32-desc.c:1091
#, c-format
msgid "internal error: lm32_cgen_cpu_open: unsupported argument `%d'"
msgstr "internal error: lm32_cgen_cpu_open: unsupported argument `%d'"
-#: lm32-desc.c:1109
+#: lm32-desc.c:1110
#, c-format
msgid "internal error: lm32_cgen_cpu_open: no endianness specified"
msgstr "internal error: lm32_cgen_cpu_open: no endianness specified"
+#: loongarch-dis.c:300
+#, c-format
+msgid ""
+"\n"
+"The following LoongArch disassembler options are supported for use\n"
+"with the -M switch (multiple options should be separated by commas):\n"
+msgstr ""
+"\n"
+"Die folgenden LoongArch-spezifischen Disassembleroptionen werden zusammen\n"
+"mit dem Schalter »-M« unterstützt (mehrere Optionen sollten durch\n"
+"Kommata getrennt werden):\n"
+
+#: loongarch-dis.c:304
+#, c-format
+msgid ""
+"\n"
+" numeric Print numeric register names, rather than ABI names.\n"
+msgstr ""
+"\n"
+" numeric Numerische Registernamen statt ABI-Namen ausgeben.\n"
+
#: m10200-dis.c:151 m10300-dis.c:574
#, c-format
msgid "unknown\t0x%04lx"
@@ -1601,32 +1649,32 @@ msgstr "Kein gültiges r0l/r0h-Paar"
msgid "Invalid size specifier"
msgstr "Ungültige Größenangabe"
-#: m32c-desc.c:63033
+#: m32c-desc.c:63034
#, c-format
msgid "internal error: m32c_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
msgstr "internal error: m32c_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
-#: m32c-desc.c:63121
+#: m32c-desc.c:63122
#, c-format
msgid "internal error: m32c_cgen_cpu_open: unsupported argument `%d'"
msgstr "internal error: m32c_cgen_cpu_open: unsupported argument `%d'"
-#: m32c-desc.c:63140
+#: m32c-desc.c:63141
#, c-format
msgid "internal error: m32c_cgen_cpu_open: no endianness specified"
msgstr "internal error: m32c_cgen_cpu_open: no endianness specified"
-#: m32r-desc.c:1365
+#: m32r-desc.c:1366
#, c-format
msgid "internal error: m32r_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
msgstr "internal error: m32r_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
-#: m32r-desc.c:1453
+#: m32r-desc.c:1454
#, c-format
msgid "internal error: m32r_cgen_cpu_open: unsupported argument `%d'"
msgstr "internal error: m32r_cgen_cpu_open: unsupported argument `%d'"
-#: m32r-desc.c:1472
+#: m32r-desc.c:1473
#, c-format
msgid "internal error: m32r_cgen_cpu_open: no endianness specified"
msgstr "internal error: m32r_cgen_cpu_open: no endianness specified"
@@ -1674,17 +1722,17 @@ msgstr "Direktwert liegt außerhalb des gültigen Bereichs -128 bis 127"
msgid "Value is not aligned enough"
msgstr "Der Wert ist nicht ausreichend ausgerichtet"
-#: mep-desc.c:6226
+#: mep-desc.c:6227
#, c-format
msgid "internal error: mep_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
msgstr "internal error: mep_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
-#: mep-desc.c:6314
+#: mep-desc.c:6315
#, c-format
msgid "internal error: mep_cgen_cpu_open: unsupported argument `%d'"
msgstr "internal error: mep_cgen_cpu_open: unsupported argument `%d'"
-#: mep-desc.c:6333
+#: mep-desc.c:6334
#, c-format
msgid "internal error: mep_cgen_cpu_open: no endianness specified"
msgstr "internal error: mep_cgen_cpu_open: no endianness specified"
@@ -1863,17 +1911,17 @@ msgstr "Der Operand des Prozent-Operators ist kein Symbol"
msgid "invalid operand. type may have values 0,1,2 only."
msgstr "Ungültiger Operand. Die Art kann nur 0, 1 oder 2 sein."
-#: mt-desc.c:1146
+#: mt-desc.c:1147
#, c-format
msgid "internal error: mt_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
msgstr "internal error: mt_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
-#: mt-desc.c:1234
+#: mt-desc.c:1235
#, c-format
msgid "internal error: mt_cgen_cpu_open: unsupported argument `%d'"
msgstr "internal error: mt_cgen_cpu_open: unsupported argument `%d'"
-#: mt-desc.c:1253
+#: mt-desc.c:1254
#, c-format
msgid "internal error: mt_cgen_cpu_open: no endianness specified"
msgstr "internal error: mt_cgen_cpu_open: no endianness specified"
@@ -1897,47 +1945,47 @@ msgstr "internal error: unknown hardware resource"
msgid "insufficient data to decode instruction"
msgstr "Nicht genug Daten, um Befehl zu dekodieren"
-#: nfp-dis.c:927
+#: nfp-dis.c:930
msgid "<invalid_instruction>:"
msgstr "<ungültiger Maschinenbefehl>:"
-#: nfp-dis.c:1331
+#: nfp-dis.c:1334
msgid ", <invalid CRC operator>, "
msgstr ", <ungültiger CRC-Operator>, "
-#: nfp-dis.c:1683
+#: nfp-dis.c:1686
msgid "<invalid branch>["
msgstr "<ungültiger Zweig>["
-#: nfp-dis.c:2052 nfp-dis.c:2323
+#: nfp-dis.c:2055 nfp-dis.c:2326
#, c-format
msgid "<invalid cmd target %d:%d:%d>[]"
msgstr "<Ungültiges Befehlsziel %d:%d:%d>[]"
-#: nfp-dis.c:2063 nfp-dis.c:2334
+#: nfp-dis.c:2066 nfp-dis.c:2337
#, c-format
msgid "<invalid cmd action %d:%d:%d>[]"
msgstr "<Ungültige Befehlsaktion %d:%d:%d>[]"
-#: nfp-dis.c:2555
+#: nfp-dis.c:2558
msgid "File has no ME-Config section."
msgstr "Datei hat keinen ME-Config-Abschnitt."
-#: nfp-dis.c:2569
+#: nfp-dis.c:2572
msgid "File has invalid ME-Config section."
msgstr "Datei hat ungültigen ME-Config-Abschnitt."
-#: nfp-dis.c:2711
+#: nfp-dis.c:2717
#, c-format
msgid "Error processing section %u "
msgstr "Fehler beim Verarbeiten von Abschnitt %u "
-#: nfp-dis.c:2740
+#: nfp-dis.c:2746
#, c-format
msgid "Invalid NFP option: %s"
msgstr "Ungültige NFP-Option: %s"
-#: nfp-dis.c:2972
+#: nfp-dis.c:2984
#, c-format
msgid ""
"\n"
@@ -1949,7 +1997,7 @@ msgstr ""
"mit dem Schalter »-M« unterstützt (mehrere Optionen sollten durch\n"
"Kommata getrennt werden):\n"
-#: nfp-dis.c:2976
+#: nfp-dis.c:2988
#, c-format
msgid ""
"\n"
@@ -1995,17 +2043,17 @@ msgstr "Verlagerung für Speicherbefehl ungültig"
msgid "internal relocation type invalid"
msgstr "Interne Verlagerungsart ungültig"
-#: or1k-desc.c:2040
+#: or1k-desc.c:2041
#, c-format
msgid "internal error: or1k_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
msgstr "internal error: or1k_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
-#: or1k-desc.c:2128
+#: or1k-desc.c:2129
#, c-format
msgid "internal error: or1k_cgen_cpu_open: unsupported argument `%d'"
msgstr "internal error: or1k_cgen_cpu_open: unsupported argument `%d'"
-#: or1k-desc.c:2147
+#: or1k-desc.c:2148
#, c-format
msgid "internal error: or1k_cgen_cpu_open: no endianness specified"
msgstr "internal error: or1k_cgen_cpu_open: no endianness specified"
@@ -2155,38 +2203,50 @@ msgid "invalid TH value"
msgstr "Ungültiger TH-Wert"
#. The option without '=' should be defined above.
-#: riscv-dis.c:85 riscv-dis.c:122
+#: riscv-dis.c:103 riscv-dis.c:140
#, c-format
msgid "unrecognized disassembler option: %s"
msgstr "Unbekannte Disassembler-Option: %s"
#. Invalid options with '=', no option name before '=',
#. and no value after '='.
-#: riscv-dis.c:93
+#: riscv-dis.c:111
#, c-format
msgid "unrecognized disassembler option with '=': %s"
msgstr "Unbekannte Disassembler-Option mit »=«: %s"
-#: riscv-dis.c:107
+#: riscv-dis.c:125
#, c-format
msgid "unknown privileged spec set by %s=%s"
msgstr "Unbekannte Privilegien-Angabe durch %s=%s"
-#: riscv-dis.c:114
+#: riscv-dis.c:132
#, c-format
msgid "mis-matched privilege spec set by %s=%s, the elf privilege attribute is %s"
msgstr "unpassende Berechtigungsangabe %s=%s, das Berechtigungsattribut von ELF ist %s"
-#: riscv-dis.c:416
+#: riscv-dis.c:526
#, c-format
msgid "# internal error, undefined modifier (%c)"
msgstr "# Interner Fehler, unerkannter Modifikator (%c)"
-#: riscv-dis.c:640
+#: riscv-dis.c:1018
+msgid "Print numeric register names, rather than ABI names."
+msgstr "Numerische Registernamen statt ABI-Namen ausgeben."
+
+#: riscv-dis.c:1021
+msgid "Disassemble only into canonical instructions."
+msgstr "Nur die kanonische Form der Befehle verwenden."
+
+#: riscv-dis.c:1024
+msgid "Print the CSR according to the chosen privilege spec."
+msgstr "Die CSR gemäß der gewählten Privilegien-Angabe ausgeben."
+
+#: riscv-dis.c:1100
#, c-format
msgid ""
"\n"
-"The following RISC-V-specific disassembler options are supported for use\n"
+"The following RISC-V specific disassembler options are supported for use\n"
"with the -M switch (multiple options should be separated by commas):\n"
msgstr ""
"\n"
@@ -2194,37 +2254,6 @@ msgstr ""
"mit dem Schalter »-M« unterstützt (mehrere Optionen sollten durch\n"
"Kommata getrennt werden):\n"
-#: riscv-dis.c:644
-#, c-format
-msgid ""
-"\n"
-" numeric Print numeric register names, rather than ABI names.\n"
-msgstr ""
-"\n"
-" numeric Numerische Registernamen statt ABI-Namen ausgeben.\n"
-
-#: riscv-dis.c:647
-#, c-format
-msgid ""
-"\n"
-" no-aliases Disassemble only into canonical instructions, rather\n"
-" than into pseudoinstructions.\n"
-msgstr ""
-"\n"
-" no-aliases Ausschließlich kanonische Befehle beim Disassemblieren\n"
-" verwenden, anstelle von Pseudobefehlen.\n"
-
-#: riscv-dis.c:651
-#, c-format
-msgid ""
-"\n"
-" priv-spec=PRIV Print the CSR according to the chosen privilege spec\n"
-" (1.9, 1.9.1, 1.10, 1.11).\n"
-msgstr ""
-"\n"
-" priv-spec=PRIV Die CSR gemäß der gewählten Privilegien-Angabe ausgeben\n"
-" (1.9, 1.9.1, 1.10, 1.11).\n"
-
#: rx-dis.c:139 rx-dis.c:163 rx-dis.c:171 rx-dis.c:179 rx-dis.c:187
msgid "<invalid register number>"
msgstr "<ungültige Registernummer>"
@@ -2245,15 +2274,15 @@ msgstr "<ungültige Operandengröße>"
msgid "<invalid size>"
msgstr "<ungültige Größe>"
-#: s12z-dis.c:236 s12z-dis.c:293 s12z-dis.c:304
+#: s12z-dis.c:239 s12z-dis.c:296 s12z-dis.c:307
msgid "<illegal reg num>"
msgstr "<ungültige Registernummer>"
-#: s12z-dis.c:367
+#: s12z-dis.c:370
msgid "<bad>"
msgstr "<falsch>"
-#: s12z-dis.c:377
+#: s12z-dis.c:380
msgid ".<bad>"
msgstr ".<falsch>"
@@ -2460,17 +2489,17 @@ msgstr "Das »sof:«-Präfix fehlt"
msgid "Missing 'seg:' prefix"
msgstr "Das »seg:«-Präfix fehlt"
-#: xc16x-desc.c:3349
+#: xc16x-desc.c:3350
#, c-format
msgid "internal error: xc16x_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
msgstr "internal error: xc16x_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
-#: xc16x-desc.c:3437
+#: xc16x-desc.c:3438
#, c-format
msgid "internal error: xc16x_cgen_cpu_open: unsupported argument `%d'"
msgstr "internal error: xc16x_cgen_cpu_open: unsupported argument `%d'"
-#: xc16x-desc.c:3456
+#: xc16x-desc.c:3457
#, c-format
msgid "internal error: xc16x_cgen_cpu_open: no endianness specified"
msgstr "internal error: xc16x_cgen_cpu_open: no endianness specified"
@@ -2515,21 +2544,30 @@ msgstr "Operand muss ein Symbol sein"
msgid "Syntax error: No trailing ')'"
msgstr "Syntaxfehler: Kein abschließendes »)«"
-#: xstormy16-desc.c:1317
+#: xstormy16-desc.c:1318
#, c-format
msgid "internal error: xstormy16_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
msgstr "internal error: xstormy16_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
-#: xstormy16-desc.c:1405
+#: xstormy16-desc.c:1406
#, c-format
msgid "internal error: xstormy16_cgen_cpu_open: unsupported argument `%d'"
msgstr "internal error: xstormy16_cgen_cpu_open: unsupported argument `%d'"
-#: xstormy16-desc.c:1424
+#: xstormy16-desc.c:1425
#, c-format
msgid "internal error: xstormy16_cgen_cpu_open: no endianness specified"
msgstr "internal error: xstormy16_cgen_cpu_open: no endianness specified"
+#~ msgid ""
+#~ "\n"
+#~ " no-aliases Disassemble only into canonical instructions, rather\n"
+#~ " than into pseudoinstructions.\n"
+#~ msgstr ""
+#~ "\n"
+#~ " no-aliases Ausschließlich kanonische Befehle beim Disassemblieren\n"
+#~ " verwenden, anstelle von Pseudobefehlen.\n"
+
#~ msgid " dsp Recognize DSP instructions.\n"
#~ msgstr " dsp DSP-Befehle erkennen.\n"
diff --git a/opcodes/po/opcodes.pot b/opcodes/po/opcodes.pot
index 50a01b3701a..b83f275170f 100644
--- a/opcodes/po/opcodes.pot
+++ b/opcodes/po/opcodes.pot
@@ -7,8 +7,8 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: bug-binutils@gnu.org\n"
-"POT-Creation-Date: 2021-08-11 10:45+0100\n"
+"Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n"
+"POT-Creation-Date: 2022-01-22 12:21+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -26,12 +26,22 @@ msgid "specified register cannot be written to"
msgstr ""
#. Invalid option.
-#: aarch64-dis.c:94 arc-dis.c:802 arm-dis.c:11669
+#: aarch64-dis.c:94 arc-dis.c:802 arm-dis.c:11670
#, c-format
msgid "unrecognised disassembler option: %s"
msgstr ""
-#: aarch64-dis.c:3589
+#: aarch64-dis.c:3395
+#, c-format
+msgid "this `%s' should have an immediately preceding `%s'"
+msgstr ""
+
+#: aarch64-dis.c:3402
+#, c-format
+msgid "expected `%s' after previous `%s'"
+msgstr ""
+
+#: aarch64-dis.c:3806
#, c-format
msgid ""
"\n"
@@ -39,300 +49,316 @@ msgid ""
"with the -M switch (multiple options should be separated by commas):\n"
msgstr ""
-#: aarch64-dis.c:3593
+#: aarch64-dis.c:3810
#, c-format
msgid ""
"\n"
" no-aliases Don't print instruction aliases.\n"
msgstr ""
-#: aarch64-dis.c:3596
+#: aarch64-dis.c:3813
#, c-format
msgid ""
"\n"
" aliases Do print instruction aliases.\n"
msgstr ""
-#: aarch64-dis.c:3599
+#: aarch64-dis.c:3816
#, c-format
msgid ""
"\n"
" no-notes Don't print instruction notes.\n"
msgstr ""
-#: aarch64-dis.c:3602
+#: aarch64-dis.c:3819
#, c-format
msgid ""
"\n"
" notes Do print instruction notes.\n"
msgstr ""
-#: aarch64-dis.c:3606
+#: aarch64-dis.c:3823
#, c-format
msgid ""
"\n"
" debug_dump Temp switch for debug trace.\n"
msgstr ""
-#: aarch64-dis.c:3610 arc-dis.c:1551 arc-dis.c:1572 arc-dis.c:1575
-#: mips-dis.c:2807 mips-dis.c:2817 mips-dis.c:2820 nfp-dis.c:2981
-#: riscv-dis.c:655
+#: aarch64-dis.c:3827 arc-dis.c:1551 arc-dis.c:1572 arc-dis.c:1575
+#: loongarch-dis.c:306 mips-dis.c:2807 mips-dis.c:2817 mips-dis.c:2820
+#: nfp-dis.c:2993 riscv-dis.c:1140 riscv-dis.c:1143
#, c-format
msgid "\n"
msgstr ""
-#: aarch64-opc.c:1350
+#: aarch64-opc.c:1365
msgid "immediate value"
msgstr ""
-#: aarch64-opc.c:1360
+#: aarch64-opc.c:1375
msgid "immediate offset"
msgstr ""
-#: aarch64-opc.c:1370
+#: aarch64-opc.c:1385
msgid "register number"
msgstr ""
-#: aarch64-opc.c:1380
+#: aarch64-opc.c:1395
msgid "register element index"
msgstr ""
-#: aarch64-opc.c:1390
+#: aarch64-opc.c:1405
msgid "shift amount"
msgstr ""
-#: aarch64-opc.c:1402
+#: aarch64-opc.c:1417
msgid "multiplier"
msgstr ""
-#: aarch64-opc.c:1475
+#: aarch64-opc.c:1491
msgid "reg pair must start from even reg"
msgstr ""
-#: aarch64-opc.c:1481
+#: aarch64-opc.c:1497
msgid "reg pair must be contiguous"
msgstr ""
-#: aarch64-opc.c:1495
+#: aarch64-opc.c:1511
msgid "extraneous register"
msgstr ""
-#: aarch64-opc.c:1501
+#: aarch64-opc.c:1517
msgid "missing register"
msgstr ""
-#: aarch64-opc.c:1512
+#: aarch64-opc.c:1528
msgid "stack pointer register expected"
msgstr ""
-#: aarch64-opc.c:1537
+#: aarch64-opc.c:1553
msgid "z0-z15 expected"
msgstr ""
-#: aarch64-opc.c:1538
+#: aarch64-opc.c:1554
msgid "z0-z7 expected"
msgstr ""
-#: aarch64-opc.c:1564
+#: aarch64-opc.c:1580
msgid "invalid register list"
msgstr ""
-#: aarch64-opc.c:1578
+#: aarch64-opc.c:1594
msgid "p0-p7 expected"
msgstr ""
-#: aarch64-opc.c:1604 aarch64-opc.c:1612
+#: aarch64-opc.c:1620 aarch64-opc.c:1628
msgid "unexpected address writeback"
msgstr ""
-#: aarch64-opc.c:1623
+#: aarch64-opc.c:1639
msgid "address writeback expected"
msgstr ""
-#: aarch64-opc.c:1670
+#: aarch64-opc.c:1686
msgid "negative or unaligned offset expected"
msgstr ""
-#: aarch64-opc.c:1727
+#: aarch64-opc.c:1743
msgid "invalid register offset"
msgstr ""
-#: aarch64-opc.c:1749
+#: aarch64-opc.c:1765
msgid "invalid post-increment amount"
msgstr ""
-#: aarch64-opc.c:1765 aarch64-opc.c:2274
+#: aarch64-opc.c:1781 aarch64-opc.c:2299
msgid "invalid shift amount"
msgstr ""
-#: aarch64-opc.c:1778
+#: aarch64-opc.c:1794
msgid "invalid extend/shift operator"
msgstr ""
-#: aarch64-opc.c:1824 aarch64-opc.c:2076 aarch64-opc.c:2111 aarch64-opc.c:2130
-#: aarch64-opc.c:2138 aarch64-opc.c:2227 aarch64-opc.c:2404 aarch64-opc.c:2504
-#: aarch64-opc.c:2517
+#: aarch64-opc.c:1840 aarch64-opc.c:2101 aarch64-opc.c:2136 aarch64-opc.c:2155
+#: aarch64-opc.c:2163 aarch64-opc.c:2252 aarch64-opc.c:2429 aarch64-opc.c:2529
+#: aarch64-opc.c:2542
msgid "immediate out of range"
msgstr ""
-#: aarch64-opc.c:1846 aarch64-opc.c:1888 aarch64-opc.c:1950 aarch64-opc.c:1984
+#: aarch64-opc.c:1870 aarch64-opc.c:1912 aarch64-opc.c:1975 aarch64-opc.c:2009
msgid "invalid addressing mode"
msgstr ""
-#: aarch64-opc.c:1942
+#: aarch64-opc.c:1967
msgid "index register xzr is not allowed"
msgstr ""
-#: aarch64-opc.c:2064 aarch64-opc.c:2086 aarch64-opc.c:2307 aarch64-opc.c:2315
-#: aarch64-opc.c:2381 aarch64-opc.c:2410
+#: aarch64-opc.c:2089 aarch64-opc.c:2111 aarch64-opc.c:2332 aarch64-opc.c:2340
+#: aarch64-opc.c:2406 aarch64-opc.c:2435
msgid "invalid shift operator"
msgstr ""
-#: aarch64-opc.c:2070
+#: aarch64-opc.c:2095
msgid "shift amount must be 0 or 12"
msgstr ""
-#: aarch64-opc.c:2093
+#: aarch64-opc.c:2118
msgid "shift amount must be a multiple of 16"
msgstr ""
-#: aarch64-opc.c:2105
+#: aarch64-opc.c:2130
msgid "negative immediate value not allowed"
msgstr ""
-#: aarch64-opc.c:2238
+#: aarch64-opc.c:2263
msgid "immediate zero expected"
msgstr ""
-#: aarch64-opc.c:2252
+#: aarch64-opc.c:2277
msgid "rotate expected to be 0, 90, 180 or 270"
msgstr ""
-#: aarch64-opc.c:2263
+#: aarch64-opc.c:2288
msgid "rotate expected to be 90 or 270"
msgstr ""
-#: aarch64-opc.c:2323
+#: aarch64-opc.c:2348
msgid "shift is not permitted"
msgstr ""
-#: aarch64-opc.c:2348
+#: aarch64-opc.c:2373
msgid "invalid value for immediate"
msgstr ""
-#: aarch64-opc.c:2373
+#: aarch64-opc.c:2398
msgid "shift amount must be 0 or 16"
msgstr ""
-#: aarch64-opc.c:2394
+#: aarch64-opc.c:2419
msgid "floating-point immediate expected"
msgstr ""
-#: aarch64-opc.c:2428
+#: aarch64-opc.c:2453
msgid "no shift amount allowed for 8-bit constants"
msgstr ""
-#: aarch64-opc.c:2438
+#: aarch64-opc.c:2463
msgid "shift amount must be 0 or 8"
msgstr ""
-#: aarch64-opc.c:2451
+#: aarch64-opc.c:2476
msgid "immediate too big for element size"
msgstr ""
-#: aarch64-opc.c:2458
+#: aarch64-opc.c:2483
msgid "invalid arithmetic immediate"
msgstr ""
-#: aarch64-opc.c:2472
+#: aarch64-opc.c:2497
msgid "floating-point value must be 0.5 or 1.0"
msgstr ""
-#: aarch64-opc.c:2482
+#: aarch64-opc.c:2507
msgid "floating-point value must be 0.5 or 2.0"
msgstr ""
-#: aarch64-opc.c:2492
+#: aarch64-opc.c:2517
msgid "floating-point value must be 0.0 or 1.0"
msgstr ""
-#: aarch64-opc.c:2523
+#: aarch64-opc.c:2548
msgid "invalid replicated MOV immediate"
msgstr ""
-#: aarch64-opc.c:2644
+#: aarch64-opc.c:2656
msgid "extend operator expected"
msgstr ""
-#: aarch64-opc.c:2657
+#: aarch64-opc.c:2669
msgid "missing extend operator"
msgstr ""
-#: aarch64-opc.c:2663
+#: aarch64-opc.c:2675
msgid "'LSL' operator not allowed"
msgstr ""
-#: aarch64-opc.c:2684
+#: aarch64-opc.c:2696
msgid "W register expected"
msgstr ""
-#: aarch64-opc.c:2695
+#: aarch64-opc.c:2707
msgid "shift operator expected"
msgstr ""
-#: aarch64-opc.c:2702
+#: aarch64-opc.c:2714
msgid "'ROR' operator not allowed"
msgstr ""
-#: aarch64-opc.c:3722
+#: aarch64-opc.c:3852
msgid "reading from a write-only register"
msgstr ""
-#: aarch64-opc.c:3724
+#: aarch64-opc.c:3854
msgid "writing to a read-only register"
msgstr ""
-#: aarch64-opc.c:5165
+#: aarch64-opc.c:5445
+msgid "the three register operands must be distinct from one another"
+msgstr ""
+
+#: aarch64-opc.c:5556
+msgid "destination register differs from preceding instruction"
+msgstr ""
+
+#: aarch64-opc.c:5559
+msgid "source register differs from preceding instruction"
+msgstr ""
+
+#: aarch64-opc.c:5562
+msgid "size register differs from preceding instruction"
+msgstr ""
+
+#: aarch64-opc.c:5610
msgid "instruction opens new dependency sequence without ending previous one"
msgstr ""
-#: aarch64-opc.c:5185
+#: aarch64-opc.c:5639
msgid "previous `movprfx' sequence not closed"
msgstr ""
-#: aarch64-opc.c:5204
+#: aarch64-opc.c:5658
msgid "SVE instruction expected after `movprfx'"
msgstr ""
-#: aarch64-opc.c:5217
+#: aarch64-opc.c:5671
msgid "SVE `movprfx' compatible instruction expected"
msgstr ""
-#: aarch64-opc.c:5304
+#: aarch64-opc.c:5759
msgid "predicated instruction expected after `movprfx'"
msgstr ""
-#: aarch64-opc.c:5316
+#: aarch64-opc.c:5771
msgid "merging predicate expected due to preceding `movprfx'"
msgstr ""
-#: aarch64-opc.c:5328
+#: aarch64-opc.c:5783
msgid "predicate register differs from that in preceding `movprfx'"
msgstr ""
-#: aarch64-opc.c:5347
+#: aarch64-opc.c:5802
msgid "output register of preceding `movprfx' not used in current instruction"
msgstr ""
-#: aarch64-opc.c:5360
+#: aarch64-opc.c:5815
msgid "output register of preceding `movprfx' expected as output"
msgstr ""
-#: aarch64-opc.c:5372
+#: aarch64-opc.c:5827
msgid "output register of preceding `movprfx' used as input"
msgstr ""
-#: aarch64-opc.c:5388
+#: aarch64-opc.c:5843
msgid "register size not compatible with previous `movprfx'"
msgstr ""
@@ -415,7 +441,7 @@ msgid ""
"with the -M switch (multiple options should be separated by commas):\n"
msgstr ""
-#: arc-dis.c:1558 mips-dis.c:2812
+#: arc-dis.c:1558 mips-dis.c:2812 riscv-dis.c:1135
#, c-format
msgid ""
"\n"
@@ -631,22 +657,22 @@ msgstr ""
msgid "<illegal precision>"
msgstr ""
-#: arm-dis.c:11630
+#: arm-dis.c:11631
#, c-format
msgid "unrecognised register name set: %s"
msgstr ""
-#: arm-dis.c:11644
+#: arm-dis.c:11645
#, c-format
msgid "cde coprocessor not between 0-7: %s"
msgstr ""
-#: arm-dis.c:11650
+#: arm-dis.c:11651
#, c-format
msgid "coproc must have an argument: %s"
msgstr ""
-#: arm-dis.c:11663
+#: arm-dis.c:11664
#, c-format
msgid "coprocN argument takes options \"generic\", \"cde\", or \"CDE\": %s"
msgstr ""
@@ -659,17 +685,17 @@ msgid ""
"the -M switch:\n"
msgstr ""
-#: avr-dis.c:115 avr-dis.c:136
+#: avr-dis.c:124 avr-dis.c:145
#, c-format
msgid "undefined"
msgstr ""
-#: avr-dis.c:218
+#: avr-dis.c:236
#, c-format
msgid "internal disassembler error"
msgstr ""
-#: avr-dis.c:272
+#: avr-dis.c:290
#, c-format
msgid "unknown constraint `%c'"
msgstr ""
@@ -756,19 +782,19 @@ msgstr ""
msgid "bad instruction `%.50s'"
msgstr ""
-#: bpf-desc.c:1767
+#: bpf-desc.c:1768
#, c-format
msgid ""
"internal error: bpf_cgen_rebuild_tables: conflicting insn-chunk-bitsize "
"values: `%d' vs. `%d'"
msgstr ""
-#: bpf-desc.c:1855
+#: bpf-desc.c:1856
#, c-format
msgid "internal error: bpf_cgen_cpu_open: unsupported argument `%d'"
msgstr ""
-#: bpf-desc.c:1874
+#: bpf-desc.c:1875
#, c-format
msgid "internal error: bpf_cgen_cpu_open: no endianness specified"
msgstr ""
@@ -865,19 +891,19 @@ msgstr ""
msgid "operand out of range (%lu not between %lu and %lu)"
msgstr ""
-#: cris-desc.c:2621
+#: cris-desc.c:2622
#, c-format
msgid ""
"internal error: cris_cgen_rebuild_tables: conflicting insn-chunk-bitsize "
"values: `%d' vs. `%d'"
msgstr ""
-#: cris-desc.c:2709
+#: cris-desc.c:2710
#, c-format
msgid "internal error: cris_cgen_cpu_open: unsupported argument `%d'"
msgstr ""
-#: cris-desc.c:2728
+#: cris-desc.c:2729
#, c-format
msgid "internal error: cris_cgen_cpu_open: no endianness specified"
msgstr ""
@@ -903,12 +929,12 @@ msgstr ""
msgid "Address 0x%s is out of bounds.\n"
msgstr ""
-#: disassemble.c:848
+#: disassemble.c:859
#, c-format
msgid "assertion fail %s:%d"
msgstr ""
-#: disassemble.c:849
+#: disassemble.c:860
msgid "Please report this bug"
msgstr ""
@@ -947,19 +973,19 @@ msgstr ""
msgid "Not a pc-relative address."
msgstr ""
-#: epiphany-desc.c:2109
+#: epiphany-desc.c:2110
#, c-format
msgid ""
"internal error: epiphany_cgen_rebuild_tables: conflicting insn-chunk-bitsize "
"values: `%d' vs. `%d'"
msgstr ""
-#: epiphany-desc.c:2197
+#: epiphany-desc.c:2198
#, c-format
msgid "internal error: epiphany_cgen_cpu_open: unsupported argument `%d'"
msgstr ""
-#: epiphany-desc.c:2216
+#: epiphany-desc.c:2217
#, c-format
msgid "internal error: epiphany_cgen_cpu_open: no endianness specified"
msgstr ""
@@ -980,19 +1006,19 @@ msgstr ""
msgid "Register list is not valid"
msgstr ""
-#: fr30-desc.c:1586
+#: fr30-desc.c:1587
#, c-format
msgid ""
"internal error: fr30_cgen_rebuild_tables: conflicting insn-chunk-bitsize "
"values: `%d' vs. `%d'"
msgstr ""
-#: fr30-desc.c:1674
+#: fr30-desc.c:1675
#, c-format
msgid "internal error: fr30_cgen_cpu_open: unsupported argument `%d'"
msgstr ""
-#: fr30-desc.c:1693
+#: fr30-desc.c:1694
#, c-format
msgid "internal error: fr30_cgen_cpu_open: no endianness specified"
msgstr ""
@@ -1013,19 +1039,19 @@ msgstr ""
msgid "register number must be even"
msgstr ""
-#: frv-desc.c:6326
+#: frv-desc.c:6327
#, c-format
msgid ""
"internal error: frv_cgen_rebuild_tables: conflicting insn-chunk-bitsize "
"values: `%d' vs. `%d'"
msgstr ""
-#: frv-desc.c:6414
+#: frv-desc.c:6415
#, c-format
msgid "internal error: frv_cgen_cpu_open: unsupported argument `%d'"
msgstr ""
-#: frv-desc.c:6433
+#: frv-desc.c:6434
#, c-format
msgid "internal error: frv_cgen_cpu_open: no endianness specified"
msgstr ""
@@ -1055,11 +1081,11 @@ msgstr ""
msgid "Don't understand 0x%x \n"
msgstr ""
-#: i386-dis.c:8642
+#: i386-dis.c:8528
msgid "<internal disassembler error>"
msgstr ""
-#: i386-dis.c:8952
+#: i386-dis.c:8802
#, c-format
msgid ""
"\n"
@@ -1068,175 +1094,175 @@ msgid ""
"with the -M switch (multiple options should be separated by commas):\n"
msgstr ""
-#: i386-dis.c:8956
+#: i386-dis.c:8806
#, c-format
msgid " x86-64 Disassemble in 64bit mode\n"
msgstr ""
-#: i386-dis.c:8957
+#: i386-dis.c:8807
#, c-format
msgid " i386 Disassemble in 32bit mode\n"
msgstr ""
-#: i386-dis.c:8958
+#: i386-dis.c:8808
#, c-format
msgid " i8086 Disassemble in 16bit mode\n"
msgstr ""
-#: i386-dis.c:8959
+#: i386-dis.c:8809
#, c-format
msgid " att Display instruction in AT&T syntax\n"
msgstr ""
-#: i386-dis.c:8960
+#: i386-dis.c:8810
#, c-format
msgid " intel Display instruction in Intel syntax\n"
msgstr ""
-#: i386-dis.c:8961
+#: i386-dis.c:8811
#, c-format
msgid ""
" att-mnemonic\n"
" Display instruction in AT&T mnemonic\n"
msgstr ""
-#: i386-dis.c:8963
+#: i386-dis.c:8813
#, c-format
msgid ""
" intel-mnemonic\n"
" Display instruction in Intel mnemonic\n"
msgstr ""
-#: i386-dis.c:8965
+#: i386-dis.c:8815
#, c-format
msgid " addr64 Assume 64bit address size\n"
msgstr ""
-#: i386-dis.c:8966
+#: i386-dis.c:8816
#, c-format
msgid " addr32 Assume 32bit address size\n"
msgstr ""
-#: i386-dis.c:8967
+#: i386-dis.c:8817
#, c-format
msgid " addr16 Assume 16bit address size\n"
msgstr ""
-#: i386-dis.c:8968
+#: i386-dis.c:8818
#, c-format
msgid " data32 Assume 32bit data size\n"
msgstr ""
-#: i386-dis.c:8969
+#: i386-dis.c:8819
#, c-format
msgid " data16 Assume 16bit data size\n"
msgstr ""
-#: i386-dis.c:8970
+#: i386-dis.c:8820
#, c-format
msgid " suffix Always display instruction suffix in AT&T syntax\n"
msgstr ""
-#: i386-dis.c:8971
+#: i386-dis.c:8821
#, c-format
msgid " amd64 Display instruction in AMD64 ISA\n"
msgstr ""
-#: i386-dis.c:8972
+#: i386-dis.c:8822
#, c-format
msgid " intel64 Display instruction in Intel64 ISA\n"
msgstr ""
-#: i386-dis.c:9541
+#: i386-dis.c:9402
msgid "64-bit address is disabled"
msgstr ""
-#: i386-gen.c:857
+#: i386-gen.c:856
#, c-format
msgid "%s: error: "
msgstr ""
-#: i386-gen.c:1013
+#: i386-gen.c:1012
#, c-format
msgid "%s: %d: unknown bitfield: %s\n"
msgstr ""
-#: i386-gen.c:1015
+#: i386-gen.c:1014
#, c-format
msgid "unknown bitfield: %s\n"
msgstr ""
-#: i386-gen.c:1078
+#: i386-gen.c:1077
#, c-format
msgid "%s: %d: missing `)' in bitfield: %s\n"
msgstr ""
-#: i386-gen.c:1179
+#: i386-gen.c:1178
#, c-format
msgid "unknown broadcast operand: %s\n"
msgstr ""
-#: i386-gen.c:1234
+#: i386-gen.c:1233
#, c-format
msgid "%s:%d: Conflicting opcode space specifications\n"
msgstr ""
-#: i386-gen.c:1238
+#: i386-gen.c:1237
#, c-format
msgid "%s:%d: Warning: redundant opcode space specification\n"
msgstr ""
-#: i386-gen.c:1247
+#: i386-gen.c:1246
#, c-format
msgid "%s:%d: Conflicting prefix specifications\n"
msgstr ""
-#: i386-gen.c:1251
+#: i386-gen.c:1250
#, c-format
msgid "%s:%d: Warning: redundant prefix specification\n"
msgstr ""
-#: i386-gen.c:1461
+#: i386-gen.c:1460
#, c-format
msgid "%s:%d: %s: unrecognized opcode encoding space\n"
msgstr ""
-#: i386-gen.c:1467
+#: i386-gen.c:1466
#, c-format
msgid "%s:%d: %s: residual opcode (0x%0*llx) too large\n"
msgstr ""
-#: i386-gen.c:1889
+#: i386-gen.c:1888
#, c-format
msgid "can't find i386-reg.tbl for reading, errno = %s\n"
msgstr ""
-#: i386-gen.c:1967
+#: i386-gen.c:1966
#, c-format
msgid "can't create i386-init.h, errno = %s\n"
msgstr ""
-#: i386-gen.c:2057 ia64-gen.c:2829
+#: i386-gen.c:2056 ia64-gen.c:2829
#, c-format
msgid "unable to change directory to \"%s\", errno = %s\n"
msgstr ""
-#: i386-gen.c:2071 i386-gen.c:2076
+#: i386-gen.c:2070 i386-gen.c:2075
#, c-format
msgid "CpuMax != %d!\n"
msgstr ""
-#: i386-gen.c:2080
+#: i386-gen.c:2079
#, c-format
msgid "%d unused bits in i386_cpu_flags.\n"
msgstr ""
-#: i386-gen.c:2095
+#: i386-gen.c:2094
#, c-format
msgid "%d unused bits in i386_operand_type.\n"
msgstr ""
-#: i386-gen.c:2109
+#: i386-gen.c:2108
#, c-format
msgid "can't create i386-tbl.h, errno = %s\n"
msgstr ""
@@ -1399,19 +1425,19 @@ msgstr ""
msgid "Attempt to find bit index of 0"
msgstr ""
-#: ip2k-desc.c:1015
+#: ip2k-desc.c:1016
#, c-format
msgid ""
"internal error: ip2k_cgen_rebuild_tables: conflicting insn-chunk-bitsize "
"values: `%d' vs. `%d'"
msgstr ""
-#: ip2k-desc.c:1103
+#: ip2k-desc.c:1104
#, c-format
msgid "internal error: ip2k_cgen_cpu_open: unsupported argument `%d'"
msgstr ""
-#: ip2k-desc.c:1122
+#: ip2k-desc.c:1123
#, c-format
msgid "internal error: ip2k_cgen_cpu_open: no endianness specified"
msgstr ""
@@ -1428,19 +1454,19 @@ msgstr ""
msgid "21-bit offset out of range"
msgstr ""
-#: iq2000-desc.c:2020
+#: iq2000-desc.c:2021
#, c-format
msgid ""
"internal error: iq2000_cgen_rebuild_tables: conflicting insn-chunk-bitsize "
"values: `%d' vs. `%d'"
msgstr ""
-#: iq2000-desc.c:2108
+#: iq2000-desc.c:2109
#, c-format
msgid "internal error: iq2000_cgen_cpu_open: unsupported argument `%d'"
msgstr ""
-#: iq2000-desc.c:2127
+#: iq2000-desc.c:2128
#, c-format
msgid "internal error: iq2000_cgen_cpu_open: no endianness specified"
msgstr ""
@@ -1461,23 +1487,38 @@ msgstr ""
msgid "expecting got relative address: gotofflo16(symbol)"
msgstr ""
-#: lm32-desc.c:1002
+#: lm32-desc.c:1003
#, c-format
msgid ""
"internal error: lm32_cgen_rebuild_tables: conflicting insn-chunk-bitsize "
"values: `%d' vs. `%d'"
msgstr ""
-#: lm32-desc.c:1090
+#: lm32-desc.c:1091
#, c-format
msgid "internal error: lm32_cgen_cpu_open: unsupported argument `%d'"
msgstr ""
-#: lm32-desc.c:1109
+#: lm32-desc.c:1110
#, c-format
msgid "internal error: lm32_cgen_cpu_open: no endianness specified"
msgstr ""
+#: loongarch-dis.c:300
+#, c-format
+msgid ""
+"\n"
+"The following LoongArch disassembler options are supported for use\n"
+"with the -M switch (multiple options should be separated by commas):\n"
+msgstr ""
+
+#: loongarch-dis.c:304
+#, c-format
+msgid ""
+"\n"
+" numeric Print numeric register names, rather than ABI names.\n"
+msgstr ""
+
#: m10200-dis.c:151 m10300-dis.c:574
#, c-format
msgid "unknown\t0x%04lx"
@@ -1562,36 +1603,36 @@ msgstr ""
msgid "Invalid size specifier"
msgstr ""
-#: m32c-desc.c:63033
+#: m32c-desc.c:63034
#, c-format
msgid ""
"internal error: m32c_cgen_rebuild_tables: conflicting insn-chunk-bitsize "
"values: `%d' vs. `%d'"
msgstr ""
-#: m32c-desc.c:63121
+#: m32c-desc.c:63122
#, c-format
msgid "internal error: m32c_cgen_cpu_open: unsupported argument `%d'"
msgstr ""
-#: m32c-desc.c:63140
+#: m32c-desc.c:63141
#, c-format
msgid "internal error: m32c_cgen_cpu_open: no endianness specified"
msgstr ""
-#: m32r-desc.c:1365
+#: m32r-desc.c:1366
#, c-format
msgid ""
"internal error: m32r_cgen_rebuild_tables: conflicting insn-chunk-bitsize "
"values: `%d' vs. `%d'"
msgstr ""
-#: m32r-desc.c:1453
+#: m32r-desc.c:1454
#, c-format
msgid "internal error: m32r_cgen_cpu_open: unsupported argument `%d'"
msgstr ""
-#: m32r-desc.c:1472
+#: m32r-desc.c:1473
#, c-format
msgid "internal error: m32r_cgen_cpu_open: no endianness specified"
msgstr ""
@@ -1639,19 +1680,19 @@ msgstr ""
msgid "Value is not aligned enough"
msgstr ""
-#: mep-desc.c:6226
+#: mep-desc.c:6227
#, c-format
msgid ""
"internal error: mep_cgen_rebuild_tables: conflicting insn-chunk-bitsize "
"values: `%d' vs. `%d'"
msgstr ""
-#: mep-desc.c:6314
+#: mep-desc.c:6315
#, c-format
msgid "internal error: mep_cgen_cpu_open: unsupported argument `%d'"
msgstr ""
-#: mep-desc.c:6333
+#: mep-desc.c:6334
#, c-format
msgid "internal error: mep_cgen_cpu_open: no endianness specified"
msgstr ""
@@ -1816,19 +1857,19 @@ msgstr ""
msgid "invalid operand. type may have values 0,1,2 only."
msgstr ""
-#: mt-desc.c:1146
+#: mt-desc.c:1147
#, c-format
msgid ""
"internal error: mt_cgen_rebuild_tables: conflicting insn-chunk-bitsize "
"values: `%d' vs. `%d'"
msgstr ""
-#: mt-desc.c:1234
+#: mt-desc.c:1235
#, c-format
msgid "internal error: mt_cgen_cpu_open: unsupported argument `%d'"
msgstr ""
-#: mt-desc.c:1253
+#: mt-desc.c:1254
#, c-format
msgid "internal error: mt_cgen_cpu_open: no endianness specified"
msgstr ""
@@ -1852,47 +1893,47 @@ msgstr ""
msgid "insufficient data to decode instruction"
msgstr ""
-#: nfp-dis.c:927
+#: nfp-dis.c:930
msgid "<invalid_instruction>:"
msgstr ""
-#: nfp-dis.c:1331
+#: nfp-dis.c:1334
msgid ", <invalid CRC operator>, "
msgstr ""
-#: nfp-dis.c:1683
+#: nfp-dis.c:1686
msgid "<invalid branch>["
msgstr ""
-#: nfp-dis.c:2052 nfp-dis.c:2323
+#: nfp-dis.c:2055 nfp-dis.c:2326
#, c-format
msgid "<invalid cmd target %d:%d:%d>[]"
msgstr ""
-#: nfp-dis.c:2063 nfp-dis.c:2334
+#: nfp-dis.c:2066 nfp-dis.c:2337
#, c-format
msgid "<invalid cmd action %d:%d:%d>[]"
msgstr ""
-#: nfp-dis.c:2555
+#: nfp-dis.c:2558
msgid "File has no ME-Config section."
msgstr ""
-#: nfp-dis.c:2569
+#: nfp-dis.c:2572
msgid "File has invalid ME-Config section."
msgstr ""
-#: nfp-dis.c:2711
+#: nfp-dis.c:2717
#, c-format
msgid "Error processing section %u "
msgstr ""
-#: nfp-dis.c:2740
+#: nfp-dis.c:2746
#, c-format
msgid "Invalid NFP option: %s"
msgstr ""
-#: nfp-dis.c:2972
+#: nfp-dis.c:2984
#, c-format
msgid ""
"\n"
@@ -1900,7 +1941,7 @@ msgid ""
"with the -M switch (multiple options should be separated by commas):\n"
msgstr ""
-#: nfp-dis.c:2976
+#: nfp-dis.c:2988
#, c-format
msgid ""
"\n"
@@ -1937,19 +1978,19 @@ msgstr ""
msgid "internal relocation type invalid"
msgstr ""
-#: or1k-desc.c:2040
+#: or1k-desc.c:2041
#, c-format
msgid ""
"internal error: or1k_cgen_rebuild_tables: conflicting insn-chunk-bitsize "
"values: `%d' vs. `%d'"
msgstr ""
-#: or1k-desc.c:2128
+#: or1k-desc.c:2129
#, c-format
msgid "internal error: or1k_cgen_cpu_open: unsupported argument `%d'"
msgstr ""
-#: or1k-desc.c:2147
+#: or1k-desc.c:2148
#, c-format
msgid "internal error: or1k_cgen_cpu_open: no endianness specified"
msgstr ""
@@ -2096,63 +2137,52 @@ msgid "invalid TH value"
msgstr ""
#. The option without '=' should be defined above.
-#: riscv-dis.c:85 riscv-dis.c:122
+#: riscv-dis.c:103 riscv-dis.c:140
#, c-format
msgid "unrecognized disassembler option: %s"
msgstr ""
#. Invalid options with '=', no option name before '=',
#. and no value after '='.
-#: riscv-dis.c:93
+#: riscv-dis.c:111
#, c-format
msgid "unrecognized disassembler option with '=': %s"
msgstr ""
-#: riscv-dis.c:107
+#: riscv-dis.c:125
#, c-format
msgid "unknown privileged spec set by %s=%s"
msgstr ""
-#: riscv-dis.c:114
+#: riscv-dis.c:132
#, c-format
msgid ""
"mis-matched privilege spec set by %s=%s, the elf privilege attribute is %s"
msgstr ""
-#: riscv-dis.c:416
+#: riscv-dis.c:526
#, c-format
msgid "# internal error, undefined modifier (%c)"
msgstr ""
-#: riscv-dis.c:640
-#, c-format
-msgid ""
-"\n"
-"The following RISC-V-specific disassembler options are supported for use\n"
-"with the -M switch (multiple options should be separated by commas):\n"
+#: riscv-dis.c:1018
+msgid "Print numeric register names, rather than ABI names."
msgstr ""
-#: riscv-dis.c:644
-#, c-format
-msgid ""
-"\n"
-" numeric Print numeric register names, rather than ABI names.\n"
+#: riscv-dis.c:1021
+msgid "Disassemble only into canonical instructions."
msgstr ""
-#: riscv-dis.c:647
-#, c-format
-msgid ""
-"\n"
-" no-aliases Disassemble only into canonical instructions, rather\n"
-" than into pseudoinstructions.\n"
+#: riscv-dis.c:1024
+msgid "Print the CSR according to the chosen privilege spec."
msgstr ""
-#: riscv-dis.c:651
+#: riscv-dis.c:1100
#, c-format
msgid ""
"\n"
-" priv-spec=PRIV Print the CSR according to the chosen privilege spec\n"
-" (1.9, 1.9.1, 1.10, 1.11).\n"
+"The following RISC-V specific disassembler options are supported for use\n"
+"with the -M switch (multiple options should be separated by commas):\n"
msgstr ""
#: rx-dis.c:139 rx-dis.c:163 rx-dis.c:171 rx-dis.c:179 rx-dis.c:187
@@ -2175,15 +2205,15 @@ msgstr ""
msgid "<invalid size>"
msgstr ""
-#: s12z-dis.c:236 s12z-dis.c:293 s12z-dis.c:304
+#: s12z-dis.c:239 s12z-dis.c:296 s12z-dis.c:307
msgid "<illegal reg num>"
msgstr ""
-#: s12z-dis.c:367
+#: s12z-dis.c:370
msgid "<bad>"
msgstr ""
-#: s12z-dis.c:377
+#: s12z-dis.c:380
msgid ".<bad>"
msgstr ""
@@ -2379,19 +2409,19 @@ msgstr ""
msgid "Missing 'seg:' prefix"
msgstr ""
-#: xc16x-desc.c:3349
+#: xc16x-desc.c:3350
#, c-format
msgid ""
"internal error: xc16x_cgen_rebuild_tables: conflicting insn-chunk-bitsize "
"values: `%d' vs. `%d'"
msgstr ""
-#: xc16x-desc.c:3437
+#: xc16x-desc.c:3438
#, c-format
msgid "internal error: xc16x_cgen_cpu_open: unsupported argument `%d'"
msgstr ""
-#: xc16x-desc.c:3456
+#: xc16x-desc.c:3457
#, c-format
msgid "internal error: xc16x_cgen_cpu_open: no endianness specified"
msgstr ""
@@ -2436,19 +2466,19 @@ msgstr ""
msgid "Syntax error: No trailing ')'"
msgstr ""
-#: xstormy16-desc.c:1317
+#: xstormy16-desc.c:1318
#, c-format
msgid ""
"internal error: xstormy16_cgen_rebuild_tables: conflicting insn-chunk-"
"bitsize values: `%d' vs. `%d'"
msgstr ""
-#: xstormy16-desc.c:1405
+#: xstormy16-desc.c:1406
#, c-format
msgid "internal error: xstormy16_cgen_cpu_open: unsupported argument `%d'"
msgstr ""
-#: xstormy16-desc.c:1424
+#: xstormy16-desc.c:1425
#, c-format
msgid "internal error: xstormy16_cgen_cpu_open: no endianness specified"
msgstr ""
diff --git a/opcodes/po/ro.po b/opcodes/po/ro.po
index a7e3c4c0031..fb306b8c9cc 100644
--- a/opcodes/po/ro.po
+++ b/opcodes/po/ro.po
@@ -1,702 +1,2433 @@
-# Mesajele în limba românã pentru pachetul opcodes
+# Mesajele în limba română pentru pachetul opcodes
# Copyright (C) 2003 Free Software Foundation, Inc.
-# Eugen Hoanca <eugenh@urban-grafx.ro>, 2003
+# This file is distributed under the same license as the binutils package.
+#
+# Eugen Hoanca <eugenh@urban-grafx.ro>, 2003.
+# Traducere făcută de EH, pentru versiunea opcodes 2.14rel030712
+# Actualizare a mesajelor, de la fiÈ™ierul „opcodes-2.36.90.potâ€.
+# Actualizare a codării caracteror, la codarea de caractere UTF-8.
+# Actualizare a diacriticelor de la „cu sedilă†la „cu virgulăâ€.
+# Actualizare a algoritmului formelor de plural (de la „două†la „treiâ€).
+# NU și a mesajelor traduse (acestea au rămas neschimbate).
+# Eliminare a mesajelor ce-au dispărut în ultima versiune.
+# Actualizări realizate de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>, 15.01.2022.
#
msgid ""
msgstr ""
-"Project-Id-Version: opcodes 2.14rel030712\n"
-"POT-Creation-Date: 2003-07-11 13:56+0930\n"
-"PO-Revision-Date: 2003-07-21 16:53+0300\n"
-"Last-Translator: Eugen Hoanca <eugenh@urban-grafx.ro>\n"
+"Project-Id-Version: opcodes 2.37.90\n"
+"Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n"
+"POT-Creation-Date: 2022-01-22 12:21+0000\n"
+"PO-Revision-Date: 2022-01-23 16:53+0100\n"
+"Last-Translator: Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>\n"
"Language-Team: Romanian <translation-team-ro@lists.sourceforge.net>\n"
-"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Language: ro\n"
"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=ISO-8859-2\n"
+"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2);\n"
+"X-Generator: Poedit 2.3.1\n"
-#: alpha-opc.c:335
-msgid "branch operand unaligned"
-msgstr "ramurã operand nealiniatã"
+#: aarch64-asm.c:821
+msgid "specified register cannot be read from"
+msgstr ""
-#: alpha-opc.c:358 alpha-opc.c:380
-msgid "jump hint unaligned"
-msgstr "sugestie salt(jump) nealiniat"
+#: aarch64-asm.c:830
+msgid "specified register cannot be written to"
+msgstr ""
-#: arc-dis.c:52
-msgid "Illegal limm reference in last instruction!\n"
-msgstr "referinþã limm ilegalã în ultima instrucþiune!\n"
+#. Invalid option.
+#: aarch64-dis.c:94 arc-dis.c:802 arm-dis.c:11670
+#, fuzzy, c-format
+msgid "unrecognised disassembler option: %s"
+msgstr "Opțiune dezasamblor necunsocută: %s\n"
-#: arm-dis.c:554
-msgid "<illegal precision>"
-msgstr "<precizie ilegalã>"
+#: aarch64-dis.c:3395
+#, c-format
+msgid "this `%s' should have an immediately preceding `%s'"
+msgstr ""
-#: arm-dis.c:1162
+#: aarch64-dis.c:3402
#, c-format
-msgid "Unrecognised register name set: %s\n"
-msgstr "Setare nume registru necunoscutã: %s\n"
+msgid "expected `%s' after previous `%s'"
+msgstr ""
+
+#: aarch64-dis.c:3806
+#, fuzzy, c-format
+msgid ""
+"\n"
+"The following AARCH64 specific disassembler options are supported for use\n"
+"with the -M switch (multiple options should be separated by commas):\n"
+msgstr ""
+"\n"
+"Opțiunile MIPS de dezasamblor specifice următoare sunt permise cu folosirea\n"
+"switch-ului -M (opțiunile multiple trebuie separate prin virgulă:\n"
-#: arm-dis.c:1169
+#: aarch64-dis.c:3810
#, c-format
-msgid "Unrecognised disassembler option: %s\n"
-msgstr "Opþiune dezasamblor necunsocutã: %s\n"
+msgid ""
+"\n"
+" no-aliases Don't print instruction aliases.\n"
+msgstr ""
-#: arm-dis.c:1343
+#: aarch64-dis.c:3813
+#, c-format
msgid ""
"\n"
-"The following ARM specific disassembler options are supported for use with\n"
-"the -M switch:\n"
+" aliases Do print instruction aliases.\n"
msgstr ""
+
+#: aarch64-dis.c:3816
+#, c-format
+msgid ""
"\n"
-"Opþiunile ARM de dezasamblor specifice urmãtoare sunt permise cu folosirea\n"
-"switch-ului -M:\n"
+" no-notes Don't print instruction notes.\n"
+msgstr ""
-#: avr-dis.c:117 avr-dis.c:127
-msgid "undefined"
-msgstr "nedefinit(ã)"
+#: aarch64-dis.c:3819
+#, c-format
+msgid ""
+"\n"
+" notes Do print instruction notes.\n"
+msgstr ""
-#: avr-dis.c:179
-msgid "Internal disassembler error"
-msgstr "Eroare internã de dezasamblor"
+#: aarch64-dis.c:3823
+#, c-format
+msgid ""
+"\n"
+" debug_dump Temp switch for debug trace.\n"
+msgstr ""
-#: avr-dis.c:227
+#: aarch64-dis.c:3827 arc-dis.c:1551 arc-dis.c:1572 arc-dis.c:1575
+#: loongarch-dis.c:306 mips-dis.c:2807 mips-dis.c:2817 mips-dis.c:2820
+#: nfp-dis.c:2993 riscv-dis.c:1140 riscv-dis.c:1143
#, c-format
-msgid "unknown constraint `%c'"
-msgstr "constrângere necunoscutã `%c'"
+msgid "\n"
+msgstr "\n"
+
+#: aarch64-opc.c:1365
+#, fuzzy
+msgid "immediate value"
+msgstr "valoare directă(immediate) în afara intervalului"
+
+#: aarch64-opc.c:1375
+msgid "immediate offset"
+msgstr ""
+
+#: aarch64-opc.c:1385
+#, fuzzy
+msgid "register number"
+msgstr "Nume registru greșit"
+
+#: aarch64-opc.c:1395
+#, fuzzy
+msgid "register element index"
+msgstr "Registru greșit în preincrementare"
+
+#: aarch64-opc.c:1405
+msgid "shift amount"
+msgstr ""
+
+#: aarch64-opc.c:1417
+msgid "multiplier"
+msgstr ""
+
+#: aarch64-opc.c:1491
+msgid "reg pair must start from even reg"
+msgstr ""
+
+#: aarch64-opc.c:1497
+msgid "reg pair must be contiguous"
+msgstr ""
+
+#: aarch64-opc.c:1511
+msgid "extraneous register"
+msgstr ""
+
+#: aarch64-opc.c:1517
+msgid "missing register"
+msgstr ""
+
+#: aarch64-opc.c:1528
+msgid "stack pointer register expected"
+msgstr ""
+
+#: aarch64-opc.c:1553
+msgid "z0-z15 expected"
+msgstr ""
+
+#: aarch64-opc.c:1554
+msgid "z0-z7 expected"
+msgstr ""
+
+#: aarch64-opc.c:1580
+#, fuzzy
+msgid "invalid register list"
+msgstr "registru invalid pentru modificare stivă"
+
+#: aarch64-opc.c:1594
+msgid "p0-p7 expected"
+msgstr ""
+
+#: aarch64-opc.c:1620 aarch64-opc.c:1628
+msgid "unexpected address writeback"
+msgstr ""
+
+#: aarch64-opc.c:1639
+msgid "address writeback expected"
+msgstr ""
+
+#: aarch64-opc.c:1686
+msgid "negative or unaligned offset expected"
+msgstr ""
+
+#: aarch64-opc.c:1743
+#, fuzzy
+msgid "invalid register offset"
+msgstr "registru invalid pentru modificare stivă"
+
+#: aarch64-opc.c:1765
+msgid "invalid post-increment amount"
+msgstr ""
+
+#: aarch64-opc.c:1781 aarch64-opc.c:2299
+msgid "invalid shift amount"
+msgstr ""
+
+#: aarch64-opc.c:1794
+#, fuzzy
+msgid "invalid extend/shift operator"
+msgstr "opțiune condițională invalidă"
+
+#: aarch64-opc.c:1840 aarch64-opc.c:2101 aarch64-opc.c:2136 aarch64-opc.c:2155
+#: aarch64-opc.c:2163 aarch64-opc.c:2252 aarch64-opc.c:2429 aarch64-opc.c:2529
+#: aarch64-opc.c:2542
+#, fuzzy
+msgid "immediate out of range"
+msgstr "valoare directă(immediate) în afara intervalului"
+
+#: aarch64-opc.c:1870 aarch64-opc.c:1912 aarch64-opc.c:1975 aarch64-opc.c:2009
+msgid "invalid addressing mode"
+msgstr ""
+
+#: aarch64-opc.c:1967
+#, fuzzy
+msgid "index register xzr is not allowed"
+msgstr "registru index în interval de încărcare"
+
+#: aarch64-opc.c:2089 aarch64-opc.c:2111 aarch64-opc.c:2332 aarch64-opc.c:2340
+#: aarch64-opc.c:2406 aarch64-opc.c:2435
+#, fuzzy
+msgid "invalid shift operator"
+msgstr "opțiune condițională invalidă"
+
+#: aarch64-opc.c:2095
+msgid "shift amount must be 0 or 12"
+msgstr ""
+
+#: aarch64-opc.c:2118
+#, fuzzy
+msgid "shift amount must be a multiple of 16"
+msgstr "offsetul nu este multiplu de 16"
+
+#: aarch64-opc.c:2130
+#, fuzzy
+msgid "negative immediate value not allowed"
+msgstr "valoare directă(immediate) în afara intervalului"
+
+#: aarch64-opc.c:2263
+msgid "immediate zero expected"
+msgstr ""
+
+#: aarch64-opc.c:2277
+msgid "rotate expected to be 0, 90, 180 or 270"
+msgstr ""
+
+#: aarch64-opc.c:2288
+msgid "rotate expected to be 90 or 270"
+msgstr ""
+
+#: aarch64-opc.c:2348
+msgid "shift is not permitted"
+msgstr ""
+
+#: aarch64-opc.c:2373
+msgid "invalid value for immediate"
+msgstr ""
+
+#: aarch64-opc.c:2398
+msgid "shift amount must be 0 or 16"
+msgstr ""
+
+#: aarch64-opc.c:2419
+msgid "floating-point immediate expected"
+msgstr ""
+
+#: aarch64-opc.c:2453
+msgid "no shift amount allowed for 8-bit constants"
+msgstr ""
+
+#: aarch64-opc.c:2463
+msgid "shift amount must be 0 or 8"
+msgstr ""
+
+#: aarch64-opc.c:2476
+msgid "immediate too big for element size"
+msgstr ""
-#: cgen-asm.c:348 fr30-ibld.c:195 frv-ibld.c:195 ip2k-ibld.c:195
-#: iq2000-ibld.c:195 m32r-ibld.c:195 openrisc-ibld.c:195 xstormy16-ibld.c:195
+#: aarch64-opc.c:2483
+msgid "invalid arithmetic immediate"
+msgstr ""
+
+#: aarch64-opc.c:2497
+msgid "floating-point value must be 0.5 or 1.0"
+msgstr ""
+
+#: aarch64-opc.c:2507
+msgid "floating-point value must be 0.5 or 2.0"
+msgstr ""
+
+#: aarch64-opc.c:2517
+msgid "floating-point value must be 0.0 or 1.0"
+msgstr ""
+
+#: aarch64-opc.c:2548
+msgid "invalid replicated MOV immediate"
+msgstr ""
+
+#: aarch64-opc.c:2656
+msgid "extend operator expected"
+msgstr ""
+
+#: aarch64-opc.c:2669
+msgid "missing extend operator"
+msgstr ""
+
+#: aarch64-opc.c:2675
+msgid "'LSL' operator not allowed"
+msgstr ""
+
+#: aarch64-opc.c:2696
+#, fuzzy
+msgid "W register expected"
+msgstr "Nume registru greșit"
+
+#: aarch64-opc.c:2707
+msgid "shift operator expected"
+msgstr ""
+
+#: aarch64-opc.c:2714
+msgid "'ROR' operator not allowed"
+msgstr ""
+
+#: aarch64-opc.c:3852
+msgid "reading from a write-only register"
+msgstr ""
+
+#: aarch64-opc.c:3854
+msgid "writing to a read-only register"
+msgstr ""
+
+#: aarch64-opc.c:5445
+#, fuzzy
+msgid "the three register operands must be distinct from one another"
+msgstr "operanzii regiștri sursă și destinație trebuie să fie diferiți"
+
+#: aarch64-opc.c:5556
+msgid "destination register differs from preceding instruction"
+msgstr ""
+
+#: aarch64-opc.c:5559
+#, fuzzy
+msgid "source register differs from preceding instruction"
+msgstr "formă de instrucțiune necunoscută"
+
+#: aarch64-opc.c:5562
+#, fuzzy
+msgid "size register differs from preceding instruction"
+msgstr "formă de instrucțiune necunoscută"
+
+#: aarch64-opc.c:5610
+msgid "instruction opens new dependency sequence without ending previous one"
+msgstr ""
+
+#: aarch64-opc.c:5639
+msgid "previous `movprfx' sequence not closed"
+msgstr ""
+
+#: aarch64-opc.c:5658
+msgid "SVE instruction expected after `movprfx'"
+msgstr ""
+
+#: aarch64-opc.c:5671
+msgid "SVE `movprfx' compatible instruction expected"
+msgstr ""
+
+#: aarch64-opc.c:5759
+msgid "predicated instruction expected after `movprfx'"
+msgstr ""
+
+#: aarch64-opc.c:5771
+msgid "merging predicate expected due to preceding `movprfx'"
+msgstr ""
+
+#: aarch64-opc.c:5783
+msgid "predicate register differs from that in preceding `movprfx'"
+msgstr ""
+
+#: aarch64-opc.c:5802
+msgid "output register of preceding `movprfx' not used in current instruction"
+msgstr ""
+
+#: aarch64-opc.c:5815
+msgid "output register of preceding `movprfx' expected as output"
+msgstr ""
+
+#: aarch64-opc.c:5827
+msgid "output register of preceding `movprfx' used as input"
+msgstr ""
+
+#: aarch64-opc.c:5843
+msgid "register size not compatible with previous `movprfx'"
+msgstr ""
+
+#: alpha-opc.c:154
+msgid "branch operand unaligned"
+msgstr "ramură operand nealiniată"
+
+#: alpha-opc.c:170 alpha-opc.c:186
+msgid "jump hint unaligned"
+msgstr "sugestie salt(jump) nealiniat"
+
+#: arc-dis.c:379
+msgid ""
+"\n"
+"Warning: disassembly may be wrong due to guessed opcode class choice.\n"
+"Use -M<class[,class]> to select the correct opcode class(es).\n"
+"\t\t\t\t"
+msgstr ""
+
+#: arc-dis.c:440
+msgid "An error occurred while generating the extension instruction operations"
+msgstr ""
+
+#: arc-dis.c:845
+#, fuzzy, c-format
+msgid "unrecognised disassembler CPU option: %s"
+msgstr "Opțiune dezasamblor necunsocută: %s\n"
+
+#: arc-dis.c:1283
+msgid ""
+"\n"
+"Warning: illegal use of double register pair.\n"
+msgstr ""
+
+#: arc-dis.c:1433
+msgid "Enforce the designated architecture while decoding."
+msgstr ""
+
+#: arc-dis.c:1435
+#, fuzzy
+msgid "Recognize DSP instructions."
+msgstr "instrucțiune necunoscută"
+
+#: arc-dis.c:1437
+#, fuzzy
+msgid "Recognize FPX SP instructions."
+msgstr "instrucțiune necunoscută"
+
+#: arc-dis.c:1439
+#, fuzzy
+msgid "Recognize FPX DP instructions."
+msgstr "instrucțiune necunoscută"
+
+#: arc-dis.c:1441
+#, fuzzy
+msgid "Recognize FPU QuarkSE-EM instructions."
+msgstr "instrucțiune necunoscută"
+
+#: arc-dis.c:1443
+#, fuzzy
+msgid "Recognize double assist FPU instructions."
+msgstr "instrucțiune necunoscută"
+
+#: arc-dis.c:1445
+#, fuzzy
+msgid "Recognize single precision FPU instructions."
+msgstr "formă de instrucțiune necunoscută"
+
+#: arc-dis.c:1447
+#, fuzzy
+msgid "Recognize double precision FPU instructions."
+msgstr "formă de instrucțiune necunoscută"
+
+#: arc-dis.c:1449
+#, fuzzy
+msgid "Recognize NPS400 instructions."
+msgstr "instrucțiune necunoscută"
+
+#: arc-dis.c:1451
+msgid "Use only hexadecimal number to print immediates."
+msgstr ""
+
+#: arc-dis.c:1526
+#, fuzzy, c-format
+msgid ""
+"\n"
+"The following ARC specific disassembler options are supported for use \n"
+"with the -M switch (multiple options should be separated by commas):\n"
+msgstr ""
+"\n"
+"Opțiunile MIPS de dezasamblor specifice următoare sunt permise cu folosirea\n"
+"switch-ului -M (opțiunile multiple trebuie separate prin virgulă:\n"
+
+#: arc-dis.c:1558 mips-dis.c:2812 riscv-dis.c:1135
+#, fuzzy, c-format
+msgid ""
+"\n"
+" For the options above, the following values are supported for \"%s\":\n"
+" "
+msgstr ""
+"\n"
+" Pentru opțiunile de mai sus, urmatoarele valori sunt suportate pentru \"ABI\":\n"
+" "
+
+#: arc-dis.c:1568
#, c-format
-msgid "operand out of range (%ld not between %ld and %ld)"
-msgstr "operand în afara intervalului (%ld nu este între %ld ºi %ld)"
+msgid ""
+"\n"
+" "
+msgstr ""
+
+#: arc-opc.c:41 arc-opc.c:64 arc-opc.c:90 arc-opc.c:114
+msgid "LP_COUNT register cannot be used as destination register"
+msgstr ""
+
+#: arc-opc.c:88
+msgid "cannot use odd number destination register"
+msgstr ""
+
+#: arc-opc.c:101 arc-opc.c:112
+msgid "cannot use odd number source register"
+msgstr ""
+
+#: arc-opc.c:127
+#, fuzzy
+msgid "operand is not zero"
+msgstr "Operandul nu este simbol"
+
+#: arc-opc.c:186
+msgid "register R30 is a limm indicator"
+msgstr ""
+
+#: arc-opc.c:188
+#, fuzzy
+msgid "register out of range"
+msgstr "valoare în afara intervalului"
+
+#: arc-opc.c:207
+#, fuzzy
+msgid "register must be R0"
+msgstr "numărul registrului trebuie să fie par"
+
+#: arc-opc.c:225
+#, fuzzy
+msgid "register must be R1"
+msgstr "numărul registrului trebuie să fie par"
+
+#: arc-opc.c:242
+#, fuzzy
+msgid "register must be R2"
+msgstr "numărul registrului trebuie să fie par"
+
+#: arc-opc.c:259
+#, fuzzy
+msgid "register must be R3"
+msgstr "numărul registrului trebuie să fie par"
+
+#: arc-opc.c:276
+#, fuzzy
+msgid "register must be SP"
+msgstr "numărul registrului trebuie să fie par"
+
+#: arc-opc.c:293
+#, fuzzy
+msgid "register must be GP"
+msgstr "numărul registrului trebuie să fie par"
+
+#: arc-opc.c:310
+#, fuzzy
+msgid "register must be PCL"
+msgstr "numărul registrului trebuie să fie par"
+
+#: arc-opc.c:327
+#, fuzzy
+msgid "register must be BLINK"
+msgstr "numărul registrului trebuie să fie par"
+
+#: arc-opc.c:344
+#, fuzzy
+msgid "register must be ILINK1"
+msgstr "numărul registrului trebuie să fie par"
+
+#: arc-opc.c:361
+#, fuzzy
+msgid "register must be ILINK2"
+msgstr "numărul registrului trebuie să fie par"
+
+#. ARC NPS400 Support: See comment near head of file.
+#: arc-opc.c:392 arc-opc.c:430 arc-opc.c:468 arc-opc.c:737
+msgid "register must be either r0-r3 or r12-r15"
+msgstr ""
+
+#: arc-opc.c:519
+msgid "accepted values are from -1 to 6"
+msgstr ""
+
+#: arc-opc.c:548
+msgid "first register of the range should be r13"
+msgstr ""
+
+#: arc-opc.c:550
+msgid "last register of the range doesn't fit"
+msgstr ""
+
+#: arc-opc.c:570 arc-opc.c:585
+#, fuzzy
+msgid "invalid register number, should be fp"
+msgstr "numărul registrului trebuie să fie par"
-#: cgen-asm.c:369
+#: arc-opc.c:607
+#, fuzzy
+msgid "invalid register number, should be blink"
+msgstr "numărul registrului trebuie să fie par"
+
+#: arc-opc.c:629
+#, fuzzy
+msgid "invalid register number, should be pcl"
+msgstr "numărul registrului trebuie să fie par"
+
+#: arc-opc.c:785
+msgid "invalid size, should be 1, 2, 4, or 8"
+msgstr ""
+
+#: arc-opc.c:830
+msgid "invalid immediate, must be 1, 2, or 4"
+msgstr ""
+
+#: arc-opc.c:869
+msgid "invalid value for CMEM ld/st immediate"
+msgstr ""
+
+#: arc-opc.c:896
+msgid "invalid position, should be 0, 16, 32, 48 or 64."
+msgstr ""
+
+#: arc-opc.c:930
+msgid "invalid position, should be 16, 32, 64 or 128."
+msgstr ""
+
+#: arc-opc.c:952
+#, fuzzy
+msgid "invalid size value must be on range 1-64."
+msgstr "valoare directă(immediate) în afara intervalului"
+
+#: arc-opc.c:983
+msgid "invalid position, should be 0, 8, 16, or 24"
+msgstr ""
+
+#: arc-opc.c:1008
+#, fuzzy
+msgid "invalid size, value must be "
+msgstr "valoarea directă(immediate) trebuie să fie pară"
+
+#: arc-opc.c:1082
+#, fuzzy
+msgid "value out of range 1 - 256"
+msgstr "valoare în afara intervalului"
+
+#: arc-opc.c:1091
+msgid "value must be power of 2"
+msgstr ""
+
+#: arc-opc.c:1144
+msgid "value must be in the range 0 to 28"
+msgstr ""
+
+#: arc-opc.c:1166
+#, fuzzy
+msgid "value must be in the range 1 to "
+msgstr "valoare în afara intervalului"
+
+#: arc-opc.c:1196
+msgid "value must be in the range 0 to 240"
+msgstr ""
+
+#: arc-opc.c:1198
+#, fuzzy
+msgid "value must be a multiple of 16"
+msgstr "offsetul nu este multiplu de 16"
+
+#: arc-opc.c:1218
+#, fuzzy
+msgid "invalid address type for operand"
+msgstr "registru de operand invalid în updatare"
+
+#: arc-opc.c:1252
+msgid "value must be in the range 0 to 31"
+msgstr ""
+
+#: arc-opc.c:1277
+msgid "invalid position, should be one of: 0,4,8,...124."
+msgstr ""
+
+#: arm-dis.c:5204
+#, fuzzy
+msgid "Select raw register names"
+msgstr "Nume registru greșit"
+
+#: arm-dis.c:5206
+msgid "Select register names used by GCC"
+msgstr ""
+
+#: arm-dis.c:5208
+msgid "Select register names used in ARM's ISA documentation"
+msgstr ""
+
+#: arm-dis.c:5210
+msgid "Assume all insns are Thumb insns"
+msgstr ""
+
+#: arm-dis.c:5211
+msgid "Examine preceding label to determine an insn's type"
+msgstr ""
+
+#: arm-dis.c:5212
+msgid "Select register names used in the APCS"
+msgstr ""
+
+#: arm-dis.c:5214
+msgid "Select register names used in the ATPCS"
+msgstr ""
+
+#: arm-dis.c:5216
+msgid "Select special register names used in the ATPCS"
+msgstr ""
+
+#: arm-dis.c:5218
+msgid "Enable CDE extensions for coprocessor N space"
+msgstr ""
+
+#: arm-dis.c:8390
+msgid "<illegal precision>"
+msgstr "<precizie ilegală>"
+
+#: arm-dis.c:11631
+#, fuzzy, c-format
+msgid "unrecognised register name set: %s"
+msgstr "Setare nume registru necunoscută: %s\n"
+
+#: arm-dis.c:11645
#, c-format
-msgid "operand out of range (%lu not between %lu and %lu)"
-msgstr "operand în afara intervalului (%lu nu este între %lu ºi %lu)"
+msgid "cde coprocessor not between 0-7: %s"
+msgstr ""
-#: d30v-dis.c:312
+#: arm-dis.c:11651
#, c-format
-msgid "<unknown register %d>"
-msgstr "<registru necunoscut %d>"
+msgid "coproc must have an argument: %s"
+msgstr ""
-#. Can't happen.
-#: dis-buf.c:57
+#: arm-dis.c:11664
#, c-format
-msgid "Unknown error %d\n"
-msgstr "Eroare necunoscutã %d\n"
+msgid "coprocN argument takes options \"generic\", \"cde\", or \"CDE\": %s"
+msgstr ""
-#: dis-buf.c:62
+#: arm-dis.c:12374
#, c-format
-msgid "Address 0x%x is out of bounds.\n"
-msgstr "Adresa 0x%x este peste limite (out of bounds).\n"
+msgid ""
+"\n"
+"The following ARM specific disassembler options are supported for use with\n"
+"the -M switch:\n"
+msgstr ""
+"\n"
+"Opțiunile ARM de dezasamblor specifice următoare sunt permise cu folosirea\n"
+"switch-ului -M:\n"
-#: fr30-asm.c:323 frv-asm.c:626 ip2k-asm.c:574 iq2000-asm.c:460 m32r-asm.c:325
-#: openrisc-asm.c:261 xstormy16-asm.c:284
+#: avr-dis.c:124 avr-dis.c:145
#, c-format
-msgid "Unrecognized field %d while parsing.\n"
-msgstr "Câmp necunoscut %d în analizã(parsing).\n"
+msgid "undefined"
+msgstr "nedefinit(ă)"
+
+#: avr-dis.c:236
+#, fuzzy, c-format
+msgid "internal disassembler error"
+msgstr "<eroare internă de dezasamblor>"
-#: fr30-asm.c:373 frv-asm.c:676 ip2k-asm.c:624 iq2000-asm.c:510 m32r-asm.c:375
-#: openrisc-asm.c:311 xstormy16-asm.c:334
+#: avr-dis.c:290
+#, c-format
+msgid "unknown constraint `%c'"
+msgstr "constrângere necunoscută `%c'"
+
+#: bpf-asm.c:97
+msgid "expected 16, 32 or 64 in"
+msgstr ""
+
+#: bpf-asm.c:181 epiphany-asm.c:456 fr30-asm.c:311 frv-asm.c:1264
+#: ip2k-asm.c:512 iq2000-asm.c:460 lm32-asm.c:350 m32c-asm.c:1585
+#: m32r-asm.c:329 mep-asm.c:1287 mt-asm.c:596 or1k-asm.c:576 xc16x-asm.c:377
+#: xstormy16-asm.c:277
+#, fuzzy, c-format
+msgid "internal error: unrecognized field %d while parsing"
+msgstr "Câmp necunoscut %d în analiză(parsing).\n"
+
+#: bpf-asm.c:233 epiphany-asm.c:508 fr30-asm.c:363 frv-asm.c:1316
+#: ip2k-asm.c:564 iq2000-asm.c:512 lm32-asm.c:402 m32c-asm.c:1637
+#: m32r-asm.c:381 mep-asm.c:1339 mt-asm.c:648 or1k-asm.c:628 xc16x-asm.c:429
+#: xstormy16-asm.c:329
msgid "missing mnemonic in syntax string"
-msgstr "mnemonicã lipsã în sintaxã"
+msgstr "mnemonică lipsă în sintaxă"
#. We couldn't parse it.
-#: fr30-asm.c:509 fr30-asm.c:513 fr30-asm.c:600 fr30-asm.c:702 frv-asm.c:812
-#: frv-asm.c:816 frv-asm.c:903 frv-asm.c:1005 ip2k-asm.c:760 ip2k-asm.c:764
-#: ip2k-asm.c:851 ip2k-asm.c:953 iq2000-asm.c:646 iq2000-asm.c:650
-#: iq2000-asm.c:737 iq2000-asm.c:839 m32r-asm.c:511 m32r-asm.c:515
-#: m32r-asm.c:602 m32r-asm.c:704 openrisc-asm.c:447 openrisc-asm.c:451
-#: openrisc-asm.c:538 openrisc-asm.c:640 xstormy16-asm.c:470
-#: xstormy16-asm.c:474 xstormy16-asm.c:561 xstormy16-asm.c:663
+#: bpf-asm.c:368 bpf-asm.c:372 bpf-asm.c:461 bpf-asm.c:568 epiphany-asm.c:643
+#: epiphany-asm.c:647 epiphany-asm.c:736 epiphany-asm.c:843 fr30-asm.c:498
+#: fr30-asm.c:502 fr30-asm.c:591 fr30-asm.c:698 frv-asm.c:1451 frv-asm.c:1455
+#: frv-asm.c:1544 frv-asm.c:1651 ip2k-asm.c:699 ip2k-asm.c:703 ip2k-asm.c:792
+#: ip2k-asm.c:899 iq2000-asm.c:647 iq2000-asm.c:651 iq2000-asm.c:740
+#: iq2000-asm.c:847 lm32-asm.c:537 lm32-asm.c:541 lm32-asm.c:630
+#: lm32-asm.c:737 m32c-asm.c:1772 m32c-asm.c:1776 m32c-asm.c:1865
+#: m32c-asm.c:1972 m32r-asm.c:516 m32r-asm.c:520 m32r-asm.c:609 m32r-asm.c:716
+#: mep-asm.c:1474 mep-asm.c:1478 mep-asm.c:1567 mep-asm.c:1674 mt-asm.c:783
+#: mt-asm.c:787 mt-asm.c:876 mt-asm.c:983 or1k-asm.c:763 or1k-asm.c:767
+#: or1k-asm.c:856 or1k-asm.c:963 xc16x-asm.c:564 xc16x-asm.c:568
+#: xc16x-asm.c:657 xc16x-asm.c:764 xstormy16-asm.c:464 xstormy16-asm.c:468
+#: xstormy16-asm.c:557 xstormy16-asm.c:664
msgid "unrecognized instruction"
-msgstr "instrucþiune necunoscutã"
+msgstr "instrucțiune necunoscută"
-#: fr30-asm.c:556 frv-asm.c:859 ip2k-asm.c:807 iq2000-asm.c:693 m32r-asm.c:558
-#: openrisc-asm.c:494 xstormy16-asm.c:517
+#: bpf-asm.c:415 epiphany-asm.c:690 fr30-asm.c:545 frv-asm.c:1498
+#: ip2k-asm.c:746 iq2000-asm.c:694 lm32-asm.c:584 m32c-asm.c:1819
+#: m32r-asm.c:563 mep-asm.c:1521 mt-asm.c:830 or1k-asm.c:810 xc16x-asm.c:611
+#: xstormy16-asm.c:511
#, c-format
msgid "syntax error (expected char `%c', found `%c')"
-msgstr "eroare de sintaxã ( se aºtepta %c', s-a primit `%c')"
+msgstr "eroare de sintaxă ( se aștepta %c', s-a primit `%c')"
-#: fr30-asm.c:566 frv-asm.c:869 ip2k-asm.c:817 iq2000-asm.c:703 m32r-asm.c:568
-#: openrisc-asm.c:504 xstormy16-asm.c:527
+#: bpf-asm.c:425 epiphany-asm.c:700 fr30-asm.c:555 frv-asm.c:1508
+#: ip2k-asm.c:756 iq2000-asm.c:704 lm32-asm.c:594 m32c-asm.c:1829
+#: m32r-asm.c:573 mep-asm.c:1531 mt-asm.c:840 or1k-asm.c:820 xc16x-asm.c:621
+#: xstormy16-asm.c:521
#, c-format
msgid "syntax error (expected char `%c', found end of instruction)"
-msgstr "eroare de sintaxã (s-a aºteptat char `%c' s-a primit sfârºit de instrucþiune)"
+msgstr "eroare de sintaxă (s-a așteptat char `%c' s-a primit sfârșit de instrucțiune)"
-#: fr30-asm.c:594 frv-asm.c:897 ip2k-asm.c:845 iq2000-asm.c:731 m32r-asm.c:596
-#: openrisc-asm.c:532 xstormy16-asm.c:555
+#: bpf-asm.c:455 epiphany-asm.c:730 fr30-asm.c:585 frv-asm.c:1538
+#: ip2k-asm.c:786 iq2000-asm.c:734 lm32-asm.c:624 m32c-asm.c:1859
+#: m32r-asm.c:603 mep-asm.c:1561 mt-asm.c:870 or1k-asm.c:850 xc16x-asm.c:651
+#: xstormy16-asm.c:551
msgid "junk at end of line"
-msgstr "resturi(junk) la sfârºit de linie"
+msgstr "resturi(junk) la sfârșit de linie"
-#: fr30-asm.c:701 frv-asm.c:1004 ip2k-asm.c:952 iq2000-asm.c:838
-#: m32r-asm.c:703 openrisc-asm.c:639 xstormy16-asm.c:662
+#: bpf-asm.c:567 epiphany-asm.c:842 fr30-asm.c:697 frv-asm.c:1650
+#: ip2k-asm.c:898 iq2000-asm.c:846 lm32-asm.c:736 m32c-asm.c:1971
+#: m32r-asm.c:715 mep-asm.c:1673 mt-asm.c:982 or1k-asm.c:962 xc16x-asm.c:763
+#: xstormy16-asm.c:663
msgid "unrecognized form of instruction"
-msgstr "formã de instrucþiune necunoscutã"
+msgstr "formă de instrucțiune necunoscută"
-#: fr30-asm.c:713 frv-asm.c:1016 ip2k-asm.c:964 iq2000-asm.c:850
-#: m32r-asm.c:715 openrisc-asm.c:651 xstormy16-asm.c:674
+#: bpf-asm.c:581 epiphany-asm.c:856 fr30-asm.c:711 frv-asm.c:1664
+#: ip2k-asm.c:912 iq2000-asm.c:860 lm32-asm.c:750 m32c-asm.c:1985
+#: m32r-asm.c:729 mep-asm.c:1687 mt-asm.c:996 or1k-asm.c:976 xc16x-asm.c:777
+#: xstormy16-asm.c:677
#, c-format
msgid "bad instruction `%.50s...'"
-msgstr "instrucþiune greºitã ``%.50s...'"
+msgstr "instrucțiune greșită ``%.50s...'"
-#: fr30-asm.c:716 frv-asm.c:1019 ip2k-asm.c:967 iq2000-asm.c:853
-#: m32r-asm.c:718 openrisc-asm.c:654 xstormy16-asm.c:677
+#: bpf-asm.c:584 epiphany-asm.c:859 fr30-asm.c:714 frv-asm.c:1667
+#: ip2k-asm.c:915 iq2000-asm.c:863 lm32-asm.c:753 m32c-asm.c:1988
+#: m32r-asm.c:732 mep-asm.c:1690 mt-asm.c:999 or1k-asm.c:979 xc16x-asm.c:780
+#: xstormy16-asm.c:680
#, c-format
msgid "bad instruction `%.50s'"
-msgstr "instrucþiune greºitã `%.50s'"
+msgstr "instrucțiune greșită `%.50s'"
+
+#: bpf-desc.c:1768
+#, c-format
+msgid "internal error: bpf_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
+msgstr ""
+
+#: bpf-desc.c:1856
+#, c-format
+msgid "internal error: bpf_cgen_cpu_open: unsupported argument `%d'"
+msgstr ""
+
+#: bpf-desc.c:1875
+#, c-format
+msgid "internal error: bpf_cgen_cpu_open: no endianness specified"
+msgstr ""
#. Default text to print if an instruction isn't recognized.
-#: fr30-dis.c:41 frv-dis.c:41 ip2k-dis.c:41 iq2000-dis.c:41 m32r-dis.c:41
-#: mmix-dis.c:284 openrisc-dis.c:41 xstormy16-dis.c:41
+#: bpf-dis.c:41 epiphany-dis.c:41 fr30-dis.c:41 frv-dis.c:41 ip2k-dis.c:41
+#: iq2000-dis.c:41 lm32-dis.c:41 m32c-dis.c:41 m32r-dis.c:41 mep-dis.c:41
+#: mmix-dis.c:293 mt-dis.c:41 nds32-dis.c:64 or1k-dis.c:41 xc16x-dis.c:41
+#: xstormy16-dis.c:41
msgid "*unknown*"
-msgstr "*necunoscut(ã)*"
+msgstr "*necunoscut(ă)*"
-#: fr30-dis.c:320 frv-dis.c:371 ip2k-dis.c:329 iq2000-dis.c:192 m32r-dis.c:251
-#: openrisc-dis.c:138 xstormy16-dis.c:171
-#, c-format
-msgid "Unrecognized field %d while printing insn.\n"
-msgstr "Câmp necunoscut %d în tipãrire insn.\n"
+#: bpf-dis.c:203 epiphany-dis.c:279 fr30-dis.c:300 frv-dis.c:397
+#: ip2k-dis.c:289 iq2000-dis.c:190 lm32-dis.c:148 m32c-dis.c:892
+#: m32r-dis.c:280 mep-dis.c:1188 mt-dis.c:291 or1k-dis.c:175 xc16x-dis.c:421
+#: xstormy16-dis.c:169
+#, fuzzy, c-format
+msgid "internal error: unrecognized field %d while printing insn"
+msgstr "Câmp necunoscut %d în tipărire insn.\n"
-#: fr30-ibld.c:166 frv-ibld.c:166 ip2k-ibld.c:166 iq2000-ibld.c:166
-#: m32r-ibld.c:166 openrisc-ibld.c:166 xstormy16-ibld.c:166
+#: bpf-ibld.c:166 epiphany-ibld.c:166 fr30-ibld.c:166 frv-ibld.c:166
+#: ip2k-ibld.c:166 iq2000-ibld.c:166 lm32-ibld.c:166 m32c-ibld.c:166
+#: m32r-ibld.c:166 mep-ibld.c:166 mt-ibld.c:166 or1k-ibld.c:166
+#: xc16x-ibld.c:166 xstormy16-ibld.c:166
#, c-format
msgid "operand out of range (%ld not between %ld and %lu)"
-msgstr "operand în afara limitelor (%ld nu este între %ld ºi %lu)"
+msgstr "operand în afara limitelor (%ld nu este între %ld și %lu)"
-#: fr30-ibld.c:179 frv-ibld.c:179 ip2k-ibld.c:179 iq2000-ibld.c:179
-#: m32r-ibld.c:179 openrisc-ibld.c:179 xstormy16-ibld.c:179
+#: bpf-ibld.c:187 epiphany-ibld.c:187 fr30-ibld.c:187 frv-ibld.c:187
+#: ip2k-ibld.c:187 iq2000-ibld.c:187 lm32-ibld.c:187 m32c-ibld.c:187
+#: m32r-ibld.c:187 mep-ibld.c:187 mt-ibld.c:187 or1k-ibld.c:187
+#: xc16x-ibld.c:187 xstormy16-ibld.c:187
+#, fuzzy, c-format
+msgid "operand out of range (0x%lx not between 0 and 0x%lx)"
+msgstr "operand în afara limitelor (%lu nu este între 0 și %lu)"
+
+#: bpf-ibld.c:203 cgen-asm.c:351 epiphany-ibld.c:203 fr30-ibld.c:203
+#: frv-ibld.c:203 ip2k-ibld.c:203 iq2000-ibld.c:203 lm32-ibld.c:203
+#: m32c-ibld.c:203 m32r-ibld.c:203 mep-ibld.c:203 mt-ibld.c:203
+#: or1k-ibld.c:203 xc16x-ibld.c:203 xstormy16-ibld.c:203
#, c-format
-msgid "operand out of range (%lu not between 0 and %lu)"
-msgstr "operand în afara limitelor (%lu nu este între 0 ºi %lu)"
+msgid "operand out of range (%ld not between %ld and %ld)"
+msgstr "operand în afara intervalului (%ld nu este între %ld și %ld)"
+
+#: bpf-ibld.c:630 epiphany-ibld.c:885 fr30-ibld.c:740 frv-ibld.c:866
+#: ip2k-ibld.c:617 iq2000-ibld.c:723 lm32-ibld.c:644 m32c-ibld.c:1741
+#: m32r-ibld.c:675 mep-ibld.c:1218 mt-ibld.c:759 or1k-ibld.c:738
+#: xc16x-ibld.c:762 xstormy16-ibld.c:688
+#, fuzzy, c-format
+msgid "internal error: unrecognized field %d while building insn"
+msgstr "Câmp necunoscut %d în construire(building) insn.\n"
+
+#: bpf-ibld.c:714 epiphany-ibld.c:1180 fr30-ibld.c:946 frv-ibld.c:1184
+#: ip2k-ibld.c:693 iq2000-ibld.c:899 lm32-ibld.c:749 m32c-ibld.c:2903
+#: m32r-ibld.c:813 mep-ibld.c:1818 mt-ibld.c:980 or1k-ibld.c:897
+#: xc16x-ibld.c:983 xstormy16-ibld.c:835
+#, fuzzy, c-format
+msgid "internal error: unrecognized field %d while decoding insn"
+msgstr "Câmp necunoscut %d în decodare insn.\n"
+
+#: bpf-ibld.c:783 epiphany-ibld.c:1324 fr30-ibld.c:1093 frv-ibld.c:1463
+#: ip2k-ibld.c:768 iq2000-ibld.c:1031 lm32-ibld.c:839 m32c-ibld.c:3521
+#: m32r-ibld.c:927 mep-ibld.c:2289 mt-ibld.c:1181 or1k-ibld.c:993
+#: xc16x-ibld.c:1205 xstormy16-ibld.c:946
+#, fuzzy, c-format
+msgid "internal error: unrecognized field %d while getting int operand"
+msgstr "Câmp necunoscut %d în preluare operand int.\n"
+
+#: bpf-ibld.c:834 epiphany-ibld.c:1450 fr30-ibld.c:1222 frv-ibld.c:1724
+#: ip2k-ibld.c:825 iq2000-ibld.c:1145 lm32-ibld.c:911 m32c-ibld.c:4121
+#: m32r-ibld.c:1023 mep-ibld.c:2742 mt-ibld.c:1364 or1k-ibld.c:1071
+#: xc16x-ibld.c:1409 xstormy16-ibld.c:1039
+#, fuzzy, c-format
+msgid "internal error: unrecognized field %d while getting vma operand"
+msgstr "Câmp necunoscut %d în preluare operand vma.\n"
+
+#: bpf-ibld.c:892 epiphany-ibld.c:1583 fr30-ibld.c:1354 frv-ibld.c:1992
+#: ip2k-ibld.c:885 iq2000-ibld.c:1266 lm32-ibld.c:990 m32c-ibld.c:4709
+#: m32r-ibld.c:1125 mep-ibld.c:3156 mt-ibld.c:1554 or1k-ibld.c:1156
+#: xc16x-ibld.c:1614 xstormy16-ibld.c:1139
+#, fuzzy, c-format
+msgid "internal error: unrecognized field %d while setting int operand"
+msgstr "Câmp necunoscut %d în setare operand int.\n"
+
+#: bpf-ibld.c:940 epiphany-ibld.c:1706 fr30-ibld.c:1476 frv-ibld.c:2250
+#: ip2k-ibld.c:935 iq2000-ibld.c:1377 lm32-ibld.c:1059 m32c-ibld.c:5287
+#: m32r-ibld.c:1217 mep-ibld.c:3560 mt-ibld.c:1734 or1k-ibld.c:1231
+#: xc16x-ibld.c:1809 xstormy16-ibld.c:1229
+#, fuzzy, c-format
+msgid "internal error: unrecognized field %d while setting vma operand"
+msgstr "Câmp necunoscut %d în setare operand vma.\n"
+
+#: cgen-asm.c:373
+#, c-format
+msgid "operand out of range (%lu not between %lu and %lu)"
+msgstr "operand în afara intervalului (%lu nu este între %lu și %lu)"
-#: fr30-ibld.c:730 frv-ibld.c:829 ip2k-ibld.c:607 iq2000-ibld.c:713
-#: m32r-ibld.c:659 openrisc-ibld.c:633 xstormy16-ibld.c:678
+#: cris-desc.c:2622
#, c-format
-msgid "Unrecognized field %d while building insn.\n"
-msgstr "Câmp necunoscut %d în construire(building) insn.\n"
+msgid "internal error: cris_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
+msgstr ""
-#: fr30-ibld.c:937 frv-ibld.c:1121 ip2k-ibld.c:684 iq2000-ibld.c:890
-#: m32r-ibld.c:792 openrisc-ibld.c:735 xstormy16-ibld.c:826
+#: cris-desc.c:2710
#, c-format
-msgid "Unrecognized field %d while decoding insn.\n"
-msgstr "Câmp necunoscut %d în decodare insn.\n"
+msgid "internal error: cris_cgen_cpu_open: unsupported argument `%d'"
+msgstr ""
-#: fr30-ibld.c:1086 frv-ibld.c:1375 ip2k-ibld.c:761 iq2000-ibld.c:1024
-#: m32r-ibld.c:902 openrisc-ibld.c:815 xstormy16-ibld.c:939
+#: cris-desc.c:2729
#, c-format
-msgid "Unrecognized field %d while getting int operand.\n"
-msgstr "Câmp necunoscut %d în preluare operand int.\n"
+msgid "internal error: cris_cgen_cpu_open: no endianness specified"
+msgstr ""
+
+#: d30v-dis.c:232
+#, fuzzy, c-format
+msgid "illegal id (%d)"
+msgstr "bitmask ilegal"
-#: fr30-ibld.c:1215 frv-ibld.c:1609 ip2k-ibld.c:818 iq2000-ibld.c:1138
-#: m32r-ibld.c:992 openrisc-ibld.c:875 xstormy16-ibld.c:1032
+#: d30v-dis.c:259
#, c-format
-msgid "Unrecognized field %d while getting vma operand.\n"
-msgstr "Câmp necunoscut %d în preluare operand vma.\n"
+msgid "<unknown register %d>"
+msgstr "<registru necunoscut %d>"
-#: fr30-ibld.c:1349 frv-ibld.c:1852 ip2k-ibld.c:880 iq2000-ibld.c:1261
-#: m32r-ibld.c:1090 openrisc-ibld.c:944 xstormy16-ibld.c:1134
+#. Can't happen.
+#: dis-buf.c:61
#, c-format
-msgid "Unrecognized field %d while setting int operand.\n"
-msgstr "Câmp necunoscut %d în setare operand int.\n"
+msgid "Unknown error %d\n"
+msgstr "Eroare necunoscută %d\n"
+
+#: dis-buf.c:70
+#, fuzzy, c-format
+msgid "Address 0x%s is out of bounds.\n"
+msgstr "Adresa 0x%x este peste limite (out of bounds).\n"
-#: fr30-ibld.c:1471 frv-ibld.c:2083 ip2k-ibld.c:930 iq2000-ibld.c:1372
-#: m32r-ibld.c:1176 openrisc-ibld.c:1001 xstormy16-ibld.c:1224
+#: disassemble.c:859
#, c-format
-msgid "Unrecognized field %d while setting vma operand.\n"
-msgstr "Câmp necunoscut %d în setare operand vma.\n"
+msgid "assertion fail %s:%d"
+msgstr ""
+
+#: disassemble.c:860
+msgid "Please report this bug"
+msgstr ""
+
+#: epiphany-asm.c:68
+#, fuzzy
+msgid "register unavailable for short instructions"
+msgstr "formă de instrucțiune necunoscută"
-#: frv-asm.c:365
+#: epiphany-asm.c:115
+#, fuzzy
+msgid "register name used as immediate value"
+msgstr "numărul registrului trebuie să fie par"
+
+#. Don't treat "mov ip,ip" as a move-immediate.
+#: epiphany-asm.c:178 epiphany-asm.c:234
+msgid "register source in immediate move"
+msgstr ""
+
+#: epiphany-asm.c:187
+msgid "byte relocation unsupported"
+msgstr ""
+
+#. -- assembler routines inserted here.
+#. -- asm.c
+#: epiphany-asm.c:193 frv-asm.c:972 iq2000-asm.c:56 lm32-asm.c:95
+#: lm32-asm.c:127 lm32-asm.c:157 lm32-asm.c:187 lm32-asm.c:217 lm32-asm.c:247
+#: m32c-asm.c:140 m32c-asm.c:235 m32c-asm.c:276 m32c-asm.c:334 m32c-asm.c:355
+#: m32r-asm.c:53 mep-asm.c:241 mep-asm.c:259 mep-asm.c:274 mep-asm.c:289
+#: mep-asm.c:301 or1k-asm.c:54
+msgid "missing `)'"
+msgstr "`)' lipsă"
+
+#: epiphany-asm.c:270
+#, fuzzy
+msgid "ABORT: unknown operand"
+msgstr "schimbare(shift) de oberand necunoscută: %x\n"
+
+#: epiphany-asm.c:296
+msgid "Not a pc-relative address."
+msgstr ""
+
+#: epiphany-desc.c:2110
+#, c-format
+msgid "internal error: epiphany_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
+msgstr ""
+
+#: epiphany-desc.c:2198
+#, c-format
+msgid "internal error: epiphany_cgen_cpu_open: unsupported argument `%d'"
+msgstr ""
+
+#: epiphany-desc.c:2217
+#, c-format
+msgid "internal error: epiphany_cgen_cpu_open: no endianness specified"
+msgstr ""
+
+#: fr30-asm.c:93 m32c-asm.c:872 m32c-asm.c:879
+#, fuzzy
+msgid "Register number is not valid"
+msgstr "numărul registrului trebuie să fie par"
+
+#: fr30-asm.c:95
+#, fuzzy
+msgid "Register must be between r0 and r7"
+msgstr "numărul registrului trebuie să fie par"
+
+#: fr30-asm.c:97
+#, fuzzy
+msgid "Register must be between r8 and r15"
+msgstr "numărul registrului trebuie să fie par"
+
+#: fr30-asm.c:116 m32c-asm.c:910
+msgid "Register list is not valid"
+msgstr ""
+
+#: fr30-desc.c:1587
+#, c-format
+msgid "internal error: fr30_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
+msgstr ""
+
+#: fr30-desc.c:1675
+#, c-format
+msgid "internal error: fr30_cgen_cpu_open: unsupported argument `%d'"
+msgstr ""
+
+#: fr30-desc.c:1694
+#, c-format
+msgid "internal error: fr30_cgen_cpu_open: no endianness specified"
+msgstr ""
+
+#: frv-asm.c:608
+#, fuzzy
+msgid "missing `]'"
+msgstr "`)' lipsă"
+
+#: frv-asm.c:611 frv-asm.c:621
+#, fuzzy
+msgid "Special purpose register number is out of range"
+msgstr "valoare directă(immediate) în afara intervalului"
+
+#: frv-asm.c:908
+msgid "Value of A operand must be 0 or 1"
+msgstr ""
+
+#: frv-asm.c:944
msgid "register number must be even"
-msgstr "numãrul registrului trebuie sã fie par"
+msgstr "numărul registrului trebuie să fie par"
+
+#: frv-desc.c:6327
+#, c-format
+msgid "internal error: frv_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
+msgstr ""
-#: h8300-dis.c:377
+#: frv-desc.c:6415
+#, c-format
+msgid "internal error: frv_cgen_cpu_open: unsupported argument `%d'"
+msgstr ""
+
+#: frv-desc.c:6434
+#, c-format
+msgid "internal error: frv_cgen_cpu_open: no endianness specified"
+msgstr ""
+
+#: frv-opc.c:459
+#, c-format
+msgid "internal error: bad vliw->next_slot value"
+msgstr ""
+
+#: frv-opc.c:769
+#, fuzzy, c-format
+msgid "internal error: bad major code"
+msgstr "Eroare internă: opcode.h sparc greșit: \"%s\" == \"%s\"\n"
+
+#: frv-opc.c:819
+#, c-format
+msgid "internal error: bad insn unit"
+msgstr ""
+
+#: h8300-dis.c:309
#, c-format
msgid "Hmmmm 0x%x"
msgstr "Hmmmm 0x%x"
-#: h8300-dis.c:760
+#: h8300-dis.c:617
#, c-format
msgid "Don't understand 0x%x \n"
-msgstr "Nu înþeleg 0x%x \n"
+msgstr "Nu înțeleg 0x%x \n"
+
+#: i386-dis.c:8528
+msgid "<internal disassembler error>"
+msgstr "<eroare internă de dezasamblor>"
+
+#: i386-dis.c:8802
+#, fuzzy, c-format
+msgid ""
+"\n"
+"The following i386/x86-64 specific disassembler options are supported for use\n"
+"with the -M switch (multiple options should be separated by commas):\n"
+msgstr ""
+"\n"
+"Opțiunile MIPS de dezasamblor specifice următoare sunt permise cu folosirea\n"
+"switch-ului -M (opțiunile multiple trebuie separate prin virgulă:\n"
-#: h8500-dis.c:143
+#: i386-dis.c:8806
#, c-format
-msgid "can't cope with insert %d\n"
-msgstr "nu fac faþã la inserarea %d\n"
+msgid " x86-64 Disassemble in 64bit mode\n"
+msgstr ""
-#. Couldn't understand anything.
-#: h8500-dis.c:350
+#: i386-dis.c:8807
#, c-format
-msgid "%02x\t\t*unknown*"
-msgstr "%02x\t\t*necunoscut(ã)*"
+msgid " i386 Disassemble in 32bit mode\n"
+msgstr ""
-#: i386-dis.c:1699
-msgid "<internal disassembler error>"
-msgstr "<eroare internã de dezasamblor>"
+#: i386-dis.c:8808
+#, c-format
+msgid " i8086 Disassemble in 16bit mode\n"
+msgstr ""
+
+#: i386-dis.c:8809
+#, c-format
+msgid " att Display instruction in AT&T syntax\n"
+msgstr ""
+
+#: i386-dis.c:8810
+#, c-format
+msgid " intel Display instruction in Intel syntax\n"
+msgstr ""
+
+#: i386-dis.c:8811
+#, c-format
+msgid ""
+" att-mnemonic\n"
+" Display instruction in AT&T mnemonic\n"
+msgstr ""
+
+#: i386-dis.c:8813
+#, c-format
+msgid ""
+" intel-mnemonic\n"
+" Display instruction in Intel mnemonic\n"
+msgstr ""
+
+#: i386-dis.c:8815
+#, c-format
+msgid " addr64 Assume 64bit address size\n"
+msgstr ""
+
+#: i386-dis.c:8816
+#, c-format
+msgid " addr32 Assume 32bit address size\n"
+msgstr ""
+
+#: i386-dis.c:8817
+#, c-format
+msgid " addr16 Assume 16bit address size\n"
+msgstr ""
+
+#: i386-dis.c:8818
+#, c-format
+msgid " data32 Assume 32bit data size\n"
+msgstr ""
+
+#: i386-dis.c:8819
+#, c-format
+msgid " data16 Assume 16bit data size\n"
+msgstr ""
+
+#: i386-dis.c:8820
+#, c-format
+msgid " suffix Always display instruction suffix in AT&T syntax\n"
+msgstr ""
+
+#: i386-dis.c:8821
+#, c-format
+msgid " amd64 Display instruction in AMD64 ISA\n"
+msgstr ""
-#: ia64-gen.c:295
+#: i386-dis.c:8822
+#, c-format
+msgid " intel64 Display instruction in Intel64 ISA\n"
+msgstr ""
+
+#: i386-dis.c:9402
+msgid "64-bit address is disabled"
+msgstr ""
+
+#: i386-gen.c:856
+#, fuzzy, c-format
+msgid "%s: error: "
+msgstr "%s: Eroare: "
+
+#: i386-gen.c:1012
+#, c-format
+msgid "%s: %d: unknown bitfield: %s\n"
+msgstr ""
+
+#: i386-gen.c:1014
+#, fuzzy, c-format
+msgid "unknown bitfield: %s\n"
+msgstr "pop reg necunoscut: %d\n"
+
+#: i386-gen.c:1077
+#, c-format
+msgid "%s: %d: missing `)' in bitfield: %s\n"
+msgstr ""
+
+#: i386-gen.c:1178
+#, fuzzy, c-format
+msgid "unknown broadcast operand: %s\n"
+msgstr "schimbare(shift) de oberand necunoscută: %x\n"
+
+#: i386-gen.c:1233
+#, c-format
+msgid "%s:%d: Conflicting opcode space specifications\n"
+msgstr ""
+
+#: i386-gen.c:1237
+#, c-format
+msgid "%s:%d: Warning: redundant opcode space specification\n"
+msgstr ""
+
+#: i386-gen.c:1246
+#, c-format
+msgid "%s:%d: Conflicting prefix specifications\n"
+msgstr ""
+
+#: i386-gen.c:1250
+#, c-format
+msgid "%s:%d: Warning: redundant prefix specification\n"
+msgstr ""
+
+#: i386-gen.c:1460
+#, c-format
+msgid "%s:%d: %s: unrecognized opcode encoding space\n"
+msgstr ""
+
+#: i386-gen.c:1466
+#, c-format
+msgid "%s:%d: %s: residual opcode (0x%0*llx) too large\n"
+msgstr ""
+
+#: i386-gen.c:1888
+#, fuzzy, c-format
+msgid "can't find i386-reg.tbl for reading, errno = %s\n"
+msgstr "nu pot găsi ia64-ic.tbl pentru citire\n"
+
+#: i386-gen.c:1966
+#, c-format
+msgid "can't create i386-init.h, errno = %s\n"
+msgstr ""
+
+#: i386-gen.c:2056 ia64-gen.c:2829
+#, c-format
+msgid "unable to change directory to \"%s\", errno = %s\n"
+msgstr "nu am putut schimba directorul în \"%s\", errno = %s\n"
+
+#: i386-gen.c:2070 i386-gen.c:2075
+#, c-format
+msgid "CpuMax != %d!\n"
+msgstr ""
+
+#: i386-gen.c:2079
+#, c-format
+msgid "%d unused bits in i386_cpu_flags.\n"
+msgstr ""
+
+#: i386-gen.c:2094
+#, c-format
+msgid "%d unused bits in i386_operand_type.\n"
+msgstr ""
+
+#: i386-gen.c:2108
+#, c-format
+msgid "can't create i386-tbl.h, errno = %s\n"
+msgstr ""
+
+#: ia64-gen.c:306
#, c-format
msgid "%s: Error: "
msgstr "%s: Eroare: "
-#: ia64-gen.c:308
+#: ia64-gen.c:319
#, c-format
msgid "%s: Warning: "
msgstr "%s: Avertisment: "
-#: ia64-gen.c:494 ia64-gen.c:728
+#: ia64-gen.c:505 ia64-gen.c:736
#, c-format
msgid "multiple note %s not handled\n"
msgstr "notele multiple %s nerezolvabile(handled)\n"
-#: ia64-gen.c:605
+#: ia64-gen.c:616
msgid "can't find ia64-ic.tbl for reading\n"
-msgstr "nu pot gãsi ia64-ic.tbl pentru citire\n"
+msgstr "nu pot găsi ia64-ic.tbl pentru citire\n"
-#: ia64-gen.c:810
+#: ia64-gen.c:818
#, c-format
msgid "can't find %s for reading\n"
-msgstr "nu pot gãsi %s pentru citire\n"
+msgstr "nu pot găsi %s pentru citire\n"
-#: ia64-gen.c:1034
+#: ia64-gen.c:1050
#, c-format
msgid ""
"most recent format '%s'\n"
"appears more restrictive than '%s'\n"
msgstr ""
"cel mai recent format %s \n"
-"pare mai restrictiv decât '%s'\n"
+"pare mai restrictiv decât '%s'\n"
-#: ia64-gen.c:1045
+#: ia64-gen.c:1061
#, c-format
msgid "overlapping field %s->%s\n"
-msgstr "câmp suprapus %s -> %s\n"
+msgstr "câmp suprapus %s -> %s\n"
-#: ia64-gen.c:1236
+#: ia64-gen.c:1258
#, c-format
msgid "overwriting note %d with note %d (IC:%s)\n"
msgstr "suprascriere nota %d cu nota %d (IC:%s)\n"
-#: ia64-gen.c:1435
+#: ia64-gen.c:1465
#, c-format
msgid "don't know how to specify %% dependency %s\n"
-msgstr "nu ºtiu cum se specificã dependinþele %% %s\n"
+msgstr "nu știu cum se specifică dependințele %% %s\n"
-#: ia64-gen.c:1457
+#: ia64-gen.c:1487
#, c-format
msgid "Don't know how to specify # dependency %s\n"
-msgstr "nu ºtiu cum se specificã dependinþele # %s\n"
+msgstr "nu știu cum se specifică dependințele # %s\n"
-#: ia64-gen.c:1496
+#: ia64-gen.c:1526
#, c-format
msgid "IC:%s [%s] has no terminals or sub-classes\n"
msgstr "IC:%s [%s] nu are terminale sau sublclase\n"
-#: ia64-gen.c:1499
+#: ia64-gen.c:1529
#, c-format
msgid "IC:%s has no terminals or sub-classes\n"
msgstr "IC:%s nu are terminale sau subclase\n"
-#: ia64-gen.c:1508
+#: ia64-gen.c:1538
#, c-format
msgid "no insns mapped directly to terminal IC %s [%s]"
msgstr "nici un insns mapat direct la terminalul IC %s [%s]"
-#: ia64-gen.c:1511
+#: ia64-gen.c:1541
#, c-format
msgid "no insns mapped directly to terminal IC %s\n"
msgstr "nici un insns mapat direct la terminalul IC %s\n"
-#: ia64-gen.c:1522
+#: ia64-gen.c:1552
#, c-format
msgid "class %s is defined but not used\n"
-msgstr "clasa %s este definitã dar nefolositã\n"
+msgstr "clasa %s este definită dar nefolosită\n"
-#: ia64-gen.c:1533
-#, c-format
-msgid "Warning: rsrc %s (%s) has no chks%s\n"
+#: ia64-gen.c:1565
+#, fuzzy, c-format
+msgid "Warning: rsrc %s (%s) has no chks\n"
msgstr "Avertisment: rsrc %s (%s) nu are chks%s\n"
-#: ia64-gen.c:1537
+#: ia64-gen.c:1568
+#, fuzzy, c-format
+msgid "Warning: rsrc %s (%s) has no chks or regs\n"
+msgstr "Avertisment: rsrc %s (%s) nu are chks%s\n"
+
+#: ia64-gen.c:1572
#, c-format
msgid "rsrc %s (%s) has no regs\n"
msgstr "rsrc %s (%s) nu areo regs\n"
-#: ia64-gen.c:2436
+#: ia64-gen.c:2464
#, c-format
msgid "IC note %d in opcode %s (IC:%s) conflicts with resource %s note %d\n"
-msgstr "Nota IC %d din opcode %s (IC:%s) e în conflict cu resursa %s nota %d\n"
+msgstr "Nota IC %d din opcode %s (IC:%s) e în conflict cu resursa %s nota %d\n"
-#: ia64-gen.c:2464
+#: ia64-gen.c:2492
#, c-format
msgid "IC note %d for opcode %s (IC:%s) conflicts with resource %s note %d\n"
-msgstr "Nota IC %d pentru opcode %s (IC:%s) e în conflict cu resursa %s nota %d\n"
+msgstr "Nota IC %d pentru opcode %s (IC:%s) e în conflict cu resursa %s nota %d\n"
-#: ia64-gen.c:2478
+#: ia64-gen.c:2506
#, c-format
msgid "opcode %s has no class (ops %d %d %d)\n"
-msgstr "opcode %s nu are clasã (ops %d %d %d)\n"
-
-#: ia64-gen.c:2789
-#, c-format
-msgid "unable to change directory to \"%s\", errno = %s\n"
-msgstr "nu am putut schimba directorul în \"%s\", errno = %s\n"
+msgstr "opcode %s nu are clasă (ops %d %d %d)\n"
#. We've been passed a w. Return with an error message so that
#. cgen will try the next parsing option.
-#: ip2k-asm.c:92
+#: ip2k-asm.c:81
msgid "W keyword invalid in FR operand slot."
-msgstr "Cuvânt cheie W invalidv în slotul operand FR."
+msgstr "Cuvânt cheie W invalidv în slotul operand FR."
#. Invalid offset present.
-#: ip2k-asm.c:122
+#: ip2k-asm.c:106
msgid "offset(IP) is not a valid form"
-msgstr "offsetul(IP) nu are formã validã"
+msgstr "offsetul(IP) nu are formă validă"
#. Found something there in front of (DP) but it's out
#. of range.
-#: ip2k-asm.c:175
+#: ip2k-asm.c:154
msgid "(DP) offset out of range."
-msgstr "(DP) offset în afara intervalului"
+msgstr "(DP) offset în afara intervalului"
#. Found something there in front of (SP) but it's out
#. of range.
-#: ip2k-asm.c:221
+#: ip2k-asm.c:195
msgid "(SP) offset out of range."
-msgstr "(SP) offset în afara intervalului"
+msgstr "(SP) offset în afara intervalului"
-#: ip2k-asm.c:241
+#: ip2k-asm.c:211
msgid "illegal use of parentheses"
-msgstr "Folosire ilegalã de paranteze"
+msgstr "Folosire ilegală de paranteze"
-#: ip2k-asm.c:248
+#: ip2k-asm.c:218
msgid "operand out of range (not between 1 and 255)"
-msgstr "operand în afara limitelor (nu este între 0 ºi 255)"
+msgstr "operand în afara limitelor (nu este între 0 și 255)"
#. Something is very wrong. opindex has to be one of the above.
-#: ip2k-asm.c:273
+#: ip2k-asm.c:242
msgid "parse_addr16: invalid opindex."
msgstr "parse_addr16: opindex invalid."
-#: ip2k-asm.c:353
+#: ip2k-asm.c:296
msgid "Byte address required. - must be even."
-msgstr "Se necesitã adresã byte. -trebuie sã fie parã (even)."
+msgstr "Se necesită adresă byte. -trebuie să fie pară (even)."
-#: ip2k-asm.c:362
+#: ip2k-asm.c:305
msgid "cgen_parse_address returned a symbol. Literal required."
-msgstr "cgen_parse_address a returnat un simbol. Se necesitã literal."
+msgstr "cgen_parse_address a returnat un simbol. Se necesită literal."
-#: ip2k-asm.c:420
-#, c-format
-msgid "%operator operand is not a symbol"
+#: ip2k-asm.c:360
+#, fuzzy
+msgid "percent-operator operand is not a symbol"
msgstr "%operator operandulk nu este un simbol"
-#: ip2k-asm.c:474
+#: ip2k-asm.c:413
msgid "Attempt to find bit index of 0"
-msgstr "Se încearcã gãsirea bitului index de 0"
+msgstr "Se încearcă găsirea bitului index de 0"
+
+#: ip2k-desc.c:1016
+#, c-format
+msgid "internal error: ip2k_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
+msgstr ""
+
+#: ip2k-desc.c:1104
+#, c-format
+msgid "internal error: ip2k_cgen_cpu_open: unsupported argument `%d'"
+msgstr ""
-#: iq2000-asm.c:110 iq2000-asm.c:141
+#: ip2k-desc.c:1123
+#, c-format
+msgid "internal error: ip2k_cgen_cpu_open: no endianness specified"
+msgstr ""
+
+#: iq2000-asm.c:112 iq2000-asm.c:142
msgid "immediate value cannot be register"
-msgstr "valoarea directã(immediate) nu poate fi înregistratã"
+msgstr "valoarea directă(immediate) nu poate fi înregistrată"
-#: iq2000-asm.c:120 iq2000-asm.c:151
+#: iq2000-asm.c:123 iq2000-asm.c:153 lm32-asm.c:70
msgid "immediate value out of range"
-msgstr "valoare directã(immediate) în afara intervalului"
+msgstr "valoare directă(immediate) în afara intervalului"
-#: iq2000-asm.c:180
+#: iq2000-asm.c:182
msgid "21-bit offset out of range"
-msgstr "offsetul 21 bit în afara intervalului"
+msgstr "offsetul 21 bit în afara intervalului"
-#: iq2000-asm.c:205 iq2000-asm.c:235 iq2000-asm.c:272 iq2000-asm.c:305
-#: openrisc-asm.c:96 openrisc-asm.c:155
-msgid "missing `)'"
-msgstr "`)' lipsã"
+#: iq2000-desc.c:2021
+#, c-format
+msgid "internal error: iq2000_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
+msgstr ""
+
+#: iq2000-desc.c:2109
+#, c-format
+msgid "internal error: iq2000_cgen_cpu_open: unsupported argument `%d'"
+msgstr ""
+
+#: iq2000-desc.c:2128
+#, c-format
+msgid "internal error: iq2000_cgen_cpu_open: no endianness specified"
+msgstr ""
+
+#: lm32-asm.c:166
+msgid "expecting gp relative address: gp(symbol)"
+msgstr ""
+
+#: lm32-asm.c:196
+msgid "expecting got relative address: got(symbol)"
+msgstr ""
+
+#: lm32-asm.c:226
+msgid "expecting got relative address: gotoffhi16(symbol)"
+msgstr ""
+
+#: lm32-asm.c:256
+msgid "expecting got relative address: gotofflo16(symbol)"
+msgstr ""
+
+#: lm32-desc.c:1003
+#, c-format
+msgid "internal error: lm32_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
+msgstr ""
+
+#: lm32-desc.c:1091
+#, c-format
+msgid "internal error: lm32_cgen_cpu_open: unsupported argument `%d'"
+msgstr ""
+
+#: lm32-desc.c:1110
+#, c-format
+msgid "internal error: lm32_cgen_cpu_open: no endianness specified"
+msgstr ""
+
+#: loongarch-dis.c:300
+#, fuzzy, c-format
+msgid ""
+"\n"
+"The following LoongArch disassembler options are supported for use\n"
+"with the -M switch (multiple options should be separated by commas):\n"
+msgstr ""
+"\n"
+"Opțiunile MIPS de dezasamblor specifice următoare sunt permise cu folosirea\n"
+"switch-ului -M (opțiunile multiple trebuie separate prin virgulă:\n"
-#: m10200-dis.c:199
+#: loongarch-dis.c:304
#, c-format
-msgid "unknown\t0x%02x"
-msgstr "necunoscut(ã)\t0x%02x"
+msgid ""
+"\n"
+" numeric Print numeric register names, rather than ABI names.\n"
+msgstr ""
-#: m10200-dis.c:339
+#: m10200-dis.c:151 m10300-dis.c:574
#, c-format
msgid "unknown\t0x%04lx"
-msgstr "necunoscut(ã)\t0x%04lx"
+msgstr "necunoscut(ă)\t0x%04lx"
-#: m10300-dis.c:766
+#: m10200-dis.c:321
+#, fuzzy, c-format
+msgid "unknown\t0x%02lx"
+msgstr "necunoscut(ă)\t0x%02x"
+
+#: m32c-asm.c:117
+#, fuzzy
+msgid "imm:6 immediate is out of range"
+msgstr "valoare directă(immediate) în afara intervalului"
+
+#: m32c-asm.c:145
#, c-format
-msgid "unknown\t0x%04x"
-msgstr "necunoscut(ã)\t0x%04x"
+msgid "%dsp8() takes a symbolic address, not a number"
+msgstr ""
-#: m68k-dis.c:429
+#: m32c-asm.c:159 m32c-asm.c:163 m32c-asm.c:253
+#, fuzzy
+msgid "dsp:8 immediate is out of range"
+msgstr "valoare directă(immediate) în afara intervalului"
+
+#: m32c-asm.c:184 m32c-asm.c:188
+#, fuzzy
+msgid "Immediate is out of range -8 to 7"
+msgstr "valoare directă(immediate) în afara intervalului"
+
+#: m32c-asm.c:209 m32c-asm.c:213
+#, fuzzy
+msgid "Immediate is out of range -7 to 8"
+msgstr "valoare directă(immediate) în afara intervalului"
+
+#: m32c-asm.c:281
#, c-format
-msgid "<internal error in opcode table: %s %s>\n"
-msgstr "<eroare internã în tabel opcode: %s %s>\n"
+msgid "%dsp16() takes a symbolic address, not a number"
+msgstr ""
+
+#: m32c-asm.c:305 m32c-asm.c:312 m32c-asm.c:373
+#, fuzzy
+msgid "dsp:16 immediate is out of range"
+msgstr "valoare directă(immediate) în afara intervalului"
+
+#: m32c-asm.c:399
+#, fuzzy
+msgid "dsp:20 immediate is out of range"
+msgstr "valoare directă(immediate) în afara intervalului"
+
+#: m32c-asm.c:425 m32c-asm.c:445
+#, fuzzy
+msgid "dsp:24 immediate is out of range"
+msgstr "valoare directă(immediate) în afara intervalului"
+
+#: m32c-asm.c:478
+#, fuzzy
+msgid "immediate is out of range 1-2"
+msgstr "valoare directă(immediate) în afara intervalului"
+
+#: m32c-asm.c:496
+#, fuzzy
+msgid "immediate is out of range 1-8"
+msgstr "valoare directă(immediate) în afara intervalului"
+
+#: m32c-asm.c:514
+#, fuzzy
+msgid "immediate is out of range 0-7"
+msgstr "valoare directă(immediate) în afara intervalului"
+
+#: m32c-asm.c:550
+#, fuzzy
+msgid "immediate is out of range 2-9"
+msgstr "valoare directă(immediate) în afara intervalului"
+
+#: m32c-asm.c:568
+msgid "Bit number for indexing general register is out of range 0-15"
+msgstr ""
+
+#: m32c-asm.c:606 m32c-asm.c:662
+#, fuzzy
+msgid "bit,base is out of range"
+msgstr "valoare directă(immediate) în afara intervalului"
+
+#: m32c-asm.c:613 m32c-asm.c:618 m32c-asm.c:666
+#, fuzzy
+msgid "bit,base out of range for symbol"
+msgstr "offsetul 21 bit în afara intervalului"
+
+#: m32c-asm.c:802
+msgid "not a valid r0l/r0h pair"
+msgstr ""
+
+#: m32c-asm.c:832
+msgid "Invalid size specifier"
+msgstr ""
-#: m68k-dis.c:1007
+#: m32c-desc.c:63034
+#, c-format
+msgid "internal error: m32c_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
+msgstr ""
+
+#: m32c-desc.c:63122
+#, c-format
+msgid "internal error: m32c_cgen_cpu_open: unsupported argument `%d'"
+msgstr ""
+
+#: m32c-desc.c:63141
+#, c-format
+msgid "internal error: m32c_cgen_cpu_open: no endianness specified"
+msgstr ""
+
+#: m32r-desc.c:1366
+#, c-format
+msgid "internal error: m32r_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
+msgstr ""
+
+#: m32r-desc.c:1454
+#, c-format
+msgid "internal error: m32r_cgen_cpu_open: unsupported argument `%d'"
+msgstr ""
+
+#: m32r-desc.c:1473
+#, c-format
+msgid "internal error: m32r_cgen_cpu_open: no endianness specified"
+msgstr ""
+
+#: m68k-dis.c:1294
#, c-format
msgid "<function code %d>"
-msgstr "<cod funcþie %d>"
+msgstr "<cod funcție %d>"
-#: m88k-dis.c:746
+#: m68k-dis.c:1457
#, c-format
-msgid "# <dis error: %08x>"
-msgstr "# <eroare dez: %08x>"
+msgid "<internal error in opcode table: %s %s>\n"
+msgstr "<eroare internă în tabel opcode: %s %s>\n"
+
+#: mep-asm.c:129
+msgid "Only $tp or $13 allowed for this opcode"
+msgstr ""
+
+#: mep-asm.c:143
+msgid "Only $sp or $15 allowed for this opcode"
+msgstr ""
+
+#: mep-asm.c:308 mep-asm.c:504
+#, c-format
+msgid "invalid %function() here"
+msgstr ""
+
+#: mep-asm.c:336
+#, fuzzy
+msgid "Immediate is out of range -32768 to 32767"
+msgstr "valoare directă(immediate) în afara intervalului"
-#: mips-dis.c:699
-msgid "# internal error, incomplete extension sequence (+)"
-msgstr "# eroare internã, secvenþã incompletã de extensie (+)"
+#: mep-asm.c:356
+#, fuzzy
+msgid "Immediate is out of range 0 to 65535"
+msgstr "valoare directă(immediate) în afara intervalului"
-#: mips-dis.c:742
+#: mep-asm.c:549 mep-asm.c:562
+#, fuzzy
+msgid "Immediate is out of range -512 to 511"
+msgstr "valoare directă(immediate) în afara intervalului"
+
+#: mep-asm.c:554 mep-asm.c:563
+#, fuzzy
+msgid "Immediate is out of range -128 to 127"
+msgstr "valoare directă(immediate) în afara intervalului"
+
+#: mep-asm.c:558
+#, fuzzy
+msgid "Value is not aligned enough"
+msgstr "valoarea deplasării nu este aliniată"
+
+#: mep-desc.c:6227
#, c-format
-msgid "# internal error, undefined extension sequence (+%c)"
-msgstr "# eroare internã, secvenþã de extensie nedefinitã (+%c)"
+msgid "internal error: mep_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
+msgstr ""
-#: mips-dis.c:1000
+#: mep-desc.c:6315
#, c-format
-msgid "# internal error, undefined modifier(%c)"
-msgstr "# eroare internã, modificator nedefinit(%c)"
+msgid "internal error: mep_cgen_cpu_open: unsupported argument `%d'"
+msgstr ""
-#: mips-dis.c:1751
+#: mep-desc.c:6334
#, c-format
-msgid "# internal disassembler error, unrecognised modifier (%c)"
-msgstr "# eroare internã de dezasamblor, modificator necunoscut (%c)"
+msgid "internal error: mep_cgen_cpu_open: no endianness specified"
+msgstr ""
+
+#: mips-dis.c:1834 mips-dis.c:2060
+#, fuzzy, c-format
+msgid "# internal error, undefined operand in `%s %s'"
+msgstr "# eroare internă, modificator nedefinit(%c)"
-#: mips-dis.c:1763
+#: mips-dis.c:2649
+msgid "Use canonical instruction forms.\n"
+msgstr ""
+
+#: mips-dis.c:2651
+#, fuzzy
+msgid "Recognize MSA instructions.\n"
+msgstr "instrucțiune necunoscută"
+
+#: mips-dis.c:2653
+msgid "Recognize the virtualization ASE instructions.\n"
+msgstr ""
+
+#: mips-dis.c:2655
msgid ""
-"\n"
-"The following MIPS specific disassembler options are supported for use\n"
-"with the -M switch (multiple options should be separated by commas):\n"
+"Recognize the eXtended Physical Address (XPA) ASE\n"
+" instructions.\n"
+msgstr ""
+
+#: mips-dis.c:2658
+msgid "Recognize the Global INValidate (GINV) ASE instructions.\n"
msgstr ""
-"\n"
-"Opþiunile MIPS de dezasamblor specifice urmãtoare sunt permise cu folosirea\n"
-"switch-ului -M (opþiunile multiple trebuie separate prin virgulã:\n"
-#: mips-dis.c:1767
+#: mips-dis.c:2662
+msgid "Recognize the Loongson MultiMedia extensions Instructions (MMI) ASE instructions.\n"
+msgstr ""
+
+#: mips-dis.c:2666
+msgid "Recognize the Loongson Content Address Memory (CAM) instructions.\n"
+msgstr ""
+
+#: mips-dis.c:2670
+msgid "Recognize the Loongson EXTensions (EXT) instructions.\n"
+msgstr ""
+
+#: mips-dis.c:2674
+msgid "Recognize the Loongson EXTensions R2 (EXT2) instructions.\n"
+msgstr ""
+
+#: mips-dis.c:2677
+#, fuzzy
msgid ""
-"\n"
-" gpr-names=ABI Print GPR names according to specified ABI.\n"
-" Default: based on binary being disassembled.\n"
+"Print GPR names according to specified ABI.\n"
+" Default: based on binary being disassembled.\n"
msgstr ""
"\n"
-" gpr-names=ABI Afiºeazã numele GPR potrivit ABI specificat.\n"
+" gpr-names=ABI Afișează numele GPR potrivit ABI specificat.\n"
" Implicit: bazat pe binar ce este dezasamblat.\n"
-#: mips-dis.c:1771
+#: mips-dis.c:2680
+#, fuzzy
msgid ""
-"\n"
-" fpr-names=ABI Print FPR names according to specified ABI.\n"
-" Default: numeric.\n"
+"Print FPR names according to specified ABI.\n"
+" Default: numeric.\n"
msgstr ""
"\n"
-" fpr-names=ABI Afiºeazã numele FPR potrivit ABI specificat.\n"
+" fpr-names=ABI Afișează numele FPR potrivit ABI specificat.\n"
" Implicit: numeric.\n"
-#: mips-dis.c:1775
+#: mips-dis.c:2683
+#, fuzzy
msgid ""
-"\n"
-" cp0-names=ARCH Print CP0 register names according to\n"
-" specified architecture.\n"
-" Default: based on binary being disassembled.\n"
+"Print CP0 register names according to specified architecture.\n"
+" Default: based on binary being disassembled.\n"
msgstr ""
"\n"
-" cp0-names=ARCH Afiºeazã numele de regiºtri CP0 potrivit\n"
-" arhitecturii specifice.\n"
-" Implicit: bazat pe binar în dezasamblare.\n"
+" hwr-names=ARCH Afișează numele HWR potrivit arhitecturii \n"
+"\t\t\t specifice.\n"
+" Implicit: bazat pe binar în dezasamblare.\n"
-#: mips-dis.c:1780
+#: mips-dis.c:2687
+#, fuzzy
msgid ""
-"\n"
-" hwr-names=ARCH Print HWR names according to specified \n"
-"\t\t\t architecture.\n"
-" Default: based on binary being disassembled.\n"
+"Print HWR names according to specified architecture.\n"
+" Default: based on binary being disassembled.\n"
msgstr ""
"\n"
-" hwr-names=ARCH Afiºeazã numele HWR potrivit arhitecturii \n"
+" hwr-names=ARCH Afișează numele HWR potrivit arhitecturii \n"
"\t\t\t specifice.\n"
-" Implicit: bazat pe binar în dezasamblare.\n"
+" Implicit: bazat pe binar în dezasamblare.\n"
-#: mips-dis.c:1785
-msgid ""
-"\n"
-" reg-names=ABI Print GPR and FPR names according to\n"
-" specified ABI.\n"
+#: mips-dis.c:2690
+#, fuzzy
+msgid "Print GPR and FPR names according to specified ABI.\n"
msgstr ""
"\n"
-" reg-names=ABI Afiºeazã numele GPR ºi FPR potriviti\n"
+" reg-names=ABI Afișează numele GPR și FPR potriviti\n"
" ABI specificat.\n"
-#: mips-dis.c:1789
+#: mips-dis.c:2692
+#, fuzzy
msgid ""
-"\n"
-" reg-names=ARCH Print CP0 register and HWR names according to\n"
-" specified architecture.\n"
+"Print CP0 register and HWR names according to specified\n"
+" architecture."
msgstr ""
"\n"
-" reg-names=ARCH Afiºeazã regiºtrii CP0 ºi numele HWR potrivit\n"
+" reg-names=ARCH Afișează regiștrii CP0 și numele HWR potrivit\n"
" arhitecturii specifice.\n"
-#: mips-dis.c:1793
+#: mips-dis.c:2778
+#, fuzzy, c-format
msgid ""
"\n"
-" For the options above, the following values are supported for \"ABI\":\n"
-" "
+"The following MIPS specific disassembler options are supported for use\n"
+"with the -M switch (multiple options should be separated by commas):\n"
+"\n"
msgstr ""
"\n"
-" Pentru opþiunile de mai sus, urmatoarele valori sunt suportate pentru \"ABI\":\n"
-" "
+"Opțiunile MIPS de dezasamblor specifice următoare sunt permise cu folosirea\n"
+"switch-ului -M (opțiunile multiple trebuie separate prin virgulă:\n"
-#: mips-dis.c:1798 mips-dis.c:1806 mips-dis.c:1808
-msgid "\n"
-msgstr "\n"
+#: mmix-dis.c:33
+#, fuzzy, c-format
+msgid "bad case %d (%s) in %s:%d"
+msgstr "Caz greșit %d (%s) in %s: %d\n"
+
+#: mmix-dis.c:42
+#, fuzzy, c-format
+msgid "internal: non-debugged code (test-case missing): %s:%d"
+msgstr "Intern: cod non debugged (caz test lipsă) %s:%d"
+
+#: mmix-dis.c:52
+msgid "(unknown)"
+msgstr "(necunoscut)"
+
+#: mmix-dis.c:247 mmix-dis.c:255
+msgid "*illegal*"
+msgstr ""
+
+#: mmix-dis.c:529
+#, c-format
+msgid "*unknown operands type: %d*"
+msgstr "*tip necunoscut de operanzi: %d*"
+
+#: msp430-decode.opc:145 rl78-decode.opc:106
+#, c-format
+msgid "internal error: immediate() called with invalid byte count %d"
+msgstr ""
+
+#: msp430-dis.c:59
+#, c-format
+msgid "Warning: disassembly unreliable - not enough bytes available"
+msgstr ""
+
+#: msp430-dis.c:65
+#, c-format
+msgid "Error: read from memory failed"
+msgstr ""
+
+#: msp430-dis.c:499
+msgid "Warning: illegal as emulation instr"
+msgstr ""
+
+#. R2/R3 are illegal as dest: may be data section.
+#: msp430-dis.c:591
+msgid "Warning: illegal as 2-op instr"
+msgstr ""
+
+#: msp430-dis.c:1002
+msgid "Warning: unrecognised CALLA addressing mode"
+msgstr ""
+
+#: msp430-dis.c:1303 msp430-dis.c:1324 msp430-dis.c:1345
+#, c-format
+msgid "Warning: reserved use of A/L and B/W bits detected"
+msgstr ""
+
+#: mt-asm.c:110 mt-asm.c:190
+#, fuzzy
+msgid "Operand out of range. Must be between -32768 and 32767."
+msgstr "operand în afara limitelor (nu este între 0 și 255)"
+
+#: mt-asm.c:149
+msgid "Biiiig Trouble in parse_imm16!"
+msgstr ""
+
+#: mt-asm.c:157
+#, fuzzy
+msgid "The percent-operator's operand is not a symbol"
+msgstr "%operator operandulk nu este un simbol"
+
+#: mt-asm.c:395
+msgid "invalid operand. type may have values 0,1,2 only."
+msgstr ""
+
+#: mt-desc.c:1147
+#, c-format
+msgid "internal error: mt_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
+msgstr ""
+
+#: mt-desc.c:1235
+#, c-format
+msgid "internal error: mt_cgen_cpu_open: unsupported argument `%d'"
+msgstr ""
+
+#: mt-desc.c:1254
+#, c-format
+msgid "internal error: mt_cgen_cpu_open: no endianness specified"
+msgstr ""
+
+#: nds32-asm.c:1760
+#, fuzzy, c-format
+msgid "internal error: unknown operand, %s"
+msgstr "<eroare internă în tabel opcode: %s %s>\n"
+
+#: nds32-asm.c:2396
+#, c-format
+msgid "internal error: don't know how to handle parsing results"
+msgstr ""
+
+#: nds32-asm.c:2404
+#, c-format
+msgid "internal error: unknown hardware resource"
+msgstr ""
+
+#: nds32-dis.c:1178
+msgid "insufficient data to decode instruction"
+msgstr ""
-#: mips-dis.c:1800
+#: nfp-dis.c:930
+#, fuzzy
+msgid "<invalid_instruction>:"
+msgstr "instrucțiune necunoscută"
+
+#: nfp-dis.c:1334
+msgid ", <invalid CRC operator>, "
+msgstr ""
+
+#: nfp-dis.c:1686
+msgid "<invalid branch>["
+msgstr ""
+
+#: nfp-dis.c:2055 nfp-dis.c:2326
+#, c-format
+msgid "<invalid cmd target %d:%d:%d>[]"
+msgstr ""
+
+#: nfp-dis.c:2066 nfp-dis.c:2337
+#, c-format
+msgid "<invalid cmd action %d:%d:%d>[]"
+msgstr ""
+
+#: nfp-dis.c:2558
+msgid "File has no ME-Config section."
+msgstr ""
+
+#: nfp-dis.c:2572
+msgid "File has invalid ME-Config section."
+msgstr ""
+
+#: nfp-dis.c:2717
+#, c-format
+msgid "Error processing section %u "
+msgstr ""
+
+#: nfp-dis.c:2746
+#, c-format
+msgid "Invalid NFP option: %s"
+msgstr ""
+
+#: nfp-dis.c:2984
+#, fuzzy, c-format
msgid ""
"\n"
-" For the options above, The following values are supported for \"ARCH\":\n"
-" "
+"The following NFP specific disassembler options are supported for use\n"
+"with the -M switch (multiple options should be separated by commas):\n"
msgstr ""
"\n"
-" Pentru opþiunile de mai sus, urmatoarele valori sunt suportate pentru \"ARCH\":\n"
-" "
+"Opțiunile MIPS de dezasamblor specifice următoare sunt permise cu folosirea\n"
+"switch-ului -M (opțiunile multiple trebuie separate prin virgulă:\n"
-#: mmix-dis.c:34
+#: nfp-dis.c:2988
#, c-format
-msgid "Bad case %d (%s) in %s:%d\n"
-msgstr "Caz greºit %d (%s) in %s: %d\n"
+msgid ""
+"\n"
+" no-pc\t\t Don't print program counter prefix.\n"
+" ctx4\t\t Force disassembly using 4-context mode.\n"
+" ctx8\t\t Force 8-context mode, takes precedence."
+msgstr ""
-#: mmix-dis.c:44
+#: nios2-dis.c:135
#, c-format
-msgid "Internal: Non-debugged code (test-case missing): %s:%d"
-msgstr "Intern: cod non debugged (caz test lipsã) %s:%d"
-
-#: mmix-dis.c:53
-msgid "(unknown)"
-msgstr "(necunoscut)"
+msgid "out of memory"
+msgstr ""
-#: mmix-dis.c:519
-#, c-format
-msgid "*unknown operands type: %d*"
-msgstr "*tip necunoscut de operanzi: %d*"
+#: nios2-dis.c:263
+#, fuzzy, c-format
+msgid "internal error: broken opcode descriptor for `%s %s'"
+msgstr "<eroare internă în tabel opcode: %s %s>\n"
#. I and Z are output operands and can`t be immediate
-#. * A is an address and we can`t have the address of
-#. * an immediate either. We don't know how much to increase
-#. * aoffsetp by since whatever generated this is broken
-#. * anyway!
-#.
-#: ns32k-dis.c:631
+#. A is an address and we can`t have the address of
+#. an immediate either. We don't know how much to increase
+#. aoffsetp by since whatever generated this is broken
+#. anyway!
+#: ns32k-dis.c:533
+#, c-format
msgid "$<undefined>"
msgstr "$<nedefinit>"
-#: ppc-opc.c:781 ppc-opc.c:809
-msgid "invalid conditional option"
-msgstr "opþiune condiþionalã invalidã"
+#: or1k-asm.c:55
+msgid "relocation invalid for store"
+msgstr ""
-#: ppc-opc.c:811
-msgid "attempt to set y bit when using + or - modifier"
-msgstr "se încearcã setarea bitului y în folosirea modificatorilor + sau -"
+#: or1k-asm.c:56
+msgid "internal relocation type invalid"
+msgstr ""
-#: ppc-opc.c:840
-msgid "offset not a multiple of 16"
-msgstr "offsetul nu este multiplu de 16"
+#: or1k-desc.c:2041
+#, c-format
+msgid "internal error: or1k_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
+msgstr ""
-#: ppc-opc.c:860
-msgid "offset not a multiple of 2"
-msgstr "offsetul nu este multiplu de 2"
+#: or1k-desc.c:2129
+#, c-format
+msgid "internal error: or1k_cgen_cpu_open: unsupported argument `%d'"
+msgstr ""
-#: ppc-opc.c:862
-msgid "offset greater than 62"
-msgstr "offset mai mare decât 62"
+#: or1k-desc.c:2148
+#, c-format
+msgid "internal error: or1k_cgen_cpu_open: no endianness specified"
+msgstr ""
-#: ppc-opc.c:881 ppc-opc.c:927 ppc-opc.c:975
-msgid "offset not a multiple of 4"
-msgstr "offsetul nu este multiplu de 4"
+#: ppc-dis.c:396
+#, c-format
+msgid "warning: ignoring unknown -M%s option"
+msgstr ""
-#: ppc-opc.c:883
-msgid "offset greater than 124"
-msgstr "offset mai mare decât 124"
+#: ppc-dis.c:1110
+#, fuzzy, c-format
+msgid ""
+"\n"
+"The following PPC specific disassembler options are supported for use with\n"
+"the -M switch:\n"
+msgstr ""
+"\n"
+"Opțiunile ARM de dezasamblor specifice următoare sunt permise cu folosirea\n"
+"switch-ului -M:\n"
-#: ppc-opc.c:902
-msgid "offset not a multiple of 8"
-msgstr "offsetul nu este multiplu de 8"
+#: ppc-opc.c:51 ppc-opc.c:74 ppc-opc.c:100 ppc-opc.c:130
+#, fuzzy
+msgid "invalid register"
+msgstr "Nume registru greșit"
-#: ppc-opc.c:904
-msgid "offset greater than 248"
-msgstr "offset mai mare de 248"
+#: ppc-opc.c:396
+msgid "invalid conditional option"
+msgstr "opțiune condițională invalidă"
-#: ppc-opc.c:950
-msgid "offset not between -2048 and 2047"
-msgstr "offsetul nu este între -2048 ºi 2047"
+#: ppc-opc.c:399
+msgid "invalid counter access"
+msgstr ""
+
+#: ppc-opc.c:463
+#, fuzzy
+msgid "BO value implies no branch hint, when using + or - modifier"
+msgstr "se încearcă setarea bitului y în folosirea modificatorilor + sau -"
+
+#: ppc-opc.c:468
+msgid "attempt to set y bit when using + or - modifier"
+msgstr "se încearcă setarea bitului y în folosirea modificatorilor + sau -"
+
+#: ppc-opc.c:470
+#, fuzzy
+msgid "attempt to set 'at' bits when using + or - modifier"
+msgstr "se încearcă setarea bitului y în folosirea modificatorilor + sau -"
+
+#: ppc-opc.c:574
+msgid "invalid offset: must be in the range [-512, -8] and be a multiple of 8"
+msgstr ""
-#: ppc-opc.c:973
-msgid "offset not between -8192 and 8191"
-msgstr "offsetul nu este între -8192 ºi 8191"
+#: ppc-opc.c:705
+#, fuzzy
+msgid "invalid R operand"
+msgstr "Cuvânt cheie W invalidv în slotul operand FR."
-#: ppc-opc.c:1011
-msgid "ignoring invalid mfcr mask"
-msgstr "se ignorã mascã mfcr invalidã"
+#: ppc-opc.c:760
+msgid "invalid mask field"
+msgstr ""
+
+#: ppc-opc.c:783
+#, fuzzy
+msgid "invalid mfcr mask"
+msgstr "se ignoră mască mfcr invalidă"
+
+#: ppc-opc.c:901 ppc-opc.c:919
+msgid "illegal L operand value"
+msgstr ""
+
+#: ppc-opc.c:942
+msgid "illegal WC operand value"
+msgstr ""
-#: ppc-opc.c:1059
-msgid "ignoring least significant bits in branch offset"
-msgstr "se ignorã cei mai puþin semnificanþi biþi în offsetul ramurii(branch)"
+#: ppc-opc.c:1039
+msgid "incompatible L operand value"
+msgstr ""
-#: ppc-opc.c:1090 ppc-opc.c:1125
+#: ppc-opc.c:1079 ppc-opc.c:1114
msgid "illegal bitmask"
msgstr "bitmask ilegal"
-#: ppc-opc.c:1192
-msgid "value out of range"
-msgstr "valoare în afara intervalului"
+#: ppc-opc.c:1201
+#, fuzzy
+msgid "address register in load range"
+msgstr "registru index în interval de încărcare"
+
+#: ppc-opc.c:1241
+msgid "illegal PL operand value"
+msgstr ""
-#: ppc-opc.c:1262
+#: ppc-opc.c:1302
msgid "index register in load range"
-msgstr "registru index în interval de încãrcare"
+msgstr "registru index în interval de încărcare"
-#: ppc-opc.c:1279
+#: ppc-opc.c:1331 ppc-opc.c:1417
msgid "source and target register operands must be different"
-msgstr "operanzii regiºtri sursã ºi destinaþie trebuie sã fie diferiþi"
+msgstr "operanzii regiștri sursă și destinație trebuie să fie diferiți"
-#: ppc-opc.c:1294
+#: ppc-opc.c:1362
msgid "invalid register operand when updating"
-msgstr "registru de operand invalid în updatare"
+msgstr "registru de operand invalid în updatare"
-#: ppc-opc.c:1335
-msgid "target register operand must be even"
-msgstr "operandul registru destinaþie trebuie sã fie par"
+#: ppc-opc.c:1480
+msgid "illegal immediate value"
+msgstr ""
-#: ppc-opc.c:1350
-msgid "source register operand must be even"
-msgstr "operandul registru sursã trebuie sã fie par"
+#: ppc-opc.c:1585
+msgid "invalid bat number"
+msgstr ""
-#. Mark as non-valid instruction.
-#: sparc-dis.c:760
-msgid "unknown"
-msgstr "necunoscut(ã)"
+#: ppc-opc.c:1620
+msgid "invalid sprg number"
+msgstr ""
-#: sparc-dis.c:835
-#, c-format
-msgid "Internal error: bad sparc-opcode.h: \"%s\", %#.8lx, %#.8lx\n"
-msgstr "Eroare internã: opcode.h sparc greºit: \"%s\", %#.8lx, %#.8lx\n"
+#: ppc-opc.c:1657
+msgid "invalid tbr number"
+msgstr ""
-#: sparc-dis.c:846
-#, c-format
-msgid "Internal error: bad sparc-opcode.h: \"%s\", %#.8lx, %#.8lx\n"
-msgstr "Eroare internã: opcode.h sparc greºit: \"%s\", %#.8lx, %#.8lx\n"
+#: ppc-opc.c:1743 ppc-opc.c:1789
+msgid "VSR overlaps ACC operand"
+msgstr ""
-#: sparc-dis.c:895
-#, c-format
-msgid "Internal error: bad sparc-opcode.h: \"%s\" == \"%s\"\n"
-msgstr "Eroare internã: opcode.h sparc greºit: \"%s\" == \"%s\"\n"
+#: ppc-opc.c:1896
+#, fuzzy
+msgid "invalid constant"
+msgstr "opțiune condițională invalidă"
+
+#: ppc-opc.c:1998 ppc-opc.c:2021 ppc-opc.c:2044 ppc-opc.c:2067
+msgid "UIMM = 00000 is illegal"
+msgstr ""
+
+#: ppc-opc.c:2090
+msgid "UIMM values >7 are illegal"
+msgstr ""
+
+#: ppc-opc.c:2113
+msgid "UIMM values >15 are illegal"
+msgstr ""
+
+#: ppc-opc.c:2136
+msgid "GPR odd is illegal"
+msgstr ""
+
+#: ppc-opc.c:2159 ppc-opc.c:2182
+msgid "invalid offset"
+msgstr ""
+
+#: ppc-opc.c:2205
+msgid "invalid Ddd value"
+msgstr ""
+
+#: ppc-opc.c:2258 ppc-opc.c:2285
+msgid "invalid TH value"
+msgstr ""
-#: v850-dis.c:221
+#. The option without '=' should be defined above.
+#: riscv-dis.c:103 riscv-dis.c:140
+#, fuzzy, c-format
+msgid "unrecognized disassembler option: %s"
+msgstr "Opțiune dezasamblor necunsocută: %s\n"
+
+#. Invalid options with '=', no option name before '=',
+#. and no value after '='.
+#: riscv-dis.c:111
+#, fuzzy, c-format
+msgid "unrecognized disassembler option with '=': %s"
+msgstr "Opțiune dezasamblor necunsocută: %s\n"
+
+#: riscv-dis.c:125
#, c-format
-msgid "unknown operand shift: %x\n"
-msgstr "schimbare(shift) de oberand necunoscutã: %x\n"
+msgid "unknown privileged spec set by %s=%s"
+msgstr ""
-#: v850-dis.c:233
+#: riscv-dis.c:132
#, c-format
-msgid "unknown pop reg: %d\n"
+msgid "mis-matched privilege spec set by %s=%s, the elf privilege attribute is %s"
+msgstr ""
+
+#: riscv-dis.c:526
+#, fuzzy, c-format
+msgid "# internal error, undefined modifier (%c)"
+msgstr "# eroare internă, modificator nedefinit(%c)"
+
+#: riscv-dis.c:1018
+msgid "Print numeric register names, rather than ABI names."
+msgstr ""
+
+#: riscv-dis.c:1021
+msgid "Disassemble only into canonical instructions."
+msgstr ""
+
+#: riscv-dis.c:1024
+msgid "Print the CSR according to the chosen privilege spec."
+msgstr ""
+
+#: riscv-dis.c:1100
+#, fuzzy, c-format
+msgid ""
+"\n"
+"The following RISC-V specific disassembler options are supported for use\n"
+"with the -M switch (multiple options should be separated by commas):\n"
+msgstr ""
+"\n"
+"Opțiunile MIPS de dezasamblor specifice următoare sunt permise cu folosirea\n"
+"switch-ului -M (opțiunile multiple trebuie separate prin virgulă:\n"
+
+#: rx-dis.c:139 rx-dis.c:163 rx-dis.c:171 rx-dis.c:179 rx-dis.c:187
+#, fuzzy
+msgid "<invalid register number>"
+msgstr "Nume registru greșit"
+
+#: rx-dis.c:147 rx-dis.c:195
+#, fuzzy
+msgid "<invalid condition code>"
+msgstr "opțiune condițională invalidă"
+
+#: rx-dis.c:155
+msgid "<invalid flag>"
+msgstr ""
+
+#: rx-dis.c:203
+msgid "<invalid opsize>"
+msgstr ""
+
+#: rx-dis.c:211
+msgid "<invalid size>"
+msgstr ""
+
+#: s12z-dis.c:239 s12z-dis.c:296 s12z-dis.c:307
+#, fuzzy
+msgid "<illegal reg num>"
+msgstr "<precizie ilegală>"
+
+#: s12z-dis.c:370
+msgid "<bad>"
+msgstr ""
+
+#: s12z-dis.c:380
+msgid ".<bad>"
+msgstr ""
+
+#: s390-dis.c:42
+msgid "Disassemble in ESA architecture mode"
+msgstr ""
+
+#: s390-dis.c:43
+msgid "Disassemble in z/Architecture mode"
+msgstr ""
+
+#: s390-dis.c:44
+msgid "Print unknown instructions according to length from first two bits"
+msgstr ""
+
+#: s390-dis.c:76
+#, fuzzy, c-format
+msgid "unknown S/390 disassembler option: %s"
+msgstr "Opțiune dezasamblor necunsocută: %s\n"
+
+#: s390-dis.c:416
+#, fuzzy, c-format
+msgid ""
+"\n"
+"The following S/390 specific disassembler options are supported for use\n"
+"with the -M switch (multiple options should be separated by commas):\n"
+msgstr ""
+"\n"
+"Opțiunile MIPS de dezasamblor specifice următoare sunt permise cu folosirea\n"
+"switch-ului -M (opțiunile multiple trebuie separate prin virgulă:\n"
+
+#: score-dis.c:653 score-dis.c:871 score-dis.c:1032 score-dis.c:1138
+#: score-dis.c:1146 score-dis.c:1153 score7-dis.c:691 score7-dis.c:854
+#, fuzzy
+msgid "<illegal instruction>"
+msgstr "<precizie ilegală>"
+
+#: sparc-dis.c:308 sparc-dis.c:318
+#, fuzzy, c-format
+msgid "internal error: bad sparc-opcode.h: \"%s\", %#.8lx, %#.8lx\n"
+msgstr "Eroare internă: opcode.h sparc greșit: \"%s\", %#.8lx, %#.8lx\n"
+
+#: sparc-dis.c:377
+#, fuzzy, c-format
+msgid "internal error: bad sparc-opcode.h: \"%s\" == \"%s\"\n"
+msgstr "Eroare internă: opcode.h sparc greșit: \"%s\" == \"%s\"\n"
+
+#. Mark as non-valid instruction.
+#: sparc-dis.c:1094
+msgid "unknown"
+msgstr "necunoscut(ă)"
+
+#: v850-dis.c:190
+msgid "<invalid s-reg number>"
+msgstr ""
+
+#: v850-dis.c:206
+msgid "<invalid reg number>"
+msgstr ""
+
+#: v850-dis.c:222
+msgid "<invalid v-reg number>"
+msgstr ""
+
+#: v850-dis.c:236
+msgid "<invalid CC-reg number>"
+msgstr ""
+
+#: v850-dis.c:250
+msgid "<invalid float-CC-reg number>"
+msgstr ""
+
+#: v850-dis.c:264
+msgid "<invalid cacheop number>"
+msgstr ""
+
+#: v850-dis.c:275
+msgid "<invalid prefop number>"
+msgstr ""
+
+#: v850-dis.c:510
+#, fuzzy, c-format
+msgid "unknown operand shift: %x"
+msgstr "schimbare(shift) de oberand necunoscută: %x\n"
+
+#: v850-dis.c:526
+#, fuzzy, c-format
+msgid "unknown reg: %d"
msgstr "pop reg necunoscut: %d\n"
#. The functions used to insert and extract complicated operands.
@@ -704,86 +2435,187 @@ msgstr "pop reg necunoscut: %d\n"
#. v850_insert_operand() in gas/config/tc-v850.c. Error messages
#. containing the string 'out of range' will be ignored unless a
#. specific command line option is given to GAS.
-#: v850-opc.c:68
+#: v850-opc.c:53
msgid "displacement value is not in range and is not aligned"
-msgstr "valoarea deplasãrii în afara intervalului ºi nealiniatã"
+msgstr "valoarea deplasării în afara intervalului și nealiniată"
-#: v850-opc.c:69
+#: v850-opc.c:54
msgid "displacement value is out of range"
msgstr "deplasare"
-#: v850-opc.c:70
+#: v850-opc.c:55
msgid "displacement value is not aligned"
-msgstr "valoarea deplasãrii nu este aliniatã"
+msgstr "valoarea deplasării nu este aliniată"
-#: v850-opc.c:72
+#: v850-opc.c:57
msgid "immediate value is out of range"
-msgstr "valoare directã(immediate) în afara intervalului"
+msgstr "valoare directă(immediate) în afara intervalului"
-#: v850-opc.c:83
-msgid "branch value not in range and to odd offset"
-msgstr "valoare ramurã(branch) în afara intervalului ºi la offset impar"
-
-#: v850-opc.c:85 v850-opc.c:117
+#: v850-opc.c:58
msgid "branch value out of range"
-msgstr "valoare ramurã(branch) în afara intervalului"
+msgstr "valoare ramură(branch) în afara intervalului"
-#: v850-opc.c:88 v850-opc.c:120
+#: v850-opc.c:59
+msgid "branch value not in range and to odd offset"
+msgstr "valoare ramură(branch) în afara intervalului și la offset impar"
+
+#: v850-opc.c:60
msgid "branch to odd offset"
-msgstr "ramurã(branch) la offset impar"
+msgstr "ramură(branch) la offset impar"
+
+#: v850-opc.c:61
+#, fuzzy
+msgid "position value is out of range"
+msgstr "valoare directă(immediate) în afara intervalului"
+
+#: v850-opc.c:62
+#, fuzzy
+msgid "width value is out of range"
+msgstr "valoare directă(immediate) în afara intervalului"
+
+#: v850-opc.c:63
+#, fuzzy
+msgid "SelID is out of range"
+msgstr "valoare în afara intervalului"
+
+#: v850-opc.c:64
+#, fuzzy
+msgid "vector8 is out of range"
+msgstr "valoare în afara intervalului"
+
+#: v850-opc.c:65
+#, fuzzy
+msgid "vector5 is out of range"
+msgstr "valoare în afara intervalului"
+
+#: v850-opc.c:66
+#, fuzzy
+msgid "imm10 is out of range"
+msgstr "valoare directă(immediate) în afara intervalului"
+
+#: v850-opc.c:67
+#, fuzzy
+msgid "SR/SelID is out of range"
+msgstr "valoare în afara intervalului"
+
+#: v850-opc.c:508
+msgid "invalid register for stack adjustment"
+msgstr "registru invalid pentru modificare stivă"
-#: v850-opc.c:115
-msgid "branch value not in range and to an odd offset"
-msgstr "valoare ramurã(branch) în afara intervalului ºi la offset impar"
+#: v850-opc.c:526
+#, fuzzy
+msgid "invalid register name"
+msgstr "Nume registru greșit"
-#: v850-opc.c:346
-msgid "invalid register for stack adjustment"
-msgstr "registru invalid pentru modificare stivã"
+#: wasm32-dis.c:93
+#, fuzzy
+msgid "Disassemble \"register\" names"
+msgstr "Nume registru greșit"
-#: v850-opc.c:370
-msgid "immediate value not in range and not even"
-msgstr "valoare directã(immediate) în afara intervalului ºi imparã"
+#: wasm32-dis.c:94
+msgid "Name well-known globals"
+msgstr ""
-#: v850-opc.c:375
-msgid "immediate value must be even"
-msgstr "valoarea directã(immediate) trebuie sã fie parã"
+#: wasm32-dis.c:549
+#, fuzzy, c-format
+msgid ""
+"The following WebAssembly-specific disassembler options are supported for use\n"
+"with the -M switch:\n"
+msgstr ""
+"\n"
+"Opțiunile ARM de dezasamblor specifice următoare sunt permise cu folosirea\n"
+"switch-ului -M:\n"
-#: xstormy16-asm.c:76
+#: xc16x-asm.c:66
+msgid "Missing '#' prefix"
+msgstr ""
+
+#: xc16x-asm.c:82
+msgid "Missing '.' prefix"
+msgstr ""
+
+#: xc16x-asm.c:98
+msgid "Missing 'pof:' prefix"
+msgstr ""
+
+#: xc16x-asm.c:114
+msgid "Missing 'pag:' prefix"
+msgstr ""
+
+#: xc16x-asm.c:130
+msgid "Missing 'sof:' prefix"
+msgstr ""
+
+#: xc16x-asm.c:146
+msgid "Missing 'seg:' prefix"
+msgstr ""
+
+#: xc16x-desc.c:3350
+#, c-format
+msgid "internal error: xc16x_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
+msgstr ""
+
+#: xc16x-desc.c:3438
+#, c-format
+msgid "internal error: xc16x_cgen_cpu_open: unsupported argument `%d'"
+msgstr ""
+
+#: xc16x-desc.c:3457
+#, c-format
+msgid "internal error: xc16x_cgen_cpu_open: no endianness specified"
+msgstr ""
+
+#: xstormy16-asm.c:71
msgid "Bad register in preincrement"
-msgstr "Registru greºit în preincrementare"
+msgstr "Registru greșit în preincrementare"
-#: xstormy16-asm.c:81
+#: xstormy16-asm.c:76
msgid "Bad register in postincrement"
-msgstr "Registru greºit în postincrementare"
+msgstr "Registru greșit în postincrementare"
-#: xstormy16-asm.c:83
+#: xstormy16-asm.c:78
msgid "Bad register name"
-msgstr "Nume registru greºit"
+msgstr "Nume registru greșit"
-#: xstormy16-asm.c:87
+#: xstormy16-asm.c:82
msgid "Label conflicts with register name"
-msgstr "Eticheta(label) se aflã în conflict cu numele de registru"
+msgstr "Eticheta(label) se află în conflict cu numele de registru"
-#: xstormy16-asm.c:91
+#: xstormy16-asm.c:86
msgid "Label conflicts with `Rx'"
-msgstr "Eticheta(label) se aflã în conflict cu `Rx'"
+msgstr "Eticheta(label) se află în conflict cu `Rx'"
-#: xstormy16-asm.c:93
+#: xstormy16-asm.c:88
msgid "Bad immediate expression"
-msgstr "Expresie directã(immediate) greºitã"
+msgstr "Expresie directă(immediate) greșită"
-#: xstormy16-asm.c:115
+#: xstormy16-asm.c:109
msgid "No relocation for small immediate"
-msgstr "Nici o relocare pentru mai mic directã(immediate)"
+msgstr "Nici o relocare pentru mai mic directă(immediate)"
-#: xstormy16-asm.c:125
+#: xstormy16-asm.c:119
msgid "Small operand was not an immediate number"
-msgstr "Operandul redus nu a fost un numãr direct(immediate)"
+msgstr "Operandul redus nu a fost un număr direct(immediate)"
-#: xstormy16-asm.c:164
+#: xstormy16-asm.c:157
msgid "Operand is not a symbol"
msgstr "Operandul nu este simbol"
-#: xstormy16-asm.c:172
+#: xstormy16-asm.c:165
msgid "Syntax error: No trailing ')'"
-msgstr "Eroare de sintaxã:Nu existã ')'"
+msgstr "Eroare de sintaxă:Nu există ')'"
+
+#: xstormy16-desc.c:1318
+#, c-format
+msgid "internal error: xstormy16_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
+msgstr ""
+
+#: xstormy16-desc.c:1406
+#, c-format
+msgid "internal error: xstormy16_cgen_cpu_open: unsupported argument `%d'"
+msgstr ""
+
+#: xstormy16-desc.c:1425
+#, c-format
+msgid "internal error: xstormy16_cgen_cpu_open: no endianness specified"
+msgstr ""
diff --git a/opcodes/po/sr.po b/opcodes/po/sr.po
index d2a54afd384..430d785d7a0 100644
--- a/opcodes/po/sr.po
+++ b/opcodes/po/sr.po
@@ -1,13 +1,13 @@
# Serbian translation of opcodes.
# Copyright © 2020 Free Software Foundation, Inc.
# This file is distributed under the same license as the binutils package.
-# МироÑлав Ðиколић <miroslavnikolic@rocketmail.com>, 2016–2021.
+# МироÑлав Ðиколић <miroslavnikolic@rocketmail.com>, 2016–2022.
msgid ""
msgstr ""
-"Project-Id-Version: opcodes-2.36.90\n"
-"Report-Msgid-Bugs-To: bug-binutils@gnu.org\n"
-"POT-Creation-Date: 2021-07-03 15:02+0100\n"
-"PO-Revision-Date: 2021-07-24 07:53+0200\n"
+"Project-Id-Version: opcodes-2.37.90\n"
+"Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n"
+"POT-Creation-Date: 2022-01-22 12:21+0000\n"
+"PO-Revision-Date: 2022-02-15 21:04+0200\n"
"Last-Translator: МироÑлав Ðиколић <miroslavnikolic@rocketmail.com>\n"
"Language-Team: Serbian <(nothing)>\n"
"Language: sr\n"
@@ -26,12 +26,22 @@ msgid "specified register cannot be written to"
msgstr "не могу да пишем у наведени региÑтар"
#. Invalid option.
-#: aarch64-dis.c:94 arc-dis.c:802 arm-dis.c:11652
+#: aarch64-dis.c:94 arc-dis.c:802 arm-dis.c:11670
#, c-format
msgid "unrecognised disassembler option: %s"
msgstr "непозната опција разложитеља: %s"
-#: aarch64-dis.c:3589
+#: aarch64-dis.c:3395
+#, c-format
+msgid "this `%s' should have an immediately preceding `%s'"
+msgstr "ово „%s“ треба да има одмах претходеће „%s“"
+
+#: aarch64-dis.c:3402
+#, c-format
+msgid "expected `%s' after previous `%s'"
+msgstr "очекивах „%s“ након претходног „%s“"
+
+#: aarch64-dis.c:3806
#, c-format
msgid ""
"\n"
@@ -42,7 +52,7 @@ msgstr ""
"Следеће опције разложитеља Ñпецифичне за „AARCH64“ Ñу подржане за коришћење\n"
"Ñа прекидачем „-M“ (више опција треба да Ñе раздвајају зарезима):\n"
-#: aarch64-dis.c:3593
+#: aarch64-dis.c:3810
#, c-format
msgid ""
"\n"
@@ -51,7 +61,7 @@ msgstr ""
"\n"
" no-aliases Ðе иÑпиÑује алијаÑе инÑтрукције.\n"
-#: aarch64-dis.c:3596
+#: aarch64-dis.c:3813
#, c-format
msgid ""
"\n"
@@ -60,7 +70,7 @@ msgstr ""
"\n"
" aliases ИÑпиÑује алијаÑе инÑтрукције.\n"
-#: aarch64-dis.c:3599
+#: aarch64-dis.c:3816
#, c-format
msgid ""
"\n"
@@ -69,7 +79,7 @@ msgstr ""
"\n"
" no-notes Ðе иÑпиÑује напомене инÑтрукције.\n"
-#: aarch64-dis.c:3602
+#: aarch64-dis.c:3819
#, c-format
msgid ""
"\n"
@@ -78,7 +88,7 @@ msgstr ""
"\n"
" notes ИÑпиÑује напомене инÑтрукције.\n"
-#: aarch64-dis.c:3606
+#: aarch64-dis.c:3823
#, c-format
msgid ""
"\n"
@@ -87,265 +97,281 @@ msgstr ""
"\n"
" debug_dump ВременÑки прекидач за праћење прочишћавања.\n"
-#: aarch64-dis.c:3610 arc-dis.c:1551 arc-dis.c:1572 arc-dis.c:1575
-#: mips-dis.c:2807 mips-dis.c:2817 mips-dis.c:2820 nfp-dis.c:2981
-#: riscv-dis.c:655
+#: aarch64-dis.c:3827 arc-dis.c:1551 arc-dis.c:1572 arc-dis.c:1575
+#: loongarch-dis.c:306 mips-dis.c:2807 mips-dis.c:2817 mips-dis.c:2820
+#: nfp-dis.c:2993 riscv-dis.c:1140 riscv-dis.c:1143
#, c-format
msgid "\n"
msgstr "\n"
-#: aarch64-opc.c:1350
+#: aarch64-opc.c:1365
msgid "immediate value"
msgstr "вредноÑÑ‚ непоÑредног"
-#: aarch64-opc.c:1360
+#: aarch64-opc.c:1375
msgid "immediate offset"
msgstr "померај непоÑредног"
-#: aarch64-opc.c:1370
+#: aarch64-opc.c:1385
msgid "register number"
msgstr "број региÑтра"
-#: aarch64-opc.c:1380
+#: aarch64-opc.c:1395
msgid "register element index"
msgstr "Ð¸Ð½Ð´ÐµÐºÑ ÐµÐ»ÐµÐ¼ÐµÐ½Ñ‚Ð° региÑтра"
-#: aarch64-opc.c:1390
+#: aarch64-opc.c:1405
msgid "shift amount"
msgstr "Ð¸Ð·Ð½Ð¾Ñ Ð¿Ð¾Ð¼Ð°ÐºÐ°"
-#: aarch64-opc.c:1402
+#: aarch64-opc.c:1417
msgid "multiplier"
msgstr "множилац"
-#: aarch64-opc.c:1475
+#: aarch64-opc.c:1491
msgid "reg pair must start from even reg"
msgstr "пар израза мора почети на парном изразу"
-#: aarch64-opc.c:1481
+#: aarch64-opc.c:1497
msgid "reg pair must be contiguous"
msgstr "пар израза мора бити непрекидан"
-#: aarch64-opc.c:1495
+#: aarch64-opc.c:1511
msgid "extraneous register"
msgstr "Ñтрани региÑтар"
-#: aarch64-opc.c:1501
+#: aarch64-opc.c:1517
msgid "missing register"
msgstr "недоÑтаје региÑтар"
-#: aarch64-opc.c:1512
+#: aarch64-opc.c:1528
msgid "stack pointer register expected"
msgstr "очекиван је региÑтар показивача Ñпремника"
-#: aarch64-opc.c:1537
+#: aarch64-opc.c:1553
msgid "z0-z15 expected"
msgstr "очекивано је „z0-z15“"
-#: aarch64-opc.c:1538
+#: aarch64-opc.c:1554
msgid "z0-z7 expected"
msgstr "очекивано је „z0-z7“"
-#: aarch64-opc.c:1564
+#: aarch64-opc.c:1580
msgid "invalid register list"
msgstr "неиÑправан ÑпиÑак региÑтра"
-#: aarch64-opc.c:1578
+#: aarch64-opc.c:1594
msgid "p0-p7 expected"
msgstr "очекивано је „p0-p7“"
-#: aarch64-opc.c:1604 aarch64-opc.c:1612
+#: aarch64-opc.c:1620 aarch64-opc.c:1628
msgid "unexpected address writeback"
msgstr "неочекивано повратно пиÑање адреÑе"
-#: aarch64-opc.c:1623
+#: aarch64-opc.c:1639
msgid "address writeback expected"
msgstr "очекивано је повратно пиÑање адреÑе"
-#: aarch64-opc.c:1670
+#: aarch64-opc.c:1686
msgid "negative or unaligned offset expected"
msgstr "очекиван је негативан или непоравнат померај"
-#: aarch64-opc.c:1727
+#: aarch64-opc.c:1743
msgid "invalid register offset"
msgstr "неиÑправан померај региÑтра"
-#: aarch64-opc.c:1749
+#: aarch64-opc.c:1765
msgid "invalid post-increment amount"
msgstr "неиÑправан Ð¸Ð·Ð½Ð¾Ñ Ð¿Ð¾ÑÑ‚-увећања"
-#: aarch64-opc.c:1765 aarch64-opc.c:2274
+#: aarch64-opc.c:1781 aarch64-opc.c:2299
msgid "invalid shift amount"
msgstr "неиÑправан Ð¸Ð·Ð½Ð¾Ñ Ð¿Ð¾Ð¼Ð°ÐºÐ°"
-#: aarch64-opc.c:1778
+#: aarch64-opc.c:1794
msgid "invalid extend/shift operator"
msgstr "неиÑправан оператор проширења/помака"
-#: aarch64-opc.c:1824 aarch64-opc.c:2076 aarch64-opc.c:2111 aarch64-opc.c:2130
-#: aarch64-opc.c:2138 aarch64-opc.c:2227 aarch64-opc.c:2404 aarch64-opc.c:2504
-#: aarch64-opc.c:2517
+#: aarch64-opc.c:1840 aarch64-opc.c:2101 aarch64-opc.c:2136 aarch64-opc.c:2155
+#: aarch64-opc.c:2163 aarch64-opc.c:2252 aarch64-opc.c:2429 aarch64-opc.c:2529
+#: aarch64-opc.c:2542
msgid "immediate out of range"
msgstr "непоÑредни је ван опÑега"
-#: aarch64-opc.c:1846 aarch64-opc.c:1888 aarch64-opc.c:1950 aarch64-opc.c:1984
+#: aarch64-opc.c:1870 aarch64-opc.c:1912 aarch64-opc.c:1975 aarch64-opc.c:2009
msgid "invalid addressing mode"
msgstr "непознат режим адреÑирања"
-#: aarch64-opc.c:1942
+#: aarch64-opc.c:1967
msgid "index register xzr is not allowed"
msgstr "региÑтар индекÑа „xzr“ није допуштен"
-#: aarch64-opc.c:2064 aarch64-opc.c:2086 aarch64-opc.c:2307 aarch64-opc.c:2315
-#: aarch64-opc.c:2381 aarch64-opc.c:2410
+#: aarch64-opc.c:2089 aarch64-opc.c:2111 aarch64-opc.c:2332 aarch64-opc.c:2340
+#: aarch64-opc.c:2406 aarch64-opc.c:2435
msgid "invalid shift operator"
msgstr "неиÑправан оператор помака"
-#: aarch64-opc.c:2070
+#: aarch64-opc.c:2095
msgid "shift amount must be 0 or 12"
msgstr "Ð¸Ð·Ð½Ð¾Ñ Ð¿Ð¾Ð¼Ð°ÐºÐ° мора бити 0 или 12"
-#: aarch64-opc.c:2093
+#: aarch64-opc.c:2118
msgid "shift amount must be a multiple of 16"
msgstr "Ð¸Ð·Ð½Ð¾Ñ Ð¿Ð¾Ð¼Ð°ÐºÐ° мора бити множилац од 16"
-#: aarch64-opc.c:2105
+#: aarch64-opc.c:2130
msgid "negative immediate value not allowed"
msgstr "негативна вредноÑÑ‚ непоÑредног није дозвољена"
-#: aarch64-opc.c:2238
+#: aarch64-opc.c:2263
msgid "immediate zero expected"
msgstr "очекиван је непоÑредни нула"
-#: aarch64-opc.c:2252
+#: aarch64-opc.c:2277
msgid "rotate expected to be 0, 90, 180 or 270"
msgstr "очекивано је да заокрет буде 0, 90, 180 или 270"
-#: aarch64-opc.c:2263
+#: aarch64-opc.c:2288
msgid "rotate expected to be 90 or 270"
msgstr "очекивано је да заокрет буде 90 или 270"
-#: aarch64-opc.c:2323
+#: aarch64-opc.c:2348
msgid "shift is not permitted"
msgstr "помак није допуштен"
-#: aarch64-opc.c:2348
+#: aarch64-opc.c:2373
msgid "invalid value for immediate"
msgstr "неиÑправна вредноÑÑ‚ за непоÑредног"
-#: aarch64-opc.c:2373
+#: aarch64-opc.c:2398
msgid "shift amount must be 0 or 16"
msgstr "Ð¸Ð·Ð½Ð¾Ñ Ð¿Ð¾Ð¼Ð°ÐºÐ° мора бити 0 или 16"
-#: aarch64-opc.c:2394
+#: aarch64-opc.c:2419
msgid "floating-point immediate expected"
msgstr "очекиван је непоÑредни Ñа покретним зарезом"
-#: aarch64-opc.c:2428
+#: aarch64-opc.c:2453
msgid "no shift amount allowed for 8-bit constants"
msgstr "Ð¸Ð·Ð½Ð¾Ñ Ð¿Ð¾Ð¼Ð°ÐºÐ° није допуштен за 8-битне конÑтанте"
-#: aarch64-opc.c:2438
+#: aarch64-opc.c:2463
msgid "shift amount must be 0 or 8"
msgstr "Ð¸Ð·Ð½Ð¾Ñ Ð¿Ð¾Ð¼Ð°ÐºÐ° мора бити 0 или 8"
-#: aarch64-opc.c:2451
+#: aarch64-opc.c:2476
msgid "immediate too big for element size"
msgstr "непоÑредни је превелик за величину елеммента"
-#: aarch64-opc.c:2458
+#: aarch64-opc.c:2483
msgid "invalid arithmetic immediate"
msgstr "неиÑправан непоÑредни аритметике"
-#: aarch64-opc.c:2472
+#: aarch64-opc.c:2497
msgid "floating-point value must be 0.5 or 1.0"
msgstr "вредноÑÑ‚ покретног зареза мора бити 0.5 или 1.0"
-#: aarch64-opc.c:2482
+#: aarch64-opc.c:2507
msgid "floating-point value must be 0.5 or 2.0"
msgstr "вредноÑÑ‚ покретног зареза мора бити 0.5 или 2.0"
-#: aarch64-opc.c:2492
+#: aarch64-opc.c:2517
msgid "floating-point value must be 0.0 or 1.0"
msgstr "вредноÑÑ‚ покретног зареза мора бити 0.0 или 1.0"
-#: aarch64-opc.c:2523
+#: aarch64-opc.c:2548
msgid "invalid replicated MOV immediate"
msgstr "неиÑправан реплицирани „MOV“ непоÑредни"
-#: aarch64-opc.c:2644
+#: aarch64-opc.c:2656
msgid "extend operator expected"
msgstr "очекиван је проширени оператор"
-#: aarch64-opc.c:2657
+#: aarch64-opc.c:2669
msgid "missing extend operator"
msgstr "недоÑтаје проширени оператор"
-#: aarch64-opc.c:2663
+#: aarch64-opc.c:2675
msgid "'LSL' operator not allowed"
msgstr "„LSL“ оператор није допуштен"
-#: aarch64-opc.c:2684
+#: aarch64-opc.c:2696
msgid "W register expected"
msgstr "„W“ региÑтар је очекиван"
-#: aarch64-opc.c:2695
+#: aarch64-opc.c:2707
msgid "shift operator expected"
msgstr "очекиван је оператор помака"
-#: aarch64-opc.c:2702
+#: aarch64-opc.c:2714
msgid "'ROR' operator not allowed"
msgstr "„ROR“ оператор није допуштен"
-#: aarch64-opc.c:3722
+#: aarch64-opc.c:3852
msgid "reading from a write-only register"
msgstr "читам из региÑтра Ñамо за пиÑање"
-#: aarch64-opc.c:3724
+#: aarch64-opc.c:3854
msgid "writing to a read-only register"
msgstr "пишем у региÑтар Ñамо за читање"
-#: aarch64-opc.c:5165
+#: aarch64-opc.c:5445
+msgid "the three register operands must be distinct from one another"
+msgstr "операнди три региÑтра морају бити различити"
+
+#: aarch64-opc.c:5556
+msgid "destination register differs from preceding instruction"
+msgstr "региÑтар одредишта Ñе разликује од претходеће инÑтрукције"
+
+#: aarch64-opc.c:5559
+msgid "source register differs from preceding instruction"
+msgstr "региÑтар изворишта Ñе разликује од претходеће инÑтрукције"
+
+#: aarch64-opc.c:5562
+msgid "size register differs from preceding instruction"
+msgstr "региÑтар величине Ñе разликује од претходеће инÑтрукције"
+
+#: aarch64-opc.c:5610
msgid "instruction opens new dependency sequence without ending previous one"
msgstr "инÑтрукција је отворила нови низ завиÑноÑти а да није завршила претходни"
-#: aarch64-opc.c:5185
+#: aarch64-opc.c:5639
msgid "previous `movprfx' sequence not closed"
msgstr "претходни „movprfx“ низ није затворен"
-#: aarch64-opc.c:5204
+#: aarch64-opc.c:5658
msgid "SVE instruction expected after `movprfx'"
msgstr "инÑтрукција „SVE“ је очекивана након „movprfx“"
-#: aarch64-opc.c:5217
+#: aarch64-opc.c:5671
msgid "SVE `movprfx' compatible instruction expected"
msgstr "очекивана је „SVE movprfx“ ÑаглаÑна инÑтрукција"
-#: aarch64-opc.c:5304
+#: aarch64-opc.c:5759
msgid "predicated instruction expected after `movprfx'"
msgstr "предвиђена инÑтрукција је очекивана након „movprfx“"
-#: aarch64-opc.c:5316
+#: aarch64-opc.c:5771
msgid "merging predicate expected due to preceding `movprfx'"
msgstr "Ñтапање предиката је очекивано уÑлед претходећег „movprfx“"
-#: aarch64-opc.c:5328
+#: aarch64-opc.c:5783
msgid "predicate register differs from that in preceding `movprfx'"
msgstr "региÑтрар предиката Ñе разликује од оног у претходећем „movprfx“"
-#: aarch64-opc.c:5347
+#: aarch64-opc.c:5802
msgid "output register of preceding `movprfx' not used in current instruction"
msgstr "региÑтар излаза претходеће „movprfx“ није коришћен у текућој инÑтрукцији"
-#: aarch64-opc.c:5360
+#: aarch64-opc.c:5815
msgid "output register of preceding `movprfx' expected as output"
msgstr "региÑтар излаза претходеће „movprfx“ је очекиван као излаз"
-#: aarch64-opc.c:5372
+#: aarch64-opc.c:5827
msgid "output register of preceding `movprfx' used as input"
msgstr "региÑтар излаза претходеће „movprfx“ је коришћен као улаз"
-#: aarch64-opc.c:5388
+#: aarch64-opc.c:5843
msgid "register size not compatible with previous `movprfx'"
msgstr "величина региÑтра није ÑаглаÑна Ñа претходним „movprfx“"
@@ -437,7 +463,7 @@ msgstr ""
"Следеће опције разложитеља Ñпецифичне за „ARC“ Ñу подржане за коришћење\n"
"Ñа прекидачем „-M“ (више опција треба да Ñе раздвајају зарезима):\n"
-#: arc-dis.c:1558 mips-dis.c:2812
+#: arc-dis.c:1558 mips-dis.c:2812 riscv-dis.c:1135
#, c-format
msgid ""
"\n"
@@ -618,67 +644,67 @@ msgstr "вредноÑÑ‚ мор бити у опÑегу од 0 до 31"
msgid "invalid position, should be one of: 0,4,8,...124."
msgstr "неиÑправан положај, треба да буде: 0,4,8,...или 124."
-#: arm-dis.c:5187
+#: arm-dis.c:5204
msgid "Select raw register names"
msgstr "Бира Ñирове називе региÑтра"
-#: arm-dis.c:5189
+#: arm-dis.c:5206
msgid "Select register names used by GCC"
msgstr "Бира називе региÑтра које кориÑти „GCC“"
-#: arm-dis.c:5191
+#: arm-dis.c:5208
msgid "Select register names used in ARM's ISA documentation"
msgstr "Бира називе региÑтра коришћене у „ISA“ документацији „ARM“-а"
-#: arm-dis.c:5193
+#: arm-dis.c:5210
msgid "Assume all insns are Thumb insns"
msgstr "ПретпоÑтавља да Ñу Ñви инÑнÑи „Thumb“ инÑнÑи"
-#: arm-dis.c:5194
+#: arm-dis.c:5211
msgid "Examine preceding label to determine an insn's type"
msgstr "ПроиÑпитује претходећи Ð½Ð°Ñ‚Ð¿Ð¸Ñ Ð´Ð° одреди врÑту „insn“-а"
-#: arm-dis.c:5195
+#: arm-dis.c:5212
msgid "Select register names used in the APCS"
msgstr "Бира називе региÑтра који Ñе кориÑте у „APCS“-у"
-#: arm-dis.c:5197
+#: arm-dis.c:5214
msgid "Select register names used in the ATPCS"
msgstr "Бира називе региÑтра који Ñе кориÑте у „ATPCS“-у"
-#: arm-dis.c:5199
+#: arm-dis.c:5216
msgid "Select special register names used in the ATPCS"
msgstr "Бира поÑебне називе региÑтра који Ñе кориÑте у „ATPCS“-у"
-#: arm-dis.c:5201
+#: arm-dis.c:5218
msgid "Enable CDE extensions for coprocessor N space"
msgstr "Укључује „CDE“ проширења за N проÑтор копроцеÑора"
-#: arm-dis.c:8373
+#: arm-dis.c:8390
msgid "<illegal precision>"
msgstr "<неиÑправна тачноÑÑ‚>"
-#: arm-dis.c:11613
+#: arm-dis.c:11631
#, c-format
msgid "unrecognised register name set: %s"
msgstr "непознат назив региÑтра је подешен: %s"
-#: arm-dis.c:11627
+#: arm-dis.c:11645
#, c-format
msgid "cde coprocessor not between 0-7: %s"
msgstr "„cde“ копроцеÑор није између 0-7: %s"
-#: arm-dis.c:11633
+#: arm-dis.c:11651
#, c-format
msgid "coproc must have an argument: %s"
msgstr "копроцеÑор мора имати аргумент: %s"
-#: arm-dis.c:11646
+#: arm-dis.c:11664
#, c-format
msgid "coprocN argument takes options \"generic\", \"cde\", or \"CDE\": %s"
msgstr "аргумент копроцN може да има опције „generic“, „cde“, или „CDE“: %s"
-#: arm-dis.c:12357
+#: arm-dis.c:12374
#, c-format
msgid ""
"\n"
@@ -689,17 +715,17 @@ msgstr ""
"Следеће опције разложитеља Ñпецифичне за „ARM“ Ñу подржане за коришћење Ñа\n"
"прекидачем „-M“:\n"
-#: avr-dis.c:115 avr-dis.c:136
+#: avr-dis.c:124 avr-dis.c:145
#, c-format
msgid "undefined"
msgstr "неодређено"
-#: avr-dis.c:218
+#: avr-dis.c:236
#, c-format
msgid "internal disassembler error"
msgstr "унутрашња грешка разложитеља"
-#: avr-dis.c:272
+#: avr-dis.c:290
#, c-format
msgid "unknown constraint `%c'"
msgstr "непознато ограничење „%c“"
@@ -786,17 +812,17 @@ msgstr "лоша инÑтрукција „%.50s...“"
msgid "bad instruction `%.50s'"
msgstr "лоша инÑтрукција „%.50s“"
-#: bpf-desc.c:1767
+#: bpf-desc.c:1768
#, c-format
msgid "internal error: bpf_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
msgstr "унутрашња грешка: bpf_cgen_rebuild_tables: Ñукобљене „insn-chunk-bitsize“ вредноÑти: %d наÑпрам %d"
-#: bpf-desc.c:1855
+#: bpf-desc.c:1856
#, c-format
msgid "internal error: bpf_cgen_cpu_open: unsupported argument `%d'"
msgstr "унутрашња грешка: bpf_cgen_cpu_open: неподржан аргумент „%d“"
-#: bpf-desc.c:1874
+#: bpf-desc.c:1875
#, c-format
msgid "internal error: bpf_cgen_cpu_open: no endianness specified"
msgstr "унутрашња грешка: bpf_cgen_cpu_open: ниÑу наведене крајњоÑти"
@@ -894,17 +920,17 @@ msgstr "унутрашња грешка: непознато поље %d прил
msgid "operand out of range (%lu not between %lu and %lu)"
msgstr "операнд је ван опÑега (%lu није између %lu и %lu)"
-#: cris-desc.c:2621
+#: cris-desc.c:2622
#, c-format
msgid "internal error: cris_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
msgstr "унутрашња грешка: cris_cgen_rebuild_tables: Ñукобљене „insn-chunk-bitsize“ вредноÑти: %d наÑпрам %d"
-#: cris-desc.c:2709
+#: cris-desc.c:2710
#, c-format
msgid "internal error: cris_cgen_cpu_open: unsupported argument `%d'"
msgstr "унутрашња грешка: cris_cgen_cpu_open: неподржан аргумент „%d“"
-#: cris-desc.c:2728
+#: cris-desc.c:2729
#, c-format
msgid "internal error: cris_cgen_cpu_open: no endianness specified"
msgstr "унутрашња грешка: cris_cgen_cpu_open: ниÑу наведене крајњоÑти"
@@ -930,12 +956,12 @@ msgstr "Ðепозната грешка %d\n"
msgid "Address 0x%s is out of bounds.\n"
msgstr "ÐдреÑа 0Ñ…%s је изван граница.\n"
-#: disassemble.c:848
+#: disassemble.c:859
#, c-format
msgid "assertion fail %s:%d"
msgstr "неуÑпех тврдње „%s:%d“"
-#: disassemble.c:849
+#: disassemble.c:860
msgid "Please report this bug"
msgstr "ИзвеÑтите о овој грешци"
@@ -974,17 +1000,17 @@ msgstr "ПРЕКИДÐÐœ: непознат операнд"
msgid "Not a pc-relative address."
msgstr "Ðије адреÑа која Ñе одноÑи на пц."
-#: epiphany-desc.c:2109
+#: epiphany-desc.c:2110
#, c-format
msgid "internal error: epiphany_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
msgstr "унутрашња грешка: epiphany_cgen_rebuild_tables: Ñукобљене „insn-chunk-bitsize“ вредноÑти: %d наÑпрам %d"
-#: epiphany-desc.c:2197
+#: epiphany-desc.c:2198
#, c-format
msgid "internal error: epiphany_cgen_cpu_open: unsupported argument `%d'"
msgstr "унутрашња грешка: epiphany_cgen_cpu_open: неподржан аргумент „%d“"
-#: epiphany-desc.c:2216
+#: epiphany-desc.c:2217
#, c-format
msgid "internal error: epiphany_cgen_cpu_open: no endianness specified"
msgstr "унутрашња грешка: epiphany_cgen_cpu_open: ниÑу наведене крајњоÑти"
@@ -1005,17 +1031,17 @@ msgstr "РегиÑтар мора бити између r8 и r15"
msgid "Register list is not valid"
msgstr "СпиÑак региÑтра није иÑправан"
-#: fr30-desc.c:1586
+#: fr30-desc.c:1587
#, c-format
msgid "internal error: fr30_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
msgstr "унутрашња грешка: fr30_cgen_rebuild_tables: Ñукобљене „insn-chunk-bitsize“ вредноÑти: %d наÑпрам %d"
-#: fr30-desc.c:1674
+#: fr30-desc.c:1675
#, c-format
msgid "internal error: fr30_cgen_cpu_open: unsupported argument `%d'"
msgstr "унутрашња грешка: fr30_cgen_cpu_open: неподржан аргумент „%d“"
-#: fr30-desc.c:1693
+#: fr30-desc.c:1694
#, c-format
msgid "internal error: fr30_cgen_cpu_open: no endianness specified"
msgstr "унутрашња грешка: fr30_cgen_cpu_open: ниÑу наведене крајњоÑти"
@@ -1036,17 +1062,17 @@ msgstr "ВредноÑÑ‚ операнда A мора бити 0 или 1"
msgid "register number must be even"
msgstr "број региÑтра мора бити паран"
-#: frv-desc.c:6326
+#: frv-desc.c:6327
#, c-format
msgid "internal error: frv_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
msgstr "унутрашња грешка: frv_cgen_rebuild_tables: Ñукобљене „insn-chunk-bitsize“ вредноÑти: %d наÑпрам %d"
-#: frv-desc.c:6414
+#: frv-desc.c:6415
#, c-format
msgid "internal error: frv_cgen_cpu_open: unsupported argument `%d'"
msgstr "унутрашња грешка: frv_cgen_cpu_open: неподржан аргумент „%d“"
-#: frv-desc.c:6433
+#: frv-desc.c:6434
#, c-format
msgid "internal error: frv_cgen_cpu_open: no endianness specified"
msgstr "унутрашња грешка: frv_cgen_cpu_open: ниÑу наведене крајњоÑти"
@@ -1076,11 +1102,11 @@ msgstr "Hmmmm 0x%x"
msgid "Don't understand 0x%x \n"
msgstr "Ðе разумем 0x%x \n"
-#: i386-dis.c:8591
+#: i386-dis.c:8528
msgid "<internal disassembler error>"
msgstr "<унутрашња грешка разложитеља>"
-#: i386-dis.c:8900
+#: i386-dis.c:8802
#, c-format
msgid ""
"\n"
@@ -1091,32 +1117,32 @@ msgstr ""
"Следеће опције разложитеља Ñпецифичне за „i386/x86-64“ Ñу подржане за коришћење\n"
"Ñа прекидачем „-M“ (више опција треба да Ñе раздвајају зарезима):\n"
-#: i386-dis.c:8904
+#: i386-dis.c:8806
#, c-format
msgid " x86-64 Disassemble in 64bit mode\n"
msgstr " x86-64 Разлаже у режиму 64-бита\n"
-#: i386-dis.c:8905
+#: i386-dis.c:8807
#, c-format
msgid " i386 Disassemble in 32bit mode\n"
msgstr " i386 Разлаже у режиму 32-бита\n"
-#: i386-dis.c:8906
+#: i386-dis.c:8808
#, c-format
msgid " i8086 Disassemble in 16bit mode\n"
msgstr " i8086 Разлаже у режиму 16-бита\n"
-#: i386-dis.c:8907
+#: i386-dis.c:8809
#, c-format
msgid " att Display instruction in AT&T syntax\n"
msgstr " att Приказује инÑтрукцију у ÑинтакÑи „AT&T“-ја\n"
-#: i386-dis.c:8908
+#: i386-dis.c:8810
#, c-format
msgid " intel Display instruction in Intel syntax\n"
msgstr " intel Приказује инÑтрукцију у ÑинтакÑи Интела\n"
-#: i386-dis.c:8909
+#: i386-dis.c:8811
#, c-format
msgid ""
" att-mnemonic\n"
@@ -1125,7 +1151,7 @@ msgstr ""
" att-mnemonic\n"
" Приказује инÑтрукцију у мнемонику „AT&T“-а\n"
-#: i386-dis.c:8911
+#: i386-dis.c:8813
#, c-format
msgid ""
" intel-mnemonic\n"
@@ -1134,136 +1160,136 @@ msgstr ""
" intel-mnemonic\n"
" Приказује инÑтрукцију у мнемонику Интела\n"
-#: i386-dis.c:8913
+#: i386-dis.c:8815
#, c-format
msgid " addr64 Assume 64bit address size\n"
msgstr " addr64 ПретпоÑтавља величину адреÑе од 64 бита\n"
-#: i386-dis.c:8914
+#: i386-dis.c:8816
#, c-format
msgid " addr32 Assume 32bit address size\n"
msgstr " addr32 ПретпоÑтавља величину адреÑе од 32 бита\n"
-#: i386-dis.c:8915
+#: i386-dis.c:8817
#, c-format
msgid " addr16 Assume 16bit address size\n"
msgstr " addr16 ПретпоÑтавља величину адреÑе од 16 бита\n"
-#: i386-dis.c:8916
+#: i386-dis.c:8818
#, c-format
msgid " data32 Assume 32bit data size\n"
msgstr " data32 ПретпоÑтавља величину података од 32 бита\n"
-#: i386-dis.c:8917
+#: i386-dis.c:8819
#, c-format
msgid " data16 Assume 16bit data size\n"
msgstr " data16 ПретпоÑтавља величину података од 16 бита\n"
-#: i386-dis.c:8918
+#: i386-dis.c:8820
#, c-format
msgid " suffix Always display instruction suffix in AT&T syntax\n"
msgstr " suffix Увек приказује ÑÑƒÑ„Ð¸ÐºÑ Ð¸Ð½Ñтрукције у ÑинтакÑи „AT&T“-ја\n"
-#: i386-dis.c:8919
+#: i386-dis.c:8821
#, c-format
msgid " amd64 Display instruction in AMD64 ISA\n"
msgstr " amd64 Приказује инÑтрукцију у „AMD64 ISA“\n"
-#: i386-dis.c:8920
+#: i386-dis.c:8822
#, c-format
msgid " intel64 Display instruction in Intel64 ISA\n"
msgstr " intel64 Приказује инÑтрукције у „Intel64 ISA“\n"
-#: i386-dis.c:9484
+#: i386-dis.c:9402
msgid "64-bit address is disabled"
msgstr "64-битна адреÑа је иÑкључена"
-#: i386-gen.c:851
+#: i386-gen.c:856
#, c-format
msgid "%s: error: "
msgstr "%s: грешка: "
-#: i386-gen.c:1007
+#: i386-gen.c:1012
#, c-format
msgid "%s: %d: unknown bitfield: %s\n"
msgstr "%s: %d: непознато поље бита: %s\n"
-#: i386-gen.c:1009
+#: i386-gen.c:1014
#, c-format
msgid "unknown bitfield: %s\n"
msgstr "непознато поље бита: %s\n"
-#: i386-gen.c:1072
+#: i386-gen.c:1077
#, c-format
msgid "%s: %d: missing `)' in bitfield: %s\n"
msgstr "%s: %d: недоÑтаје ) у пољу бита: %s\n"
-#: i386-gen.c:1173
+#: i386-gen.c:1178
#, c-format
msgid "unknown broadcast operand: %s\n"
msgstr "непознат операнд емитовања: %s\n"
-#: i386-gen.c:1228
+#: i386-gen.c:1233
#, c-format
msgid "%s:%d: Conflicting opcode space specifications\n"
msgstr "%s:%d: Сукобљавајуће одредбе опкод размака\n"
-#: i386-gen.c:1232
+#: i386-gen.c:1237
#, c-format
msgid "%s:%d: Warning: redundant opcode space specification\n"
msgstr "%s:%d: Упозорење: понављајућа одредба опкод размака\n"
-#: i386-gen.c:1241
+#: i386-gen.c:1246
#, c-format
msgid "%s:%d: Conflicting prefix specifications\n"
msgstr "%s:%d: Сукобљавајуће одредбе префикÑа\n"
-#: i386-gen.c:1245
+#: i386-gen.c:1250
#, c-format
msgid "%s:%d: Warning: redundant prefix specification\n"
msgstr "%s:%d: Упозорење: понављајућа одредба префикÑа\n"
-#: i386-gen.c:1455
+#: i386-gen.c:1460
#, c-format
msgid "%s:%d: %s: unrecognized opcode encoding space\n"
msgstr "%s:%d: %s: непознат размак опкод кодирања\n"
-#: i386-gen.c:1461
+#: i386-gen.c:1466
#, c-format
msgid "%s:%d: %s: residual opcode (0x%0*llx) too large\n"
msgstr "%s:%d: %s: заоÑтали опкод (0x%0*llx) је превелик\n"
-#: i386-gen.c:1883
+#: i386-gen.c:1888
#, c-format
msgid "can't find i386-reg.tbl for reading, errno = %s\n"
msgstr "не могу да нађем „i386-reg.tbl“ за читање, грешка = %s\n"
-#: i386-gen.c:1961
+#: i386-gen.c:1966
#, c-format
msgid "can't create i386-init.h, errno = %s\n"
msgstr "не могу да направим „i386-init.h“, грешка = %s\n"
-#: i386-gen.c:2051 ia64-gen.c:2829
+#: i386-gen.c:2056 ia64-gen.c:2829
#, c-format
msgid "unable to change directory to \"%s\", errno = %s\n"
msgstr "не могу да пређем у директоријум „%s“, гршка = %s\n"
-#: i386-gen.c:2065 i386-gen.c:2070
+#: i386-gen.c:2070 i386-gen.c:2075
#, c-format
msgid "CpuMax != %d!\n"
msgstr "CpuMax != %d!\n"
-#: i386-gen.c:2074
+#: i386-gen.c:2079
#, c-format
msgid "%d unused bits in i386_cpu_flags.\n"
msgstr "%d некоришћена бита у „i386_cpu_flags“.\n"
-#: i386-gen.c:2089
+#: i386-gen.c:2094
#, c-format
msgid "%d unused bits in i386_operand_type.\n"
msgstr "%d некоришћена бита у „i386_operand_type“.\n"
-#: i386-gen.c:2103
+#: i386-gen.c:2108
#, c-format
msgid "can't create i386-tbl.h, errno = %s\n"
msgstr "не могу да направим „i386-tbl.h“, грешка = %s\n"
@@ -1428,17 +1454,17 @@ msgstr "„percent-operator“ операнд није Ñимбол"
msgid "Attempt to find bit index of 0"
msgstr "Покушавам да нађем Ð¸Ð½Ð´ÐµÐºÑ Ð±Ð¸Ñ‚Ð° 0"
-#: ip2k-desc.c:1015
+#: ip2k-desc.c:1016
#, c-format
msgid "internal error: ip2k_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
msgstr "унутрашња грешка: ip2k_cgen_rebuild_tables: Ñукобљене „insn-chunk-bitsize“ вредноÑти: %d наÑпрам %d"
-#: ip2k-desc.c:1103
+#: ip2k-desc.c:1104
#, c-format
msgid "internal error: ip2k_cgen_cpu_open: unsupported argument `%d'"
msgstr "унутрашња грешка: ip2k_cgen_cpu_open: неподржан аргумент „%d“"
-#: ip2k-desc.c:1122
+#: ip2k-desc.c:1123
#, c-format
msgid "internal error: ip2k_cgen_cpu_open: no endianness specified"
msgstr "унутрашња грешка: ip2k_cgen_cpu_open: ниÑу наведене крајњоÑти"
@@ -1455,17 +1481,17 @@ msgstr "вредноÑÑ‚ непоÑредног је ван опÑега"
msgid "21-bit offset out of range"
msgstr "Померај 21 бита је ван опÑега"
-#: iq2000-desc.c:2020
+#: iq2000-desc.c:2021
#, c-format
msgid "internal error: iq2000_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
msgstr "унутрашња грешка: iq2000_cgen_rebuild_tables: Ñукобљене „insn-chunk-bitsize“ вредноÑти: %d наÑпрам %d"
-#: iq2000-desc.c:2108
+#: iq2000-desc.c:2109
#, c-format
msgid "internal error: iq2000_cgen_cpu_open: unsupported argument `%d'"
msgstr "унутрашња грешка: iq2000_cgen_cpu_open: неподржан аргумент „%d“"
-#: iq2000-desc.c:2127
+#: iq2000-desc.c:2128
#, c-format
msgid "internal error: iq2000_cgen_cpu_open: no endianness specified"
msgstr "унутрашња грешка: iq2000_cgen_cpu_open: ниÑу наведене крајњоÑти"
@@ -1486,21 +1512,41 @@ msgstr "очекујем „got“ одноÑну адреÑу: gotoffhi16(symbo
msgid "expecting got relative address: gotofflo16(symbol)"
msgstr "очекујем „got“ одноÑну адреÑу: gotofflo16(symbol)"
-#: lm32-desc.c:1002
+#: lm32-desc.c:1003
#, c-format
msgid "internal error: lm32_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
msgstr "унутрашња грешка: lm32_cgen_rebuild_tables: Ñукобљене „insn-chunk-bitsize“ вредноÑти: %d наÑпрам %d"
-#: lm32-desc.c:1090
+#: lm32-desc.c:1091
#, c-format
msgid "internal error: lm32_cgen_cpu_open: unsupported argument `%d'"
msgstr "унутрашња грешка: lm32_cgen_cpu_open: неподржан аргумент „%d“"
-#: lm32-desc.c:1109
+#: lm32-desc.c:1110
#, c-format
msgid "internal error: lm32_cgen_cpu_open: no endianness specified"
msgstr "унутрашња грешка: lm32_cgen_cpu_open: ниÑу наведене крајњоÑти"
+#: loongarch-dis.c:300
+#, c-format
+msgid ""
+"\n"
+"The following LoongArch disassembler options are supported for use\n"
+"with the -M switch (multiple options should be separated by commas):\n"
+msgstr ""
+"\n"
+"Следеће опције разложитеља „LoongArch“ Ñу подржане за коришћење\n"
+"Ñа прекидачем „-M“ (више опција треба раздвојити зарезима):\n"
+
+#: loongarch-dis.c:304
+#, c-format
+msgid ""
+"\n"
+" numeric Print numeric register names, rather than ABI names.\n"
+msgstr ""
+"\n"
+" numeric ИÑпиÑује бројчане називе региÑтра, радије него „ABI“ називе.\n"
+
#: m10200-dis.c:151 m10300-dis.c:574
#, c-format
msgid "unknown\t0x%04lx"
@@ -1585,32 +1631,32 @@ msgstr "није иÑправан пар „r0l/r0h“"
msgid "Invalid size specifier"
msgstr "ÐеиÑправан одредник величине"
-#: m32c-desc.c:63033
+#: m32c-desc.c:63034
#, c-format
msgid "internal error: m32c_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
msgstr "унутрашња грешка: m32_cgen_rebuild_tables: Ñукобљене „insn-chunk-bitsize“ вредноÑти: %d наÑпрам %d"
-#: m32c-desc.c:63121
+#: m32c-desc.c:63122
#, c-format
msgid "internal error: m32c_cgen_cpu_open: unsupported argument `%d'"
msgstr "унутрашња грешка: m32_cgen_cpu_open: неподржан аргумент „%d“"
-#: m32c-desc.c:63140
+#: m32c-desc.c:63141
#, c-format
msgid "internal error: m32c_cgen_cpu_open: no endianness specified"
msgstr "унутрашња грешка: m32_cgen_cpu_open: ниÑу наведене крајњоÑти"
-#: m32r-desc.c:1365
+#: m32r-desc.c:1366
#, c-format
msgid "internal error: m32r_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
msgstr "унутрашња грешка: m32r_cgen_rebuild_tables: Ñукобљене „insn-chunk-bitsize“ вредноÑти: %d наÑпрам %d"
-#: m32r-desc.c:1453
+#: m32r-desc.c:1454
#, c-format
msgid "internal error: m32r_cgen_cpu_open: unsupported argument `%d'"
msgstr "унутрашња грешка: m32r_cgen_cpu_open: неподржан аргумент „%d“"
-#: m32r-desc.c:1472
+#: m32r-desc.c:1473
#, c-format
msgid "internal error: m32r_cgen_cpu_open: no endianness specified"
msgstr "унутрашња грешка: m32r_cgen_cpu_open: ниÑу наведене крајњоÑти"
@@ -1658,17 +1704,17 @@ msgstr "ÐепоÑредни је ван опÑега од -128 до 127"
msgid "Value is not aligned enough"
msgstr "ВредноÑÑ‚ није довољно поравната"
-#: mep-desc.c:6226
+#: mep-desc.c:6227
#, c-format
msgid "internal error: mep_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
msgstr "унутрашња грешка: mep_cgen_rebuild_tables: Ñукобљене „insn-chunk-bitsize“ вредноÑти: %d наÑпрам %d"
-#: mep-desc.c:6314
+#: mep-desc.c:6315
#, c-format
msgid "internal error: mep_cgen_cpu_open: unsupported argument `%d'"
msgstr "унутрашња грешка: mep_cgen_cpu_open: неподржан аргумент „%d“"
-#: mep-desc.c:6333
+#: mep-desc.c:6334
#, c-format
msgid "internal error: mep_cgen_cpu_open: no endianness specified"
msgstr "унутрашња грешка: mep_cgen_cpu_open: ниÑу наведене крајњоÑти"
@@ -1847,17 +1893,17 @@ msgstr "„percent-operator“-ов операнд није Ñимбол"
msgid "invalid operand. type may have values 0,1,2 only."
msgstr "неиÑправан операнд. врÑта може имати Ñамо вредноÑти 0,1,2."
-#: mt-desc.c:1146
+#: mt-desc.c:1147
#, c-format
msgid "internal error: mt_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
msgstr "унутрашња грешка: mt_cgen_rebuild_tables: Ñукобљене „insn-chunk-bitsize“ вредноÑти: %d наÑпрам %d"
-#: mt-desc.c:1234
+#: mt-desc.c:1235
#, c-format
msgid "internal error: mt_cgen_cpu_open: unsupported argument `%d'"
msgstr "унутрашња грешка: mt_cgen_cpu_open: неподржан аргумент „%d“"
-#: mt-desc.c:1253
+#: mt-desc.c:1254
#, c-format
msgid "internal error: mt_cgen_cpu_open: no endianness specified"
msgstr "унутрашња грешка: mt_cgen_cpu_open: ниÑу наведене крајњоÑти"
@@ -1881,47 +1927,47 @@ msgstr "унутрашња грешка: непознати хардверÑки
msgid "insufficient data to decode instruction"
msgstr "недовољно података за декодирање инÑтрукције"
-#: nfp-dis.c:927
+#: nfp-dis.c:930
msgid "<invalid_instruction>:"
msgstr "<неиÑправна_инÑтрукција>:"
-#: nfp-dis.c:1331
+#: nfp-dis.c:1334
msgid ", <invalid CRC operator>, "
msgstr ", <неиÑправан „CRC“ оператор>, "
-#: nfp-dis.c:1683
+#: nfp-dis.c:1686
msgid "<invalid branch>["
msgstr "<неиÑправна грана>["
-#: nfp-dis.c:2052 nfp-dis.c:2323
+#: nfp-dis.c:2055 nfp-dis.c:2326
#, c-format
msgid "<invalid cmd target %d:%d:%d>[]"
msgstr "<неиÑправна мета наредбе %d:%d:%d>[]"
-#: nfp-dis.c:2063 nfp-dis.c:2334
+#: nfp-dis.c:2066 nfp-dis.c:2337
#, c-format
msgid "<invalid cmd action %d:%d:%d>[]"
msgstr "<неиÑправна радња наредбе %d:%d:%d>[]"
-#: nfp-dis.c:2555
+#: nfp-dis.c:2558
msgid "File has no ME-Config section."
msgstr "Датотека нема одељак „ME“-Подешавања."
-#: nfp-dis.c:2569
+#: nfp-dis.c:2572
msgid "File has invalid ME-Config section."
msgstr "Датотека има неиÑправан одељак „ME“-Подешавања."
-#: nfp-dis.c:2711
+#: nfp-dis.c:2717
#, c-format
msgid "Error processing section %u "
msgstr "Грешка обраде одељка %u "
-#: nfp-dis.c:2740
+#: nfp-dis.c:2746
#, c-format
msgid "Invalid NFP option: %s"
msgstr "ÐеиÑправна „NFP“ опција: %s"
-#: nfp-dis.c:2972
+#: nfp-dis.c:2984
#, c-format
msgid ""
"\n"
@@ -1932,7 +1978,7 @@ msgstr ""
"Следеће опције разложитеља Ñпецифичне за „NFP“ Ñу подржане за коришћење\n"
"Ñа прекидачем „-M“ (више опција треба да Ñе раздвајају зарезима):\n"
-#: nfp-dis.c:2976
+#: nfp-dis.c:2988
#, c-format
msgid ""
"\n"
@@ -1973,17 +2019,17 @@ msgstr "премештај је неиÑправан за Ñпремиште"
msgid "internal relocation type invalid"
msgstr "унутрашња врÑта премештаја је неиÑправна"
-#: or1k-desc.c:2040
+#: or1k-desc.c:2041
#, c-format
msgid "internal error: or1k_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
msgstr "унутрашња грешка: or1k_cgen_rebuild_tables: Ñукобљене „insn-chunk-bitsize“ вредноÑти: %d наÑпрам %d"
-#: or1k-desc.c:2128
+#: or1k-desc.c:2129
#, c-format
msgid "internal error: or1k_cgen_cpu_open: unsupported argument `%d'"
msgstr "унутрашња грешка: or1k_cgen_cpu_open: неподржан аргумент „%d“"
-#: or1k-desc.c:2147
+#: or1k-desc.c:2148
#, c-format
msgid "internal error: or1k_cgen_cpu_open: no endianness specified"
msgstr "унутрашња грешка: or1k_cgen_cpu_open: ниÑу наведене крајњоÑти"
@@ -2133,74 +2179,55 @@ msgid "invalid TH value"
msgstr "неиÑправна „TH“ вредноÑÑ‚"
#. The option without '=' should be defined above.
-#: riscv-dis.c:85 riscv-dis.c:122
+#: riscv-dis.c:103 riscv-dis.c:140
#, c-format
msgid "unrecognized disassembler option: %s"
msgstr "непозната опција разложитеља: %s"
#. Invalid options with '=', no option name before '=',
#. and no value after '='.
-#: riscv-dis.c:93
+#: riscv-dis.c:111
#, c-format
msgid "unrecognized disassembler option with '=': %s"
msgstr "непозната опција разложитеља Ñа знаком =: %s"
-#: riscv-dis.c:107
+#: riscv-dis.c:125
#, c-format
msgid "unknown privileged spec set by %s=%s"
msgstr "непозната одредба привилегије поÑтављена Ñа „%s=%s“"
-#: riscv-dis.c:114
+#: riscv-dis.c:132
#, c-format
msgid "mis-matched privilege spec set by %s=%s, the elf privilege attribute is %s"
msgstr "неодговарајућу одредбу привилегије је поÑтавио „%s=%s“, атрибут елф привилегије је „%s“"
-#: riscv-dis.c:416
+#: riscv-dis.c:526
#, c-format
msgid "# internal error, undefined modifier (%c)"
msgstr "# унутрашња грешка, неодређени измењивач (%c)"
-#: riscv-dis.c:640
-#, c-format
-msgid ""
-"\n"
-"The following RISC-V-specific disassembler options are supported for use\n"
-"with the -M switch (multiple options should be separated by commas):\n"
-msgstr ""
-"\n"
-"Следеће опције разложитеља Ñпецифичне за „RISC-V-“ Ñу подржане за коришћење\n"
-"Ñа прекидачем „-M“ (више опција треба да Ñе раздвајају зарезима):\n"
+#: riscv-dis.c:1018
+msgid "Print numeric register names, rather than ABI names."
+msgstr "ИÑпиÑује бројчане називе региÑтра, умеÑто „ABI“ називе."
-#: riscv-dis.c:644
-#, c-format
-msgid ""
-"\n"
-" numeric Print numeric register names, rather than ABI names.\n"
-msgstr ""
-"\n"
-" numeric ИÑпиÑује бројчане називе региÑтра, радије него „ABI“ називе.\n"
+#: riscv-dis.c:1021
+msgid "Disassemble only into canonical instructions."
+msgstr "Рашчлањује Ñамо у канонÑке инÑтрукције."
-#: riscv-dis.c:647
-#, c-format
-msgid ""
-"\n"
-" no-aliases Disassemble only into canonical instructions, rather\n"
-" than into pseudoinstructions.\n"
-msgstr ""
-"\n"
-" no-aliases Разлаже Ñамо у пропиÑне инÑтрукције, радије него\n"
-" у пÑеудоинÑтрукције.\n"
+#: riscv-dis.c:1024
+msgid "Print the CSR according to the chosen privilege spec."
+msgstr "ИÑпиÑује „CSR“ у Ñкладу Ñа изабраном одредбом привилегије."
-#: riscv-dis.c:651
+#: riscv-dis.c:1100
#, c-format
msgid ""
"\n"
-" priv-spec=PRIV Print the CSR according to the chosen privilege spec\n"
-" (1.9, 1.9.1, 1.10, 1.11).\n"
+"The following RISC-V specific disassembler options are supported for use\n"
+"with the -M switch (multiple options should be separated by commas):\n"
msgstr ""
"\n"
-" priv-spec=ПРИВ ИÑпиÑује „CSR“ у Ñкладу Ñа изабраном одредбом привилегије\n"
-" (1.9, 1.9.1, 1.10, 1.11).\n"
+"Следеће опције разложитеља Ñпецифичне за „RISC-V“ Ñу подржане за коришћење\n"
+"Ñа прекидачем „-M“ (више опција треба да Ñе раздвајају зарезима):\n"
#: rx-dis.c:139 rx-dis.c:163 rx-dis.c:171 rx-dis.c:179 rx-dis.c:187
msgid "<invalid register number>"
@@ -2222,15 +2249,15 @@ msgstr "<неиÑправна оп_величина>"
msgid "<invalid size>"
msgstr "<неиÑправна величина>"
-#: s12z-dis.c:236 s12z-dis.c:293 s12z-dis.c:304
+#: s12z-dis.c:239 s12z-dis.c:296 s12z-dis.c:307
msgid "<illegal reg num>"
msgstr "<неиÑправан број региÑтра>"
-#: s12z-dis.c:367
+#: s12z-dis.c:370
msgid "<bad>"
msgstr "<лоше>"
-#: s12z-dis.c:377
+#: s12z-dis.c:380
msgid ".<bad>"
msgstr ".<лоше>"
@@ -2430,17 +2457,17 @@ msgstr "ÐедоÑтаје Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ â€žsof:“"
msgid "Missing 'seg:' prefix"
msgstr "ÐедоÑтаје Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ â€žseg:“"
-#: xc16x-desc.c:3349
+#: xc16x-desc.c:3350
#, c-format
msgid "internal error: xc16x_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
msgstr "унутрашња грешка: xc16x_cgen_rebuild_tables: Ñукобљене „insn-chunk-bitsize“ вредноÑти: %d наÑпрам %d"
-#: xc16x-desc.c:3437
+#: xc16x-desc.c:3438
#, c-format
msgid "internal error: xc16x_cgen_cpu_open: unsupported argument `%d'"
msgstr "унутрашња грешка: xc16x_cgen_cpu_open: неподржан аргумент „%d“"
-#: xc16x-desc.c:3456
+#: xc16x-desc.c:3457
#, c-format
msgid "internal error: xc16x_cgen_cpu_open: no endianness specified"
msgstr "унутрашња грешка: xc16x_cgen_cpu_open: ниÑу наведене крајњоÑти"
@@ -2485,21 +2512,30 @@ msgstr "Операнд није Ñимбол"
msgid "Syntax error: No trailing ')'"
msgstr "Грешка ÑинтакÑе: Ðема пратеће )"
-#: xstormy16-desc.c:1317
+#: xstormy16-desc.c:1318
#, c-format
msgid "internal error: xstormy16_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
msgstr "унутрашња грешка: xstormy16_cgen_rebuild_tables: Ñукобљене „insn-chunk-bitsize“ вредноÑти: %d наÑпрам %d"
-#: xstormy16-desc.c:1405
+#: xstormy16-desc.c:1406
#, c-format
msgid "internal error: xstormy16_cgen_cpu_open: unsupported argument `%d'"
msgstr "унутрашња грешка: xstormy16_cgen_cpu_open: неподржан аргумент „%d“"
-#: xstormy16-desc.c:1424
+#: xstormy16-desc.c:1425
#, c-format
msgid "internal error: xstormy16_cgen_cpu_open: no endianness specified"
msgstr "унутрашња грешка: xstormy16_cgen_cpu_open: ниÑу наведене крајњоÑти"
+#~ msgid ""
+#~ "\n"
+#~ " no-aliases Disassemble only into canonical instructions, rather\n"
+#~ " than into pseudoinstructions.\n"
+#~ msgstr ""
+#~ "\n"
+#~ " no-aliases Разлаже Ñамо у пропиÑне инÑтрукције, радије него\n"
+#~ " у пÑеудоинÑтрукције.\n"
+
#~ msgid " dsp Recognize DSP instructions.\n"
#~ msgstr " dsp Препознаје „DSP“ инÑтрукције.\n"
diff --git a/opcodes/po/uk.po b/opcodes/po/uk.po
index 22986102b1a..bd9549d0302 100644
--- a/opcodes/po/uk.po
+++ b/opcodes/po/uk.po
@@ -2,13 +2,13 @@
# Copyright (C) 2012 Free Software Foundation, Inc.
# This file is distributed under the same license as the binutils package.
#
-# Yuri Chornoivan <yurchor@ukr.net>, 2012, 2013, 2014, 2017, 2018, 2019, 2020, 2021.
+# Yuri Chornoivan <yurchor@ukr.net>, 2012, 2013, 2014, 2017, 2018, 2019, 2020, 2021, 2022.
msgid ""
msgstr ""
-"Project-Id-Version: opcodes 2.36.90\n"
-"Report-Msgid-Bugs-To: bug-binutils@gnu.org\n"
-"POT-Creation-Date: 2021-07-03 15:02+0100\n"
-"PO-Revision-Date: 2021-07-04 11:50+0300\n"
+"Project-Id-Version: opcodes 2.37.90\n"
+"Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n"
+"POT-Creation-Date: 2022-01-22 12:21+0000\n"
+"PO-Revision-Date: 2022-01-23 13:57+0200\n"
"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
"Language-Team: Ukrainian <trans-uk@lists.fedoraproject.org>\n"
"Language: uk\n"
@@ -21,19 +21,29 @@ msgstr ""
#: aarch64-asm.c:821
msgid "specified register cannot be read from"
-msgstr "з вказаного регіÑтру не можна читати дані"
+msgstr "з вказаного регіÑтра не можна читати дані"
#: aarch64-asm.c:830
msgid "specified register cannot be written to"
-msgstr "до вказаного регіÑтру не можна запиÑувати дані"
+msgstr "до вказаного регіÑтра не можна запиÑувати дані"
#. Invalid option.
-#: aarch64-dis.c:94 arc-dis.c:802 arm-dis.c:11652
+#: aarch64-dis.c:94 arc-dis.c:802 arm-dis.c:11670
#, c-format
msgid "unrecognised disassembler option: %s"
msgstr "невідомий параметр дизаÑемблюваннÑ: %s"
-#: aarch64-dis.c:3589
+#: aarch64-dis.c:3395
+#, c-format
+msgid "this `%s' should have an immediately preceding `%s'"
+msgstr "цьому «%s» має безпоÑередньо передувати «%s»"
+
+#: aarch64-dis.c:3402
+#, c-format
+msgid "expected `%s' after previous `%s'"
+msgstr "мало бути «%s» піÑÐ»Ñ Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½ÑŒÐ¾Ð³Ð¾ «%s»"
+
+#: aarch64-dis.c:3806
#, c-format
msgid ""
"\n"
@@ -44,7 +54,7 @@ msgstr ""
"З перемикачем -M можна викориÑтовувати такі Ñпецифічні Ð´Ð»Ñ AARCH64 параметри\n"
"дизаÑемблера (декілька параметрів Ñлід відокремлювати комами):\n"
-#: aarch64-dis.c:3593
+#: aarch64-dis.c:3810
#, c-format
msgid ""
"\n"
@@ -53,7 +63,7 @@ msgstr ""
"\n"
" no-aliases не виводити альтернативних назв інÑтрукцій.\n"
-#: aarch64-dis.c:3596
+#: aarch64-dis.c:3813
#, c-format
msgid ""
"\n"
@@ -62,7 +72,7 @@ msgstr ""
"\n"
" aliases вивеÑти альтернативні назви інÑтрукцій.\n"
-#: aarch64-dis.c:3599
+#: aarch64-dis.c:3816
#, c-format
msgid ""
"\n"
@@ -71,7 +81,7 @@ msgstr ""
"\n"
" no-notes не виводити нотатки щодо інÑтрукції.\n"
-#: aarch64-dis.c:3602
+#: aarch64-dis.c:3819
#, c-format
msgid ""
"\n"
@@ -80,7 +90,7 @@ msgstr ""
"\n"
" notes виводити нотатки щодо інÑтрукції.\n"
-#: aarch64-dis.c:3606
+#: aarch64-dis.c:3823
#, c-format
msgid ""
"\n"
@@ -89,267 +99,283 @@ msgstr ""
"\n"
" debug_dump тимчаÑовий перемикач Ð´Ð»Ñ Ð´Ñ–Ð°Ð³Ð½Ð¾Ñтичного траÑуваннÑ.\n"
-#: aarch64-dis.c:3610 arc-dis.c:1551 arc-dis.c:1572 arc-dis.c:1575
-#: mips-dis.c:2807 mips-dis.c:2817 mips-dis.c:2820 nfp-dis.c:2981
-#: riscv-dis.c:655
+#: aarch64-dis.c:3827 arc-dis.c:1551 arc-dis.c:1572 arc-dis.c:1575
+#: loongarch-dis.c:306 mips-dis.c:2807 mips-dis.c:2817 mips-dis.c:2820
+#: nfp-dis.c:2993 riscv-dis.c:1140 riscv-dis.c:1143
#, c-format
msgid "\n"
msgstr "\n"
-#: aarch64-opc.c:1350
+#: aarch64-opc.c:1365
msgid "immediate value"
msgstr "конÑтанта"
-#: aarch64-opc.c:1360
+#: aarch64-opc.c:1375
msgid "immediate offset"
msgstr "Ñталий зÑув"
-#: aarch64-opc.c:1370
+#: aarch64-opc.c:1385
msgid "register number"
msgstr "номер регіÑтра"
-#: aarch64-opc.c:1380
+#: aarch64-opc.c:1395
msgid "register element index"
msgstr "Ñ–Ð½Ð´ÐµÐºÑ ÐµÐ»ÐµÐ¼ÐµÐ½Ñ‚Ð° регіÑтра"
-#: aarch64-opc.c:1390
+#: aarch64-opc.c:1405
msgid "shift amount"
msgstr "величина зÑуву"
-#: aarch64-opc.c:1402
+#: aarch64-opc.c:1417
msgid "multiplier"
msgstr "множник"
-#: aarch64-opc.c:1475
+#: aarch64-opc.c:1491
msgid "reg pair must start from even reg"
msgstr "пара регіÑтрів має починатиÑÑ Ñ–Ð· парного регіÑтра"
-#: aarch64-opc.c:1481
+#: aarch64-opc.c:1497
msgid "reg pair must be contiguous"
msgstr "пара регіÑтрів має бути поÑлідовною"
-#: aarch64-opc.c:1495
+#: aarch64-opc.c:1511
msgid "extraneous register"
msgstr "Ñторонній регіÑÑ‚Ñ€"
-#: aarch64-opc.c:1501
+#: aarch64-opc.c:1517
msgid "missing register"
msgstr "не виÑтачає регіÑтра"
-#: aarch64-opc.c:1512
+#: aarch64-opc.c:1528
msgid "stack pointer register expected"
msgstr "мало бути викориÑтано регіÑÑ‚Ñ€ вказівника на Ñтек"
-#: aarch64-opc.c:1537
+#: aarch64-opc.c:1553
msgid "z0-z15 expected"
msgstr "мало бути z0-z15"
-#: aarch64-opc.c:1538
+#: aarch64-opc.c:1554
msgid "z0-z7 expected"
msgstr "мало бути z0-z7"
-#: aarch64-opc.c:1564
+#: aarch64-opc.c:1580
msgid "invalid register list"
msgstr "некоректний ÑпиÑок регіÑтрів"
-#: aarch64-opc.c:1578
+#: aarch64-opc.c:1594
msgid "p0-p7 expected"
msgstr "мало бути p0-p7"
-#: aarch64-opc.c:1604 aarch64-opc.c:1612
+#: aarch64-opc.c:1620 aarch64-opc.c:1628
msgid "unexpected address writeback"
msgstr "неочікуваний зворотний Ð·Ð°Ð¿Ð¸Ñ Ð°Ð´Ñ€ÐµÑ"
-#: aarch64-opc.c:1623
+#: aarch64-opc.c:1639
msgid "address writeback expected"
msgstr "мало бути викориÑтано зворотний Ð·Ð°Ð¿Ð¸Ñ Ð°Ð´Ñ€ÐµÑ"
-#: aarch64-opc.c:1670
+#: aarch64-opc.c:1686
msgid "negative or unaligned offset expected"
msgstr "мало бути викориÑтано від’ємне або невирівнÑне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ñ–Ð´Ñтупу"
-#: aarch64-opc.c:1727
+#: aarch64-opc.c:1743
msgid "invalid register offset"
msgstr "некоректний зÑув регіÑтра"
-#: aarch64-opc.c:1749
+#: aarch64-opc.c:1765
msgid "invalid post-increment amount"
msgstr "некоректна величина Ð·Ð±Ñ–Ð»ÑŒÑˆÐµÐ½Ð½Ñ Ð¿Ñ–ÑÐ»Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð¿Ð¾Ñ€Ñ–Ð²Ð½ÑннÑ"
-#: aarch64-opc.c:1765 aarch64-opc.c:2274
+#: aarch64-opc.c:1781 aarch64-opc.c:2299
msgid "invalid shift amount"
msgstr "некоректна величина зÑуву"
-#: aarch64-opc.c:1778
+#: aarch64-opc.c:1794
msgid "invalid extend/shift operator"
msgstr "некоректний оператор Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Ð°Ð±Ð¾ зÑуву"
-#: aarch64-opc.c:1824 aarch64-opc.c:2076 aarch64-opc.c:2111 aarch64-opc.c:2130
-#: aarch64-opc.c:2138 aarch64-opc.c:2227 aarch64-opc.c:2404 aarch64-opc.c:2504
-#: aarch64-opc.c:2517
+#: aarch64-opc.c:1840 aarch64-opc.c:2101 aarch64-opc.c:2136 aarch64-opc.c:2155
+#: aarch64-opc.c:2163 aarch64-opc.c:2252 aarch64-opc.c:2429 aarch64-opc.c:2529
+#: aarch64-opc.c:2542
msgid "immediate out of range"
msgstr "конÑтанта поза межами припуÑтимого діапазону"
-#: aarch64-opc.c:1846 aarch64-opc.c:1888 aarch64-opc.c:1950 aarch64-opc.c:1984
+#: aarch64-opc.c:1870 aarch64-opc.c:1912 aarch64-opc.c:1975 aarch64-opc.c:2009
msgid "invalid addressing mode"
msgstr "некоректний режим адреÑуваннÑ"
-#: aarch64-opc.c:1942
+#: aarch64-opc.c:1967
msgid "index register xzr is not allowed"
msgstr "регіÑÑ‚Ñ€ xzr індекÑу не можна викориÑтовувати"
-#: aarch64-opc.c:2064 aarch64-opc.c:2086 aarch64-opc.c:2307 aarch64-opc.c:2315
-#: aarch64-opc.c:2381 aarch64-opc.c:2410
+#: aarch64-opc.c:2089 aarch64-opc.c:2111 aarch64-opc.c:2332 aarch64-opc.c:2340
+#: aarch64-opc.c:2406 aarch64-opc.c:2435
msgid "invalid shift operator"
msgstr "некоректний оператор зÑуву"
-#: aarch64-opc.c:2070
+#: aarch64-opc.c:2095
msgid "shift amount must be 0 or 12"
msgstr "величина зÑуву має бути 0 або 12"
-#: aarch64-opc.c:2093
+#: aarch64-opc.c:2118
msgid "shift amount must be a multiple of 16"
msgstr "зÑув мав бути кратним до 16"
-#: aarch64-opc.c:2105
+#: aarch64-opc.c:2130
msgid "negative immediate value not allowed"
msgstr "викориÑÑ‚Ð°Ð½Ð½Ñ Ð²Ñ–Ð´â€™Ñ”Ð¼Ð½Ð¸Ñ… конÑтант заборонено"
-#: aarch64-opc.c:2238
+#: aarch64-opc.c:2263
msgid "immediate zero expected"
msgstr "мало бути викориÑтано нульову конÑтанту"
-#: aarch64-opc.c:2252
+#: aarch64-opc.c:2277
msgid "rotate expected to be 0, 90, 180 or 270"
msgstr "Ð´Ð»Ñ Ð¾Ð±ÐµÑ€Ñ‚Ð°Ð½Ð½Ñ Ð¼Ð°Ð»Ð¾ бути Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ 0, 90, 180 або 270"
-#: aarch64-opc.c:2263
+#: aarch64-opc.c:2288
msgid "rotate expected to be 90 or 270"
msgstr "Ð´Ð»Ñ Ð¾Ð±ÐµÑ€Ñ‚Ð°Ð½Ð½Ñ Ð¼Ð°Ð»Ð¾ бути Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ 90 або 270"
-#: aarch64-opc.c:2323
+#: aarch64-opc.c:2348
msgid "shift is not permitted"
msgstr "зÑув заборонено"
-#: aarch64-opc.c:2348
+#: aarch64-opc.c:2373
msgid "invalid value for immediate"
msgstr "некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÐºÐ¾Ð½Ñтанти"
-#: aarch64-opc.c:2373
+#: aarch64-opc.c:2398
msgid "shift amount must be 0 or 16"
msgstr "величина зÑуву має бути 0 або 16"
-#: aarch64-opc.c:2394
+#: aarch64-opc.c:2419
msgid "floating-point immediate expected"
msgstr "мало бути викориÑтано конÑтанту з рухомою крапкою"
-#: aarch64-opc.c:2428
+#: aarch64-opc.c:2453
msgid "no shift amount allowed for 8-bit constants"
msgstr "Ð´Ð»Ñ 8-бітових Ñталих не передбачено величини зÑуву"
-#: aarch64-opc.c:2438
+#: aarch64-opc.c:2463
msgid "shift amount must be 0 or 8"
msgstr "величина зÑуву має бути 0 або 8"
-#: aarch64-opc.c:2451
+#: aarch64-opc.c:2476
msgid "immediate too big for element size"
msgstr "Ñтала велична Ñ” надто великою Ð´Ð»Ñ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ елемента"
-#: aarch64-opc.c:2458
+#: aarch64-opc.c:2483
msgid "invalid arithmetic immediate"
msgstr "некоректна арифметична Ñтала"
-#: aarch64-opc.c:2472
+#: aarch64-opc.c:2497
msgid "floating-point value must be 0.5 or 1.0"
msgstr "чиÑлом із рухомою крапкою має бути 0.5 або 1.0"
-#: aarch64-opc.c:2482
+#: aarch64-opc.c:2507
msgid "floating-point value must be 0.5 or 2.0"
msgstr "чиÑлом із рухомою крапкою має бути 0.5 або 2.0"
-#: aarch64-opc.c:2492
+#: aarch64-opc.c:2517
msgid "floating-point value must be 0.0 or 1.0"
msgstr "чиÑлом із рухомою крапкою має бути 0.0 або 1.0"
-#: aarch64-opc.c:2523
+#: aarch64-opc.c:2548
msgid "invalid replicated MOV immediate"
msgstr "некоректно відтворена Ñтала у MOV"
-#: aarch64-opc.c:2644
+#: aarch64-opc.c:2656
msgid "extend operator expected"
msgstr "мало бути викориÑтано оператор розширеннÑ"
-#: aarch64-opc.c:2657
+#: aarch64-opc.c:2669
msgid "missing extend operator"
msgstr "не виÑтачає оператора розширеннÑ"
-#: aarch64-opc.c:2663
+#: aarch64-opc.c:2675
msgid "'LSL' operator not allowed"
msgstr "ВикориÑÑ‚Ð°Ð½Ð½Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ‚Ð¾Ñ€Ð° «LSL» заборонено"
-#: aarch64-opc.c:2684
+#: aarch64-opc.c:2696
msgid "W register expected"
msgstr "мало бути викориÑтано регіÑÑ‚Ñ€ W"
-#: aarch64-opc.c:2695
+#: aarch64-opc.c:2707
msgid "shift operator expected"
msgstr "мало бути викориÑтано оператор зÑуву"
-#: aarch64-opc.c:2702
+#: aarch64-opc.c:2714
msgid "'ROR' operator not allowed"
msgstr "ВикориÑÑ‚Ð°Ð½Ð½Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ‚Ð¾Ñ€Ð° «ROR» заборонено"
-#: aarch64-opc.c:3722
+#: aarch64-opc.c:3852
msgid "reading from a write-only register"
-msgstr "Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ñ–Ð· призначено лише Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу регіÑтру"
+msgstr "Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ñ–Ð· призначено лише Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу регіÑтра"
-#: aarch64-opc.c:3724
+#: aarch64-opc.c:3854
msgid "writing to a read-only register"
-msgstr "Ð·Ð°Ð¿Ð¸Ñ Ð´Ð¾ призначеного лише Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ñ€ÐµÐ³Ñ–Ñтру"
+msgstr "Ð·Ð°Ð¿Ð¸Ñ Ð´Ð¾ призначеного лише Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ñ€ÐµÐ³Ñ–Ñтра"
+
+#: aarch64-opc.c:5445
+msgid "the three register operands must be distinct from one another"
+msgstr "три операнди регіÑтрів має бути різними"
-#: aarch64-opc.c:5165
+#: aarch64-opc.c:5556
+msgid "destination register differs from preceding instruction"
+msgstr "регіÑÑ‚Ñ€ Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ñ–Ð´Ñ€Ñ–Ð·Ð½ÑєтьÑÑ Ð²Ñ–Ð´ регіÑтра у попередній інÑтрукції"
+
+#: aarch64-opc.c:5559
+msgid "source register differs from preceding instruction"
+msgstr "регіÑÑ‚Ñ€ джерела відрізнÑєтьÑÑ Ð²Ñ–Ð´ регіÑтра у попередній інÑтрукції"
+
+#: aarch64-opc.c:5562
+msgid "size register differs from preceding instruction"
+msgstr "регіÑÑ‚Ñ€ розміру відрізнÑєтьÑÑ Ð²Ñ–Ð´ регіÑтра у попередній інÑтрукції"
+
+#: aarch64-opc.c:5610
msgid "instruction opens new dependency sequence without ending previous one"
msgstr "інÑÑ‚Ñ€ÑƒÐºÑ†Ñ–Ñ Ð²Ñ–Ð´ÐºÑ€Ð¸Ð²Ð°Ñ” нову поÑлідовніÑÑ‚ÑŒ залежноÑтей без Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½ÑŒÐ¾Ñ—"
-#: aarch64-opc.c:5185
+#: aarch64-opc.c:5639
msgid "previous `movprfx' sequence not closed"
msgstr "попередню поÑлідовніÑÑ‚ÑŒ «movprfx» не завершено"
-#: aarch64-opc.c:5204
+#: aarch64-opc.c:5658
msgid "SVE instruction expected after `movprfx'"
msgstr "піÑÐ»Ñ Â«movprfx» мала бути інÑÑ‚Ñ€ÑƒÐºÑ†Ñ–Ñ SVE"
-#: aarch64-opc.c:5217
+#: aarch64-opc.c:5671
msgid "SVE `movprfx' compatible instruction expected"
msgstr "мало бути вказано ÑуміÑну із «movprfx» інÑтрукцію SVE"
-#: aarch64-opc.c:5304
+#: aarch64-opc.c:5759
msgid "predicated instruction expected after `movprfx'"
msgstr "піÑÐ»Ñ Â«movprfx» мала бути Ñтверджувальна інÑтрукціÑ"
-#: aarch64-opc.c:5316
+#: aarch64-opc.c:5771
msgid "merging predicate expected due to preceding `movprfx'"
msgstr "мало бути об'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð¿Ñ€ÐµÐ´Ð¸ÐºÐ°Ñ‚Ñ–Ð² через попередню «movprfx»"
-#: aarch64-opc.c:5328
+#: aarch64-opc.c:5783
msgid "predicate register differs from that in preceding `movprfx'"
msgstr "предикативний регіÑÑ‚Ñ€ не збігаєтьÑÑ Ñ–Ð· визначеним Ð´Ð»Ñ Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½ÑŒÐ¾Ð³Ð¾ «movprfx»"
-#: aarch64-opc.c:5347
+#: aarch64-opc.c:5802
msgid "output register of preceding `movprfx' not used in current instruction"
msgstr "регіÑÑ‚Ñ€ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… попереднього «movprfx» не викориÑтано у поточній інÑтрукції."
-#: aarch64-opc.c:5360
+#: aarch64-opc.c:5815
msgid "output register of preceding `movprfx' expected as output"
msgstr "регіÑÑ‚Ñ€ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… попереднього «movprfx» мало бути викориÑтано Ñк вивід"
-#: aarch64-opc.c:5372
+#: aarch64-opc.c:5827
msgid "output register of preceding `movprfx' used as input"
msgstr "регіÑÑ‚Ñ€ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… попереднього «movprfx» викориÑтано Ñк вхідні дані"
-#: aarch64-opc.c:5388
+#: aarch64-opc.c:5843
msgid "register size not compatible with previous `movprfx'"
-msgstr "розмір регіÑтру Ñ” неÑуміÑним із попереднім «movprfx»"
+msgstr "розмір регіÑтра Ñ” неÑуміÑним із попереднім «movprfx»"
#: alpha-opc.c:154
msgid "branch operand unaligned"
@@ -439,7 +465,7 @@ msgstr ""
"З перемикачем -M можна викориÑтовувати такі Ñпецифічні Ð´Ð»Ñ ARC параметри\n"
"дизаÑемблера (декілька параметрів Ñлід відокремлювати комами):\n"
-#: arc-dis.c:1558 mips-dis.c:2812
+#: arc-dis.c:1558 mips-dis.c:2812 riscv-dis.c:1135
#, c-format
msgid ""
"\n"
@@ -620,67 +646,67 @@ msgstr "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¼Ð°Ñ” перебувати у діапазоні віÐ
msgid "invalid position, should be one of: 0,4,8,...124."
msgstr "некоректна позиціÑ, мало бути одне з таких значень: 0,4,8,...124."
-#: arm-dis.c:5187
+#: arm-dis.c:5204
msgid "Select raw register names"
msgstr "Вибрати проÑÑ‚Ñ– назви регіÑтрів"
-#: arm-dis.c:5189
+#: arm-dis.c:5206
msgid "Select register names used by GCC"
msgstr "Виберіть назви регіÑтрів, Ñкі викориÑтовуватимутьÑÑ GCC"
-#: arm-dis.c:5191
+#: arm-dis.c:5208
msgid "Select register names used in ARM's ISA documentation"
msgstr "Виберіть назви регіÑтрів, Ñкі викориÑтовуютьÑÑ Ñƒ документації з ISA ARM"
-#: arm-dis.c:5193
+#: arm-dis.c:5210
msgid "Assume all insns are Thumb insns"
msgstr "ПрипуÑкати, що уÑÑ– інÑтрукції Ñ” інÑтрукціÑми Thumb"
-#: arm-dis.c:5194
+#: arm-dis.c:5211
msgid "Examine preceding label to determine an insn's type"
msgstr "Вивчати попередню мітку Ð´Ð»Ñ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ‚Ð¸Ð¿Ñƒ інÑтрукції"
-#: arm-dis.c:5195
+#: arm-dis.c:5212
msgid "Select register names used in the APCS"
msgstr "Вибрати назви регіÑтрів, що викориÑтовуютьÑÑ Ð² APCS"
-#: arm-dis.c:5197
+#: arm-dis.c:5214
msgid "Select register names used in the ATPCS"
msgstr "Вибрати назви регіÑтрів, що викориÑтовуютьÑÑ Ð² ATPCS"
-#: arm-dis.c:5199
+#: arm-dis.c:5216
msgid "Select special register names used in the ATPCS"
msgstr "Вибрати назви Ñпеціальних регіÑтрів, що викориÑтовуютьÑÑ Ð² ATPCS"
-#: arm-dis.c:5201
+#: arm-dis.c:5218
msgid "Enable CDE extensions for coprocessor N space"
msgstr "Увімкнути Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ CDE Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñтору N ÑпівпроцеÑора"
-#: arm-dis.c:8373
+#: arm-dis.c:8390
msgid "<illegal precision>"
msgstr "<некоректна точніÑÑ‚ÑŒ>"
-#: arm-dis.c:11613
+#: arm-dis.c:11631
#, c-format
msgid "unrecognised register name set: %s"
msgstr "невідомий набір назв регіÑтрів: %s"
-#: arm-dis.c:11627
+#: arm-dis.c:11645
#, c-format
msgid "cde coprocessor not between 0-7: %s"
msgstr "СпівпроцеÑор cde не у діапазоні 0-7: %s"
-#: arm-dis.c:11633
+#: arm-dis.c:11651
#, c-format
msgid "coproc must have an argument: %s"
msgstr "coproc повинен мати аргумент: %s"
-#: arm-dis.c:11646
+#: arm-dis.c:11664
#, c-format
msgid "coprocN argument takes options \"generic\", \"cde\", or \"CDE\": %s"
msgstr "Ðргумент coprocN приймає параметри «generic», «cde» або «CDE»: %s"
-#: arm-dis.c:12357
+#: arm-dis.c:12374
#, c-format
msgid ""
"\n"
@@ -691,17 +717,17 @@ msgstr ""
"З перемикачем -M можна викориÑтовувати такі Ñпецифічні Ð´Ð»Ñ ARM параметри\n"
"дизаÑемблера:\n"
-#: avr-dis.c:115 avr-dis.c:136
+#: avr-dis.c:124 avr-dis.c:145
#, c-format
msgid "undefined"
msgstr "не визначено"
-#: avr-dis.c:218
+#: avr-dis.c:236
#, c-format
msgid "internal disassembler error"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° дизаÑемблера"
-#: avr-dis.c:272
+#: avr-dis.c:290
#, c-format
msgid "unknown constraint `%c'"
msgstr "невідоме Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Â«%c»"
@@ -788,17 +814,17 @@ msgstr "помилкова інÑÑ‚Ñ€ÑƒÐºÑ†Ñ–Ñ Â«%.50s...»"
msgid "bad instruction `%.50s'"
msgstr "помилкова інÑÑ‚Ñ€ÑƒÐºÑ†Ñ–Ñ Â«%.50s»"
-#: bpf-desc.c:1767
+#: bpf-desc.c:1768
#, c-format
msgid "internal error: bpf_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: bpf_cgen_rebuild_tables: конфлікт значень insn-chunk-bitsize: «%d» Ñ– «%d»"
-#: bpf-desc.c:1855
+#: bpf-desc.c:1856
#, c-format
msgid "internal error: bpf_cgen_cpu_open: unsupported argument `%d'"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: bpf_cgen_cpu_open: непідтримуваний аргумент «%d»"
-#: bpf-desc.c:1874
+#: bpf-desc.c:1875
#, c-format
msgid "internal error: bpf_cgen_cpu_open: no endianness specified"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: bpf_cgen_cpu_open: не визначено порÑдок байтів"
@@ -896,17 +922,17 @@ msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: некоректне поле %d пі
msgid "operand out of range (%lu not between %lu and %lu)"
msgstr "операнд лежить поза межами діапазону (%lu не перебуває між %lu і %lu)"
-#: cris-desc.c:2621
+#: cris-desc.c:2622
#, c-format
msgid "internal error: cris_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: cris_cgen_rebuild_tables: конфлікт значень insn-chunk-bitsize: «%d» Ñ– «%d»"
-#: cris-desc.c:2709
+#: cris-desc.c:2710
#, c-format
msgid "internal error: cris_cgen_cpu_open: unsupported argument `%d'"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: cris_cgen_cpu_open: непідтримуваний аргумент «%d»"
-#: cris-desc.c:2728
+#: cris-desc.c:2729
#, c-format
msgid "internal error: cris_cgen_cpu_open: no endianness specified"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: cris_cgen_cpu_open: не визначено порÑдок байтів"
@@ -932,12 +958,12 @@ msgstr "Ðевідома помилка %d\n"
msgid "Address 0x%s is out of bounds.\n"
msgstr "ÐдреÑа 0x%s лежить поза межами доÑтупного діапазону.\n"
-#: disassemble.c:848
+#: disassemble.c:859
#, c-format
msgid "assertion fail %s:%d"
msgstr "виÑвлено помилку %s:%d"
-#: disassemble.c:849
+#: disassemble.c:860
msgid "Please report this bug"
msgstr "Будь лаÑка, повідомте про цю ваду"
@@ -976,17 +1002,17 @@ msgstr "ABORT: невідомий операнд"
msgid "Not a pc-relative address."
msgstr "ÐдреÑа, Ñка не Ñ” відноÑною щодо лічильника команд (pc)."
-#: epiphany-desc.c:2109
+#: epiphany-desc.c:2110
#, c-format
msgid "internal error: epiphany_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: epiphany_cgen_rebuild_tables: конфлікт значень insn-chunk-bitsize: «%d» Ñ– «%d»"
-#: epiphany-desc.c:2197
+#: epiphany-desc.c:2198
#, c-format
msgid "internal error: epiphany_cgen_cpu_open: unsupported argument `%d'"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: epiphany_cgen_cpu_open: непідтримуваний аргумент «%d»"
-#: epiphany-desc.c:2216
+#: epiphany-desc.c:2217
#, c-format
msgid "internal error: epiphany_cgen_cpu_open: no endianness specified"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: epiphany_cgen_cpu_open: не вказано порÑдку байтів"
@@ -1007,17 +1033,17 @@ msgstr "РегіÑÑ‚Ñ€ має перебувати у діапазоні від
msgid "Register list is not valid"
msgstr "СпиÑок регіÑтрів Ñ” некоректним"
-#: fr30-desc.c:1586
+#: fr30-desc.c:1587
#, c-format
msgid "internal error: fr30_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: fr30_cgen_rebuild_tables: конфлікт значень insn-chunk-bitsize: «%d» Ñ– «%d»"
-#: fr30-desc.c:1674
+#: fr30-desc.c:1675
#, c-format
msgid "internal error: fr30_cgen_cpu_open: unsupported argument `%d'"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: fr30_cgen_cpu_open: непідтримуваний аргумент «%d»"
-#: fr30-desc.c:1693
+#: fr30-desc.c:1694
#, c-format
msgid "internal error: fr30_cgen_cpu_open: no endianness specified"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: fr30_cgen_cpu_open: не визначено порÑдок байтів"
@@ -1038,17 +1064,17 @@ msgstr "ЗначеннÑм операнда A має бути 0 або 1"
msgid "register number must be even"
msgstr "номер регіÑтра має бути парним"
-#: frv-desc.c:6326
+#: frv-desc.c:6327
#, c-format
msgid "internal error: frv_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: frv_cgen_rebuild_tables: конфлікт значень insn-chunk-bitsize: «%d» Ñ– «%d»"
-#: frv-desc.c:6414
+#: frv-desc.c:6415
#, c-format
msgid "internal error: frv_cgen_cpu_open: unsupported argument `%d'"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: frv_cgen_cpu_open: непідтримуваний аргумент «%d»"
-#: frv-desc.c:6433
+#: frv-desc.c:6434
#, c-format
msgid "internal error: frv_cgen_cpu_open: no endianness specified"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: frv_cgen_cpu_open: не визначено порÑдок байтів"
@@ -1078,11 +1104,11 @@ msgstr "Г-м-м, 0x%x"
msgid "Don't understand 0x%x \n"
msgstr "Ðезрозуміле 0x%x \n"
-#: i386-dis.c:8591
+#: i386-dis.c:8528
msgid "<internal disassembler error>"
msgstr "<помилка внутрішнього дизаÑемблера>"
-#: i386-dis.c:8900
+#: i386-dis.c:8802
#, c-format
msgid ""
"\n"
@@ -1093,32 +1119,32 @@ msgstr ""
"З перемикачем -M можна викориÑтовувати такі Ñпецифічні Ð´Ð»Ñ i386/x86-64 параметри\n"
"дизаÑемблера (декілька параметрів Ñлід відокремлювати комами):\n"
-#: i386-dis.c:8904
+#: i386-dis.c:8806
#, c-format
msgid " x86-64 Disassemble in 64bit mode\n"
msgstr " x86-64 дизаÑÐµÐ¼Ð±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ñƒ 64-бітовому режимі\n"
-#: i386-dis.c:8905
+#: i386-dis.c:8807
#, c-format
msgid " i386 Disassemble in 32bit mode\n"
msgstr " i386 дизаÑÐµÐ¼Ð±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ñƒ 32-бітовому режимі\n"
-#: i386-dis.c:8906
+#: i386-dis.c:8808
#, c-format
msgid " i8086 Disassemble in 16bit mode\n"
msgstr " i8086 дизаÑÐµÐ¼Ð±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ñƒ 16-бітовому режимі\n"
-#: i386-dis.c:8907
+#: i386-dis.c:8809
#, c-format
msgid " att Display instruction in AT&T syntax\n"
msgstr " att показати інÑтрукцію у ÑинтакÑиÑÑ– AT&T\n"
-#: i386-dis.c:8908
+#: i386-dis.c:8810
#, c-format
msgid " intel Display instruction in Intel syntax\n"
msgstr " intel показати інÑтрукцію у ÑинтакÑиÑÑ– Intel\n"
-#: i386-dis.c:8909
+#: i386-dis.c:8811
#, c-format
msgid ""
" att-mnemonic\n"
@@ -1127,7 +1153,7 @@ msgstr ""
" att-mnemonic\n"
" показати інÑтрукцію у Ñимволах AT&T\n"
-#: i386-dis.c:8911
+#: i386-dis.c:8813
#, c-format
msgid ""
" intel-mnemonic\n"
@@ -1136,136 +1162,136 @@ msgstr ""
" intel-mnemonic\n"
" показати інÑтрукцію у Ñимволах Intel\n"
-#: i386-dis.c:8913
+#: i386-dis.c:8815
#, c-format
msgid " addr64 Assume 64bit address size\n"
msgstr " addr64 припуÑкати 64-бітовий розмір адреÑ\n"
-#: i386-dis.c:8914
+#: i386-dis.c:8816
#, c-format
msgid " addr32 Assume 32bit address size\n"
msgstr " addr32 припуÑкати 32-бітовий розмір адреÑ\n"
-#: i386-dis.c:8915
+#: i386-dis.c:8817
#, c-format
msgid " addr16 Assume 16bit address size\n"
msgstr " addr16 припуÑкати 16-бітовий розмір адреÑ\n"
-#: i386-dis.c:8916
+#: i386-dis.c:8818
#, c-format
msgid " data32 Assume 32bit data size\n"
msgstr " data32 припуÑкати 32-бітовий розмір даних\n"
-#: i386-dis.c:8917
+#: i386-dis.c:8819
#, c-format
msgid " data16 Assume 16bit data size\n"
msgstr " data16 припуÑкати 16-бітовий розмір даних\n"
-#: i386-dis.c:8918
+#: i386-dis.c:8820
#, c-format
msgid " suffix Always display instruction suffix in AT&T syntax\n"
msgstr " suffix завжди показувати ÑÑƒÑ„Ñ–ÐºÑ Ñ–Ð½Ñтрукцій у ÑинтакÑиÑÑ– AT&T\n"
-#: i386-dis.c:8919
+#: i386-dis.c:8821
#, c-format
msgid " amd64 Display instruction in AMD64 ISA\n"
msgstr " amd64 показати інÑтрукцію у ÑинтакÑиÑÑ– ISA AMD64\n"
-#: i386-dis.c:8920
+#: i386-dis.c:8822
#, c-format
msgid " intel64 Display instruction in Intel64 ISA\n"
msgstr " intel64 показати інÑтрукцію у ÑинтакÑиÑÑ– ISA Intel64\n"
-#: i386-dis.c:9484
+#: i386-dis.c:9402
msgid "64-bit address is disabled"
msgstr "64-бітову адреÑу вимкнено"
-#: i386-gen.c:851
+#: i386-gen.c:856
#, c-format
msgid "%s: error: "
msgstr "%s: помилка: "
-#: i386-gen.c:1007
+#: i386-gen.c:1012
#, c-format
msgid "%s: %d: unknown bitfield: %s\n"
msgstr "%s: %d: невідоме бітове поле: %s\n"
-#: i386-gen.c:1009
+#: i386-gen.c:1014
#, c-format
msgid "unknown bitfield: %s\n"
msgstr "невідоме бітове поле: %s\n"
-#: i386-gen.c:1072
+#: i386-gen.c:1077
#, c-format
msgid "%s: %d: missing `)' in bitfield: %s\n"
msgstr "%s: %d: не виÑтачає «)» у бітовому полі: %s\n"
-#: i386-gen.c:1173
+#: i386-gen.c:1178
#, c-format
msgid "unknown broadcast operand: %s\n"
msgstr "невідомий операнд транÑлÑції: %s\n"
-#: i386-gen.c:1228
+#: i386-gen.c:1233
#, c-format
msgid "%s:%d: Conflicting opcode space specifications\n"
msgstr "%s:%d: конфліктні Ñпецифікації проÑтору коду операцій\n"
-#: i386-gen.c:1232
+#: i386-gen.c:1237
#, c-format
msgid "%s:%d: Warning: redundant opcode space specification\n"
msgstr "%s:%d: попередженнÑ: надлишкова ÑÐ¿ÐµÑ†Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ Ð¿Ñ€Ð¾Ñтору кодів операцій\n"
-#: i386-gen.c:1241
+#: i386-gen.c:1246
#, c-format
msgid "%s:%d: Conflicting prefix specifications\n"
msgstr "%s:%d: конфлікт Ñпецифікацій префікÑів\n"
-#: i386-gen.c:1245
+#: i386-gen.c:1250
#, c-format
msgid "%s:%d: Warning: redundant prefix specification\n"
msgstr "%s:%d: попередженнÑ: надлишкова ÑÐ¿ÐµÑ†Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ Ð¿Ñ€ÐµÑ„Ñ–ÐºÑа\n"
-#: i386-gen.c:1455
+#: i386-gen.c:1460
#, c-format
msgid "%s:%d: %s: unrecognized opcode encoding space\n"
msgstr "%s:%d: %s: нерозпізнаний проÑÑ‚Ñ–Ñ€ ÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ¾Ð´Ñ–Ð² операцій\n"
-#: i386-gen.c:1461
+#: i386-gen.c:1466
#, c-format
msgid "%s:%d: %s: residual opcode (0x%0*llx) too large\n"
msgstr "%s:%d: %s: залишковий код операції (0x%0*llx) є надто великим\n"
-#: i386-gen.c:1883
+#: i386-gen.c:1888
#, c-format
msgid "can't find i386-reg.tbl for reading, errno = %s\n"
msgstr "не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ i386-reg.tbl Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ, номер помилки = %s\n"
-#: i386-gen.c:1961
+#: i386-gen.c:1966
#, c-format
msgid "can't create i386-init.h, errno = %s\n"
msgstr "не вдалоÑÑ Ñтворити i386-init.h, номер помилки = %s\n"
-#: i386-gen.c:2051 ia64-gen.c:2829
+#: i386-gen.c:2056 ia64-gen.c:2829
#, c-format
msgid "unable to change directory to \"%s\", errno = %s\n"
msgstr "не вдалоÑÑ Ð·Ð¼Ñ–Ð½Ð¸Ñ‚Ð¸ каталог на «%s», номер помилки = %s\n"
-#: i386-gen.c:2065 i386-gen.c:2070
+#: i386-gen.c:2070 i386-gen.c:2075
#, c-format
msgid "CpuMax != %d!\n"
msgstr "CpuMax != %d!\n"
-#: i386-gen.c:2074
+#: i386-gen.c:2079
#, c-format
msgid "%d unused bits in i386_cpu_flags.\n"
msgstr "%d невикориÑтаних бітів у i386_cpu_flags.\n"
-#: i386-gen.c:2089
+#: i386-gen.c:2094
#, c-format
msgid "%d unused bits in i386_operand_type.\n"
msgstr "%d невикориÑтаних бітів у i386_operand_type.\n"
-#: i386-gen.c:2103
+#: i386-gen.c:2108
#, c-format
msgid "can't create i386-tbl.h, errno = %s\n"
msgstr "не вдалоÑÑ Ñтворити i386-tbl.h, номер помилки = %s\n"
@@ -1430,17 +1456,17 @@ msgstr "операнд оператора з відÑотком не Ñ” Ñимв
msgid "Attempt to find bit index of 0"
msgstr "Спроба знайти бітовий Ñ–Ð½Ð´ÐµÐºÑ 0"
-#: ip2k-desc.c:1015
+#: ip2k-desc.c:1016
#, c-format
msgid "internal error: ip2k_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: ip2k_cgen_rebuild_tables: конфлікт значень insn-chunk-bitsize: «%d» Ñ– «%d»"
-#: ip2k-desc.c:1103
+#: ip2k-desc.c:1104
#, c-format
msgid "internal error: ip2k_cgen_cpu_open: unsupported argument `%d'"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: ip2k_cgen_cpu_open: непідтримуваний аргумент «%d»"
-#: ip2k-desc.c:1122
+#: ip2k-desc.c:1123
#, c-format
msgid "internal error: ip2k_cgen_cpu_open: no endianness specified"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: ip2k_cgen_cpu_open: не визначено порÑдок байтів"
@@ -1457,17 +1483,17 @@ msgstr "поточне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð¾Ð·Ð° межами діапазону
msgid "21-bit offset out of range"
msgstr "21-бітовий зÑув поза межами діапазону"
-#: iq2000-desc.c:2020
+#: iq2000-desc.c:2021
#, c-format
msgid "internal error: iq2000_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: iq2000_cgen_rebuild_tables: конфлікт значень insn-chunk-bitsize: «%d» Ñ– «%d»"
-#: iq2000-desc.c:2108
+#: iq2000-desc.c:2109
#, c-format
msgid "internal error: iq2000_cgen_cpu_open: unsupported argument `%d'"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: iq2000_cgen_cpu_open: непідтримуваний аргумент «%d»"
-#: iq2000-desc.c:2127
+#: iq2000-desc.c:2128
#, c-format
msgid "internal error: iq2000_cgen_cpu_open: no endianness specified"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: iq2000_cgen_cpu_open: не визначено порÑдок байтів"
@@ -1488,21 +1514,41 @@ msgstr "мало бути вказано відноÑну адреÑу got: goto
msgid "expecting got relative address: gotofflo16(symbol)"
msgstr "мало бути вказано відноÑну адреÑу got: gotofflo16(Ñимвол)"
-#: lm32-desc.c:1002
+#: lm32-desc.c:1003
#, c-format
msgid "internal error: lm32_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: lm32_cgen_rebuild_tables: конфлікт значень insn-chunk-bitsize: «%d» Ñ– «%d»"
-#: lm32-desc.c:1090
+#: lm32-desc.c:1091
#, c-format
msgid "internal error: lm32_cgen_cpu_open: unsupported argument `%d'"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: lm32_cgen_cpu_open: непідтримуваний аргумент «%d»"
-#: lm32-desc.c:1109
+#: lm32-desc.c:1110
#, c-format
msgid "internal error: lm32_cgen_cpu_open: no endianness specified"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: lm32_cgen_cpu_open: не визначено порÑдок байтів"
+#: loongarch-dis.c:300
+#, c-format
+msgid ""
+"\n"
+"The following LoongArch disassembler options are supported for use\n"
+"with the -M switch (multiple options should be separated by commas):\n"
+msgstr ""
+"\n"
+"З перемикачем -M можна викориÑтовувати такі параметри дизаÑемблера\n"
+"LoongArch (декілька параметрів Ñлід відокремлювати комами):\n"
+
+#: loongarch-dis.c:304
+#, c-format
+msgid ""
+"\n"
+" numeric Print numeric register names, rather than ABI names.\n"
+msgstr ""
+"\n"
+" numeric вивеÑти чиÑлові назви регіÑтрів, а не назви в ABI.\n"
+
#: m10200-dis.c:151 m10300-dis.c:574
#, c-format
msgid "unknown\t0x%04lx"
@@ -1587,32 +1633,32 @@ msgstr "некоректна пара r0l/r0h"
msgid "Invalid size specifier"
msgstr "Ðекоректний Ñпецифікатор розміру"
-#: m32c-desc.c:63033
+#: m32c-desc.c:63034
#, c-format
msgid "internal error: m32c_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: m32c_cgen_rebuild_tables: конфлікт значень insn-chunk-bitsize: «%d» Ñ– «%d»"
-#: m32c-desc.c:63121
+#: m32c-desc.c:63122
#, c-format
msgid "internal error: m32c_cgen_cpu_open: unsupported argument `%d'"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: m32c_cgen_cpu_open: непідтримуваний аргумент «%d»"
-#: m32c-desc.c:63140
+#: m32c-desc.c:63141
#, c-format
msgid "internal error: m32c_cgen_cpu_open: no endianness specified"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: m32c_cgen_cpu_open: не визначено порÑдок байтів"
-#: m32r-desc.c:1365
+#: m32r-desc.c:1366
#, c-format
msgid "internal error: m32r_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: m32r_cgen_rebuild_tables: конфлікт значень insn-chunk-bitsize: «%d» Ñ– «%d»"
-#: m32r-desc.c:1453
+#: m32r-desc.c:1454
#, c-format
msgid "internal error: m32r_cgen_cpu_open: unsupported argument `%d'"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: m32r_cgen_cpu_open: непідтримуваний аргумент «%d»"
-#: m32r-desc.c:1472
+#: m32r-desc.c:1473
#, c-format
msgid "internal error: m32r_cgen_cpu_open: no endianness specified"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: m32r_cgen_cpu_open: не визначено порÑдок байтів"
@@ -1660,17 +1706,17 @@ msgstr "Поточне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð¾Ð·Ð° діапазоном від -12
msgid "Value is not aligned enough"
msgstr "Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð½ÐµÐ´Ð¾Ñтатньо вирівнÑно"
-#: mep-desc.c:6226
+#: mep-desc.c:6227
#, c-format
msgid "internal error: mep_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: mep_cgen_rebuild_tables: конфлікт значень insn-chunk-bitsize: «%d» Ñ– «%d»"
-#: mep-desc.c:6314
+#: mep-desc.c:6315
#, c-format
msgid "internal error: mep_cgen_cpu_open: unsupported argument `%d'"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: mep_cgen_cpu_open: непідтримуваний аргумент «%d»"
-#: mep-desc.c:6333
+#: mep-desc.c:6334
#, c-format
msgid "internal error: mep_cgen_cpu_open: no endianness specified"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: mep_cgen_cpu_open: не визначено порÑдок байтів"
@@ -1852,17 +1898,17 @@ msgstr "Операнд оператора з відÑотком не Ñ” Ñимв
msgid "invalid operand. type may have values 0,1,2 only."
msgstr "некоректний операнд. Тип може мати лише Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ 0,1,2."
-#: mt-desc.c:1146
+#: mt-desc.c:1147
#, c-format
msgid "internal error: mt_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: mt_cgen_rebuild_tables: конфлікт значень insn-chunk-bitsize: «%d» Ñ– «%d»"
-#: mt-desc.c:1234
+#: mt-desc.c:1235
#, c-format
msgid "internal error: mt_cgen_cpu_open: unsupported argument `%d'"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: mt_cgen_cpu_open: непідтримуваний аргумент «%d»"
-#: mt-desc.c:1253
+#: mt-desc.c:1254
#, c-format
msgid "internal error: mt_cgen_cpu_open: no endianness specified"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: mt_cgen_cpu_open: не визначено порÑдок байтів"
@@ -1886,47 +1932,47 @@ msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: невідомий апаратний
msgid "insufficient data to decode instruction"
msgstr "недоÑтатньо даних Ð´Ð»Ñ Ð´ÐµÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ Ñ–Ð½Ñтрукції"
-#: nfp-dis.c:927
+#: nfp-dis.c:930
msgid "<invalid_instruction>:"
msgstr "<некоректна_інÑтрукціÑ>:"
-#: nfp-dis.c:1331
+#: nfp-dis.c:1334
msgid ", <invalid CRC operator>, "
msgstr ", <некоректний оператор CRC>, "
-#: nfp-dis.c:1683
+#: nfp-dis.c:1686
msgid "<invalid branch>["
msgstr "<некоректна гілка>["
-#: nfp-dis.c:2052 nfp-dis.c:2323
+#: nfp-dis.c:2055 nfp-dis.c:2326
#, c-format
msgid "<invalid cmd target %d:%d:%d>[]"
msgstr "<некоректна ціль команди %d:%d:%d>[]"
-#: nfp-dis.c:2063 nfp-dis.c:2334
+#: nfp-dis.c:2066 nfp-dis.c:2337
#, c-format
msgid "<invalid cmd action %d:%d:%d>[]"
msgstr "<некоректна Ð´Ñ–Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ %d:%d:%d>[]"
-#: nfp-dis.c:2555
+#: nfp-dis.c:2558
msgid "File has no ME-Config section."
msgstr "У файлі немає розділу ME-Config."
-#: nfp-dis.c:2569
+#: nfp-dis.c:2572
msgid "File has invalid ME-Config section."
msgstr "У файлі некоректний розділ ME-Config."
-#: nfp-dis.c:2711
+#: nfp-dis.c:2717
#, c-format
msgid "Error processing section %u "
msgstr "Помилка під Ñ‡Ð°Ñ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ розділу %u "
-#: nfp-dis.c:2740
+#: nfp-dis.c:2746
#, c-format
msgid "Invalid NFP option: %s"
msgstr "Ðекоректний параметр NFP: %s"
-#: nfp-dis.c:2972
+#: nfp-dis.c:2984
#, c-format
msgid ""
"\n"
@@ -1937,7 +1983,7 @@ msgstr ""
"З перемикачем -M можна викориÑтовувати такі Ñпецифічні Ð´Ð»Ñ NFP параметри\n"
"дизаÑемблера (декілька параметрів Ñлід відокремлювати комами):\n"
-#: nfp-dis.c:2976
+#: nfp-dis.c:2988
#, c-format
msgid ""
"\n"
@@ -1978,17 +2024,17 @@ msgstr "некоректне переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ñховища дан
msgid "internal relocation type invalid"
msgstr "некоректний тип внутрішнього переÑуваннÑ"
-#: or1k-desc.c:2040
+#: or1k-desc.c:2041
#, c-format
msgid "internal error: or1k_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: or1k_cgen_rebuild_tables: конфлікт значень insn-chunk-bitsize: «%d» Ñ– «%d»"
-#: or1k-desc.c:2128
+#: or1k-desc.c:2129
#, c-format
msgid "internal error: or1k_cgen_cpu_open: unsupported argument `%d'"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: or1k_cgen_cpu_open: непідтримуваний аргумент «%d»"
-#: or1k-desc.c:2147
+#: or1k-desc.c:2148
#, c-format
msgid "internal error: or1k_cgen_cpu_open: no endianness specified"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: or1k_cgen_cpu_open: не визначено порÑдок байтів"
@@ -2138,78 +2184,59 @@ msgid "invalid TH value"
msgstr "некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ TH"
#. The option without '=' should be defined above.
-#: riscv-dis.c:85 riscv-dis.c:122
+#: riscv-dis.c:103 riscv-dis.c:140
#, c-format
msgid "unrecognized disassembler option: %s"
msgstr "невідомий параметр дизаÑемблюваннÑ: %s"
#. Invalid options with '=', no option name before '=',
#. and no value after '='.
-#: riscv-dis.c:93
+#: riscv-dis.c:111
#, c-format
msgid "unrecognized disassembler option with '=': %s"
msgstr "невідомий параметр дизаÑÐµÐ¼Ð±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð· «=»: %s"
-#: riscv-dis.c:107
+#: riscv-dis.c:125
#, c-format
msgid "unknown privileged spec set by %s=%s"
msgstr "невідома ÑÐ¿ÐµÑ†Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ Ð¿Ñ€Ð°Ð² доÑтупу, Ñку вÑтановлено інÑтрукцією %s=%s"
-#: riscv-dis.c:114
+#: riscv-dis.c:132
#, c-format
msgid "mis-matched privilege spec set by %s=%s, the elf privilege attribute is %s"
msgstr "вÑтановлено невідповідну Ñпецифікацію привілеїв за допомогою %s=%s, атрибут привілеїв elf дорівнює %s"
-#: riscv-dis.c:416
+#: riscv-dis.c:526
#, c-format
msgid "# internal error, undefined modifier (%c)"
msgstr "# Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°, невизначений модифікатор (%c)"
-#: riscv-dis.c:640
-#, c-format
-msgid ""
-"\n"
-"The following RISC-V-specific disassembler options are supported for use\n"
-"with the -M switch (multiple options should be separated by commas):\n"
-msgstr ""
-"\n"
-"З перемикачем -M можна викориÑтовувати такі Ñпецифічні Ð´Ð»Ñ RISC-V параметри\n"
-"дизаÑемблера (декілька параметрів Ñлід відокремлювати комами):\n"
+#: riscv-dis.c:1018
+msgid "Print numeric register names, rather than ABI names."
+msgstr "вивеÑти чиÑлові назви регіÑтрів, а не назви в ABI."
-#: riscv-dis.c:644
-#, c-format
-msgid ""
-"\n"
-" numeric Print numeric register names, rather than ABI names.\n"
-msgstr ""
-"\n"
-" numeric вивеÑти чиÑлові назви регіÑтрів, а не назви в ABI.\n"
+#: riscv-dis.c:1021
+msgid "Disassemble only into canonical instructions."
+msgstr "Виконати дизаÑÐµÐ¼Ð±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð»Ð¸ÑˆÐµ до канонічних інÑтрукцій."
-#: riscv-dis.c:647
-#, c-format
-msgid ""
-"\n"
-" no-aliases Disassemble only into canonical instructions, rather\n"
-" than into pseudoinstructions.\n"
-msgstr ""
-"\n"
-" no-aliases дизаÑемблювати лише у канонічні інÑтрукції, а не у\n"
-" пÑевдоінÑтрукції.\n"
+#: riscv-dis.c:1024
+msgid "Print the CSR according to the chosen privilege spec."
+msgstr "вивеÑти CSR відповідно до вибраної Ñпецифікації прав доÑтупу."
-#: riscv-dis.c:651
+#: riscv-dis.c:1100
#, c-format
msgid ""
"\n"
-" priv-spec=PRIV Print the CSR according to the chosen privilege spec\n"
-" (1.9, 1.9.1, 1.10, 1.11).\n"
+"The following RISC-V specific disassembler options are supported for use\n"
+"with the -M switch (multiple options should be separated by commas):\n"
msgstr ""
"\n"
-" priv-spec=ПРДОСТ вивеÑти CSR відповідно до вибраної Ñпецифікації прав доÑтупу\n"
-" (1.9, 1.9.1, 1.10, 1.11).\n"
+"З перемикачем -M можна викориÑтовувати такі Ñпецифічні Ð´Ð»Ñ RISC-V параметри\n"
+"дизаÑемблера (декілька параметрів Ñлід відокремлювати комами):\n"
#: rx-dis.c:139 rx-dis.c:163 rx-dis.c:171 rx-dis.c:179 rx-dis.c:187
msgid "<invalid register number>"
-msgstr "<некоректний номер регіÑтру>"
+msgstr "<некоректний номер регіÑтра>"
#: rx-dis.c:147 rx-dis.c:195
msgid "<invalid condition code>"
@@ -2227,15 +2254,15 @@ msgstr "<некоретний розмір операції>"
msgid "<invalid size>"
msgstr "<некоректний розмір>"
-#: s12z-dis.c:236 s12z-dis.c:293 s12z-dis.c:304
+#: s12z-dis.c:239 s12z-dis.c:296 s12z-dis.c:307
msgid "<illegal reg num>"
-msgstr "<некоректний номер регіÑтру>"
+msgstr "<некоректний номер регіÑтра>"
-#: s12z-dis.c:367
+#: s12z-dis.c:370
msgid "<bad>"
msgstr "<помилка>"
-#: s12z-dis.c:377
+#: s12z-dis.c:380
msgid ".<bad>"
msgstr ".<помилка>"
@@ -2289,23 +2316,23 @@ msgstr "невідома"
#: v850-dis.c:190
msgid "<invalid s-reg number>"
-msgstr "<некоректний номер s-регіÑтру>"
+msgstr "<некоректний номер s-регіÑтра>"
#: v850-dis.c:206
msgid "<invalid reg number>"
-msgstr "<некоректний номер регіÑтру>"
+msgstr "<некоректний номер регіÑтра>"
#: v850-dis.c:222
msgid "<invalid v-reg number>"
-msgstr "<некоректний номер v-регіÑтру>"
+msgstr "<некоректний номер v-регіÑтра>"
#: v850-dis.c:236
msgid "<invalid CC-reg number>"
-msgstr "<некоректний номер CC-регіÑтру>"
+msgstr "<некоректний номер CC-регіÑтра>"
#: v850-dis.c:250
msgid "<invalid float-CC-reg number>"
-msgstr "<некоректний номер float-CC-регіÑтру>"
+msgstr "<некоректний номер float-CC-регіÑтра>"
#: v850-dis.c:264
msgid "<invalid cacheop number>"
@@ -2435,17 +2462,17 @@ msgstr "Ðе виÑтачає префікÑа «sof:»"
msgid "Missing 'seg:' prefix"
msgstr "Ðе виÑтачає префікÑа «seg:»"
-#: xc16x-desc.c:3349
+#: xc16x-desc.c:3350
#, c-format
msgid "internal error: xc16x_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: xc16x_cgen_rebuild_tables: конфлікт значень insn-chunk-bitsize: «%d» Ñ– «%d»"
-#: xc16x-desc.c:3437
+#: xc16x-desc.c:3438
#, c-format
msgid "internal error: xc16x_cgen_cpu_open: unsupported argument `%d'"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: xc16x_cgen_cpu_open: непідтримуваний аргумент «%d»"
-#: xc16x-desc.c:3456
+#: xc16x-desc.c:3457
#, c-format
msgid "internal error: xc16x_cgen_cpu_open: no endianness specified"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: xc16x_cgen_cpu_open: не визначено порÑдок байтів"
@@ -2490,21 +2517,30 @@ msgstr "Операнд не Ñ” Ñимволом"
msgid "Syntax error: No trailing ')'"
msgstr "СинтакÑична помилка: не виÑтачає завершального «)»"
-#: xstormy16-desc.c:1317
+#: xstormy16-desc.c:1318
#, c-format
msgid "internal error: xstormy16_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: xstormy16_cgen_rebuild_tables: конфлікт значень insn-chunk-bitsize: «%d» Ñ– «%d»"
-#: xstormy16-desc.c:1405
+#: xstormy16-desc.c:1406
#, c-format
msgid "internal error: xstormy16_cgen_cpu_open: unsupported argument `%d'"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: xstormy16_cgen_cpu_open: непідтримуваний аргумент «%d»"
-#: xstormy16-desc.c:1424
+#: xstormy16-desc.c:1425
#, c-format
msgid "internal error: xstormy16_cgen_cpu_open: no endianness specified"
msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: xstormy16_cgen_cpu_open: не визначено порÑдок байтів"
+#~ msgid ""
+#~ "\n"
+#~ " no-aliases Disassemble only into canonical instructions, rather\n"
+#~ " than into pseudoinstructions.\n"
+#~ msgstr ""
+#~ "\n"
+#~ " no-aliases дизаÑемблювати лише у канонічні інÑтрукції, а не у\n"
+#~ " пÑевдоінÑтрукції.\n"
+
#~ msgid " dsp Recognize DSP instructions.\n"
#~ msgstr " dsp розпізнавати інÑтрукції DSP.\n"
diff --git a/opcodes/ppc-dis.c b/opcodes/ppc-dis.c
index 07f4e34a657..38ddeca2623 100644
--- a/opcodes/ppc-dis.c
+++ b/opcodes/ppc-dis.c
@@ -598,8 +598,9 @@ lookup_powerpc (uint64_t insn, ppc_cpu_t dialect)
if ((insn & opcode->mask) != opcode->opcode
|| ((dialect & PPC_OPCODE_ANY) == 0
- && (opcode->flags & dialect) == 0)
- || (opcode->deprecated & dialect) != 0)
+ && ((opcode->flags & dialect) == 0
+ || (opcode->deprecated & dialect) != 0))
+ || (opcode->deprecated & dialect & PPC_OPCODE_RAW) != 0)
continue;
/* Check validity of operands. */
diff --git a/opcodes/ppc-opc.c b/opcodes/ppc-opc.c
index a424dd924de..bd83d44a2ae 100644
--- a/opcodes/ppc-opc.c
+++ b/opcodes/ppc-opc.c
@@ -1058,6 +1058,165 @@ extract_esync (uint64_t insn,
return value;
}
+/* The n operand of clrrwi, which sets the ME field to 31 - n. */
+
+static uint64_t
+insert_crwn (uint64_t insn,
+ int64_t value,
+ ppc_cpu_t dialect ATTRIBUTE_UNUSED,
+ const char **errmsg ATTRIBUTE_UNUSED)
+{
+ return insn | ((~value & 0x1f) << 1);
+}
+
+static int64_t
+extract_crwn (uint64_t insn,
+ ppc_cpu_t dialect ATTRIBUTE_UNUSED,
+ int *invalid ATTRIBUTE_UNUSED)
+{
+ return ~(insn >> 1) & 0x1f;
+}
+
+/* The n operand of extlwi, which sets the ME field to n - 1. */
+
+static uint64_t
+insert_elwn (uint64_t insn,
+ int64_t value,
+ ppc_cpu_t dialect ATTRIBUTE_UNUSED,
+ const char **errmsg ATTRIBUTE_UNUSED)
+{
+ return insn | (((value - 1) & 0x1f) << 1);
+}
+
+static int64_t
+extract_elwn (uint64_t insn,
+ ppc_cpu_t dialect ATTRIBUTE_UNUSED,
+ int *invalid ATTRIBUTE_UNUSED)
+{
+ return ((insn >> 1) & 0x1f) + 1;
+}
+
+/* The n operand of extrwi, sets MB = 32 - n. */
+
+static uint64_t
+insert_erwn (uint64_t insn,
+ int64_t value,
+ ppc_cpu_t dialect ATTRIBUTE_UNUSED,
+ const char **errmsg ATTRIBUTE_UNUSED)
+{
+ return insn | ((-value & 0x1f) << 6);
+}
+
+static int64_t
+extract_erwn (uint64_t insn,
+ ppc_cpu_t dialect ATTRIBUTE_UNUSED,
+ int *invalid ATTRIBUTE_UNUSED)
+{
+ return (~(insn >> 6) & 0x1f) + 1;
+}
+
+/* The b operand of extrwi, sets SH = b + n. */
+
+static uint64_t
+insert_erwb (uint64_t insn,
+ int64_t value,
+ ppc_cpu_t dialect,
+ const char **errmsg ATTRIBUTE_UNUSED)
+{
+ int64_t n = extract_erwn (insn, dialect, NULL);
+ return insn | (((n + value) & 0x1f) << 11);
+}
+
+static int64_t
+extract_erwb (uint64_t insn,
+ ppc_cpu_t dialect,
+ int *invalid ATTRIBUTE_UNUSED)
+{
+ int64_t n = extract_erwn (insn, dialect, NULL);
+ return ((insn >> 11) - n) & 0x1f;
+}
+
+/* The n and b operands of clrlslwi. */
+
+static uint64_t
+insert_cslwn (uint64_t insn,
+ int64_t value,
+ ppc_cpu_t dialect ATTRIBUTE_UNUSED,
+ const char **errmsg ATTRIBUTE_UNUSED)
+{
+ uint64_t mb = 0x1f << 6;
+ int64_t b = (insn >> 6) & 0x1f;
+ return ((insn & ~mb) | ((value & 0x1f) << 11) | (((b - value) & 0x1f) << 6)
+ | ((~value & 0x1f) << 1));
+}
+
+static int64_t
+extract_cslwb (uint64_t insn,
+ ppc_cpu_t dialect ATTRIBUTE_UNUSED,
+ int *invalid)
+{
+ int64_t sh = (insn >> 11) & 0x1f;
+ int64_t mb = (insn >> 6) & 0x1f;
+ int64_t me = (insn >> 1) & 0x1f;
+ if (sh != 31 - me)
+ *invalid = 1;
+ return (mb + sh) & 0x1f;
+}
+
+/* The n and b operands of inslwi. */
+
+static uint64_t
+insert_ilwb (uint64_t insn,
+ int64_t value,
+ ppc_cpu_t dialect ATTRIBUTE_UNUSED,
+ const char **errmsg ATTRIBUTE_UNUSED)
+{
+ uint64_t me = 0x1f << 1;
+ int64_t n = (insn >> 1) & 0x1f;
+ return ((insn & ~me) | ((-value & 0x1f) << 11) | ((value & 0x1f) << 6)
+ | (((value + n - 1) & 0x1f) << 1));
+}
+
+static int64_t
+extract_ilwn (uint64_t insn,
+ ppc_cpu_t dialect ATTRIBUTE_UNUSED,
+ int *invalid)
+{
+ int64_t sh = (insn >> 11) & 0x1f;
+ int64_t mb = (insn >> 6) & 0x1f;
+ int64_t me = (insn >> 1) & 0x1f;
+ if (((sh + mb) & 0x1f) != 0)
+ *invalid = 1;
+ return ((me - mb) & 0x1f) + 1;
+}
+
+/* The n and b operands of insrwi. */
+
+static uint64_t
+insert_irwb (uint64_t insn,
+ int64_t value,
+ ppc_cpu_t dialect ATTRIBUTE_UNUSED,
+ const char **errmsg ATTRIBUTE_UNUSED)
+{
+ uint64_t me = 0x1f << 1;
+ int64_t n = (insn >> 1) & 0x1f;
+ return ((insn & ~me) | ((-(value + n) & 0x1f) << 11) | ((value & 0x1f) << 6)
+ | (((value + n - 1) & 0x1f) << 1));
+}
+
+static int64_t
+extract_irwn (uint64_t insn,
+ ppc_cpu_t dialect ATTRIBUTE_UNUSED,
+ int *invalid)
+{
+ int64_t sh = (insn >> 11) & 0x1f;
+ int64_t mb = (insn >> 6) & 0x1f;
+ int64_t me = (insn >> 1) & 0x1f;
+ if (((sh + me + 1) & 0x1f) != 0)
+ *invalid = 1;
+ return ((me - mb) & 0x1f) + 1;
+}
+
/* The MB and ME fields in an M form instruction expressed as a single
operand which is itself a bitmask. The extraction function always
marks it as invalid, since we never want to recognize an
@@ -1166,6 +1325,63 @@ extract_mb6 (uint64_t insn,
return ((insn >> 6) & 0x1f) | (insn & 0x20);
}
+/* The n operand of extrdi, which sets MB field. */
+
+static uint64_t
+insert_erdn (uint64_t insn,
+ int64_t value,
+ ppc_cpu_t dialect,
+ const char **errmsg)
+{
+ return insert_mb6 (insn, -value, dialect, errmsg);
+}
+
+static int64_t
+extract_erdn (uint64_t insn,
+ ppc_cpu_t dialect,
+ int *invalid)
+{
+ return (~extract_mb6 (insn, dialect, invalid) & 63) + 1;
+}
+
+/* The n operand of extldi, which sets ME field. */
+
+static uint64_t
+insert_eldn (uint64_t insn,
+ int64_t value,
+ ppc_cpu_t dialect,
+ const char **errmsg)
+{
+ return insert_mb6 (insn, value - 1, dialect, errmsg);
+}
+
+static int64_t
+extract_eldn (uint64_t insn,
+ ppc_cpu_t dialect,
+ int *invalid)
+{
+ return extract_mb6 (insn, dialect, invalid) + 1;
+}
+
+/* The n operand of clrrdi, which set ME field. */
+
+static uint64_t
+insert_crdn (uint64_t insn,
+ int64_t value,
+ ppc_cpu_t dialect,
+ const char **errmsg)
+{
+ return insert_mb6 (insn, 63 - value, dialect, errmsg);
+}
+
+static int64_t
+extract_crdn (uint64_t insn,
+ ppc_cpu_t dialect,
+ int *invalid)
+{
+ return 63 - extract_mb6 (insn, dialect, invalid);
+}
+
/* The NB field in an X form instruction. The value 32 is stored as
0. */
@@ -1532,6 +1748,71 @@ extract_oimm (uint64_t insn,
return ((insn >> 4) & 0x1f) + 1;
}
+/* The n operand of rotrwi, sets SH = 32 - n. */
+
+static uint64_t
+insert_rrwn (uint64_t insn,
+ int64_t value,
+ ppc_cpu_t dialect ATTRIBUTE_UNUSED,
+ const char **errmsg ATTRIBUTE_UNUSED)
+{
+ return insn | ((-value & 0x1f) << 11);
+}
+
+static int64_t
+extract_rrwn (uint64_t insn,
+ ppc_cpu_t dialect ATTRIBUTE_UNUSED,
+ int *invalid ATTRIBUTE_UNUSED)
+{
+ return 31 & -(insn >> 11);
+}
+
+/* The n operand of slwi, sets SH = n and ME = 31 - n. */
+
+static uint64_t
+insert_slwn (uint64_t insn,
+ int64_t value,
+ ppc_cpu_t dialect ATTRIBUTE_UNUSED,
+ const char **errmsg ATTRIBUTE_UNUSED)
+{
+ return insn | ((value & 0x1f) << 11) | ((~value & 0x1f) << 1);
+}
+
+static int64_t
+extract_slwn (uint64_t insn,
+ ppc_cpu_t dialect ATTRIBUTE_UNUSED,
+ int *invalid)
+{
+ int64_t sh = (insn >> 11) & 0x1f;
+ int64_t nme = ~(insn >> 1) & 0x1f;
+ if (sh != nme)
+ *invalid = 1;
+ return sh;
+}
+
+/* The n operand of srwi, sets SH = 32 - n and MB = n. */
+
+static uint64_t
+insert_srwn (uint64_t insn,
+ int64_t value,
+ ppc_cpu_t dialect ATTRIBUTE_UNUSED,
+ const char **errmsg ATTRIBUTE_UNUSED)
+{
+ return insn | ((-value & 0x1f) << 11) | ((value & 0x1f) << 6);
+}
+
+static int64_t
+extract_srwn (uint64_t insn,
+ ppc_cpu_t dialect ATTRIBUTE_UNUSED,
+ int *invalid)
+{
+ int64_t nsh = -(insn >> 11) & 0x1f;
+ int64_t mb = (insn >> 6) & 0x1f;
+ if (nsh != mb)
+ *invalid = 1;
+ return nsh;
+}
+
/* The SH field in an MD form instruction. This is split. */
static uint64_t
@@ -1551,6 +1832,143 @@ extract_sh6 (uint64_t insn,
return ((insn >> 11) & 0x1f) | ((insn << 4) & 0x20);
}
+/* The n operand of rotrdi, which writes to SH field. */
+
+static uint64_t
+insert_rrdn (uint64_t insn,
+ int64_t value,
+ ppc_cpu_t dialect,
+ const char **errmsg)
+{
+ return insert_sh6 (insn, -value, dialect, errmsg);
+}
+
+static int64_t
+extract_rrdn (uint64_t insn,
+ ppc_cpu_t dialect,
+ int *invalid)
+{
+ return -extract_sh6 (insn, dialect, invalid) & 63;
+}
+
+/* The n operand of sldi, which writes to SH and ME fields. */
+
+static uint64_t
+insert_sldn (uint64_t insn,
+ int64_t value,
+ ppc_cpu_t dialect,
+ const char **errmsg)
+{
+ insn = insert_sh6 (insn, value, dialect, errmsg);
+ return insert_crdn (insn, value, dialect, errmsg);
+}
+
+static int64_t
+extract_sldn (uint64_t insn,
+ ppc_cpu_t dialect,
+ int *invalid)
+{
+ int64_t sh = extract_sh6 (insn, dialect, invalid);
+ int64_t me = extract_crdn (insn, dialect, invalid);
+ if (me != sh)
+ *invalid = 1;
+ return sh;
+}
+
+/* The n operand of srdi, which writes to SH and MB fields. */
+
+static uint64_t
+insert_srdn (uint64_t insn,
+ int64_t value,
+ ppc_cpu_t dialect,
+ const char **errmsg)
+{
+ insn = insert_rrdn (insn, value, dialect, errmsg);
+ return insert_mb6 (insn, value, dialect, errmsg);
+}
+
+static int64_t
+extract_srdn (uint64_t insn,
+ ppc_cpu_t dialect,
+ int *invalid)
+{
+ int64_t sh = extract_rrdn (insn, dialect, invalid);
+ int64_t mb = extract_mb6 (insn, dialect, invalid);
+ if (mb != sh)
+ *invalid = 1;
+ return sh;
+}
+
+/* The b operand of extrdi, which sets SH field. */
+
+static uint64_t
+insert_erdb (uint64_t insn,
+ int64_t value,
+ ppc_cpu_t dialect,
+ const char **errmsg)
+{
+ int64_t n = extract_erdn (insn, dialect, NULL);
+ return insert_sh6 (insn, value + n, dialect, errmsg);
+}
+
+static int64_t
+extract_erdb (uint64_t insn,
+ ppc_cpu_t dialect,
+ int *invalid)
+{
+ int64_t sh = extract_sh6 (insn, dialect, invalid);
+ int64_t n = extract_erdn (insn, dialect, invalid);
+ return (sh - n) & 63;
+}
+
+/* The b and n operands of clrlsldi. */
+
+static uint64_t
+insert_csldn (uint64_t insn,
+ int64_t value,
+ ppc_cpu_t dialect,
+ const char **errmsg)
+{
+ uint64_t mb6 = 0x3f << 5;
+ int64_t b = extract_mb6 (insn, dialect, NULL);
+ insn = insert_mb6 (insn & ~mb6, b - value, dialect, errmsg);
+ return insert_sh6 (insn, value, dialect, errmsg);
+}
+
+static int64_t
+extract_csldb (uint64_t insn,
+ ppc_cpu_t dialect,
+ int *invalid)
+{
+ int64_t sh = extract_sh6 (insn, dialect, invalid);
+ int64_t mb = extract_mb6 (insn, dialect, invalid);
+ return (mb + sh) & 63;
+}
+
+/* The b and n operands of insrdi. */
+
+static uint64_t
+insert_irdb (uint64_t insn,
+ int64_t value,
+ ppc_cpu_t dialect,
+ const char **errmsg)
+{
+ uint64_t sh6 = (0x1f << 11) | 2;
+ int64_t n = extract_sh6 (insn, dialect, NULL);
+ insn = insert_sh6 (insn & ~sh6, -(value + n), dialect, errmsg);
+ return insert_mb6 (insn, value, dialect, errmsg);
+}
+
+static int64_t
+extract_irdn (uint64_t insn,
+ ppc_cpu_t dialect,
+ int *invalid)
+{
+ int64_t sh = extract_sh6 (insn, dialect, invalid);
+ int64_t mb = extract_mb6 (insn, dialect, invalid);
+ return (~(mb + sh) & 63) + 1;
+}
+
/* The SPR field in an XFX form instruction. This is flipped--the
lower 5 bits are stored in the upper 5 and vice- versa. */
@@ -2739,11 +3157,41 @@ const struct powerpc_operand powerpc_operands[] =
#define ME_MASK (0x1f << 1)
{ 0x1f, 1, NULL, NULL, 0 },
+#define CRWn ME + 1
+ { 0x1f, 1, insert_crwn, extract_crwn, 0 },
+
+#define ELWn CRWn + 1
+ { 0x1f, 1, insert_elwn, extract_elwn, PPC_OPERAND_PLUS1 },
+
+#define ERWn ELWn + 1
+ { 0x1f, 6, insert_erwn, extract_erwn, 0 },
+
+#define ERWb ERWn + 1
+ { 0x1f, 11, insert_erwb, extract_erwb, 0 },
+
+#define CSLWb ERWb + 1
+ { 0x1f, 6, NULL, extract_cslwb, 0 },
+
+#define CSLWn CSLWb + 1
+ { 0x1f, 11, insert_cslwn, NULL, 0 },
+
+#define ILWn CSLWn + 1
+ { 0x1f, 1, NULL, extract_ilwn, PPC_OPERAND_PLUS1 },
+
+#define ILWb ILWn + 1
+ { 0x1f, 6, insert_ilwb, NULL, 0 },
+
+#define IRWn ILWb + 1
+ { 0x1f, 1, NULL, extract_irwn, PPC_OPERAND_PLUS1 },
+
+#define IRWb IRWn + 1
+ { 0x1f, 6, insert_irwb, NULL, 0 },
+
/* The MB and ME fields in an M form instruction expressed a single
operand which is a bitmask indicating which bits to select. This
is a two operand form using PPC_OPERAND_NEXT. See the
description in opcode/ppc.h for what this means. */
-#define MBE ME + 1
+#define MBE IRWb + 1
{ 0x1f, 6, NULL, NULL, PPC_OPERAND_OPTIONAL | PPC_OPERAND_NEXT },
{ -1, 0, insert_mbe, extract_mbe, 0 },
@@ -2754,9 +3202,18 @@ const struct powerpc_operand powerpc_operands[] =
#define MB6_MASK (0x3f << 5)
{ 0x3f, 5, insert_mb6, extract_mb6, 0 },
+#define ELDn MB6 + 1
+ { 0x3f, 5, insert_eldn, extract_eldn, PPC_OPERAND_PLUS1 },
+
+#define ERDn ELDn + 1
+ { 0x3f, 5, insert_erdn, extract_erdn, 0 },
+
+#define CRDn ERDn + 1
+ { 0x3f, 5, insert_crdn, extract_crdn, 0 },
+
/* The NB field in an X form instruction. The value 32 is stored as
0. */
-#define NB MB6 + 1
+#define NB CRDn + 1
{ 0x1f, 11, NULL, extract_nb, PPC_OPERAND_PLUS1 },
/* The NBI field in an lswi instruction, which has special value
@@ -2927,7 +3384,16 @@ const struct powerpc_operand powerpc_operands[] =
#define UIM5 SH
{ 0x1f, 11, NULL, NULL, 0 },
-#define EVUIMM_LT8 SH + 1
+#define RRWn SH + 1
+ { 0x1f, 11, insert_rrwn, extract_rrwn, 0 },
+
+#define SLWn RRWn + 1
+ { 0x1f, 11, insert_slwn, extract_slwn, 0 },
+
+#define SRWn SLWn + 1
+ { 0x1f, 11, insert_srwn, extract_srwn, 0 },
+
+#define EVUIMM_LT8 SRWn + 1
{ 0x1f, 11, insert_evuimm_lt8, extract_evuimm_lt8, 0 },
#define EVUIMM_LT16 EVUIMM_LT8 + 1
@@ -2942,9 +3408,33 @@ const struct powerpc_operand powerpc_operands[] =
#define SH6_MASK ((0x1f << 11) | (1 << 1))
{ 0x3f, PPC_OPSHIFT_INV, insert_sh6, extract_sh6, 0 },
+#define RRDn SH6 + 1
+ { 0x3f, PPC_OPSHIFT_INV, insert_rrdn, extract_rrdn, 0 },
+
+#define SLDn RRDn + 1
+ { 0x3f, PPC_OPSHIFT_INV, insert_sldn, extract_sldn, 0 },
+
+#define SRDn SLDn + 1
+ { 0x3f, PPC_OPSHIFT_INV, insert_srdn, extract_srdn, 0 },
+
+#define ERDb SRDn + 1
+ { 0x3f, PPC_OPSHIFT_INV, insert_erdb, extract_erdb, 0 },
+
+#define CSLDn ERDb + 1
+ { 0x3f, PPC_OPSHIFT_SH6, insert_csldn, extract_sh6, 0 },
+
+#define CSLDb CSLDn + 1
+ { 0x3f, 5, insert_mb6, extract_csldb, 0 },
+
+#define IRDn CSLDb + 1
+ { 0x3f, PPC_OPSHIFT_INV, insert_sh6, extract_irdn, PPC_OPERAND_PLUS1 },
+
+#define IRDb IRDn + 1
+ { 0x3f, 5, insert_irdb, extract_mb6, 0 },
+
/* The SH field of some variants of the tlbre and tlbwe
instructions, and the ELEV field of the e_sc instruction. */
-#define SHO SH6 + 1
+#define SHO IRDb + 1
#define ELEV SHO
{ 0x1f, 11, NULL, NULL, PPC_OPERAND_OPTIONAL },
@@ -3596,12 +4086,21 @@ const unsigned int num_powerpc_operands = (sizeof (powerpc_operands)
(M ((op), (rc)) \
| ((((uint64_t)(me)) & 0x1f) << 1))
+/* An M_MASK with the MB field fixed. */
+#define MMB_MASK (M_MASK | MB_MASK)
+
+/* An M_MASK with the ME field fixed. */
+#define MME_MASK (M_MASK | ME_MASK)
+
/* An M_MASK with the MB and ME fields fixed. */
#define MMBME_MASK (M_MASK | MB_MASK | ME_MASK)
/* An M_MASK with the SH and ME fields fixed. */
#define MSHME_MASK (M_MASK | SH_MASK | ME_MASK)
+/* An M_MASK with the SH and MB fields fixed. */
+#define MSHMB_MASK (M_MASK | SH_MASK | MB_MASK)
+
/* An MD form instruction. */
#define MD(op, xop, rc) \
(OP (op) \
@@ -4755,48 +5254,71 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{"cput", APU(4, 348,0), APU_RT_MASK, PPC405, 0, {RA, FSL}},
{"efdmin", VX (4, 697), VX_MASK, PPCEFS2, 0, {RD, RA, RB}},
{"efsadd", VX (4, 704), VX_MASK, PPCEFS, 0, {RS, RA, RB}},
+{"evsadd", VX (4, 704), VX_MASK, PPCEFS, 0, {RS, RA, RB}},
{"efssub", VX (4, 705), VX_MASK, PPCEFS, 0, {RS, RA, RB}},
+{"evssub", VX (4, 705), VX_MASK, PPCEFS, 0, {RS, RA, RB}},
{"efsmadd", VX (4, 706), VX_MASK, PPCEFS2, 0, {RS, RA, RB}},
{"vminud", VX (4, 706), VX_MASK, PPCVEC2, 0, {VD, VA, VB}},
{"efsmsub", VX (4, 707), VX_MASK, PPCEFS2, 0, {RS, RA, RB}},
{"efsabs", VX (4, 708), VX_MASK, PPCEFS, 0, {RS, RA}},
+{"evsabs", VX (4, 708), VX_MASK, PPCEFS, 0, {RS, RA}},
{"vsr", VX (4, 708), VX_MASK, PPCVEC, 0, {VD, VA, VB}},
{"efsnabs", VX (4, 709), VX_MASK, PPCEFS, 0, {RS, RA}},
+{"evsnabs", VX (4, 709), VX_MASK, PPCEFS, 0, {RS, RA}},
{"efsneg", VX (4, 710), VX_MASK, PPCEFS, 0, {RS, RA}},
+{"evsneg", VX (4, 710), VX_MASK, PPCEFS, 0, {RS, RA}},
{"vcmpgtfp", VXR(4, 710,0), VXR_MASK, PPCVEC, 0, {VD, VA, VB}},
{"efssqrt", VX_RB_CONST(4, 711, 0), VX_RB_CONST_MASK,PPCEFS2, 0, {RD, RA}},
{"vcmpgtud", VXR(4, 711,0), VXR_MASK, PPCVEC2, 0, {VD, VA, VB}},
{"vmuleud", VX (4, 712), VX_MASK, POWER10, 0, {VD, VA, VB}},
{"efsmul", VX (4, 712), VX_MASK, PPCEFS, 0, {RS, RA, RB}},
+{"evsmul", VX (4, 712), VX_MASK, PPCEFS, 0, {RS, RA, RB}},
{"vmulhud", VX (4, 713), VX_MASK, POWER10, 0, {VD, VA, VB}},
{"efsdiv", VX (4, 713), VX_MASK, PPCEFS, 0, {RS, RA, RB}},
+{"evsdiv", VX (4, 713), VX_MASK, PPCEFS, 0, {RS, RA, RB}},
{"efsnmadd", VX (4, 714), VX_MASK, PPCEFS2, 0, {RS, RA, RB}},
{"vrfim", VX (4, 714), VXVA_MASK, PPCVEC, 0, {VD, VB}},
{"vdiveud", VX (4, 715), VX_MASK, POWER10, 0, {VD, VA, VB}},
{"efsnmsub", VX (4, 715), VX_MASK, PPCEFS2, 0, {RS, RA, RB}},
{"efscmpgt", VX (4, 716), VX_MASK, PPCEFS, 0, {CRFD, RA, RB}},
+{"evscmpgt", VX (4, 716), VX_MASK, PPCEFS, 0, {CRFD, RA, RB}},
{"vextractd", VX (4, 717), VXUIMM4_MASK, PPCVEC3, 0, {VD, VB, UIMM4}},
{"efscmplt", VX (4, 717), VX_MASK, PPCEFS, 0, {CRFD, RA, RB}},
+{"evsgmplt", VX (4, 717), VX_MASK, PPCEFS, 0, {CRFD, RA, RB}},
{"efscmpeq", VX (4, 718), VX_MASK, PPCEFS, 0, {CRFD, RA, RB}},
+{"evsgmpeq", VX (4, 718), VX_MASK, PPCEFS, 0, {CRFD, RA, RB}},
{"vupklsh", VX (4, 718), VXVA_MASK, PPCVEC, 0, {VD, VB}},
{"vinsdlx", VX (4, 719), VX_MASK, POWER10, 0, {VD, RA, RB}},
{"efscfd", VX (4, 719), VX_MASK, PPCEFS, 0, {RS, RB}},
{"efscfui", VX (4, 720), VX_MASK, PPCEFS, 0, {RS, RB}},
+{"evscfui", VX (4, 720), VX_MASK, PPCEFS, 0, {RS, RB}},
{"efscfh", VX_RA_CONST(4, 721, 4), VX_RA_CONST_MASK, PPCEFS2, 0, {RD, RB}},
{"efscfsi", VX (4, 721), VX_MASK, PPCEFS, 0, {RS, RB}},
+{"evscfsi", VX (4, 721), VX_MASK, PPCEFS, 0, {RS, RB}},
{"efscfuf", VX (4, 722), VX_MASK, PPCEFS, 0, {RS, RB}},
+{"evscfuf", VX (4, 722), VX_MASK, PPCEFS, 0, {RS, RB}},
{"efscfsf", VX (4, 723), VX_MASK, PPCEFS, 0, {RS, RB}},
+{"evscfsf", VX (4, 723), VX_MASK, PPCEFS, 0, {RS, RB}},
{"efsctui", VX (4, 724), VX_MASK, PPCEFS, 0, {RS, RB}},
+{"evsctui", VX (4, 724), VX_MASK, PPCEFS, 0, {RS, RB}},
{"efscth", VX_RA_CONST(4, 725, 4), VX_RA_CONST_MASK, PPCEFS2, 0, {RD, RB}},
{"efsctsi", VX (4, 725), VX_MASK, PPCEFS, 0, {RS, RB}},
+{"evsctsi", VX (4, 725), VX_MASK, PPCEFS, 0, {RS, RB}},
{"efsctuf", VX (4, 726), VX_MASK, PPCEFS, 0, {RS, RB}},
+{"evsctuf", VX (4, 726), VX_MASK, PPCEFS, 0, {RS, RB}},
{"efsctsf", VX (4, 727), VX_MASK, PPCEFS, 0, {RS, RB}},
+{"evsctsf", VX (4, 727), VX_MASK, PPCEFS, 0, {RS, RB}},
{"efsctuiz", VX (4, 728), VX_MASK, PPCEFS, 0, {RS, RB}},
+{"evsctuiz", VX (4, 728), VX_MASK, PPCEFS, 0, {RS, RB}},
{"nput", APU(4, 364,0), APU_RT_MASK, PPC405, 0, {RA, FSL}},
{"efsctsiz", VX (4, 730), VX_MASK, PPCEFS, 0, {RS, RB}},
+{"evsctsiz", VX (4, 730), VX_MASK, PPCEFS, 0, {RS, RB}},
{"efststgt", VX (4, 732), VX_MASK, PPCEFS, 0, {CRFD, RA, RB}},
+{"evststgt", VX (4, 732), VX_MASK, PPCEFS, 0, {CRFD, RA, RB}},
{"efststlt", VX (4, 733), VX_MASK, PPCEFS, 0, {CRFD, RA, RB}},
+{"evststlt", VX (4, 733), VX_MASK, PPCEFS, 0, {CRFD, RA, RB}},
{"efststeq", VX (4, 734), VX_MASK, PPCEFS, 0, {CRFD, RA, RB}},
+{"evststeq", VX (4, 734), VX_MASK, PPCEFS, 0, {CRFD, RA, RB}},
{"efdadd", VX (4, 736), VX_MASK, PPCEFS, 0, {RS, RA, RB}},
{"efdsub", VX (4, 737), VX_MASK, PPCEFS, 0, {RS, RA, RB}},
{"efdmadd", VX (4, 738), VX_MASK, PPCEFS2, E500|E500MC, {RD, RA, RB}},
@@ -6198,18 +6720,40 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{"bctarl", XLLK(19,560,1), XLBH_MASK, POWER8, PPCVLE, {BO, BI, BH}},
{"rlwimi", M(20,0), M_MASK, PPCCOM, PPCVLE, {RA, RS, SH, MBE, ME}},
+{"inslwi", M(20,0), M_MASK, PPCCOM, PPCVLE|EXT, {RA, RS, ILWn, ILWb}},
+{"insrwi", M(20,0), M_MASK, PPCCOM, PPCVLE|EXT, {RA, RS, IRWn, IRWb}},
{"rlimi", M(20,0), M_MASK, PWRCOM, PPCVLE, {RA, RS, SH, MBE, ME}},
{"rlwimi.", M(20,1), M_MASK, PPCCOM, PPCVLE, {RA, RS, SH, MBE, ME}},
+{"inslwi.", M(20,1), M_MASK, PPCCOM, PPCVLE|EXT, {RA, RS, ILWn, ILWb}},
+{"insrwi.", M(20,1), M_MASK, PPCCOM, PPCVLE|EXT, {RA, RS, IRWn, IRWb}},
{"rlimi.", M(20,1), M_MASK, PWRCOM, PPCVLE, {RA, RS, SH, MBE, ME}},
{"rotlwi", MME(21,31,0), MMBME_MASK, PPCCOM, PPCVLE|EXT, {RA, RS, SH}},
+{"rotrwi", MME(21,31,0), MMBME_MASK, PPCCOM, PPCVLE|EXT, {RA, RS, RRWn}},
{"clrlwi", MME(21,31,0), MSHME_MASK, PPCCOM, PPCVLE|EXT, {RA, RS, MB}},
+{"clrrwi", M(21,0), MSHMB_MASK, PPCCOM, PPCVLE|EXT, {RA, RS, CRWn}},
+{"slwi", M(21,0), MMB_MASK, PPCCOM, PPCVLE|EXT, {RA, RS, SLWn}},
+{"srwi", MME(21,31,0), MME_MASK, PPCCOM, PPCVLE|EXT, {RA, RS, SRWn}},
{"rlwinm", M(21,0), M_MASK, PPCCOM, PPCVLE, {RA, RS, SH, MBE, ME}},
+{"extlwi", M(21,0), MMB_MASK, PPCCOM, PPCVLE|EXT, {RA, RS, ELWn, SH}},
+{"extrwi", MME(21,31,0), MME_MASK, PPCCOM, PPCVLE|EXT, {RA, RS, ERWn, ERWb}},
+{"clrlslwi", M(21,0), M_MASK, PPCCOM, PPCVLE|EXT, {RA, RS, CSLWb, CSLWn}},
+{"sli", M(21,0), MMB_MASK, PWRCOM, PPCVLE|EXT, {RA, RS, SLWn}},
+{"sri", MME(21,31,0), MME_MASK, PWRCOM, PPCVLE|EXT, {RA, RS, SRWn}},
{"rlinm", M(21,0), M_MASK, PWRCOM, PPCVLE, {RA, RS, SH, MBE, ME}},
{"rotlwi.", MME(21,31,1), MMBME_MASK, PPCCOM, PPCVLE|EXT, {RA, RS, SH}},
+{"rotrwi.", MME(21,31,1), MMBME_MASK, PPCCOM, PPCVLE|EXT, {RA, RS, RRWn}},
{"clrlwi.", MME(21,31,1), MSHME_MASK, PPCCOM, PPCVLE|EXT, {RA, RS, MB}},
+{"clrrwi.", M(21,1), MSHMB_MASK, PPCCOM, PPCVLE|EXT, {RA, RS, CRWn}},
+{"slwi.", M(21,1), MMB_MASK, PPCCOM, PPCVLE|EXT, {RA, RS, SLWn}},
+{"srwi.", MME(21,31,1), MME_MASK, PPCCOM, PPCVLE|EXT, {RA, RS, SRWn}},
{"rlwinm.", M(21,1), M_MASK, PPCCOM, PPCVLE, {RA, RS, SH, MBE, ME}},
+{"extlwi.", M(21,1), MMB_MASK, PPCCOM, PPCVLE|EXT, {RA, RS, ELWn, SH}},
+{"extrwi.", MME(21,31,1), MME_MASK, PPCCOM, PPCVLE|EXT, {RA, RS, ERWn, ERWb}},
+{"clrlslwi.", M(21,1), M_MASK, PPCCOM, PPCVLE|EXT, {RA, RS, CSLWb, CSLWn}},
+{"sli.", M(21,1), MMB_MASK, PWRCOM, PPCVLE|EXT, {RA, RS, SLWn}},
+{"sri.", MME(21,31,1), MME_MASK, PWRCOM, PPCVLE|EXT, {RA, RS, SRWn}},
{"rlinm.", M(21,1), M_MASK, PWRCOM, PPCVLE, {RA, RS, SH, MBE, ME}},
{"rlmi", M(22,0), M_MASK, M601, PPCVLE, {RA, RS, RB, MBE, ME}},
@@ -6244,20 +6788,36 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{"andiu.", OP(29), OP_MASK, PWRCOM, PPCVLE, {RA, RS, UI}},
{"rotldi", MD(30,0,0), MDMB_MASK, PPC64, PPCVLE|EXT, {RA, RS, SH6}},
+{"rotrdi", MD(30,0,0), MDMB_MASK, PPC64, PPCVLE|EXT, {RA, RS, RRDn}},
{"clrldi", MD(30,0,0), MDSH_MASK, PPC64, PPCVLE|EXT, {RA, RS, MB6}},
+{"srdi", MD(30,0,0), MD_MASK, PPC64, PPCVLE|EXT, {RA, RS, SRDn}},
{"rldicl", MD(30,0,0), MD_MASK, PPC64, PPCVLE, {RA, RS, SH6, MB6}},
+{"extrdi", MD(30,0,0), MD_MASK, PPC64, PPCVLE|EXT, {RA, RS, ERDn, ERDb}},
{"rotldi.", MD(30,0,1), MDMB_MASK, PPC64, PPCVLE|EXT, {RA, RS, SH6}},
+{"rotrdi.", MD(30,0,1), MDMB_MASK, PPC64, PPCVLE|EXT, {RA, RS, RRDn}},
{"clrldi.", MD(30,0,1), MDSH_MASK, PPC64, PPCVLE|EXT, {RA, RS, MB6}},
+{"srdi.", MD(30,0,1), MD_MASK, PPC64, PPCVLE|EXT, {RA, RS, SRDn}},
{"rldicl.", MD(30,0,1), MD_MASK, PPC64, PPCVLE, {RA, RS, SH6, MB6}},
+{"extrdi.", MD(30,0,1), MD_MASK, PPC64, PPCVLE|EXT, {RA, RS, ERDn, ERDb}},
+{"clrrdi", MD(30,1,0), MDSH_MASK, PPC64, PPCVLE|EXT, {RA, RS, CRDn}},
+{"sldi", MD(30,1,0), MD_MASK, PPC64, PPCVLE|EXT, {RA, RS, SLDn}},
{"rldicr", MD(30,1,0), MD_MASK, PPC64, PPCVLE, {RA, RS, SH6, ME6}},
+{"extldi", MD(30,1,0), MD_MASK, PPC64, PPCVLE, {RA, RS, ELDn, SH6}},
+{"clrrdi.", MD(30,1,1), MDSH_MASK, PPC64, PPCVLE|EXT, {RA, RS, CRDn}},
+{"sldi.", MD(30,1,1), MD_MASK, PPC64, PPCVLE|EXT, {RA, RS, SLDn}},
{"rldicr.", MD(30,1,1), MD_MASK, PPC64, PPCVLE, {RA, RS, SH6, ME6}},
+{"extldi.", MD(30,1,1), MD_MASK, PPC64, PPCVLE, {RA, RS, ELDn, SH6}},
{"rldic", MD(30,2,0), MD_MASK, PPC64, PPCVLE, {RA, RS, SH6, MB6}},
+{"clrlsldi", MD(30,2,0), MD_MASK, PPC64, PPCVLE|EXT, {RA, RS, CSLDb, CSLDn}},
{"rldic.", MD(30,2,1), MD_MASK, PPC64, PPCVLE, {RA, RS, SH6, MB6}},
+{"clrlsldi.", MD(30,2,1), MD_MASK, PPC64, PPCVLE|EXT, {RA, RS, CSLDb, CSLDn}},
{"rldimi", MD(30,3,0), MD_MASK, PPC64, PPCVLE, {RA, RS, SH6, MB6}},
+{"insrdi", MD(30,3,0), MD_MASK, PPC64, PPCVLE|EXT, {RA, RS, IRDn, IRDb}},
{"rldimi.", MD(30,3,1), MD_MASK, PPC64, PPCVLE, {RA, RS, SH6, MB6}},
+{"insrdi.", MD(30,3,1), MD_MASK, PPC64, PPCVLE|EXT, {RA, RS, IRDn, IRDb}},
{"rotld", MDS(30,8,0), MDSMB_MASK, PPC64, PPCVLE|EXT, {RA, RS, RB}},
{"rldcl", MDS(30,8,0), MDS_MASK, PPC64, PPCVLE, {RA, RS, RB, MB6}},
@@ -9829,7 +10389,16 @@ const struct powerpc_opcode vle_opcodes[] = {
{"e_add2i.", I16A(28,17), I16A_MASK, PPCVLE, 0, {RA, VLESIMM}},
{"e_li", LI20(28,0), LI20_MASK, PPCVLE, 0, {RT, IMM20}},
{"e_rlwimi", M(29,0), M_MASK, PPCVLE, 0, {RA, RS, SH, MB, ME}},
-{"e_rlwinm", M(29,1), M_MASK, PPCVLE, 0, {RA, RT, SH, MBE, ME}},
+{"e_inslwi", M(29,0), M_MASK, PPCVLE, EXT, {RA, RS, ILWn, ILWb}},
+{"e_insrwi", M(29,0), M_MASK, PPCVLE, EXT, {RA, RS, IRWn, IRWb}},
+{"e_rotlwi", MME(29,31,1), MMBME_MASK, PPCVLE, EXT, {RA, RS, SH}},
+{"e_rotrwi", MME(29,31,1), MMBME_MASK, PPCVLE, EXT, {RA, RS, RRWn}},
+{"e_clrlwi", MME(29,31,1), MSHME_MASK, PPCVLE, EXT, {RA, RS, MB}},
+{"e_clrrwi", M(29,1), MSHMB_MASK, PPCVLE, EXT, {RA, RS, CRWn}},
+{"e_rlwinm", M(29,1), M_MASK, PPCVLE, 0, {RA, RS, SH, MBE, ME}},
+{"e_extlwi", M(29,1), MMB_MASK, PPCVLE, EXT, {RA, RS, ELWn, SH}},
+{"e_extrwi", MME(29,31,1), MME_MASK, PPCVLE, EXT, {RA, RS, ERWn, ERWb}},
+{"e_clrlslwi", M(29,1), M_MASK, PPCVLE, EXT, {RA, RS, CSLWb, CSLWn}},
{"e_b", BD24(30,0,0), BD24_MASK, PPCVLE, 0, {B24}},
{"e_bl", BD24(30,0,1), BD24_MASK, PPCVLE, 0, {B24}},
{"e_bdnz", EBD15(30,8,BO32DNZ,0), EBD15_MASK, PPCVLE, EXT, {B15}},
@@ -9935,106 +10504,6 @@ const struct powerpc_opcode vle_opcodes[] = {
const unsigned int vle_num_opcodes =
sizeof (vle_opcodes) / sizeof (vle_opcodes[0]);
-
-/* The macro table. This is only used by the assembler. */
-
-/* The expressions of the form (-x ! 31) & (x | 31) have the value 0
- when x=0; 32-x when x is between 1 and 31; are negative if x is
- negative; and are 32 or more otherwise. This is what you want
- when, for instance, you are emulating a right shift by a
- rotate-left-and-mask, because the underlying instructions support
- shifts of size 0 but not shifts of size 32. By comparison, when
- extracting x bits from some word you want to use just 32-x, because
- the underlying instructions don't support extracting 0 bits but do
- support extracting the whole word (32 bits in this case). */
-
-const struct powerpc_macro powerpc_macros[] = {
-{"extldi", 4, PPC64, "rldicr %0,%1,%3,(%2)-1"},
-{"extldi.", 4, PPC64, "rldicr. %0,%1,%3,(%2)-1"},
-{"extrdi", 4, PPC64, "rldicl %0,%1,((%2)+(%3))&((%2)+(%3)<>64),64-(%2)"},
-{"extrdi.", 4, PPC64, "rldicl. %0,%1,((%2)+(%3))&((%2)+(%3)<>64),64-(%2)"},
-{"insrdi", 4, PPC64, "rldimi %0,%1,64-((%2)+(%3)),%3"},
-{"insrdi.", 4, PPC64, "rldimi. %0,%1,64-((%2)+(%3)),%3"},
-{"rotrdi", 3, PPC64, "rldicl %0,%1,(-(%2)!63)&((%2)|63),0"},
-{"rotrdi.", 3, PPC64, "rldicl. %0,%1,(-(%2)!63)&((%2)|63),0"},
-{"sldi", 3, PPC64, "rldicr %0,%1,%2,63-(%2)"},
-{"sldi.", 3, PPC64, "rldicr. %0,%1,%2,63-(%2)"},
-{"srdi", 3, PPC64, "rldicl %0,%1,(-(%2)!63)&((%2)|63),%2"},
-{"srdi.", 3, PPC64, "rldicl. %0,%1,(-(%2)!63)&((%2)|63),%2"},
-{"clrrdi", 3, PPC64, "rldicr %0,%1,0,63-(%2)"},
-{"clrrdi.", 3, PPC64, "rldicr. %0,%1,0,63-(%2)"},
-{"clrlsldi", 4, PPC64, "rldic %0,%1,%3,(%2)-(%3)"},
-{"clrlsldi.",4, PPC64, "rldic. %0,%1,%3,(%2)-(%3)"},
-
-{"extlwi", 4, PPCCOM, "rlwinm %0,%1,%3,0,(%2)-1"},
-{"extlwi.", 4, PPCCOM, "rlwinm. %0,%1,%3,0,(%2)-1"},
-{"extrwi", 4, PPCCOM, "rlwinm %0,%1,((%2)+(%3))&((%2)+(%3)<>32),32-(%2),31"},
-{"extrwi.", 4, PPCCOM, "rlwinm. %0,%1,((%2)+(%3))&((%2)+(%3)<>32),32-(%2),31"},
-{"inslwi", 4, PPCCOM, "rlwimi %0,%1,(-(%3)!31)&((%3)|31),%3,(%2)+(%3)-1"},
-{"inslwi.", 4, PPCCOM, "rlwimi. %0,%1,(-(%3)!31)&((%3)|31),%3,(%2)+(%3)-1"},
-{"insrwi", 4, PPCCOM, "rlwimi %0,%1,32-((%2)+(%3)),%3,(%2)+(%3)-1"},
-{"insrwi.", 4, PPCCOM, "rlwimi. %0,%1,32-((%2)+(%3)),%3,(%2)+(%3)-1"},
-{"rotrwi", 3, PPCCOM, "rlwinm %0,%1,(-(%2)!31)&((%2)|31),0,31"},
-{"rotrwi.", 3, PPCCOM, "rlwinm. %0,%1,(-(%2)!31)&((%2)|31),0,31"},
-{"slwi", 3, PPCCOM, "rlwinm %0,%1,%2,0,31-(%2)"},
-{"sli", 3, PWRCOM, "rlinm %0,%1,%2,0,31-(%2)"},
-{"slwi.", 3, PPCCOM, "rlwinm. %0,%1,%2,0,31-(%2)"},
-{"sli.", 3, PWRCOM, "rlinm. %0,%1,%2,0,31-(%2)"},
-{"srwi", 3, PPCCOM, "rlwinm %0,%1,(-(%2)!31)&((%2)|31),%2,31"},
-{"sri", 3, PWRCOM, "rlinm %0,%1,(-(%2)!31)&((%2)|31),%2,31"},
-{"srwi.", 3, PPCCOM, "rlwinm. %0,%1,(-(%2)!31)&((%2)|31),%2,31"},
-{"sri.", 3, PWRCOM, "rlinm. %0,%1,(-(%2)!31)&((%2)|31),%2,31"},
-{"clrrwi", 3, PPCCOM, "rlwinm %0,%1,0,0,31-(%2)"},
-{"clrrwi.", 3, PPCCOM, "rlwinm. %0,%1,0,0,31-(%2)"},
-{"clrlslwi", 4, PPCCOM, "rlwinm %0,%1,%3,(%2)-(%3),31-(%3)"},
-{"clrlslwi.",4, PPCCOM, "rlwinm. %0,%1,%3,(%2)-(%3),31-(%3)"},
-
-{"e_extlwi", 4, PPCVLE, "e_rlwinm %0,%1,%3,0,(%2)-1"},
-{"e_extrwi", 4, PPCVLE, "e_rlwinm %0,%1,((%2)+(%3))&((%2)+(%3)<>32),32-(%2),31"},
-{"e_inslwi", 4, PPCVLE, "e_rlwimi %0,%1,(-(%3)!31)&((%3)|31),%3,(%2)+(%3)-1"},
-{"e_insrwi", 4, PPCVLE, "e_rlwimi %0,%1,32-((%2)+(%3)),%3,(%2)+(%3)-1"},
-{"e_rotlwi", 3, PPCVLE, "e_rlwinm %0,%1,%2,0,31"},
-{"e_rotrwi", 3, PPCVLE, "e_rlwinm %0,%1,(-(%2)!31)&((%2)|31),0,31"},
-{"e_slwi", 3, PPCVLE, "e_rlwinm %0,%1,%2,0,31-(%2)"},
-{"e_srwi", 3, PPCVLE, "e_rlwinm %0,%1,(-(%2)!31)&((%2)|31),%2,31"},
-{"e_clrlwi", 3, PPCVLE, "e_rlwinm %0,%1,0,%2,31"},
-{"e_clrrwi", 3, PPCVLE, "e_rlwinm %0,%1,0,0,31-(%2)"},
-{"e_clrlslwi",4, PPCVLE, "e_rlwinm %0,%1,%3,(%2)-(%3),31-(%3)"},
-
-/* old SPE instructions have new names with the same opcodes */
-{"evsadd", 3, PPCSPE|PPCVLE, "efsadd %0,%1,%2"},
-{"evssub", 3, PPCSPE|PPCVLE, "efssub %0,%1,%2"},
-{"evsabs", 2, PPCSPE|PPCVLE, "efsabs %0,%1"},
-{"evsnabs", 2, PPCSPE|PPCVLE, "efsnabs %0,%1"},
-{"evsneg", 2, PPCSPE|PPCVLE, "efsneg %0,%1"},
-{"evsmul", 3, PPCSPE|PPCVLE, "efsmul %0,%1,%2"},
-{"evsdiv", 3, PPCSPE|PPCVLE, "efsdiv %0,%1,%2"},
-{"evscmpgt", 3, PPCSPE|PPCVLE, "efscmpgt %0,%1,%2"},
-{"evsgmplt", 3, PPCSPE|PPCVLE, "efscmplt %0,%1,%2"},
-{"evsgmpeq", 3, PPCSPE|PPCVLE, "efscmpeq %0,%1,%2"},
-{"evscfui", 2, PPCSPE|PPCVLE, "efscfui %0,%1"},
-{"evscfsi", 2, PPCSPE|PPCVLE, "efscfsi %0,%1"},
-{"evscfuf", 2, PPCSPE|PPCVLE, "efscfuf %0,%1"},
-{"evscfsf", 2, PPCSPE|PPCVLE, "efscfsf %0,%1"},
-{"evsctui", 2, PPCSPE|PPCVLE, "efsctui %0,%1"},
-{"evsctsi", 2, PPCSPE|PPCVLE, "efsctsi %0,%1"},
-{"evsctuf", 2, PPCSPE|PPCVLE, "efsctuf %0,%1"},
-{"evsctsf", 2, PPCSPE|PPCVLE, "efsctsf %0,%1"},
-{"evsctuiz", 2, PPCSPE|PPCVLE, "efsctuiz %0,%1"},
-{"evsctsiz", 2, PPCSPE|PPCVLE, "efsctsiz %0,%1"},
-{"evststgt", 3, PPCSPE|PPCVLE, "efststgt %0,%1,%2"},
-{"evststlt", 3, PPCSPE|PPCVLE, "efststlt %0,%1,%2"},
-{"evststeq", 3, PPCSPE|PPCVLE, "efststeq %0,%1,%2"},
-
-/* SPE2 instructions which just are mapped to SPE2 */
-{"evdotphsssi", 3, PPCSPE2, "evdotphssmi %0,%1,%2"},
-{"evdotphsssia", 3, PPCSPE2, "evdotphssmia %0,%1,%2"},
-{"evdotpwsssi", 3, PPCSPE2, "evdotpwssmi %0,%1,%2"},
-{"evdotpwsssia", 3, PPCSPE2, "evdotpwssmia %0,%1,%2"}
-};
-
-const int powerpc_num_macros =
- sizeof (powerpc_macros) / sizeof (powerpc_macros[0]);
/* SPE v2 instruction set from SPE2PIM Rev. 2 08/2011 */
const struct powerpc_opcode spe2_opcodes[] = {
@@ -10128,6 +10597,7 @@ const struct powerpc_opcode spe2_opcodes[] = {
{"evdotphasumi", VX (4, 330), VX_MASK, PPCSPE2, 0, {RD, RA, RB}},
{"evdotphassfr", VX (4, 331), VX_MASK, PPCSPE2, 0, {RD, RA, RB}},
{"evdotphssmi", VX (4, 333), VX_MASK, PPCSPE2, 0, {RD, RA, RB}},
+{"evdotphsssi", VX (4, 333), VX_MASK, PPCSPE2, 0, {RD, RA, RB}},
{"evdotphsssfr", VX (4, 335), VX_MASK, PPCSPE2, 0, {RD, RA, RB}},
{"evdotphausiaaw3", VX (4, 336), VX_MASK, PPCSPE2, 0, {RD, RA, RB}},
{"evdotphassiaaw3", VX (4, 337), VX_MASK, PPCSPE2, 0, {RD, RA, RB}},
@@ -10151,6 +10621,7 @@ const struct powerpc_opcode spe2_opcodes[] = {
{"evdotphasumia", VX (4, 362), VX_MASK, PPCSPE2, 0, {RD, RA, RB}},
{"evdotphassfra", VX (4, 363), VX_MASK, PPCSPE2, 0, {RD, RA, RB}},
{"evdotphssmia", VX (4, 365), VX_MASK, PPCSPE2, 0, {RD, RA, RB}},
+{"evdotphsssia", VX (4, 365), VX_MASK, PPCSPE2, 0, {RD, RA, RB}},
{"evdotphsssfra", VX (4, 367), VX_MASK, PPCSPE2, 0, {RD, RA, RB}},
{"evdotphausiaaw", VX (4, 368), VX_MASK, PPCSPE2, 0, {RD, RA, RB}},
{"evdotphassiaaw", VX (4, 369), VX_MASK, PPCSPE2, 0, {RD, RA, RB}},
@@ -10223,6 +10694,7 @@ const struct powerpc_opcode spe2_opcodes[] = {
{"evdotpwasmi", VX (4, 457), VX_MASK, PPCSPE2, 0, {RD, RA, RB}},
{"evdotpwasumi", VX (4, 458), VX_MASK, PPCSPE2, 0, {RD, RA, RB}},
{"evdotpwssmi", VX (4, 461), VX_MASK, PPCSPE2, 0, {RD, RA, RB}},
+{"evdotpwsssi", VX (4, 461), VX_MASK, PPCSPE2, 0, {RD, RA, RB}},
{"evdotpwausiaa3", VX (4, 464), VX_MASK, PPCSPE2, 0, {RD, RA, RB}},
{"evdotpwassiaa3", VX (4, 465), VX_MASK, PPCSPE2, 0, {RD, RA, RB}},
{"evdotpwasusiaa3", VX (4, 466), VX_MASK, PPCSPE2, 0, {RD, RA, RB}},
@@ -10238,6 +10710,7 @@ const struct powerpc_opcode spe2_opcodes[] = {
{"evdotpwasmia", VX (4, 489), VX_MASK, PPCSPE2, 0, {RD, RA, RB}},
{"evdotpwasumia", VX (4, 490), VX_MASK, PPCSPE2, 0, {RD, RA, RB}},
{"evdotpwssmia", VX (4, 493), VX_MASK, PPCSPE2, 0, {RD, RA, RB}},
+{"evdotpwsssia", VX (4, 493), VX_MASK, PPCSPE2, 0, {RD, RA, RB}},
{"evdotpwausiaa", VX (4, 496), VX_MASK, PPCSPE2, 0, {RD, RA, RB}},
{"evdotpwassiaa", VX (4, 497), VX_MASK, PPCSPE2, 0, {RD, RA, RB}},
{"evdotpwasusiaa", VX (4, 498), VX_MASK, PPCSPE2, 0, {RD, RA, RB}},
diff --git a/opcodes/riscv-dis.c b/opcodes/riscv-dis.c
index 34724d4aec5..9ff31167775 100644
--- a/opcodes/riscv-dis.c
+++ b/opcodes/riscv-dis.c
@@ -165,7 +165,7 @@ arg_print (struct disassemble_info *info, unsigned long val,
const char* const* array, size_t size)
{
const char *s = val >= size || array[val] == NULL ? "unknown" : array[val];
- (*info->fprintf_func) (info->stream, "%s", s);
+ (*info->fprintf_styled_func) (info->stream, dis_style_text, "%s", s);
}
static void
@@ -195,11 +195,11 @@ print_insn_args (const char *oparg, insn_t l, bfd_vma pc, disassemble_info *info
struct riscv_private_data *pd = info->private_data;
int rs1 = (l >> OP_SH_RS1) & OP_MASK_RS1;
int rd = (l >> OP_SH_RD) & OP_MASK_RD;
- fprintf_ftype print = info->fprintf_func;
+ fprintf_styled_ftype print = info->fprintf_styled_func;
const char *opargStart;
if (*oparg != '\0')
- print (info->stream, "\t");
+ print (info->stream, dis_style_text, "\t");
for (; *oparg != '\0'; oparg++)
{
@@ -211,22 +211,24 @@ print_insn_args (const char *oparg, insn_t l, bfd_vma pc, disassemble_info *info
{
case 's': /* RS1 x8-x15. */
case 'w': /* RS1 x8-x15. */
- print (info->stream, "%s",
+ print (info->stream, dis_style_register, "%s",
riscv_gpr_names[EXTRACT_OPERAND (CRS1S, l) + 8]);
break;
case 't': /* RS2 x8-x15. */
case 'x': /* RS2 x8-x15. */
- print (info->stream, "%s",
+ print (info->stream, dis_style_register, "%s",
riscv_gpr_names[EXTRACT_OPERAND (CRS2S, l) + 8]);
break;
case 'U': /* RS1, constrained to equal RD. */
- print (info->stream, "%s", riscv_gpr_names[rd]);
+ print (info->stream, dis_style_register,
+ "%s", riscv_gpr_names[rd]);
break;
case 'c': /* RS1, constrained to equal sp. */
- print (info->stream, "%s", riscv_gpr_names[X_SP]);
+ print (info->stream, dis_style_register, "%s",
+ riscv_gpr_names[X_SP]);
break;
case 'V': /* RS2 */
- print (info->stream, "%s",
+ print (info->stream, dis_style_register, "%s",
riscv_gpr_names[EXTRACT_OPERAND (CRS2, l)]);
break;
case 'o':
@@ -236,31 +238,40 @@ print_insn_args (const char *oparg, insn_t l, bfd_vma pc, disassemble_info *info
if (info->mach == bfd_mach_riscv64
&& ((l & MASK_C_ADDIW) == MATCH_C_ADDIW) && rd != 0)
maybe_print_address (pd, rd, EXTRACT_CITYPE_IMM (l), 1);
- print (info->stream, "%d", (int)EXTRACT_CITYPE_IMM (l));
+ print (info->stream, dis_style_immediate, "%d",
+ (int)EXTRACT_CITYPE_IMM (l));
break;
case 'k':
- print (info->stream, "%d", (int)EXTRACT_CLTYPE_LW_IMM (l));
+ print (info->stream, dis_style_address_offset, "%d",
+ (int)EXTRACT_CLTYPE_LW_IMM (l));
break;
case 'l':
- print (info->stream, "%d", (int)EXTRACT_CLTYPE_LD_IMM (l));
+ print (info->stream, dis_style_address_offset, "%d",
+ (int)EXTRACT_CLTYPE_LD_IMM (l));
break;
case 'm':
- print (info->stream, "%d", (int)EXTRACT_CITYPE_LWSP_IMM (l));
+ print (info->stream, dis_style_address_offset, "%d",
+ (int)EXTRACT_CITYPE_LWSP_IMM (l));
break;
case 'n':
- print (info->stream, "%d", (int)EXTRACT_CITYPE_LDSP_IMM (l));
+ print (info->stream, dis_style_address_offset, "%d",
+ (int)EXTRACT_CITYPE_LDSP_IMM (l));
break;
case 'K':
- print (info->stream, "%d", (int)EXTRACT_CIWTYPE_ADDI4SPN_IMM (l));
+ print (info->stream, dis_style_immediate, "%d",
+ (int)EXTRACT_CIWTYPE_ADDI4SPN_IMM (l));
break;
case 'L':
- print (info->stream, "%d", (int)EXTRACT_CITYPE_ADDI16SP_IMM (l));
+ print (info->stream, dis_style_immediate, "%d",
+ (int)EXTRACT_CITYPE_ADDI16SP_IMM (l));
break;
case 'M':
- print (info->stream, "%d", (int)EXTRACT_CSSTYPE_SWSP_IMM (l));
+ print (info->stream, dis_style_address_offset, "%d",
+ (int)EXTRACT_CSSTYPE_SWSP_IMM (l));
break;
case 'N':
- print (info->stream, "%d", (int)EXTRACT_CSSTYPE_SDSP_IMM (l));
+ print (info->stream, dis_style_address_offset, "%d",
+ (int)EXTRACT_CSSTYPE_SDSP_IMM (l));
break;
case 'p':
info->target = EXTRACT_CBTYPE_IMM (l) + pc;
@@ -271,21 +282,23 @@ print_insn_args (const char *oparg, insn_t l, bfd_vma pc, disassemble_info *info
(*info->print_address_func) (info->target, info);
break;
case 'u':
- print (info->stream, "0x%x",
+ print (info->stream, dis_style_immediate, "0x%x",
(int)(EXTRACT_CITYPE_IMM (l) & (RISCV_BIGIMM_REACH-1)));
break;
case '>':
- print (info->stream, "0x%x", (int)EXTRACT_CITYPE_IMM (l) & 0x3f);
+ print (info->stream, dis_style_immediate, "0x%x",
+ (int)EXTRACT_CITYPE_IMM (l) & 0x3f);
break;
case '<':
- print (info->stream, "0x%x", (int)EXTRACT_CITYPE_IMM (l) & 0x1f);
+ print (info->stream, dis_style_immediate, "0x%x",
+ (int)EXTRACT_CITYPE_IMM (l) & 0x1f);
break;
case 'T': /* Floating-point RS2. */
- print (info->stream, "%s",
+ print (info->stream, dis_style_register, "%s",
riscv_fpr_names[EXTRACT_OPERAND (CRS2, l)]);
break;
case 'D': /* Floating-point RS2 x8-x15. */
- print (info->stream, "%s",
+ print (info->stream, dis_style_register, "%s",
riscv_fpr_names[EXTRACT_OPERAND (CRS2S, l) + 8]);
break;
}
@@ -296,28 +309,30 @@ print_insn_args (const char *oparg, insn_t l, bfd_vma pc, disassemble_info *info
{
case 'd':
case 'f':
- print (info->stream, "%s",
+ print (info->stream, dis_style_register, "%s",
riscv_vecr_names_numeric[EXTRACT_OPERAND (VD, l)]);
break;
case 'e':
if (!EXTRACT_OPERAND (VWD, l))
- print (info->stream, "%s", riscv_gpr_names[0]);
+ print (info->stream, dis_style_register, "%s",
+ riscv_gpr_names[0]);
else
- print (info->stream, "%s",
+ print (info->stream, dis_style_register, "%s",
riscv_vecr_names_numeric[EXTRACT_OPERAND (VD, l)]);
break;
case 's':
- print (info->stream, "%s",
+ print (info->stream, dis_style_register, "%s",
riscv_vecr_names_numeric[EXTRACT_OPERAND (VS1, l)]);
break;
case 't':
case 'u': /* VS1 == VS2 already verified at this point. */
case 'v': /* VD == VS1 == VS2 already verified at this point. */
- print (info->stream, "%s",
+ print (info->stream, dis_style_register, "%s",
riscv_vecr_names_numeric[EXTRACT_OPERAND (VS2, l)]);
break;
case '0':
- print (info->stream, "%s", riscv_vecr_names_numeric[0]);
+ print (info->stream, dis_style_register, "%s",
+ riscv_vecr_names_numeric[0]);
break;
case 'b':
case 'c':
@@ -337,25 +352,30 @@ print_insn_args (const char *oparg, insn_t l, bfd_vma pc, disassemble_info *info
&& !imm_vtype_res
&& riscv_vsew[imm_vsew] != NULL
&& riscv_vlmul[imm_vlmul] != NULL)
- print (info->stream, "%s,%s,%s,%s", riscv_vsew[imm_vsew],
+ print (info->stream, dis_style_text, "%s,%s,%s,%s",
+ riscv_vsew[imm_vsew],
riscv_vlmul[imm_vlmul], riscv_vta[imm_vta],
riscv_vma[imm_vma]);
else
- print (info->stream, "%d", imm);
+ print (info->stream, dis_style_immediate, "%d", imm);
}
break;
case 'i':
- print (info->stream, "%d", (int)EXTRACT_RVV_VI_IMM (l));
+ print (info->stream, dis_style_immediate, "%d",
+ (int)EXTRACT_RVV_VI_IMM (l));
break;
case 'j':
- print (info->stream, "%d", (int)EXTRACT_RVV_VI_UIMM (l));
+ print (info->stream, dis_style_immediate, "%d",
+ (int)EXTRACT_RVV_VI_UIMM (l));
break;
case 'k':
- print (info->stream, "%d", (int)EXTRACT_RVV_OFFSET (l));
+ print (info->stream, dis_style_immediate, "%d",
+ (int)EXTRACT_RVV_OFFSET (l));
break;
case 'm':
if (! EXTRACT_OPERAND (VMASK, l))
- print (info->stream, ",%s", riscv_vecm_names_numeric[0]);
+ print (info->stream, dis_style_register, ",%s",
+ riscv_vecm_names_numeric[0]);
break;
}
break;
@@ -365,29 +385,29 @@ print_insn_args (const char *oparg, insn_t l, bfd_vma pc, disassemble_info *info
case ')':
case '[':
case ']':
- print (info->stream, "%c", *oparg);
+ print (info->stream, dis_style_text, "%c", *oparg);
break;
case '0':
/* Only print constant 0 if it is the last argument. */
if (!oparg[1])
- print (info->stream, "0");
+ print (info->stream, dis_style_immediate, "0");
break;
case 'b':
case 's':
if ((l & MASK_JALR) == MATCH_JALR)
maybe_print_address (pd, rs1, 0, 0);
- print (info->stream, "%s", riscv_gpr_names[rs1]);
+ print (info->stream, dis_style_register, "%s", riscv_gpr_names[rs1]);
break;
case 't':
- print (info->stream, "%s",
+ print (info->stream, dis_style_register, "%s",
riscv_gpr_names[EXTRACT_OPERAND (RS2, l)]);
break;
case 'u':
- print (info->stream, "0x%x",
+ print (info->stream, dis_style_immediate, "0x%x",
(unsigned)EXTRACT_UTYPE_IMM (l) >> RISCV_IMM_BITS);
break;
@@ -416,12 +436,19 @@ print_insn_args (const char *oparg, insn_t l, bfd_vma pc, disassemble_info *info
if (info->mach == bfd_mach_riscv64
&& ((l & MASK_ADDIW) == MATCH_ADDIW) && rs1 != 0)
maybe_print_address (pd, rs1, EXTRACT_ITYPE_IMM (l), 1);
- print (info->stream, "%d", (int)EXTRACT_ITYPE_IMM (l));
+ print (info->stream, dis_style_immediate, "%d",
+ (int)EXTRACT_ITYPE_IMM (l));
break;
case 'q':
maybe_print_address (pd, rs1, EXTRACT_STYPE_IMM (l), 0);
- print (info->stream, "%d", (int)EXTRACT_STYPE_IMM (l));
+ print (info->stream, dis_style_address_offset, "%d",
+ (int)EXTRACT_STYPE_IMM (l));
+ break;
+
+ case 'f':
+ print (info->stream, dis_style_address_offset, "%d",
+ (int)EXTRACT_STYPE_IMM (l));
break;
case 'a':
@@ -441,40 +468,45 @@ print_insn_args (const char *oparg, insn_t l, bfd_vma pc, disassemble_info *info
pd->hi_addr[rd] = EXTRACT_UTYPE_IMM (l);
else if ((l & MASK_C_LUI) == MATCH_C_LUI)
pd->hi_addr[rd] = EXTRACT_CITYPE_LUI_IMM (l);
- print (info->stream, "%s", riscv_gpr_names[rd]);
+ print (info->stream, dis_style_register, "%s", riscv_gpr_names[rd]);
break;
case 'y':
- print (info->stream, "0x%x", (int)EXTRACT_OPERAND (BS, l));
+ print (info->stream, dis_style_text, "0x%x",
+ (int)EXTRACT_OPERAND (BS, l));
break;
case 'z':
- print (info->stream, "%s", riscv_gpr_names[0]);
+ print (info->stream, dis_style_register, "%s", riscv_gpr_names[0]);
break;
case '>':
- print (info->stream, "0x%x", (int)EXTRACT_OPERAND (SHAMT, l));
+ print (info->stream, dis_style_immediate, "0x%x",
+ (int)EXTRACT_OPERAND (SHAMT, l));
break;
case '<':
- print (info->stream, "0x%x", (int)EXTRACT_OPERAND (SHAMTW, l));
+ print (info->stream, dis_style_immediate, "0x%x",
+ (int)EXTRACT_OPERAND (SHAMTW, l));
break;
case 'S':
case 'U':
- print (info->stream, "%s", riscv_fpr_names[rs1]);
+ print (info->stream, dis_style_register, "%s", riscv_fpr_names[rs1]);
break;
case 'T':
- print (info->stream, "%s", riscv_fpr_names[EXTRACT_OPERAND (RS2, l)]);
+ print (info->stream, dis_style_register, "%s",
+ riscv_fpr_names[EXTRACT_OPERAND (RS2, l)]);
break;
case 'D':
- print (info->stream, "%s", riscv_fpr_names[rd]);
+ print (info->stream, dis_style_register, "%s", riscv_fpr_names[rd]);
break;
case 'R':
- print (info->stream, "%s", riscv_fpr_names[EXTRACT_OPERAND (RS3, l)]);
+ print (info->stream, dis_style_register, "%s",
+ riscv_fpr_names[EXTRACT_OPERAND (RS3, l)]);
break;
case 'E':
@@ -507,23 +539,25 @@ print_insn_args (const char *oparg, insn_t l, bfd_vma pc, disassemble_info *info
}
if (riscv_csr_hash[csr] != NULL)
- print (info->stream, "%s", riscv_csr_hash[csr]);
+ print (info->stream, dis_style_text, "%s", riscv_csr_hash[csr]);
else
- print (info->stream, "0x%x", csr);
+ print (info->stream, dis_style_text, "0x%x", csr);
break;
}
case 'Y':
- print (info->stream, "0x%x", (int)EXTRACT_OPERAND (RNUM, l));
+ print (info->stream, dis_style_text, "0x%x",
+ (int) EXTRACT_OPERAND (RNUM, l));
break;
case 'Z':
- print (info->stream, "%d", rs1);
+ print (info->stream, dis_style_text, "%d", rs1);
break;
default:
/* xgettext:c-format */
- print (info->stream, _("# internal error, undefined modifier (%c)"),
+ print (info->stream, dis_style_text,
+ _("# internal error, undefined modifier (%c)"),
*opargStart);
return;
}
@@ -623,14 +657,16 @@ riscv_disassemble_insn (bfd_vma memaddr, insn_t word, disassemble_info *info)
continue;
/* It's a match. */
- (*info->fprintf_func) (info->stream, "%s", op->name);
+ (*info->fprintf_styled_func) (info->stream, dis_style_mnemonic,
+ "%s", op->name);
print_insn_args (op->args, word, memaddr, info);
/* Try to disassemble multi-instruction addressing sequences. */
if (pd->print_addr != (bfd_vma)-1)
{
info->target = pd->print_addr;
- (*info->fprintf_func) (info->stream, " # ");
+ (*info->fprintf_styled_func)
+ (info->stream, dis_style_comment_start, " # ");
(*info->print_address_func) (info->target, info);
pd->print_addr = -1;
}
@@ -672,19 +708,24 @@ riscv_disassemble_insn (bfd_vma memaddr, insn_t word, disassemble_info *info)
case 2:
case 4:
case 8:
- (*info->fprintf_func) (info->stream, ".%dbyte\t0x%llx",
- insnlen, (unsigned long long) word);
+ (*info->fprintf_styled_func)
+ (info->stream, dis_style_assembler_directive, ".%dbyte\t", insnlen);
+ (*info->fprintf_styled_func) (info->stream, dis_style_immediate,
+ "0x%llx", (unsigned long long) word);
break;
default:
{
int i;
- (*info->fprintf_func) (info->stream, ".byte\t");
+ (*info->fprintf_styled_func)
+ (info->stream, dis_style_assembler_directive, ".byte\t");
for (i = 0; i < insnlen; ++i)
{
if (i > 0)
- (*info->fprintf_func) (info->stream, ", ");
- (*info->fprintf_func) (info->stream, "0x%02x",
- (unsigned int) (word & 0xff));
+ (*info->fprintf_styled_func) (info->stream, dis_style_text,
+ ", ");
+ (*info->fprintf_styled_func) (info->stream, dis_style_immediate,
+ "0x%02x",
+ (unsigned int) (word & 0xff));
word >>= 8;
}
}
@@ -863,23 +904,35 @@ riscv_disassemble_data (bfd_vma memaddr ATTRIBUTE_UNUSED,
{
case 1:
info->bytes_per_line = 6;
- (*info->fprintf_func) (info->stream, ".byte\t0x%02llx",
- (unsigned long long) data);
+ (*info->fprintf_styled_func)
+ (info->stream, dis_style_assembler_directive, ".byte\t");
+ (*info->fprintf_styled_func)
+ (info->stream, dis_style_assembler_directive, "0x%02llx",
+ (unsigned long long) data);
break;
case 2:
info->bytes_per_line = 8;
- (*info->fprintf_func) (info->stream, ".short\t0x%04llx",
- (unsigned long long) data);
+ (*info->fprintf_styled_func)
+ (info->stream, dis_style_assembler_directive, ".short\t");
+ (*info->fprintf_styled_func)
+ (info->stream, dis_style_immediate, "0x%04llx",
+ (unsigned long long) data);
break;
case 4:
info->bytes_per_line = 8;
- (*info->fprintf_func) (info->stream, ".word\t0x%08llx",
- (unsigned long long) data);
+ (*info->fprintf_styled_func)
+ (info->stream, dis_style_assembler_directive, ".word\t");
+ (*info->fprintf_styled_func)
+ (info->stream, dis_style_immediate, "0x%08llx",
+ (unsigned long long) data);
break;
case 8:
info->bytes_per_line = 8;
- (*info->fprintf_func) (info->stream, ".dword\t0x%016llx",
- (unsigned long long) data);
+ (*info->fprintf_styled_func)
+ (info->stream, dis_style_assembler_directive, ".dword\t");
+ (*info->fprintf_styled_func)
+ (info->stream, dis_style_immediate, "0x%016llx",
+ (unsigned long long) data);
break;
default:
abort ();
@@ -949,24 +1002,20 @@ riscv_get_disassembler (bfd *abfd)
{
const char *default_arch = "rv64gc";
- if (abfd)
+ if (abfd && bfd_get_flavour (abfd) == bfd_target_elf_flavour)
{
- const struct elf_backend_data *ebd = get_elf_backend_data (abfd);
- if (ebd)
+ const char *sec_name = get_elf_backend_data (abfd)->obj_attrs_section;
+ if (bfd_get_section_by_name (abfd, sec_name) != NULL)
{
- const char *sec_name = ebd->obj_attrs_section;
- if (bfd_get_section_by_name (abfd, sec_name) != NULL)
- {
- obj_attribute *attr = elf_known_obj_attributes_proc (abfd);
- unsigned int Tag_a = Tag_RISCV_priv_spec;
- unsigned int Tag_b = Tag_RISCV_priv_spec_minor;
- unsigned int Tag_c = Tag_RISCV_priv_spec_revision;
- riscv_get_priv_spec_class_from_numbers (attr[Tag_a].i,
- attr[Tag_b].i,
- attr[Tag_c].i,
- &default_priv_spec);
- default_arch = attr[Tag_RISCV_arch].s;
- }
+ obj_attribute *attr = elf_known_obj_attributes_proc (abfd);
+ unsigned int Tag_a = Tag_RISCV_priv_spec;
+ unsigned int Tag_b = Tag_RISCV_priv_spec_minor;
+ unsigned int Tag_c = Tag_RISCV_priv_spec_revision;
+ riscv_get_priv_spec_class_from_numbers (attr[Tag_a].i,
+ attr[Tag_b].i,
+ attr[Tag_c].i,
+ &default_priv_spec);
+ default_arch = attr[Tag_RISCV_arch].s;
}
}
diff --git a/opcodes/riscv-opc.c b/opcodes/riscv-opc.c
index 2da0f7cf0a4..00108ff24ae 100644
--- a/opcodes/riscv-opc.c
+++ b/opcodes/riscv-opc.c
@@ -388,6 +388,9 @@ const struct riscv_opcode riscv_opcodes[] =
{"lw", 0, INSN_CLASS_I, "d,o(s)", MATCH_LW, MASK_LW, match_opcode, INSN_DREF|INSN_4_BYTE },
{"lw", 0, INSN_CLASS_I, "d,A", 0, (int) M_LW, match_never, INSN_MACRO },
{"not", 0, INSN_CLASS_I, "d,s", MATCH_XORI|MASK_IMM, MASK_XORI|MASK_IMM, match_opcode, INSN_ALIAS },
+{"prefetch.i", 0, INSN_CLASS_ZICBOP, "f(s)", MATCH_PREFETCH_I, MASK_PREFETCH_I, match_opcode, 0 },
+{"prefetch.r", 0, INSN_CLASS_ZICBOP, "f(s)", MATCH_PREFETCH_R, MASK_PREFETCH_R, match_opcode, 0 },
+{"prefetch.w", 0, INSN_CLASS_ZICBOP, "f(s)", MATCH_PREFETCH_W, MASK_PREFETCH_W, match_opcode, 0 },
{"ori", 0, INSN_CLASS_I, "d,s,j", MATCH_ORI, MASK_ORI, match_opcode, 0 },
{"or", 0, INSN_CLASS_C, "Cs,Cw,Ct", MATCH_C_OR, MASK_C_OR, match_opcode, INSN_ALIAS },
{"or", 0, INSN_CLASS_C, "Cs,Ct,Cw", MATCH_C_OR, MASK_C_OR, match_opcode, INSN_ALIAS },
@@ -630,7 +633,7 @@ const struct riscv_opcode riscv_opcodes[] =
{"fcvt.wu.s", 0, INSN_CLASS_F_OR_ZFINX, "d,S,m", MATCH_FCVT_WU_S, MASK_FCVT_WU_S, match_opcode, 0 },
{"fcvt.s.w", 0, INSN_CLASS_F_OR_ZFINX, "D,s", MATCH_FCVT_S_W|MASK_RM, MASK_FCVT_S_W|MASK_RM, match_opcode, 0 },
{"fcvt.s.w", 0, INSN_CLASS_F_OR_ZFINX, "D,s,m", MATCH_FCVT_S_W, MASK_FCVT_S_W, match_opcode, 0 },
-{"fcvt.s.wu", 0, INSN_CLASS_F_OR_ZFINX, "D,s", MATCH_FCVT_S_WU|MASK_RM, MASK_FCVT_S_W|MASK_RM, match_opcode, 0 },
+{"fcvt.s.wu", 0, INSN_CLASS_F_OR_ZFINX, "D,s", MATCH_FCVT_S_WU|MASK_RM, MASK_FCVT_S_WU|MASK_RM, match_opcode, 0 },
{"fcvt.s.wu", 0, INSN_CLASS_F_OR_ZFINX, "D,s,m", MATCH_FCVT_S_WU, MASK_FCVT_S_WU, match_opcode, 0 },
{"fclass.s", 0, INSN_CLASS_F_OR_ZFINX, "d,S", MATCH_FCLASS_S, MASK_FCLASS_S, match_opcode, 0 },
{"feq.s", 0, INSN_CLASS_F_OR_ZFINX, "d,S,T", MATCH_FEQ_S, MASK_FEQ_S, match_opcode, 0 },
@@ -644,7 +647,7 @@ const struct riscv_opcode riscv_opcodes[] =
{"fcvt.lu.s", 64, INSN_CLASS_F_OR_ZFINX, "d,S,m", MATCH_FCVT_LU_S, MASK_FCVT_LU_S, match_opcode, 0 },
{"fcvt.s.l", 64, INSN_CLASS_F_OR_ZFINX, "D,s", MATCH_FCVT_S_L|MASK_RM, MASK_FCVT_S_L|MASK_RM, match_opcode, 0 },
{"fcvt.s.l", 64, INSN_CLASS_F_OR_ZFINX, "D,s,m", MATCH_FCVT_S_L, MASK_FCVT_S_L, match_opcode, 0 },
-{"fcvt.s.lu", 64, INSN_CLASS_F_OR_ZFINX, "D,s", MATCH_FCVT_S_LU|MASK_RM, MASK_FCVT_S_L|MASK_RM, match_opcode, 0 },
+{"fcvt.s.lu", 64, INSN_CLASS_F_OR_ZFINX, "D,s", MATCH_FCVT_S_LU|MASK_RM, MASK_FCVT_S_LU|MASK_RM, match_opcode, 0 },
{"fcvt.s.lu", 64, INSN_CLASS_F_OR_ZFINX, "D,s,m", MATCH_FCVT_S_LU, MASK_FCVT_S_LU, match_opcode, 0 },
/* Double-precision floating-point instruction subset. */
@@ -705,7 +708,7 @@ const struct riscv_opcode riscv_opcodes[] =
{"fcvt.lu.d", 64, INSN_CLASS_D_OR_ZDINX, "d,S,m", MATCH_FCVT_LU_D, MASK_FCVT_LU_D, match_opcode, 0 },
{"fcvt.d.l", 64, INSN_CLASS_D_OR_ZDINX, "D,s", MATCH_FCVT_D_L|MASK_RM, MASK_FCVT_D_L|MASK_RM, match_opcode, 0 },
{"fcvt.d.l", 64, INSN_CLASS_D_OR_ZDINX, "D,s,m", MATCH_FCVT_D_L, MASK_FCVT_D_L, match_opcode, 0 },
-{"fcvt.d.lu", 64, INSN_CLASS_D_OR_ZDINX, "D,s", MATCH_FCVT_D_LU|MASK_RM, MASK_FCVT_D_L|MASK_RM, match_opcode, 0 },
+{"fcvt.d.lu", 64, INSN_CLASS_D_OR_ZDINX, "D,s", MATCH_FCVT_D_LU|MASK_RM, MASK_FCVT_D_LU|MASK_RM, match_opcode, 0 },
{"fcvt.d.lu", 64, INSN_CLASS_D_OR_ZDINX, "D,s,m", MATCH_FCVT_D_LU, MASK_FCVT_D_LU, match_opcode, 0 },
/* Quad-precision floating-point instruction subset. */
@@ -763,9 +766,9 @@ const struct riscv_opcode riscv_opcodes[] =
{"fcvt.l.q", 64, INSN_CLASS_Q_OR_ZQINX, "d,S,m", MATCH_FCVT_L_Q, MASK_FCVT_L_Q, match_opcode, 0 },
{"fcvt.lu.q", 64, INSN_CLASS_Q_OR_ZQINX, "d,S", MATCH_FCVT_LU_Q|MASK_RM, MASK_FCVT_LU_Q|MASK_RM, match_opcode, 0 },
{"fcvt.lu.q", 64, INSN_CLASS_Q_OR_ZQINX, "d,S,m", MATCH_FCVT_LU_Q, MASK_FCVT_LU_Q, match_opcode, 0 },
-{"fcvt.q.l", 64, INSN_CLASS_Q_OR_ZQINX, "D,s", MATCH_FCVT_Q_L|MASK_RM, MASK_FCVT_Q_L|MASK_RM, match_opcode, 0 },
+{"fcvt.q.l", 64, INSN_CLASS_Q_OR_ZQINX, "D,s", MATCH_FCVT_Q_L, MASK_FCVT_Q_L|MASK_RM, match_opcode, 0 },
{"fcvt.q.l", 64, INSN_CLASS_Q_OR_ZQINX, "D,s,m", MATCH_FCVT_Q_L, MASK_FCVT_Q_L, match_opcode, 0 },
-{"fcvt.q.lu", 64, INSN_CLASS_Q_OR_ZQINX, "D,s", MATCH_FCVT_Q_LU|MASK_RM, MASK_FCVT_Q_L|MASK_RM, match_opcode, 0 },
+{"fcvt.q.lu", 64, INSN_CLASS_Q_OR_ZQINX, "D,s", MATCH_FCVT_Q_LU, MASK_FCVT_Q_LU|MASK_RM, match_opcode, 0 },
{"fcvt.q.lu", 64, INSN_CLASS_Q_OR_ZQINX, "D,s,m", MATCH_FCVT_Q_LU, MASK_FCVT_Q_LU, match_opcode, 0 },
/* Compressed instructions. */
@@ -849,6 +852,12 @@ const struct riscv_opcode riscv_opcodes[] =
{"sfence.vma", 0, INSN_CLASS_I, "s,t", MATCH_SFENCE_VMA, MASK_SFENCE_VMA, match_opcode, 0 },
{"wfi", 0, INSN_CLASS_I, "", MATCH_WFI, MASK_WFI, match_opcode, 0 },
+/* Zicbom and Zicboz instructions. */
+{"cbo.clean", 0, INSN_CLASS_ZICBOM, "0(s)", MATCH_CBO_CLEAN, MASK_CBO_CLEAN, match_opcode, 0 },
+{"cbo.flush", 0, INSN_CLASS_ZICBOM, "0(s)", MATCH_CBO_FLUSH, MASK_CBO_FLUSH, match_opcode, 0 },
+{"cbo.inval", 0, INSN_CLASS_ZICBOM, "0(s)", MATCH_CBO_INVAL, MASK_CBO_INVAL, match_opcode, 0 },
+{"cbo.zero", 0, INSN_CLASS_ZICBOZ, "0(s)", MATCH_CBO_ZERO, MASK_CBO_ZERO, match_opcode, 0 },
+
/* Zbb or zbkb instructions. */
{"clz", 0, INSN_CLASS_ZBB, "d,s", MATCH_CLZ, MASK_CLZ, match_opcode, 0 },
{"ctz", 0, INSN_CLASS_ZBB, "d,s", MATCH_CTZ, MASK_CTZ, match_opcode, 0 },
diff --git a/opcodes/rl78-dis.c b/opcodes/rl78-dis.c
index cc08a298688..2d7ffb26eba 100644
--- a/opcodes/rl78-dis.c
+++ b/opcodes/rl78-dis.c
@@ -408,7 +408,7 @@ rl78_get_disassembler (bfd *abfd)
{
int cpu = E_FLAG_RL78_ANY_CPU;
- if (abfd != NULL)
+ if (abfd != NULL && bfd_get_flavour (abfd) == bfd_target_elf_flavour)
cpu = abfd->tdata.elf_obj_data->elf_header->e_flags & E_FLAG_RL78_CPU_MASK;
switch (cpu)
diff --git a/opcodes/s390-mkopc.c b/opcodes/s390-mkopc.c
index 9fb67847b80..c795895f48c 100644
--- a/opcodes/s390-mkopc.c
+++ b/opcodes/s390-mkopc.c
@@ -381,7 +381,8 @@ main (void)
else if (strcmp (cpu_string, "z15") == 0
|| strcmp (cpu_string, "arch13") == 0)
min_cpu = S390_OPCODE_ARCH13;
- else if (strcmp (cpu_string, "arch14") == 0)
+ else if (strcmp (cpu_string, "z16") == 0
+ || strcmp (cpu_string, "arch14") == 0)
min_cpu = S390_OPCODE_ARCH14;
else {
fprintf (stderr, "Couldn't parse cpu string %s\n", cpu_string);
diff --git a/opcodes/s390-opc.c b/opcodes/s390-opc.c
index fbb8b195bcd..18eb948fa96 100644
--- a/opcodes/s390-opc.c
+++ b/opcodes/s390-opc.c
@@ -362,6 +362,7 @@ const struct s390_operand s390_operands[] =
#define INSTR_RRF_RURR2 4, { R_24,R_16,R_28,U4_20,0,0 } /* e.g. lptea */
#define INSTR_RRF_R0RR 4, { R_24,R_16,R_28,0,0,0 } /* e.g. idte */
#define INSTR_RRF_R0RR2 4, { R_24,R_28,R_16,0,0,0 } /* e.g. ark */
+#define INSTR_RRF_R0RER 4, { RE_24,R_28,R_16,0,0,0 } /* e.g. mgrk */
#define INSTR_RRF_R0RR3 4, { R_24,R_28,R_16,0,0,0 } /* e.g. selrz */
#define INSTR_RRF_U0FF 4, { F_24,U4_16,F_28,0,0,0 } /* e.g. fidbr */
#define INSTR_RRF_U0FEFE 4, { FE_24,U4_16,FE_28,0,0,0 } /* e.g. fixbr */
@@ -585,6 +586,7 @@ const struct s390_operand s390_operands[] =
#define MASK_RRF_RURR2 { 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }
#define MASK_RRF_R0RR { 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }
#define MASK_RRF_R0RR2 { 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }
+#define MASK_RRF_R0RER { 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }
#define MASK_RRF_R0RR3 { 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00 }
#define MASK_RRF_U0FF { 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00 }
#define MASK_RRF_U0FEFE { 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00 }
diff --git a/opcodes/s390-opc.txt b/opcodes/s390-opc.txt
index e756e7848e1..931122586ef 100644
--- a/opcodes/s390-opc.txt
+++ b/opcodes/s390-opc.txt
@@ -1851,8 +1851,8 @@ e30000000038 agh RXY_RRRD "add halfword to 64 bit value" arch12 zarch
e30000000047 bic RXY_URRD "branch indirect on condition" arch12 zarch
e3f000000047 bi RXY_0RRD "unconditional indirect branch" arch12 zarch
e30000000047 bi*8 RXY_0RRD "branch indirect on condition" arch12 zarch
-b9ec mgrk RRF_R0RR2 "multiply 64x64reg -> 128" arch12 zarch
-e30000000084 mg RXY_RRRD "multiply 64x64mem -> 128" arch12 zarch
+b9ec mgrk RRF_R0RER "multiply 64x64reg -> 128" arch12 zarch
+e30000000084 mg RXY_RERRD "multiply 64x64mem -> 128" arch12 zarch
e3000000003c mgh RXY_RRRD "multiply halfword 64x16mem -> 64" arch12 zarch
b9fd msrkc RRF_R0RR2 "multiply single 32x32 -> 32" arch12 zarch
b9ed msgrkc RRF_R0RR2 "multiply single 64x64 -> 64" arch12 zarch
diff --git a/opcodes/stamp-h.in b/opcodes/stamp-h.in
deleted file mode 100644
index 9788f70238c..00000000000
--- a/opcodes/stamp-h.in
+++ /dev/null
@@ -1 +0,0 @@
-timestamp
diff --git a/readline/readline/callback.c b/readline/readline/callback.c
index a466cf9b6ef..58b84d2e2ad 100644
--- a/readline/readline/callback.c
+++ b/readline/readline/callback.c
@@ -1,6 +1,6 @@
/* callback.c -- functions to use readline as an X `callback' mechanism. */
-/* Copyright (C) 1987-2017 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2022 Free Software Foundation, Inc.
This file is part of the GNU Readline Library (Readline), a library
for reading lines of text with interactive input and history editing.
@@ -136,6 +136,8 @@ rl_callback_read_char (void)
abort ();
}
+ eof = 0;
+
memcpy ((void *)olevel, (void *)_rl_top_level, sizeof (procenv_t));
#if defined (HAVE_POSIX_SIGSETJMP)
jcode = sigsetjmp (_rl_top_level, 0);
@@ -268,6 +270,10 @@ rl_callback_read_char (void)
_rl_want_redisplay = 0;
}
+ /* Make sure application hooks can see whether we saw EOF. */
+ if (rl_eof_found = eof)
+ RL_SETSTATE(RL_STATE_EOF);
+
if (rl_done)
{
line = readline_internal_teardown (eof);
diff --git a/readline/readline/doc/rltech.texi b/readline/readline/doc/rltech.texi
index bbf57c239c9..797e34d95e0 100644
--- a/readline/readline/doc/rltech.texi
+++ b/readline/readline/doc/rltech.texi
@@ -323,6 +323,14 @@ and point define a @emph{region}.
@deftypevar int rl_done
Setting this to a non-zero value causes Readline to return the current
line immediately.
+Readline will set this variable when it has read a key sequence bound
+to @code{accept-line} and is about to return the line to the caller.
+@end deftypevar
+
+@deftypevar int rl_eof_found
+Readline will set this variable when it has read an EOF character (e.g., the
+stty @samp{EOF} character) on an empty line or encountered a read error and
+is about to return a NULL line to the caller.
@end deftypevar
@deftypevar int rl_num_chars_to_read
@@ -588,6 +596,9 @@ the current call to @code{readline()}.
@item RL_STATE_DONE
Readline has read a key sequence bound to @code{accept-line}
and is about to return the line to the caller.
+@item RL_STATE_EOF
+Readline has read an EOF character (e.g., the stty @samp{EOF} character)
+or encountered a read error and is about to return a NULL line to the caller.
@end table
@end deftypevar
diff --git a/readline/readline/readline.c b/readline/readline/readline.c
index e61d188bbe9..0e33587f234 100644
--- a/readline/readline/readline.c
+++ b/readline/readline/readline.c
@@ -1,7 +1,7 @@
/* readline.c -- a general facility for reading lines of input
with emacs style editing and completion. */
-/* Copyright (C) 1987-2020 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2022 Free Software Foundation, Inc.
This file is part of the GNU Readline Library (Readline), a library
for reading lines of text with interactive input and history editing.
@@ -165,6 +165,9 @@ int rl_end;
/* Make this non-zero to return the current input_line. */
int rl_done;
+/* If non-zero when readline_internal returns, it means we found EOF */
+int rl_eof_found = 0;
+
/* The last function executed by readline. */
rl_command_func_t *rl_last_func = (rl_command_func_t *)NULL;
@@ -218,9 +221,6 @@ int _rl_eof_char = CTRL ('D');
/* Non-zero makes this the next keystroke to read. */
int rl_pending_input = 0;
-/* If non-zero when readline_internal returns, it means we found EOF */
-int _rl_eof_found = 0;
-
/* Pointer to a useful terminal name. */
const char *rl_terminal_name = (const char *)NULL;
@@ -474,6 +474,9 @@ readline_internal_teardown (int eof)
RL_CHECK_SIGNALS ();
+ if (eof)
+ RL_SETSTATE (RL_STATE_EOF); /* XXX */
+
/* Restore the original of this history line, iff the line that we
are editing was originally in the history, AND the line has changed. */
entry = current_history ();
@@ -596,6 +599,7 @@ readline_internal_charloop (void)
RL_SETSTATE(RL_STATE_DONE);
return (rl_done = 1);
#else
+ RL_SETSTATE(RL_STATE_EOF);
eof_found = 1;
break;
#endif
@@ -636,6 +640,7 @@ readline_internal_charloop (void)
RL_SETSTATE(RL_STATE_DONE);
return (rl_done = 1);
#else
+ RL_SETSTATE(RL_STATE_EOF);
eof_found = 1;
break;
#endif
@@ -703,8 +708,8 @@ static char *
readline_internal (void)
{
readline_internal_setup ();
- _rl_eof_found = readline_internal_charloop ();
- return (readline_internal_teardown (_rl_eof_found));
+ rl_eof_found = readline_internal_charloop ();
+ return (readline_internal_teardown (rl_eof_found));
}
void
@@ -1161,7 +1166,7 @@ rl_initialize (void)
/* We aren't done yet. We haven't even gotten started yet! */
rl_done = 0;
- RL_UNSETSTATE(RL_STATE_DONE);
+ RL_UNSETSTATE(RL_STATE_DONE|RL_STATE_EOF);
/* Tell the history routines what is going on. */
_rl_start_using_history ();
diff --git a/readline/readline/readline.h b/readline/readline/readline.h
index 78fa39d02a1..9f79810f290 100644
--- a/readline/readline/readline.h
+++ b/readline/readline/readline.h
@@ -1,6 +1,6 @@
/* Readline.h -- the names of functions callable from within readline. */
-/* Copyright (C) 1987-2020 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2022 Free Software Foundation, Inc.
This file is part of the GNU Readline Library (Readline), a library
for reading lines of text with interactive input and history editing.
@@ -553,6 +553,10 @@ extern int rl_mark;
line and should return it. */
extern int rl_done;
+/* Flag to indicate that readline has read an EOF character or read has
+ returned 0 or error, and is returning a NULL line as a result. */
+extern int rl_eof_found;
+
/* If set to a character value, that will be the next keystroke read. */
extern int rl_pending_input;
@@ -906,6 +910,8 @@ extern int rl_persistent_signal_handlers;
#define RL_STATE_REDISPLAYING 0x1000000 /* updating terminal display */
#define RL_STATE_DONE 0x2000000 /* done; accepted line */
+#define RL_STATE_EOF 0x8000000 /* done; got eof on read */
+
#define RL_SETSTATE(x) (rl_readline_state |= (x))
#define RL_UNSETSTATE(x) (rl_readline_state &= ~(x))
diff --git a/readline/readline/rlprivate.h b/readline/readline/rlprivate.h
index 23ab2d8cec0..02838ae21ae 100644
--- a/readline/readline/rlprivate.h
+++ b/readline/readline/rlprivate.h
@@ -544,7 +544,6 @@ extern FILE *_rl_in_stream;
extern FILE *_rl_out_stream;
extern int _rl_last_command_was_kill;
extern int _rl_eof_char;
-extern int _rl_eof_found;
extern procenv_t _rl_top_level;
extern _rl_keyseq_cxt *_rl_kscxt;
extern int _rl_keyseq_timeout;
diff --git a/readline/readline/rltty.c b/readline/readline/rltty.c
index d0cd572713a..11997b7c9d8 100644
--- a/readline/readline/rltty.c
+++ b/readline/readline/rltty.c
@@ -1,7 +1,7 @@
/* rltty.c -- functions to prepare and restore the terminal for readline's
use. */
-/* Copyright (C) 1992-2017 Free Software Foundation, Inc.
+/* Copyright (C) 1992-2022 Free Software Foundation, Inc.
This file is part of the GNU Readline Library (Readline), a library
for reading lines of text with interactive input and history editing.
@@ -692,7 +692,7 @@ rl_deprep_terminal (void)
if (terminal_prepped & TPX_BRACKPASTE)
{
fprintf (rl_outstream, BRACK_PASTE_FINI);
- if (_rl_eof_found)
+ if (rl_eof_found)
fprintf (rl_outstream, "\n");
}
diff --git a/sim/Makefile.in b/sim/Makefile.in
index 8b208e03443..dbbaa84224a 100644
--- a/sim/Makefile.in
+++ b/sim/Makefile.in
@@ -1,7 +1,7 @@
# Makefile.in generated by automake 1.15.1 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2022 Free Software Foundation, Inc.
+# Copyright (C) 1994-2017 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -14,7 +14,7 @@
@SET_MAKE@
-# Copyright (C) 1993-2021 Free Software Foundation, Inc.
+# Copyright (C) 1993-2022 Free Software Foundation, Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -199,16 +199,23 @@ am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
configure.lineno config.status.lineno
mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs
CONFIG_HEADER = config.h
-CONFIG_CLEAN_FILES = Make-common.sim aarch64/Makefile.sim \
- arm/Makefile.sim avr/Makefile.sim bfin/Makefile.sim \
- cr16/Makefile.sim cris/Makefile.sim d10v/Makefile.sim \
- frv/Makefile.sim ft32/Makefile.sim h8300/Makefile.sim \
- iq2000/Makefile.sim lm32/Makefile.sim m32c/Makefile.sim \
- m32r/Makefile.sim m68hc11/Makefile.sim mcore/Makefile.sim \
- microblaze/Makefile.sim moxie/Makefile.sim msp430/Makefile.sim \
- pru/Makefile.sim rl78/Makefile.sim rx/Makefile.sim \
- sh/Makefile.sim erc32/Makefile.sim \
- example-synacor/Makefile.sim arch-subdir.mk
+CONFIG_CLEAN_FILES = Make-common.sim aarch64/.gdbinit \
+ aarch64/Makefile.sim arm/.gdbinit arm/Makefile.sim \
+ avr/.gdbinit avr/Makefile.sim bfin/.gdbinit bfin/Makefile.sim \
+ cr16/.gdbinit cr16/Makefile.sim cris/.gdbinit \
+ cris/Makefile.sim d10v/.gdbinit d10v/Makefile.sim frv/.gdbinit \
+ frv/Makefile.sim ft32/.gdbinit ft32/Makefile.sim \
+ h8300/.gdbinit h8300/Makefile.sim iq2000/.gdbinit \
+ iq2000/Makefile.sim lm32/.gdbinit lm32/Makefile.sim \
+ m32c/.gdbinit m32c/Makefile.sim m32r/.gdbinit \
+ m32r/Makefile.sim m68hc11/.gdbinit m68hc11/Makefile.sim \
+ mcore/.gdbinit mcore/Makefile.sim microblaze/.gdbinit \
+ microblaze/Makefile.sim moxie/.gdbinit moxie/Makefile.sim \
+ msp430/.gdbinit msp430/Makefile.sim pru/.gdbinit \
+ pru/Makefile.sim rl78/.gdbinit rl78/Makefile.sim rx/.gdbinit \
+ rx/Makefile.sim sh/.gdbinit sh/Makefile.sim erc32/.gdbinit \
+ erc32/Makefile.sim example-synacor/.gdbinit \
+ example-synacor/Makefile.sim arch-subdir.mk .gdbinit
CONFIG_CLEAN_VPATH_FILES =
LIBRARIES = $(noinst_LIBRARIES)
ARFLAGS = cru
@@ -652,6 +659,7 @@ AMTAR = @AMTAR@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
AR = @AR@
AR_FOR_BUILD = @AR_FOR_BUILD@
+AS_FOR_TARGET = @AS_FOR_TARGET@
AS_FOR_TARGET_AARCH64 = @AS_FOR_TARGET_AARCH64@
AS_FOR_TARGET_ARM = @AS_FOR_TARGET_ARM@
AS_FOR_TARGET_AVR = @AS_FOR_TARGET_AVR@
@@ -693,6 +701,7 @@ CATOBJEXT = @CATOBJEXT@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CC_FOR_BUILD = @CC_FOR_BUILD@
+CC_FOR_TARGET = @CC_FOR_TARGET@
CC_FOR_TARGET_AARCH64 = @CC_FOR_TARGET_AARCH64@
CC_FOR_TARGET_ARM = @CC_FOR_TARGET_ARM@
CC_FOR_TARGET_AVR = @CC_FOR_TARGET_AVR@
@@ -757,6 +766,7 @@ INSTOBJEXT = @INSTOBJEXT@
LD = @LD@
LDFLAGS = @LDFLAGS@
LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@
+LD_FOR_TARGET = @LD_FOR_TARGET@
LD_FOR_TARGET_AARCH64 = @LD_FOR_TARGET_AARCH64@
LD_FOR_TARGET_ARM = @LD_FOR_TARGET_ARM@
LD_FOR_TARGET_AVR = @LD_FOR_TARGET_AVR@
@@ -1223,58 +1233,110 @@ distclean-hdr:
-rm -f config.h stamp-h1
Make-common.sim: $(top_builddir)/config.status $(top_srcdir)/common/Make-common.in
cd $(top_builddir) && $(SHELL) ./config.status $@
+aarch64/.gdbinit: $(top_builddir)/config.status $(top_srcdir)/common/gdbinit.in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
aarch64/Makefile.sim: $(top_builddir)/config.status $(top_srcdir)/aarch64/Makefile.in
cd $(top_builddir) && $(SHELL) ./config.status $@
+arm/.gdbinit: $(top_builddir)/config.status $(top_srcdir)/common/gdbinit.in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
arm/Makefile.sim: $(top_builddir)/config.status $(top_srcdir)/arm/Makefile.in
cd $(top_builddir) && $(SHELL) ./config.status $@
+avr/.gdbinit: $(top_builddir)/config.status $(top_srcdir)/common/gdbinit.in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
avr/Makefile.sim: $(top_builddir)/config.status $(top_srcdir)/avr/Makefile.in
cd $(top_builddir) && $(SHELL) ./config.status $@
+bfin/.gdbinit: $(top_builddir)/config.status $(top_srcdir)/common/gdbinit.in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
bfin/Makefile.sim: $(top_builddir)/config.status $(top_srcdir)/bfin/Makefile.in
cd $(top_builddir) && $(SHELL) ./config.status $@
+cr16/.gdbinit: $(top_builddir)/config.status $(top_srcdir)/common/gdbinit.in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
cr16/Makefile.sim: $(top_builddir)/config.status $(top_srcdir)/cr16/Makefile.in
cd $(top_builddir) && $(SHELL) ./config.status $@
+cris/.gdbinit: $(top_builddir)/config.status $(top_srcdir)/common/gdbinit.in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
cris/Makefile.sim: $(top_builddir)/config.status $(top_srcdir)/cris/Makefile.in
cd $(top_builddir) && $(SHELL) ./config.status $@
+d10v/.gdbinit: $(top_builddir)/config.status $(top_srcdir)/common/gdbinit.in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
d10v/Makefile.sim: $(top_builddir)/config.status $(top_srcdir)/d10v/Makefile.in
cd $(top_builddir) && $(SHELL) ./config.status $@
+frv/.gdbinit: $(top_builddir)/config.status $(top_srcdir)/common/gdbinit.in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
frv/Makefile.sim: $(top_builddir)/config.status $(top_srcdir)/frv/Makefile.in
cd $(top_builddir) && $(SHELL) ./config.status $@
+ft32/.gdbinit: $(top_builddir)/config.status $(top_srcdir)/common/gdbinit.in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
ft32/Makefile.sim: $(top_builddir)/config.status $(top_srcdir)/ft32/Makefile.in
cd $(top_builddir) && $(SHELL) ./config.status $@
+h8300/.gdbinit: $(top_builddir)/config.status $(top_srcdir)/common/gdbinit.in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
h8300/Makefile.sim: $(top_builddir)/config.status $(top_srcdir)/h8300/Makefile.in
cd $(top_builddir) && $(SHELL) ./config.status $@
+iq2000/.gdbinit: $(top_builddir)/config.status $(top_srcdir)/common/gdbinit.in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
iq2000/Makefile.sim: $(top_builddir)/config.status $(top_srcdir)/iq2000/Makefile.in
cd $(top_builddir) && $(SHELL) ./config.status $@
+lm32/.gdbinit: $(top_builddir)/config.status $(top_srcdir)/common/gdbinit.in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
lm32/Makefile.sim: $(top_builddir)/config.status $(top_srcdir)/lm32/Makefile.in
cd $(top_builddir) && $(SHELL) ./config.status $@
+m32c/.gdbinit: $(top_builddir)/config.status $(top_srcdir)/common/gdbinit.in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
m32c/Makefile.sim: $(top_builddir)/config.status $(top_srcdir)/m32c/Makefile.in
cd $(top_builddir) && $(SHELL) ./config.status $@
+m32r/.gdbinit: $(top_builddir)/config.status $(top_srcdir)/common/gdbinit.in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
m32r/Makefile.sim: $(top_builddir)/config.status $(top_srcdir)/m32r/Makefile.in
cd $(top_builddir) && $(SHELL) ./config.status $@
+m68hc11/.gdbinit: $(top_builddir)/config.status $(top_srcdir)/common/gdbinit.in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
m68hc11/Makefile.sim: $(top_builddir)/config.status $(top_srcdir)/m68hc11/Makefile.in
cd $(top_builddir) && $(SHELL) ./config.status $@
+mcore/.gdbinit: $(top_builddir)/config.status $(top_srcdir)/common/gdbinit.in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
mcore/Makefile.sim: $(top_builddir)/config.status $(top_srcdir)/mcore/Makefile.in
cd $(top_builddir) && $(SHELL) ./config.status $@
+microblaze/.gdbinit: $(top_builddir)/config.status $(top_srcdir)/common/gdbinit.in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
microblaze/Makefile.sim: $(top_builddir)/config.status $(top_srcdir)/microblaze/Makefile.in
cd $(top_builddir) && $(SHELL) ./config.status $@
+moxie/.gdbinit: $(top_builddir)/config.status $(top_srcdir)/common/gdbinit.in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
moxie/Makefile.sim: $(top_builddir)/config.status $(top_srcdir)/moxie/Makefile.in
cd $(top_builddir) && $(SHELL) ./config.status $@
+msp430/.gdbinit: $(top_builddir)/config.status $(top_srcdir)/common/gdbinit.in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
msp430/Makefile.sim: $(top_builddir)/config.status $(top_srcdir)/msp430/Makefile.in
cd $(top_builddir) && $(SHELL) ./config.status $@
+pru/.gdbinit: $(top_builddir)/config.status $(top_srcdir)/common/gdbinit.in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
pru/Makefile.sim: $(top_builddir)/config.status $(top_srcdir)/pru/Makefile.in
cd $(top_builddir) && $(SHELL) ./config.status $@
+rl78/.gdbinit: $(top_builddir)/config.status $(top_srcdir)/common/gdbinit.in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
rl78/Makefile.sim: $(top_builddir)/config.status $(top_srcdir)/rl78/Makefile.in
cd $(top_builddir) && $(SHELL) ./config.status $@
+rx/.gdbinit: $(top_builddir)/config.status $(top_srcdir)/common/gdbinit.in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
rx/Makefile.sim: $(top_builddir)/config.status $(top_srcdir)/rx/Makefile.in
cd $(top_builddir) && $(SHELL) ./config.status $@
+sh/.gdbinit: $(top_builddir)/config.status $(top_srcdir)/common/gdbinit.in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
sh/Makefile.sim: $(top_builddir)/config.status $(top_srcdir)/sh/Makefile.in
cd $(top_builddir) && $(SHELL) ./config.status $@
+erc32/.gdbinit: $(top_builddir)/config.status $(top_srcdir)/common/gdbinit.in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
erc32/Makefile.sim: $(top_builddir)/config.status $(top_srcdir)/erc32/Makefile.in
cd $(top_builddir) && $(SHELL) ./config.status $@
+example-synacor/.gdbinit: $(top_builddir)/config.status $(top_srcdir)/common/gdbinit.in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
example-synacor/Makefile.sim: $(top_builddir)/config.status $(top_srcdir)/example-synacor/Makefile.in
cd $(top_builddir) && $(SHELL) ./config.status $@
arch-subdir.mk: $(top_builddir)/config.status $(srcdir)/arch-subdir.mk.in
cd $(top_builddir) && $(SHELL) ./config.status $@
+.gdbinit: $(top_builddir)/config.status $(srcdir)/gdbinit.in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
clean-noinstLIBRARIES:
-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
diff --git a/sim/arm/wrapper.c b/sim/arm/wrapper.c
index ab56bc4e7b8..c97bae89dad 100644
--- a/sim/arm/wrapper.c
+++ b/sim/arm/wrapper.c
@@ -76,6 +76,19 @@ op_printf (char *buf, const char *fmt, ...)
return ret;
}
+static int ATTRIBUTE_PRINTF (3, 4)
+op_styled_printf (char *buf, enum disassembler_style style,
+ const char *fmt, ...)
+{
+ int ret;
+ va_list ap;
+
+ va_start (ap, fmt);
+ ret = vsprintf (opbuf + strlen (opbuf), fmt, ap);
+ va_end (ap);
+ return ret;
+}
+
static int
sim_dis_read (bfd_vma memaddr ATTRIBUTE_UNUSED,
bfd_byte * ptr,
@@ -321,7 +334,7 @@ sim_create_inferior (SIM_DESC sd ATTRIBUTE_UNUSED,
}
memset (& info, 0, sizeof (info));
- INIT_DISASSEMBLE_INFO (info, stdout, op_printf);
+ INIT_DISASSEMBLE_INFO (info, stdout, op_printf, op_styled_printf);
info.read_memory_func = sim_dis_read;
info.arch = bfd_get_arch (abfd);
info.mach = bfd_get_mach (abfd);
diff --git a/sim/bpf/configure b/sim/bpf/configure
index f44ea707755..bd22472d68c 100755
--- a/sim/bpf/configure
+++ b/sim/bpf/configure
@@ -587,7 +587,6 @@ LIBOBJS
SIM_COMMON_BUILD_FALSE
SIM_COMMON_BUILD_TRUE
sim_float
-cgen_breaks
target_alias
host_alias
build_alias
@@ -1734,17 +1733,10 @@ fi
fi
-cgen_breaks=""
-if grep CGEN_MAINT $srcdir/Makefile.in >/dev/null; then
-cgen_breaks="break cgen_rtx_error";
-fi
-
ac_config_files="$ac_config_files Makefile.sim:Makefile.in"
ac_config_files="$ac_config_files Make-common.sim:../common/Make-common.in"
-ac_config_files="$ac_config_files .gdbinit:../common/gdbinit.in"
-
ac_config_commands="$ac_config_commands Makefile"
ac_config_commands="$ac_config_commands stamp-h"
@@ -2469,7 +2461,6 @@ do
case $ac_config_target in
"Makefile.sim") CONFIG_FILES="$CONFIG_FILES Makefile.sim:Makefile.in" ;;
"Make-common.sim") CONFIG_FILES="$CONFIG_FILES Make-common.sim:../common/Make-common.in" ;;
- ".gdbinit") CONFIG_FILES="$CONFIG_FILES .gdbinit:../common/gdbinit.in" ;;
"Makefile") CONFIG_COMMANDS="$CONFIG_COMMANDS Makefile" ;;
"stamp-h") CONFIG_COMMANDS="$CONFIG_COMMANDS stamp-h" ;;
diff --git a/sim/common/Make-common.in b/sim/common/Make-common.in
index 57b45a7b427..74e5dad3049 100644
--- a/sim/common/Make-common.in
+++ b/sim/common/Make-common.in
@@ -250,7 +250,7 @@ RUNTESTFLAGS =
callback_h = $(srcroot)/include/sim/callback.h
remote_sim_h = $(srcroot)/include/sim/sim.h
-all: libsim.a run$(EXEEXT) .gdbinit
+all: libsim.a run$(EXEEXT)
libsim.a: $(LIB_OBJS)
$(SILENCE) rm -f libsim.a
@@ -504,7 +504,7 @@ mostlyclean clean: $(SIM_EXTRA_CLEAN)
distclean maintainer-clean realclean: clean $(SIM_EXTRA_DISTCLEAN)
rm -f TAGS
- rm -f Makefile config.cache config.log config.status .gdbinit
+ rm -f Makefile config.cache config.log config.status
.c.o:
$(COMPILE) $<
@@ -521,9 +521,6 @@ Makefile: Makefile.in $(srccom)/Make-common.in $(config.status)
@SIM_COMMON_BUILD_FALSE@config.status: configure
@SIM_COMMON_BUILD_FALSE@ $(ECHO_GEN) $(SHELL) ./config.status --recheck
-.gdbinit: # config.status $(srccom)/gdbinit.in
-@SIM_COMMON_BUILD_FALSE@ $(ECHO_GEN) CONFIG_FILES=$@:../common/gdbinit.in CONFIG_HEADERS= $(SHELL) ./config.status
-
# CGEN support
diff --git a/sim/common/cgen-trace.c b/sim/common/cgen-trace.c
index 149ea8a127c..12f6126d43f 100644
--- a/sim/common/cgen-trace.c
+++ b/sim/common/cgen-trace.c
@@ -320,6 +320,22 @@ sim_disasm_sprintf (SFILE *f, const char *format, ...)
return n;
}
+/* sprintf to a "stream" with styling. */
+
+int
+sim_disasm_styled_sprintf (SFILE *f, enum disassembler_style style,
+ const char *format, ...)
+{
+ int n;
+ va_list args;
+
+ va_start (args, format);
+ vsprintf (f->current, format, args);
+ f->current += n = strlen (f->current);
+ va_end (args);
+ return n;
+}
+
/* Memory read support for an opcodes disassembler. */
int
@@ -383,7 +399,8 @@ sim_cgen_disassemble_insn (SIM_CPU *cpu, const CGEN_INSN *insn,
sfile.buffer = sfile.current = buf;
INIT_DISASSEMBLE_INFO (disasm_info, (FILE *) &sfile,
- (fprintf_ftype) sim_disasm_sprintf);
+ (fprintf_ftype) sim_disasm_sprintf,
+ (fprintf_styled_ftype) sim_disasm_styled_sprintf);
disasm_info.endian =
(bfd_big_endian (STATE_PROG_BFD (sd)) ? BFD_ENDIAN_BIG
: bfd_little_endian (STATE_PROG_BFD (sd)) ? BFD_ENDIAN_LITTLE
diff --git a/sim/common/cgen-trace.h b/sim/common/cgen-trace.h
index 84b4935f148..3e2b4a9e9d7 100644
--- a/sim/common/cgen-trace.h
+++ b/sim/common/cgen-trace.h
@@ -78,6 +78,7 @@ typedef struct {
/* String printer for the disassembler. */
extern int sim_disasm_sprintf (SFILE *, const char *, ...) ATTRIBUTE_PRINTF_2;
+extern int sim_disasm_styled_sprintf (SFILE *, enum disassembler_style, const char *, ...) ATTRIBUTE_PRINTF_3;
/* For opcodes based disassemblers. */
#ifdef __BFD_H_SEEN__
diff --git a/sim/common/gdbinit.in b/sim/common/gdbinit.in
index ab9d7b3d548..79e7d29ea1b 100644
--- a/sim/common/gdbinit.in
+++ b/sim/common/gdbinit.in
@@ -1,12 +1,2 @@
-break sim_io_error
-break sim_core_signal
-@cgen_breaks@
-
-define dump
-set sim_debug_dump ()
-end
-
-document dump
-Dump cpu and simulator registers for debugging the simulator.
-Requires the simulator to provide function sim_debug_dump.
-end
+# Stub gdbinit for sim/$arch/ subdirs to load the common sim/.gdbinit.
+source ../.gdbinit
diff --git a/sim/common/sim-bits.h b/sim/common/sim-bits.h
index b1352d5a305..fab1dab478c 100644
--- a/sim/common/sim-bits.h
+++ b/sim/common/sim-bits.h
@@ -500,12 +500,17 @@ INLINE_SIM_BITS(unsigned_word) MSINSERTED (unsigned_word val, int start, int sto
#define EXTEND5(X) (LSSEXT ((X), 4))
#define EXTEND6(X) (LSSEXT ((X), 5))
#define EXTEND8(X) ((signed_word)(int8_t)(X))
+#define EXTEND9(X) (LSSEXT ((X), 8))
#define EXTEND11(X) (LSSEXT ((X), 10))
#define EXTEND12(X) (LSSEXT ((X), 11))
#define EXTEND15(X) (LSSEXT ((X), 14))
#define EXTEND16(X) ((signed_word)(int16_t)(X))
+#define EXTEND18(X) (LSSEXT ((X), 17))
+#define EXTEND19(X) (LSSEXT ((X), 18))
+#define EXTEND21(X) (LSSEXT ((X), 20))
#define EXTEND24(X) (LSSEXT ((X), 23))
#define EXTEND25(X) (LSSEXT ((X), 24))
+#define EXTEND26(X) (LSSEXT ((X), 25))
#define EXTEND32(X) ((signed_word)(int32_t)(X))
#define EXTEND64(X) ((signed_word)(int64_t)(X))
diff --git a/sim/common/sim-core.h b/sim/common/sim-core.h
index 5f152ee0552..df4e3e17a7b 100644
--- a/sim/common/sim-core.h
+++ b/sim/common/sim-core.h
@@ -248,7 +248,7 @@ extern void *sim_core_trans_addr
order (including xor endian). Should the transfer fail, the
operation shall abort (no return).
- ALIGNED assumes yhat the specified ADDRESS is correctly alligned
+ ALIGNED assumes that the specified ADDRESS is correctly aligned
for an N byte transfer (no alignment checks are made). Passing an
incorrectly aligned ADDRESS is erroneous.
@@ -256,7 +256,7 @@ extern void *sim_core_trans_addr
of an N byte transfer. Action, as defined by WITH_ALIGNMENT, being
taken should the check fail.
- MISSALIGNED transfers the data regardless.
+ MISALIGNED transfers the data regardless.
Misaligned xor-endian accesses are broken into a sequence of
transfers each <= WITH_XOR_ENDIAN bytes */
diff --git a/sim/common/sim-fpu.c b/sim/common/sim-fpu.c
index a05c57897ff..ccaff9c7661 100644
--- a/sim/common/sim-fpu.c
+++ b/sim/common/sim-fpu.c
@@ -198,11 +198,10 @@ pack_fpu (const sim_fpu *src,
/* Force fraction to correct class. */
fraction = src->fraction;
fraction >>= NR_GUARDS;
-#ifdef SIM_QUIET_NAN_NEGATED
- fraction |= QUIET_NAN - 1;
-#else
- fraction |= QUIET_NAN;
-#endif
+ if (sim_fpu_quiet_nan_inverted)
+ fraction |= QUIET_NAN - 1;
+ else
+ fraction |= QUIET_NAN;
break;
case sim_fpu_class_snan:
sign = src->sign;
@@ -210,11 +209,10 @@ pack_fpu (const sim_fpu *src,
/* Force fraction to correct class. */
fraction = src->fraction;
fraction >>= NR_GUARDS;
-#ifdef SIM_QUIET_NAN_NEGATED
- fraction |= QUIET_NAN;
-#else
- fraction &= ~QUIET_NAN;
-#endif
+ if (sim_fpu_quiet_nan_inverted)
+ fraction |= QUIET_NAN;
+ else
+ fraction &= ~QUIET_NAN;
break;
case sim_fpu_class_infinity:
sign = src->sign;
@@ -372,11 +370,10 @@ unpack_fpu (sim_fpu *dst, uint64_t packed, int is_double)
/* Non zero fraction, means NaN. */
dst->sign = sign;
dst->fraction = (fraction << NR_GUARDS);
-#ifdef SIM_QUIET_NAN_NEGATED
- qnan = (fraction & QUIET_NAN) == 0;
-#else
- qnan = fraction >= QUIET_NAN;
-#endif
+ if (sim_fpu_quiet_nan_inverted)
+ qnan = (fraction & QUIET_NAN) == 0;
+ else
+ qnan = fraction >= QUIET_NAN;
if (qnan)
dst->class = sim_fpu_class_qnan;
else
@@ -989,37 +986,58 @@ sim_fpu_round_64 (sim_fpu *f,
return do_round (f, 1, round, denorm);
}
-
-
-/* Arithmetic ops */
+/* NaN handling for binary operations. */
INLINE_SIM_FPU (int)
-sim_fpu_add (sim_fpu *f,
- const sim_fpu *l,
- const sim_fpu *r)
+sim_fpu_op_nan (sim_fpu *f, const sim_fpu *l, const sim_fpu *r)
{
- if (sim_fpu_is_snan (l))
+ if (sim_fpu_is_snan (l) || sim_fpu_is_snan (r))
{
- *f = *l;
+ *f = sim_fpu_is_snan (l) ? *l : *r;
f->class = sim_fpu_class_qnan;
return sim_fpu_status_invalid_snan;
}
- if (sim_fpu_is_snan (r))
- {
- *f = *r;
- f->class = sim_fpu_class_qnan;
- return sim_fpu_status_invalid_snan;
- }
- if (sim_fpu_is_qnan (l))
- {
- *f = *l;
- return 0;
- }
- if (sim_fpu_is_qnan (r))
+ ASSERT (sim_fpu_is_nan (l) || sim_fpu_is_nan (r));
+ if (sim_fpu_is_qnan (l))
+ *f = *l;
+ else /* if (sim_fpu_is_qnan (r)) */
+ *f = *r;
+ return 0;
+}
+
+/* NaN handling specific to min/max operations. */
+
+INLINE_SIM_FPU (int)
+sim_fpu_minmax_nan (sim_fpu *f, const sim_fpu *l, const sim_fpu *r)
+{
+ if (sim_fpu_is_snan (l)
+ || sim_fpu_is_snan (r)
+ || sim_fpu_is_ieee754_1985 ())
+ return sim_fpu_op_nan (f, l, r);
+ else
+ /* if sim_fpu_is_ieee754_2008()
+ && ((sim_fpu_is_qnan (l) || sim_fpu_is_qnan (r))) */
{
- *f = *r;
+ /* In IEEE754-2008:
+ "minNum/maxNum is ... the canonicalized number if one
+ operand is a number and the other a quiet NaN." */
+ if (sim_fpu_is_qnan (l))
+ *f = *r;
+ else /* if (sim_fpu_is_qnan (r)) */
+ *f = *l;
return 0;
}
+}
+
+/* Arithmetic ops */
+
+INLINE_SIM_FPU (int)
+sim_fpu_add (sim_fpu *f,
+ const sim_fpu *l,
+ const sim_fpu *r)
+{
+ if (sim_fpu_is_nan (l) || sim_fpu_is_nan (r))
+ return sim_fpu_op_nan (f, l, r);
if (sim_fpu_is_infinity (l))
{
if (sim_fpu_is_infinity (r)
@@ -1147,28 +1165,8 @@ sim_fpu_sub (sim_fpu *f,
const sim_fpu *l,
const sim_fpu *r)
{
- if (sim_fpu_is_snan (l))
- {
- *f = *l;
- f->class = sim_fpu_class_qnan;
- return sim_fpu_status_invalid_snan;
- }
- if (sim_fpu_is_snan (r))
- {
- *f = *r;
- f->class = sim_fpu_class_qnan;
- return sim_fpu_status_invalid_snan;
- }
- if (sim_fpu_is_qnan (l))
- {
- *f = *l;
- return 0;
- }
- if (sim_fpu_is_qnan (r))
- {
- *f = *r;
- return 0;
- }
+ if (sim_fpu_is_nan (l) || sim_fpu_is_nan (r))
+ return sim_fpu_op_nan (f, l, r);
if (sim_fpu_is_infinity (l))
{
if (sim_fpu_is_infinity (r)
@@ -1301,28 +1299,8 @@ sim_fpu_mul (sim_fpu *f,
const sim_fpu *l,
const sim_fpu *r)
{
- if (sim_fpu_is_snan (l))
- {
- *f = *l;
- f->class = sim_fpu_class_qnan;
- return sim_fpu_status_invalid_snan;
- }
- if (sim_fpu_is_snan (r))
- {
- *f = *r;
- f->class = sim_fpu_class_qnan;
- return sim_fpu_status_invalid_snan;
- }
- if (sim_fpu_is_qnan (l))
- {
- *f = *l;
- return 0;
- }
- if (sim_fpu_is_qnan (r))
- {
- *f = *r;
- return 0;
- }
+ if (sim_fpu_is_nan (l) || sim_fpu_is_nan (r))
+ return sim_fpu_op_nan (f, l, r);
if (sim_fpu_is_infinity (l))
{
if (sim_fpu_is_zero (r))
@@ -1426,30 +1404,8 @@ sim_fpu_div (sim_fpu *f,
const sim_fpu *l,
const sim_fpu *r)
{
- if (sim_fpu_is_snan (l))
- {
- *f = *l;
- f->class = sim_fpu_class_qnan;
- return sim_fpu_status_invalid_snan;
- }
- if (sim_fpu_is_snan (r))
- {
- *f = *r;
- f->class = sim_fpu_class_qnan;
- return sim_fpu_status_invalid_snan;
- }
- if (sim_fpu_is_qnan (l))
- {
- *f = *l;
- f->class = sim_fpu_class_qnan;
- return 0;
- }
- if (sim_fpu_is_qnan (r))
- {
- *f = *r;
- f->class = sim_fpu_class_qnan;
- return 0;
- }
+ if (sim_fpu_is_nan (l) || sim_fpu_is_nan (r))
+ return sim_fpu_op_nan (f, l, r);
if (sim_fpu_is_infinity (l))
{
if (sim_fpu_is_infinity (r))
@@ -1559,30 +1515,8 @@ sim_fpu_rem (sim_fpu *f,
const sim_fpu *l,
const sim_fpu *r)
{
- if (sim_fpu_is_snan (l))
- {
- *f = *l;
- f->class = sim_fpu_class_qnan;
- return sim_fpu_status_invalid_snan;
- }
- if (sim_fpu_is_snan (r))
- {
- *f = *r;
- f->class = sim_fpu_class_qnan;
- return sim_fpu_status_invalid_snan;
- }
- if (sim_fpu_is_qnan (l))
- {
- *f = *l;
- f->class = sim_fpu_class_qnan;
- return 0;
- }
- if (sim_fpu_is_qnan (r))
- {
- *f = *r;
- f->class = sim_fpu_class_qnan;
- return 0;
- }
+ if (sim_fpu_is_nan (l) || sim_fpu_is_nan (r))
+ return sim_fpu_op_nan (f, l, r);
if (sim_fpu_is_infinity (l))
{
*f = sim_fpu_qnan;
@@ -1642,28 +1576,8 @@ sim_fpu_max (sim_fpu *f,
const sim_fpu *l,
const sim_fpu *r)
{
- if (sim_fpu_is_snan (l))
- {
- *f = *l;
- f->class = sim_fpu_class_qnan;
- return sim_fpu_status_invalid_snan;
- }
- if (sim_fpu_is_snan (r))
- {
- *f = *r;
- f->class = sim_fpu_class_qnan;
- return sim_fpu_status_invalid_snan;
- }
- if (sim_fpu_is_qnan (l))
- {
- *f = *l;
- return 0;
- }
- if (sim_fpu_is_qnan (r))
- {
- *f = *r;
- return 0;
- }
+ if (sim_fpu_is_nan (l) || sim_fpu_is_nan (r))
+ return sim_fpu_minmax_nan (f, l, r);
if (sim_fpu_is_infinity (l))
{
if (sim_fpu_is_infinity (r)
@@ -1725,28 +1639,8 @@ sim_fpu_min (sim_fpu *f,
const sim_fpu *l,
const sim_fpu *r)
{
- if (sim_fpu_is_snan (l))
- {
- *f = *l;
- f->class = sim_fpu_class_qnan;
- return sim_fpu_status_invalid_snan;
- }
- if (sim_fpu_is_snan (r))
- {
- *f = *r;
- f->class = sim_fpu_class_qnan;
- return sim_fpu_status_invalid_snan;
- }
- if (sim_fpu_is_qnan (l))
- {
- *f = *l;
- return 0;
- }
- if (sim_fpu_is_qnan (r))
- {
- *f = *r;
- return 0;
- }
+ if (sim_fpu_is_nan (l) || sim_fpu_is_nan (r))
+ return sim_fpu_minmax_nan (f, l, r);
if (sim_fpu_is_infinity (l))
{
if (sim_fpu_is_infinity (r)
@@ -1807,7 +1701,7 @@ INLINE_SIM_FPU (int)
sim_fpu_neg (sim_fpu *f,
const sim_fpu *r)
{
- if (sim_fpu_is_snan (r))
+ if (sim_fpu_is_ieee754_1985 () && sim_fpu_is_snan (r))
{
*f = *r;
f->class = sim_fpu_class_qnan;
@@ -1830,7 +1724,7 @@ sim_fpu_abs (sim_fpu *f,
{
*f = *r;
f->sign = 0;
- if (sim_fpu_is_snan (r))
+ if (sim_fpu_is_ieee754_1985 () && sim_fpu_is_snan (r))
{
f->class = sim_fpu_class_qnan;
return sim_fpu_status_invalid_snan;
@@ -2385,6 +2279,21 @@ sim_fpu_is_gt (const sim_fpu *l, const sim_fpu *r)
return is;
}
+INLINE_SIM_FPU (int)
+sim_fpu_is_un (const sim_fpu *l, const sim_fpu *r)
+{
+ int is;
+ sim_fpu_un (&is, l, r);
+ return is;
+}
+
+INLINE_SIM_FPU (int)
+sim_fpu_is_or (const sim_fpu *l, const sim_fpu *r)
+{
+ int is;
+ sim_fpu_or (&is, l, r);
+ return is;
+}
/* Compare operators */
@@ -2508,10 +2417,59 @@ sim_fpu_gt (int *is,
return sim_fpu_lt (is, r, l);
}
+INLINE_SIM_FPU (int)
+sim_fpu_un (int *is, const sim_fpu *l, const sim_fpu *r)
+{
+ if (sim_fpu_is_nan (l) || sim_fpu_is_nan (r))
+ {
+ *is = 1;
+ return 0;
+ }
+
+ *is = 0;
+ return 0;
+}
+
+INLINE_SIM_FPU (int)
+sim_fpu_or (int *is, const sim_fpu *l, const sim_fpu *r)
+{
+ sim_fpu_un (is, l, r);
+
+ /* Invert result. */
+ *is = !*is;
+ return 0;
+}
+
+INLINE_SIM_FPU(int)
+sim_fpu_classify (const sim_fpu *f)
+{
+ switch (f->class)
+ {
+ case sim_fpu_class_snan: return SIM_FPU_IS_SNAN;
+ case sim_fpu_class_qnan: return SIM_FPU_IS_QNAN;
+ case sim_fpu_class_infinity:
+ return f->sign ? SIM_FPU_IS_NINF : SIM_FPU_IS_PINF;
+ case sim_fpu_class_zero:
+ return f->sign ? SIM_FPU_IS_NZERO : SIM_FPU_IS_PZERO;
+ case sim_fpu_class_number:
+ return f->sign ? SIM_FPU_IS_NNUMBER : SIM_FPU_IS_PNUMBER;
+ case sim_fpu_class_denorm:
+ return f->sign ? SIM_FPU_IS_NDENORM : SIM_FPU_IS_PDENORM;
+ default:
+ fprintf (stderr, "Bad switch\n");
+ abort ();
+ }
+ return 0;
+}
/* A number of useful constants */
#if EXTERN_SIM_FPU_P
+sim_fpu_state _sim_fpu = {
+ .quiet_nan_inverted = false,
+ .current_mode = sim_fpu_ieee754_1985,
+};
+
const sim_fpu sim_fpu_zero = {
sim_fpu_class_zero, 0, 0, 0
};
@@ -2532,6 +2490,24 @@ const sim_fpu sim_fpu_max64 = {
};
#endif
+/* Specification swapping behaviour */
+INLINE_SIM_FPU (bool)
+sim_fpu_is_ieee754_1985 (void)
+{
+ return (sim_fpu_current_mode == sim_fpu_ieee754_1985);
+}
+
+INLINE_SIM_FPU (bool)
+sim_fpu_is_ieee754_2008 (void)
+{
+ return (sim_fpu_current_mode == sim_fpu_ieee754_2008);
+}
+
+INLINE_SIM_FPU (void)
+sim_fpu_set_mode (const sim_fpu_mode m)
+{
+ sim_fpu_current_mode = m;
+}
/* For debugging */
diff --git a/sim/common/sim-fpu.h b/sim/common/sim-fpu.h
index 447621b5d73..a20b2861491 100644
--- a/sim/common/sim-fpu.h
+++ b/sim/common/sim-fpu.h
@@ -25,6 +25,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */
#define SIM_FPU_H
+#include <stdbool.h>
+
/* The FPU intermediate type - this object, passed by reference,
should be treated as opaque.
@@ -157,6 +159,24 @@ typedef enum
+/* State used by the FPU.
+
+ FIXME: This state is global, but should be moved to SIM_CPU. */
+
+typedef enum
+{
+ sim_fpu_ieee754_1985,
+ sim_fpu_ieee754_2008,
+} sim_fpu_mode;
+
+typedef struct _sim_fpu_state {
+ bool quiet_nan_inverted; /* Toggle quiet NaN semantics. */
+ sim_fpu_mode current_mode;
+} sim_fpu_state;
+
+
+
+
/* Directly map between a 32/64 bit register and the sim_fpu internal
type.
@@ -248,6 +268,18 @@ INLINE_SIM_FPU (int) sim_fpu_sqrt (sim_fpu *f,
+/* NaN handling.
+
+ Assuming that at least one of the inputs is NAN choose the correct
+ NAN result for the binary operation. */
+
+INLINE_SIM_FPU (int) sim_fpu_op_nan (sim_fpu *f,
+ const sim_fpu *l, const sim_fpu *r);
+INLINE_SIM_FPU (int) sim_fpu_minmax_nan (sim_fpu *f,
+ const sim_fpu *l, const sim_fpu *r);
+
+
+
/* Conversion of integer <-> floating point. */
INLINE_SIM_FPU (int) sim_fpu_i32to (sim_fpu *f, int32_t i,
@@ -295,7 +327,8 @@ INLINE_SIM_FPU (double) sim_fpu_2d (const sim_fpu *d);
/* INLINE_SIM_FPU (void) sim_fpu_f2 (sim_fpu *f, float s); */
INLINE_SIM_FPU (void) sim_fpu_d2 (sim_fpu *f, double d);
-
+/* IEEE754-2008 classifiction function. */
+INLINE_SIM_FPU (int) sim_fpu_classify (const sim_fpu *f);
/* Specific number classes.
@@ -344,7 +377,20 @@ INLINE_SIM_FPU (int) sim_fpu_is_ne (const sim_fpu *l, const sim_fpu *r);
INLINE_SIM_FPU (int) sim_fpu_is_ge (const sim_fpu *l, const sim_fpu *r);
INLINE_SIM_FPU (int) sim_fpu_is_gt (const sim_fpu *l, const sim_fpu *r);
+/* Unordered/ordered comparison operators. */
+
+INLINE_SIM_FPU (int) sim_fpu_un (int *is, const sim_fpu *l, const sim_fpu *r);
+INLINE_SIM_FPU (int) sim_fpu_or (int *is, const sim_fpu *l, const sim_fpu *r);
+INLINE_SIM_FPU (int) sim_fpu_is_un (const sim_fpu *l, const sim_fpu *r);
+INLINE_SIM_FPU (int) sim_fpu_is_or (const sim_fpu *l, const sim_fpu *r);
+
+/* Changes the behaviour of the library to IEEE754-2008 or IEEE754-1985.
+ The default for the library is IEEE754-1985. */
+
+INLINE_SIM_FPU (bool) sim_fpu_is_ieee754_1985 (void);
+INLINE_SIM_FPU (bool) sim_fpu_is_ieee754_2008 (void);
+INLINE_SIM_FPU (void) sim_fpu_set_mode (const sim_fpu_mode m);
/* General number class and comparison operators.
@@ -375,7 +421,20 @@ enum {
INLINE_SIM_FPU (int) sim_fpu_is (const sim_fpu *l);
INLINE_SIM_FPU (int) sim_fpu_cmp (const sim_fpu *l, const sim_fpu *r);
+/* Global FPU state. */
+
+extern sim_fpu_state _sim_fpu;
+
+
+/* IEEE 754-1985 specifies the top bit of the mantissa as an indicator
+ of signalling vs. quiet NaN, but does not specify the semantics.
+ Most architectures treat this bit as quiet NaN, but legacy (pre-R6)
+ MIPS goes the other way and treats it as signalling. This variable
+ tracks the current semantics of the NaN bit and allows differentiation
+ between pre-R6 and R6 MIPS cores. */
+#define sim_fpu_quiet_nan_inverted _sim_fpu.quiet_nan_inverted
+#define sim_fpu_current_mode _sim_fpu.current_mode
/* A number of useful constants. */
diff --git a/sim/common/sim-load.c b/sim/common/sim-load.c
index 58a39134ae6..020165a0dce 100644
--- a/sim/common/sim-load.c
+++ b/sim/common/sim-load.c
@@ -38,7 +38,7 @@ static void xprintf (host_callback *, const char *, ...);
static void report_transfer_performance
(host_callback *, unsigned long, time_t, time_t);
-/* Load program PROG into the simulator using the function DO_LOAD.
+/* Load program PROG into the simulator using the function DO_WRITE.
If PROG_BFD is non-NULL, the file has already been opened.
If VERBOSE_P is non-zero statistics are printed of each loaded section
and the transfer rate (for consistency with gdb).
diff --git a/sim/common/sim-memopt.c b/sim/common/sim-memopt.c
index 342188391d7..1f7186c5e12 100644
--- a/sim/common/sim-memopt.c
+++ b/sim/common/sim-memopt.c
@@ -639,6 +639,17 @@ sim_memory_uninstall (SIM_DESC sd)
}
}
+void sim_dump_memory (SIM_DESC sd);
+
+/* Convenience function for use when debugging the simulator, to be
+ called from within e.g. gdb. */
+
+void
+sim_dump_memory (SIM_DESC sd)
+{
+ memory_option_handler (sd, NULL, OPTION_MEMORY_INFO, NULL, 0);
+ memory_option_handler (sd, NULL, OPTION_MAP_INFO, NULL, 0);
+}
static SIM_RC
sim_memory_init (SIM_DESC sd)
diff --git a/sim/common/sim-trace.c b/sim/common/sim-trace.c
index 0b63bdb07b6..952c3514087 100644
--- a/sim/common/sim-trace.c
+++ b/sim/common/sim-trace.c
@@ -906,6 +906,18 @@ dis_printf (SIM_CPU *cpu, const char *fmt, ...)
return 0;
}
+static int ATTRIBUTE_PRINTF (3, 4)
+dis_styled_printf (SIM_CPU *cpu, enum disassembler_style style,
+ const char *fmt, ...)
+{
+ SIM_DESC sd = CPU_STATE (cpu);
+ va_list ap;
+ va_start (ap, fmt);
+ trace_vprintf (sd, cpu, fmt, ap);
+ va_end (ap);
+ return 0;
+}
+
void
trace_disasm (SIM_DESC sd, sim_cpu *cpu, address_word addr)
{
@@ -922,7 +934,7 @@ trace_disasm (SIM_DESC sd, sim_cpu *cpu, address_word addr)
bfd_big_endian (trace_data->dis_bfd),
bfd_get_mach (trace_data->dis_bfd),
trace_data->dis_bfd);
- INIT_DISASSEMBLE_INFO (*info, cpu, dis_printf);
+ INIT_DISASSEMBLE_INFO (*info, cpu, dis_printf, dis_styled_printf);
info->read_memory_func = dis_read;
info->arch = bfd_get_arch (bfd);
info->mach = bfd_get_mach (bfd);
diff --git a/sim/configure b/sim/configure
index 51ac74a4ce4..b31c2f5d8f3 100755
--- a/sim/configure
+++ b/sim/configure
@@ -813,6 +813,9 @@ SIM_ENABLE_ARCH_aarch64_TRUE
CC_FOR_TARGET_AARCH64
LD_FOR_TARGET_AARCH64
AS_FOR_TARGET_AARCH64
+LD_FOR_TARGET
+AS_FOR_TARGET
+CC_FOR_TARGET
SIM_COMMON_BUILD_FALSE
SIM_COMMON_BUILD_TRUE
SIM_SUBDIRS
@@ -6011,25 +6014,31 @@ else
lt_nm_to_check="$lt_nm_to_check nm"
fi
fi
- for lt_tmp_nm in $lt_nm_to_check; do
+ for lt_tmp_nm in "$lt_nm_to_check"; do
lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
IFS="$lt_save_ifs"
test -z "$ac_dir" && ac_dir=.
- case "$lt_tmp_nm" in
+ # Strip out any user-provided options from the nm to test twice,
+ # the first time to test to see if nm (rather than its options) has
+ # an explicit path, the second time to yield a file which can be
+ # nm'ed itself.
+ tmp_nm_path="`$ECHO "$lt_tmp_nm" | sed 's, -.*$,,'`"
+ case "$tmp_nm_path" in
*/*|*\\*) tmp_nm="$lt_tmp_nm";;
*) tmp_nm="$ac_dir/$lt_tmp_nm";;
esac
- if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+ tmp_nm_to_nm="`$ECHO "$tmp_nm" | sed 's, -.*$,,'`"
+ if test -f "$tmp_nm_to_nm" || test -f "$tmp_nm_to_nm$ac_exeext" ; then
# Check to see if the nm accepts a BSD-compat flag.
# Adding the `sed 1q' prevents false positives on HP-UX, which says:
# nm: unknown option "B" ignored
- case `"$tmp_nm" -B "$tmp_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
+ case `"$tmp_nm" -B "$tmp_nm_to_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
*$tmp_nm*) lt_cv_path_NM="$tmp_nm -B"
break
;;
*)
- case `"$tmp_nm" -p "$tmp_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
+ case `"$tmp_nm" -p "$tmp_nm_to_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
*$tmp_nm*)
lt_cv_path_NM="$tmp_nm -p"
break
@@ -12632,7 +12641,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 12635 "configure"
+#line 12644 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -12738,7 +12747,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 12741 "configure"
+#line 12750 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -14382,7 +14391,9 @@ if test "${enable_sim}" != no; then
if test "${targ}" = "${target}"; then
SIM_PRIMARY_TARGET=aarch64
fi
- ac_config_files="$ac_config_files aarch64/Makefile.sim:aarch64/Makefile.in"
+ ac_config_files="$ac_config_files aarch64/.gdbinit:common/gdbinit.in"
+
+ ac_config_files="$ac_config_files aarch64/Makefile.sim:aarch64/Makefile.in"
ac_config_commands="$ac_config_commands aarch64/Makefile"
@@ -14395,13 +14406,141 @@ if test "${enable_sim}" != no; then
;;
esac
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the target cc" >&5
+$as_echo_n "checking where to find the target cc... " >&6; }
+if test "x${build}" != "x${host}" ; then
+ if expr "x$CC_FOR_TARGET" : "x/" > /dev/null; then
+ # We already found the complete path
+ ac_dir=`dirname $CC_FOR_TARGET`
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed in $ac_dir" >&5
+$as_echo "pre-installed in $ac_dir" >&6; }
+ else
+ # Canadian cross, just use what we found
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed" >&5
+$as_echo "pre-installed" >&6; }
+ fi
+else
+ ok=yes
+ case " ${configdirs} " in
+ *" ${target_alias}-gcc "*) ;;
+ *) ok=no ;;
+ esac
+
+ if test $ok = yes; then
+ # An in-tree tool is available and we can use it
+ CC_FOR_TARGET='$$r/$(HOST_SUBDIR)/${target_alias}-gcc'
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: just compiled" >&5
+$as_echo "just compiled" >&6; }
+ elif expr "x$CC_FOR_TARGET" : "x/" > /dev/null; then
+ # We already found the complete path
+ ac_dir=`dirname $CC_FOR_TARGET`
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed in $ac_dir" >&5
+$as_echo "pre-installed in $ac_dir" >&6; }
+ elif test "x$target" = "x$host"; then
+ # We can use an host tool
+ CC_FOR_TARGET='$(CC)'
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: host tool" >&5
+$as_echo "host tool" >&6; }
+ else
+ # We need a cross tool
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed" >&5
+$as_echo "pre-installed" >&6; }
+ fi
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the target as" >&5
+$as_echo_n "checking where to find the target as... " >&6; }
+if test "x${build}" != "x${host}" ; then
+ if expr "x$AS_FOR_TARGET" : "x/" > /dev/null; then
+ # We already found the complete path
+ ac_dir=`dirname $AS_FOR_TARGET`
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed in $ac_dir" >&5
+$as_echo "pre-installed in $ac_dir" >&6; }
+ else
+ # Canadian cross, just use what we found
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed" >&5
+$as_echo "pre-installed" >&6; }
+ fi
+else
+ ok=yes
+ case " ${configdirs} " in
+ *" \$(abs_builddir) "*) ;;
+ *) ok=no ;;
+ esac
+
+ if test $ok = yes; then
+ # An in-tree tool is available and we can use it
+ AS_FOR_TARGET='$$r/$(HOST_SUBDIR)/\$(abs_builddir)/../gas/as-new'
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: just compiled" >&5
+$as_echo "just compiled" >&6; }
+ elif expr "x$AS_FOR_TARGET" : "x/" > /dev/null; then
+ # We already found the complete path
+ ac_dir=`dirname $AS_FOR_TARGET`
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed in $ac_dir" >&5
+$as_echo "pre-installed in $ac_dir" >&6; }
+ elif test "x$target" = "x$host"; then
+ # We can use an host tool
+ AS_FOR_TARGET='$(AS)'
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: host tool" >&5
+$as_echo "host tool" >&6; }
+ else
+ # We need a cross tool
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed" >&5
+$as_echo "pre-installed" >&6; }
+ fi
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the target ld" >&5
+$as_echo_n "checking where to find the target ld... " >&6; }
+if test "x${build}" != "x${host}" ; then
+ if expr "x$LD_FOR_TARGET" : "x/" > /dev/null; then
+ # We already found the complete path
+ ac_dir=`dirname $LD_FOR_TARGET`
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed in $ac_dir" >&5
+$as_echo "pre-installed in $ac_dir" >&6; }
+ else
+ # Canadian cross, just use what we found
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed" >&5
+$as_echo "pre-installed" >&6; }
+ fi
+else
+ ok=yes
+ case " ${configdirs} " in
+ *" \$(abs_builddir) "*) ;;
+ *) ok=no ;;
+ esac
+
+ if test $ok = yes; then
+ # An in-tree tool is available and we can use it
+ LD_FOR_TARGET='$$r/$(HOST_SUBDIR)/\$(abs_builddir)/../ld/ld-new'
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: just compiled" >&5
+$as_echo "just compiled" >&6; }
+ elif expr "x$LD_FOR_TARGET" : "x/" > /dev/null; then
+ # We already found the complete path
+ ac_dir=`dirname $LD_FOR_TARGET`
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed in $ac_dir" >&5
+$as_echo "pre-installed in $ac_dir" >&6; }
+ elif test "x$target" = "x$host"; then
+ # We can use an host tool
+ LD_FOR_TARGET='$(LD)'
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: host tool" >&5
+$as_echo "host tool" >&6; }
+ else
+ # We need a cross tool
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed" >&5
+$as_echo "pre-installed" >&6; }
+ fi
+fi
+
+
+
if test "$SIM_PRIMARY_TARGET" = "aarch64"; then :
- : "${AS_FOR_TARGET_AARCH64:=\$(abs_builddir)/../gas/as-new}"
- : "${LD_FOR_TARGET_AARCH64:=\$(abs_builddir)/../ld/ld-new}"
- : "${CC_FOR_TARGET_AARCH64:=${target_alias}-gcc}"
+ : "${AS_FOR_TARGET_AARCH64:=\$(AS_FOR_TARGET)}"
+ : "${LD_FOR_TARGET_AARCH64:=\$(LD_FOR_TARGET)}"
+ : "${CC_FOR_TARGET_AARCH64:=\$(CC_FOR_TARGET)}"
fi
@@ -14422,7 +14561,9 @@ fi
if test "${targ}" = "${target}"; then
SIM_PRIMARY_TARGET=arm
fi
- ac_config_files="$ac_config_files arm/Makefile.sim:arm/Makefile.in"
+ ac_config_files="$ac_config_files arm/.gdbinit:common/gdbinit.in"
+
+ ac_config_files="$ac_config_files arm/Makefile.sim:arm/Makefile.in"
ac_config_commands="$ac_config_commands arm/Makefile"
@@ -14438,10 +14579,11 @@ fi
+
if test "$SIM_PRIMARY_TARGET" = "arm"; then :
- : "${AS_FOR_TARGET_ARM:=\$(abs_builddir)/../gas/as-new}"
- : "${LD_FOR_TARGET_ARM:=\$(abs_builddir)/../ld/ld-new}"
- : "${CC_FOR_TARGET_ARM:=${target_alias}-gcc}"
+ : "${AS_FOR_TARGET_ARM:=\$(AS_FOR_TARGET)}"
+ : "${LD_FOR_TARGET_ARM:=\$(LD_FOR_TARGET)}"
+ : "${CC_FOR_TARGET_ARM:=\$(CC_FOR_TARGET)}"
fi
@@ -14462,7 +14604,9 @@ fi
if test "${targ}" = "${target}"; then
SIM_PRIMARY_TARGET=avr
fi
- ac_config_files="$ac_config_files avr/Makefile.sim:avr/Makefile.in"
+ ac_config_files="$ac_config_files avr/.gdbinit:common/gdbinit.in"
+
+ ac_config_files="$ac_config_files avr/Makefile.sim:avr/Makefile.in"
ac_config_commands="$ac_config_commands avr/Makefile"
@@ -14478,10 +14622,11 @@ fi
+
if test "$SIM_PRIMARY_TARGET" = "avr"; then :
- : "${AS_FOR_TARGET_AVR:=\$(abs_builddir)/../gas/as-new}"
- : "${LD_FOR_TARGET_AVR:=\$(abs_builddir)/../ld/ld-new}"
- : "${CC_FOR_TARGET_AVR:=${target_alias}-gcc}"
+ : "${AS_FOR_TARGET_AVR:=\$(AS_FOR_TARGET)}"
+ : "${LD_FOR_TARGET_AVR:=\$(LD_FOR_TARGET)}"
+ : "${CC_FOR_TARGET_AVR:=\$(CC_FOR_TARGET)}"
fi
@@ -14502,7 +14647,9 @@ fi
if test "${targ}" = "${target}"; then
SIM_PRIMARY_TARGET=bfin
fi
- ac_config_files="$ac_config_files bfin/Makefile.sim:bfin/Makefile.in"
+ ac_config_files="$ac_config_files bfin/.gdbinit:common/gdbinit.in"
+
+ ac_config_files="$ac_config_files bfin/Makefile.sim:bfin/Makefile.in"
ac_config_commands="$ac_config_commands bfin/Makefile"
@@ -14518,10 +14665,11 @@ fi
+
if test "$SIM_PRIMARY_TARGET" = "bfin"; then :
- : "${AS_FOR_TARGET_BFIN:=\$(abs_builddir)/../gas/as-new}"
- : "${LD_FOR_TARGET_BFIN:=\$(abs_builddir)/../ld/ld-new}"
- : "${CC_FOR_TARGET_BFIN:=${target_alias}-gcc}"
+ : "${AS_FOR_TARGET_BFIN:=\$(AS_FOR_TARGET)}"
+ : "${LD_FOR_TARGET_BFIN:=\$(LD_FOR_TARGET)}"
+ : "${CC_FOR_TARGET_BFIN:=\$(CC_FOR_TARGET)}"
fi
@@ -14557,10 +14705,11 @@ subdirs="$subdirs bpf"
+
if test "$SIM_PRIMARY_TARGET" = "bpf"; then :
- : "${AS_FOR_TARGET_BPF:=\$(abs_builddir)/../gas/as-new}"
- : "${LD_FOR_TARGET_BPF:=\$(abs_builddir)/../ld/ld-new}"
- : "${CC_FOR_TARGET_BPF:=${target_alias}-gcc}"
+ : "${AS_FOR_TARGET_BPF:=\$(AS_FOR_TARGET)}"
+ : "${LD_FOR_TARGET_BPF:=\$(LD_FOR_TARGET)}"
+ : "${CC_FOR_TARGET_BPF:=\$(CC_FOR_TARGET)}"
fi
@@ -14581,7 +14730,9 @@ fi
if test "${targ}" = "${target}"; then
SIM_PRIMARY_TARGET=cr16
fi
- ac_config_files="$ac_config_files cr16/Makefile.sim:cr16/Makefile.in"
+ ac_config_files="$ac_config_files cr16/.gdbinit:common/gdbinit.in"
+
+ ac_config_files="$ac_config_files cr16/Makefile.sim:cr16/Makefile.in"
ac_config_commands="$ac_config_commands cr16/Makefile"
@@ -14597,10 +14748,11 @@ fi
+
if test "$SIM_PRIMARY_TARGET" = "cr16"; then :
- : "${AS_FOR_TARGET_CR16:=\$(abs_builddir)/../gas/as-new}"
- : "${LD_FOR_TARGET_CR16:=\$(abs_builddir)/../ld/ld-new}"
- : "${CC_FOR_TARGET_CR16:=${target_alias}-gcc}"
+ : "${AS_FOR_TARGET_CR16:=\$(AS_FOR_TARGET)}"
+ : "${LD_FOR_TARGET_CR16:=\$(LD_FOR_TARGET)}"
+ : "${CC_FOR_TARGET_CR16:=\$(CC_FOR_TARGET)}"
fi
@@ -14621,7 +14773,9 @@ fi
if test "${targ}" = "${target}"; then
SIM_PRIMARY_TARGET=cris
fi
- ac_config_files="$ac_config_files cris/Makefile.sim:cris/Makefile.in"
+ ac_config_files="$ac_config_files cris/.gdbinit:common/gdbinit.in"
+
+ ac_config_files="$ac_config_files cris/Makefile.sim:cris/Makefile.in"
ac_config_commands="$ac_config_commands cris/Makefile"
@@ -14637,10 +14791,11 @@ fi
+
if test "$SIM_PRIMARY_TARGET" = "cris"; then :
- : "${AS_FOR_TARGET_CRIS:=\$(abs_builddir)/../gas/as-new}"
- : "${LD_FOR_TARGET_CRIS:=\$(abs_builddir)/../ld/ld-new}"
- : "${CC_FOR_TARGET_CRIS:=${target_alias}-gcc}"
+ : "${AS_FOR_TARGET_CRIS:=\$(AS_FOR_TARGET)}"
+ : "${LD_FOR_TARGET_CRIS:=\$(LD_FOR_TARGET)}"
+ : "${CC_FOR_TARGET_CRIS:=\$(CC_FOR_TARGET)}"
fi
@@ -14661,7 +14816,9 @@ fi
if test "${targ}" = "${target}"; then
SIM_PRIMARY_TARGET=d10v
fi
- ac_config_files="$ac_config_files d10v/Makefile.sim:d10v/Makefile.in"
+ ac_config_files="$ac_config_files d10v/.gdbinit:common/gdbinit.in"
+
+ ac_config_files="$ac_config_files d10v/Makefile.sim:d10v/Makefile.in"
ac_config_commands="$ac_config_commands d10v/Makefile"
@@ -14677,10 +14834,11 @@ fi
+
if test "$SIM_PRIMARY_TARGET" = "d10v"; then :
- : "${AS_FOR_TARGET_D10V:=\$(abs_builddir)/../gas/as-new}"
- : "${LD_FOR_TARGET_D10V:=\$(abs_builddir)/../ld/ld-new}"
- : "${CC_FOR_TARGET_D10V:=${target_alias}-gcc}"
+ : "${AS_FOR_TARGET_D10V:=\$(AS_FOR_TARGET)}"
+ : "${LD_FOR_TARGET_D10V:=\$(LD_FOR_TARGET)}"
+ : "${CC_FOR_TARGET_D10V:=\$(CC_FOR_TARGET)}"
fi
@@ -14701,7 +14859,9 @@ fi
if test "${targ}" = "${target}"; then
SIM_PRIMARY_TARGET=frv
fi
- ac_config_files="$ac_config_files frv/Makefile.sim:frv/Makefile.in"
+ ac_config_files="$ac_config_files frv/.gdbinit:common/gdbinit.in"
+
+ ac_config_files="$ac_config_files frv/Makefile.sim:frv/Makefile.in"
ac_config_commands="$ac_config_commands frv/Makefile"
@@ -14717,10 +14877,11 @@ fi
+
if test "$SIM_PRIMARY_TARGET" = "frv"; then :
- : "${AS_FOR_TARGET_FRV:=\$(abs_builddir)/../gas/as-new}"
- : "${LD_FOR_TARGET_FRV:=\$(abs_builddir)/../ld/ld-new}"
- : "${CC_FOR_TARGET_FRV:=${target_alias}-gcc}"
+ : "${AS_FOR_TARGET_FRV:=\$(AS_FOR_TARGET)}"
+ : "${LD_FOR_TARGET_FRV:=\$(LD_FOR_TARGET)}"
+ : "${CC_FOR_TARGET_FRV:=\$(CC_FOR_TARGET)}"
fi
@@ -14741,7 +14902,9 @@ fi
if test "${targ}" = "${target}"; then
SIM_PRIMARY_TARGET=ft32
fi
- ac_config_files="$ac_config_files ft32/Makefile.sim:ft32/Makefile.in"
+ ac_config_files="$ac_config_files ft32/.gdbinit:common/gdbinit.in"
+
+ ac_config_files="$ac_config_files ft32/Makefile.sim:ft32/Makefile.in"
ac_config_commands="$ac_config_commands ft32/Makefile"
@@ -14757,10 +14920,11 @@ fi
+
if test "$SIM_PRIMARY_TARGET" = "ft32"; then :
- : "${AS_FOR_TARGET_FT32:=\$(abs_builddir)/../gas/as-new}"
- : "${LD_FOR_TARGET_FT32:=\$(abs_builddir)/../ld/ld-new}"
- : "${CC_FOR_TARGET_FT32:=${target_alias}-gcc}"
+ : "${AS_FOR_TARGET_FT32:=\$(AS_FOR_TARGET)}"
+ : "${LD_FOR_TARGET_FT32:=\$(LD_FOR_TARGET)}"
+ : "${CC_FOR_TARGET_FT32:=\$(CC_FOR_TARGET)}"
fi
@@ -14781,7 +14945,9 @@ fi
if test "${targ}" = "${target}"; then
SIM_PRIMARY_TARGET=h8300
fi
- ac_config_files="$ac_config_files h8300/Makefile.sim:h8300/Makefile.in"
+ ac_config_files="$ac_config_files h8300/.gdbinit:common/gdbinit.in"
+
+ ac_config_files="$ac_config_files h8300/Makefile.sim:h8300/Makefile.in"
ac_config_commands="$ac_config_commands h8300/Makefile"
@@ -14797,10 +14963,11 @@ fi
+
if test "$SIM_PRIMARY_TARGET" = "h8300"; then :
- : "${AS_FOR_TARGET_H8300:=\$(abs_builddir)/../gas/as-new}"
- : "${LD_FOR_TARGET_H8300:=\$(abs_builddir)/../ld/ld-new}"
- : "${CC_FOR_TARGET_H8300:=${target_alias}-gcc}"
+ : "${AS_FOR_TARGET_H8300:=\$(AS_FOR_TARGET)}"
+ : "${LD_FOR_TARGET_H8300:=\$(LD_FOR_TARGET)}"
+ : "${CC_FOR_TARGET_H8300:=\$(CC_FOR_TARGET)}"
fi
@@ -14821,7 +14988,9 @@ fi
if test "${targ}" = "${target}"; then
SIM_PRIMARY_TARGET=iq2000
fi
- ac_config_files="$ac_config_files iq2000/Makefile.sim:iq2000/Makefile.in"
+ ac_config_files="$ac_config_files iq2000/.gdbinit:common/gdbinit.in"
+
+ ac_config_files="$ac_config_files iq2000/Makefile.sim:iq2000/Makefile.in"
ac_config_commands="$ac_config_commands iq2000/Makefile"
@@ -14837,10 +15006,11 @@ fi
+
if test "$SIM_PRIMARY_TARGET" = "iq2000"; then :
- : "${AS_FOR_TARGET_IQ2000:=\$(abs_builddir)/../gas/as-new}"
- : "${LD_FOR_TARGET_IQ2000:=\$(abs_builddir)/../ld/ld-new}"
- : "${CC_FOR_TARGET_IQ2000:=${target_alias}-gcc}"
+ : "${AS_FOR_TARGET_IQ2000:=\$(AS_FOR_TARGET)}"
+ : "${LD_FOR_TARGET_IQ2000:=\$(LD_FOR_TARGET)}"
+ : "${CC_FOR_TARGET_IQ2000:=\$(CC_FOR_TARGET)}"
fi
@@ -14861,7 +15031,9 @@ fi
if test "${targ}" = "${target}"; then
SIM_PRIMARY_TARGET=lm32
fi
- ac_config_files="$ac_config_files lm32/Makefile.sim:lm32/Makefile.in"
+ ac_config_files="$ac_config_files lm32/.gdbinit:common/gdbinit.in"
+
+ ac_config_files="$ac_config_files lm32/Makefile.sim:lm32/Makefile.in"
ac_config_commands="$ac_config_commands lm32/Makefile"
@@ -14877,10 +15049,11 @@ fi
+
if test "$SIM_PRIMARY_TARGET" = "lm32"; then :
- : "${AS_FOR_TARGET_LM32:=\$(abs_builddir)/../gas/as-new}"
- : "${LD_FOR_TARGET_LM32:=\$(abs_builddir)/../ld/ld-new}"
- : "${CC_FOR_TARGET_LM32:=${target_alias}-gcc}"
+ : "${AS_FOR_TARGET_LM32:=\$(AS_FOR_TARGET)}"
+ : "${LD_FOR_TARGET_LM32:=\$(LD_FOR_TARGET)}"
+ : "${CC_FOR_TARGET_LM32:=\$(CC_FOR_TARGET)}"
fi
@@ -14901,7 +15074,9 @@ fi
if test "${targ}" = "${target}"; then
SIM_PRIMARY_TARGET=m32c
fi
- ac_config_files="$ac_config_files m32c/Makefile.sim:m32c/Makefile.in"
+ ac_config_files="$ac_config_files m32c/.gdbinit:common/gdbinit.in"
+
+ ac_config_files="$ac_config_files m32c/Makefile.sim:m32c/Makefile.in"
ac_config_commands="$ac_config_commands m32c/Makefile"
@@ -14917,10 +15092,11 @@ fi
+
if test "$SIM_PRIMARY_TARGET" = "m32c"; then :
- : "${AS_FOR_TARGET_M32C:=\$(abs_builddir)/../gas/as-new}"
- : "${LD_FOR_TARGET_M32C:=\$(abs_builddir)/../ld/ld-new}"
- : "${CC_FOR_TARGET_M32C:=${target_alias}-gcc}"
+ : "${AS_FOR_TARGET_M32C:=\$(AS_FOR_TARGET)}"
+ : "${LD_FOR_TARGET_M32C:=\$(LD_FOR_TARGET)}"
+ : "${CC_FOR_TARGET_M32C:=\$(CC_FOR_TARGET)}"
fi
@@ -14941,7 +15117,9 @@ fi
if test "${targ}" = "${target}"; then
SIM_PRIMARY_TARGET=m32r
fi
- ac_config_files="$ac_config_files m32r/Makefile.sim:m32r/Makefile.in"
+ ac_config_files="$ac_config_files m32r/.gdbinit:common/gdbinit.in"
+
+ ac_config_files="$ac_config_files m32r/Makefile.sim:m32r/Makefile.in"
ac_config_commands="$ac_config_commands m32r/Makefile"
@@ -14957,10 +15135,11 @@ fi
+
if test "$SIM_PRIMARY_TARGET" = "m32r"; then :
- : "${AS_FOR_TARGET_M32R:=\$(abs_builddir)/../gas/as-new}"
- : "${LD_FOR_TARGET_M32R:=\$(abs_builddir)/../ld/ld-new}"
- : "${CC_FOR_TARGET_M32R:=${target_alias}-gcc}"
+ : "${AS_FOR_TARGET_M32R:=\$(AS_FOR_TARGET)}"
+ : "${LD_FOR_TARGET_M32R:=\$(LD_FOR_TARGET)}"
+ : "${CC_FOR_TARGET_M32R:=\$(CC_FOR_TARGET)}"
fi
@@ -14981,7 +15160,9 @@ fi
if test "${targ}" = "${target}"; then
SIM_PRIMARY_TARGET=m68hc11
fi
- ac_config_files="$ac_config_files m68hc11/Makefile.sim:m68hc11/Makefile.in"
+ ac_config_files="$ac_config_files m68hc11/.gdbinit:common/gdbinit.in"
+
+ ac_config_files="$ac_config_files m68hc11/Makefile.sim:m68hc11/Makefile.in"
ac_config_commands="$ac_config_commands m68hc11/Makefile"
@@ -14997,10 +15178,11 @@ fi
+
if test "$SIM_PRIMARY_TARGET" = "m68hc11"; then :
- : "${AS_FOR_TARGET_M68HC11:=\$(abs_builddir)/../gas/as-new}"
- : "${LD_FOR_TARGET_M68HC11:=\$(abs_builddir)/../ld/ld-new}"
- : "${CC_FOR_TARGET_M68HC11:=${target_alias}-gcc}"
+ : "${AS_FOR_TARGET_M68HC11:=\$(AS_FOR_TARGET)}"
+ : "${LD_FOR_TARGET_M68HC11:=\$(LD_FOR_TARGET)}"
+ : "${CC_FOR_TARGET_M68HC11:=\$(CC_FOR_TARGET)}"
fi
@@ -15021,7 +15203,9 @@ fi
if test "${targ}" = "${target}"; then
SIM_PRIMARY_TARGET=mcore
fi
- ac_config_files="$ac_config_files mcore/Makefile.sim:mcore/Makefile.in"
+ ac_config_files="$ac_config_files mcore/.gdbinit:common/gdbinit.in"
+
+ ac_config_files="$ac_config_files mcore/Makefile.sim:mcore/Makefile.in"
ac_config_commands="$ac_config_commands mcore/Makefile"
@@ -15037,10 +15221,11 @@ fi
+
if test "$SIM_PRIMARY_TARGET" = "mcore"; then :
- : "${AS_FOR_TARGET_MCORE:=\$(abs_builddir)/../gas/as-new}"
- : "${LD_FOR_TARGET_MCORE:=\$(abs_builddir)/../ld/ld-new}"
- : "${CC_FOR_TARGET_MCORE:=${target_alias}-gcc}"
+ : "${AS_FOR_TARGET_MCORE:=\$(AS_FOR_TARGET)}"
+ : "${LD_FOR_TARGET_MCORE:=\$(LD_FOR_TARGET)}"
+ : "${CC_FOR_TARGET_MCORE:=\$(CC_FOR_TARGET)}"
fi
@@ -15061,7 +15246,9 @@ fi
if test "${targ}" = "${target}"; then
SIM_PRIMARY_TARGET=microblaze
fi
- ac_config_files="$ac_config_files microblaze/Makefile.sim:microblaze/Makefile.in"
+ ac_config_files="$ac_config_files microblaze/.gdbinit:common/gdbinit.in"
+
+ ac_config_files="$ac_config_files microblaze/Makefile.sim:microblaze/Makefile.in"
ac_config_commands="$ac_config_commands microblaze/Makefile"
@@ -15077,10 +15264,11 @@ fi
+
if test "$SIM_PRIMARY_TARGET" = "microblaze"; then :
- : "${AS_FOR_TARGET_MICROBLAZE:=\$(abs_builddir)/../gas/as-new}"
- : "${LD_FOR_TARGET_MICROBLAZE:=\$(abs_builddir)/../ld/ld-new}"
- : "${CC_FOR_TARGET_MICROBLAZE:=${target_alias}-gcc}"
+ : "${AS_FOR_TARGET_MICROBLAZE:=\$(AS_FOR_TARGET)}"
+ : "${LD_FOR_TARGET_MICROBLAZE:=\$(LD_FOR_TARGET)}"
+ : "${CC_FOR_TARGET_MICROBLAZE:=\$(CC_FOR_TARGET)}"
fi
@@ -15114,10 +15302,11 @@ fi
+
if test "$SIM_PRIMARY_TARGET" = "mips"; then :
- : "${AS_FOR_TARGET_MIPS:=\$(abs_builddir)/../gas/as-new}"
- : "${LD_FOR_TARGET_MIPS:=\$(abs_builddir)/../ld/ld-new}"
- : "${CC_FOR_TARGET_MIPS:=${target_alias}-gcc}"
+ : "${AS_FOR_TARGET_MIPS:=\$(AS_FOR_TARGET)}"
+ : "${LD_FOR_TARGET_MIPS:=\$(LD_FOR_TARGET)}"
+ : "${CC_FOR_TARGET_MIPS:=\$(CC_FOR_TARGET)}"
fi
@@ -15151,10 +15340,11 @@ fi
+
if test "$SIM_PRIMARY_TARGET" = "mn10300"; then :
- : "${AS_FOR_TARGET_MN10300:=\$(abs_builddir)/../gas/as-new}"
- : "${LD_FOR_TARGET_MN10300:=\$(abs_builddir)/../ld/ld-new}"
- : "${CC_FOR_TARGET_MN10300:=${target_alias}-gcc}"
+ : "${AS_FOR_TARGET_MN10300:=\$(AS_FOR_TARGET)}"
+ : "${LD_FOR_TARGET_MN10300:=\$(LD_FOR_TARGET)}"
+ : "${CC_FOR_TARGET_MN10300:=\$(CC_FOR_TARGET)}"
fi
@@ -15175,7 +15365,9 @@ fi
if test "${targ}" = "${target}"; then
SIM_PRIMARY_TARGET=moxie
fi
- ac_config_files="$ac_config_files moxie/Makefile.sim:moxie/Makefile.in"
+ ac_config_files="$ac_config_files moxie/.gdbinit:common/gdbinit.in"
+
+ ac_config_files="$ac_config_files moxie/Makefile.sim:moxie/Makefile.in"
ac_config_commands="$ac_config_commands moxie/Makefile"
@@ -15191,10 +15383,11 @@ fi
+
if test "$SIM_PRIMARY_TARGET" = "moxie"; then :
- : "${AS_FOR_TARGET_MOXIE:=\$(abs_builddir)/../gas/as-new}"
- : "${LD_FOR_TARGET_MOXIE:=\$(abs_builddir)/../ld/ld-new}"
- : "${CC_FOR_TARGET_MOXIE:=${target_alias}-gcc}"
+ : "${AS_FOR_TARGET_MOXIE:=\$(AS_FOR_TARGET)}"
+ : "${LD_FOR_TARGET_MOXIE:=\$(LD_FOR_TARGET)}"
+ : "${CC_FOR_TARGET_MOXIE:=\$(CC_FOR_TARGET)}"
fi
@@ -15215,7 +15408,9 @@ fi
if test "${targ}" = "${target}"; then
SIM_PRIMARY_TARGET=msp430
fi
- ac_config_files="$ac_config_files msp430/Makefile.sim:msp430/Makefile.in"
+ ac_config_files="$ac_config_files msp430/.gdbinit:common/gdbinit.in"
+
+ ac_config_files="$ac_config_files msp430/Makefile.sim:msp430/Makefile.in"
ac_config_commands="$ac_config_commands msp430/Makefile"
@@ -15231,10 +15426,11 @@ fi
+
if test "$SIM_PRIMARY_TARGET" = "msp430"; then :
- : "${AS_FOR_TARGET_MSP430:=\$(abs_builddir)/../gas/as-new}"
- : "${LD_FOR_TARGET_MSP430:=\$(abs_builddir)/../ld/ld-new}"
- : "${CC_FOR_TARGET_MSP430:=${target_alias}-gcc}"
+ : "${AS_FOR_TARGET_MSP430:=\$(AS_FOR_TARGET)}"
+ : "${LD_FOR_TARGET_MSP430:=\$(LD_FOR_TARGET)}"
+ : "${CC_FOR_TARGET_MSP430:=\$(CC_FOR_TARGET)}"
fi
@@ -15268,10 +15464,11 @@ fi
+
if test "$SIM_PRIMARY_TARGET" = "or1k"; then :
- : "${AS_FOR_TARGET_OR1K:=\$(abs_builddir)/../gas/as-new}"
- : "${LD_FOR_TARGET_OR1K:=\$(abs_builddir)/../ld/ld-new}"
- : "${CC_FOR_TARGET_OR1K:=${target_alias}-gcc}"
+ : "${AS_FOR_TARGET_OR1K:=\$(AS_FOR_TARGET)}"
+ : "${LD_FOR_TARGET_OR1K:=\$(LD_FOR_TARGET)}"
+ : "${CC_FOR_TARGET_OR1K:=\$(CC_FOR_TARGET)}"
fi
@@ -15305,10 +15502,11 @@ fi
+
if test "$SIM_PRIMARY_TARGET" = "ppc"; then :
- : "${AS_FOR_TARGET_PPC:=\$(abs_builddir)/../gas/as-new}"
- : "${LD_FOR_TARGET_PPC:=\$(abs_builddir)/../ld/ld-new}"
- : "${CC_FOR_TARGET_PPC:=${target_alias}-gcc}"
+ : "${AS_FOR_TARGET_PPC:=\$(AS_FOR_TARGET)}"
+ : "${LD_FOR_TARGET_PPC:=\$(LD_FOR_TARGET)}"
+ : "${CC_FOR_TARGET_PPC:=\$(CC_FOR_TARGET)}"
fi
@@ -15329,7 +15527,9 @@ fi
if test "${targ}" = "${target}"; then
SIM_PRIMARY_TARGET=pru
fi
- ac_config_files="$ac_config_files pru/Makefile.sim:pru/Makefile.in"
+ ac_config_files="$ac_config_files pru/.gdbinit:common/gdbinit.in"
+
+ ac_config_files="$ac_config_files pru/Makefile.sim:pru/Makefile.in"
ac_config_commands="$ac_config_commands pru/Makefile"
@@ -15345,10 +15545,11 @@ fi
+
if test "$SIM_PRIMARY_TARGET" = "pru"; then :
- : "${AS_FOR_TARGET_PRU:=\$(abs_builddir)/../gas/as-new}"
- : "${LD_FOR_TARGET_PRU:=\$(abs_builddir)/../ld/ld-new}"
- : "${CC_FOR_TARGET_PRU:=${target_alias}-gcc}"
+ : "${AS_FOR_TARGET_PRU:=\$(AS_FOR_TARGET)}"
+ : "${LD_FOR_TARGET_PRU:=\$(LD_FOR_TARGET)}"
+ : "${CC_FOR_TARGET_PRU:=\$(CC_FOR_TARGET)}"
fi
@@ -15382,10 +15583,11 @@ fi
+
if test "$SIM_PRIMARY_TARGET" = "riscv"; then :
- : "${AS_FOR_TARGET_RISCV:=\$(abs_builddir)/../gas/as-new}"
- : "${LD_FOR_TARGET_RISCV:=\$(abs_builddir)/../ld/ld-new}"
- : "${CC_FOR_TARGET_RISCV:=${target_alias}-gcc}"
+ : "${AS_FOR_TARGET_RISCV:=\$(AS_FOR_TARGET)}"
+ : "${LD_FOR_TARGET_RISCV:=\$(LD_FOR_TARGET)}"
+ : "${CC_FOR_TARGET_RISCV:=\$(CC_FOR_TARGET)}"
fi
@@ -15406,7 +15608,9 @@ fi
if test "${targ}" = "${target}"; then
SIM_PRIMARY_TARGET=rl78
fi
- ac_config_files="$ac_config_files rl78/Makefile.sim:rl78/Makefile.in"
+ ac_config_files="$ac_config_files rl78/.gdbinit:common/gdbinit.in"
+
+ ac_config_files="$ac_config_files rl78/Makefile.sim:rl78/Makefile.in"
ac_config_commands="$ac_config_commands rl78/Makefile"
@@ -15422,10 +15626,11 @@ fi
+
if test "$SIM_PRIMARY_TARGET" = "rl78"; then :
- : "${AS_FOR_TARGET_RL78:=\$(abs_builddir)/../gas/as-new}"
- : "${LD_FOR_TARGET_RL78:=\$(abs_builddir)/../ld/ld-new}"
- : "${CC_FOR_TARGET_RL78:=${target_alias}-gcc}"
+ : "${AS_FOR_TARGET_RL78:=\$(AS_FOR_TARGET)}"
+ : "${LD_FOR_TARGET_RL78:=\$(LD_FOR_TARGET)}"
+ : "${CC_FOR_TARGET_RL78:=\$(CC_FOR_TARGET)}"
fi
@@ -15446,7 +15651,9 @@ fi
if test "${targ}" = "${target}"; then
SIM_PRIMARY_TARGET=rx
fi
- ac_config_files="$ac_config_files rx/Makefile.sim:rx/Makefile.in"
+ ac_config_files="$ac_config_files rx/.gdbinit:common/gdbinit.in"
+
+ ac_config_files="$ac_config_files rx/Makefile.sim:rx/Makefile.in"
ac_config_commands="$ac_config_commands rx/Makefile"
@@ -15462,10 +15669,11 @@ fi
+
if test "$SIM_PRIMARY_TARGET" = "rx"; then :
- : "${AS_FOR_TARGET_RX:=\$(abs_builddir)/../gas/as-new}"
- : "${LD_FOR_TARGET_RX:=\$(abs_builddir)/../ld/ld-new}"
- : "${CC_FOR_TARGET_RX:=${target_alias}-gcc}"
+ : "${AS_FOR_TARGET_RX:=\$(AS_FOR_TARGET)}"
+ : "${LD_FOR_TARGET_RX:=\$(LD_FOR_TARGET)}"
+ : "${CC_FOR_TARGET_RX:=\$(CC_FOR_TARGET)}"
fi
@@ -15486,7 +15694,9 @@ fi
if test "${targ}" = "${target}"; then
SIM_PRIMARY_TARGET=sh
fi
- ac_config_files="$ac_config_files sh/Makefile.sim:sh/Makefile.in"
+ ac_config_files="$ac_config_files sh/.gdbinit:common/gdbinit.in"
+
+ ac_config_files="$ac_config_files sh/Makefile.sim:sh/Makefile.in"
ac_config_commands="$ac_config_commands sh/Makefile"
@@ -15502,10 +15712,11 @@ fi
+
if test "$SIM_PRIMARY_TARGET" = "sh"; then :
- : "${AS_FOR_TARGET_SH:=\$(abs_builddir)/../gas/as-new}"
- : "${LD_FOR_TARGET_SH:=\$(abs_builddir)/../ld/ld-new}"
- : "${CC_FOR_TARGET_SH:=${target_alias}-gcc}"
+ : "${AS_FOR_TARGET_SH:=\$(AS_FOR_TARGET)}"
+ : "${LD_FOR_TARGET_SH:=\$(LD_FOR_TARGET)}"
+ : "${CC_FOR_TARGET_SH:=\$(CC_FOR_TARGET)}"
fi
@@ -15526,7 +15737,9 @@ fi
if test "${targ}" = "${target}"; then
SIM_PRIMARY_TARGET=erc32
fi
- ac_config_files="$ac_config_files erc32/Makefile.sim:erc32/Makefile.in"
+ ac_config_files="$ac_config_files erc32/.gdbinit:common/gdbinit.in"
+
+ ac_config_files="$ac_config_files erc32/Makefile.sim:erc32/Makefile.in"
ac_config_commands="$ac_config_commands erc32/Makefile"
@@ -15542,10 +15755,11 @@ fi
+
if test "$SIM_PRIMARY_TARGET" = "erc32"; then :
- : "${AS_FOR_TARGET_ERC32:=\$(abs_builddir)/../gas/as-new}"
- : "${LD_FOR_TARGET_ERC32:=\$(abs_builddir)/../ld/ld-new}"
- : "${CC_FOR_TARGET_ERC32:=${target_alias}-gcc}"
+ : "${AS_FOR_TARGET_ERC32:=\$(AS_FOR_TARGET)}"
+ : "${LD_FOR_TARGET_ERC32:=\$(LD_FOR_TARGET)}"
+ : "${CC_FOR_TARGET_ERC32:=\$(CC_FOR_TARGET)}"
fi
@@ -15579,10 +15793,11 @@ fi
+
if test "$SIM_PRIMARY_TARGET" = "v850"; then :
- : "${AS_FOR_TARGET_V850:=\$(abs_builddir)/../gas/as-new}"
- : "${LD_FOR_TARGET_V850:=\$(abs_builddir)/../ld/ld-new}"
- : "${CC_FOR_TARGET_V850:=${target_alias}-gcc}"
+ : "${AS_FOR_TARGET_V850:=\$(AS_FOR_TARGET)}"
+ : "${LD_FOR_TARGET_V850:=\$(LD_FOR_TARGET)}"
+ : "${CC_FOR_TARGET_V850:=\$(CC_FOR_TARGET)}"
fi
@@ -15603,13 +15818,16 @@ fi
- : "${AS_FOR_TARGET_EXAMPLE_SYNACOR:=\$(abs_builddir)/../gas/as-new}"
- : "${LD_FOR_TARGET_EXAMPLE_SYNACOR:=\$(abs_builddir)/../ld/ld-new}"
+
+ : "${AS_FOR_TARGET_EXAMPLE_SYNACOR:=\$(AS_FOR_TARGET)}"
+ : "${LD_FOR_TARGET_EXAMPLE_SYNACOR:=\$(LD_FOR_TARGET)}"
: "${CC_FOR_TARGET_EXAMPLE_SYNACOR:=\$(CC)}"
as_fn_append SIM_TOOLCHAIN_VARS " AS_FOR_TARGET_EXAMPLE_SYNACOR LD_FOR_TARGET_EXAMPLE_SYNACOR CC_FOR_TARGET_EXAMPLE_SYNACOR"
- ac_config_files="$ac_config_files example-synacor/Makefile.sim:example-synacor/Makefile.in"
+ ac_config_files="$ac_config_files example-synacor/.gdbinit:common/gdbinit.in"
+
+ ac_config_files="$ac_config_files example-synacor/Makefile.sim:example-synacor/Makefile.in"
ac_config_commands="$ac_config_commands example-synacor/Makefile"
@@ -16125,7 +16343,7 @@ fi
-ac_config_files="$ac_config_files arch-subdir.mk Makefile"
+ac_config_files="$ac_config_files arch-subdir.mk Makefile .gdbinit:gdbinit.in"
cat >confcache <<\_ACEOF
# This file is a shell script that caches the results of configure
@@ -17294,90 +17512,116 @@ do
"libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
"depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
"Make-common.sim") CONFIG_FILES="$CONFIG_FILES Make-common.sim:common/Make-common.in" ;;
+ "aarch64/.gdbinit") CONFIG_FILES="$CONFIG_FILES aarch64/.gdbinit:common/gdbinit.in" ;;
"aarch64/Makefile.sim") CONFIG_FILES="$CONFIG_FILES aarch64/Makefile.sim:aarch64/Makefile.in" ;;
"aarch64/Makefile") CONFIG_COMMANDS="$CONFIG_COMMANDS aarch64/Makefile" ;;
"depdir-aarch64") CONFIG_COMMANDS="$CONFIG_COMMANDS depdir-aarch64" ;;
+ "arm/.gdbinit") CONFIG_FILES="$CONFIG_FILES arm/.gdbinit:common/gdbinit.in" ;;
"arm/Makefile.sim") CONFIG_FILES="$CONFIG_FILES arm/Makefile.sim:arm/Makefile.in" ;;
"arm/Makefile") CONFIG_COMMANDS="$CONFIG_COMMANDS arm/Makefile" ;;
"depdir-arm") CONFIG_COMMANDS="$CONFIG_COMMANDS depdir-arm" ;;
+ "avr/.gdbinit") CONFIG_FILES="$CONFIG_FILES avr/.gdbinit:common/gdbinit.in" ;;
"avr/Makefile.sim") CONFIG_FILES="$CONFIG_FILES avr/Makefile.sim:avr/Makefile.in" ;;
"avr/Makefile") CONFIG_COMMANDS="$CONFIG_COMMANDS avr/Makefile" ;;
"depdir-avr") CONFIG_COMMANDS="$CONFIG_COMMANDS depdir-avr" ;;
+ "bfin/.gdbinit") CONFIG_FILES="$CONFIG_FILES bfin/.gdbinit:common/gdbinit.in" ;;
"bfin/Makefile.sim") CONFIG_FILES="$CONFIG_FILES bfin/Makefile.sim:bfin/Makefile.in" ;;
"bfin/Makefile") CONFIG_COMMANDS="$CONFIG_COMMANDS bfin/Makefile" ;;
"depdir-bfin") CONFIG_COMMANDS="$CONFIG_COMMANDS depdir-bfin" ;;
"depdir-bpf") CONFIG_COMMANDS="$CONFIG_COMMANDS depdir-bpf" ;;
+ "cr16/.gdbinit") CONFIG_FILES="$CONFIG_FILES cr16/.gdbinit:common/gdbinit.in" ;;
"cr16/Makefile.sim") CONFIG_FILES="$CONFIG_FILES cr16/Makefile.sim:cr16/Makefile.in" ;;
"cr16/Makefile") CONFIG_COMMANDS="$CONFIG_COMMANDS cr16/Makefile" ;;
"depdir-cr16") CONFIG_COMMANDS="$CONFIG_COMMANDS depdir-cr16" ;;
+ "cris/.gdbinit") CONFIG_FILES="$CONFIG_FILES cris/.gdbinit:common/gdbinit.in" ;;
"cris/Makefile.sim") CONFIG_FILES="$CONFIG_FILES cris/Makefile.sim:cris/Makefile.in" ;;
"cris/Makefile") CONFIG_COMMANDS="$CONFIG_COMMANDS cris/Makefile" ;;
"depdir-cris") CONFIG_COMMANDS="$CONFIG_COMMANDS depdir-cris" ;;
+ "d10v/.gdbinit") CONFIG_FILES="$CONFIG_FILES d10v/.gdbinit:common/gdbinit.in" ;;
"d10v/Makefile.sim") CONFIG_FILES="$CONFIG_FILES d10v/Makefile.sim:d10v/Makefile.in" ;;
"d10v/Makefile") CONFIG_COMMANDS="$CONFIG_COMMANDS d10v/Makefile" ;;
"depdir-d10v") CONFIG_COMMANDS="$CONFIG_COMMANDS depdir-d10v" ;;
+ "frv/.gdbinit") CONFIG_FILES="$CONFIG_FILES frv/.gdbinit:common/gdbinit.in" ;;
"frv/Makefile.sim") CONFIG_FILES="$CONFIG_FILES frv/Makefile.sim:frv/Makefile.in" ;;
"frv/Makefile") CONFIG_COMMANDS="$CONFIG_COMMANDS frv/Makefile" ;;
"depdir-frv") CONFIG_COMMANDS="$CONFIG_COMMANDS depdir-frv" ;;
+ "ft32/.gdbinit") CONFIG_FILES="$CONFIG_FILES ft32/.gdbinit:common/gdbinit.in" ;;
"ft32/Makefile.sim") CONFIG_FILES="$CONFIG_FILES ft32/Makefile.sim:ft32/Makefile.in" ;;
"ft32/Makefile") CONFIG_COMMANDS="$CONFIG_COMMANDS ft32/Makefile" ;;
"depdir-ft32") CONFIG_COMMANDS="$CONFIG_COMMANDS depdir-ft32" ;;
+ "h8300/.gdbinit") CONFIG_FILES="$CONFIG_FILES h8300/.gdbinit:common/gdbinit.in" ;;
"h8300/Makefile.sim") CONFIG_FILES="$CONFIG_FILES h8300/Makefile.sim:h8300/Makefile.in" ;;
"h8300/Makefile") CONFIG_COMMANDS="$CONFIG_COMMANDS h8300/Makefile" ;;
"depdir-h8300") CONFIG_COMMANDS="$CONFIG_COMMANDS depdir-h8300" ;;
+ "iq2000/.gdbinit") CONFIG_FILES="$CONFIG_FILES iq2000/.gdbinit:common/gdbinit.in" ;;
"iq2000/Makefile.sim") CONFIG_FILES="$CONFIG_FILES iq2000/Makefile.sim:iq2000/Makefile.in" ;;
"iq2000/Makefile") CONFIG_COMMANDS="$CONFIG_COMMANDS iq2000/Makefile" ;;
"depdir-iq2000") CONFIG_COMMANDS="$CONFIG_COMMANDS depdir-iq2000" ;;
+ "lm32/.gdbinit") CONFIG_FILES="$CONFIG_FILES lm32/.gdbinit:common/gdbinit.in" ;;
"lm32/Makefile.sim") CONFIG_FILES="$CONFIG_FILES lm32/Makefile.sim:lm32/Makefile.in" ;;
"lm32/Makefile") CONFIG_COMMANDS="$CONFIG_COMMANDS lm32/Makefile" ;;
"depdir-lm32") CONFIG_COMMANDS="$CONFIG_COMMANDS depdir-lm32" ;;
+ "m32c/.gdbinit") CONFIG_FILES="$CONFIG_FILES m32c/.gdbinit:common/gdbinit.in" ;;
"m32c/Makefile.sim") CONFIG_FILES="$CONFIG_FILES m32c/Makefile.sim:m32c/Makefile.in" ;;
"m32c/Makefile") CONFIG_COMMANDS="$CONFIG_COMMANDS m32c/Makefile" ;;
"depdir-m32c") CONFIG_COMMANDS="$CONFIG_COMMANDS depdir-m32c" ;;
+ "m32r/.gdbinit") CONFIG_FILES="$CONFIG_FILES m32r/.gdbinit:common/gdbinit.in" ;;
"m32r/Makefile.sim") CONFIG_FILES="$CONFIG_FILES m32r/Makefile.sim:m32r/Makefile.in" ;;
"m32r/Makefile") CONFIG_COMMANDS="$CONFIG_COMMANDS m32r/Makefile" ;;
"depdir-m32r") CONFIG_COMMANDS="$CONFIG_COMMANDS depdir-m32r" ;;
+ "m68hc11/.gdbinit") CONFIG_FILES="$CONFIG_FILES m68hc11/.gdbinit:common/gdbinit.in" ;;
"m68hc11/Makefile.sim") CONFIG_FILES="$CONFIG_FILES m68hc11/Makefile.sim:m68hc11/Makefile.in" ;;
"m68hc11/Makefile") CONFIG_COMMANDS="$CONFIG_COMMANDS m68hc11/Makefile" ;;
"depdir-m68hc11") CONFIG_COMMANDS="$CONFIG_COMMANDS depdir-m68hc11" ;;
+ "mcore/.gdbinit") CONFIG_FILES="$CONFIG_FILES mcore/.gdbinit:common/gdbinit.in" ;;
"mcore/Makefile.sim") CONFIG_FILES="$CONFIG_FILES mcore/Makefile.sim:mcore/Makefile.in" ;;
"mcore/Makefile") CONFIG_COMMANDS="$CONFIG_COMMANDS mcore/Makefile" ;;
"depdir-mcore") CONFIG_COMMANDS="$CONFIG_COMMANDS depdir-mcore" ;;
+ "microblaze/.gdbinit") CONFIG_FILES="$CONFIG_FILES microblaze/.gdbinit:common/gdbinit.in" ;;
"microblaze/Makefile.sim") CONFIG_FILES="$CONFIG_FILES microblaze/Makefile.sim:microblaze/Makefile.in" ;;
"microblaze/Makefile") CONFIG_COMMANDS="$CONFIG_COMMANDS microblaze/Makefile" ;;
"depdir-microblaze") CONFIG_COMMANDS="$CONFIG_COMMANDS depdir-microblaze" ;;
"depdir-mips") CONFIG_COMMANDS="$CONFIG_COMMANDS depdir-mips" ;;
"depdir-mn10300") CONFIG_COMMANDS="$CONFIG_COMMANDS depdir-mn10300" ;;
+ "moxie/.gdbinit") CONFIG_FILES="$CONFIG_FILES moxie/.gdbinit:common/gdbinit.in" ;;
"moxie/Makefile.sim") CONFIG_FILES="$CONFIG_FILES moxie/Makefile.sim:moxie/Makefile.in" ;;
"moxie/Makefile") CONFIG_COMMANDS="$CONFIG_COMMANDS moxie/Makefile" ;;
"depdir-moxie") CONFIG_COMMANDS="$CONFIG_COMMANDS depdir-moxie" ;;
+ "msp430/.gdbinit") CONFIG_FILES="$CONFIG_FILES msp430/.gdbinit:common/gdbinit.in" ;;
"msp430/Makefile.sim") CONFIG_FILES="$CONFIG_FILES msp430/Makefile.sim:msp430/Makefile.in" ;;
"msp430/Makefile") CONFIG_COMMANDS="$CONFIG_COMMANDS msp430/Makefile" ;;
"depdir-msp430") CONFIG_COMMANDS="$CONFIG_COMMANDS depdir-msp430" ;;
"depdir-or1k") CONFIG_COMMANDS="$CONFIG_COMMANDS depdir-or1k" ;;
"depdir-ppc") CONFIG_COMMANDS="$CONFIG_COMMANDS depdir-ppc" ;;
+ "pru/.gdbinit") CONFIG_FILES="$CONFIG_FILES pru/.gdbinit:common/gdbinit.in" ;;
"pru/Makefile.sim") CONFIG_FILES="$CONFIG_FILES pru/Makefile.sim:pru/Makefile.in" ;;
"pru/Makefile") CONFIG_COMMANDS="$CONFIG_COMMANDS pru/Makefile" ;;
"depdir-pru") CONFIG_COMMANDS="$CONFIG_COMMANDS depdir-pru" ;;
"depdir-riscv") CONFIG_COMMANDS="$CONFIG_COMMANDS depdir-riscv" ;;
+ "rl78/.gdbinit") CONFIG_FILES="$CONFIG_FILES rl78/.gdbinit:common/gdbinit.in" ;;
"rl78/Makefile.sim") CONFIG_FILES="$CONFIG_FILES rl78/Makefile.sim:rl78/Makefile.in" ;;
"rl78/Makefile") CONFIG_COMMANDS="$CONFIG_COMMANDS rl78/Makefile" ;;
"depdir-rl78") CONFIG_COMMANDS="$CONFIG_COMMANDS depdir-rl78" ;;
+ "rx/.gdbinit") CONFIG_FILES="$CONFIG_FILES rx/.gdbinit:common/gdbinit.in" ;;
"rx/Makefile.sim") CONFIG_FILES="$CONFIG_FILES rx/Makefile.sim:rx/Makefile.in" ;;
"rx/Makefile") CONFIG_COMMANDS="$CONFIG_COMMANDS rx/Makefile" ;;
"depdir-rx") CONFIG_COMMANDS="$CONFIG_COMMANDS depdir-rx" ;;
+ "sh/.gdbinit") CONFIG_FILES="$CONFIG_FILES sh/.gdbinit:common/gdbinit.in" ;;
"sh/Makefile.sim") CONFIG_FILES="$CONFIG_FILES sh/Makefile.sim:sh/Makefile.in" ;;
"sh/Makefile") CONFIG_COMMANDS="$CONFIG_COMMANDS sh/Makefile" ;;
"depdir-sh") CONFIG_COMMANDS="$CONFIG_COMMANDS depdir-sh" ;;
+ "erc32/.gdbinit") CONFIG_FILES="$CONFIG_FILES erc32/.gdbinit:common/gdbinit.in" ;;
"erc32/Makefile.sim") CONFIG_FILES="$CONFIG_FILES erc32/Makefile.sim:erc32/Makefile.in" ;;
"erc32/Makefile") CONFIG_COMMANDS="$CONFIG_COMMANDS erc32/Makefile" ;;
"depdir-erc32") CONFIG_COMMANDS="$CONFIG_COMMANDS depdir-erc32" ;;
"depdir-v850") CONFIG_COMMANDS="$CONFIG_COMMANDS depdir-v850" ;;
+ "example-synacor/.gdbinit") CONFIG_FILES="$CONFIG_FILES example-synacor/.gdbinit:common/gdbinit.in" ;;
"example-synacor/Makefile.sim") CONFIG_FILES="$CONFIG_FILES example-synacor/Makefile.sim:example-synacor/Makefile.in" ;;
"example-synacor/Makefile") CONFIG_COMMANDS="$CONFIG_COMMANDS example-synacor/Makefile" ;;
"depdir-example-synacor") CONFIG_COMMANDS="$CONFIG_COMMANDS depdir-example-synacor" ;;
"arch-subdir.mk") CONFIG_FILES="$CONFIG_FILES arch-subdir.mk" ;;
"Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+ ".gdbinit") CONFIG_FILES="$CONFIG_FILES .gdbinit:gdbinit.in" ;;
*) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
esac
diff --git a/sim/configure.ac b/sim/configure.ac
index 0c14b1da79e..66a1020efe0 100644
--- a/sim/configure.ac
+++ b/sim/configure.ac
@@ -65,6 +65,7 @@ m4_define([SIM_BUILD_TARGET], [dnl
m4_if($2, [true], [dnl
AC_CONFIG_SUBDIRS($1)
], [dnl
+ AC_CONFIG_FILES($1/.gdbinit:common/gdbinit.in)
AC_CONFIG_FILES($1/Makefile.sim:$1/Makefile.in)
AC_CONFIG_COMMANDS([$1/Makefile],
[sed -n \
@@ -187,5 +188,5 @@ dnl Some arches have unique configure flags.
m4_include([frv/acinclude.m4])
m4_include([rx/acinclude.m4])
-AC_CONFIG_FILES([arch-subdir.mk Makefile])
+AC_CONFIG_FILES([arch-subdir.mk Makefile .gdbinit:gdbinit.in])
AC_OUTPUT
diff --git a/sim/cris/sim-if.c b/sim/cris/sim-if.c
index 602db9aebf4..3589f5bfdce 100644
--- a/sim/cris/sim-if.c
+++ b/sim/cris/sim-if.c
@@ -100,9 +100,11 @@ static const OPTION cris_options[] =
{ {"cris-naked", no_argument, NULL, OPTION_CRIS_NAKED},
'\0', NULL, "Don't set up stack and environment",
cris_option_handler, NULL },
+#if WITH_HW
{ {"cris-900000xx", no_argument, NULL, OPTION_CRIS_900000XXIF},
'\0', NULL, "Define addresses at 0x900000xx with simulator semantics",
cris_option_handler, NULL },
+#endif
{ {"cris-unknown-syscall", required_argument, NULL,
OPTION_CRIS_UNKNOWN_SYSCALL},
'\0', "stop|enosys|enosys-quiet", "Action at an unknown system call",
@@ -887,12 +889,18 @@ sim_open (SIM_OPEN_KIND kind, host_callback *callback, struct bfd *abfd,
/* Allocate core managed memory if none specified by user. */
if (sim_core_read_buffer (sd, NULL, read_map, &c, startmem, 1) == 0)
- sim_do_commandf (sd, "memory region 0x%" PRIx32 ",0x%" PRIu32,
+ sim_do_commandf (sd, "memory region 0x%" PRIx32 ",0x%" PRIx32,
startmem, endmem - startmem);
/* Allocate simulator I/O managed memory if none specified by user. */
+#if WITH_HW
if (cris_have_900000xxif)
sim_hw_parse (sd, "/core/%s/reg %#x %i", "cris_900000xx", 0x90000000, 0x100);
+#else
+ /* With the option disabled, nothing should be able to set this variable.
+ We should "use" it, though, and why not assert that it isn't set. */
+ ASSERT (! cris_have_900000xxif);
+#endif
/* Establish any remaining configuration options. */
if (sim_config (sd) != SIM_RC_OK)
@@ -1009,7 +1017,8 @@ cris_disassemble_insn (SIM_CPU *cpu,
sfile.buffer = sfile.current = buf;
INIT_DISASSEMBLE_INFO (disasm_info, (FILE *) &sfile,
- (fprintf_ftype) sim_disasm_sprintf);
+ (fprintf_ftype) sim_disasm_sprintf,
+ (fprintf_styled_ftype) sim_disasm_styled_sprintf);
disasm_info.endian = BFD_ENDIAN_LITTLE;
disasm_info.read_memory_func = sim_disasm_read_memory;
disasm_info.memory_error_func = sim_disasm_perror_memory;
diff --git a/sim/erc32/interf.c b/sim/erc32/interf.c
index d04d07c08c8..78dec6f4b9b 100644
--- a/sim/erc32/interf.c
+++ b/sim/erc32/interf.c
@@ -244,7 +244,8 @@ sim_open (SIM_OPEN_KIND kind, struct host_callback_struct *callback,
#ifdef F_GETFL
termsave = fcntl(0, F_GETFL, 0);
#endif
- INIT_DISASSEMBLE_INFO(dinfo, stdout,(fprintf_ftype)fprintf);
+ INIT_DISASSEMBLE_INFO(dinfo, stdout,(fprintf_ftype)fprintf,
+ fprintf_styled);
#ifdef HOST_LITTLE_ENDIAN
dinfo.endian = BFD_ENDIAN_LITTLE;
#else
diff --git a/sim/erc32/sis.c b/sim/erc32/sis.c
index 66a27d07506..12eb21f15a7 100644
--- a/sim/erc32/sis.c
+++ b/sim/erc32/sis.c
@@ -139,6 +139,21 @@ run_sim(struct pstate *sregs, uint64_t icount, int dis)
}
int
+fprintf_styled (void *stream, enum disassembler_style style,
+ const char *fmt, ...)
+{
+ int ret;
+ FILE *out = (FILE *) stream;
+ va_list args;
+
+ va_start (args, fmt);
+ ret = vfprintf (out, fmt, args);
+ va_end (args);
+
+ return ret;
+}
+
+int
main(int argc, char **argv)
{
@@ -212,7 +227,8 @@ main(int argc, char **argv)
#endif
sregs.freq = freq;
- INIT_DISASSEMBLE_INFO(dinfo, stdout, (fprintf_ftype) fprintf);
+ INIT_DISASSEMBLE_INFO(dinfo, stdout, (fprintf_ftype) fprintf,
+ (fprintf_styled_ftype) fprintf_styled);
#ifdef HOST_LITTLE_ENDIAN
dinfo.endian = BFD_ENDIAN_LITTLE;
#else
diff --git a/sim/erc32/sis.h b/sim/erc32/sis.h
index 33f16c77ca4..3a276670402 100644
--- a/sim/erc32/sis.h
+++ b/sim/erc32/sis.h
@@ -18,6 +18,7 @@
#include "sim/sim.h"
#include <sim-config.h>
#include <stdint.h>
+#include "dis-asm.h"
#if HOST_BYTE_ORDER == BIG_ENDIAN
#define HOST_BIG_ENDIAN
@@ -203,6 +204,8 @@ extern void init_regs (struct pstate *sregs);
/* interf.c */
extern int run_sim (struct pstate *sregs,
uint64_t icount, int dis);
+extern int fprintf_styled (void *stream, enum disassembler_style style,
+ const char *fmt, ...) ATTRIBUTE_PRINTF (3, 4);
/* float.c */
extern int get_accex (void);
diff --git a/sim/gdbinit.in b/sim/gdbinit.in
new file mode 100644
index 00000000000..f9cd5f32d2f
--- /dev/null
+++ b/sim/gdbinit.in
@@ -0,0 +1,14 @@
+break sim_io_error
+break sim_core_signal
+# This symbol won't exist for non-cgen ports, but shouldn't be a big deal
+# (other than gdb showing a warning on startup).
+break cgen_rtx_error
+
+define dump
+set sim_debug_dump ()
+end
+
+document dump
+Dump cpu and simulator registers for debugging the simulator.
+Requires the simulator to provide function sim_debug_dump.
+end
diff --git a/sim/m32c/trace.c b/sim/m32c/trace.c
index 571df1a1e2a..f5171c298c5 100644
--- a/sim/m32c/trace.c
+++ b/sim/m32c/trace.c
@@ -101,6 +101,18 @@ op_printf (char *buf, char *fmt, ...)
return ret;
}
+static int
+op_styled_printf (char *buf, enum disassembler_style style, char *fmt, ...)
+{
+ int ret;
+ va_list ap;
+
+ va_start (ap, fmt);
+ ret = vsprintf (opbuf + strlen (opbuf), fmt, ap);
+ va_end (ap);
+ return ret;
+}
+
static bfd *current_bfd;
void
@@ -210,7 +222,7 @@ sim_disasm_one (void)
{
initted = 1;
memset (&info, 0, sizeof (info));
- INIT_DISASSEMBLE_INFO (info, stdout, op_printf);
+ INIT_DISASSEMBLE_INFO (info, stdout, op_printf, op_styled_printf);
info.read_memory_func = sim_dis_read;
info.arch = bfd_get_arch (current_bfd);
info.mach = bfd_get_mach (current_bfd);
diff --git a/sim/m4/sim_ac_output.m4 b/sim/m4/sim_ac_output.m4
index 22888bf214c..9eaeeff99f2 100644
--- a/sim/m4/sim_ac_output.m4
+++ b/sim/m4/sim_ac_output.m4
@@ -21,15 +21,8 @@ dnl one afterwards. The two pieces of the common fragment are inserted into
dnl the target's fragment at the appropriate points.
AC_DEFUN([SIM_AC_OUTPUT],
[dnl
-dnl Make @cgen_breaks@ non-null only if the sim uses CGEN.
-cgen_breaks=""
-if grep CGEN_MAINT $srcdir/Makefile.in >/dev/null; then
-cgen_breaks="break cgen_rtx_error";
-fi
-AC_SUBST(cgen_breaks)
AC_CONFIG_FILES(Makefile.sim:Makefile.in)
AC_CONFIG_FILES(Make-common.sim:../common/Make-common.in)
-AC_CONFIG_FILES(.gdbinit:../common/gdbinit.in)
AC_CONFIG_COMMANDS([Makefile],
[echo "Merging Makefile.sim+Make-common.sim into Makefile ..."
rm -f Makesim1.tmp Makesim2.tmp Makefile
diff --git a/sim/m4/sim_ac_toolchain.m4 b/sim/m4/sim_ac_toolchain.m4
index 09b8705c14b..74532142929 100644
--- a/sim/m4/sim_ac_toolchain.m4
+++ b/sim/m4/sim_ac_toolchain.m4
@@ -78,24 +78,31 @@ AC_COMPILE_IFELSE([AC_LANG_SOURCE([
AC_SUBST(C_DIALECT)
])
dnl
+
+AC_DEFUN([SIM_AC_CHECK_TOOLCHAIN_FOR_PRIMARY_TARGET],
+[dnl
+GCC_TARGET_TOOL([cc], [CC_FOR_TARGET], [CC], [${target_alias}-gcc])
+GCC_TARGET_TOOL([as], [AS_FOR_TARGET], [AS], [\$(abs_builddir)/../gas/as-new])
+GCC_TARGET_TOOL([ld], [LD_FOR_TARGET], [LD], [\$(abs_builddir)/../ld/ld-new])
+])
+
SIM_TOOLCHAIN_VARS=
AC_SUBST(SIM_TOOLCHAIN_VARS)
AC_DEFUN([_SIM_AC_TOOLCHAIN_FOR_TARGET],
[dnl
+AC_REQUIRE([SIM_AC_CHECK_TOOLCHAIN_FOR_PRIMARY_TARGET])
AC_ARG_VAR(AS_FOR_TARGET_$2, [Assembler for $1 tests])
AC_ARG_VAR(LD_FOR_TARGET_$2, [Linker for $1 tests])
AC_ARG_VAR(CC_FOR_TARGET_$2, [C compiler for $1 tests])
m4_bmatch($1, [example-], [dnl
- : "${AS_FOR_TARGET_$2:=\$(abs_builddir)/../gas/as-new}"
- : "${LD_FOR_TARGET_$2:=\$(abs_builddir)/../ld/ld-new}"
+ : "${AS_FOR_TARGET_$2:=\$(AS_FOR_TARGET)}"
+ : "${LD_FOR_TARGET_$2:=\$(LD_FOR_TARGET)}"
: "${CC_FOR_TARGET_$2:=\$(CC)}"
], [dnl
AS_IF([test "$SIM_PRIMARY_TARGET" = "$1"], [dnl
- : "${AS_FOR_TARGET_$2:=\$(abs_builddir)/../gas/as-new}"
- : "${LD_FOR_TARGET_$2:=\$(abs_builddir)/../ld/ld-new}"
- dnl The default will be checked at test time. If it's not available, then
- dnl it is automatically skipped. So hardcoding this is safe.
- : "${CC_FOR_TARGET_$2:=${target_alias}-gcc}"
+ : "${AS_FOR_TARGET_$2:=\$(AS_FOR_TARGET)}"
+ : "${LD_FOR_TARGET_$2:=\$(LD_FOR_TARGET)}"
+ : "${CC_FOR_TARGET_$2:=\$(CC_FOR_TARGET)}"
])
])
AS_VAR_APPEND([SIM_TOOLCHAIN_VARS], [" AS_FOR_TARGET_$2 LD_FOR_TARGET_$2 CC_FOR_TARGET_$2"])
diff --git a/sim/mips/Makefile.in b/sim/mips/Makefile.in
index 5c669279ae6..75438be5a18 100644
--- a/sim/mips/Makefile.in
+++ b/sim/mips/Makefile.in
@@ -98,6 +98,7 @@ IGEN_INCLUDE=\
$(srcdir)/dsp.igen \
$(srcdir)/dsp2.igen \
$(srcdir)/mips3264r2.igen \
+ $(srcdir)/mips3264r6.igen \
# NB: Since these can be built by a number of generators, care
# must be taken to ensure that they are only dependant on
diff --git a/sim/mips/configure b/sim/mips/configure
index 2521ce8638d..2f635a50e10 100755
--- a/sim/mips/configure
+++ b/sim/mips/configure
@@ -586,7 +586,6 @@ ac_subst_vars='LTLIBOBJS
LIBOBJS
SIM_COMMON_BUILD_FALSE
SIM_COMMON_BUILD_TRUE
-cgen_breaks
sim_multi_obj
sim_multi_src
sim_multi_igen_configs
@@ -1871,7 +1870,8 @@ case "${target}" in
sim_gen=MULTI
sim_multi_configs="\
micromips:micromips64,micromipsdsp:32,64,f:mips_micromips\
- mips64r2:mips64r2,mips3d,mips16,mips16e,mdmx,dsp,dsp2,smartmips:32,64,f:mipsisa64r2"
+ mipsisa64r2:mips64r2,mips16,mips16e,mdmx,dsp,dsp2,mips3d,smartmips:32,64,f:mipsisa32r2,mipsisa64r2,mipsisa32r5,mipsisa64r5\
+ mipsisa64r6:mips64r6:32,64,f:mipsisa32r6,mipsisa64r6"
sim_multi_default=mipsisa64r2
;;
mips64*-*-*) sim_igen_filter="32,64,f"
@@ -1887,6 +1887,11 @@ case "${target}" in
mips32r2:mips32r2,mips3d,mips16,mips16e,mdmx,dsp,dsp2,smartmips:32,f:mipsisa32r2"
sim_multi_default=mipsisa32r2
;;
+ mipsisa32r6*-*-*) sim_gen=IGEN
+ sim_igen_machine="-M mips32r6"
+ sim_igen_filter="32,f"
+ sim_mach_default="mipsisa32r6"
+ ;;
mipsisa32*-*-*) sim_gen=M16
sim_igen_machine="-M mips32,mips16,mips16e,smartmips"
sim_m16_machine="-M mips16,mips16e,mips32"
@@ -1899,6 +1904,11 @@ case "${target}" in
sim_igen_filter="32,64,f"
sim_mach_default="mipsisa64r2"
;;
+ mipsisa64r6*-*-*) sim_gen=IGEN
+ sim_igen_machine="-M mips64r6"
+ sim_igen_filter="32,64,f"
+ sim_mach_default="mipsisa64r6"
+ ;;
mipsisa64sb1*-*-*) sim_gen=IGEN
sim_igen_machine="-M mips64,mips3d,sb1"
sim_igen_filter="32,64,f"
@@ -1963,7 +1973,7 @@ if test ${sim_gen} = MULTI; then
cat << __EOF__ > multi-run.c
/* Main entry point for MULTI simulators.
- Copyright (C) 2003-2021 Free Software Foundation, Inc.
+ Copyright (C) 2003-2022 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -1985,6 +1995,7 @@ if test ${sim_gen} = MULTI; then
#include "sim-main.h"
#include "multi-include.h"
#include "elf-bfd.h"
+#include "elfxx-mips.h"
#include "elf/mips.h"
#define SD sd
@@ -2004,7 +2015,11 @@ sim_engine_run (SIM_DESC sd,
& EF_MIPS_ARCH_ASE_MICROMIPS)
mach = bfd_mach_mips_micromips;
else
- mach = STATE_ARCHITECTURE (SD)->mach;
+ {
+ mach = _bfd_elf_mips_mach (elf_elfheader (STATE_PROG_BFD (sd))->e_flags);
+ if (!mach)
+ mach = STATE_ARCHITECTURE (SD)->mach;
+ }
switch (mach)
{
@@ -2166,17 +2181,10 @@ sim_micromips_flags=" -F ${sim_micromips_filter} ${sim_micromips_machine} ${si
-cgen_breaks=""
-if grep CGEN_MAINT $srcdir/Makefile.in >/dev/null; then
-cgen_breaks="break cgen_rtx_error";
-fi
-
ac_config_files="$ac_config_files Makefile.sim:Makefile.in"
ac_config_files="$ac_config_files Make-common.sim:../common/Make-common.in"
-ac_config_files="$ac_config_files .gdbinit:../common/gdbinit.in"
-
ac_config_commands="$ac_config_commands Makefile"
ac_config_commands="$ac_config_commands stamp-h"
@@ -2901,7 +2909,6 @@ do
case $ac_config_target in
"Makefile.sim") CONFIG_FILES="$CONFIG_FILES Makefile.sim:Makefile.in" ;;
"Make-common.sim") CONFIG_FILES="$CONFIG_FILES Make-common.sim:../common/Make-common.in" ;;
- ".gdbinit") CONFIG_FILES="$CONFIG_FILES .gdbinit:../common/gdbinit.in" ;;
"Makefile") CONFIG_COMMANDS="$CONFIG_COMMANDS Makefile" ;;
"stamp-h") CONFIG_COMMANDS="$CONFIG_COMMANDS stamp-h" ;;
diff --git a/sim/mips/configure.ac b/sim/mips/configure.ac
index 2ec9f0f9d4f..96806424958 100644
--- a/sim/mips/configure.ac
+++ b/sim/mips/configure.ac
@@ -102,7 +102,8 @@ case "${target}" in
sim_gen=MULTI
sim_multi_configs="\
micromips:micromips64,micromipsdsp:32,64,f:mips_micromips\
- mips64r2:mips64r2,mips3d,mips16,mips16e,mdmx,dsp,dsp2,smartmips:32,64,f:mipsisa64r2"
+ mipsisa64r2:mips64r2,mips16,mips16e,mdmx,dsp,dsp2,mips3d,smartmips:32,64,f:mipsisa32r2,mipsisa64r2,mipsisa32r5,mipsisa64r5\
+ mipsisa64r6:mips64r6:32,64,f:mipsisa32r6,mipsisa64r6"
sim_multi_default=mipsisa64r2
;;
mips64*-*-*) sim_igen_filter="32,64,f"
@@ -118,6 +119,11 @@ case "${target}" in
mips32r2:mips32r2,mips3d,mips16,mips16e,mdmx,dsp,dsp2,smartmips:32,f:mipsisa32r2"
sim_multi_default=mipsisa32r2
;;
+ mipsisa32r6*-*-*) sim_gen=IGEN
+ sim_igen_machine="-M mips32r6"
+ sim_igen_filter="32,f"
+ sim_mach_default="mipsisa32r6"
+ ;;
mipsisa32*-*-*) sim_gen=M16
sim_igen_machine="-M mips32,mips16,mips16e,smartmips"
sim_m16_machine="-M mips16,mips16e,mips32"
@@ -130,6 +136,11 @@ case "${target}" in
sim_igen_filter="32,64,f"
sim_mach_default="mipsisa64r2"
;;
+ mipsisa64r6*-*-*) sim_gen=IGEN
+ sim_igen_machine="-M mips64r6"
+ sim_igen_filter="32,64,f"
+ sim_mach_default="mipsisa64r6"
+ ;;
mipsisa64sb1*-*-*) sim_gen=IGEN
sim_igen_machine="-M mips64,mips3d,sb1"
sim_igen_filter="32,64,f"
@@ -216,6 +227,7 @@ if test ${sim_gen} = MULTI; then
#include "sim-main.h"
#include "multi-include.h"
#include "elf-bfd.h"
+#include "elfxx-mips.h"
#include "elf/mips.h"
#define SD sd
@@ -235,7 +247,11 @@ sim_engine_run (SIM_DESC sd,
& EF_MIPS_ARCH_ASE_MICROMIPS)
mach = bfd_mach_mips_micromips;
else
- mach = STATE_ARCHITECTURE (SD)->mach;
+ {
+ mach = _bfd_elf_mips_mach (elf_elfheader (STATE_PROG_BFD (sd))->e_flags);
+ if (!mach)
+ mach = STATE_ARCHITECTURE (SD)->mach;
+ }
switch (mach)
{
diff --git a/sim/mips/cp1.c b/sim/mips/cp1.c
index a6d1b56fdb7..196173c0227 100644
--- a/sim/mips/cp1.c
+++ b/sim/mips/cp1.c
@@ -100,6 +100,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */
#define FPQNaN_LONG (UNSIGNED64 (0x7FFFFFFFFFFFFFFF))
#define FPQNaN_PS (FP_PS_cat (FPQNaN_SINGLE, FPQNaN_SINGLE))
+static void update_fcsr (sim_cpu *, address_word, sim_fpu_status);
+
static const char *fpu_format_name (FP_formats fmt);
#ifdef DEBUG
static const char *fpu_rounding_mode_name (int rm);
@@ -127,7 +129,7 @@ value_fpr (sim_cpu *cpu,
}
/* For values not yet accessed, set to the desired format. */
- if (fmt < fmt_uninterpreted)
+ if (fmt < fmt_uninterpreted && fmt != fmt_dc32)
{
if (FPR_STATE[fpr] == fmt_uninterpreted)
{
@@ -137,7 +139,10 @@ value_fpr (sim_cpu *cpu,
fpu_format_name (fmt));
#endif /* DEBUG */
}
- else if (fmt != FPR_STATE[fpr])
+ else if (fmt != FPR_STATE[fpr]
+ && !(fmt == fmt_single
+ && FPR_STATE[fpr] == fmt_double
+ && (FGR[fpr] == 0 || FGR[fpr] == 0xFFFFFFFF)))
{
sim_io_eprintf (SD, "FPR %d (format %s) being accessed with format %s - setting to unknown (PC = 0x%s)\n",
fpr, fpu_format_name (FPR_STATE[fpr]),
@@ -166,6 +171,7 @@ value_fpr (sim_cpu *cpu,
case fmt_uninterpreted_32:
case fmt_single:
case fmt_word:
+ case fmt_dc32:
value = (FGR[fpr] & 0xFFFFFFFF);
break;
@@ -557,8 +563,8 @@ fp_test(uint64_t op1,
if (sim_fpu_is_nan (&wop1) || sim_fpu_is_nan (&wop2))
{
- if ((cond & (1 << 3)) ||
- sim_fpu_is_snan (&wop1) || sim_fpu_is_snan (&wop2))
+ if ((cond & (1 << 3))
+ || sim_fpu_is_snan (&wop1) || sim_fpu_is_snan (&wop2))
status = sim_fpu_status_invalid_snan;
less = 0;
equal = 0;
@@ -581,6 +587,109 @@ fp_test(uint64_t op1,
return status;
}
+static const int sim_fpu_class_mips_mapping[] = {
+ FP_R6CLASS_SNAN, /* SIM_FPU_IS_SNAN = 1, Noisy not-a-number */
+ FP_R6CLASS_QNAN, /* SIM_FPU_IS_QNAN = 2, Quiet not-a-number */
+ FP_R6CLASS_NEGINF, /* SIM_FPU_IS_NINF = 3, -infinity */
+ FP_R6CLASS_POSINF, /* SIM_FPU_IS_PINF = 4, +infinity */
+ FP_R6CLASS_NEGNORM, /* SIM_FPU_IS_NNUMBER = 5, -num - [-MAX .. -MIN] */
+ FP_R6CLASS_POSNORM, /* SIM_FPU_IS_PNUMBER = 6, +num - [+MIN .. +MAX] */
+ FP_R6CLASS_NEGSUB, /* SIM_FPU_IS_NDENORM = 7, -denorm - (MIN .. 0) */
+ FP_R6CLASS_POSSUB, /* SIM_FPU_IS_PDENORM = 8, +denorm - (0 .. MIN) */
+ FP_R6CLASS_NEGZERO, /* SIM_FPU_IS_NZERO = 9, -0 */
+ FP_R6CLASS_POSZERO /* SIM_FPU_IS_PZERO = 10, +0 */
+};
+
+uint64_t
+fp_classify (sim_cpu *cpu,
+ address_word cia,
+ uint64_t op,
+ FP_formats fmt)
+{
+ sim_fpu wop;
+
+ switch (fmt)
+ {
+ case fmt_single:
+ sim_fpu_32to (&wop, op);
+ break;
+ case fmt_double:
+ sim_fpu_64to (&wop, op);
+ break;
+ default:
+ sim_io_error (SD, "Bad switch\n");
+ }
+ return sim_fpu_class_mips_mapping[sim_fpu_classify (&wop) - 1];
+}
+
+int
+fp_rint (sim_cpu *cpu,
+ address_word cia,
+ uint64_t op,
+ uint64_t *ans,
+ FP_formats fmt)
+{
+ sim_fpu wop = {0}, wtemp = {0}, wmagic = {0}, wans = {0};
+ int64_t intermediate;
+ int status = 0;
+ sim_fpu_round round = rounding_mode (GETRM());
+
+ switch (fmt)
+ {
+ case fmt_single:
+ sim_fpu_32to (&wop, op);
+ sim_fpu_32to (&wmagic, 0x4b000000);
+ break;
+ case fmt_double:
+ sim_fpu_64to (&wop, op);
+ sim_fpu_64to (&wmagic, 0x4330000000000000);
+ break;
+ default:
+ sim_io_error (SD, "Bad switch\n");
+ }
+
+ if (sim_fpu_is_nan (&wop) || sim_fpu_is_infinity (&wop))
+ {
+ status = sim_fpu_status_invalid_cvi;
+ update_fcsr (cpu, cia, status);
+ return status;
+ }
+
+ switch (fmt)
+ {
+ case fmt_single:
+ if (sim_fpu_is_ge (&wop, &wmagic))
+ wans = wop;
+ else
+ {
+ sim_fpu_add (&wtemp, &wop, &wmagic);
+ sim_fpu_round_32 (&wtemp, round, sim_fpu_denorm_default);
+ sim_fpu_sub (&wans, &wtemp, &wmagic);
+ }
+ sim_fpu_to32 ((uint32_t *) ans, &wans);
+ break;
+ case fmt_double:
+ if (sim_fpu_is_ge (&wop, &wmagic))
+ wans = wop;
+ else
+ {
+ sim_fpu_add (&wtemp, &wop, &wmagic);
+ sim_fpu_round_64 (&wtemp, round, sim_fpu_denorm_default);
+ sim_fpu_sub (&wans, &wtemp, &wmagic);
+ }
+ sim_fpu_to64 (ans, &wans);
+ break;
+ default:
+ sim_io_error (SD, "Bad switch\n");
+ }
+
+ if (*ans != op && status == 0)
+ status = sim_fpu_status_inexact;
+
+ update_fcsr (cpu, cia, status);
+ return status;
+}
+
void
fp_cmp(sim_cpu *cpu,
address_word cia,
@@ -620,11 +729,91 @@ fp_cmp(sim_cpu *cpu,
break;
}
default:
- sim_io_eprintf (SD, "Bad switch\n");
- abort ();
+ sim_io_error (SD, "Bad switch\n");
}
}
+uint64_t
+fp_r6_cmp (sim_cpu *cpu,
+ address_word cia,
+ uint64_t op1,
+ uint64_t op2,
+ FP_formats fmt,
+ int cond)
+{
+ sim_fpu wop1, wop2;
+ int result = 0;
+ int signalling = cond & 0x8;
+
+ switch (fmt)
+ {
+ case fmt_single:
+ sim_fpu_32to (&wop1, op1);
+ sim_fpu_32to (&wop2, op2);
+ break;
+ case fmt_double:
+ sim_fpu_64to (&wop1, op1);
+ sim_fpu_64to (&wop2, op2);
+ break;
+ default:
+ sim_io_error (SD, "Bad switch\n");
+ }
+
+ switch (cond)
+ {
+ case FP_R6CMP_AF:
+ result = 0;
+ break;
+ case FP_R6CMP_UN:
+ result = sim_fpu_is_un (&wop1, &wop2);
+ break;
+ case FP_R6CMP_OR:
+ result = sim_fpu_is_or (&wop1, &wop2);
+ break;
+ case FP_R6CMP_EQ:
+ result = sim_fpu_is_eq (&wop1, &wop2);
+ break;
+ case FP_R6CMP_NE:
+ result = sim_fpu_is_ne (&wop1, &wop2);
+ break;
+ case FP_R6CMP_LT:
+ result = sim_fpu_is_lt (&wop1, &wop2);
+ break;
+ case FP_R6CMP_LE:
+ result = sim_fpu_is_le (&wop1, &wop2);
+ break;
+ case FP_R6CMP_UEQ:
+ result = sim_fpu_is_un (&wop1, &wop2) || sim_fpu_is_eq (&wop1, &wop2);
+ break;
+ case FP_R6CMP_UNE:
+ result = sim_fpu_is_un (&wop1, &wop2) || sim_fpu_is_ne (&wop1, &wop2);
+ break;
+ case FP_R6CMP_ULT:
+ result = sim_fpu_is_un (&wop1, &wop2) || sim_fpu_is_lt (&wop1, &wop2);
+ break;
+ case FP_R6CMP_ULE:
+ result = sim_fpu_is_un (&wop1, &wop2) || sim_fpu_is_le (&wop1, &wop2);
+ break;
+ default:
+ update_fcsr (cpu, cia, sim_fpu_status_invalid_cmp);
+ break;
+ }
+
+ if (result)
+ {
+ switch (fmt)
+ {
+ case fmt_single:
+ return 0xFFFFFFFF;
+ case fmt_double:
+ return 0xFFFFFFFFFFFFFFFF;
+ default:
+ sim_io_error (SD, "Bad switch\n");
+ }
+ }
+ else
+ return 0;
+}
/* Basic arithmetic operations. */
@@ -635,7 +824,7 @@ fp_unary(sim_cpu *cpu,
uint64_t op,
FP_formats fmt)
{
- sim_fpu wop;
+ sim_fpu wop = {0};
sim_fpu ans;
sim_fpu_round round = rounding_mode (GETRM());
sim_fpu_denorm denorm = denorm_mode (cpu);
@@ -680,8 +869,7 @@ fp_unary(sim_cpu *cpu,
break;
}
default:
- sim_io_eprintf (SD, "Bad switch\n");
- abort ();
+ sim_io_error (SD, "Bad switch\n");
}
update_fcsr (cpu, cia, status);
@@ -696,9 +884,9 @@ fp_binary(sim_cpu *cpu,
uint64_t op2,
FP_formats fmt)
{
- sim_fpu wop1;
- sim_fpu wop2;
- sim_fpu ans;
+ sim_fpu wop1 = {0};
+ sim_fpu wop2 = {0};
+ sim_fpu ans = {0};
sim_fpu_round round = rounding_mode (GETRM());
sim_fpu_denorm denorm = denorm_mode (cpu);
sim_fpu_status status = 0;
@@ -746,8 +934,7 @@ fp_binary(sim_cpu *cpu,
break;
}
default:
- sim_io_eprintf (SD, "Bad switch\n");
- abort ();
+ sim_io_error (SD, "Bad switch\n");
}
update_fcsr (cpu, cia, status);
@@ -786,7 +973,7 @@ inner_mac(int (*sim_fpu_op)(sim_fpu *, const sim_fpu *, const sim_fpu *),
ans.normal_exp += scale;
status |= sim_fpu_round_32 (&ans, round, denorm);
wop1 = ans;
- op_status = 0;
+ op_status = 0;
sim_fpu_32to (&wop2, op3);
op_status |= (*sim_fpu_op) (&ans, &wop1, &wop2);
op_status |= sim_fpu_round_32 (&ans, round, denorm);
@@ -812,7 +999,7 @@ inner_mac(int (*sim_fpu_op)(sim_fpu *, const sim_fpu *, const sim_fpu *),
ans.normal_exp += scale;
status |= sim_fpu_round_64 (&ans, round, denorm);
wop1 = ans;
- op_status = 0;
+ op_status = 0;
sim_fpu_64to (&wop2, op3);
op_status |= (*sim_fpu_op) (&ans, &wop1, &wop2);
op_status |= sim_fpu_round_64 (&ans, round, denorm);
@@ -881,8 +1068,89 @@ fp_mac(sim_cpu *cpu,
break;
}
default:
- sim_io_eprintf (SD, "Bad switch\n");
- abort ();
+ sim_io_error (SD, "Bad switch\n");
+ }
+
+ update_fcsr (cpu, cia, status);
+ return result;
+}
+
+/* Common FMAC code for .s, .d. Defers setting FCSR to caller. */
+static sim_fpu_status
+inner_fmac (sim_cpu *cpu,
+ int (*sim_fpu_op) (sim_fpu *, const sim_fpu *, const sim_fpu *),
+ uint64_t op1,
+ uint64_t op2,
+ uint64_t op3,
+ sim_fpu_round round,
+ sim_fpu_denorm denorm,
+ FP_formats fmt,
+ uint64_t *result)
+{
+ sim_fpu wop1, wop2, ans;
+ sim_fpu_status status = 0;
+ sim_fpu_status op_status;
+ uint32_t t32 = 0;
+ uint64_t t64 = 0;
+
+ switch (fmt)
+ {
+ case fmt_single:
+ sim_fpu_32to (&wop1, op1);
+ sim_fpu_32to (&wop2, op2);
+ status |= sim_fpu_mul (&ans, &wop1, &wop2);
+ wop1 = ans;
+ op_status = 0;
+ sim_fpu_32to (&wop2, op3);
+ op_status |= (*sim_fpu_op) (&ans, &wop2, &wop1);
+ op_status |= sim_fpu_round_32 (&ans, round, denorm);
+ status |= op_status;
+ sim_fpu_to32 (&t32, &ans);
+ t64 = t32;
+ break;
+ case fmt_double:
+ sim_fpu_64to (&wop1, op1);
+ sim_fpu_64to (&wop2, op2);
+ status |= sim_fpu_mul (&ans, &wop1, &wop2);
+ wop1 = ans;
+ op_status = 0;
+ sim_fpu_64to (&wop2, op3);
+ op_status |= (*sim_fpu_op) (&ans, &wop2, &wop1);
+ op_status |= sim_fpu_round_64 (&ans, round, denorm);
+ status |= op_status;
+ sim_fpu_to64 (&t64, &ans);
+ break;
+ default:
+ sim_io_error (SD, "Bad switch\n");
+ }
+
+ *result = t64;
+ return status;
+}
+
+static uint64_t
+fp_fmac (sim_cpu *cpu,
+ address_word cia,
+ int (*sim_fpu_op) (sim_fpu *, const sim_fpu *, const sim_fpu *),
+ uint64_t op1,
+ uint64_t op2,
+ uint64_t op3,
+ FP_formats fmt)
+{
+ sim_fpu_round round = rounding_mode (GETRM());
+ sim_fpu_denorm denorm = denorm_mode (cpu);
+ sim_fpu_status status = 0;
+ uint64_t result = 0;
+
+ switch (fmt)
+ {
+ case fmt_single:
+ case fmt_double:
+ status = inner_fmac (cpu, sim_fpu_op, op1, op2, op3,
+ round, denorm, fmt, &result);
+ break;
+ default:
+ sim_io_error (SD, "Bad switch\n");
}
update_fcsr (cpu, cia, status);
@@ -972,8 +1240,7 @@ fp_inv_sqrt(sim_cpu *cpu,
break;
}
default:
- sim_io_eprintf (SD, "Bad switch\n");
- abort ();
+ sim_io_error (SD, "Bad switch\n");
}
update_fcsr (cpu, cia, status);
@@ -1040,6 +1307,94 @@ fp_div(sim_cpu *cpu,
}
uint64_t
+fp_min (sim_cpu *cpu,
+ address_word cia,
+ uint64_t op1,
+ uint64_t op2,
+ FP_formats fmt)
+{
+ return fp_binary (cpu, cia, &sim_fpu_min, op1, op2, fmt);
+}
+
+uint64_t
+fp_max (sim_cpu *cpu,
+ address_word cia,
+ uint64_t op1,
+ uint64_t op2,
+ FP_formats fmt)
+{
+ return fp_binary (cpu, cia, &sim_fpu_max, op1, op2, fmt);
+}
+
+uint64_t
+fp_mina (sim_cpu *cpu,
+ address_word cia,
+ uint64_t op1,
+ uint64_t op2,
+ FP_formats fmt)
+{
+ uint64_t ret;
+ sim_fpu wop1 = {0}, wop2 = {0}, waop1, waop2, wans;
+ sim_fpu_status status = 0;
+
+ switch (fmt)
+ {
+ case fmt_single:
+ sim_fpu_32to (&wop1, op1);
+ sim_fpu_32to (&wop2, op2);
+ break;
+ case fmt_double:
+ sim_fpu_64to (&wop1, op1);
+ sim_fpu_64to (&wop2, op2);
+ break;
+ default:
+ sim_io_error (SD, "Bad switch\n");
+ }
+
+ status |= sim_fpu_abs (&waop1, &wop1);
+ status |= sim_fpu_abs (&waop2, &wop2);
+ status |= sim_fpu_min (&wans, &waop1, &waop2);
+ ret = (sim_fpu_is_eq (&wans, &waop1)) ? op1 : op2;
+
+ update_fcsr (cpu, cia, status);
+ return ret;
+}
+
+uint64_t
+fp_maxa (sim_cpu *cpu,
+ address_word cia,
+ uint64_t op1,
+ uint64_t op2,
+ FP_formats fmt)
+{
+ uint64_t ret;
+ sim_fpu wop1 = {0}, wop2 = {0}, waop1, waop2, wans;
+ sim_fpu_status status = 0;
+
+ switch (fmt)
+ {
+ case fmt_single:
+ sim_fpu_32to (&wop1, op1);
+ sim_fpu_32to (&wop2, op2);
+ break;
+ case fmt_double:
+ sim_fpu_64to (&wop1, op1);
+ sim_fpu_64to (&wop2, op2);
+ break;
+ default:
+ sim_io_error (SD, "Bad switch\n");
+ }
+
+ status |= sim_fpu_abs (&waop1, &wop1);
+ status |= sim_fpu_abs (&waop2, &wop2);
+ status |= sim_fpu_max (&wans, &waop1, &waop2);
+ ret = (sim_fpu_is_eq (&wans, &waop1)) ? op1 : op2;
+
+ update_fcsr (cpu, cia, status);
+ return ret;
+}
+
+uint64_t
fp_recip(sim_cpu *cpu,
address_word cia,
uint64_t op,
@@ -1089,6 +1444,28 @@ fp_msub(sim_cpu *cpu,
}
uint64_t
+fp_fmadd (sim_cpu *cpu,
+ address_word cia,
+ uint64_t op1,
+ uint64_t op2,
+ uint64_t op3,
+ FP_formats fmt)
+{
+ return fp_fmac (cpu, cia, &sim_fpu_add, op1, op2, op3, fmt);
+}
+
+uint64_t
+fp_fmsub (sim_cpu *cpu,
+ address_word cia,
+ uint64_t op1,
+ uint64_t op2,
+ uint64_t op3,
+ FP_formats fmt)
+{
+ return fp_fmac (cpu, cia, &sim_fpu_sub, op1, op2, op3, fmt);
+}
+
+uint64_t
fp_nmadd(sim_cpu *cpu,
address_word cia,
uint64_t op1,
@@ -1394,8 +1771,7 @@ convert (sim_cpu *cpu,
status = sim_fpu_i64to (&wop, op, round);
break;
default:
- sim_io_eprintf (SD, "Bad switch\n");
- abort ();
+ sim_io_error (SD, "Bad switch\n");
}
/* Convert sim_fpu format into the output */
@@ -1430,8 +1806,7 @@ convert (sim_cpu *cpu,
break;
default:
result64 = 0;
- sim_io_eprintf (SD, "Bad switch\n");
- abort ();
+ sim_io_error (SD, "Bad switch\n");
}
update_fcsr (cpu, cia, status);
@@ -1481,8 +1856,7 @@ pack_ps(sim_cpu *cpu,
break;
}
default:
- sim_io_eprintf (SD, "Bad switch\n");
- abort ();
+ sim_io_error (SD, "Bad switch\n");
}
return result;
@@ -1517,8 +1891,7 @@ convert_ps (sim_cpu *cpu,
sim_fpu_32to (&wop_l, FP_PS_lower(op));
break;
default:
- sim_io_eprintf (SD, "Bad switch\n");
- abort ();
+ sim_io_error (SD, "Bad switch\n");
}
/* Convert sim_fpu format into the output */
@@ -1538,8 +1911,7 @@ convert_ps (sim_cpu *cpu,
break;
default:
result = 0;
- sim_io_eprintf (SD, "Bad switch\n");
- abort ();
+ sim_io_error (SD, "Bad switch\n");
}
update_fcsr (cpu, cia, status_u | status_l);
diff --git a/sim/mips/cp1.h b/sim/mips/cp1.h
index 96c51a7b736..5622b9384d9 100644
--- a/sim/mips/cp1.h
+++ b/sim/mips/cp1.h
@@ -40,6 +40,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */
#define fcsr_RM_mask (0x00000003)
#define fcsr_RM_shift (0)
+/* FCSR bits for IEEE754-2008 compliance. */
+#define fcsr_NAN2008_mask (0x00040000)
+#define fcsr_NAN2008_shift (18)
+#define fcsr_ABS2008_mask (0x00080000)
+#define fcsr_ABS2008_shift (19)
+
#define fenr_FS (0x00000004)
/* Macros to update and retrieve the FCSR condition-code bits. This
diff --git a/sim/mips/interp.c b/sim/mips/interp.c
index 65015623ee5..c5d0901428b 100644
--- a/sim/mips/interp.c
+++ b/sim/mips/interp.c
@@ -1549,6 +1549,10 @@ store_word (SIM_DESC sd,
}
}
+#define MIPSR6_P(abfd) \
+ ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R6 \
+ || (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64R6)
+
/* Load a word from memory. */
static signed_word
@@ -1557,7 +1561,7 @@ load_word (SIM_DESC sd,
address_word cia,
uword64 vaddr)
{
- if ((vaddr & 3) != 0)
+ if ((vaddr & 3) != 0 && !MIPSR6_P (STATE_PROG_BFD (sd)))
{
SIM_CORE_SIGNAL (SD, cpu, cia, read_map, AccessLength_WORD+1, vaddr, read_transfer, sim_core_unaligned_signal);
}
diff --git a/sim/mips/micromips.igen b/sim/mips/micromips.igen
index acbff6f2db2..bb61b3f26e6 100644
--- a/sim/mips/micromips.igen
+++ b/sim/mips/micromips.igen
@@ -1761,7 +1761,7 @@
*micromips32:
*micromips64:
{
- do_sc (SD_, RT, EXTEND12 (IMMEDIATE), BASE, instruction_0);
+ do_sc (SD_, RT, EXTEND12 (IMMEDIATE), BASE, instruction_0, 1);
}
@@ -3074,7 +3074,7 @@
*micromips64:
{
check_u64 (SD_, instruction_0);
- do_scd (SD_, RT, OFFSET, BASE);
+ do_scd (SD_, RT, OFFSET, BASE, 1);
}
110110,5.RT,5.BASE,16.OFFSET:MICROMIPS64:64::SD
diff --git a/sim/mips/mips.igen b/sim/mips/mips.igen
index c5db5c2304f..dfad4227615 100644
--- a/sim/mips/mips.igen
+++ b/sim/mips/mips.igen
@@ -46,8 +46,10 @@
:model:::mipsV:mipsisaV:
:model:::mips32:mipsisa32:
:model:::mips32r2:mipsisa32r2:
+:model:::mips32r6:mipsisa32r6:
:model:::mips64:mipsisa64:
:model:::mips64r2:mipsisa64r2:
+:model:::mips64r6:mipsisa64r6:
// Vendor ISAs:
//
@@ -102,7 +104,28 @@
-// Helper:
+// Helpers:
+//
+// Check if given instruction is CTI, if so signal
+//
+:function:::void:signal_if_cti:instruction_word instr
+{
+ uint32_t maj = (instr & 0xfc000000) >> 26;
+ uint32_t special = instr & 0x3f;
+ if ((maj & 0x3e) == 0x06 /* Branch/Jump */
+ || ((maj & 0x38) == 0 && !((maj & 0x6) == 0))
+ || maj == 0x18
+ || (maj & 0x37) == 0x32
+ || (maj & 0x37) == 0x36
+ || ((maj == 0) && (special == 0x9))
+ /* DERET/ERET/WAIT */
+ || ((maj == 0x10) && (instr & 0x02000000)
+ && (special == 0x1f || special == 0x18 || special == 0x20)))
+ {
+ SignalException (ReservedInstruction, instr);
+ }
+}
+
//
// Simulate a 32 bit delayslot instruction
//
@@ -115,12 +138,34 @@
CIA = CIA + 4; /* NOTE not mips16 */
STATE |= simDELAYSLOT;
delay_insn = IMEM32 (CIA); /* NOTE not mips16 */
+ signal_if_cti (SD_, delay_insn);
ENGINE_ISSUE_PREFIX_HOOK();
idecode_issue (CPU_, delay_insn, (CIA));
STATE &= ~simDELAYSLOT;
return target;
}
+//
+// Simulate a 32 bit forbidden slot instruction
+//
+
+:function:::address_word:forbiddenslot32:
+*mips32r6:
+*mips64r6:
+{
+ instruction_word delay_insn;
+ sim_events_slip (SD, 1);
+ DSPC = CIA;
+ CIA = CIA + 4;
+ STATE |= simFORBIDDENSLOT;
+ delay_insn = IMEM32 (CIA);
+ signal_if_cti (SD_, delay_insn);
+ ENGINE_ISSUE_PREFIX_HOOK ();
+ idecode_issue (CPU_, delay_insn, (CIA));
+ STATE &= ~simFORBIDDENSLOT;
+ return CIA + 4;
+}
+
:function:::address_word:nullify_next_insn32:
{
sim_events_slip (SD, 1);
@@ -142,6 +187,7 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*vr4100:
*vr5000:
*r3900:
@@ -154,6 +200,7 @@
*mips64:
*mips64r2:
*micromips64:
+*mips64r6:
{
#if 0 /* XXX FIXME: enable this only after some additional testing. */
/* If in user mode and UX is not set, use 32-bit compatibility effective
@@ -184,10 +231,12 @@
*r3900:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
*micromips32:
*micromips64:
+*mips64r6:
{
#if WITH_TARGET_WORD_BITSIZE == 64
return value != (((value & 0xffffffff) ^ 0x80000000) - 0x80000000);
@@ -219,10 +268,12 @@
:function:::void:unpredictable:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
*micromips32:
*micromips64:
+*mips64r6:
{
unpredictable_action (CPU, CIA);
}
@@ -311,8 +362,10 @@
:function:::int:check_mt_hilo:hilo_history *history
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*r3900:
*micromips32:
*micromips64:
@@ -337,8 +390,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -411,8 +466,10 @@
:function:::int:check_mult_hilo:hilo_history *hi, hilo_history *lo
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*r3900:
*micromips32:
*micromips64:
@@ -468,10 +525,12 @@
:function:::int:check_div_hilo:hilo_history *hi, hilo_history *lo
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
*micromips32:
*micromips64:
+*mips64r6:
{
int64_t time = sim_events_time (SD);
hi->op.timestamp = time;
@@ -507,8 +566,10 @@
*mips64r2:
*mips32:
*mips32r2:
+*mips32r6:
*micromips64:
*micromips32:
+*mips64r6:
{
#if 0 /* XXX FIXME: enable this only after some additional testing. */
if (UserMode && (SR & (status_UX|status_PX)) == 0)
@@ -1081,7 +1142,7 @@
}
}
-:function:::void:do_sc:int rt, int offsetarg, int basereg, address_word instruction_0
+:function:::void:do_sc:int rt, int offsetarg, int basereg, address_word instruction_0, int store_ll_bit
{
uint32_t instruction = instruction_0;
address_word base = GPR[basereg];
@@ -1111,12 +1172,13 @@
if (LLBIT)
StoreMemory (AccessLength_WORD, memval, memval1, paddr, vaddr,
isREAL);
- GPR[rt] = LLBIT;
+ if (store_ll_bit)
+ GPR[rt] = LLBIT;
}
}
}
-:function:::void:do_scd:int rt, int roffset, int rbase
+:function:::void:do_scd:int rt, int roffset, int rbase, int store_ll_bit
{
address_word base = GPR[rbase];
address_word offset = EXTEND16 (roffset);
@@ -1137,7 +1199,8 @@
if (LLBIT)
StoreMemory (AccessLength_DOUBLEWORD, memval, memval1, paddr, vaddr,
isREAL);
- GPR[rt] = LLBIT;
+ if (store_ll_bit)
+ GPR[rt] = LLBIT;
}
}
}
@@ -1376,6 +1439,7 @@
*mipsV:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -1633,6 +1697,7 @@
*mipsII:
*mips32:
*mips32r2:
+*mips32r6:
*micromips32:
{
check_fpu (SD_);
@@ -1763,8 +1828,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -1812,8 +1879,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -1841,8 +1910,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -1868,8 +1939,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -1888,8 +1961,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -1922,6 +1997,17 @@
}
+000100,5.RS,5.RT,16.OFFSET:R6:32::BEQ
+"beq r<RS>, r<RT>, <OFFSET>"
+*mips32r6:
+*mips64r6:
+{
+ address_word offset = EXTEND16 (OFFSET) << 2;
+ if (GPR[RS] == GPR[RT])
+ DELAY_SLOT (NIA + offset);
+ else
+ FORBIDDEN_SLOT ();
+}
010100,5.RS,5.RT,16.OFFSET:NORMAL:32::BEQL
"beql r<RS>, r<RT>, <OFFSET>"
@@ -1957,8 +2043,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -1997,7 +2085,15 @@
}
}
-
+000001,00000,10001,16.OFFSET:REGIMM:32::BAL
+"bal <OFFSET>"
+*mips32r6:
+*mips64r6:
+{
+ address_word offset = EXTEND16 (OFFSET) << 2;
+ RA = (CIA + 8);
+ DELAY_SLOT (NIA + offset);
+}
000001,5.RS!31,10011,16.OFFSET:REGIMM:32::BGEZALL
"bgezall r<RS>, <OFFSET>"
@@ -2063,8 +2159,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -2114,8 +2212,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -2165,8 +2265,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -2209,6 +2311,18 @@
+000001,00000,10000,16.OFFSET:REGIMM:32::NAL
+"nal <OFFSET>"
+*mips32r6:
+*mips64r6:
+{
+ address_word offset = EXTEND16 (OFFSET) << 2;
+ RA = (CIA + 8);
+ FORBIDDEN_SLOT ();
+}
+
+
+
000001,5.RS!31,10010,16.OFFSET:REGIMM:32::BLTZALL
"bltzall r<RS>, <OFFSET>"
*mipsII:
@@ -2273,8 +2387,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -2322,8 +2438,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -2370,6 +2488,7 @@
*mipsV:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
{
@@ -2409,6 +2528,7 @@
*mipsV:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
{
@@ -2432,6 +2552,7 @@
*mipsV:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
{
@@ -2450,6 +2571,8 @@
if (RT != RD)
Unpredictable ();
check_u64 (SD_, instruction_0);
+ if (RT != RD)
+ Unpredictable ();
do_dclo (SD_, RD, RS);
}
@@ -2464,6 +2587,8 @@
if (RT != RD)
Unpredictable ();
check_u64 (SD_, instruction_0);
+ if (RT != RD)
+ Unpredictable ();
do_dclz (SD_, RD, RS);
}
@@ -2771,6 +2896,7 @@
000000,00001,5.RT,5.RD,5.SHIFT,111010::64::DROR
"dror r<RD>, r<RT>, <SHIFT>"
*mips64r2:
+*mips64r6:
*vr5400:
*vr5500:
{
@@ -2781,6 +2907,7 @@
000000,00001,5.RT,5.RD,5.SHIFT,111110::64::DROR32
"dror32 r<RD>, r<RT>, <SHIFT>"
*mips64r2:
+*mips64r6:
*vr5400:
*vr5500:
{
@@ -2791,6 +2918,7 @@
000000,5.RS,5.RT,5.RD,00001,010110::64::DRORV
"drorv r<RD>, r<RT>, r<RS>"
*mips64r2:
+*mips64r6:
*vr5400:
*vr5500:
{
@@ -2813,6 +2941,7 @@
*mipsV:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
{
@@ -2828,6 +2957,7 @@
*mipsV:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
{
@@ -2850,6 +2980,7 @@
*mipsV:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
{
@@ -2872,6 +3003,7 @@
*mipsV:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
{
@@ -2887,6 +3019,7 @@
*mipsV:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
{
@@ -2910,6 +3043,7 @@
*mipsV:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
{
@@ -2932,6 +3066,7 @@
*mipsV:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
{
@@ -2947,6 +3082,7 @@
*mipsV:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
{
@@ -2972,6 +3108,7 @@
*mipsV:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
{
@@ -2987,6 +3124,7 @@
*mipsV:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
{
@@ -3009,6 +3147,7 @@
*mipsV:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
{
@@ -3026,8 +3165,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -3048,8 +3189,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -3071,8 +3214,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -3086,7 +3231,9 @@
"jalr.hb r<RS>":RD == 31
"jalr.hb r<RD>, r<RS>"
*mips32r2:
+*mips32r6:
*mips64r2:
+*mips64r6:
{
address_word temp = GPR[RS];
GPR[RD] = CIA + 8;
@@ -3102,8 +3249,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -3114,7 +3263,9 @@
000000,5.RS,0000000000,10000,001000:SPECIAL:32::JR_HB
"jr.hb r<RS>"
*mips32r2:
+*mips32r6:
*mips64r2:
+*mips64r6:
{
DELAY_SLOT (GPR[RS]);
}
@@ -3232,8 +3383,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -3251,8 +3404,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -3268,6 +3423,7 @@
*mipsV:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
{
@@ -3335,8 +3491,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -3354,8 +3512,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -3405,8 +3565,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -3424,8 +3586,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -3498,6 +3662,7 @@
*mipsV:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
{
@@ -3882,8 +4047,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -3908,8 +4075,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -3935,8 +4104,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -3973,7 +4144,9 @@
000000,00001,5.RT,5.RD,5.SHIFT,000010::32::ROR
"ror r<RD>, r<RT>, <SHIFT>"
*mips32r2:
+*mips32r6:
*mips64r2:
+*mips64r6:
*smartmips:
*vr5400:
*vr5500:
@@ -3984,7 +4157,9 @@
000000,5.RS,5.RT,5.RD,00001,000110::32::RORV
"rorv r<RD>, r<RT>, r<RS>"
*mips32r2:
+*mips32r6:
*mips64r2:
+*mips64r6:
*smartmips:
*vr5400:
*vr5500:
@@ -4086,8 +4261,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -4109,7 +4286,7 @@
*vr4100:
*vr5000:
{
- do_sc (SD_, RT, OFFSET, BASE, instruction_0);
+ do_sc (SD_, RT, OFFSET, BASE, instruction_0, 1);
}
@@ -4124,7 +4301,7 @@
*vr5000:
{
check_u64 (SD_, instruction_0);
- do_scd (SD_, RT, OFFSET, BASE);
+ do_scd (SD_, RT, OFFSET, BASE, 1);
}
@@ -4135,6 +4312,7 @@
*mipsV:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
{
@@ -4200,8 +4378,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -4239,16 +4419,16 @@
000000,00000,5.RT,5.RD,5.SHIFT,000000:SPECIAL:32::SLLb
"nop":RD == 0 && RT == 0 && SHIFT == 0
"ssnop":RD == 0 && RT == 0 && SHIFT == 1
+"ehb":RD == 0 && RT == 0 && SHIFT == 3
"sll r<RD>, r<RT>, <SHIFT>"
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
{
- /* Skip shift for NOP and SSNOP, so that there won't be lots of
- extraneous trace output. */
- if (RD != 0 || RT != 0 || (SHIFT != 0 && SHIFT != 1))
- do_sll (SD_, RT, RD, SHIFT);
+ do_sll (SD_, RT, RD, SHIFT);
}
@@ -4270,8 +4450,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -4296,8 +4478,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -4322,8 +4506,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -4348,8 +4534,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -4375,8 +4563,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -4404,8 +4594,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -4435,8 +4627,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -4465,8 +4659,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -4495,8 +4691,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -4514,8 +4712,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -4542,8 +4742,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -4561,8 +4763,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*r3900:
*vr5000:
@@ -4637,8 +4841,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -4656,8 +4862,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -4674,8 +4882,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
{
@@ -4708,8 +4918,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
{
@@ -4759,8 +4971,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
{
@@ -4776,8 +4990,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
{
@@ -4827,8 +5043,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
{
@@ -4844,8 +5062,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
{
@@ -4886,8 +5106,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -4912,8 +5134,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -4996,6 +5220,8 @@
*mipsIII:
*mipsIV:
*mips32:
+*mips32r6:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -5050,8 +5276,28 @@
{
if (! COP_Usable (1))
SignalExceptionCoProcessorUnusable (1);
+
+ FCSR &= ~(fcsr_NAN2008_mask | fcsr_ABS2008_mask);
+ sim_fpu_quiet_nan_inverted = true;
}
+// Helper:
+//
+// Check that the FPU is currently usable, and signal a CoProcessorUnusable
+// exception if not.
+//
+
+:function:::void:check_fpu:
+*mips32r6:
+*mips64r6:
+{
+ if (! COP_Usable (1))
+ SignalExceptionCoProcessorUnusable (1);
+
+ FCSR |= (fcsr_NAN2008_mask | fcsr_ABS2008_mask);
+ sim_fpu_quiet_nan_inverted = 0;
+ sim_fpu_set_mode (sim_fpu_ieee754_2008);
+}
// Helper:
//
@@ -5064,6 +5310,7 @@
*mipsII:
*mips32:
*mips32r2:
+*mips32r6:
*micromips32:
{
int bigendian = (BigEndianCPU ? ! ReverseEndian : ReverseEndian);
@@ -5099,6 +5346,7 @@
*mips32:
*mips32r2:
*micromips32:
+ *mips32r6:
{
int bigendian = (BigEndianCPU ? ! ReverseEndian : ReverseEndian);
address_word vaddr;
@@ -5128,8 +5376,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -5148,8 +5398,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -5260,8 +5512,10 @@
*mipsIV:
*mipsV:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -5278,8 +5532,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -5325,8 +5581,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
{
do_cfc1 (SD_, RT, FS);
}
@@ -5362,8 +5620,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
{
do_ctc1 (SD_, RT, FS);
}
@@ -5381,8 +5641,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -5397,8 +5659,10 @@
*mipsIV:
*mipsV:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -5430,8 +5694,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -5471,8 +5737,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -5490,8 +5758,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -5523,6 +5793,7 @@
*mipsV:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -5558,6 +5829,7 @@
*mipsV:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -5574,8 +5846,10 @@
*mipsIV:
*mipsV:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -5592,8 +5866,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -5607,6 +5883,7 @@
*mipsII:
*mips32:
*mips32r2:
+*mips32r6:
{
check_fpu (SD_);
COP_LD (1, FT, do_load_double (SD_, GPR[BASE], EXTEND16 (OFFSET)));
@@ -5620,6 +5897,7 @@
*mipsV:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -5681,8 +5959,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -5737,8 +6017,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -5756,8 +6038,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -5866,8 +6150,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -5885,8 +6171,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -5904,8 +6192,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -6002,8 +6292,10 @@
*mipsIV:
*mipsV:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr5000:
{
do_recip_fmt (SD_, FMT, FD, FS);
@@ -6016,8 +6308,10 @@
*mipsIV:
*mipsV:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -6034,8 +6328,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -6049,8 +6345,10 @@
*mipsIV:
*mipsV:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr5000:
{
do_rsqrt_fmt (SD_, FMT, FD, FS);
@@ -6062,6 +6360,7 @@
*mipsII:
*mips32:
*mips32r2:
+*mips32r6:
{
do_sdc1 (SD_, FT, OFFSET, BASE);
}
@@ -6074,6 +6373,7 @@
*mipsV:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -6085,7 +6385,7 @@
010011,5.BASE,5.INDEX,5.FS,00000001001:COP1X:32,f::SDXC1
"sdxc1 f<FS>, r<INDEX>(r<BASE>)"
-*mips32r2
+*mips32r2:
{
check_fpu (SD_);
do_store_double (SD_, GPR[BASE], GPR[INDEX], COP_SD (1, FS));
@@ -6134,8 +6434,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -6153,8 +6455,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -6173,8 +6477,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -6202,8 +6508,10 @@
*mipsIV:
*mipsV:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -6220,8 +6528,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -6246,8 +6556,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
@@ -6269,8 +6581,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
@@ -6284,8 +6598,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
@@ -6298,11 +6614,23 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
+:function:::void:do_cache:int op, int rbase, int roffset, address_word instruction_0
+{
+ address_word base = GPR[rbase];
+ address_word offset = EXTEND16 (roffset);
+ {
+ address_word vaddr = loadstore_ea (SD_, base, offset);
+ address_word paddr = vaddr;
+ CacheOp(op, vaddr, paddr, instruction_0);
+ }
+}
101111,5.BASE,5.OP,16.OFFSET:NORMAL:32::CACHE
"cache <OP>, <OFFSET>(r<BASE>)"
@@ -6317,13 +6645,7 @@
*vr5000:
*r3900:
{
- address_word base = GPR[BASE];
- address_word offset = EXTEND16 (OFFSET);
- {
- address_word vaddr = loadstore_ea (SD_, base, offset);
- address_word paddr = vaddr;
- CacheOp(OP, vaddr, paddr, instruction_0);
- }
+ do_cache (SD_, OP, BASE, OFFSET, instruction_0);
}
@@ -6334,6 +6656,7 @@
*mipsV:
*mips64:
*mips64r2:
+*mips64r6:
{
check_u64 (SD_, instruction_0);
DecodeCoproc (instruction_0, 0, cp0_dmfc0, RT, RD, SEL);
@@ -6347,6 +6670,7 @@
*mipsV:
*mips64:
*mips64r2:
+*mips64r6:
{
check_u64 (SD_, instruction_0);
DecodeCoproc (instruction_0, 0, cp0_dmtc0, RT, RD, SEL);
@@ -6360,8 +6684,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
{
@@ -6389,8 +6715,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -6409,8 +6737,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
*r3900:
@@ -6443,8 +6773,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*r3900:
{
@@ -6462,8 +6794,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
@@ -6477,8 +6811,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
@@ -6492,8 +6828,10 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
@@ -6507,13 +6845,16 @@
*mipsV:
*mips32:
*mips32r2:
+*mips32r6:
*mips64:
*mips64r2:
+*mips64r6:
*vr4100:
*vr5000:
:include:::mips3264r2.igen
+:include:::mips3264r6.igen
:include:::m16.igen
:include:::m16e.igen
:include:::mdmx.igen
diff --git a/sim/mips/mips3264r2.igen b/sim/mips/mips3264r2.igen
index e0b838c4df2..a28d9897f79 100644
--- a/sim/mips/mips3264r2.igen
+++ b/sim/mips/mips3264r2.igen
@@ -193,6 +193,7 @@
011111,5.RS,5.RT,5.SIZE,5.LSB,000011::64::DEXT
"dext r<RT>, r<RS>, <LSB>, <SIZE+1>"
*mips64r2:
+*mips64r6:
{
check_u64 (SD_, instruction_0);
do_dext (SD_, RT, RS, LSB, SIZE);
@@ -201,6 +202,7 @@
011111,5.RS,5.RT,5.SIZE,5.LSB,000001::64::DEXTM
"dextm r<RT>, r<RS>, <LSB>, <SIZE+33>"
*mips64r2:
+*mips64r6:
{
check_u64 (SD_, instruction_0);
do_dextm (SD_, RT, RS, LSB, SIZE);
@@ -209,6 +211,7 @@
011111,5.RS,5.RT,5.SIZE,5.LSB,000010::64::DEXTU
"dextu r<RT>, r<RS>, <LSB+32>, <SIZE+1>"
*mips64r2:
+*mips64r6:
{
check_u64 (SD_, instruction_0);
do_dextu (SD_, RT, RS, LSB, SIZE);
@@ -219,7 +222,9 @@
"di":RT == 0
"di r<RT>"
*mips32r2:
+*mips32r6:
*mips64r2:
+*mips64r6:
{
do_di (SD_, RT);
}
@@ -228,6 +233,7 @@
011111,5.RS,5.RT,5.MSB,5.LSB,000111::64::DINS
"dins r<RT>, r<RS>, <LSB>, <MSB-LSB+1>"
*mips64r2:
+*mips64r6:
{
check_u64 (SD_, instruction_0);
do_dins (SD_, RT, RS, LSB, MSB);
@@ -236,6 +242,7 @@
011111,5.RS,5.RT,5.MSB,5.LSB,000101::64::DINSM
"dinsm r<RT>, r<RS>, <LSB>, <MSB+32-LSB+1>"
*mips64r2:
+*mips64r6:
{
check_u64 (SD_, instruction_0);
do_dinsm (SD_, RT, RS, LSB, MSB);
@@ -244,6 +251,7 @@
011111,5.RS,5.RT,5.MSB,5.LSB,000110::64::DINSU
"dinsu r<RT>, r<RS>, <LSB+32>, <MSB-LSB+1>"
*mips64r2:
+*mips64r6:
{
check_u64 (SD_, instruction_0);
do_dinsu (SD_, RT, RS, LSB, MSB);
@@ -253,6 +261,7 @@
011111,00000,5.RT,5.RD,00010,100100::64::DSBH
"dsbh r<RD>, r<RT>"
*mips64r2:
+*mips64r6:
{
check_u64 (SD_, instruction_0);
do_dsbh (SD_, RD, RT);
@@ -261,6 +270,7 @@
011111,00000,5.RT,5.RD,00101,100100::64::DSHD
"dshd r<RD>, r<RT>"
*mips64r2:
+*mips64r6:
{
check_u64 (SD_, instruction_0);
do_dshd (SD_, RD, RT);
@@ -270,7 +280,9 @@
"ei":RT == 0
"ei r<RT>"
*mips32r2:
+*mips32r6:
*mips64r2:
+*mips64r6:
{
do_ei (SD_, RT);
}
@@ -279,7 +291,9 @@
011111,5.RS,5.RT,5.SIZE,5.LSB,000000::32::EXT
"ext r<RT>, r<RS>, <LSB>, <SIZE+1>"
*mips32r2:
+*mips32r6:
*mips64r2:
+*mips64r6:
{
do_ext (SD_, RT, RS, LSB, SIZE);
}
@@ -288,7 +302,9 @@
010001,00011,5.RT,5.FS,00000000000:COP1Sa:32,f::MFHC1
"mfhc1 r<RT>, f<FS>"
*mips32r2:
+*mips32r6:
*mips64r2:
+*mips64r6:
{
do_mfhc1 (SD_, RT, FS);
}
@@ -296,7 +312,9 @@
010001,00111,5.RT,5.FS,00000000000:COP1Sa:32,f::MTHC1
"mthc1 r<RT>, f<FS>"
*mips32r2:
+*mips32r6:
*mips64r2:
+*mips64r6:
{
do_mthc1 (SD_, RT, FS);
}
@@ -305,7 +323,9 @@
011111,5.RS,5.RT,5.MSB,5.LSB,000100::32::INS
"ins r<RT>, r<RS>, <LSB>, <MSB-LSB+1>"
*mips32r2:
+*mips32r6:
*mips64r2:
+*mips64r6:
{
do_ins (SD_, RT, RS, LSB, MSB);
}
@@ -314,7 +334,9 @@
011111,00000,5.RT,5.RD,10000,100000::32::SEB
"seb r<RD>, r<RT>"
*mips32r2:
+*mips32r6:
*mips64r2:
+*mips64r6:
{
do_seb (SD_, RD, RT);
}
@@ -322,7 +344,9 @@
011111,00000,5.RT,5.RD,11000,100000::32::SEH
"seh r<RD>, r<RT>"
*mips32r2:
+*mips32r6:
*mips64r2:
+*mips64r6:
{
do_seh (SD_, RD, RT);
}
@@ -331,7 +355,9 @@
000001,5.BASE,11111,16.OFFSET::32::SYNCI
"synci <OFFSET>(r<BASE>)"
*mips32r2:
+*mips32r6:
*mips64r2:
+*mips64r6:
{
// sync i-cache - nothing to do currently
}
@@ -340,7 +366,9 @@
011111,00000,5.RT,5.RD,00000,111011::32::RDHWR
"rdhwr r<RT>, r<RD>"
*mips32r2:
+*mips32r6:
*mips64r2:
+*mips64r6:
{
do_rdhwr (SD_, RT, RD);
}
@@ -349,7 +377,9 @@
011111,00000,5.RT,5.RD,00010,100000::32::WSBH
"wsbh r<RD>, r<RT>"
*mips32r2:
+*mips32r6:
*mips64r2:
+*mips64r6:
{
do_wsbh (SD_, RD, RT);
}
diff --git a/sim/mips/mips3264r6.igen b/sim/mips/mips3264r6.igen
new file mode 100644
index 00000000000..b83c3098077
--- /dev/null
+++ b/sim/mips/mips3264r6.igen
@@ -0,0 +1,1226 @@
+110010,26.OFFSET:POOL32X:32::BC
+"bc <OFFSET>"
+*mips32r6:
+*mips64r6:
+{
+ NIA = CIA + (EXTEND26 (OFFSET) << 2) + 4;
+}
+
+111010,26.OFFSET:POOL32X:32::BALC
+"balc <OFFSET>"
+*mips32r6:
+*mips64r6:
+{
+ RA = CIA + 4;
+ NIA = CIA + (EXTEND26 (OFFSET) << 2) + 4;
+}
+
+110110,5.RS!0,21.OFFSET:POOL32X:32::BEQZC
+"beqzc r<RS>, <OFFSET>"
+*mips32r6:
+*mips64r6:
+{
+ if (GPR[RS] == 0)
+ NIA = CIA + (EXTEND21 (OFFSET) << 2) + 4;
+ else
+ FORBIDDEN_SLOT ();
+}
+
+110110,00000,5.RT,16.OFFSET:POOL32X:32::JIC
+"jic r<RT>, <OFFSET>"
+*mips32r6:
+*mips64r6:
+{
+ NIA = GPR[RT] + (EXTEND16(OFFSET) << 2);
+}
+
+111110,5.RS!0,21.OFFSET:POOL32X:32::BNEZC
+"bnezc r<RS>, <OFFSET>"
+*mips32r6:
+*mips64r6:
+{
+ if (GPR[RS] != 0)
+ NIA = CIA + (EXTEND21 (OFFSET) << 2) + 4;
+ else
+ FORBIDDEN_SLOT ();
+}
+
+111110,00000,5.RT,16.OFFSET:POOL32X:32::JIALC
+"jialc r<RT>, <OFFSET>"
+*mips32r6:
+*mips64r6:
+{
+ RA = CIA + 4;
+ NIA = GPR[RT] + EXTEND16(OFFSET);
+}
+
+010110,5.RS,5.RT,16.OFFSET:POOL32X:32::B1xxC
+"blezc r<RT>, <OFFSET>": RS==0&&RT!=0
+"bgezc r<RT>, <OFFSET>":RS!=0&&RS==RT
+"bgec r<RS>, r<RT>, <OFFSET>"
+*mips32r6:
+*mips64r6:
+{
+ if (RS == 0 && RT != 0)
+ {
+ //BLEZC
+ if ((signed_word)GPR[RT] <= 0)
+ NIA = CIA + (EXTEND16 (OFFSET) << 2) + 4;
+ else
+ FORBIDDEN_SLOT ();
+ }
+ else if (RS != 0 && RS == RT)
+ {
+ //BGEZC
+ if ((signed_word)GPR[RT] >= 0)
+ NIA = CIA + (EXTEND16 (OFFSET) << 2) + 4;
+ else
+ FORBIDDEN_SLOT ();
+ }
+ else
+ {
+ //BGEC
+ if ((signed_word) GPR[RS] >= (signed_word) GPR[RT])
+ NIA = CIA + (EXTEND16 (OFFSET) << 2) + 4;
+ else
+ FORBIDDEN_SLOT ();
+ }
+}
+
+010111,5.RS,5.RT,16.OFFSET:POOL32X:32::B2xxC
+"bgtzc r<RT>, <OFFSET>":RS==0&&RT!=0
+"bltzc r<RT>, <OFFSET>":RS!=0&&RS==RT
+"bltc r<RS>, r<RT>, <OFFSET>"
+*mips32r6:
+*mips64r6:
+{
+ if (RS == 0 && RT != 0)
+ {
+ //BGTZC
+ if ((signed_word)GPR[RT] > 0)
+ NIA = CIA + (EXTEND16 (OFFSET) << 2) + 4;
+ else
+ FORBIDDEN_SLOT ();
+ }
+ else if (RS != 0 && RS == RT)
+ {
+ //BLTZC
+ if ((signed_word)GPR[RT] < 0)
+ NIA = CIA + (EXTEND16 (OFFSET) << 2) + 4;
+ else
+ FORBIDDEN_SLOT ();
+ }
+ else
+ {
+ //BLTC
+ if ((signed_word) GPR[RS] < (signed_word) GPR[RT])
+ NIA = CIA + (EXTEND16 (OFFSET) << 2) + 4;
+ else
+ FORBIDDEN_SLOT ();
+ }
+}
+
+000110,5.RS,5.RT!0,16.OFFSET:POOL32X:32::B3xxC
+"blezalc r<RT>, <OFFSET>":RS==0
+"bgezalc r<RT>, <OFFSET>":RS!=0&&RS==RT
+"bgeuc r<RS>, r<RT>, <OFFSET>"
+*mips32r6:
+*mips64r6:
+{
+ if (RS == 0 && RT != 0)
+ {
+ //BLEZALC
+ RA = CIA + 4;
+ if ((signed_word)GPR[RT] <= 0)
+ NIA = CIA + (EXTEND16 (OFFSET) << 2) + 4;
+ else
+ FORBIDDEN_SLOT ();
+ }
+ else if (RS != 0 && RS == RT)
+ {
+ //BGEZALC
+ RA = CIA + 4;
+ if ((signed_word)GPR[RT] >= 0)
+ NIA = CIA + (EXTEND16 (OFFSET) << 2) + 4;
+ else
+ FORBIDDEN_SLOT ();
+ }
+ else
+ {
+ //BGEUC
+ if (GPR[RS] >= GPR[RT])
+ NIA = CIA + (EXTEND16 (OFFSET) << 2) + 4;
+ else
+ FORBIDDEN_SLOT ();
+ }
+}
+
+000111,5.RS,5.RT!0,16.OFFSET:POOL32X:32::B4xxC
+"bgtzalc r<RT>, <OFFSET>":RS==0
+"bltzalc r<RT>, <OFFSET>":RS!=0&&RS==RT
+"bltuc r<RS>, r<RT>, <OFFSET>"
+*mips32r6:
+*mips64r6:
+{
+ if (RS == 0 && RT != 0)
+ {
+ //BGTZALC
+ RA = CIA + 4;
+ if ((signed_word)GPR[RT] > 0)
+ NIA = CIA + (EXTEND16 (OFFSET) << 2) + 4;
+ else
+ FORBIDDEN_SLOT ();
+ }
+ else if (RS != 0 && RS == RT)
+ {
+ //BLTZALC
+ RA = CIA + 4;
+ if ((signed_word)GPR[RT] < 0)
+ NIA = CIA + (EXTEND16 (OFFSET) << 2) + 4;
+ else
+ FORBIDDEN_SLOT ();
+ }
+ else
+ {
+ //BLTUC
+ if (GPR[RS] < GPR[RT])
+ NIA = CIA + (EXTEND16 (OFFSET) << 2) + 4;
+ else
+ FORBIDDEN_SLOT ();
+ }
+}
+
+001000,5.RS,5.RT,16.OFFSET:POOL32X:32::BxxxC
+"bovc r<RS>, r<RT>, <OFFSET>":RS>=RT
+"beqzalc r<RT>, <OFFSET>":RS==0&&RT>RS
+"beqc r<RS>, r<RT>, <OFFSET>"
+*mips32r6:
+*mips64r6:
+{
+ if (RS >= RT)
+ {
+ //BOVC
+ ALU32_BEGIN (GPR[RS] & 0x0ffffffff);
+ ALU32_ADD (GPR[RT] & 0x0ffffffff);
+
+ if (ALU32_HAD_OVERFLOW)
+ NIA = CIA + (EXTEND16 (OFFSET) << 2) + 4;
+ else
+ FORBIDDEN_SLOT ();
+ }
+ else if (RS == 0)
+ {
+ RA = CIA + 4;
+ //BEQZALC
+ if (GPR[RT] == 0)
+ NIA = CIA + (EXTEND16 (OFFSET) << 2) + 4;
+ else
+ FORBIDDEN_SLOT ();
+ }
+ else
+ {
+ //BEQC
+ if (GPR[RS] == GPR[RT])
+ NIA = CIA + (EXTEND16 (OFFSET) << 2) + 4;
+ else
+ FORBIDDEN_SLOT ();
+ }
+}
+
+011000,5.RS,5.RT,16.OFFSET:POOL32X:32::BNxxxC
+"bnvc r<RS>, r<RT>, <OFFSET>":RS>=RT
+"bnezalc r<RT>, <OFFSET>":RS==0&&RT>RS
+"bnec r<RS>, r<RT>, <OFFSET>"
+*mips32r6:
+*mips64r6:
+{
+ if (RS >= RT)
+ {
+ //BNVC
+ ALU32_BEGIN (GPR[RS] & 0x0ffffffff);
+ ALU32_ADD (GPR[RT] & 0x0ffffffff);
+
+ if (!ALU32_HAD_OVERFLOW)
+ NIA = CIA + (EXTEND16 (OFFSET) << 2) + 4;
+ else
+ FORBIDDEN_SLOT ();
+ }
+ else if (RS == 0 && RT > RS)
+ {
+ //BNEZALC
+ RA = CIA + 4;
+ if (GPR[RT] != 0)
+ NIA = CIA + (EXTEND16 (OFFSET) << 2) + 4;
+ else
+ FORBIDDEN_SLOT ();
+ }
+ else
+ {
+ //BNEC
+ if (GPR[RT] != GPR[RS])
+ NIA = CIA + (EXTEND16 (OFFSET) << 2) + 4;
+ else
+ FORBIDDEN_SLOT ();
+ }
+}
+
+:%s::::R6COND:int r6cond
+{
+ switch (r6cond)
+ {
+ case FP_R6CMP_SAF:
+ return "SAF";
+ case FP_R6CMP_SUN:
+ return "SUN";
+ case FP_R6CMP_SOR:
+ return "SOR";
+ case FP_R6CMP_SEQ:
+ return "SEQ";
+ case FP_R6CMP_SUNE:
+ return "SUNE";
+ case FP_R6CMP_SUEQ:
+ return "SUEQ";
+ case FP_R6CMP_SNE:
+ return "SNE";
+ case FP_R6CMP_SLT:
+ return "SLT";
+ case FP_R6CMP_SULT:
+ return "SULT";
+ case FP_R6CMP_SLE:
+ return "SLE";
+ case FP_R6CMP_SULE:
+ return "SULE";
+ case FP_R6CMP_AF:
+ return "AF";
+ case FP_R6CMP_UN:
+ return "UN";
+ case FP_R6CMP_OR:
+ return "OR";
+ case FP_R6CMP_EQ:
+ return "EQ";
+ case FP_R6CMP_UNE:
+ return "UNE";
+ case FP_R6CMP_UEQ:
+ return "UEQ";
+ case FP_R6CMP_NE:
+ return "NE";
+ case FP_R6CMP_LT:
+ return "LT";
+ case FP_R6CMP_ULT:
+ return "ULT";
+ case FP_R6CMP_LE:
+ return "LE";
+ case FP_R6CMP_ULE:
+ return "ULE";
+ default:
+ abort ();
+ }
+}
+
+010001,1010,1.FMT,5.FT,5.FS,5.FD,0,5.R6COND:POOL32X:32,f::CMP.cond.fmt
+"cmp.%s<R6COND>.%s<FMT> f<FD>, f<FS>, f<FT>"
+*mips32r6:
+*mips64r6:
+{
+ uint64_t result;
+ check_fpu (SD_);
+ TRACE_ALU_INPUT2 (ValueFPR (FS, FMT), ValueFPR (FT, FMT));
+
+ result = R6Compare (ValueFPR (FS, FMT), ValueFPR (FT, FMT), FMT, R6COND);
+ StoreFPR (FD, FMT, result);
+ TRACE_ALU_RESULT (result);
+}
+
+010001,01001,5.FT,16.OFFSET:POOL32X:32,f::BC1EQZ
+"bc1eqz f<FT>, <OFFSET>"
+*mips32r6:
+*mips64r6:
+{
+ address_word offset = EXTEND16 (OFFSET) << 2;
+ check_fpu (SD_);
+ TRACE_ALU_INPUT1 (FGR[FT]);
+ if ((FGR[FT] & 0x01) == 0)
+ DELAY_SLOT (NIA + offset);
+}
+
+010001,01101,5.FT,16.OFFSET:POOL32X:32,f::BC1NEZ
+"bc1nez f<FT>, <OFFSET>"
+*mips32r6:
+*mips64r6:
+{
+ address_word offset = EXTEND16 (OFFSET) << 2;
+ check_fpu (SD_);
+ TRACE_ALU_INPUT1 (FGR[FT]);
+ if ((FGR[FT] & 0x01) != 0)
+ DELAY_SLOT (NIA + offset);
+}
+010001,1000,1.FMT,5.FT,5.FS,5.FD,011000:POOLX:32,f::MADDF.fmt
+"maddf.%s<FMT> f<FD>, f<FS>, f<FT>"
+*mips32r6:
+*mips64r6:
+{
+ int fmt = FMT;
+ check_fpu (SD_);
+ check_u64 (SD_, instruction_0);
+ check_fmt_p (SD_, fmt, instruction_0);
+ TRACE_ALU_INPUT3 (FGR[FD], FGR[FS], FGR[FT]);
+ StoreFPR (FD, fmt, FusedMultiplyAdd (ValueFPR (FS, fmt),
+ ValueFPR (FT, fmt),
+ ValueFPR (FD, fmt), fmt));
+ TRACE_ALU_RESULT (FGR[FD]);
+}
+
+010001,1000,1.FMT,5.FT,5.FS,5.FD,011001:POOLX:32,f::MSUBF.fmt
+"msubf.%s<FMT> f<FD>, f<FS>, f<FT>"
+*mips32r6:
+*mips64r6:
+{
+ int fmt = FMT;
+ check_fpu (SD_);
+ check_u64 (SD_, instruction_0);
+ check_fmt_p (SD_, fmt, instruction_0);
+ TRACE_ALU_INPUT3 (FGR[FD], FGR[FS], FGR[FT]);
+ StoreFPR (FD, fmt, FusedMultiplySub (ValueFPR (FS, fmt),
+ ValueFPR (FT, fmt),
+ ValueFPR (FD, fmt), fmt));
+ TRACE_ALU_RESULT (FGR[FD]);
+}
+
+000000,5.RS,5.RT,5.RD,000,2.IMM,000101:SPECIAL:32::LSA
+"lsa r<RD>, r<RS>, r<RT>, <IMM + 1>"
+*mips32r6:
+*mips64r6:
+{
+ uint32_t t = GPR[RS] << (IMM + 1);
+ GPR[RD] = EXTEND32(GPR[RT] + t);
+ TRACE_ALU_RESULT (GPR[RD]);
+}
+
+000000,5.RS,5.RT,5.RD,000,2.IMM,010101:SPECIAL:64::DLSA
+"dlsa r<RD>, r<RS>, r<RT>, <IMM + 1>"
+*mips64r6:
+{
+ uint64_t t = GPR[RS] << (IMM + 1);
+ GPR[RD] = GPR[RT] + t;
+ TRACE_ALU_RESULT (GPR[RD]);
+}
+
+001111,5.RS!0,5.RT,16.IMMEDIATE:POOL32X:32::AUI
+"aui r<RS>, r<RT>, <IMMEDIATE>"
+*mips32r6:
+*mips64r6:
+{
+ TRACE_ALU_INPUT2 (GPR[RS], IMMEDIATE);
+ GPR[RT] = EXTEND32 (GPR[RS] + (EXTEND16 (IMMEDIATE) << 16));
+ TRACE_ALU_RESULT (GPR[RT]);
+}
+
+011101,5.RS!0,5.RT,16.IMMEDIATE:POOL32X:64::DAUI
+"daui r<RS>, r<RT>, <IMMEDIATE>"
+*mips64r6:
+{
+ TRACE_ALU_INPUT2 (GPR[RS], IMMEDIATE);
+ GPR[RT] = GPR[RS] + (EXTEND16 (IMMEDIATE) << 16);
+ TRACE_ALU_RESULT (GPR[RT]);
+}
+
+000001,5.RS,00110,16.IMMEDIATE:POOL32X:64::DAHI
+"dahi r<RS>, <IMMEDIATE>"
+*mips64r6:
+{
+ TRACE_ALU_INPUT2 (GPR[RS], IMMEDIATE);
+ GPR[RS] = GPR[RS] + (EXTEND16 (IMMEDIATE) << 32);
+ TRACE_ALU_RESULT (GPR[RS]);
+}
+
+000001,5.RS,11110,16.IMMEDIATE:POOL32X:64::DATI
+"dati r<RS>, <IMMEDIATE>"
+*mips64r6:
+{
+ TRACE_ALU_INPUT2 (GPR[RS], IMMEDIATE);
+ GPR[RS] = GPR[RS] + (EXTEND16 (IMMEDIATE) << 48);
+ TRACE_ALU_RESULT (GPR[RS]);
+}
+
+011111,5.RS,5.RT,5.RD,010,2.IMMEDIATE,100000:POOL32X:32::ALIGN
+"align r<RD>, r<RS>, r<RT>, <IMMEDIATE>"
+*mips32r6:
+*mips64r6:
+{
+ uint32_t rs = GPR[RS];
+ uint32_t rt = GPR[RT];
+ TRACE_ALU_INPUT2 (GPR[RS], GPR[RT]);
+ GPR[RD] = EXTEND32 (rs >> 8 * (4 - IMMEDIATE) | rt << 8 * IMMEDIATE);
+ TRACE_ALU_RESULT (GPR[RD]);
+}
+
+011111,5.RS,5.RT,5.RD,01,3.IMMEDIATE,100100:POOL32X:64::DALIGN
+"dalign r<RD>, r<RS>, r<RT>, <IMMEDIATE>"
+*mips64r6:
+{
+ uint64_t rs = GPR[RS];
+ uint64_t rt = GPR[RT];
+ TRACE_ALU_INPUT2 (GPR[RS], GPR[RT]);
+ GPR[RD] = rs >> 8 * (8 - IMMEDIATE) | rt << 8 * IMMEDIATE;
+ TRACE_ALU_RESULT (GPR[RD]);
+}
+
+011111,00000,5.RT,5.RD,00000,100000:POOL32X:32::BITSWAP
+"bitswap r<RD>, r<RT>"
+*mips32r6:
+*mips64r6:
+{
+ /* Taken from: http://graphics.stanford.edu/~seander/bithacks.html */
+ uint32_t v = GPR[RT];
+
+ TRACE_ALU_INPUT1 (v);
+ v = ((v >> 1) & 0x55555555) | ((v & 0x55555555) << 1);
+ v = ((v >> 2) & 0x33333333) | ((v & 0x33333333) << 2);
+ v = ((v >> 4) & 0x0F0F0F0F) | ((v & 0x0F0F0F0F) << 4);
+ GPR[RD] = EXTEND32 (v);
+ TRACE_ALU_RESULT(GPR[RD]);
+}
+
+011111,00000,5.RT,5.RD,00000,100100:POOL32X:64::DBITSWAP
+"dbitswap r<RD>, r<RT>"
+*mips64r6:
+{
+ /* Taken from: http://graphics.stanford.edu/~seander/bithacks.html */
+ uint64_t v = GPR[RT];
+
+ TRACE_ALU_INPUT1 (v);
+ v = ((v >> 1) & 0x5555555555555555) | ((v & 0x5555555555555555) << 1);
+ v = ((v >> 2) & 0x3333333333333333) | ((v & 0x3333333333333333) << 2);
+ v = ((v >> 4) & 0x0F0F0F0F0F0F0F0F) | ((v & 0x0F0F0F0F0F0F0F0F) << 4);
+ TRACE_ALU_RESULT(v);
+ GPR[RD] = v;
+}
+
+111011,5.RS,00,19.IMMEDIATE:POOL32X:32::ADDIUPC
+"addiupc r<RS>, <IMMEDIATE>"
+*mips32r6:
+*mips64r6:
+{
+ TRACE_ALU_INPUT1 (IMMEDIATE);
+ GPR[RS] = loadstore_ea (SD_, CIA, EXTEND19 (IMMEDIATE) << 2);
+ TRACE_ALU_RESULT (GPR[RS]);
+}
+
+111011,5.RS,11110,16.IMMEDIATE:POOL32X:32::AUIPC
+"auipc r<RS>, <IMMEDIATE>"
+*mips32r6:
+*mips64r6:
+{
+ TRACE_ALU_INPUT1 (IMMEDIATE);
+ GPR[RS] = loadstore_ea (SD_, CIA, EXTEND32 (IMMEDIATE << 16));
+ TRACE_ALU_RESULT (GPR[RS]);
+}
+
+111011,5.RS,11111,16.IMMEDIATE:POOL32X:32::ALUIPC
+"aluipc r<RS>, <IMMEDIATE>"
+*mips32r6:
+*mips64r6:
+{
+ TRACE_ALU_INPUT1 (IMMEDIATE);
+ GPR[RS] = ~0x0FFFF & loadstore_ea (SD_, CIA, EXTEND32 (IMMEDIATE << 16));
+ TRACE_ALU_RESULT (GPR[RS]);
+}
+
+111011,5.RS,01,19.IMMEDIATE:POOL32X:32::LWPC
+"lwpc r<RS>, <IMMEDIATE>"
+*mips32r6:
+*mips64r6:
+{
+ uint32_t offset = EXTEND19 (IMMEDIATE) << 2;
+ TRACE_ALU_INPUT1 (IMMEDIATE);
+ GPR[RS] = EXTEND32 (do_load (SD_, AccessLength_WORD, CIA, offset));
+ TRACE_ALU_RESULT (GPR[RS]);
+}
+
+111011,5.RS,10,19.IMMEDIATE:POOL32X:64::LWUPC
+"lwupc r<RS>, <IMMEDIATE>"
+*mips64r6:
+{
+ uint32_t offset = EXTEND19 (IMMEDIATE) << 2;
+ TRACE_ALU_INPUT1 (CIA + offset);
+ GPR[RS] = do_load (SD_, AccessLength_WORD, CIA, offset);
+ TRACE_ALU_RESULT (GPR[RS]);
+}
+
+111011,5.RS,110,18.IMMEDIATE:POOL32X:64::LDPC
+"ldpc r<RS>, <IMMEDIATE>"
+*mips64r6:
+{
+ uint32_t offset = EXTEND18 (IMMEDIATE) << 3;
+ TRACE_ALU_INPUT1 (IMMEDIATE);
+ GPR[RS] = do_load (SD_, AccessLength_DOUBLEWORD, CIA, offset);
+ TRACE_ALU_RESULT (GPR[RS]);
+}
+010001,1000,1.FMT,00000,5.FS,5.FD,011010::32,64,f::RINT.fmt
+"rint.%s<FMT> f<FD>, f<FS>"
+*mips32r6:
+*mips64r6:
+{
+ uint64_t result;
+ int fmt = FMT;
+ check_fpu (SD_);
+ check_u64 (SD_, instruction_0);
+ check_fmt_p (SD_, fmt, instruction_0);
+ TRACE_ALU_INPUT1 (FGR[FS]);
+ RoundToIntegralExact (ValueFPR (FS, fmt), &result, fmt);
+ StoreFPR (FD, fmt, result);
+ TRACE_ALU_RESULT (FGR[FD]);
+}
+
+010001,1000,1.FMT,00000,5.FS,5.FD,011011::32,64,f::CLASS.fmt
+"class.%s<FMT> f<FD>, f<FS>"
+*mips32r6:
+*mips64r6:
+{
+ int fmt = FMT;
+ check_fpu (SD_);
+ check_u64 (SD_, instruction_0);
+ check_fmt_p (SD_, fmt, instruction_0);
+ StoreFPR (FD, fmt, Classify (ValueFPR (FS, fmt), fmt));
+}
+
+010001,1000,1.FMT,5.FT,5.FS,5.FD,011100::32,64,f::MIN.fmt
+"min.%s<FMT> f<FD>, f<FS>, f<FT>"
+*mips32r6:
+*mips64r6:
+{
+ int fmt = FMT;
+ check_fpu (SD_);
+ check_u64 (SD_, instruction_0);
+ check_fmt_p (SD_, fmt, instruction_0);
+ TRACE_ALU_INPUT2 (FGR[FS], FGR[FT]);
+ StoreFPR (FD, fmt, Min (ValueFPR (FS, fmt), ValueFPR (FT, fmt), fmt));
+ TRACE_ALU_RESULT (FGR[FD]);
+}
+
+010001,1000,1.FMT,5.FT,5.FS,5.FD,011110::32,64,f::MAX.fmt
+"max.%s<FMT> f<FD>, f<FS>, f<FT>"
+*mips32r6:
+*mips64r6:
+{
+ int fmt = FMT;
+ check_fpu (SD_);
+ check_u64 (SD_, instruction_0);
+ check_fmt_p (SD_, fmt, instruction_0);
+ TRACE_ALU_INPUT2 (FGR[FS], FGR[FT]);
+ StoreFPR (FD, fmt, Max (ValueFPR (FS, fmt), ValueFPR (FT, fmt), fmt));
+ TRACE_ALU_RESULT (FGR[FD]);
+}
+
+010001,1000,1.FMT,5.FT,5.FS,5.FD,011101::32,64,f::MINA.fmt
+"mina.%s<FMT> f<FD>, f<FS>, f<FT>"
+*mips32r6:
+*mips64r6:
+{
+ int fmt = FMT;
+ check_fpu (SD_);
+ check_u64 (SD_, instruction_0);
+ check_fmt_p (SD_, fmt, instruction_0);
+ TRACE_ALU_INPUT2 (FGR[FS], FGR[FT]);
+ StoreFPR (FD, fmt, MinA (ValueFPR (FS, fmt), ValueFPR (FT, fmt), fmt));
+ TRACE_ALU_RESULT (FGR[FD]);
+}
+
+010001,1000,1.FMT,5.FT,5.FS,5.FD,011111::32,64,f::MAXA.fmt
+"maxa.%s<FMT> f<FD>, f<FS>, f<FT>"
+*mips32r6:
+*mips64r6:
+{
+ int fmt = FMT;
+ check_fpu (SD_);
+ check_u64 (SD_, instruction_0);
+ check_fmt_p (SD_, fmt, instruction_0);
+ TRACE_ALU_INPUT2 (FGR[FS], FGR[FT]);
+ StoreFPR (FD, fmt, MaxA (ValueFPR (FS, fmt), ValueFPR (FT, fmt), fmt));
+ TRACE_ALU_RESULT (FGR[FD]);
+}
+000000,5.RS,5.RT,5.RD,00010,011000:POOL32X:32::MUL
+"mul r<RD>, r<RS>, r<RT>"
+*mips32r6:
+*mips64r6:
+{
+ int64_t prod;
+ if (NotWordValue (GPR[RS]) || NotWordValue (GPR[RT]))
+ Unpredictable ();
+ TRACE_ALU_INPUT2 (GPR[RS], GPR[RT]);
+ prod = ((int64_t)(int32_t) GPR[RS])
+ * ((int64_t)(int32_t) GPR[RT]);
+ GPR[RD] = EXTEND32 (VL4_8 (prod));
+ TRACE_ALU_RESULT (GPR[RD]);
+}
+
+000000,5.RS,5.RT,5.RD,00011,011000:POOL32X:32::MUH
+"muh r<RD>, r<RS>, r<RT>"
+*mips32r6:
+*mips64r6:
+{
+ int64_t prod;
+ if (NotWordValue (GPR[RS]) || NotWordValue (GPR[RT]))
+ Unpredictable ();
+ TRACE_ALU_INPUT2 (GPR[RS], GPR[RT]);
+ prod = ((int64_t)(int32_t) GPR[RS])
+ * ((int64_t)(int32_t) GPR[RT]);
+ GPR[RD] = EXTEND32 (VH4_8 (prod));
+ TRACE_ALU_RESULT (GPR[RD]);
+}
+
+000000,5.RS,5.RT,5.RD,00010,011001:POOL32X:32::MULU
+"mulu r<RD>, r<RS>, r<RT>"
+*mips32r6:
+*mips64r6:
+{
+ uint64_t prod;
+ if (NotWordValue (GPR[RS]) || NotWordValue (GPR[RT]))
+ Unpredictable ();
+ TRACE_ALU_INPUT2 (GPR[RS], GPR[RT]);
+ prod = ((uint64_t)(uint32_t) GPR[RS])
+ * ((uint64_t)(uint32_t) GPR[RT]);
+ GPR[RD] = EXTEND32 (VL4_8 (prod));
+ TRACE_ALU_RESULT (GPR[RD]);
+}
+
+000000,5.RS,5.RT,5.RD,00011,011001:POOL32X:32::MUHU
+"muhu r<RD>, r<RS>, r<RT>"
+*mips32r6:
+*mips64r6:
+{
+ uint64_t prod;
+ if (NotWordValue (GPR[RS]) || NotWordValue (GPR[RT]))
+ Unpredictable ();
+ TRACE_ALU_INPUT2 (GPR[RS], GPR[RT]);
+ prod = ((uint64_t)(uint32_t) GPR[RS])
+ * ((uint64_t)(uint32_t) GPR[RT]);
+ GPR[RD] = EXTEND32 (VH4_8 (prod));
+ TRACE_ALU_RESULT (GPR[RD]);
+}
+
+000000,5.RS,5.RT,5.RD,00010,011010:POOL32X:32::DIV
+"div r<RD>, r<RS>, r<RT>"
+*mips32r6:
+*mips64r6:
+{
+ int32_t n = GPR[RS];
+ int32_t d = GPR[RT];
+ TRACE_ALU_INPUT2 (n,d);
+ if (d == 0)
+ GPR[RD] = EXTEND32 (0x80000000);
+ else if (n == SIGNED32 (0x80000000) && d == -1)
+ GPR[RD] = EXTEND32 (0x80000000);
+ else
+ GPR[RD] = EXTEND32 (n / d);
+
+ TRACE_ALU_RESULT (GPR[RD]);
+}
+
+000000,5.RS,5.RT,5.RD,00011,011010:POOL32X:32::MOD
+"mod r<RD>, r<RS>, r<RT>"
+*mips32r6:
+*mips64r6:
+{
+ int32_t n = GPR[RS];
+ int32_t d = GPR[RT];
+ TRACE_ALU_INPUT2 (n,d);
+ if (d == 0 || (n == SIGNED32 (0x80000000) && d == -1))
+ GPR[RD] = EXTEND32 (0);
+ else
+ GPR[RD] = EXTEND32 (n % d);
+
+ TRACE_ALU_RESULT (GPR[RD]);
+}
+
+000000,5.RS,5.RT,5.RD,00010,011011:POOL32X:32::DIVU
+"divu r<RD>, r<RS>, r<RT>"
+*mips32r6:
+*mips64r6:
+{
+ uint32_t n = GPR[RS];
+ uint32_t d = GPR[RT];
+ TRACE_ALU_INPUT2 (n,d);
+ if (d == 0)
+ GPR[RD] = EXTEND32 (0x80000000);
+ else
+ GPR[RD] = EXTEND32 (n / d);
+
+ TRACE_ALU_RESULT (GPR[RD]);
+}
+
+000000,5.RS,5.RT,5.RD,00011,011011:POOL32X:32::MODU
+"modu r<RD>, r<RS>, r<RT>"
+*mips32r6:
+*mips64r6:
+{
+ uint32_t n = GPR[RS];
+ uint32_t d = GPR[RT];
+ TRACE_ALU_INPUT2 (n,d);
+ if (d == 0)
+ GPR[RD] = EXTEND32 (0);
+ else
+ GPR[RD] = EXTEND32 (n % d);
+
+ TRACE_ALU_RESULT (GPR[RD]);
+}
+
+000000,5.RS,5.RT,5.RD,00010,011100:POOL32X:64::DMUL
+"dmul r<RD>, r<RS>, r<RT>"
+*mips64r6:
+{
+ uint64_t lo;
+ uint64_t m00;
+ uint64_t m01;
+ uint64_t m10;
+ uint64_t mid;
+ int sign;
+ uint64_t op1 = GPR[RS];
+ uint64_t op2 = GPR[RT];
+
+ check_u64 (SD_, instruction_0);
+ TRACE_ALU_INPUT2 (op1, op2);
+ /* make signed multiply unsigned */
+ sign = 0;
+ if ((int64_t) op1 < 0)
+ {
+ op1 = - op1;
+ ++sign;
+ }
+ if ((int64_t) op2 < 0)
+ {
+ op2 = - op2;
+ ++sign;
+ }
+ /* multiply out the sub products */
+ m00 = ((uint64_t) VL4_8 (op1) * (uint64_t) VL4_8 (op2));
+ m10 = ((uint64_t) VH4_8 (op1) * (uint64_t) VL4_8 (op2));
+ m01 = ((uint64_t) VL4_8 (op1) * (uint64_t) VH4_8 (op2));
+ /* add the products */
+ mid = ((uint64_t) VH4_8 (m00)
+ + (uint64_t) VL4_8 (m10)
+ + (uint64_t) VL4_8 (m01));
+ lo = U8_4 (mid, m00);
+ /* fix the sign */
+ if (sign & 1)
+ lo = -lo;
+
+ GPR[RD] = lo;
+ TRACE_ALU_RESULT (GPR[RD]);
+}
+
+000000,5.RS,5.RT,5.RD,00011,011100:POOL32X:64::DMUH
+"dmuh r<RD>, r<RS>, r<RT>"
+*mips64r6:
+{
+ uint64_t lo;
+ uint64_t hi;
+ uint64_t m00;
+ uint64_t m01;
+ uint64_t m10;
+ uint64_t m11;
+ uint64_t mid;
+ int sign;
+ uint64_t op1 = GPR[RS];
+ uint64_t op2 = GPR[RT];
+
+ check_u64 (SD_, instruction_0);
+ TRACE_ALU_INPUT2 (op1, op2);
+ /* make signed multiply unsigned */
+ sign = 0;
+ if ((int64_t) op1 < 0)
+ {
+ op1 = - op1;
+ ++sign;
+ }
+ if ((int64_t) op2 < 0)
+ {
+ op2 = - op2;
+ ++sign;
+ }
+ /* multiply out the 4 sub products */
+ m00 = ((uint64_t) VL4_8 (op1) * (uint64_t) VL4_8 (op2));
+ m10 = ((uint64_t) VH4_8 (op1) * (uint64_t) VL4_8 (op2));
+ m01 = ((uint64_t) VL4_8 (op1) * (uint64_t) VH4_8 (op2));
+ m11 = ((uint64_t) VH4_8 (op1) * (uint64_t) VH4_8 (op2));
+ /* add the products */
+ mid = ((uint64_t) VH4_8 (m00)
+ + (uint64_t) VL4_8 (m10)
+ + (uint64_t) VL4_8 (m01));
+ lo = U8_4 (mid, m00);
+ hi = (m11
+ + (uint64_t) VH4_8 (mid)
+ + (uint64_t) VH4_8 (m01)
+ + (uint64_t) VH4_8 (m10));
+ /* fix the sign */
+ if (sign & 1)
+ {
+ lo = -lo;
+ if (lo == 0)
+ hi = -hi;
+ else
+ hi = -hi - 1;
+ }
+
+ GPR[RD] = hi;
+ TRACE_ALU_RESULT (GPR[RD]);
+}
+
+000000,5.RS,5.RT,5.RD,00010,011101:POOL32X:64::DMULU
+"dmulu r<RD>, r<RS>, r<RT>"
+*mips64r6:
+{
+ uint64_t lo;
+ uint64_t m00;
+ uint64_t m01;
+ uint64_t m10;
+ uint64_t mid;
+ uint64_t op1 = GPR[RS];
+ uint64_t op2 = GPR[RT];
+
+ check_u64 (SD_, instruction_0);
+ TRACE_ALU_INPUT2 (op1, op2);
+ /* multiply out the sub products */
+ m00 = ((uint64_t) VL4_8 (op1) * (uint64_t) VL4_8 (op2));
+ m10 = ((uint64_t) VH4_8 (op1) * (uint64_t) VL4_8 (op2));
+ m01 = ((uint64_t) VL4_8 (op1) * (uint64_t) VH4_8 (op2));
+ /* add the products */
+ mid = ((uint64_t) VH4_8 (m00)
+ + (uint64_t) VL4_8 (m10)
+ + (uint64_t) VL4_8 (m01));
+ lo = U8_4 (mid, m00);
+
+ GPR[RD] = lo;
+ TRACE_ALU_RESULT (GPR[RD]);
+}
+
+000000,5.RS,5.RT,5.RD,00011,011101:POOL32X:64::DMUHU
+"dmuhu r<RD>, r<RS>, r<RT>"
+*mips64r6:
+{
+ uint64_t lo;
+ uint64_t hi;
+ uint64_t m00;
+ uint64_t m01;
+ uint64_t m10;
+ uint64_t m11;
+ uint64_t mid;
+ uint64_t op1 = GPR[RS];
+ uint64_t op2 = GPR[RT];
+
+ check_u64 (SD_, instruction_0);
+ TRACE_ALU_INPUT2 (op1, op2);
+ /* multiply out the 4 sub products */
+ m00 = ((uint64_t) VL4_8 (op1) * (uint64_t) VL4_8 (op2));
+ m10 = ((uint64_t) VH4_8 (op1) * (uint64_t) VL4_8 (op2));
+ m01 = ((uint64_t) VL4_8 (op1) * (uint64_t) VH4_8 (op2));
+ m11 = ((uint64_t) VH4_8 (op1) * (uint64_t) VH4_8 (op2));
+ /* add the products */
+ mid = ((uint64_t) VH4_8 (m00)
+ + (uint64_t) VL4_8 (m10)
+ + (uint64_t) VL4_8 (m01));
+ lo = U8_4 (mid, m00);
+ hi = (m11
+ + (uint64_t) VH4_8 (mid)
+ + (uint64_t) VH4_8 (m01)
+ + (uint64_t) VH4_8 (m10));
+
+ GPR[RD] = hi;
+ TRACE_ALU_RESULT (GPR[RD]);
+}
+
+000000,5.RS,5.RT,5.RD,00010,011110:POOL32X:64::DDIV
+"ddiv r<RD>, r<RS>, r<RT>"
+*mips64r6:
+{
+ int64_t n = GPR[RS];
+ int64_t d = GPR[RT];
+
+ check_u64 (SD_, instruction_0);
+ TRACE_ALU_INPUT2 (n, d);
+ if (d == 0)
+ GPR[RD] = SIGNED64 (0x8000000000000000);
+ else if (d == -1 && n == SIGNED64 (0x8000000000000000))
+ GPR[RD] = SIGNED64 (0x8000000000000000);
+ else
+ GPR[RD] = (n / d);
+
+ TRACE_ALU_RESULT (GPR[RD]);
+}
+
+000000,5.RS,5.RT,5.RD,00011,011110:POOL32X:64::DMOD
+"dmod r<RD>, r<RS>, r<RT>"
+*mips64r6:
+{
+ int64_t n = GPR[RS];
+ int64_t d = GPR[RT];
+
+ check_u64 (SD_, instruction_0);
+ TRACE_ALU_INPUT2 (n, d);
+ if (d == 0 || (d == -1 && n == SIGNED64 (0x8000000000000000)))
+ GPR[RD] = SIGNED64 (0);
+ else
+ GPR[RD] = (n % d);
+
+ TRACE_ALU_RESULT (GPR[RD]);
+}
+
+000000,5.RS,5.RT,5.RD,00010,011111:POOL32X:64::DDIVU
+"ddivu r<RD>, r<RS>, r<RT>"
+*mips64r6:
+{
+ uint64_t n = GPR[RS];
+ uint64_t d = GPR[RT];
+
+ check_u64 (SD_, instruction_0);
+ TRACE_ALU_INPUT2 (n, d);
+ if (d == 0)
+ GPR[RD] = UNSIGNED64 (0x8000000000000000);
+ else
+ GPR[RD] = (n / d);
+
+ TRACE_ALU_RESULT (GPR[RD]);
+}
+
+000000,5.RS,5.RT,5.RD,00011,011111:POOL32X:64::DMODU
+"dmodu r<RD>, r<RS>, r<RT>"
+*mips64r6:
+{
+ uint64_t n = GPR[RS];
+ uint64_t d = GPR[RT];
+
+ check_u64 (SD_, instruction_0);
+ TRACE_ALU_INPUT2 (n, d);
+ if (d == 0)
+ GPR[RD] = UNSIGNED64 (0);
+ else
+ GPR[RD] = (n % d);
+
+ TRACE_ALU_RESULT (GPR[RD]);
+}
+
+011111,5.BASE,5.RT,9.OFFSET,0,110110:SPECIAL3:32::LL
+"ll r<RT>, <OFFSET>(r<BASE>)"
+*mips32r6:
+*mips64r6:
+{
+ do_ll (SD_, RT, EXTEND9 (OFFSET), BASE);
+}
+
+011111,5.BASE,5.RT,5.RD,0000,1,110110:SPECIAL3:32::LLWP
+"llwp r<RT>, r<RD>, (r<BASE>)"
+*mips32r6:
+*mips64r6:
+{
+ int first, second;
+ int offset;
+
+ if (RT == BASE)
+ {
+ first = RD;
+ second = RT;
+ offset = BigEndianCPU ? 0 : 4;
+ }
+ else
+ {
+ first = RT;
+ second = RD;
+ offset = BigEndianCPU ? 4 : 0;
+ }
+
+ do_ll (SD_, first, offset, BASE);
+ do_ll (SD_, second, offset ^ 4, BASE);
+}
+
+
+011111,5.BASE,5.RT,9.OFFSET,0,100110:SPECIAL3:32::SC
+"sc r<RT>, <OFFSET>(r<BASE>)"
+*mips32r6:
+*mips64r6:
+{
+ do_sc (SD_, RT, EXTEND9 (OFFSET), BASE, instruction_0, 1);
+}
+
+011111,5.BASE,5.RT,9.OFFSET,0,110111:SPECIAL3:64::LLD
+"lld r<RT>, <OFFSET>(r<BASE>)"
+*mips64r6:
+{
+ check_u64 (SD_, instruction_0);
+ do_lld (SD_, RT, EXTEND9 (OFFSET), BASE);
+}
+
+
+011111,5.BASE,5.RT,5.RD,0000,1,100110:SPECIAL3:32::SCWP
+"scwp r<RT>, r<RD>, (r<BASE>)"
+*mips32r6:
+*mips64r6:
+{
+ int offset = BigEndianCPU ? 0 : 4;
+
+ do_sc (SD_, RD, offset, BASE, instruction_0, 0);
+ do_sc (SD_, RT, offset ^ 4, BASE, instruction_0, 1);
+}
+
+011111,5.BASE,5.RT,5.RD,0000,1,110111:SPECIAL3:64::LLDP
+"lldp r<RT>, r<RD>, (r<BASE>)"
+*mips64r6:
+{
+ int first, second;
+ int offset;
+
+ check_u64 (SD_, instruction_0);
+
+ if (RT == BASE)
+ {
+ first = RD;
+ second = RT;
+ offset = BigEndianCPU ? 0 : 8;
+ }
+ else
+ {
+ first = RT;
+ second = RD;
+ offset = BigEndianCPU ? 8 : 0;
+ }
+
+ do_lld (SD_, first, offset, BASE);
+ do_lld (SD_, second, offset ^ 8, BASE);
+}
+
+011111,5.BASE,5.RT,9.OFFSET,0,100111:SPECIAL3:64::SCD
+"scd r<RT>, <OFFSET>(r<BASE>)"
+*mips64r6:
+{
+ check_u64 (SD_, instruction_0);
+ do_scd (SD_, RT, EXTEND9 (OFFSET), BASE, 1);
+}
+
+011111,5.BASE,5.RT,5.RD,0000,1,100111:SPECIAL3:64::SCDP
+"scdp r<RT>, r<RD>, (r<BASE>)"
+*mips64r6:
+{
+ int offset = BigEndianCPU ? 0 : 8;
+ check_u64 (SD_, instruction_0);
+
+ do_scd (SD_, RD, offset, BASE, 0);
+ do_scd (SD_, RT, offset ^ 8, BASE, 1);
+}
+
+011111,5.BASE,5.HINT,9.OFFSET,0,110101:SPECIAL3:32::PREF
+"pref <HINT>, <OFFSET>(r<BASE>)"
+*mips32r6:
+*mips64r6:
+{
+ do_pref (SD_, HINT, EXTEND9 (OFFSET), BASE);
+}
+
+011111,5.BASE,5.HINT,9.OFFSET,0,100101:SPECIAL3:32::CACHE
+"cache <HINT>, <OFFSET>(r<BASE>)"
+*mips32r6:
+*mips64r6:
+{
+ do_cache (SD_, HINT, BASE, EXTEND9 (OFFSET), instruction_0);
+}
+
+
+000000,5.RS,00000,5.RD,00001,010000:POOL32X:32::CLZ
+"clz r<RD>, r<RS>"
+*mips32r6:
+*mips64r6:
+{
+ do_clz (SD_, RD, RS);
+}
+
+000000,5.RS,00000,5.RD,00001,010001:POOL32X:32::CLO
+"clo r<RD>, r<RS>"
+*mips32r6:
+*mips64r6:
+{
+ do_clo (SD_, RD, RS);
+}
+
+000000,5.RS,00000,5.RD,00001,010010:POOL32X:64::DCLZ
+"dclz r<RD>, r<RS>"
+*mips64r6:
+{
+ check_u64 (SD_, instruction_0);
+ do_dclz (SD_, RD, RS);
+}
+
+000000,5.RS,00000,5.RD,00001,010011:POOL32X:64::DCLO
+"dclo r<RD>, r<RS>"
+*mips64r6:
+{
+ check_u64 (SD_, instruction_0);
+ do_dclo (SD_, RD, RS);
+}
+010001,1000,1.FMT,5.FT,5.FS,5.FD,010000:POOL32X:32,f::SEL.fmt
+"sel.%s<FMT> f<FD>, f<FS>, f<FT>"
+*mips32r6:
+*mips64r6:
+{
+ check_fpu (SD_);
+ check_fmt_p (SD_, FMT, instruction_0);
+ TRACE_ALU_INPUT3 (FGR[FD], ValueFPR(FS, FMT), ValueFPR(FT, FMT));
+ if ((FGR[FD] & 0x01) != 0)
+ StoreFPR (FD, FMT, ValueFPR (FT, FMT));
+ else
+ StoreFPR (FD, FMT, ValueFPR (FS, FMT));
+ TRACE_ALU_RESULT (ValueFPR(FD, FMT));
+}
+
+010001,1000,1.FMT,5.FT,5.FS,5.FD,010100:POOL32X:32,f::SELEQZ.fmt
+"seleqz.%s<FMT> f<FD>, f<FS>, f<FT>"
+*mips32r6:
+*mips64r6:
+{
+ check_fpu (SD_);
+ check_fmt_p (SD_, FMT, instruction_0);
+ TRACE_ALU_INPUT2 (ValueFPR(FS, FMT), FGR[FT]);
+ if ((FGR[FT] & 0x01) == 0)
+ StoreFPR (FD, FMT, ValueFPR (FS, FMT));
+ else
+ StoreFPR (FD, FMT, 0);
+ TRACE_ALU_RESULT (ValueFPR(FD, FMT));
+}
+
+010001,1000,1.FMT,5.FT,5.FS,5.FD,010111:POOL32X:32,f::SELNEZ.fmt
+"selnez.%s<FMT> f<FD>, f<FS>, f<FT>"
+*mips32r6:
+*mips64r6:
+{
+ check_fpu (SD_);
+ check_fmt_p (SD_, FMT, instruction_0);
+ TRACE_ALU_INPUT2 (ValueFPR(FS, FMT), FGR[FT]);
+ if ((FGR[FT] & 0x01) == 0)
+ StoreFPR (FD, FMT, 0);
+ else
+ StoreFPR (FD, FMT, ValueFPR (FS, FMT));
+ TRACE_ALU_RESULT (ValueFPR(FD, FMT));
+}
+
+000000,5.RS,5.RT,5.RD,00000,110101:POOL32X:32::SELEQZ
+"seleqz r<RD>, r<RS>, r<RT>"
+*mips32r6:
+*mips64r6:
+{
+ TRACE_ALU_INPUT2 (GPR[RS], GPR[RT]);
+ if (GPR[RT] != 0)
+ GPR[RD] = 0;
+ else
+ GPR[RD] = GPR[RS];
+ TRACE_ALU_RESULT (GPR[RD]);
+}
+
+000000,5.RS,5.RT,5.RD,00000,110111:POOL32X:32::SELNEZ
+"selnez r<RD>, r<RS>, r<RT>"
+*mips32r6:
+*mips64r6:
+{
+ TRACE_ALU_INPUT2 (GPR[RS], GPR[RT]);
+ if (GPR[RT] != 0)
+ GPR[RD] = GPR[RS];
+ else
+ GPR[RD] = 0;
+ TRACE_ALU_RESULT (GPR[RD]);
+}
diff --git a/sim/mips/sim-main.h b/sim/mips/sim-main.h
index d724688a434..418c6599118 100644
--- a/sim/mips/sim-main.h
+++ b/sim/mips/sim-main.h
@@ -20,15 +20,14 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */
#ifndef SIM_MAIN_H
#define SIM_MAIN_H
-/* MIPS uses an unusual format for floating point quiet NaNs. */
-#define SIM_QUIET_NAN_NEGATED
-
#define SIM_CORE_SIGNAL(SD,CPU,CIA,MAP,NR_BYTES,ADDR,TRANSFER,ERROR) \
mips_core_signal ((SD), (CPU), (CIA), (MAP), (NR_BYTES), (ADDR), (TRANSFER), (ERROR))
#include "sim-basics.h"
#include "sim-base.h"
#include "bfd.h"
+#include "elf-bfd.h"
+#include "elf/mips.h"
/* Deprecated macros and types for manipulating 64bit values. Use
../common/sim-bits.h and ../common/sim-endian.h macros instead. */
@@ -75,6 +74,9 @@ typedef enum {
fmt_word = 4,
fmt_long = 5,
fmt_ps = 6,
+ /* The following is a special case for FP conditions where only
+ the lower 32bits are considered. This is a HACK. */
+ fmt_dc32 = 7,
/* The following are well outside the normal acceptable format
range, and are used in the register status vector. */
fmt_unknown = 0x10000000,
@@ -264,6 +266,7 @@ struct _sim_cpu {
#define DSPC ((CPU)->dspc)
#define DELAY_SLOT(TARGET) NIA = delayslot32 (SD_, (TARGET))
+#define FORBIDDEN_SLOT() { NIA = forbiddenslot32 (SD_); }
#define NULLIFY_NEXT_INSTRUCTION() NIA = nullify_next_insn32 (SD_)
@@ -274,15 +277,16 @@ struct _sim_cpu {
#define DSSTATE ((CPU)->dsstate)
/* Flags in the "state" variable: */
-#define simHALTEX (1 << 2) /* 0 = run; 1 = halt on exception */
-#define simHALTIN (1 << 3) /* 0 = run; 1 = halt on interrupt */
-#define simTRACE (1 << 8) /* 0 = do nothing; 1 = trace address activity */
-#define simPCOC0 (1 << 17) /* COC[1] from current */
-#define simPCOC1 (1 << 18) /* COC[1] from previous */
-#define simDELAYSLOT (1 << 24) /* 0 = do nothing; 1 = delay slot entry exists */
-#define simSKIPNEXT (1 << 25) /* 0 = do nothing; 1 = skip instruction */
-#define simSIGINT (1 << 28) /* 0 = do nothing; 1 = SIGINT has occured */
-#define simJALDELAYSLOT (1 << 29) /* 1 = in jal delay slot */
+#define simHALTEX (1 << 2) /* 0 = run; 1 = halt on exception */
+#define simHALTIN (1 << 3) /* 0 = run; 1 = halt on interrupt */
+#define simTRACE (1 << 8) /* 1 = trace address activity */
+#define simPCOC0 (1 << 17) /* COC[1] from current */
+#define simPCOC1 (1 << 18) /* COC[1] from previous */
+#define simDELAYSLOT (1 << 24) /* 1 = delay slot entry exists */
+#define simSKIPNEXT (1 << 25) /* 0 = do nothing; 1 = skip instruction */
+#define simSIGINT (1 << 28) /* 0 = do nothing; 1 = SIGINT has occured */
+#define simJALDELAYSLOT (1 << 29) /* 1 = in jal delay slot */
+#define simFORBIDDENSLOT (1 << 30) /* 1 = n forbidden slot */
#ifndef ENGINE_ISSUE_PREFIX_HOOK
#define ENGINE_ISSUE_PREFIX_HOOK() \
@@ -535,6 +539,10 @@ struct mips_sim_state {
/* Bits reserved for implementations: */
#define status_SBX (1 << 16) /* Enable SiByte SB-1 extensions. */
+/* From R6 onwards, some instructions (e.g. ADDIUPC) change behaviour based
+ * on the Status.UX bits to either sign extend, or act as full 64 bit. */
+#define status_optional_EXTEND32(x) ((SR & status_UX) ? x : EXTEND32(x))
+
#define cause_BD ((unsigned)1 << 31) /* L1 Exception in branch delay slot */
#define cause_BD2 (1 << 30) /* L2 Exception in branch delay slot */
#define cause_CE_mask 0x30000000 /* Coprocessor exception */
@@ -722,8 +730,55 @@ void test_fcsr (SIM_STATE);
/* FPU operations. */
-void fp_cmp (SIM_STATE, uint64_t op1, uint64_t op2, FP_formats fmt, int abs, int cond, int cc);
-#define Compare(op1,op2,fmt,cond,cc) fp_cmp(SIM_ARGS, op1, op2, fmt, 0, cond, cc)
+/* Non-signalling */
+#define FP_R6CMP_AF 0x0
+#define FP_R6CMP_EQ 0x2
+#define FP_R6CMP_LE 0x6
+#define FP_R6CMP_LT 0x4
+#define FP_R6CMP_NE 0x13
+#define FP_R6CMP_OR 0x11
+#define FP_R6CMP_UEQ 0x3
+#define FP_R6CMP_ULE 0x7
+#define FP_R6CMP_ULT 0x5
+#define FP_R6CMP_UN 0x1
+#define FP_R6CMP_UNE 0x12
+
+/* Signalling */
+#define FP_R6CMP_SAF 0x8
+#define FP_R6CMP_SEQ 0xa
+#define FP_R6CMP_SLE 0xe
+#define FP_R6CMP_SLT 0xc
+#define FP_R6CMP_SNE 0x1b
+#define FP_R6CMP_SOR 0x19
+#define FP_R6CMP_SUEQ 0xb
+#define FP_R6CMP_SULE 0xf
+#define FP_R6CMP_SULT 0xd
+#define FP_R6CMP_SUN 0x9
+#define FP_R6CMP_SUNE 0x1a
+
+/* FPU Class */
+#define FP_R6CLASS_SNAN (1<<0)
+#define FP_R6CLASS_QNAN (1<<1)
+#define FP_R6CLASS_NEGINF (1<<2)
+#define FP_R6CLASS_NEGNORM (1<<3)
+#define FP_R6CLASS_NEGSUB (1<<4)
+#define FP_R6CLASS_NEGZERO (1<<5)
+#define FP_R6CLASS_POSINF (1<<6)
+#define FP_R6CLASS_POSNORM (1<<7)
+#define FP_R6CLASS_POSSUB (1<<8)
+#define FP_R6CLASS_POSZERO (1<<9)
+
+void fp_cmp (SIM_STATE, uint64_t op1, uint64_t op2, FP_formats fmt,
+ int abs, int cond, int cc);
+#define Compare(op1,op2,fmt,cond,cc) \
+ fp_cmp(SIM_ARGS, op1, op2, fmt, 0, cond, cc)
+uint64_t fp_r6_cmp (SIM_STATE, uint64_t op1, uint64_t op2,
+ FP_formats fmt, int cond);
+#define R6Compare(op1,op2,fmt,cond) fp_r6_cmp(SIM_ARGS, op1, op2, fmt, cond)
+uint64_t fp_classify(SIM_STATE, uint64_t op, FP_formats fmt);
+#define Classify(op, fmt) fp_classify(SIM_ARGS, op, fmt)
+int fp_rint(SIM_STATE, uint64_t op, uint64_t *ans, FP_formats fmt);
+#define RoundToIntegralExact(op, ans, fmt) fp_rint(SIM_ARGS, op, ans, fmt)
uint64_t fp_abs (SIM_STATE, uint64_t op, FP_formats fmt);
#define AbsoluteValue(op,fmt) fp_abs(SIM_ARGS, op, fmt)
uint64_t fp_neg (SIM_STATE, uint64_t op, FP_formats fmt);
@@ -736,6 +791,14 @@ uint64_t fp_mul (SIM_STATE, uint64_t op1, uint64_t op2, FP_formats fmt);
#define Multiply(op1,op2,fmt) fp_mul(SIM_ARGS, op1, op2, fmt)
uint64_t fp_div (SIM_STATE, uint64_t op1, uint64_t op2, FP_formats fmt);
#define Divide(op1,op2,fmt) fp_div(SIM_ARGS, op1, op2, fmt)
+uint64_t fp_min (SIM_STATE, uint64_t op1, uint64_t op2, FP_formats fmt);
+#define Min(op1,op2,fmt) fp_min(SIM_ARGS, op1, op2, fmt)
+uint64_t fp_max (SIM_STATE, uint64_t op1, uint64_t op2, FP_formats fmt);
+#define Max(op1,op2,fmt) fp_max(SIM_ARGS, op1, op2, fmt)
+uint64_t fp_mina (SIM_STATE, uint64_t op1, uint64_t op2, FP_formats fmt);
+#define MinA(op1,op2,fmt) fp_mina(SIM_ARGS, op1, op2, fmt)
+uint64_t fp_maxa (SIM_STATE, uint64_t op1, uint64_t op2, FP_formats fmt);
+#define MaxA(op1,op2,fmt) fp_maxa(SIM_ARGS, op1, op2, fmt)
uint64_t fp_recip (SIM_STATE, uint64_t op, FP_formats fmt);
#define Recip(op,fmt) fp_recip(SIM_ARGS, op, fmt)
uint64_t fp_sqrt (SIM_STATE, uint64_t op, FP_formats fmt);
@@ -744,6 +807,12 @@ uint64_t fp_rsqrt (SIM_STATE, uint64_t op, FP_formats fmt);
#define RSquareRoot(op,fmt) fp_rsqrt(SIM_ARGS, op, fmt)
uint64_t fp_madd (SIM_STATE, uint64_t op1, uint64_t op2,
uint64_t op3, FP_formats fmt);
+#define FusedMultiplyAdd(op1,op2,op3,fmt) fp_fmadd(SIM_ARGS, op1, op2, op3, fmt)
+uint64_t fp_fmadd (SIM_STATE, uint64_t op1, uint64_t op2,
+ uint64_t op3, FP_formats fmt);
+#define FusedMultiplySub(op1,op2,op3,fmt) fp_fmsub(SIM_ARGS, op1, op2, op3, fmt)
+uint64_t fp_fmsub (SIM_STATE, uint64_t op1, uint64_t op2,
+ uint64_t op3, FP_formats fmt);
#define MultiplyAdd(op1,op2,op3,fmt) fp_madd(SIM_ARGS, op1, op2, op3, fmt)
uint64_t fp_msub (SIM_STATE, uint64_t op1, uint64_t op2,
uint64_t op3, FP_formats fmt);
diff --git a/sim/mn10300/configure b/sim/mn10300/configure
index 46e30c1cff0..569d09ba18e 100755
--- a/sim/mn10300/configure
+++ b/sim/mn10300/configure
@@ -587,7 +587,6 @@ LIBOBJS
SIM_COMMON_BUILD_FALSE
SIM_COMMON_BUILD_TRUE
sim_float
-cgen_breaks
target_alias
host_alias
build_alias
@@ -1734,17 +1733,10 @@ fi
fi
-cgen_breaks=""
-if grep CGEN_MAINT $srcdir/Makefile.in >/dev/null; then
-cgen_breaks="break cgen_rtx_error";
-fi
-
ac_config_files="$ac_config_files Makefile.sim:Makefile.in"
ac_config_files="$ac_config_files Make-common.sim:../common/Make-common.in"
-ac_config_files="$ac_config_files .gdbinit:../common/gdbinit.in"
-
ac_config_commands="$ac_config_commands Makefile"
ac_config_commands="$ac_config_commands stamp-h"
@@ -2469,7 +2461,6 @@ do
case $ac_config_target in
"Makefile.sim") CONFIG_FILES="$CONFIG_FILES Makefile.sim:Makefile.in" ;;
"Make-common.sim") CONFIG_FILES="$CONFIG_FILES Make-common.sim:../common/Make-common.in" ;;
- ".gdbinit") CONFIG_FILES="$CONFIG_FILES .gdbinit:../common/gdbinit.in" ;;
"Makefile") CONFIG_COMMANDS="$CONFIG_COMMANDS Makefile" ;;
"stamp-h") CONFIG_COMMANDS="$CONFIG_COMMANDS stamp-h" ;;
diff --git a/sim/or1k/configure b/sim/or1k/configure
index 46e30c1cff0..569d09ba18e 100755
--- a/sim/or1k/configure
+++ b/sim/or1k/configure
@@ -587,7 +587,6 @@ LIBOBJS
SIM_COMMON_BUILD_FALSE
SIM_COMMON_BUILD_TRUE
sim_float
-cgen_breaks
target_alias
host_alias
build_alias
@@ -1734,17 +1733,10 @@ fi
fi
-cgen_breaks=""
-if grep CGEN_MAINT $srcdir/Makefile.in >/dev/null; then
-cgen_breaks="break cgen_rtx_error";
-fi
-
ac_config_files="$ac_config_files Makefile.sim:Makefile.in"
ac_config_files="$ac_config_files Make-common.sim:../common/Make-common.in"
-ac_config_files="$ac_config_files .gdbinit:../common/gdbinit.in"
-
ac_config_commands="$ac_config_commands Makefile"
ac_config_commands="$ac_config_commands stamp-h"
@@ -2469,7 +2461,6 @@ do
case $ac_config_target in
"Makefile.sim") CONFIG_FILES="$CONFIG_FILES Makefile.sim:Makefile.in" ;;
"Make-common.sim") CONFIG_FILES="$CONFIG_FILES Make-common.sim:../common/Make-common.in" ;;
- ".gdbinit") CONFIG_FILES="$CONFIG_FILES .gdbinit:../common/gdbinit.in" ;;
"Makefile") CONFIG_COMMANDS="$CONFIG_COMMANDS Makefile" ;;
"stamp-h") CONFIG_COMMANDS="$CONFIG_COMMANDS stamp-h" ;;
diff --git a/sim/ppc/hw_init.c b/sim/ppc/hw_init.c
index 3d58833bb3d..66f205851d5 100644
--- a/sim/ppc/hw_init.c
+++ b/sim/ppc/hw_init.c
@@ -576,7 +576,7 @@ create_ppc_elf_stack_frame(device *me,
const unsigned sizeof_argv = sizeof_arguments(argv);
const unsigned_word start_argv = start_envp - sizeof_argv;
- /* link register save address - alligned to a 16byte boundary */
+ /* link register save address - aligned to a 16byte boundary */
const unsigned_word top_of_stack = ((start_argv
- 2 * sizeof(unsigned_word))
& ~0xf);
diff --git a/sim/ppc/std-config.h b/sim/ppc/std-config.h
index 0619d1dff19..e02d5946a73 100644
--- a/sim/ppc/std-config.h
+++ b/sim/ppc/std-config.h
@@ -183,7 +183,7 @@ extern int current_environment;
This model. Instead allows both little and big endian modes to
either take exceptions or handle miss aligned transfers.
- If 0 is specified then for big-endian mode miss alligned accesses
+ If 0 is specified then for big-endian mode miss aligned accesses
are permitted (NONSTRICT_ALIGNMENT) while in little-endian mode the
processor will fault on them (STRICT_ALIGNMENT). */
diff --git a/sim/riscv/configure b/sim/riscv/configure
index 577d4cd32e7..d3f0d47e26e 100755
--- a/sim/riscv/configure
+++ b/sim/riscv/configure
@@ -587,7 +587,6 @@ LIBOBJS
SIM_COMMON_BUILD_FALSE
SIM_COMMON_BUILD_TRUE
sim_float
-cgen_breaks
target_alias
host_alias
build_alias
@@ -1740,17 +1739,10 @@ fi
fi
-cgen_breaks=""
-if grep CGEN_MAINT $srcdir/Makefile.in >/dev/null; then
-cgen_breaks="break cgen_rtx_error";
-fi
-
ac_config_files="$ac_config_files Makefile.sim:Makefile.in"
ac_config_files="$ac_config_files Make-common.sim:../common/Make-common.in"
-ac_config_files="$ac_config_files .gdbinit:../common/gdbinit.in"
-
ac_config_commands="$ac_config_commands Makefile"
ac_config_commands="$ac_config_commands stamp-h"
@@ -2475,7 +2467,6 @@ do
case $ac_config_target in
"Makefile.sim") CONFIG_FILES="$CONFIG_FILES Makefile.sim:Makefile.in" ;;
"Make-common.sim") CONFIG_FILES="$CONFIG_FILES Make-common.sim:../common/Make-common.in" ;;
- ".gdbinit") CONFIG_FILES="$CONFIG_FILES .gdbinit:../common/gdbinit.in" ;;
"Makefile") CONFIG_COMMANDS="$CONFIG_COMMANDS Makefile" ;;
"stamp-h") CONFIG_COMMANDS="$CONFIG_COMMANDS stamp-h" ;;
diff --git a/sim/rl78/trace.c b/sim/rl78/trace.c
index df75d793f69..a485c4c004d 100644
--- a/sim/rl78/trace.c
+++ b/sim/rl78/trace.c
@@ -104,6 +104,18 @@ op_printf (char *buf, char *fmt, ...)
return ret;
}
+static int
+op_styled_printf (char *buf, enum disassembler_style style, char *fmt, ...)
+{
+ int ret;
+ va_list ap;
+
+ va_start (ap, fmt);
+ ret = vsprintf (opbuf + strlen (opbuf), fmt, ap);
+ va_end (ap);
+ return ret;
+}
+
static bfd * current_bfd = NULL;
static asymbol ** symtab = NULL;
static int symcount = 0;
@@ -205,7 +217,7 @@ sim_get_current_source_location (const char ** pfilename,
initted = 1;
memset (& info, 0, sizeof (info));
- INIT_DISASSEMBLE_INFO (info, stdout, op_printf);
+ INIT_DISASSEMBLE_INFO (info, stdout, op_printf, op_styled_printf);
info.read_memory_func = sim_dis_read;
info.arch = bfd_get_arch (current_bfd);
info.mach = bfd_get_mach (current_bfd);
diff --git a/sim/rx/trace.c b/sim/rx/trace.c
index 6e9a266ca3a..df83dc14a1b 100644
--- a/sim/rx/trace.c
+++ b/sim/rx/trace.c
@@ -109,6 +109,18 @@ op_printf (char *buf, char *fmt, ...)
return ret;
}
+static int ATTRIBUTE_PRINTF (3, 4)
+op_styled_printf (char *buf, enum disassembler_style style, char *fmt, ...)
+{
+ int ret;
+ va_list ap;
+
+ va_start (ap, fmt);
+ ret = vsprintf (opbuf + strlen (opbuf), fmt, ap);
+ va_end (ap);
+ return ret;
+}
+
static bfd * current_bfd = NULL;
static asymbol ** symtab = NULL;
static int symcount = 0;
@@ -209,7 +221,7 @@ sim_get_current_source_location (const char ** pfilename,
initted = 1;
memset (& info, 0, sizeof (info));
- INIT_DISASSEMBLE_INFO (info, stdout, op_printf);
+ INIT_DISASSEMBLE_INFO (info, stdout, op_printf, op_styled_printf);
info.read_memory_func = sim_dis_read;
info.arch = bfd_get_arch (current_bfd);
info.mach = bfd_get_mach (current_bfd);
diff --git a/sim/testsuite/aarch64/allinsn.exp b/sim/testsuite/aarch64/allinsn.exp
index e09d15739b3..abc11462f09 100644
--- a/sim/testsuite/aarch64/allinsn.exp
+++ b/sim/testsuite/aarch64/allinsn.exp
@@ -2,16 +2,13 @@
sim_init
-if [istarget *] {
- # all machines
- set all_machs "aarch64"
+# all machines
+set all_machs "aarch64"
- foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.s]] {
- # If we're only testing specific files and this isn't one of them,
- # skip it.
- if ![runtest_file_p $runtests $src] {
- continue
- }
- run_sim_test $src $all_machs
+foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.s]] {
+ # If we're only testing specific files and this isn't one of them, skip it.
+ if ![runtest_file_p $runtests $src] {
+ continue
}
+ run_sim_test $src $all_machs
}
diff --git a/sim/testsuite/arm/allinsn.exp b/sim/testsuite/arm/allinsn.exp
index da28b69e51a..95a5759a568 100644
--- a/sim/testsuite/arm/allinsn.exp
+++ b/sim/testsuite/arm/allinsn.exp
@@ -2,18 +2,14 @@
sim_init
-if { [istarget *] } {
- # all machines
- set all_machs "xscale"
-
- # The .cgs suffix is for "cgen .s".
- foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.cgs]] {
- # If we're only testing specific files and this isn't one of them,
- # skip it.
- if ![runtest_file_p $runtests $src] {
- continue
- }
-
- run_sim_test $src $all_machs
+# all machines
+set all_machs "xscale"
+
+# The .cgs suffix is for "cgen .s".
+foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.cgs]] {
+ # If we're only testing specific files and this isn't one of them, skip it.
+ if ![runtest_file_p $runtests $src] {
+ continue
}
+ run_sim_test $src $all_machs
}
diff --git a/sim/testsuite/arm/iwmmxt/iwmmxt.exp b/sim/testsuite/arm/iwmmxt/iwmmxt.exp
index 19a78a201ed..3e0fb333429 100644
--- a/sim/testsuite/arm/iwmmxt/iwmmxt.exp
+++ b/sim/testsuite/arm/iwmmxt/iwmmxt.exp
@@ -2,18 +2,14 @@
sim_init
-if { [istarget *] } {
- # all machines
- set all_machs "xscale"
-
- # The .cgs suffix is for "cgen .s".
- foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.cgs]] {
- # If we're only testing specific files and this isn't one of them,
- # skip it.
- if ![runtest_file_p $runtests $src] {
- continue
- }
-
- run_sim_test $src $all_machs
+# all machines
+set all_machs "xscale"
+
+# The .cgs suffix is for "cgen .s".
+foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.cgs]] {
+ # If we're only testing specific files and this isn't one of them, skip it.
+ if ![runtest_file_p $runtests $src] {
+ continue
}
+ run_sim_test $src $all_machs
}
diff --git a/sim/testsuite/arm/misc.exp b/sim/testsuite/arm/misc.exp
index 47d714cce2f..5ba5f648bb1 100644
--- a/sim/testsuite/arm/misc.exp
+++ b/sim/testsuite/arm/misc.exp
@@ -2,18 +2,14 @@
sim_init
-if { [istarget *] } {
- # all machines
- set all_machs "arm7tdmi"
-
- # The .ms suffix is for "miscellaneous .s".
- foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.ms]] {
- # If we're only testing specific files and this isn't one of them,
- # skip it.
- if ![runtest_file_p $runtests $src] {
- continue
- }
-
- run_sim_test $src $all_machs
+# all machines
+set all_machs "arm7tdmi"
+
+# The .ms suffix is for "miscellaneous .s".
+foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.ms]] {
+ # If we're only testing specific files and this isn't one of them, skip it.
+ if ![runtest_file_p $runtests $src] {
+ continue
}
+ run_sim_test $src $all_machs
}
diff --git a/sim/testsuite/arm/thumb/allthumb.exp b/sim/testsuite/arm/thumb/allthumb.exp
index 36eb29c08f0..db1d00d1318 100644
--- a/sim/testsuite/arm/thumb/allthumb.exp
+++ b/sim/testsuite/arm/thumb/allthumb.exp
@@ -2,18 +2,14 @@
sim_init
-if { [istarget *] } {
- # all machines
- set all_machs "arm7tdmi"
-
- # The .cgs suffix is for "cgen .s".
- foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.cgs]] {
- # If we're only testing specific files and this isn't one of them,
- # skip it.
- if ![runtest_file_p $runtests $src] {
- continue
- }
-
- run_sim_test $src $all_machs
+# all machines
+set all_machs "arm7tdmi"
+
+# The .cgs suffix is for "cgen .s".
+foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.cgs]] {
+ # If we're only testing specific files and this isn't one of them, skip it.
+ if ![runtest_file_p $runtests $src] {
+ continue
}
+ run_sim_test $src $all_machs
}
diff --git a/sim/testsuite/arm/xscale/xscale.exp b/sim/testsuite/arm/xscale/xscale.exp
index 80faf5c119f..0e5a7549b54 100644
--- a/sim/testsuite/arm/xscale/xscale.exp
+++ b/sim/testsuite/arm/xscale/xscale.exp
@@ -2,18 +2,14 @@
sim_init
-if { [istarget *] } {
- # all machines
- set all_machs "xscale"
-
- # The .cgs suffix is for "cgen .s".
- foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.cgs]] {
- # If we're only testing specific files and this isn't one of them,
- # skip it.
- if ![runtest_file_p $runtests $src] {
- continue
- }
-
- run_sim_test $src $all_machs
+# all machines
+set all_machs "xscale"
+
+# The .cgs suffix is for "cgen .s".
+foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.cgs]] {
+ # If we're only testing specific files and this isn't one of them, skip it.
+ if ![runtest_file_p $runtests $src] {
+ continue
}
+ run_sim_test $src $all_machs
}
diff --git a/sim/testsuite/avr/allinsn.exp b/sim/testsuite/avr/allinsn.exp
index 56b6e396881..4664686fb5a 100644
--- a/sim/testsuite/avr/allinsn.exp
+++ b/sim/testsuite/avr/allinsn.exp
@@ -2,16 +2,13 @@
sim_init
-if [istarget *] {
- # all machines
- set all_machs "avr"
+# all machines
+set all_machs "avr"
- foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.s]] {
- # If we're only testing specific files and this isn't one of them,
- # skip it.
- if ![runtest_file_p $runtests $src] {
- continue
- }
- run_sim_test $src $all_machs
+foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.s]] {
+ # If we're only testing specific files and this isn't one of them, skip it.
+ if ![runtest_file_p $runtests $src] {
+ continue
}
+ run_sim_test $src $all_machs
}
diff --git a/sim/testsuite/bfin/allinsn.exp b/sim/testsuite/bfin/allinsn.exp
index d6a45304e36..fccad36c866 100644
--- a/sim/testsuite/bfin/allinsn.exp
+++ b/sim/testsuite/bfin/allinsn.exp
@@ -6,16 +6,13 @@ global CFLAGS_FOR_TARGET_init
set CFLAGS_FOR_TARGET_init "-mcpu=bf537"
sim_init
-if [istarget *] {
- # all machines
- set all_machs "bfin"
+# all machines
+set all_machs "bfin"
- foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.\[csS\]]] {
- # If we're only testing specific files and this isn't one of them,
- # skip it.
- if ![runtest_file_p $runtests $src] {
- continue
- }
- run_sim_test $src $all_machs
+foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.\[csS\]]] {
+ # If we're only testing specific files and this isn't one of them, skip it.
+ if ![runtest_file_p $runtests $src] {
+ continue
}
+ run_sim_test $src $all_machs
}
diff --git a/sim/testsuite/bpf/allinsn.exp b/sim/testsuite/bpf/allinsn.exp
index 88752b8e568..98f0346776a 100644
--- a/sim/testsuite/bpf/allinsn.exp
+++ b/sim/testsuite/bpf/allinsn.exp
@@ -2,23 +2,19 @@
sim_init
-if [istarget *] {
- # all machines
- set all_machs "bpf"
+# all machines
+set all_machs "bpf"
- global SIMFLAGS_FOR_TARGET
- set SIMFLAGS_FOR_TARGET "--memory-size=4Mb"
+global SIMFLAGS_FOR_TARGET
+set SIMFLAGS_FOR_TARGET "--memory-size=4Mb"
- global LDFLAGS_FOR_TARGET
- set LDFLAGS_FOR_TARGET "-Ttext=0x0"
+global LDFLAGS_FOR_TARGET
+set LDFLAGS_FOR_TARGET "-Ttext=0x0"
- foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.s]] {
- # If we're only testing specific files and this isn't one of them,
- # skip it.
- if ![runtest_file_p $runtests $src] {
- continue
- }
-
- run_sim_test $src $all_machs
+foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.s]] {
+ # If we're only testing specific files and this isn't one of them, skip it.
+ if ![runtest_file_p $runtests $src] {
+ continue
}
+ run_sim_test $src $all_machs
}
diff --git a/sim/testsuite/cr16/allinsn.exp b/sim/testsuite/cr16/allinsn.exp
index 39b464a85ff..1bdda16635b 100644
--- a/sim/testsuite/cr16/allinsn.exp
+++ b/sim/testsuite/cr16/allinsn.exp
@@ -2,23 +2,19 @@
sim_init
-if [istarget *] {
- # all machines
- set all_machs "cr16"
+# all machines
+set all_machs "cr16"
- global SIMFLAGS_FOR_TARGET
- # The cr16 linker sets the default LMA base to 0, and all the code
- # expects the VMA when running, so use that when running the tests.
- set SIMFLAGS_FOR_TARGET "--load-vma"
+global SIMFLAGS_FOR_TARGET
+# The cr16 linker sets the default LMA base to 0, and all the code
+# expects the VMA when running, so use that when running the tests.
+set SIMFLAGS_FOR_TARGET "--load-vma"
- # The .cgs suffix is for "cgen .s".
- foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.cgs]] {
- # If we're only testing specific files and this isn't one of them,
- # skip it.
- if ![runtest_file_p $runtests $src] {
- continue
- }
-
- run_sim_test $src $all_machs
+# The .cgs suffix is for "cgen .s".
+foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.cgs]] {
+ # If we're only testing specific files and this isn't one of them, skip it.
+ if ![runtest_file_p $runtests $src] {
+ continue
}
+ run_sim_test $src $all_machs
}
diff --git a/sim/testsuite/cr16/misc.exp b/sim/testsuite/cr16/misc.exp
index 4d42667b0a4..40cdd965cfb 100644
--- a/sim/testsuite/cr16/misc.exp
+++ b/sim/testsuite/cr16/misc.exp
@@ -2,23 +2,19 @@
sim_init
-if [istarget *] {
- # all machines
- set all_machs "cr16"
+# all machines
+set all_machs "cr16"
- global SIMFLAGS_FOR_TARGET
- # The cr16 linker sets the default LMA base to 0, and all the code
- # expects the VMA when running, so use that when running the tests.
- set SIMFLAGS_FOR_TARGET "--load-vma"
+global SIMFLAGS_FOR_TARGET
+# The cr16 linker sets the default LMA base to 0, and all the code
+# expects the VMA when running, so use that when running the tests.
+set SIMFLAGS_FOR_TARGET "--load-vma"
- # The .ms suffix is for "miscellaneous .s".
- foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.ms]] {
- # If we're only testing specific files and this isn't one of them,
- # skip it.
- if ![runtest_file_p $runtests $src] {
- continue
- }
-
- run_sim_test $src $all_machs
+# The .ms suffix is for "miscellaneous .s".
+foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.ms]] {
+ # If we're only testing specific files and this isn't one of them, skip it.
+ if ![runtest_file_p $runtests $src] {
+ continue
}
+ run_sim_test $src $all_machs
}
diff --git a/sim/testsuite/cris/asm/asm.exp b/sim/testsuite/cris/asm/asm.exp
index 6fed30acbd8..fe6b373ac43 100644
--- a/sim/testsuite/cris/asm/asm.exp
+++ b/sim/testsuite/cris/asm/asm.exp
@@ -17,31 +17,29 @@
sim_init
-if [istarget *] {
- global ASFLAGS_FOR_TARGET
- # All machines we test and the corresponding assembler option. Needs
- # update if we build the simulator for crisv0 crisv3 and crisv8 too.
-
- set combos {{"crisv10" "--march=v10 --no-mul-bug-abort"}
- {"crisv32" "--march=v32"}}
-
- # We need to pass different assembler flags for each machine.
- # Specifying it here rather than adding a specifier to each and every
- # test-file is preferrable.
-
- foreach combo $combos {
- set mach [lindex $combo 0]
- set ASFLAGS_FOR_TARGET "[lindex $combo 1]"
-
- # The .ms suffix is for "miscellaneous .s".
- foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.ms]] {
- # If we're only testing specific files and this isn't one of them,
- # skip it.
- if ![runtest_file_p $runtests $src] {
- continue
- }
-
- run_sim_test $src $mach
+global ASFLAGS_FOR_TARGET
+# All machines we test and the corresponding assembler option. Needs
+# update if we build the simulator for crisv0 crisv3 and crisv8 too.
+
+set combos {{"crisv10" "--march=v10 --no-mul-bug-abort"}
+ {"crisv32" "--march=v32"}}
+
+# We need to pass different assembler flags for each machine.
+# Specifying it here rather than adding a specifier to each and every
+# test-file is preferrable.
+
+foreach combo $combos {
+ set mach [lindex $combo 0]
+ set ASFLAGS_FOR_TARGET "[lindex $combo 1]"
+
+ # The .ms suffix is for "miscellaneous .s".
+ foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.ms]] {
+ # If we're only testing specific files and this isn't one of them,
+ # skip it.
+ if ![runtest_file_p $runtests $src] {
+ continue
}
+
+ run_sim_test $src $mach
}
}
diff --git a/sim/testsuite/cris/asm/endmem1.ms b/sim/testsuite/cris/asm/endmem1.ms
new file mode 100644
index 00000000000..ff9e334c38a
--- /dev/null
+++ b/sim/testsuite/cris/asm/endmem1.ms
@@ -0,0 +1,47 @@
+# mach: crisv3 crisv8 crisv10 crisv32
+
+; Check that the simulator and the program agrees on the
+; value of endmem; the base point for further allocations.
+
+ .include "testutils.inc"
+ start
+
+; First, get the end of memory by calling brk with 0 to get
+; the current value.
+ clear.d $r10
+ movu.w 0x2d,$r9
+ break 13
+
+; Get one more 8192-byte page.
+ addu.w 8192,$r10
+
+; Save it in a (call- and) syscall-saved register.
+ move.d $r10,$r0
+
+; Call brk again to raise the value.
+ movu.w 0x2d,$r9
+ break 13
+
+; If the simulator messed up internally, it'd have exited
+; with an error at the brk call. But, let's sanity-check
+; the return-value: it should be the same as the input and
+; the allocated memory should be accessible.
+ cmp.d $r10,$r0
+ beq 0f
+ nop
+
+1:
+ fail
+
+0:
+; Check that we can write and read the last address on that
+; page.
+ subq 4,$r10
+ move.d 0xbad1d101,$r12
+ move.d $r12,[$r10]
+ move.d [$r10],$r11
+ cmp.d $r11,$r12
+ bne 1b
+ nop
+
+ pass
diff --git a/sim/testsuite/cris/asm/io1.ms b/sim/testsuite/cris/asm/io1.ms
index 3d252ae1f93..3b830f02327 100644
--- a/sim/testsuite/cris/asm/io1.ms
+++ b/sim/testsuite/cris/asm/io1.ms
@@ -1,4 +1,5 @@
# mach: crisv32
+# requires: simoption --cris-900000xx
# sim: --cris-900000xx --memory-region 0x90000000,0x10
# xerror:
# output: /core/cris_900000xx: memory map 0:0x90000000..0x900000ff (256 bytes) overlaps 0:0x90000000..0x9000000f (16 bytes)\nQuit Simulator\n
diff --git a/sim/testsuite/cris/asm/io2.ms b/sim/testsuite/cris/asm/io2.ms
index f6341d3739d..ce026c5daee 100644
--- a/sim/testsuite/cris/asm/io2.ms
+++ b/sim/testsuite/cris/asm/io2.ms
@@ -1,4 +1,5 @@
# mach: crisv32
+# requires: simoption --cris-900000xx
# sim: --cris-900000xx
# xerror:
# output: b1e\n
diff --git a/sim/testsuite/cris/asm/io3.ms b/sim/testsuite/cris/asm/io3.ms
index 664dc61d267..d0760190737 100644
--- a/sim/testsuite/cris/asm/io3.ms
+++ b/sim/testsuite/cris/asm/io3.ms
@@ -1,4 +1,5 @@
# mach: crisv32
+# requires: simoption --cris-900000xx
# sim: --cris-900000xx
# output: ce11d0c\n
diff --git a/sim/testsuite/cris/asm/io6.ms b/sim/testsuite/cris/asm/io6.ms
index 3af3536265e..6ddeee1733e 100644
--- a/sim/testsuite/cris/asm/io6.ms
+++ b/sim/testsuite/cris/asm/io6.ms
@@ -1,5 +1,6 @@
# mach: crisv32
# ld: --section-start=.text=0
+# requires: simoption --cris-900000xx
# sim: --cris-900000xx
# xerror:
# output: b1e\n
diff --git a/sim/testsuite/cris/asm/io7.ms b/sim/testsuite/cris/asm/io7.ms
index 84488e9452e..26261971b95 100644
--- a/sim/testsuite/cris/asm/io7.ms
+++ b/sim/testsuite/cris/asm/io7.ms
@@ -1,5 +1,6 @@
# mach: crisv32
# ld: --section-start=.text=0
+# requires: simoption --cris-900000xx
# sim: --cris-900000xx
# xerror:
# output: ce11d0c\n
diff --git a/sim/testsuite/cris/c/c.exp b/sim/testsuite/cris/c/c.exp
index 5711fd2f0bc..ffeccc87186 100644
--- a/sim/testsuite/cris/c/c.exp
+++ b/sim/testsuite/cris/c/c.exp
@@ -17,6 +17,9 @@
sim_init
+global global_cc_works
+global global_cc_os
+
set CFLAGS_FOR_TARGET "-O2"
if [istarget cris-*-*] {
set mach "crisv10"
@@ -24,13 +27,16 @@ if [istarget cris-*-*] {
set mach "crisv32"
}
-if [istarget *] {
- append CFLAGS_FOR_TARGET " -sim"
+# Make sure we're using the right runtime for simulator runs. If the
+# cris-sim dejagnu baseboard is used, -sim3 will be duplicated, but
+# that's ok. For e.g. cris*-linux-gnu, neither -sim not -sim3 are
+# supported options and likely not other targets too.
+set saved_CFLAGS_FOR_TARGET $CFLAGS_FOR_TARGET
+if { $global_cc_os == "newlib" } {
+ append CFLAGS_FOR_TARGET " -sim3"
}
# Using target_compile, since it is less noisy,
-global global_cc_works
-global global_cc_os
if { $global_cc_works == 1 } {
# Now check if we can link a program dynamically, and where
# libc.so is located. If it is, we provide a sym link to the
@@ -178,7 +184,7 @@ foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.c]] {
verbose -log "Compiling $src with $opts(cc)"
if { [target_compile $src "$objdir/$testname.x" "executable" "$opts(cc)" ] != "" } {
- unresolved $testname
+ fail "$mach $testname (compilation)"
continue
}
@@ -239,3 +245,5 @@ foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.c]] {
$status "$mach $testname"
}
}
+
+set CFLAGS_FOR_TARGET $saved_CFLAGS_FOR_TARGET
diff --git a/sim/testsuite/cris/c/openpf1.c b/sim/testsuite/cris/c/openpf1.c
index 92d12bfc437..37940d709fb 100644
--- a/sim/testsuite/cris/c/openpf1.c
+++ b/sim/testsuite/cris/c/openpf1.c
@@ -3,8 +3,8 @@
We assume, with EXE being the name of the executable:
- The simulator executes with cwd the same directory where the executable
- is located (so argv[0] contains a plain filename without directory
- components).
+ is located (also argv[0] contains a plain filename without directory
+ components -or- argv[0] contains the full non-sysroot path to EXE).
- There's no /EXE on the host file system. */
#include <stdio.h>
@@ -21,8 +21,10 @@ int main (int argc, char *argv[])
if (fnam == NULL)
abort ();
strcpy (fnam, "/");
- strcat (fnam, basename (argv[0]));
+ strcat (fnam, argv[0]);
}
+ else
+ fnam = strrchr (argv[0], '/');
f = fopen (fnam, "rb");
if (f == NULL)
diff --git a/sim/testsuite/cris/c/stat3.c b/sim/testsuite/cris/c/stat3.c
index eac4da9ea8d..321da1b2bd6 100644
--- a/sim/testsuite/cris/c/stat3.c
+++ b/sim/testsuite/cris/c/stat3.c
@@ -7,13 +7,14 @@
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
+#define mybasename(x) ({ const char *x_ = (x), *y_ = strrchr (x_, '/'); y_ != NULL ? y_ + 1 : x_; })
int main (int argc, char *argv[])
{
char path[1024] = "/";
struct stat buf;
- strcat (path, basename (argv[0]));
+ strcat (path, mybasename (argv[0]));
if (stat (".", &buf) != 0
|| !S_ISDIR (buf.st_mode))
abort ();
diff --git a/sim/testsuite/cris/hw/rv-n-cris/irq1.ms b/sim/testsuite/cris/hw/rv-n-cris/irq1.ms
index f3e6f2e7bee..a7c82dc5566 100644
--- a/sim/testsuite/cris/hw/rv-n-cris/irq1.ms
+++ b/sim/testsuite/cris/hw/rv-n-cris/irq1.ms
@@ -1,3 +1,4 @@
+#progos: nowhere:disabled-due-to-randomness
#mach: crisv10 crisv32
#sim(crisv10): --hw-device "/rv/trace? true"
#sim(crisv32): --hw-device "/rv/trace? true"
diff --git a/sim/testsuite/d10v/allinsn.exp b/sim/testsuite/d10v/allinsn.exp
index 97265a15db7..430c22e2606 100644
--- a/sim/testsuite/d10v/allinsn.exp
+++ b/sim/testsuite/d10v/allinsn.exp
@@ -2,16 +2,13 @@
sim_init
-if [istarget *] {
- # all machines
- set all_machs "d10v"
+# all machines
+set all_machs "d10v"
- foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.s]] {
- # If we're only testing specific files and this isn't one of them,
- # skip it.
- if ![runtest_file_p $runtests $src] {
- continue
- }
- run_sim_test $src $all_machs
+foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.s]] {
+ # If we're only testing specific files and this isn't one of them, skip it.
+ if ![runtest_file_p $runtests $src] {
+ continue
}
+ run_sim_test $src $all_machs
}
diff --git a/sim/testsuite/example-synacor/allinsn.exp b/sim/testsuite/example-synacor/allinsn.exp
index 07401ced9bb..f751f3117e7 100644
--- a/sim/testsuite/example-synacor/allinsn.exp
+++ b/sim/testsuite/example-synacor/allinsn.exp
@@ -2,19 +2,16 @@
sim_init
-if [istarget *] {
- # All machines.
- set all_machs "example"
+# All machines.
+set all_machs "example"
- global LDFLAGS_FOR_TARGET
- set LDFLAGS_FOR_TARGET "-Ttext=0"
+global LDFLAGS_FOR_TARGET
+set LDFLAGS_FOR_TARGET "-Ttext=0"
- foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.s]] {
- # If we're only testing specific files and this isn't one of them,
- # skip it.
- if ![runtest_file_p $runtests $src] {
- continue
- }
- run_sim_test $src $all_machs
+foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.s]] {
+ # If we're only testing specific files and this isn't one of them, skip it.
+ if ![runtest_file_p $runtests $src] {
+ continue
}
+ run_sim_test $src $all_machs
}
diff --git a/sim/testsuite/frv/allinsn-a-b.exp b/sim/testsuite/frv/allinsn-a-b.exp
index c24cd42fb19..6831231e330 100644
--- a/sim/testsuite/frv/allinsn-a-b.exp
+++ b/sim/testsuite/frv/allinsn-a-b.exp
@@ -8,8 +8,7 @@ set cpu_option -mcpu
# The .cgs suffix is for "cgen .s".
foreach src [lsort [glob -nocomplain $srcdir/$subdir/\[a-b\]*.cgs]] {
- # If we're only testing specific files and this isn't one of them,
- # skip it.
+ # If we're only testing specific files and this isn't one of them, skip it.
if ![runtest_file_p $runtests $src] {
continue
}
diff --git a/sim/testsuite/frv/allinsn-c.exp b/sim/testsuite/frv/allinsn-c.exp
index e1672e8f273..2d82fb47544 100644
--- a/sim/testsuite/frv/allinsn-c.exp
+++ b/sim/testsuite/frv/allinsn-c.exp
@@ -8,8 +8,7 @@ set cpu_option -mcpu
# The .cgs suffix is for "cgen .s".
foreach src [lsort [glob -nocomplain $srcdir/$subdir/\[c\]*.cgs]] {
- # If we're only testing specific files and this isn't one of them,
- # skip it.
+ # If we're only testing specific files and this isn't one of them, skip it.
if ![runtest_file_p $runtests $src] {
continue
}
diff --git a/sim/testsuite/frv/allinsn-d-h.exp b/sim/testsuite/frv/allinsn-d-h.exp
index 8c29369035a..42645e1c658 100644
--- a/sim/testsuite/frv/allinsn-d-h.exp
+++ b/sim/testsuite/frv/allinsn-d-h.exp
@@ -8,8 +8,7 @@ set cpu_option -mcpu
# The .cgs suffix is for "cgen .s".
foreach src [lsort [glob -nocomplain $srcdir/$subdir/\[d-h\]*.cgs]] {
- # If we're only testing specific files and this isn't one of them,
- # skip it.
+ # If we're only testing specific files and this isn't one of them, skip it.
if ![runtest_file_p $runtests $src] {
continue
}
diff --git a/sim/testsuite/frv/allinsn-i-l.exp b/sim/testsuite/frv/allinsn-i-l.exp
index 10b8793ceee..faa07cde1ea 100644
--- a/sim/testsuite/frv/allinsn-i-l.exp
+++ b/sim/testsuite/frv/allinsn-i-l.exp
@@ -8,8 +8,7 @@ set cpu_option -mcpu
# The .cgs suffix is for "cgen .s".
foreach src [lsort [glob -nocomplain $srcdir/$subdir/\[i-l\]*.cgs]] {
- # If we're only testing specific files and this isn't one of them,
- # skip it.
+ # If we're only testing specific files and this isn't one of them, skip it.
if ![runtest_file_p $runtests $src] {
continue
}
diff --git a/sim/testsuite/frv/allinsn-m.exp b/sim/testsuite/frv/allinsn-m.exp
index e3733e05550..aba95077375 100644
--- a/sim/testsuite/frv/allinsn-m.exp
+++ b/sim/testsuite/frv/allinsn-m.exp
@@ -8,8 +8,7 @@ set cpu_option -mcpu
# The .cgs suffix is for "cgen .s".
foreach src [lsort [glob -nocomplain $srcdir/$subdir/\[m\]*.cgs]] {
- # If we're only testing specific files and this isn't one of them,
- # skip it.
+ # If we're only testing specific files and this isn't one of them, skip it.
if ![runtest_file_p $runtests $src] {
continue
}
diff --git a/sim/testsuite/frv/allinsn-n.exp b/sim/testsuite/frv/allinsn-n.exp
index e6c41b414f6..3b41fef3212 100644
--- a/sim/testsuite/frv/allinsn-n.exp
+++ b/sim/testsuite/frv/allinsn-n.exp
@@ -8,8 +8,7 @@ set cpu_option -mcpu
# The .cgs suffix is for "cgen .s".
foreach src [lsort [glob -nocomplain $srcdir/$subdir/\[n\]*.cgs]] {
- # If we're only testing specific files and this isn't one of them,
- # skip it.
+ # If we're only testing specific files and this isn't one of them, skip it.
if ![runtest_file_p $runtests $src] {
continue
}
diff --git a/sim/testsuite/frv/allinsn-o-s.exp b/sim/testsuite/frv/allinsn-o-s.exp
index 98906e81bc4..6e172fc38d0 100644
--- a/sim/testsuite/frv/allinsn-o-s.exp
+++ b/sim/testsuite/frv/allinsn-o-s.exp
@@ -8,8 +8,7 @@ set cpu_option -mcpu
# The .cgs suffix is for "cgen .s".
foreach src [lsort [glob -nocomplain $srcdir/$subdir/\[o-s\]*.cgs]] {
- # If we're only testing specific files and this isn't one of them,
- # skip it.
+ # If we're only testing specific files and this isn't one of them, skip it.
if ![runtest_file_p $runtests $src] {
continue
}
diff --git a/sim/testsuite/frv/allinsn-t-z.exp b/sim/testsuite/frv/allinsn-t-z.exp
index 04b0e5709cb..52610c2ab8e 100644
--- a/sim/testsuite/frv/allinsn-t-z.exp
+++ b/sim/testsuite/frv/allinsn-t-z.exp
@@ -8,8 +8,7 @@ set cpu_option -mcpu
# The .cgs suffix is for "cgen .s".
foreach src [lsort [glob -nocomplain $srcdir/$subdir/\[t-z\]*.cgs]] {
- # If we're only testing specific files and this isn't one of them,
- # skip it.
+ # If we're only testing specific files and this isn't one of them, skip it.
if ![runtest_file_p $runtests $src] {
continue
}
diff --git a/sim/testsuite/frv/fr400/allinsn.exp b/sim/testsuite/frv/fr400/allinsn.exp
index 4f92f227d92..b4fa18630c5 100644
--- a/sim/testsuite/frv/fr400/allinsn.exp
+++ b/sim/testsuite/frv/fr400/allinsn.exp
@@ -2,18 +2,15 @@
sim_init
-if [istarget *] {
- # all machines
- set all_machs "fr400 fr405 fr450 fr550"
- set cpu_option -mcpu
+# all machines
+set all_machs "fr400 fr405 fr450 fr550"
+set cpu_option -mcpu
- # The .cgs suffix is for "cgen .s".
- foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.cgs]] {
- # If we're only testing specific files and this isn't one of them,
- # skip it.
- if ![runtest_file_p $runtests $src] {
- continue
- }
- run_sim_test $src $all_machs
+# The .cgs suffix is for "cgen .s".
+foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.cgs]] {
+ # If we're only testing specific files and this isn't one of them, skip it.
+ if ![runtest_file_p $runtests $src] {
+ continue
}
+ run_sim_test $src $all_machs
}
diff --git a/sim/testsuite/frv/fr500/allinsn.exp b/sim/testsuite/frv/fr500/allinsn.exp
index ec1309a2441..4e7360cb445 100644
--- a/sim/testsuite/frv/fr500/allinsn.exp
+++ b/sim/testsuite/frv/fr500/allinsn.exp
@@ -2,18 +2,15 @@
sim_init
-if [istarget *] {
- # all machines
- set all_machs "frv fr500 fr550"
- set cpu_option -mcpu
+# all machines
+set all_machs "frv fr500 fr550"
+set cpu_option -mcpu
- # The .cgs suffix is for "cgen .s".
- foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.cgs]] {
- # If we're only testing specific files and this isn't one of them,
- # skip it.
- if ![runtest_file_p $runtests $src] {
- continue
- }
- run_sim_test $src $all_machs
+# The .cgs suffix is for "cgen .s".
+foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.cgs]] {
+ # If we're only testing specific files and this isn't one of them, skip it.
+ if ![runtest_file_p $runtests $src] {
+ continue
}
+ run_sim_test $src $all_machs
}
diff --git a/sim/testsuite/frv/fr550/allinsn.exp b/sim/testsuite/frv/fr550/allinsn.exp
index 56df37d427d..6b4ce7774cd 100644
--- a/sim/testsuite/frv/fr550/allinsn.exp
+++ b/sim/testsuite/frv/fr550/allinsn.exp
@@ -2,18 +2,15 @@
sim_init
-if [istarget *] {
- # all machines
- set all_machs "fr550"
- set cpu_option -mcpu
+# all machines
+set all_machs "fr550"
+set cpu_option -mcpu
- # The .cgs suffix is for "cgen .s".
- foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.cgs]] {
- # If we're only testing specific files and this isn't one of them,
- # skip it.
- if ![runtest_file_p $runtests $src] {
- continue
- }
- run_sim_test $src $all_machs
+# The .cgs suffix is for "cgen .s".
+foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.cgs]] {
+ # If we're only testing specific files and this isn't one of them, skip it.
+ if ![runtest_file_p $runtests $src] {
+ continue
}
+ run_sim_test $src $all_machs
}
diff --git a/sim/testsuite/frv/interrupts.exp b/sim/testsuite/frv/interrupts.exp
index ec83de422ea..fe88591acf9 100644
--- a/sim/testsuite/frv/interrupts.exp
+++ b/sim/testsuite/frv/interrupts.exp
@@ -2,18 +2,15 @@
sim_init
-if [istarget *] {
- # all machines
- set all_machs "frv fr500 fr550 fr400"
- set cpu_option -mcpu
+# all machines
+set all_machs "frv fr500 fr550 fr400"
+set cpu_option -mcpu
- # The .cgs suffix is for "cgen .s".
- foreach src [lsort [glob -nocomplain $srcdir/$subdir/interrupts/*.cgs]] {
- # If we're only testing specific files and this isn't one of them,
- # skip it.
- if ![runtest_file_p $runtests $src] {
- continue
- }
- run_sim_test $src $all_machs
+# The .cgs suffix is for "cgen .s".
+foreach src [lsort [glob -nocomplain $srcdir/$subdir/interrupts/*.cgs]] {
+ # If we're only testing specific files and this isn't one of them, skip it.
+ if ![runtest_file_p $runtests $src] {
+ continue
}
+ run_sim_test $src $all_machs
}
diff --git a/sim/testsuite/frv/misc.exp b/sim/testsuite/frv/misc.exp
index 21877f96338..b5cacf80746 100644
--- a/sim/testsuite/frv/misc.exp
+++ b/sim/testsuite/frv/misc.exp
@@ -2,18 +2,15 @@
sim_init
-if [istarget *] {
- # all machines
- set all_machs "frv fr500 fr550 fr400 fr405 fr450"
- set cpu_option -mcpu
+# all machines
+set all_machs "frv fr500 fr550 fr400 fr405 fr450"
+set cpu_option -mcpu
- # The .ms suffix is for "miscellaneous .s".
- foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.ms]] {
- # If we're only testing specific files and this isn't one of them,
- # skip it.
- if ![runtest_file_p $runtests $src] {
- continue
- }
- run_sim_test $src $all_machs
+# The .ms suffix is for "miscellaneous .s".
+foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.ms]] {
+ # If we're only testing specific files and this isn't one of them, skip it.
+ if ![runtest_file_p $runtests $src] {
+ continue
}
+ run_sim_test $src $all_machs
}
diff --git a/sim/testsuite/frv/parallel.exp b/sim/testsuite/frv/parallel.exp
index 00bcccd66ef..5fe27087ef3 100644
--- a/sim/testsuite/frv/parallel.exp
+++ b/sim/testsuite/frv/parallel.exp
@@ -2,18 +2,15 @@
sim_init
-if [istarget *] {
- # all machines
- set all_machs "frv fr500 fr550 fr400"
- set cpu_option -mcpu
+# all machines
+set all_machs "frv fr500 fr550 fr400"
+set cpu_option -mcpu
- # The .pcgs suffix is for "parallel cgen .s".
- foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.pcgs]] {
- # If we're only testing specific files and this isn't one of them,
- # skip it.
- if ![runtest_file_p $runtests $src] {
- continue
- }
- run_sim_test $src $all_machs
+# The .pcgs suffix is for "parallel cgen .s".
+foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.pcgs]] {
+ # If we're only testing specific files and this isn't one of them, skip it.
+ if ![runtest_file_p $runtests $src] {
+ continue
}
+ run_sim_test $src $all_machs
}
diff --git a/sim/testsuite/ft32/allinsn.exp b/sim/testsuite/ft32/allinsn.exp
index 260f13e1ceb..bd3a6bb10ac 100644
--- a/sim/testsuite/ft32/allinsn.exp
+++ b/sim/testsuite/ft32/allinsn.exp
@@ -2,16 +2,13 @@
sim_init
-if [istarget *] {
- # all machines
- set all_machs "ft32"
+# all machines
+set all_machs "ft32"
- foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.s]] {
- # If we're only testing specific files and this isn't one of them,
- # skip it.
- if ![runtest_file_p $runtests $src] {
- continue
- }
- run_sim_test $src $all_machs
+foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.s]] {
+ # If we're only testing specific files and this isn't one of them, skip it.
+ if ![runtest_file_p $runtests $src] {
+ continue
}
+ run_sim_test $src $all_machs
}
diff --git a/sim/testsuite/h8300/allinsn.exp b/sim/testsuite/h8300/allinsn.exp
index f270661f021..4f0e6db91bf 100644
--- a/sim/testsuite/h8300/allinsn.exp
+++ b/sim/testsuite/h8300/allinsn.exp
@@ -2,16 +2,12 @@
sim_init
-if {[istarget *]} {
- set all_machs "h8300 h8300h h8300s h8sx"
+set all_machs "h8300 h8300h h8300s h8sx"
- foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.s]] {
- # If we're only testing specific files and this isn't one of them,
- # skip it.
- if ![runtest_file_p $runtests $src] {
- continue
- }
-
- run_sim_test $src $all_machs
+foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.s]] {
+ # If we're only testing specific files and this isn't one of them, skip it.
+ if ![runtest_file_p $runtests $src] {
+ continue
}
+ run_sim_test $src $all_machs
}
diff --git a/sim/testsuite/iq2000/allinsn.exp b/sim/testsuite/iq2000/allinsn.exp
index 30a1c94ea61..554c6aedf5a 100644
--- a/sim/testsuite/iq2000/allinsn.exp
+++ b/sim/testsuite/iq2000/allinsn.exp
@@ -2,16 +2,13 @@
sim_init
-if [istarget *] {
- # all machines
- set all_machs "iq2000"
+# all machines
+set all_machs "iq2000"
- foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.s]] {
- # If we're only testing specific files and this isn't one of them,
- # skip it.
- if ![runtest_file_p $runtests $src] {
- continue
- }
- run_sim_test $src $all_machs
+foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.s]] {
+ # If we're only testing specific files and this isn't one of them, skip it.
+ if ![runtest_file_p $runtests $src] {
+ continue
}
+ run_sim_test $src $all_machs
}
diff --git a/sim/testsuite/lib/sim-defs.exp b/sim/testsuite/lib/sim-defs.exp
index 2cf739b3e32..5528d64684b 100644
--- a/sim/testsuite/lib/sim-defs.exp
+++ b/sim/testsuite/lib/sim-defs.exp
@@ -121,9 +121,10 @@ proc sim_init_toolchain {} {
set global_cpp_works [string equal "" "$result"]
# See if we have a compiler available, and which environment it's targeting.
+ set global_cc_os ""
+ set global_cc_works 0
if { $arch != $SIM_PRIMARY_TARGET && $CC_FOR_TARGET == "false" } {
verbose -log "Can't find a compatible C compiler"
- set global_cc_works 0
} elseif { [target_compile $srcdir/lib/newlibcheck.c \
$objdir/compilercheck.x "executable" $cc_options] == "" } {
verbose -log "Found newlib C compiler"
@@ -138,10 +139,8 @@ proc sim_init_toolchain {} {
$objdir/compilercheck.x "executable" $cc_options] == "" } {
verbose -log "Found C compiler, but unknown OS"
set global_cc_works 1
- set global_cc_os ""
} {
verbose -log "Can't execute C compiler"
- set global_cc_works 0
}
file delete $objdir/compilercheck.x
@@ -260,6 +259,41 @@ proc sim_run { prog sim_opts prog_opts redir options } {
return [list $return_code $output]
}
+# Support function for "#requires: simoption <xx>":
+# Looks in "run --help" output for <xx>, returns 1 iff <xx> is mentioned
+# there and looks like an option name, otherwise 0.
+
+proc sim_check_requires_simoption { optname } {
+ global sim_path
+ set testrun "$sim_path --help"
+ verbose -log "Checking for simoption `$optname'" 3
+ remote_spawn host $testrun
+ set result [remote_wait host 240]
+
+ set return_code [lindex $result 0]
+ if { $return_code != 0 } {
+ perror "Can't execute `$testrun' to check for `$optname'"
+ return 0
+ }
+
+ set output [lindex $result 1]
+ # Remove \r as for regular runs.
+ regsub -all -- "\r" $output "" output
+
+ # The option output format for --help for each line where an
+ # option name is mentioned, is assumed to be two space followed
+ # by the option name followed by a space or left square bracket,
+ # like in (optname=--foo): " --foo " or " --foo[this|that]".
+ # Beware not to match " --foo-bar" nor " --foobar".
+ if [string match "*\n $optname\[\[ \]*" $output] {
+ verbose -log "Found `$optname'" 3
+ return 1
+ }
+ verbose -log "Did not find `$optname'" 3
+
+ return 0
+}
+
# Run testcase NAME.
# NAME is either a fully specified file name, or just the file name in which
# case $srcdir/$subdir will be prepended.
@@ -325,6 +359,7 @@ proc run_sim_test { name requested_machs } {
set opts(cc) ""
set opts(progopts) ""
set opts(progos) ""
+ set opts(requires) {}
set opts(sim) ""
set opts(status) "0"
set opts(output) ""
@@ -374,6 +409,14 @@ proc run_sim_test { name requested_machs } {
set opt_val "$opts($opt_name) $opt_val"
}
+ # Similar for "requires", except we append a pair to a list, and
+ # that doesn't match the processing in the rest of the loop, so we
+ # "continue" early.
+ if { $opt_name == "requires" } {
+ lappend opts($opt_name) [split $opt_val " "]
+ continue
+ }
+
foreach m $opt_machs {
set opts($opt_name,$m) $opt_val
}
@@ -448,6 +491,22 @@ proc run_sim_test { name requested_machs } {
set opts(cc,$mach) $opts(cc)
}
+ foreach req $opts(requires) {
+ set what [lindex $req 0]
+ set what_opt [lindex $req 1]
+ verbose -log "requires: <$what> <$what_opt>"
+ if { [info procs sim_check_requires_${what}] != [list] } {
+ if ![sim_check_requires_${what} $what_opt] {
+ untested $subdir/$name
+ return
+ }
+ } {
+ perror "unknown requirement `requires: $what' in file $file"
+ unresolved $subdir/$name
+ return
+ }
+ }
+
if [string match "*.c" $sourcefile] {
# If we don't have a compiler available, skip tests :(.
if { $global_cc_works == 0 } {
diff --git a/sim/testsuite/lm32/allinsn.exp b/sim/testsuite/lm32/allinsn.exp
index fb5d4d3471e..67c70ecadd1 100644
--- a/sim/testsuite/lm32/allinsn.exp
+++ b/sim/testsuite/lm32/allinsn.exp
@@ -2,16 +2,13 @@
sim_init
-if [istarget *] {
- # all machines
- set all_machs "lm32"
+# all machines
+set all_machs "lm32"
- foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.s]] {
- # If we're only testing specific files and this isn't one of them,
- # skip it.
- if ![runtest_file_p $runtests $src] {
- continue
- }
- run_sim_test $src $all_machs
+foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.s]] {
+ # If we're only testing specific files and this isn't one of them, skip it.
+ if ![runtest_file_p $runtests $src] {
+ continue
}
+ run_sim_test $src $all_machs
}
diff --git a/sim/testsuite/m32c/allinsn.exp b/sim/testsuite/m32c/allinsn.exp
index c979514f5dd..4df54fb8c8f 100644
--- a/sim/testsuite/m32c/allinsn.exp
+++ b/sim/testsuite/m32c/allinsn.exp
@@ -3,16 +3,13 @@
sim_init
-if [istarget *] {
- # all machines
- set all_machs "m32c"
+# all machines
+set all_machs "m32c"
- foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.s]] {
- # If we're only testing specific files and this isn't one of them,
- # skip it.
- if ![runtest_file_p $runtests $src] {
- continue
- }
- run_sim_test $src $all_machs
+foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.s]] {
+ # If we're only testing specific files and this isn't one of them, skip it.
+ if ![runtest_file_p $runtests $src] {
+ continue
}
+ run_sim_test $src $all_machs
}
diff --git a/sim/testsuite/m32r/allinsn.exp b/sim/testsuite/m32r/allinsn.exp
index c20fc86558b..fb8646f8ccc 100644
--- a/sim/testsuite/m32r/allinsn.exp
+++ b/sim/testsuite/m32r/allinsn.exp
@@ -2,19 +2,14 @@
sim_init
-if [istarget *] {
- # all machines
- set all_machs "m32r"
-
-
- # The .cgs suffix is for "cgen .s".
- foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.cgs]] {
- # If we're only testing specific files and this isn't one of them,
- # skip it.
- if ![runtest_file_p $runtests $src] {
- continue
- }
-
- run_sim_test $src $all_machs
+# all machines
+set all_machs "m32r"
+
+# The .cgs suffix is for "cgen .s".
+foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.cgs]] {
+ # If we're only testing specific files and this isn't one of them, skip it.
+ if ![runtest_file_p $runtests $src] {
+ continue
}
+ run_sim_test $src $all_machs
}
diff --git a/sim/testsuite/m32r/misc.exp b/sim/testsuite/m32r/misc.exp
index 2ca2c03018b..c5a0c7d4404 100644
--- a/sim/testsuite/m32r/misc.exp
+++ b/sim/testsuite/m32r/misc.exp
@@ -2,19 +2,14 @@
sim_init
-if [istarget *] {
- # all machines
- set all_machs "m32r"
-
-
- # The .ms suffix is for "miscellaneous .s".
- foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.ms]] {
- # If we're only testing specific files and this isn't one of them,
- # skip it.
- if ![runtest_file_p $runtests $src] {
- continue
- }
-
- run_sim_test $src $all_machs
+# all machines
+set all_machs "m32r"
+
+# The .ms suffix is for "miscellaneous .s".
+foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.ms]] {
+ # If we're only testing specific files and this isn't one of them, skip it.
+ if ![runtest_file_p $runtests $src] {
+ continue
}
+ run_sim_test $src $all_machs
}
diff --git a/sim/testsuite/m68hc11/allinsn.exp b/sim/testsuite/m68hc11/allinsn.exp
index 09653a00c45..5a10cc5131c 100644
--- a/sim/testsuite/m68hc11/allinsn.exp
+++ b/sim/testsuite/m68hc11/allinsn.exp
@@ -2,16 +2,13 @@
sim_init
-if [istarget *] {
- # all machines
- set all_machs "m68hc11"
+# all machines
+set all_machs "m68hc11"
- foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.s]] {
- # If we're only testing specific files and this isn't one of them,
- # skip it.
- if ![runtest_file_p $runtests $src] {
- continue
- }
- run_sim_test $src $all_machs
+foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.s]] {
+ # If we're only testing specific files and this isn't one of them, skip it.
+ if ![runtest_file_p $runtests $src] {
+ continue
}
+ run_sim_test $src $all_machs
}
diff --git a/sim/testsuite/mcore/allinsn.exp b/sim/testsuite/mcore/allinsn.exp
index 64747752a8e..3333fdc3aed 100644
--- a/sim/testsuite/mcore/allinsn.exp
+++ b/sim/testsuite/mcore/allinsn.exp
@@ -2,16 +2,13 @@
sim_init
-if [istarget *] {
- # all machines
- set all_machs "mcore"
+# all machines
+set all_machs "mcore"
- foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.s]] {
- # If we're only testing specific files and this isn't one of them,
- # skip it.
- if ![runtest_file_p $runtests $src] {
- continue
- }
- run_sim_test $src $all_machs
+foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.s]] {
+ # If we're only testing specific files and this isn't one of them, skip it.
+ if ![runtest_file_p $runtests $src] {
+ continue
}
+ run_sim_test $src $all_machs
}
diff --git a/sim/testsuite/microblaze/allinsn.exp b/sim/testsuite/microblaze/allinsn.exp
index 3f582b033d3..97dc6ec4624 100644
--- a/sim/testsuite/microblaze/allinsn.exp
+++ b/sim/testsuite/microblaze/allinsn.exp
@@ -2,16 +2,13 @@
sim_init
-if [istarget *] {
- # all machines
- set all_machs "microblaze"
+# all machines
+set all_machs "microblaze"
- foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.s]] {
- # If we're only testing specific files and this isn't one of them,
- # skip it.
- if ![runtest_file_p $runtests $src] {
- continue
- }
- run_sim_test $src $all_machs
+foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.s]] {
+ # If we're only testing specific files and this isn't one of them, skip it.
+ if ![runtest_file_p $runtests $src] {
+ continue
}
+ run_sim_test $src $all_machs
}
diff --git a/sim/testsuite/mips/basic.exp b/sim/testsuite/mips/basic.exp
index 81cce85a5b2..db297121e93 100644
--- a/sim/testsuite/mips/basic.exp
+++ b/sim/testsuite/mips/basic.exp
@@ -35,13 +35,61 @@ proc run_micromips_test { name requested_machs } {
unset ASFLAGS_FOR_TARGET
}
+# Runs endian tests
+proc run_endian_tests { name requested_machs } {
+ global ASFLAGS_FOR_TARGET
+ global LDFLAGS_FOR_TARGET
+ run_sim_test $name $requested_machs
+ set ASFLAGS_FOR_TARGET "-EL"
+ set LDFLAGS_FOR_TARGET "-EL"
+ run_sim_test $name $requested_machs
+ unset ASFLAGS_FOR_TARGET
+ unset LDFLAGS_FOR_TARGET
+}
+
# Runs all specified tests
proc run_sim_tests { name requested_machs { requested_micromips_machs "" } } {
run_sim_test $name $requested_machs
run_micromips_test $name $requested_micromips_machs
}
+
+# Runs the combination of instructions removed in R6 through the testsuite
+proc run_r6_removed_test {testfile models} {
+ global subdir srcdir
+ set fd [open "$srcdir/$subdir/r6-removed.csv" r]
+ set file_data [read $fd]
+ close $fd
+ set data [split $file_data "\n"]
+ foreach line $data {
+ set line_contents [split $line ","]
+ set mnemonic [lindex $line_contents 0]
+ set insn [lindex $line_contents 1]
+
+ if {[string compare $insn ""] == 1} {
+
+ set contents ""
+ append contents ".macro removed_instr\n"
+ append contents ".word $insn\n"
+ append contents "nop\n"
+ append contents ".endm"
+
+ verbose -log "r6-removed test: $mnemonic\n$contents"
+ set file [open r6-removed.inc w]
+ puts $file $contents
+ close $file
+
+ run_sim_test $testfile $models
+ }
+ }
+}
+
+
if {[istarget *]} {
+ # Used to locate the `run` program.
+ global arch
+ set arch "mips"
+
set dspmodels ""
set mdmxmodels ""
set micromipsmodels ""
@@ -51,18 +99,24 @@ if {[istarget *]} {
set models "sb1"
set submodels "mips1 mips2 mips3 mips4 mips32 mips64"
append mdmxmodels " mips64"
+ } elseif {[istarget mipsisa64r6*-*-elf]} {
+ set models "mips32r6 mips64r6"
+ set submodels ""
} elseif {[istarget mipsisa64*-*-elf]} {
set models "mips32 mips64 mips32r2 mips64r2"
set submodels "mips1 mips2 mips3 mips4"
append dspmodels " mips32r2 mips64r2"
append mdmxmodels " mips64 mips32r2 mips64r2"
} elseif {[istarget mips*-sde-elf*] || [istarget mips*-mti-elf*]} {
- set models "mips32 mips64 mips32r2 mips64r2"
+ set models "mips32 mips64 mips32r2 mips64r2 mips32r6 mips64r6"
set submodels ""
- append dspmodels " mips32r2 mips64r2"
- append mdmxmodels " mips64 mips32r2 mips64r2"
- append micromipsmodels " mips32r2"
+ append dspmodels " mips32r2 mips64r2 mips32r6 mips64r6"
+ append mdmxmodels " mips64 mips32r2 mips64r2 mips32r6 mips64r6"
+ append micromipsmodels " mips32r2 mips64r2"
append micromipsdspmodels " mips32r2 mips64r2"
+ } elseif {[istarget mipsisa32r6*-*-elf]} {
+ set models "mips32r6"
+ set submodels ""
} elseif {[istarget mipsisa32*-*-elf]} {
set models "mips32 mips32r2"
set submodels "mips1 mips2"
@@ -102,4 +156,14 @@ if {[istarget *]} {
run_sim_tests mips32-dsp.s $dspmodels $micromipsdspmodels
run_sim_tests mips32-dsp2.s $dspmodels $micromipsdspmodels
+ run_sim_test r2-fpu.s $models
+
+ run_sim_test r6-fpu.s $models
+ run_sim_test r6.s $models
+ run_sim_test r6-forbidden.s $models
+ run_r6_removed_test r6-removed.s $models
+ run_sim_test r6-64.s $models
+ run_sim_test r6-branch.s $models
+ run_endian_tests r6-llsc-wp.s $models
+ run_endian_tests r6-llsc-dp.s $models
}
diff --git a/sim/testsuite/mips/hilo-hazard-3.s b/sim/testsuite/mips/hilo-hazard-3.s
index 1a0949db6e0..9d50da2a07d 100644
--- a/sim/testsuite/mips/hilo-hazard-3.s
+++ b/sim/testsuite/mips/hilo-hazard-3.s
@@ -1,6 +1,6 @@
# Test for mf{hi,lo} -> mult/div/mt{hi,lo} with 2 nops inbetween.
#
-# mach: all
+# mach: -mips32r6 -mips64r6 all
# as: -mabi=eabi
# ld: -N -Ttext=0x80010000
# output: pass\\n
diff --git a/sim/testsuite/mips/r2-fpu.s b/sim/testsuite/mips/r2-fpu.s
new file mode 100644
index 00000000000..1001f933c97
--- /dev/null
+++ b/sim/testsuite/mips/r2-fpu.s
@@ -0,0 +1,31 @@
+# mips r2 fpu tests
+# mach: mips32r2 mips64r2
+# as: -mabi=eabi
+# ld: -N -Ttext=0x80010000
+# output: *\\npass\\n
+
+ .include "testutils.inc"
+
+ setup
+
+ .set noreorder
+
+ .ent DIAG
+
+DIAG:
+ writemsg "[1] Test qNaN format is 754-1985"
+ li $6, 0x7fbfffff
+ mtc1 $0, $f2
+ mtc1 $0, $f4
+ div.s $f6, $f2, $f4
+ mfc1 $8, $f6
+ beq $8, $6, L1
+ nop
+ fail
+
+ L1:
+ #TODO: More tests?
+
+ pass
+
+ .end DIAG
diff --git a/sim/testsuite/mips/r6-64.s b/sim/testsuite/mips/r6-64.s
new file mode 100644
index 00000000000..365f49f2f00
--- /dev/null
+++ b/sim/testsuite/mips/r6-64.s
@@ -0,0 +1,157 @@
+# mips64 specific r6 tests (non FPU)
+# mach: mips64r6
+# as: -mabi=eabi
+# ld: -N -Ttext=0x80010000 -Tdata=0x80020000
+# output: *\\npass\\n
+
+ .include "testutils.inc"
+ .include "utils-r6.inc"
+
+ .data
+d0: .dword 0
+dval: .dword 0xaa55bb66cc77dd88
+d1: .dword 0xaaaabbbbccccdddd
+d2: .dword 256
+dlo: .dword 0xaabbbbccccdddd00
+dhi: .dword 0xffffffffffffffaa
+dhiu: .dword 0x00000000000000aa
+d3: .dword 0xffaaaabbbbccccde
+d4: .dword 0xffffffffffffffdd
+d5: .dword 0x00000000000000dd
+d6: .dword 0x00aaaabbbbccccdd
+d7: .dword 0xeeeeffff00001111
+d8: .dword 0xbbccccddddeeeeff
+d9: .dword 0x000000ddaaaabbbb
+d10: .dword 0x5555dddd3333bbbb
+d11: .dword 0x9999999999999999
+d12: .dword 56
+d13: .dword 8
+d14: .dword 57
+d15: .dword 0x000000ddaaaac98b
+d16: .dword 0xffffffffdead00dd
+d17: .dword 0xffffffffc0de0000
+d18: .dword 0x0000123400000000
+d19: .dword 0xffffabcddead00dd
+d20: .dword 0xc0de000000000000
+d21: .dword 0x8000abcddead00dd
+dmask:.dword 0xffffffffffff0000
+dval1: .word 0x1234abcd
+dval2: .word 0xffee0000
+dval3: .dword 0xffffffffffffffff
+ .fill 240,1,0
+dval4: .dword 0x5555555555555555
+ .fill 264,1,0
+dval5: .dword 0xaaaaaaaaaaaaaaaa
+
+ .text
+
+ setup
+
+ .set noreorder
+
+ .ent DIAG
+DIAG:
+
+ writemsg "[1] Test DMUL"
+ r6ck_2r dmul, 6, 5, 30
+ r6ck_2r dmul, -7, 9, -63
+ r6ck_2r dmul, -1, 1, -1
+ r6ck_2dr dmul, d1, d2, dlo
+
+ writemsg "[2] Test DMUH"
+ r6ck_2r dmuh, 6, 5, 0
+ r6ck_2r dmuh, -7, 9, 0xffffffffffffffff
+ r6ck_2r dmuh, -1, 1, -1
+ r6ck_2dr dmuh, d1, d2, dhi
+
+ writemsg "[3] Test DMULU"
+ r6ck_2r dmulu, 12, 10, 120
+ r6ck_2r dmulu, -1, 1, -1
+ r6ck_2dr dmulu, d1, d2, dlo
+
+ writemsg "[4] Test DMUHU"
+ r6ck_2r dmuhu, 12, 10, 0
+ r6ck_2r dmuhu, -1, 1, 0
+ r6ck_2dr dmuhu, d1, d2, dhiu
+
+ writemsg "[5] Test DDIV"
+ r6ck_2r ddiv, 10001, 10, 1000
+ r6ck_2r ddiv, -123456, 560, -220
+ r6ck_2dr ddiv, d1, d2, d3
+
+ writemsg "[6] Test DMOD"
+ r6ck_2r dmod, 10001, 10, 1
+ r6ck_2r dmod, -123456, 560, 0xffffffffffffff00
+ r6ck_2dr dmod, d1, d2, d4
+
+ writemsg "[7] Test DDIVU"
+ r6ck_2r ddivu, 9, 100, 0
+ r6ck_2dr ddivu, d1, d2, d6
+
+ writemsg "[8] Test DMODU"
+ r6ck_2r dmodu, 9, 100, 9
+ r6ck_2dr dmodu, d1, d2, d5
+
+ writemsg "[9] Test DALIGN"
+ r6ck_2dr1i dalign, d7, d1, 3, d8
+ r6ck_2dr1i dalign, d1, d5, 4, d9
+
+ writemsg "[10] Test DBITSWAP"
+ r6ck_1dr dbitswap, d1, d10
+ r6ck_1dr dbitswap, d11, d11
+
+ writemsg "[11] Test DCLZ"
+ r6ck_1dr dclz, d5, d12
+ r6ck_1dr dclz, d6, d13
+
+ writemsg "[12] Test DCLO"
+ r6ck_1dr dclo, d5, d0
+ r6ck_1dr dclo, dhi, d14
+
+ writemsg "[13] Test DLSA"
+ r6ck_2r1i dlsa, 0x82, 0x2000068, 4, 0x2000888
+ r6ck_2dr1i dlsa, d5, d9, 4, d15
+
+ writemsg "[14] Test DAUI"
+ r6ck_1dr1i daui, d5, 0xdead, d16
+ r6ck_1dr1i daui, d0, 0xc0de, d17
+
+ writemsg "[15] Test DAHI"
+ r6ck_0dr1i dahi, d0, 0x1234, d18
+ r6ck_0dr1i dahi, d16, 0xabce, d19
+
+ writemsg "[16] Test DATI"
+ r6ck_0dr1i dati, d0, 0xc0de, d20
+ r6ck_0dr1i dati, d19, 0x8001, d21
+
+ writemsg "[17] Test LDPC"
+ ld $5, dval
+ nop
+ ldpc $4, dval
+ fp_assert $4, $5
+
+ writemsg "[18] Test LWUPC"
+ lwu $5, dval1
+ lwupc $4, dval1
+ fp_assert $4, $5
+ lwu $5, dval2
+ lwupc $4, dval2
+ fp_assert $4, $5
+
+ writemsg "[19] Test LLD"
+ ld $5, dval3
+ dla $3, dval4
+ lld $4, -248($3)
+ fp_assert $4, $5
+
+ writemsg "[20] Test SCD"
+ lld $4, -248($3)
+ dli $4, 0xafaf
+ scd $4, -248($3)
+ ld $5, dval3
+ dli $4, 0xafaf
+ fp_assert $4, $5
+
+ pass
+
+ .end DIAG
diff --git a/sim/testsuite/mips/r6-branch.s b/sim/testsuite/mips/r6-branch.s
new file mode 100644
index 00000000000..2d905ba97e6
--- /dev/null
+++ b/sim/testsuite/mips/r6-branch.s
@@ -0,0 +1,291 @@
+# mips r6 branch tests (non FPU)
+# mach: mips32r6 mips64r6
+# as: -mabi=eabi
+# ld: -N -Ttext=0x80010000
+# output: *\\npass\\n
+
+ .include "testutils.inc"
+ .include "utils-r6.inc"
+
+ setup
+
+ .set noreorder
+
+ .ent DIAG
+DIAG:
+ li $14, 0xffffffff
+ li $13, 0x123
+ li $12, 0x45
+ li $7, 0x45
+ li $8, 0xfffffffe
+ li $9, 2147483647
+ li $11, 0
+
+ writemsg "[1] Test BOVC"
+ bovc $12, $13, Lfail
+ nop
+ bovc $9, $13, L2
+ nop
+ fail
+
+L2:
+ writemsg "[2] Test BNVC"
+ bnvc $9, $13, Lfail
+ nop
+ bnvc $12, $13, L3
+ nop
+ fail
+
+L3:
+ writemsg "[3] Test BEQC"
+ beqc $12, $13, Lfail
+ nop
+ beqc $12, $7, L4
+ nop
+ fail
+
+L4:
+ writemsg "[4] Test BNEC"
+ bnec $12, $7, Lfail
+ nop
+ bnec $12, $13, L5
+ nop
+ fail
+
+L5:
+ writemsg "[5] Test BLTC"
+ bltc $13, $12, Lfail
+ nop
+ bltc $12, $13, L6
+ nop
+ fail
+
+L6:
+# writemsg "[6] Test BLEC"
+# blec $13, $12, Lfail
+# nop
+# blec $7, $12, L7
+# nop
+# fail
+
+L7:
+ writemsg "[7] Test BGEC"
+ bgec $12, $13, Lfail
+ nop
+ bgec $13, $12, L8
+ nop
+ fail
+
+L8:
+# writemsg "[8] Test BGTC"
+# bgtc $12, $13, Lfail
+# nop
+# bgtc $13, $12, L9
+# nop
+# fail
+
+
+L9:
+ writemsg "[9] Test BLTUC"
+ bltuc $14, $13, Lfail
+ nop
+ bltuc $8, $14, L10
+ nop
+ fail
+
+L10:
+# writemsg "[10] Test BLEUC"
+# bleuc $14, $13, Lfail
+# nop
+# bleuc $8, $14, L11
+# nop
+# fail
+
+L11:
+ writemsg "[11] Test BGEUC"
+ bgeuc $13, $14, Lfail
+ nop
+ bgeuc $14, $8, L12
+ nop
+ fail
+
+L12:
+# writemsg "[12] Test BGTUC"
+# bgtuc $13, $14, Lfail
+# nop
+# bgtuc $14, $8, L13
+# nop
+# fail
+
+L13:
+ writemsg "[13] Test BLTZC"
+ bltzc $13, Lfail
+ nop
+ bltzc $11, Lfail
+ nop
+ bltzc $14, L14
+ nop
+ fail
+
+L14:
+ writemsg "[14] Test BLEZC"
+ blezc $13, Lfail
+ nop
+ blezc $11, L145
+ nop
+ fail
+L145:
+ blezc $14, L15
+ nop
+ fail
+
+L15:
+ writemsg "[15] Test BGEZC"
+ bgezc $8, Lfail
+ nop
+ bgezc $11, L155
+ nop
+ fail
+L155:
+ bgezc $13, L16
+ nop
+ fail
+
+L16:
+ writemsg "[16] Test BGTZC"
+ bgtzc $8, Lfail
+ nop
+ bgtzc $11, Lfail
+ nop
+ bgtzc $13, L17
+ nop
+ fail
+
+ li $10, 0
+
+L17:
+ writemsg "[17] Test BLEZALC"
+ blezalc $12, Lfail
+ nop
+ blezalc $11, Lret
+ li $10, 1
+ beqzc $10, L175
+ nop
+ fail
+L175:
+ blezalc $14, Lret
+ li $10, 1
+ beqzc $10, L18
+ nop
+ fail
+
+L18:
+ writemsg "[18] Test BGEZALC"
+ bgezalc $14, Lfail
+ nop
+ bgezalc $11, Lret
+ li $10, 1
+ beqzc $10, L185
+ nop
+ fail
+L185:
+ bgezalc $12, Lret
+ li $10, 1
+ beqzc $10, L19
+ nop
+ fail
+
+L19:
+ writemsg "[19] Test BGTZALC"
+ bgtzalc $14, Lfail
+ nop
+ bgtzalc $11, Lfail
+ nop
+ bgtzalc $12, Lret
+ li $10, 1
+ beqzc $10, L20
+ nop
+ fail
+
+L20:
+ writemsg "[20] Test BLTZALC"
+ bltzalc $12, Lfail
+ nop
+ bltzalc $11, Lfail
+ nop
+ bltzalc $14, Lret
+ li $10, 1
+ beqzc $10, L21
+ nop
+ fail
+
+L21:
+ writemsg "[21] Test BC"
+ bc L22
+ fail
+
+L22:
+ writemsg "[22] Test BALC"
+ balc Lret
+ li $10, 1
+ beqzc $10, L23
+ nop
+ fail
+
+L23:
+ writemsg "[23] Test JIC"
+ jal GetPC
+ nop
+ jic $6, 4
+ nop
+ fail
+
+L24:
+ writemsg "[24] Test JIALC"
+ li $10, 1
+ jal GetPC
+ nop
+ jialc $6, 20
+ nop
+ beqzc $10, L25
+ nop
+ fail
+
+LJIALCRET:
+ li $10, 0
+ jr $ra
+ nop
+
+L25:
+ writemsg "[25] Test NAL"
+ jal GetPC
+ nop
+ move $11, $6
+ nal
+ nop
+ addiu $11, 12
+ beqc $11, $31, L26
+ nop
+ fail
+
+L26:
+ writemsg "[26] Test BAL"
+ balc Lret
+ li $10, 1
+ beqzc $10, Lend
+ nop
+ fail
+
+Lend:
+ pass
+
+Lfail:
+ fail
+
+ .end DIAG
+
+Lret:
+ li $10, 0
+ addiu $ra, 4
+ jr $ra
+ nop
diff --git a/sim/testsuite/mips/r6-forbidden.s b/sim/testsuite/mips/r6-forbidden.s
new file mode 100644
index 00000000000..6ce56d392d9
--- /dev/null
+++ b/sim/testsuite/mips/r6-forbidden.s
@@ -0,0 +1,51 @@
+# mips r6 test for forbidden slot behaviour
+# mach: mips32r6 mips64r6
+# as: -mabi=eabi
+# ld: -N -Ttext=0x80010000
+# output: *\\nReservedInstruction at PC = *\\nprogram stopped with signal 4 (Illegal instruction).\\n
+# xerror:
+
+ .include "testutils.inc"
+
+ setup
+
+ .set noreorder
+
+ .ent DIAG
+DIAG:
+
+ writemsg "[1] Test if FS is ignored when branch is taken"
+ li $4, 0
+ beqzalc $4, L1
+ bc L2
+
+L2:
+ fail
+
+L1:
+ writemsg "[2] Test if FS is used when branch is not taken"
+ li $4, 1
+ blezc $4, L3
+ addiu $4, $4, 1
+ li $2, 2
+ beq $4, $2, L4
+
+L3:
+ nop
+ fail
+
+L4:
+ writemsg "[3] Test if FS causes an error when it contains a branch"
+ li $4, 3
+ beqzalc $4, L6
+ bc L5
+
+L5:
+ nop
+ fail
+
+L6:
+ #There is no passing condition here, all routes to the end indicate failure
+ fail
+
+ .end DIAG
diff --git a/sim/testsuite/mips/r6-fpu.s b/sim/testsuite/mips/r6-fpu.s
new file mode 100644
index 00000000000..14a2ea58f83
--- /dev/null
+++ b/sim/testsuite/mips/r6-fpu.s
@@ -0,0 +1,446 @@
+# mips r6 fpu test for FMADD/FMSUB etc.
+# mach: mips64r6
+# as: -mabi=eabi
+# ld: -N -Ttext=0x80010000
+# output: *\\npass\\n
+
+ .include "testutils.inc"
+ .include "utils-r6.inc"
+
+ setup
+
+ .set noreorder
+
+ .ent DIAG
+DIAG:
+
+ writemsg "[1] Test qNaN format is 754-2008"
+ li $4, 0x0
+ li $5, 0x0
+ li $6, 0x7fc00000
+ mtc1 $4, $f2
+ mtc1 $5, $f4
+ div.s $f6, $f2, $f4
+ mfc1 $8, $f6
+ fp_assert $6, $8
+
+ writemsg "[2] Test maddf.s"
+ r6ck_3s maddf.s, 0x0, 0x0, 0x0, 0x0
+ r6ck_3s maddf.s, 0x3f800000, 0x3f800000, 0x3f800000, 0x40000000
+ r6ck_3s maddf.s, 0xc0b1f5c3, 0x40490fd0, 0x402df854, 0x403e9f5d
+
+ writemsg "[3] Test maddf.d"
+ r6ck_3d maddf.d, 0x0, 0x0, 0x0, 0x0
+ r6ck_3d maddf.d, 0x3ff0000000000000, 0x3ff0000000000000, 0x3ff0000000000000, 0x4000000000000000
+ r6ck_3d maddf.d, 0xc0163eb851eb851f, 0x400921f9f01b866e, 0x4005bf0a8b24919b, 0x4007d3ebc14f6cee
+
+ writemsg "[4] Test msubf.s"
+ r6ck_3s msubf.s, 0x0, 0x0, 0x0, 0x0
+ r6ck_3s msubf.s, 0x3f800000, 0x3f800000, 0x3f800000, 0x0
+ r6ck_3s msubf.s, 0xc0b1f5c3, 0x40490fd0, 0x402df854, 0xc1619d9a
+
+ writemsg "[5] Test msubf.d"
+ r6ck_3d msubf.d, 0x0, 0x0, 0x0, 0x0
+ r6ck_3d msubf.d, 0x3ff0000000000000, 0x3ff0000000000000, 0x3ff0000000000000, 0x0
+ r6ck_3d msubf.d, 0xc0163eb851eb851f, 0x400921f9f01b866e, 0x4005bf0a8b24919b, 0xc02c33b3423f605b
+
+ writemsg "[6] Test CMP.af.s"
+ r6ck_3s cmp.af.s, 0x0, 0x3f800000, 0x3f800000, 0x0
+ r6ck_3s cmp.af.s, 0x0, 0x00000000, 0x3f800000, 0x0
+
+ writemsg "[7] Test CMP.af.d"
+ r6ck_3d cmp.af.d, 0x0, 0x3ff0000000000000, 0x3ff0000000000000, 0x0
+ r6ck_3d cmp.af.d, 0x0, 0x0000000000000000, 0x3ff0000000000000, 0x0
+
+ writemsg "[8] Test CMP.eq.s"
+ r6ck_3s cmp.eq.s, 0x0, 0x3f800000, 0x3f800000, 0xffffffff
+ r6ck_3s cmp.eq.s, 0x0, 0x00000000, 0x3f800000, 0x0
+ r6ck_3s cmp.eq.s, 0x0, 0x80000000, 0x00000000, 0xffffffff
+ r6ck_3s cmp.eq.s, 0x0, 0x7fc00000, 0x7fc00000, 0x0
+ r6ck_3s cmp.eq.s, 0x0, 0x7fc00000, 0xffc00000, 0x0
+ r6ck_3s cmp.eq.s, 0x0, 0x7fa00000, 0x7fa00000, 0x0
+ r6ck_3s cmp.eq.s, 0x0, 0x7fa00000, 0x7fc00000, 0x0
+ r6ck_3s cmp.eq.s, 0x0, 0x7f800000, 0x7f800000, 0xffffffff
+ r6ck_3s cmp.eq.s, 0x0, 0xff800000, 0xff800000, 0xffffffff
+
+ writemsg "[9] Test CMP.eq.d"
+ r6ck_3d cmp.eq.d, 0x0, 0x3ff0000000000000, 0x3ff0000000000000, 0xffffffffffffffff
+ r6ck_3d cmp.eq.d, 0x0, 0x0000000000000000, 0x3ff0000000000000, 0x0
+ r6ck_3d cmp.eq.d, 0x0, 0x8000000000000000, 0x0000000000000000, 0xffffffffffffffff
+ r6ck_3d cmp.eq.d, 0x0, 0x7ff8000000000000, 0x7ff8000000000000, 0x0
+ r6ck_3d cmp.eq.d, 0x0, 0x7ff8000000000000, 0xffc0000000000000, 0x0
+ r6ck_3d cmp.eq.d, 0x0, 0x7fa0000000000000, 0x7fa0000000000000, 0xffffffffffffffff
+ r6ck_3d cmp.eq.d, 0x0, 0x7fa0000000000000, 0x7ff8000000000000, 0x0
+ r6ck_3d cmp.eq.d, 0x0, 0x7ff0000000000000, 0x7ff0000000000000, 0xffffffffffffffff
+ r6ck_3d cmp.eq.d, 0x0, 0xfff0000000000000, 0xfff0000000000000, 0xffffffffffffffff
+
+ writemsg "[10] Test CMP.ne.s"
+ r6ck_3s cmp.ne.s, 0x0, 0x3f800000, 0x3f800000, 0x0
+ r6ck_3s cmp.ne.s, 0x0, 0x00000000, 0x3f800000, 0xffffffff
+ r6ck_3s cmp.ne.s, 0x0, 0x80000000, 0x00000000, 0x0
+ r6ck_3s cmp.ne.s, 0x0, 0x7fc00000, 0x7fc00000, 0x0
+ r6ck_3s cmp.ne.s, 0x0, 0x7fc00000, 0xffc00000, 0x0
+ r6ck_3s cmp.ne.s, 0x0, 0x7fa00000, 0x7fa00000, 0x0
+ r6ck_3s cmp.ne.s, 0x0, 0x7fa00000, 0x7fc00000, 0x0
+ r6ck_3s cmp.ne.s, 0x0, 0x7f800000, 0x7f800000, 0x0
+ r6ck_3s cmp.ne.s, 0x0, 0xff800000, 0xff800000, 0x0
+
+ writemsg "[11] Test CMP.ne.d"
+ r6ck_3d cmp.ne.d, 0x0, 0x3ff0000000000000, 0x3ff0000000000000, 0x0
+ r6ck_3d cmp.ne.d, 0x0, 0x0000000000000000, 0x3ff0000000000000, 0xffffffffffffffff
+ r6ck_3d cmp.ne.d, 0x0, 0x8000000000000000, 0x0000000000000000, 0x0
+ r6ck_3d cmp.ne.d, 0x0, 0x7ff8000000000000, 0x7ff8000000000000, 0x0
+ r6ck_3d cmp.ne.d, 0x0, 0x7ff8000000000000, 0xffc0000000000000, 0x0
+ r6ck_3d cmp.ne.d, 0x0, 0x7fa0000000000000, 0x7fa0000000000000, 0x0
+ r6ck_3d cmp.ne.d, 0x0, 0x7fa0000000000000, 0x7ff8000000000000, 0x0
+ r6ck_3d cmp.ne.d, 0x0, 0x7ff0000000000000, 0x7ff0000000000000, 0x0
+ r6ck_3d cmp.ne.d, 0x0, 0xfff0000000000000, 0xfff0000000000000, 0x0
+ r6ck_3d cmp.ne.d, 0x0, 0xab19546120965720, 0x92452014f194abc3, 0xffffffffffffffff
+
+ writemsg "[12] Test CMP.lt.s"
+ r6ck_3s cmp.lt.s, 0x0, 0x3f800000, 0x3f800000, 0x0
+ r6ck_3s cmp.lt.s, 0x0, 0x00000000, 0x3f800000, 0xffffffff
+ r6ck_3s cmp.lt.s, 0x0, 0xbf800000, 0x3f800000, 0xffffffff
+ r6ck_3s cmp.lt.s, 0x0, 0x3f800000, 0xbf800000, 0x0
+ r6ck_3s cmp.lt.s, 0x0, 0xff800000, 0xbf800000, 0xffffffff
+ r6ck_3s cmp.lt.s, 0x0, 0xbf800000, 0x7f800000, 0xffffffff
+ r6ck_3s cmp.lt.s, 0x0, 0xbf800000, 0xff800000, 0x0
+ r6ck_3s cmp.lt.s, 0x0, 0x7f800000, 0xbf800000, 0x0
+
+ writemsg "[13] Test CMP.lt.d"
+ r6ck_3d cmp.lt.d, 0x0, 0x3ff0000000000000, 0x3ff0000000000000, 0x0
+ r6ck_3d cmp.lt.d, 0x0, 0x0000000000000000, 0x3ff0000000000000, 0xffffffffffffffff
+ r6ck_3d cmp.lt.d, 0x0, 0xbff0000000000000, 0x3ff0000000000000, 0xffffffffffffffff
+ r6ck_3d cmp.lt.d, 0x0, 0x3ff0000000000000, 0xbff0000000000000, 0x0
+ r6ck_3d cmp.lt.d, 0x0, 0xfff0000000000000, 0xbff0000000000000, 0xffffffffffffffff
+ r6ck_3d cmp.lt.d, 0x0, 0xbff0000000000000, 0x7ff0000000000000, 0xffffffffffffffff
+ r6ck_3d cmp.lt.d, 0x0, 0xbff0000000000000, 0xfff0000000000000, 0x0
+ r6ck_3d cmp.lt.d, 0x0, 0x7ff0000000000000, 0xbff0000000000000, 0x0
+
+ writemsg "[14] Test CMP.le.s"
+ r6ck_3s cmp.le.s, 0x0, 0x3f800000, 0x3f800000, 0xffffffff
+ r6ck_3s cmp.le.s, 0x0, 0x00000000, 0x3f800000, 0xffffffff
+ r6ck_3s cmp.le.s, 0x0, 0xbf800000, 0x3f800000, 0xffffffff
+ r6ck_3s cmp.le.s, 0x0, 0x3f800000, 0xbf800000, 0x0
+ r6ck_3s cmp.le.s, 0x0, 0xff800000, 0xbf800000, 0xffffffff
+ r6ck_3s cmp.le.s, 0x0, 0xbf800000, 0x7f800000, 0xffffffff
+ r6ck_3s cmp.le.s, 0x0, 0xbf800000, 0xff800000, 0x0
+ r6ck_3s cmp.le.s, 0x0, 0x7f800000, 0xbf800000, 0x0
+
+ writemsg "[15] Test CMP.le.d"
+ r6ck_3d cmp.le.d, 0x0, 0x3ff0000000000000, 0x3ff0000000000000, 0xffffffffffffffff
+ r6ck_3d cmp.le.d, 0x0, 0x0000000000000000, 0x3ff0000000000000, 0xffffffffffffffff
+ r6ck_3d cmp.le.d, 0x0, 0xbff0000000000000, 0x3ff0000000000000, 0xffffffffffffffff
+ r6ck_3d cmp.le.d, 0x0, 0x3ff0000000000000, 0xbff0000000000000, 0x0
+ r6ck_3d cmp.le.d, 0x0, 0xfff0000000000000, 0xbff0000000000000, 0xffffffffffffffff
+ r6ck_3d cmp.le.d, 0x0, 0xbff0000000000000, 0x7ff0000000000000, 0xffffffffffffffff
+ r6ck_3d cmp.le.d, 0x0, 0xbff0000000000000, 0xfff0000000000000, 0x0
+ r6ck_3d cmp.le.d, 0x0, 0x7ff0000000000000, 0xbff0000000000000, 0x0
+
+ writemsg "[16] Test CMP.un.s"
+ r6ck_3s cmp.un.s, 0x0, 0x3f800000, 0x3f800000, 0x0
+ r6ck_3s cmp.un.s, 0x0, 0x3f800000, 0xbf800000, 0x0
+ r6ck_3s cmp.un.s, 0x0, 0x3f800000, 0x7fc00000, 0xffffffff
+ r6ck_3s cmp.un.s, 0x0, 0x7fc01234, 0x7fc00000, 0xffffffff
+ r6ck_3s cmp.un.s, 0x0, 0x7fc00000, 0x7fc00000, 0xffffffff
+ r6ck_3s cmp.un.s, 0x0, 0x3f800000, 0xff800000, 0x0
+ r6ck_3s cmp.un.s, 0x0, 0x3f800000, 0x7f800000, 0x0
+
+ writemsg "[17] Test CMP.un.d"
+ r6ck_3d cmp.un.d, 0x0, 0x3ff0000000000000, 0x3ff0000000000000, 0x0
+ r6ck_3d cmp.un.d, 0x0, 0x3ff0000000000000, 0xbff0000000000000, 0x0
+ r6ck_3d cmp.un.d, 0x0, 0x3ff0000000000000, 0x7ff8000000000000, 0xffffffffffffffff
+ r6ck_3d cmp.un.d, 0x0, 0x7fc0123400000000, 0x7ff8000000000000, 0xffffffffffffffff
+ r6ck_3d cmp.un.d, 0x0, 0x7ff8000000000000, 0x7ff8000000000000, 0xffffffffffffffff
+ r6ck_3d cmp.un.d, 0x0, 0x3ff0000000000000, 0xfff0000000000000, 0x0
+ r6ck_3d cmp.un.d, 0x0, 0x3ff0000000000000, 0x7ff0000000000000, 0x0
+
+ writemsg "[18] Test CMP.or.s"
+ r6ck_3s cmp.or.s, 0x0, 0x3f800000, 0x3f800000, 0xffffffff
+ r6ck_3s cmp.or.s, 0x0, 0xbf800000, 0x3f800000, 0xffffffff
+ r6ck_3s cmp.or.s, 0x0, 0x3f800000, 0x7fc00000, 0x0
+ r6ck_3s cmp.or.s, 0x0, 0x7fc00000, 0x3f800000, 0x0
+ r6ck_3s cmp.or.s, 0x0, 0xffc00000, 0x3f800000, 0x0
+ r6ck_3s cmp.or.s, 0x0, 0x7fc01234, 0x7fc00000, 0x0
+ r6ck_3s cmp.or.s, 0x0, 0xff800000, 0x00000000, 0xffffffff
+ r6ck_3s cmp.or.s, 0x0, 0x00000000, 0x7f800000, 0xffffffff
+ r6ck_3s cmp.or.s, 0x0, 0x00000000, 0xff800000, 0xffffffff
+ r6ck_3s cmp.or.s, 0x0, 0x7f800000, 0x00000000, 0xffffffff
+ r6ck_3s cmp.or.s, 0x0, 0x7f800000, 0x00000000, 0xffffffff
+
+ writemsg "[19] Test CMP.or.d"
+ r6ck_3d cmp.or.d, 0x0, 0x3ff0000000000000, 0x3ff0000000000000, 0xffffffffffffffff
+ r6ck_3d cmp.or.d, 0x0, 0xbff0000000000000, 0x3ff0000000000000, 0xffffffffffffffff
+ r6ck_3d cmp.or.d, 0x0, 0x3ff0000000000000, 0x7ff8000000000000, 0x0
+ r6ck_3d cmp.or.d, 0x0, 0x7ff8000000000000, 0x3ff0000000000000, 0x0
+ r6ck_3d cmp.or.d, 0x0, 0xfff8000000000000, 0x3ff0000000000000, 0x0
+ r6ck_3d cmp.or.d, 0x0, 0x7ff8123492134352, 0x7ff8000000000000, 0x0
+ r6ck_3d cmp.or.d, 0x0, 0xfff0000000000000, 0x0000000000000000, 0xffffffffffffffff
+ r6ck_3d cmp.or.d, 0x0, 0x0000000000000000, 0x7ff0000000000000, 0xffffffffffffffff
+ r6ck_3d cmp.or.d, 0x0, 0x0000000000000000, 0xfff0000000000000, 0xffffffffffffffff
+ r6ck_3d cmp.or.d, 0x0, 0x7ff0000000000000, 0x0000000000000000, 0xffffffffffffffff
+ r6ck_3d cmp.or.d, 0x0, 0x7ff0000000000000, 0x0000000000000000, 0xffffffffffffffff
+
+ writemsg "[20] Test CMP.ueq.s"
+ r6ck_3s cmp.ueq.s, 0x0, 0x3f800000, 0x00000000, 0x0
+ r6ck_3s cmp.ueq.s, 0x0, 0x3f800000, 0x7fc00000, 0xffffffff
+ r6ck_3s cmp.ueq.s, 0x0, 0x7fc00000, 0x7fc00000, 0xffffffff
+ r6ck_3s cmp.ueq.s, 0x0, 0x3f800000, 0x3f800000, 0xffffffff
+ r6ck_3s cmp.ueq.s, 0x0, 0x00000000, 0x3f800000, 0x0
+ r6ck_3s cmp.ueq.s, 0x0, 0x80000000, 0x00000000, 0xffffffff
+ r6ck_3s cmp.ueq.s, 0x0, 0x7f800000, 0x7fc00000, 0xffffffff
+ r6ck_3s cmp.ueq.s, 0x0, 0xff800000, 0xff800000, 0xffffffff
+
+ writemsg "[21] Test CMP.ueq.d"
+ r6ck_3d cmp.ueq.d, 0x0, 0x3ff0000000000000, 0x0000000000000000, 0x0
+ r6ck_3d cmp.ueq.d, 0x0, 0x3ff0000000000000, 0x7ff8000000000000, 0xffffffffffffffff
+ r6ck_3d cmp.ueq.d, 0x0, 0x7ff8000000000000, 0x7ff8000000000000, 0xffffffffffffffff
+ r6ck_3d cmp.ueq.d, 0x0, 0x3ff0000000000000, 0x3ff0000000000000, 0xffffffffffffffff
+ r6ck_3d cmp.ueq.d, 0x0, 0x0000000000000000, 0x3ff0000000000000, 0x0
+ r6ck_3d cmp.ueq.d, 0x0, 0x8000000000000000, 0x0000000000000000, 0xffffffffffffffff
+ r6ck_3d cmp.ueq.d, 0x0, 0x7ff0000000000000, 0x7ff8000000000000, 0xffffffffffffffff
+ r6ck_3d cmp.ueq.d, 0x0, 0xfff0000000000000, 0xfff0000000000000, 0xffffffffffffffff
+
+ writemsg "[22] Test CMP.une.s"
+ r6ck_3s cmp.une.s, 0x0, 0x3f800000, 0x3f800000, 0x0
+ r6ck_3s cmp.une.s, 0x0, 0x3f800000, 0x7fc00000, 0xffffffff
+ r6ck_3s cmp.une.s, 0x0, 0x7fc00000, 0x7fc00000, 0xffffffff
+ r6ck_3s cmp.une.s, 0x0, 0x3f800000, 0x3f800000, 0x0
+ r6ck_3s cmp.une.s, 0x0, 0x00000000, 0x3f800000, 0xffffffff
+ r6ck_3s cmp.une.s, 0x0, 0x80000000, 0x00000000, 0x0
+ r6ck_3s cmp.une.s, 0x0, 0x7f800000, 0x7fc00000, 0xffffffff
+ r6ck_3s cmp.une.s, 0x0, 0xff800000, 0xff800000, 0x0
+
+ writemsg "[23] Test CMP.une.d"
+ r6ck_3d cmp.une.d, 0x0, 0x3ff0000000000000, 0x3ff0000000000000, 0x0
+ r6ck_3d cmp.une.d, 0x0, 0x3ff0000000000000, 0x7ff8000000000000, 0xffffffffffffffff
+ r6ck_3d cmp.une.d, 0x0, 0x7ff8000000000000, 0x7ff8000000000000, 0xffffffffffffffff
+ r6ck_3d cmp.une.d, 0x0, 0x3ff0000000000000, 0x3ff0000000000000, 0x0
+ r6ck_3d cmp.une.d, 0x0, 0x0000000000000000, 0x3ff0000000000000, 0xffffffffffffffff
+ r6ck_3d cmp.une.d, 0x0, 0x8000000000000000, 0x0000000000000000, 0x0
+ r6ck_3d cmp.une.d, 0x0, 0x7ff0000000000000, 0x7ff8000000000000, 0xffffffffffffffff
+ r6ck_3d cmp.une.d, 0x0, 0xfff0000000000000, 0xfff0000000000000, 0x0
+
+ writemsg "[24] Test CMP.ult.s"
+ r6ck_3s cmp.ult.s, 0x0, 0x3f800000, 0x3f800000, 0x0
+ r6ck_3s cmp.ult.s, 0x0, 0x3f800000, 0x7fc00000, 0xffffffff
+ r6ck_3s cmp.ult.s, 0x0, 0x7fc00000, 0x7fc00000, 0xffffffff
+ r6ck_3s cmp.ult.s, 0x0, 0x00000000, 0x3f800000, 0xffffffff
+ r6ck_3s cmp.ult.s, 0x0, 0xbf800000, 0x3f800000, 0xffffffff
+ r6ck_3s cmp.ult.s, 0x0, 0x3f800000, 0xbf800000, 0x0
+
+ writemsg "[25] Test CMP.ult.d"
+ r6ck_3d cmp.ult.d, 0x0, 0x3ff0000000000000, 0x3ff0000000000000, 0x0
+ r6ck_3d cmp.ult.d, 0x0, 0x3ff0000000000000, 0x7ff8000000000000, 0xffffffffffffffff
+ r6ck_3d cmp.ult.d, 0x0, 0x7ff8000000000000, 0x7ff8000000000000, 0xffffffffffffffff
+ r6ck_3d cmp.ult.d, 0x0, 0x0000000000000000, 0x3ff0000000000000, 0xffffffffffffffff
+ r6ck_3d cmp.ult.d, 0x0, 0xbff0000000000000, 0x3ff0000000000000, 0xffffffffffffffff
+ r6ck_3d cmp.ult.d, 0x0, 0x3ff0000000000000, 0xbff0000000000000, 0x0
+
+ writemsg "[26] Test CMP.ule.s"
+ r6ck_3s cmp.ule.s, 0x0, 0x3f800000, 0x7fc00000, 0xffffffff
+ r6ck_3s cmp.ule.s, 0x0, 0x7fc00000, 0x7fc00000, 0xffffffff
+ r6ck_3s cmp.ule.s, 0x0, 0x3f800000, 0x3f800000, 0xffffffff
+ r6ck_3s cmp.ule.s, 0x0, 0x00000000, 0x3f800000, 0xffffffff
+ r6ck_3s cmp.ule.s, 0x0, 0xbf800000, 0x3f800000, 0xffffffff
+ r6ck_3s cmp.ule.s, 0x0, 0x3f800000, 0xbf800000, 0x0
+ r6ck_3s cmp.ule.s, 0x0, 0x3f800000, 0xff800000, 0x0
+
+ writemsg "[27] Test CMP.ule.d"
+ r6ck_3d cmp.ule.d, 0x0, 0x3ff0000000000000, 0x7ff8000000000000, 0xffffffffffffffff
+ r6ck_3d cmp.ule.d, 0x0, 0x7ff8000000000000, 0x7ff8000000000000, 0xffffffffffffffff
+ r6ck_3d cmp.ule.d, 0x0, 0x3ff0000000000000, 0x3ff0000000000000, 0xffffffffffffffff
+ r6ck_3d cmp.ule.d, 0x0, 0x0000000000000000, 0x3ff0000000000000, 0xffffffffffffffff
+ r6ck_3d cmp.ule.d, 0x0, 0xbff0000000000000, 0x3ff0000000000000, 0xffffffffffffffff
+ r6ck_3d cmp.ule.d, 0x0, 0x3ff0000000000000, 0xbff0000000000000, 0x0
+ r6ck_3d cmp.ule.d, 0x0, 0x3ff0000000000000, 0xfff0000000000000, 0x0
+
+ writemsg "[28] Test rint.s"
+ r6ck_2s rint.s, 0x0, 0x3fbf10cb, 0x3f800000
+ r6ck_2s rint.s, 0x0, 0xb9011423, 0x0
+ r6ck_2s rint.s, 0x0, 0x43fa4687, 0x43fa8000
+ r6ck_2s rint.s, 0x0, 0x41380000, 0x41400000
+ r6ck_2s rint.s, 0x0, 0x3ff33333, 0x40000000
+
+ writemsg "[29] Test rint.d"
+ r6ck_2d rint.d, 0x0, 0x3ff1f9a6b50b0f28, 0x3ff0000000000000
+ r6ck_2d rint.d, 0x0, 0xbf543bf727136a40, 0x0
+ r6ck_2d rint.d, 0x0, 0x407f48d0e5604189, 0x407f500000000000
+ r6ck_2d rint.d, 0x0, 0x5b7c2d43b93b0a8c, 0x5b7c2d43b93b0a8c,
+
+ writemsg "[30] Test class.s"
+ r6ck_2s class.s, 0x0, 0x7f800010, 0x1
+ r6ck_2s class.s, 0x0, 0x7fc00000, 0x2
+ r6ck_2s class.s, 0x0, 0xff800000, 0x4
+ r6ck_2s class.s, 0x0, 0xbf800000, 0x8
+ r6ck_2s class.s, 0x0, 0x80000001, 0x10
+ r6ck_2s class.s, 0x0, 0x80000000, 0x20
+ r6ck_2s class.s, 0x0, 0x7f800000, 0x40
+ r6ck_2s class.s, 0x0, 0x3f800000, 0x80
+ r6ck_2s class.s, 0x0, 0x00000001, 0x100
+ r6ck_2s class.s, 0x0, 0x00000000, 0x200
+
+ writemsg "[31] Test class.d"
+ r6ck_2d class.d, 0x0, 0x7ff0000000000010, 0x1
+ r6ck_2d class.d, 0x0, 0x7ff8000000000000, 0x2
+ r6ck_2d class.d, 0x0, 0xfff0000000000000, 0x4
+ r6ck_2d class.d, 0x0, 0xbff0000000000000, 0x8
+ r6ck_2d class.d, 0x0, 0x8000000000000001, 0x10
+ r6ck_2d class.d, 0x0, 0x8000000000000000, 0x20
+ r6ck_2d class.d, 0x0, 0x7ff0000000000000, 0x40
+ r6ck_2d class.d, 0x0, 0x3ff0000000000000, 0x80
+ r6ck_2d class.d, 0x0, 0x0000000000000001, 0x100
+ r6ck_2d class.d, 0x0, 0x0000000000000000, 0x200
+
+ writemsg "[32] Test min.s"
+ r6ck_3s min.s, 0x0, 0x3f800000, 0x0, 0x0
+ r6ck_3s min.s, 0x0, 0x0, 0x3f800000, 0x0
+ r6ck_3s min.s, 0x0, 0x7f800000, 0x3f800000, 0x3f800000
+ r6ck_3s min.s, 0x0, 0x3f800000, 0x7f800000, 0x3f800000
+ r6ck_3s min.s, 0x0, 0xff800000, 0xbf800000, 0xff800000
+ r6ck_3s min.s, 0x0, 0xbf800000, 0xff800000, 0xff800000
+ r6ck_3s min.s, 0x0, 0x7fffffff, 0x3f800000, 0x3f800000
+ r6ck_3s min.s, 0x0, 0x3f800000, 0x7fffffff, 0x3f800000
+
+ writemsg "[33] Test min.d"
+ r6ck_3d min.d, 0x0, 0x3ff0000000000000, 0x0, 0x0
+ r6ck_3d min.d, 0x0, 0x0, 0x3ff0000000000000, 0x0
+ r6ck_3d min.d, 0x0, 0x7ff0000000000000, 0x3ff0000000000000, 0x3ff0000000000000
+ r6ck_3d min.d, 0x0, 0x3ff0000000000000, 0x7ff0000000000000, 0x3ff0000000000000
+ r6ck_3d min.d, 0x0, 0xfff0000000000000, 0xbff0000000000000, 0xfff0000000000000
+ r6ck_3d min.d, 0x0, 0xbff0000000000000, 0xfff0000000000000, 0xfff0000000000000
+ r6ck_3d min.d, 0x0, 0x7fffffffffffffff, 0x3ff0000000000000, 0x3ff0000000000000
+ r6ck_3d min.d, 0x0, 0x3ff0000000000000, 0x7fffffffffffffff, 0x3ff0000000000000
+
+ writemsg "[34] Test max.s"
+ r6ck_3s max.s, 0x0, 0x3f800000, 0x0, 0x3f800000
+ r6ck_3s max.s, 0x0, 0x0, 0x3f800000, 0x3f800000
+ r6ck_3s max.s, 0x0, 0x7f800000, 0x3f800000, 0x7f800000
+ r6ck_3s max.s, 0x0, 0x3f800000, 0x7f800000, 0x7f800000
+ r6ck_3s max.s, 0x0, 0xff800000, 0xbf800000, 0xbf800000
+ r6ck_3s max.s, 0x0, 0xbf800000, 0xff800000, 0xbf800000
+ r6ck_3s max.s, 0x0, 0x7fffffff, 0x3f800000, 0x3f800000
+ r6ck_3s max.s, 0x0, 0x3f800000, 0x7fffffff, 0x3f800000
+
+ writemsg "[35] Test max.d"
+ r6ck_3d max.d, 0x0, 0x3ff0000000000000, 0x0, 0x3ff0000000000000
+ r6ck_3d max.d, 0x0, 0x0, 0x3ff0000000000000, 0x3ff0000000000000
+ r6ck_3d max.d, 0x0, 0x7ff0000000000000, 0x3ff0000000000000, 0x7ff0000000000000
+ r6ck_3d max.d, 0x0, 0x3ff0000000000000, 0x7ff0000000000000, 0x7ff0000000000000
+ r6ck_3d max.d, 0x0, 0xfff0000000000000, 0xbff0000000000000, 0xbff0000000000000
+ r6ck_3d max.d, 0x0, 0xbff0000000000000, 0xfff0000000000000, 0xbff0000000000000
+ r6ck_3d max.d, 0x0, 0x7fffffffffffffff, 0x3ff0000000000000, 0x3ff0000000000000
+ r6ck_3d max.d, 0x0, 0x3ff0000000000000, 0x7fffffffffffffff, 0x3ff0000000000000
+
+ writemsg "[36] Test mina.s"
+ r6ck_3s mina.s, 0x0, 0x3f800000, 0x0, 0x0
+ r6ck_3s mina.s, 0x0, 0x0, 0x3f800000, 0x0
+ r6ck_3s mina.s, 0x0, 0x7f800000, 0x3f800000, 0x3f800000
+ r6ck_3s mina.s, 0x0, 0x3f800000, 0x7f800000, 0x3f800000
+ r6ck_3s mina.s, 0x0, 0xff800000, 0xbf800000, 0xbf800000
+ r6ck_3s mina.s, 0x0, 0xbf800000, 0xff800000, 0xbf800000
+ r6ck_3s mina.s, 0x0, 0x7fffffff, 0x3f800000, 0x3f800000
+ r6ck_3s mina.s, 0x0, 0x3f800000, 0x7fffffff, 0x3f800000
+ r6ck_3s mina.s, 0x0, 0xc0000000, 0x3f800000, 0x3f800000
+ r6ck_3s mina.s, 0x0, 0x3f800000, 0xc0000000, 0x3f800000
+
+ writemsg "[37] Test mina.d"
+ r6ck_3d mina.d, 0x0, 0x3ff0000000000000, 0x0, 0x0
+ r6ck_3d mina.d, 0x0, 0x0, 0x3ff0000000000000, 0x0
+ r6ck_3d mina.d, 0x0, 0x7ff0000000000000, 0x3ff0000000000000, 0x3ff0000000000000
+ r6ck_3d mina.d, 0x0, 0x3ff0000000000000, 0x7ff0000000000000, 0x3ff0000000000000
+ r6ck_3d mina.d, 0x0, 0xfff0000000000000, 0xbff0000000000000, 0xbff0000000000000
+ r6ck_3d mina.d, 0x0, 0xbff0000000000000, 0xfff0000000000000, 0xbff0000000000000
+ r6ck_3d mina.d, 0x0, 0x7fffffffffffffff, 0x3ff0000000000000, 0x3ff0000000000000
+ r6ck_3d mina.d, 0x0, 0x3ff0000000000000, 0x7fffffffffffffff, 0x3ff0000000000000
+ r6ck_3d mina.d, 0x0, 0xc000000000000000, 0x3ff0000000000000, 0x3ff0000000000000
+ r6ck_3d mina.d, 0x0, 0x3ff0000000000000, 0xc000000000000000, 0x3ff0000000000000
+
+ writemsg "[38] Test maxa.s"
+ r6ck_3s maxa.s, 0x0, 0x3f800000, 0x0, 0x3f800000
+ r6ck_3s maxa.s, 0x0, 0x0, 0x3f800000, 0x3f800000
+ r6ck_3s maxa.s, 0x0, 0x7f800000, 0x3f800000, 0x7f800000
+ r6ck_3s maxa.s, 0x0, 0x3f800000, 0x7f800000, 0x7f800000
+ r6ck_3s maxa.s, 0x0, 0xff800000, 0xbf800000, 0xff800000
+ r6ck_3s maxa.s, 0x0, 0xbf800000, 0xff800000, 0xff800000
+ r6ck_3s maxa.s, 0x0, 0x7fffffff, 0x3f800000, 0x3f800000
+ r6ck_3s maxa.s, 0x0, 0x3f800000, 0x7fffffff, 0x3f800000
+ r6ck_3s maxa.s, 0x0, 0xc0000000, 0x3f800000, 0xc0000000
+ r6ck_3s maxa.s, 0x0, 0x3f800000, 0xc0000000, 0xc0000000
+
+ writemsg "[39] Test maxa.d"
+ r6ck_3d maxa.d, 0x0, 0x3ff0000000000000, 0x0, 0x3ff0000000000000
+ r6ck_3d maxa.d, 0x0, 0x0, 0x3ff0000000000000, 0x3ff0000000000000
+ r6ck_3d maxa.d, 0x0, 0x7ff0000000000000, 0x3ff0000000000000, 0x7ff0000000000000
+ r6ck_3d maxa.d, 0x0, 0x3ff0000000000000, 0x7ff0000000000000, 0x7ff0000000000000
+ r6ck_3d maxa.d, 0x0, 0xfff0000000000000, 0xbff0000000000000, 0xfff0000000000000
+ r6ck_3d maxa.d, 0x0, 0xbff0000000000000, 0xfff0000000000000, 0xfff0000000000000
+ r6ck_3d maxa.d, 0x0, 0x7fffffffffffffff, 0x3ff0000000000000, 0x3ff0000000000000
+ r6ck_3d maxa.d, 0x0, 0x3ff0000000000000, 0x7fffffffffffffff, 0x3ff0000000000000
+ r6ck_3d maxa.d, 0x0, 0xc000000000000000, 0x3ff0000000000000, 0xc000000000000000
+ r6ck_3d maxa.d, 0x0, 0x3ff0000000000000, 0xc000000000000000, 0xc000000000000000
+
+ writemsg "[40] Test sel.s"
+ r6ck_3s sel.s, 0x0, 0xabcdef12, 0x12345678, 0xabcdef12
+ r6ck_3s sel.s, 0x1, 0xdeadbeef, 0xcafe1234, 0xcafe1234
+ r6ck_3s sel.s, 0xfffffffe, 0xbadcafe0, 0x12345678, 0xbadcafe0
+ r6ck_3s sel.s, 0xffffffff, 0xdeadbeef, 0xcadf00ab, 0xcadf00ab
+
+ writemsg "[41] Test sel.d"
+ r6ck_3d sel.d, 0x0, 0xabcdef123456789, 0x12345678abcdefa, 0xabcdef123456789
+ r6ck_3d sel.d, 0x1, 0xdeadbeef1534567, 0xcafe12340145279, 0xcafe12340145279
+ r6ck_3d sel.d, 0xfffffffffffffffe, 0xbadcafe00efacdab, 0x1234567887654321, 0xbadcafe00efacdab
+ r6ck_3d sel.d, 0xffffffffffffffff, 0xdeadbeeffeebdaed, 0xcadf00abba00fdac, 0xcadf00abba00fdac
+
+ writemsg "[42] Test seleqz.s"
+ r6ck_3s seleqz.s, 0x0, 0x1234abcd, 0x0, 0x1234abcd
+ r6ck_3s seleqz.s, 0x0, 0xabcdef01, 0x1, 0x0
+ r6ck_3s seleqz.s, 0x0, 0xffeebbcc, 0xfffffffe, 0xffeebbcc
+ r6ck_3s seleqz.s, 0x0, 0x12345678, 0xffffffff, 0
+
+ writemsg "[43] Test seleqz.d"
+ r6ck_3d seleqz.d, 0x0, 0x1234abcddcba4321, 0x0, 0x1234abcddcba4321
+ r6ck_3d seleqz.d, 0x0, 0xabcdef0110fedcba, 0x1, 0x0
+ r6ck_3d seleqz.d, 0x0, 0xffeebbccccbbeeff, 0xfffffffffffffffe, 0xffeebbccccbbeeff
+ r6ck_3d seleqz.d, 0x0, 0x1234567887654321, 0xffffffffffffffff, 0x0
+
+ writemsg "[44] Test selnez.s"
+ r6ck_3s selnez.s, 0x0, 0x1234abcd, 0x0, 0x0
+ r6ck_3s selnez.s, 0x0, 0xabcdef01, 0x1, 0xabcdef01
+ r6ck_3s selnez.s, 0x0, 0xffeebbcc, 0xfffffffe, 0x0
+ r6ck_3s selnez.s, 0x0, 0x12345678, 0xffffffff, 0x12345678
+
+ writemsg "[45] Test selnez.d"
+ r6ck_3d selnez.d, 0x0, 0x1234abcddcba4321, 0x0, 0x0
+ r6ck_3d selnez.d, 0x0, 0xabcdef0110fedcba, 0x1, 0xabcdef0110fedcba
+ r6ck_3d selnez.d, 0x0, 0xffeebbccccbbeeff, 0xfffffffffffffffe, 0x0
+ r6ck_3d selnez.d, 0x0, 0x1234567887654321, 0xffffffffffffffff, 0x1234567887654321
+
+ writemsg "[46] Test bc1eqz"
+ li $10, 0x01
+ mtc1 $10, $f2
+ mtc1 $0, $f4
+ bc1eqz $f2, L1
+ nop
+ bc1eqz $f4, L2
+ nop
+ fail
+
+L1:
+ fail
+
+L2:
+ writemsg "[47] Test bc1nez"
+ bc1nez $f4, L3
+ nop
+ bc1nez $f2, L4
+ nop
+ fail
+
+L3:
+ fail
+
+L4:
+ pass
+
+ .end DIAG
diff --git a/sim/testsuite/mips/r6-llsc-dp.s b/sim/testsuite/mips/r6-llsc-dp.s
new file mode 100644
index 00000000000..1eec3e4f056
--- /dev/null
+++ b/sim/testsuite/mips/r6-llsc-dp.s
@@ -0,0 +1,57 @@
+# mips64 specific r6 tests - paired LL/SC variants
+# mach: mips64r6
+# as: -mabi=eabi
+# ld: -N -Ttext=0x80010000 -Tdata=0x80020000
+# output: *\\npass\\n
+
+ .include "testutils.inc"
+ .include "utils-r6.inc"
+
+ .data
+ .align 16
+test_data:
+ .word 0xaaaaaaaa
+ .word 0xbbbbbbbb
+ .word 0xcccccccc
+ .word 0xdddddddd
+end_check:
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0x1
+
+ .text
+
+ setup
+
+ .ent DIAG
+DIAG:
+ writemsg "[1] Test LLWP"
+ llwp $2, $3, test_data
+ checkpair_dword $2, $3, test_data, end_check
+
+ sll $2, $2, 1
+ srl $3, $3, 1
+ move $s0, $2
+
+ scwp $2, $3, test_data
+ check32 $2, 1
+ checkpair_dword $s0, $3, test_data, end_check
+ writemsg "[2] Test SCWP, done"
+
+ writemsg "[3] Test LLDP"
+ lldp $2, $3, test_data
+ checkpair_qword $2, $3, test_data, end_check
+
+ dsll $2, $2, 1
+ dsrl $3, $3, 1
+ move $s0, $2
+
+ scdp $2, $3, test_data
+ check32 $2, 1
+ checkpair_qword $s0, $3, test_data, end_check
+ writemsg "[4] Test SCDP, done"
+
+ pass
+
+ .end DIAG
diff --git a/sim/testsuite/mips/r6-llsc-wp.s b/sim/testsuite/mips/r6-llsc-wp.s
new file mode 100644
index 00000000000..55ad9243fc8
--- /dev/null
+++ b/sim/testsuite/mips/r6-llsc-wp.s
@@ -0,0 +1,41 @@
+# mips32 specific r6 tests - paired LL/SC variants
+# mach: mips32r6
+# as: -mabi=eabi
+# ld: -N -Ttext=0x80010000 -Tdata=0x80020000
+# output: *\\npass\\n
+
+ .include "testutils.inc"
+ .include "utils-r6.inc"
+
+ .data
+ .align 8
+test_data:
+ .word 0xaaaaaaaa
+ .word 0xbbbbbbbb
+end_check:
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0x1
+ .text
+
+ setup
+
+ .ent DIAG
+DIAG:
+ writemsg "[1] Test LLWP"
+ llwp $2, $3, test_data
+ checkpair_dword $2, $3, test_data, end_check
+
+ sll $2, $2, 1
+ srl $3, $3, 1
+ move $s0, $2
+
+ scwp $2, $3, test_data
+ check32 $2, 1
+ checkpair_dword $s0, $3, test_data, end_check
+ writemsg "[2] Test SCWP, done"
+
+pass
+
+ .end DIAG
diff --git a/sim/testsuite/mips/r6-removed.csv b/sim/testsuite/mips/r6-removed.csv
new file mode 100644
index 00000000000..5f2285c526e
--- /dev/null
+++ b/sim/testsuite/mips/r6-removed.csv
@@ -0,0 +1,68 @@
+BC1F,0x45000000
+BEQL,0x50000000
+BGEZAL,0x04310000
+BGEZALL,0x04130000
+BGEZL,0x04030000
+BLTZALL,0x04120000
+BLTZL,0x04020000
+BNEL,0x54000000
+C.DEQ.D,0x44000030
+CACHE,0xbc000000
+CVT.PS.S,0x46000026
+CVT.S.PL,0x46c00028
+CVT.S.PU,0x46c00020
+DCLO,0x70000025
+DCLZ,0x70000024
+LDL,0x68000000
+LDR,0x6c000000
+LDXC1,0x4c000001
+LL,0xc0000000
+LLD,0xd0000000
+LUXC1,0x4c000005
+LWL,0x88000000
+LWLE,0x7c000019
+LWR,0x98000000
+LWRE,0x7c00001a
+LWXC1,0x4c000000
+MADD,0x70000000
+MADD.D,0x4c000020
+MADDU,0x70000001
+MOVF,0x00000001
+MOVF.D,0x44000011
+MOVN.D,0x44000013
+MOVT,0x00010001
+MOVT.D,0x44010011
+MOVZ.D,0x44000012
+MSUB,0x70000004
+MSUB.D,0x4c000028
+MSUBU,0x70000005
+MUL,0x70000002
+NEG.S,0x44000007
+NMADD.D,0x4c000030
+NMSUB.D,0x4c000038
+PLL.PS,0x46c0002c
+PLU.PS,0x46c0002d
+PREF,0xcc000000
+PREFX,0x4c00000f
+PUL.PS,0x46c0005e
+PUU.PS,0x46c0002f
+RINT.fmt,0x4400001a
+SC,0xe0000000
+SCD,0xf0000000
+SDBBP,0x7000003f
+SDL,0xb0000000
+SDR,0xb4000000
+SDXC1,0x4c000009
+SUB.D,0x44000001
+SUXC1,0x4c00000d
+SWL,0xa8000000
+SWLE,0x7c000021
+SWR,0xb8000000
+SWRE,0x7c000022
+SWXC1,0x4c000008
+TEQI,0x040c0000
+TGEI,0x04080000
+TGEIU,0x04090000
+TLTI,0x040a0000
+TLTIU,0x040b0000
+TNEI,0x040c0000
diff --git a/sim/testsuite/mips/r6-removed.s b/sim/testsuite/mips/r6-removed.s
new file mode 100644
index 00000000000..4f2605fa6a7
--- /dev/null
+++ b/sim/testsuite/mips/r6-removed.s
@@ -0,0 +1,18 @@
+# Tests the instructions removed in R6 are correctly invalidated
+# mach: mips32r6 mips64r6
+# as: -mabi=eabi
+# ld: -N -Ttext=0x80010000
+# output: ReservedInstruction at PC = *\nprogram stopped with signal 4 (Illegal instruction).\n
+# xerror:
+
+ .include "testutils.inc"
+ .include "r6-removed.inc"
+
+ setup
+
+ .set noreorder
+ .ent DIAG
+DIAG:
+ removed_instr
+ fail
+ .end DIAG
diff --git a/sim/testsuite/mips/r6.s b/sim/testsuite/mips/r6.s
new file mode 100644
index 00000000000..d30ffffe137
--- /dev/null
+++ b/sim/testsuite/mips/r6.s
@@ -0,0 +1,163 @@
+# mips r6 tests (non FPU)
+# mach: mips32r6 mips64r6
+# as: -mabi=eabi
+# ld: -N -Ttext=0x80010000
+# output: *\\npass\\n
+
+ .include "testutils.inc"
+ .include "utils-r6.inc"
+
+ setup
+
+ .data
+dval1: .word 0xabcd1234
+dval2: .word 0x1234eeff
+ .fill 248,1,0
+dval3: .word 0x55555555
+ .fill 260,1,0
+dval4: .word 0xaaaaaaaa
+ .text
+
+ .set noreorder
+
+ .ent DIAG
+DIAG:
+
+ writemsg "[1] Test MUL"
+ r6ck_2r mul, 7, 9, 63
+ r6ck_2r mul, -7, -9, 63
+ r6ck_2r mul, 61, -11, -671
+ r6ck_2r mul, 1001, 1234, 1235234
+ r6ck_2r mul, 123456789, 999999, 0x7eb1e22b
+ r6ck_2r mul, 0xaaaabbbb, 0xccccdddd, 0x56787f6f
+
+ writemsg "[2] Test MUH"
+ r6ck_2r muh, 61, -11, 0xffffffff
+ r6ck_2r muh, 1001, 1234, 0
+ r6ck_2r muh, 123456789, 999999, 0x7048
+ r6ck_2r muh, 0xaaaabbbb, 0xccccdddd, 0x111107f7
+
+ writemsg "[3] Test MULU"
+ r6ck_2r mulu, 7, 9, 63
+ r6ck_2r mulu, -7, -9, 63
+ r6ck_2r mulu, 61, -11, -671
+ r6ck_2r mulu, 1001, 1234, 1235234
+ r6ck_2r mulu, 123456789, 999999, 0x7eb1e22b
+ r6ck_2r mulu, 0xaaaabbbb, 0xccccdddd, 0x56787f6f
+
+ writemsg "[4] Test MUHU"
+ r6ck_2r muhu, 1001, 1234, 0
+ r6ck_2r muhu, 123456789, 999999, 0x7048
+ r6ck_2r muhu, 0xaaaabbbb, 0xccccdddd, 0x8888a18f
+ r6ck_2r muhu, 0xaaaabbbb, 0xccccdddd, 0x8888a18f
+
+ writemsg "[5] Test DIV"
+ r6ck_2r div, 10001, 10, 1000
+ r6ck_2r div, -123456, 560, -220
+ r6ck_2r div, 9, 100, 0
+
+ writemsg "[6] Test MOD"
+ r6ck_2r mod, 10001, 10, 1
+ r6ck_2r mod, -123456, 560, 0xffffff00
+ r6ck_2r mod, 9, 100, 9
+
+ writemsg "[7] Test DIVU"
+ r6ck_2r divu, 10001, 10, 1000
+ r6ck_2r divu, -123456, 560, 0x750674
+ r6ck_2r divu, 9, 100, 0
+ r6ck_2r divu, 0xaaaabbbb, 3, 0x38e393e9
+
+ writemsg "[8] Test MODU"
+ r6ck_2r modu, 10001, 10, 1
+ r6ck_2r modu, -123456, 560, 0
+ r6ck_2r modu, 9, 100, 9
+ r6ck_2r modu, 0xaaaabbbb, 5, 4
+
+ writemsg "[9] Test LSA"
+ r6ck_2r1i lsa, 1, 2, 2, 6
+ r6ck_2r1i lsa, 0x8000, 0xa000, 1, 0x1a000
+ r6ck_2r1i lsa, 0x82, 0x2000068, 4, 0x2000888
+
+ writemsg "[10] Test AUI"
+ r6ck_1r1i aui, 0x0000c0de, 0xdead, 0xdeadc0de
+ r6ck_1r1i aui, 0x00005678, 0x1234, 0x12345678
+ r6ck_1r1i aui, 0x0000eeff, 0xabab, 0xababeeff
+
+ writemsg "[11] Test SELEQZ"
+ r6ck_2r seleqz, 0x1234, 0, 0x1234
+ r6ck_2r seleqz, 0x1234, 4, 0
+ r6ck_2r seleqz, 0x80010001, 0, 0x80010001
+
+ writemsg "[12] Test SELNEZ"
+ r6ck_2r selnez, 0x1234, 0, 0
+ r6ck_2r selnez, 0x1234, 1, 0x1234
+ r6ck_2r selnez, 0x80010001, 0xffffffff, 0x80010001
+
+ writemsg "[13] Test ALIGN"
+ r6ck_2r1i align, 0xaabbccdd, 0xeeff0011, 1, 0xff0011aa
+ r6ck_2r1i align, 0xaabbccdd, 0xeeff0011, 3, 0x11aabbcc
+
+ writemsg "[14] Test BITSWAP"
+ r6ck_1r bitswap, 0xaabbccdd, 0x55dd33bb
+ r6ck_1r bitswap, 0x11884422, 0x88112244
+
+ writemsg "[15] Test CLZ"
+ r6ck_1r clz, 0x00012340, 15
+ r6ck_1r clz, 0x80012340, 0
+ r6ck_1r clz, 0x40012340, 1
+
+ writemsg "[16] Test CLO"
+ r6ck_1r clo, 0x00123050, 0
+ r6ck_1r clo, 0xff123050, 8
+ r6ck_1r clo, 0x8f123050, 1
+
+ writemsg "[17] Test ADDIUPC"
+ jal GetPC
+ nop
+ addiu $4, $6, 8
+ addiupc $5, 4
+ fp_assert $4, $5
+
+ writemsg "[18] Test AUIPC"
+ jal GetPC
+ nop
+ addiu $4, $6, 8
+ aui $4, $4, 8
+ auipc $5, 8
+ fp_assert $4, $5
+
+ writemsg "[19] Test ALUIPC"
+ jal GetPC
+ nop
+ addiu $4, $6, 16
+ aui $4, $4, 8
+ li $7, 0xffff0000
+ and $4, $4, $7
+ aluipc $5, 8
+ fp_assert $4, $5
+
+ writemsg "[20] Test LWPC"
+ lw $5, dval1
+ lwpc $4, dval1
+ fp_assert $4, $5
+ lw $5, dval2
+ lwpc $4, dval2
+ fp_assert $4, $5
+
+ writemsg "[21] Test LL"
+ lw $5, dval2
+ la $3, dval3
+ ll $4, -252($3)
+ fp_assert $4, $5
+
+ writemsg "[22] Test SC"
+ ll $4, -252($3)
+ li $4, 0xafaf
+ sc $4, -252($3)
+ lw $5, dval2
+ li $4, 0xafaf
+ fp_assert $4, $5
+
+ pass
+
+ .end DIAG
diff --git a/sim/testsuite/mips/testutils.inc b/sim/testsuite/mips/testutils.inc
index 14d31e8ea55..1f64ba766aa 100644
--- a/sim/testsuite/mips/testutils.inc
+++ b/sim/testsuite/mips/testutils.inc
@@ -148,3 +148,58 @@ _dowrite:
checkreg \reg, $1
.set pop
.endm
+
+
+ # Check hi-lo register pair against data stored at base+o1 and base+o2
+ # Clobbers $1 - $5
+ .macro checkpair lo, hi, base, w, o1, o2
+ move $2, \lo
+ move $3, \hi
+ .set noat
+ la $1, \base
+ l\w $4, \o1($1)
+ l\w $5, \o2($1)
+ .set at
+ checkreg $2, $4
+ checkreg $3, $5
+ .endm
+
+ .macro checkpair_le_d lo, hi, base
+ checkpair \lo, \hi, \base, w, 0, 4
+ .endm
+
+ .macro checkpair_be_d lo, hi, base
+ checkpair \lo, \hi, \base, w, 4, 0
+ .endm
+
+ .macro checkpair_le_q lo, hi, base
+ checkpair \lo, \hi, \base, d, 0, 8
+ .endm
+
+ .macro checkpair_be_q lo, hi, base
+ checkpair \lo, \hi, \base, d, 8, 0
+ .endm
+
+ # Endian-ness for comparison is determined by reading a word at ec
+ .macro checkpair_xendian lo, hi, base, ec, w
+ .set noat
+ lw $1, \ec
+ andi $1, $1, 0x1
+ # check endianess
+ beqz $1, 2f
+ .set at
+1: # big endian
+ checkpair_be_\w \lo, \hi, \base
+ b 3f
+2: # little endian
+ checkpair_le_\w \lo, \hi, \base
+3:
+ .endm
+
+ .macro checkpair_qword lo, hi, base, oe
+ checkpair_xendian \lo, \hi, \base, \oe, q
+ .endm
+
+ .macro checkpair_dword lo, hi, base, oe
+ checkpair_xendian \lo, \hi, \base, \oe, d
+ .endm
diff --git a/sim/testsuite/mips/utils-r6.inc b/sim/testsuite/mips/utils-r6.inc
new file mode 100644
index 00000000000..b5c88e54bc7
--- /dev/null
+++ b/sim/testsuite/mips/utils-r6.inc
@@ -0,0 +1,150 @@
+ .macro fp_assert a, b
+ beq \a, \b, 1f
+ nop
+ j _fail
+ nop
+1:
+ .endm
+
+ .macro r6ck_1r inst, a, ret
+ li $4, \a
+ li $6, \ret
+ \inst $7, $4
+ fp_assert $6, $7
+ .endm
+
+ .macro r6ck_1dr inst, a, ret
+ ld $4, \a
+ ld $6, \ret
+ \inst $7, $4
+ fp_assert $6, $7
+ .endm
+
+ .macro r6ck_2r inst, a, b, ret
+ li $4, \a
+ li $5, \b
+ li $6, \ret
+ \inst $7, $4, $5
+ fp_assert $6, $7
+ .endm
+
+ .macro r6ck_2dr inst, a, b, ret
+ ld $4, \a
+ ld $5, \b
+ ld $6, \ret
+ \inst $7, $4, $5
+ fp_assert $6, $7
+ .endm
+
+ .macro r6ck_2dr1i inst, a, b, imm, ret
+ ld $4, \a
+ ld $5, \b
+ ld $6, \ret
+ \inst $7, $4, $5, \imm
+ fp_assert $6, $7
+ .endm
+
+ .macro r6ck_1r1i inst, a, imm, ret
+ li $4, \a
+ li $6, \ret
+ \inst $7, $4, \imm
+ fp_assert $6, $7
+ .endm
+
+ .macro r6ck_1dr1i inst, a, imm, ret
+ ld $4, \a
+ ld $6, \ret
+ \inst $7, $4, \imm
+ fp_assert $6, $7
+ .endm
+
+ .macro r6ck_0dr1i inst, a, imm, ret
+ ld $4, \a
+ ld $6, \ret
+ \inst $4, $4, \imm
+ fp_assert $6, $4
+ .endm
+
+ .macro r6ck_2r1i inst, a, b, imm, ret
+ li $4, \a
+ li $5, \b
+ li $6, \ret
+ \inst $7, $4, $5, \imm
+ fp_assert $6, $7
+ .endm
+
+ .macro r6ck_3s inst, a, b, c, ret
+ li $4, \a
+ li $5, \b
+ li $6, \c
+ li $7, \ret
+ mtc1 $4, $f2
+ mtc1 $5, $f4
+ mtc1 $6, $f6
+ \inst $f2, $f4, $f6
+ mfc1 $8, $f2
+ fp_assert $7, $8
+ .endm
+
+ .macro r6ck_2s inst, a, b, ret
+ li $4, \a
+ li $5, \b
+ li $6, \ret
+ mtc1 $4, $f2
+ mtc1 $5, $f4
+ \inst $f2, $f4
+ mfc1 $7, $f2
+ fp_assert $6, $7
+ .endm
+
+ .macro r6ck_2d inst, a, b, ret
+ .data
+1: .dword \a
+2: .dword \b
+3: .dword \ret
+ .text
+ la $4, 1b
+ la $5, 2b
+ la $6, 3b
+ ldc1 $f2, 0($4)
+ ldc1 $f4, 0($5)
+ lw $7, 0($6)
+ lw $8, 4($6)
+ \inst $f2, $f4
+
+ #simulate dmfc1
+ mfhc1 $9, $f2
+ mfc1 $10, $f2
+ fp_assert $7, $9
+ fp_assert $8, $10
+ .endm
+
+ .macro r6ck_3d inst, a, b, c, ret
+ .data
+1: .dword \a
+2: .dword \b
+3: .dword \c
+4: .dword \ret
+ .text
+ la $4, 1b
+ la $5, 2b
+ la $6, 3b
+ la $2, 4b
+ ldc1 $f2, 0($4)
+ ldc1 $f4, 0($5)
+ ldc1 $f6, 0($6)
+ lw $7, 0($2)
+ lw $8, 4($2)
+ \inst $f2, $f4, $f6
+
+ #simulate dmfc1
+ mfhc1 $9, $f2
+ mfc1 $10, $f2
+ fp_assert $7, $9
+ fp_assert $8, $10
+ .endm
+
+.text
+GetPC:
+ move $6, $ra
+ jr $ra
diff --git a/sim/testsuite/mn10300/allinsn.exp b/sim/testsuite/mn10300/allinsn.exp
index 3e5903ac7ba..96a1c150c6d 100644
--- a/sim/testsuite/mn10300/allinsn.exp
+++ b/sim/testsuite/mn10300/allinsn.exp
@@ -2,16 +2,13 @@
sim_init
-if [istarget *] {
- # all machines
- set all_machs "mn10300"
+# all machines
+set all_machs "mn10300"
- foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.s]] {
- # If we're only testing specific files and this isn't one of them,
- # skip it.
- if ![runtest_file_p $runtests $src] {
- continue
- }
- run_sim_test $src $all_machs
+foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.s]] {
+ # If we're only testing specific files and this isn't one of them, skip it.
+ if ![runtest_file_p $runtests $src] {
+ continue
}
+ run_sim_test $src $all_machs
}
diff --git a/sim/testsuite/moxie/allinsn.exp b/sim/testsuite/moxie/allinsn.exp
index 3f2f0a7ac3f..30871685a20 100644
--- a/sim/testsuite/moxie/allinsn.exp
+++ b/sim/testsuite/moxie/allinsn.exp
@@ -2,16 +2,13 @@
sim_init
-if [istarget *] {
- # all machines
- set all_machs "moxie"
+# all machines
+set all_machs "moxie"
- foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.s]] {
- # If we're only testing specific files and this isn't one of them,
- # skip it.
- if ![runtest_file_p $runtests $src] {
- continue
- }
- run_sim_test $src $all_machs
+foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.s]] {
+ # If we're only testing specific files and this isn't one of them, skip it.
+ if ![runtest_file_p $runtests $src] {
+ continue
}
+ run_sim_test $src $all_machs
}
diff --git a/sim/testsuite/msp430/allinsn.exp b/sim/testsuite/msp430/allinsn.exp
index 888afa918d8..ee56936cb90 100644
--- a/sim/testsuite/msp430/allinsn.exp
+++ b/sim/testsuite/msp430/allinsn.exp
@@ -2,16 +2,13 @@
sim_init
-if [istarget *] {
- # all machines
- set all_machs "msp430"
+# all machines
+set all_machs "msp430"
- foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.s]] {
- # If we're only testing specific files and this isn't one of them,
- # skip it.
- if ![runtest_file_p $runtests $src] {
- continue
- }
- run_sim_test $src $all_machs
+foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.s]] {
+ # If we're only testing specific files and this isn't one of them, skip it.
+ if ![runtest_file_p $runtests $src] {
+ continue
}
+ run_sim_test $src $all_machs
}
diff --git a/sim/testsuite/or1k/alltests.exp b/sim/testsuite/or1k/alltests.exp
index 1b26e5b2019..15a7fd47c79 100644
--- a/sim/testsuite/or1k/alltests.exp
+++ b/sim/testsuite/or1k/alltests.exp
@@ -17,19 +17,14 @@
sim_init
-if [istarget *] {
- set all_machs "or1k"
+set all_machs "or1k"
- global LDFLAGS_FOR_TARGET
- set LDFLAGS_FOR_TARGET "-T $srcdir/$subdir/or1k-test.ld"
+global LDFLAGS_FOR_TARGET
+set LDFLAGS_FOR_TARGET "-T $srcdir/$subdir/or1k-test.ld"
- foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.S]] {
-
- if ![runtest_file_p $runtests $src] {
- continue
- }
-
- run_sim_test $src $all_machs
+foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.S]] {
+ if ![runtest_file_p $runtests $src] {
+ continue
}
-
+ run_sim_test $src $all_machs
}
diff --git a/sim/testsuite/pru/allinsn.exp b/sim/testsuite/pru/allinsn.exp
index 9b98e22e728..465582f5637 100644
--- a/sim/testsuite/pru/allinsn.exp
+++ b/sim/testsuite/pru/allinsn.exp
@@ -20,16 +20,13 @@
sim_init
-if [istarget *] {
- # all machines
- set all_machs "pru"
+# all machines
+set all_machs "pru"
- foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.s]] {
- # If we're only testing specific files and this isn't one of them,
- # skip it.
- if ![runtest_file_p $runtests $src] {
- continue
- }
- run_sim_test $src $all_machs
+foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.s]] {
+ # If we're only testing specific files and this isn't one of them, skip it.
+ if ![runtest_file_p $runtests $src] {
+ continue
}
+ run_sim_test $src $all_machs
}
diff --git a/sim/testsuite/riscv/allinsn.exp b/sim/testsuite/riscv/allinsn.exp
index db310c30ea5..972edf4d5ec 100644
--- a/sim/testsuite/riscv/allinsn.exp
+++ b/sim/testsuite/riscv/allinsn.exp
@@ -2,16 +2,13 @@
sim_init
-if [istarget *] {
- # all machines
- set all_machs "riscv"
+# all machines
+set all_machs "riscv"
- foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.s]] {
- # If we're only testing specific files and this isn't one of them,
- # skip it.
- if ![runtest_file_p $runtests $src] {
- continue
- }
- run_sim_test $src $all_machs
+foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.s]] {
+ # If we're only testing specific files and this isn't one of them, skip it.
+ if ![runtest_file_p $runtests $src] {
+ continue
}
+ run_sim_test $src $all_machs
}
diff --git a/sim/testsuite/sh/allinsn.exp b/sim/testsuite/sh/allinsn.exp
index 69d324ae91d..4eabdf2602c 100644
--- a/sim/testsuite/sh/allinsn.exp
+++ b/sim/testsuite/sh/allinsn.exp
@@ -14,8 +14,6 @@ foreach opt $board_variant_list {
}
}
-if [istarget *] {
- foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.s]] {
- run_sim_test $src $all_machs
- }
+foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.s]] {
+ run_sim_test $src $all_machs
}
diff --git a/sim/testsuite/v850/allinsns.exp b/sim/testsuite/v850/allinsns.exp
index 1aa80249f9d..ee22a5d93b7 100644
--- a/sim/testsuite/v850/allinsns.exp
+++ b/sim/testsuite/v850/allinsns.exp
@@ -2,23 +2,20 @@
sim_init
-if [istarget *] {
- # All machines.
- # Should add more cpus if the testsuite adds coverage for their insns, but
- # at the core level, there's no deviation beyond these two.
- set all_machs "v850e v850"
+# All machines.
+# Should add more cpus if the testsuite adds coverage for their insns, but
+# at the core level, there's no deviation beyond these two.
+set all_machs "v850e3v5 v850e v850"
- # gas doesn't support any '=' option for v850.
- set cpu_option_sep ""
- set cpu_option -m
+# gas doesn't support any '=' option for v850.
+set cpu_option_sep ""
+set cpu_option -m
- # The .cgs suffix is for "cgen .s".
- foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.cgs]] {
- # If we're only testing specific files and this isn't one of them,
- # skip it.
- if ![runtest_file_p $runtests $src] {
- continue
- }
- run_sim_test $src $all_machs
+# The .cgs suffix is for "cgen .s".
+foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.cgs]] {
+ # If we're only testing specific files and this isn't one of them, skip it.
+ if ![runtest_file_p $runtests $src] {
+ continue
}
+ run_sim_test $src $all_machs
}
diff --git a/sim/testsuite/v850/bins.cgs b/sim/testsuite/v850/bins.cgs
new file mode 100644
index 00000000000..dedc5ceaafd
--- /dev/null
+++ b/sim/testsuite/v850/bins.cgs
@@ -0,0 +1,12 @@
+# v850 bins
+# mach: v850e3v5
+# as: -mv850e3v5
+
+ .include "testutils.inc"
+
+ seti 0x7fff, r10
+ seti 0x0, r11
+ bins r10, 0, 32, r11
+ reg r11, 0x7fff
+
+ pass
diff --git a/sim/testsuite/v850/divq.cgs b/sim/testsuite/v850/divq.cgs
new file mode 100644
index 00000000000..8461f86f7a0
--- /dev/null
+++ b/sim/testsuite/v850/divq.cgs
@@ -0,0 +1,11 @@
+# v850 bins
+# mach: v850e3v5
+# as: -mv850e3v5
+
+ .include "testutils.inc"
+ seti 0xfffffffb r11
+ seti 0x32 r10
+ divq r11, r10, r11
+ reg r10, 0xfffffff6
+ reg r11, 0x0
+ pass
diff --git a/sim/testsuite/v850/mul.cgs b/sim/testsuite/v850/mul.cgs
new file mode 100644
index 00000000000..7d19b70c70b
--- /dev/null
+++ b/sim/testsuite/v850/mul.cgs
@@ -0,0 +1,15 @@
+# v850e mul
+# mach: v850e
+# as(v850e): -mv850e
+
+ .include "testutils.inc"
+
+# Trivial regression test for incorrect sign bit handling in mul
+
+ seti -10, r1
+ seti 2, r2
+ mul r1, r2, r3
+ reg r2, -20
+ reg r3, -1
+
+ pass
diff --git a/sim/v850/configure b/sim/v850/configure
index 46e30c1cff0..569d09ba18e 100755
--- a/sim/v850/configure
+++ b/sim/v850/configure
@@ -587,7 +587,6 @@ LIBOBJS
SIM_COMMON_BUILD_FALSE
SIM_COMMON_BUILD_TRUE
sim_float
-cgen_breaks
target_alias
host_alias
build_alias
@@ -1734,17 +1733,10 @@ fi
fi
-cgen_breaks=""
-if grep CGEN_MAINT $srcdir/Makefile.in >/dev/null; then
-cgen_breaks="break cgen_rtx_error";
-fi
-
ac_config_files="$ac_config_files Makefile.sim:Makefile.in"
ac_config_files="$ac_config_files Make-common.sim:../common/Make-common.in"
-ac_config_files="$ac_config_files .gdbinit:../common/gdbinit.in"
-
ac_config_commands="$ac_config_commands Makefile"
ac_config_commands="$ac_config_commands stamp-h"
@@ -2469,7 +2461,6 @@ do
case $ac_config_target in
"Makefile.sim") CONFIG_FILES="$CONFIG_FILES Makefile.sim:Makefile.in" ;;
"Make-common.sim") CONFIG_FILES="$CONFIG_FILES Make-common.sim:../common/Make-common.in" ;;
- ".gdbinit") CONFIG_FILES="$CONFIG_FILES .gdbinit:../common/gdbinit.in" ;;
"Makefile") CONFIG_COMMANDS="$CONFIG_COMMANDS Makefile" ;;
"stamp-h") CONFIG_COMMANDS="$CONFIG_COMMANDS stamp-h" ;;
diff --git a/sim/v850/simops.c b/sim/v850/simops.c
index 8fac8bd9891..f90a0f7573c 100644
--- a/sim/v850/simops.c
+++ b/sim/v850/simops.c
@@ -339,10 +339,10 @@ Multiply64 (int sign, unsigned long op0)
sign = (op0 ^ op1) & 0x80000000;
- if (((signed long) op0) < 0)
+ if (op0 & 0x80000000)
op0 = - op0;
- if (((signed long) op1) < 0)
+ if (op1 & 0x80000000)
op1 = - op1;
}
@@ -3135,8 +3135,8 @@ v850_div (SIM_DESC sd, unsigned int op0, unsigned int op1, unsigned int *op2p, u
bfd_boolean overflow = FALSE;
/* Compute the result. */
- divide_by = op0;
- divide_this = op1;
+ divide_by = (int32_t)op0;
+ divide_this = (int32_t)op1;
if (divide_by == 0 || (divide_by == -1 && divide_this == (1 << 31)))
{
@@ -3267,7 +3267,14 @@ v850_bins (SIM_DESC sd, unsigned int source, unsigned int lsb, unsigned int msb,
pos = lsb;
width = (msb - lsb) + 1;
- mask = ~ (-(1 << width));
+ /* A width of 32 exhibits undefined behavior on the shift. The easiest
+ way to make this code safe is to just avoid that case and set the mask
+ to the right value. */
+ if (width >= 32)
+ mask = 0xffffffff;
+ else
+ mask = ~ (-(1 << width));
+
source &= mask;
mask <<= pos;
result = (* dest) & ~ mask;
diff --git a/src-release.sh b/src-release.sh
index 86f6802f96a..079b545ae7c 100755
--- a/src-release.sh
+++ b/src-release.sh
@@ -93,7 +93,7 @@ do_proto_toplev()
# built in the gold dir. The disables speed the build a little.
enables=
disables=
- for dir in binutils gas gdb gold gprof ld libctf libdecnumber readline sim; do
+ for dir in binutils gas gdb gold gprof gprofng ld libctf libdecnumber readline sim; do
case " $tool $support_files " in
*" $dir "*) enables="$enables --enable-$dir" ;;
*) disables="$disables --disable-$dir" ;;
@@ -295,7 +295,7 @@ gdb_tar_compress()
}
# The FSF "binutils" release includes gprof and ld.
-BINUTILS_SUPPORT_DIRS="bfd gas include libiberty libctf opcodes ld elfcpp gold gprof intl setup.com makefile.vms cpu zlib"
+BINUTILS_SUPPORT_DIRS="bfd gas include libiberty libctf opcodes ld elfcpp gold gprof gprofng intl setup.com makefile.vms cpu zlib"
binutils_release()
{
compressors=$1
diff --git a/zlib/CMakeLists.txt b/zlib/CMakeLists.txt
index 0fe939df689..e6fbb37d105 100644
--- a/zlib/CMakeLists.txt
+++ b/zlib/CMakeLists.txt
@@ -3,7 +3,7 @@ set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS ON)
project(zlib C)
-set(VERSION "1.2.11")
+set(VERSION "1.2.12")
option(ASM686 "Enable building i686 assembly implementation")
option(AMD64 "Enable building amd64 assembly implementation")
diff --git a/zlib/ChangeLog b/zlib/ChangeLog
index f20308dc927..f0b0e618092 100644
--- a/zlib/ChangeLog
+++ b/zlib/ChangeLog
@@ -1,10 +1,69 @@
-2021-09-27 Nick Alcock <nick.alcock@oracle.com>
-
- * configure: Regenerate.
-
ChangeLog file for zlib
+Changes in 1.2.12 (27 Mar 2022)
+- Cygwin does not have _wopen(), so do not create gzopen_w() there
+- Permit a deflateParams() parameter change as soon as possible
+- Limit hash table inserts after switch from stored deflate
+- Fix bug when window full in deflate_stored()
+- Fix CLEAR_HASH macro to be usable as a single statement
+- Avoid a conversion error in gzseek when off_t type too small
+- Have Makefile return non-zero error code on test failure
+- Avoid some conversion warnings in gzread.c and gzwrite.c
+- Update use of errno for newer Windows CE versions
+- Small speedup to inflate [psumbera]
+- Return an error if the gzputs string length can't fit in an int
+- Add address checking in clang to -w option of configure
+- Don't compute check value for raw inflate if asked to validate
+- Handle case where inflateSync used when header never processed
+- Avoid the use of ptrdiff_t
+- Avoid an undefined behavior of memcpy() in gzappend()
+- Avoid undefined behaviors of memcpy() in gz*printf()
+- Avoid an undefined behavior of memcpy() in _tr_stored_block()
+- Make the names in functions declarations identical to definitions
+- Remove old assembler code in which bugs have manifested
+- Fix deflateEnd() to not report an error at start of raw deflate
+- Add legal disclaimer to README
+- Emphasize the need to continue decompressing gzip members
+- Correct the initialization requirements for deflateInit2()
+- Fix a bug that can crash deflate on some input when using Z_FIXED
+- Assure that the number of bits for deflatePrime() is valid
+- Use a structure to make globals in enough.c evident
+- Use a macro for the printf format of big_t in enough.c
+- Clean up code style in enough.c, update version
+- Use inline function instead of macro for index in enough.c
+- Clarify that prefix codes are counted in enough.c
+- Show all the codes for the maximum tables size in enough.c
+- Add gznorm.c example, which normalizes gzip files
+- Fix the zran.c example to work on a multiple-member gzip file
+- Add tables for crc32_combine(), to speed it up by a factor of 200
+- Add crc32_combine_gen() and crc32_combine_op() for fast combines
+- Speed up software CRC-32 computation by a factor of 1.5 to 3
+- Use atomic test and set, if available, for dynamic CRC tables
+- Don't bother computing check value after successful inflateSync()
+- Correct comment in crc32.c
+- Add use of the ARMv8 crc32 instructions when requested
+- Use ARM crc32 instructions if the ARM architecture has them
+- Explicitly note that the 32-bit check values are 32 bits
+- Avoid adding empty gzip member after gzflush with Z_FINISH
+- Fix memory leak on error in gzlog.c
+- Fix error in comment on the polynomial representation of a byte
+- Clarify gz* function interfaces, referring to parameter names
+- Change macro name in inflate.c to avoid collision in VxWorks
+- Correct typo in blast.c
+- Improve portability of contrib/minizip
+- Fix indentation in minizip's zip.c
+- Replace black/white with allow/block. (theresa-m)
+- minizip warning fix if MAXU32 already defined. (gvollant)
+- Fix unztell64() in minizip to work past 4GB. (Daniël Hörchner)
+- Clean up minizip to reduce warnings for testing
+- Add fallthrough comments for gcc
+- Eliminate use of ULL constants
+- Separate out address sanitizing from warnings in configure
+- Remove destructive aspects of make distclean
+- Check for cc masquerading as gcc or clang in configure
+- Fix crc32.c to compile local functions only if used
+
Changes in 1.2.11 (15 Jan 2017)
- Fix deflate stored bug when pulling last block from window
- Permit immediate deflateParams changes before any deflate input
@@ -515,7 +574,7 @@ Changes in 1.2.3.5 (8 Jan 2010)
- Don't use _vsnprintf on later versions of MSVC [Lowman]
- Add CMake build script and input file [Lowman]
- Update contrib/minizip to 1.1 [Svensson, Vollant]
-- Moved nintendods directory from contrib to .
+- Moved nintendods directory from contrib to root
- Replace gzio.c with a new set of routines with the same functionality
- Add gzbuffer(), gzoffset(), gzclose_r(), gzclose_w() as part of above
- Update contrib/minizip to 1.1b
@@ -689,7 +748,7 @@ Changes in 1.2.2.4 (11 July 2005)
- Be more strict on incomplete code sets in inflate_table() and increase
ENOUGH and MAXD -- this repairs a possible security vulnerability for
invalid inflate input. Thanks to Tavis Ormandy and Markus Oberhumer for
- discovering the vulnerability and providing test cases.
+ discovering the vulnerability and providing test cases
- Add ia64 support to configure for HP-UX [Smith]
- Add error return to gzread() for format or i/o error [Levin]
- Use malloc.h for OS/2 [Necasek]
@@ -725,7 +784,7 @@ Changes in 1.2.2.2 (30 December 2004)
- Add Z_FIXED strategy option to deflateInit2() to force fixed trees
- Add updated make_vms.com [Coghlan], update README
- Create a new "examples" directory, move gzappend.c there, add zpipe.c,
- fitblk.c, gzlog.[ch], gzjoin.c, and zlib_how.html.
+ fitblk.c, gzlog.[ch], gzjoin.c, and zlib_how.html
- Add FAQ entry and comments in deflate.c on uninitialized memory access
- Add Solaris 9 make options in configure [Gilbert]
- Allow strerror() usage in gzio.c for STDC
@@ -796,7 +855,7 @@ Changes in 1.2.1.1 (9 January 2004)
- Fix a big fat bug in inftrees.c that prevented decoding valid
dynamic blocks with only literals and no distance codes --
Thanks to "Hot Emu" for the bug report and sample file
-- Add a note to puff.c on no distance codes case.
+- Add a note to puff.c on no distance codes case
Changes in 1.2.1 (17 November 2003)
- Remove a tab in contrib/gzappend/gzappend.c
@@ -1040,14 +1099,14 @@ Changes in 1.2.0 (9 March 2003)
- Add contrib/puff/ simple inflate for deflate format description
Changes in 1.1.4 (11 March 2002)
-- ZFREE was repeated on same allocation on some error conditions.
+- ZFREE was repeated on same allocation on some error conditions
This creates a security problem described in
http://www.zlib.org/advisory-2002-03-11.txt
- Returned incorrect error (Z_MEM_ERROR) on some invalid data
- Avoid accesses before window for invalid distances with inflate window
- less than 32K.
+ less than 32K
- force windowBits > 8 to avoid a bug in the encoder for a window size
- of 256 bytes. (A complete fix will be available in 1.1.5).
+ of 256 bytes. (A complete fix will be available in 1.1.5)
Changes in 1.1.3 (9 July 1998)
- fix "an inflate input buffer bug that shows up on rare but persistent
@@ -1121,7 +1180,7 @@ Changes in 1.1.1 (27 Feb 98)
- remove block truncation heuristic which had very marginal effect for zlib
(smaller lit_bufsize than in gzip 1.2.4) and degraded a little the
compression ratio on some files. This also allows inlining _tr_tally for
- matches in deflate_slow.
+ matches in deflate_slow
- added msdos/Makefile.w32 for WIN32 Microsoft Visual C++ (Bob Frazier)
Changes in 1.1.0 (24 Feb 98)
@@ -1166,7 +1225,7 @@ Changes in 1.0.8 (27 Jan 1998)
- include sys/types.h to get off_t on some systems (Marc Lehmann & QingLong)
- use constant arrays for the static trees in trees.c instead of computing
them at run time (thanks to Ken Raeburn for this suggestion). To create
- trees.h, compile with GEN_TREES_H and run "make test".
+ trees.h, compile with GEN_TREES_H and run "make test"
- check return code of example in "make test" and display result
- pass minigzip command line options to file_compress
- simplifying code of inflateSync to avoid gcc 2.8 bug
@@ -1205,12 +1264,12 @@ Changes in 1.0.6 (19 Jan 1998)
- add functions gzprintf, gzputc, gzgetc, gztell, gzeof, gzseek, gzrewind and
gzsetparams (thanks to Roland Giersig and Kevin Ruland for some of this code)
- Fix a deflate bug occurring only with compression level 0 (thanks to
- Andy Buckler for finding this one).
-- In minigzip, pass transparently also the first byte for .Z files.
+ Andy Buckler for finding this one)
+- In minigzip, pass transparently also the first byte for .Z files
- return Z_BUF_ERROR instead of Z_OK if output buffer full in uncompress()
- check Z_FINISH in inflate (thanks to Marc Schluper)
- Implement deflateCopy (thanks to Adam Costello)
-- make static libraries by default in configure, add --shared option.
+- make static libraries by default in configure, add --shared option
- move MSDOS or Windows specific files to directory msdos
- suppress the notion of partial flush to simplify the interface
(but the symbol Z_PARTIAL_FLUSH is kept for compatibility with 1.0.4)
@@ -1222,7 +1281,7 @@ Changes in 1.0.6 (19 Jan 1998)
- added Makefile.nt (thanks to Stephen Williams)
- added the unsupported "contrib" directory:
contrib/asm386/ by Gilles Vollant <info@winimage.com>
- 386 asm code replacing longest_match().
+ 386 asm code replacing longest_match()
contrib/iostream/ by Kevin Ruland <kevin@rodin.wustl.edu>
A C++ I/O streams interface to the zlib gz* functions
contrib/iostream2/ by Tyge Løvset <Tyge.Lovset@cmr.no>
@@ -1230,7 +1289,7 @@ Changes in 1.0.6 (19 Jan 1998)
contrib/untgz/ by "Pedro A. Aranda Guti\irrez" <paag@tid.es>
A very simple tar.gz file extractor using zlib
contrib/visual-basic.txt by Carlos Rios <c_rios@sonda.cl>
- How to use compress(), uncompress() and the gz* functions from VB.
+ How to use compress(), uncompress() and the gz* functions from VB
- pass params -f (filtered data), -h (huffman only), -1 to -9 (compression
level) in minigzip (thanks to Tom Lane)
@@ -1239,8 +1298,8 @@ Changes in 1.0.6 (19 Jan 1998)
- add undocumented function inflateSyncPoint() (hack for Paul Mackerras)
- add undocumented function zError to convert error code to string
(for Tim Smithers)
-- Allow compilation of gzio with -DNO_DEFLATE to avoid the compression code.
-- Use default memcpy for Symantec MSDOS compiler.
+- Allow compilation of gzio with -DNO_DEFLATE to avoid the compression code
+- Use default memcpy for Symantec MSDOS compiler
- Add EXPORT keyword for check_func (needed for Windows DLL)
- add current directory to LD_LIBRARY_PATH for "make test"
- create also a link for libz.so.1
@@ -1253,7 +1312,7 @@ Changes in 1.0.6 (19 Jan 1998)
- allow compilation with ANSI keywords only enabled for TurboC in large model
- avoid "versionString"[0] (Borland bug)
- add NEED_DUMMY_RETURN for Borland
-- use variable z_verbose for tracing in debug mode (L. Peter Deutsch).
+- use variable z_verbose for tracing in debug mode (L. Peter Deutsch)
- allow compilation with CC
- defined STDC for OS/2 (David Charlap)
- limit external names to 8 chars for MVS (Thomas Lund)
@@ -1263,7 +1322,7 @@ Changes in 1.0.6 (19 Jan 1998)
- use _fdopen instead of fdopen for MSC >= 6.0 (Thomas Fanslau)
- added makelcc.bat for lcc-win32 (Tom St Denis)
- in Makefile.dj2, use copy and del instead of install and rm (Frank Donahoe)
-- Avoid expanded $Id: ChangeLog,v 1.5 2002/05/08 04:38:00 aoliva Exp $. Use "rcs -kb" or "cvs admin -kb" to avoid Id expansion.
+- Avoid expanded $Id$. Use "rcs -kb" or "cvs admin -kb" to avoid Id expansion
- check for unistd.h in configure (for off_t)
- remove useless check parameter in inflate_blocks_free
- avoid useless assignment of s->check to itself in inflate_blocks_new
@@ -1284,7 +1343,7 @@ Changes in 1.0.5 (3 Jan 98)
Changes in 1.0.4 (24 Jul 96)
- In very rare conditions, deflate(s, Z_FINISH) could fail to produce an EOF
bit, so the decompressor could decompress all the correct data but went
- on to attempt decompressing extra garbage data. This affected minigzip too.
+ on to attempt decompressing extra garbage data. This affected minigzip too
- zlibVersion and gzerror return const char* (needed for DLL)
- port to RISCOS (no fdopen, no multiple dots, no unlink, no fileno)
- use z_error only for DEBUG (avoid problem with DLLs)
@@ -1314,7 +1373,7 @@ Changes in 1.0.1 (20 May 96) [1.0 skipped to avoid confusion]
- fix array overlay in deflate.c which sometimes caused bad compressed data
- fix inflate bug with empty stored block
- fix MSDOS medium model which was broken in 0.99
-- fix deflateParams() which could generate bad compressed data.
+- fix deflateParams() which could generate bad compressed data
- Bytef is define'd instead of typedef'ed (work around Borland bug)
- added an INDEX file
- new makefiles for DJGPP (Makefile.dj2), 32-bit Borland (Makefile.b32),
@@ -1335,7 +1394,7 @@ Changes in 0.99 (27 Jan 96)
- allow preset dictionary shared between compressor and decompressor
- allow compression level 0 (no compression)
- add deflateParams in zlib.h: allow dynamic change of compression level
- and compression strategy.
+ and compression strategy
- test large buffers and deflateParams in example.c
- add optional "configure" to build zlib as a shared library
- suppress Makefile.qnx, use configure instead
@@ -1377,30 +1436,30 @@ Changes in 0.99 (27 Jan 96)
- use STDC instead of __GO32__ to avoid redeclaring exit, calloc, etc...
- use Z_BINARY instead of BINARY
- document that gzclose after gzdopen will close the file
-- allow "a" as mode in gzopen.
+- allow "a" as mode in gzopen
- fix error checking in gzread
- allow skipping .gz extra-field on pipes
- added reference to Perl interface in README
- put the crc table in FAR data (I dislike more and more the medium model :)
- added get_crc_table
-- added a dimension to all arrays (Borland C can't count).
+- added a dimension to all arrays (Borland C can't count)
- workaround Borland C bug in declaration of inflate_codes_new & inflate_fast
- guard against multiple inclusion of *.h (for precompiled header on Mac)
-- Watcom C pretends to be Microsoft C small model even in 32 bit mode.
+- Watcom C pretends to be Microsoft C small model even in 32 bit mode
- don't use unsized arrays to avoid silly warnings by Visual C++:
warning C4746: 'inflate_mask' : unsized array treated as '__far'
- (what's wrong with far data in far model?).
+ (what's wrong with far data in far model?)
- define enum out of inflate_blocks_state to allow compilation with C++
Changes in 0.95 (16 Aug 95)
- fix MSDOS small and medium model (now easier to adapt to any compiler)
- inlined send_bits
- fix the final (:-) bug for deflate with flush (output was correct but
- not completely flushed in rare occasions).
+ not completely flushed in rare occasions)
- default window size is same for compression and decompression
- (it's now sufficient to set MAX_WBITS in zconf.h).
+ (it's now sufficient to set MAX_WBITS in zconf.h)
- voidp -> voidpf and voidnp -> voidp (for consistency with other
- typedefs and because voidnp was not near in large model).
+ typedefs and because voidnp was not near in large model)
Changes in 0.94 (13 Aug 95)
- support MSDOS medium model
@@ -1409,12 +1468,12 @@ Changes in 0.94 (13 Aug 95)
- added support for VMS
- allow a compression level in gzopen()
- gzflush now calls fflush
-- For deflate with flush, flush even if no more input is provided.
+- For deflate with flush, flush even if no more input is provided
- rename libgz.a as libz.a
- avoid complex expression in infcodes.c triggering Turbo C bug
- work around a problem with gcc on Alpha (in INSERT_STRING)
- don't use inline functions (problem with some gcc versions)
-- allow renaming of Byte, uInt, etc... with #define.
+- allow renaming of Byte, uInt, etc... with #define
- avoid warning about (unused) pointer before start of array in deflate.c
- avoid various warnings in gzio.c, example.c, infblock.c, adler32.c, zutil.c
- avoid reserved word 'new' in trees.c
@@ -1433,7 +1492,7 @@ Changes in 0.92 (3 May 95)
- no memcpy on Pyramid
- suppressed inftest.c
- optimized fill_window, put longest_match inline for gcc
-- optimized inflate on stored blocks.
+- optimized inflate on stored blocks
- untabify all sources to simplify patches
Changes in 0.91 (2 May 95)
@@ -1451,7 +1510,7 @@ Changes in 0.9 (1 May 95)
- let again gzread copy uncompressed data unchanged (was working in 0.71)
- deflate(Z_FULL_FLUSH), inflateReset and inflateSync are now fully implemented
- added a test of inflateSync in example.c
-- moved MAX_WBITS to zconf.h because users might want to change that.
+- moved MAX_WBITS to zconf.h because users might want to change that
- document explicitly that zalloc(64K) on MSDOS must return a normalized
pointer (zero offset)
- added Makefiles for Microsoft C, Turbo C, Borland C++
@@ -1460,7 +1519,7 @@ Changes in 0.9 (1 May 95)
Changes in 0.8 (29 April 95)
- added fast inflate (inffast.c)
- deflate(Z_FINISH) now returns Z_STREAM_END when done. Warning: this
- is incompatible with previous versions of zlib which returned Z_OK.
+ is incompatible with previous versions of zlib which returned Z_OK
- work around a TurboC compiler bug (bad code for b << 0, see infutil.h)
(actually that was not a compiler bug, see 0.81 above)
- gzread no longer reads one extra byte in certain cases
@@ -1470,50 +1529,50 @@ Changes in 0.8 (29 April 95)
Changes in 0.71 (14 April 95)
- Fixed more MSDOS compilation problems :( There is still a bug with
- TurboC large model.
+ TurboC large model
Changes in 0.7 (14 April 95)
-- Added full inflate support.
+- Added full inflate support
- Simplified the crc32() interface. The pre- and post-conditioning
(one's complement) is now done inside crc32(). WARNING: this is
- incompatible with previous versions; see zlib.h for the new usage.
+ incompatible with previous versions; see zlib.h for the new usage
Changes in 0.61 (12 April 95)
-- workaround for a bug in TurboC. example and minigzip now work on MSDOS.
+- workaround for a bug in TurboC. example and minigzip now work on MSDOS
Changes in 0.6 (11 April 95)
- added minigzip.c
- added gzdopen to reopen a file descriptor as gzFile
-- added transparent reading of non-gziped files in gzread.
+- added transparent reading of non-gziped files in gzread
- fixed bug in gzread (don't read crc as data)
-- fixed bug in destroy (gzio.c) (don't return Z_STREAM_END for gzclose).
+- fixed bug in destroy (gzio.c) (don't return Z_STREAM_END for gzclose)
- don't allocate big arrays in the stack (for MSDOS)
- fix some MSDOS compilation problems
Changes in 0.5:
- do real compression in deflate.c. Z_PARTIAL_FLUSH is supported but
- not yet Z_FULL_FLUSH.
+ not yet Z_FULL_FLUSH
- support decompression but only in a single step (forced Z_FINISH)
-- added opaque object for zalloc and zfree.
+- added opaque object for zalloc and zfree
- added deflateReset and inflateReset
-- added a variable zlib_version for consistency checking.
-- renamed the 'filter' parameter of deflateInit2 as 'strategy'.
- Added Z_FILTERED and Z_HUFFMAN_ONLY constants.
+- added a variable zlib_version for consistency checking
+- renamed the 'filter' parameter of deflateInit2 as 'strategy'
+ Added Z_FILTERED and Z_HUFFMAN_ONLY constants
Changes in 0.4:
-- avoid "zip" everywhere, use zlib instead of ziplib.
+- avoid "zip" everywhere, use zlib instead of ziplib
- suppress Z_BLOCK_FLUSH, interpret Z_PARTIAL_FLUSH as block flush
- if compression method == 8.
+ if compression method == 8
- added adler32 and crc32
- renamed deflateOptions as deflateInit2, call one or the other but not both
-- added the method parameter for deflateInit2.
+- added the method parameter for deflateInit2
- added inflateInit2
- simplied considerably deflateInit and inflateInit by not supporting
user-provided history buffer. This is supported only in deflateInit2
- and inflateInit2.
+ and inflateInit2
Changes in 0.3:
- prefix all macro names with Z_
-- use Z_FINISH instead of deflateEnd to finish compression.
+- use Z_FINISH instead of deflateEnd to finish compression
- added Z_HUFFMAN_ONLY
- added gzerror()
diff --git a/zlib/Makefile.am b/zlib/Makefile.am
index 520f06592d8..5fc6bdce956 100644
--- a/zlib/Makefile.am
+++ b/zlib/Makefile.am
@@ -19,6 +19,8 @@ libz_a_SOURCES = $(ZLIB_SOURCES)
libz_a_CFLAGS = $(AM_CFLAGS) $(PICFLAG)
endif
+AM_CFLAGS = $(CET_FLAGS)
+
# Work around what appears to be a GNU make bug handling MAKEFLAGS
# values defined in terms of make variables, as is the case for CC and
# friends when we are called from the top level Makefile.
diff --git a/zlib/Makefile.in b/zlib/Makefile.in
index 062dc04e80d..4a7fcd05044 100644
--- a/zlib/Makefile.in
+++ b/zlib/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.15.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.2 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2017 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -138,6 +138,7 @@ am__uninstall_files_from_dir = { \
}
am__installdirs = "$(DESTDIR)$(toolexeclibdir)"
LIBRARIES = $(toolexeclib_LIBRARIES)
+LTLIBRARIES = $(noinst_LTLIBRARIES)
ARFLAGS = cru
AM_V_AR = $(am__v_AR_@AM_V@)
am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@)
@@ -160,7 +161,6 @@ am__objects_1 = libz_a-adler32.$(OBJEXT) libz_a-compress.$(OBJEXT) \
libz_a-zutil.$(OBJEXT)
@TARGET_LIBRARY_FALSE@am_libz_a_OBJECTS = $(am__objects_1)
libz_a_OBJECTS = $(am_libz_a_OBJECTS)
-LTLIBRARIES = $(noinst_LTLIBRARIES)
libzgcj_convenience_la_LIBADD =
am__libzgcj_convenience_la_SOURCES_DIST = adler32.c compress.c crc32.c \
crc32.h deflate.c deflate.h gzguts.h gzread.c gzclose.c \
@@ -192,7 +192,22 @@ am__v_at_0 = @
am__v_at_1 =
DEFAULT_INCLUDES = -I.@am__isrc@
depcomp = $(SHELL) $(top_srcdir)/../depcomp
-am__depfiles_maybe = depfiles
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/adler32.Plo ./$(DEPDIR)/compress.Plo \
+ ./$(DEPDIR)/crc32.Plo ./$(DEPDIR)/deflate.Plo \
+ ./$(DEPDIR)/gzclose.Plo ./$(DEPDIR)/gzlib.Plo \
+ ./$(DEPDIR)/gzread.Plo ./$(DEPDIR)/gzwrite.Plo \
+ ./$(DEPDIR)/infback.Plo ./$(DEPDIR)/inffast.Plo \
+ ./$(DEPDIR)/inflate.Plo ./$(DEPDIR)/inftrees.Plo \
+ ./$(DEPDIR)/libz_a-adler32.Po ./$(DEPDIR)/libz_a-compress.Po \
+ ./$(DEPDIR)/libz_a-crc32.Po ./$(DEPDIR)/libz_a-deflate.Po \
+ ./$(DEPDIR)/libz_a-gzclose.Po ./$(DEPDIR)/libz_a-gzlib.Po \
+ ./$(DEPDIR)/libz_a-gzread.Po ./$(DEPDIR)/libz_a-gzwrite.Po \
+ ./$(DEPDIR)/libz_a-infback.Po ./$(DEPDIR)/libz_a-inffast.Po \
+ ./$(DEPDIR)/libz_a-inflate.Po ./$(DEPDIR)/libz_a-inftrees.Po \
+ ./$(DEPDIR)/libz_a-trees.Po ./$(DEPDIR)/libz_a-uncompr.Po \
+ ./$(DEPDIR)/libz_a-zutil.Po ./$(DEPDIR)/trees.Plo \
+ ./$(DEPDIR)/uncompr.Plo ./$(DEPDIR)/zutil.Plo
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
@@ -400,6 +415,7 @@ zconf.h.in zlib.h zutil.c zutil.h
@TARGET_LIBRARY_FALSE@toolexeclib_LIBRARIES = libz.a
@TARGET_LIBRARY_FALSE@libz_a_SOURCES = $(ZLIB_SOURCES)
@TARGET_LIBRARY_FALSE@libz_a_CFLAGS = $(AM_CFLAGS) $(PICFLAG)
+AM_CFLAGS = $(CET_FLAGS)
# Work around what appears to be a GNU make bug handling MAKEFLAGS
# values defined in terms of make variables, as is the case for CC and
@@ -473,8 +489,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
echo ' $(SHELL) ./config.status'; \
$(SHELL) ./config.status;; \
*) \
- echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
- cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \
esac;
$(top_srcdir)/../multilib.am $(am__empty):
@@ -518,11 +534,6 @@ uninstall-toolexeclibLIBRARIES:
clean-toolexeclibLIBRARIES:
-test -z "$(toolexeclib_LIBRARIES)" || rm -f $(toolexeclib_LIBRARIES)
-libz.a: $(libz_a_OBJECTS) $(libz_a_DEPENDENCIES) $(EXTRA_libz_a_DEPENDENCIES)
- $(AM_V_at)-rm -f libz.a
- $(AM_V_AR)$(libz_a_AR) libz.a $(libz_a_OBJECTS) $(libz_a_LIBADD)
- $(AM_V_at)$(RANLIB) libz.a
-
clean-noinstLTLIBRARIES:
-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
@list='$(noinst_LTLIBRARIES)'; \
@@ -534,6 +545,11 @@ clean-noinstLTLIBRARIES:
rm -f $${locs}; \
}
+libz.a: $(libz_a_OBJECTS) $(libz_a_DEPENDENCIES) $(EXTRA_libz_a_DEPENDENCIES)
+ $(AM_V_at)-rm -f libz.a
+ $(AM_V_AR)$(libz_a_AR) libz.a $(libz_a_OBJECTS) $(libz_a_LIBADD)
+ $(AM_V_at)$(RANLIB) libz.a
+
libzgcj_convenience.la: $(libzgcj_convenience_la_OBJECTS) $(libzgcj_convenience_la_DEPENDENCIES) $(EXTRA_libzgcj_convenience_la_DEPENDENCIES)
$(AM_V_CCLD)$(LINK) $(am_libzgcj_convenience_la_rpath) $(libzgcj_convenience_la_OBJECTS) $(libzgcj_convenience_la_LIBADD) $(LIBS)
@@ -543,36 +559,42 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/adler32.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/compress.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/crc32.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/deflate.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gzclose.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gzlib.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gzread.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gzwrite.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/infback.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/inffast.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/inflate.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/inftrees.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libz_a-adler32.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libz_a-compress.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libz_a-crc32.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libz_a-deflate.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libz_a-gzclose.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libz_a-gzlib.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libz_a-gzread.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libz_a-gzwrite.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libz_a-infback.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libz_a-inffast.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libz_a-inflate.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libz_a-inftrees.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libz_a-trees.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libz_a-uncompr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libz_a-zutil.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/trees.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uncompr.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zutil.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/adler32.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/compress.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/crc32.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/deflate.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gzclose.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gzlib.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gzread.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gzwrite.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/infback.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/inffast.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/inflate.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/inftrees.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libz_a-adler32.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libz_a-compress.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libz_a-crc32.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libz_a-deflate.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libz_a-gzclose.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libz_a-gzlib.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libz_a-gzread.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libz_a-gzwrite.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libz_a-infback.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libz_a-inffast.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libz_a-inflate.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libz_a-inftrees.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libz_a-trees.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libz_a-uncompr.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libz_a-zutil.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/trees.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uncompr.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zutil.Plo@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -873,7 +895,10 @@ distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-rm -f cscope.out cscope.in.out cscope.po.out cscope.files
-distdir: $(DISTFILES)
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
$(am__remove_distdir)
test -d "$(distdir)" || mkdir "$(distdir)"
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
@@ -928,6 +953,10 @@ dist-xz: distdir
tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
$(am__post_remove_distdir)
+dist-zstd: distdir
+ tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst
+ $(am__post_remove_distdir)
+
dist-tarZ: distdir
@echo WARNING: "Support for distribution archives compressed with" \
"legacy program 'compress' is deprecated." >&2
@@ -970,6 +999,8 @@ distcheck: dist
eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\
*.zip*) \
unzip $(distdir).zip ;;\
+ *.tar.zst*) \
+ zstd -dc $(distdir).tar.zst | $(am__untar) ;;\
esac
chmod -R a-w $(distdir)
chmod u+w $(distdir)
@@ -1081,7 +1112,36 @@ clean-am: clean-generic clean-libtool clean-local \
distclean: distclean-am
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
- -rm -rf ./$(DEPDIR)
+ -rm -f ./$(DEPDIR)/adler32.Plo
+ -rm -f ./$(DEPDIR)/compress.Plo
+ -rm -f ./$(DEPDIR)/crc32.Plo
+ -rm -f ./$(DEPDIR)/deflate.Plo
+ -rm -f ./$(DEPDIR)/gzclose.Plo
+ -rm -f ./$(DEPDIR)/gzlib.Plo
+ -rm -f ./$(DEPDIR)/gzread.Plo
+ -rm -f ./$(DEPDIR)/gzwrite.Plo
+ -rm -f ./$(DEPDIR)/infback.Plo
+ -rm -f ./$(DEPDIR)/inffast.Plo
+ -rm -f ./$(DEPDIR)/inflate.Plo
+ -rm -f ./$(DEPDIR)/inftrees.Plo
+ -rm -f ./$(DEPDIR)/libz_a-adler32.Po
+ -rm -f ./$(DEPDIR)/libz_a-compress.Po
+ -rm -f ./$(DEPDIR)/libz_a-crc32.Po
+ -rm -f ./$(DEPDIR)/libz_a-deflate.Po
+ -rm -f ./$(DEPDIR)/libz_a-gzclose.Po
+ -rm -f ./$(DEPDIR)/libz_a-gzlib.Po
+ -rm -f ./$(DEPDIR)/libz_a-gzread.Po
+ -rm -f ./$(DEPDIR)/libz_a-gzwrite.Po
+ -rm -f ./$(DEPDIR)/libz_a-infback.Po
+ -rm -f ./$(DEPDIR)/libz_a-inffast.Po
+ -rm -f ./$(DEPDIR)/libz_a-inflate.Po
+ -rm -f ./$(DEPDIR)/libz_a-inftrees.Po
+ -rm -f ./$(DEPDIR)/libz_a-trees.Po
+ -rm -f ./$(DEPDIR)/libz_a-uncompr.Po
+ -rm -f ./$(DEPDIR)/libz_a-zutil.Po
+ -rm -f ./$(DEPDIR)/trees.Plo
+ -rm -f ./$(DEPDIR)/uncompr.Plo
+ -rm -f ./$(DEPDIR)/zutil.Plo
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-libtool distclean-local distclean-tags
@@ -1129,7 +1189,36 @@ installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-rm -rf $(top_srcdir)/autom4te.cache
- -rm -rf ./$(DEPDIR)
+ -rm -f ./$(DEPDIR)/adler32.Plo
+ -rm -f ./$(DEPDIR)/compress.Plo
+ -rm -f ./$(DEPDIR)/crc32.Plo
+ -rm -f ./$(DEPDIR)/deflate.Plo
+ -rm -f ./$(DEPDIR)/gzclose.Plo
+ -rm -f ./$(DEPDIR)/gzlib.Plo
+ -rm -f ./$(DEPDIR)/gzread.Plo
+ -rm -f ./$(DEPDIR)/gzwrite.Plo
+ -rm -f ./$(DEPDIR)/infback.Plo
+ -rm -f ./$(DEPDIR)/inffast.Plo
+ -rm -f ./$(DEPDIR)/inflate.Plo
+ -rm -f ./$(DEPDIR)/inftrees.Plo
+ -rm -f ./$(DEPDIR)/libz_a-adler32.Po
+ -rm -f ./$(DEPDIR)/libz_a-compress.Po
+ -rm -f ./$(DEPDIR)/libz_a-crc32.Po
+ -rm -f ./$(DEPDIR)/libz_a-deflate.Po
+ -rm -f ./$(DEPDIR)/libz_a-gzclose.Po
+ -rm -f ./$(DEPDIR)/libz_a-gzlib.Po
+ -rm -f ./$(DEPDIR)/libz_a-gzread.Po
+ -rm -f ./$(DEPDIR)/libz_a-gzwrite.Po
+ -rm -f ./$(DEPDIR)/libz_a-infback.Po
+ -rm -f ./$(DEPDIR)/libz_a-inffast.Po
+ -rm -f ./$(DEPDIR)/libz_a-inflate.Po
+ -rm -f ./$(DEPDIR)/libz_a-inftrees.Po
+ -rm -f ./$(DEPDIR)/libz_a-trees.Po
+ -rm -f ./$(DEPDIR)/libz_a-uncompr.Po
+ -rm -f ./$(DEPDIR)/libz_a-zutil.Po
+ -rm -f ./$(DEPDIR)/trees.Plo
+ -rm -f ./$(DEPDIR)/uncompr.Plo
+ -rm -f ./$(DEPDIR)/zutil.Plo
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic \
maintainer-clean-local
@@ -1151,17 +1240,17 @@ uninstall-am: uninstall-toolexeclibLIBRARIES
.MAKE: install-am install-strip
-.PHONY: CTAGS GTAGS TAGS all all-am all-local am--refresh check \
- check-am clean clean-cscope clean-generic clean-libtool \
+.PHONY: CTAGS GTAGS TAGS all all-am all-local am--depfiles am--refresh \
+ check check-am clean clean-cscope clean-generic clean-libtool \
clean-local clean-noinstLTLIBRARIES clean-toolexeclibLIBRARIES \
cscope cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \
dist-gzip dist-lzip dist-shar dist-tarZ dist-xz dist-zip \
- distcheck distclean distclean-compile distclean-generic \
- distclean-libtool distclean-local distclean-tags \
- distcleancheck distdir distuninstallcheck dvi dvi-am html \
- html-am info info-am install install-am install-data \
- install-data-am install-dvi install-dvi-am install-exec \
- install-exec-am install-exec-local install-html \
+ dist-zstd distcheck distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-local \
+ distclean-tags distcleancheck distdir distuninstallcheck dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-exec-local install-html \
install-html-am install-info install-info-am install-man \
install-pdf install-pdf-am install-ps install-ps-am \
install-strip install-toolexeclibLIBRARIES installcheck \
diff --git a/zlib/README b/zlib/README
index 92e9d5c64a7..024b79d3d8c 100644
--- a/zlib/README
+++ b/zlib/README
@@ -1,9 +1,6 @@
-This directory contains the zlib package, which is not part of GCC but
-shipped with GCC as convenience.
-
ZLIB DATA COMPRESSION LIBRARY
-zlib 1.2.11 is a general purpose data compression library. All the code is
+zlib 1.2.12 is a general purpose data compression library. All the code is
thread safe. The data format used by the zlib library is described by RFCs
(Request for Comments) 1950 to 1952 in the files
http://tools.ietf.org/html/rfc1950 (zlib format), rfc1951 (deflate format) and
@@ -34,7 +31,7 @@ Mark Nelson <markn@ieee.org> wrote an article about zlib for the Jan. 1997
issue of Dr. Dobb's Journal; a copy of the article is available at
http://marknelson.us/1997/01/01/zlib-engine/ .
-The changes made in version 1.2.11 are documented in the file ChangeLog.
+The changes made in version 1.2.12 are documented in the file ChangeLog.
Unsupported third party contributions are provided in directory contrib/ .
@@ -87,7 +84,7 @@ Acknowledgments:
Copyright notice:
- (C) 1995-2017 Jean-loup Gailly and Mark Adler
+ (C) 1995-2022 Jean-loup Gailly and Mark Adler
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -111,7 +108,10 @@ Copyright notice:
If you use the zlib library in a product, we would appreciate *not* receiving
lengthy legal documents to sign. The sources are provided for free but without
warranty of any kind. The library has been entirely written by Jean-loup
-Gailly and Mark Adler; it does not include third-party code.
+Gailly and Mark Adler; it does not include third-party code. We make all
+contributions to and distributions of this project solely in our personal
+capacity, and are not conveying any rights to any intellectual property of
+any third parties.
If you redistribute modified sources, we would appreciate that you include in
the file ChangeLog history information documenting your changes. Please read
diff --git a/zlib/aclocal.m4 b/zlib/aclocal.m4
index e5eed57bd68..0871896e62b 100644
--- a/zlib/aclocal.m4
+++ b/zlib/aclocal.m4
@@ -1,6 +1,6 @@
-# generated automatically by aclocal 1.15.1 -*- Autoconf -*-
+# generated automatically by aclocal 1.16.2 -*- Autoconf -*-
-# Copyright (C) 1996-2017 Free Software Foundation, Inc.
+# Copyright (C) 1996-2020 Free Software Foundation, Inc.
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -20,7 +20,7 @@ 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-2017 Free Software Foundation, Inc.
+# Copyright (C) 2002-2020 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -32,10 +32,10 @@ To do so, use the procedure documented by the package, typically 'autoreconf'.])
# generated from the m4 files accompanying Automake X.Y.
# (This private macro should not be called outside this file.)
AC_DEFUN([AM_AUTOMAKE_VERSION],
-[am__api_version='1.15'
+[am__api_version='1.16'
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.15.1], [],
+m4_if([$1], [1.16.2], [],
[AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
])
@@ -51,14 +51,14 @@ 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.15.1])dnl
+[AM_AUTOMAKE_VERSION([1.16.2])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-2017 Free Software Foundation, Inc.
+# Copyright (C) 2001-2020 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -110,7 +110,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd`
# AM_CONDITIONAL -*- Autoconf -*-
-# Copyright (C) 1997-2017 Free Software Foundation, Inc.
+# Copyright (C) 1997-2020 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -141,7 +141,7 @@ AC_CONFIG_COMMANDS_PRE(
Usually this means the macro was only invoked conditionally.]])
fi])])
-# Copyright (C) 1999-2017 Free Software Foundation, Inc.
+# Copyright (C) 1999-2020 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -332,13 +332,12 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl
# Generate code to set up dependency tracking. -*- Autoconf -*-
-# Copyright (C) 1999-2017 Free Software Foundation, Inc.
+# Copyright (C) 1999-2020 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
-
# _AM_OUTPUT_DEPENDENCY_COMMANDS
# ------------------------------
AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
@@ -346,49 +345,43 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
# Older Autoconf quotes --file arguments for eval, but not when files
# are listed without --file. Let's play safe and only enable the eval
# if we detect the quoting.
- case $CONFIG_FILES in
- *\'*) eval set x "$CONFIG_FILES" ;;
- *) set x $CONFIG_FILES ;;
- esac
+ # TODO: see whether this extra hack can be removed once we start
+ # requiring Autoconf 2.70 or later.
+ AS_CASE([$CONFIG_FILES],
+ [*\'*], [eval set x "$CONFIG_FILES"],
+ [*], [set x $CONFIG_FILES])
shift
- for mf
+ # Used to flag and report bootstrapping failures.
+ am_rc=0
+ for am_mf
do
# Strip MF so we end up with the name of the file.
- mf=`echo "$mf" | sed -e 's/:.*$//'`
- # Check whether this is an Automake generated Makefile or not.
- # We used to match only the files named 'Makefile.in', but
- # some people rename them; so instead we look at the file content.
- # Grep'ing the first line is not enough: some people post-process
- # each Makefile.in and add a new line on top of each file to say so.
- # Grep'ing the whole file is not good either: AIX grep has a line
+ am_mf=`AS_ECHO(["$am_mf"]) | sed -e 's/:.*$//'`
+ # Check whether this is an Automake generated Makefile which includes
+ # dependency-tracking related rules and includes.
+ # Grep'ing the whole file directly is not great: AIX grep has a line
# limit of 2048, but all sed's we know have understand at least 4000.
- if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
- dirpart=`AS_DIRNAME("$mf")`
- else
- continue
- fi
- # Extract the definition of DEPDIR, am__include, and am__quote
- # from the Makefile without running 'make'.
- DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
- test -z "$DEPDIR" && continue
- am__include=`sed -n 's/^am__include = //p' < "$mf"`
- test -z "$am__include" && continue
- am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
- # Find all dependency output files, they are included files with
- # $(DEPDIR) in their names. We invoke sed twice because it is the
- # simplest approach to changing $(DEPDIR) to its actual value in the
- # expansion.
- for file in `sed -n "
- s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
- sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do
- # Make sure the directory exists.
- test -f "$dirpart/$file" && continue
- fdir=`AS_DIRNAME(["$file"])`
- AS_MKDIR_P([$dirpart/$fdir])
- # echo "creating $dirpart/$file"
- echo '# dummy' > "$dirpart/$file"
- done
+ sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \
+ || continue
+ am_dirpart=`AS_DIRNAME(["$am_mf"])`
+ am_filepart=`AS_BASENAME(["$am_mf"])`
+ AM_RUN_LOG([cd "$am_dirpart" \
+ && sed -e '/# am--include-marker/d' "$am_filepart" \
+ | $MAKE -f - am--depfiles]) || am_rc=$?
done
+ if test $am_rc -ne 0; then
+ AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments
+ for automatic dependency tracking. If GNU make was not used, consider
+ re-running the configure script with MAKE="gmake" (or whatever is
+ necessary). You can also try re-running configure with the
+ '--disable-dependency-tracking' option to at least be able to build
+ the package (albeit without support for automatic dependency tracking).])
+ fi
+ AS_UNSET([am_dirpart])
+ AS_UNSET([am_filepart])
+ AS_UNSET([am_mf])
+ AS_UNSET([am_rc])
+ rm -f conftest-deps.mk
}
])# _AM_OUTPUT_DEPENDENCY_COMMANDS
@@ -397,18 +390,17 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
# -----------------------------
# This macro should only be invoked once -- use via AC_REQUIRE.
#
-# This code is only required when automatic dependency tracking
-# is enabled. FIXME. This creates each '.P' file that we will
-# need in order to bootstrap the dependency handling code.
+# This code is only required when automatic dependency tracking is enabled.
+# This creates each '.Po' and '.Plo' makefile fragment that we'll need in
+# order to bootstrap the dependency handling code.
AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
[AC_CONFIG_COMMANDS([depfiles],
[test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
- [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
-])
+ [AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"])])
# Do all the work for Automake. -*- Autoconf -*-
-# Copyright (C) 1996-2017 Free Software Foundation, Inc.
+# Copyright (C) 1996-2020 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -495,8 +487,8 @@ AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
AC_REQUIRE([AC_PROG_MKDIR_P])dnl
# For better backward compatibility. To be removed once Automake 1.9.x
# dies out for good. For more background, see:
-# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
-# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+# <https://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <https://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
AC_SUBST([mkdir_p], ['$(MKDIR_P)'])
# We need awk for the "check" target (and possibly the TAP driver). The
# system "awk" is bad on some platforms.
@@ -563,7 +555,7 @@ END
Aborting the configuration process, to ensure you take notice of the issue.
You can download and install GNU coreutils to get an 'rm' implementation
-that behaves properly: <http://www.gnu.org/software/coreutils/>.
+that behaves properly: <https://www.gnu.org/software/coreutils/>.
If you want to complete the configuration process using your problematic
'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
@@ -605,7 +597,7 @@ 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-2017 Free Software Foundation, Inc.
+# Copyright (C) 2001-2020 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -629,7 +621,7 @@ AC_SUBST([install_sh])])
# Add --enable-maintainer-mode option to configure. -*- Autoconf -*-
# From Jim Meyering
-# Copyright (C) 1996-2017 Free Software Foundation, Inc.
+# Copyright (C) 1996-2020 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -664,7 +656,7 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
# Check to see how 'make' treats includes. -*- Autoconf -*-
-# Copyright (C) 2001-2017 Free Software Foundation, Inc.
+# Copyright (C) 2001-2020 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -672,49 +664,42 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
# AM_MAKE_INCLUDE()
# -----------------
-# Check to see how make treats includes.
+# Check whether make has an 'include' directive that can support all
+# the idioms we need for our automatic dependency tracking code.
AC_DEFUN([AM_MAKE_INCLUDE],
-[am_make=${MAKE-make}
-cat > confinc << 'END'
+[AC_MSG_CHECKING([whether ${MAKE-make} supports the include directive])
+cat > confinc.mk << 'END'
am__doit:
- @echo this is the am__doit target
+ @echo this is the am__doit target >confinc.out
.PHONY: am__doit
END
-# If we don't find an include directive, just comment out the code.
-AC_MSG_CHECKING([for style of include used by $am_make])
am__include="#"
am__quote=
-_am_result=none
-# First try GNU make style include.
-echo "include confinc" > confmf
-# Ignore all kinds of additional output from 'make'.
-case `$am_make -s -f confmf 2> /dev/null` in #(
-*the\ am__doit\ target*)
- am__include=include
- am__quote=
- _am_result=GNU
- ;;
-esac
-# Now try BSD make style include.
-if test "$am__include" = "#"; then
- echo '.include "confinc"' > confmf
- case `$am_make -s -f confmf 2> /dev/null` in #(
- *the\ am__doit\ target*)
- am__include=.include
- am__quote="\""
- _am_result=BSD
- ;;
- esac
-fi
-AC_SUBST([am__include])
-AC_SUBST([am__quote])
-AC_MSG_RESULT([$_am_result])
-rm -f confinc confmf
-])
+# BSD make does it like this.
+echo '.include "confinc.mk" # ignored' > confmf.BSD
+# Other make implementations (GNU, Solaris 10, AIX) do it like this.
+echo 'include confinc.mk # ignored' > confmf.GNU
+_am_result=no
+for s in GNU BSD; do
+ AM_RUN_LOG([${MAKE-make} -f confmf.$s && cat confinc.out])
+ AS_CASE([$?:`cat confinc.out 2>/dev/null`],
+ ['0:this is the am__doit target'],
+ [AS_CASE([$s],
+ [BSD], [am__include='.include' am__quote='"'],
+ [am__include='include' am__quote=''])])
+ if test "$am__include" != "#"; then
+ _am_result="yes ($s style)"
+ break
+ fi
+done
+rm -f confinc.* confmf.*
+AC_MSG_RESULT([${_am_result}])
+AC_SUBST([am__include])])
+AC_SUBST([am__quote])])
# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
-# Copyright (C) 1997-2017 Free Software Foundation, Inc.
+# Copyright (C) 1997-2020 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -753,7 +738,7 @@ fi
# Helper functions for option handling. -*- Autoconf -*-
-# Copyright (C) 2001-2017 Free Software Foundation, Inc.
+# Copyright (C) 2001-2020 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -782,7 +767,7 @@ AC_DEFUN([_AM_SET_OPTIONS],
AC_DEFUN([_AM_IF_OPTION],
[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
-# Copyright (C) 1999-2017 Free Software Foundation, Inc.
+# Copyright (C) 1999-2020 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -829,7 +814,7 @@ AC_LANG_POP([C])])
# For backward compatibility.
AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])])
-# Copyright (C) 2001-2017 Free Software Foundation, Inc.
+# Copyright (C) 2001-2020 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -848,7 +833,7 @@ AC_DEFUN([AM_RUN_LOG],
# Check to make sure that the build environment is sane. -*- Autoconf -*-
-# Copyright (C) 1996-2017 Free Software Foundation, Inc.
+# Copyright (C) 1996-2020 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -929,7 +914,7 @@ AC_CONFIG_COMMANDS_PRE(
rm -f conftest.file
])
-# Copyright (C) 2009-2017 Free Software Foundation, Inc.
+# Copyright (C) 2009-2020 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -989,7 +974,7 @@ AC_SUBST([AM_BACKSLASH])dnl
_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
])
-# Copyright (C) 2001-2017 Free Software Foundation, Inc.
+# Copyright (C) 2001-2020 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -1017,7 +1002,7 @@ fi
INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
AC_SUBST([INSTALL_STRIP_PROGRAM])])
-# Copyright (C) 2006-2017 Free Software Foundation, Inc.
+# Copyright (C) 2006-2020 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -1036,7 +1021,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
# Check how to create a tarball. -*- Autoconf -*-
-# Copyright (C) 2004-2017 Free Software Foundation, Inc.
+# Copyright (C) 2004-2020 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
diff --git a/zlib/adler32.c b/zlib/adler32.c
index b3d35e2a891..d0be4380a39 100644
--- a/zlib/adler32.c
+++ b/zlib/adler32.c
@@ -3,7 +3,7 @@
* For conditions of distribution and use, see copyright notice in zlib.h
*/
-/* @(#) $Id: adler32.c,v 1.1.1.2 2002/03/11 21:53:23 tromey Exp $ */
+/* @(#) $Id$ */
#include "zutil.h"
diff --git a/zlib/compress.c b/zlib/compress.c
index bb443c6fcf1..e2db404abf8 100644
--- a/zlib/compress.c
+++ b/zlib/compress.c
@@ -3,7 +3,7 @@
* For conditions of distribution and use, see copyright notice in zlib.h
*/
-/* @(#) $Id: compress.c,v 1.1.1.2 2002/03/11 21:53:23 tromey Exp $ */
+/* @(#) $Id$ */
#define ZLIB_INTERNAL
#include "zlib.h"
diff --git a/zlib/configure b/zlib/configure
index db7845c5d42..25ad9c89293 100755
--- a/zlib/configure
+++ b/zlib/configure
@@ -666,7 +666,6 @@ am__nodep
AMDEPBACKSLASH
AMDEP_FALSE
AMDEP_TRUE
-am__quote
am__include
DEPDIR
OBJEXT
@@ -758,7 +757,8 @@ PACKAGE_VERSION
PACKAGE_TARNAME
PACKAGE_NAME
PATH_SEPARATOR
-SHELL'
+SHELL
+am__quote'
ac_subst_files=''
ac_user_opts='
enable_option_checking
@@ -2414,7 +2414,7 @@ test -n "$target_alias" &&
mkinstalldirs="`cd $ac_aux_dir && ${PWDCMD-pwd}`/mkinstalldirs"
-am__api_version='1.15'
+am__api_version='1.16'
# Find a good install program. We prefer a C program (faster),
# so one script is as good as another. But avoid the broken or
@@ -2930,8 +2930,8 @@ MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
# For better backward compatibility. To be removed once Automake 1.9.x
# dies out for good. For more background, see:
-# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
-# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+# <https://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <https://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
mkdir_p='$(MKDIR_P)'
# We need awk for the "check" target (and possibly the TAP driver). The
@@ -2982,7 +2982,7 @@ END
Aborting the configuration process, to ensure you take notice of the issue.
You can download and install GNU coreutils to get an 'rm' implementation
-that behaves properly: <http://www.gnu.org/software/coreutils/>.
+that behaves properly: <https://www.gnu.org/software/coreutils/>.
If you want to complete the configuration process using your problematic
'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
@@ -3986,45 +3986,45 @@ DEPDIR="${am__leading_dot}deps"
ac_config_commands="$ac_config_commands depfiles"
-
-am_make=${MAKE-make}
-cat > confinc << 'END'
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5
+$as_echo_n "checking whether ${MAKE-make} supports the include directive... " >&6; }
+cat > confinc.mk << 'END'
am__doit:
- @echo this is the am__doit target
+ @echo this is the am__doit target >confinc.out
.PHONY: am__doit
END
-# If we don't find an include directive, just comment out the code.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5
-$as_echo_n "checking for style of include used by $am_make... " >&6; }
am__include="#"
am__quote=
-_am_result=none
-# First try GNU make style include.
-echo "include confinc" > confmf
-# Ignore all kinds of additional output from 'make'.
-case `$am_make -s -f confmf 2> /dev/null` in #(
-*the\ am__doit\ target*)
- am__include=include
- am__quote=
- _am_result=GNU
- ;;
-esac
-# Now try BSD make style include.
-if test "$am__include" = "#"; then
- echo '.include "confinc"' > confmf
- case `$am_make -s -f confmf 2> /dev/null` in #(
- *the\ am__doit\ target*)
- am__include=.include
- am__quote="\""
- _am_result=BSD
+# BSD make does it like this.
+echo '.include "confinc.mk" # ignored' > confmf.BSD
+# Other make implementations (GNU, Solaris 10, AIX) do it like this.
+echo 'include confinc.mk # ignored' > confmf.GNU
+_am_result=no
+for s in GNU BSD; do
+ { echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5
+ (${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+ case $?:`cat confinc.out 2>/dev/null` in #(
+ '0:this is the am__doit target') :
+ case $s in #(
+ BSD) :
+ am__include='.include' am__quote='"' ;; #(
+ *) :
+ am__include='include' am__quote='' ;;
+esac ;; #(
+ *) :
;;
- esac
-fi
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5
-$as_echo "$_am_result" >&6; }
-rm -f confinc confmf
+esac
+ if test "$am__include" != "#"; then
+ _am_result="yes ($s style)"
+ break
+ fi
+done
+rm -f confinc.* confmf.*
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5
+$as_echo "${_am_result}" >&6; }
# Check whether --enable-dependency-tracking was given.
if test "${enable_dependency_tracking+set}" = set; then :
@@ -4696,25 +4696,31 @@ else
lt_nm_to_check="$lt_nm_to_check nm"
fi
fi
- for lt_tmp_nm in $lt_nm_to_check; do
+ for lt_tmp_nm in "$lt_nm_to_check"; do
lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
IFS="$lt_save_ifs"
test -z "$ac_dir" && ac_dir=.
- case "$lt_tmp_nm" in
+ # Strip out any user-provided options from the nm to test twice,
+ # the first time to test to see if nm (rather than its options) has
+ # an explicit path, the second time to yield a file which can be
+ # nm'ed itself.
+ tmp_nm_path="`$ECHO "$lt_tmp_nm" | sed 's, -.*$,,'`"
+ case "$tmp_nm_path" in
*/*|*\\*) tmp_nm="$lt_tmp_nm";;
*) tmp_nm="$ac_dir/$lt_tmp_nm";;
esac
- if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+ tmp_nm_to_nm="`$ECHO "$tmp_nm" | sed 's, -.*$,,'`"
+ if test -f "$tmp_nm_to_nm" || test -f "$tmp_nm_to_nm$ac_exeext" ; then
# Check to see if the nm accepts a BSD-compat flag.
# Adding the `sed 1q' prevents false positives on HP-UX, which says:
# nm: unknown option "B" ignored
- case `"$tmp_nm" -B "$tmp_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
+ case `"$tmp_nm" -B "$tmp_nm_to_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
*$tmp_nm*) lt_cv_path_NM="$tmp_nm -B"
break
;;
*)
- case `"$tmp_nm" -p "$tmp_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
+ case `"$tmp_nm" -p "$tmp_nm_to_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
*$tmp_nm*)
lt_cv_path_NM="$tmp_nm -p"
break
@@ -10705,7 +10711,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 10708 "configure"
+#line 10714 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -10811,7 +10817,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 10814 "configure"
+#line 10820 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -12290,7 +12296,7 @@ CC="$CC"
CXX="$CXX"
GFORTRAN="$GFORTRAN"
GDC="$GDC"
-AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"
# The HP-UX ksh and POSIX shell print the target directory to stdout
@@ -13005,29 +13011,35 @@ esac ;;
# Older Autoconf quotes --file arguments for eval, but not when files
# are listed without --file. Let's play safe and only enable the eval
# if we detect the quoting.
- case $CONFIG_FILES in
- *\'*) eval set x "$CONFIG_FILES" ;;
- *) set x $CONFIG_FILES ;;
- esac
+ # TODO: see whether this extra hack can be removed once we start
+ # requiring Autoconf 2.70 or later.
+ case $CONFIG_FILES in #(
+ *\'*) :
+ eval set x "$CONFIG_FILES" ;; #(
+ *) :
+ set x $CONFIG_FILES ;; #(
+ *) :
+ ;;
+esac
shift
- for mf
+ # Used to flag and report bootstrapping failures.
+ am_rc=0
+ for am_mf
do
# Strip MF so we end up with the name of the file.
- mf=`echo "$mf" | sed -e 's/:.*$//'`
- # Check whether this is an Automake generated Makefile or not.
- # We used to match only the files named 'Makefile.in', but
- # some people rename them; so instead we look at the file content.
- # Grep'ing the first line is not enough: some people post-process
- # each Makefile.in and add a new line on top of each file to say so.
- # Grep'ing the whole file is not good either: AIX grep has a line
+ am_mf=`$as_echo "$am_mf" | sed -e 's/:.*$//'`
+ # Check whether this is an Automake generated Makefile which includes
+ # dependency-tracking related rules and includes.
+ # Grep'ing the whole file directly is not great: AIX grep has a line
# limit of 2048, but all sed's we know have understand at least 4000.
- if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
- dirpart=`$as_dirname -- "$mf" ||
-$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$mf" : 'X\(//\)[^/]' \| \
- X"$mf" : 'X\(//\)$' \| \
- X"$mf" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$mf" |
+ sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \
+ || continue
+ am_dirpart=`$as_dirname -- "$am_mf" ||
+$as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$am_mf" : 'X\(//\)[^/]' \| \
+ X"$am_mf" : 'X\(//\)$' \| \
+ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$am_mf" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
@@ -13045,53 +13057,50 @@ $as_echo X"$mf" |
q
}
s/.*/./; q'`
- else
- continue
- fi
- # Extract the definition of DEPDIR, am__include, and am__quote
- # from the Makefile without running 'make'.
- DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
- test -z "$DEPDIR" && continue
- am__include=`sed -n 's/^am__include = //p' < "$mf"`
- test -z "$am__include" && continue
- am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
- # Find all dependency output files, they are included files with
- # $(DEPDIR) in their names. We invoke sed twice because it is the
- # simplest approach to changing $(DEPDIR) to its actual value in the
- # expansion.
- for file in `sed -n "
- s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
- sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do
- # Make sure the directory exists.
- test -f "$dirpart/$file" && continue
- fdir=`$as_dirname -- "$file" ||
-$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$file" : 'X\(//\)[^/]' \| \
- X"$file" : 'X\(//\)$' \| \
- X"$file" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$file" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
+ am_filepart=`$as_basename -- "$am_mf" ||
+$as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$am_mf" : 'X\(//\)$' \| \
+ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$am_mf" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
s//\1/
q
}
- /^X\(\/\/\)$/{
+ /^X\/\(\/\/\)$/{
s//\1/
q
}
- /^X\(\/\).*/{
+ /^X\/\(\/\).*/{
s//\1/
q
}
s/.*/./; q'`
- as_dir=$dirpart/$fdir; as_fn_mkdir_p
- # echo "creating $dirpart/$file"
- echo '# dummy' > "$dirpart/$file"
- done
+ { echo "$as_me:$LINENO: cd "$am_dirpart" \
+ && sed -e '/# am--include-marker/d' "$am_filepart" \
+ | $MAKE -f - am--depfiles" >&5
+ (cd "$am_dirpart" \
+ && sed -e '/# am--include-marker/d' "$am_filepart" \
+ | $MAKE -f - am--depfiles) >&5 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } || am_rc=$?
done
+ if test $am_rc -ne 0; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "Something went wrong bootstrapping makefile fragments
+ for automatic dependency tracking. If GNU make was not used, consider
+ re-running the configure script with MAKE=\"gmake\" (or whatever is
+ necessary). You can also try re-running configure with the
+ '--disable-dependency-tracking' option to at least be able to build
+ the package (albeit without support for automatic dependency tracking).
+See \`config.log' for more details" "$LINENO" 5; }
+ fi
+ { am_dirpart=; unset am_dirpart;}
+ { am_filepart=; unset am_filepart;}
+ { am_mf=; unset am_mf;}
+ { am_rc=; unset am_rc;}
+ rm -f conftest-deps.mk
}
;;
"libtool":C)
diff --git a/zlib/contrib/README.contrib b/zlib/contrib/README.contrib
index a411d5c396b..335e43508be 100644
--- a/zlib/contrib/README.contrib
+++ b/zlib/contrib/README.contrib
@@ -8,14 +8,6 @@ ada/ by Dmitriy Anisimkov <anisimkov@yahoo.com>
Support for Ada
See http://zlib-ada.sourceforge.net/
-amd64/ by Mikhail Teterin <mi@ALDAN.algebra.com>
- asm code for AMD64
- See patch at http://www.freebsd.org/cgi/query-pr.cgi?pr=bin/96393
-
-asm686/ by Brian Raiter <breadbox@muppetlabs.com>
- asm code for Pentium and PPro/PII, using the AT&T (GNU as) syntax
- See http://www.muppetlabs.com/~breadbox/software/assembly.html
-
blast/ by Mark Adler <madler@alumni.caltech.edu>
Decompressor for output of PKWare Data Compression Library (DCL)
@@ -32,9 +24,6 @@ gcc_gvmat64/by Gilles Vollant <info@winimage.com>
infback9/ by Mark Adler <madler@alumni.caltech.edu>
Unsupported diffs to infback to decode the deflate64 format
-inflate86/ by Chris Anderson <christop@charm.net>
- Tuned x86 gcc asm code to replace inflate_fast()
-
iostream/ by Kevin Ruland <kevin@rodin.wustl.edu>
A C++ I/O streams interface to the zlib gz* functions
@@ -45,16 +34,6 @@ iostream3/ by Ludwig Schwardt <schwardt@sun.ac.za>
and Kevin Ruland <kevin@rodin.wustl.edu>
Yet another C++ I/O streams interface
-masmx64/ by Gilles Vollant <info@winimage.com>
- x86 64-bit (AMD64 and Intel EM64t) code for x64 assembler to
- replace longest_match() and inflate_fast(), also masm x86
- 64-bits translation of Chris Anderson inflate_fast()
-
-masmx86/ by Gilles Vollant <info@winimage.com>
- x86 asm code to replace longest_match() and inflate_fast(),
- for Visual C++ and MASM (32 bits).
- Based on Brian Raiter (asm686) and Chris Anderson (inflate86)
-
minizip/ by Gilles Vollant <info@winimage.com>
Mini zip and unzip based on zlib
Includes Zip64 support by Mathias Svensson <mathias@result42.com>
diff --git a/zlib/contrib/blast/blast.h b/zlib/contrib/blast/blast.h
index 6cf65eda16e..ef8544c53b6 100644
--- a/zlib/contrib/blast/blast.h
+++ b/zlib/contrib/blast/blast.h
@@ -57,7 +57,7 @@ int blast(blast_in infun, void *inhow, blast_out outfun, void *outhow,
* use by the application to pass an input descriptor to infun(), if desired.
*
* If left and in are not NULL and *left is not zero when blast() is called,
- * then the *left bytes are *in are consumed for input before infun() is used.
+ * then the *left bytes at *in are consumed for input before infun() is used.
*
* The output function is invoked: err = outfun(how, buf, len), where the bytes
* to be written are buf[0..len-1]. If err is not zero, then blast() returns
diff --git a/zlib/contrib/delphi/ZLib.pas b/zlib/contrib/delphi/ZLib.pas
index 060e1991186..d40dad8a11d 100644
--- a/zlib/contrib/delphi/ZLib.pas
+++ b/zlib/contrib/delphi/ZLib.pas
@@ -152,7 +152,7 @@ procedure DecompressToUserBuf(const InBuf: Pointer; InBytes: Integer;
const OutBuf: Pointer; BufSize: Integer);
const
- zlib_version = '1.2.11';
+ zlib_version = '1.2.12';
type
EZlibError = class(Exception);
diff --git a/zlib/contrib/dotzlib/DotZLib.chm b/zlib/contrib/dotzlib/DotZLib.chm
index 0bc7df76e40..f214a444aeb 100644
--- a/zlib/contrib/dotzlib/DotZLib.chm
+++ b/zlib/contrib/dotzlib/DotZLib.chm
Binary files differ
diff --git a/zlib/contrib/dotzlib/DotZLib/UnitTests.cs b/zlib/contrib/dotzlib/DotZLib/UnitTests.cs
index 44f76332ba0..865c80200a5 100644
--- a/zlib/contrib/dotzlib/DotZLib/UnitTests.cs
+++ b/zlib/contrib/dotzlib/DotZLib/UnitTests.cs
@@ -156,7 +156,7 @@ namespace DotZLibTests
public void Info_Version()
{
Info info = new Info();
- Assert.AreEqual("1.2.11", Info.Version);
+ Assert.AreEqual("1.2.12", Info.Version);
Assert.AreEqual(32, info.SizeOfUInt);
Assert.AreEqual(32, info.SizeOfULong);
Assert.AreEqual(32, info.SizeOfPointer);
diff --git a/zlib/contrib/infback9/inftree9.c b/zlib/contrib/infback9/inftree9.c
index 5f4a76798d8..05506066ce0 100644
--- a/zlib/contrib/infback9/inftree9.c
+++ b/zlib/contrib/infback9/inftree9.c
@@ -1,5 +1,5 @@
/* inftree9.c -- generate Huffman trees for efficient decoding
- * Copyright (C) 1995-2017 Mark Adler
+ * Copyright (C) 1995-2022 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -9,7 +9,7 @@
#define MAXBITS 15
const char inflate9_copyright[] =
- " inflate9 1.2.11 Copyright 1995-2017 Mark Adler ";
+ " inflate9 1.2.12 Copyright 1995-2022 Mark Adler ";
/*
If you use the zlib library in a product, an acknowledgment is welcome
in the documentation of your product. If for some reason you cannot
@@ -64,7 +64,7 @@ unsigned short FAR *work;
static const unsigned short lext[31] = { /* Length codes 257..285 extra */
128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129,
130, 130, 130, 130, 131, 131, 131, 131, 132, 132, 132, 132,
- 133, 133, 133, 133, 144, 77, 202};
+ 133, 133, 133, 133, 144, 199, 202};
static const unsigned short dbase[32] = { /* Distance codes 0..31 base */
1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49,
65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073,
diff --git a/zlib/contrib/iostream2/zstream.h b/zlib/contrib/iostream2/zstream.h
index be7829ba3dc..43d2332b79b 100644
--- a/zlib/contrib/iostream2/zstream.h
+++ b/zlib/contrib/iostream2/zstream.h
@@ -21,7 +21,7 @@
/*
* zstream.h - C++ interface to the 'zlib' general purpose compression library
- * $Id: zstream.h,v 1.1 1999/05/04 19:30:27 tromey Exp $
+ * $Id: zstream.h 1.1 1997-06-25 12:00:56+02 tyge Exp tyge $
*/
#include <strstream.h>
diff --git a/zlib/contrib/minizip/Makefile b/zlib/contrib/minizip/Makefile
index 84eaad20d4f..aac76e07f6b 100644
--- a/zlib/contrib/minizip/Makefile
+++ b/zlib/contrib/minizip/Makefile
@@ -1,5 +1,5 @@
CC=cc
-CFLAGS=-O -I../..
+CFLAGS := $(CFLAGS) -O -I../..
UNZ_OBJS = miniunz.o unzip.o ioapi.o ../../libz.a
ZIP_OBJS = minizip.o zip.o ioapi.o ../../libz.a
@@ -16,10 +16,14 @@ minizip: $(ZIP_OBJS)
$(CC) $(CFLAGS) -o $@ $(ZIP_OBJS)
test: miniunz minizip
- ./minizip test readme.txt
+ @rm -f test.*
+ @echo hello hello hello > test.txt
+ ./minizip test test.txt
./miniunz -l test.zip
- mv readme.txt readme.old
+ @mv test.txt test.old
./miniunz test.zip
+ @cmp test.txt test.old
+ @rm -f test.*
clean:
- /bin/rm -f *.o *~ minizip miniunz
+ /bin/rm -f *.o *~ minizip miniunz test.*
diff --git a/zlib/contrib/minizip/configure.ac b/zlib/contrib/minizip/configure.ac
index 5b11970977f..6409abc8933 100644
--- a/zlib/contrib/minizip/configure.ac
+++ b/zlib/contrib/minizip/configure.ac
@@ -1,7 +1,7 @@
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
-AC_INIT([minizip], [1.2.11], [bugzilla.redhat.com])
+AC_INIT([minizip], [1.2.12], [bugzilla.redhat.com])
AC_CONFIG_SRCDIR([minizip.c])
AM_INIT_AUTOMAKE([foreign])
LT_INIT
diff --git a/zlib/contrib/minizip/crypt.h b/zlib/contrib/minizip/crypt.h
index 1e9e8200b20..9da15373d8b 100644
--- a/zlib/contrib/minizip/crypt.h
+++ b/zlib/contrib/minizip/crypt.h
@@ -38,6 +38,7 @@ static int decrypt_byte(unsigned long* pkeys, const z_crc_t* pcrc_32_tab)
* unpredictable manner on 16-bit systems; not a problem
* with any known compiler so far, though */
+ (void)pcrc_32_tab;
temp = ((unsigned)(*(pkeys+2)) & 0xffff) | 2;
return (int)(((temp * (temp ^ 1)) >> 8) & 0xff);
}
@@ -77,24 +78,24 @@ static void init_keys(const char* passwd,unsigned long* pkeys,const z_crc_t* pcr
(update_keys(pkeys,pcrc_32_tab,c ^= decrypt_byte(pkeys,pcrc_32_tab)))
#define zencode(pkeys,pcrc_32_tab,c,t) \
- (t=decrypt_byte(pkeys,pcrc_32_tab), update_keys(pkeys,pcrc_32_tab,c), t^(c))
+ (t=decrypt_byte(pkeys,pcrc_32_tab), update_keys(pkeys,pcrc_32_tab,c), (Byte)t^(c))
#ifdef INCLUDECRYPTINGCODE_IFCRYPTALLOWED
#define RAND_HEAD_LEN 12
/* "last resort" source for second part of crypt seed pattern */
# ifndef ZCR_SEED2
-# define ZCR_SEED2 3141592654UL /* use PI as default pattern */
+# define ZCR_SEED2 3141592654L /* use PI as default pattern */
# endif
-static int crypthead(const char* passwd, /* password string */
- unsigned char* buf, /* where to write header */
- int bufSize,
- unsigned long* pkeys,
- const z_crc_t* pcrc_32_tab,
- unsigned long crcForCrypting)
+static unsigned crypthead(const char* passwd, /* password string */
+ unsigned char* buf, /* where to write header */
+ int bufSize,
+ unsigned long* pkeys,
+ const z_crc_t* pcrc_32_tab,
+ unsigned long crcForCrypting)
{
- int n; /* index in random header */
+ unsigned n; /* index in random header */
int t; /* temporary */
int c; /* random byte */
unsigned char header[RAND_HEAD_LEN-2]; /* random header */
diff --git a/zlib/contrib/minizip/ioapi.c b/zlib/contrib/minizip/ioapi.c
index 7f5c191b2af..d666e5a2289 100644
--- a/zlib/contrib/minizip/ioapi.c
+++ b/zlib/contrib/minizip/ioapi.c
@@ -58,7 +58,7 @@ ZPOS64_T call_ztell64 (const zlib_filefunc64_32_def* pfilefunc,voidpf filestream
return (*(pfilefunc->zfile_func64.ztell64_file)) (pfilefunc->zfile_func64.opaque,filestream);
else
{
- uLong tell_uLong = (*(pfilefunc->ztell32_file))(pfilefunc->zfile_func64.opaque,filestream);
+ uLong tell_uLong = (uLong)(*(pfilefunc->ztell32_file))(pfilefunc->zfile_func64.opaque,filestream);
if ((tell_uLong) == MAXU32)
return (ZPOS64_T)-1;
else
@@ -94,6 +94,7 @@ static int ZCALLBACK ferror_file_func OF((voidpf opaque, voidpf stream));
static voidpf ZCALLBACK fopen_file_func (voidpf opaque, const char* filename, int mode)
{
+ (void)opaque;
FILE* file = NULL;
const char* mode_fopen = NULL;
if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ)
@@ -112,6 +113,7 @@ static voidpf ZCALLBACK fopen_file_func (voidpf opaque, const char* filename, in
static voidpf ZCALLBACK fopen64_file_func (voidpf opaque, const void* filename, int mode)
{
+ (void)opaque;
FILE* file = NULL;
const char* mode_fopen = NULL;
if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ)
@@ -131,6 +133,7 @@ static voidpf ZCALLBACK fopen64_file_func (voidpf opaque, const void* filename,
static uLong ZCALLBACK fread_file_func (voidpf opaque, voidpf stream, void* buf, uLong size)
{
+ (void)opaque;
uLong ret;
ret = (uLong)fread(buf, 1, (size_t)size, (FILE *)stream);
return ret;
@@ -138,6 +141,7 @@ static uLong ZCALLBACK fread_file_func (voidpf opaque, voidpf stream, void* buf,
static uLong ZCALLBACK fwrite_file_func (voidpf opaque, voidpf stream, const void* buf, uLong size)
{
+ (void)opaque;
uLong ret;
ret = (uLong)fwrite(buf, 1, (size_t)size, (FILE *)stream);
return ret;
@@ -145,6 +149,7 @@ static uLong ZCALLBACK fwrite_file_func (voidpf opaque, voidpf stream, const voi
static long ZCALLBACK ftell_file_func (voidpf opaque, voidpf stream)
{
+ (void)opaque;
long ret;
ret = ftell((FILE *)stream);
return ret;
@@ -153,13 +158,15 @@ static long ZCALLBACK ftell_file_func (voidpf opaque, voidpf stream)
static ZPOS64_T ZCALLBACK ftell64_file_func (voidpf opaque, voidpf stream)
{
+ (void)opaque;
ZPOS64_T ret;
- ret = FTELLO_FUNC((FILE *)stream);
+ ret = (ZPOS64_T)FTELLO_FUNC((FILE *)stream);
return ret;
}
static long ZCALLBACK fseek_file_func (voidpf opaque, voidpf stream, uLong offset, int origin)
{
+ (void)opaque;
int fseek_origin=0;
long ret;
switch (origin)
@@ -176,13 +183,14 @@ static long ZCALLBACK fseek_file_func (voidpf opaque, voidpf stream, uLong offs
default: return -1;
}
ret = 0;
- if (fseek((FILE *)stream, offset, fseek_origin) != 0)
+ if (fseek((FILE *)stream, (long)offset, fseek_origin) != 0)
ret = -1;
return ret;
}
static long ZCALLBACK fseek64_file_func (voidpf opaque, voidpf stream, ZPOS64_T offset, int origin)
{
+ (void)opaque;
int fseek_origin=0;
long ret;
switch (origin)
@@ -200,7 +208,7 @@ static long ZCALLBACK fseek64_file_func (voidpf opaque, voidpf stream, ZPOS64_T
}
ret = 0;
- if(FSEEKO_FUNC((FILE *)stream, offset, fseek_origin) != 0)
+ if(FSEEKO_FUNC((FILE *)stream, (long)offset, fseek_origin) != 0)
ret = -1;
return ret;
@@ -209,6 +217,7 @@ static long ZCALLBACK fseek64_file_func (voidpf opaque, voidpf stream, ZPOS64_T
static int ZCALLBACK fclose_file_func (voidpf opaque, voidpf stream)
{
+ (void)opaque;
int ret;
ret = fclose((FILE *)stream);
return ret;
@@ -216,6 +225,7 @@ static int ZCALLBACK fclose_file_func (voidpf opaque, voidpf stream)
static int ZCALLBACK ferror_file_func (voidpf opaque, voidpf stream)
{
+ (void)opaque;
int ret;
ret = ferror((FILE *)stream);
return ret;
diff --git a/zlib/contrib/minizip/ioapi.h b/zlib/contrib/minizip/ioapi.h
index 8dcbdb06e35..114bfab762f 100644
--- a/zlib/contrib/minizip/ioapi.h
+++ b/zlib/contrib/minizip/ioapi.h
@@ -91,8 +91,7 @@ typedef 64BIT_INT_CUSTOM_TYPE ZPOS64_T;
typedef uint64_t ZPOS64_T;
#else
-/* Maximum unsigned 32-bit value used as placeholder for zip64 */
-#define MAXU32 0xffffffff
+
#if defined(_MSC_VER) || defined(__BORLANDC__)
typedef unsigned __int64 ZPOS64_T;
@@ -102,7 +101,10 @@ typedef unsigned long long int ZPOS64_T;
#endif
#endif
-
+/* Maximum unsigned 32-bit value used as placeholder for zip64 */
+#ifndef MAXU32
+#define MAXU32 (0xffffffff)
+#endif
#ifdef __cplusplus
extern "C" {
diff --git a/zlib/contrib/minizip/miniunz.c b/zlib/contrib/minizip/miniunz.c
index 3d65401be5c..f103815efb3 100644
--- a/zlib/contrib/minizip/miniunz.c
+++ b/zlib/contrib/minizip/miniunz.c
@@ -45,6 +45,7 @@
#include <time.h>
#include <errno.h>
#include <fcntl.h>
+#include <sys/stat.h>
#ifdef _WIN32
# include <direct.h>
@@ -80,7 +81,7 @@
filename : the filename of the file where date/time must be modified
dosdate : the new date at the MSDos format (4 bytes)
tmu_date : the SAME new date at the tm_unz format */
-void change_file_date(filename,dosdate,tmu_date)
+static void change_file_date(filename,dosdate,tmu_date)
const char *filename;
uLong dosdate;
tm_unz tmu_date;
@@ -97,7 +98,8 @@ void change_file_date(filename,dosdate,tmu_date)
SetFileTime(hFile,&ftm,&ftLastAcc,&ftm);
CloseHandle(hFile);
#else
-#ifdef unix || __APPLE__
+#if defined(unix) || defined(__APPLE__)
+ (void)dosdate;
struct utimbuf ut;
struct tm newdate;
newdate.tm_sec = tmu_date.tm_sec;
@@ -121,7 +123,7 @@ void change_file_date(filename,dosdate,tmu_date)
/* mymkdir and change_file_date are not 100 % portable
As I don't know well Unix, I wait feedback for the unix portion */
-int mymkdir(dirname)
+static int mymkdir(dirname)
const char* dirname;
{
int ret=0;
@@ -135,14 +137,14 @@ int mymkdir(dirname)
return ret;
}
-int makedir (newdir)
- char *newdir;
+static int makedir (newdir)
+ const char *newdir;
{
char *buffer ;
char *p;
- int len = (int)strlen(newdir);
+ size_t len = strlen(newdir);
- if (len <= 0)
+ if (len == 0)
return 0;
buffer = (char*)malloc(len+1);
@@ -185,13 +187,13 @@ int makedir (newdir)
return 1;
}
-void do_banner()
+static void do_banner()
{
printf("MiniUnz 1.01b, demo of zLib + Unz package written by Gilles Vollant\n");
printf("more info at http://www.winimage.com/zLibDll/unzip.html\n\n");
}
-void do_help()
+static void do_help()
{
printf("Usage : miniunz [-e] [-x] [-v] [-l] [-o] [-p password] file.zip [file_to_extr.] [-d extractdir]\n\n" \
" -e Extract without pathname (junk paths)\n" \
@@ -203,7 +205,7 @@ void do_help()
" -p extract crypted file using password\n\n");
}
-void Display64BitsSize(ZPOS64_T n, int size_char)
+static void Display64BitsSize(ZPOS64_T n, int size_char)
{
/* to avoid compatibility problem , we do here the conversion */
char number[21];
@@ -231,7 +233,7 @@ void Display64BitsSize(ZPOS64_T n, int size_char)
printf("%s",&number[pos_string]);
}
-int do_list(uf)
+static int do_list(uf)
unzFile uf;
{
uLong i;
@@ -309,7 +311,7 @@ int do_list(uf)
}
-int do_extract_currentfile(uf,popt_extract_without_path,popt_overwrite,password)
+static int do_extract_currentfile(uf,popt_extract_without_path,popt_overwrite,password)
unzFile uf;
const int* popt_extract_without_path;
int* popt_overwrite;
@@ -324,7 +326,6 @@ int do_extract_currentfile(uf,popt_extract_without_path,popt_overwrite,password)
uInt size_buf;
unz_file_info64 file_info;
- uLong ratio=0;
err = unzGetCurrentFileInfo64(uf,&file_info,filename_inzip,sizeof(filename_inzip),NULL,0,NULL,0);
if (err!=UNZ_OK)
@@ -439,7 +440,7 @@ int do_extract_currentfile(uf,popt_extract_without_path,popt_overwrite,password)
break;
}
if (err>0)
- if (fwrite(buf,err,1,fout)!=1)
+ if (fwrite(buf,(unsigned)err,1,fout)!=1)
{
printf("error in writing extracted file\n");
err=UNZ_ERRNO;
@@ -472,7 +473,7 @@ int do_extract_currentfile(uf,popt_extract_without_path,popt_overwrite,password)
}
-int do_extract(uf,opt_extract_without_path,opt_overwrite,password)
+static int do_extract(uf,opt_extract_without_path,opt_overwrite,password)
unzFile uf;
int opt_extract_without_path;
int opt_overwrite;
@@ -481,7 +482,6 @@ int do_extract(uf,opt_extract_without_path,opt_overwrite,password)
uLong i;
unz_global_info64 gi;
int err;
- FILE* fout=NULL;
err = unzGetGlobalInfo64(uf,&gi);
if (err!=UNZ_OK)
@@ -508,14 +508,13 @@ int do_extract(uf,opt_extract_without_path,opt_overwrite,password)
return 0;
}
-int do_extract_onefile(uf,filename,opt_extract_without_path,opt_overwrite,password)
+static int do_extract_onefile(uf,filename,opt_extract_without_path,opt_overwrite,password)
unzFile uf;
const char* filename;
int opt_extract_without_path;
int opt_overwrite;
const char* password;
{
- int err = UNZ_OK;
if (unzLocateFile(uf,filename,CASESENSITIVITY)!=UNZ_OK)
{
printf("file %s not found in the zipfile\n",filename);
diff --git a/zlib/contrib/minizip/minizip.c b/zlib/contrib/minizip/minizip.c
index 4288962ecef..7f937aa5b2a 100644
--- a/zlib/contrib/minizip/minizip.c
+++ b/zlib/contrib/minizip/minizip.c
@@ -71,8 +71,8 @@
#define MAXFILENAME (256)
#ifdef _WIN32
-uLong filetime(f, tmzip, dt)
- char *f; /* name of file to get info on */
+static int filetime(f, tmzip, dt)
+ const char *f; /* name of file to get info on */
tm_zip *tmzip; /* return value: access, modific. and creation times */
uLong *dt; /* dostime */
{
@@ -94,12 +94,13 @@ uLong filetime(f, tmzip, dt)
return ret;
}
#else
-#ifdef unix || __APPLE__
-uLong filetime(f, tmzip, dt)
- char *f; /* name of file to get info on */
+#if defined(unix) || defined(__APPLE__)
+static int filetime(f, tmzip, dt)
+ const char *f; /* name of file to get info on */
tm_zip *tmzip; /* return value: access, modific. and creation times */
uLong *dt; /* dostime */
{
+ (void)dt;
int ret=0;
struct stat s; /* results of stat() */
struct tm* filedate;
@@ -108,7 +109,7 @@ uLong filetime(f, tmzip, dt)
if (strcmp(f,"-")!=0)
{
char name[MAXFILENAME+1];
- int len = strlen(f);
+ size_t len = strlen(f);
if (len > MAXFILENAME)
len = MAXFILENAME;
@@ -138,7 +139,7 @@ uLong filetime(f, tmzip, dt)
}
#else
uLong filetime(f, tmzip, dt)
- char *f; /* name of file to get info on */
+ const char *f; /* name of file to get info on */
tm_zip *tmzip; /* return value: access, modific. and creation times */
uLong *dt; /* dostime */
{
@@ -150,7 +151,7 @@ uLong filetime(f, tmzip, dt)
-int check_exist_file(filename)
+static int check_exist_file(filename)
const char* filename;
{
FILE* ftestexist;
@@ -163,13 +164,13 @@ int check_exist_file(filename)
return ret;
}
-void do_banner()
+static void do_banner()
{
printf("MiniZip 1.1, demo of zLib + MiniZip64 package, written by Gilles Vollant\n");
printf("more info on MiniZip at http://www.winimage.com/zLibDll/minizip.html\n\n");
}
-void do_help()
+static void do_help()
{
printf("Usage : minizip [-o] [-a] [-0 to -9] [-p password] [-j] file.zip [files_to_add]\n\n" \
" -o Overwrite existing file.zip\n" \
@@ -182,7 +183,7 @@ void do_help()
/* calculate the CRC32 of a file,
because to encrypt a file, we need known the CRC32 of the file before */
-int getFileCrc(const char* filenameinzip,void*buf,unsigned long size_buf,unsigned long* result_crc)
+static int getFileCrc(const char* filenameinzip,void*buf,unsigned long size_buf,unsigned long* result_crc)
{
unsigned long calculate_crc=0;
int err=ZIP_OK;
@@ -199,7 +200,7 @@ int getFileCrc(const char* filenameinzip,void*buf,unsigned long size_buf,unsigne
do
{
err = ZIP_OK;
- size_read = (int)fread(buf,1,size_buf,fin);
+ size_read = fread(buf,1,size_buf,fin);
if (size_read < size_buf)
if (feof(fin)==0)
{
@@ -208,7 +209,7 @@ int getFileCrc(const char* filenameinzip,void*buf,unsigned long size_buf,unsigne
}
if (size_read>0)
- calculate_crc = crc32(calculate_crc,buf,size_read);
+ calculate_crc = crc32_z(calculate_crc,buf,size_read);
total_read += size_read;
} while ((err == ZIP_OK) && (size_read>0));
@@ -221,7 +222,7 @@ int getFileCrc(const char* filenameinzip,void*buf,unsigned long size_buf,unsigne
return err;
}
-int isLargeFile(const char* filename)
+static int isLargeFile(const char* filename)
{
int largeFile = 0;
ZPOS64_T pos = 0;
@@ -229,8 +230,8 @@ int isLargeFile(const char* filename)
if(pFile != NULL)
{
- int n = FSEEKO_FUNC(pFile, 0, SEEK_END);
- pos = FTELLO_FUNC(pFile);
+ FSEEKO_FUNC(pFile, 0, SEEK_END);
+ pos = (ZPOS64_T)FTELLO_FUNC(pFile);
printf("File : %s is %lld bytes\n", filename, pos);
@@ -255,7 +256,7 @@ int main(argc,argv)
char filename_try[MAXFILENAME+16];
int zipok;
int err=0;
- int size_buf=0;
+ size_t size_buf=0;
void* buf=NULL;
const char* password=NULL;
@@ -396,7 +397,7 @@ int main(argc,argv)
(strlen(argv[i]) == 2)))
{
FILE * fin;
- int size_read;
+ size_t size_read;
const char* filenameinzip = argv[i];
const char *savefilenameinzip;
zip_fileinfo zi;
@@ -472,7 +473,7 @@ int main(argc,argv)
do
{
err = ZIP_OK;
- size_read = (int)fread(buf,1,size_buf,fin);
+ size_read = fread(buf,1,size_buf,fin);
if (size_read < size_buf)
if (feof(fin)==0)
{
@@ -482,7 +483,7 @@ int main(argc,argv)
if (size_read>0)
{
- err = zipWriteInFileInZip (zf,buf,size_read);
+ err = zipWriteInFileInZip (zf,buf,(unsigned)size_read);
if (err<0)
{
printf("error in writing %s in the zipfile\n",
diff --git a/zlib/contrib/minizip/unzip.c b/zlib/contrib/minizip/unzip.c
index bcfb9416ec3..5e12e474740 100644
--- a/zlib/contrib/minizip/unzip.c
+++ b/zlib/contrib/minizip/unzip.c
@@ -455,7 +455,7 @@ local ZPOS64_T unz64local_SearchCentralDir(const zlib_filefunc64_32_def* pzlib_f
if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) &&
((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06))
{
- uPosFound = uReadPos+i;
+ uPosFound = uReadPos+(unsigned)i;
break;
}
@@ -523,7 +523,7 @@ local ZPOS64_T unz64local_SearchCentralDir64(const zlib_filefunc64_32_def* pzlib
if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) &&
((*(buf+i+2))==0x06) && ((*(buf+i+3))==0x07))
{
- uPosFound = uReadPos+i;
+ uPosFound = uReadPos+(unsigned)i;
break;
}
@@ -853,13 +853,13 @@ local void unz64local_DosDateToTmuDate (ZPOS64_T ulDosDate, tm_unz* ptm)
{
ZPOS64_T uDate;
uDate = (ZPOS64_T)(ulDosDate>>16);
- ptm->tm_mday = (uInt)(uDate&0x1f) ;
- ptm->tm_mon = (uInt)((((uDate)&0x1E0)/0x20)-1) ;
- ptm->tm_year = (uInt)(((uDate&0x0FE00)/0x0200)+1980) ;
+ ptm->tm_mday = (int)(uDate&0x1f) ;
+ ptm->tm_mon = (int)((((uDate)&0x1E0)/0x20)-1) ;
+ ptm->tm_year = (int)(((uDate&0x0FE00)/0x0200)+1980) ;
- ptm->tm_hour = (uInt) ((ulDosDate &0xF800)/0x800);
- ptm->tm_min = (uInt) ((ulDosDate&0x7E0)/0x20) ;
- ptm->tm_sec = (uInt) (2*(ulDosDate&0x1f)) ;
+ ptm->tm_hour = (int) ((ulDosDate &0xF800)/0x800);
+ ptm->tm_min = (int) ((ulDosDate&0x7E0)/0x20) ;
+ ptm->tm_sec = (int) (2*(ulDosDate&0x1f)) ;
}
/*
@@ -993,7 +993,7 @@ local int unz64local_GetCurrentFileInfoInternal (unzFile file,
if (lSeek!=0)
{
- if (ZSEEK64(s->z_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0)
+ if (ZSEEK64(s->z_filefunc, s->filestream,(ZPOS64_T)lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0)
lSeek=0;
else
err=UNZ_ERRNO;
@@ -1018,7 +1018,7 @@ local int unz64local_GetCurrentFileInfoInternal (unzFile file,
if (lSeek!=0)
{
- if (ZSEEK64(s->z_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0)
+ if (ZSEEK64(s->z_filefunc, s->filestream,(ZPOS64_T)lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0)
lSeek=0;
else
err=UNZ_ERRNO;
@@ -1090,7 +1090,7 @@ local int unz64local_GetCurrentFileInfoInternal (unzFile file,
if (lSeek!=0)
{
- if (ZSEEK64(s->z_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0)
+ if (ZSEEK64(s->z_filefunc, s->filestream,(ZPOS64_T)lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0)
lSeek=0;
else
err=UNZ_ERRNO;
@@ -1767,7 +1767,7 @@ extern int ZEXPORT unzReadCurrentFile (unzFile file, voidp buf, unsigned len)
if ((pfile_in_zip_read_info->stream.avail_in == 0) &&
(pfile_in_zip_read_info->rest_read_compressed == 0))
- return (iRead==0) ? UNZ_EOF : iRead;
+ return (iRead==0) ? UNZ_EOF : (int)iRead;
if (pfile_in_zip_read_info->stream.avail_out <
pfile_in_zip_read_info->stream.avail_in)
@@ -1857,6 +1857,9 @@ extern int ZEXPORT unzReadCurrentFile (unzFile file, voidp buf, unsigned len)
err = Z_DATA_ERROR;
uTotalOutAfter = pfile_in_zip_read_info->stream.total_out;
+ /* Detect overflow, because z_stream.total_out is uLong (32 bits) */
+ if (uTotalOutAfter<uTotalOutBefore)
+ uTotalOutAfter += 1LL << 32; /* Add maximum value of uLong + 1 */
uOutThis = uTotalOutAfter-uTotalOutBefore;
pfile_in_zip_read_info->total_out_64 = pfile_in_zip_read_info->total_out_64 + uOutThis;
@@ -1871,14 +1874,14 @@ extern int ZEXPORT unzReadCurrentFile (unzFile file, voidp buf, unsigned len)
iRead += (uInt)(uTotalOutAfter - uTotalOutBefore);
if (err==Z_STREAM_END)
- return (iRead==0) ? UNZ_EOF : iRead;
+ return (iRead==0) ? UNZ_EOF : (int)iRead;
if (err!=Z_OK)
break;
}
}
if (err==Z_OK)
- return iRead;
+ return (int)iRead;
return err;
}
diff --git a/zlib/contrib/minizip/unzip.h b/zlib/contrib/minizip/unzip.h
index 2104e391507..6f95e94d756 100644
--- a/zlib/contrib/minizip/unzip.h
+++ b/zlib/contrib/minizip/unzip.h
@@ -83,12 +83,12 @@ typedef voidp unzFile;
/* tm_unz contain date/time info */
typedef struct tm_unz_s
{
- uInt tm_sec; /* seconds after the minute - [0,59] */
- uInt tm_min; /* minutes after the hour - [0,59] */
- uInt tm_hour; /* hours since midnight - [0,23] */
- uInt tm_mday; /* day of the month - [1,31] */
- uInt tm_mon; /* months since January - [0,11] */
- uInt tm_year; /* years - [1980..2044] */
+ int tm_sec; /* seconds after the minute - [0,59] */
+ int tm_min; /* minutes after the hour - [0,59] */
+ int tm_hour; /* hours since midnight - [0,23] */
+ int tm_mday; /* day of the month - [1,31] */
+ int tm_mon; /* months since January - [0,11] */
+ int tm_year; /* years - [1980..2044] */
} tm_unz;
/* unz_global_info structure contain global data about the ZIPfile
diff --git a/zlib/contrib/minizip/zip.c b/zlib/contrib/minizip/zip.c
index 44e88a9cb98..4e611e11630 100644
--- a/zlib/contrib/minizip/zip.c
+++ b/zlib/contrib/minizip/zip.c
@@ -158,7 +158,7 @@ typedef struct
#ifndef NOCRYPT
unsigned long keys[3]; /* keys defining the pseudo-random sequence */
const z_crc_t* pcrc_32_tab;
- int crypt_header_size;
+ unsigned crypt_header_size;
#endif
} curfile64_info;
@@ -301,7 +301,7 @@ local int zip64local_putValue (const zlib_filefunc64_32_def* pzlib_filefunc_def,
}
}
- if (ZWRITE64(*pzlib_filefunc_def,filestream,buf,nbByte)!=(uLong)nbByte)
+ if (ZWRITE64(*pzlib_filefunc_def,filestream,buf,(uLong)nbByte)!=(uLong)nbByte)
return ZIP_ERRNO;
else
return ZIP_OK;
@@ -337,8 +337,8 @@ local uLong zip64local_TmzDateToDosDate(const tm_zip* ptm)
else if (year>=80)
year-=80;
return
- (uLong) (((ptm->tm_mday) + (32 * (ptm->tm_mon+1)) + (512 * year)) << 16) |
- ((ptm->tm_sec/2) + (32* ptm->tm_min) + (2048 * (uLong)ptm->tm_hour));
+ (uLong) (((uLong)(ptm->tm_mday) + (32 * (uLong)(ptm->tm_mon+1)) + (512 * year)) << 16) |
+ (((uLong)ptm->tm_sec/2) + (32 * (uLong)ptm->tm_min) + (2048 * (uLong)ptm->tm_hour));
}
@@ -522,12 +522,12 @@ local ZPOS64_T zip64local_SearchCentralDir(const zlib_filefunc64_32_def* pzlib_f
if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) &&
((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06))
{
- uPosFound = uReadPos+i;
+ uPosFound = uReadPos+(unsigned)i;
break;
}
- if (uPosFound!=0)
- break;
+ if (uPosFound!=0)
+ break;
}
TRYFREE(buf);
return uPosFound;
@@ -586,7 +586,7 @@ local ZPOS64_T zip64local_SearchCentralDir64(const zlib_filefunc64_32_def* pzlib
// Signature "0x07064b50" Zip64 end of central directory locater
if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) && ((*(buf+i+2))==0x06) && ((*(buf+i+3))==0x07))
{
- uPosFound = uReadPos+i;
+ uPosFound = uReadPos+(unsigned)i;
break;
}
}
@@ -637,7 +637,7 @@ local ZPOS64_T zip64local_SearchCentralDir64(const zlib_filefunc64_32_def* pzlib
return relativeOffset;
}
-int LoadCentralDirectoryRecord(zip64_internal* pziinit)
+local int LoadCentralDirectoryRecord(zip64_internal* pziinit)
{
int err=ZIP_OK;
ZPOS64_T byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/
@@ -955,7 +955,7 @@ extern zipFile ZEXPORT zipOpen64 (const void* pathname, int append)
return zipOpen3(pathname,append,NULL,NULL);
}
-int Write_LocalFileHeader(zip64_internal* zi, const char* filename, uInt size_extrafield_local, const void* extrafield_local)
+local int Write_LocalFileHeader(zip64_internal* zi, const char* filename, uInt size_extrafield_local, const void* extrafield_local)
{
/* write the local header */
int err;
@@ -1034,8 +1034,8 @@ int Write_LocalFileHeader(zip64_internal* zi, const char* filename, uInt size_ex
// Remember position of Zip64 extended info for the local file header. (needed when we update size after done with file)
zi->ci.pos_zip64extrainfo = ZTELL64(zi->z_filefunc,zi->filestream);
- err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (short)HeaderID,2);
- err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (short)DataSize,2);
+ err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (ZPOS64_T)HeaderID,2);
+ err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (ZPOS64_T)DataSize,2);
err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (ZPOS64_T)UncompressedSize,8);
err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (ZPOS64_T)CompressedSize,8);
@@ -1516,7 +1516,7 @@ extern int ZEXPORT zipCloseFileInZipRaw64 (zipFile file, ZPOS64_T uncompressed_s
zip64_internal* zi;
ZPOS64_T compressed_size;
uLong invalidValue = 0xffffffff;
- short datasize = 0;
+ unsigned datasize = 0;
int err=ZIP_OK;
if (file == NULL)
@@ -1752,7 +1752,7 @@ extern int ZEXPORT zipCloseFileInZip (zipFile file)
return zipCloseFileInZipRaw (file,0,0);
}
-int Write_Zip64EndOfCentralDirectoryLocator(zip64_internal* zi, ZPOS64_T zip64eocd_pos_inzip)
+local int Write_Zip64EndOfCentralDirectoryLocator(zip64_internal* zi, ZPOS64_T zip64eocd_pos_inzip)
{
int err = ZIP_OK;
ZPOS64_T pos = zip64eocd_pos_inzip - zi->add_position_when_writing_offset;
@@ -1774,7 +1774,7 @@ int Write_Zip64EndOfCentralDirectoryLocator(zip64_internal* zi, ZPOS64_T zip64eo
return err;
}
-int Write_Zip64EndOfCentralDirectoryRecord(zip64_internal* zi, uLong size_centraldir, ZPOS64_T centraldir_pos_inzip)
+local int Write_Zip64EndOfCentralDirectoryRecord(zip64_internal* zi, uLong size_centraldir, ZPOS64_T centraldir_pos_inzip)
{
int err = ZIP_OK;
@@ -1813,7 +1813,7 @@ int Write_Zip64EndOfCentralDirectoryRecord(zip64_internal* zi, uLong size_centra
}
return err;
}
-int Write_EndOfCentralDirectoryRecord(zip64_internal* zi, uLong size_centraldir, ZPOS64_T centraldir_pos_inzip)
+local int Write_EndOfCentralDirectoryRecord(zip64_internal* zi, uLong size_centraldir, ZPOS64_T centraldir_pos_inzip)
{
int err = ZIP_OK;
@@ -1861,7 +1861,7 @@ int Write_EndOfCentralDirectoryRecord(zip64_internal* zi, uLong size_centraldir,
return err;
}
-int Write_GlobalComment(zip64_internal* zi, const char* global_comment)
+local int Write_GlobalComment(zip64_internal* zi, const char* global_comment)
{
int err = ZIP_OK;
uInt size_global_comment = 0;
@@ -1962,7 +1962,7 @@ extern int ZEXPORT zipRemoveExtraInfoBlock (char* pData, int* dataLen, short sHe
if(pData == NULL || *dataLen < 4)
return ZIP_PARAMERROR;
- pNewHeader = (char*)ALLOC(*dataLen);
+ pNewHeader = (char*)ALLOC((unsigned)*dataLen);
pTmp = pNewHeader;
while(p < (pData + *dataLen))
diff --git a/zlib/contrib/minizip/zip.h b/zlib/contrib/minizip/zip.h
index 8aaebb62343..7e4509d77be 100644
--- a/zlib/contrib/minizip/zip.h
+++ b/zlib/contrib/minizip/zip.h
@@ -88,12 +88,12 @@ typedef voidp zipFile;
/* tm_zip contain date/time info */
typedef struct tm_zip_s
{
- uInt tm_sec; /* seconds after the minute - [0,59] */
- uInt tm_min; /* minutes after the hour - [0,59] */
- uInt tm_hour; /* hours since midnight - [0,23] */
- uInt tm_mday; /* day of the month - [1,31] */
- uInt tm_mon; /* months since January - [0,11] */
- uInt tm_year; /* years - [1980..2044] */
+ int tm_sec; /* seconds after the minute - [0,59] */
+ int tm_min; /* minutes after the hour - [0,59] */
+ int tm_hour; /* hours since midnight - [0,23] */
+ int tm_mday; /* day of the month - [1,31] */
+ int tm_mon; /* months since January - [0,11] */
+ int tm_year; /* years - [1980..2044] */
} tm_zip;
typedef struct
@@ -144,6 +144,11 @@ extern zipFile ZEXPORT zipOpen2_64 OF((const void *pathname,
zipcharpc* globalcomment,
zlib_filefunc64_def* pzlib_filefunc_def));
+extern zipFile ZEXPORT zipOpen3 OF((const void *pathname,
+ int append,
+ zipcharpc* globalcomment,
+ zlib_filefunc64_32_def* pzlib_filefunc64_32_def));
+
extern int ZEXPORT zipOpenNewFileInZip OF((zipFile file,
const char* filename,
const zip_fileinfo* zipfi,
diff --git a/zlib/contrib/pascal/zlibpas.pas b/zlib/contrib/pascal/zlibpas.pas
index a0dff11b505..adb5cd60b01 100644
--- a/zlib/contrib/pascal/zlibpas.pas
+++ b/zlib/contrib/pascal/zlibpas.pas
@@ -10,7 +10,7 @@ unit zlibpas;
interface
const
- ZLIB_VERSION = '1.2.11';
+ ZLIB_VERSION = '1.2.12';
ZLIB_VERNUM = $12a0;
type
diff --git a/zlib/contrib/puff/zeros.raw b/zlib/contrib/puff/zeros.raw
index 637b7be6f5b..0a90e76b300 100644
--- a/zlib/contrib/puff/zeros.raw
+++ b/zlib/contrib/puff/zeros.raw
Binary files differ
diff --git a/zlib/contrib/vstudio/readme.txt b/zlib/contrib/vstudio/readme.txt
index f67eae8678a..d396d4309f3 100644
--- a/zlib/contrib/vstudio/readme.txt
+++ b/zlib/contrib/vstudio/readme.txt
@@ -1,4 +1,4 @@
-Building instructions for the DLL versions of Zlib 1.2.11
+Building instructions for the DLL versions of Zlib 1.2.12
========================================================
This directory contains projects that build zlib and minizip using
diff --git a/zlib/contrib/vstudio/vc10/zlib.rc b/zlib/contrib/vstudio/vc10/zlib.rc
index fee177a71cb..8ad25f1031a 100644
--- a/zlib/contrib/vstudio/vc10/zlib.rc
+++ b/zlib/contrib/vstudio/vc10/zlib.rc
@@ -2,8 +2,8 @@
#define IDR_VERSION1 1
IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE
- FILEVERSION 1, 2, 11, 0
- PRODUCTVERSION 1, 2, 11, 0
+ FILEVERSION 1, 2, 12, 0
+ PRODUCTVERSION 1, 2, 12, 0
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
FILEFLAGS 0
FILEOS VOS_DOS_WINDOWS32
@@ -17,12 +17,12 @@ BEGIN
BEGIN
VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0"
- VALUE "FileVersion", "1.2.11\0"
+ VALUE "FileVersion", "1.2.12\0"
VALUE "InternalName", "zlib\0"
VALUE "OriginalFilename", "zlibwapi.dll\0"
VALUE "ProductName", "ZLib.DLL\0"
VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0"
- VALUE "LegalCopyright", "(C) 1995-2017 Jean-loup Gailly & Mark Adler\0"
+ VALUE "LegalCopyright", "(C) 1995-2022 Jean-loup Gailly & Mark Adler\0"
END
END
BLOCK "VarFileInfo"
diff --git a/zlib/contrib/vstudio/vc10/zlibvc.def b/zlib/contrib/vstudio/vc10/zlibvc.def
index 54e683d99c3..ba09bc1b98f 100644
--- a/zlib/contrib/vstudio/vc10/zlibvc.def
+++ b/zlib/contrib/vstudio/vc10/zlibvc.def
@@ -151,3 +151,8 @@ EXPORTS
deflateGetDictionary @173
adler32_z @174
crc32_z @175
+
+; zlib1 v1.2.12 added:
+ crc32_combine_gen @176
+ crc32_combine_gen64 @177
+ crc32_combine_op @178
diff --git a/zlib/contrib/vstudio/vc11/zlib.rc b/zlib/contrib/vstudio/vc11/zlib.rc
index fee177a71cb..8ad25f1031a 100644
--- a/zlib/contrib/vstudio/vc11/zlib.rc
+++ b/zlib/contrib/vstudio/vc11/zlib.rc
@@ -2,8 +2,8 @@
#define IDR_VERSION1 1
IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE
- FILEVERSION 1, 2, 11, 0
- PRODUCTVERSION 1, 2, 11, 0
+ FILEVERSION 1, 2, 12, 0
+ PRODUCTVERSION 1, 2, 12, 0
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
FILEFLAGS 0
FILEOS VOS_DOS_WINDOWS32
@@ -17,12 +17,12 @@ BEGIN
BEGIN
VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0"
- VALUE "FileVersion", "1.2.11\0"
+ VALUE "FileVersion", "1.2.12\0"
VALUE "InternalName", "zlib\0"
VALUE "OriginalFilename", "zlibwapi.dll\0"
VALUE "ProductName", "ZLib.DLL\0"
VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0"
- VALUE "LegalCopyright", "(C) 1995-2017 Jean-loup Gailly & Mark Adler\0"
+ VALUE "LegalCopyright", "(C) 1995-2022 Jean-loup Gailly & Mark Adler\0"
END
END
BLOCK "VarFileInfo"
diff --git a/zlib/contrib/vstudio/vc11/zlibvc.def b/zlib/contrib/vstudio/vc11/zlibvc.def
index 54e683d99c3..ba09bc1b98f 100644
--- a/zlib/contrib/vstudio/vc11/zlibvc.def
+++ b/zlib/contrib/vstudio/vc11/zlibvc.def
@@ -151,3 +151,8 @@ EXPORTS
deflateGetDictionary @173
adler32_z @174
crc32_z @175
+
+; zlib1 v1.2.12 added:
+ crc32_combine_gen @176
+ crc32_combine_gen64 @177
+ crc32_combine_op @178
diff --git a/zlib/contrib/vstudio/vc12/zlib.rc b/zlib/contrib/vstudio/vc12/zlib.rc
index c4e4b016e9c..94758735069 100644
--- a/zlib/contrib/vstudio/vc12/zlib.rc
+++ b/zlib/contrib/vstudio/vc12/zlib.rc
@@ -2,8 +2,8 @@
#define IDR_VERSION1 1
IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE
- FILEVERSION 1, 2, 11, 0
- PRODUCTVERSION 1, 2, 11, 0
+ FILEVERSION 1, 2, 12, 0
+ PRODUCTVERSION 1, 2, 12, 0
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
FILEFLAGS 0
FILEOS VOS_DOS_WINDOWS32
@@ -17,12 +17,12 @@ BEGIN
BEGIN
VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0"
- VALUE "FileVersion", "1.2.11\0"
+ VALUE "FileVersion", "1.2.12\0"
VALUE "InternalName", "zlib\0"
VALUE "OriginalFilename", "zlibwapi.dll\0"
VALUE "ProductName", "ZLib.DLL\0"
VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0"
- VALUE "LegalCopyright", "(C) 1995-2017 Jean-loup Gailly & Mark Adler\0"
+ VALUE "LegalCopyright", "(C) 1995-2022 Jean-loup Gailly & Mark Adler\0"
END
END
BLOCK "VarFileInfo"
diff --git a/zlib/contrib/vstudio/vc12/zlibvc.def b/zlib/contrib/vstudio/vc12/zlibvc.def
index 54e683d99c3..ba09bc1b98f 100644
--- a/zlib/contrib/vstudio/vc12/zlibvc.def
+++ b/zlib/contrib/vstudio/vc12/zlibvc.def
@@ -151,3 +151,8 @@ EXPORTS
deflateGetDictionary @173
adler32_z @174
crc32_z @175
+
+; zlib1 v1.2.12 added:
+ crc32_combine_gen @176
+ crc32_combine_gen64 @177
+ crc32_combine_op @178
diff --git a/zlib/contrib/vstudio/vc14/zlib.rc b/zlib/contrib/vstudio/vc14/zlib.rc
index c4e4b016e9c..94758735069 100644
--- a/zlib/contrib/vstudio/vc14/zlib.rc
+++ b/zlib/contrib/vstudio/vc14/zlib.rc
@@ -2,8 +2,8 @@
#define IDR_VERSION1 1
IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE
- FILEVERSION 1, 2, 11, 0
- PRODUCTVERSION 1, 2, 11, 0
+ FILEVERSION 1, 2, 12, 0
+ PRODUCTVERSION 1, 2, 12, 0
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
FILEFLAGS 0
FILEOS VOS_DOS_WINDOWS32
@@ -17,12 +17,12 @@ BEGIN
BEGIN
VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0"
- VALUE "FileVersion", "1.2.11\0"
+ VALUE "FileVersion", "1.2.12\0"
VALUE "InternalName", "zlib\0"
VALUE "OriginalFilename", "zlibwapi.dll\0"
VALUE "ProductName", "ZLib.DLL\0"
VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0"
- VALUE "LegalCopyright", "(C) 1995-2017 Jean-loup Gailly & Mark Adler\0"
+ VALUE "LegalCopyright", "(C) 1995-2022 Jean-loup Gailly & Mark Adler\0"
END
END
BLOCK "VarFileInfo"
diff --git a/zlib/contrib/vstudio/vc14/zlibvc.def b/zlib/contrib/vstudio/vc14/zlibvc.def
index 54e683d99c3..ba09bc1b98f 100644
--- a/zlib/contrib/vstudio/vc14/zlibvc.def
+++ b/zlib/contrib/vstudio/vc14/zlibvc.def
@@ -151,3 +151,8 @@ EXPORTS
deflateGetDictionary @173
adler32_z @174
crc32_z @175
+
+; zlib1 v1.2.12 added:
+ crc32_combine_gen @176
+ crc32_combine_gen64 @177
+ crc32_combine_op @178
diff --git a/zlib/contrib/vstudio/vc9/zlib.rc b/zlib/contrib/vstudio/vc9/zlib.rc
index fee177a71cb..8ad25f1031a 100644
--- a/zlib/contrib/vstudio/vc9/zlib.rc
+++ b/zlib/contrib/vstudio/vc9/zlib.rc
@@ -2,8 +2,8 @@
#define IDR_VERSION1 1
IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE
- FILEVERSION 1, 2, 11, 0
- PRODUCTVERSION 1, 2, 11, 0
+ FILEVERSION 1, 2, 12, 0
+ PRODUCTVERSION 1, 2, 12, 0
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
FILEFLAGS 0
FILEOS VOS_DOS_WINDOWS32
@@ -17,12 +17,12 @@ BEGIN
BEGIN
VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0"
- VALUE "FileVersion", "1.2.11\0"
+ VALUE "FileVersion", "1.2.12\0"
VALUE "InternalName", "zlib\0"
VALUE "OriginalFilename", "zlibwapi.dll\0"
VALUE "ProductName", "ZLib.DLL\0"
VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0"
- VALUE "LegalCopyright", "(C) 1995-2017 Jean-loup Gailly & Mark Adler\0"
+ VALUE "LegalCopyright", "(C) 1995-2022 Jean-loup Gailly & Mark Adler\0"
END
END
BLOCK "VarFileInfo"
diff --git a/zlib/contrib/vstudio/vc9/zlibvc.def b/zlib/contrib/vstudio/vc9/zlibvc.def
index 54e683d99c3..ba09bc1b98f 100644
--- a/zlib/contrib/vstudio/vc9/zlibvc.def
+++ b/zlib/contrib/vstudio/vc9/zlibvc.def
@@ -151,3 +151,8 @@ EXPORTS
deflateGetDictionary @173
adler32_z @174
crc32_z @175
+
+; zlib1 v1.2.12 added:
+ crc32_combine_gen @176
+ crc32_combine_gen64 @177
+ crc32_combine_op @178
diff --git a/zlib/crc32.c b/zlib/crc32.c
index affcd464ed3..a1bdce5c23c 100644
--- a/zlib/crc32.c
+++ b/zlib/crc32.c
@@ -1,24 +1,23 @@
/* crc32.c -- compute the CRC-32 of a data stream
- * Copyright (C) 1995-2006, 2010, 2011, 2012, 2016 Mark Adler
+ * Copyright (C) 1995-2022 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*
- * Thanks to Rodney Brown <rbrown64@csc.com.au> for his contribution of faster
- * CRC methods: exclusive-oring 32 bits of data at a time, and pre-computing
- * tables for updating the shift register in one step with three exclusive-ors
- * instead of four steps with four exclusive-ors. This results in about a
- * factor of two increase in speed on a Power PC G4 (PPC7455) using gcc -O3.
+ * This interleaved implementation of a CRC makes use of pipelined multiple
+ * arithmetic-logic units, commonly found in modern CPU cores. It is due to
+ * Kadatch and Jenkins (2010). See doc/crc-doc.1.0.pdf in this distribution.
*/
-/* @(#) $Id: crc32.c,v 1.1.1.2 2002/03/11 21:53:23 tromey Exp $ */
+/* @(#) $Id$ */
/*
Note on the use of DYNAMIC_CRC_TABLE: there is no mutex or semaphore
protection on the static variables used to control the first-use generation
- of the crc tables. Therefore, if you #define DYNAMIC_CRC_TABLE, you should
+ of the crc tables. Therefore, if you #define DYNAMIC_CRC_TABLE, you should
first call get_crc_table() to initialize the tables before allowing more than
one thread to use crc32().
- DYNAMIC_CRC_TABLE and MAKECRCH can be #defined to write out crc32.h.
+ MAKECRCH can be #defined to write out crc32.h. A main() routine is also
+ produced, so that this one source file can be compiled to an executable.
*/
#ifdef MAKECRCH
@@ -28,415 +27,1090 @@
# endif /* !DYNAMIC_CRC_TABLE */
#endif /* MAKECRCH */
-#include "zutil.h" /* for STDC and FAR definitions */
+#include "zutil.h" /* for Z_U4, Z_U8, z_crc_t, and FAR definitions */
-/* Definitions for doing the crc four data bytes at a time. */
-#if !defined(NOBYFOUR) && defined(Z_U4)
-# define BYFOUR
+ /*
+ A CRC of a message is computed on N braids of words in the message, where
+ each word consists of W bytes (4 or 8). If N is 3, for example, then three
+ running sparse CRCs are calculated respectively on each braid, at these
+ indices in the array of words: 0, 3, 6, ..., 1, 4, 7, ..., and 2, 5, 8, ...
+ This is done starting at a word boundary, and continues until as many blocks
+ of N * W bytes as are available have been processed. The results are combined
+ into a single CRC at the end. For this code, N must be in the range 1..6 and
+ W must be 4 or 8. The upper limit on N can be increased if desired by adding
+ more #if blocks, extending the patterns apparent in the code. In addition,
+ crc32.h would need to be regenerated, if the maximum N value is increased.
+
+ N and W are chosen empirically by benchmarking the execution time on a given
+ processor. The choices for N and W below were based on testing on Intel Kaby
+ Lake i7, AMD Ryzen 7, ARM Cortex-A57, Sparc64-VII, PowerPC POWER9, and MIPS64
+ Octeon II processors. The Intel, AMD, and ARM processors were all fastest
+ with N=5, W=8. The Sparc, PowerPC, and MIPS64 were all fastest at N=5, W=4.
+ They were all tested with either gcc or clang, all using the -O3 optimization
+ level. Your mileage may vary.
+ */
+
+/* Define N */
+#ifdef Z_TESTN
+# define N Z_TESTN
+#else
+# define N 5
+#endif
+#if N < 1 || N > 6
+# error N must be in 1..6
#endif
-#ifdef BYFOUR
- local unsigned long crc32_little OF((unsigned long,
- const unsigned char FAR *, z_size_t));
- local unsigned long crc32_big OF((unsigned long,
- const unsigned char FAR *, z_size_t));
-# define TBLS 8
+
+/*
+ z_crc_t must be at least 32 bits. z_word_t must be at least as long as
+ z_crc_t. It is assumed here that z_word_t is either 32 bits or 64 bits, and
+ that bytes are eight bits.
+ */
+
+/*
+ Define W and the associated z_word_t type. If W is not defined, then a
+ braided calculation is not used, and the associated tables and code are not
+ compiled.
+ */
+#ifdef Z_TESTW
+# if Z_TESTW-1 != -1
+# define W Z_TESTW
+# endif
#else
-# define TBLS 1
-#endif /* BYFOUR */
+# ifdef MAKECRCH
+# define W 8 /* required for MAKECRCH */
+# else
+# if defined(__x86_64__) || defined(__aarch64__)
+# define W 8
+# else
+# define W 4
+# endif
+# endif
+#endif
+#ifdef W
+# if W == 8 && defined(Z_U8)
+ typedef Z_U8 z_word_t;
+# elif defined(Z_U4)
+# undef W
+# define W 4
+ typedef Z_U4 z_word_t;
+# else
+# undef W
+# endif
+#endif
-/* Local functions for crc concatenation */
-local unsigned long gf2_matrix_times OF((unsigned long *mat,
- unsigned long vec));
-local void gf2_matrix_square OF((unsigned long *square, unsigned long *mat));
-local uLong crc32_combine_ OF((uLong crc1, uLong crc2, z_off64_t len2));
+/* Local functions. */
+local z_crc_t multmodp OF((z_crc_t a, z_crc_t b));
+local z_crc_t x2nmodp OF((z_off64_t n, unsigned k));
+/* If available, use the ARM processor CRC32 instruction. */
+#if defined(__aarch64__) && defined(__ARM_FEATURE_CRC32) && W == 8
+# define ARMCRC32
+#endif
+
+#if defined(W) && (!defined(ARMCRC32) || defined(DYNAMIC_CRC_TABLE))
+/*
+ Swap the bytes in a z_word_t to convert between little and big endian. Any
+ self-respecting compiler will optimize this to a single machine byte-swap
+ instruction, if one is available. This assumes that word_t is either 32 bits
+ or 64 bits.
+ */
+local z_word_t byte_swap(word)
+ z_word_t word;
+{
+# if W == 8
+ return
+ (word & 0xff00000000000000) >> 56 |
+ (word & 0xff000000000000) >> 40 |
+ (word & 0xff0000000000) >> 24 |
+ (word & 0xff00000000) >> 8 |
+ (word & 0xff000000) << 8 |
+ (word & 0xff0000) << 24 |
+ (word & 0xff00) << 40 |
+ (word & 0xff) << 56;
+# else /* W == 4 */
+ return
+ (word & 0xff000000) >> 24 |
+ (word & 0xff0000) >> 8 |
+ (word & 0xff00) << 8 |
+ (word & 0xff) << 24;
+# endif
+}
+#endif
+
+/* CRC polynomial. */
+#define POLY 0xedb88320 /* p(x) reflected, with x^32 implied */
#ifdef DYNAMIC_CRC_TABLE
-local volatile int crc_table_empty = 1;
-local z_crc_t FAR crc_table[TBLS][256];
+local z_crc_t FAR crc_table[256];
+local z_crc_t FAR x2n_table[32];
local void make_crc_table OF((void));
+#ifdef W
+ local z_word_t FAR crc_big_table[256];
+ local z_crc_t FAR crc_braid_table[W][256];
+ local z_word_t FAR crc_braid_big_table[W][256];
+ local void braid OF((z_crc_t [][256], z_word_t [][256], int, int));
+#endif
#ifdef MAKECRCH
- local void write_table OF((FILE *, const z_crc_t FAR *));
+ local void write_table OF((FILE *, const z_crc_t FAR *, int));
+ local void write_table32hi OF((FILE *, const z_word_t FAR *, int));
+ local void write_table64 OF((FILE *, const z_word_t FAR *, int));
#endif /* MAKECRCH */
+
+/*
+ Define a once() function depending on the availability of atomics. If this is
+ compiled with DYNAMIC_CRC_TABLE defined, and if CRCs will be computed in
+ multiple threads, and if atomics are not available, then get_crc_table() must
+ be called to initialize the tables and must return before any threads are
+ allowed to compute or combine CRCs.
+ */
+
+/* Definition of once functionality. */
+typedef struct once_s once_t;
+local void once OF((once_t *, void (*)(void)));
+
+/* Check for the availability of atomics. */
+#if defined(__STDC__) && __STDC_VERSION__ >= 201112L && \
+ !defined(__STDC_NO_ATOMICS__)
+
+#include <stdatomic.h>
+
+/* Structure for once(), which must be initialized with ONCE_INIT. */
+struct once_s {
+ atomic_flag begun;
+ atomic_int done;
+};
+#define ONCE_INIT {ATOMIC_FLAG_INIT, 0}
+
+/*
+ Run the provided init() function exactly once, even if multiple threads
+ invoke once() at the same time. The state must be a once_t initialized with
+ ONCE_INIT.
+ */
+local void once(state, init)
+ once_t *state;
+ void (*init)(void);
+{
+ if (!atomic_load(&state->done)) {
+ if (atomic_flag_test_and_set(&state->begun))
+ while (!atomic_load(&state->done))
+ ;
+ else {
+ init();
+ atomic_store(&state->done, 1);
+ }
+ }
+}
+
+#else /* no atomics */
+
+/* Structure for once(), which must be initialized with ONCE_INIT. */
+struct once_s {
+ volatile int begun;
+ volatile int done;
+};
+#define ONCE_INIT {0, 0}
+
+/* Test and set. Alas, not atomic, but tries to minimize the period of
+ vulnerability. */
+local int test_and_set OF((int volatile *));
+local int test_and_set(flag)
+ int volatile *flag;
+{
+ int was;
+
+ was = *flag;
+ *flag = 1;
+ return was;
+}
+
+/* Run the provided init() function once. This is not thread-safe. */
+local void once(state, init)
+ once_t *state;
+ void (*init)(void);
+{
+ if (!state->done) {
+ if (test_and_set(&state->begun))
+ while (!state->done)
+ ;
+ else {
+ init();
+ state->done = 1;
+ }
+ }
+}
+
+#endif
+
+/* State for once(). */
+local once_t made = ONCE_INIT;
+
/*
Generate tables for a byte-wise 32-bit CRC calculation on the polynomial:
x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1.
Polynomials over GF(2) are represented in binary, one bit per coefficient,
- with the lowest powers in the most significant bit. Then adding polynomials
+ with the lowest powers in the most significant bit. Then adding polynomials
is just exclusive-or, and multiplying a polynomial by x is a right shift by
- one. If we call the above polynomial p, and represent a byte as the
+ one. If we call the above polynomial p, and represent a byte as the
polynomial q, also with the lowest power in the most significant bit (so the
- byte 0xb1 is the polynomial x^7+x^3+x+1), then the CRC is (q*x^32) mod p,
+ byte 0xb1 is the polynomial x^7+x^3+x^2+1), then the CRC is (q*x^32) mod p,
where a mod b means the remainder after dividing a by b.
This calculation is done using the shift-register method of multiplying and
- taking the remainder. The register is initialized to zero, and for each
+ taking the remainder. The register is initialized to zero, and for each
incoming bit, x^32 is added mod p to the register if the bit is a one (where
- x^32 mod p is p+x^32 = x^26+...+1), and the register is multiplied mod p by
- x (which is shifting right by one and adding x^32 mod p if the bit shifted
- out is a one). We start with the highest power (least significant bit) of
- q and repeat for all eight bits of q.
-
- The first table is simply the CRC of all possible eight bit values. This is
- all the information needed to generate CRCs on data a byte at a time for all
- combinations of CRC register values and incoming bytes. The remaining tables
- allow for word-at-a-time CRC calculation for both big-endian and little-
- endian machines, where a word is four bytes.
-*/
+ x^32 mod p is p+x^32 = x^26+...+1), and the register is multiplied mod p by x
+ (which is shifting right by one and adding x^32 mod p if the bit shifted out
+ is a one). We start with the highest power (least significant bit) of q and
+ repeat for all eight bits of q.
+
+ The table is simply the CRC of all possible eight bit values. This is all the
+ information needed to generate CRCs on data a byte at a time for all
+ combinations of CRC register values and incoming bytes.
+ */
+
local void make_crc_table()
{
- z_crc_t c;
- int n, k;
- z_crc_t poly; /* polynomial exclusive-or pattern */
- /* terms of polynomial defining this crc (except x^32): */
- static volatile int first = 1; /* flag to limit concurrent making */
- static const unsigned char p[] = {0,1,2,4,5,7,8,10,11,12,16,22,23,26};
-
- /* See if another task is already doing this (not thread-safe, but better
- than nothing -- significantly reduces duration of vulnerability in
- case the advice about DYNAMIC_CRC_TABLE is ignored) */
- if (first) {
- first = 0;
-
- /* make exclusive-or pattern from polynomial (0xedb88320UL) */
- poly = 0;
- for (n = 0; n < (int)(sizeof(p)/sizeof(unsigned char)); n++)
- poly |= (z_crc_t)1 << (31 - p[n]);
-
- /* generate a crc for every 8-bit value */
- for (n = 0; n < 256; n++) {
- c = (z_crc_t)n;
- for (k = 0; k < 8; k++)
- c = c & 1 ? poly ^ (c >> 1) : c >> 1;
- crc_table[0][n] = c;
- }
+ unsigned i, j, n;
+ z_crc_t p;
-#ifdef BYFOUR
- /* generate crc for each value followed by one, two, and three zeros,
- and then the byte reversal of those as well as the first table */
- for (n = 0; n < 256; n++) {
- c = crc_table[0][n];
- crc_table[4][n] = ZSWAP32(c);
- for (k = 1; k < 4; k++) {
- c = crc_table[0][c & 0xff] ^ (c >> 8);
- crc_table[k][n] = c;
- crc_table[k + 4][n] = ZSWAP32(c);
- }
- }
-#endif /* BYFOUR */
-
- crc_table_empty = 0;
- }
- else { /* not first */
- /* wait for the other guy to finish (not efficient, but rare) */
- while (crc_table_empty)
- ;
+ /* initialize the CRC of bytes tables */
+ for (i = 0; i < 256; i++) {
+ p = i;
+ for (j = 0; j < 8; j++)
+ p = p & 1 ? (p >> 1) ^ POLY : p >> 1;
+ crc_table[i] = p;
+#ifdef W
+ crc_big_table[i] = byte_swap(p);
+#endif
}
+ /* initialize the x^2^n mod p(x) table */
+ p = (z_crc_t)1 << 30; /* x^1 */
+ x2n_table[0] = p;
+ for (n = 1; n < 32; n++)
+ x2n_table[n] = p = multmodp(p, p);
+
+#ifdef W
+ /* initialize the braiding tables -- needs x2n_table[] */
+ braid(crc_braid_table, crc_braid_big_table, N, W);
+#endif
+
#ifdef MAKECRCH
- /* write out CRC tables to crc32.h */
{
+ /*
+ The crc32.h header file contains tables for both 32-bit and 64-bit
+ z_word_t's, and so requires a 64-bit type be available. In that case,
+ z_word_t must be defined to be 64-bits. This code then also generates
+ and writes out the tables for the case that z_word_t is 32 bits.
+ */
+#if !defined(W) || W != 8
+# error Need a 64-bit integer type in order to generate crc32.h.
+#endif
FILE *out;
+ int k, n;
+ z_crc_t ltl[8][256];
+ z_word_t big[8][256];
out = fopen("crc32.h", "w");
if (out == NULL) return;
- fprintf(out, "/* crc32.h -- tables for rapid CRC calculation\n");
- fprintf(out, " * Generated automatically by crc32.c\n */\n\n");
- fprintf(out, "local const z_crc_t FAR ");
- fprintf(out, "crc_table[TBLS][256] =\n{\n {\n");
- write_table(out, crc_table[0]);
-# ifdef BYFOUR
- fprintf(out, "#ifdef BYFOUR\n");
- for (k = 1; k < 8; k++) {
- fprintf(out, " },\n {\n");
- write_table(out, crc_table[k]);
+
+ /* write out little-endian CRC table to crc32.h */
+ fprintf(out,
+ "/* crc32.h -- tables for rapid CRC calculation\n"
+ " * Generated automatically by crc32.c\n */\n"
+ "\n"
+ "local const z_crc_t FAR crc_table[] = {\n"
+ " ");
+ write_table(out, crc_table, 256);
+ fprintf(out,
+ "};\n");
+
+ /* write out big-endian CRC table for 64-bit z_word_t to crc32.h */
+ fprintf(out,
+ "\n"
+ "#ifdef W\n"
+ "\n"
+ "#if W == 8\n"
+ "\n"
+ "local const z_word_t FAR crc_big_table[] = {\n"
+ " ");
+ write_table64(out, crc_big_table, 256);
+ fprintf(out,
+ "};\n");
+
+ /* write out big-endian CRC table for 32-bit z_word_t to crc32.h */
+ fprintf(out,
+ "\n"
+ "#else /* W == 4 */\n"
+ "\n"
+ "local const z_word_t FAR crc_big_table[] = {\n"
+ " ");
+ write_table32hi(out, crc_big_table, 256);
+ fprintf(out,
+ "};\n"
+ "\n"
+ "#endif\n");
+
+ /* write out braid tables for each value of N */
+ for (n = 1; n <= 6; n++) {
+ fprintf(out,
+ "\n"
+ "#if N == %d\n", n);
+
+ /* compute braid tables for this N and 64-bit word_t */
+ braid(ltl, big, n, 8);
+
+ /* write out braid tables for 64-bit z_word_t to crc32.h */
+ fprintf(out,
+ "\n"
+ "#if W == 8\n"
+ "\n"
+ "local const z_crc_t FAR crc_braid_table[][256] = {\n");
+ for (k = 0; k < 8; k++) {
+ fprintf(out, " {");
+ write_table(out, ltl[k], 256);
+ fprintf(out, "}%s", k < 7 ? ",\n" : "");
+ }
+ fprintf(out,
+ "};\n"
+ "\n"
+ "local const z_word_t FAR crc_braid_big_table[][256] = {\n");
+ for (k = 0; k < 8; k++) {
+ fprintf(out, " {");
+ write_table64(out, big[k], 256);
+ fprintf(out, "}%s", k < 7 ? ",\n" : "");
+ }
+ fprintf(out,
+ "};\n");
+
+ /* compute braid tables for this N and 32-bit word_t */
+ braid(ltl, big, n, 4);
+
+ /* write out braid tables for 32-bit z_word_t to crc32.h */
+ fprintf(out,
+ "\n"
+ "#else /* W == 4 */\n"
+ "\n"
+ "local const z_crc_t FAR crc_braid_table[][256] = {\n");
+ for (k = 0; k < 4; k++) {
+ fprintf(out, " {");
+ write_table(out, ltl[k], 256);
+ fprintf(out, "}%s", k < 3 ? ",\n" : "");
+ }
+ fprintf(out,
+ "};\n"
+ "\n"
+ "local const z_word_t FAR crc_braid_big_table[][256] = {\n");
+ for (k = 0; k < 4; k++) {
+ fprintf(out, " {");
+ write_table32hi(out, big[k], 256);
+ fprintf(out, "}%s", k < 3 ? ",\n" : "");
+ }
+ fprintf(out,
+ "};\n"
+ "\n"
+ "#endif\n"
+ "\n"
+ "#endif\n");
}
- fprintf(out, "#endif\n");
-# endif /* BYFOUR */
- fprintf(out, " }\n};\n");
+ fprintf(out,
+ "\n"
+ "#endif\n");
+
+ /* write out zeros operator table to crc32.h */
+ fprintf(out,
+ "\n"
+ "local const z_crc_t FAR x2n_table[] = {\n"
+ " ");
+ write_table(out, x2n_table, 32);
+ fprintf(out,
+ "};\n");
fclose(out);
}
#endif /* MAKECRCH */
}
#ifdef MAKECRCH
-local void write_table(out, table)
+
+/*
+ Write the 32-bit values in table[0..k-1] to out, five per line in
+ hexadecimal separated by commas.
+ */
+local void write_table(out, table, k)
FILE *out;
const z_crc_t FAR *table;
+ int k;
{
int n;
- for (n = 0; n < 256; n++)
- fprintf(out, "%s0x%08lxUL%s", n % 5 ? "" : " ",
+ for (n = 0; n < k; n++)
+ fprintf(out, "%s0x%08lx%s", n == 0 || n % 5 ? "" : " ",
(unsigned long)(table[n]),
- n == 255 ? "\n" : (n % 5 == 4 ? ",\n" : ", "));
+ n == k - 1 ? "" : (n % 5 == 4 ? ",\n" : ", "));
}
+
+/*
+ Write the high 32-bits of each value in table[0..k-1] to out, five per line
+ in hexadecimal separated by commas.
+ */
+local void write_table32hi(out, table, k)
+FILE *out;
+const z_word_t FAR *table;
+int k;
+{
+ int n;
+
+ for (n = 0; n < k; n++)
+ fprintf(out, "%s0x%08lx%s", n == 0 || n % 5 ? "" : " ",
+ (unsigned long)(table[n] >> 32),
+ n == k - 1 ? "" : (n % 5 == 4 ? ",\n" : ", "));
+}
+
+/*
+ Write the 64-bit values in table[0..k-1] to out, three per line in
+ hexadecimal separated by commas. This assumes that if there is a 64-bit
+ type, then there is also a long long integer type, and it is at least 64
+ bits. If not, then the type cast and format string can be adjusted
+ accordingly.
+ */
+local void write_table64(out, table, k)
+ FILE *out;
+ const z_word_t FAR *table;
+ int k;
+{
+ int n;
+
+ for (n = 0; n < k; n++)
+ fprintf(out, "%s0x%016llx%s", n == 0 || n % 3 ? "" : " ",
+ (unsigned long long)(table[n]),
+ n == k - 1 ? "" : (n % 3 == 2 ? ",\n" : ", "));
+}
+
+/* Actually do the deed. */
+int main()
+{
+ make_crc_table();
+ return 0;
+}
+
#endif /* MAKECRCH */
+#ifdef W
+/*
+ Generate the little and big-endian braid tables for the given n and z_word_t
+ size w. Each array must have room for w blocks of 256 elements.
+ */
+local void braid(ltl, big, n, w)
+ z_crc_t ltl[][256];
+ z_word_t big[][256];
+ int n;
+ int w;
+{
+ int k;
+ z_crc_t i, p, q;
+ for (k = 0; k < w; k++) {
+ p = x2nmodp((n * w + 3 - k) << 3, 0);
+ ltl[k][0] = 0;
+ big[w - 1 - k][0] = 0;
+ for (i = 1; i < 256; i++) {
+ ltl[k][i] = q = multmodp(i << 24, p);
+ big[w - 1 - k][i] = byte_swap(q);
+ }
+ }
+}
+#endif
+
#else /* !DYNAMIC_CRC_TABLE */
/* ========================================================================
- * Tables of CRC-32s of all single-byte values, made by make_crc_table().
+ * Tables for byte-wise and braided CRC-32 calculations, and a table of powers
+ * of x for combining CRC-32s, all made by make_crc_table().
*/
#include "crc32.h"
#endif /* DYNAMIC_CRC_TABLE */
+/* ========================================================================
+ * Routines used for CRC calculation. Some are also required for the table
+ * generation above.
+ */
+
+/*
+ Return a(x) multiplied by b(x) modulo p(x), where p(x) is the CRC polynomial,
+ reflected. For speed, this requires that a not be zero.
+ */
+local z_crc_t multmodp(a, b)
+ z_crc_t a;
+ z_crc_t b;
+{
+ z_crc_t m, p;
+
+ m = (z_crc_t)1 << 31;
+ p = 0;
+ for (;;) {
+ if (a & m) {
+ p ^= b;
+ if ((a & (m - 1)) == 0)
+ break;
+ }
+ m >>= 1;
+ b = b & 1 ? (b >> 1) ^ POLY : b >> 1;
+ }
+ return p;
+}
+
+/*
+ Return x^(n * 2^k) modulo p(x). Requires that x2n_table[] has been
+ initialized.
+ */
+local z_crc_t x2nmodp(n, k)
+ z_off64_t n;
+ unsigned k;
+{
+ z_crc_t p;
+
+ p = (z_crc_t)1 << 31; /* x^0 == 1 */
+ while (n) {
+ if (n & 1)
+ p = multmodp(x2n_table[k & 31], p);
+ n >>= 1;
+ k++;
+ }
+ return p;
+}
+
/* =========================================================================
- * This function can be used by asm versions of crc32()
+ * This function can be used by asm versions of crc32(), and to force the
+ * generation of the CRC tables in a threaded application.
*/
const z_crc_t FAR * ZEXPORT get_crc_table()
{
#ifdef DYNAMIC_CRC_TABLE
- if (crc_table_empty)
- make_crc_table();
+ once(&made, make_crc_table);
#endif /* DYNAMIC_CRC_TABLE */
return (const z_crc_t FAR *)crc_table;
}
-/* ========================================================================= */
-#define DO1 crc = crc_table[0][((int)crc ^ (*buf++)) & 0xff] ^ (crc >> 8)
-#define DO8 DO1; DO1; DO1; DO1; DO1; DO1; DO1; DO1
+/* =========================================================================
+ * Use ARM machine instructions if available. This will compute the CRC about
+ * ten times faster than the braided calculation. This code does not check for
+ * the presence of the CRC instruction at run time. __ARM_FEATURE_CRC32 will
+ * only be defined if the compilation specifies an ARM processor architecture
+ * that has the instructions. For example, compiling with -march=armv8.1-a or
+ * -march=armv8-a+crc, or -march=native if the compile machine has the crc32
+ * instructions.
+ */
+#ifdef ARMCRC32
+
+/*
+ Constants empirically determined to maximize speed. These values are from
+ measurements on a Cortex-A57. Your mileage may vary.
+ */
+#define Z_BATCH 3990 /* number of words in a batch */
+#define Z_BATCH_ZEROS 0xa10d3d0c /* computed from Z_BATCH = 3990 */
+#define Z_BATCH_MIN 800 /* fewest words in a final batch */
-/* ========================================================================= */
unsigned long ZEXPORT crc32_z(crc, buf, len)
unsigned long crc;
const unsigned char FAR *buf;
z_size_t len;
{
- if (buf == Z_NULL) return 0UL;
+ z_crc_t val;
+ z_word_t crc1, crc2;
+ const z_word_t *word;
+ z_word_t val0, val1, val2;
+ z_size_t last, last2, i;
+ z_size_t num;
+
+ /* Return initial CRC, if requested. */
+ if (buf == Z_NULL) return 0;
#ifdef DYNAMIC_CRC_TABLE
- if (crc_table_empty)
- make_crc_table();
+ once(&made, make_crc_table);
#endif /* DYNAMIC_CRC_TABLE */
-#ifdef BYFOUR
- if (sizeof(void *) == sizeof(ptrdiff_t)) {
- z_crc_t endian;
+ /* Pre-condition the CRC */
+ crc ^= 0xffffffff;
- endian = 1;
- if (*((unsigned char *)(&endian)))
- return crc32_little(crc, buf, len);
- else
- return crc32_big(crc, buf, len);
+ /* Compute the CRC up to a word boundary. */
+ while (len && ((z_size_t)buf & 7) != 0) {
+ len--;
+ val = *buf++;
+ __asm__ volatile("crc32b %w0, %w0, %w1" : "+r"(crc) : "r"(val));
}
-#endif /* BYFOUR */
- crc = crc ^ 0xffffffffUL;
- while (len >= 8) {
- DO8;
- len -= 8;
+
+ /* Prepare to compute the CRC on full 64-bit words word[0..num-1]. */
+ word = (z_word_t const *)buf;
+ num = len >> 3;
+ len &= 7;
+
+ /* Do three interleaved CRCs to realize the throughput of one crc32x
+ instruction per cycle. Each CRC is calcuated on Z_BATCH words. The three
+ CRCs are combined into a single CRC after each set of batches. */
+ while (num >= 3 * Z_BATCH) {
+ crc1 = 0;
+ crc2 = 0;
+ for (i = 0; i < Z_BATCH; i++) {
+ val0 = word[i];
+ val1 = word[i + Z_BATCH];
+ val2 = word[i + 2 * Z_BATCH];
+ __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc) : "r"(val0));
+ __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc1) : "r"(val1));
+ __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc2) : "r"(val2));
+ }
+ word += 3 * Z_BATCH;
+ num -= 3 * Z_BATCH;
+ crc = multmodp(Z_BATCH_ZEROS, crc) ^ crc1;
+ crc = multmodp(Z_BATCH_ZEROS, crc) ^ crc2;
}
- if (len) do {
- DO1;
- } while (--len);
- return crc ^ 0xffffffffUL;
-}
-/* ========================================================================= */
-unsigned long ZEXPORT crc32(crc, buf, len)
- unsigned long crc;
- const unsigned char FAR *buf;
- uInt len;
-{
- return crc32_z(crc, buf, len);
+ /* Do one last smaller batch with the remaining words, if there are enough
+ to pay for the combination of CRCs. */
+ last = num / 3;
+ if (last >= Z_BATCH_MIN) {
+ last2 = last << 1;
+ crc1 = 0;
+ crc2 = 0;
+ for (i = 0; i < last; i++) {
+ val0 = word[i];
+ val1 = word[i + last];
+ val2 = word[i + last2];
+ __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc) : "r"(val0));
+ __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc1) : "r"(val1));
+ __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc2) : "r"(val2));
+ }
+ word += 3 * last;
+ num -= 3 * last;
+ val = x2nmodp(last, 6);
+ crc = multmodp(val, crc) ^ crc1;
+ crc = multmodp(val, crc) ^ crc2;
+ }
+
+ /* Compute the CRC on any remaining words. */
+ for (i = 0; i < num; i++) {
+ val0 = word[i];
+ __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc) : "r"(val0));
+ }
+ word += num;
+
+ /* Complete the CRC on any remaining bytes. */
+ buf = (const unsigned char FAR *)word;
+ while (len) {
+ len--;
+ val = *buf++;
+ __asm__ volatile("crc32b %w0, %w0, %w1" : "+r"(crc) : "r"(val));
+ }
+
+ /* Return the CRC, post-conditioned. */
+ return crc ^ 0xffffffff;
}
-#ifdef BYFOUR
+#else
+
+#ifdef W
/*
- This BYFOUR code accesses the passed unsigned char * buffer with a 32-bit
- integer pointer type. This violates the strict aliasing rule, where a
- compiler can assume, for optimization purposes, that two pointers to
- fundamentally different types won't ever point to the same memory. This can
- manifest as a problem only if one of the pointers is written to. This code
- only reads from those pointers. So long as this code remains isolated in
- this compilation unit, there won't be a problem. For this reason, this code
- should not be copied and pasted into a compilation unit in which other code
- writes to the buffer that is passed to these routines.
+ Return the CRC of the W bytes in the word_t data, taking the
+ least-significant byte of the word as the first byte of data, without any pre
+ or post conditioning. This is used to combine the CRCs of each braid.
*/
+local z_crc_t crc_word(data)
+ z_word_t data;
+{
+ int k;
+ for (k = 0; k < W; k++)
+ data = (data >> 8) ^ crc_table[data & 0xff];
+ return (z_crc_t)data;
+}
-/* ========================================================================= */
-#define DOLIT4 c ^= *buf4++; \
- c = crc_table[3][c & 0xff] ^ crc_table[2][(c >> 8) & 0xff] ^ \
- crc_table[1][(c >> 16) & 0xff] ^ crc_table[0][c >> 24]
-#define DOLIT32 DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4
+local z_word_t crc_word_big(data)
+ z_word_t data;
+{
+ int k;
+ for (k = 0; k < W; k++)
+ data = (data << 8) ^
+ crc_big_table[(data >> ((W - 1) << 3)) & 0xff];
+ return data;
+}
+
+#endif
/* ========================================================================= */
-local unsigned long crc32_little(crc, buf, len)
+unsigned long ZEXPORT crc32_z(crc, buf, len)
unsigned long crc;
const unsigned char FAR *buf;
z_size_t len;
{
- register z_crc_t c;
- register const z_crc_t FAR *buf4;
+ /* Return initial CRC, if requested. */
+ if (buf == Z_NULL) return 0;
- c = (z_crc_t)crc;
- c = ~c;
- while (len && ((ptrdiff_t)buf & 3)) {
- c = crc_table[0][(c ^ *buf++) & 0xff] ^ (c >> 8);
- len--;
- }
+#ifdef DYNAMIC_CRC_TABLE
+ once(&made, make_crc_table);
+#endif /* DYNAMIC_CRC_TABLE */
- buf4 = (const z_crc_t FAR *)(const void FAR *)buf;
- while (len >= 32) {
- DOLIT32;
- len -= 32;
- }
- while (len >= 4) {
- DOLIT4;
- len -= 4;
- }
- buf = (const unsigned char FAR *)buf4;
+ /* Pre-condition the CRC */
+ crc ^= 0xffffffff;
- if (len) do {
- c = crc_table[0][(c ^ *buf++) & 0xff] ^ (c >> 8);
- } while (--len);
- c = ~c;
- return (unsigned long)c;
-}
+#ifdef W
-/* ========================================================================= */
-#define DOBIG4 c ^= *buf4++; \
- c = crc_table[4][c & 0xff] ^ crc_table[5][(c >> 8) & 0xff] ^ \
- crc_table[6][(c >> 16) & 0xff] ^ crc_table[7][c >> 24]
-#define DOBIG32 DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4
+ /* If provided enough bytes, do a braided CRC calculation. */
+ if (len >= N * W + W - 1) {
+ z_size_t blks;
+ z_word_t const *words;
+ unsigned endian;
+ int k;
-/* ========================================================================= */
-local unsigned long crc32_big(crc, buf, len)
- unsigned long crc;
- const unsigned char FAR *buf;
- z_size_t len;
-{
- register z_crc_t c;
- register const z_crc_t FAR *buf4;
+ /* Compute the CRC up to a z_word_t boundary. */
+ while (len && ((z_size_t)buf & (W - 1)) != 0) {
+ len--;
+ crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff];
+ }
- c = ZSWAP32((z_crc_t)crc);
- c = ~c;
- while (len && ((ptrdiff_t)buf & 3)) {
- c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8);
- len--;
+ /* Compute the CRC on as many N z_word_t blocks as are available. */
+ blks = len / (N * W);
+ len -= blks * N * W;
+ words = (z_word_t const *)buf;
+
+ /* Do endian check at execution time instead of compile time, since ARM
+ processors can change the endianess at execution time. If the
+ compiler knows what the endianess will be, it can optimize out the
+ check and the unused branch. */
+ endian = 1;
+ if (*(unsigned char *)&endian) {
+ /* Little endian. */
+
+ z_crc_t crc0;
+ z_word_t word0;
+#if N > 1
+ z_crc_t crc1;
+ z_word_t word1;
+#if N > 2
+ z_crc_t crc2;
+ z_word_t word2;
+#if N > 3
+ z_crc_t crc3;
+ z_word_t word3;
+#if N > 4
+ z_crc_t crc4;
+ z_word_t word4;
+#if N > 5
+ z_crc_t crc5;
+ z_word_t word5;
+#endif
+#endif
+#endif
+#endif
+#endif
+
+ /* Initialize the CRC for each braid. */
+ crc0 = crc;
+#if N > 1
+ crc1 = 0;
+#if N > 2
+ crc2 = 0;
+#if N > 3
+ crc3 = 0;
+#if N > 4
+ crc4 = 0;
+#if N > 5
+ crc5 = 0;
+#endif
+#endif
+#endif
+#endif
+#endif
+
+ /*
+ Process the first blks-1 blocks, computing the CRCs on each braid
+ independently.
+ */
+ while (--blks) {
+ /* Load the word for each braid into registers. */
+ word0 = crc0 ^ words[0];
+#if N > 1
+ word1 = crc1 ^ words[1];
+#if N > 2
+ word2 = crc2 ^ words[2];
+#if N > 3
+ word3 = crc3 ^ words[3];
+#if N > 4
+ word4 = crc4 ^ words[4];
+#if N > 5
+ word5 = crc5 ^ words[5];
+#endif
+#endif
+#endif
+#endif
+#endif
+ words += N;
+
+ /* Compute and update the CRC for each word. The loop should
+ get unrolled. */
+ crc0 = crc_braid_table[0][word0 & 0xff];
+#if N > 1
+ crc1 = crc_braid_table[0][word1 & 0xff];
+#if N > 2
+ crc2 = crc_braid_table[0][word2 & 0xff];
+#if N > 3
+ crc3 = crc_braid_table[0][word3 & 0xff];
+#if N > 4
+ crc4 = crc_braid_table[0][word4 & 0xff];
+#if N > 5
+ crc5 = crc_braid_table[0][word5 & 0xff];
+#endif
+#endif
+#endif
+#endif
+#endif
+ for (k = 1; k < W; k++) {
+ crc0 ^= crc_braid_table[k][(word0 >> (k << 3)) & 0xff];
+#if N > 1
+ crc1 ^= crc_braid_table[k][(word1 >> (k << 3)) & 0xff];
+#if N > 2
+ crc2 ^= crc_braid_table[k][(word2 >> (k << 3)) & 0xff];
+#if N > 3
+ crc3 ^= crc_braid_table[k][(word3 >> (k << 3)) & 0xff];
+#if N > 4
+ crc4 ^= crc_braid_table[k][(word4 >> (k << 3)) & 0xff];
+#if N > 5
+ crc5 ^= crc_braid_table[k][(word5 >> (k << 3)) & 0xff];
+#endif
+#endif
+#endif
+#endif
+#endif
+ }
+ }
+
+ /*
+ Process the last block, combining the CRCs of the N braids at the
+ same time.
+ */
+ crc = crc_word(crc0 ^ words[0]);
+#if N > 1
+ crc = crc_word(crc1 ^ words[1] ^ crc);
+#if N > 2
+ crc = crc_word(crc2 ^ words[2] ^ crc);
+#if N > 3
+ crc = crc_word(crc3 ^ words[3] ^ crc);
+#if N > 4
+ crc = crc_word(crc4 ^ words[4] ^ crc);
+#if N > 5
+ crc = crc_word(crc5 ^ words[5] ^ crc);
+#endif
+#endif
+#endif
+#endif
+#endif
+ words += N;
+ }
+ else {
+ /* Big endian. */
+
+ z_word_t crc0, word0, comb;
+#if N > 1
+ z_word_t crc1, word1;
+#if N > 2
+ z_word_t crc2, word2;
+#if N > 3
+ z_word_t crc3, word3;
+#if N > 4
+ z_word_t crc4, word4;
+#if N > 5
+ z_word_t crc5, word5;
+#endif
+#endif
+#endif
+#endif
+#endif
+
+ /* Initialize the CRC for each braid. */
+ crc0 = byte_swap(crc);
+#if N > 1
+ crc1 = 0;
+#if N > 2
+ crc2 = 0;
+#if N > 3
+ crc3 = 0;
+#if N > 4
+ crc4 = 0;
+#if N > 5
+ crc5 = 0;
+#endif
+#endif
+#endif
+#endif
+#endif
+
+ /*
+ Process the first blks-1 blocks, computing the CRCs on each braid
+ independently.
+ */
+ while (--blks) {
+ /* Load the word for each braid into registers. */
+ word0 = crc0 ^ words[0];
+#if N > 1
+ word1 = crc1 ^ words[1];
+#if N > 2
+ word2 = crc2 ^ words[2];
+#if N > 3
+ word3 = crc3 ^ words[3];
+#if N > 4
+ word4 = crc4 ^ words[4];
+#if N > 5
+ word5 = crc5 ^ words[5];
+#endif
+#endif
+#endif
+#endif
+#endif
+ words += N;
+
+ /* Compute and update the CRC for each word. The loop should
+ get unrolled. */
+ crc0 = crc_braid_big_table[0][word0 & 0xff];
+#if N > 1
+ crc1 = crc_braid_big_table[0][word1 & 0xff];
+#if N > 2
+ crc2 = crc_braid_big_table[0][word2 & 0xff];
+#if N > 3
+ crc3 = crc_braid_big_table[0][word3 & 0xff];
+#if N > 4
+ crc4 = crc_braid_big_table[0][word4 & 0xff];
+#if N > 5
+ crc5 = crc_braid_big_table[0][word5 & 0xff];
+#endif
+#endif
+#endif
+#endif
+#endif
+ for (k = 1; k < W; k++) {
+ crc0 ^= crc_braid_big_table[k][(word0 >> (k << 3)) & 0xff];
+#if N > 1
+ crc1 ^= crc_braid_big_table[k][(word1 >> (k << 3)) & 0xff];
+#if N > 2
+ crc2 ^= crc_braid_big_table[k][(word2 >> (k << 3)) & 0xff];
+#if N > 3
+ crc3 ^= crc_braid_big_table[k][(word3 >> (k << 3)) & 0xff];
+#if N > 4
+ crc4 ^= crc_braid_big_table[k][(word4 >> (k << 3)) & 0xff];
+#if N > 5
+ crc5 ^= crc_braid_big_table[k][(word5 >> (k << 3)) & 0xff];
+#endif
+#endif
+#endif
+#endif
+#endif
+ }
+ }
+
+ /*
+ Process the last block, combining the CRCs of the N braids at the
+ same time.
+ */
+ comb = crc_word_big(crc0 ^ words[0]);
+#if N > 1
+ comb = crc_word_big(crc1 ^ words[1] ^ comb);
+#if N > 2
+ comb = crc_word_big(crc2 ^ words[2] ^ comb);
+#if N > 3
+ comb = crc_word_big(crc3 ^ words[3] ^ comb);
+#if N > 4
+ comb = crc_word_big(crc4 ^ words[4] ^ comb);
+#if N > 5
+ comb = crc_word_big(crc5 ^ words[5] ^ comb);
+#endif
+#endif
+#endif
+#endif
+#endif
+ words += N;
+ crc = byte_swap(comb);
+ }
+
+ /*
+ Update the pointer to the remaining bytes to process.
+ */
+ buf = (unsigned char const *)words;
}
- buf4 = (const z_crc_t FAR *)(const void FAR *)buf;
- while (len >= 32) {
- DOBIG32;
- len -= 32;
+#endif /* W */
+
+ /* Complete the computation of the CRC on any remaining bytes. */
+ while (len >= 8) {
+ len -= 8;
+ crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff];
+ crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff];
+ crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff];
+ crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff];
+ crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff];
+ crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff];
+ crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff];
+ crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff];
}
- while (len >= 4) {
- DOBIG4;
- len -= 4;
+ while (len) {
+ len--;
+ crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff];
}
- buf = (const unsigned char FAR *)buf4;
- if (len) do {
- c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8);
- } while (--len);
- c = ~c;
- return (unsigned long)(ZSWAP32(c));
+ /* Return the CRC, post-conditioned. */
+ return crc ^ 0xffffffff;
}
-#endif /* BYFOUR */
-
-#define GF2_DIM 32 /* dimension of GF(2) vectors (length of CRC) */
+#endif
/* ========================================================================= */
-local unsigned long gf2_matrix_times(mat, vec)
- unsigned long *mat;
- unsigned long vec;
+unsigned long ZEXPORT crc32(crc, buf, len)
+ unsigned long crc;
+ const unsigned char FAR *buf;
+ uInt len;
{
- unsigned long sum;
-
- sum = 0;
- while (vec) {
- if (vec & 1)
- sum ^= *mat;
- vec >>= 1;
- mat++;
- }
- return sum;
+ return crc32_z(crc, buf, len);
}
/* ========================================================================= */
-local void gf2_matrix_square(square, mat)
- unsigned long *square;
- unsigned long *mat;
+uLong ZEXPORT crc32_combine64(crc1, crc2, len2)
+ uLong crc1;
+ uLong crc2;
+ z_off64_t len2;
{
- int n;
-
- for (n = 0; n < GF2_DIM; n++)
- square[n] = gf2_matrix_times(mat, mat[n]);
+#ifdef DYNAMIC_CRC_TABLE
+ once(&made, make_crc_table);
+#endif /* DYNAMIC_CRC_TABLE */
+ return multmodp(x2nmodp(len2, 3), crc1) ^ crc2;
}
/* ========================================================================= */
-local uLong crc32_combine_(crc1, crc2, len2)
+uLong ZEXPORT crc32_combine(crc1, crc2, len2)
uLong crc1;
uLong crc2;
- z_off64_t len2;
+ z_off_t len2;
{
- int n;
- unsigned long row;
- unsigned long even[GF2_DIM]; /* even-power-of-two zeros operator */
- unsigned long odd[GF2_DIM]; /* odd-power-of-two zeros operator */
-
- /* degenerate case (also disallow negative lengths) */
- if (len2 <= 0)
- return crc1;
-
- /* put operator for one zero bit in odd */
- odd[0] = 0xedb88320UL; /* CRC-32 polynomial */
- row = 1;
- for (n = 1; n < GF2_DIM; n++) {
- odd[n] = row;
- row <<= 1;
- }
+ return crc32_combine64(crc1, crc2, len2);
+}
- /* put operator for two zero bits in even */
- gf2_matrix_square(even, odd);
-
- /* put operator for four zero bits in odd */
- gf2_matrix_square(odd, even);
-
- /* apply len2 zeros to crc1 (first square will put the operator for one
- zero byte, eight zero bits, in even) */
- do {
- /* apply zeros operator for this bit of len2 */
- gf2_matrix_square(even, odd);
- if (len2 & 1)
- crc1 = gf2_matrix_times(even, crc1);
- len2 >>= 1;
-
- /* if no more bits set, then done */
- if (len2 == 0)
- break;
-
- /* another iteration of the loop with odd and even swapped */
- gf2_matrix_square(odd, even);
- if (len2 & 1)
- crc1 = gf2_matrix_times(odd, crc1);
- len2 >>= 1;
-
- /* if no more bits set, then done */
- } while (len2 != 0);
-
- /* return combined crc */
- crc1 ^= crc2;
- return crc1;
+/* ========================================================================= */
+uLong ZEXPORT crc32_combine_gen64(len2)
+ z_off64_t len2;
+{
+#ifdef DYNAMIC_CRC_TABLE
+ once(&made, make_crc_table);
+#endif /* DYNAMIC_CRC_TABLE */
+ return x2nmodp(len2, 3);
}
/* ========================================================================= */
-uLong ZEXPORT crc32_combine(crc1, crc2, len2)
- uLong crc1;
- uLong crc2;
+uLong ZEXPORT crc32_combine_gen(len2)
z_off_t len2;
{
- return crc32_combine_(crc1, crc2, len2);
+ return crc32_combine_gen64(len2);
}
-uLong ZEXPORT crc32_combine64(crc1, crc2, len2)
+/* ========================================================================= */
+uLong crc32_combine_op(crc1, crc2, op)
uLong crc1;
uLong crc2;
- z_off64_t len2;
+ uLong op;
{
- return crc32_combine_(crc1, crc2, len2);
+ return multmodp(op, crc1) ^ crc2;
}
diff --git a/zlib/crc32.h b/zlib/crc32.h
index 9e0c7781025..137df68d616 100644
--- a/zlib/crc32.h
+++ b/zlib/crc32.h
@@ -2,440 +2,9445 @@
* Generated automatically by crc32.c
*/
-local const z_crc_t FAR crc_table[TBLS][256] =
-{
- {
- 0x00000000UL, 0x77073096UL, 0xee0e612cUL, 0x990951baUL, 0x076dc419UL,
- 0x706af48fUL, 0xe963a535UL, 0x9e6495a3UL, 0x0edb8832UL, 0x79dcb8a4UL,
- 0xe0d5e91eUL, 0x97d2d988UL, 0x09b64c2bUL, 0x7eb17cbdUL, 0xe7b82d07UL,
- 0x90bf1d91UL, 0x1db71064UL, 0x6ab020f2UL, 0xf3b97148UL, 0x84be41deUL,
- 0x1adad47dUL, 0x6ddde4ebUL, 0xf4d4b551UL, 0x83d385c7UL, 0x136c9856UL,
- 0x646ba8c0UL, 0xfd62f97aUL, 0x8a65c9ecUL, 0x14015c4fUL, 0x63066cd9UL,
- 0xfa0f3d63UL, 0x8d080df5UL, 0x3b6e20c8UL, 0x4c69105eUL, 0xd56041e4UL,
- 0xa2677172UL, 0x3c03e4d1UL, 0x4b04d447UL, 0xd20d85fdUL, 0xa50ab56bUL,
- 0x35b5a8faUL, 0x42b2986cUL, 0xdbbbc9d6UL, 0xacbcf940UL, 0x32d86ce3UL,
- 0x45df5c75UL, 0xdcd60dcfUL, 0xabd13d59UL, 0x26d930acUL, 0x51de003aUL,
- 0xc8d75180UL, 0xbfd06116UL, 0x21b4f4b5UL, 0x56b3c423UL, 0xcfba9599UL,
- 0xb8bda50fUL, 0x2802b89eUL, 0x5f058808UL, 0xc60cd9b2UL, 0xb10be924UL,
- 0x2f6f7c87UL, 0x58684c11UL, 0xc1611dabUL, 0xb6662d3dUL, 0x76dc4190UL,
- 0x01db7106UL, 0x98d220bcUL, 0xefd5102aUL, 0x71b18589UL, 0x06b6b51fUL,
- 0x9fbfe4a5UL, 0xe8b8d433UL, 0x7807c9a2UL, 0x0f00f934UL, 0x9609a88eUL,
- 0xe10e9818UL, 0x7f6a0dbbUL, 0x086d3d2dUL, 0x91646c97UL, 0xe6635c01UL,
- 0x6b6b51f4UL, 0x1c6c6162UL, 0x856530d8UL, 0xf262004eUL, 0x6c0695edUL,
- 0x1b01a57bUL, 0x8208f4c1UL, 0xf50fc457UL, 0x65b0d9c6UL, 0x12b7e950UL,
- 0x8bbeb8eaUL, 0xfcb9887cUL, 0x62dd1ddfUL, 0x15da2d49UL, 0x8cd37cf3UL,
- 0xfbd44c65UL, 0x4db26158UL, 0x3ab551ceUL, 0xa3bc0074UL, 0xd4bb30e2UL,
- 0x4adfa541UL, 0x3dd895d7UL, 0xa4d1c46dUL, 0xd3d6f4fbUL, 0x4369e96aUL,
- 0x346ed9fcUL, 0xad678846UL, 0xda60b8d0UL, 0x44042d73UL, 0x33031de5UL,
- 0xaa0a4c5fUL, 0xdd0d7cc9UL, 0x5005713cUL, 0x270241aaUL, 0xbe0b1010UL,
- 0xc90c2086UL, 0x5768b525UL, 0x206f85b3UL, 0xb966d409UL, 0xce61e49fUL,
- 0x5edef90eUL, 0x29d9c998UL, 0xb0d09822UL, 0xc7d7a8b4UL, 0x59b33d17UL,
- 0x2eb40d81UL, 0xb7bd5c3bUL, 0xc0ba6cadUL, 0xedb88320UL, 0x9abfb3b6UL,
- 0x03b6e20cUL, 0x74b1d29aUL, 0xead54739UL, 0x9dd277afUL, 0x04db2615UL,
- 0x73dc1683UL, 0xe3630b12UL, 0x94643b84UL, 0x0d6d6a3eUL, 0x7a6a5aa8UL,
- 0xe40ecf0bUL, 0x9309ff9dUL, 0x0a00ae27UL, 0x7d079eb1UL, 0xf00f9344UL,
- 0x8708a3d2UL, 0x1e01f268UL, 0x6906c2feUL, 0xf762575dUL, 0x806567cbUL,
- 0x196c3671UL, 0x6e6b06e7UL, 0xfed41b76UL, 0x89d32be0UL, 0x10da7a5aUL,
- 0x67dd4accUL, 0xf9b9df6fUL, 0x8ebeeff9UL, 0x17b7be43UL, 0x60b08ed5UL,
- 0xd6d6a3e8UL, 0xa1d1937eUL, 0x38d8c2c4UL, 0x4fdff252UL, 0xd1bb67f1UL,
- 0xa6bc5767UL, 0x3fb506ddUL, 0x48b2364bUL, 0xd80d2bdaUL, 0xaf0a1b4cUL,
- 0x36034af6UL, 0x41047a60UL, 0xdf60efc3UL, 0xa867df55UL, 0x316e8eefUL,
- 0x4669be79UL, 0xcb61b38cUL, 0xbc66831aUL, 0x256fd2a0UL, 0x5268e236UL,
- 0xcc0c7795UL, 0xbb0b4703UL, 0x220216b9UL, 0x5505262fUL, 0xc5ba3bbeUL,
- 0xb2bd0b28UL, 0x2bb45a92UL, 0x5cb36a04UL, 0xc2d7ffa7UL, 0xb5d0cf31UL,
- 0x2cd99e8bUL, 0x5bdeae1dUL, 0x9b64c2b0UL, 0xec63f226UL, 0x756aa39cUL,
- 0x026d930aUL, 0x9c0906a9UL, 0xeb0e363fUL, 0x72076785UL, 0x05005713UL,
- 0x95bf4a82UL, 0xe2b87a14UL, 0x7bb12baeUL, 0x0cb61b38UL, 0x92d28e9bUL,
- 0xe5d5be0dUL, 0x7cdcefb7UL, 0x0bdbdf21UL, 0x86d3d2d4UL, 0xf1d4e242UL,
- 0x68ddb3f8UL, 0x1fda836eUL, 0x81be16cdUL, 0xf6b9265bUL, 0x6fb077e1UL,
- 0x18b74777UL, 0x88085ae6UL, 0xff0f6a70UL, 0x66063bcaUL, 0x11010b5cUL,
- 0x8f659effUL, 0xf862ae69UL, 0x616bffd3UL, 0x166ccf45UL, 0xa00ae278UL,
- 0xd70dd2eeUL, 0x4e048354UL, 0x3903b3c2UL, 0xa7672661UL, 0xd06016f7UL,
- 0x4969474dUL, 0x3e6e77dbUL, 0xaed16a4aUL, 0xd9d65adcUL, 0x40df0b66UL,
- 0x37d83bf0UL, 0xa9bcae53UL, 0xdebb9ec5UL, 0x47b2cf7fUL, 0x30b5ffe9UL,
- 0xbdbdf21cUL, 0xcabac28aUL, 0x53b39330UL, 0x24b4a3a6UL, 0xbad03605UL,
- 0xcdd70693UL, 0x54de5729UL, 0x23d967bfUL, 0xb3667a2eUL, 0xc4614ab8UL,
- 0x5d681b02UL, 0x2a6f2b94UL, 0xb40bbe37UL, 0xc30c8ea1UL, 0x5a05df1bUL,
- 0x2d02ef8dUL
-#ifdef BYFOUR
- },
- {
- 0x00000000UL, 0x191b3141UL, 0x32366282UL, 0x2b2d53c3UL, 0x646cc504UL,
- 0x7d77f445UL, 0x565aa786UL, 0x4f4196c7UL, 0xc8d98a08UL, 0xd1c2bb49UL,
- 0xfaefe88aUL, 0xe3f4d9cbUL, 0xacb54f0cUL, 0xb5ae7e4dUL, 0x9e832d8eUL,
- 0x87981ccfUL, 0x4ac21251UL, 0x53d92310UL, 0x78f470d3UL, 0x61ef4192UL,
- 0x2eaed755UL, 0x37b5e614UL, 0x1c98b5d7UL, 0x05838496UL, 0x821b9859UL,
- 0x9b00a918UL, 0xb02dfadbUL, 0xa936cb9aUL, 0xe6775d5dUL, 0xff6c6c1cUL,
- 0xd4413fdfUL, 0xcd5a0e9eUL, 0x958424a2UL, 0x8c9f15e3UL, 0xa7b24620UL,
- 0xbea97761UL, 0xf1e8e1a6UL, 0xe8f3d0e7UL, 0xc3de8324UL, 0xdac5b265UL,
- 0x5d5daeaaUL, 0x44469febUL, 0x6f6bcc28UL, 0x7670fd69UL, 0x39316baeUL,
- 0x202a5aefUL, 0x0b07092cUL, 0x121c386dUL, 0xdf4636f3UL, 0xc65d07b2UL,
- 0xed705471UL, 0xf46b6530UL, 0xbb2af3f7UL, 0xa231c2b6UL, 0x891c9175UL,
- 0x9007a034UL, 0x179fbcfbUL, 0x0e848dbaUL, 0x25a9de79UL, 0x3cb2ef38UL,
- 0x73f379ffUL, 0x6ae848beUL, 0x41c51b7dUL, 0x58de2a3cUL, 0xf0794f05UL,
- 0xe9627e44UL, 0xc24f2d87UL, 0xdb541cc6UL, 0x94158a01UL, 0x8d0ebb40UL,
- 0xa623e883UL, 0xbf38d9c2UL, 0x38a0c50dUL, 0x21bbf44cUL, 0x0a96a78fUL,
- 0x138d96ceUL, 0x5ccc0009UL, 0x45d73148UL, 0x6efa628bUL, 0x77e153caUL,
- 0xbabb5d54UL, 0xa3a06c15UL, 0x888d3fd6UL, 0x91960e97UL, 0xded79850UL,
- 0xc7cca911UL, 0xece1fad2UL, 0xf5facb93UL, 0x7262d75cUL, 0x6b79e61dUL,
- 0x4054b5deUL, 0x594f849fUL, 0x160e1258UL, 0x0f152319UL, 0x243870daUL,
- 0x3d23419bUL, 0x65fd6ba7UL, 0x7ce65ae6UL, 0x57cb0925UL, 0x4ed03864UL,
- 0x0191aea3UL, 0x188a9fe2UL, 0x33a7cc21UL, 0x2abcfd60UL, 0xad24e1afUL,
- 0xb43fd0eeUL, 0x9f12832dUL, 0x8609b26cUL, 0xc94824abUL, 0xd05315eaUL,
- 0xfb7e4629UL, 0xe2657768UL, 0x2f3f79f6UL, 0x362448b7UL, 0x1d091b74UL,
- 0x04122a35UL, 0x4b53bcf2UL, 0x52488db3UL, 0x7965de70UL, 0x607eef31UL,
- 0xe7e6f3feUL, 0xfefdc2bfUL, 0xd5d0917cUL, 0xcccba03dUL, 0x838a36faUL,
- 0x9a9107bbUL, 0xb1bc5478UL, 0xa8a76539UL, 0x3b83984bUL, 0x2298a90aUL,
- 0x09b5fac9UL, 0x10aecb88UL, 0x5fef5d4fUL, 0x46f46c0eUL, 0x6dd93fcdUL,
- 0x74c20e8cUL, 0xf35a1243UL, 0xea412302UL, 0xc16c70c1UL, 0xd8774180UL,
- 0x9736d747UL, 0x8e2de606UL, 0xa500b5c5UL, 0xbc1b8484UL, 0x71418a1aUL,
- 0x685abb5bUL, 0x4377e898UL, 0x5a6cd9d9UL, 0x152d4f1eUL, 0x0c367e5fUL,
- 0x271b2d9cUL, 0x3e001cddUL, 0xb9980012UL, 0xa0833153UL, 0x8bae6290UL,
- 0x92b553d1UL, 0xddf4c516UL, 0xc4eff457UL, 0xefc2a794UL, 0xf6d996d5UL,
- 0xae07bce9UL, 0xb71c8da8UL, 0x9c31de6bUL, 0x852aef2aUL, 0xca6b79edUL,
- 0xd37048acUL, 0xf85d1b6fUL, 0xe1462a2eUL, 0x66de36e1UL, 0x7fc507a0UL,
- 0x54e85463UL, 0x4df36522UL, 0x02b2f3e5UL, 0x1ba9c2a4UL, 0x30849167UL,
- 0x299fa026UL, 0xe4c5aeb8UL, 0xfdde9ff9UL, 0xd6f3cc3aUL, 0xcfe8fd7bUL,
- 0x80a96bbcUL, 0x99b25afdUL, 0xb29f093eUL, 0xab84387fUL, 0x2c1c24b0UL,
- 0x350715f1UL, 0x1e2a4632UL, 0x07317773UL, 0x4870e1b4UL, 0x516bd0f5UL,
- 0x7a468336UL, 0x635db277UL, 0xcbfad74eUL, 0xd2e1e60fUL, 0xf9ccb5ccUL,
- 0xe0d7848dUL, 0xaf96124aUL, 0xb68d230bUL, 0x9da070c8UL, 0x84bb4189UL,
- 0x03235d46UL, 0x1a386c07UL, 0x31153fc4UL, 0x280e0e85UL, 0x674f9842UL,
- 0x7e54a903UL, 0x5579fac0UL, 0x4c62cb81UL, 0x8138c51fUL, 0x9823f45eUL,
- 0xb30ea79dUL, 0xaa1596dcUL, 0xe554001bUL, 0xfc4f315aUL, 0xd7626299UL,
- 0xce7953d8UL, 0x49e14f17UL, 0x50fa7e56UL, 0x7bd72d95UL, 0x62cc1cd4UL,
- 0x2d8d8a13UL, 0x3496bb52UL, 0x1fbbe891UL, 0x06a0d9d0UL, 0x5e7ef3ecUL,
- 0x4765c2adUL, 0x6c48916eUL, 0x7553a02fUL, 0x3a1236e8UL, 0x230907a9UL,
- 0x0824546aUL, 0x113f652bUL, 0x96a779e4UL, 0x8fbc48a5UL, 0xa4911b66UL,
- 0xbd8a2a27UL, 0xf2cbbce0UL, 0xebd08da1UL, 0xc0fdde62UL, 0xd9e6ef23UL,
- 0x14bce1bdUL, 0x0da7d0fcUL, 0x268a833fUL, 0x3f91b27eUL, 0x70d024b9UL,
- 0x69cb15f8UL, 0x42e6463bUL, 0x5bfd777aUL, 0xdc656bb5UL, 0xc57e5af4UL,
- 0xee530937UL, 0xf7483876UL, 0xb809aeb1UL, 0xa1129ff0UL, 0x8a3fcc33UL,
- 0x9324fd72UL
- },
- {
- 0x00000000UL, 0x01c26a37UL, 0x0384d46eUL, 0x0246be59UL, 0x0709a8dcUL,
- 0x06cbc2ebUL, 0x048d7cb2UL, 0x054f1685UL, 0x0e1351b8UL, 0x0fd13b8fUL,
- 0x0d9785d6UL, 0x0c55efe1UL, 0x091af964UL, 0x08d89353UL, 0x0a9e2d0aUL,
- 0x0b5c473dUL, 0x1c26a370UL, 0x1de4c947UL, 0x1fa2771eUL, 0x1e601d29UL,
- 0x1b2f0bacUL, 0x1aed619bUL, 0x18abdfc2UL, 0x1969b5f5UL, 0x1235f2c8UL,
- 0x13f798ffUL, 0x11b126a6UL, 0x10734c91UL, 0x153c5a14UL, 0x14fe3023UL,
- 0x16b88e7aUL, 0x177ae44dUL, 0x384d46e0UL, 0x398f2cd7UL, 0x3bc9928eUL,
- 0x3a0bf8b9UL, 0x3f44ee3cUL, 0x3e86840bUL, 0x3cc03a52UL, 0x3d025065UL,
- 0x365e1758UL, 0x379c7d6fUL, 0x35dac336UL, 0x3418a901UL, 0x3157bf84UL,
- 0x3095d5b3UL, 0x32d36beaUL, 0x331101ddUL, 0x246be590UL, 0x25a98fa7UL,
- 0x27ef31feUL, 0x262d5bc9UL, 0x23624d4cUL, 0x22a0277bUL, 0x20e69922UL,
- 0x2124f315UL, 0x2a78b428UL, 0x2bbade1fUL, 0x29fc6046UL, 0x283e0a71UL,
- 0x2d711cf4UL, 0x2cb376c3UL, 0x2ef5c89aUL, 0x2f37a2adUL, 0x709a8dc0UL,
- 0x7158e7f7UL, 0x731e59aeUL, 0x72dc3399UL, 0x7793251cUL, 0x76514f2bUL,
- 0x7417f172UL, 0x75d59b45UL, 0x7e89dc78UL, 0x7f4bb64fUL, 0x7d0d0816UL,
- 0x7ccf6221UL, 0x798074a4UL, 0x78421e93UL, 0x7a04a0caUL, 0x7bc6cafdUL,
- 0x6cbc2eb0UL, 0x6d7e4487UL, 0x6f38fadeUL, 0x6efa90e9UL, 0x6bb5866cUL,
- 0x6a77ec5bUL, 0x68315202UL, 0x69f33835UL, 0x62af7f08UL, 0x636d153fUL,
- 0x612bab66UL, 0x60e9c151UL, 0x65a6d7d4UL, 0x6464bde3UL, 0x662203baUL,
- 0x67e0698dUL, 0x48d7cb20UL, 0x4915a117UL, 0x4b531f4eUL, 0x4a917579UL,
- 0x4fde63fcUL, 0x4e1c09cbUL, 0x4c5ab792UL, 0x4d98dda5UL, 0x46c49a98UL,
- 0x4706f0afUL, 0x45404ef6UL, 0x448224c1UL, 0x41cd3244UL, 0x400f5873UL,
- 0x4249e62aUL, 0x438b8c1dUL, 0x54f16850UL, 0x55330267UL, 0x5775bc3eUL,
- 0x56b7d609UL, 0x53f8c08cUL, 0x523aaabbUL, 0x507c14e2UL, 0x51be7ed5UL,
- 0x5ae239e8UL, 0x5b2053dfUL, 0x5966ed86UL, 0x58a487b1UL, 0x5deb9134UL,
- 0x5c29fb03UL, 0x5e6f455aUL, 0x5fad2f6dUL, 0xe1351b80UL, 0xe0f771b7UL,
- 0xe2b1cfeeUL, 0xe373a5d9UL, 0xe63cb35cUL, 0xe7fed96bUL, 0xe5b86732UL,
- 0xe47a0d05UL, 0xef264a38UL, 0xeee4200fUL, 0xeca29e56UL, 0xed60f461UL,
- 0xe82fe2e4UL, 0xe9ed88d3UL, 0xebab368aUL, 0xea695cbdUL, 0xfd13b8f0UL,
- 0xfcd1d2c7UL, 0xfe976c9eUL, 0xff5506a9UL, 0xfa1a102cUL, 0xfbd87a1bUL,
- 0xf99ec442UL, 0xf85cae75UL, 0xf300e948UL, 0xf2c2837fUL, 0xf0843d26UL,
- 0xf1465711UL, 0xf4094194UL, 0xf5cb2ba3UL, 0xf78d95faUL, 0xf64fffcdUL,
- 0xd9785d60UL, 0xd8ba3757UL, 0xdafc890eUL, 0xdb3ee339UL, 0xde71f5bcUL,
- 0xdfb39f8bUL, 0xddf521d2UL, 0xdc374be5UL, 0xd76b0cd8UL, 0xd6a966efUL,
- 0xd4efd8b6UL, 0xd52db281UL, 0xd062a404UL, 0xd1a0ce33UL, 0xd3e6706aUL,
- 0xd2241a5dUL, 0xc55efe10UL, 0xc49c9427UL, 0xc6da2a7eUL, 0xc7184049UL,
- 0xc25756ccUL, 0xc3953cfbUL, 0xc1d382a2UL, 0xc011e895UL, 0xcb4dafa8UL,
- 0xca8fc59fUL, 0xc8c97bc6UL, 0xc90b11f1UL, 0xcc440774UL, 0xcd866d43UL,
- 0xcfc0d31aUL, 0xce02b92dUL, 0x91af9640UL, 0x906dfc77UL, 0x922b422eUL,
- 0x93e92819UL, 0x96a63e9cUL, 0x976454abUL, 0x9522eaf2UL, 0x94e080c5UL,
- 0x9fbcc7f8UL, 0x9e7eadcfUL, 0x9c381396UL, 0x9dfa79a1UL, 0x98b56f24UL,
- 0x99770513UL, 0x9b31bb4aUL, 0x9af3d17dUL, 0x8d893530UL, 0x8c4b5f07UL,
- 0x8e0de15eUL, 0x8fcf8b69UL, 0x8a809decUL, 0x8b42f7dbUL, 0x89044982UL,
- 0x88c623b5UL, 0x839a6488UL, 0x82580ebfUL, 0x801eb0e6UL, 0x81dcdad1UL,
- 0x8493cc54UL, 0x8551a663UL, 0x8717183aUL, 0x86d5720dUL, 0xa9e2d0a0UL,
- 0xa820ba97UL, 0xaa6604ceUL, 0xaba46ef9UL, 0xaeeb787cUL, 0xaf29124bUL,
- 0xad6fac12UL, 0xacadc625UL, 0xa7f18118UL, 0xa633eb2fUL, 0xa4755576UL,
- 0xa5b73f41UL, 0xa0f829c4UL, 0xa13a43f3UL, 0xa37cfdaaUL, 0xa2be979dUL,
- 0xb5c473d0UL, 0xb40619e7UL, 0xb640a7beUL, 0xb782cd89UL, 0xb2cddb0cUL,
- 0xb30fb13bUL, 0xb1490f62UL, 0xb08b6555UL, 0xbbd72268UL, 0xba15485fUL,
- 0xb853f606UL, 0xb9919c31UL, 0xbcde8ab4UL, 0xbd1ce083UL, 0xbf5a5edaUL,
- 0xbe9834edUL
- },
- {
- 0x00000000UL, 0xb8bc6765UL, 0xaa09c88bUL, 0x12b5afeeUL, 0x8f629757UL,
- 0x37def032UL, 0x256b5fdcUL, 0x9dd738b9UL, 0xc5b428efUL, 0x7d084f8aUL,
- 0x6fbde064UL, 0xd7018701UL, 0x4ad6bfb8UL, 0xf26ad8ddUL, 0xe0df7733UL,
- 0x58631056UL, 0x5019579fUL, 0xe8a530faUL, 0xfa109f14UL, 0x42acf871UL,
- 0xdf7bc0c8UL, 0x67c7a7adUL, 0x75720843UL, 0xcdce6f26UL, 0x95ad7f70UL,
- 0x2d111815UL, 0x3fa4b7fbUL, 0x8718d09eUL, 0x1acfe827UL, 0xa2738f42UL,
- 0xb0c620acUL, 0x087a47c9UL, 0xa032af3eUL, 0x188ec85bUL, 0x0a3b67b5UL,
- 0xb28700d0UL, 0x2f503869UL, 0x97ec5f0cUL, 0x8559f0e2UL, 0x3de59787UL,
- 0x658687d1UL, 0xdd3ae0b4UL, 0xcf8f4f5aUL, 0x7733283fUL, 0xeae41086UL,
- 0x525877e3UL, 0x40edd80dUL, 0xf851bf68UL, 0xf02bf8a1UL, 0x48979fc4UL,
- 0x5a22302aUL, 0xe29e574fUL, 0x7f496ff6UL, 0xc7f50893UL, 0xd540a77dUL,
- 0x6dfcc018UL, 0x359fd04eUL, 0x8d23b72bUL, 0x9f9618c5UL, 0x272a7fa0UL,
- 0xbafd4719UL, 0x0241207cUL, 0x10f48f92UL, 0xa848e8f7UL, 0x9b14583dUL,
- 0x23a83f58UL, 0x311d90b6UL, 0x89a1f7d3UL, 0x1476cf6aUL, 0xaccaa80fUL,
- 0xbe7f07e1UL, 0x06c36084UL, 0x5ea070d2UL, 0xe61c17b7UL, 0xf4a9b859UL,
- 0x4c15df3cUL, 0xd1c2e785UL, 0x697e80e0UL, 0x7bcb2f0eUL, 0xc377486bUL,
- 0xcb0d0fa2UL, 0x73b168c7UL, 0x6104c729UL, 0xd9b8a04cUL, 0x446f98f5UL,
- 0xfcd3ff90UL, 0xee66507eUL, 0x56da371bUL, 0x0eb9274dUL, 0xb6054028UL,
- 0xa4b0efc6UL, 0x1c0c88a3UL, 0x81dbb01aUL, 0x3967d77fUL, 0x2bd27891UL,
- 0x936e1ff4UL, 0x3b26f703UL, 0x839a9066UL, 0x912f3f88UL, 0x299358edUL,
- 0xb4446054UL, 0x0cf80731UL, 0x1e4da8dfUL, 0xa6f1cfbaUL, 0xfe92dfecUL,
- 0x462eb889UL, 0x549b1767UL, 0xec277002UL, 0x71f048bbUL, 0xc94c2fdeUL,
- 0xdbf98030UL, 0x6345e755UL, 0x6b3fa09cUL, 0xd383c7f9UL, 0xc1366817UL,
- 0x798a0f72UL, 0xe45d37cbUL, 0x5ce150aeUL, 0x4e54ff40UL, 0xf6e89825UL,
- 0xae8b8873UL, 0x1637ef16UL, 0x048240f8UL, 0xbc3e279dUL, 0x21e91f24UL,
- 0x99557841UL, 0x8be0d7afUL, 0x335cb0caUL, 0xed59b63bUL, 0x55e5d15eUL,
- 0x47507eb0UL, 0xffec19d5UL, 0x623b216cUL, 0xda874609UL, 0xc832e9e7UL,
- 0x708e8e82UL, 0x28ed9ed4UL, 0x9051f9b1UL, 0x82e4565fUL, 0x3a58313aUL,
- 0xa78f0983UL, 0x1f336ee6UL, 0x0d86c108UL, 0xb53aa66dUL, 0xbd40e1a4UL,
- 0x05fc86c1UL, 0x1749292fUL, 0xaff54e4aUL, 0x322276f3UL, 0x8a9e1196UL,
- 0x982bbe78UL, 0x2097d91dUL, 0x78f4c94bUL, 0xc048ae2eUL, 0xd2fd01c0UL,
- 0x6a4166a5UL, 0xf7965e1cUL, 0x4f2a3979UL, 0x5d9f9697UL, 0xe523f1f2UL,
- 0x4d6b1905UL, 0xf5d77e60UL, 0xe762d18eUL, 0x5fdeb6ebUL, 0xc2098e52UL,
- 0x7ab5e937UL, 0x680046d9UL, 0xd0bc21bcUL, 0x88df31eaUL, 0x3063568fUL,
- 0x22d6f961UL, 0x9a6a9e04UL, 0x07bda6bdUL, 0xbf01c1d8UL, 0xadb46e36UL,
- 0x15080953UL, 0x1d724e9aUL, 0xa5ce29ffUL, 0xb77b8611UL, 0x0fc7e174UL,
- 0x9210d9cdUL, 0x2aacbea8UL, 0x38191146UL, 0x80a57623UL, 0xd8c66675UL,
- 0x607a0110UL, 0x72cfaefeUL, 0xca73c99bUL, 0x57a4f122UL, 0xef189647UL,
- 0xfdad39a9UL, 0x45115eccUL, 0x764dee06UL, 0xcef18963UL, 0xdc44268dUL,
- 0x64f841e8UL, 0xf92f7951UL, 0x41931e34UL, 0x5326b1daUL, 0xeb9ad6bfUL,
- 0xb3f9c6e9UL, 0x0b45a18cUL, 0x19f00e62UL, 0xa14c6907UL, 0x3c9b51beUL,
- 0x842736dbUL, 0x96929935UL, 0x2e2efe50UL, 0x2654b999UL, 0x9ee8defcUL,
- 0x8c5d7112UL, 0x34e11677UL, 0xa9362eceUL, 0x118a49abUL, 0x033fe645UL,
- 0xbb838120UL, 0xe3e09176UL, 0x5b5cf613UL, 0x49e959fdUL, 0xf1553e98UL,
- 0x6c820621UL, 0xd43e6144UL, 0xc68bceaaUL, 0x7e37a9cfUL, 0xd67f4138UL,
- 0x6ec3265dUL, 0x7c7689b3UL, 0xc4caeed6UL, 0x591dd66fUL, 0xe1a1b10aUL,
- 0xf3141ee4UL, 0x4ba87981UL, 0x13cb69d7UL, 0xab770eb2UL, 0xb9c2a15cUL,
- 0x017ec639UL, 0x9ca9fe80UL, 0x241599e5UL, 0x36a0360bUL, 0x8e1c516eUL,
- 0x866616a7UL, 0x3eda71c2UL, 0x2c6fde2cUL, 0x94d3b949UL, 0x090481f0UL,
- 0xb1b8e695UL, 0xa30d497bUL, 0x1bb12e1eUL, 0x43d23e48UL, 0xfb6e592dUL,
- 0xe9dbf6c3UL, 0x516791a6UL, 0xccb0a91fUL, 0x740cce7aUL, 0x66b96194UL,
- 0xde0506f1UL
- },
- {
- 0x00000000UL, 0x96300777UL, 0x2c610eeeUL, 0xba510999UL, 0x19c46d07UL,
- 0x8ff46a70UL, 0x35a563e9UL, 0xa395649eUL, 0x3288db0eUL, 0xa4b8dc79UL,
- 0x1ee9d5e0UL, 0x88d9d297UL, 0x2b4cb609UL, 0xbd7cb17eUL, 0x072db8e7UL,
- 0x911dbf90UL, 0x6410b71dUL, 0xf220b06aUL, 0x4871b9f3UL, 0xde41be84UL,
- 0x7dd4da1aUL, 0xebe4dd6dUL, 0x51b5d4f4UL, 0xc785d383UL, 0x56986c13UL,
- 0xc0a86b64UL, 0x7af962fdUL, 0xecc9658aUL, 0x4f5c0114UL, 0xd96c0663UL,
- 0x633d0ffaUL, 0xf50d088dUL, 0xc8206e3bUL, 0x5e10694cUL, 0xe44160d5UL,
- 0x727167a2UL, 0xd1e4033cUL, 0x47d4044bUL, 0xfd850dd2UL, 0x6bb50aa5UL,
- 0xfaa8b535UL, 0x6c98b242UL, 0xd6c9bbdbUL, 0x40f9bcacUL, 0xe36cd832UL,
- 0x755cdf45UL, 0xcf0dd6dcUL, 0x593dd1abUL, 0xac30d926UL, 0x3a00de51UL,
- 0x8051d7c8UL, 0x1661d0bfUL, 0xb5f4b421UL, 0x23c4b356UL, 0x9995bacfUL,
- 0x0fa5bdb8UL, 0x9eb80228UL, 0x0888055fUL, 0xb2d90cc6UL, 0x24e90bb1UL,
- 0x877c6f2fUL, 0x114c6858UL, 0xab1d61c1UL, 0x3d2d66b6UL, 0x9041dc76UL,
- 0x0671db01UL, 0xbc20d298UL, 0x2a10d5efUL, 0x8985b171UL, 0x1fb5b606UL,
- 0xa5e4bf9fUL, 0x33d4b8e8UL, 0xa2c90778UL, 0x34f9000fUL, 0x8ea80996UL,
- 0x18980ee1UL, 0xbb0d6a7fUL, 0x2d3d6d08UL, 0x976c6491UL, 0x015c63e6UL,
- 0xf4516b6bUL, 0x62616c1cUL, 0xd8306585UL, 0x4e0062f2UL, 0xed95066cUL,
- 0x7ba5011bUL, 0xc1f40882UL, 0x57c40ff5UL, 0xc6d9b065UL, 0x50e9b712UL,
- 0xeab8be8bUL, 0x7c88b9fcUL, 0xdf1ddd62UL, 0x492dda15UL, 0xf37cd38cUL,
- 0x654cd4fbUL, 0x5861b24dUL, 0xce51b53aUL, 0x7400bca3UL, 0xe230bbd4UL,
- 0x41a5df4aUL, 0xd795d83dUL, 0x6dc4d1a4UL, 0xfbf4d6d3UL, 0x6ae96943UL,
- 0xfcd96e34UL, 0x468867adUL, 0xd0b860daUL, 0x732d0444UL, 0xe51d0333UL,
- 0x5f4c0aaaUL, 0xc97c0dddUL, 0x3c710550UL, 0xaa410227UL, 0x10100bbeUL,
- 0x86200cc9UL, 0x25b56857UL, 0xb3856f20UL, 0x09d466b9UL, 0x9fe461ceUL,
- 0x0ef9de5eUL, 0x98c9d929UL, 0x2298d0b0UL, 0xb4a8d7c7UL, 0x173db359UL,
- 0x810db42eUL, 0x3b5cbdb7UL, 0xad6cbac0UL, 0x2083b8edUL, 0xb6b3bf9aUL,
- 0x0ce2b603UL, 0x9ad2b174UL, 0x3947d5eaUL, 0xaf77d29dUL, 0x1526db04UL,
- 0x8316dc73UL, 0x120b63e3UL, 0x843b6494UL, 0x3e6a6d0dUL, 0xa85a6a7aUL,
- 0x0bcf0ee4UL, 0x9dff0993UL, 0x27ae000aUL, 0xb19e077dUL, 0x44930ff0UL,
- 0xd2a30887UL, 0x68f2011eUL, 0xfec20669UL, 0x5d5762f7UL, 0xcb676580UL,
- 0x71366c19UL, 0xe7066b6eUL, 0x761bd4feUL, 0xe02bd389UL, 0x5a7ada10UL,
- 0xcc4add67UL, 0x6fdfb9f9UL, 0xf9efbe8eUL, 0x43beb717UL, 0xd58eb060UL,
- 0xe8a3d6d6UL, 0x7e93d1a1UL, 0xc4c2d838UL, 0x52f2df4fUL, 0xf167bbd1UL,
- 0x6757bca6UL, 0xdd06b53fUL, 0x4b36b248UL, 0xda2b0dd8UL, 0x4c1b0aafUL,
- 0xf64a0336UL, 0x607a0441UL, 0xc3ef60dfUL, 0x55df67a8UL, 0xef8e6e31UL,
- 0x79be6946UL, 0x8cb361cbUL, 0x1a8366bcUL, 0xa0d26f25UL, 0x36e26852UL,
- 0x95770cccUL, 0x03470bbbUL, 0xb9160222UL, 0x2f260555UL, 0xbe3bbac5UL,
- 0x280bbdb2UL, 0x925ab42bUL, 0x046ab35cUL, 0xa7ffd7c2UL, 0x31cfd0b5UL,
- 0x8b9ed92cUL, 0x1daede5bUL, 0xb0c2649bUL, 0x26f263ecUL, 0x9ca36a75UL,
- 0x0a936d02UL, 0xa906099cUL, 0x3f360eebUL, 0x85670772UL, 0x13570005UL,
- 0x824abf95UL, 0x147ab8e2UL, 0xae2bb17bUL, 0x381bb60cUL, 0x9b8ed292UL,
- 0x0dbed5e5UL, 0xb7efdc7cUL, 0x21dfdb0bUL, 0xd4d2d386UL, 0x42e2d4f1UL,
- 0xf8b3dd68UL, 0x6e83da1fUL, 0xcd16be81UL, 0x5b26b9f6UL, 0xe177b06fUL,
- 0x7747b718UL, 0xe65a0888UL, 0x706a0fffUL, 0xca3b0666UL, 0x5c0b0111UL,
- 0xff9e658fUL, 0x69ae62f8UL, 0xd3ff6b61UL, 0x45cf6c16UL, 0x78e20aa0UL,
- 0xeed20dd7UL, 0x5483044eUL, 0xc2b30339UL, 0x612667a7UL, 0xf71660d0UL,
- 0x4d476949UL, 0xdb776e3eUL, 0x4a6ad1aeUL, 0xdc5ad6d9UL, 0x660bdf40UL,
- 0xf03bd837UL, 0x53aebca9UL, 0xc59ebbdeUL, 0x7fcfb247UL, 0xe9ffb530UL,
- 0x1cf2bdbdUL, 0x8ac2bacaUL, 0x3093b353UL, 0xa6a3b424UL, 0x0536d0baUL,
- 0x9306d7cdUL, 0x2957de54UL, 0xbf67d923UL, 0x2e7a66b3UL, 0xb84a61c4UL,
- 0x021b685dUL, 0x942b6f2aUL, 0x37be0bb4UL, 0xa18e0cc3UL, 0x1bdf055aUL,
- 0x8def022dUL
- },
- {
- 0x00000000UL, 0x41311b19UL, 0x82623632UL, 0xc3532d2bUL, 0x04c56c64UL,
- 0x45f4777dUL, 0x86a75a56UL, 0xc796414fUL, 0x088ad9c8UL, 0x49bbc2d1UL,
- 0x8ae8effaUL, 0xcbd9f4e3UL, 0x0c4fb5acUL, 0x4d7eaeb5UL, 0x8e2d839eUL,
- 0xcf1c9887UL, 0x5112c24aUL, 0x1023d953UL, 0xd370f478UL, 0x9241ef61UL,
- 0x55d7ae2eUL, 0x14e6b537UL, 0xd7b5981cUL, 0x96848305UL, 0x59981b82UL,
- 0x18a9009bUL, 0xdbfa2db0UL, 0x9acb36a9UL, 0x5d5d77e6UL, 0x1c6c6cffUL,
- 0xdf3f41d4UL, 0x9e0e5acdUL, 0xa2248495UL, 0xe3159f8cUL, 0x2046b2a7UL,
- 0x6177a9beUL, 0xa6e1e8f1UL, 0xe7d0f3e8UL, 0x2483dec3UL, 0x65b2c5daUL,
- 0xaaae5d5dUL, 0xeb9f4644UL, 0x28cc6b6fUL, 0x69fd7076UL, 0xae6b3139UL,
- 0xef5a2a20UL, 0x2c09070bUL, 0x6d381c12UL, 0xf33646dfUL, 0xb2075dc6UL,
- 0x715470edUL, 0x30656bf4UL, 0xf7f32abbUL, 0xb6c231a2UL, 0x75911c89UL,
- 0x34a00790UL, 0xfbbc9f17UL, 0xba8d840eUL, 0x79dea925UL, 0x38efb23cUL,
- 0xff79f373UL, 0xbe48e86aUL, 0x7d1bc541UL, 0x3c2ade58UL, 0x054f79f0UL,
- 0x447e62e9UL, 0x872d4fc2UL, 0xc61c54dbUL, 0x018a1594UL, 0x40bb0e8dUL,
- 0x83e823a6UL, 0xc2d938bfUL, 0x0dc5a038UL, 0x4cf4bb21UL, 0x8fa7960aUL,
- 0xce968d13UL, 0x0900cc5cUL, 0x4831d745UL, 0x8b62fa6eUL, 0xca53e177UL,
- 0x545dbbbaUL, 0x156ca0a3UL, 0xd63f8d88UL, 0x970e9691UL, 0x5098d7deUL,
- 0x11a9ccc7UL, 0xd2fae1ecUL, 0x93cbfaf5UL, 0x5cd76272UL, 0x1de6796bUL,
- 0xdeb55440UL, 0x9f844f59UL, 0x58120e16UL, 0x1923150fUL, 0xda703824UL,
- 0x9b41233dUL, 0xa76bfd65UL, 0xe65ae67cUL, 0x2509cb57UL, 0x6438d04eUL,
- 0xa3ae9101UL, 0xe29f8a18UL, 0x21cca733UL, 0x60fdbc2aUL, 0xafe124adUL,
- 0xeed03fb4UL, 0x2d83129fUL, 0x6cb20986UL, 0xab2448c9UL, 0xea1553d0UL,
- 0x29467efbUL, 0x687765e2UL, 0xf6793f2fUL, 0xb7482436UL, 0x741b091dUL,
- 0x352a1204UL, 0xf2bc534bUL, 0xb38d4852UL, 0x70de6579UL, 0x31ef7e60UL,
- 0xfef3e6e7UL, 0xbfc2fdfeUL, 0x7c91d0d5UL, 0x3da0cbccUL, 0xfa368a83UL,
- 0xbb07919aUL, 0x7854bcb1UL, 0x3965a7a8UL, 0x4b98833bUL, 0x0aa99822UL,
- 0xc9fab509UL, 0x88cbae10UL, 0x4f5def5fUL, 0x0e6cf446UL, 0xcd3fd96dUL,
- 0x8c0ec274UL, 0x43125af3UL, 0x022341eaUL, 0xc1706cc1UL, 0x804177d8UL,
- 0x47d73697UL, 0x06e62d8eUL, 0xc5b500a5UL, 0x84841bbcUL, 0x1a8a4171UL,
- 0x5bbb5a68UL, 0x98e87743UL, 0xd9d96c5aUL, 0x1e4f2d15UL, 0x5f7e360cUL,
- 0x9c2d1b27UL, 0xdd1c003eUL, 0x120098b9UL, 0x533183a0UL, 0x9062ae8bUL,
- 0xd153b592UL, 0x16c5f4ddUL, 0x57f4efc4UL, 0x94a7c2efUL, 0xd596d9f6UL,
- 0xe9bc07aeUL, 0xa88d1cb7UL, 0x6bde319cUL, 0x2aef2a85UL, 0xed796bcaUL,
- 0xac4870d3UL, 0x6f1b5df8UL, 0x2e2a46e1UL, 0xe136de66UL, 0xa007c57fUL,
- 0x6354e854UL, 0x2265f34dUL, 0xe5f3b202UL, 0xa4c2a91bUL, 0x67918430UL,
- 0x26a09f29UL, 0xb8aec5e4UL, 0xf99fdefdUL, 0x3accf3d6UL, 0x7bfde8cfUL,
- 0xbc6ba980UL, 0xfd5ab299UL, 0x3e099fb2UL, 0x7f3884abUL, 0xb0241c2cUL,
- 0xf1150735UL, 0x32462a1eUL, 0x73773107UL, 0xb4e17048UL, 0xf5d06b51UL,
- 0x3683467aUL, 0x77b25d63UL, 0x4ed7facbUL, 0x0fe6e1d2UL, 0xccb5ccf9UL,
- 0x8d84d7e0UL, 0x4a1296afUL, 0x0b238db6UL, 0xc870a09dUL, 0x8941bb84UL,
- 0x465d2303UL, 0x076c381aUL, 0xc43f1531UL, 0x850e0e28UL, 0x42984f67UL,
- 0x03a9547eUL, 0xc0fa7955UL, 0x81cb624cUL, 0x1fc53881UL, 0x5ef42398UL,
- 0x9da70eb3UL, 0xdc9615aaUL, 0x1b0054e5UL, 0x5a314ffcUL, 0x996262d7UL,
- 0xd85379ceUL, 0x174fe149UL, 0x567efa50UL, 0x952dd77bUL, 0xd41ccc62UL,
- 0x138a8d2dUL, 0x52bb9634UL, 0x91e8bb1fUL, 0xd0d9a006UL, 0xecf37e5eUL,
- 0xadc26547UL, 0x6e91486cUL, 0x2fa05375UL, 0xe836123aUL, 0xa9070923UL,
- 0x6a542408UL, 0x2b653f11UL, 0xe479a796UL, 0xa548bc8fUL, 0x661b91a4UL,
- 0x272a8abdUL, 0xe0bccbf2UL, 0xa18dd0ebUL, 0x62defdc0UL, 0x23efe6d9UL,
- 0xbde1bc14UL, 0xfcd0a70dUL, 0x3f838a26UL, 0x7eb2913fUL, 0xb924d070UL,
- 0xf815cb69UL, 0x3b46e642UL, 0x7a77fd5bUL, 0xb56b65dcUL, 0xf45a7ec5UL,
- 0x370953eeUL, 0x763848f7UL, 0xb1ae09b8UL, 0xf09f12a1UL, 0x33cc3f8aUL,
- 0x72fd2493UL
- },
- {
- 0x00000000UL, 0x376ac201UL, 0x6ed48403UL, 0x59be4602UL, 0xdca80907UL,
- 0xebc2cb06UL, 0xb27c8d04UL, 0x85164f05UL, 0xb851130eUL, 0x8f3bd10fUL,
- 0xd685970dUL, 0xe1ef550cUL, 0x64f91a09UL, 0x5393d808UL, 0x0a2d9e0aUL,
- 0x3d475c0bUL, 0x70a3261cUL, 0x47c9e41dUL, 0x1e77a21fUL, 0x291d601eUL,
- 0xac0b2f1bUL, 0x9b61ed1aUL, 0xc2dfab18UL, 0xf5b56919UL, 0xc8f23512UL,
- 0xff98f713UL, 0xa626b111UL, 0x914c7310UL, 0x145a3c15UL, 0x2330fe14UL,
- 0x7a8eb816UL, 0x4de47a17UL, 0xe0464d38UL, 0xd72c8f39UL, 0x8e92c93bUL,
- 0xb9f80b3aUL, 0x3cee443fUL, 0x0b84863eUL, 0x523ac03cUL, 0x6550023dUL,
- 0x58175e36UL, 0x6f7d9c37UL, 0x36c3da35UL, 0x01a91834UL, 0x84bf5731UL,
- 0xb3d59530UL, 0xea6bd332UL, 0xdd011133UL, 0x90e56b24UL, 0xa78fa925UL,
- 0xfe31ef27UL, 0xc95b2d26UL, 0x4c4d6223UL, 0x7b27a022UL, 0x2299e620UL,
- 0x15f32421UL, 0x28b4782aUL, 0x1fdeba2bUL, 0x4660fc29UL, 0x710a3e28UL,
- 0xf41c712dUL, 0xc376b32cUL, 0x9ac8f52eUL, 0xada2372fUL, 0xc08d9a70UL,
- 0xf7e75871UL, 0xae591e73UL, 0x9933dc72UL, 0x1c259377UL, 0x2b4f5176UL,
- 0x72f11774UL, 0x459bd575UL, 0x78dc897eUL, 0x4fb64b7fUL, 0x16080d7dUL,
- 0x2162cf7cUL, 0xa4748079UL, 0x931e4278UL, 0xcaa0047aUL, 0xfdcac67bUL,
- 0xb02ebc6cUL, 0x87447e6dUL, 0xdefa386fUL, 0xe990fa6eUL, 0x6c86b56bUL,
- 0x5bec776aUL, 0x02523168UL, 0x3538f369UL, 0x087faf62UL, 0x3f156d63UL,
- 0x66ab2b61UL, 0x51c1e960UL, 0xd4d7a665UL, 0xe3bd6464UL, 0xba032266UL,
- 0x8d69e067UL, 0x20cbd748UL, 0x17a11549UL, 0x4e1f534bUL, 0x7975914aUL,
- 0xfc63de4fUL, 0xcb091c4eUL, 0x92b75a4cUL, 0xa5dd984dUL, 0x989ac446UL,
- 0xaff00647UL, 0xf64e4045UL, 0xc1248244UL, 0x4432cd41UL, 0x73580f40UL,
- 0x2ae64942UL, 0x1d8c8b43UL, 0x5068f154UL, 0x67023355UL, 0x3ebc7557UL,
- 0x09d6b756UL, 0x8cc0f853UL, 0xbbaa3a52UL, 0xe2147c50UL, 0xd57ebe51UL,
- 0xe839e25aUL, 0xdf53205bUL, 0x86ed6659UL, 0xb187a458UL, 0x3491eb5dUL,
- 0x03fb295cUL, 0x5a456f5eUL, 0x6d2fad5fUL, 0x801b35e1UL, 0xb771f7e0UL,
- 0xeecfb1e2UL, 0xd9a573e3UL, 0x5cb33ce6UL, 0x6bd9fee7UL, 0x3267b8e5UL,
- 0x050d7ae4UL, 0x384a26efUL, 0x0f20e4eeUL, 0x569ea2ecUL, 0x61f460edUL,
- 0xe4e22fe8UL, 0xd388ede9UL, 0x8a36abebUL, 0xbd5c69eaUL, 0xf0b813fdUL,
- 0xc7d2d1fcUL, 0x9e6c97feUL, 0xa90655ffUL, 0x2c101afaUL, 0x1b7ad8fbUL,
- 0x42c49ef9UL, 0x75ae5cf8UL, 0x48e900f3UL, 0x7f83c2f2UL, 0x263d84f0UL,
- 0x115746f1UL, 0x944109f4UL, 0xa32bcbf5UL, 0xfa958df7UL, 0xcdff4ff6UL,
- 0x605d78d9UL, 0x5737bad8UL, 0x0e89fcdaUL, 0x39e33edbUL, 0xbcf571deUL,
- 0x8b9fb3dfUL, 0xd221f5ddUL, 0xe54b37dcUL, 0xd80c6bd7UL, 0xef66a9d6UL,
- 0xb6d8efd4UL, 0x81b22dd5UL, 0x04a462d0UL, 0x33cea0d1UL, 0x6a70e6d3UL,
- 0x5d1a24d2UL, 0x10fe5ec5UL, 0x27949cc4UL, 0x7e2adac6UL, 0x494018c7UL,
- 0xcc5657c2UL, 0xfb3c95c3UL, 0xa282d3c1UL, 0x95e811c0UL, 0xa8af4dcbUL,
- 0x9fc58fcaUL, 0xc67bc9c8UL, 0xf1110bc9UL, 0x740744ccUL, 0x436d86cdUL,
- 0x1ad3c0cfUL, 0x2db902ceUL, 0x4096af91UL, 0x77fc6d90UL, 0x2e422b92UL,
- 0x1928e993UL, 0x9c3ea696UL, 0xab546497UL, 0xf2ea2295UL, 0xc580e094UL,
- 0xf8c7bc9fUL, 0xcfad7e9eUL, 0x9613389cUL, 0xa179fa9dUL, 0x246fb598UL,
- 0x13057799UL, 0x4abb319bUL, 0x7dd1f39aUL, 0x3035898dUL, 0x075f4b8cUL,
- 0x5ee10d8eUL, 0x698bcf8fUL, 0xec9d808aUL, 0xdbf7428bUL, 0x82490489UL,
- 0xb523c688UL, 0x88649a83UL, 0xbf0e5882UL, 0xe6b01e80UL, 0xd1dadc81UL,
- 0x54cc9384UL, 0x63a65185UL, 0x3a181787UL, 0x0d72d586UL, 0xa0d0e2a9UL,
- 0x97ba20a8UL, 0xce0466aaUL, 0xf96ea4abUL, 0x7c78ebaeUL, 0x4b1229afUL,
- 0x12ac6fadUL, 0x25c6adacUL, 0x1881f1a7UL, 0x2feb33a6UL, 0x765575a4UL,
- 0x413fb7a5UL, 0xc429f8a0UL, 0xf3433aa1UL, 0xaafd7ca3UL, 0x9d97bea2UL,
- 0xd073c4b5UL, 0xe71906b4UL, 0xbea740b6UL, 0x89cd82b7UL, 0x0cdbcdb2UL,
- 0x3bb10fb3UL, 0x620f49b1UL, 0x55658bb0UL, 0x6822d7bbUL, 0x5f4815baUL,
- 0x06f653b8UL, 0x319c91b9UL, 0xb48adebcUL, 0x83e01cbdUL, 0xda5e5abfUL,
- 0xed3498beUL
- },
- {
- 0x00000000UL, 0x6567bcb8UL, 0x8bc809aaUL, 0xeeafb512UL, 0x5797628fUL,
- 0x32f0de37UL, 0xdc5f6b25UL, 0xb938d79dUL, 0xef28b4c5UL, 0x8a4f087dUL,
- 0x64e0bd6fUL, 0x018701d7UL, 0xb8bfd64aUL, 0xddd86af2UL, 0x3377dfe0UL,
- 0x56106358UL, 0x9f571950UL, 0xfa30a5e8UL, 0x149f10faUL, 0x71f8ac42UL,
- 0xc8c07bdfUL, 0xada7c767UL, 0x43087275UL, 0x266fcecdUL, 0x707fad95UL,
- 0x1518112dUL, 0xfbb7a43fUL, 0x9ed01887UL, 0x27e8cf1aUL, 0x428f73a2UL,
- 0xac20c6b0UL, 0xc9477a08UL, 0x3eaf32a0UL, 0x5bc88e18UL, 0xb5673b0aUL,
- 0xd00087b2UL, 0x6938502fUL, 0x0c5fec97UL, 0xe2f05985UL, 0x8797e53dUL,
- 0xd1878665UL, 0xb4e03addUL, 0x5a4f8fcfUL, 0x3f283377UL, 0x8610e4eaUL,
- 0xe3775852UL, 0x0dd8ed40UL, 0x68bf51f8UL, 0xa1f82bf0UL, 0xc49f9748UL,
- 0x2a30225aUL, 0x4f579ee2UL, 0xf66f497fUL, 0x9308f5c7UL, 0x7da740d5UL,
- 0x18c0fc6dUL, 0x4ed09f35UL, 0x2bb7238dUL, 0xc518969fUL, 0xa07f2a27UL,
- 0x1947fdbaUL, 0x7c204102UL, 0x928ff410UL, 0xf7e848a8UL, 0x3d58149bUL,
- 0x583fa823UL, 0xb6901d31UL, 0xd3f7a189UL, 0x6acf7614UL, 0x0fa8caacUL,
- 0xe1077fbeUL, 0x8460c306UL, 0xd270a05eUL, 0xb7171ce6UL, 0x59b8a9f4UL,
- 0x3cdf154cUL, 0x85e7c2d1UL, 0xe0807e69UL, 0x0e2fcb7bUL, 0x6b4877c3UL,
- 0xa20f0dcbUL, 0xc768b173UL, 0x29c70461UL, 0x4ca0b8d9UL, 0xf5986f44UL,
- 0x90ffd3fcUL, 0x7e5066eeUL, 0x1b37da56UL, 0x4d27b90eUL, 0x284005b6UL,
- 0xc6efb0a4UL, 0xa3880c1cUL, 0x1ab0db81UL, 0x7fd76739UL, 0x9178d22bUL,
- 0xf41f6e93UL, 0x03f7263bUL, 0x66909a83UL, 0x883f2f91UL, 0xed589329UL,
- 0x546044b4UL, 0x3107f80cUL, 0xdfa84d1eUL, 0xbacff1a6UL, 0xecdf92feUL,
- 0x89b82e46UL, 0x67179b54UL, 0x027027ecUL, 0xbb48f071UL, 0xde2f4cc9UL,
- 0x3080f9dbUL, 0x55e74563UL, 0x9ca03f6bUL, 0xf9c783d3UL, 0x176836c1UL,
- 0x720f8a79UL, 0xcb375de4UL, 0xae50e15cUL, 0x40ff544eUL, 0x2598e8f6UL,
- 0x73888baeUL, 0x16ef3716UL, 0xf8408204UL, 0x9d273ebcUL, 0x241fe921UL,
- 0x41785599UL, 0xafd7e08bUL, 0xcab05c33UL, 0x3bb659edUL, 0x5ed1e555UL,
- 0xb07e5047UL, 0xd519ecffUL, 0x6c213b62UL, 0x094687daUL, 0xe7e932c8UL,
- 0x828e8e70UL, 0xd49eed28UL, 0xb1f95190UL, 0x5f56e482UL, 0x3a31583aUL,
- 0x83098fa7UL, 0xe66e331fUL, 0x08c1860dUL, 0x6da63ab5UL, 0xa4e140bdUL,
- 0xc186fc05UL, 0x2f294917UL, 0x4a4ef5afUL, 0xf3762232UL, 0x96119e8aUL,
- 0x78be2b98UL, 0x1dd99720UL, 0x4bc9f478UL, 0x2eae48c0UL, 0xc001fdd2UL,
- 0xa566416aUL, 0x1c5e96f7UL, 0x79392a4fUL, 0x97969f5dUL, 0xf2f123e5UL,
- 0x05196b4dUL, 0x607ed7f5UL, 0x8ed162e7UL, 0xebb6de5fUL, 0x528e09c2UL,
- 0x37e9b57aUL, 0xd9460068UL, 0xbc21bcd0UL, 0xea31df88UL, 0x8f566330UL,
- 0x61f9d622UL, 0x049e6a9aUL, 0xbda6bd07UL, 0xd8c101bfUL, 0x366eb4adUL,
- 0x53090815UL, 0x9a4e721dUL, 0xff29cea5UL, 0x11867bb7UL, 0x74e1c70fUL,
- 0xcdd91092UL, 0xa8beac2aUL, 0x46111938UL, 0x2376a580UL, 0x7566c6d8UL,
- 0x10017a60UL, 0xfeaecf72UL, 0x9bc973caUL, 0x22f1a457UL, 0x479618efUL,
- 0xa939adfdUL, 0xcc5e1145UL, 0x06ee4d76UL, 0x6389f1ceUL, 0x8d2644dcUL,
- 0xe841f864UL, 0x51792ff9UL, 0x341e9341UL, 0xdab12653UL, 0xbfd69aebUL,
- 0xe9c6f9b3UL, 0x8ca1450bUL, 0x620ef019UL, 0x07694ca1UL, 0xbe519b3cUL,
- 0xdb362784UL, 0x35999296UL, 0x50fe2e2eUL, 0x99b95426UL, 0xfcdee89eUL,
- 0x12715d8cUL, 0x7716e134UL, 0xce2e36a9UL, 0xab498a11UL, 0x45e63f03UL,
- 0x208183bbUL, 0x7691e0e3UL, 0x13f65c5bUL, 0xfd59e949UL, 0x983e55f1UL,
- 0x2106826cUL, 0x44613ed4UL, 0xaace8bc6UL, 0xcfa9377eUL, 0x38417fd6UL,
- 0x5d26c36eUL, 0xb389767cUL, 0xd6eecac4UL, 0x6fd61d59UL, 0x0ab1a1e1UL,
- 0xe41e14f3UL, 0x8179a84bUL, 0xd769cb13UL, 0xb20e77abUL, 0x5ca1c2b9UL,
- 0x39c67e01UL, 0x80fea99cUL, 0xe5991524UL, 0x0b36a036UL, 0x6e511c8eUL,
- 0xa7166686UL, 0xc271da3eUL, 0x2cde6f2cUL, 0x49b9d394UL, 0xf0810409UL,
- 0x95e6b8b1UL, 0x7b490da3UL, 0x1e2eb11bUL, 0x483ed243UL, 0x2d596efbUL,
- 0xc3f6dbe9UL, 0xa6916751UL, 0x1fa9b0ccUL, 0x7ace0c74UL, 0x9461b966UL,
- 0xf10605deUL
+local const z_crc_t FAR crc_table[] = {
+ 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419,
+ 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4,
+ 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07,
+ 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
+ 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856,
+ 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
+ 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4,
+ 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
+ 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3,
+ 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a,
+ 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599,
+ 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
+ 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190,
+ 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f,
+ 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e,
+ 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
+ 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed,
+ 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
+ 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3,
+ 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
+ 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a,
+ 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5,
+ 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010,
+ 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
+ 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17,
+ 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6,
+ 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615,
+ 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
+ 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344,
+ 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
+ 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a,
+ 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
+ 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1,
+ 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c,
+ 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef,
+ 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
+ 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe,
+ 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31,
+ 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c,
+ 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
+ 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b,
+ 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
+ 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1,
+ 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
+ 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278,
+ 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7,
+ 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66,
+ 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
+ 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605,
+ 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8,
+ 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b,
+ 0x2d02ef8d};
+
+#ifdef W
+
+#if W == 8
+
+local const z_word_t FAR crc_big_table[] = {
+ 0x0000000000000000, 0x9630077700000000, 0x2c610eee00000000,
+ 0xba51099900000000, 0x19c46d0700000000, 0x8ff46a7000000000,
+ 0x35a563e900000000, 0xa395649e00000000, 0x3288db0e00000000,
+ 0xa4b8dc7900000000, 0x1ee9d5e000000000, 0x88d9d29700000000,
+ 0x2b4cb60900000000, 0xbd7cb17e00000000, 0x072db8e700000000,
+ 0x911dbf9000000000, 0x6410b71d00000000, 0xf220b06a00000000,
+ 0x4871b9f300000000, 0xde41be8400000000, 0x7dd4da1a00000000,
+ 0xebe4dd6d00000000, 0x51b5d4f400000000, 0xc785d38300000000,
+ 0x56986c1300000000, 0xc0a86b6400000000, 0x7af962fd00000000,
+ 0xecc9658a00000000, 0x4f5c011400000000, 0xd96c066300000000,
+ 0x633d0ffa00000000, 0xf50d088d00000000, 0xc8206e3b00000000,
+ 0x5e10694c00000000, 0xe44160d500000000, 0x727167a200000000,
+ 0xd1e4033c00000000, 0x47d4044b00000000, 0xfd850dd200000000,
+ 0x6bb50aa500000000, 0xfaa8b53500000000, 0x6c98b24200000000,
+ 0xd6c9bbdb00000000, 0x40f9bcac00000000, 0xe36cd83200000000,
+ 0x755cdf4500000000, 0xcf0dd6dc00000000, 0x593dd1ab00000000,
+ 0xac30d92600000000, 0x3a00de5100000000, 0x8051d7c800000000,
+ 0x1661d0bf00000000, 0xb5f4b42100000000, 0x23c4b35600000000,
+ 0x9995bacf00000000, 0x0fa5bdb800000000, 0x9eb8022800000000,
+ 0x0888055f00000000, 0xb2d90cc600000000, 0x24e90bb100000000,
+ 0x877c6f2f00000000, 0x114c685800000000, 0xab1d61c100000000,
+ 0x3d2d66b600000000, 0x9041dc7600000000, 0x0671db0100000000,
+ 0xbc20d29800000000, 0x2a10d5ef00000000, 0x8985b17100000000,
+ 0x1fb5b60600000000, 0xa5e4bf9f00000000, 0x33d4b8e800000000,
+ 0xa2c9077800000000, 0x34f9000f00000000, 0x8ea8099600000000,
+ 0x18980ee100000000, 0xbb0d6a7f00000000, 0x2d3d6d0800000000,
+ 0x976c649100000000, 0x015c63e600000000, 0xf4516b6b00000000,
+ 0x62616c1c00000000, 0xd830658500000000, 0x4e0062f200000000,
+ 0xed95066c00000000, 0x7ba5011b00000000, 0xc1f4088200000000,
+ 0x57c40ff500000000, 0xc6d9b06500000000, 0x50e9b71200000000,
+ 0xeab8be8b00000000, 0x7c88b9fc00000000, 0xdf1ddd6200000000,
+ 0x492dda1500000000, 0xf37cd38c00000000, 0x654cd4fb00000000,
+ 0x5861b24d00000000, 0xce51b53a00000000, 0x7400bca300000000,
+ 0xe230bbd400000000, 0x41a5df4a00000000, 0xd795d83d00000000,
+ 0x6dc4d1a400000000, 0xfbf4d6d300000000, 0x6ae9694300000000,
+ 0xfcd96e3400000000, 0x468867ad00000000, 0xd0b860da00000000,
+ 0x732d044400000000, 0xe51d033300000000, 0x5f4c0aaa00000000,
+ 0xc97c0ddd00000000, 0x3c71055000000000, 0xaa41022700000000,
+ 0x10100bbe00000000, 0x86200cc900000000, 0x25b5685700000000,
+ 0xb3856f2000000000, 0x09d466b900000000, 0x9fe461ce00000000,
+ 0x0ef9de5e00000000, 0x98c9d92900000000, 0x2298d0b000000000,
+ 0xb4a8d7c700000000, 0x173db35900000000, 0x810db42e00000000,
+ 0x3b5cbdb700000000, 0xad6cbac000000000, 0x2083b8ed00000000,
+ 0xb6b3bf9a00000000, 0x0ce2b60300000000, 0x9ad2b17400000000,
+ 0x3947d5ea00000000, 0xaf77d29d00000000, 0x1526db0400000000,
+ 0x8316dc7300000000, 0x120b63e300000000, 0x843b649400000000,
+ 0x3e6a6d0d00000000, 0xa85a6a7a00000000, 0x0bcf0ee400000000,
+ 0x9dff099300000000, 0x27ae000a00000000, 0xb19e077d00000000,
+ 0x44930ff000000000, 0xd2a3088700000000, 0x68f2011e00000000,
+ 0xfec2066900000000, 0x5d5762f700000000, 0xcb67658000000000,
+ 0x71366c1900000000, 0xe7066b6e00000000, 0x761bd4fe00000000,
+ 0xe02bd38900000000, 0x5a7ada1000000000, 0xcc4add6700000000,
+ 0x6fdfb9f900000000, 0xf9efbe8e00000000, 0x43beb71700000000,
+ 0xd58eb06000000000, 0xe8a3d6d600000000, 0x7e93d1a100000000,
+ 0xc4c2d83800000000, 0x52f2df4f00000000, 0xf167bbd100000000,
+ 0x6757bca600000000, 0xdd06b53f00000000, 0x4b36b24800000000,
+ 0xda2b0dd800000000, 0x4c1b0aaf00000000, 0xf64a033600000000,
+ 0x607a044100000000, 0xc3ef60df00000000, 0x55df67a800000000,
+ 0xef8e6e3100000000, 0x79be694600000000, 0x8cb361cb00000000,
+ 0x1a8366bc00000000, 0xa0d26f2500000000, 0x36e2685200000000,
+ 0x95770ccc00000000, 0x03470bbb00000000, 0xb916022200000000,
+ 0x2f26055500000000, 0xbe3bbac500000000, 0x280bbdb200000000,
+ 0x925ab42b00000000, 0x046ab35c00000000, 0xa7ffd7c200000000,
+ 0x31cfd0b500000000, 0x8b9ed92c00000000, 0x1daede5b00000000,
+ 0xb0c2649b00000000, 0x26f263ec00000000, 0x9ca36a7500000000,
+ 0x0a936d0200000000, 0xa906099c00000000, 0x3f360eeb00000000,
+ 0x8567077200000000, 0x1357000500000000, 0x824abf9500000000,
+ 0x147ab8e200000000, 0xae2bb17b00000000, 0x381bb60c00000000,
+ 0x9b8ed29200000000, 0x0dbed5e500000000, 0xb7efdc7c00000000,
+ 0x21dfdb0b00000000, 0xd4d2d38600000000, 0x42e2d4f100000000,
+ 0xf8b3dd6800000000, 0x6e83da1f00000000, 0xcd16be8100000000,
+ 0x5b26b9f600000000, 0xe177b06f00000000, 0x7747b71800000000,
+ 0xe65a088800000000, 0x706a0fff00000000, 0xca3b066600000000,
+ 0x5c0b011100000000, 0xff9e658f00000000, 0x69ae62f800000000,
+ 0xd3ff6b6100000000, 0x45cf6c1600000000, 0x78e20aa000000000,
+ 0xeed20dd700000000, 0x5483044e00000000, 0xc2b3033900000000,
+ 0x612667a700000000, 0xf71660d000000000, 0x4d47694900000000,
+ 0xdb776e3e00000000, 0x4a6ad1ae00000000, 0xdc5ad6d900000000,
+ 0x660bdf4000000000, 0xf03bd83700000000, 0x53aebca900000000,
+ 0xc59ebbde00000000, 0x7fcfb24700000000, 0xe9ffb53000000000,
+ 0x1cf2bdbd00000000, 0x8ac2baca00000000, 0x3093b35300000000,
+ 0xa6a3b42400000000, 0x0536d0ba00000000, 0x9306d7cd00000000,
+ 0x2957de5400000000, 0xbf67d92300000000, 0x2e7a66b300000000,
+ 0xb84a61c400000000, 0x021b685d00000000, 0x942b6f2a00000000,
+ 0x37be0bb400000000, 0xa18e0cc300000000, 0x1bdf055a00000000,
+ 0x8def022d00000000};
+
+#else /* W == 4 */
+
+local const z_word_t FAR crc_big_table[] = {
+ 0x00000000, 0x96300777, 0x2c610eee, 0xba510999, 0x19c46d07,
+ 0x8ff46a70, 0x35a563e9, 0xa395649e, 0x3288db0e, 0xa4b8dc79,
+ 0x1ee9d5e0, 0x88d9d297, 0x2b4cb609, 0xbd7cb17e, 0x072db8e7,
+ 0x911dbf90, 0x6410b71d, 0xf220b06a, 0x4871b9f3, 0xde41be84,
+ 0x7dd4da1a, 0xebe4dd6d, 0x51b5d4f4, 0xc785d383, 0x56986c13,
+ 0xc0a86b64, 0x7af962fd, 0xecc9658a, 0x4f5c0114, 0xd96c0663,
+ 0x633d0ffa, 0xf50d088d, 0xc8206e3b, 0x5e10694c, 0xe44160d5,
+ 0x727167a2, 0xd1e4033c, 0x47d4044b, 0xfd850dd2, 0x6bb50aa5,
+ 0xfaa8b535, 0x6c98b242, 0xd6c9bbdb, 0x40f9bcac, 0xe36cd832,
+ 0x755cdf45, 0xcf0dd6dc, 0x593dd1ab, 0xac30d926, 0x3a00de51,
+ 0x8051d7c8, 0x1661d0bf, 0xb5f4b421, 0x23c4b356, 0x9995bacf,
+ 0x0fa5bdb8, 0x9eb80228, 0x0888055f, 0xb2d90cc6, 0x24e90bb1,
+ 0x877c6f2f, 0x114c6858, 0xab1d61c1, 0x3d2d66b6, 0x9041dc76,
+ 0x0671db01, 0xbc20d298, 0x2a10d5ef, 0x8985b171, 0x1fb5b606,
+ 0xa5e4bf9f, 0x33d4b8e8, 0xa2c90778, 0x34f9000f, 0x8ea80996,
+ 0x18980ee1, 0xbb0d6a7f, 0x2d3d6d08, 0x976c6491, 0x015c63e6,
+ 0xf4516b6b, 0x62616c1c, 0xd8306585, 0x4e0062f2, 0xed95066c,
+ 0x7ba5011b, 0xc1f40882, 0x57c40ff5, 0xc6d9b065, 0x50e9b712,
+ 0xeab8be8b, 0x7c88b9fc, 0xdf1ddd62, 0x492dda15, 0xf37cd38c,
+ 0x654cd4fb, 0x5861b24d, 0xce51b53a, 0x7400bca3, 0xe230bbd4,
+ 0x41a5df4a, 0xd795d83d, 0x6dc4d1a4, 0xfbf4d6d3, 0x6ae96943,
+ 0xfcd96e34, 0x468867ad, 0xd0b860da, 0x732d0444, 0xe51d0333,
+ 0x5f4c0aaa, 0xc97c0ddd, 0x3c710550, 0xaa410227, 0x10100bbe,
+ 0x86200cc9, 0x25b56857, 0xb3856f20, 0x09d466b9, 0x9fe461ce,
+ 0x0ef9de5e, 0x98c9d929, 0x2298d0b0, 0xb4a8d7c7, 0x173db359,
+ 0x810db42e, 0x3b5cbdb7, 0xad6cbac0, 0x2083b8ed, 0xb6b3bf9a,
+ 0x0ce2b603, 0x9ad2b174, 0x3947d5ea, 0xaf77d29d, 0x1526db04,
+ 0x8316dc73, 0x120b63e3, 0x843b6494, 0x3e6a6d0d, 0xa85a6a7a,
+ 0x0bcf0ee4, 0x9dff0993, 0x27ae000a, 0xb19e077d, 0x44930ff0,
+ 0xd2a30887, 0x68f2011e, 0xfec20669, 0x5d5762f7, 0xcb676580,
+ 0x71366c19, 0xe7066b6e, 0x761bd4fe, 0xe02bd389, 0x5a7ada10,
+ 0xcc4add67, 0x6fdfb9f9, 0xf9efbe8e, 0x43beb717, 0xd58eb060,
+ 0xe8a3d6d6, 0x7e93d1a1, 0xc4c2d838, 0x52f2df4f, 0xf167bbd1,
+ 0x6757bca6, 0xdd06b53f, 0x4b36b248, 0xda2b0dd8, 0x4c1b0aaf,
+ 0xf64a0336, 0x607a0441, 0xc3ef60df, 0x55df67a8, 0xef8e6e31,
+ 0x79be6946, 0x8cb361cb, 0x1a8366bc, 0xa0d26f25, 0x36e26852,
+ 0x95770ccc, 0x03470bbb, 0xb9160222, 0x2f260555, 0xbe3bbac5,
+ 0x280bbdb2, 0x925ab42b, 0x046ab35c, 0xa7ffd7c2, 0x31cfd0b5,
+ 0x8b9ed92c, 0x1daede5b, 0xb0c2649b, 0x26f263ec, 0x9ca36a75,
+ 0x0a936d02, 0xa906099c, 0x3f360eeb, 0x85670772, 0x13570005,
+ 0x824abf95, 0x147ab8e2, 0xae2bb17b, 0x381bb60c, 0x9b8ed292,
+ 0x0dbed5e5, 0xb7efdc7c, 0x21dfdb0b, 0xd4d2d386, 0x42e2d4f1,
+ 0xf8b3dd68, 0x6e83da1f, 0xcd16be81, 0x5b26b9f6, 0xe177b06f,
+ 0x7747b718, 0xe65a0888, 0x706a0fff, 0xca3b0666, 0x5c0b0111,
+ 0xff9e658f, 0x69ae62f8, 0xd3ff6b61, 0x45cf6c16, 0x78e20aa0,
+ 0xeed20dd7, 0x5483044e, 0xc2b30339, 0x612667a7, 0xf71660d0,
+ 0x4d476949, 0xdb776e3e, 0x4a6ad1ae, 0xdc5ad6d9, 0x660bdf40,
+ 0xf03bd837, 0x53aebca9, 0xc59ebbde, 0x7fcfb247, 0xe9ffb530,
+ 0x1cf2bdbd, 0x8ac2baca, 0x3093b353, 0xa6a3b424, 0x0536d0ba,
+ 0x9306d7cd, 0x2957de54, 0xbf67d923, 0x2e7a66b3, 0xb84a61c4,
+ 0x021b685d, 0x942b6f2a, 0x37be0bb4, 0xa18e0cc3, 0x1bdf055a,
+ 0x8def022d};
+
+#endif
+
+#if N == 1
+
+#if W == 8
+
+local const z_crc_t FAR crc_braid_table[][256] = {
+ {0x00000000, 0xccaa009e, 0x4225077d, 0x8e8f07e3, 0x844a0efa,
+ 0x48e00e64, 0xc66f0987, 0x0ac50919, 0xd3e51bb5, 0x1f4f1b2b,
+ 0x91c01cc8, 0x5d6a1c56, 0x57af154f, 0x9b0515d1, 0x158a1232,
+ 0xd92012ac, 0x7cbb312b, 0xb01131b5, 0x3e9e3656, 0xf23436c8,
+ 0xf8f13fd1, 0x345b3f4f, 0xbad438ac, 0x767e3832, 0xaf5e2a9e,
+ 0x63f42a00, 0xed7b2de3, 0x21d12d7d, 0x2b142464, 0xe7be24fa,
+ 0x69312319, 0xa59b2387, 0xf9766256, 0x35dc62c8, 0xbb53652b,
+ 0x77f965b5, 0x7d3c6cac, 0xb1966c32, 0x3f196bd1, 0xf3b36b4f,
+ 0x2a9379e3, 0xe639797d, 0x68b67e9e, 0xa41c7e00, 0xaed97719,
+ 0x62737787, 0xecfc7064, 0x205670fa, 0x85cd537d, 0x496753e3,
+ 0xc7e85400, 0x0b42549e, 0x01875d87, 0xcd2d5d19, 0x43a25afa,
+ 0x8f085a64, 0x562848c8, 0x9a824856, 0x140d4fb5, 0xd8a74f2b,
+ 0xd2624632, 0x1ec846ac, 0x9047414f, 0x5ced41d1, 0x299dc2ed,
+ 0xe537c273, 0x6bb8c590, 0xa712c50e, 0xadd7cc17, 0x617dcc89,
+ 0xeff2cb6a, 0x2358cbf4, 0xfa78d958, 0x36d2d9c6, 0xb85dde25,
+ 0x74f7debb, 0x7e32d7a2, 0xb298d73c, 0x3c17d0df, 0xf0bdd041,
+ 0x5526f3c6, 0x998cf358, 0x1703f4bb, 0xdba9f425, 0xd16cfd3c,
+ 0x1dc6fda2, 0x9349fa41, 0x5fe3fadf, 0x86c3e873, 0x4a69e8ed,
+ 0xc4e6ef0e, 0x084cef90, 0x0289e689, 0xce23e617, 0x40ace1f4,
+ 0x8c06e16a, 0xd0eba0bb, 0x1c41a025, 0x92cea7c6, 0x5e64a758,
+ 0x54a1ae41, 0x980baedf, 0x1684a93c, 0xda2ea9a2, 0x030ebb0e,
+ 0xcfa4bb90, 0x412bbc73, 0x8d81bced, 0x8744b5f4, 0x4beeb56a,
+ 0xc561b289, 0x09cbb217, 0xac509190, 0x60fa910e, 0xee7596ed,
+ 0x22df9673, 0x281a9f6a, 0xe4b09ff4, 0x6a3f9817, 0xa6959889,
+ 0x7fb58a25, 0xb31f8abb, 0x3d908d58, 0xf13a8dc6, 0xfbff84df,
+ 0x37558441, 0xb9da83a2, 0x7570833c, 0x533b85da, 0x9f918544,
+ 0x111e82a7, 0xddb48239, 0xd7718b20, 0x1bdb8bbe, 0x95548c5d,
+ 0x59fe8cc3, 0x80de9e6f, 0x4c749ef1, 0xc2fb9912, 0x0e51998c,
+ 0x04949095, 0xc83e900b, 0x46b197e8, 0x8a1b9776, 0x2f80b4f1,
+ 0xe32ab46f, 0x6da5b38c, 0xa10fb312, 0xabcaba0b, 0x6760ba95,
+ 0xe9efbd76, 0x2545bde8, 0xfc65af44, 0x30cfafda, 0xbe40a839,
+ 0x72eaa8a7, 0x782fa1be, 0xb485a120, 0x3a0aa6c3, 0xf6a0a65d,
+ 0xaa4de78c, 0x66e7e712, 0xe868e0f1, 0x24c2e06f, 0x2e07e976,
+ 0xe2ade9e8, 0x6c22ee0b, 0xa088ee95, 0x79a8fc39, 0xb502fca7,
+ 0x3b8dfb44, 0xf727fbda, 0xfde2f2c3, 0x3148f25d, 0xbfc7f5be,
+ 0x736df520, 0xd6f6d6a7, 0x1a5cd639, 0x94d3d1da, 0x5879d144,
+ 0x52bcd85d, 0x9e16d8c3, 0x1099df20, 0xdc33dfbe, 0x0513cd12,
+ 0xc9b9cd8c, 0x4736ca6f, 0x8b9ccaf1, 0x8159c3e8, 0x4df3c376,
+ 0xc37cc495, 0x0fd6c40b, 0x7aa64737, 0xb60c47a9, 0x3883404a,
+ 0xf42940d4, 0xfeec49cd, 0x32464953, 0xbcc94eb0, 0x70634e2e,
+ 0xa9435c82, 0x65e95c1c, 0xeb665bff, 0x27cc5b61, 0x2d095278,
+ 0xe1a352e6, 0x6f2c5505, 0xa386559b, 0x061d761c, 0xcab77682,
+ 0x44387161, 0x889271ff, 0x825778e6, 0x4efd7878, 0xc0727f9b,
+ 0x0cd87f05, 0xd5f86da9, 0x19526d37, 0x97dd6ad4, 0x5b776a4a,
+ 0x51b26353, 0x9d1863cd, 0x1397642e, 0xdf3d64b0, 0x83d02561,
+ 0x4f7a25ff, 0xc1f5221c, 0x0d5f2282, 0x079a2b9b, 0xcb302b05,
+ 0x45bf2ce6, 0x89152c78, 0x50353ed4, 0x9c9f3e4a, 0x121039a9,
+ 0xdeba3937, 0xd47f302e, 0x18d530b0, 0x965a3753, 0x5af037cd,
+ 0xff6b144a, 0x33c114d4, 0xbd4e1337, 0x71e413a9, 0x7b211ab0,
+ 0xb78b1a2e, 0x39041dcd, 0xf5ae1d53, 0x2c8e0fff, 0xe0240f61,
+ 0x6eab0882, 0xa201081c, 0xa8c40105, 0x646e019b, 0xeae10678,
+ 0x264b06e6},
+ {0x00000000, 0xa6770bb4, 0x979f1129, 0x31e81a9d, 0xf44f2413,
+ 0x52382fa7, 0x63d0353a, 0xc5a73e8e, 0x33ef4e67, 0x959845d3,
+ 0xa4705f4e, 0x020754fa, 0xc7a06a74, 0x61d761c0, 0x503f7b5d,
+ 0xf64870e9, 0x67de9cce, 0xc1a9977a, 0xf0418de7, 0x56368653,
+ 0x9391b8dd, 0x35e6b369, 0x040ea9f4, 0xa279a240, 0x5431d2a9,
+ 0xf246d91d, 0xc3aec380, 0x65d9c834, 0xa07ef6ba, 0x0609fd0e,
+ 0x37e1e793, 0x9196ec27, 0xcfbd399c, 0x69ca3228, 0x582228b5,
+ 0xfe552301, 0x3bf21d8f, 0x9d85163b, 0xac6d0ca6, 0x0a1a0712,
+ 0xfc5277fb, 0x5a257c4f, 0x6bcd66d2, 0xcdba6d66, 0x081d53e8,
+ 0xae6a585c, 0x9f8242c1, 0x39f54975, 0xa863a552, 0x0e14aee6,
+ 0x3ffcb47b, 0x998bbfcf, 0x5c2c8141, 0xfa5b8af5, 0xcbb39068,
+ 0x6dc49bdc, 0x9b8ceb35, 0x3dfbe081, 0x0c13fa1c, 0xaa64f1a8,
+ 0x6fc3cf26, 0xc9b4c492, 0xf85cde0f, 0x5e2bd5bb, 0x440b7579,
+ 0xe27c7ecd, 0xd3946450, 0x75e36fe4, 0xb044516a, 0x16335ade,
+ 0x27db4043, 0x81ac4bf7, 0x77e43b1e, 0xd19330aa, 0xe07b2a37,
+ 0x460c2183, 0x83ab1f0d, 0x25dc14b9, 0x14340e24, 0xb2430590,
+ 0x23d5e9b7, 0x85a2e203, 0xb44af89e, 0x123df32a, 0xd79acda4,
+ 0x71edc610, 0x4005dc8d, 0xe672d739, 0x103aa7d0, 0xb64dac64,
+ 0x87a5b6f9, 0x21d2bd4d, 0xe47583c3, 0x42028877, 0x73ea92ea,
+ 0xd59d995e, 0x8bb64ce5, 0x2dc14751, 0x1c295dcc, 0xba5e5678,
+ 0x7ff968f6, 0xd98e6342, 0xe86679df, 0x4e11726b, 0xb8590282,
+ 0x1e2e0936, 0x2fc613ab, 0x89b1181f, 0x4c162691, 0xea612d25,
+ 0xdb8937b8, 0x7dfe3c0c, 0xec68d02b, 0x4a1fdb9f, 0x7bf7c102,
+ 0xdd80cab6, 0x1827f438, 0xbe50ff8c, 0x8fb8e511, 0x29cfeea5,
+ 0xdf879e4c, 0x79f095f8, 0x48188f65, 0xee6f84d1, 0x2bc8ba5f,
+ 0x8dbfb1eb, 0xbc57ab76, 0x1a20a0c2, 0x8816eaf2, 0x2e61e146,
+ 0x1f89fbdb, 0xb9fef06f, 0x7c59cee1, 0xda2ec555, 0xebc6dfc8,
+ 0x4db1d47c, 0xbbf9a495, 0x1d8eaf21, 0x2c66b5bc, 0x8a11be08,
+ 0x4fb68086, 0xe9c18b32, 0xd82991af, 0x7e5e9a1b, 0xefc8763c,
+ 0x49bf7d88, 0x78576715, 0xde206ca1, 0x1b87522f, 0xbdf0599b,
+ 0x8c184306, 0x2a6f48b2, 0xdc27385b, 0x7a5033ef, 0x4bb82972,
+ 0xedcf22c6, 0x28681c48, 0x8e1f17fc, 0xbff70d61, 0x198006d5,
+ 0x47abd36e, 0xe1dcd8da, 0xd034c247, 0x7643c9f3, 0xb3e4f77d,
+ 0x1593fcc9, 0x247be654, 0x820cede0, 0x74449d09, 0xd23396bd,
+ 0xe3db8c20, 0x45ac8794, 0x800bb91a, 0x267cb2ae, 0x1794a833,
+ 0xb1e3a387, 0x20754fa0, 0x86024414, 0xb7ea5e89, 0x119d553d,
+ 0xd43a6bb3, 0x724d6007, 0x43a57a9a, 0xe5d2712e, 0x139a01c7,
+ 0xb5ed0a73, 0x840510ee, 0x22721b5a, 0xe7d525d4, 0x41a22e60,
+ 0x704a34fd, 0xd63d3f49, 0xcc1d9f8b, 0x6a6a943f, 0x5b828ea2,
+ 0xfdf58516, 0x3852bb98, 0x9e25b02c, 0xafcdaab1, 0x09baa105,
+ 0xfff2d1ec, 0x5985da58, 0x686dc0c5, 0xce1acb71, 0x0bbdf5ff,
+ 0xadcafe4b, 0x9c22e4d6, 0x3a55ef62, 0xabc30345, 0x0db408f1,
+ 0x3c5c126c, 0x9a2b19d8, 0x5f8c2756, 0xf9fb2ce2, 0xc813367f,
+ 0x6e643dcb, 0x982c4d22, 0x3e5b4696, 0x0fb35c0b, 0xa9c457bf,
+ 0x6c636931, 0xca146285, 0xfbfc7818, 0x5d8b73ac, 0x03a0a617,
+ 0xa5d7ada3, 0x943fb73e, 0x3248bc8a, 0xf7ef8204, 0x519889b0,
+ 0x6070932d, 0xc6079899, 0x304fe870, 0x9638e3c4, 0xa7d0f959,
+ 0x01a7f2ed, 0xc400cc63, 0x6277c7d7, 0x539fdd4a, 0xf5e8d6fe,
+ 0x647e3ad9, 0xc209316d, 0xf3e12bf0, 0x55962044, 0x90311eca,
+ 0x3646157e, 0x07ae0fe3, 0xa1d90457, 0x579174be, 0xf1e67f0a,
+ 0xc00e6597, 0x66796e23, 0xa3de50ad, 0x05a95b19, 0x34414184,
+ 0x92364a30},
+ {0x00000000, 0xcb5cd3a5, 0x4dc8a10b, 0x869472ae, 0x9b914216,
+ 0x50cd91b3, 0xd659e31d, 0x1d0530b8, 0xec53826d, 0x270f51c8,
+ 0xa19b2366, 0x6ac7f0c3, 0x77c2c07b, 0xbc9e13de, 0x3a0a6170,
+ 0xf156b2d5, 0x03d6029b, 0xc88ad13e, 0x4e1ea390, 0x85427035,
+ 0x9847408d, 0x531b9328, 0xd58fe186, 0x1ed33223, 0xef8580f6,
+ 0x24d95353, 0xa24d21fd, 0x6911f258, 0x7414c2e0, 0xbf481145,
+ 0x39dc63eb, 0xf280b04e, 0x07ac0536, 0xccf0d693, 0x4a64a43d,
+ 0x81387798, 0x9c3d4720, 0x57619485, 0xd1f5e62b, 0x1aa9358e,
+ 0xebff875b, 0x20a354fe, 0xa6372650, 0x6d6bf5f5, 0x706ec54d,
+ 0xbb3216e8, 0x3da66446, 0xf6fab7e3, 0x047a07ad, 0xcf26d408,
+ 0x49b2a6a6, 0x82ee7503, 0x9feb45bb, 0x54b7961e, 0xd223e4b0,
+ 0x197f3715, 0xe82985c0, 0x23755665, 0xa5e124cb, 0x6ebdf76e,
+ 0x73b8c7d6, 0xb8e41473, 0x3e7066dd, 0xf52cb578, 0x0f580a6c,
+ 0xc404d9c9, 0x4290ab67, 0x89cc78c2, 0x94c9487a, 0x5f959bdf,
+ 0xd901e971, 0x125d3ad4, 0xe30b8801, 0x28575ba4, 0xaec3290a,
+ 0x659ffaaf, 0x789aca17, 0xb3c619b2, 0x35526b1c, 0xfe0eb8b9,
+ 0x0c8e08f7, 0xc7d2db52, 0x4146a9fc, 0x8a1a7a59, 0x971f4ae1,
+ 0x5c439944, 0xdad7ebea, 0x118b384f, 0xe0dd8a9a, 0x2b81593f,
+ 0xad152b91, 0x6649f834, 0x7b4cc88c, 0xb0101b29, 0x36846987,
+ 0xfdd8ba22, 0x08f40f5a, 0xc3a8dcff, 0x453cae51, 0x8e607df4,
+ 0x93654d4c, 0x58399ee9, 0xdeadec47, 0x15f13fe2, 0xe4a78d37,
+ 0x2ffb5e92, 0xa96f2c3c, 0x6233ff99, 0x7f36cf21, 0xb46a1c84,
+ 0x32fe6e2a, 0xf9a2bd8f, 0x0b220dc1, 0xc07ede64, 0x46eaacca,
+ 0x8db67f6f, 0x90b34fd7, 0x5bef9c72, 0xdd7beedc, 0x16273d79,
+ 0xe7718fac, 0x2c2d5c09, 0xaab92ea7, 0x61e5fd02, 0x7ce0cdba,
+ 0xb7bc1e1f, 0x31286cb1, 0xfa74bf14, 0x1eb014d8, 0xd5ecc77d,
+ 0x5378b5d3, 0x98246676, 0x852156ce, 0x4e7d856b, 0xc8e9f7c5,
+ 0x03b52460, 0xf2e396b5, 0x39bf4510, 0xbf2b37be, 0x7477e41b,
+ 0x6972d4a3, 0xa22e0706, 0x24ba75a8, 0xefe6a60d, 0x1d661643,
+ 0xd63ac5e6, 0x50aeb748, 0x9bf264ed, 0x86f75455, 0x4dab87f0,
+ 0xcb3ff55e, 0x006326fb, 0xf135942e, 0x3a69478b, 0xbcfd3525,
+ 0x77a1e680, 0x6aa4d638, 0xa1f8059d, 0x276c7733, 0xec30a496,
+ 0x191c11ee, 0xd240c24b, 0x54d4b0e5, 0x9f886340, 0x828d53f8,
+ 0x49d1805d, 0xcf45f2f3, 0x04192156, 0xf54f9383, 0x3e134026,
+ 0xb8873288, 0x73dbe12d, 0x6eded195, 0xa5820230, 0x2316709e,
+ 0xe84aa33b, 0x1aca1375, 0xd196c0d0, 0x5702b27e, 0x9c5e61db,
+ 0x815b5163, 0x4a0782c6, 0xcc93f068, 0x07cf23cd, 0xf6999118,
+ 0x3dc542bd, 0xbb513013, 0x700de3b6, 0x6d08d30e, 0xa65400ab,
+ 0x20c07205, 0xeb9ca1a0, 0x11e81eb4, 0xdab4cd11, 0x5c20bfbf,
+ 0x977c6c1a, 0x8a795ca2, 0x41258f07, 0xc7b1fda9, 0x0ced2e0c,
+ 0xfdbb9cd9, 0x36e74f7c, 0xb0733dd2, 0x7b2fee77, 0x662adecf,
+ 0xad760d6a, 0x2be27fc4, 0xe0beac61, 0x123e1c2f, 0xd962cf8a,
+ 0x5ff6bd24, 0x94aa6e81, 0x89af5e39, 0x42f38d9c, 0xc467ff32,
+ 0x0f3b2c97, 0xfe6d9e42, 0x35314de7, 0xb3a53f49, 0x78f9ecec,
+ 0x65fcdc54, 0xaea00ff1, 0x28347d5f, 0xe368aefa, 0x16441b82,
+ 0xdd18c827, 0x5b8cba89, 0x90d0692c, 0x8dd55994, 0x46898a31,
+ 0xc01df89f, 0x0b412b3a, 0xfa1799ef, 0x314b4a4a, 0xb7df38e4,
+ 0x7c83eb41, 0x6186dbf9, 0xaada085c, 0x2c4e7af2, 0xe712a957,
+ 0x15921919, 0xdececabc, 0x585ab812, 0x93066bb7, 0x8e035b0f,
+ 0x455f88aa, 0xc3cbfa04, 0x089729a1, 0xf9c19b74, 0x329d48d1,
+ 0xb4093a7f, 0x7f55e9da, 0x6250d962, 0xa90c0ac7, 0x2f987869,
+ 0xe4c4abcc},
+ {0x00000000, 0x3d6029b0, 0x7ac05360, 0x47a07ad0, 0xf580a6c0,
+ 0xc8e08f70, 0x8f40f5a0, 0xb220dc10, 0x30704bc1, 0x0d106271,
+ 0x4ab018a1, 0x77d03111, 0xc5f0ed01, 0xf890c4b1, 0xbf30be61,
+ 0x825097d1, 0x60e09782, 0x5d80be32, 0x1a20c4e2, 0x2740ed52,
+ 0x95603142, 0xa80018f2, 0xefa06222, 0xd2c04b92, 0x5090dc43,
+ 0x6df0f5f3, 0x2a508f23, 0x1730a693, 0xa5107a83, 0x98705333,
+ 0xdfd029e3, 0xe2b00053, 0xc1c12f04, 0xfca106b4, 0xbb017c64,
+ 0x866155d4, 0x344189c4, 0x0921a074, 0x4e81daa4, 0x73e1f314,
+ 0xf1b164c5, 0xccd14d75, 0x8b7137a5, 0xb6111e15, 0x0431c205,
+ 0x3951ebb5, 0x7ef19165, 0x4391b8d5, 0xa121b886, 0x9c419136,
+ 0xdbe1ebe6, 0xe681c256, 0x54a11e46, 0x69c137f6, 0x2e614d26,
+ 0x13016496, 0x9151f347, 0xac31daf7, 0xeb91a027, 0xd6f18997,
+ 0x64d15587, 0x59b17c37, 0x1e1106e7, 0x23712f57, 0x58f35849,
+ 0x659371f9, 0x22330b29, 0x1f532299, 0xad73fe89, 0x9013d739,
+ 0xd7b3ade9, 0xead38459, 0x68831388, 0x55e33a38, 0x124340e8,
+ 0x2f236958, 0x9d03b548, 0xa0639cf8, 0xe7c3e628, 0xdaa3cf98,
+ 0x3813cfcb, 0x0573e67b, 0x42d39cab, 0x7fb3b51b, 0xcd93690b,
+ 0xf0f340bb, 0xb7533a6b, 0x8a3313db, 0x0863840a, 0x3503adba,
+ 0x72a3d76a, 0x4fc3feda, 0xfde322ca, 0xc0830b7a, 0x872371aa,
+ 0xba43581a, 0x9932774d, 0xa4525efd, 0xe3f2242d, 0xde920d9d,
+ 0x6cb2d18d, 0x51d2f83d, 0x167282ed, 0x2b12ab5d, 0xa9423c8c,
+ 0x9422153c, 0xd3826fec, 0xeee2465c, 0x5cc29a4c, 0x61a2b3fc,
+ 0x2602c92c, 0x1b62e09c, 0xf9d2e0cf, 0xc4b2c97f, 0x8312b3af,
+ 0xbe729a1f, 0x0c52460f, 0x31326fbf, 0x7692156f, 0x4bf23cdf,
+ 0xc9a2ab0e, 0xf4c282be, 0xb362f86e, 0x8e02d1de, 0x3c220dce,
+ 0x0142247e, 0x46e25eae, 0x7b82771e, 0xb1e6b092, 0x8c869922,
+ 0xcb26e3f2, 0xf646ca42, 0x44661652, 0x79063fe2, 0x3ea64532,
+ 0x03c66c82, 0x8196fb53, 0xbcf6d2e3, 0xfb56a833, 0xc6368183,
+ 0x74165d93, 0x49767423, 0x0ed60ef3, 0x33b62743, 0xd1062710,
+ 0xec660ea0, 0xabc67470, 0x96a65dc0, 0x248681d0, 0x19e6a860,
+ 0x5e46d2b0, 0x6326fb00, 0xe1766cd1, 0xdc164561, 0x9bb63fb1,
+ 0xa6d61601, 0x14f6ca11, 0x2996e3a1, 0x6e369971, 0x5356b0c1,
+ 0x70279f96, 0x4d47b626, 0x0ae7ccf6, 0x3787e546, 0x85a73956,
+ 0xb8c710e6, 0xff676a36, 0xc2074386, 0x4057d457, 0x7d37fde7,
+ 0x3a978737, 0x07f7ae87, 0xb5d77297, 0x88b75b27, 0xcf1721f7,
+ 0xf2770847, 0x10c70814, 0x2da721a4, 0x6a075b74, 0x576772c4,
+ 0xe547aed4, 0xd8278764, 0x9f87fdb4, 0xa2e7d404, 0x20b743d5,
+ 0x1dd76a65, 0x5a7710b5, 0x67173905, 0xd537e515, 0xe857cca5,
+ 0xaff7b675, 0x92979fc5, 0xe915e8db, 0xd475c16b, 0x93d5bbbb,
+ 0xaeb5920b, 0x1c954e1b, 0x21f567ab, 0x66551d7b, 0x5b3534cb,
+ 0xd965a31a, 0xe4058aaa, 0xa3a5f07a, 0x9ec5d9ca, 0x2ce505da,
+ 0x11852c6a, 0x562556ba, 0x6b457f0a, 0x89f57f59, 0xb49556e9,
+ 0xf3352c39, 0xce550589, 0x7c75d999, 0x4115f029, 0x06b58af9,
+ 0x3bd5a349, 0xb9853498, 0x84e51d28, 0xc34567f8, 0xfe254e48,
+ 0x4c059258, 0x7165bbe8, 0x36c5c138, 0x0ba5e888, 0x28d4c7df,
+ 0x15b4ee6f, 0x521494bf, 0x6f74bd0f, 0xdd54611f, 0xe03448af,
+ 0xa794327f, 0x9af41bcf, 0x18a48c1e, 0x25c4a5ae, 0x6264df7e,
+ 0x5f04f6ce, 0xed242ade, 0xd044036e, 0x97e479be, 0xaa84500e,
+ 0x4834505d, 0x755479ed, 0x32f4033d, 0x0f942a8d, 0xbdb4f69d,
+ 0x80d4df2d, 0xc774a5fd, 0xfa148c4d, 0x78441b9c, 0x4524322c,
+ 0x028448fc, 0x3fe4614c, 0x8dc4bd5c, 0xb0a494ec, 0xf704ee3c,
+ 0xca64c78c},
+ {0x00000000, 0xb8bc6765, 0xaa09c88b, 0x12b5afee, 0x8f629757,
+ 0x37def032, 0x256b5fdc, 0x9dd738b9, 0xc5b428ef, 0x7d084f8a,
+ 0x6fbde064, 0xd7018701, 0x4ad6bfb8, 0xf26ad8dd, 0xe0df7733,
+ 0x58631056, 0x5019579f, 0xe8a530fa, 0xfa109f14, 0x42acf871,
+ 0xdf7bc0c8, 0x67c7a7ad, 0x75720843, 0xcdce6f26, 0x95ad7f70,
+ 0x2d111815, 0x3fa4b7fb, 0x8718d09e, 0x1acfe827, 0xa2738f42,
+ 0xb0c620ac, 0x087a47c9, 0xa032af3e, 0x188ec85b, 0x0a3b67b5,
+ 0xb28700d0, 0x2f503869, 0x97ec5f0c, 0x8559f0e2, 0x3de59787,
+ 0x658687d1, 0xdd3ae0b4, 0xcf8f4f5a, 0x7733283f, 0xeae41086,
+ 0x525877e3, 0x40edd80d, 0xf851bf68, 0xf02bf8a1, 0x48979fc4,
+ 0x5a22302a, 0xe29e574f, 0x7f496ff6, 0xc7f50893, 0xd540a77d,
+ 0x6dfcc018, 0x359fd04e, 0x8d23b72b, 0x9f9618c5, 0x272a7fa0,
+ 0xbafd4719, 0x0241207c, 0x10f48f92, 0xa848e8f7, 0x9b14583d,
+ 0x23a83f58, 0x311d90b6, 0x89a1f7d3, 0x1476cf6a, 0xaccaa80f,
+ 0xbe7f07e1, 0x06c36084, 0x5ea070d2, 0xe61c17b7, 0xf4a9b859,
+ 0x4c15df3c, 0xd1c2e785, 0x697e80e0, 0x7bcb2f0e, 0xc377486b,
+ 0xcb0d0fa2, 0x73b168c7, 0x6104c729, 0xd9b8a04c, 0x446f98f5,
+ 0xfcd3ff90, 0xee66507e, 0x56da371b, 0x0eb9274d, 0xb6054028,
+ 0xa4b0efc6, 0x1c0c88a3, 0x81dbb01a, 0x3967d77f, 0x2bd27891,
+ 0x936e1ff4, 0x3b26f703, 0x839a9066, 0x912f3f88, 0x299358ed,
+ 0xb4446054, 0x0cf80731, 0x1e4da8df, 0xa6f1cfba, 0xfe92dfec,
+ 0x462eb889, 0x549b1767, 0xec277002, 0x71f048bb, 0xc94c2fde,
+ 0xdbf98030, 0x6345e755, 0x6b3fa09c, 0xd383c7f9, 0xc1366817,
+ 0x798a0f72, 0xe45d37cb, 0x5ce150ae, 0x4e54ff40, 0xf6e89825,
+ 0xae8b8873, 0x1637ef16, 0x048240f8, 0xbc3e279d, 0x21e91f24,
+ 0x99557841, 0x8be0d7af, 0x335cb0ca, 0xed59b63b, 0x55e5d15e,
+ 0x47507eb0, 0xffec19d5, 0x623b216c, 0xda874609, 0xc832e9e7,
+ 0x708e8e82, 0x28ed9ed4, 0x9051f9b1, 0x82e4565f, 0x3a58313a,
+ 0xa78f0983, 0x1f336ee6, 0x0d86c108, 0xb53aa66d, 0xbd40e1a4,
+ 0x05fc86c1, 0x1749292f, 0xaff54e4a, 0x322276f3, 0x8a9e1196,
+ 0x982bbe78, 0x2097d91d, 0x78f4c94b, 0xc048ae2e, 0xd2fd01c0,
+ 0x6a4166a5, 0xf7965e1c, 0x4f2a3979, 0x5d9f9697, 0xe523f1f2,
+ 0x4d6b1905, 0xf5d77e60, 0xe762d18e, 0x5fdeb6eb, 0xc2098e52,
+ 0x7ab5e937, 0x680046d9, 0xd0bc21bc, 0x88df31ea, 0x3063568f,
+ 0x22d6f961, 0x9a6a9e04, 0x07bda6bd, 0xbf01c1d8, 0xadb46e36,
+ 0x15080953, 0x1d724e9a, 0xa5ce29ff, 0xb77b8611, 0x0fc7e174,
+ 0x9210d9cd, 0x2aacbea8, 0x38191146, 0x80a57623, 0xd8c66675,
+ 0x607a0110, 0x72cfaefe, 0xca73c99b, 0x57a4f122, 0xef189647,
+ 0xfdad39a9, 0x45115ecc, 0x764dee06, 0xcef18963, 0xdc44268d,
+ 0x64f841e8, 0xf92f7951, 0x41931e34, 0x5326b1da, 0xeb9ad6bf,
+ 0xb3f9c6e9, 0x0b45a18c, 0x19f00e62, 0xa14c6907, 0x3c9b51be,
+ 0x842736db, 0x96929935, 0x2e2efe50, 0x2654b999, 0x9ee8defc,
+ 0x8c5d7112, 0x34e11677, 0xa9362ece, 0x118a49ab, 0x033fe645,
+ 0xbb838120, 0xe3e09176, 0x5b5cf613, 0x49e959fd, 0xf1553e98,
+ 0x6c820621, 0xd43e6144, 0xc68bceaa, 0x7e37a9cf, 0xd67f4138,
+ 0x6ec3265d, 0x7c7689b3, 0xc4caeed6, 0x591dd66f, 0xe1a1b10a,
+ 0xf3141ee4, 0x4ba87981, 0x13cb69d7, 0xab770eb2, 0xb9c2a15c,
+ 0x017ec639, 0x9ca9fe80, 0x241599e5, 0x36a0360b, 0x8e1c516e,
+ 0x866616a7, 0x3eda71c2, 0x2c6fde2c, 0x94d3b949, 0x090481f0,
+ 0xb1b8e695, 0xa30d497b, 0x1bb12e1e, 0x43d23e48, 0xfb6e592d,
+ 0xe9dbf6c3, 0x516791a6, 0xccb0a91f, 0x740cce7a, 0x66b96194,
+ 0xde0506f1},
+ {0x00000000, 0x01c26a37, 0x0384d46e, 0x0246be59, 0x0709a8dc,
+ 0x06cbc2eb, 0x048d7cb2, 0x054f1685, 0x0e1351b8, 0x0fd13b8f,
+ 0x0d9785d6, 0x0c55efe1, 0x091af964, 0x08d89353, 0x0a9e2d0a,
+ 0x0b5c473d, 0x1c26a370, 0x1de4c947, 0x1fa2771e, 0x1e601d29,
+ 0x1b2f0bac, 0x1aed619b, 0x18abdfc2, 0x1969b5f5, 0x1235f2c8,
+ 0x13f798ff, 0x11b126a6, 0x10734c91, 0x153c5a14, 0x14fe3023,
+ 0x16b88e7a, 0x177ae44d, 0x384d46e0, 0x398f2cd7, 0x3bc9928e,
+ 0x3a0bf8b9, 0x3f44ee3c, 0x3e86840b, 0x3cc03a52, 0x3d025065,
+ 0x365e1758, 0x379c7d6f, 0x35dac336, 0x3418a901, 0x3157bf84,
+ 0x3095d5b3, 0x32d36bea, 0x331101dd, 0x246be590, 0x25a98fa7,
+ 0x27ef31fe, 0x262d5bc9, 0x23624d4c, 0x22a0277b, 0x20e69922,
+ 0x2124f315, 0x2a78b428, 0x2bbade1f, 0x29fc6046, 0x283e0a71,
+ 0x2d711cf4, 0x2cb376c3, 0x2ef5c89a, 0x2f37a2ad, 0x709a8dc0,
+ 0x7158e7f7, 0x731e59ae, 0x72dc3399, 0x7793251c, 0x76514f2b,
+ 0x7417f172, 0x75d59b45, 0x7e89dc78, 0x7f4bb64f, 0x7d0d0816,
+ 0x7ccf6221, 0x798074a4, 0x78421e93, 0x7a04a0ca, 0x7bc6cafd,
+ 0x6cbc2eb0, 0x6d7e4487, 0x6f38fade, 0x6efa90e9, 0x6bb5866c,
+ 0x6a77ec5b, 0x68315202, 0x69f33835, 0x62af7f08, 0x636d153f,
+ 0x612bab66, 0x60e9c151, 0x65a6d7d4, 0x6464bde3, 0x662203ba,
+ 0x67e0698d, 0x48d7cb20, 0x4915a117, 0x4b531f4e, 0x4a917579,
+ 0x4fde63fc, 0x4e1c09cb, 0x4c5ab792, 0x4d98dda5, 0x46c49a98,
+ 0x4706f0af, 0x45404ef6, 0x448224c1, 0x41cd3244, 0x400f5873,
+ 0x4249e62a, 0x438b8c1d, 0x54f16850, 0x55330267, 0x5775bc3e,
+ 0x56b7d609, 0x53f8c08c, 0x523aaabb, 0x507c14e2, 0x51be7ed5,
+ 0x5ae239e8, 0x5b2053df, 0x5966ed86, 0x58a487b1, 0x5deb9134,
+ 0x5c29fb03, 0x5e6f455a, 0x5fad2f6d, 0xe1351b80, 0xe0f771b7,
+ 0xe2b1cfee, 0xe373a5d9, 0xe63cb35c, 0xe7fed96b, 0xe5b86732,
+ 0xe47a0d05, 0xef264a38, 0xeee4200f, 0xeca29e56, 0xed60f461,
+ 0xe82fe2e4, 0xe9ed88d3, 0xebab368a, 0xea695cbd, 0xfd13b8f0,
+ 0xfcd1d2c7, 0xfe976c9e, 0xff5506a9, 0xfa1a102c, 0xfbd87a1b,
+ 0xf99ec442, 0xf85cae75, 0xf300e948, 0xf2c2837f, 0xf0843d26,
+ 0xf1465711, 0xf4094194, 0xf5cb2ba3, 0xf78d95fa, 0xf64fffcd,
+ 0xd9785d60, 0xd8ba3757, 0xdafc890e, 0xdb3ee339, 0xde71f5bc,
+ 0xdfb39f8b, 0xddf521d2, 0xdc374be5, 0xd76b0cd8, 0xd6a966ef,
+ 0xd4efd8b6, 0xd52db281, 0xd062a404, 0xd1a0ce33, 0xd3e6706a,
+ 0xd2241a5d, 0xc55efe10, 0xc49c9427, 0xc6da2a7e, 0xc7184049,
+ 0xc25756cc, 0xc3953cfb, 0xc1d382a2, 0xc011e895, 0xcb4dafa8,
+ 0xca8fc59f, 0xc8c97bc6, 0xc90b11f1, 0xcc440774, 0xcd866d43,
+ 0xcfc0d31a, 0xce02b92d, 0x91af9640, 0x906dfc77, 0x922b422e,
+ 0x93e92819, 0x96a63e9c, 0x976454ab, 0x9522eaf2, 0x94e080c5,
+ 0x9fbcc7f8, 0x9e7eadcf, 0x9c381396, 0x9dfa79a1, 0x98b56f24,
+ 0x99770513, 0x9b31bb4a, 0x9af3d17d, 0x8d893530, 0x8c4b5f07,
+ 0x8e0de15e, 0x8fcf8b69, 0x8a809dec, 0x8b42f7db, 0x89044982,
+ 0x88c623b5, 0x839a6488, 0x82580ebf, 0x801eb0e6, 0x81dcdad1,
+ 0x8493cc54, 0x8551a663, 0x8717183a, 0x86d5720d, 0xa9e2d0a0,
+ 0xa820ba97, 0xaa6604ce, 0xaba46ef9, 0xaeeb787c, 0xaf29124b,
+ 0xad6fac12, 0xacadc625, 0xa7f18118, 0xa633eb2f, 0xa4755576,
+ 0xa5b73f41, 0xa0f829c4, 0xa13a43f3, 0xa37cfdaa, 0xa2be979d,
+ 0xb5c473d0, 0xb40619e7, 0xb640a7be, 0xb782cd89, 0xb2cddb0c,
+ 0xb30fb13b, 0xb1490f62, 0xb08b6555, 0xbbd72268, 0xba15485f,
+ 0xb853f606, 0xb9919c31, 0xbcde8ab4, 0xbd1ce083, 0xbf5a5eda,
+ 0xbe9834ed},
+ {0x00000000, 0x191b3141, 0x32366282, 0x2b2d53c3, 0x646cc504,
+ 0x7d77f445, 0x565aa786, 0x4f4196c7, 0xc8d98a08, 0xd1c2bb49,
+ 0xfaefe88a, 0xe3f4d9cb, 0xacb54f0c, 0xb5ae7e4d, 0x9e832d8e,
+ 0x87981ccf, 0x4ac21251, 0x53d92310, 0x78f470d3, 0x61ef4192,
+ 0x2eaed755, 0x37b5e614, 0x1c98b5d7, 0x05838496, 0x821b9859,
+ 0x9b00a918, 0xb02dfadb, 0xa936cb9a, 0xe6775d5d, 0xff6c6c1c,
+ 0xd4413fdf, 0xcd5a0e9e, 0x958424a2, 0x8c9f15e3, 0xa7b24620,
+ 0xbea97761, 0xf1e8e1a6, 0xe8f3d0e7, 0xc3de8324, 0xdac5b265,
+ 0x5d5daeaa, 0x44469feb, 0x6f6bcc28, 0x7670fd69, 0x39316bae,
+ 0x202a5aef, 0x0b07092c, 0x121c386d, 0xdf4636f3, 0xc65d07b2,
+ 0xed705471, 0xf46b6530, 0xbb2af3f7, 0xa231c2b6, 0x891c9175,
+ 0x9007a034, 0x179fbcfb, 0x0e848dba, 0x25a9de79, 0x3cb2ef38,
+ 0x73f379ff, 0x6ae848be, 0x41c51b7d, 0x58de2a3c, 0xf0794f05,
+ 0xe9627e44, 0xc24f2d87, 0xdb541cc6, 0x94158a01, 0x8d0ebb40,
+ 0xa623e883, 0xbf38d9c2, 0x38a0c50d, 0x21bbf44c, 0x0a96a78f,
+ 0x138d96ce, 0x5ccc0009, 0x45d73148, 0x6efa628b, 0x77e153ca,
+ 0xbabb5d54, 0xa3a06c15, 0x888d3fd6, 0x91960e97, 0xded79850,
+ 0xc7cca911, 0xece1fad2, 0xf5facb93, 0x7262d75c, 0x6b79e61d,
+ 0x4054b5de, 0x594f849f, 0x160e1258, 0x0f152319, 0x243870da,
+ 0x3d23419b, 0x65fd6ba7, 0x7ce65ae6, 0x57cb0925, 0x4ed03864,
+ 0x0191aea3, 0x188a9fe2, 0x33a7cc21, 0x2abcfd60, 0xad24e1af,
+ 0xb43fd0ee, 0x9f12832d, 0x8609b26c, 0xc94824ab, 0xd05315ea,
+ 0xfb7e4629, 0xe2657768, 0x2f3f79f6, 0x362448b7, 0x1d091b74,
+ 0x04122a35, 0x4b53bcf2, 0x52488db3, 0x7965de70, 0x607eef31,
+ 0xe7e6f3fe, 0xfefdc2bf, 0xd5d0917c, 0xcccba03d, 0x838a36fa,
+ 0x9a9107bb, 0xb1bc5478, 0xa8a76539, 0x3b83984b, 0x2298a90a,
+ 0x09b5fac9, 0x10aecb88, 0x5fef5d4f, 0x46f46c0e, 0x6dd93fcd,
+ 0x74c20e8c, 0xf35a1243, 0xea412302, 0xc16c70c1, 0xd8774180,
+ 0x9736d747, 0x8e2de606, 0xa500b5c5, 0xbc1b8484, 0x71418a1a,
+ 0x685abb5b, 0x4377e898, 0x5a6cd9d9, 0x152d4f1e, 0x0c367e5f,
+ 0x271b2d9c, 0x3e001cdd, 0xb9980012, 0xa0833153, 0x8bae6290,
+ 0x92b553d1, 0xddf4c516, 0xc4eff457, 0xefc2a794, 0xf6d996d5,
+ 0xae07bce9, 0xb71c8da8, 0x9c31de6b, 0x852aef2a, 0xca6b79ed,
+ 0xd37048ac, 0xf85d1b6f, 0xe1462a2e, 0x66de36e1, 0x7fc507a0,
+ 0x54e85463, 0x4df36522, 0x02b2f3e5, 0x1ba9c2a4, 0x30849167,
+ 0x299fa026, 0xe4c5aeb8, 0xfdde9ff9, 0xd6f3cc3a, 0xcfe8fd7b,
+ 0x80a96bbc, 0x99b25afd, 0xb29f093e, 0xab84387f, 0x2c1c24b0,
+ 0x350715f1, 0x1e2a4632, 0x07317773, 0x4870e1b4, 0x516bd0f5,
+ 0x7a468336, 0x635db277, 0xcbfad74e, 0xd2e1e60f, 0xf9ccb5cc,
+ 0xe0d7848d, 0xaf96124a, 0xb68d230b, 0x9da070c8, 0x84bb4189,
+ 0x03235d46, 0x1a386c07, 0x31153fc4, 0x280e0e85, 0x674f9842,
+ 0x7e54a903, 0x5579fac0, 0x4c62cb81, 0x8138c51f, 0x9823f45e,
+ 0xb30ea79d, 0xaa1596dc, 0xe554001b, 0xfc4f315a, 0xd7626299,
+ 0xce7953d8, 0x49e14f17, 0x50fa7e56, 0x7bd72d95, 0x62cc1cd4,
+ 0x2d8d8a13, 0x3496bb52, 0x1fbbe891, 0x06a0d9d0, 0x5e7ef3ec,
+ 0x4765c2ad, 0x6c48916e, 0x7553a02f, 0x3a1236e8, 0x230907a9,
+ 0x0824546a, 0x113f652b, 0x96a779e4, 0x8fbc48a5, 0xa4911b66,
+ 0xbd8a2a27, 0xf2cbbce0, 0xebd08da1, 0xc0fdde62, 0xd9e6ef23,
+ 0x14bce1bd, 0x0da7d0fc, 0x268a833f, 0x3f91b27e, 0x70d024b9,
+ 0x69cb15f8, 0x42e6463b, 0x5bfd777a, 0xdc656bb5, 0xc57e5af4,
+ 0xee530937, 0xf7483876, 0xb809aeb1, 0xa1129ff0, 0x8a3fcc33,
+ 0x9324fd72},
+ {0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419,
+ 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4,
+ 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07,
+ 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
+ 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856,
+ 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
+ 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4,
+ 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
+ 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3,
+ 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a,
+ 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599,
+ 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
+ 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190,
+ 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f,
+ 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e,
+ 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
+ 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed,
+ 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
+ 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3,
+ 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
+ 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a,
+ 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5,
+ 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010,
+ 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
+ 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17,
+ 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6,
+ 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615,
+ 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
+ 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344,
+ 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
+ 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a,
+ 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
+ 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1,
+ 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c,
+ 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef,
+ 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
+ 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe,
+ 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31,
+ 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c,
+ 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
+ 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b,
+ 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
+ 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1,
+ 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
+ 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278,
+ 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7,
+ 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66,
+ 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
+ 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605,
+ 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8,
+ 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b,
+ 0x2d02ef8d}};
+
+local const z_word_t FAR crc_braid_big_table[][256] = {
+ {0x0000000000000000, 0x9630077700000000, 0x2c610eee00000000,
+ 0xba51099900000000, 0x19c46d0700000000, 0x8ff46a7000000000,
+ 0x35a563e900000000, 0xa395649e00000000, 0x3288db0e00000000,
+ 0xa4b8dc7900000000, 0x1ee9d5e000000000, 0x88d9d29700000000,
+ 0x2b4cb60900000000, 0xbd7cb17e00000000, 0x072db8e700000000,
+ 0x911dbf9000000000, 0x6410b71d00000000, 0xf220b06a00000000,
+ 0x4871b9f300000000, 0xde41be8400000000, 0x7dd4da1a00000000,
+ 0xebe4dd6d00000000, 0x51b5d4f400000000, 0xc785d38300000000,
+ 0x56986c1300000000, 0xc0a86b6400000000, 0x7af962fd00000000,
+ 0xecc9658a00000000, 0x4f5c011400000000, 0xd96c066300000000,
+ 0x633d0ffa00000000, 0xf50d088d00000000, 0xc8206e3b00000000,
+ 0x5e10694c00000000, 0xe44160d500000000, 0x727167a200000000,
+ 0xd1e4033c00000000, 0x47d4044b00000000, 0xfd850dd200000000,
+ 0x6bb50aa500000000, 0xfaa8b53500000000, 0x6c98b24200000000,
+ 0xd6c9bbdb00000000, 0x40f9bcac00000000, 0xe36cd83200000000,
+ 0x755cdf4500000000, 0xcf0dd6dc00000000, 0x593dd1ab00000000,
+ 0xac30d92600000000, 0x3a00de5100000000, 0x8051d7c800000000,
+ 0x1661d0bf00000000, 0xb5f4b42100000000, 0x23c4b35600000000,
+ 0x9995bacf00000000, 0x0fa5bdb800000000, 0x9eb8022800000000,
+ 0x0888055f00000000, 0xb2d90cc600000000, 0x24e90bb100000000,
+ 0x877c6f2f00000000, 0x114c685800000000, 0xab1d61c100000000,
+ 0x3d2d66b600000000, 0x9041dc7600000000, 0x0671db0100000000,
+ 0xbc20d29800000000, 0x2a10d5ef00000000, 0x8985b17100000000,
+ 0x1fb5b60600000000, 0xa5e4bf9f00000000, 0x33d4b8e800000000,
+ 0xa2c9077800000000, 0x34f9000f00000000, 0x8ea8099600000000,
+ 0x18980ee100000000, 0xbb0d6a7f00000000, 0x2d3d6d0800000000,
+ 0x976c649100000000, 0x015c63e600000000, 0xf4516b6b00000000,
+ 0x62616c1c00000000, 0xd830658500000000, 0x4e0062f200000000,
+ 0xed95066c00000000, 0x7ba5011b00000000, 0xc1f4088200000000,
+ 0x57c40ff500000000, 0xc6d9b06500000000, 0x50e9b71200000000,
+ 0xeab8be8b00000000, 0x7c88b9fc00000000, 0xdf1ddd6200000000,
+ 0x492dda1500000000, 0xf37cd38c00000000, 0x654cd4fb00000000,
+ 0x5861b24d00000000, 0xce51b53a00000000, 0x7400bca300000000,
+ 0xe230bbd400000000, 0x41a5df4a00000000, 0xd795d83d00000000,
+ 0x6dc4d1a400000000, 0xfbf4d6d300000000, 0x6ae9694300000000,
+ 0xfcd96e3400000000, 0x468867ad00000000, 0xd0b860da00000000,
+ 0x732d044400000000, 0xe51d033300000000, 0x5f4c0aaa00000000,
+ 0xc97c0ddd00000000, 0x3c71055000000000, 0xaa41022700000000,
+ 0x10100bbe00000000, 0x86200cc900000000, 0x25b5685700000000,
+ 0xb3856f2000000000, 0x09d466b900000000, 0x9fe461ce00000000,
+ 0x0ef9de5e00000000, 0x98c9d92900000000, 0x2298d0b000000000,
+ 0xb4a8d7c700000000, 0x173db35900000000, 0x810db42e00000000,
+ 0x3b5cbdb700000000, 0xad6cbac000000000, 0x2083b8ed00000000,
+ 0xb6b3bf9a00000000, 0x0ce2b60300000000, 0x9ad2b17400000000,
+ 0x3947d5ea00000000, 0xaf77d29d00000000, 0x1526db0400000000,
+ 0x8316dc7300000000, 0x120b63e300000000, 0x843b649400000000,
+ 0x3e6a6d0d00000000, 0xa85a6a7a00000000, 0x0bcf0ee400000000,
+ 0x9dff099300000000, 0x27ae000a00000000, 0xb19e077d00000000,
+ 0x44930ff000000000, 0xd2a3088700000000, 0x68f2011e00000000,
+ 0xfec2066900000000, 0x5d5762f700000000, 0xcb67658000000000,
+ 0x71366c1900000000, 0xe7066b6e00000000, 0x761bd4fe00000000,
+ 0xe02bd38900000000, 0x5a7ada1000000000, 0xcc4add6700000000,
+ 0x6fdfb9f900000000, 0xf9efbe8e00000000, 0x43beb71700000000,
+ 0xd58eb06000000000, 0xe8a3d6d600000000, 0x7e93d1a100000000,
+ 0xc4c2d83800000000, 0x52f2df4f00000000, 0xf167bbd100000000,
+ 0x6757bca600000000, 0xdd06b53f00000000, 0x4b36b24800000000,
+ 0xda2b0dd800000000, 0x4c1b0aaf00000000, 0xf64a033600000000,
+ 0x607a044100000000, 0xc3ef60df00000000, 0x55df67a800000000,
+ 0xef8e6e3100000000, 0x79be694600000000, 0x8cb361cb00000000,
+ 0x1a8366bc00000000, 0xa0d26f2500000000, 0x36e2685200000000,
+ 0x95770ccc00000000, 0x03470bbb00000000, 0xb916022200000000,
+ 0x2f26055500000000, 0xbe3bbac500000000, 0x280bbdb200000000,
+ 0x925ab42b00000000, 0x046ab35c00000000, 0xa7ffd7c200000000,
+ 0x31cfd0b500000000, 0x8b9ed92c00000000, 0x1daede5b00000000,
+ 0xb0c2649b00000000, 0x26f263ec00000000, 0x9ca36a7500000000,
+ 0x0a936d0200000000, 0xa906099c00000000, 0x3f360eeb00000000,
+ 0x8567077200000000, 0x1357000500000000, 0x824abf9500000000,
+ 0x147ab8e200000000, 0xae2bb17b00000000, 0x381bb60c00000000,
+ 0x9b8ed29200000000, 0x0dbed5e500000000, 0xb7efdc7c00000000,
+ 0x21dfdb0b00000000, 0xd4d2d38600000000, 0x42e2d4f100000000,
+ 0xf8b3dd6800000000, 0x6e83da1f00000000, 0xcd16be8100000000,
+ 0x5b26b9f600000000, 0xe177b06f00000000, 0x7747b71800000000,
+ 0xe65a088800000000, 0x706a0fff00000000, 0xca3b066600000000,
+ 0x5c0b011100000000, 0xff9e658f00000000, 0x69ae62f800000000,
+ 0xd3ff6b6100000000, 0x45cf6c1600000000, 0x78e20aa000000000,
+ 0xeed20dd700000000, 0x5483044e00000000, 0xc2b3033900000000,
+ 0x612667a700000000, 0xf71660d000000000, 0x4d47694900000000,
+ 0xdb776e3e00000000, 0x4a6ad1ae00000000, 0xdc5ad6d900000000,
+ 0x660bdf4000000000, 0xf03bd83700000000, 0x53aebca900000000,
+ 0xc59ebbde00000000, 0x7fcfb24700000000, 0xe9ffb53000000000,
+ 0x1cf2bdbd00000000, 0x8ac2baca00000000, 0x3093b35300000000,
+ 0xa6a3b42400000000, 0x0536d0ba00000000, 0x9306d7cd00000000,
+ 0x2957de5400000000, 0xbf67d92300000000, 0x2e7a66b300000000,
+ 0xb84a61c400000000, 0x021b685d00000000, 0x942b6f2a00000000,
+ 0x37be0bb400000000, 0xa18e0cc300000000, 0x1bdf055a00000000,
+ 0x8def022d00000000},
+ {0x0000000000000000, 0x41311b1900000000, 0x8262363200000000,
+ 0xc3532d2b00000000, 0x04c56c6400000000, 0x45f4777d00000000,
+ 0x86a75a5600000000, 0xc796414f00000000, 0x088ad9c800000000,
+ 0x49bbc2d100000000, 0x8ae8effa00000000, 0xcbd9f4e300000000,
+ 0x0c4fb5ac00000000, 0x4d7eaeb500000000, 0x8e2d839e00000000,
+ 0xcf1c988700000000, 0x5112c24a00000000, 0x1023d95300000000,
+ 0xd370f47800000000, 0x9241ef6100000000, 0x55d7ae2e00000000,
+ 0x14e6b53700000000, 0xd7b5981c00000000, 0x9684830500000000,
+ 0x59981b8200000000, 0x18a9009b00000000, 0xdbfa2db000000000,
+ 0x9acb36a900000000, 0x5d5d77e600000000, 0x1c6c6cff00000000,
+ 0xdf3f41d400000000, 0x9e0e5acd00000000, 0xa224849500000000,
+ 0xe3159f8c00000000, 0x2046b2a700000000, 0x6177a9be00000000,
+ 0xa6e1e8f100000000, 0xe7d0f3e800000000, 0x2483dec300000000,
+ 0x65b2c5da00000000, 0xaaae5d5d00000000, 0xeb9f464400000000,
+ 0x28cc6b6f00000000, 0x69fd707600000000, 0xae6b313900000000,
+ 0xef5a2a2000000000, 0x2c09070b00000000, 0x6d381c1200000000,
+ 0xf33646df00000000, 0xb2075dc600000000, 0x715470ed00000000,
+ 0x30656bf400000000, 0xf7f32abb00000000, 0xb6c231a200000000,
+ 0x75911c8900000000, 0x34a0079000000000, 0xfbbc9f1700000000,
+ 0xba8d840e00000000, 0x79dea92500000000, 0x38efb23c00000000,
+ 0xff79f37300000000, 0xbe48e86a00000000, 0x7d1bc54100000000,
+ 0x3c2ade5800000000, 0x054f79f000000000, 0x447e62e900000000,
+ 0x872d4fc200000000, 0xc61c54db00000000, 0x018a159400000000,
+ 0x40bb0e8d00000000, 0x83e823a600000000, 0xc2d938bf00000000,
+ 0x0dc5a03800000000, 0x4cf4bb2100000000, 0x8fa7960a00000000,
+ 0xce968d1300000000, 0x0900cc5c00000000, 0x4831d74500000000,
+ 0x8b62fa6e00000000, 0xca53e17700000000, 0x545dbbba00000000,
+ 0x156ca0a300000000, 0xd63f8d8800000000, 0x970e969100000000,
+ 0x5098d7de00000000, 0x11a9ccc700000000, 0xd2fae1ec00000000,
+ 0x93cbfaf500000000, 0x5cd7627200000000, 0x1de6796b00000000,
+ 0xdeb5544000000000, 0x9f844f5900000000, 0x58120e1600000000,
+ 0x1923150f00000000, 0xda70382400000000, 0x9b41233d00000000,
+ 0xa76bfd6500000000, 0xe65ae67c00000000, 0x2509cb5700000000,
+ 0x6438d04e00000000, 0xa3ae910100000000, 0xe29f8a1800000000,
+ 0x21cca73300000000, 0x60fdbc2a00000000, 0xafe124ad00000000,
+ 0xeed03fb400000000, 0x2d83129f00000000, 0x6cb2098600000000,
+ 0xab2448c900000000, 0xea1553d000000000, 0x29467efb00000000,
+ 0x687765e200000000, 0xf6793f2f00000000, 0xb748243600000000,
+ 0x741b091d00000000, 0x352a120400000000, 0xf2bc534b00000000,
+ 0xb38d485200000000, 0x70de657900000000, 0x31ef7e6000000000,
+ 0xfef3e6e700000000, 0xbfc2fdfe00000000, 0x7c91d0d500000000,
+ 0x3da0cbcc00000000, 0xfa368a8300000000, 0xbb07919a00000000,
+ 0x7854bcb100000000, 0x3965a7a800000000, 0x4b98833b00000000,
+ 0x0aa9982200000000, 0xc9fab50900000000, 0x88cbae1000000000,
+ 0x4f5def5f00000000, 0x0e6cf44600000000, 0xcd3fd96d00000000,
+ 0x8c0ec27400000000, 0x43125af300000000, 0x022341ea00000000,
+ 0xc1706cc100000000, 0x804177d800000000, 0x47d7369700000000,
+ 0x06e62d8e00000000, 0xc5b500a500000000, 0x84841bbc00000000,
+ 0x1a8a417100000000, 0x5bbb5a6800000000, 0x98e8774300000000,
+ 0xd9d96c5a00000000, 0x1e4f2d1500000000, 0x5f7e360c00000000,
+ 0x9c2d1b2700000000, 0xdd1c003e00000000, 0x120098b900000000,
+ 0x533183a000000000, 0x9062ae8b00000000, 0xd153b59200000000,
+ 0x16c5f4dd00000000, 0x57f4efc400000000, 0x94a7c2ef00000000,
+ 0xd596d9f600000000, 0xe9bc07ae00000000, 0xa88d1cb700000000,
+ 0x6bde319c00000000, 0x2aef2a8500000000, 0xed796bca00000000,
+ 0xac4870d300000000, 0x6f1b5df800000000, 0x2e2a46e100000000,
+ 0xe136de6600000000, 0xa007c57f00000000, 0x6354e85400000000,
+ 0x2265f34d00000000, 0xe5f3b20200000000, 0xa4c2a91b00000000,
+ 0x6791843000000000, 0x26a09f2900000000, 0xb8aec5e400000000,
+ 0xf99fdefd00000000, 0x3accf3d600000000, 0x7bfde8cf00000000,
+ 0xbc6ba98000000000, 0xfd5ab29900000000, 0x3e099fb200000000,
+ 0x7f3884ab00000000, 0xb0241c2c00000000, 0xf115073500000000,
+ 0x32462a1e00000000, 0x7377310700000000, 0xb4e1704800000000,
+ 0xf5d06b5100000000, 0x3683467a00000000, 0x77b25d6300000000,
+ 0x4ed7facb00000000, 0x0fe6e1d200000000, 0xccb5ccf900000000,
+ 0x8d84d7e000000000, 0x4a1296af00000000, 0x0b238db600000000,
+ 0xc870a09d00000000, 0x8941bb8400000000, 0x465d230300000000,
+ 0x076c381a00000000, 0xc43f153100000000, 0x850e0e2800000000,
+ 0x42984f6700000000, 0x03a9547e00000000, 0xc0fa795500000000,
+ 0x81cb624c00000000, 0x1fc5388100000000, 0x5ef4239800000000,
+ 0x9da70eb300000000, 0xdc9615aa00000000, 0x1b0054e500000000,
+ 0x5a314ffc00000000, 0x996262d700000000, 0xd85379ce00000000,
+ 0x174fe14900000000, 0x567efa5000000000, 0x952dd77b00000000,
+ 0xd41ccc6200000000, 0x138a8d2d00000000, 0x52bb963400000000,
+ 0x91e8bb1f00000000, 0xd0d9a00600000000, 0xecf37e5e00000000,
+ 0xadc2654700000000, 0x6e91486c00000000, 0x2fa0537500000000,
+ 0xe836123a00000000, 0xa907092300000000, 0x6a54240800000000,
+ 0x2b653f1100000000, 0xe479a79600000000, 0xa548bc8f00000000,
+ 0x661b91a400000000, 0x272a8abd00000000, 0xe0bccbf200000000,
+ 0xa18dd0eb00000000, 0x62defdc000000000, 0x23efe6d900000000,
+ 0xbde1bc1400000000, 0xfcd0a70d00000000, 0x3f838a2600000000,
+ 0x7eb2913f00000000, 0xb924d07000000000, 0xf815cb6900000000,
+ 0x3b46e64200000000, 0x7a77fd5b00000000, 0xb56b65dc00000000,
+ 0xf45a7ec500000000, 0x370953ee00000000, 0x763848f700000000,
+ 0xb1ae09b800000000, 0xf09f12a100000000, 0x33cc3f8a00000000,
+ 0x72fd249300000000},
+ {0x0000000000000000, 0x376ac20100000000, 0x6ed4840300000000,
+ 0x59be460200000000, 0xdca8090700000000, 0xebc2cb0600000000,
+ 0xb27c8d0400000000, 0x85164f0500000000, 0xb851130e00000000,
+ 0x8f3bd10f00000000, 0xd685970d00000000, 0xe1ef550c00000000,
+ 0x64f91a0900000000, 0x5393d80800000000, 0x0a2d9e0a00000000,
+ 0x3d475c0b00000000, 0x70a3261c00000000, 0x47c9e41d00000000,
+ 0x1e77a21f00000000, 0x291d601e00000000, 0xac0b2f1b00000000,
+ 0x9b61ed1a00000000, 0xc2dfab1800000000, 0xf5b5691900000000,
+ 0xc8f2351200000000, 0xff98f71300000000, 0xa626b11100000000,
+ 0x914c731000000000, 0x145a3c1500000000, 0x2330fe1400000000,
+ 0x7a8eb81600000000, 0x4de47a1700000000, 0xe0464d3800000000,
+ 0xd72c8f3900000000, 0x8e92c93b00000000, 0xb9f80b3a00000000,
+ 0x3cee443f00000000, 0x0b84863e00000000, 0x523ac03c00000000,
+ 0x6550023d00000000, 0x58175e3600000000, 0x6f7d9c3700000000,
+ 0x36c3da3500000000, 0x01a9183400000000, 0x84bf573100000000,
+ 0xb3d5953000000000, 0xea6bd33200000000, 0xdd01113300000000,
+ 0x90e56b2400000000, 0xa78fa92500000000, 0xfe31ef2700000000,
+ 0xc95b2d2600000000, 0x4c4d622300000000, 0x7b27a02200000000,
+ 0x2299e62000000000, 0x15f3242100000000, 0x28b4782a00000000,
+ 0x1fdeba2b00000000, 0x4660fc2900000000, 0x710a3e2800000000,
+ 0xf41c712d00000000, 0xc376b32c00000000, 0x9ac8f52e00000000,
+ 0xada2372f00000000, 0xc08d9a7000000000, 0xf7e7587100000000,
+ 0xae591e7300000000, 0x9933dc7200000000, 0x1c25937700000000,
+ 0x2b4f517600000000, 0x72f1177400000000, 0x459bd57500000000,
+ 0x78dc897e00000000, 0x4fb64b7f00000000, 0x16080d7d00000000,
+ 0x2162cf7c00000000, 0xa474807900000000, 0x931e427800000000,
+ 0xcaa0047a00000000, 0xfdcac67b00000000, 0xb02ebc6c00000000,
+ 0x87447e6d00000000, 0xdefa386f00000000, 0xe990fa6e00000000,
+ 0x6c86b56b00000000, 0x5bec776a00000000, 0x0252316800000000,
+ 0x3538f36900000000, 0x087faf6200000000, 0x3f156d6300000000,
+ 0x66ab2b6100000000, 0x51c1e96000000000, 0xd4d7a66500000000,
+ 0xe3bd646400000000, 0xba03226600000000, 0x8d69e06700000000,
+ 0x20cbd74800000000, 0x17a1154900000000, 0x4e1f534b00000000,
+ 0x7975914a00000000, 0xfc63de4f00000000, 0xcb091c4e00000000,
+ 0x92b75a4c00000000, 0xa5dd984d00000000, 0x989ac44600000000,
+ 0xaff0064700000000, 0xf64e404500000000, 0xc124824400000000,
+ 0x4432cd4100000000, 0x73580f4000000000, 0x2ae6494200000000,
+ 0x1d8c8b4300000000, 0x5068f15400000000, 0x6702335500000000,
+ 0x3ebc755700000000, 0x09d6b75600000000, 0x8cc0f85300000000,
+ 0xbbaa3a5200000000, 0xe2147c5000000000, 0xd57ebe5100000000,
+ 0xe839e25a00000000, 0xdf53205b00000000, 0x86ed665900000000,
+ 0xb187a45800000000, 0x3491eb5d00000000, 0x03fb295c00000000,
+ 0x5a456f5e00000000, 0x6d2fad5f00000000, 0x801b35e100000000,
+ 0xb771f7e000000000, 0xeecfb1e200000000, 0xd9a573e300000000,
+ 0x5cb33ce600000000, 0x6bd9fee700000000, 0x3267b8e500000000,
+ 0x050d7ae400000000, 0x384a26ef00000000, 0x0f20e4ee00000000,
+ 0x569ea2ec00000000, 0x61f460ed00000000, 0xe4e22fe800000000,
+ 0xd388ede900000000, 0x8a36abeb00000000, 0xbd5c69ea00000000,
+ 0xf0b813fd00000000, 0xc7d2d1fc00000000, 0x9e6c97fe00000000,
+ 0xa90655ff00000000, 0x2c101afa00000000, 0x1b7ad8fb00000000,
+ 0x42c49ef900000000, 0x75ae5cf800000000, 0x48e900f300000000,
+ 0x7f83c2f200000000, 0x263d84f000000000, 0x115746f100000000,
+ 0x944109f400000000, 0xa32bcbf500000000, 0xfa958df700000000,
+ 0xcdff4ff600000000, 0x605d78d900000000, 0x5737bad800000000,
+ 0x0e89fcda00000000, 0x39e33edb00000000, 0xbcf571de00000000,
+ 0x8b9fb3df00000000, 0xd221f5dd00000000, 0xe54b37dc00000000,
+ 0xd80c6bd700000000, 0xef66a9d600000000, 0xb6d8efd400000000,
+ 0x81b22dd500000000, 0x04a462d000000000, 0x33cea0d100000000,
+ 0x6a70e6d300000000, 0x5d1a24d200000000, 0x10fe5ec500000000,
+ 0x27949cc400000000, 0x7e2adac600000000, 0x494018c700000000,
+ 0xcc5657c200000000, 0xfb3c95c300000000, 0xa282d3c100000000,
+ 0x95e811c000000000, 0xa8af4dcb00000000, 0x9fc58fca00000000,
+ 0xc67bc9c800000000, 0xf1110bc900000000, 0x740744cc00000000,
+ 0x436d86cd00000000, 0x1ad3c0cf00000000, 0x2db902ce00000000,
+ 0x4096af9100000000, 0x77fc6d9000000000, 0x2e422b9200000000,
+ 0x1928e99300000000, 0x9c3ea69600000000, 0xab54649700000000,
+ 0xf2ea229500000000, 0xc580e09400000000, 0xf8c7bc9f00000000,
+ 0xcfad7e9e00000000, 0x9613389c00000000, 0xa179fa9d00000000,
+ 0x246fb59800000000, 0x1305779900000000, 0x4abb319b00000000,
+ 0x7dd1f39a00000000, 0x3035898d00000000, 0x075f4b8c00000000,
+ 0x5ee10d8e00000000, 0x698bcf8f00000000, 0xec9d808a00000000,
+ 0xdbf7428b00000000, 0x8249048900000000, 0xb523c68800000000,
+ 0x88649a8300000000, 0xbf0e588200000000, 0xe6b01e8000000000,
+ 0xd1dadc8100000000, 0x54cc938400000000, 0x63a6518500000000,
+ 0x3a18178700000000, 0x0d72d58600000000, 0xa0d0e2a900000000,
+ 0x97ba20a800000000, 0xce0466aa00000000, 0xf96ea4ab00000000,
+ 0x7c78ebae00000000, 0x4b1229af00000000, 0x12ac6fad00000000,
+ 0x25c6adac00000000, 0x1881f1a700000000, 0x2feb33a600000000,
+ 0x765575a400000000, 0x413fb7a500000000, 0xc429f8a000000000,
+ 0xf3433aa100000000, 0xaafd7ca300000000, 0x9d97bea200000000,
+ 0xd073c4b500000000, 0xe71906b400000000, 0xbea740b600000000,
+ 0x89cd82b700000000, 0x0cdbcdb200000000, 0x3bb10fb300000000,
+ 0x620f49b100000000, 0x55658bb000000000, 0x6822d7bb00000000,
+ 0x5f4815ba00000000, 0x06f653b800000000, 0x319c91b900000000,
+ 0xb48adebc00000000, 0x83e01cbd00000000, 0xda5e5abf00000000,
+ 0xed3498be00000000},
+ {0x0000000000000000, 0x6567bcb800000000, 0x8bc809aa00000000,
+ 0xeeafb51200000000, 0x5797628f00000000, 0x32f0de3700000000,
+ 0xdc5f6b2500000000, 0xb938d79d00000000, 0xef28b4c500000000,
+ 0x8a4f087d00000000, 0x64e0bd6f00000000, 0x018701d700000000,
+ 0xb8bfd64a00000000, 0xddd86af200000000, 0x3377dfe000000000,
+ 0x5610635800000000, 0x9f57195000000000, 0xfa30a5e800000000,
+ 0x149f10fa00000000, 0x71f8ac4200000000, 0xc8c07bdf00000000,
+ 0xada7c76700000000, 0x4308727500000000, 0x266fcecd00000000,
+ 0x707fad9500000000, 0x1518112d00000000, 0xfbb7a43f00000000,
+ 0x9ed0188700000000, 0x27e8cf1a00000000, 0x428f73a200000000,
+ 0xac20c6b000000000, 0xc9477a0800000000, 0x3eaf32a000000000,
+ 0x5bc88e1800000000, 0xb5673b0a00000000, 0xd00087b200000000,
+ 0x6938502f00000000, 0x0c5fec9700000000, 0xe2f0598500000000,
+ 0x8797e53d00000000, 0xd187866500000000, 0xb4e03add00000000,
+ 0x5a4f8fcf00000000, 0x3f28337700000000, 0x8610e4ea00000000,
+ 0xe377585200000000, 0x0dd8ed4000000000, 0x68bf51f800000000,
+ 0xa1f82bf000000000, 0xc49f974800000000, 0x2a30225a00000000,
+ 0x4f579ee200000000, 0xf66f497f00000000, 0x9308f5c700000000,
+ 0x7da740d500000000, 0x18c0fc6d00000000, 0x4ed09f3500000000,
+ 0x2bb7238d00000000, 0xc518969f00000000, 0xa07f2a2700000000,
+ 0x1947fdba00000000, 0x7c20410200000000, 0x928ff41000000000,
+ 0xf7e848a800000000, 0x3d58149b00000000, 0x583fa82300000000,
+ 0xb6901d3100000000, 0xd3f7a18900000000, 0x6acf761400000000,
+ 0x0fa8caac00000000, 0xe1077fbe00000000, 0x8460c30600000000,
+ 0xd270a05e00000000, 0xb7171ce600000000, 0x59b8a9f400000000,
+ 0x3cdf154c00000000, 0x85e7c2d100000000, 0xe0807e6900000000,
+ 0x0e2fcb7b00000000, 0x6b4877c300000000, 0xa20f0dcb00000000,
+ 0xc768b17300000000, 0x29c7046100000000, 0x4ca0b8d900000000,
+ 0xf5986f4400000000, 0x90ffd3fc00000000, 0x7e5066ee00000000,
+ 0x1b37da5600000000, 0x4d27b90e00000000, 0x284005b600000000,
+ 0xc6efb0a400000000, 0xa3880c1c00000000, 0x1ab0db8100000000,
+ 0x7fd7673900000000, 0x9178d22b00000000, 0xf41f6e9300000000,
+ 0x03f7263b00000000, 0x66909a8300000000, 0x883f2f9100000000,
+ 0xed58932900000000, 0x546044b400000000, 0x3107f80c00000000,
+ 0xdfa84d1e00000000, 0xbacff1a600000000, 0xecdf92fe00000000,
+ 0x89b82e4600000000, 0x67179b5400000000, 0x027027ec00000000,
+ 0xbb48f07100000000, 0xde2f4cc900000000, 0x3080f9db00000000,
+ 0x55e7456300000000, 0x9ca03f6b00000000, 0xf9c783d300000000,
+ 0x176836c100000000, 0x720f8a7900000000, 0xcb375de400000000,
+ 0xae50e15c00000000, 0x40ff544e00000000, 0x2598e8f600000000,
+ 0x73888bae00000000, 0x16ef371600000000, 0xf840820400000000,
+ 0x9d273ebc00000000, 0x241fe92100000000, 0x4178559900000000,
+ 0xafd7e08b00000000, 0xcab05c3300000000, 0x3bb659ed00000000,
+ 0x5ed1e55500000000, 0xb07e504700000000, 0xd519ecff00000000,
+ 0x6c213b6200000000, 0x094687da00000000, 0xe7e932c800000000,
+ 0x828e8e7000000000, 0xd49eed2800000000, 0xb1f9519000000000,
+ 0x5f56e48200000000, 0x3a31583a00000000, 0x83098fa700000000,
+ 0xe66e331f00000000, 0x08c1860d00000000, 0x6da63ab500000000,
+ 0xa4e140bd00000000, 0xc186fc0500000000, 0x2f29491700000000,
+ 0x4a4ef5af00000000, 0xf376223200000000, 0x96119e8a00000000,
+ 0x78be2b9800000000, 0x1dd9972000000000, 0x4bc9f47800000000,
+ 0x2eae48c000000000, 0xc001fdd200000000, 0xa566416a00000000,
+ 0x1c5e96f700000000, 0x79392a4f00000000, 0x97969f5d00000000,
+ 0xf2f123e500000000, 0x05196b4d00000000, 0x607ed7f500000000,
+ 0x8ed162e700000000, 0xebb6de5f00000000, 0x528e09c200000000,
+ 0x37e9b57a00000000, 0xd946006800000000, 0xbc21bcd000000000,
+ 0xea31df8800000000, 0x8f56633000000000, 0x61f9d62200000000,
+ 0x049e6a9a00000000, 0xbda6bd0700000000, 0xd8c101bf00000000,
+ 0x366eb4ad00000000, 0x5309081500000000, 0x9a4e721d00000000,
+ 0xff29cea500000000, 0x11867bb700000000, 0x74e1c70f00000000,
+ 0xcdd9109200000000, 0xa8beac2a00000000, 0x4611193800000000,
+ 0x2376a58000000000, 0x7566c6d800000000, 0x10017a6000000000,
+ 0xfeaecf7200000000, 0x9bc973ca00000000, 0x22f1a45700000000,
+ 0x479618ef00000000, 0xa939adfd00000000, 0xcc5e114500000000,
+ 0x06ee4d7600000000, 0x6389f1ce00000000, 0x8d2644dc00000000,
+ 0xe841f86400000000, 0x51792ff900000000, 0x341e934100000000,
+ 0xdab1265300000000, 0xbfd69aeb00000000, 0xe9c6f9b300000000,
+ 0x8ca1450b00000000, 0x620ef01900000000, 0x07694ca100000000,
+ 0xbe519b3c00000000, 0xdb36278400000000, 0x3599929600000000,
+ 0x50fe2e2e00000000, 0x99b9542600000000, 0xfcdee89e00000000,
+ 0x12715d8c00000000, 0x7716e13400000000, 0xce2e36a900000000,
+ 0xab498a1100000000, 0x45e63f0300000000, 0x208183bb00000000,
+ 0x7691e0e300000000, 0x13f65c5b00000000, 0xfd59e94900000000,
+ 0x983e55f100000000, 0x2106826c00000000, 0x44613ed400000000,
+ 0xaace8bc600000000, 0xcfa9377e00000000, 0x38417fd600000000,
+ 0x5d26c36e00000000, 0xb389767c00000000, 0xd6eecac400000000,
+ 0x6fd61d5900000000, 0x0ab1a1e100000000, 0xe41e14f300000000,
+ 0x8179a84b00000000, 0xd769cb1300000000, 0xb20e77ab00000000,
+ 0x5ca1c2b900000000, 0x39c67e0100000000, 0x80fea99c00000000,
+ 0xe599152400000000, 0x0b36a03600000000, 0x6e511c8e00000000,
+ 0xa716668600000000, 0xc271da3e00000000, 0x2cde6f2c00000000,
+ 0x49b9d39400000000, 0xf081040900000000, 0x95e6b8b100000000,
+ 0x7b490da300000000, 0x1e2eb11b00000000, 0x483ed24300000000,
+ 0x2d596efb00000000, 0xc3f6dbe900000000, 0xa691675100000000,
+ 0x1fa9b0cc00000000, 0x7ace0c7400000000, 0x9461b96600000000,
+ 0xf10605de00000000},
+ {0x0000000000000000, 0xb029603d00000000, 0x6053c07a00000000,
+ 0xd07aa04700000000, 0xc0a680f500000000, 0x708fe0c800000000,
+ 0xa0f5408f00000000, 0x10dc20b200000000, 0xc14b703000000000,
+ 0x7162100d00000000, 0xa118b04a00000000, 0x1131d07700000000,
+ 0x01edf0c500000000, 0xb1c490f800000000, 0x61be30bf00000000,
+ 0xd197508200000000, 0x8297e06000000000, 0x32be805d00000000,
+ 0xe2c4201a00000000, 0x52ed402700000000, 0x4231609500000000,
+ 0xf21800a800000000, 0x2262a0ef00000000, 0x924bc0d200000000,
+ 0x43dc905000000000, 0xf3f5f06d00000000, 0x238f502a00000000,
+ 0x93a6301700000000, 0x837a10a500000000, 0x3353709800000000,
+ 0xe329d0df00000000, 0x5300b0e200000000, 0x042fc1c100000000,
+ 0xb406a1fc00000000, 0x647c01bb00000000, 0xd455618600000000,
+ 0xc489413400000000, 0x74a0210900000000, 0xa4da814e00000000,
+ 0x14f3e17300000000, 0xc564b1f100000000, 0x754dd1cc00000000,
+ 0xa537718b00000000, 0x151e11b600000000, 0x05c2310400000000,
+ 0xb5eb513900000000, 0x6591f17e00000000, 0xd5b8914300000000,
+ 0x86b821a100000000, 0x3691419c00000000, 0xe6ebe1db00000000,
+ 0x56c281e600000000, 0x461ea15400000000, 0xf637c16900000000,
+ 0x264d612e00000000, 0x9664011300000000, 0x47f3519100000000,
+ 0xf7da31ac00000000, 0x27a091eb00000000, 0x9789f1d600000000,
+ 0x8755d16400000000, 0x377cb15900000000, 0xe706111e00000000,
+ 0x572f712300000000, 0x4958f35800000000, 0xf971936500000000,
+ 0x290b332200000000, 0x9922531f00000000, 0x89fe73ad00000000,
+ 0x39d7139000000000, 0xe9adb3d700000000, 0x5984d3ea00000000,
+ 0x8813836800000000, 0x383ae35500000000, 0xe840431200000000,
+ 0x5869232f00000000, 0x48b5039d00000000, 0xf89c63a000000000,
+ 0x28e6c3e700000000, 0x98cfa3da00000000, 0xcbcf133800000000,
+ 0x7be6730500000000, 0xab9cd34200000000, 0x1bb5b37f00000000,
+ 0x0b6993cd00000000, 0xbb40f3f000000000, 0x6b3a53b700000000,
+ 0xdb13338a00000000, 0x0a84630800000000, 0xbaad033500000000,
+ 0x6ad7a37200000000, 0xdafec34f00000000, 0xca22e3fd00000000,
+ 0x7a0b83c000000000, 0xaa71238700000000, 0x1a5843ba00000000,
+ 0x4d77329900000000, 0xfd5e52a400000000, 0x2d24f2e300000000,
+ 0x9d0d92de00000000, 0x8dd1b26c00000000, 0x3df8d25100000000,
+ 0xed82721600000000, 0x5dab122b00000000, 0x8c3c42a900000000,
+ 0x3c15229400000000, 0xec6f82d300000000, 0x5c46e2ee00000000,
+ 0x4c9ac25c00000000, 0xfcb3a26100000000, 0x2cc9022600000000,
+ 0x9ce0621b00000000, 0xcfe0d2f900000000, 0x7fc9b2c400000000,
+ 0xafb3128300000000, 0x1f9a72be00000000, 0x0f46520c00000000,
+ 0xbf6f323100000000, 0x6f15927600000000, 0xdf3cf24b00000000,
+ 0x0eaba2c900000000, 0xbe82c2f400000000, 0x6ef862b300000000,
+ 0xded1028e00000000, 0xce0d223c00000000, 0x7e24420100000000,
+ 0xae5ee24600000000, 0x1e77827b00000000, 0x92b0e6b100000000,
+ 0x2299868c00000000, 0xf2e326cb00000000, 0x42ca46f600000000,
+ 0x5216664400000000, 0xe23f067900000000, 0x3245a63e00000000,
+ 0x826cc60300000000, 0x53fb968100000000, 0xe3d2f6bc00000000,
+ 0x33a856fb00000000, 0x838136c600000000, 0x935d167400000000,
+ 0x2374764900000000, 0xf30ed60e00000000, 0x4327b63300000000,
+ 0x102706d100000000, 0xa00e66ec00000000, 0x7074c6ab00000000,
+ 0xc05da69600000000, 0xd081862400000000, 0x60a8e61900000000,
+ 0xb0d2465e00000000, 0x00fb266300000000, 0xd16c76e100000000,
+ 0x614516dc00000000, 0xb13fb69b00000000, 0x0116d6a600000000,
+ 0x11caf61400000000, 0xa1e3962900000000, 0x7199366e00000000,
+ 0xc1b0565300000000, 0x969f277000000000, 0x26b6474d00000000,
+ 0xf6cce70a00000000, 0x46e5873700000000, 0x5639a78500000000,
+ 0xe610c7b800000000, 0x366a67ff00000000, 0x864307c200000000,
+ 0x57d4574000000000, 0xe7fd377d00000000, 0x3787973a00000000,
+ 0x87aef70700000000, 0x9772d7b500000000, 0x275bb78800000000,
+ 0xf72117cf00000000, 0x470877f200000000, 0x1408c71000000000,
+ 0xa421a72d00000000, 0x745b076a00000000, 0xc472675700000000,
+ 0xd4ae47e500000000, 0x648727d800000000, 0xb4fd879f00000000,
+ 0x04d4e7a200000000, 0xd543b72000000000, 0x656ad71d00000000,
+ 0xb510775a00000000, 0x0539176700000000, 0x15e537d500000000,
+ 0xa5cc57e800000000, 0x75b6f7af00000000, 0xc59f979200000000,
+ 0xdbe815e900000000, 0x6bc175d400000000, 0xbbbbd59300000000,
+ 0x0b92b5ae00000000, 0x1b4e951c00000000, 0xab67f52100000000,
+ 0x7b1d556600000000, 0xcb34355b00000000, 0x1aa365d900000000,
+ 0xaa8a05e400000000, 0x7af0a5a300000000, 0xcad9c59e00000000,
+ 0xda05e52c00000000, 0x6a2c851100000000, 0xba56255600000000,
+ 0x0a7f456b00000000, 0x597ff58900000000, 0xe95695b400000000,
+ 0x392c35f300000000, 0x890555ce00000000, 0x99d9757c00000000,
+ 0x29f0154100000000, 0xf98ab50600000000, 0x49a3d53b00000000,
+ 0x983485b900000000, 0x281de58400000000, 0xf86745c300000000,
+ 0x484e25fe00000000, 0x5892054c00000000, 0xe8bb657100000000,
+ 0x38c1c53600000000, 0x88e8a50b00000000, 0xdfc7d42800000000,
+ 0x6feeb41500000000, 0xbf94145200000000, 0x0fbd746f00000000,
+ 0x1f6154dd00000000, 0xaf4834e000000000, 0x7f3294a700000000,
+ 0xcf1bf49a00000000, 0x1e8ca41800000000, 0xaea5c42500000000,
+ 0x7edf646200000000, 0xcef6045f00000000, 0xde2a24ed00000000,
+ 0x6e0344d000000000, 0xbe79e49700000000, 0x0e5084aa00000000,
+ 0x5d50344800000000, 0xed79547500000000, 0x3d03f43200000000,
+ 0x8d2a940f00000000, 0x9df6b4bd00000000, 0x2ddfd48000000000,
+ 0xfda574c700000000, 0x4d8c14fa00000000, 0x9c1b447800000000,
+ 0x2c32244500000000, 0xfc48840200000000, 0x4c61e43f00000000,
+ 0x5cbdc48d00000000, 0xec94a4b000000000, 0x3cee04f700000000,
+ 0x8cc764ca00000000},
+ {0x0000000000000000, 0xa5d35ccb00000000, 0x0ba1c84d00000000,
+ 0xae72948600000000, 0x1642919b00000000, 0xb391cd5000000000,
+ 0x1de359d600000000, 0xb830051d00000000, 0x6d8253ec00000000,
+ 0xc8510f2700000000, 0x66239ba100000000, 0xc3f0c76a00000000,
+ 0x7bc0c27700000000, 0xde139ebc00000000, 0x70610a3a00000000,
+ 0xd5b256f100000000, 0x9b02d60300000000, 0x3ed18ac800000000,
+ 0x90a31e4e00000000, 0x3570428500000000, 0x8d40479800000000,
+ 0x28931b5300000000, 0x86e18fd500000000, 0x2332d31e00000000,
+ 0xf68085ef00000000, 0x5353d92400000000, 0xfd214da200000000,
+ 0x58f2116900000000, 0xe0c2147400000000, 0x451148bf00000000,
+ 0xeb63dc3900000000, 0x4eb080f200000000, 0x3605ac0700000000,
+ 0x93d6f0cc00000000, 0x3da4644a00000000, 0x9877388100000000,
+ 0x20473d9c00000000, 0x8594615700000000, 0x2be6f5d100000000,
+ 0x8e35a91a00000000, 0x5b87ffeb00000000, 0xfe54a32000000000,
+ 0x502637a600000000, 0xf5f56b6d00000000, 0x4dc56e7000000000,
+ 0xe81632bb00000000, 0x4664a63d00000000, 0xe3b7faf600000000,
+ 0xad077a0400000000, 0x08d426cf00000000, 0xa6a6b24900000000,
+ 0x0375ee8200000000, 0xbb45eb9f00000000, 0x1e96b75400000000,
+ 0xb0e423d200000000, 0x15377f1900000000, 0xc08529e800000000,
+ 0x6556752300000000, 0xcb24e1a500000000, 0x6ef7bd6e00000000,
+ 0xd6c7b87300000000, 0x7314e4b800000000, 0xdd66703e00000000,
+ 0x78b52cf500000000, 0x6c0a580f00000000, 0xc9d904c400000000,
+ 0x67ab904200000000, 0xc278cc8900000000, 0x7a48c99400000000,
+ 0xdf9b955f00000000, 0x71e901d900000000, 0xd43a5d1200000000,
+ 0x01880be300000000, 0xa45b572800000000, 0x0a29c3ae00000000,
+ 0xaffa9f6500000000, 0x17ca9a7800000000, 0xb219c6b300000000,
+ 0x1c6b523500000000, 0xb9b80efe00000000, 0xf7088e0c00000000,
+ 0x52dbd2c700000000, 0xfca9464100000000, 0x597a1a8a00000000,
+ 0xe14a1f9700000000, 0x4499435c00000000, 0xeaebd7da00000000,
+ 0x4f388b1100000000, 0x9a8adde000000000, 0x3f59812b00000000,
+ 0x912b15ad00000000, 0x34f8496600000000, 0x8cc84c7b00000000,
+ 0x291b10b000000000, 0x8769843600000000, 0x22bad8fd00000000,
+ 0x5a0ff40800000000, 0xffdca8c300000000, 0x51ae3c4500000000,
+ 0xf47d608e00000000, 0x4c4d659300000000, 0xe99e395800000000,
+ 0x47ecadde00000000, 0xe23ff11500000000, 0x378da7e400000000,
+ 0x925efb2f00000000, 0x3c2c6fa900000000, 0x99ff336200000000,
+ 0x21cf367f00000000, 0x841c6ab400000000, 0x2a6efe3200000000,
+ 0x8fbda2f900000000, 0xc10d220b00000000, 0x64de7ec000000000,
+ 0xcaacea4600000000, 0x6f7fb68d00000000, 0xd74fb39000000000,
+ 0x729cef5b00000000, 0xdcee7bdd00000000, 0x793d271600000000,
+ 0xac8f71e700000000, 0x095c2d2c00000000, 0xa72eb9aa00000000,
+ 0x02fde56100000000, 0xbacde07c00000000, 0x1f1ebcb700000000,
+ 0xb16c283100000000, 0x14bf74fa00000000, 0xd814b01e00000000,
+ 0x7dc7ecd500000000, 0xd3b5785300000000, 0x7666249800000000,
+ 0xce56218500000000, 0x6b857d4e00000000, 0xc5f7e9c800000000,
+ 0x6024b50300000000, 0xb596e3f200000000, 0x1045bf3900000000,
+ 0xbe372bbf00000000, 0x1be4777400000000, 0xa3d4726900000000,
+ 0x06072ea200000000, 0xa875ba2400000000, 0x0da6e6ef00000000,
+ 0x4316661d00000000, 0xe6c53ad600000000, 0x48b7ae5000000000,
+ 0xed64f29b00000000, 0x5554f78600000000, 0xf087ab4d00000000,
+ 0x5ef53fcb00000000, 0xfb26630000000000, 0x2e9435f100000000,
+ 0x8b47693a00000000, 0x2535fdbc00000000, 0x80e6a17700000000,
+ 0x38d6a46a00000000, 0x9d05f8a100000000, 0x33776c2700000000,
+ 0x96a430ec00000000, 0xee111c1900000000, 0x4bc240d200000000,
+ 0xe5b0d45400000000, 0x4063889f00000000, 0xf8538d8200000000,
+ 0x5d80d14900000000, 0xf3f245cf00000000, 0x5621190400000000,
+ 0x83934ff500000000, 0x2640133e00000000, 0x883287b800000000,
+ 0x2de1db7300000000, 0x95d1de6e00000000, 0x300282a500000000,
+ 0x9e70162300000000, 0x3ba34ae800000000, 0x7513ca1a00000000,
+ 0xd0c096d100000000, 0x7eb2025700000000, 0xdb615e9c00000000,
+ 0x63515b8100000000, 0xc682074a00000000, 0x68f093cc00000000,
+ 0xcd23cf0700000000, 0x189199f600000000, 0xbd42c53d00000000,
+ 0x133051bb00000000, 0xb6e30d7000000000, 0x0ed3086d00000000,
+ 0xab0054a600000000, 0x0572c02000000000, 0xa0a19ceb00000000,
+ 0xb41ee81100000000, 0x11cdb4da00000000, 0xbfbf205c00000000,
+ 0x1a6c7c9700000000, 0xa25c798a00000000, 0x078f254100000000,
+ 0xa9fdb1c700000000, 0x0c2eed0c00000000, 0xd99cbbfd00000000,
+ 0x7c4fe73600000000, 0xd23d73b000000000, 0x77ee2f7b00000000,
+ 0xcfde2a6600000000, 0x6a0d76ad00000000, 0xc47fe22b00000000,
+ 0x61acbee000000000, 0x2f1c3e1200000000, 0x8acf62d900000000,
+ 0x24bdf65f00000000, 0x816eaa9400000000, 0x395eaf8900000000,
+ 0x9c8df34200000000, 0x32ff67c400000000, 0x972c3b0f00000000,
+ 0x429e6dfe00000000, 0xe74d313500000000, 0x493fa5b300000000,
+ 0xececf97800000000, 0x54dcfc6500000000, 0xf10fa0ae00000000,
+ 0x5f7d342800000000, 0xfaae68e300000000, 0x821b441600000000,
+ 0x27c818dd00000000, 0x89ba8c5b00000000, 0x2c69d09000000000,
+ 0x9459d58d00000000, 0x318a894600000000, 0x9ff81dc000000000,
+ 0x3a2b410b00000000, 0xef9917fa00000000, 0x4a4a4b3100000000,
+ 0xe438dfb700000000, 0x41eb837c00000000, 0xf9db866100000000,
+ 0x5c08daaa00000000, 0xf27a4e2c00000000, 0x57a912e700000000,
+ 0x1919921500000000, 0xbccacede00000000, 0x12b85a5800000000,
+ 0xb76b069300000000, 0x0f5b038e00000000, 0xaa885f4500000000,
+ 0x04facbc300000000, 0xa129970800000000, 0x749bc1f900000000,
+ 0xd1489d3200000000, 0x7f3a09b400000000, 0xdae9557f00000000,
+ 0x62d9506200000000, 0xc70a0ca900000000, 0x6978982f00000000,
+ 0xccabc4e400000000},
+ {0x0000000000000000, 0xb40b77a600000000, 0x29119f9700000000,
+ 0x9d1ae83100000000, 0x13244ff400000000, 0xa72f385200000000,
+ 0x3a35d06300000000, 0x8e3ea7c500000000, 0x674eef3300000000,
+ 0xd345989500000000, 0x4e5f70a400000000, 0xfa54070200000000,
+ 0x746aa0c700000000, 0xc061d76100000000, 0x5d7b3f5000000000,
+ 0xe97048f600000000, 0xce9cde6700000000, 0x7a97a9c100000000,
+ 0xe78d41f000000000, 0x5386365600000000, 0xddb8919300000000,
+ 0x69b3e63500000000, 0xf4a90e0400000000, 0x40a279a200000000,
+ 0xa9d2315400000000, 0x1dd946f200000000, 0x80c3aec300000000,
+ 0x34c8d96500000000, 0xbaf67ea000000000, 0x0efd090600000000,
+ 0x93e7e13700000000, 0x27ec969100000000, 0x9c39bdcf00000000,
+ 0x2832ca6900000000, 0xb528225800000000, 0x012355fe00000000,
+ 0x8f1df23b00000000, 0x3b16859d00000000, 0xa60c6dac00000000,
+ 0x12071a0a00000000, 0xfb7752fc00000000, 0x4f7c255a00000000,
+ 0xd266cd6b00000000, 0x666dbacd00000000, 0xe8531d0800000000,
+ 0x5c586aae00000000, 0xc142829f00000000, 0x7549f53900000000,
+ 0x52a563a800000000, 0xe6ae140e00000000, 0x7bb4fc3f00000000,
+ 0xcfbf8b9900000000, 0x41812c5c00000000, 0xf58a5bfa00000000,
+ 0x6890b3cb00000000, 0xdc9bc46d00000000, 0x35eb8c9b00000000,
+ 0x81e0fb3d00000000, 0x1cfa130c00000000, 0xa8f164aa00000000,
+ 0x26cfc36f00000000, 0x92c4b4c900000000, 0x0fde5cf800000000,
+ 0xbbd52b5e00000000, 0x79750b4400000000, 0xcd7e7ce200000000,
+ 0x506494d300000000, 0xe46fe37500000000, 0x6a5144b000000000,
+ 0xde5a331600000000, 0x4340db2700000000, 0xf74bac8100000000,
+ 0x1e3be47700000000, 0xaa3093d100000000, 0x372a7be000000000,
+ 0x83210c4600000000, 0x0d1fab8300000000, 0xb914dc2500000000,
+ 0x240e341400000000, 0x900543b200000000, 0xb7e9d52300000000,
+ 0x03e2a28500000000, 0x9ef84ab400000000, 0x2af33d1200000000,
+ 0xa4cd9ad700000000, 0x10c6ed7100000000, 0x8ddc054000000000,
+ 0x39d772e600000000, 0xd0a73a1000000000, 0x64ac4db600000000,
+ 0xf9b6a58700000000, 0x4dbdd22100000000, 0xc38375e400000000,
+ 0x7788024200000000, 0xea92ea7300000000, 0x5e999dd500000000,
+ 0xe54cb68b00000000, 0x5147c12d00000000, 0xcc5d291c00000000,
+ 0x78565eba00000000, 0xf668f97f00000000, 0x42638ed900000000,
+ 0xdf7966e800000000, 0x6b72114e00000000, 0x820259b800000000,
+ 0x36092e1e00000000, 0xab13c62f00000000, 0x1f18b18900000000,
+ 0x9126164c00000000, 0x252d61ea00000000, 0xb83789db00000000,
+ 0x0c3cfe7d00000000, 0x2bd068ec00000000, 0x9fdb1f4a00000000,
+ 0x02c1f77b00000000, 0xb6ca80dd00000000, 0x38f4271800000000,
+ 0x8cff50be00000000, 0x11e5b88f00000000, 0xa5eecf2900000000,
+ 0x4c9e87df00000000, 0xf895f07900000000, 0x658f184800000000,
+ 0xd1846fee00000000, 0x5fbac82b00000000, 0xebb1bf8d00000000,
+ 0x76ab57bc00000000, 0xc2a0201a00000000, 0xf2ea168800000000,
+ 0x46e1612e00000000, 0xdbfb891f00000000, 0x6ff0feb900000000,
+ 0xe1ce597c00000000, 0x55c52eda00000000, 0xc8dfc6eb00000000,
+ 0x7cd4b14d00000000, 0x95a4f9bb00000000, 0x21af8e1d00000000,
+ 0xbcb5662c00000000, 0x08be118a00000000, 0x8680b64f00000000,
+ 0x328bc1e900000000, 0xaf9129d800000000, 0x1b9a5e7e00000000,
+ 0x3c76c8ef00000000, 0x887dbf4900000000, 0x1567577800000000,
+ 0xa16c20de00000000, 0x2f52871b00000000, 0x9b59f0bd00000000,
+ 0x0643188c00000000, 0xb2486f2a00000000, 0x5b3827dc00000000,
+ 0xef33507a00000000, 0x7229b84b00000000, 0xc622cfed00000000,
+ 0x481c682800000000, 0xfc171f8e00000000, 0x610df7bf00000000,
+ 0xd506801900000000, 0x6ed3ab4700000000, 0xdad8dce100000000,
+ 0x47c234d000000000, 0xf3c9437600000000, 0x7df7e4b300000000,
+ 0xc9fc931500000000, 0x54e67b2400000000, 0xe0ed0c8200000000,
+ 0x099d447400000000, 0xbd9633d200000000, 0x208cdbe300000000,
+ 0x9487ac4500000000, 0x1ab90b8000000000, 0xaeb27c2600000000,
+ 0x33a8941700000000, 0x87a3e3b100000000, 0xa04f752000000000,
+ 0x1444028600000000, 0x895eeab700000000, 0x3d559d1100000000,
+ 0xb36b3ad400000000, 0x07604d7200000000, 0x9a7aa54300000000,
+ 0x2e71d2e500000000, 0xc7019a1300000000, 0x730aedb500000000,
+ 0xee10058400000000, 0x5a1b722200000000, 0xd425d5e700000000,
+ 0x602ea24100000000, 0xfd344a7000000000, 0x493f3dd600000000,
+ 0x8b9f1dcc00000000, 0x3f946a6a00000000, 0xa28e825b00000000,
+ 0x1685f5fd00000000, 0x98bb523800000000, 0x2cb0259e00000000,
+ 0xb1aacdaf00000000, 0x05a1ba0900000000, 0xecd1f2ff00000000,
+ 0x58da855900000000, 0xc5c06d6800000000, 0x71cb1ace00000000,
+ 0xfff5bd0b00000000, 0x4bfecaad00000000, 0xd6e4229c00000000,
+ 0x62ef553a00000000, 0x4503c3ab00000000, 0xf108b40d00000000,
+ 0x6c125c3c00000000, 0xd8192b9a00000000, 0x56278c5f00000000,
+ 0xe22cfbf900000000, 0x7f3613c800000000, 0xcb3d646e00000000,
+ 0x224d2c9800000000, 0x96465b3e00000000, 0x0b5cb30f00000000,
+ 0xbf57c4a900000000, 0x3169636c00000000, 0x856214ca00000000,
+ 0x1878fcfb00000000, 0xac738b5d00000000, 0x17a6a00300000000,
+ 0xa3add7a500000000, 0x3eb73f9400000000, 0x8abc483200000000,
+ 0x0482eff700000000, 0xb089985100000000, 0x2d93706000000000,
+ 0x999807c600000000, 0x70e84f3000000000, 0xc4e3389600000000,
+ 0x59f9d0a700000000, 0xedf2a70100000000, 0x63cc00c400000000,
+ 0xd7c7776200000000, 0x4add9f5300000000, 0xfed6e8f500000000,
+ 0xd93a7e6400000000, 0x6d3109c200000000, 0xf02be1f300000000,
+ 0x4420965500000000, 0xca1e319000000000, 0x7e15463600000000,
+ 0xe30fae0700000000, 0x5704d9a100000000, 0xbe74915700000000,
+ 0x0a7fe6f100000000, 0x97650ec000000000, 0x236e796600000000,
+ 0xad50dea300000000, 0x195ba90500000000, 0x8441413400000000,
+ 0x304a369200000000},
+ {0x0000000000000000, 0x9e00aacc00000000, 0x7d07254200000000,
+ 0xe3078f8e00000000, 0xfa0e4a8400000000, 0x640ee04800000000,
+ 0x87096fc600000000, 0x1909c50a00000000, 0xb51be5d300000000,
+ 0x2b1b4f1f00000000, 0xc81cc09100000000, 0x561c6a5d00000000,
+ 0x4f15af5700000000, 0xd115059b00000000, 0x32128a1500000000,
+ 0xac1220d900000000, 0x2b31bb7c00000000, 0xb53111b000000000,
+ 0x56369e3e00000000, 0xc83634f200000000, 0xd13ff1f800000000,
+ 0x4f3f5b3400000000, 0xac38d4ba00000000, 0x32387e7600000000,
+ 0x9e2a5eaf00000000, 0x002af46300000000, 0xe32d7bed00000000,
+ 0x7d2dd12100000000, 0x6424142b00000000, 0xfa24bee700000000,
+ 0x1923316900000000, 0x87239ba500000000, 0x566276f900000000,
+ 0xc862dc3500000000, 0x2b6553bb00000000, 0xb565f97700000000,
+ 0xac6c3c7d00000000, 0x326c96b100000000, 0xd16b193f00000000,
+ 0x4f6bb3f300000000, 0xe379932a00000000, 0x7d7939e600000000,
+ 0x9e7eb66800000000, 0x007e1ca400000000, 0x1977d9ae00000000,
+ 0x8777736200000000, 0x6470fcec00000000, 0xfa70562000000000,
+ 0x7d53cd8500000000, 0xe353674900000000, 0x0054e8c700000000,
+ 0x9e54420b00000000, 0x875d870100000000, 0x195d2dcd00000000,
+ 0xfa5aa24300000000, 0x645a088f00000000, 0xc848285600000000,
+ 0x5648829a00000000, 0xb54f0d1400000000, 0x2b4fa7d800000000,
+ 0x324662d200000000, 0xac46c81e00000000, 0x4f41479000000000,
+ 0xd141ed5c00000000, 0xedc29d2900000000, 0x73c237e500000000,
+ 0x90c5b86b00000000, 0x0ec512a700000000, 0x17ccd7ad00000000,
+ 0x89cc7d6100000000, 0x6acbf2ef00000000, 0xf4cb582300000000,
+ 0x58d978fa00000000, 0xc6d9d23600000000, 0x25de5db800000000,
+ 0xbbdef77400000000, 0xa2d7327e00000000, 0x3cd798b200000000,
+ 0xdfd0173c00000000, 0x41d0bdf000000000, 0xc6f3265500000000,
+ 0x58f38c9900000000, 0xbbf4031700000000, 0x25f4a9db00000000,
+ 0x3cfd6cd100000000, 0xa2fdc61d00000000, 0x41fa499300000000,
+ 0xdffae35f00000000, 0x73e8c38600000000, 0xede8694a00000000,
+ 0x0eefe6c400000000, 0x90ef4c0800000000, 0x89e6890200000000,
+ 0x17e623ce00000000, 0xf4e1ac4000000000, 0x6ae1068c00000000,
+ 0xbba0ebd000000000, 0x25a0411c00000000, 0xc6a7ce9200000000,
+ 0x58a7645e00000000, 0x41aea15400000000, 0xdfae0b9800000000,
+ 0x3ca9841600000000, 0xa2a92eda00000000, 0x0ebb0e0300000000,
+ 0x90bba4cf00000000, 0x73bc2b4100000000, 0xedbc818d00000000,
+ 0xf4b5448700000000, 0x6ab5ee4b00000000, 0x89b261c500000000,
+ 0x17b2cb0900000000, 0x909150ac00000000, 0x0e91fa6000000000,
+ 0xed9675ee00000000, 0x7396df2200000000, 0x6a9f1a2800000000,
+ 0xf49fb0e400000000, 0x17983f6a00000000, 0x899895a600000000,
+ 0x258ab57f00000000, 0xbb8a1fb300000000, 0x588d903d00000000,
+ 0xc68d3af100000000, 0xdf84fffb00000000, 0x4184553700000000,
+ 0xa283dab900000000, 0x3c83707500000000, 0xda853b5300000000,
+ 0x4485919f00000000, 0xa7821e1100000000, 0x3982b4dd00000000,
+ 0x208b71d700000000, 0xbe8bdb1b00000000, 0x5d8c549500000000,
+ 0xc38cfe5900000000, 0x6f9ede8000000000, 0xf19e744c00000000,
+ 0x1299fbc200000000, 0x8c99510e00000000, 0x9590940400000000,
+ 0x0b903ec800000000, 0xe897b14600000000, 0x76971b8a00000000,
+ 0xf1b4802f00000000, 0x6fb42ae300000000, 0x8cb3a56d00000000,
+ 0x12b30fa100000000, 0x0bbacaab00000000, 0x95ba606700000000,
+ 0x76bdefe900000000, 0xe8bd452500000000, 0x44af65fc00000000,
+ 0xdaafcf3000000000, 0x39a840be00000000, 0xa7a8ea7200000000,
+ 0xbea12f7800000000, 0x20a185b400000000, 0xc3a60a3a00000000,
+ 0x5da6a0f600000000, 0x8ce74daa00000000, 0x12e7e76600000000,
+ 0xf1e068e800000000, 0x6fe0c22400000000, 0x76e9072e00000000,
+ 0xe8e9ade200000000, 0x0bee226c00000000, 0x95ee88a000000000,
+ 0x39fca87900000000, 0xa7fc02b500000000, 0x44fb8d3b00000000,
+ 0xdafb27f700000000, 0xc3f2e2fd00000000, 0x5df2483100000000,
+ 0xbef5c7bf00000000, 0x20f56d7300000000, 0xa7d6f6d600000000,
+ 0x39d65c1a00000000, 0xdad1d39400000000, 0x44d1795800000000,
+ 0x5dd8bc5200000000, 0xc3d8169e00000000, 0x20df991000000000,
+ 0xbedf33dc00000000, 0x12cd130500000000, 0x8ccdb9c900000000,
+ 0x6fca364700000000, 0xf1ca9c8b00000000, 0xe8c3598100000000,
+ 0x76c3f34d00000000, 0x95c47cc300000000, 0x0bc4d60f00000000,
+ 0x3747a67a00000000, 0xa9470cb600000000, 0x4a40833800000000,
+ 0xd44029f400000000, 0xcd49ecfe00000000, 0x5349463200000000,
+ 0xb04ec9bc00000000, 0x2e4e637000000000, 0x825c43a900000000,
+ 0x1c5ce96500000000, 0xff5b66eb00000000, 0x615bcc2700000000,
+ 0x7852092d00000000, 0xe652a3e100000000, 0x05552c6f00000000,
+ 0x9b5586a300000000, 0x1c761d0600000000, 0x8276b7ca00000000,
+ 0x6171384400000000, 0xff71928800000000, 0xe678578200000000,
+ 0x7878fd4e00000000, 0x9b7f72c000000000, 0x057fd80c00000000,
+ 0xa96df8d500000000, 0x376d521900000000, 0xd46add9700000000,
+ 0x4a6a775b00000000, 0x5363b25100000000, 0xcd63189d00000000,
+ 0x2e64971300000000, 0xb0643ddf00000000, 0x6125d08300000000,
+ 0xff257a4f00000000, 0x1c22f5c100000000, 0x82225f0d00000000,
+ 0x9b2b9a0700000000, 0x052b30cb00000000, 0xe62cbf4500000000,
+ 0x782c158900000000, 0xd43e355000000000, 0x4a3e9f9c00000000,
+ 0xa939101200000000, 0x3739bade00000000, 0x2e307fd400000000,
+ 0xb030d51800000000, 0x53375a9600000000, 0xcd37f05a00000000,
+ 0x4a146bff00000000, 0xd414c13300000000, 0x37134ebd00000000,
+ 0xa913e47100000000, 0xb01a217b00000000, 0x2e1a8bb700000000,
+ 0xcd1d043900000000, 0x531daef500000000, 0xff0f8e2c00000000,
+ 0x610f24e000000000, 0x8208ab6e00000000, 0x1c0801a200000000,
+ 0x0501c4a800000000, 0x9b016e6400000000, 0x7806e1ea00000000,
+ 0xe6064b2600000000}};
+
+#else /* W == 4 */
+
+local const z_crc_t FAR crc_braid_table[][256] = {
+ {0x00000000, 0xb8bc6765, 0xaa09c88b, 0x12b5afee, 0x8f629757,
+ 0x37def032, 0x256b5fdc, 0x9dd738b9, 0xc5b428ef, 0x7d084f8a,
+ 0x6fbde064, 0xd7018701, 0x4ad6bfb8, 0xf26ad8dd, 0xe0df7733,
+ 0x58631056, 0x5019579f, 0xe8a530fa, 0xfa109f14, 0x42acf871,
+ 0xdf7bc0c8, 0x67c7a7ad, 0x75720843, 0xcdce6f26, 0x95ad7f70,
+ 0x2d111815, 0x3fa4b7fb, 0x8718d09e, 0x1acfe827, 0xa2738f42,
+ 0xb0c620ac, 0x087a47c9, 0xa032af3e, 0x188ec85b, 0x0a3b67b5,
+ 0xb28700d0, 0x2f503869, 0x97ec5f0c, 0x8559f0e2, 0x3de59787,
+ 0x658687d1, 0xdd3ae0b4, 0xcf8f4f5a, 0x7733283f, 0xeae41086,
+ 0x525877e3, 0x40edd80d, 0xf851bf68, 0xf02bf8a1, 0x48979fc4,
+ 0x5a22302a, 0xe29e574f, 0x7f496ff6, 0xc7f50893, 0xd540a77d,
+ 0x6dfcc018, 0x359fd04e, 0x8d23b72b, 0x9f9618c5, 0x272a7fa0,
+ 0xbafd4719, 0x0241207c, 0x10f48f92, 0xa848e8f7, 0x9b14583d,
+ 0x23a83f58, 0x311d90b6, 0x89a1f7d3, 0x1476cf6a, 0xaccaa80f,
+ 0xbe7f07e1, 0x06c36084, 0x5ea070d2, 0xe61c17b7, 0xf4a9b859,
+ 0x4c15df3c, 0xd1c2e785, 0x697e80e0, 0x7bcb2f0e, 0xc377486b,
+ 0xcb0d0fa2, 0x73b168c7, 0x6104c729, 0xd9b8a04c, 0x446f98f5,
+ 0xfcd3ff90, 0xee66507e, 0x56da371b, 0x0eb9274d, 0xb6054028,
+ 0xa4b0efc6, 0x1c0c88a3, 0x81dbb01a, 0x3967d77f, 0x2bd27891,
+ 0x936e1ff4, 0x3b26f703, 0x839a9066, 0x912f3f88, 0x299358ed,
+ 0xb4446054, 0x0cf80731, 0x1e4da8df, 0xa6f1cfba, 0xfe92dfec,
+ 0x462eb889, 0x549b1767, 0xec277002, 0x71f048bb, 0xc94c2fde,
+ 0xdbf98030, 0x6345e755, 0x6b3fa09c, 0xd383c7f9, 0xc1366817,
+ 0x798a0f72, 0xe45d37cb, 0x5ce150ae, 0x4e54ff40, 0xf6e89825,
+ 0xae8b8873, 0x1637ef16, 0x048240f8, 0xbc3e279d, 0x21e91f24,
+ 0x99557841, 0x8be0d7af, 0x335cb0ca, 0xed59b63b, 0x55e5d15e,
+ 0x47507eb0, 0xffec19d5, 0x623b216c, 0xda874609, 0xc832e9e7,
+ 0x708e8e82, 0x28ed9ed4, 0x9051f9b1, 0x82e4565f, 0x3a58313a,
+ 0xa78f0983, 0x1f336ee6, 0x0d86c108, 0xb53aa66d, 0xbd40e1a4,
+ 0x05fc86c1, 0x1749292f, 0xaff54e4a, 0x322276f3, 0x8a9e1196,
+ 0x982bbe78, 0x2097d91d, 0x78f4c94b, 0xc048ae2e, 0xd2fd01c0,
+ 0x6a4166a5, 0xf7965e1c, 0x4f2a3979, 0x5d9f9697, 0xe523f1f2,
+ 0x4d6b1905, 0xf5d77e60, 0xe762d18e, 0x5fdeb6eb, 0xc2098e52,
+ 0x7ab5e937, 0x680046d9, 0xd0bc21bc, 0x88df31ea, 0x3063568f,
+ 0x22d6f961, 0x9a6a9e04, 0x07bda6bd, 0xbf01c1d8, 0xadb46e36,
+ 0x15080953, 0x1d724e9a, 0xa5ce29ff, 0xb77b8611, 0x0fc7e174,
+ 0x9210d9cd, 0x2aacbea8, 0x38191146, 0x80a57623, 0xd8c66675,
+ 0x607a0110, 0x72cfaefe, 0xca73c99b, 0x57a4f122, 0xef189647,
+ 0xfdad39a9, 0x45115ecc, 0x764dee06, 0xcef18963, 0xdc44268d,
+ 0x64f841e8, 0xf92f7951, 0x41931e34, 0x5326b1da, 0xeb9ad6bf,
+ 0xb3f9c6e9, 0x0b45a18c, 0x19f00e62, 0xa14c6907, 0x3c9b51be,
+ 0x842736db, 0x96929935, 0x2e2efe50, 0x2654b999, 0x9ee8defc,
+ 0x8c5d7112, 0x34e11677, 0xa9362ece, 0x118a49ab, 0x033fe645,
+ 0xbb838120, 0xe3e09176, 0x5b5cf613, 0x49e959fd, 0xf1553e98,
+ 0x6c820621, 0xd43e6144, 0xc68bceaa, 0x7e37a9cf, 0xd67f4138,
+ 0x6ec3265d, 0x7c7689b3, 0xc4caeed6, 0x591dd66f, 0xe1a1b10a,
+ 0xf3141ee4, 0x4ba87981, 0x13cb69d7, 0xab770eb2, 0xb9c2a15c,
+ 0x017ec639, 0x9ca9fe80, 0x241599e5, 0x36a0360b, 0x8e1c516e,
+ 0x866616a7, 0x3eda71c2, 0x2c6fde2c, 0x94d3b949, 0x090481f0,
+ 0xb1b8e695, 0xa30d497b, 0x1bb12e1e, 0x43d23e48, 0xfb6e592d,
+ 0xe9dbf6c3, 0x516791a6, 0xccb0a91f, 0x740cce7a, 0x66b96194,
+ 0xde0506f1},
+ {0x00000000, 0x01c26a37, 0x0384d46e, 0x0246be59, 0x0709a8dc,
+ 0x06cbc2eb, 0x048d7cb2, 0x054f1685, 0x0e1351b8, 0x0fd13b8f,
+ 0x0d9785d6, 0x0c55efe1, 0x091af964, 0x08d89353, 0x0a9e2d0a,
+ 0x0b5c473d, 0x1c26a370, 0x1de4c947, 0x1fa2771e, 0x1e601d29,
+ 0x1b2f0bac, 0x1aed619b, 0x18abdfc2, 0x1969b5f5, 0x1235f2c8,
+ 0x13f798ff, 0x11b126a6, 0x10734c91, 0x153c5a14, 0x14fe3023,
+ 0x16b88e7a, 0x177ae44d, 0x384d46e0, 0x398f2cd7, 0x3bc9928e,
+ 0x3a0bf8b9, 0x3f44ee3c, 0x3e86840b, 0x3cc03a52, 0x3d025065,
+ 0x365e1758, 0x379c7d6f, 0x35dac336, 0x3418a901, 0x3157bf84,
+ 0x3095d5b3, 0x32d36bea, 0x331101dd, 0x246be590, 0x25a98fa7,
+ 0x27ef31fe, 0x262d5bc9, 0x23624d4c, 0x22a0277b, 0x20e69922,
+ 0x2124f315, 0x2a78b428, 0x2bbade1f, 0x29fc6046, 0x283e0a71,
+ 0x2d711cf4, 0x2cb376c3, 0x2ef5c89a, 0x2f37a2ad, 0x709a8dc0,
+ 0x7158e7f7, 0x731e59ae, 0x72dc3399, 0x7793251c, 0x76514f2b,
+ 0x7417f172, 0x75d59b45, 0x7e89dc78, 0x7f4bb64f, 0x7d0d0816,
+ 0x7ccf6221, 0x798074a4, 0x78421e93, 0x7a04a0ca, 0x7bc6cafd,
+ 0x6cbc2eb0, 0x6d7e4487, 0x6f38fade, 0x6efa90e9, 0x6bb5866c,
+ 0x6a77ec5b, 0x68315202, 0x69f33835, 0x62af7f08, 0x636d153f,
+ 0x612bab66, 0x60e9c151, 0x65a6d7d4, 0x6464bde3, 0x662203ba,
+ 0x67e0698d, 0x48d7cb20, 0x4915a117, 0x4b531f4e, 0x4a917579,
+ 0x4fde63fc, 0x4e1c09cb, 0x4c5ab792, 0x4d98dda5, 0x46c49a98,
+ 0x4706f0af, 0x45404ef6, 0x448224c1, 0x41cd3244, 0x400f5873,
+ 0x4249e62a, 0x438b8c1d, 0x54f16850, 0x55330267, 0x5775bc3e,
+ 0x56b7d609, 0x53f8c08c, 0x523aaabb, 0x507c14e2, 0x51be7ed5,
+ 0x5ae239e8, 0x5b2053df, 0x5966ed86, 0x58a487b1, 0x5deb9134,
+ 0x5c29fb03, 0x5e6f455a, 0x5fad2f6d, 0xe1351b80, 0xe0f771b7,
+ 0xe2b1cfee, 0xe373a5d9, 0xe63cb35c, 0xe7fed96b, 0xe5b86732,
+ 0xe47a0d05, 0xef264a38, 0xeee4200f, 0xeca29e56, 0xed60f461,
+ 0xe82fe2e4, 0xe9ed88d3, 0xebab368a, 0xea695cbd, 0xfd13b8f0,
+ 0xfcd1d2c7, 0xfe976c9e, 0xff5506a9, 0xfa1a102c, 0xfbd87a1b,
+ 0xf99ec442, 0xf85cae75, 0xf300e948, 0xf2c2837f, 0xf0843d26,
+ 0xf1465711, 0xf4094194, 0xf5cb2ba3, 0xf78d95fa, 0xf64fffcd,
+ 0xd9785d60, 0xd8ba3757, 0xdafc890e, 0xdb3ee339, 0xde71f5bc,
+ 0xdfb39f8b, 0xddf521d2, 0xdc374be5, 0xd76b0cd8, 0xd6a966ef,
+ 0xd4efd8b6, 0xd52db281, 0xd062a404, 0xd1a0ce33, 0xd3e6706a,
+ 0xd2241a5d, 0xc55efe10, 0xc49c9427, 0xc6da2a7e, 0xc7184049,
+ 0xc25756cc, 0xc3953cfb, 0xc1d382a2, 0xc011e895, 0xcb4dafa8,
+ 0xca8fc59f, 0xc8c97bc6, 0xc90b11f1, 0xcc440774, 0xcd866d43,
+ 0xcfc0d31a, 0xce02b92d, 0x91af9640, 0x906dfc77, 0x922b422e,
+ 0x93e92819, 0x96a63e9c, 0x976454ab, 0x9522eaf2, 0x94e080c5,
+ 0x9fbcc7f8, 0x9e7eadcf, 0x9c381396, 0x9dfa79a1, 0x98b56f24,
+ 0x99770513, 0x9b31bb4a, 0x9af3d17d, 0x8d893530, 0x8c4b5f07,
+ 0x8e0de15e, 0x8fcf8b69, 0x8a809dec, 0x8b42f7db, 0x89044982,
+ 0x88c623b5, 0x839a6488, 0x82580ebf, 0x801eb0e6, 0x81dcdad1,
+ 0x8493cc54, 0x8551a663, 0x8717183a, 0x86d5720d, 0xa9e2d0a0,
+ 0xa820ba97, 0xaa6604ce, 0xaba46ef9, 0xaeeb787c, 0xaf29124b,
+ 0xad6fac12, 0xacadc625, 0xa7f18118, 0xa633eb2f, 0xa4755576,
+ 0xa5b73f41, 0xa0f829c4, 0xa13a43f3, 0xa37cfdaa, 0xa2be979d,
+ 0xb5c473d0, 0xb40619e7, 0xb640a7be, 0xb782cd89, 0xb2cddb0c,
+ 0xb30fb13b, 0xb1490f62, 0xb08b6555, 0xbbd72268, 0xba15485f,
+ 0xb853f606, 0xb9919c31, 0xbcde8ab4, 0xbd1ce083, 0xbf5a5eda,
+ 0xbe9834ed},
+ {0x00000000, 0x191b3141, 0x32366282, 0x2b2d53c3, 0x646cc504,
+ 0x7d77f445, 0x565aa786, 0x4f4196c7, 0xc8d98a08, 0xd1c2bb49,
+ 0xfaefe88a, 0xe3f4d9cb, 0xacb54f0c, 0xb5ae7e4d, 0x9e832d8e,
+ 0x87981ccf, 0x4ac21251, 0x53d92310, 0x78f470d3, 0x61ef4192,
+ 0x2eaed755, 0x37b5e614, 0x1c98b5d7, 0x05838496, 0x821b9859,
+ 0x9b00a918, 0xb02dfadb, 0xa936cb9a, 0xe6775d5d, 0xff6c6c1c,
+ 0xd4413fdf, 0xcd5a0e9e, 0x958424a2, 0x8c9f15e3, 0xa7b24620,
+ 0xbea97761, 0xf1e8e1a6, 0xe8f3d0e7, 0xc3de8324, 0xdac5b265,
+ 0x5d5daeaa, 0x44469feb, 0x6f6bcc28, 0x7670fd69, 0x39316bae,
+ 0x202a5aef, 0x0b07092c, 0x121c386d, 0xdf4636f3, 0xc65d07b2,
+ 0xed705471, 0xf46b6530, 0xbb2af3f7, 0xa231c2b6, 0x891c9175,
+ 0x9007a034, 0x179fbcfb, 0x0e848dba, 0x25a9de79, 0x3cb2ef38,
+ 0x73f379ff, 0x6ae848be, 0x41c51b7d, 0x58de2a3c, 0xf0794f05,
+ 0xe9627e44, 0xc24f2d87, 0xdb541cc6, 0x94158a01, 0x8d0ebb40,
+ 0xa623e883, 0xbf38d9c2, 0x38a0c50d, 0x21bbf44c, 0x0a96a78f,
+ 0x138d96ce, 0x5ccc0009, 0x45d73148, 0x6efa628b, 0x77e153ca,
+ 0xbabb5d54, 0xa3a06c15, 0x888d3fd6, 0x91960e97, 0xded79850,
+ 0xc7cca911, 0xece1fad2, 0xf5facb93, 0x7262d75c, 0x6b79e61d,
+ 0x4054b5de, 0x594f849f, 0x160e1258, 0x0f152319, 0x243870da,
+ 0x3d23419b, 0x65fd6ba7, 0x7ce65ae6, 0x57cb0925, 0x4ed03864,
+ 0x0191aea3, 0x188a9fe2, 0x33a7cc21, 0x2abcfd60, 0xad24e1af,
+ 0xb43fd0ee, 0x9f12832d, 0x8609b26c, 0xc94824ab, 0xd05315ea,
+ 0xfb7e4629, 0xe2657768, 0x2f3f79f6, 0x362448b7, 0x1d091b74,
+ 0x04122a35, 0x4b53bcf2, 0x52488db3, 0x7965de70, 0x607eef31,
+ 0xe7e6f3fe, 0xfefdc2bf, 0xd5d0917c, 0xcccba03d, 0x838a36fa,
+ 0x9a9107bb, 0xb1bc5478, 0xa8a76539, 0x3b83984b, 0x2298a90a,
+ 0x09b5fac9, 0x10aecb88, 0x5fef5d4f, 0x46f46c0e, 0x6dd93fcd,
+ 0x74c20e8c, 0xf35a1243, 0xea412302, 0xc16c70c1, 0xd8774180,
+ 0x9736d747, 0x8e2de606, 0xa500b5c5, 0xbc1b8484, 0x71418a1a,
+ 0x685abb5b, 0x4377e898, 0x5a6cd9d9, 0x152d4f1e, 0x0c367e5f,
+ 0x271b2d9c, 0x3e001cdd, 0xb9980012, 0xa0833153, 0x8bae6290,
+ 0x92b553d1, 0xddf4c516, 0xc4eff457, 0xefc2a794, 0xf6d996d5,
+ 0xae07bce9, 0xb71c8da8, 0x9c31de6b, 0x852aef2a, 0xca6b79ed,
+ 0xd37048ac, 0xf85d1b6f, 0xe1462a2e, 0x66de36e1, 0x7fc507a0,
+ 0x54e85463, 0x4df36522, 0x02b2f3e5, 0x1ba9c2a4, 0x30849167,
+ 0x299fa026, 0xe4c5aeb8, 0xfdde9ff9, 0xd6f3cc3a, 0xcfe8fd7b,
+ 0x80a96bbc, 0x99b25afd, 0xb29f093e, 0xab84387f, 0x2c1c24b0,
+ 0x350715f1, 0x1e2a4632, 0x07317773, 0x4870e1b4, 0x516bd0f5,
+ 0x7a468336, 0x635db277, 0xcbfad74e, 0xd2e1e60f, 0xf9ccb5cc,
+ 0xe0d7848d, 0xaf96124a, 0xb68d230b, 0x9da070c8, 0x84bb4189,
+ 0x03235d46, 0x1a386c07, 0x31153fc4, 0x280e0e85, 0x674f9842,
+ 0x7e54a903, 0x5579fac0, 0x4c62cb81, 0x8138c51f, 0x9823f45e,
+ 0xb30ea79d, 0xaa1596dc, 0xe554001b, 0xfc4f315a, 0xd7626299,
+ 0xce7953d8, 0x49e14f17, 0x50fa7e56, 0x7bd72d95, 0x62cc1cd4,
+ 0x2d8d8a13, 0x3496bb52, 0x1fbbe891, 0x06a0d9d0, 0x5e7ef3ec,
+ 0x4765c2ad, 0x6c48916e, 0x7553a02f, 0x3a1236e8, 0x230907a9,
+ 0x0824546a, 0x113f652b, 0x96a779e4, 0x8fbc48a5, 0xa4911b66,
+ 0xbd8a2a27, 0xf2cbbce0, 0xebd08da1, 0xc0fdde62, 0xd9e6ef23,
+ 0x14bce1bd, 0x0da7d0fc, 0x268a833f, 0x3f91b27e, 0x70d024b9,
+ 0x69cb15f8, 0x42e6463b, 0x5bfd777a, 0xdc656bb5, 0xc57e5af4,
+ 0xee530937, 0xf7483876, 0xb809aeb1, 0xa1129ff0, 0x8a3fcc33,
+ 0x9324fd72},
+ {0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419,
+ 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4,
+ 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07,
+ 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
+ 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856,
+ 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
+ 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4,
+ 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
+ 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3,
+ 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a,
+ 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599,
+ 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
+ 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190,
+ 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f,
+ 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e,
+ 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
+ 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed,
+ 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
+ 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3,
+ 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
+ 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a,
+ 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5,
+ 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010,
+ 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
+ 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17,
+ 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6,
+ 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615,
+ 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
+ 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344,
+ 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
+ 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a,
+ 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
+ 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1,
+ 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c,
+ 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef,
+ 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
+ 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe,
+ 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31,
+ 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c,
+ 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
+ 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b,
+ 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
+ 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1,
+ 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
+ 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278,
+ 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7,
+ 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66,
+ 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
+ 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605,
+ 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8,
+ 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b,
+ 0x2d02ef8d}};
+
+local const z_word_t FAR crc_braid_big_table[][256] = {
+ {0x00000000, 0x96300777, 0x2c610eee, 0xba510999, 0x19c46d07,
+ 0x8ff46a70, 0x35a563e9, 0xa395649e, 0x3288db0e, 0xa4b8dc79,
+ 0x1ee9d5e0, 0x88d9d297, 0x2b4cb609, 0xbd7cb17e, 0x072db8e7,
+ 0x911dbf90, 0x6410b71d, 0xf220b06a, 0x4871b9f3, 0xde41be84,
+ 0x7dd4da1a, 0xebe4dd6d, 0x51b5d4f4, 0xc785d383, 0x56986c13,
+ 0xc0a86b64, 0x7af962fd, 0xecc9658a, 0x4f5c0114, 0xd96c0663,
+ 0x633d0ffa, 0xf50d088d, 0xc8206e3b, 0x5e10694c, 0xe44160d5,
+ 0x727167a2, 0xd1e4033c, 0x47d4044b, 0xfd850dd2, 0x6bb50aa5,
+ 0xfaa8b535, 0x6c98b242, 0xd6c9bbdb, 0x40f9bcac, 0xe36cd832,
+ 0x755cdf45, 0xcf0dd6dc, 0x593dd1ab, 0xac30d926, 0x3a00de51,
+ 0x8051d7c8, 0x1661d0bf, 0xb5f4b421, 0x23c4b356, 0x9995bacf,
+ 0x0fa5bdb8, 0x9eb80228, 0x0888055f, 0xb2d90cc6, 0x24e90bb1,
+ 0x877c6f2f, 0x114c6858, 0xab1d61c1, 0x3d2d66b6, 0x9041dc76,
+ 0x0671db01, 0xbc20d298, 0x2a10d5ef, 0x8985b171, 0x1fb5b606,
+ 0xa5e4bf9f, 0x33d4b8e8, 0xa2c90778, 0x34f9000f, 0x8ea80996,
+ 0x18980ee1, 0xbb0d6a7f, 0x2d3d6d08, 0x976c6491, 0x015c63e6,
+ 0xf4516b6b, 0x62616c1c, 0xd8306585, 0x4e0062f2, 0xed95066c,
+ 0x7ba5011b, 0xc1f40882, 0x57c40ff5, 0xc6d9b065, 0x50e9b712,
+ 0xeab8be8b, 0x7c88b9fc, 0xdf1ddd62, 0x492dda15, 0xf37cd38c,
+ 0x654cd4fb, 0x5861b24d, 0xce51b53a, 0x7400bca3, 0xe230bbd4,
+ 0x41a5df4a, 0xd795d83d, 0x6dc4d1a4, 0xfbf4d6d3, 0x6ae96943,
+ 0xfcd96e34, 0x468867ad, 0xd0b860da, 0x732d0444, 0xe51d0333,
+ 0x5f4c0aaa, 0xc97c0ddd, 0x3c710550, 0xaa410227, 0x10100bbe,
+ 0x86200cc9, 0x25b56857, 0xb3856f20, 0x09d466b9, 0x9fe461ce,
+ 0x0ef9de5e, 0x98c9d929, 0x2298d0b0, 0xb4a8d7c7, 0x173db359,
+ 0x810db42e, 0x3b5cbdb7, 0xad6cbac0, 0x2083b8ed, 0xb6b3bf9a,
+ 0x0ce2b603, 0x9ad2b174, 0x3947d5ea, 0xaf77d29d, 0x1526db04,
+ 0x8316dc73, 0x120b63e3, 0x843b6494, 0x3e6a6d0d, 0xa85a6a7a,
+ 0x0bcf0ee4, 0x9dff0993, 0x27ae000a, 0xb19e077d, 0x44930ff0,
+ 0xd2a30887, 0x68f2011e, 0xfec20669, 0x5d5762f7, 0xcb676580,
+ 0x71366c19, 0xe7066b6e, 0x761bd4fe, 0xe02bd389, 0x5a7ada10,
+ 0xcc4add67, 0x6fdfb9f9, 0xf9efbe8e, 0x43beb717, 0xd58eb060,
+ 0xe8a3d6d6, 0x7e93d1a1, 0xc4c2d838, 0x52f2df4f, 0xf167bbd1,
+ 0x6757bca6, 0xdd06b53f, 0x4b36b248, 0xda2b0dd8, 0x4c1b0aaf,
+ 0xf64a0336, 0x607a0441, 0xc3ef60df, 0x55df67a8, 0xef8e6e31,
+ 0x79be6946, 0x8cb361cb, 0x1a8366bc, 0xa0d26f25, 0x36e26852,
+ 0x95770ccc, 0x03470bbb, 0xb9160222, 0x2f260555, 0xbe3bbac5,
+ 0x280bbdb2, 0x925ab42b, 0x046ab35c, 0xa7ffd7c2, 0x31cfd0b5,
+ 0x8b9ed92c, 0x1daede5b, 0xb0c2649b, 0x26f263ec, 0x9ca36a75,
+ 0x0a936d02, 0xa906099c, 0x3f360eeb, 0x85670772, 0x13570005,
+ 0x824abf95, 0x147ab8e2, 0xae2bb17b, 0x381bb60c, 0x9b8ed292,
+ 0x0dbed5e5, 0xb7efdc7c, 0x21dfdb0b, 0xd4d2d386, 0x42e2d4f1,
+ 0xf8b3dd68, 0x6e83da1f, 0xcd16be81, 0x5b26b9f6, 0xe177b06f,
+ 0x7747b718, 0xe65a0888, 0x706a0fff, 0xca3b0666, 0x5c0b0111,
+ 0xff9e658f, 0x69ae62f8, 0xd3ff6b61, 0x45cf6c16, 0x78e20aa0,
+ 0xeed20dd7, 0x5483044e, 0xc2b30339, 0x612667a7, 0xf71660d0,
+ 0x4d476949, 0xdb776e3e, 0x4a6ad1ae, 0xdc5ad6d9, 0x660bdf40,
+ 0xf03bd837, 0x53aebca9, 0xc59ebbde, 0x7fcfb247, 0xe9ffb530,
+ 0x1cf2bdbd, 0x8ac2baca, 0x3093b353, 0xa6a3b424, 0x0536d0ba,
+ 0x9306d7cd, 0x2957de54, 0xbf67d923, 0x2e7a66b3, 0xb84a61c4,
+ 0x021b685d, 0x942b6f2a, 0x37be0bb4, 0xa18e0cc3, 0x1bdf055a,
+ 0x8def022d},
+ {0x00000000, 0x41311b19, 0x82623632, 0xc3532d2b, 0x04c56c64,
+ 0x45f4777d, 0x86a75a56, 0xc796414f, 0x088ad9c8, 0x49bbc2d1,
+ 0x8ae8effa, 0xcbd9f4e3, 0x0c4fb5ac, 0x4d7eaeb5, 0x8e2d839e,
+ 0xcf1c9887, 0x5112c24a, 0x1023d953, 0xd370f478, 0x9241ef61,
+ 0x55d7ae2e, 0x14e6b537, 0xd7b5981c, 0x96848305, 0x59981b82,
+ 0x18a9009b, 0xdbfa2db0, 0x9acb36a9, 0x5d5d77e6, 0x1c6c6cff,
+ 0xdf3f41d4, 0x9e0e5acd, 0xa2248495, 0xe3159f8c, 0x2046b2a7,
+ 0x6177a9be, 0xa6e1e8f1, 0xe7d0f3e8, 0x2483dec3, 0x65b2c5da,
+ 0xaaae5d5d, 0xeb9f4644, 0x28cc6b6f, 0x69fd7076, 0xae6b3139,
+ 0xef5a2a20, 0x2c09070b, 0x6d381c12, 0xf33646df, 0xb2075dc6,
+ 0x715470ed, 0x30656bf4, 0xf7f32abb, 0xb6c231a2, 0x75911c89,
+ 0x34a00790, 0xfbbc9f17, 0xba8d840e, 0x79dea925, 0x38efb23c,
+ 0xff79f373, 0xbe48e86a, 0x7d1bc541, 0x3c2ade58, 0x054f79f0,
+ 0x447e62e9, 0x872d4fc2, 0xc61c54db, 0x018a1594, 0x40bb0e8d,
+ 0x83e823a6, 0xc2d938bf, 0x0dc5a038, 0x4cf4bb21, 0x8fa7960a,
+ 0xce968d13, 0x0900cc5c, 0x4831d745, 0x8b62fa6e, 0xca53e177,
+ 0x545dbbba, 0x156ca0a3, 0xd63f8d88, 0x970e9691, 0x5098d7de,
+ 0x11a9ccc7, 0xd2fae1ec, 0x93cbfaf5, 0x5cd76272, 0x1de6796b,
+ 0xdeb55440, 0x9f844f59, 0x58120e16, 0x1923150f, 0xda703824,
+ 0x9b41233d, 0xa76bfd65, 0xe65ae67c, 0x2509cb57, 0x6438d04e,
+ 0xa3ae9101, 0xe29f8a18, 0x21cca733, 0x60fdbc2a, 0xafe124ad,
+ 0xeed03fb4, 0x2d83129f, 0x6cb20986, 0xab2448c9, 0xea1553d0,
+ 0x29467efb, 0x687765e2, 0xf6793f2f, 0xb7482436, 0x741b091d,
+ 0x352a1204, 0xf2bc534b, 0xb38d4852, 0x70de6579, 0x31ef7e60,
+ 0xfef3e6e7, 0xbfc2fdfe, 0x7c91d0d5, 0x3da0cbcc, 0xfa368a83,
+ 0xbb07919a, 0x7854bcb1, 0x3965a7a8, 0x4b98833b, 0x0aa99822,
+ 0xc9fab509, 0x88cbae10, 0x4f5def5f, 0x0e6cf446, 0xcd3fd96d,
+ 0x8c0ec274, 0x43125af3, 0x022341ea, 0xc1706cc1, 0x804177d8,
+ 0x47d73697, 0x06e62d8e, 0xc5b500a5, 0x84841bbc, 0x1a8a4171,
+ 0x5bbb5a68, 0x98e87743, 0xd9d96c5a, 0x1e4f2d15, 0x5f7e360c,
+ 0x9c2d1b27, 0xdd1c003e, 0x120098b9, 0x533183a0, 0x9062ae8b,
+ 0xd153b592, 0x16c5f4dd, 0x57f4efc4, 0x94a7c2ef, 0xd596d9f6,
+ 0xe9bc07ae, 0xa88d1cb7, 0x6bde319c, 0x2aef2a85, 0xed796bca,
+ 0xac4870d3, 0x6f1b5df8, 0x2e2a46e1, 0xe136de66, 0xa007c57f,
+ 0x6354e854, 0x2265f34d, 0xe5f3b202, 0xa4c2a91b, 0x67918430,
+ 0x26a09f29, 0xb8aec5e4, 0xf99fdefd, 0x3accf3d6, 0x7bfde8cf,
+ 0xbc6ba980, 0xfd5ab299, 0x3e099fb2, 0x7f3884ab, 0xb0241c2c,
+ 0xf1150735, 0x32462a1e, 0x73773107, 0xb4e17048, 0xf5d06b51,
+ 0x3683467a, 0x77b25d63, 0x4ed7facb, 0x0fe6e1d2, 0xccb5ccf9,
+ 0x8d84d7e0, 0x4a1296af, 0x0b238db6, 0xc870a09d, 0x8941bb84,
+ 0x465d2303, 0x076c381a, 0xc43f1531, 0x850e0e28, 0x42984f67,
+ 0x03a9547e, 0xc0fa7955, 0x81cb624c, 0x1fc53881, 0x5ef42398,
+ 0x9da70eb3, 0xdc9615aa, 0x1b0054e5, 0x5a314ffc, 0x996262d7,
+ 0xd85379ce, 0x174fe149, 0x567efa50, 0x952dd77b, 0xd41ccc62,
+ 0x138a8d2d, 0x52bb9634, 0x91e8bb1f, 0xd0d9a006, 0xecf37e5e,
+ 0xadc26547, 0x6e91486c, 0x2fa05375, 0xe836123a, 0xa9070923,
+ 0x6a542408, 0x2b653f11, 0xe479a796, 0xa548bc8f, 0x661b91a4,
+ 0x272a8abd, 0xe0bccbf2, 0xa18dd0eb, 0x62defdc0, 0x23efe6d9,
+ 0xbde1bc14, 0xfcd0a70d, 0x3f838a26, 0x7eb2913f, 0xb924d070,
+ 0xf815cb69, 0x3b46e642, 0x7a77fd5b, 0xb56b65dc, 0xf45a7ec5,
+ 0x370953ee, 0x763848f7, 0xb1ae09b8, 0xf09f12a1, 0x33cc3f8a,
+ 0x72fd2493},
+ {0x00000000, 0x376ac201, 0x6ed48403, 0x59be4602, 0xdca80907,
+ 0xebc2cb06, 0xb27c8d04, 0x85164f05, 0xb851130e, 0x8f3bd10f,
+ 0xd685970d, 0xe1ef550c, 0x64f91a09, 0x5393d808, 0x0a2d9e0a,
+ 0x3d475c0b, 0x70a3261c, 0x47c9e41d, 0x1e77a21f, 0x291d601e,
+ 0xac0b2f1b, 0x9b61ed1a, 0xc2dfab18, 0xf5b56919, 0xc8f23512,
+ 0xff98f713, 0xa626b111, 0x914c7310, 0x145a3c15, 0x2330fe14,
+ 0x7a8eb816, 0x4de47a17, 0xe0464d38, 0xd72c8f39, 0x8e92c93b,
+ 0xb9f80b3a, 0x3cee443f, 0x0b84863e, 0x523ac03c, 0x6550023d,
+ 0x58175e36, 0x6f7d9c37, 0x36c3da35, 0x01a91834, 0x84bf5731,
+ 0xb3d59530, 0xea6bd332, 0xdd011133, 0x90e56b24, 0xa78fa925,
+ 0xfe31ef27, 0xc95b2d26, 0x4c4d6223, 0x7b27a022, 0x2299e620,
+ 0x15f32421, 0x28b4782a, 0x1fdeba2b, 0x4660fc29, 0x710a3e28,
+ 0xf41c712d, 0xc376b32c, 0x9ac8f52e, 0xada2372f, 0xc08d9a70,
+ 0xf7e75871, 0xae591e73, 0x9933dc72, 0x1c259377, 0x2b4f5176,
+ 0x72f11774, 0x459bd575, 0x78dc897e, 0x4fb64b7f, 0x16080d7d,
+ 0x2162cf7c, 0xa4748079, 0x931e4278, 0xcaa0047a, 0xfdcac67b,
+ 0xb02ebc6c, 0x87447e6d, 0xdefa386f, 0xe990fa6e, 0x6c86b56b,
+ 0x5bec776a, 0x02523168, 0x3538f369, 0x087faf62, 0x3f156d63,
+ 0x66ab2b61, 0x51c1e960, 0xd4d7a665, 0xe3bd6464, 0xba032266,
+ 0x8d69e067, 0x20cbd748, 0x17a11549, 0x4e1f534b, 0x7975914a,
+ 0xfc63de4f, 0xcb091c4e, 0x92b75a4c, 0xa5dd984d, 0x989ac446,
+ 0xaff00647, 0xf64e4045, 0xc1248244, 0x4432cd41, 0x73580f40,
+ 0x2ae64942, 0x1d8c8b43, 0x5068f154, 0x67023355, 0x3ebc7557,
+ 0x09d6b756, 0x8cc0f853, 0xbbaa3a52, 0xe2147c50, 0xd57ebe51,
+ 0xe839e25a, 0xdf53205b, 0x86ed6659, 0xb187a458, 0x3491eb5d,
+ 0x03fb295c, 0x5a456f5e, 0x6d2fad5f, 0x801b35e1, 0xb771f7e0,
+ 0xeecfb1e2, 0xd9a573e3, 0x5cb33ce6, 0x6bd9fee7, 0x3267b8e5,
+ 0x050d7ae4, 0x384a26ef, 0x0f20e4ee, 0x569ea2ec, 0x61f460ed,
+ 0xe4e22fe8, 0xd388ede9, 0x8a36abeb, 0xbd5c69ea, 0xf0b813fd,
+ 0xc7d2d1fc, 0x9e6c97fe, 0xa90655ff, 0x2c101afa, 0x1b7ad8fb,
+ 0x42c49ef9, 0x75ae5cf8, 0x48e900f3, 0x7f83c2f2, 0x263d84f0,
+ 0x115746f1, 0x944109f4, 0xa32bcbf5, 0xfa958df7, 0xcdff4ff6,
+ 0x605d78d9, 0x5737bad8, 0x0e89fcda, 0x39e33edb, 0xbcf571de,
+ 0x8b9fb3df, 0xd221f5dd, 0xe54b37dc, 0xd80c6bd7, 0xef66a9d6,
+ 0xb6d8efd4, 0x81b22dd5, 0x04a462d0, 0x33cea0d1, 0x6a70e6d3,
+ 0x5d1a24d2, 0x10fe5ec5, 0x27949cc4, 0x7e2adac6, 0x494018c7,
+ 0xcc5657c2, 0xfb3c95c3, 0xa282d3c1, 0x95e811c0, 0xa8af4dcb,
+ 0x9fc58fca, 0xc67bc9c8, 0xf1110bc9, 0x740744cc, 0x436d86cd,
+ 0x1ad3c0cf, 0x2db902ce, 0x4096af91, 0x77fc6d90, 0x2e422b92,
+ 0x1928e993, 0x9c3ea696, 0xab546497, 0xf2ea2295, 0xc580e094,
+ 0xf8c7bc9f, 0xcfad7e9e, 0x9613389c, 0xa179fa9d, 0x246fb598,
+ 0x13057799, 0x4abb319b, 0x7dd1f39a, 0x3035898d, 0x075f4b8c,
+ 0x5ee10d8e, 0x698bcf8f, 0xec9d808a, 0xdbf7428b, 0x82490489,
+ 0xb523c688, 0x88649a83, 0xbf0e5882, 0xe6b01e80, 0xd1dadc81,
+ 0x54cc9384, 0x63a65185, 0x3a181787, 0x0d72d586, 0xa0d0e2a9,
+ 0x97ba20a8, 0xce0466aa, 0xf96ea4ab, 0x7c78ebae, 0x4b1229af,
+ 0x12ac6fad, 0x25c6adac, 0x1881f1a7, 0x2feb33a6, 0x765575a4,
+ 0x413fb7a5, 0xc429f8a0, 0xf3433aa1, 0xaafd7ca3, 0x9d97bea2,
+ 0xd073c4b5, 0xe71906b4, 0xbea740b6, 0x89cd82b7, 0x0cdbcdb2,
+ 0x3bb10fb3, 0x620f49b1, 0x55658bb0, 0x6822d7bb, 0x5f4815ba,
+ 0x06f653b8, 0x319c91b9, 0xb48adebc, 0x83e01cbd, 0xda5e5abf,
+ 0xed3498be},
+ {0x00000000, 0x6567bcb8, 0x8bc809aa, 0xeeafb512, 0x5797628f,
+ 0x32f0de37, 0xdc5f6b25, 0xb938d79d, 0xef28b4c5, 0x8a4f087d,
+ 0x64e0bd6f, 0x018701d7, 0xb8bfd64a, 0xddd86af2, 0x3377dfe0,
+ 0x56106358, 0x9f571950, 0xfa30a5e8, 0x149f10fa, 0x71f8ac42,
+ 0xc8c07bdf, 0xada7c767, 0x43087275, 0x266fcecd, 0x707fad95,
+ 0x1518112d, 0xfbb7a43f, 0x9ed01887, 0x27e8cf1a, 0x428f73a2,
+ 0xac20c6b0, 0xc9477a08, 0x3eaf32a0, 0x5bc88e18, 0xb5673b0a,
+ 0xd00087b2, 0x6938502f, 0x0c5fec97, 0xe2f05985, 0x8797e53d,
+ 0xd1878665, 0xb4e03add, 0x5a4f8fcf, 0x3f283377, 0x8610e4ea,
+ 0xe3775852, 0x0dd8ed40, 0x68bf51f8, 0xa1f82bf0, 0xc49f9748,
+ 0x2a30225a, 0x4f579ee2, 0xf66f497f, 0x9308f5c7, 0x7da740d5,
+ 0x18c0fc6d, 0x4ed09f35, 0x2bb7238d, 0xc518969f, 0xa07f2a27,
+ 0x1947fdba, 0x7c204102, 0x928ff410, 0xf7e848a8, 0x3d58149b,
+ 0x583fa823, 0xb6901d31, 0xd3f7a189, 0x6acf7614, 0x0fa8caac,
+ 0xe1077fbe, 0x8460c306, 0xd270a05e, 0xb7171ce6, 0x59b8a9f4,
+ 0x3cdf154c, 0x85e7c2d1, 0xe0807e69, 0x0e2fcb7b, 0x6b4877c3,
+ 0xa20f0dcb, 0xc768b173, 0x29c70461, 0x4ca0b8d9, 0xf5986f44,
+ 0x90ffd3fc, 0x7e5066ee, 0x1b37da56, 0x4d27b90e, 0x284005b6,
+ 0xc6efb0a4, 0xa3880c1c, 0x1ab0db81, 0x7fd76739, 0x9178d22b,
+ 0xf41f6e93, 0x03f7263b, 0x66909a83, 0x883f2f91, 0xed589329,
+ 0x546044b4, 0x3107f80c, 0xdfa84d1e, 0xbacff1a6, 0xecdf92fe,
+ 0x89b82e46, 0x67179b54, 0x027027ec, 0xbb48f071, 0xde2f4cc9,
+ 0x3080f9db, 0x55e74563, 0x9ca03f6b, 0xf9c783d3, 0x176836c1,
+ 0x720f8a79, 0xcb375de4, 0xae50e15c, 0x40ff544e, 0x2598e8f6,
+ 0x73888bae, 0x16ef3716, 0xf8408204, 0x9d273ebc, 0x241fe921,
+ 0x41785599, 0xafd7e08b, 0xcab05c33, 0x3bb659ed, 0x5ed1e555,
+ 0xb07e5047, 0xd519ecff, 0x6c213b62, 0x094687da, 0xe7e932c8,
+ 0x828e8e70, 0xd49eed28, 0xb1f95190, 0x5f56e482, 0x3a31583a,
+ 0x83098fa7, 0xe66e331f, 0x08c1860d, 0x6da63ab5, 0xa4e140bd,
+ 0xc186fc05, 0x2f294917, 0x4a4ef5af, 0xf3762232, 0x96119e8a,
+ 0x78be2b98, 0x1dd99720, 0x4bc9f478, 0x2eae48c0, 0xc001fdd2,
+ 0xa566416a, 0x1c5e96f7, 0x79392a4f, 0x97969f5d, 0xf2f123e5,
+ 0x05196b4d, 0x607ed7f5, 0x8ed162e7, 0xebb6de5f, 0x528e09c2,
+ 0x37e9b57a, 0xd9460068, 0xbc21bcd0, 0xea31df88, 0x8f566330,
+ 0x61f9d622, 0x049e6a9a, 0xbda6bd07, 0xd8c101bf, 0x366eb4ad,
+ 0x53090815, 0x9a4e721d, 0xff29cea5, 0x11867bb7, 0x74e1c70f,
+ 0xcdd91092, 0xa8beac2a, 0x46111938, 0x2376a580, 0x7566c6d8,
+ 0x10017a60, 0xfeaecf72, 0x9bc973ca, 0x22f1a457, 0x479618ef,
+ 0xa939adfd, 0xcc5e1145, 0x06ee4d76, 0x6389f1ce, 0x8d2644dc,
+ 0xe841f864, 0x51792ff9, 0x341e9341, 0xdab12653, 0xbfd69aeb,
+ 0xe9c6f9b3, 0x8ca1450b, 0x620ef019, 0x07694ca1, 0xbe519b3c,
+ 0xdb362784, 0x35999296, 0x50fe2e2e, 0x99b95426, 0xfcdee89e,
+ 0x12715d8c, 0x7716e134, 0xce2e36a9, 0xab498a11, 0x45e63f03,
+ 0x208183bb, 0x7691e0e3, 0x13f65c5b, 0xfd59e949, 0x983e55f1,
+ 0x2106826c, 0x44613ed4, 0xaace8bc6, 0xcfa9377e, 0x38417fd6,
+ 0x5d26c36e, 0xb389767c, 0xd6eecac4, 0x6fd61d59, 0x0ab1a1e1,
+ 0xe41e14f3, 0x8179a84b, 0xd769cb13, 0xb20e77ab, 0x5ca1c2b9,
+ 0x39c67e01, 0x80fea99c, 0xe5991524, 0x0b36a036, 0x6e511c8e,
+ 0xa7166686, 0xc271da3e, 0x2cde6f2c, 0x49b9d394, 0xf0810409,
+ 0x95e6b8b1, 0x7b490da3, 0x1e2eb11b, 0x483ed243, 0x2d596efb,
+ 0xc3f6dbe9, 0xa6916751, 0x1fa9b0cc, 0x7ace0c74, 0x9461b966,
+ 0xf10605de}};
+
+#endif
+
+#endif
+
+#if N == 2
+
+#if W == 8
+
+local const z_crc_t FAR crc_braid_table[][256] = {
+ {0x00000000, 0xae689191, 0x87a02563, 0x29c8b4f2, 0xd4314c87,
+ 0x7a59dd16, 0x539169e4, 0xfdf9f875, 0x73139f4f, 0xdd7b0ede,
+ 0xf4b3ba2c, 0x5adb2bbd, 0xa722d3c8, 0x094a4259, 0x2082f6ab,
+ 0x8eea673a, 0xe6273e9e, 0x484faf0f, 0x61871bfd, 0xcfef8a6c,
+ 0x32167219, 0x9c7ee388, 0xb5b6577a, 0x1bdec6eb, 0x9534a1d1,
+ 0x3b5c3040, 0x129484b2, 0xbcfc1523, 0x4105ed56, 0xef6d7cc7,
+ 0xc6a5c835, 0x68cd59a4, 0x173f7b7d, 0xb957eaec, 0x909f5e1e,
+ 0x3ef7cf8f, 0xc30e37fa, 0x6d66a66b, 0x44ae1299, 0xeac68308,
+ 0x642ce432, 0xca4475a3, 0xe38cc151, 0x4de450c0, 0xb01da8b5,
+ 0x1e753924, 0x37bd8dd6, 0x99d51c47, 0xf11845e3, 0x5f70d472,
+ 0x76b86080, 0xd8d0f111, 0x25290964, 0x8b4198f5, 0xa2892c07,
+ 0x0ce1bd96, 0x820bdaac, 0x2c634b3d, 0x05abffcf, 0xabc36e5e,
+ 0x563a962b, 0xf85207ba, 0xd19ab348, 0x7ff222d9, 0x2e7ef6fa,
+ 0x8016676b, 0xa9ded399, 0x07b64208, 0xfa4fba7d, 0x54272bec,
+ 0x7def9f1e, 0xd3870e8f, 0x5d6d69b5, 0xf305f824, 0xdacd4cd6,
+ 0x74a5dd47, 0x895c2532, 0x2734b4a3, 0x0efc0051, 0xa09491c0,
+ 0xc859c864, 0x663159f5, 0x4ff9ed07, 0xe1917c96, 0x1c6884e3,
+ 0xb2001572, 0x9bc8a180, 0x35a03011, 0xbb4a572b, 0x1522c6ba,
+ 0x3cea7248, 0x9282e3d9, 0x6f7b1bac, 0xc1138a3d, 0xe8db3ecf,
+ 0x46b3af5e, 0x39418d87, 0x97291c16, 0xbee1a8e4, 0x10893975,
+ 0xed70c100, 0x43185091, 0x6ad0e463, 0xc4b875f2, 0x4a5212c8,
+ 0xe43a8359, 0xcdf237ab, 0x639aa63a, 0x9e635e4f, 0x300bcfde,
+ 0x19c37b2c, 0xb7abeabd, 0xdf66b319, 0x710e2288, 0x58c6967a,
+ 0xf6ae07eb, 0x0b57ff9e, 0xa53f6e0f, 0x8cf7dafd, 0x229f4b6c,
+ 0xac752c56, 0x021dbdc7, 0x2bd50935, 0x85bd98a4, 0x784460d1,
+ 0xd62cf140, 0xffe445b2, 0x518cd423, 0x5cfdedf4, 0xf2957c65,
+ 0xdb5dc897, 0x75355906, 0x88cca173, 0x26a430e2, 0x0f6c8410,
+ 0xa1041581, 0x2fee72bb, 0x8186e32a, 0xa84e57d8, 0x0626c649,
+ 0xfbdf3e3c, 0x55b7afad, 0x7c7f1b5f, 0xd2178ace, 0xbadad36a,
+ 0x14b242fb, 0x3d7af609, 0x93126798, 0x6eeb9fed, 0xc0830e7c,
+ 0xe94bba8e, 0x47232b1f, 0xc9c94c25, 0x67a1ddb4, 0x4e696946,
+ 0xe001f8d7, 0x1df800a2, 0xb3909133, 0x9a5825c1, 0x3430b450,
+ 0x4bc29689, 0xe5aa0718, 0xcc62b3ea, 0x620a227b, 0x9ff3da0e,
+ 0x319b4b9f, 0x1853ff6d, 0xb63b6efc, 0x38d109c6, 0x96b99857,
+ 0xbf712ca5, 0x1119bd34, 0xece04541, 0x4288d4d0, 0x6b406022,
+ 0xc528f1b3, 0xade5a817, 0x038d3986, 0x2a458d74, 0x842d1ce5,
+ 0x79d4e490, 0xd7bc7501, 0xfe74c1f3, 0x501c5062, 0xdef63758,
+ 0x709ea6c9, 0x5956123b, 0xf73e83aa, 0x0ac77bdf, 0xa4afea4e,
+ 0x8d675ebc, 0x230fcf2d, 0x72831b0e, 0xdceb8a9f, 0xf5233e6d,
+ 0x5b4baffc, 0xa6b25789, 0x08dac618, 0x211272ea, 0x8f7ae37b,
+ 0x01908441, 0xaff815d0, 0x8630a122, 0x285830b3, 0xd5a1c8c6,
+ 0x7bc95957, 0x5201eda5, 0xfc697c34, 0x94a42590, 0x3accb401,
+ 0x130400f3, 0xbd6c9162, 0x40956917, 0xeefdf886, 0xc7354c74,
+ 0x695ddde5, 0xe7b7badf, 0x49df2b4e, 0x60179fbc, 0xce7f0e2d,
+ 0x3386f658, 0x9dee67c9, 0xb426d33b, 0x1a4e42aa, 0x65bc6073,
+ 0xcbd4f1e2, 0xe21c4510, 0x4c74d481, 0xb18d2cf4, 0x1fe5bd65,
+ 0x362d0997, 0x98459806, 0x16afff3c, 0xb8c76ead, 0x910fda5f,
+ 0x3f674bce, 0xc29eb3bb, 0x6cf6222a, 0x453e96d8, 0xeb560749,
+ 0x839b5eed, 0x2df3cf7c, 0x043b7b8e, 0xaa53ea1f, 0x57aa126a,
+ 0xf9c283fb, 0xd00a3709, 0x7e62a698, 0xf088c1a2, 0x5ee05033,
+ 0x7728e4c1, 0xd9407550, 0x24b98d25, 0x8ad11cb4, 0xa319a846,
+ 0x0d7139d7},
+ {0x00000000, 0xb9fbdbe8, 0xa886b191, 0x117d6a79, 0x8a7c6563,
+ 0x3387be8b, 0x22fad4f2, 0x9b010f1a, 0xcf89cc87, 0x7672176f,
+ 0x670f7d16, 0xdef4a6fe, 0x45f5a9e4, 0xfc0e720c, 0xed731875,
+ 0x5488c39d, 0x44629f4f, 0xfd9944a7, 0xece42ede, 0x551ff536,
+ 0xce1efa2c, 0x77e521c4, 0x66984bbd, 0xdf639055, 0x8beb53c8,
+ 0x32108820, 0x236de259, 0x9a9639b1, 0x019736ab, 0xb86ced43,
+ 0xa911873a, 0x10ea5cd2, 0x88c53e9e, 0x313ee576, 0x20438f0f,
+ 0x99b854e7, 0x02b95bfd, 0xbb428015, 0xaa3fea6c, 0x13c43184,
+ 0x474cf219, 0xfeb729f1, 0xefca4388, 0x56319860, 0xcd30977a,
+ 0x74cb4c92, 0x65b626eb, 0xdc4dfd03, 0xcca7a1d1, 0x755c7a39,
+ 0x64211040, 0xdddacba8, 0x46dbc4b2, 0xff201f5a, 0xee5d7523,
+ 0x57a6aecb, 0x032e6d56, 0xbad5b6be, 0xaba8dcc7, 0x1253072f,
+ 0x89520835, 0x30a9d3dd, 0x21d4b9a4, 0x982f624c, 0xcafb7b7d,
+ 0x7300a095, 0x627dcaec, 0xdb861104, 0x40871e1e, 0xf97cc5f6,
+ 0xe801af8f, 0x51fa7467, 0x0572b7fa, 0xbc896c12, 0xadf4066b,
+ 0x140fdd83, 0x8f0ed299, 0x36f50971, 0x27886308, 0x9e73b8e0,
+ 0x8e99e432, 0x37623fda, 0x261f55a3, 0x9fe48e4b, 0x04e58151,
+ 0xbd1e5ab9, 0xac6330c0, 0x1598eb28, 0x411028b5, 0xf8ebf35d,
+ 0xe9969924, 0x506d42cc, 0xcb6c4dd6, 0x7297963e, 0x63eafc47,
+ 0xda1127af, 0x423e45e3, 0xfbc59e0b, 0xeab8f472, 0x53432f9a,
+ 0xc8422080, 0x71b9fb68, 0x60c49111, 0xd93f4af9, 0x8db78964,
+ 0x344c528c, 0x253138f5, 0x9ccae31d, 0x07cbec07, 0xbe3037ef,
+ 0xaf4d5d96, 0x16b6867e, 0x065cdaac, 0xbfa70144, 0xaeda6b3d,
+ 0x1721b0d5, 0x8c20bfcf, 0x35db6427, 0x24a60e5e, 0x9d5dd5b6,
+ 0xc9d5162b, 0x702ecdc3, 0x6153a7ba, 0xd8a87c52, 0x43a97348,
+ 0xfa52a8a0, 0xeb2fc2d9, 0x52d41931, 0x4e87f0bb, 0xf77c2b53,
+ 0xe601412a, 0x5ffa9ac2, 0xc4fb95d8, 0x7d004e30, 0x6c7d2449,
+ 0xd586ffa1, 0x810e3c3c, 0x38f5e7d4, 0x29888dad, 0x90735645,
+ 0x0b72595f, 0xb28982b7, 0xa3f4e8ce, 0x1a0f3326, 0x0ae56ff4,
+ 0xb31eb41c, 0xa263de65, 0x1b98058d, 0x80990a97, 0x3962d17f,
+ 0x281fbb06, 0x91e460ee, 0xc56ca373, 0x7c97789b, 0x6dea12e2,
+ 0xd411c90a, 0x4f10c610, 0xf6eb1df8, 0xe7967781, 0x5e6dac69,
+ 0xc642ce25, 0x7fb915cd, 0x6ec47fb4, 0xd73fa45c, 0x4c3eab46,
+ 0xf5c570ae, 0xe4b81ad7, 0x5d43c13f, 0x09cb02a2, 0xb030d94a,
+ 0xa14db333, 0x18b668db, 0x83b767c1, 0x3a4cbc29, 0x2b31d650,
+ 0x92ca0db8, 0x8220516a, 0x3bdb8a82, 0x2aa6e0fb, 0x935d3b13,
+ 0x085c3409, 0xb1a7efe1, 0xa0da8598, 0x19215e70, 0x4da99ded,
+ 0xf4524605, 0xe52f2c7c, 0x5cd4f794, 0xc7d5f88e, 0x7e2e2366,
+ 0x6f53491f, 0xd6a892f7, 0x847c8bc6, 0x3d87502e, 0x2cfa3a57,
+ 0x9501e1bf, 0x0e00eea5, 0xb7fb354d, 0xa6865f34, 0x1f7d84dc,
+ 0x4bf54741, 0xf20e9ca9, 0xe373f6d0, 0x5a882d38, 0xc1892222,
+ 0x7872f9ca, 0x690f93b3, 0xd0f4485b, 0xc01e1489, 0x79e5cf61,
+ 0x6898a518, 0xd1637ef0, 0x4a6271ea, 0xf399aa02, 0xe2e4c07b,
+ 0x5b1f1b93, 0x0f97d80e, 0xb66c03e6, 0xa711699f, 0x1eeab277,
+ 0x85ebbd6d, 0x3c106685, 0x2d6d0cfc, 0x9496d714, 0x0cb9b558,
+ 0xb5426eb0, 0xa43f04c9, 0x1dc4df21, 0x86c5d03b, 0x3f3e0bd3,
+ 0x2e4361aa, 0x97b8ba42, 0xc33079df, 0x7acba237, 0x6bb6c84e,
+ 0xd24d13a6, 0x494c1cbc, 0xf0b7c754, 0xe1caad2d, 0x583176c5,
+ 0x48db2a17, 0xf120f1ff, 0xe05d9b86, 0x59a6406e, 0xc2a74f74,
+ 0x7b5c949c, 0x6a21fee5, 0xd3da250d, 0x8752e690, 0x3ea93d78,
+ 0x2fd45701, 0x962f8ce9, 0x0d2e83f3, 0xb4d5581b, 0xa5a83262,
+ 0x1c53e98a},
+ {0x00000000, 0x9d0fe176, 0xe16ec4ad, 0x7c6125db, 0x19ac8f1b,
+ 0x84a36e6d, 0xf8c24bb6, 0x65cdaac0, 0x33591e36, 0xae56ff40,
+ 0xd237da9b, 0x4f383bed, 0x2af5912d, 0xb7fa705b, 0xcb9b5580,
+ 0x5694b4f6, 0x66b23c6c, 0xfbbddd1a, 0x87dcf8c1, 0x1ad319b7,
+ 0x7f1eb377, 0xe2115201, 0x9e7077da, 0x037f96ac, 0x55eb225a,
+ 0xc8e4c32c, 0xb485e6f7, 0x298a0781, 0x4c47ad41, 0xd1484c37,
+ 0xad2969ec, 0x3026889a, 0xcd6478d8, 0x506b99ae, 0x2c0abc75,
+ 0xb1055d03, 0xd4c8f7c3, 0x49c716b5, 0x35a6336e, 0xa8a9d218,
+ 0xfe3d66ee, 0x63328798, 0x1f53a243, 0x825c4335, 0xe791e9f5,
+ 0x7a9e0883, 0x06ff2d58, 0x9bf0cc2e, 0xabd644b4, 0x36d9a5c2,
+ 0x4ab88019, 0xd7b7616f, 0xb27acbaf, 0x2f752ad9, 0x53140f02,
+ 0xce1bee74, 0x988f5a82, 0x0580bbf4, 0x79e19e2f, 0xe4ee7f59,
+ 0x8123d599, 0x1c2c34ef, 0x604d1134, 0xfd42f042, 0x41b9f7f1,
+ 0xdcb61687, 0xa0d7335c, 0x3dd8d22a, 0x581578ea, 0xc51a999c,
+ 0xb97bbc47, 0x24745d31, 0x72e0e9c7, 0xefef08b1, 0x938e2d6a,
+ 0x0e81cc1c, 0x6b4c66dc, 0xf64387aa, 0x8a22a271, 0x172d4307,
+ 0x270bcb9d, 0xba042aeb, 0xc6650f30, 0x5b6aee46, 0x3ea74486,
+ 0xa3a8a5f0, 0xdfc9802b, 0x42c6615d, 0x1452d5ab, 0x895d34dd,
+ 0xf53c1106, 0x6833f070, 0x0dfe5ab0, 0x90f1bbc6, 0xec909e1d,
+ 0x719f7f6b, 0x8cdd8f29, 0x11d26e5f, 0x6db34b84, 0xf0bcaaf2,
+ 0x95710032, 0x087ee144, 0x741fc49f, 0xe91025e9, 0xbf84911f,
+ 0x228b7069, 0x5eea55b2, 0xc3e5b4c4, 0xa6281e04, 0x3b27ff72,
+ 0x4746daa9, 0xda493bdf, 0xea6fb345, 0x77605233, 0x0b0177e8,
+ 0x960e969e, 0xf3c33c5e, 0x6eccdd28, 0x12adf8f3, 0x8fa21985,
+ 0xd936ad73, 0x44394c05, 0x385869de, 0xa55788a8, 0xc09a2268,
+ 0x5d95c31e, 0x21f4e6c5, 0xbcfb07b3, 0x8373efe2, 0x1e7c0e94,
+ 0x621d2b4f, 0xff12ca39, 0x9adf60f9, 0x07d0818f, 0x7bb1a454,
+ 0xe6be4522, 0xb02af1d4, 0x2d2510a2, 0x51443579, 0xcc4bd40f,
+ 0xa9867ecf, 0x34899fb9, 0x48e8ba62, 0xd5e75b14, 0xe5c1d38e,
+ 0x78ce32f8, 0x04af1723, 0x99a0f655, 0xfc6d5c95, 0x6162bde3,
+ 0x1d039838, 0x800c794e, 0xd698cdb8, 0x4b972cce, 0x37f60915,
+ 0xaaf9e863, 0xcf3442a3, 0x523ba3d5, 0x2e5a860e, 0xb3556778,
+ 0x4e17973a, 0xd318764c, 0xaf795397, 0x3276b2e1, 0x57bb1821,
+ 0xcab4f957, 0xb6d5dc8c, 0x2bda3dfa, 0x7d4e890c, 0xe041687a,
+ 0x9c204da1, 0x012facd7, 0x64e20617, 0xf9ede761, 0x858cc2ba,
+ 0x188323cc, 0x28a5ab56, 0xb5aa4a20, 0xc9cb6ffb, 0x54c48e8d,
+ 0x3109244d, 0xac06c53b, 0xd067e0e0, 0x4d680196, 0x1bfcb560,
+ 0x86f35416, 0xfa9271cd, 0x679d90bb, 0x02503a7b, 0x9f5fdb0d,
+ 0xe33efed6, 0x7e311fa0, 0xc2ca1813, 0x5fc5f965, 0x23a4dcbe,
+ 0xbeab3dc8, 0xdb669708, 0x4669767e, 0x3a0853a5, 0xa707b2d3,
+ 0xf1930625, 0x6c9ce753, 0x10fdc288, 0x8df223fe, 0xe83f893e,
+ 0x75306848, 0x09514d93, 0x945eace5, 0xa478247f, 0x3977c509,
+ 0x4516e0d2, 0xd81901a4, 0xbdd4ab64, 0x20db4a12, 0x5cba6fc9,
+ 0xc1b58ebf, 0x97213a49, 0x0a2edb3f, 0x764ffee4, 0xeb401f92,
+ 0x8e8db552, 0x13825424, 0x6fe371ff, 0xf2ec9089, 0x0fae60cb,
+ 0x92a181bd, 0xeec0a466, 0x73cf4510, 0x1602efd0, 0x8b0d0ea6,
+ 0xf76c2b7d, 0x6a63ca0b, 0x3cf77efd, 0xa1f89f8b, 0xdd99ba50,
+ 0x40965b26, 0x255bf1e6, 0xb8541090, 0xc435354b, 0x593ad43d,
+ 0x691c5ca7, 0xf413bdd1, 0x8872980a, 0x157d797c, 0x70b0d3bc,
+ 0xedbf32ca, 0x91de1711, 0x0cd1f667, 0x5a454291, 0xc74aa3e7,
+ 0xbb2b863c, 0x2624674a, 0x43e9cd8a, 0xdee62cfc, 0xa2870927,
+ 0x3f88e851},
+ {0x00000000, 0xdd96d985, 0x605cb54b, 0xbdca6cce, 0xc0b96a96,
+ 0x1d2fb313, 0xa0e5dfdd, 0x7d730658, 0x5a03d36d, 0x87950ae8,
+ 0x3a5f6626, 0xe7c9bfa3, 0x9abab9fb, 0x472c607e, 0xfae60cb0,
+ 0x2770d535, 0xb407a6da, 0x69917f5f, 0xd45b1391, 0x09cdca14,
+ 0x74becc4c, 0xa92815c9, 0x14e27907, 0xc974a082, 0xee0475b7,
+ 0x3392ac32, 0x8e58c0fc, 0x53ce1979, 0x2ebd1f21, 0xf32bc6a4,
+ 0x4ee1aa6a, 0x937773ef, 0xb37e4bf5, 0x6ee89270, 0xd322febe,
+ 0x0eb4273b, 0x73c72163, 0xae51f8e6, 0x139b9428, 0xce0d4dad,
+ 0xe97d9898, 0x34eb411d, 0x89212dd3, 0x54b7f456, 0x29c4f20e,
+ 0xf4522b8b, 0x49984745, 0x940e9ec0, 0x0779ed2f, 0xdaef34aa,
+ 0x67255864, 0xbab381e1, 0xc7c087b9, 0x1a565e3c, 0xa79c32f2,
+ 0x7a0aeb77, 0x5d7a3e42, 0x80ece7c7, 0x3d268b09, 0xe0b0528c,
+ 0x9dc354d4, 0x40558d51, 0xfd9fe19f, 0x2009381a, 0xbd8d91ab,
+ 0x601b482e, 0xddd124e0, 0x0047fd65, 0x7d34fb3d, 0xa0a222b8,
+ 0x1d684e76, 0xc0fe97f3, 0xe78e42c6, 0x3a189b43, 0x87d2f78d,
+ 0x5a442e08, 0x27372850, 0xfaa1f1d5, 0x476b9d1b, 0x9afd449e,
+ 0x098a3771, 0xd41ceef4, 0x69d6823a, 0xb4405bbf, 0xc9335de7,
+ 0x14a58462, 0xa96fe8ac, 0x74f93129, 0x5389e41c, 0x8e1f3d99,
+ 0x33d55157, 0xee4388d2, 0x93308e8a, 0x4ea6570f, 0xf36c3bc1,
+ 0x2efae244, 0x0ef3da5e, 0xd36503db, 0x6eaf6f15, 0xb339b690,
+ 0xce4ab0c8, 0x13dc694d, 0xae160583, 0x7380dc06, 0x54f00933,
+ 0x8966d0b6, 0x34acbc78, 0xe93a65fd, 0x944963a5, 0x49dfba20,
+ 0xf415d6ee, 0x29830f6b, 0xbaf47c84, 0x6762a501, 0xdaa8c9cf,
+ 0x073e104a, 0x7a4d1612, 0xa7dbcf97, 0x1a11a359, 0xc7877adc,
+ 0xe0f7afe9, 0x3d61766c, 0x80ab1aa2, 0x5d3dc327, 0x204ec57f,
+ 0xfdd81cfa, 0x40127034, 0x9d84a9b1, 0xa06a2517, 0x7dfcfc92,
+ 0xc036905c, 0x1da049d9, 0x60d34f81, 0xbd459604, 0x008ffaca,
+ 0xdd19234f, 0xfa69f67a, 0x27ff2fff, 0x9a354331, 0x47a39ab4,
+ 0x3ad09cec, 0xe7464569, 0x5a8c29a7, 0x871af022, 0x146d83cd,
+ 0xc9fb5a48, 0x74313686, 0xa9a7ef03, 0xd4d4e95b, 0x094230de,
+ 0xb4885c10, 0x691e8595, 0x4e6e50a0, 0x93f88925, 0x2e32e5eb,
+ 0xf3a43c6e, 0x8ed73a36, 0x5341e3b3, 0xee8b8f7d, 0x331d56f8,
+ 0x13146ee2, 0xce82b767, 0x7348dba9, 0xaede022c, 0xd3ad0474,
+ 0x0e3bddf1, 0xb3f1b13f, 0x6e6768ba, 0x4917bd8f, 0x9481640a,
+ 0x294b08c4, 0xf4ddd141, 0x89aed719, 0x54380e9c, 0xe9f26252,
+ 0x3464bbd7, 0xa713c838, 0x7a8511bd, 0xc74f7d73, 0x1ad9a4f6,
+ 0x67aaa2ae, 0xba3c7b2b, 0x07f617e5, 0xda60ce60, 0xfd101b55,
+ 0x2086c2d0, 0x9d4cae1e, 0x40da779b, 0x3da971c3, 0xe03fa846,
+ 0x5df5c488, 0x80631d0d, 0x1de7b4bc, 0xc0716d39, 0x7dbb01f7,
+ 0xa02dd872, 0xdd5ede2a, 0x00c807af, 0xbd026b61, 0x6094b2e4,
+ 0x47e467d1, 0x9a72be54, 0x27b8d29a, 0xfa2e0b1f, 0x875d0d47,
+ 0x5acbd4c2, 0xe701b80c, 0x3a976189, 0xa9e01266, 0x7476cbe3,
+ 0xc9bca72d, 0x142a7ea8, 0x695978f0, 0xb4cfa175, 0x0905cdbb,
+ 0xd493143e, 0xf3e3c10b, 0x2e75188e, 0x93bf7440, 0x4e29adc5,
+ 0x335aab9d, 0xeecc7218, 0x53061ed6, 0x8e90c753, 0xae99ff49,
+ 0x730f26cc, 0xcec54a02, 0x13539387, 0x6e2095df, 0xb3b64c5a,
+ 0x0e7c2094, 0xd3eaf911, 0xf49a2c24, 0x290cf5a1, 0x94c6996f,
+ 0x495040ea, 0x342346b2, 0xe9b59f37, 0x547ff3f9, 0x89e92a7c,
+ 0x1a9e5993, 0xc7088016, 0x7ac2ecd8, 0xa754355d, 0xda273305,
+ 0x07b1ea80, 0xba7b864e, 0x67ed5fcb, 0x409d8afe, 0x9d0b537b,
+ 0x20c13fb5, 0xfd57e630, 0x8024e068, 0x5db239ed, 0xe0785523,
+ 0x3dee8ca6},
+ {0x00000000, 0x9ba54c6f, 0xec3b9e9f, 0x779ed2f0, 0x03063b7f,
+ 0x98a37710, 0xef3da5e0, 0x7498e98f, 0x060c76fe, 0x9da93a91,
+ 0xea37e861, 0x7192a40e, 0x050a4d81, 0x9eaf01ee, 0xe931d31e,
+ 0x72949f71, 0x0c18edfc, 0x97bda193, 0xe0237363, 0x7b863f0c,
+ 0x0f1ed683, 0x94bb9aec, 0xe325481c, 0x78800473, 0x0a149b02,
+ 0x91b1d76d, 0xe62f059d, 0x7d8a49f2, 0x0912a07d, 0x92b7ec12,
+ 0xe5293ee2, 0x7e8c728d, 0x1831dbf8, 0x83949797, 0xf40a4567,
+ 0x6faf0908, 0x1b37e087, 0x8092ace8, 0xf70c7e18, 0x6ca93277,
+ 0x1e3dad06, 0x8598e169, 0xf2063399, 0x69a37ff6, 0x1d3b9679,
+ 0x869eda16, 0xf10008e6, 0x6aa54489, 0x14293604, 0x8f8c7a6b,
+ 0xf812a89b, 0x63b7e4f4, 0x172f0d7b, 0x8c8a4114, 0xfb1493e4,
+ 0x60b1df8b, 0x122540fa, 0x89800c95, 0xfe1ede65, 0x65bb920a,
+ 0x11237b85, 0x8a8637ea, 0xfd18e51a, 0x66bda975, 0x3063b7f0,
+ 0xabc6fb9f, 0xdc58296f, 0x47fd6500, 0x33658c8f, 0xa8c0c0e0,
+ 0xdf5e1210, 0x44fb5e7f, 0x366fc10e, 0xadca8d61, 0xda545f91,
+ 0x41f113fe, 0x3569fa71, 0xaeccb61e, 0xd95264ee, 0x42f72881,
+ 0x3c7b5a0c, 0xa7de1663, 0xd040c493, 0x4be588fc, 0x3f7d6173,
+ 0xa4d82d1c, 0xd346ffec, 0x48e3b383, 0x3a772cf2, 0xa1d2609d,
+ 0xd64cb26d, 0x4de9fe02, 0x3971178d, 0xa2d45be2, 0xd54a8912,
+ 0x4eefc57d, 0x28526c08, 0xb3f72067, 0xc469f297, 0x5fccbef8,
+ 0x2b545777, 0xb0f11b18, 0xc76fc9e8, 0x5cca8587, 0x2e5e1af6,
+ 0xb5fb5699, 0xc2658469, 0x59c0c806, 0x2d582189, 0xb6fd6de6,
+ 0xc163bf16, 0x5ac6f379, 0x244a81f4, 0xbfefcd9b, 0xc8711f6b,
+ 0x53d45304, 0x274cba8b, 0xbce9f6e4, 0xcb772414, 0x50d2687b,
+ 0x2246f70a, 0xb9e3bb65, 0xce7d6995, 0x55d825fa, 0x2140cc75,
+ 0xbae5801a, 0xcd7b52ea, 0x56de1e85, 0x60c76fe0, 0xfb62238f,
+ 0x8cfcf17f, 0x1759bd10, 0x63c1549f, 0xf86418f0, 0x8ffaca00,
+ 0x145f866f, 0x66cb191e, 0xfd6e5571, 0x8af08781, 0x1155cbee,
+ 0x65cd2261, 0xfe686e0e, 0x89f6bcfe, 0x1253f091, 0x6cdf821c,
+ 0xf77ace73, 0x80e41c83, 0x1b4150ec, 0x6fd9b963, 0xf47cf50c,
+ 0x83e227fc, 0x18476b93, 0x6ad3f4e2, 0xf176b88d, 0x86e86a7d,
+ 0x1d4d2612, 0x69d5cf9d, 0xf27083f2, 0x85ee5102, 0x1e4b1d6d,
+ 0x78f6b418, 0xe353f877, 0x94cd2a87, 0x0f6866e8, 0x7bf08f67,
+ 0xe055c308, 0x97cb11f8, 0x0c6e5d97, 0x7efac2e6, 0xe55f8e89,
+ 0x92c15c79, 0x09641016, 0x7dfcf999, 0xe659b5f6, 0x91c76706,
+ 0x0a622b69, 0x74ee59e4, 0xef4b158b, 0x98d5c77b, 0x03708b14,
+ 0x77e8629b, 0xec4d2ef4, 0x9bd3fc04, 0x0076b06b, 0x72e22f1a,
+ 0xe9476375, 0x9ed9b185, 0x057cfdea, 0x71e41465, 0xea41580a,
+ 0x9ddf8afa, 0x067ac695, 0x50a4d810, 0xcb01947f, 0xbc9f468f,
+ 0x273a0ae0, 0x53a2e36f, 0xc807af00, 0xbf997df0, 0x243c319f,
+ 0x56a8aeee, 0xcd0de281, 0xba933071, 0x21367c1e, 0x55ae9591,
+ 0xce0bd9fe, 0xb9950b0e, 0x22304761, 0x5cbc35ec, 0xc7197983,
+ 0xb087ab73, 0x2b22e71c, 0x5fba0e93, 0xc41f42fc, 0xb381900c,
+ 0x2824dc63, 0x5ab04312, 0xc1150f7d, 0xb68bdd8d, 0x2d2e91e2,
+ 0x59b6786d, 0xc2133402, 0xb58de6f2, 0x2e28aa9d, 0x489503e8,
+ 0xd3304f87, 0xa4ae9d77, 0x3f0bd118, 0x4b933897, 0xd03674f8,
+ 0xa7a8a608, 0x3c0dea67, 0x4e997516, 0xd53c3979, 0xa2a2eb89,
+ 0x3907a7e6, 0x4d9f4e69, 0xd63a0206, 0xa1a4d0f6, 0x3a019c99,
+ 0x448dee14, 0xdf28a27b, 0xa8b6708b, 0x33133ce4, 0x478bd56b,
+ 0xdc2e9904, 0xabb04bf4, 0x3015079b, 0x428198ea, 0xd924d485,
+ 0xaeba0675, 0x351f4a1a, 0x4187a395, 0xda22effa, 0xadbc3d0a,
+ 0x36197165},
+ {0x00000000, 0xc18edfc0, 0x586cb9c1, 0x99e26601, 0xb0d97382,
+ 0x7157ac42, 0xe8b5ca43, 0x293b1583, 0xbac3e145, 0x7b4d3e85,
+ 0xe2af5884, 0x23218744, 0x0a1a92c7, 0xcb944d07, 0x52762b06,
+ 0x93f8f4c6, 0xaef6c4cb, 0x6f781b0b, 0xf69a7d0a, 0x3714a2ca,
+ 0x1e2fb749, 0xdfa16889, 0x46430e88, 0x87cdd148, 0x1435258e,
+ 0xd5bbfa4e, 0x4c599c4f, 0x8dd7438f, 0xa4ec560c, 0x656289cc,
+ 0xfc80efcd, 0x3d0e300d, 0x869c8fd7, 0x47125017, 0xdef03616,
+ 0x1f7ee9d6, 0x3645fc55, 0xf7cb2395, 0x6e294594, 0xafa79a54,
+ 0x3c5f6e92, 0xfdd1b152, 0x6433d753, 0xa5bd0893, 0x8c861d10,
+ 0x4d08c2d0, 0xd4eaa4d1, 0x15647b11, 0x286a4b1c, 0xe9e494dc,
+ 0x7006f2dd, 0xb1882d1d, 0x98b3389e, 0x593de75e, 0xc0df815f,
+ 0x01515e9f, 0x92a9aa59, 0x53277599, 0xcac51398, 0x0b4bcc58,
+ 0x2270d9db, 0xe3fe061b, 0x7a1c601a, 0xbb92bfda, 0xd64819ef,
+ 0x17c6c62f, 0x8e24a02e, 0x4faa7fee, 0x66916a6d, 0xa71fb5ad,
+ 0x3efdd3ac, 0xff730c6c, 0x6c8bf8aa, 0xad05276a, 0x34e7416b,
+ 0xf5699eab, 0xdc528b28, 0x1ddc54e8, 0x843e32e9, 0x45b0ed29,
+ 0x78bedd24, 0xb93002e4, 0x20d264e5, 0xe15cbb25, 0xc867aea6,
+ 0x09e97166, 0x900b1767, 0x5185c8a7, 0xc27d3c61, 0x03f3e3a1,
+ 0x9a1185a0, 0x5b9f5a60, 0x72a44fe3, 0xb32a9023, 0x2ac8f622,
+ 0xeb4629e2, 0x50d49638, 0x915a49f8, 0x08b82ff9, 0xc936f039,
+ 0xe00de5ba, 0x21833a7a, 0xb8615c7b, 0x79ef83bb, 0xea17777d,
+ 0x2b99a8bd, 0xb27bcebc, 0x73f5117c, 0x5ace04ff, 0x9b40db3f,
+ 0x02a2bd3e, 0xc32c62fe, 0xfe2252f3, 0x3fac8d33, 0xa64eeb32,
+ 0x67c034f2, 0x4efb2171, 0x8f75feb1, 0x169798b0, 0xd7194770,
+ 0x44e1b3b6, 0x856f6c76, 0x1c8d0a77, 0xdd03d5b7, 0xf438c034,
+ 0x35b61ff4, 0xac5479f5, 0x6ddaa635, 0x77e1359f, 0xb66fea5f,
+ 0x2f8d8c5e, 0xee03539e, 0xc738461d, 0x06b699dd, 0x9f54ffdc,
+ 0x5eda201c, 0xcd22d4da, 0x0cac0b1a, 0x954e6d1b, 0x54c0b2db,
+ 0x7dfba758, 0xbc757898, 0x25971e99, 0xe419c159, 0xd917f154,
+ 0x18992e94, 0x817b4895, 0x40f59755, 0x69ce82d6, 0xa8405d16,
+ 0x31a23b17, 0xf02ce4d7, 0x63d41011, 0xa25acfd1, 0x3bb8a9d0,
+ 0xfa367610, 0xd30d6393, 0x1283bc53, 0x8b61da52, 0x4aef0592,
+ 0xf17dba48, 0x30f36588, 0xa9110389, 0x689fdc49, 0x41a4c9ca,
+ 0x802a160a, 0x19c8700b, 0xd846afcb, 0x4bbe5b0d, 0x8a3084cd,
+ 0x13d2e2cc, 0xd25c3d0c, 0xfb67288f, 0x3ae9f74f, 0xa30b914e,
+ 0x62854e8e, 0x5f8b7e83, 0x9e05a143, 0x07e7c742, 0xc6691882,
+ 0xef520d01, 0x2edcd2c1, 0xb73eb4c0, 0x76b06b00, 0xe5489fc6,
+ 0x24c64006, 0xbd242607, 0x7caaf9c7, 0x5591ec44, 0x941f3384,
+ 0x0dfd5585, 0xcc738a45, 0xa1a92c70, 0x6027f3b0, 0xf9c595b1,
+ 0x384b4a71, 0x11705ff2, 0xd0fe8032, 0x491ce633, 0x889239f3,
+ 0x1b6acd35, 0xdae412f5, 0x430674f4, 0x8288ab34, 0xabb3beb7,
+ 0x6a3d6177, 0xf3df0776, 0x3251d8b6, 0x0f5fe8bb, 0xced1377b,
+ 0x5733517a, 0x96bd8eba, 0xbf869b39, 0x7e0844f9, 0xe7ea22f8,
+ 0x2664fd38, 0xb59c09fe, 0x7412d63e, 0xedf0b03f, 0x2c7e6fff,
+ 0x05457a7c, 0xc4cba5bc, 0x5d29c3bd, 0x9ca71c7d, 0x2735a3a7,
+ 0xe6bb7c67, 0x7f591a66, 0xbed7c5a6, 0x97ecd025, 0x56620fe5,
+ 0xcf8069e4, 0x0e0eb624, 0x9df642e2, 0x5c789d22, 0xc59afb23,
+ 0x041424e3, 0x2d2f3160, 0xeca1eea0, 0x754388a1, 0xb4cd5761,
+ 0x89c3676c, 0x484db8ac, 0xd1afdead, 0x1021016d, 0x391a14ee,
+ 0xf894cb2e, 0x6176ad2f, 0xa0f872ef, 0x33008629, 0xf28e59e9,
+ 0x6b6c3fe8, 0xaae2e028, 0x83d9f5ab, 0x42572a6b, 0xdbb54c6a,
+ 0x1a3b93aa},
+ {0x00000000, 0xefc26b3e, 0x04f5d03d, 0xeb37bb03, 0x09eba07a,
+ 0xe629cb44, 0x0d1e7047, 0xe2dc1b79, 0x13d740f4, 0xfc152bca,
+ 0x172290c9, 0xf8e0fbf7, 0x1a3ce08e, 0xf5fe8bb0, 0x1ec930b3,
+ 0xf10b5b8d, 0x27ae81e8, 0xc86cead6, 0x235b51d5, 0xcc993aeb,
+ 0x2e452192, 0xc1874aac, 0x2ab0f1af, 0xc5729a91, 0x3479c11c,
+ 0xdbbbaa22, 0x308c1121, 0xdf4e7a1f, 0x3d926166, 0xd2500a58,
+ 0x3967b15b, 0xd6a5da65, 0x4f5d03d0, 0xa09f68ee, 0x4ba8d3ed,
+ 0xa46ab8d3, 0x46b6a3aa, 0xa974c894, 0x42437397, 0xad8118a9,
+ 0x5c8a4324, 0xb348281a, 0x587f9319, 0xb7bdf827, 0x5561e35e,
+ 0xbaa38860, 0x51943363, 0xbe56585d, 0x68f38238, 0x8731e906,
+ 0x6c065205, 0x83c4393b, 0x61182242, 0x8eda497c, 0x65edf27f,
+ 0x8a2f9941, 0x7b24c2cc, 0x94e6a9f2, 0x7fd112f1, 0x901379cf,
+ 0x72cf62b6, 0x9d0d0988, 0x763ab28b, 0x99f8d9b5, 0x9eba07a0,
+ 0x71786c9e, 0x9a4fd79d, 0x758dbca3, 0x9751a7da, 0x7893cce4,
+ 0x93a477e7, 0x7c661cd9, 0x8d6d4754, 0x62af2c6a, 0x89989769,
+ 0x665afc57, 0x8486e72e, 0x6b448c10, 0x80733713, 0x6fb15c2d,
+ 0xb9148648, 0x56d6ed76, 0xbde15675, 0x52233d4b, 0xb0ff2632,
+ 0x5f3d4d0c, 0xb40af60f, 0x5bc89d31, 0xaac3c6bc, 0x4501ad82,
+ 0xae361681, 0x41f47dbf, 0xa32866c6, 0x4cea0df8, 0xa7ddb6fb,
+ 0x481fddc5, 0xd1e70470, 0x3e256f4e, 0xd512d44d, 0x3ad0bf73,
+ 0xd80ca40a, 0x37cecf34, 0xdcf97437, 0x333b1f09, 0xc2304484,
+ 0x2df22fba, 0xc6c594b9, 0x2907ff87, 0xcbdbe4fe, 0x24198fc0,
+ 0xcf2e34c3, 0x20ec5ffd, 0xf6498598, 0x198beea6, 0xf2bc55a5,
+ 0x1d7e3e9b, 0xffa225e2, 0x10604edc, 0xfb57f5df, 0x14959ee1,
+ 0xe59ec56c, 0x0a5cae52, 0xe16b1551, 0x0ea97e6f, 0xec756516,
+ 0x03b70e28, 0xe880b52b, 0x0742de15, 0xe6050901, 0x09c7623f,
+ 0xe2f0d93c, 0x0d32b202, 0xefeea97b, 0x002cc245, 0xeb1b7946,
+ 0x04d91278, 0xf5d249f5, 0x1a1022cb, 0xf12799c8, 0x1ee5f2f6,
+ 0xfc39e98f, 0x13fb82b1, 0xf8cc39b2, 0x170e528c, 0xc1ab88e9,
+ 0x2e69e3d7, 0xc55e58d4, 0x2a9c33ea, 0xc8402893, 0x278243ad,
+ 0xccb5f8ae, 0x23779390, 0xd27cc81d, 0x3dbea323, 0xd6891820,
+ 0x394b731e, 0xdb976867, 0x34550359, 0xdf62b85a, 0x30a0d364,
+ 0xa9580ad1, 0x469a61ef, 0xadaddaec, 0x426fb1d2, 0xa0b3aaab,
+ 0x4f71c195, 0xa4467a96, 0x4b8411a8, 0xba8f4a25, 0x554d211b,
+ 0xbe7a9a18, 0x51b8f126, 0xb364ea5f, 0x5ca68161, 0xb7913a62,
+ 0x5853515c, 0x8ef68b39, 0x6134e007, 0x8a035b04, 0x65c1303a,
+ 0x871d2b43, 0x68df407d, 0x83e8fb7e, 0x6c2a9040, 0x9d21cbcd,
+ 0x72e3a0f3, 0x99d41bf0, 0x761670ce, 0x94ca6bb7, 0x7b080089,
+ 0x903fbb8a, 0x7ffdd0b4, 0x78bf0ea1, 0x977d659f, 0x7c4ade9c,
+ 0x9388b5a2, 0x7154aedb, 0x9e96c5e5, 0x75a17ee6, 0x9a6315d8,
+ 0x6b684e55, 0x84aa256b, 0x6f9d9e68, 0x805ff556, 0x6283ee2f,
+ 0x8d418511, 0x66763e12, 0x89b4552c, 0x5f118f49, 0xb0d3e477,
+ 0x5be45f74, 0xb426344a, 0x56fa2f33, 0xb938440d, 0x520fff0e,
+ 0xbdcd9430, 0x4cc6cfbd, 0xa304a483, 0x48331f80, 0xa7f174be,
+ 0x452d6fc7, 0xaaef04f9, 0x41d8bffa, 0xae1ad4c4, 0x37e20d71,
+ 0xd820664f, 0x3317dd4c, 0xdcd5b672, 0x3e09ad0b, 0xd1cbc635,
+ 0x3afc7d36, 0xd53e1608, 0x24354d85, 0xcbf726bb, 0x20c09db8,
+ 0xcf02f686, 0x2ddeedff, 0xc21c86c1, 0x292b3dc2, 0xc6e956fc,
+ 0x104c8c99, 0xff8ee7a7, 0x14b95ca4, 0xfb7b379a, 0x19a72ce3,
+ 0xf66547dd, 0x1d52fcde, 0xf29097e0, 0x039bcc6d, 0xec59a753,
+ 0x076e1c50, 0xe8ac776e, 0x0a706c17, 0xe5b20729, 0x0e85bc2a,
+ 0xe147d714},
+ {0x00000000, 0x177b1443, 0x2ef62886, 0x398d3cc5, 0x5dec510c,
+ 0x4a97454f, 0x731a798a, 0x64616dc9, 0xbbd8a218, 0xaca3b65b,
+ 0x952e8a9e, 0x82559edd, 0xe634f314, 0xf14fe757, 0xc8c2db92,
+ 0xdfb9cfd1, 0xacc04271, 0xbbbb5632, 0x82366af7, 0x954d7eb4,
+ 0xf12c137d, 0xe657073e, 0xdfda3bfb, 0xc8a12fb8, 0x1718e069,
+ 0x0063f42a, 0x39eec8ef, 0x2e95dcac, 0x4af4b165, 0x5d8fa526,
+ 0x640299e3, 0x73798da0, 0x82f182a3, 0x958a96e0, 0xac07aa25,
+ 0xbb7cbe66, 0xdf1dd3af, 0xc866c7ec, 0xf1ebfb29, 0xe690ef6a,
+ 0x392920bb, 0x2e5234f8, 0x17df083d, 0x00a41c7e, 0x64c571b7,
+ 0x73be65f4, 0x4a335931, 0x5d484d72, 0x2e31c0d2, 0x394ad491,
+ 0x00c7e854, 0x17bcfc17, 0x73dd91de, 0x64a6859d, 0x5d2bb958,
+ 0x4a50ad1b, 0x95e962ca, 0x82927689, 0xbb1f4a4c, 0xac645e0f,
+ 0xc80533c6, 0xdf7e2785, 0xe6f31b40, 0xf1880f03, 0xde920307,
+ 0xc9e91744, 0xf0642b81, 0xe71f3fc2, 0x837e520b, 0x94054648,
+ 0xad887a8d, 0xbaf36ece, 0x654aa11f, 0x7231b55c, 0x4bbc8999,
+ 0x5cc79dda, 0x38a6f013, 0x2fdde450, 0x1650d895, 0x012bccd6,
+ 0x72524176, 0x65295535, 0x5ca469f0, 0x4bdf7db3, 0x2fbe107a,
+ 0x38c50439, 0x014838fc, 0x16332cbf, 0xc98ae36e, 0xdef1f72d,
+ 0xe77ccbe8, 0xf007dfab, 0x9466b262, 0x831da621, 0xba909ae4,
+ 0xadeb8ea7, 0x5c6381a4, 0x4b1895e7, 0x7295a922, 0x65eebd61,
+ 0x018fd0a8, 0x16f4c4eb, 0x2f79f82e, 0x3802ec6d, 0xe7bb23bc,
+ 0xf0c037ff, 0xc94d0b3a, 0xde361f79, 0xba5772b0, 0xad2c66f3,
+ 0x94a15a36, 0x83da4e75, 0xf0a3c3d5, 0xe7d8d796, 0xde55eb53,
+ 0xc92eff10, 0xad4f92d9, 0xba34869a, 0x83b9ba5f, 0x94c2ae1c,
+ 0x4b7b61cd, 0x5c00758e, 0x658d494b, 0x72f65d08, 0x169730c1,
+ 0x01ec2482, 0x38611847, 0x2f1a0c04, 0x6655004f, 0x712e140c,
+ 0x48a328c9, 0x5fd83c8a, 0x3bb95143, 0x2cc24500, 0x154f79c5,
+ 0x02346d86, 0xdd8da257, 0xcaf6b614, 0xf37b8ad1, 0xe4009e92,
+ 0x8061f35b, 0x971ae718, 0xae97dbdd, 0xb9eccf9e, 0xca95423e,
+ 0xddee567d, 0xe4636ab8, 0xf3187efb, 0x97791332, 0x80020771,
+ 0xb98f3bb4, 0xaef42ff7, 0x714de026, 0x6636f465, 0x5fbbc8a0,
+ 0x48c0dce3, 0x2ca1b12a, 0x3bdaa569, 0x025799ac, 0x152c8def,
+ 0xe4a482ec, 0xf3df96af, 0xca52aa6a, 0xdd29be29, 0xb948d3e0,
+ 0xae33c7a3, 0x97befb66, 0x80c5ef25, 0x5f7c20f4, 0x480734b7,
+ 0x718a0872, 0x66f11c31, 0x029071f8, 0x15eb65bb, 0x2c66597e,
+ 0x3b1d4d3d, 0x4864c09d, 0x5f1fd4de, 0x6692e81b, 0x71e9fc58,
+ 0x15889191, 0x02f385d2, 0x3b7eb917, 0x2c05ad54, 0xf3bc6285,
+ 0xe4c776c6, 0xdd4a4a03, 0xca315e40, 0xae503389, 0xb92b27ca,
+ 0x80a61b0f, 0x97dd0f4c, 0xb8c70348, 0xafbc170b, 0x96312bce,
+ 0x814a3f8d, 0xe52b5244, 0xf2504607, 0xcbdd7ac2, 0xdca66e81,
+ 0x031fa150, 0x1464b513, 0x2de989d6, 0x3a929d95, 0x5ef3f05c,
+ 0x4988e41f, 0x7005d8da, 0x677ecc99, 0x14074139, 0x037c557a,
+ 0x3af169bf, 0x2d8a7dfc, 0x49eb1035, 0x5e900476, 0x671d38b3,
+ 0x70662cf0, 0xafdfe321, 0xb8a4f762, 0x8129cba7, 0x9652dfe4,
+ 0xf233b22d, 0xe548a66e, 0xdcc59aab, 0xcbbe8ee8, 0x3a3681eb,
+ 0x2d4d95a8, 0x14c0a96d, 0x03bbbd2e, 0x67dad0e7, 0x70a1c4a4,
+ 0x492cf861, 0x5e57ec22, 0x81ee23f3, 0x969537b0, 0xaf180b75,
+ 0xb8631f36, 0xdc0272ff, 0xcb7966bc, 0xf2f45a79, 0xe58f4e3a,
+ 0x96f6c39a, 0x818dd7d9, 0xb800eb1c, 0xaf7bff5f, 0xcb1a9296,
+ 0xdc6186d5, 0xe5ecba10, 0xf297ae53, 0x2d2e6182, 0x3a5575c1,
+ 0x03d84904, 0x14a35d47, 0x70c2308e, 0x67b924cd, 0x5e341808,
+ 0x494f0c4b}};
+
+local const z_word_t FAR crc_braid_big_table[][256] = {
+ {0x0000000000000000, 0x43147b1700000000, 0x8628f62e00000000,
+ 0xc53c8d3900000000, 0x0c51ec5d00000000, 0x4f45974a00000000,
+ 0x8a791a7300000000, 0xc96d616400000000, 0x18a2d8bb00000000,
+ 0x5bb6a3ac00000000, 0x9e8a2e9500000000, 0xdd9e558200000000,
+ 0x14f334e600000000, 0x57e74ff100000000, 0x92dbc2c800000000,
+ 0xd1cfb9df00000000, 0x7142c0ac00000000, 0x3256bbbb00000000,
+ 0xf76a368200000000, 0xb47e4d9500000000, 0x7d132cf100000000,
+ 0x3e0757e600000000, 0xfb3bdadf00000000, 0xb82fa1c800000000,
+ 0x69e0181700000000, 0x2af4630000000000, 0xefc8ee3900000000,
+ 0xacdc952e00000000, 0x65b1f44a00000000, 0x26a58f5d00000000,
+ 0xe399026400000000, 0xa08d797300000000, 0xa382f18200000000,
+ 0xe0968a9500000000, 0x25aa07ac00000000, 0x66be7cbb00000000,
+ 0xafd31ddf00000000, 0xecc766c800000000, 0x29fbebf100000000,
+ 0x6aef90e600000000, 0xbb20293900000000, 0xf834522e00000000,
+ 0x3d08df1700000000, 0x7e1ca40000000000, 0xb771c56400000000,
+ 0xf465be7300000000, 0x3159334a00000000, 0x724d485d00000000,
+ 0xd2c0312e00000000, 0x91d44a3900000000, 0x54e8c70000000000,
+ 0x17fcbc1700000000, 0xde91dd7300000000, 0x9d85a66400000000,
+ 0x58b92b5d00000000, 0x1bad504a00000000, 0xca62e99500000000,
+ 0x8976928200000000, 0x4c4a1fbb00000000, 0x0f5e64ac00000000,
+ 0xc63305c800000000, 0x85277edf00000000, 0x401bf3e600000000,
+ 0x030f88f100000000, 0x070392de00000000, 0x4417e9c900000000,
+ 0x812b64f000000000, 0xc23f1fe700000000, 0x0b527e8300000000,
+ 0x4846059400000000, 0x8d7a88ad00000000, 0xce6ef3ba00000000,
+ 0x1fa14a6500000000, 0x5cb5317200000000, 0x9989bc4b00000000,
+ 0xda9dc75c00000000, 0x13f0a63800000000, 0x50e4dd2f00000000,
+ 0x95d8501600000000, 0xd6cc2b0100000000, 0x7641527200000000,
+ 0x3555296500000000, 0xf069a45c00000000, 0xb37ddf4b00000000,
+ 0x7a10be2f00000000, 0x3904c53800000000, 0xfc38480100000000,
+ 0xbf2c331600000000, 0x6ee38ac900000000, 0x2df7f1de00000000,
+ 0xe8cb7ce700000000, 0xabdf07f000000000, 0x62b2669400000000,
+ 0x21a61d8300000000, 0xe49a90ba00000000, 0xa78eebad00000000,
+ 0xa481635c00000000, 0xe795184b00000000, 0x22a9957200000000,
+ 0x61bdee6500000000, 0xa8d08f0100000000, 0xebc4f41600000000,
+ 0x2ef8792f00000000, 0x6dec023800000000, 0xbc23bbe700000000,
+ 0xff37c0f000000000, 0x3a0b4dc900000000, 0x791f36de00000000,
+ 0xb07257ba00000000, 0xf3662cad00000000, 0x365aa19400000000,
+ 0x754eda8300000000, 0xd5c3a3f000000000, 0x96d7d8e700000000,
+ 0x53eb55de00000000, 0x10ff2ec900000000, 0xd9924fad00000000,
+ 0x9a8634ba00000000, 0x5fbab98300000000, 0x1caec29400000000,
+ 0xcd617b4b00000000, 0x8e75005c00000000, 0x4b498d6500000000,
+ 0x085df67200000000, 0xc130971600000000, 0x8224ec0100000000,
+ 0x4718613800000000, 0x040c1a2f00000000, 0x4f00556600000000,
+ 0x0c142e7100000000, 0xc928a34800000000, 0x8a3cd85f00000000,
+ 0x4351b93b00000000, 0x0045c22c00000000, 0xc5794f1500000000,
+ 0x866d340200000000, 0x57a28ddd00000000, 0x14b6f6ca00000000,
+ 0xd18a7bf300000000, 0x929e00e400000000, 0x5bf3618000000000,
+ 0x18e71a9700000000, 0xdddb97ae00000000, 0x9ecfecb900000000,
+ 0x3e4295ca00000000, 0x7d56eedd00000000, 0xb86a63e400000000,
+ 0xfb7e18f300000000, 0x3213799700000000, 0x7107028000000000,
+ 0xb43b8fb900000000, 0xf72ff4ae00000000, 0x26e04d7100000000,
+ 0x65f4366600000000, 0xa0c8bb5f00000000, 0xe3dcc04800000000,
+ 0x2ab1a12c00000000, 0x69a5da3b00000000, 0xac99570200000000,
+ 0xef8d2c1500000000, 0xec82a4e400000000, 0xaf96dff300000000,
+ 0x6aaa52ca00000000, 0x29be29dd00000000, 0xe0d348b900000000,
+ 0xa3c733ae00000000, 0x66fbbe9700000000, 0x25efc58000000000,
+ 0xf4207c5f00000000, 0xb734074800000000, 0x72088a7100000000,
+ 0x311cf16600000000, 0xf871900200000000, 0xbb65eb1500000000,
+ 0x7e59662c00000000, 0x3d4d1d3b00000000, 0x9dc0644800000000,
+ 0xded41f5f00000000, 0x1be8926600000000, 0x58fce97100000000,
+ 0x9191881500000000, 0xd285f30200000000, 0x17b97e3b00000000,
+ 0x54ad052c00000000, 0x8562bcf300000000, 0xc676c7e400000000,
+ 0x034a4add00000000, 0x405e31ca00000000, 0x893350ae00000000,
+ 0xca272bb900000000, 0x0f1ba68000000000, 0x4c0fdd9700000000,
+ 0x4803c7b800000000, 0x0b17bcaf00000000, 0xce2b319600000000,
+ 0x8d3f4a8100000000, 0x44522be500000000, 0x074650f200000000,
+ 0xc27addcb00000000, 0x816ea6dc00000000, 0x50a11f0300000000,
+ 0x13b5641400000000, 0xd689e92d00000000, 0x959d923a00000000,
+ 0x5cf0f35e00000000, 0x1fe4884900000000, 0xdad8057000000000,
+ 0x99cc7e6700000000, 0x3941071400000000, 0x7a557c0300000000,
+ 0xbf69f13a00000000, 0xfc7d8a2d00000000, 0x3510eb4900000000,
+ 0x7604905e00000000, 0xb3381d6700000000, 0xf02c667000000000,
+ 0x21e3dfaf00000000, 0x62f7a4b800000000, 0xa7cb298100000000,
+ 0xe4df529600000000, 0x2db233f200000000, 0x6ea648e500000000,
+ 0xab9ac5dc00000000, 0xe88ebecb00000000, 0xeb81363a00000000,
+ 0xa8954d2d00000000, 0x6da9c01400000000, 0x2ebdbb0300000000,
+ 0xe7d0da6700000000, 0xa4c4a17000000000, 0x61f82c4900000000,
+ 0x22ec575e00000000, 0xf323ee8100000000, 0xb037959600000000,
+ 0x750b18af00000000, 0x361f63b800000000, 0xff7202dc00000000,
+ 0xbc6679cb00000000, 0x795af4f200000000, 0x3a4e8fe500000000,
+ 0x9ac3f69600000000, 0xd9d78d8100000000, 0x1ceb00b800000000,
+ 0x5fff7baf00000000, 0x96921acb00000000, 0xd58661dc00000000,
+ 0x10baece500000000, 0x53ae97f200000000, 0x82612e2d00000000,
+ 0xc175553a00000000, 0x0449d80300000000, 0x475da31400000000,
+ 0x8e30c27000000000, 0xcd24b96700000000, 0x0818345e00000000,
+ 0x4b0c4f4900000000},
+ {0x0000000000000000, 0x3e6bc2ef00000000, 0x3dd0f50400000000,
+ 0x03bb37eb00000000, 0x7aa0eb0900000000, 0x44cb29e600000000,
+ 0x47701e0d00000000, 0x791bdce200000000, 0xf440d71300000000,
+ 0xca2b15fc00000000, 0xc990221700000000, 0xf7fbe0f800000000,
+ 0x8ee03c1a00000000, 0xb08bfef500000000, 0xb330c91e00000000,
+ 0x8d5b0bf100000000, 0xe881ae2700000000, 0xd6ea6cc800000000,
+ 0xd5515b2300000000, 0xeb3a99cc00000000, 0x9221452e00000000,
+ 0xac4a87c100000000, 0xaff1b02a00000000, 0x919a72c500000000,
+ 0x1cc1793400000000, 0x22aabbdb00000000, 0x21118c3000000000,
+ 0x1f7a4edf00000000, 0x6661923d00000000, 0x580a50d200000000,
+ 0x5bb1673900000000, 0x65daa5d600000000, 0xd0035d4f00000000,
+ 0xee689fa000000000, 0xedd3a84b00000000, 0xd3b86aa400000000,
+ 0xaaa3b64600000000, 0x94c874a900000000, 0x9773434200000000,
+ 0xa91881ad00000000, 0x24438a5c00000000, 0x1a2848b300000000,
+ 0x19937f5800000000, 0x27f8bdb700000000, 0x5ee3615500000000,
+ 0x6088a3ba00000000, 0x6333945100000000, 0x5d5856be00000000,
+ 0x3882f36800000000, 0x06e9318700000000, 0x0552066c00000000,
+ 0x3b39c48300000000, 0x4222186100000000, 0x7c49da8e00000000,
+ 0x7ff2ed6500000000, 0x41992f8a00000000, 0xccc2247b00000000,
+ 0xf2a9e69400000000, 0xf112d17f00000000, 0xcf79139000000000,
+ 0xb662cf7200000000, 0x88090d9d00000000, 0x8bb23a7600000000,
+ 0xb5d9f89900000000, 0xa007ba9e00000000, 0x9e6c787100000000,
+ 0x9dd74f9a00000000, 0xa3bc8d7500000000, 0xdaa7519700000000,
+ 0xe4cc937800000000, 0xe777a49300000000, 0xd91c667c00000000,
+ 0x54476d8d00000000, 0x6a2caf6200000000, 0x6997988900000000,
+ 0x57fc5a6600000000, 0x2ee7868400000000, 0x108c446b00000000,
+ 0x1337738000000000, 0x2d5cb16f00000000, 0x488614b900000000,
+ 0x76edd65600000000, 0x7556e1bd00000000, 0x4b3d235200000000,
+ 0x3226ffb000000000, 0x0c4d3d5f00000000, 0x0ff60ab400000000,
+ 0x319dc85b00000000, 0xbcc6c3aa00000000, 0x82ad014500000000,
+ 0x811636ae00000000, 0xbf7df44100000000, 0xc66628a300000000,
+ 0xf80dea4c00000000, 0xfbb6dda700000000, 0xc5dd1f4800000000,
+ 0x7004e7d100000000, 0x4e6f253e00000000, 0x4dd412d500000000,
+ 0x73bfd03a00000000, 0x0aa40cd800000000, 0x34cfce3700000000,
+ 0x3774f9dc00000000, 0x091f3b3300000000, 0x844430c200000000,
+ 0xba2ff22d00000000, 0xb994c5c600000000, 0x87ff072900000000,
+ 0xfee4dbcb00000000, 0xc08f192400000000, 0xc3342ecf00000000,
+ 0xfd5fec2000000000, 0x988549f600000000, 0xa6ee8b1900000000,
+ 0xa555bcf200000000, 0x9b3e7e1d00000000, 0xe225a2ff00000000,
+ 0xdc4e601000000000, 0xdff557fb00000000, 0xe19e951400000000,
+ 0x6cc59ee500000000, 0x52ae5c0a00000000, 0x51156be100000000,
+ 0x6f7ea90e00000000, 0x166575ec00000000, 0x280eb70300000000,
+ 0x2bb580e800000000, 0x15de420700000000, 0x010905e600000000,
+ 0x3f62c70900000000, 0x3cd9f0e200000000, 0x02b2320d00000000,
+ 0x7ba9eeef00000000, 0x45c22c0000000000, 0x46791beb00000000,
+ 0x7812d90400000000, 0xf549d2f500000000, 0xcb22101a00000000,
+ 0xc89927f100000000, 0xf6f2e51e00000000, 0x8fe939fc00000000,
+ 0xb182fb1300000000, 0xb239ccf800000000, 0x8c520e1700000000,
+ 0xe988abc100000000, 0xd7e3692e00000000, 0xd4585ec500000000,
+ 0xea339c2a00000000, 0x932840c800000000, 0xad43822700000000,
+ 0xaef8b5cc00000000, 0x9093772300000000, 0x1dc87cd200000000,
+ 0x23a3be3d00000000, 0x201889d600000000, 0x1e734b3900000000,
+ 0x676897db00000000, 0x5903553400000000, 0x5ab862df00000000,
+ 0x64d3a03000000000, 0xd10a58a900000000, 0xef619a4600000000,
+ 0xecdaadad00000000, 0xd2b16f4200000000, 0xabaab3a000000000,
+ 0x95c1714f00000000, 0x967a46a400000000, 0xa811844b00000000,
+ 0x254a8fba00000000, 0x1b214d5500000000, 0x189a7abe00000000,
+ 0x26f1b85100000000, 0x5fea64b300000000, 0x6181a65c00000000,
+ 0x623a91b700000000, 0x5c51535800000000, 0x398bf68e00000000,
+ 0x07e0346100000000, 0x045b038a00000000, 0x3a30c16500000000,
+ 0x432b1d8700000000, 0x7d40df6800000000, 0x7efbe88300000000,
+ 0x40902a6c00000000, 0xcdcb219d00000000, 0xf3a0e37200000000,
+ 0xf01bd49900000000, 0xce70167600000000, 0xb76bca9400000000,
+ 0x8900087b00000000, 0x8abb3f9000000000, 0xb4d0fd7f00000000,
+ 0xa10ebf7800000000, 0x9f657d9700000000, 0x9cde4a7c00000000,
+ 0xa2b5889300000000, 0xdbae547100000000, 0xe5c5969e00000000,
+ 0xe67ea17500000000, 0xd815639a00000000, 0x554e686b00000000,
+ 0x6b25aa8400000000, 0x689e9d6f00000000, 0x56f55f8000000000,
+ 0x2fee836200000000, 0x1185418d00000000, 0x123e766600000000,
+ 0x2c55b48900000000, 0x498f115f00000000, 0x77e4d3b000000000,
+ 0x745fe45b00000000, 0x4a3426b400000000, 0x332ffa5600000000,
+ 0x0d4438b900000000, 0x0eff0f5200000000, 0x3094cdbd00000000,
+ 0xbdcfc64c00000000, 0x83a404a300000000, 0x801f334800000000,
+ 0xbe74f1a700000000, 0xc76f2d4500000000, 0xf904efaa00000000,
+ 0xfabfd84100000000, 0xc4d41aae00000000, 0x710de23700000000,
+ 0x4f6620d800000000, 0x4cdd173300000000, 0x72b6d5dc00000000,
+ 0x0bad093e00000000, 0x35c6cbd100000000, 0x367dfc3a00000000,
+ 0x08163ed500000000, 0x854d352400000000, 0xbb26f7cb00000000,
+ 0xb89dc02000000000, 0x86f602cf00000000, 0xffedde2d00000000,
+ 0xc1861cc200000000, 0xc23d2b2900000000, 0xfc56e9c600000000,
+ 0x998c4c1000000000, 0xa7e78eff00000000, 0xa45cb91400000000,
+ 0x9a377bfb00000000, 0xe32ca71900000000, 0xdd4765f600000000,
+ 0xdefc521d00000000, 0xe09790f200000000, 0x6dcc9b0300000000,
+ 0x53a759ec00000000, 0x501c6e0700000000, 0x6e77ace800000000,
+ 0x176c700a00000000, 0x2907b2e500000000, 0x2abc850e00000000,
+ 0x14d747e100000000},
+ {0x0000000000000000, 0xc0df8ec100000000, 0xc1b96c5800000000,
+ 0x0166e29900000000, 0x8273d9b000000000, 0x42ac577100000000,
+ 0x43cab5e800000000, 0x83153b2900000000, 0x45e1c3ba00000000,
+ 0x853e4d7b00000000, 0x8458afe200000000, 0x4487212300000000,
+ 0xc7921a0a00000000, 0x074d94cb00000000, 0x062b765200000000,
+ 0xc6f4f89300000000, 0xcbc4f6ae00000000, 0x0b1b786f00000000,
+ 0x0a7d9af600000000, 0xcaa2143700000000, 0x49b72f1e00000000,
+ 0x8968a1df00000000, 0x880e434600000000, 0x48d1cd8700000000,
+ 0x8e25351400000000, 0x4efabbd500000000, 0x4f9c594c00000000,
+ 0x8f43d78d00000000, 0x0c56eca400000000, 0xcc89626500000000,
+ 0xcdef80fc00000000, 0x0d300e3d00000000, 0xd78f9c8600000000,
+ 0x1750124700000000, 0x1636f0de00000000, 0xd6e97e1f00000000,
+ 0x55fc453600000000, 0x9523cbf700000000, 0x9445296e00000000,
+ 0x549aa7af00000000, 0x926e5f3c00000000, 0x52b1d1fd00000000,
+ 0x53d7336400000000, 0x9308bda500000000, 0x101d868c00000000,
+ 0xd0c2084d00000000, 0xd1a4ead400000000, 0x117b641500000000,
+ 0x1c4b6a2800000000, 0xdc94e4e900000000, 0xddf2067000000000,
+ 0x1d2d88b100000000, 0x9e38b39800000000, 0x5ee73d5900000000,
+ 0x5f81dfc000000000, 0x9f5e510100000000, 0x59aaa99200000000,
+ 0x9975275300000000, 0x9813c5ca00000000, 0x58cc4b0b00000000,
+ 0xdbd9702200000000, 0x1b06fee300000000, 0x1a601c7a00000000,
+ 0xdabf92bb00000000, 0xef1948d600000000, 0x2fc6c61700000000,
+ 0x2ea0248e00000000, 0xee7faa4f00000000, 0x6d6a916600000000,
+ 0xadb51fa700000000, 0xacd3fd3e00000000, 0x6c0c73ff00000000,
+ 0xaaf88b6c00000000, 0x6a2705ad00000000, 0x6b41e73400000000,
+ 0xab9e69f500000000, 0x288b52dc00000000, 0xe854dc1d00000000,
+ 0xe9323e8400000000, 0x29edb04500000000, 0x24ddbe7800000000,
+ 0xe40230b900000000, 0xe564d22000000000, 0x25bb5ce100000000,
+ 0xa6ae67c800000000, 0x6671e90900000000, 0x67170b9000000000,
+ 0xa7c8855100000000, 0x613c7dc200000000, 0xa1e3f30300000000,
+ 0xa085119a00000000, 0x605a9f5b00000000, 0xe34fa47200000000,
+ 0x23902ab300000000, 0x22f6c82a00000000, 0xe22946eb00000000,
+ 0x3896d45000000000, 0xf8495a9100000000, 0xf92fb80800000000,
+ 0x39f036c900000000, 0xbae50de000000000, 0x7a3a832100000000,
+ 0x7b5c61b800000000, 0xbb83ef7900000000, 0x7d7717ea00000000,
+ 0xbda8992b00000000, 0xbcce7bb200000000, 0x7c11f57300000000,
+ 0xff04ce5a00000000, 0x3fdb409b00000000, 0x3ebda20200000000,
+ 0xfe622cc300000000, 0xf35222fe00000000, 0x338dac3f00000000,
+ 0x32eb4ea600000000, 0xf234c06700000000, 0x7121fb4e00000000,
+ 0xb1fe758f00000000, 0xb098971600000000, 0x704719d700000000,
+ 0xb6b3e14400000000, 0x766c6f8500000000, 0x770a8d1c00000000,
+ 0xb7d503dd00000000, 0x34c038f400000000, 0xf41fb63500000000,
+ 0xf57954ac00000000, 0x35a6da6d00000000, 0x9f35e17700000000,
+ 0x5fea6fb600000000, 0x5e8c8d2f00000000, 0x9e5303ee00000000,
+ 0x1d4638c700000000, 0xdd99b60600000000, 0xdcff549f00000000,
+ 0x1c20da5e00000000, 0xdad422cd00000000, 0x1a0bac0c00000000,
+ 0x1b6d4e9500000000, 0xdbb2c05400000000, 0x58a7fb7d00000000,
+ 0x987875bc00000000, 0x991e972500000000, 0x59c119e400000000,
+ 0x54f117d900000000, 0x942e991800000000, 0x95487b8100000000,
+ 0x5597f54000000000, 0xd682ce6900000000, 0x165d40a800000000,
+ 0x173ba23100000000, 0xd7e42cf000000000, 0x1110d46300000000,
+ 0xd1cf5aa200000000, 0xd0a9b83b00000000, 0x107636fa00000000,
+ 0x93630dd300000000, 0x53bc831200000000, 0x52da618b00000000,
+ 0x9205ef4a00000000, 0x48ba7df100000000, 0x8865f33000000000,
+ 0x890311a900000000, 0x49dc9f6800000000, 0xcac9a44100000000,
+ 0x0a162a8000000000, 0x0b70c81900000000, 0xcbaf46d800000000,
+ 0x0d5bbe4b00000000, 0xcd84308a00000000, 0xcce2d21300000000,
+ 0x0c3d5cd200000000, 0x8f2867fb00000000, 0x4ff7e93a00000000,
+ 0x4e910ba300000000, 0x8e4e856200000000, 0x837e8b5f00000000,
+ 0x43a1059e00000000, 0x42c7e70700000000, 0x821869c600000000,
+ 0x010d52ef00000000, 0xc1d2dc2e00000000, 0xc0b43eb700000000,
+ 0x006bb07600000000, 0xc69f48e500000000, 0x0640c62400000000,
+ 0x072624bd00000000, 0xc7f9aa7c00000000, 0x44ec915500000000,
+ 0x84331f9400000000, 0x8555fd0d00000000, 0x458a73cc00000000,
+ 0x702ca9a100000000, 0xb0f3276000000000, 0xb195c5f900000000,
+ 0x714a4b3800000000, 0xf25f701100000000, 0x3280fed000000000,
+ 0x33e61c4900000000, 0xf339928800000000, 0x35cd6a1b00000000,
+ 0xf512e4da00000000, 0xf474064300000000, 0x34ab888200000000,
+ 0xb7beb3ab00000000, 0x77613d6a00000000, 0x7607dff300000000,
+ 0xb6d8513200000000, 0xbbe85f0f00000000, 0x7b37d1ce00000000,
+ 0x7a51335700000000, 0xba8ebd9600000000, 0x399b86bf00000000,
+ 0xf944087e00000000, 0xf822eae700000000, 0x38fd642600000000,
+ 0xfe099cb500000000, 0x3ed6127400000000, 0x3fb0f0ed00000000,
+ 0xff6f7e2c00000000, 0x7c7a450500000000, 0xbca5cbc400000000,
+ 0xbdc3295d00000000, 0x7d1ca79c00000000, 0xa7a3352700000000,
+ 0x677cbbe600000000, 0x661a597f00000000, 0xa6c5d7be00000000,
+ 0x25d0ec9700000000, 0xe50f625600000000, 0xe46980cf00000000,
+ 0x24b60e0e00000000, 0xe242f69d00000000, 0x229d785c00000000,
+ 0x23fb9ac500000000, 0xe324140400000000, 0x60312f2d00000000,
+ 0xa0eea1ec00000000, 0xa188437500000000, 0x6157cdb400000000,
+ 0x6c67c38900000000, 0xacb84d4800000000, 0xaddeafd100000000,
+ 0x6d01211000000000, 0xee141a3900000000, 0x2ecb94f800000000,
+ 0x2fad766100000000, 0xef72f8a000000000, 0x2986003300000000,
+ 0xe9598ef200000000, 0xe83f6c6b00000000, 0x28e0e2aa00000000,
+ 0xabf5d98300000000, 0x6b2a574200000000, 0x6a4cb5db00000000,
+ 0xaa933b1a00000000},
+ {0x0000000000000000, 0x6f4ca59b00000000, 0x9f9e3bec00000000,
+ 0xf0d29e7700000000, 0x7f3b060300000000, 0x1077a39800000000,
+ 0xe0a53def00000000, 0x8fe9987400000000, 0xfe760c0600000000,
+ 0x913aa99d00000000, 0x61e837ea00000000, 0x0ea4927100000000,
+ 0x814d0a0500000000, 0xee01af9e00000000, 0x1ed331e900000000,
+ 0x719f947200000000, 0xfced180c00000000, 0x93a1bd9700000000,
+ 0x637323e000000000, 0x0c3f867b00000000, 0x83d61e0f00000000,
+ 0xec9abb9400000000, 0x1c4825e300000000, 0x7304807800000000,
+ 0x029b140a00000000, 0x6dd7b19100000000, 0x9d052fe600000000,
+ 0xf2498a7d00000000, 0x7da0120900000000, 0x12ecb79200000000,
+ 0xe23e29e500000000, 0x8d728c7e00000000, 0xf8db311800000000,
+ 0x9797948300000000, 0x67450af400000000, 0x0809af6f00000000,
+ 0x87e0371b00000000, 0xe8ac928000000000, 0x187e0cf700000000,
+ 0x7732a96c00000000, 0x06ad3d1e00000000, 0x69e1988500000000,
+ 0x993306f200000000, 0xf67fa36900000000, 0x79963b1d00000000,
+ 0x16da9e8600000000, 0xe60800f100000000, 0x8944a56a00000000,
+ 0x0436291400000000, 0x6b7a8c8f00000000, 0x9ba812f800000000,
+ 0xf4e4b76300000000, 0x7b0d2f1700000000, 0x14418a8c00000000,
+ 0xe49314fb00000000, 0x8bdfb16000000000, 0xfa40251200000000,
+ 0x950c808900000000, 0x65de1efe00000000, 0x0a92bb6500000000,
+ 0x857b231100000000, 0xea37868a00000000, 0x1ae518fd00000000,
+ 0x75a9bd6600000000, 0xf0b7633000000000, 0x9ffbc6ab00000000,
+ 0x6f2958dc00000000, 0x0065fd4700000000, 0x8f8c653300000000,
+ 0xe0c0c0a800000000, 0x10125edf00000000, 0x7f5efb4400000000,
+ 0x0ec16f3600000000, 0x618dcaad00000000, 0x915f54da00000000,
+ 0xfe13f14100000000, 0x71fa693500000000, 0x1eb6ccae00000000,
+ 0xee6452d900000000, 0x8128f74200000000, 0x0c5a7b3c00000000,
+ 0x6316dea700000000, 0x93c440d000000000, 0xfc88e54b00000000,
+ 0x73617d3f00000000, 0x1c2dd8a400000000, 0xecff46d300000000,
+ 0x83b3e34800000000, 0xf22c773a00000000, 0x9d60d2a100000000,
+ 0x6db24cd600000000, 0x02fee94d00000000, 0x8d17713900000000,
+ 0xe25bd4a200000000, 0x12894ad500000000, 0x7dc5ef4e00000000,
+ 0x086c522800000000, 0x6720f7b300000000, 0x97f269c400000000,
+ 0xf8becc5f00000000, 0x7757542b00000000, 0x181bf1b000000000,
+ 0xe8c96fc700000000, 0x8785ca5c00000000, 0xf61a5e2e00000000,
+ 0x9956fbb500000000, 0x698465c200000000, 0x06c8c05900000000,
+ 0x8921582d00000000, 0xe66dfdb600000000, 0x16bf63c100000000,
+ 0x79f3c65a00000000, 0xf4814a2400000000, 0x9bcdefbf00000000,
+ 0x6b1f71c800000000, 0x0453d45300000000, 0x8bba4c2700000000,
+ 0xe4f6e9bc00000000, 0x142477cb00000000, 0x7b68d25000000000,
+ 0x0af7462200000000, 0x65bbe3b900000000, 0x95697dce00000000,
+ 0xfa25d85500000000, 0x75cc402100000000, 0x1a80e5ba00000000,
+ 0xea527bcd00000000, 0x851ede5600000000, 0xe06fc76000000000,
+ 0x8f2362fb00000000, 0x7ff1fc8c00000000, 0x10bd591700000000,
+ 0x9f54c16300000000, 0xf01864f800000000, 0x00cafa8f00000000,
+ 0x6f865f1400000000, 0x1e19cb6600000000, 0x71556efd00000000,
+ 0x8187f08a00000000, 0xeecb551100000000, 0x6122cd6500000000,
+ 0x0e6e68fe00000000, 0xfebcf68900000000, 0x91f0531200000000,
+ 0x1c82df6c00000000, 0x73ce7af700000000, 0x831ce48000000000,
+ 0xec50411b00000000, 0x63b9d96f00000000, 0x0cf57cf400000000,
+ 0xfc27e28300000000, 0x936b471800000000, 0xe2f4d36a00000000,
+ 0x8db876f100000000, 0x7d6ae88600000000, 0x12264d1d00000000,
+ 0x9dcfd56900000000, 0xf28370f200000000, 0x0251ee8500000000,
+ 0x6d1d4b1e00000000, 0x18b4f67800000000, 0x77f853e300000000,
+ 0x872acd9400000000, 0xe866680f00000000, 0x678ff07b00000000,
+ 0x08c355e000000000, 0xf811cb9700000000, 0x975d6e0c00000000,
+ 0xe6c2fa7e00000000, 0x898e5fe500000000, 0x795cc19200000000,
+ 0x1610640900000000, 0x99f9fc7d00000000, 0xf6b559e600000000,
+ 0x0667c79100000000, 0x692b620a00000000, 0xe459ee7400000000,
+ 0x8b154bef00000000, 0x7bc7d59800000000, 0x148b700300000000,
+ 0x9b62e87700000000, 0xf42e4dec00000000, 0x04fcd39b00000000,
+ 0x6bb0760000000000, 0x1a2fe27200000000, 0x756347e900000000,
+ 0x85b1d99e00000000, 0xeafd7c0500000000, 0x6514e47100000000,
+ 0x0a5841ea00000000, 0xfa8adf9d00000000, 0x95c67a0600000000,
+ 0x10d8a45000000000, 0x7f9401cb00000000, 0x8f469fbc00000000,
+ 0xe00a3a2700000000, 0x6fe3a25300000000, 0x00af07c800000000,
+ 0xf07d99bf00000000, 0x9f313c2400000000, 0xeeaea85600000000,
+ 0x81e20dcd00000000, 0x713093ba00000000, 0x1e7c362100000000,
+ 0x9195ae5500000000, 0xfed90bce00000000, 0x0e0b95b900000000,
+ 0x6147302200000000, 0xec35bc5c00000000, 0x837919c700000000,
+ 0x73ab87b000000000, 0x1ce7222b00000000, 0x930eba5f00000000,
+ 0xfc421fc400000000, 0x0c9081b300000000, 0x63dc242800000000,
+ 0x1243b05a00000000, 0x7d0f15c100000000, 0x8ddd8bb600000000,
+ 0xe2912e2d00000000, 0x6d78b65900000000, 0x023413c200000000,
+ 0xf2e68db500000000, 0x9daa282e00000000, 0xe803954800000000,
+ 0x874f30d300000000, 0x779daea400000000, 0x18d10b3f00000000,
+ 0x9738934b00000000, 0xf87436d000000000, 0x08a6a8a700000000,
+ 0x67ea0d3c00000000, 0x1675994e00000000, 0x79393cd500000000,
+ 0x89eba2a200000000, 0xe6a7073900000000, 0x694e9f4d00000000,
+ 0x06023ad600000000, 0xf6d0a4a100000000, 0x999c013a00000000,
+ 0x14ee8d4400000000, 0x7ba228df00000000, 0x8b70b6a800000000,
+ 0xe43c133300000000, 0x6bd58b4700000000, 0x04992edc00000000,
+ 0xf44bb0ab00000000, 0x9b07153000000000, 0xea98814200000000,
+ 0x85d424d900000000, 0x7506baae00000000, 0x1a4a1f3500000000,
+ 0x95a3874100000000, 0xfaef22da00000000, 0x0a3dbcad00000000,
+ 0x6571193600000000},
+ {0x0000000000000000, 0x85d996dd00000000, 0x4bb55c6000000000,
+ 0xce6ccabd00000000, 0x966ab9c000000000, 0x13b32f1d00000000,
+ 0xdddfe5a000000000, 0x5806737d00000000, 0x6dd3035a00000000,
+ 0xe80a958700000000, 0x26665f3a00000000, 0xa3bfc9e700000000,
+ 0xfbb9ba9a00000000, 0x7e602c4700000000, 0xb00ce6fa00000000,
+ 0x35d5702700000000, 0xdaa607b400000000, 0x5f7f916900000000,
+ 0x91135bd400000000, 0x14cacd0900000000, 0x4cccbe7400000000,
+ 0xc91528a900000000, 0x0779e21400000000, 0x82a074c900000000,
+ 0xb77504ee00000000, 0x32ac923300000000, 0xfcc0588e00000000,
+ 0x7919ce5300000000, 0x211fbd2e00000000, 0xa4c62bf300000000,
+ 0x6aaae14e00000000, 0xef73779300000000, 0xf54b7eb300000000,
+ 0x7092e86e00000000, 0xbefe22d300000000, 0x3b27b40e00000000,
+ 0x6321c77300000000, 0xe6f851ae00000000, 0x28949b1300000000,
+ 0xad4d0dce00000000, 0x98987de900000000, 0x1d41eb3400000000,
+ 0xd32d218900000000, 0x56f4b75400000000, 0x0ef2c42900000000,
+ 0x8b2b52f400000000, 0x4547984900000000, 0xc09e0e9400000000,
+ 0x2fed790700000000, 0xaa34efda00000000, 0x6458256700000000,
+ 0xe181b3ba00000000, 0xb987c0c700000000, 0x3c5e561a00000000,
+ 0xf2329ca700000000, 0x77eb0a7a00000000, 0x423e7a5d00000000,
+ 0xc7e7ec8000000000, 0x098b263d00000000, 0x8c52b0e000000000,
+ 0xd454c39d00000000, 0x518d554000000000, 0x9fe19ffd00000000,
+ 0x1a38092000000000, 0xab918dbd00000000, 0x2e481b6000000000,
+ 0xe024d1dd00000000, 0x65fd470000000000, 0x3dfb347d00000000,
+ 0xb822a2a000000000, 0x764e681d00000000, 0xf397fec000000000,
+ 0xc6428ee700000000, 0x439b183a00000000, 0x8df7d28700000000,
+ 0x082e445a00000000, 0x5028372700000000, 0xd5f1a1fa00000000,
+ 0x1b9d6b4700000000, 0x9e44fd9a00000000, 0x71378a0900000000,
+ 0xf4ee1cd400000000, 0x3a82d66900000000, 0xbf5b40b400000000,
+ 0xe75d33c900000000, 0x6284a51400000000, 0xace86fa900000000,
+ 0x2931f97400000000, 0x1ce4895300000000, 0x993d1f8e00000000,
+ 0x5751d53300000000, 0xd28843ee00000000, 0x8a8e309300000000,
+ 0x0f57a64e00000000, 0xc13b6cf300000000, 0x44e2fa2e00000000,
+ 0x5edaf30e00000000, 0xdb0365d300000000, 0x156faf6e00000000,
+ 0x90b639b300000000, 0xc8b04ace00000000, 0x4d69dc1300000000,
+ 0x830516ae00000000, 0x06dc807300000000, 0x3309f05400000000,
+ 0xb6d0668900000000, 0x78bcac3400000000, 0xfd653ae900000000,
+ 0xa563499400000000, 0x20badf4900000000, 0xeed615f400000000,
+ 0x6b0f832900000000, 0x847cf4ba00000000, 0x01a5626700000000,
+ 0xcfc9a8da00000000, 0x4a103e0700000000, 0x12164d7a00000000,
+ 0x97cfdba700000000, 0x59a3111a00000000, 0xdc7a87c700000000,
+ 0xe9aff7e000000000, 0x6c76613d00000000, 0xa21aab8000000000,
+ 0x27c33d5d00000000, 0x7fc54e2000000000, 0xfa1cd8fd00000000,
+ 0x3470124000000000, 0xb1a9849d00000000, 0x17256aa000000000,
+ 0x92fcfc7d00000000, 0x5c9036c000000000, 0xd949a01d00000000,
+ 0x814fd36000000000, 0x049645bd00000000, 0xcafa8f0000000000,
+ 0x4f2319dd00000000, 0x7af669fa00000000, 0xff2fff2700000000,
+ 0x3143359a00000000, 0xb49aa34700000000, 0xec9cd03a00000000,
+ 0x694546e700000000, 0xa7298c5a00000000, 0x22f01a8700000000,
+ 0xcd836d1400000000, 0x485afbc900000000, 0x8636317400000000,
+ 0x03efa7a900000000, 0x5be9d4d400000000, 0xde30420900000000,
+ 0x105c88b400000000, 0x95851e6900000000, 0xa0506e4e00000000,
+ 0x2589f89300000000, 0xebe5322e00000000, 0x6e3ca4f300000000,
+ 0x363ad78e00000000, 0xb3e3415300000000, 0x7d8f8bee00000000,
+ 0xf8561d3300000000, 0xe26e141300000000, 0x67b782ce00000000,
+ 0xa9db487300000000, 0x2c02deae00000000, 0x7404add300000000,
+ 0xf1dd3b0e00000000, 0x3fb1f1b300000000, 0xba68676e00000000,
+ 0x8fbd174900000000, 0x0a64819400000000, 0xc4084b2900000000,
+ 0x41d1ddf400000000, 0x19d7ae8900000000, 0x9c0e385400000000,
+ 0x5262f2e900000000, 0xd7bb643400000000, 0x38c813a700000000,
+ 0xbd11857a00000000, 0x737d4fc700000000, 0xf6a4d91a00000000,
+ 0xaea2aa6700000000, 0x2b7b3cba00000000, 0xe517f60700000000,
+ 0x60ce60da00000000, 0x551b10fd00000000, 0xd0c2862000000000,
+ 0x1eae4c9d00000000, 0x9b77da4000000000, 0xc371a93d00000000,
+ 0x46a83fe000000000, 0x88c4f55d00000000, 0x0d1d638000000000,
+ 0xbcb4e71d00000000, 0x396d71c000000000, 0xf701bb7d00000000,
+ 0x72d82da000000000, 0x2ade5edd00000000, 0xaf07c80000000000,
+ 0x616b02bd00000000, 0xe4b2946000000000, 0xd167e44700000000,
+ 0x54be729a00000000, 0x9ad2b82700000000, 0x1f0b2efa00000000,
+ 0x470d5d8700000000, 0xc2d4cb5a00000000, 0x0cb801e700000000,
+ 0x8961973a00000000, 0x6612e0a900000000, 0xe3cb767400000000,
+ 0x2da7bcc900000000, 0xa87e2a1400000000, 0xf078596900000000,
+ 0x75a1cfb400000000, 0xbbcd050900000000, 0x3e1493d400000000,
+ 0x0bc1e3f300000000, 0x8e18752e00000000, 0x4074bf9300000000,
+ 0xc5ad294e00000000, 0x9dab5a3300000000, 0x1872ccee00000000,
+ 0xd61e065300000000, 0x53c7908e00000000, 0x49ff99ae00000000,
+ 0xcc260f7300000000, 0x024ac5ce00000000, 0x8793531300000000,
+ 0xdf95206e00000000, 0x5a4cb6b300000000, 0x94207c0e00000000,
+ 0x11f9ead300000000, 0x242c9af400000000, 0xa1f50c2900000000,
+ 0x6f99c69400000000, 0xea40504900000000, 0xb246233400000000,
+ 0x379fb5e900000000, 0xf9f37f5400000000, 0x7c2ae98900000000,
+ 0x93599e1a00000000, 0x168008c700000000, 0xd8ecc27a00000000,
+ 0x5d3554a700000000, 0x053327da00000000, 0x80eab10700000000,
+ 0x4e867bba00000000, 0xcb5fed6700000000, 0xfe8a9d4000000000,
+ 0x7b530b9d00000000, 0xb53fc12000000000, 0x30e657fd00000000,
+ 0x68e0248000000000, 0xed39b25d00000000, 0x235578e000000000,
+ 0xa68cee3d00000000},
+ {0x0000000000000000, 0x76e10f9d00000000, 0xadc46ee100000000,
+ 0xdb25617c00000000, 0x1b8fac1900000000, 0x6d6ea38400000000,
+ 0xb64bc2f800000000, 0xc0aacd6500000000, 0x361e593300000000,
+ 0x40ff56ae00000000, 0x9bda37d200000000, 0xed3b384f00000000,
+ 0x2d91f52a00000000, 0x5b70fab700000000, 0x80559bcb00000000,
+ 0xf6b4945600000000, 0x6c3cb26600000000, 0x1addbdfb00000000,
+ 0xc1f8dc8700000000, 0xb719d31a00000000, 0x77b31e7f00000000,
+ 0x015211e200000000, 0xda77709e00000000, 0xac967f0300000000,
+ 0x5a22eb5500000000, 0x2cc3e4c800000000, 0xf7e685b400000000,
+ 0x81078a2900000000, 0x41ad474c00000000, 0x374c48d100000000,
+ 0xec6929ad00000000, 0x9a88263000000000, 0xd87864cd00000000,
+ 0xae996b5000000000, 0x75bc0a2c00000000, 0x035d05b100000000,
+ 0xc3f7c8d400000000, 0xb516c74900000000, 0x6e33a63500000000,
+ 0x18d2a9a800000000, 0xee663dfe00000000, 0x9887326300000000,
+ 0x43a2531f00000000, 0x35435c8200000000, 0xf5e991e700000000,
+ 0x83089e7a00000000, 0x582dff0600000000, 0x2eccf09b00000000,
+ 0xb444d6ab00000000, 0xc2a5d93600000000, 0x1980b84a00000000,
+ 0x6f61b7d700000000, 0xafcb7ab200000000, 0xd92a752f00000000,
+ 0x020f145300000000, 0x74ee1bce00000000, 0x825a8f9800000000,
+ 0xf4bb800500000000, 0x2f9ee17900000000, 0x597feee400000000,
+ 0x99d5238100000000, 0xef342c1c00000000, 0x34114d6000000000,
+ 0x42f042fd00000000, 0xf1f7b94100000000, 0x8716b6dc00000000,
+ 0x5c33d7a000000000, 0x2ad2d83d00000000, 0xea78155800000000,
+ 0x9c991ac500000000, 0x47bc7bb900000000, 0x315d742400000000,
+ 0xc7e9e07200000000, 0xb108efef00000000, 0x6a2d8e9300000000,
+ 0x1ccc810e00000000, 0xdc664c6b00000000, 0xaa8743f600000000,
+ 0x71a2228a00000000, 0x07432d1700000000, 0x9dcb0b2700000000,
+ 0xeb2a04ba00000000, 0x300f65c600000000, 0x46ee6a5b00000000,
+ 0x8644a73e00000000, 0xf0a5a8a300000000, 0x2b80c9df00000000,
+ 0x5d61c64200000000, 0xabd5521400000000, 0xdd345d8900000000,
+ 0x06113cf500000000, 0x70f0336800000000, 0xb05afe0d00000000,
+ 0xc6bbf19000000000, 0x1d9e90ec00000000, 0x6b7f9f7100000000,
+ 0x298fdd8c00000000, 0x5f6ed21100000000, 0x844bb36d00000000,
+ 0xf2aabcf000000000, 0x3200719500000000, 0x44e17e0800000000,
+ 0x9fc41f7400000000, 0xe92510e900000000, 0x1f9184bf00000000,
+ 0x69708b2200000000, 0xb255ea5e00000000, 0xc4b4e5c300000000,
+ 0x041e28a600000000, 0x72ff273b00000000, 0xa9da464700000000,
+ 0xdf3b49da00000000, 0x45b36fea00000000, 0x3352607700000000,
+ 0xe877010b00000000, 0x9e960e9600000000, 0x5e3cc3f300000000,
+ 0x28ddcc6e00000000, 0xf3f8ad1200000000, 0x8519a28f00000000,
+ 0x73ad36d900000000, 0x054c394400000000, 0xde69583800000000,
+ 0xa88857a500000000, 0x68229ac000000000, 0x1ec3955d00000000,
+ 0xc5e6f42100000000, 0xb307fbbc00000000, 0xe2ef738300000000,
+ 0x940e7c1e00000000, 0x4f2b1d6200000000, 0x39ca12ff00000000,
+ 0xf960df9a00000000, 0x8f81d00700000000, 0x54a4b17b00000000,
+ 0x2245bee600000000, 0xd4f12ab000000000, 0xa210252d00000000,
+ 0x7935445100000000, 0x0fd44bcc00000000, 0xcf7e86a900000000,
+ 0xb99f893400000000, 0x62bae84800000000, 0x145be7d500000000,
+ 0x8ed3c1e500000000, 0xf832ce7800000000, 0x2317af0400000000,
+ 0x55f6a09900000000, 0x955c6dfc00000000, 0xe3bd626100000000,
+ 0x3898031d00000000, 0x4e790c8000000000, 0xb8cd98d600000000,
+ 0xce2c974b00000000, 0x1509f63700000000, 0x63e8f9aa00000000,
+ 0xa34234cf00000000, 0xd5a33b5200000000, 0x0e865a2e00000000,
+ 0x786755b300000000, 0x3a97174e00000000, 0x4c7618d300000000,
+ 0x975379af00000000, 0xe1b2763200000000, 0x2118bb5700000000,
+ 0x57f9b4ca00000000, 0x8cdcd5b600000000, 0xfa3dda2b00000000,
+ 0x0c894e7d00000000, 0x7a6841e000000000, 0xa14d209c00000000,
+ 0xd7ac2f0100000000, 0x1706e26400000000, 0x61e7edf900000000,
+ 0xbac28c8500000000, 0xcc23831800000000, 0x56aba52800000000,
+ 0x204aaab500000000, 0xfb6fcbc900000000, 0x8d8ec45400000000,
+ 0x4d24093100000000, 0x3bc506ac00000000, 0xe0e067d000000000,
+ 0x9601684d00000000, 0x60b5fc1b00000000, 0x1654f38600000000,
+ 0xcd7192fa00000000, 0xbb909d6700000000, 0x7b3a500200000000,
+ 0x0ddb5f9f00000000, 0xd6fe3ee300000000, 0xa01f317e00000000,
+ 0x1318cac200000000, 0x65f9c55f00000000, 0xbedca42300000000,
+ 0xc83dabbe00000000, 0x089766db00000000, 0x7e76694600000000,
+ 0xa553083a00000000, 0xd3b207a700000000, 0x250693f100000000,
+ 0x53e79c6c00000000, 0x88c2fd1000000000, 0xfe23f28d00000000,
+ 0x3e893fe800000000, 0x4868307500000000, 0x934d510900000000,
+ 0xe5ac5e9400000000, 0x7f2478a400000000, 0x09c5773900000000,
+ 0xd2e0164500000000, 0xa40119d800000000, 0x64abd4bd00000000,
+ 0x124adb2000000000, 0xc96fba5c00000000, 0xbf8eb5c100000000,
+ 0x493a219700000000, 0x3fdb2e0a00000000, 0xe4fe4f7600000000,
+ 0x921f40eb00000000, 0x52b58d8e00000000, 0x2454821300000000,
+ 0xff71e36f00000000, 0x8990ecf200000000, 0xcb60ae0f00000000,
+ 0xbd81a19200000000, 0x66a4c0ee00000000, 0x1045cf7300000000,
+ 0xd0ef021600000000, 0xa60e0d8b00000000, 0x7d2b6cf700000000,
+ 0x0bca636a00000000, 0xfd7ef73c00000000, 0x8b9ff8a100000000,
+ 0x50ba99dd00000000, 0x265b964000000000, 0xe6f15b2500000000,
+ 0x901054b800000000, 0x4b3535c400000000, 0x3dd43a5900000000,
+ 0xa75c1c6900000000, 0xd1bd13f400000000, 0x0a98728800000000,
+ 0x7c797d1500000000, 0xbcd3b07000000000, 0xca32bfed00000000,
+ 0x1117de9100000000, 0x67f6d10c00000000, 0x9142455a00000000,
+ 0xe7a34ac700000000, 0x3c862bbb00000000, 0x4a67242600000000,
+ 0x8acde94300000000, 0xfc2ce6de00000000, 0x270987a200000000,
+ 0x51e8883f00000000},
+ {0x0000000000000000, 0xe8dbfbb900000000, 0x91b186a800000000,
+ 0x796a7d1100000000, 0x63657c8a00000000, 0x8bbe873300000000,
+ 0xf2d4fa2200000000, 0x1a0f019b00000000, 0x87cc89cf00000000,
+ 0x6f17727600000000, 0x167d0f6700000000, 0xfea6f4de00000000,
+ 0xe4a9f54500000000, 0x0c720efc00000000, 0x751873ed00000000,
+ 0x9dc3885400000000, 0x4f9f624400000000, 0xa74499fd00000000,
+ 0xde2ee4ec00000000, 0x36f51f5500000000, 0x2cfa1ece00000000,
+ 0xc421e57700000000, 0xbd4b986600000000, 0x559063df00000000,
+ 0xc853eb8b00000000, 0x2088103200000000, 0x59e26d2300000000,
+ 0xb139969a00000000, 0xab36970100000000, 0x43ed6cb800000000,
+ 0x3a8711a900000000, 0xd25cea1000000000, 0x9e3ec58800000000,
+ 0x76e53e3100000000, 0x0f8f432000000000, 0xe754b89900000000,
+ 0xfd5bb90200000000, 0x158042bb00000000, 0x6cea3faa00000000,
+ 0x8431c41300000000, 0x19f24c4700000000, 0xf129b7fe00000000,
+ 0x8843caef00000000, 0x6098315600000000, 0x7a9730cd00000000,
+ 0x924ccb7400000000, 0xeb26b66500000000, 0x03fd4ddc00000000,
+ 0xd1a1a7cc00000000, 0x397a5c7500000000, 0x4010216400000000,
+ 0xa8cbdadd00000000, 0xb2c4db4600000000, 0x5a1f20ff00000000,
+ 0x23755dee00000000, 0xcbaea65700000000, 0x566d2e0300000000,
+ 0xbeb6d5ba00000000, 0xc7dca8ab00000000, 0x2f07531200000000,
+ 0x3508528900000000, 0xddd3a93000000000, 0xa4b9d42100000000,
+ 0x4c622f9800000000, 0x7d7bfbca00000000, 0x95a0007300000000,
+ 0xecca7d6200000000, 0x041186db00000000, 0x1e1e874000000000,
+ 0xf6c57cf900000000, 0x8faf01e800000000, 0x6774fa5100000000,
+ 0xfab7720500000000, 0x126c89bc00000000, 0x6b06f4ad00000000,
+ 0x83dd0f1400000000, 0x99d20e8f00000000, 0x7109f53600000000,
+ 0x0863882700000000, 0xe0b8739e00000000, 0x32e4998e00000000,
+ 0xda3f623700000000, 0xa3551f2600000000, 0x4b8ee49f00000000,
+ 0x5181e50400000000, 0xb95a1ebd00000000, 0xc03063ac00000000,
+ 0x28eb981500000000, 0xb528104100000000, 0x5df3ebf800000000,
+ 0x249996e900000000, 0xcc426d5000000000, 0xd64d6ccb00000000,
+ 0x3e96977200000000, 0x47fcea6300000000, 0xaf2711da00000000,
+ 0xe3453e4200000000, 0x0b9ec5fb00000000, 0x72f4b8ea00000000,
+ 0x9a2f435300000000, 0x802042c800000000, 0x68fbb97100000000,
+ 0x1191c46000000000, 0xf94a3fd900000000, 0x6489b78d00000000,
+ 0x8c524c3400000000, 0xf538312500000000, 0x1de3ca9c00000000,
+ 0x07eccb0700000000, 0xef3730be00000000, 0x965d4daf00000000,
+ 0x7e86b61600000000, 0xacda5c0600000000, 0x4401a7bf00000000,
+ 0x3d6bdaae00000000, 0xd5b0211700000000, 0xcfbf208c00000000,
+ 0x2764db3500000000, 0x5e0ea62400000000, 0xb6d55d9d00000000,
+ 0x2b16d5c900000000, 0xc3cd2e7000000000, 0xbaa7536100000000,
+ 0x527ca8d800000000, 0x4873a94300000000, 0xa0a852fa00000000,
+ 0xd9c22feb00000000, 0x3119d45200000000, 0xbbf0874e00000000,
+ 0x532b7cf700000000, 0x2a4101e600000000, 0xc29afa5f00000000,
+ 0xd895fbc400000000, 0x304e007d00000000, 0x49247d6c00000000,
+ 0xa1ff86d500000000, 0x3c3c0e8100000000, 0xd4e7f53800000000,
+ 0xad8d882900000000, 0x4556739000000000, 0x5f59720b00000000,
+ 0xb78289b200000000, 0xcee8f4a300000000, 0x26330f1a00000000,
+ 0xf46fe50a00000000, 0x1cb41eb300000000, 0x65de63a200000000,
+ 0x8d05981b00000000, 0x970a998000000000, 0x7fd1623900000000,
+ 0x06bb1f2800000000, 0xee60e49100000000, 0x73a36cc500000000,
+ 0x9b78977c00000000, 0xe212ea6d00000000, 0x0ac911d400000000,
+ 0x10c6104f00000000, 0xf81debf600000000, 0x817796e700000000,
+ 0x69ac6d5e00000000, 0x25ce42c600000000, 0xcd15b97f00000000,
+ 0xb47fc46e00000000, 0x5ca43fd700000000, 0x46ab3e4c00000000,
+ 0xae70c5f500000000, 0xd71ab8e400000000, 0x3fc1435d00000000,
+ 0xa202cb0900000000, 0x4ad930b000000000, 0x33b34da100000000,
+ 0xdb68b61800000000, 0xc167b78300000000, 0x29bc4c3a00000000,
+ 0x50d6312b00000000, 0xb80dca9200000000, 0x6a51208200000000,
+ 0x828adb3b00000000, 0xfbe0a62a00000000, 0x133b5d9300000000,
+ 0x09345c0800000000, 0xe1efa7b100000000, 0x9885daa000000000,
+ 0x705e211900000000, 0xed9da94d00000000, 0x054652f400000000,
+ 0x7c2c2fe500000000, 0x94f7d45c00000000, 0x8ef8d5c700000000,
+ 0x66232e7e00000000, 0x1f49536f00000000, 0xf792a8d600000000,
+ 0xc68b7c8400000000, 0x2e50873d00000000, 0x573afa2c00000000,
+ 0xbfe1019500000000, 0xa5ee000e00000000, 0x4d35fbb700000000,
+ 0x345f86a600000000, 0xdc847d1f00000000, 0x4147f54b00000000,
+ 0xa99c0ef200000000, 0xd0f673e300000000, 0x382d885a00000000,
+ 0x222289c100000000, 0xcaf9727800000000, 0xb3930f6900000000,
+ 0x5b48f4d000000000, 0x89141ec000000000, 0x61cfe57900000000,
+ 0x18a5986800000000, 0xf07e63d100000000, 0xea71624a00000000,
+ 0x02aa99f300000000, 0x7bc0e4e200000000, 0x931b1f5b00000000,
+ 0x0ed8970f00000000, 0xe6036cb600000000, 0x9f6911a700000000,
+ 0x77b2ea1e00000000, 0x6dbdeb8500000000, 0x8566103c00000000,
+ 0xfc0c6d2d00000000, 0x14d7969400000000, 0x58b5b90c00000000,
+ 0xb06e42b500000000, 0xc9043fa400000000, 0x21dfc41d00000000,
+ 0x3bd0c58600000000, 0xd30b3e3f00000000, 0xaa61432e00000000,
+ 0x42bab89700000000, 0xdf7930c300000000, 0x37a2cb7a00000000,
+ 0x4ec8b66b00000000, 0xa6134dd200000000, 0xbc1c4c4900000000,
+ 0x54c7b7f000000000, 0x2dadcae100000000, 0xc576315800000000,
+ 0x172adb4800000000, 0xfff120f100000000, 0x869b5de000000000,
+ 0x6e40a65900000000, 0x744fa7c200000000, 0x9c945c7b00000000,
+ 0xe5fe216a00000000, 0x0d25dad300000000, 0x90e6528700000000,
+ 0x783da93e00000000, 0x0157d42f00000000, 0xe98c2f9600000000,
+ 0xf3832e0d00000000, 0x1b58d5b400000000, 0x6232a8a500000000,
+ 0x8ae9531c00000000},
+ {0x0000000000000000, 0x919168ae00000000, 0x6325a08700000000,
+ 0xf2b4c82900000000, 0x874c31d400000000, 0x16dd597a00000000,
+ 0xe469915300000000, 0x75f8f9fd00000000, 0x4f9f137300000000,
+ 0xde0e7bdd00000000, 0x2cbab3f400000000, 0xbd2bdb5a00000000,
+ 0xc8d322a700000000, 0x59424a0900000000, 0xabf6822000000000,
+ 0x3a67ea8e00000000, 0x9e3e27e600000000, 0x0faf4f4800000000,
+ 0xfd1b876100000000, 0x6c8aefcf00000000, 0x1972163200000000,
+ 0x88e37e9c00000000, 0x7a57b6b500000000, 0xebc6de1b00000000,
+ 0xd1a1349500000000, 0x40305c3b00000000, 0xb284941200000000,
+ 0x2315fcbc00000000, 0x56ed054100000000, 0xc77c6def00000000,
+ 0x35c8a5c600000000, 0xa459cd6800000000, 0x7d7b3f1700000000,
+ 0xecea57b900000000, 0x1e5e9f9000000000, 0x8fcff73e00000000,
+ 0xfa370ec300000000, 0x6ba6666d00000000, 0x9912ae4400000000,
+ 0x0883c6ea00000000, 0x32e42c6400000000, 0xa37544ca00000000,
+ 0x51c18ce300000000, 0xc050e44d00000000, 0xb5a81db000000000,
+ 0x2439751e00000000, 0xd68dbd3700000000, 0x471cd59900000000,
+ 0xe34518f100000000, 0x72d4705f00000000, 0x8060b87600000000,
+ 0x11f1d0d800000000, 0x6409292500000000, 0xf598418b00000000,
+ 0x072c89a200000000, 0x96bde10c00000000, 0xacda0b8200000000,
+ 0x3d4b632c00000000, 0xcfffab0500000000, 0x5e6ec3ab00000000,
+ 0x2b963a5600000000, 0xba0752f800000000, 0x48b39ad100000000,
+ 0xd922f27f00000000, 0xfaf67e2e00000000, 0x6b67168000000000,
+ 0x99d3dea900000000, 0x0842b60700000000, 0x7dba4ffa00000000,
+ 0xec2b275400000000, 0x1e9fef7d00000000, 0x8f0e87d300000000,
+ 0xb5696d5d00000000, 0x24f805f300000000, 0xd64ccdda00000000,
+ 0x47dda57400000000, 0x32255c8900000000, 0xa3b4342700000000,
+ 0x5100fc0e00000000, 0xc09194a000000000, 0x64c859c800000000,
+ 0xf559316600000000, 0x07edf94f00000000, 0x967c91e100000000,
+ 0xe384681c00000000, 0x721500b200000000, 0x80a1c89b00000000,
+ 0x1130a03500000000, 0x2b574abb00000000, 0xbac6221500000000,
+ 0x4872ea3c00000000, 0xd9e3829200000000, 0xac1b7b6f00000000,
+ 0x3d8a13c100000000, 0xcf3edbe800000000, 0x5eafb34600000000,
+ 0x878d413900000000, 0x161c299700000000, 0xe4a8e1be00000000,
+ 0x7539891000000000, 0x00c170ed00000000, 0x9150184300000000,
+ 0x63e4d06a00000000, 0xf275b8c400000000, 0xc812524a00000000,
+ 0x59833ae400000000, 0xab37f2cd00000000, 0x3aa69a6300000000,
+ 0x4f5e639e00000000, 0xdecf0b3000000000, 0x2c7bc31900000000,
+ 0xbdeaabb700000000, 0x19b366df00000000, 0x88220e7100000000,
+ 0x7a96c65800000000, 0xeb07aef600000000, 0x9eff570b00000000,
+ 0x0f6e3fa500000000, 0xfddaf78c00000000, 0x6c4b9f2200000000,
+ 0x562c75ac00000000, 0xc7bd1d0200000000, 0x3509d52b00000000,
+ 0xa498bd8500000000, 0xd160447800000000, 0x40f12cd600000000,
+ 0xb245e4ff00000000, 0x23d48c5100000000, 0xf4edfd5c00000000,
+ 0x657c95f200000000, 0x97c85ddb00000000, 0x0659357500000000,
+ 0x73a1cc8800000000, 0xe230a42600000000, 0x10846c0f00000000,
+ 0x811504a100000000, 0xbb72ee2f00000000, 0x2ae3868100000000,
+ 0xd8574ea800000000, 0x49c6260600000000, 0x3c3edffb00000000,
+ 0xadafb75500000000, 0x5f1b7f7c00000000, 0xce8a17d200000000,
+ 0x6ad3daba00000000, 0xfb42b21400000000, 0x09f67a3d00000000,
+ 0x9867129300000000, 0xed9feb6e00000000, 0x7c0e83c000000000,
+ 0x8eba4be900000000, 0x1f2b234700000000, 0x254cc9c900000000,
+ 0xb4dda16700000000, 0x4669694e00000000, 0xd7f801e000000000,
+ 0xa200f81d00000000, 0x339190b300000000, 0xc125589a00000000,
+ 0x50b4303400000000, 0x8996c24b00000000, 0x1807aae500000000,
+ 0xeab362cc00000000, 0x7b220a6200000000, 0x0edaf39f00000000,
+ 0x9f4b9b3100000000, 0x6dff531800000000, 0xfc6e3bb600000000,
+ 0xc609d13800000000, 0x5798b99600000000, 0xa52c71bf00000000,
+ 0x34bd191100000000, 0x4145e0ec00000000, 0xd0d4884200000000,
+ 0x2260406b00000000, 0xb3f128c500000000, 0x17a8e5ad00000000,
+ 0x86398d0300000000, 0x748d452a00000000, 0xe51c2d8400000000,
+ 0x90e4d47900000000, 0x0175bcd700000000, 0xf3c174fe00000000,
+ 0x62501c5000000000, 0x5837f6de00000000, 0xc9a69e7000000000,
+ 0x3b12565900000000, 0xaa833ef700000000, 0xdf7bc70a00000000,
+ 0x4eeaafa400000000, 0xbc5e678d00000000, 0x2dcf0f2300000000,
+ 0x0e1b837200000000, 0x9f8aebdc00000000, 0x6d3e23f500000000,
+ 0xfcaf4b5b00000000, 0x8957b2a600000000, 0x18c6da0800000000,
+ 0xea72122100000000, 0x7be37a8f00000000, 0x4184900100000000,
+ 0xd015f8af00000000, 0x22a1308600000000, 0xb330582800000000,
+ 0xc6c8a1d500000000, 0x5759c97b00000000, 0xa5ed015200000000,
+ 0x347c69fc00000000, 0x9025a49400000000, 0x01b4cc3a00000000,
+ 0xf300041300000000, 0x62916cbd00000000, 0x1769954000000000,
+ 0x86f8fdee00000000, 0x744c35c700000000, 0xe5dd5d6900000000,
+ 0xdfbab7e700000000, 0x4e2bdf4900000000, 0xbc9f176000000000,
+ 0x2d0e7fce00000000, 0x58f6863300000000, 0xc967ee9d00000000,
+ 0x3bd326b400000000, 0xaa424e1a00000000, 0x7360bc6500000000,
+ 0xe2f1d4cb00000000, 0x10451ce200000000, 0x81d4744c00000000,
+ 0xf42c8db100000000, 0x65bde51f00000000, 0x97092d3600000000,
+ 0x0698459800000000, 0x3cffaf1600000000, 0xad6ec7b800000000,
+ 0x5fda0f9100000000, 0xce4b673f00000000, 0xbbb39ec200000000,
+ 0x2a22f66c00000000, 0xd8963e4500000000, 0x490756eb00000000,
+ 0xed5e9b8300000000, 0x7ccff32d00000000, 0x8e7b3b0400000000,
+ 0x1fea53aa00000000, 0x6a12aa5700000000, 0xfb83c2f900000000,
+ 0x09370ad000000000, 0x98a6627e00000000, 0xa2c188f000000000,
+ 0x3350e05e00000000, 0xc1e4287700000000, 0x507540d900000000,
+ 0x258db92400000000, 0xb41cd18a00000000, 0x46a819a300000000,
+ 0xd739710d00000000}};
+
+#else /* W == 4 */
+
+local const z_crc_t FAR crc_braid_table[][256] = {
+ {0x00000000, 0xccaa009e, 0x4225077d, 0x8e8f07e3, 0x844a0efa,
+ 0x48e00e64, 0xc66f0987, 0x0ac50919, 0xd3e51bb5, 0x1f4f1b2b,
+ 0x91c01cc8, 0x5d6a1c56, 0x57af154f, 0x9b0515d1, 0x158a1232,
+ 0xd92012ac, 0x7cbb312b, 0xb01131b5, 0x3e9e3656, 0xf23436c8,
+ 0xf8f13fd1, 0x345b3f4f, 0xbad438ac, 0x767e3832, 0xaf5e2a9e,
+ 0x63f42a00, 0xed7b2de3, 0x21d12d7d, 0x2b142464, 0xe7be24fa,
+ 0x69312319, 0xa59b2387, 0xf9766256, 0x35dc62c8, 0xbb53652b,
+ 0x77f965b5, 0x7d3c6cac, 0xb1966c32, 0x3f196bd1, 0xf3b36b4f,
+ 0x2a9379e3, 0xe639797d, 0x68b67e9e, 0xa41c7e00, 0xaed97719,
+ 0x62737787, 0xecfc7064, 0x205670fa, 0x85cd537d, 0x496753e3,
+ 0xc7e85400, 0x0b42549e, 0x01875d87, 0xcd2d5d19, 0x43a25afa,
+ 0x8f085a64, 0x562848c8, 0x9a824856, 0x140d4fb5, 0xd8a74f2b,
+ 0xd2624632, 0x1ec846ac, 0x9047414f, 0x5ced41d1, 0x299dc2ed,
+ 0xe537c273, 0x6bb8c590, 0xa712c50e, 0xadd7cc17, 0x617dcc89,
+ 0xeff2cb6a, 0x2358cbf4, 0xfa78d958, 0x36d2d9c6, 0xb85dde25,
+ 0x74f7debb, 0x7e32d7a2, 0xb298d73c, 0x3c17d0df, 0xf0bdd041,
+ 0x5526f3c6, 0x998cf358, 0x1703f4bb, 0xdba9f425, 0xd16cfd3c,
+ 0x1dc6fda2, 0x9349fa41, 0x5fe3fadf, 0x86c3e873, 0x4a69e8ed,
+ 0xc4e6ef0e, 0x084cef90, 0x0289e689, 0xce23e617, 0x40ace1f4,
+ 0x8c06e16a, 0xd0eba0bb, 0x1c41a025, 0x92cea7c6, 0x5e64a758,
+ 0x54a1ae41, 0x980baedf, 0x1684a93c, 0xda2ea9a2, 0x030ebb0e,
+ 0xcfa4bb90, 0x412bbc73, 0x8d81bced, 0x8744b5f4, 0x4beeb56a,
+ 0xc561b289, 0x09cbb217, 0xac509190, 0x60fa910e, 0xee7596ed,
+ 0x22df9673, 0x281a9f6a, 0xe4b09ff4, 0x6a3f9817, 0xa6959889,
+ 0x7fb58a25, 0xb31f8abb, 0x3d908d58, 0xf13a8dc6, 0xfbff84df,
+ 0x37558441, 0xb9da83a2, 0x7570833c, 0x533b85da, 0x9f918544,
+ 0x111e82a7, 0xddb48239, 0xd7718b20, 0x1bdb8bbe, 0x95548c5d,
+ 0x59fe8cc3, 0x80de9e6f, 0x4c749ef1, 0xc2fb9912, 0x0e51998c,
+ 0x04949095, 0xc83e900b, 0x46b197e8, 0x8a1b9776, 0x2f80b4f1,
+ 0xe32ab46f, 0x6da5b38c, 0xa10fb312, 0xabcaba0b, 0x6760ba95,
+ 0xe9efbd76, 0x2545bde8, 0xfc65af44, 0x30cfafda, 0xbe40a839,
+ 0x72eaa8a7, 0x782fa1be, 0xb485a120, 0x3a0aa6c3, 0xf6a0a65d,
+ 0xaa4de78c, 0x66e7e712, 0xe868e0f1, 0x24c2e06f, 0x2e07e976,
+ 0xe2ade9e8, 0x6c22ee0b, 0xa088ee95, 0x79a8fc39, 0xb502fca7,
+ 0x3b8dfb44, 0xf727fbda, 0xfde2f2c3, 0x3148f25d, 0xbfc7f5be,
+ 0x736df520, 0xd6f6d6a7, 0x1a5cd639, 0x94d3d1da, 0x5879d144,
+ 0x52bcd85d, 0x9e16d8c3, 0x1099df20, 0xdc33dfbe, 0x0513cd12,
+ 0xc9b9cd8c, 0x4736ca6f, 0x8b9ccaf1, 0x8159c3e8, 0x4df3c376,
+ 0xc37cc495, 0x0fd6c40b, 0x7aa64737, 0xb60c47a9, 0x3883404a,
+ 0xf42940d4, 0xfeec49cd, 0x32464953, 0xbcc94eb0, 0x70634e2e,
+ 0xa9435c82, 0x65e95c1c, 0xeb665bff, 0x27cc5b61, 0x2d095278,
+ 0xe1a352e6, 0x6f2c5505, 0xa386559b, 0x061d761c, 0xcab77682,
+ 0x44387161, 0x889271ff, 0x825778e6, 0x4efd7878, 0xc0727f9b,
+ 0x0cd87f05, 0xd5f86da9, 0x19526d37, 0x97dd6ad4, 0x5b776a4a,
+ 0x51b26353, 0x9d1863cd, 0x1397642e, 0xdf3d64b0, 0x83d02561,
+ 0x4f7a25ff, 0xc1f5221c, 0x0d5f2282, 0x079a2b9b, 0xcb302b05,
+ 0x45bf2ce6, 0x89152c78, 0x50353ed4, 0x9c9f3e4a, 0x121039a9,
+ 0xdeba3937, 0xd47f302e, 0x18d530b0, 0x965a3753, 0x5af037cd,
+ 0xff6b144a, 0x33c114d4, 0xbd4e1337, 0x71e413a9, 0x7b211ab0,
+ 0xb78b1a2e, 0x39041dcd, 0xf5ae1d53, 0x2c8e0fff, 0xe0240f61,
+ 0x6eab0882, 0xa201081c, 0xa8c40105, 0x646e019b, 0xeae10678,
+ 0x264b06e6},
+ {0x00000000, 0xa6770bb4, 0x979f1129, 0x31e81a9d, 0xf44f2413,
+ 0x52382fa7, 0x63d0353a, 0xc5a73e8e, 0x33ef4e67, 0x959845d3,
+ 0xa4705f4e, 0x020754fa, 0xc7a06a74, 0x61d761c0, 0x503f7b5d,
+ 0xf64870e9, 0x67de9cce, 0xc1a9977a, 0xf0418de7, 0x56368653,
+ 0x9391b8dd, 0x35e6b369, 0x040ea9f4, 0xa279a240, 0x5431d2a9,
+ 0xf246d91d, 0xc3aec380, 0x65d9c834, 0xa07ef6ba, 0x0609fd0e,
+ 0x37e1e793, 0x9196ec27, 0xcfbd399c, 0x69ca3228, 0x582228b5,
+ 0xfe552301, 0x3bf21d8f, 0x9d85163b, 0xac6d0ca6, 0x0a1a0712,
+ 0xfc5277fb, 0x5a257c4f, 0x6bcd66d2, 0xcdba6d66, 0x081d53e8,
+ 0xae6a585c, 0x9f8242c1, 0x39f54975, 0xa863a552, 0x0e14aee6,
+ 0x3ffcb47b, 0x998bbfcf, 0x5c2c8141, 0xfa5b8af5, 0xcbb39068,
+ 0x6dc49bdc, 0x9b8ceb35, 0x3dfbe081, 0x0c13fa1c, 0xaa64f1a8,
+ 0x6fc3cf26, 0xc9b4c492, 0xf85cde0f, 0x5e2bd5bb, 0x440b7579,
+ 0xe27c7ecd, 0xd3946450, 0x75e36fe4, 0xb044516a, 0x16335ade,
+ 0x27db4043, 0x81ac4bf7, 0x77e43b1e, 0xd19330aa, 0xe07b2a37,
+ 0x460c2183, 0x83ab1f0d, 0x25dc14b9, 0x14340e24, 0xb2430590,
+ 0x23d5e9b7, 0x85a2e203, 0xb44af89e, 0x123df32a, 0xd79acda4,
+ 0x71edc610, 0x4005dc8d, 0xe672d739, 0x103aa7d0, 0xb64dac64,
+ 0x87a5b6f9, 0x21d2bd4d, 0xe47583c3, 0x42028877, 0x73ea92ea,
+ 0xd59d995e, 0x8bb64ce5, 0x2dc14751, 0x1c295dcc, 0xba5e5678,
+ 0x7ff968f6, 0xd98e6342, 0xe86679df, 0x4e11726b, 0xb8590282,
+ 0x1e2e0936, 0x2fc613ab, 0x89b1181f, 0x4c162691, 0xea612d25,
+ 0xdb8937b8, 0x7dfe3c0c, 0xec68d02b, 0x4a1fdb9f, 0x7bf7c102,
+ 0xdd80cab6, 0x1827f438, 0xbe50ff8c, 0x8fb8e511, 0x29cfeea5,
+ 0xdf879e4c, 0x79f095f8, 0x48188f65, 0xee6f84d1, 0x2bc8ba5f,
+ 0x8dbfb1eb, 0xbc57ab76, 0x1a20a0c2, 0x8816eaf2, 0x2e61e146,
+ 0x1f89fbdb, 0xb9fef06f, 0x7c59cee1, 0xda2ec555, 0xebc6dfc8,
+ 0x4db1d47c, 0xbbf9a495, 0x1d8eaf21, 0x2c66b5bc, 0x8a11be08,
+ 0x4fb68086, 0xe9c18b32, 0xd82991af, 0x7e5e9a1b, 0xefc8763c,
+ 0x49bf7d88, 0x78576715, 0xde206ca1, 0x1b87522f, 0xbdf0599b,
+ 0x8c184306, 0x2a6f48b2, 0xdc27385b, 0x7a5033ef, 0x4bb82972,
+ 0xedcf22c6, 0x28681c48, 0x8e1f17fc, 0xbff70d61, 0x198006d5,
+ 0x47abd36e, 0xe1dcd8da, 0xd034c247, 0x7643c9f3, 0xb3e4f77d,
+ 0x1593fcc9, 0x247be654, 0x820cede0, 0x74449d09, 0xd23396bd,
+ 0xe3db8c20, 0x45ac8794, 0x800bb91a, 0x267cb2ae, 0x1794a833,
+ 0xb1e3a387, 0x20754fa0, 0x86024414, 0xb7ea5e89, 0x119d553d,
+ 0xd43a6bb3, 0x724d6007, 0x43a57a9a, 0xe5d2712e, 0x139a01c7,
+ 0xb5ed0a73, 0x840510ee, 0x22721b5a, 0xe7d525d4, 0x41a22e60,
+ 0x704a34fd, 0xd63d3f49, 0xcc1d9f8b, 0x6a6a943f, 0x5b828ea2,
+ 0xfdf58516, 0x3852bb98, 0x9e25b02c, 0xafcdaab1, 0x09baa105,
+ 0xfff2d1ec, 0x5985da58, 0x686dc0c5, 0xce1acb71, 0x0bbdf5ff,
+ 0xadcafe4b, 0x9c22e4d6, 0x3a55ef62, 0xabc30345, 0x0db408f1,
+ 0x3c5c126c, 0x9a2b19d8, 0x5f8c2756, 0xf9fb2ce2, 0xc813367f,
+ 0x6e643dcb, 0x982c4d22, 0x3e5b4696, 0x0fb35c0b, 0xa9c457bf,
+ 0x6c636931, 0xca146285, 0xfbfc7818, 0x5d8b73ac, 0x03a0a617,
+ 0xa5d7ada3, 0x943fb73e, 0x3248bc8a, 0xf7ef8204, 0x519889b0,
+ 0x6070932d, 0xc6079899, 0x304fe870, 0x9638e3c4, 0xa7d0f959,
+ 0x01a7f2ed, 0xc400cc63, 0x6277c7d7, 0x539fdd4a, 0xf5e8d6fe,
+ 0x647e3ad9, 0xc209316d, 0xf3e12bf0, 0x55962044, 0x90311eca,
+ 0x3646157e, 0x07ae0fe3, 0xa1d90457, 0x579174be, 0xf1e67f0a,
+ 0xc00e6597, 0x66796e23, 0xa3de50ad, 0x05a95b19, 0x34414184,
+ 0x92364a30},
+ {0x00000000, 0xcb5cd3a5, 0x4dc8a10b, 0x869472ae, 0x9b914216,
+ 0x50cd91b3, 0xd659e31d, 0x1d0530b8, 0xec53826d, 0x270f51c8,
+ 0xa19b2366, 0x6ac7f0c3, 0x77c2c07b, 0xbc9e13de, 0x3a0a6170,
+ 0xf156b2d5, 0x03d6029b, 0xc88ad13e, 0x4e1ea390, 0x85427035,
+ 0x9847408d, 0x531b9328, 0xd58fe186, 0x1ed33223, 0xef8580f6,
+ 0x24d95353, 0xa24d21fd, 0x6911f258, 0x7414c2e0, 0xbf481145,
+ 0x39dc63eb, 0xf280b04e, 0x07ac0536, 0xccf0d693, 0x4a64a43d,
+ 0x81387798, 0x9c3d4720, 0x57619485, 0xd1f5e62b, 0x1aa9358e,
+ 0xebff875b, 0x20a354fe, 0xa6372650, 0x6d6bf5f5, 0x706ec54d,
+ 0xbb3216e8, 0x3da66446, 0xf6fab7e3, 0x047a07ad, 0xcf26d408,
+ 0x49b2a6a6, 0x82ee7503, 0x9feb45bb, 0x54b7961e, 0xd223e4b0,
+ 0x197f3715, 0xe82985c0, 0x23755665, 0xa5e124cb, 0x6ebdf76e,
+ 0x73b8c7d6, 0xb8e41473, 0x3e7066dd, 0xf52cb578, 0x0f580a6c,
+ 0xc404d9c9, 0x4290ab67, 0x89cc78c2, 0x94c9487a, 0x5f959bdf,
+ 0xd901e971, 0x125d3ad4, 0xe30b8801, 0x28575ba4, 0xaec3290a,
+ 0x659ffaaf, 0x789aca17, 0xb3c619b2, 0x35526b1c, 0xfe0eb8b9,
+ 0x0c8e08f7, 0xc7d2db52, 0x4146a9fc, 0x8a1a7a59, 0x971f4ae1,
+ 0x5c439944, 0xdad7ebea, 0x118b384f, 0xe0dd8a9a, 0x2b81593f,
+ 0xad152b91, 0x6649f834, 0x7b4cc88c, 0xb0101b29, 0x36846987,
+ 0xfdd8ba22, 0x08f40f5a, 0xc3a8dcff, 0x453cae51, 0x8e607df4,
+ 0x93654d4c, 0x58399ee9, 0xdeadec47, 0x15f13fe2, 0xe4a78d37,
+ 0x2ffb5e92, 0xa96f2c3c, 0x6233ff99, 0x7f36cf21, 0xb46a1c84,
+ 0x32fe6e2a, 0xf9a2bd8f, 0x0b220dc1, 0xc07ede64, 0x46eaacca,
+ 0x8db67f6f, 0x90b34fd7, 0x5bef9c72, 0xdd7beedc, 0x16273d79,
+ 0xe7718fac, 0x2c2d5c09, 0xaab92ea7, 0x61e5fd02, 0x7ce0cdba,
+ 0xb7bc1e1f, 0x31286cb1, 0xfa74bf14, 0x1eb014d8, 0xd5ecc77d,
+ 0x5378b5d3, 0x98246676, 0x852156ce, 0x4e7d856b, 0xc8e9f7c5,
+ 0x03b52460, 0xf2e396b5, 0x39bf4510, 0xbf2b37be, 0x7477e41b,
+ 0x6972d4a3, 0xa22e0706, 0x24ba75a8, 0xefe6a60d, 0x1d661643,
+ 0xd63ac5e6, 0x50aeb748, 0x9bf264ed, 0x86f75455, 0x4dab87f0,
+ 0xcb3ff55e, 0x006326fb, 0xf135942e, 0x3a69478b, 0xbcfd3525,
+ 0x77a1e680, 0x6aa4d638, 0xa1f8059d, 0x276c7733, 0xec30a496,
+ 0x191c11ee, 0xd240c24b, 0x54d4b0e5, 0x9f886340, 0x828d53f8,
+ 0x49d1805d, 0xcf45f2f3, 0x04192156, 0xf54f9383, 0x3e134026,
+ 0xb8873288, 0x73dbe12d, 0x6eded195, 0xa5820230, 0x2316709e,
+ 0xe84aa33b, 0x1aca1375, 0xd196c0d0, 0x5702b27e, 0x9c5e61db,
+ 0x815b5163, 0x4a0782c6, 0xcc93f068, 0x07cf23cd, 0xf6999118,
+ 0x3dc542bd, 0xbb513013, 0x700de3b6, 0x6d08d30e, 0xa65400ab,
+ 0x20c07205, 0xeb9ca1a0, 0x11e81eb4, 0xdab4cd11, 0x5c20bfbf,
+ 0x977c6c1a, 0x8a795ca2, 0x41258f07, 0xc7b1fda9, 0x0ced2e0c,
+ 0xfdbb9cd9, 0x36e74f7c, 0xb0733dd2, 0x7b2fee77, 0x662adecf,
+ 0xad760d6a, 0x2be27fc4, 0xe0beac61, 0x123e1c2f, 0xd962cf8a,
+ 0x5ff6bd24, 0x94aa6e81, 0x89af5e39, 0x42f38d9c, 0xc467ff32,
+ 0x0f3b2c97, 0xfe6d9e42, 0x35314de7, 0xb3a53f49, 0x78f9ecec,
+ 0x65fcdc54, 0xaea00ff1, 0x28347d5f, 0xe368aefa, 0x16441b82,
+ 0xdd18c827, 0x5b8cba89, 0x90d0692c, 0x8dd55994, 0x46898a31,
+ 0xc01df89f, 0x0b412b3a, 0xfa1799ef, 0x314b4a4a, 0xb7df38e4,
+ 0x7c83eb41, 0x6186dbf9, 0xaada085c, 0x2c4e7af2, 0xe712a957,
+ 0x15921919, 0xdececabc, 0x585ab812, 0x93066bb7, 0x8e035b0f,
+ 0x455f88aa, 0xc3cbfa04, 0x089729a1, 0xf9c19b74, 0x329d48d1,
+ 0xb4093a7f, 0x7f55e9da, 0x6250d962, 0xa90c0ac7, 0x2f987869,
+ 0xe4c4abcc},
+ {0x00000000, 0x3d6029b0, 0x7ac05360, 0x47a07ad0, 0xf580a6c0,
+ 0xc8e08f70, 0x8f40f5a0, 0xb220dc10, 0x30704bc1, 0x0d106271,
+ 0x4ab018a1, 0x77d03111, 0xc5f0ed01, 0xf890c4b1, 0xbf30be61,
+ 0x825097d1, 0x60e09782, 0x5d80be32, 0x1a20c4e2, 0x2740ed52,
+ 0x95603142, 0xa80018f2, 0xefa06222, 0xd2c04b92, 0x5090dc43,
+ 0x6df0f5f3, 0x2a508f23, 0x1730a693, 0xa5107a83, 0x98705333,
+ 0xdfd029e3, 0xe2b00053, 0xc1c12f04, 0xfca106b4, 0xbb017c64,
+ 0x866155d4, 0x344189c4, 0x0921a074, 0x4e81daa4, 0x73e1f314,
+ 0xf1b164c5, 0xccd14d75, 0x8b7137a5, 0xb6111e15, 0x0431c205,
+ 0x3951ebb5, 0x7ef19165, 0x4391b8d5, 0xa121b886, 0x9c419136,
+ 0xdbe1ebe6, 0xe681c256, 0x54a11e46, 0x69c137f6, 0x2e614d26,
+ 0x13016496, 0x9151f347, 0xac31daf7, 0xeb91a027, 0xd6f18997,
+ 0x64d15587, 0x59b17c37, 0x1e1106e7, 0x23712f57, 0x58f35849,
+ 0x659371f9, 0x22330b29, 0x1f532299, 0xad73fe89, 0x9013d739,
+ 0xd7b3ade9, 0xead38459, 0x68831388, 0x55e33a38, 0x124340e8,
+ 0x2f236958, 0x9d03b548, 0xa0639cf8, 0xe7c3e628, 0xdaa3cf98,
+ 0x3813cfcb, 0x0573e67b, 0x42d39cab, 0x7fb3b51b, 0xcd93690b,
+ 0xf0f340bb, 0xb7533a6b, 0x8a3313db, 0x0863840a, 0x3503adba,
+ 0x72a3d76a, 0x4fc3feda, 0xfde322ca, 0xc0830b7a, 0x872371aa,
+ 0xba43581a, 0x9932774d, 0xa4525efd, 0xe3f2242d, 0xde920d9d,
+ 0x6cb2d18d, 0x51d2f83d, 0x167282ed, 0x2b12ab5d, 0xa9423c8c,
+ 0x9422153c, 0xd3826fec, 0xeee2465c, 0x5cc29a4c, 0x61a2b3fc,
+ 0x2602c92c, 0x1b62e09c, 0xf9d2e0cf, 0xc4b2c97f, 0x8312b3af,
+ 0xbe729a1f, 0x0c52460f, 0x31326fbf, 0x7692156f, 0x4bf23cdf,
+ 0xc9a2ab0e, 0xf4c282be, 0xb362f86e, 0x8e02d1de, 0x3c220dce,
+ 0x0142247e, 0x46e25eae, 0x7b82771e, 0xb1e6b092, 0x8c869922,
+ 0xcb26e3f2, 0xf646ca42, 0x44661652, 0x79063fe2, 0x3ea64532,
+ 0x03c66c82, 0x8196fb53, 0xbcf6d2e3, 0xfb56a833, 0xc6368183,
+ 0x74165d93, 0x49767423, 0x0ed60ef3, 0x33b62743, 0xd1062710,
+ 0xec660ea0, 0xabc67470, 0x96a65dc0, 0x248681d0, 0x19e6a860,
+ 0x5e46d2b0, 0x6326fb00, 0xe1766cd1, 0xdc164561, 0x9bb63fb1,
+ 0xa6d61601, 0x14f6ca11, 0x2996e3a1, 0x6e369971, 0x5356b0c1,
+ 0x70279f96, 0x4d47b626, 0x0ae7ccf6, 0x3787e546, 0x85a73956,
+ 0xb8c710e6, 0xff676a36, 0xc2074386, 0x4057d457, 0x7d37fde7,
+ 0x3a978737, 0x07f7ae87, 0xb5d77297, 0x88b75b27, 0xcf1721f7,
+ 0xf2770847, 0x10c70814, 0x2da721a4, 0x6a075b74, 0x576772c4,
+ 0xe547aed4, 0xd8278764, 0x9f87fdb4, 0xa2e7d404, 0x20b743d5,
+ 0x1dd76a65, 0x5a7710b5, 0x67173905, 0xd537e515, 0xe857cca5,
+ 0xaff7b675, 0x92979fc5, 0xe915e8db, 0xd475c16b, 0x93d5bbbb,
+ 0xaeb5920b, 0x1c954e1b, 0x21f567ab, 0x66551d7b, 0x5b3534cb,
+ 0xd965a31a, 0xe4058aaa, 0xa3a5f07a, 0x9ec5d9ca, 0x2ce505da,
+ 0x11852c6a, 0x562556ba, 0x6b457f0a, 0x89f57f59, 0xb49556e9,
+ 0xf3352c39, 0xce550589, 0x7c75d999, 0x4115f029, 0x06b58af9,
+ 0x3bd5a349, 0xb9853498, 0x84e51d28, 0xc34567f8, 0xfe254e48,
+ 0x4c059258, 0x7165bbe8, 0x36c5c138, 0x0ba5e888, 0x28d4c7df,
+ 0x15b4ee6f, 0x521494bf, 0x6f74bd0f, 0xdd54611f, 0xe03448af,
+ 0xa794327f, 0x9af41bcf, 0x18a48c1e, 0x25c4a5ae, 0x6264df7e,
+ 0x5f04f6ce, 0xed242ade, 0xd044036e, 0x97e479be, 0xaa84500e,
+ 0x4834505d, 0x755479ed, 0x32f4033d, 0x0f942a8d, 0xbdb4f69d,
+ 0x80d4df2d, 0xc774a5fd, 0xfa148c4d, 0x78441b9c, 0x4524322c,
+ 0x028448fc, 0x3fe4614c, 0x8dc4bd5c, 0xb0a494ec, 0xf704ee3c,
+ 0xca64c78c}};
+
+local const z_word_t FAR crc_braid_big_table[][256] = {
+ {0x00000000, 0xb029603d, 0x6053c07a, 0xd07aa047, 0xc0a680f5,
+ 0x708fe0c8, 0xa0f5408f, 0x10dc20b2, 0xc14b7030, 0x7162100d,
+ 0xa118b04a, 0x1131d077, 0x01edf0c5, 0xb1c490f8, 0x61be30bf,
+ 0xd1975082, 0x8297e060, 0x32be805d, 0xe2c4201a, 0x52ed4027,
+ 0x42316095, 0xf21800a8, 0x2262a0ef, 0x924bc0d2, 0x43dc9050,
+ 0xf3f5f06d, 0x238f502a, 0x93a63017, 0x837a10a5, 0x33537098,
+ 0xe329d0df, 0x5300b0e2, 0x042fc1c1, 0xb406a1fc, 0x647c01bb,
+ 0xd4556186, 0xc4894134, 0x74a02109, 0xa4da814e, 0x14f3e173,
+ 0xc564b1f1, 0x754dd1cc, 0xa537718b, 0x151e11b6, 0x05c23104,
+ 0xb5eb5139, 0x6591f17e, 0xd5b89143, 0x86b821a1, 0x3691419c,
+ 0xe6ebe1db, 0x56c281e6, 0x461ea154, 0xf637c169, 0x264d612e,
+ 0x96640113, 0x47f35191, 0xf7da31ac, 0x27a091eb, 0x9789f1d6,
+ 0x8755d164, 0x377cb159, 0xe706111e, 0x572f7123, 0x4958f358,
+ 0xf9719365, 0x290b3322, 0x9922531f, 0x89fe73ad, 0x39d71390,
+ 0xe9adb3d7, 0x5984d3ea, 0x88138368, 0x383ae355, 0xe8404312,
+ 0x5869232f, 0x48b5039d, 0xf89c63a0, 0x28e6c3e7, 0x98cfa3da,
+ 0xcbcf1338, 0x7be67305, 0xab9cd342, 0x1bb5b37f, 0x0b6993cd,
+ 0xbb40f3f0, 0x6b3a53b7, 0xdb13338a, 0x0a846308, 0xbaad0335,
+ 0x6ad7a372, 0xdafec34f, 0xca22e3fd, 0x7a0b83c0, 0xaa712387,
+ 0x1a5843ba, 0x4d773299, 0xfd5e52a4, 0x2d24f2e3, 0x9d0d92de,
+ 0x8dd1b26c, 0x3df8d251, 0xed827216, 0x5dab122b, 0x8c3c42a9,
+ 0x3c152294, 0xec6f82d3, 0x5c46e2ee, 0x4c9ac25c, 0xfcb3a261,
+ 0x2cc90226, 0x9ce0621b, 0xcfe0d2f9, 0x7fc9b2c4, 0xafb31283,
+ 0x1f9a72be, 0x0f46520c, 0xbf6f3231, 0x6f159276, 0xdf3cf24b,
+ 0x0eaba2c9, 0xbe82c2f4, 0x6ef862b3, 0xded1028e, 0xce0d223c,
+ 0x7e244201, 0xae5ee246, 0x1e77827b, 0x92b0e6b1, 0x2299868c,
+ 0xf2e326cb, 0x42ca46f6, 0x52166644, 0xe23f0679, 0x3245a63e,
+ 0x826cc603, 0x53fb9681, 0xe3d2f6bc, 0x33a856fb, 0x838136c6,
+ 0x935d1674, 0x23747649, 0xf30ed60e, 0x4327b633, 0x102706d1,
+ 0xa00e66ec, 0x7074c6ab, 0xc05da696, 0xd0818624, 0x60a8e619,
+ 0xb0d2465e, 0x00fb2663, 0xd16c76e1, 0x614516dc, 0xb13fb69b,
+ 0x0116d6a6, 0x11caf614, 0xa1e39629, 0x7199366e, 0xc1b05653,
+ 0x969f2770, 0x26b6474d, 0xf6cce70a, 0x46e58737, 0x5639a785,
+ 0xe610c7b8, 0x366a67ff, 0x864307c2, 0x57d45740, 0xe7fd377d,
+ 0x3787973a, 0x87aef707, 0x9772d7b5, 0x275bb788, 0xf72117cf,
+ 0x470877f2, 0x1408c710, 0xa421a72d, 0x745b076a, 0xc4726757,
+ 0xd4ae47e5, 0x648727d8, 0xb4fd879f, 0x04d4e7a2, 0xd543b720,
+ 0x656ad71d, 0xb510775a, 0x05391767, 0x15e537d5, 0xa5cc57e8,
+ 0x75b6f7af, 0xc59f9792, 0xdbe815e9, 0x6bc175d4, 0xbbbbd593,
+ 0x0b92b5ae, 0x1b4e951c, 0xab67f521, 0x7b1d5566, 0xcb34355b,
+ 0x1aa365d9, 0xaa8a05e4, 0x7af0a5a3, 0xcad9c59e, 0xda05e52c,
+ 0x6a2c8511, 0xba562556, 0x0a7f456b, 0x597ff589, 0xe95695b4,
+ 0x392c35f3, 0x890555ce, 0x99d9757c, 0x29f01541, 0xf98ab506,
+ 0x49a3d53b, 0x983485b9, 0x281de584, 0xf86745c3, 0x484e25fe,
+ 0x5892054c, 0xe8bb6571, 0x38c1c536, 0x88e8a50b, 0xdfc7d428,
+ 0x6feeb415, 0xbf941452, 0x0fbd746f, 0x1f6154dd, 0xaf4834e0,
+ 0x7f3294a7, 0xcf1bf49a, 0x1e8ca418, 0xaea5c425, 0x7edf6462,
+ 0xcef6045f, 0xde2a24ed, 0x6e0344d0, 0xbe79e497, 0x0e5084aa,
+ 0x5d503448, 0xed795475, 0x3d03f432, 0x8d2a940f, 0x9df6b4bd,
+ 0x2ddfd480, 0xfda574c7, 0x4d8c14fa, 0x9c1b4478, 0x2c322445,
+ 0xfc488402, 0x4c61e43f, 0x5cbdc48d, 0xec94a4b0, 0x3cee04f7,
+ 0x8cc764ca},
+ {0x00000000, 0xa5d35ccb, 0x0ba1c84d, 0xae729486, 0x1642919b,
+ 0xb391cd50, 0x1de359d6, 0xb830051d, 0x6d8253ec, 0xc8510f27,
+ 0x66239ba1, 0xc3f0c76a, 0x7bc0c277, 0xde139ebc, 0x70610a3a,
+ 0xd5b256f1, 0x9b02d603, 0x3ed18ac8, 0x90a31e4e, 0x35704285,
+ 0x8d404798, 0x28931b53, 0x86e18fd5, 0x2332d31e, 0xf68085ef,
+ 0x5353d924, 0xfd214da2, 0x58f21169, 0xe0c21474, 0x451148bf,
+ 0xeb63dc39, 0x4eb080f2, 0x3605ac07, 0x93d6f0cc, 0x3da4644a,
+ 0x98773881, 0x20473d9c, 0x85946157, 0x2be6f5d1, 0x8e35a91a,
+ 0x5b87ffeb, 0xfe54a320, 0x502637a6, 0xf5f56b6d, 0x4dc56e70,
+ 0xe81632bb, 0x4664a63d, 0xe3b7faf6, 0xad077a04, 0x08d426cf,
+ 0xa6a6b249, 0x0375ee82, 0xbb45eb9f, 0x1e96b754, 0xb0e423d2,
+ 0x15377f19, 0xc08529e8, 0x65567523, 0xcb24e1a5, 0x6ef7bd6e,
+ 0xd6c7b873, 0x7314e4b8, 0xdd66703e, 0x78b52cf5, 0x6c0a580f,
+ 0xc9d904c4, 0x67ab9042, 0xc278cc89, 0x7a48c994, 0xdf9b955f,
+ 0x71e901d9, 0xd43a5d12, 0x01880be3, 0xa45b5728, 0x0a29c3ae,
+ 0xaffa9f65, 0x17ca9a78, 0xb219c6b3, 0x1c6b5235, 0xb9b80efe,
+ 0xf7088e0c, 0x52dbd2c7, 0xfca94641, 0x597a1a8a, 0xe14a1f97,
+ 0x4499435c, 0xeaebd7da, 0x4f388b11, 0x9a8adde0, 0x3f59812b,
+ 0x912b15ad, 0x34f84966, 0x8cc84c7b, 0x291b10b0, 0x87698436,
+ 0x22bad8fd, 0x5a0ff408, 0xffdca8c3, 0x51ae3c45, 0xf47d608e,
+ 0x4c4d6593, 0xe99e3958, 0x47ecadde, 0xe23ff115, 0x378da7e4,
+ 0x925efb2f, 0x3c2c6fa9, 0x99ff3362, 0x21cf367f, 0x841c6ab4,
+ 0x2a6efe32, 0x8fbda2f9, 0xc10d220b, 0x64de7ec0, 0xcaacea46,
+ 0x6f7fb68d, 0xd74fb390, 0x729cef5b, 0xdcee7bdd, 0x793d2716,
+ 0xac8f71e7, 0x095c2d2c, 0xa72eb9aa, 0x02fde561, 0xbacde07c,
+ 0x1f1ebcb7, 0xb16c2831, 0x14bf74fa, 0xd814b01e, 0x7dc7ecd5,
+ 0xd3b57853, 0x76662498, 0xce562185, 0x6b857d4e, 0xc5f7e9c8,
+ 0x6024b503, 0xb596e3f2, 0x1045bf39, 0xbe372bbf, 0x1be47774,
+ 0xa3d47269, 0x06072ea2, 0xa875ba24, 0x0da6e6ef, 0x4316661d,
+ 0xe6c53ad6, 0x48b7ae50, 0xed64f29b, 0x5554f786, 0xf087ab4d,
+ 0x5ef53fcb, 0xfb266300, 0x2e9435f1, 0x8b47693a, 0x2535fdbc,
+ 0x80e6a177, 0x38d6a46a, 0x9d05f8a1, 0x33776c27, 0x96a430ec,
+ 0xee111c19, 0x4bc240d2, 0xe5b0d454, 0x4063889f, 0xf8538d82,
+ 0x5d80d149, 0xf3f245cf, 0x56211904, 0x83934ff5, 0x2640133e,
+ 0x883287b8, 0x2de1db73, 0x95d1de6e, 0x300282a5, 0x9e701623,
+ 0x3ba34ae8, 0x7513ca1a, 0xd0c096d1, 0x7eb20257, 0xdb615e9c,
+ 0x63515b81, 0xc682074a, 0x68f093cc, 0xcd23cf07, 0x189199f6,
+ 0xbd42c53d, 0x133051bb, 0xb6e30d70, 0x0ed3086d, 0xab0054a6,
+ 0x0572c020, 0xa0a19ceb, 0xb41ee811, 0x11cdb4da, 0xbfbf205c,
+ 0x1a6c7c97, 0xa25c798a, 0x078f2541, 0xa9fdb1c7, 0x0c2eed0c,
+ 0xd99cbbfd, 0x7c4fe736, 0xd23d73b0, 0x77ee2f7b, 0xcfde2a66,
+ 0x6a0d76ad, 0xc47fe22b, 0x61acbee0, 0x2f1c3e12, 0x8acf62d9,
+ 0x24bdf65f, 0x816eaa94, 0x395eaf89, 0x9c8df342, 0x32ff67c4,
+ 0x972c3b0f, 0x429e6dfe, 0xe74d3135, 0x493fa5b3, 0xececf978,
+ 0x54dcfc65, 0xf10fa0ae, 0x5f7d3428, 0xfaae68e3, 0x821b4416,
+ 0x27c818dd, 0x89ba8c5b, 0x2c69d090, 0x9459d58d, 0x318a8946,
+ 0x9ff81dc0, 0x3a2b410b, 0xef9917fa, 0x4a4a4b31, 0xe438dfb7,
+ 0x41eb837c, 0xf9db8661, 0x5c08daaa, 0xf27a4e2c, 0x57a912e7,
+ 0x19199215, 0xbccacede, 0x12b85a58, 0xb76b0693, 0x0f5b038e,
+ 0xaa885f45, 0x04facbc3, 0xa1299708, 0x749bc1f9, 0xd1489d32,
+ 0x7f3a09b4, 0xdae9557f, 0x62d95062, 0xc70a0ca9, 0x6978982f,
+ 0xccabc4e4},
+ {0x00000000, 0xb40b77a6, 0x29119f97, 0x9d1ae831, 0x13244ff4,
+ 0xa72f3852, 0x3a35d063, 0x8e3ea7c5, 0x674eef33, 0xd3459895,
+ 0x4e5f70a4, 0xfa540702, 0x746aa0c7, 0xc061d761, 0x5d7b3f50,
+ 0xe97048f6, 0xce9cde67, 0x7a97a9c1, 0xe78d41f0, 0x53863656,
+ 0xddb89193, 0x69b3e635, 0xf4a90e04, 0x40a279a2, 0xa9d23154,
+ 0x1dd946f2, 0x80c3aec3, 0x34c8d965, 0xbaf67ea0, 0x0efd0906,
+ 0x93e7e137, 0x27ec9691, 0x9c39bdcf, 0x2832ca69, 0xb5282258,
+ 0x012355fe, 0x8f1df23b, 0x3b16859d, 0xa60c6dac, 0x12071a0a,
+ 0xfb7752fc, 0x4f7c255a, 0xd266cd6b, 0x666dbacd, 0xe8531d08,
+ 0x5c586aae, 0xc142829f, 0x7549f539, 0x52a563a8, 0xe6ae140e,
+ 0x7bb4fc3f, 0xcfbf8b99, 0x41812c5c, 0xf58a5bfa, 0x6890b3cb,
+ 0xdc9bc46d, 0x35eb8c9b, 0x81e0fb3d, 0x1cfa130c, 0xa8f164aa,
+ 0x26cfc36f, 0x92c4b4c9, 0x0fde5cf8, 0xbbd52b5e, 0x79750b44,
+ 0xcd7e7ce2, 0x506494d3, 0xe46fe375, 0x6a5144b0, 0xde5a3316,
+ 0x4340db27, 0xf74bac81, 0x1e3be477, 0xaa3093d1, 0x372a7be0,
+ 0x83210c46, 0x0d1fab83, 0xb914dc25, 0x240e3414, 0x900543b2,
+ 0xb7e9d523, 0x03e2a285, 0x9ef84ab4, 0x2af33d12, 0xa4cd9ad7,
+ 0x10c6ed71, 0x8ddc0540, 0x39d772e6, 0xd0a73a10, 0x64ac4db6,
+ 0xf9b6a587, 0x4dbdd221, 0xc38375e4, 0x77880242, 0xea92ea73,
+ 0x5e999dd5, 0xe54cb68b, 0x5147c12d, 0xcc5d291c, 0x78565eba,
+ 0xf668f97f, 0x42638ed9, 0xdf7966e8, 0x6b72114e, 0x820259b8,
+ 0x36092e1e, 0xab13c62f, 0x1f18b189, 0x9126164c, 0x252d61ea,
+ 0xb83789db, 0x0c3cfe7d, 0x2bd068ec, 0x9fdb1f4a, 0x02c1f77b,
+ 0xb6ca80dd, 0x38f42718, 0x8cff50be, 0x11e5b88f, 0xa5eecf29,
+ 0x4c9e87df, 0xf895f079, 0x658f1848, 0xd1846fee, 0x5fbac82b,
+ 0xebb1bf8d, 0x76ab57bc, 0xc2a0201a, 0xf2ea1688, 0x46e1612e,
+ 0xdbfb891f, 0x6ff0feb9, 0xe1ce597c, 0x55c52eda, 0xc8dfc6eb,
+ 0x7cd4b14d, 0x95a4f9bb, 0x21af8e1d, 0xbcb5662c, 0x08be118a,
+ 0x8680b64f, 0x328bc1e9, 0xaf9129d8, 0x1b9a5e7e, 0x3c76c8ef,
+ 0x887dbf49, 0x15675778, 0xa16c20de, 0x2f52871b, 0x9b59f0bd,
+ 0x0643188c, 0xb2486f2a, 0x5b3827dc, 0xef33507a, 0x7229b84b,
+ 0xc622cfed, 0x481c6828, 0xfc171f8e, 0x610df7bf, 0xd5068019,
+ 0x6ed3ab47, 0xdad8dce1, 0x47c234d0, 0xf3c94376, 0x7df7e4b3,
+ 0xc9fc9315, 0x54e67b24, 0xe0ed0c82, 0x099d4474, 0xbd9633d2,
+ 0x208cdbe3, 0x9487ac45, 0x1ab90b80, 0xaeb27c26, 0x33a89417,
+ 0x87a3e3b1, 0xa04f7520, 0x14440286, 0x895eeab7, 0x3d559d11,
+ 0xb36b3ad4, 0x07604d72, 0x9a7aa543, 0x2e71d2e5, 0xc7019a13,
+ 0x730aedb5, 0xee100584, 0x5a1b7222, 0xd425d5e7, 0x602ea241,
+ 0xfd344a70, 0x493f3dd6, 0x8b9f1dcc, 0x3f946a6a, 0xa28e825b,
+ 0x1685f5fd, 0x98bb5238, 0x2cb0259e, 0xb1aacdaf, 0x05a1ba09,
+ 0xecd1f2ff, 0x58da8559, 0xc5c06d68, 0x71cb1ace, 0xfff5bd0b,
+ 0x4bfecaad, 0xd6e4229c, 0x62ef553a, 0x4503c3ab, 0xf108b40d,
+ 0x6c125c3c, 0xd8192b9a, 0x56278c5f, 0xe22cfbf9, 0x7f3613c8,
+ 0xcb3d646e, 0x224d2c98, 0x96465b3e, 0x0b5cb30f, 0xbf57c4a9,
+ 0x3169636c, 0x856214ca, 0x1878fcfb, 0xac738b5d, 0x17a6a003,
+ 0xa3add7a5, 0x3eb73f94, 0x8abc4832, 0x0482eff7, 0xb0899851,
+ 0x2d937060, 0x999807c6, 0x70e84f30, 0xc4e33896, 0x59f9d0a7,
+ 0xedf2a701, 0x63cc00c4, 0xd7c77762, 0x4add9f53, 0xfed6e8f5,
+ 0xd93a7e64, 0x6d3109c2, 0xf02be1f3, 0x44209655, 0xca1e3190,
+ 0x7e154636, 0xe30fae07, 0x5704d9a1, 0xbe749157, 0x0a7fe6f1,
+ 0x97650ec0, 0x236e7966, 0xad50dea3, 0x195ba905, 0x84414134,
+ 0x304a3692},
+ {0x00000000, 0x9e00aacc, 0x7d072542, 0xe3078f8e, 0xfa0e4a84,
+ 0x640ee048, 0x87096fc6, 0x1909c50a, 0xb51be5d3, 0x2b1b4f1f,
+ 0xc81cc091, 0x561c6a5d, 0x4f15af57, 0xd115059b, 0x32128a15,
+ 0xac1220d9, 0x2b31bb7c, 0xb53111b0, 0x56369e3e, 0xc83634f2,
+ 0xd13ff1f8, 0x4f3f5b34, 0xac38d4ba, 0x32387e76, 0x9e2a5eaf,
+ 0x002af463, 0xe32d7bed, 0x7d2dd121, 0x6424142b, 0xfa24bee7,
+ 0x19233169, 0x87239ba5, 0x566276f9, 0xc862dc35, 0x2b6553bb,
+ 0xb565f977, 0xac6c3c7d, 0x326c96b1, 0xd16b193f, 0x4f6bb3f3,
+ 0xe379932a, 0x7d7939e6, 0x9e7eb668, 0x007e1ca4, 0x1977d9ae,
+ 0x87777362, 0x6470fcec, 0xfa705620, 0x7d53cd85, 0xe3536749,
+ 0x0054e8c7, 0x9e54420b, 0x875d8701, 0x195d2dcd, 0xfa5aa243,
+ 0x645a088f, 0xc8482856, 0x5648829a, 0xb54f0d14, 0x2b4fa7d8,
+ 0x324662d2, 0xac46c81e, 0x4f414790, 0xd141ed5c, 0xedc29d29,
+ 0x73c237e5, 0x90c5b86b, 0x0ec512a7, 0x17ccd7ad, 0x89cc7d61,
+ 0x6acbf2ef, 0xf4cb5823, 0x58d978fa, 0xc6d9d236, 0x25de5db8,
+ 0xbbdef774, 0xa2d7327e, 0x3cd798b2, 0xdfd0173c, 0x41d0bdf0,
+ 0xc6f32655, 0x58f38c99, 0xbbf40317, 0x25f4a9db, 0x3cfd6cd1,
+ 0xa2fdc61d, 0x41fa4993, 0xdffae35f, 0x73e8c386, 0xede8694a,
+ 0x0eefe6c4, 0x90ef4c08, 0x89e68902, 0x17e623ce, 0xf4e1ac40,
+ 0x6ae1068c, 0xbba0ebd0, 0x25a0411c, 0xc6a7ce92, 0x58a7645e,
+ 0x41aea154, 0xdfae0b98, 0x3ca98416, 0xa2a92eda, 0x0ebb0e03,
+ 0x90bba4cf, 0x73bc2b41, 0xedbc818d, 0xf4b54487, 0x6ab5ee4b,
+ 0x89b261c5, 0x17b2cb09, 0x909150ac, 0x0e91fa60, 0xed9675ee,
+ 0x7396df22, 0x6a9f1a28, 0xf49fb0e4, 0x17983f6a, 0x899895a6,
+ 0x258ab57f, 0xbb8a1fb3, 0x588d903d, 0xc68d3af1, 0xdf84fffb,
+ 0x41845537, 0xa283dab9, 0x3c837075, 0xda853b53, 0x4485919f,
+ 0xa7821e11, 0x3982b4dd, 0x208b71d7, 0xbe8bdb1b, 0x5d8c5495,
+ 0xc38cfe59, 0x6f9ede80, 0xf19e744c, 0x1299fbc2, 0x8c99510e,
+ 0x95909404, 0x0b903ec8, 0xe897b146, 0x76971b8a, 0xf1b4802f,
+ 0x6fb42ae3, 0x8cb3a56d, 0x12b30fa1, 0x0bbacaab, 0x95ba6067,
+ 0x76bdefe9, 0xe8bd4525, 0x44af65fc, 0xdaafcf30, 0x39a840be,
+ 0xa7a8ea72, 0xbea12f78, 0x20a185b4, 0xc3a60a3a, 0x5da6a0f6,
+ 0x8ce74daa, 0x12e7e766, 0xf1e068e8, 0x6fe0c224, 0x76e9072e,
+ 0xe8e9ade2, 0x0bee226c, 0x95ee88a0, 0x39fca879, 0xa7fc02b5,
+ 0x44fb8d3b, 0xdafb27f7, 0xc3f2e2fd, 0x5df24831, 0xbef5c7bf,
+ 0x20f56d73, 0xa7d6f6d6, 0x39d65c1a, 0xdad1d394, 0x44d17958,
+ 0x5dd8bc52, 0xc3d8169e, 0x20df9910, 0xbedf33dc, 0x12cd1305,
+ 0x8ccdb9c9, 0x6fca3647, 0xf1ca9c8b, 0xe8c35981, 0x76c3f34d,
+ 0x95c47cc3, 0x0bc4d60f, 0x3747a67a, 0xa9470cb6, 0x4a408338,
+ 0xd44029f4, 0xcd49ecfe, 0x53494632, 0xb04ec9bc, 0x2e4e6370,
+ 0x825c43a9, 0x1c5ce965, 0xff5b66eb, 0x615bcc27, 0x7852092d,
+ 0xe652a3e1, 0x05552c6f, 0x9b5586a3, 0x1c761d06, 0x8276b7ca,
+ 0x61713844, 0xff719288, 0xe6785782, 0x7878fd4e, 0x9b7f72c0,
+ 0x057fd80c, 0xa96df8d5, 0x376d5219, 0xd46add97, 0x4a6a775b,
+ 0x5363b251, 0xcd63189d, 0x2e649713, 0xb0643ddf, 0x6125d083,
+ 0xff257a4f, 0x1c22f5c1, 0x82225f0d, 0x9b2b9a07, 0x052b30cb,
+ 0xe62cbf45, 0x782c1589, 0xd43e3550, 0x4a3e9f9c, 0xa9391012,
+ 0x3739bade, 0x2e307fd4, 0xb030d518, 0x53375a96, 0xcd37f05a,
+ 0x4a146bff, 0xd414c133, 0x37134ebd, 0xa913e471, 0xb01a217b,
+ 0x2e1a8bb7, 0xcd1d0439, 0x531daef5, 0xff0f8e2c, 0x610f24e0,
+ 0x8208ab6e, 0x1c0801a2, 0x0501c4a8, 0x9b016e64, 0x7806e1ea,
+ 0xe6064b26}};
+
#endif
- }
-};
+
+#endif
+
+#if N == 3
+
+#if W == 8
+
+local const z_crc_t FAR crc_braid_table[][256] = {
+ {0x00000000, 0x81256527, 0xd93bcc0f, 0x581ea928, 0x69069e5f,
+ 0xe823fb78, 0xb03d5250, 0x31183777, 0xd20d3cbe, 0x53285999,
+ 0x0b36f0b1, 0x8a139596, 0xbb0ba2e1, 0x3a2ec7c6, 0x62306eee,
+ 0xe3150bc9, 0x7f6b7f3d, 0xfe4e1a1a, 0xa650b332, 0x2775d615,
+ 0x166de162, 0x97488445, 0xcf562d6d, 0x4e73484a, 0xad664383,
+ 0x2c4326a4, 0x745d8f8c, 0xf578eaab, 0xc460dddc, 0x4545b8fb,
+ 0x1d5b11d3, 0x9c7e74f4, 0xfed6fe7a, 0x7ff39b5d, 0x27ed3275,
+ 0xa6c85752, 0x97d06025, 0x16f50502, 0x4eebac2a, 0xcfcec90d,
+ 0x2cdbc2c4, 0xadfea7e3, 0xf5e00ecb, 0x74c56bec, 0x45dd5c9b,
+ 0xc4f839bc, 0x9ce69094, 0x1dc3f5b3, 0x81bd8147, 0x0098e460,
+ 0x58864d48, 0xd9a3286f, 0xe8bb1f18, 0x699e7a3f, 0x3180d317,
+ 0xb0a5b630, 0x53b0bdf9, 0xd295d8de, 0x8a8b71f6, 0x0bae14d1,
+ 0x3ab623a6, 0xbb934681, 0xe38defa9, 0x62a88a8e, 0x26dcfab5,
+ 0xa7f99f92, 0xffe736ba, 0x7ec2539d, 0x4fda64ea, 0xceff01cd,
+ 0x96e1a8e5, 0x17c4cdc2, 0xf4d1c60b, 0x75f4a32c, 0x2dea0a04,
+ 0xaccf6f23, 0x9dd75854, 0x1cf23d73, 0x44ec945b, 0xc5c9f17c,
+ 0x59b78588, 0xd892e0af, 0x808c4987, 0x01a92ca0, 0x30b11bd7,
+ 0xb1947ef0, 0xe98ad7d8, 0x68afb2ff, 0x8bbab936, 0x0a9fdc11,
+ 0x52817539, 0xd3a4101e, 0xe2bc2769, 0x6399424e, 0x3b87eb66,
+ 0xbaa28e41, 0xd80a04cf, 0x592f61e8, 0x0131c8c0, 0x8014ade7,
+ 0xb10c9a90, 0x3029ffb7, 0x6837569f, 0xe91233b8, 0x0a073871,
+ 0x8b225d56, 0xd33cf47e, 0x52199159, 0x6301a62e, 0xe224c309,
+ 0xba3a6a21, 0x3b1f0f06, 0xa7617bf2, 0x26441ed5, 0x7e5ab7fd,
+ 0xff7fd2da, 0xce67e5ad, 0x4f42808a, 0x175c29a2, 0x96794c85,
+ 0x756c474c, 0xf449226b, 0xac578b43, 0x2d72ee64, 0x1c6ad913,
+ 0x9d4fbc34, 0xc551151c, 0x4474703b, 0x4db9f56a, 0xcc9c904d,
+ 0x94823965, 0x15a75c42, 0x24bf6b35, 0xa59a0e12, 0xfd84a73a,
+ 0x7ca1c21d, 0x9fb4c9d4, 0x1e91acf3, 0x468f05db, 0xc7aa60fc,
+ 0xf6b2578b, 0x779732ac, 0x2f899b84, 0xaeacfea3, 0x32d28a57,
+ 0xb3f7ef70, 0xebe94658, 0x6acc237f, 0x5bd41408, 0xdaf1712f,
+ 0x82efd807, 0x03cabd20, 0xe0dfb6e9, 0x61fad3ce, 0x39e47ae6,
+ 0xb8c11fc1, 0x89d928b6, 0x08fc4d91, 0x50e2e4b9, 0xd1c7819e,
+ 0xb36f0b10, 0x324a6e37, 0x6a54c71f, 0xeb71a238, 0xda69954f,
+ 0x5b4cf068, 0x03525940, 0x82773c67, 0x616237ae, 0xe0475289,
+ 0xb859fba1, 0x397c9e86, 0x0864a9f1, 0x8941ccd6, 0xd15f65fe,
+ 0x507a00d9, 0xcc04742d, 0x4d21110a, 0x153fb822, 0x941add05,
+ 0xa502ea72, 0x24278f55, 0x7c39267d, 0xfd1c435a, 0x1e094893,
+ 0x9f2c2db4, 0xc732849c, 0x4617e1bb, 0x770fd6cc, 0xf62ab3eb,
+ 0xae341ac3, 0x2f117fe4, 0x6b650fdf, 0xea406af8, 0xb25ec3d0,
+ 0x337ba6f7, 0x02639180, 0x8346f4a7, 0xdb585d8f, 0x5a7d38a8,
+ 0xb9683361, 0x384d5646, 0x6053ff6e, 0xe1769a49, 0xd06ead3e,
+ 0x514bc819, 0x09556131, 0x88700416, 0x140e70e2, 0x952b15c5,
+ 0xcd35bced, 0x4c10d9ca, 0x7d08eebd, 0xfc2d8b9a, 0xa43322b2,
+ 0x25164795, 0xc6034c5c, 0x4726297b, 0x1f388053, 0x9e1de574,
+ 0xaf05d203, 0x2e20b724, 0x763e1e0c, 0xf71b7b2b, 0x95b3f1a5,
+ 0x14969482, 0x4c883daa, 0xcdad588d, 0xfcb56ffa, 0x7d900add,
+ 0x258ea3f5, 0xa4abc6d2, 0x47becd1b, 0xc69ba83c, 0x9e850114,
+ 0x1fa06433, 0x2eb85344, 0xaf9d3663, 0xf7839f4b, 0x76a6fa6c,
+ 0xead88e98, 0x6bfdebbf, 0x33e34297, 0xb2c627b0, 0x83de10c7,
+ 0x02fb75e0, 0x5ae5dcc8, 0xdbc0b9ef, 0x38d5b226, 0xb9f0d701,
+ 0xe1ee7e29, 0x60cb1b0e, 0x51d32c79, 0xd0f6495e, 0x88e8e076,
+ 0x09cd8551},
+ {0x00000000, 0x9b73ead4, 0xed96d3e9, 0x76e5393d, 0x005ca193,
+ 0x9b2f4b47, 0xedca727a, 0x76b998ae, 0x00b94326, 0x9bcaa9f2,
+ 0xed2f90cf, 0x765c7a1b, 0x00e5e2b5, 0x9b960861, 0xed73315c,
+ 0x7600db88, 0x0172864c, 0x9a016c98, 0xece455a5, 0x7797bf71,
+ 0x012e27df, 0x9a5dcd0b, 0xecb8f436, 0x77cb1ee2, 0x01cbc56a,
+ 0x9ab82fbe, 0xec5d1683, 0x772efc57, 0x019764f9, 0x9ae48e2d,
+ 0xec01b710, 0x77725dc4, 0x02e50c98, 0x9996e64c, 0xef73df71,
+ 0x740035a5, 0x02b9ad0b, 0x99ca47df, 0xef2f7ee2, 0x745c9436,
+ 0x025c4fbe, 0x992fa56a, 0xefca9c57, 0x74b97683, 0x0200ee2d,
+ 0x997304f9, 0xef963dc4, 0x74e5d710, 0x03978ad4, 0x98e46000,
+ 0xee01593d, 0x7572b3e9, 0x03cb2b47, 0x98b8c193, 0xee5df8ae,
+ 0x752e127a, 0x032ec9f2, 0x985d2326, 0xeeb81a1b, 0x75cbf0cf,
+ 0x03726861, 0x980182b5, 0xeee4bb88, 0x7597515c, 0x05ca1930,
+ 0x9eb9f3e4, 0xe85ccad9, 0x732f200d, 0x0596b8a3, 0x9ee55277,
+ 0xe8006b4a, 0x7373819e, 0x05735a16, 0x9e00b0c2, 0xe8e589ff,
+ 0x7396632b, 0x052ffb85, 0x9e5c1151, 0xe8b9286c, 0x73cac2b8,
+ 0x04b89f7c, 0x9fcb75a8, 0xe92e4c95, 0x725da641, 0x04e43eef,
+ 0x9f97d43b, 0xe972ed06, 0x720107d2, 0x0401dc5a, 0x9f72368e,
+ 0xe9970fb3, 0x72e4e567, 0x045d7dc9, 0x9f2e971d, 0xe9cbae20,
+ 0x72b844f4, 0x072f15a8, 0x9c5cff7c, 0xeab9c641, 0x71ca2c95,
+ 0x0773b43b, 0x9c005eef, 0xeae567d2, 0x71968d06, 0x0796568e,
+ 0x9ce5bc5a, 0xea008567, 0x71736fb3, 0x07caf71d, 0x9cb91dc9,
+ 0xea5c24f4, 0x712fce20, 0x065d93e4, 0x9d2e7930, 0xebcb400d,
+ 0x70b8aad9, 0x06013277, 0x9d72d8a3, 0xeb97e19e, 0x70e40b4a,
+ 0x06e4d0c2, 0x9d973a16, 0xeb72032b, 0x7001e9ff, 0x06b87151,
+ 0x9dcb9b85, 0xeb2ea2b8, 0x705d486c, 0x0b943260, 0x90e7d8b4,
+ 0xe602e189, 0x7d710b5d, 0x0bc893f3, 0x90bb7927, 0xe65e401a,
+ 0x7d2daace, 0x0b2d7146, 0x905e9b92, 0xe6bba2af, 0x7dc8487b,
+ 0x0b71d0d5, 0x90023a01, 0xe6e7033c, 0x7d94e9e8, 0x0ae6b42c,
+ 0x91955ef8, 0xe77067c5, 0x7c038d11, 0x0aba15bf, 0x91c9ff6b,
+ 0xe72cc656, 0x7c5f2c82, 0x0a5ff70a, 0x912c1dde, 0xe7c924e3,
+ 0x7cbace37, 0x0a035699, 0x9170bc4d, 0xe7958570, 0x7ce66fa4,
+ 0x09713ef8, 0x9202d42c, 0xe4e7ed11, 0x7f9407c5, 0x092d9f6b,
+ 0x925e75bf, 0xe4bb4c82, 0x7fc8a656, 0x09c87dde, 0x92bb970a,
+ 0xe45eae37, 0x7f2d44e3, 0x0994dc4d, 0x92e73699, 0xe4020fa4,
+ 0x7f71e570, 0x0803b8b4, 0x93705260, 0xe5956b5d, 0x7ee68189,
+ 0x085f1927, 0x932cf3f3, 0xe5c9cace, 0x7eba201a, 0x08bafb92,
+ 0x93c91146, 0xe52c287b, 0x7e5fc2af, 0x08e65a01, 0x9395b0d5,
+ 0xe57089e8, 0x7e03633c, 0x0e5e2b50, 0x952dc184, 0xe3c8f8b9,
+ 0x78bb126d, 0x0e028ac3, 0x95716017, 0xe394592a, 0x78e7b3fe,
+ 0x0ee76876, 0x959482a2, 0xe371bb9f, 0x7802514b, 0x0ebbc9e5,
+ 0x95c82331, 0xe32d1a0c, 0x785ef0d8, 0x0f2cad1c, 0x945f47c8,
+ 0xe2ba7ef5, 0x79c99421, 0x0f700c8f, 0x9403e65b, 0xe2e6df66,
+ 0x799535b2, 0x0f95ee3a, 0x94e604ee, 0xe2033dd3, 0x7970d707,
+ 0x0fc94fa9, 0x94baa57d, 0xe25f9c40, 0x792c7694, 0x0cbb27c8,
+ 0x97c8cd1c, 0xe12df421, 0x7a5e1ef5, 0x0ce7865b, 0x97946c8f,
+ 0xe17155b2, 0x7a02bf66, 0x0c0264ee, 0x97718e3a, 0xe194b707,
+ 0x7ae75dd3, 0x0c5ec57d, 0x972d2fa9, 0xe1c81694, 0x7abbfc40,
+ 0x0dc9a184, 0x96ba4b50, 0xe05f726d, 0x7b2c98b9, 0x0d950017,
+ 0x96e6eac3, 0xe003d3fe, 0x7b70392a, 0x0d70e2a2, 0x96030876,
+ 0xe0e6314b, 0x7b95db9f, 0x0d2c4331, 0x965fa9e5, 0xe0ba90d8,
+ 0x7bc97a0c},
+ {0x00000000, 0x172864c0, 0x2e50c980, 0x3978ad40, 0x5ca19300,
+ 0x4b89f7c0, 0x72f15a80, 0x65d93e40, 0xb9432600, 0xae6b42c0,
+ 0x9713ef80, 0x803b8b40, 0xe5e2b500, 0xf2cad1c0, 0xcbb27c80,
+ 0xdc9a1840, 0xa9f74a41, 0xbedf2e81, 0x87a783c1, 0x908fe701,
+ 0xf556d941, 0xe27ebd81, 0xdb0610c1, 0xcc2e7401, 0x10b46c41,
+ 0x079c0881, 0x3ee4a5c1, 0x29ccc101, 0x4c15ff41, 0x5b3d9b81,
+ 0x624536c1, 0x756d5201, 0x889f92c3, 0x9fb7f603, 0xa6cf5b43,
+ 0xb1e73f83, 0xd43e01c3, 0xc3166503, 0xfa6ec843, 0xed46ac83,
+ 0x31dcb4c3, 0x26f4d003, 0x1f8c7d43, 0x08a41983, 0x6d7d27c3,
+ 0x7a554303, 0x432dee43, 0x54058a83, 0x2168d882, 0x3640bc42,
+ 0x0f381102, 0x181075c2, 0x7dc94b82, 0x6ae12f42, 0x53998202,
+ 0x44b1e6c2, 0x982bfe82, 0x8f039a42, 0xb67b3702, 0xa15353c2,
+ 0xc48a6d82, 0xd3a20942, 0xeadaa402, 0xfdf2c0c2, 0xca4e23c7,
+ 0xdd664707, 0xe41eea47, 0xf3368e87, 0x96efb0c7, 0x81c7d407,
+ 0xb8bf7947, 0xaf971d87, 0x730d05c7, 0x64256107, 0x5d5dcc47,
+ 0x4a75a887, 0x2fac96c7, 0x3884f207, 0x01fc5f47, 0x16d43b87,
+ 0x63b96986, 0x74910d46, 0x4de9a006, 0x5ac1c4c6, 0x3f18fa86,
+ 0x28309e46, 0x11483306, 0x066057c6, 0xdafa4f86, 0xcdd22b46,
+ 0xf4aa8606, 0xe382e2c6, 0x865bdc86, 0x9173b846, 0xa80b1506,
+ 0xbf2371c6, 0x42d1b104, 0x55f9d5c4, 0x6c817884, 0x7ba91c44,
+ 0x1e702204, 0x095846c4, 0x3020eb84, 0x27088f44, 0xfb929704,
+ 0xecbaf3c4, 0xd5c25e84, 0xc2ea3a44, 0xa7330404, 0xb01b60c4,
+ 0x8963cd84, 0x9e4ba944, 0xeb26fb45, 0xfc0e9f85, 0xc57632c5,
+ 0xd25e5605, 0xb7876845, 0xa0af0c85, 0x99d7a1c5, 0x8effc505,
+ 0x5265dd45, 0x454db985, 0x7c3514c5, 0x6b1d7005, 0x0ec44e45,
+ 0x19ec2a85, 0x209487c5, 0x37bce305, 0x4fed41cf, 0x58c5250f,
+ 0x61bd884f, 0x7695ec8f, 0x134cd2cf, 0x0464b60f, 0x3d1c1b4f,
+ 0x2a347f8f, 0xf6ae67cf, 0xe186030f, 0xd8feae4f, 0xcfd6ca8f,
+ 0xaa0ff4cf, 0xbd27900f, 0x845f3d4f, 0x9377598f, 0xe61a0b8e,
+ 0xf1326f4e, 0xc84ac20e, 0xdf62a6ce, 0xbabb988e, 0xad93fc4e,
+ 0x94eb510e, 0x83c335ce, 0x5f592d8e, 0x4871494e, 0x7109e40e,
+ 0x662180ce, 0x03f8be8e, 0x14d0da4e, 0x2da8770e, 0x3a8013ce,
+ 0xc772d30c, 0xd05ab7cc, 0xe9221a8c, 0xfe0a7e4c, 0x9bd3400c,
+ 0x8cfb24cc, 0xb583898c, 0xa2abed4c, 0x7e31f50c, 0x691991cc,
+ 0x50613c8c, 0x4749584c, 0x2290660c, 0x35b802cc, 0x0cc0af8c,
+ 0x1be8cb4c, 0x6e85994d, 0x79adfd8d, 0x40d550cd, 0x57fd340d,
+ 0x32240a4d, 0x250c6e8d, 0x1c74c3cd, 0x0b5ca70d, 0xd7c6bf4d,
+ 0xc0eedb8d, 0xf99676cd, 0xeebe120d, 0x8b672c4d, 0x9c4f488d,
+ 0xa537e5cd, 0xb21f810d, 0x85a36208, 0x928b06c8, 0xabf3ab88,
+ 0xbcdbcf48, 0xd902f108, 0xce2a95c8, 0xf7523888, 0xe07a5c48,
+ 0x3ce04408, 0x2bc820c8, 0x12b08d88, 0x0598e948, 0x6041d708,
+ 0x7769b3c8, 0x4e111e88, 0x59397a48, 0x2c542849, 0x3b7c4c89,
+ 0x0204e1c9, 0x152c8509, 0x70f5bb49, 0x67dddf89, 0x5ea572c9,
+ 0x498d1609, 0x95170e49, 0x823f6a89, 0xbb47c7c9, 0xac6fa309,
+ 0xc9b69d49, 0xde9ef989, 0xe7e654c9, 0xf0ce3009, 0x0d3cf0cb,
+ 0x1a14940b, 0x236c394b, 0x34445d8b, 0x519d63cb, 0x46b5070b,
+ 0x7fcdaa4b, 0x68e5ce8b, 0xb47fd6cb, 0xa357b20b, 0x9a2f1f4b,
+ 0x8d077b8b, 0xe8de45cb, 0xfff6210b, 0xc68e8c4b, 0xd1a6e88b,
+ 0xa4cbba8a, 0xb3e3de4a, 0x8a9b730a, 0x9db317ca, 0xf86a298a,
+ 0xef424d4a, 0xd63ae00a, 0xc11284ca, 0x1d889c8a, 0x0aa0f84a,
+ 0x33d8550a, 0x24f031ca, 0x41290f8a, 0x56016b4a, 0x6f79c60a,
+ 0x7851a2ca},
+ {0x00000000, 0x9fda839e, 0xe4c4017d, 0x7b1e82e3, 0x12f904bb,
+ 0x8d238725, 0xf63d05c6, 0x69e78658, 0x25f20976, 0xba288ae8,
+ 0xc136080b, 0x5eec8b95, 0x370b0dcd, 0xa8d18e53, 0xd3cf0cb0,
+ 0x4c158f2e, 0x4be412ec, 0xd43e9172, 0xaf201391, 0x30fa900f,
+ 0x591d1657, 0xc6c795c9, 0xbdd9172a, 0x220394b4, 0x6e161b9a,
+ 0xf1cc9804, 0x8ad21ae7, 0x15089979, 0x7cef1f21, 0xe3359cbf,
+ 0x982b1e5c, 0x07f19dc2, 0x97c825d8, 0x0812a646, 0x730c24a5,
+ 0xecd6a73b, 0x85312163, 0x1aeba2fd, 0x61f5201e, 0xfe2fa380,
+ 0xb23a2cae, 0x2de0af30, 0x56fe2dd3, 0xc924ae4d, 0xa0c32815,
+ 0x3f19ab8b, 0x44072968, 0xdbddaaf6, 0xdc2c3734, 0x43f6b4aa,
+ 0x38e83649, 0xa732b5d7, 0xced5338f, 0x510fb011, 0x2a1132f2,
+ 0xb5cbb16c, 0xf9de3e42, 0x6604bddc, 0x1d1a3f3f, 0x82c0bca1,
+ 0xeb273af9, 0x74fdb967, 0x0fe33b84, 0x9039b81a, 0xf4e14df1,
+ 0x6b3bce6f, 0x10254c8c, 0x8fffcf12, 0xe618494a, 0x79c2cad4,
+ 0x02dc4837, 0x9d06cba9, 0xd1134487, 0x4ec9c719, 0x35d745fa,
+ 0xaa0dc664, 0xc3ea403c, 0x5c30c3a2, 0x272e4141, 0xb8f4c2df,
+ 0xbf055f1d, 0x20dfdc83, 0x5bc15e60, 0xc41bddfe, 0xadfc5ba6,
+ 0x3226d838, 0x49385adb, 0xd6e2d945, 0x9af7566b, 0x052dd5f5,
+ 0x7e335716, 0xe1e9d488, 0x880e52d0, 0x17d4d14e, 0x6cca53ad,
+ 0xf310d033, 0x63296829, 0xfcf3ebb7, 0x87ed6954, 0x1837eaca,
+ 0x71d06c92, 0xee0aef0c, 0x95146def, 0x0aceee71, 0x46db615f,
+ 0xd901e2c1, 0xa21f6022, 0x3dc5e3bc, 0x542265e4, 0xcbf8e67a,
+ 0xb0e66499, 0x2f3ce707, 0x28cd7ac5, 0xb717f95b, 0xcc097bb8,
+ 0x53d3f826, 0x3a347e7e, 0xa5eefde0, 0xdef07f03, 0x412afc9d,
+ 0x0d3f73b3, 0x92e5f02d, 0xe9fb72ce, 0x7621f150, 0x1fc67708,
+ 0x801cf496, 0xfb027675, 0x64d8f5eb, 0x32b39da3, 0xad691e3d,
+ 0xd6779cde, 0x49ad1f40, 0x204a9918, 0xbf901a86, 0xc48e9865,
+ 0x5b541bfb, 0x174194d5, 0x889b174b, 0xf38595a8, 0x6c5f1636,
+ 0x05b8906e, 0x9a6213f0, 0xe17c9113, 0x7ea6128d, 0x79578f4f,
+ 0xe68d0cd1, 0x9d938e32, 0x02490dac, 0x6bae8bf4, 0xf474086a,
+ 0x8f6a8a89, 0x10b00917, 0x5ca58639, 0xc37f05a7, 0xb8618744,
+ 0x27bb04da, 0x4e5c8282, 0xd186011c, 0xaa9883ff, 0x35420061,
+ 0xa57bb87b, 0x3aa13be5, 0x41bfb906, 0xde653a98, 0xb782bcc0,
+ 0x28583f5e, 0x5346bdbd, 0xcc9c3e23, 0x8089b10d, 0x1f533293,
+ 0x644db070, 0xfb9733ee, 0x9270b5b6, 0x0daa3628, 0x76b4b4cb,
+ 0xe96e3755, 0xee9faa97, 0x71452909, 0x0a5babea, 0x95812874,
+ 0xfc66ae2c, 0x63bc2db2, 0x18a2af51, 0x87782ccf, 0xcb6da3e1,
+ 0x54b7207f, 0x2fa9a29c, 0xb0732102, 0xd994a75a, 0x464e24c4,
+ 0x3d50a627, 0xa28a25b9, 0xc652d052, 0x598853cc, 0x2296d12f,
+ 0xbd4c52b1, 0xd4abd4e9, 0x4b715777, 0x306fd594, 0xafb5560a,
+ 0xe3a0d924, 0x7c7a5aba, 0x0764d859, 0x98be5bc7, 0xf159dd9f,
+ 0x6e835e01, 0x159ddce2, 0x8a475f7c, 0x8db6c2be, 0x126c4120,
+ 0x6972c3c3, 0xf6a8405d, 0x9f4fc605, 0x0095459b, 0x7b8bc778,
+ 0xe45144e6, 0xa844cbc8, 0x379e4856, 0x4c80cab5, 0xd35a492b,
+ 0xbabdcf73, 0x25674ced, 0x5e79ce0e, 0xc1a34d90, 0x519af58a,
+ 0xce407614, 0xb55ef4f7, 0x2a847769, 0x4363f131, 0xdcb972af,
+ 0xa7a7f04c, 0x387d73d2, 0x7468fcfc, 0xebb27f62, 0x90acfd81,
+ 0x0f767e1f, 0x6691f847, 0xf94b7bd9, 0x8255f93a, 0x1d8f7aa4,
+ 0x1a7ee766, 0x85a464f8, 0xfebae61b, 0x61606585, 0x0887e3dd,
+ 0x975d6043, 0xec43e2a0, 0x7399613e, 0x3f8cee10, 0xa0566d8e,
+ 0xdb48ef6d, 0x44926cf3, 0x2d75eaab, 0xb2af6935, 0xc9b1ebd6,
+ 0x566b6848},
+ {0x00000000, 0x65673b46, 0xcace768c, 0xafa94dca, 0x4eedeb59,
+ 0x2b8ad01f, 0x84239dd5, 0xe144a693, 0x9ddbd6b2, 0xf8bcedf4,
+ 0x5715a03e, 0x32729b78, 0xd3363deb, 0xb65106ad, 0x19f84b67,
+ 0x7c9f7021, 0xe0c6ab25, 0x85a19063, 0x2a08dda9, 0x4f6fe6ef,
+ 0xae2b407c, 0xcb4c7b3a, 0x64e536f0, 0x01820db6, 0x7d1d7d97,
+ 0x187a46d1, 0xb7d30b1b, 0xd2b4305d, 0x33f096ce, 0x5697ad88,
+ 0xf93ee042, 0x9c59db04, 0x1afc500b, 0x7f9b6b4d, 0xd0322687,
+ 0xb5551dc1, 0x5411bb52, 0x31768014, 0x9edfcdde, 0xfbb8f698,
+ 0x872786b9, 0xe240bdff, 0x4de9f035, 0x288ecb73, 0xc9ca6de0,
+ 0xacad56a6, 0x03041b6c, 0x6663202a, 0xfa3afb2e, 0x9f5dc068,
+ 0x30f48da2, 0x5593b6e4, 0xb4d71077, 0xd1b02b31, 0x7e1966fb,
+ 0x1b7e5dbd, 0x67e12d9c, 0x028616da, 0xad2f5b10, 0xc8486056,
+ 0x290cc6c5, 0x4c6bfd83, 0xe3c2b049, 0x86a58b0f, 0x35f8a016,
+ 0x509f9b50, 0xff36d69a, 0x9a51eddc, 0x7b154b4f, 0x1e727009,
+ 0xb1db3dc3, 0xd4bc0685, 0xa82376a4, 0xcd444de2, 0x62ed0028,
+ 0x078a3b6e, 0xe6ce9dfd, 0x83a9a6bb, 0x2c00eb71, 0x4967d037,
+ 0xd53e0b33, 0xb0593075, 0x1ff07dbf, 0x7a9746f9, 0x9bd3e06a,
+ 0xfeb4db2c, 0x511d96e6, 0x347aada0, 0x48e5dd81, 0x2d82e6c7,
+ 0x822bab0d, 0xe74c904b, 0x060836d8, 0x636f0d9e, 0xccc64054,
+ 0xa9a17b12, 0x2f04f01d, 0x4a63cb5b, 0xe5ca8691, 0x80adbdd7,
+ 0x61e91b44, 0x048e2002, 0xab276dc8, 0xce40568e, 0xb2df26af,
+ 0xd7b81de9, 0x78115023, 0x1d766b65, 0xfc32cdf6, 0x9955f6b0,
+ 0x36fcbb7a, 0x539b803c, 0xcfc25b38, 0xaaa5607e, 0x050c2db4,
+ 0x606b16f2, 0x812fb061, 0xe4488b27, 0x4be1c6ed, 0x2e86fdab,
+ 0x52198d8a, 0x377eb6cc, 0x98d7fb06, 0xfdb0c040, 0x1cf466d3,
+ 0x79935d95, 0xd63a105f, 0xb35d2b19, 0x6bf1402c, 0x0e967b6a,
+ 0xa13f36a0, 0xc4580de6, 0x251cab75, 0x407b9033, 0xefd2ddf9,
+ 0x8ab5e6bf, 0xf62a969e, 0x934dadd8, 0x3ce4e012, 0x5983db54,
+ 0xb8c77dc7, 0xdda04681, 0x72090b4b, 0x176e300d, 0x8b37eb09,
+ 0xee50d04f, 0x41f99d85, 0x249ea6c3, 0xc5da0050, 0xa0bd3b16,
+ 0x0f1476dc, 0x6a734d9a, 0x16ec3dbb, 0x738b06fd, 0xdc224b37,
+ 0xb9457071, 0x5801d6e2, 0x3d66eda4, 0x92cfa06e, 0xf7a89b28,
+ 0x710d1027, 0x146a2b61, 0xbbc366ab, 0xdea45ded, 0x3fe0fb7e,
+ 0x5a87c038, 0xf52e8df2, 0x9049b6b4, 0xecd6c695, 0x89b1fdd3,
+ 0x2618b019, 0x437f8b5f, 0xa23b2dcc, 0xc75c168a, 0x68f55b40,
+ 0x0d926006, 0x91cbbb02, 0xf4ac8044, 0x5b05cd8e, 0x3e62f6c8,
+ 0xdf26505b, 0xba416b1d, 0x15e826d7, 0x708f1d91, 0x0c106db0,
+ 0x697756f6, 0xc6de1b3c, 0xa3b9207a, 0x42fd86e9, 0x279abdaf,
+ 0x8833f065, 0xed54cb23, 0x5e09e03a, 0x3b6edb7c, 0x94c796b6,
+ 0xf1a0adf0, 0x10e40b63, 0x75833025, 0xda2a7def, 0xbf4d46a9,
+ 0xc3d23688, 0xa6b50dce, 0x091c4004, 0x6c7b7b42, 0x8d3fddd1,
+ 0xe858e697, 0x47f1ab5d, 0x2296901b, 0xbecf4b1f, 0xdba87059,
+ 0x74013d93, 0x116606d5, 0xf022a046, 0x95459b00, 0x3aecd6ca,
+ 0x5f8bed8c, 0x23149dad, 0x4673a6eb, 0xe9daeb21, 0x8cbdd067,
+ 0x6df976f4, 0x089e4db2, 0xa7370078, 0xc2503b3e, 0x44f5b031,
+ 0x21928b77, 0x8e3bc6bd, 0xeb5cfdfb, 0x0a185b68, 0x6f7f602e,
+ 0xc0d62de4, 0xa5b116a2, 0xd92e6683, 0xbc495dc5, 0x13e0100f,
+ 0x76872b49, 0x97c38dda, 0xf2a4b69c, 0x5d0dfb56, 0x386ac010,
+ 0xa4331b14, 0xc1542052, 0x6efd6d98, 0x0b9a56de, 0xeadef04d,
+ 0x8fb9cb0b, 0x201086c1, 0x4577bd87, 0x39e8cda6, 0x5c8ff6e0,
+ 0xf326bb2a, 0x9641806c, 0x770526ff, 0x12621db9, 0xbdcb5073,
+ 0xd8ac6b35},
+ {0x00000000, 0xd7e28058, 0x74b406f1, 0xa35686a9, 0xe9680de2,
+ 0x3e8a8dba, 0x9ddc0b13, 0x4a3e8b4b, 0x09a11d85, 0xde439ddd,
+ 0x7d151b74, 0xaaf79b2c, 0xe0c91067, 0x372b903f, 0x947d1696,
+ 0x439f96ce, 0x13423b0a, 0xc4a0bb52, 0x67f63dfb, 0xb014bda3,
+ 0xfa2a36e8, 0x2dc8b6b0, 0x8e9e3019, 0x597cb041, 0x1ae3268f,
+ 0xcd01a6d7, 0x6e57207e, 0xb9b5a026, 0xf38b2b6d, 0x2469ab35,
+ 0x873f2d9c, 0x50ddadc4, 0x26847614, 0xf166f64c, 0x523070e5,
+ 0x85d2f0bd, 0xcfec7bf6, 0x180efbae, 0xbb587d07, 0x6cbafd5f,
+ 0x2f256b91, 0xf8c7ebc9, 0x5b916d60, 0x8c73ed38, 0xc64d6673,
+ 0x11afe62b, 0xb2f96082, 0x651be0da, 0x35c64d1e, 0xe224cd46,
+ 0x41724bef, 0x9690cbb7, 0xdcae40fc, 0x0b4cc0a4, 0xa81a460d,
+ 0x7ff8c655, 0x3c67509b, 0xeb85d0c3, 0x48d3566a, 0x9f31d632,
+ 0xd50f5d79, 0x02eddd21, 0xa1bb5b88, 0x7659dbd0, 0x4d08ec28,
+ 0x9aea6c70, 0x39bcead9, 0xee5e6a81, 0xa460e1ca, 0x73826192,
+ 0xd0d4e73b, 0x07366763, 0x44a9f1ad, 0x934b71f5, 0x301df75c,
+ 0xe7ff7704, 0xadc1fc4f, 0x7a237c17, 0xd975fabe, 0x0e977ae6,
+ 0x5e4ad722, 0x89a8577a, 0x2afed1d3, 0xfd1c518b, 0xb722dac0,
+ 0x60c05a98, 0xc396dc31, 0x14745c69, 0x57ebcaa7, 0x80094aff,
+ 0x235fcc56, 0xf4bd4c0e, 0xbe83c745, 0x6961471d, 0xca37c1b4,
+ 0x1dd541ec, 0x6b8c9a3c, 0xbc6e1a64, 0x1f389ccd, 0xc8da1c95,
+ 0x82e497de, 0x55061786, 0xf650912f, 0x21b21177, 0x622d87b9,
+ 0xb5cf07e1, 0x16998148, 0xc17b0110, 0x8b458a5b, 0x5ca70a03,
+ 0xfff18caa, 0x28130cf2, 0x78cea136, 0xaf2c216e, 0x0c7aa7c7,
+ 0xdb98279f, 0x91a6acd4, 0x46442c8c, 0xe512aa25, 0x32f02a7d,
+ 0x716fbcb3, 0xa68d3ceb, 0x05dbba42, 0xd2393a1a, 0x9807b151,
+ 0x4fe53109, 0xecb3b7a0, 0x3b5137f8, 0x9a11d850, 0x4df35808,
+ 0xeea5dea1, 0x39475ef9, 0x7379d5b2, 0xa49b55ea, 0x07cdd343,
+ 0xd02f531b, 0x93b0c5d5, 0x4452458d, 0xe704c324, 0x30e6437c,
+ 0x7ad8c837, 0xad3a486f, 0x0e6ccec6, 0xd98e4e9e, 0x8953e35a,
+ 0x5eb16302, 0xfde7e5ab, 0x2a0565f3, 0x603beeb8, 0xb7d96ee0,
+ 0x148fe849, 0xc36d6811, 0x80f2fedf, 0x57107e87, 0xf446f82e,
+ 0x23a47876, 0x699af33d, 0xbe787365, 0x1d2ef5cc, 0xcacc7594,
+ 0xbc95ae44, 0x6b772e1c, 0xc821a8b5, 0x1fc328ed, 0x55fda3a6,
+ 0x821f23fe, 0x2149a557, 0xf6ab250f, 0xb534b3c1, 0x62d63399,
+ 0xc180b530, 0x16623568, 0x5c5cbe23, 0x8bbe3e7b, 0x28e8b8d2,
+ 0xff0a388a, 0xafd7954e, 0x78351516, 0xdb6393bf, 0x0c8113e7,
+ 0x46bf98ac, 0x915d18f4, 0x320b9e5d, 0xe5e91e05, 0xa67688cb,
+ 0x71940893, 0xd2c28e3a, 0x05200e62, 0x4f1e8529, 0x98fc0571,
+ 0x3baa83d8, 0xec480380, 0xd7193478, 0x00fbb420, 0xa3ad3289,
+ 0x744fb2d1, 0x3e71399a, 0xe993b9c2, 0x4ac53f6b, 0x9d27bf33,
+ 0xdeb829fd, 0x095aa9a5, 0xaa0c2f0c, 0x7deeaf54, 0x37d0241f,
+ 0xe032a447, 0x436422ee, 0x9486a2b6, 0xc45b0f72, 0x13b98f2a,
+ 0xb0ef0983, 0x670d89db, 0x2d330290, 0xfad182c8, 0x59870461,
+ 0x8e658439, 0xcdfa12f7, 0x1a1892af, 0xb94e1406, 0x6eac945e,
+ 0x24921f15, 0xf3709f4d, 0x502619e4, 0x87c499bc, 0xf19d426c,
+ 0x267fc234, 0x8529449d, 0x52cbc4c5, 0x18f54f8e, 0xcf17cfd6,
+ 0x6c41497f, 0xbba3c927, 0xf83c5fe9, 0x2fdedfb1, 0x8c885918,
+ 0x5b6ad940, 0x1154520b, 0xc6b6d253, 0x65e054fa, 0xb202d4a2,
+ 0xe2df7966, 0x353df93e, 0x966b7f97, 0x4189ffcf, 0x0bb77484,
+ 0xdc55f4dc, 0x7f037275, 0xa8e1f22d, 0xeb7e64e3, 0x3c9ce4bb,
+ 0x9fca6212, 0x4828e24a, 0x02166901, 0xd5f4e959, 0x76a26ff0,
+ 0xa140efa8},
+ {0x00000000, 0xef52b6e1, 0x05d46b83, 0xea86dd62, 0x0ba8d706,
+ 0xe4fa61e7, 0x0e7cbc85, 0xe12e0a64, 0x1751ae0c, 0xf80318ed,
+ 0x1285c58f, 0xfdd7736e, 0x1cf9790a, 0xf3abcfeb, 0x192d1289,
+ 0xf67fa468, 0x2ea35c18, 0xc1f1eaf9, 0x2b77379b, 0xc425817a,
+ 0x250b8b1e, 0xca593dff, 0x20dfe09d, 0xcf8d567c, 0x39f2f214,
+ 0xd6a044f5, 0x3c269997, 0xd3742f76, 0x325a2512, 0xdd0893f3,
+ 0x378e4e91, 0xd8dcf870, 0x5d46b830, 0xb2140ed1, 0x5892d3b3,
+ 0xb7c06552, 0x56ee6f36, 0xb9bcd9d7, 0x533a04b5, 0xbc68b254,
+ 0x4a17163c, 0xa545a0dd, 0x4fc37dbf, 0xa091cb5e, 0x41bfc13a,
+ 0xaeed77db, 0x446baab9, 0xab391c58, 0x73e5e428, 0x9cb752c9,
+ 0x76318fab, 0x9963394a, 0x784d332e, 0x971f85cf, 0x7d9958ad,
+ 0x92cbee4c, 0x64b44a24, 0x8be6fcc5, 0x616021a7, 0x8e329746,
+ 0x6f1c9d22, 0x804e2bc3, 0x6ac8f6a1, 0x859a4040, 0xba8d7060,
+ 0x55dfc681, 0xbf591be3, 0x500bad02, 0xb125a766, 0x5e771187,
+ 0xb4f1cce5, 0x5ba37a04, 0xaddcde6c, 0x428e688d, 0xa808b5ef,
+ 0x475a030e, 0xa674096a, 0x4926bf8b, 0xa3a062e9, 0x4cf2d408,
+ 0x942e2c78, 0x7b7c9a99, 0x91fa47fb, 0x7ea8f11a, 0x9f86fb7e,
+ 0x70d44d9f, 0x9a5290fd, 0x7500261c, 0x837f8274, 0x6c2d3495,
+ 0x86abe9f7, 0x69f95f16, 0x88d75572, 0x6785e393, 0x8d033ef1,
+ 0x62518810, 0xe7cbc850, 0x08997eb1, 0xe21fa3d3, 0x0d4d1532,
+ 0xec631f56, 0x0331a9b7, 0xe9b774d5, 0x06e5c234, 0xf09a665c,
+ 0x1fc8d0bd, 0xf54e0ddf, 0x1a1cbb3e, 0xfb32b15a, 0x146007bb,
+ 0xfee6dad9, 0x11b46c38, 0xc9689448, 0x263a22a9, 0xccbcffcb,
+ 0x23ee492a, 0xc2c0434e, 0x2d92f5af, 0xc71428cd, 0x28469e2c,
+ 0xde393a44, 0x316b8ca5, 0xdbed51c7, 0x34bfe726, 0xd591ed42,
+ 0x3ac35ba3, 0xd04586c1, 0x3f173020, 0xae6be681, 0x41395060,
+ 0xabbf8d02, 0x44ed3be3, 0xa5c33187, 0x4a918766, 0xa0175a04,
+ 0x4f45ece5, 0xb93a488d, 0x5668fe6c, 0xbcee230e, 0x53bc95ef,
+ 0xb2929f8b, 0x5dc0296a, 0xb746f408, 0x581442e9, 0x80c8ba99,
+ 0x6f9a0c78, 0x851cd11a, 0x6a4e67fb, 0x8b606d9f, 0x6432db7e,
+ 0x8eb4061c, 0x61e6b0fd, 0x97991495, 0x78cba274, 0x924d7f16,
+ 0x7d1fc9f7, 0x9c31c393, 0x73637572, 0x99e5a810, 0x76b71ef1,
+ 0xf32d5eb1, 0x1c7fe850, 0xf6f93532, 0x19ab83d3, 0xf88589b7,
+ 0x17d73f56, 0xfd51e234, 0x120354d5, 0xe47cf0bd, 0x0b2e465c,
+ 0xe1a89b3e, 0x0efa2ddf, 0xefd427bb, 0x0086915a, 0xea004c38,
+ 0x0552fad9, 0xdd8e02a9, 0x32dcb448, 0xd85a692a, 0x3708dfcb,
+ 0xd626d5af, 0x3974634e, 0xd3f2be2c, 0x3ca008cd, 0xcadfaca5,
+ 0x258d1a44, 0xcf0bc726, 0x205971c7, 0xc1777ba3, 0x2e25cd42,
+ 0xc4a31020, 0x2bf1a6c1, 0x14e696e1, 0xfbb42000, 0x1132fd62,
+ 0xfe604b83, 0x1f4e41e7, 0xf01cf706, 0x1a9a2a64, 0xf5c89c85,
+ 0x03b738ed, 0xece58e0c, 0x0663536e, 0xe931e58f, 0x081fefeb,
+ 0xe74d590a, 0x0dcb8468, 0xe2993289, 0x3a45caf9, 0xd5177c18,
+ 0x3f91a17a, 0xd0c3179b, 0x31ed1dff, 0xdebfab1e, 0x3439767c,
+ 0xdb6bc09d, 0x2d1464f5, 0xc246d214, 0x28c00f76, 0xc792b997,
+ 0x26bcb3f3, 0xc9ee0512, 0x2368d870, 0xcc3a6e91, 0x49a02ed1,
+ 0xa6f29830, 0x4c744552, 0xa326f3b3, 0x4208f9d7, 0xad5a4f36,
+ 0x47dc9254, 0xa88e24b5, 0x5ef180dd, 0xb1a3363c, 0x5b25eb5e,
+ 0xb4775dbf, 0x555957db, 0xba0be13a, 0x508d3c58, 0xbfdf8ab9,
+ 0x670372c9, 0x8851c428, 0x62d7194a, 0x8d85afab, 0x6caba5cf,
+ 0x83f9132e, 0x697fce4c, 0x862d78ad, 0x7052dcc5, 0x9f006a24,
+ 0x7586b746, 0x9ad401a7, 0x7bfa0bc3, 0x94a8bd22, 0x7e2e6040,
+ 0x917cd6a1},
+ {0x00000000, 0x87a6cb43, 0xd43c90c7, 0x539a5b84, 0x730827cf,
+ 0xf4aeec8c, 0xa734b708, 0x20927c4b, 0xe6104f9e, 0x61b684dd,
+ 0x322cdf59, 0xb58a141a, 0x95186851, 0x12bea312, 0x4124f896,
+ 0xc68233d5, 0x1751997d, 0x90f7523e, 0xc36d09ba, 0x44cbc2f9,
+ 0x6459beb2, 0xe3ff75f1, 0xb0652e75, 0x37c3e536, 0xf141d6e3,
+ 0x76e71da0, 0x257d4624, 0xa2db8d67, 0x8249f12c, 0x05ef3a6f,
+ 0x567561eb, 0xd1d3aaa8, 0x2ea332fa, 0xa905f9b9, 0xfa9fa23d,
+ 0x7d39697e, 0x5dab1535, 0xda0dde76, 0x899785f2, 0x0e314eb1,
+ 0xc8b37d64, 0x4f15b627, 0x1c8feda3, 0x9b2926e0, 0xbbbb5aab,
+ 0x3c1d91e8, 0x6f87ca6c, 0xe821012f, 0x39f2ab87, 0xbe5460c4,
+ 0xedce3b40, 0x6a68f003, 0x4afa8c48, 0xcd5c470b, 0x9ec61c8f,
+ 0x1960d7cc, 0xdfe2e419, 0x58442f5a, 0x0bde74de, 0x8c78bf9d,
+ 0xaceac3d6, 0x2b4c0895, 0x78d65311, 0xff709852, 0x5d4665f4,
+ 0xdae0aeb7, 0x897af533, 0x0edc3e70, 0x2e4e423b, 0xa9e88978,
+ 0xfa72d2fc, 0x7dd419bf, 0xbb562a6a, 0x3cf0e129, 0x6f6abaad,
+ 0xe8cc71ee, 0xc85e0da5, 0x4ff8c6e6, 0x1c629d62, 0x9bc45621,
+ 0x4a17fc89, 0xcdb137ca, 0x9e2b6c4e, 0x198da70d, 0x391fdb46,
+ 0xbeb91005, 0xed234b81, 0x6a8580c2, 0xac07b317, 0x2ba17854,
+ 0x783b23d0, 0xff9de893, 0xdf0f94d8, 0x58a95f9b, 0x0b33041f,
+ 0x8c95cf5c, 0x73e5570e, 0xf4439c4d, 0xa7d9c7c9, 0x207f0c8a,
+ 0x00ed70c1, 0x874bbb82, 0xd4d1e006, 0x53772b45, 0x95f51890,
+ 0x1253d3d3, 0x41c98857, 0xc66f4314, 0xe6fd3f5f, 0x615bf41c,
+ 0x32c1af98, 0xb56764db, 0x64b4ce73, 0xe3120530, 0xb0885eb4,
+ 0x372e95f7, 0x17bce9bc, 0x901a22ff, 0xc380797b, 0x4426b238,
+ 0x82a481ed, 0x05024aae, 0x5698112a, 0xd13eda69, 0xf1aca622,
+ 0x760a6d61, 0x259036e5, 0xa236fda6, 0xba8ccbe8, 0x3d2a00ab,
+ 0x6eb05b2f, 0xe916906c, 0xc984ec27, 0x4e222764, 0x1db87ce0,
+ 0x9a1eb7a3, 0x5c9c8476, 0xdb3a4f35, 0x88a014b1, 0x0f06dff2,
+ 0x2f94a3b9, 0xa83268fa, 0xfba8337e, 0x7c0ef83d, 0xaddd5295,
+ 0x2a7b99d6, 0x79e1c252, 0xfe470911, 0xded5755a, 0x5973be19,
+ 0x0ae9e59d, 0x8d4f2ede, 0x4bcd1d0b, 0xcc6bd648, 0x9ff18dcc,
+ 0x1857468f, 0x38c53ac4, 0xbf63f187, 0xecf9aa03, 0x6b5f6140,
+ 0x942ff912, 0x13893251, 0x401369d5, 0xc7b5a296, 0xe727dedd,
+ 0x6081159e, 0x331b4e1a, 0xb4bd8559, 0x723fb68c, 0xf5997dcf,
+ 0xa603264b, 0x21a5ed08, 0x01379143, 0x86915a00, 0xd50b0184,
+ 0x52adcac7, 0x837e606f, 0x04d8ab2c, 0x5742f0a8, 0xd0e43beb,
+ 0xf07647a0, 0x77d08ce3, 0x244ad767, 0xa3ec1c24, 0x656e2ff1,
+ 0xe2c8e4b2, 0xb152bf36, 0x36f47475, 0x1666083e, 0x91c0c37d,
+ 0xc25a98f9, 0x45fc53ba, 0xe7caae1c, 0x606c655f, 0x33f63edb,
+ 0xb450f598, 0x94c289d3, 0x13644290, 0x40fe1914, 0xc758d257,
+ 0x01dae182, 0x867c2ac1, 0xd5e67145, 0x5240ba06, 0x72d2c64d,
+ 0xf5740d0e, 0xa6ee568a, 0x21489dc9, 0xf09b3761, 0x773dfc22,
+ 0x24a7a7a6, 0xa3016ce5, 0x839310ae, 0x0435dbed, 0x57af8069,
+ 0xd0094b2a, 0x168b78ff, 0x912db3bc, 0xc2b7e838, 0x4511237b,
+ 0x65835f30, 0xe2259473, 0xb1bfcff7, 0x361904b4, 0xc9699ce6,
+ 0x4ecf57a5, 0x1d550c21, 0x9af3c762, 0xba61bb29, 0x3dc7706a,
+ 0x6e5d2bee, 0xe9fbe0ad, 0x2f79d378, 0xa8df183b, 0xfb4543bf,
+ 0x7ce388fc, 0x5c71f4b7, 0xdbd73ff4, 0x884d6470, 0x0febaf33,
+ 0xde38059b, 0x599eced8, 0x0a04955c, 0x8da25e1f, 0xad302254,
+ 0x2a96e917, 0x790cb293, 0xfeaa79d0, 0x38284a05, 0xbf8e8146,
+ 0xec14dac2, 0x6bb21181, 0x4b206dca, 0xcc86a689, 0x9f1cfd0d,
+ 0x18ba364e}};
+
+local const z_word_t FAR crc_braid_big_table[][256] = {
+ {0x0000000000000000, 0x43cba68700000000, 0xc7903cd400000000,
+ 0x845b9a5300000000, 0xcf27087300000000, 0x8cecaef400000000,
+ 0x08b734a700000000, 0x4b7c922000000000, 0x9e4f10e600000000,
+ 0xdd84b66100000000, 0x59df2c3200000000, 0x1a148ab500000000,
+ 0x5168189500000000, 0x12a3be1200000000, 0x96f8244100000000,
+ 0xd53382c600000000, 0x7d99511700000000, 0x3e52f79000000000,
+ 0xba096dc300000000, 0xf9c2cb4400000000, 0xb2be596400000000,
+ 0xf175ffe300000000, 0x752e65b000000000, 0x36e5c33700000000,
+ 0xe3d641f100000000, 0xa01de77600000000, 0x24467d2500000000,
+ 0x678ddba200000000, 0x2cf1498200000000, 0x6f3aef0500000000,
+ 0xeb61755600000000, 0xa8aad3d100000000, 0xfa32a32e00000000,
+ 0xb9f905a900000000, 0x3da29ffa00000000, 0x7e69397d00000000,
+ 0x3515ab5d00000000, 0x76de0dda00000000, 0xf285978900000000,
+ 0xb14e310e00000000, 0x647db3c800000000, 0x27b6154f00000000,
+ 0xa3ed8f1c00000000, 0xe026299b00000000, 0xab5abbbb00000000,
+ 0xe8911d3c00000000, 0x6cca876f00000000, 0x2f0121e800000000,
+ 0x87abf23900000000, 0xc46054be00000000, 0x403bceed00000000,
+ 0x03f0686a00000000, 0x488cfa4a00000000, 0x0b475ccd00000000,
+ 0x8f1cc69e00000000, 0xccd7601900000000, 0x19e4e2df00000000,
+ 0x5a2f445800000000, 0xde74de0b00000000, 0x9dbf788c00000000,
+ 0xd6c3eaac00000000, 0x95084c2b00000000, 0x1153d67800000000,
+ 0x529870ff00000000, 0xf465465d00000000, 0xb7aee0da00000000,
+ 0x33f57a8900000000, 0x703edc0e00000000, 0x3b424e2e00000000,
+ 0x7889e8a900000000, 0xfcd272fa00000000, 0xbf19d47d00000000,
+ 0x6a2a56bb00000000, 0x29e1f03c00000000, 0xadba6a6f00000000,
+ 0xee71cce800000000, 0xa50d5ec800000000, 0xe6c6f84f00000000,
+ 0x629d621c00000000, 0x2156c49b00000000, 0x89fc174a00000000,
+ 0xca37b1cd00000000, 0x4e6c2b9e00000000, 0x0da78d1900000000,
+ 0x46db1f3900000000, 0x0510b9be00000000, 0x814b23ed00000000,
+ 0xc280856a00000000, 0x17b307ac00000000, 0x5478a12b00000000,
+ 0xd0233b7800000000, 0x93e89dff00000000, 0xd8940fdf00000000,
+ 0x9b5fa95800000000, 0x1f04330b00000000, 0x5ccf958c00000000,
+ 0x0e57e57300000000, 0x4d9c43f400000000, 0xc9c7d9a700000000,
+ 0x8a0c7f2000000000, 0xc170ed0000000000, 0x82bb4b8700000000,
+ 0x06e0d1d400000000, 0x452b775300000000, 0x9018f59500000000,
+ 0xd3d3531200000000, 0x5788c94100000000, 0x14436fc600000000,
+ 0x5f3ffde600000000, 0x1cf45b6100000000, 0x98afc13200000000,
+ 0xdb6467b500000000, 0x73ceb46400000000, 0x300512e300000000,
+ 0xb45e88b000000000, 0xf7952e3700000000, 0xbce9bc1700000000,
+ 0xff221a9000000000, 0x7b7980c300000000, 0x38b2264400000000,
+ 0xed81a48200000000, 0xae4a020500000000, 0x2a11985600000000,
+ 0x69da3ed100000000, 0x22a6acf100000000, 0x616d0a7600000000,
+ 0xe536902500000000, 0xa6fd36a200000000, 0xe8cb8cba00000000,
+ 0xab002a3d00000000, 0x2f5bb06e00000000, 0x6c9016e900000000,
+ 0x27ec84c900000000, 0x6427224e00000000, 0xe07cb81d00000000,
+ 0xa3b71e9a00000000, 0x76849c5c00000000, 0x354f3adb00000000,
+ 0xb114a08800000000, 0xf2df060f00000000, 0xb9a3942f00000000,
+ 0xfa6832a800000000, 0x7e33a8fb00000000, 0x3df80e7c00000000,
+ 0x9552ddad00000000, 0xd6997b2a00000000, 0x52c2e17900000000,
+ 0x110947fe00000000, 0x5a75d5de00000000, 0x19be735900000000,
+ 0x9de5e90a00000000, 0xde2e4f8d00000000, 0x0b1dcd4b00000000,
+ 0x48d66bcc00000000, 0xcc8df19f00000000, 0x8f46571800000000,
+ 0xc43ac53800000000, 0x87f163bf00000000, 0x03aaf9ec00000000,
+ 0x40615f6b00000000, 0x12f92f9400000000, 0x5132891300000000,
+ 0xd569134000000000, 0x96a2b5c700000000, 0xddde27e700000000,
+ 0x9e15816000000000, 0x1a4e1b3300000000, 0x5985bdb400000000,
+ 0x8cb63f7200000000, 0xcf7d99f500000000, 0x4b2603a600000000,
+ 0x08eda52100000000, 0x4391370100000000, 0x005a918600000000,
+ 0x84010bd500000000, 0xc7caad5200000000, 0x6f607e8300000000,
+ 0x2cabd80400000000, 0xa8f0425700000000, 0xeb3be4d000000000,
+ 0xa04776f000000000, 0xe38cd07700000000, 0x67d74a2400000000,
+ 0x241ceca300000000, 0xf12f6e6500000000, 0xb2e4c8e200000000,
+ 0x36bf52b100000000, 0x7574f43600000000, 0x3e08661600000000,
+ 0x7dc3c09100000000, 0xf9985ac200000000, 0xba53fc4500000000,
+ 0x1caecae700000000, 0x5f656c6000000000, 0xdb3ef63300000000,
+ 0x98f550b400000000, 0xd389c29400000000, 0x9042641300000000,
+ 0x1419fe4000000000, 0x57d258c700000000, 0x82e1da0100000000,
+ 0xc12a7c8600000000, 0x4571e6d500000000, 0x06ba405200000000,
+ 0x4dc6d27200000000, 0x0e0d74f500000000, 0x8a56eea600000000,
+ 0xc99d482100000000, 0x61379bf000000000, 0x22fc3d7700000000,
+ 0xa6a7a72400000000, 0xe56c01a300000000, 0xae10938300000000,
+ 0xeddb350400000000, 0x6980af5700000000, 0x2a4b09d000000000,
+ 0xff788b1600000000, 0xbcb32d9100000000, 0x38e8b7c200000000,
+ 0x7b23114500000000, 0x305f836500000000, 0x739425e200000000,
+ 0xf7cfbfb100000000, 0xb404193600000000, 0xe69c69c900000000,
+ 0xa557cf4e00000000, 0x210c551d00000000, 0x62c7f39a00000000,
+ 0x29bb61ba00000000, 0x6a70c73d00000000, 0xee2b5d6e00000000,
+ 0xade0fbe900000000, 0x78d3792f00000000, 0x3b18dfa800000000,
+ 0xbf4345fb00000000, 0xfc88e37c00000000, 0xb7f4715c00000000,
+ 0xf43fd7db00000000, 0x70644d8800000000, 0x33afeb0f00000000,
+ 0x9b0538de00000000, 0xd8ce9e5900000000, 0x5c95040a00000000,
+ 0x1f5ea28d00000000, 0x542230ad00000000, 0x17e9962a00000000,
+ 0x93b20c7900000000, 0xd079aafe00000000, 0x054a283800000000,
+ 0x46818ebf00000000, 0xc2da14ec00000000, 0x8111b26b00000000,
+ 0xca6d204b00000000, 0x89a686cc00000000, 0x0dfd1c9f00000000,
+ 0x4e36ba1800000000},
+ {0x0000000000000000, 0xe1b652ef00000000, 0x836bd40500000000,
+ 0x62dd86ea00000000, 0x06d7a80b00000000, 0xe761fae400000000,
+ 0x85bc7c0e00000000, 0x640a2ee100000000, 0x0cae511700000000,
+ 0xed1803f800000000, 0x8fc5851200000000, 0x6e73d7fd00000000,
+ 0x0a79f91c00000000, 0xebcfabf300000000, 0x89122d1900000000,
+ 0x68a47ff600000000, 0x185ca32e00000000, 0xf9eaf1c100000000,
+ 0x9b37772b00000000, 0x7a8125c400000000, 0x1e8b0b2500000000,
+ 0xff3d59ca00000000, 0x9de0df2000000000, 0x7c568dcf00000000,
+ 0x14f2f23900000000, 0xf544a0d600000000, 0x9799263c00000000,
+ 0x762f74d300000000, 0x12255a3200000000, 0xf39308dd00000000,
+ 0x914e8e3700000000, 0x70f8dcd800000000, 0x30b8465d00000000,
+ 0xd10e14b200000000, 0xb3d3925800000000, 0x5265c0b700000000,
+ 0x366fee5600000000, 0xd7d9bcb900000000, 0xb5043a5300000000,
+ 0x54b268bc00000000, 0x3c16174a00000000, 0xdda045a500000000,
+ 0xbf7dc34f00000000, 0x5ecb91a000000000, 0x3ac1bf4100000000,
+ 0xdb77edae00000000, 0xb9aa6b4400000000, 0x581c39ab00000000,
+ 0x28e4e57300000000, 0xc952b79c00000000, 0xab8f317600000000,
+ 0x4a39639900000000, 0x2e334d7800000000, 0xcf851f9700000000,
+ 0xad58997d00000000, 0x4ceecb9200000000, 0x244ab46400000000,
+ 0xc5fce68b00000000, 0xa721606100000000, 0x4697328e00000000,
+ 0x229d1c6f00000000, 0xc32b4e8000000000, 0xa1f6c86a00000000,
+ 0x40409a8500000000, 0x60708dba00000000, 0x81c6df5500000000,
+ 0xe31b59bf00000000, 0x02ad0b5000000000, 0x66a725b100000000,
+ 0x8711775e00000000, 0xe5ccf1b400000000, 0x047aa35b00000000,
+ 0x6cdedcad00000000, 0x8d688e4200000000, 0xefb508a800000000,
+ 0x0e035a4700000000, 0x6a0974a600000000, 0x8bbf264900000000,
+ 0xe962a0a300000000, 0x08d4f24c00000000, 0x782c2e9400000000,
+ 0x999a7c7b00000000, 0xfb47fa9100000000, 0x1af1a87e00000000,
+ 0x7efb869f00000000, 0x9f4dd47000000000, 0xfd90529a00000000,
+ 0x1c26007500000000, 0x74827f8300000000, 0x95342d6c00000000,
+ 0xf7e9ab8600000000, 0x165ff96900000000, 0x7255d78800000000,
+ 0x93e3856700000000, 0xf13e038d00000000, 0x1088516200000000,
+ 0x50c8cbe700000000, 0xb17e990800000000, 0xd3a31fe200000000,
+ 0x32154d0d00000000, 0x561f63ec00000000, 0xb7a9310300000000,
+ 0xd574b7e900000000, 0x34c2e50600000000, 0x5c669af000000000,
+ 0xbdd0c81f00000000, 0xdf0d4ef500000000, 0x3ebb1c1a00000000,
+ 0x5ab132fb00000000, 0xbb07601400000000, 0xd9dae6fe00000000,
+ 0x386cb41100000000, 0x489468c900000000, 0xa9223a2600000000,
+ 0xcbffbccc00000000, 0x2a49ee2300000000, 0x4e43c0c200000000,
+ 0xaff5922d00000000, 0xcd2814c700000000, 0x2c9e462800000000,
+ 0x443a39de00000000, 0xa58c6b3100000000, 0xc751eddb00000000,
+ 0x26e7bf3400000000, 0x42ed91d500000000, 0xa35bc33a00000000,
+ 0xc18645d000000000, 0x2030173f00000000, 0x81e66bae00000000,
+ 0x6050394100000000, 0x028dbfab00000000, 0xe33bed4400000000,
+ 0x8731c3a500000000, 0x6687914a00000000, 0x045a17a000000000,
+ 0xe5ec454f00000000, 0x8d483ab900000000, 0x6cfe685600000000,
+ 0x0e23eebc00000000, 0xef95bc5300000000, 0x8b9f92b200000000,
+ 0x6a29c05d00000000, 0x08f446b700000000, 0xe942145800000000,
+ 0x99bac88000000000, 0x780c9a6f00000000, 0x1ad11c8500000000,
+ 0xfb674e6a00000000, 0x9f6d608b00000000, 0x7edb326400000000,
+ 0x1c06b48e00000000, 0xfdb0e66100000000, 0x9514999700000000,
+ 0x74a2cb7800000000, 0x167f4d9200000000, 0xf7c91f7d00000000,
+ 0x93c3319c00000000, 0x7275637300000000, 0x10a8e59900000000,
+ 0xf11eb77600000000, 0xb15e2df300000000, 0x50e87f1c00000000,
+ 0x3235f9f600000000, 0xd383ab1900000000, 0xb78985f800000000,
+ 0x563fd71700000000, 0x34e251fd00000000, 0xd554031200000000,
+ 0xbdf07ce400000000, 0x5c462e0b00000000, 0x3e9ba8e100000000,
+ 0xdf2dfa0e00000000, 0xbb27d4ef00000000, 0x5a91860000000000,
+ 0x384c00ea00000000, 0xd9fa520500000000, 0xa9028edd00000000,
+ 0x48b4dc3200000000, 0x2a695ad800000000, 0xcbdf083700000000,
+ 0xafd526d600000000, 0x4e63743900000000, 0x2cbef2d300000000,
+ 0xcd08a03c00000000, 0xa5acdfca00000000, 0x441a8d2500000000,
+ 0x26c70bcf00000000, 0xc771592000000000, 0xa37b77c100000000,
+ 0x42cd252e00000000, 0x2010a3c400000000, 0xc1a6f12b00000000,
+ 0xe196e61400000000, 0x0020b4fb00000000, 0x62fd321100000000,
+ 0x834b60fe00000000, 0xe7414e1f00000000, 0x06f71cf000000000,
+ 0x642a9a1a00000000, 0x859cc8f500000000, 0xed38b70300000000,
+ 0x0c8ee5ec00000000, 0x6e53630600000000, 0x8fe531e900000000,
+ 0xebef1f0800000000, 0x0a594de700000000, 0x6884cb0d00000000,
+ 0x893299e200000000, 0xf9ca453a00000000, 0x187c17d500000000,
+ 0x7aa1913f00000000, 0x9b17c3d000000000, 0xff1ded3100000000,
+ 0x1eabbfde00000000, 0x7c76393400000000, 0x9dc06bdb00000000,
+ 0xf564142d00000000, 0x14d246c200000000, 0x760fc02800000000,
+ 0x97b992c700000000, 0xf3b3bc2600000000, 0x1205eec900000000,
+ 0x70d8682300000000, 0x916e3acc00000000, 0xd12ea04900000000,
+ 0x3098f2a600000000, 0x5245744c00000000, 0xb3f326a300000000,
+ 0xd7f9084200000000, 0x364f5aad00000000, 0x5492dc4700000000,
+ 0xb5248ea800000000, 0xdd80f15e00000000, 0x3c36a3b100000000,
+ 0x5eeb255b00000000, 0xbf5d77b400000000, 0xdb57595500000000,
+ 0x3ae10bba00000000, 0x583c8d5000000000, 0xb98adfbf00000000,
+ 0xc972036700000000, 0x28c4518800000000, 0x4a19d76200000000,
+ 0xabaf858d00000000, 0xcfa5ab6c00000000, 0x2e13f98300000000,
+ 0x4cce7f6900000000, 0xad782d8600000000, 0xc5dc527000000000,
+ 0x246a009f00000000, 0x46b7867500000000, 0xa701d49a00000000,
+ 0xc30bfa7b00000000, 0x22bda89400000000, 0x40602e7e00000000,
+ 0xa1d67c9100000000},
+ {0x0000000000000000, 0x5880e2d700000000, 0xf106b47400000000,
+ 0xa98656a300000000, 0xe20d68e900000000, 0xba8d8a3e00000000,
+ 0x130bdc9d00000000, 0x4b8b3e4a00000000, 0x851da10900000000,
+ 0xdd9d43de00000000, 0x741b157d00000000, 0x2c9bf7aa00000000,
+ 0x6710c9e000000000, 0x3f902b3700000000, 0x96167d9400000000,
+ 0xce969f4300000000, 0x0a3b421300000000, 0x52bba0c400000000,
+ 0xfb3df66700000000, 0xa3bd14b000000000, 0xe8362afa00000000,
+ 0xb0b6c82d00000000, 0x19309e8e00000000, 0x41b07c5900000000,
+ 0x8f26e31a00000000, 0xd7a601cd00000000, 0x7e20576e00000000,
+ 0x26a0b5b900000000, 0x6d2b8bf300000000, 0x35ab692400000000,
+ 0x9c2d3f8700000000, 0xc4addd5000000000, 0x1476842600000000,
+ 0x4cf666f100000000, 0xe570305200000000, 0xbdf0d28500000000,
+ 0xf67beccf00000000, 0xaefb0e1800000000, 0x077d58bb00000000,
+ 0x5ffdba6c00000000, 0x916b252f00000000, 0xc9ebc7f800000000,
+ 0x606d915b00000000, 0x38ed738c00000000, 0x73664dc600000000,
+ 0x2be6af1100000000, 0x8260f9b200000000, 0xdae01b6500000000,
+ 0x1e4dc63500000000, 0x46cd24e200000000, 0xef4b724100000000,
+ 0xb7cb909600000000, 0xfc40aedc00000000, 0xa4c04c0b00000000,
+ 0x0d461aa800000000, 0x55c6f87f00000000, 0x9b50673c00000000,
+ 0xc3d085eb00000000, 0x6a56d34800000000, 0x32d6319f00000000,
+ 0x795d0fd500000000, 0x21dded0200000000, 0x885bbba100000000,
+ 0xd0db597600000000, 0x28ec084d00000000, 0x706cea9a00000000,
+ 0xd9eabc3900000000, 0x816a5eee00000000, 0xcae160a400000000,
+ 0x9261827300000000, 0x3be7d4d000000000, 0x6367360700000000,
+ 0xadf1a94400000000, 0xf5714b9300000000, 0x5cf71d3000000000,
+ 0x0477ffe700000000, 0x4ffcc1ad00000000, 0x177c237a00000000,
+ 0xbefa75d900000000, 0xe67a970e00000000, 0x22d74a5e00000000,
+ 0x7a57a88900000000, 0xd3d1fe2a00000000, 0x8b511cfd00000000,
+ 0xc0da22b700000000, 0x985ac06000000000, 0x31dc96c300000000,
+ 0x695c741400000000, 0xa7caeb5700000000, 0xff4a098000000000,
+ 0x56cc5f2300000000, 0x0e4cbdf400000000, 0x45c783be00000000,
+ 0x1d47616900000000, 0xb4c137ca00000000, 0xec41d51d00000000,
+ 0x3c9a8c6b00000000, 0x641a6ebc00000000, 0xcd9c381f00000000,
+ 0x951cdac800000000, 0xde97e48200000000, 0x8617065500000000,
+ 0x2f9150f600000000, 0x7711b22100000000, 0xb9872d6200000000,
+ 0xe107cfb500000000, 0x4881991600000000, 0x10017bc100000000,
+ 0x5b8a458b00000000, 0x030aa75c00000000, 0xaa8cf1ff00000000,
+ 0xf20c132800000000, 0x36a1ce7800000000, 0x6e212caf00000000,
+ 0xc7a77a0c00000000, 0x9f2798db00000000, 0xd4aca69100000000,
+ 0x8c2c444600000000, 0x25aa12e500000000, 0x7d2af03200000000,
+ 0xb3bc6f7100000000, 0xeb3c8da600000000, 0x42badb0500000000,
+ 0x1a3a39d200000000, 0x51b1079800000000, 0x0931e54f00000000,
+ 0xa0b7b3ec00000000, 0xf837513b00000000, 0x50d8119a00000000,
+ 0x0858f34d00000000, 0xa1dea5ee00000000, 0xf95e473900000000,
+ 0xb2d5797300000000, 0xea559ba400000000, 0x43d3cd0700000000,
+ 0x1b532fd000000000, 0xd5c5b09300000000, 0x8d45524400000000,
+ 0x24c304e700000000, 0x7c43e63000000000, 0x37c8d87a00000000,
+ 0x6f483aad00000000, 0xc6ce6c0e00000000, 0x9e4e8ed900000000,
+ 0x5ae3538900000000, 0x0263b15e00000000, 0xabe5e7fd00000000,
+ 0xf365052a00000000, 0xb8ee3b6000000000, 0xe06ed9b700000000,
+ 0x49e88f1400000000, 0x11686dc300000000, 0xdffef28000000000,
+ 0x877e105700000000, 0x2ef846f400000000, 0x7678a42300000000,
+ 0x3df39a6900000000, 0x657378be00000000, 0xccf52e1d00000000,
+ 0x9475ccca00000000, 0x44ae95bc00000000, 0x1c2e776b00000000,
+ 0xb5a821c800000000, 0xed28c31f00000000, 0xa6a3fd5500000000,
+ 0xfe231f8200000000, 0x57a5492100000000, 0x0f25abf600000000,
+ 0xc1b334b500000000, 0x9933d66200000000, 0x30b580c100000000,
+ 0x6835621600000000, 0x23be5c5c00000000, 0x7b3ebe8b00000000,
+ 0xd2b8e82800000000, 0x8a380aff00000000, 0x4e95d7af00000000,
+ 0x1615357800000000, 0xbf9363db00000000, 0xe713810c00000000,
+ 0xac98bf4600000000, 0xf4185d9100000000, 0x5d9e0b3200000000,
+ 0x051ee9e500000000, 0xcb8876a600000000, 0x9308947100000000,
+ 0x3a8ec2d200000000, 0x620e200500000000, 0x29851e4f00000000,
+ 0x7105fc9800000000, 0xd883aa3b00000000, 0x800348ec00000000,
+ 0x783419d700000000, 0x20b4fb0000000000, 0x8932ada300000000,
+ 0xd1b24f7400000000, 0x9a39713e00000000, 0xc2b993e900000000,
+ 0x6b3fc54a00000000, 0x33bf279d00000000, 0xfd29b8de00000000,
+ 0xa5a95a0900000000, 0x0c2f0caa00000000, 0x54afee7d00000000,
+ 0x1f24d03700000000, 0x47a432e000000000, 0xee22644300000000,
+ 0xb6a2869400000000, 0x720f5bc400000000, 0x2a8fb91300000000,
+ 0x8309efb000000000, 0xdb890d6700000000, 0x9002332d00000000,
+ 0xc882d1fa00000000, 0x6104875900000000, 0x3984658e00000000,
+ 0xf712facd00000000, 0xaf92181a00000000, 0x06144eb900000000,
+ 0x5e94ac6e00000000, 0x151f922400000000, 0x4d9f70f300000000,
+ 0xe419265000000000, 0xbc99c48700000000, 0x6c429df100000000,
+ 0x34c27f2600000000, 0x9d44298500000000, 0xc5c4cb5200000000,
+ 0x8e4ff51800000000, 0xd6cf17cf00000000, 0x7f49416c00000000,
+ 0x27c9a3bb00000000, 0xe95f3cf800000000, 0xb1dfde2f00000000,
+ 0x1859888c00000000, 0x40d96a5b00000000, 0x0b52541100000000,
+ 0x53d2b6c600000000, 0xfa54e06500000000, 0xa2d402b200000000,
+ 0x6679dfe200000000, 0x3ef93d3500000000, 0x977f6b9600000000,
+ 0xcfff894100000000, 0x8474b70b00000000, 0xdcf455dc00000000,
+ 0x7572037f00000000, 0x2df2e1a800000000, 0xe3647eeb00000000,
+ 0xbbe49c3c00000000, 0x1262ca9f00000000, 0x4ae2284800000000,
+ 0x0169160200000000, 0x59e9f4d500000000, 0xf06fa27600000000,
+ 0xa8ef40a100000000},
+ {0x0000000000000000, 0x463b676500000000, 0x8c76ceca00000000,
+ 0xca4da9af00000000, 0x59ebed4e00000000, 0x1fd08a2b00000000,
+ 0xd59d238400000000, 0x93a644e100000000, 0xb2d6db9d00000000,
+ 0xf4edbcf800000000, 0x3ea0155700000000, 0x789b723200000000,
+ 0xeb3d36d300000000, 0xad0651b600000000, 0x674bf81900000000,
+ 0x21709f7c00000000, 0x25abc6e000000000, 0x6390a18500000000,
+ 0xa9dd082a00000000, 0xefe66f4f00000000, 0x7c402bae00000000,
+ 0x3a7b4ccb00000000, 0xf036e56400000000, 0xb60d820100000000,
+ 0x977d1d7d00000000, 0xd1467a1800000000, 0x1b0bd3b700000000,
+ 0x5d30b4d200000000, 0xce96f03300000000, 0x88ad975600000000,
+ 0x42e03ef900000000, 0x04db599c00000000, 0x0b50fc1a00000000,
+ 0x4d6b9b7f00000000, 0x872632d000000000, 0xc11d55b500000000,
+ 0x52bb115400000000, 0x1480763100000000, 0xdecddf9e00000000,
+ 0x98f6b8fb00000000, 0xb986278700000000, 0xffbd40e200000000,
+ 0x35f0e94d00000000, 0x73cb8e2800000000, 0xe06dcac900000000,
+ 0xa656adac00000000, 0x6c1b040300000000, 0x2a20636600000000,
+ 0x2efb3afa00000000, 0x68c05d9f00000000, 0xa28df43000000000,
+ 0xe4b6935500000000, 0x7710d7b400000000, 0x312bb0d100000000,
+ 0xfb66197e00000000, 0xbd5d7e1b00000000, 0x9c2de16700000000,
+ 0xda16860200000000, 0x105b2fad00000000, 0x566048c800000000,
+ 0xc5c60c2900000000, 0x83fd6b4c00000000, 0x49b0c2e300000000,
+ 0x0f8ba58600000000, 0x16a0f83500000000, 0x509b9f5000000000,
+ 0x9ad636ff00000000, 0xdced519a00000000, 0x4f4b157b00000000,
+ 0x0970721e00000000, 0xc33ddbb100000000, 0x8506bcd400000000,
+ 0xa47623a800000000, 0xe24d44cd00000000, 0x2800ed6200000000,
+ 0x6e3b8a0700000000, 0xfd9dcee600000000, 0xbba6a98300000000,
+ 0x71eb002c00000000, 0x37d0674900000000, 0x330b3ed500000000,
+ 0x753059b000000000, 0xbf7df01f00000000, 0xf946977a00000000,
+ 0x6ae0d39b00000000, 0x2cdbb4fe00000000, 0xe6961d5100000000,
+ 0xa0ad7a3400000000, 0x81dde54800000000, 0xc7e6822d00000000,
+ 0x0dab2b8200000000, 0x4b904ce700000000, 0xd836080600000000,
+ 0x9e0d6f6300000000, 0x5440c6cc00000000, 0x127ba1a900000000,
+ 0x1df0042f00000000, 0x5bcb634a00000000, 0x9186cae500000000,
+ 0xd7bdad8000000000, 0x441be96100000000, 0x02208e0400000000,
+ 0xc86d27ab00000000, 0x8e5640ce00000000, 0xaf26dfb200000000,
+ 0xe91db8d700000000, 0x2350117800000000, 0x656b761d00000000,
+ 0xf6cd32fc00000000, 0xb0f6559900000000, 0x7abbfc3600000000,
+ 0x3c809b5300000000, 0x385bc2cf00000000, 0x7e60a5aa00000000,
+ 0xb42d0c0500000000, 0xf2166b6000000000, 0x61b02f8100000000,
+ 0x278b48e400000000, 0xedc6e14b00000000, 0xabfd862e00000000,
+ 0x8a8d195200000000, 0xccb67e3700000000, 0x06fbd79800000000,
+ 0x40c0b0fd00000000, 0xd366f41c00000000, 0x955d937900000000,
+ 0x5f103ad600000000, 0x192b5db300000000, 0x2c40f16b00000000,
+ 0x6a7b960e00000000, 0xa0363fa100000000, 0xe60d58c400000000,
+ 0x75ab1c2500000000, 0x33907b4000000000, 0xf9ddd2ef00000000,
+ 0xbfe6b58a00000000, 0x9e962af600000000, 0xd8ad4d9300000000,
+ 0x12e0e43c00000000, 0x54db835900000000, 0xc77dc7b800000000,
+ 0x8146a0dd00000000, 0x4b0b097200000000, 0x0d306e1700000000,
+ 0x09eb378b00000000, 0x4fd050ee00000000, 0x859df94100000000,
+ 0xc3a69e2400000000, 0x5000dac500000000, 0x163bbda000000000,
+ 0xdc76140f00000000, 0x9a4d736a00000000, 0xbb3dec1600000000,
+ 0xfd068b7300000000, 0x374b22dc00000000, 0x717045b900000000,
+ 0xe2d6015800000000, 0xa4ed663d00000000, 0x6ea0cf9200000000,
+ 0x289ba8f700000000, 0x27100d7100000000, 0x612b6a1400000000,
+ 0xab66c3bb00000000, 0xed5da4de00000000, 0x7efbe03f00000000,
+ 0x38c0875a00000000, 0xf28d2ef500000000, 0xb4b6499000000000,
+ 0x95c6d6ec00000000, 0xd3fdb18900000000, 0x19b0182600000000,
+ 0x5f8b7f4300000000, 0xcc2d3ba200000000, 0x8a165cc700000000,
+ 0x405bf56800000000, 0x0660920d00000000, 0x02bbcb9100000000,
+ 0x4480acf400000000, 0x8ecd055b00000000, 0xc8f6623e00000000,
+ 0x5b5026df00000000, 0x1d6b41ba00000000, 0xd726e81500000000,
+ 0x911d8f7000000000, 0xb06d100c00000000, 0xf656776900000000,
+ 0x3c1bdec600000000, 0x7a20b9a300000000, 0xe986fd4200000000,
+ 0xafbd9a2700000000, 0x65f0338800000000, 0x23cb54ed00000000,
+ 0x3ae0095e00000000, 0x7cdb6e3b00000000, 0xb696c79400000000,
+ 0xf0ada0f100000000, 0x630be41000000000, 0x2530837500000000,
+ 0xef7d2ada00000000, 0xa9464dbf00000000, 0x8836d2c300000000,
+ 0xce0db5a600000000, 0x04401c0900000000, 0x427b7b6c00000000,
+ 0xd1dd3f8d00000000, 0x97e658e800000000, 0x5dabf14700000000,
+ 0x1b90962200000000, 0x1f4bcfbe00000000, 0x5970a8db00000000,
+ 0x933d017400000000, 0xd506661100000000, 0x46a022f000000000,
+ 0x009b459500000000, 0xcad6ec3a00000000, 0x8ced8b5f00000000,
+ 0xad9d142300000000, 0xeba6734600000000, 0x21ebdae900000000,
+ 0x67d0bd8c00000000, 0xf476f96d00000000, 0xb24d9e0800000000,
+ 0x780037a700000000, 0x3e3b50c200000000, 0x31b0f54400000000,
+ 0x778b922100000000, 0xbdc63b8e00000000, 0xfbfd5ceb00000000,
+ 0x685b180a00000000, 0x2e607f6f00000000, 0xe42dd6c000000000,
+ 0xa216b1a500000000, 0x83662ed900000000, 0xc55d49bc00000000,
+ 0x0f10e01300000000, 0x492b877600000000, 0xda8dc39700000000,
+ 0x9cb6a4f200000000, 0x56fb0d5d00000000, 0x10c06a3800000000,
+ 0x141b33a400000000, 0x522054c100000000, 0x986dfd6e00000000,
+ 0xde569a0b00000000, 0x4df0deea00000000, 0x0bcbb98f00000000,
+ 0xc186102000000000, 0x87bd774500000000, 0xa6cde83900000000,
+ 0xe0f68f5c00000000, 0x2abb26f300000000, 0x6c80419600000000,
+ 0xff26057700000000, 0xb91d621200000000, 0x7350cbbd00000000,
+ 0x356bacd800000000},
+ {0x0000000000000000, 0x9e83da9f00000000, 0x7d01c4e400000000,
+ 0xe3821e7b00000000, 0xbb04f91200000000, 0x2587238d00000000,
+ 0xc6053df600000000, 0x5886e76900000000, 0x7609f22500000000,
+ 0xe88a28ba00000000, 0x0b0836c100000000, 0x958bec5e00000000,
+ 0xcd0d0b3700000000, 0x538ed1a800000000, 0xb00ccfd300000000,
+ 0x2e8f154c00000000, 0xec12e44b00000000, 0x72913ed400000000,
+ 0x911320af00000000, 0x0f90fa3000000000, 0x57161d5900000000,
+ 0xc995c7c600000000, 0x2a17d9bd00000000, 0xb494032200000000,
+ 0x9a1b166e00000000, 0x0498ccf100000000, 0xe71ad28a00000000,
+ 0x7999081500000000, 0x211fef7c00000000, 0xbf9c35e300000000,
+ 0x5c1e2b9800000000, 0xc29df10700000000, 0xd825c89700000000,
+ 0x46a6120800000000, 0xa5240c7300000000, 0x3ba7d6ec00000000,
+ 0x6321318500000000, 0xfda2eb1a00000000, 0x1e20f56100000000,
+ 0x80a32ffe00000000, 0xae2c3ab200000000, 0x30afe02d00000000,
+ 0xd32dfe5600000000, 0x4dae24c900000000, 0x1528c3a000000000,
+ 0x8bab193f00000000, 0x6829074400000000, 0xf6aadddb00000000,
+ 0x34372cdc00000000, 0xaab4f64300000000, 0x4936e83800000000,
+ 0xd7b532a700000000, 0x8f33d5ce00000000, 0x11b00f5100000000,
+ 0xf232112a00000000, 0x6cb1cbb500000000, 0x423edef900000000,
+ 0xdcbd046600000000, 0x3f3f1a1d00000000, 0xa1bcc08200000000,
+ 0xf93a27eb00000000, 0x67b9fd7400000000, 0x843be30f00000000,
+ 0x1ab8399000000000, 0xf14de1f400000000, 0x6fce3b6b00000000,
+ 0x8c4c251000000000, 0x12cfff8f00000000, 0x4a4918e600000000,
+ 0xd4cac27900000000, 0x3748dc0200000000, 0xa9cb069d00000000,
+ 0x874413d100000000, 0x19c7c94e00000000, 0xfa45d73500000000,
+ 0x64c60daa00000000, 0x3c40eac300000000, 0xa2c3305c00000000,
+ 0x41412e2700000000, 0xdfc2f4b800000000, 0x1d5f05bf00000000,
+ 0x83dcdf2000000000, 0x605ec15b00000000, 0xfedd1bc400000000,
+ 0xa65bfcad00000000, 0x38d8263200000000, 0xdb5a384900000000,
+ 0x45d9e2d600000000, 0x6b56f79a00000000, 0xf5d52d0500000000,
+ 0x1657337e00000000, 0x88d4e9e100000000, 0xd0520e8800000000,
+ 0x4ed1d41700000000, 0xad53ca6c00000000, 0x33d010f300000000,
+ 0x2968296300000000, 0xb7ebf3fc00000000, 0x5469ed8700000000,
+ 0xcaea371800000000, 0x926cd07100000000, 0x0cef0aee00000000,
+ 0xef6d149500000000, 0x71eece0a00000000, 0x5f61db4600000000,
+ 0xc1e201d900000000, 0x22601fa200000000, 0xbce3c53d00000000,
+ 0xe465225400000000, 0x7ae6f8cb00000000, 0x9964e6b000000000,
+ 0x07e73c2f00000000, 0xc57acd2800000000, 0x5bf917b700000000,
+ 0xb87b09cc00000000, 0x26f8d35300000000, 0x7e7e343a00000000,
+ 0xe0fdeea500000000, 0x037ff0de00000000, 0x9dfc2a4100000000,
+ 0xb3733f0d00000000, 0x2df0e59200000000, 0xce72fbe900000000,
+ 0x50f1217600000000, 0x0877c61f00000000, 0x96f41c8000000000,
+ 0x757602fb00000000, 0xebf5d86400000000, 0xa39db33200000000,
+ 0x3d1e69ad00000000, 0xde9c77d600000000, 0x401fad4900000000,
+ 0x18994a2000000000, 0x861a90bf00000000, 0x65988ec400000000,
+ 0xfb1b545b00000000, 0xd594411700000000, 0x4b179b8800000000,
+ 0xa89585f300000000, 0x36165f6c00000000, 0x6e90b80500000000,
+ 0xf013629a00000000, 0x13917ce100000000, 0x8d12a67e00000000,
+ 0x4f8f577900000000, 0xd10c8de600000000, 0x328e939d00000000,
+ 0xac0d490200000000, 0xf48bae6b00000000, 0x6a0874f400000000,
+ 0x898a6a8f00000000, 0x1709b01000000000, 0x3986a55c00000000,
+ 0xa7057fc300000000, 0x448761b800000000, 0xda04bb2700000000,
+ 0x82825c4e00000000, 0x1c0186d100000000, 0xff8398aa00000000,
+ 0x6100423500000000, 0x7bb87ba500000000, 0xe53ba13a00000000,
+ 0x06b9bf4100000000, 0x983a65de00000000, 0xc0bc82b700000000,
+ 0x5e3f582800000000, 0xbdbd465300000000, 0x233e9ccc00000000,
+ 0x0db1898000000000, 0x9332531f00000000, 0x70b04d6400000000,
+ 0xee3397fb00000000, 0xb6b5709200000000, 0x2836aa0d00000000,
+ 0xcbb4b47600000000, 0x55376ee900000000, 0x97aa9fee00000000,
+ 0x0929457100000000, 0xeaab5b0a00000000, 0x7428819500000000,
+ 0x2cae66fc00000000, 0xb22dbc6300000000, 0x51afa21800000000,
+ 0xcf2c788700000000, 0xe1a36dcb00000000, 0x7f20b75400000000,
+ 0x9ca2a92f00000000, 0x022173b000000000, 0x5aa794d900000000,
+ 0xc4244e4600000000, 0x27a6503d00000000, 0xb9258aa200000000,
+ 0x52d052c600000000, 0xcc53885900000000, 0x2fd1962200000000,
+ 0xb1524cbd00000000, 0xe9d4abd400000000, 0x7757714b00000000,
+ 0x94d56f3000000000, 0x0a56b5af00000000, 0x24d9a0e300000000,
+ 0xba5a7a7c00000000, 0x59d8640700000000, 0xc75bbe9800000000,
+ 0x9fdd59f100000000, 0x015e836e00000000, 0xe2dc9d1500000000,
+ 0x7c5f478a00000000, 0xbec2b68d00000000, 0x20416c1200000000,
+ 0xc3c3726900000000, 0x5d40a8f600000000, 0x05c64f9f00000000,
+ 0x9b45950000000000, 0x78c78b7b00000000, 0xe64451e400000000,
+ 0xc8cb44a800000000, 0x56489e3700000000, 0xb5ca804c00000000,
+ 0x2b495ad300000000, 0x73cfbdba00000000, 0xed4c672500000000,
+ 0x0ece795e00000000, 0x904da3c100000000, 0x8af59a5100000000,
+ 0x147640ce00000000, 0xf7f45eb500000000, 0x6977842a00000000,
+ 0x31f1634300000000, 0xaf72b9dc00000000, 0x4cf0a7a700000000,
+ 0xd2737d3800000000, 0xfcfc687400000000, 0x627fb2eb00000000,
+ 0x81fdac9000000000, 0x1f7e760f00000000, 0x47f8916600000000,
+ 0xd97b4bf900000000, 0x3af9558200000000, 0xa47a8f1d00000000,
+ 0x66e77e1a00000000, 0xf864a48500000000, 0x1be6bafe00000000,
+ 0x8565606100000000, 0xdde3870800000000, 0x43605d9700000000,
+ 0xa0e243ec00000000, 0x3e61997300000000, 0x10ee8c3f00000000,
+ 0x8e6d56a000000000, 0x6def48db00000000, 0xf36c924400000000,
+ 0xabea752d00000000, 0x3569afb200000000, 0xd6ebb1c900000000,
+ 0x48686b5600000000},
+ {0x0000000000000000, 0xc064281700000000, 0x80c9502e00000000,
+ 0x40ad783900000000, 0x0093a15c00000000, 0xc0f7894b00000000,
+ 0x805af17200000000, 0x403ed96500000000, 0x002643b900000000,
+ 0xc0426bae00000000, 0x80ef139700000000, 0x408b3b8000000000,
+ 0x00b5e2e500000000, 0xc0d1caf200000000, 0x807cb2cb00000000,
+ 0x40189adc00000000, 0x414af7a900000000, 0x812edfbe00000000,
+ 0xc183a78700000000, 0x01e78f9000000000, 0x41d956f500000000,
+ 0x81bd7ee200000000, 0xc11006db00000000, 0x01742ecc00000000,
+ 0x416cb41000000000, 0x81089c0700000000, 0xc1a5e43e00000000,
+ 0x01c1cc2900000000, 0x41ff154c00000000, 0x819b3d5b00000000,
+ 0xc136456200000000, 0x01526d7500000000, 0xc3929f8800000000,
+ 0x03f6b79f00000000, 0x435bcfa600000000, 0x833fe7b100000000,
+ 0xc3013ed400000000, 0x036516c300000000, 0x43c86efa00000000,
+ 0x83ac46ed00000000, 0xc3b4dc3100000000, 0x03d0f42600000000,
+ 0x437d8c1f00000000, 0x8319a40800000000, 0xc3277d6d00000000,
+ 0x0343557a00000000, 0x43ee2d4300000000, 0x838a055400000000,
+ 0x82d8682100000000, 0x42bc403600000000, 0x0211380f00000000,
+ 0xc275101800000000, 0x824bc97d00000000, 0x422fe16a00000000,
+ 0x0282995300000000, 0xc2e6b14400000000, 0x82fe2b9800000000,
+ 0x429a038f00000000, 0x02377bb600000000, 0xc25353a100000000,
+ 0x826d8ac400000000, 0x4209a2d300000000, 0x02a4daea00000000,
+ 0xc2c0f2fd00000000, 0xc7234eca00000000, 0x074766dd00000000,
+ 0x47ea1ee400000000, 0x878e36f300000000, 0xc7b0ef9600000000,
+ 0x07d4c78100000000, 0x4779bfb800000000, 0x871d97af00000000,
+ 0xc7050d7300000000, 0x0761256400000000, 0x47cc5d5d00000000,
+ 0x87a8754a00000000, 0xc796ac2f00000000, 0x07f2843800000000,
+ 0x475ffc0100000000, 0x873bd41600000000, 0x8669b96300000000,
+ 0x460d917400000000, 0x06a0e94d00000000, 0xc6c4c15a00000000,
+ 0x86fa183f00000000, 0x469e302800000000, 0x0633481100000000,
+ 0xc657600600000000, 0x864ffada00000000, 0x462bd2cd00000000,
+ 0x0686aaf400000000, 0xc6e282e300000000, 0x86dc5b8600000000,
+ 0x46b8739100000000, 0x06150ba800000000, 0xc67123bf00000000,
+ 0x04b1d14200000000, 0xc4d5f95500000000, 0x8478816c00000000,
+ 0x441ca97b00000000, 0x0422701e00000000, 0xc446580900000000,
+ 0x84eb203000000000, 0x448f082700000000, 0x049792fb00000000,
+ 0xc4f3baec00000000, 0x845ec2d500000000, 0x443aeac200000000,
+ 0x040433a700000000, 0xc4601bb000000000, 0x84cd638900000000,
+ 0x44a94b9e00000000, 0x45fb26eb00000000, 0x859f0efc00000000,
+ 0xc53276c500000000, 0x05565ed200000000, 0x456887b700000000,
+ 0x850cafa000000000, 0xc5a1d79900000000, 0x05c5ff8e00000000,
+ 0x45dd655200000000, 0x85b94d4500000000, 0xc514357c00000000,
+ 0x05701d6b00000000, 0x454ec40e00000000, 0x852aec1900000000,
+ 0xc587942000000000, 0x05e3bc3700000000, 0xcf41ed4f00000000,
+ 0x0f25c55800000000, 0x4f88bd6100000000, 0x8fec957600000000,
+ 0xcfd24c1300000000, 0x0fb6640400000000, 0x4f1b1c3d00000000,
+ 0x8f7f342a00000000, 0xcf67aef600000000, 0x0f0386e100000000,
+ 0x4faefed800000000, 0x8fcad6cf00000000, 0xcff40faa00000000,
+ 0x0f9027bd00000000, 0x4f3d5f8400000000, 0x8f59779300000000,
+ 0x8e0b1ae600000000, 0x4e6f32f100000000, 0x0ec24ac800000000,
+ 0xcea662df00000000, 0x8e98bbba00000000, 0x4efc93ad00000000,
+ 0x0e51eb9400000000, 0xce35c38300000000, 0x8e2d595f00000000,
+ 0x4e49714800000000, 0x0ee4097100000000, 0xce80216600000000,
+ 0x8ebef80300000000, 0x4edad01400000000, 0x0e77a82d00000000,
+ 0xce13803a00000000, 0x0cd372c700000000, 0xccb75ad000000000,
+ 0x8c1a22e900000000, 0x4c7e0afe00000000, 0x0c40d39b00000000,
+ 0xcc24fb8c00000000, 0x8c8983b500000000, 0x4cedaba200000000,
+ 0x0cf5317e00000000, 0xcc91196900000000, 0x8c3c615000000000,
+ 0x4c58494700000000, 0x0c66902200000000, 0xcc02b83500000000,
+ 0x8cafc00c00000000, 0x4ccbe81b00000000, 0x4d99856e00000000,
+ 0x8dfdad7900000000, 0xcd50d54000000000, 0x0d34fd5700000000,
+ 0x4d0a243200000000, 0x8d6e0c2500000000, 0xcdc3741c00000000,
+ 0x0da75c0b00000000, 0x4dbfc6d700000000, 0x8ddbeec000000000,
+ 0xcd7696f900000000, 0x0d12beee00000000, 0x4d2c678b00000000,
+ 0x8d484f9c00000000, 0xcde537a500000000, 0x0d811fb200000000,
+ 0x0862a38500000000, 0xc8068b9200000000, 0x88abf3ab00000000,
+ 0x48cfdbbc00000000, 0x08f102d900000000, 0xc8952ace00000000,
+ 0x883852f700000000, 0x485c7ae000000000, 0x0844e03c00000000,
+ 0xc820c82b00000000, 0x888db01200000000, 0x48e9980500000000,
+ 0x08d7416000000000, 0xc8b3697700000000, 0x881e114e00000000,
+ 0x487a395900000000, 0x4928542c00000000, 0x894c7c3b00000000,
+ 0xc9e1040200000000, 0x09852c1500000000, 0x49bbf57000000000,
+ 0x89dfdd6700000000, 0xc972a55e00000000, 0x09168d4900000000,
+ 0x490e179500000000, 0x896a3f8200000000, 0xc9c747bb00000000,
+ 0x09a36fac00000000, 0x499db6c900000000, 0x89f99ede00000000,
+ 0xc954e6e700000000, 0x0930cef000000000, 0xcbf03c0d00000000,
+ 0x0b94141a00000000, 0x4b396c2300000000, 0x8b5d443400000000,
+ 0xcb639d5100000000, 0x0b07b54600000000, 0x4baacd7f00000000,
+ 0x8bcee56800000000, 0xcbd67fb400000000, 0x0bb257a300000000,
+ 0x4b1f2f9a00000000, 0x8b7b078d00000000, 0xcb45dee800000000,
+ 0x0b21f6ff00000000, 0x4b8c8ec600000000, 0x8be8a6d100000000,
+ 0x8abacba400000000, 0x4adee3b300000000, 0x0a739b8a00000000,
+ 0xca17b39d00000000, 0x8a296af800000000, 0x4a4d42ef00000000,
+ 0x0ae03ad600000000, 0xca8412c100000000, 0x8a9c881d00000000,
+ 0x4af8a00a00000000, 0x0a55d83300000000, 0xca31f02400000000,
+ 0x8a0f294100000000, 0x4a6b015600000000, 0x0ac6796f00000000,
+ 0xcaa2517800000000},
+ {0x0000000000000000, 0xd4ea739b00000000, 0xe9d396ed00000000,
+ 0x3d39e57600000000, 0x93a15c0000000000, 0x474b2f9b00000000,
+ 0x7a72caed00000000, 0xae98b97600000000, 0x2643b90000000000,
+ 0xf2a9ca9b00000000, 0xcf902fed00000000, 0x1b7a5c7600000000,
+ 0xb5e2e50000000000, 0x6108969b00000000, 0x5c3173ed00000000,
+ 0x88db007600000000, 0x4c86720100000000, 0x986c019a00000000,
+ 0xa555e4ec00000000, 0x71bf977700000000, 0xdf272e0100000000,
+ 0x0bcd5d9a00000000, 0x36f4b8ec00000000, 0xe21ecb7700000000,
+ 0x6ac5cb0100000000, 0xbe2fb89a00000000, 0x83165dec00000000,
+ 0x57fc2e7700000000, 0xf964970100000000, 0x2d8ee49a00000000,
+ 0x10b701ec00000000, 0xc45d727700000000, 0x980ce50200000000,
+ 0x4ce6969900000000, 0x71df73ef00000000, 0xa535007400000000,
+ 0x0badb90200000000, 0xdf47ca9900000000, 0xe27e2fef00000000,
+ 0x36945c7400000000, 0xbe4f5c0200000000, 0x6aa52f9900000000,
+ 0x579ccaef00000000, 0x8376b97400000000, 0x2dee000200000000,
+ 0xf904739900000000, 0xc43d96ef00000000, 0x10d7e57400000000,
+ 0xd48a970300000000, 0x0060e49800000000, 0x3d5901ee00000000,
+ 0xe9b3727500000000, 0x472bcb0300000000, 0x93c1b89800000000,
+ 0xaef85dee00000000, 0x7a122e7500000000, 0xf2c92e0300000000,
+ 0x26235d9800000000, 0x1b1ab8ee00000000, 0xcff0cb7500000000,
+ 0x6168720300000000, 0xb582019800000000, 0x88bbe4ee00000000,
+ 0x5c51977500000000, 0x3019ca0500000000, 0xe4f3b99e00000000,
+ 0xd9ca5ce800000000, 0x0d202f7300000000, 0xa3b8960500000000,
+ 0x7752e59e00000000, 0x4a6b00e800000000, 0x9e81737300000000,
+ 0x165a730500000000, 0xc2b0009e00000000, 0xff89e5e800000000,
+ 0x2b63967300000000, 0x85fb2f0500000000, 0x51115c9e00000000,
+ 0x6c28b9e800000000, 0xb8c2ca7300000000, 0x7c9fb80400000000,
+ 0xa875cb9f00000000, 0x954c2ee900000000, 0x41a65d7200000000,
+ 0xef3ee40400000000, 0x3bd4979f00000000, 0x06ed72e900000000,
+ 0xd207017200000000, 0x5adc010400000000, 0x8e36729f00000000,
+ 0xb30f97e900000000, 0x67e5e47200000000, 0xc97d5d0400000000,
+ 0x1d972e9f00000000, 0x20aecbe900000000, 0xf444b87200000000,
+ 0xa8152f0700000000, 0x7cff5c9c00000000, 0x41c6b9ea00000000,
+ 0x952cca7100000000, 0x3bb4730700000000, 0xef5e009c00000000,
+ 0xd267e5ea00000000, 0x068d967100000000, 0x8e56960700000000,
+ 0x5abce59c00000000, 0x678500ea00000000, 0xb36f737100000000,
+ 0x1df7ca0700000000, 0xc91db99c00000000, 0xf4245cea00000000,
+ 0x20ce2f7100000000, 0xe4935d0600000000, 0x30792e9d00000000,
+ 0x0d40cbeb00000000, 0xd9aab87000000000, 0x7732010600000000,
+ 0xa3d8729d00000000, 0x9ee197eb00000000, 0x4a0be47000000000,
+ 0xc2d0e40600000000, 0x163a979d00000000, 0x2b0372eb00000000,
+ 0xffe9017000000000, 0x5171b80600000000, 0x859bcb9d00000000,
+ 0xb8a22eeb00000000, 0x6c485d7000000000, 0x6032940b00000000,
+ 0xb4d8e79000000000, 0x89e102e600000000, 0x5d0b717d00000000,
+ 0xf393c80b00000000, 0x2779bb9000000000, 0x1a405ee600000000,
+ 0xceaa2d7d00000000, 0x46712d0b00000000, 0x929b5e9000000000,
+ 0xafa2bbe600000000, 0x7b48c87d00000000, 0xd5d0710b00000000,
+ 0x013a029000000000, 0x3c03e7e600000000, 0xe8e9947d00000000,
+ 0x2cb4e60a00000000, 0xf85e959100000000, 0xc56770e700000000,
+ 0x118d037c00000000, 0xbf15ba0a00000000, 0x6bffc99100000000,
+ 0x56c62ce700000000, 0x822c5f7c00000000, 0x0af75f0a00000000,
+ 0xde1d2c9100000000, 0xe324c9e700000000, 0x37ceba7c00000000,
+ 0x9956030a00000000, 0x4dbc709100000000, 0x708595e700000000,
+ 0xa46fe67c00000000, 0xf83e710900000000, 0x2cd4029200000000,
+ 0x11ede7e400000000, 0xc507947f00000000, 0x6b9f2d0900000000,
+ 0xbf755e9200000000, 0x824cbbe400000000, 0x56a6c87f00000000,
+ 0xde7dc80900000000, 0x0a97bb9200000000, 0x37ae5ee400000000,
+ 0xe3442d7f00000000, 0x4ddc940900000000, 0x9936e79200000000,
+ 0xa40f02e400000000, 0x70e5717f00000000, 0xb4b8030800000000,
+ 0x6052709300000000, 0x5d6b95e500000000, 0x8981e67e00000000,
+ 0x27195f0800000000, 0xf3f32c9300000000, 0xcecac9e500000000,
+ 0x1a20ba7e00000000, 0x92fbba0800000000, 0x4611c99300000000,
+ 0x7b282ce500000000, 0xafc25f7e00000000, 0x015ae60800000000,
+ 0xd5b0959300000000, 0xe88970e500000000, 0x3c63037e00000000,
+ 0x502b5e0e00000000, 0x84c12d9500000000, 0xb9f8c8e300000000,
+ 0x6d12bb7800000000, 0xc38a020e00000000, 0x1760719500000000,
+ 0x2a5994e300000000, 0xfeb3e77800000000, 0x7668e70e00000000,
+ 0xa282949500000000, 0x9fbb71e300000000, 0x4b51027800000000,
+ 0xe5c9bb0e00000000, 0x3123c89500000000, 0x0c1a2de300000000,
+ 0xd8f05e7800000000, 0x1cad2c0f00000000, 0xc8475f9400000000,
+ 0xf57ebae200000000, 0x2194c97900000000, 0x8f0c700f00000000,
+ 0x5be6039400000000, 0x66dfe6e200000000, 0xb235957900000000,
+ 0x3aee950f00000000, 0xee04e69400000000, 0xd33d03e200000000,
+ 0x07d7707900000000, 0xa94fc90f00000000, 0x7da5ba9400000000,
+ 0x409c5fe200000000, 0x94762c7900000000, 0xc827bb0c00000000,
+ 0x1ccdc89700000000, 0x21f42de100000000, 0xf51e5e7a00000000,
+ 0x5b86e70c00000000, 0x8f6c949700000000, 0xb25571e100000000,
+ 0x66bf027a00000000, 0xee64020c00000000, 0x3a8e719700000000,
+ 0x07b794e100000000, 0xd35de77a00000000, 0x7dc55e0c00000000,
+ 0xa92f2d9700000000, 0x9416c8e100000000, 0x40fcbb7a00000000,
+ 0x84a1c90d00000000, 0x504bba9600000000, 0x6d725fe000000000,
+ 0xb9982c7b00000000, 0x1700950d00000000, 0xc3eae69600000000,
+ 0xfed303e000000000, 0x2a39707b00000000, 0xa2e2700d00000000,
+ 0x7608039600000000, 0x4b31e6e000000000, 0x9fdb957b00000000,
+ 0x31432c0d00000000, 0xe5a95f9600000000, 0xd890bae000000000,
+ 0x0c7ac97b00000000},
+ {0x0000000000000000, 0x2765258100000000, 0x0fcc3bd900000000,
+ 0x28a91e5800000000, 0x5f9e066900000000, 0x78fb23e800000000,
+ 0x50523db000000000, 0x7737183100000000, 0xbe3c0dd200000000,
+ 0x9959285300000000, 0xb1f0360b00000000, 0x9695138a00000000,
+ 0xe1a20bbb00000000, 0xc6c72e3a00000000, 0xee6e306200000000,
+ 0xc90b15e300000000, 0x3d7f6b7f00000000, 0x1a1a4efe00000000,
+ 0x32b350a600000000, 0x15d6752700000000, 0x62e16d1600000000,
+ 0x4584489700000000, 0x6d2d56cf00000000, 0x4a48734e00000000,
+ 0x834366ad00000000, 0xa426432c00000000, 0x8c8f5d7400000000,
+ 0xabea78f500000000, 0xdcdd60c400000000, 0xfbb8454500000000,
+ 0xd3115b1d00000000, 0xf4747e9c00000000, 0x7afed6fe00000000,
+ 0x5d9bf37f00000000, 0x7532ed2700000000, 0x5257c8a600000000,
+ 0x2560d09700000000, 0x0205f51600000000, 0x2aaceb4e00000000,
+ 0x0dc9cecf00000000, 0xc4c2db2c00000000, 0xe3a7fead00000000,
+ 0xcb0ee0f500000000, 0xec6bc57400000000, 0x9b5cdd4500000000,
+ 0xbc39f8c400000000, 0x9490e69c00000000, 0xb3f5c31d00000000,
+ 0x4781bd8100000000, 0x60e4980000000000, 0x484d865800000000,
+ 0x6f28a3d900000000, 0x181fbbe800000000, 0x3f7a9e6900000000,
+ 0x17d3803100000000, 0x30b6a5b000000000, 0xf9bdb05300000000,
+ 0xded895d200000000, 0xf6718b8a00000000, 0xd114ae0b00000000,
+ 0xa623b63a00000000, 0x814693bb00000000, 0xa9ef8de300000000,
+ 0x8e8aa86200000000, 0xb5fadc2600000000, 0x929ff9a700000000,
+ 0xba36e7ff00000000, 0x9d53c27e00000000, 0xea64da4f00000000,
+ 0xcd01ffce00000000, 0xe5a8e19600000000, 0xc2cdc41700000000,
+ 0x0bc6d1f400000000, 0x2ca3f47500000000, 0x040aea2d00000000,
+ 0x236fcfac00000000, 0x5458d79d00000000, 0x733df21c00000000,
+ 0x5b94ec4400000000, 0x7cf1c9c500000000, 0x8885b75900000000,
+ 0xafe092d800000000, 0x87498c8000000000, 0xa02ca90100000000,
+ 0xd71bb13000000000, 0xf07e94b100000000, 0xd8d78ae900000000,
+ 0xffb2af6800000000, 0x36b9ba8b00000000, 0x11dc9f0a00000000,
+ 0x3975815200000000, 0x1e10a4d300000000, 0x6927bce200000000,
+ 0x4e42996300000000, 0x66eb873b00000000, 0x418ea2ba00000000,
+ 0xcf040ad800000000, 0xe8612f5900000000, 0xc0c8310100000000,
+ 0xe7ad148000000000, 0x909a0cb100000000, 0xb7ff293000000000,
+ 0x9f56376800000000, 0xb83312e900000000, 0x7138070a00000000,
+ 0x565d228b00000000, 0x7ef43cd300000000, 0x5991195200000000,
+ 0x2ea6016300000000, 0x09c324e200000000, 0x216a3aba00000000,
+ 0x060f1f3b00000000, 0xf27b61a700000000, 0xd51e442600000000,
+ 0xfdb75a7e00000000, 0xdad27fff00000000, 0xade567ce00000000,
+ 0x8a80424f00000000, 0xa2295c1700000000, 0x854c799600000000,
+ 0x4c476c7500000000, 0x6b2249f400000000, 0x438b57ac00000000,
+ 0x64ee722d00000000, 0x13d96a1c00000000, 0x34bc4f9d00000000,
+ 0x1c1551c500000000, 0x3b70744400000000, 0x6af5b94d00000000,
+ 0x4d909ccc00000000, 0x6539829400000000, 0x425ca71500000000,
+ 0x356bbf2400000000, 0x120e9aa500000000, 0x3aa784fd00000000,
+ 0x1dc2a17c00000000, 0xd4c9b49f00000000, 0xf3ac911e00000000,
+ 0xdb058f4600000000, 0xfc60aac700000000, 0x8b57b2f600000000,
+ 0xac32977700000000, 0x849b892f00000000, 0xa3feacae00000000,
+ 0x578ad23200000000, 0x70eff7b300000000, 0x5846e9eb00000000,
+ 0x7f23cc6a00000000, 0x0814d45b00000000, 0x2f71f1da00000000,
+ 0x07d8ef8200000000, 0x20bdca0300000000, 0xe9b6dfe000000000,
+ 0xced3fa6100000000, 0xe67ae43900000000, 0xc11fc1b800000000,
+ 0xb628d98900000000, 0x914dfc0800000000, 0xb9e4e25000000000,
+ 0x9e81c7d100000000, 0x100b6fb300000000, 0x376e4a3200000000,
+ 0x1fc7546a00000000, 0x38a271eb00000000, 0x4f9569da00000000,
+ 0x68f04c5b00000000, 0x4059520300000000, 0x673c778200000000,
+ 0xae37626100000000, 0x895247e000000000, 0xa1fb59b800000000,
+ 0x869e7c3900000000, 0xf1a9640800000000, 0xd6cc418900000000,
+ 0xfe655fd100000000, 0xd9007a5000000000, 0x2d7404cc00000000,
+ 0x0a11214d00000000, 0x22b83f1500000000, 0x05dd1a9400000000,
+ 0x72ea02a500000000, 0x558f272400000000, 0x7d26397c00000000,
+ 0x5a431cfd00000000, 0x9348091e00000000, 0xb42d2c9f00000000,
+ 0x9c8432c700000000, 0xbbe1174600000000, 0xccd60f7700000000,
+ 0xebb32af600000000, 0xc31a34ae00000000, 0xe47f112f00000000,
+ 0xdf0f656b00000000, 0xf86a40ea00000000, 0xd0c35eb200000000,
+ 0xf7a67b3300000000, 0x8091630200000000, 0xa7f4468300000000,
+ 0x8f5d58db00000000, 0xa8387d5a00000000, 0x613368b900000000,
+ 0x46564d3800000000, 0x6eff536000000000, 0x499a76e100000000,
+ 0x3ead6ed000000000, 0x19c84b5100000000, 0x3161550900000000,
+ 0x1604708800000000, 0xe2700e1400000000, 0xc5152b9500000000,
+ 0xedbc35cd00000000, 0xcad9104c00000000, 0xbdee087d00000000,
+ 0x9a8b2dfc00000000, 0xb22233a400000000, 0x9547162500000000,
+ 0x5c4c03c600000000, 0x7b29264700000000, 0x5380381f00000000,
+ 0x74e51d9e00000000, 0x03d205af00000000, 0x24b7202e00000000,
+ 0x0c1e3e7600000000, 0x2b7b1bf700000000, 0xa5f1b39500000000,
+ 0x8294961400000000, 0xaa3d884c00000000, 0x8d58adcd00000000,
+ 0xfa6fb5fc00000000, 0xdd0a907d00000000, 0xf5a38e2500000000,
+ 0xd2c6aba400000000, 0x1bcdbe4700000000, 0x3ca89bc600000000,
+ 0x1401859e00000000, 0x3364a01f00000000, 0x4453b82e00000000,
+ 0x63369daf00000000, 0x4b9f83f700000000, 0x6cfaa67600000000,
+ 0x988ed8ea00000000, 0xbfebfd6b00000000, 0x9742e33300000000,
+ 0xb027c6b200000000, 0xc710de8300000000, 0xe075fb0200000000,
+ 0xc8dce55a00000000, 0xefb9c0db00000000, 0x26b2d53800000000,
+ 0x01d7f0b900000000, 0x297eeee100000000, 0x0e1bcb6000000000,
+ 0x792cd35100000000, 0x5e49f6d000000000, 0x76e0e88800000000,
+ 0x5185cd0900000000}};
+
+#else /* W == 4 */
+
+local const z_crc_t FAR crc_braid_table[][256] = {
+ {0x00000000, 0x9ba54c6f, 0xec3b9e9f, 0x779ed2f0, 0x03063b7f,
+ 0x98a37710, 0xef3da5e0, 0x7498e98f, 0x060c76fe, 0x9da93a91,
+ 0xea37e861, 0x7192a40e, 0x050a4d81, 0x9eaf01ee, 0xe931d31e,
+ 0x72949f71, 0x0c18edfc, 0x97bda193, 0xe0237363, 0x7b863f0c,
+ 0x0f1ed683, 0x94bb9aec, 0xe325481c, 0x78800473, 0x0a149b02,
+ 0x91b1d76d, 0xe62f059d, 0x7d8a49f2, 0x0912a07d, 0x92b7ec12,
+ 0xe5293ee2, 0x7e8c728d, 0x1831dbf8, 0x83949797, 0xf40a4567,
+ 0x6faf0908, 0x1b37e087, 0x8092ace8, 0xf70c7e18, 0x6ca93277,
+ 0x1e3dad06, 0x8598e169, 0xf2063399, 0x69a37ff6, 0x1d3b9679,
+ 0x869eda16, 0xf10008e6, 0x6aa54489, 0x14293604, 0x8f8c7a6b,
+ 0xf812a89b, 0x63b7e4f4, 0x172f0d7b, 0x8c8a4114, 0xfb1493e4,
+ 0x60b1df8b, 0x122540fa, 0x89800c95, 0xfe1ede65, 0x65bb920a,
+ 0x11237b85, 0x8a8637ea, 0xfd18e51a, 0x66bda975, 0x3063b7f0,
+ 0xabc6fb9f, 0xdc58296f, 0x47fd6500, 0x33658c8f, 0xa8c0c0e0,
+ 0xdf5e1210, 0x44fb5e7f, 0x366fc10e, 0xadca8d61, 0xda545f91,
+ 0x41f113fe, 0x3569fa71, 0xaeccb61e, 0xd95264ee, 0x42f72881,
+ 0x3c7b5a0c, 0xa7de1663, 0xd040c493, 0x4be588fc, 0x3f7d6173,
+ 0xa4d82d1c, 0xd346ffec, 0x48e3b383, 0x3a772cf2, 0xa1d2609d,
+ 0xd64cb26d, 0x4de9fe02, 0x3971178d, 0xa2d45be2, 0xd54a8912,
+ 0x4eefc57d, 0x28526c08, 0xb3f72067, 0xc469f297, 0x5fccbef8,
+ 0x2b545777, 0xb0f11b18, 0xc76fc9e8, 0x5cca8587, 0x2e5e1af6,
+ 0xb5fb5699, 0xc2658469, 0x59c0c806, 0x2d582189, 0xb6fd6de6,
+ 0xc163bf16, 0x5ac6f379, 0x244a81f4, 0xbfefcd9b, 0xc8711f6b,
+ 0x53d45304, 0x274cba8b, 0xbce9f6e4, 0xcb772414, 0x50d2687b,
+ 0x2246f70a, 0xb9e3bb65, 0xce7d6995, 0x55d825fa, 0x2140cc75,
+ 0xbae5801a, 0xcd7b52ea, 0x56de1e85, 0x60c76fe0, 0xfb62238f,
+ 0x8cfcf17f, 0x1759bd10, 0x63c1549f, 0xf86418f0, 0x8ffaca00,
+ 0x145f866f, 0x66cb191e, 0xfd6e5571, 0x8af08781, 0x1155cbee,
+ 0x65cd2261, 0xfe686e0e, 0x89f6bcfe, 0x1253f091, 0x6cdf821c,
+ 0xf77ace73, 0x80e41c83, 0x1b4150ec, 0x6fd9b963, 0xf47cf50c,
+ 0x83e227fc, 0x18476b93, 0x6ad3f4e2, 0xf176b88d, 0x86e86a7d,
+ 0x1d4d2612, 0x69d5cf9d, 0xf27083f2, 0x85ee5102, 0x1e4b1d6d,
+ 0x78f6b418, 0xe353f877, 0x94cd2a87, 0x0f6866e8, 0x7bf08f67,
+ 0xe055c308, 0x97cb11f8, 0x0c6e5d97, 0x7efac2e6, 0xe55f8e89,
+ 0x92c15c79, 0x09641016, 0x7dfcf999, 0xe659b5f6, 0x91c76706,
+ 0x0a622b69, 0x74ee59e4, 0xef4b158b, 0x98d5c77b, 0x03708b14,
+ 0x77e8629b, 0xec4d2ef4, 0x9bd3fc04, 0x0076b06b, 0x72e22f1a,
+ 0xe9476375, 0x9ed9b185, 0x057cfdea, 0x71e41465, 0xea41580a,
+ 0x9ddf8afa, 0x067ac695, 0x50a4d810, 0xcb01947f, 0xbc9f468f,
+ 0x273a0ae0, 0x53a2e36f, 0xc807af00, 0xbf997df0, 0x243c319f,
+ 0x56a8aeee, 0xcd0de281, 0xba933071, 0x21367c1e, 0x55ae9591,
+ 0xce0bd9fe, 0xb9950b0e, 0x22304761, 0x5cbc35ec, 0xc7197983,
+ 0xb087ab73, 0x2b22e71c, 0x5fba0e93, 0xc41f42fc, 0xb381900c,
+ 0x2824dc63, 0x5ab04312, 0xc1150f7d, 0xb68bdd8d, 0x2d2e91e2,
+ 0x59b6786d, 0xc2133402, 0xb58de6f2, 0x2e28aa9d, 0x489503e8,
+ 0xd3304f87, 0xa4ae9d77, 0x3f0bd118, 0x4b933897, 0xd03674f8,
+ 0xa7a8a608, 0x3c0dea67, 0x4e997516, 0xd53c3979, 0xa2a2eb89,
+ 0x3907a7e6, 0x4d9f4e69, 0xd63a0206, 0xa1a4d0f6, 0x3a019c99,
+ 0x448dee14, 0xdf28a27b, 0xa8b6708b, 0x33133ce4, 0x478bd56b,
+ 0xdc2e9904, 0xabb04bf4, 0x3015079b, 0x428198ea, 0xd924d485,
+ 0xaeba0675, 0x351f4a1a, 0x4187a395, 0xda22effa, 0xadbc3d0a,
+ 0x36197165},
+ {0x00000000, 0xc18edfc0, 0x586cb9c1, 0x99e26601, 0xb0d97382,
+ 0x7157ac42, 0xe8b5ca43, 0x293b1583, 0xbac3e145, 0x7b4d3e85,
+ 0xe2af5884, 0x23218744, 0x0a1a92c7, 0xcb944d07, 0x52762b06,
+ 0x93f8f4c6, 0xaef6c4cb, 0x6f781b0b, 0xf69a7d0a, 0x3714a2ca,
+ 0x1e2fb749, 0xdfa16889, 0x46430e88, 0x87cdd148, 0x1435258e,
+ 0xd5bbfa4e, 0x4c599c4f, 0x8dd7438f, 0xa4ec560c, 0x656289cc,
+ 0xfc80efcd, 0x3d0e300d, 0x869c8fd7, 0x47125017, 0xdef03616,
+ 0x1f7ee9d6, 0x3645fc55, 0xf7cb2395, 0x6e294594, 0xafa79a54,
+ 0x3c5f6e92, 0xfdd1b152, 0x6433d753, 0xa5bd0893, 0x8c861d10,
+ 0x4d08c2d0, 0xd4eaa4d1, 0x15647b11, 0x286a4b1c, 0xe9e494dc,
+ 0x7006f2dd, 0xb1882d1d, 0x98b3389e, 0x593de75e, 0xc0df815f,
+ 0x01515e9f, 0x92a9aa59, 0x53277599, 0xcac51398, 0x0b4bcc58,
+ 0x2270d9db, 0xe3fe061b, 0x7a1c601a, 0xbb92bfda, 0xd64819ef,
+ 0x17c6c62f, 0x8e24a02e, 0x4faa7fee, 0x66916a6d, 0xa71fb5ad,
+ 0x3efdd3ac, 0xff730c6c, 0x6c8bf8aa, 0xad05276a, 0x34e7416b,
+ 0xf5699eab, 0xdc528b28, 0x1ddc54e8, 0x843e32e9, 0x45b0ed29,
+ 0x78bedd24, 0xb93002e4, 0x20d264e5, 0xe15cbb25, 0xc867aea6,
+ 0x09e97166, 0x900b1767, 0x5185c8a7, 0xc27d3c61, 0x03f3e3a1,
+ 0x9a1185a0, 0x5b9f5a60, 0x72a44fe3, 0xb32a9023, 0x2ac8f622,
+ 0xeb4629e2, 0x50d49638, 0x915a49f8, 0x08b82ff9, 0xc936f039,
+ 0xe00de5ba, 0x21833a7a, 0xb8615c7b, 0x79ef83bb, 0xea17777d,
+ 0x2b99a8bd, 0xb27bcebc, 0x73f5117c, 0x5ace04ff, 0x9b40db3f,
+ 0x02a2bd3e, 0xc32c62fe, 0xfe2252f3, 0x3fac8d33, 0xa64eeb32,
+ 0x67c034f2, 0x4efb2171, 0x8f75feb1, 0x169798b0, 0xd7194770,
+ 0x44e1b3b6, 0x856f6c76, 0x1c8d0a77, 0xdd03d5b7, 0xf438c034,
+ 0x35b61ff4, 0xac5479f5, 0x6ddaa635, 0x77e1359f, 0xb66fea5f,
+ 0x2f8d8c5e, 0xee03539e, 0xc738461d, 0x06b699dd, 0x9f54ffdc,
+ 0x5eda201c, 0xcd22d4da, 0x0cac0b1a, 0x954e6d1b, 0x54c0b2db,
+ 0x7dfba758, 0xbc757898, 0x25971e99, 0xe419c159, 0xd917f154,
+ 0x18992e94, 0x817b4895, 0x40f59755, 0x69ce82d6, 0xa8405d16,
+ 0x31a23b17, 0xf02ce4d7, 0x63d41011, 0xa25acfd1, 0x3bb8a9d0,
+ 0xfa367610, 0xd30d6393, 0x1283bc53, 0x8b61da52, 0x4aef0592,
+ 0xf17dba48, 0x30f36588, 0xa9110389, 0x689fdc49, 0x41a4c9ca,
+ 0x802a160a, 0x19c8700b, 0xd846afcb, 0x4bbe5b0d, 0x8a3084cd,
+ 0x13d2e2cc, 0xd25c3d0c, 0xfb67288f, 0x3ae9f74f, 0xa30b914e,
+ 0x62854e8e, 0x5f8b7e83, 0x9e05a143, 0x07e7c742, 0xc6691882,
+ 0xef520d01, 0x2edcd2c1, 0xb73eb4c0, 0x76b06b00, 0xe5489fc6,
+ 0x24c64006, 0xbd242607, 0x7caaf9c7, 0x5591ec44, 0x941f3384,
+ 0x0dfd5585, 0xcc738a45, 0xa1a92c70, 0x6027f3b0, 0xf9c595b1,
+ 0x384b4a71, 0x11705ff2, 0xd0fe8032, 0x491ce633, 0x889239f3,
+ 0x1b6acd35, 0xdae412f5, 0x430674f4, 0x8288ab34, 0xabb3beb7,
+ 0x6a3d6177, 0xf3df0776, 0x3251d8b6, 0x0f5fe8bb, 0xced1377b,
+ 0x5733517a, 0x96bd8eba, 0xbf869b39, 0x7e0844f9, 0xe7ea22f8,
+ 0x2664fd38, 0xb59c09fe, 0x7412d63e, 0xedf0b03f, 0x2c7e6fff,
+ 0x05457a7c, 0xc4cba5bc, 0x5d29c3bd, 0x9ca71c7d, 0x2735a3a7,
+ 0xe6bb7c67, 0x7f591a66, 0xbed7c5a6, 0x97ecd025, 0x56620fe5,
+ 0xcf8069e4, 0x0e0eb624, 0x9df642e2, 0x5c789d22, 0xc59afb23,
+ 0x041424e3, 0x2d2f3160, 0xeca1eea0, 0x754388a1, 0xb4cd5761,
+ 0x89c3676c, 0x484db8ac, 0xd1afdead, 0x1021016d, 0x391a14ee,
+ 0xf894cb2e, 0x6176ad2f, 0xa0f872ef, 0x33008629, 0xf28e59e9,
+ 0x6b6c3fe8, 0xaae2e028, 0x83d9f5ab, 0x42572a6b, 0xdbb54c6a,
+ 0x1a3b93aa},
+ {0x00000000, 0xefc26b3e, 0x04f5d03d, 0xeb37bb03, 0x09eba07a,
+ 0xe629cb44, 0x0d1e7047, 0xe2dc1b79, 0x13d740f4, 0xfc152bca,
+ 0x172290c9, 0xf8e0fbf7, 0x1a3ce08e, 0xf5fe8bb0, 0x1ec930b3,
+ 0xf10b5b8d, 0x27ae81e8, 0xc86cead6, 0x235b51d5, 0xcc993aeb,
+ 0x2e452192, 0xc1874aac, 0x2ab0f1af, 0xc5729a91, 0x3479c11c,
+ 0xdbbbaa22, 0x308c1121, 0xdf4e7a1f, 0x3d926166, 0xd2500a58,
+ 0x3967b15b, 0xd6a5da65, 0x4f5d03d0, 0xa09f68ee, 0x4ba8d3ed,
+ 0xa46ab8d3, 0x46b6a3aa, 0xa974c894, 0x42437397, 0xad8118a9,
+ 0x5c8a4324, 0xb348281a, 0x587f9319, 0xb7bdf827, 0x5561e35e,
+ 0xbaa38860, 0x51943363, 0xbe56585d, 0x68f38238, 0x8731e906,
+ 0x6c065205, 0x83c4393b, 0x61182242, 0x8eda497c, 0x65edf27f,
+ 0x8a2f9941, 0x7b24c2cc, 0x94e6a9f2, 0x7fd112f1, 0x901379cf,
+ 0x72cf62b6, 0x9d0d0988, 0x763ab28b, 0x99f8d9b5, 0x9eba07a0,
+ 0x71786c9e, 0x9a4fd79d, 0x758dbca3, 0x9751a7da, 0x7893cce4,
+ 0x93a477e7, 0x7c661cd9, 0x8d6d4754, 0x62af2c6a, 0x89989769,
+ 0x665afc57, 0x8486e72e, 0x6b448c10, 0x80733713, 0x6fb15c2d,
+ 0xb9148648, 0x56d6ed76, 0xbde15675, 0x52233d4b, 0xb0ff2632,
+ 0x5f3d4d0c, 0xb40af60f, 0x5bc89d31, 0xaac3c6bc, 0x4501ad82,
+ 0xae361681, 0x41f47dbf, 0xa32866c6, 0x4cea0df8, 0xa7ddb6fb,
+ 0x481fddc5, 0xd1e70470, 0x3e256f4e, 0xd512d44d, 0x3ad0bf73,
+ 0xd80ca40a, 0x37cecf34, 0xdcf97437, 0x333b1f09, 0xc2304484,
+ 0x2df22fba, 0xc6c594b9, 0x2907ff87, 0xcbdbe4fe, 0x24198fc0,
+ 0xcf2e34c3, 0x20ec5ffd, 0xf6498598, 0x198beea6, 0xf2bc55a5,
+ 0x1d7e3e9b, 0xffa225e2, 0x10604edc, 0xfb57f5df, 0x14959ee1,
+ 0xe59ec56c, 0x0a5cae52, 0xe16b1551, 0x0ea97e6f, 0xec756516,
+ 0x03b70e28, 0xe880b52b, 0x0742de15, 0xe6050901, 0x09c7623f,
+ 0xe2f0d93c, 0x0d32b202, 0xefeea97b, 0x002cc245, 0xeb1b7946,
+ 0x04d91278, 0xf5d249f5, 0x1a1022cb, 0xf12799c8, 0x1ee5f2f6,
+ 0xfc39e98f, 0x13fb82b1, 0xf8cc39b2, 0x170e528c, 0xc1ab88e9,
+ 0x2e69e3d7, 0xc55e58d4, 0x2a9c33ea, 0xc8402893, 0x278243ad,
+ 0xccb5f8ae, 0x23779390, 0xd27cc81d, 0x3dbea323, 0xd6891820,
+ 0x394b731e, 0xdb976867, 0x34550359, 0xdf62b85a, 0x30a0d364,
+ 0xa9580ad1, 0x469a61ef, 0xadaddaec, 0x426fb1d2, 0xa0b3aaab,
+ 0x4f71c195, 0xa4467a96, 0x4b8411a8, 0xba8f4a25, 0x554d211b,
+ 0xbe7a9a18, 0x51b8f126, 0xb364ea5f, 0x5ca68161, 0xb7913a62,
+ 0x5853515c, 0x8ef68b39, 0x6134e007, 0x8a035b04, 0x65c1303a,
+ 0x871d2b43, 0x68df407d, 0x83e8fb7e, 0x6c2a9040, 0x9d21cbcd,
+ 0x72e3a0f3, 0x99d41bf0, 0x761670ce, 0x94ca6bb7, 0x7b080089,
+ 0x903fbb8a, 0x7ffdd0b4, 0x78bf0ea1, 0x977d659f, 0x7c4ade9c,
+ 0x9388b5a2, 0x7154aedb, 0x9e96c5e5, 0x75a17ee6, 0x9a6315d8,
+ 0x6b684e55, 0x84aa256b, 0x6f9d9e68, 0x805ff556, 0x6283ee2f,
+ 0x8d418511, 0x66763e12, 0x89b4552c, 0x5f118f49, 0xb0d3e477,
+ 0x5be45f74, 0xb426344a, 0x56fa2f33, 0xb938440d, 0x520fff0e,
+ 0xbdcd9430, 0x4cc6cfbd, 0xa304a483, 0x48331f80, 0xa7f174be,
+ 0x452d6fc7, 0xaaef04f9, 0x41d8bffa, 0xae1ad4c4, 0x37e20d71,
+ 0xd820664f, 0x3317dd4c, 0xdcd5b672, 0x3e09ad0b, 0xd1cbc635,
+ 0x3afc7d36, 0xd53e1608, 0x24354d85, 0xcbf726bb, 0x20c09db8,
+ 0xcf02f686, 0x2ddeedff, 0xc21c86c1, 0x292b3dc2, 0xc6e956fc,
+ 0x104c8c99, 0xff8ee7a7, 0x14b95ca4, 0xfb7b379a, 0x19a72ce3,
+ 0xf66547dd, 0x1d52fcde, 0xf29097e0, 0x039bcc6d, 0xec59a753,
+ 0x076e1c50, 0xe8ac776e, 0x0a706c17, 0xe5b20729, 0x0e85bc2a,
+ 0xe147d714},
+ {0x00000000, 0x177b1443, 0x2ef62886, 0x398d3cc5, 0x5dec510c,
+ 0x4a97454f, 0x731a798a, 0x64616dc9, 0xbbd8a218, 0xaca3b65b,
+ 0x952e8a9e, 0x82559edd, 0xe634f314, 0xf14fe757, 0xc8c2db92,
+ 0xdfb9cfd1, 0xacc04271, 0xbbbb5632, 0x82366af7, 0x954d7eb4,
+ 0xf12c137d, 0xe657073e, 0xdfda3bfb, 0xc8a12fb8, 0x1718e069,
+ 0x0063f42a, 0x39eec8ef, 0x2e95dcac, 0x4af4b165, 0x5d8fa526,
+ 0x640299e3, 0x73798da0, 0x82f182a3, 0x958a96e0, 0xac07aa25,
+ 0xbb7cbe66, 0xdf1dd3af, 0xc866c7ec, 0xf1ebfb29, 0xe690ef6a,
+ 0x392920bb, 0x2e5234f8, 0x17df083d, 0x00a41c7e, 0x64c571b7,
+ 0x73be65f4, 0x4a335931, 0x5d484d72, 0x2e31c0d2, 0x394ad491,
+ 0x00c7e854, 0x17bcfc17, 0x73dd91de, 0x64a6859d, 0x5d2bb958,
+ 0x4a50ad1b, 0x95e962ca, 0x82927689, 0xbb1f4a4c, 0xac645e0f,
+ 0xc80533c6, 0xdf7e2785, 0xe6f31b40, 0xf1880f03, 0xde920307,
+ 0xc9e91744, 0xf0642b81, 0xe71f3fc2, 0x837e520b, 0x94054648,
+ 0xad887a8d, 0xbaf36ece, 0x654aa11f, 0x7231b55c, 0x4bbc8999,
+ 0x5cc79dda, 0x38a6f013, 0x2fdde450, 0x1650d895, 0x012bccd6,
+ 0x72524176, 0x65295535, 0x5ca469f0, 0x4bdf7db3, 0x2fbe107a,
+ 0x38c50439, 0x014838fc, 0x16332cbf, 0xc98ae36e, 0xdef1f72d,
+ 0xe77ccbe8, 0xf007dfab, 0x9466b262, 0x831da621, 0xba909ae4,
+ 0xadeb8ea7, 0x5c6381a4, 0x4b1895e7, 0x7295a922, 0x65eebd61,
+ 0x018fd0a8, 0x16f4c4eb, 0x2f79f82e, 0x3802ec6d, 0xe7bb23bc,
+ 0xf0c037ff, 0xc94d0b3a, 0xde361f79, 0xba5772b0, 0xad2c66f3,
+ 0x94a15a36, 0x83da4e75, 0xf0a3c3d5, 0xe7d8d796, 0xde55eb53,
+ 0xc92eff10, 0xad4f92d9, 0xba34869a, 0x83b9ba5f, 0x94c2ae1c,
+ 0x4b7b61cd, 0x5c00758e, 0x658d494b, 0x72f65d08, 0x169730c1,
+ 0x01ec2482, 0x38611847, 0x2f1a0c04, 0x6655004f, 0x712e140c,
+ 0x48a328c9, 0x5fd83c8a, 0x3bb95143, 0x2cc24500, 0x154f79c5,
+ 0x02346d86, 0xdd8da257, 0xcaf6b614, 0xf37b8ad1, 0xe4009e92,
+ 0x8061f35b, 0x971ae718, 0xae97dbdd, 0xb9eccf9e, 0xca95423e,
+ 0xddee567d, 0xe4636ab8, 0xf3187efb, 0x97791332, 0x80020771,
+ 0xb98f3bb4, 0xaef42ff7, 0x714de026, 0x6636f465, 0x5fbbc8a0,
+ 0x48c0dce3, 0x2ca1b12a, 0x3bdaa569, 0x025799ac, 0x152c8def,
+ 0xe4a482ec, 0xf3df96af, 0xca52aa6a, 0xdd29be29, 0xb948d3e0,
+ 0xae33c7a3, 0x97befb66, 0x80c5ef25, 0x5f7c20f4, 0x480734b7,
+ 0x718a0872, 0x66f11c31, 0x029071f8, 0x15eb65bb, 0x2c66597e,
+ 0x3b1d4d3d, 0x4864c09d, 0x5f1fd4de, 0x6692e81b, 0x71e9fc58,
+ 0x15889191, 0x02f385d2, 0x3b7eb917, 0x2c05ad54, 0xf3bc6285,
+ 0xe4c776c6, 0xdd4a4a03, 0xca315e40, 0xae503389, 0xb92b27ca,
+ 0x80a61b0f, 0x97dd0f4c, 0xb8c70348, 0xafbc170b, 0x96312bce,
+ 0x814a3f8d, 0xe52b5244, 0xf2504607, 0xcbdd7ac2, 0xdca66e81,
+ 0x031fa150, 0x1464b513, 0x2de989d6, 0x3a929d95, 0x5ef3f05c,
+ 0x4988e41f, 0x7005d8da, 0x677ecc99, 0x14074139, 0x037c557a,
+ 0x3af169bf, 0x2d8a7dfc, 0x49eb1035, 0x5e900476, 0x671d38b3,
+ 0x70662cf0, 0xafdfe321, 0xb8a4f762, 0x8129cba7, 0x9652dfe4,
+ 0xf233b22d, 0xe548a66e, 0xdcc59aab, 0xcbbe8ee8, 0x3a3681eb,
+ 0x2d4d95a8, 0x14c0a96d, 0x03bbbd2e, 0x67dad0e7, 0x70a1c4a4,
+ 0x492cf861, 0x5e57ec22, 0x81ee23f3, 0x969537b0, 0xaf180b75,
+ 0xb8631f36, 0xdc0272ff, 0xcb7966bc, 0xf2f45a79, 0xe58f4e3a,
+ 0x96f6c39a, 0x818dd7d9, 0xb800eb1c, 0xaf7bff5f, 0xcb1a9296,
+ 0xdc6186d5, 0xe5ecba10, 0xf297ae53, 0x2d2e6182, 0x3a5575c1,
+ 0x03d84904, 0x14a35d47, 0x70c2308e, 0x67b924cd, 0x5e341808,
+ 0x494f0c4b}};
+
+local const z_word_t FAR crc_braid_big_table[][256] = {
+ {0x00000000, 0x43147b17, 0x8628f62e, 0xc53c8d39, 0x0c51ec5d,
+ 0x4f45974a, 0x8a791a73, 0xc96d6164, 0x18a2d8bb, 0x5bb6a3ac,
+ 0x9e8a2e95, 0xdd9e5582, 0x14f334e6, 0x57e74ff1, 0x92dbc2c8,
+ 0xd1cfb9df, 0x7142c0ac, 0x3256bbbb, 0xf76a3682, 0xb47e4d95,
+ 0x7d132cf1, 0x3e0757e6, 0xfb3bdadf, 0xb82fa1c8, 0x69e01817,
+ 0x2af46300, 0xefc8ee39, 0xacdc952e, 0x65b1f44a, 0x26a58f5d,
+ 0xe3990264, 0xa08d7973, 0xa382f182, 0xe0968a95, 0x25aa07ac,
+ 0x66be7cbb, 0xafd31ddf, 0xecc766c8, 0x29fbebf1, 0x6aef90e6,
+ 0xbb202939, 0xf834522e, 0x3d08df17, 0x7e1ca400, 0xb771c564,
+ 0xf465be73, 0x3159334a, 0x724d485d, 0xd2c0312e, 0x91d44a39,
+ 0x54e8c700, 0x17fcbc17, 0xde91dd73, 0x9d85a664, 0x58b92b5d,
+ 0x1bad504a, 0xca62e995, 0x89769282, 0x4c4a1fbb, 0x0f5e64ac,
+ 0xc63305c8, 0x85277edf, 0x401bf3e6, 0x030f88f1, 0x070392de,
+ 0x4417e9c9, 0x812b64f0, 0xc23f1fe7, 0x0b527e83, 0x48460594,
+ 0x8d7a88ad, 0xce6ef3ba, 0x1fa14a65, 0x5cb53172, 0x9989bc4b,
+ 0xda9dc75c, 0x13f0a638, 0x50e4dd2f, 0x95d85016, 0xd6cc2b01,
+ 0x76415272, 0x35552965, 0xf069a45c, 0xb37ddf4b, 0x7a10be2f,
+ 0x3904c538, 0xfc384801, 0xbf2c3316, 0x6ee38ac9, 0x2df7f1de,
+ 0xe8cb7ce7, 0xabdf07f0, 0x62b26694, 0x21a61d83, 0xe49a90ba,
+ 0xa78eebad, 0xa481635c, 0xe795184b, 0x22a99572, 0x61bdee65,
+ 0xa8d08f01, 0xebc4f416, 0x2ef8792f, 0x6dec0238, 0xbc23bbe7,
+ 0xff37c0f0, 0x3a0b4dc9, 0x791f36de, 0xb07257ba, 0xf3662cad,
+ 0x365aa194, 0x754eda83, 0xd5c3a3f0, 0x96d7d8e7, 0x53eb55de,
+ 0x10ff2ec9, 0xd9924fad, 0x9a8634ba, 0x5fbab983, 0x1caec294,
+ 0xcd617b4b, 0x8e75005c, 0x4b498d65, 0x085df672, 0xc1309716,
+ 0x8224ec01, 0x47186138, 0x040c1a2f, 0x4f005566, 0x0c142e71,
+ 0xc928a348, 0x8a3cd85f, 0x4351b93b, 0x0045c22c, 0xc5794f15,
+ 0x866d3402, 0x57a28ddd, 0x14b6f6ca, 0xd18a7bf3, 0x929e00e4,
+ 0x5bf36180, 0x18e71a97, 0xdddb97ae, 0x9ecfecb9, 0x3e4295ca,
+ 0x7d56eedd, 0xb86a63e4, 0xfb7e18f3, 0x32137997, 0x71070280,
+ 0xb43b8fb9, 0xf72ff4ae, 0x26e04d71, 0x65f43666, 0xa0c8bb5f,
+ 0xe3dcc048, 0x2ab1a12c, 0x69a5da3b, 0xac995702, 0xef8d2c15,
+ 0xec82a4e4, 0xaf96dff3, 0x6aaa52ca, 0x29be29dd, 0xe0d348b9,
+ 0xa3c733ae, 0x66fbbe97, 0x25efc580, 0xf4207c5f, 0xb7340748,
+ 0x72088a71, 0x311cf166, 0xf8719002, 0xbb65eb15, 0x7e59662c,
+ 0x3d4d1d3b, 0x9dc06448, 0xded41f5f, 0x1be89266, 0x58fce971,
+ 0x91918815, 0xd285f302, 0x17b97e3b, 0x54ad052c, 0x8562bcf3,
+ 0xc676c7e4, 0x034a4add, 0x405e31ca, 0x893350ae, 0xca272bb9,
+ 0x0f1ba680, 0x4c0fdd97, 0x4803c7b8, 0x0b17bcaf, 0xce2b3196,
+ 0x8d3f4a81, 0x44522be5, 0x074650f2, 0xc27addcb, 0x816ea6dc,
+ 0x50a11f03, 0x13b56414, 0xd689e92d, 0x959d923a, 0x5cf0f35e,
+ 0x1fe48849, 0xdad80570, 0x99cc7e67, 0x39410714, 0x7a557c03,
+ 0xbf69f13a, 0xfc7d8a2d, 0x3510eb49, 0x7604905e, 0xb3381d67,
+ 0xf02c6670, 0x21e3dfaf, 0x62f7a4b8, 0xa7cb2981, 0xe4df5296,
+ 0x2db233f2, 0x6ea648e5, 0xab9ac5dc, 0xe88ebecb, 0xeb81363a,
+ 0xa8954d2d, 0x6da9c014, 0x2ebdbb03, 0xe7d0da67, 0xa4c4a170,
+ 0x61f82c49, 0x22ec575e, 0xf323ee81, 0xb0379596, 0x750b18af,
+ 0x361f63b8, 0xff7202dc, 0xbc6679cb, 0x795af4f2, 0x3a4e8fe5,
+ 0x9ac3f696, 0xd9d78d81, 0x1ceb00b8, 0x5fff7baf, 0x96921acb,
+ 0xd58661dc, 0x10baece5, 0x53ae97f2, 0x82612e2d, 0xc175553a,
+ 0x0449d803, 0x475da314, 0x8e30c270, 0xcd24b967, 0x0818345e,
+ 0x4b0c4f49},
+ {0x00000000, 0x3e6bc2ef, 0x3dd0f504, 0x03bb37eb, 0x7aa0eb09,
+ 0x44cb29e6, 0x47701e0d, 0x791bdce2, 0xf440d713, 0xca2b15fc,
+ 0xc9902217, 0xf7fbe0f8, 0x8ee03c1a, 0xb08bfef5, 0xb330c91e,
+ 0x8d5b0bf1, 0xe881ae27, 0xd6ea6cc8, 0xd5515b23, 0xeb3a99cc,
+ 0x9221452e, 0xac4a87c1, 0xaff1b02a, 0x919a72c5, 0x1cc17934,
+ 0x22aabbdb, 0x21118c30, 0x1f7a4edf, 0x6661923d, 0x580a50d2,
+ 0x5bb16739, 0x65daa5d6, 0xd0035d4f, 0xee689fa0, 0xedd3a84b,
+ 0xd3b86aa4, 0xaaa3b646, 0x94c874a9, 0x97734342, 0xa91881ad,
+ 0x24438a5c, 0x1a2848b3, 0x19937f58, 0x27f8bdb7, 0x5ee36155,
+ 0x6088a3ba, 0x63339451, 0x5d5856be, 0x3882f368, 0x06e93187,
+ 0x0552066c, 0x3b39c483, 0x42221861, 0x7c49da8e, 0x7ff2ed65,
+ 0x41992f8a, 0xccc2247b, 0xf2a9e694, 0xf112d17f, 0xcf791390,
+ 0xb662cf72, 0x88090d9d, 0x8bb23a76, 0xb5d9f899, 0xa007ba9e,
+ 0x9e6c7871, 0x9dd74f9a, 0xa3bc8d75, 0xdaa75197, 0xe4cc9378,
+ 0xe777a493, 0xd91c667c, 0x54476d8d, 0x6a2caf62, 0x69979889,
+ 0x57fc5a66, 0x2ee78684, 0x108c446b, 0x13377380, 0x2d5cb16f,
+ 0x488614b9, 0x76edd656, 0x7556e1bd, 0x4b3d2352, 0x3226ffb0,
+ 0x0c4d3d5f, 0x0ff60ab4, 0x319dc85b, 0xbcc6c3aa, 0x82ad0145,
+ 0x811636ae, 0xbf7df441, 0xc66628a3, 0xf80dea4c, 0xfbb6dda7,
+ 0xc5dd1f48, 0x7004e7d1, 0x4e6f253e, 0x4dd412d5, 0x73bfd03a,
+ 0x0aa40cd8, 0x34cfce37, 0x3774f9dc, 0x091f3b33, 0x844430c2,
+ 0xba2ff22d, 0xb994c5c6, 0x87ff0729, 0xfee4dbcb, 0xc08f1924,
+ 0xc3342ecf, 0xfd5fec20, 0x988549f6, 0xa6ee8b19, 0xa555bcf2,
+ 0x9b3e7e1d, 0xe225a2ff, 0xdc4e6010, 0xdff557fb, 0xe19e9514,
+ 0x6cc59ee5, 0x52ae5c0a, 0x51156be1, 0x6f7ea90e, 0x166575ec,
+ 0x280eb703, 0x2bb580e8, 0x15de4207, 0x010905e6, 0x3f62c709,
+ 0x3cd9f0e2, 0x02b2320d, 0x7ba9eeef, 0x45c22c00, 0x46791beb,
+ 0x7812d904, 0xf549d2f5, 0xcb22101a, 0xc89927f1, 0xf6f2e51e,
+ 0x8fe939fc, 0xb182fb13, 0xb239ccf8, 0x8c520e17, 0xe988abc1,
+ 0xd7e3692e, 0xd4585ec5, 0xea339c2a, 0x932840c8, 0xad438227,
+ 0xaef8b5cc, 0x90937723, 0x1dc87cd2, 0x23a3be3d, 0x201889d6,
+ 0x1e734b39, 0x676897db, 0x59035534, 0x5ab862df, 0x64d3a030,
+ 0xd10a58a9, 0xef619a46, 0xecdaadad, 0xd2b16f42, 0xabaab3a0,
+ 0x95c1714f, 0x967a46a4, 0xa811844b, 0x254a8fba, 0x1b214d55,
+ 0x189a7abe, 0x26f1b851, 0x5fea64b3, 0x6181a65c, 0x623a91b7,
+ 0x5c515358, 0x398bf68e, 0x07e03461, 0x045b038a, 0x3a30c165,
+ 0x432b1d87, 0x7d40df68, 0x7efbe883, 0x40902a6c, 0xcdcb219d,
+ 0xf3a0e372, 0xf01bd499, 0xce701676, 0xb76bca94, 0x8900087b,
+ 0x8abb3f90, 0xb4d0fd7f, 0xa10ebf78, 0x9f657d97, 0x9cde4a7c,
+ 0xa2b58893, 0xdbae5471, 0xe5c5969e, 0xe67ea175, 0xd815639a,
+ 0x554e686b, 0x6b25aa84, 0x689e9d6f, 0x56f55f80, 0x2fee8362,
+ 0x1185418d, 0x123e7666, 0x2c55b489, 0x498f115f, 0x77e4d3b0,
+ 0x745fe45b, 0x4a3426b4, 0x332ffa56, 0x0d4438b9, 0x0eff0f52,
+ 0x3094cdbd, 0xbdcfc64c, 0x83a404a3, 0x801f3348, 0xbe74f1a7,
+ 0xc76f2d45, 0xf904efaa, 0xfabfd841, 0xc4d41aae, 0x710de237,
+ 0x4f6620d8, 0x4cdd1733, 0x72b6d5dc, 0x0bad093e, 0x35c6cbd1,
+ 0x367dfc3a, 0x08163ed5, 0x854d3524, 0xbb26f7cb, 0xb89dc020,
+ 0x86f602cf, 0xffedde2d, 0xc1861cc2, 0xc23d2b29, 0xfc56e9c6,
+ 0x998c4c10, 0xa7e78eff, 0xa45cb914, 0x9a377bfb, 0xe32ca719,
+ 0xdd4765f6, 0xdefc521d, 0xe09790f2, 0x6dcc9b03, 0x53a759ec,
+ 0x501c6e07, 0x6e77ace8, 0x176c700a, 0x2907b2e5, 0x2abc850e,
+ 0x14d747e1},
+ {0x00000000, 0xc0df8ec1, 0xc1b96c58, 0x0166e299, 0x8273d9b0,
+ 0x42ac5771, 0x43cab5e8, 0x83153b29, 0x45e1c3ba, 0x853e4d7b,
+ 0x8458afe2, 0x44872123, 0xc7921a0a, 0x074d94cb, 0x062b7652,
+ 0xc6f4f893, 0xcbc4f6ae, 0x0b1b786f, 0x0a7d9af6, 0xcaa21437,
+ 0x49b72f1e, 0x8968a1df, 0x880e4346, 0x48d1cd87, 0x8e253514,
+ 0x4efabbd5, 0x4f9c594c, 0x8f43d78d, 0x0c56eca4, 0xcc896265,
+ 0xcdef80fc, 0x0d300e3d, 0xd78f9c86, 0x17501247, 0x1636f0de,
+ 0xd6e97e1f, 0x55fc4536, 0x9523cbf7, 0x9445296e, 0x549aa7af,
+ 0x926e5f3c, 0x52b1d1fd, 0x53d73364, 0x9308bda5, 0x101d868c,
+ 0xd0c2084d, 0xd1a4ead4, 0x117b6415, 0x1c4b6a28, 0xdc94e4e9,
+ 0xddf20670, 0x1d2d88b1, 0x9e38b398, 0x5ee73d59, 0x5f81dfc0,
+ 0x9f5e5101, 0x59aaa992, 0x99752753, 0x9813c5ca, 0x58cc4b0b,
+ 0xdbd97022, 0x1b06fee3, 0x1a601c7a, 0xdabf92bb, 0xef1948d6,
+ 0x2fc6c617, 0x2ea0248e, 0xee7faa4f, 0x6d6a9166, 0xadb51fa7,
+ 0xacd3fd3e, 0x6c0c73ff, 0xaaf88b6c, 0x6a2705ad, 0x6b41e734,
+ 0xab9e69f5, 0x288b52dc, 0xe854dc1d, 0xe9323e84, 0x29edb045,
+ 0x24ddbe78, 0xe40230b9, 0xe564d220, 0x25bb5ce1, 0xa6ae67c8,
+ 0x6671e909, 0x67170b90, 0xa7c88551, 0x613c7dc2, 0xa1e3f303,
+ 0xa085119a, 0x605a9f5b, 0xe34fa472, 0x23902ab3, 0x22f6c82a,
+ 0xe22946eb, 0x3896d450, 0xf8495a91, 0xf92fb808, 0x39f036c9,
+ 0xbae50de0, 0x7a3a8321, 0x7b5c61b8, 0xbb83ef79, 0x7d7717ea,
+ 0xbda8992b, 0xbcce7bb2, 0x7c11f573, 0xff04ce5a, 0x3fdb409b,
+ 0x3ebda202, 0xfe622cc3, 0xf35222fe, 0x338dac3f, 0x32eb4ea6,
+ 0xf234c067, 0x7121fb4e, 0xb1fe758f, 0xb0989716, 0x704719d7,
+ 0xb6b3e144, 0x766c6f85, 0x770a8d1c, 0xb7d503dd, 0x34c038f4,
+ 0xf41fb635, 0xf57954ac, 0x35a6da6d, 0x9f35e177, 0x5fea6fb6,
+ 0x5e8c8d2f, 0x9e5303ee, 0x1d4638c7, 0xdd99b606, 0xdcff549f,
+ 0x1c20da5e, 0xdad422cd, 0x1a0bac0c, 0x1b6d4e95, 0xdbb2c054,
+ 0x58a7fb7d, 0x987875bc, 0x991e9725, 0x59c119e4, 0x54f117d9,
+ 0x942e9918, 0x95487b81, 0x5597f540, 0xd682ce69, 0x165d40a8,
+ 0x173ba231, 0xd7e42cf0, 0x1110d463, 0xd1cf5aa2, 0xd0a9b83b,
+ 0x107636fa, 0x93630dd3, 0x53bc8312, 0x52da618b, 0x9205ef4a,
+ 0x48ba7df1, 0x8865f330, 0x890311a9, 0x49dc9f68, 0xcac9a441,
+ 0x0a162a80, 0x0b70c819, 0xcbaf46d8, 0x0d5bbe4b, 0xcd84308a,
+ 0xcce2d213, 0x0c3d5cd2, 0x8f2867fb, 0x4ff7e93a, 0x4e910ba3,
+ 0x8e4e8562, 0x837e8b5f, 0x43a1059e, 0x42c7e707, 0x821869c6,
+ 0x010d52ef, 0xc1d2dc2e, 0xc0b43eb7, 0x006bb076, 0xc69f48e5,
+ 0x0640c624, 0x072624bd, 0xc7f9aa7c, 0x44ec9155, 0x84331f94,
+ 0x8555fd0d, 0x458a73cc, 0x702ca9a1, 0xb0f32760, 0xb195c5f9,
+ 0x714a4b38, 0xf25f7011, 0x3280fed0, 0x33e61c49, 0xf3399288,
+ 0x35cd6a1b, 0xf512e4da, 0xf4740643, 0x34ab8882, 0xb7beb3ab,
+ 0x77613d6a, 0x7607dff3, 0xb6d85132, 0xbbe85f0f, 0x7b37d1ce,
+ 0x7a513357, 0xba8ebd96, 0x399b86bf, 0xf944087e, 0xf822eae7,
+ 0x38fd6426, 0xfe099cb5, 0x3ed61274, 0x3fb0f0ed, 0xff6f7e2c,
+ 0x7c7a4505, 0xbca5cbc4, 0xbdc3295d, 0x7d1ca79c, 0xa7a33527,
+ 0x677cbbe6, 0x661a597f, 0xa6c5d7be, 0x25d0ec97, 0xe50f6256,
+ 0xe46980cf, 0x24b60e0e, 0xe242f69d, 0x229d785c, 0x23fb9ac5,
+ 0xe3241404, 0x60312f2d, 0xa0eea1ec, 0xa1884375, 0x6157cdb4,
+ 0x6c67c389, 0xacb84d48, 0xaddeafd1, 0x6d012110, 0xee141a39,
+ 0x2ecb94f8, 0x2fad7661, 0xef72f8a0, 0x29860033, 0xe9598ef2,
+ 0xe83f6c6b, 0x28e0e2aa, 0xabf5d983, 0x6b2a5742, 0x6a4cb5db,
+ 0xaa933b1a},
+ {0x00000000, 0x6f4ca59b, 0x9f9e3bec, 0xf0d29e77, 0x7f3b0603,
+ 0x1077a398, 0xe0a53def, 0x8fe99874, 0xfe760c06, 0x913aa99d,
+ 0x61e837ea, 0x0ea49271, 0x814d0a05, 0xee01af9e, 0x1ed331e9,
+ 0x719f9472, 0xfced180c, 0x93a1bd97, 0x637323e0, 0x0c3f867b,
+ 0x83d61e0f, 0xec9abb94, 0x1c4825e3, 0x73048078, 0x029b140a,
+ 0x6dd7b191, 0x9d052fe6, 0xf2498a7d, 0x7da01209, 0x12ecb792,
+ 0xe23e29e5, 0x8d728c7e, 0xf8db3118, 0x97979483, 0x67450af4,
+ 0x0809af6f, 0x87e0371b, 0xe8ac9280, 0x187e0cf7, 0x7732a96c,
+ 0x06ad3d1e, 0x69e19885, 0x993306f2, 0xf67fa369, 0x79963b1d,
+ 0x16da9e86, 0xe60800f1, 0x8944a56a, 0x04362914, 0x6b7a8c8f,
+ 0x9ba812f8, 0xf4e4b763, 0x7b0d2f17, 0x14418a8c, 0xe49314fb,
+ 0x8bdfb160, 0xfa402512, 0x950c8089, 0x65de1efe, 0x0a92bb65,
+ 0x857b2311, 0xea37868a, 0x1ae518fd, 0x75a9bd66, 0xf0b76330,
+ 0x9ffbc6ab, 0x6f2958dc, 0x0065fd47, 0x8f8c6533, 0xe0c0c0a8,
+ 0x10125edf, 0x7f5efb44, 0x0ec16f36, 0x618dcaad, 0x915f54da,
+ 0xfe13f141, 0x71fa6935, 0x1eb6ccae, 0xee6452d9, 0x8128f742,
+ 0x0c5a7b3c, 0x6316dea7, 0x93c440d0, 0xfc88e54b, 0x73617d3f,
+ 0x1c2dd8a4, 0xecff46d3, 0x83b3e348, 0xf22c773a, 0x9d60d2a1,
+ 0x6db24cd6, 0x02fee94d, 0x8d177139, 0xe25bd4a2, 0x12894ad5,
+ 0x7dc5ef4e, 0x086c5228, 0x6720f7b3, 0x97f269c4, 0xf8becc5f,
+ 0x7757542b, 0x181bf1b0, 0xe8c96fc7, 0x8785ca5c, 0xf61a5e2e,
+ 0x9956fbb5, 0x698465c2, 0x06c8c059, 0x8921582d, 0xe66dfdb6,
+ 0x16bf63c1, 0x79f3c65a, 0xf4814a24, 0x9bcdefbf, 0x6b1f71c8,
+ 0x0453d453, 0x8bba4c27, 0xe4f6e9bc, 0x142477cb, 0x7b68d250,
+ 0x0af74622, 0x65bbe3b9, 0x95697dce, 0xfa25d855, 0x75cc4021,
+ 0x1a80e5ba, 0xea527bcd, 0x851ede56, 0xe06fc760, 0x8f2362fb,
+ 0x7ff1fc8c, 0x10bd5917, 0x9f54c163, 0xf01864f8, 0x00cafa8f,
+ 0x6f865f14, 0x1e19cb66, 0x71556efd, 0x8187f08a, 0xeecb5511,
+ 0x6122cd65, 0x0e6e68fe, 0xfebcf689, 0x91f05312, 0x1c82df6c,
+ 0x73ce7af7, 0x831ce480, 0xec50411b, 0x63b9d96f, 0x0cf57cf4,
+ 0xfc27e283, 0x936b4718, 0xe2f4d36a, 0x8db876f1, 0x7d6ae886,
+ 0x12264d1d, 0x9dcfd569, 0xf28370f2, 0x0251ee85, 0x6d1d4b1e,
+ 0x18b4f678, 0x77f853e3, 0x872acd94, 0xe866680f, 0x678ff07b,
+ 0x08c355e0, 0xf811cb97, 0x975d6e0c, 0xe6c2fa7e, 0x898e5fe5,
+ 0x795cc192, 0x16106409, 0x99f9fc7d, 0xf6b559e6, 0x0667c791,
+ 0x692b620a, 0xe459ee74, 0x8b154bef, 0x7bc7d598, 0x148b7003,
+ 0x9b62e877, 0xf42e4dec, 0x04fcd39b, 0x6bb07600, 0x1a2fe272,
+ 0x756347e9, 0x85b1d99e, 0xeafd7c05, 0x6514e471, 0x0a5841ea,
+ 0xfa8adf9d, 0x95c67a06, 0x10d8a450, 0x7f9401cb, 0x8f469fbc,
+ 0xe00a3a27, 0x6fe3a253, 0x00af07c8, 0xf07d99bf, 0x9f313c24,
+ 0xeeaea856, 0x81e20dcd, 0x713093ba, 0x1e7c3621, 0x9195ae55,
+ 0xfed90bce, 0x0e0b95b9, 0x61473022, 0xec35bc5c, 0x837919c7,
+ 0x73ab87b0, 0x1ce7222b, 0x930eba5f, 0xfc421fc4, 0x0c9081b3,
+ 0x63dc2428, 0x1243b05a, 0x7d0f15c1, 0x8ddd8bb6, 0xe2912e2d,
+ 0x6d78b659, 0x023413c2, 0xf2e68db5, 0x9daa282e, 0xe8039548,
+ 0x874f30d3, 0x779daea4, 0x18d10b3f, 0x9738934b, 0xf87436d0,
+ 0x08a6a8a7, 0x67ea0d3c, 0x1675994e, 0x79393cd5, 0x89eba2a2,
+ 0xe6a70739, 0x694e9f4d, 0x06023ad6, 0xf6d0a4a1, 0x999c013a,
+ 0x14ee8d44, 0x7ba228df, 0x8b70b6a8, 0xe43c1333, 0x6bd58b47,
+ 0x04992edc, 0xf44bb0ab, 0x9b071530, 0xea988142, 0x85d424d9,
+ 0x7506baae, 0x1a4a1f35, 0x95a38741, 0xfaef22da, 0x0a3dbcad,
+ 0x65711936}};
+
+#endif
+
+#endif
+
+#if N == 4
+
+#if W == 8
+
+local const z_crc_t FAR crc_braid_table[][256] = {
+ {0x00000000, 0xf1da05aa, 0x38c50d15, 0xc91f08bf, 0x718a1a2a,
+ 0x80501f80, 0x494f173f, 0xb8951295, 0xe3143454, 0x12ce31fe,
+ 0xdbd13941, 0x2a0b3ceb, 0x929e2e7e, 0x63442bd4, 0xaa5b236b,
+ 0x5b8126c1, 0x1d596ee9, 0xec836b43, 0x259c63fc, 0xd4466656,
+ 0x6cd374c3, 0x9d097169, 0x541679d6, 0xa5cc7c7c, 0xfe4d5abd,
+ 0x0f975f17, 0xc68857a8, 0x37525202, 0x8fc74097, 0x7e1d453d,
+ 0xb7024d82, 0x46d84828, 0x3ab2ddd2, 0xcb68d878, 0x0277d0c7,
+ 0xf3add56d, 0x4b38c7f8, 0xbae2c252, 0x73fdcaed, 0x8227cf47,
+ 0xd9a6e986, 0x287cec2c, 0xe163e493, 0x10b9e139, 0xa82cf3ac,
+ 0x59f6f606, 0x90e9feb9, 0x6133fb13, 0x27ebb33b, 0xd631b691,
+ 0x1f2ebe2e, 0xeef4bb84, 0x5661a911, 0xa7bbacbb, 0x6ea4a404,
+ 0x9f7ea1ae, 0xc4ff876f, 0x352582c5, 0xfc3a8a7a, 0x0de08fd0,
+ 0xb5759d45, 0x44af98ef, 0x8db09050, 0x7c6a95fa, 0x7565bba4,
+ 0x84bfbe0e, 0x4da0b6b1, 0xbc7ab31b, 0x04efa18e, 0xf535a424,
+ 0x3c2aac9b, 0xcdf0a931, 0x96718ff0, 0x67ab8a5a, 0xaeb482e5,
+ 0x5f6e874f, 0xe7fb95da, 0x16219070, 0xdf3e98cf, 0x2ee49d65,
+ 0x683cd54d, 0x99e6d0e7, 0x50f9d858, 0xa123ddf2, 0x19b6cf67,
+ 0xe86ccacd, 0x2173c272, 0xd0a9c7d8, 0x8b28e119, 0x7af2e4b3,
+ 0xb3edec0c, 0x4237e9a6, 0xfaa2fb33, 0x0b78fe99, 0xc267f626,
+ 0x33bdf38c, 0x4fd76676, 0xbe0d63dc, 0x77126b63, 0x86c86ec9,
+ 0x3e5d7c5c, 0xcf8779f6, 0x06987149, 0xf74274e3, 0xacc35222,
+ 0x5d195788, 0x94065f37, 0x65dc5a9d, 0xdd494808, 0x2c934da2,
+ 0xe58c451d, 0x145640b7, 0x528e089f, 0xa3540d35, 0x6a4b058a,
+ 0x9b910020, 0x230412b5, 0xd2de171f, 0x1bc11fa0, 0xea1b1a0a,
+ 0xb19a3ccb, 0x40403961, 0x895f31de, 0x78853474, 0xc01026e1,
+ 0x31ca234b, 0xf8d52bf4, 0x090f2e5e, 0xeacb7748, 0x1b1172e2,
+ 0xd20e7a5d, 0x23d47ff7, 0x9b416d62, 0x6a9b68c8, 0xa3846077,
+ 0x525e65dd, 0x09df431c, 0xf80546b6, 0x311a4e09, 0xc0c04ba3,
+ 0x78555936, 0x898f5c9c, 0x40905423, 0xb14a5189, 0xf79219a1,
+ 0x06481c0b, 0xcf5714b4, 0x3e8d111e, 0x8618038b, 0x77c20621,
+ 0xbedd0e9e, 0x4f070b34, 0x14862df5, 0xe55c285f, 0x2c4320e0,
+ 0xdd99254a, 0x650c37df, 0x94d63275, 0x5dc93aca, 0xac133f60,
+ 0xd079aa9a, 0x21a3af30, 0xe8bca78f, 0x1966a225, 0xa1f3b0b0,
+ 0x5029b51a, 0x9936bda5, 0x68ecb80f, 0x336d9ece, 0xc2b79b64,
+ 0x0ba893db, 0xfa729671, 0x42e784e4, 0xb33d814e, 0x7a2289f1,
+ 0x8bf88c5b, 0xcd20c473, 0x3cfac1d9, 0xf5e5c966, 0x043fcccc,
+ 0xbcaade59, 0x4d70dbf3, 0x846fd34c, 0x75b5d6e6, 0x2e34f027,
+ 0xdfeef58d, 0x16f1fd32, 0xe72bf898, 0x5fbeea0d, 0xae64efa7,
+ 0x677be718, 0x96a1e2b2, 0x9faeccec, 0x6e74c946, 0xa76bc1f9,
+ 0x56b1c453, 0xee24d6c6, 0x1ffed36c, 0xd6e1dbd3, 0x273bde79,
+ 0x7cbaf8b8, 0x8d60fd12, 0x447ff5ad, 0xb5a5f007, 0x0d30e292,
+ 0xfceae738, 0x35f5ef87, 0xc42fea2d, 0x82f7a205, 0x732da7af,
+ 0xba32af10, 0x4be8aaba, 0xf37db82f, 0x02a7bd85, 0xcbb8b53a,
+ 0x3a62b090, 0x61e39651, 0x903993fb, 0x59269b44, 0xa8fc9eee,
+ 0x10698c7b, 0xe1b389d1, 0x28ac816e, 0xd97684c4, 0xa51c113e,
+ 0x54c61494, 0x9dd91c2b, 0x6c031981, 0xd4960b14, 0x254c0ebe,
+ 0xec530601, 0x1d8903ab, 0x4608256a, 0xb7d220c0, 0x7ecd287f,
+ 0x8f172dd5, 0x37823f40, 0xc6583aea, 0x0f473255, 0xfe9d37ff,
+ 0xb8457fd7, 0x499f7a7d, 0x808072c2, 0x715a7768, 0xc9cf65fd,
+ 0x38156057, 0xf10a68e8, 0x00d06d42, 0x5b514b83, 0xaa8b4e29,
+ 0x63944696, 0x924e433c, 0x2adb51a9, 0xdb015403, 0x121e5cbc,
+ 0xe3c45916},
+ {0x00000000, 0x0ee7e8d1, 0x1dcfd1a2, 0x13283973, 0x3b9fa344,
+ 0x35784b95, 0x265072e6, 0x28b79a37, 0x773f4688, 0x79d8ae59,
+ 0x6af0972a, 0x64177ffb, 0x4ca0e5cc, 0x42470d1d, 0x516f346e,
+ 0x5f88dcbf, 0xee7e8d10, 0xe09965c1, 0xf3b15cb2, 0xfd56b463,
+ 0xd5e12e54, 0xdb06c685, 0xc82efff6, 0xc6c91727, 0x9941cb98,
+ 0x97a62349, 0x848e1a3a, 0x8a69f2eb, 0xa2de68dc, 0xac39800d,
+ 0xbf11b97e, 0xb1f651af, 0x078c1c61, 0x096bf4b0, 0x1a43cdc3,
+ 0x14a42512, 0x3c13bf25, 0x32f457f4, 0x21dc6e87, 0x2f3b8656,
+ 0x70b35ae9, 0x7e54b238, 0x6d7c8b4b, 0x639b639a, 0x4b2cf9ad,
+ 0x45cb117c, 0x56e3280f, 0x5804c0de, 0xe9f29171, 0xe71579a0,
+ 0xf43d40d3, 0xfadaa802, 0xd26d3235, 0xdc8adae4, 0xcfa2e397,
+ 0xc1450b46, 0x9ecdd7f9, 0x902a3f28, 0x8302065b, 0x8de5ee8a,
+ 0xa55274bd, 0xabb59c6c, 0xb89da51f, 0xb67a4dce, 0x0f1838c2,
+ 0x01ffd013, 0x12d7e960, 0x1c3001b1, 0x34879b86, 0x3a607357,
+ 0x29484a24, 0x27afa2f5, 0x78277e4a, 0x76c0969b, 0x65e8afe8,
+ 0x6b0f4739, 0x43b8dd0e, 0x4d5f35df, 0x5e770cac, 0x5090e47d,
+ 0xe166b5d2, 0xef815d03, 0xfca96470, 0xf24e8ca1, 0xdaf91696,
+ 0xd41efe47, 0xc736c734, 0xc9d12fe5, 0x9659f35a, 0x98be1b8b,
+ 0x8b9622f8, 0x8571ca29, 0xadc6501e, 0xa321b8cf, 0xb00981bc,
+ 0xbeee696d, 0x089424a3, 0x0673cc72, 0x155bf501, 0x1bbc1dd0,
+ 0x330b87e7, 0x3dec6f36, 0x2ec45645, 0x2023be94, 0x7fab622b,
+ 0x714c8afa, 0x6264b389, 0x6c835b58, 0x4434c16f, 0x4ad329be,
+ 0x59fb10cd, 0x571cf81c, 0xe6eaa9b3, 0xe80d4162, 0xfb257811,
+ 0xf5c290c0, 0xdd750af7, 0xd392e226, 0xc0badb55, 0xce5d3384,
+ 0x91d5ef3b, 0x9f3207ea, 0x8c1a3e99, 0x82fdd648, 0xaa4a4c7f,
+ 0xa4ada4ae, 0xb7859ddd, 0xb962750c, 0x1e307184, 0x10d79955,
+ 0x03ffa026, 0x0d1848f7, 0x25afd2c0, 0x2b483a11, 0x38600362,
+ 0x3687ebb3, 0x690f370c, 0x67e8dfdd, 0x74c0e6ae, 0x7a270e7f,
+ 0x52909448, 0x5c777c99, 0x4f5f45ea, 0x41b8ad3b, 0xf04efc94,
+ 0xfea91445, 0xed812d36, 0xe366c5e7, 0xcbd15fd0, 0xc536b701,
+ 0xd61e8e72, 0xd8f966a3, 0x8771ba1c, 0x899652cd, 0x9abe6bbe,
+ 0x9459836f, 0xbcee1958, 0xb209f189, 0xa121c8fa, 0xafc6202b,
+ 0x19bc6de5, 0x175b8534, 0x0473bc47, 0x0a945496, 0x2223cea1,
+ 0x2cc42670, 0x3fec1f03, 0x310bf7d2, 0x6e832b6d, 0x6064c3bc,
+ 0x734cfacf, 0x7dab121e, 0x551c8829, 0x5bfb60f8, 0x48d3598b,
+ 0x4634b15a, 0xf7c2e0f5, 0xf9250824, 0xea0d3157, 0xe4ead986,
+ 0xcc5d43b1, 0xc2baab60, 0xd1929213, 0xdf757ac2, 0x80fda67d,
+ 0x8e1a4eac, 0x9d3277df, 0x93d59f0e, 0xbb620539, 0xb585ede8,
+ 0xa6add49b, 0xa84a3c4a, 0x11284946, 0x1fcfa197, 0x0ce798e4,
+ 0x02007035, 0x2ab7ea02, 0x245002d3, 0x37783ba0, 0x399fd371,
+ 0x66170fce, 0x68f0e71f, 0x7bd8de6c, 0x753f36bd, 0x5d88ac8a,
+ 0x536f445b, 0x40477d28, 0x4ea095f9, 0xff56c456, 0xf1b12c87,
+ 0xe29915f4, 0xec7efd25, 0xc4c96712, 0xca2e8fc3, 0xd906b6b0,
+ 0xd7e15e61, 0x886982de, 0x868e6a0f, 0x95a6537c, 0x9b41bbad,
+ 0xb3f6219a, 0xbd11c94b, 0xae39f038, 0xa0de18e9, 0x16a45527,
+ 0x1843bdf6, 0x0b6b8485, 0x058c6c54, 0x2d3bf663, 0x23dc1eb2,
+ 0x30f427c1, 0x3e13cf10, 0x619b13af, 0x6f7cfb7e, 0x7c54c20d,
+ 0x72b32adc, 0x5a04b0eb, 0x54e3583a, 0x47cb6149, 0x492c8998,
+ 0xf8dad837, 0xf63d30e6, 0xe5150995, 0xebf2e144, 0xc3457b73,
+ 0xcda293a2, 0xde8aaad1, 0xd06d4200, 0x8fe59ebf, 0x8102766e,
+ 0x922a4f1d, 0x9ccda7cc, 0xb47a3dfb, 0xba9dd52a, 0xa9b5ec59,
+ 0xa7520488},
+ {0x00000000, 0x3c60e308, 0x78c1c610, 0x44a12518, 0xf1838c20,
+ 0xcde36f28, 0x89424a30, 0xb522a938, 0x38761e01, 0x0416fd09,
+ 0x40b7d811, 0x7cd73b19, 0xc9f59221, 0xf5957129, 0xb1345431,
+ 0x8d54b739, 0x70ec3c02, 0x4c8cdf0a, 0x082dfa12, 0x344d191a,
+ 0x816fb022, 0xbd0f532a, 0xf9ae7632, 0xc5ce953a, 0x489a2203,
+ 0x74fac10b, 0x305be413, 0x0c3b071b, 0xb919ae23, 0x85794d2b,
+ 0xc1d86833, 0xfdb88b3b, 0xe1d87804, 0xddb89b0c, 0x9919be14,
+ 0xa5795d1c, 0x105bf424, 0x2c3b172c, 0x689a3234, 0x54fad13c,
+ 0xd9ae6605, 0xe5ce850d, 0xa16fa015, 0x9d0f431d, 0x282dea25,
+ 0x144d092d, 0x50ec2c35, 0x6c8ccf3d, 0x91344406, 0xad54a70e,
+ 0xe9f58216, 0xd595611e, 0x60b7c826, 0x5cd72b2e, 0x18760e36,
+ 0x2416ed3e, 0xa9425a07, 0x9522b90f, 0xd1839c17, 0xede37f1f,
+ 0x58c1d627, 0x64a1352f, 0x20001037, 0x1c60f33f, 0x18c1f649,
+ 0x24a11541, 0x60003059, 0x5c60d351, 0xe9427a69, 0xd5229961,
+ 0x9183bc79, 0xade35f71, 0x20b7e848, 0x1cd70b40, 0x58762e58,
+ 0x6416cd50, 0xd1346468, 0xed548760, 0xa9f5a278, 0x95954170,
+ 0x682dca4b, 0x544d2943, 0x10ec0c5b, 0x2c8cef53, 0x99ae466b,
+ 0xa5cea563, 0xe16f807b, 0xdd0f6373, 0x505bd44a, 0x6c3b3742,
+ 0x289a125a, 0x14faf152, 0xa1d8586a, 0x9db8bb62, 0xd9199e7a,
+ 0xe5797d72, 0xf9198e4d, 0xc5796d45, 0x81d8485d, 0xbdb8ab55,
+ 0x089a026d, 0x34fae165, 0x705bc47d, 0x4c3b2775, 0xc16f904c,
+ 0xfd0f7344, 0xb9ae565c, 0x85ceb554, 0x30ec1c6c, 0x0c8cff64,
+ 0x482dda7c, 0x744d3974, 0x89f5b24f, 0xb5955147, 0xf134745f,
+ 0xcd549757, 0x78763e6f, 0x4416dd67, 0x00b7f87f, 0x3cd71b77,
+ 0xb183ac4e, 0x8de34f46, 0xc9426a5e, 0xf5228956, 0x4000206e,
+ 0x7c60c366, 0x38c1e67e, 0x04a10576, 0x3183ec92, 0x0de30f9a,
+ 0x49422a82, 0x7522c98a, 0xc00060b2, 0xfc6083ba, 0xb8c1a6a2,
+ 0x84a145aa, 0x09f5f293, 0x3595119b, 0x71343483, 0x4d54d78b,
+ 0xf8767eb3, 0xc4169dbb, 0x80b7b8a3, 0xbcd75bab, 0x416fd090,
+ 0x7d0f3398, 0x39ae1680, 0x05cef588, 0xb0ec5cb0, 0x8c8cbfb8,
+ 0xc82d9aa0, 0xf44d79a8, 0x7919ce91, 0x45792d99, 0x01d80881,
+ 0x3db8eb89, 0x889a42b1, 0xb4faa1b9, 0xf05b84a1, 0xcc3b67a9,
+ 0xd05b9496, 0xec3b779e, 0xa89a5286, 0x94fab18e, 0x21d818b6,
+ 0x1db8fbbe, 0x5919dea6, 0x65793dae, 0xe82d8a97, 0xd44d699f,
+ 0x90ec4c87, 0xac8caf8f, 0x19ae06b7, 0x25cee5bf, 0x616fc0a7,
+ 0x5d0f23af, 0xa0b7a894, 0x9cd74b9c, 0xd8766e84, 0xe4168d8c,
+ 0x513424b4, 0x6d54c7bc, 0x29f5e2a4, 0x159501ac, 0x98c1b695,
+ 0xa4a1559d, 0xe0007085, 0xdc60938d, 0x69423ab5, 0x5522d9bd,
+ 0x1183fca5, 0x2de31fad, 0x29421adb, 0x1522f9d3, 0x5183dccb,
+ 0x6de33fc3, 0xd8c196fb, 0xe4a175f3, 0xa00050eb, 0x9c60b3e3,
+ 0x113404da, 0x2d54e7d2, 0x69f5c2ca, 0x559521c2, 0xe0b788fa,
+ 0xdcd76bf2, 0x98764eea, 0xa416ade2, 0x59ae26d9, 0x65cec5d1,
+ 0x216fe0c9, 0x1d0f03c1, 0xa82daaf9, 0x944d49f1, 0xd0ec6ce9,
+ 0xec8c8fe1, 0x61d838d8, 0x5db8dbd0, 0x1919fec8, 0x25791dc0,
+ 0x905bb4f8, 0xac3b57f0, 0xe89a72e8, 0xd4fa91e0, 0xc89a62df,
+ 0xf4fa81d7, 0xb05ba4cf, 0x8c3b47c7, 0x3919eeff, 0x05790df7,
+ 0x41d828ef, 0x7db8cbe7, 0xf0ec7cde, 0xcc8c9fd6, 0x882dbace,
+ 0xb44d59c6, 0x016ff0fe, 0x3d0f13f6, 0x79ae36ee, 0x45ced5e6,
+ 0xb8765edd, 0x8416bdd5, 0xc0b798cd, 0xfcd77bc5, 0x49f5d2fd,
+ 0x759531f5, 0x313414ed, 0x0d54f7e5, 0x800040dc, 0xbc60a3d4,
+ 0xf8c186cc, 0xc4a165c4, 0x7183ccfc, 0x4de32ff4, 0x09420aec,
+ 0x3522e9e4},
+ {0x00000000, 0x6307d924, 0xc60fb248, 0xa5086b6c, 0x576e62d1,
+ 0x3469bbf5, 0x9161d099, 0xf26609bd, 0xaedcc5a2, 0xcddb1c86,
+ 0x68d377ea, 0x0bd4aece, 0xf9b2a773, 0x9ab57e57, 0x3fbd153b,
+ 0x5cbacc1f, 0x86c88d05, 0xe5cf5421, 0x40c73f4d, 0x23c0e669,
+ 0xd1a6efd4, 0xb2a136f0, 0x17a95d9c, 0x74ae84b8, 0x281448a7,
+ 0x4b139183, 0xee1bfaef, 0x8d1c23cb, 0x7f7a2a76, 0x1c7df352,
+ 0xb975983e, 0xda72411a, 0xd6e01c4b, 0xb5e7c56f, 0x10efae03,
+ 0x73e87727, 0x818e7e9a, 0xe289a7be, 0x4781ccd2, 0x248615f6,
+ 0x783cd9e9, 0x1b3b00cd, 0xbe336ba1, 0xdd34b285, 0x2f52bb38,
+ 0x4c55621c, 0xe95d0970, 0x8a5ad054, 0x5028914e, 0x332f486a,
+ 0x96272306, 0xf520fa22, 0x0746f39f, 0x64412abb, 0xc14941d7,
+ 0xa24e98f3, 0xfef454ec, 0x9df38dc8, 0x38fbe6a4, 0x5bfc3f80,
+ 0xa99a363d, 0xca9def19, 0x6f958475, 0x0c925d51, 0x76b13ed7,
+ 0x15b6e7f3, 0xb0be8c9f, 0xd3b955bb, 0x21df5c06, 0x42d88522,
+ 0xe7d0ee4e, 0x84d7376a, 0xd86dfb75, 0xbb6a2251, 0x1e62493d,
+ 0x7d659019, 0x8f0399a4, 0xec044080, 0x490c2bec, 0x2a0bf2c8,
+ 0xf079b3d2, 0x937e6af6, 0x3676019a, 0x5571d8be, 0xa717d103,
+ 0xc4100827, 0x6118634b, 0x021fba6f, 0x5ea57670, 0x3da2af54,
+ 0x98aac438, 0xfbad1d1c, 0x09cb14a1, 0x6acccd85, 0xcfc4a6e9,
+ 0xacc37fcd, 0xa051229c, 0xc356fbb8, 0x665e90d4, 0x055949f0,
+ 0xf73f404d, 0x94389969, 0x3130f205, 0x52372b21, 0x0e8de73e,
+ 0x6d8a3e1a, 0xc8825576, 0xab858c52, 0x59e385ef, 0x3ae45ccb,
+ 0x9fec37a7, 0xfcebee83, 0x2699af99, 0x459e76bd, 0xe0961dd1,
+ 0x8391c4f5, 0x71f7cd48, 0x12f0146c, 0xb7f87f00, 0xd4ffa624,
+ 0x88456a3b, 0xeb42b31f, 0x4e4ad873, 0x2d4d0157, 0xdf2b08ea,
+ 0xbc2cd1ce, 0x1924baa2, 0x7a236386, 0xed627dae, 0x8e65a48a,
+ 0x2b6dcfe6, 0x486a16c2, 0xba0c1f7f, 0xd90bc65b, 0x7c03ad37,
+ 0x1f047413, 0x43beb80c, 0x20b96128, 0x85b10a44, 0xe6b6d360,
+ 0x14d0dadd, 0x77d703f9, 0xd2df6895, 0xb1d8b1b1, 0x6baaf0ab,
+ 0x08ad298f, 0xada542e3, 0xcea29bc7, 0x3cc4927a, 0x5fc34b5e,
+ 0xfacb2032, 0x99ccf916, 0xc5763509, 0xa671ec2d, 0x03798741,
+ 0x607e5e65, 0x921857d8, 0xf11f8efc, 0x5417e590, 0x37103cb4,
+ 0x3b8261e5, 0x5885b8c1, 0xfd8dd3ad, 0x9e8a0a89, 0x6cec0334,
+ 0x0febda10, 0xaae3b17c, 0xc9e46858, 0x955ea447, 0xf6597d63,
+ 0x5351160f, 0x3056cf2b, 0xc230c696, 0xa1371fb2, 0x043f74de,
+ 0x6738adfa, 0xbd4aece0, 0xde4d35c4, 0x7b455ea8, 0x1842878c,
+ 0xea248e31, 0x89235715, 0x2c2b3c79, 0x4f2ce55d, 0x13962942,
+ 0x7091f066, 0xd5999b0a, 0xb69e422e, 0x44f84b93, 0x27ff92b7,
+ 0x82f7f9db, 0xe1f020ff, 0x9bd34379, 0xf8d49a5d, 0x5ddcf131,
+ 0x3edb2815, 0xccbd21a8, 0xafbaf88c, 0x0ab293e0, 0x69b54ac4,
+ 0x350f86db, 0x56085fff, 0xf3003493, 0x9007edb7, 0x6261e40a,
+ 0x01663d2e, 0xa46e5642, 0xc7698f66, 0x1d1bce7c, 0x7e1c1758,
+ 0xdb147c34, 0xb813a510, 0x4a75acad, 0x29727589, 0x8c7a1ee5,
+ 0xef7dc7c1, 0xb3c70bde, 0xd0c0d2fa, 0x75c8b996, 0x16cf60b2,
+ 0xe4a9690f, 0x87aeb02b, 0x22a6db47, 0x41a10263, 0x4d335f32,
+ 0x2e348616, 0x8b3ced7a, 0xe83b345e, 0x1a5d3de3, 0x795ae4c7,
+ 0xdc528fab, 0xbf55568f, 0xe3ef9a90, 0x80e843b4, 0x25e028d8,
+ 0x46e7f1fc, 0xb481f841, 0xd7862165, 0x728e4a09, 0x1189932d,
+ 0xcbfbd237, 0xa8fc0b13, 0x0df4607f, 0x6ef3b95b, 0x9c95b0e6,
+ 0xff9269c2, 0x5a9a02ae, 0x399ddb8a, 0x65271795, 0x0620ceb1,
+ 0xa328a5dd, 0xc02f7cf9, 0x32497544, 0x514eac60, 0xf446c70c,
+ 0x97411e28},
+ {0x00000000, 0x01b5fd1d, 0x036bfa3a, 0x02de0727, 0x06d7f474,
+ 0x07620969, 0x05bc0e4e, 0x0409f353, 0x0dafe8e8, 0x0c1a15f5,
+ 0x0ec412d2, 0x0f71efcf, 0x0b781c9c, 0x0acde181, 0x0813e6a6,
+ 0x09a61bbb, 0x1b5fd1d0, 0x1aea2ccd, 0x18342bea, 0x1981d6f7,
+ 0x1d8825a4, 0x1c3dd8b9, 0x1ee3df9e, 0x1f562283, 0x16f03938,
+ 0x1745c425, 0x159bc302, 0x142e3e1f, 0x1027cd4c, 0x11923051,
+ 0x134c3776, 0x12f9ca6b, 0x36bfa3a0, 0x370a5ebd, 0x35d4599a,
+ 0x3461a487, 0x306857d4, 0x31ddaac9, 0x3303adee, 0x32b650f3,
+ 0x3b104b48, 0x3aa5b655, 0x387bb172, 0x39ce4c6f, 0x3dc7bf3c,
+ 0x3c724221, 0x3eac4506, 0x3f19b81b, 0x2de07270, 0x2c558f6d,
+ 0x2e8b884a, 0x2f3e7557, 0x2b378604, 0x2a827b19, 0x285c7c3e,
+ 0x29e98123, 0x204f9a98, 0x21fa6785, 0x232460a2, 0x22919dbf,
+ 0x26986eec, 0x272d93f1, 0x25f394d6, 0x244669cb, 0x6d7f4740,
+ 0x6ccaba5d, 0x6e14bd7a, 0x6fa14067, 0x6ba8b334, 0x6a1d4e29,
+ 0x68c3490e, 0x6976b413, 0x60d0afa8, 0x616552b5, 0x63bb5592,
+ 0x620ea88f, 0x66075bdc, 0x67b2a6c1, 0x656ca1e6, 0x64d95cfb,
+ 0x76209690, 0x77956b8d, 0x754b6caa, 0x74fe91b7, 0x70f762e4,
+ 0x71429ff9, 0x739c98de, 0x722965c3, 0x7b8f7e78, 0x7a3a8365,
+ 0x78e48442, 0x7951795f, 0x7d588a0c, 0x7ced7711, 0x7e337036,
+ 0x7f868d2b, 0x5bc0e4e0, 0x5a7519fd, 0x58ab1eda, 0x591ee3c7,
+ 0x5d171094, 0x5ca2ed89, 0x5e7ceaae, 0x5fc917b3, 0x566f0c08,
+ 0x57daf115, 0x5504f632, 0x54b10b2f, 0x50b8f87c, 0x510d0561,
+ 0x53d30246, 0x5266ff5b, 0x409f3530, 0x412ac82d, 0x43f4cf0a,
+ 0x42413217, 0x4648c144, 0x47fd3c59, 0x45233b7e, 0x4496c663,
+ 0x4d30ddd8, 0x4c8520c5, 0x4e5b27e2, 0x4feedaff, 0x4be729ac,
+ 0x4a52d4b1, 0x488cd396, 0x49392e8b, 0xdafe8e80, 0xdb4b739d,
+ 0xd99574ba, 0xd82089a7, 0xdc297af4, 0xdd9c87e9, 0xdf4280ce,
+ 0xdef77dd3, 0xd7516668, 0xd6e49b75, 0xd43a9c52, 0xd58f614f,
+ 0xd186921c, 0xd0336f01, 0xd2ed6826, 0xd358953b, 0xc1a15f50,
+ 0xc014a24d, 0xc2caa56a, 0xc37f5877, 0xc776ab24, 0xc6c35639,
+ 0xc41d511e, 0xc5a8ac03, 0xcc0eb7b8, 0xcdbb4aa5, 0xcf654d82,
+ 0xced0b09f, 0xcad943cc, 0xcb6cbed1, 0xc9b2b9f6, 0xc80744eb,
+ 0xec412d20, 0xedf4d03d, 0xef2ad71a, 0xee9f2a07, 0xea96d954,
+ 0xeb232449, 0xe9fd236e, 0xe848de73, 0xe1eec5c8, 0xe05b38d5,
+ 0xe2853ff2, 0xe330c2ef, 0xe73931bc, 0xe68ccca1, 0xe452cb86,
+ 0xe5e7369b, 0xf71efcf0, 0xf6ab01ed, 0xf47506ca, 0xf5c0fbd7,
+ 0xf1c90884, 0xf07cf599, 0xf2a2f2be, 0xf3170fa3, 0xfab11418,
+ 0xfb04e905, 0xf9daee22, 0xf86f133f, 0xfc66e06c, 0xfdd31d71,
+ 0xff0d1a56, 0xfeb8e74b, 0xb781c9c0, 0xb63434dd, 0xb4ea33fa,
+ 0xb55fcee7, 0xb1563db4, 0xb0e3c0a9, 0xb23dc78e, 0xb3883a93,
+ 0xba2e2128, 0xbb9bdc35, 0xb945db12, 0xb8f0260f, 0xbcf9d55c,
+ 0xbd4c2841, 0xbf922f66, 0xbe27d27b, 0xacde1810, 0xad6be50d,
+ 0xafb5e22a, 0xae001f37, 0xaa09ec64, 0xabbc1179, 0xa962165e,
+ 0xa8d7eb43, 0xa171f0f8, 0xa0c40de5, 0xa21a0ac2, 0xa3aff7df,
+ 0xa7a6048c, 0xa613f991, 0xa4cdfeb6, 0xa57803ab, 0x813e6a60,
+ 0x808b977d, 0x8255905a, 0x83e06d47, 0x87e99e14, 0x865c6309,
+ 0x8482642e, 0x85379933, 0x8c918288, 0x8d247f95, 0x8ffa78b2,
+ 0x8e4f85af, 0x8a4676fc, 0x8bf38be1, 0x892d8cc6, 0x889871db,
+ 0x9a61bbb0, 0x9bd446ad, 0x990a418a, 0x98bfbc97, 0x9cb64fc4,
+ 0x9d03b2d9, 0x9fddb5fe, 0x9e6848e3, 0x97ce5358, 0x967bae45,
+ 0x94a5a962, 0x9510547f, 0x9119a72c, 0x90ac5a31, 0x92725d16,
+ 0x93c7a00b},
+ {0x00000000, 0x6e8c1b41, 0xdd183682, 0xb3942dc3, 0x61416b45,
+ 0x0fcd7004, 0xbc595dc7, 0xd2d54686, 0xc282d68a, 0xac0ecdcb,
+ 0x1f9ae008, 0x7116fb49, 0xa3c3bdcf, 0xcd4fa68e, 0x7edb8b4d,
+ 0x1057900c, 0x5e74ab55, 0x30f8b014, 0x836c9dd7, 0xede08696,
+ 0x3f35c010, 0x51b9db51, 0xe22df692, 0x8ca1edd3, 0x9cf67ddf,
+ 0xf27a669e, 0x41ee4b5d, 0x2f62501c, 0xfdb7169a, 0x933b0ddb,
+ 0x20af2018, 0x4e233b59, 0xbce956aa, 0xd2654deb, 0x61f16028,
+ 0x0f7d7b69, 0xdda83def, 0xb32426ae, 0x00b00b6d, 0x6e3c102c,
+ 0x7e6b8020, 0x10e79b61, 0xa373b6a2, 0xcdffade3, 0x1f2aeb65,
+ 0x71a6f024, 0xc232dde7, 0xacbec6a6, 0xe29dfdff, 0x8c11e6be,
+ 0x3f85cb7d, 0x5109d03c, 0x83dc96ba, 0xed508dfb, 0x5ec4a038,
+ 0x3048bb79, 0x201f2b75, 0x4e933034, 0xfd071df7, 0x938b06b6,
+ 0x415e4030, 0x2fd25b71, 0x9c4676b2, 0xf2ca6df3, 0xa2a3ab15,
+ 0xcc2fb054, 0x7fbb9d97, 0x113786d6, 0xc3e2c050, 0xad6edb11,
+ 0x1efaf6d2, 0x7076ed93, 0x60217d9f, 0x0ead66de, 0xbd394b1d,
+ 0xd3b5505c, 0x016016da, 0x6fec0d9b, 0xdc782058, 0xb2f43b19,
+ 0xfcd70040, 0x925b1b01, 0x21cf36c2, 0x4f432d83, 0x9d966b05,
+ 0xf31a7044, 0x408e5d87, 0x2e0246c6, 0x3e55d6ca, 0x50d9cd8b,
+ 0xe34de048, 0x8dc1fb09, 0x5f14bd8f, 0x3198a6ce, 0x820c8b0d,
+ 0xec80904c, 0x1e4afdbf, 0x70c6e6fe, 0xc352cb3d, 0xadded07c,
+ 0x7f0b96fa, 0x11878dbb, 0xa213a078, 0xcc9fbb39, 0xdcc82b35,
+ 0xb2443074, 0x01d01db7, 0x6f5c06f6, 0xbd894070, 0xd3055b31,
+ 0x609176f2, 0x0e1d6db3, 0x403e56ea, 0x2eb24dab, 0x9d266068,
+ 0xf3aa7b29, 0x217f3daf, 0x4ff326ee, 0xfc670b2d, 0x92eb106c,
+ 0x82bc8060, 0xec309b21, 0x5fa4b6e2, 0x3128ada3, 0xe3fdeb25,
+ 0x8d71f064, 0x3ee5dda7, 0x5069c6e6, 0x9e36506b, 0xf0ba4b2a,
+ 0x432e66e9, 0x2da27da8, 0xff773b2e, 0x91fb206f, 0x226f0dac,
+ 0x4ce316ed, 0x5cb486e1, 0x32389da0, 0x81acb063, 0xef20ab22,
+ 0x3df5eda4, 0x5379f6e5, 0xe0eddb26, 0x8e61c067, 0xc042fb3e,
+ 0xaecee07f, 0x1d5acdbc, 0x73d6d6fd, 0xa103907b, 0xcf8f8b3a,
+ 0x7c1ba6f9, 0x1297bdb8, 0x02c02db4, 0x6c4c36f5, 0xdfd81b36,
+ 0xb1540077, 0x638146f1, 0x0d0d5db0, 0xbe997073, 0xd0156b32,
+ 0x22df06c1, 0x4c531d80, 0xffc73043, 0x914b2b02, 0x439e6d84,
+ 0x2d1276c5, 0x9e865b06, 0xf00a4047, 0xe05dd04b, 0x8ed1cb0a,
+ 0x3d45e6c9, 0x53c9fd88, 0x811cbb0e, 0xef90a04f, 0x5c048d8c,
+ 0x328896cd, 0x7cabad94, 0x1227b6d5, 0xa1b39b16, 0xcf3f8057,
+ 0x1deac6d1, 0x7366dd90, 0xc0f2f053, 0xae7eeb12, 0xbe297b1e,
+ 0xd0a5605f, 0x63314d9c, 0x0dbd56dd, 0xdf68105b, 0xb1e40b1a,
+ 0x027026d9, 0x6cfc3d98, 0x3c95fb7e, 0x5219e03f, 0xe18dcdfc,
+ 0x8f01d6bd, 0x5dd4903b, 0x33588b7a, 0x80cca6b9, 0xee40bdf8,
+ 0xfe172df4, 0x909b36b5, 0x230f1b76, 0x4d830037, 0x9f5646b1,
+ 0xf1da5df0, 0x424e7033, 0x2cc26b72, 0x62e1502b, 0x0c6d4b6a,
+ 0xbff966a9, 0xd1757de8, 0x03a03b6e, 0x6d2c202f, 0xdeb80dec,
+ 0xb03416ad, 0xa06386a1, 0xceef9de0, 0x7d7bb023, 0x13f7ab62,
+ 0xc122ede4, 0xafaef6a5, 0x1c3adb66, 0x72b6c027, 0x807cadd4,
+ 0xeef0b695, 0x5d649b56, 0x33e88017, 0xe13dc691, 0x8fb1ddd0,
+ 0x3c25f013, 0x52a9eb52, 0x42fe7b5e, 0x2c72601f, 0x9fe64ddc,
+ 0xf16a569d, 0x23bf101b, 0x4d330b5a, 0xfea72699, 0x902b3dd8,
+ 0xde080681, 0xb0841dc0, 0x03103003, 0x6d9c2b42, 0xbf496dc4,
+ 0xd1c57685, 0x62515b46, 0x0cdd4007, 0x1c8ad00b, 0x7206cb4a,
+ 0xc192e689, 0xaf1efdc8, 0x7dcbbb4e, 0x1347a00f, 0xa0d38dcc,
+ 0xce5f968d},
+ {0x00000000, 0xe71da697, 0x154a4b6f, 0xf257edf8, 0x2a9496de,
+ 0xcd893049, 0x3fdeddb1, 0xd8c37b26, 0x55292dbc, 0xb2348b2b,
+ 0x406366d3, 0xa77ec044, 0x7fbdbb62, 0x98a01df5, 0x6af7f00d,
+ 0x8dea569a, 0xaa525b78, 0x4d4ffdef, 0xbf181017, 0x5805b680,
+ 0x80c6cda6, 0x67db6b31, 0x958c86c9, 0x7291205e, 0xff7b76c4,
+ 0x1866d053, 0xea313dab, 0x0d2c9b3c, 0xd5efe01a, 0x32f2468d,
+ 0xc0a5ab75, 0x27b80de2, 0x8fd5b0b1, 0x68c81626, 0x9a9ffbde,
+ 0x7d825d49, 0xa541266f, 0x425c80f8, 0xb00b6d00, 0x5716cb97,
+ 0xdafc9d0d, 0x3de13b9a, 0xcfb6d662, 0x28ab70f5, 0xf0680bd3,
+ 0x1775ad44, 0xe52240bc, 0x023fe62b, 0x2587ebc9, 0xc29a4d5e,
+ 0x30cda0a6, 0xd7d00631, 0x0f137d17, 0xe80edb80, 0x1a593678,
+ 0xfd4490ef, 0x70aec675, 0x97b360e2, 0x65e48d1a, 0x82f92b8d,
+ 0x5a3a50ab, 0xbd27f63c, 0x4f701bc4, 0xa86dbd53, 0xc4da6723,
+ 0x23c7c1b4, 0xd1902c4c, 0x368d8adb, 0xee4ef1fd, 0x0953576a,
+ 0xfb04ba92, 0x1c191c05, 0x91f34a9f, 0x76eeec08, 0x84b901f0,
+ 0x63a4a767, 0xbb67dc41, 0x5c7a7ad6, 0xae2d972e, 0x493031b9,
+ 0x6e883c5b, 0x89959acc, 0x7bc27734, 0x9cdfd1a3, 0x441caa85,
+ 0xa3010c12, 0x5156e1ea, 0xb64b477d, 0x3ba111e7, 0xdcbcb770,
+ 0x2eeb5a88, 0xc9f6fc1f, 0x11358739, 0xf62821ae, 0x047fcc56,
+ 0xe3626ac1, 0x4b0fd792, 0xac127105, 0x5e459cfd, 0xb9583a6a,
+ 0x619b414c, 0x8686e7db, 0x74d10a23, 0x93ccacb4, 0x1e26fa2e,
+ 0xf93b5cb9, 0x0b6cb141, 0xec7117d6, 0x34b26cf0, 0xd3afca67,
+ 0x21f8279f, 0xc6e58108, 0xe15d8cea, 0x06402a7d, 0xf417c785,
+ 0x130a6112, 0xcbc91a34, 0x2cd4bca3, 0xde83515b, 0x399ef7cc,
+ 0xb474a156, 0x536907c1, 0xa13eea39, 0x46234cae, 0x9ee03788,
+ 0x79fd911f, 0x8baa7ce7, 0x6cb7da70, 0x52c5c807, 0xb5d86e90,
+ 0x478f8368, 0xa09225ff, 0x78515ed9, 0x9f4cf84e, 0x6d1b15b6,
+ 0x8a06b321, 0x07ece5bb, 0xe0f1432c, 0x12a6aed4, 0xf5bb0843,
+ 0x2d787365, 0xca65d5f2, 0x3832380a, 0xdf2f9e9d, 0xf897937f,
+ 0x1f8a35e8, 0xedddd810, 0x0ac07e87, 0xd20305a1, 0x351ea336,
+ 0xc7494ece, 0x2054e859, 0xadbebec3, 0x4aa31854, 0xb8f4f5ac,
+ 0x5fe9533b, 0x872a281d, 0x60378e8a, 0x92606372, 0x757dc5e5,
+ 0xdd1078b6, 0x3a0dde21, 0xc85a33d9, 0x2f47954e, 0xf784ee68,
+ 0x109948ff, 0xe2cea507, 0x05d30390, 0x8839550a, 0x6f24f39d,
+ 0x9d731e65, 0x7a6eb8f2, 0xa2adc3d4, 0x45b06543, 0xb7e788bb,
+ 0x50fa2e2c, 0x774223ce, 0x905f8559, 0x620868a1, 0x8515ce36,
+ 0x5dd6b510, 0xbacb1387, 0x489cfe7f, 0xaf8158e8, 0x226b0e72,
+ 0xc576a8e5, 0x3721451d, 0xd03ce38a, 0x08ff98ac, 0xefe23e3b,
+ 0x1db5d3c3, 0xfaa87554, 0x961faf24, 0x710209b3, 0x8355e44b,
+ 0x644842dc, 0xbc8b39fa, 0x5b969f6d, 0xa9c17295, 0x4edcd402,
+ 0xc3368298, 0x242b240f, 0xd67cc9f7, 0x31616f60, 0xe9a21446,
+ 0x0ebfb2d1, 0xfce85f29, 0x1bf5f9be, 0x3c4df45c, 0xdb5052cb,
+ 0x2907bf33, 0xce1a19a4, 0x16d96282, 0xf1c4c415, 0x039329ed,
+ 0xe48e8f7a, 0x6964d9e0, 0x8e797f77, 0x7c2e928f, 0x9b333418,
+ 0x43f04f3e, 0xa4ede9a9, 0x56ba0451, 0xb1a7a2c6, 0x19ca1f95,
+ 0xfed7b902, 0x0c8054fa, 0xeb9df26d, 0x335e894b, 0xd4432fdc,
+ 0x2614c224, 0xc10964b3, 0x4ce33229, 0xabfe94be, 0x59a97946,
+ 0xbeb4dfd1, 0x6677a4f7, 0x816a0260, 0x733def98, 0x9420490f,
+ 0xb39844ed, 0x5485e27a, 0xa6d20f82, 0x41cfa915, 0x990cd233,
+ 0x7e1174a4, 0x8c46995c, 0x6b5b3fcb, 0xe6b16951, 0x01accfc6,
+ 0xf3fb223e, 0x14e684a9, 0xcc25ff8f, 0x2b385918, 0xd96fb4e0,
+ 0x3e721277},
+ {0x00000000, 0xa58b900e, 0x9066265d, 0x35edb653, 0xfbbd4afb,
+ 0x5e36daf5, 0x6bdb6ca6, 0xce50fca8, 0x2c0b93b7, 0x898003b9,
+ 0xbc6db5ea, 0x19e625e4, 0xd7b6d94c, 0x723d4942, 0x47d0ff11,
+ 0xe25b6f1f, 0x5817276e, 0xfd9cb760, 0xc8710133, 0x6dfa913d,
+ 0xa3aa6d95, 0x0621fd9b, 0x33cc4bc8, 0x9647dbc6, 0x741cb4d9,
+ 0xd19724d7, 0xe47a9284, 0x41f1028a, 0x8fa1fe22, 0x2a2a6e2c,
+ 0x1fc7d87f, 0xba4c4871, 0xb02e4edc, 0x15a5ded2, 0x20486881,
+ 0x85c3f88f, 0x4b930427, 0xee189429, 0xdbf5227a, 0x7e7eb274,
+ 0x9c25dd6b, 0x39ae4d65, 0x0c43fb36, 0xa9c86b38, 0x67989790,
+ 0xc213079e, 0xf7feb1cd, 0x527521c3, 0xe83969b2, 0x4db2f9bc,
+ 0x785f4fef, 0xddd4dfe1, 0x13842349, 0xb60fb347, 0x83e20514,
+ 0x2669951a, 0xc432fa05, 0x61b96a0b, 0x5454dc58, 0xf1df4c56,
+ 0x3f8fb0fe, 0x9a0420f0, 0xafe996a3, 0x0a6206ad, 0xbb2d9bf9,
+ 0x1ea60bf7, 0x2b4bbda4, 0x8ec02daa, 0x4090d102, 0xe51b410c,
+ 0xd0f6f75f, 0x757d6751, 0x9726084e, 0x32ad9840, 0x07402e13,
+ 0xa2cbbe1d, 0x6c9b42b5, 0xc910d2bb, 0xfcfd64e8, 0x5976f4e6,
+ 0xe33abc97, 0x46b12c99, 0x735c9aca, 0xd6d70ac4, 0x1887f66c,
+ 0xbd0c6662, 0x88e1d031, 0x2d6a403f, 0xcf312f20, 0x6ababf2e,
+ 0x5f57097d, 0xfadc9973, 0x348c65db, 0x9107f5d5, 0xa4ea4386,
+ 0x0161d388, 0x0b03d525, 0xae88452b, 0x9b65f378, 0x3eee6376,
+ 0xf0be9fde, 0x55350fd0, 0x60d8b983, 0xc553298d, 0x27084692,
+ 0x8283d69c, 0xb76e60cf, 0x12e5f0c1, 0xdcb50c69, 0x793e9c67,
+ 0x4cd32a34, 0xe958ba3a, 0x5314f24b, 0xf69f6245, 0xc372d416,
+ 0x66f94418, 0xa8a9b8b0, 0x0d2228be, 0x38cf9eed, 0x9d440ee3,
+ 0x7f1f61fc, 0xda94f1f2, 0xef7947a1, 0x4af2d7af, 0x84a22b07,
+ 0x2129bb09, 0x14c40d5a, 0xb14f9d54, 0xad2a31b3, 0x08a1a1bd,
+ 0x3d4c17ee, 0x98c787e0, 0x56977b48, 0xf31ceb46, 0xc6f15d15,
+ 0x637acd1b, 0x8121a204, 0x24aa320a, 0x11478459, 0xb4cc1457,
+ 0x7a9ce8ff, 0xdf1778f1, 0xeafacea2, 0x4f715eac, 0xf53d16dd,
+ 0x50b686d3, 0x655b3080, 0xc0d0a08e, 0x0e805c26, 0xab0bcc28,
+ 0x9ee67a7b, 0x3b6dea75, 0xd936856a, 0x7cbd1564, 0x4950a337,
+ 0xecdb3339, 0x228bcf91, 0x87005f9f, 0xb2ede9cc, 0x176679c2,
+ 0x1d047f6f, 0xb88fef61, 0x8d625932, 0x28e9c93c, 0xe6b93594,
+ 0x4332a59a, 0x76df13c9, 0xd35483c7, 0x310fecd8, 0x94847cd6,
+ 0xa169ca85, 0x04e25a8b, 0xcab2a623, 0x6f39362d, 0x5ad4807e,
+ 0xff5f1070, 0x45135801, 0xe098c80f, 0xd5757e5c, 0x70feee52,
+ 0xbeae12fa, 0x1b2582f4, 0x2ec834a7, 0x8b43a4a9, 0x6918cbb6,
+ 0xcc935bb8, 0xf97eedeb, 0x5cf57de5, 0x92a5814d, 0x372e1143,
+ 0x02c3a710, 0xa748371e, 0x1607aa4a, 0xb38c3a44, 0x86618c17,
+ 0x23ea1c19, 0xedbae0b1, 0x483170bf, 0x7ddcc6ec, 0xd85756e2,
+ 0x3a0c39fd, 0x9f87a9f3, 0xaa6a1fa0, 0x0fe18fae, 0xc1b17306,
+ 0x643ae308, 0x51d7555b, 0xf45cc555, 0x4e108d24, 0xeb9b1d2a,
+ 0xde76ab79, 0x7bfd3b77, 0xb5adc7df, 0x102657d1, 0x25cbe182,
+ 0x8040718c, 0x621b1e93, 0xc7908e9d, 0xf27d38ce, 0x57f6a8c0,
+ 0x99a65468, 0x3c2dc466, 0x09c07235, 0xac4be23b, 0xa629e496,
+ 0x03a27498, 0x364fc2cb, 0x93c452c5, 0x5d94ae6d, 0xf81f3e63,
+ 0xcdf28830, 0x6879183e, 0x8a227721, 0x2fa9e72f, 0x1a44517c,
+ 0xbfcfc172, 0x719f3dda, 0xd414add4, 0xe1f91b87, 0x44728b89,
+ 0xfe3ec3f8, 0x5bb553f6, 0x6e58e5a5, 0xcbd375ab, 0x05838903,
+ 0xa008190d, 0x95e5af5e, 0x306e3f50, 0xd235504f, 0x77bec041,
+ 0x42537612, 0xe7d8e61c, 0x29881ab4, 0x8c038aba, 0xb9ee3ce9,
+ 0x1c65ace7}};
+
+local const z_word_t FAR crc_braid_big_table[][256] = {
+ {0x0000000000000000, 0x0e908ba500000000, 0x5d26669000000000,
+ 0x53b6ed3500000000, 0xfb4abdfb00000000, 0xf5da365e00000000,
+ 0xa66cdb6b00000000, 0xa8fc50ce00000000, 0xb7930b2c00000000,
+ 0xb903808900000000, 0xeab56dbc00000000, 0xe425e61900000000,
+ 0x4cd9b6d700000000, 0x42493d7200000000, 0x11ffd04700000000,
+ 0x1f6f5be200000000, 0x6e27175800000000, 0x60b79cfd00000000,
+ 0x330171c800000000, 0x3d91fa6d00000000, 0x956daaa300000000,
+ 0x9bfd210600000000, 0xc84bcc3300000000, 0xc6db479600000000,
+ 0xd9b41c7400000000, 0xd72497d100000000, 0x84927ae400000000,
+ 0x8a02f14100000000, 0x22fea18f00000000, 0x2c6e2a2a00000000,
+ 0x7fd8c71f00000000, 0x71484cba00000000, 0xdc4e2eb000000000,
+ 0xd2dea51500000000, 0x8168482000000000, 0x8ff8c38500000000,
+ 0x2704934b00000000, 0x299418ee00000000, 0x7a22f5db00000000,
+ 0x74b27e7e00000000, 0x6bdd259c00000000, 0x654dae3900000000,
+ 0x36fb430c00000000, 0x386bc8a900000000, 0x9097986700000000,
+ 0x9e0713c200000000, 0xcdb1fef700000000, 0xc321755200000000,
+ 0xb26939e800000000, 0xbcf9b24d00000000, 0xef4f5f7800000000,
+ 0xe1dfd4dd00000000, 0x4923841300000000, 0x47b30fb600000000,
+ 0x1405e28300000000, 0x1a95692600000000, 0x05fa32c400000000,
+ 0x0b6ab96100000000, 0x58dc545400000000, 0x564cdff100000000,
+ 0xfeb08f3f00000000, 0xf020049a00000000, 0xa396e9af00000000,
+ 0xad06620a00000000, 0xf99b2dbb00000000, 0xf70ba61e00000000,
+ 0xa4bd4b2b00000000, 0xaa2dc08e00000000, 0x02d1904000000000,
+ 0x0c411be500000000, 0x5ff7f6d000000000, 0x51677d7500000000,
+ 0x4e08269700000000, 0x4098ad3200000000, 0x132e400700000000,
+ 0x1dbecba200000000, 0xb5429b6c00000000, 0xbbd210c900000000,
+ 0xe864fdfc00000000, 0xe6f4765900000000, 0x97bc3ae300000000,
+ 0x992cb14600000000, 0xca9a5c7300000000, 0xc40ad7d600000000,
+ 0x6cf6871800000000, 0x62660cbd00000000, 0x31d0e18800000000,
+ 0x3f406a2d00000000, 0x202f31cf00000000, 0x2ebfba6a00000000,
+ 0x7d09575f00000000, 0x7399dcfa00000000, 0xdb658c3400000000,
+ 0xd5f5079100000000, 0x8643eaa400000000, 0x88d3610100000000,
+ 0x25d5030b00000000, 0x2b4588ae00000000, 0x78f3659b00000000,
+ 0x7663ee3e00000000, 0xde9fbef000000000, 0xd00f355500000000,
+ 0x83b9d86000000000, 0x8d2953c500000000, 0x9246082700000000,
+ 0x9cd6838200000000, 0xcf606eb700000000, 0xc1f0e51200000000,
+ 0x690cb5dc00000000, 0x679c3e7900000000, 0x342ad34c00000000,
+ 0x3aba58e900000000, 0x4bf2145300000000, 0x45629ff600000000,
+ 0x16d472c300000000, 0x1844f96600000000, 0xb0b8a9a800000000,
+ 0xbe28220d00000000, 0xed9ecf3800000000, 0xe30e449d00000000,
+ 0xfc611f7f00000000, 0xf2f194da00000000, 0xa14779ef00000000,
+ 0xafd7f24a00000000, 0x072ba28400000000, 0x09bb292100000000,
+ 0x5a0dc41400000000, 0x549d4fb100000000, 0xb3312aad00000000,
+ 0xbda1a10800000000, 0xee174c3d00000000, 0xe087c79800000000,
+ 0x487b975600000000, 0x46eb1cf300000000, 0x155df1c600000000,
+ 0x1bcd7a6300000000, 0x04a2218100000000, 0x0a32aa2400000000,
+ 0x5984471100000000, 0x5714ccb400000000, 0xffe89c7a00000000,
+ 0xf17817df00000000, 0xa2cefaea00000000, 0xac5e714f00000000,
+ 0xdd163df500000000, 0xd386b65000000000, 0x80305b6500000000,
+ 0x8ea0d0c000000000, 0x265c800e00000000, 0x28cc0bab00000000,
+ 0x7b7ae69e00000000, 0x75ea6d3b00000000, 0x6a8536d900000000,
+ 0x6415bd7c00000000, 0x37a3504900000000, 0x3933dbec00000000,
+ 0x91cf8b2200000000, 0x9f5f008700000000, 0xcce9edb200000000,
+ 0xc279661700000000, 0x6f7f041d00000000, 0x61ef8fb800000000,
+ 0x3259628d00000000, 0x3cc9e92800000000, 0x9435b9e600000000,
+ 0x9aa5324300000000, 0xc913df7600000000, 0xc78354d300000000,
+ 0xd8ec0f3100000000, 0xd67c849400000000, 0x85ca69a100000000,
+ 0x8b5ae20400000000, 0x23a6b2ca00000000, 0x2d36396f00000000,
+ 0x7e80d45a00000000, 0x70105fff00000000, 0x0158134500000000,
+ 0x0fc898e000000000, 0x5c7e75d500000000, 0x52eefe7000000000,
+ 0xfa12aebe00000000, 0xf482251b00000000, 0xa734c82e00000000,
+ 0xa9a4438b00000000, 0xb6cb186900000000, 0xb85b93cc00000000,
+ 0xebed7ef900000000, 0xe57df55c00000000, 0x4d81a59200000000,
+ 0x43112e3700000000, 0x10a7c30200000000, 0x1e3748a700000000,
+ 0x4aaa071600000000, 0x443a8cb300000000, 0x178c618600000000,
+ 0x191cea2300000000, 0xb1e0baed00000000, 0xbf70314800000000,
+ 0xecc6dc7d00000000, 0xe25657d800000000, 0xfd390c3a00000000,
+ 0xf3a9879f00000000, 0xa01f6aaa00000000, 0xae8fe10f00000000,
+ 0x0673b1c100000000, 0x08e33a6400000000, 0x5b55d75100000000,
+ 0x55c55cf400000000, 0x248d104e00000000, 0x2a1d9beb00000000,
+ 0x79ab76de00000000, 0x773bfd7b00000000, 0xdfc7adb500000000,
+ 0xd157261000000000, 0x82e1cb2500000000, 0x8c71408000000000,
+ 0x931e1b6200000000, 0x9d8e90c700000000, 0xce387df200000000,
+ 0xc0a8f65700000000, 0x6854a69900000000, 0x66c42d3c00000000,
+ 0x3572c00900000000, 0x3be24bac00000000, 0x96e429a600000000,
+ 0x9874a20300000000, 0xcbc24f3600000000, 0xc552c49300000000,
+ 0x6dae945d00000000, 0x633e1ff800000000, 0x3088f2cd00000000,
+ 0x3e18796800000000, 0x2177228a00000000, 0x2fe7a92f00000000,
+ 0x7c51441a00000000, 0x72c1cfbf00000000, 0xda3d9f7100000000,
+ 0xd4ad14d400000000, 0x871bf9e100000000, 0x898b724400000000,
+ 0xf8c33efe00000000, 0xf653b55b00000000, 0xa5e5586e00000000,
+ 0xab75d3cb00000000, 0x0389830500000000, 0x0d1908a000000000,
+ 0x5eafe59500000000, 0x503f6e3000000000, 0x4f5035d200000000,
+ 0x41c0be7700000000, 0x1276534200000000, 0x1ce6d8e700000000,
+ 0xb41a882900000000, 0xba8a038c00000000, 0xe93ceeb900000000,
+ 0xe7ac651c00000000},
+ {0x0000000000000000, 0x97a61de700000000, 0x6f4b4a1500000000,
+ 0xf8ed57f200000000, 0xde96942a00000000, 0x493089cd00000000,
+ 0xb1ddde3f00000000, 0x267bc3d800000000, 0xbc2d295500000000,
+ 0x2b8b34b200000000, 0xd366634000000000, 0x44c07ea700000000,
+ 0x62bbbd7f00000000, 0xf51da09800000000, 0x0df0f76a00000000,
+ 0x9a56ea8d00000000, 0x785b52aa00000000, 0xeffd4f4d00000000,
+ 0x171018bf00000000, 0x80b6055800000000, 0xa6cdc68000000000,
+ 0x316bdb6700000000, 0xc9868c9500000000, 0x5e20917200000000,
+ 0xc4767bff00000000, 0x53d0661800000000, 0xab3d31ea00000000,
+ 0x3c9b2c0d00000000, 0x1ae0efd500000000, 0x8d46f23200000000,
+ 0x75aba5c000000000, 0xe20db82700000000, 0xb1b0d58f00000000,
+ 0x2616c86800000000, 0xdefb9f9a00000000, 0x495d827d00000000,
+ 0x6f2641a500000000, 0xf8805c4200000000, 0x006d0bb000000000,
+ 0x97cb165700000000, 0x0d9dfcda00000000, 0x9a3be13d00000000,
+ 0x62d6b6cf00000000, 0xf570ab2800000000, 0xd30b68f000000000,
+ 0x44ad751700000000, 0xbc4022e500000000, 0x2be63f0200000000,
+ 0xc9eb872500000000, 0x5e4d9ac200000000, 0xa6a0cd3000000000,
+ 0x3106d0d700000000, 0x177d130f00000000, 0x80db0ee800000000,
+ 0x7836591a00000000, 0xef9044fd00000000, 0x75c6ae7000000000,
+ 0xe260b39700000000, 0x1a8de46500000000, 0x8d2bf98200000000,
+ 0xab503a5a00000000, 0x3cf627bd00000000, 0xc41b704f00000000,
+ 0x53bd6da800000000, 0x2367dac400000000, 0xb4c1c72300000000,
+ 0x4c2c90d100000000, 0xdb8a8d3600000000, 0xfdf14eee00000000,
+ 0x6a57530900000000, 0x92ba04fb00000000, 0x051c191c00000000,
+ 0x9f4af39100000000, 0x08ecee7600000000, 0xf001b98400000000,
+ 0x67a7a46300000000, 0x41dc67bb00000000, 0xd67a7a5c00000000,
+ 0x2e972dae00000000, 0xb931304900000000, 0x5b3c886e00000000,
+ 0xcc9a958900000000, 0x3477c27b00000000, 0xa3d1df9c00000000,
+ 0x85aa1c4400000000, 0x120c01a300000000, 0xeae1565100000000,
+ 0x7d474bb600000000, 0xe711a13b00000000, 0x70b7bcdc00000000,
+ 0x885aeb2e00000000, 0x1ffcf6c900000000, 0x3987351100000000,
+ 0xae2128f600000000, 0x56cc7f0400000000, 0xc16a62e300000000,
+ 0x92d70f4b00000000, 0x057112ac00000000, 0xfd9c455e00000000,
+ 0x6a3a58b900000000, 0x4c419b6100000000, 0xdbe7868600000000,
+ 0x230ad17400000000, 0xb4accc9300000000, 0x2efa261e00000000,
+ 0xb95c3bf900000000, 0x41b16c0b00000000, 0xd61771ec00000000,
+ 0xf06cb23400000000, 0x67caafd300000000, 0x9f27f82100000000,
+ 0x0881e5c600000000, 0xea8c5de100000000, 0x7d2a400600000000,
+ 0x85c717f400000000, 0x12610a1300000000, 0x341ac9cb00000000,
+ 0xa3bcd42c00000000, 0x5b5183de00000000, 0xccf79e3900000000,
+ 0x56a174b400000000, 0xc107695300000000, 0x39ea3ea100000000,
+ 0xae4c234600000000, 0x8837e09e00000000, 0x1f91fd7900000000,
+ 0xe77caa8b00000000, 0x70dab76c00000000, 0x07c8c55200000000,
+ 0x906ed8b500000000, 0x68838f4700000000, 0xff2592a000000000,
+ 0xd95e517800000000, 0x4ef84c9f00000000, 0xb6151b6d00000000,
+ 0x21b3068a00000000, 0xbbe5ec0700000000, 0x2c43f1e000000000,
+ 0xd4aea61200000000, 0x4308bbf500000000, 0x6573782d00000000,
+ 0xf2d565ca00000000, 0x0a38323800000000, 0x9d9e2fdf00000000,
+ 0x7f9397f800000000, 0xe8358a1f00000000, 0x10d8dded00000000,
+ 0x877ec00a00000000, 0xa10503d200000000, 0x36a31e3500000000,
+ 0xce4e49c700000000, 0x59e8542000000000, 0xc3bebead00000000,
+ 0x5418a34a00000000, 0xacf5f4b800000000, 0x3b53e95f00000000,
+ 0x1d282a8700000000, 0x8a8e376000000000, 0x7263609200000000,
+ 0xe5c57d7500000000, 0xb67810dd00000000, 0x21de0d3a00000000,
+ 0xd9335ac800000000, 0x4e95472f00000000, 0x68ee84f700000000,
+ 0xff48991000000000, 0x07a5cee200000000, 0x9003d30500000000,
+ 0x0a55398800000000, 0x9df3246f00000000, 0x651e739d00000000,
+ 0xf2b86e7a00000000, 0xd4c3ada200000000, 0x4365b04500000000,
+ 0xbb88e7b700000000, 0x2c2efa5000000000, 0xce23427700000000,
+ 0x59855f9000000000, 0xa168086200000000, 0x36ce158500000000,
+ 0x10b5d65d00000000, 0x8713cbba00000000, 0x7ffe9c4800000000,
+ 0xe85881af00000000, 0x720e6b2200000000, 0xe5a876c500000000,
+ 0x1d45213700000000, 0x8ae33cd000000000, 0xac98ff0800000000,
+ 0x3b3ee2ef00000000, 0xc3d3b51d00000000, 0x5475a8fa00000000,
+ 0x24af1f9600000000, 0xb309027100000000, 0x4be4558300000000,
+ 0xdc42486400000000, 0xfa398bbc00000000, 0x6d9f965b00000000,
+ 0x9572c1a900000000, 0x02d4dc4e00000000, 0x988236c300000000,
+ 0x0f242b2400000000, 0xf7c97cd600000000, 0x606f613100000000,
+ 0x4614a2e900000000, 0xd1b2bf0e00000000, 0x295fe8fc00000000,
+ 0xbef9f51b00000000, 0x5cf44d3c00000000, 0xcb5250db00000000,
+ 0x33bf072900000000, 0xa4191ace00000000, 0x8262d91600000000,
+ 0x15c4c4f100000000, 0xed29930300000000, 0x7a8f8ee400000000,
+ 0xe0d9646900000000, 0x777f798e00000000, 0x8f922e7c00000000,
+ 0x1834339b00000000, 0x3e4ff04300000000, 0xa9e9eda400000000,
+ 0x5104ba5600000000, 0xc6a2a7b100000000, 0x951fca1900000000,
+ 0x02b9d7fe00000000, 0xfa54800c00000000, 0x6df29deb00000000,
+ 0x4b895e3300000000, 0xdc2f43d400000000, 0x24c2142600000000,
+ 0xb36409c100000000, 0x2932e34c00000000, 0xbe94feab00000000,
+ 0x4679a95900000000, 0xd1dfb4be00000000, 0xf7a4776600000000,
+ 0x60026a8100000000, 0x98ef3d7300000000, 0x0f49209400000000,
+ 0xed4498b300000000, 0x7ae2855400000000, 0x820fd2a600000000,
+ 0x15a9cf4100000000, 0x33d20c9900000000, 0xa474117e00000000,
+ 0x5c99468c00000000, 0xcb3f5b6b00000000, 0x5169b1e600000000,
+ 0xc6cfac0100000000, 0x3e22fbf300000000, 0xa984e61400000000,
+ 0x8fff25cc00000000, 0x1859382b00000000, 0xe0b46fd900000000,
+ 0x7712723e00000000},
+ {0x0000000000000000, 0x411b8c6e00000000, 0x823618dd00000000,
+ 0xc32d94b300000000, 0x456b416100000000, 0x0470cd0f00000000,
+ 0xc75d59bc00000000, 0x8646d5d200000000, 0x8ad682c200000000,
+ 0xcbcd0eac00000000, 0x08e09a1f00000000, 0x49fb167100000000,
+ 0xcfbdc3a300000000, 0x8ea64fcd00000000, 0x4d8bdb7e00000000,
+ 0x0c90571000000000, 0x55ab745e00000000, 0x14b0f83000000000,
+ 0xd79d6c8300000000, 0x9686e0ed00000000, 0x10c0353f00000000,
+ 0x51dbb95100000000, 0x92f62de200000000, 0xd3eda18c00000000,
+ 0xdf7df69c00000000, 0x9e667af200000000, 0x5d4bee4100000000,
+ 0x1c50622f00000000, 0x9a16b7fd00000000, 0xdb0d3b9300000000,
+ 0x1820af2000000000, 0x593b234e00000000, 0xaa56e9bc00000000,
+ 0xeb4d65d200000000, 0x2860f16100000000, 0x697b7d0f00000000,
+ 0xef3da8dd00000000, 0xae2624b300000000, 0x6d0bb00000000000,
+ 0x2c103c6e00000000, 0x20806b7e00000000, 0x619be71000000000,
+ 0xa2b673a300000000, 0xe3adffcd00000000, 0x65eb2a1f00000000,
+ 0x24f0a67100000000, 0xe7dd32c200000000, 0xa6c6beac00000000,
+ 0xfffd9de200000000, 0xbee6118c00000000, 0x7dcb853f00000000,
+ 0x3cd0095100000000, 0xba96dc8300000000, 0xfb8d50ed00000000,
+ 0x38a0c45e00000000, 0x79bb483000000000, 0x752b1f2000000000,
+ 0x3430934e00000000, 0xf71d07fd00000000, 0xb6068b9300000000,
+ 0x30405e4100000000, 0x715bd22f00000000, 0xb276469c00000000,
+ 0xf36dcaf200000000, 0x15aba3a200000000, 0x54b02fcc00000000,
+ 0x979dbb7f00000000, 0xd686371100000000, 0x50c0e2c300000000,
+ 0x11db6ead00000000, 0xd2f6fa1e00000000, 0x93ed767000000000,
+ 0x9f7d216000000000, 0xde66ad0e00000000, 0x1d4b39bd00000000,
+ 0x5c50b5d300000000, 0xda16600100000000, 0x9b0dec6f00000000,
+ 0x582078dc00000000, 0x193bf4b200000000, 0x4000d7fc00000000,
+ 0x011b5b9200000000, 0xc236cf2100000000, 0x832d434f00000000,
+ 0x056b969d00000000, 0x44701af300000000, 0x875d8e4000000000,
+ 0xc646022e00000000, 0xcad6553e00000000, 0x8bcdd95000000000,
+ 0x48e04de300000000, 0x09fbc18d00000000, 0x8fbd145f00000000,
+ 0xcea6983100000000, 0x0d8b0c8200000000, 0x4c9080ec00000000,
+ 0xbffd4a1e00000000, 0xfee6c67000000000, 0x3dcb52c300000000,
+ 0x7cd0dead00000000, 0xfa960b7f00000000, 0xbb8d871100000000,
+ 0x78a013a200000000, 0x39bb9fcc00000000, 0x352bc8dc00000000,
+ 0x743044b200000000, 0xb71dd00100000000, 0xf6065c6f00000000,
+ 0x704089bd00000000, 0x315b05d300000000, 0xf276916000000000,
+ 0xb36d1d0e00000000, 0xea563e4000000000, 0xab4db22e00000000,
+ 0x6860269d00000000, 0x297baaf300000000, 0xaf3d7f2100000000,
+ 0xee26f34f00000000, 0x2d0b67fc00000000, 0x6c10eb9200000000,
+ 0x6080bc8200000000, 0x219b30ec00000000, 0xe2b6a45f00000000,
+ 0xa3ad283100000000, 0x25ebfde300000000, 0x64f0718d00000000,
+ 0xa7dde53e00000000, 0xe6c6695000000000, 0x6b50369e00000000,
+ 0x2a4bbaf000000000, 0xe9662e4300000000, 0xa87da22d00000000,
+ 0x2e3b77ff00000000, 0x6f20fb9100000000, 0xac0d6f2200000000,
+ 0xed16e34c00000000, 0xe186b45c00000000, 0xa09d383200000000,
+ 0x63b0ac8100000000, 0x22ab20ef00000000, 0xa4edf53d00000000,
+ 0xe5f6795300000000, 0x26dbede000000000, 0x67c0618e00000000,
+ 0x3efb42c000000000, 0x7fe0ceae00000000, 0xbccd5a1d00000000,
+ 0xfdd6d67300000000, 0x7b9003a100000000, 0x3a8b8fcf00000000,
+ 0xf9a61b7c00000000, 0xb8bd971200000000, 0xb42dc00200000000,
+ 0xf5364c6c00000000, 0x361bd8df00000000, 0x770054b100000000,
+ 0xf146816300000000, 0xb05d0d0d00000000, 0x737099be00000000,
+ 0x326b15d000000000, 0xc106df2200000000, 0x801d534c00000000,
+ 0x4330c7ff00000000, 0x022b4b9100000000, 0x846d9e4300000000,
+ 0xc576122d00000000, 0x065b869e00000000, 0x47400af000000000,
+ 0x4bd05de000000000, 0x0acbd18e00000000, 0xc9e6453d00000000,
+ 0x88fdc95300000000, 0x0ebb1c8100000000, 0x4fa090ef00000000,
+ 0x8c8d045c00000000, 0xcd96883200000000, 0x94adab7c00000000,
+ 0xd5b6271200000000, 0x169bb3a100000000, 0x57803fcf00000000,
+ 0xd1c6ea1d00000000, 0x90dd667300000000, 0x53f0f2c000000000,
+ 0x12eb7eae00000000, 0x1e7b29be00000000, 0x5f60a5d000000000,
+ 0x9c4d316300000000, 0xdd56bd0d00000000, 0x5b1068df00000000,
+ 0x1a0be4b100000000, 0xd926700200000000, 0x983dfc6c00000000,
+ 0x7efb953c00000000, 0x3fe0195200000000, 0xfccd8de100000000,
+ 0xbdd6018f00000000, 0x3b90d45d00000000, 0x7a8b583300000000,
+ 0xb9a6cc8000000000, 0xf8bd40ee00000000, 0xf42d17fe00000000,
+ 0xb5369b9000000000, 0x761b0f2300000000, 0x3700834d00000000,
+ 0xb146569f00000000, 0xf05ddaf100000000, 0x33704e4200000000,
+ 0x726bc22c00000000, 0x2b50e16200000000, 0x6a4b6d0c00000000,
+ 0xa966f9bf00000000, 0xe87d75d100000000, 0x6e3ba00300000000,
+ 0x2f202c6d00000000, 0xec0db8de00000000, 0xad1634b000000000,
+ 0xa18663a000000000, 0xe09defce00000000, 0x23b07b7d00000000,
+ 0x62abf71300000000, 0xe4ed22c100000000, 0xa5f6aeaf00000000,
+ 0x66db3a1c00000000, 0x27c0b67200000000, 0xd4ad7c8000000000,
+ 0x95b6f0ee00000000, 0x569b645d00000000, 0x1780e83300000000,
+ 0x91c63de100000000, 0xd0ddb18f00000000, 0x13f0253c00000000,
+ 0x52eba95200000000, 0x5e7bfe4200000000, 0x1f60722c00000000,
+ 0xdc4de69f00000000, 0x9d566af100000000, 0x1b10bf2300000000,
+ 0x5a0b334d00000000, 0x9926a7fe00000000, 0xd83d2b9000000000,
+ 0x810608de00000000, 0xc01d84b000000000, 0x0330100300000000,
+ 0x422b9c6d00000000, 0xc46d49bf00000000, 0x8576c5d100000000,
+ 0x465b516200000000, 0x0740dd0c00000000, 0x0bd08a1c00000000,
+ 0x4acb067200000000, 0x89e692c100000000, 0xc8fd1eaf00000000,
+ 0x4ebbcb7d00000000, 0x0fa0471300000000, 0xcc8dd3a000000000,
+ 0x8d965fce00000000},
+ {0x0000000000000000, 0x1dfdb50100000000, 0x3afa6b0300000000,
+ 0x2707de0200000000, 0x74f4d70600000000, 0x6909620700000000,
+ 0x4e0ebc0500000000, 0x53f3090400000000, 0xe8e8af0d00000000,
+ 0xf5151a0c00000000, 0xd212c40e00000000, 0xcfef710f00000000,
+ 0x9c1c780b00000000, 0x81e1cd0a00000000, 0xa6e6130800000000,
+ 0xbb1ba60900000000, 0xd0d15f1b00000000, 0xcd2cea1a00000000,
+ 0xea2b341800000000, 0xf7d6811900000000, 0xa425881d00000000,
+ 0xb9d83d1c00000000, 0x9edfe31e00000000, 0x8322561f00000000,
+ 0x3839f01600000000, 0x25c4451700000000, 0x02c39b1500000000,
+ 0x1f3e2e1400000000, 0x4ccd271000000000, 0x5130921100000000,
+ 0x76374c1300000000, 0x6bcaf91200000000, 0xa0a3bf3600000000,
+ 0xbd5e0a3700000000, 0x9a59d43500000000, 0x87a4613400000000,
+ 0xd457683000000000, 0xc9aadd3100000000, 0xeead033300000000,
+ 0xf350b63200000000, 0x484b103b00000000, 0x55b6a53a00000000,
+ 0x72b17b3800000000, 0x6f4cce3900000000, 0x3cbfc73d00000000,
+ 0x2142723c00000000, 0x0645ac3e00000000, 0x1bb8193f00000000,
+ 0x7072e02d00000000, 0x6d8f552c00000000, 0x4a888b2e00000000,
+ 0x57753e2f00000000, 0x0486372b00000000, 0x197b822a00000000,
+ 0x3e7c5c2800000000, 0x2381e92900000000, 0x989a4f2000000000,
+ 0x8567fa2100000000, 0xa260242300000000, 0xbf9d912200000000,
+ 0xec6e982600000000, 0xf1932d2700000000, 0xd694f32500000000,
+ 0xcb69462400000000, 0x40477f6d00000000, 0x5dbaca6c00000000,
+ 0x7abd146e00000000, 0x6740a16f00000000, 0x34b3a86b00000000,
+ 0x294e1d6a00000000, 0x0e49c36800000000, 0x13b4766900000000,
+ 0xa8afd06000000000, 0xb552656100000000, 0x9255bb6300000000,
+ 0x8fa80e6200000000, 0xdc5b076600000000, 0xc1a6b26700000000,
+ 0xe6a16c6500000000, 0xfb5cd96400000000, 0x9096207600000000,
+ 0x8d6b957700000000, 0xaa6c4b7500000000, 0xb791fe7400000000,
+ 0xe462f77000000000, 0xf99f427100000000, 0xde989c7300000000,
+ 0xc365297200000000, 0x787e8f7b00000000, 0x65833a7a00000000,
+ 0x4284e47800000000, 0x5f79517900000000, 0x0c8a587d00000000,
+ 0x1177ed7c00000000, 0x3670337e00000000, 0x2b8d867f00000000,
+ 0xe0e4c05b00000000, 0xfd19755a00000000, 0xda1eab5800000000,
+ 0xc7e31e5900000000, 0x9410175d00000000, 0x89eda25c00000000,
+ 0xaeea7c5e00000000, 0xb317c95f00000000, 0x080c6f5600000000,
+ 0x15f1da5700000000, 0x32f6045500000000, 0x2f0bb15400000000,
+ 0x7cf8b85000000000, 0x61050d5100000000, 0x4602d35300000000,
+ 0x5bff665200000000, 0x30359f4000000000, 0x2dc82a4100000000,
+ 0x0acff44300000000, 0x1732414200000000, 0x44c1484600000000,
+ 0x593cfd4700000000, 0x7e3b234500000000, 0x63c6964400000000,
+ 0xd8dd304d00000000, 0xc520854c00000000, 0xe2275b4e00000000,
+ 0xffdaee4f00000000, 0xac29e74b00000000, 0xb1d4524a00000000,
+ 0x96d38c4800000000, 0x8b2e394900000000, 0x808efeda00000000,
+ 0x9d734bdb00000000, 0xba7495d900000000, 0xa78920d800000000,
+ 0xf47a29dc00000000, 0xe9879cdd00000000, 0xce8042df00000000,
+ 0xd37df7de00000000, 0x686651d700000000, 0x759be4d600000000,
+ 0x529c3ad400000000, 0x4f618fd500000000, 0x1c9286d100000000,
+ 0x016f33d000000000, 0x2668edd200000000, 0x3b9558d300000000,
+ 0x505fa1c100000000, 0x4da214c000000000, 0x6aa5cac200000000,
+ 0x77587fc300000000, 0x24ab76c700000000, 0x3956c3c600000000,
+ 0x1e511dc400000000, 0x03aca8c500000000, 0xb8b70ecc00000000,
+ 0xa54abbcd00000000, 0x824d65cf00000000, 0x9fb0d0ce00000000,
+ 0xcc43d9ca00000000, 0xd1be6ccb00000000, 0xf6b9b2c900000000,
+ 0xeb4407c800000000, 0x202d41ec00000000, 0x3dd0f4ed00000000,
+ 0x1ad72aef00000000, 0x072a9fee00000000, 0x54d996ea00000000,
+ 0x492423eb00000000, 0x6e23fde900000000, 0x73de48e800000000,
+ 0xc8c5eee100000000, 0xd5385be000000000, 0xf23f85e200000000,
+ 0xefc230e300000000, 0xbc3139e700000000, 0xa1cc8ce600000000,
+ 0x86cb52e400000000, 0x9b36e7e500000000, 0xf0fc1ef700000000,
+ 0xed01abf600000000, 0xca0675f400000000, 0xd7fbc0f500000000,
+ 0x8408c9f100000000, 0x99f57cf000000000, 0xbef2a2f200000000,
+ 0xa30f17f300000000, 0x1814b1fa00000000, 0x05e904fb00000000,
+ 0x22eedaf900000000, 0x3f136ff800000000, 0x6ce066fc00000000,
+ 0x711dd3fd00000000, 0x561a0dff00000000, 0x4be7b8fe00000000,
+ 0xc0c981b700000000, 0xdd3434b600000000, 0xfa33eab400000000,
+ 0xe7ce5fb500000000, 0xb43d56b100000000, 0xa9c0e3b000000000,
+ 0x8ec73db200000000, 0x933a88b300000000, 0x28212eba00000000,
+ 0x35dc9bbb00000000, 0x12db45b900000000, 0x0f26f0b800000000,
+ 0x5cd5f9bc00000000, 0x41284cbd00000000, 0x662f92bf00000000,
+ 0x7bd227be00000000, 0x1018deac00000000, 0x0de56bad00000000,
+ 0x2ae2b5af00000000, 0x371f00ae00000000, 0x64ec09aa00000000,
+ 0x7911bcab00000000, 0x5e1662a900000000, 0x43ebd7a800000000,
+ 0xf8f071a100000000, 0xe50dc4a000000000, 0xc20a1aa200000000,
+ 0xdff7afa300000000, 0x8c04a6a700000000, 0x91f913a600000000,
+ 0xb6fecda400000000, 0xab0378a500000000, 0x606a3e8100000000,
+ 0x7d978b8000000000, 0x5a90558200000000, 0x476de08300000000,
+ 0x149ee98700000000, 0x09635c8600000000, 0x2e64828400000000,
+ 0x3399378500000000, 0x8882918c00000000, 0x957f248d00000000,
+ 0xb278fa8f00000000, 0xaf854f8e00000000, 0xfc76468a00000000,
+ 0xe18bf38b00000000, 0xc68c2d8900000000, 0xdb71988800000000,
+ 0xb0bb619a00000000, 0xad46d49b00000000, 0x8a410a9900000000,
+ 0x97bcbf9800000000, 0xc44fb69c00000000, 0xd9b2039d00000000,
+ 0xfeb5dd9f00000000, 0xe348689e00000000, 0x5853ce9700000000,
+ 0x45ae7b9600000000, 0x62a9a59400000000, 0x7f54109500000000,
+ 0x2ca7199100000000, 0x315aac9000000000, 0x165d729200000000,
+ 0x0ba0c79300000000},
+ {0x0000000000000000, 0x24d9076300000000, 0x48b20fc600000000,
+ 0x6c6b08a500000000, 0xd1626e5700000000, 0xf5bb693400000000,
+ 0x99d0619100000000, 0xbd0966f200000000, 0xa2c5dcae00000000,
+ 0x861cdbcd00000000, 0xea77d36800000000, 0xceaed40b00000000,
+ 0x73a7b2f900000000, 0x577eb59a00000000, 0x3b15bd3f00000000,
+ 0x1fccba5c00000000, 0x058dc88600000000, 0x2154cfe500000000,
+ 0x4d3fc74000000000, 0x69e6c02300000000, 0xd4efa6d100000000,
+ 0xf036a1b200000000, 0x9c5da91700000000, 0xb884ae7400000000,
+ 0xa748142800000000, 0x8391134b00000000, 0xeffa1bee00000000,
+ 0xcb231c8d00000000, 0x762a7a7f00000000, 0x52f37d1c00000000,
+ 0x3e9875b900000000, 0x1a4172da00000000, 0x4b1ce0d600000000,
+ 0x6fc5e7b500000000, 0x03aeef1000000000, 0x2777e87300000000,
+ 0x9a7e8e8100000000, 0xbea789e200000000, 0xd2cc814700000000,
+ 0xf615862400000000, 0xe9d93c7800000000, 0xcd003b1b00000000,
+ 0xa16b33be00000000, 0x85b234dd00000000, 0x38bb522f00000000,
+ 0x1c62554c00000000, 0x70095de900000000, 0x54d05a8a00000000,
+ 0x4e91285000000000, 0x6a482f3300000000, 0x0623279600000000,
+ 0x22fa20f500000000, 0x9ff3460700000000, 0xbb2a416400000000,
+ 0xd74149c100000000, 0xf3984ea200000000, 0xec54f4fe00000000,
+ 0xc88df39d00000000, 0xa4e6fb3800000000, 0x803ffc5b00000000,
+ 0x3d369aa900000000, 0x19ef9dca00000000, 0x7584956f00000000,
+ 0x515d920c00000000, 0xd73eb17600000000, 0xf3e7b61500000000,
+ 0x9f8cbeb000000000, 0xbb55b9d300000000, 0x065cdf2100000000,
+ 0x2285d84200000000, 0x4eeed0e700000000, 0x6a37d78400000000,
+ 0x75fb6dd800000000, 0x51226abb00000000, 0x3d49621e00000000,
+ 0x1990657d00000000, 0xa499038f00000000, 0x804004ec00000000,
+ 0xec2b0c4900000000, 0xc8f20b2a00000000, 0xd2b379f000000000,
+ 0xf66a7e9300000000, 0x9a01763600000000, 0xbed8715500000000,
+ 0x03d117a700000000, 0x270810c400000000, 0x4b63186100000000,
+ 0x6fba1f0200000000, 0x7076a55e00000000, 0x54afa23d00000000,
+ 0x38c4aa9800000000, 0x1c1dadfb00000000, 0xa114cb0900000000,
+ 0x85cdcc6a00000000, 0xe9a6c4cf00000000, 0xcd7fc3ac00000000,
+ 0x9c2251a000000000, 0xb8fb56c300000000, 0xd4905e6600000000,
+ 0xf049590500000000, 0x4d403ff700000000, 0x6999389400000000,
+ 0x05f2303100000000, 0x212b375200000000, 0x3ee78d0e00000000,
+ 0x1a3e8a6d00000000, 0x765582c800000000, 0x528c85ab00000000,
+ 0xef85e35900000000, 0xcb5ce43a00000000, 0xa737ec9f00000000,
+ 0x83eeebfc00000000, 0x99af992600000000, 0xbd769e4500000000,
+ 0xd11d96e000000000, 0xf5c4918300000000, 0x48cdf77100000000,
+ 0x6c14f01200000000, 0x007ff8b700000000, 0x24a6ffd400000000,
+ 0x3b6a458800000000, 0x1fb342eb00000000, 0x73d84a4e00000000,
+ 0x57014d2d00000000, 0xea082bdf00000000, 0xced12cbc00000000,
+ 0xa2ba241900000000, 0x8663237a00000000, 0xae7d62ed00000000,
+ 0x8aa4658e00000000, 0xe6cf6d2b00000000, 0xc2166a4800000000,
+ 0x7f1f0cba00000000, 0x5bc60bd900000000, 0x37ad037c00000000,
+ 0x1374041f00000000, 0x0cb8be4300000000, 0x2861b92000000000,
+ 0x440ab18500000000, 0x60d3b6e600000000, 0xdddad01400000000,
+ 0xf903d77700000000, 0x9568dfd200000000, 0xb1b1d8b100000000,
+ 0xabf0aa6b00000000, 0x8f29ad0800000000, 0xe342a5ad00000000,
+ 0xc79ba2ce00000000, 0x7a92c43c00000000, 0x5e4bc35f00000000,
+ 0x3220cbfa00000000, 0x16f9cc9900000000, 0x093576c500000000,
+ 0x2dec71a600000000, 0x4187790300000000, 0x655e7e6000000000,
+ 0xd857189200000000, 0xfc8e1ff100000000, 0x90e5175400000000,
+ 0xb43c103700000000, 0xe561823b00000000, 0xc1b8855800000000,
+ 0xadd38dfd00000000, 0x890a8a9e00000000, 0x3403ec6c00000000,
+ 0x10daeb0f00000000, 0x7cb1e3aa00000000, 0x5868e4c900000000,
+ 0x47a45e9500000000, 0x637d59f600000000, 0x0f16515300000000,
+ 0x2bcf563000000000, 0x96c630c200000000, 0xb21f37a100000000,
+ 0xde743f0400000000, 0xfaad386700000000, 0xe0ec4abd00000000,
+ 0xc4354dde00000000, 0xa85e457b00000000, 0x8c87421800000000,
+ 0x318e24ea00000000, 0x1557238900000000, 0x793c2b2c00000000,
+ 0x5de52c4f00000000, 0x4229961300000000, 0x66f0917000000000,
+ 0x0a9b99d500000000, 0x2e429eb600000000, 0x934bf84400000000,
+ 0xb792ff2700000000, 0xdbf9f78200000000, 0xff20f0e100000000,
+ 0x7943d39b00000000, 0x5d9ad4f800000000, 0x31f1dc5d00000000,
+ 0x1528db3e00000000, 0xa821bdcc00000000, 0x8cf8baaf00000000,
+ 0xe093b20a00000000, 0xc44ab56900000000, 0xdb860f3500000000,
+ 0xff5f085600000000, 0x933400f300000000, 0xb7ed079000000000,
+ 0x0ae4616200000000, 0x2e3d660100000000, 0x42566ea400000000,
+ 0x668f69c700000000, 0x7cce1b1d00000000, 0x58171c7e00000000,
+ 0x347c14db00000000, 0x10a513b800000000, 0xadac754a00000000,
+ 0x8975722900000000, 0xe51e7a8c00000000, 0xc1c77def00000000,
+ 0xde0bc7b300000000, 0xfad2c0d000000000, 0x96b9c87500000000,
+ 0xb260cf1600000000, 0x0f69a9e400000000, 0x2bb0ae8700000000,
+ 0x47dba62200000000, 0x6302a14100000000, 0x325f334d00000000,
+ 0x1686342e00000000, 0x7aed3c8b00000000, 0x5e343be800000000,
+ 0xe33d5d1a00000000, 0xc7e45a7900000000, 0xab8f52dc00000000,
+ 0x8f5655bf00000000, 0x909aefe300000000, 0xb443e88000000000,
+ 0xd828e02500000000, 0xfcf1e74600000000, 0x41f881b400000000,
+ 0x652186d700000000, 0x094a8e7200000000, 0x2d93891100000000,
+ 0x37d2fbcb00000000, 0x130bfca800000000, 0x7f60f40d00000000,
+ 0x5bb9f36e00000000, 0xe6b0959c00000000, 0xc26992ff00000000,
+ 0xae029a5a00000000, 0x8adb9d3900000000, 0x9517276500000000,
+ 0xb1ce200600000000, 0xdda528a300000000, 0xf97c2fc000000000,
+ 0x4475493200000000, 0x60ac4e5100000000, 0x0cc746f400000000,
+ 0x281e419700000000},
+ {0x0000000000000000, 0x08e3603c00000000, 0x10c6c17800000000,
+ 0x1825a14400000000, 0x208c83f100000000, 0x286fe3cd00000000,
+ 0x304a428900000000, 0x38a922b500000000, 0x011e763800000000,
+ 0x09fd160400000000, 0x11d8b74000000000, 0x193bd77c00000000,
+ 0x2192f5c900000000, 0x297195f500000000, 0x315434b100000000,
+ 0x39b7548d00000000, 0x023cec7000000000, 0x0adf8c4c00000000,
+ 0x12fa2d0800000000, 0x1a194d3400000000, 0x22b06f8100000000,
+ 0x2a530fbd00000000, 0x3276aef900000000, 0x3a95cec500000000,
+ 0x03229a4800000000, 0x0bc1fa7400000000, 0x13e45b3000000000,
+ 0x1b073b0c00000000, 0x23ae19b900000000, 0x2b4d798500000000,
+ 0x3368d8c100000000, 0x3b8bb8fd00000000, 0x0478d8e100000000,
+ 0x0c9bb8dd00000000, 0x14be199900000000, 0x1c5d79a500000000,
+ 0x24f45b1000000000, 0x2c173b2c00000000, 0x34329a6800000000,
+ 0x3cd1fa5400000000, 0x0566aed900000000, 0x0d85cee500000000,
+ 0x15a06fa100000000, 0x1d430f9d00000000, 0x25ea2d2800000000,
+ 0x2d094d1400000000, 0x352cec5000000000, 0x3dcf8c6c00000000,
+ 0x0644349100000000, 0x0ea754ad00000000, 0x1682f5e900000000,
+ 0x1e6195d500000000, 0x26c8b76000000000, 0x2e2bd75c00000000,
+ 0x360e761800000000, 0x3eed162400000000, 0x075a42a900000000,
+ 0x0fb9229500000000, 0x179c83d100000000, 0x1f7fe3ed00000000,
+ 0x27d6c15800000000, 0x2f35a16400000000, 0x3710002000000000,
+ 0x3ff3601c00000000, 0x49f6c11800000000, 0x4115a12400000000,
+ 0x5930006000000000, 0x51d3605c00000000, 0x697a42e900000000,
+ 0x619922d500000000, 0x79bc839100000000, 0x715fe3ad00000000,
+ 0x48e8b72000000000, 0x400bd71c00000000, 0x582e765800000000,
+ 0x50cd166400000000, 0x686434d100000000, 0x608754ed00000000,
+ 0x78a2f5a900000000, 0x7041959500000000, 0x4bca2d6800000000,
+ 0x43294d5400000000, 0x5b0cec1000000000, 0x53ef8c2c00000000,
+ 0x6b46ae9900000000, 0x63a5cea500000000, 0x7b806fe100000000,
+ 0x73630fdd00000000, 0x4ad45b5000000000, 0x42373b6c00000000,
+ 0x5a129a2800000000, 0x52f1fa1400000000, 0x6a58d8a100000000,
+ 0x62bbb89d00000000, 0x7a9e19d900000000, 0x727d79e500000000,
+ 0x4d8e19f900000000, 0x456d79c500000000, 0x5d48d88100000000,
+ 0x55abb8bd00000000, 0x6d029a0800000000, 0x65e1fa3400000000,
+ 0x7dc45b7000000000, 0x75273b4c00000000, 0x4c906fc100000000,
+ 0x44730ffd00000000, 0x5c56aeb900000000, 0x54b5ce8500000000,
+ 0x6c1cec3000000000, 0x64ff8c0c00000000, 0x7cda2d4800000000,
+ 0x74394d7400000000, 0x4fb2f58900000000, 0x475195b500000000,
+ 0x5f7434f100000000, 0x579754cd00000000, 0x6f3e767800000000,
+ 0x67dd164400000000, 0x7ff8b70000000000, 0x771bd73c00000000,
+ 0x4eac83b100000000, 0x464fe38d00000000, 0x5e6a42c900000000,
+ 0x568922f500000000, 0x6e20004000000000, 0x66c3607c00000000,
+ 0x7ee6c13800000000, 0x7605a10400000000, 0x92ec833100000000,
+ 0x9a0fe30d00000000, 0x822a424900000000, 0x8ac9227500000000,
+ 0xb26000c000000000, 0xba8360fc00000000, 0xa2a6c1b800000000,
+ 0xaa45a18400000000, 0x93f2f50900000000, 0x9b11953500000000,
+ 0x8334347100000000, 0x8bd7544d00000000, 0xb37e76f800000000,
+ 0xbb9d16c400000000, 0xa3b8b78000000000, 0xab5bd7bc00000000,
+ 0x90d06f4100000000, 0x98330f7d00000000, 0x8016ae3900000000,
+ 0x88f5ce0500000000, 0xb05cecb000000000, 0xb8bf8c8c00000000,
+ 0xa09a2dc800000000, 0xa8794df400000000, 0x91ce197900000000,
+ 0x992d794500000000, 0x8108d80100000000, 0x89ebb83d00000000,
+ 0xb1429a8800000000, 0xb9a1fab400000000, 0xa1845bf000000000,
+ 0xa9673bcc00000000, 0x96945bd000000000, 0x9e773bec00000000,
+ 0x86529aa800000000, 0x8eb1fa9400000000, 0xb618d82100000000,
+ 0xbefbb81d00000000, 0xa6de195900000000, 0xae3d796500000000,
+ 0x978a2de800000000, 0x9f694dd400000000, 0x874cec9000000000,
+ 0x8faf8cac00000000, 0xb706ae1900000000, 0xbfe5ce2500000000,
+ 0xa7c06f6100000000, 0xaf230f5d00000000, 0x94a8b7a000000000,
+ 0x9c4bd79c00000000, 0x846e76d800000000, 0x8c8d16e400000000,
+ 0xb424345100000000, 0xbcc7546d00000000, 0xa4e2f52900000000,
+ 0xac01951500000000, 0x95b6c19800000000, 0x9d55a1a400000000,
+ 0x857000e000000000, 0x8d9360dc00000000, 0xb53a426900000000,
+ 0xbdd9225500000000, 0xa5fc831100000000, 0xad1fe32d00000000,
+ 0xdb1a422900000000, 0xd3f9221500000000, 0xcbdc835100000000,
+ 0xc33fe36d00000000, 0xfb96c1d800000000, 0xf375a1e400000000,
+ 0xeb5000a000000000, 0xe3b3609c00000000, 0xda04341100000000,
+ 0xd2e7542d00000000, 0xcac2f56900000000, 0xc221955500000000,
+ 0xfa88b7e000000000, 0xf26bd7dc00000000, 0xea4e769800000000,
+ 0xe2ad16a400000000, 0xd926ae5900000000, 0xd1c5ce6500000000,
+ 0xc9e06f2100000000, 0xc1030f1d00000000, 0xf9aa2da800000000,
+ 0xf1494d9400000000, 0xe96cecd000000000, 0xe18f8cec00000000,
+ 0xd838d86100000000, 0xd0dbb85d00000000, 0xc8fe191900000000,
+ 0xc01d792500000000, 0xf8b45b9000000000, 0xf0573bac00000000,
+ 0xe8729ae800000000, 0xe091fad400000000, 0xdf629ac800000000,
+ 0xd781faf400000000, 0xcfa45bb000000000, 0xc7473b8c00000000,
+ 0xffee193900000000, 0xf70d790500000000, 0xef28d84100000000,
+ 0xe7cbb87d00000000, 0xde7cecf000000000, 0xd69f8ccc00000000,
+ 0xceba2d8800000000, 0xc6594db400000000, 0xfef06f0100000000,
+ 0xf6130f3d00000000, 0xee36ae7900000000, 0xe6d5ce4500000000,
+ 0xdd5e76b800000000, 0xd5bd168400000000, 0xcd98b7c000000000,
+ 0xc57bd7fc00000000, 0xfdd2f54900000000, 0xf531957500000000,
+ 0xed14343100000000, 0xe5f7540d00000000, 0xdc40008000000000,
+ 0xd4a360bc00000000, 0xcc86c1f800000000, 0xc465a1c400000000,
+ 0xfccc837100000000, 0xf42fe34d00000000, 0xec0a420900000000,
+ 0xe4e9223500000000},
+ {0x0000000000000000, 0xd1e8e70e00000000, 0xa2d1cf1d00000000,
+ 0x7339281300000000, 0x44a39f3b00000000, 0x954b783500000000,
+ 0xe672502600000000, 0x379ab72800000000, 0x88463f7700000000,
+ 0x59aed87900000000, 0x2a97f06a00000000, 0xfb7f176400000000,
+ 0xcce5a04c00000000, 0x1d0d474200000000, 0x6e346f5100000000,
+ 0xbfdc885f00000000, 0x108d7eee00000000, 0xc16599e000000000,
+ 0xb25cb1f300000000, 0x63b456fd00000000, 0x542ee1d500000000,
+ 0x85c606db00000000, 0xf6ff2ec800000000, 0x2717c9c600000000,
+ 0x98cb419900000000, 0x4923a69700000000, 0x3a1a8e8400000000,
+ 0xebf2698a00000000, 0xdc68dea200000000, 0x0d8039ac00000000,
+ 0x7eb911bf00000000, 0xaf51f6b100000000, 0x611c8c0700000000,
+ 0xb0f46b0900000000, 0xc3cd431a00000000, 0x1225a41400000000,
+ 0x25bf133c00000000, 0xf457f43200000000, 0x876edc2100000000,
+ 0x56863b2f00000000, 0xe95ab37000000000, 0x38b2547e00000000,
+ 0x4b8b7c6d00000000, 0x9a639b6300000000, 0xadf92c4b00000000,
+ 0x7c11cb4500000000, 0x0f28e35600000000, 0xdec0045800000000,
+ 0x7191f2e900000000, 0xa07915e700000000, 0xd3403df400000000,
+ 0x02a8dafa00000000, 0x35326dd200000000, 0xe4da8adc00000000,
+ 0x97e3a2cf00000000, 0x460b45c100000000, 0xf9d7cd9e00000000,
+ 0x283f2a9000000000, 0x5b06028300000000, 0x8aeee58d00000000,
+ 0xbd7452a500000000, 0x6c9cb5ab00000000, 0x1fa59db800000000,
+ 0xce4d7ab600000000, 0xc238180f00000000, 0x13d0ff0100000000,
+ 0x60e9d71200000000, 0xb101301c00000000, 0x869b873400000000,
+ 0x5773603a00000000, 0x244a482900000000, 0xf5a2af2700000000,
+ 0x4a7e277800000000, 0x9b96c07600000000, 0xe8afe86500000000,
+ 0x39470f6b00000000, 0x0eddb84300000000, 0xdf355f4d00000000,
+ 0xac0c775e00000000, 0x7de4905000000000, 0xd2b566e100000000,
+ 0x035d81ef00000000, 0x7064a9fc00000000, 0xa18c4ef200000000,
+ 0x9616f9da00000000, 0x47fe1ed400000000, 0x34c736c700000000,
+ 0xe52fd1c900000000, 0x5af3599600000000, 0x8b1bbe9800000000,
+ 0xf822968b00000000, 0x29ca718500000000, 0x1e50c6ad00000000,
+ 0xcfb821a300000000, 0xbc8109b000000000, 0x6d69eebe00000000,
+ 0xa324940800000000, 0x72cc730600000000, 0x01f55b1500000000,
+ 0xd01dbc1b00000000, 0xe7870b3300000000, 0x366fec3d00000000,
+ 0x4556c42e00000000, 0x94be232000000000, 0x2b62ab7f00000000,
+ 0xfa8a4c7100000000, 0x89b3646200000000, 0x585b836c00000000,
+ 0x6fc1344400000000, 0xbe29d34a00000000, 0xcd10fb5900000000,
+ 0x1cf81c5700000000, 0xb3a9eae600000000, 0x62410de800000000,
+ 0x117825fb00000000, 0xc090c2f500000000, 0xf70a75dd00000000,
+ 0x26e292d300000000, 0x55dbbac000000000, 0x84335dce00000000,
+ 0x3befd59100000000, 0xea07329f00000000, 0x993e1a8c00000000,
+ 0x48d6fd8200000000, 0x7f4c4aaa00000000, 0xaea4ada400000000,
+ 0xdd9d85b700000000, 0x0c7562b900000000, 0x8471301e00000000,
+ 0x5599d71000000000, 0x26a0ff0300000000, 0xf748180d00000000,
+ 0xc0d2af2500000000, 0x113a482b00000000, 0x6203603800000000,
+ 0xb3eb873600000000, 0x0c370f6900000000, 0xdddfe86700000000,
+ 0xaee6c07400000000, 0x7f0e277a00000000, 0x4894905200000000,
+ 0x997c775c00000000, 0xea455f4f00000000, 0x3badb84100000000,
+ 0x94fc4ef000000000, 0x4514a9fe00000000, 0x362d81ed00000000,
+ 0xe7c566e300000000, 0xd05fd1cb00000000, 0x01b736c500000000,
+ 0x728e1ed600000000, 0xa366f9d800000000, 0x1cba718700000000,
+ 0xcd52968900000000, 0xbe6bbe9a00000000, 0x6f83599400000000,
+ 0x5819eebc00000000, 0x89f109b200000000, 0xfac821a100000000,
+ 0x2b20c6af00000000, 0xe56dbc1900000000, 0x34855b1700000000,
+ 0x47bc730400000000, 0x9654940a00000000, 0xa1ce232200000000,
+ 0x7026c42c00000000, 0x031fec3f00000000, 0xd2f70b3100000000,
+ 0x6d2b836e00000000, 0xbcc3646000000000, 0xcffa4c7300000000,
+ 0x1e12ab7d00000000, 0x29881c5500000000, 0xf860fb5b00000000,
+ 0x8b59d34800000000, 0x5ab1344600000000, 0xf5e0c2f700000000,
+ 0x240825f900000000, 0x57310dea00000000, 0x86d9eae400000000,
+ 0xb1435dcc00000000, 0x60abbac200000000, 0x139292d100000000,
+ 0xc27a75df00000000, 0x7da6fd8000000000, 0xac4e1a8e00000000,
+ 0xdf77329d00000000, 0x0e9fd59300000000, 0x390562bb00000000,
+ 0xe8ed85b500000000, 0x9bd4ada600000000, 0x4a3c4aa800000000,
+ 0x4649281100000000, 0x97a1cf1f00000000, 0xe498e70c00000000,
+ 0x3570000200000000, 0x02eab72a00000000, 0xd302502400000000,
+ 0xa03b783700000000, 0x71d39f3900000000, 0xce0f176600000000,
+ 0x1fe7f06800000000, 0x6cded87b00000000, 0xbd363f7500000000,
+ 0x8aac885d00000000, 0x5b446f5300000000, 0x287d474000000000,
+ 0xf995a04e00000000, 0x56c456ff00000000, 0x872cb1f100000000,
+ 0xf41599e200000000, 0x25fd7eec00000000, 0x1267c9c400000000,
+ 0xc38f2eca00000000, 0xb0b606d900000000, 0x615ee1d700000000,
+ 0xde82698800000000, 0x0f6a8e8600000000, 0x7c53a69500000000,
+ 0xadbb419b00000000, 0x9a21f6b300000000, 0x4bc911bd00000000,
+ 0x38f039ae00000000, 0xe918dea000000000, 0x2755a41600000000,
+ 0xf6bd431800000000, 0x85846b0b00000000, 0x546c8c0500000000,
+ 0x63f63b2d00000000, 0xb21edc2300000000, 0xc127f43000000000,
+ 0x10cf133e00000000, 0xaf139b6100000000, 0x7efb7c6f00000000,
+ 0x0dc2547c00000000, 0xdc2ab37200000000, 0xebb0045a00000000,
+ 0x3a58e35400000000, 0x4961cb4700000000, 0x98892c4900000000,
+ 0x37d8daf800000000, 0xe6303df600000000, 0x950915e500000000,
+ 0x44e1f2eb00000000, 0x737b45c300000000, 0xa293a2cd00000000,
+ 0xd1aa8ade00000000, 0x00426dd000000000, 0xbf9ee58f00000000,
+ 0x6e76028100000000, 0x1d4f2a9200000000, 0xcca7cd9c00000000,
+ 0xfb3d7ab400000000, 0x2ad59dba00000000, 0x59ecb5a900000000,
+ 0x880452a700000000},
+ {0x0000000000000000, 0xaa05daf100000000, 0x150dc53800000000,
+ 0xbf081fc900000000, 0x2a1a8a7100000000, 0x801f508000000000,
+ 0x3f174f4900000000, 0x951295b800000000, 0x543414e300000000,
+ 0xfe31ce1200000000, 0x4139d1db00000000, 0xeb3c0b2a00000000,
+ 0x7e2e9e9200000000, 0xd42b446300000000, 0x6b235baa00000000,
+ 0xc126815b00000000, 0xe96e591d00000000, 0x436b83ec00000000,
+ 0xfc639c2500000000, 0x566646d400000000, 0xc374d36c00000000,
+ 0x6971099d00000000, 0xd679165400000000, 0x7c7ccca500000000,
+ 0xbd5a4dfe00000000, 0x175f970f00000000, 0xa85788c600000000,
+ 0x0252523700000000, 0x9740c78f00000000, 0x3d451d7e00000000,
+ 0x824d02b700000000, 0x2848d84600000000, 0xd2ddb23a00000000,
+ 0x78d868cb00000000, 0xc7d0770200000000, 0x6dd5adf300000000,
+ 0xf8c7384b00000000, 0x52c2e2ba00000000, 0xedcafd7300000000,
+ 0x47cf278200000000, 0x86e9a6d900000000, 0x2cec7c2800000000,
+ 0x93e463e100000000, 0x39e1b91000000000, 0xacf32ca800000000,
+ 0x06f6f65900000000, 0xb9fee99000000000, 0x13fb336100000000,
+ 0x3bb3eb2700000000, 0x91b631d600000000, 0x2ebe2e1f00000000,
+ 0x84bbf4ee00000000, 0x11a9615600000000, 0xbbacbba700000000,
+ 0x04a4a46e00000000, 0xaea17e9f00000000, 0x6f87ffc400000000,
+ 0xc582253500000000, 0x7a8a3afc00000000, 0xd08fe00d00000000,
+ 0x459d75b500000000, 0xef98af4400000000, 0x5090b08d00000000,
+ 0xfa956a7c00000000, 0xa4bb657500000000, 0x0ebebf8400000000,
+ 0xb1b6a04d00000000, 0x1bb37abc00000000, 0x8ea1ef0400000000,
+ 0x24a435f500000000, 0x9bac2a3c00000000, 0x31a9f0cd00000000,
+ 0xf08f719600000000, 0x5a8aab6700000000, 0xe582b4ae00000000,
+ 0x4f876e5f00000000, 0xda95fbe700000000, 0x7090211600000000,
+ 0xcf983edf00000000, 0x659de42e00000000, 0x4dd53c6800000000,
+ 0xe7d0e69900000000, 0x58d8f95000000000, 0xf2dd23a100000000,
+ 0x67cfb61900000000, 0xcdca6ce800000000, 0x72c2732100000000,
+ 0xd8c7a9d000000000, 0x19e1288b00000000, 0xb3e4f27a00000000,
+ 0x0cecedb300000000, 0xa6e9374200000000, 0x33fba2fa00000000,
+ 0x99fe780b00000000, 0x26f667c200000000, 0x8cf3bd3300000000,
+ 0x7666d74f00000000, 0xdc630dbe00000000, 0x636b127700000000,
+ 0xc96ec88600000000, 0x5c7c5d3e00000000, 0xf67987cf00000000,
+ 0x4971980600000000, 0xe37442f700000000, 0x2252c3ac00000000,
+ 0x8857195d00000000, 0x375f069400000000, 0x9d5adc6500000000,
+ 0x084849dd00000000, 0xa24d932c00000000, 0x1d458ce500000000,
+ 0xb740561400000000, 0x9f088e5200000000, 0x350d54a300000000,
+ 0x8a054b6a00000000, 0x2000919b00000000, 0xb512042300000000,
+ 0x1f17ded200000000, 0xa01fc11b00000000, 0x0a1a1bea00000000,
+ 0xcb3c9ab100000000, 0x6139404000000000, 0xde315f8900000000,
+ 0x7434857800000000, 0xe12610c000000000, 0x4b23ca3100000000,
+ 0xf42bd5f800000000, 0x5e2e0f0900000000, 0x4877cbea00000000,
+ 0xe272111b00000000, 0x5d7a0ed200000000, 0xf77fd42300000000,
+ 0x626d419b00000000, 0xc8689b6a00000000, 0x776084a300000000,
+ 0xdd655e5200000000, 0x1c43df0900000000, 0xb64605f800000000,
+ 0x094e1a3100000000, 0xa34bc0c000000000, 0x3659557800000000,
+ 0x9c5c8f8900000000, 0x2354904000000000, 0x89514ab100000000,
+ 0xa11992f700000000, 0x0b1c480600000000, 0xb41457cf00000000,
+ 0x1e118d3e00000000, 0x8b03188600000000, 0x2106c27700000000,
+ 0x9e0eddbe00000000, 0x340b074f00000000, 0xf52d861400000000,
+ 0x5f285ce500000000, 0xe020432c00000000, 0x4a2599dd00000000,
+ 0xdf370c6500000000, 0x7532d69400000000, 0xca3ac95d00000000,
+ 0x603f13ac00000000, 0x9aaa79d000000000, 0x30afa32100000000,
+ 0x8fa7bce800000000, 0x25a2661900000000, 0xb0b0f3a100000000,
+ 0x1ab5295000000000, 0xa5bd369900000000, 0x0fb8ec6800000000,
+ 0xce9e6d3300000000, 0x649bb7c200000000, 0xdb93a80b00000000,
+ 0x719672fa00000000, 0xe484e74200000000, 0x4e813db300000000,
+ 0xf189227a00000000, 0x5b8cf88b00000000, 0x73c420cd00000000,
+ 0xd9c1fa3c00000000, 0x66c9e5f500000000, 0xcccc3f0400000000,
+ 0x59deaabc00000000, 0xf3db704d00000000, 0x4cd36f8400000000,
+ 0xe6d6b57500000000, 0x27f0342e00000000, 0x8df5eedf00000000,
+ 0x32fdf11600000000, 0x98f82be700000000, 0x0deabe5f00000000,
+ 0xa7ef64ae00000000, 0x18e77b6700000000, 0xb2e2a19600000000,
+ 0xecccae9f00000000, 0x46c9746e00000000, 0xf9c16ba700000000,
+ 0x53c4b15600000000, 0xc6d624ee00000000, 0x6cd3fe1f00000000,
+ 0xd3dbe1d600000000, 0x79de3b2700000000, 0xb8f8ba7c00000000,
+ 0x12fd608d00000000, 0xadf57f4400000000, 0x07f0a5b500000000,
+ 0x92e2300d00000000, 0x38e7eafc00000000, 0x87eff53500000000,
+ 0x2dea2fc400000000, 0x05a2f78200000000, 0xafa72d7300000000,
+ 0x10af32ba00000000, 0xbaaae84b00000000, 0x2fb87df300000000,
+ 0x85bda70200000000, 0x3ab5b8cb00000000, 0x90b0623a00000000,
+ 0x5196e36100000000, 0xfb93399000000000, 0x449b265900000000,
+ 0xee9efca800000000, 0x7b8c691000000000, 0xd189b3e100000000,
+ 0x6e81ac2800000000, 0xc48476d900000000, 0x3e111ca500000000,
+ 0x9414c65400000000, 0x2b1cd99d00000000, 0x8119036c00000000,
+ 0x140b96d400000000, 0xbe0e4c2500000000, 0x010653ec00000000,
+ 0xab03891d00000000, 0x6a25084600000000, 0xc020d2b700000000,
+ 0x7f28cd7e00000000, 0xd52d178f00000000, 0x403f823700000000,
+ 0xea3a58c600000000, 0x5532470f00000000, 0xff379dfe00000000,
+ 0xd77f45b800000000, 0x7d7a9f4900000000, 0xc272808000000000,
+ 0x68775a7100000000, 0xfd65cfc900000000, 0x5760153800000000,
+ 0xe8680af100000000, 0x426dd00000000000, 0x834b515b00000000,
+ 0x294e8baa00000000, 0x9646946300000000, 0x3c434e9200000000,
+ 0xa951db2a00000000, 0x035401db00000000, 0xbc5c1e1200000000,
+ 0x1659c4e300000000}};
+
+#else /* W == 4 */
+
+local const z_crc_t FAR crc_braid_table[][256] = {
+ {0x00000000, 0xae689191, 0x87a02563, 0x29c8b4f2, 0xd4314c87,
+ 0x7a59dd16, 0x539169e4, 0xfdf9f875, 0x73139f4f, 0xdd7b0ede,
+ 0xf4b3ba2c, 0x5adb2bbd, 0xa722d3c8, 0x094a4259, 0x2082f6ab,
+ 0x8eea673a, 0xe6273e9e, 0x484faf0f, 0x61871bfd, 0xcfef8a6c,
+ 0x32167219, 0x9c7ee388, 0xb5b6577a, 0x1bdec6eb, 0x9534a1d1,
+ 0x3b5c3040, 0x129484b2, 0xbcfc1523, 0x4105ed56, 0xef6d7cc7,
+ 0xc6a5c835, 0x68cd59a4, 0x173f7b7d, 0xb957eaec, 0x909f5e1e,
+ 0x3ef7cf8f, 0xc30e37fa, 0x6d66a66b, 0x44ae1299, 0xeac68308,
+ 0x642ce432, 0xca4475a3, 0xe38cc151, 0x4de450c0, 0xb01da8b5,
+ 0x1e753924, 0x37bd8dd6, 0x99d51c47, 0xf11845e3, 0x5f70d472,
+ 0x76b86080, 0xd8d0f111, 0x25290964, 0x8b4198f5, 0xa2892c07,
+ 0x0ce1bd96, 0x820bdaac, 0x2c634b3d, 0x05abffcf, 0xabc36e5e,
+ 0x563a962b, 0xf85207ba, 0xd19ab348, 0x7ff222d9, 0x2e7ef6fa,
+ 0x8016676b, 0xa9ded399, 0x07b64208, 0xfa4fba7d, 0x54272bec,
+ 0x7def9f1e, 0xd3870e8f, 0x5d6d69b5, 0xf305f824, 0xdacd4cd6,
+ 0x74a5dd47, 0x895c2532, 0x2734b4a3, 0x0efc0051, 0xa09491c0,
+ 0xc859c864, 0x663159f5, 0x4ff9ed07, 0xe1917c96, 0x1c6884e3,
+ 0xb2001572, 0x9bc8a180, 0x35a03011, 0xbb4a572b, 0x1522c6ba,
+ 0x3cea7248, 0x9282e3d9, 0x6f7b1bac, 0xc1138a3d, 0xe8db3ecf,
+ 0x46b3af5e, 0x39418d87, 0x97291c16, 0xbee1a8e4, 0x10893975,
+ 0xed70c100, 0x43185091, 0x6ad0e463, 0xc4b875f2, 0x4a5212c8,
+ 0xe43a8359, 0xcdf237ab, 0x639aa63a, 0x9e635e4f, 0x300bcfde,
+ 0x19c37b2c, 0xb7abeabd, 0xdf66b319, 0x710e2288, 0x58c6967a,
+ 0xf6ae07eb, 0x0b57ff9e, 0xa53f6e0f, 0x8cf7dafd, 0x229f4b6c,
+ 0xac752c56, 0x021dbdc7, 0x2bd50935, 0x85bd98a4, 0x784460d1,
+ 0xd62cf140, 0xffe445b2, 0x518cd423, 0x5cfdedf4, 0xf2957c65,
+ 0xdb5dc897, 0x75355906, 0x88cca173, 0x26a430e2, 0x0f6c8410,
+ 0xa1041581, 0x2fee72bb, 0x8186e32a, 0xa84e57d8, 0x0626c649,
+ 0xfbdf3e3c, 0x55b7afad, 0x7c7f1b5f, 0xd2178ace, 0xbadad36a,
+ 0x14b242fb, 0x3d7af609, 0x93126798, 0x6eeb9fed, 0xc0830e7c,
+ 0xe94bba8e, 0x47232b1f, 0xc9c94c25, 0x67a1ddb4, 0x4e696946,
+ 0xe001f8d7, 0x1df800a2, 0xb3909133, 0x9a5825c1, 0x3430b450,
+ 0x4bc29689, 0xe5aa0718, 0xcc62b3ea, 0x620a227b, 0x9ff3da0e,
+ 0x319b4b9f, 0x1853ff6d, 0xb63b6efc, 0x38d109c6, 0x96b99857,
+ 0xbf712ca5, 0x1119bd34, 0xece04541, 0x4288d4d0, 0x6b406022,
+ 0xc528f1b3, 0xade5a817, 0x038d3986, 0x2a458d74, 0x842d1ce5,
+ 0x79d4e490, 0xd7bc7501, 0xfe74c1f3, 0x501c5062, 0xdef63758,
+ 0x709ea6c9, 0x5956123b, 0xf73e83aa, 0x0ac77bdf, 0xa4afea4e,
+ 0x8d675ebc, 0x230fcf2d, 0x72831b0e, 0xdceb8a9f, 0xf5233e6d,
+ 0x5b4baffc, 0xa6b25789, 0x08dac618, 0x211272ea, 0x8f7ae37b,
+ 0x01908441, 0xaff815d0, 0x8630a122, 0x285830b3, 0xd5a1c8c6,
+ 0x7bc95957, 0x5201eda5, 0xfc697c34, 0x94a42590, 0x3accb401,
+ 0x130400f3, 0xbd6c9162, 0x40956917, 0xeefdf886, 0xc7354c74,
+ 0x695ddde5, 0xe7b7badf, 0x49df2b4e, 0x60179fbc, 0xce7f0e2d,
+ 0x3386f658, 0x9dee67c9, 0xb426d33b, 0x1a4e42aa, 0x65bc6073,
+ 0xcbd4f1e2, 0xe21c4510, 0x4c74d481, 0xb18d2cf4, 0x1fe5bd65,
+ 0x362d0997, 0x98459806, 0x16afff3c, 0xb8c76ead, 0x910fda5f,
+ 0x3f674bce, 0xc29eb3bb, 0x6cf6222a, 0x453e96d8, 0xeb560749,
+ 0x839b5eed, 0x2df3cf7c, 0x043b7b8e, 0xaa53ea1f, 0x57aa126a,
+ 0xf9c283fb, 0xd00a3709, 0x7e62a698, 0xf088c1a2, 0x5ee05033,
+ 0x7728e4c1, 0xd9407550, 0x24b98d25, 0x8ad11cb4, 0xa319a846,
+ 0x0d7139d7},
+ {0x00000000, 0xb9fbdbe8, 0xa886b191, 0x117d6a79, 0x8a7c6563,
+ 0x3387be8b, 0x22fad4f2, 0x9b010f1a, 0xcf89cc87, 0x7672176f,
+ 0x670f7d16, 0xdef4a6fe, 0x45f5a9e4, 0xfc0e720c, 0xed731875,
+ 0x5488c39d, 0x44629f4f, 0xfd9944a7, 0xece42ede, 0x551ff536,
+ 0xce1efa2c, 0x77e521c4, 0x66984bbd, 0xdf639055, 0x8beb53c8,
+ 0x32108820, 0x236de259, 0x9a9639b1, 0x019736ab, 0xb86ced43,
+ 0xa911873a, 0x10ea5cd2, 0x88c53e9e, 0x313ee576, 0x20438f0f,
+ 0x99b854e7, 0x02b95bfd, 0xbb428015, 0xaa3fea6c, 0x13c43184,
+ 0x474cf219, 0xfeb729f1, 0xefca4388, 0x56319860, 0xcd30977a,
+ 0x74cb4c92, 0x65b626eb, 0xdc4dfd03, 0xcca7a1d1, 0x755c7a39,
+ 0x64211040, 0xdddacba8, 0x46dbc4b2, 0xff201f5a, 0xee5d7523,
+ 0x57a6aecb, 0x032e6d56, 0xbad5b6be, 0xaba8dcc7, 0x1253072f,
+ 0x89520835, 0x30a9d3dd, 0x21d4b9a4, 0x982f624c, 0xcafb7b7d,
+ 0x7300a095, 0x627dcaec, 0xdb861104, 0x40871e1e, 0xf97cc5f6,
+ 0xe801af8f, 0x51fa7467, 0x0572b7fa, 0xbc896c12, 0xadf4066b,
+ 0x140fdd83, 0x8f0ed299, 0x36f50971, 0x27886308, 0x9e73b8e0,
+ 0x8e99e432, 0x37623fda, 0x261f55a3, 0x9fe48e4b, 0x04e58151,
+ 0xbd1e5ab9, 0xac6330c0, 0x1598eb28, 0x411028b5, 0xf8ebf35d,
+ 0xe9969924, 0x506d42cc, 0xcb6c4dd6, 0x7297963e, 0x63eafc47,
+ 0xda1127af, 0x423e45e3, 0xfbc59e0b, 0xeab8f472, 0x53432f9a,
+ 0xc8422080, 0x71b9fb68, 0x60c49111, 0xd93f4af9, 0x8db78964,
+ 0x344c528c, 0x253138f5, 0x9ccae31d, 0x07cbec07, 0xbe3037ef,
+ 0xaf4d5d96, 0x16b6867e, 0x065cdaac, 0xbfa70144, 0xaeda6b3d,
+ 0x1721b0d5, 0x8c20bfcf, 0x35db6427, 0x24a60e5e, 0x9d5dd5b6,
+ 0xc9d5162b, 0x702ecdc3, 0x6153a7ba, 0xd8a87c52, 0x43a97348,
+ 0xfa52a8a0, 0xeb2fc2d9, 0x52d41931, 0x4e87f0bb, 0xf77c2b53,
+ 0xe601412a, 0x5ffa9ac2, 0xc4fb95d8, 0x7d004e30, 0x6c7d2449,
+ 0xd586ffa1, 0x810e3c3c, 0x38f5e7d4, 0x29888dad, 0x90735645,
+ 0x0b72595f, 0xb28982b7, 0xa3f4e8ce, 0x1a0f3326, 0x0ae56ff4,
+ 0xb31eb41c, 0xa263de65, 0x1b98058d, 0x80990a97, 0x3962d17f,
+ 0x281fbb06, 0x91e460ee, 0xc56ca373, 0x7c97789b, 0x6dea12e2,
+ 0xd411c90a, 0x4f10c610, 0xf6eb1df8, 0xe7967781, 0x5e6dac69,
+ 0xc642ce25, 0x7fb915cd, 0x6ec47fb4, 0xd73fa45c, 0x4c3eab46,
+ 0xf5c570ae, 0xe4b81ad7, 0x5d43c13f, 0x09cb02a2, 0xb030d94a,
+ 0xa14db333, 0x18b668db, 0x83b767c1, 0x3a4cbc29, 0x2b31d650,
+ 0x92ca0db8, 0x8220516a, 0x3bdb8a82, 0x2aa6e0fb, 0x935d3b13,
+ 0x085c3409, 0xb1a7efe1, 0xa0da8598, 0x19215e70, 0x4da99ded,
+ 0xf4524605, 0xe52f2c7c, 0x5cd4f794, 0xc7d5f88e, 0x7e2e2366,
+ 0x6f53491f, 0xd6a892f7, 0x847c8bc6, 0x3d87502e, 0x2cfa3a57,
+ 0x9501e1bf, 0x0e00eea5, 0xb7fb354d, 0xa6865f34, 0x1f7d84dc,
+ 0x4bf54741, 0xf20e9ca9, 0xe373f6d0, 0x5a882d38, 0xc1892222,
+ 0x7872f9ca, 0x690f93b3, 0xd0f4485b, 0xc01e1489, 0x79e5cf61,
+ 0x6898a518, 0xd1637ef0, 0x4a6271ea, 0xf399aa02, 0xe2e4c07b,
+ 0x5b1f1b93, 0x0f97d80e, 0xb66c03e6, 0xa711699f, 0x1eeab277,
+ 0x85ebbd6d, 0x3c106685, 0x2d6d0cfc, 0x9496d714, 0x0cb9b558,
+ 0xb5426eb0, 0xa43f04c9, 0x1dc4df21, 0x86c5d03b, 0x3f3e0bd3,
+ 0x2e4361aa, 0x97b8ba42, 0xc33079df, 0x7acba237, 0x6bb6c84e,
+ 0xd24d13a6, 0x494c1cbc, 0xf0b7c754, 0xe1caad2d, 0x583176c5,
+ 0x48db2a17, 0xf120f1ff, 0xe05d9b86, 0x59a6406e, 0xc2a74f74,
+ 0x7b5c949c, 0x6a21fee5, 0xd3da250d, 0x8752e690, 0x3ea93d78,
+ 0x2fd45701, 0x962f8ce9, 0x0d2e83f3, 0xb4d5581b, 0xa5a83262,
+ 0x1c53e98a},
+ {0x00000000, 0x9d0fe176, 0xe16ec4ad, 0x7c6125db, 0x19ac8f1b,
+ 0x84a36e6d, 0xf8c24bb6, 0x65cdaac0, 0x33591e36, 0xae56ff40,
+ 0xd237da9b, 0x4f383bed, 0x2af5912d, 0xb7fa705b, 0xcb9b5580,
+ 0x5694b4f6, 0x66b23c6c, 0xfbbddd1a, 0x87dcf8c1, 0x1ad319b7,
+ 0x7f1eb377, 0xe2115201, 0x9e7077da, 0x037f96ac, 0x55eb225a,
+ 0xc8e4c32c, 0xb485e6f7, 0x298a0781, 0x4c47ad41, 0xd1484c37,
+ 0xad2969ec, 0x3026889a, 0xcd6478d8, 0x506b99ae, 0x2c0abc75,
+ 0xb1055d03, 0xd4c8f7c3, 0x49c716b5, 0x35a6336e, 0xa8a9d218,
+ 0xfe3d66ee, 0x63328798, 0x1f53a243, 0x825c4335, 0xe791e9f5,
+ 0x7a9e0883, 0x06ff2d58, 0x9bf0cc2e, 0xabd644b4, 0x36d9a5c2,
+ 0x4ab88019, 0xd7b7616f, 0xb27acbaf, 0x2f752ad9, 0x53140f02,
+ 0xce1bee74, 0x988f5a82, 0x0580bbf4, 0x79e19e2f, 0xe4ee7f59,
+ 0x8123d599, 0x1c2c34ef, 0x604d1134, 0xfd42f042, 0x41b9f7f1,
+ 0xdcb61687, 0xa0d7335c, 0x3dd8d22a, 0x581578ea, 0xc51a999c,
+ 0xb97bbc47, 0x24745d31, 0x72e0e9c7, 0xefef08b1, 0x938e2d6a,
+ 0x0e81cc1c, 0x6b4c66dc, 0xf64387aa, 0x8a22a271, 0x172d4307,
+ 0x270bcb9d, 0xba042aeb, 0xc6650f30, 0x5b6aee46, 0x3ea74486,
+ 0xa3a8a5f0, 0xdfc9802b, 0x42c6615d, 0x1452d5ab, 0x895d34dd,
+ 0xf53c1106, 0x6833f070, 0x0dfe5ab0, 0x90f1bbc6, 0xec909e1d,
+ 0x719f7f6b, 0x8cdd8f29, 0x11d26e5f, 0x6db34b84, 0xf0bcaaf2,
+ 0x95710032, 0x087ee144, 0x741fc49f, 0xe91025e9, 0xbf84911f,
+ 0x228b7069, 0x5eea55b2, 0xc3e5b4c4, 0xa6281e04, 0x3b27ff72,
+ 0x4746daa9, 0xda493bdf, 0xea6fb345, 0x77605233, 0x0b0177e8,
+ 0x960e969e, 0xf3c33c5e, 0x6eccdd28, 0x12adf8f3, 0x8fa21985,
+ 0xd936ad73, 0x44394c05, 0x385869de, 0xa55788a8, 0xc09a2268,
+ 0x5d95c31e, 0x21f4e6c5, 0xbcfb07b3, 0x8373efe2, 0x1e7c0e94,
+ 0x621d2b4f, 0xff12ca39, 0x9adf60f9, 0x07d0818f, 0x7bb1a454,
+ 0xe6be4522, 0xb02af1d4, 0x2d2510a2, 0x51443579, 0xcc4bd40f,
+ 0xa9867ecf, 0x34899fb9, 0x48e8ba62, 0xd5e75b14, 0xe5c1d38e,
+ 0x78ce32f8, 0x04af1723, 0x99a0f655, 0xfc6d5c95, 0x6162bde3,
+ 0x1d039838, 0x800c794e, 0xd698cdb8, 0x4b972cce, 0x37f60915,
+ 0xaaf9e863, 0xcf3442a3, 0x523ba3d5, 0x2e5a860e, 0xb3556778,
+ 0x4e17973a, 0xd318764c, 0xaf795397, 0x3276b2e1, 0x57bb1821,
+ 0xcab4f957, 0xb6d5dc8c, 0x2bda3dfa, 0x7d4e890c, 0xe041687a,
+ 0x9c204da1, 0x012facd7, 0x64e20617, 0xf9ede761, 0x858cc2ba,
+ 0x188323cc, 0x28a5ab56, 0xb5aa4a20, 0xc9cb6ffb, 0x54c48e8d,
+ 0x3109244d, 0xac06c53b, 0xd067e0e0, 0x4d680196, 0x1bfcb560,
+ 0x86f35416, 0xfa9271cd, 0x679d90bb, 0x02503a7b, 0x9f5fdb0d,
+ 0xe33efed6, 0x7e311fa0, 0xc2ca1813, 0x5fc5f965, 0x23a4dcbe,
+ 0xbeab3dc8, 0xdb669708, 0x4669767e, 0x3a0853a5, 0xa707b2d3,
+ 0xf1930625, 0x6c9ce753, 0x10fdc288, 0x8df223fe, 0xe83f893e,
+ 0x75306848, 0x09514d93, 0x945eace5, 0xa478247f, 0x3977c509,
+ 0x4516e0d2, 0xd81901a4, 0xbdd4ab64, 0x20db4a12, 0x5cba6fc9,
+ 0xc1b58ebf, 0x97213a49, 0x0a2edb3f, 0x764ffee4, 0xeb401f92,
+ 0x8e8db552, 0x13825424, 0x6fe371ff, 0xf2ec9089, 0x0fae60cb,
+ 0x92a181bd, 0xeec0a466, 0x73cf4510, 0x1602efd0, 0x8b0d0ea6,
+ 0xf76c2b7d, 0x6a63ca0b, 0x3cf77efd, 0xa1f89f8b, 0xdd99ba50,
+ 0x40965b26, 0x255bf1e6, 0xb8541090, 0xc435354b, 0x593ad43d,
+ 0x691c5ca7, 0xf413bdd1, 0x8872980a, 0x157d797c, 0x70b0d3bc,
+ 0xedbf32ca, 0x91de1711, 0x0cd1f667, 0x5a454291, 0xc74aa3e7,
+ 0xbb2b863c, 0x2624674a, 0x43e9cd8a, 0xdee62cfc, 0xa2870927,
+ 0x3f88e851},
+ {0x00000000, 0xdd96d985, 0x605cb54b, 0xbdca6cce, 0xc0b96a96,
+ 0x1d2fb313, 0xa0e5dfdd, 0x7d730658, 0x5a03d36d, 0x87950ae8,
+ 0x3a5f6626, 0xe7c9bfa3, 0x9abab9fb, 0x472c607e, 0xfae60cb0,
+ 0x2770d535, 0xb407a6da, 0x69917f5f, 0xd45b1391, 0x09cdca14,
+ 0x74becc4c, 0xa92815c9, 0x14e27907, 0xc974a082, 0xee0475b7,
+ 0x3392ac32, 0x8e58c0fc, 0x53ce1979, 0x2ebd1f21, 0xf32bc6a4,
+ 0x4ee1aa6a, 0x937773ef, 0xb37e4bf5, 0x6ee89270, 0xd322febe,
+ 0x0eb4273b, 0x73c72163, 0xae51f8e6, 0x139b9428, 0xce0d4dad,
+ 0xe97d9898, 0x34eb411d, 0x89212dd3, 0x54b7f456, 0x29c4f20e,
+ 0xf4522b8b, 0x49984745, 0x940e9ec0, 0x0779ed2f, 0xdaef34aa,
+ 0x67255864, 0xbab381e1, 0xc7c087b9, 0x1a565e3c, 0xa79c32f2,
+ 0x7a0aeb77, 0x5d7a3e42, 0x80ece7c7, 0x3d268b09, 0xe0b0528c,
+ 0x9dc354d4, 0x40558d51, 0xfd9fe19f, 0x2009381a, 0xbd8d91ab,
+ 0x601b482e, 0xddd124e0, 0x0047fd65, 0x7d34fb3d, 0xa0a222b8,
+ 0x1d684e76, 0xc0fe97f3, 0xe78e42c6, 0x3a189b43, 0x87d2f78d,
+ 0x5a442e08, 0x27372850, 0xfaa1f1d5, 0x476b9d1b, 0x9afd449e,
+ 0x098a3771, 0xd41ceef4, 0x69d6823a, 0xb4405bbf, 0xc9335de7,
+ 0x14a58462, 0xa96fe8ac, 0x74f93129, 0x5389e41c, 0x8e1f3d99,
+ 0x33d55157, 0xee4388d2, 0x93308e8a, 0x4ea6570f, 0xf36c3bc1,
+ 0x2efae244, 0x0ef3da5e, 0xd36503db, 0x6eaf6f15, 0xb339b690,
+ 0xce4ab0c8, 0x13dc694d, 0xae160583, 0x7380dc06, 0x54f00933,
+ 0x8966d0b6, 0x34acbc78, 0xe93a65fd, 0x944963a5, 0x49dfba20,
+ 0xf415d6ee, 0x29830f6b, 0xbaf47c84, 0x6762a501, 0xdaa8c9cf,
+ 0x073e104a, 0x7a4d1612, 0xa7dbcf97, 0x1a11a359, 0xc7877adc,
+ 0xe0f7afe9, 0x3d61766c, 0x80ab1aa2, 0x5d3dc327, 0x204ec57f,
+ 0xfdd81cfa, 0x40127034, 0x9d84a9b1, 0xa06a2517, 0x7dfcfc92,
+ 0xc036905c, 0x1da049d9, 0x60d34f81, 0xbd459604, 0x008ffaca,
+ 0xdd19234f, 0xfa69f67a, 0x27ff2fff, 0x9a354331, 0x47a39ab4,
+ 0x3ad09cec, 0xe7464569, 0x5a8c29a7, 0x871af022, 0x146d83cd,
+ 0xc9fb5a48, 0x74313686, 0xa9a7ef03, 0xd4d4e95b, 0x094230de,
+ 0xb4885c10, 0x691e8595, 0x4e6e50a0, 0x93f88925, 0x2e32e5eb,
+ 0xf3a43c6e, 0x8ed73a36, 0x5341e3b3, 0xee8b8f7d, 0x331d56f8,
+ 0x13146ee2, 0xce82b767, 0x7348dba9, 0xaede022c, 0xd3ad0474,
+ 0x0e3bddf1, 0xb3f1b13f, 0x6e6768ba, 0x4917bd8f, 0x9481640a,
+ 0x294b08c4, 0xf4ddd141, 0x89aed719, 0x54380e9c, 0xe9f26252,
+ 0x3464bbd7, 0xa713c838, 0x7a8511bd, 0xc74f7d73, 0x1ad9a4f6,
+ 0x67aaa2ae, 0xba3c7b2b, 0x07f617e5, 0xda60ce60, 0xfd101b55,
+ 0x2086c2d0, 0x9d4cae1e, 0x40da779b, 0x3da971c3, 0xe03fa846,
+ 0x5df5c488, 0x80631d0d, 0x1de7b4bc, 0xc0716d39, 0x7dbb01f7,
+ 0xa02dd872, 0xdd5ede2a, 0x00c807af, 0xbd026b61, 0x6094b2e4,
+ 0x47e467d1, 0x9a72be54, 0x27b8d29a, 0xfa2e0b1f, 0x875d0d47,
+ 0x5acbd4c2, 0xe701b80c, 0x3a976189, 0xa9e01266, 0x7476cbe3,
+ 0xc9bca72d, 0x142a7ea8, 0x695978f0, 0xb4cfa175, 0x0905cdbb,
+ 0xd493143e, 0xf3e3c10b, 0x2e75188e, 0x93bf7440, 0x4e29adc5,
+ 0x335aab9d, 0xeecc7218, 0x53061ed6, 0x8e90c753, 0xae99ff49,
+ 0x730f26cc, 0xcec54a02, 0x13539387, 0x6e2095df, 0xb3b64c5a,
+ 0x0e7c2094, 0xd3eaf911, 0xf49a2c24, 0x290cf5a1, 0x94c6996f,
+ 0x495040ea, 0x342346b2, 0xe9b59f37, 0x547ff3f9, 0x89e92a7c,
+ 0x1a9e5993, 0xc7088016, 0x7ac2ecd8, 0xa754355d, 0xda273305,
+ 0x07b1ea80, 0xba7b864e, 0x67ed5fcb, 0x409d8afe, 0x9d0b537b,
+ 0x20c13fb5, 0xfd57e630, 0x8024e068, 0x5db239ed, 0xe0785523,
+ 0x3dee8ca6}};
+
+local const z_word_t FAR crc_braid_big_table[][256] = {
+ {0x00000000, 0x85d996dd, 0x4bb55c60, 0xce6ccabd, 0x966ab9c0,
+ 0x13b32f1d, 0xdddfe5a0, 0x5806737d, 0x6dd3035a, 0xe80a9587,
+ 0x26665f3a, 0xa3bfc9e7, 0xfbb9ba9a, 0x7e602c47, 0xb00ce6fa,
+ 0x35d57027, 0xdaa607b4, 0x5f7f9169, 0x91135bd4, 0x14cacd09,
+ 0x4cccbe74, 0xc91528a9, 0x0779e214, 0x82a074c9, 0xb77504ee,
+ 0x32ac9233, 0xfcc0588e, 0x7919ce53, 0x211fbd2e, 0xa4c62bf3,
+ 0x6aaae14e, 0xef737793, 0xf54b7eb3, 0x7092e86e, 0xbefe22d3,
+ 0x3b27b40e, 0x6321c773, 0xe6f851ae, 0x28949b13, 0xad4d0dce,
+ 0x98987de9, 0x1d41eb34, 0xd32d2189, 0x56f4b754, 0x0ef2c429,
+ 0x8b2b52f4, 0x45479849, 0xc09e0e94, 0x2fed7907, 0xaa34efda,
+ 0x64582567, 0xe181b3ba, 0xb987c0c7, 0x3c5e561a, 0xf2329ca7,
+ 0x77eb0a7a, 0x423e7a5d, 0xc7e7ec80, 0x098b263d, 0x8c52b0e0,
+ 0xd454c39d, 0x518d5540, 0x9fe19ffd, 0x1a380920, 0xab918dbd,
+ 0x2e481b60, 0xe024d1dd, 0x65fd4700, 0x3dfb347d, 0xb822a2a0,
+ 0x764e681d, 0xf397fec0, 0xc6428ee7, 0x439b183a, 0x8df7d287,
+ 0x082e445a, 0x50283727, 0xd5f1a1fa, 0x1b9d6b47, 0x9e44fd9a,
+ 0x71378a09, 0xf4ee1cd4, 0x3a82d669, 0xbf5b40b4, 0xe75d33c9,
+ 0x6284a514, 0xace86fa9, 0x2931f974, 0x1ce48953, 0x993d1f8e,
+ 0x5751d533, 0xd28843ee, 0x8a8e3093, 0x0f57a64e, 0xc13b6cf3,
+ 0x44e2fa2e, 0x5edaf30e, 0xdb0365d3, 0x156faf6e, 0x90b639b3,
+ 0xc8b04ace, 0x4d69dc13, 0x830516ae, 0x06dc8073, 0x3309f054,
+ 0xb6d06689, 0x78bcac34, 0xfd653ae9, 0xa5634994, 0x20badf49,
+ 0xeed615f4, 0x6b0f8329, 0x847cf4ba, 0x01a56267, 0xcfc9a8da,
+ 0x4a103e07, 0x12164d7a, 0x97cfdba7, 0x59a3111a, 0xdc7a87c7,
+ 0xe9aff7e0, 0x6c76613d, 0xa21aab80, 0x27c33d5d, 0x7fc54e20,
+ 0xfa1cd8fd, 0x34701240, 0xb1a9849d, 0x17256aa0, 0x92fcfc7d,
+ 0x5c9036c0, 0xd949a01d, 0x814fd360, 0x049645bd, 0xcafa8f00,
+ 0x4f2319dd, 0x7af669fa, 0xff2fff27, 0x3143359a, 0xb49aa347,
+ 0xec9cd03a, 0x694546e7, 0xa7298c5a, 0x22f01a87, 0xcd836d14,
+ 0x485afbc9, 0x86363174, 0x03efa7a9, 0x5be9d4d4, 0xde304209,
+ 0x105c88b4, 0x95851e69, 0xa0506e4e, 0x2589f893, 0xebe5322e,
+ 0x6e3ca4f3, 0x363ad78e, 0xb3e34153, 0x7d8f8bee, 0xf8561d33,
+ 0xe26e1413, 0x67b782ce, 0xa9db4873, 0x2c02deae, 0x7404add3,
+ 0xf1dd3b0e, 0x3fb1f1b3, 0xba68676e, 0x8fbd1749, 0x0a648194,
+ 0xc4084b29, 0x41d1ddf4, 0x19d7ae89, 0x9c0e3854, 0x5262f2e9,
+ 0xd7bb6434, 0x38c813a7, 0xbd11857a, 0x737d4fc7, 0xf6a4d91a,
+ 0xaea2aa67, 0x2b7b3cba, 0xe517f607, 0x60ce60da, 0x551b10fd,
+ 0xd0c28620, 0x1eae4c9d, 0x9b77da40, 0xc371a93d, 0x46a83fe0,
+ 0x88c4f55d, 0x0d1d6380, 0xbcb4e71d, 0x396d71c0, 0xf701bb7d,
+ 0x72d82da0, 0x2ade5edd, 0xaf07c800, 0x616b02bd, 0xe4b29460,
+ 0xd167e447, 0x54be729a, 0x9ad2b827, 0x1f0b2efa, 0x470d5d87,
+ 0xc2d4cb5a, 0x0cb801e7, 0x8961973a, 0x6612e0a9, 0xe3cb7674,
+ 0x2da7bcc9, 0xa87e2a14, 0xf0785969, 0x75a1cfb4, 0xbbcd0509,
+ 0x3e1493d4, 0x0bc1e3f3, 0x8e18752e, 0x4074bf93, 0xc5ad294e,
+ 0x9dab5a33, 0x1872ccee, 0xd61e0653, 0x53c7908e, 0x49ff99ae,
+ 0xcc260f73, 0x024ac5ce, 0x87935313, 0xdf95206e, 0x5a4cb6b3,
+ 0x94207c0e, 0x11f9ead3, 0x242c9af4, 0xa1f50c29, 0x6f99c694,
+ 0xea405049, 0xb2462334, 0x379fb5e9, 0xf9f37f54, 0x7c2ae989,
+ 0x93599e1a, 0x168008c7, 0xd8ecc27a, 0x5d3554a7, 0x053327da,
+ 0x80eab107, 0x4e867bba, 0xcb5fed67, 0xfe8a9d40, 0x7b530b9d,
+ 0xb53fc120, 0x30e657fd, 0x68e02480, 0xed39b25d, 0x235578e0,
+ 0xa68cee3d},
+ {0x00000000, 0x76e10f9d, 0xadc46ee1, 0xdb25617c, 0x1b8fac19,
+ 0x6d6ea384, 0xb64bc2f8, 0xc0aacd65, 0x361e5933, 0x40ff56ae,
+ 0x9bda37d2, 0xed3b384f, 0x2d91f52a, 0x5b70fab7, 0x80559bcb,
+ 0xf6b49456, 0x6c3cb266, 0x1addbdfb, 0xc1f8dc87, 0xb719d31a,
+ 0x77b31e7f, 0x015211e2, 0xda77709e, 0xac967f03, 0x5a22eb55,
+ 0x2cc3e4c8, 0xf7e685b4, 0x81078a29, 0x41ad474c, 0x374c48d1,
+ 0xec6929ad, 0x9a882630, 0xd87864cd, 0xae996b50, 0x75bc0a2c,
+ 0x035d05b1, 0xc3f7c8d4, 0xb516c749, 0x6e33a635, 0x18d2a9a8,
+ 0xee663dfe, 0x98873263, 0x43a2531f, 0x35435c82, 0xf5e991e7,
+ 0x83089e7a, 0x582dff06, 0x2eccf09b, 0xb444d6ab, 0xc2a5d936,
+ 0x1980b84a, 0x6f61b7d7, 0xafcb7ab2, 0xd92a752f, 0x020f1453,
+ 0x74ee1bce, 0x825a8f98, 0xf4bb8005, 0x2f9ee179, 0x597feee4,
+ 0x99d52381, 0xef342c1c, 0x34114d60, 0x42f042fd, 0xf1f7b941,
+ 0x8716b6dc, 0x5c33d7a0, 0x2ad2d83d, 0xea781558, 0x9c991ac5,
+ 0x47bc7bb9, 0x315d7424, 0xc7e9e072, 0xb108efef, 0x6a2d8e93,
+ 0x1ccc810e, 0xdc664c6b, 0xaa8743f6, 0x71a2228a, 0x07432d17,
+ 0x9dcb0b27, 0xeb2a04ba, 0x300f65c6, 0x46ee6a5b, 0x8644a73e,
+ 0xf0a5a8a3, 0x2b80c9df, 0x5d61c642, 0xabd55214, 0xdd345d89,
+ 0x06113cf5, 0x70f03368, 0xb05afe0d, 0xc6bbf190, 0x1d9e90ec,
+ 0x6b7f9f71, 0x298fdd8c, 0x5f6ed211, 0x844bb36d, 0xf2aabcf0,
+ 0x32007195, 0x44e17e08, 0x9fc41f74, 0xe92510e9, 0x1f9184bf,
+ 0x69708b22, 0xb255ea5e, 0xc4b4e5c3, 0x041e28a6, 0x72ff273b,
+ 0xa9da4647, 0xdf3b49da, 0x45b36fea, 0x33526077, 0xe877010b,
+ 0x9e960e96, 0x5e3cc3f3, 0x28ddcc6e, 0xf3f8ad12, 0x8519a28f,
+ 0x73ad36d9, 0x054c3944, 0xde695838, 0xa88857a5, 0x68229ac0,
+ 0x1ec3955d, 0xc5e6f421, 0xb307fbbc, 0xe2ef7383, 0x940e7c1e,
+ 0x4f2b1d62, 0x39ca12ff, 0xf960df9a, 0x8f81d007, 0x54a4b17b,
+ 0x2245bee6, 0xd4f12ab0, 0xa210252d, 0x79354451, 0x0fd44bcc,
+ 0xcf7e86a9, 0xb99f8934, 0x62bae848, 0x145be7d5, 0x8ed3c1e5,
+ 0xf832ce78, 0x2317af04, 0x55f6a099, 0x955c6dfc, 0xe3bd6261,
+ 0x3898031d, 0x4e790c80, 0xb8cd98d6, 0xce2c974b, 0x1509f637,
+ 0x63e8f9aa, 0xa34234cf, 0xd5a33b52, 0x0e865a2e, 0x786755b3,
+ 0x3a97174e, 0x4c7618d3, 0x975379af, 0xe1b27632, 0x2118bb57,
+ 0x57f9b4ca, 0x8cdcd5b6, 0xfa3dda2b, 0x0c894e7d, 0x7a6841e0,
+ 0xa14d209c, 0xd7ac2f01, 0x1706e264, 0x61e7edf9, 0xbac28c85,
+ 0xcc238318, 0x56aba528, 0x204aaab5, 0xfb6fcbc9, 0x8d8ec454,
+ 0x4d240931, 0x3bc506ac, 0xe0e067d0, 0x9601684d, 0x60b5fc1b,
+ 0x1654f386, 0xcd7192fa, 0xbb909d67, 0x7b3a5002, 0x0ddb5f9f,
+ 0xd6fe3ee3, 0xa01f317e, 0x1318cac2, 0x65f9c55f, 0xbedca423,
+ 0xc83dabbe, 0x089766db, 0x7e766946, 0xa553083a, 0xd3b207a7,
+ 0x250693f1, 0x53e79c6c, 0x88c2fd10, 0xfe23f28d, 0x3e893fe8,
+ 0x48683075, 0x934d5109, 0xe5ac5e94, 0x7f2478a4, 0x09c57739,
+ 0xd2e01645, 0xa40119d8, 0x64abd4bd, 0x124adb20, 0xc96fba5c,
+ 0xbf8eb5c1, 0x493a2197, 0x3fdb2e0a, 0xe4fe4f76, 0x921f40eb,
+ 0x52b58d8e, 0x24548213, 0xff71e36f, 0x8990ecf2, 0xcb60ae0f,
+ 0xbd81a192, 0x66a4c0ee, 0x1045cf73, 0xd0ef0216, 0xa60e0d8b,
+ 0x7d2b6cf7, 0x0bca636a, 0xfd7ef73c, 0x8b9ff8a1, 0x50ba99dd,
+ 0x265b9640, 0xe6f15b25, 0x901054b8, 0x4b3535c4, 0x3dd43a59,
+ 0xa75c1c69, 0xd1bd13f4, 0x0a987288, 0x7c797d15, 0xbcd3b070,
+ 0xca32bfed, 0x1117de91, 0x67f6d10c, 0x9142455a, 0xe7a34ac7,
+ 0x3c862bbb, 0x4a672426, 0x8acde943, 0xfc2ce6de, 0x270987a2,
+ 0x51e8883f},
+ {0x00000000, 0xe8dbfbb9, 0x91b186a8, 0x796a7d11, 0x63657c8a,
+ 0x8bbe8733, 0xf2d4fa22, 0x1a0f019b, 0x87cc89cf, 0x6f177276,
+ 0x167d0f67, 0xfea6f4de, 0xe4a9f545, 0x0c720efc, 0x751873ed,
+ 0x9dc38854, 0x4f9f6244, 0xa74499fd, 0xde2ee4ec, 0x36f51f55,
+ 0x2cfa1ece, 0xc421e577, 0xbd4b9866, 0x559063df, 0xc853eb8b,
+ 0x20881032, 0x59e26d23, 0xb139969a, 0xab369701, 0x43ed6cb8,
+ 0x3a8711a9, 0xd25cea10, 0x9e3ec588, 0x76e53e31, 0x0f8f4320,
+ 0xe754b899, 0xfd5bb902, 0x158042bb, 0x6cea3faa, 0x8431c413,
+ 0x19f24c47, 0xf129b7fe, 0x8843caef, 0x60983156, 0x7a9730cd,
+ 0x924ccb74, 0xeb26b665, 0x03fd4ddc, 0xd1a1a7cc, 0x397a5c75,
+ 0x40102164, 0xa8cbdadd, 0xb2c4db46, 0x5a1f20ff, 0x23755dee,
+ 0xcbaea657, 0x566d2e03, 0xbeb6d5ba, 0xc7dca8ab, 0x2f075312,
+ 0x35085289, 0xddd3a930, 0xa4b9d421, 0x4c622f98, 0x7d7bfbca,
+ 0x95a00073, 0xecca7d62, 0x041186db, 0x1e1e8740, 0xf6c57cf9,
+ 0x8faf01e8, 0x6774fa51, 0xfab77205, 0x126c89bc, 0x6b06f4ad,
+ 0x83dd0f14, 0x99d20e8f, 0x7109f536, 0x08638827, 0xe0b8739e,
+ 0x32e4998e, 0xda3f6237, 0xa3551f26, 0x4b8ee49f, 0x5181e504,
+ 0xb95a1ebd, 0xc03063ac, 0x28eb9815, 0xb5281041, 0x5df3ebf8,
+ 0x249996e9, 0xcc426d50, 0xd64d6ccb, 0x3e969772, 0x47fcea63,
+ 0xaf2711da, 0xe3453e42, 0x0b9ec5fb, 0x72f4b8ea, 0x9a2f4353,
+ 0x802042c8, 0x68fbb971, 0x1191c460, 0xf94a3fd9, 0x6489b78d,
+ 0x8c524c34, 0xf5383125, 0x1de3ca9c, 0x07eccb07, 0xef3730be,
+ 0x965d4daf, 0x7e86b616, 0xacda5c06, 0x4401a7bf, 0x3d6bdaae,
+ 0xd5b02117, 0xcfbf208c, 0x2764db35, 0x5e0ea624, 0xb6d55d9d,
+ 0x2b16d5c9, 0xc3cd2e70, 0xbaa75361, 0x527ca8d8, 0x4873a943,
+ 0xa0a852fa, 0xd9c22feb, 0x3119d452, 0xbbf0874e, 0x532b7cf7,
+ 0x2a4101e6, 0xc29afa5f, 0xd895fbc4, 0x304e007d, 0x49247d6c,
+ 0xa1ff86d5, 0x3c3c0e81, 0xd4e7f538, 0xad8d8829, 0x45567390,
+ 0x5f59720b, 0xb78289b2, 0xcee8f4a3, 0x26330f1a, 0xf46fe50a,
+ 0x1cb41eb3, 0x65de63a2, 0x8d05981b, 0x970a9980, 0x7fd16239,
+ 0x06bb1f28, 0xee60e491, 0x73a36cc5, 0x9b78977c, 0xe212ea6d,
+ 0x0ac911d4, 0x10c6104f, 0xf81debf6, 0x817796e7, 0x69ac6d5e,
+ 0x25ce42c6, 0xcd15b97f, 0xb47fc46e, 0x5ca43fd7, 0x46ab3e4c,
+ 0xae70c5f5, 0xd71ab8e4, 0x3fc1435d, 0xa202cb09, 0x4ad930b0,
+ 0x33b34da1, 0xdb68b618, 0xc167b783, 0x29bc4c3a, 0x50d6312b,
+ 0xb80dca92, 0x6a512082, 0x828adb3b, 0xfbe0a62a, 0x133b5d93,
+ 0x09345c08, 0xe1efa7b1, 0x9885daa0, 0x705e2119, 0xed9da94d,
+ 0x054652f4, 0x7c2c2fe5, 0x94f7d45c, 0x8ef8d5c7, 0x66232e7e,
+ 0x1f49536f, 0xf792a8d6, 0xc68b7c84, 0x2e50873d, 0x573afa2c,
+ 0xbfe10195, 0xa5ee000e, 0x4d35fbb7, 0x345f86a6, 0xdc847d1f,
+ 0x4147f54b, 0xa99c0ef2, 0xd0f673e3, 0x382d885a, 0x222289c1,
+ 0xcaf97278, 0xb3930f69, 0x5b48f4d0, 0x89141ec0, 0x61cfe579,
+ 0x18a59868, 0xf07e63d1, 0xea71624a, 0x02aa99f3, 0x7bc0e4e2,
+ 0x931b1f5b, 0x0ed8970f, 0xe6036cb6, 0x9f6911a7, 0x77b2ea1e,
+ 0x6dbdeb85, 0x8566103c, 0xfc0c6d2d, 0x14d79694, 0x58b5b90c,
+ 0xb06e42b5, 0xc9043fa4, 0x21dfc41d, 0x3bd0c586, 0xd30b3e3f,
+ 0xaa61432e, 0x42bab897, 0xdf7930c3, 0x37a2cb7a, 0x4ec8b66b,
+ 0xa6134dd2, 0xbc1c4c49, 0x54c7b7f0, 0x2dadcae1, 0xc5763158,
+ 0x172adb48, 0xfff120f1, 0x869b5de0, 0x6e40a659, 0x744fa7c2,
+ 0x9c945c7b, 0xe5fe216a, 0x0d25dad3, 0x90e65287, 0x783da93e,
+ 0x0157d42f, 0xe98c2f96, 0xf3832e0d, 0x1b58d5b4, 0x6232a8a5,
+ 0x8ae9531c},
+ {0x00000000, 0x919168ae, 0x6325a087, 0xf2b4c829, 0x874c31d4,
+ 0x16dd597a, 0xe4699153, 0x75f8f9fd, 0x4f9f1373, 0xde0e7bdd,
+ 0x2cbab3f4, 0xbd2bdb5a, 0xc8d322a7, 0x59424a09, 0xabf68220,
+ 0x3a67ea8e, 0x9e3e27e6, 0x0faf4f48, 0xfd1b8761, 0x6c8aefcf,
+ 0x19721632, 0x88e37e9c, 0x7a57b6b5, 0xebc6de1b, 0xd1a13495,
+ 0x40305c3b, 0xb2849412, 0x2315fcbc, 0x56ed0541, 0xc77c6def,
+ 0x35c8a5c6, 0xa459cd68, 0x7d7b3f17, 0xecea57b9, 0x1e5e9f90,
+ 0x8fcff73e, 0xfa370ec3, 0x6ba6666d, 0x9912ae44, 0x0883c6ea,
+ 0x32e42c64, 0xa37544ca, 0x51c18ce3, 0xc050e44d, 0xb5a81db0,
+ 0x2439751e, 0xd68dbd37, 0x471cd599, 0xe34518f1, 0x72d4705f,
+ 0x8060b876, 0x11f1d0d8, 0x64092925, 0xf598418b, 0x072c89a2,
+ 0x96bde10c, 0xacda0b82, 0x3d4b632c, 0xcfffab05, 0x5e6ec3ab,
+ 0x2b963a56, 0xba0752f8, 0x48b39ad1, 0xd922f27f, 0xfaf67e2e,
+ 0x6b671680, 0x99d3dea9, 0x0842b607, 0x7dba4ffa, 0xec2b2754,
+ 0x1e9fef7d, 0x8f0e87d3, 0xb5696d5d, 0x24f805f3, 0xd64ccdda,
+ 0x47dda574, 0x32255c89, 0xa3b43427, 0x5100fc0e, 0xc09194a0,
+ 0x64c859c8, 0xf5593166, 0x07edf94f, 0x967c91e1, 0xe384681c,
+ 0x721500b2, 0x80a1c89b, 0x1130a035, 0x2b574abb, 0xbac62215,
+ 0x4872ea3c, 0xd9e38292, 0xac1b7b6f, 0x3d8a13c1, 0xcf3edbe8,
+ 0x5eafb346, 0x878d4139, 0x161c2997, 0xe4a8e1be, 0x75398910,
+ 0x00c170ed, 0x91501843, 0x63e4d06a, 0xf275b8c4, 0xc812524a,
+ 0x59833ae4, 0xab37f2cd, 0x3aa69a63, 0x4f5e639e, 0xdecf0b30,
+ 0x2c7bc319, 0xbdeaabb7, 0x19b366df, 0x88220e71, 0x7a96c658,
+ 0xeb07aef6, 0x9eff570b, 0x0f6e3fa5, 0xfddaf78c, 0x6c4b9f22,
+ 0x562c75ac, 0xc7bd1d02, 0x3509d52b, 0xa498bd85, 0xd1604478,
+ 0x40f12cd6, 0xb245e4ff, 0x23d48c51, 0xf4edfd5c, 0x657c95f2,
+ 0x97c85ddb, 0x06593575, 0x73a1cc88, 0xe230a426, 0x10846c0f,
+ 0x811504a1, 0xbb72ee2f, 0x2ae38681, 0xd8574ea8, 0x49c62606,
+ 0x3c3edffb, 0xadafb755, 0x5f1b7f7c, 0xce8a17d2, 0x6ad3daba,
+ 0xfb42b214, 0x09f67a3d, 0x98671293, 0xed9feb6e, 0x7c0e83c0,
+ 0x8eba4be9, 0x1f2b2347, 0x254cc9c9, 0xb4dda167, 0x4669694e,
+ 0xd7f801e0, 0xa200f81d, 0x339190b3, 0xc125589a, 0x50b43034,
+ 0x8996c24b, 0x1807aae5, 0xeab362cc, 0x7b220a62, 0x0edaf39f,
+ 0x9f4b9b31, 0x6dff5318, 0xfc6e3bb6, 0xc609d138, 0x5798b996,
+ 0xa52c71bf, 0x34bd1911, 0x4145e0ec, 0xd0d48842, 0x2260406b,
+ 0xb3f128c5, 0x17a8e5ad, 0x86398d03, 0x748d452a, 0xe51c2d84,
+ 0x90e4d479, 0x0175bcd7, 0xf3c174fe, 0x62501c50, 0x5837f6de,
+ 0xc9a69e70, 0x3b125659, 0xaa833ef7, 0xdf7bc70a, 0x4eeaafa4,
+ 0xbc5e678d, 0x2dcf0f23, 0x0e1b8372, 0x9f8aebdc, 0x6d3e23f5,
+ 0xfcaf4b5b, 0x8957b2a6, 0x18c6da08, 0xea721221, 0x7be37a8f,
+ 0x41849001, 0xd015f8af, 0x22a13086, 0xb3305828, 0xc6c8a1d5,
+ 0x5759c97b, 0xa5ed0152, 0x347c69fc, 0x9025a494, 0x01b4cc3a,
+ 0xf3000413, 0x62916cbd, 0x17699540, 0x86f8fdee, 0x744c35c7,
+ 0xe5dd5d69, 0xdfbab7e7, 0x4e2bdf49, 0xbc9f1760, 0x2d0e7fce,
+ 0x58f68633, 0xc967ee9d, 0x3bd326b4, 0xaa424e1a, 0x7360bc65,
+ 0xe2f1d4cb, 0x10451ce2, 0x81d4744c, 0xf42c8db1, 0x65bde51f,
+ 0x97092d36, 0x06984598, 0x3cffaf16, 0xad6ec7b8, 0x5fda0f91,
+ 0xce4b673f, 0xbbb39ec2, 0x2a22f66c, 0xd8963e45, 0x490756eb,
+ 0xed5e9b83, 0x7ccff32d, 0x8e7b3b04, 0x1fea53aa, 0x6a12aa57,
+ 0xfb83c2f9, 0x09370ad0, 0x98a6627e, 0xa2c188f0, 0x3350e05e,
+ 0xc1e42877, 0x507540d9, 0x258db924, 0xb41cd18a, 0x46a819a3,
+ 0xd739710d}};
+
+#endif
+
+#endif
+
+#if N == 5
+
+#if W == 8
+
+local const z_crc_t FAR crc_braid_table[][256] = {
+ {0x00000000, 0xaf449247, 0x85f822cf, 0x2abcb088, 0xd08143df,
+ 0x7fc5d198, 0x55796110, 0xfa3df357, 0x7a7381ff, 0xd53713b8,
+ 0xff8ba330, 0x50cf3177, 0xaaf2c220, 0x05b65067, 0x2f0ae0ef,
+ 0x804e72a8, 0xf4e703fe, 0x5ba391b9, 0x711f2131, 0xde5bb376,
+ 0x24664021, 0x8b22d266, 0xa19e62ee, 0x0edaf0a9, 0x8e948201,
+ 0x21d01046, 0x0b6ca0ce, 0xa4283289, 0x5e15c1de, 0xf1515399,
+ 0xdbede311, 0x74a97156, 0x32bf01bd, 0x9dfb93fa, 0xb7472372,
+ 0x1803b135, 0xe23e4262, 0x4d7ad025, 0x67c660ad, 0xc882f2ea,
+ 0x48cc8042, 0xe7881205, 0xcd34a28d, 0x627030ca, 0x984dc39d,
+ 0x370951da, 0x1db5e152, 0xb2f17315, 0xc6580243, 0x691c9004,
+ 0x43a0208c, 0xece4b2cb, 0x16d9419c, 0xb99dd3db, 0x93216353,
+ 0x3c65f114, 0xbc2b83bc, 0x136f11fb, 0x39d3a173, 0x96973334,
+ 0x6caac063, 0xc3ee5224, 0xe952e2ac, 0x461670eb, 0x657e037a,
+ 0xca3a913d, 0xe08621b5, 0x4fc2b3f2, 0xb5ff40a5, 0x1abbd2e2,
+ 0x3007626a, 0x9f43f02d, 0x1f0d8285, 0xb04910c2, 0x9af5a04a,
+ 0x35b1320d, 0xcf8cc15a, 0x60c8531d, 0x4a74e395, 0xe53071d2,
+ 0x91990084, 0x3edd92c3, 0x1461224b, 0xbb25b00c, 0x4118435b,
+ 0xee5cd11c, 0xc4e06194, 0x6ba4f3d3, 0xebea817b, 0x44ae133c,
+ 0x6e12a3b4, 0xc15631f3, 0x3b6bc2a4, 0x942f50e3, 0xbe93e06b,
+ 0x11d7722c, 0x57c102c7, 0xf8859080, 0xd2392008, 0x7d7db24f,
+ 0x87404118, 0x2804d35f, 0x02b863d7, 0xadfcf190, 0x2db28338,
+ 0x82f6117f, 0xa84aa1f7, 0x070e33b0, 0xfd33c0e7, 0x527752a0,
+ 0x78cbe228, 0xd78f706f, 0xa3260139, 0x0c62937e, 0x26de23f6,
+ 0x899ab1b1, 0x73a742e6, 0xdce3d0a1, 0xf65f6029, 0x591bf26e,
+ 0xd95580c6, 0x76111281, 0x5cada209, 0xf3e9304e, 0x09d4c319,
+ 0xa690515e, 0x8c2ce1d6, 0x23687391, 0xcafc06f4, 0x65b894b3,
+ 0x4f04243b, 0xe040b67c, 0x1a7d452b, 0xb539d76c, 0x9f8567e4,
+ 0x30c1f5a3, 0xb08f870b, 0x1fcb154c, 0x3577a5c4, 0x9a333783,
+ 0x600ec4d4, 0xcf4a5693, 0xe5f6e61b, 0x4ab2745c, 0x3e1b050a,
+ 0x915f974d, 0xbbe327c5, 0x14a7b582, 0xee9a46d5, 0x41ded492,
+ 0x6b62641a, 0xc426f65d, 0x446884f5, 0xeb2c16b2, 0xc190a63a,
+ 0x6ed4347d, 0x94e9c72a, 0x3bad556d, 0x1111e5e5, 0xbe5577a2,
+ 0xf8430749, 0x5707950e, 0x7dbb2586, 0xd2ffb7c1, 0x28c24496,
+ 0x8786d6d1, 0xad3a6659, 0x027ef41e, 0x823086b6, 0x2d7414f1,
+ 0x07c8a479, 0xa88c363e, 0x52b1c569, 0xfdf5572e, 0xd749e7a6,
+ 0x780d75e1, 0x0ca404b7, 0xa3e096f0, 0x895c2678, 0x2618b43f,
+ 0xdc254768, 0x7361d52f, 0x59dd65a7, 0xf699f7e0, 0x76d78548,
+ 0xd993170f, 0xf32fa787, 0x5c6b35c0, 0xa656c697, 0x091254d0,
+ 0x23aee458, 0x8cea761f, 0xaf82058e, 0x00c697c9, 0x2a7a2741,
+ 0x853eb506, 0x7f034651, 0xd047d416, 0xfafb649e, 0x55bff6d9,
+ 0xd5f18471, 0x7ab51636, 0x5009a6be, 0xff4d34f9, 0x0570c7ae,
+ 0xaa3455e9, 0x8088e561, 0x2fcc7726, 0x5b650670, 0xf4219437,
+ 0xde9d24bf, 0x71d9b6f8, 0x8be445af, 0x24a0d7e8, 0x0e1c6760,
+ 0xa158f527, 0x2116878f, 0x8e5215c8, 0xa4eea540, 0x0baa3707,
+ 0xf197c450, 0x5ed35617, 0x746fe69f, 0xdb2b74d8, 0x9d3d0433,
+ 0x32799674, 0x18c526fc, 0xb781b4bb, 0x4dbc47ec, 0xe2f8d5ab,
+ 0xc8446523, 0x6700f764, 0xe74e85cc, 0x480a178b, 0x62b6a703,
+ 0xcdf23544, 0x37cfc613, 0x988b5454, 0xb237e4dc, 0x1d73769b,
+ 0x69da07cd, 0xc69e958a, 0xec222502, 0x4366b745, 0xb95b4412,
+ 0x161fd655, 0x3ca366dd, 0x93e7f49a, 0x13a98632, 0xbced1475,
+ 0x9651a4fd, 0x391536ba, 0xc328c5ed, 0x6c6c57aa, 0x46d0e722,
+ 0xe9947565},
+ {0x00000000, 0x4e890ba9, 0x9d121752, 0xd39b1cfb, 0xe15528e5,
+ 0xafdc234c, 0x7c473fb7, 0x32ce341e, 0x19db578b, 0x57525c22,
+ 0x84c940d9, 0xca404b70, 0xf88e7f6e, 0xb60774c7, 0x659c683c,
+ 0x2b156395, 0x33b6af16, 0x7d3fa4bf, 0xaea4b844, 0xe02db3ed,
+ 0xd2e387f3, 0x9c6a8c5a, 0x4ff190a1, 0x01789b08, 0x2a6df89d,
+ 0x64e4f334, 0xb77fefcf, 0xf9f6e466, 0xcb38d078, 0x85b1dbd1,
+ 0x562ac72a, 0x18a3cc83, 0x676d5e2c, 0x29e45585, 0xfa7f497e,
+ 0xb4f642d7, 0x863876c9, 0xc8b17d60, 0x1b2a619b, 0x55a36a32,
+ 0x7eb609a7, 0x303f020e, 0xe3a41ef5, 0xad2d155c, 0x9fe32142,
+ 0xd16a2aeb, 0x02f13610, 0x4c783db9, 0x54dbf13a, 0x1a52fa93,
+ 0xc9c9e668, 0x8740edc1, 0xb58ed9df, 0xfb07d276, 0x289cce8d,
+ 0x6615c524, 0x4d00a6b1, 0x0389ad18, 0xd012b1e3, 0x9e9bba4a,
+ 0xac558e54, 0xe2dc85fd, 0x31479906, 0x7fce92af, 0xcedabc58,
+ 0x8053b7f1, 0x53c8ab0a, 0x1d41a0a3, 0x2f8f94bd, 0x61069f14,
+ 0xb29d83ef, 0xfc148846, 0xd701ebd3, 0x9988e07a, 0x4a13fc81,
+ 0x049af728, 0x3654c336, 0x78ddc89f, 0xab46d464, 0xe5cfdfcd,
+ 0xfd6c134e, 0xb3e518e7, 0x607e041c, 0x2ef70fb5, 0x1c393bab,
+ 0x52b03002, 0x812b2cf9, 0xcfa22750, 0xe4b744c5, 0xaa3e4f6c,
+ 0x79a55397, 0x372c583e, 0x05e26c20, 0x4b6b6789, 0x98f07b72,
+ 0xd67970db, 0xa9b7e274, 0xe73ee9dd, 0x34a5f526, 0x7a2cfe8f,
+ 0x48e2ca91, 0x066bc138, 0xd5f0ddc3, 0x9b79d66a, 0xb06cb5ff,
+ 0xfee5be56, 0x2d7ea2ad, 0x63f7a904, 0x51399d1a, 0x1fb096b3,
+ 0xcc2b8a48, 0x82a281e1, 0x9a014d62, 0xd48846cb, 0x07135a30,
+ 0x499a5199, 0x7b546587, 0x35dd6e2e, 0xe64672d5, 0xa8cf797c,
+ 0x83da1ae9, 0xcd531140, 0x1ec80dbb, 0x50410612, 0x628f320c,
+ 0x2c0639a5, 0xff9d255e, 0xb1142ef7, 0x46c47ef1, 0x084d7558,
+ 0xdbd669a3, 0x955f620a, 0xa7915614, 0xe9185dbd, 0x3a834146,
+ 0x740a4aef, 0x5f1f297a, 0x119622d3, 0xc20d3e28, 0x8c843581,
+ 0xbe4a019f, 0xf0c30a36, 0x235816cd, 0x6dd11d64, 0x7572d1e7,
+ 0x3bfbda4e, 0xe860c6b5, 0xa6e9cd1c, 0x9427f902, 0xdaaef2ab,
+ 0x0935ee50, 0x47bce5f9, 0x6ca9866c, 0x22208dc5, 0xf1bb913e,
+ 0xbf329a97, 0x8dfcae89, 0xc375a520, 0x10eeb9db, 0x5e67b272,
+ 0x21a920dd, 0x6f202b74, 0xbcbb378f, 0xf2323c26, 0xc0fc0838,
+ 0x8e750391, 0x5dee1f6a, 0x136714c3, 0x38727756, 0x76fb7cff,
+ 0xa5606004, 0xebe96bad, 0xd9275fb3, 0x97ae541a, 0x443548e1,
+ 0x0abc4348, 0x121f8fcb, 0x5c968462, 0x8f0d9899, 0xc1849330,
+ 0xf34aa72e, 0xbdc3ac87, 0x6e58b07c, 0x20d1bbd5, 0x0bc4d840,
+ 0x454dd3e9, 0x96d6cf12, 0xd85fc4bb, 0xea91f0a5, 0xa418fb0c,
+ 0x7783e7f7, 0x390aec5e, 0x881ec2a9, 0xc697c900, 0x150cd5fb,
+ 0x5b85de52, 0x694bea4c, 0x27c2e1e5, 0xf459fd1e, 0xbad0f6b7,
+ 0x91c59522, 0xdf4c9e8b, 0x0cd78270, 0x425e89d9, 0x7090bdc7,
+ 0x3e19b66e, 0xed82aa95, 0xa30ba13c, 0xbba86dbf, 0xf5216616,
+ 0x26ba7aed, 0x68337144, 0x5afd455a, 0x14744ef3, 0xc7ef5208,
+ 0x896659a1, 0xa2733a34, 0xecfa319d, 0x3f612d66, 0x71e826cf,
+ 0x432612d1, 0x0daf1978, 0xde340583, 0x90bd0e2a, 0xef739c85,
+ 0xa1fa972c, 0x72618bd7, 0x3ce8807e, 0x0e26b460, 0x40afbfc9,
+ 0x9334a332, 0xddbda89b, 0xf6a8cb0e, 0xb821c0a7, 0x6bbadc5c,
+ 0x2533d7f5, 0x17fde3eb, 0x5974e842, 0x8aeff4b9, 0xc466ff10,
+ 0xdcc53393, 0x924c383a, 0x41d724c1, 0x0f5e2f68, 0x3d901b76,
+ 0x731910df, 0xa0820c24, 0xee0b078d, 0xc51e6418, 0x8b976fb1,
+ 0x580c734a, 0x168578e3, 0x244b4cfd, 0x6ac24754, 0xb9595baf,
+ 0xf7d05006},
+ {0x00000000, 0x8d88fde2, 0xc060fd85, 0x4de80067, 0x5bb0fd4b,
+ 0xd63800a9, 0x9bd000ce, 0x1658fd2c, 0xb761fa96, 0x3ae90774,
+ 0x77010713, 0xfa89faf1, 0xecd107dd, 0x6159fa3f, 0x2cb1fa58,
+ 0xa13907ba, 0xb5b2f36d, 0x383a0e8f, 0x75d20ee8, 0xf85af30a,
+ 0xee020e26, 0x638af3c4, 0x2e62f3a3, 0xa3ea0e41, 0x02d309fb,
+ 0x8f5bf419, 0xc2b3f47e, 0x4f3b099c, 0x5963f4b0, 0xd4eb0952,
+ 0x99030935, 0x148bf4d7, 0xb014e09b, 0x3d9c1d79, 0x70741d1e,
+ 0xfdfce0fc, 0xeba41dd0, 0x662ce032, 0x2bc4e055, 0xa64c1db7,
+ 0x07751a0d, 0x8afde7ef, 0xc715e788, 0x4a9d1a6a, 0x5cc5e746,
+ 0xd14d1aa4, 0x9ca51ac3, 0x112de721, 0x05a613f6, 0x882eee14,
+ 0xc5c6ee73, 0x484e1391, 0x5e16eebd, 0xd39e135f, 0x9e761338,
+ 0x13feeeda, 0xb2c7e960, 0x3f4f1482, 0x72a714e5, 0xff2fe907,
+ 0xe977142b, 0x64ffe9c9, 0x2917e9ae, 0xa49f144c, 0xbb58c777,
+ 0x36d03a95, 0x7b383af2, 0xf6b0c710, 0xe0e83a3c, 0x6d60c7de,
+ 0x2088c7b9, 0xad003a5b, 0x0c393de1, 0x81b1c003, 0xcc59c064,
+ 0x41d13d86, 0x5789c0aa, 0xda013d48, 0x97e93d2f, 0x1a61c0cd,
+ 0x0eea341a, 0x8362c9f8, 0xce8ac99f, 0x4302347d, 0x555ac951,
+ 0xd8d234b3, 0x953a34d4, 0x18b2c936, 0xb98bce8c, 0x3403336e,
+ 0x79eb3309, 0xf463ceeb, 0xe23b33c7, 0x6fb3ce25, 0x225bce42,
+ 0xafd333a0, 0x0b4c27ec, 0x86c4da0e, 0xcb2cda69, 0x46a4278b,
+ 0x50fcdaa7, 0xdd742745, 0x909c2722, 0x1d14dac0, 0xbc2ddd7a,
+ 0x31a52098, 0x7c4d20ff, 0xf1c5dd1d, 0xe79d2031, 0x6a15ddd3,
+ 0x27fdddb4, 0xaa752056, 0xbefed481, 0x33762963, 0x7e9e2904,
+ 0xf316d4e6, 0xe54e29ca, 0x68c6d428, 0x252ed44f, 0xa8a629ad,
+ 0x099f2e17, 0x8417d3f5, 0xc9ffd392, 0x44772e70, 0x522fd35c,
+ 0xdfa72ebe, 0x924f2ed9, 0x1fc7d33b, 0xadc088af, 0x2048754d,
+ 0x6da0752a, 0xe02888c8, 0xf67075e4, 0x7bf88806, 0x36108861,
+ 0xbb987583, 0x1aa17239, 0x97298fdb, 0xdac18fbc, 0x5749725e,
+ 0x41118f72, 0xcc997290, 0x817172f7, 0x0cf98f15, 0x18727bc2,
+ 0x95fa8620, 0xd8128647, 0x559a7ba5, 0x43c28689, 0xce4a7b6b,
+ 0x83a27b0c, 0x0e2a86ee, 0xaf138154, 0x229b7cb6, 0x6f737cd1,
+ 0xe2fb8133, 0xf4a37c1f, 0x792b81fd, 0x34c3819a, 0xb94b7c78,
+ 0x1dd46834, 0x905c95d6, 0xddb495b1, 0x503c6853, 0x4664957f,
+ 0xcbec689d, 0x860468fa, 0x0b8c9518, 0xaab592a2, 0x273d6f40,
+ 0x6ad56f27, 0xe75d92c5, 0xf1056fe9, 0x7c8d920b, 0x3165926c,
+ 0xbced6f8e, 0xa8669b59, 0x25ee66bb, 0x680666dc, 0xe58e9b3e,
+ 0xf3d66612, 0x7e5e9bf0, 0x33b69b97, 0xbe3e6675, 0x1f0761cf,
+ 0x928f9c2d, 0xdf679c4a, 0x52ef61a8, 0x44b79c84, 0xc93f6166,
+ 0x84d76101, 0x095f9ce3, 0x16984fd8, 0x9b10b23a, 0xd6f8b25d,
+ 0x5b704fbf, 0x4d28b293, 0xc0a04f71, 0x8d484f16, 0x00c0b2f4,
+ 0xa1f9b54e, 0x2c7148ac, 0x619948cb, 0xec11b529, 0xfa494805,
+ 0x77c1b5e7, 0x3a29b580, 0xb7a14862, 0xa32abcb5, 0x2ea24157,
+ 0x634a4130, 0xeec2bcd2, 0xf89a41fe, 0x7512bc1c, 0x38fabc7b,
+ 0xb5724199, 0x144b4623, 0x99c3bbc1, 0xd42bbba6, 0x59a34644,
+ 0x4ffbbb68, 0xc273468a, 0x8f9b46ed, 0x0213bb0f, 0xa68caf43,
+ 0x2b0452a1, 0x66ec52c6, 0xeb64af24, 0xfd3c5208, 0x70b4afea,
+ 0x3d5caf8d, 0xb0d4526f, 0x11ed55d5, 0x9c65a837, 0xd18da850,
+ 0x5c0555b2, 0x4a5da89e, 0xc7d5557c, 0x8a3d551b, 0x07b5a8f9,
+ 0x133e5c2e, 0x9eb6a1cc, 0xd35ea1ab, 0x5ed65c49, 0x488ea165,
+ 0xc5065c87, 0x88ee5ce0, 0x0566a102, 0xa45fa6b8, 0x29d75b5a,
+ 0x643f5b3d, 0xe9b7a6df, 0xffef5bf3, 0x7267a611, 0x3f8fa676,
+ 0xb2075b94},
+ {0x00000000, 0x80f0171f, 0xda91287f, 0x5a613f60, 0x6e5356bf,
+ 0xeea341a0, 0xb4c27ec0, 0x343269df, 0xdca6ad7e, 0x5c56ba61,
+ 0x06378501, 0x86c7921e, 0xb2f5fbc1, 0x3205ecde, 0x6864d3be,
+ 0xe894c4a1, 0x623c5cbd, 0xe2cc4ba2, 0xb8ad74c2, 0x385d63dd,
+ 0x0c6f0a02, 0x8c9f1d1d, 0xd6fe227d, 0x560e3562, 0xbe9af1c3,
+ 0x3e6ae6dc, 0x640bd9bc, 0xe4fbcea3, 0xd0c9a77c, 0x5039b063,
+ 0x0a588f03, 0x8aa8981c, 0xc478b97a, 0x4488ae65, 0x1ee99105,
+ 0x9e19861a, 0xaa2befc5, 0x2adbf8da, 0x70bac7ba, 0xf04ad0a5,
+ 0x18de1404, 0x982e031b, 0xc24f3c7b, 0x42bf2b64, 0x768d42bb,
+ 0xf67d55a4, 0xac1c6ac4, 0x2cec7ddb, 0xa644e5c7, 0x26b4f2d8,
+ 0x7cd5cdb8, 0xfc25daa7, 0xc817b378, 0x48e7a467, 0x12869b07,
+ 0x92768c18, 0x7ae248b9, 0xfa125fa6, 0xa07360c6, 0x208377d9,
+ 0x14b11e06, 0x94410919, 0xce203679, 0x4ed02166, 0x538074b5,
+ 0xd37063aa, 0x89115cca, 0x09e14bd5, 0x3dd3220a, 0xbd233515,
+ 0xe7420a75, 0x67b21d6a, 0x8f26d9cb, 0x0fd6ced4, 0x55b7f1b4,
+ 0xd547e6ab, 0xe1758f74, 0x6185986b, 0x3be4a70b, 0xbb14b014,
+ 0x31bc2808, 0xb14c3f17, 0xeb2d0077, 0x6bdd1768, 0x5fef7eb7,
+ 0xdf1f69a8, 0x857e56c8, 0x058e41d7, 0xed1a8576, 0x6dea9269,
+ 0x378bad09, 0xb77bba16, 0x8349d3c9, 0x03b9c4d6, 0x59d8fbb6,
+ 0xd928eca9, 0x97f8cdcf, 0x1708dad0, 0x4d69e5b0, 0xcd99f2af,
+ 0xf9ab9b70, 0x795b8c6f, 0x233ab30f, 0xa3caa410, 0x4b5e60b1,
+ 0xcbae77ae, 0x91cf48ce, 0x113f5fd1, 0x250d360e, 0xa5fd2111,
+ 0xff9c1e71, 0x7f6c096e, 0xf5c49172, 0x7534866d, 0x2f55b90d,
+ 0xafa5ae12, 0x9b97c7cd, 0x1b67d0d2, 0x4106efb2, 0xc1f6f8ad,
+ 0x29623c0c, 0xa9922b13, 0xf3f31473, 0x7303036c, 0x47316ab3,
+ 0xc7c17dac, 0x9da042cc, 0x1d5055d3, 0xa700e96a, 0x27f0fe75,
+ 0x7d91c115, 0xfd61d60a, 0xc953bfd5, 0x49a3a8ca, 0x13c297aa,
+ 0x933280b5, 0x7ba64414, 0xfb56530b, 0xa1376c6b, 0x21c77b74,
+ 0x15f512ab, 0x950505b4, 0xcf643ad4, 0x4f942dcb, 0xc53cb5d7,
+ 0x45cca2c8, 0x1fad9da8, 0x9f5d8ab7, 0xab6fe368, 0x2b9ff477,
+ 0x71fecb17, 0xf10edc08, 0x199a18a9, 0x996a0fb6, 0xc30b30d6,
+ 0x43fb27c9, 0x77c94e16, 0xf7395909, 0xad586669, 0x2da87176,
+ 0x63785010, 0xe388470f, 0xb9e9786f, 0x39196f70, 0x0d2b06af,
+ 0x8ddb11b0, 0xd7ba2ed0, 0x574a39cf, 0xbfdefd6e, 0x3f2eea71,
+ 0x654fd511, 0xe5bfc20e, 0xd18dabd1, 0x517dbcce, 0x0b1c83ae,
+ 0x8bec94b1, 0x01440cad, 0x81b41bb2, 0xdbd524d2, 0x5b2533cd,
+ 0x6f175a12, 0xefe74d0d, 0xb586726d, 0x35766572, 0xdde2a1d3,
+ 0x5d12b6cc, 0x077389ac, 0x87839eb3, 0xb3b1f76c, 0x3341e073,
+ 0x6920df13, 0xe9d0c80c, 0xf4809ddf, 0x74708ac0, 0x2e11b5a0,
+ 0xaee1a2bf, 0x9ad3cb60, 0x1a23dc7f, 0x4042e31f, 0xc0b2f400,
+ 0x282630a1, 0xa8d627be, 0xf2b718de, 0x72470fc1, 0x4675661e,
+ 0xc6857101, 0x9ce44e61, 0x1c14597e, 0x96bcc162, 0x164cd67d,
+ 0x4c2de91d, 0xccddfe02, 0xf8ef97dd, 0x781f80c2, 0x227ebfa2,
+ 0xa28ea8bd, 0x4a1a6c1c, 0xcaea7b03, 0x908b4463, 0x107b537c,
+ 0x24493aa3, 0xa4b92dbc, 0xfed812dc, 0x7e2805c3, 0x30f824a5,
+ 0xb00833ba, 0xea690cda, 0x6a991bc5, 0x5eab721a, 0xde5b6505,
+ 0x843a5a65, 0x04ca4d7a, 0xec5e89db, 0x6cae9ec4, 0x36cfa1a4,
+ 0xb63fb6bb, 0x820ddf64, 0x02fdc87b, 0x589cf71b, 0xd86ce004,
+ 0x52c47818, 0xd2346f07, 0x88555067, 0x08a54778, 0x3c972ea7,
+ 0xbc6739b8, 0xe60606d8, 0x66f611c7, 0x8e62d566, 0x0e92c279,
+ 0x54f3fd19, 0xd403ea06, 0xe03183d9, 0x60c194c6, 0x3aa0aba6,
+ 0xba50bcb9},
+ {0x00000000, 0x9570d495, 0xf190af6b, 0x64e07bfe, 0x38505897,
+ 0xad208c02, 0xc9c0f7fc, 0x5cb02369, 0x70a0b12e, 0xe5d065bb,
+ 0x81301e45, 0x1440cad0, 0x48f0e9b9, 0xdd803d2c, 0xb96046d2,
+ 0x2c109247, 0xe141625c, 0x7431b6c9, 0x10d1cd37, 0x85a119a2,
+ 0xd9113acb, 0x4c61ee5e, 0x288195a0, 0xbdf14135, 0x91e1d372,
+ 0x049107e7, 0x60717c19, 0xf501a88c, 0xa9b18be5, 0x3cc15f70,
+ 0x5821248e, 0xcd51f01b, 0x19f3c2f9, 0x8c83166c, 0xe8636d92,
+ 0x7d13b907, 0x21a39a6e, 0xb4d34efb, 0xd0333505, 0x4543e190,
+ 0x695373d7, 0xfc23a742, 0x98c3dcbc, 0x0db30829, 0x51032b40,
+ 0xc473ffd5, 0xa093842b, 0x35e350be, 0xf8b2a0a5, 0x6dc27430,
+ 0x09220fce, 0x9c52db5b, 0xc0e2f832, 0x55922ca7, 0x31725759,
+ 0xa40283cc, 0x8812118b, 0x1d62c51e, 0x7982bee0, 0xecf26a75,
+ 0xb042491c, 0x25329d89, 0x41d2e677, 0xd4a232e2, 0x33e785f2,
+ 0xa6975167, 0xc2772a99, 0x5707fe0c, 0x0bb7dd65, 0x9ec709f0,
+ 0xfa27720e, 0x6f57a69b, 0x434734dc, 0xd637e049, 0xb2d79bb7,
+ 0x27a74f22, 0x7b176c4b, 0xee67b8de, 0x8a87c320, 0x1ff717b5,
+ 0xd2a6e7ae, 0x47d6333b, 0x233648c5, 0xb6469c50, 0xeaf6bf39,
+ 0x7f866bac, 0x1b661052, 0x8e16c4c7, 0xa2065680, 0x37768215,
+ 0x5396f9eb, 0xc6e62d7e, 0x9a560e17, 0x0f26da82, 0x6bc6a17c,
+ 0xfeb675e9, 0x2a14470b, 0xbf64939e, 0xdb84e860, 0x4ef43cf5,
+ 0x12441f9c, 0x8734cb09, 0xe3d4b0f7, 0x76a46462, 0x5ab4f625,
+ 0xcfc422b0, 0xab24594e, 0x3e548ddb, 0x62e4aeb2, 0xf7947a27,
+ 0x937401d9, 0x0604d54c, 0xcb552557, 0x5e25f1c2, 0x3ac58a3c,
+ 0xafb55ea9, 0xf3057dc0, 0x6675a955, 0x0295d2ab, 0x97e5063e,
+ 0xbbf59479, 0x2e8540ec, 0x4a653b12, 0xdf15ef87, 0x83a5ccee,
+ 0x16d5187b, 0x72356385, 0xe745b710, 0x67cf0be4, 0xf2bfdf71,
+ 0x965fa48f, 0x032f701a, 0x5f9f5373, 0xcaef87e6, 0xae0ffc18,
+ 0x3b7f288d, 0x176fbaca, 0x821f6e5f, 0xe6ff15a1, 0x738fc134,
+ 0x2f3fe25d, 0xba4f36c8, 0xdeaf4d36, 0x4bdf99a3, 0x868e69b8,
+ 0x13febd2d, 0x771ec6d3, 0xe26e1246, 0xbede312f, 0x2baee5ba,
+ 0x4f4e9e44, 0xda3e4ad1, 0xf62ed896, 0x635e0c03, 0x07be77fd,
+ 0x92cea368, 0xce7e8001, 0x5b0e5494, 0x3fee2f6a, 0xaa9efbff,
+ 0x7e3cc91d, 0xeb4c1d88, 0x8fac6676, 0x1adcb2e3, 0x466c918a,
+ 0xd31c451f, 0xb7fc3ee1, 0x228cea74, 0x0e9c7833, 0x9becaca6,
+ 0xff0cd758, 0x6a7c03cd, 0x36cc20a4, 0xa3bcf431, 0xc75c8fcf,
+ 0x522c5b5a, 0x9f7dab41, 0x0a0d7fd4, 0x6eed042a, 0xfb9dd0bf,
+ 0xa72df3d6, 0x325d2743, 0x56bd5cbd, 0xc3cd8828, 0xefdd1a6f,
+ 0x7aadcefa, 0x1e4db504, 0x8b3d6191, 0xd78d42f8, 0x42fd966d,
+ 0x261ded93, 0xb36d3906, 0x54288e16, 0xc1585a83, 0xa5b8217d,
+ 0x30c8f5e8, 0x6c78d681, 0xf9080214, 0x9de879ea, 0x0898ad7f,
+ 0x24883f38, 0xb1f8ebad, 0xd5189053, 0x406844c6, 0x1cd867af,
+ 0x89a8b33a, 0xed48c8c4, 0x78381c51, 0xb569ec4a, 0x201938df,
+ 0x44f94321, 0xd18997b4, 0x8d39b4dd, 0x18496048, 0x7ca91bb6,
+ 0xe9d9cf23, 0xc5c95d64, 0x50b989f1, 0x3459f20f, 0xa129269a,
+ 0xfd9905f3, 0x68e9d166, 0x0c09aa98, 0x99797e0d, 0x4ddb4cef,
+ 0xd8ab987a, 0xbc4be384, 0x293b3711, 0x758b1478, 0xe0fbc0ed,
+ 0x841bbb13, 0x116b6f86, 0x3d7bfdc1, 0xa80b2954, 0xcceb52aa,
+ 0x599b863f, 0x052ba556, 0x905b71c3, 0xf4bb0a3d, 0x61cbdea8,
+ 0xac9a2eb3, 0x39eafa26, 0x5d0a81d8, 0xc87a554d, 0x94ca7624,
+ 0x01baa2b1, 0x655ad94f, 0xf02a0dda, 0xdc3a9f9d, 0x494a4b08,
+ 0x2daa30f6, 0xb8dae463, 0xe46ac70a, 0x711a139f, 0x15fa6861,
+ 0x808abcf4},
+ {0x00000000, 0xcf9e17c8, 0x444d29d1, 0x8bd33e19, 0x889a53a2,
+ 0x4704446a, 0xccd77a73, 0x03496dbb, 0xca45a105, 0x05dbb6cd,
+ 0x8e0888d4, 0x41969f1c, 0x42dff2a7, 0x8d41e56f, 0x0692db76,
+ 0xc90cccbe, 0x4ffa444b, 0x80645383, 0x0bb76d9a, 0xc4297a52,
+ 0xc76017e9, 0x08fe0021, 0x832d3e38, 0x4cb329f0, 0x85bfe54e,
+ 0x4a21f286, 0xc1f2cc9f, 0x0e6cdb57, 0x0d25b6ec, 0xc2bba124,
+ 0x49689f3d, 0x86f688f5, 0x9ff48896, 0x506a9f5e, 0xdbb9a147,
+ 0x1427b68f, 0x176edb34, 0xd8f0ccfc, 0x5323f2e5, 0x9cbde52d,
+ 0x55b12993, 0x9a2f3e5b, 0x11fc0042, 0xde62178a, 0xdd2b7a31,
+ 0x12b56df9, 0x996653e0, 0x56f84428, 0xd00eccdd, 0x1f90db15,
+ 0x9443e50c, 0x5bddf2c4, 0x58949f7f, 0x970a88b7, 0x1cd9b6ae,
+ 0xd347a166, 0x1a4b6dd8, 0xd5d57a10, 0x5e064409, 0x919853c1,
+ 0x92d13e7a, 0x5d4f29b2, 0xd69c17ab, 0x19020063, 0xe498176d,
+ 0x2b0600a5, 0xa0d53ebc, 0x6f4b2974, 0x6c0244cf, 0xa39c5307,
+ 0x284f6d1e, 0xe7d17ad6, 0x2eddb668, 0xe143a1a0, 0x6a909fb9,
+ 0xa50e8871, 0xa647e5ca, 0x69d9f202, 0xe20acc1b, 0x2d94dbd3,
+ 0xab625326, 0x64fc44ee, 0xef2f7af7, 0x20b16d3f, 0x23f80084,
+ 0xec66174c, 0x67b52955, 0xa82b3e9d, 0x6127f223, 0xaeb9e5eb,
+ 0x256adbf2, 0xeaf4cc3a, 0xe9bda181, 0x2623b649, 0xadf08850,
+ 0x626e9f98, 0x7b6c9ffb, 0xb4f28833, 0x3f21b62a, 0xf0bfa1e2,
+ 0xf3f6cc59, 0x3c68db91, 0xb7bbe588, 0x7825f240, 0xb1293efe,
+ 0x7eb72936, 0xf564172f, 0x3afa00e7, 0x39b36d5c, 0xf62d7a94,
+ 0x7dfe448d, 0xb2605345, 0x3496dbb0, 0xfb08cc78, 0x70dbf261,
+ 0xbf45e5a9, 0xbc0c8812, 0x73929fda, 0xf841a1c3, 0x37dfb60b,
+ 0xfed37ab5, 0x314d6d7d, 0xba9e5364, 0x750044ac, 0x76492917,
+ 0xb9d73edf, 0x320400c6, 0xfd9a170e, 0x1241289b, 0xdddf3f53,
+ 0x560c014a, 0x99921682, 0x9adb7b39, 0x55456cf1, 0xde9652e8,
+ 0x11084520, 0xd804899e, 0x179a9e56, 0x9c49a04f, 0x53d7b787,
+ 0x509eda3c, 0x9f00cdf4, 0x14d3f3ed, 0xdb4de425, 0x5dbb6cd0,
+ 0x92257b18, 0x19f64501, 0xd66852c9, 0xd5213f72, 0x1abf28ba,
+ 0x916c16a3, 0x5ef2016b, 0x97fecdd5, 0x5860da1d, 0xd3b3e404,
+ 0x1c2df3cc, 0x1f649e77, 0xd0fa89bf, 0x5b29b7a6, 0x94b7a06e,
+ 0x8db5a00d, 0x422bb7c5, 0xc9f889dc, 0x06669e14, 0x052ff3af,
+ 0xcab1e467, 0x4162da7e, 0x8efccdb6, 0x47f00108, 0x886e16c0,
+ 0x03bd28d9, 0xcc233f11, 0xcf6a52aa, 0x00f44562, 0x8b277b7b,
+ 0x44b96cb3, 0xc24fe446, 0x0dd1f38e, 0x8602cd97, 0x499cda5f,
+ 0x4ad5b7e4, 0x854ba02c, 0x0e989e35, 0xc10689fd, 0x080a4543,
+ 0xc794528b, 0x4c476c92, 0x83d97b5a, 0x809016e1, 0x4f0e0129,
+ 0xc4dd3f30, 0x0b4328f8, 0xf6d93ff6, 0x3947283e, 0xb2941627,
+ 0x7d0a01ef, 0x7e436c54, 0xb1dd7b9c, 0x3a0e4585, 0xf590524d,
+ 0x3c9c9ef3, 0xf302893b, 0x78d1b722, 0xb74fa0ea, 0xb406cd51,
+ 0x7b98da99, 0xf04be480, 0x3fd5f348, 0xb9237bbd, 0x76bd6c75,
+ 0xfd6e526c, 0x32f045a4, 0x31b9281f, 0xfe273fd7, 0x75f401ce,
+ 0xba6a1606, 0x7366dab8, 0xbcf8cd70, 0x372bf369, 0xf8b5e4a1,
+ 0xfbfc891a, 0x34629ed2, 0xbfb1a0cb, 0x702fb703, 0x692db760,
+ 0xa6b3a0a8, 0x2d609eb1, 0xe2fe8979, 0xe1b7e4c2, 0x2e29f30a,
+ 0xa5facd13, 0x6a64dadb, 0xa3681665, 0x6cf601ad, 0xe7253fb4,
+ 0x28bb287c, 0x2bf245c7, 0xe46c520f, 0x6fbf6c16, 0xa0217bde,
+ 0x26d7f32b, 0xe949e4e3, 0x629adafa, 0xad04cd32, 0xae4da089,
+ 0x61d3b741, 0xea008958, 0x259e9e90, 0xec92522e, 0x230c45e6,
+ 0xa8df7bff, 0x67416c37, 0x6408018c, 0xab961644, 0x2045285d,
+ 0xefdb3f95},
+ {0x00000000, 0x24825136, 0x4904a26c, 0x6d86f35a, 0x920944d8,
+ 0xb68b15ee, 0xdb0de6b4, 0xff8fb782, 0xff638ff1, 0xdbe1dec7,
+ 0xb6672d9d, 0x92e57cab, 0x6d6acb29, 0x49e89a1f, 0x246e6945,
+ 0x00ec3873, 0x25b619a3, 0x01344895, 0x6cb2bbcf, 0x4830eaf9,
+ 0xb7bf5d7b, 0x933d0c4d, 0xfebbff17, 0xda39ae21, 0xdad59652,
+ 0xfe57c764, 0x93d1343e, 0xb7536508, 0x48dcd28a, 0x6c5e83bc,
+ 0x01d870e6, 0x255a21d0, 0x4b6c3346, 0x6fee6270, 0x0268912a,
+ 0x26eac01c, 0xd965779e, 0xfde726a8, 0x9061d5f2, 0xb4e384c4,
+ 0xb40fbcb7, 0x908ded81, 0xfd0b1edb, 0xd9894fed, 0x2606f86f,
+ 0x0284a959, 0x6f025a03, 0x4b800b35, 0x6eda2ae5, 0x4a587bd3,
+ 0x27de8889, 0x035cd9bf, 0xfcd36e3d, 0xd8513f0b, 0xb5d7cc51,
+ 0x91559d67, 0x91b9a514, 0xb53bf422, 0xd8bd0778, 0xfc3f564e,
+ 0x03b0e1cc, 0x2732b0fa, 0x4ab443a0, 0x6e361296, 0x96d8668c,
+ 0xb25a37ba, 0xdfdcc4e0, 0xfb5e95d6, 0x04d12254, 0x20537362,
+ 0x4dd58038, 0x6957d10e, 0x69bbe97d, 0x4d39b84b, 0x20bf4b11,
+ 0x043d1a27, 0xfbb2ada5, 0xdf30fc93, 0xb2b60fc9, 0x96345eff,
+ 0xb36e7f2f, 0x97ec2e19, 0xfa6add43, 0xdee88c75, 0x21673bf7,
+ 0x05e56ac1, 0x6863999b, 0x4ce1c8ad, 0x4c0df0de, 0x688fa1e8,
+ 0x050952b2, 0x218b0384, 0xde04b406, 0xfa86e530, 0x9700166a,
+ 0xb382475c, 0xddb455ca, 0xf93604fc, 0x94b0f7a6, 0xb032a690,
+ 0x4fbd1112, 0x6b3f4024, 0x06b9b37e, 0x223be248, 0x22d7da3b,
+ 0x06558b0d, 0x6bd37857, 0x4f512961, 0xb0de9ee3, 0x945ccfd5,
+ 0xf9da3c8f, 0xdd586db9, 0xf8024c69, 0xdc801d5f, 0xb106ee05,
+ 0x9584bf33, 0x6a0b08b1, 0x4e895987, 0x230faadd, 0x078dfbeb,
+ 0x0761c398, 0x23e392ae, 0x4e6561f4, 0x6ae730c2, 0x95688740,
+ 0xb1ead676, 0xdc6c252c, 0xf8ee741a, 0xf6c1cb59, 0xd2439a6f,
+ 0xbfc56935, 0x9b473803, 0x64c88f81, 0x404adeb7, 0x2dcc2ded,
+ 0x094e7cdb, 0x09a244a8, 0x2d20159e, 0x40a6e6c4, 0x6424b7f2,
+ 0x9bab0070, 0xbf295146, 0xd2afa21c, 0xf62df32a, 0xd377d2fa,
+ 0xf7f583cc, 0x9a737096, 0xbef121a0, 0x417e9622, 0x65fcc714,
+ 0x087a344e, 0x2cf86578, 0x2c145d0b, 0x08960c3d, 0x6510ff67,
+ 0x4192ae51, 0xbe1d19d3, 0x9a9f48e5, 0xf719bbbf, 0xd39bea89,
+ 0xbdadf81f, 0x992fa929, 0xf4a95a73, 0xd02b0b45, 0x2fa4bcc7,
+ 0x0b26edf1, 0x66a01eab, 0x42224f9d, 0x42ce77ee, 0x664c26d8,
+ 0x0bcad582, 0x2f4884b4, 0xd0c73336, 0xf4456200, 0x99c3915a,
+ 0xbd41c06c, 0x981be1bc, 0xbc99b08a, 0xd11f43d0, 0xf59d12e6,
+ 0x0a12a564, 0x2e90f452, 0x43160708, 0x6794563e, 0x67786e4d,
+ 0x43fa3f7b, 0x2e7ccc21, 0x0afe9d17, 0xf5712a95, 0xd1f37ba3,
+ 0xbc7588f9, 0x98f7d9cf, 0x6019add5, 0x449bfce3, 0x291d0fb9,
+ 0x0d9f5e8f, 0xf210e90d, 0xd692b83b, 0xbb144b61, 0x9f961a57,
+ 0x9f7a2224, 0xbbf87312, 0xd67e8048, 0xf2fcd17e, 0x0d7366fc,
+ 0x29f137ca, 0x4477c490, 0x60f595a6, 0x45afb476, 0x612de540,
+ 0x0cab161a, 0x2829472c, 0xd7a6f0ae, 0xf324a198, 0x9ea252c2,
+ 0xba2003f4, 0xbacc3b87, 0x9e4e6ab1, 0xf3c899eb, 0xd74ac8dd,
+ 0x28c57f5f, 0x0c472e69, 0x61c1dd33, 0x45438c05, 0x2b759e93,
+ 0x0ff7cfa5, 0x62713cff, 0x46f36dc9, 0xb97cda4b, 0x9dfe8b7d,
+ 0xf0787827, 0xd4fa2911, 0xd4161162, 0xf0944054, 0x9d12b30e,
+ 0xb990e238, 0x461f55ba, 0x629d048c, 0x0f1bf7d6, 0x2b99a6e0,
+ 0x0ec38730, 0x2a41d606, 0x47c7255c, 0x6345746a, 0x9ccac3e8,
+ 0xb84892de, 0xd5ce6184, 0xf14c30b2, 0xf1a008c1, 0xd52259f7,
+ 0xb8a4aaad, 0x9c26fb9b, 0x63a94c19, 0x472b1d2f, 0x2aadee75,
+ 0x0e2fbf43},
+ {0x00000000, 0x36f290f3, 0x6de521e6, 0x5b17b115, 0xdbca43cc,
+ 0xed38d33f, 0xb62f622a, 0x80ddf2d9, 0x6ce581d9, 0x5a17112a,
+ 0x0100a03f, 0x37f230cc, 0xb72fc215, 0x81dd52e6, 0xdacae3f3,
+ 0xec387300, 0xd9cb03b2, 0xef399341, 0xb42e2254, 0x82dcb2a7,
+ 0x0201407e, 0x34f3d08d, 0x6fe46198, 0x5916f16b, 0xb52e826b,
+ 0x83dc1298, 0xd8cba38d, 0xee39337e, 0x6ee4c1a7, 0x58165154,
+ 0x0301e041, 0x35f370b2, 0x68e70125, 0x5e1591d6, 0x050220c3,
+ 0x33f0b030, 0xb32d42e9, 0x85dfd21a, 0xdec8630f, 0xe83af3fc,
+ 0x040280fc, 0x32f0100f, 0x69e7a11a, 0x5f1531e9, 0xdfc8c330,
+ 0xe93a53c3, 0xb22de2d6, 0x84df7225, 0xb12c0297, 0x87de9264,
+ 0xdcc92371, 0xea3bb382, 0x6ae6415b, 0x5c14d1a8, 0x070360bd,
+ 0x31f1f04e, 0xddc9834e, 0xeb3b13bd, 0xb02ca2a8, 0x86de325b,
+ 0x0603c082, 0x30f15071, 0x6be6e164, 0x5d147197, 0xd1ce024a,
+ 0xe73c92b9, 0xbc2b23ac, 0x8ad9b35f, 0x0a044186, 0x3cf6d175,
+ 0x67e16060, 0x5113f093, 0xbd2b8393, 0x8bd91360, 0xd0cea275,
+ 0xe63c3286, 0x66e1c05f, 0x501350ac, 0x0b04e1b9, 0x3df6714a,
+ 0x080501f8, 0x3ef7910b, 0x65e0201e, 0x5312b0ed, 0xd3cf4234,
+ 0xe53dd2c7, 0xbe2a63d2, 0x88d8f321, 0x64e08021, 0x521210d2,
+ 0x0905a1c7, 0x3ff73134, 0xbf2ac3ed, 0x89d8531e, 0xd2cfe20b,
+ 0xe43d72f8, 0xb929036f, 0x8fdb939c, 0xd4cc2289, 0xe23eb27a,
+ 0x62e340a3, 0x5411d050, 0x0f066145, 0x39f4f1b6, 0xd5cc82b6,
+ 0xe33e1245, 0xb829a350, 0x8edb33a3, 0x0e06c17a, 0x38f45189,
+ 0x63e3e09c, 0x5511706f, 0x60e200dd, 0x5610902e, 0x0d07213b,
+ 0x3bf5b1c8, 0xbb284311, 0x8ddad3e2, 0xd6cd62f7, 0xe03ff204,
+ 0x0c078104, 0x3af511f7, 0x61e2a0e2, 0x57103011, 0xd7cdc2c8,
+ 0xe13f523b, 0xba28e32e, 0x8cda73dd, 0x78ed02d5, 0x4e1f9226,
+ 0x15082333, 0x23fab3c0, 0xa3274119, 0x95d5d1ea, 0xcec260ff,
+ 0xf830f00c, 0x1408830c, 0x22fa13ff, 0x79eda2ea, 0x4f1f3219,
+ 0xcfc2c0c0, 0xf9305033, 0xa227e126, 0x94d571d5, 0xa1260167,
+ 0x97d49194, 0xccc32081, 0xfa31b072, 0x7aec42ab, 0x4c1ed258,
+ 0x1709634d, 0x21fbf3be, 0xcdc380be, 0xfb31104d, 0xa026a158,
+ 0x96d431ab, 0x1609c372, 0x20fb5381, 0x7bece294, 0x4d1e7267,
+ 0x100a03f0, 0x26f89303, 0x7def2216, 0x4b1db2e5, 0xcbc0403c,
+ 0xfd32d0cf, 0xa62561da, 0x90d7f129, 0x7cef8229, 0x4a1d12da,
+ 0x110aa3cf, 0x27f8333c, 0xa725c1e5, 0x91d75116, 0xcac0e003,
+ 0xfc3270f0, 0xc9c10042, 0xff3390b1, 0xa42421a4, 0x92d6b157,
+ 0x120b438e, 0x24f9d37d, 0x7fee6268, 0x491cf29b, 0xa524819b,
+ 0x93d61168, 0xc8c1a07d, 0xfe33308e, 0x7eeec257, 0x481c52a4,
+ 0x130be3b1, 0x25f97342, 0xa923009f, 0x9fd1906c, 0xc4c62179,
+ 0xf234b18a, 0x72e94353, 0x441bd3a0, 0x1f0c62b5, 0x29fef246,
+ 0xc5c68146, 0xf33411b5, 0xa823a0a0, 0x9ed13053, 0x1e0cc28a,
+ 0x28fe5279, 0x73e9e36c, 0x451b739f, 0x70e8032d, 0x461a93de,
+ 0x1d0d22cb, 0x2bffb238, 0xab2240e1, 0x9dd0d012, 0xc6c76107,
+ 0xf035f1f4, 0x1c0d82f4, 0x2aff1207, 0x71e8a312, 0x471a33e1,
+ 0xc7c7c138, 0xf13551cb, 0xaa22e0de, 0x9cd0702d, 0xc1c401ba,
+ 0xf7369149, 0xac21205c, 0x9ad3b0af, 0x1a0e4276, 0x2cfcd285,
+ 0x77eb6390, 0x4119f363, 0xad218063, 0x9bd31090, 0xc0c4a185,
+ 0xf6363176, 0x76ebc3af, 0x4019535c, 0x1b0ee249, 0x2dfc72ba,
+ 0x180f0208, 0x2efd92fb, 0x75ea23ee, 0x4318b31d, 0xc3c541c4,
+ 0xf537d137, 0xae206022, 0x98d2f0d1, 0x74ea83d1, 0x42181322,
+ 0x190fa237, 0x2ffd32c4, 0xaf20c01d, 0x99d250ee, 0xc2c5e1fb,
+ 0xf4377108}};
+
+local const z_word_t FAR crc_braid_big_table[][256] = {
+ {0x0000000000000000, 0xf390f23600000000, 0xe621e56d00000000,
+ 0x15b1175b00000000, 0xcc43cadb00000000, 0x3fd338ed00000000,
+ 0x2a622fb600000000, 0xd9f2dd8000000000, 0xd981e56c00000000,
+ 0x2a11175a00000000, 0x3fa0000100000000, 0xcc30f23700000000,
+ 0x15c22fb700000000, 0xe652dd8100000000, 0xf3e3cada00000000,
+ 0x007338ec00000000, 0xb203cbd900000000, 0x419339ef00000000,
+ 0x54222eb400000000, 0xa7b2dc8200000000, 0x7e40010200000000,
+ 0x8dd0f33400000000, 0x9861e46f00000000, 0x6bf1165900000000,
+ 0x6b822eb500000000, 0x9812dc8300000000, 0x8da3cbd800000000,
+ 0x7e3339ee00000000, 0xa7c1e46e00000000, 0x5451165800000000,
+ 0x41e0010300000000, 0xb270f33500000000, 0x2501e76800000000,
+ 0xd691155e00000000, 0xc320020500000000, 0x30b0f03300000000,
+ 0xe9422db300000000, 0x1ad2df8500000000, 0x0f63c8de00000000,
+ 0xfcf33ae800000000, 0xfc80020400000000, 0x0f10f03200000000,
+ 0x1aa1e76900000000, 0xe931155f00000000, 0x30c3c8df00000000,
+ 0xc3533ae900000000, 0xd6e22db200000000, 0x2572df8400000000,
+ 0x97022cb100000000, 0x6492de8700000000, 0x7123c9dc00000000,
+ 0x82b33bea00000000, 0x5b41e66a00000000, 0xa8d1145c00000000,
+ 0xbd60030700000000, 0x4ef0f13100000000, 0x4e83c9dd00000000,
+ 0xbd133beb00000000, 0xa8a22cb000000000, 0x5b32de8600000000,
+ 0x82c0030600000000, 0x7150f13000000000, 0x64e1e66b00000000,
+ 0x9771145d00000000, 0x4a02ced100000000, 0xb9923ce700000000,
+ 0xac232bbc00000000, 0x5fb3d98a00000000, 0x8641040a00000000,
+ 0x75d1f63c00000000, 0x6060e16700000000, 0x93f0135100000000,
+ 0x93832bbd00000000, 0x6013d98b00000000, 0x75a2ced000000000,
+ 0x86323ce600000000, 0x5fc0e16600000000, 0xac50135000000000,
+ 0xb9e1040b00000000, 0x4a71f63d00000000, 0xf801050800000000,
+ 0x0b91f73e00000000, 0x1e20e06500000000, 0xedb0125300000000,
+ 0x3442cfd300000000, 0xc7d23de500000000, 0xd2632abe00000000,
+ 0x21f3d88800000000, 0x2180e06400000000, 0xd210125200000000,
+ 0xc7a1050900000000, 0x3431f73f00000000, 0xedc32abf00000000,
+ 0x1e53d88900000000, 0x0be2cfd200000000, 0xf8723de400000000,
+ 0x6f0329b900000000, 0x9c93db8f00000000, 0x8922ccd400000000,
+ 0x7ab23ee200000000, 0xa340e36200000000, 0x50d0115400000000,
+ 0x4561060f00000000, 0xb6f1f43900000000, 0xb682ccd500000000,
+ 0x45123ee300000000, 0x50a329b800000000, 0xa333db8e00000000,
+ 0x7ac1060e00000000, 0x8951f43800000000, 0x9ce0e36300000000,
+ 0x6f70115500000000, 0xdd00e26000000000, 0x2e90105600000000,
+ 0x3b21070d00000000, 0xc8b1f53b00000000, 0x114328bb00000000,
+ 0xe2d3da8d00000000, 0xf762cdd600000000, 0x04f23fe000000000,
+ 0x0481070c00000000, 0xf711f53a00000000, 0xe2a0e26100000000,
+ 0x1130105700000000, 0xc8c2cdd700000000, 0x3b523fe100000000,
+ 0x2ee328ba00000000, 0xdd73da8c00000000, 0xd502ed7800000000,
+ 0x26921f4e00000000, 0x3323081500000000, 0xc0b3fa2300000000,
+ 0x194127a300000000, 0xead1d59500000000, 0xff60c2ce00000000,
+ 0x0cf030f800000000, 0x0c83081400000000, 0xff13fa2200000000,
+ 0xeaa2ed7900000000, 0x19321f4f00000000, 0xc0c0c2cf00000000,
+ 0x335030f900000000, 0x26e127a200000000, 0xd571d59400000000,
+ 0x670126a100000000, 0x9491d49700000000, 0x8120c3cc00000000,
+ 0x72b031fa00000000, 0xab42ec7a00000000, 0x58d21e4c00000000,
+ 0x4d63091700000000, 0xbef3fb2100000000, 0xbe80c3cd00000000,
+ 0x4d1031fb00000000, 0x58a126a000000000, 0xab31d49600000000,
+ 0x72c3091600000000, 0x8153fb2000000000, 0x94e2ec7b00000000,
+ 0x67721e4d00000000, 0xf0030a1000000000, 0x0393f82600000000,
+ 0x1622ef7d00000000, 0xe5b21d4b00000000, 0x3c40c0cb00000000,
+ 0xcfd032fd00000000, 0xda6125a600000000, 0x29f1d79000000000,
+ 0x2982ef7c00000000, 0xda121d4a00000000, 0xcfa30a1100000000,
+ 0x3c33f82700000000, 0xe5c125a700000000, 0x1651d79100000000,
+ 0x03e0c0ca00000000, 0xf07032fc00000000, 0x4200c1c900000000,
+ 0xb19033ff00000000, 0xa42124a400000000, 0x57b1d69200000000,
+ 0x8e430b1200000000, 0x7dd3f92400000000, 0x6862ee7f00000000,
+ 0x9bf21c4900000000, 0x9b8124a500000000, 0x6811d69300000000,
+ 0x7da0c1c800000000, 0x8e3033fe00000000, 0x57c2ee7e00000000,
+ 0xa4521c4800000000, 0xb1e30b1300000000, 0x4273f92500000000,
+ 0x9f0023a900000000, 0x6c90d19f00000000, 0x7921c6c400000000,
+ 0x8ab134f200000000, 0x5343e97200000000, 0xa0d31b4400000000,
+ 0xb5620c1f00000000, 0x46f2fe2900000000, 0x4681c6c500000000,
+ 0xb51134f300000000, 0xa0a023a800000000, 0x5330d19e00000000,
+ 0x8ac20c1e00000000, 0x7952fe2800000000, 0x6ce3e97300000000,
+ 0x9f731b4500000000, 0x2d03e87000000000, 0xde931a4600000000,
+ 0xcb220d1d00000000, 0x38b2ff2b00000000, 0xe14022ab00000000,
+ 0x12d0d09d00000000, 0x0761c7c600000000, 0xf4f135f000000000,
+ 0xf4820d1c00000000, 0x0712ff2a00000000, 0x12a3e87100000000,
+ 0xe1331a4700000000, 0x38c1c7c700000000, 0xcb5135f100000000,
+ 0xdee022aa00000000, 0x2d70d09c00000000, 0xba01c4c100000000,
+ 0x499136f700000000, 0x5c2021ac00000000, 0xafb0d39a00000000,
+ 0x76420e1a00000000, 0x85d2fc2c00000000, 0x9063eb7700000000,
+ 0x63f3194100000000, 0x638021ad00000000, 0x9010d39b00000000,
+ 0x85a1c4c000000000, 0x763136f600000000, 0xafc3eb7600000000,
+ 0x5c53194000000000, 0x49e20e1b00000000, 0xba72fc2d00000000,
+ 0x08020f1800000000, 0xfb92fd2e00000000, 0xee23ea7500000000,
+ 0x1db3184300000000, 0xc441c5c300000000, 0x37d137f500000000,
+ 0x226020ae00000000, 0xd1f0d29800000000, 0xd183ea7400000000,
+ 0x2213184200000000, 0x37a20f1900000000, 0xc432fd2f00000000,
+ 0x1dc020af00000000, 0xee50d29900000000, 0xfbe1c5c200000000,
+ 0x087137f400000000},
+ {0x0000000000000000, 0x3651822400000000, 0x6ca2044900000000,
+ 0x5af3866d00000000, 0xd844099200000000, 0xee158bb600000000,
+ 0xb4e60ddb00000000, 0x82b78fff00000000, 0xf18f63ff00000000,
+ 0xc7dee1db00000000, 0x9d2d67b600000000, 0xab7ce59200000000,
+ 0x29cb6a6d00000000, 0x1f9ae84900000000, 0x45696e2400000000,
+ 0x7338ec0000000000, 0xa319b62500000000, 0x9548340100000000,
+ 0xcfbbb26c00000000, 0xf9ea304800000000, 0x7b5dbfb700000000,
+ 0x4d0c3d9300000000, 0x17ffbbfe00000000, 0x21ae39da00000000,
+ 0x5296d5da00000000, 0x64c757fe00000000, 0x3e34d19300000000,
+ 0x086553b700000000, 0x8ad2dc4800000000, 0xbc835e6c00000000,
+ 0xe670d80100000000, 0xd0215a2500000000, 0x46336c4b00000000,
+ 0x7062ee6f00000000, 0x2a91680200000000, 0x1cc0ea2600000000,
+ 0x9e7765d900000000, 0xa826e7fd00000000, 0xf2d5619000000000,
+ 0xc484e3b400000000, 0xb7bc0fb400000000, 0x81ed8d9000000000,
+ 0xdb1e0bfd00000000, 0xed4f89d900000000, 0x6ff8062600000000,
+ 0x59a9840200000000, 0x035a026f00000000, 0x350b804b00000000,
+ 0xe52ada6e00000000, 0xd37b584a00000000, 0x8988de2700000000,
+ 0xbfd95c0300000000, 0x3d6ed3fc00000000, 0x0b3f51d800000000,
+ 0x51ccd7b500000000, 0x679d559100000000, 0x14a5b99100000000,
+ 0x22f43bb500000000, 0x7807bdd800000000, 0x4e563ffc00000000,
+ 0xcce1b00300000000, 0xfab0322700000000, 0xa043b44a00000000,
+ 0x9612366e00000000, 0x8c66d89600000000, 0xba375ab200000000,
+ 0xe0c4dcdf00000000, 0xd6955efb00000000, 0x5422d10400000000,
+ 0x6273532000000000, 0x3880d54d00000000, 0x0ed1576900000000,
+ 0x7de9bb6900000000, 0x4bb8394d00000000, 0x114bbf2000000000,
+ 0x271a3d0400000000, 0xa5adb2fb00000000, 0x93fc30df00000000,
+ 0xc90fb6b200000000, 0xff5e349600000000, 0x2f7f6eb300000000,
+ 0x192eec9700000000, 0x43dd6afa00000000, 0x758ce8de00000000,
+ 0xf73b672100000000, 0xc16ae50500000000, 0x9b99636800000000,
+ 0xadc8e14c00000000, 0xdef00d4c00000000, 0xe8a18f6800000000,
+ 0xb252090500000000, 0x84038b2100000000, 0x06b404de00000000,
+ 0x30e586fa00000000, 0x6a16009700000000, 0x5c4782b300000000,
+ 0xca55b4dd00000000, 0xfc0436f900000000, 0xa6f7b09400000000,
+ 0x90a632b000000000, 0x1211bd4f00000000, 0x24403f6b00000000,
+ 0x7eb3b90600000000, 0x48e23b2200000000, 0x3bdad72200000000,
+ 0x0d8b550600000000, 0x5778d36b00000000, 0x6129514f00000000,
+ 0xe39edeb000000000, 0xd5cf5c9400000000, 0x8f3cdaf900000000,
+ 0xb96d58dd00000000, 0x694c02f800000000, 0x5f1d80dc00000000,
+ 0x05ee06b100000000, 0x33bf849500000000, 0xb1080b6a00000000,
+ 0x8759894e00000000, 0xddaa0f2300000000, 0xebfb8d0700000000,
+ 0x98c3610700000000, 0xae92e32300000000, 0xf461654e00000000,
+ 0xc230e76a00000000, 0x4087689500000000, 0x76d6eab100000000,
+ 0x2c256cdc00000000, 0x1a74eef800000000, 0x59cbc1f600000000,
+ 0x6f9a43d200000000, 0x3569c5bf00000000, 0x0338479b00000000,
+ 0x818fc86400000000, 0xb7de4a4000000000, 0xed2dcc2d00000000,
+ 0xdb7c4e0900000000, 0xa844a20900000000, 0x9e15202d00000000,
+ 0xc4e6a64000000000, 0xf2b7246400000000, 0x7000ab9b00000000,
+ 0x465129bf00000000, 0x1ca2afd200000000, 0x2af32df600000000,
+ 0xfad277d300000000, 0xcc83f5f700000000, 0x9670739a00000000,
+ 0xa021f1be00000000, 0x22967e4100000000, 0x14c7fc6500000000,
+ 0x4e347a0800000000, 0x7865f82c00000000, 0x0b5d142c00000000,
+ 0x3d0c960800000000, 0x67ff106500000000, 0x51ae924100000000,
+ 0xd3191dbe00000000, 0xe5489f9a00000000, 0xbfbb19f700000000,
+ 0x89ea9bd300000000, 0x1ff8adbd00000000, 0x29a92f9900000000,
+ 0x735aa9f400000000, 0x450b2bd000000000, 0xc7bca42f00000000,
+ 0xf1ed260b00000000, 0xab1ea06600000000, 0x9d4f224200000000,
+ 0xee77ce4200000000, 0xd8264c6600000000, 0x82d5ca0b00000000,
+ 0xb484482f00000000, 0x3633c7d000000000, 0x006245f400000000,
+ 0x5a91c39900000000, 0x6cc041bd00000000, 0xbce11b9800000000,
+ 0x8ab099bc00000000, 0xd0431fd100000000, 0xe6129df500000000,
+ 0x64a5120a00000000, 0x52f4902e00000000, 0x0807164300000000,
+ 0x3e56946700000000, 0x4d6e786700000000, 0x7b3ffa4300000000,
+ 0x21cc7c2e00000000, 0x179dfe0a00000000, 0x952a71f500000000,
+ 0xa37bf3d100000000, 0xf98875bc00000000, 0xcfd9f79800000000,
+ 0xd5ad196000000000, 0xe3fc9b4400000000, 0xb90f1d2900000000,
+ 0x8f5e9f0d00000000, 0x0de910f200000000, 0x3bb892d600000000,
+ 0x614b14bb00000000, 0x571a969f00000000, 0x24227a9f00000000,
+ 0x1273f8bb00000000, 0x48807ed600000000, 0x7ed1fcf200000000,
+ 0xfc66730d00000000, 0xca37f12900000000, 0x90c4774400000000,
+ 0xa695f56000000000, 0x76b4af4500000000, 0x40e52d6100000000,
+ 0x1a16ab0c00000000, 0x2c47292800000000, 0xaef0a6d700000000,
+ 0x98a124f300000000, 0xc252a29e00000000, 0xf40320ba00000000,
+ 0x873bccba00000000, 0xb16a4e9e00000000, 0xeb99c8f300000000,
+ 0xddc84ad700000000, 0x5f7fc52800000000, 0x692e470c00000000,
+ 0x33ddc16100000000, 0x058c434500000000, 0x939e752b00000000,
+ 0xa5cff70f00000000, 0xff3c716200000000, 0xc96df34600000000,
+ 0x4bda7cb900000000, 0x7d8bfe9d00000000, 0x277878f000000000,
+ 0x1129fad400000000, 0x621116d400000000, 0x544094f000000000,
+ 0x0eb3129d00000000, 0x38e290b900000000, 0xba551f4600000000,
+ 0x8c049d6200000000, 0xd6f71b0f00000000, 0xe0a6992b00000000,
+ 0x3087c30e00000000, 0x06d6412a00000000, 0x5c25c74700000000,
+ 0x6a74456300000000, 0xe8c3ca9c00000000, 0xde9248b800000000,
+ 0x8461ced500000000, 0xb2304cf100000000, 0xc108a0f100000000,
+ 0xf75922d500000000, 0xadaaa4b800000000, 0x9bfb269c00000000,
+ 0x194ca96300000000, 0x2f1d2b4700000000, 0x75eead2a00000000,
+ 0x43bf2f0e00000000},
+ {0x0000000000000000, 0xc8179ecf00000000, 0xd1294d4400000000,
+ 0x193ed38b00000000, 0xa2539a8800000000, 0x6a44044700000000,
+ 0x737ad7cc00000000, 0xbb6d490300000000, 0x05a145ca00000000,
+ 0xcdb6db0500000000, 0xd488088e00000000, 0x1c9f964100000000,
+ 0xa7f2df4200000000, 0x6fe5418d00000000, 0x76db920600000000,
+ 0xbecc0cc900000000, 0x4b44fa4f00000000, 0x8353648000000000,
+ 0x9a6db70b00000000, 0x527a29c400000000, 0xe91760c700000000,
+ 0x2100fe0800000000, 0x383e2d8300000000, 0xf029b34c00000000,
+ 0x4ee5bf8500000000, 0x86f2214a00000000, 0x9fccf2c100000000,
+ 0x57db6c0e00000000, 0xecb6250d00000000, 0x24a1bbc200000000,
+ 0x3d9f684900000000, 0xf588f68600000000, 0x9688f49f00000000,
+ 0x5e9f6a5000000000, 0x47a1b9db00000000, 0x8fb6271400000000,
+ 0x34db6e1700000000, 0xfcccf0d800000000, 0xe5f2235300000000,
+ 0x2de5bd9c00000000, 0x9329b15500000000, 0x5b3e2f9a00000000,
+ 0x4200fc1100000000, 0x8a1762de00000000, 0x317a2bdd00000000,
+ 0xf96db51200000000, 0xe053669900000000, 0x2844f85600000000,
+ 0xddcc0ed000000000, 0x15db901f00000000, 0x0ce5439400000000,
+ 0xc4f2dd5b00000000, 0x7f9f945800000000, 0xb7880a9700000000,
+ 0xaeb6d91c00000000, 0x66a147d300000000, 0xd86d4b1a00000000,
+ 0x107ad5d500000000, 0x0944065e00000000, 0xc153989100000000,
+ 0x7a3ed19200000000, 0xb2294f5d00000000, 0xab179cd600000000,
+ 0x6300021900000000, 0x6d1798e400000000, 0xa500062b00000000,
+ 0xbc3ed5a000000000, 0x74294b6f00000000, 0xcf44026c00000000,
+ 0x07539ca300000000, 0x1e6d4f2800000000, 0xd67ad1e700000000,
+ 0x68b6dd2e00000000, 0xa0a143e100000000, 0xb99f906a00000000,
+ 0x71880ea500000000, 0xcae547a600000000, 0x02f2d96900000000,
+ 0x1bcc0ae200000000, 0xd3db942d00000000, 0x265362ab00000000,
+ 0xee44fc6400000000, 0xf77a2fef00000000, 0x3f6db12000000000,
+ 0x8400f82300000000, 0x4c1766ec00000000, 0x5529b56700000000,
+ 0x9d3e2ba800000000, 0x23f2276100000000, 0xebe5b9ae00000000,
+ 0xf2db6a2500000000, 0x3accf4ea00000000, 0x81a1bde900000000,
+ 0x49b6232600000000, 0x5088f0ad00000000, 0x989f6e6200000000,
+ 0xfb9f6c7b00000000, 0x3388f2b400000000, 0x2ab6213f00000000,
+ 0xe2a1bff000000000, 0x59ccf6f300000000, 0x91db683c00000000,
+ 0x88e5bbb700000000, 0x40f2257800000000, 0xfe3e29b100000000,
+ 0x3629b77e00000000, 0x2f1764f500000000, 0xe700fa3a00000000,
+ 0x5c6db33900000000, 0x947a2df600000000, 0x8d44fe7d00000000,
+ 0x455360b200000000, 0xb0db963400000000, 0x78cc08fb00000000,
+ 0x61f2db7000000000, 0xa9e545bf00000000, 0x12880cbc00000000,
+ 0xda9f927300000000, 0xc3a141f800000000, 0x0bb6df3700000000,
+ 0xb57ad3fe00000000, 0x7d6d4d3100000000, 0x64539eba00000000,
+ 0xac44007500000000, 0x1729497600000000, 0xdf3ed7b900000000,
+ 0xc600043200000000, 0x0e179afd00000000, 0x9b28411200000000,
+ 0x533fdfdd00000000, 0x4a010c5600000000, 0x8216929900000000,
+ 0x397bdb9a00000000, 0xf16c455500000000, 0xe85296de00000000,
+ 0x2045081100000000, 0x9e8904d800000000, 0x569e9a1700000000,
+ 0x4fa0499c00000000, 0x87b7d75300000000, 0x3cda9e5000000000,
+ 0xf4cd009f00000000, 0xedf3d31400000000, 0x25e44ddb00000000,
+ 0xd06cbb5d00000000, 0x187b259200000000, 0x0145f61900000000,
+ 0xc95268d600000000, 0x723f21d500000000, 0xba28bf1a00000000,
+ 0xa3166c9100000000, 0x6b01f25e00000000, 0xd5cdfe9700000000,
+ 0x1dda605800000000, 0x04e4b3d300000000, 0xccf32d1c00000000,
+ 0x779e641f00000000, 0xbf89fad000000000, 0xa6b7295b00000000,
+ 0x6ea0b79400000000, 0x0da0b58d00000000, 0xc5b72b4200000000,
+ 0xdc89f8c900000000, 0x149e660600000000, 0xaff32f0500000000,
+ 0x67e4b1ca00000000, 0x7eda624100000000, 0xb6cdfc8e00000000,
+ 0x0801f04700000000, 0xc0166e8800000000, 0xd928bd0300000000,
+ 0x113f23cc00000000, 0xaa526acf00000000, 0x6245f40000000000,
+ 0x7b7b278b00000000, 0xb36cb94400000000, 0x46e44fc200000000,
+ 0x8ef3d10d00000000, 0x97cd028600000000, 0x5fda9c4900000000,
+ 0xe4b7d54a00000000, 0x2ca04b8500000000, 0x359e980e00000000,
+ 0xfd8906c100000000, 0x43450a0800000000, 0x8b5294c700000000,
+ 0x926c474c00000000, 0x5a7bd98300000000, 0xe116908000000000,
+ 0x29010e4f00000000, 0x303fddc400000000, 0xf828430b00000000,
+ 0xf63fd9f600000000, 0x3e28473900000000, 0x271694b200000000,
+ 0xef010a7d00000000, 0x546c437e00000000, 0x9c7bddb100000000,
+ 0x85450e3a00000000, 0x4d5290f500000000, 0xf39e9c3c00000000,
+ 0x3b8902f300000000, 0x22b7d17800000000, 0xeaa04fb700000000,
+ 0x51cd06b400000000, 0x99da987b00000000, 0x80e44bf000000000,
+ 0x48f3d53f00000000, 0xbd7b23b900000000, 0x756cbd7600000000,
+ 0x6c526efd00000000, 0xa445f03200000000, 0x1f28b93100000000,
+ 0xd73f27fe00000000, 0xce01f47500000000, 0x06166aba00000000,
+ 0xb8da667300000000, 0x70cdf8bc00000000, 0x69f32b3700000000,
+ 0xa1e4b5f800000000, 0x1a89fcfb00000000, 0xd29e623400000000,
+ 0xcba0b1bf00000000, 0x03b72f7000000000, 0x60b72d6900000000,
+ 0xa8a0b3a600000000, 0xb19e602d00000000, 0x7989fee200000000,
+ 0xc2e4b7e100000000, 0x0af3292e00000000, 0x13cdfaa500000000,
+ 0xdbda646a00000000, 0x651668a300000000, 0xad01f66c00000000,
+ 0xb43f25e700000000, 0x7c28bb2800000000, 0xc745f22b00000000,
+ 0x0f526ce400000000, 0x166cbf6f00000000, 0xde7b21a000000000,
+ 0x2bf3d72600000000, 0xe3e449e900000000, 0xfada9a6200000000,
+ 0x32cd04ad00000000, 0x89a04dae00000000, 0x41b7d36100000000,
+ 0x588900ea00000000, 0x909e9e2500000000, 0x2e5292ec00000000,
+ 0xe6450c2300000000, 0xff7bdfa800000000, 0x376c416700000000,
+ 0x8c01086400000000, 0x441696ab00000000, 0x5d28452000000000,
+ 0x953fdbef00000000},
+ {0x0000000000000000, 0x95d4709500000000, 0x6baf90f100000000,
+ 0xfe7be06400000000, 0x9758503800000000, 0x028c20ad00000000,
+ 0xfcf7c0c900000000, 0x6923b05c00000000, 0x2eb1a07000000000,
+ 0xbb65d0e500000000, 0x451e308100000000, 0xd0ca401400000000,
+ 0xb9e9f04800000000, 0x2c3d80dd00000000, 0xd24660b900000000,
+ 0x4792102c00000000, 0x5c6241e100000000, 0xc9b6317400000000,
+ 0x37cdd11000000000, 0xa219a18500000000, 0xcb3a11d900000000,
+ 0x5eee614c00000000, 0xa095812800000000, 0x3541f1bd00000000,
+ 0x72d3e19100000000, 0xe707910400000000, 0x197c716000000000,
+ 0x8ca801f500000000, 0xe58bb1a900000000, 0x705fc13c00000000,
+ 0x8e24215800000000, 0x1bf051cd00000000, 0xf9c2f31900000000,
+ 0x6c16838c00000000, 0x926d63e800000000, 0x07b9137d00000000,
+ 0x6e9aa32100000000, 0xfb4ed3b400000000, 0x053533d000000000,
+ 0x90e1434500000000, 0xd773536900000000, 0x42a723fc00000000,
+ 0xbcdcc39800000000, 0x2908b30d00000000, 0x402b035100000000,
+ 0xd5ff73c400000000, 0x2b8493a000000000, 0xbe50e33500000000,
+ 0xa5a0b2f800000000, 0x3074c26d00000000, 0xce0f220900000000,
+ 0x5bdb529c00000000, 0x32f8e2c000000000, 0xa72c925500000000,
+ 0x5957723100000000, 0xcc8302a400000000, 0x8b11128800000000,
+ 0x1ec5621d00000000, 0xe0be827900000000, 0x756af2ec00000000,
+ 0x1c4942b000000000, 0x899d322500000000, 0x77e6d24100000000,
+ 0xe232a2d400000000, 0xf285e73300000000, 0x675197a600000000,
+ 0x992a77c200000000, 0x0cfe075700000000, 0x65ddb70b00000000,
+ 0xf009c79e00000000, 0x0e7227fa00000000, 0x9ba6576f00000000,
+ 0xdc34474300000000, 0x49e037d600000000, 0xb79bd7b200000000,
+ 0x224fa72700000000, 0x4b6c177b00000000, 0xdeb867ee00000000,
+ 0x20c3878a00000000, 0xb517f71f00000000, 0xaee7a6d200000000,
+ 0x3b33d64700000000, 0xc548362300000000, 0x509c46b600000000,
+ 0x39bff6ea00000000, 0xac6b867f00000000, 0x5210661b00000000,
+ 0xc7c4168e00000000, 0x805606a200000000, 0x1582763700000000,
+ 0xebf9965300000000, 0x7e2de6c600000000, 0x170e569a00000000,
+ 0x82da260f00000000, 0x7ca1c66b00000000, 0xe975b6fe00000000,
+ 0x0b47142a00000000, 0x9e9364bf00000000, 0x60e884db00000000,
+ 0xf53cf44e00000000, 0x9c1f441200000000, 0x09cb348700000000,
+ 0xf7b0d4e300000000, 0x6264a47600000000, 0x25f6b45a00000000,
+ 0xb022c4cf00000000, 0x4e5924ab00000000, 0xdb8d543e00000000,
+ 0xb2aee46200000000, 0x277a94f700000000, 0xd901749300000000,
+ 0x4cd5040600000000, 0x572555cb00000000, 0xc2f1255e00000000,
+ 0x3c8ac53a00000000, 0xa95eb5af00000000, 0xc07d05f300000000,
+ 0x55a9756600000000, 0xabd2950200000000, 0x3e06e59700000000,
+ 0x7994f5bb00000000, 0xec40852e00000000, 0x123b654a00000000,
+ 0x87ef15df00000000, 0xeecca58300000000, 0x7b18d51600000000,
+ 0x8563357200000000, 0x10b745e700000000, 0xe40bcf6700000000,
+ 0x71dfbff200000000, 0x8fa45f9600000000, 0x1a702f0300000000,
+ 0x73539f5f00000000, 0xe687efca00000000, 0x18fc0fae00000000,
+ 0x8d287f3b00000000, 0xcaba6f1700000000, 0x5f6e1f8200000000,
+ 0xa115ffe600000000, 0x34c18f7300000000, 0x5de23f2f00000000,
+ 0xc8364fba00000000, 0x364dafde00000000, 0xa399df4b00000000,
+ 0xb8698e8600000000, 0x2dbdfe1300000000, 0xd3c61e7700000000,
+ 0x46126ee200000000, 0x2f31debe00000000, 0xbae5ae2b00000000,
+ 0x449e4e4f00000000, 0xd14a3eda00000000, 0x96d82ef600000000,
+ 0x030c5e6300000000, 0xfd77be0700000000, 0x68a3ce9200000000,
+ 0x01807ece00000000, 0x94540e5b00000000, 0x6a2fee3f00000000,
+ 0xfffb9eaa00000000, 0x1dc93c7e00000000, 0x881d4ceb00000000,
+ 0x7666ac8f00000000, 0xe3b2dc1a00000000, 0x8a916c4600000000,
+ 0x1f451cd300000000, 0xe13efcb700000000, 0x74ea8c2200000000,
+ 0x33789c0e00000000, 0xa6acec9b00000000, 0x58d70cff00000000,
+ 0xcd037c6a00000000, 0xa420cc3600000000, 0x31f4bca300000000,
+ 0xcf8f5cc700000000, 0x5a5b2c5200000000, 0x41ab7d9f00000000,
+ 0xd47f0d0a00000000, 0x2a04ed6e00000000, 0xbfd09dfb00000000,
+ 0xd6f32da700000000, 0x43275d3200000000, 0xbd5cbd5600000000,
+ 0x2888cdc300000000, 0x6f1addef00000000, 0xfacead7a00000000,
+ 0x04b54d1e00000000, 0x91613d8b00000000, 0xf8428dd700000000,
+ 0x6d96fd4200000000, 0x93ed1d2600000000, 0x06396db300000000,
+ 0x168e285400000000, 0x835a58c100000000, 0x7d21b8a500000000,
+ 0xe8f5c83000000000, 0x81d6786c00000000, 0x140208f900000000,
+ 0xea79e89d00000000, 0x7fad980800000000, 0x383f882400000000,
+ 0xadebf8b100000000, 0x539018d500000000, 0xc644684000000000,
+ 0xaf67d81c00000000, 0x3ab3a88900000000, 0xc4c848ed00000000,
+ 0x511c387800000000, 0x4aec69b500000000, 0xdf38192000000000,
+ 0x2143f94400000000, 0xb49789d100000000, 0xddb4398d00000000,
+ 0x4860491800000000, 0xb61ba97c00000000, 0x23cfd9e900000000,
+ 0x645dc9c500000000, 0xf189b95000000000, 0x0ff2593400000000,
+ 0x9a2629a100000000, 0xf30599fd00000000, 0x66d1e96800000000,
+ 0x98aa090c00000000, 0x0d7e799900000000, 0xef4cdb4d00000000,
+ 0x7a98abd800000000, 0x84e34bbc00000000, 0x11373b2900000000,
+ 0x78148b7500000000, 0xedc0fbe000000000, 0x13bb1b8400000000,
+ 0x866f6b1100000000, 0xc1fd7b3d00000000, 0x54290ba800000000,
+ 0xaa52ebcc00000000, 0x3f869b5900000000, 0x56a52b0500000000,
+ 0xc3715b9000000000, 0x3d0abbf400000000, 0xa8decb6100000000,
+ 0xb32e9aac00000000, 0x26faea3900000000, 0xd8810a5d00000000,
+ 0x4d557ac800000000, 0x2476ca9400000000, 0xb1a2ba0100000000,
+ 0x4fd95a6500000000, 0xda0d2af000000000, 0x9d9f3adc00000000,
+ 0x084b4a4900000000, 0xf630aa2d00000000, 0x63e4dab800000000,
+ 0x0ac76ae400000000, 0x9f131a7100000000, 0x6168fa1500000000,
+ 0xf4bc8a8000000000},
+ {0x0000000000000000, 0x1f17f08000000000, 0x7f2891da00000000,
+ 0x603f615a00000000, 0xbf56536e00000000, 0xa041a3ee00000000,
+ 0xc07ec2b400000000, 0xdf69323400000000, 0x7eada6dc00000000,
+ 0x61ba565c00000000, 0x0185370600000000, 0x1e92c78600000000,
+ 0xc1fbf5b200000000, 0xdeec053200000000, 0xbed3646800000000,
+ 0xa1c494e800000000, 0xbd5c3c6200000000, 0xa24bcce200000000,
+ 0xc274adb800000000, 0xdd635d3800000000, 0x020a6f0c00000000,
+ 0x1d1d9f8c00000000, 0x7d22fed600000000, 0x62350e5600000000,
+ 0xc3f19abe00000000, 0xdce66a3e00000000, 0xbcd90b6400000000,
+ 0xa3cefbe400000000, 0x7ca7c9d000000000, 0x63b0395000000000,
+ 0x038f580a00000000, 0x1c98a88a00000000, 0x7ab978c400000000,
+ 0x65ae884400000000, 0x0591e91e00000000, 0x1a86199e00000000,
+ 0xc5ef2baa00000000, 0xdaf8db2a00000000, 0xbac7ba7000000000,
+ 0xa5d04af000000000, 0x0414de1800000000, 0x1b032e9800000000,
+ 0x7b3c4fc200000000, 0x642bbf4200000000, 0xbb428d7600000000,
+ 0xa4557df600000000, 0xc46a1cac00000000, 0xdb7dec2c00000000,
+ 0xc7e544a600000000, 0xd8f2b42600000000, 0xb8cdd57c00000000,
+ 0xa7da25fc00000000, 0x78b317c800000000, 0x67a4e74800000000,
+ 0x079b861200000000, 0x188c769200000000, 0xb948e27a00000000,
+ 0xa65f12fa00000000, 0xc66073a000000000, 0xd977832000000000,
+ 0x061eb11400000000, 0x1909419400000000, 0x793620ce00000000,
+ 0x6621d04e00000000, 0xb574805300000000, 0xaa6370d300000000,
+ 0xca5c118900000000, 0xd54be10900000000, 0x0a22d33d00000000,
+ 0x153523bd00000000, 0x750a42e700000000, 0x6a1db26700000000,
+ 0xcbd9268f00000000, 0xd4ced60f00000000, 0xb4f1b75500000000,
+ 0xabe647d500000000, 0x748f75e100000000, 0x6b98856100000000,
+ 0x0ba7e43b00000000, 0x14b014bb00000000, 0x0828bc3100000000,
+ 0x173f4cb100000000, 0x77002deb00000000, 0x6817dd6b00000000,
+ 0xb77eef5f00000000, 0xa8691fdf00000000, 0xc8567e8500000000,
+ 0xd7418e0500000000, 0x76851aed00000000, 0x6992ea6d00000000,
+ 0x09ad8b3700000000, 0x16ba7bb700000000, 0xc9d3498300000000,
+ 0xd6c4b90300000000, 0xb6fbd85900000000, 0xa9ec28d900000000,
+ 0xcfcdf89700000000, 0xd0da081700000000, 0xb0e5694d00000000,
+ 0xaff299cd00000000, 0x709babf900000000, 0x6f8c5b7900000000,
+ 0x0fb33a2300000000, 0x10a4caa300000000, 0xb1605e4b00000000,
+ 0xae77aecb00000000, 0xce48cf9100000000, 0xd15f3f1100000000,
+ 0x0e360d2500000000, 0x1121fda500000000, 0x711e9cff00000000,
+ 0x6e096c7f00000000, 0x7291c4f500000000, 0x6d86347500000000,
+ 0x0db9552f00000000, 0x12aea5af00000000, 0xcdc7979b00000000,
+ 0xd2d0671b00000000, 0xb2ef064100000000, 0xadf8f6c100000000,
+ 0x0c3c622900000000, 0x132b92a900000000, 0x7314f3f300000000,
+ 0x6c03037300000000, 0xb36a314700000000, 0xac7dc1c700000000,
+ 0xcc42a09d00000000, 0xd355501d00000000, 0x6ae900a700000000,
+ 0x75fef02700000000, 0x15c1917d00000000, 0x0ad661fd00000000,
+ 0xd5bf53c900000000, 0xcaa8a34900000000, 0xaa97c21300000000,
+ 0xb580329300000000, 0x1444a67b00000000, 0x0b5356fb00000000,
+ 0x6b6c37a100000000, 0x747bc72100000000, 0xab12f51500000000,
+ 0xb405059500000000, 0xd43a64cf00000000, 0xcb2d944f00000000,
+ 0xd7b53cc500000000, 0xc8a2cc4500000000, 0xa89dad1f00000000,
+ 0xb78a5d9f00000000, 0x68e36fab00000000, 0x77f49f2b00000000,
+ 0x17cbfe7100000000, 0x08dc0ef100000000, 0xa9189a1900000000,
+ 0xb60f6a9900000000, 0xd6300bc300000000, 0xc927fb4300000000,
+ 0x164ec97700000000, 0x095939f700000000, 0x696658ad00000000,
+ 0x7671a82d00000000, 0x1050786300000000, 0x0f4788e300000000,
+ 0x6f78e9b900000000, 0x706f193900000000, 0xaf062b0d00000000,
+ 0xb011db8d00000000, 0xd02ebad700000000, 0xcf394a5700000000,
+ 0x6efddebf00000000, 0x71ea2e3f00000000, 0x11d54f6500000000,
+ 0x0ec2bfe500000000, 0xd1ab8dd100000000, 0xcebc7d5100000000,
+ 0xae831c0b00000000, 0xb194ec8b00000000, 0xad0c440100000000,
+ 0xb21bb48100000000, 0xd224d5db00000000, 0xcd33255b00000000,
+ 0x125a176f00000000, 0x0d4de7ef00000000, 0x6d7286b500000000,
+ 0x7265763500000000, 0xd3a1e2dd00000000, 0xccb6125d00000000,
+ 0xac89730700000000, 0xb39e838700000000, 0x6cf7b1b300000000,
+ 0x73e0413300000000, 0x13df206900000000, 0x0cc8d0e900000000,
+ 0xdf9d80f400000000, 0xc08a707400000000, 0xa0b5112e00000000,
+ 0xbfa2e1ae00000000, 0x60cbd39a00000000, 0x7fdc231a00000000,
+ 0x1fe3424000000000, 0x00f4b2c000000000, 0xa130262800000000,
+ 0xbe27d6a800000000, 0xde18b7f200000000, 0xc10f477200000000,
+ 0x1e66754600000000, 0x017185c600000000, 0x614ee49c00000000,
+ 0x7e59141c00000000, 0x62c1bc9600000000, 0x7dd64c1600000000,
+ 0x1de92d4c00000000, 0x02feddcc00000000, 0xdd97eff800000000,
+ 0xc2801f7800000000, 0xa2bf7e2200000000, 0xbda88ea200000000,
+ 0x1c6c1a4a00000000, 0x037beaca00000000, 0x63448b9000000000,
+ 0x7c537b1000000000, 0xa33a492400000000, 0xbc2db9a400000000,
+ 0xdc12d8fe00000000, 0xc305287e00000000, 0xa524f83000000000,
+ 0xba3308b000000000, 0xda0c69ea00000000, 0xc51b996a00000000,
+ 0x1a72ab5e00000000, 0x05655bde00000000, 0x655a3a8400000000,
+ 0x7a4dca0400000000, 0xdb895eec00000000, 0xc49eae6c00000000,
+ 0xa4a1cf3600000000, 0xbbb63fb600000000, 0x64df0d8200000000,
+ 0x7bc8fd0200000000, 0x1bf79c5800000000, 0x04e06cd800000000,
+ 0x1878c45200000000, 0x076f34d200000000, 0x6750558800000000,
+ 0x7847a50800000000, 0xa72e973c00000000, 0xb83967bc00000000,
+ 0xd80606e600000000, 0xc711f66600000000, 0x66d5628e00000000,
+ 0x79c2920e00000000, 0x19fdf35400000000, 0x06ea03d400000000,
+ 0xd98331e000000000, 0xc694c16000000000, 0xa6aba03a00000000,
+ 0xb9bc50ba00000000},
+ {0x0000000000000000, 0xe2fd888d00000000, 0x85fd60c000000000,
+ 0x6700e84d00000000, 0x4bfdb05b00000000, 0xa90038d600000000,
+ 0xce00d09b00000000, 0x2cfd581600000000, 0x96fa61b700000000,
+ 0x7407e93a00000000, 0x1307017700000000, 0xf1fa89fa00000000,
+ 0xdd07d1ec00000000, 0x3ffa596100000000, 0x58fab12c00000000,
+ 0xba0739a100000000, 0x6df3b2b500000000, 0x8f0e3a3800000000,
+ 0xe80ed27500000000, 0x0af35af800000000, 0x260e02ee00000000,
+ 0xc4f38a6300000000, 0xa3f3622e00000000, 0x410eeaa300000000,
+ 0xfb09d30200000000, 0x19f45b8f00000000, 0x7ef4b3c200000000,
+ 0x9c093b4f00000000, 0xb0f4635900000000, 0x5209ebd400000000,
+ 0x3509039900000000, 0xd7f48b1400000000, 0x9be014b000000000,
+ 0x791d9c3d00000000, 0x1e1d747000000000, 0xfce0fcfd00000000,
+ 0xd01da4eb00000000, 0x32e02c6600000000, 0x55e0c42b00000000,
+ 0xb71d4ca600000000, 0x0d1a750700000000, 0xefe7fd8a00000000,
+ 0x88e715c700000000, 0x6a1a9d4a00000000, 0x46e7c55c00000000,
+ 0xa41a4dd100000000, 0xc31aa59c00000000, 0x21e72d1100000000,
+ 0xf613a60500000000, 0x14ee2e8800000000, 0x73eec6c500000000,
+ 0x91134e4800000000, 0xbdee165e00000000, 0x5f139ed300000000,
+ 0x3813769e00000000, 0xdaeefe1300000000, 0x60e9c7b200000000,
+ 0x82144f3f00000000, 0xe514a77200000000, 0x07e92fff00000000,
+ 0x2b1477e900000000, 0xc9e9ff6400000000, 0xaee9172900000000,
+ 0x4c149fa400000000, 0x77c758bb00000000, 0x953ad03600000000,
+ 0xf23a387b00000000, 0x10c7b0f600000000, 0x3c3ae8e000000000,
+ 0xdec7606d00000000, 0xb9c7882000000000, 0x5b3a00ad00000000,
+ 0xe13d390c00000000, 0x03c0b18100000000, 0x64c059cc00000000,
+ 0x863dd14100000000, 0xaac0895700000000, 0x483d01da00000000,
+ 0x2f3de99700000000, 0xcdc0611a00000000, 0x1a34ea0e00000000,
+ 0xf8c9628300000000, 0x9fc98ace00000000, 0x7d34024300000000,
+ 0x51c95a5500000000, 0xb334d2d800000000, 0xd4343a9500000000,
+ 0x36c9b21800000000, 0x8cce8bb900000000, 0x6e33033400000000,
+ 0x0933eb7900000000, 0xebce63f400000000, 0xc7333be200000000,
+ 0x25ceb36f00000000, 0x42ce5b2200000000, 0xa033d3af00000000,
+ 0xec274c0b00000000, 0x0edac48600000000, 0x69da2ccb00000000,
+ 0x8b27a44600000000, 0xa7dafc5000000000, 0x452774dd00000000,
+ 0x22279c9000000000, 0xc0da141d00000000, 0x7add2dbc00000000,
+ 0x9820a53100000000, 0xff204d7c00000000, 0x1dddc5f100000000,
+ 0x31209de700000000, 0xd3dd156a00000000, 0xb4ddfd2700000000,
+ 0x562075aa00000000, 0x81d4febe00000000, 0x6329763300000000,
+ 0x04299e7e00000000, 0xe6d416f300000000, 0xca294ee500000000,
+ 0x28d4c66800000000, 0x4fd42e2500000000, 0xad29a6a800000000,
+ 0x172e9f0900000000, 0xf5d3178400000000, 0x92d3ffc900000000,
+ 0x702e774400000000, 0x5cd32f5200000000, 0xbe2ea7df00000000,
+ 0xd92e4f9200000000, 0x3bd3c71f00000000, 0xaf88c0ad00000000,
+ 0x4d75482000000000, 0x2a75a06d00000000, 0xc88828e000000000,
+ 0xe47570f600000000, 0x0688f87b00000000, 0x6188103600000000,
+ 0x837598bb00000000, 0x3972a11a00000000, 0xdb8f299700000000,
+ 0xbc8fc1da00000000, 0x5e72495700000000, 0x728f114100000000,
+ 0x907299cc00000000, 0xf772718100000000, 0x158ff90c00000000,
+ 0xc27b721800000000, 0x2086fa9500000000, 0x478612d800000000,
+ 0xa57b9a5500000000, 0x8986c24300000000, 0x6b7b4ace00000000,
+ 0x0c7ba28300000000, 0xee862a0e00000000, 0x548113af00000000,
+ 0xb67c9b2200000000, 0xd17c736f00000000, 0x3381fbe200000000,
+ 0x1f7ca3f400000000, 0xfd812b7900000000, 0x9a81c33400000000,
+ 0x787c4bb900000000, 0x3468d41d00000000, 0xd6955c9000000000,
+ 0xb195b4dd00000000, 0x53683c5000000000, 0x7f95644600000000,
+ 0x9d68eccb00000000, 0xfa68048600000000, 0x18958c0b00000000,
+ 0xa292b5aa00000000, 0x406f3d2700000000, 0x276fd56a00000000,
+ 0xc5925de700000000, 0xe96f05f100000000, 0x0b928d7c00000000,
+ 0x6c92653100000000, 0x8e6fedbc00000000, 0x599b66a800000000,
+ 0xbb66ee2500000000, 0xdc66066800000000, 0x3e9b8ee500000000,
+ 0x1266d6f300000000, 0xf09b5e7e00000000, 0x979bb63300000000,
+ 0x75663ebe00000000, 0xcf61071f00000000, 0x2d9c8f9200000000,
+ 0x4a9c67df00000000, 0xa861ef5200000000, 0x849cb74400000000,
+ 0x66613fc900000000, 0x0161d78400000000, 0xe39c5f0900000000,
+ 0xd84f981600000000, 0x3ab2109b00000000, 0x5db2f8d600000000,
+ 0xbf4f705b00000000, 0x93b2284d00000000, 0x714fa0c000000000,
+ 0x164f488d00000000, 0xf4b2c00000000000, 0x4eb5f9a100000000,
+ 0xac48712c00000000, 0xcb48996100000000, 0x29b511ec00000000,
+ 0x054849fa00000000, 0xe7b5c17700000000, 0x80b5293a00000000,
+ 0x6248a1b700000000, 0xb5bc2aa300000000, 0x5741a22e00000000,
+ 0x30414a6300000000, 0xd2bcc2ee00000000, 0xfe419af800000000,
+ 0x1cbc127500000000, 0x7bbcfa3800000000, 0x994172b500000000,
+ 0x23464b1400000000, 0xc1bbc39900000000, 0xa6bb2bd400000000,
+ 0x4446a35900000000, 0x68bbfb4f00000000, 0x8a4673c200000000,
+ 0xed469b8f00000000, 0x0fbb130200000000, 0x43af8ca600000000,
+ 0xa152042b00000000, 0xc652ec6600000000, 0x24af64eb00000000,
+ 0x08523cfd00000000, 0xeaafb47000000000, 0x8daf5c3d00000000,
+ 0x6f52d4b000000000, 0xd555ed1100000000, 0x37a8659c00000000,
+ 0x50a88dd100000000, 0xb255055c00000000, 0x9ea85d4a00000000,
+ 0x7c55d5c700000000, 0x1b553d8a00000000, 0xf9a8b50700000000,
+ 0x2e5c3e1300000000, 0xcca1b69e00000000, 0xaba15ed300000000,
+ 0x495cd65e00000000, 0x65a18e4800000000, 0x875c06c500000000,
+ 0xe05cee8800000000, 0x02a1660500000000, 0xb8a65fa400000000,
+ 0x5a5bd72900000000, 0x3d5b3f6400000000, 0xdfa6b7e900000000,
+ 0xf35befff00000000, 0x11a6677200000000, 0x76a68f3f00000000,
+ 0x945b07b200000000},
+ {0x0000000000000000, 0xa90b894e00000000, 0x5217129d00000000,
+ 0xfb1c9bd300000000, 0xe52855e100000000, 0x4c23dcaf00000000,
+ 0xb73f477c00000000, 0x1e34ce3200000000, 0x8b57db1900000000,
+ 0x225c525700000000, 0xd940c98400000000, 0x704b40ca00000000,
+ 0x6e7f8ef800000000, 0xc77407b600000000, 0x3c689c6500000000,
+ 0x9563152b00000000, 0x16afb63300000000, 0xbfa43f7d00000000,
+ 0x44b8a4ae00000000, 0xedb32de000000000, 0xf387e3d200000000,
+ 0x5a8c6a9c00000000, 0xa190f14f00000000, 0x089b780100000000,
+ 0x9df86d2a00000000, 0x34f3e46400000000, 0xcfef7fb700000000,
+ 0x66e4f6f900000000, 0x78d038cb00000000, 0xd1dbb18500000000,
+ 0x2ac72a5600000000, 0x83cca31800000000, 0x2c5e6d6700000000,
+ 0x8555e42900000000, 0x7e497ffa00000000, 0xd742f6b400000000,
+ 0xc976388600000000, 0x607db1c800000000, 0x9b612a1b00000000,
+ 0x326aa35500000000, 0xa709b67e00000000, 0x0e023f3000000000,
+ 0xf51ea4e300000000, 0x5c152dad00000000, 0x4221e39f00000000,
+ 0xeb2a6ad100000000, 0x1036f10200000000, 0xb93d784c00000000,
+ 0x3af1db5400000000, 0x93fa521a00000000, 0x68e6c9c900000000,
+ 0xc1ed408700000000, 0xdfd98eb500000000, 0x76d207fb00000000,
+ 0x8dce9c2800000000, 0x24c5156600000000, 0xb1a6004d00000000,
+ 0x18ad890300000000, 0xe3b112d000000000, 0x4aba9b9e00000000,
+ 0x548e55ac00000000, 0xfd85dce200000000, 0x0699473100000000,
+ 0xaf92ce7f00000000, 0x58bcdace00000000, 0xf1b7538000000000,
+ 0x0aabc85300000000, 0xa3a0411d00000000, 0xbd948f2f00000000,
+ 0x149f066100000000, 0xef839db200000000, 0x468814fc00000000,
+ 0xd3eb01d700000000, 0x7ae0889900000000, 0x81fc134a00000000,
+ 0x28f79a0400000000, 0x36c3543600000000, 0x9fc8dd7800000000,
+ 0x64d446ab00000000, 0xcddfcfe500000000, 0x4e136cfd00000000,
+ 0xe718e5b300000000, 0x1c047e6000000000, 0xb50ff72e00000000,
+ 0xab3b391c00000000, 0x0230b05200000000, 0xf92c2b8100000000,
+ 0x5027a2cf00000000, 0xc544b7e400000000, 0x6c4f3eaa00000000,
+ 0x9753a57900000000, 0x3e582c3700000000, 0x206ce20500000000,
+ 0x89676b4b00000000, 0x727bf09800000000, 0xdb7079d600000000,
+ 0x74e2b7a900000000, 0xdde93ee700000000, 0x26f5a53400000000,
+ 0x8ffe2c7a00000000, 0x91cae24800000000, 0x38c16b0600000000,
+ 0xc3ddf0d500000000, 0x6ad6799b00000000, 0xffb56cb000000000,
+ 0x56bee5fe00000000, 0xada27e2d00000000, 0x04a9f76300000000,
+ 0x1a9d395100000000, 0xb396b01f00000000, 0x488a2bcc00000000,
+ 0xe181a28200000000, 0x624d019a00000000, 0xcb4688d400000000,
+ 0x305a130700000000, 0x99519a4900000000, 0x8765547b00000000,
+ 0x2e6edd3500000000, 0xd57246e600000000, 0x7c79cfa800000000,
+ 0xe91ada8300000000, 0x401153cd00000000, 0xbb0dc81e00000000,
+ 0x1206415000000000, 0x0c328f6200000000, 0xa539062c00000000,
+ 0x5e259dff00000000, 0xf72e14b100000000, 0xf17ec44600000000,
+ 0x58754d0800000000, 0xa369d6db00000000, 0x0a625f9500000000,
+ 0x145691a700000000, 0xbd5d18e900000000, 0x4641833a00000000,
+ 0xef4a0a7400000000, 0x7a291f5f00000000, 0xd322961100000000,
+ 0x283e0dc200000000, 0x8135848c00000000, 0x9f014abe00000000,
+ 0x360ac3f000000000, 0xcd16582300000000, 0x641dd16d00000000,
+ 0xe7d1727500000000, 0x4edafb3b00000000, 0xb5c660e800000000,
+ 0x1ccde9a600000000, 0x02f9279400000000, 0xabf2aeda00000000,
+ 0x50ee350900000000, 0xf9e5bc4700000000, 0x6c86a96c00000000,
+ 0xc58d202200000000, 0x3e91bbf100000000, 0x979a32bf00000000,
+ 0x89aefc8d00000000, 0x20a575c300000000, 0xdbb9ee1000000000,
+ 0x72b2675e00000000, 0xdd20a92100000000, 0x742b206f00000000,
+ 0x8f37bbbc00000000, 0x263c32f200000000, 0x3808fcc000000000,
+ 0x9103758e00000000, 0x6a1fee5d00000000, 0xc314671300000000,
+ 0x5677723800000000, 0xff7cfb7600000000, 0x046060a500000000,
+ 0xad6be9eb00000000, 0xb35f27d900000000, 0x1a54ae9700000000,
+ 0xe148354400000000, 0x4843bc0a00000000, 0xcb8f1f1200000000,
+ 0x6284965c00000000, 0x99980d8f00000000, 0x309384c100000000,
+ 0x2ea74af300000000, 0x87acc3bd00000000, 0x7cb0586e00000000,
+ 0xd5bbd12000000000, 0x40d8c40b00000000, 0xe9d34d4500000000,
+ 0x12cfd69600000000, 0xbbc45fd800000000, 0xa5f091ea00000000,
+ 0x0cfb18a400000000, 0xf7e7837700000000, 0x5eec0a3900000000,
+ 0xa9c21e8800000000, 0x00c997c600000000, 0xfbd50c1500000000,
+ 0x52de855b00000000, 0x4cea4b6900000000, 0xe5e1c22700000000,
+ 0x1efd59f400000000, 0xb7f6d0ba00000000, 0x2295c59100000000,
+ 0x8b9e4cdf00000000, 0x7082d70c00000000, 0xd9895e4200000000,
+ 0xc7bd907000000000, 0x6eb6193e00000000, 0x95aa82ed00000000,
+ 0x3ca10ba300000000, 0xbf6da8bb00000000, 0x166621f500000000,
+ 0xed7aba2600000000, 0x4471336800000000, 0x5a45fd5a00000000,
+ 0xf34e741400000000, 0x0852efc700000000, 0xa159668900000000,
+ 0x343a73a200000000, 0x9d31faec00000000, 0x662d613f00000000,
+ 0xcf26e87100000000, 0xd112264300000000, 0x7819af0d00000000,
+ 0x830534de00000000, 0x2a0ebd9000000000, 0x859c73ef00000000,
+ 0x2c97faa100000000, 0xd78b617200000000, 0x7e80e83c00000000,
+ 0x60b4260e00000000, 0xc9bfaf4000000000, 0x32a3349300000000,
+ 0x9ba8bddd00000000, 0x0ecba8f600000000, 0xa7c021b800000000,
+ 0x5cdcba6b00000000, 0xf5d7332500000000, 0xebe3fd1700000000,
+ 0x42e8745900000000, 0xb9f4ef8a00000000, 0x10ff66c400000000,
+ 0x9333c5dc00000000, 0x3a384c9200000000, 0xc124d74100000000,
+ 0x682f5e0f00000000, 0x761b903d00000000, 0xdf10197300000000,
+ 0x240c82a000000000, 0x8d070bee00000000, 0x18641ec500000000,
+ 0xb16f978b00000000, 0x4a730c5800000000, 0xe378851600000000,
+ 0xfd4c4b2400000000, 0x5447c26a00000000, 0xaf5b59b900000000,
+ 0x0650d0f700000000},
+ {0x0000000000000000, 0x479244af00000000, 0xcf22f88500000000,
+ 0x88b0bc2a00000000, 0xdf4381d000000000, 0x98d1c57f00000000,
+ 0x1061795500000000, 0x57f33dfa00000000, 0xff81737a00000000,
+ 0xb81337d500000000, 0x30a38bff00000000, 0x7731cf5000000000,
+ 0x20c2f2aa00000000, 0x6750b60500000000, 0xefe00a2f00000000,
+ 0xa8724e8000000000, 0xfe03e7f400000000, 0xb991a35b00000000,
+ 0x31211f7100000000, 0x76b35bde00000000, 0x2140662400000000,
+ 0x66d2228b00000000, 0xee629ea100000000, 0xa9f0da0e00000000,
+ 0x0182948e00000000, 0x4610d02100000000, 0xcea06c0b00000000,
+ 0x893228a400000000, 0xdec1155e00000000, 0x995351f100000000,
+ 0x11e3eddb00000000, 0x5671a97400000000, 0xbd01bf3200000000,
+ 0xfa93fb9d00000000, 0x722347b700000000, 0x35b1031800000000,
+ 0x62423ee200000000, 0x25d07a4d00000000, 0xad60c66700000000,
+ 0xeaf282c800000000, 0x4280cc4800000000, 0x051288e700000000,
+ 0x8da234cd00000000, 0xca30706200000000, 0x9dc34d9800000000,
+ 0xda51093700000000, 0x52e1b51d00000000, 0x1573f1b200000000,
+ 0x430258c600000000, 0x04901c6900000000, 0x8c20a04300000000,
+ 0xcbb2e4ec00000000, 0x9c41d91600000000, 0xdbd39db900000000,
+ 0x5363219300000000, 0x14f1653c00000000, 0xbc832bbc00000000,
+ 0xfb116f1300000000, 0x73a1d33900000000, 0x3433979600000000,
+ 0x63c0aa6c00000000, 0x2452eec300000000, 0xace252e900000000,
+ 0xeb70164600000000, 0x7a037e6500000000, 0x3d913aca00000000,
+ 0xb52186e000000000, 0xf2b3c24f00000000, 0xa540ffb500000000,
+ 0xe2d2bb1a00000000, 0x6a62073000000000, 0x2df0439f00000000,
+ 0x85820d1f00000000, 0xc21049b000000000, 0x4aa0f59a00000000,
+ 0x0d32b13500000000, 0x5ac18ccf00000000, 0x1d53c86000000000,
+ 0x95e3744a00000000, 0xd27130e500000000, 0x8400999100000000,
+ 0xc392dd3e00000000, 0x4b22611400000000, 0x0cb025bb00000000,
+ 0x5b43184100000000, 0x1cd15cee00000000, 0x9461e0c400000000,
+ 0xd3f3a46b00000000, 0x7b81eaeb00000000, 0x3c13ae4400000000,
+ 0xb4a3126e00000000, 0xf33156c100000000, 0xa4c26b3b00000000,
+ 0xe3502f9400000000, 0x6be093be00000000, 0x2c72d71100000000,
+ 0xc702c15700000000, 0x809085f800000000, 0x082039d200000000,
+ 0x4fb27d7d00000000, 0x1841408700000000, 0x5fd3042800000000,
+ 0xd763b80200000000, 0x90f1fcad00000000, 0x3883b22d00000000,
+ 0x7f11f68200000000, 0xf7a14aa800000000, 0xb0330e0700000000,
+ 0xe7c033fd00000000, 0xa052775200000000, 0x28e2cb7800000000,
+ 0x6f708fd700000000, 0x390126a300000000, 0x7e93620c00000000,
+ 0xf623de2600000000, 0xb1b19a8900000000, 0xe642a77300000000,
+ 0xa1d0e3dc00000000, 0x29605ff600000000, 0x6ef21b5900000000,
+ 0xc68055d900000000, 0x8112117600000000, 0x09a2ad5c00000000,
+ 0x4e30e9f300000000, 0x19c3d40900000000, 0x5e5190a600000000,
+ 0xd6e12c8c00000000, 0x9173682300000000, 0xf406fcca00000000,
+ 0xb394b86500000000, 0x3b24044f00000000, 0x7cb640e000000000,
+ 0x2b457d1a00000000, 0x6cd739b500000000, 0xe467859f00000000,
+ 0xa3f5c13000000000, 0x0b878fb000000000, 0x4c15cb1f00000000,
+ 0xc4a5773500000000, 0x8337339a00000000, 0xd4c40e6000000000,
+ 0x93564acf00000000, 0x1be6f6e500000000, 0x5c74b24a00000000,
+ 0x0a051b3e00000000, 0x4d975f9100000000, 0xc527e3bb00000000,
+ 0x82b5a71400000000, 0xd5469aee00000000, 0x92d4de4100000000,
+ 0x1a64626b00000000, 0x5df626c400000000, 0xf584684400000000,
+ 0xb2162ceb00000000, 0x3aa690c100000000, 0x7d34d46e00000000,
+ 0x2ac7e99400000000, 0x6d55ad3b00000000, 0xe5e5111100000000,
+ 0xa27755be00000000, 0x490743f800000000, 0x0e95075700000000,
+ 0x8625bb7d00000000, 0xc1b7ffd200000000, 0x9644c22800000000,
+ 0xd1d6868700000000, 0x59663aad00000000, 0x1ef47e0200000000,
+ 0xb686308200000000, 0xf114742d00000000, 0x79a4c80700000000,
+ 0x3e368ca800000000, 0x69c5b15200000000, 0x2e57f5fd00000000,
+ 0xa6e749d700000000, 0xe1750d7800000000, 0xb704a40c00000000,
+ 0xf096e0a300000000, 0x78265c8900000000, 0x3fb4182600000000,
+ 0x684725dc00000000, 0x2fd5617300000000, 0xa765dd5900000000,
+ 0xe0f799f600000000, 0x4885d77600000000, 0x0f1793d900000000,
+ 0x87a72ff300000000, 0xc0356b5c00000000, 0x97c656a600000000,
+ 0xd054120900000000, 0x58e4ae2300000000, 0x1f76ea8c00000000,
+ 0x8e0582af00000000, 0xc997c60000000000, 0x41277a2a00000000,
+ 0x06b53e8500000000, 0x5146037f00000000, 0x16d447d000000000,
+ 0x9e64fbfa00000000, 0xd9f6bf5500000000, 0x7184f1d500000000,
+ 0x3616b57a00000000, 0xbea6095000000000, 0xf9344dff00000000,
+ 0xaec7700500000000, 0xe95534aa00000000, 0x61e5888000000000,
+ 0x2677cc2f00000000, 0x7006655b00000000, 0x379421f400000000,
+ 0xbf249dde00000000, 0xf8b6d97100000000, 0xaf45e48b00000000,
+ 0xe8d7a02400000000, 0x60671c0e00000000, 0x27f558a100000000,
+ 0x8f87162100000000, 0xc815528e00000000, 0x40a5eea400000000,
+ 0x0737aa0b00000000, 0x50c497f100000000, 0x1756d35e00000000,
+ 0x9fe66f7400000000, 0xd8742bdb00000000, 0x33043d9d00000000,
+ 0x7496793200000000, 0xfc26c51800000000, 0xbbb481b700000000,
+ 0xec47bc4d00000000, 0xabd5f8e200000000, 0x236544c800000000,
+ 0x64f7006700000000, 0xcc854ee700000000, 0x8b170a4800000000,
+ 0x03a7b66200000000, 0x4435f2cd00000000, 0x13c6cf3700000000,
+ 0x54548b9800000000, 0xdce437b200000000, 0x9b76731d00000000,
+ 0xcd07da6900000000, 0x8a959ec600000000, 0x022522ec00000000,
+ 0x45b7664300000000, 0x12445bb900000000, 0x55d61f1600000000,
+ 0xdd66a33c00000000, 0x9af4e79300000000, 0x3286a91300000000,
+ 0x7514edbc00000000, 0xfda4519600000000, 0xba36153900000000,
+ 0xedc528c300000000, 0xaa576c6c00000000, 0x22e7d04600000000,
+ 0x657594e900000000}};
+
+#else /* W == 4 */
+
+local const z_crc_t FAR crc_braid_table[][256] = {
+ {0x00000000, 0x65673b46, 0xcace768c, 0xafa94dca, 0x4eedeb59,
+ 0x2b8ad01f, 0x84239dd5, 0xe144a693, 0x9ddbd6b2, 0xf8bcedf4,
+ 0x5715a03e, 0x32729b78, 0xd3363deb, 0xb65106ad, 0x19f84b67,
+ 0x7c9f7021, 0xe0c6ab25, 0x85a19063, 0x2a08dda9, 0x4f6fe6ef,
+ 0xae2b407c, 0xcb4c7b3a, 0x64e536f0, 0x01820db6, 0x7d1d7d97,
+ 0x187a46d1, 0xb7d30b1b, 0xd2b4305d, 0x33f096ce, 0x5697ad88,
+ 0xf93ee042, 0x9c59db04, 0x1afc500b, 0x7f9b6b4d, 0xd0322687,
+ 0xb5551dc1, 0x5411bb52, 0x31768014, 0x9edfcdde, 0xfbb8f698,
+ 0x872786b9, 0xe240bdff, 0x4de9f035, 0x288ecb73, 0xc9ca6de0,
+ 0xacad56a6, 0x03041b6c, 0x6663202a, 0xfa3afb2e, 0x9f5dc068,
+ 0x30f48da2, 0x5593b6e4, 0xb4d71077, 0xd1b02b31, 0x7e1966fb,
+ 0x1b7e5dbd, 0x67e12d9c, 0x028616da, 0xad2f5b10, 0xc8486056,
+ 0x290cc6c5, 0x4c6bfd83, 0xe3c2b049, 0x86a58b0f, 0x35f8a016,
+ 0x509f9b50, 0xff36d69a, 0x9a51eddc, 0x7b154b4f, 0x1e727009,
+ 0xb1db3dc3, 0xd4bc0685, 0xa82376a4, 0xcd444de2, 0x62ed0028,
+ 0x078a3b6e, 0xe6ce9dfd, 0x83a9a6bb, 0x2c00eb71, 0x4967d037,
+ 0xd53e0b33, 0xb0593075, 0x1ff07dbf, 0x7a9746f9, 0x9bd3e06a,
+ 0xfeb4db2c, 0x511d96e6, 0x347aada0, 0x48e5dd81, 0x2d82e6c7,
+ 0x822bab0d, 0xe74c904b, 0x060836d8, 0x636f0d9e, 0xccc64054,
+ 0xa9a17b12, 0x2f04f01d, 0x4a63cb5b, 0xe5ca8691, 0x80adbdd7,
+ 0x61e91b44, 0x048e2002, 0xab276dc8, 0xce40568e, 0xb2df26af,
+ 0xd7b81de9, 0x78115023, 0x1d766b65, 0xfc32cdf6, 0x9955f6b0,
+ 0x36fcbb7a, 0x539b803c, 0xcfc25b38, 0xaaa5607e, 0x050c2db4,
+ 0x606b16f2, 0x812fb061, 0xe4488b27, 0x4be1c6ed, 0x2e86fdab,
+ 0x52198d8a, 0x377eb6cc, 0x98d7fb06, 0xfdb0c040, 0x1cf466d3,
+ 0x79935d95, 0xd63a105f, 0xb35d2b19, 0x6bf1402c, 0x0e967b6a,
+ 0xa13f36a0, 0xc4580de6, 0x251cab75, 0x407b9033, 0xefd2ddf9,
+ 0x8ab5e6bf, 0xf62a969e, 0x934dadd8, 0x3ce4e012, 0x5983db54,
+ 0xb8c77dc7, 0xdda04681, 0x72090b4b, 0x176e300d, 0x8b37eb09,
+ 0xee50d04f, 0x41f99d85, 0x249ea6c3, 0xc5da0050, 0xa0bd3b16,
+ 0x0f1476dc, 0x6a734d9a, 0x16ec3dbb, 0x738b06fd, 0xdc224b37,
+ 0xb9457071, 0x5801d6e2, 0x3d66eda4, 0x92cfa06e, 0xf7a89b28,
+ 0x710d1027, 0x146a2b61, 0xbbc366ab, 0xdea45ded, 0x3fe0fb7e,
+ 0x5a87c038, 0xf52e8df2, 0x9049b6b4, 0xecd6c695, 0x89b1fdd3,
+ 0x2618b019, 0x437f8b5f, 0xa23b2dcc, 0xc75c168a, 0x68f55b40,
+ 0x0d926006, 0x91cbbb02, 0xf4ac8044, 0x5b05cd8e, 0x3e62f6c8,
+ 0xdf26505b, 0xba416b1d, 0x15e826d7, 0x708f1d91, 0x0c106db0,
+ 0x697756f6, 0xc6de1b3c, 0xa3b9207a, 0x42fd86e9, 0x279abdaf,
+ 0x8833f065, 0xed54cb23, 0x5e09e03a, 0x3b6edb7c, 0x94c796b6,
+ 0xf1a0adf0, 0x10e40b63, 0x75833025, 0xda2a7def, 0xbf4d46a9,
+ 0xc3d23688, 0xa6b50dce, 0x091c4004, 0x6c7b7b42, 0x8d3fddd1,
+ 0xe858e697, 0x47f1ab5d, 0x2296901b, 0xbecf4b1f, 0xdba87059,
+ 0x74013d93, 0x116606d5, 0xf022a046, 0x95459b00, 0x3aecd6ca,
+ 0x5f8bed8c, 0x23149dad, 0x4673a6eb, 0xe9daeb21, 0x8cbdd067,
+ 0x6df976f4, 0x089e4db2, 0xa7370078, 0xc2503b3e, 0x44f5b031,
+ 0x21928b77, 0x8e3bc6bd, 0xeb5cfdfb, 0x0a185b68, 0x6f7f602e,
+ 0xc0d62de4, 0xa5b116a2, 0xd92e6683, 0xbc495dc5, 0x13e0100f,
+ 0x76872b49, 0x97c38dda, 0xf2a4b69c, 0x5d0dfb56, 0x386ac010,
+ 0xa4331b14, 0xc1542052, 0x6efd6d98, 0x0b9a56de, 0xeadef04d,
+ 0x8fb9cb0b, 0x201086c1, 0x4577bd87, 0x39e8cda6, 0x5c8ff6e0,
+ 0xf326bb2a, 0x9641806c, 0x770526ff, 0x12621db9, 0xbdcb5073,
+ 0xd8ac6b35},
+ {0x00000000, 0xd7e28058, 0x74b406f1, 0xa35686a9, 0xe9680de2,
+ 0x3e8a8dba, 0x9ddc0b13, 0x4a3e8b4b, 0x09a11d85, 0xde439ddd,
+ 0x7d151b74, 0xaaf79b2c, 0xe0c91067, 0x372b903f, 0x947d1696,
+ 0x439f96ce, 0x13423b0a, 0xc4a0bb52, 0x67f63dfb, 0xb014bda3,
+ 0xfa2a36e8, 0x2dc8b6b0, 0x8e9e3019, 0x597cb041, 0x1ae3268f,
+ 0xcd01a6d7, 0x6e57207e, 0xb9b5a026, 0xf38b2b6d, 0x2469ab35,
+ 0x873f2d9c, 0x50ddadc4, 0x26847614, 0xf166f64c, 0x523070e5,
+ 0x85d2f0bd, 0xcfec7bf6, 0x180efbae, 0xbb587d07, 0x6cbafd5f,
+ 0x2f256b91, 0xf8c7ebc9, 0x5b916d60, 0x8c73ed38, 0xc64d6673,
+ 0x11afe62b, 0xb2f96082, 0x651be0da, 0x35c64d1e, 0xe224cd46,
+ 0x41724bef, 0x9690cbb7, 0xdcae40fc, 0x0b4cc0a4, 0xa81a460d,
+ 0x7ff8c655, 0x3c67509b, 0xeb85d0c3, 0x48d3566a, 0x9f31d632,
+ 0xd50f5d79, 0x02eddd21, 0xa1bb5b88, 0x7659dbd0, 0x4d08ec28,
+ 0x9aea6c70, 0x39bcead9, 0xee5e6a81, 0xa460e1ca, 0x73826192,
+ 0xd0d4e73b, 0x07366763, 0x44a9f1ad, 0x934b71f5, 0x301df75c,
+ 0xe7ff7704, 0xadc1fc4f, 0x7a237c17, 0xd975fabe, 0x0e977ae6,
+ 0x5e4ad722, 0x89a8577a, 0x2afed1d3, 0xfd1c518b, 0xb722dac0,
+ 0x60c05a98, 0xc396dc31, 0x14745c69, 0x57ebcaa7, 0x80094aff,
+ 0x235fcc56, 0xf4bd4c0e, 0xbe83c745, 0x6961471d, 0xca37c1b4,
+ 0x1dd541ec, 0x6b8c9a3c, 0xbc6e1a64, 0x1f389ccd, 0xc8da1c95,
+ 0x82e497de, 0x55061786, 0xf650912f, 0x21b21177, 0x622d87b9,
+ 0xb5cf07e1, 0x16998148, 0xc17b0110, 0x8b458a5b, 0x5ca70a03,
+ 0xfff18caa, 0x28130cf2, 0x78cea136, 0xaf2c216e, 0x0c7aa7c7,
+ 0xdb98279f, 0x91a6acd4, 0x46442c8c, 0xe512aa25, 0x32f02a7d,
+ 0x716fbcb3, 0xa68d3ceb, 0x05dbba42, 0xd2393a1a, 0x9807b151,
+ 0x4fe53109, 0xecb3b7a0, 0x3b5137f8, 0x9a11d850, 0x4df35808,
+ 0xeea5dea1, 0x39475ef9, 0x7379d5b2, 0xa49b55ea, 0x07cdd343,
+ 0xd02f531b, 0x93b0c5d5, 0x4452458d, 0xe704c324, 0x30e6437c,
+ 0x7ad8c837, 0xad3a486f, 0x0e6ccec6, 0xd98e4e9e, 0x8953e35a,
+ 0x5eb16302, 0xfde7e5ab, 0x2a0565f3, 0x603beeb8, 0xb7d96ee0,
+ 0x148fe849, 0xc36d6811, 0x80f2fedf, 0x57107e87, 0xf446f82e,
+ 0x23a47876, 0x699af33d, 0xbe787365, 0x1d2ef5cc, 0xcacc7594,
+ 0xbc95ae44, 0x6b772e1c, 0xc821a8b5, 0x1fc328ed, 0x55fda3a6,
+ 0x821f23fe, 0x2149a557, 0xf6ab250f, 0xb534b3c1, 0x62d63399,
+ 0xc180b530, 0x16623568, 0x5c5cbe23, 0x8bbe3e7b, 0x28e8b8d2,
+ 0xff0a388a, 0xafd7954e, 0x78351516, 0xdb6393bf, 0x0c8113e7,
+ 0x46bf98ac, 0x915d18f4, 0x320b9e5d, 0xe5e91e05, 0xa67688cb,
+ 0x71940893, 0xd2c28e3a, 0x05200e62, 0x4f1e8529, 0x98fc0571,
+ 0x3baa83d8, 0xec480380, 0xd7193478, 0x00fbb420, 0xa3ad3289,
+ 0x744fb2d1, 0x3e71399a, 0xe993b9c2, 0x4ac53f6b, 0x9d27bf33,
+ 0xdeb829fd, 0x095aa9a5, 0xaa0c2f0c, 0x7deeaf54, 0x37d0241f,
+ 0xe032a447, 0x436422ee, 0x9486a2b6, 0xc45b0f72, 0x13b98f2a,
+ 0xb0ef0983, 0x670d89db, 0x2d330290, 0xfad182c8, 0x59870461,
+ 0x8e658439, 0xcdfa12f7, 0x1a1892af, 0xb94e1406, 0x6eac945e,
+ 0x24921f15, 0xf3709f4d, 0x502619e4, 0x87c499bc, 0xf19d426c,
+ 0x267fc234, 0x8529449d, 0x52cbc4c5, 0x18f54f8e, 0xcf17cfd6,
+ 0x6c41497f, 0xbba3c927, 0xf83c5fe9, 0x2fdedfb1, 0x8c885918,
+ 0x5b6ad940, 0x1154520b, 0xc6b6d253, 0x65e054fa, 0xb202d4a2,
+ 0xe2df7966, 0x353df93e, 0x966b7f97, 0x4189ffcf, 0x0bb77484,
+ 0xdc55f4dc, 0x7f037275, 0xa8e1f22d, 0xeb7e64e3, 0x3c9ce4bb,
+ 0x9fca6212, 0x4828e24a, 0x02166901, 0xd5f4e959, 0x76a26ff0,
+ 0xa140efa8},
+ {0x00000000, 0xef52b6e1, 0x05d46b83, 0xea86dd62, 0x0ba8d706,
+ 0xe4fa61e7, 0x0e7cbc85, 0xe12e0a64, 0x1751ae0c, 0xf80318ed,
+ 0x1285c58f, 0xfdd7736e, 0x1cf9790a, 0xf3abcfeb, 0x192d1289,
+ 0xf67fa468, 0x2ea35c18, 0xc1f1eaf9, 0x2b77379b, 0xc425817a,
+ 0x250b8b1e, 0xca593dff, 0x20dfe09d, 0xcf8d567c, 0x39f2f214,
+ 0xd6a044f5, 0x3c269997, 0xd3742f76, 0x325a2512, 0xdd0893f3,
+ 0x378e4e91, 0xd8dcf870, 0x5d46b830, 0xb2140ed1, 0x5892d3b3,
+ 0xb7c06552, 0x56ee6f36, 0xb9bcd9d7, 0x533a04b5, 0xbc68b254,
+ 0x4a17163c, 0xa545a0dd, 0x4fc37dbf, 0xa091cb5e, 0x41bfc13a,
+ 0xaeed77db, 0x446baab9, 0xab391c58, 0x73e5e428, 0x9cb752c9,
+ 0x76318fab, 0x9963394a, 0x784d332e, 0x971f85cf, 0x7d9958ad,
+ 0x92cbee4c, 0x64b44a24, 0x8be6fcc5, 0x616021a7, 0x8e329746,
+ 0x6f1c9d22, 0x804e2bc3, 0x6ac8f6a1, 0x859a4040, 0xba8d7060,
+ 0x55dfc681, 0xbf591be3, 0x500bad02, 0xb125a766, 0x5e771187,
+ 0xb4f1cce5, 0x5ba37a04, 0xaddcde6c, 0x428e688d, 0xa808b5ef,
+ 0x475a030e, 0xa674096a, 0x4926bf8b, 0xa3a062e9, 0x4cf2d408,
+ 0x942e2c78, 0x7b7c9a99, 0x91fa47fb, 0x7ea8f11a, 0x9f86fb7e,
+ 0x70d44d9f, 0x9a5290fd, 0x7500261c, 0x837f8274, 0x6c2d3495,
+ 0x86abe9f7, 0x69f95f16, 0x88d75572, 0x6785e393, 0x8d033ef1,
+ 0x62518810, 0xe7cbc850, 0x08997eb1, 0xe21fa3d3, 0x0d4d1532,
+ 0xec631f56, 0x0331a9b7, 0xe9b774d5, 0x06e5c234, 0xf09a665c,
+ 0x1fc8d0bd, 0xf54e0ddf, 0x1a1cbb3e, 0xfb32b15a, 0x146007bb,
+ 0xfee6dad9, 0x11b46c38, 0xc9689448, 0x263a22a9, 0xccbcffcb,
+ 0x23ee492a, 0xc2c0434e, 0x2d92f5af, 0xc71428cd, 0x28469e2c,
+ 0xde393a44, 0x316b8ca5, 0xdbed51c7, 0x34bfe726, 0xd591ed42,
+ 0x3ac35ba3, 0xd04586c1, 0x3f173020, 0xae6be681, 0x41395060,
+ 0xabbf8d02, 0x44ed3be3, 0xa5c33187, 0x4a918766, 0xa0175a04,
+ 0x4f45ece5, 0xb93a488d, 0x5668fe6c, 0xbcee230e, 0x53bc95ef,
+ 0xb2929f8b, 0x5dc0296a, 0xb746f408, 0x581442e9, 0x80c8ba99,
+ 0x6f9a0c78, 0x851cd11a, 0x6a4e67fb, 0x8b606d9f, 0x6432db7e,
+ 0x8eb4061c, 0x61e6b0fd, 0x97991495, 0x78cba274, 0x924d7f16,
+ 0x7d1fc9f7, 0x9c31c393, 0x73637572, 0x99e5a810, 0x76b71ef1,
+ 0xf32d5eb1, 0x1c7fe850, 0xf6f93532, 0x19ab83d3, 0xf88589b7,
+ 0x17d73f56, 0xfd51e234, 0x120354d5, 0xe47cf0bd, 0x0b2e465c,
+ 0xe1a89b3e, 0x0efa2ddf, 0xefd427bb, 0x0086915a, 0xea004c38,
+ 0x0552fad9, 0xdd8e02a9, 0x32dcb448, 0xd85a692a, 0x3708dfcb,
+ 0xd626d5af, 0x3974634e, 0xd3f2be2c, 0x3ca008cd, 0xcadfaca5,
+ 0x258d1a44, 0xcf0bc726, 0x205971c7, 0xc1777ba3, 0x2e25cd42,
+ 0xc4a31020, 0x2bf1a6c1, 0x14e696e1, 0xfbb42000, 0x1132fd62,
+ 0xfe604b83, 0x1f4e41e7, 0xf01cf706, 0x1a9a2a64, 0xf5c89c85,
+ 0x03b738ed, 0xece58e0c, 0x0663536e, 0xe931e58f, 0x081fefeb,
+ 0xe74d590a, 0x0dcb8468, 0xe2993289, 0x3a45caf9, 0xd5177c18,
+ 0x3f91a17a, 0xd0c3179b, 0x31ed1dff, 0xdebfab1e, 0x3439767c,
+ 0xdb6bc09d, 0x2d1464f5, 0xc246d214, 0x28c00f76, 0xc792b997,
+ 0x26bcb3f3, 0xc9ee0512, 0x2368d870, 0xcc3a6e91, 0x49a02ed1,
+ 0xa6f29830, 0x4c744552, 0xa326f3b3, 0x4208f9d7, 0xad5a4f36,
+ 0x47dc9254, 0xa88e24b5, 0x5ef180dd, 0xb1a3363c, 0x5b25eb5e,
+ 0xb4775dbf, 0x555957db, 0xba0be13a, 0x508d3c58, 0xbfdf8ab9,
+ 0x670372c9, 0x8851c428, 0x62d7194a, 0x8d85afab, 0x6caba5cf,
+ 0x83f9132e, 0x697fce4c, 0x862d78ad, 0x7052dcc5, 0x9f006a24,
+ 0x7586b746, 0x9ad401a7, 0x7bfa0bc3, 0x94a8bd22, 0x7e2e6040,
+ 0x917cd6a1},
+ {0x00000000, 0x87a6cb43, 0xd43c90c7, 0x539a5b84, 0x730827cf,
+ 0xf4aeec8c, 0xa734b708, 0x20927c4b, 0xe6104f9e, 0x61b684dd,
+ 0x322cdf59, 0xb58a141a, 0x95186851, 0x12bea312, 0x4124f896,
+ 0xc68233d5, 0x1751997d, 0x90f7523e, 0xc36d09ba, 0x44cbc2f9,
+ 0x6459beb2, 0xe3ff75f1, 0xb0652e75, 0x37c3e536, 0xf141d6e3,
+ 0x76e71da0, 0x257d4624, 0xa2db8d67, 0x8249f12c, 0x05ef3a6f,
+ 0x567561eb, 0xd1d3aaa8, 0x2ea332fa, 0xa905f9b9, 0xfa9fa23d,
+ 0x7d39697e, 0x5dab1535, 0xda0dde76, 0x899785f2, 0x0e314eb1,
+ 0xc8b37d64, 0x4f15b627, 0x1c8feda3, 0x9b2926e0, 0xbbbb5aab,
+ 0x3c1d91e8, 0x6f87ca6c, 0xe821012f, 0x39f2ab87, 0xbe5460c4,
+ 0xedce3b40, 0x6a68f003, 0x4afa8c48, 0xcd5c470b, 0x9ec61c8f,
+ 0x1960d7cc, 0xdfe2e419, 0x58442f5a, 0x0bde74de, 0x8c78bf9d,
+ 0xaceac3d6, 0x2b4c0895, 0x78d65311, 0xff709852, 0x5d4665f4,
+ 0xdae0aeb7, 0x897af533, 0x0edc3e70, 0x2e4e423b, 0xa9e88978,
+ 0xfa72d2fc, 0x7dd419bf, 0xbb562a6a, 0x3cf0e129, 0x6f6abaad,
+ 0xe8cc71ee, 0xc85e0da5, 0x4ff8c6e6, 0x1c629d62, 0x9bc45621,
+ 0x4a17fc89, 0xcdb137ca, 0x9e2b6c4e, 0x198da70d, 0x391fdb46,
+ 0xbeb91005, 0xed234b81, 0x6a8580c2, 0xac07b317, 0x2ba17854,
+ 0x783b23d0, 0xff9de893, 0xdf0f94d8, 0x58a95f9b, 0x0b33041f,
+ 0x8c95cf5c, 0x73e5570e, 0xf4439c4d, 0xa7d9c7c9, 0x207f0c8a,
+ 0x00ed70c1, 0x874bbb82, 0xd4d1e006, 0x53772b45, 0x95f51890,
+ 0x1253d3d3, 0x41c98857, 0xc66f4314, 0xe6fd3f5f, 0x615bf41c,
+ 0x32c1af98, 0xb56764db, 0x64b4ce73, 0xe3120530, 0xb0885eb4,
+ 0x372e95f7, 0x17bce9bc, 0x901a22ff, 0xc380797b, 0x4426b238,
+ 0x82a481ed, 0x05024aae, 0x5698112a, 0xd13eda69, 0xf1aca622,
+ 0x760a6d61, 0x259036e5, 0xa236fda6, 0xba8ccbe8, 0x3d2a00ab,
+ 0x6eb05b2f, 0xe916906c, 0xc984ec27, 0x4e222764, 0x1db87ce0,
+ 0x9a1eb7a3, 0x5c9c8476, 0xdb3a4f35, 0x88a014b1, 0x0f06dff2,
+ 0x2f94a3b9, 0xa83268fa, 0xfba8337e, 0x7c0ef83d, 0xaddd5295,
+ 0x2a7b99d6, 0x79e1c252, 0xfe470911, 0xded5755a, 0x5973be19,
+ 0x0ae9e59d, 0x8d4f2ede, 0x4bcd1d0b, 0xcc6bd648, 0x9ff18dcc,
+ 0x1857468f, 0x38c53ac4, 0xbf63f187, 0xecf9aa03, 0x6b5f6140,
+ 0x942ff912, 0x13893251, 0x401369d5, 0xc7b5a296, 0xe727dedd,
+ 0x6081159e, 0x331b4e1a, 0xb4bd8559, 0x723fb68c, 0xf5997dcf,
+ 0xa603264b, 0x21a5ed08, 0x01379143, 0x86915a00, 0xd50b0184,
+ 0x52adcac7, 0x837e606f, 0x04d8ab2c, 0x5742f0a8, 0xd0e43beb,
+ 0xf07647a0, 0x77d08ce3, 0x244ad767, 0xa3ec1c24, 0x656e2ff1,
+ 0xe2c8e4b2, 0xb152bf36, 0x36f47475, 0x1666083e, 0x91c0c37d,
+ 0xc25a98f9, 0x45fc53ba, 0xe7caae1c, 0x606c655f, 0x33f63edb,
+ 0xb450f598, 0x94c289d3, 0x13644290, 0x40fe1914, 0xc758d257,
+ 0x01dae182, 0x867c2ac1, 0xd5e67145, 0x5240ba06, 0x72d2c64d,
+ 0xf5740d0e, 0xa6ee568a, 0x21489dc9, 0xf09b3761, 0x773dfc22,
+ 0x24a7a7a6, 0xa3016ce5, 0x839310ae, 0x0435dbed, 0x57af8069,
+ 0xd0094b2a, 0x168b78ff, 0x912db3bc, 0xc2b7e838, 0x4511237b,
+ 0x65835f30, 0xe2259473, 0xb1bfcff7, 0x361904b4, 0xc9699ce6,
+ 0x4ecf57a5, 0x1d550c21, 0x9af3c762, 0xba61bb29, 0x3dc7706a,
+ 0x6e5d2bee, 0xe9fbe0ad, 0x2f79d378, 0xa8df183b, 0xfb4543bf,
+ 0x7ce388fc, 0x5c71f4b7, 0xdbd73ff4, 0x884d6470, 0x0febaf33,
+ 0xde38059b, 0x599eced8, 0x0a04955c, 0x8da25e1f, 0xad302254,
+ 0x2a96e917, 0x790cb293, 0xfeaa79d0, 0x38284a05, 0xbf8e8146,
+ 0xec14dac2, 0x6bb21181, 0x4b206dca, 0xcc86a689, 0x9f1cfd0d,
+ 0x18ba364e}};
+
+local const z_word_t FAR crc_braid_big_table[][256] = {
+ {0x00000000, 0x43cba687, 0xc7903cd4, 0x845b9a53, 0xcf270873,
+ 0x8cecaef4, 0x08b734a7, 0x4b7c9220, 0x9e4f10e6, 0xdd84b661,
+ 0x59df2c32, 0x1a148ab5, 0x51681895, 0x12a3be12, 0x96f82441,
+ 0xd53382c6, 0x7d995117, 0x3e52f790, 0xba096dc3, 0xf9c2cb44,
+ 0xb2be5964, 0xf175ffe3, 0x752e65b0, 0x36e5c337, 0xe3d641f1,
+ 0xa01de776, 0x24467d25, 0x678ddba2, 0x2cf14982, 0x6f3aef05,
+ 0xeb617556, 0xa8aad3d1, 0xfa32a32e, 0xb9f905a9, 0x3da29ffa,
+ 0x7e69397d, 0x3515ab5d, 0x76de0dda, 0xf2859789, 0xb14e310e,
+ 0x647db3c8, 0x27b6154f, 0xa3ed8f1c, 0xe026299b, 0xab5abbbb,
+ 0xe8911d3c, 0x6cca876f, 0x2f0121e8, 0x87abf239, 0xc46054be,
+ 0x403bceed, 0x03f0686a, 0x488cfa4a, 0x0b475ccd, 0x8f1cc69e,
+ 0xccd76019, 0x19e4e2df, 0x5a2f4458, 0xde74de0b, 0x9dbf788c,
+ 0xd6c3eaac, 0x95084c2b, 0x1153d678, 0x529870ff, 0xf465465d,
+ 0xb7aee0da, 0x33f57a89, 0x703edc0e, 0x3b424e2e, 0x7889e8a9,
+ 0xfcd272fa, 0xbf19d47d, 0x6a2a56bb, 0x29e1f03c, 0xadba6a6f,
+ 0xee71cce8, 0xa50d5ec8, 0xe6c6f84f, 0x629d621c, 0x2156c49b,
+ 0x89fc174a, 0xca37b1cd, 0x4e6c2b9e, 0x0da78d19, 0x46db1f39,
+ 0x0510b9be, 0x814b23ed, 0xc280856a, 0x17b307ac, 0x5478a12b,
+ 0xd0233b78, 0x93e89dff, 0xd8940fdf, 0x9b5fa958, 0x1f04330b,
+ 0x5ccf958c, 0x0e57e573, 0x4d9c43f4, 0xc9c7d9a7, 0x8a0c7f20,
+ 0xc170ed00, 0x82bb4b87, 0x06e0d1d4, 0x452b7753, 0x9018f595,
+ 0xd3d35312, 0x5788c941, 0x14436fc6, 0x5f3ffde6, 0x1cf45b61,
+ 0x98afc132, 0xdb6467b5, 0x73ceb464, 0x300512e3, 0xb45e88b0,
+ 0xf7952e37, 0xbce9bc17, 0xff221a90, 0x7b7980c3, 0x38b22644,
+ 0xed81a482, 0xae4a0205, 0x2a119856, 0x69da3ed1, 0x22a6acf1,
+ 0x616d0a76, 0xe5369025, 0xa6fd36a2, 0xe8cb8cba, 0xab002a3d,
+ 0x2f5bb06e, 0x6c9016e9, 0x27ec84c9, 0x6427224e, 0xe07cb81d,
+ 0xa3b71e9a, 0x76849c5c, 0x354f3adb, 0xb114a088, 0xf2df060f,
+ 0xb9a3942f, 0xfa6832a8, 0x7e33a8fb, 0x3df80e7c, 0x9552ddad,
+ 0xd6997b2a, 0x52c2e179, 0x110947fe, 0x5a75d5de, 0x19be7359,
+ 0x9de5e90a, 0xde2e4f8d, 0x0b1dcd4b, 0x48d66bcc, 0xcc8df19f,
+ 0x8f465718, 0xc43ac538, 0x87f163bf, 0x03aaf9ec, 0x40615f6b,
+ 0x12f92f94, 0x51328913, 0xd5691340, 0x96a2b5c7, 0xddde27e7,
+ 0x9e158160, 0x1a4e1b33, 0x5985bdb4, 0x8cb63f72, 0xcf7d99f5,
+ 0x4b2603a6, 0x08eda521, 0x43913701, 0x005a9186, 0x84010bd5,
+ 0xc7caad52, 0x6f607e83, 0x2cabd804, 0xa8f04257, 0xeb3be4d0,
+ 0xa04776f0, 0xe38cd077, 0x67d74a24, 0x241ceca3, 0xf12f6e65,
+ 0xb2e4c8e2, 0x36bf52b1, 0x7574f436, 0x3e086616, 0x7dc3c091,
+ 0xf9985ac2, 0xba53fc45, 0x1caecae7, 0x5f656c60, 0xdb3ef633,
+ 0x98f550b4, 0xd389c294, 0x90426413, 0x1419fe40, 0x57d258c7,
+ 0x82e1da01, 0xc12a7c86, 0x4571e6d5, 0x06ba4052, 0x4dc6d272,
+ 0x0e0d74f5, 0x8a56eea6, 0xc99d4821, 0x61379bf0, 0x22fc3d77,
+ 0xa6a7a724, 0xe56c01a3, 0xae109383, 0xeddb3504, 0x6980af57,
+ 0x2a4b09d0, 0xff788b16, 0xbcb32d91, 0x38e8b7c2, 0x7b231145,
+ 0x305f8365, 0x739425e2, 0xf7cfbfb1, 0xb4041936, 0xe69c69c9,
+ 0xa557cf4e, 0x210c551d, 0x62c7f39a, 0x29bb61ba, 0x6a70c73d,
+ 0xee2b5d6e, 0xade0fbe9, 0x78d3792f, 0x3b18dfa8, 0xbf4345fb,
+ 0xfc88e37c, 0xb7f4715c, 0xf43fd7db, 0x70644d88, 0x33afeb0f,
+ 0x9b0538de, 0xd8ce9e59, 0x5c95040a, 0x1f5ea28d, 0x542230ad,
+ 0x17e9962a, 0x93b20c79, 0xd079aafe, 0x054a2838, 0x46818ebf,
+ 0xc2da14ec, 0x8111b26b, 0xca6d204b, 0x89a686cc, 0x0dfd1c9f,
+ 0x4e36ba18},
+ {0x00000000, 0xe1b652ef, 0x836bd405, 0x62dd86ea, 0x06d7a80b,
+ 0xe761fae4, 0x85bc7c0e, 0x640a2ee1, 0x0cae5117, 0xed1803f8,
+ 0x8fc58512, 0x6e73d7fd, 0x0a79f91c, 0xebcfabf3, 0x89122d19,
+ 0x68a47ff6, 0x185ca32e, 0xf9eaf1c1, 0x9b37772b, 0x7a8125c4,
+ 0x1e8b0b25, 0xff3d59ca, 0x9de0df20, 0x7c568dcf, 0x14f2f239,
+ 0xf544a0d6, 0x9799263c, 0x762f74d3, 0x12255a32, 0xf39308dd,
+ 0x914e8e37, 0x70f8dcd8, 0x30b8465d, 0xd10e14b2, 0xb3d39258,
+ 0x5265c0b7, 0x366fee56, 0xd7d9bcb9, 0xb5043a53, 0x54b268bc,
+ 0x3c16174a, 0xdda045a5, 0xbf7dc34f, 0x5ecb91a0, 0x3ac1bf41,
+ 0xdb77edae, 0xb9aa6b44, 0x581c39ab, 0x28e4e573, 0xc952b79c,
+ 0xab8f3176, 0x4a396399, 0x2e334d78, 0xcf851f97, 0xad58997d,
+ 0x4ceecb92, 0x244ab464, 0xc5fce68b, 0xa7216061, 0x4697328e,
+ 0x229d1c6f, 0xc32b4e80, 0xa1f6c86a, 0x40409a85, 0x60708dba,
+ 0x81c6df55, 0xe31b59bf, 0x02ad0b50, 0x66a725b1, 0x8711775e,
+ 0xe5ccf1b4, 0x047aa35b, 0x6cdedcad, 0x8d688e42, 0xefb508a8,
+ 0x0e035a47, 0x6a0974a6, 0x8bbf2649, 0xe962a0a3, 0x08d4f24c,
+ 0x782c2e94, 0x999a7c7b, 0xfb47fa91, 0x1af1a87e, 0x7efb869f,
+ 0x9f4dd470, 0xfd90529a, 0x1c260075, 0x74827f83, 0x95342d6c,
+ 0xf7e9ab86, 0x165ff969, 0x7255d788, 0x93e38567, 0xf13e038d,
+ 0x10885162, 0x50c8cbe7, 0xb17e9908, 0xd3a31fe2, 0x32154d0d,
+ 0x561f63ec, 0xb7a93103, 0xd574b7e9, 0x34c2e506, 0x5c669af0,
+ 0xbdd0c81f, 0xdf0d4ef5, 0x3ebb1c1a, 0x5ab132fb, 0xbb076014,
+ 0xd9dae6fe, 0x386cb411, 0x489468c9, 0xa9223a26, 0xcbffbccc,
+ 0x2a49ee23, 0x4e43c0c2, 0xaff5922d, 0xcd2814c7, 0x2c9e4628,
+ 0x443a39de, 0xa58c6b31, 0xc751eddb, 0x26e7bf34, 0x42ed91d5,
+ 0xa35bc33a, 0xc18645d0, 0x2030173f, 0x81e66bae, 0x60503941,
+ 0x028dbfab, 0xe33bed44, 0x8731c3a5, 0x6687914a, 0x045a17a0,
+ 0xe5ec454f, 0x8d483ab9, 0x6cfe6856, 0x0e23eebc, 0xef95bc53,
+ 0x8b9f92b2, 0x6a29c05d, 0x08f446b7, 0xe9421458, 0x99bac880,
+ 0x780c9a6f, 0x1ad11c85, 0xfb674e6a, 0x9f6d608b, 0x7edb3264,
+ 0x1c06b48e, 0xfdb0e661, 0x95149997, 0x74a2cb78, 0x167f4d92,
+ 0xf7c91f7d, 0x93c3319c, 0x72756373, 0x10a8e599, 0xf11eb776,
+ 0xb15e2df3, 0x50e87f1c, 0x3235f9f6, 0xd383ab19, 0xb78985f8,
+ 0x563fd717, 0x34e251fd, 0xd5540312, 0xbdf07ce4, 0x5c462e0b,
+ 0x3e9ba8e1, 0xdf2dfa0e, 0xbb27d4ef, 0x5a918600, 0x384c00ea,
+ 0xd9fa5205, 0xa9028edd, 0x48b4dc32, 0x2a695ad8, 0xcbdf0837,
+ 0xafd526d6, 0x4e637439, 0x2cbef2d3, 0xcd08a03c, 0xa5acdfca,
+ 0x441a8d25, 0x26c70bcf, 0xc7715920, 0xa37b77c1, 0x42cd252e,
+ 0x2010a3c4, 0xc1a6f12b, 0xe196e614, 0x0020b4fb, 0x62fd3211,
+ 0x834b60fe, 0xe7414e1f, 0x06f71cf0, 0x642a9a1a, 0x859cc8f5,
+ 0xed38b703, 0x0c8ee5ec, 0x6e536306, 0x8fe531e9, 0xebef1f08,
+ 0x0a594de7, 0x6884cb0d, 0x893299e2, 0xf9ca453a, 0x187c17d5,
+ 0x7aa1913f, 0x9b17c3d0, 0xff1ded31, 0x1eabbfde, 0x7c763934,
+ 0x9dc06bdb, 0xf564142d, 0x14d246c2, 0x760fc028, 0x97b992c7,
+ 0xf3b3bc26, 0x1205eec9, 0x70d86823, 0x916e3acc, 0xd12ea049,
+ 0x3098f2a6, 0x5245744c, 0xb3f326a3, 0xd7f90842, 0x364f5aad,
+ 0x5492dc47, 0xb5248ea8, 0xdd80f15e, 0x3c36a3b1, 0x5eeb255b,
+ 0xbf5d77b4, 0xdb575955, 0x3ae10bba, 0x583c8d50, 0xb98adfbf,
+ 0xc9720367, 0x28c45188, 0x4a19d762, 0xabaf858d, 0xcfa5ab6c,
+ 0x2e13f983, 0x4cce7f69, 0xad782d86, 0xc5dc5270, 0x246a009f,
+ 0x46b78675, 0xa701d49a, 0xc30bfa7b, 0x22bda894, 0x40602e7e,
+ 0xa1d67c91},
+ {0x00000000, 0x5880e2d7, 0xf106b474, 0xa98656a3, 0xe20d68e9,
+ 0xba8d8a3e, 0x130bdc9d, 0x4b8b3e4a, 0x851da109, 0xdd9d43de,
+ 0x741b157d, 0x2c9bf7aa, 0x6710c9e0, 0x3f902b37, 0x96167d94,
+ 0xce969f43, 0x0a3b4213, 0x52bba0c4, 0xfb3df667, 0xa3bd14b0,
+ 0xe8362afa, 0xb0b6c82d, 0x19309e8e, 0x41b07c59, 0x8f26e31a,
+ 0xd7a601cd, 0x7e20576e, 0x26a0b5b9, 0x6d2b8bf3, 0x35ab6924,
+ 0x9c2d3f87, 0xc4addd50, 0x14768426, 0x4cf666f1, 0xe5703052,
+ 0xbdf0d285, 0xf67beccf, 0xaefb0e18, 0x077d58bb, 0x5ffdba6c,
+ 0x916b252f, 0xc9ebc7f8, 0x606d915b, 0x38ed738c, 0x73664dc6,
+ 0x2be6af11, 0x8260f9b2, 0xdae01b65, 0x1e4dc635, 0x46cd24e2,
+ 0xef4b7241, 0xb7cb9096, 0xfc40aedc, 0xa4c04c0b, 0x0d461aa8,
+ 0x55c6f87f, 0x9b50673c, 0xc3d085eb, 0x6a56d348, 0x32d6319f,
+ 0x795d0fd5, 0x21dded02, 0x885bbba1, 0xd0db5976, 0x28ec084d,
+ 0x706cea9a, 0xd9eabc39, 0x816a5eee, 0xcae160a4, 0x92618273,
+ 0x3be7d4d0, 0x63673607, 0xadf1a944, 0xf5714b93, 0x5cf71d30,
+ 0x0477ffe7, 0x4ffcc1ad, 0x177c237a, 0xbefa75d9, 0xe67a970e,
+ 0x22d74a5e, 0x7a57a889, 0xd3d1fe2a, 0x8b511cfd, 0xc0da22b7,
+ 0x985ac060, 0x31dc96c3, 0x695c7414, 0xa7caeb57, 0xff4a0980,
+ 0x56cc5f23, 0x0e4cbdf4, 0x45c783be, 0x1d476169, 0xb4c137ca,
+ 0xec41d51d, 0x3c9a8c6b, 0x641a6ebc, 0xcd9c381f, 0x951cdac8,
+ 0xde97e482, 0x86170655, 0x2f9150f6, 0x7711b221, 0xb9872d62,
+ 0xe107cfb5, 0x48819916, 0x10017bc1, 0x5b8a458b, 0x030aa75c,
+ 0xaa8cf1ff, 0xf20c1328, 0x36a1ce78, 0x6e212caf, 0xc7a77a0c,
+ 0x9f2798db, 0xd4aca691, 0x8c2c4446, 0x25aa12e5, 0x7d2af032,
+ 0xb3bc6f71, 0xeb3c8da6, 0x42badb05, 0x1a3a39d2, 0x51b10798,
+ 0x0931e54f, 0xa0b7b3ec, 0xf837513b, 0x50d8119a, 0x0858f34d,
+ 0xa1dea5ee, 0xf95e4739, 0xb2d57973, 0xea559ba4, 0x43d3cd07,
+ 0x1b532fd0, 0xd5c5b093, 0x8d455244, 0x24c304e7, 0x7c43e630,
+ 0x37c8d87a, 0x6f483aad, 0xc6ce6c0e, 0x9e4e8ed9, 0x5ae35389,
+ 0x0263b15e, 0xabe5e7fd, 0xf365052a, 0xb8ee3b60, 0xe06ed9b7,
+ 0x49e88f14, 0x11686dc3, 0xdffef280, 0x877e1057, 0x2ef846f4,
+ 0x7678a423, 0x3df39a69, 0x657378be, 0xccf52e1d, 0x9475ccca,
+ 0x44ae95bc, 0x1c2e776b, 0xb5a821c8, 0xed28c31f, 0xa6a3fd55,
+ 0xfe231f82, 0x57a54921, 0x0f25abf6, 0xc1b334b5, 0x9933d662,
+ 0x30b580c1, 0x68356216, 0x23be5c5c, 0x7b3ebe8b, 0xd2b8e828,
+ 0x8a380aff, 0x4e95d7af, 0x16153578, 0xbf9363db, 0xe713810c,
+ 0xac98bf46, 0xf4185d91, 0x5d9e0b32, 0x051ee9e5, 0xcb8876a6,
+ 0x93089471, 0x3a8ec2d2, 0x620e2005, 0x29851e4f, 0x7105fc98,
+ 0xd883aa3b, 0x800348ec, 0x783419d7, 0x20b4fb00, 0x8932ada3,
+ 0xd1b24f74, 0x9a39713e, 0xc2b993e9, 0x6b3fc54a, 0x33bf279d,
+ 0xfd29b8de, 0xa5a95a09, 0x0c2f0caa, 0x54afee7d, 0x1f24d037,
+ 0x47a432e0, 0xee226443, 0xb6a28694, 0x720f5bc4, 0x2a8fb913,
+ 0x8309efb0, 0xdb890d67, 0x9002332d, 0xc882d1fa, 0x61048759,
+ 0x3984658e, 0xf712facd, 0xaf92181a, 0x06144eb9, 0x5e94ac6e,
+ 0x151f9224, 0x4d9f70f3, 0xe4192650, 0xbc99c487, 0x6c429df1,
+ 0x34c27f26, 0x9d442985, 0xc5c4cb52, 0x8e4ff518, 0xd6cf17cf,
+ 0x7f49416c, 0x27c9a3bb, 0xe95f3cf8, 0xb1dfde2f, 0x1859888c,
+ 0x40d96a5b, 0x0b525411, 0x53d2b6c6, 0xfa54e065, 0xa2d402b2,
+ 0x6679dfe2, 0x3ef93d35, 0x977f6b96, 0xcfff8941, 0x8474b70b,
+ 0xdcf455dc, 0x7572037f, 0x2df2e1a8, 0xe3647eeb, 0xbbe49c3c,
+ 0x1262ca9f, 0x4ae22848, 0x01691602, 0x59e9f4d5, 0xf06fa276,
+ 0xa8ef40a1},
+ {0x00000000, 0x463b6765, 0x8c76ceca, 0xca4da9af, 0x59ebed4e,
+ 0x1fd08a2b, 0xd59d2384, 0x93a644e1, 0xb2d6db9d, 0xf4edbcf8,
+ 0x3ea01557, 0x789b7232, 0xeb3d36d3, 0xad0651b6, 0x674bf819,
+ 0x21709f7c, 0x25abc6e0, 0x6390a185, 0xa9dd082a, 0xefe66f4f,
+ 0x7c402bae, 0x3a7b4ccb, 0xf036e564, 0xb60d8201, 0x977d1d7d,
+ 0xd1467a18, 0x1b0bd3b7, 0x5d30b4d2, 0xce96f033, 0x88ad9756,
+ 0x42e03ef9, 0x04db599c, 0x0b50fc1a, 0x4d6b9b7f, 0x872632d0,
+ 0xc11d55b5, 0x52bb1154, 0x14807631, 0xdecddf9e, 0x98f6b8fb,
+ 0xb9862787, 0xffbd40e2, 0x35f0e94d, 0x73cb8e28, 0xe06dcac9,
+ 0xa656adac, 0x6c1b0403, 0x2a206366, 0x2efb3afa, 0x68c05d9f,
+ 0xa28df430, 0xe4b69355, 0x7710d7b4, 0x312bb0d1, 0xfb66197e,
+ 0xbd5d7e1b, 0x9c2de167, 0xda168602, 0x105b2fad, 0x566048c8,
+ 0xc5c60c29, 0x83fd6b4c, 0x49b0c2e3, 0x0f8ba586, 0x16a0f835,
+ 0x509b9f50, 0x9ad636ff, 0xdced519a, 0x4f4b157b, 0x0970721e,
+ 0xc33ddbb1, 0x8506bcd4, 0xa47623a8, 0xe24d44cd, 0x2800ed62,
+ 0x6e3b8a07, 0xfd9dcee6, 0xbba6a983, 0x71eb002c, 0x37d06749,
+ 0x330b3ed5, 0x753059b0, 0xbf7df01f, 0xf946977a, 0x6ae0d39b,
+ 0x2cdbb4fe, 0xe6961d51, 0xa0ad7a34, 0x81dde548, 0xc7e6822d,
+ 0x0dab2b82, 0x4b904ce7, 0xd8360806, 0x9e0d6f63, 0x5440c6cc,
+ 0x127ba1a9, 0x1df0042f, 0x5bcb634a, 0x9186cae5, 0xd7bdad80,
+ 0x441be961, 0x02208e04, 0xc86d27ab, 0x8e5640ce, 0xaf26dfb2,
+ 0xe91db8d7, 0x23501178, 0x656b761d, 0xf6cd32fc, 0xb0f65599,
+ 0x7abbfc36, 0x3c809b53, 0x385bc2cf, 0x7e60a5aa, 0xb42d0c05,
+ 0xf2166b60, 0x61b02f81, 0x278b48e4, 0xedc6e14b, 0xabfd862e,
+ 0x8a8d1952, 0xccb67e37, 0x06fbd798, 0x40c0b0fd, 0xd366f41c,
+ 0x955d9379, 0x5f103ad6, 0x192b5db3, 0x2c40f16b, 0x6a7b960e,
+ 0xa0363fa1, 0xe60d58c4, 0x75ab1c25, 0x33907b40, 0xf9ddd2ef,
+ 0xbfe6b58a, 0x9e962af6, 0xd8ad4d93, 0x12e0e43c, 0x54db8359,
+ 0xc77dc7b8, 0x8146a0dd, 0x4b0b0972, 0x0d306e17, 0x09eb378b,
+ 0x4fd050ee, 0x859df941, 0xc3a69e24, 0x5000dac5, 0x163bbda0,
+ 0xdc76140f, 0x9a4d736a, 0xbb3dec16, 0xfd068b73, 0x374b22dc,
+ 0x717045b9, 0xe2d60158, 0xa4ed663d, 0x6ea0cf92, 0x289ba8f7,
+ 0x27100d71, 0x612b6a14, 0xab66c3bb, 0xed5da4de, 0x7efbe03f,
+ 0x38c0875a, 0xf28d2ef5, 0xb4b64990, 0x95c6d6ec, 0xd3fdb189,
+ 0x19b01826, 0x5f8b7f43, 0xcc2d3ba2, 0x8a165cc7, 0x405bf568,
+ 0x0660920d, 0x02bbcb91, 0x4480acf4, 0x8ecd055b, 0xc8f6623e,
+ 0x5b5026df, 0x1d6b41ba, 0xd726e815, 0x911d8f70, 0xb06d100c,
+ 0xf6567769, 0x3c1bdec6, 0x7a20b9a3, 0xe986fd42, 0xafbd9a27,
+ 0x65f03388, 0x23cb54ed, 0x3ae0095e, 0x7cdb6e3b, 0xb696c794,
+ 0xf0ada0f1, 0x630be410, 0x25308375, 0xef7d2ada, 0xa9464dbf,
+ 0x8836d2c3, 0xce0db5a6, 0x04401c09, 0x427b7b6c, 0xd1dd3f8d,
+ 0x97e658e8, 0x5dabf147, 0x1b909622, 0x1f4bcfbe, 0x5970a8db,
+ 0x933d0174, 0xd5066611, 0x46a022f0, 0x009b4595, 0xcad6ec3a,
+ 0x8ced8b5f, 0xad9d1423, 0xeba67346, 0x21ebdae9, 0x67d0bd8c,
+ 0xf476f96d, 0xb24d9e08, 0x780037a7, 0x3e3b50c2, 0x31b0f544,
+ 0x778b9221, 0xbdc63b8e, 0xfbfd5ceb, 0x685b180a, 0x2e607f6f,
+ 0xe42dd6c0, 0xa216b1a5, 0x83662ed9, 0xc55d49bc, 0x0f10e013,
+ 0x492b8776, 0xda8dc397, 0x9cb6a4f2, 0x56fb0d5d, 0x10c06a38,
+ 0x141b33a4, 0x522054c1, 0x986dfd6e, 0xde569a0b, 0x4df0deea,
+ 0x0bcbb98f, 0xc1861020, 0x87bd7745, 0xa6cde839, 0xe0f68f5c,
+ 0x2abb26f3, 0x6c804196, 0xff260577, 0xb91d6212, 0x7350cbbd,
+ 0x356bacd8}};
+
+#endif
+
+#endif
+
+#if N == 6
+
+#if W == 8
+
+local const z_crc_t FAR crc_braid_table[][256] = {
+ {0x00000000, 0x3db1ecdc, 0x7b63d9b8, 0x46d23564, 0xf6c7b370,
+ 0xcb765fac, 0x8da46ac8, 0xb0158614, 0x36fe60a1, 0x0b4f8c7d,
+ 0x4d9db919, 0x702c55c5, 0xc039d3d1, 0xfd883f0d, 0xbb5a0a69,
+ 0x86ebe6b5, 0x6dfcc142, 0x504d2d9e, 0x169f18fa, 0x2b2ef426,
+ 0x9b3b7232, 0xa68a9eee, 0xe058ab8a, 0xdde94756, 0x5b02a1e3,
+ 0x66b34d3f, 0x2061785b, 0x1dd09487, 0xadc51293, 0x9074fe4f,
+ 0xd6a6cb2b, 0xeb1727f7, 0xdbf98284, 0xe6486e58, 0xa09a5b3c,
+ 0x9d2bb7e0, 0x2d3e31f4, 0x108fdd28, 0x565de84c, 0x6bec0490,
+ 0xed07e225, 0xd0b60ef9, 0x96643b9d, 0xabd5d741, 0x1bc05155,
+ 0x2671bd89, 0x60a388ed, 0x5d126431, 0xb60543c6, 0x8bb4af1a,
+ 0xcd669a7e, 0xf0d776a2, 0x40c2f0b6, 0x7d731c6a, 0x3ba1290e,
+ 0x0610c5d2, 0x80fb2367, 0xbd4acfbb, 0xfb98fadf, 0xc6291603,
+ 0x763c9017, 0x4b8d7ccb, 0x0d5f49af, 0x30eea573, 0x6c820349,
+ 0x5133ef95, 0x17e1daf1, 0x2a50362d, 0x9a45b039, 0xa7f45ce5,
+ 0xe1266981, 0xdc97855d, 0x5a7c63e8, 0x67cd8f34, 0x211fba50,
+ 0x1cae568c, 0xacbbd098, 0x910a3c44, 0xd7d80920, 0xea69e5fc,
+ 0x017ec20b, 0x3ccf2ed7, 0x7a1d1bb3, 0x47acf76f, 0xf7b9717b,
+ 0xca089da7, 0x8cdaa8c3, 0xb16b441f, 0x3780a2aa, 0x0a314e76,
+ 0x4ce37b12, 0x715297ce, 0xc14711da, 0xfcf6fd06, 0xba24c862,
+ 0x879524be, 0xb77b81cd, 0x8aca6d11, 0xcc185875, 0xf1a9b4a9,
+ 0x41bc32bd, 0x7c0dde61, 0x3adfeb05, 0x076e07d9, 0x8185e16c,
+ 0xbc340db0, 0xfae638d4, 0xc757d408, 0x7742521c, 0x4af3bec0,
+ 0x0c218ba4, 0x31906778, 0xda87408f, 0xe736ac53, 0xa1e49937,
+ 0x9c5575eb, 0x2c40f3ff, 0x11f11f23, 0x57232a47, 0x6a92c69b,
+ 0xec79202e, 0xd1c8ccf2, 0x971af996, 0xaaab154a, 0x1abe935e,
+ 0x270f7f82, 0x61dd4ae6, 0x5c6ca63a, 0xd9040692, 0xe4b5ea4e,
+ 0xa267df2a, 0x9fd633f6, 0x2fc3b5e2, 0x1272593e, 0x54a06c5a,
+ 0x69118086, 0xeffa6633, 0xd24b8aef, 0x9499bf8b, 0xa9285357,
+ 0x193dd543, 0x248c399f, 0x625e0cfb, 0x5fefe027, 0xb4f8c7d0,
+ 0x89492b0c, 0xcf9b1e68, 0xf22af2b4, 0x423f74a0, 0x7f8e987c,
+ 0x395cad18, 0x04ed41c4, 0x8206a771, 0xbfb74bad, 0xf9657ec9,
+ 0xc4d49215, 0x74c11401, 0x4970f8dd, 0x0fa2cdb9, 0x32132165,
+ 0x02fd8416, 0x3f4c68ca, 0x799e5dae, 0x442fb172, 0xf43a3766,
+ 0xc98bdbba, 0x8f59eede, 0xb2e80202, 0x3403e4b7, 0x09b2086b,
+ 0x4f603d0f, 0x72d1d1d3, 0xc2c457c7, 0xff75bb1b, 0xb9a78e7f,
+ 0x841662a3, 0x6f014554, 0x52b0a988, 0x14629cec, 0x29d37030,
+ 0x99c6f624, 0xa4771af8, 0xe2a52f9c, 0xdf14c340, 0x59ff25f5,
+ 0x644ec929, 0x229cfc4d, 0x1f2d1091, 0xaf389685, 0x92897a59,
+ 0xd45b4f3d, 0xe9eaa3e1, 0xb58605db, 0x8837e907, 0xcee5dc63,
+ 0xf35430bf, 0x4341b6ab, 0x7ef05a77, 0x38226f13, 0x059383cf,
+ 0x8378657a, 0xbec989a6, 0xf81bbcc2, 0xc5aa501e, 0x75bfd60a,
+ 0x480e3ad6, 0x0edc0fb2, 0x336de36e, 0xd87ac499, 0xe5cb2845,
+ 0xa3191d21, 0x9ea8f1fd, 0x2ebd77e9, 0x130c9b35, 0x55deae51,
+ 0x686f428d, 0xee84a438, 0xd33548e4, 0x95e77d80, 0xa856915c,
+ 0x18431748, 0x25f2fb94, 0x6320cef0, 0x5e91222c, 0x6e7f875f,
+ 0x53ce6b83, 0x151c5ee7, 0x28adb23b, 0x98b8342f, 0xa509d8f3,
+ 0xe3dbed97, 0xde6a014b, 0x5881e7fe, 0x65300b22, 0x23e23e46,
+ 0x1e53d29a, 0xae46548e, 0x93f7b852, 0xd5258d36, 0xe89461ea,
+ 0x0383461d, 0x3e32aac1, 0x78e09fa5, 0x45517379, 0xf544f56d,
+ 0xc8f519b1, 0x8e272cd5, 0xb396c009, 0x357d26bc, 0x08ccca60,
+ 0x4e1eff04, 0x73af13d8, 0xc3ba95cc, 0xfe0b7910, 0xb8d94c74,
+ 0x8568a0a8},
+ {0x00000000, 0x69790b65, 0xd2f216ca, 0xbb8b1daf, 0x7e952bd5,
+ 0x17ec20b0, 0xac673d1f, 0xc51e367a, 0xfd2a57aa, 0x94535ccf,
+ 0x2fd84160, 0x46a14a05, 0x83bf7c7f, 0xeac6771a, 0x514d6ab5,
+ 0x383461d0, 0x2125a915, 0x485ca270, 0xf3d7bfdf, 0x9aaeb4ba,
+ 0x5fb082c0, 0x36c989a5, 0x8d42940a, 0xe43b9f6f, 0xdc0ffebf,
+ 0xb576f5da, 0x0efde875, 0x6784e310, 0xa29ad56a, 0xcbe3de0f,
+ 0x7068c3a0, 0x1911c8c5, 0x424b522a, 0x2b32594f, 0x90b944e0,
+ 0xf9c04f85, 0x3cde79ff, 0x55a7729a, 0xee2c6f35, 0x87556450,
+ 0xbf610580, 0xd6180ee5, 0x6d93134a, 0x04ea182f, 0xc1f42e55,
+ 0xa88d2530, 0x1306389f, 0x7a7f33fa, 0x636efb3f, 0x0a17f05a,
+ 0xb19cedf5, 0xd8e5e690, 0x1dfbd0ea, 0x7482db8f, 0xcf09c620,
+ 0xa670cd45, 0x9e44ac95, 0xf73da7f0, 0x4cb6ba5f, 0x25cfb13a,
+ 0xe0d18740, 0x89a88c25, 0x3223918a, 0x5b5a9aef, 0x8496a454,
+ 0xedefaf31, 0x5664b29e, 0x3f1db9fb, 0xfa038f81, 0x937a84e4,
+ 0x28f1994b, 0x4188922e, 0x79bcf3fe, 0x10c5f89b, 0xab4ee534,
+ 0xc237ee51, 0x0729d82b, 0x6e50d34e, 0xd5dbcee1, 0xbca2c584,
+ 0xa5b30d41, 0xccca0624, 0x77411b8b, 0x1e3810ee, 0xdb262694,
+ 0xb25f2df1, 0x09d4305e, 0x60ad3b3b, 0x58995aeb, 0x31e0518e,
+ 0x8a6b4c21, 0xe3124744, 0x260c713e, 0x4f757a5b, 0xf4fe67f4,
+ 0x9d876c91, 0xc6ddf67e, 0xafa4fd1b, 0x142fe0b4, 0x7d56ebd1,
+ 0xb848ddab, 0xd131d6ce, 0x6abacb61, 0x03c3c004, 0x3bf7a1d4,
+ 0x528eaab1, 0xe905b71e, 0x807cbc7b, 0x45628a01, 0x2c1b8164,
+ 0x97909ccb, 0xfee997ae, 0xe7f85f6b, 0x8e81540e, 0x350a49a1,
+ 0x5c7342c4, 0x996d74be, 0xf0147fdb, 0x4b9f6274, 0x22e66911,
+ 0x1ad208c1, 0x73ab03a4, 0xc8201e0b, 0xa159156e, 0x64472314,
+ 0x0d3e2871, 0xb6b535de, 0xdfcc3ebb, 0xd25c4ee9, 0xbb25458c,
+ 0x00ae5823, 0x69d75346, 0xacc9653c, 0xc5b06e59, 0x7e3b73f6,
+ 0x17427893, 0x2f761943, 0x460f1226, 0xfd840f89, 0x94fd04ec,
+ 0x51e33296, 0x389a39f3, 0x8311245c, 0xea682f39, 0xf379e7fc,
+ 0x9a00ec99, 0x218bf136, 0x48f2fa53, 0x8deccc29, 0xe495c74c,
+ 0x5f1edae3, 0x3667d186, 0x0e53b056, 0x672abb33, 0xdca1a69c,
+ 0xb5d8adf9, 0x70c69b83, 0x19bf90e6, 0xa2348d49, 0xcb4d862c,
+ 0x90171cc3, 0xf96e17a6, 0x42e50a09, 0x2b9c016c, 0xee823716,
+ 0x87fb3c73, 0x3c7021dc, 0x55092ab9, 0x6d3d4b69, 0x0444400c,
+ 0xbfcf5da3, 0xd6b656c6, 0x13a860bc, 0x7ad16bd9, 0xc15a7676,
+ 0xa8237d13, 0xb132b5d6, 0xd84bbeb3, 0x63c0a31c, 0x0ab9a879,
+ 0xcfa79e03, 0xa6de9566, 0x1d5588c9, 0x742c83ac, 0x4c18e27c,
+ 0x2561e919, 0x9eeaf4b6, 0xf793ffd3, 0x328dc9a9, 0x5bf4c2cc,
+ 0xe07fdf63, 0x8906d406, 0x56caeabd, 0x3fb3e1d8, 0x8438fc77,
+ 0xed41f712, 0x285fc168, 0x4126ca0d, 0xfaadd7a2, 0x93d4dcc7,
+ 0xabe0bd17, 0xc299b672, 0x7912abdd, 0x106ba0b8, 0xd57596c2,
+ 0xbc0c9da7, 0x07878008, 0x6efe8b6d, 0x77ef43a8, 0x1e9648cd,
+ 0xa51d5562, 0xcc645e07, 0x097a687d, 0x60036318, 0xdb887eb7,
+ 0xb2f175d2, 0x8ac51402, 0xe3bc1f67, 0x583702c8, 0x314e09ad,
+ 0xf4503fd7, 0x9d2934b2, 0x26a2291d, 0x4fdb2278, 0x1481b897,
+ 0x7df8b3f2, 0xc673ae5d, 0xaf0aa538, 0x6a149342, 0x036d9827,
+ 0xb8e68588, 0xd19f8eed, 0xe9abef3d, 0x80d2e458, 0x3b59f9f7,
+ 0x5220f292, 0x973ec4e8, 0xfe47cf8d, 0x45ccd222, 0x2cb5d947,
+ 0x35a41182, 0x5cdd1ae7, 0xe7560748, 0x8e2f0c2d, 0x4b313a57,
+ 0x22483132, 0x99c32c9d, 0xf0ba27f8, 0xc88e4628, 0xa1f74d4d,
+ 0x1a7c50e2, 0x73055b87, 0xb61b6dfd, 0xdf626698, 0x64e97b37,
+ 0x0d907052},
+ {0x00000000, 0x7fc99b93, 0xff933726, 0x805aacb5, 0x2457680d,
+ 0x5b9ef39e, 0xdbc45f2b, 0xa40dc4b8, 0x48aed01a, 0x37674b89,
+ 0xb73de73c, 0xc8f47caf, 0x6cf9b817, 0x13302384, 0x936a8f31,
+ 0xeca314a2, 0x915da034, 0xee943ba7, 0x6ece9712, 0x11070c81,
+ 0xb50ac839, 0xcac353aa, 0x4a99ff1f, 0x3550648c, 0xd9f3702e,
+ 0xa63aebbd, 0x26604708, 0x59a9dc9b, 0xfda41823, 0x826d83b0,
+ 0x02372f05, 0x7dfeb496, 0xf9ca4629, 0x8603ddba, 0x0659710f,
+ 0x7990ea9c, 0xdd9d2e24, 0xa254b5b7, 0x220e1902, 0x5dc78291,
+ 0xb1649633, 0xcead0da0, 0x4ef7a115, 0x313e3a86, 0x9533fe3e,
+ 0xeafa65ad, 0x6aa0c918, 0x1569528b, 0x6897e61d, 0x175e7d8e,
+ 0x9704d13b, 0xe8cd4aa8, 0x4cc08e10, 0x33091583, 0xb353b936,
+ 0xcc9a22a5, 0x20393607, 0x5ff0ad94, 0xdfaa0121, 0xa0639ab2,
+ 0x046e5e0a, 0x7ba7c599, 0xfbfd692c, 0x8434f2bf, 0x28e58a13,
+ 0x572c1180, 0xd776bd35, 0xa8bf26a6, 0x0cb2e21e, 0x737b798d,
+ 0xf321d538, 0x8ce84eab, 0x604b5a09, 0x1f82c19a, 0x9fd86d2f,
+ 0xe011f6bc, 0x441c3204, 0x3bd5a997, 0xbb8f0522, 0xc4469eb1,
+ 0xb9b82a27, 0xc671b1b4, 0x462b1d01, 0x39e28692, 0x9def422a,
+ 0xe226d9b9, 0x627c750c, 0x1db5ee9f, 0xf116fa3d, 0x8edf61ae,
+ 0x0e85cd1b, 0x714c5688, 0xd5419230, 0xaa8809a3, 0x2ad2a516,
+ 0x551b3e85, 0xd12fcc3a, 0xaee657a9, 0x2ebcfb1c, 0x5175608f,
+ 0xf578a437, 0x8ab13fa4, 0x0aeb9311, 0x75220882, 0x99811c20,
+ 0xe64887b3, 0x66122b06, 0x19dbb095, 0xbdd6742d, 0xc21fefbe,
+ 0x4245430b, 0x3d8cd898, 0x40726c0e, 0x3fbbf79d, 0xbfe15b28,
+ 0xc028c0bb, 0x64250403, 0x1bec9f90, 0x9bb63325, 0xe47fa8b6,
+ 0x08dcbc14, 0x77152787, 0xf74f8b32, 0x888610a1, 0x2c8bd419,
+ 0x53424f8a, 0xd318e33f, 0xacd178ac, 0x51cb1426, 0x2e028fb5,
+ 0xae582300, 0xd191b893, 0x759c7c2b, 0x0a55e7b8, 0x8a0f4b0d,
+ 0xf5c6d09e, 0x1965c43c, 0x66ac5faf, 0xe6f6f31a, 0x993f6889,
+ 0x3d32ac31, 0x42fb37a2, 0xc2a19b17, 0xbd680084, 0xc096b412,
+ 0xbf5f2f81, 0x3f058334, 0x40cc18a7, 0xe4c1dc1f, 0x9b08478c,
+ 0x1b52eb39, 0x649b70aa, 0x88386408, 0xf7f1ff9b, 0x77ab532e,
+ 0x0862c8bd, 0xac6f0c05, 0xd3a69796, 0x53fc3b23, 0x2c35a0b0,
+ 0xa801520f, 0xd7c8c99c, 0x57926529, 0x285bfeba, 0x8c563a02,
+ 0xf39fa191, 0x73c50d24, 0x0c0c96b7, 0xe0af8215, 0x9f661986,
+ 0x1f3cb533, 0x60f52ea0, 0xc4f8ea18, 0xbb31718b, 0x3b6bdd3e,
+ 0x44a246ad, 0x395cf23b, 0x469569a8, 0xc6cfc51d, 0xb9065e8e,
+ 0x1d0b9a36, 0x62c201a5, 0xe298ad10, 0x9d513683, 0x71f22221,
+ 0x0e3bb9b2, 0x8e611507, 0xf1a88e94, 0x55a54a2c, 0x2a6cd1bf,
+ 0xaa367d0a, 0xd5ffe699, 0x792e9e35, 0x06e705a6, 0x86bda913,
+ 0xf9743280, 0x5d79f638, 0x22b06dab, 0xa2eac11e, 0xdd235a8d,
+ 0x31804e2f, 0x4e49d5bc, 0xce137909, 0xb1dae29a, 0x15d72622,
+ 0x6a1ebdb1, 0xea441104, 0x958d8a97, 0xe8733e01, 0x97baa592,
+ 0x17e00927, 0x682992b4, 0xcc24560c, 0xb3edcd9f, 0x33b7612a,
+ 0x4c7efab9, 0xa0ddee1b, 0xdf147588, 0x5f4ed93d, 0x208742ae,
+ 0x848a8616, 0xfb431d85, 0x7b19b130, 0x04d02aa3, 0x80e4d81c,
+ 0xff2d438f, 0x7f77ef3a, 0x00be74a9, 0xa4b3b011, 0xdb7a2b82,
+ 0x5b208737, 0x24e91ca4, 0xc84a0806, 0xb7839395, 0x37d93f20,
+ 0x4810a4b3, 0xec1d600b, 0x93d4fb98, 0x138e572d, 0x6c47ccbe,
+ 0x11b97828, 0x6e70e3bb, 0xee2a4f0e, 0x91e3d49d, 0x35ee1025,
+ 0x4a278bb6, 0xca7d2703, 0xb5b4bc90, 0x5917a832, 0x26de33a1,
+ 0xa6849f14, 0xd94d0487, 0x7d40c03f, 0x02895bac, 0x82d3f719,
+ 0xfd1a6c8a},
+ {0x00000000, 0xa396284c, 0x9c5d56d9, 0x3fcb7e95, 0xe3cbabf3,
+ 0x405d83bf, 0x7f96fd2a, 0xdc00d566, 0x1ce651a7, 0xbf7079eb,
+ 0x80bb077e, 0x232d2f32, 0xff2dfa54, 0x5cbbd218, 0x6370ac8d,
+ 0xc0e684c1, 0x39cca34e, 0x9a5a8b02, 0xa591f597, 0x0607dddb,
+ 0xda0708bd, 0x799120f1, 0x465a5e64, 0xe5cc7628, 0x252af2e9,
+ 0x86bcdaa5, 0xb977a430, 0x1ae18c7c, 0xc6e1591a, 0x65777156,
+ 0x5abc0fc3, 0xf92a278f, 0x7399469c, 0xd00f6ed0, 0xefc41045,
+ 0x4c523809, 0x9052ed6f, 0x33c4c523, 0x0c0fbbb6, 0xaf9993fa,
+ 0x6f7f173b, 0xcce93f77, 0xf32241e2, 0x50b469ae, 0x8cb4bcc8,
+ 0x2f229484, 0x10e9ea11, 0xb37fc25d, 0x4a55e5d2, 0xe9c3cd9e,
+ 0xd608b30b, 0x759e9b47, 0xa99e4e21, 0x0a08666d, 0x35c318f8,
+ 0x965530b4, 0x56b3b475, 0xf5259c39, 0xcaeee2ac, 0x6978cae0,
+ 0xb5781f86, 0x16ee37ca, 0x2925495f, 0x8ab36113, 0xe7328d38,
+ 0x44a4a574, 0x7b6fdbe1, 0xd8f9f3ad, 0x04f926cb, 0xa76f0e87,
+ 0x98a47012, 0x3b32585e, 0xfbd4dc9f, 0x5842f4d3, 0x67898a46,
+ 0xc41fa20a, 0x181f776c, 0xbb895f20, 0x844221b5, 0x27d409f9,
+ 0xdefe2e76, 0x7d68063a, 0x42a378af, 0xe13550e3, 0x3d358585,
+ 0x9ea3adc9, 0xa168d35c, 0x02fefb10, 0xc2187fd1, 0x618e579d,
+ 0x5e452908, 0xfdd30144, 0x21d3d422, 0x8245fc6e, 0xbd8e82fb,
+ 0x1e18aab7, 0x94abcba4, 0x373de3e8, 0x08f69d7d, 0xab60b531,
+ 0x77606057, 0xd4f6481b, 0xeb3d368e, 0x48ab1ec2, 0x884d9a03,
+ 0x2bdbb24f, 0x1410ccda, 0xb786e496, 0x6b8631f0, 0xc81019bc,
+ 0xf7db6729, 0x544d4f65, 0xad6768ea, 0x0ef140a6, 0x313a3e33,
+ 0x92ac167f, 0x4eacc319, 0xed3aeb55, 0xd2f195c0, 0x7167bd8c,
+ 0xb181394d, 0x12171101, 0x2ddc6f94, 0x8e4a47d8, 0x524a92be,
+ 0xf1dcbaf2, 0xce17c467, 0x6d81ec2b, 0x15141c31, 0xb682347d,
+ 0x89494ae8, 0x2adf62a4, 0xf6dfb7c2, 0x55499f8e, 0x6a82e11b,
+ 0xc914c957, 0x09f24d96, 0xaa6465da, 0x95af1b4f, 0x36393303,
+ 0xea39e665, 0x49afce29, 0x7664b0bc, 0xd5f298f0, 0x2cd8bf7f,
+ 0x8f4e9733, 0xb085e9a6, 0x1313c1ea, 0xcf13148c, 0x6c853cc0,
+ 0x534e4255, 0xf0d86a19, 0x303eeed8, 0x93a8c694, 0xac63b801,
+ 0x0ff5904d, 0xd3f5452b, 0x70636d67, 0x4fa813f2, 0xec3e3bbe,
+ 0x668d5aad, 0xc51b72e1, 0xfad00c74, 0x59462438, 0x8546f15e,
+ 0x26d0d912, 0x191ba787, 0xba8d8fcb, 0x7a6b0b0a, 0xd9fd2346,
+ 0xe6365dd3, 0x45a0759f, 0x99a0a0f9, 0x3a3688b5, 0x05fdf620,
+ 0xa66bde6c, 0x5f41f9e3, 0xfcd7d1af, 0xc31caf3a, 0x608a8776,
+ 0xbc8a5210, 0x1f1c7a5c, 0x20d704c9, 0x83412c85, 0x43a7a844,
+ 0xe0318008, 0xdffafe9d, 0x7c6cd6d1, 0xa06c03b7, 0x03fa2bfb,
+ 0x3c31556e, 0x9fa77d22, 0xf2269109, 0x51b0b945, 0x6e7bc7d0,
+ 0xcdedef9c, 0x11ed3afa, 0xb27b12b6, 0x8db06c23, 0x2e26446f,
+ 0xeec0c0ae, 0x4d56e8e2, 0x729d9677, 0xd10bbe3b, 0x0d0b6b5d,
+ 0xae9d4311, 0x91563d84, 0x32c015c8, 0xcbea3247, 0x687c1a0b,
+ 0x57b7649e, 0xf4214cd2, 0x282199b4, 0x8bb7b1f8, 0xb47ccf6d,
+ 0x17eae721, 0xd70c63e0, 0x749a4bac, 0x4b513539, 0xe8c71d75,
+ 0x34c7c813, 0x9751e05f, 0xa89a9eca, 0x0b0cb686, 0x81bfd795,
+ 0x2229ffd9, 0x1de2814c, 0xbe74a900, 0x62747c66, 0xc1e2542a,
+ 0xfe292abf, 0x5dbf02f3, 0x9d598632, 0x3ecfae7e, 0x0104d0eb,
+ 0xa292f8a7, 0x7e922dc1, 0xdd04058d, 0xe2cf7b18, 0x41595354,
+ 0xb87374db, 0x1be55c97, 0x242e2202, 0x87b80a4e, 0x5bb8df28,
+ 0xf82ef764, 0xc7e589f1, 0x6473a1bd, 0xa495257c, 0x07030d30,
+ 0x38c873a5, 0x9b5e5be9, 0x475e8e8f, 0xe4c8a6c3, 0xdb03d856,
+ 0x7895f01a},
+ {0x00000000, 0x2a283862, 0x545070c4, 0x7e7848a6, 0xa8a0e188,
+ 0x8288d9ea, 0xfcf0914c, 0xd6d8a92e, 0x8a30c551, 0xa018fd33,
+ 0xde60b595, 0xf4488df7, 0x229024d9, 0x08b81cbb, 0x76c0541d,
+ 0x5ce86c7f, 0xcf108ce3, 0xe538b481, 0x9b40fc27, 0xb168c445,
+ 0x67b06d6b, 0x4d985509, 0x33e01daf, 0x19c825cd, 0x452049b2,
+ 0x6f0871d0, 0x11703976, 0x3b580114, 0xed80a83a, 0xc7a89058,
+ 0xb9d0d8fe, 0x93f8e09c, 0x45501f87, 0x6f7827e5, 0x11006f43,
+ 0x3b285721, 0xedf0fe0f, 0xc7d8c66d, 0xb9a08ecb, 0x9388b6a9,
+ 0xcf60dad6, 0xe548e2b4, 0x9b30aa12, 0xb1189270, 0x67c03b5e,
+ 0x4de8033c, 0x33904b9a, 0x19b873f8, 0x8a409364, 0xa068ab06,
+ 0xde10e3a0, 0xf438dbc2, 0x22e072ec, 0x08c84a8e, 0x76b00228,
+ 0x5c983a4a, 0x00705635, 0x2a586e57, 0x542026f1, 0x7e081e93,
+ 0xa8d0b7bd, 0x82f88fdf, 0xfc80c779, 0xd6a8ff1b, 0x8aa03f0e,
+ 0xa088076c, 0xdef04fca, 0xf4d877a8, 0x2200de86, 0x0828e6e4,
+ 0x7650ae42, 0x5c789620, 0x0090fa5f, 0x2ab8c23d, 0x54c08a9b,
+ 0x7ee8b2f9, 0xa8301bd7, 0x821823b5, 0xfc606b13, 0xd6485371,
+ 0x45b0b3ed, 0x6f988b8f, 0x11e0c329, 0x3bc8fb4b, 0xed105265,
+ 0xc7386a07, 0xb94022a1, 0x93681ac3, 0xcf8076bc, 0xe5a84ede,
+ 0x9bd00678, 0xb1f83e1a, 0x67209734, 0x4d08af56, 0x3370e7f0,
+ 0x1958df92, 0xcff02089, 0xe5d818eb, 0x9ba0504d, 0xb188682f,
+ 0x6750c101, 0x4d78f963, 0x3300b1c5, 0x192889a7, 0x45c0e5d8,
+ 0x6fe8ddba, 0x1190951c, 0x3bb8ad7e, 0xed600450, 0xc7483c32,
+ 0xb9307494, 0x93184cf6, 0x00e0ac6a, 0x2ac89408, 0x54b0dcae,
+ 0x7e98e4cc, 0xa8404de2, 0x82687580, 0xfc103d26, 0xd6380544,
+ 0x8ad0693b, 0xa0f85159, 0xde8019ff, 0xf4a8219d, 0x227088b3,
+ 0x0858b0d1, 0x7620f877, 0x5c08c015, 0xce31785d, 0xe419403f,
+ 0x9a610899, 0xb04930fb, 0x669199d5, 0x4cb9a1b7, 0x32c1e911,
+ 0x18e9d173, 0x4401bd0c, 0x6e29856e, 0x1051cdc8, 0x3a79f5aa,
+ 0xeca15c84, 0xc68964e6, 0xb8f12c40, 0x92d91422, 0x0121f4be,
+ 0x2b09ccdc, 0x5571847a, 0x7f59bc18, 0xa9811536, 0x83a92d54,
+ 0xfdd165f2, 0xd7f95d90, 0x8b1131ef, 0xa139098d, 0xdf41412b,
+ 0xf5697949, 0x23b1d067, 0x0999e805, 0x77e1a0a3, 0x5dc998c1,
+ 0x8b6167da, 0xa1495fb8, 0xdf31171e, 0xf5192f7c, 0x23c18652,
+ 0x09e9be30, 0x7791f696, 0x5db9cef4, 0x0151a28b, 0x2b799ae9,
+ 0x5501d24f, 0x7f29ea2d, 0xa9f14303, 0x83d97b61, 0xfda133c7,
+ 0xd7890ba5, 0x4471eb39, 0x6e59d35b, 0x10219bfd, 0x3a09a39f,
+ 0xecd10ab1, 0xc6f932d3, 0xb8817a75, 0x92a94217, 0xce412e68,
+ 0xe469160a, 0x9a115eac, 0xb03966ce, 0x66e1cfe0, 0x4cc9f782,
+ 0x32b1bf24, 0x18998746, 0x44914753, 0x6eb97f31, 0x10c13797,
+ 0x3ae90ff5, 0xec31a6db, 0xc6199eb9, 0xb861d61f, 0x9249ee7d,
+ 0xcea18202, 0xe489ba60, 0x9af1f2c6, 0xb0d9caa4, 0x6601638a,
+ 0x4c295be8, 0x3251134e, 0x18792b2c, 0x8b81cbb0, 0xa1a9f3d2,
+ 0xdfd1bb74, 0xf5f98316, 0x23212a38, 0x0909125a, 0x77715afc,
+ 0x5d59629e, 0x01b10ee1, 0x2b993683, 0x55e17e25, 0x7fc94647,
+ 0xa911ef69, 0x8339d70b, 0xfd419fad, 0xd769a7cf, 0x01c158d4,
+ 0x2be960b6, 0x55912810, 0x7fb91072, 0xa961b95c, 0x8349813e,
+ 0xfd31c998, 0xd719f1fa, 0x8bf19d85, 0xa1d9a5e7, 0xdfa1ed41,
+ 0xf589d523, 0x23517c0d, 0x0979446f, 0x77010cc9, 0x5d2934ab,
+ 0xced1d437, 0xe4f9ec55, 0x9a81a4f3, 0xb0a99c91, 0x667135bf,
+ 0x4c590ddd, 0x3221457b, 0x18097d19, 0x44e11166, 0x6ec92904,
+ 0x10b161a2, 0x3a9959c0, 0xec41f0ee, 0xc669c88c, 0xb811802a,
+ 0x9239b848},
+ {0x00000000, 0x4713f6fb, 0x8e27edf6, 0xc9341b0d, 0xc73eddad,
+ 0x802d2b56, 0x4919305b, 0x0e0ac6a0, 0x550cbd1b, 0x121f4be0,
+ 0xdb2b50ed, 0x9c38a616, 0x923260b6, 0xd521964d, 0x1c158d40,
+ 0x5b067bbb, 0xaa197a36, 0xed0a8ccd, 0x243e97c0, 0x632d613b,
+ 0x6d27a79b, 0x2a345160, 0xe3004a6d, 0xa413bc96, 0xff15c72d,
+ 0xb80631d6, 0x71322adb, 0x3621dc20, 0x382b1a80, 0x7f38ec7b,
+ 0xb60cf776, 0xf11f018d, 0x8f43f22d, 0xc85004d6, 0x01641fdb,
+ 0x4677e920, 0x487d2f80, 0x0f6ed97b, 0xc65ac276, 0x8149348d,
+ 0xda4f4f36, 0x9d5cb9cd, 0x5468a2c0, 0x137b543b, 0x1d71929b,
+ 0x5a626460, 0x93567f6d, 0xd4458996, 0x255a881b, 0x62497ee0,
+ 0xab7d65ed, 0xec6e9316, 0xe26455b6, 0xa577a34d, 0x6c43b840,
+ 0x2b504ebb, 0x70563500, 0x3745c3fb, 0xfe71d8f6, 0xb9622e0d,
+ 0xb768e8ad, 0xf07b1e56, 0x394f055b, 0x7e5cf3a0, 0xc5f6e21b,
+ 0x82e514e0, 0x4bd10fed, 0x0cc2f916, 0x02c83fb6, 0x45dbc94d,
+ 0x8cefd240, 0xcbfc24bb, 0x90fa5f00, 0xd7e9a9fb, 0x1eddb2f6,
+ 0x59ce440d, 0x57c482ad, 0x10d77456, 0xd9e36f5b, 0x9ef099a0,
+ 0x6fef982d, 0x28fc6ed6, 0xe1c875db, 0xa6db8320, 0xa8d14580,
+ 0xefc2b37b, 0x26f6a876, 0x61e55e8d, 0x3ae32536, 0x7df0d3cd,
+ 0xb4c4c8c0, 0xf3d73e3b, 0xfdddf89b, 0xbace0e60, 0x73fa156d,
+ 0x34e9e396, 0x4ab51036, 0x0da6e6cd, 0xc492fdc0, 0x83810b3b,
+ 0x8d8bcd9b, 0xca983b60, 0x03ac206d, 0x44bfd696, 0x1fb9ad2d,
+ 0x58aa5bd6, 0x919e40db, 0xd68db620, 0xd8877080, 0x9f94867b,
+ 0x56a09d76, 0x11b36b8d, 0xe0ac6a00, 0xa7bf9cfb, 0x6e8b87f6,
+ 0x2998710d, 0x2792b7ad, 0x60814156, 0xa9b55a5b, 0xeea6aca0,
+ 0xb5a0d71b, 0xf2b321e0, 0x3b873aed, 0x7c94cc16, 0x729e0ab6,
+ 0x358dfc4d, 0xfcb9e740, 0xbbaa11bb, 0x509cc277, 0x178f348c,
+ 0xdebb2f81, 0x99a8d97a, 0x97a21fda, 0xd0b1e921, 0x1985f22c,
+ 0x5e9604d7, 0x05907f6c, 0x42838997, 0x8bb7929a, 0xcca46461,
+ 0xc2aea2c1, 0x85bd543a, 0x4c894f37, 0x0b9ab9cc, 0xfa85b841,
+ 0xbd964eba, 0x74a255b7, 0x33b1a34c, 0x3dbb65ec, 0x7aa89317,
+ 0xb39c881a, 0xf48f7ee1, 0xaf89055a, 0xe89af3a1, 0x21aee8ac,
+ 0x66bd1e57, 0x68b7d8f7, 0x2fa42e0c, 0xe6903501, 0xa183c3fa,
+ 0xdfdf305a, 0x98ccc6a1, 0x51f8ddac, 0x16eb2b57, 0x18e1edf7,
+ 0x5ff21b0c, 0x96c60001, 0xd1d5f6fa, 0x8ad38d41, 0xcdc07bba,
+ 0x04f460b7, 0x43e7964c, 0x4ded50ec, 0x0afea617, 0xc3cabd1a,
+ 0x84d94be1, 0x75c64a6c, 0x32d5bc97, 0xfbe1a79a, 0xbcf25161,
+ 0xb2f897c1, 0xf5eb613a, 0x3cdf7a37, 0x7bcc8ccc, 0x20caf777,
+ 0x67d9018c, 0xaeed1a81, 0xe9feec7a, 0xe7f42ada, 0xa0e7dc21,
+ 0x69d3c72c, 0x2ec031d7, 0x956a206c, 0xd279d697, 0x1b4dcd9a,
+ 0x5c5e3b61, 0x5254fdc1, 0x15470b3a, 0xdc731037, 0x9b60e6cc,
+ 0xc0669d77, 0x87756b8c, 0x4e417081, 0x0952867a, 0x075840da,
+ 0x404bb621, 0x897fad2c, 0xce6c5bd7, 0x3f735a5a, 0x7860aca1,
+ 0xb154b7ac, 0xf6474157, 0xf84d87f7, 0xbf5e710c, 0x766a6a01,
+ 0x31799cfa, 0x6a7fe741, 0x2d6c11ba, 0xe4580ab7, 0xa34bfc4c,
+ 0xad413aec, 0xea52cc17, 0x2366d71a, 0x647521e1, 0x1a29d241,
+ 0x5d3a24ba, 0x940e3fb7, 0xd31dc94c, 0xdd170fec, 0x9a04f917,
+ 0x5330e21a, 0x142314e1, 0x4f256f5a, 0x083699a1, 0xc10282ac,
+ 0x86117457, 0x881bb2f7, 0xcf08440c, 0x063c5f01, 0x412fa9fa,
+ 0xb030a877, 0xf7235e8c, 0x3e174581, 0x7904b37a, 0x770e75da,
+ 0x301d8321, 0xf929982c, 0xbe3a6ed7, 0xe53c156c, 0xa22fe397,
+ 0x6b1bf89a, 0x2c080e61, 0x2202c8c1, 0x65113e3a, 0xac252537,
+ 0xeb36d3cc},
+ {0x00000000, 0xa13984ee, 0x99020f9d, 0x383b8b73, 0xe975197b,
+ 0x484c9d95, 0x707716e6, 0xd14e9208, 0x099b34b7, 0xa8a2b059,
+ 0x90993b2a, 0x31a0bfc4, 0xe0ee2dcc, 0x41d7a922, 0x79ec2251,
+ 0xd8d5a6bf, 0x1336696e, 0xb20fed80, 0x8a3466f3, 0x2b0de21d,
+ 0xfa437015, 0x5b7af4fb, 0x63417f88, 0xc278fb66, 0x1aad5dd9,
+ 0xbb94d937, 0x83af5244, 0x2296d6aa, 0xf3d844a2, 0x52e1c04c,
+ 0x6ada4b3f, 0xcbe3cfd1, 0x266cd2dc, 0x87555632, 0xbf6edd41,
+ 0x1e5759af, 0xcf19cba7, 0x6e204f49, 0x561bc43a, 0xf72240d4,
+ 0x2ff7e66b, 0x8ece6285, 0xb6f5e9f6, 0x17cc6d18, 0xc682ff10,
+ 0x67bb7bfe, 0x5f80f08d, 0xfeb97463, 0x355abbb2, 0x94633f5c,
+ 0xac58b42f, 0x0d6130c1, 0xdc2fa2c9, 0x7d162627, 0x452dad54,
+ 0xe41429ba, 0x3cc18f05, 0x9df80beb, 0xa5c38098, 0x04fa0476,
+ 0xd5b4967e, 0x748d1290, 0x4cb699e3, 0xed8f1d0d, 0x4cd9a5b8,
+ 0xede02156, 0xd5dbaa25, 0x74e22ecb, 0xa5acbcc3, 0x0495382d,
+ 0x3caeb35e, 0x9d9737b0, 0x4542910f, 0xe47b15e1, 0xdc409e92,
+ 0x7d791a7c, 0xac378874, 0x0d0e0c9a, 0x353587e9, 0x940c0307,
+ 0x5fefccd6, 0xfed64838, 0xc6edc34b, 0x67d447a5, 0xb69ad5ad,
+ 0x17a35143, 0x2f98da30, 0x8ea15ede, 0x5674f861, 0xf74d7c8f,
+ 0xcf76f7fc, 0x6e4f7312, 0xbf01e11a, 0x1e3865f4, 0x2603ee87,
+ 0x873a6a69, 0x6ab57764, 0xcb8cf38a, 0xf3b778f9, 0x528efc17,
+ 0x83c06e1f, 0x22f9eaf1, 0x1ac26182, 0xbbfbe56c, 0x632e43d3,
+ 0xc217c73d, 0xfa2c4c4e, 0x5b15c8a0, 0x8a5b5aa8, 0x2b62de46,
+ 0x13595535, 0xb260d1db, 0x79831e0a, 0xd8ba9ae4, 0xe0811197,
+ 0x41b89579, 0x90f60771, 0x31cf839f, 0x09f408ec, 0xa8cd8c02,
+ 0x70182abd, 0xd121ae53, 0xe91a2520, 0x4823a1ce, 0x996d33c6,
+ 0x3854b728, 0x006f3c5b, 0xa156b8b5, 0x99b34b70, 0x388acf9e,
+ 0x00b144ed, 0xa188c003, 0x70c6520b, 0xd1ffd6e5, 0xe9c45d96,
+ 0x48fdd978, 0x90287fc7, 0x3111fb29, 0x092a705a, 0xa813f4b4,
+ 0x795d66bc, 0xd864e252, 0xe05f6921, 0x4166edcf, 0x8a85221e,
+ 0x2bbca6f0, 0x13872d83, 0xb2bea96d, 0x63f03b65, 0xc2c9bf8b,
+ 0xfaf234f8, 0x5bcbb016, 0x831e16a9, 0x22279247, 0x1a1c1934,
+ 0xbb259dda, 0x6a6b0fd2, 0xcb528b3c, 0xf369004f, 0x525084a1,
+ 0xbfdf99ac, 0x1ee61d42, 0x26dd9631, 0x87e412df, 0x56aa80d7,
+ 0xf7930439, 0xcfa88f4a, 0x6e910ba4, 0xb644ad1b, 0x177d29f5,
+ 0x2f46a286, 0x8e7f2668, 0x5f31b460, 0xfe08308e, 0xc633bbfd,
+ 0x670a3f13, 0xace9f0c2, 0x0dd0742c, 0x35ebff5f, 0x94d27bb1,
+ 0x459ce9b9, 0xe4a56d57, 0xdc9ee624, 0x7da762ca, 0xa572c475,
+ 0x044b409b, 0x3c70cbe8, 0x9d494f06, 0x4c07dd0e, 0xed3e59e0,
+ 0xd505d293, 0x743c567d, 0xd56aeec8, 0x74536a26, 0x4c68e155,
+ 0xed5165bb, 0x3c1ff7b3, 0x9d26735d, 0xa51df82e, 0x04247cc0,
+ 0xdcf1da7f, 0x7dc85e91, 0x45f3d5e2, 0xe4ca510c, 0x3584c304,
+ 0x94bd47ea, 0xac86cc99, 0x0dbf4877, 0xc65c87a6, 0x67650348,
+ 0x5f5e883b, 0xfe670cd5, 0x2f299edd, 0x8e101a33, 0xb62b9140,
+ 0x171215ae, 0xcfc7b311, 0x6efe37ff, 0x56c5bc8c, 0xf7fc3862,
+ 0x26b2aa6a, 0x878b2e84, 0xbfb0a5f7, 0x1e892119, 0xf3063c14,
+ 0x523fb8fa, 0x6a043389, 0xcb3db767, 0x1a73256f, 0xbb4aa181,
+ 0x83712af2, 0x2248ae1c, 0xfa9d08a3, 0x5ba48c4d, 0x639f073e,
+ 0xc2a683d0, 0x13e811d8, 0xb2d19536, 0x8aea1e45, 0x2bd39aab,
+ 0xe030557a, 0x4109d194, 0x79325ae7, 0xd80bde09, 0x09454c01,
+ 0xa87cc8ef, 0x9047439c, 0x317ec772, 0xe9ab61cd, 0x4892e523,
+ 0x70a96e50, 0xd190eabe, 0x00de78b6, 0xa1e7fc58, 0x99dc772b,
+ 0x38e5f3c5},
+ {0x00000000, 0xe81790a1, 0x0b5e2703, 0xe349b7a2, 0x16bc4e06,
+ 0xfeabdea7, 0x1de26905, 0xf5f5f9a4, 0x2d789c0c, 0xc56f0cad,
+ 0x2626bb0f, 0xce312bae, 0x3bc4d20a, 0xd3d342ab, 0x309af509,
+ 0xd88d65a8, 0x5af13818, 0xb2e6a8b9, 0x51af1f1b, 0xb9b88fba,
+ 0x4c4d761e, 0xa45ae6bf, 0x4713511d, 0xaf04c1bc, 0x7789a414,
+ 0x9f9e34b5, 0x7cd78317, 0x94c013b6, 0x6135ea12, 0x89227ab3,
+ 0x6a6bcd11, 0x827c5db0, 0xb5e27030, 0x5df5e091, 0xbebc5733,
+ 0x56abc792, 0xa35e3e36, 0x4b49ae97, 0xa8001935, 0x40178994,
+ 0x989aec3c, 0x708d7c9d, 0x93c4cb3f, 0x7bd35b9e, 0x8e26a23a,
+ 0x6631329b, 0x85788539, 0x6d6f1598, 0xef134828, 0x0704d889,
+ 0xe44d6f2b, 0x0c5aff8a, 0xf9af062e, 0x11b8968f, 0xf2f1212d,
+ 0x1ae6b18c, 0xc26bd424, 0x2a7c4485, 0xc935f327, 0x21226386,
+ 0xd4d79a22, 0x3cc00a83, 0xdf89bd21, 0x379e2d80, 0xb0b5e621,
+ 0x58a27680, 0xbbebc122, 0x53fc5183, 0xa609a827, 0x4e1e3886,
+ 0xad578f24, 0x45401f85, 0x9dcd7a2d, 0x75daea8c, 0x96935d2e,
+ 0x7e84cd8f, 0x8b71342b, 0x6366a48a, 0x802f1328, 0x68388389,
+ 0xea44de39, 0x02534e98, 0xe11af93a, 0x090d699b, 0xfcf8903f,
+ 0x14ef009e, 0xf7a6b73c, 0x1fb1279d, 0xc73c4235, 0x2f2bd294,
+ 0xcc626536, 0x2475f597, 0xd1800c33, 0x39979c92, 0xdade2b30,
+ 0x32c9bb91, 0x05579611, 0xed4006b0, 0x0e09b112, 0xe61e21b3,
+ 0x13ebd817, 0xfbfc48b6, 0x18b5ff14, 0xf0a26fb5, 0x282f0a1d,
+ 0xc0389abc, 0x23712d1e, 0xcb66bdbf, 0x3e93441b, 0xd684d4ba,
+ 0x35cd6318, 0xdddaf3b9, 0x5fa6ae09, 0xb7b13ea8, 0x54f8890a,
+ 0xbcef19ab, 0x491ae00f, 0xa10d70ae, 0x4244c70c, 0xaa5357ad,
+ 0x72de3205, 0x9ac9a2a4, 0x79801506, 0x919785a7, 0x64627c03,
+ 0x8c75eca2, 0x6f3c5b00, 0x872bcba1, 0xba1aca03, 0x520d5aa2,
+ 0xb144ed00, 0x59537da1, 0xaca68405, 0x44b114a4, 0xa7f8a306,
+ 0x4fef33a7, 0x9762560f, 0x7f75c6ae, 0x9c3c710c, 0x742be1ad,
+ 0x81de1809, 0x69c988a8, 0x8a803f0a, 0x6297afab, 0xe0ebf21b,
+ 0x08fc62ba, 0xebb5d518, 0x03a245b9, 0xf657bc1d, 0x1e402cbc,
+ 0xfd099b1e, 0x151e0bbf, 0xcd936e17, 0x2584feb6, 0xc6cd4914,
+ 0x2edad9b5, 0xdb2f2011, 0x3338b0b0, 0xd0710712, 0x386697b3,
+ 0x0ff8ba33, 0xe7ef2a92, 0x04a69d30, 0xecb10d91, 0x1944f435,
+ 0xf1536494, 0x121ad336, 0xfa0d4397, 0x2280263f, 0xca97b69e,
+ 0x29de013c, 0xc1c9919d, 0x343c6839, 0xdc2bf898, 0x3f624f3a,
+ 0xd775df9b, 0x5509822b, 0xbd1e128a, 0x5e57a528, 0xb6403589,
+ 0x43b5cc2d, 0xaba25c8c, 0x48ebeb2e, 0xa0fc7b8f, 0x78711e27,
+ 0x90668e86, 0x732f3924, 0x9b38a985, 0x6ecd5021, 0x86dac080,
+ 0x65937722, 0x8d84e783, 0x0aaf2c22, 0xe2b8bc83, 0x01f10b21,
+ 0xe9e69b80, 0x1c136224, 0xf404f285, 0x174d4527, 0xff5ad586,
+ 0x27d7b02e, 0xcfc0208f, 0x2c89972d, 0xc49e078c, 0x316bfe28,
+ 0xd97c6e89, 0x3a35d92b, 0xd222498a, 0x505e143a, 0xb849849b,
+ 0x5b003339, 0xb317a398, 0x46e25a3c, 0xaef5ca9d, 0x4dbc7d3f,
+ 0xa5abed9e, 0x7d268836, 0x95311897, 0x7678af35, 0x9e6f3f94,
+ 0x6b9ac630, 0x838d5691, 0x60c4e133, 0x88d37192, 0xbf4d5c12,
+ 0x575accb3, 0xb4137b11, 0x5c04ebb0, 0xa9f11214, 0x41e682b5,
+ 0xa2af3517, 0x4ab8a5b6, 0x9235c01e, 0x7a2250bf, 0x996be71d,
+ 0x717c77bc, 0x84898e18, 0x6c9e1eb9, 0x8fd7a91b, 0x67c039ba,
+ 0xe5bc640a, 0x0dabf4ab, 0xeee24309, 0x06f5d3a8, 0xf3002a0c,
+ 0x1b17baad, 0xf85e0d0f, 0x10499dae, 0xc8c4f806, 0x20d368a7,
+ 0xc39adf05, 0x2b8d4fa4, 0xde78b600, 0x366f26a1, 0xd5269103,
+ 0x3d3101a2}};
+
+local const z_word_t FAR crc_braid_big_table[][256] = {
+ {0x0000000000000000, 0xa19017e800000000, 0x03275e0b00000000,
+ 0xa2b749e300000000, 0x064ebc1600000000, 0xa7deabfe00000000,
+ 0x0569e21d00000000, 0xa4f9f5f500000000, 0x0c9c782d00000000,
+ 0xad0c6fc500000000, 0x0fbb262600000000, 0xae2b31ce00000000,
+ 0x0ad2c43b00000000, 0xab42d3d300000000, 0x09f59a3000000000,
+ 0xa8658dd800000000, 0x1838f15a00000000, 0xb9a8e6b200000000,
+ 0x1b1faf5100000000, 0xba8fb8b900000000, 0x1e764d4c00000000,
+ 0xbfe65aa400000000, 0x1d51134700000000, 0xbcc104af00000000,
+ 0x14a4897700000000, 0xb5349e9f00000000, 0x1783d77c00000000,
+ 0xb613c09400000000, 0x12ea356100000000, 0xb37a228900000000,
+ 0x11cd6b6a00000000, 0xb05d7c8200000000, 0x3070e2b500000000,
+ 0x91e0f55d00000000, 0x3357bcbe00000000, 0x92c7ab5600000000,
+ 0x363e5ea300000000, 0x97ae494b00000000, 0x351900a800000000,
+ 0x9489174000000000, 0x3cec9a9800000000, 0x9d7c8d7000000000,
+ 0x3fcbc49300000000, 0x9e5bd37b00000000, 0x3aa2268e00000000,
+ 0x9b32316600000000, 0x3985788500000000, 0x98156f6d00000000,
+ 0x284813ef00000000, 0x89d8040700000000, 0x2b6f4de400000000,
+ 0x8aff5a0c00000000, 0x2e06aff900000000, 0x8f96b81100000000,
+ 0x2d21f1f200000000, 0x8cb1e61a00000000, 0x24d46bc200000000,
+ 0x85447c2a00000000, 0x27f335c900000000, 0x8663222100000000,
+ 0x229ad7d400000000, 0x830ac03c00000000, 0x21bd89df00000000,
+ 0x802d9e3700000000, 0x21e6b5b000000000, 0x8076a25800000000,
+ 0x22c1ebbb00000000, 0x8351fc5300000000, 0x27a809a600000000,
+ 0x86381e4e00000000, 0x248f57ad00000000, 0x851f404500000000,
+ 0x2d7acd9d00000000, 0x8ceada7500000000, 0x2e5d939600000000,
+ 0x8fcd847e00000000, 0x2b34718b00000000, 0x8aa4666300000000,
+ 0x28132f8000000000, 0x8983386800000000, 0x39de44ea00000000,
+ 0x984e530200000000, 0x3af91ae100000000, 0x9b690d0900000000,
+ 0x3f90f8fc00000000, 0x9e00ef1400000000, 0x3cb7a6f700000000,
+ 0x9d27b11f00000000, 0x35423cc700000000, 0x94d22b2f00000000,
+ 0x366562cc00000000, 0x97f5752400000000, 0x330c80d100000000,
+ 0x929c973900000000, 0x302bdeda00000000, 0x91bbc93200000000,
+ 0x1196570500000000, 0xb00640ed00000000, 0x12b1090e00000000,
+ 0xb3211ee600000000, 0x17d8eb1300000000, 0xb648fcfb00000000,
+ 0x14ffb51800000000, 0xb56fa2f000000000, 0x1d0a2f2800000000,
+ 0xbc9a38c000000000, 0x1e2d712300000000, 0xbfbd66cb00000000,
+ 0x1b44933e00000000, 0xbad484d600000000, 0x1863cd3500000000,
+ 0xb9f3dadd00000000, 0x09aea65f00000000, 0xa83eb1b700000000,
+ 0x0a89f85400000000, 0xab19efbc00000000, 0x0fe01a4900000000,
+ 0xae700da100000000, 0x0cc7444200000000, 0xad5753aa00000000,
+ 0x0532de7200000000, 0xa4a2c99a00000000, 0x0615807900000000,
+ 0xa785979100000000, 0x037c626400000000, 0xa2ec758c00000000,
+ 0x005b3c6f00000000, 0xa1cb2b8700000000, 0x03ca1aba00000000,
+ 0xa25a0d5200000000, 0x00ed44b100000000, 0xa17d535900000000,
+ 0x0584a6ac00000000, 0xa414b14400000000, 0x06a3f8a700000000,
+ 0xa733ef4f00000000, 0x0f56629700000000, 0xaec6757f00000000,
+ 0x0c713c9c00000000, 0xade12b7400000000, 0x0918de8100000000,
+ 0xa888c96900000000, 0x0a3f808a00000000, 0xabaf976200000000,
+ 0x1bf2ebe000000000, 0xba62fc0800000000, 0x18d5b5eb00000000,
+ 0xb945a20300000000, 0x1dbc57f600000000, 0xbc2c401e00000000,
+ 0x1e9b09fd00000000, 0xbf0b1e1500000000, 0x176e93cd00000000,
+ 0xb6fe842500000000, 0x1449cdc600000000, 0xb5d9da2e00000000,
+ 0x11202fdb00000000, 0xb0b0383300000000, 0x120771d000000000,
+ 0xb397663800000000, 0x33baf80f00000000, 0x922aefe700000000,
+ 0x309da60400000000, 0x910db1ec00000000, 0x35f4441900000000,
+ 0x946453f100000000, 0x36d31a1200000000, 0x97430dfa00000000,
+ 0x3f26802200000000, 0x9eb697ca00000000, 0x3c01de2900000000,
+ 0x9d91c9c100000000, 0x39683c3400000000, 0x98f82bdc00000000,
+ 0x3a4f623f00000000, 0x9bdf75d700000000, 0x2b82095500000000,
+ 0x8a121ebd00000000, 0x28a5575e00000000, 0x893540b600000000,
+ 0x2dccb54300000000, 0x8c5ca2ab00000000, 0x2eebeb4800000000,
+ 0x8f7bfca000000000, 0x271e717800000000, 0x868e669000000000,
+ 0x24392f7300000000, 0x85a9389b00000000, 0x2150cd6e00000000,
+ 0x80c0da8600000000, 0x2277936500000000, 0x83e7848d00000000,
+ 0x222caf0a00000000, 0x83bcb8e200000000, 0x210bf10100000000,
+ 0x809be6e900000000, 0x2462131c00000000, 0x85f204f400000000,
+ 0x27454d1700000000, 0x86d55aff00000000, 0x2eb0d72700000000,
+ 0x8f20c0cf00000000, 0x2d97892c00000000, 0x8c079ec400000000,
+ 0x28fe6b3100000000, 0x896e7cd900000000, 0x2bd9353a00000000,
+ 0x8a4922d200000000, 0x3a145e5000000000, 0x9b8449b800000000,
+ 0x3933005b00000000, 0x98a317b300000000, 0x3c5ae24600000000,
+ 0x9dcaf5ae00000000, 0x3f7dbc4d00000000, 0x9eedaba500000000,
+ 0x3688267d00000000, 0x9718319500000000, 0x35af787600000000,
+ 0x943f6f9e00000000, 0x30c69a6b00000000, 0x91568d8300000000,
+ 0x33e1c46000000000, 0x9271d38800000000, 0x125c4dbf00000000,
+ 0xb3cc5a5700000000, 0x117b13b400000000, 0xb0eb045c00000000,
+ 0x1412f1a900000000, 0xb582e64100000000, 0x1735afa200000000,
+ 0xb6a5b84a00000000, 0x1ec0359200000000, 0xbf50227a00000000,
+ 0x1de76b9900000000, 0xbc777c7100000000, 0x188e898400000000,
+ 0xb91e9e6c00000000, 0x1ba9d78f00000000, 0xba39c06700000000,
+ 0x0a64bce500000000, 0xabf4ab0d00000000, 0x0943e2ee00000000,
+ 0xa8d3f50600000000, 0x0c2a00f300000000, 0xadba171b00000000,
+ 0x0f0d5ef800000000, 0xae9d491000000000, 0x06f8c4c800000000,
+ 0xa768d32000000000, 0x05df9ac300000000, 0xa44f8d2b00000000,
+ 0x00b678de00000000, 0xa1266f3600000000, 0x039126d500000000,
+ 0xa201313d00000000},
+ {0x0000000000000000, 0xee8439a100000000, 0x9d0f029900000000,
+ 0x738b3b3800000000, 0x7b1975e900000000, 0x959d4c4800000000,
+ 0xe616777000000000, 0x08924ed100000000, 0xb7349b0900000000,
+ 0x59b0a2a800000000, 0x2a3b999000000000, 0xc4bfa03100000000,
+ 0xcc2deee000000000, 0x22a9d74100000000, 0x5122ec7900000000,
+ 0xbfa6d5d800000000, 0x6e69361300000000, 0x80ed0fb200000000,
+ 0xf366348a00000000, 0x1de20d2b00000000, 0x157043fa00000000,
+ 0xfbf47a5b00000000, 0x887f416300000000, 0x66fb78c200000000,
+ 0xd95dad1a00000000, 0x37d994bb00000000, 0x4452af8300000000,
+ 0xaad6962200000000, 0xa244d8f300000000, 0x4cc0e15200000000,
+ 0x3f4bda6a00000000, 0xd1cfe3cb00000000, 0xdcd26c2600000000,
+ 0x3256558700000000, 0x41dd6ebf00000000, 0xaf59571e00000000,
+ 0xa7cb19cf00000000, 0x494f206e00000000, 0x3ac41b5600000000,
+ 0xd44022f700000000, 0x6be6f72f00000000, 0x8562ce8e00000000,
+ 0xf6e9f5b600000000, 0x186dcc1700000000, 0x10ff82c600000000,
+ 0xfe7bbb6700000000, 0x8df0805f00000000, 0x6374b9fe00000000,
+ 0xb2bb5a3500000000, 0x5c3f639400000000, 0x2fb458ac00000000,
+ 0xc130610d00000000, 0xc9a22fdc00000000, 0x2726167d00000000,
+ 0x54ad2d4500000000, 0xba2914e400000000, 0x058fc13c00000000,
+ 0xeb0bf89d00000000, 0x9880c3a500000000, 0x7604fa0400000000,
+ 0x7e96b4d500000000, 0x90128d7400000000, 0xe399b64c00000000,
+ 0x0d1d8fed00000000, 0xb8a5d94c00000000, 0x5621e0ed00000000,
+ 0x25aadbd500000000, 0xcb2ee27400000000, 0xc3bcaca500000000,
+ 0x2d38950400000000, 0x5eb3ae3c00000000, 0xb037979d00000000,
+ 0x0f91424500000000, 0xe1157be400000000, 0x929e40dc00000000,
+ 0x7c1a797d00000000, 0x748837ac00000000, 0x9a0c0e0d00000000,
+ 0xe987353500000000, 0x07030c9400000000, 0xd6ccef5f00000000,
+ 0x3848d6fe00000000, 0x4bc3edc600000000, 0xa547d46700000000,
+ 0xadd59ab600000000, 0x4351a31700000000, 0x30da982f00000000,
+ 0xde5ea18e00000000, 0x61f8745600000000, 0x8f7c4df700000000,
+ 0xfcf776cf00000000, 0x12734f6e00000000, 0x1ae101bf00000000,
+ 0xf465381e00000000, 0x87ee032600000000, 0x696a3a8700000000,
+ 0x6477b56a00000000, 0x8af38ccb00000000, 0xf978b7f300000000,
+ 0x17fc8e5200000000, 0x1f6ec08300000000, 0xf1eaf92200000000,
+ 0x8261c21a00000000, 0x6ce5fbbb00000000, 0xd3432e6300000000,
+ 0x3dc717c200000000, 0x4e4c2cfa00000000, 0xa0c8155b00000000,
+ 0xa85a5b8a00000000, 0x46de622b00000000, 0x3555591300000000,
+ 0xdbd160b200000000, 0x0a1e837900000000, 0xe49abad800000000,
+ 0x971181e000000000, 0x7995b84100000000, 0x7107f69000000000,
+ 0x9f83cf3100000000, 0xec08f40900000000, 0x028ccda800000000,
+ 0xbd2a187000000000, 0x53ae21d100000000, 0x20251ae900000000,
+ 0xcea1234800000000, 0xc6336d9900000000, 0x28b7543800000000,
+ 0x5b3c6f0000000000, 0xb5b856a100000000, 0x704bb39900000000,
+ 0x9ecf8a3800000000, 0xed44b10000000000, 0x03c088a100000000,
+ 0x0b52c67000000000, 0xe5d6ffd100000000, 0x965dc4e900000000,
+ 0x78d9fd4800000000, 0xc77f289000000000, 0x29fb113100000000,
+ 0x5a702a0900000000, 0xb4f413a800000000, 0xbc665d7900000000,
+ 0x52e264d800000000, 0x21695fe000000000, 0xcfed664100000000,
+ 0x1e22858a00000000, 0xf0a6bc2b00000000, 0x832d871300000000,
+ 0x6da9beb200000000, 0x653bf06300000000, 0x8bbfc9c200000000,
+ 0xf834f2fa00000000, 0x16b0cb5b00000000, 0xa9161e8300000000,
+ 0x4792272200000000, 0x34191c1a00000000, 0xda9d25bb00000000,
+ 0xd20f6b6a00000000, 0x3c8b52cb00000000, 0x4f0069f300000000,
+ 0xa184505200000000, 0xac99dfbf00000000, 0x421de61e00000000,
+ 0x3196dd2600000000, 0xdf12e48700000000, 0xd780aa5600000000,
+ 0x390493f700000000, 0x4a8fa8cf00000000, 0xa40b916e00000000,
+ 0x1bad44b600000000, 0xf5297d1700000000, 0x86a2462f00000000,
+ 0x68267f8e00000000, 0x60b4315f00000000, 0x8e3008fe00000000,
+ 0xfdbb33c600000000, 0x133f0a6700000000, 0xc2f0e9ac00000000,
+ 0x2c74d00d00000000, 0x5fffeb3500000000, 0xb17bd29400000000,
+ 0xb9e99c4500000000, 0x576da5e400000000, 0x24e69edc00000000,
+ 0xca62a77d00000000, 0x75c472a500000000, 0x9b404b0400000000,
+ 0xe8cb703c00000000, 0x064f499d00000000, 0x0edd074c00000000,
+ 0xe0593eed00000000, 0x93d205d500000000, 0x7d563c7400000000,
+ 0xc8ee6ad500000000, 0x266a537400000000, 0x55e1684c00000000,
+ 0xbb6551ed00000000, 0xb3f71f3c00000000, 0x5d73269d00000000,
+ 0x2ef81da500000000, 0xc07c240400000000, 0x7fdaf1dc00000000,
+ 0x915ec87d00000000, 0xe2d5f34500000000, 0x0c51cae400000000,
+ 0x04c3843500000000, 0xea47bd9400000000, 0x99cc86ac00000000,
+ 0x7748bf0d00000000, 0xa6875cc600000000, 0x4803656700000000,
+ 0x3b885e5f00000000, 0xd50c67fe00000000, 0xdd9e292f00000000,
+ 0x331a108e00000000, 0x40912bb600000000, 0xae15121700000000,
+ 0x11b3c7cf00000000, 0xff37fe6e00000000, 0x8cbcc55600000000,
+ 0x6238fcf700000000, 0x6aaab22600000000, 0x842e8b8700000000,
+ 0xf7a5b0bf00000000, 0x1921891e00000000, 0x143c06f300000000,
+ 0xfab83f5200000000, 0x8933046a00000000, 0x67b73dcb00000000,
+ 0x6f25731a00000000, 0x81a14abb00000000, 0xf22a718300000000,
+ 0x1cae482200000000, 0xa3089dfa00000000, 0x4d8ca45b00000000,
+ 0x3e079f6300000000, 0xd083a6c200000000, 0xd811e81300000000,
+ 0x3695d1b200000000, 0x451eea8a00000000, 0xab9ad32b00000000,
+ 0x7a5530e000000000, 0x94d1094100000000, 0xe75a327900000000,
+ 0x09de0bd800000000, 0x014c450900000000, 0xefc87ca800000000,
+ 0x9c43479000000000, 0x72c77e3100000000, 0xcd61abe900000000,
+ 0x23e5924800000000, 0x506ea97000000000, 0xbeea90d100000000,
+ 0xb678de0000000000, 0x58fce7a100000000, 0x2b77dc9900000000,
+ 0xc5f3e53800000000},
+ {0x0000000000000000, 0xfbf6134700000000, 0xf6ed278e00000000,
+ 0x0d1b34c900000000, 0xaddd3ec700000000, 0x562b2d8000000000,
+ 0x5b30194900000000, 0xa0c60a0e00000000, 0x1bbd0c5500000000,
+ 0xe04b1f1200000000, 0xed502bdb00000000, 0x16a6389c00000000,
+ 0xb660329200000000, 0x4d9621d500000000, 0x408d151c00000000,
+ 0xbb7b065b00000000, 0x367a19aa00000000, 0xcd8c0aed00000000,
+ 0xc0973e2400000000, 0x3b612d6300000000, 0x9ba7276d00000000,
+ 0x6051342a00000000, 0x6d4a00e300000000, 0x96bc13a400000000,
+ 0x2dc715ff00000000, 0xd63106b800000000, 0xdb2a327100000000,
+ 0x20dc213600000000, 0x801a2b3800000000, 0x7bec387f00000000,
+ 0x76f70cb600000000, 0x8d011ff100000000, 0x2df2438f00000000,
+ 0xd60450c800000000, 0xdb1f640100000000, 0x20e9774600000000,
+ 0x802f7d4800000000, 0x7bd96e0f00000000, 0x76c25ac600000000,
+ 0x8d34498100000000, 0x364f4fda00000000, 0xcdb95c9d00000000,
+ 0xc0a2685400000000, 0x3b547b1300000000, 0x9b92711d00000000,
+ 0x6064625a00000000, 0x6d7f569300000000, 0x968945d400000000,
+ 0x1b885a2500000000, 0xe07e496200000000, 0xed657dab00000000,
+ 0x16936eec00000000, 0xb65564e200000000, 0x4da377a500000000,
+ 0x40b8436c00000000, 0xbb4e502b00000000, 0x0035567000000000,
+ 0xfbc3453700000000, 0xf6d871fe00000000, 0x0d2e62b900000000,
+ 0xade868b700000000, 0x561e7bf000000000, 0x5b054f3900000000,
+ 0xa0f35c7e00000000, 0x1be2f6c500000000, 0xe014e58200000000,
+ 0xed0fd14b00000000, 0x16f9c20c00000000, 0xb63fc80200000000,
+ 0x4dc9db4500000000, 0x40d2ef8c00000000, 0xbb24fccb00000000,
+ 0x005ffa9000000000, 0xfba9e9d700000000, 0xf6b2dd1e00000000,
+ 0x0d44ce5900000000, 0xad82c45700000000, 0x5674d71000000000,
+ 0x5b6fe3d900000000, 0xa099f09e00000000, 0x2d98ef6f00000000,
+ 0xd66efc2800000000, 0xdb75c8e100000000, 0x2083dba600000000,
+ 0x8045d1a800000000, 0x7bb3c2ef00000000, 0x76a8f62600000000,
+ 0x8d5ee56100000000, 0x3625e33a00000000, 0xcdd3f07d00000000,
+ 0xc0c8c4b400000000, 0x3b3ed7f300000000, 0x9bf8ddfd00000000,
+ 0x600eceba00000000, 0x6d15fa7300000000, 0x96e3e93400000000,
+ 0x3610b54a00000000, 0xcde6a60d00000000, 0xc0fd92c400000000,
+ 0x3b0b818300000000, 0x9bcd8b8d00000000, 0x603b98ca00000000,
+ 0x6d20ac0300000000, 0x96d6bf4400000000, 0x2dadb91f00000000,
+ 0xd65baa5800000000, 0xdb409e9100000000, 0x20b68dd600000000,
+ 0x807087d800000000, 0x7b86949f00000000, 0x769da05600000000,
+ 0x8d6bb31100000000, 0x006aace000000000, 0xfb9cbfa700000000,
+ 0xf6878b6e00000000, 0x0d71982900000000, 0xadb7922700000000,
+ 0x5641816000000000, 0x5b5ab5a900000000, 0xa0aca6ee00000000,
+ 0x1bd7a0b500000000, 0xe021b3f200000000, 0xed3a873b00000000,
+ 0x16cc947c00000000, 0xb60a9e7200000000, 0x4dfc8d3500000000,
+ 0x40e7b9fc00000000, 0xbb11aabb00000000, 0x77c29c5000000000,
+ 0x8c348f1700000000, 0x812fbbde00000000, 0x7ad9a89900000000,
+ 0xda1fa29700000000, 0x21e9b1d000000000, 0x2cf2851900000000,
+ 0xd704965e00000000, 0x6c7f900500000000, 0x9789834200000000,
+ 0x9a92b78b00000000, 0x6164a4cc00000000, 0xc1a2aec200000000,
+ 0x3a54bd8500000000, 0x374f894c00000000, 0xccb99a0b00000000,
+ 0x41b885fa00000000, 0xba4e96bd00000000, 0xb755a27400000000,
+ 0x4ca3b13300000000, 0xec65bb3d00000000, 0x1793a87a00000000,
+ 0x1a889cb300000000, 0xe17e8ff400000000, 0x5a0589af00000000,
+ 0xa1f39ae800000000, 0xace8ae2100000000, 0x571ebd6600000000,
+ 0xf7d8b76800000000, 0x0c2ea42f00000000, 0x013590e600000000,
+ 0xfac383a100000000, 0x5a30dfdf00000000, 0xa1c6cc9800000000,
+ 0xacddf85100000000, 0x572beb1600000000, 0xf7ede11800000000,
+ 0x0c1bf25f00000000, 0x0100c69600000000, 0xfaf6d5d100000000,
+ 0x418dd38a00000000, 0xba7bc0cd00000000, 0xb760f40400000000,
+ 0x4c96e74300000000, 0xec50ed4d00000000, 0x17a6fe0a00000000,
+ 0x1abdcac300000000, 0xe14bd98400000000, 0x6c4ac67500000000,
+ 0x97bcd53200000000, 0x9aa7e1fb00000000, 0x6151f2bc00000000,
+ 0xc197f8b200000000, 0x3a61ebf500000000, 0x377adf3c00000000,
+ 0xcc8ccc7b00000000, 0x77f7ca2000000000, 0x8c01d96700000000,
+ 0x811aedae00000000, 0x7aecfee900000000, 0xda2af4e700000000,
+ 0x21dce7a000000000, 0x2cc7d36900000000, 0xd731c02e00000000,
+ 0x6c206a9500000000, 0x97d679d200000000, 0x9acd4d1b00000000,
+ 0x613b5e5c00000000, 0xc1fd545200000000, 0x3a0b471500000000,
+ 0x371073dc00000000, 0xcce6609b00000000, 0x779d66c000000000,
+ 0x8c6b758700000000, 0x8170414e00000000, 0x7a86520900000000,
+ 0xda40580700000000, 0x21b64b4000000000, 0x2cad7f8900000000,
+ 0xd75b6cce00000000, 0x5a5a733f00000000, 0xa1ac607800000000,
+ 0xacb754b100000000, 0x574147f600000000, 0xf7874df800000000,
+ 0x0c715ebf00000000, 0x016a6a7600000000, 0xfa9c793100000000,
+ 0x41e77f6a00000000, 0xba116c2d00000000, 0xb70a58e400000000,
+ 0x4cfc4ba300000000, 0xec3a41ad00000000, 0x17cc52ea00000000,
+ 0x1ad7662300000000, 0xe121756400000000, 0x41d2291a00000000,
+ 0xba243a5d00000000, 0xb73f0e9400000000, 0x4cc91dd300000000,
+ 0xec0f17dd00000000, 0x17f9049a00000000, 0x1ae2305300000000,
+ 0xe114231400000000, 0x5a6f254f00000000, 0xa199360800000000,
+ 0xac8202c100000000, 0x5774118600000000, 0xf7b21b8800000000,
+ 0x0c4408cf00000000, 0x015f3c0600000000, 0xfaa92f4100000000,
+ 0x77a830b000000000, 0x8c5e23f700000000, 0x8145173e00000000,
+ 0x7ab3047900000000, 0xda750e7700000000, 0x21831d3000000000,
+ 0x2c9829f900000000, 0xd76e3abe00000000, 0x6c153ce500000000,
+ 0x97e32fa200000000, 0x9af81b6b00000000, 0x610e082c00000000,
+ 0xc1c8022200000000, 0x3a3e116500000000, 0x372525ac00000000,
+ 0xccd336eb00000000},
+ {0x0000000000000000, 0x6238282a00000000, 0xc470505400000000,
+ 0xa648787e00000000, 0x88e1a0a800000000, 0xead9888200000000,
+ 0x4c91f0fc00000000, 0x2ea9d8d600000000, 0x51c5308a00000000,
+ 0x33fd18a000000000, 0x95b560de00000000, 0xf78d48f400000000,
+ 0xd924902200000000, 0xbb1cb80800000000, 0x1d54c07600000000,
+ 0x7f6ce85c00000000, 0xe38c10cf00000000, 0x81b438e500000000,
+ 0x27fc409b00000000, 0x45c468b100000000, 0x6b6db06700000000,
+ 0x0955984d00000000, 0xaf1de03300000000, 0xcd25c81900000000,
+ 0xb249204500000000, 0xd071086f00000000, 0x7639701100000000,
+ 0x1401583b00000000, 0x3aa880ed00000000, 0x5890a8c700000000,
+ 0xfed8d0b900000000, 0x9ce0f89300000000, 0x871f504500000000,
+ 0xe527786f00000000, 0x436f001100000000, 0x2157283b00000000,
+ 0x0ffef0ed00000000, 0x6dc6d8c700000000, 0xcb8ea0b900000000,
+ 0xa9b6889300000000, 0xd6da60cf00000000, 0xb4e248e500000000,
+ 0x12aa309b00000000, 0x709218b100000000, 0x5e3bc06700000000,
+ 0x3c03e84d00000000, 0x9a4b903300000000, 0xf873b81900000000,
+ 0x6493408a00000000, 0x06ab68a000000000, 0xa0e310de00000000,
+ 0xc2db38f400000000, 0xec72e02200000000, 0x8e4ac80800000000,
+ 0x2802b07600000000, 0x4a3a985c00000000, 0x3556700000000000,
+ 0x576e582a00000000, 0xf126205400000000, 0x931e087e00000000,
+ 0xbdb7d0a800000000, 0xdf8ff88200000000, 0x79c780fc00000000,
+ 0x1bffa8d600000000, 0x0e3fa08a00000000, 0x6c0788a000000000,
+ 0xca4ff0de00000000, 0xa877d8f400000000, 0x86de002200000000,
+ 0xe4e6280800000000, 0x42ae507600000000, 0x2096785c00000000,
+ 0x5ffa900000000000, 0x3dc2b82a00000000, 0x9b8ac05400000000,
+ 0xf9b2e87e00000000, 0xd71b30a800000000, 0xb523188200000000,
+ 0x136b60fc00000000, 0x715348d600000000, 0xedb3b04500000000,
+ 0x8f8b986f00000000, 0x29c3e01100000000, 0x4bfbc83b00000000,
+ 0x655210ed00000000, 0x076a38c700000000, 0xa12240b900000000,
+ 0xc31a689300000000, 0xbc7680cf00000000, 0xde4ea8e500000000,
+ 0x7806d09b00000000, 0x1a3ef8b100000000, 0x3497206700000000,
+ 0x56af084d00000000, 0xf0e7703300000000, 0x92df581900000000,
+ 0x8920f0cf00000000, 0xeb18d8e500000000, 0x4d50a09b00000000,
+ 0x2f6888b100000000, 0x01c1506700000000, 0x63f9784d00000000,
+ 0xc5b1003300000000, 0xa789281900000000, 0xd8e5c04500000000,
+ 0xbadde86f00000000, 0x1c95901100000000, 0x7eadb83b00000000,
+ 0x500460ed00000000, 0x323c48c700000000, 0x947430b900000000,
+ 0xf64c189300000000, 0x6aace00000000000, 0x0894c82a00000000,
+ 0xaedcb05400000000, 0xcce4987e00000000, 0xe24d40a800000000,
+ 0x8075688200000000, 0x263d10fc00000000, 0x440538d600000000,
+ 0x3b69d08a00000000, 0x5951f8a000000000, 0xff1980de00000000,
+ 0x9d21a8f400000000, 0xb388702200000000, 0xd1b0580800000000,
+ 0x77f8207600000000, 0x15c0085c00000000, 0x5d7831ce00000000,
+ 0x3f4019e400000000, 0x9908619a00000000, 0xfb3049b000000000,
+ 0xd599916600000000, 0xb7a1b94c00000000, 0x11e9c13200000000,
+ 0x73d1e91800000000, 0x0cbd014400000000, 0x6e85296e00000000,
+ 0xc8cd511000000000, 0xaaf5793a00000000, 0x845ca1ec00000000,
+ 0xe66489c600000000, 0x402cf1b800000000, 0x2214d99200000000,
+ 0xbef4210100000000, 0xdccc092b00000000, 0x7a84715500000000,
+ 0x18bc597f00000000, 0x361581a900000000, 0x542da98300000000,
+ 0xf265d1fd00000000, 0x905df9d700000000, 0xef31118b00000000,
+ 0x8d0939a100000000, 0x2b4141df00000000, 0x497969f500000000,
+ 0x67d0b12300000000, 0x05e8990900000000, 0xa3a0e17700000000,
+ 0xc198c95d00000000, 0xda67618b00000000, 0xb85f49a100000000,
+ 0x1e1731df00000000, 0x7c2f19f500000000, 0x5286c12300000000,
+ 0x30bee90900000000, 0x96f6917700000000, 0xf4ceb95d00000000,
+ 0x8ba2510100000000, 0xe99a792b00000000, 0x4fd2015500000000,
+ 0x2dea297f00000000, 0x0343f1a900000000, 0x617bd98300000000,
+ 0xc733a1fd00000000, 0xa50b89d700000000, 0x39eb714400000000,
+ 0x5bd3596e00000000, 0xfd9b211000000000, 0x9fa3093a00000000,
+ 0xb10ad1ec00000000, 0xd332f9c600000000, 0x757a81b800000000,
+ 0x1742a99200000000, 0x682e41ce00000000, 0x0a1669e400000000,
+ 0xac5e119a00000000, 0xce6639b000000000, 0xe0cfe16600000000,
+ 0x82f7c94c00000000, 0x24bfb13200000000, 0x4687991800000000,
+ 0x5347914400000000, 0x317fb96e00000000, 0x9737c11000000000,
+ 0xf50fe93a00000000, 0xdba631ec00000000, 0xb99e19c600000000,
+ 0x1fd661b800000000, 0x7dee499200000000, 0x0282a1ce00000000,
+ 0x60ba89e400000000, 0xc6f2f19a00000000, 0xa4cad9b000000000,
+ 0x8a63016600000000, 0xe85b294c00000000, 0x4e13513200000000,
+ 0x2c2b791800000000, 0xb0cb818b00000000, 0xd2f3a9a100000000,
+ 0x74bbd1df00000000, 0x1683f9f500000000, 0x382a212300000000,
+ 0x5a12090900000000, 0xfc5a717700000000, 0x9e62595d00000000,
+ 0xe10eb10100000000, 0x8336992b00000000, 0x257ee15500000000,
+ 0x4746c97f00000000, 0x69ef11a900000000, 0x0bd7398300000000,
+ 0xad9f41fd00000000, 0xcfa769d700000000, 0xd458c10100000000,
+ 0xb660e92b00000000, 0x1028915500000000, 0x7210b97f00000000,
+ 0x5cb961a900000000, 0x3e81498300000000, 0x98c931fd00000000,
+ 0xfaf119d700000000, 0x859df18b00000000, 0xe7a5d9a100000000,
+ 0x41eda1df00000000, 0x23d589f500000000, 0x0d7c512300000000,
+ 0x6f44790900000000, 0xc90c017700000000, 0xab34295d00000000,
+ 0x37d4d1ce00000000, 0x55ecf9e400000000, 0xf3a4819a00000000,
+ 0x919ca9b000000000, 0xbf35716600000000, 0xdd0d594c00000000,
+ 0x7b45213200000000, 0x197d091800000000, 0x6611e14400000000,
+ 0x0429c96e00000000, 0xa261b11000000000, 0xc059993a00000000,
+ 0xeef041ec00000000, 0x8cc869c600000000, 0x2a8011b800000000,
+ 0x48b8399200000000},
+ {0x0000000000000000, 0x4c2896a300000000, 0xd9565d9c00000000,
+ 0x957ecb3f00000000, 0xf3abcbe300000000, 0xbf835d4000000000,
+ 0x2afd967f00000000, 0x66d500dc00000000, 0xa751e61c00000000,
+ 0xeb7970bf00000000, 0x7e07bb8000000000, 0x322f2d2300000000,
+ 0x54fa2dff00000000, 0x18d2bb5c00000000, 0x8dac706300000000,
+ 0xc184e6c000000000, 0x4ea3cc3900000000, 0x028b5a9a00000000,
+ 0x97f591a500000000, 0xdbdd070600000000, 0xbd0807da00000000,
+ 0xf120917900000000, 0x645e5a4600000000, 0x2876cce500000000,
+ 0xe9f22a2500000000, 0xa5dabc8600000000, 0x30a477b900000000,
+ 0x7c8ce11a00000000, 0x1a59e1c600000000, 0x5671776500000000,
+ 0xc30fbc5a00000000, 0x8f272af900000000, 0x9c46997300000000,
+ 0xd06e0fd000000000, 0x4510c4ef00000000, 0x0938524c00000000,
+ 0x6fed529000000000, 0x23c5c43300000000, 0xb6bb0f0c00000000,
+ 0xfa9399af00000000, 0x3b177f6f00000000, 0x773fe9cc00000000,
+ 0xe24122f300000000, 0xae69b45000000000, 0xc8bcb48c00000000,
+ 0x8494222f00000000, 0x11eae91000000000, 0x5dc27fb300000000,
+ 0xd2e5554a00000000, 0x9ecdc3e900000000, 0x0bb308d600000000,
+ 0x479b9e7500000000, 0x214e9ea900000000, 0x6d66080a00000000,
+ 0xf818c33500000000, 0xb430559600000000, 0x75b4b35600000000,
+ 0x399c25f500000000, 0xace2eeca00000000, 0xe0ca786900000000,
+ 0x861f78b500000000, 0xca37ee1600000000, 0x5f49252900000000,
+ 0x1361b38a00000000, 0x388d32e700000000, 0x74a5a44400000000,
+ 0xe1db6f7b00000000, 0xadf3f9d800000000, 0xcb26f90400000000,
+ 0x870e6fa700000000, 0x1270a49800000000, 0x5e58323b00000000,
+ 0x9fdcd4fb00000000, 0xd3f4425800000000, 0x468a896700000000,
+ 0x0aa21fc400000000, 0x6c771f1800000000, 0x205f89bb00000000,
+ 0xb521428400000000, 0xf909d42700000000, 0x762efede00000000,
+ 0x3a06687d00000000, 0xaf78a34200000000, 0xe35035e100000000,
+ 0x8585353d00000000, 0xc9ada39e00000000, 0x5cd368a100000000,
+ 0x10fbfe0200000000, 0xd17f18c200000000, 0x9d578e6100000000,
+ 0x0829455e00000000, 0x4401d3fd00000000, 0x22d4d32100000000,
+ 0x6efc458200000000, 0xfb828ebd00000000, 0xb7aa181e00000000,
+ 0xa4cbab9400000000, 0xe8e33d3700000000, 0x7d9df60800000000,
+ 0x31b560ab00000000, 0x5760607700000000, 0x1b48f6d400000000,
+ 0x8e363deb00000000, 0xc21eab4800000000, 0x039a4d8800000000,
+ 0x4fb2db2b00000000, 0xdacc101400000000, 0x96e486b700000000,
+ 0xf031866b00000000, 0xbc1910c800000000, 0x2967dbf700000000,
+ 0x654f4d5400000000, 0xea6867ad00000000, 0xa640f10e00000000,
+ 0x333e3a3100000000, 0x7f16ac9200000000, 0x19c3ac4e00000000,
+ 0x55eb3aed00000000, 0xc095f1d200000000, 0x8cbd677100000000,
+ 0x4d3981b100000000, 0x0111171200000000, 0x946fdc2d00000000,
+ 0xd8474a8e00000000, 0xbe924a5200000000, 0xf2badcf100000000,
+ 0x67c417ce00000000, 0x2bec816d00000000, 0x311c141500000000,
+ 0x7d3482b600000000, 0xe84a498900000000, 0xa462df2a00000000,
+ 0xc2b7dff600000000, 0x8e9f495500000000, 0x1be1826a00000000,
+ 0x57c914c900000000, 0x964df20900000000, 0xda6564aa00000000,
+ 0x4f1baf9500000000, 0x0333393600000000, 0x65e639ea00000000,
+ 0x29ceaf4900000000, 0xbcb0647600000000, 0xf098f2d500000000,
+ 0x7fbfd82c00000000, 0x33974e8f00000000, 0xa6e985b000000000,
+ 0xeac1131300000000, 0x8c1413cf00000000, 0xc03c856c00000000,
+ 0x55424e5300000000, 0x196ad8f000000000, 0xd8ee3e3000000000,
+ 0x94c6a89300000000, 0x01b863ac00000000, 0x4d90f50f00000000,
+ 0x2b45f5d300000000, 0x676d637000000000, 0xf213a84f00000000,
+ 0xbe3b3eec00000000, 0xad5a8d6600000000, 0xe1721bc500000000,
+ 0x740cd0fa00000000, 0x3824465900000000, 0x5ef1468500000000,
+ 0x12d9d02600000000, 0x87a71b1900000000, 0xcb8f8dba00000000,
+ 0x0a0b6b7a00000000, 0x4623fdd900000000, 0xd35d36e600000000,
+ 0x9f75a04500000000, 0xf9a0a09900000000, 0xb588363a00000000,
+ 0x20f6fd0500000000, 0x6cde6ba600000000, 0xe3f9415f00000000,
+ 0xafd1d7fc00000000, 0x3aaf1cc300000000, 0x76878a6000000000,
+ 0x10528abc00000000, 0x5c7a1c1f00000000, 0xc904d72000000000,
+ 0x852c418300000000, 0x44a8a74300000000, 0x088031e000000000,
+ 0x9dfefadf00000000, 0xd1d66c7c00000000, 0xb7036ca000000000,
+ 0xfb2bfa0300000000, 0x6e55313c00000000, 0x227da79f00000000,
+ 0x099126f200000000, 0x45b9b05100000000, 0xd0c77b6e00000000,
+ 0x9cefedcd00000000, 0xfa3aed1100000000, 0xb6127bb200000000,
+ 0x236cb08d00000000, 0x6f44262e00000000, 0xaec0c0ee00000000,
+ 0xe2e8564d00000000, 0x77969d7200000000, 0x3bbe0bd100000000,
+ 0x5d6b0b0d00000000, 0x11439dae00000000, 0x843d569100000000,
+ 0xc815c03200000000, 0x4732eacb00000000, 0x0b1a7c6800000000,
+ 0x9e64b75700000000, 0xd24c21f400000000, 0xb499212800000000,
+ 0xf8b1b78b00000000, 0x6dcf7cb400000000, 0x21e7ea1700000000,
+ 0xe0630cd700000000, 0xac4b9a7400000000, 0x3935514b00000000,
+ 0x751dc7e800000000, 0x13c8c73400000000, 0x5fe0519700000000,
+ 0xca9e9aa800000000, 0x86b60c0b00000000, 0x95d7bf8100000000,
+ 0xd9ff292200000000, 0x4c81e21d00000000, 0x00a974be00000000,
+ 0x667c746200000000, 0x2a54e2c100000000, 0xbf2a29fe00000000,
+ 0xf302bf5d00000000, 0x3286599d00000000, 0x7eaecf3e00000000,
+ 0xebd0040100000000, 0xa7f892a200000000, 0xc12d927e00000000,
+ 0x8d0504dd00000000, 0x187bcfe200000000, 0x5453594100000000,
+ 0xdb7473b800000000, 0x975ce51b00000000, 0x02222e2400000000,
+ 0x4e0ab88700000000, 0x28dfb85b00000000, 0x64f72ef800000000,
+ 0xf189e5c700000000, 0xbda1736400000000, 0x7c2595a400000000,
+ 0x300d030700000000, 0xa573c83800000000, 0xe95b5e9b00000000,
+ 0x8f8e5e4700000000, 0xc3a6c8e400000000, 0x56d803db00000000,
+ 0x1af0957800000000},
+ {0x0000000000000000, 0x939bc97f00000000, 0x263793ff00000000,
+ 0xb5ac5a8000000000, 0x0d68572400000000, 0x9ef39e5b00000000,
+ 0x2b5fc4db00000000, 0xb8c40da400000000, 0x1ad0ae4800000000,
+ 0x894b673700000000, 0x3ce73db700000000, 0xaf7cf4c800000000,
+ 0x17b8f96c00000000, 0x8423301300000000, 0x318f6a9300000000,
+ 0xa214a3ec00000000, 0x34a05d9100000000, 0xa73b94ee00000000,
+ 0x1297ce6e00000000, 0x810c071100000000, 0x39c80ab500000000,
+ 0xaa53c3ca00000000, 0x1fff994a00000000, 0x8c64503500000000,
+ 0x2e70f3d900000000, 0xbdeb3aa600000000, 0x0847602600000000,
+ 0x9bdca95900000000, 0x2318a4fd00000000, 0xb0836d8200000000,
+ 0x052f370200000000, 0x96b4fe7d00000000, 0x2946caf900000000,
+ 0xbadd038600000000, 0x0f71590600000000, 0x9cea907900000000,
+ 0x242e9ddd00000000, 0xb7b554a200000000, 0x02190e2200000000,
+ 0x9182c75d00000000, 0x339664b100000000, 0xa00dadce00000000,
+ 0x15a1f74e00000000, 0x863a3e3100000000, 0x3efe339500000000,
+ 0xad65faea00000000, 0x18c9a06a00000000, 0x8b52691500000000,
+ 0x1de6976800000000, 0x8e7d5e1700000000, 0x3bd1049700000000,
+ 0xa84acde800000000, 0x108ec04c00000000, 0x8315093300000000,
+ 0x36b953b300000000, 0xa5229acc00000000, 0x0736392000000000,
+ 0x94adf05f00000000, 0x2101aadf00000000, 0xb29a63a000000000,
+ 0x0a5e6e0400000000, 0x99c5a77b00000000, 0x2c69fdfb00000000,
+ 0xbff2348400000000, 0x138ae52800000000, 0x80112c5700000000,
+ 0x35bd76d700000000, 0xa626bfa800000000, 0x1ee2b20c00000000,
+ 0x8d797b7300000000, 0x38d521f300000000, 0xab4ee88c00000000,
+ 0x095a4b6000000000, 0x9ac1821f00000000, 0x2f6dd89f00000000,
+ 0xbcf611e000000000, 0x04321c4400000000, 0x97a9d53b00000000,
+ 0x22058fbb00000000, 0xb19e46c400000000, 0x272ab8b900000000,
+ 0xb4b171c600000000, 0x011d2b4600000000, 0x9286e23900000000,
+ 0x2a42ef9d00000000, 0xb9d926e200000000, 0x0c757c6200000000,
+ 0x9feeb51d00000000, 0x3dfa16f100000000, 0xae61df8e00000000,
+ 0x1bcd850e00000000, 0x88564c7100000000, 0x309241d500000000,
+ 0xa30988aa00000000, 0x16a5d22a00000000, 0x853e1b5500000000,
+ 0x3acc2fd100000000, 0xa957e6ae00000000, 0x1cfbbc2e00000000,
+ 0x8f60755100000000, 0x37a478f500000000, 0xa43fb18a00000000,
+ 0x1193eb0a00000000, 0x8208227500000000, 0x201c819900000000,
+ 0xb38748e600000000, 0x062b126600000000, 0x95b0db1900000000,
+ 0x2d74d6bd00000000, 0xbeef1fc200000000, 0x0b43454200000000,
+ 0x98d88c3d00000000, 0x0e6c724000000000, 0x9df7bb3f00000000,
+ 0x285be1bf00000000, 0xbbc028c000000000, 0x0304256400000000,
+ 0x909fec1b00000000, 0x2533b69b00000000, 0xb6a87fe400000000,
+ 0x14bcdc0800000000, 0x8727157700000000, 0x328b4ff700000000,
+ 0xa110868800000000, 0x19d48b2c00000000, 0x8a4f425300000000,
+ 0x3fe318d300000000, 0xac78d1ac00000000, 0x2614cb5100000000,
+ 0xb58f022e00000000, 0x002358ae00000000, 0x93b891d100000000,
+ 0x2b7c9c7500000000, 0xb8e7550a00000000, 0x0d4b0f8a00000000,
+ 0x9ed0c6f500000000, 0x3cc4651900000000, 0xaf5fac6600000000,
+ 0x1af3f6e600000000, 0x89683f9900000000, 0x31ac323d00000000,
+ 0xa237fb4200000000, 0x179ba1c200000000, 0x840068bd00000000,
+ 0x12b496c000000000, 0x812f5fbf00000000, 0x3483053f00000000,
+ 0xa718cc4000000000, 0x1fdcc1e400000000, 0x8c47089b00000000,
+ 0x39eb521b00000000, 0xaa709b6400000000, 0x0864388800000000,
+ 0x9bfff1f700000000, 0x2e53ab7700000000, 0xbdc8620800000000,
+ 0x050c6fac00000000, 0x9697a6d300000000, 0x233bfc5300000000,
+ 0xb0a0352c00000000, 0x0f5201a800000000, 0x9cc9c8d700000000,
+ 0x2965925700000000, 0xbafe5b2800000000, 0x023a568c00000000,
+ 0x91a19ff300000000, 0x240dc57300000000, 0xb7960c0c00000000,
+ 0x1582afe000000000, 0x8619669f00000000, 0x33b53c1f00000000,
+ 0xa02ef56000000000, 0x18eaf8c400000000, 0x8b7131bb00000000,
+ 0x3edd6b3b00000000, 0xad46a24400000000, 0x3bf25c3900000000,
+ 0xa869954600000000, 0x1dc5cfc600000000, 0x8e5e06b900000000,
+ 0x369a0b1d00000000, 0xa501c26200000000, 0x10ad98e200000000,
+ 0x8336519d00000000, 0x2122f27100000000, 0xb2b93b0e00000000,
+ 0x0715618e00000000, 0x948ea8f100000000, 0x2c4aa55500000000,
+ 0xbfd16c2a00000000, 0x0a7d36aa00000000, 0x99e6ffd500000000,
+ 0x359e2e7900000000, 0xa605e70600000000, 0x13a9bd8600000000,
+ 0x803274f900000000, 0x38f6795d00000000, 0xab6db02200000000,
+ 0x1ec1eaa200000000, 0x8d5a23dd00000000, 0x2f4e803100000000,
+ 0xbcd5494e00000000, 0x097913ce00000000, 0x9ae2dab100000000,
+ 0x2226d71500000000, 0xb1bd1e6a00000000, 0x041144ea00000000,
+ 0x978a8d9500000000, 0x013e73e800000000, 0x92a5ba9700000000,
+ 0x2709e01700000000, 0xb492296800000000, 0x0c5624cc00000000,
+ 0x9fcdedb300000000, 0x2a61b73300000000, 0xb9fa7e4c00000000,
+ 0x1beedda000000000, 0x887514df00000000, 0x3dd94e5f00000000,
+ 0xae42872000000000, 0x16868a8400000000, 0x851d43fb00000000,
+ 0x30b1197b00000000, 0xa32ad00400000000, 0x1cd8e48000000000,
+ 0x8f432dff00000000, 0x3aef777f00000000, 0xa974be0000000000,
+ 0x11b0b3a400000000, 0x822b7adb00000000, 0x3787205b00000000,
+ 0xa41ce92400000000, 0x06084ac800000000, 0x959383b700000000,
+ 0x203fd93700000000, 0xb3a4104800000000, 0x0b601dec00000000,
+ 0x98fbd49300000000, 0x2d578e1300000000, 0xbecc476c00000000,
+ 0x2878b91100000000, 0xbbe3706e00000000, 0x0e4f2aee00000000,
+ 0x9dd4e39100000000, 0x2510ee3500000000, 0xb68b274a00000000,
+ 0x03277dca00000000, 0x90bcb4b500000000, 0x32a8175900000000,
+ 0xa133de2600000000, 0x149f84a600000000, 0x87044dd900000000,
+ 0x3fc0407d00000000, 0xac5b890200000000, 0x19f7d38200000000,
+ 0x8a6c1afd00000000},
+ {0x0000000000000000, 0x650b796900000000, 0xca16f2d200000000,
+ 0xaf1d8bbb00000000, 0xd52b957e00000000, 0xb020ec1700000000,
+ 0x1f3d67ac00000000, 0x7a361ec500000000, 0xaa572afd00000000,
+ 0xcf5c539400000000, 0x6041d82f00000000, 0x054aa14600000000,
+ 0x7f7cbf8300000000, 0x1a77c6ea00000000, 0xb56a4d5100000000,
+ 0xd061343800000000, 0x15a9252100000000, 0x70a25c4800000000,
+ 0xdfbfd7f300000000, 0xbab4ae9a00000000, 0xc082b05f00000000,
+ 0xa589c93600000000, 0x0a94428d00000000, 0x6f9f3be400000000,
+ 0xbffe0fdc00000000, 0xdaf576b500000000, 0x75e8fd0e00000000,
+ 0x10e3846700000000, 0x6ad59aa200000000, 0x0fdee3cb00000000,
+ 0xa0c3687000000000, 0xc5c8111900000000, 0x2a524b4200000000,
+ 0x4f59322b00000000, 0xe044b99000000000, 0x854fc0f900000000,
+ 0xff79de3c00000000, 0x9a72a75500000000, 0x356f2cee00000000,
+ 0x5064558700000000, 0x800561bf00000000, 0xe50e18d600000000,
+ 0x4a13936d00000000, 0x2f18ea0400000000, 0x552ef4c100000000,
+ 0x30258da800000000, 0x9f38061300000000, 0xfa337f7a00000000,
+ 0x3ffb6e6300000000, 0x5af0170a00000000, 0xf5ed9cb100000000,
+ 0x90e6e5d800000000, 0xead0fb1d00000000, 0x8fdb827400000000,
+ 0x20c609cf00000000, 0x45cd70a600000000, 0x95ac449e00000000,
+ 0xf0a73df700000000, 0x5fbab64c00000000, 0x3ab1cf2500000000,
+ 0x4087d1e000000000, 0x258ca88900000000, 0x8a91233200000000,
+ 0xef9a5a5b00000000, 0x54a4968400000000, 0x31afefed00000000,
+ 0x9eb2645600000000, 0xfbb91d3f00000000, 0x818f03fa00000000,
+ 0xe4847a9300000000, 0x4b99f12800000000, 0x2e92884100000000,
+ 0xfef3bc7900000000, 0x9bf8c51000000000, 0x34e54eab00000000,
+ 0x51ee37c200000000, 0x2bd8290700000000, 0x4ed3506e00000000,
+ 0xe1cedbd500000000, 0x84c5a2bc00000000, 0x410db3a500000000,
+ 0x2406cacc00000000, 0x8b1b417700000000, 0xee10381e00000000,
+ 0x942626db00000000, 0xf12d5fb200000000, 0x5e30d40900000000,
+ 0x3b3bad6000000000, 0xeb5a995800000000, 0x8e51e03100000000,
+ 0x214c6b8a00000000, 0x444712e300000000, 0x3e710c2600000000,
+ 0x5b7a754f00000000, 0xf467fef400000000, 0x916c879d00000000,
+ 0x7ef6ddc600000000, 0x1bfda4af00000000, 0xb4e02f1400000000,
+ 0xd1eb567d00000000, 0xabdd48b800000000, 0xced631d100000000,
+ 0x61cbba6a00000000, 0x04c0c30300000000, 0xd4a1f73b00000000,
+ 0xb1aa8e5200000000, 0x1eb705e900000000, 0x7bbc7c8000000000,
+ 0x018a624500000000, 0x64811b2c00000000, 0xcb9c909700000000,
+ 0xae97e9fe00000000, 0x6b5ff8e700000000, 0x0e54818e00000000,
+ 0xa1490a3500000000, 0xc442735c00000000, 0xbe746d9900000000,
+ 0xdb7f14f000000000, 0x74629f4b00000000, 0x1169e62200000000,
+ 0xc108d21a00000000, 0xa403ab7300000000, 0x0b1e20c800000000,
+ 0x6e1559a100000000, 0x1423476400000000, 0x71283e0d00000000,
+ 0xde35b5b600000000, 0xbb3eccdf00000000, 0xe94e5cd200000000,
+ 0x8c4525bb00000000, 0x2358ae0000000000, 0x4653d76900000000,
+ 0x3c65c9ac00000000, 0x596eb0c500000000, 0xf6733b7e00000000,
+ 0x9378421700000000, 0x4319762f00000000, 0x26120f4600000000,
+ 0x890f84fd00000000, 0xec04fd9400000000, 0x9632e35100000000,
+ 0xf3399a3800000000, 0x5c24118300000000, 0x392f68ea00000000,
+ 0xfce779f300000000, 0x99ec009a00000000, 0x36f18b2100000000,
+ 0x53faf24800000000, 0x29ccec8d00000000, 0x4cc795e400000000,
+ 0xe3da1e5f00000000, 0x86d1673600000000, 0x56b0530e00000000,
+ 0x33bb2a6700000000, 0x9ca6a1dc00000000, 0xf9add8b500000000,
+ 0x839bc67000000000, 0xe690bf1900000000, 0x498d34a200000000,
+ 0x2c864dcb00000000, 0xc31c179000000000, 0xa6176ef900000000,
+ 0x090ae54200000000, 0x6c019c2b00000000, 0x163782ee00000000,
+ 0x733cfb8700000000, 0xdc21703c00000000, 0xb92a095500000000,
+ 0x694b3d6d00000000, 0x0c40440400000000, 0xa35dcfbf00000000,
+ 0xc656b6d600000000, 0xbc60a81300000000, 0xd96bd17a00000000,
+ 0x76765ac100000000, 0x137d23a800000000, 0xd6b532b100000000,
+ 0xb3be4bd800000000, 0x1ca3c06300000000, 0x79a8b90a00000000,
+ 0x039ea7cf00000000, 0x6695dea600000000, 0xc988551d00000000,
+ 0xac832c7400000000, 0x7ce2184c00000000, 0x19e9612500000000,
+ 0xb6f4ea9e00000000, 0xd3ff93f700000000, 0xa9c98d3200000000,
+ 0xccc2f45b00000000, 0x63df7fe000000000, 0x06d4068900000000,
+ 0xbdeaca5600000000, 0xd8e1b33f00000000, 0x77fc388400000000,
+ 0x12f741ed00000000, 0x68c15f2800000000, 0x0dca264100000000,
+ 0xa2d7adfa00000000, 0xc7dcd49300000000, 0x17bde0ab00000000,
+ 0x72b699c200000000, 0xddab127900000000, 0xb8a06b1000000000,
+ 0xc29675d500000000, 0xa79d0cbc00000000, 0x0880870700000000,
+ 0x6d8bfe6e00000000, 0xa843ef7700000000, 0xcd48961e00000000,
+ 0x62551da500000000, 0x075e64cc00000000, 0x7d687a0900000000,
+ 0x1863036000000000, 0xb77e88db00000000, 0xd275f1b200000000,
+ 0x0214c58a00000000, 0x671fbce300000000, 0xc802375800000000,
+ 0xad094e3100000000, 0xd73f50f400000000, 0xb234299d00000000,
+ 0x1d29a22600000000, 0x7822db4f00000000, 0x97b8811400000000,
+ 0xf2b3f87d00000000, 0x5dae73c600000000, 0x38a50aaf00000000,
+ 0x4293146a00000000, 0x27986d0300000000, 0x8885e6b800000000,
+ 0xed8e9fd100000000, 0x3defabe900000000, 0x58e4d28000000000,
+ 0xf7f9593b00000000, 0x92f2205200000000, 0xe8c43e9700000000,
+ 0x8dcf47fe00000000, 0x22d2cc4500000000, 0x47d9b52c00000000,
+ 0x8211a43500000000, 0xe71add5c00000000, 0x480756e700000000,
+ 0x2d0c2f8e00000000, 0x573a314b00000000, 0x3231482200000000,
+ 0x9d2cc39900000000, 0xf827baf000000000, 0x28468ec800000000,
+ 0x4d4df7a100000000, 0xe2507c1a00000000, 0x875b057300000000,
+ 0xfd6d1bb600000000, 0x986662df00000000, 0x377be96400000000,
+ 0x5270900d00000000},
+ {0x0000000000000000, 0xdcecb13d00000000, 0xb8d9637b00000000,
+ 0x6435d24600000000, 0x70b3c7f600000000, 0xac5f76cb00000000,
+ 0xc86aa48d00000000, 0x148615b000000000, 0xa160fe3600000000,
+ 0x7d8c4f0b00000000, 0x19b99d4d00000000, 0xc5552c7000000000,
+ 0xd1d339c000000000, 0x0d3f88fd00000000, 0x690a5abb00000000,
+ 0xb5e6eb8600000000, 0x42c1fc6d00000000, 0x9e2d4d5000000000,
+ 0xfa189f1600000000, 0x26f42e2b00000000, 0x32723b9b00000000,
+ 0xee9e8aa600000000, 0x8aab58e000000000, 0x5647e9dd00000000,
+ 0xe3a1025b00000000, 0x3f4db36600000000, 0x5b78612000000000,
+ 0x8794d01d00000000, 0x9312c5ad00000000, 0x4ffe749000000000,
+ 0x2bcba6d600000000, 0xf72717eb00000000, 0x8482f9db00000000,
+ 0x586e48e600000000, 0x3c5b9aa000000000, 0xe0b72b9d00000000,
+ 0xf4313e2d00000000, 0x28dd8f1000000000, 0x4ce85d5600000000,
+ 0x9004ec6b00000000, 0x25e207ed00000000, 0xf90eb6d000000000,
+ 0x9d3b649600000000, 0x41d7d5ab00000000, 0x5551c01b00000000,
+ 0x89bd712600000000, 0xed88a36000000000, 0x3164125d00000000,
+ 0xc64305b600000000, 0x1aafb48b00000000, 0x7e9a66cd00000000,
+ 0xa276d7f000000000, 0xb6f0c24000000000, 0x6a1c737d00000000,
+ 0x0e29a13b00000000, 0xd2c5100600000000, 0x6723fb8000000000,
+ 0xbbcf4abd00000000, 0xdffa98fb00000000, 0x031629c600000000,
+ 0x17903c7600000000, 0xcb7c8d4b00000000, 0xaf495f0d00000000,
+ 0x73a5ee3000000000, 0x4903826c00000000, 0x95ef335100000000,
+ 0xf1dae11700000000, 0x2d36502a00000000, 0x39b0459a00000000,
+ 0xe55cf4a700000000, 0x816926e100000000, 0x5d8597dc00000000,
+ 0xe8637c5a00000000, 0x348fcd6700000000, 0x50ba1f2100000000,
+ 0x8c56ae1c00000000, 0x98d0bbac00000000, 0x443c0a9100000000,
+ 0x2009d8d700000000, 0xfce569ea00000000, 0x0bc27e0100000000,
+ 0xd72ecf3c00000000, 0xb31b1d7a00000000, 0x6ff7ac4700000000,
+ 0x7b71b9f700000000, 0xa79d08ca00000000, 0xc3a8da8c00000000,
+ 0x1f446bb100000000, 0xaaa2803700000000, 0x764e310a00000000,
+ 0x127be34c00000000, 0xce97527100000000, 0xda1147c100000000,
+ 0x06fdf6fc00000000, 0x62c824ba00000000, 0xbe24958700000000,
+ 0xcd817bb700000000, 0x116dca8a00000000, 0x755818cc00000000,
+ 0xa9b4a9f100000000, 0xbd32bc4100000000, 0x61de0d7c00000000,
+ 0x05ebdf3a00000000, 0xd9076e0700000000, 0x6ce1858100000000,
+ 0xb00d34bc00000000, 0xd438e6fa00000000, 0x08d457c700000000,
+ 0x1c52427700000000, 0xc0bef34a00000000, 0xa48b210c00000000,
+ 0x7867903100000000, 0x8f4087da00000000, 0x53ac36e700000000,
+ 0x3799e4a100000000, 0xeb75559c00000000, 0xfff3402c00000000,
+ 0x231ff11100000000, 0x472a235700000000, 0x9bc6926a00000000,
+ 0x2e2079ec00000000, 0xf2ccc8d100000000, 0x96f91a9700000000,
+ 0x4a15abaa00000000, 0x5e93be1a00000000, 0x827f0f2700000000,
+ 0xe64add6100000000, 0x3aa66c5c00000000, 0x920604d900000000,
+ 0x4eeab5e400000000, 0x2adf67a200000000, 0xf633d69f00000000,
+ 0xe2b5c32f00000000, 0x3e59721200000000, 0x5a6ca05400000000,
+ 0x8680116900000000, 0x3366faef00000000, 0xef8a4bd200000000,
+ 0x8bbf999400000000, 0x575328a900000000, 0x43d53d1900000000,
+ 0x9f398c2400000000, 0xfb0c5e6200000000, 0x27e0ef5f00000000,
+ 0xd0c7f8b400000000, 0x0c2b498900000000, 0x681e9bcf00000000,
+ 0xb4f22af200000000, 0xa0743f4200000000, 0x7c988e7f00000000,
+ 0x18ad5c3900000000, 0xc441ed0400000000, 0x71a7068200000000,
+ 0xad4bb7bf00000000, 0xc97e65f900000000, 0x1592d4c400000000,
+ 0x0114c17400000000, 0xddf8704900000000, 0xb9cda20f00000000,
+ 0x6521133200000000, 0x1684fd0200000000, 0xca684c3f00000000,
+ 0xae5d9e7900000000, 0x72b12f4400000000, 0x66373af400000000,
+ 0xbadb8bc900000000, 0xdeee598f00000000, 0x0202e8b200000000,
+ 0xb7e4033400000000, 0x6b08b20900000000, 0x0f3d604f00000000,
+ 0xd3d1d17200000000, 0xc757c4c200000000, 0x1bbb75ff00000000,
+ 0x7f8ea7b900000000, 0xa362168400000000, 0x5445016f00000000,
+ 0x88a9b05200000000, 0xec9c621400000000, 0x3070d32900000000,
+ 0x24f6c69900000000, 0xf81a77a400000000, 0x9c2fa5e200000000,
+ 0x40c314df00000000, 0xf525ff5900000000, 0x29c94e6400000000,
+ 0x4dfc9c2200000000, 0x91102d1f00000000, 0x859638af00000000,
+ 0x597a899200000000, 0x3d4f5bd400000000, 0xe1a3eae900000000,
+ 0xdb0586b500000000, 0x07e9378800000000, 0x63dce5ce00000000,
+ 0xbf3054f300000000, 0xabb6414300000000, 0x775af07e00000000,
+ 0x136f223800000000, 0xcf83930500000000, 0x7a65788300000000,
+ 0xa689c9be00000000, 0xc2bc1bf800000000, 0x1e50aac500000000,
+ 0x0ad6bf7500000000, 0xd63a0e4800000000, 0xb20fdc0e00000000,
+ 0x6ee36d3300000000, 0x99c47ad800000000, 0x4528cbe500000000,
+ 0x211d19a300000000, 0xfdf1a89e00000000, 0xe977bd2e00000000,
+ 0x359b0c1300000000, 0x51aede5500000000, 0x8d426f6800000000,
+ 0x38a484ee00000000, 0xe44835d300000000, 0x807de79500000000,
+ 0x5c9156a800000000, 0x4817431800000000, 0x94fbf22500000000,
+ 0xf0ce206300000000, 0x2c22915e00000000, 0x5f877f6e00000000,
+ 0x836bce5300000000, 0xe75e1c1500000000, 0x3bb2ad2800000000,
+ 0x2f34b89800000000, 0xf3d809a500000000, 0x97eddbe300000000,
+ 0x4b016ade00000000, 0xfee7815800000000, 0x220b306500000000,
+ 0x463ee22300000000, 0x9ad2531e00000000, 0x8e5446ae00000000,
+ 0x52b8f79300000000, 0x368d25d500000000, 0xea6194e800000000,
+ 0x1d46830300000000, 0xc1aa323e00000000, 0xa59fe07800000000,
+ 0x7973514500000000, 0x6df544f500000000, 0xb119f5c800000000,
+ 0xd52c278e00000000, 0x09c096b300000000, 0xbc267d3500000000,
+ 0x60cacc0800000000, 0x04ff1e4e00000000, 0xd813af7300000000,
+ 0xcc95bac300000000, 0x10790bfe00000000, 0x744cd9b800000000,
+ 0xa8a0688500000000}};
+
+#else /* W == 4 */
+
+local const z_crc_t FAR crc_braid_table[][256] = {
+ {0x00000000, 0x81256527, 0xd93bcc0f, 0x581ea928, 0x69069e5f,
+ 0xe823fb78, 0xb03d5250, 0x31183777, 0xd20d3cbe, 0x53285999,
+ 0x0b36f0b1, 0x8a139596, 0xbb0ba2e1, 0x3a2ec7c6, 0x62306eee,
+ 0xe3150bc9, 0x7f6b7f3d, 0xfe4e1a1a, 0xa650b332, 0x2775d615,
+ 0x166de162, 0x97488445, 0xcf562d6d, 0x4e73484a, 0xad664383,
+ 0x2c4326a4, 0x745d8f8c, 0xf578eaab, 0xc460dddc, 0x4545b8fb,
+ 0x1d5b11d3, 0x9c7e74f4, 0xfed6fe7a, 0x7ff39b5d, 0x27ed3275,
+ 0xa6c85752, 0x97d06025, 0x16f50502, 0x4eebac2a, 0xcfcec90d,
+ 0x2cdbc2c4, 0xadfea7e3, 0xf5e00ecb, 0x74c56bec, 0x45dd5c9b,
+ 0xc4f839bc, 0x9ce69094, 0x1dc3f5b3, 0x81bd8147, 0x0098e460,
+ 0x58864d48, 0xd9a3286f, 0xe8bb1f18, 0x699e7a3f, 0x3180d317,
+ 0xb0a5b630, 0x53b0bdf9, 0xd295d8de, 0x8a8b71f6, 0x0bae14d1,
+ 0x3ab623a6, 0xbb934681, 0xe38defa9, 0x62a88a8e, 0x26dcfab5,
+ 0xa7f99f92, 0xffe736ba, 0x7ec2539d, 0x4fda64ea, 0xceff01cd,
+ 0x96e1a8e5, 0x17c4cdc2, 0xf4d1c60b, 0x75f4a32c, 0x2dea0a04,
+ 0xaccf6f23, 0x9dd75854, 0x1cf23d73, 0x44ec945b, 0xc5c9f17c,
+ 0x59b78588, 0xd892e0af, 0x808c4987, 0x01a92ca0, 0x30b11bd7,
+ 0xb1947ef0, 0xe98ad7d8, 0x68afb2ff, 0x8bbab936, 0x0a9fdc11,
+ 0x52817539, 0xd3a4101e, 0xe2bc2769, 0x6399424e, 0x3b87eb66,
+ 0xbaa28e41, 0xd80a04cf, 0x592f61e8, 0x0131c8c0, 0x8014ade7,
+ 0xb10c9a90, 0x3029ffb7, 0x6837569f, 0xe91233b8, 0x0a073871,
+ 0x8b225d56, 0xd33cf47e, 0x52199159, 0x6301a62e, 0xe224c309,
+ 0xba3a6a21, 0x3b1f0f06, 0xa7617bf2, 0x26441ed5, 0x7e5ab7fd,
+ 0xff7fd2da, 0xce67e5ad, 0x4f42808a, 0x175c29a2, 0x96794c85,
+ 0x756c474c, 0xf449226b, 0xac578b43, 0x2d72ee64, 0x1c6ad913,
+ 0x9d4fbc34, 0xc551151c, 0x4474703b, 0x4db9f56a, 0xcc9c904d,
+ 0x94823965, 0x15a75c42, 0x24bf6b35, 0xa59a0e12, 0xfd84a73a,
+ 0x7ca1c21d, 0x9fb4c9d4, 0x1e91acf3, 0x468f05db, 0xc7aa60fc,
+ 0xf6b2578b, 0x779732ac, 0x2f899b84, 0xaeacfea3, 0x32d28a57,
+ 0xb3f7ef70, 0xebe94658, 0x6acc237f, 0x5bd41408, 0xdaf1712f,
+ 0x82efd807, 0x03cabd20, 0xe0dfb6e9, 0x61fad3ce, 0x39e47ae6,
+ 0xb8c11fc1, 0x89d928b6, 0x08fc4d91, 0x50e2e4b9, 0xd1c7819e,
+ 0xb36f0b10, 0x324a6e37, 0x6a54c71f, 0xeb71a238, 0xda69954f,
+ 0x5b4cf068, 0x03525940, 0x82773c67, 0x616237ae, 0xe0475289,
+ 0xb859fba1, 0x397c9e86, 0x0864a9f1, 0x8941ccd6, 0xd15f65fe,
+ 0x507a00d9, 0xcc04742d, 0x4d21110a, 0x153fb822, 0x941add05,
+ 0xa502ea72, 0x24278f55, 0x7c39267d, 0xfd1c435a, 0x1e094893,
+ 0x9f2c2db4, 0xc732849c, 0x4617e1bb, 0x770fd6cc, 0xf62ab3eb,
+ 0xae341ac3, 0x2f117fe4, 0x6b650fdf, 0xea406af8, 0xb25ec3d0,
+ 0x337ba6f7, 0x02639180, 0x8346f4a7, 0xdb585d8f, 0x5a7d38a8,
+ 0xb9683361, 0x384d5646, 0x6053ff6e, 0xe1769a49, 0xd06ead3e,
+ 0x514bc819, 0x09556131, 0x88700416, 0x140e70e2, 0x952b15c5,
+ 0xcd35bced, 0x4c10d9ca, 0x7d08eebd, 0xfc2d8b9a, 0xa43322b2,
+ 0x25164795, 0xc6034c5c, 0x4726297b, 0x1f388053, 0x9e1de574,
+ 0xaf05d203, 0x2e20b724, 0x763e1e0c, 0xf71b7b2b, 0x95b3f1a5,
+ 0x14969482, 0x4c883daa, 0xcdad588d, 0xfcb56ffa, 0x7d900add,
+ 0x258ea3f5, 0xa4abc6d2, 0x47becd1b, 0xc69ba83c, 0x9e850114,
+ 0x1fa06433, 0x2eb85344, 0xaf9d3663, 0xf7839f4b, 0x76a6fa6c,
+ 0xead88e98, 0x6bfdebbf, 0x33e34297, 0xb2c627b0, 0x83de10c7,
+ 0x02fb75e0, 0x5ae5dcc8, 0xdbc0b9ef, 0x38d5b226, 0xb9f0d701,
+ 0xe1ee7e29, 0x60cb1b0e, 0x51d32c79, 0xd0f6495e, 0x88e8e076,
+ 0x09cd8551},
+ {0x00000000, 0x9b73ead4, 0xed96d3e9, 0x76e5393d, 0x005ca193,
+ 0x9b2f4b47, 0xedca727a, 0x76b998ae, 0x00b94326, 0x9bcaa9f2,
+ 0xed2f90cf, 0x765c7a1b, 0x00e5e2b5, 0x9b960861, 0xed73315c,
+ 0x7600db88, 0x0172864c, 0x9a016c98, 0xece455a5, 0x7797bf71,
+ 0x012e27df, 0x9a5dcd0b, 0xecb8f436, 0x77cb1ee2, 0x01cbc56a,
+ 0x9ab82fbe, 0xec5d1683, 0x772efc57, 0x019764f9, 0x9ae48e2d,
+ 0xec01b710, 0x77725dc4, 0x02e50c98, 0x9996e64c, 0xef73df71,
+ 0x740035a5, 0x02b9ad0b, 0x99ca47df, 0xef2f7ee2, 0x745c9436,
+ 0x025c4fbe, 0x992fa56a, 0xefca9c57, 0x74b97683, 0x0200ee2d,
+ 0x997304f9, 0xef963dc4, 0x74e5d710, 0x03978ad4, 0x98e46000,
+ 0xee01593d, 0x7572b3e9, 0x03cb2b47, 0x98b8c193, 0xee5df8ae,
+ 0x752e127a, 0x032ec9f2, 0x985d2326, 0xeeb81a1b, 0x75cbf0cf,
+ 0x03726861, 0x980182b5, 0xeee4bb88, 0x7597515c, 0x05ca1930,
+ 0x9eb9f3e4, 0xe85ccad9, 0x732f200d, 0x0596b8a3, 0x9ee55277,
+ 0xe8006b4a, 0x7373819e, 0x05735a16, 0x9e00b0c2, 0xe8e589ff,
+ 0x7396632b, 0x052ffb85, 0x9e5c1151, 0xe8b9286c, 0x73cac2b8,
+ 0x04b89f7c, 0x9fcb75a8, 0xe92e4c95, 0x725da641, 0x04e43eef,
+ 0x9f97d43b, 0xe972ed06, 0x720107d2, 0x0401dc5a, 0x9f72368e,
+ 0xe9970fb3, 0x72e4e567, 0x045d7dc9, 0x9f2e971d, 0xe9cbae20,
+ 0x72b844f4, 0x072f15a8, 0x9c5cff7c, 0xeab9c641, 0x71ca2c95,
+ 0x0773b43b, 0x9c005eef, 0xeae567d2, 0x71968d06, 0x0796568e,
+ 0x9ce5bc5a, 0xea008567, 0x71736fb3, 0x07caf71d, 0x9cb91dc9,
+ 0xea5c24f4, 0x712fce20, 0x065d93e4, 0x9d2e7930, 0xebcb400d,
+ 0x70b8aad9, 0x06013277, 0x9d72d8a3, 0xeb97e19e, 0x70e40b4a,
+ 0x06e4d0c2, 0x9d973a16, 0xeb72032b, 0x7001e9ff, 0x06b87151,
+ 0x9dcb9b85, 0xeb2ea2b8, 0x705d486c, 0x0b943260, 0x90e7d8b4,
+ 0xe602e189, 0x7d710b5d, 0x0bc893f3, 0x90bb7927, 0xe65e401a,
+ 0x7d2daace, 0x0b2d7146, 0x905e9b92, 0xe6bba2af, 0x7dc8487b,
+ 0x0b71d0d5, 0x90023a01, 0xe6e7033c, 0x7d94e9e8, 0x0ae6b42c,
+ 0x91955ef8, 0xe77067c5, 0x7c038d11, 0x0aba15bf, 0x91c9ff6b,
+ 0xe72cc656, 0x7c5f2c82, 0x0a5ff70a, 0x912c1dde, 0xe7c924e3,
+ 0x7cbace37, 0x0a035699, 0x9170bc4d, 0xe7958570, 0x7ce66fa4,
+ 0x09713ef8, 0x9202d42c, 0xe4e7ed11, 0x7f9407c5, 0x092d9f6b,
+ 0x925e75bf, 0xe4bb4c82, 0x7fc8a656, 0x09c87dde, 0x92bb970a,
+ 0xe45eae37, 0x7f2d44e3, 0x0994dc4d, 0x92e73699, 0xe4020fa4,
+ 0x7f71e570, 0x0803b8b4, 0x93705260, 0xe5956b5d, 0x7ee68189,
+ 0x085f1927, 0x932cf3f3, 0xe5c9cace, 0x7eba201a, 0x08bafb92,
+ 0x93c91146, 0xe52c287b, 0x7e5fc2af, 0x08e65a01, 0x9395b0d5,
+ 0xe57089e8, 0x7e03633c, 0x0e5e2b50, 0x952dc184, 0xe3c8f8b9,
+ 0x78bb126d, 0x0e028ac3, 0x95716017, 0xe394592a, 0x78e7b3fe,
+ 0x0ee76876, 0x959482a2, 0xe371bb9f, 0x7802514b, 0x0ebbc9e5,
+ 0x95c82331, 0xe32d1a0c, 0x785ef0d8, 0x0f2cad1c, 0x945f47c8,
+ 0xe2ba7ef5, 0x79c99421, 0x0f700c8f, 0x9403e65b, 0xe2e6df66,
+ 0x799535b2, 0x0f95ee3a, 0x94e604ee, 0xe2033dd3, 0x7970d707,
+ 0x0fc94fa9, 0x94baa57d, 0xe25f9c40, 0x792c7694, 0x0cbb27c8,
+ 0x97c8cd1c, 0xe12df421, 0x7a5e1ef5, 0x0ce7865b, 0x97946c8f,
+ 0xe17155b2, 0x7a02bf66, 0x0c0264ee, 0x97718e3a, 0xe194b707,
+ 0x7ae75dd3, 0x0c5ec57d, 0x972d2fa9, 0xe1c81694, 0x7abbfc40,
+ 0x0dc9a184, 0x96ba4b50, 0xe05f726d, 0x7b2c98b9, 0x0d950017,
+ 0x96e6eac3, 0xe003d3fe, 0x7b70392a, 0x0d70e2a2, 0x96030876,
+ 0xe0e6314b, 0x7b95db9f, 0x0d2c4331, 0x965fa9e5, 0xe0ba90d8,
+ 0x7bc97a0c},
+ {0x00000000, 0x172864c0, 0x2e50c980, 0x3978ad40, 0x5ca19300,
+ 0x4b89f7c0, 0x72f15a80, 0x65d93e40, 0xb9432600, 0xae6b42c0,
+ 0x9713ef80, 0x803b8b40, 0xe5e2b500, 0xf2cad1c0, 0xcbb27c80,
+ 0xdc9a1840, 0xa9f74a41, 0xbedf2e81, 0x87a783c1, 0x908fe701,
+ 0xf556d941, 0xe27ebd81, 0xdb0610c1, 0xcc2e7401, 0x10b46c41,
+ 0x079c0881, 0x3ee4a5c1, 0x29ccc101, 0x4c15ff41, 0x5b3d9b81,
+ 0x624536c1, 0x756d5201, 0x889f92c3, 0x9fb7f603, 0xa6cf5b43,
+ 0xb1e73f83, 0xd43e01c3, 0xc3166503, 0xfa6ec843, 0xed46ac83,
+ 0x31dcb4c3, 0x26f4d003, 0x1f8c7d43, 0x08a41983, 0x6d7d27c3,
+ 0x7a554303, 0x432dee43, 0x54058a83, 0x2168d882, 0x3640bc42,
+ 0x0f381102, 0x181075c2, 0x7dc94b82, 0x6ae12f42, 0x53998202,
+ 0x44b1e6c2, 0x982bfe82, 0x8f039a42, 0xb67b3702, 0xa15353c2,
+ 0xc48a6d82, 0xd3a20942, 0xeadaa402, 0xfdf2c0c2, 0xca4e23c7,
+ 0xdd664707, 0xe41eea47, 0xf3368e87, 0x96efb0c7, 0x81c7d407,
+ 0xb8bf7947, 0xaf971d87, 0x730d05c7, 0x64256107, 0x5d5dcc47,
+ 0x4a75a887, 0x2fac96c7, 0x3884f207, 0x01fc5f47, 0x16d43b87,
+ 0x63b96986, 0x74910d46, 0x4de9a006, 0x5ac1c4c6, 0x3f18fa86,
+ 0x28309e46, 0x11483306, 0x066057c6, 0xdafa4f86, 0xcdd22b46,
+ 0xf4aa8606, 0xe382e2c6, 0x865bdc86, 0x9173b846, 0xa80b1506,
+ 0xbf2371c6, 0x42d1b104, 0x55f9d5c4, 0x6c817884, 0x7ba91c44,
+ 0x1e702204, 0x095846c4, 0x3020eb84, 0x27088f44, 0xfb929704,
+ 0xecbaf3c4, 0xd5c25e84, 0xc2ea3a44, 0xa7330404, 0xb01b60c4,
+ 0x8963cd84, 0x9e4ba944, 0xeb26fb45, 0xfc0e9f85, 0xc57632c5,
+ 0xd25e5605, 0xb7876845, 0xa0af0c85, 0x99d7a1c5, 0x8effc505,
+ 0x5265dd45, 0x454db985, 0x7c3514c5, 0x6b1d7005, 0x0ec44e45,
+ 0x19ec2a85, 0x209487c5, 0x37bce305, 0x4fed41cf, 0x58c5250f,
+ 0x61bd884f, 0x7695ec8f, 0x134cd2cf, 0x0464b60f, 0x3d1c1b4f,
+ 0x2a347f8f, 0xf6ae67cf, 0xe186030f, 0xd8feae4f, 0xcfd6ca8f,
+ 0xaa0ff4cf, 0xbd27900f, 0x845f3d4f, 0x9377598f, 0xe61a0b8e,
+ 0xf1326f4e, 0xc84ac20e, 0xdf62a6ce, 0xbabb988e, 0xad93fc4e,
+ 0x94eb510e, 0x83c335ce, 0x5f592d8e, 0x4871494e, 0x7109e40e,
+ 0x662180ce, 0x03f8be8e, 0x14d0da4e, 0x2da8770e, 0x3a8013ce,
+ 0xc772d30c, 0xd05ab7cc, 0xe9221a8c, 0xfe0a7e4c, 0x9bd3400c,
+ 0x8cfb24cc, 0xb583898c, 0xa2abed4c, 0x7e31f50c, 0x691991cc,
+ 0x50613c8c, 0x4749584c, 0x2290660c, 0x35b802cc, 0x0cc0af8c,
+ 0x1be8cb4c, 0x6e85994d, 0x79adfd8d, 0x40d550cd, 0x57fd340d,
+ 0x32240a4d, 0x250c6e8d, 0x1c74c3cd, 0x0b5ca70d, 0xd7c6bf4d,
+ 0xc0eedb8d, 0xf99676cd, 0xeebe120d, 0x8b672c4d, 0x9c4f488d,
+ 0xa537e5cd, 0xb21f810d, 0x85a36208, 0x928b06c8, 0xabf3ab88,
+ 0xbcdbcf48, 0xd902f108, 0xce2a95c8, 0xf7523888, 0xe07a5c48,
+ 0x3ce04408, 0x2bc820c8, 0x12b08d88, 0x0598e948, 0x6041d708,
+ 0x7769b3c8, 0x4e111e88, 0x59397a48, 0x2c542849, 0x3b7c4c89,
+ 0x0204e1c9, 0x152c8509, 0x70f5bb49, 0x67dddf89, 0x5ea572c9,
+ 0x498d1609, 0x95170e49, 0x823f6a89, 0xbb47c7c9, 0xac6fa309,
+ 0xc9b69d49, 0xde9ef989, 0xe7e654c9, 0xf0ce3009, 0x0d3cf0cb,
+ 0x1a14940b, 0x236c394b, 0x34445d8b, 0x519d63cb, 0x46b5070b,
+ 0x7fcdaa4b, 0x68e5ce8b, 0xb47fd6cb, 0xa357b20b, 0x9a2f1f4b,
+ 0x8d077b8b, 0xe8de45cb, 0xfff6210b, 0xc68e8c4b, 0xd1a6e88b,
+ 0xa4cbba8a, 0xb3e3de4a, 0x8a9b730a, 0x9db317ca, 0xf86a298a,
+ 0xef424d4a, 0xd63ae00a, 0xc11284ca, 0x1d889c8a, 0x0aa0f84a,
+ 0x33d8550a, 0x24f031ca, 0x41290f8a, 0x56016b4a, 0x6f79c60a,
+ 0x7851a2ca},
+ {0x00000000, 0x9fda839e, 0xe4c4017d, 0x7b1e82e3, 0x12f904bb,
+ 0x8d238725, 0xf63d05c6, 0x69e78658, 0x25f20976, 0xba288ae8,
+ 0xc136080b, 0x5eec8b95, 0x370b0dcd, 0xa8d18e53, 0xd3cf0cb0,
+ 0x4c158f2e, 0x4be412ec, 0xd43e9172, 0xaf201391, 0x30fa900f,
+ 0x591d1657, 0xc6c795c9, 0xbdd9172a, 0x220394b4, 0x6e161b9a,
+ 0xf1cc9804, 0x8ad21ae7, 0x15089979, 0x7cef1f21, 0xe3359cbf,
+ 0x982b1e5c, 0x07f19dc2, 0x97c825d8, 0x0812a646, 0x730c24a5,
+ 0xecd6a73b, 0x85312163, 0x1aeba2fd, 0x61f5201e, 0xfe2fa380,
+ 0xb23a2cae, 0x2de0af30, 0x56fe2dd3, 0xc924ae4d, 0xa0c32815,
+ 0x3f19ab8b, 0x44072968, 0xdbddaaf6, 0xdc2c3734, 0x43f6b4aa,
+ 0x38e83649, 0xa732b5d7, 0xced5338f, 0x510fb011, 0x2a1132f2,
+ 0xb5cbb16c, 0xf9de3e42, 0x6604bddc, 0x1d1a3f3f, 0x82c0bca1,
+ 0xeb273af9, 0x74fdb967, 0x0fe33b84, 0x9039b81a, 0xf4e14df1,
+ 0x6b3bce6f, 0x10254c8c, 0x8fffcf12, 0xe618494a, 0x79c2cad4,
+ 0x02dc4837, 0x9d06cba9, 0xd1134487, 0x4ec9c719, 0x35d745fa,
+ 0xaa0dc664, 0xc3ea403c, 0x5c30c3a2, 0x272e4141, 0xb8f4c2df,
+ 0xbf055f1d, 0x20dfdc83, 0x5bc15e60, 0xc41bddfe, 0xadfc5ba6,
+ 0x3226d838, 0x49385adb, 0xd6e2d945, 0x9af7566b, 0x052dd5f5,
+ 0x7e335716, 0xe1e9d488, 0x880e52d0, 0x17d4d14e, 0x6cca53ad,
+ 0xf310d033, 0x63296829, 0xfcf3ebb7, 0x87ed6954, 0x1837eaca,
+ 0x71d06c92, 0xee0aef0c, 0x95146def, 0x0aceee71, 0x46db615f,
+ 0xd901e2c1, 0xa21f6022, 0x3dc5e3bc, 0x542265e4, 0xcbf8e67a,
+ 0xb0e66499, 0x2f3ce707, 0x28cd7ac5, 0xb717f95b, 0xcc097bb8,
+ 0x53d3f826, 0x3a347e7e, 0xa5eefde0, 0xdef07f03, 0x412afc9d,
+ 0x0d3f73b3, 0x92e5f02d, 0xe9fb72ce, 0x7621f150, 0x1fc67708,
+ 0x801cf496, 0xfb027675, 0x64d8f5eb, 0x32b39da3, 0xad691e3d,
+ 0xd6779cde, 0x49ad1f40, 0x204a9918, 0xbf901a86, 0xc48e9865,
+ 0x5b541bfb, 0x174194d5, 0x889b174b, 0xf38595a8, 0x6c5f1636,
+ 0x05b8906e, 0x9a6213f0, 0xe17c9113, 0x7ea6128d, 0x79578f4f,
+ 0xe68d0cd1, 0x9d938e32, 0x02490dac, 0x6bae8bf4, 0xf474086a,
+ 0x8f6a8a89, 0x10b00917, 0x5ca58639, 0xc37f05a7, 0xb8618744,
+ 0x27bb04da, 0x4e5c8282, 0xd186011c, 0xaa9883ff, 0x35420061,
+ 0xa57bb87b, 0x3aa13be5, 0x41bfb906, 0xde653a98, 0xb782bcc0,
+ 0x28583f5e, 0x5346bdbd, 0xcc9c3e23, 0x8089b10d, 0x1f533293,
+ 0x644db070, 0xfb9733ee, 0x9270b5b6, 0x0daa3628, 0x76b4b4cb,
+ 0xe96e3755, 0xee9faa97, 0x71452909, 0x0a5babea, 0x95812874,
+ 0xfc66ae2c, 0x63bc2db2, 0x18a2af51, 0x87782ccf, 0xcb6da3e1,
+ 0x54b7207f, 0x2fa9a29c, 0xb0732102, 0xd994a75a, 0x464e24c4,
+ 0x3d50a627, 0xa28a25b9, 0xc652d052, 0x598853cc, 0x2296d12f,
+ 0xbd4c52b1, 0xd4abd4e9, 0x4b715777, 0x306fd594, 0xafb5560a,
+ 0xe3a0d924, 0x7c7a5aba, 0x0764d859, 0x98be5bc7, 0xf159dd9f,
+ 0x6e835e01, 0x159ddce2, 0x8a475f7c, 0x8db6c2be, 0x126c4120,
+ 0x6972c3c3, 0xf6a8405d, 0x9f4fc605, 0x0095459b, 0x7b8bc778,
+ 0xe45144e6, 0xa844cbc8, 0x379e4856, 0x4c80cab5, 0xd35a492b,
+ 0xbabdcf73, 0x25674ced, 0x5e79ce0e, 0xc1a34d90, 0x519af58a,
+ 0xce407614, 0xb55ef4f7, 0x2a847769, 0x4363f131, 0xdcb972af,
+ 0xa7a7f04c, 0x387d73d2, 0x7468fcfc, 0xebb27f62, 0x90acfd81,
+ 0x0f767e1f, 0x6691f847, 0xf94b7bd9, 0x8255f93a, 0x1d8f7aa4,
+ 0x1a7ee766, 0x85a464f8, 0xfebae61b, 0x61606585, 0x0887e3dd,
+ 0x975d6043, 0xec43e2a0, 0x7399613e, 0x3f8cee10, 0xa0566d8e,
+ 0xdb48ef6d, 0x44926cf3, 0x2d75eaab, 0xb2af6935, 0xc9b1ebd6,
+ 0x566b6848}};
+
+local const z_word_t FAR crc_braid_big_table[][256] = {
+ {0x00000000, 0x9e83da9f, 0x7d01c4e4, 0xe3821e7b, 0xbb04f912,
+ 0x2587238d, 0xc6053df6, 0x5886e769, 0x7609f225, 0xe88a28ba,
+ 0x0b0836c1, 0x958bec5e, 0xcd0d0b37, 0x538ed1a8, 0xb00ccfd3,
+ 0x2e8f154c, 0xec12e44b, 0x72913ed4, 0x911320af, 0x0f90fa30,
+ 0x57161d59, 0xc995c7c6, 0x2a17d9bd, 0xb4940322, 0x9a1b166e,
+ 0x0498ccf1, 0xe71ad28a, 0x79990815, 0x211fef7c, 0xbf9c35e3,
+ 0x5c1e2b98, 0xc29df107, 0xd825c897, 0x46a61208, 0xa5240c73,
+ 0x3ba7d6ec, 0x63213185, 0xfda2eb1a, 0x1e20f561, 0x80a32ffe,
+ 0xae2c3ab2, 0x30afe02d, 0xd32dfe56, 0x4dae24c9, 0x1528c3a0,
+ 0x8bab193f, 0x68290744, 0xf6aadddb, 0x34372cdc, 0xaab4f643,
+ 0x4936e838, 0xd7b532a7, 0x8f33d5ce, 0x11b00f51, 0xf232112a,
+ 0x6cb1cbb5, 0x423edef9, 0xdcbd0466, 0x3f3f1a1d, 0xa1bcc082,
+ 0xf93a27eb, 0x67b9fd74, 0x843be30f, 0x1ab83990, 0xf14de1f4,
+ 0x6fce3b6b, 0x8c4c2510, 0x12cfff8f, 0x4a4918e6, 0xd4cac279,
+ 0x3748dc02, 0xa9cb069d, 0x874413d1, 0x19c7c94e, 0xfa45d735,
+ 0x64c60daa, 0x3c40eac3, 0xa2c3305c, 0x41412e27, 0xdfc2f4b8,
+ 0x1d5f05bf, 0x83dcdf20, 0x605ec15b, 0xfedd1bc4, 0xa65bfcad,
+ 0x38d82632, 0xdb5a3849, 0x45d9e2d6, 0x6b56f79a, 0xf5d52d05,
+ 0x1657337e, 0x88d4e9e1, 0xd0520e88, 0x4ed1d417, 0xad53ca6c,
+ 0x33d010f3, 0x29682963, 0xb7ebf3fc, 0x5469ed87, 0xcaea3718,
+ 0x926cd071, 0x0cef0aee, 0xef6d1495, 0x71eece0a, 0x5f61db46,
+ 0xc1e201d9, 0x22601fa2, 0xbce3c53d, 0xe4652254, 0x7ae6f8cb,
+ 0x9964e6b0, 0x07e73c2f, 0xc57acd28, 0x5bf917b7, 0xb87b09cc,
+ 0x26f8d353, 0x7e7e343a, 0xe0fdeea5, 0x037ff0de, 0x9dfc2a41,
+ 0xb3733f0d, 0x2df0e592, 0xce72fbe9, 0x50f12176, 0x0877c61f,
+ 0x96f41c80, 0x757602fb, 0xebf5d864, 0xa39db332, 0x3d1e69ad,
+ 0xde9c77d6, 0x401fad49, 0x18994a20, 0x861a90bf, 0x65988ec4,
+ 0xfb1b545b, 0xd5944117, 0x4b179b88, 0xa89585f3, 0x36165f6c,
+ 0x6e90b805, 0xf013629a, 0x13917ce1, 0x8d12a67e, 0x4f8f5779,
+ 0xd10c8de6, 0x328e939d, 0xac0d4902, 0xf48bae6b, 0x6a0874f4,
+ 0x898a6a8f, 0x1709b010, 0x3986a55c, 0xa7057fc3, 0x448761b8,
+ 0xda04bb27, 0x82825c4e, 0x1c0186d1, 0xff8398aa, 0x61004235,
+ 0x7bb87ba5, 0xe53ba13a, 0x06b9bf41, 0x983a65de, 0xc0bc82b7,
+ 0x5e3f5828, 0xbdbd4653, 0x233e9ccc, 0x0db18980, 0x9332531f,
+ 0x70b04d64, 0xee3397fb, 0xb6b57092, 0x2836aa0d, 0xcbb4b476,
+ 0x55376ee9, 0x97aa9fee, 0x09294571, 0xeaab5b0a, 0x74288195,
+ 0x2cae66fc, 0xb22dbc63, 0x51afa218, 0xcf2c7887, 0xe1a36dcb,
+ 0x7f20b754, 0x9ca2a92f, 0x022173b0, 0x5aa794d9, 0xc4244e46,
+ 0x27a6503d, 0xb9258aa2, 0x52d052c6, 0xcc538859, 0x2fd19622,
+ 0xb1524cbd, 0xe9d4abd4, 0x7757714b, 0x94d56f30, 0x0a56b5af,
+ 0x24d9a0e3, 0xba5a7a7c, 0x59d86407, 0xc75bbe98, 0x9fdd59f1,
+ 0x015e836e, 0xe2dc9d15, 0x7c5f478a, 0xbec2b68d, 0x20416c12,
+ 0xc3c37269, 0x5d40a8f6, 0x05c64f9f, 0x9b459500, 0x78c78b7b,
+ 0xe64451e4, 0xc8cb44a8, 0x56489e37, 0xb5ca804c, 0x2b495ad3,
+ 0x73cfbdba, 0xed4c6725, 0x0ece795e, 0x904da3c1, 0x8af59a51,
+ 0x147640ce, 0xf7f45eb5, 0x6977842a, 0x31f16343, 0xaf72b9dc,
+ 0x4cf0a7a7, 0xd2737d38, 0xfcfc6874, 0x627fb2eb, 0x81fdac90,
+ 0x1f7e760f, 0x47f89166, 0xd97b4bf9, 0x3af95582, 0xa47a8f1d,
+ 0x66e77e1a, 0xf864a485, 0x1be6bafe, 0x85656061, 0xdde38708,
+ 0x43605d97, 0xa0e243ec, 0x3e619973, 0x10ee8c3f, 0x8e6d56a0,
+ 0x6def48db, 0xf36c9244, 0xabea752d, 0x3569afb2, 0xd6ebb1c9,
+ 0x48686b56},
+ {0x00000000, 0xc0642817, 0x80c9502e, 0x40ad7839, 0x0093a15c,
+ 0xc0f7894b, 0x805af172, 0x403ed965, 0x002643b9, 0xc0426bae,
+ 0x80ef1397, 0x408b3b80, 0x00b5e2e5, 0xc0d1caf2, 0x807cb2cb,
+ 0x40189adc, 0x414af7a9, 0x812edfbe, 0xc183a787, 0x01e78f90,
+ 0x41d956f5, 0x81bd7ee2, 0xc11006db, 0x01742ecc, 0x416cb410,
+ 0x81089c07, 0xc1a5e43e, 0x01c1cc29, 0x41ff154c, 0x819b3d5b,
+ 0xc1364562, 0x01526d75, 0xc3929f88, 0x03f6b79f, 0x435bcfa6,
+ 0x833fe7b1, 0xc3013ed4, 0x036516c3, 0x43c86efa, 0x83ac46ed,
+ 0xc3b4dc31, 0x03d0f426, 0x437d8c1f, 0x8319a408, 0xc3277d6d,
+ 0x0343557a, 0x43ee2d43, 0x838a0554, 0x82d86821, 0x42bc4036,
+ 0x0211380f, 0xc2751018, 0x824bc97d, 0x422fe16a, 0x02829953,
+ 0xc2e6b144, 0x82fe2b98, 0x429a038f, 0x02377bb6, 0xc25353a1,
+ 0x826d8ac4, 0x4209a2d3, 0x02a4daea, 0xc2c0f2fd, 0xc7234eca,
+ 0x074766dd, 0x47ea1ee4, 0x878e36f3, 0xc7b0ef96, 0x07d4c781,
+ 0x4779bfb8, 0x871d97af, 0xc7050d73, 0x07612564, 0x47cc5d5d,
+ 0x87a8754a, 0xc796ac2f, 0x07f28438, 0x475ffc01, 0x873bd416,
+ 0x8669b963, 0x460d9174, 0x06a0e94d, 0xc6c4c15a, 0x86fa183f,
+ 0x469e3028, 0x06334811, 0xc6576006, 0x864ffada, 0x462bd2cd,
+ 0x0686aaf4, 0xc6e282e3, 0x86dc5b86, 0x46b87391, 0x06150ba8,
+ 0xc67123bf, 0x04b1d142, 0xc4d5f955, 0x8478816c, 0x441ca97b,
+ 0x0422701e, 0xc4465809, 0x84eb2030, 0x448f0827, 0x049792fb,
+ 0xc4f3baec, 0x845ec2d5, 0x443aeac2, 0x040433a7, 0xc4601bb0,
+ 0x84cd6389, 0x44a94b9e, 0x45fb26eb, 0x859f0efc, 0xc53276c5,
+ 0x05565ed2, 0x456887b7, 0x850cafa0, 0xc5a1d799, 0x05c5ff8e,
+ 0x45dd6552, 0x85b94d45, 0xc514357c, 0x05701d6b, 0x454ec40e,
+ 0x852aec19, 0xc5879420, 0x05e3bc37, 0xcf41ed4f, 0x0f25c558,
+ 0x4f88bd61, 0x8fec9576, 0xcfd24c13, 0x0fb66404, 0x4f1b1c3d,
+ 0x8f7f342a, 0xcf67aef6, 0x0f0386e1, 0x4faefed8, 0x8fcad6cf,
+ 0xcff40faa, 0x0f9027bd, 0x4f3d5f84, 0x8f597793, 0x8e0b1ae6,
+ 0x4e6f32f1, 0x0ec24ac8, 0xcea662df, 0x8e98bbba, 0x4efc93ad,
+ 0x0e51eb94, 0xce35c383, 0x8e2d595f, 0x4e497148, 0x0ee40971,
+ 0xce802166, 0x8ebef803, 0x4edad014, 0x0e77a82d, 0xce13803a,
+ 0x0cd372c7, 0xccb75ad0, 0x8c1a22e9, 0x4c7e0afe, 0x0c40d39b,
+ 0xcc24fb8c, 0x8c8983b5, 0x4cedaba2, 0x0cf5317e, 0xcc911969,
+ 0x8c3c6150, 0x4c584947, 0x0c669022, 0xcc02b835, 0x8cafc00c,
+ 0x4ccbe81b, 0x4d99856e, 0x8dfdad79, 0xcd50d540, 0x0d34fd57,
+ 0x4d0a2432, 0x8d6e0c25, 0xcdc3741c, 0x0da75c0b, 0x4dbfc6d7,
+ 0x8ddbeec0, 0xcd7696f9, 0x0d12beee, 0x4d2c678b, 0x8d484f9c,
+ 0xcde537a5, 0x0d811fb2, 0x0862a385, 0xc8068b92, 0x88abf3ab,
+ 0x48cfdbbc, 0x08f102d9, 0xc8952ace, 0x883852f7, 0x485c7ae0,
+ 0x0844e03c, 0xc820c82b, 0x888db012, 0x48e99805, 0x08d74160,
+ 0xc8b36977, 0x881e114e, 0x487a3959, 0x4928542c, 0x894c7c3b,
+ 0xc9e10402, 0x09852c15, 0x49bbf570, 0x89dfdd67, 0xc972a55e,
+ 0x09168d49, 0x490e1795, 0x896a3f82, 0xc9c747bb, 0x09a36fac,
+ 0x499db6c9, 0x89f99ede, 0xc954e6e7, 0x0930cef0, 0xcbf03c0d,
+ 0x0b94141a, 0x4b396c23, 0x8b5d4434, 0xcb639d51, 0x0b07b546,
+ 0x4baacd7f, 0x8bcee568, 0xcbd67fb4, 0x0bb257a3, 0x4b1f2f9a,
+ 0x8b7b078d, 0xcb45dee8, 0x0b21f6ff, 0x4b8c8ec6, 0x8be8a6d1,
+ 0x8abacba4, 0x4adee3b3, 0x0a739b8a, 0xca17b39d, 0x8a296af8,
+ 0x4a4d42ef, 0x0ae03ad6, 0xca8412c1, 0x8a9c881d, 0x4af8a00a,
+ 0x0a55d833, 0xca31f024, 0x8a0f2941, 0x4a6b0156, 0x0ac6796f,
+ 0xcaa25178},
+ {0x00000000, 0xd4ea739b, 0xe9d396ed, 0x3d39e576, 0x93a15c00,
+ 0x474b2f9b, 0x7a72caed, 0xae98b976, 0x2643b900, 0xf2a9ca9b,
+ 0xcf902fed, 0x1b7a5c76, 0xb5e2e500, 0x6108969b, 0x5c3173ed,
+ 0x88db0076, 0x4c867201, 0x986c019a, 0xa555e4ec, 0x71bf9777,
+ 0xdf272e01, 0x0bcd5d9a, 0x36f4b8ec, 0xe21ecb77, 0x6ac5cb01,
+ 0xbe2fb89a, 0x83165dec, 0x57fc2e77, 0xf9649701, 0x2d8ee49a,
+ 0x10b701ec, 0xc45d7277, 0x980ce502, 0x4ce69699, 0x71df73ef,
+ 0xa5350074, 0x0badb902, 0xdf47ca99, 0xe27e2fef, 0x36945c74,
+ 0xbe4f5c02, 0x6aa52f99, 0x579ccaef, 0x8376b974, 0x2dee0002,
+ 0xf9047399, 0xc43d96ef, 0x10d7e574, 0xd48a9703, 0x0060e498,
+ 0x3d5901ee, 0xe9b37275, 0x472bcb03, 0x93c1b898, 0xaef85dee,
+ 0x7a122e75, 0xf2c92e03, 0x26235d98, 0x1b1ab8ee, 0xcff0cb75,
+ 0x61687203, 0xb5820198, 0x88bbe4ee, 0x5c519775, 0x3019ca05,
+ 0xe4f3b99e, 0xd9ca5ce8, 0x0d202f73, 0xa3b89605, 0x7752e59e,
+ 0x4a6b00e8, 0x9e817373, 0x165a7305, 0xc2b0009e, 0xff89e5e8,
+ 0x2b639673, 0x85fb2f05, 0x51115c9e, 0x6c28b9e8, 0xb8c2ca73,
+ 0x7c9fb804, 0xa875cb9f, 0x954c2ee9, 0x41a65d72, 0xef3ee404,
+ 0x3bd4979f, 0x06ed72e9, 0xd2070172, 0x5adc0104, 0x8e36729f,
+ 0xb30f97e9, 0x67e5e472, 0xc97d5d04, 0x1d972e9f, 0x20aecbe9,
+ 0xf444b872, 0xa8152f07, 0x7cff5c9c, 0x41c6b9ea, 0x952cca71,
+ 0x3bb47307, 0xef5e009c, 0xd267e5ea, 0x068d9671, 0x8e569607,
+ 0x5abce59c, 0x678500ea, 0xb36f7371, 0x1df7ca07, 0xc91db99c,
+ 0xf4245cea, 0x20ce2f71, 0xe4935d06, 0x30792e9d, 0x0d40cbeb,
+ 0xd9aab870, 0x77320106, 0xa3d8729d, 0x9ee197eb, 0x4a0be470,
+ 0xc2d0e406, 0x163a979d, 0x2b0372eb, 0xffe90170, 0x5171b806,
+ 0x859bcb9d, 0xb8a22eeb, 0x6c485d70, 0x6032940b, 0xb4d8e790,
+ 0x89e102e6, 0x5d0b717d, 0xf393c80b, 0x2779bb90, 0x1a405ee6,
+ 0xceaa2d7d, 0x46712d0b, 0x929b5e90, 0xafa2bbe6, 0x7b48c87d,
+ 0xd5d0710b, 0x013a0290, 0x3c03e7e6, 0xe8e9947d, 0x2cb4e60a,
+ 0xf85e9591, 0xc56770e7, 0x118d037c, 0xbf15ba0a, 0x6bffc991,
+ 0x56c62ce7, 0x822c5f7c, 0x0af75f0a, 0xde1d2c91, 0xe324c9e7,
+ 0x37ceba7c, 0x9956030a, 0x4dbc7091, 0x708595e7, 0xa46fe67c,
+ 0xf83e7109, 0x2cd40292, 0x11ede7e4, 0xc507947f, 0x6b9f2d09,
+ 0xbf755e92, 0x824cbbe4, 0x56a6c87f, 0xde7dc809, 0x0a97bb92,
+ 0x37ae5ee4, 0xe3442d7f, 0x4ddc9409, 0x9936e792, 0xa40f02e4,
+ 0x70e5717f, 0xb4b80308, 0x60527093, 0x5d6b95e5, 0x8981e67e,
+ 0x27195f08, 0xf3f32c93, 0xcecac9e5, 0x1a20ba7e, 0x92fbba08,
+ 0x4611c993, 0x7b282ce5, 0xafc25f7e, 0x015ae608, 0xd5b09593,
+ 0xe88970e5, 0x3c63037e, 0x502b5e0e, 0x84c12d95, 0xb9f8c8e3,
+ 0x6d12bb78, 0xc38a020e, 0x17607195, 0x2a5994e3, 0xfeb3e778,
+ 0x7668e70e, 0xa2829495, 0x9fbb71e3, 0x4b510278, 0xe5c9bb0e,
+ 0x3123c895, 0x0c1a2de3, 0xd8f05e78, 0x1cad2c0f, 0xc8475f94,
+ 0xf57ebae2, 0x2194c979, 0x8f0c700f, 0x5be60394, 0x66dfe6e2,
+ 0xb2359579, 0x3aee950f, 0xee04e694, 0xd33d03e2, 0x07d77079,
+ 0xa94fc90f, 0x7da5ba94, 0x409c5fe2, 0x94762c79, 0xc827bb0c,
+ 0x1ccdc897, 0x21f42de1, 0xf51e5e7a, 0x5b86e70c, 0x8f6c9497,
+ 0xb25571e1, 0x66bf027a, 0xee64020c, 0x3a8e7197, 0x07b794e1,
+ 0xd35de77a, 0x7dc55e0c, 0xa92f2d97, 0x9416c8e1, 0x40fcbb7a,
+ 0x84a1c90d, 0x504bba96, 0x6d725fe0, 0xb9982c7b, 0x1700950d,
+ 0xc3eae696, 0xfed303e0, 0x2a39707b, 0xa2e2700d, 0x76080396,
+ 0x4b31e6e0, 0x9fdb957b, 0x31432c0d, 0xe5a95f96, 0xd890bae0,
+ 0x0c7ac97b},
+ {0x00000000, 0x27652581, 0x0fcc3bd9, 0x28a91e58, 0x5f9e0669,
+ 0x78fb23e8, 0x50523db0, 0x77371831, 0xbe3c0dd2, 0x99592853,
+ 0xb1f0360b, 0x9695138a, 0xe1a20bbb, 0xc6c72e3a, 0xee6e3062,
+ 0xc90b15e3, 0x3d7f6b7f, 0x1a1a4efe, 0x32b350a6, 0x15d67527,
+ 0x62e16d16, 0x45844897, 0x6d2d56cf, 0x4a48734e, 0x834366ad,
+ 0xa426432c, 0x8c8f5d74, 0xabea78f5, 0xdcdd60c4, 0xfbb84545,
+ 0xd3115b1d, 0xf4747e9c, 0x7afed6fe, 0x5d9bf37f, 0x7532ed27,
+ 0x5257c8a6, 0x2560d097, 0x0205f516, 0x2aaceb4e, 0x0dc9cecf,
+ 0xc4c2db2c, 0xe3a7fead, 0xcb0ee0f5, 0xec6bc574, 0x9b5cdd45,
+ 0xbc39f8c4, 0x9490e69c, 0xb3f5c31d, 0x4781bd81, 0x60e49800,
+ 0x484d8658, 0x6f28a3d9, 0x181fbbe8, 0x3f7a9e69, 0x17d38031,
+ 0x30b6a5b0, 0xf9bdb053, 0xded895d2, 0xf6718b8a, 0xd114ae0b,
+ 0xa623b63a, 0x814693bb, 0xa9ef8de3, 0x8e8aa862, 0xb5fadc26,
+ 0x929ff9a7, 0xba36e7ff, 0x9d53c27e, 0xea64da4f, 0xcd01ffce,
+ 0xe5a8e196, 0xc2cdc417, 0x0bc6d1f4, 0x2ca3f475, 0x040aea2d,
+ 0x236fcfac, 0x5458d79d, 0x733df21c, 0x5b94ec44, 0x7cf1c9c5,
+ 0x8885b759, 0xafe092d8, 0x87498c80, 0xa02ca901, 0xd71bb130,
+ 0xf07e94b1, 0xd8d78ae9, 0xffb2af68, 0x36b9ba8b, 0x11dc9f0a,
+ 0x39758152, 0x1e10a4d3, 0x6927bce2, 0x4e429963, 0x66eb873b,
+ 0x418ea2ba, 0xcf040ad8, 0xe8612f59, 0xc0c83101, 0xe7ad1480,
+ 0x909a0cb1, 0xb7ff2930, 0x9f563768, 0xb83312e9, 0x7138070a,
+ 0x565d228b, 0x7ef43cd3, 0x59911952, 0x2ea60163, 0x09c324e2,
+ 0x216a3aba, 0x060f1f3b, 0xf27b61a7, 0xd51e4426, 0xfdb75a7e,
+ 0xdad27fff, 0xade567ce, 0x8a80424f, 0xa2295c17, 0x854c7996,
+ 0x4c476c75, 0x6b2249f4, 0x438b57ac, 0x64ee722d, 0x13d96a1c,
+ 0x34bc4f9d, 0x1c1551c5, 0x3b707444, 0x6af5b94d, 0x4d909ccc,
+ 0x65398294, 0x425ca715, 0x356bbf24, 0x120e9aa5, 0x3aa784fd,
+ 0x1dc2a17c, 0xd4c9b49f, 0xf3ac911e, 0xdb058f46, 0xfc60aac7,
+ 0x8b57b2f6, 0xac329777, 0x849b892f, 0xa3feacae, 0x578ad232,
+ 0x70eff7b3, 0x5846e9eb, 0x7f23cc6a, 0x0814d45b, 0x2f71f1da,
+ 0x07d8ef82, 0x20bdca03, 0xe9b6dfe0, 0xced3fa61, 0xe67ae439,
+ 0xc11fc1b8, 0xb628d989, 0x914dfc08, 0xb9e4e250, 0x9e81c7d1,
+ 0x100b6fb3, 0x376e4a32, 0x1fc7546a, 0x38a271eb, 0x4f9569da,
+ 0x68f04c5b, 0x40595203, 0x673c7782, 0xae376261, 0x895247e0,
+ 0xa1fb59b8, 0x869e7c39, 0xf1a96408, 0xd6cc4189, 0xfe655fd1,
+ 0xd9007a50, 0x2d7404cc, 0x0a11214d, 0x22b83f15, 0x05dd1a94,
+ 0x72ea02a5, 0x558f2724, 0x7d26397c, 0x5a431cfd, 0x9348091e,
+ 0xb42d2c9f, 0x9c8432c7, 0xbbe11746, 0xccd60f77, 0xebb32af6,
+ 0xc31a34ae, 0xe47f112f, 0xdf0f656b, 0xf86a40ea, 0xd0c35eb2,
+ 0xf7a67b33, 0x80916302, 0xa7f44683, 0x8f5d58db, 0xa8387d5a,
+ 0x613368b9, 0x46564d38, 0x6eff5360, 0x499a76e1, 0x3ead6ed0,
+ 0x19c84b51, 0x31615509, 0x16047088, 0xe2700e14, 0xc5152b95,
+ 0xedbc35cd, 0xcad9104c, 0xbdee087d, 0x9a8b2dfc, 0xb22233a4,
+ 0x95471625, 0x5c4c03c6, 0x7b292647, 0x5380381f, 0x74e51d9e,
+ 0x03d205af, 0x24b7202e, 0x0c1e3e76, 0x2b7b1bf7, 0xa5f1b395,
+ 0x82949614, 0xaa3d884c, 0x8d58adcd, 0xfa6fb5fc, 0xdd0a907d,
+ 0xf5a38e25, 0xd2c6aba4, 0x1bcdbe47, 0x3ca89bc6, 0x1401859e,
+ 0x3364a01f, 0x4453b82e, 0x63369daf, 0x4b9f83f7, 0x6cfaa676,
+ 0x988ed8ea, 0xbfebfd6b, 0x9742e333, 0xb027c6b2, 0xc710de83,
+ 0xe075fb02, 0xc8dce55a, 0xefb9c0db, 0x26b2d538, 0x01d7f0b9,
+ 0x297eeee1, 0x0e1bcb60, 0x792cd351, 0x5e49f6d0, 0x76e0e888,
+ 0x5185cd09}};
+
+#endif
+
+#endif
+
+#endif
+
+local const z_crc_t FAR x2n_table[] = {
+ 0x40000000, 0x20000000, 0x08000000, 0x00800000, 0x00008000,
+ 0xedb88320, 0xb1e6b092, 0xa06a2517, 0xed627dae, 0x88d14467,
+ 0xd7bbfe6a, 0xec447f11, 0x8e7ea170, 0x6427800e, 0x4d47bae0,
+ 0x09fe548f, 0x83852d0f, 0x30362f1a, 0x7b5a9cc3, 0x31fec169,
+ 0x9fec022a, 0x6c8dedc4, 0x15d6874d, 0x5fde7a4e, 0xbad90e37,
+ 0x2e4e5eef, 0x4eaba214, 0xa8a472c0, 0x429a969e, 0x148d302a,
+ 0xc40ba6d0, 0xc4e22c3c};
diff --git a/zlib/deflate.c b/zlib/deflate.c
index 586cd1556b8..799fb93cc04 100644
--- a/zlib/deflate.c
+++ b/zlib/deflate.c
@@ -1,5 +1,5 @@
/* deflate.c -- compress data using the deflation algorithm
- * Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler
+ * Copyright (C) 1995-2022 Jean-loup Gailly and Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -47,12 +47,12 @@
*
*/
-/* @(#) $Id: deflate.c,v 1.1.1.2 2002/03/11 21:53:23 tromey Exp $ */
+/* @(#) $Id$ */
#include "deflate.h"
const char deflate_copyright[] =
- " deflate 1.2.11 Copyright 1995-2017 Jean-loup Gailly and Mark Adler ";
+ " deflate 1.2.12 Copyright 1995-2022 Jean-loup Gailly and Mark Adler ";
/*
If you use the zlib library in a product, an acknowledgment is welcome
in the documentation of your product. If for some reason you cannot
@@ -190,8 +190,11 @@ local const config configuration_table[10] = {
* prev[] will be initialized on the fly.
*/
#define CLEAR_HASH(s) \
- s->head[s->hash_size-1] = NIL; \
- zmemzero((Bytef *)s->head, (unsigned)(s->hash_size-1)*sizeof(*s->head));
+ do { \
+ s->head[s->hash_size-1] = NIL; \
+ zmemzero((Bytef *)s->head, \
+ (unsigned)(s->hash_size-1)*sizeof(*s->head)); \
+ } while (0)
/* ===========================================================================
* Slide the hash table when sliding the window down (could be avoided with 32
@@ -252,11 +255,6 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy,
int wrap = 1;
static const char my_version[] = ZLIB_VERSION;
- ushf *overlay;
- /* We overlay pending_buf and d_buf+l_buf. This works since the average
- * output size for (length,distance) codes is <= 24 bits.
- */
-
if (version == Z_NULL || version[0] != my_version[0] ||
stream_size != sizeof(z_stream)) {
return Z_VERSION_ERROR;
@@ -326,9 +324,47 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy,
s->lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */
- overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);
- s->pending_buf = (uchf *) overlay;
- s->pending_buf_size = (ulg)s->lit_bufsize * (sizeof(ush)+2L);
+ /* We overlay pending_buf and sym_buf. This works since the average size
+ * for length/distance pairs over any compressed block is assured to be 31
+ * bits or less.
+ *
+ * Analysis: The longest fixed codes are a length code of 8 bits plus 5
+ * extra bits, for lengths 131 to 257. The longest fixed distance codes are
+ * 5 bits plus 13 extra bits, for distances 16385 to 32768. The longest
+ * possible fixed-codes length/distance pair is then 31 bits total.
+ *
+ * sym_buf starts one-fourth of the way into pending_buf. So there are
+ * three bytes in sym_buf for every four bytes in pending_buf. Each symbol
+ * in sym_buf is three bytes -- two for the distance and one for the
+ * literal/length. As each symbol is consumed, the pointer to the next
+ * sym_buf value to read moves forward three bytes. From that symbol, up to
+ * 31 bits are written to pending_buf. The closest the written pending_buf
+ * bits gets to the next sym_buf symbol to read is just before the last
+ * code is written. At that time, 31*(n-2) bits have been written, just
+ * after 24*(n-2) bits have been consumed from sym_buf. sym_buf starts at
+ * 8*n bits into pending_buf. (Note that the symbol buffer fills when n-1
+ * symbols are written.) The closest the writing gets to what is unread is
+ * then n+14 bits. Here n is lit_bufsize, which is 16384 by default, and
+ * can range from 128 to 32768.
+ *
+ * Therefore, at a minimum, there are 142 bits of space between what is
+ * written and what is read in the overlain buffers, so the symbols cannot
+ * be overwritten by the compressed data. That space is actually 139 bits,
+ * due to the three-bit fixed-code block header.
+ *
+ * That covers the case where either Z_FIXED is specified, forcing fixed
+ * codes, or when the use of fixed codes is chosen, because that choice
+ * results in a smaller compressed block than dynamic codes. That latter
+ * condition then assures that the above analysis also covers all dynamic
+ * blocks. A dynamic-code block will only be chosen to be emitted if it has
+ * fewer bits than a fixed-code block would for the same set of symbols.
+ * Therefore its average symbol length is assured to be less than 31. So
+ * the compressed data for a dynamic block also cannot overwrite the
+ * symbols from which it is being constructed.
+ */
+
+ s->pending_buf = (uchf *) ZALLOC(strm, s->lit_bufsize, 4);
+ s->pending_buf_size = (ulg)s->lit_bufsize * 4;
if (s->window == Z_NULL || s->prev == Z_NULL || s->head == Z_NULL ||
s->pending_buf == Z_NULL) {
@@ -337,8 +373,12 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy,
deflateEnd (strm);
return Z_MEM_ERROR;
}
- s->d_buf = overlay + s->lit_bufsize/sizeof(ush);
- s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;
+ s->sym_buf = s->pending_buf + s->lit_bufsize;
+ s->sym_end = (s->lit_bufsize - 1) * 3;
+ /* We avoid equality with lit_bufsize*3 because of wraparound at 64K
+ * on 16 bit machines and because stored blocks are restricted to
+ * 64K-1 bytes.
+ */
s->level = level;
s->strategy = strategy;
@@ -488,13 +528,13 @@ int ZEXPORT deflateResetKeep (strm)
#ifdef GZIP
s->wrap == 2 ? GZIP_STATE :
#endif
- s->wrap ? INIT_STATE : BUSY_STATE;
+ INIT_STATE;
strm->adler =
#ifdef GZIP
s->wrap == 2 ? crc32(0L, Z_NULL, 0) :
#endif
adler32(0L, Z_NULL, 0);
- s->last_flush = Z_NO_FLUSH;
+ s->last_flush = -2;
_tr_init(s);
@@ -549,7 +589,8 @@ int ZEXPORT deflatePrime (strm, bits, value)
if (deflateStateCheck(strm)) return Z_STREAM_ERROR;
s = strm->state;
- if ((Bytef *)(s->d_buf) < s->pending_out + ((Buf_size + 7) >> 3))
+ if (bits < 0 || bits > 16 ||
+ s->sym_buf < s->pending_out + ((Buf_size + 7) >> 3))
return Z_BUF_ERROR;
do {
put = Buf_size - s->bi_valid;
@@ -587,12 +628,12 @@ int ZEXPORT deflateParams(strm, level, strategy)
func = configuration_table[s->level].func;
if ((strategy != s->strategy || func != configuration_table[level].func) &&
- s->high_water) {
+ s->last_flush != -2) {
/* Flush the last buffer: */
int err = deflate(strm, Z_BLOCK);
if (err == Z_STREAM_ERROR)
return err;
- if (strm->avail_out == 0)
+ if (strm->avail_in || (s->strstart - s->block_start) + s->lookahead)
return Z_BUF_ERROR;
}
if (s->level != level) {
@@ -811,6 +852,8 @@ int ZEXPORT deflate (strm, flush)
}
/* Write the header */
+ if (s->status == INIT_STATE && s->wrap == 0)
+ s->status = BUSY_STATE;
if (s->status == INIT_STATE) {
/* zlib header */
uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8;
@@ -1108,7 +1151,6 @@ int ZEXPORT deflateCopy (dest, source)
#else
deflate_state *ds;
deflate_state *ss;
- ushf *overlay;
if (deflateStateCheck(source) || dest == Z_NULL) {
@@ -1128,8 +1170,7 @@ int ZEXPORT deflateCopy (dest, source)
ds->window = (Bytef *) ZALLOC(dest, ds->w_size, 2*sizeof(Byte));
ds->prev = (Posf *) ZALLOC(dest, ds->w_size, sizeof(Pos));
ds->head = (Posf *) ZALLOC(dest, ds->hash_size, sizeof(Pos));
- overlay = (ushf *) ZALLOC(dest, ds->lit_bufsize, sizeof(ush)+2);
- ds->pending_buf = (uchf *) overlay;
+ ds->pending_buf = (uchf *) ZALLOC(dest, ds->lit_bufsize, 4);
if (ds->window == Z_NULL || ds->prev == Z_NULL || ds->head == Z_NULL ||
ds->pending_buf == Z_NULL) {
@@ -1143,8 +1184,7 @@ int ZEXPORT deflateCopy (dest, source)
zmemcpy(ds->pending_buf, ss->pending_buf, (uInt)ds->pending_buf_size);
ds->pending_out = ds->pending_buf + (ss->pending_out - ss->pending_buf);
- ds->d_buf = overlay + ds->lit_bufsize/sizeof(ush);
- ds->l_buf = ds->pending_buf + (1+sizeof(ush))*ds->lit_bufsize;
+ ds->sym_buf = ds->pending_buf + ds->lit_bufsize;
ds->l_desc.dyn_tree = ds->dyn_ltree;
ds->d_desc.dyn_tree = ds->dyn_dtree;
@@ -1513,6 +1553,8 @@ local void fill_window(s)
s->match_start -= wsize;
s->strstart -= wsize; /* we now have strstart >= MAX_DIST */
s->block_start -= (long) wsize;
+ if (s->insert > s->strstart)
+ s->insert = s->strstart;
slide_hash(s);
more += wsize;
}
@@ -1742,6 +1784,7 @@ local block_state deflate_stored(s, flush)
s->matches = 2; /* clear hash */
zmemcpy(s->window, s->strm->next_in - s->w_size, s->w_size);
s->strstart = s->w_size;
+ s->insert = s->strstart;
}
else {
if (s->window_size - s->strstart <= used) {
@@ -1750,12 +1793,14 @@ local block_state deflate_stored(s, flush)
zmemcpy(s->window, s->window + s->w_size, s->strstart);
if (s->matches < 2)
s->matches++; /* add a pending slide_hash() */
+ if (s->insert > s->strstart)
+ s->insert = s->strstart;
}
zmemcpy(s->window + s->strstart, s->strm->next_in - used, used);
s->strstart += used;
+ s->insert += MIN(used, s->w_size - s->insert);
}
s->block_start = s->strstart;
- s->insert += MIN(used, s->w_size - s->insert);
}
if (s->high_water < s->strstart)
s->high_water = s->strstart;
@@ -1770,7 +1815,7 @@ local block_state deflate_stored(s, flush)
return block_done;
/* Fill the window with any remaining input. */
- have = s->window_size - s->strstart - 1;
+ have = s->window_size - s->strstart;
if (s->strm->avail_in > have && s->block_start >= (long)s->w_size) {
/* Slide the window down. */
s->block_start -= s->w_size;
@@ -1779,12 +1824,15 @@ local block_state deflate_stored(s, flush)
if (s->matches < 2)
s->matches++; /* add a pending slide_hash() */
have += s->w_size; /* more space now */
+ if (s->insert > s->strstart)
+ s->insert = s->strstart;
}
if (have > s->strm->avail_in)
have = s->strm->avail_in;
if (have) {
read_buf(s->strm, s->window + s->strstart, have);
s->strstart += have;
+ s->insert += MIN(have, s->w_size - s->insert);
}
if (s->high_water < s->strstart)
s->high_water = s->strstart;
@@ -1912,7 +1960,7 @@ local block_state deflate_fast(s, flush)
FLUSH_BLOCK(s, 1);
return finish_done;
}
- if (s->last_lit)
+ if (s->sym_next)
FLUSH_BLOCK(s, 0);
return block_done;
}
@@ -2043,7 +2091,7 @@ local block_state deflate_slow(s, flush)
FLUSH_BLOCK(s, 1);
return finish_done;
}
- if (s->last_lit)
+ if (s->sym_next)
FLUSH_BLOCK(s, 0);
return block_done;
}
@@ -2118,7 +2166,7 @@ local block_state deflate_rle(s, flush)
FLUSH_BLOCK(s, 1);
return finish_done;
}
- if (s->last_lit)
+ if (s->sym_next)
FLUSH_BLOCK(s, 0);
return block_done;
}
@@ -2157,7 +2205,7 @@ local block_state deflate_huff(s, flush)
FLUSH_BLOCK(s, 1);
return finish_done;
}
- if (s->last_lit)
+ if (s->sym_next)
FLUSH_BLOCK(s, 0);
return block_done;
}
diff --git a/zlib/deflate.h b/zlib/deflate.h
index 360ca23ff34..17c226113b0 100644
--- a/zlib/deflate.h
+++ b/zlib/deflate.h
@@ -1,5 +1,5 @@
/* deflate.h -- internal compression state
- * Copyright (C) 1995-2016 Jean-loup Gailly
+ * Copyright (C) 1995-2018 Jean-loup Gailly
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -8,7 +8,7 @@
subject to change. Applications should only use zlib.h.
*/
-/* @(#) $Id: deflate.h,v 1.1.1.2 2002/03/11 21:53:23 tromey Exp $ */
+/* @(#) $Id$ */
#ifndef DEFLATE_H
#define DEFLATE_H
@@ -217,7 +217,7 @@ typedef struct internal_state {
/* Depth of each subtree used as tie breaker for trees of equal frequency
*/
- uchf *l_buf; /* buffer for literals or lengths */
+ uchf *sym_buf; /* buffer for distances and literals/lengths */
uInt lit_bufsize;
/* Size of match buffer for literals/lengths. There are 4 reasons for
@@ -239,13 +239,8 @@ typedef struct internal_state {
* - I can't count above 4
*/
- uInt last_lit; /* running index in l_buf */
-
- ushf *d_buf;
- /* Buffer for distances. To simplify the code, d_buf and l_buf have
- * the same number of elements. To use different lengths, an extra flag
- * array would be necessary.
- */
+ uInt sym_next; /* running index in sym_buf */
+ uInt sym_end; /* symbol table full when sym_next reaches this */
ulg opt_len; /* bit length of current block with optimal trees */
ulg static_len; /* bit length of current block with static trees */
@@ -325,20 +320,22 @@ void ZLIB_INTERNAL _tr_stored_block OF((deflate_state *s, charf *buf,
# define _tr_tally_lit(s, c, flush) \
{ uch cc = (c); \
- s->d_buf[s->last_lit] = 0; \
- s->l_buf[s->last_lit++] = cc; \
+ s->sym_buf[s->sym_next++] = 0; \
+ s->sym_buf[s->sym_next++] = 0; \
+ s->sym_buf[s->sym_next++] = cc; \
s->dyn_ltree[cc].Freq++; \
- flush = (s->last_lit == s->lit_bufsize-1); \
+ flush = (s->sym_next == s->sym_end); \
}
# define _tr_tally_dist(s, distance, length, flush) \
{ uch len = (uch)(length); \
ush dist = (ush)(distance); \
- s->d_buf[s->last_lit] = dist; \
- s->l_buf[s->last_lit++] = len; \
+ s->sym_buf[s->sym_next++] = dist; \
+ s->sym_buf[s->sym_next++] = dist >> 8; \
+ s->sym_buf[s->sym_next++] = len; \
dist--; \
s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \
s->dyn_dtree[d_code(dist)].Freq++; \
- flush = (s->last_lit == s->lit_bufsize-1); \
+ flush = (s->sym_next == s->sym_end); \
}
#else
# define _tr_tally_lit(s, c, flush) flush = _tr_tally(s, 0, c)
diff --git a/zlib/doc/crc-doc.1.0.pdf b/zlib/doc/crc-doc.1.0.pdf
new file mode 100644
index 00000000000..d6942ecc09a
--- /dev/null
+++ b/zlib/doc/crc-doc.1.0.pdf
Binary files differ
diff --git a/zlib/doc/txtvsbin.txt b/zlib/doc/txtvsbin.txt
index 3d0f0634f72..2a901eaa68a 100644
--- a/zlib/doc/txtvsbin.txt
+++ b/zlib/doc/txtvsbin.txt
@@ -38,15 +38,15 @@ The Algorithm
The algorithm works by dividing the set of bytecodes [0..255] into three
categories:
-- The white list of textual bytecodes:
+- The allow list of textual bytecodes:
9 (TAB), 10 (LF), 13 (CR), 32 (SPACE) to 255.
- The gray list of tolerated bytecodes:
7 (BEL), 8 (BS), 11 (VT), 12 (FF), 26 (SUB), 27 (ESC).
-- The black list of undesired, non-textual bytecodes:
+- The block list of undesired, non-textual bytecodes:
0 (NUL) to 6, 14 to 31.
-If a file contains at least one byte that belongs to the white list and
-no byte that belongs to the black list, then the file is categorized as
+If a file contains at least one byte that belongs to the allow list and
+no byte that belongs to the block list, then the file is categorized as
plain text; otherwise, it is categorized as binary. (The boundary case,
when the file is empty, automatically falls into the latter category.)
@@ -84,9 +84,9 @@ consistent results, regardless what alphabet encoding is being used.
results on a text encoded, say, using ISO-8859-16 versus UTF-8.)
There is an extra category of plain text files that are "polluted" with
-one or more black-listed codes, either by mistake or by peculiar design
+one or more block-listed codes, either by mistake or by peculiar design
considerations. In such cases, a scheme that tolerates a small fraction
-of black-listed codes would provide an increased recall (i.e. more true
+of block-listed codes would provide an increased recall (i.e. more true
positives). This, however, incurs a reduced precision overall, since
false positives are more likely to appear in binary files that contain
large chunks of textual data. Furthermore, "polluted" plain text should
diff --git a/zlib/examples/README.examples b/zlib/examples/README.examples
index 56a31714e56..e3a4b88bbb2 100644
--- a/zlib/examples/README.examples
+++ b/zlib/examples/README.examples
@@ -34,6 +34,10 @@ gzlog.h
and deflateSetDictionary()
- illustrates use of a gzip header extra field
+gznorm.c
+ normalize a gzip file by combining members into a single member
+ - demonstrates how to concatenate deflate streams using Z_BLOCK
+
zlib_how.html
painfully comprehensive description of zpipe.c (see below)
- describes in excruciating detail the use of deflate() and inflate()
@@ -44,6 +48,7 @@ zpipe.c
- deeply commented in zlib_how.html (see above)
zran.c
+zran.h
index a zlib or gzip stream and randomly access it
- illustrates the use of Z_BLOCK, inflatePrime(), and
inflateSetDictionary() to provide random access
diff --git a/zlib/examples/enough.c b/zlib/examples/enough.c
index b9911443052..19cf08c1f97 100644
--- a/zlib/examples/enough.c
+++ b/zlib/examples/enough.c
@@ -1,7 +1,7 @@
/* enough.c -- determine the maximum size of inflate's Huffman code tables over
- * all possible valid and complete Huffman codes, subject to a length limit.
- * Copyright (C) 2007, 2008, 2012 Mark Adler
- * Version 1.4 18 August 2012 Mark Adler
+ * all possible valid and complete prefix codes, subject to a length limit.
+ * Copyright (C) 2007, 2008, 2012, 2018 Mark Adler
+ * Version 1.5 5 August 2018 Mark Adler
*/
/* Version history:
@@ -17,101 +17,107 @@
1.4 18 Aug 2012 Avoid shifts more than bits in type (caused endless loop!)
Clean up comparisons of different types
Clean up code indentation
+ 1.5 5 Aug 2018 Clean up code style, formatting, and comments
+ Show all the codes for the maximum, and only the maximum
*/
/*
- Examine all possible Huffman codes for a given number of symbols and a
- maximum code length in bits to determine the maximum table size for zilb's
- inflate. Only complete Huffman codes are counted.
+ Examine all possible prefix codes for a given number of symbols and a
+ maximum code length in bits to determine the maximum table size for zlib's
+ inflate. Only complete prefix codes are counted.
Two codes are considered distinct if the vectors of the number of codes per
- length are not identical. So permutations of the symbol assignments result
+ length are not identical. So permutations of the symbol assignments result
in the same code for the counting, as do permutations of the assignments of
the bit values to the codes (i.e. only canonical codes are counted).
We build a code from shorter to longer lengths, determining how many symbols
- are coded at each length. At each step, we have how many symbols remain to
+ are coded at each length. At each step, we have how many symbols remain to
be coded, what the last code length used was, and how many bit patterns of
that length remain unused. Then we add one to the code length and double the
- number of unused patterns to graduate to the next code length. We then
+ number of unused patterns to graduate to the next code length. We then
assign all portions of the remaining symbols to that code length that
- preserve the properties of a correct and eventually complete code. Those
+ preserve the properties of a correct and eventually complete code. Those
properties are: we cannot use more bit patterns than are available; and when
- all the symbols are used, there are exactly zero possible bit patterns
- remaining.
+ all the symbols are used, there are exactly zero possible bit patterns left
+ unused.
The inflate Huffman decoding algorithm uses two-level lookup tables for
- speed. There is a single first-level table to decode codes up to root bits
- in length (root == 9 in the current inflate implementation). The table
- has 1 << root entries and is indexed by the next root bits of input. Codes
- shorter than root bits have replicated table entries, so that the correct
- entry is pointed to regardless of the bits that follow the short code. If
- the code is longer than root bits, then the table entry points to a second-
- level table. The size of that table is determined by the longest code with
- that root-bit prefix. If that longest code has length len, then the table
- has size 1 << (len - root), to index the remaining bits in that set of
- codes. Each subsequent root-bit prefix then has its own sub-table. The
- total number of table entries required by the code is calculated
- incrementally as the number of codes at each bit length is populated. When
- all of the codes are shorter than root bits, then root is reduced to the
- longest code length, resulting in a single, smaller, one-level table.
+ speed. There is a single first-level table to decode codes up to root bits
+ in length (root == 9 for literal/length codes and root == 6 for distance
+ codes, in the current inflate implementation). The base table has 1 << root
+ entries and is indexed by the next root bits of input. Codes shorter than
+ root bits have replicated table entries, so that the correct entry is
+ pointed to regardless of the bits that follow the short code. If the code is
+ longer than root bits, then the table entry points to a second-level table.
+ The size of that table is determined by the longest code with that root-bit
+ prefix. If that longest code has length len, then the table has size 1 <<
+ (len - root), to index the remaining bits in that set of codes. Each
+ subsequent root-bit prefix then has its own sub-table. The total number of
+ table entries required by the code is calculated incrementally as the number
+ of codes at each bit length is populated. When all of the codes are shorter
+ than root bits, then root is reduced to the longest code length, resulting
+ in a single, smaller, one-level table.
The inflate algorithm also provides for small values of root (relative to
the log2 of the number of symbols), where the shortest code has more bits
- than root. In that case, root is increased to the length of the shortest
- code. This program, by design, does not handle that case, so it is verified
- that the number of symbols is less than 2^(root + 1).
+ than root. In that case, root is increased to the length of the shortest
+ code. This program, by design, does not handle that case, so it is verified
+ that the number of symbols is less than 1 << (root + 1).
In order to speed up the examination (by about ten orders of magnitude for
the default arguments), the intermediate states in the build-up of a code
- are remembered and previously visited branches are pruned. The memory
+ are remembered and previously visited branches are pruned. The memory
required for this will increase rapidly with the total number of symbols and
- the maximum code length in bits. However this is a very small price to pay
+ the maximum code length in bits. However this is a very small price to pay
for the vast speedup.
- First, all of the possible Huffman codes are counted, and reachable
+ First, all of the possible prefix codes are counted, and reachable
intermediate states are noted by a non-zero count in a saved-results array.
Second, the intermediate states that lead to (root + 1) bit or longer codes
are used to look at all sub-codes from those junctures for their inflate
- memory usage. (The amount of memory used is not affected by the number of
+ memory usage. (The amount of memory used is not affected by the number of
codes of root bits or less in length.) Third, the visited states in the
construction of those sub-codes and the associated calculation of the table
size is recalled in order to avoid recalculating from the same juncture.
Beginning the code examination at (root + 1) bit codes, which is enabled by
identifying the reachable nodes, accounts for about six of the orders of
- magnitude of improvement for the default arguments. About another four
- orders of magnitude come from not revisiting previous states. Out of
- approximately 2x10^16 possible Huffman codes, only about 2x10^6 sub-codes
+ magnitude of improvement for the default arguments. About another four
+ orders of magnitude come from not revisiting previous states. Out of
+ approximately 2x10^16 possible prefix codes, only about 2x10^6 sub-codes
need to be examined to cover all of the possible table memory usage cases
for the default arguments of 286 symbols limited to 15-bit codes.
- Note that an unsigned long long type is used for counting. It is quite easy
- to exceed the capacity of an eight-byte integer with a large number of
- symbols and a large maximum code length, so multiple-precision arithmetic
- would need to replace the unsigned long long arithmetic in that case. This
- program will abort if an overflow occurs. The big_t type identifies where
- the counting takes place.
-
- An unsigned long long type is also used for calculating the number of
- possible codes remaining at the maximum length. This limits the maximum
- code length to the number of bits in a long long minus the number of bits
- needed to represent the symbols in a flat code. The code_t type identifies
- where the bit pattern counting takes place.
+ Note that the uintmax_t type is used for counting. It is quite easy to
+ exceed the capacity of an eight-byte integer with a large number of symbols
+ and a large maximum code length, so multiple-precision arithmetic would need
+ to replace the integer arithmetic in that case. This program will abort if
+ an overflow occurs. The big_t type identifies where the counting takes
+ place.
+
+ The uintmax_t type is also used for calculating the number of possible codes
+ remaining at the maximum length. This limits the maximum code length to the
+ number of bits in a long long minus the number of bits needed to represent
+ the symbols in a flat code. The code_t type identifies where the bit-pattern
+ counting takes place.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <stdarg.h>
+#include <stdint.h>
#include <assert.h>
#define local static
-/* special data types */
-typedef unsigned long long big_t; /* type for code counting */
-typedef unsigned long long code_t; /* type for bit pattern counting */
-struct tab { /* type for been here check */
- size_t len; /* length of bit vector in char's */
- char *vec; /* allocated bit vector */
+// Special data types.
+typedef uintmax_t big_t; // type for code counting
+#define PRIbig "ju" // printf format for big_t
+typedef uintmax_t code_t; // type for bit pattern counting
+struct tab { // type for been-here check
+ size_t len; // allocated length of bit vector in octets
+ char *vec; // allocated bit vector
};
/* The array for saving results, num[], is indexed with this triplet:
@@ -126,447 +132,466 @@ struct tab { /* type for been here check */
left: 2..syms - 1, but only the evens (so syms == 8 -> 2, 4, 6)
len: 1..max - 1 (max == maximum code length in bits)
- syms == 2 is not saved since that immediately leads to a single code. left
+ syms == 2 is not saved since that immediately leads to a single code. left
must be even, since it represents the number of available bit patterns at
- the current length, which is double the number at the previous length.
- left ends at syms-1 since left == syms immediately results in a single code.
+ the current length, which is double the number at the previous length. left
+ ends at syms-1 since left == syms immediately results in a single code.
(left > sym is not allowed since that would result in an incomplete code.)
len is less than max, since the code completes immediately when len == max.
- The offset into the array is calculated for the three indices with the
- first one (syms) being outermost, and the last one (len) being innermost.
- We build the array with length max-1 lists for the len index, with syms-3
- of those for each symbol. There are totsym-2 of those, with each one
- varying in length as a function of sym. See the calculation of index in
- count() for the index, and the calculation of size in main() for the size
- of the array.
+ The offset into the array is calculated for the three indices with the first
+ one (syms) being outermost, and the last one (len) being innermost. We build
+ the array with length max-1 lists for the len index, with syms-3 of those
+ for each symbol. There are totsym-2 of those, with each one varying in
+ length as a function of sym. See the calculation of index in map() for the
+ index, and the calculation of size in main() for the size of the array.
For the deflate example of 286 symbols limited to 15-bit codes, the array
- has 284,284 entries, taking up 2.17 MB for an 8-byte big_t. More than
- half of the space allocated for saved results is actually used -- not all
- possible triplets are reached in the generation of valid Huffman codes.
+ has 284,284 entries, taking up 2.17 MB for an 8-byte big_t. More than half
+ of the space allocated for saved results is actually used -- not all
+ possible triplets are reached in the generation of valid prefix codes.
*/
/* The array for tracking visited states, done[], is itself indexed identically
to the num[] array as described above for the (syms, left, len) triplet.
Each element in the array is further indexed by the (mem, rem) doublet,
where mem is the amount of inflate table space used so far, and rem is the
- remaining unused entries in the current inflate sub-table. Each indexed
+ remaining unused entries in the current inflate sub-table. Each indexed
element is simply one bit indicating whether the state has been visited or
- not. Since the ranges for mem and rem are not known a priori, each bit
+ not. Since the ranges for mem and rem are not known a priori, each bit
vector is of a variable size, and grows as needed to accommodate the visited
- states. mem and rem are used to calculate a single index in a triangular
- array. Since the range of mem is expected in the default case to be about
+ states. mem and rem are used to calculate a single index in a triangular
+ array. Since the range of mem is expected in the default case to be about
ten times larger than the range of rem, the array is skewed to reduce the
- memory usage, with eight times the range for mem than for rem. See the
- calculations for offset and bit in beenhere() for the details.
+ memory usage, with eight times the range for mem than for rem. See the
+ calculations for offset and bit in been_here() for the details.
For the deflate example of 286 symbols limited to 15-bit codes, the bit
- vectors grow to total approximately 21 MB, in addition to the 4.3 MB done[]
- array itself.
+ vectors grow to total 5.5 MB, in addition to the 4.3 MB done array itself.
*/
-/* Globals to avoid propagating constants or constant pointers recursively */
-local int max; /* maximum allowed bit length for the codes */
-local int root; /* size of base code table in bits */
-local int large; /* largest code table so far */
-local size_t size; /* number of elements in num and done */
-local int *code; /* number of symbols assigned to each bit length */
-local big_t *num; /* saved results array for code counting */
-local struct tab *done; /* states already evaluated array */
-
-/* Index function for num[] and done[] */
-#define INDEX(i,j,k) (((size_t)((i-1)>>1)*((i-2)>>1)+(j>>1)-1)*(max-1)+k-1)
-
-/* Free allocated space. Uses globals code, num, and done. */
-local void cleanup(void)
-{
- size_t n;
-
- if (done != NULL) {
- for (n = 0; n < size; n++)
- if (done[n].len)
- free(done[n].vec);
- free(done);
+// Type for a variable-length, allocated string.
+typedef struct {
+ char *str; // pointer to allocated string
+ size_t size; // size of allocation
+ size_t len; // length of string, not including terminating zero
+} string_t;
+
+// Clear a string_t.
+local void string_clear(string_t *s) {
+ s->str[0] = 0;
+ s->len = 0;
+}
+
+// Initialize a string_t.
+local void string_init(string_t *s) {
+ s->size = 16;
+ s->str = malloc(s->size);
+ assert(s->str != NULL && "out of memory");
+ string_clear(s);
+}
+
+// Release the allocation of a string_t.
+local void string_free(string_t *s) {
+ free(s->str);
+ s->str = NULL;
+ s->size = 0;
+ s->len = 0;
+}
+
+// Save the results of printf with fmt and the subsequent argument list to s.
+// Each call appends to s. The allocated space for s is increased as needed.
+local void string_printf(string_t *s, char *fmt, ...) {
+ va_list ap;
+ va_start(ap, fmt);
+ size_t len = s->len;
+ int ret = vsnprintf(s->str + len, s->size - len, fmt, ap);
+ assert(ret >= 0 && "out of memory");
+ s->len += ret;
+ if (s->size < s->len + 1) {
+ do {
+ s->size <<= 1;
+ assert(s->size != 0 && "overflow");
+ } while (s->size < s->len + 1);
+ s->str = realloc(s->str, s->size);
+ assert(s->str != NULL && "out of memory");
+ vsnprintf(s->str + len, s->size - len, fmt, ap);
}
- if (num != NULL)
- free(num);
- if (code != NULL)
- free(code);
+ va_end(ap);
}
-/* Return the number of possible Huffman codes using bit patterns of lengths
- len through max inclusive, coding syms symbols, with left bit patterns of
- length len unused -- return -1 if there is an overflow in the counting.
- Keep a record of previous results in num to prevent repeating the same
- calculation. Uses the globals max and num. */
-local big_t count(int syms, int len, int left)
-{
- big_t sum; /* number of possible codes from this juncture */
- big_t got; /* value returned from count() */
- int least; /* least number of syms to use at this juncture */
- int most; /* most number of syms to use at this juncture */
- int use; /* number of bit patterns to use in next call */
- size_t index; /* index of this case in *num */
-
- /* see if only one possible code */
+// Globals to avoid propagating constants or constant pointers recursively.
+struct {
+ int max; // maximum allowed bit length for the codes
+ int root; // size of base code table in bits
+ int large; // largest code table so far
+ size_t size; // number of elements in num and done
+ big_t tot; // total number of codes with maximum tables size
+ string_t out; // display of subcodes for maximum tables size
+ int *code; // number of symbols assigned to each bit length
+ big_t *num; // saved results array for code counting
+ struct tab *done; // states already evaluated array
+} g;
+
+// Index function for num[] and done[].
+local inline size_t map(int syms, int left, int len) {
+ return ((size_t)((syms - 1) >> 1) * ((syms - 2) >> 1) +
+ (left >> 1) - 1) * (g.max - 1) +
+ len - 1;
+}
+
+// Free allocated space in globals.
+local void cleanup(void) {
+ if (g.done != NULL) {
+ for (size_t n = 0; n < g.size; n++)
+ if (g.done[n].len)
+ free(g.done[n].vec);
+ g.size = 0;
+ free(g.done); g.done = NULL;
+ }
+ free(g.num); g.num = NULL;
+ free(g.code); g.code = NULL;
+ string_free(&g.out);
+}
+
+// Return the number of possible prefix codes using bit patterns of lengths len
+// through max inclusive, coding syms symbols, with left bit patterns of length
+// len unused -- return -1 if there is an overflow in the counting. Keep a
+// record of previous results in num to prevent repeating the same calculation.
+local big_t count(int syms, int left, int len) {
+ // see if only one possible code
if (syms == left)
return 1;
- /* note and verify the expected state */
- assert(syms > left && left > 0 && len < max);
+ // note and verify the expected state
+ assert(syms > left && left > 0 && len < g.max);
- /* see if we've done this one already */
- index = INDEX(syms, left, len);
- got = num[index];
+ // see if we've done this one already
+ size_t index = map(syms, left, len);
+ big_t got = g.num[index];
if (got)
- return got; /* we have -- return the saved result */
+ return got; // we have -- return the saved result
- /* we need to use at least this many bit patterns so that the code won't be
- incomplete at the next length (more bit patterns than symbols) */
- least = (left << 1) - syms;
+ // we need to use at least this many bit patterns so that the code won't be
+ // incomplete at the next length (more bit patterns than symbols)
+ int least = (left << 1) - syms;
if (least < 0)
least = 0;
- /* we can use at most this many bit patterns, lest there not be enough
- available for the remaining symbols at the maximum length (if there were
- no limit to the code length, this would become: most = left - 1) */
- most = (((code_t)left << (max - len)) - syms) /
- (((code_t)1 << (max - len)) - 1);
+ // we can use at most this many bit patterns, lest there not be enough
+ // available for the remaining symbols at the maximum length (if there were
+ // no limit to the code length, this would become: most = left - 1)
+ int most = (((code_t)left << (g.max - len)) - syms) /
+ (((code_t)1 << (g.max - len)) - 1);
- /* count all possible codes from this juncture and add them up */
- sum = 0;
- for (use = least; use <= most; use++) {
- got = count(syms - use, len + 1, (left - use) << 1);
+ // count all possible codes from this juncture and add them up
+ big_t sum = 0;
+ for (int use = least; use <= most; use++) {
+ got = count(syms - use, (left - use) << 1, len + 1);
sum += got;
- if (got == (big_t)0 - 1 || sum < got) /* overflow */
- return (big_t)0 - 1;
+ if (got == (big_t)-1 || sum < got) // overflow
+ return (big_t)-1;
}
- /* verify that all recursive calls are productive */
+ // verify that all recursive calls are productive
assert(sum != 0);
- /* save the result and return it */
- num[index] = sum;
+ // save the result and return it
+ g.num[index] = sum;
return sum;
}
-/* Return true if we've been here before, set to true if not. Set a bit in a
- bit vector to indicate visiting this state. Each (syms,len,left) state
- has a variable size bit vector indexed by (mem,rem). The bit vector is
- lengthened if needed to allow setting the (mem,rem) bit. */
-local int beenhere(int syms, int len, int left, int mem, int rem)
-{
- size_t index; /* index for this state's bit vector */
- size_t offset; /* offset in this state's bit vector */
- int bit; /* mask for this state's bit */
- size_t length; /* length of the bit vector in bytes */
- char *vector; /* new or enlarged bit vector */
-
- /* point to vector for (syms,left,len), bit in vector for (mem,rem) */
- index = INDEX(syms, left, len);
- mem -= 1 << root;
- offset = (mem >> 3) + rem;
+// Return true if we've been here before, set to true if not. Set a bit in a
+// bit vector to indicate visiting this state. Each (syms,len,left) state has a
+// variable size bit vector indexed by (mem,rem). The bit vector is lengthened
+// as needed to allow setting the (mem,rem) bit.
+local int been_here(int syms, int left, int len, int mem, int rem) {
+ // point to vector for (syms,left,len), bit in vector for (mem,rem)
+ size_t index = map(syms, left, len);
+ mem -= 1 << g.root; // mem always includes the root table
+ mem >>= 1; // mem and rem are always even
+ rem >>= 1;
+ size_t offset = (mem >> 3) + rem;
offset = ((offset * (offset + 1)) >> 1) + rem;
- bit = 1 << (mem & 7);
+ int bit = 1 << (mem & 7);
- /* see if we've been here */
- length = done[index].len;
- if (offset < length && (done[index].vec[offset] & bit) != 0)
- return 1; /* done this! */
+ // see if we've been here
+ size_t length = g.done[index].len;
+ if (offset < length && (g.done[index].vec[offset] & bit) != 0)
+ return 1; // done this!
- /* we haven't been here before -- set the bit to show we have now */
+ // we haven't been here before -- set the bit to show we have now
- /* see if we need to lengthen the vector in order to set the bit */
+ // see if we need to lengthen the vector in order to set the bit
if (length <= offset) {
- /* if we have one already, enlarge it, zero out the appended space */
+ // if we have one already, enlarge it, zero out the appended space
+ char *vector;
if (length) {
do {
length <<= 1;
} while (length <= offset);
- vector = realloc(done[index].vec, length);
- if (vector != NULL)
- memset(vector + done[index].len, 0, length - done[index].len);
+ vector = realloc(g.done[index].vec, length);
+ assert(vector != NULL && "out of memory");
+ memset(vector + g.done[index].len, 0, length - g.done[index].len);
}
- /* otherwise we need to make a new vector and zero it out */
+ // otherwise we need to make a new vector and zero it out
else {
- length = 1 << (len - root);
+ length = 16;
while (length <= offset)
length <<= 1;
- vector = calloc(length, sizeof(char));
- }
-
- /* in either case, bail if we can't get the memory */
- if (vector == NULL) {
- fputs("abort: unable to allocate enough memory\n", stderr);
- cleanup();
- exit(1);
+ vector = calloc(length, 1);
+ assert(vector != NULL && "out of memory");
}
- /* install the new vector */
- done[index].len = length;
- done[index].vec = vector;
+ // install the new vector
+ g.done[index].len = length;
+ g.done[index].vec = vector;
}
- /* set the bit */
- done[index].vec[offset] |= bit;
+ // set the bit
+ g.done[index].vec[offset] |= bit;
return 0;
}
-/* Examine all possible codes from the given node (syms, len, left). Compute
- the amount of memory required to build inflate's decoding tables, where the
- number of code structures used so far is mem, and the number remaining in
- the current sub-table is rem. Uses the globals max, code, root, large, and
- done. */
-local void examine(int syms, int len, int left, int mem, int rem)
-{
- int least; /* least number of syms to use at this juncture */
- int most; /* most number of syms to use at this juncture */
- int use; /* number of bit patterns to use in next call */
-
- /* see if we have a complete code */
+// Examine all possible codes from the given node (syms, len, left). Compute
+// the amount of memory required to build inflate's decoding tables, where the
+// number of code structures used so far is mem, and the number remaining in
+// the current sub-table is rem.
+local void examine(int syms, int left, int len, int mem, int rem) {
+ // see if we have a complete code
if (syms == left) {
- /* set the last code entry */
- code[len] = left;
+ // set the last code entry
+ g.code[len] = left;
- /* complete computation of memory used by this code */
+ // complete computation of memory used by this code
while (rem < left) {
left -= rem;
- rem = 1 << (len - root);
+ rem = 1 << (len - g.root);
mem += rem;
}
assert(rem == left);
- /* if this is a new maximum, show the entries used and the sub-code */
- if (mem > large) {
- large = mem;
- printf("max %d: ", mem);
- for (use = root + 1; use <= max; use++)
- if (code[use])
- printf("%d[%d] ", code[use], use);
- putchar('\n');
- fflush(stdout);
+ // if this is at the maximum, show the sub-code
+ if (mem >= g.large) {
+ // if this is a new maximum, update the maximum and clear out the
+ // printed sub-codes from the previous maximum
+ if (mem > g.large) {
+ g.large = mem;
+ string_clear(&g.out);
+ }
+
+ // compute the starting state for this sub-code
+ syms = 0;
+ left = 1 << g.max;
+ for (int bits = g.max; bits > g.root; bits--) {
+ syms += g.code[bits];
+ left -= g.code[bits];
+ assert((left & 1) == 0);
+ left >>= 1;
+ }
+
+ // print the starting state and the resulting sub-code to g.out
+ string_printf(&g.out, "<%u, %u, %u>:",
+ syms, g.root + 1, ((1 << g.root) - left) << 1);
+ for (int bits = g.root + 1; bits <= g.max; bits++)
+ if (g.code[bits])
+ string_printf(&g.out, " %d[%d]", g.code[bits], bits);
+ string_printf(&g.out, "\n");
}
- /* remove entries as we drop back down in the recursion */
- code[len] = 0;
+ // remove entries as we drop back down in the recursion
+ g.code[len] = 0;
return;
}
- /* prune the tree if we can */
- if (beenhere(syms, len, left, mem, rem))
+ // prune the tree if we can
+ if (been_here(syms, left, len, mem, rem))
return;
- /* we need to use at least this many bit patterns so that the code won't be
- incomplete at the next length (more bit patterns than symbols) */
- least = (left << 1) - syms;
+ // we need to use at least this many bit patterns so that the code won't be
+ // incomplete at the next length (more bit patterns than symbols)
+ int least = (left << 1) - syms;
if (least < 0)
least = 0;
- /* we can use at most this many bit patterns, lest there not be enough
- available for the remaining symbols at the maximum length (if there were
- no limit to the code length, this would become: most = left - 1) */
- most = (((code_t)left << (max - len)) - syms) /
- (((code_t)1 << (max - len)) - 1);
+ // we can use at most this many bit patterns, lest there not be enough
+ // available for the remaining symbols at the maximum length (if there were
+ // no limit to the code length, this would become: most = left - 1)
+ int most = (((code_t)left << (g.max - len)) - syms) /
+ (((code_t)1 << (g.max - len)) - 1);
- /* occupy least table spaces, creating new sub-tables as needed */
- use = least;
+ // occupy least table spaces, creating new sub-tables as needed
+ int use = least;
while (rem < use) {
use -= rem;
- rem = 1 << (len - root);
+ rem = 1 << (len - g.root);
mem += rem;
}
rem -= use;
- /* examine codes from here, updating table space as we go */
+ // examine codes from here, updating table space as we go
for (use = least; use <= most; use++) {
- code[len] = use;
- examine(syms - use, len + 1, (left - use) << 1,
- mem + (rem ? 1 << (len - root) : 0), rem << 1);
+ g.code[len] = use;
+ examine(syms - use, (left - use) << 1, len + 1,
+ mem + (rem ? 1 << (len - g.root) : 0), rem << 1);
if (rem == 0) {
- rem = 1 << (len - root);
+ rem = 1 << (len - g.root);
mem += rem;
}
rem--;
}
- /* remove entries as we drop back down in the recursion */
- code[len] = 0;
+ // remove entries as we drop back down in the recursion
+ g.code[len] = 0;
}
-/* Look at all sub-codes starting with root + 1 bits. Look at only the valid
- intermediate code states (syms, left, len). For each completed code,
- calculate the amount of memory required by inflate to build the decoding
- tables. Find the maximum amount of memory required and show the code that
- requires that maximum. Uses the globals max, root, and num. */
-local void enough(int syms)
-{
- int n; /* number of remaing symbols for this node */
- int left; /* number of unused bit patterns at this length */
- size_t index; /* index of this case in *num */
-
- /* clear code */
- for (n = 0; n <= max; n++)
- code[n] = 0;
-
- /* look at all (root + 1) bit and longer codes */
- large = 1 << root; /* base table */
- if (root < max) /* otherwise, there's only a base table */
- for (n = 3; n <= syms; n++)
- for (left = 2; left < n; left += 2)
- {
- /* look at all reachable (root + 1) bit nodes, and the
- resulting codes (complete at root + 2 or more) */
- index = INDEX(n, left, root + 1);
- if (root + 1 < max && num[index]) /* reachable node */
- examine(n, root + 1, left, 1 << root, 0);
-
- /* also look at root bit codes with completions at root + 1
- bits (not saved in num, since complete), just in case */
- if (num[index - 1] && n <= left << 1)
- examine((n - left) << 1, root + 1, (n - left) << 1,
- 1 << root, 0);
+// Look at all sub-codes starting with root + 1 bits. Look at only the valid
+// intermediate code states (syms, left, len). For each completed code,
+// calculate the amount of memory required by inflate to build the decoding
+// tables. Find the maximum amount of memory required and show the codes that
+// require that maximum.
+local void enough(int syms) {
+ // clear code
+ for (int n = 0; n <= g.max; n++)
+ g.code[n] = 0;
+
+ // look at all (root + 1) bit and longer codes
+ string_clear(&g.out); // empty saved results
+ g.large = 1 << g.root; // base table
+ if (g.root < g.max) // otherwise, there's only a base table
+ for (int n = 3; n <= syms; n++)
+ for (int left = 2; left < n; left += 2) {
+ // look at all reachable (root + 1) bit nodes, and the
+ // resulting codes (complete at root + 2 or more)
+ size_t index = map(n, left, g.root + 1);
+ if (g.root + 1 < g.max && g.num[index]) // reachable node
+ examine(n, left, g.root + 1, 1 << g.root, 0);
+
+ // also look at root bit codes with completions at root + 1
+ // bits (not saved in num, since complete), just in case
+ if (g.num[index - 1] && n <= left << 1)
+ examine((n - left) << 1, (n - left) << 1, g.root + 1,
+ 1 << g.root, 0);
}
- /* done */
- printf("done: maximum of %d table entries\n", large);
+ // done
+ printf("maximum of %d table entries for root = %d\n", g.large, g.root);
+ fputs(g.out.str, stdout);
}
-/*
- Examine and show the total number of possible Huffman codes for a given
- maximum number of symbols, initial root table size, and maximum code length
- in bits -- those are the command arguments in that order. The default
- values are 286, 9, and 15 respectively, for the deflate literal/length code.
- The possible codes are counted for each number of coded symbols from two to
- the maximum. The counts for each of those and the total number of codes are
- shown. The maximum number of inflate table entires is then calculated
- across all possible codes. Each new maximum number of table entries and the
- associated sub-code (starting at root + 1 == 10 bits) is shown.
-
- To count and examine Huffman codes that are not length-limited, provide a
- maximum length equal to the number of symbols minus one.
-
- For the deflate literal/length code, use "enough". For the deflate distance
- code, use "enough 30 6".
-
- This uses the %llu printf format to print big_t numbers, which assumes that
- big_t is an unsigned long long. If the big_t type is changed (for example
- to a multiple precision type), the method of printing will also need to be
- updated.
- */
-int main(int argc, char **argv)
-{
- int syms; /* total number of symbols to code */
- int n; /* number of symbols to code for this run */
- big_t got; /* return value of count() */
- big_t sum; /* accumulated number of codes over n */
- code_t word; /* for counting bits in code_t */
-
- /* set up globals for cleanup() */
- code = NULL;
- num = NULL;
- done = NULL;
-
- /* get arguments -- default to the deflate literal/length code */
- syms = 286;
- root = 9;
- max = 15;
+// Examine and show the total number of possible prefix codes for a given
+// maximum number of symbols, initial root table size, and maximum code length
+// in bits -- those are the command arguments in that order. The default values
+// are 286, 9, and 15 respectively, for the deflate literal/length code. The
+// possible codes are counted for each number of coded symbols from two to the
+// maximum. The counts for each of those and the total number of codes are
+// shown. The maximum number of inflate table entires is then calculated across
+// all possible codes. Each new maximum number of table entries and the
+// associated sub-code (starting at root + 1 == 10 bits) is shown.
+//
+// To count and examine prefix codes that are not length-limited, provide a
+// maximum length equal to the number of symbols minus one.
+//
+// For the deflate literal/length code, use "enough". For the deflate distance
+// code, use "enough 30 6".
+int main(int argc, char **argv) {
+ // set up globals for cleanup()
+ g.code = NULL;
+ g.num = NULL;
+ g.done = NULL;
+ string_init(&g.out);
+
+ // get arguments -- default to the deflate literal/length code
+ int syms = 286;
+ g.root = 9;
+ g.max = 15;
if (argc > 1) {
syms = atoi(argv[1]);
if (argc > 2) {
- root = atoi(argv[2]);
+ g.root = atoi(argv[2]);
if (argc > 3)
- max = atoi(argv[3]);
+ g.max = atoi(argv[3]);
}
}
- if (argc > 4 || syms < 2 || root < 1 || max < 1) {
+ if (argc > 4 || syms < 2 || g.root < 1 || g.max < 1) {
fputs("invalid arguments, need: [sym >= 2 [root >= 1 [max >= 1]]]\n",
stderr);
return 1;
}
- /* if not restricting the code length, the longest is syms - 1 */
- if (max > syms - 1)
- max = syms - 1;
+ // if not restricting the code length, the longest is syms - 1
+ if (g.max > syms - 1)
+ g.max = syms - 1;
- /* determine the number of bits in a code_t */
- for (n = 0, word = 1; word; n++, word <<= 1)
- ;
+ // determine the number of bits in a code_t
+ int bits = 0;
+ for (code_t word = 1; word; word <<= 1)
+ bits++;
- /* make sure that the calculation of most will not overflow */
- if (max > n || (code_t)(syms - 2) >= (((code_t)0 - 1) >> (max - 1))) {
+ // make sure that the calculation of most will not overflow
+ if (g.max > bits || (code_t)(syms - 2) >= ((code_t)-1 >> (g.max - 1))) {
fputs("abort: code length too long for internal types\n", stderr);
return 1;
}
- /* reject impossible code requests */
- if ((code_t)(syms - 1) > ((code_t)1 << max) - 1) {
+ // reject impossible code requests
+ if ((code_t)(syms - 1) > ((code_t)1 << g.max) - 1) {
fprintf(stderr, "%d symbols cannot be coded in %d bits\n",
- syms, max);
+ syms, g.max);
return 1;
}
- /* allocate code vector */
- code = calloc(max + 1, sizeof(int));
- if (code == NULL) {
- fputs("abort: unable to allocate enough memory\n", stderr);
- return 1;
- }
+ // allocate code vector
+ g.code = calloc(g.max + 1, sizeof(int));
+ assert(g.code != NULL && "out of memory");
- /* determine size of saved results array, checking for overflows,
- allocate and clear the array (set all to zero with calloc()) */
- if (syms == 2) /* iff max == 1 */
- num = NULL; /* won't be saving any results */
+ // determine size of saved results array, checking for overflows,
+ // allocate and clear the array (set all to zero with calloc())
+ if (syms == 2) // iff max == 1
+ g.num = NULL; // won't be saving any results
else {
- size = syms >> 1;
- if (size > ((size_t)0 - 1) / (n = (syms - 1) >> 1) ||
- (size *= n, size > ((size_t)0 - 1) / (n = max - 1)) ||
- (size *= n, size > ((size_t)0 - 1) / sizeof(big_t)) ||
- (num = calloc(size, sizeof(big_t))) == NULL) {
- fputs("abort: unable to allocate enough memory\n", stderr);
- cleanup();
- return 1;
- }
+ g.size = syms >> 1;
+ int n = (syms - 1) >> 1;
+ assert(g.size <= (size_t)-1 / n && "overflow");
+ g.size *= n;
+ n = g.max - 1;
+ assert(g.size <= (size_t)-1 / n && "overflow");
+ g.size *= n;
+ g.num = calloc(g.size, sizeof(big_t));
+ assert(g.num != NULL && "out of memory");
}
- /* count possible codes for all numbers of symbols, add up counts */
- sum = 0;
- for (n = 2; n <= syms; n++) {
- got = count(n, 1, 2);
+ // count possible codes for all numbers of symbols, add up counts
+ big_t sum = 0;
+ for (int n = 2; n <= syms; n++) {
+ big_t got = count(n, 2, 1);
sum += got;
- if (got == (big_t)0 - 1 || sum < got) { /* overflow */
- fputs("abort: can't count that high!\n", stderr);
- cleanup();
- return 1;
- }
- printf("%llu %d-codes\n", got, n);
+ assert(got != (big_t)-1 && sum >= got && "overflow");
}
- printf("%llu total codes for 2 to %d symbols", sum, syms);
- if (max < syms - 1)
- printf(" (%d-bit length limit)\n", max);
+ printf("%"PRIbig" total codes for 2 to %d symbols", sum, syms);
+ if (g.max < syms - 1)
+ printf(" (%d-bit length limit)\n", g.max);
else
puts(" (no length limit)");
- /* allocate and clear done array for beenhere() */
+ // allocate and clear done array for been_here()
if (syms == 2)
- done = NULL;
- else if (size > ((size_t)0 - 1) / sizeof(struct tab) ||
- (done = calloc(size, sizeof(struct tab))) == NULL) {
- fputs("abort: unable to allocate enough memory\n", stderr);
- cleanup();
- return 1;
+ g.done = NULL;
+ else {
+ g.done = calloc(g.size, sizeof(struct tab));
+ assert(g.done != NULL && "out of memory");
}
- /* find and show maximum inflate table usage */
- if (root > max) /* reduce root to max length */
- root = max;
- if ((code_t)syms < ((code_t)1 << (root + 1)))
+ // find and show maximum inflate table usage
+ if (g.root > g.max) // reduce root to max length
+ g.root = g.max;
+ if ((code_t)syms < ((code_t)1 << (g.root + 1)))
enough(syms);
else
- puts("cannot handle minimum code lengths > root");
+ fputs("cannot handle minimum code lengths > root", stderr);
- /* done */
+ // done
cleanup();
return 0;
}
diff --git a/zlib/examples/gzappend.c b/zlib/examples/gzappend.c
index 662dec3794b..d7eea3e97a5 100644
--- a/zlib/examples/gzappend.c
+++ b/zlib/examples/gzappend.c
@@ -137,7 +137,7 @@ local void rotate(unsigned char *list, unsigned len, unsigned rot)
/* do simple left shift by one */
if (rot == 1) {
tmp = *list;
- memcpy(list, list + 1, len - 1);
+ memmove(list, list + 1, len - 1);
*last = tmp;
return;
}
diff --git a/zlib/examples/gzlog.c b/zlib/examples/gzlog.c
index b8c29274e8b..b977802dd6e 100644
--- a/zlib/examples/gzlog.c
+++ b/zlib/examples/gzlog.c
@@ -1,8 +1,8 @@
/*
* gzlog.c
- * Copyright (C) 2004, 2008, 2012, 2016 Mark Adler, all rights reserved
+ * Copyright (C) 2004, 2008, 2012, 2016, 2019 Mark Adler, all rights reserved
* For conditions of distribution and use, see copyright notice in gzlog.h
- * version 2.2, 14 Aug 2012
+ * version 2.3, 25 May 2019
*/
/*
@@ -756,12 +756,14 @@ local int log_recover(struct log *log, int op)
return -2;
}
if ((fd = open(log->path, O_RDONLY, 0)) < 0) {
+ free(data);
log_log(log, op, ".add file read failure");
return -1;
}
ret = (size_t)read(fd, data, len) != len;
close(fd);
if (ret) {
+ free(data);
log_log(log, op, ".add file read failure");
return -1;
}
diff --git a/zlib/examples/gznorm.c b/zlib/examples/gznorm.c
new file mode 100644
index 00000000000..68e0a0f29be
--- /dev/null
+++ b/zlib/examples/gznorm.c
@@ -0,0 +1,470 @@
+/* gznorm.c -- normalize a gzip stream
+ * Copyright (C) 2018 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ * Version 1.0 7 Oct 2018 Mark Adler */
+
+// gznorm takes a gzip stream, potentially containing multiple members, and
+// converts it to a gzip stream with a single member. In addition the gzip
+// header is normalized, removing the file name and time stamp, and setting the
+// other header contents (XFL, OS) to fixed values. gznorm does not recompress
+// the data, so it is fast, but no advantage is gained from the history that
+// could be available across member boundaries.
+
+#include <stdio.h> // fread, fwrite, putc, fflush, ferror, fprintf,
+ // vsnprintf, stdout, stderr, NULL, FILE
+#include <stdlib.h> // malloc, free
+#include <string.h> // strerror
+#include <errno.h> // errno
+#include <stdarg.h> // va_list, va_start, va_end
+#include "zlib.h" // inflateInit2, inflate, inflateReset, inflateEnd,
+ // z_stream, z_off_t, crc32_combine, Z_NULL, Z_BLOCK,
+ // Z_OK, Z_STREAM_END, Z_BUF_ERROR, Z_DATA_ERROR,
+ // Z_MEM_ERROR
+
+#if defined(MSDOS) || defined(OS2) || defined(WIN32) || defined(__CYGWIN__)
+# include <fcntl.h>
+# include <io.h>
+# define SET_BINARY_MODE(file) setmode(fileno(file), O_BINARY)
+#else
+# define SET_BINARY_MODE(file)
+#endif
+
+#define local static
+
+// printf to an allocated string. Return the string, or NULL if the printf or
+// allocation fails.
+local char *aprintf(char *fmt, ...) {
+ // Get the length of the result of the printf.
+ va_list args;
+ va_start(args, fmt);
+ int len = vsnprintf(NULL, 0, fmt, args);
+ va_end(args);
+ if (len < 0)
+ return NULL;
+
+ // Allocate the required space and printf to it.
+ char *str = malloc(len + 1);
+ if (str == NULL)
+ return NULL;
+ va_start(args, fmt);
+ vsnprintf(str, len + 1, fmt, args);
+ va_end(args);
+ return str;
+}
+
+// Return with an error, putting an allocated error message in *err. Doing an
+// inflateEnd() on an already ended state, or one with state set to Z_NULL, is
+// permitted.
+#define BYE(...) \
+ do { \
+ inflateEnd(&strm); \
+ *err = aprintf(__VA_ARGS__); \
+ return 1; \
+ } while (0)
+
+// Chunk size for buffered reads and for decompression. Twice this many bytes
+// will be allocated on the stack by gzip_normalize(). Must fit in an unsigned.
+#define CHUNK 16384
+
+// Read a gzip stream from in and write an equivalent normalized gzip stream to
+// out. If given no input, an empty gzip stream will be written. If successful,
+// 0 is returned, and *err is set to NULL. On error, 1 is returned, where the
+// details of the error are returned in *err, a pointer to an allocated string.
+//
+// The input may be a stream with multiple gzip members, which is converted to
+// a single gzip member on the output. Each gzip member is decompressed at the
+// level of deflate blocks. This enables clearing the last-block bit, shifting
+// the compressed data to concatenate to the previous member's compressed data,
+// which can end at an arbitrary bit boundary, and identifying stored blocks in
+// order to resynchronize those to byte boundaries. The deflate compressed data
+// is terminated with a 10-bit empty fixed block. If any members on the input
+// end with a 10-bit empty fixed block, then that block is excised from the
+// stream. This avoids appending empty fixed blocks for every normalization,
+// and assures that gzip_normalize applied a second time will not change the
+// input. The pad bits after stored block headers and after the final deflate
+// block are all forced to zeros.
+local int gzip_normalize(FILE *in, FILE *out, char **err) {
+ // initialize the inflate engine to process a gzip member
+ z_stream strm;
+ strm.zalloc = Z_NULL;
+ strm.zfree = Z_NULL;
+ strm.opaque = Z_NULL;
+ strm.avail_in = 0;
+ strm.next_in = Z_NULL;
+ if (inflateInit2(&strm, 15 + 16) != Z_OK)
+ BYE("out of memory");
+
+ // State while processing the input gzip stream.
+ enum { // BETWEEN -> HEAD -> BLOCK -> TAIL -> BETWEEN -> ...
+ BETWEEN, // between gzip members (must end in this state)
+ HEAD, // reading a gzip header
+ BLOCK, // reading deflate blocks
+ TAIL // reading a gzip trailer
+ } state = BETWEEN; // current component being processed
+ unsigned long crc = 0; // accumulated CRC of uncompressed data
+ unsigned long len = 0; // accumulated length of uncompressed data
+ unsigned long buf = 0; // deflate stream bit buffer of num bits
+ int num = 0; // number of bits in buf (at bottom)
+
+ // Write a canonical gzip header (no mod time, file name, comment, extra
+ // block, or extra flags, and OS is marked as unknown).
+ fwrite("\x1f\x8b\x08\0\0\0\0\0\0\xff", 1, 10, out);
+
+ // Process the gzip stream from in until reaching the end of the input,
+ // encountering invalid input, or experiencing an i/o error.
+ int more; // true if not at the end of the input
+ do {
+ // State inside this loop.
+ unsigned char *put; // next input buffer location to process
+ int prev; // number of bits from previous block in
+ // the bit buffer, or -1 if not at the
+ // start of a block
+ unsigned long long memb; // uncompressed length of member
+ size_t tail; // number of trailer bytes read (0..8)
+ unsigned long part; // accumulated trailer component
+
+ // Get the next chunk of input from in.
+ unsigned char dat[CHUNK];
+ strm.avail_in = fread(dat, 1, CHUNK, in);
+ if (strm.avail_in == 0)
+ break;
+ more = strm.avail_in == CHUNK;
+ strm.next_in = put = dat;
+
+ // Run that chunk of input through the inflate engine to exhaustion.
+ do {
+ // At this point it is assured that strm.avail_in > 0.
+
+ // Inflate until the end of a gzip component (header, deflate
+ // block, trailer) is reached, or until all of the chunk is
+ // consumed. The resulting decompressed data is discarded, though
+ // the total size of the decompressed data in each member is
+ // tracked, for the calculation of the total CRC.
+ do {
+ // inflate and handle any errors
+ unsigned char scrap[CHUNK];
+ strm.avail_out = CHUNK;
+ strm.next_out = scrap;
+ int ret = inflate(&strm, Z_BLOCK);
+ if (ret == Z_MEM_ERROR)
+ BYE("out of memory");
+ if (ret == Z_DATA_ERROR)
+ BYE("input invalid: %s", strm.msg);
+ if (ret != Z_OK && ret != Z_BUF_ERROR && ret != Z_STREAM_END)
+ BYE("internal error");
+
+ // Update the number of uncompressed bytes generated in this
+ // member. The actual count (not modulo 2^32) is required to
+ // correctly compute the total CRC.
+ unsigned got = CHUNK - strm.avail_out;
+ memb += got;
+ if (memb < got)
+ BYE("overflow error");
+
+ // Continue to process this chunk until it is consumed, or
+ // until the end of a component (header, deflate block, or
+ // trailer) is reached.
+ } while (strm.avail_out == 0 && (strm.data_type & 0x80) == 0);
+
+ // Since strm.avail_in was > 0 for the inflate call, some input was
+ // just consumed. It is therefore assured that put < strm.next_in.
+
+ // Disposition the consumed component or part of a component.
+ switch (state) {
+ case BETWEEN:
+ state = HEAD;
+ // Fall through to HEAD when some or all of the header is
+ // processed.
+
+ case HEAD:
+ // Discard the header.
+ if (strm.data_type & 0x80) {
+ // End of header reached -- deflate blocks follow.
+ put = strm.next_in;
+ prev = num;
+ memb = 0;
+ state = BLOCK;
+ }
+ break;
+
+ case BLOCK:
+ // Copy the deflate stream to the output, but with the
+ // last-block-bit cleared. Re-synchronize stored block
+ // headers to the output byte boundaries. The bytes at
+ // put..strm.next_in-1 is the compressed data that has been
+ // processed and is ready to be copied to the output.
+
+ // At this point, it is assured that new compressed data is
+ // available, i.e., put < strm.next_in. If prev is -1, then
+ // that compressed data starts in the middle of a deflate
+ // block. If prev is not -1, then the bits in the bit
+ // buffer, possibly combined with the bits in *put, contain
+ // the three-bit header of the new deflate block. In that
+ // case, prev is the number of bits from the previous block
+ // that remain in the bit buffer. Since num is the number
+ // of bits in the bit buffer, we have that num - prev is
+ // the number of bits from the new block currently in the
+ // bit buffer.
+
+ // If strm.data_type & 0xc0 is 0x80, then the last byte of
+ // the available compressed data includes the last bits of
+ // the end of a deflate block. In that case, that last byte
+ // also has strm.data_type & 0x1f bits of the next deflate
+ // block, in the range 0..7. If strm.data_type & 0xc0 is
+ // 0xc0, then the last byte of the compressed data is the
+ // end of the deflate stream, followed by strm.data_type &
+ // 0x1f pad bits, also in the range 0..7.
+
+ // Set bits to the number of bits not yet consumed from the
+ // last byte. If we are at the end of the block, bits is
+ // either the number of bits in the last byte belonging to
+ // the next block, or the number of pad bits after the
+ // final block. In either of those cases, bits is in the
+ // range 0..7.
+ ; // (required due to C syntax oddity)
+ int bits = strm.data_type & 0x1f;
+
+ if (prev != -1) {
+ // We are at the start of a new block. Clear the last
+ // block bit, and check for special cases. If it is a
+ // stored block, then emit the header and pad to the
+ // next byte boundary. If it is a final, empty fixed
+ // block, then excise it.
+
+ // Some or all of the three header bits for this block
+ // may already be in the bit buffer. Load any remaining
+ // header bits into the bit buffer.
+ if (num - prev < 3) {
+ buf += (unsigned long)*put++ << num;
+ num += 8;
+ }
+
+ // Set last to have a 1 in the position of the last
+ // block bit in the bit buffer.
+ unsigned long last = (unsigned long)1 << prev;
+
+ if (((buf >> prev) & 7) == 3) {
+ // This is a final fixed block. Load at least ten
+ // bits from this block, including the header, into
+ // the bit buffer. We already have at least three,
+ // so at most one more byte needs to be loaded.
+ if (num - prev < 10) {
+ if (put == strm.next_in)
+ // Need to go get and process more input.
+ // We'll end up back here to finish this.
+ break;
+ buf += (unsigned long)*put++ << num;
+ num += 8;
+ }
+ if (((buf >> prev) & 0x3ff) == 3) {
+ // That final fixed block is empty. Delete it
+ // to avoid adding an empty block every time a
+ // gzip stream is normalized.
+ num = prev;
+ buf &= last - 1; // zero the pad bits
+ }
+ }
+ else if (((buf >> prev) & 6) == 0) {
+ // This is a stored block. Flush to the next
+ // byte boundary after the three-bit header.
+ num = (prev + 10) & ~7;
+ buf &= last - 1; // zero the pad bits
+ }
+
+ // Clear the last block bit.
+ buf &= ~last;
+
+ // Write out complete bytes in the bit buffer.
+ while (num >= 8) {
+ putc(buf, out);
+ buf >>= 8;
+ num -= 8;
+ }
+
+ // If no more bytes left to process, then we have
+ // consumed the byte that had bits from the next block.
+ if (put == strm.next_in)
+ bits = 0;
+ }
+
+ // We are done handling the deflate block header. Now copy
+ // all or almost all of the remaining compressed data that
+ // has been processed so far. Don't copy one byte at the
+ // end if it contains bits from the next deflate block or
+ // pad bits at the end of a deflate block.
+
+ // mix is 1 if we are at the end of a deflate block, and if
+ // some of the bits in the last byte follow this block. mix
+ // is 0 if we are in the middle of a deflate block, if the
+ // deflate block ended on a byte boundary, or if all of the
+ // compressed data processed so far has been consumed.
+ int mix = (strm.data_type & 0x80) && bits;
+
+ // Copy all of the processed compressed data to the output,
+ // except for the last byte if it contains bits from the
+ // next deflate block or pad bits at the end of the deflate
+ // stream. Copy the data after shifting in num bits from
+ // buf in front of it, leaving num bits from the end of the
+ // compressed data in buf when done.
+ unsigned char *end = strm.next_in - mix;
+ if (put < end) {
+ if (num)
+ // Insert num bits from buf before the data being
+ // copied.
+ do {
+ buf += (unsigned)(*put++) << num;
+ putc(buf, out);
+ buf >>= 8;
+ } while (put < end);
+ else {
+ // No shifting needed -- write directly.
+ fwrite(put, 1, end - put, out);
+ put = end;
+ }
+ }
+
+ // Process the last processed byte if it wasn't written.
+ if (mix) {
+ // Load the last byte into the bit buffer.
+ buf += (unsigned)(*put++) << num;
+ num += 8;
+
+ if (strm.data_type & 0x40) {
+ // We are at the end of the deflate stream and
+ // there are bits pad bits. Discard the pad bits
+ // and write a byte to the output, if available.
+ // Leave the num bits left over in buf to prepend
+ // to the next deflate stream.
+ num -= bits;
+ if (num >= 8) {
+ putc(buf, out);
+ num -= 8;
+ buf >>= 8;
+ }
+
+ // Force the pad bits in the bit buffer to zeros.
+ buf &= ((unsigned long)1 << num) - 1;
+
+ // Don't need to set prev here since going to TAIL.
+ }
+ else
+ // At the end of an internal deflate block. Leave
+ // the last byte in the bit buffer to examine on
+ // the next entry to BLOCK, when more bits from the
+ // next block will be available.
+ prev = num - bits; // number of bits in buffer
+ // from current block
+ }
+
+ // Don't have a byte left over, so we are in the middle of
+ // a deflate block, or the deflate block ended on a byte
+ // boundary. Set prev appropriately for the next entry into
+ // BLOCK.
+ else if (strm.data_type & 0x80)
+ // The block ended on a byte boundary, so no header
+ // bits are in the bit buffer.
+ prev = num;
+ else
+ // In the middle of a deflate block, so no header here.
+ prev = -1;
+
+ // Check for the end of the deflate stream.
+ if ((strm.data_type & 0xc0) == 0xc0) {
+ // That ends the deflate stream on the input side, the
+ // pad bits were discarded, and any remaining bits from
+ // the last block in the stream are saved in the bit
+ // buffer to prepend to the next stream. Process the
+ // gzip trailer next.
+ tail = 0;
+ part = 0;
+ state = TAIL;
+ }
+ break;
+
+ case TAIL:
+ // Accumulate available trailer bytes to update the total
+ // CRC and the total uncompressed length.
+ do {
+ part = (part >> 8) + ((unsigned long)(*put++) << 24);
+ tail++;
+ if (tail == 4) {
+ // Update the total CRC.
+ z_off_t len2 = memb;
+ if (len2 < 0 || (unsigned long long)len2 != memb)
+ BYE("overflow error");
+ crc = crc ? crc32_combine(crc, part, len2) : part;
+ part = 0;
+ }
+ else if (tail == 8) {
+ // Update the total uncompressed length. (It's ok
+ // if this sum is done modulo 2^32.)
+ len += part;
+
+ // At the end of a member. Set up to inflate an
+ // immediately following gzip member. (If we made
+ // it this far, then the trailer was valid.)
+ if (inflateReset(&strm) != Z_OK)
+ BYE("internal error");
+ state = BETWEEN;
+ break;
+ }
+ } while (put < strm.next_in);
+ break;
+ }
+
+ // Process the input buffer until completely consumed.
+ } while (strm.avail_in > 0);
+
+ // Process input until end of file, invalid input, or i/o error.
+ } while (more);
+
+ // Done with the inflate engine.
+ inflateEnd(&strm);
+
+ // Verify the validity of the input.
+ if (state != BETWEEN)
+ BYE("input invalid: incomplete gzip stream");
+
+ // Write the remaining deflate stream bits, followed by a terminating
+ // deflate fixed block.
+ buf += (unsigned long)3 << num;
+ putc(buf, out);
+ putc(buf >> 8, out);
+ if (num > 6)
+ putc(0, out);
+
+ // Write the gzip trailer, which is the CRC and the uncompressed length
+ // modulo 2^32, both in little-endian order.
+ putc(crc, out);
+ putc(crc >> 8, out);
+ putc(crc >> 16, out);
+ putc(crc >> 24, out);
+ putc(len, out);
+ putc(len >> 8, out);
+ putc(len >> 16, out);
+ putc(len >> 24, out);
+ fflush(out);
+
+ // Check for any i/o errors.
+ if (ferror(in) || ferror(out))
+ BYE("i/o error: %s", strerror(errno));
+
+ // All good!
+ *err = NULL;
+ return 0;
+}
+
+// Normalize the gzip stream on stdin, writing the result to stdout.
+int main(void) {
+ // Avoid end-of-line conversions on evil operating systems.
+ SET_BINARY_MODE(stdin);
+ SET_BINARY_MODE(stdout);
+
+ // Normalize from stdin to stdout, returning 1 on error, 0 if ok.
+ char *err;
+ int ret = gzip_normalize(stdin, stdout, &err);
+ if (ret)
+ fprintf(stderr, "gznorm error: %s\n", err);
+ free(err);
+ return ret;
+}
diff --git a/zlib/examples/zran.c b/zlib/examples/zran.c
index 4fec6594a66..f279db71c78 100644
--- a/zlib/examples/zran.c
+++ b/zlib/examples/zran.c
@@ -1,11 +1,13 @@
/* zran.c -- example of zlib/gzip stream indexing and random access
- * Copyright (C) 2005, 2012 Mark Adler
+ * Copyright (C) 2005, 2012, 2018 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
- Version 1.1 29 Sep 2012 Mark Adler */
+ * Version 1.2 14 Oct 2018 Mark Adler */
/* Version History:
1.0 29 May 2005 First version
1.1 29 Sep 2012 Fix memory reallocation error
+ 1.2 14 Oct 2018 Handle gzip streams with multiple members
+ Add a header file to facilitate usage in applications
*/
/* Illustrate the use of Z_BLOCK, inflatePrime(), and inflateSetDictionary()
@@ -20,11 +22,11 @@
the starting file offset and bit of that block, and the 32K bytes of
uncompressed data that precede that block. Also the uncompressed offset of
that block is saved to provide a referece for locating a desired starting
- point in the uncompressed stream. build_index() works by decompressing the
- input zlib or gzip stream a block at a time, and at the end of each block
- deciding if enough uncompressed data has gone by to justify the creation of
- a new access point. If so, that point is saved in a data structure that
- grows as needed to accommodate the points.
+ point in the uncompressed stream. deflate_index_build() works by
+ decompressing the input zlib or gzip stream a block at a time, and at the
+ end of each block deciding if enough uncompressed data has gone by to
+ justify the creation of a new access point. If so, that point is saved in a
+ data structure that grows as needed to accommodate the points.
To use the index, an offset in the uncompressed data is provided, for which
the latest access point at or preceding that offset is located in the index.
@@ -43,7 +45,8 @@
There is some fair bit of overhead to starting inflation for the random
access, mainly copying the 32K byte dictionary. So if small pieces of the
file are being accessed, it would make sense to implement a cache to hold
- some lookahead and avoid many calls to extract() for small lengths.
+ some lookahead and avoid many calls to deflate_index_extract() for small
+ lengths.
Another way to build an index would be to use inflateCopy(). That would
not be constrained to have access points at block boundaries, but requires
@@ -56,30 +59,21 @@
#include <stdlib.h>
#include <string.h>
#include "zlib.h"
+#include "zran.h"
-#define local static
-
-#define SPAN 1048576L /* desired distance between access points */
#define WINSIZE 32768U /* sliding window size */
#define CHUNK 16384 /* file input buffer size */
-/* access point entry */
+/* Access point entry. */
struct point {
off_t out; /* corresponding offset in uncompressed data */
off_t in; /* offset in input file of first full byte */
- int bits; /* number of bits (1-7) from byte at in - 1, or 0 */
+ int bits; /* number of bits (1-7) from byte at in-1, or 0 */
unsigned char window[WINSIZE]; /* preceding 32K of uncompressed data */
};
-/* access point list */
-struct access {
- int have; /* number of list entries filled in */
- int size; /* number of list entries allocated */
- struct point *list; /* allocated list */
-};
-
-/* Deallocate an index built by build_index() */
-local void free_index(struct access *index)
+/* See comments in zran.h. */
+void deflate_index_free(struct deflate_index *index)
{
if (index != NULL) {
free(index->list);
@@ -87,39 +81,43 @@ local void free_index(struct access *index)
}
}
-/* Add an entry to the access point list. If out of memory, deallocate the
- existing list and return NULL. */
-local struct access *addpoint(struct access *index, int bits,
- off_t in, off_t out, unsigned left, unsigned char *window)
+/* Add an entry to the access point list. If out of memory, deallocate the
+ existing list and return NULL. index->gzip is the allocated size of the
+ index in point entries, until it is time for deflate_index_build() to
+ return, at which point gzip is set to indicate a gzip file or not.
+ */
+static struct deflate_index *addpoint(struct deflate_index *index, int bits,
+ off_t in, off_t out, unsigned left,
+ unsigned char *window)
{
struct point *next;
/* if list is empty, create it (start with eight points) */
if (index == NULL) {
- index = malloc(sizeof(struct access));
+ index = malloc(sizeof(struct deflate_index));
if (index == NULL) return NULL;
index->list = malloc(sizeof(struct point) << 3);
if (index->list == NULL) {
free(index);
return NULL;
}
- index->size = 8;
+ index->gzip = 8;
index->have = 0;
}
/* if list is full, make it bigger */
- else if (index->have == index->size) {
- index->size <<= 1;
- next = realloc(index->list, sizeof(struct point) * index->size);
+ else if (index->have == index->gzip) {
+ index->gzip <<= 1;
+ next = realloc(index->list, sizeof(struct point) * index->gzip);
if (next == NULL) {
- free_index(index);
+ deflate_index_free(index);
return NULL;
}
index->list = next;
}
/* fill in entry and increment how many we have */
- next = index->list + index->have;
+ next = (struct point *)(index->list) + index->have;
next->bits = bits;
next->in = in;
next->out = out;
@@ -133,20 +131,14 @@ local struct access *addpoint(struct access *index, int bits,
return index;
}
-/* Make one entire pass through the compressed stream and build an index, with
- access points about every span bytes of uncompressed output -- span is
- chosen to balance the speed of random access against the memory requirements
- of the list, about 32K bytes per access point. Note that data after the end
- of the first zlib or gzip stream in the file is ignored. build_index()
- returns the number of access points on success (>= 1), Z_MEM_ERROR for out
- of memory, Z_DATA_ERROR for an error in the input file, or Z_ERRNO for a
- file read error. On success, *built points to the resulting index. */
-local int build_index(FILE *in, off_t span, struct access **built)
+/* See comments in zran.h. */
+int deflate_index_build(FILE *in, off_t span, struct deflate_index **built)
{
int ret;
+ int gzip = 0; /* true if reading a gzip file */
off_t totin, totout; /* our own total counters to avoid 4GB limit */
off_t last; /* totout value of last access point */
- struct access *index; /* access points being generated */
+ struct deflate_index *index; /* access points being generated */
z_stream strm;
unsigned char input[CHUNK];
unsigned char window[WINSIZE];
@@ -163,7 +155,7 @@ local int build_index(FILE *in, off_t span, struct access **built)
/* inflate the input, maintain a sliding window, and build an index -- this
also validates the integrity of the compressed data using the check
- information at the end of the gzip or zlib stream */
+ information in the gzip or zlib stream */
totin = totout = last = 0;
index = NULL; /* will be allocated by first addpoint() */
strm.avail_out = 0;
@@ -172,14 +164,19 @@ local int build_index(FILE *in, off_t span, struct access **built)
strm.avail_in = fread(input, 1, CHUNK, in);
if (ferror(in)) {
ret = Z_ERRNO;
- goto build_index_error;
+ goto deflate_index_build_error;
}
if (strm.avail_in == 0) {
ret = Z_DATA_ERROR;
- goto build_index_error;
+ goto deflate_index_build_error;
}
strm.next_in = input;
+ /* check for a gzip stream */
+ if (totin == 0 && strm.avail_in >= 3 &&
+ input[0] == 31 && input[1] == 139 && input[2] == 8)
+ gzip = 1;
+
/* process all of that, or until end of stream */
do {
/* reset sliding window if necessary */
@@ -198,9 +195,17 @@ local int build_index(FILE *in, off_t span, struct access **built)
if (ret == Z_NEED_DICT)
ret = Z_DATA_ERROR;
if (ret == Z_MEM_ERROR || ret == Z_DATA_ERROR)
- goto build_index_error;
- if (ret == Z_STREAM_END)
+ goto deflate_index_build_error;
+ if (ret == Z_STREAM_END) {
+ if (gzip &&
+ (strm.avail_in || ungetc(getc(in), in) != EOF)) {
+ ret = inflateReset(&strm);
+ if (ret != Z_OK)
+ goto deflate_index_build_error;
+ continue;
+ }
break;
+ }
/* if at end of block, consider adding an index entry (note that if
data_type indicates an end-of-block, then all of the
@@ -217,7 +222,7 @@ local int build_index(FILE *in, off_t span, struct access **built)
totout, strm.avail_out, window);
if (index == NULL) {
ret = Z_MEM_ERROR;
- goto build_index_error;
+ goto deflate_index_build_error;
}
last = totout;
}
@@ -227,27 +232,21 @@ local int build_index(FILE *in, off_t span, struct access **built)
/* clean up and return index (release unused entries in list) */
(void)inflateEnd(&strm);
index->list = realloc(index->list, sizeof(struct point) * index->have);
- index->size = index->have;
+ index->gzip = gzip;
+ index->length = totout;
*built = index;
- return index->size;
+ return index->have;
/* return error */
- build_index_error:
+ deflate_index_build_error:
(void)inflateEnd(&strm);
- if (index != NULL)
- free_index(index);
+ deflate_index_free(index);
return ret;
}
-/* Use the index to read len bytes from offset into buf, return bytes read or
- negative for error (Z_DATA_ERROR or Z_MEM_ERROR). If data is requested past
- the end of the uncompressed data, then extract() will return a value less
- than len, indicating how much as actually read into buf. This function
- should not return a data error unless the file was modified since the index
- was generated. extract() may also return Z_ERRNO if there is an error on
- reading or seeking the input file. */
-local int extract(FILE *in, struct access *index, off_t offset,
- unsigned char *buf, int len)
+/* See comments in zran.h. */
+int deflate_index_extract(FILE *in, struct deflate_index *index, off_t offset,
+ unsigned char *buf, int len)
{
int ret, skip;
z_stream strm;
@@ -276,12 +275,12 @@ local int extract(FILE *in, struct access *index, off_t offset,
return ret;
ret = fseeko(in, here->in - (here->bits ? 1 : 0), SEEK_SET);
if (ret == -1)
- goto extract_ret;
+ goto deflate_index_extract_ret;
if (here->bits) {
ret = getc(in);
if (ret == -1) {
ret = ferror(in) ? Z_ERRNO : Z_DATA_ERROR;
- goto extract_ret;
+ goto deflate_index_extract_ret;
}
(void)inflatePrime(&strm, here->bits, ret >> (8 - here->bits));
}
@@ -293,21 +292,21 @@ local int extract(FILE *in, struct access *index, off_t offset,
skip = 1; /* while skipping to offset */
do {
/* define where to put uncompressed data, and how much */
- if (offset == 0 && skip) { /* at offset now */
- strm.avail_out = len;
- strm.next_out = buf;
- skip = 0; /* only do this once */
- }
if (offset > WINSIZE) { /* skip WINSIZE bytes */
strm.avail_out = WINSIZE;
strm.next_out = discard;
offset -= WINSIZE;
}
- else if (offset != 0) { /* last skip */
+ else if (offset > 0) { /* last skip */
strm.avail_out = (unsigned)offset;
strm.next_out = discard;
offset = 0;
}
+ else if (skip) { /* at offset now */
+ strm.avail_out = len;
+ strm.next_out = buf;
+ skip = 0; /* only do this once */
+ }
/* uncompress until avail_out filled, or end of stream */
do {
@@ -315,11 +314,11 @@ local int extract(FILE *in, struct access *index, off_t offset,
strm.avail_in = fread(input, 1, CHUNK, in);
if (ferror(in)) {
ret = Z_ERRNO;
- goto extract_ret;
+ goto deflate_index_extract_ret;
}
if (strm.avail_in == 0) {
ret = Z_DATA_ERROR;
- goto extract_ret;
+ goto deflate_index_extract_ret;
}
strm.next_in = input;
}
@@ -327,41 +326,99 @@ local int extract(FILE *in, struct access *index, off_t offset,
if (ret == Z_NEED_DICT)
ret = Z_DATA_ERROR;
if (ret == Z_MEM_ERROR || ret == Z_DATA_ERROR)
- goto extract_ret;
- if (ret == Z_STREAM_END)
- break;
+ goto deflate_index_extract_ret;
+ if (ret == Z_STREAM_END) {
+ /* the raw deflate stream has ended */
+ if (index->gzip == 0)
+ /* this is a zlib stream that has ended -- done */
+ break;
+
+ /* near the end of a gzip member, which might be followed by
+ another gzip member -- skip the gzip trailer and see if
+ there is more input after it */
+ if (strm.avail_in < 8) {
+ fseeko(in, 8 - strm.avail_in, SEEK_CUR);
+ strm.avail_in = 0;
+ }
+ else {
+ strm.avail_in -= 8;
+ strm.next_in += 8;
+ }
+ if (strm.avail_in == 0 && ungetc(getc(in), in) == EOF)
+ /* the input ended after the gzip trailer -- done */
+ break;
+
+ /* there is more input, so another gzip member should follow --
+ validate and skip the gzip header */
+ ret = inflateReset2(&strm, 31);
+ if (ret != Z_OK)
+ goto deflate_index_extract_ret;
+ do {
+ if (strm.avail_in == 0) {
+ strm.avail_in = fread(input, 1, CHUNK, in);
+ if (ferror(in)) {
+ ret = Z_ERRNO;
+ goto deflate_index_extract_ret;
+ }
+ if (strm.avail_in == 0) {
+ ret = Z_DATA_ERROR;
+ goto deflate_index_extract_ret;
+ }
+ strm.next_in = input;
+ }
+ ret = inflate(&strm, Z_BLOCK);
+ if (ret == Z_MEM_ERROR || ret == Z_DATA_ERROR)
+ goto deflate_index_extract_ret;
+ } while ((strm.data_type & 128) == 0);
+
+ /* set up to continue decompression of the raw deflate stream
+ that follows the gzip header */
+ ret = inflateReset2(&strm, -15);
+ if (ret != Z_OK)
+ goto deflate_index_extract_ret;
+ }
+
+ /* continue to process the available input before reading more */
} while (strm.avail_out != 0);
- /* if reach end of stream, then don't keep trying to get more */
if (ret == Z_STREAM_END)
+ /* reached the end of the compressed data -- return the data that
+ was available, possibly less than requested */
break;
- /* do until offset reached and requested data read, or stream ends */
+ /* do until offset reached and requested data read */
} while (skip);
- /* compute number of uncompressed bytes read after offset */
+ /* compute the number of uncompressed bytes read after the offset */
ret = skip ? 0 : len - strm.avail_out;
- /* clean up and return bytes read or error */
- extract_ret:
+ /* clean up and return the bytes read, or the negative error */
+ deflate_index_extract_ret:
(void)inflateEnd(&strm);
return ret;
}
-/* Demonstrate the use of build_index() and extract() by processing the file
- provided on the command line, and the extracting 16K from about 2/3rds of
- the way through the uncompressed output, and writing that to stdout. */
+#ifdef TEST
+
+#define SPAN 1048576L /* desired distance between access points */
+#define LEN 16384 /* number of bytes to extract */
+
+/* Demonstrate the use of deflate_index_build() and deflate_index_extract() by
+ processing the file provided on the command line, and extracting LEN bytes
+ from 2/3rds of the way through the uncompressed output, writing that to
+ stdout. An offset can be provided as the second argument, in which case the
+ data is extracted from there instead. */
int main(int argc, char **argv)
{
int len;
- off_t offset;
+ off_t offset = -1;
FILE *in;
- struct access *index = NULL;
- unsigned char buf[CHUNK];
+ struct deflate_index *index = NULL;
+ unsigned char buf[LEN];
/* open input file */
- if (argc != 2) {
- fprintf(stderr, "usage: zran file.gz\n");
+ if (argc < 2 || argc > 3) {
+ fprintf(stderr, "usage: zran file.gz [offset]\n");
return 1;
}
in = fopen(argv[1], "rb");
@@ -370,8 +427,18 @@ int main(int argc, char **argv)
return 1;
}
+ /* get optional offset */
+ if (argc == 3) {
+ char *end;
+ offset = strtoll(argv[2], &end, 10);
+ if (*end || offset < 0) {
+ fprintf(stderr, "zran: %s is not a valid offset\n", argv[2]);
+ return 1;
+ }
+ }
+
/* build index */
- len = build_index(in, SPAN, &index);
+ len = deflate_index_build(in, SPAN, &index);
if (len < 0) {
fclose(in);
switch (len) {
@@ -392,8 +459,9 @@ int main(int argc, char **argv)
fprintf(stderr, "zran: built index with %d access points\n", len);
/* use index by reading some bytes from an arbitrary offset */
- offset = (index->list[index->have - 1].out << 1) / 3;
- len = extract(in, index, offset, buf, CHUNK);
+ if (offset == -1)
+ offset = (index->length << 1) / 3;
+ len = deflate_index_extract(in, index, offset, buf, LEN);
if (len < 0)
fprintf(stderr, "zran: extraction failed: %s error\n",
len == Z_MEM_ERROR ? "out of memory" : "input corrupted");
@@ -403,7 +471,9 @@ int main(int argc, char **argv)
}
/* clean up and exit */
- free_index(index);
+ deflate_index_free(index);
fclose(in);
return 0;
}
+
+#endif
diff --git a/zlib/examples/zran.h b/zlib/examples/zran.h
new file mode 100644
index 00000000000..2314125d6e9
--- /dev/null
+++ b/zlib/examples/zran.h
@@ -0,0 +1,40 @@
+/* zran.h -- example of zlib/gzip stream indexing and random access
+ * Copyright (C) 2005, 2012, 2018 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ * Version 1.2 14 Oct 2018 Mark Adler */
+
+#include <stdio.h>
+#include "zlib.h"
+
+/* Access point list. */
+struct deflate_index {
+ int have; /* number of list entries */
+ int gzip; /* 1 if the index is of a gzip file, 0 if it is of a
+ zlib stream */
+ off_t length; /* total length of uncompressed data */
+ void *list; /* allocated list of entries */
+};
+
+/* Make one entire pass through a zlib or gzip compressed stream and build an
+ index, with access points about every span bytes of uncompressed output.
+ gzip files with multiple members are indexed in their entirety. span should
+ be chosen to balance the speed of random access against the memory
+ requirements of the list, about 32K bytes per access point. The return value
+ is the number of access points on success (>= 1), Z_MEM_ERROR for out of
+ memory, Z_DATA_ERROR for an error in the input file, or Z_ERRNO for a file
+ read error. On success, *built points to the resulting index. */
+int deflate_index_build(FILE *in, off_t span, struct deflate_index **built);
+
+/* Deallocate an index built by deflate_index_build() */
+void deflate_index_free(struct deflate_index *index);
+
+/* Use the index to read len bytes from offset into buf. Return bytes read or
+ negative for error (Z_DATA_ERROR or Z_MEM_ERROR). If data is requested past
+ the end of the uncompressed data, then deflate_index_extract() will return a
+ value less than len, indicating how much was actually read into buf. This
+ function should not return a data error unless the file was modified since
+ the index was generated, since deflate_index_build() validated all of the
+ input. deflate_index_extract() will return Z_ERRNO if there is an error on
+ reading or seeking the input file. */
+int deflate_index_extract(FILE *in, struct deflate_index *index, off_t offset,
+ unsigned char *buf, int len);
diff --git a/zlib/gzguts.h b/zlib/gzguts.h
index 6378d468a25..57faf37165a 100644
--- a/zlib/gzguts.h
+++ b/zlib/gzguts.h
@@ -1,5 +1,5 @@
/* gzguts.h -- zlib internal header definitions for gz* operations
- * Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013, 2016 Mark Adler
+ * Copyright (C) 2004-2019 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -190,6 +190,7 @@ typedef struct {
/* just for writing */
int level; /* compression level */
int strategy; /* compression strategy */
+ int reset; /* true if a reset is pending after a Z_FINISH */
/* seek request */
z_off64_t skip; /* amount to skip (already rewound if backwards) */
int seek; /* true if seek request pending */
diff --git a/zlib/gzlib.c b/zlib/gzlib.c
index 4105e6aff92..dddaf268730 100644
--- a/zlib/gzlib.c
+++ b/zlib/gzlib.c
@@ -1,11 +1,11 @@
/* gzlib.c -- zlib functions common to reading and writing gzip files
- * Copyright (C) 2004-2017 Mark Adler
+ * Copyright (C) 2004-2019 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
#include "gzguts.h"
-#if defined(_WIN32) && !defined(__BORLANDC__) && !defined(__MINGW32__)
+#if defined(_WIN32) && !defined(__BORLANDC__)
# define LSEEK _lseeki64
#else
#if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0
@@ -81,6 +81,8 @@ local void gz_reset(state)
state->past = 0; /* have not read past end yet */
state->how = LOOK; /* look for gzip header */
}
+ else /* for writing ... */
+ state->reset = 0; /* no deflateReset pending */
state->seek = 0; /* no seek request pending */
gz_error(state, Z_OK, NULL); /* clear error */
state->x.pos = 0; /* no uncompressed data yet */
@@ -397,7 +399,7 @@ z_off64_t ZEXPORT gzseek64(file, offset, whence)
/* if within raw area while reading, just go there */
if (state->mode == GZ_READ && state->how == COPY &&
state->x.pos + offset >= 0) {
- ret = LSEEK(state->fd, offset - state->x.have, SEEK_CUR);
+ ret = LSEEK(state->fd, offset - (z_off64_t)state->x.have, SEEK_CUR);
if (ret == -1)
return -1;
state->x.have = 0;
diff --git a/zlib/gzread.c b/zlib/gzread.c
index 956b91ea7d9..884c9bfe4cf 100644
--- a/zlib/gzread.c
+++ b/zlib/gzread.c
@@ -1,5 +1,5 @@
/* gzread.c -- zlib functions for reading gzip files
- * Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013, 2016 Mark Adler
+ * Copyright (C) 2004-2017 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -314,9 +314,9 @@ local z_size_t gz_read(state, buf, len)
got = 0;
do {
/* set n to the maximum amount of len that fits in an unsigned int */
- n = -1;
+ n = (unsigned)-1;
if (n > len)
- n = len;
+ n = (unsigned)len;
/* first just try copying data from the output buffer */
if (state->x.have) {
@@ -397,7 +397,7 @@ int ZEXPORT gzread(file, buf, len)
}
/* read len or fewer bytes to buf */
- len = gz_read(state, buf, len);
+ len = (unsigned)gz_read(state, buf, len);
/* check for an error */
if (len == 0 && state->err != Z_OK && state->err != Z_BUF_ERROR)
@@ -447,7 +447,6 @@ z_size_t ZEXPORT gzfread(buf, size, nitems, file)
int ZEXPORT gzgetc(file)
gzFile file;
{
- int ret;
unsigned char buf[1];
gz_statep state;
@@ -469,8 +468,7 @@ int ZEXPORT gzgetc(file)
}
/* nothing there -- try gz_read() */
- ret = gz_read(state, buf, 1);
- return ret < 1 ? -1 : buf[0];
+ return gz_read(state, buf, 1) < 1 ? -1 : buf[0];
}
int ZEXPORT gzgetc_(file)
diff --git a/zlib/gzwrite.c b/zlib/gzwrite.c
index c7b5651d70b..a8ffc8f53da 100644
--- a/zlib/gzwrite.c
+++ b/zlib/gzwrite.c
@@ -1,5 +1,5 @@
/* gzwrite.c -- zlib functions for writing gzip files
- * Copyright (C) 2004-2017 Mark Adler
+ * Copyright (C) 2004-2019 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -97,6 +97,15 @@ local int gz_comp(state, flush)
return 0;
}
+ /* check for a pending reset */
+ if (state->reset) {
+ /* don't start a new gzip member unless there is data to write */
+ if (strm->avail_in == 0)
+ return 0;
+ deflateReset(strm);
+ state->reset = 0;
+ }
+
/* run deflate() on provided input until it produces no more output */
ret = Z_OK;
do {
@@ -134,7 +143,7 @@ local int gz_comp(state, flush)
/* if that completed a deflate stream, allow another to start */
if (flush == Z_FINISH)
- deflateReset(strm);
+ state->reset = 1;
/* all done, no errors */
return 0;
@@ -209,7 +218,7 @@ local z_size_t gz_write(state, buf, len)
state->in);
copy = state->size - have;
if (copy > len)
- copy = len;
+ copy = (unsigned)len;
memcpy(state->in + have, buf, copy);
state->strm.avail_in += copy;
state->x.pos += copy;
@@ -229,7 +238,7 @@ local z_size_t gz_write(state, buf, len)
do {
unsigned n = (unsigned)-1;
if (n > len)
- n = len;
+ n = (unsigned)len;
state->strm.avail_in = n;
state->x.pos += n;
if (gz_comp(state, Z_NO_FLUSH) == -1)
@@ -349,12 +358,11 @@ int ZEXPORT gzputc(file, c)
}
/* -- see zlib.h -- */
-int ZEXPORT gzputs(file, str)
+int ZEXPORT gzputs(file, s)
gzFile file;
- const char *str;
+ const char *s;
{
- int ret;
- z_size_t len;
+ z_size_t len, put;
gz_statep state;
/* get internal structure */
@@ -367,9 +375,13 @@ int ZEXPORT gzputs(file, str)
return -1;
/* write string */
- len = strlen(str);
- ret = gz_write(state, str, len);
- return ret == 0 && len != 0 ? -1 : ret;
+ len = strlen(s);
+ if ((int)len < 0 || (unsigned)len != len) {
+ gz_error(state, Z_STREAM_ERROR, "string length does not fit in int");
+ return -1;
+ }
+ put = gz_write(state, s, len);
+ return put < len ? -1 : (int)len;
}
#if defined(STDC) || defined(Z_HAVE_STDARG_H)
@@ -441,7 +453,7 @@ int ZEXPORTVA gzvprintf(gzFile file, const char *format, va_list va)
strm->avail_in = state->size;
if (gz_comp(state, Z_NO_FLUSH) == -1)
return state->err;
- memcpy(state->in, state->in + state->size, left);
+ memmove(state->in, state->in + state->size, left);
strm->next_in = state->in;
strm->avail_in = left;
}
@@ -540,7 +552,7 @@ int ZEXPORTVA gzprintf (file, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10,
strm->avail_in = state->size;
if (gz_comp(state, Z_NO_FLUSH) == -1)
return state->err;
- memcpy(state->in, state->in + state->size, left);
+ memmove(state->in, state->in + state->size, left);
strm->next_in = state->in;
strm->avail_in = left;
}
diff --git a/zlib/infback.c b/zlib/infback.c
index 59679ecbfc5..a390c58e816 100644
--- a/zlib/infback.c
+++ b/zlib/infback.c
@@ -1,5 +1,5 @@
/* infback.c -- inflate using a call-back interface
- * Copyright (C) 1995-2016 Mark Adler
+ * Copyright (C) 1995-2022 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -477,6 +477,7 @@ void FAR *out_desc;
}
Tracev((stderr, "inflate: codes ok\n"));
state->mode = LEN;
+ /* fallthrough */
case LEN:
/* use inflate_fast() if we have enough input and output */
diff --git a/zlib/inffast.c b/zlib/inffast.c
index 0dbd1dbc09f..1fec7f363fa 100644
--- a/zlib/inffast.c
+++ b/zlib/inffast.c
@@ -70,7 +70,7 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */
code const FAR *dcode; /* local strm->distcode */
unsigned lmask; /* mask for first level of length codes */
unsigned dmask; /* mask for first level of distance codes */
- code here; /* retrieved table entry */
+ code const *here; /* retrieved table entry */
unsigned op; /* code bits, operation, extra bits, or */
/* window position, window bytes to copy */
unsigned len; /* match length, unused bytes */
@@ -107,20 +107,20 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */
hold += (unsigned long)(*in++) << bits;
bits += 8;
}
- here = lcode[hold & lmask];
+ here = lcode + (hold & lmask);
dolen:
- op = (unsigned)(here.bits);
+ op = (unsigned)(here->bits);
hold >>= op;
bits -= op;
- op = (unsigned)(here.op);
+ op = (unsigned)(here->op);
if (op == 0) { /* literal */
- Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
+ Tracevv((stderr, here->val >= 0x20 && here->val < 0x7f ?
"inflate: literal '%c'\n" :
- "inflate: literal 0x%02x\n", here.val));
- *out++ = (unsigned char)(here.val);
+ "inflate: literal 0x%02x\n", here->val));
+ *out++ = (unsigned char)(here->val);
}
else if (op & 16) { /* length base */
- len = (unsigned)(here.val);
+ len = (unsigned)(here->val);
op &= 15; /* number of extra bits */
if (op) {
if (bits < op) {
@@ -138,14 +138,14 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */
hold += (unsigned long)(*in++) << bits;
bits += 8;
}
- here = dcode[hold & dmask];
+ here = dcode + (hold & dmask);
dodist:
- op = (unsigned)(here.bits);
+ op = (unsigned)(here->bits);
hold >>= op;
bits -= op;
- op = (unsigned)(here.op);
+ op = (unsigned)(here->op);
if (op & 16) { /* distance base */
- dist = (unsigned)(here.val);
+ dist = (unsigned)(here->val);
op &= 15; /* number of extra bits */
if (bits < op) {
hold += (unsigned long)(*in++) << bits;
@@ -264,7 +264,7 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */
}
}
else if ((op & 64) == 0) { /* 2nd level distance code */
- here = dcode[here.val + (hold & ((1U << op) - 1))];
+ here = dcode + here->val + (hold & ((1U << op) - 1));
goto dodist;
}
else {
@@ -274,7 +274,7 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */
}
}
else if ((op & 64) == 0) { /* 2nd level length code */
- here = lcode[here.val + (hold & ((1U << op) - 1))];
+ here = lcode + here->val + (hold & ((1U << op) - 1));
goto dolen;
}
else if (op & 32) { /* end-of-block */
diff --git a/zlib/inflate.c b/zlib/inflate.c
index ac333e8c2ed..7be8c63662a 100644
--- a/zlib/inflate.c
+++ b/zlib/inflate.c
@@ -1,5 +1,5 @@
/* inflate.c -- zlib decompression
- * Copyright (C) 1995-2016 Mark Adler
+ * Copyright (C) 1995-2022 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -130,6 +130,7 @@ z_streamp strm;
state->mode = HEAD;
state->last = 0;
state->havedict = 0;
+ state->flags = -1;
state->dmax = 32768U;
state->head = Z_NULL;
state->hold = 0;
@@ -447,10 +448,10 @@ unsigned copy;
/* check function to use adler32() for zlib or crc32() for gzip */
#ifdef GUNZIP
-# define UPDATE(check, buf, len) \
+# define UPDATE_CHECK(check, buf, len) \
(state->flags ? crc32(check, buf, len) : adler32(check, buf, len))
#else
-# define UPDATE(check, buf, len) adler32(check, buf, len)
+# define UPDATE_CHECK(check, buf, len) adler32(check, buf, len)
#endif
/* check macros for header crc */
@@ -670,7 +671,6 @@ int flush;
state->mode = FLAGS;
break;
}
- state->flags = 0; /* expect zlib header */
if (state->head != Z_NULL)
state->head->done = -1;
if (!(state->wrap & 1) || /* check if zlib header allowed */
@@ -697,6 +697,7 @@ int flush;
break;
}
state->dmax = 1U << len;
+ state->flags = 0; /* indicate zlib header */
Tracev((stderr, "inflate: zlib header ok\n"));
strm->adler = state->check = adler32(0L, Z_NULL, 0);
state->mode = hold & 0x200 ? DICTID : TYPE;
@@ -722,6 +723,7 @@ int flush;
CRC2(state->check, hold);
INITBITS();
state->mode = TIME;
+ /* fallthrough */
case TIME:
NEEDBITS(32);
if (state->head != Z_NULL)
@@ -730,6 +732,7 @@ int flush;
CRC4(state->check, hold);
INITBITS();
state->mode = OS;
+ /* fallthrough */
case OS:
NEEDBITS(16);
if (state->head != Z_NULL) {
@@ -740,6 +743,7 @@ int flush;
CRC2(state->check, hold);
INITBITS();
state->mode = EXLEN;
+ /* fallthrough */
case EXLEN:
if (state->flags & 0x0400) {
NEEDBITS(16);
@@ -753,6 +757,7 @@ int flush;
else if (state->head != Z_NULL)
state->head->extra = Z_NULL;
state->mode = EXTRA;
+ /* fallthrough */
case EXTRA:
if (state->flags & 0x0400) {
copy = state->length;
@@ -775,6 +780,7 @@ int flush;
}
state->length = 0;
state->mode = NAME;
+ /* fallthrough */
case NAME:
if (state->flags & 0x0800) {
if (have == 0) goto inf_leave;
@@ -796,6 +802,7 @@ int flush;
state->head->name = Z_NULL;
state->length = 0;
state->mode = COMMENT;
+ /* fallthrough */
case COMMENT:
if (state->flags & 0x1000) {
if (have == 0) goto inf_leave;
@@ -816,6 +823,7 @@ int flush;
else if (state->head != Z_NULL)
state->head->comment = Z_NULL;
state->mode = HCRC;
+ /* fallthrough */
case HCRC:
if (state->flags & 0x0200) {
NEEDBITS(16);
@@ -839,6 +847,7 @@ int flush;
strm->adler = state->check = ZSWAP32(hold);
INITBITS();
state->mode = DICT;
+ /* fallthrough */
case DICT:
if (state->havedict == 0) {
RESTORE();
@@ -846,8 +855,10 @@ int flush;
}
strm->adler = state->check = adler32(0L, Z_NULL, 0);
state->mode = TYPE;
+ /* fallthrough */
case TYPE:
if (flush == Z_BLOCK || flush == Z_TREES) goto inf_leave;
+ /* fallthrough */
case TYPEDO:
if (state->last) {
BYTEBITS();
@@ -898,8 +909,10 @@ int flush;
INITBITS();
state->mode = COPY_;
if (flush == Z_TREES) goto inf_leave;
+ /* fallthrough */
case COPY_:
state->mode = COPY;
+ /* fallthrough */
case COPY:
copy = state->length;
if (copy) {
@@ -935,6 +948,7 @@ int flush;
Tracev((stderr, "inflate: table sizes ok\n"));
state->have = 0;
state->mode = LENLENS;
+ /* fallthrough */
case LENLENS:
while (state->have < state->ncode) {
NEEDBITS(3);
@@ -956,6 +970,7 @@ int flush;
Tracev((stderr, "inflate: code lengths ok\n"));
state->have = 0;
state->mode = CODELENS;
+ /* fallthrough */
case CODELENS:
while (state->have < state->nlen + state->ndist) {
for (;;) {
@@ -1039,8 +1054,10 @@ int flush;
Tracev((stderr, "inflate: codes ok\n"));
state->mode = LEN_;
if (flush == Z_TREES) goto inf_leave;
+ /* fallthrough */
case LEN_:
state->mode = LEN;
+ /* fallthrough */
case LEN:
if (have >= 6 && left >= 258) {
RESTORE();
@@ -1090,6 +1107,7 @@ int flush;
}
state->extra = (unsigned)(here.op) & 15;
state->mode = LENEXT;
+ /* fallthrough */
case LENEXT:
if (state->extra) {
NEEDBITS(state->extra);
@@ -1100,6 +1118,7 @@ int flush;
Tracevv((stderr, "inflate: length %u\n", state->length));
state->was = state->length;
state->mode = DIST;
+ /* fallthrough */
case DIST:
for (;;) {
here = state->distcode[BITS(state->distbits)];
@@ -1127,6 +1146,7 @@ int flush;
state->offset = (unsigned)here.val;
state->extra = (unsigned)(here.op) & 15;
state->mode = DISTEXT;
+ /* fallthrough */
case DISTEXT:
if (state->extra) {
NEEDBITS(state->extra);
@@ -1143,6 +1163,7 @@ int flush;
#endif
Tracevv((stderr, "inflate: distance %u\n", state->offset));
state->mode = MATCH;
+ /* fallthrough */
case MATCH:
if (left == 0) goto inf_leave;
copy = out - left;
@@ -1202,7 +1223,7 @@ int flush;
state->total += out;
if ((state->wrap & 4) && out)
strm->adler = state->check =
- UPDATE(state->check, put - out, out);
+ UPDATE_CHECK(state->check, put - out, out);
out = left;
if ((state->wrap & 4) && (
#ifdef GUNZIP
@@ -1218,10 +1239,11 @@ int flush;
}
#ifdef GUNZIP
state->mode = LENGTH;
+ /* fallthrough */
case LENGTH:
if (state->wrap && state->flags) {
NEEDBITS(32);
- if (hold != (state->total & 0xffffffffUL)) {
+ if ((state->wrap & 4) && hold != (state->total & 0xffffffff)) {
strm->msg = (char *)"incorrect length check";
state->mode = BAD;
break;
@@ -1231,6 +1253,7 @@ int flush;
}
#endif
state->mode = DONE;
+ /* fallthrough */
case DONE:
ret = Z_STREAM_END;
goto inf_leave;
@@ -1240,6 +1263,7 @@ int flush;
case MEM:
return Z_MEM_ERROR;
case SYNC:
+ /* fallthrough */
default:
return Z_STREAM_ERROR;
}
@@ -1265,7 +1289,7 @@ int flush;
state->total += out;
if ((state->wrap & 4) && out)
strm->adler = state->check =
- UPDATE(state->check, strm->next_out - out, out);
+ UPDATE_CHECK(state->check, strm->next_out - out, out);
strm->data_type = (int)state->bits + (state->last ? 64 : 0) +
(state->mode == TYPE ? 128 : 0) +
(state->mode == LEN_ || state->mode == COPY_ ? 256 : 0);
@@ -1401,6 +1425,7 @@ int ZEXPORT inflateSync(strm)
z_streamp strm;
{
unsigned len; /* number of bytes to look at or looked at */
+ int flags; /* temporary to save header status */
unsigned long in, out; /* temporary to save total_in and total_out */
unsigned char buf[4]; /* to restore bit buffer to byte string */
struct inflate_state FAR *state;
@@ -1433,9 +1458,15 @@ z_streamp strm;
/* return no joy or set up to restart inflate() on a new block */
if (state->have != 4) return Z_DATA_ERROR;
+ if (state->flags == -1)
+ state->wrap = 0; /* if no header yet, treat as raw */
+ else
+ state->wrap &= ~4; /* no point in computing a check value now */
+ flags = state->flags;
in = strm->total_in; out = strm->total_out;
inflateReset(strm);
strm->total_in = in; strm->total_out = out;
+ state->flags = flags;
state->mode = TYPE;
return Z_OK;
}
@@ -1531,7 +1562,7 @@ int check;
if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
state = (struct inflate_state FAR *)strm->state;
- if (check)
+ if (check && state->wrap)
state->wrap |= 4;
else
state->wrap &= ~4;
diff --git a/zlib/inflate.h b/zlib/inflate.h
index a46cce6b6d0..f127b6b1fa5 100644
--- a/zlib/inflate.h
+++ b/zlib/inflate.h
@@ -1,5 +1,5 @@
/* inflate.h -- internal inflate state definition
- * Copyright (C) 1995-2016 Mark Adler
+ * Copyright (C) 1995-2019 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -86,7 +86,8 @@ struct inflate_state {
int wrap; /* bit 0 true for zlib, bit 1 true for gzip,
bit 2 true to validate check value */
int havedict; /* true if dictionary provided */
- int flags; /* gzip header method and flags (0 if zlib) */
+ int flags; /* gzip header method and flags, 0 if zlib, or
+ -1 if raw or no header yet */
unsigned dmax; /* zlib header max distance (INFLATE_STRICT) */
unsigned long check; /* protected copy of check value */
unsigned long total; /* protected copy of output count */
diff --git a/zlib/inftrees.c b/zlib/inftrees.c
index 2ea08fc13ea..09462a740b1 100644
--- a/zlib/inftrees.c
+++ b/zlib/inftrees.c
@@ -1,5 +1,5 @@
/* inftrees.c -- generate Huffman trees for efficient decoding
- * Copyright (C) 1995-2017 Mark Adler
+ * Copyright (C) 1995-2022 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -9,7 +9,7 @@
#define MAXBITS 15
const char inflate_copyright[] =
- " inflate 1.2.11 Copyright 1995-2017 Mark Adler ";
+ " inflate 1.2.12 Copyright 1995-2022 Mark Adler ";
/*
If you use the zlib library in a product, an acknowledgment is welcome
in the documentation of your product. If for some reason you cannot
@@ -62,7 +62,7 @@ unsigned short FAR *work;
35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};
static const unsigned short lext[31] = { /* Length codes 257..285 extra */
16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,
- 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 77, 202};
+ 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 199, 202};
static const unsigned short dbase[32] = { /* Distance codes 0..29 base */
1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
diff --git a/zlib/os400/README400 b/zlib/os400/README400
index 4f98334f5ac..10f6c9d4018 100644
--- a/zlib/os400/README400
+++ b/zlib/os400/README400
@@ -1,4 +1,4 @@
- ZLIB version 1.2.11 for OS/400 installation instructions
+ ZLIB version 1.2.12 for OS/400 installation instructions
1) Download and unpack the zlib tarball to some IFS directory.
(i.e.: /path/to/the/zlib/ifs/source/directory)
diff --git a/zlib/os400/zlib.inc b/zlib/os400/zlib.inc
index c6aca2cbd6a..fda156bf958 100644
--- a/zlib/os400/zlib.inc
+++ b/zlib/os400/zlib.inc
@@ -1,7 +1,7 @@
* ZLIB.INC - Interface to the general purpose compression library
*
* ILE RPG400 version by Patrick Monnerat, DATASPHERE.
- * Version 1.2.11
+ * Version 1.2.12
*
*
* WARNING:
@@ -22,12 +22,12 @@
*
* Versioning information.
*
- D ZLIB_VERSION C '1.2.11'
+ D ZLIB_VERSION C '1.2.12'
D ZLIB_VERNUM C X'12a0'
D ZLIB_VER_MAJOR C 1
D ZLIB_VER_MINOR C 2
D ZLIB_VER_REVISION...
- D C 11
+ D C 12
D ZLIB_VER_SUBREVISION...
D C 0
*
diff --git a/zlib/qnx/package.qpg b/zlib/qnx/package.qpg
index 31e8e90db4d..badd1d5a0a7 100644
--- a/zlib/qnx/package.qpg
+++ b/zlib/qnx/package.qpg
@@ -25,10 +25,10 @@
<QPG:Files>
<QPG:Add file="../zconf.h" install="/opt/include/" user="root:sys" permission="644"/>
<QPG:Add file="../zlib.h" install="/opt/include/" user="root:sys" permission="644"/>
- <QPG:Add file="../libz.so.1.2.11" install="/opt/lib/" user="root:bin" permission="644"/>
- <QPG:Add file="libz.so" install="/opt/lib/" component="dev" filetype="symlink" linkto="libz.so.1.2.11"/>
- <QPG:Add file="libz.so.1" install="/opt/lib/" filetype="symlink" linkto="libz.so.1.2.11"/>
- <QPG:Add file="../libz.so.1.2.11" install="/opt/lib/" component="slib"/>
+ <QPG:Add file="../libz.so.1.2.12" install="/opt/lib/" user="root:bin" permission="644"/>
+ <QPG:Add file="libz.so" install="/opt/lib/" component="dev" filetype="symlink" linkto="libz.so.1.2.12"/>
+ <QPG:Add file="libz.so.1" install="/opt/lib/" filetype="symlink" linkto="libz.so.1.2.12"/>
+ <QPG:Add file="../libz.so.1.2.12" install="/opt/lib/" component="slib"/>
</QPG:Files>
<QPG:PackageFilter>
@@ -63,7 +63,7 @@
</QPM:ProductDescription>
<QPM:ReleaseDescription>
- <QPM:ReleaseVersion>1.2.11</QPM:ReleaseVersion>
+ <QPM:ReleaseVersion>1.2.12</QPM:ReleaseVersion>
<QPM:ReleaseUrgency>Medium</QPM:ReleaseUrgency>
<QPM:ReleaseStability>Stable</QPM:ReleaseStability>
<QPM:ReleaseNoteMinor></QPM:ReleaseNoteMinor>
diff --git a/zlib/test/example.c b/zlib/test/example.c
index eee17ce7c15..949f4f6256f 100644
--- a/zlib/test/example.c
+++ b/zlib/test/example.c
@@ -440,9 +440,8 @@ void test_sync(compr, comprLen, uncompr, uncomprLen)
CHECK_ERR(err, "inflateSync");
err = inflate(&d_stream, Z_FINISH);
- if (err != Z_DATA_ERROR) {
- fprintf(stderr, "inflate should report DATA_ERROR\n");
- /* Because of incorrect adler32 */
+ if (err != Z_STREAM_END) {
+ fprintf(stderr, "inflate should report Z_STREAM_END\n");
exit(1);
}
err = inflateEnd(&d_stream);
diff --git a/zlib/treebuild.xml b/zlib/treebuild.xml
index fd75525f995..781b4c98cc2 100644
--- a/zlib/treebuild.xml
+++ b/zlib/treebuild.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" ?>
-<package name="zlib" version="1.2.11">
- <library name="zlib" dlversion="1.2.11" dlname="z">
+<package name="zlib" version="1.2.12">
+ <library name="zlib" dlversion="1.2.12" dlname="z">
<property name="description"> zip compression library </property>
<property name="include-target-dir" value="$(@PACKAGE/install-includedir)" />
diff --git a/zlib/trees.c b/zlib/trees.c
index d0a09b119ab..f73fd99c37b 100644
--- a/zlib/trees.c
+++ b/zlib/trees.c
@@ -1,5 +1,5 @@
/* trees.c -- output deflated data using Huffman coding
- * Copyright (C) 1995-2017 Jean-loup Gailly
+ * Copyright (C) 1995-2021 Jean-loup Gailly
* detect_data_type() function provided freely by Cosmin Truta, 2006
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -30,7 +30,7 @@
* Addison-Wesley, 1983. ISBN 0-201-06672-6.
*/
-/* @(#) $Id: trees.c,v 1.1.1.2 2002/03/11 21:53:27 tromey Exp $ */
+/* @(#) $Id$ */
/* #define GEN_TREES_H */
@@ -149,7 +149,7 @@ local void send_all_trees OF((deflate_state *s, int lcodes, int dcodes,
local void compress_block OF((deflate_state *s, const ct_data *ltree,
const ct_data *dtree));
local int detect_data_type OF((deflate_state *s));
-local unsigned bi_reverse OF((unsigned value, int length));
+local unsigned bi_reverse OF((unsigned code, int len));
local void bi_windup OF((deflate_state *s));
local void bi_flush OF((deflate_state *s));
@@ -416,7 +416,7 @@ local void init_block(s)
s->dyn_ltree[END_BLOCK].Freq = 1;
s->opt_len = s->static_len = 0L;
- s->last_lit = s->matches = 0;
+ s->sym_next = s->matches = 0;
}
#define SMALLEST 1
@@ -870,7 +870,8 @@ void ZLIB_INTERNAL _tr_stored_block(s, buf, stored_len, last)
bi_windup(s); /* align on byte boundary */
put_short(s, (ush)stored_len);
put_short(s, (ush)~stored_len);
- zmemcpy(s->pending_buf + s->pending, (Bytef *)buf, stored_len);
+ if (stored_len)
+ zmemcpy(s->pending_buf + s->pending, (Bytef *)buf, stored_len);
s->pending += stored_len;
#ifdef ZLIB_DEBUG
s->compressed_len = (s->compressed_len + 3 + 7) & (ulg)~7L;
@@ -947,7 +948,7 @@ void ZLIB_INTERNAL _tr_flush_block(s, buf, stored_len, last)
Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ",
opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,
- s->last_lit));
+ s->sym_next / 3));
if (static_lenb <= opt_lenb) opt_lenb = static_lenb;
@@ -1016,8 +1017,9 @@ int ZLIB_INTERNAL _tr_tally (s, dist, lc)
unsigned dist; /* distance of matched string */
unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */
{
- s->d_buf[s->last_lit] = (ush)dist;
- s->l_buf[s->last_lit++] = (uch)lc;
+ s->sym_buf[s->sym_next++] = dist;
+ s->sym_buf[s->sym_next++] = dist >> 8;
+ s->sym_buf[s->sym_next++] = lc;
if (dist == 0) {
/* lc is the unmatched char */
s->dyn_ltree[lc].Freq++;
@@ -1032,30 +1034,7 @@ int ZLIB_INTERNAL _tr_tally (s, dist, lc)
s->dyn_ltree[_length_code[lc]+LITERALS+1].Freq++;
s->dyn_dtree[d_code(dist)].Freq++;
}
-
-#ifdef TRUNCATE_BLOCK
- /* Try to guess if it is profitable to stop the current block here */
- if ((s->last_lit & 0x1fff) == 0 && s->level > 2) {
- /* Compute an upper bound for the compressed length */
- ulg out_length = (ulg)s->last_lit*8L;
- ulg in_length = (ulg)((long)s->strstart - s->block_start);
- int dcode;
- for (dcode = 0; dcode < D_CODES; dcode++) {
- out_length += (ulg)s->dyn_dtree[dcode].Freq *
- (5L+extra_dbits[dcode]);
- }
- out_length >>= 3;
- Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ",
- s->last_lit, in_length, out_length,
- 100L - out_length*100L/in_length));
- if (s->matches < s->last_lit/2 && out_length < in_length/2) return 1;
- }
-#endif
- return (s->last_lit == s->lit_bufsize-1);
- /* We avoid equality with lit_bufsize because of wraparound at 64K
- * on 16 bit machines and because stored blocks are restricted to
- * 64K-1 bytes.
- */
+ return (s->sym_next == s->sym_end);
}
/* ===========================================================================
@@ -1068,13 +1047,14 @@ local void compress_block(s, ltree, dtree)
{
unsigned dist; /* distance of matched string */
int lc; /* match length or unmatched char (if dist == 0) */
- unsigned lx = 0; /* running index in l_buf */
+ unsigned sx = 0; /* running index in sym_buf */
unsigned code; /* the code to send */
int extra; /* number of extra bits to send */
- if (s->last_lit != 0) do {
- dist = s->d_buf[lx];
- lc = s->l_buf[lx++];
+ if (s->sym_next != 0) do {
+ dist = s->sym_buf[sx++] & 0xff;
+ dist += (unsigned)(s->sym_buf[sx++] & 0xff) << 8;
+ lc = s->sym_buf[sx++];
if (dist == 0) {
send_code(s, lc, ltree); /* send a literal byte */
Tracecv(isgraph(lc), (stderr," '%c' ", lc));
@@ -1099,11 +1079,10 @@ local void compress_block(s, ltree, dtree)
}
} /* literal or match pair ? */
- /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */
- Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,
- "pendingBuf overflow");
+ /* Check that the overlay between pending_buf and sym_buf is ok: */
+ Assert(s->pending < s->lit_bufsize + sx, "pendingBuf overflow");
- } while (lx < s->last_lit);
+ } while (sx < s->sym_next);
send_code(s, END_BLOCK, ltree);
}
@@ -1112,9 +1091,9 @@ local void compress_block(s, ltree, dtree)
* Check if the data type is TEXT or BINARY, using the following algorithm:
* - TEXT if the two conditions below are satisfied:
* a) There are no non-portable control characters belonging to the
- * "black list" (0..6, 14..25, 28..31).
+ * "block list" (0..6, 14..25, 28..31).
* b) There is at least one printable character belonging to the
- * "white list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).
+ * "allow list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).
* - BINARY otherwise.
* - The following partially-portable control characters form a
* "gray list" that is ignored in this detection algorithm:
@@ -1124,19 +1103,19 @@ local void compress_block(s, ltree, dtree)
local int detect_data_type(s)
deflate_state *s;
{
- /* black_mask is the bit mask of black-listed bytes
+ /* block_mask is the bit mask of block-listed bytes
* set bits 0..6, 14..25, and 28..31
* 0xf3ffc07f = binary 11110011111111111100000001111111
*/
- unsigned long black_mask = 0xf3ffc07fUL;
+ unsigned long block_mask = 0xf3ffc07fUL;
int n;
- /* Check for non-textual ("black-listed") bytes. */
- for (n = 0; n <= 31; n++, black_mask >>= 1)
- if ((black_mask & 1) && (s->dyn_ltree[n].Freq != 0))
+ /* Check for non-textual ("block-listed") bytes. */
+ for (n = 0; n <= 31; n++, block_mask >>= 1)
+ if ((block_mask & 1) && (s->dyn_ltree[n].Freq != 0))
return Z_BINARY;
- /* Check for textual ("white-listed") bytes. */
+ /* Check for textual ("allow-listed") bytes. */
if (s->dyn_ltree[9].Freq != 0 || s->dyn_ltree[10].Freq != 0
|| s->dyn_ltree[13].Freq != 0)
return Z_TEXT;
@@ -1144,7 +1123,7 @@ local int detect_data_type(s)
if (s->dyn_ltree[n].Freq != 0)
return Z_TEXT;
- /* There are no "black-listed" or "white-listed" bytes:
+ /* There are no "block-listed" or "allow-listed" bytes:
* this stream either is empty or has tolerated ("gray-listed") bytes only.
*/
return Z_BINARY;
diff --git a/zlib/uncompr.c b/zlib/uncompr.c
index a6ef81e1cde..f03a1a865e3 100644
--- a/zlib/uncompr.c
+++ b/zlib/uncompr.c
@@ -3,7 +3,7 @@
* For conditions of distribution and use, see copyright notice in zlib.h
*/
-/* @(#) $Id: uncompr.c,v 1.1.1.2 2002/03/11 21:53:27 tromey Exp $ */
+/* @(#) $Id$ */
#define ZLIB_INTERNAL
#include "zlib.h"
diff --git a/zlib/win32/Makefile.bor b/zlib/win32/Makefile.bor
index d152bbb7ffd..4495353f3f5 100644
--- a/zlib/win32/Makefile.bor
+++ b/zlib/win32/Makefile.bor
@@ -3,7 +3,6 @@
#
# Usage:
# make -f win32/Makefile.bor
-# make -f win32/Makefile.bor LOCAL_ZLIB=-DASMV OBJA=match.obj OBJPA=+match.obj
# ------------ Borland C++ ------------
diff --git a/zlib/win32/Makefile.gcc b/zlib/win32/Makefile.gcc
index 305be50afef..081e391eb29 100644
--- a/zlib/win32/Makefile.gcc
+++ b/zlib/win32/Makefile.gcc
@@ -11,10 +11,6 @@
#
# make -fwin32/Makefile.gcc; make test testdll -fwin32/Makefile.gcc
#
-# To use the asm code, type:
-# cp contrib/asm?86/match.S ./match.S
-# make LOC=-DASMV OBJA=match.o -fwin32/Makefile.gcc
-#
# To install libz.a, zconf.h and zlib.h in the system directories, type:
#
# make install -fwin32/Makefile.gcc
@@ -38,7 +34,6 @@ IMPLIB = libz.dll.a
#
SHARED_MODE=0
-#LOC = -DASMV
#LOC = -DZLIB_DEBUG -g
PREFIX =
diff --git a/zlib/win32/Makefile.msc b/zlib/win32/Makefile.msc
index 6831882de43..9c6515360e6 100644
--- a/zlib/win32/Makefile.msc
+++ b/zlib/win32/Makefile.msc
@@ -4,10 +4,6 @@
# Usage:
# nmake -f win32/Makefile.msc (standard build)
# nmake -f win32/Makefile.msc LOC=-DFOO (nonstandard build)
-# nmake -f win32/Makefile.msc LOC="-DASMV -DASMINF" \
-# OBJA="inffas32.obj match686.obj" (use ASM code, x86)
-# nmake -f win32/Makefile.msc AS=ml64 LOC="-DASMV -DASMINF -I." \
-# OBJA="inffasx64.obj gvmat64.obj inffas8664.obj" (use ASM code, x64)
# The toplevel directory of the source tree.
#
diff --git a/zlib/win32/README-WIN32.txt b/zlib/win32/README-WIN32.txt
index df7ab7f4b34..536cfec6f67 100644
--- a/zlib/win32/README-WIN32.txt
+++ b/zlib/win32/README-WIN32.txt
@@ -1,6 +1,6 @@
ZLIB DATA COMPRESSION LIBRARY
-zlib 1.2.11 is a general purpose data compression library. All the code is
+zlib 1.2.12 is a general purpose data compression library. All the code is
thread safe. The data format used by the zlib library is described by RFCs
(Request for Comments) 1950 to 1952 in the files
http://www.ietf.org/rfc/rfc1950.txt (zlib format), rfc1951.txt (deflate format)
@@ -22,7 +22,7 @@ before asking for help.
Manifest:
-The package zlib-1.2.11-win32-x86.zip will contain the following files:
+The package zlib-1.2.12-win32-x86.zip will contain the following files:
README-WIN32.txt This document
ChangeLog Changes since previous zlib packages
diff --git a/zlib/win32/zlib.def b/zlib/win32/zlib.def
index 0cb3f5d48b9..53c80115fcb 100644
--- a/zlib/win32/zlib.def
+++ b/zlib/win32/zlib.def
@@ -69,6 +69,7 @@ EXPORTS
gzoffset64
adler32_combine64
crc32_combine64
+ crc32_combine_gen64
; checksum functions
adler32
adler32_z
@@ -76,6 +77,8 @@ EXPORTS
crc32_z
adler32_combine
crc32_combine
+ crc32_combine_gen
+ crc32_combine_op
; various hacks, don't look :)
deflateInit_
deflateInit2_
@@ -91,3 +94,4 @@ EXPORTS
inflateCodesUsed
inflateResetKeep
deflateResetKeep
+ gzopen_w
diff --git a/zlib/zconf.h b/zlib/zconf.h
index b399839aa95..5e1d68a004e 100644
--- a/zlib/zconf.h
+++ b/zlib/zconf.h
@@ -3,7 +3,7 @@
* For conditions of distribution and use, see copyright notice in zlib.h
*/
-/* @(#) $Id: zconf.h,v 1.1.1.2 2002/03/11 21:53:27 tromey Exp $ */
+/* @(#) $Id$ */
#ifndef ZCONF_H
#define ZCONF_H
@@ -531,20 +531,4 @@ typedef uLong FAR uLongf;
#pragma map(inflate_copyright,"INCOPY")
#endif
-/* Solaris 2.5.1 doesn't have vsnprintf */
-#if defined(__sun) && defined(__svr4__)
-#include <sys/feature_tests.h>
-#if _XOPEN_VERSION < 3
-#define NO_vsnprintf
-#endif
-#endif
-
-/* Tru64 UNIX V4.0 neither */
-#if defined(__alpha) && defined(__osf__)
-#include <unistd.h>
-#if _XOPEN_VERSION < 500
-#define NO_vsnprintf
-#endif
-#endif
-
#endif /* ZCONF_H */
diff --git a/zlib/zlib.3 b/zlib/zlib.3
index bda4eb07370..bcaebd9f02c 100644
--- a/zlib/zlib.3
+++ b/zlib/zlib.3
@@ -1,4 +1,4 @@
-.TH ZLIB 3 "15 Jan 2017"
+.TH ZLIB 3 "27 Mar 2022"
.SH NAME
zlib \- compression/decompression library
.SH SYNOPSIS
@@ -105,9 +105,9 @@ before asking for help.
Send questions and/or comments to zlib@gzip.org,
or (for the Windows DLL version) to Gilles Vollant (info@winimage.com).
.SH AUTHORS AND LICENSE
-Version 1.2.11
+Version 1.2.12
.LP
-Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler
+Copyright (C) 1995-2022 Jean-loup Gailly and Mark Adler
.LP
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
diff --git a/zlib/zlib.3.pdf b/zlib/zlib.3.pdf
new file mode 100644
index 00000000000..54d677ab017
--- /dev/null
+++ b/zlib/zlib.3.pdf
Binary files differ
diff --git a/zlib/zlib.h b/zlib/zlib.h
index 49dfcece0e1..4a98e38bf34 100644
--- a/zlib/zlib.h
+++ b/zlib/zlib.h
@@ -1,7 +1,7 @@
/* zlib.h -- interface of the 'zlib' general purpose compression library
- version 1.2.11, January 15th, 2017
+ version 1.2.12, March 11th, 2022
- Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler
+ Copyright (C) 1995-2022 Jean-loup Gailly and Mark Adler
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -37,11 +37,11 @@
extern "C" {
#endif
-#define ZLIB_VERSION "1.2.11"
-#define ZLIB_VERNUM 0x12b0
+#define ZLIB_VERSION "1.2.12"
+#define ZLIB_VERNUM 0x12c0
#define ZLIB_VER_MAJOR 1
#define ZLIB_VER_MINOR 2
-#define ZLIB_VER_REVISION 11
+#define ZLIB_VER_REVISION 12
#define ZLIB_VER_SUBREVISION 0
/*
@@ -543,8 +543,7 @@ ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm,
int strategy));
This is another version of deflateInit with more compression options. The
- fields next_in, zalloc, zfree and opaque must be initialized before by the
- caller.
+ fields zalloc, zfree and opaque must be initialized before by the caller.
The method parameter is the compression method. It must be Z_DEFLATED in
this version of the library.
@@ -712,11 +711,12 @@ ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm,
used to switch between compression and straight copy of the input data, or
to switch to a different kind of input data requiring a different strategy.
If the compression approach (which is a function of the level) or the
- strategy is changed, and if any input has been consumed in a previous
- deflate() call, then the input available so far is compressed with the old
- level and strategy using deflate(strm, Z_BLOCK). There are three approaches
- for the compression levels 0, 1..3, and 4..9 respectively. The new level
- and strategy will take effect at the next call of deflate().
+ strategy is changed, and if there have been any deflate() calls since the
+ state was initialized or reset, then the input available so far is
+ compressed with the old level and strategy using deflate(strm, Z_BLOCK).
+ There are three approaches for the compression levels 0, 1..3, and 4..9
+ respectively. The new level and strategy will take effect at the next call
+ of deflate().
If a deflate(strm, Z_BLOCK) is performed by deflateParams(), and it does
not have enough output space to complete, then the parameter change will not
@@ -865,9 +865,11 @@ ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm,
detection, or add 16 to decode only the gzip format (the zlib format will
return a Z_DATA_ERROR). If a gzip stream is being decoded, strm->adler is a
CRC-32 instead of an Adler-32. Unlike the gunzip utility and gzread() (see
- below), inflate() will not automatically decode concatenated gzip streams.
- inflate() will return Z_STREAM_END at the end of the gzip stream. The state
- would need to be reset to continue decoding a subsequent gzip stream.
+ below), inflate() will *not* automatically decode concatenated gzip members.
+ inflate() will return Z_STREAM_END at the end of the gzip member. The state
+ would need to be reset to continue decoding a subsequent gzip member. This
+ *must* be done if there is more data after a gzip member, in order for the
+ decompression to be compliant with the gzip standard (RFC 1952).
inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
memory, Z_VERSION_ERROR if the zlib library version is incompatible with the
@@ -1302,14 +1304,14 @@ typedef struct gzFile_s *gzFile; /* semi-opaque gzip file descriptor */
/*
ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode));
- Opens a gzip (.gz) file for reading or writing. The mode parameter is as
- in fopen ("rb" or "wb") but can also include a compression level ("wb9") or
- a strategy: 'f' for filtered data as in "wb6f", 'h' for Huffman-only
- compression as in "wb1h", 'R' for run-length encoding as in "wb1R", or 'F'
- for fixed code compression as in "wb9F". (See the description of
- deflateInit2 for more information about the strategy parameter.) 'T' will
- request transparent writing or appending with no compression and not using
- the gzip format.
+ Open the gzip (.gz) file at path for reading and decompressing, or
+ compressing and writing. The mode parameter is as in fopen ("rb" or "wb")
+ but can also include a compression level ("wb9") or a strategy: 'f' for
+ filtered data as in "wb6f", 'h' for Huffman-only compression as in "wb1h",
+ 'R' for run-length encoding as in "wb1R", or 'F' for fixed code compression
+ as in "wb9F". (See the description of deflateInit2 for more information
+ about the strategy parameter.) 'T' will request transparent writing or
+ appending with no compression and not using the gzip format.
"a" can be used instead of "w" to request that the gzip stream that will
be written be appended to the file. "+" will result in an error, since
@@ -1339,9 +1341,9 @@ ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode));
ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode));
/*
- gzdopen associates a gzFile with the file descriptor fd. File descriptors
- are obtained from calls like open, dup, creat, pipe or fileno (if the file
- has been previously opened with fopen). The mode parameter is as in gzopen.
+ Associate a gzFile with the file descriptor fd. File descriptors are
+ obtained from calls like open, dup, creat, pipe or fileno (if the file has
+ been previously opened with fopen). The mode parameter is as in gzopen.
The next call of gzclose on the returned gzFile will also close the file
descriptor fd, just like fclose(fdopen(fd, mode)) closes the file descriptor
@@ -1362,13 +1364,13 @@ ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode));
ZEXTERN int ZEXPORT gzbuffer OF((gzFile file, unsigned size));
/*
- Set the internal buffer size used by this library's functions. The
- default buffer size is 8192 bytes. This function must be called after
- gzopen() or gzdopen(), and before any other calls that read or write the
- file. The buffer memory allocation is always deferred to the first read or
- write. Three times that size in buffer space is allocated. A larger buffer
- size of, for example, 64K or 128K bytes will noticeably increase the speed
- of decompression (reading).
+ Set the internal buffer size used by this library's functions for file to
+ size. The default buffer size is 8192 bytes. This function must be called
+ after gzopen() or gzdopen(), and before any other calls that read or write
+ the file. The buffer memory allocation is always deferred to the first read
+ or write. Three times that size in buffer space is allocated. A larger
+ buffer size of, for example, 64K or 128K bytes will noticeably increase the
+ speed of decompression (reading).
The new buffer size also affects the maximum length for gzprintf().
@@ -1378,9 +1380,9 @@ ZEXTERN int ZEXPORT gzbuffer OF((gzFile file, unsigned size));
ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy));
/*
- Dynamically update the compression level or strategy. See the description
- of deflateInit2 for the meaning of these parameters. Previously provided
- data is flushed before the parameter change.
+ Dynamically update the compression level and strategy for file. See the
+ description of deflateInit2 for the meaning of these parameters. Previously
+ provided data is flushed before applying the parameter changes.
gzsetparams returns Z_OK if success, Z_STREAM_ERROR if the file was not
opened for writing, Z_ERRNO if there is an error writing the flushed data,
@@ -1389,7 +1391,7 @@ ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy));
ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len));
/*
- Reads the given number of uncompressed bytes from the compressed file. If
+ Read and decompress up to len uncompressed bytes from file into buf. If
the input file is not in gzip format, gzread copies the given number of
bytes into the buffer directly from the file.
@@ -1420,11 +1422,11 @@ ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len));
ZEXTERN z_size_t ZEXPORT gzfread OF((voidp buf, z_size_t size, z_size_t nitems,
gzFile file));
/*
- Read up to nitems items of size size from file to buf, otherwise operating
- as gzread() does. This duplicates the interface of stdio's fread(), with
- size_t request and return types. If the library defines size_t, then
- z_size_t is identical to size_t. If not, then z_size_t is an unsigned
- integer type that can contain a pointer.
+ Read and decompress up to nitems items of size size from file into buf,
+ otherwise operating as gzread() does. This duplicates the interface of
+ stdio's fread(), with size_t request and return types. If the library
+ defines size_t, then z_size_t is identical to size_t. If not, then z_size_t
+ is an unsigned integer type that can contain a pointer.
gzfread() returns the number of full items read of size size, or zero if
the end of the file was reached and a full item could not be read, or if
@@ -1443,18 +1445,16 @@ ZEXTERN z_size_t ZEXPORT gzfread OF((voidp buf, z_size_t size, z_size_t nitems,
file, reseting and retrying on end-of-file, when size is not 1.
*/
-ZEXTERN int ZEXPORT gzwrite OF((gzFile file,
- voidpc buf, unsigned len));
+ZEXTERN int ZEXPORT gzwrite OF((gzFile file, voidpc buf, unsigned len));
/*
- Writes the given number of uncompressed bytes into the compressed file.
- gzwrite returns the number of uncompressed bytes written or 0 in case of
- error.
+ Compress and write the len uncompressed bytes at buf to file. gzwrite
+ returns the number of uncompressed bytes written or 0 in case of error.
*/
ZEXTERN z_size_t ZEXPORT gzfwrite OF((voidpc buf, z_size_t size,
z_size_t nitems, gzFile file));
/*
- gzfwrite() writes nitems items of size size from buf to file, duplicating
+ Compress and write nitems items of size size from buf to file, duplicating
the interface of stdio's fwrite(), with size_t request and return types. If
the library defines size_t, then z_size_t is identical to size_t. If not,
then z_size_t is an unsigned integer type that can contain a pointer.
@@ -1467,22 +1467,22 @@ ZEXTERN z_size_t ZEXPORT gzfwrite OF((voidpc buf, z_size_t size,
ZEXTERN int ZEXPORTVA gzprintf Z_ARG((gzFile file, const char *format, ...));
/*
- Converts, formats, and writes the arguments to the compressed file under
- control of the format string, as in fprintf. gzprintf returns the number of
+ Convert, format, compress, and write the arguments (...) to file under
+ control of the string format, as in fprintf. gzprintf returns the number of
uncompressed bytes actually written, or a negative zlib error code in case
of error. The number of uncompressed bytes written is limited to 8191, or
one less than the buffer size given to gzbuffer(). The caller should assure
that this limit is not exceeded. If it is exceeded, then gzprintf() will
return an error (0) with nothing written. In this case, there may also be a
buffer overflow with unpredictable consequences, which is possible only if
- zlib was compiled with the insecure functions sprintf() or vsprintf()
+ zlib was compiled with the insecure functions sprintf() or vsprintf(),
because the secure snprintf() or vsnprintf() functions were not available.
This can be determined using zlibCompileFlags().
*/
ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s));
/*
- Writes the given null-terminated string to the compressed file, excluding
+ Compress and write the given null-terminated string s to file, excluding
the terminating null character.
gzputs returns the number of characters written, or -1 in case of error.
@@ -1490,11 +1490,12 @@ ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s));
ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len));
/*
- Reads bytes from the compressed file until len-1 characters are read, or a
- newline character is read and transferred to buf, or an end-of-file
- condition is encountered. If any characters are read or if len == 1, the
- string is terminated with a null character. If no characters are read due
- to an end-of-file or len < 1, then the buffer is left untouched.
+ Read and decompress bytes from file into buf, until len-1 characters are
+ read, or until a newline character is read and transferred to buf, or an
+ end-of-file condition is encountered. If any characters are read or if len
+ is one, the string is terminated with a null character. If no characters
+ are read due to an end-of-file or len is less than one, then the buffer is
+ left untouched.
gzgets returns buf which is a null-terminated string, or it returns NULL
for end-of-file or in case of error. If there was an error, the contents at
@@ -1503,13 +1504,13 @@ ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len));
ZEXTERN int ZEXPORT gzputc OF((gzFile file, int c));
/*
- Writes c, converted to an unsigned char, into the compressed file. gzputc
+ Compress and write c, converted to an unsigned char, into file. gzputc
returns the value that was written, or -1 in case of error.
*/
ZEXTERN int ZEXPORT gzgetc OF((gzFile file));
/*
- Reads one byte from the compressed file. gzgetc returns this byte or -1
+ Read and decompress one byte from file. gzgetc returns this byte or -1
in case of end of file or error. This is implemented as a macro for speed.
As such, it does not do all of the checking the other functions do. I.e.
it does not check to see if file is NULL, nor whether the structure file
@@ -1518,8 +1519,8 @@ ZEXTERN int ZEXPORT gzgetc OF((gzFile file));
ZEXTERN int ZEXPORT gzungetc OF((int c, gzFile file));
/*
- Push one character back onto the stream to be read as the first character
- on the next read. At least one character of push-back is allowed.
+ Push c back onto the stream for file to be read as the first character on
+ the next read. At least one character of push-back is always allowed.
gzungetc() returns the character pushed, or -1 on failure. gzungetc() will
fail if c is -1, and may fail if a character has been pushed but not read
yet. If gzungetc is used immediately after gzopen or gzdopen, at least the
@@ -1530,9 +1531,9 @@ ZEXTERN int ZEXPORT gzungetc OF((int c, gzFile file));
ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush));
/*
- Flushes all pending output into the compressed file. The parameter flush
- is as in the deflate() function. The return value is the zlib error number
- (see function gzerror below). gzflush is only permitted when writing.
+ Flush all pending output to file. The parameter flush is as in the
+ deflate() function. The return value is the zlib error number (see function
+ gzerror below). gzflush is only permitted when writing.
If the flush parameter is Z_FINISH, the remaining data is written and the
gzip stream is completed in the output. If gzwrite() is called again, a new
@@ -1547,8 +1548,8 @@ ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush));
ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file,
z_off_t offset, int whence));
- Sets the starting position for the next gzread or gzwrite on the given
- compressed file. The offset represents a number of bytes in the
+ Set the starting position to offset relative to whence for the next gzread
+ or gzwrite on file. The offset represents a number of bytes in the
uncompressed data stream. The whence parameter is defined as in lseek(2);
the value SEEK_END is not supported.
@@ -1565,18 +1566,18 @@ ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file,
ZEXTERN int ZEXPORT gzrewind OF((gzFile file));
/*
- Rewinds the given file. This function is supported only for reading.
+ Rewind file. This function is supported only for reading.
- gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET)
+ gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET).
*/
/*
ZEXTERN z_off_t ZEXPORT gztell OF((gzFile file));
- Returns the starting position for the next gzread or gzwrite on the given
- compressed file. This position represents a number of bytes in the
- uncompressed data stream, and is zero when starting, even if appending or
- reading a gzip stream from the middle of a file using gzdopen().
+ Return the starting position for the next gzread or gzwrite on file.
+ This position represents a number of bytes in the uncompressed data stream,
+ and is zero when starting, even if appending or reading a gzip stream from
+ the middle of a file using gzdopen().
gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR)
*/
@@ -1584,22 +1585,22 @@ ZEXTERN z_off_t ZEXPORT gztell OF((gzFile file));
/*
ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile file));
- Returns the current offset in the file being read or written. This offset
- includes the count of bytes that precede the gzip stream, for example when
- appending or when using gzdopen() for reading. When reading, the offset
- does not include as yet unused buffered input. This information can be used
- for a progress indicator. On error, gzoffset() returns -1.
+ Return the current compressed (actual) read or write offset of file. This
+ offset includes the count of bytes that precede the gzip stream, for example
+ when appending or when using gzdopen() for reading. When reading, the
+ offset does not include as yet unused buffered input. This information can
+ be used for a progress indicator. On error, gzoffset() returns -1.
*/
ZEXTERN int ZEXPORT gzeof OF((gzFile file));
/*
- Returns true (1) if the end-of-file indicator has been set while reading,
- false (0) otherwise. Note that the end-of-file indicator is set only if the
- read tried to go past the end of the input, but came up short. Therefore,
- just like feof(), gzeof() may return false even if there is no more data to
- read, in the event that the last read request was for the exact number of
- bytes remaining in the input file. This will happen if the input file size
- is an exact multiple of the buffer size.
+ Return true (1) if the end-of-file indicator for file has been set while
+ reading, false (0) otherwise. Note that the end-of-file indicator is set
+ only if the read tried to go past the end of the input, but came up short.
+ Therefore, just like feof(), gzeof() may return false even if there is no
+ more data to read, in the event that the last read request was for the exact
+ number of bytes remaining in the input file. This will happen if the input
+ file size is an exact multiple of the buffer size.
If gzeof() returns true, then the read functions will return no more data,
unless the end-of-file indicator is reset by gzclearerr() and the input file
@@ -1608,7 +1609,7 @@ ZEXTERN int ZEXPORT gzeof OF((gzFile file));
ZEXTERN int ZEXPORT gzdirect OF((gzFile file));
/*
- Returns true (1) if file is being copied directly while reading, or false
+ Return true (1) if file is being copied directly while reading, or false
(0) if file is a gzip stream being decompressed.
If the input file is empty, gzdirect() will return true, since the input
@@ -1629,8 +1630,8 @@ ZEXTERN int ZEXPORT gzdirect OF((gzFile file));
ZEXTERN int ZEXPORT gzclose OF((gzFile file));
/*
- Flushes all pending output if necessary, closes the compressed file and
- deallocates the (de)compression state. Note that once file is closed, you
+ Flush all pending output for file, if necessary, close file and
+ deallocate the (de)compression state. Note that once file is closed, you
cannot call gzerror with file, since its structures have been deallocated.
gzclose must not be called more than once on the same file, just as free
must not be called more than once on the same allocation.
@@ -1654,10 +1655,10 @@ ZEXTERN int ZEXPORT gzclose_w OF((gzFile file));
ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum));
/*
- Returns the error message for the last error which occurred on the given
- compressed file. errnum is set to zlib error number. If an error occurred
- in the file system and not in the compression library, errnum is set to
- Z_ERRNO and the application may consult errno to get the exact error code.
+ Return the error message for the last error which occurred on file.
+ errnum is set to zlib error number. If an error occurred in the file system
+ and not in the compression library, errnum is set to Z_ERRNO and the
+ application may consult errno to get the exact error code.
The application must not modify the returned string. Future calls to
this function may invalidate the previously returned string. If file is
@@ -1670,7 +1671,7 @@ ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum));
ZEXTERN void ZEXPORT gzclearerr OF((gzFile file));
/*
- Clears the error and end-of-file flags for file. This is analogous to the
+ Clear the error and end-of-file flags for file. This is analogous to the
clearerr() function in stdio. This is useful for continuing to read a gzip
file that is being written concurrently.
*/
@@ -1688,8 +1689,9 @@ ZEXTERN void ZEXPORT gzclearerr OF((gzFile file));
ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len));
/*
Update a running Adler-32 checksum with the bytes buf[0..len-1] and
- return the updated checksum. If buf is Z_NULL, this function returns the
- required initial value for the checksum.
+ return the updated checksum. An Adler-32 value is in the range of a 32-bit
+ unsigned integer. If buf is Z_NULL, this function returns the required
+ initial value for the checksum.
An Adler-32 checksum is almost as reliable as a CRC-32 but can be computed
much faster.
@@ -1722,12 +1724,13 @@ ZEXTERN uLong ZEXPORT adler32_combine OF((uLong adler1, uLong adler2,
negative, the result has no meaning or utility.
*/
-ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len));
+ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len));
/*
Update a running CRC-32 with the bytes buf[0..len-1] and return the
- updated CRC-32. If buf is Z_NULL, this function returns the required
- initial value for the crc. Pre- and post-conditioning (one's complement) is
- performed within this function so it shouldn't be done by the application.
+ updated CRC-32. A CRC-32 value is in the range of a 32-bit unsigned integer.
+ If buf is Z_NULL, this function returns the required initial value for the
+ crc. Pre- and post-conditioning (one's complement) is performed within this
+ function so it shouldn't be done by the application.
Usage example:
@@ -1739,7 +1742,7 @@ ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len));
if (crc != original_crc) error();
*/
-ZEXTERN uLong ZEXPORT crc32_z OF((uLong adler, const Bytef *buf,
+ZEXTERN uLong ZEXPORT crc32_z OF((uLong crc, const Bytef *buf,
z_size_t len));
/*
Same as crc32(), but with a size_t length.
@@ -1755,6 +1758,20 @@ ZEXTERN uLong ZEXPORT crc32_combine OF((uLong crc1, uLong crc2, z_off_t len2));
len2.
*/
+/*
+ZEXTERN uLong ZEXPORT crc32_combine_gen OF((z_off_t len2));
+
+ Return the operator corresponding to length len2, to be used with
+ crc32_combine_op().
+*/
+
+ZEXTERN uLong ZEXPORT crc32_combine_op OF((uLong crc1, uLong crc2, uLong op));
+/*
+ Give the same result as crc32_combine(), using op in place of len2. op is
+ is generated from len2 by crc32_combine_gen(). This will be faster than
+ crc32_combine() if the generated op is used more than once.
+*/
+
/* various hacks, don't look :) */
@@ -1842,6 +1859,7 @@ ZEXTERN int ZEXPORT gzgetc_ OF((gzFile file)); /* backward compatibility */
ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((gzFile));
ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off64_t));
ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off64_t));
+ ZEXTERN uLong ZEXPORT crc32_combine_gen64 OF((z_off64_t));
#endif
#if !defined(ZLIB_INTERNAL) && defined(Z_WANT64)
@@ -1852,6 +1870,7 @@ ZEXTERN int ZEXPORT gzgetc_ OF((gzFile file)); /* backward compatibility */
# define z_gzoffset z_gzoffset64
# define z_adler32_combine z_adler32_combine64
# define z_crc32_combine z_crc32_combine64
+# define z_crc32_combine_gen z_crc32_combine_gen64
# else
# define gzopen gzopen64
# define gzseek gzseek64
@@ -1859,6 +1878,7 @@ ZEXTERN int ZEXPORT gzgetc_ OF((gzFile file)); /* backward compatibility */
# define gzoffset gzoffset64
# define adler32_combine adler32_combine64
# define crc32_combine crc32_combine64
+# define crc32_combine_gen crc32_combine_gen64
# endif
# ifndef Z_LARGE64
ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *));
@@ -1867,6 +1887,7 @@ ZEXTERN int ZEXPORT gzgetc_ OF((gzFile file)); /* backward compatibility */
ZEXTERN z_off_t ZEXPORT gzoffset64 OF((gzFile));
ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off_t));
ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t));
+ ZEXTERN uLong ZEXPORT crc32_combine_gen64 OF((z_off_t));
# endif
#else
ZEXTERN gzFile ZEXPORT gzopen OF((const char *, const char *));
@@ -1875,12 +1896,14 @@ ZEXTERN int ZEXPORT gzgetc_ OF((gzFile file)); /* backward compatibility */
ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile));
ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t));
ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t));
+ ZEXTERN uLong ZEXPORT crc32_combine_gen OF((z_off_t));
#endif
#else /* Z_SOLO */
ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t));
ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t));
+ ZEXTERN uLong ZEXPORT crc32_combine_gen OF((z_off_t));
#endif /* !Z_SOLO */
diff --git a/zlib/zlib.map b/zlib/zlib.map
index 40fa9db2bce..b330b606feb 100644
--- a/zlib/zlib.map
+++ b/zlib/zlib.map
@@ -92,3 +92,9 @@ ZLIB_1.2.9 {
adler32_z;
crc32_z;
} ZLIB_1.2.7.1;
+
+ZLIB_1.2.12 {
+ crc32_combine_gen;
+ crc32_combine_gen64;
+ crc32_combine_op;
+} ZLIB_1.2.9;
diff --git a/zlib/zutil.c b/zlib/zutil.c
index 08787c6f5d5..dcab28a0d51 100644
--- a/zlib/zutil.c
+++ b/zlib/zutil.c
@@ -3,7 +3,7 @@
* For conditions of distribution and use, see copyright notice in zlib.h
*/
-/* @(#) $Id: zutil.c,v 1.1.1.2 2002/03/11 21:53:27 tromey Exp $ */
+/* @(#) $Id$ */
#include "zutil.h"
#ifndef Z_SOLO
@@ -136,8 +136,8 @@ const char * ZEXPORT zError(err)
return ERR_MSG(err);
}
-#if defined(_WIN32_WCE)
- /* The Microsoft C Run-Time Library for Windows CE doesn't have
+#if defined(_WIN32_WCE) && _WIN32_WCE < 0x800
+ /* The older Microsoft C Run-Time Library for Windows CE doesn't have
* errno. We define it as a global variable to simplify porting.
* Its value is always 0 and should not be used.
*/
diff --git a/zlib/zutil.h b/zlib/zutil.h
index 4b596adf629..d9a20ae1bf4 100644
--- a/zlib/zutil.h
+++ b/zlib/zutil.h
@@ -1,5 +1,5 @@
/* zutil.h -- internal interface and configuration of the compression library
- * Copyright (C) 1995-2016 Jean-loup Gailly, Mark Adler
+ * Copyright (C) 1995-2022 Jean-loup Gailly, Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -8,7 +8,7 @@
subject to change. Applications should only use zlib.h.
*/
-/* @(#) $Id: zutil.h,v 1.1.1.2 2002/03/11 21:53:28 tromey Exp $ */
+/* @(#) $Id$ */
#ifndef ZUTIL_H
#define ZUTIL_H
@@ -29,10 +29,6 @@
# include <stdlib.h>
#endif
-#ifdef Z_SOLO
- typedef long ptrdiff_t; /* guess -- will be caught if guess is wrong */
-#endif
-
#ifndef local
# define local static
#endif
@@ -46,6 +42,17 @@ typedef unsigned short ush;
typedef ush FAR ushf;
typedef unsigned long ulg;
+#if !defined(Z_U8) && !defined(Z_SOLO) && defined(STDC)
+# include <limits.h>
+# if (ULONG_MAX == 0xffffffffffffffff)
+# define Z_U8 unsigned long
+# elif (ULLONG_MAX == 0xffffffffffffffff)
+# define Z_U8 unsigned long long
+# elif (UINT_MAX == 0xffffffffffffffff)
+# define Z_U8 unsigned
+# endif
+#endif
+
extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
/* (size given to avoid silly warnings with Visual C++) */
@@ -170,10 +177,6 @@ extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
#if (defined(_MSC_VER) && (_MSC_VER > 600)) && !defined __INTERIX
# if defined(_WIN32_WCE)
# define fdopen(fd,mode) NULL /* No fdopen() */
-# ifndef _PTRDIFF_T_DEFINED
- typedef int ptrdiff_t;
-# define _PTRDIFF_T_DEFINED
-# endif
# else
# define fdopen(fd,type) _fdopen(fd,type)
# endif